From fe554a8bfdf2fa6e22c4991655860165c0855b08 Mon Sep 17 00:00:00 2001 From: Monobikash Das Date: Thu, 19 May 2022 18:06:21 +0530 Subject: [PATCH 001/860] Changing to requestURI --- .../io/mosip/mimoto/controller/CredentialShareController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java b/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java index 23f1cb5a2..aa2d9677a 100644 --- a/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java +++ b/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java @@ -82,7 +82,7 @@ public class CredentialShareController { * @throws Exception */ @PostMapping(path = "/callback/notify", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) - @PreAuthenticateContentAndVerifyIntent(secret = "${mosip.event.secret}", callback = "${mosip.event.callBackUrl}", topic = "${mosip.event.topic}") + @PreAuthenticateContentAndVerifyIntent(secret = "${mosip.event.secret}", callback = "/v1/mimoto/credentialshare/callback/notify", topic = "${mosip.event.topic}") public ResponseEntity handleSubscribeEvent(@RequestBody EventModel eventModel) throws Exception { logger.info("Received websub event:: transaction id = " + eventModel.getEvent().getTransactionId()); From 6ebcd2397e3db000f02d089ceb253e933d7794bb Mon Sep 17 00:00:00 2001 From: gaganama Date: Tue, 24 May 2022 18:11:46 +0530 Subject: [PATCH 002/860] [DSD-1039] commented out slack notifications from push_trigger.yml. --- .github/workflows/push_trigger.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/push_trigger.yml b/.github/workflows/push_trigger.yml index 2434c9495..45c7ca09e 100644 --- a/.github/workflows/push_trigger.yml +++ b/.github/workflows/push_trigger.yml @@ -121,13 +121,13 @@ jobs: env: GITHUB_TOKEN: ${{secrets.RELEASE_TOKEN}} GPG_TTY: $(tty) - - uses: 8398a7/action-slack@v3 - with: - status: ${{ job.status }} - fields: repo,message,author,workflow # selectable (default: repo,message) - env: - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_DEVOPS_WEBHOOK }} # required - if: failure() # Pick up events even if the job fails or is canceled. + # - uses: 8398a7/action-slack@v3 + # with: + # status: ${{ job.status }} + # fields: repo,message,author,workflow # selectable (default: repo,message) + # env: + # SLACK_WEBHOOK_URL: ${{ secrets.SLACK_DEVOPS_WEBHOOK }} # required + # if: failure() # Pick up events even if the job fails or is canceled. mimoto-docker: From f5c997d1e237683f0dfe1f4a7113acf47098870a Mon Sep 17 00:00:00 2001 From: ckm007 Date: Wed, 29 Jun 2022 08:00:39 +0000 Subject: [PATCH 003/860] updated pom version --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 3921015a8..b84ea8e42 100644 --- a/pom.xml +++ b/pom.xml @@ -19,8 +19,8 @@ UTF-8 - 1.2.0 - 1.2.0 + 1.2.1-SNAPSHOT + 1.2.1-SNAPSHOT 11 From 7661a1a9af897cf189d4c15294ca196fc6aec98b Mon Sep 17 00:00:00 2001 From: Keshav Mishra Date: Tue, 19 Jul 2022 08:31:50 +0530 Subject: [PATCH 004/860] [MOSIP-20028] added action for tagging --- .github/workflows/tag.yaml | 43 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 .github/workflows/tag.yaml diff --git a/.github/workflows/tag.yaml b/.github/workflows/tag.yaml new file mode 100644 index 000000000..e9bba0e65 --- /dev/null +++ b/.github/workflows/tag.yaml @@ -0,0 +1,43 @@ +name: Tagging of repos + +env: + tag: v1.2.3 + +on: + workflow_dispatch: + inputs: + tag: + description: 'Tag to be published' + required: true + default: 'v1.2.3' + type: string + body: + description: 'Release body message' + required: true + default: 'Changes in this Release' + type: string + pre-release: + description: 'Pre-release? True/False' + required: true + default: False + type: string + +jobs: + build: + name: Create Release + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v2 + - name: Create Release + id: create_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token + with: + tag_name: ${{ github.event.inputs.tag }} + release_name: ${{ github.event.inputs.tag }} + body: | + ${{ github.event.inputs.body }} + draft: false + prerelease: ${{fromJSON(github.event.inputs.pre-release)}} From 27a4773a62282d3fdbc2c11acfde411cfdaf34a5 Mon Sep 17 00:00:00 2001 From: Monobikash Das Date: Mon, 8 Aug 2022 19:33:58 +0530 Subject: [PATCH 005/860] Added resident apis --- .../io/mosip/mimoto/constant/ApiName.java | 2 + .../controller/ResidentServiceController.java | 42 +++++++++++++++---- .../dto/mimoto/AidStatusRequestDTO.java | 12 ++++++ .../dto/mimoto/IndividualIdOtpRequestDTO.java | 12 ++++++ .../dto/resident/AidStatusResponseDTO.java | 13 ++++++ .../resident/IndividualIdOTPRequestDTO.java | 19 +++++++++ .../resources/application-local.properties | 7 +++- 7 files changed, 98 insertions(+), 9 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/AidStatusRequestDTO.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/IndividualIdOtpRequestDTO.java create mode 100644 src/main/java/io/mosip/mimoto/dto/resident/AidStatusResponseDTO.java create mode 100644 src/main/java/io/mosip/mimoto/dto/resident/IndividualIdOTPRequestDTO.java diff --git a/src/main/java/io/mosip/mimoto/constant/ApiName.java b/src/main/java/io/mosip/mimoto/constant/ApiName.java index bea12ea47..d45d7dc18 100644 --- a/src/main/java/io/mosip/mimoto/constant/ApiName.java +++ b/src/main/java/io/mosip/mimoto/constant/ApiName.java @@ -103,4 +103,6 @@ public enum ApiName { RESIDENT_CREDENTIAL_REQUEST_STATUS, RESIDENT_AUTH_LOCK, RESIDENT_AUTH_UNLOCK, + RESIDENT_INDIVIDUALID_OTP, + RESIDENT_AID_GET_INDIVIDUALID } diff --git a/src/main/java/io/mosip/mimoto/controller/ResidentServiceController.java b/src/main/java/io/mosip/mimoto/controller/ResidentServiceController.java index 19d727c82..5806eafdf 100644 --- a/src/main/java/io/mosip/mimoto/controller/ResidentServiceController.java +++ b/src/main/java/io/mosip/mimoto/controller/ResidentServiceController.java @@ -1,5 +1,8 @@ package io.mosip.mimoto.controller; +import io.mosip.mimoto.dto.mimoto.AidStatusRequestDTO; +import io.mosip.mimoto.dto.mimoto.IndividualIdOtpRequestDTO; +import io.mosip.mimoto.dto.resident.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.core.env.Environment; @@ -16,13 +19,6 @@ import io.mosip.mimoto.core.http.ResponseWrapper; import io.mosip.mimoto.dto.mimoto.AppOTPRequestDTO; import io.mosip.mimoto.dto.mimoto.AppVIDGenerateRequestDTO; -import io.mosip.mimoto.dto.resident.AuthLockRequestDTO; -import io.mosip.mimoto.dto.resident.AuthLockUnlockResponseDTO; -import io.mosip.mimoto.dto.resident.AuthUnlockRequestDTO; -import io.mosip.mimoto.dto.resident.CredentialRequestResponseDTO; -import io.mosip.mimoto.dto.resident.OTPRequestDTO; -import io.mosip.mimoto.dto.resident.VIDGenerateRequestDTO; -import io.mosip.mimoto.dto.resident.VIDGeneratorResponseDTO; import io.mosip.mimoto.service.RestClientService; import io.mosip.mimoto.util.DateUtils; import io.mosip.mimoto.util.LoggerUtil; @@ -135,4 +131,36 @@ public ResponseEntity authUnlock(@RequestBody AuthUnlockRequestDTO reque return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); } + @PostMapping("/req/individualId/otp") + @SuppressWarnings("unchecked") + public ResponseEntity individualIdOtpRequest(@RequestBody IndividualIdOtpRequestDTO requestDTO) throws Exception { + IndividualIdOTPRequestDTO mosipOTPRequestPayload = new IndividualIdOTPRequestDTO(); + mosipOTPRequestPayload.setId("mosip.identity.otp.internal"); + mosipOTPRequestPayload.setVersion("1.0"); + mosipOTPRequestPayload.setRequestTime(DateUtils.getRequestTimeString()); + mosipOTPRequestPayload.setAid(requestDTO.getAid()); + mosipOTPRequestPayload.setOtpChannel(requestDTO.getOtpChannel()); + mosipOTPRequestPayload.setTransactionID(requestDTO.getTransactionID()); + + OTPResponseDTO responseWrapper = (OTPResponseDTO) restClientService + .postApi(ApiName.RESIDENT_INDIVIDUALID_OTP, "", "", mosipOTPRequestPayload, OTPResponseDTO.class, MediaType.APPLICATION_JSON); + + return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); + } + + @PostMapping("/aid/get-individual-id") + @SuppressWarnings("unchecked") + public ResponseEntity aidGetIndividualId(@RequestBody AidStatusRequestDTO requestDTO) throws Exception { + RequestWrapper mosipAuthLockRequestPayload = new RequestWrapper<>(); + mosipAuthLockRequestPayload.setId("mosip.resident.checkstatus"); + mosipAuthLockRequestPayload.setVersion("v1"); + mosipAuthLockRequestPayload.setRequesttime(DateUtils.getRequestTimeString()); + mosipAuthLockRequestPayload.setRequest(requestDTO); + + ResponseWrapper responseWrapper = (ResponseWrapper) restClientService + .postApi(ApiName.RESIDENT_AID_GET_INDIVIDUALID, "", "", mosipAuthLockRequestPayload, ResponseWrapper.class, MediaType.APPLICATION_JSON); + + return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); + } + } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/AidStatusRequestDTO.java b/src/main/java/io/mosip/mimoto/dto/mimoto/AidStatusRequestDTO.java new file mode 100644 index 000000000..f60723a66 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/AidStatusRequestDTO.java @@ -0,0 +1,12 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.Data; + +@Data +public class AidStatusRequestDTO { + + private String aid; + private String otp; + private String transactionID; + +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/IndividualIdOtpRequestDTO.java b/src/main/java/io/mosip/mimoto/dto/mimoto/IndividualIdOtpRequestDTO.java new file mode 100644 index 000000000..5c0edd734 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/IndividualIdOtpRequestDTO.java @@ -0,0 +1,12 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.Data; + +import java.util.List; + +@Data +public class IndividualIdOtpRequestDTO { + private String aid; + private List otpChannel; + private String transactionID; +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/dto/resident/AidStatusResponseDTO.java b/src/main/java/io/mosip/mimoto/dto/resident/AidStatusResponseDTO.java new file mode 100644 index 000000000..1bbb2e72f --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/resident/AidStatusResponseDTO.java @@ -0,0 +1,13 @@ +package io.mosip.mimoto.dto.resident; + +import lombok.Data; + +@Data +public class AidStatusResponseDTO { + + private String individualId; + private String individualIdType; + private String transactionID; + private String aidStatus; + +} diff --git a/src/main/java/io/mosip/mimoto/dto/resident/IndividualIdOTPRequestDTO.java b/src/main/java/io/mosip/mimoto/dto/resident/IndividualIdOTPRequestDTO.java new file mode 100644 index 000000000..ace261112 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/resident/IndividualIdOTPRequestDTO.java @@ -0,0 +1,19 @@ +package io.mosip.mimoto.dto.resident; + +import lombok.Data; + +import java.util.List; +import java.util.Map; + +@Data +public class IndividualIdOTPRequestDTO { + + private String id; + private String version; + private String transactionID; + private String requestTime; + private List otpChannel; + private String aid; + private Map metadata; + +} \ No newline at end of file diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 3e1dd2537..9834fb23d 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -1,13 +1,16 @@ # MOSIP -mosipbox.public.url=https://dev2.mosip.net +mosipbox.public.url=https://qa-upgrade.mosip.net -public.url=https://your-ngrok-public-enpoint.ngrok.io +public.url=https://qa-upgrade.mosip.net # Resident service mosip.resident.base.url=${mosipbox.public.url}/resident/v1 RESIDENT_OTP=${mosip.resident.base.url}/req/otp +RESIDENT_INDIVIDUALID_OTP=${mosip.resident.base.url}/req/individualId/otp +RESIDENT_AID_GET_INDIVIDUALID=${mosip.resident.base.url}/aid/get-individual-id +#RESIDENT_INDIVIDUALID_OTP=https://api-internal.dev3.mosip.net/resident/v1/req/individualId/otp RESIDENT_CREDENTIAL_REQUEST=${mosip.resident.base.url}/req/credential RESIDENT_CREDENTIAL_REQUEST_STATUS=${RESIDENT_CREDENTIAL_REQUEST}/status RESIDENT_VID=${mosip.resident.base.url}/vid From 48192f2eb6c8db23ec170af2c9c69ee232b709ff Mon Sep 17 00:00:00 2001 From: Monobikash Das Date: Mon, 10 Oct 2022 13:32:09 +0530 Subject: [PATCH 006/860] Removed unused get UIN code --- .../mosip/mimoto/service/impl/CredentialShareServiceImpl.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java index 5bd9cacb0..3792d0e16 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java @@ -221,8 +221,7 @@ public boolean generateDocuments(EventModel eventModel) throws Exception { credentialSubject = getCredentialSubject(decodedCredential); org.json.JSONObject credentialJSON = decrypt(decodedCredential, credentialSubject, encryptionPin); - String uin = credentialJSON.getString("UIN"); - + Path vcTextFilePath = Path.of(utilities.getDataPath(), String.format(VC_JSON_FILE_NAME, eventModel.getEvent().getTransactionId())); Files.deleteIfExists(vcTextFilePath); From 29f5f5797768608f31fc4eb8af5147b7e61f9474 Mon Sep 17 00:00:00 2001 From: Monobikash Das <43202165+MonobikashDas@users.noreply.github.com> Date: Mon, 10 Oct 2022 13:49:37 +0530 Subject: [PATCH 007/860] disabling sonar --- .github/workflows/sonarqube.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/sonarqube.yml b/.github/workflows/sonarqube.yml index f30c7b5c8..30e532e26 100644 --- a/.github/workflows/sonarqube.yml +++ b/.github/workflows/sonarqube.yml @@ -46,4 +46,4 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }} - run: mvn -Dgpg.skip -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.projectKey=mimoto + run: mvn -Dgpg.skip -B verify From 7831493789e8b57da7758dedb26016b26715a15f Mon Sep 17 00:00:00 2001 From: Monobikash Das <43202165+MonobikashDas@users.noreply.github.com> Date: Mon, 10 Oct 2022 13:50:24 +0530 Subject: [PATCH 008/860] Revert "disabling sonar" --- .github/workflows/sonarqube.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/sonarqube.yml b/.github/workflows/sonarqube.yml index 30e532e26..f30c7b5c8 100644 --- a/.github/workflows/sonarqube.yml +++ b/.github/workflows/sonarqube.yml @@ -46,4 +46,4 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }} - run: mvn -Dgpg.skip -B verify + run: mvn -Dgpg.skip -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.projectKey=mimoto From 404ac9ac16a0eb3ed69afb548f86795c56ced311 Mon Sep 17 00:00:00 2001 From: Monobikash Das Date: Mon, 10 Oct 2022 15:11:16 +0530 Subject: [PATCH 009/860] added vid support --- .../impl/CredentialShareServiceImpl.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java index 3792d0e16..c2d880597 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java @@ -226,10 +226,10 @@ public boolean generateDocuments(EventModel eventModel) throws Exception { String.format(VC_JSON_FILE_NAME, eventModel.getEvent().getTransactionId())); Files.deleteIfExists(vcTextFilePath); Files.write(vcTextFilePath, gson.toJson(gson.fromJson(decodedCredential, TreeMap.class)).getBytes(), StandardOpenOption.CREATE); - + String credentialType = eventModel.getEvent().getData().get("credentialType").toString(); byteMap = getDocuments(credentialJSON, credentialType, eventModel.getEvent().getTransactionId(), getSignature(sign, credential)); - + Path textFilePath = Path.of(utilities.getDataPath(), String.format(CARD_JSON_FILE_NAME, eventModel.getEvent().getTransactionId())); Files.deleteIfExists(textFilePath); @@ -268,7 +268,7 @@ public Map getDocuments( "CredentialShareServiceImpl::getDocuments()::entry"); Map byteMap = new HashMap<>(); - String uin = null; + String id = null; LogDescription description = new LogDescription(); String individualBio = null; Map attributes = new LinkedHashMap<>(); @@ -276,9 +276,12 @@ public Map getDocuments( try { individualBio = credentialJSON.getString("biometrics"); String individualBiometric = new String(individualBio); - uin = credentialJSON.getString("UIN"); + id = credentialJSON.has("UIN") ? credentialJSON.getString("UIN") : credentialJSON.getString("VID"); setTemplateAttributes(credentialJSON.toString(), attributes); - attributes.put(IdType.UIN.toString(), uin); + if (credentialJSON.has("UIN")) + attributes.put(IdType.UIN.toString(), id); + else + attributes.put(IdType.VID.toString(), id); byte[] textFileByte = createJSONFile(credentialJSON, individualBiometric, attributes); byteMap.put(UIN_TEXT_FILE, textFileByte); @@ -326,7 +329,7 @@ public Map getDocuments( : description.getCode(); String moduleName = ModuleName.MIMOTO_SERVICE.toString(); auditLogRequestBuilder.createAuditRequestBuilder(description.getMessage(), eventId, eventName, eventType, - moduleId, moduleName, uin); + moduleId, moduleName, id); } logger.debug(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.REGISTRATIONID.toString(), "", "CredentialShareServiceImpl::getDocuments()::exit"); @@ -441,7 +444,7 @@ public String getSignature(String sign, String credential) { /** * Gets the artifacts. * - * @param idJsonString the id json string + * @param jsonString the id json string * @param attribute the attribute * @return the artifacts * @throws IOException Signals that an I/O exception has occurred. From e38049c41d970d374ebe9b454dfc12a58a4796b0 Mon Sep 17 00:00:00 2001 From: Monobikash Das Date: Mon, 10 Oct 2022 15:51:02 +0530 Subject: [PATCH 010/860] VID Support --- .../controller/CredentialShareController.java | 2 ++ .../impl/CredentialShareServiceImpl.java | 21 ++++++++++--------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java b/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java index aa2d9677a..b37345802 100644 --- a/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java +++ b/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java @@ -9,6 +9,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.google.gson.Gson; +import io.mosip.kernel.core.util.JsonUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.env.Environment; @@ -86,6 +87,7 @@ public class CredentialShareController { public ResponseEntity handleSubscribeEvent(@RequestBody EventModel eventModel) throws Exception { logger.info("Received websub event:: transaction id = " + eventModel.getEvent().getTransactionId()); + logger.debug("Received websub event:: " + JsonUtils.javaObjectToJsonString(eventModel)); GenericResponseDTO responseDTO = new GenericResponseDTO(); Path vcRequestIdPath = Path.of( utilities.getDataPath(), diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java index c2d880597..5ca53828f 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java @@ -142,6 +142,9 @@ public class CredentialShareServiceImpl implements CredentialShareService { private Logger logger = LoggerUtil.getLogger(CredentialShareServiceImpl.class); + @Value("${vercred.type.vid:PCN}") + private String vid; + /** The core audit request builder. */ @Autowired public AuditLogRequestBuilder auditLogRequestBuilder; @@ -271,19 +274,18 @@ public Map getDocuments( String id = null; LogDescription description = new LogDescription(); String individualBio = null; - Map attributes = new LinkedHashMap<>(); boolean isTransactionSuccessful = false; try { individualBio = credentialJSON.getString("biometrics"); String individualBiometric = new String(individualBio); - id = credentialJSON.has("UIN") ? credentialJSON.getString("UIN") : credentialJSON.getString("VID"); - setTemplateAttributes(credentialJSON.toString(), attributes); if (credentialJSON.has("UIN")) - attributes.put(IdType.UIN.toString(), id); + id = credentialJSON.getString("UIN"); + else if (credentialJSON.has(vid)) + id = credentialJSON.getString(vid); else - attributes.put(IdType.VID.toString(), id); + id = null; - byte[] textFileByte = createJSONFile(credentialJSON, individualBiometric, attributes); + byte[] textFileByte = createJSONFile(credentialJSON, individualBiometric); byteMap.put(UIN_TEXT_FILE, textFileByte); // TODO: Uncomment this after datashare creation API fixed. @@ -338,8 +340,7 @@ public Map getDocuments( } @SuppressWarnings("unchecked") - public byte[] createJSONFile(org.json.JSONObject credential, String individualBiometric, - Map attributes) throws IOException { + public byte[] createJSONFile(org.json.JSONObject credential, String individualBiometric) throws IOException { org.json.JSONObject outputJSON = new org.json.JSONObject(); if (credential == null) { throw new IdentityNotFoundException(PlatformErrorMessages.MIMOTO_PIS_IDENTITY_NOT_FOUND.getMessage()); @@ -370,7 +371,7 @@ public byte[] createJSONFile(org.json.JSONObject credential, String individualBi outputJSON.put(value, json.get(VALUE)); } else { if (key.equals("biometrics")) { - outputJSON.put(value, getBiometricsDataJSON(individualBiometric, attributes)); + outputJSON.put(value, getBiometricsDataJSON(individualBiometric)); } else { outputJSON.put(value, object); } @@ -388,7 +389,7 @@ public byte[] createJSONFile(org.json.JSONObject credential, String individualBi * @param attributes * @return */ - public org.json.JSONObject getBiometricsDataJSON(String individualBiometric, Map attributes) { + public org.json.JSONObject getBiometricsDataJSON(String individualBiometric) { org.json.JSONObject biometrics = new org.json.JSONObject(); if (individualBiometric != null) { CbeffToBiometricUtil util = new CbeffToBiometricUtil(cbeffutil); From 1d03143b41a7f9375e8de8289720bac742f00bab Mon Sep 17 00:00:00 2001 From: Monobikash Das Date: Wed, 19 Oct 2022 19:10:58 +0530 Subject: [PATCH 011/860] Added swagger --- pom.xml | 17 +++++++ .../mimoto/config/OpenApiProperties.java | 47 ++++++++++++++++++ .../io/mosip/mimoto/config/SwaggerConfig.java | 49 +++++++++++++++++++ src/main/resources/bootstrap.properties | 14 ++++++ 4 files changed, 127 insertions(+) create mode 100644 src/main/java/io/mosip/mimoto/config/OpenApiProperties.java create mode 100644 src/main/java/io/mosip/mimoto/config/SwaggerConfig.java diff --git a/pom.xml b/pom.xml index b84ea8e42..0b1b7bc50 100644 --- a/pom.xml +++ b/pom.xml @@ -73,6 +73,8 @@ 3.7 2.11.0 1.15 + 2.9.2 + 1.5.10 @@ -82,6 +84,21 @@ + + io.springfox + springfox-swagger2 + ${swagger.version} + + + io.springfox + springfox-swagger-ui + ${swagger.version} + + + org.springdoc + springdoc-openapi-ui + ${springdoc.version} + org.springframework.boot spring-boot-starter-web diff --git a/src/main/java/io/mosip/mimoto/config/OpenApiProperties.java b/src/main/java/io/mosip/mimoto/config/OpenApiProperties.java new file mode 100644 index 000000000..7fd584252 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/config/OpenApiProperties.java @@ -0,0 +1,47 @@ +package io.mosip.mimoto.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +import java.util.List; + +@Configuration +@ConfigurationProperties(prefix = "openapi") +@Data +public class OpenApiProperties { + private InfoProperty info; + private Service service; + private Group group; +} + +@Data +class InfoProperty { + private String title; + private String description; + private String version; + private LicenseProperty license; +} + +@Data +class LicenseProperty { + private String name; + private String url; +} + +@Data +class Service { + private List servers; +} + +@Data +class Server { + private String description; + private String url; +} + +@Data +class Group { + private String name; + private List paths; +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/config/SwaggerConfig.java b/src/main/java/io/mosip/mimoto/config/SwaggerConfig.java new file mode 100644 index 000000000..962b47964 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/config/SwaggerConfig.java @@ -0,0 +1,49 @@ +package io.mosip.mimoto.config; + +import io.swagger.v3.oas.models.Components; +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.info.Info; +import io.swagger.v3.oas.models.info.License; +import io.swagger.v3.oas.models.servers.Server; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springdoc.core.GroupedOpenApi; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class SwaggerConfig { + + private static final Logger logger = LoggerFactory.getLogger(SwaggerConfig.class); + + @Autowired + private OpenApiProperties openApiProperties; + + @Bean + public OpenAPI openApi() { + OpenAPI api = new OpenAPI() + .components(new Components()) + .info(new Info() + .title(openApiProperties.getInfo().getTitle()) + .version(openApiProperties.getInfo().getVersion()) + .description(openApiProperties.getInfo().getDescription()) + .license(new License() + .name(openApiProperties.getInfo().getLicense().getName()) + .url(openApiProperties.getInfo().getLicense().getUrl()))); + + openApiProperties.getService().getServers().forEach(server -> { + api.addServersItem(new Server().description(server.getDescription()).url(server.getUrl())); + }); + logger.info("swagger open api bean is ready"); + return api; + } + + @Bean + public GroupedOpenApi groupedOpenApi() { + return GroupedOpenApi.builder().group(openApiProperties.getGroup().getName()) + .pathsToMatch(openApiProperties.getGroup().getPaths().stream().toArray(String[]::new)) + .build(); + } + +} diff --git a/src/main/resources/bootstrap.properties b/src/main/resources/bootstrap.properties index 1cfebbaaa..e8fa4a410 100644 --- a/src/main/resources/bootstrap.properties +++ b/src/main/resources/bootstrap.properties @@ -10,3 +10,17 @@ management.endpoints.web.exposure.include=info,health,refresh server.port=8088 server.servlet.context-path=/v1/mimoto health.config.enabled=false + +openapi.info.title=${spring.application.name} +openapi.info.description=${spring.application.name} +openapi.info.version=1.0 +openapi.info.license.name=Mosip +openapi.info.license.url=https://docs.mosip.io/platform/license +mosipbox.public.url=http://localhost:${server.port} +openapi.service.servers[0].url=${mosipbox.public.url}${server.servlet.context-path} +openapi.service.servers[0].description=${spring.application.name} +openapi.group.name=${openapi.info.title} +openapi.group.paths[0]=/** +springdoc.swagger-ui.disable-swagger-default-url=true +springdoc.swagger-ui.tagsSorter=alpha +springdoc.swagger-ui.operationsSorter=alpha From 94f9d7c990ec82495401604af2cb1772f0d8e00c Mon Sep 17 00:00:00 2001 From: Monobikash Das Date: Thu, 20 Oct 2022 13:19:59 +0530 Subject: [PATCH 012/860] JIRA 175 : added common inji controller --- .../java/io/mosip/mimoto/config/Config.java | 10 ++++++ .../controller/CommonInjiController.java | 31 +++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 src/main/java/io/mosip/mimoto/controller/CommonInjiController.java diff --git a/src/main/java/io/mosip/mimoto/config/Config.java b/src/main/java/io/mosip/mimoto/config/Config.java index 51be07df1..58e079cc9 100644 --- a/src/main/java/io/mosip/mimoto/config/Config.java +++ b/src/main/java/io/mosip/mimoto/config/Config.java @@ -1,6 +1,7 @@ package io.mosip.mimoto.config; import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.annotation.Order; @@ -16,6 +17,9 @@ import io.mosip.kernel.core.logger.spi.Logger; import io.mosip.mimoto.util.LoggerUtil; +import java.util.HashMap; +import java.util.Map; + @Configuration @EnableWebSecurity @EnableGlobalMethodSecurity(prePostEnabled = true) @@ -35,6 +39,12 @@ public class Config extends WebSecurityConfigurerAdapter { @Value("${mosip.security.origins:localhost:8080}") private String origins; + @Bean + @ConfigurationProperties(prefix = "mosip.inji") + public Map injiConfig() { + return new HashMap<>(); + } + @Override protected void configure(HttpSecurity http) throws Exception { diff --git a/src/main/java/io/mosip/mimoto/controller/CommonInjiController.java b/src/main/java/io/mosip/mimoto/controller/CommonInjiController.java new file mode 100644 index 000000000..588a5f32f --- /dev/null +++ b/src/main/java/io/mosip/mimoto/controller/CommonInjiController.java @@ -0,0 +1,31 @@ +package io.mosip.mimoto.controller; + +import io.mosip.mimoto.core.http.ResponseWrapper; +import io.mosip.mimoto.util.DateUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.HashMap; +import java.util.Map; + +@RestController +public class CommonInjiController { + + @Autowired + private Map injiConfig; + + @GetMapping("/allProperties") + public ResponseEntity getAllProperties() { + ResponseWrapper> responseWrapper = new ResponseWrapper<>(); + responseWrapper.setId("mosip.inji.properties"); + responseWrapper.setVersion("v1"); + responseWrapper.setResponsetime(DateUtils.getRequestTimeString()); + responseWrapper.setResponse(injiConfig); + return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); + } +} From 1b424baf7e59befa6f2faed3b17b97144ce20f50 Mon Sep 17 00:00:00 2001 From: Monobikash Das Date: Thu, 20 Oct 2022 13:31:49 +0530 Subject: [PATCH 013/860] JIRA 175 : added common inji controller --- src/main/resources/bootstrap.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/bootstrap.properties b/src/main/resources/bootstrap.properties index e8fa4a410..9805fe409 100644 --- a/src/main/resources/bootstrap.properties +++ b/src/main/resources/bootstrap.properties @@ -1,7 +1,7 @@ spring.cloud.config.uri=localhost spring.cloud.config.label=develop spring.profiles.active=local -spring.cloud.config.name=mimoto +spring.cloud.config.name=mimoto,inji spring.application.name=mimoto management.endpoint.health.show-details=always From bfe8de4d02326ac2f53e82e425aa59bb175498cb Mon Sep 17 00:00:00 2001 From: Monobikash Das Date: Tue, 22 Nov 2022 14:28:54 +0530 Subject: [PATCH 014/860] QR code scanner initial commit with mock --- .../mimoto/controller/IdpController.java | 121 ++++++++++++++++++ .../dto/mimoto/IdpCredentialRequestDTO.java | 14 ++ .../resources/application-local.properties | 16 ++- 3 files changed, 145 insertions(+), 6 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/controller/IdpController.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/IdpCredentialRequestDTO.java diff --git a/src/main/java/io/mosip/mimoto/controller/IdpController.java b/src/main/java/io/mosip/mimoto/controller/IdpController.java new file mode 100644 index 000000000..53206b567 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/controller/IdpController.java @@ -0,0 +1,121 @@ +package io.mosip.mimoto.controller; + +import com.google.gson.Gson; +import io.mosip.kernel.core.logger.spi.Logger; +import io.mosip.kernel.core.util.JsonUtils; +import io.mosip.mimoto.core.http.RequestWrapper; +import io.mosip.mimoto.dto.mimoto.AppOTPRequestDTO; +import io.mosip.mimoto.dto.mimoto.IdpCredentialRequestDTO; +import io.mosip.mimoto.dto.resident.*; +import io.mosip.mimoto.service.impl.CredentialShareServiceImpl; +import io.mosip.mimoto.util.DateUtils; +import io.mosip.mimoto.util.LoggerUtil; +import io.mosip.mimoto.util.Utilities; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.util.CollectionUtils; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import java.nio.file.Files; +import java.nio.file.Path; + +@RestController +public class IdpController { + + private final Logger logger = LoggerUtil.getLogger(IdpController.class); + + private Gson gson = new Gson(); + + @Value("${mosip.idp.partner.encryption.key}") + private String partnerEncryptionKey; + + @Value("${mosip.idp.partner.id}") + private String partnerId; + + + // TODO: Temporary mocking, need to cleanup + @Value("${mimoto.mocked.requestid}") + String mockedReqid; + + @Autowired + private Utilities utilities; + + @PostMapping("/binding-otp") + @SuppressWarnings("unchecked") + public ResponseEntity otpRequest(@RequestBody AppOTPRequestDTO requestDTO) throws Exception { + OTPRequestDTO mosipOTPRequestPayload = new OTPRequestDTO(); + mosipOTPRequestPayload.setVersion("1.0"); + mosipOTPRequestPayload.setId("mosip.identity.otp.internal"); + mosipOTPRequestPayload.setIndividualId(requestDTO.getIndividualId()); + mosipOTPRequestPayload.setIndividualIdType(requestDTO.getIndividualIdType()); + mosipOTPRequestPayload.setOtpChannel(requestDTO.getOtpChannel()); + mosipOTPRequestPayload.setRequestTime(DateUtils.getRequestTimeString()); + mosipOTPRequestPayload.setTransactionID(requestDTO.getTransactionID()); + + // mocked response + OTPResponseDTO response = new OTPResponseDTO(); + /*(ResponseWrapper) restClientService + .postApi(ApiName.RESIDENT_OTP, "", "", mosipOTPRequestPayload, ResponseWrapper.class, MediaType.APPLICATION_JSON);*/ + OTPResponseMaskedDTO otpResponseMaskedDTO = new OTPResponseMaskedDTO(); + otpResponseMaskedDTO.setMaskedEmail("XXcXXfXXpXXjXXhXXzXXxXXsXXsXXcXXjXXyXXqXXuXXdXXiXXtXXqXXzXX2XX@mailinator.com"); + otpResponseMaskedDTO.setMaskedMobile("XXXXXX91723"); + response.setId("mosip.identity.otp.internal"); + response.setVersion("1.0"); + response.setResponse(otpResponseMaskedDTO); + + return ResponseEntity.status(HttpStatus.OK).body(response); + } + + @PostMapping(path = "/binding-credential-request", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity request(@RequestBody IdpCredentialRequestDTO requestDTO) + throws Exception { + + + logger.info("Received binding-credential-request : " + JsonUtils.javaObjectToJsonString(requestDTO)); + + // Call mosip resident service to issue a new credential + RequestWrapper mosipCredentialRequestPayload = new RequestWrapper(); + + CredentialRequestDTO credentialReqDTO = new CredentialRequestDTO(); + credentialReqDTO.setEncryptionKey(partnerEncryptionKey); + credentialReqDTO.setIssuer(partnerId); + credentialReqDTO.setIndividualId(requestDTO.getIndividualId()); + credentialReqDTO.setOtp(requestDTO.getOtp()); + credentialReqDTO.setTransactionID(requestDTO.getTransactionID()); + credentialReqDTO.setCredentialType(requestDTO.getCredentialType()); + credentialReqDTO.setUser(requestDTO.getUser()); + + mosipCredentialRequestPayload.setId("mosip.resident.vid"); + mosipCredentialRequestPayload.setVersion("v1"); + mosipCredentialRequestPayload.setRequesttime(DateUtils.getRequestTimeString()); + mosipCredentialRequestPayload.setRequest(credentialReqDTO); + + CredentialRequestResponseDTO response = new CredentialRequestResponseDTO(); + /*(CredentialRequestResponseDTO)restClientService + .postApi(ApiName.RESIDENT_CREDENTIAL_REQUEST, "", "", mosipCredentialRequestPayload, + CredentialRequestResponseDTO.class, MediaType.APPLICATION_JSON);*/ + CredentialRequestResponseInnerResponseDTO innerResponseDTO = new CredentialRequestResponseInnerResponseDTO(); + innerResponseDTO.setId("2309356374"); + innerResponseDTO.setRequestId(mockedReqid); + + response.setId("mosip.credential.request.service.id"); + response.setResponsetime(io.mosip.kernel.core.util.DateUtils.getCurrentDateTimeString()); + response.setResponse(innerResponseDTO); + + // Create request id file for later event. + if (CollectionUtils.isEmpty(response.getErrors())) { + Path vcRequestIdPath = Path.of( + utilities.getDataPath(), + String.format(CredentialShareServiceImpl.VC_REQUEST_FILE_NAME, response.getResponse().getRequestId()) + ); + Files.write(vcRequestIdPath, gson.toJson(response).getBytes()); + } + + return ResponseEntity.status(HttpStatus.OK).body(response); + } +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/IdpCredentialRequestDTO.java b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpCredentialRequestDTO.java new file mode 100644 index 000000000..7988348ae --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpCredentialRequestDTO.java @@ -0,0 +1,14 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.Data; + +@Data +public class IdpCredentialRequestDTO { + private String individualId; + private String otp; + private String transactionID; + private String issuer; + private String credentialType = "vercred"; + private String user; + private String publicKey; +} diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 9834fb23d..533497441 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -1,8 +1,9 @@ # MOSIP -mosipbox.public.url=https://qa-upgrade.mosip.net +mosipbox.public.url=https://api-internal.qa-121.mosip.net -public.url=https://qa-upgrade.mosip.net +public.url=https://api-internal.qa-121.mosip.net +keycloak.internal.url=https://iam.qa-121.mosip.net/ # Resident service mosip.resident.base.url=${mosipbox.public.url}/resident/v1 @@ -42,10 +43,12 @@ mosip.event.hub.pubUrl=${mosip.event.hubUrl} # MOSIP partner mosip.partner.id=mpartner-default-mobile +mosip.idp.partner.id=mpartner-default-mobile mosip.partner.crypto.p12.filename=keystore.p12 mosip.partner.crypto.p12.password=abc123 mosip.partner.crypto.p12.alias=partner mosip.partner.encryption.key=123456 +mosip.idp.partner.encryption.key=123456 mosip.partner.prependThumbprint=true @@ -76,7 +79,7 @@ token.request.clientId=mosip-regproc-client #Token generation secret key token.request.secretKey=abc123 #Token generation issuer url -token.request.issuerUrl=${mosipbox.public.url}/keycloak/auth/realms/mosip +token.request.issuerUrl=${keycloak.internal.url}/auth/realms/mosip #Audit Service AUDIT=${mosipbox.public.url}/v1/auditmanager/audits @@ -161,10 +164,10 @@ config.server.file.storage.uri=${mosipbox.public.url}/config/print/mz/develop2-v # websub authentication - auth adapter mosip.iam.adapter.clientid=mpartner-default-mobile -mosip.iam.adapter.clientsecret=abc123 +mosip.iam.adapter.clientsecret=ZgGKmEOypWSexe4A mosip.iam.adapter.appid=partner -mosip.iam.adapter.issuerURL=${mosipbox.public.url}/keycloak/auth/realms/mosip +mosip.iam.adapter.issuerURL=${mosipbox.public.url}/auth/realms/mosip mosip.authmanager.base-url=${mosipbox.public.url}/v1/authmanager mosip.authmanager.client-token-endpoint=${mosip.authmanager.base-url}/authenticate/clientidsecretkey auth.server.admin.validate.url=${mosip.authmanager.base-url}/v1/authmanager/authorize/admin/validateToken @@ -178,8 +181,9 @@ mosip.iam.adapter.renewal-before-expiry-interval=1440 #this should be false if you don’t use this restTemplate true if you do -auth.server.admin.issuer.uri=${mosipbox.public.url}/keycloak/auth/realms/ +auth.server.admin.issuer.uri=${keycloak.internal.url}/auth/realms/ mosip.iam.adapter.self-token-renewal-enable=true mosip.auth.filter_disable=false mosip.auth.adapter.impl.basepackage=io.mosip.kernel.auth.defaultadapter mosip.kernel.auth.appids.realm.map={prereg:'mosip',ida:'mosip',registrationclient:'mosip',regproc:'mosip',partner:'mosip',resident:'mosip',admin:'mosip',crereq:'mosip',creser:'mosip',datsha:'mosip',idrepo:'mosip'} +mimoto.mocked.requestid=b7b39859-2705-4a2d-9deb-2d47d5e5fe2c \ No newline at end of file From 9132d2fe68435f3ceb855c54ce8e93e1f5dc10fc Mon Sep 17 00:00:00 2001 From: Monobikash Das Date: Sat, 10 Dec 2022 13:29:41 +0530 Subject: [PATCH 015/860] Added link-transaction mock code --- .../mimoto/controller/IdpController.java | 49 ++++++++++++++----- .../mimoto/dto/mimoto/AuthFactorDto.java | 17 +++++++ .../mimoto/dto/mimoto/LinkCodeResponse.java | 18 +++++++ .../dto/mimoto/LinkTransactionRequestDto.java | 11 +++++ .../mimoto/LinkTransactionResponseDto.java | 16 ++++++ .../mimoto/dto/mimoto/WalletBindingDto.java | 11 +++++ .../resources/application-local.properties | 8 +-- 7 files changed, 114 insertions(+), 16 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/AuthFactorDto.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/LinkCodeResponse.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/LinkTransactionRequestDto.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/LinkTransactionResponseDto.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingDto.java diff --git a/src/main/java/io/mosip/mimoto/controller/IdpController.java b/src/main/java/io/mosip/mimoto/controller/IdpController.java index 53206b567..9e9554d8c 100644 --- a/src/main/java/io/mosip/mimoto/controller/IdpController.java +++ b/src/main/java/io/mosip/mimoto/controller/IdpController.java @@ -1,11 +1,12 @@ package io.mosip.mimoto.controller; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import com.google.gson.Gson; import io.mosip.kernel.core.logger.spi.Logger; import io.mosip.kernel.core.util.JsonUtils; import io.mosip.mimoto.core.http.RequestWrapper; -import io.mosip.mimoto.dto.mimoto.AppOTPRequestDTO; -import io.mosip.mimoto.dto.mimoto.IdpCredentialRequestDTO; +import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.dto.resident.*; import io.mosip.mimoto.service.impl.CredentialShareServiceImpl; import io.mosip.mimoto.util.DateUtils; @@ -23,6 +24,10 @@ import java.nio.file.Files; import java.nio.file.Path; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; @RestController public class IdpController { @@ -71,12 +76,12 @@ public ResponseEntity otpRequest(@RequestBody AppOTPRequestDTO requestDT return ResponseEntity.status(HttpStatus.OK).body(response); } - @PostMapping(path = "/binding-credential-request", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) + @PostMapping(path = "/wallet-binding", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity request(@RequestBody IdpCredentialRequestDTO requestDTO) throws Exception { - logger.info("Received binding-credential-request : " + JsonUtils.javaObjectToJsonString(requestDTO)); + logger.info("Received wallet-binding request : " + JsonUtils.javaObjectToJsonString(requestDTO)); // Call mosip resident service to issue a new credential RequestWrapper mosipCredentialRequestPayload = new RequestWrapper(); @@ -107,14 +112,34 @@ public ResponseEntity request(@RequestBody IdpCredentialRequestDTO reque response.setResponsetime(io.mosip.kernel.core.util.DateUtils.getCurrentDateTimeString()); response.setResponse(innerResponseDTO); - // Create request id file for later event. - if (CollectionUtils.isEmpty(response.getErrors())) { - Path vcRequestIdPath = Path.of( - utilities.getDataPath(), - String.format(CredentialShareServiceImpl.VC_REQUEST_FILE_NAME, response.getResponse().getRequestId()) - ); - Files.write(vcRequestIdPath, gson.toJson(response).getBytes()); - } + return ResponseEntity.status(HttpStatus.OK).body(response); + } + + @PostMapping("/link-transaction") + @SuppressWarnings("unchecked") + public ResponseEntity linkTransaction(@RequestBody LinkTransactionRequestDto requestDTO) throws Exception { + LinkTransactionResponseDto response = new LinkTransactionResponseDto(); + response.setErrors(null); + response.setResponseTime(DateUtils.getUTCCurrentDateTimeString()); + + LinkCodeResponse lcode = new LinkCodeResponse(); + lcode.setLinkTransactionId("Lw7b1Yu9kJGK2oNzOONDIEpJUTe0nlqTl5PCsrUIjkw"); + lcode.setClientName("Health Service"); + lcode.setLogoUrl("https://healthservices.dev.mosip.net/images/doctor_logo.png"); + lcode.setEssentialClaims(Lists.newArrayList("email")); + lcode.setVoluntaryClaims(Lists.newArrayList("birthdate","gender","phone","name","picture")); + Map configMap = new HashMap<>(); + configMap.put("sbi.env", "Developer"); + configMap.put("sbi.timeout.DISC", 30); + configMap.put("sbi.timeout.DINFO", 30); + configMap.put("sbi.timeout.CAPTURE", 30); + lcode.setConfigs(configMap); + AuthFactorDto auth1 = new AuthFactorDto("OTP", 0, null); + AuthFactorDto auth2 = new AuthFactorDto("BIO", 1, null); + AuthFactorDto auth3 = new AuthFactorDto("PIN", 0, null); + List authList = Lists.newArrayList(auth1, auth2, auth3); + lcode.setAuthFactors(authList); + response.setResponse(lcode); return ResponseEntity.status(HttpStatus.OK).body(response); } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/AuthFactorDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/AuthFactorDto.java new file mode 100644 index 000000000..7460f2f40 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/AuthFactorDto.java @@ -0,0 +1,17 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class AuthFactorDto { + + private String type; + private Integer count; + private List subTypes; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/LinkCodeResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/LinkCodeResponse.java new file mode 100644 index 000000000..cb066d7c6 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/LinkCodeResponse.java @@ -0,0 +1,18 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.Data; + +import java.util.List; +import java.util.Map; + +@Data +public class LinkCodeResponse { + private String linkTransactionId; + private String clientName; + private String logoUrl; + private List authFactors; + private List authorizeScopes; + private List essentialClaims; + private List voluntaryClaims; + private Map configs; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/LinkTransactionRequestDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/LinkTransactionRequestDto.java new file mode 100644 index 000000000..938c42729 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/LinkTransactionRequestDto.java @@ -0,0 +1,11 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.Data; + +import java.util.List; + +@Data +public class LinkTransactionRequestDto { + private String requestTime; + private String linkCode; +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/LinkTransactionResponseDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/LinkTransactionResponseDto.java new file mode 100644 index 000000000..f7f6df474 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/LinkTransactionResponseDto.java @@ -0,0 +1,16 @@ +package io.mosip.mimoto.dto.mimoto; + +import io.mosip.mimoto.dto.ErrorDTO; +import lombok.Data; + +import java.util.List; + +@Data +public class LinkTransactionResponseDto { + + private String responseTime; + + private LinkCodeResponse response; + + private List errors; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingDto.java new file mode 100644 index 000000000..da20b3c76 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingDto.java @@ -0,0 +1,11 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.Data; + +@Data +public class WalletBindingDto { + private String individualId; + private String otp; + private String transactionID; + private String publicKey; +} diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 533497441..c8279417b 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -1,9 +1,9 @@ # MOSIP -mosipbox.public.url=https://api-internal.qa-121.mosip.net +mosipbox.public.url=https://api-internal.dev.mosip.net -public.url=https://api-internal.qa-121.mosip.net -keycloak.internal.url=https://iam.qa-121.mosip.net/ +public.url=https://api-internal.dev.mosip.net +keycloak.internal.url=https://iam.dev.mosip.net/ # Resident service mosip.resident.base.url=${mosipbox.public.url}/resident/v1 @@ -164,7 +164,7 @@ config.server.file.storage.uri=${mosipbox.public.url}/config/print/mz/develop2-v # websub authentication - auth adapter mosip.iam.adapter.clientid=mpartner-default-mobile -mosip.iam.adapter.clientsecret=ZgGKmEOypWSexe4A +mosip.iam.adapter.clientsecret=0YINDhkf4t2JVend mosip.iam.adapter.appid=partner mosip.iam.adapter.issuerURL=${mosipbox.public.url}/auth/realms/mosip From 8fc31cc877bb69eb6afb99c149e7fecfcc99d2cc Mon Sep 17 00:00:00 2001 From: Monobikash Das Date: Sat, 10 Dec 2022 18:20:35 +0530 Subject: [PATCH 016/860] integrated with actual link-transaction api --- .../io/mosip/mimoto/constant/ApiName.java | 4 +- .../mimoto/controller/IdpController.java | 52 ++++++------------- .../mimoto/dto/mimoto/IdpLinkCodeDto.java | 12 +++++ .../dto/mimoto/IdpLinkTransactionReqDto.java | 14 +++++ .../mimoto/dto/mimoto/LinkCodeResponse.java | 2 +- .../resources/application-local.properties | 3 +- 6 files changed, 47 insertions(+), 40 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/IdpLinkCodeDto.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/IdpLinkTransactionReqDto.java diff --git a/src/main/java/io/mosip/mimoto/constant/ApiName.java b/src/main/java/io/mosip/mimoto/constant/ApiName.java index d45d7dc18..cc43c4ade 100644 --- a/src/main/java/io/mosip/mimoto/constant/ApiName.java +++ b/src/main/java/io/mosip/mimoto/constant/ApiName.java @@ -104,5 +104,7 @@ public enum ApiName { RESIDENT_AUTH_LOCK, RESIDENT_AUTH_UNLOCK, RESIDENT_INDIVIDUALID_OTP, - RESIDENT_AID_GET_INDIVIDUALID + RESIDENT_AID_GET_INDIVIDUALID, + + IDP_LINK_TRANSACTION } diff --git a/src/main/java/io/mosip/mimoto/controller/IdpController.java b/src/main/java/io/mosip/mimoto/controller/IdpController.java index 9e9554d8c..2b0733cd3 100644 --- a/src/main/java/io/mosip/mimoto/controller/IdpController.java +++ b/src/main/java/io/mosip/mimoto/controller/IdpController.java @@ -1,14 +1,14 @@ package io.mosip.mimoto.controller; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; +import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.Gson; import io.mosip.kernel.core.logger.spi.Logger; import io.mosip.kernel.core.util.JsonUtils; +import io.mosip.mimoto.constant.ApiName; import io.mosip.mimoto.core.http.RequestWrapper; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.dto.resident.*; -import io.mosip.mimoto.service.impl.CredentialShareServiceImpl; +import io.mosip.mimoto.service.RestClientService; import io.mosip.mimoto.util.DateUtils; import io.mosip.mimoto.util.LoggerUtil; import io.mosip.mimoto.util.Utilities; @@ -17,23 +17,14 @@ import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; -import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - @RestController public class IdpController { private final Logger logger = LoggerUtil.getLogger(IdpController.class); - private Gson gson = new Gson(); @Value("${mosip.idp.partner.encryption.key}") @@ -42,11 +33,13 @@ public class IdpController { @Value("${mosip.idp.partner.id}") private String partnerId; - // TODO: Temporary mocking, need to cleanup @Value("${mimoto.mocked.requestid}") String mockedReqid; + @Autowired + public RestClientService restClientService; + @Autowired private Utilities utilities; @@ -118,29 +111,14 @@ public ResponseEntity request(@RequestBody IdpCredentialRequestDTO reque @PostMapping("/link-transaction") @SuppressWarnings("unchecked") public ResponseEntity linkTransaction(@RequestBody LinkTransactionRequestDto requestDTO) throws Exception { - LinkTransactionResponseDto response = new LinkTransactionResponseDto(); - response.setErrors(null); - response.setResponseTime(DateUtils.getUTCCurrentDateTimeString()); - - LinkCodeResponse lcode = new LinkCodeResponse(); - lcode.setLinkTransactionId("Lw7b1Yu9kJGK2oNzOONDIEpJUTe0nlqTl5PCsrUIjkw"); - lcode.setClientName("Health Service"); - lcode.setLogoUrl("https://healthservices.dev.mosip.net/images/doctor_logo.png"); - lcode.setEssentialClaims(Lists.newArrayList("email")); - lcode.setVoluntaryClaims(Lists.newArrayList("birthdate","gender","phone","name","picture")); - Map configMap = new HashMap<>(); - configMap.put("sbi.env", "Developer"); - configMap.put("sbi.timeout.DISC", 30); - configMap.put("sbi.timeout.DINFO", 30); - configMap.put("sbi.timeout.CAPTURE", 30); - lcode.setConfigs(configMap); - AuthFactorDto auth1 = new AuthFactorDto("OTP", 0, null); - AuthFactorDto auth2 = new AuthFactorDto("BIO", 1, null); - AuthFactorDto auth3 = new AuthFactorDto("PIN", 0, null); - List authList = Lists.newArrayList(auth1, auth2, auth3); - lcode.setAuthFactors(authList); - response.setResponse(lcode); - - return ResponseEntity.status(HttpStatus.OK).body(response); + IdpLinkCodeDto dto = new IdpLinkCodeDto(requestDTO.getLinkCode()); + + //IdpLinkTransactionReqDto reqDto = new IdpLinkTransactionReqDto( + // io.mosip.kernel.core.util.DateUtils.getUTCCurrentDateTimeString(env.getProperty(DATETIME_PATTERN)), dto); + IdpLinkTransactionReqDto reqDto = new IdpLinkTransactionReqDto(requestDTO.getRequestTime(), dto); + LinkTransactionResponseDto res = (LinkTransactionResponseDto)restClientService + .postApi(ApiName.IDP_LINK_TRANSACTION, null, null, + reqDto, LinkTransactionResponseDto.class); + return ResponseEntity.status(HttpStatus.OK).body(res); } } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/IdpLinkCodeDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpLinkCodeDto.java new file mode 100644 index 000000000..d5c9385db --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpLinkCodeDto.java @@ -0,0 +1,12 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class IdpLinkCodeDto { + private String linkCode; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/IdpLinkTransactionReqDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpLinkTransactionReqDto.java new file mode 100644 index 000000000..07b28da6a --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpLinkTransactionReqDto.java @@ -0,0 +1,14 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class IdpLinkTransactionReqDto { + + private String requestTime; + private IdpLinkCodeDto request; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/LinkCodeResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/LinkCodeResponse.java index cb066d7c6..8e81bc0a6 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/LinkCodeResponse.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/LinkCodeResponse.java @@ -10,7 +10,7 @@ public class LinkCodeResponse { private String linkTransactionId; private String clientName; private String logoUrl; - private List authFactors; + private List> authFactors; private List authorizeScopes; private List essentialClaims; private List voluntaryClaims; diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index c8279417b..46bb875ac 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -1,7 +1,7 @@ # MOSIP mosipbox.public.url=https://api-internal.dev.mosip.net - +public.internet.url=https://api.dev.mosip.net public.url=https://api-internal.dev.mosip.net keycloak.internal.url=https://iam.dev.mosip.net/ @@ -17,6 +17,7 @@ RESIDENT_CREDENTIAL_REQUEST_STATUS=${RESIDENT_CREDENTIAL_REQUEST}/status RESIDENT_VID=${mosip.resident.base.url}/vid RESIDENT_AUTH_LOCK=${mosip.resident.base.url}/req/auth-lock RESIDENT_AUTH_UNLOCK=${mosip.resident.base.url}/req/auth-unlock +IDP_LINK_TRANSACTION=${public.internet.url}/v1/idp/linked-authorization/link-transaction # Mimoto mobileid backend From 2bb783da4b4bf561a5206c3e63e76010c365f7a7 Mon Sep 17 00:00:00 2001 From: Monobikash Das Date: Tue, 13 Dec 2022 18:00:21 +0530 Subject: [PATCH 017/860] Added mock idp-authenticate api --- pom.xml | 7 ++ .../mimoto/controller/IdpController.java | 15 ++++ .../dto/mimoto/IdpAuthenticateRequestDto.java | 12 +++ .../dto/mimoto/LinkedKycAuthResponse.java | 8 ++ .../java/io/mosip/mimoto/util/JoseUtil.java | 78 +++++++++++++++++++ 5 files changed, 120 insertions(+) create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthenticateRequestDto.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/LinkedKycAuthResponse.java create mode 100644 src/main/java/io/mosip/mimoto/util/JoseUtil.java diff --git a/pom.xml b/pom.xml index 0b1b7bc50..edb00d0db 100644 --- a/pom.xml +++ b/pom.xml @@ -327,6 +327,13 @@ test + + com.nimbusds + nimbus-jose-jwt + 9.25.6 + + + diff --git a/src/main/java/io/mosip/mimoto/controller/IdpController.java b/src/main/java/io/mosip/mimoto/controller/IdpController.java index 2b0733cd3..f0cae9afe 100644 --- a/src/main/java/io/mosip/mimoto/controller/IdpController.java +++ b/src/main/java/io/mosip/mimoto/controller/IdpController.java @@ -6,6 +6,7 @@ import io.mosip.kernel.core.util.JsonUtils; import io.mosip.mimoto.constant.ApiName; import io.mosip.mimoto.core.http.RequestWrapper; +import io.mosip.mimoto.core.http.ResponseWrapper; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.dto.resident.*; import io.mosip.mimoto.service.RestClientService; @@ -121,4 +122,18 @@ public ResponseEntity linkTransaction(@RequestBody LinkTransactionReques reqDto, LinkTransactionResponseDto.class); return ResponseEntity.status(HttpStatus.OK).body(res); } + + @PostMapping("idp-authenticate") + public ResponseEntity idpAuthenticate(@RequestBody IdpAuthenticateRequestDto requestDTO) throws Exception { + ResponseWrapper response = new ResponseWrapper<>(); + + LinkedKycAuthResponse resp = new LinkedKycAuthResponse(); + resp.setLinkedTransactionId(requestDTO.getLinkTransactionId()); + + response.setResponsetime(DateUtils.getUTCCurrentDateTimeString()); + response.setId("mosip.mimoto.idp"); + response.setResponse(resp); + + return ResponseEntity.status(HttpStatus.OK).body(response); + } } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthenticateRequestDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthenticateRequestDto.java new file mode 100644 index 000000000..3c216d756 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthenticateRequestDto.java @@ -0,0 +1,12 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.Data; + +@Data +public class IdpAuthenticateRequestDto { + private String requesttime; + private String linkTransactionId; + private String individualId; + private String authFactorType; + private String challenge; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/LinkedKycAuthResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/LinkedKycAuthResponse.java new file mode 100644 index 000000000..2eb05c2c1 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/LinkedKycAuthResponse.java @@ -0,0 +1,8 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.Data; + +@Data +public class LinkedKycAuthResponse { + private String linkedTransactionId; +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/util/JoseUtil.java b/src/main/java/io/mosip/mimoto/util/JoseUtil.java new file mode 100644 index 000000000..ab9ac52d1 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/JoseUtil.java @@ -0,0 +1,78 @@ +package io.mosip.mimoto.util; + +import com.nimbusds.jose.jwk.JWK; +import com.nimbusds.jose.jwk.KeyUse; +import com.nimbusds.jose.jwk.RSAKey; +import io.mosip.kernel.core.util.CryptoUtil; + +import java.math.BigInteger; +import java.security.KeyFactory; +import java.security.NoSuchAlgorithmException; +import java.security.PublicKey; +import java.security.interfaces.RSAPublicKey; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.RSAPublicKeySpec; +import java.util.UUID; + +public class JoseUtil { + + +// public static void main(String[] args) { +// try { +// // Generate the RSA key pair +// KeyPairGenerator gen = KeyPairGenerator.getInstance("RSA"); +// gen.initialize(2048); +// KeyPair keyPair = gen.generateKeyPair(); +// +// String pk = "-----BEGIN RSA PUBLIC KEY-----\nMIICCgKCAgEArPhI8uHNssl6Wj/T4Px4MGvjQrnCpih+/rsGOmcIml56+0kvQJpb\nfQQ0cDW5BRZrRruCMtbSbVFdZaYgUs9a8UoLujL0djyfdfrDv+a6bqRomK3s9/q4\ndNirsqVTm8WI7oIODa5IuuXQU+YEsnpazpb+cdtbvXwJOvTo+/bSIIX4IWDOPiZM\nt9AGfdw7afRBrQHHyenENW9ACZek/jqu0KEUTqbZb7BsGc2vvyBZrZVfX7PhhtJU\n5JH9kuJltvacHJytA5wUmDydIDONO+YgXPTOfqBQh+u9GxvA0P+kUOxLi1XT/YEW\nBvNc1NJb1FGoG9rO63MP0olq5if2zFryy+BjuGErUj3CTclIk2XhWrAPdwFvRCQI\nuaVlvJk81NNqdPtaNW1UdGpObFgyZCmAXjDHzm/Ou3yvo4z70RTQB27JeeMEADF8\nGrkucKy1s5i8LPRwMwo+kX0fuq9CphyKW7TCavA+idwFQxnzLP3BhtZcDMLUXmQQ\nIKYPnuYoIRPp6CHAjtkWm0zZuhdIhehepSeDO+GIuCkXCvabvMriWcgTRK4xViS3\nT6V4JqNMD5aZDWytjYZuWCAb/E/PdeatqaE5Go7dG27rjdhFIIlKXgUBvu72ZGp9\nPvbx+N7hXgJFN7zV3SLn+CYEICdIeWubznrmsw7O9sFGpnArr+C6P68CAwEAAQ==\n-----END RSA PUBLIC KEY-----\n"; +// String pk2 = "-----BEGIN RSA PUBLIC KEY-----\nMIICCgKCAgEAn6+frMlD7DQqbxZW943hRLBApDj1/lHIJdLYSKEGIfwhd58gc0Y4\n1q11mPnpv7gAZ/Wm0iOAkWSzcIWljXFmGnLrUrBsp4WYKdPjqn4tkrCOjiZa5RPk\nY03a40Kz1lx0W9f94Naozglf6KFUSq+qAwuC5kiPxaxsjFA/LWIP+zT2QX/MnrX9\nv7gt2g0BC4pQ01eTTzhhwO2A7k5z3ucsb56ohND4xdIsdCMm1IczBjW0URSO60Bb\n7m5dlO8BFHJ6inV8awO2KHoADbp3wZgid4KqLJ0eVGyNViVFzj4rxSxL3vcYbyKS\nORWSlPZIZL9ZWO1cyPO9+Wxu29IKj4DQEt8glgITlBZ4L29uT7gFPAbypSn/8SvU\nBrNno8+GIe9XWsrDTMT9dfLGzLUitF3A+wwVZuRVhCqYIisOOGuGE18YK0jmdk9l\n89OpK4PduGiUh66zZTcH3thdtaOz6jj+FLKMg2Q3gNqQ1Y0cezO175RNVVX1ffOu\n5qss1RWams5RAXDqqt/MhiopG3DhlyaSC4xdqei7SI8d+S4Bvflub9rypPnhW67g\nNhZvQDJ7Tb1AWHxKmU0wQvEMtwSm9xtsMs4bqotn2M/09BuRqbrhpvAfrfZArkVO\nv8eLXhtDvo2J9gRwHZIS/JZ1Fo+tep1QFHz1Lr5iGRqwLWQlGbKFuL0CAwEAAQ==\n-----END RSA PUBLIC KEY-----\n"; +// JWK jwk = getJwkFromPublicKey(pk2); +// System.out.println(jwk); +//// org.bouncycastle.asn1.pkcs.RSAPublicKey pkcs1PublicKey = org.bouncycastle.asn1.pkcs.RSAPublicKey.getInstance(io.mosip.kernel.core.util.CryptoUtil.decodePlainBase64(key)); +//// BigInteger modulus = pkcs1PublicKey.getModulus(); +//// BigInteger publicExponent = pkcs1PublicKey.getPublicExponent(); +//// RSAPublicKeySpec keySpec = new RSAPublicKeySpec(modulus, publicExponent); +//// //KeyFactory kf = KeyFactory.getInstance("RSA"); +//// //PublicKey generatedPublic = kf.generatePublic(keySpec); +//// +//// // String publicKeyPemStr = key.replace("-----BEGIN RSA PUBLIC KEY-----\n", ""); +//// String publicKeyPemStr = key.replaceAll("\\n", "").replace("-----BEGIN RSA PUBLIC KEY-----", "").replace("-----END RSA PUBLIC KEY-----", "");; +//// byte[] encoded = io.mosip.kernel.core.util.CryptoUtil.decodePlainBase64(publicKeyPemStr); +//// +//// //X509EncodedKeySpec keySpec = new X509EncodedKeySpec(encoded); +//// KeyFactory keyFactory = KeyFactory.getInstance("RSA"); +//// PublicKey publicKey = keyFactory.generatePublic(keySpec); +//// // Convert to JWK format +//// JWK jwk = new RSAKey.Builder((RSAPublicKey)publicKey) +//// .keyUse(KeyUse.SIGNATURE) +//// .keyID(UUID.randomUUID().toString()) +//// .build(); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// +// } + + + public static JWK getJwkFromPublicKey(String publicKeyString) throws NoSuchAlgorithmException, InvalidKeySpecException { + String key = publicKeyString.replaceAll("\\n", "") + .replace("-----BEGIN RSA PUBLIC KEY-----", "") + .replace("-----END RSA PUBLIC KEY-----", ""); + + org.bouncycastle.asn1.pkcs.RSAPublicKey pkcs1PublicKey = org.bouncycastle.asn1.pkcs.RSAPublicKey.getInstance(CryptoUtil.decodePlainBase64(key)); + BigInteger modulus = pkcs1PublicKey.getModulus(); + BigInteger publicExponent = pkcs1PublicKey.getPublicExponent(); + RSAPublicKeySpec keySpec = new RSAPublicKeySpec(modulus, publicExponent); + + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + PublicKey publicKey = keyFactory.generatePublic(keySpec); + // Convert to JWK format + JWK jwk = new RSAKey.Builder((RSAPublicKey)publicKey) + .keyUse(KeyUse.SIGNATURE) + .keyID(UUID.randomUUID().toString()) + .build(); + + return jwk; + + } +} From cad344b474d028175415bae08ddd4db7b955141e Mon Sep 17 00:00:00 2001 From: Monobikash Das Date: Thu, 15 Dec 2022 16:42:59 +0530 Subject: [PATCH 018/860] COmpleted idp binding --- .../io/mosip/mimoto/constant/ApiName.java | 4 +- .../mimoto/controller/IdpController.java | 164 +++++++++++------- .../io/mosip/mimoto/dto/SecretKeyRequest.java | 6 +- .../dto/mimoto/BindingOtpInnerReqDto.java | 11 ++ .../dto/mimoto/BindingOtpRequestDto.java | 13 ++ .../dto/mimoto/BindingOtpResponseDto.java | 10 ++ .../dto/mimoto/IdpAuthInternalRequestDto.java | 12 ++ .../mimoto/dto/mimoto/IdpAuthRequestDto.java | 9 + .../dto/mimoto/IdpAuthenticateRequestDto.java | 5 +- .../mimoto/dto/mimoto/IdpChallangeDto.java | 9 + .../dto/mimoto/IdpCredentialRequestDTO.java | 14 -- .../dto/mimoto/IdpLinkCodeRequestDto.java | 9 + .../dto/mimoto/IdpLinkCodeResponseDto.java | 10 ++ .../io/mosip/mimoto/dto/mimoto/JwkDto.java | 12 ++ .../mimoto/LinkTransactionResponseDto.java | 4 + .../dto/mimoto/WalletBindingInnerReq.java | 13 ++ .../mimoto/WalletBindingInnerRequestDto.java | 14 ++ .../WalletBindingInternalRequestDTO.java | 14 ++ .../dto/mimoto/WalletBindingRequestDTO.java | 10 ++ .../dto/mimoto/WalletBindingResponseDto.java | 10 ++ .../exception/PlatformErrorMessages.java | 4 +- .../mimoto/service/RestClientService.java | 5 +- .../service/impl/RestClientServiceImpl.java | 20 +++ .../java/io/mosip/mimoto/util/JoseUtil.java | 44 +---- .../io/mosip/mimoto/util/RestApiClient.java | 90 +++++++++- .../resources/application-local.properties | 4 +- 26 files changed, 391 insertions(+), 129 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpInnerReqDto.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpRequestDto.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpResponseDto.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthInternalRequestDto.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthRequestDto.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/IdpChallangeDto.java delete mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/IdpCredentialRequestDTO.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/IdpLinkCodeRequestDto.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/IdpLinkCodeResponseDto.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/JwkDto.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInnerReq.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInnerRequestDto.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInternalRequestDTO.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingRequestDTO.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingResponseDto.java diff --git a/src/main/java/io/mosip/mimoto/constant/ApiName.java b/src/main/java/io/mosip/mimoto/constant/ApiName.java index cc43c4ade..0469ba43f 100644 --- a/src/main/java/io/mosip/mimoto/constant/ApiName.java +++ b/src/main/java/io/mosip/mimoto/constant/ApiName.java @@ -106,5 +106,7 @@ public enum ApiName { RESIDENT_INDIVIDUALID_OTP, RESIDENT_AID_GET_INDIVIDUALID, - IDP_LINK_TRANSACTION + IDP_LINK_TRANSACTION, + BINDING_OTP, + WALLET_BINDING } diff --git a/src/main/java/io/mosip/mimoto/controller/IdpController.java b/src/main/java/io/mosip/mimoto/controller/IdpController.java index f0cae9afe..09415449a 100644 --- a/src/main/java/io/mosip/mimoto/controller/IdpController.java +++ b/src/main/java/io/mosip/mimoto/controller/IdpController.java @@ -1,16 +1,17 @@ package io.mosip.mimoto.controller; -import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.collect.Lists; import com.google.gson.Gson; import io.mosip.kernel.core.logger.spi.Logger; import io.mosip.kernel.core.util.JsonUtils; import io.mosip.mimoto.constant.ApiName; -import io.mosip.mimoto.core.http.RequestWrapper; import io.mosip.mimoto.core.http.ResponseWrapper; +import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.mimoto.*; -import io.mosip.mimoto.dto.resident.*; +import io.mosip.mimoto.exception.PlatformErrorMessages; import io.mosip.mimoto.service.RestClientService; import io.mosip.mimoto.util.DateUtils; +import io.mosip.mimoto.util.JoseUtil; import io.mosip.mimoto.util.LoggerUtil; import io.mosip.mimoto.util.Utilities; import org.springframework.beans.factory.annotation.Autowired; @@ -22,10 +23,14 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + @RestController public class IdpController { private final Logger logger = LoggerUtil.getLogger(IdpController.class); + private static final boolean useBearerToken = true; + private static final String ID = "mosip.mimoto.idp"; private Gson gson = new Gson(); @Value("${mosip.idp.partner.encryption.key}") @@ -46,65 +51,44 @@ public class IdpController { @PostMapping("/binding-otp") @SuppressWarnings("unchecked") - public ResponseEntity otpRequest(@RequestBody AppOTPRequestDTO requestDTO) throws Exception { - OTPRequestDTO mosipOTPRequestPayload = new OTPRequestDTO(); - mosipOTPRequestPayload.setVersion("1.0"); - mosipOTPRequestPayload.setId("mosip.identity.otp.internal"); - mosipOTPRequestPayload.setIndividualId(requestDTO.getIndividualId()); - mosipOTPRequestPayload.setIndividualIdType(requestDTO.getIndividualIdType()); - mosipOTPRequestPayload.setOtpChannel(requestDTO.getOtpChannel()); - mosipOTPRequestPayload.setRequestTime(DateUtils.getRequestTimeString()); - mosipOTPRequestPayload.setTransactionID(requestDTO.getTransactionID()); - - // mocked response - OTPResponseDTO response = new OTPResponseDTO(); - /*(ResponseWrapper) restClientService - .postApi(ApiName.RESIDENT_OTP, "", "", mosipOTPRequestPayload, ResponseWrapper.class, MediaType.APPLICATION_JSON);*/ - OTPResponseMaskedDTO otpResponseMaskedDTO = new OTPResponseMaskedDTO(); - otpResponseMaskedDTO.setMaskedEmail("XXcXXfXXpXXjXXhXXzXXxXXsXXsXXcXXjXXyXXqXXuXXdXXiXXtXXqXXzXX2XX@mailinator.com"); - otpResponseMaskedDTO.setMaskedMobile("XXXXXX91723"); - response.setId("mosip.identity.otp.internal"); - response.setVersion("1.0"); - response.setResponse(otpResponseMaskedDTO); + public ResponseEntity otpRequest(@RequestBody BindingOtpRequestDto requestDTO) throws Exception { + ResponseWrapper response = null; + try { + response = (ResponseWrapper) restClientService + .postApi(ApiName.BINDING_OTP, + requestDTO, ResponseWrapper.class, useBearerToken); + } catch (Exception e) { + logger.error("Wallet binding otp error occured.", e); + response = getErrorResponse(PlatformErrorMessages.MIMOTO_OTP_BINDING_EXCEPTION.getCode(), e.getMessage()); + } + return ResponseEntity.status(HttpStatus.OK).body(response); } @PostMapping(path = "/wallet-binding", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity request(@RequestBody IdpCredentialRequestDTO requestDTO) + public ResponseEntity request(@RequestBody WalletBindingRequestDTO requestDTO) throws Exception { + ResponseWrapper response = null; + try { + WalletBindingInnerRequestDto innerRequestDto = new WalletBindingInnerRequestDto(); + innerRequestDto.setChallengeList(requestDTO.getRequest().getChallengeList()); + innerRequestDto.setIndividualId(requestDTO.getRequest().getIndividualId()); + innerRequestDto.setTransactionId(requestDTO.getRequest().getTransactionId()); + innerRequestDto.setPublicKey(JoseUtil.getJwkFromPublicKey(requestDTO.getRequest().getPublicKey())); - logger.info("Received wallet-binding request : " + JsonUtils.javaObjectToJsonString(requestDTO)); - - // Call mosip resident service to issue a new credential - RequestWrapper mosipCredentialRequestPayload = new RequestWrapper(); - - CredentialRequestDTO credentialReqDTO = new CredentialRequestDTO(); - credentialReqDTO.setEncryptionKey(partnerEncryptionKey); - credentialReqDTO.setIssuer(partnerId); - credentialReqDTO.setIndividualId(requestDTO.getIndividualId()); - credentialReqDTO.setOtp(requestDTO.getOtp()); - credentialReqDTO.setTransactionID(requestDTO.getTransactionID()); - credentialReqDTO.setCredentialType(requestDTO.getCredentialType()); - credentialReqDTO.setUser(requestDTO.getUser()); + WalletBindingInternalRequestDTO req = new WalletBindingInternalRequestDTO(requestDTO.getRequestTime(), innerRequestDto); - mosipCredentialRequestPayload.setId("mosip.resident.vid"); - mosipCredentialRequestPayload.setVersion("v1"); - mosipCredentialRequestPayload.setRequesttime(DateUtils.getRequestTimeString()); - mosipCredentialRequestPayload.setRequest(credentialReqDTO); + logger.info("Received wallet-binding request : " + JsonUtils.javaObjectToJsonString(requestDTO)); - CredentialRequestResponseDTO response = new CredentialRequestResponseDTO(); - /*(CredentialRequestResponseDTO)restClientService - .postApi(ApiName.RESIDENT_CREDENTIAL_REQUEST, "", "", mosipCredentialRequestPayload, - CredentialRequestResponseDTO.class, MediaType.APPLICATION_JSON);*/ - CredentialRequestResponseInnerResponseDTO innerResponseDTO = new CredentialRequestResponseInnerResponseDTO(); - innerResponseDTO.setId("2309356374"); - innerResponseDTO.setRequestId(mockedReqid); - - response.setId("mosip.credential.request.service.id"); - response.setResponsetime(io.mosip.kernel.core.util.DateUtils.getCurrentDateTimeString()); - response.setResponse(innerResponseDTO); + response = (ResponseWrapper) restClientService + .postApi(ApiName.WALLET_BINDING, + req, ResponseWrapper.class, useBearerToken); + } catch (Exception e) { + logger.error("Wallet binding error occured for tranaction id " + requestDTO.getRequest().getTransactionId(), e); + response = getErrorResponse(PlatformErrorMessages.MIMOTO_WALLET_BINDING_EXCEPTION.getCode(), e.getMessage()); + } return ResponseEntity.status(HttpStatus.OK).body(response); } @@ -112,28 +96,88 @@ public ResponseEntity request(@RequestBody IdpCredentialRequestDTO reque @PostMapping("/link-transaction") @SuppressWarnings("unchecked") public ResponseEntity linkTransaction(@RequestBody LinkTransactionRequestDto requestDTO) throws Exception { - IdpLinkCodeDto dto = new IdpLinkCodeDto(requestDTO.getLinkCode()); + LinkTransactionResponseDto res = null; + try { + IdpLinkCodeDto dto = new IdpLinkCodeDto(requestDTO.getLinkCode()); + IdpLinkTransactionReqDto reqDto = new IdpLinkTransactionReqDto(requestDTO.getRequestTime(), dto); + res = (LinkTransactionResponseDto) restClientService + .postApi(ApiName.IDP_LINK_TRANSACTION, null, null, + reqDto, LinkTransactionResponseDto.class); + } catch (Exception e) { + logger.error("Wallet binding error occured for link code " + requestDTO.getLinkCode(), e); + res = new LinkTransactionResponseDto(DateUtils.getRequestTimeString(), null, + getErrors(PlatformErrorMessages.MIMOTO_WALLET_BINDING_EXCEPTION.getCode(), e.getMessage())); + } - //IdpLinkTransactionReqDto reqDto = new IdpLinkTransactionReqDto( - // io.mosip.kernel.core.util.DateUtils.getUTCCurrentDateTimeString(env.getProperty(DATETIME_PATTERN)), dto); - IdpLinkTransactionReqDto reqDto = new IdpLinkTransactionReqDto(requestDTO.getRequestTime(), dto); - LinkTransactionResponseDto res = (LinkTransactionResponseDto)restClientService - .postApi(ApiName.IDP_LINK_TRANSACTION, null, null, - reqDto, LinkTransactionResponseDto.class); return ResponseEntity.status(HttpStatus.OK).body(res); } @PostMapping("idp-authenticate") public ResponseEntity idpAuthenticate(@RequestBody IdpAuthenticateRequestDto requestDTO) throws Exception { - ResponseWrapper response = new ResponseWrapper<>(); + logger.info("Received idp-authenticate request : " + JsonUtils.javaObjectToJsonString(requestDTO)); + + + IdpAuthRequestDto reqDto = new IdpAuthRequestDto(); + reqDto.setRequestTime(DateUtils.getRequestTimeString()); + + IdpAuthInternalRequestDto internalDto = new IdpAuthInternalRequestDto(); + internalDto.setIndividualId(requestDTO.getIndividualId()); + internalDto.setLinkedTransactionId(requestDTO.getLinkTransactionId()); + + // mocking challange for time being + IdpChallangeDto challangeDto = new IdpChallangeDto(); + challangeDto.setAuthFactorType("otp"); + challangeDto.setChallenge("111111"); + + internalDto.setChallengeList(Lists.newArrayList(challangeDto)); + + + ResponseWrapper response = (ResponseWrapper) restClientService + .postApi(ApiName.IDP_LINK_TRANSACTION, null, null, + internalDto, ResponseWrapper.class); LinkedKycAuthResponse resp = new LinkedKycAuthResponse(); resp.setLinkedTransactionId(requestDTO.getLinkTransactionId()); + response.setResponsetime(DateUtils.getUTCCurrentDateTimeString()); + response.setId(ID); + response.setResponse(resp); + + return ResponseEntity.status(HttpStatus.OK).body(response); + } + + @PostMapping("idp-link-code") + public ResponseEntity idpLinkCode(@RequestBody IdpLinkCodeRequestDto requestDTO) throws Exception { + logger.info("Received idp-link-code request : " + JsonUtils.javaObjectToJsonString(requestDTO)); + + IdpLinkCodeResponseDto resp = new IdpLinkCodeResponseDto(); + resp.setTransactionId(requestDTO.getTransactionId()); + resp.setExpireDateTime("2022-12-15T05:12:18.188Z"); + resp.setLinkCode("KlcT32S5jVkhwl9"); + + ResponseWrapper response = new ResponseWrapper<>(); response.setResponsetime(DateUtils.getUTCCurrentDateTimeString()); response.setId("mosip.mimoto.idp"); response.setResponse(resp); return ResponseEntity.status(HttpStatus.OK).body(response); } + + + private ResponseWrapper getErrorResponse(String errorCode, String errorMessage) { + + List errors = getErrors(errorCode, errorMessage); + ResponseWrapper responseWrapper = new ResponseWrapper(); + responseWrapper.setResponse(null); + responseWrapper.setResponsetime(DateUtils.getRequestTimeString()); + responseWrapper.setId(ID); + responseWrapper.setErrors(errors); + + return responseWrapper; + } + + private List getErrors(String errorCode, String errorMessage) { + ErrorDTO errorDTO = new ErrorDTO(errorCode, errorMessage); + return Lists.newArrayList(errorDTO); + } } diff --git a/src/main/java/io/mosip/mimoto/dto/SecretKeyRequest.java b/src/main/java/io/mosip/mimoto/dto/SecretKeyRequest.java index eefd71811..bb1e945e3 100644 --- a/src/main/java/io/mosip/mimoto/dto/SecretKeyRequest.java +++ b/src/main/java/io/mosip/mimoto/dto/SecretKeyRequest.java @@ -1,12 +1,12 @@ package io.mosip.mimoto.dto; -import lombok.Data; -import lombok.Getter; -import lombok.Setter; +import lombok.*; @Data @Setter @Getter +@AllArgsConstructor +@NoArgsConstructor public class SecretKeyRequest { public String clientId; public String secretKey; diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpInnerReqDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpInnerReqDto.java new file mode 100644 index 000000000..bc1b7d232 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpInnerReqDto.java @@ -0,0 +1,11 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.Data; + +import java.util.List; + +@Data +public class BindingOtpInnerReqDto { + private String individualId; + private List otpChannels; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpRequestDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpRequestDto.java new file mode 100644 index 000000000..1b0d1a796 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpRequestDto.java @@ -0,0 +1,13 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class BindingOtpRequestDto { + private String requestTime; + private BindingOtpInnerReqDto request; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpResponseDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpResponseDto.java new file mode 100644 index 000000000..a1f733c93 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpResponseDto.java @@ -0,0 +1,10 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.Data; + +@Data +public class BindingOtpResponseDto { + private String transactionId; + private String maskedEmail; + private String maskedMobile; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthInternalRequestDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthInternalRequestDto.java new file mode 100644 index 000000000..ca1d33178 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthInternalRequestDto.java @@ -0,0 +1,12 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.Data; + +import java.util.List; + +@Data +public class IdpAuthInternalRequestDto { + private String linkedTransactionId; + private String individualId; + private List challengeList; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthRequestDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthRequestDto.java new file mode 100644 index 000000000..79122f735 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthRequestDto.java @@ -0,0 +1,9 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.Data; + +@Data +public class IdpAuthRequestDto { + private String requestTime; + private IdpAuthInternalRequestDto request; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthenticateRequestDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthenticateRequestDto.java index 3c216d756..cf811a9d0 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthenticateRequestDto.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthenticateRequestDto.java @@ -2,11 +2,12 @@ import lombok.Data; +import java.util.List; + @Data public class IdpAuthenticateRequestDto { private String requesttime; private String linkTransactionId; private String individualId; - private String authFactorType; - private String challenge; + private List challengeList; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/IdpChallangeDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpChallangeDto.java new file mode 100644 index 000000000..c005e3f7e --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpChallangeDto.java @@ -0,0 +1,9 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.Data; + +@Data +public class IdpChallangeDto { + private String authFactorType; + private String challenge; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/IdpCredentialRequestDTO.java b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpCredentialRequestDTO.java deleted file mode 100644 index 7988348ae..000000000 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/IdpCredentialRequestDTO.java +++ /dev/null @@ -1,14 +0,0 @@ -package io.mosip.mimoto.dto.mimoto; - -import lombok.Data; - -@Data -public class IdpCredentialRequestDTO { - private String individualId; - private String otp; - private String transactionID; - private String issuer; - private String credentialType = "vercred"; - private String user; - private String publicKey; -} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/IdpLinkCodeRequestDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpLinkCodeRequestDto.java new file mode 100644 index 000000000..58da92d39 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpLinkCodeRequestDto.java @@ -0,0 +1,9 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.Data; + +@Data +public class IdpLinkCodeRequestDto { + private String requestTime; + private String transactionId; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/IdpLinkCodeResponseDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpLinkCodeResponseDto.java new file mode 100644 index 000000000..1b140a8fd --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpLinkCodeResponseDto.java @@ -0,0 +1,10 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.Data; + +@Data +public class IdpLinkCodeResponseDto { + private String transactionId; + private String linkCode; + private String expireDateTime; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/JwkDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/JwkDto.java new file mode 100644 index 000000000..dbc8fbf2a --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/JwkDto.java @@ -0,0 +1,12 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class JwkDto { + private String kty; + private String e; + private String n; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/LinkTransactionResponseDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/LinkTransactionResponseDto.java index f7f6df474..9067be23f 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/LinkTransactionResponseDto.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/LinkTransactionResponseDto.java @@ -1,11 +1,15 @@ package io.mosip.mimoto.dto.mimoto; import io.mosip.mimoto.dto.ErrorDTO; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; import java.util.List; @Data +@AllArgsConstructor +@NoArgsConstructor public class LinkTransactionResponseDto { private String responseTime; diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInnerReq.java b/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInnerReq.java new file mode 100644 index 000000000..a84538636 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInnerReq.java @@ -0,0 +1,13 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.Data; + +import java.util.List; + +@Data +public class WalletBindingInnerReq { + private String transactionId; + private String individualId; + private List challengeList; + private String publicKey; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInnerRequestDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInnerRequestDto.java new file mode 100644 index 000000000..8952ada50 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInnerRequestDto.java @@ -0,0 +1,14 @@ +package io.mosip.mimoto.dto.mimoto; + +import com.nimbusds.jose.jwk.JWK; +import lombok.Data; + +import java.util.List; + +@Data +public class WalletBindingInnerRequestDto { + private String transactionId; + private String individualId; + private List challengeList; + private JwkDto publicKey; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInternalRequestDTO.java b/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInternalRequestDTO.java new file mode 100644 index 000000000..066ae184c --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInternalRequestDTO.java @@ -0,0 +1,14 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class WalletBindingInternalRequestDTO { + private String requestTime; + private WalletBindingInnerRequestDto request; + +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingRequestDTO.java b/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingRequestDTO.java new file mode 100644 index 000000000..9500a3f90 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingRequestDTO.java @@ -0,0 +1,10 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.Data; + +@Data +public class WalletBindingRequestDTO { + private String requestTime; + private WalletBindingInnerReq request; + +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingResponseDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingResponseDto.java new file mode 100644 index 000000000..9b410b9b1 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingResponseDto.java @@ -0,0 +1,10 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.Data; + +@Data +public class WalletBindingResponseDto { + private String transactionId; + private String encryptedWalletBindingId; + private String expireDateTime; +} diff --git a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java index b94fe3848..e1f1a0938 100644 --- a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java +++ b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java @@ -73,7 +73,9 @@ public enum PlatformErrorMessages { API_NOT_ACCESSIBLE_EXCEPTION(PlatformConstants.PREFIX + "026", "Api not accessible failure"), CERTIFICATE_THUMBPRINT_ERROR(PlatformConstants.PREFIX + "026", "certificate thumbprint failure"), MIMOTO_INVALID_KEY_EXCEPTION(PlatformConstants.PREFIX + "027", "invalid key"), - MIMOTO_PDF_SIGN_EXCEPTION(PlatformConstants.PREFIX + "028", "error occured while signing pdf"); + MIMOTO_PDF_SIGN_EXCEPTION(PlatformConstants.PREFIX + "028", "error occured while signing pdf"), + MIMOTO_WALLET_BINDING_EXCEPTION(PlatformConstants.PREFIX + "028", "Wallet binding exception occured"), + MIMOTO_OTP_BINDING_EXCEPTION(PlatformConstants.PREFIX + "029", "OTP binding exception occured"); /** The error message. */ private final String errorMessage; diff --git a/src/main/java/io/mosip/mimoto/service/RestClientService.java b/src/main/java/io/mosip/mimoto/service/RestClientService.java index 33aa8edda..f139777de 100644 --- a/src/main/java/io/mosip/mimoto/service/RestClientService.java +++ b/src/main/java/io/mosip/mimoto/service/RestClientService.java @@ -74,7 +74,7 @@ public T postApi(ApiName apiName, String queryParam, String queryParamValue, T r * the response type * @param mediaType * the content type - * + * * @return the t * @throws ApisResourceAccessException * the apis resource access exception @@ -121,4 +121,7 @@ public T postApi(ApiName apiName, List pathsegments, String queryParam, public T postApi(ApiName apiName, MediaType mediaType, List pathsegments, List queryParam, List queryParamValue, T requestedData, Class responseType) throws ApisResourceAccessException; + + public T postApi(ApiName apiName, T requestedData, Class responseType, boolean useBearerToken) + throws ApisResourceAccessException; } diff --git a/src/main/java/io/mosip/mimoto/service/impl/RestClientServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/RestClientServiceImpl.java index cfadd6ed2..5da61d2c7 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/RestClientServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/RestClientServiceImpl.java @@ -287,6 +287,26 @@ public Object postApi(ApiName apiName, MediaType mediaType, List pathseg return obj; } + @Override + public Object postApi(ApiName apiName, + Object requestedData, Class responseType, boolean useBearerToken) throws ApisResourceAccessException { + + logger.debug("RestClientServiceImpl::postApi()::entry"); + Object obj = null; + String apiHostIpPort = env.getProperty(apiName.name()); + if (apiHostIpPort != null) { + try { + obj = restApiClient.postApi(apiHostIpPort, MediaType.APPLICATION_JSON, requestedData, responseType, useBearerToken); + } catch (Exception e) { + logger.error(e.getMessage(), e); + throw new ApisResourceAccessException( + PlatformErrorMessages.MIMOTO_RCT_UNKNOWN_RESOURCE_EXCEPTION.getMessage(), e); + } + } + logger.debug("RestClientServiceImpl::postApi()::exit"); + return obj; + } + /** * Check null. * diff --git a/src/main/java/io/mosip/mimoto/util/JoseUtil.java b/src/main/java/io/mosip/mimoto/util/JoseUtil.java index ab9ac52d1..a971bbf58 100644 --- a/src/main/java/io/mosip/mimoto/util/JoseUtil.java +++ b/src/main/java/io/mosip/mimoto/util/JoseUtil.java @@ -4,6 +4,7 @@ import com.nimbusds.jose.jwk.KeyUse; import com.nimbusds.jose.jwk.RSAKey; import io.mosip.kernel.core.util.CryptoUtil; +import io.mosip.mimoto.dto.mimoto.JwkDto; import java.math.BigInteger; import java.security.KeyFactory; @@ -16,45 +17,7 @@ public class JoseUtil { - -// public static void main(String[] args) { -// try { -// // Generate the RSA key pair -// KeyPairGenerator gen = KeyPairGenerator.getInstance("RSA"); -// gen.initialize(2048); -// KeyPair keyPair = gen.generateKeyPair(); -// -// String pk = "-----BEGIN RSA PUBLIC KEY-----\nMIICCgKCAgEArPhI8uHNssl6Wj/T4Px4MGvjQrnCpih+/rsGOmcIml56+0kvQJpb\nfQQ0cDW5BRZrRruCMtbSbVFdZaYgUs9a8UoLujL0djyfdfrDv+a6bqRomK3s9/q4\ndNirsqVTm8WI7oIODa5IuuXQU+YEsnpazpb+cdtbvXwJOvTo+/bSIIX4IWDOPiZM\nt9AGfdw7afRBrQHHyenENW9ACZek/jqu0KEUTqbZb7BsGc2vvyBZrZVfX7PhhtJU\n5JH9kuJltvacHJytA5wUmDydIDONO+YgXPTOfqBQh+u9GxvA0P+kUOxLi1XT/YEW\nBvNc1NJb1FGoG9rO63MP0olq5if2zFryy+BjuGErUj3CTclIk2XhWrAPdwFvRCQI\nuaVlvJk81NNqdPtaNW1UdGpObFgyZCmAXjDHzm/Ou3yvo4z70RTQB27JeeMEADF8\nGrkucKy1s5i8LPRwMwo+kX0fuq9CphyKW7TCavA+idwFQxnzLP3BhtZcDMLUXmQQ\nIKYPnuYoIRPp6CHAjtkWm0zZuhdIhehepSeDO+GIuCkXCvabvMriWcgTRK4xViS3\nT6V4JqNMD5aZDWytjYZuWCAb/E/PdeatqaE5Go7dG27rjdhFIIlKXgUBvu72ZGp9\nPvbx+N7hXgJFN7zV3SLn+CYEICdIeWubznrmsw7O9sFGpnArr+C6P68CAwEAAQ==\n-----END RSA PUBLIC KEY-----\n"; -// String pk2 = "-----BEGIN RSA PUBLIC KEY-----\nMIICCgKCAgEAn6+frMlD7DQqbxZW943hRLBApDj1/lHIJdLYSKEGIfwhd58gc0Y4\n1q11mPnpv7gAZ/Wm0iOAkWSzcIWljXFmGnLrUrBsp4WYKdPjqn4tkrCOjiZa5RPk\nY03a40Kz1lx0W9f94Naozglf6KFUSq+qAwuC5kiPxaxsjFA/LWIP+zT2QX/MnrX9\nv7gt2g0BC4pQ01eTTzhhwO2A7k5z3ucsb56ohND4xdIsdCMm1IczBjW0URSO60Bb\n7m5dlO8BFHJ6inV8awO2KHoADbp3wZgid4KqLJ0eVGyNViVFzj4rxSxL3vcYbyKS\nORWSlPZIZL9ZWO1cyPO9+Wxu29IKj4DQEt8glgITlBZ4L29uT7gFPAbypSn/8SvU\nBrNno8+GIe9XWsrDTMT9dfLGzLUitF3A+wwVZuRVhCqYIisOOGuGE18YK0jmdk9l\n89OpK4PduGiUh66zZTcH3thdtaOz6jj+FLKMg2Q3gNqQ1Y0cezO175RNVVX1ffOu\n5qss1RWams5RAXDqqt/MhiopG3DhlyaSC4xdqei7SI8d+S4Bvflub9rypPnhW67g\nNhZvQDJ7Tb1AWHxKmU0wQvEMtwSm9xtsMs4bqotn2M/09BuRqbrhpvAfrfZArkVO\nv8eLXhtDvo2J9gRwHZIS/JZ1Fo+tep1QFHz1Lr5iGRqwLWQlGbKFuL0CAwEAAQ==\n-----END RSA PUBLIC KEY-----\n"; -// JWK jwk = getJwkFromPublicKey(pk2); -// System.out.println(jwk); -//// org.bouncycastle.asn1.pkcs.RSAPublicKey pkcs1PublicKey = org.bouncycastle.asn1.pkcs.RSAPublicKey.getInstance(io.mosip.kernel.core.util.CryptoUtil.decodePlainBase64(key)); -//// BigInteger modulus = pkcs1PublicKey.getModulus(); -//// BigInteger publicExponent = pkcs1PublicKey.getPublicExponent(); -//// RSAPublicKeySpec keySpec = new RSAPublicKeySpec(modulus, publicExponent); -//// //KeyFactory kf = KeyFactory.getInstance("RSA"); -//// //PublicKey generatedPublic = kf.generatePublic(keySpec); -//// -//// // String publicKeyPemStr = key.replace("-----BEGIN RSA PUBLIC KEY-----\n", ""); -//// String publicKeyPemStr = key.replaceAll("\\n", "").replace("-----BEGIN RSA PUBLIC KEY-----", "").replace("-----END RSA PUBLIC KEY-----", "");; -//// byte[] encoded = io.mosip.kernel.core.util.CryptoUtil.decodePlainBase64(publicKeyPemStr); -//// -//// //X509EncodedKeySpec keySpec = new X509EncodedKeySpec(encoded); -//// KeyFactory keyFactory = KeyFactory.getInstance("RSA"); -//// PublicKey publicKey = keyFactory.generatePublic(keySpec); -//// // Convert to JWK format -//// JWK jwk = new RSAKey.Builder((RSAPublicKey)publicKey) -//// .keyUse(KeyUse.SIGNATURE) -//// .keyID(UUID.randomUUID().toString()) -//// .build(); -// } catch (Exception e) { -// e.printStackTrace(); -// } -// -// } - - - public static JWK getJwkFromPublicKey(String publicKeyString) throws NoSuchAlgorithmException, InvalidKeySpecException { + public static JwkDto getJwkFromPublicKey(String publicKeyString) throws NoSuchAlgorithmException, InvalidKeySpecException { String key = publicKeyString.replaceAll("\\n", "") .replace("-----BEGIN RSA PUBLIC KEY-----", "") .replace("-----END RSA PUBLIC KEY-----", ""); @@ -72,7 +35,8 @@ public static JWK getJwkFromPublicKey(String publicKeyString) throws NoSuchAlgor .keyID(UUID.randomUUID().toString()) .build(); - return jwk; + JwkDto jwkDto = new JwkDto(jwk.getKeyType().toString(), ((RSAKey) jwk).getPublicExponent().toString(), ((RSAKey) jwk).getModulus().toString()); + return jwkDto; } } diff --git a/src/main/java/io/mosip/mimoto/util/RestApiClient.java b/src/main/java/io/mosip/mimoto/util/RestApiClient.java index ec224637e..5e359b3b7 100644 --- a/src/main/java/io/mosip/mimoto/util/RestApiClient.java +++ b/src/main/java/io/mosip/mimoto/util/RestApiClient.java @@ -1,11 +1,20 @@ package io.mosip.mimoto.util; -import java.io.IOException; -import java.net.URI; -import java.util.Iterator; - +import com.google.gson.Gson; +import io.mosip.kernel.core.logger.spi.Logger; +import io.mosip.mimoto.core.http.RequestWrapper; +import io.mosip.mimoto.dto.SecretKeyRequest; +import io.mosip.mimoto.exception.TokenGenerationFailedException; +import org.apache.http.Header; +import org.apache.http.HttpResponse; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.util.EntityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; import org.springframework.core.env.Environment; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; @@ -16,7 +25,9 @@ import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; -import io.mosip.kernel.core.logger.spi.Logger; +import java.io.IOException; +import java.net.URI; +import java.util.Iterator; /** * The Class RestApiClient. @@ -28,12 +39,29 @@ public class RestApiClient { /** The logger. */ private Logger logger = LoggerUtil.getLogger(RestApiClient.class); + private static final String authorization = "Authorization="; /** The builder. */ @Autowired @Qualifier("selfTokenRestTemplate") private RestTemplate restTemplate; + @Autowired + @Qualifier("plainRestTemplate") + private RestTemplate plainRestTemplate; + + @Value("${mosip.authmanager.url}") + private String authBaseUrl; + + @Value("${mosip.iam.adapter.clientid}") + private String clientId; + + @Value("${mosip.iam.adapter.clientsecret}") + private String secret; + + @Value("${mosip.iam.adapter.appid}") + private String appId; + @Autowired Environment environment; @@ -101,6 +129,22 @@ public T postApi(String uri, MediaType mediaType, Object requestType, Class< return result; } + public T postApi(String uri, MediaType mediaType, Object requestType, Class responseClass, boolean useBearerToken) throws Exception { + T result = null; + try { + logger.info("RestApiClient::postApi()::entry uri: {}", uri); + result = (T) plainRestTemplate.postForObject(uri, setRequestHeader(requestType, mediaType, useBearerToken), responseClass); + } catch (Exception e) { + logger.error("RestApiClient::postApi()::error uri: {} {} {}", uri, e.getMessage(), e); + System.setProperty("token", null); + } + return result; + } + + private HttpEntity setRequestHeader(Object requestType, MediaType mediaType) throws IOException { + return setRequestHeader(requestType, mediaType, false); + } + /** * this method sets token to header of the request * @@ -110,11 +154,19 @@ public T postApi(String uri, MediaType mediaType, Object requestType, Class< * @throws IOException */ @SuppressWarnings("unchecked") - private HttpEntity setRequestHeader(Object requestType, MediaType mediaType) throws IOException { + private HttpEntity setRequestHeader(Object requestType, MediaType mediaType, boolean useBearerToken) throws IOException { MultiValueMap headers = new LinkedMultiValueMap(); if (mediaType != null) { headers.add("Content-Type", mediaType.toString()); } + + if (useBearerToken) { + String bearerToken = System.getProperty("token"); + if (bearerToken == null) + bearerToken = getBearerToken(); + headers.add("Authorization", bearerToken); + } + if (requestType != null) { try { HttpEntity httpEntity = (HttpEntity) requestType; @@ -132,4 +184,30 @@ private HttpEntity setRequestHeader(Object requestType, MediaType mediaT } else return new HttpEntity(headers); } + + private String getBearerToken() throws IOException { + + SecretKeyRequest request = new SecretKeyRequest(clientId, secret, appId); + RequestWrapper req = new RequestWrapper<>(); + req.setRequest(request); + + HttpClient httpClient = HttpClientBuilder.create().build(); + HttpPost post = new HttpPost(authBaseUrl); + Gson gson = new Gson(); + + StringEntity postingString = new StringEntity(gson.toJson(req)); + post.setEntity(postingString); + post.setHeader("Content-type", "application/json"); + HttpResponse response = httpClient.execute(post); + org.apache.http.HttpEntity entity = response.getEntity(); + String responseBody = EntityUtils.toString(entity, "UTF-8"); + Header[] cookie = response.getHeaders("Set-Cookie"); + if (cookie.length == 0) + throw new TokenGenerationFailedException(); + String token = response.getHeaders("Set-Cookie")[0].getValue(); + token = token.replace(authorization, ""); + token = "Bearer " + token.substring(0, token.indexOf(';')); + System.setProperty("token", token); + return token; + } } diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 46bb875ac..856ff6122 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -18,7 +18,9 @@ RESIDENT_VID=${mosip.resident.base.url}/vid RESIDENT_AUTH_LOCK=${mosip.resident.base.url}/req/auth-lock RESIDENT_AUTH_UNLOCK=${mosip.resident.base.url}/req/auth-unlock IDP_LINK_TRANSACTION=${public.internet.url}/v1/idp/linked-authorization/link-transaction - +BINDING_OTP=${public.internet.url}/v1/idpbinding/send-binding-otp +WALLET_BINDING=${public.internet.url}/v1/idpbinding/wallet-binding +mosip.authmanager.url=${mosipbox.public.url}/v1/authmanager/authenticate/clientidsecretkey # Mimoto mobileid backend credential.template=template.json From 75d16b207ab297528b3c40c038703177caf23f34 Mon Sep 17 00:00:00 2001 From: Monobikash Das Date: Thu, 15 Dec 2022 19:22:23 +0530 Subject: [PATCH 019/860] Added logger --- .../mimoto/controller/IdpController.java | 21 +++---------------- 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/IdpController.java b/src/main/java/io/mosip/mimoto/controller/IdpController.java index 09415449a..c81870b93 100644 --- a/src/main/java/io/mosip/mimoto/controller/IdpController.java +++ b/src/main/java/io/mosip/mimoto/controller/IdpController.java @@ -13,9 +13,7 @@ import io.mosip.mimoto.util.DateUtils; import io.mosip.mimoto.util.JoseUtil; import io.mosip.mimoto.util.LoggerUtil; -import io.mosip.mimoto.util.Utilities; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -33,25 +31,13 @@ public class IdpController { private static final String ID = "mosip.mimoto.idp"; private Gson gson = new Gson(); - @Value("${mosip.idp.partner.encryption.key}") - private String partnerEncryptionKey; - - @Value("${mosip.idp.partner.id}") - private String partnerId; - - // TODO: Temporary mocking, need to cleanup - @Value("${mimoto.mocked.requestid}") - String mockedReqid; - @Autowired public RestClientService restClientService; - @Autowired - private Utilities utilities; - @PostMapping("/binding-otp") @SuppressWarnings("unchecked") public ResponseEntity otpRequest(@RequestBody BindingOtpRequestDto requestDTO) throws Exception { + logger.info("Received binding-otp request : " + JsonUtils.javaObjectToJsonString(requestDTO)); ResponseWrapper response = null; try { response = (ResponseWrapper) restClientService @@ -70,6 +56,8 @@ public ResponseEntity otpRequest(@RequestBody BindingOtpRequestDto reque public ResponseEntity request(@RequestBody WalletBindingRequestDTO requestDTO) throws Exception { + logger.info("Received wallet-binding request : " + JsonUtils.javaObjectToJsonString(requestDTO)); + ResponseWrapper response = null; try { WalletBindingInnerRequestDto innerRequestDto = new WalletBindingInnerRequestDto(); @@ -80,8 +68,6 @@ public ResponseEntity request(@RequestBody WalletBindingRequestDTO reque WalletBindingInternalRequestDTO req = new WalletBindingInternalRequestDTO(requestDTO.getRequestTime(), innerRequestDto); - logger.info("Received wallet-binding request : " + JsonUtils.javaObjectToJsonString(requestDTO)); - response = (ResponseWrapper) restClientService .postApi(ApiName.WALLET_BINDING, req, ResponseWrapper.class, useBearerToken); @@ -116,7 +102,6 @@ public ResponseEntity linkTransaction(@RequestBody LinkTransactionReques public ResponseEntity idpAuthenticate(@RequestBody IdpAuthenticateRequestDto requestDTO) throws Exception { logger.info("Received idp-authenticate request : " + JsonUtils.javaObjectToJsonString(requestDTO)); - IdpAuthRequestDto reqDto = new IdpAuthRequestDto(); reqDto.setRequestTime(DateUtils.getRequestTimeString()); From 5d0276378b6030b7ec98e6e84c07713ea2e57c25 Mon Sep 17 00:00:00 2001 From: Monobikash Das Date: Mon, 19 Dec 2022 15:59:56 +0530 Subject: [PATCH 020/860] Completed qr login integration with idp --- .../io/mosip/mimoto/constant/ApiName.java | 3 + .../mimoto/controller/IdpController.java | 96 +++++++++++-------- ...CodeRequestDto.java => IdpConsentDto.java} | 4 +- .../dto/mimoto/IdpConsentRequestDto.java | 12 +++ .../io/mosip/mimoto/dto/mimoto/IdpOtpReq.java | 10 ++ .../mosip/mimoto/dto/mimoto/IdpOtpReqDto.java | 16 ++++ ...java => LinkedTransactionResponseDto.java} | 2 +- .../exception/PlatformErrorMessages.java | 6 +- .../resources/application-local.properties | 3 + 9 files changed, 107 insertions(+), 45 deletions(-) rename src/main/java/io/mosip/mimoto/dto/mimoto/{IdpLinkCodeRequestDto.java => IdpConsentDto.java} (57%) create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/IdpConsentRequestDto.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/IdpOtpReq.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/IdpOtpReqDto.java rename src/main/java/io/mosip/mimoto/dto/mimoto/{LinkedKycAuthResponse.java => LinkedTransactionResponseDto.java} (70%) diff --git a/src/main/java/io/mosip/mimoto/constant/ApiName.java b/src/main/java/io/mosip/mimoto/constant/ApiName.java index 0469ba43f..f9ceab18f 100644 --- a/src/main/java/io/mosip/mimoto/constant/ApiName.java +++ b/src/main/java/io/mosip/mimoto/constant/ApiName.java @@ -107,6 +107,9 @@ public enum ApiName { RESIDENT_AID_GET_INDIVIDUALID, IDP_LINK_TRANSACTION, + IDP_AUTHENTICATE, + IDP_CONSENT, + IDP_OTP, BINDING_OTP, WALLET_BINDING } diff --git a/src/main/java/io/mosip/mimoto/controller/IdpController.java b/src/main/java/io/mosip/mimoto/controller/IdpController.java index c81870b93..23f7cafe3 100644 --- a/src/main/java/io/mosip/mimoto/controller/IdpController.java +++ b/src/main/java/io/mosip/mimoto/controller/IdpController.java @@ -8,6 +8,7 @@ import io.mosip.mimoto.core.http.ResponseWrapper; import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.mimoto.*; +import io.mosip.mimoto.exception.ApisResourceAccessException; import io.mosip.mimoto.exception.PlatformErrorMessages; import io.mosip.mimoto.service.RestClientService; import io.mosip.mimoto.util.DateUtils; @@ -37,7 +38,7 @@ public class IdpController { @PostMapping("/binding-otp") @SuppressWarnings("unchecked") public ResponseEntity otpRequest(@RequestBody BindingOtpRequestDto requestDTO) throws Exception { - logger.info("Received binding-otp request : " + JsonUtils.javaObjectToJsonString(requestDTO)); + logger.debug("Received binding-otp request : " + JsonUtils.javaObjectToJsonString(requestDTO)); ResponseWrapper response = null; try { response = (ResponseWrapper) restClientService @@ -56,7 +57,7 @@ public ResponseEntity otpRequest(@RequestBody BindingOtpRequestDto reque public ResponseEntity request(@RequestBody WalletBindingRequestDTO requestDTO) throws Exception { - logger.info("Received wallet-binding request : " + JsonUtils.javaObjectToJsonString(requestDTO)); + logger.debug("Received wallet-binding request : " + JsonUtils.javaObjectToJsonString(requestDTO)); ResponseWrapper response = null; try { @@ -90,60 +91,48 @@ public ResponseEntity linkTransaction(@RequestBody LinkTransactionReques .postApi(ApiName.IDP_LINK_TRANSACTION, null, null, reqDto, LinkTransactionResponseDto.class); } catch (Exception e) { - logger.error("Wallet binding error occured for link code " + requestDTO.getLinkCode(), e); + logger.error("link-transaction error error occured for link code " + requestDTO.getLinkCode(), e); res = new LinkTransactionResponseDto(DateUtils.getRequestTimeString(), null, - getErrors(PlatformErrorMessages.MIMOTO_WALLET_BINDING_EXCEPTION.getCode(), e.getMessage())); + getErrors(PlatformErrorMessages.MIMOTO_LINK_TRANSACTION_EXCEPTION.getCode(), e.getMessage())); } return ResponseEntity.status(HttpStatus.OK).body(res); } @PostMapping("idp-authenticate") - public ResponseEntity idpAuthenticate(@RequestBody IdpAuthenticateRequestDto requestDTO) throws Exception { - logger.info("Received idp-authenticate request : " + JsonUtils.javaObjectToJsonString(requestDTO)); + public ResponseEntity idpAuthenticate(@RequestBody IdpAuthRequestDto requestDTO) throws Exception { + logger.debug("Received idp-authenticate request : " + JsonUtils.javaObjectToJsonString(requestDTO)); - IdpAuthRequestDto reqDto = new IdpAuthRequestDto(); - reqDto.setRequestTime(DateUtils.getRequestTimeString()); + ResponseWrapper response = null; - IdpAuthInternalRequestDto internalDto = new IdpAuthInternalRequestDto(); - internalDto.setIndividualId(requestDTO.getIndividualId()); - internalDto.setLinkedTransactionId(requestDTO.getLinkTransactionId()); - - // mocking challange for time being - IdpChallangeDto challangeDto = new IdpChallangeDto(); - challangeDto.setAuthFactorType("otp"); - challangeDto.setChallenge("111111"); - - internalDto.setChallengeList(Lists.newArrayList(challangeDto)); - - - ResponseWrapper response = (ResponseWrapper) restClientService - .postApi(ApiName.IDP_LINK_TRANSACTION, null, null, - internalDto, ResponseWrapper.class); - - LinkedKycAuthResponse resp = new LinkedKycAuthResponse(); - resp.setLinkedTransactionId(requestDTO.getLinkTransactionId()); + try { + // calling mock otp code which should be removed once idp backend is ready + callIdpOtpApi(requestDTO); - response.setResponsetime(DateUtils.getUTCCurrentDateTimeString()); - response.setId(ID); - response.setResponse(resp); + response = (ResponseWrapper) restClientService + .postApi(ApiName.IDP_AUTHENTICATE, null, null, + requestDTO, ResponseWrapper.class); + } catch (Exception e) { + logger.error("idp-authenticate error error occured for link code " + requestDTO.getRequest().getLinkedTransactionId(), e); + response = getErrorResponse(PlatformErrorMessages.MIMOTO_WALLET_BINDING_EXCEPTION.getCode(), e.getMessage()); + } return ResponseEntity.status(HttpStatus.OK).body(response); } - @PostMapping("idp-link-code") - public ResponseEntity idpLinkCode(@RequestBody IdpLinkCodeRequestDto requestDTO) throws Exception { - logger.info("Received idp-link-code request : " + JsonUtils.javaObjectToJsonString(requestDTO)); + @PostMapping("idp-consent") + public ResponseEntity idpLinkCode(@RequestBody IdpConsentDto requestDTO) throws Exception { + logger.debug("Received idp-link-code request : " + JsonUtils.javaObjectToJsonString(requestDTO)); - IdpLinkCodeResponseDto resp = new IdpLinkCodeResponseDto(); - resp.setTransactionId(requestDTO.getTransactionId()); - resp.setExpireDateTime("2022-12-15T05:12:18.188Z"); - resp.setLinkCode("KlcT32S5jVkhwl9"); - - ResponseWrapper response = new ResponseWrapper<>(); - response.setResponsetime(DateUtils.getUTCCurrentDateTimeString()); - response.setId("mosip.mimoto.idp"); - response.setResponse(resp); + ResponseWrapper response = null; + try { + response = (ResponseWrapper) restClientService + .postApi(ApiName.IDP_CONSENT, null, null, + requestDTO, ResponseWrapper.class); + } catch (Exception e) { + logger.error("link-transaction error error occured for link code " + requestDTO.getRequest().getLinkedTransactionId(), e); + response = getErrorResponse(PlatformErrorMessages.MIMOTO_WALLET_BINDING_EXCEPTION.getCode(), e.getMessage()); + } return ResponseEntity.status(HttpStatus.OK).body(response); } @@ -165,4 +154,29 @@ private List getErrors(String errorCode, String errorMessage) { ErrorDTO errorDTO = new ErrorDTO(errorCode, errorMessage); return Lists.newArrayList(errorDTO); } + + /** + * To be cleaned up later + * + * @param requestDTO + * @return + */ + private void callIdpOtpApi(IdpAuthRequestDto requestDTO) throws ApisResourceAccessException { + + IdpOtpReq req = new IdpOtpReq(); + req.setRequestTime(requestDTO.getRequestTime()); + + IdpOtpReqDto internalRequest = new IdpOtpReqDto(requestDTO.getRequest().getLinkedTransactionId(), + requestDTO.getRequest().getIndividualId(), Lists.newArrayList("EMAIL")); + + req.setRequest(internalRequest); + + ResponseWrapper response = (ResponseWrapper) restClientService + .postApi(ApiName.IDP_OTP, null, null, + req, ResponseWrapper.class); + + if (response.getResponse() == null) + throw new ApisResourceAccessException("Idp otp api not accessible"); + + } } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/IdpLinkCodeRequestDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpConsentDto.java similarity index 57% rename from src/main/java/io/mosip/mimoto/dto/mimoto/IdpLinkCodeRequestDto.java rename to src/main/java/io/mosip/mimoto/dto/mimoto/IdpConsentDto.java index 58da92d39..ca13286d8 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/IdpLinkCodeRequestDto.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpConsentDto.java @@ -3,7 +3,7 @@ import lombok.Data; @Data -public class IdpLinkCodeRequestDto { +public class IdpConsentDto { private String requestTime; - private String transactionId; + private IdpConsentRequestDto request; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/IdpConsentRequestDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpConsentRequestDto.java new file mode 100644 index 000000000..6b6802808 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpConsentRequestDto.java @@ -0,0 +1,12 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.Data; + +import java.util.List; + +@Data +public class IdpConsentRequestDto { + private String linkedTransactionId; + private List acceptedClaims; + private List permittedAuthorizeScopes; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/IdpOtpReq.java b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpOtpReq.java new file mode 100644 index 000000000..32659c0c6 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpOtpReq.java @@ -0,0 +1,10 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.Data; + +@Data +public class IdpOtpReq { + + private String requestTime; + private IdpOtpReqDto request; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/IdpOtpReqDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpOtpReqDto.java new file mode 100644 index 000000000..d56fc4099 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpOtpReqDto.java @@ -0,0 +1,16 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class IdpOtpReqDto { + private String transactionId; + private String individualId; + private List otpChannels; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/LinkedKycAuthResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/LinkedTransactionResponseDto.java similarity index 70% rename from src/main/java/io/mosip/mimoto/dto/mimoto/LinkedKycAuthResponse.java rename to src/main/java/io/mosip/mimoto/dto/mimoto/LinkedTransactionResponseDto.java index 2eb05c2c1..52b72327e 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/LinkedKycAuthResponse.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/LinkedTransactionResponseDto.java @@ -3,6 +3,6 @@ import lombok.Data; @Data -public class LinkedKycAuthResponse { +public class LinkedTransactionResponseDto { private String linkedTransactionId; } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java index e1f1a0938..fa0305dcb 100644 --- a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java +++ b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java @@ -75,7 +75,11 @@ public enum PlatformErrorMessages { MIMOTO_INVALID_KEY_EXCEPTION(PlatformConstants.PREFIX + "027", "invalid key"), MIMOTO_PDF_SIGN_EXCEPTION(PlatformConstants.PREFIX + "028", "error occured while signing pdf"), MIMOTO_WALLET_BINDING_EXCEPTION(PlatformConstants.PREFIX + "028", "Wallet binding exception occured"), - MIMOTO_OTP_BINDING_EXCEPTION(PlatformConstants.PREFIX + "029", "OTP binding exception occured"); + MIMOTO_OTP_BINDING_EXCEPTION(PlatformConstants.PREFIX + "029", "OTP binding exception occured"), + MIMOTO_LINK_TRANSACTION_EXCEPTION(PlatformConstants.PREFIX + "030", "Idp link transaction exception occured"), + MIMOTO_IDP_AUTHENTICATE_EXCEPTION(PlatformConstants.PREFIX + "031", "Idp authenticate exception occured"), + MIMOTO_IDP_CONSENT_EXCEPTION(PlatformConstants.PREFIX + "032", "Idp consent exception occured"), + MIMOTO_IDP_OTP_EXCEPTION(PlatformConstants.PREFIX + "033", "IDP Otp error occured"); /** The error message. */ private final String errorMessage; diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 856ff6122..2e91b4f19 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -18,6 +18,9 @@ RESIDENT_VID=${mosip.resident.base.url}/vid RESIDENT_AUTH_LOCK=${mosip.resident.base.url}/req/auth-lock RESIDENT_AUTH_UNLOCK=${mosip.resident.base.url}/req/auth-unlock IDP_LINK_TRANSACTION=${public.internet.url}/v1/idp/linked-authorization/link-transaction +IDP_AUTHENTICATE=${public.internet.url}/v1/idp/linked-authorization/authenticate +IDP_CONSENT=${public.internet.url}/v1/idp/linked-authorization/consent +IDP_OTP=${public.internet.url}/v1/idp/linked-authorization/send-otp BINDING_OTP=${public.internet.url}/v1/idpbinding/send-binding-otp WALLET_BINDING=${public.internet.url}/v1/idpbinding/wallet-binding mosip.authmanager.url=${mosipbox.public.url}/v1/authmanager/authenticate/clientidsecretkey From 1edce9385b1014d86c56451e86c95496b0622c9e Mon Sep 17 00:00:00 2001 From: Monobikash Das Date: Mon, 19 Dec 2022 16:14:21 +0530 Subject: [PATCH 021/860] Completed qr login integration with idp --- src/main/java/io/mosip/mimoto/util/RestApiClient.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/mosip/mimoto/util/RestApiClient.java b/src/main/java/io/mosip/mimoto/util/RestApiClient.java index 5e359b3b7..59f6d316f 100644 --- a/src/main/java/io/mosip/mimoto/util/RestApiClient.java +++ b/src/main/java/io/mosip/mimoto/util/RestApiClient.java @@ -50,7 +50,7 @@ public class RestApiClient { @Qualifier("plainRestTemplate") private RestTemplate plainRestTemplate; - @Value("${mosip.authmanager.url}") + @Value("${mosip.authmanager.client-token-endpoint}") private String authBaseUrl; @Value("${mosip.iam.adapter.clientid}") From 296a708308d7cd27d881c6fbd73fa399e1551ea5 Mon Sep 17 00:00:00 2001 From: Monobikash Das Date: Tue, 20 Dec 2022 13:14:54 +0530 Subject: [PATCH 022/860] Fixed token reissue bug --- src/main/java/io/mosip/mimoto/util/RestApiClient.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/util/RestApiClient.java b/src/main/java/io/mosip/mimoto/util/RestApiClient.java index 59f6d316f..f7c05ebbb 100644 --- a/src/main/java/io/mosip/mimoto/util/RestApiClient.java +++ b/src/main/java/io/mosip/mimoto/util/RestApiClient.java @@ -5,6 +5,7 @@ import io.mosip.mimoto.core.http.RequestWrapper; import io.mosip.mimoto.dto.SecretKeyRequest; import io.mosip.mimoto.exception.TokenGenerationFailedException; +import org.apache.commons.lang.StringUtils; import org.apache.http.Header; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; @@ -23,6 +24,7 @@ import org.springframework.stereotype.Component; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; +import org.springframework.web.client.HttpClientErrorException; import org.springframework.web.client.RestTemplate; import java.io.IOException; @@ -136,7 +138,12 @@ public T postApi(String uri, MediaType mediaType, Object requestType, Class< result = (T) plainRestTemplate.postForObject(uri, setRequestHeader(requestType, mediaType, useBearerToken), responseClass); } catch (Exception e) { logger.error("RestApiClient::postApi()::error uri: {} {} {}", uri, e.getMessage(), e); - System.setProperty("token", null); + if (e instanceof HttpClientErrorException) { + HttpClientErrorException ex = (HttpClientErrorException)e; + if (ex.getStatusCode().value() == 401) { + System.setProperty("token", ""); + } + } } return result; } @@ -162,7 +169,7 @@ private HttpEntity setRequestHeader(Object requestType, MediaType mediaT if (useBearerToken) { String bearerToken = System.getProperty("token"); - if (bearerToken == null) + if (StringUtils.isEmpty(bearerToken)) bearerToken = getBearerToken(); headers.add("Authorization", bearerToken); } From 7d2796a5249dc73ce60cc3e7904d50b3a728d6b7 Mon Sep 17 00:00:00 2001 From: Monobikash Das Date: Tue, 27 Dec 2022 15:37:55 +0530 Subject: [PATCH 023/860] changed prefix for inji --- src/main/java/io/mosip/mimoto/config/Config.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/mosip/mimoto/config/Config.java b/src/main/java/io/mosip/mimoto/config/Config.java index 58e079cc9..e82f92ea8 100644 --- a/src/main/java/io/mosip/mimoto/config/Config.java +++ b/src/main/java/io/mosip/mimoto/config/Config.java @@ -40,7 +40,7 @@ public class Config extends WebSecurityConfigurerAdapter { private String origins; @Bean - @ConfigurationProperties(prefix = "mosip.inji") + @ConfigurationProperties(prefix = "inji_") public Map injiConfig() { return new HashMap<>(); } From fad2e4b6f3f49900aef13bed159507324f439d8d Mon Sep 17 00:00:00 2001 From: Monobikash Das Date: Tue, 27 Dec 2022 17:49:15 +0530 Subject: [PATCH 024/860] changed prefix for inji --- pom.xml | 3 ++- src/main/java/io/mosip/mimoto/config/Config.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index edb00d0db..d7e0df287 100644 --- a/pom.xml +++ b/pom.xml @@ -21,6 +21,7 @@ 1.2.1-SNAPSHOT 1.2.1-SNAPSHOT + 1.2.0.1-B1 11 @@ -148,7 +149,7 @@ io.mosip.kernel kernel-auth-adapter - ${mosip.kernel.core.version} + ${mosip.kernel.auth.adapter.version} diff --git a/src/main/java/io/mosip/mimoto/config/Config.java b/src/main/java/io/mosip/mimoto/config/Config.java index e82f92ea8..58e079cc9 100644 --- a/src/main/java/io/mosip/mimoto/config/Config.java +++ b/src/main/java/io/mosip/mimoto/config/Config.java @@ -40,7 +40,7 @@ public class Config extends WebSecurityConfigurerAdapter { private String origins; @Bean - @ConfigurationProperties(prefix = "inji_") + @ConfigurationProperties(prefix = "mosip.inji") public Map injiConfig() { return new HashMap<>(); } From 7d95dff352c5a517117afef404be11f3cb323a51 Mon Sep 17 00:00:00 2001 From: Monobikash Das Date: Mon, 2 Jan 2023 17:33:07 +0530 Subject: [PATCH 025/860] sonar issues --- pom.xml | 10 +- .../mosip/mimoto/constant/BiometricType.java | 68 --- .../AttestationServiceController.java | 5 +- .../controller/ResidentServiceController.java | 1 - .../java/io/mosip/mimoto/dto/DataShare.java | 4 +- .../mimoto/dto/DataShareResponseDto.java | 1 - .../java/io/mosip/mimoto/dto/VidResDTO.java | 4 +- .../java/io/mosip/mimoto/entity/BDBInfo.java | 212 -------- src/main/java/io/mosip/mimoto/entity/BIR.java | 136 ------ .../java/io/mosip/mimoto/entity/BIRInfo.java | 115 ----- .../mosip/mimoto/entity/BiometricRecord.java | 40 -- .../io/mosip/mimoto/model/QualityScore.java | 29 -- .../mosip/mimoto/service/CbeffContainerI.java | 19 - .../mosip/mimoto/service/impl/BioApiImpl.java | 107 ----- .../service/impl/CbeffContainerImpl.java | 87 ---- .../mosip/mimoto/service/impl/CbeffImpl.java | 166 +------ .../impl/CredentialShareServiceImpl.java | 11 +- .../java/io/mosip/mimoto/spi/CbeffUtil.java | 22 +- .../java/io/mosip/mimoto/spi/IBioApi.java | 56 --- .../mimoto/util/CbeffToBiometricUtil.java | 125 +---- .../io/mosip/mimoto/util/CbeffValidator.java | 453 ------------------ .../ResidentServiceApplicationTests.java | 13 - 22 files changed, 32 insertions(+), 1652 deletions(-) delete mode 100644 src/main/java/io/mosip/mimoto/constant/BiometricType.java delete mode 100644 src/main/java/io/mosip/mimoto/entity/BDBInfo.java delete mode 100644 src/main/java/io/mosip/mimoto/entity/BIR.java delete mode 100644 src/main/java/io/mosip/mimoto/entity/BIRInfo.java delete mode 100644 src/main/java/io/mosip/mimoto/entity/BiometricRecord.java delete mode 100644 src/main/java/io/mosip/mimoto/model/QualityScore.java delete mode 100644 src/main/java/io/mosip/mimoto/service/CbeffContainerI.java delete mode 100644 src/main/java/io/mosip/mimoto/service/impl/BioApiImpl.java delete mode 100644 src/main/java/io/mosip/mimoto/service/impl/CbeffContainerImpl.java delete mode 100644 src/main/java/io/mosip/mimoto/spi/IBioApi.java delete mode 100644 src/main/java/io/mosip/mimoto/util/CbeffValidator.java delete mode 100644 src/test/java/io/mosip/mimoto/ResidentServiceApplicationTests.java diff --git a/pom.xml b/pom.xml index d7e0df287..e64bcc901 100644 --- a/pom.xml +++ b/pom.xml @@ -22,6 +22,8 @@ 1.2.1-SNAPSHOT 1.2.1-SNAPSHOT 1.2.0.1-B1 + 1.2.1-SNAPSHOT + 3.9.1 11 @@ -79,7 +81,7 @@ - **/constant/**,**/config/**,**/httpfilter/**,**/cache/**,**/dto/**,**/entity/**,**/model/**,**/exception/**,**/repository/**,**/security/**,**/*Config.java,**/*BootApplication.java,**/*VertxApplication.java,**/cbeffutil/** + **/constant/**,**/config/**,**/httpfilter/**,**/cache/**,**/dto/**,**/entity/**,**/model/**,**/exception/**,**/repository/**,**/security/**,**/*Config.java,**/*BootApplication.java,**/*VertxApplication.java,**/cbeffutil/**,**/core.http/** **/dto/**,**/entity/**,**/config/** @@ -334,6 +336,12 @@ 9.25.6 + + io.mosip.kernel + kernel-biometrics-api + ${kernel.biometrics.api.version} + + diff --git a/src/main/java/io/mosip/mimoto/constant/BiometricType.java b/src/main/java/io/mosip/mimoto/constant/BiometricType.java deleted file mode 100644 index 6d86345e7..000000000 --- a/src/main/java/io/mosip/mimoto/constant/BiometricType.java +++ /dev/null @@ -1,68 +0,0 @@ -// -// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 -// See http://java.sun.com/xml/jaxb -// Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2019.05.13 at 03:22:53 PM IST -// - -package io.mosip.mimoto.constant; - -import javax.xml.bind.annotation.XmlEnum; -import javax.xml.bind.annotation.XmlEnumValue; -import javax.xml.bind.annotation.XmlType; - -@XmlType(name = "SingleTypeType") -@XmlEnum -public enum BiometricType { - - @XmlEnumValue("Scent") - SCENT("Scent"), - @XmlEnumValue("Dna") - DNA("DNA"), - @XmlEnumValue("Dna") - EAR("Ear "), - @XmlEnumValue("Face") - FACE("Face"), - @XmlEnumValue("Finger") - FINGER("Finger"), - @XmlEnumValue("Foot") - FOOT("Foot"), - @XmlEnumValue("Vein") - VEIN("Vein"), - @XmlEnumValue("HandGeometry") - HAND_GEOMETRY("HandGeometry"), - @XmlEnumValue("Iris") - IRIS("Iris"), - @XmlEnumValue("Retina") - RETINA("Retina"), - @XmlEnumValue("Voice") - VOICE("Voice"), - @XmlEnumValue("Gait") - GAIT("Gait"), - @XmlEnumValue("Keystroke") - KEYSTROKE("Keystroke"), - @XmlEnumValue("LipMovement") - LIP_MOVEMENT("LipMovement"), - @XmlEnumValue("SignatureSign") - SIGNATURE_SIGN("SignatureSign"); - - private final String value; - - BiometricType(String v) { - value = v; - } - - public String value() { - return value; - } - - public static BiometricType fromValue(String v) { - for (BiometricType c : BiometricType.values()) { - if (c.value.equalsIgnoreCase(v)) { - return c; - } - } - throw new IllegalArgumentException(v); - } - -} diff --git a/src/main/java/io/mosip/mimoto/controller/AttestationServiceController.java b/src/main/java/io/mosip/mimoto/controller/AttestationServiceController.java index ca4a52afb..c7741b42f 100644 --- a/src/main/java/io/mosip/mimoto/controller/AttestationServiceController.java +++ b/src/main/java/io/mosip/mimoto/controller/AttestationServiceController.java @@ -17,7 +17,6 @@ import io.mosip.mimoto.util.AttestationOnlineVerify; import io.mosip.mimoto.util.LoggerUtil; -@SpringBootApplication @RestController @RequestMapping(value = "/safetynet") public class AttestationServiceController { @@ -37,7 +36,7 @@ public class AttestationServiceController { * @return */ @PostMapping(path = "/offline/verify", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity processOffline(@RequestBody String attestation) + public ResponseEntity processOffline(@RequestBody String attestation) { try { AttestationStatement attestationStatement = attestationOfflineVerify.parseAndVerify(attestation); @@ -58,7 +57,7 @@ public ResponseEntity processOffline(@RequestBody String attestation) * @return */ @PostMapping(path = "/online/verify", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity processOnline(@RequestBody String attestation) + public ResponseEntity processOnline(@RequestBody String attestation) { try { AttestationStatement attestationStatement = attestationOnlineVerify.parseAndVerify(attestation); diff --git a/src/main/java/io/mosip/mimoto/controller/ResidentServiceController.java b/src/main/java/io/mosip/mimoto/controller/ResidentServiceController.java index 5806eafdf..8e5adfb00 100644 --- a/src/main/java/io/mosip/mimoto/controller/ResidentServiceController.java +++ b/src/main/java/io/mosip/mimoto/controller/ResidentServiceController.java @@ -23,7 +23,6 @@ import io.mosip.mimoto.util.DateUtils; import io.mosip.mimoto.util.LoggerUtil; -@SpringBootApplication @RestController public class ResidentServiceController { diff --git a/src/main/java/io/mosip/mimoto/dto/DataShare.java b/src/main/java/io/mosip/mimoto/dto/DataShare.java index 2ca7181c1..9b4ff2a08 100644 --- a/src/main/java/io/mosip/mimoto/dto/DataShare.java +++ b/src/main/java/io/mosip/mimoto/dto/DataShare.java @@ -2,6 +2,8 @@ import lombok.Data; +import java.io.Serializable; + /** * Instantiates a new data share. */ @@ -10,7 +12,7 @@ * Instantiates a new data share. */ @Data -public class DataShare { +public class DataShare implements Serializable { /** The url. */ private String url; diff --git a/src/main/java/io/mosip/mimoto/dto/DataShareResponseDto.java b/src/main/java/io/mosip/mimoto/dto/DataShareResponseDto.java index bbd2051c0..05642b351 100644 --- a/src/main/java/io/mosip/mimoto/dto/DataShareResponseDto.java +++ b/src/main/java/io/mosip/mimoto/dto/DataShareResponseDto.java @@ -6,7 +6,6 @@ import lombok.EqualsAndHashCode; @Data -@EqualsAndHashCode(callSuper = true) public class DataShareResponseDto extends BaseRestResponseDTO { private static final long serialVersionUID = 1L; diff --git a/src/main/java/io/mosip/mimoto/dto/VidResDTO.java b/src/main/java/io/mosip/mimoto/dto/VidResDTO.java index 0dc7f08fa..468101b08 100644 --- a/src/main/java/io/mosip/mimoto/dto/VidResDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/VidResDTO.java @@ -4,6 +4,8 @@ import lombok.Data; +import java.io.Serializable; + /** * This class will provide values to hold uin,vid and vidStatus * @@ -11,7 +13,7 @@ * */ @Data -public class VidResDTO { +public class VidResDTO implements Serializable { /** The Value Of UIN in Decrypted value */ @JsonProperty("UIN") diff --git a/src/main/java/io/mosip/mimoto/entity/BDBInfo.java b/src/main/java/io/mosip/mimoto/entity/BDBInfo.java deleted file mode 100644 index 5b93c9aed..000000000 --- a/src/main/java/io/mosip/mimoto/entity/BDBInfo.java +++ /dev/null @@ -1,212 +0,0 @@ -package io.mosip.mimoto.entity; - -import java.io.Serializable; -import java.time.LocalDateTime; -import java.util.List; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlList; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; - -import io.mosip.mimoto.constant.BiometricType; -import io.mosip.mimoto.constant.ProcessedLevelType; -import io.mosip.mimoto.constant.PurposeType; -import io.mosip.mimoto.constant.QualityType; -import io.mosip.mimoto.util.DateAdapter; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * @author Ramadurai Pandian - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "BDBInfoType", propOrder = { "challengeResponse", "index", "format", "encryption", "creationDate", - "notValidBefore", "notValidAfter", "type", "subtype", "level", "product", "captureDevice", - "featureExtractionAlgorithm", "comparisonAlgorithm", "compressionAlgorithm", "purpose", "quality" }) -@Data -@NoArgsConstructor -@JsonDeserialize(builder = BDBInfo.BDBInfoBuilder.class) -public class BDBInfo implements Serializable { - - @XmlElement(name = "ChallengeResponse") - private byte[] challengeResponse; - @XmlElement(name = "Index") - private String index; - @XmlElement(name = "Format") - private RegistryIDType format; - @XmlElement(name = "Encryption") - private Boolean encryption; - @XmlElement(name = "CreationDate") - @XmlSchemaType(name = "dateTime") - @XmlJavaTypeAdapter(DateAdapter.class) - private LocalDateTime creationDate; - @XmlElement(name = "NotValidBefore") - @XmlSchemaType(name = "dateTime") - @XmlJavaTypeAdapter(DateAdapter.class) - private LocalDateTime notValidBefore; - @XmlElement(name = "NotValidAfter") - @XmlSchemaType(name = "dateTime") - @XmlJavaTypeAdapter(DateAdapter.class) - private LocalDateTime notValidAfter; - @XmlList - @XmlElement(name = "Type") - private List type; - @XmlList - @XmlElement(name = "Subtype") - private List subtype; - @XmlElement(name = "Level") - @XmlSchemaType(name = "string") - private ProcessedLevelType level; - @XmlElement(name = "Product") - private RegistryIDType product; - @XmlElement(name = "CaptureDevice") - private RegistryIDType captureDevice; - @XmlElement(name = "FeatureExtractionAlgorithm") - private RegistryIDType featureExtractionAlgorithm; - @XmlElement(name = "ComparisonAlgorithm") - private RegistryIDType comparisonAlgorithm; - @XmlElement(name = "CompressionAlgorithm") - private RegistryIDType compressionAlgorithm; - @XmlElement(name = "Purpose") - @XmlSchemaType(name = "string") - private PurposeType purpose; - @XmlElement(name = "Quality") - private QualityType quality; - - public BDBInfo(BDBInfoBuilder bDBInfoBuilder) { - this.challengeResponse = bDBInfoBuilder.challengeResponse; - this.index = bDBInfoBuilder.index; - this.format = bDBInfoBuilder.format; - this.encryption = bDBInfoBuilder.encryption; - this.creationDate = bDBInfoBuilder.creationDate; - this.notValidBefore = bDBInfoBuilder.notValidBefore; - this.notValidAfter = bDBInfoBuilder.notValidAfter; - this.type = bDBInfoBuilder.type; - this.subtype = bDBInfoBuilder.subtype; - this.level = bDBInfoBuilder.level; - this.product = bDBInfoBuilder.product; - this.purpose = bDBInfoBuilder.purpose; - this.quality = bDBInfoBuilder.quality; - this.captureDevice = bDBInfoBuilder.captureDevice; - this.featureExtractionAlgorithm = bDBInfoBuilder.featureExtractionAlgorithm; - this.comparisonAlgorithm = bDBInfoBuilder.comparisonAlgorithm; - this.compressionAlgorithm = bDBInfoBuilder.compressionAlgorithm; - } - - public static class BDBInfoBuilder { - private byte[] challengeResponse; - private String index; - private RegistryIDType format; - private Boolean encryption; - private LocalDateTime creationDate; - private LocalDateTime notValidBefore; - private LocalDateTime notValidAfter; - private List type; - private List subtype; - private ProcessedLevelType level; - private RegistryIDType product; - private PurposeType purpose; - private QualityType quality; - private RegistryIDType captureDevice; - private RegistryIDType featureExtractionAlgorithm; - private RegistryIDType comparisonAlgorithm; - private RegistryIDType compressionAlgorithm; - - public BDBInfoBuilder withChallengeResponse(byte[] challengeResponse) { - this.challengeResponse = challengeResponse; - return this; - } - - public BDBInfoBuilder withIndex(String index) { - this.index = index; - return this; - } - - public BDBInfoBuilder withFormat(RegistryIDType format) { - this.format = format; - return this; - } - - public BDBInfoBuilder withEncryption(Boolean encryption) { - this.encryption = encryption; - return this; - } - - public BDBInfoBuilder withCreationDate(LocalDateTime creationDate) { - this.creationDate = creationDate; - return this; - } - - public BDBInfoBuilder withNotValidBefore(LocalDateTime notValidBefore) { - this.notValidBefore = notValidBefore; - return this; - } - - public BDBInfoBuilder withNotValidAfter(LocalDateTime notValidAfter) { - this.notValidAfter = notValidAfter; - return this; - } - - public BDBInfoBuilder withType(List type) { - this.type = type; - return this; - } - - public BDBInfoBuilder withSubtype(List subtype) { - this.subtype = subtype; - return this; - } - - public BDBInfoBuilder withLevel(ProcessedLevelType level) { - this.level = level; - return this; - } - - public BDBInfoBuilder withProduct(RegistryIDType product) { - this.product = product; - return this; - } - - public BDBInfoBuilder withPurpose(PurposeType purpose) { - this.purpose = purpose; - return this; - } - - public BDBInfoBuilder withQuality(QualityType quality) { - this.quality = quality; - return this; - } - - public BDBInfo build() { - // TODO - return new BDBInfo(this); - } - - public BDBInfoBuilder withCaptureDevice(RegistryIDType captureDevice) { - this.captureDevice = captureDevice; - return this; - } - - public BDBInfoBuilder withFeatureExtractionAlgorithm(RegistryIDType featureExtractionAlgorithm) { - this.featureExtractionAlgorithm = featureExtractionAlgorithm; - return this; - } - - public BDBInfoBuilder withComparisonAlgorithm(RegistryIDType comparisonAlgorithm) { - this.comparisonAlgorithm = comparisonAlgorithm; - return this; - } - - public BDBInfoBuilder withCompressionAlgorithm(RegistryIDType compressionAlgorithm) { - this.compressionAlgorithm = compressionAlgorithm; - return this; - } - } -} diff --git a/src/main/java/io/mosip/mimoto/entity/BIR.java b/src/main/java/io/mosip/mimoto/entity/BIR.java deleted file mode 100644 index c155d1546..000000000 --- a/src/main/java/io/mosip/mimoto/entity/BIR.java +++ /dev/null @@ -1,136 +0,0 @@ -package io.mosip.mimoto.entity; - -import java.io.Serializable; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; - -import io.mosip.mimoto.util.Base64Adapter; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * - * BIR class with Builder to create data - * - * @author Ramadurai Pandian - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "BIRType", propOrder = { "version", "cbeffversion", "birInfo", "bdbInfo", "bdb", - "sb", "birs", "sbInfo", "others" }) -@XmlRootElement(name = "BIR") -@Data -@NoArgsConstructor -@JsonDeserialize(builder = BIR.BIRBuilder.class) -public class BIR implements Serializable { - - @XmlElement(name = "Version") - private VersionType version; - @XmlElement(name = "CBEFFVersion") - private VersionType cbeffversion; - @XmlElement(name = "BIRInfo", required = true) - private BIRInfo birInfo; - @XmlElement(name = "BDBInfo") - private BDBInfo bdbInfo; - @XmlElement(name = "BDB") - @XmlJavaTypeAdapter(Base64Adapter.class) - private byte[] bdb; - @XmlElement(name = "SB") - private byte[] sb; - @XmlElement(name = "BIR") - protected List birs; - @XmlElement(name = "SBInfo") - private SBInfo sbInfo; - @XmlElement(name = "Others") - private Map others; - - public BIR(BIRBuilder birBuilder) { - this.version = birBuilder.version; - this.cbeffversion = birBuilder.cbeffversion; - this.birInfo = birBuilder.birInfo; - this.bdbInfo = birBuilder.bdbInfo; - this.bdb = birBuilder.bdb; - this.sb = birBuilder.sb; - this.sbInfo = birBuilder.sbInfo; - this.setOthers(birBuilder.others); - } - - public static class BIRBuilder { - private VersionType version; - private VersionType cbeffversion; - private BIRInfo birInfo; - private BDBInfo bdbInfo; - private byte[] bdb; - private byte[] sb; - private SBInfo sbInfo; - private Map others; - - public BIRBuilder withOther(String key, Object value) { - if (Objects.isNull(others)) - this.others = new HashMap<>(); - - this.others.put(key, value); - return this; - } - - public BIRBuilder withOthers(Map others) { - if (Objects.isNull(this.others)) - this.others = new HashMap<>(); - if (!Objects.isNull(others)) - this.others.putAll(others); - return this; - } - - public BIRBuilder withVersion(VersionType version) { - this.version = version; - return this; - } - - public BIRBuilder withCbeffversion(VersionType cbeffversion) { - this.cbeffversion = cbeffversion; - return this; - } - - public BIRBuilder withBirInfo(BIRInfo birInfo) { - this.birInfo = birInfo; - return this; - } - - public BIRBuilder withBdbInfo(BDBInfo bdbInfo) { - this.bdbInfo = bdbInfo; - return this; - } - - public BIRBuilder withBdb(byte[] bdb) { - this.bdb = bdb; - return this; - } - - public BIRBuilder withSb(byte[] sb) { - this.sb = sb; - return this; - } - - public BIRBuilder withSbInfo(SBInfo sbInfo) { - this.sbInfo = sbInfo; - return this; - } - - public BIR build() { - return new BIR(this); - } - - } - -} diff --git a/src/main/java/io/mosip/mimoto/entity/BIRInfo.java b/src/main/java/io/mosip/mimoto/entity/BIRInfo.java deleted file mode 100644 index fc6751975..000000000 --- a/src/main/java/io/mosip/mimoto/entity/BIRInfo.java +++ /dev/null @@ -1,115 +0,0 @@ -package io.mosip.mimoto.entity; - -import java.io.Serializable; -import java.time.LocalDateTime; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; - -import io.mosip.mimoto.util.DateAdapter; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * @author Ramadurai Pandian - * - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "BIRInfoType", propOrder = { "creator", "index", "payload", "integrity", "creationDate", - "notValidBefore", "notValidAfter" }) -@Data -@NoArgsConstructor -@JsonDeserialize(builder = BIRInfo.BIRInfoBuilder.class) -public class BIRInfo implements Serializable { - - /** - * - */ - private static final long serialVersionUID = -2466414332099574792L; - @XmlElement(name = "Creator") - private String creator; - @XmlElement(name = "Index") - private String index; - @XmlElement(name = "Payload") - private byte[] payload; - @XmlElement(name = "Integrity") - private Boolean integrity; - @XmlElement(name = "CreationDate") - @XmlSchemaType(name = "dateTime") - @XmlJavaTypeAdapter(DateAdapter.class) - private LocalDateTime creationDate; - @XmlElement(name = "NotValidBefore") - @XmlSchemaType(name = "dateTime") - @XmlJavaTypeAdapter(DateAdapter.class) - private LocalDateTime notValidBefore; - @XmlElement(name = "NotValidAfter") - @XmlSchemaType(name = "dateTime") - @XmlJavaTypeAdapter(DateAdapter.class) - private LocalDateTime notValidAfter; - - public BIRInfo(BIRInfoBuilder bIRInfoBuilder) { - this.creator = bIRInfoBuilder.creator; - this.index = bIRInfoBuilder.index; - this.payload = bIRInfoBuilder.payload; - this.integrity = bIRInfoBuilder.integrity; - this.creationDate = bIRInfoBuilder.creationDate; - this.notValidBefore = bIRInfoBuilder.notValidBefore; - this.notValidAfter = bIRInfoBuilder.notValidAfter; - } - - public static class BIRInfoBuilder { - private String creator; - private String index; - private byte[] payload; - private Boolean integrity; - private LocalDateTime creationDate; - private LocalDateTime notValidBefore; - private LocalDateTime notValidAfter; - - public BIRInfoBuilder withCreator(String creator) { - this.creator = creator; - return this; - } - - public BIRInfoBuilder withIndex(String index) { - this.index = index; - return this; - } - - public BIRInfoBuilder withPayload(byte[] payload) { - this.payload = payload; - return this; - } - - public BIRInfoBuilder withIntegrity(Boolean integrity) { - this.integrity = integrity; - return this; - } - - public BIRInfoBuilder withCreationDate(LocalDateTime creationDate) { - this.creationDate = creationDate; - return this; - } - - public BIRInfoBuilder withNotValidBefore(LocalDateTime notValidBefore) { - this.notValidBefore = notValidBefore; - return this; - } - - public BIRInfoBuilder withNotValidAfter(LocalDateTime notValidAfter) { - this.notValidAfter = notValidAfter; - return this; - } - - public BIRInfo build() { - return new BIRInfo(this); - } - - } -} diff --git a/src/main/java/io/mosip/mimoto/entity/BiometricRecord.java b/src/main/java/io/mosip/mimoto/entity/BiometricRecord.java deleted file mode 100644 index 5b1dcba74..000000000 --- a/src/main/java/io/mosip/mimoto/entity/BiometricRecord.java +++ /dev/null @@ -1,40 +0,0 @@ -package io.mosip.mimoto.entity; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; - -import lombok.Data; - -/** - * - * BIR class with Builder to create data - * - * @author Ramadurai Pandian - * - */ - -@Data -public class BiometricRecord implements Serializable { - - protected VersionType version; - protected VersionType cbeffversion; - protected BIRInfo birInfo; - /** - * This can be of any modality, each subtype is an element in this list. - * it has type and subtype info in it - */ - protected List segments; - - public BiometricRecord() { - this.segments = new ArrayList<>(); - } - - public BiometricRecord(VersionType version, VersionType cbeffversion, BIRInfo birInfo) { - this.version = version; - this.cbeffversion = cbeffversion; - this.birInfo = birInfo; - this.segments = new ArrayList(); - } - -} diff --git a/src/main/java/io/mosip/mimoto/model/QualityScore.java b/src/main/java/io/mosip/mimoto/model/QualityScore.java deleted file mode 100644 index bede64451..000000000 --- a/src/main/java/io/mosip/mimoto/model/QualityScore.java +++ /dev/null @@ -1,29 +0,0 @@ -package io.mosip.mimoto.model; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import lombok.Data; - -/** - * The Class QualityScore. - * - * @author Sanjay Murali - */ -@Data -public class QualityScore { - - /** The score - 0 - 100 score that represents quality as a percentage */ - private float score; - private List errors; - /** The analytics info - detailed breakdown and other information */ - private Map analyticsInfo; - - public QualityScore() { - this.score = 0; - this.errors = new ArrayList<>(); - this.analyticsInfo = new HashMap(); - } -} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/CbeffContainerI.java b/src/main/java/io/mosip/mimoto/service/CbeffContainerI.java deleted file mode 100644 index ebc1f045e..000000000 --- a/src/main/java/io/mosip/mimoto/service/CbeffContainerI.java +++ /dev/null @@ -1,19 +0,0 @@ -package io.mosip.mimoto.service; - -import java.util.List; - -/** - * @author Ramadurai Pandian - * - * Container Interface to be used for create and update - * - */ -public abstract class CbeffContainerI { - - public abstract U createBIRType(List bir) throws Exception; - - public abstract U updateBIRType(List bir, byte[] fileBytes) throws Exception; - - public abstract boolean validateXML(byte[] fileBytes, byte[] xsdBytes) throws Exception; - -} diff --git a/src/main/java/io/mosip/mimoto/service/impl/BioApiImpl.java b/src/main/java/io/mosip/mimoto/service/impl/BioApiImpl.java deleted file mode 100644 index 434b788ff..000000000 --- a/src/main/java/io/mosip/mimoto/service/impl/BioApiImpl.java +++ /dev/null @@ -1,107 +0,0 @@ -package io.mosip.mimoto.service.impl; - -import java.util.Arrays; -import java.util.Objects; -import java.util.Optional; - -import org.springframework.stereotype.Component; - -import io.mosip.mimoto.constant.QualityType; -import io.mosip.mimoto.entity.BDBInfo; -import io.mosip.mimoto.entity.BIR; -import io.mosip.mimoto.entity.MatchDecision; -import io.mosip.mimoto.model.KeyValuePair; -import io.mosip.mimoto.model.QualityScore; -import io.mosip.mimoto.model.Response; -import io.mosip.mimoto.spi.IBioApi; - -/** - * The Class BioApiImpl. - * - * @author Sanjay Murali - * @author Manoj SP - * - */ -@Component -public class BioApiImpl implements IBioApi { - - /* - * (non-Javadoc) - * - * @see - * io.mosip.kernel.core.bioapi.spi.IBioApi#checkQuality(io.mosip.kernel.core. - * bioapi.model.BIR, io.mosip.kernel.core.bioapi.model.KeyValuePair[]) - */ - @Override - public Response checkQuality(BIR sample, KeyValuePair[] flags) { - QualityScore qualityScore = new QualityScore(); - int major = Optional.ofNullable(sample.getBdbInfo()).map(BDBInfo::getQuality).map(QualityType::getScore) - .orElse(0L).intValue(); - qualityScore.setScore(major); - Response response = new Response<>(); - response.setStatusCode(200); - response.setResponse(qualityScore); - return response; - } - - /* - * (non-Javadoc) - * - * @see - * io.mosip.kernel.core.bioapi.spi.IBioApi#match(io.mosip.kernel.core.bioapi. - * model.BIR, io.mosip.kernel.core.bioapi.model.BIR[], - * io.mosip.kernel.core.bioapi.model.KeyValuePair[]) - */ - @Override - public Response match(BIR sample, BIR[] gallery, KeyValuePair[] flags) { - MatchDecision matchingScore[] = new MatchDecision[gallery.length]; - int count = 0; - for (BIR recordedValue : gallery) { - matchingScore[count] = new MatchDecision(); - if (Objects.nonNull(recordedValue) && Objects.nonNull(recordedValue.getBdb()) - && recordedValue.getBdb().length != 0 && Arrays.equals(recordedValue.getBdb(), sample.getBdb())) { - matchingScore[count].setMatch(true); - } else { - matchingScore[count].setMatch(false); - } - count++; - } - Response response = new Response<>(); - response.setStatusCode(200); - response.setResponse(matchingScore); - return response; - } - - /* - * (non-Javadoc) - * - * @see - * io.mosip.kernel.core.bioapi.spi.IBioApi#extractTemplate(io.mosip.kernel.core. - * bioapi.model.BIR, io.mosip.kernel.core.bioapi.model.KeyValuePair[]) - */ - @Override - public Response extractTemplate(BIR sample, KeyValuePair[] flags) { - Response response = new Response<>(); - response.setStatusCode(200); - response.setResponse(sample); - return response; - } - - /* - * (non-Javadoc) - * - * @see - * io.mosip.kernel.core.bioapi.spi.IBioApi#segment(io.mosip.kernel.core.bioapi. - * model.BIR, io.mosip.kernel.core.bioapi.model.KeyValuePair[]) - */ - @Override - public Response segment(BIR sample, KeyValuePair[] flags) { - BIR[] bir = new BIR[1]; - bir[0] = sample; - Response response = new Response<>(); - response.setStatusCode(200); - response.setResponse(bir); - return response; - } - -} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/impl/CbeffContainerImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CbeffContainerImpl.java deleted file mode 100644 index 393c9e3a4..000000000 --- a/src/main/java/io/mosip/mimoto/service/impl/CbeffContainerImpl.java +++ /dev/null @@ -1,87 +0,0 @@ -package io.mosip.mimoto.service.impl; - -import java.util.List; - -import io.mosip.mimoto.entity.BIR; -import io.mosip.mimoto.entity.BIRInfo; -import io.mosip.mimoto.entity.BIRInfo.BIRInfoBuilder; -import io.mosip.mimoto.service.CbeffContainerI; -import io.mosip.mimoto.util.CbeffValidator; -import io.mosip.mimoto.util.CbeffXSDValidator; - -/** - * @author Ramadurai Pandian - * - * A Container Class where the BIR is created and updated - * - */ -public class CbeffContainerImpl extends CbeffContainerI { - - private BIR bir; - - /** - * Method where the initialization of BIR happens - * - * @param birList List of BIR data - * @return BIR data with all images - */ - @Override - public BIR createBIRType(List birList) { - load(); - bir.setBirs(birList); - return bir; - } - - private void load() { - // Creating first version of Cbeff - bir = new BIR(); - // Initial Version - // VersionType versionType = new VersionType(); - // versionType.setMajor(1); - // versionType.setMinor(1); - // VersionType cbeffVersion = new VersionType(); - // cbeffVersion.setMajor(1); - // cbeffVersion.setMinor(1); - // BIR.setVersion(versionType); - // BIR.setCBEFFVersion(cbeffVersion); - - BIRInfoBuilder infoBuilder = new BIRInfoBuilder().withIntegrity(false); - BIRInfo birInfo = new BIRInfo(infoBuilder); - bir.setBirInfo(birInfo); - } - - /** - * Method to the update of BIR - * - * @param birList List of BIR data - * - * @param fileBytes Cbeff XML data as bytes - * - * @return BIR BIR data with all images - */ - @Override - public BIR updateBIRType(List birList, byte[] fileBytes) throws Exception { - BIR biometricRecord = CbeffValidator.getBIRFromXML(fileBytes); - // BIR.getVersion().setMajor(BIR.getVersion().getMajor() + 1); - // BIR.getCBEFFVersion().setMajor(BIR.getCBEFFVersion().getMajor()); - for (BIR bir : birList) { - biometricRecord.getBirs().add(bir); - } - return biometricRecord; - } - - /** - * Method to the validate the BIR - * - * @param xmlBytes Cbeff XML data as bytes array - * - * @param xsdBytes Cbeff XSD data as bytes array - * - * @return boolean of validated XML against XSD - */ - @Override - public boolean validateXML(byte[] xmlBytes, byte[] xsdBytes) throws Exception { - return CbeffXSDValidator.validateXML(xsdBytes, xmlBytes); - } - -} diff --git a/src/main/java/io/mosip/mimoto/service/impl/CbeffImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CbeffImpl.java index 06fda5e15..6cda6138f 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CbeffImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CbeffImpl.java @@ -8,13 +8,13 @@ import javax.annotation.PostConstruct; +import io.mosip.kernel.biometrics.commons.CbeffValidator; +import io.mosip.kernel.biometrics.entities.BIR; import org.apache.commons.io.IOUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; -import io.mosip.mimoto.entity.BIR; import io.mosip.mimoto.spi.CbeffUtil; -import io.mosip.mimoto.util.CbeffValidator; /** * This class is used to create,update, validate and search Cbeff data. @@ -24,121 +24,6 @@ @Component public class CbeffImpl implements CbeffUtil { - /* - * XSD storage path from config server - */ - - /** The config server file storage URL. */ - @Value("${mosip.kernel.xsdstorage-uri}") - private String configServerFileStorageURL; - - /* - * XSD file name - */ - - /** The schema name. */ - @Value("${mosip.kernel.xsdfile}") - private String schemaName; - - /** The xsd. */ - private byte[] xsd; - - /** - * Load XSD. - * - * @throws IOException Signals that an I/O exception has occurred. - */ - @PostConstruct - public void loadXSD() throws IOException { - try (InputStream xsdBytes = new URL(configServerFileStorageURL + schemaName).openStream()) { - xsd = IOUtils.toByteArray(xsdBytes); - } - } - - /** - * Method used for creating Cbeff XML. - * - * @param birList pass List of BIR for creating Cbeff data - * @return return byte array of XML data - * @throws Exception exception - */ - @Override - public byte[] createXML(List birList) throws Exception { - CbeffContainerImpl cbeffContainer = new CbeffContainerImpl(); - BIR bir = cbeffContainer.createBIRType(birList); - return CbeffValidator.createXMLBytes(bir, xsd); - } - - /** - * Method used for creating Cbeff XML with xsd. - * - * @param birList pass List of BIR for creating Cbeff data - * @param xsd byte array of XSD data - * @return return byte array of XML data - * @throws Exception Exception - */ - - @Override - public byte[] createXML(List birList, byte[] xsd) throws Exception { - CbeffContainerImpl cbeffContainer = new CbeffContainerImpl(); - BIR bir = cbeffContainer.createBIRType(birList); - return CbeffValidator.createXMLBytes(bir, xsd); - } - - /** - * Method used for updating Cbeff XML. - * - * @param birList pass List of BIR for creating Cbeff data - * @param fileBytes the file bytes - * @return return byte array of XML data - * @throws Exception Exception - */ - @Override - public byte[] updateXML(List birList, byte[] fileBytes) throws Exception { - CbeffContainerImpl cbeffContainer = new CbeffContainerImpl(); - BIR bir = cbeffContainer.updateBIRType(birList, fileBytes); - return CbeffValidator.createXMLBytes(bir, xsd); - } - - /** - * Method used for validating XML against XSD. - * - * @param xmlBytes byte array of XML data - * @param xsdBytes byte array of XSD data - * @return boolean if data is valid or not - * @throws Exception Exception - */ - @Override - public boolean validateXML(byte[] xmlBytes, byte[] xsdBytes) throws Exception { - CbeffContainerImpl cbeffContainer = new CbeffContainerImpl(); - return cbeffContainer.validateXML(xmlBytes, xsdBytes); - } - - /* - * (non-Javadoc) - * - * @see io.mosip.kernel.core.cbeffutil.spi.CbeffUtil#validateXML(byte[]) - */ - @Override - public boolean validateXML(byte[] xmlBytes) throws Exception { - return validateXML(xmlBytes, xsd); - } - - /** - * Method used for validating XML against XSD. - * - * @param fileBytes byte array of XML data - * @param type to be searched - * @param subType to be searched - * @return bdbMap Map of type and String of encoded biometric data - * @throws Exception Exception - */ - @Override - public Map getBDBBasedOnType(byte[] fileBytes, String type, String subType) throws Exception { - BIR bir = CbeffValidator.getBIRFromXML(fileBytes); - return CbeffValidator.getBDBBasedOnTypeAndSubType(bir, type, subType); - } - /** * Method used for getting list of BIR from XML bytes * * @@ -151,51 +36,4 @@ public List getBIRDataFromXML(byte[] xmlBytes) throws Exception { BIR bir = CbeffValidator.getBIRFromXML(xmlBytes); return bir.getBirs(); } - - /** - * Method used for getting Map of BIR from XML bytes with type and subType. - * - * @param xmlBytes byte array of XML data - * @param type type - * @param subType subType - * @return bdbMap Map of BIR data extracted from XML - * @throws Exception Exception - */ - @Override - public Map getAllBDBData(byte[] xmlBytes, String type, String subType) throws Exception { - BIR bir = CbeffValidator.getBIRFromXML(xmlBytes); - return CbeffValidator.getAllBDBData(bir, type, subType); - } - - /* - * (non-Javadoc) - * - * @see - * io.mosip.kernel.core.cbeffutil.spi.CbeffUtil#getBIRDataFromXMLType(byte[], - * java.lang.String) - */ - @Override - public List getBIRDataFromXMLType(byte[] xmlBytes, String type) throws Exception { - return CbeffValidator.getBIRDataFromXMLType(xmlBytes, type); - } - - /* - * public static void main(String arg[]) throws Exception { byte[] xsd = - * Files.readAllBytes(Paths.get("C:\\Users\\M1044287\\Desktop\\cbeff.xsd")); - * CbeffImpl cbeffImpl = new CbeffImpl(); List birs = - * cbeffImpl.getBIRDataFromXML(readCreatedXML()); - * - * - * byte[] ac = new CbeffImpl().createXML(birs, xsd); - * FileUtils.writeByteArrayToFile(new - * File("C:\\Users\\M1044287\\Desktop\\a.xml"), ac); - * - * } - * - * private static byte[] readCreatedXML() throws IOException { byte[] - * fileContent = - * Files.readAllBytes(Paths.get("C:\\Users\\M1044287\\Desktop\\cbeff-dev.xml")); - * return fileContent; } - */ - } diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java index 5ca53828f..37379e5a2 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java @@ -30,6 +30,9 @@ import com.fasterxml.jackson.databind.JsonMappingException; import com.google.gson.Gson; +import io.mosip.kernel.biometrics.constant.BiometricType; +import io.mosip.kernel.biometrics.entities.BDBInfo; +import io.mosip.kernel.biometrics.entities.BIR; import org.joda.time.DateTime; import org.json.simple.JSONArray; import org.json.simple.JSONObject; @@ -44,7 +47,6 @@ import io.mosip.biometrics.util.CommonUtil; import io.mosip.kernel.core.logger.spi.Logger; import io.mosip.kernel.core.websub.spi.PublisherClient; -import io.mosip.mimoto.constant.BiometricType; import io.mosip.mimoto.constant.DocumentGeneratorExceptionCodeConstant; import io.mosip.mimoto.constant.EventId; import io.mosip.mimoto.constant.EventName; @@ -57,8 +59,6 @@ import io.mosip.mimoto.dto.CryptoWithPinResponseDto; import io.mosip.mimoto.dto.DataShare; import io.mosip.mimoto.dto.JsonValue; -import io.mosip.mimoto.entity.BDBInfo; -import io.mosip.mimoto.entity.BIR; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.CryptoManagerException; import io.mosip.mimoto.exception.DataShareException; @@ -345,10 +345,6 @@ public byte[] createJSONFile(org.json.JSONObject credential, String individualBi if (credential == null) { throw new IdentityNotFoundException(PlatformErrorMessages.MIMOTO_PIS_IDENTITY_NOT_FOUND.getMessage()); } - // Get JSON template from MOSIP config. - // String printTextFileJson = utilities.getPrintTextFileJson(utilities.getConfigServerFileStorageURL(), - // utilities.getRegistrationProcessorPrintTextFile()); - // JSONObject templateJSON = JsonUtil.objectMapperReadValue(printTextFileJson, JSONObject.class); // Use local JSON template to include biometrics. JSONObject templateJSON = utilities.getTemplate(); @@ -386,7 +382,6 @@ public byte[] createJSONFile(org.json.JSONObject credential, String individualBi * Decode biometrics data from CBEFF and return biometrics JSON object. * * @param individualBiometric - * @param attributes * @return */ public org.json.JSONObject getBiometricsDataJSON(String individualBiometric) { diff --git a/src/main/java/io/mosip/mimoto/spi/CbeffUtil.java b/src/main/java/io/mosip/mimoto/spi/CbeffUtil.java index 9cb9bb964..3e7f422d1 100644 --- a/src/main/java/io/mosip/mimoto/spi/CbeffUtil.java +++ b/src/main/java/io/mosip/mimoto/spi/CbeffUtil.java @@ -1,9 +1,8 @@ package io.mosip.mimoto.spi; -import java.util.List; -import java.util.Map; +import io.mosip.kernel.biometrics.entities.BIR; -import io.mosip.mimoto.entity.BIR; +import java.util.List; /** * @author @@ -14,22 +13,5 @@ */ public interface CbeffUtil { - public byte[] createXML(List cbeffPack) throws Exception; - - public byte[] updateXML(List cbeffPackList, byte[] fileBytes) throws Exception; - - public boolean validateXML(byte[] xmlBytes, byte[] xsdBytes) throws Exception; - - public boolean validateXML(byte[] xmlBytes) throws Exception; - - public Map getBDBBasedOnType(byte[] fileBytes, String type, String subType) throws Exception; - public List getBIRDataFromXML(byte[] xmlBytes) throws Exception; - - public Map getAllBDBData(byte[] xmlBytes, String type, String subType) throws Exception; - - public byte[] createXML(List birList, byte[] xsd) throws Exception; - - public List getBIRDataFromXMLType(byte[] xmlBytes, String type) throws Exception; - } diff --git a/src/main/java/io/mosip/mimoto/spi/IBioApi.java b/src/main/java/io/mosip/mimoto/spi/IBioApi.java deleted file mode 100644 index 34159c04e..000000000 --- a/src/main/java/io/mosip/mimoto/spi/IBioApi.java +++ /dev/null @@ -1,56 +0,0 @@ -package io.mosip.mimoto.spi; - -import io.mosip.mimoto.entity.BIR; -import io.mosip.mimoto.entity.MatchDecision; -import io.mosip.mimoto.model.KeyValuePair; -import io.mosip.mimoto.model.QualityScore; -import io.mosip.mimoto.model.Response; - -/** - * The Interface IBioApi. - * - * @author Sanjay Murali - * @author Manoj SP - * - */ -public interface IBioApi { - - /** - * It checks the quality of the provided biometric image and render the - * respective quality score. - * - * @param sample the sample - * @param flags the flags - * @return the response - */ - Response checkQuality(BIR sample, KeyValuePair[] flags); - - /** - * It compares the biometrics and provide the respective matching scores. - * - * @param sample the sample - * @param gallery the gallery - * @param flags the flags - * @return the response - */ - Response match(BIR sample, BIR[] gallery, KeyValuePair[] flags); - - /** - * Extract template. - * - * @param sample the sample - * @param flags the flags - * @return the response - */ - Response extractTemplate(BIR sample, KeyValuePair[] flags); - - /** - * It segment the single biometric image into multiple biometric images. Eg: - * Split the thumb slab into multiple fingers - * - * @param sample the sample - * @param flags the flags - * @return the response - */ - Response segment(BIR sample, KeyValuePair[] flags); -} diff --git a/src/main/java/io/mosip/mimoto/util/CbeffToBiometricUtil.java b/src/main/java/io/mosip/mimoto/util/CbeffToBiometricUtil.java index 61afc3b22..b8f6a8861 100644 --- a/src/main/java/io/mosip/mimoto/util/CbeffToBiometricUtil.java +++ b/src/main/java/io/mosip/mimoto/util/CbeffToBiometricUtil.java @@ -1,24 +1,14 @@ package io.mosip.mimoto.util; -import java.io.ByteArrayInputStream; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.List; - -import org.apache.commons.codec.binary.Base64; - +import io.mosip.kernel.biometrics.constant.BiometricType; +import io.mosip.kernel.biometrics.entities.BIR; import io.mosip.kernel.core.logger.spi.Logger; -import io.mosip.mimoto.constant.BiometricType; import io.mosip.mimoto.constant.LoggerFileConstant; -import io.mosip.mimoto.entity.BIR; -import io.mosip.mimoto.exception.BiometricException; -import io.mosip.mimoto.exception.BiometricTagMatchException; -import io.mosip.mimoto.exception.PlatformErrorMessages; -import io.mosip.mimoto.model.KeyValuePair; -import io.mosip.mimoto.service.impl.BioApiImpl; import io.mosip.mimoto.service.impl.CbeffImpl; import io.mosip.mimoto.spi.CbeffUtil; -import io.mosip.mimoto.spi.IBioApi; +import org.apache.commons.codec.binary.Base64; + +import java.util.List; /** * The Class CbeffToBiometricUtil. @@ -33,7 +23,6 @@ public class CbeffToBiometricUtil { /** The cbeffutil. */ private CbeffUtil cbeffutil = new CbeffImpl(); /** the bioApi */ - private IBioApi bioAPi = new BioApiImpl(); /** * Instantiates a new cbeff to biometric util. @@ -79,7 +68,7 @@ public byte[] getImageBytes(String cbeffFileString, String type, List su /** * Gets the photo by type and sub type. * - * @param bIRTypeList the b IR type list + * @param bIRList the b IR type list * @param type the type * @param subType the sub type * @return the photo by type and sub type @@ -124,41 +113,11 @@ private boolean isBiometricType(String type, List biometricTypeLi return isType; } - /** - * Merge cbeff. - * - * @param cbeffFile1 the cbeff file 1 - * @param cbeffFile2 the cbeff file 2 - * @return the input stream - * @throws Exception the exception - */ - - public InputStream mergeCbeff(String cbeffFile1, String cbeffFile2) throws Exception { - byte[] mergedCbeffByte = null; - logger.debug(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.USERID.toString(), "", - "CbeffToBiometricUtil::mergeCbeff()::entry"); - - List file1BirList = getBIRTypeList(cbeffFile1); - List file2BirList = getBIRTypeList(cbeffFile2); - - if (isBiometricTypeSame(file1BirList, file2BirList)) { - throw new BiometricTagMatchException(PlatformErrorMessages.MIMOTO_UTL_BIOMETRIC_TAG_MATCH.getCode()); - } - - file1BirList.addAll(file2BirList); - mergedCbeffByte = cbeffutil.createXML(file2BirList); - - logger.debug(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.USERID.toString(), "", - "CbeffToBiometricUtil::mergeCbeff()::exit"); - - return new ByteArrayInputStream(mergedCbeffByte); - } - /** * Checks if is same type. * - * @param file1BirTypeList the file 1 bir type list - * @param file2BirTypeList the file 2 bir type list + * @param file1BirList the file 1 bir type list + * @param file2BirList the file 2 bir type list * @return true, if is same type */ private boolean isBiometricTypeSame(List file1BirList, List file2BirList) { @@ -178,51 +137,6 @@ private boolean isBiometricTypeSame(List file1BirList, List file2BirLi return isTypeSame; } - /** - * Extract cbeff with types. - * - * @param cbeffFile the cbeff file - * @param types the types - * @return the input stream - * @throws Exception the exception - */ - public InputStream extractCbeffWithTypes(String cbeffFile, List types) throws Exception { - List extractedBIR = new ArrayList<>(); - logger.debug(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.USERID.toString(), "", - "CbeffToBiometricUtil::extractCbeffWithTypes()::entry"); - - byte[] newCbeffByte = null; - List file2BirTypeList = getBIRTypeList(cbeffFile); - for (BIR bir : file2BirTypeList) { - List biometricTypeList = bir.getBdbInfo().getType(); - for (String type : types) { - if (biometricTypeList.get(0).value().equalsIgnoreCase(type)) { - extractedBIR.add(bir); - } - } - } - if (!extractedBIR.isEmpty()) { - newCbeffByte = cbeffutil.createXML(extractedBIR); - } else { - return null; - } - logger.debug(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.USERID.toString(), "", - "CbeffToBiometricUtil::extractCbeffWithTypes()::exit"); - - return new ByteArrayInputStream(newCbeffByte); - } - - /** - * Convert BIRTYP eto BIR. - * - * @param listOfBIR the list of BIR - * @return the list - *//* - * public List convertBIRTYPEtoBIR(List listOfBIR) { - * - * return cbeffutil.convertBIRTypeToBIR(listOfBIR); } - */ - /** * Gets the BIR type list. * @@ -235,27 +149,4 @@ public List getBIRTypeList(String cbeffFileString) throws Exception { return cbeffutil.getBIRDataFromXML(Base64.decodeBase64(cbeffFileString)); } - /** - * Gets the BIR type list. - * - * @param xmlBytes byte array of XML data - * @return the BIR type list - * @throws Exception the exception - */ - public List getBIRDataFromXML(byte[] xmlBytes) throws Exception { - return cbeffutil.getBIRDataFromXML(xmlBytes); - } - - /** - * Gets the BIR template - * - * @param sample the sample - * @param flags the flags - * @return the biometric record - * @throws BiometricException - */ - public BIR extractTemplate(BIR sample, KeyValuePair[] flags) throws BiometricException { - return bioAPi.extractTemplate(sample, flags).getResponse(); - } - } diff --git a/src/main/java/io/mosip/mimoto/util/CbeffValidator.java b/src/main/java/io/mosip/mimoto/util/CbeffValidator.java deleted file mode 100644 index 3e9538ece..000000000 --- a/src/main/java/io/mosip/mimoto/util/CbeffValidator.java +++ /dev/null @@ -1,453 +0,0 @@ -package io.mosip.mimoto.util; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.OutputStreamWriter; -import java.time.ZoneOffset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; -import java.util.stream.Collectors; - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBElement; -import javax.xml.bind.Marshaller; -import javax.xml.bind.Unmarshaller; -import javax.xml.transform.stream.StreamSource; - -import org.apache.commons.codec.binary.Base64; -import org.xml.sax.SAXException; - -import io.mosip.mimoto.constant.BiometricType; -import io.mosip.mimoto.constant.CbeffConstant; -import io.mosip.mimoto.entity.BDBInfo; -import io.mosip.mimoto.entity.BIR; -import io.mosip.mimoto.entity.BIRInfo; -import io.mosip.mimoto.entity.RegistryIDType; -import io.mosip.mimoto.entity.SingleAnySubtypeType; -import io.mosip.mimoto.entity.VersionType; -import io.mosip.mimoto.exception.CbeffException; - -/** - * @author Ramadurai Pandian - * - * An Utility Class to validate the data before generating an valid - * CBEFF XML and to get all the data based on Type and SubType - * - */ -public class CbeffValidator { - - /** - * Method used for custom validation of the BIR - * - * @param birRoot BIR data - * - * @return boolean value if BIR is valid - * - * @exception CbeffException when any condition fails - * - */ - public static boolean validateXML(BIR birRoot) throws CbeffException { - if (birRoot == null) { - throw new CbeffException("BIR value is null"); - } - List birList = birRoot.getBirs(); - for (BIR bir : birList) { - if (bir != null) { - if (bir.getBdb().length < 1) { - throw new CbeffException("BDB value can't be empty"); - } - if (bir.getBdbInfo() != null) { - BDBInfo bdbInfo = bir.getBdbInfo(); - // if - // (!Long.valueOf(bdbInfo.getFormat().getOrganization()).equals(CbeffConstant.FORMAT_OWNER)) - // { - // throw new CbeffException("Patron Format Owner should be standard specified of - // value " - // + CbeffConstant.FORMAT_OWNER); - // } - List biometricTypes = bdbInfo.getType(); - if (biometricTypes == null || biometricTypes.isEmpty()) { - throw new CbeffException("Type value needs to be provided"); - } - if (!validateFormatType(Long.valueOf(bdbInfo.getFormat().getType()), biometricTypes)) { - throw new CbeffException("Patron Format type is invalid"); - } - } else { - throw new CbeffException("BDB information can't be empty"); - } - } - } - return false; - - } - - /** - * Method used for validation of Format Type - * - * @param formatType format type - * - * @param biometricTypes List of types - * - * @return boolean value if format type is matching with type - * - */ - private static boolean validateFormatType(long formatType, List biometricTypes) { - BiometricType biometricType = biometricTypes.get(0); - switch (biometricType.value()) { - case "Finger": - return formatType == CbeffConstant.FORMAT_TYPE_FINGER - || formatType == CbeffConstant.FORMAT_TYPE_FINGER_MINUTIAE; - case "Iris": - return formatType == CbeffConstant.FORMAT_TYPE_IRIS; - case "Face": - return formatType == CbeffConstant.FORMAT_TYPE_FACE; - case "HandGeometry": - return formatType == CbeffConstant.FORMAT_TYPE_FACE; - } - - return false; - } - - /** - * Method used for getting Format Type Id from type string - * - * @param type format type - * - * @return long format type id - * - */ - private static long getFormatType(String type) { - switch (type.toLowerCase()) { - case "finger": - return CbeffConstant.FORMAT_TYPE_FINGER; - case "iris": - return CbeffConstant.FORMAT_TYPE_IRIS; - case "fmr": - return CbeffConstant.FORMAT_TYPE_FINGER_MINUTIAE; - case "face": - return CbeffConstant.FORMAT_TYPE_FACE; - case "handgeometry": - return CbeffConstant.FORMAT_TYPE_FACE; - } - return 0; - } - - /** - * Method used for creating XML bytes using JAXB - * - * @param bir BIR type - * @param xsd xml schema definition - * @return byte[] byte array of XML data - * - * @exception Exception exception - * - */ - public static byte[] createXMLBytes(BIR bir, byte[] xsd) throws Exception { - CbeffValidator.validateXML(bir); - JAXBContext jaxbContext = JAXBContext.newInstance(BIR.class); - Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); - jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); // To - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - OutputStreamWriter writer = new OutputStreamWriter(baos); - jaxbMarshaller.marshal(bir, writer); - byte[] savedData = baos.toByteArray(); - writer.close(); - try { - CbeffXSDValidator.validateXML(xsd, savedData); - } catch (SAXException sax) { - String message = sax.getMessage(); - message = message.substring(message.indexOf(":")); - throw new CbeffException("XSD validation failed due to attribute " + message); - } - return savedData; - } - - /* - * private static byte[] readXSD(String name) throws IOException { byte[] - * fileContent = Files.readAllBytes(Paths.get(tempPath + "/schema/" + name + - * ".xsd")); return fileContent; } - */ - - /** - * Method used for BIR Type - * - * @param fileBytes byte array of XML data - * - * @return BIR BIR data - * - * @exception Exception exception - * - */ - public static BIR getBIRFromXML(byte[] fileBytes) throws Exception { - JAXBContext jaxbContext = JAXBContext.newInstance(BIR.class); - Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); - JAXBElement jaxBir = unmarshaller - .unmarshal(new StreamSource(new ByteArrayInputStream(fileBytes)), BIR.class); - BIR bir = jaxBir.getValue(); - return bir; - } - - /** - * Method used for searching Cbeff data based on type and subtype - * - * @param biometricType BIR data - * - * @param type format type - * - * @param subType format subtype - * - * @return bdbMap - * - * @exception Exception exception - * - */ - public static Map getBDBBasedOnTypeAndSubType(BIR bir, String type, String subType) - throws Exception { - - if (type == null && subType == null) { - return getAllLatestDatafromBIR(bir); - } - BiometricType biometricType = null; - SingleAnySubtypeType singleAnySubType = null; - Long formatType = null; - if (type != null) { - biometricType = getBiometricType(type); - formatType = getFormatType(type); - } - if (subType != null) { - singleAnySubType = getSingleAnySubtype(subType); - } - Map bdbMap = new HashMap<>(); - if (bir.getBirs() != null && !bir.getBirs().isEmpty()) { - populateBDBMap(bir, biometricType, singleAnySubType, formatType, bdbMap); - } - Map map = new TreeMap<>(bdbMap); - Map finalMap = new HashMap<>(); - for (Map.Entry mapEntry : map.entrySet()) { - String pattern = mapEntry.getKey().substring(0, mapEntry.getKey().lastIndexOf("_")); - if (mapEntry.getKey().contains(pattern)) { - finalMap.put(mapEntry.getKey().substring(0, mapEntry.getKey().lastIndexOf("_")), mapEntry.getValue()); - } - } - return finalMap; - } - - private static void populateBDBMap(BIR birRoot, BiometricType biometricType, - SingleAnySubtypeType singleAnySubType, Long formatType, Map bdbMap) { - for (BIR bir : birRoot.getBirs()) { - BDBInfo bdbInfo = bir.getBdbInfo(); - - if (bdbInfo != null) { - List singleSubTypeList = bdbInfo.getSubtype(); - List biometricTypes = bdbInfo.getType(); - String bdbFormatType = bdbInfo.getFormat().getType(); - boolean formatMatch = Long.valueOf(bdbFormatType).equals(formatType); - if (singleAnySubType == null && biometricTypes.contains(biometricType) && formatMatch) { - bdbMap.put( - biometricType.toString() + "_" + String.join(" ", singleSubTypeList) + "_" - + String.valueOf(bdbFormatType) + "_" - + bdbInfo.getCreationDate().toInstant(ZoneOffset.UTC).toEpochMilli(), - Base64.encodeBase64String(bir.getBdb())); - } else if (biometricType == null && singleSubTypeList.contains(singleAnySubType.value())) { - List singleTypeStringList = convertToList(biometricTypes); - bdbMap.put( - String.join(" ", singleTypeStringList) + "_" + String.join(" ", singleSubTypeList) + "_" - + String.valueOf(bdbFormatType) + "_" - + bdbInfo.getCreationDate().toInstant(ZoneOffset.UTC).toEpochMilli(), - Base64.encodeBase64String(bir.getBdb())); - } else if (biometricTypes.contains(biometricType) - && singleSubTypeList.contains(singleAnySubType != null ? singleAnySubType.value() : null) - && formatMatch) { - bdbMap.put( - biometricType.toString() + "_" + singleAnySubType.value() + "_" - + String.valueOf(bdbFormatType) + "_" - + bdbInfo.getCreationDate().toInstant(ZoneOffset.UTC).toEpochMilli(), - Base64.encodeBase64String(bir.getBdb())); - } - } - } - } - - private static Map getAllLatestDatafromBIR(BIR birRoot) throws Exception { - Map bdbMap = new HashMap<>(); - if (birRoot.getBirs() != null && birRoot.getBirs().size() > 0) { - for (BIR bir : birRoot.getBirs()) { - BDBInfo bdbInfo = bir.getBdbInfo(); - - if (bdbInfo != null) { - List singleSubTypeList = bdbInfo.getSubtype(); - List biometricTypes = bdbInfo.getType(); - if (singleSubTypeList.isEmpty()) { - singleSubTypeList = new ArrayList<>(); - singleSubTypeList.add("No Subtype"); - } - String bdbFormatType = bdbInfo.getFormat().getType(); - bdbMap.put( - String.join(" ", biometricTypes.get(0).toString()) + "_" - + String.join(" ", singleSubTypeList) + "_" + String.valueOf(bdbFormatType) + "_" - + bdbInfo.getCreationDate().toInstant(ZoneOffset.UTC).toEpochMilli(), - Base64.encodeBase64String(bir.getBdb())); - } - } - } - Map map = new TreeMap<>(bdbMap); - Map finalMap = new HashMap<>(); - for (Map.Entry mapEntry : map.entrySet()) { - String pattern = mapEntry.getKey().substring(0, mapEntry.getKey().lastIndexOf("_")); - if (mapEntry.getKey().contains(pattern)) { - finalMap.put(mapEntry.getKey().substring(0, mapEntry.getKey().lastIndexOf("_")), mapEntry.getValue()); - } - } - return finalMap; - } - - /** - * Method to convert single type list to string - * - */ - private static List convertToList(List biometricTypeList) { - return biometricTypeList.stream().map(Enum::name).collect(Collectors.toList()); - } - - /** - * Method to get enum type from string type - * - */ - private static BiometricType getBiometricType(String type) { - if (isInEnum(type, BiometricType.class)) { - return BiometricType.valueOf(type); - } else { - switch (type) { - case "FMR": - return BiometricType.FINGER; - default: - return BiometricType.fromValue(type); - } - } - } - - public static > boolean isInEnum(String value, Class enumClass) { - for (E e : enumClass.getEnumConstants()) { - if (e.name().equals(value)) { - return true; - } - } - return false; - } - - public static Map getAllBDBData(BIR birRoot, String type, String subType) throws Exception { - BiometricType biometricType = null; - SingleAnySubtypeType singleAnySubType = null; - Long formatType = null; - if (type != null) { - biometricType = getBiometricType(type); - } - if (subType != null) { - singleAnySubType = getSingleAnySubtype(subType); - } - if (type != null) { - formatType = getFormatType(type); - } - Map bdbMap = new HashMap<>(); - List birs = birRoot.getBirs(); - if (birs != null && !birs.isEmpty()) { - for (BIR bir : birs) { - BDBInfo bdbInfo = bir.getBdbInfo(); - - if (bdbInfo != null) { - List singleSubTypeList = bdbInfo.getSubtype(); - List singleTypeList = bdbInfo.getType(); - String bdbFormatType = bdbInfo.getFormat().getType(); - boolean formatMatch = Long.valueOf(bdbFormatType).equals(formatType); - if (singleAnySubType == null && singleTypeList.contains(biometricType) && formatMatch) { - bdbMap.put( - biometricType.toString() + "_" + String.join(" ", singleSubTypeList) + "_" - + String.valueOf(bdbFormatType) + "_" - + bdbInfo.getCreationDate().toInstant(ZoneOffset.UTC).toEpochMilli(), - new String(bir.getBdb(), "UTF-8")); - } else if (biometricType == null && singleSubTypeList.contains(singleAnySubType.value())) { - List singleTypeStringList = convertToList(singleTypeList); - bdbMap.put( - String.join(" ", singleSubTypeList) + "_" + String.join(" ", singleTypeStringList) + "_" - + String.valueOf(bdbFormatType) + "_" - + bdbInfo.getCreationDate().toInstant(ZoneOffset.UTC).toEpochMilli(), - new String(bir.getBdb(), "UTF-8")); - } else if (singleTypeList.contains(biometricType) - && singleSubTypeList.contains(singleAnySubType != null ? singleAnySubType.value() : null) - && formatMatch) { - bdbMap.put( - singleAnySubType.toString() + "_" + biometricType.toString() + "_" - + String.valueOf(bdbFormatType) + "_" - + bdbInfo.getCreationDate().toInstant(ZoneOffset.UTC).toEpochMilli(), - new String(bir.getBdb(), "UTF-8")); - } - } - } - } - return bdbMap; - } - - /** - * Method to get enum sub type from string subtype - * - */ - private static SingleAnySubtypeType getSingleAnySubtype(String subType) { - return subType != null ? SingleAnySubtypeType.fromValue(subType) : null; - } - - private static List getBIRList(List birs) { - List birList = new ArrayList<>(); - for (BIR bir : birs) { - RegistryIDType format = new RegistryIDType(); - format.setOrganization(bir.getBdbInfo().getFormat().getOrganization()); - format.setType(bir.getBdbInfo().getFormat().getType()); - BIR.BIRBuilder birBuilder = new BIR.BIRBuilder(); - birBuilder.withBdb(bir.getBdb()).withOthers(bir.getOthers()) - .withBirInfo(new BIRInfo.BIRInfoBuilder().withIntegrity(bir.getBirInfo().getIntegrity()).build()) - .withBdbInfo(new BDBInfo.BDBInfoBuilder().withFormat(format) - .withQuality(bir.getBdbInfo().getQuality()).withType(bir.getBdbInfo().getType()) - .withSubtype(bir.getBdbInfo().getSubtype()) - .withPurpose(bir.getBdbInfo().getPurpose()).withLevel(bir.getBdbInfo().getLevel()) - .withCreationDate(bir.getBdbInfo().getCreationDate()).build()); - - VersionType versionType = bir.getVersion(); - if (versionType != null) { - birBuilder.withVersion(versionType); - } - - VersionType cbeffversionType = bir.getCbeffversion(); - if (cbeffversionType != null) { - birBuilder.withCbeffversion(cbeffversionType); - } - - birList.add(birBuilder.build()); - } - return birList; - } - - public static List getBIRDataFromXMLType(byte[] xmlBytes, String type) throws Exception { - BiometricType biometricType = null; - List updatedBIRList = new ArrayList<>(); - JAXBContext jaxbContext = JAXBContext.newInstance(BIR.class); - Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); - JAXBElement jaxBir = unmarshaller - .unmarshal(new StreamSource(new ByteArrayInputStream(xmlBytes)), BIR.class); - BIR birRoot = jaxBir.getValue(); - for (BIR bir : birRoot.getBirs()) { - if (type != null) { - biometricType = getBiometricType(type); - BDBInfo bdbInfo = bir.getBdbInfo(); - if (bdbInfo != null) { - List biometricTypes = bdbInfo.getType(); - if (biometricTypes != null && biometricTypes.contains(biometricType)) { - updatedBIRList.add(bir); - } - } - } - } - return updatedBIRList; - } -} diff --git a/src/test/java/io/mosip/mimoto/ResidentServiceApplicationTests.java b/src/test/java/io/mosip/mimoto/ResidentServiceApplicationTests.java deleted file mode 100644 index 2cdd7f9e1..000000000 --- a/src/test/java/io/mosip/mimoto/ResidentServiceApplicationTests.java +++ /dev/null @@ -1,13 +0,0 @@ -package io.mosip.mimoto; - -// import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -@SpringBootTest -class ResidentServiceApplicationTests { - - // @Test - // void contextLoads() { - // } - -} From 6b00422aac2c93356cc72020b825b488144d861e Mon Sep 17 00:00:00 2001 From: Monobikash Das Date: Thu, 5 Jan 2023 17:00:44 +0530 Subject: [PATCH 026/860] Test case coverage for mimoto --- pom.xml | 15 +- .../mimoto/MimotoServiceApplication.java | 7 - .../mosip/mimoto/service/impl/CbeffImpl.java | 39 -- .../impl/CredentialShareServiceImpl.java | 271 ++-------- .../java/io/mosip/mimoto/spi/CbeffUtil.java | 17 - .../mimoto/util/CbeffToBiometricUtil.java | 77 +-- .../io/mosip/mimoto/TestBootApplication.java | 14 + .../mosip/mimoto/config/MimotoConfigTest.java | 88 ++++ .../mimoto/controller/InjiControllerTest.java | 467 ++++++++++++++++++ .../service/CredentialShareServiceTest.java | 149 ++++++ .../mimoto/service/RestClientServiceTest.java | 206 ++++++++ 11 files changed, 984 insertions(+), 366 deletions(-) delete mode 100644 src/main/java/io/mosip/mimoto/service/impl/CbeffImpl.java delete mode 100644 src/main/java/io/mosip/mimoto/spi/CbeffUtil.java create mode 100644 src/test/java/io/mosip/mimoto/TestBootApplication.java create mode 100644 src/test/java/io/mosip/mimoto/config/MimotoConfigTest.java create mode 100644 src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java create mode 100644 src/test/java/io/mosip/mimoto/service/CredentialShareServiceTest.java create mode 100644 src/test/java/io/mosip/mimoto/service/RestClientServiceTest.java diff --git a/pom.xml b/pom.xml index e64bcc901..7815657e7 100644 --- a/pom.xml +++ b/pom.xml @@ -81,7 +81,7 @@ - **/constant/**,**/config/**,**/httpfilter/**,**/cache/**,**/dto/**,**/entity/**,**/model/**,**/exception/**,**/repository/**,**/security/**,**/*Config.java,**/*BootApplication.java,**/*VertxApplication.java,**/cbeffutil/**,**/core.http/** + **/constant/**,**/config/**,**/httpfilter/**,**/cache/**,**/dto/**,**/entity/**,**/model/**,**/exception/**,**/repository/**,**/security/**,**/*Config.java,**/*BootApplication.java,**/*VertxApplication.java,**/cbeffutil/**,**/core.http/**,**/util/** **/dto/**,**/entity/**,**/config/** @@ -342,6 +342,19 @@ ${kernel.biometrics.api.version} + + org.powermock + powermock-module-junit4 + ${powermock.beta.version} + test + + + org.powermock + powermock-api-mockito2 + ${powermock.beta.version} + test + + diff --git a/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java b/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java index b89cf5fa0..7da4ddc97 100644 --- a/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java +++ b/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java @@ -15,8 +15,6 @@ import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; -import io.mosip.mimoto.service.impl.CbeffImpl; -import io.mosip.mimoto.spi.CbeffUtil; @SpringBootApplication(scanBasePackages = { "io.mosip.mimoto.*", @@ -30,11 +28,6 @@ @EnableScheduling @EnableAsync public class MimotoServiceApplication { - @Bean - @Primary - public CbeffUtil getCbeffUtil() { - return new CbeffImpl(); - } @Bean public ThreadPoolTaskScheduler taskScheduler() { diff --git a/src/main/java/io/mosip/mimoto/service/impl/CbeffImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CbeffImpl.java deleted file mode 100644 index 6cda6138f..000000000 --- a/src/main/java/io/mosip/mimoto/service/impl/CbeffImpl.java +++ /dev/null @@ -1,39 +0,0 @@ -package io.mosip.mimoto.service.impl; - -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.util.List; -import java.util.Map; - -import javax.annotation.PostConstruct; - -import io.mosip.kernel.biometrics.commons.CbeffValidator; -import io.mosip.kernel.biometrics.entities.BIR; -import org.apache.commons.io.IOUtils; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; - -import io.mosip.mimoto.spi.CbeffUtil; - -/** - * This class is used to create,update, validate and search Cbeff data. - * - * @author Ramadurai Pandian - */ -@Component -public class CbeffImpl implements CbeffUtil { - - /** - * Method used for getting list of BIR from XML bytes * - * - * @param xmlBytes byte array of XML data - * @return List of BIR data extracted from XML - * @throws Exception Exception - */ - @Override - public List getBIRDataFromXML(byte[] xmlBytes) throws Exception { - BIR bir = CbeffValidator.getBIRFromXML(xmlBytes); - return bir.getBirs(); - } -} diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java index 37379e5a2..48e1fe015 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java @@ -1,39 +1,21 @@ package io.mosip.mimoto.service.impl; -import java.io.ByteArrayInputStream; -import java.io.DataInputStream; -import java.io.File; -import java.io.IOException; -import java.net.URI; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.StandardOpenOption; -import java.security.InvalidAlgorithmParameterException; -import java.security.InvalidKeyException; -import java.security.NoSuchAlgorithmException; -import java.security.spec.InvalidKeySpecException; -import java.sql.Timestamp; -import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.TreeMap; -import java.util.UUID; - -import javax.crypto.BadPaddingException; -import javax.crypto.IllegalBlockSizeException; - -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.databind.JsonMappingException; import com.google.gson.Gson; - +import io.mosip.biometrics.util.CommonUtil; import io.mosip.kernel.biometrics.constant.BiometricType; import io.mosip.kernel.biometrics.entities.BDBInfo; import io.mosip.kernel.biometrics.entities.BIR; -import org.joda.time.DateTime; +import io.mosip.kernel.core.logger.spi.Logger; +import io.mosip.kernel.core.websub.spi.PublisherClient; +import io.mosip.mimoto.constant.*; +import io.mosip.mimoto.dto.CryptoWithPinRequestDto; +import io.mosip.mimoto.dto.CryptoWithPinResponseDto; +import io.mosip.mimoto.dto.JsonValue; +import io.mosip.mimoto.exception.*; +import io.mosip.mimoto.model.EventModel; +import io.mosip.mimoto.service.CredentialShareService; +import io.mosip.mimoto.service.RestClientService; +import io.mosip.mimoto.util.*; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; @@ -44,48 +26,20 @@ import org.springframework.http.HttpHeaders; import org.springframework.stereotype.Service; -import io.mosip.biometrics.util.CommonUtil; -import io.mosip.kernel.core.logger.spi.Logger; -import io.mosip.kernel.core.websub.spi.PublisherClient; -import io.mosip.mimoto.constant.DocumentGeneratorExceptionCodeConstant; -import io.mosip.mimoto.constant.EventId; -import io.mosip.mimoto.constant.EventName; -import io.mosip.mimoto.constant.EventType; -import io.mosip.mimoto.constant.IdType; -import io.mosip.mimoto.constant.LoggerFileConstant; -import io.mosip.mimoto.constant.ModuleName; -import io.mosip.mimoto.constant.PlatformSuccessMessages; -import io.mosip.mimoto.dto.CryptoWithPinRequestDto; -import io.mosip.mimoto.dto.CryptoWithPinResponseDto; -import io.mosip.mimoto.dto.DataShare; -import io.mosip.mimoto.dto.JsonValue; -import io.mosip.mimoto.exception.ApiNotAccessibleException; -import io.mosip.mimoto.exception.CryptoManagerException; -import io.mosip.mimoto.exception.DataShareException; -import io.mosip.mimoto.exception.DocumentGeneratorException; -import io.mosip.mimoto.exception.ExceptionUtils; -import io.mosip.mimoto.exception.IdentityNotFoundException; -import io.mosip.mimoto.exception.ParsingException; -import io.mosip.mimoto.exception.PlatformErrorMessages; -import io.mosip.mimoto.exception.UINNotFoundInDatabase; -import io.mosip.mimoto.model.CredentialStatusEvent; -import io.mosip.mimoto.model.EventModel; -import io.mosip.mimoto.model.StatusEvent; -import io.mosip.mimoto.service.CredentialShareService; -import io.mosip.mimoto.service.RestClientService; -import io.mosip.mimoto.spi.CbeffUtil; -import io.mosip.mimoto.util.AuditLogRequestBuilder; -import io.mosip.mimoto.util.CbeffToBiometricUtil; -import io.mosip.mimoto.util.CryptoCoreUtil; -import io.mosip.mimoto.util.CryptoUtil; -import io.mosip.mimoto.util.DataShareUtil; -import io.mosip.mimoto.util.DateUtils; -import io.mosip.mimoto.util.JsonUtil; -import io.mosip.mimoto.util.LogDescription; -import io.mosip.mimoto.util.LoggerUtil; -import io.mosip.mimoto.util.RestApiClient; -import io.mosip.mimoto.util.Utilities; -import io.mosip.mimoto.util.WebSubSubscriptionHelper; +import javax.crypto.BadPaddingException; +import javax.crypto.IllegalBlockSizeException; +import java.io.ByteArrayInputStream; +import java.io.DataInputStream; +import java.io.IOException; +import java.net.URI; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardOpenOption; +import java.security.InvalidAlgorithmParameterException; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.security.spec.InvalidKeySpecException; +import java.util.*; @Service public class CredentialShareServiceImpl implements CredentialShareService { @@ -116,30 +70,15 @@ public class CredentialShareServiceImpl implements CredentialShareService { @Autowired public CryptoCoreUtil cryptoCoreUtil; - /** The Constant FILE_SEPARATOR. */ - public static final String FILE_SEPARATOR = File.separator; + @Autowired + CbeffToBiometricUtil util; /** The Constant VALUE. */ public static final String VALUE = "value"; - /** The Constant UIN_CARD_TEMPLATE. */ - public static final String UIN_CARD_TEMPLATE = "RPR_UIN_CARD_TEMPLATE"; - - /** The Constant MASKED_UIN_CARD_TEMPLATE. */ - public static final String MASKED_UIN_CARD_TEMPLATE = "RPR_MASKED_UIN_CARD_TEMPLATE"; - - /** The Constant FACE. */ - public static final String FACE = "Face"; - /** The Constant UIN_TEXT_FILE. */ public static final String UIN_TEXT_FILE = "textFile"; - /** The Constant APPLICANT_PHOTO. */ - public static final String APPLICANT_PHOTO = "ApplicantPhoto"; - - /** The Constant UINCARDPASSWORD. */ - public static final String UINCARDPASSWORD = "mosip.registration.processor.print.service.uincard.password"; - private Logger logger = LoggerUtil.getLogger(CredentialShareServiceImpl.class); @Value("${vercred.type.vid:PCN}") @@ -147,54 +86,34 @@ public class CredentialShareServiceImpl implements CredentialShareService { /** The core audit request builder. */ @Autowired - public AuditLogRequestBuilder auditLogRequestBuilder; + private AuditLogRequestBuilder auditLogRequestBuilder; /** The utilities. */ @Autowired - public Utilities utilities; + private Utilities utilities; /** The rest client service. */ @Autowired - public RestClientService restClientService; - - /** The Constant INDIVIDUAL_BIOMETRICS. */ - public static final String INDIVIDUAL_BIOMETRICS = "individualBiometrics"; - - /** The Constant VID_CREATE_ID. */ - public static final String VID_CREATE_ID = "registration.processor.id.repo.generate"; - - /** The Constant REG_PROC_APPLICATION_VERSION. */ - public static final String REG_PROC_APPLICATION_VERSION = "registration.processor.id.repo.vidVersion"; - - /** The Constant DATETIME_PATTERN. */ - public static final String DATETIME_PATTERN = "mosip.print.datetime.pattern"; - - public static final String NAME = "name"; - - public static final String VID_TYPE = "registration.processor.id.repo.vidType"; - - /** The cbeffutil. */ - @Autowired - public CbeffUtil cbeffutil; + private RestClientService restClientService; /** The env. */ @Autowired - public Environment env; + private Environment env; @Autowired - public PublisherClient pb; + private PublisherClient pb; @Value("${mosip.datashare.partner.id}") - public String partnerId; + private String partnerId; @Value("${mosip.datashare.policy.id}") - public String policyId; + private String policyId; @Value("${mosip.template-language}") - public String templateLang; + private String templateLang; @Value("#{'${mosip.mandatory-languages:}'.concat('${mosip.optional-languages:}')}") - public String supportedLang; + private String supportedLang; public boolean generateDocuments(EventModel eventModel) throws Exception { Path eventFilePath = Path.of(utilities.getDataPath(), @@ -292,14 +211,6 @@ else if (credentialJSON.has(vid)) // statusUpdate(requestId, textFileByte, credentialType); isTransactionSuccessful = true; - } catch (UINNotFoundInDatabase e) { - description.setMessage(PlatformErrorMessages.MIMOTO_UIN_NOT_FOUND_IN_DATABASE.getMessage()); - description.setCode(PlatformErrorMessages.MIMOTO_UIN_NOT_FOUND_IN_DATABASE.getCode()); - - logger.error(PlatformErrorMessages.MIMOTO_UIN_NOT_FOUND_IN_DATABASE.name(), e); - throw new DocumentGeneratorException(DocumentGeneratorExceptionCodeConstant.PDF_EXCEPTION.getErrorCode(), - e.getErrorText()); - } catch (Exception e) { description.setMessage(PlatformErrorMessages.MIMOTO_DOCUMENT_GENERATION_FAILED.getMessage()); description.setCode(PlatformErrorMessages.MIMOTO_DOCUMENT_GENERATION_FAILED.getCode()); @@ -345,7 +256,6 @@ public byte[] createJSONFile(org.json.JSONObject credential, String individualBi if (credential == null) { throw new IdentityNotFoundException(PlatformErrorMessages.MIMOTO_PIS_IDENTITY_NOT_FOUND.getMessage()); } - // Use local JSON template to include biometrics. JSONObject templateJSON = utilities.getTemplate(); Set templateKeys = templateJSON.keySet(); @@ -374,7 +284,6 @@ public byte[] createJSONFile(org.json.JSONObject credential, String individualBi } } } - return outputJSON.toString().getBytes(); } @@ -387,7 +296,6 @@ public byte[] createJSONFile(org.json.JSONObject credential, String individualBi public org.json.JSONObject getBiometricsDataJSON(String individualBiometric) { org.json.JSONObject biometrics = new org.json.JSONObject(); if (individualBiometric != null) { - CbeffToBiometricUtil util = new CbeffToBiometricUtil(cbeffutil); try { List bIRTypeList = util.getBIRTypeList(individualBiometric); for (int i = 0; i < bIRTypeList.size(); i++) { @@ -437,78 +345,8 @@ public String getSignature(String sign, String credential) { return signature; } - /** - * Gets the artifacts. - * - * @param jsonString the id json string - * @param attribute the attribute - * @return the artifacts - * @throws IOException Signals that an I/O exception has occurred. - * @throws ParseException - */ - @SuppressWarnings("unchecked") - public void setTemplateAttributes(String jsonString, Map attribute) - throws IOException, ParseException { - try { - JSONObject demographicIdentity = JsonUtil.objectMapperReadValue(jsonString, JSONObject.class); - if (demographicIdentity == null) - throw new IdentityNotFoundException(PlatformErrorMessages.MIMOTO_PIS_IDENTITY_NOT_FOUND.getMessage()); - - String mapperJsonString = utilities.getIdentityMappingJson(utilities.getConfigServerFileStorageURL(), - utilities.getGetRegProcessorIdentityJson()); - JSONObject mapperJson = JsonUtil.objectMapperReadValue(mapperJsonString, JSONObject.class); - JSONObject mapperIdentity = JsonUtil.getJSONObject(mapperJson, - utilities.getGetRegProcessorDemographicIdentity()); - - List mapperJsonKeys = new ArrayList<>(mapperIdentity.keySet()); - for (String key : mapperJsonKeys) { - LinkedHashMap jsonObject = JsonUtil.getJSONValue(mapperIdentity, key); - Object obj = null; - String values = jsonObject.get(VALUE); - for (String value : values.split(",")) { - // Object object = demographicIdentity.get(value); - Object object = demographicIdentity.get(value); - if (object != null) { - try { - obj = new JSONParser().parse(object.toString()); - } catch (Exception e) { - obj = object; - } - - if (obj instanceof JSONArray) { - // JSONArray node = JsonUtil.getJSONArray(demographicIdentity, value); - JsonValue[] jsonValues = JsonUtil.mapJsonNodeToJavaObject(JsonValue.class, (JSONArray) obj); - for (JsonValue jsonValue : jsonValues) { - /* - * if (jsonValue.getLanguage().equals(primaryLang)) attribute.put(value + "_" + - * primaryLang, jsonValue.getValue()); if - * (jsonValue.getLanguage().equals(secondaryLang)) attribute.put(value + "_" + - * secondaryLang, jsonValue.getValue()); - */ - if (supportedLang.contains(jsonValue.getLanguage())) - attribute.put(value + "_" + jsonValue.getLanguage(), jsonValue.getValue()); - - } - - } else if (object instanceof JSONObject) { - JSONObject json = (JSONObject) object; - attribute.put(value, (String) json.get(VALUE)); - } else { - attribute.put(value, String.valueOf(object)); - } - } - - } - } - - } catch (JsonParseException | JsonMappingException e) { - logger.error("Error while parsing Json file", e); - throw new ParsingException(PlatformErrorMessages.MIMOTO_RGS_JSON_PARSING_EXCEPTION.getMessage(), e); - } - } - @SuppressWarnings("unused") - public byte[] extractFaceImageData(byte[] decodedBioValue) { + private byte[] extractFaceImageData(byte[] decodedBioValue) { try (DataInputStream din = new DataInputStream(new ByteArrayInputStream(decodedBioValue))) { @@ -558,41 +396,10 @@ public byte[] extractFaceImageData(byte[] decodedBioValue) { public String getCredentialSubject(String credential) { org.json.JSONObject jsonObject = new org.json.JSONObject(credential); - String credentialSubject = jsonObject.get("credentialSubject").toString(); + String credentialSubject = jsonObject.get("credentialSubject").toString(); return credentialSubject; } - /** - * Create datashare and update printing status via websub. - * Should be call at the end of the event handler section. - * - * @param requestId - * @param data - * @param credentialType - * @throws DataShareException - * @throws ApiNotAccessibleException - * @throws IOException - * @throws Exception - */ - public void statusUpdate(String requestId, byte[] data, String credentialType) - throws DataShareException, ApiNotAccessibleException, IOException, Exception { - DataShare dataShare = null; - dataShare = dataShareUtil.getDataShare(data, policyId, partnerId); - CredentialStatusEvent creEvent = new CredentialStatusEvent(); - LocalDateTime currentDtime = DateUtils.getUTCCurrentDateTime(); - StatusEvent sEvent = new StatusEvent(); - sEvent.setId(UUID.randomUUID().toString()); - sEvent.setRequestId(requestId); - sEvent.setStatus("printing"); - sEvent.setUrl(dataShare.getUrl()); - sEvent.setTimestamp(Timestamp.valueOf(currentDtime).toString()); - creEvent.setPublishedOn(new DateTime().toString()); - creEvent.setPublisher("PRINT_SERVICE"); - creEvent.setTopic(topic); - creEvent.setEvent(sEvent); - webSubSubscriptionHelper.publish(topic, creEvent); - } - /** * Decrypt protected (encrypted) attributes. * diff --git a/src/main/java/io/mosip/mimoto/spi/CbeffUtil.java b/src/main/java/io/mosip/mimoto/spi/CbeffUtil.java deleted file mode 100644 index 3e7f422d1..000000000 --- a/src/main/java/io/mosip/mimoto/spi/CbeffUtil.java +++ /dev/null @@ -1,17 +0,0 @@ -package io.mosip.mimoto.spi; - -import io.mosip.kernel.biometrics.entities.BIR; - -import java.util.List; - -/** - * @author - * - * - * Interface for Cbeff Interface - * - */ -public interface CbeffUtil { - - public List getBIRDataFromXML(byte[] xmlBytes) throws Exception; -} diff --git a/src/main/java/io/mosip/mimoto/util/CbeffToBiometricUtil.java b/src/main/java/io/mosip/mimoto/util/CbeffToBiometricUtil.java index b8f6a8861..9feba98fd 100644 --- a/src/main/java/io/mosip/mimoto/util/CbeffToBiometricUtil.java +++ b/src/main/java/io/mosip/mimoto/util/CbeffToBiometricUtil.java @@ -2,69 +2,30 @@ import io.mosip.kernel.biometrics.constant.BiometricType; import io.mosip.kernel.biometrics.entities.BIR; +import io.mosip.kernel.biometrics.spi.CbeffUtil; import io.mosip.kernel.core.logger.spi.Logger; import io.mosip.mimoto.constant.LoggerFileConstant; -import io.mosip.mimoto.service.impl.CbeffImpl; -import io.mosip.mimoto.spi.CbeffUtil; import org.apache.commons.codec.binary.Base64; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; import java.util.List; /** * The Class CbeffToBiometricUtil. * - * @author M1048358 Alok - * @author M1030448 Jyoti + * @author Monobikash Das */ +@Component public class CbeffToBiometricUtil { Logger logger = LoggerUtil.getLogger(CbeffToBiometricUtil.class); /** The cbeffutil. */ - private CbeffUtil cbeffutil = new CbeffImpl(); + @Autowired + private CbeffUtil cbeffutil; /** the bioApi */ - /** - * Instantiates a new cbeff to biometric util. - * - * @param cbeffutil the cbeffutil - */ - public CbeffToBiometricUtil(CbeffUtil cbeffutil) { - this.cbeffutil = cbeffutil; - } - - /** - * Instantiates biometric util - * - */ - public CbeffToBiometricUtil() { - - } - - /** - * Gets the photo. - * - * @param cbeffFileString the cbeff file string - * @param type the type - * @param subType the sub type - * @return the photo - * @throws Exception the exception - */ - public byte[] getImageBytes(String cbeffFileString, String type, List subType) throws Exception { - logger.debug(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.USERID.toString(), "", - "CbeffToBiometricUtil::getImageBytes()::entry"); - - byte[] photoBytes = null; - if (cbeffFileString != null) { - List bIRTypeList = getBIRTypeList(cbeffFileString); - photoBytes = getPhotoByTypeAndSubType(bIRTypeList, type, subType); - } - logger.debug(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.USERID.toString(), "", - "CbeffToBiometricUtil::getImageBytes()::exit"); - - return photoBytes; - } - /** * Gets the photo by type and sub type. * @@ -113,30 +74,6 @@ private boolean isBiometricType(String type, List biometricTypeLi return isType; } - /** - * Checks if is same type. - * - * @param file1BirList the file 1 bir type list - * @param file2BirList the file 2 bir type list - * @return true, if is same type - */ - private boolean isBiometricTypeSame(List file1BirList, List file2BirList) { - boolean isTypeSame = false; - for (BIR bir1 : file1BirList) { - List biometricTypeList1 = bir1.getBdbInfo().getType(); - for (BIR bir2 : file2BirList) { - List biometricTypeList2 = bir2.getBdbInfo().getType(); - if (biometricTypeList1.equals(biometricTypeList2)) { - isTypeSame = true; - break; - } - } - if (isTypeSame) - break; - } - return isTypeSame; - } - /** * Gets the BIR type list. * diff --git a/src/test/java/io/mosip/mimoto/TestBootApplication.java b/src/test/java/io/mosip/mimoto/TestBootApplication.java new file mode 100644 index 000000000..1fb6fc606 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/TestBootApplication.java @@ -0,0 +1,14 @@ +package io.mosip.mimoto; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication(scanBasePackages = "io.mosip.mimoto.*") +//@Profile("test") +//@Import(TestSecurityConfig.class) +public class TestBootApplication { + + public static void main(String[] args) { + SpringApplication.run(TestBootApplication.class, args); + } +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/config/MimotoConfigTest.java b/src/test/java/io/mosip/mimoto/config/MimotoConfigTest.java new file mode 100644 index 000000000..095a84b75 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/config/MimotoConfigTest.java @@ -0,0 +1,88 @@ +package io.mosip.mimoto.config; + +import io.mosip.kernel.auth.defaultadapter.filter.AuthFilter; +import io.mosip.kernel.auth.defaultadapter.filter.CorsFilter; +import io.mosip.mimoto.config.Config; +import io.mosip.mimoto.config.OpenApiProperties; +import io.mosip.mimoto.config.SwaggerConfig; +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.ssl.TrustStrategy; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.FilterType; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.web.client.RestTemplate; + +import javax.net.ssl.SSLContext; +import java.security.KeyManagementException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.cert.X509Certificate; +import java.util.HashMap; +import java.util.Map; + +@Configuration +@ComponentScan(basePackages = { + "io.mosip.mimoto.*" }, excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = { + Config.class, OpenApiProperties.class, SwaggerConfig.class})) +public class MimotoConfigTest extends WebSecurityConfigurerAdapter { + + @Override + protected void configure(HttpSecurity http) throws Exception { + http = http.csrf().disable(); + http.authorizeRequests().antMatchers("*").authenticated().anyRequest().permitAll().and().exceptionHandling(); + http.headers().cacheControl(); + http.headers().frameOptions().sameOrigin(); + + } + + @Bean + public RestTemplate selfTokenRestTemplate() + throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException { + + TrustStrategy acceptingTrustStrategy = (X509Certificate[] chain, String authType) -> true; + + SSLContext sslContext = org.apache.http.ssl.SSLContexts.custom().loadTrustMaterial(null, acceptingTrustStrategy) + .build(); + + SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext); + + CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(csf).build(); + HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(); + + requestFactory.setHttpClient(httpClient); + return new RestTemplate(requestFactory); + + } + + @Bean + public RestTemplate plainRestTemplate() + throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException { + + TrustStrategy acceptingTrustStrategy = (X509Certificate[] chain, String authType) -> true; + + SSLContext sslContext = org.apache.http.ssl.SSLContexts.custom().loadTrustMaterial(null, acceptingTrustStrategy) + .build(); + + SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext); + + CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(csf).build(); + HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(); + + requestFactory.setHttpClient(httpClient); + return new RestTemplate(requestFactory); + + } + + + @Bean + public Map injiConfig() { + return new HashMap<>(); + } +} diff --git a/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java b/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java new file mode 100644 index 000000000..073fbeee5 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java @@ -0,0 +1,467 @@ +package io.mosip.mimoto.controller; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.JsonNodeFactory; +import com.google.common.collect.Lists; +import io.mosip.kernel.biometrics.spi.CbeffUtil; +import io.mosip.kernel.core.util.JsonUtils; +import io.mosip.kernel.websub.api.model.SubscriptionChangeResponse; +import io.mosip.mimoto.TestBootApplication; +import io.mosip.mimoto.core.http.ResponseWrapper; +import io.mosip.mimoto.dto.mimoto.*; +import io.mosip.mimoto.dto.resident.*; +import io.mosip.mimoto.exception.BaseUncheckedException; +import io.mosip.mimoto.model.Event; +import io.mosip.mimoto.model.EventModel; +import io.mosip.mimoto.service.RestClientService; +import io.mosip.mimoto.service.impl.CredentialShareServiceImpl; +import io.mosip.mimoto.util.*; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mockito; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.util.ReflectionTestUtils; +import org.springframework.test.web.servlet.MockMvc; + +import java.io.IOException; +import java.nio.file.Files; +import java.util.HashMap; +import java.util.Map; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = TestBootApplication.class) +@AutoConfigureMockMvc +@PrepareForTest({Files.class}) +public class InjiControllerTest { + + @InjectMocks + private CommonInjiController commonInjiController = new CommonInjiController(); + + @InjectMocks + private CredentialShareController credentialShareController = new CredentialShareController(); + + @MockBean + private Map injiConfig; + + @MockBean + private CbeffUtil cbeffUtil; + + @MockBean + private WebSubSubscriptionHelper webSubSubscriptionHelper; + + @MockBean + private CredentialShareServiceImpl credentialShareService; + + @Autowired + private MockMvc mockMvc; + + @MockBean + private AttestationOfflineVerify attestationOfflineVerify; + + @MockBean + private AttestationOnlineVerify attestationOnlineVerify; + + @MockBean + public RestClientService restClientService; + + @MockBean + public CryptoCoreUtil cryptoCoreUtil; + + @MockBean + private Utilities utilities; + + @Before + public void setup() throws IOException { + //PowerMockito.mockStatic(Files.class); + //PowerMockito.doNothing().when(Files.write(Mockito.any(Path.class), Mockito.any(byte[].class))); + + Map injiConfig = new HashMap<>(); + injiConfig.put("datashareUrl", "http://www.mosipdatashare.com"); + + ReflectionTestUtils.setField(commonInjiController, "injiConfig", injiConfig); + ReflectionTestUtils.setField(credentialShareController, "partnerEncryptionKey", "partnerkey"); + ReflectionTestUtils.setField(credentialShareController, "partnerId", "partnerId"); + ReflectionTestUtils.setField(credentialShareController, "topic", "topic"); + + + Mockito.when(utilities.getDataPath()).thenReturn("target"); + + Mockito.when(webSubSubscriptionHelper.subscribeEvent(Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(new SubscriptionChangeResponse()); + Mockito.doNothing().when(webSubSubscriptionHelper).initSubscriptions(); + Mockito.doNothing().when(webSubSubscriptionHelper).registerTopic(Mockito.any()); + Mockito.doNothing().when(webSubSubscriptionHelper).publish(Mockito.any(), Mockito.any()); + } + + @Test + public void getAllPropertiesTest() throws Exception { + this.mockMvc.perform(get("/allProperties").accept(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isOk()); + } + + @Test + public void processOfflineTest() throws Exception { + AttestationStatement attestationStatement = new AttestationStatement(); + Mockito.when(attestationOfflineVerify.parseAndVerify(Mockito.anyString())).thenReturn(attestationStatement); + this.mockMvc.perform(post("/safetynet/offline/verify").contentType(MediaType.APPLICATION_JSON_VALUE) + .content("offlineStr")) + .andExpect(status().isOk()); + } + + @Test + public void processOfflineFailureTest() throws Exception { + AttestationStatement attestationStatement = new AttestationStatement(); + Mockito.when(attestationOfflineVerify.parseAndVerify(Mockito.anyString())).thenThrow(new Exception("Exception")); + this.mockMvc.perform(post("/safetynet/offline/verify").contentType(MediaType.APPLICATION_JSON_VALUE) + .content("offlineStr")) + .andExpect(status().isOk()); + } + + @Test + public void processOnlineTest() throws Exception { + AttestationStatement attestationStatement = new AttestationStatement(); + Mockito.when(attestationOnlineVerify.parseAndVerify(Mockito.anyString())).thenReturn(attestationStatement); + this.mockMvc.perform(post("/safetynet/online/verify").contentType(MediaType.APPLICATION_JSON_VALUE) + .content("offlineStr")) + .andExpect(status().isOk()); + } + + @Test + public void processOnlineFailureTest() throws Exception { + AttestationStatement attestationStatement = new AttestationStatement(); + Mockito.when(attestationOnlineVerify.parseAndVerify(Mockito.anyString())).thenThrow(new Exception("Exception")); + this.mockMvc.perform(post("/safetynet/online/verify").contentType(MediaType.APPLICATION_JSON_VALUE) + .content("offlineStr")) + .andExpect(status().isOk()); + } + + /** CREDENTIAL SHARE CONTROLLER TEST CASES */ + + @Test + @Ignore + public void handleSubscribeEventTest() throws Exception { + Event event = new Event(); + event.setId("id"); + event.setTransactionId("transId"); + EventModel eventModel = new EventModel(); + eventModel.setEvent(event); + + Mockito.when(credentialShareService.generateDocuments(Mockito.any())).thenReturn(true); + + this.mockMvc.perform(post("/v1/mimoto/credentialshare/callback/notify").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(eventModel))) + .andExpect(status().isOk()); + } + + @Test + public void requestTest() throws Exception { + AppCredentialRequestDTO requestDTO = new AppCredentialRequestDTO(); + requestDTO.setUser("mono"); + requestDTO.setTransactionID("transactionId"); + requestDTO.setOtp("123456"); + requestDTO.setIndividualId("123456"); + requestDTO.setCredentialType("VERCRED"); + + CredentialRequestResponseInnerResponseDTO dto = new CredentialRequestResponseInnerResponseDTO(); + dto.setRequestId("requestId"); + CredentialRequestResponseDTO response = new CredentialRequestResponseDTO(); + response.setResponse(dto); + + Mockito.when(restClientService.postApi(Mockito.any(), Mockito.anyString(), Mockito.anyString(), + Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(response); + + Mockito.when(credentialShareService.generateDocuments(Mockito.any())).thenReturn(true); + + this.mockMvc.perform(post("/credentialshare/request").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .andExpect(status().isOk()); + } + + @Test + public void requestStatusTest() throws Exception { + + ResponseWrapper responseWrapper = new ResponseWrapper<>(); + + Mockito.when(restClientService.postApi(Mockito.any(), Mockito.anyString(), Mockito.anyString(), + Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(responseWrapper); + + this.mockMvc.perform(get("/credentialshare/request/status/1234567890").accept(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isOk()); + } + + @Test + public void downloadTest() throws Exception { + + CredentialDownloadRequestDTO requestDTO = new CredentialDownloadRequestDTO(); + requestDTO.setRequestId("requestId"); + + JsonNode credentialJSON = JsonNodeFactory.instance.objectNode(); + Mockito.when(utilities.getVC(Mockito.anyString())).thenReturn(credentialJSON); + + JsonNode decryptedCredentialJSON = JsonNodeFactory.instance.objectNode(); + Mockito.when(utilities.getDecryptedVC(Mockito.anyString())).thenReturn(decryptedCredentialJSON); + + this.mockMvc.perform(post("/credentialshare/download").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .andExpect(status().isOk()); + + Mockito.when(utilities.getDecryptedVC(Mockito.anyString())).thenReturn(null); + + this.mockMvc.perform(post("/credentialshare/download").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .andExpect(status().isNotFound()); + + Mockito.when(utilities.getDecryptedVC(Mockito.anyString())).thenThrow(new IOException("Exception")); + + this.mockMvc.perform(post("/credentialshare/download").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .andExpect(status().isNotFound()); + } + + /** IDP CONTROLLER TEST CASES */ + + @Test + public void otpRequestTest() throws Exception { + BindingOtpInnerReqDto innerReqDto = new BindingOtpInnerReqDto(); + innerReqDto.setIndividualId("individualId"); + innerReqDto.setOtpChannels(Lists.newArrayList("EMAIL")); + BindingOtpRequestDto requestDTO = new BindingOtpRequestDto(DateUtils.getUTCCurrentDateTimeString(), innerReqDto); + + + ResponseWrapper response = new ResponseWrapper<>(); + + Mockito.when(restClientService.postApi(Mockito.any(), + Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(response).thenThrow(new BaseUncheckedException("Exception")); + + this.mockMvc.perform(post("/binding-otp").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .andExpect(status().isOk()); + + this.mockMvc.perform(post("/binding-otp").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .andExpect(status().isOk()); + } + + @Test + public void walletBindingTest() throws Exception { + WalletBindingInnerReq innerReqDto = new WalletBindingInnerReq(); + innerReqDto.setPublicKey("-----BEGIN RSA PUBLIC KEY-----\nMIICCgKCAgEAn6+frMlD7DQqbxZW943hRLBApDj1/lHIJdLYSKEGIfwhd58gc0Y4\n1q11mPnpv7gAZ/Wm0iOAkWSzcIWljXFmGnLrUrBsp4WYKdPjqn4tkrCOjiZa5RPk\nY03a40Kz1lx0W9f94Naozglf6KFUSq+qAwuC5kiPxaxsjFA/LWIP+zT2QX/MnrX9\nv7gt2g0BC4pQ01eTTzhhwO2A7k5z3ucsb56ohND4xdIsdCMm1IczBjW0URSO60Bb\n7m5dlO8BFHJ6inV8awO2KHoADbp3wZgid4KqLJ0eVGyNViVFzj4rxSxL3vcYbyKS\nORWSlPZIZL9ZWO1cyPO9+Wxu29IKj4DQEt8glgITlBZ4L29uT7gFPAbypSn/8SvU\nBrNno8+GIe9XWsrDTMT9dfLGzLUitF3A+wwVZuRVhCqYIisOOGuGE18YK0jmdk9l\n89OpK4PduGiUh66zZTcH3thdtaOz6jj+FLKMg2Q3gNqQ1Y0cezO175RNVVX1ffOu\n5qss1RWams5RAXDqqt/MhiopG3DhlyaSC4xdqei7SI8d+S4Bvflub9rypPnhW67g\nNhZvQDJ7Tb1AWHxKmU0wQvEMtwSm9xtsMs4bqotn2M/09BuRqbrhpvAfrfZArkVO\nv8eLXhtDvo2J9gRwHZIS/JZ1Fo+tep1QFHz1Lr5iGRqwLWQlGbKFuL0CAwEAAQ==\n-----END RSA PUBLIC KEY-----\n"); + innerReqDto.setIndividualId("individualId"); + WalletBindingRequestDTO requestDTO = new WalletBindingRequestDTO(); + requestDTO.setRequestTime(DateUtils.getUTCCurrentDateTimeString()); + requestDTO.setRequest(innerReqDto); + + ResponseWrapper response = new ResponseWrapper<>(); + + Mockito.when(restClientService.postApi(Mockito.any(), + Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(response).thenThrow(new BaseUncheckedException("Exception")); + + this.mockMvc.perform(post("/wallet-binding").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .andExpect(status().isOk()); + + this.mockMvc.perform(post("/wallet-binding").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .andExpect(status().isOk()); + } + + @Test + public void linkTransactionTest() throws Exception { + LinkTransactionRequestDto requestDTO = new LinkTransactionRequestDto(); + requestDTO.setRequestTime(DateUtils.getUTCCurrentDateTimeString()); + requestDTO.setLinkCode("linkcode"); + + LinkTransactionResponseDto response = new LinkTransactionResponseDto(); + + Mockito.when(restClientService.postApi(Mockito.any(), + Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(response).thenThrow(new BaseUncheckedException("Exception")); + + this.mockMvc.perform(post("/link-transaction").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .andExpect(status().isOk()); + + this.mockMvc.perform(post("/link-transaction").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .andExpect(status().isOk()); + } + + @Test + public void idpAuthenticateTest() throws Exception { + IdpAuthInternalRequestDto innerDto = new IdpAuthInternalRequestDto(); + innerDto.setLinkedTransactionId("LinkedTransactionId"); + innerDto.setIndividualId("individualId"); + IdpChallangeDto challangeDto = new IdpChallangeDto(); + challangeDto.setAuthFactorType("OTP"); + challangeDto.setChallenge("1234"); + innerDto.setChallengeList(Lists.newArrayList(challangeDto)); + IdpAuthRequestDto requestDto = new IdpAuthRequestDto(); + requestDto.setRequestTime(DateUtils.getUTCCurrentDateTimeString()); + requestDto.setRequest(innerDto); + + + BindingOtpResponseDto responseDto = new BindingOtpResponseDto(); + responseDto.setTransactionId("1111111"); + ResponseWrapper otpResponse = new ResponseWrapper<>(); + otpResponse.setResponse(responseDto); + ResponseWrapper otpResponse2 = new ResponseWrapper<>(); + ResponseWrapper response = new ResponseWrapper<>(); + + Mockito.when(restClientService.postApi(Mockito.any(), + Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(otpResponse).thenReturn(response).thenReturn(otpResponse2); + + this.mockMvc.perform(post("/idp-authenticate").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(requestDto))) + .andExpect(status().isOk()); + + this.mockMvc.perform(post("/idp-authenticate").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(requestDto))) + .andExpect(status().isOk()); + } + + @Test + public void idpConsentTest() throws Exception { + IdpConsentRequestDto innerDto = new IdpConsentRequestDto(); + innerDto.setLinkedTransactionId("LinkedTransactionId"); + innerDto.setAcceptedClaims(Lists.newArrayList("OTP")); + IdpConsentDto requestDto = new IdpConsentDto(); + requestDto.setRequestTime(DateUtils.getUTCCurrentDateTimeString()); + requestDto.setRequest(innerDto); + + + ResponseWrapper response = new ResponseWrapper<>(); + + Mockito.when(restClientService.postApi(Mockito.any(), + Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(response).thenThrow(new BaseUncheckedException("Exception")); + + this.mockMvc.perform(post("/idp-consent").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(requestDto))) + .andExpect(status().isOk()); + + this.mockMvc.perform(post("/idp-consent").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(requestDto))) + .andExpect(status().isOk()); + } + + /** RESIDENT CONTROLLER TEST CASES */ + @Test + public void residentOtpRequestTest() throws Exception { + AppOTPRequestDTO requestDTO = new AppOTPRequestDTO(); + requestDTO.setIndividualId("IndividualId"); + requestDTO.setIndividualIdType("UIN"); + requestDTO.setTransactionID("1234567890"); + requestDTO.setOtpChannel(Lists.newArrayList("EMAIL")); + + + ResponseWrapper response = new ResponseWrapper<>(); + + Mockito.when(restClientService.postApi(Mockito.any(), + Mockito.anyString(), Mockito.anyString(), Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(response); + + this.mockMvc.perform(post("/req/otp").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .andExpect(status().isOk()); + } + + @Test + public void vidGenerateTest() throws Exception { + AppVIDGenerateRequestDTO requestDTO = new AppVIDGenerateRequestDTO(); + requestDTO.setIndividualId("IndividualId"); + requestDTO.setIndividualIdType("UIN"); + requestDTO.setTransactionID("1234567890"); + requestDTO.setOtp("111111"); + + + ResponseWrapper response = new ResponseWrapper<>(); + + Mockito.when(restClientService.postApi(Mockito.any(), + Mockito.anyString(), Mockito.anyString(), Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(response); + + this.mockMvc.perform(post("/vid").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .andExpect(status().isOk()); + } + + @Test + public void authLockTest() throws Exception { + AuthLockRequestDTO requestDTO = new AuthLockRequestDTO(); + requestDTO.setIndividualId("IndividualId"); + requestDTO.setIndividualIdType("UIN"); + requestDTO.setTransactionID("1234567890"); + requestDTO.setOtp("111111"); + + + ResponseWrapper response = new ResponseWrapper<>(); + + Mockito.when(restClientService.postApi(Mockito.any(), + Mockito.anyString(), Mockito.anyString(), Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(response); + + this.mockMvc.perform(post("/req/auth/lock").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .andExpect(status().isOk()); + } + + @Test + public void authUnLockTest() throws Exception { + AuthUnlockRequestDTO requestDTO = new AuthUnlockRequestDTO(); + requestDTO.setIndividualId("IndividualId"); + requestDTO.setIndividualIdType("UIN"); + requestDTO.setTransactionID("1234567890"); + requestDTO.setOtp("111111"); + + + ResponseWrapper response = new ResponseWrapper<>(); + + Mockito.when(restClientService.postApi(Mockito.any(), + Mockito.anyString(), Mockito.anyString(), Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(response); + + this.mockMvc.perform(post("/req/auth/unlock").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .andExpect(status().isOk()); + } + + @Test + public void individualIdOtpRequestTest() throws Exception { + IndividualIdOtpRequestDTO requestDTO = new IndividualIdOtpRequestDTO(); + requestDTO.setAid("IndividualId"); + requestDTO.setOtpChannel(Lists.newArrayList("EMAIL")); + requestDTO.setTransactionID("1234567890"); + + OTPResponseDTO response = new OTPResponseDTO(); + + Mockito.when(restClientService.postApi(Mockito.any(), + Mockito.anyString(), Mockito.anyString(), Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(response); + + this.mockMvc.perform(post("/req/individualId/otp").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .andExpect(status().isOk()); + } + + @Test + public void aidGetIndividualIdTest() throws Exception { + AidStatusRequestDTO requestDTO = new AidStatusRequestDTO(); + requestDTO.setAid("IndividualId"); + requestDTO.setTransactionID("1234567890"); + requestDTO.setOtp("111111"); + + ResponseWrapper response = new ResponseWrapper<>(); + + Mockito.when(restClientService.postApi(Mockito.any(), + Mockito.anyString(), Mockito.anyString(), Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(response); + + this.mockMvc.perform(post("/aid/get-individual-id").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .andExpect(status().isOk()); + } +} diff --git a/src/test/java/io/mosip/mimoto/service/CredentialShareServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialShareServiceTest.java new file mode 100644 index 000000000..1de866d3d --- /dev/null +++ b/src/test/java/io/mosip/mimoto/service/CredentialShareServiceTest.java @@ -0,0 +1,149 @@ +package io.mosip.mimoto.service; + +import com.google.common.collect.Lists; +import io.mosip.biometrics.util.CommonUtil; +import io.mosip.kernel.biometrics.constant.BiometricType; +import io.mosip.kernel.biometrics.entities.BDBInfo; +import io.mosip.kernel.biometrics.entities.BIR; +import io.mosip.mimoto.core.http.ResponseWrapper; +import io.mosip.mimoto.dto.AuditResponseDto; +import io.mosip.mimoto.dto.CryptoWithPinResponseDto; +import io.mosip.mimoto.exception.DocumentGeneratorException; +import io.mosip.mimoto.model.Event; +import io.mosip.mimoto.model.EventModel; +import io.mosip.mimoto.service.impl.CredentialShareServiceImpl; +import io.mosip.mimoto.util.*; +import org.json.simple.JSONObject; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentMatchers; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +import java.net.URI; +import java.security.InvalidKeyException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +@RunWith(PowerMockRunner.class) +@PrepareForTest({ URI.class, org.json.JSONObject.class, CommonUtil.class}) +@PowerMockIgnore({ "javax.management.*", "javax.net.ssl.*","com.sun.org.apache.xerces.*", "javax.xml.*", "org.xml.*", "javax.management.*" }) +public class CredentialShareServiceTest { + + @InjectMocks + private CredentialShareService service = new CredentialShareServiceImpl(); + + @Mock + public RestApiClient restApiClient; + + @Mock + public AuditLogRequestBuilder auditLogRequestBuilder; + + @Mock + private CryptoCoreUtil cryptoCoreUtil; + + @Mock + CryptoUtil cryptoUtil; + + @Mock + private Utilities utilities; + + private EventModel eventModel = null; + + @Mock + private CbeffToBiometricUtil util; + + @Before + public void setup() throws Exception { + Map proofMap = new HashMap<>(); + proofMap.put("signature", "eyJiNjQiOmZhbHNlLCJjcml0IjpbImI2NCJdLCJhbGciOiJQUzI1NiJ9..XSGdtAvEdcSrdHiyC8pP8orML1v3akfHru821aMVNKSa9ftx3DIS1ZbqNL-DNxWmdLjcINpsWIbwyD7Lbn0MZNIsmR5SjJJa31cB710aFpMfQgHY0R2cgh8XJWIU4Whs8Tvt9RWJ2la0CkIdeukEjxKQs2Ier1x3wzbVSK6OeoYO6tM77saDsDciu88JGRLt5zdkNyc9hN0XNwH3SPG1hJOKV4QUHW3CzIFGKvcR-VZHD7iAyqrgVNjEt1IU7ghdqH38xiTZ-2QfJDkH90yUmUEkHJ-AcXlFZATIi3YYPY9UNSBEZeHaN-fOwrPETftTo6a_DZiYIYeW1eYVs_hvnA\",\n" + + " \"proofPurpose\": \"assertionMethod"); + Map data = new HashMap<>(); + data.put("credential", "credential"); + data.put("protectionKey", "12345"); + data.put("credentialType", "VERCRED"); + data.put("proof", proofMap); + Event event = new Event(); + event.setDataShareUri("https://www.datashare.com"); + event.setData(data); + event.setTransactionId("transactionid"); + eventModel = new EventModel(); + eventModel.setEvent(event); + + CryptoWithPinResponseDto cryptoWithPinResponseDto = new CryptoWithPinResponseDto(); + cryptoWithPinResponseDto.setData("biometrics"); + + Mockito.when(cryptoUtil.decryptWithPin(ArgumentMatchers.any())).thenReturn(cryptoWithPinResponseDto); + Mockito.when(utilities.getDataPath()).thenReturn("target"); + Mockito.when(restApiClient.getApi(Mockito.any(URI.class), Mockito.any(Class.class))).thenReturn("credential"); + Mockito.when(cryptoCoreUtil.decrypt(Mockito.anyString())).thenReturn("{\"credentialSubject\":{\"biometrics\":\"biometrics\"},\"protectedAttributes\":[\"biometrics\"]}"); + Map templateMap = new HashMap<>(); + templateMap.put("biometrics", "biometrics"); + JSONObject templateJSON = new JSONObject(templateMap); + + Mockito.when(utilities.getTemplate()).thenReturn(templateJSON); + + Mockito.when(auditLogRequestBuilder.createAuditRequestBuilder( + Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), + Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.any())).thenReturn(new ResponseWrapper()); + + + BIR bir = new BIR(); + BDBInfo bdbInfo = new BDBInfo(); + bdbInfo.setType(Lists.newArrayList(BiometricType.FACE)); + bir.setBdbInfo(bdbInfo); + List birs = Lists.newArrayList(bir); + Mockito.when(util.getBIRTypeList(Mockito.anyString())).thenReturn(birs); + Mockito.when(util.getPhotoByTypeAndSubType(Mockito.any(), Mockito.any(), Mockito.any())).thenReturn("face image strring".getBytes()); + + PowerMockito.mockStatic(CommonUtil.class); + Mockito.when(CommonUtil.convertJP2ToJPEGBytes(Mockito.any(byte[].class))).thenReturn(("VkVSX1IyUePARBpE1-kwFG3i9AXxWsH67-sAbyvWC1joGfw-QgFjLTgLRCwUrzaPC0_K1NuXl" + + "t_TNHNyGu0aAcyqMe3zbBBgZXiP0sImJ0OjjkdbpjBdO_BGyWpLsz-T5eW3luz2RILFSKpDtTwDAVJ8y2jsSONgWDUza14cglCHvt9MT6UWv18oYJ8uCw2Aqx3Pf3Op" + + "9P3HJd_32G03U6HhrHD9AVRCon9R2Uh2IYgUmn8zwKozC7bWoGqO74LCYt15zsmYTvJg9v9zqVUAPxrPvo5VVJmbKm_kP8ZPtkslnPte_EML4wkVvZDPpa7D6H3aIn-t" + + "2l8G7w8zWRwnTjrQqBn_fmTS43cabLyr3Vc2RmVd0LOX_LXuikS-n5gEjy-Xw6Yc-xAZb0F_spB2Q_ihAi9Ej2FMAXa1Why1MYp0jNCK1FIyTns5S9oc7bonaaK5Zo1aqkut" + + "v_I2wWvYKOR2UxXLmfPzgcjFDVpnIG3hDSGn-1Oat2liFgKBM_cBQvapPyMgqE3CokFI6DAvBeHJrOgtR1k5m4JuRsqwtrzf3_PCBFHW6jkEjYm9VJc5zBgAFi-0KiZoRF" + + "a-XG4L3ZCA42gOfTAlQ6iVq0_3M5uxi4BdSkr1Cyr0CBHZgAivU5vyajLbnvvJVlbDpGb_T3LqG7l7oBVvo9zq74QbQFKOaKwzJn9432_yD4DG2qOHBPnOmyopfxaSSoosM" + + "1qmDxC9CaE2zVWDjmJdPk630AkKJhvNmMJJXxkeZnvsGg5QsjP4_i2isLg63kjhb2MtNtgN0uCUsXNbqEyb3kJAVvM34KGR1bsmO5Zowq_yKenNCFm68zNWm05pFMW0_4").getBytes()); + } + + @Test + public void generateDocumentsTest() throws Exception { + + boolean result = service.generateDocuments(eventModel); + + assertTrue(result); + } + + @Test + public void documentExceptionTest() throws Exception { + + Mockito.when(cryptoUtil.decryptWithPin(ArgumentMatchers.any())).thenThrow(new InvalidKeyException("exception")); + + boolean result = service.generateDocuments(eventModel); + + assertFalse(result); + + } + + /*@Test(expected = DocumentGeneratorException.class) + public void documentFailedExceptionTest() throws Exception { + + Mockito.when(cryptoUtil.decryptWithPin(ArgumentMatchers.any())).thenThrow(new Exception("exception")); + + boolean result = service.generateDocuments(eventModel); + + // assertFalse(result); + + }*/ + +} diff --git a/src/test/java/io/mosip/mimoto/service/RestClientServiceTest.java b/src/test/java/io/mosip/mimoto/service/RestClientServiceTest.java new file mode 100644 index 000000000..27f208f73 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/service/RestClientServiceTest.java @@ -0,0 +1,206 @@ +package io.mosip.mimoto.service; + +import static org.junit.Assert.assertEquals; + +import java.net.URI; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import com.google.common.collect.Lists; +import io.mosip.mimoto.constant.ApiName; +import io.mosip.mimoto.dto.AuditRequestDto; +import io.mosip.mimoto.dto.AuditResponseDto; +import io.mosip.mimoto.exception.ApisResourceAccessException; +import io.mosip.mimoto.service.impl.RestClientServiceImpl; +import io.mosip.mimoto.util.RestApiClient; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentMatchers; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.core.env.Environment; +import org.springframework.web.client.ResourceAccessException; + +@RunWith(MockitoJUnitRunner.class) +@SpringBootTest +public class RestClientServiceTest { + + private static final String API_NAME = "AUDIT"; + + @InjectMocks + RestClientService registrationProcessorRestClientService = new RestClientServiceImpl(); + /** The rest api client. */ + @Mock + private RestApiClient restApiClient; + + /** The env. */ + @Mock + private Environment env; + private AuditResponseDto auditResponseDto; + + @Before + public void setUp() { + auditResponseDto = new AuditResponseDto(); + auditResponseDto.setStatus(true); + + } + + @Test + public void getObjectSuccessTest() throws Exception { + + Mockito.when(env.getProperty(ArgumentMatchers.any())).thenReturn(API_NAME); + Mockito.when(restApiClient.getApi(ArgumentMatchers.any(URI.class), ArgumentMatchers.any())).thenReturn(auditResponseDto); + AuditResponseDto resultDto = (AuditResponseDto) registrationProcessorRestClientService.getApi(ApiName.AUDIT, + null, "query1", "12345", AuditResponseDto.class); + assertEquals(true, resultDto.isStatus()); + } + + @Test + public void getSuccessTest() throws Exception { + + Mockito.when(env.getProperty(ArgumentMatchers.any())).thenReturn(API_NAME); + Mockito.when(restApiClient.getApi(ArgumentMatchers.any(URI.class), ArgumentMatchers.any())).thenReturn(auditResponseDto); + AuditResponseDto resultDto = (AuditResponseDto) registrationProcessorRestClientService.getApi(ApiName.AUDIT, + Lists.newArrayList("pathsegnemts"), Lists.newArrayList("query1"), Lists.newArrayList("12345"), AuditResponseDto.class); + assertEquals(true, resultDto.isStatus()); + } + + @Test + public void postObjecSuccessTest() throws Exception { + AuditRequestDto auditRequestDto = new AuditRequestDto(); + Mockito.when(env.getProperty(ArgumentMatchers.any())).thenReturn(API_NAME); + Mockito.when(restApiClient.postApi(ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.any())) + .thenReturn(auditResponseDto); + AuditResponseDto resultDto = (AuditResponseDto) registrationProcessorRestClientService.postApi(ApiName.AUDIT, + "query1", "12345", auditRequestDto, AuditResponseDto.class); + assertEquals(true, resultDto.isStatus()); + } + + @Test(expected = ApisResourceAccessException.class) + public void getObjecTestFailureTest() throws Exception { + Mockito.when(env.getProperty(ArgumentMatchers.any())).thenReturn(API_NAME); + ResourceAccessException exp = new ResourceAccessException("errorMessage"); + Mockito.when(restApiClient.getApi(ArgumentMatchers.any(URI.class), ArgumentMatchers.any())).thenThrow(exp); + + registrationProcessorRestClientService.getApi(ApiName.AUDIT, Arrays.asList("abc", "def"), "query1", "12345", + AuditResponseDto.class); + } + + @Test(expected = ApisResourceAccessException.class) + public void getFailureTest() throws Exception { + Mockito.when(env.getProperty(ArgumentMatchers.any())).thenReturn(API_NAME); + ResourceAccessException exp = new ResourceAccessException("errorMessage"); + Mockito.when(restApiClient.getApi(ArgumentMatchers.any(URI.class), ArgumentMatchers.any())).thenThrow(exp); + + registrationProcessorRestClientService.getApi(ApiName.AUDIT, Arrays.asList("abc", "def"), + Lists.newArrayList("query1"), Lists.newArrayList("12345"), + AuditResponseDto.class); + } + + @Test(expected = ApisResourceAccessException.class) + public void postObjecTestFailureTest() throws Exception { + AuditRequestDto auditRequestDto = new AuditRequestDto(); + Mockito.when(env.getProperty(ArgumentMatchers.any())).thenReturn(API_NAME); + ResourceAccessException exp = new ResourceAccessException("errorMessage"); + Mockito.when(restApiClient.postApi(ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.any())) + .thenThrow(exp); + registrationProcessorRestClientService.postApi(ApiName.AUDIT, "query1", "12345", auditRequestDto, + AuditResponseDto.class); + } + + @Test + public void getObjectForArgListSuccessTest() throws Exception { + + Mockito.when(env.getProperty(ArgumentMatchers.any())).thenReturn(API_NAME); + Mockito.when(restApiClient.getApi(ArgumentMatchers.any(URI.class), ArgumentMatchers.any())).thenReturn(auditResponseDto); + AuditResponseDto resultDto = (AuditResponseDto) registrationProcessorRestClientService.getApi(ApiName.AUDIT, + null, Arrays.asList("query1"), Arrays.asList("12345"), AuditResponseDto.class); + assertEquals(true, resultDto.isStatus()); + } + + @Test + public void postObjectSuccessTest() throws Exception { + AuditRequestDto auditRequestDto = new AuditRequestDto(); + Mockito.when(env.getProperty(ArgumentMatchers.any())).thenReturn(API_NAME); + Mockito.when(restApiClient.postApi(ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.any())) + .thenReturn(auditResponseDto); + List pathSegments = new ArrayList<>(); + pathSegments.add("test"); + AuditResponseDto resultDto = (AuditResponseDto) registrationProcessorRestClientService.postApi(ApiName.AUDIT, + pathSegments, "query1", "12345", auditRequestDto, AuditResponseDto.class); + assertEquals(true, resultDto.isStatus()); + } + + @Test + public void postSuccessTest() throws Exception { + AuditRequestDto auditRequestDto = new AuditRequestDto(); + Mockito.when(env.getProperty(ArgumentMatchers.any())).thenReturn(API_NAME); + Mockito.when(restApiClient.postApi(ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyBoolean())) + .thenReturn(auditResponseDto); + List pathSegments = new ArrayList<>(); + pathSegments.add("test"); + AuditResponseDto resultDto = (AuditResponseDto) registrationProcessorRestClientService.postApi(ApiName.AUDIT, + auditRequestDto, AuditResponseDto.class, true); + assertEquals(true, resultDto.isStatus()); + } + + @Test(expected = ApisResourceAccessException.class) + public void postFailedTest() throws Exception { + AuditRequestDto auditRequestDto = new AuditRequestDto(); + Mockito.when(env.getProperty(ArgumentMatchers.any())).thenReturn(API_NAME); + Mockito.when(restApiClient.postApi(ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.anyBoolean())) + .thenThrow(new ApisResourceAccessException("Exception")); + List pathSegments = new ArrayList<>(); + pathSegments.add("test"); + AuditResponseDto resultDto = (AuditResponseDto) registrationProcessorRestClientService.postApi(ApiName.AUDIT, + auditRequestDto, AuditResponseDto.class, true); + } + + @Test(expected = ApisResourceAccessException.class) + public void postObjectTestFailureTest() throws Exception { + AuditRequestDto auditRequestDto = new AuditRequestDto(); + Mockito.when(env.getProperty(ArgumentMatchers.any())).thenReturn(API_NAME); + ResourceAccessException exp = new ResourceAccessException("errorMessage"); + List pathSegments = new ArrayList<>(); + pathSegments.add("test"); + Mockito.when(restApiClient.postApi(ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.any())) + .thenThrow(exp); + registrationProcessorRestClientService.postApi(ApiName.AUDIT, pathSegments, "query1", "12345", auditRequestDto, + AuditResponseDto.class); + } + + @Test + public void postObjectForArgListSuccessTest() throws Exception { + AuditRequestDto auditRequestDto = new AuditRequestDto(); + Mockito.when(env.getProperty(ArgumentMatchers.any())).thenReturn(API_NAME); + Mockito.when(restApiClient.postApi(ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.any())) + .thenReturn(auditResponseDto); + List pathSegments = new ArrayList<>(); + pathSegments.add("test"); + AuditResponseDto resultDto = (AuditResponseDto) registrationProcessorRestClientService.postApi(ApiName.AUDIT, + null, pathSegments, Arrays.asList("query1"), Arrays.asList("12345"), auditRequestDto, + AuditResponseDto.class); + assertEquals(true, resultDto.isStatus()); + } + + @Test(expected = ApisResourceAccessException.class) + public void postObjectForArgListTestFailureTest() throws Exception { + AuditRequestDto auditRequestDto = new AuditRequestDto(); + Mockito.when(env.getProperty(ArgumentMatchers.any())).thenReturn(API_NAME); + ResourceAccessException exp = new ResourceAccessException("errorMessage"); + List pathSegments = new ArrayList<>(); + pathSegments.add("test"); + Mockito.when(restApiClient.postApi(ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.any())) + .thenThrow(exp); + registrationProcessorRestClientService.postApi(ApiName.AUDIT, null, pathSegments, Arrays.asList("query1"), + Arrays.asList("12345"), auditRequestDto, AuditResponseDto.class); + } + +} From d64abce2f53746268ae3399f0d885ae6bb76184c Mon Sep 17 00:00:00 2001 From: Monobikash Das Date: Thu, 5 Jan 2023 18:00:43 +0530 Subject: [PATCH 027/860] Test case coverage for mimoto --- pom.xml | 7 +++++++ .../java/io/mosip/mimoto/MimotoServiceApplication.java | 7 +++++++ .../java/io/mosip/mimoto/util/CbeffToBiometricUtil.java | 1 - 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7815657e7..f506111a9 100644 --- a/pom.xml +++ b/pom.xml @@ -23,6 +23,7 @@ 1.2.1-SNAPSHOT 1.2.0.1-B1 1.2.1-SNAPSHOT + 1.2.1-SNAPSHOT 3.9.1 @@ -342,6 +343,12 @@ ${kernel.biometrics.api.version} + + io.mosip.kernel + kernel-cbeffutil-api + ${kernel.cbeffutil.version} + + org.powermock powermock-module-junit4 diff --git a/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java b/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java index 7da4ddc97..3a2f0f4d3 100644 --- a/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java +++ b/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java @@ -2,6 +2,8 @@ import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.kernel.biometrics.spi.CbeffUtil; +import io.mosip.kernel.cbeffutil.impl.CbeffImpl; import org.json.simple.JSONObject; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -28,6 +30,11 @@ @EnableScheduling @EnableAsync public class MimotoServiceApplication { + @Bean + @Primary + public CbeffUtil getCbeffUtil() { + return new CbeffImpl(); + } @Bean public ThreadPoolTaskScheduler taskScheduler() { diff --git a/src/main/java/io/mosip/mimoto/util/CbeffToBiometricUtil.java b/src/main/java/io/mosip/mimoto/util/CbeffToBiometricUtil.java index 9feba98fd..c2372f069 100644 --- a/src/main/java/io/mosip/mimoto/util/CbeffToBiometricUtil.java +++ b/src/main/java/io/mosip/mimoto/util/CbeffToBiometricUtil.java @@ -4,7 +4,6 @@ import io.mosip.kernel.biometrics.entities.BIR; import io.mosip.kernel.biometrics.spi.CbeffUtil; import io.mosip.kernel.core.logger.spi.Logger; -import io.mosip.mimoto.constant.LoggerFileConstant; import org.apache.commons.codec.binary.Base64; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; From 9c8aade601bf957fbeb259f7a251bfc98b5bae8c Mon Sep 17 00:00:00 2001 From: Monobikash Das Date: Mon, 9 Jan 2023 19:18:36 +0530 Subject: [PATCH 028/860] Integrated with latest idp changes --- src/main/java/io/mosip/mimoto/controller/IdpController.java | 5 +++-- .../java/io/mosip/mimoto/dto/mimoto/IdpChallangeDto.java | 1 + .../io/mosip/mimoto/dto/mimoto/WalletBindingInnerReq.java | 3 ++- .../mimoto/dto/mimoto/WalletBindingInnerRequestDto.java | 3 ++- .../io/mosip/mimoto/dto/mimoto/WalletBindingResponseDto.java | 2 +- src/main/resources/application-local.properties | 2 +- 6 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/IdpController.java b/src/main/java/io/mosip/mimoto/controller/IdpController.java index 23f7cafe3..1fdddfe35 100644 --- a/src/main/java/io/mosip/mimoto/controller/IdpController.java +++ b/src/main/java/io/mosip/mimoto/controller/IdpController.java @@ -64,8 +64,9 @@ public ResponseEntity request(@RequestBody WalletBindingRequestDTO reque WalletBindingInnerRequestDto innerRequestDto = new WalletBindingInnerRequestDto(); innerRequestDto.setChallengeList(requestDTO.getRequest().getChallengeList()); innerRequestDto.setIndividualId(requestDTO.getRequest().getIndividualId()); - innerRequestDto.setTransactionId(requestDTO.getRequest().getTransactionId()); innerRequestDto.setPublicKey(JoseUtil.getJwkFromPublicKey(requestDTO.getRequest().getPublicKey())); + innerRequestDto.setAuthFactorType(requestDTO.getRequest().getAuthFactorType()); + innerRequestDto.setFormat(requestDTO.getRequest().getFormat()); WalletBindingInternalRequestDTO req = new WalletBindingInternalRequestDTO(requestDTO.getRequestTime(), innerRequestDto); @@ -73,7 +74,7 @@ public ResponseEntity request(@RequestBody WalletBindingRequestDTO reque .postApi(ApiName.WALLET_BINDING, req, ResponseWrapper.class, useBearerToken); } catch (Exception e) { - logger.error("Wallet binding error occured for tranaction id " + requestDTO.getRequest().getTransactionId(), e); + logger.error("Wallet binding error occured for tranaction id " + requestDTO.getRequest().getIndividualId(), e); response = getErrorResponse(PlatformErrorMessages.MIMOTO_WALLET_BINDING_EXCEPTION.getCode(), e.getMessage()); } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/IdpChallangeDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpChallangeDto.java index c005e3f7e..a1737c641 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/IdpChallangeDto.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpChallangeDto.java @@ -6,4 +6,5 @@ public class IdpChallangeDto { private String authFactorType; private String challenge; + private String format; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInnerReq.java b/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInnerReq.java index a84538636..940b8ffb6 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInnerReq.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInnerReq.java @@ -6,8 +6,9 @@ @Data public class WalletBindingInnerReq { - private String transactionId; private String individualId; private List challengeList; private String publicKey; + private String authFactorType; + private String format; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInnerRequestDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInnerRequestDto.java index 8952ada50..690447f78 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInnerRequestDto.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInnerRequestDto.java @@ -7,8 +7,9 @@ @Data public class WalletBindingInnerRequestDto { - private String transactionId; private String individualId; private List challengeList; private JwkDto publicKey; + private String authFactorType; + private String format; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingResponseDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingResponseDto.java index 9b410b9b1..3c7b41b94 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingResponseDto.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingResponseDto.java @@ -4,7 +4,7 @@ @Data public class WalletBindingResponseDto { - private String transactionId; + private String certificate; private String encryptedWalletBindingId; private String expireDateTime; } diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 2e91b4f19..303e32900 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -21,7 +21,7 @@ IDP_LINK_TRANSACTION=${public.internet.url}/v1/idp/linked-authorization/link-tra IDP_AUTHENTICATE=${public.internet.url}/v1/idp/linked-authorization/authenticate IDP_CONSENT=${public.internet.url}/v1/idp/linked-authorization/consent IDP_OTP=${public.internet.url}/v1/idp/linked-authorization/send-otp -BINDING_OTP=${public.internet.url}/v1/idpbinding/send-binding-otp +BINDING_OTP=${public.internet.url}/v1/idpbinding/binding-otp WALLET_BINDING=${public.internet.url}/v1/idpbinding/wallet-binding mosip.authmanager.url=${mosipbox.public.url}/v1/authmanager/authenticate/clientidsecretkey From cb31770df3a9a17ea09b941e60245538ca995063 Mon Sep 17 00:00:00 2001 From: Monobikash Das Date: Tue, 10 Jan 2023 17:04:59 +0530 Subject: [PATCH 029/860] Integrated with latest idp changes --- .../mosip/mimoto/controller/IdpController.java | 16 ++++++++-------- .../mimoto/dto/mimoto/IdpAuthChallangeDto.java | 9 +++++++++ .../dto/mimoto/IdpAuthInternalRequestDto.java | 2 +- .../mimoto/controller/InjiControllerTest.java | 10 +++++----- 4 files changed, 23 insertions(+), 14 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthChallangeDto.java diff --git a/src/main/java/io/mosip/mimoto/controller/IdpController.java b/src/main/java/io/mosip/mimoto/controller/IdpController.java index 1fdddfe35..e066540ea 100644 --- a/src/main/java/io/mosip/mimoto/controller/IdpController.java +++ b/src/main/java/io/mosip/mimoto/controller/IdpController.java @@ -89,8 +89,8 @@ public ResponseEntity linkTransaction(@RequestBody LinkTransactionReques IdpLinkCodeDto dto = new IdpLinkCodeDto(requestDTO.getLinkCode()); IdpLinkTransactionReqDto reqDto = new IdpLinkTransactionReqDto(requestDTO.getRequestTime(), dto); res = (LinkTransactionResponseDto) restClientService - .postApi(ApiName.IDP_LINK_TRANSACTION, null, null, - reqDto, LinkTransactionResponseDto.class); + .postApi(ApiName.IDP_LINK_TRANSACTION, + reqDto, LinkTransactionResponseDto.class, useBearerToken); } catch (Exception e) { logger.error("link-transaction error error occured for link code " + requestDTO.getLinkCode(), e); res = new LinkTransactionResponseDto(DateUtils.getRequestTimeString(), null, @@ -111,8 +111,8 @@ public ResponseEntity idpAuthenticate(@RequestBody IdpAuthRequestDto req callIdpOtpApi(requestDTO); response = (ResponseWrapper) restClientService - .postApi(ApiName.IDP_AUTHENTICATE, null, null, - requestDTO, ResponseWrapper.class); + .postApi(ApiName.IDP_AUTHENTICATE, + requestDTO, ResponseWrapper.class, useBearerToken); } catch (Exception e) { logger.error("idp-authenticate error error occured for link code " + requestDTO.getRequest().getLinkedTransactionId(), e); response = getErrorResponse(PlatformErrorMessages.MIMOTO_WALLET_BINDING_EXCEPTION.getCode(), e.getMessage()); @@ -128,8 +128,8 @@ public ResponseEntity idpLinkCode(@RequestBody IdpConsentDto requestDTO) ResponseWrapper response = null; try { response = (ResponseWrapper) restClientService - .postApi(ApiName.IDP_CONSENT, null, null, - requestDTO, ResponseWrapper.class); + .postApi(ApiName.IDP_CONSENT, + requestDTO, ResponseWrapper.class,useBearerToken); } catch (Exception e) { logger.error("link-transaction error error occured for link code " + requestDTO.getRequest().getLinkedTransactionId(), e); response = getErrorResponse(PlatformErrorMessages.MIMOTO_WALLET_BINDING_EXCEPTION.getCode(), e.getMessage()); @@ -173,8 +173,8 @@ private void callIdpOtpApi(IdpAuthRequestDto requestDTO) throws ApisResourceAcce req.setRequest(internalRequest); ResponseWrapper response = (ResponseWrapper) restClientService - .postApi(ApiName.IDP_OTP, null, null, - req, ResponseWrapper.class); + .postApi(ApiName.IDP_OTP, + req, ResponseWrapper.class, useBearerToken); if (response.getResponse() == null) throw new ApisResourceAccessException("Idp otp api not accessible"); diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthChallangeDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthChallangeDto.java new file mode 100644 index 000000000..92d0c0f72 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthChallangeDto.java @@ -0,0 +1,9 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.Data; + +@Data +public class IdpAuthChallangeDto { + private String authFactorType; + private String challenge; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthInternalRequestDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthInternalRequestDto.java index ca1d33178..235809872 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthInternalRequestDto.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthInternalRequestDto.java @@ -8,5 +8,5 @@ public class IdpAuthInternalRequestDto { private String linkedTransactionId; private String individualId; - private List challengeList; + private List challengeList; } diff --git a/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java b/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java index 073fbeee5..44182c539 100644 --- a/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java @@ -286,7 +286,7 @@ public void linkTransactionTest() throws Exception { LinkTransactionResponseDto response = new LinkTransactionResponseDto(); Mockito.when(restClientService.postApi(Mockito.any(), - Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(response).thenThrow(new BaseUncheckedException("Exception")); + Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(response).thenThrow(new BaseUncheckedException("Exception")); this.mockMvc.perform(post("/link-transaction").contentType(MediaType.APPLICATION_JSON_VALUE) .content(JsonUtils.javaObjectToJsonString(requestDTO))) @@ -302,7 +302,7 @@ public void idpAuthenticateTest() throws Exception { IdpAuthInternalRequestDto innerDto = new IdpAuthInternalRequestDto(); innerDto.setLinkedTransactionId("LinkedTransactionId"); innerDto.setIndividualId("individualId"); - IdpChallangeDto challangeDto = new IdpChallangeDto(); + IdpAuthChallangeDto challangeDto = new IdpAuthChallangeDto(); challangeDto.setAuthFactorType("OTP"); challangeDto.setChallenge("1234"); innerDto.setChallengeList(Lists.newArrayList(challangeDto)); @@ -319,7 +319,7 @@ public void idpAuthenticateTest() throws Exception { ResponseWrapper response = new ResponseWrapper<>(); Mockito.when(restClientService.postApi(Mockito.any(), - Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(otpResponse).thenReturn(response).thenReturn(otpResponse2); + Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(otpResponse).thenReturn(response).thenReturn(otpResponse2); this.mockMvc.perform(post("/idp-authenticate").contentType(MediaType.APPLICATION_JSON_VALUE) .content(JsonUtils.javaObjectToJsonString(requestDto))) @@ -343,7 +343,7 @@ public void idpConsentTest() throws Exception { ResponseWrapper response = new ResponseWrapper<>(); Mockito.when(restClientService.postApi(Mockito.any(), - Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(response).thenThrow(new BaseUncheckedException("Exception")); + Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(response).thenThrow(new BaseUncheckedException("Exception")); this.mockMvc.perform(post("/idp-consent").contentType(MediaType.APPLICATION_JSON_VALUE) .content(JsonUtils.javaObjectToJsonString(requestDto))) @@ -367,7 +367,7 @@ public void residentOtpRequestTest() throws Exception { ResponseWrapper response = new ResponseWrapper<>(); Mockito.when(restClientService.postApi(Mockito.any(), - Mockito.anyString(), Mockito.anyString(), Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(response); + Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(response); this.mockMvc.perform(post("/req/otp").contentType(MediaType.APPLICATION_JSON_VALUE) .content(JsonUtils.javaObjectToJsonString(requestDTO))) From d91f284af748d934faad131ba778ed83d94cb530 Mon Sep 17 00:00:00 2001 From: Monobikash Das Date: Wed, 11 Jan 2023 14:07:29 +0530 Subject: [PATCH 030/860] added thumbprint in response --- pom.xml | 6 ++ .../mimoto/controller/IdpController.java | 16 ++++-- .../WalletBindingInternalResponseDto.java | 10 ++++ .../dto/mimoto/WalletBindingResponseDto.java | 2 + .../java/io/mosip/mimoto/util/JoseUtil.java | 55 +++++++++++++++++++ 5 files changed, 84 insertions(+), 5 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInternalResponseDto.java diff --git a/pom.xml b/pom.xml index f506111a9..74c86382b 100644 --- a/pom.xml +++ b/pom.xml @@ -336,6 +336,12 @@ nimbus-jose-jwt 9.25.6 + + org.bitbucket.b_c + jose4j + 0.9.2 + + io.mosip.kernel diff --git a/src/main/java/io/mosip/mimoto/controller/IdpController.java b/src/main/java/io/mosip/mimoto/controller/IdpController.java index e066540ea..7ba9fb6b7 100644 --- a/src/main/java/io/mosip/mimoto/controller/IdpController.java +++ b/src/main/java/io/mosip/mimoto/controller/IdpController.java @@ -33,7 +33,10 @@ public class IdpController { private Gson gson = new Gson(); @Autowired - public RestClientService restClientService; + private RestClientService restClientService; + + @Autowired + private JoseUtil joseUtil; @PostMapping("/binding-otp") @SuppressWarnings("unchecked") @@ -70,9 +73,12 @@ public ResponseEntity request(@RequestBody WalletBindingRequestDTO reque WalletBindingInternalRequestDTO req = new WalletBindingInternalRequestDTO(requestDTO.getRequestTime(), innerRequestDto); - response = (ResponseWrapper) restClientService + ResponseWrapper internalResponse = (ResponseWrapper) restClientService .postApi(ApiName.WALLET_BINDING, req, ResponseWrapper.class, useBearerToken); + + response = joseUtil.addThumbprintAndKeyId(internalResponse); + } catch (Exception e) { logger.error("Wallet binding error occured for tranaction id " + requestDTO.getRequest().getIndividualId(), e); response = getErrorResponse(PlatformErrorMessages.MIMOTO_WALLET_BINDING_EXCEPTION.getCode(), e.getMessage()); @@ -108,7 +114,7 @@ public ResponseEntity idpAuthenticate(@RequestBody IdpAuthRequestDto req try { // calling mock otp code which should be removed once idp backend is ready - callIdpOtpApi(requestDTO); + //callIdpOtpApi(requestDTO); response = (ResponseWrapper) restClientService .postApi(ApiName.IDP_AUTHENTICATE, @@ -162,7 +168,7 @@ private List getErrors(String errorCode, String errorMessage) { * @param requestDTO * @return */ - private void callIdpOtpApi(IdpAuthRequestDto requestDTO) throws ApisResourceAccessException { + /*private void callIdpOtpApi(IdpAuthRequestDto requestDTO) throws ApisResourceAccessException { IdpOtpReq req = new IdpOtpReq(); req.setRequestTime(requestDTO.getRequestTime()); @@ -179,5 +185,5 @@ private void callIdpOtpApi(IdpAuthRequestDto requestDTO) throws ApisResourceAcce if (response.getResponse() == null) throw new ApisResourceAccessException("Idp otp api not accessible"); - } + }*/ } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInternalResponseDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInternalResponseDto.java new file mode 100644 index 000000000..164831c8a --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInternalResponseDto.java @@ -0,0 +1,10 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.Data; + +@Data +public class WalletBindingInternalResponseDto { + private String certificate; + private String encryptedWalletBindingId; + private String expireDateTime; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingResponseDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingResponseDto.java index 3c7b41b94..fd6ad6a7c 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingResponseDto.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingResponseDto.java @@ -7,4 +7,6 @@ public class WalletBindingResponseDto { private String certificate; private String encryptedWalletBindingId; private String expireDateTime; + private String thumbprint; + private String keyId; } diff --git a/src/main/java/io/mosip/mimoto/util/JoseUtil.java b/src/main/java/io/mosip/mimoto/util/JoseUtil.java index a971bbf58..42dca54cc 100644 --- a/src/main/java/io/mosip/mimoto/util/JoseUtil.java +++ b/src/main/java/io/mosip/mimoto/util/JoseUtil.java @@ -1,22 +1,38 @@ package io.mosip.mimoto.util; +import com.fasterxml.jackson.databind.ObjectMapper; import com.nimbusds.jose.jwk.JWK; import com.nimbusds.jose.jwk.KeyUse; import com.nimbusds.jose.jwk.RSAKey; +import com.nimbusds.jose.util.X509CertUtils; +import io.mosip.kernel.core.logger.spi.Logger; import io.mosip.kernel.core.util.CryptoUtil; +import io.mosip.mimoto.core.http.ResponseWrapper; import io.mosip.mimoto.dto.mimoto.JwkDto; +import io.mosip.mimoto.dto.mimoto.WalletBindingInternalResponseDto; +import io.mosip.mimoto.dto.mimoto.WalletBindingResponseDto; +import org.jose4j.jws.JsonWebSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; import java.math.BigInteger; import java.security.KeyFactory; import java.security.NoSuchAlgorithmException; import java.security.PublicKey; +import java.security.cert.X509Certificate; import java.security.interfaces.RSAPublicKey; import java.security.spec.InvalidKeySpecException; import java.security.spec.RSAPublicKeySpec; import java.util.UUID; +@Component public class JoseUtil { + private final Logger logger = LoggerUtil.getLogger(JoseUtil.class); + + @Autowired + private ObjectMapper mapper; + public static JwkDto getJwkFromPublicKey(String publicKeyString) throws NoSuchAlgorithmException, InvalidKeySpecException { String key = publicKeyString.replaceAll("\\n", "") .replace("-----BEGIN RSA PUBLIC KEY-----", "") @@ -39,4 +55,43 @@ public static JwkDto getJwkFromPublicKey(String publicKeyString) throws NoSuchAl return jwkDto; } + + + public ResponseWrapper addThumbprintAndKeyId(ResponseWrapper responseDto) { + + logger.debug("Inside addThumbprintAndKeyId "); + + ResponseWrapper responseWrapper = new ResponseWrapper<>(); + responseWrapper.setId(responseDto.getId()); + responseWrapper.setResponsetime(responseDto.getResponsetime()); + responseWrapper.setVersion(responseDto.getVersion()); + responseWrapper.setErrors(responseDto.getErrors()); + + try { + if (responseDto.getResponse() != null) { + WalletBindingInternalResponseDto resp = mapper.readValue( + mapper.writeValueAsString(responseDto.getResponse()), WalletBindingInternalResponseDto.class); + // generate thumbprint and key id + String certificate = resp.getCertificate(); + X509Certificate x509Certificate = X509CertUtils.parse(certificate); + JsonWebSignature jwSign = new JsonWebSignature(); + jwSign.setKeyIdHeaderValue(x509Certificate.getSerialNumber().toString(10)); + jwSign.setX509CertSha256ThumbprintHeaderValue(x509Certificate); + + // map fields with thumbprint and key id + WalletBindingResponseDto response = new WalletBindingResponseDto(); + response.setCertificate(resp.getCertificate()); + response.setEncryptedWalletBindingId(resp.getEncryptedWalletBindingId()); + response.setExpireDateTime(resp.getExpireDateTime()); + response.setKeyId(jwSign.getX509CertSha256ThumbprintHeaderValue()); + response.setThumbprint(jwSign.getX509CertSha256ThumbprintHeaderValue()); + + responseWrapper.setResponse(response); + } + } catch (Exception e) { + logger.error("Exception occured while setting thumbprint ", e); + } + + return responseWrapper; + } } From 04ed59706e168ec707dc3ebc1f02c08c43864a65 Mon Sep 17 00:00:00 2001 From: Monobikash Das Date: Wed, 11 Jan 2023 16:02:42 +0530 Subject: [PATCH 031/860] added thumbprint in response --- src/main/java/io/mosip/mimoto/util/JoseUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/mosip/mimoto/util/JoseUtil.java b/src/main/java/io/mosip/mimoto/util/JoseUtil.java index 42dca54cc..5949081f3 100644 --- a/src/main/java/io/mosip/mimoto/util/JoseUtil.java +++ b/src/main/java/io/mosip/mimoto/util/JoseUtil.java @@ -83,7 +83,7 @@ public ResponseWrapper addThumbprintAndKeyId(ResponseW response.setCertificate(resp.getCertificate()); response.setEncryptedWalletBindingId(resp.getEncryptedWalletBindingId()); response.setExpireDateTime(resp.getExpireDateTime()); - response.setKeyId(jwSign.getX509CertSha256ThumbprintHeaderValue()); + response.setKeyId(jwSign.getKeyIdHeaderValue()); response.setThumbprint(jwSign.getX509CertSha256ThumbprintHeaderValue()); responseWrapper.setResponse(response); From 96fbc0e757ecffdbc1e211800bd5d815fa472b30 Mon Sep 17 00:00:00 2001 From: Monobikash Das Date: Fri, 13 Jan 2023 16:18:03 +0530 Subject: [PATCH 032/860] added thumbprint in response --- .../java/io/mosip/mimoto/dto/mimoto/IdpAuthChallangeDto.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthChallangeDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthChallangeDto.java index 92d0c0f72..16c720618 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthChallangeDto.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthChallangeDto.java @@ -6,4 +6,5 @@ public class IdpAuthChallangeDto { private String authFactorType; private String challenge; + private String format; } From 8706a4c6de7dde980c50a558500c2df357094699 Mon Sep 17 00:00:00 2001 From: Monobikash Das Date: Tue, 17 Jan 2023 18:25:37 +0530 Subject: [PATCH 033/860] Resident application id api changes --- .../mimoto/controller/IdpController.java | 71 ++++++++++++------- .../controller/ResidentServiceController.java | 17 ++--- .../dto/mimoto/AuthAndConsentRequestDto.java | 14 ++++ .../dto/mimoto/IdpAuthAndConsentDto.java | 9 +++ .../dto/mimoto/IdpAuthInternalRequestDto.java | 4 ++ .../mimoto/dto/mimoto/IdpAuthRequestDto.java | 4 ++ .../mimoto/dto/mimoto/IdpConsentDto.java | 4 ++ .../dto/mimoto/IdpConsentRequestDto.java | 4 ++ .../dto/mimoto/InternalAidStatusDTO.java | 16 +++++ .../resident/IndividualIdOTPRequestDTO.java | 4 +- .../resources/application-local.properties | 7 +- .../mimoto/controller/InjiControllerTest.java | 35 +++++++++ 12 files changed, 145 insertions(+), 44 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/AuthAndConsentRequestDto.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthAndConsentDto.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/InternalAidStatusDTO.java diff --git a/src/main/java/io/mosip/mimoto/controller/IdpController.java b/src/main/java/io/mosip/mimoto/controller/IdpController.java index 7ba9fb6b7..f9dd55cf2 100644 --- a/src/main/java/io/mosip/mimoto/controller/IdpController.java +++ b/src/main/java/io/mosip/mimoto/controller/IdpController.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.controller; +import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.Lists; import com.google.gson.Gson; import io.mosip.kernel.core.logger.spi.Logger; @@ -38,6 +39,9 @@ public class IdpController { @Autowired private JoseUtil joseUtil; + @Autowired + private ObjectMapper objectMapper; + @PostMapping("/binding-otp") @SuppressWarnings("unchecked") public ResponseEntity otpRequest(@RequestBody BindingOtpRequestDto requestDTO) throws Exception { @@ -51,8 +55,6 @@ public ResponseEntity otpRequest(@RequestBody BindingOtpRequestDto reque logger.error("Wallet binding otp error occured.", e); response = getErrorResponse(PlatformErrorMessages.MIMOTO_OTP_BINDING_EXCEPTION.getCode(), e.getMessage()); } - - return ResponseEntity.status(HttpStatus.OK).body(response); } @@ -106,6 +108,46 @@ public ResponseEntity linkTransaction(@RequestBody LinkTransactionReques return ResponseEntity.status(HttpStatus.OK).body(res); } + @PostMapping("idp-auth-consent") + public ResponseEntity idpAuthAndConsent(@RequestBody IdpAuthAndConsentDto requestDTO) throws Exception { + logger.debug("Received idp-authenticate request : " + JsonUtils.javaObjectToJsonString(requestDTO)); + + AuthAndConsentRequestDto req = requestDTO.getRequest(); + + IdpAuthRequestDto authReqDto = new IdpAuthRequestDto(requestDTO.getRequestTime(), + new IdpAuthInternalRequestDto(req.getLinkedTransactionId(), + req.getIndividualId(), req.getChallengeList())); + + + ResponseWrapper idpResponse = null; + + try { + ResponseWrapper response = (ResponseWrapper) restClientService + .postApi(ApiName.IDP_AUTHENTICATE, + authReqDto, new ResponseWrapper().getClass(), useBearerToken); + + if (response != null && response.getResponse() != null && response.getResponse() != null) { + LinkedTransactionResponseDto resp = objectMapper.readValue( + JsonUtils.javaObjectToJsonString(response.getResponse()), LinkedTransactionResponseDto.class); + IdpConsentDto idpConsentRequestDto = new IdpConsentDto(requestDTO.getRequestTime(), + new IdpConsentRequestDto(resp.getLinkedTransactionId(), + req.getAcceptedClaims(), req.getPermittedAuthorizeScopes())); + + idpResponse = (ResponseWrapper) restClientService + .postApi(ApiName.IDP_CONSENT, + idpConsentRequestDto, ResponseWrapper.class,useBearerToken); + } else { + idpResponse = response; + } + + } catch (Exception e) { + logger.error("idp-auth-consent error error occured for link code " + requestDTO.getRequest().getLinkedTransactionId(), e); + idpResponse = getErrorResponse(PlatformErrorMessages.MIMOTO_WALLET_BINDING_EXCEPTION.getCode(), e.getMessage()); + } + + return ResponseEntity.status(HttpStatus.OK).body(idpResponse); + } + @PostMapping("idp-authenticate") public ResponseEntity idpAuthenticate(@RequestBody IdpAuthRequestDto requestDTO) throws Exception { logger.debug("Received idp-authenticate request : " + JsonUtils.javaObjectToJsonString(requestDTO)); @@ -161,29 +203,4 @@ private List getErrors(String errorCode, String errorMessage) { ErrorDTO errorDTO = new ErrorDTO(errorCode, errorMessage); return Lists.newArrayList(errorDTO); } - - /** - * To be cleaned up later - * - * @param requestDTO - * @return - */ - /*private void callIdpOtpApi(IdpAuthRequestDto requestDTO) throws ApisResourceAccessException { - - IdpOtpReq req = new IdpOtpReq(); - req.setRequestTime(requestDTO.getRequestTime()); - - IdpOtpReqDto internalRequest = new IdpOtpReqDto(requestDTO.getRequest().getLinkedTransactionId(), - requestDTO.getRequest().getIndividualId(), Lists.newArrayList("EMAIL")); - - req.setRequest(internalRequest); - - ResponseWrapper response = (ResponseWrapper) restClientService - .postApi(ApiName.IDP_OTP, - req, ResponseWrapper.class, useBearerToken); - - if (response.getResponse() == null) - throw new ApisResourceAccessException("Idp otp api not accessible"); - - }*/ } diff --git a/src/main/java/io/mosip/mimoto/controller/ResidentServiceController.java b/src/main/java/io/mosip/mimoto/controller/ResidentServiceController.java index 8e5adfb00..22aca63b1 100644 --- a/src/main/java/io/mosip/mimoto/controller/ResidentServiceController.java +++ b/src/main/java/io/mosip/mimoto/controller/ResidentServiceController.java @@ -1,10 +1,8 @@ package io.mosip.mimoto.controller; -import io.mosip.mimoto.dto.mimoto.AidStatusRequestDTO; -import io.mosip.mimoto.dto.mimoto.IndividualIdOtpRequestDTO; +import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.dto.resident.*; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.core.env.Environment; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; @@ -17,8 +15,6 @@ import io.mosip.mimoto.constant.ApiName; import io.mosip.mimoto.core.http.RequestWrapper; import io.mosip.mimoto.core.http.ResponseWrapper; -import io.mosip.mimoto.dto.mimoto.AppOTPRequestDTO; -import io.mosip.mimoto.dto.mimoto.AppVIDGenerateRequestDTO; import io.mosip.mimoto.service.RestClientService; import io.mosip.mimoto.util.DateUtils; import io.mosip.mimoto.util.LoggerUtil; @@ -137,9 +133,9 @@ public ResponseEntity individualIdOtpRequest(@RequestBody IndividualIdOt mosipOTPRequestPayload.setId("mosip.identity.otp.internal"); mosipOTPRequestPayload.setVersion("1.0"); mosipOTPRequestPayload.setRequestTime(DateUtils.getRequestTimeString()); - mosipOTPRequestPayload.setAid(requestDTO.getAid()); + mosipOTPRequestPayload.setIndividualId(requestDTO.getAid()); mosipOTPRequestPayload.setOtpChannel(requestDTO.getOtpChannel()); - mosipOTPRequestPayload.setTransactionID(requestDTO.getTransactionID()); + mosipOTPRequestPayload.setTransactionId(requestDTO.getTransactionID()); OTPResponseDTO responseWrapper = (OTPResponseDTO) restClientService .postApi(ApiName.RESIDENT_INDIVIDUALID_OTP, "", "", mosipOTPRequestPayload, OTPResponseDTO.class, MediaType.APPLICATION_JSON); @@ -150,11 +146,12 @@ public ResponseEntity individualIdOtpRequest(@RequestBody IndividualIdOt @PostMapping("/aid/get-individual-id") @SuppressWarnings("unchecked") public ResponseEntity aidGetIndividualId(@RequestBody AidStatusRequestDTO requestDTO) throws Exception { - RequestWrapper mosipAuthLockRequestPayload = new RequestWrapper<>(); + InternalAidStatusDTO req = new InternalAidStatusDTO(requestDTO.getAid(), requestDTO.getOtp(), requestDTO.getTransactionID()); + RequestWrapper mosipAuthLockRequestPayload = new RequestWrapper<>(); mosipAuthLockRequestPayload.setId("mosip.resident.checkstatus"); - mosipAuthLockRequestPayload.setVersion("v1"); + mosipAuthLockRequestPayload.setVersion("1.0"); mosipAuthLockRequestPayload.setRequesttime(DateUtils.getRequestTimeString()); - mosipAuthLockRequestPayload.setRequest(requestDTO); + mosipAuthLockRequestPayload.setRequest(req); ResponseWrapper responseWrapper = (ResponseWrapper) restClientService .postApi(ApiName.RESIDENT_AID_GET_INDIVIDUALID, "", "", mosipAuthLockRequestPayload, ResponseWrapper.class, MediaType.APPLICATION_JSON); diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/AuthAndConsentRequestDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/AuthAndConsentRequestDto.java new file mode 100644 index 000000000..567775407 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/AuthAndConsentRequestDto.java @@ -0,0 +1,14 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.Data; + +import java.util.List; + +@Data +public class AuthAndConsentRequestDto { + private String linkedTransactionId; + private String individualId; + private List acceptedClaims; + private List permittedAuthorizeScopes; + private List challengeList; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthAndConsentDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthAndConsentDto.java new file mode 100644 index 000000000..d51d79faa --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthAndConsentDto.java @@ -0,0 +1,9 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.Data; + +@Data +public class IdpAuthAndConsentDto { + private String requestTime; + private AuthAndConsentRequestDto request; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthInternalRequestDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthInternalRequestDto.java index 235809872..fb142ba9c 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthInternalRequestDto.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthInternalRequestDto.java @@ -1,10 +1,14 @@ package io.mosip.mimoto.dto.mimoto; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; import java.util.List; @Data +@NoArgsConstructor +@AllArgsConstructor public class IdpAuthInternalRequestDto { private String linkedTransactionId; private String individualId; diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthRequestDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthRequestDto.java index 79122f735..1b66ad8cc 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthRequestDto.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpAuthRequestDto.java @@ -1,8 +1,12 @@ package io.mosip.mimoto.dto.mimoto; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; @Data +@NoArgsConstructor +@AllArgsConstructor public class IdpAuthRequestDto { private String requestTime; private IdpAuthInternalRequestDto request; diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/IdpConsentDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpConsentDto.java index ca13286d8..95186e6ac 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/IdpConsentDto.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpConsentDto.java @@ -1,8 +1,12 @@ package io.mosip.mimoto.dto.mimoto; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; @Data +@NoArgsConstructor +@AllArgsConstructor public class IdpConsentDto { private String requestTime; private IdpConsentRequestDto request; diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/IdpConsentRequestDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpConsentRequestDto.java index 6b6802808..1015066d6 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/IdpConsentRequestDto.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpConsentRequestDto.java @@ -1,10 +1,14 @@ package io.mosip.mimoto.dto.mimoto; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; import java.util.List; @Data +@NoArgsConstructor +@AllArgsConstructor public class IdpConsentRequestDto { private String linkedTransactionId; private List acceptedClaims; diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/InternalAidStatusDTO.java b/src/main/java/io/mosip/mimoto/dto/mimoto/InternalAidStatusDTO.java new file mode 100644 index 000000000..884847da2 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/InternalAidStatusDTO.java @@ -0,0 +1,16 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class InternalAidStatusDTO { + + private String individualId; + private String otp; + private String transactionId; + +} diff --git a/src/main/java/io/mosip/mimoto/dto/resident/IndividualIdOTPRequestDTO.java b/src/main/java/io/mosip/mimoto/dto/resident/IndividualIdOTPRequestDTO.java index ace261112..1cd9e0942 100644 --- a/src/main/java/io/mosip/mimoto/dto/resident/IndividualIdOTPRequestDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/resident/IndividualIdOTPRequestDTO.java @@ -10,10 +10,10 @@ public class IndividualIdOTPRequestDTO { private String id; private String version; - private String transactionID; + private String transactionId; private String requestTime; private List otpChannel; - private String aid; + private String individualId; private Map metadata; } \ No newline at end of file diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 303e32900..d232b56a1 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -9,8 +9,8 @@ keycloak.internal.url=https://iam.dev.mosip.net/ mosip.resident.base.url=${mosipbox.public.url}/resident/v1 RESIDENT_OTP=${mosip.resident.base.url}/req/otp -RESIDENT_INDIVIDUALID_OTP=${mosip.resident.base.url}/req/individualId/otp -RESIDENT_AID_GET_INDIVIDUALID=${mosip.resident.base.url}/aid/get-individual-id +RESIDENT_INDIVIDUALID_OTP=${mosip.resident.base.url}/individualId/otp +RESIDENT_AID_GET_INDIVIDUALID=${mosip.resident.base.url}/aid/status #RESIDENT_INDIVIDUALID_OTP=https://api-internal.dev3.mosip.net/resident/v1/req/individualId/otp RESIDENT_CREDENTIAL_REQUEST=${mosip.resident.base.url}/req/credential RESIDENT_CREDENTIAL_REQUEST_STATUS=${RESIDENT_CREDENTIAL_REQUEST}/status @@ -49,12 +49,10 @@ mosip.event.hub.pubUrl=${mosip.event.hubUrl} # MOSIP partner mosip.partner.id=mpartner-default-mobile -mosip.idp.partner.id=mpartner-default-mobile mosip.partner.crypto.p12.filename=keystore.p12 mosip.partner.crypto.p12.password=abc123 mosip.partner.crypto.p12.alias=partner mosip.partner.encryption.key=123456 -mosip.idp.partner.encryption.key=123456 mosip.partner.prependThumbprint=true @@ -192,4 +190,3 @@ mosip.iam.adapter.self-token-renewal-enable=true mosip.auth.filter_disable=false mosip.auth.adapter.impl.basepackage=io.mosip.kernel.auth.defaultadapter mosip.kernel.auth.appids.realm.map={prereg:'mosip',ida:'mosip',registrationclient:'mosip',regproc:'mosip',partner:'mosip',resident:'mosip',admin:'mosip',crereq:'mosip',creser:'mosip',datsha:'mosip',idrepo:'mosip'} -mimoto.mocked.requestid=b7b39859-2705-4a2d-9deb-2d47d5e5fe2c \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java b/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java index 44182c539..b42ec360b 100644 --- a/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java @@ -10,6 +10,7 @@ import io.mosip.mimoto.core.http.ResponseWrapper; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.dto.resident.*; +import io.mosip.mimoto.exception.ApisResourceAccessException; import io.mosip.mimoto.exception.BaseUncheckedException; import io.mosip.mimoto.model.Event; import io.mosip.mimoto.model.EventModel; @@ -297,6 +298,40 @@ public void linkTransactionTest() throws Exception { .andExpect(status().isOk()); } + @Test + public void idpAuthAndConsentTest() throws Exception { + AuthAndConsentRequestDto innerDto = new AuthAndConsentRequestDto(); + innerDto.setLinkedTransactionId("LinkedTransactionId"); + innerDto.setIndividualId("individualId"); + innerDto.setLinkedTransactionId("LinkedTransactionId"); + innerDto.setAcceptedClaims(Lists.newArrayList("OTP")); + IdpAuthChallangeDto challangeDto = new IdpAuthChallangeDto(); + challangeDto.setAuthFactorType("OTP"); + challangeDto.setChallenge("1234"); + innerDto.setChallengeList(Lists.newArrayList(challangeDto)); + IdpAuthAndConsentDto requestDto = new IdpAuthAndConsentDto(); + requestDto.setRequestTime(DateUtils.getUTCCurrentDateTimeString()); + requestDto.setRequest(innerDto); + + + LinkedTransactionResponseDto resp = new LinkedTransactionResponseDto(); + resp.setLinkedTransactionId("linkedTransactionId"); + ResponseWrapper responseWrapper = new ResponseWrapper<>(); + responseWrapper.setResponse(resp); + + Mockito.when(restClientService.postApi(Mockito.any(), + Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(responseWrapper) + .thenReturn(responseWrapper).thenThrow(new ApisResourceAccessException("exception")); + + this.mockMvc.perform(post("/idp-auth-consent").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(requestDto))) + .andExpect(status().isOk()); + + this.mockMvc.perform(post("/idp-auth-consent").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(requestDto))) + .andExpect(status().isOk()); + } + @Test public void idpAuthenticateTest() throws Exception { IdpAuthInternalRequestDto innerDto = new IdpAuthInternalRequestDto(); From c4f645144532766d438a3589cb02eab31aad2fd2 Mon Sep 17 00:00:00 2001 From: Monobikash Das Date: Wed, 1 Feb 2023 18:21:53 +0530 Subject: [PATCH 034/860] Removed unused Idp apis and jose lib changes --- .../mimoto/controller/IdpController.java | 98 ------------------- .../java/io/mosip/mimoto/util/JoseUtil.java | 39 ++++++-- .../resources/application-local.properties | 13 ++- .../mimoto/controller/InjiControllerTest.java | 4 + 4 files changed, 43 insertions(+), 111 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/IdpController.java b/src/main/java/io/mosip/mimoto/controller/IdpController.java index f9dd55cf2..41c4bc7f6 100644 --- a/src/main/java/io/mosip/mimoto/controller/IdpController.java +++ b/src/main/java/io/mosip/mimoto/controller/IdpController.java @@ -89,104 +89,6 @@ public ResponseEntity request(@RequestBody WalletBindingRequestDTO reque return ResponseEntity.status(HttpStatus.OK).body(response); } - @PostMapping("/link-transaction") - @SuppressWarnings("unchecked") - public ResponseEntity linkTransaction(@RequestBody LinkTransactionRequestDto requestDTO) throws Exception { - LinkTransactionResponseDto res = null; - try { - IdpLinkCodeDto dto = new IdpLinkCodeDto(requestDTO.getLinkCode()); - IdpLinkTransactionReqDto reqDto = new IdpLinkTransactionReqDto(requestDTO.getRequestTime(), dto); - res = (LinkTransactionResponseDto) restClientService - .postApi(ApiName.IDP_LINK_TRANSACTION, - reqDto, LinkTransactionResponseDto.class, useBearerToken); - } catch (Exception e) { - logger.error("link-transaction error error occured for link code " + requestDTO.getLinkCode(), e); - res = new LinkTransactionResponseDto(DateUtils.getRequestTimeString(), null, - getErrors(PlatformErrorMessages.MIMOTO_LINK_TRANSACTION_EXCEPTION.getCode(), e.getMessage())); - } - - return ResponseEntity.status(HttpStatus.OK).body(res); - } - - @PostMapping("idp-auth-consent") - public ResponseEntity idpAuthAndConsent(@RequestBody IdpAuthAndConsentDto requestDTO) throws Exception { - logger.debug("Received idp-authenticate request : " + JsonUtils.javaObjectToJsonString(requestDTO)); - - AuthAndConsentRequestDto req = requestDTO.getRequest(); - - IdpAuthRequestDto authReqDto = new IdpAuthRequestDto(requestDTO.getRequestTime(), - new IdpAuthInternalRequestDto(req.getLinkedTransactionId(), - req.getIndividualId(), req.getChallengeList())); - - - ResponseWrapper idpResponse = null; - - try { - ResponseWrapper response = (ResponseWrapper) restClientService - .postApi(ApiName.IDP_AUTHENTICATE, - authReqDto, new ResponseWrapper().getClass(), useBearerToken); - - if (response != null && response.getResponse() != null && response.getResponse() != null) { - LinkedTransactionResponseDto resp = objectMapper.readValue( - JsonUtils.javaObjectToJsonString(response.getResponse()), LinkedTransactionResponseDto.class); - IdpConsentDto idpConsentRequestDto = new IdpConsentDto(requestDTO.getRequestTime(), - new IdpConsentRequestDto(resp.getLinkedTransactionId(), - req.getAcceptedClaims(), req.getPermittedAuthorizeScopes())); - - idpResponse = (ResponseWrapper) restClientService - .postApi(ApiName.IDP_CONSENT, - idpConsentRequestDto, ResponseWrapper.class,useBearerToken); - } else { - idpResponse = response; - } - - } catch (Exception e) { - logger.error("idp-auth-consent error error occured for link code " + requestDTO.getRequest().getLinkedTransactionId(), e); - idpResponse = getErrorResponse(PlatformErrorMessages.MIMOTO_WALLET_BINDING_EXCEPTION.getCode(), e.getMessage()); - } - - return ResponseEntity.status(HttpStatus.OK).body(idpResponse); - } - - @PostMapping("idp-authenticate") - public ResponseEntity idpAuthenticate(@RequestBody IdpAuthRequestDto requestDTO) throws Exception { - logger.debug("Received idp-authenticate request : " + JsonUtils.javaObjectToJsonString(requestDTO)); - - ResponseWrapper response = null; - - try { - // calling mock otp code which should be removed once idp backend is ready - //callIdpOtpApi(requestDTO); - - response = (ResponseWrapper) restClientService - .postApi(ApiName.IDP_AUTHENTICATE, - requestDTO, ResponseWrapper.class, useBearerToken); - } catch (Exception e) { - logger.error("idp-authenticate error error occured for link code " + requestDTO.getRequest().getLinkedTransactionId(), e); - response = getErrorResponse(PlatformErrorMessages.MIMOTO_WALLET_BINDING_EXCEPTION.getCode(), e.getMessage()); - } - - return ResponseEntity.status(HttpStatus.OK).body(response); - } - - @PostMapping("idp-consent") - public ResponseEntity idpLinkCode(@RequestBody IdpConsentDto requestDTO) throws Exception { - logger.debug("Received idp-link-code request : " + JsonUtils.javaObjectToJsonString(requestDTO)); - - ResponseWrapper response = null; - try { - response = (ResponseWrapper) restClientService - .postApi(ApiName.IDP_CONSENT, - requestDTO, ResponseWrapper.class,useBearerToken); - } catch (Exception e) { - logger.error("link-transaction error error occured for link code " + requestDTO.getRequest().getLinkedTransactionId(), e); - response = getErrorResponse(PlatformErrorMessages.MIMOTO_WALLET_BINDING_EXCEPTION.getCode(), e.getMessage()); - } - - return ResponseEntity.status(HttpStatus.OK).body(response); - } - - private ResponseWrapper getErrorResponse(String errorCode, String errorMessage) { List errors = getErrors(errorCode, errorMessage); diff --git a/src/main/java/io/mosip/mimoto/util/JoseUtil.java b/src/main/java/io/mosip/mimoto/util/JoseUtil.java index 5949081f3..fc5e486a9 100644 --- a/src/main/java/io/mosip/mimoto/util/JoseUtil.java +++ b/src/main/java/io/mosip/mimoto/util/JoseUtil.java @@ -23,26 +23,22 @@ import java.security.interfaces.RSAPublicKey; import java.security.spec.InvalidKeySpecException; import java.security.spec.RSAPublicKeySpec; +import java.security.spec.X509EncodedKeySpec; import java.util.UUID; @Component public class JoseUtil { private final Logger logger = LoggerUtil.getLogger(JoseUtil.class); + private static final String BEGIN_KEY = "-----BEGIN PUBLIC KEY-----"; + private static final String END_KEY = "-----END PUBLIC KEY-----"; @Autowired private ObjectMapper mapper; public static JwkDto getJwkFromPublicKey(String publicKeyString) throws NoSuchAlgorithmException, InvalidKeySpecException { - String key = publicKeyString.replaceAll("\\n", "") - .replace("-----BEGIN RSA PUBLIC KEY-----", "") - .replace("-----END RSA PUBLIC KEY-----", ""); - - org.bouncycastle.asn1.pkcs.RSAPublicKey pkcs1PublicKey = org.bouncycastle.asn1.pkcs.RSAPublicKey.getInstance(CryptoUtil.decodePlainBase64(key)); - BigInteger modulus = pkcs1PublicKey.getModulus(); - BigInteger publicExponent = pkcs1PublicKey.getPublicExponent(); - RSAPublicKeySpec keySpec = new RSAPublicKeySpec(modulus, publicExponent); + RSAPublicKeySpec keySpec = publicKeyString.startsWith(BEGIN_KEY) ? getKeySpecForPublicKey(publicKeyString) : getKeySpecForRSAKey(publicKeyString); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); PublicKey publicKey = keyFactory.generatePublic(keySpec); // Convert to JWK format @@ -56,6 +52,33 @@ public static JwkDto getJwkFromPublicKey(String publicKeyString) throws NoSuchAl } + private static RSAPublicKeySpec getKeySpecForRSAKey(String publicKeyString) { + String key = publicKeyString.replaceAll("\\n", "") + .replace("-----BEGIN RSA PUBLIC KEY-----", "") + .replace("-----END RSA PUBLIC KEY-----", ""); + + org.bouncycastle.asn1.pkcs.RSAPublicKey pkcs1PublicKey = org.bouncycastle.asn1.pkcs.RSAPublicKey.getInstance(CryptoUtil.decodePlainBase64(key)); + BigInteger modulus = pkcs1PublicKey.getModulus(); + BigInteger publicExponent = pkcs1PublicKey.getPublicExponent(); + RSAPublicKeySpec keySpec = new RSAPublicKeySpec(modulus, publicExponent); + return keySpec; + + } + + private static RSAPublicKeySpec getKeySpecForPublicKey(String publicKeyString) throws NoSuchAlgorithmException, InvalidKeySpecException { + String key = publicKeyString.replaceAll("\\n", "") + .replace(BEGIN_KEY, "") + .replace(END_KEY, ""); + X509EncodedKeySpec spec = + new X509EncodedKeySpec(CryptoUtil.decodePlainBase64(key)); + KeyFactory kf = KeyFactory.getInstance("RSA"); + RSAPublicKey generatePublic = (RSAPublicKey) kf.generatePublic(spec); + BigInteger modulus = generatePublic.getModulus(); + BigInteger exponent = generatePublic.getPublicExponent(); + RSAPublicKeySpec keySpec = new RSAPublicKeySpec(modulus, exponent); + return keySpec; + } + public ResponseWrapper addThumbprintAndKeyId(ResponseWrapper responseDto) { diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index d232b56a1..c14a87e57 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -1,9 +1,9 @@ # MOSIP -mosipbox.public.url=https://api-internal.dev.mosip.net -public.internet.url=https://api.dev.mosip.net -public.url=https://api-internal.dev.mosip.net -keycloak.internal.url=https://iam.dev.mosip.net/ +mosipbox.public.url=https://api-internal.dev2.mosip.net +public.internet.url=https://api.dev2.mosip.net +public.url=https://api-internal.dev2.mosip.net +keycloak.internal.url=https://iam.dev2.mosip.net/ # Resident service mosip.resident.base.url=${mosipbox.public.url}/resident/v1 @@ -168,7 +168,10 @@ config.server.file.storage.uri=${mosipbox.public.url}/config/print/mz/develop2-v # websub authentication - auth adapter mosip.iam.adapter.clientid=mpartner-default-mobile -mosip.iam.adapter.clientsecret=0YINDhkf4t2JVend +# dev +#mosip.iam.adapter.clientsecret=0YINDhkf4t2JVend +# dev2 +mosip.iam.adapter.clientsecret=aat6iFT5P8sqeYd2 mosip.iam.adapter.appid=partner mosip.iam.adapter.issuerURL=${mosipbox.public.url}/auth/realms/mosip diff --git a/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java b/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java index b42ec360b..118409ced 100644 --- a/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java @@ -279,6 +279,7 @@ public void walletBindingTest() throws Exception { } @Test + @Ignore public void linkTransactionTest() throws Exception { LinkTransactionRequestDto requestDTO = new LinkTransactionRequestDto(); requestDTO.setRequestTime(DateUtils.getUTCCurrentDateTimeString()); @@ -299,6 +300,7 @@ public void linkTransactionTest() throws Exception { } @Test + @Ignore public void idpAuthAndConsentTest() throws Exception { AuthAndConsentRequestDto innerDto = new AuthAndConsentRequestDto(); innerDto.setLinkedTransactionId("LinkedTransactionId"); @@ -333,6 +335,7 @@ public void idpAuthAndConsentTest() throws Exception { } @Test + @Ignore public void idpAuthenticateTest() throws Exception { IdpAuthInternalRequestDto innerDto = new IdpAuthInternalRequestDto(); innerDto.setLinkedTransactionId("LinkedTransactionId"); @@ -366,6 +369,7 @@ public void idpAuthenticateTest() throws Exception { } @Test + @Ignore public void idpConsentTest() throws Exception { IdpConsentRequestDto innerDto = new IdpConsentRequestDto(); innerDto.setLinkedTransactionId("LinkedTransactionId"); From 6d0f5eb0d7f92c2cf87a856519a4484da06068f8 Mon Sep 17 00:00:00 2001 From: GOKULRAJ C <110164849+GOKULRAJ136@users.noreply.github.com> Date: Tue, 7 Feb 2023 12:45:15 +0530 Subject: [PATCH 035/860] MOSIP-25066: Added Prometheus Related Dependencies --- pom.xml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/pom.xml b/pom.xml index 74c86382b..463bd3be4 100644 --- a/pom.xml +++ b/pom.xml @@ -88,6 +88,16 @@ + + io.micrometer + micrometer-core + ${io.micrometer.prometheus.version} + + + io.micrometer + micrometer-registry-prometheus + ${io.micrometer.prometheus.version} + io.springfox springfox-swagger2 From ab1d646420ceb164be05adf9f89a4ddc2ced47b6 Mon Sep 17 00:00:00 2001 From: Monobikash Das Date: Tue, 14 Feb 2023 13:17:32 +0530 Subject: [PATCH 036/860] #553 : handled error when Idp binding apis are down --- .../io/mosip/mimoto/controller/IdpController.java | 7 +++++++ .../io/mosip/mimoto/exception/IdpException.java | 15 +++++++++++++++ .../mimoto/exception/PlatformErrorMessages.java | 3 ++- 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 src/main/java/io/mosip/mimoto/exception/IdpException.java diff --git a/src/main/java/io/mosip/mimoto/controller/IdpController.java b/src/main/java/io/mosip/mimoto/controller/IdpController.java index 41c4bc7f6..77c8ae586 100644 --- a/src/main/java/io/mosip/mimoto/controller/IdpController.java +++ b/src/main/java/io/mosip/mimoto/controller/IdpController.java @@ -10,6 +10,7 @@ import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.exception.ApisResourceAccessException; +import io.mosip.mimoto.exception.IdpException; import io.mosip.mimoto.exception.PlatformErrorMessages; import io.mosip.mimoto.service.RestClientService; import io.mosip.mimoto.util.DateUtils; @@ -51,6 +52,9 @@ public ResponseEntity otpRequest(@RequestBody BindingOtpRequestDto reque response = (ResponseWrapper) restClientService .postApi(ApiName.BINDING_OTP, requestDTO, ResponseWrapper.class, useBearerToken); + if (response == null) + throw new IdpException(); + } catch (Exception e) { logger.error("Wallet binding otp error occured.", e); response = getErrorResponse(PlatformErrorMessages.MIMOTO_OTP_BINDING_EXCEPTION.getCode(), e.getMessage()); @@ -79,6 +83,9 @@ public ResponseEntity request(@RequestBody WalletBindingRequestDTO reque .postApi(ApiName.WALLET_BINDING, req, ResponseWrapper.class, useBearerToken); + if (internalResponse == null) + throw new IdpException(); + response = joseUtil.addThumbprintAndKeyId(internalResponse); } catch (Exception e) { diff --git a/src/main/java/io/mosip/mimoto/exception/IdpException.java b/src/main/java/io/mosip/mimoto/exception/IdpException.java new file mode 100644 index 000000000..27960655a --- /dev/null +++ b/src/main/java/io/mosip/mimoto/exception/IdpException.java @@ -0,0 +1,15 @@ +package io.mosip.mimoto.exception; + +public class IdpException extends BaseUncheckedException { + /** The Constant serialVersionUID. */ + private static final long serialVersionUID = 1L; + + /** + * Instantiates a new Idp exception. + * + */ + public IdpException() { + super(PlatformErrorMessages.MIMOTO_IDP_GENERIC_EXCEPTION.getCode(), + PlatformErrorMessages.MIMOTO_IDP_GENERIC_EXCEPTION.getMessage()); + } +} diff --git a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java index fa0305dcb..2ea060bc1 100644 --- a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java +++ b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java @@ -79,7 +79,8 @@ public enum PlatformErrorMessages { MIMOTO_LINK_TRANSACTION_EXCEPTION(PlatformConstants.PREFIX + "030", "Idp link transaction exception occured"), MIMOTO_IDP_AUTHENTICATE_EXCEPTION(PlatformConstants.PREFIX + "031", "Idp authenticate exception occured"), MIMOTO_IDP_CONSENT_EXCEPTION(PlatformConstants.PREFIX + "032", "Idp consent exception occured"), - MIMOTO_IDP_OTP_EXCEPTION(PlatformConstants.PREFIX + "033", "IDP Otp error occured"); + MIMOTO_IDP_OTP_EXCEPTION(PlatformConstants.PREFIX + "033", "IDP Otp error occured"), + MIMOTO_IDP_GENERIC_EXCEPTION(PlatformConstants.PREFIX + "034", "Could not get response from server"); /** The error message. */ private final String errorMessage; From bf3aba3eb5a3389e58a31d45cfef2256f50d3bb5 Mon Sep 17 00:00:00 2001 From: Monobikash Das Date: Tue, 28 Feb 2023 14:47:30 +0530 Subject: [PATCH 037/860] #596 : bearer token renew logic --- .../io/mosip/mimoto/util/RestApiClient.java | 21 +++++++++++++++---- .../resources/application-local.properties | 20 +++++++----------- 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/util/RestApiClient.java b/src/main/java/io/mosip/mimoto/util/RestApiClient.java index f7c05ebbb..49dfd30fa 100644 --- a/src/main/java/io/mosip/mimoto/util/RestApiClient.java +++ b/src/main/java/io/mosip/mimoto/util/RestApiClient.java @@ -39,11 +39,17 @@ @Component public class RestApiClient { - /** The logger. */ + /** + * The logger. + */ private Logger logger = LoggerUtil.getLogger(RestApiClient.class); private static final String authorization = "Authorization="; - - /** The builder. */ + private static final String RETRIED = "retry"; + private static final String YES = "yes"; + private static final String NO = "no"; + /** + * The builder. + */ @Autowired @Qualifier("selfTokenRestTemplate") private RestTemplate restTemplate; @@ -91,7 +97,7 @@ public T getApi(URI uri, Class responseType) throws Exception { /** * HTTP GET API - * + * * @param * @param url * @param responseType @@ -142,6 +148,13 @@ public T postApi(String uri, MediaType mediaType, Object requestType, Class< HttpClientErrorException ex = (HttpClientErrorException)e; if (ex.getStatusCode().value() == 401) { System.setProperty("token", ""); + // bearer token renew logic + if (System.getProperty(RETRIED) == null || System.getProperty(RETRIED).equalsIgnoreCase(NO)) { + logger.info("System will to renew the auth token and retry once more."); + System.setProperty(RETRIED, YES); + postApi(uri, mediaType, requestType, responseClass, useBearerToken); + } else + System.setProperty(RETRIED, NO); } } } diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index c14a87e57..061902479 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -1,9 +1,9 @@ # MOSIP -mosipbox.public.url=https://api-internal.dev2.mosip.net -public.internet.url=https://api.dev2.mosip.net -public.url=https://api-internal.dev2.mosip.net -keycloak.internal.url=https://iam.dev2.mosip.net/ +mosipbox.public.url=https://api-internal.dev3.mosip.net +public.internet.url=https://api.dev3.mosip.net +public.url=https://api-internal.dev3.mosip.net +keycloak.internal.url=https://iam.dev3.mosip.net/ # Resident service mosip.resident.base.url=${mosipbox.public.url}/resident/v1 @@ -17,12 +17,8 @@ RESIDENT_CREDENTIAL_REQUEST_STATUS=${RESIDENT_CREDENTIAL_REQUEST}/status RESIDENT_VID=${mosip.resident.base.url}/vid RESIDENT_AUTH_LOCK=${mosip.resident.base.url}/req/auth-lock RESIDENT_AUTH_UNLOCK=${mosip.resident.base.url}/req/auth-unlock -IDP_LINK_TRANSACTION=${public.internet.url}/v1/idp/linked-authorization/link-transaction -IDP_AUTHENTICATE=${public.internet.url}/v1/idp/linked-authorization/authenticate -IDP_CONSENT=${public.internet.url}/v1/idp/linked-authorization/consent -IDP_OTP=${public.internet.url}/v1/idp/linked-authorization/send-otp -BINDING_OTP=${public.internet.url}/v1/idpbinding/binding-otp -WALLET_BINDING=${public.internet.url}/v1/idpbinding/wallet-binding +BINDING_OTP=${public.internet.url}/v1/esignet/binding/binding-otp +WALLET_BINDING=${public.internet.url}/v1/esignet/binding/wallet-binding mosip.authmanager.url=${mosipbox.public.url}/v1/authmanager/authenticate/clientidsecretkey # Mimoto mobileid backend @@ -170,8 +166,8 @@ config.server.file.storage.uri=${mosipbox.public.url}/config/print/mz/develop2-v mosip.iam.adapter.clientid=mpartner-default-mobile # dev #mosip.iam.adapter.clientsecret=0YINDhkf4t2JVend -# dev2 -mosip.iam.adapter.clientsecret=aat6iFT5P8sqeYd2 +# dev3 +mosip.iam.adapter.clientsecret=nD1CevIBri1X0Jzj mosip.iam.adapter.appid=partner mosip.iam.adapter.issuerURL=${mosipbox.public.url}/auth/realms/mosip From f17159afe3666274dc5a51140296905ce738f2a5 Mon Sep 17 00:00:00 2001 From: Monobikash Das Date: Fri, 10 Mar 2023 19:47:26 +0530 Subject: [PATCH 038/860] Added error logger for empty individual id --- .../mosip/mimoto/controller/CredentialShareController.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java b/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java index b37345802..b821ac822 100644 --- a/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java +++ b/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java @@ -10,6 +10,7 @@ import com.google.gson.Gson; import io.mosip.kernel.core.util.JsonUtils; +import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.env.Environment; @@ -115,6 +116,11 @@ public ResponseEntity handleSubscribeEvent(@RequestBody Even @PostMapping(path = "/request", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity request(@RequestBody AppCredentialRequestDTO requestDTO) throws Exception { + + if (StringUtils.isEmpty(requestDTO.getIndividualId())) { + logger.error("Received empty individual id for transaction id - " + requestDTO.getTransactionID()); + } + // Call mosip resident service to issue a new credential RequestWrapper mosipCredentialRequestPayload = new RequestWrapper(); From a161b5b90e9636d4f80e166aa2710458a7b68a6d Mon Sep 17 00:00:00 2001 From: Monobikash Das <43202165+MonobikashDas@users.noreply.github.com> Date: Fri, 17 Mar 2023 12:01:59 +0530 Subject: [PATCH 039/860] added release branch --- .github/workflows/push_trigger.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/push_trigger.yml b/.github/workflows/push_trigger.yml index 45c7ca09e..c833c7dc8 100644 --- a/.github/workflows/push_trigger.yml +++ b/.github/workflows/push_trigger.yml @@ -8,6 +8,7 @@ on: - 1.* - develop - release* + - 0.9 jobs: build: From 0c763dc48b801187fbd14ea72df306f6c3cb74d7 Mon Sep 17 00:00:00 2001 From: Monobikash Das Date: Fri, 17 Mar 2023 16:37:36 +0530 Subject: [PATCH 040/860] #475 : sending partner id and api key in req header --- pom.xml | 2 +- src/main/java/io/mosip/mimoto/util/RestApiClient.java | 8 ++++++++ src/main/resources/application-local.properties | 2 ++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 74c86382b..f373747fb 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ io.mosip mimoto - 0.2.0-SNAPSHOT + 0.9-SNAPSHOT mimoto Mobile server backend supporting Inji. diff --git a/src/main/java/io/mosip/mimoto/util/RestApiClient.java b/src/main/java/io/mosip/mimoto/util/RestApiClient.java index 49dfd30fa..e15070967 100644 --- a/src/main/java/io/mosip/mimoto/util/RestApiClient.java +++ b/src/main/java/io/mosip/mimoto/util/RestApiClient.java @@ -58,6 +58,12 @@ public class RestApiClient { @Qualifier("plainRestTemplate") private RestTemplate plainRestTemplate; + @Value("${wallet.binding.partner.id}") + private String partnerId; + + @Value("${wallet.binding.partner.api.key}") + private String partnerApiKey; + @Value("${mosip.authmanager.client-token-endpoint}") private String authBaseUrl; @@ -185,6 +191,8 @@ private HttpEntity setRequestHeader(Object requestType, MediaType mediaT if (StringUtils.isEmpty(bearerToken)) bearerToken = getBearerToken(); headers.add("Authorization", bearerToken); + headers.add("partner_id", partnerId); + headers.add("partner_api_key", partnerApiKey); } if (requestType != null) { diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 061902479..d04a11e30 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -189,3 +189,5 @@ mosip.iam.adapter.self-token-renewal-enable=true mosip.auth.filter_disable=false mosip.auth.adapter.impl.basepackage=io.mosip.kernel.auth.defaultadapter mosip.kernel.auth.appids.realm.map={prereg:'mosip',ida:'mosip',registrationclient:'mosip',regproc:'mosip',partner:'mosip',resident:'mosip',admin:'mosip',crereq:'mosip',creser:'mosip',datsha:'mosip',idrepo:'mosip'} +wallet.binding.partner.id=mpartner-default-mimotobinding +wallet.binding.partner.api.key=995085 \ No newline at end of file From 65fce4832f94f60f6ce2efba2fd2af0fe2df0cd4 Mon Sep 17 00:00:00 2001 From: Monobikash Das Date: Thu, 23 Mar 2023 19:12:45 +0530 Subject: [PATCH 041/860] #475 : sending partner id and api key in req header --- .../io/mosip/mimoto/util/RestApiClient.java | 4 ++-- .../resources/application-local.properties | 18 +++++++++++------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/util/RestApiClient.java b/src/main/java/io/mosip/mimoto/util/RestApiClient.java index e15070967..a1f6dc5ce 100644 --- a/src/main/java/io/mosip/mimoto/util/RestApiClient.java +++ b/src/main/java/io/mosip/mimoto/util/RestApiClient.java @@ -191,8 +191,8 @@ private HttpEntity setRequestHeader(Object requestType, MediaType mediaT if (StringUtils.isEmpty(bearerToken)) bearerToken = getBearerToken(); headers.add("Authorization", bearerToken); - headers.add("partner_id", partnerId); - headers.add("partner_api_key", partnerApiKey); + headers.add("partner-id", partnerId); + headers.add("partner-api-key", partnerApiKey); } if (requestType != null) { diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index d04a11e30..397090576 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -1,9 +1,9 @@ # MOSIP -mosipbox.public.url=https://api-internal.dev3.mosip.net -public.internet.url=https://api.dev3.mosip.net -public.url=https://api-internal.dev3.mosip.net -keycloak.internal.url=https://iam.dev3.mosip.net/ +mosipbox.public.url=https://api-internal.dev2.mosip.net +public.internet.url=https://api.dev2.mosip.net +public.url=https://api-internal.dev2.mosip.net +keycloak.internal.url=https://iam.dev2.mosip.net/ # Resident service mosip.resident.base.url=${mosipbox.public.url}/resident/v1 @@ -11,7 +11,7 @@ mosip.resident.base.url=${mosipbox.public.url}/resident/v1 RESIDENT_OTP=${mosip.resident.base.url}/req/otp RESIDENT_INDIVIDUALID_OTP=${mosip.resident.base.url}/individualId/otp RESIDENT_AID_GET_INDIVIDUALID=${mosip.resident.base.url}/aid/status -#RESIDENT_INDIVIDUALID_OTP=https://api-internal.dev3.mosip.net/resident/v1/req/individualId/otp +#RESIDENT_INDIVIDUALID_OTP=https://api-internal.dev2.mosip.net/resident/v1/req/individualId/otp RESIDENT_CREDENTIAL_REQUEST=${mosip.resident.base.url}/req/credential RESIDENT_CREDENTIAL_REQUEST_STATUS=${RESIDENT_CREDENTIAL_REQUEST}/status RESIDENT_VID=${mosip.resident.base.url}/vid @@ -167,7 +167,9 @@ mosip.iam.adapter.clientid=mpartner-default-mobile # dev #mosip.iam.adapter.clientsecret=0YINDhkf4t2JVend # dev3 -mosip.iam.adapter.clientsecret=nD1CevIBri1X0Jzj +# mosip.iam.adapter.clientsecret=nD1CevIBri1X0Jzj +# dev2 +mosip.iam.adapter.clientsecret=l22WdJg9Qdrf3B90 mosip.iam.adapter.appid=partner mosip.iam.adapter.issuerURL=${mosipbox.public.url}/auth/realms/mosip @@ -189,5 +191,7 @@ mosip.iam.adapter.self-token-renewal-enable=true mosip.auth.filter_disable=false mosip.auth.adapter.impl.basepackage=io.mosip.kernel.auth.defaultadapter mosip.kernel.auth.appids.realm.map={prereg:'mosip',ida:'mosip',registrationclient:'mosip',regproc:'mosip',partner:'mosip',resident:'mosip',admin:'mosip',crereq:'mosip',creser:'mosip',datsha:'mosip',idrepo:'mosip'} +#wallet.binding.partner.id=mpartner-default-keybindingtoken +#wallet.binding.partner.api.key=Aci9jg28B8mO_LDfDXo3ZTp5_HKgEMun2tYyHCa1e8k wallet.binding.partner.id=mpartner-default-mimotobinding -wallet.binding.partner.api.key=995085 \ No newline at end of file +wallet.binding.partner.api.key=14378 \ No newline at end of file From 888ab001a00e69b43bd200ed8732d7dff1090fad Mon Sep 17 00:00:00 2001 From: Monobikash Das Date: Mon, 27 Mar 2023 13:25:25 +0530 Subject: [PATCH 042/860] #475 : sending partner id and api key in req header --- .../dto/mimoto/WalletBindingInternalResponseDto.java | 2 +- src/main/java/io/mosip/mimoto/util/JoseUtil.java | 2 +- src/main/resources/application-local.properties | 12 +++++++----- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInternalResponseDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInternalResponseDto.java index 164831c8a..5559b1f1b 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInternalResponseDto.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInternalResponseDto.java @@ -5,6 +5,6 @@ @Data public class WalletBindingInternalResponseDto { private String certificate; - private String encryptedWalletBindingId; + private String walletUserId; private String expireDateTime; } diff --git a/src/main/java/io/mosip/mimoto/util/JoseUtil.java b/src/main/java/io/mosip/mimoto/util/JoseUtil.java index fc5e486a9..9516a40cc 100644 --- a/src/main/java/io/mosip/mimoto/util/JoseUtil.java +++ b/src/main/java/io/mosip/mimoto/util/JoseUtil.java @@ -104,7 +104,7 @@ public ResponseWrapper addThumbprintAndKeyId(ResponseW // map fields with thumbprint and key id WalletBindingResponseDto response = new WalletBindingResponseDto(); response.setCertificate(resp.getCertificate()); - response.setEncryptedWalletBindingId(resp.getEncryptedWalletBindingId()); + response.setEncryptedWalletBindingId(resp.getWalletUserId()); response.setExpireDateTime(resp.getExpireDateTime()); response.setKeyId(jwSign.getKeyIdHeaderValue()); response.setThumbprint(jwSign.getX509CertSha256ThumbprintHeaderValue()); diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 397090576..52477743f 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -120,7 +120,7 @@ mosip.mandatory-languages=eng #----------------------- CBEFF Util-------------------------------------------------- # Cbeff URL where the files will be stored in git, change it accordingly in case of change of storage location. # mosip.kernel.xsdstorage-uri=${spring.cloud.config.uri}/${spring.application.name}/${spring.profiles.active}/${spring.cloud.config.label}/ -mosip.kernel.xsdstorage-uri=${mosipbox.public.url}/config/print/mz/develop2-v2/ +mosip.kernel.xsdstorage-uri=https://raw.githubusercontent.com/mosip/mosip-config/qa-1201-B2/ # Cbeff XSD file name in config server mosip.kernel.xsdfile=mosip-cbeff.xsd @@ -170,6 +170,8 @@ mosip.iam.adapter.clientid=mpartner-default-mobile # mosip.iam.adapter.clientsecret=nD1CevIBri1X0Jzj # dev2 mosip.iam.adapter.clientsecret=l22WdJg9Qdrf3B90 +# qa1201 +# mosip.iam.adapter.clientsecret=KXGkd7XMbsoxCUz9 mosip.iam.adapter.appid=partner mosip.iam.adapter.issuerURL=${mosipbox.public.url}/auth/realms/mosip @@ -191,7 +193,7 @@ mosip.iam.adapter.self-token-renewal-enable=true mosip.auth.filter_disable=false mosip.auth.adapter.impl.basepackage=io.mosip.kernel.auth.defaultadapter mosip.kernel.auth.appids.realm.map={prereg:'mosip',ida:'mosip',registrationclient:'mosip',regproc:'mosip',partner:'mosip',resident:'mosip',admin:'mosip',crereq:'mosip',creser:'mosip',datsha:'mosip',idrepo:'mosip'} -#wallet.binding.partner.id=mpartner-default-keybindingtoken -#wallet.binding.partner.api.key=Aci9jg28B8mO_LDfDXo3ZTp5_HKgEMun2tYyHCa1e8k -wallet.binding.partner.id=mpartner-default-mimotobinding -wallet.binding.partner.api.key=14378 \ No newline at end of file +wallet.binding.partner.id=mpartner-default-keybindingtoken +wallet.binding.partner.api.key=Aci9jg28B8mO_LDfDXo3ZTp5_HKgEMun2tYyHCa1e8k +#wallet.binding.partner.id=mpartner-default-mimotobinding +#wallet.binding.partner.api.key=14378 \ No newline at end of file From e6faeaf30fd959ae8d8f98047679a6e08859ffb4 Mon Sep 17 00:00:00 2001 From: Monobikash Das Date: Tue, 4 Apr 2023 15:35:48 +0530 Subject: [PATCH 043/860] #596 : auth token expiry renew and changes in 0.9 branch --- .github/workflows/push_trigger.yml | 1 - pom.xml | 2 +- src/main/java/io/mosip/mimoto/util/RestApiClient.java | 11 ++++------- 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/.github/workflows/push_trigger.yml b/.github/workflows/push_trigger.yml index c833c7dc8..45c7ca09e 100644 --- a/.github/workflows/push_trigger.yml +++ b/.github/workflows/push_trigger.yml @@ -8,7 +8,6 @@ on: - 1.* - develop - release* - - 0.9 jobs: build: diff --git a/pom.xml b/pom.xml index c3ff712bc..463bd3be4 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ io.mosip mimoto - 0.9-SNAPSHOT + 0.2.0-SNAPSHOT mimoto Mobile server backend supporting Inji. diff --git a/src/main/java/io/mosip/mimoto/util/RestApiClient.java b/src/main/java/io/mosip/mimoto/util/RestApiClient.java index a1f6dc5ce..7660d00bf 100644 --- a/src/main/java/io/mosip/mimoto/util/RestApiClient.java +++ b/src/main/java/io/mosip/mimoto/util/RestApiClient.java @@ -153,14 +153,11 @@ public T postApi(String uri, MediaType mediaType, Object requestType, Class< if (e instanceof HttpClientErrorException) { HttpClientErrorException ex = (HttpClientErrorException)e; if (ex.getStatusCode().value() == 401) { + // bearer token renew logic. Set token as empty so that it will auto-renew System.setProperty("token", ""); - // bearer token renew logic - if (System.getProperty(RETRIED) == null || System.getProperty(RETRIED).equalsIgnoreCase(NO)) { - logger.info("System will to renew the auth token and retry once more."); - System.setProperty(RETRIED, YES); - postApi(uri, mediaType, requestType, responseClass, useBearerToken); - } else - System.setProperty(RETRIED, NO); + // try one more time to pass existing call + result = (T) plainRestTemplate.postForObject( + uri, setRequestHeader(requestType, mediaType, useBearerToken), responseClass); } } } From a51fa73513276518aca1858c71a0ffd3481e1847 Mon Sep 17 00:00:00 2001 From: techno-243 Date: Fri, 12 May 2023 13:39:07 +0530 Subject: [PATCH 044/860] [MOSIP-27194] Added helm-chart and deployment script for Mimoto in mimoto repo --- .github/workflows/release_chart.yml | 24 + helm/mimoto/.gitignore | 1 + helm/mimoto/.helmignore | 21 + helm/mimoto/Chart.yaml | 20 + helm/mimoto/README.md | 11 + helm/mimoto/copy_cm.sh | 10 + helm/mimoto/copy_cm_func.sh | 29 ++ helm/mimoto/copy_secrets.sh | 7 + helm/mimoto/delete.sh | 24 + helm/mimoto/install.sh | 45 ++ helm/mimoto/restart.sh | 25 + helm/mimoto/templates/NOTES.txt | 1 + helm/mimoto/templates/_helpers.tpl | 60 +++ helm/mimoto/templates/clusterrolebinding.yaml | 19 + helm/mimoto/templates/deployment.yaml | 144 ++++++ helm/mimoto/templates/extra-list.yaml | 4 + helm/mimoto/templates/pvc.yaml | 32 ++ helm/mimoto/templates/service-account.yaml | 12 + helm/mimoto/templates/service.yaml | 28 ++ helm/mimoto/templates/servicemonitor.yaml | 36 ++ helm/mimoto/templates/virtualservice.yaml | 34 ++ helm/mimoto/values.yaml | 430 ++++++++++++++++++ partner-onboarder/README.md | 33 ++ partner-onboarder/copy_cm.sh | 10 + partner-onboarder/copy_cm_func.sh | 33 ++ partner-onboarder/copy_secrets.sh | 10 + partner-onboarder/delete.sh | 28 ++ partner-onboarder/install.sh | 66 +++ partner-onboarder/values.yaml | 22 + 29 files changed, 1219 insertions(+) create mode 100644 .github/workflows/release_chart.yml create mode 100644 helm/mimoto/.gitignore create mode 100644 helm/mimoto/.helmignore create mode 100644 helm/mimoto/Chart.yaml create mode 100644 helm/mimoto/README.md create mode 100755 helm/mimoto/copy_cm.sh create mode 100755 helm/mimoto/copy_cm_func.sh create mode 100755 helm/mimoto/copy_secrets.sh create mode 100755 helm/mimoto/delete.sh create mode 100755 helm/mimoto/install.sh create mode 100755 helm/mimoto/restart.sh create mode 100644 helm/mimoto/templates/NOTES.txt create mode 100644 helm/mimoto/templates/_helpers.tpl create mode 100644 helm/mimoto/templates/clusterrolebinding.yaml create mode 100644 helm/mimoto/templates/deployment.yaml create mode 100644 helm/mimoto/templates/extra-list.yaml create mode 100644 helm/mimoto/templates/pvc.yaml create mode 100644 helm/mimoto/templates/service-account.yaml create mode 100644 helm/mimoto/templates/service.yaml create mode 100644 helm/mimoto/templates/servicemonitor.yaml create mode 100644 helm/mimoto/templates/virtualservice.yaml create mode 100644 helm/mimoto/values.yaml create mode 100644 partner-onboarder/README.md create mode 100755 partner-onboarder/copy_cm.sh create mode 100755 partner-onboarder/copy_cm_func.sh create mode 100755 partner-onboarder/copy_secrets.sh create mode 100755 partner-onboarder/delete.sh create mode 100755 partner-onboarder/install.sh create mode 100644 partner-onboarder/values.yaml diff --git a/.github/workflows/release_chart.yml b/.github/workflows/release_chart.yml new file mode 100644 index 000000000..4028b419a --- /dev/null +++ b/.github/workflows/release_chart.yml @@ -0,0 +1,24 @@ +name: release-chart +on: + push: + branches: + - master + - 1.* + - 0.* + - develop + paths: + - 'helm/**' + +jobs: + release-chart: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Publish Helm chart + uses: stefanprodan/helm-gh-pages@v1.7.0 + with: + token: ${{ secrets.ACTION_PAT }} + charts_dir: ./helm + charts_url: https://mosip.github.io/mosip-helm + repository: mosip-helm + branch: gh-pages \ No newline at end of file diff --git a/helm/mimoto/.gitignore b/helm/mimoto/.gitignore new file mode 100644 index 000000000..ee3892e87 --- /dev/null +++ b/helm/mimoto/.gitignore @@ -0,0 +1 @@ +charts/ diff --git a/helm/mimoto/.helmignore b/helm/mimoto/.helmignore new file mode 100644 index 000000000..f0c131944 --- /dev/null +++ b/helm/mimoto/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/helm/mimoto/Chart.yaml b/helm/mimoto/Chart.yaml new file mode 100644 index 000000000..adffd93de --- /dev/null +++ b/helm/mimoto/Chart.yaml @@ -0,0 +1,20 @@ +apiVersion: v2 +name: mimoto +description: A Helm chart for MOSIP mimoto Application +type: application +version: 12.0.2 +appVersion: "" +dependencies: + - name: common + repository: https://charts.bitnami.com/bitnami + tags: + - bitnami-common + version: 1.x.x +home: https://mosip.io +keywords: + - mosip + - mimoto + - mimoto +maintainers: + - email: info@mosip.io + name: MOSIP diff --git a/helm/mimoto/README.md b/helm/mimoto/README.md new file mode 100644 index 000000000..360296351 --- /dev/null +++ b/helm/mimoto/README.md @@ -0,0 +1,11 @@ +# mimoto Application + +Helm chart for installing MOSIP mimoto Application. + +## TL;DR + +```console +$ helm repo add mosip https://mosip.github.io +$ helm install my-release mosip/mimoto +``` + diff --git a/helm/mimoto/copy_cm.sh b/helm/mimoto/copy_cm.sh new file mode 100755 index 000000000..c63f4b25b --- /dev/null +++ b/helm/mimoto/copy_cm.sh @@ -0,0 +1,10 @@ +#!/bin/bash +# Copy configmaps from other namespaces +# DST_NS: Destination namespace + +COPY_UTIL=./copy_cm_func.sh +DST_NS=mimoto + +$COPY_UTIL configmap global default $DST_NS +$COPY_UTIL configmap artifactory-share artifactory $DST_NS +$COPY_UTIL configmap config-server-share config-server $DST_NS \ No newline at end of file diff --git a/helm/mimoto/copy_cm_func.sh b/helm/mimoto/copy_cm_func.sh new file mode 100755 index 000000000..0ca6a7bf0 --- /dev/null +++ b/helm/mimoto/copy_cm_func.sh @@ -0,0 +1,29 @@ +#!/bin/sh +# Copy configmap and secret from one namespace to another. +# ./copy_cm_func.sh [name] +# Parameters: +# resource: configmap|secret +# name: Optional new name of the configmap or secret in destination namespace. This may be needed if there is +# clash of names + +if [ $1 = "configmap" ] +then + RESOURCE=configmap +elif [ $1 = "secret" ] +then + RESOURCE=secret +else + echo "Incorrect resource $1. Exiting.." + exit 1 +fi + + +if [ $# -ge 5 ] +then + kubectl -n $4 delete --ignore-not-found=true $RESOURCE $5 + kubectl -n $3 get $RESOURCE $2 -o yaml | sed "s/namespace: $3/namespace: $4/g" | sed "s/name: $2/name: $5/g" | kubectl -n $4 create -f - +else + kubectl -n $4 delete --ignore-not-found=true $RESOURCE $2 + kubectl -n $3 get $RESOURCE $2 -o yaml | sed "s/namespace: $3/namespace: $4/g" | kubectl -n $4 create -f - +fi + diff --git a/helm/mimoto/copy_secrets.sh b/helm/mimoto/copy_secrets.sh new file mode 100755 index 000000000..9eab515aa --- /dev/null +++ b/helm/mimoto/copy_secrets.sh @@ -0,0 +1,7 @@ +#!/bin/bash +# Copy secrets from other namespaces +# DST_NS: Destination namespace +COPY_UTIL=./copy_cm_func.sh +DST_NS=mimoto + +$COPY_UTIL secret keycloak-client-secrets keycloak $DST_NS \ No newline at end of file diff --git a/helm/mimoto/delete.sh b/helm/mimoto/delete.sh new file mode 100755 index 000000000..b1fec08a8 --- /dev/null +++ b/helm/mimoto/delete.sh @@ -0,0 +1,24 @@ +#!/bin/bash +# Uninstalls mimoto +function deleting_mimoto() { + NS=mimoto + while true; do + read -p "Are you sure you want to delete mimoto helm chart?(Y/n) " yn + if [ $yn = "Y" ] + then + helm -n $NS delete mimoto + break + else + break + fi + done + return 0 +} + +# set commands for error handling. +set -e +set -o errexit ## set -e : exit the script if any statement returns a non-true return value +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errtrace # trace ERR through 'time command' and other functions +set -o pipefail # trace ERR through pipes +deleting_mimoto # calling function \ No newline at end of file diff --git a/helm/mimoto/install.sh b/helm/mimoto/install.sh new file mode 100755 index 000000000..48fe907e2 --- /dev/null +++ b/helm/mimoto/install.sh @@ -0,0 +1,45 @@ +#!/bin/bash +# Installs mimoto service +## Usage: ./install.sh [kubeconfig] + +if [ $# -ge 1 ] ; then + export KUBECONFIG=$1 +fi + +NS=mimoto +MIMOTO_CHART_VERSION=12.0.2 + +echo Create $NS namespace +kubectl create ns $NS + +function installing_mimoto() { + echo Istio label + kubectl label ns $NS istio-injection=enabled --overwrite + helm repo add mosip https://mosip.github.io/mosip-helm + helm repo update + + echo Copy configmaps + sed -i 's/\r$//' copy_cm.sh + ./copy_cm.sh + + echo Copy secrets + sed -i 's/\r$//' copy_secrets.sh + ./copy_secrets.sh + + echo Installing mimoto + helm -n $NS install mimoto mosip/mimoto --version $MIMOTO_CHART_VERSION + + kubectl -n $NS get deploy -o name | xargs -n1 -t kubectl -n $NS rollout status + + echo Installed mimoto + + return 0 +} + +# set commands for error handling. +set -e +set -o errexit ## set -e : exit the script if any statement returns a non-true return value +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errtrace # trace ERR through 'time command' and other functions +set -o pipefail # trace ERR through pipes +installing_mimoto # calling function \ No newline at end of file diff --git a/helm/mimoto/restart.sh b/helm/mimoto/restart.sh new file mode 100755 index 000000000..35dda01d7 --- /dev/null +++ b/helm/mimoto/restart.sh @@ -0,0 +1,25 @@ +#!/bin/bash +# Restart the mimoto service +## Usage: ./restart.sh [kubeconfig] + +if [ $# -ge 1 ] ; then + export KUBECONFIG=$1 +fi + +function Restarting_mimoto() { + NS=mimoto + kubectl -n $NS rollout restart deploy + + kubectl -n $NS get deploy -o name | xargs -n1 -t kubectl -n $NS rollout status + + echo Restarted mimoto service + return 0 +} + +# set commands for error handling. +set -e +set -o errexit ## set -e : exit the script if any statement returns a non-true return value +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errtrace # trace ERR through 'time command' and other functions +set -o pipefail # trace ERR through pipes +Restarting_mimoto # calling function \ No newline at end of file diff --git a/helm/mimoto/templates/NOTES.txt b/helm/mimoto/templates/NOTES.txt new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/helm/mimoto/templates/NOTES.txt @@ -0,0 +1 @@ + diff --git a/helm/mimoto/templates/_helpers.tpl b/helm/mimoto/templates/_helpers.tpl new file mode 100644 index 000000000..2c6d12dea --- /dev/null +++ b/helm/mimoto/templates/_helpers.tpl @@ -0,0 +1,60 @@ +{{/* +Return the proper image name +*/}} +{{- define "mimoto.image" -}} +{{ include "common.images.image" (dict "imageRoot" .Values.image "global" .Values.global) }} +{{- end -}} + +{{/* +Return the proper image name (for the init container volume-permissions image) +*/}} +{{- define "mimoto.volumePermissions.image" -}} +{{- include "common.images.image" ( dict "imageRoot" .Values.volumePermissions.image "global" .Values.global ) -}} +{{- end -}} + +{{/* +Return the proper Docker Image Registry Secret Names +*/}} +{{- define "mimoto.imagePullSecrets" -}} +{{- include "common.images.pullSecrets" (dict "images" (list .Values.image .Values.volumePermissions.image) "global" .Values.global) -}} +{{- end -}} + +{{/* +Create the name of the service account to use +*/}} +{{- define "mimoto.serviceAccountName" -}} +{{- if .Values.serviceAccount.create -}} + {{ default (printf "%s" (include "common.names.fullname" .)) .Values.serviceAccount.name }} +{{- else -}} + {{ default "default" .Values.serviceAccount.name }} +{{- end -}} +{{- end -}} + +{{/* +Compile all warnings into a single message. +*/}} +{{- define "mimoto.validateValues" -}} +{{- $messages := list -}} +{{- $messages := append $messages (include "mimoto.validateValues.foo" .) -}} +{{- $messages := append $messages (include "mimoto.validateValues.bar" .) -}} +{{- $messages := without $messages "" -}} +{{- $message := join "\n" $messages -}} + +{{- if $message -}} +{{- printf "\nVALUES VALIDATION:\n%s" $message -}} +{{- end -}} +{{- end -}} + +{{/* +Return podAnnotations +*/}} +{{- define "mimoto.podAnnotations" -}} +{{- if .Values.podAnnotations }} +{{ include "common.tplvalues.render" (dict "value" .Values.podAnnotations "context" $) }} +{{- end }} +{{- if and .Values.metrics.enabled .Values.metrics.podAnnotations }} +{{ include "common.tplvalues.render" (dict "value" .Values.metrics.podAnnotations "context" $) }} +{{- end }} +{{- end -}} + + diff --git a/helm/mimoto/templates/clusterrolebinding.yaml b/helm/mimoto/templates/clusterrolebinding.yaml new file mode 100644 index 000000000..a00045072 --- /dev/null +++ b/helm/mimoto/templates/clusterrolebinding.yaml @@ -0,0 +1,19 @@ +kind: ClusterRoleBinding +apiVersion: {{ include "common.capabilities.rbac.apiVersion" . }} +metadata: + labels: {{- include "common.labels.standard" . | nindent 4 }} + {{- if .Values.commonLabels }} + {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} + {{- end }} + name: {{ template "common.names.fullname" . }} + {{- if .Values.commonAnnotations }} + annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} + {{- end }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: {{ template "common.names.fullname" . }} +subjects: + - kind: ServiceAccount + name: {{ template "mimoto.serviceAccountName" . }} + namespace: {{ .Release.Namespace }} diff --git a/helm/mimoto/templates/deployment.yaml b/helm/mimoto/templates/deployment.yaml new file mode 100644 index 000000000..3309ede45 --- /dev/null +++ b/helm/mimoto/templates/deployment.yaml @@ -0,0 +1,144 @@ +apiVersion: {{ include "common.capabilities.deployment.apiVersion" . }} +kind: Deployment +metadata: + labels: {{- include "common.labels.standard" . | nindent 4 }} + {{- if .Values.commonLabels }} + {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} + {{- end }} + name: {{ template "common.names.fullname" . }} + annotations: + {{- if .Values.commonAnnotations }} + {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} + {{- end }} +spec: + replicas: {{ .Values.replicaCount }} + {{- if .Values.updateStrategy }} + strategy: {{- toYaml .Values.updateStrategy | nindent 4 }} + {{- end }} + selector: + matchLabels: {{- include "common.labels.matchLabels" . | nindent 6 }} + template: + metadata: + annotations: + {{- if or .Values.podAnnotations .Values.metrics.enabled }} + {{- include "mimoto.podAnnotations" . | nindent 8 }} + {{- end }} + labels: {{- include "common.labels.standard" . | nindent 8 }} + {{- if .Values.podLabels }} + {{- include "common.tplvalues.render" (dict "value" .Values.podLabels "context" $) | nindent 8 }} + {{- end }} + spec: + serviceAccountName: {{ template "mimoto.serviceAccountName" . }} + {{- include "mimoto.imagePullSecrets" . | nindent 6 }} + {{- if .Values.hostAliases }} + hostAliases: {{- include "common.tplvalues.render" (dict "value" .Values.hostAliases "context" $) | nindent 8 }} + {{- end }} + {{- if .Values.affinity }} + affinity: {{- include "common.tplvalues.render" ( dict "value" .Values.affinity "context" $) | nindent 8 }} + {{- else }} + affinity: + podAffinity: {{- include "common.affinities.pods" (dict "type" .Values.podAffinityPreset "context" $) | nindent 10 }} + podAntiAffinity: {{- include "common.affinities.pods" (dict "type" .Values.podAntiAffinityPreset "context" $) | nindent 10 }} + nodeAffinity: {{- include "common.affinities.nodes" (dict "type" .Values.nodeAffinityPreset.type "key" .Values.nodeAffinityPreset.key "values" .Values.nodeAffinityPreset.values) | nindent 10 }} + {{- end }} + {{- if .Values.nodeSelector }} + nodeSelector: {{- include "common.tplvalues.render" ( dict "value" .Values.nodeSelector "context" $) | nindent 8 }} + {{- end }} + {{- if .Values.tolerations }} + tolerations: {{- include "common.tplvalues.render" (dict "value" .Values.tolerations "context" .) | nindent 8 }} + {{- end }} + {{- if .Values.priorityClassName }} + priorityClassName: {{ .Values.priorityClassName | quote }} + {{- end }} + {{- if .Values.podSecurityContext.enabled }} + securityContext: {{- omit .Values.podSecurityContext "enabled" | toYaml | nindent 8 }} + {{- end }} + initContainers: + {{- if and .Values.volumePermissions.enabled .Values.persistence.enabled }} + - name: volume-permissions + image: {{ include "mimoto.volumePermissions.image" . }} + imagePullPolicy: {{ .Values.volumePermissions.image.pullPolicy | quote }} + command: + - %%commands%% + securityContext: + runAsUser: 0 + {{- if .Values.volumePermissions.resources }} + resources: {{- toYaml .Values.volumePermissions.resources | nindent 12 }} + {{- end }} + volumeMounts: + - name: foo + mountPath: bar + {{- end }} + {{- if .Values.initContainers }} + {{- include "common.tplvalues.render" (dict "value" .Values.initContainers "context" $) | nindent 8 }} + {{- end }} + containers: + - name: mimoto + image: {{ template "mimoto.image" . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + {{- if .Values.lifecycleHooks }} + lifecycle: {{- include "common.tplvalues.render" (dict "value" .Values.lifecycleHooks "context" $) | nindent 12 }} + {{- end }} + {{- if .Values.containerSecurityContext.enabled }} + securityContext: {{- omit .Values.containerSecurityContext "enabled" | toYaml | nindent 12 }} + {{- end }} + {{- if .Values.command }} + command: {{- include "common.tplvalues.render" (dict "value" .Values.command "context" $) | nindent 12 }} + {{- end }} + {{- if .Values.args }} + args: {{- include "common.tplvalues.render" (dict "value" .Values.args "context" $) | nindent 12 }} + {{- end }} + env: + - name: container_user + value: {{ .Values.containerSecurityContext.runAsUser }} + - name: JDK_JAVA_OPTIONS + value: {{ .Values.additionalResources.javaOpts }} + {{- if .Values.extraEnvVars }} + {{- include "common.tplvalues.render" (dict "value" .Values.extraEnvVars "context" $) | nindent 12 }} + {{- end }} + envFrom: + {{- if .Values.extraEnvVarsCM }} + {{- range .Values.extraEnvVarsCM }} + - configMapRef: + name: {{ . }} + {{- end }} + {{- end }} + {{- if .Values.extraEnvVarsSecret }} + {{- range .Values.extraEnvVarsSecret }} + - secretRef: + name: {{ . }} + {{- end }} + {{- end }} + volumeMounts: + - name: landing-folder + mountPath: {{ .Values.persistence.mountDir }} + ports: [] + {{- if .Values.resources }} + resources: {{- toYaml .Values.resources | nindent 12 }} + {{- end }} + {{- if .Values.startupProbe.enabled }} + startupProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.startupProbe "enabled") "context" $) | nindent 12 }} + {{- else if .Values.customStartupProbe }} + startupProbe: {{- include "common.tplvalues.render" (dict "value" .Values.customStartupProbe "context" $) | nindent 12 }} + {{- end }} + {{- if .Values.livenessProbe.enabled }} + livenessProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.livenessProbe "enabled") "context" $) | nindent 12 }} + {{- else if .Values.customLivenessProbe }} + livenessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.customLivenessProbe "context" $) | nindent 12 }} + {{- end }} + {{- if .Values.readinessProbe.enabled }} + readinessProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.readinessProbe "enabled") "context" $) | nindent 12 }} + {{- else if .Values.customReadinessProbe }} + readinessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.customReadinessProbe "context" $) | nindent 12 }} + {{- end }} + {{- if .Values.sidecars }} + {{- include "common.tplvalues.render" ( dict "value" .Values.sidecars "context" $) | nindent 8 }} + {{- end }} + volumes: + - name: landing-folder + {{- if .Values.persistence.enabled }} + persistentVolumeClaim: + claimName: {{ .Values.persistence.existingClaim | default (include "common.names.fullname" .) }} + {{- else }} + emptyDir: {} + {{ end }} diff --git a/helm/mimoto/templates/extra-list.yaml b/helm/mimoto/templates/extra-list.yaml new file mode 100644 index 000000000..9ac65f9e1 --- /dev/null +++ b/helm/mimoto/templates/extra-list.yaml @@ -0,0 +1,4 @@ +{{- range .Values.extraDeploy }} +--- +{{ include "common.tplvalues.render" (dict "value" . "context" $) }} +{{- end }} diff --git a/helm/mimoto/templates/pvc.yaml b/helm/mimoto/templates/pvc.yaml new file mode 100644 index 000000000..7db9bc8a7 --- /dev/null +++ b/helm/mimoto/templates/pvc.yaml @@ -0,0 +1,32 @@ +{{- if and .Values.persistence.enabled (not .Values.persistence.existingClaim) }} +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: {{ include "common.names.fullname" . }} + namespace: {{ .Release.Namespace | quote }} + labels: {{- include "common.labels.standard" . | nindent 4 }} + {{- if .Values.commonLabels }} + {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} + {{- end }} + annotations: + {{- if .Values.commonAnnotations }} + {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} + {{- end }} + "helm.sh/resource-policy": keep +spec: + accessModes: + {{- if not (empty .Values.persistence.accessModes) }} + {{- range .Values.persistence.accessModes }} + - {{ . | quote }} + {{- end }} + {{- else }} + - {{ .Values.persistence.accessMode | quote }} + {{- end }} + resources: + requests: + storage: {{ .Values.persistence.size | quote }} + {{- include "common.storage.class" (dict "persistence" .Values.persistence "global" .Values.global) | nindent 2 }} + {{- if .Values.persistence.dataSource }} + dataSource: {{- include "common.tplvalues.render" (dict "value" .Values.persistence.dataSource "context" $) | nindent 4 }} + {{- end }} +{{- end }} diff --git a/helm/mimoto/templates/service-account.yaml b/helm/mimoto/templates/service-account.yaml new file mode 100644 index 000000000..ac200e1d6 --- /dev/null +++ b/helm/mimoto/templates/service-account.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: {{- include "common.labels.standard" . | nindent 4 }} + {{- if .Values.commonLabels }} + {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} + {{- end }} + name: {{ template "mimoto.serviceAccountName" . }} + {{- if .Values.commonAnnotations }} + annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} + {{- end }} + namespace: {{ .Release.Namespace }} diff --git a/helm/mimoto/templates/service.yaml b/helm/mimoto/templates/service.yaml new file mode 100644 index 000000000..a0bd61a15 --- /dev/null +++ b/helm/mimoto/templates/service.yaml @@ -0,0 +1,28 @@ +apiVersion: v1 +kind: Service +metadata: + labels: {{- include "common.labels.standard" . | nindent 4 }} + {{- if .Values.commonLabels }} + {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} + {{- end }} + name: {{ template "common.names.fullname" . }} + annotations: + {{- if .Values.commonAnnotations }} + {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} + {{- end }} +spec: + type: {{ .Values.service.type }} + {{- if (or (eq .Values.service.type "LoadBalancer") (eq .Values.service.type "NodePort")) }} + externalTrafficPolicy: {{ .Values.service.externalTrafficPolicy | quote }} + {{- end }} + {{ if eq .Values.service.type "LoadBalancer" }} + loadBalancerSourceRanges: {{ .Values.service.loadBalancerSourceRanges }} + {{ end }} + {{- if (and (eq .Values.service.type "LoadBalancer") (not (empty .Values.service.loadBalancerIP))) }} + loadBalancerIP: {{ .Values.service.loadBalancerIP }} + {{- end }} + ports: + - port: {{ .Values.service.port }} + protocol: TCP + targetPort: {{ .Values.service.containerPort }} + selector: {{- include "common.labels.matchLabels" . | nindent 4 }} diff --git a/helm/mimoto/templates/servicemonitor.yaml b/helm/mimoto/templates/servicemonitor.yaml new file mode 100644 index 000000000..027c8ac04 --- /dev/null +++ b/helm/mimoto/templates/servicemonitor.yaml @@ -0,0 +1,36 @@ +{{- if and .Values.metrics.enabled .Values.metrics.serviceMonitor.enabled }} +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + name: {{ template "common.names.fullname" . }} + {{- if .Values.metrics.serviceMonitor.namespace }} + namespace: {{ .Values.metrics.serviceMonitor.namespace }} + {{- else }} + namespace: {{ .Release.Namespace | quote }} + {{- end }} + labels: {{- include "common.labels.standard" . | nindent 4 }} + {{- if .Values.metrics.serviceMonitor.additionalLabels }} + {{- include "common.tplvalues.render" (dict "value" .Values.metrics.serviceMonitor.additionalLabels "context" $) | nindent 4 }} + {{- end }} +spec: + endpoints: + - targetPort: {{ .Values.service.containerPort }} + path: {{ .Values.metrics.endpointPath }} + {{- if .Values.metrics.serviceMonitor.interval }} + interval: {{ .Values.metrics.serviceMonitor.interval }} + {{- end }} + {{- if .Values.metrics.serviceMonitor.scrapeTimeout }} + scrapeTimeout: {{ .Values.metrics.serviceMonitor.scrapeTimeout }} + {{- end }} + {{- if .Values.metrics.serviceMonitor.honorLabels }} + honorLabels: {{ .Values.metrics.serviceMonitor.honorLabels }} + {{- end }} + {{- if .Values.metrics.serviceMonitor.relabellings }} + metricRelabelings: {{- toYaml .Values.metrics.serviceMonitor.relabellings | nindent 6 }} + {{- end }} + namespaceSelector: + matchNames: + - {{ .Release.Namespace | quote }} + selector: + matchLabels: {{- include "common.labels.matchLabels" . | nindent 6 }} +{{- end }} diff --git a/helm/mimoto/templates/virtualservice.yaml b/helm/mimoto/templates/virtualservice.yaml new file mode 100644 index 000000000..7b5948fac --- /dev/null +++ b/helm/mimoto/templates/virtualservice.yaml @@ -0,0 +1,34 @@ +{{- if .Values.istio.enabled }} +apiVersion: networking.istio.io/v1alpha3 +kind: VirtualService +metadata: + name: {{ template "common.names.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: {{- include "common.labels.standard" . | nindent 4 }} + {{- if .Values.commonLabels }} + {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} + {{- end }} + {{- if .Values.commonAnnotations }} + annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} + {{- end }} +spec: + hosts: + - "*" + gateways: + {{- include "common.tplvalues.render" ( dict "value" .Values.istio.gateways "context" $ ) | nindent 4 }} + http: + - match: + - uri: + prefix: {{ .Values.istio.prefix }} + rewrite: + uri: {{ .Values.istio.rewrite }} + route: + - destination: + host: {{ template "common.names.fullname" . }} + port: + number: {{ .Values.service.port }} + headers: + request: + set: + x-forwarded-proto: https +{{- end }} diff --git a/helm/mimoto/values.yaml b/helm/mimoto/values.yaml new file mode 100644 index 000000000..2ed0664b3 --- /dev/null +++ b/helm/mimoto/values.yaml @@ -0,0 +1,430 @@ +## Global Docker image parameters +## Please, note that this will override the image parameters, including dependencies, configured to use the global value +## Current available global Docker image parameters: imageRegistry and imagePullSecrets +## +# global: +# imageRegistry: myRegistryName +# imagePullSecrets: +# - myRegistryKeySecretName +# storageClass: myStorageClass + +## Add labels to all the deployed resources +## +commonLabels: + app.kubernetes.io/component: mosip + +## Add annotations to all the deployed resources +## +commonAnnotations: {} + +## Kubernetes Cluster Domain +## +clusterDomain: cluster.local + +## Extra objects to deploy (value evaluated as a template) +## +extraDeploy: [] + +## Number of nodes +## +replicaCount: 1 + +service: + type: ClusterIP + port: 80 + containerPort: 8088 + ## loadBalancerIP for the SuiteCRM Service (optional, cloud specific) + ## ref: http://kubernetes.io/docs/user-guide/services/#type-loadbalancer + ## + ## loadBalancerIP: + ## + ## nodePorts: + ## http: + ## https: + ## + + nodePorts: + http: "" + https: "" + ## Enable client source IP preservation + ## ref http://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip + ## + externalTrafficPolicy: Cluster + +image: + registry: docker.io + repository: mosipqa/mimoto + tag: develop + ## Specify a imagePullPolicy + ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' + ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images + ## + pullPolicy: Always + ## Optionally specify an array of imagePullSecrets. + ## Secrets must be manually created in the namespace. + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ + ## + # pullSecrets: + # - myRegistryKeySecretName + +## Configure extra options for liveness and readiness probes +## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#configure-probes +## +## TODO: enable probes once health urls are available + +startupProbe: + enabled: true + httpGet: + path: /v1/mimoto/actuator/health + port: 8088 + initialDelaySeconds: 0 + periodSeconds: 10 + timeoutSeconds: 5 + failureThreshold: 30 + successThreshold: 1 + +livenessProbe: + enabled: true + httpGet: + path: /v1/mimoto/actuator/health + port: 8088 + initialDelaySeconds: 120 + periodSeconds: 10 + timeoutSeconds: 5 + failureThreshold: 6 + successThreshold: 1 + +readinessProbe: + enabled: true + httpGet: + path: /v1/mimoto/actuator/health + port: 8088 + initialDelaySeconds: 30 + periodSeconds: 10 + timeoutSeconds: 5 + failureThreshold: 6 + successThreshold: 1 + +## +# existingConfigmap: + +## Command and args for running the container (set to default if not set). Use array form +## +command: [] +args: [] + +## Deployment pod host aliases +## https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/ +## +hostAliases: [] + +## ref: http://kubernetes.io/docs/user-guide/compute-resources/ +## +resources: + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + limits: + cpu: 500m + memory: 3000Mi + requests: + cpu: 100m + memory: 1000Mi + +additionalResources: + ## Specify any JAVA_OPTS string here. These typically will be specified in conjunction with above resources + ## Example: java_opts: "-Xms500M -Xmx500M" + javaOpts: "-Xms2250M -Xmx2250M" + +## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container +## Clamav container already runs as 'mosip' user, so we may not need to enable this +containerSecurityContext: + enabled: false + runAsUser: mosip + runAsNonRoot: true + +## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod +## +podSecurityContext: + enabled: false + fsGroup: 1001 + +## Pod affinity preset +## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity +## Allowed values: soft, hard +## +podAffinityPreset: "" + +## Pod anti-affinity preset +## Ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity +## Allowed values: soft, hard +## +podAntiAffinityPreset: soft + +## Node affinity preset +## Ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity +## Allowed values: soft, hard +## +nodeAffinityPreset: + ## Node affinity type + ## Allowed values: soft, hard + ## + type: "" + ## Node label key to match + ## E.g. + ## key: "kubernetes.io/e2e-az-name" + ## + key: "" + ## Node label values to match + ## E.g. + ## values: + ## - e2e-az1 + ## - e2e-az2 + ## + values: [] + +## Affinity for pod assignment. Evaluated as a template. +## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity +## +affinity: {} + +## Node labels for pod assignment. Evaluated as a template. +## ref: https://kubernetes.io/docs/user-guide/node-selection/ +## +nodeSelector: {} + +## Tolerations for pod assignment. Evaluated as a template. +## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ +## +tolerations: [] + +## Pod extra labels +## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ +## +podLabels: {} + +## Annotations for server pods. +## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ +## +podAnnotations: {} + +## pods' priority. +## ref: https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/ +## +# priorityClassName: "" + +## lifecycleHooks for the container to automate configuration before or after startup. +## +lifecycleHooks: {} + +## Custom Liveness probes for +## +customLivenessProbe: {} + +## Custom Rediness probes +## +customReadinessProbe: {} + +## Update strategy - only really applicable for deployments with RWO PVs attached +## If replicas = 1, an update can get "stuck", as the previous pod remains attached to the +## PV, and the "incoming" pod can never start. Changing the strategy to "Recreate" will +## terminate the single previous pod, so that the new, incoming pod can attach to the PV +## +updateStrategy: + type: RollingUpdate + +## Additional environment variables to set +## Example: +## extraEnvVars: +## - name: FOO +## value: "bar" +## +extraEnvVars: [] + +## ConfigMap with extra environment variables that used +## +extraEnvVarsCM: + - global + - config-server-share + - artifactory-share + +## Secret with extra environment variables +## +extraEnvVarsSecret: [] + +## Extra volumes to add to the deployment +## +extraVolumes: [] + +## Extra volume mounts to add to the container +## +extraVolumeMounts: [] + +## Add init containers to the pods. +## Example: +## initContainers: +## - name: your-image-name +## image: your-image +## imagePullPolicy: Always +# true # ports: +## - name: portname +## containerPort: 1234 +## +initContainers: {} + +## Add sidecars to the pods. +## Example: +## sidecars: +## - name: your-image-name +## image: your-image +## imagePullPolicy: Always +## ports: +## - name: portname +## containerPort: 1234 +## +sidecars: {} + +persistence: + enabled: false + storageClass: longhorn + ## If defined, storageClassName: + ## If set to "-", storageClassName: "", which disables dynamic provisioning + ## If undefined (the default) or set to null, no storageClassName spec is + ## set, choosing the default provisioner. (gp2 on AWS, standard on + ## GKE, AWS & OpenStack). + ## + # storageClass: "-" + ## + ## If you want to reuse an existing claim, you can pass the name of the PVC using + ## the existingClaim variable + # existingClaim: your-claim + ## ReadWriteMany not supported by AWS gp2 + ## We use EFS storage class as that supports ReadWriteMany. Make sure you have installed the same as given + ## here: https://docs.aws.amazon.com/eks/latest/userguide/efs-csi.html + ## Packet landing zone requires ReadWriteMany + accessModes: + - ReadWriteMany + size: 1Gi + existingClaim: + # Dir where all incoming packets are stored + # Make sure this matches with what is given in the config properties + mountDir: /mnt/landing + labels: + purpose: landing-folder + reclaimPolicy: Retain + +## Init containers parameters: +## volumePermissions: Change the owner and group of the persistent volume mountpoint to runAsUser:fsGroup values from the securityContext section. +## +volumePermissions: + enabled: false + image: + registry: docker.io + repository: bitnami/bitnami-shell + tag: "10" + pullPolicy: Always + ## Optionally specify an array of imagePullSecrets. + ## Secrets must be manually created in the namespace. + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ + ## + pullSecrets: [] + ## - myRegistryKeySecretName + ## Init containers' resource requests and limits + ## ref: http://kubernetes.io/docs/user-guide/compute-resources/ + ## + resources: + ## We usually recommend not to specify default resources and to leave this as a conscious + ## choice for the user. This also increases chances charts run on environments with little + ## resources, such as Minikube. If you do want to specify resources, uncomment the following + ## lines, adjust them as necessary, and remove the curly braces after 'resources:'. + ## + limits: {} + ## cpu: 100m + ## memory: 128Mi + ## + requests: {} + ## cpu: 100m + ## memory: 128Mi + ## + +## Specifies whether RBAC resources should be created +## +rbac: + create: true + +## Specifies whether a ServiceAccount should be created +## +serviceAccount: + create: true + ## The name of the ServiceAccount to use. + ## If not set and create is true, a name is generated using the fullname template + ## + name: mimoto + +## Prometheus Metrics +## +## TODO: Enable when prometheus url is available +metrics: + enabled: true + ## Prometheus pod annotations + ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ + ## + podAnnotations: + prometheus.io/scrape: "true" + + endpointPath: + + ## Prometheus Service Monitor + ## ref: https://github.com/coreos/prometheus-operator + ## + serviceMonitor: + ## If the operator is installed in your cluster, set to true to create a Service Monitor Entry + ## + enabled: true + ## Specify the namespace in which the serviceMonitor resource will be created + ## + # namespace: "" + ## Specify the interval at which metrics should be scraped + ## + interval: 10s + ## Specify the timeout after which the scrape is ended + ## + # scrapeTimeout: 30s + ## Specify Metric Relabellings to add to the scrape endpoint + ## + # relabellings: + ## Specify honorLabels parameter to add the scrape endpoint + ## + honorLabels: false + ## Used to pass Labels that are used by the Prometheus installed in your cluster to select Service Monitors to work with + ## ref: https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#prometheusspec + ## + additionalLabels: {} + + ## Custom PrometheusRule to be defined + ## The value is evaluated as a template, so, for example, the value can depend on .Release or .Chart + ## ref: https://github.com/coreos/prometheus-operator#customresourcedefinitions + ## + prometheusRule: + enabled: false + additionalLabels: {} + namespace: '' + ## List of rules, used as template by Helm. + ## These are just examples rules inspired from https://awesome-prometheus-alerts.grep.to/rules.html + # rules: + # - alert: RabbitmqDown + # expr: rabbitmq_up{service="{{ template "rabbitmq.fullname" . }}"} == 0 + # for: 5m + # labels: + # severity: error + rules: [] + +## Requires public access. +istio: + enabled: true + gateways: + - istio-system/internal + - istio-system/public + prefix: /mimotomobileapp + rewrite: /v1/mimoto diff --git a/partner-onboarder/README.md b/partner-onboarder/README.md new file mode 100644 index 000000000..f757cd409 --- /dev/null +++ b/partner-onboarder/README.md @@ -0,0 +1,33 @@ +# Partner Onboarder + +## Overview +* Upload certificate for default partners. Refer [mosip-onboarding repo](https://github.com/mosip/mosip-onboarding). + +## Install +* Set `values.yaml` to run onboarder for specific modules. +* run `./install.sh`. +``` +./install.sh +``` +# Troubleshootings + +* After completion of the job, a very detailed `html report` is prepared and stored in minio as part of onboarding bucket. + +* The user can go and view the same for more information or response messages. + +### Commonly found issues + + 1. KER-ATH-401: Authentication Failed + + Resolution: You need to provide correct secretkey for mosip-deployment-client. + + 2. Certificate dates are not valid + + Resolution: Check with admin regarding adding grace period in configuration. + + 3. Upload of certificate will not be allowed to update other domain certificate + + Resolution: This is expected when you try to upload `ida-cred` certificate twice. It should only run once and if you see this error while uploading a second time it can be ignored as the cert is already present. + + + diff --git a/partner-onboarder/copy_cm.sh b/partner-onboarder/copy_cm.sh new file mode 100755 index 000000000..3a25f2c41 --- /dev/null +++ b/partner-onboarder/copy_cm.sh @@ -0,0 +1,10 @@ +#!/bin/bash +# Copy configmaps from other namespaces +# DST_NS: Destination namespace + +COPY_UTIL=./copy_cm_func.sh +DST_NS=mimoto + +$COPY_UTIL configmap global default $DST_NS +$COPY_UTIL configmap keycloak-env-vars keycloak $DST_NS +$COPY_UTIL configmap keycloak-host keycloak $DST_NS diff --git a/partner-onboarder/copy_cm_func.sh b/partner-onboarder/copy_cm_func.sh new file mode 100755 index 000000000..7b2259486 --- /dev/null +++ b/partner-onboarder/copy_cm_func.sh @@ -0,0 +1,33 @@ +#!/bin/sh +# Copy configmap and secret from one namespace to another. +# ./copy_cm_func.sh [name] +# Parameters: +# resource: configmap|secret +# name: Optional new name of the configmap or secret in destination namespace. This may be needed if there is +# clash of names + +if [ $1 = "configmap" ] +then + RESOURCE=configmap +elif [ $1 = "secret" ] +then + RESOURCE=secret +else + echo "Incorrect resource $1. Exiting.." + exit 1 +fi + + +if [ $# -ge 5 ] +then + kubectl -n $4 delete --ignore-not-found=true $RESOURCE $5 + kubectl -n $3 get $RESOURCE $2 -o yaml | sed "s/namespace: $3/namespace: $4/g" | sed "s/name: $2/name: $5/g" | kubectl -n $4 create -f - +else + kubectl -n $4 delete --ignore-not-found=true $RESOURCE $2 + kubectl -n $3 get $RESOURCE $2 -o yaml | sed "s/namespace: $3/namespace: $4/g" | kubectl -n $4 create -f - +fi + + + + + diff --git a/partner-onboarder/copy_secrets.sh b/partner-onboarder/copy_secrets.sh new file mode 100755 index 000000000..429a4c662 --- /dev/null +++ b/partner-onboarder/copy_secrets.sh @@ -0,0 +1,10 @@ +#!/bin/bash +# Copy secrets from other namespaces +# DST_NS: Destination namespace + +COPY_UTIL=./copy_cm_func.sh +DST_NS=mimoto + +$COPY_UTIL secret s3 s3 $DST_NS +$COPY_UTIL secret keycloak keycloak $DST_NS +$COPY_UTIL secret keycloak-client-secrets keycloak $DST_NS diff --git a/partner-onboarder/delete.sh b/partner-onboarder/delete.sh new file mode 100755 index 000000000..a91c9de68 --- /dev/null +++ b/partner-onboarder/delete.sh @@ -0,0 +1,28 @@ +#!/bin/bash +# Uninstalls partner-onboarder helm +## Usage: ./delete.sh [kubeconfig] + +if [ $# -ge 1 ] ; then + export KUBECONFIG=$1 +fi + +function deleting_onboarder() { + NS=mimoto + while true; do + read -p "Are you sure you want to delete all partner-onboarder ?(Y/n) " yn + if [ $yn = "Y" ]; then + echo Deleting mimoto-keybinding-partner-onboarder helm + helm -n $NS delete mimoto-keybinding-partner-onboarder + break + fi + done + return 0 +} + +# set commands for error handling. +set -e +set -o errexit ## set -e : exit the script if any statement returns a non-true return value +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errtrace # trace ERR through 'time command' and other functions +set -o pipefail # trace ERR through pipes +deleting_onboarder # calling function diff --git a/partner-onboarder/install.sh b/partner-onboarder/install.sh new file mode 100755 index 000000000..18e72619c --- /dev/null +++ b/partner-onboarder/install.sh @@ -0,0 +1,66 @@ +#!/bin/bash +# Onboards default partners +## Usage: ./install.sh [kubeconfig] + +if [ $# -ge 1 ] ; then + export KUBECONFIG=$1 +fi + +echo "Do you have public domain & valid SSL? (Y/n) " +echo "Y: if you have public domain & valid ssl certificate" +echo "n: if you don't have public domain & valid ssl certificate" +read -p "" flag + +if [ -z "$flag" ]; then + echo "'flag' was provided; EXITING;" + exit 1; +fi +ENABLE_INSECURE='' +if [ "$flag" = "n" ]; then + ENABLE_INSECURE='--set onboarding.enableInsecure=true'; +fi + +NS=mimoto +CHART_VERSION=12.0.1-B3 + +echo Create $NS namespace +kubectl create ns $NS + +function installing_onboarder() { + + read -p "Is values.yaml for onboarder chart set correctly as part of Pre-requisites?(Y/n) " yn; + if [ $yn = "Y" ]; then + echo Istio label + kubectl label ns $NS istio-injection=disabled --overwrite + helm repo update + + echo Copy configmaps + kubectl -n $NS --ignore-not-found=true delete cm s3 + sed -i 's/\r$//' copy_cm.sh + ./copy_cm.sh + + echo Copy secrets + sed -i 's/\r$//' copy_secrets.sh + ./copy_secrets.sh + + echo Onboarding default partners + helm -n $NS install mimoto-keybinding-partner-onboarder mosip/partner-onboarder \ + --set onboarding.configmaps.s3.s3-host='http://minio.minio:9000' \ + --set onboarding.configmaps.s3.s3-user-key='admin' \ + --set onboarding.configmaps.s3.s3-region='' \ + $ENABLE_INSECURE \ + -f values.yaml \ + --version $CHART_VERSION + + echo Reports are moved to S3 under onboarder bucket + return 0 + fi +} + +# set commands for error handling. +set -e +set -o errexit ## set -e : exit the script if any statement returns a non-true return value +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errtrace # trace ERR through 'time command' and other functions +set -o pipefail # trace ERR through pipes +installing_onboarder # calling function diff --git a/partner-onboarder/values.yaml b/partner-onboarder/values.yaml new file mode 100644 index 000000000..50f720490 --- /dev/null +++ b/partner-onboarder/values.yaml @@ -0,0 +1,22 @@ +onboarding: + modules: + - name: ida + enabled: false + - name: print + enabled: false + - name: abis + enabled: false + - name: resident + enabled: false + - name: mobileid + enabled: false + - name: digitalcard + enabled: false + - name: esignet + enabled: false + - name: resident-oidc + enabled: false + - name: demo-oidc + enabled: false + - name: mimoto-keybinding + enabled: true \ No newline at end of file From dc2f00f61451b2c3908d965aa0edc96b102eba1a Mon Sep 17 00:00:00 2001 From: techno-243 Date: Fri, 12 May 2023 17:18:42 +0530 Subject: [PATCH 045/860] [MOSIP-27194] Added helm-chart and deployment script for Mimoto in mimoto repo --- helm/mimoto/Chart.yaml | 1 - partner-onboarder/install.sh | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/helm/mimoto/Chart.yaml b/helm/mimoto/Chart.yaml index adffd93de..6062a8dcb 100644 --- a/helm/mimoto/Chart.yaml +++ b/helm/mimoto/Chart.yaml @@ -14,7 +14,6 @@ home: https://mosip.io keywords: - mosip - mimoto - - mimoto maintainers: - email: info@mosip.io name: MOSIP diff --git a/partner-onboarder/install.sh b/partner-onboarder/install.sh index 18e72619c..022ed727d 100755 --- a/partner-onboarder/install.sh +++ b/partner-onboarder/install.sh @@ -17,7 +17,7 @@ if [ -z "$flag" ]; then fi ENABLE_INSECURE='' if [ "$flag" = "n" ]; then - ENABLE_INSECURE='--set onboarding.enableInsecure=true'; + ENABLE_INSECURE='--set onboarding.configmaps.onboarding.ENABLE_INSECURE=true'; fi NS=mimoto From 317e7c7ae45cd4153cbce31100a46cafc00e801b Mon Sep 17 00:00:00 2001 From: techno-243 Date: Tue, 16 May 2023 09:48:33 +0530 Subject: [PATCH 046/860] [MOSIP-27194] Added helm-chart and deployment script for Mimoto in mimoto repo --- partner-onboarder/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/partner-onboarder/install.sh b/partner-onboarder/install.sh index 022ed727d..0fcf638df 100755 --- a/partner-onboarder/install.sh +++ b/partner-onboarder/install.sh @@ -8,7 +8,7 @@ fi echo "Do you have public domain & valid SSL? (Y/n) " echo "Y: if you have public domain & valid ssl certificate" -echo "n: if you don't have public domain & valid ssl certificate" +echo "n: if you don't have a public domain and a valid SSL certificate. Note: It is recommended to use this option only in development environments" read -p "" flag if [ -z "$flag" ]; then From c9755cc185df55d3b80f102d4df1c67873940042 Mon Sep 17 00:00:00 2001 From: techno-243 Date: Wed, 17 May 2023 17:46:48 +0530 Subject: [PATCH 047/860] [MOSIP-27194] Added helm-chart and deployment script for Mimoto in mimoto repo --- partner-onboarder/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/partner-onboarder/install.sh b/partner-onboarder/install.sh index 0fcf638df..0573df290 100755 --- a/partner-onboarder/install.sh +++ b/partner-onboarder/install.sh @@ -8,7 +8,7 @@ fi echo "Do you have public domain & valid SSL? (Y/n) " echo "Y: if you have public domain & valid ssl certificate" -echo "n: if you don't have a public domain and a valid SSL certificate. Note: It is recommended to use this option only in development environments" +echo "n: if you don't have a public domain and a valid SSL certificate. It will add an ssl certificate in onboarder docker. Only recommended to use in local development environments" read -p "" flag if [ -z "$flag" ]; then From de00ddc48be29810022026dba316a6af52ea94eb Mon Sep 17 00:00:00 2001 From: syed-salman-technoforte Date: Mon, 29 May 2023 09:55:28 +0530 Subject: [PATCH 048/860] [MOSIP-27593] Added initContainers to download & add self-signed ssl certs to the pods --- helm/mimoto/templates/deployment.yaml | 9 ++++++++ helm/mimoto/values.yaml | 33 ++++++++++++++++++++++++++- 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/helm/mimoto/templates/deployment.yaml b/helm/mimoto/templates/deployment.yaml index 3309ede45..f225b8077 100644 --- a/helm/mimoto/templates/deployment.yaml +++ b/helm/mimoto/templates/deployment.yaml @@ -112,6 +112,11 @@ spec: volumeMounts: - name: landing-folder mountPath: {{ .Values.persistence.mountDir }} + {{- if .Values.initContainers }} + - mountPath: /usr/local/openjdk-11/lib/security/cacerts + name: cacerts + subPath: cacerts + {{- end }} ports: [] {{- if .Values.resources }} resources: {{- toYaml .Values.resources | nindent 12 }} @@ -142,3 +147,7 @@ spec: {{- else }} emptyDir: {} {{ end }} + {{- if .Values.initContainers }} + - name: cacerts + emptyDir: {} + {{- end }} diff --git a/helm/mimoto/values.yaml b/helm/mimoto/values.yaml index 2ed0664b3..de8635308 100644 --- a/helm/mimoto/values.yaml +++ b/helm/mimoto/values.yaml @@ -271,7 +271,38 @@ extraVolumeMounts: [] ## - name: portname ## containerPort: 1234 ## -initContainers: {} +initContainers: + - command: + - /bin/bash + - -c + - if [ "$ENABLE_INSECURE" = "true" ]; then HOST=$( env | grep "mosip-api-internal-host" + |sed "s/mosip-api-internal-host=//g"); if [ -z "$HOST" ]; then echo "HOST + $HOST is empty; EXITING"; exit 1; fi; openssl s_client -servername "$HOST" + -connect "$HOST":443 > "$HOST.cer" 2>/dev/null & sleep 2 ; sed -i -ne '/-BEGIN + CERTIFICATE-/,/-END CERTIFICATE-/p' "$HOST.cer"; cat "$HOST.cer"; /usr/local/openjdk-11/bin/keytool + -delete -alias "$HOST" -keystore $JAVA_HOME/lib/security/cacerts -storepass + changeit; /usr/local/openjdk-11/bin/keytool -trustcacerts -keystore "$JAVA_HOME/lib/security/cacerts" + -storepass changeit -noprompt -importcert -alias "$HOST" -file "$HOST.cer" + ; if [ $? -gt 0 ]; then echo "Failed to add SSL certificate for host $host; + EXITING"; exit 1; fi; cp /usr/local/openjdk-11/lib/security/cacerts /cacerts; + fi + env: + - name: ENABLE_INSECURE + value: "true" + envFrom: + - configMapRef: + name: global + image: docker.io/openjdk:11-jre + imagePullPolicy: Always + name: cacerts + resources: {} + securityContext: + runAsUser: 0 + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /cacerts + name: cacerts ## Add sidecars to the pods. ## Example: From d16c3cd249222565bb781a3ef43a6c2780464498 Mon Sep 17 00:00:00 2001 From: syed-salman-technoforte Date: Mon, 29 May 2023 18:24:19 +0530 Subject: [PATCH 049/860] [MOSIP-27593] Updated mimoto install.sh and README.md --- README.md | 7 +++++++ helm/mimoto/install.sh | 16 +++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 5bc96dda4..01a9aef10 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,13 @@ mvn spring-boot:run -Dspring.profiles.active=local ## Deploy +### Install +``` +cd helm/mimoto +./install.sh +``` +During the execution of the install.sh script, a prompt will appear, requesting information regarding the presence of a public domain and a valid SSL certificate on the server. If the server lacks a public domain and a valid SSL certificate, it is advisable to select the n option. Opting for this choice will enable the init-container with an emptyDir volume and include it in the deployment process. The init-container will proceed to download the server's self-signed SSL certificate and mount it to the specified location within the container's Java keystore (i.e., cacerts) file. This particular functionality caters to scenarios where the script needs to be employed on a server utilizing self-signed SSL certificates. + ### Docker compose stack folder structure: - bin: service jar files - conf: configuration files for docker services. diff --git a/helm/mimoto/install.sh b/helm/mimoto/install.sh index 48fe907e2..27b518d50 100755 --- a/helm/mimoto/install.sh +++ b/helm/mimoto/install.sh @@ -26,8 +26,22 @@ function installing_mimoto() { sed -i 's/\r$//' copy_secrets.sh ./copy_secrets.sh + echo "Do you have public domain & valid SSL? (Y/n) " + echo "Y: if you have public domain & valid ssl certificate" + echo "n: If you don't have a public domain and a valid SSL certificate. Note: It is recommended to use this option only in development environments." + read -p "" flag + + if [ -z "$flag" ]; then + echo "'flag' was provided; EXITING;" + exit 1; + fi + ENABLE_INSECURE='--set initContainers=[]' + if [ "$flag" = "n" ]; then + ENABLE_INSECURE=; + fi + echo Installing mimoto - helm -n $NS install mimoto mosip/mimoto --version $MIMOTO_CHART_VERSION + helm -n $NS install mimoto mosip/mimoto --version $MIMOTO_CHART_VERSION $ENABLE_INSECURE kubectl -n $NS get deploy -o name | xargs -n1 -t kubectl -n $NS rollout status From ff3ff368c3f293ab36cbb5a7b3ff7c054ff61f8d Mon Sep 17 00:00:00 2001 From: syed-salman-technoforte Date: Tue, 30 May 2023 15:38:35 +0530 Subject: [PATCH 050/860] [MOSIP-27593] Updated mimoto install.sh and README.md --- README.md | 5 ++++- helm/mimoto/install.sh | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 01a9aef10..825487141 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,10 @@ mvn spring-boot:run -Dspring.profiles.active=local cd helm/mimoto ./install.sh ``` -During the execution of the install.sh script, a prompt will appear, requesting information regarding the presence of a public domain and a valid SSL certificate on the server. If the server lacks a public domain and a valid SSL certificate, it is advisable to select the n option. Opting for this choice will enable the init-container with an emptyDir volume and include it in the deployment process. The init-container will proceed to download the server's self-signed SSL certificate and mount it to the specified location within the container's Java keystore (i.e., cacerts) file. This particular functionality caters to scenarios where the script needs to be employed on a server utilizing self-signed SSL certificates. +* During the execution of the `install.sh` script, a prompt appears requesting information regarding the presence of a public domain and a valid SSL certificate on the server. + If the server lacks a public domain and a valid SSL certificate, it is advisable to select the `n` option. Opting it will enable the `init-container` with an `emptyDir` volume and include it in the deployment process. + The init-container will proceed to download the server's self-signed SSL certificate and mount it to the specified location within the container's Java keystore (i.e., `cacerts`) file. + This particular functionality caters to scenarios where the script needs to be employed on a server utilizing self-signed SSL certificates. ### Docker compose stack folder structure: - bin: service jar files diff --git a/helm/mimoto/install.sh b/helm/mimoto/install.sh index 27b518d50..f2749a8ac 100755 --- a/helm/mimoto/install.sh +++ b/helm/mimoto/install.sh @@ -35,9 +35,9 @@ function installing_mimoto() { echo "'flag' was provided; EXITING;" exit 1; fi - ENABLE_INSECURE='--set initContainers=[]' + ENABLE_INSECURE='' if [ "$flag" = "n" ]; then - ENABLE_INSECURE=; + ENABLE_INSECURE='--set enable_insecure=true'; fi echo Installing mimoto From 2ecee083f63766cf02df91800002de90ac22b167 Mon Sep 17 00:00:00 2001 From: syed-salman-technoforte Date: Tue, 30 May 2023 16:10:06 +0530 Subject: [PATCH 051/860] [MOSIP-27593] Updated README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 825487141..40f0e62eb 100644 --- a/README.md +++ b/README.md @@ -23,9 +23,9 @@ cd helm/mimoto ./install.sh ``` * During the execution of the `install.sh` script, a prompt appears requesting information regarding the presence of a public domain and a valid SSL certificate on the server. - If the server lacks a public domain and a valid SSL certificate, it is advisable to select the `n` option. Opting it will enable the `init-container` with an `emptyDir` volume and include it in the deployment process. - The init-container will proceed to download the server's self-signed SSL certificate and mount it to the specified location within the container's Java keystore (i.e., `cacerts`) file. - This particular functionality caters to scenarios where the script needs to be employed on a server utilizing self-signed SSL certificates. +* If the server lacks a public domain and a valid SSL certificate, it is advisable to select the `n` option. Opting it will enable the `init-container` with an `emptyDir` volume and include it in the deployment process. +* The init-container will proceed to download the server's self-signed SSL certificate and mount it to the specified location within the container's Java keystore (i.e., `cacerts`) file. +* This particular functionality caters to scenarios where the script needs to be employed on a server utilizing self-signed SSL certificates. ### Docker compose stack folder structure: - bin: service jar files From de0405c1a4f314ce960969814e36670e739dae0f Mon Sep 17 00:00:00 2001 From: syed-salman-technoforte Date: Tue, 30 May 2023 19:06:21 +0530 Subject: [PATCH 052/860] [MOSIP-27593] Updated mimoto helm chart --- helm/mimoto/templates/deployment.yaml | 6 +++--- helm/mimoto/values.yaml | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/helm/mimoto/templates/deployment.yaml b/helm/mimoto/templates/deployment.yaml index f225b8077..c4f43dce9 100644 --- a/helm/mimoto/templates/deployment.yaml +++ b/helm/mimoto/templates/deployment.yaml @@ -69,7 +69,7 @@ spec: - name: foo mountPath: bar {{- end }} - {{- if .Values.initContainers }} + {{- if .Values.enable_insecure }} {{- include "common.tplvalues.render" (dict "value" .Values.initContainers "context" $) | nindent 8 }} {{- end }} containers: @@ -112,7 +112,7 @@ spec: volumeMounts: - name: landing-folder mountPath: {{ .Values.persistence.mountDir }} - {{- if .Values.initContainers }} + {{- if .Values.enable_insecure }} - mountPath: /usr/local/openjdk-11/lib/security/cacerts name: cacerts subPath: cacerts @@ -147,7 +147,7 @@ spec: {{- else }} emptyDir: {} {{ end }} - {{- if .Values.initContainers }} + {{- if .Values.enable_insecure }} - name: cacerts emptyDir: {} {{- end }} diff --git a/helm/mimoto/values.yaml b/helm/mimoto/values.yaml index de8635308..cfc7cbc36 100644 --- a/helm/mimoto/values.yaml +++ b/helm/mimoto/values.yaml @@ -459,3 +459,5 @@ istio: - istio-system/public prefix: /mimotomobileapp rewrite: /v1/mimoto + +enable_insecure: false \ No newline at end of file From 6683102441068212226020c9a87c951323b67612 Mon Sep 17 00:00:00 2001 From: syed salman <72004356+syedsalman3753@users.noreply.github.com> Date: Wed, 7 Jun 2023 19:14:02 +0530 Subject: [PATCH 053/860] [DSD-2763] Updated onboarder scripts to configure S3 objects (#86) Co-authored-by: syed-salman-technoforte --- partner-onboarder/install.sh | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/partner-onboarder/install.sh b/partner-onboarder/install.sh index 0573df290..0e4e016af 100755 --- a/partner-onboarder/install.sh +++ b/partner-onboarder/install.sh @@ -43,11 +43,35 @@ function installing_onboarder() { sed -i 's/\r$//' copy_secrets.sh ./copy_secrets.sh + read -p "Provide onboarder bucket name : " s3_bucket + if [[ -z $s3_bucket ]]; then + echo "s3_bucket not provided; EXITING;"; + exit 1; + fi + if [[ $s3_bucket == *[' !@#$%^&*()+']* ]]; then + echo "s3_bucket should not contain spaces / any special character; EXITING"; + exit 1; + fi + read -p "Provide onboarder s3 bucket region : " s3_region + if [[ $s3_region == *[' !@#$%^&*()+']* ]]; then + echo "s3_region should not contain spaces / any special character; EXITING"; + exit 1; + fi + + read -p "Provide S3 URL : " s3_url + if [[ -z $s3_url ]]; then + echo "s3_url not provided; EXITING;" + exit 1; + fi + + s3_user_key=$( kubectl -n s3 get cm s3 -o json | jq -r '.data."s3-user-key"' ) + echo Onboarding default partners helm -n $NS install mimoto-keybinding-partner-onboarder mosip/partner-onboarder \ - --set onboarding.configmaps.s3.s3-host='http://minio.minio:9000' \ - --set onboarding.configmaps.s3.s3-user-key='admin' \ - --set onboarding.configmaps.s3.s3-region='' \ + --set onboarding.configmaps.s3.s3-host="$s3_url" \ + --set onboarding.configmaps.s3.s3-user-key="$s3_user_key" \ + --set onboarding.configmaps.s3.s3-region="$s3_region" \ + --set onboarding.configmaps.s3.s3-bucket-name="$s3_bucket" \ $ENABLE_INSECURE \ -f values.yaml \ --version $CHART_VERSION From 13f35b2ff854f022139bb3637788a8f6e3bb680e Mon Sep 17 00:00:00 2001 From: Rakshitha650 <76676196+Rakshitha650@users.noreply.github.com> Date: Mon, 19 Jun 2023 08:32:43 +0530 Subject: [PATCH 054/860] [DSD-2827]Update mimoto prefix in values.yaml (#88) Signed-off-by: Rakshitha650 <76676196+Rakshitha650@users.noreply.github.com> --- helm/mimoto/values.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/helm/mimoto/values.yaml b/helm/mimoto/values.yaml index cfc7cbc36..ed7d85873 100644 --- a/helm/mimoto/values.yaml +++ b/helm/mimoto/values.yaml @@ -457,7 +457,7 @@ istio: gateways: - istio-system/internal - istio-system/public - prefix: /mimotomobileapp + prefix: /residentmobileapp rewrite: /v1/mimoto -enable_insecure: false \ No newline at end of file +enable_insecure: false From cba624e563455f2f43399774d8654755444062d4 Mon Sep 17 00:00:00 2001 From: Vijay Date: Wed, 28 Jun 2023 14:33:03 +0530 Subject: [PATCH 055/860] fix(#MOSIP-27873): [Vijay] add request validation for credential download api and request otp call. --- .../controller/CredentialShareController.java | 18 ++++++---- .../mimoto/controller/IdpController.java | 13 ++++--- .../controller/ResidentServiceController.java | 12 ++++++- .../mimoto/dto/mimoto/AppOTPRequestDTO.java | 10 ++++++ .../dto/mimoto/BindingOtpInnerReqDto.java | 5 +++ .../dto/mimoto/BindingOtpRequestDto.java | 3 ++ .../mimoto/CredentialDownloadRequestDTO.java | 4 +++ .../exception/InvalidInputException.java | 4 +++ .../exception/PlatformErrorMessages.java | 2 +- .../mimoto/util/CommonExceptionHandler.java | 25 +++++++++++++ .../mimoto/util/CredentialShareUtil.java | 21 +++++++++++ .../java/io/mosip/mimoto/util/IdpUtil.java | 35 +++++++++++++++++++ .../mimoto/util/ResidentServiceUtil.java | 35 +++++++++++++++++++ .../java/io/mosip/mimoto/util/Utilities.java | 8 +++++ .../io/mosip/mimoto/util/ValidationUtil.java | 20 +++++++++++ .../resources/application-local.properties | 15 +++++--- src/main/resources/bootstrap.properties | 2 +- .../mimoto/controller/InjiControllerTest.java | 4 +++ 18 files changed, 218 insertions(+), 18 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/util/CommonExceptionHandler.java create mode 100644 src/main/java/io/mosip/mimoto/util/CredentialShareUtil.java create mode 100644 src/main/java/io/mosip/mimoto/util/IdpUtil.java create mode 100644 src/main/java/io/mosip/mimoto/util/ResidentServiceUtil.java create mode 100644 src/main/java/io/mosip/mimoto/util/ValidationUtil.java diff --git a/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java b/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java index b821ac822..977f65540 100644 --- a/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java +++ b/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java @@ -10,6 +10,7 @@ import com.google.gson.Gson; import io.mosip.kernel.core.util.JsonUtils; +import io.mosip.mimoto.util.*; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -17,6 +18,7 @@ import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; @@ -39,10 +41,8 @@ import io.mosip.mimoto.model.EventModel; import io.mosip.mimoto.service.RestClientService; import io.mosip.mimoto.service.impl.CredentialShareServiceImpl; -import io.mosip.mimoto.util.CryptoCoreUtil; -import io.mosip.mimoto.util.DateUtils; -import io.mosip.mimoto.util.LoggerUtil; -import io.mosip.mimoto.util.Utilities; + +import javax.validation.Valid; @RestController @RequestMapping(value = "/credentialshare") @@ -71,6 +71,9 @@ public class CredentialShareController { @Autowired public CryptoCoreUtil cryptoCoreUtil; + @Autowired + CredentialShareUtil credentialShareUtil; + private Gson gson = new Gson(); @Autowired @@ -184,14 +187,17 @@ public ResponseEntity requestStatus(@PathVariable String requestId) * @throws Exception */ @PostMapping(path = "/download", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity download(@RequestBody CredentialDownloadRequestDTO requestDTO) + public ResponseEntity download(@Valid @RequestBody CredentialDownloadRequestDTO requestDTO, BindingResult result) throws Exception { try { + ValidationUtil.validateInputRequest(result); JsonNode decryptedCredentialJSON = utilities.getDecryptedVC(requestDTO.getRequestId()); - + JsonNode requestedCredentialJSON = utilities.getRequestVC(requestDTO.getRequestId()); JsonNode credentialJSON = utilities.getVC(requestDTO.getRequestId()); + // Combine original encrypted verifiable credential and decrypted if (decryptedCredentialJSON != null && credentialJSON != null) { + credentialShareUtil.validateCredentialDownloadRequest(requestDTO, requestedCredentialJSON); CredentialDownloadResponseDTO credentialDownloadBody = new CredentialDownloadResponseDTO(); credentialDownloadBody.setCredential(decryptedCredentialJSON); credentialDownloadBody.setVerifiableCredential(credentialJSON); diff --git a/src/main/java/io/mosip/mimoto/controller/IdpController.java b/src/main/java/io/mosip/mimoto/controller/IdpController.java index 77c8ae586..2b0ea9fad 100644 --- a/src/main/java/io/mosip/mimoto/controller/IdpController.java +++ b/src/main/java/io/mosip/mimoto/controller/IdpController.java @@ -13,17 +13,17 @@ import io.mosip.mimoto.exception.IdpException; import io.mosip.mimoto.exception.PlatformErrorMessages; import io.mosip.mimoto.service.RestClientService; -import io.mosip.mimoto.util.DateUtils; -import io.mosip.mimoto.util.JoseUtil; -import io.mosip.mimoto.util.LoggerUtil; +import io.mosip.mimoto.util.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; +import javax.validation.Valid; import java.util.List; @RestController @@ -43,10 +43,15 @@ public class IdpController { @Autowired private ObjectMapper objectMapper; + @Autowired + IdpUtil idpUtil; + @PostMapping("/binding-otp") @SuppressWarnings("unchecked") - public ResponseEntity otpRequest(@RequestBody BindingOtpRequestDto requestDTO) throws Exception { + public ResponseEntity otpRequest(@Valid @RequestBody BindingOtpRequestDto requestDTO, BindingResult result) throws Exception { logger.debug("Received binding-otp request : " + JsonUtils.javaObjectToJsonString(requestDTO)); + ValidationUtil.validateInputRequest(result); + idpUtil.validateNotificationChannel(requestDTO); ResponseWrapper response = null; try { response = (ResponseWrapper) restClientService diff --git a/src/main/java/io/mosip/mimoto/controller/ResidentServiceController.java b/src/main/java/io/mosip/mimoto/controller/ResidentServiceController.java index 22aca63b1..ea90df576 100644 --- a/src/main/java/io/mosip/mimoto/controller/ResidentServiceController.java +++ b/src/main/java/io/mosip/mimoto/controller/ResidentServiceController.java @@ -2,11 +2,14 @@ import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.dto.resident.*; +import io.mosip.mimoto.util.ResidentServiceUtil; +import io.mosip.mimoto.util.ValidationUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; +import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @@ -19,6 +22,8 @@ import io.mosip.mimoto.util.DateUtils; import io.mosip.mimoto.util.LoggerUtil; +import javax.validation.Valid; + @RestController public class ResidentServiceController { @@ -27,6 +32,9 @@ public class ResidentServiceController { @Autowired public RestClientService restClientService; + @Autowired + ResidentServiceUtil residentServiceUtil; + @Autowired Environment env; @@ -39,7 +47,9 @@ public class ResidentServiceController { */ @PostMapping("/req/otp") @SuppressWarnings("unchecked") - public ResponseEntity otpRequest(@RequestBody AppOTPRequestDTO requestDTO) throws Exception { + public ResponseEntity otpRequest(@Valid @RequestBody AppOTPRequestDTO requestDTO, BindingResult result) throws Exception { + ValidationUtil.validateInputRequest(result); + residentServiceUtil.validateNotificationChannel(requestDTO); OTPRequestDTO mosipOTPRequestPayload = new OTPRequestDTO(); mosipOTPRequestPayload.setVersion("1.0"); mosipOTPRequestPayload.setId("mosip.identity.otp.internal"); diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/AppOTPRequestDTO.java b/src/main/java/io/mosip/mimoto/dto/mimoto/AppOTPRequestDTO.java index 74c59fc4b..044878bf6 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/AppOTPRequestDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/AppOTPRequestDTO.java @@ -3,10 +3,20 @@ import java.util.List; import lombok.Data; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Pattern; + @Data public class AppOTPRequestDTO { + @NotNull private String individualId; + @NotNull + @Pattern(regexp = "UIN|VID") private String individualIdType; + @NotEmpty + @NotNull private List otpChannel; + @NotNull private String transactionID; } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpInnerReqDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpInnerReqDto.java index bc1b7d232..828a49b12 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpInnerReqDto.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpInnerReqDto.java @@ -2,10 +2,15 @@ import lombok.Data; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; import java.util.List; @Data public class BindingOtpInnerReqDto { + @NotNull private String individualId; + @NotNull + @NotEmpty private List otpChannels; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpRequestDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpRequestDto.java index 1b0d1a796..cac950474 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpRequestDto.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpRequestDto.java @@ -4,10 +4,13 @@ import lombok.Data; import lombok.NoArgsConstructor; +import javax.validation.constraints.NotNull; + @Data @AllArgsConstructor @NoArgsConstructor public class BindingOtpRequestDto { private String requestTime; + @NotNull private BindingOtpInnerReqDto request; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDownloadRequestDTO.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDownloadRequestDTO.java index 21d3e511c..ab7409127 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDownloadRequestDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDownloadRequestDTO.java @@ -2,8 +2,12 @@ import lombok.Data; +import javax.validation.constraints.NotNull; + @Data public class CredentialDownloadRequestDTO { + @NotNull private String individualId; + @NotNull private String requestId; } diff --git a/src/main/java/io/mosip/mimoto/exception/InvalidInputException.java b/src/main/java/io/mosip/mimoto/exception/InvalidInputException.java index 279ed8239..edb6e5c5c 100644 --- a/src/main/java/io/mosip/mimoto/exception/InvalidInputException.java +++ b/src/main/java/io/mosip/mimoto/exception/InvalidInputException.java @@ -24,4 +24,8 @@ public InvalidInputException(String errorCode, String errorMessage) { super(errorCode, errorMessage); } + public InvalidInputException(String errorMessage) { + super(PlatformErrorMessages.MIMOTO_PGS_INVALID_INPUT_PARAMETER.getCode(), errorMessage); + } + } diff --git a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java index 2ea060bc1..43dbda3f2 100644 --- a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java +++ b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java @@ -35,7 +35,7 @@ public enum PlatformErrorMessages { /** The rgs json parsing exception. */ MIMOTO_RGS_JSON_PARSING_EXCEPTION(PlatformConstants.PREFIX + "017", "JSON Parsing Failed"), /** The invalid input parameter. */ - MIMOTO_PGS_INVALID_INPUT_PARAMETER(PlatformConstants.PREFIX + "011", "Invalid Input Parameter - %s"), + MIMOTO_PGS_INVALID_INPUT_PARAMETER(PlatformConstants.PREFIX + "011", "Invalid Input Parameter"), /** The rgs json mapping exception. */ MIMOTO_RGS_JSON_MAPPING_EXCEPTION(PlatformConstants.PREFIX + "016", "JSON Mapping Failed"), MIMOTO_PDF_SIGNATURE_EXCEPTION(PlatformConstants.PREFIX + "024", "PDF Signature error"), diff --git a/src/main/java/io/mosip/mimoto/util/CommonExceptionHandler.java b/src/main/java/io/mosip/mimoto/util/CommonExceptionHandler.java new file mode 100644 index 000000000..4bf41a46c --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/CommonExceptionHandler.java @@ -0,0 +1,25 @@ +package io.mosip.mimoto.util; + + +import io.mosip.mimoto.dto.ErrorDTO; +import io.mosip.mimoto.dto.resident.CredentialRequestResponseDTO; +import io.mosip.mimoto.exception.InvalidInputException; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; + +import java.util.Collections; + +@ControllerAdvice +public class CommonExceptionHandler{ + @ExceptionHandler( value = InvalidInputException.class) + public ResponseEntity handleInvalidInput(InvalidInputException ex) { + CredentialRequestResponseDTO credentialRequestResponseDTO = new CredentialRequestResponseDTO(); + ErrorDTO errors = new ErrorDTO(ex.getErrorCode(), ex.getMessage()); + credentialRequestResponseDTO.setVersion("1.0"); + credentialRequestResponseDTO.setErrors(Collections.singletonList(errors)); + return new ResponseEntity<>(credentialRequestResponseDTO, HttpStatus.BAD_REQUEST); + } + +} diff --git a/src/main/java/io/mosip/mimoto/util/CredentialShareUtil.java b/src/main/java/io/mosip/mimoto/util/CredentialShareUtil.java new file mode 100644 index 000000000..4dd547799 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/CredentialShareUtil.java @@ -0,0 +1,21 @@ +package io.mosip.mimoto.util; + +import com.fasterxml.jackson.databind.JsonNode; +import io.mosip.mimoto.dto.mimoto.CredentialDownloadRequestDTO; +import io.mosip.mimoto.exception.InvalidInputException; +import io.mosip.mimoto.exception.PlatformErrorMessages; +import org.springframework.stereotype.Component; + +import java.io.IOException; + +@Component +public class CredentialShareUtil { + public void validateCredentialDownloadRequest(CredentialDownloadRequestDTO requestDTO, JsonNode requestedCredentialJSON) throws IOException, NoSuchFieldException { + if(requestedCredentialJSON.has("response") && requestedCredentialJSON.get("response").has("id")) { + String requestedIndividualId = requestedCredentialJSON.get("response").get("id").asText(); + if (!requestDTO.getIndividualId().equals(requestedIndividualId)) { + throw new InvalidInputException(PlatformErrorMessages.MIMOTO_PGS_INVALID_INPUT_PARAMETER.getMessage() + " - " + "individualId"); + } + } + } +} diff --git a/src/main/java/io/mosip/mimoto/util/IdpUtil.java b/src/main/java/io/mosip/mimoto/util/IdpUtil.java new file mode 100644 index 000000000..934320d8f --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/IdpUtil.java @@ -0,0 +1,35 @@ +package io.mosip.mimoto.util; + +import io.mosip.mimoto.dto.mimoto.AppOTPRequestDTO; +import io.mosip.mimoto.dto.mimoto.BindingOtpRequestDto; +import io.mosip.mimoto.exception.InvalidInputException; +import io.mosip.mimoto.exception.PlatformErrorMessages; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +@Component +public class IdpUtil { + + private static Logger logger = LoggerFactory.getLogger(IdpUtil.class); + + @Value("${mosip.notificationtype:EMAIL|PHONE}") + private String notificationType; + public void validateNotificationChannel(BindingOtpRequestDto requestDTO){ + List incorrectNotificationChannel = new ArrayList(); + logger.info("\n Notification Types from application-default.properties in mosip-config - > " + notificationType); + incorrectNotificationChannel = requestDTO.getRequest().getOtpChannels() + .stream() + .filter(otpChannel -> !notificationType.contains(otpChannel)) + .collect(Collectors.toList()); + if(incorrectNotificationChannel.size() > 0) { + logger.error("Invalid Input is received in otpChannels " + String.join(",", incorrectNotificationChannel)); + throw new InvalidInputException(PlatformErrorMessages.MIMOTO_PGS_INVALID_INPUT_PARAMETER.getMessage() + " - " + "otpChannels"); + } + } +} diff --git a/src/main/java/io/mosip/mimoto/util/ResidentServiceUtil.java b/src/main/java/io/mosip/mimoto/util/ResidentServiceUtil.java new file mode 100644 index 000000000..56f25173e --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/ResidentServiceUtil.java @@ -0,0 +1,35 @@ +package io.mosip.mimoto.util; + +import io.mosip.mimoto.dto.mimoto.AppOTPRequestDTO; +import io.mosip.mimoto.exception.InvalidInputException; +import io.mosip.mimoto.exception.PlatformErrorMessages; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +@Component +public class ResidentServiceUtil { + + private static Logger logger = LoggerFactory.getLogger(ResidentServiceUtil.class); + + @Value("${mosip.notificationtype:EMAIL|PHONE}") + private String notificationType; + + public void validateNotificationChannel(AppOTPRequestDTO requestDTO){ + List incorrectNotificationChannel = new ArrayList(); + logger.info("\n Notification Types from application-default.properties in mosip-config - > " + notificationType); + incorrectNotificationChannel = requestDTO.getOtpChannel() + .stream() + .filter(otpChannel -> !notificationType.contains(otpChannel)) + .collect(Collectors.toList()); + if(incorrectNotificationChannel.size() > 0) { + logger.error("Invalid Input is received in otpChannels " + String.join(",", incorrectNotificationChannel)); + throw new InvalidInputException(PlatformErrorMessages.MIMOTO_PGS_INVALID_INPUT_PARAMETER.getMessage() + " - " + "otpChannels"); + } + } +} diff --git a/src/main/java/io/mosip/mimoto/util/Utilities.java b/src/main/java/io/mosip/mimoto/util/Utilities.java index ecaddeeed..e36ddb78b 100644 --- a/src/main/java/io/mosip/mimoto/util/Utilities.java +++ b/src/main/java/io/mosip/mimoto/util/Utilities.java @@ -111,6 +111,14 @@ public JsonNode getVC(String requestId) throws JsonParseException, JsonMappingEx return null; } + public JsonNode getRequestVC(String requestId) throws JsonParseException, JsonMappingException, IOException { + Path resourcePath = Path.of(dataPath, String.format(CredentialShareServiceImpl.VC_REQUEST_FILE_NAME, requestId)); + if (Files.exists(resourcePath)) { + return objectMapper.readValue(resourcePath.toFile(), JsonNode.class); + } + return null; + } + public JsonNode getDecryptedVC(String requestId) throws JsonParseException, JsonMappingException, IOException { Path resourcePath = Path.of(dataPath, String.format(CredentialShareServiceImpl.CARD_JSON_FILE_NAME, requestId)); if (Files.exists(resourcePath)) { diff --git a/src/main/java/io/mosip/mimoto/util/ValidationUtil.java b/src/main/java/io/mosip/mimoto/util/ValidationUtil.java new file mode 100644 index 000000000..b817445d1 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/ValidationUtil.java @@ -0,0 +1,20 @@ +package io.mosip.mimoto.util; + +import io.mosip.mimoto.exception.InvalidInputException; +import org.springframework.stereotype.Component; +import org.springframework.validation.BindingResult; +import org.springframework.validation.FieldError; + + +@Component +public class ValidationUtil { + public static void validateInputRequest(BindingResult result){ + if(result.hasErrors()){ + FieldError fieldError = result.getFieldError(); + if(fieldError != null) { + String errorMessage = fieldError.getField() + " " + fieldError.getDefaultMessage(); + throw new InvalidInputException(errorMessage); + } + } + } +} diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 52477743f..0cdf46264 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -1,9 +1,9 @@ # MOSIP -mosipbox.public.url=https://api-internal.dev2.mosip.net -public.internet.url=https://api.dev2.mosip.net -public.url=https://api-internal.dev2.mosip.net -keycloak.internal.url=https://iam.dev2.mosip.net/ +mosipbox.public.url=https://api-internal.qatriple.mosip.net +public.internet.url=https://api.qatriple.mosip.net +public.url=https://api-internal.qatriple.mosip.net +keycloak.internal.url=https://iam.qatriple.mosip.net/ # Resident service mosip.resident.base.url=${mosipbox.public.url}/resident/v1 @@ -169,9 +169,14 @@ mosip.iam.adapter.clientid=mpartner-default-mobile # dev3 # mosip.iam.adapter.clientsecret=nD1CevIBri1X0Jzj # dev2 -mosip.iam.adapter.clientsecret=l22WdJg9Qdrf3B90 +# mosip.iam.adapter.clientsecret=l22WdJg9Qdrf3B90 # qa1201 # mosip.iam.adapter.clientsecret=KXGkd7XMbsoxCUz9 + + +# qatriple +mosip.iam.adapter.clientsecret=vl3ox2rvSeW78LzL + mosip.iam.adapter.appid=partner mosip.iam.adapter.issuerURL=${mosipbox.public.url}/auth/realms/mosip diff --git a/src/main/resources/bootstrap.properties b/src/main/resources/bootstrap.properties index 9805fe409..efc039c70 100644 --- a/src/main/resources/bootstrap.properties +++ b/src/main/resources/bootstrap.properties @@ -1,7 +1,7 @@ spring.cloud.config.uri=localhost spring.cloud.config.label=develop spring.profiles.active=local -spring.cloud.config.name=mimoto,inji +spring.cloud.config.name=mimoto,inji,application spring.application.name=mimoto management.endpoint.health.show-details=always diff --git a/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java b/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java index 118409ced..9426286f9 100644 --- a/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java @@ -207,6 +207,7 @@ public void downloadTest() throws Exception { CredentialDownloadRequestDTO requestDTO = new CredentialDownloadRequestDTO(); requestDTO.setRequestId("requestId"); + requestDTO.setIndividualId("individualId"); JsonNode credentialJSON = JsonNodeFactory.instance.objectNode(); Mockito.when(utilities.getVC(Mockito.anyString())).thenReturn(credentialJSON); @@ -214,6 +215,9 @@ public void downloadTest() throws Exception { JsonNode decryptedCredentialJSON = JsonNodeFactory.instance.objectNode(); Mockito.when(utilities.getDecryptedVC(Mockito.anyString())).thenReturn(decryptedCredentialJSON); + JsonNode requestCredentialJSON = JsonNodeFactory.instance.objectNode(); + Mockito.when(utilities.getRequestVC(Mockito.anyString())).thenReturn(requestCredentialJSON); + this.mockMvc.perform(post("/credentialshare/download").contentType(MediaType.APPLICATION_JSON_VALUE) .content(JsonUtils.javaObjectToJsonString(requestDTO))) .andExpect(status().isOk()); From 7a730c6442b82a1b5f7737bc6b8bd39ebc7c2ce5 Mon Sep 17 00:00:00 2001 From: vijay151096 <94220135+vijay151096@users.noreply.github.com> Date: Wed, 28 Jun 2023 14:40:28 +0530 Subject: [PATCH 056/860] Update push_trigger.yml Signed-off-by: vijay151096 <94220135+vijay151096@users.noreply.github.com> --- .github/workflows/push_trigger.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/push_trigger.yml b/.github/workflows/push_trigger.yml index 45c7ca09e..46409a87d 100644 --- a/.github/workflows/push_trigger.yml +++ b/.github/workflows/push_trigger.yml @@ -7,6 +7,7 @@ on: - master - 1.* - develop + - api-request-validation - release* jobs: From edc5fb48723896a72aa5bacd1d620eeda9fc7d2d Mon Sep 17 00:00:00 2001 From: Vijay Date: Thu, 29 Jun 2023 15:38:25 +0530 Subject: [PATCH 057/860] fix(#MOSIP-27873): [Vijay] remove feature branch name from push trigger --- .github/workflows/push_trigger.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/push_trigger.yml b/.github/workflows/push_trigger.yml index 46409a87d..45c7ca09e 100644 --- a/.github/workflows/push_trigger.yml +++ b/.github/workflows/push_trigger.yml @@ -7,7 +7,6 @@ on: - master - 1.* - develop - - api-request-validation - release* jobs: From 24d46a18e0f9cba154f1d85e73d384ba397b1da8 Mon Sep 17 00:00:00 2001 From: Vijay Date: Thu, 29 Jun 2023 17:34:01 +0530 Subject: [PATCH 058/860] fix(#MOSIP-27873): [Vijay] handle the PR comments and optimise --- .../controller/CredentialShareController.java | 6 +- .../mimoto/controller/IdpController.java | 7 +-- .../controller/ResidentServiceController.java | 9 ++- .../mimoto/dto/mimoto/AppOTPRequestDTO.java | 2 +- .../dto/mimoto/BindingOtpRequestDto.java | 3 + .../mimoto/util/CredentialShareUtil.java | 21 ------- .../java/io/mosip/mimoto/util/IdpUtil.java | 35 ----------- .../mosip/mimoto/util/RequestValidator.java | 59 +++++++++++++++++++ .../mimoto/util/ResidentServiceUtil.java | 35 ----------- .../io/mosip/mimoto/util/ValidationUtil.java | 20 ------- src/main/resources/bootstrap.properties | 2 +- 11 files changed, 74 insertions(+), 125 deletions(-) delete mode 100644 src/main/java/io/mosip/mimoto/util/CredentialShareUtil.java delete mode 100644 src/main/java/io/mosip/mimoto/util/IdpUtil.java create mode 100644 src/main/java/io/mosip/mimoto/util/RequestValidator.java delete mode 100644 src/main/java/io/mosip/mimoto/util/ResidentServiceUtil.java delete mode 100644 src/main/java/io/mosip/mimoto/util/ValidationUtil.java diff --git a/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java b/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java index 977f65540..86eea8632 100644 --- a/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java +++ b/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java @@ -72,7 +72,7 @@ public class CredentialShareController { public CryptoCoreUtil cryptoCoreUtil; @Autowired - CredentialShareUtil credentialShareUtil; + RequestValidator requestValidator; private Gson gson = new Gson(); @@ -190,14 +190,14 @@ public ResponseEntity requestStatus(@PathVariable String requestId) public ResponseEntity download(@Valid @RequestBody CredentialDownloadRequestDTO requestDTO, BindingResult result) throws Exception { try { - ValidationUtil.validateInputRequest(result); + requestValidator.validateInputRequest(result); JsonNode decryptedCredentialJSON = utilities.getDecryptedVC(requestDTO.getRequestId()); JsonNode requestedCredentialJSON = utilities.getRequestVC(requestDTO.getRequestId()); JsonNode credentialJSON = utilities.getVC(requestDTO.getRequestId()); // Combine original encrypted verifiable credential and decrypted if (decryptedCredentialJSON != null && credentialJSON != null) { - credentialShareUtil.validateCredentialDownloadRequest(requestDTO, requestedCredentialJSON); + requestValidator.validateCredentialDownloadRequest(requestDTO, requestedCredentialJSON); CredentialDownloadResponseDTO credentialDownloadBody = new CredentialDownloadResponseDTO(); credentialDownloadBody.setCredential(decryptedCredentialJSON); credentialDownloadBody.setVerifiableCredential(credentialJSON); diff --git a/src/main/java/io/mosip/mimoto/controller/IdpController.java b/src/main/java/io/mosip/mimoto/controller/IdpController.java index 2b0ea9fad..29758e3f6 100644 --- a/src/main/java/io/mosip/mimoto/controller/IdpController.java +++ b/src/main/java/io/mosip/mimoto/controller/IdpController.java @@ -9,7 +9,6 @@ import io.mosip.mimoto.core.http.ResponseWrapper; import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.mimoto.*; -import io.mosip.mimoto.exception.ApisResourceAccessException; import io.mosip.mimoto.exception.IdpException; import io.mosip.mimoto.exception.PlatformErrorMessages; import io.mosip.mimoto.service.RestClientService; @@ -44,14 +43,14 @@ public class IdpController { private ObjectMapper objectMapper; @Autowired - IdpUtil idpUtil; + RequestValidator requestValidator; @PostMapping("/binding-otp") @SuppressWarnings("unchecked") public ResponseEntity otpRequest(@Valid @RequestBody BindingOtpRequestDto requestDTO, BindingResult result) throws Exception { logger.debug("Received binding-otp request : " + JsonUtils.javaObjectToJsonString(requestDTO)); - ValidationUtil.validateInputRequest(result); - idpUtil.validateNotificationChannel(requestDTO); + requestValidator.validateInputRequest(result); + requestValidator.validateNotificationChannel(requestDTO.getRequest().getOtpChannels()); ResponseWrapper response = null; try { response = (ResponseWrapper) restClientService diff --git a/src/main/java/io/mosip/mimoto/controller/ResidentServiceController.java b/src/main/java/io/mosip/mimoto/controller/ResidentServiceController.java index ea90df576..ff8fc462d 100644 --- a/src/main/java/io/mosip/mimoto/controller/ResidentServiceController.java +++ b/src/main/java/io/mosip/mimoto/controller/ResidentServiceController.java @@ -2,8 +2,7 @@ import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.dto.resident.*; -import io.mosip.mimoto.util.ResidentServiceUtil; -import io.mosip.mimoto.util.ValidationUtil; +import io.mosip.mimoto.util.RequestValidator; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.http.HttpStatus; @@ -33,7 +32,7 @@ public class ResidentServiceController { public RestClientService restClientService; @Autowired - ResidentServiceUtil residentServiceUtil; + RequestValidator requestValidator; @Autowired Environment env; @@ -48,8 +47,8 @@ public class ResidentServiceController { @PostMapping("/req/otp") @SuppressWarnings("unchecked") public ResponseEntity otpRequest(@Valid @RequestBody AppOTPRequestDTO requestDTO, BindingResult result) throws Exception { - ValidationUtil.validateInputRequest(result); - residentServiceUtil.validateNotificationChannel(requestDTO); + requestValidator.validateInputRequest(result); + requestValidator.validateNotificationChannel(requestDTO.getOtpChannel()); OTPRequestDTO mosipOTPRequestPayload = new OTPRequestDTO(); mosipOTPRequestPayload.setVersion("1.0"); mosipOTPRequestPayload.setId("mosip.identity.otp.internal"); diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/AppOTPRequestDTO.java b/src/main/java/io/mosip/mimoto/dto/mimoto/AppOTPRequestDTO.java index 044878bf6..55dc3afe4 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/AppOTPRequestDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/AppOTPRequestDTO.java @@ -12,7 +12,7 @@ public class AppOTPRequestDTO { @NotNull private String individualId; @NotNull - @Pattern(regexp = "UIN|VID") + @Pattern(regexp = "UIN|VID", message = "Only UIN or VID is allowed") private String individualIdType; @NotEmpty @NotNull diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpRequestDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpRequestDto.java index cac950474..f9a8bab6a 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpRequestDto.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpRequestDto.java @@ -4,6 +4,7 @@ import lombok.Data; import lombok.NoArgsConstructor; +import javax.validation.Valid; import javax.validation.constraints.NotNull; @Data @@ -11,6 +12,8 @@ @NoArgsConstructor public class BindingOtpRequestDto { private String requestTime; + + @Valid @NotNull private BindingOtpInnerReqDto request; } diff --git a/src/main/java/io/mosip/mimoto/util/CredentialShareUtil.java b/src/main/java/io/mosip/mimoto/util/CredentialShareUtil.java deleted file mode 100644 index 4dd547799..000000000 --- a/src/main/java/io/mosip/mimoto/util/CredentialShareUtil.java +++ /dev/null @@ -1,21 +0,0 @@ -package io.mosip.mimoto.util; - -import com.fasterxml.jackson.databind.JsonNode; -import io.mosip.mimoto.dto.mimoto.CredentialDownloadRequestDTO; -import io.mosip.mimoto.exception.InvalidInputException; -import io.mosip.mimoto.exception.PlatformErrorMessages; -import org.springframework.stereotype.Component; - -import java.io.IOException; - -@Component -public class CredentialShareUtil { - public void validateCredentialDownloadRequest(CredentialDownloadRequestDTO requestDTO, JsonNode requestedCredentialJSON) throws IOException, NoSuchFieldException { - if(requestedCredentialJSON.has("response") && requestedCredentialJSON.get("response").has("id")) { - String requestedIndividualId = requestedCredentialJSON.get("response").get("id").asText(); - if (!requestDTO.getIndividualId().equals(requestedIndividualId)) { - throw new InvalidInputException(PlatformErrorMessages.MIMOTO_PGS_INVALID_INPUT_PARAMETER.getMessage() + " - " + "individualId"); - } - } - } -} diff --git a/src/main/java/io/mosip/mimoto/util/IdpUtil.java b/src/main/java/io/mosip/mimoto/util/IdpUtil.java deleted file mode 100644 index 934320d8f..000000000 --- a/src/main/java/io/mosip/mimoto/util/IdpUtil.java +++ /dev/null @@ -1,35 +0,0 @@ -package io.mosip.mimoto.util; - -import io.mosip.mimoto.dto.mimoto.AppOTPRequestDTO; -import io.mosip.mimoto.dto.mimoto.BindingOtpRequestDto; -import io.mosip.mimoto.exception.InvalidInputException; -import io.mosip.mimoto.exception.PlatformErrorMessages; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; - -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - -@Component -public class IdpUtil { - - private static Logger logger = LoggerFactory.getLogger(IdpUtil.class); - - @Value("${mosip.notificationtype:EMAIL|PHONE}") - private String notificationType; - public void validateNotificationChannel(BindingOtpRequestDto requestDTO){ - List incorrectNotificationChannel = new ArrayList(); - logger.info("\n Notification Types from application-default.properties in mosip-config - > " + notificationType); - incorrectNotificationChannel = requestDTO.getRequest().getOtpChannels() - .stream() - .filter(otpChannel -> !notificationType.contains(otpChannel)) - .collect(Collectors.toList()); - if(incorrectNotificationChannel.size() > 0) { - logger.error("Invalid Input is received in otpChannels " + String.join(",", incorrectNotificationChannel)); - throw new InvalidInputException(PlatformErrorMessages.MIMOTO_PGS_INVALID_INPUT_PARAMETER.getMessage() + " - " + "otpChannels"); - } - } -} diff --git a/src/main/java/io/mosip/mimoto/util/RequestValidator.java b/src/main/java/io/mosip/mimoto/util/RequestValidator.java new file mode 100644 index 000000000..a904172d7 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/RequestValidator.java @@ -0,0 +1,59 @@ +package io.mosip.mimoto.util; + +import com.fasterxml.jackson.databind.JsonNode; +import io.mosip.mimoto.dto.mimoto.AppOTPRequestDTO; +import io.mosip.mimoto.dto.mimoto.CredentialDownloadRequestDTO; +import io.mosip.mimoto.exception.InvalidInputException; +import io.mosip.mimoto.exception.PlatformErrorMessages; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.validation.BindingResult; +import org.springframework.validation.FieldError; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + + +@Component +public class RequestValidator { + + private static Logger logger = LoggerFactory.getLogger(RequestValidator.class); + + @Value("${mosip.notificationtype:EMAIL|PHONE}") + private String notificationType; + public void validateInputRequest(BindingResult result){ + if(result.hasErrors()){ + FieldError fieldError = result.getFieldError(); + if(fieldError != null) { + String errorMessage = fieldError.getField() + " " + fieldError.getDefaultMessage(); + throw new InvalidInputException(errorMessage); + } + } + } + + public void validateNotificationChannel(List otpChannelList){ + List incorrectNotificationChannel = new ArrayList(); + logger.info("\n Notification Types from application-default.properties in mosip-config - > " + notificationType); + incorrectNotificationChannel = otpChannelList + .stream() + .filter(otpChannel -> !notificationType.contains(otpChannel)) + .collect(Collectors.toList()); + if(incorrectNotificationChannel.size() > 0) { + logger.error("Invalid Input is received in otpChannels " + String.join(",", incorrectNotificationChannel)); + throw new InvalidInputException(PlatformErrorMessages.MIMOTO_PGS_INVALID_INPUT_PARAMETER.getMessage() + " - " + "otpChannels"); + } + } + + public void validateCredentialDownloadRequest(CredentialDownloadRequestDTO requestDTO, JsonNode requestedCredentialJSON) throws IOException, NoSuchFieldException { + if(requestedCredentialJSON.has("response") && requestedCredentialJSON.get("response").has("id")) { + String requestedIndividualId = requestedCredentialJSON.get("response").get("id").asText(); + if (!requestDTO.getIndividualId().equals(requestedIndividualId)) { + throw new InvalidInputException(PlatformErrorMessages.MIMOTO_PGS_INVALID_INPUT_PARAMETER.getMessage() + " - " + "individualId"); + } + } + } +} diff --git a/src/main/java/io/mosip/mimoto/util/ResidentServiceUtil.java b/src/main/java/io/mosip/mimoto/util/ResidentServiceUtil.java deleted file mode 100644 index 56f25173e..000000000 --- a/src/main/java/io/mosip/mimoto/util/ResidentServiceUtil.java +++ /dev/null @@ -1,35 +0,0 @@ -package io.mosip.mimoto.util; - -import io.mosip.mimoto.dto.mimoto.AppOTPRequestDTO; -import io.mosip.mimoto.exception.InvalidInputException; -import io.mosip.mimoto.exception.PlatformErrorMessages; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; - -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - -@Component -public class ResidentServiceUtil { - - private static Logger logger = LoggerFactory.getLogger(ResidentServiceUtil.class); - - @Value("${mosip.notificationtype:EMAIL|PHONE}") - private String notificationType; - - public void validateNotificationChannel(AppOTPRequestDTO requestDTO){ - List incorrectNotificationChannel = new ArrayList(); - logger.info("\n Notification Types from application-default.properties in mosip-config - > " + notificationType); - incorrectNotificationChannel = requestDTO.getOtpChannel() - .stream() - .filter(otpChannel -> !notificationType.contains(otpChannel)) - .collect(Collectors.toList()); - if(incorrectNotificationChannel.size() > 0) { - logger.error("Invalid Input is received in otpChannels " + String.join(",", incorrectNotificationChannel)); - throw new InvalidInputException(PlatformErrorMessages.MIMOTO_PGS_INVALID_INPUT_PARAMETER.getMessage() + " - " + "otpChannels"); - } - } -} diff --git a/src/main/java/io/mosip/mimoto/util/ValidationUtil.java b/src/main/java/io/mosip/mimoto/util/ValidationUtil.java deleted file mode 100644 index b817445d1..000000000 --- a/src/main/java/io/mosip/mimoto/util/ValidationUtil.java +++ /dev/null @@ -1,20 +0,0 @@ -package io.mosip.mimoto.util; - -import io.mosip.mimoto.exception.InvalidInputException; -import org.springframework.stereotype.Component; -import org.springframework.validation.BindingResult; -import org.springframework.validation.FieldError; - - -@Component -public class ValidationUtil { - public static void validateInputRequest(BindingResult result){ - if(result.hasErrors()){ - FieldError fieldError = result.getFieldError(); - if(fieldError != null) { - String errorMessage = fieldError.getField() + " " + fieldError.getDefaultMessage(); - throw new InvalidInputException(errorMessage); - } - } - } -} diff --git a/src/main/resources/bootstrap.properties b/src/main/resources/bootstrap.properties index efc039c70..9805fe409 100644 --- a/src/main/resources/bootstrap.properties +++ b/src/main/resources/bootstrap.properties @@ -1,7 +1,7 @@ spring.cloud.config.uri=localhost spring.cloud.config.label=develop spring.profiles.active=local -spring.cloud.config.name=mimoto,inji,application +spring.cloud.config.name=mimoto,inji spring.application.name=mimoto management.endpoint.health.show-details=always From 7c25be79b88f49262b00f3614c7493ccfe20b604 Mon Sep 17 00:00:00 2001 From: Kiruthika Jeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Date: Thu, 13 Jul 2023 15:57:40 +0530 Subject: [PATCH 059/860] feat(INJI-161): [Kiruthika] log app id in the access logs Issue Link https://mosip.atlassian.net/browse/INJI-161 --- src/main/resources/application-local.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 0cdf46264..0140736ea 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -149,7 +149,7 @@ server.tomcat.accesslog.prefix=stdout server.tomcat.accesslog.buffered=false server.tomcat.accesslog.suffix= server.tomcat.accesslog.file-date-format= -server.tomcat.accesslog.pattern={"@timestamp":"%{yyyy-MM-dd'T'HH:mm:ss.SSS'Z'}t","level":"ACCESS","level_value":70000,"traceId":"%{X-B3-TraceId}i","statusCode":%s,"req.requestURI":"%U","bytesSent":%b,"timeTaken":%T,"appName":"${spring.application.name}"} +server.tomcat.accesslog.pattern={"@timestamp":"%{yyyy-MM-dd'T'HH:mm:ss.SSS'Z'}t","level":"ACCESS","level_value":70000,"traceId":"%{X-B3-TraceId}i","appId":"%{X-AppId}i","statusCode":%s,"req.requestURI":"%U","bytesSent":%b,"timeTaken":%T,"appName":"${spring.application.name}"} server.tomcat.accesslog.className=io.mosip.kernel.core.logger.config.SleuthValve registration.processor.unMaskedUin.length=5 From 5106b358688910b2a4f94409b79ee0e317a3f8e3 Mon Sep 17 00:00:00 2001 From: vijay151096 <94220135+vijay151096@users.noreply.github.com> Date: Tue, 18 Jul 2023 11:58:41 +0530 Subject: [PATCH 060/860] Removed the Restriction on the IndividualIDType Signed-off-by: vijay151096 <94220135+vijay151096@users.noreply.github.com> --- src/main/java/io/mosip/mimoto/dto/mimoto/AppOTPRequestDTO.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/AppOTPRequestDTO.java b/src/main/java/io/mosip/mimoto/dto/mimoto/AppOTPRequestDTO.java index 55dc3afe4..9d8320f54 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/AppOTPRequestDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/AppOTPRequestDTO.java @@ -11,7 +11,6 @@ public class AppOTPRequestDTO { @NotNull private String individualId; - @NotNull @Pattern(regexp = "UIN|VID", message = "Only UIN or VID is allowed") private String individualIdType; @NotEmpty @@ -19,4 +18,4 @@ public class AppOTPRequestDTO { private List otpChannel; @NotNull private String transactionID; -} \ No newline at end of file +} From 727015ad5dbd92ad5d33ecca07d48b4d6589b8ff Mon Sep 17 00:00:00 2001 From: Kiruthika Jeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Date: Fri, 21 Jul 2023 12:29:46 +0530 Subject: [PATCH 061/860] refactor(INJI-219): [Kiruthika] fix major severity code smells as per SonarQube rules --- .../mimoto/controller/IdpController.java | 6 +- .../dto/mimoto/AttestationStatement.java | 3 +- .../ApisResourceAccessException.java | 1 + .../impl/CredentialShareServiceImpl.java | 90 +++++++++------ .../service/impl/RestClientServiceImpl.java | 103 ++++++++---------- .../io/mosip/mimoto/util/CryptoCoreUtil.java | 6 +- .../java/io/mosip/mimoto/util/DateUtils.java | 2 +- .../java/io/mosip/mimoto/util/JoseUtil.java | 4 +- .../mosip/mimoto/util/RequestValidator.java | 5 +- .../io/mosip/mimoto/util/RestApiClient.java | 16 +-- .../io/mosip/mimoto/util/JoseUtilTest.java | 21 ++++ 11 files changed, 146 insertions(+), 111 deletions(-) create mode 100644 src/test/java/io/mosip/mimoto/util/JoseUtilTest.java diff --git a/src/main/java/io/mosip/mimoto/controller/IdpController.java b/src/main/java/io/mosip/mimoto/controller/IdpController.java index 29758e3f6..348f10278 100644 --- a/src/main/java/io/mosip/mimoto/controller/IdpController.java +++ b/src/main/java/io/mosip/mimoto/controller/IdpController.java @@ -29,7 +29,7 @@ public class IdpController { private final Logger logger = LoggerUtil.getLogger(IdpController.class); - private static final boolean useBearerToken = true; + private static final boolean USE_BEARER_TOKEN = true; private static final String ID = "mosip.mimoto.idp"; private Gson gson = new Gson(); @@ -55,7 +55,7 @@ public ResponseEntity otpRequest(@Valid @RequestBody BindingOtpRequestDt try { response = (ResponseWrapper) restClientService .postApi(ApiName.BINDING_OTP, - requestDTO, ResponseWrapper.class, useBearerToken); + requestDTO, ResponseWrapper.class, USE_BEARER_TOKEN); if (response == null) throw new IdpException(); @@ -85,7 +85,7 @@ public ResponseEntity request(@RequestBody WalletBindingRequestDTO reque ResponseWrapper internalResponse = (ResponseWrapper) restClientService .postApi(ApiName.WALLET_BINDING, - req, ResponseWrapper.class, useBearerToken); + req, ResponseWrapper.class, USE_BEARER_TOKEN); if (internalResponse == null) throw new IdpException(); diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/AttestationStatement.java b/src/main/java/io/mosip/mimoto/dto/mimoto/AttestationStatement.java index e5449d20d..2771318e0 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/AttestationStatement.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/AttestationStatement.java @@ -18,13 +18,14 @@ package io.mosip.mimoto.dto.mimoto; import com.google.api.client.json.webtoken.JsonWebSignature; +import com.google.api.client.json.webtoken.JsonWebToken.Payload; import com.google.api.client.util.Base64; import com.google.api.client.util.Key; /** * A statement returned by the Attestation API. */ -public class AttestationStatement extends JsonWebSignature.Payload { +public class AttestationStatement extends Payload { /** * Embedded nonce sent as part of the request. */ diff --git a/src/main/java/io/mosip/mimoto/exception/ApisResourceAccessException.java b/src/main/java/io/mosip/mimoto/exception/ApisResourceAccessException.java index 5d6c88671..a41746b83 100644 --- a/src/main/java/io/mosip/mimoto/exception/ApisResourceAccessException.java +++ b/src/main/java/io/mosip/mimoto/exception/ApisResourceAccessException.java @@ -37,5 +37,6 @@ public ApisResourceAccessException(String message, Throwable cause) { } public ApisResourceAccessException(String code, String message, Exception e) { + // TODO document why this method is empty } } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java index 48e1fe015..133ca8e1d 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java @@ -28,6 +28,7 @@ import javax.crypto.BadPaddingException; import javax.crypto.IllegalBlockSizeException; +import javax.validation.constraints.NotNull; import java.io.ByteArrayInputStream; import java.io.DataInputStream; import java.io.IOException; @@ -139,7 +140,7 @@ public boolean generateDocuments(EventModel eventModel) throws Exception { @SuppressWarnings("unchecked") Map proofMap = (Map) eventModel.getEvent().getData().get("proof"); String sign = proofMap.get("signature").toString(); - + credentialSubject = getCredentialSubject(decodedCredential); org.json.JSONObject credentialJSON = decrypt(decodedCredential, credentialSubject, encryptionPin); @@ -264,23 +265,12 @@ public byte[] createJSONFile(org.json.JSONObject credential, String individualBi for (String value : templateValue.split(",")) { Object object = credential.has(value) ? credential.get(value) : null; if (object instanceof ArrayList) { - org.json.simple.JSONArray node = new org.json.simple.JSONArray(); - node.addAll(credential.getJSONArray(value).toList()); - JsonValue[] jsonValues = JsonUtil.mapJsonNodeToJavaObject(JsonValue.class, node); - for (JsonValue jsonValue : jsonValues) { - if (supportedLang.contains(jsonValue.getLanguage())) { - outputJSON.put(value + "_" + jsonValue.getLanguage(), jsonValue); - } - } + generateOutputJSON(credential, outputJSON, value); } else if (object instanceof LinkedHashMap) { org.json.JSONObject json = credential.getJSONObject(value); outputJSON.put(value, json.get(VALUE)); } else { - if (key.equals("biometrics")) { - outputJSON.put(value, getBiometricsDataJSON(individualBiometric)); - } else { - outputJSON.put(value, object); - } + generateOutputJSON(individualBiometric, outputJSON, key, value, object); } } } @@ -304,29 +294,12 @@ public org.json.JSONObject getBiometricsDataJSON(String individualBiometric) { List subType = bdbInfo.getSubtype(); byte[] photoBytes = util.getPhotoByTypeAndSubType(bIRTypeList, type, subType); if (photoBytes != null) { - String data; - if (type.equalsIgnoreCase(BiometricType.FACE.value())) { - // Convert face image from JPEG2000 to JPG and encode with base64. - // Assume that the face image is in JPEG2000 format. - data = java.util.Base64.getEncoder().encodeToString(CommonUtil.convertJP2ToJPEGBytes(extractFaceImageData(photoBytes))); - } else { - data = java.util.Base64.getEncoder().encodeToString(photoBytes); - } + String data = getData(type, photoBytes); if (subType.isEmpty()) { - String formatPrefix = null; - if (type.equalsIgnoreCase(BiometricType.FACE.value())) { - formatPrefix = "data:image/jpg;base64,"; - } else { - formatPrefix = "data:binary;base64,"; - } + String formatPrefix = getFormatPrefix(type); biometrics.put(type, formatPrefix + data); } else { - org.json.JSONObject typeList = biometrics.has(type) ? biometrics.getJSONObject(type) - : new org.json.JSONObject(); - typeList.put(String.join("_", subType).toLowerCase(), "data:binary;base64," + data); - if (!biometrics.has(type)) { - biometrics.put(type, typeList); - } + addTypeToBiometricIfNotExists(biometrics, type, subType, data); } } } @@ -429,7 +402,7 @@ public org.json.JSONObject decryptAttribute(org.json.JSONObject data, String enc try { cryptoWithPinResponseDto = cryptoUtil.decryptWithPin(cryptoWithPinRequestDto); } catch (InvalidKeyException | NoSuchAlgorithmException | InvalidKeySpecException - | InvalidAlgorithmParameterException | IllegalBlockSizeException | BadPaddingException e) { + | InvalidAlgorithmParameterException | IllegalBlockSizeException | BadPaddingException e) { logger.error("Error while decrypting the data", e); throw new CryptoManagerException(PlatformErrorMessages.MIMOTO_INVALID_KEY_EXCEPTION.getCode(), PlatformErrorMessages.MIMOTO_INVALID_KEY_EXCEPTION.getMessage(), e); @@ -442,4 +415,51 @@ public org.json.JSONObject decryptAttribute(org.json.JSONObject data, String enc return data; } + private void generateOutputJSON(String individualBiometric, org.json.JSONObject outputJSON, String key, String value, Object object) { + if (key.equals("biometrics")) { + outputJSON.put(value, getBiometricsDataJSON(individualBiometric)); + } else { + outputJSON.put(value, object); + } + } + + private void generateOutputJSON(org.json.JSONObject credential, org.json.JSONObject outputJSON, String value) { + JSONArray node = new JSONArray(); + node.addAll(credential.getJSONArray(value).toList()); + JsonValue[] jsonValues = JsonUtil.mapJsonNodeToJavaObject(JsonValue.class, node); + for (JsonValue jsonValue : jsonValues) { + if (supportedLang.contains(jsonValue.getLanguage())) { + outputJSON.put(value + "_" + jsonValue.getLanguage(), jsonValue); + } + } + } + + private static org.json.JSONObject getBioMetricsJSONObject(org.json.JSONObject biometrics, String type) { + return biometrics.has(type) ? biometrics.getJSONObject(type) + : new org.json.JSONObject(); + } + + @NotNull + private static String getFormatPrefix(String type) { + return type.equalsIgnoreCase(BiometricType.FACE.value()) ? "data:image/jpg;base64," : "data:binary;base64,"; + } + + private String getData(String type, byte[] photoBytes) { + if (type.equalsIgnoreCase(BiometricType.FACE.value())) { + // Convert face image from JPEG2000 to JPG and encode with base64. + // Assume that the face image is in JPEG2000 format. + return Base64.getEncoder().encodeToString(CommonUtil.convertJP2ToJPEGBytes(extractFaceImageData(photoBytes))); + } else { + return Base64.getEncoder().encodeToString(photoBytes); + } + } + + private static void addTypeToBiometricIfNotExists(org.json.JSONObject biometrics, String type, List subType, String data) { + org.json.JSONObject typeList = biometrics.has(type) ? biometrics.getJSONObject(type) + : new org.json.JSONObject(); + typeList.put(String.join("_", subType).toLowerCase(), "data:binary;base64," + data); + if (!biometrics.has(type)) { + biometrics.put(type, typeList); + } + } } diff --git a/src/main/java/io/mosip/mimoto/service/impl/RestClientServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/RestClientServiceImpl.java index 5da61d2c7..c8ef09e34 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/RestClientServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/RestClientServiceImpl.java @@ -26,6 +26,8 @@ @Service public class RestClientServiceImpl implements RestClientService { + private static final String REST_CLIENT_SERVICE_IMPL_POST_API_ENTRY = "RestClientServiceImpl::postApi()::entry"; + private static final String REST_CLIENT_SERVICE_IMPL_POST_API_EXIT = "RestClientServiceImpl::postApi()::exit"; /** The logger. */ Logger logger = LoggerUtil.getLogger(RestClientServiceImpl.class); @@ -58,23 +60,12 @@ public Object getApi(ApiName apiName, List pathsegments, String queryPar if (apiHostIpPort != null) { builder = UriComponentsBuilder.fromUriString(apiHostIpPort); - if (!((pathsegments == null) || (pathsegments.isEmpty()))) { - for (String segment : pathsegments) { - if (!((segment == null) || (("").equals(segment)))) { - builder.pathSegment(segment); - } - } - + if (!checkNull(pathsegments)) { + addPathSegments(pathsegments, builder); } - if (!((queryParamName == null) || (("").equals(queryParamName)))) { - - String[] queryParamNameArr = queryParamName.split(","); - String[] queryParamValueArr = queryParamValue.split(","); - for (int i = 0; i < queryParamNameArr.length; i++) { - builder.queryParam(queryParamNameArr[i], queryParamValueArr[i]); - } - + if (!checkNull(queryParamName)) { + addQueryParam(queryParamName, queryParamValue, builder); } try { @@ -108,16 +99,11 @@ public Object getApi(ApiName apiName, List pathsegments, List qu if (apiHostIpPort != null) { builder = UriComponentsBuilder.fromUriString(apiHostIpPort); - if (!((pathsegments == null) || (pathsegments.isEmpty()))) { - for (String segment : pathsegments) { - if (!((segment == null) || (("").equals(segment)))) { - builder.pathSegment(segment); - } - } - + if (!checkNull(pathsegments)) { + addPathSegments(pathsegments, builder); } - if (((queryParamName != null) && (!queryParamName.isEmpty()))) { + if (!checkNull(queryParamName)) { for (int i = 0; i < queryParamName.size(); i++) { builder.queryParam(queryParamName.get(i), queryParamValue.get(i)); } @@ -144,7 +130,7 @@ public Object getApi(ApiName apiName, List pathsegments, List qu public Object postApi(ApiName apiName, String queryParamName, String queryParamValue, Object requestedData, Class responseType, MediaType mediaType) throws ApisResourceAccessException { - logger.debug("RestClientServiceImpl::postApi()::entry"); + logger.debug(REST_CLIENT_SERVICE_IMPL_POST_API_ENTRY); Object obj = null; String apiHostIpPort = env.getProperty(apiName.name()); @@ -153,13 +139,8 @@ public Object postApi(ApiName apiName, String queryParamName, String queryParamV builder = UriComponentsBuilder.fromUriString(apiHostIpPort); if (builder != null) { - if (!((queryParamName == null) || (("").equals(queryParamName)))) { - String[] queryParamNameArr = queryParamName.split(","); - String[] queryParamValueArr = queryParamValue.split(","); - - for (int i = 0; i < queryParamNameArr.length; i++) { - builder.queryParam(queryParamNameArr[i], queryParamValueArr[i]); - } + if (!checkNull(queryParamName)) { + addQueryParam(queryParamName, queryParamValue, builder); } try { @@ -173,7 +154,7 @@ public Object postApi(ApiName apiName, String queryParamName, String queryParamV } } - logger.debug("RestClientServiceImpl::postApi()::exit"); + logger.debug(REST_CLIENT_SERVICE_IMPL_POST_API_EXIT); return obj; } @@ -204,7 +185,7 @@ public Object postApi(ApiName apiName, String queryParamName, String queryParamV public Object postApi(ApiName apiName, List pathsegments, String queryParamName, String queryParamValue, Object requestedData, Class responseType) throws ApisResourceAccessException { - logger.debug("RestClientServiceImpl::postApi()::entry"); + logger.debug(REST_CLIENT_SERVICE_IMPL_POST_API_ENTRY); Object obj = null; String apiHostIpPort = env.getProperty(apiName.name()); UriComponentsBuilder builder = null; @@ -212,21 +193,16 @@ public Object postApi(ApiName apiName, List pathsegments, String queryPa builder = UriComponentsBuilder.fromUriString(apiHostIpPort); if (builder != null) { - if (!((pathsegments == null) || (pathsegments.isEmpty()))) { + if (!checkNull(pathsegments)) { for (String segment : pathsegments) { - if (!((segment == null) || (("").equals(segment)))) { + if (!checkNull(segment)) { builder.pathSegment(segment); } } } if (!checkNull(queryParamName)) { - String[] queryParamNameArr = queryParamName.split(","); - String[] queryParamValueArr = queryParamValue.split(","); - - for (int i = 0; i < queryParamNameArr.length; i++) { - builder.queryParam(queryParamNameArr[i], queryParamValueArr[i]); - } + addQueryParam(queryParamName, queryParamValue, builder); } try { @@ -240,7 +216,7 @@ public Object postApi(ApiName apiName, List pathsegments, String queryPa } } - logger.debug("RestClientServiceImpl::postApi()::exit"); + logger.debug(REST_CLIENT_SERVICE_IMPL_POST_API_EXIT); return obj; } @@ -249,7 +225,7 @@ public Object postApi(ApiName apiName, MediaType mediaType, List pathseg List queryParamValue, Object requestedData, Class responseType) throws ApisResourceAccessException { - logger.debug("RestClientServiceImpl::postApi()::entry"); + logger.debug(REST_CLIENT_SERVICE_IMPL_POST_API_ENTRY); Object obj = null; String apiHostIpPort = env.getProperty(apiName.name()); UriComponentsBuilder builder = null; @@ -257,13 +233,8 @@ public Object postApi(ApiName apiName, MediaType mediaType, List pathseg builder = UriComponentsBuilder.fromUriString(apiHostIpPort); if (builder != null) { - if (!((pathsegments == null) || (pathsegments.isEmpty()))) { - for (String segment : pathsegments) { - if (!((segment == null) || (("").equals(segment)))) { - builder.pathSegment(segment); - } - } - + if (!checkNull(pathsegments)) { + addPathSegments(pathsegments, builder); } if (!CollectionUtils.isEmpty(queryParamName)) { @@ -283,7 +254,7 @@ public Object postApi(ApiName apiName, MediaType mediaType, List pathseg } } - logger.debug("RestClientServiceImpl::postApi()::exit"); + logger.debug(REST_CLIENT_SERVICE_IMPL_POST_API_EXIT); return obj; } @@ -291,7 +262,7 @@ public Object postApi(ApiName apiName, MediaType mediaType, List pathseg public Object postApi(ApiName apiName, Object requestedData, Class responseType, boolean useBearerToken) throws ApisResourceAccessException { - logger.debug("RestClientServiceImpl::postApi()::entry"); + logger.debug(REST_CLIENT_SERVICE_IMPL_POST_API_ENTRY); Object obj = null; String apiHostIpPort = env.getProperty(apiName.name()); if (apiHostIpPort != null) { @@ -303,20 +274,38 @@ public Object postApi(ApiName apiName, PlatformErrorMessages.MIMOTO_RCT_UNKNOWN_RESOURCE_EXCEPTION.getMessage(), e); } } - logger.debug("RestClientServiceImpl::postApi()::exit"); + logger.debug(REST_CLIENT_SERVICE_IMPL_POST_API_EXIT); return obj; } /** * Check null. * - * @param queryParamName - * the query param name + * @param value the value passed * @return true, if successful */ - private boolean checkNull(String queryParamName) { + private boolean checkNull(String value) { + return ((value == null) || (("").equals(value))); + } + + private boolean checkNull(List value) { + return ((value == null) || (value.isEmpty())); + } + - return ((queryParamName == null) || (("").equals(queryParamName))); + private static void addQueryParam(String queryParamName, String queryParamValue, UriComponentsBuilder builder) { + String[] queryParamNameArr = queryParamName.split(","); + String[] queryParamValueArr = queryParamValue.split(","); + for (int i = 0; i < queryParamNameArr.length; i++) { + builder.queryParam(queryParamNameArr[i], queryParamValueArr[i]); + } } + private void addPathSegments(List pathSegments, UriComponentsBuilder builder) { + for (String segment : pathSegments) { + if (!checkNull(segment)) { + builder.pathSegment(segment); + } + } + } } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/util/CryptoCoreUtil.java b/src/main/java/io/mosip/mimoto/util/CryptoCoreUtil.java index c6e981fa3..36242364d 100644 --- a/src/main/java/io/mosip/mimoto/util/CryptoCoreUtil.java +++ b/src/main/java/io/mosip/mimoto/util/CryptoCoreUtil.java @@ -55,7 +55,7 @@ public class CryptoCoreUtil { private final static int THUMBPRINT_LENGTH = 32; private final static int NONCE = 12; - private final static int AADSize = 32; + private final static int AAD_SIZE = 32; public static final byte[] VERSION_RSA_2048 = "VER_R2".getBytes(); @Value("${mosip.partner.prependThumbprint:true}") @@ -124,9 +124,9 @@ public byte[] decryptData(byte[] requestData, PrivateKeyEntry privateKey) throws if (Arrays.equals(headerBytes, VERSION_RSA_2048)) { encryptedSymmetricKey = Arrays.copyOfRange(encryptedKey, THUMBPRINT_LENGTH + VERSION_RSA_2048.length, encryptedKey.length); - byte[] aad = Arrays.copyOfRange(encryptedData, 0, AADSize); + byte[] aad = Arrays.copyOfRange(encryptedData, 0, AAD_SIZE); byte[] nonce = Arrays.copyOfRange(aad, 0, NONCE); - byte[] encData = Arrays.copyOfRange(encryptedData, AADSize, encryptedData.length); + byte[] encData = Arrays.copyOfRange(encryptedData, AAD_SIZE, encryptedData.length); decryptedSymmetricKey = asymmetricDecrypt(privateKey.getPrivateKey(), ((RSAPrivateKey) privateKey.getPrivateKey()).getModulus(), encryptedSymmetricKey); symmetricKey = new SecretKeySpec(decryptedSymmetricKey, 0, decryptedSymmetricKey.length, "AES"); diff --git a/src/main/java/io/mosip/mimoto/util/DateUtils.java b/src/main/java/io/mosip/mimoto/util/DateUtils.java index 3c6b0a629..c55b7e2a0 100644 --- a/src/main/java/io/mosip/mimoto/util/DateUtils.java +++ b/src/main/java/io/mosip/mimoto/util/DateUtils.java @@ -635,7 +635,7 @@ public static String getUTCCurrentDateTimeString(String pattern) { * Provide UTC Current DateTime string for requestTime attribute. */ public static String getRequestTimeString() { - return DateUtils.getUTCCurrentDateTimeString("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); + return DateUtils.getUTCCurrentDateTimeString(UTC_DATETIME_PATTERN); } /** diff --git a/src/main/java/io/mosip/mimoto/util/JoseUtil.java b/src/main/java/io/mosip/mimoto/util/JoseUtil.java index 9516a40cc..f46882427 100644 --- a/src/main/java/io/mosip/mimoto/util/JoseUtil.java +++ b/src/main/java/io/mosip/mimoto/util/JoseUtil.java @@ -53,7 +53,7 @@ public static JwkDto getJwkFromPublicKey(String publicKeyString) throws NoSuchAl } private static RSAPublicKeySpec getKeySpecForRSAKey(String publicKeyString) { - String key = publicKeyString.replaceAll("\\n", "") + String key = publicKeyString.replace("\n", "") .replace("-----BEGIN RSA PUBLIC KEY-----", "") .replace("-----END RSA PUBLIC KEY-----", ""); @@ -66,7 +66,7 @@ private static RSAPublicKeySpec getKeySpecForRSAKey(String publicKeyString) { } private static RSAPublicKeySpec getKeySpecForPublicKey(String publicKeyString) throws NoSuchAlgorithmException, InvalidKeySpecException { - String key = publicKeyString.replaceAll("\\n", "") + String key = publicKeyString.replace("\n", "") .replace(BEGIN_KEY, "") .replace(END_KEY, ""); X509EncodedKeySpec spec = diff --git a/src/main/java/io/mosip/mimoto/util/RequestValidator.java b/src/main/java/io/mosip/mimoto/util/RequestValidator.java index a904172d7..2943f6deb 100644 --- a/src/main/java/io/mosip/mimoto/util/RequestValidator.java +++ b/src/main/java/io/mosip/mimoto/util/RequestValidator.java @@ -21,6 +21,7 @@ @Component public class RequestValidator { + public static final String RESPONSE = "response"; private static Logger logger = LoggerFactory.getLogger(RequestValidator.class); @Value("${mosip.notificationtype:EMAIL|PHONE}") @@ -49,8 +50,8 @@ public void validateNotificationChannel(List otpChannelList){ } public void validateCredentialDownloadRequest(CredentialDownloadRequestDTO requestDTO, JsonNode requestedCredentialJSON) throws IOException, NoSuchFieldException { - if(requestedCredentialJSON.has("response") && requestedCredentialJSON.get("response").has("id")) { - String requestedIndividualId = requestedCredentialJSON.get("response").get("id").asText(); + if(requestedCredentialJSON.has(RESPONSE) && requestedCredentialJSON.get(RESPONSE).has("id")) { + String requestedIndividualId = requestedCredentialJSON.get(RESPONSE).get("id").asText(); if (!requestDTO.getIndividualId().equals(requestedIndividualId)) { throw new InvalidInputException(PlatformErrorMessages.MIMOTO_PGS_INVALID_INPUT_PARAMETER.getMessage() + " - " + "individualId"); } diff --git a/src/main/java/io/mosip/mimoto/util/RestApiClient.java b/src/main/java/io/mosip/mimoto/util/RestApiClient.java index 7660d00bf..81072a15c 100644 --- a/src/main/java/io/mosip/mimoto/util/RestApiClient.java +++ b/src/main/java/io/mosip/mimoto/util/RestApiClient.java @@ -39,11 +39,13 @@ @Component public class RestApiClient { + public static final String TOKEN = "token"; + public static final String CONTENT_TYPE = "Content-Type"; /** * The logger. */ private Logger logger = LoggerUtil.getLogger(RestApiClient.class); - private static final String authorization = "Authorization="; + private static final String AUTHORIZATION = "Authorization="; private static final String RETRIED = "retry"; private static final String YES = "yes"; private static final String NO = "no"; @@ -154,7 +156,7 @@ public T postApi(String uri, MediaType mediaType, Object requestType, Class< HttpClientErrorException ex = (HttpClientErrorException)e; if (ex.getStatusCode().value() == 401) { // bearer token renew logic. Set token as empty so that it will auto-renew - System.setProperty("token", ""); + System.setProperty(TOKEN, ""); // try one more time to pass existing call result = (T) plainRestTemplate.postForObject( uri, setRequestHeader(requestType, mediaType, useBearerToken), responseClass); @@ -180,11 +182,11 @@ private HttpEntity setRequestHeader(Object requestType, MediaType mediaT private HttpEntity setRequestHeader(Object requestType, MediaType mediaType, boolean useBearerToken) throws IOException { MultiValueMap headers = new LinkedMultiValueMap(); if (mediaType != null) { - headers.add("Content-Type", mediaType.toString()); + headers.add(CONTENT_TYPE, mediaType.toString()); } if (useBearerToken) { - String bearerToken = System.getProperty("token"); + String bearerToken = System.getProperty(TOKEN); if (StringUtils.isEmpty(bearerToken)) bearerToken = getBearerToken(); headers.add("Authorization", bearerToken); @@ -199,7 +201,7 @@ private HttpEntity setRequestHeader(Object requestType, MediaType mediaT Iterator iterator = httpHeader.keySet().iterator(); while (iterator.hasNext()) { String key = iterator.next(); - if (!(headers.containsKey("Content-Type") && key.equals("Content-Type"))) + if (!(headers.containsKey(CONTENT_TYPE) && key.equals(CONTENT_TYPE))) headers.add(key, httpHeader.get(key).get(0)); } return new HttpEntity(httpEntity.getBody(), headers); @@ -230,9 +232,9 @@ private String getBearerToken() throws IOException { if (cookie.length == 0) throw new TokenGenerationFailedException(); String token = response.getHeaders("Set-Cookie")[0].getValue(); - token = token.replace(authorization, ""); + token = token.replace(AUTHORIZATION, ""); token = "Bearer " + token.substring(0, token.indexOf(';')); - System.setProperty("token", token); + System.setProperty(TOKEN, token); return token; } } diff --git a/src/test/java/io/mosip/mimoto/util/JoseUtilTest.java b/src/test/java/io/mosip/mimoto/util/JoseUtilTest.java new file mode 100644 index 000000000..77b0207ce --- /dev/null +++ b/src/test/java/io/mosip/mimoto/util/JoseUtilTest.java @@ -0,0 +1,21 @@ +package io.mosip.mimoto.util; + +import io.mosip.mimoto.dto.mimoto.JwkDto; +import junit.framework.TestCase; +import org.junit.Test; + +import java.security.NoSuchAlgorithmException; +import java.security.spec.InvalidKeySpecException; + +public class JoseUtilTest extends TestCase { + @Test + public void getJwkFromPublicKeyTest() throws NoSuchAlgorithmException, InvalidKeySpecException { + String publicKey = "-----BEGIN RSA PUBLIC KEY-----\nMIICCgKCAgEAn6+frMlD7DQqbxZW943hRLBApDj1/lHIJdLYSKEGIfwhd58gc0Y4\n1q11mPnpv7gAZ/Wm0iOAkWSzcIWljXFmGnLrUrBsp4WYKdPjqn4tkrCOjiZa5RPk\nY03a40Kz1lx0W9f94Naozglf6KFUSq+qAwuC5kiPxaxsjFA/LWIP+zT2QX/MnrX9\nv7gt2g0BC4pQ01eTTzhhwO2A7k5z3ucsb56ohND4xdIsdCMm1IczBjW0URSO60Bb\n7m5dlO8BFHJ6inV8awO2KHoADbp3wZgid4KqLJ0eVGyNViVFzj4rxSxL3vcYbyKS\nORWSlPZIZL9ZWO1cyPO9+Wxu29IKj4DQEt8glgITlBZ4L29uT7gFPAbypSn/8SvU\nBrNno8+GIe9XWsrDTMT9dfLGzLUitF3A+wwVZuRVhCqYIisOOGuGE18YK0jmdk9l\n89OpK4PduGiUh66zZTcH3thdtaOz6jj+FLKMg2Q3gNqQ1Y0cezO175RNVVX1ffOu\n5qss1RWams5RAXDqqt/MhiopG3DhlyaSC4xdqei7SI8d+S4Bvflub9rypPnhW67g\nNhZvQDJ7Tb1AWHxKmU0wQvEMtwSm9xtsMs4bqotn2M/09BuRqbrhpvAfrfZArkVO\nv8eLXhtDvo2J9gRwHZIS/JZ1Fo+tep1QFHz1Lr5iGRqwLWQlGbKFuL0CAwEAAQ==\n-----END RSA PUBLIC KEY-----\n"; + JwkDto expectedJWK = new JwkDto("RSA", "AQAB", "n6-frMlD7DQqbxZW943hRLBApDj1_lHIJdLYSKEGIfwhd58gc0Y41q11mPnpv7gAZ_Wm0iOAkWSzcIWljXFmGnLrUrBsp4WYKdPjqn4tkrCOjiZa5RPkY03a40Kz1lx0W9f94Naozglf6KFUSq-qAwuC5kiPxaxsjFA_LWIP-zT2QX_MnrX9v7gt2g0BC4pQ01eTTzhhwO2A7k5z3ucsb56ohND4xdIsdCMm1IczBjW0URSO60Bb7m5dlO8BFHJ6inV8awO2KHoADbp3wZgid4KqLJ0eVGyNViVFzj4rxSxL3vcYbyKSORWSlPZIZL9ZWO1cyPO9-Wxu29IKj4DQEt8glgITlBZ4L29uT7gFPAbypSn_8SvUBrNno8-GIe9XWsrDTMT9dfLGzLUitF3A-wwVZuRVhCqYIisOOGuGE18YK0jmdk9l89OpK4PduGiUh66zZTcH3thdtaOz6jj-FLKMg2Q3gNqQ1Y0cezO175RNVVX1ffOu5qss1RWams5RAXDqqt_MhiopG3DhlyaSC4xdqei7SI8d-S4Bvflub9rypPnhW67gNhZvQDJ7Tb1AWHxKmU0wQvEMtwSm9xtsMs4bqotn2M_09BuRqbrhpvAfrfZArkVOv8eLXhtDvo2J9gRwHZIS_JZ1Fo-tep1QFHz1Lr5iGRqwLWQlGbKFuL0"); + + JwkDto actualJWK = JoseUtil.getJwkFromPublicKey(publicKey); + + assertEquals(expectedJWK, actualJWK); + } + +} \ No newline at end of file From 33bf028419da2f491c1bf3abfb78d9a3fb2609f5 Mon Sep 17 00:00:00 2001 From: Kiruthika Jeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Date: Fri, 21 Jul 2023 12:54:21 +0530 Subject: [PATCH 062/860] refactor(INJI-219): [Kiruthika] add test for MimotoConfigTest --- .../mosip/mimoto/config/MimotoConfigTest.java | 56 ++++++++++++++++--- .../io/mosip/mimoto/util/JoseUtilTest.java | 5 +- 2 files changed, 52 insertions(+), 9 deletions(-) diff --git a/src/test/java/io/mosip/mimoto/config/MimotoConfigTest.java b/src/test/java/io/mosip/mimoto/config/MimotoConfigTest.java index 095a84b75..159983053 100644 --- a/src/test/java/io/mosip/mimoto/config/MimotoConfigTest.java +++ b/src/test/java/io/mosip/mimoto/config/MimotoConfigTest.java @@ -1,15 +1,14 @@ package io.mosip.mimoto.config; -import io.mosip.kernel.auth.defaultadapter.filter.AuthFilter; -import io.mosip.kernel.auth.defaultadapter.filter.CorsFilter; -import io.mosip.mimoto.config.Config; -import io.mosip.mimoto.config.OpenApiProperties; -import io.mosip.mimoto.config.SwaggerConfig; +import io.swagger.v3.oas.models.Components; +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.info.Info; +import io.swagger.v3.oas.models.info.License; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.ssl.TrustStrategy; -import org.springframework.boot.context.properties.ConfigurationProperties; +import org.junit.Test; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @@ -17,6 +16,7 @@ import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.test.util.ReflectionTestUtils; import org.springframework.web.client.RestTemplate; import javax.net.ssl.SSLContext; @@ -25,13 +25,20 @@ import java.security.NoSuchAlgorithmException; import java.security.cert.X509Certificate; import java.util.HashMap; +import java.util.List; import java.util.Map; +import static org.junit.Assert.assertEquals; + + @Configuration @ComponentScan(basePackages = { - "io.mosip.mimoto.*" }, excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = { + "io.mosip.mimoto.*"}, excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = { Config.class, OpenApiProperties.class, SwaggerConfig.class})) public class MimotoConfigTest extends WebSecurityConfigurerAdapter { + OpenApiProperties openApiProperties = new OpenApiProperties(); + + SwaggerConfig swaggerConfig = new SwaggerConfig(); @Override protected void configure(HttpSecurity http) throws Exception { @@ -85,4 +92,39 @@ public RestTemplate plainRestTemplate() public Map injiConfig() { return new HashMap<>(); } + + @Test + public void testSwaggerConfigOpenApi() { + InfoProperty info = new InfoProperty(); + info.setTitle("infoTitle"); + info.setVersion("infoVersion"); + info.setDescription("infoDescription"); + LicenseProperty license = new LicenseProperty(); + license.setName("licenseName"); + license.setUrl("licenseUrl"); + info.setLicense(license); + Service service = new Service(); + Server server = new Server(); + server.setDescription("serverDescription"); + server.setUrl("serverUrl"); + service.setServers(List.of(server)); + openApiProperties.setService(service); + openApiProperties.setInfo(info); + ReflectionTestUtils.setField(swaggerConfig, "openApiProperties", openApiProperties); + + OpenAPI expectedOpenAPI = new OpenAPI() + .components(new Components()) + .info(new Info() + .title("infoTitle") + .version("infoVersion") + .description("infoDescription") + .license(new License() + .name("licenseName") + .url("licenseUrl"))); + expectedOpenAPI.addServersItem(new io.swagger.v3.oas.models.servers.Server().description("serverDescription").url("serverUrl")); + + OpenAPI actualOpenApi = swaggerConfig.openApi(); + + assertEquals(expectedOpenAPI, actualOpenApi); + } } diff --git a/src/test/java/io/mosip/mimoto/util/JoseUtilTest.java b/src/test/java/io/mosip/mimoto/util/JoseUtilTest.java index 77b0207ce..035eb6570 100644 --- a/src/test/java/io/mosip/mimoto/util/JoseUtilTest.java +++ b/src/test/java/io/mosip/mimoto/util/JoseUtilTest.java @@ -1,13 +1,14 @@ package io.mosip.mimoto.util; import io.mosip.mimoto.dto.mimoto.JwkDto; -import junit.framework.TestCase; import org.junit.Test; import java.security.NoSuchAlgorithmException; import java.security.spec.InvalidKeySpecException; -public class JoseUtilTest extends TestCase { +import static org.junit.Assert.assertEquals; + +public class JoseUtilTest { @Test public void getJwkFromPublicKeyTest() throws NoSuchAlgorithmException, InvalidKeySpecException { String publicKey = "-----BEGIN RSA PUBLIC KEY-----\nMIICCgKCAgEAn6+frMlD7DQqbxZW943hRLBApDj1/lHIJdLYSKEGIfwhd58gc0Y4\n1q11mPnpv7gAZ/Wm0iOAkWSzcIWljXFmGnLrUrBsp4WYKdPjqn4tkrCOjiZa5RPk\nY03a40Kz1lx0W9f94Naozglf6KFUSq+qAwuC5kiPxaxsjFA/LWIP+zT2QX/MnrX9\nv7gt2g0BC4pQ01eTTzhhwO2A7k5z3ucsb56ohND4xdIsdCMm1IczBjW0URSO60Bb\n7m5dlO8BFHJ6inV8awO2KHoADbp3wZgid4KqLJ0eVGyNViVFzj4rxSxL3vcYbyKS\nORWSlPZIZL9ZWO1cyPO9+Wxu29IKj4DQEt8glgITlBZ4L29uT7gFPAbypSn/8SvU\nBrNno8+GIe9XWsrDTMT9dfLGzLUitF3A+wwVZuRVhCqYIisOOGuGE18YK0jmdk9l\n89OpK4PduGiUh66zZTcH3thdtaOz6jj+FLKMg2Q3gNqQ1Y0cezO175RNVVX1ffOu\n5qss1RWams5RAXDqqt/MhiopG3DhlyaSC4xdqei7SI8d+S4Bvflub9rypPnhW67g\nNhZvQDJ7Tb1AWHxKmU0wQvEMtwSm9xtsMs4bqotn2M/09BuRqbrhpvAfrfZArkVO\nv8eLXhtDvo2J9gRwHZIS/JZ1Fo+tep1QFHz1Lr5iGRqwLWQlGbKFuL0CAwEAAQ==\n-----END RSA PUBLIC KEY-----\n"; From 8fb9c7d4ac17baf9111b1c42c5cc095526c16761 Mon Sep 17 00:00:00 2001 From: Kiruthika Jeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Date: Mon, 24 Jul 2023 16:15:38 +0530 Subject: [PATCH 063/860] refactor(INJI-219): [Kiruthika] fix major severity code smells as per SonarQube rules --- .../mosip/mimoto/MimotoServiceApplication.java | 9 +++++++-- .../io/mosip/mimoto/constant/CbeffConstant.java | 2 ++ .../mimoto/constant/MappingJsonConstants.java | 2 ++ .../mosip/mimoto/controller/IdpController.java | 2 ++ .../mosip/mimoto/exception/ExceptionUtils.java | 17 +---------------- .../impl/CredentialShareServiceImpl.java | 9 +-------- .../mimoto/util/AuditLogRequestBuilder.java | 9 ++------- .../io/mosip/mimoto/util/CryptoCoreUtil.java | 2 +- .../io/mosip/mimoto/util/RequestValidator.java | 12 +++++------- .../io/mosip/mimoto/util/RestApiClient.java | 6 ------ 10 files changed, 23 insertions(+), 47 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java b/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java index 3a2f0f4d3..86f024cc5 100644 --- a/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java +++ b/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java @@ -4,6 +4,8 @@ import io.mosip.kernel.biometrics.spi.CbeffUtil; import io.mosip.kernel.cbeffutil.impl.CbeffImpl; +import io.mosip.kernel.core.logger.spi.Logger; +import io.mosip.mimoto.util.LoggerUtil; import org.json.simple.JSONObject; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -30,6 +32,9 @@ @EnableScheduling @EnableAsync public class MimotoServiceApplication { + + private static Logger logger = LoggerUtil.getLogger(MimotoServiceApplication.class); + @Bean @Primary public CbeffUtil getCbeffUtil() { @@ -51,14 +56,14 @@ public static JSONObject getGitProp() { JSONObject.class ); } catch (Exception e) { - System.err.println("Error when trying to read build.json file: " + e); + logger.error("Error when trying to read build.json file: " + e); } return new JSONObject(); } public static void main(String[] args) { JSONObject gitProp = getGitProp(); - System.out.println( + logger.info( String.format( "Mimoto Service version: %s - revision: %s @ branch: %s | build @ %s", gitProp.get("git.build.version"), diff --git a/src/main/java/io/mosip/mimoto/constant/CbeffConstant.java b/src/main/java/io/mosip/mimoto/constant/CbeffConstant.java index 57becc3d7..af846ae40 100644 --- a/src/main/java/io/mosip/mimoto/constant/CbeffConstant.java +++ b/src/main/java/io/mosip/mimoto/constant/CbeffConstant.java @@ -6,6 +6,8 @@ * A Constant Class to hold all the default identifier values */ public class CbeffConstant { + private CbeffConstant() { + } public static final long FORMAT_OWNER = 257; diff --git a/src/main/java/io/mosip/mimoto/constant/MappingJsonConstants.java b/src/main/java/io/mosip/mimoto/constant/MappingJsonConstants.java index 4f8d825f2..3120c9c9c 100644 --- a/src/main/java/io/mosip/mimoto/constant/MappingJsonConstants.java +++ b/src/main/java/io/mosip/mimoto/constant/MappingJsonConstants.java @@ -1,6 +1,8 @@ package io.mosip.mimoto.constant; public class MappingJsonConstants { + private MappingJsonConstants() { + } public static final String IDENTITY = "identity"; diff --git a/src/main/java/io/mosip/mimoto/controller/IdpController.java b/src/main/java/io/mosip/mimoto/controller/IdpController.java index 348f10278..dc71b39cb 100644 --- a/src/main/java/io/mosip/mimoto/controller/IdpController.java +++ b/src/main/java/io/mosip/mimoto/controller/IdpController.java @@ -5,11 +5,13 @@ import com.google.gson.Gson; import io.mosip.kernel.core.logger.spi.Logger; import io.mosip.kernel.core.util.JsonUtils; +import io.mosip.kernel.core.util.exception.JsonProcessingException; import io.mosip.mimoto.constant.ApiName; import io.mosip.mimoto.core.http.ResponseWrapper; import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.exception.IdpException; +import io.mosip.mimoto.exception.InvalidInputException; import io.mosip.mimoto.exception.PlatformErrorMessages; import io.mosip.mimoto.service.RestClientService; import io.mosip.mimoto.util.*; diff --git a/src/main/java/io/mosip/mimoto/exception/ExceptionUtils.java b/src/main/java/io/mosip/mimoto/exception/ExceptionUtils.java index 4db3bcfe2..a5933f004 100644 --- a/src/main/java/io/mosip/mimoto/exception/ExceptionUtils.java +++ b/src/main/java/io/mosip/mimoto/exception/ExceptionUtils.java @@ -3,11 +3,10 @@ import java.io.PrintWriter; import java.io.StringWriter; +import com.fasterxml.jackson.databind.JsonNode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.JsonNode; - /** * This utils contains exception utilities. * @@ -59,20 +58,6 @@ public static String getStackTrace(Throwable throwable) { return sw.getBuffer().toString(); } - /** - * This method provide jsonvalue based on propname mention. - * - * @param node the jsonnode. - * @param propName the property name. - * @return the property value. - */ - private static String getJsonValue(JsonNode node, String propName) { - if (node.get(propName) != null) { - return node.get(propName).asText(); - } - return null; - } - public static void logRootCause(Throwable exception) { logger.error("Exception Root Cause: {} ", exception.getMessage()); logger.debug("Exception Root Cause:", exception); diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java index 133ca8e1d..020075dd2 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java @@ -197,13 +197,11 @@ public Map getDocuments( boolean isTransactionSuccessful = false; try { individualBio = credentialJSON.getString("biometrics"); - String individualBiometric = new String(individualBio); + String individualBiometric = individualBio; if (credentialJSON.has("UIN")) id = credentialJSON.getString("UIN"); else if (credentialJSON.has(vid)) id = credentialJSON.getString(vid); - else - id = null; byte[] textFileByte = createJSONFile(credentialJSON, individualBiometric); byteMap.put(UIN_TEXT_FILE, textFileByte); @@ -434,11 +432,6 @@ private void generateOutputJSON(org.json.JSONObject credential, org.json.JSONObj } } - private static org.json.JSONObject getBioMetricsJSONObject(org.json.JSONObject biometrics, String type) { - return biometrics.has(type) ? biometrics.getJSONObject(type) - : new org.json.JSONObject(); - } - @NotNull private static String getFormatPrefix(String type) { return type.equalsIgnoreCase(BiometricType.FACE.value()) ? "data:image/jpg;base64," : "data:binary;base64,"; diff --git a/src/main/java/io/mosip/mimoto/util/AuditLogRequestBuilder.java b/src/main/java/io/mosip/mimoto/util/AuditLogRequestBuilder.java index 552cceda2..b76858957 100644 --- a/src/main/java/io/mosip/mimoto/util/AuditLogRequestBuilder.java +++ b/src/main/java/io/mosip/mimoto/util/AuditLogRequestBuilder.java @@ -1,8 +1,5 @@ package io.mosip.mimoto.util; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -57,12 +54,10 @@ public class AuditLogRequestBuilder { * @return the audit response dto */ @SuppressWarnings("unchecked") - public ResponseWrapper createAuditRequestBuilder(String description, String eventId, - String eventName, String eventType, String registrationId, ApiName apiname) { + public ResponseWrapper createAuditRequestBuilder(String description, String eventId, String eventName, String eventType, String registrationId, ApiName apiname) { logger.debug(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.REGISTRATIONID.toString(), registrationId, - "AuditLogRequestBuilder:: createAuditRequestBuilder(String description, String eventId, String eventName, String eventType,\r\n" - + " String registrationId, ApiName apiname)::entry"); + "AuditLogRequestBuilder:: createAuditRequestBuilder(String description, String eventId, String eventName, String eventType,\r\n String registrationId, ApiName apiname)::entry"); AuditRequestDto auditRequestDto = new AuditRequestDto(); RequestWrapper requestWrapper = new RequestWrapper<>(); diff --git a/src/main/java/io/mosip/mimoto/util/CryptoCoreUtil.java b/src/main/java/io/mosip/mimoto/util/CryptoCoreUtil.java index 36242364d..2ef421fb8 100644 --- a/src/main/java/io/mosip/mimoto/util/CryptoCoreUtil.java +++ b/src/main/java/io/mosip/mimoto/util/CryptoCoreUtil.java @@ -220,7 +220,7 @@ private static byte[] unpadOAEPPadding(byte[] paddedPlainText, BigInteger keyMod throws InvalidCipherTextException { OAEPEncoding encode = new OAEPEncoding(new RSAEngine(), new SHA256Digest()); - BigInteger exponent = new BigInteger("1"); + BigInteger exponent = BigInteger.valueOf(1L); RSAKeyParameters keyParams = new RSAKeyParameters(false, keyModulus, exponent); encode.init(false, keyParams); return encode.processBlock(paddedPlainText, 0, paddedPlainText.length); diff --git a/src/main/java/io/mosip/mimoto/util/RequestValidator.java b/src/main/java/io/mosip/mimoto/util/RequestValidator.java index 2943f6deb..47767eba0 100644 --- a/src/main/java/io/mosip/mimoto/util/RequestValidator.java +++ b/src/main/java/io/mosip/mimoto/util/RequestValidator.java @@ -1,7 +1,6 @@ package io.mosip.mimoto.util; import com.fasterxml.jackson.databind.JsonNode; -import io.mosip.mimoto.dto.mimoto.AppOTPRequestDTO; import io.mosip.mimoto.dto.mimoto.CredentialDownloadRequestDTO; import io.mosip.mimoto.exception.InvalidInputException; import io.mosip.mimoto.exception.PlatformErrorMessages; @@ -13,7 +12,6 @@ import org.springframework.validation.FieldError; import java.io.IOException; -import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -36,15 +34,15 @@ public void validateInputRequest(BindingResult result){ } } - public void validateNotificationChannel(List otpChannelList){ - List incorrectNotificationChannel = new ArrayList(); - logger.info("\n Notification Types from application-default.properties in mosip-config - > " + notificationType); + public void validateNotificationChannel(List otpChannelList) { + List incorrectNotificationChannel; + logger.info("\n Notification Types from application-default.properties in mosip-config - > {}", notificationType); incorrectNotificationChannel = otpChannelList .stream() .filter(otpChannel -> !notificationType.contains(otpChannel)) .collect(Collectors.toList()); - if(incorrectNotificationChannel.size() > 0) { - logger.error("Invalid Input is received in otpChannels " + String.join(",", incorrectNotificationChannel)); + if (incorrectNotificationChannel.size() > 0) { + logger.error("Invalid Input is received in otpChannels {}", String.join(",", incorrectNotificationChannel)); throw new InvalidInputException(PlatformErrorMessages.MIMOTO_PGS_INVALID_INPUT_PARAMETER.getMessage() + " - " + "otpChannels"); } } diff --git a/src/main/java/io/mosip/mimoto/util/RestApiClient.java b/src/main/java/io/mosip/mimoto/util/RestApiClient.java index 81072a15c..b52cdc2eb 100644 --- a/src/main/java/io/mosip/mimoto/util/RestApiClient.java +++ b/src/main/java/io/mosip/mimoto/util/RestApiClient.java @@ -12,7 +12,6 @@ import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.HttpClientBuilder; -import org.apache.http.util.EntityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; @@ -46,9 +45,6 @@ public class RestApiClient { */ private Logger logger = LoggerUtil.getLogger(RestApiClient.class); private static final String AUTHORIZATION = "Authorization="; - private static final String RETRIED = "retry"; - private static final String YES = "yes"; - private static final String NO = "no"; /** * The builder. */ @@ -226,8 +222,6 @@ private String getBearerToken() throws IOException { post.setEntity(postingString); post.setHeader("Content-type", "application/json"); HttpResponse response = httpClient.execute(post); - org.apache.http.HttpEntity entity = response.getEntity(); - String responseBody = EntityUtils.toString(entity, "UTF-8"); Header[] cookie = response.getHeaders("Set-Cookie"); if (cookie.length == 0) throw new TokenGenerationFailedException(); From 9bf8b921c20526cc883e1089b53b8fef544bf451 Mon Sep 17 00:00:00 2001 From: Kiruthika Jeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Date: Mon, 24 Jul 2023 16:19:00 +0530 Subject: [PATCH 064/860] refactor(INJI-219): [Kiruthika] remove commented code --- src/main/java/io/mosip/mimoto/config/Config.java | 6 ------ .../mimoto/service/impl/CredentialShareServiceImpl.java | 1 - src/main/java/io/mosip/mimoto/util/CryptoCoreUtil.java | 2 -- 3 files changed, 9 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/config/Config.java b/src/main/java/io/mosip/mimoto/config/Config.java index 58e079cc9..3a089f41a 100644 --- a/src/main/java/io/mosip/mimoto/config/Config.java +++ b/src/main/java/io/mosip/mimoto/config/Config.java @@ -51,12 +51,6 @@ protected void configure(HttpSecurity http) throws Exception { if (!isCSRFEnable) { http = http.csrf().disable(); } - // http.authorizeRequests().antMatchers("*").authenticated().and().exceptionHandling() - // .authenticationEntryPoint(new AuthEntryPoint()).and().sessionManagement() - // .sessionCreationPolicy(SessionCreationPolicy.STATELESS); - - // http.addFilterBefore(authFilter(), - // UsernamePasswordAuthenticationFilter.class); // FIXME: web security is disabled for all enpoints http.authorizeRequests().antMatchers("*").authenticated().anyRequest().permitAll().and().exceptionHandling(); diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java index 020075dd2..00ad32dac 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java @@ -383,7 +383,6 @@ public String getCredentialSubject(String credential) { public org.json.JSONObject decryptAttribute(org.json.JSONObject data, String encryptionPin, String credential) throws ParseException { - // org.json.JSONObject jsonObj = new org.json.JSONObject(credential); JSONParser parser = new JSONParser(); // this needs the "json-simple" library Object obj = parser.parse(credential); JSONObject jsonObj = (org.json.simple.JSONObject) obj; diff --git a/src/main/java/io/mosip/mimoto/util/CryptoCoreUtil.java b/src/main/java/io/mosip/mimoto/util/CryptoCoreUtil.java index 2ef421fb8..a573364a3 100644 --- a/src/main/java/io/mosip/mimoto/util/CryptoCoreUtil.java +++ b/src/main/java/io/mosip/mimoto/util/CryptoCoreUtil.java @@ -247,8 +247,6 @@ private static byte[] symmetricDecrypt(SecretKey key, byte[] data, byte[] aad) { public byte[] symmetricDecrypt(SecretKey key, byte[] data, byte[] nonce, byte[] aad) throws InvalidAlgorithmParameterException { - // Objects.requireNonNull(key, null); - // CryptoUtils.verifyData(data); byte[] output = null; Cipher cipher; try { From 1dbbdad51f6cd2d54285c0c1617800105780014a Mon Sep 17 00:00:00 2001 From: Kiruthika Jeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Date: Mon, 24 Jul 2023 16:22:10 +0530 Subject: [PATCH 065/860] refactor(INJI-219): [Kiruthika] remove unused private method --- .../io/mosip/mimoto/util/CryptoCoreUtil.java | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/util/CryptoCoreUtil.java b/src/main/java/io/mosip/mimoto/util/CryptoCoreUtil.java index a573364a3..d6074c816 100644 --- a/src/main/java/io/mosip/mimoto/util/CryptoCoreUtil.java +++ b/src/main/java/io/mosip/mimoto/util/CryptoCoreUtil.java @@ -209,23 +209,6 @@ private static byte[] asymmetricDecrypt(PrivateKey privateKey, BigInteger keyMod } } - /** - * - * @param paddedPlainText - * @return - * @throws InvalidCipherTextException - * @throws InvalidKeyException - */ - private static byte[] unpadOAEPPadding(byte[] paddedPlainText, BigInteger keyModulus) - throws InvalidCipherTextException { - - OAEPEncoding encode = new OAEPEncoding(new RSAEngine(), new SHA256Digest()); - BigInteger exponent = BigInteger.valueOf(1L); - RSAKeyParameters keyParams = new RSAKeyParameters(false, keyModulus, exponent); - encode.init(false, keyParams); - return encode.processBlock(paddedPlainText, 0, paddedPlainText.length); - } - private static byte[] symmetricDecrypt(SecretKey key, byte[] data, byte[] aad) { byte[] output = null; try { From ea5225f70bb148ede0ad2e0fd9565e5314736008 Mon Sep 17 00:00:00 2001 From: Kiruthika Jeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Date: Tue, 25 Jul 2023 08:44:46 +0530 Subject: [PATCH 066/860] refactor(INJI-219): [Kiruthika] fix null pointer exception reliability issue --- src/main/java/io/mosip/mimoto/util/RestApiClient.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/mosip/mimoto/util/RestApiClient.java b/src/main/java/io/mosip/mimoto/util/RestApiClient.java index b52cdc2eb..7df0f0d71 100644 --- a/src/main/java/io/mosip/mimoto/util/RestApiClient.java +++ b/src/main/java/io/mosip/mimoto/util/RestApiClient.java @@ -29,6 +29,7 @@ import java.io.IOException; import java.net.URI; import java.util.Iterator; +import java.util.Objects; /** * The Class RestApiClient. @@ -198,7 +199,7 @@ private HttpEntity setRequestHeader(Object requestType, MediaType mediaT while (iterator.hasNext()) { String key = iterator.next(); if (!(headers.containsKey(CONTENT_TYPE) && key.equals(CONTENT_TYPE))) - headers.add(key, httpHeader.get(key).get(0)); + headers.add(key, Objects.requireNonNull(httpHeader.get(key)).get(0)); } return new HttpEntity(httpEntity.getBody(), headers); } catch (ClassCastException | NullPointerException e) { From 4a63e4a93b3194204727b950f8e706b025d101a2 Mon Sep 17 00:00:00 2001 From: Kiruthika Jeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Date: Tue, 25 Jul 2023 11:41:13 +0530 Subject: [PATCH 067/860] refactor(INJI-219): [Kiruthika] replace private constructor in utility classes with Lombok annotation --- src/main/java/io/mosip/mimoto/constant/CbeffConstant.java | 6 ++++-- .../java/io/mosip/mimoto/constant/MappingJsonConstants.java | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/constant/CbeffConstant.java b/src/main/java/io/mosip/mimoto/constant/CbeffConstant.java index af846ae40..3059b336d 100644 --- a/src/main/java/io/mosip/mimoto/constant/CbeffConstant.java +++ b/src/main/java/io/mosip/mimoto/constant/CbeffConstant.java @@ -1,13 +1,15 @@ package io.mosip.mimoto.constant; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + /** * @author Ramadurai Pandian * * A Constant Class to hold all the default identifier values */ +@NoArgsConstructor(access = AccessLevel.PRIVATE) public class CbeffConstant { - private CbeffConstant() { - } public static final long FORMAT_OWNER = 257; diff --git a/src/main/java/io/mosip/mimoto/constant/MappingJsonConstants.java b/src/main/java/io/mosip/mimoto/constant/MappingJsonConstants.java index 3120c9c9c..a484d53e4 100644 --- a/src/main/java/io/mosip/mimoto/constant/MappingJsonConstants.java +++ b/src/main/java/io/mosip/mimoto/constant/MappingJsonConstants.java @@ -1,8 +1,10 @@ package io.mosip.mimoto.constant; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) public class MappingJsonConstants { - private MappingJsonConstants() { - } public static final String IDENTITY = "identity"; From 609b3e0065f75c2a1ab0299820755fb0f165c7a7 Mon Sep 17 00:00:00 2001 From: Kiruthika Jeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Date: Tue, 25 Jul 2023 12:09:59 +0530 Subject: [PATCH 068/860] refactor(INJI-219): [Kiruthika] move constant field to variable in method to avoid global scope in class --- src/main/java/io/mosip/mimoto/util/RequestValidator.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/util/RequestValidator.java b/src/main/java/io/mosip/mimoto/util/RequestValidator.java index 47767eba0..e89dc6bc5 100644 --- a/src/main/java/io/mosip/mimoto/util/RequestValidator.java +++ b/src/main/java/io/mosip/mimoto/util/RequestValidator.java @@ -19,7 +19,6 @@ @Component public class RequestValidator { - public static final String RESPONSE = "response"; private static Logger logger = LoggerFactory.getLogger(RequestValidator.class); @Value("${mosip.notificationtype:EMAIL|PHONE}") @@ -48,8 +47,9 @@ public void validateNotificationChannel(List otpChannelList) { } public void validateCredentialDownloadRequest(CredentialDownloadRequestDTO requestDTO, JsonNode requestedCredentialJSON) throws IOException, NoSuchFieldException { - if(requestedCredentialJSON.has(RESPONSE) && requestedCredentialJSON.get(RESPONSE).has("id")) { - String requestedIndividualId = requestedCredentialJSON.get(RESPONSE).get("id").asText(); + String response = "response"; + if(requestedCredentialJSON.has(response) && requestedCredentialJSON.get(response).has("id")) { + String requestedIndividualId = requestedCredentialJSON.get(response).get("id").asText(); if (!requestDTO.getIndividualId().equals(requestedIndividualId)) { throw new InvalidInputException(PlatformErrorMessages.MIMOTO_PGS_INVALID_INPUT_PARAMETER.getMessage() + " - " + "individualId"); } From e8e71034f12befbc6027cacd3d1492985b615210 Mon Sep 17 00:00:00 2001 From: Kiruthika Jeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Date: Tue, 25 Jul 2023 12:19:10 +0530 Subject: [PATCH 069/860] refactor(INJI-219): [Kiruthika] move setting up mock to setup method in test --- .../java/io/mosip/mimoto/config/MimotoConfigTest.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/test/java/io/mosip/mimoto/config/MimotoConfigTest.java b/src/test/java/io/mosip/mimoto/config/MimotoConfigTest.java index 159983053..9bbd7fce9 100644 --- a/src/test/java/io/mosip/mimoto/config/MimotoConfigTest.java +++ b/src/test/java/io/mosip/mimoto/config/MimotoConfigTest.java @@ -8,6 +8,7 @@ import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.ssl.TrustStrategy; +import org.junit.Before; import org.junit.Test; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; @@ -93,8 +94,8 @@ public Map injiConfig() { return new HashMap<>(); } - @Test - public void testSwaggerConfigOpenApi() { + @Before + public void setUp() { InfoProperty info = new InfoProperty(); info.setTitle("infoTitle"); info.setVersion("infoVersion"); @@ -111,7 +112,10 @@ public void testSwaggerConfigOpenApi() { openApiProperties.setService(service); openApiProperties.setInfo(info); ReflectionTestUtils.setField(swaggerConfig, "openApiProperties", openApiProperties); + } + @Test + public void testSwaggerConfigOpenApi() { OpenAPI expectedOpenAPI = new OpenAPI() .components(new Components()) .info(new Info() From 693b1723f786896f1c144b38161b7c96155bff6b Mon Sep 17 00:00:00 2001 From: Kiruthika Jeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Date: Tue, 25 Jul 2023 13:05:10 +0530 Subject: [PATCH 070/860] refactor(INJI-219): [Kiruthika] remove unused empty constructor --- .../mosip/mimoto/exception/ApisResourceAccessException.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/exception/ApisResourceAccessException.java b/src/main/java/io/mosip/mimoto/exception/ApisResourceAccessException.java index a41746b83..fe2b85d70 100644 --- a/src/main/java/io/mosip/mimoto/exception/ApisResourceAccessException.java +++ b/src/main/java/io/mosip/mimoto/exception/ApisResourceAccessException.java @@ -35,8 +35,4 @@ public ApisResourceAccessException(String message) { public ApisResourceAccessException(String message, Throwable cause) { super(PlatformErrorMessages.MIMOTO_RCT_UNKNOWN_RESOURCE_EXCEPTION.getCode(), message, cause); } - - public ApisResourceAccessException(String code, String message, Exception e) { - // TODO document why this method is empty - } } \ No newline at end of file From fd1526130d9978ae809a788ad7d8c2b1fbd642f7 Mon Sep 17 00:00:00 2001 From: Kiruthika Jeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Date: Tue, 25 Jul 2023 14:24:43 +0530 Subject: [PATCH 071/860] refactor(INJI-219): [Kiruthika] rename method --- .../service/impl/CredentialShareServiceImpl.java | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java index 00ad32dac..c41350e76 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java @@ -263,12 +263,14 @@ public byte[] createJSONFile(org.json.JSONObject credential, String individualBi for (String value : templateValue.split(",")) { Object object = credential.has(value) ? credential.get(value) : null; if (object instanceof ArrayList) { - generateOutputJSON(credential, outputJSON, value); + appendLangToOutputJSONFields(credential, outputJSON, value); } else if (object instanceof LinkedHashMap) { org.json.JSONObject json = credential.getJSONObject(value); outputJSON.put(value, json.get(VALUE)); + } else if (key.equals("biometrics")) { + outputJSON.put(value, getBiometricsDataJSON(individualBiometric)); } else { - generateOutputJSON(individualBiometric, outputJSON, key, value, object); + outputJSON.put(value, object); } } } @@ -412,15 +414,7 @@ public org.json.JSONObject decryptAttribute(org.json.JSONObject data, String enc return data; } - private void generateOutputJSON(String individualBiometric, org.json.JSONObject outputJSON, String key, String value, Object object) { - if (key.equals("biometrics")) { - outputJSON.put(value, getBiometricsDataJSON(individualBiometric)); - } else { - outputJSON.put(value, object); - } - } - - private void generateOutputJSON(org.json.JSONObject credential, org.json.JSONObject outputJSON, String value) { + private void appendLangToOutputJSONFields(org.json.JSONObject credential, org.json.JSONObject outputJSON, String value) { JSONArray node = new JSONArray(); node.addAll(credential.getJSONArray(value).toList()); JsonValue[] jsonValues = JsonUtil.mapJsonNodeToJavaObject(JsonValue.class, node); From c8d64443ca7db04a56e01da4e6077308e7479773 Mon Sep 17 00:00:00 2001 From: Kiruthika Jeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Date: Fri, 28 Jul 2023 11:34:55 +0530 Subject: [PATCH 072/860] refactor(INJI-219): [Kiruthika] replace check null method with libraries isEmpty check --- .../service/impl/RestClientServiceImpl.java | 36 ++++++------------- 1 file changed, 11 insertions(+), 25 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/RestClientServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/RestClientServiceImpl.java index c8ef09e34..d17f2b204 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/RestClientServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/RestClientServiceImpl.java @@ -7,6 +7,7 @@ import org.springframework.http.MediaType; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; import org.springframework.web.util.UriComponents; import org.springframework.web.util.UriComponentsBuilder; @@ -60,11 +61,11 @@ public Object getApi(ApiName apiName, List pathsegments, String queryPar if (apiHostIpPort != null) { builder = UriComponentsBuilder.fromUriString(apiHostIpPort); - if (!checkNull(pathsegments)) { + if (!CollectionUtils.isEmpty(pathsegments)) { addPathSegments(pathsegments, builder); } - if (!checkNull(queryParamName)) { + if (!StringUtils.isEmpty(queryParamName)) { addQueryParam(queryParamName, queryParamValue, builder); } @@ -99,11 +100,11 @@ public Object getApi(ApiName apiName, List pathsegments, List qu if (apiHostIpPort != null) { builder = UriComponentsBuilder.fromUriString(apiHostIpPort); - if (!checkNull(pathsegments)) { + if (!CollectionUtils.isEmpty(pathsegments)) { addPathSegments(pathsegments, builder); } - if (!checkNull(queryParamName)) { + if (!CollectionUtils.isEmpty(queryParamName)) { for (int i = 0; i < queryParamName.size(); i++) { builder.queryParam(queryParamName.get(i), queryParamValue.get(i)); } @@ -139,7 +140,7 @@ public Object postApi(ApiName apiName, String queryParamName, String queryParamV builder = UriComponentsBuilder.fromUriString(apiHostIpPort); if (builder != null) { - if (!checkNull(queryParamName)) { + if (!StringUtils.isEmpty(queryParamName)) { addQueryParam(queryParamName, queryParamValue, builder); } @@ -193,15 +194,15 @@ public Object postApi(ApiName apiName, List pathsegments, String queryPa builder = UriComponentsBuilder.fromUriString(apiHostIpPort); if (builder != null) { - if (!checkNull(pathsegments)) { + if (!CollectionUtils.isEmpty(pathsegments)) { for (String segment : pathsegments) { - if (!checkNull(segment)) { + if (!StringUtils.isEmpty(segment)) { builder.pathSegment(segment); } } } - if (!checkNull(queryParamName)) { + if (!StringUtils.isEmpty(queryParamName)) { addQueryParam(queryParamName, queryParamValue, builder); } @@ -233,7 +234,7 @@ public Object postApi(ApiName apiName, MediaType mediaType, List pathseg builder = UriComponentsBuilder.fromUriString(apiHostIpPort); if (builder != null) { - if (!checkNull(pathsegments)) { + if (!CollectionUtils.isEmpty(pathsegments)) { addPathSegments(pathsegments, builder); } if (!CollectionUtils.isEmpty(queryParamName)) { @@ -278,21 +279,6 @@ public Object postApi(ApiName apiName, return obj; } - /** - * Check null. - * - * @param value the value passed - * @return true, if successful - */ - private boolean checkNull(String value) { - return ((value == null) || (("").equals(value))); - } - - private boolean checkNull(List value) { - return ((value == null) || (value.isEmpty())); - } - - private static void addQueryParam(String queryParamName, String queryParamValue, UriComponentsBuilder builder) { String[] queryParamNameArr = queryParamName.split(","); String[] queryParamValueArr = queryParamValue.split(","); @@ -303,7 +289,7 @@ private static void addQueryParam(String queryParamName, String queryParamValue, private void addPathSegments(List pathSegments, UriComponentsBuilder builder) { for (String segment : pathSegments) { - if (!checkNull(segment)) { + if (!StringUtils.isEmpty(segment)) { builder.pathSegment(segment); } } From 35eaf09d8b1f6900ded74422bba9b60ce8b2391c Mon Sep 17 00:00:00 2001 From: Kiruthika Jeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Date: Fri, 28 Jul 2023 12:05:21 +0530 Subject: [PATCH 073/860] refactor(INJI-219): [Kiruthika] extract method and constants --- .../impl/CredentialShareServiceImpl.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java index c41350e76..e10e0f26a 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java @@ -28,7 +28,6 @@ import javax.crypto.BadPaddingException; import javax.crypto.IllegalBlockSizeException; -import javax.validation.constraints.NotNull; import java.io.ByteArrayInputStream; import java.io.DataInputStream; import java.io.IOException; @@ -51,6 +50,8 @@ public class CredentialShareServiceImpl implements CredentialShareService { /** The Constant FINGER. */ public static final String FINGER = "Finger"; + public static final String DATA_IMAGE_JPG_BASE_64 = "data:image/jpg;base64,"; + public static final String DATA_BINARY_BASE_64 = "data:binary;base64,"; private Gson gson = new Gson(); @@ -296,8 +297,7 @@ public org.json.JSONObject getBiometricsDataJSON(String individualBiometric) { if (photoBytes != null) { String data = getData(type, photoBytes); if (subType.isEmpty()) { - String formatPrefix = getFormatPrefix(type); - biometrics.put(type, formatPrefix + data); + addTypeToBiometricWithFormatPrefixAndData(biometrics, type, data); } else { addTypeToBiometricIfNotExists(biometrics, type, subType, data); } @@ -425,11 +425,6 @@ private void appendLangToOutputJSONFields(org.json.JSONObject credential, org.js } } - @NotNull - private static String getFormatPrefix(String type) { - return type.equalsIgnoreCase(BiometricType.FACE.value()) ? "data:image/jpg;base64," : "data:binary;base64,"; - } - private String getData(String type, byte[] photoBytes) { if (type.equalsIgnoreCase(BiometricType.FACE.value())) { // Convert face image from JPEG2000 to JPG and encode with base64. @@ -440,10 +435,15 @@ private String getData(String type, byte[] photoBytes) { } } + private static void addTypeToBiometricWithFormatPrefixAndData(org.json.JSONObject biometrics, String type, String data) { + String formatPrefix = type.equalsIgnoreCase(BiometricType.FACE.value()) ? DATA_IMAGE_JPG_BASE_64 : DATA_BINARY_BASE_64; + biometrics.put(type, formatPrefix + data); + } + private static void addTypeToBiometricIfNotExists(org.json.JSONObject biometrics, String type, List subType, String data) { org.json.JSONObject typeList = biometrics.has(type) ? biometrics.getJSONObject(type) : new org.json.JSONObject(); - typeList.put(String.join("_", subType).toLowerCase(), "data:binary;base64," + data); + typeList.put(String.join("_", subType).toLowerCase(), DATA_BINARY_BASE_64 + data); if (!biometrics.has(type)) { biometrics.put(type, typeList); } From b044e4ce9188f94fd5a618e96acdd008d1cf8470 Mon Sep 17 00:00:00 2001 From: Kiruthika Jeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Date: Fri, 28 Jul 2023 13:03:37 +0530 Subject: [PATCH 074/860] refactor(INJI-219): [Kiruthika] move logger related constants to logger constants file --- .../mimoto/constant/LoggerFileConstant.java | 4 +++- .../service/impl/RestClientServiceImpl.java | 19 +++++++++---------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/constant/LoggerFileConstant.java b/src/main/java/io/mosip/mimoto/constant/LoggerFileConstant.java index ef82a0f6c..18f05e68b 100644 --- a/src/main/java/io/mosip/mimoto/constant/LoggerFileConstant.java +++ b/src/main/java/io/mosip/mimoto/constant/LoggerFileConstant.java @@ -7,5 +7,7 @@ public enum LoggerFileConstant { REFFERENCEID, USERID, APPLICATIONID, - UIN + UIN; + public static final String REST_CLIENT_SERVICE_IMPL_POST_API_ENTRY = "RestClientServiceImpl::postApi()::entry"; + public static final String REST_CLIENT_SERVICE_IMPL_POST_API_EXIT = "RestClientServiceImpl::postApi()::exit"; } diff --git a/src/main/java/io/mosip/mimoto/service/impl/RestClientServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/RestClientServiceImpl.java index d17f2b204..85ca72b86 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/RestClientServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/RestClientServiceImpl.java @@ -2,6 +2,7 @@ import java.util.List; +import io.mosip.mimoto.constant.LoggerFileConstant; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.http.MediaType; @@ -27,8 +28,6 @@ @Service public class RestClientServiceImpl implements RestClientService { - private static final String REST_CLIENT_SERVICE_IMPL_POST_API_ENTRY = "RestClientServiceImpl::postApi()::entry"; - private static final String REST_CLIENT_SERVICE_IMPL_POST_API_EXIT = "RestClientServiceImpl::postApi()::exit"; /** The logger. */ Logger logger = LoggerUtil.getLogger(RestClientServiceImpl.class); @@ -131,7 +130,7 @@ public Object getApi(ApiName apiName, List pathsegments, List qu public Object postApi(ApiName apiName, String queryParamName, String queryParamValue, Object requestedData, Class responseType, MediaType mediaType) throws ApisResourceAccessException { - logger.debug(REST_CLIENT_SERVICE_IMPL_POST_API_ENTRY); + logger.debug(LoggerFileConstant.REST_CLIENT_SERVICE_IMPL_POST_API_ENTRY); Object obj = null; String apiHostIpPort = env.getProperty(apiName.name()); @@ -155,7 +154,7 @@ public Object postApi(ApiName apiName, String queryParamName, String queryParamV } } - logger.debug(REST_CLIENT_SERVICE_IMPL_POST_API_EXIT); + logger.debug(LoggerFileConstant.REST_CLIENT_SERVICE_IMPL_POST_API_EXIT); return obj; } @@ -186,7 +185,7 @@ public Object postApi(ApiName apiName, String queryParamName, String queryParamV public Object postApi(ApiName apiName, List pathsegments, String queryParamName, String queryParamValue, Object requestedData, Class responseType) throws ApisResourceAccessException { - logger.debug(REST_CLIENT_SERVICE_IMPL_POST_API_ENTRY); + logger.debug(LoggerFileConstant.REST_CLIENT_SERVICE_IMPL_POST_API_ENTRY); Object obj = null; String apiHostIpPort = env.getProperty(apiName.name()); UriComponentsBuilder builder = null; @@ -217,7 +216,7 @@ public Object postApi(ApiName apiName, List pathsegments, String queryPa } } - logger.debug(REST_CLIENT_SERVICE_IMPL_POST_API_EXIT); + logger.debug(LoggerFileConstant.REST_CLIENT_SERVICE_IMPL_POST_API_EXIT); return obj; } @@ -226,7 +225,7 @@ public Object postApi(ApiName apiName, MediaType mediaType, List pathseg List queryParamValue, Object requestedData, Class responseType) throws ApisResourceAccessException { - logger.debug(REST_CLIENT_SERVICE_IMPL_POST_API_ENTRY); + logger.debug(LoggerFileConstant.REST_CLIENT_SERVICE_IMPL_POST_API_ENTRY); Object obj = null; String apiHostIpPort = env.getProperty(apiName.name()); UriComponentsBuilder builder = null; @@ -255,7 +254,7 @@ public Object postApi(ApiName apiName, MediaType mediaType, List pathseg } } - logger.debug(REST_CLIENT_SERVICE_IMPL_POST_API_EXIT); + logger.debug(LoggerFileConstant.REST_CLIENT_SERVICE_IMPL_POST_API_EXIT); return obj; } @@ -263,7 +262,7 @@ public Object postApi(ApiName apiName, MediaType mediaType, List pathseg public Object postApi(ApiName apiName, Object requestedData, Class responseType, boolean useBearerToken) throws ApisResourceAccessException { - logger.debug(REST_CLIENT_SERVICE_IMPL_POST_API_ENTRY); + logger.debug(LoggerFileConstant.REST_CLIENT_SERVICE_IMPL_POST_API_ENTRY); Object obj = null; String apiHostIpPort = env.getProperty(apiName.name()); if (apiHostIpPort != null) { @@ -275,7 +274,7 @@ public Object postApi(ApiName apiName, PlatformErrorMessages.MIMOTO_RCT_UNKNOWN_RESOURCE_EXCEPTION.getMessage(), e); } } - logger.debug(REST_CLIENT_SERVICE_IMPL_POST_API_EXIT); + logger.debug(LoggerFileConstant.REST_CLIENT_SERVICE_IMPL_POST_API_EXIT); return obj; } From c05d8fe0691171f94d377b850e6d407b02a9ee3d Mon Sep 17 00:00:00 2001 From: PRAFUL RAKHADE <99539100+Prafulrakhade@users.noreply.github.com> Date: Mon, 31 Jul 2023 09:54:21 +0530 Subject: [PATCH 075/860] [28241] Added build details in Dockerfile and docker build in push_trigger.yml file (#94) --- .github/workflows/push_trigger.yml | 5 ++++- Dockerfile | 9 +++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/.github/workflows/push_trigger.yml b/.github/workflows/push_trigger.yml index 45c7ca09e..28a0f4258 100644 --- a/.github/workflows/push_trigger.yml +++ b/.github/workflows/push_trigger.yml @@ -162,7 +162,10 @@ jobs: - name: Build image run: | - docker build . --file Dockerfile --tag ${{ env.SERVICE_NAME }} + cd "./${{env.SERVICE_LOCATION}}" + # docker build . --file Dockerfile --tag ${{ env.SERVICE_NAME }} + docker build . --build-arg SOURCE=mosip --build-arg COMMIT_HASH=$(git rev-parse HEAD) --build-arg COMMIT_ID=$(git rev-parse --short HEAD) --build-arg BUILD_TIME=${{steps.date.outputs.date}} --file Dockerfile --tag ${{ env.SERVICE_NAME }} + - name: Log into registry run: echo "${{ secrets.release_docker_hub }}" | docker login -u ${{ secrets.actor_docker_hub }} --password-stdin diff --git a/Dockerfile b/Dockerfile index 79e12716b..d00430ac3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,14 @@ FROM openjdk:11 +ARG SOURCE +ARG COMMIT_HASH +ARG COMMIT_ID +ARG BUILD_TIME +LABEL source=${SOURCE} +LABEL commit_hash=${COMMIT_HASH} +LABEL commit_id=${COMMIT_ID} +LABEL build_time=${BUILD_TIME} + # can be passed during Docker build as build time environment for github branch to pickup configuration from. ARG spring_config_label From bed86257ff613f69e6dd204c233f1238bdcb3bd7 Mon Sep 17 00:00:00 2001 From: Kiruthika Jeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Date: Fri, 4 Aug 2023 13:24:08 +0530 Subject: [PATCH 076/860] refactor(INJI-219): [Kiruthika] revert add test for MimotoConfigTest --- .../mosip/mimoto/config/MimotoConfigTest.java | 60 +++---------------- 1 file changed, 7 insertions(+), 53 deletions(-) diff --git a/src/test/java/io/mosip/mimoto/config/MimotoConfigTest.java b/src/test/java/io/mosip/mimoto/config/MimotoConfigTest.java index 9bbd7fce9..095a84b75 100644 --- a/src/test/java/io/mosip/mimoto/config/MimotoConfigTest.java +++ b/src/test/java/io/mosip/mimoto/config/MimotoConfigTest.java @@ -1,15 +1,15 @@ package io.mosip.mimoto.config; -import io.swagger.v3.oas.models.Components; -import io.swagger.v3.oas.models.OpenAPI; -import io.swagger.v3.oas.models.info.Info; -import io.swagger.v3.oas.models.info.License; +import io.mosip.kernel.auth.defaultadapter.filter.AuthFilter; +import io.mosip.kernel.auth.defaultadapter.filter.CorsFilter; +import io.mosip.mimoto.config.Config; +import io.mosip.mimoto.config.OpenApiProperties; +import io.mosip.mimoto.config.SwaggerConfig; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.ssl.TrustStrategy; -import org.junit.Before; -import org.junit.Test; +import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @@ -17,7 +17,6 @@ import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; -import org.springframework.test.util.ReflectionTestUtils; import org.springframework.web.client.RestTemplate; import javax.net.ssl.SSLContext; @@ -26,20 +25,13 @@ import java.security.NoSuchAlgorithmException; import java.security.cert.X509Certificate; import java.util.HashMap; -import java.util.List; import java.util.Map; -import static org.junit.Assert.assertEquals; - - @Configuration @ComponentScan(basePackages = { - "io.mosip.mimoto.*"}, excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = { + "io.mosip.mimoto.*" }, excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = { Config.class, OpenApiProperties.class, SwaggerConfig.class})) public class MimotoConfigTest extends WebSecurityConfigurerAdapter { - OpenApiProperties openApiProperties = new OpenApiProperties(); - - SwaggerConfig swaggerConfig = new SwaggerConfig(); @Override protected void configure(HttpSecurity http) throws Exception { @@ -93,42 +85,4 @@ public RestTemplate plainRestTemplate() public Map injiConfig() { return new HashMap<>(); } - - @Before - public void setUp() { - InfoProperty info = new InfoProperty(); - info.setTitle("infoTitle"); - info.setVersion("infoVersion"); - info.setDescription("infoDescription"); - LicenseProperty license = new LicenseProperty(); - license.setName("licenseName"); - license.setUrl("licenseUrl"); - info.setLicense(license); - Service service = new Service(); - Server server = new Server(); - server.setDescription("serverDescription"); - server.setUrl("serverUrl"); - service.setServers(List.of(server)); - openApiProperties.setService(service); - openApiProperties.setInfo(info); - ReflectionTestUtils.setField(swaggerConfig, "openApiProperties", openApiProperties); - } - - @Test - public void testSwaggerConfigOpenApi() { - OpenAPI expectedOpenAPI = new OpenAPI() - .components(new Components()) - .info(new Info() - .title("infoTitle") - .version("infoVersion") - .description("infoDescription") - .license(new License() - .name("licenseName") - .url("licenseUrl"))); - expectedOpenAPI.addServersItem(new io.swagger.v3.oas.models.servers.Server().description("serverDescription").url("serverUrl")); - - OpenAPI actualOpenApi = swaggerConfig.openApi(); - - assertEquals(expectedOpenAPI, actualOpenApi); - } } From 4e94826c58612d65bc1de6611177fc925dd25101 Mon Sep 17 00:00:00 2001 From: Kiruthika Jeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Date: Fri, 4 Aug 2023 13:59:17 +0530 Subject: [PATCH 077/860] refactor(INJI-219): [Kiruthika] rename MimotoConfigTest to MimotoConfig MimotoConfigTest did not have any tests written & has only beans declared hence making this change --- .../config/{MimotoConfigTest.java => MimotoConfig.java} | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) rename src/test/java/io/mosip/mimoto/config/{MimotoConfigTest.java => MimotoConfig.java} (89%) diff --git a/src/test/java/io/mosip/mimoto/config/MimotoConfigTest.java b/src/test/java/io/mosip/mimoto/config/MimotoConfig.java similarity index 89% rename from src/test/java/io/mosip/mimoto/config/MimotoConfigTest.java rename to src/test/java/io/mosip/mimoto/config/MimotoConfig.java index 095a84b75..f799097be 100644 --- a/src/test/java/io/mosip/mimoto/config/MimotoConfigTest.java +++ b/src/test/java/io/mosip/mimoto/config/MimotoConfig.java @@ -1,15 +1,9 @@ package io.mosip.mimoto.config; -import io.mosip.kernel.auth.defaultadapter.filter.AuthFilter; -import io.mosip.kernel.auth.defaultadapter.filter.CorsFilter; -import io.mosip.mimoto.config.Config; -import io.mosip.mimoto.config.OpenApiProperties; -import io.mosip.mimoto.config.SwaggerConfig; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.ssl.TrustStrategy; -import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @@ -31,7 +25,7 @@ @ComponentScan(basePackages = { "io.mosip.mimoto.*" }, excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = { Config.class, OpenApiProperties.class, SwaggerConfig.class})) -public class MimotoConfigTest extends WebSecurityConfigurerAdapter { +public class MimotoConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { From 9eb9d0911d30e52a8abb48e25fd26f2efd978011 Mon Sep 17 00:00:00 2001 From: Pooja Babusingh <68894211+PoojaBabusingh@users.noreply.github.com> Date: Thu, 10 Aug 2023 15:09:16 +0530 Subject: [PATCH 078/860] [Pooja] add quality gate check to fail the pipeline for critical open bugs in sonar --- .github/workflows/sonarqube.yml | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/.github/workflows/sonarqube.yml b/.github/workflows/sonarqube.yml index f30c7b5c8..17785c01c 100644 --- a/.github/workflows/sonarqube.yml +++ b/.github/workflows/sonarqube.yml @@ -47,3 +47,28 @@ jobs: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }} run: mvn -Dgpg.skip -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.projectKey=mimoto + + - name: Install jq + run: sudo apt-get -y install jq + + - name: Check for critical bugs + run: | + # Fetch SonarQube issues using the API + SONAR_HOST_URL=https://sonarcloud.io + SONAR_PROJECT_KEY=mosip_mimoto + + # Fetch issues using the SonarQube API + response=$(curl -s "${SONAR_HOST_URL}/api/issues/search?componentKeys=${SONAR_PROJECT_KEY}&severities=CRITICAL&statuses=OPEN") + echo "The response is $response" + + # Extract the value of "issues" field + issues_count=$(echo "$response" | jq '.issues | length') + echo "The number of issues $issues_count" + + if [ "$issues_count" -eq 0 ]; then + echo "No critical issues found." + else + echo "Critical issues found. Failing the pipeline" + exit 1 + fi + From 436bf3c895bd37151f4ae4276a291e31efa5c0c8 Mon Sep 17 00:00:00 2001 From: Akila Lakshmanan <77330852+akilalakshmanan@users.noreply.github.com> Date: Tue, 22 Aug 2023 11:57:35 +0530 Subject: [PATCH 079/860] [MOSIP-27625] Automated updation of mimoto wallet binding api key (#99) * [MOSIP-27625] Automated updation of mimoto wallet binding api key * [MOSIP-27193] Modified helm wait command and their conditions * [MOSIP-27193] Modified helm wait command and their conditions * [MOSIP-27193] Updated helm chart path --------- Co-authored-by: akilalakshmanan --- helm/mimoto/install.sh | 6 ++++++ partner-onboarder/install.sh | 14 ++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/helm/mimoto/install.sh b/helm/mimoto/install.sh index f2749a8ac..2d2f90d1f 100755 --- a/helm/mimoto/install.sh +++ b/helm/mimoto/install.sh @@ -40,6 +40,12 @@ function installing_mimoto() { ENABLE_INSECURE='--set enable_insecure=true'; fi + echo Setting up dummy values for Mimoto Wallet Binding api key + kubectl -n $NS create secret generic mimoto-wallet-binding-partner-api-key --from-literal=mimoto-wallet-binding-partner-api-key=111111 --dry-run=client -o yaml | kubectl apply -f - + ./copy_cm_func.sh secret mimoto-wallet-binding-partner-api-key mimoto config-server + kubectl -n config-server set env --keys=mimoto-wallet-binding-partner-api-key --from secret/mimoto-wallet-binding-partner-api-key deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ + kubectl -n config-server get deploy -o name | xargs -n1 -t kubectl -n config-server rollout status + echo Installing mimoto helm -n $NS install mimoto mosip/mimoto --version $MIMOTO_CHART_VERSION $ENABLE_INSECURE diff --git a/partner-onboarder/install.sh b/partner-onboarder/install.sh index 0e4e016af..d8a60c383 100755 --- a/partner-onboarder/install.sh +++ b/partner-onboarder/install.sh @@ -21,7 +21,7 @@ if [ "$flag" = "n" ]; then fi NS=mimoto -CHART_VERSION=12.0.1-B3 +CHART_VERSION=12.0.2 echo Create $NS namespace kubectl create ns $NS @@ -74,7 +74,17 @@ function installing_onboarder() { --set onboarding.configmaps.s3.s3-bucket-name="$s3_bucket" \ $ENABLE_INSECURE \ -f values.yaml \ - --version $CHART_VERSION + --version $CHART_VERSION \ + --wait --wait-for-jobs + + wallet_binding_partner_api_key=$(kubectl logs -n $NS job/mimoto-keybinding-partner-onboarder-mimoto-keybinding | grep "mpartner default mimoto keybinding apikey:" | awk '{print $6}') + echo Wallet Binding Partner Api Key is $wallet_binding_partner_api_key + kubectl -n $NS create secret generic mimoto-wallet-binding-partner-api-key --from-literal=mimoto-wallet-binding-partner-api-key=$wallet_binding_partner_api_key --dry-run=client -o yaml | kubectl apply -f - + ./copy_cm_func.sh secret mimoto-wallet-binding-partner-api-key mimoto config-server + kubectl -n config-server set env --keys=mimoto-wallet-binding-partner-api-key --from secret/mimoto-wallet-binding-partner-api-key deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ + kubectl -n config-server get deploy -o name | xargs -n1 -t kubectl -n config-server rollout status + kubectl rollout restart deployment -n mimoto mimoto + echo Mimoto wallet binding partner api key updated successfully. echo Reports are moved to S3 under onboarder bucket return 0 From 663128c9772252861e821e0baa57508b21e4abf2 Mon Sep 17 00:00:00 2001 From: akilalakshmanan Date: Tue, 26 Sep 2023 15:43:28 +0530 Subject: [PATCH 080/860] [MOSIP-29035] Updated mimoto onboarder script to fetch value from docker env vars --- partner-onboarder/install.sh | 3 --- 1 file changed, 3 deletions(-) diff --git a/partner-onboarder/install.sh b/partner-onboarder/install.sh index d8a60c383..c6f99e421 100755 --- a/partner-onboarder/install.sh +++ b/partner-onboarder/install.sh @@ -77,9 +77,6 @@ function installing_onboarder() { --version $CHART_VERSION \ --wait --wait-for-jobs - wallet_binding_partner_api_key=$(kubectl logs -n $NS job/mimoto-keybinding-partner-onboarder-mimoto-keybinding | grep "mpartner default mimoto keybinding apikey:" | awk '{print $6}') - echo Wallet Binding Partner Api Key is $wallet_binding_partner_api_key - kubectl -n $NS create secret generic mimoto-wallet-binding-partner-api-key --from-literal=mimoto-wallet-binding-partner-api-key=$wallet_binding_partner_api_key --dry-run=client -o yaml | kubectl apply -f - ./copy_cm_func.sh secret mimoto-wallet-binding-partner-api-key mimoto config-server kubectl -n config-server set env --keys=mimoto-wallet-binding-partner-api-key --from secret/mimoto-wallet-binding-partner-api-key deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ kubectl -n config-server get deploy -o name | xargs -n1 -t kubectl -n config-server rollout status From 8e985bc4b57cb0f3b04b2e53c5dcff42682c2ffa Mon Sep 17 00:00:00 2001 From: syed salman <72004356+syedsalman3753@users.noreply.github.com> Date: Tue, 26 Sep 2023 18:54:12 +0530 Subject: [PATCH 081/860] [MOSIP-29240] updated workflows as per reusable workflow templates (#116) [MOSIP-25631] Co-authored-by: syed-salman-technoforte --- .github/workflows/clear-artifacts.yml | 17 ++ .github/workflows/clear_artifacts.yml | 17 -- .github/workflows/push-trigger.yml | 121 +++++++++ .github/workflows/push_trigger.yml | 252 ------------------ .github/workflows/release-changes.yml | 29 ++ .../{release_chart.yml => release-chart.yml} | 0 .github/workflows/release_changes.yml | 56 ---- .github/workflows/release_trigger.yml | 168 ------------ .github/workflows/tag.yaml | 43 --- .github/workflows/tag.yml | 35 +++ pom.xml | 48 +++- 11 files changed, 247 insertions(+), 539 deletions(-) create mode 100644 .github/workflows/clear-artifacts.yml delete mode 100644 .github/workflows/clear_artifacts.yml create mode 100644 .github/workflows/push-trigger.yml delete mode 100644 .github/workflows/push_trigger.yml create mode 100644 .github/workflows/release-changes.yml rename .github/workflows/{release_chart.yml => release-chart.yml} (100%) delete mode 100644 .github/workflows/release_changes.yml delete mode 100644 .github/workflows/release_trigger.yml delete mode 100644 .github/workflows/tag.yaml create mode 100644 .github/workflows/tag.yml diff --git a/.github/workflows/clear-artifacts.yml b/.github/workflows/clear-artifacts.yml new file mode 100644 index 000000000..c78316f3e --- /dev/null +++ b/.github/workflows/clear-artifacts.yml @@ -0,0 +1,17 @@ +name: 'Delete old artifacts' +on: + schedule: + - cron: '0 * * * *' # Every hour + workflow_dispatch: + inputs: + message: + description: 'Message for manually triggering' + required: false + default: 'Triggered for Updates' + type: string +jobs: + delete-artifacts: + uses: mosip/kattu/.github/workflows/clear-artifacts.yml@master + secrets: + ACCESS_TOKEN: ${{ secrets.access_token }} + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} diff --git a/.github/workflows/clear_artifacts.yml b/.github/workflows/clear_artifacts.yml deleted file mode 100644 index 85991ce3c..000000000 --- a/.github/workflows/clear_artifacts.yml +++ /dev/null @@ -1,17 +0,0 @@ -name: 'Delete old artifacts' -on: - schedule: - - cron: '0 * * * *' # every hour - -jobs: - delete-artifacts: - runs-on: ubuntu-latest - steps: - - name: Purge Artifacts - if: env.ACCESS_TOKEN != null - uses: kolpav/purge-artifacts-action@v1 - with: - token: ${{ secrets.access_token }} - expire-in: 2days # Setting this to 0 will delete all artifacts - env: - ACCESS_TOKEN: ${{ secrets.access_token }} diff --git a/.github/workflows/push-trigger.yml b/.github/workflows/push-trigger.yml new file mode 100644 index 000000000..fb0b471cf --- /dev/null +++ b/.github/workflows/push-trigger.yml @@ -0,0 +1,121 @@ +name: Maven Package upon a push + +on: + release: + types: [published] + pull_request: + types: [opened] + workflow_dispatch: + inputs: + message: + description: 'Message for manually triggering' + required: false + default: 'Triggered for Updates' + type: string + push: + branches: + - '!release-branch' + - release* + - master + - 1.* + - develop* + - MOSIP* + +jobs: + build-mimoto: + uses: mosip/kattu/.github/workflows/maven-build.yml@master + with: + SERVICE_LOCATION: ./ + BUILD_ARTIFACT: mimoto + secrets: + OSSRH_USER: ${{ secrets.OSSRH_USER }} + OSSRH_SECRET: ${{ secrets.OSSRH_SECRET }} + OSSRH_TOKEN: ${{ secrets.OSSRH_TOKEN }} + GPG_SECRET: ${{ secrets.GPG_SECRET }} + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} + + ## Recreate zips to provide support for docker unzip operation + recreate-zips: + needs: build-mimoto + runs-on: ubuntu-latest + env: + BUILD_ARTIFACT: mimoto + NEW_BUILD_ARTIFACT: mimoto-recreated + SERVICE_LOCATION: mimoto + steps: + - uses: actions/checkout@v3 + - uses: actions/download-artifact@v3 + if: ${{ ( env.BUILD_ARTIFACT != 'false' ) }} + with: + name: ${{ env.BUILD_ARTIFACT }} + path: ../ + - name: recreate zip + run: | + cd ../ + + echo "LS ./" + ls . + echo "unzip command" + unzip -uj "${{ env.BUILD_ARTIFACT }}.zip" "target/*" -d "${{ env.SERVICE_LOCATION }}/target/" + + echo "find command" + cd ${{ env.SERVICE_LOCATION }} + find ../${{ env.SERVICE_LOCATION }} -path '*/target/*' -name '*.jar' -type f -executable -exec zip ${{ env.NEW_BUILD_ARTIFACT }}.zip {} + + + - name: Upload the springboot jars + if: ${{ !contains(github.ref, 'master') || !contains(github.ref, 'main') }} + uses: actions/upload-artifact@v3 + with: + name: ${{ env.NEW_BUILD_ARTIFACT }} + path: ${{ env.NEW_BUILD_ARTIFACT }}.zip + + + publish_to_nexus: + if: "${{ !contains(github.ref, 'master') && github.event_name != 'pull_request' }}" + needs: build-mimoto + uses: mosip/kattu/.github/workflows/maven-publish-to-nexus.yml@master + with: + SERVICE_LOCATION: ./ + secrets: + OSSRH_URL: ${{ secrets.OSSRH_SNAPSHOT_URL }} + OSSRH_USER: ${{ secrets.OSSRH_USER }} + OSSRH_SECRET: ${{ secrets.OSSRH_SECRET }} + OSSRH_TOKEN: ${{ secrets.OSSRH_TOKEN }} + GPG_SECRET: ${{ secrets.GPG_SECRET }} + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} + + sonar_analysis: + needs: build-mimoto + if: "${{ github.event_name != 'pull_request' }}" + uses: mosip/kattu/.github/workflows/maven-sonar-analysis.yml@master + with: + SERVICE_LOCATION: ./ + secrets: + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + ORG_KEY: ${{ secrets.ORG_KEY }} + OSSRH_USER: ${{ secrets.OSSRH_USER }} + OSSRH_SECRET: ${{ secrets.OSSRH_SECRET }} + OSSRH_TOKEN: ${{ secrets.OSSRH_TOKEN }} + GPG_SECRET: ${{ secrets.GPG_SECRET }} + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} + + build-dockers: + needs: recreate-zips + strategy: + matrix: + include: + - SERVICE_LOCATION: '../mimoto' + SERVICE_NAME: 'mimoto' + BUILD_ARTIFACT: 'mimoto-recreated' + fail-fast: false + uses: mosip/kattu/.github/workflows/docker-build.yml@master + name: ${{ matrix.SERVICE_NAME }} + with: + SERVICE_LOCATION: ${{ matrix.SERVICE_LOCATION }} + SERVICE_NAME: ${{ matrix.SERVICE_NAME }} + BUILD_ARTIFACT: ${{ matrix.BUILD_ARTIFACT }} + secrets: + DEV_NAMESPACE_DOCKER_HUB: ${{ secrets.DEV_NAMESPACE_DOCKER_HUB }} + ACTOR_DOCKER_HUB: ${{ secrets.ACTOR_DOCKER_HUB }} + RELEASE_DOCKER_HUB: ${{ secrets.RELEASE_DOCKER_HUB }} + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} \ No newline at end of file diff --git a/.github/workflows/push_trigger.yml b/.github/workflows/push_trigger.yml deleted file mode 100644 index 28a0f4258..000000000 --- a/.github/workflows/push_trigger.yml +++ /dev/null @@ -1,252 +0,0 @@ - -name: Maven Package upon a push - -on: - push: - branches: - - master - - 1.* - - develop - - release* - -jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: Set up JDK 11 - uses: actions/setup-java@v1 - with: - ref: ${{ github.ref }} - java-version: 11 - server-id: ossrh # Value of the distributionManagement/repository/id field of the pom.xml - settings-path: ${{ github.workspace }} # location for the settings.xml file - - - name: Setup branch and env - run: | - # Strip git ref prefix from version - echo "BRANCH_NAME=$(echo ${{ github.ref }} | sed -e 's,.*/\(.*\),\1,')" >> $GITHUB_ENV - echo "GPG_TTY=$(tty)" >> $GITHUB_ENV - - - name: Setup branch and GPG public key - run: | - # Strip git ref prefix from version - echo ${{ env.BRANCH_NAME }} - echo ${{ env.GPG_TTY }} - sudo apt-get --yes install gnupg2 - gpg2 --import ./.github/keys/mosipgpgkey_pub.gpg - gpg2 --quiet --batch --passphrase=${{secrets.gpg_secret}} --allow-secret-key-import --import ./.github/keys/mosipgpgkey_sec.gpg - - - uses: actions/cache@v1 - with: - path: ~/.m2/repository - key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} - restore-keys: | - ${{ runner.os }}-maven-${{ env.BRANCH_NAME }} - - - name: Install xmllint - run: | - sudo apt-get update - sudo apt-get install libxml2-utils - - name: Setup the settings file for ossrh server - run: echo " ossrh ${{secrets.ossrh_user}} ${{secrets.ossrh_secret}} ossrh true gpg2 ${{secrets.gpg_secret}} allow-snapshots true snapshots-repo https://oss.sonatype.org/content/repositories/snapshots false true releases-repo https://oss.sonatype.org/service/local/staging/deploy/maven2 true false sonar . https://sonarcloud.io false " > $GITHUB_WORKSPACE/settings.xml - - - name: Build with Maven - run: mvn -U -B package --file pom.xml -s $GITHUB_WORKSPACE/settings.xml - - - name: Ready the springboot artifacts - run: find -name '*.jar' -executable -type f -exec zip release.zip {} + - - - name: Upload the springboot jars - uses: actions/upload-artifact@v1 - with: - name: release - path: ./release.zip - - - uses: 8398a7/action-slack@v3 - with: - status: ${{ job.status }} - fields: repo,message,author,workflow # selectable (default: repo,message) - env: - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} # required - if: failure() # Pick up events even if the job fails or is canceled. - - publish_to_nexus: - if: "!contains(github.ref, 'master')" - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: Set up JDK 11 - uses: actions/setup-java@v1 - with: - ref: ${{ github.ref }} - java-version: 11 - server-id: ossrh # Value of the distributionManagement/repository/id field of the pom.xml - settings-path: ${{ github.workspace }} # location for the settings.xml file - - - name: Setup branch and env - run: | - # Strip git ref prefix from version - echo "BRANCH_NAME=$(echo ${{ github.ref }} | sed -e 's,.*/\(.*\),\1,')" >> $GITHUB_ENV - echo "GPG_TTY=$(tty)" >> $GITHUB_ENV - - name: Setup branch and GPG public key - run: | - # Strip git ref prefix from version - echo ${{ env.BRANCH_NAME }} - echo ${{ env.GPG_TTY }} - sudo apt-get --yes install gnupg2 - gpg2 --import ./.github/keys/mosipgpgkey_pub.gpg - gpg2 --quiet --batch --passphrase=${{secrets.gpg_secret}} --allow-secret-key-import --import ./.github/keys/mosipgpgkey_sec.gpg - - - uses: actions/cache@v1 - with: - path: ~/.m2/repository - key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} - restore-keys: | - ${{ runner.os }}-maven-${{ env.BRANCH_NAME }} - - - name: Install xmllint - run: | - sudo apt-get update - sudo apt-get install libxml2-utils - - name: Setup the settings file for ossrh server - run: echo " ossrh ossrh ${{secrets.RELEASE_USER}} ${{secrets.RELEASE_TOKEN}} ossrh true gpg2 ${{secrets.gpg_secret}} allow-snapshots true snapshots-repo https://oss.sonatype.org/content/repositories/snapshots false true releases-repo https://oss.sonatype.org/service/local/staging/deploy/maven2 true false sonar . https://sonarcloud.io false " > $GITHUB_WORKSPACE/settings.xml - - - name: Build with Maven - run: mvn -B package --file pom.xml -s $GITHUB_WORKSPACE/settings.xml - - - name: Publish the maven package - run: | - mvn -B deploy -DaltDeploymentRepository=ossrh::default::${{ secrets.OSSRH_SNAPSHOT_URL }} -s $GITHUB_WORKSPACE/settings.xml -f pom.xml - env: - GITHUB_TOKEN: ${{secrets.RELEASE_TOKEN}} - GPG_TTY: $(tty) - # - uses: 8398a7/action-slack@v3 - # with: - # status: ${{ job.status }} - # fields: repo,message,author,workflow # selectable (default: repo,message) - # env: - # SLACK_WEBHOOK_URL: ${{ secrets.SLACK_DEVOPS_WEBHOOK }} # required - # if: failure() # Pick up events even if the job fails or is canceled. - - - mimoto-docker: - needs: build - runs-on: ubuntu-latest - env: - NAMESPACE: ${{ secrets. dev_namespace_docker_hub }} - SERVICE_NAME: mimoto - - steps: - - uses: actions/checkout@v2 - - uses: actions/download-artifact@v1 - with: - name: release - path: ./ - - - name: Setup branch name - run: | - # Strip git ref prefix from version - echo "BRANCH_NAME=$(echo ${{ github.ref }} | sed -e 's,.*/\(.*\),\1,')" >> $GITHUB_ENV - echo ${{ env.BRANCH_NAME }} - - - name: Get version info from pom - id: getPomVersion - uses: mavrosxristoforos/get-xml-info@1.0 - with: - xml-file: ./pom.xml - xpath: /*[local-name()="project"]/*[local-name()="version"] - - - name: Unzip and extract the id-repository-vid-service - run: unzip -uj "release.zip" "target/*" -d "./target" - - - name: Build image - run: | - cd "./${{env.SERVICE_LOCATION}}" - # docker build . --file Dockerfile --tag ${{ env.SERVICE_NAME }} - docker build . --build-arg SOURCE=mosip --build-arg COMMIT_HASH=$(git rev-parse HEAD) --build-arg COMMIT_ID=$(git rev-parse --short HEAD) --build-arg BUILD_TIME=${{steps.date.outputs.date}} --file Dockerfile --tag ${{ env.SERVICE_NAME }} - - - - name: Log into registry - run: echo "${{ secrets.release_docker_hub }}" | docker login -u ${{ secrets.actor_docker_hub }} --password-stdin - - - name: Push image - run: | - IMAGE_ID=$NAMESPACE/$SERVICE_NAME - - # Change all uppercase to lowercase - IMAGE_ID=$(echo $IMAGE_ID | tr '[A-Z]' '[a-z]') - echo "push version ${{steps.getPomVersion.outputs.info}}" - if [[ $BRANCH_NAME == 'master' ]]; then - VERSION=latest - else - VERSION=$BRANCH_NAME - fi - echo IMAGE_ID=$IMAGE_ID - echo VERSION=$VERSION - docker tag $SERVICE_NAME $IMAGE_ID:$VERSION - docker push $IMAGE_ID:$VERSION - - uses: 8398a7/action-slack@v3 - with: - status: ${{ job.status }} - fields: repo,message,author,workflow # selectable (default: repo,message) - env: - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} # required - if: failure() # Pick up events even if the job fails or is canceled. - - - Sonar_Analysis: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - name: Set up JDK 11 - uses: actions/setup-java@v1 - with: - ref: ${{ github.ref }} - java-version: 11 - server-id: ossrh # Value of the distributionManagement/repository/id field of the pom.xml - settings-path: ${{ github.workspace }} # location for the settings.xml file - - - name: Setup branch and env - run: | - # Strip git ref prefix from version - echo "BRANCH_NAME=$(echo ${{ github.ref }} | sed -e 's,.*/\(.*\),\1,')" >> $GITHUB_ENV - echo "GPG_TTY=$(tty)" >> $GITHUB_ENV - - name: Setup branch and GPG public key - run: | - # Strip git ref prefix from version - echo ${{ env.BRANCH_NAME }} - echo ${{ env.GPG_TTY }} - sudo apt-get --yes install gnupg2 - gpg2 --import ./.github/keys/mosipgpgkey_pub.gpg - gpg2 --quiet --batch --passphrase=${{secrets.gpg_secret}} --allow-secret-key-import --import ./.github/keys/mosipgpgkey_sec.gpg - - uses: actions/cache@v1 - with: - path: ~/.m2/repository - key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} - restore-keys: | - ${{ runner.os }}-maven-${{ env.BRANCH_NAME }} - - name: Install xmllint - run: | - sudo apt-get update - sudo apt-get install libxml2-utils - - name: Setup the settings file for ossrh server - run: echo " ossrh ${{secrets.ossrh_user}} ${{secrets.ossrh_secret}} ossrh true gpg2 ${{secrets.gpg_secret}} allow-snapshots true snapshots-repo https://oss.sonatype.org/content/repositories/snapshots false true releases-repo https://oss.sonatype.org/service/local/staging/deploy/maven2 true false sonar . https://sonarcloud.io false " > $GITHUB_WORKSPACE/settings.xml - - - name: Build with Maven - run: mvn -U -B package --file pom.xml -s $GITHUB_WORKSPACE/settings.xml - - - name: analyze with sonar - run: mvn -Dgpg.skip -B verify sonar:sonar -Dsonar.projectKey=mosip_${{ github.event.repository.name }} -Dsonar.organization=${{ secrets.ORG_KEY }} -Dsonar.host.url=https://sonarcloud.io -Dsonar.login=${{ secrets.SONAR_TOKEN }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - - uses: 8398a7/action-slack@v3 - with: - status: ${{ job.status }} - fields: repo,message,author,workflow # selectable (default: repo,message) - env: - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_DEVOPS_WEBHOOK }} # required - if: failure() # Pick up events even if the job fails or is canceled. diff --git a/.github/workflows/release-changes.yml b/.github/workflows/release-changes.yml new file mode 100644 index 000000000..56f3842b5 --- /dev/null +++ b/.github/workflows/release-changes.yml @@ -0,0 +1,29 @@ +name: Release/pre-release Preparation. + +on: + workflow_dispatch: + inputs: + MESSAGE: + description: 'Triggered for release or pe-release' + required: false + default: 'Release Preparation' + RELEASE_TAG: + description: 'tag to update' + required: true + SNAPSHOT_TAG: + description: 'tag to be replaced' + required: true + BASE: + description: 'base branch for PR' + required: true +jobs: + maven-release-preparation: + uses: mosip/kattu/.github/workflows/release-changes.yml@master + with: + MESSAGE: ${{ inputs.MESSAGE }} + RELEASE_TAG: ${{ inputs.RELEASE_TAG }} + SNAPSHOT_TAG: ${{ inputs.SNAPSHOT_TAG }} + BASE: ${{ inputs.BASE }} + secrets: + ACTION_PAT: ${{ secrets.ACTION_PAT }} + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} \ No newline at end of file diff --git a/.github/workflows/release_chart.yml b/.github/workflows/release-chart.yml similarity index 100% rename from .github/workflows/release_chart.yml rename to .github/workflows/release-chart.yml diff --git a/.github/workflows/release_changes.yml b/.github/workflows/release_changes.yml deleted file mode 100644 index cc9c2956d..000000000 --- a/.github/workflows/release_changes.yml +++ /dev/null @@ -1,56 +0,0 @@ -name: Release/pre-release Preparation. - -on: - workflow_dispatch: - inputs: - message: - description: 'Triggered for release or pe-release' - required: false - default: 'Release Preparation' - releaseTags: - description: 'tag to update' - required: true - snapshotTags: - description: 'tag to be replaced' - required: true - base: - description: 'base branch for PR' - required: true -jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: Setup branch and env - run: | - # Strip git ref prefix from version - echo "BRANCH_NAME=$(echo ${{ github.ref }} | sed -e 's,.*/\(.*\),\1,')" >> $GITHUB_ENV - echo "GPG_TTY=$(tty)" >> $GITHUB_ENV - - - name: Mannualy changing the pom versions - run: find . -type f -name "*pom.xml" -print0 | xargs -0 sed -i "s/${{ github.event.inputs.snapshotTags }}/${{ github.event.inputs.releaseTags }}/g" - - - name: Updating the Release URL in POM - run: | - cd .github/workflows - sed -i 's/OSSRH_SNAPSHOT_URL/RELEASE_URL/g' push_trigger.yml - - - name: Updating libs-snapshot-local to libs-release local for artifactory URL's. - run: find . -type f -name "*Dockerfile" -print0 | xargs -0 sed -i "s/libs-snapshot-local/libs-release-local/g" - - - name: removing -DskipTests - run: find . -type f -name "*push_trigger.yml" -print0 | xargs -0 sed -i "s/"-DskipTests"//g" - -# - name: removing --Dgpg.skip -# run: find . -type f -name "*push_trigger.yml" -print0 | xargs -0 sed -i "s/"-Dgpg.skip"//g" - - - name: Create Pull Request - uses: peter-evans/create-pull-request@v3 - with: - token: ${{ secrets.ACTION_PAT }} - commit-message: Updated Pom versions for release changes - title: Release changes - body: Automated PR for ${{ github.event.inputs.releaseTags }} release. - branch: release-branch - delete-branch: true - base: ${{ github.event.inputs.base }} diff --git a/.github/workflows/release_trigger.yml b/.github/workflows/release_trigger.yml deleted file mode 100644 index dbc836db8..000000000 --- a/.github/workflows/release_trigger.yml +++ /dev/null @@ -1,168 +0,0 @@ -# This workflow will build and publish package using Maven, Docker when a release is published - -name: Release maven packages and docker upon a release - -on: - release: - types: [published] - - -jobs: - build: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - name: Set up JDK 11 - uses: actions/setup-java@v1 - with: - ref: ${{ github.ref }} - java-version: 11 - server-id: ossrh # Value of the distributionManagement/repository/id field of the pom.xml - settings-path: ${{ github.workspace }} # location for the settings.xml file - - - name: Setup branch and GPG public key - run: | - # Strip git ref prefix from version - echo "::set-env name=BRANCH_NAME::$(echo ${{ github.ref }} | sed -e 's,.*/\(.*\),\1,')" - echo ${{ env.BRANCH_NAME }} - echo "::set-env name=GPG_TTY::$(tty)" - echo ${{ env.GPG_TTY }} - sudo apt-get --yes install gnupg2 - gpg2 --import ./.github/keys/mosipgpgkey_pub.gpg - gpg2 --quiet --batch --passphrase=${{secrets.gpg_secret}} --allow-secret-key-import --import ./.github/keys/mosipgpgkey_sec.gpg - - - uses: actions/cache@v1 - with: - path: ~/.m2/repository - key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} - restore-keys: | - ${{ runner.os }}-maven-${{ env.BRANCH_NAME }} - - - name: Install xmllint - run: | - sudo apt-get update - sudo apt-get install libxml2-utils - - - name: Setup the settings file for ossrh server - run: echo " ossrh ${{secrets.ossrh_user}} ${{secrets.ossrh_secret}} ossrh true gpg2 ${{secrets.gpg_secret}} allow-snapshots true snapshots-repo https://oss.sonatype.org/content/repositories/snapshots false true releases-repo https://oss.sonatype.org/service/local/staging/deploy/maven2 true false sonar . https://sonarcloud.io false " > $GITHUB_WORKSPACE/settings.xml - - - name: Build with Maven - run: | - mvn -B package --file pom.xml -s $GITHUB_WORKSPACE/settings.xml - - - name: Ready the springboot artifacts - run: find -name '*.jar' -executable -type f -exec zip release.zip {} + - - - name: Upload the springboot jars - uses: actions/upload-artifact@v1 - with: - name: release - path: ./release.zip - - publish_to_nexus: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - name: Set up JDK 11 - uses: actions/setup-java@v1 - with: - ref: ${{ github.ref }} - java-version: 11 - server-id: ossrh # Value of the distributionManagement/repository/id field of the pom.xml - settings-path: ${{ github.workspace }} # location for the settings.xml file - - - name: Setup branch and GPG public key - run: | - # Strip git ref prefix from version - echo "::set-env name=BRANCH_NAME::$(echo ${{ github.ref }} | sed -e 's,.*/\(.*\),\1,')" - echo ${{ env.BRANCH_NAME }} - echo "::set-env name=GPG_TTY::$(tty)" - echo ${{ env.GPG_TTY }} - sudo apt-get --yes install gnupg2 - gpg2 --import ./.github/keys/mosipgpgkey_pub.gpg - gpg2 --quiet --batch --passphrase=${{secrets.gpg_secret}} --allow-secret-key-import --import ./.github/keys/mosipgpgkey_sec.gpg - - - uses: actions/cache@v1 - with: - path: ~/.m2/repository - key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} - restore-keys: | - ${{ runner.os }}-maven-${{ env.BRANCH_NAME }} - - - name: Install xmllint - run: | - sudo apt-get update - sudo apt-get install libxml2-utils - - name: Setup the settings file for ossrh server - run: echo " ossrh ${{secrets.ossrh_user}} ${{secrets.ossrh_secret}} ossrh true gpg2 ${{secrets.gpg_secret}} allow-snapshots true snapshots-repo https://oss.sonatype.org/content/repositories/snapshots false true releases-repo https://oss.sonatype.org/service/local/staging/deploy/maven2 true false sonar . https://sonarcloud.io false " > $GITHUB_WORKSPACE/settings.xml - - - name: Build with Maven - run: | - mvn -B package --file pom.xml -s $GITHUB_WORKSPACE/settings.xml - - - name: Publish the maven package - run: | - chmod +x ./deploy.sh - ./deploy.sh . $GITHUB_WORKSPACE/settings.xml .* - env: - GPG_TTY: $(tty) - - name: Analyze with SonarCloud - run: | - mvn -B verify sonar:sonar -Dsonar.projectKey=${{ secrets.PROJECT_KEY }} -Dsonar.organization=${{ secrets.ORG_KEY }} -Dsonar.host.url=https://sonarcloud.io -Dsonar.login=${{ secrets.SONAR_TOKEN }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - - docker-mimoto: - needs: build - - runs-on: ubuntu-latest - env: - NAMESPACE: ${{ secrets. dev_namespace_docker_hub }} - SERVICE_NAME: mimoto - SERVICE_LOCATION: mimoto - - steps: - - uses: actions/checkout@v2 - - uses: actions/download-artifact@v1 - with: - name: release - path: ./ - - - name: Setup branch name - run: | - # Strip git ref prefix from version - echo "::set-env name=BRANCH_NAME::$(echo ${{ github.ref }} | sed -e 's,.*/\(.*\),\1,')" - echo ${{ env.BRANCH_NAME }} - - name: Get version info from pom - id: getPomVersion - uses: mavrosxristoforos/get-xml-info@1.0 - with: - xml-file: ./${{ env.SERVICE_LOCATION }}/pom.xml - xpath: /*[local-name()="project"]/*[local-name()="version"] - - - name: Unzip and extract the mimoto service - run: unzip -uj "release.zip" "${{ env.SERVICE_LOCATION }}/target/*" -d "./${{ env.SERVICE_LOCATION }}/target" - - - name: Build image - run: | - cd "./${{env.SERVICE_LOCATION}}" - docker build . --file Dockerfile --tag ${{ env.SERVICE_NAME }} - - name: Log into registry - run: echo "${{ secrets.release_docker_hub }}" | docker login -u ${{ secrets.actor_docker_hub }} --password-stdin - - - name: Push image - run: | - IMAGE_ID=$NAMESPACE/$SERVICE_NAME - - # Change all uppercase to lowercase - IMAGE_ID=$(echo $IMAGE_ID | tr '[A-Z]' '[a-z]') - echo "push version ${{steps.getPomVersion.outputs.info}}" - VERSION=$BRANCH_NAME - echo IMAGE_ID=$IMAGE_ID - echo VERSION=$VERSION - docker tag $SERVICE_NAME $IMAGE_ID:$VERSION - docker push $IMAGE_ID:$VERSION diff --git a/.github/workflows/tag.yaml b/.github/workflows/tag.yaml deleted file mode 100644 index e9bba0e65..000000000 --- a/.github/workflows/tag.yaml +++ /dev/null @@ -1,43 +0,0 @@ -name: Tagging of repos - -env: - tag: v1.2.3 - -on: - workflow_dispatch: - inputs: - tag: - description: 'Tag to be published' - required: true - default: 'v1.2.3' - type: string - body: - description: 'Release body message' - required: true - default: 'Changes in this Release' - type: string - pre-release: - description: 'Pre-release? True/False' - required: true - default: False - type: string - -jobs: - build: - name: Create Release - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v2 - - name: Create Release - id: create_release - uses: actions/create-release@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token - with: - tag_name: ${{ github.event.inputs.tag }} - release_name: ${{ github.event.inputs.tag }} - body: | - ${{ github.event.inputs.body }} - draft: false - prerelease: ${{fromJSON(github.event.inputs.pre-release)}} diff --git a/.github/workflows/tag.yml b/.github/workflows/tag.yml new file mode 100644 index 000000000..9a5b079ff --- /dev/null +++ b/.github/workflows/tag.yml @@ -0,0 +1,35 @@ +name: Tagging of repos + +on: + workflow_dispatch: + inputs: + TAG: + description: 'Tag to be published' + required: true + type: string + BODY: + description: 'Release body message' + required: true + default: 'Changes in this Release' + type: string + PRE_RELEASE: + description: 'Pre-release? True/False' + required: true + default: False + type: string + DRAFT: + description: 'Draft? True/False' + required: false + default: False + type: string + +jobs: + tag-branch: + uses: mosip/kattu/.github/workflows/tag.yml@master + with: + TAG: ${{ inputs.TAG }} + BODY: ${{ inputs.BODY }} + PRE_RELEASE: ${{ inputs.PRE_RELEASE }} + DRAFT: ${{ inputs.DRAFT }} + secrets: + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} \ No newline at end of file diff --git a/pom.xml b/pom.xml index 463bd3be4..0600c11e4 100644 --- a/pom.xml +++ b/pom.xml @@ -12,7 +12,26 @@ 0.2.0-SNAPSHOT mimoto Mobile server backend supporting Inji. - + + + MPL 2.0 + https://www.mozilla.org/en-US/MPL/2.0/ + + + + scm:git:git://github.com/mosip/mimoto.git + scm:git:ssh://github.com:mosip/mimoto.git + https://github.com/mosip/mimoto + HEAD + + + + Mosip + mosip.emailnotifier@gmail.com + io.mosip + https://github.com/mosip/mimoto + + 11 @@ -561,8 +580,31 @@ - - + + pl.project13.maven + git-commit-id-plugin + 3.0.1 + + + get-the-git-infos + + revision + + validate + + + + true + ${project.build.outputDirectory}/git.properties + + ^git.build.(time|version)$ + ^git.commit.id.(abbrev|full)$ + + full + ${project.basedir}/.git + + + org.apache.maven.plugins maven-gpg-plugin From c0e07cba4d265ad5302cb337c922ed6e130837c8 Mon Sep 17 00:00:00 2001 From: akilalakshmanan Date: Tue, 26 Sep 2023 19:27:34 +0530 Subject: [PATCH 082/860] [MOSIP-29035] Updated mimoto onboarder script with Mimoto OIDC Partner Client ID and Keystore password value --- helm/mimoto/install.sh | 5 ++++- partner-onboarder/install.sh | 8 +++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/helm/mimoto/install.sh b/helm/mimoto/install.sh index 2d2f90d1f..57549d059 100755 --- a/helm/mimoto/install.sh +++ b/helm/mimoto/install.sh @@ -40,10 +40,13 @@ function installing_mimoto() { ENABLE_INSECURE='--set enable_insecure=true'; fi - echo Setting up dummy values for Mimoto Wallet Binding api key + echo Setting up dummy values for Mimoto Wallet Binding api key and Mimoto OIDC Partner Client ID kubectl -n $NS create secret generic mimoto-wallet-binding-partner-api-key --from-literal=mimoto-wallet-binding-partner-api-key=111111 --dry-run=client -o yaml | kubectl apply -f - ./copy_cm_func.sh secret mimoto-wallet-binding-partner-api-key mimoto config-server + kubectl -n $NS create secret generic mimoto-oidc-partner-clientid --from-literal=mimoto-oidc-partner-clientid=111111 --dry-run=client -o yaml | kubectl apply -f - + ./copy_cm_func.sh secret mimoto-oidc-partner-clientid mimoto config-server kubectl -n config-server set env --keys=mimoto-wallet-binding-partner-api-key --from secret/mimoto-wallet-binding-partner-api-key deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ + kubectl -n config-server set env --keys=mimoto-oidc-partner-clientid --from secret/mimoto-oidc-partner-clientid deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ kubectl -n config-server get deploy -o name | xargs -n1 -t kubectl -n config-server rollout status echo Installing mimoto diff --git a/partner-onboarder/install.sh b/partner-onboarder/install.sh index c6f99e421..545fc2c99 100755 --- a/partner-onboarder/install.sh +++ b/partner-onboarder/install.sh @@ -77,11 +77,17 @@ function installing_onboarder() { --version $CHART_VERSION \ --wait --wait-for-jobs + echo Updating Mimoto wallet binding partner api key and Mimoto OIDC Partner Client ID ./copy_cm_func.sh secret mimoto-wallet-binding-partner-api-key mimoto config-server + ./copy_cm_func.sh secret mimoto-oidc-partner-clientid mimoto config-server kubectl -n config-server set env --keys=mimoto-wallet-binding-partner-api-key --from secret/mimoto-wallet-binding-partner-api-key deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ + kubectl -n config-server set env --keys=mimoto-oidc-partner-clientid --from secret/mimoto-oidc-partner-clientid deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ kubectl -n config-server get deploy -o name | xargs -n1 -t kubectl -n config-server rollout status + + echo Updating mimoto-oidc-keystore-password value + kubectl -n $NS create secret generic mimoto-oidc-keystore-password --from-literal=mimoto-oidc-keystore-password='mosip123' --dry-run=client -o yaml | kubectl apply -f - + kubectl rollout restart deployment -n mimoto mimoto - echo Mimoto wallet binding partner api key updated successfully. echo Reports are moved to S3 under onboarder bucket return 0 From 89f9830325d6f7edac2344bc628ac1f39a8893d6 Mon Sep 17 00:00:00 2001 From: akilalakshmanan Date: Wed, 27 Sep 2023 14:34:46 +0530 Subject: [PATCH 083/860] [MOSIP-29035] Updated mimoto onboarder script with Mimoto oidc client id --- helm/mimoto/install.sh | 4 ++-- partner-onboarder/values.yaml | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/helm/mimoto/install.sh b/helm/mimoto/install.sh index 57549d059..4257a1e3a 100755 --- a/helm/mimoto/install.sh +++ b/helm/mimoto/install.sh @@ -41,9 +41,9 @@ function installing_mimoto() { fi echo Setting up dummy values for Mimoto Wallet Binding api key and Mimoto OIDC Partner Client ID - kubectl -n $NS create secret generic mimoto-wallet-binding-partner-api-key --from-literal=mimoto-wallet-binding-partner-api-key=111111 --dry-run=client -o yaml | kubectl apply -f - + kubectl -n $NS create secret generic mimoto-wallet-binding-partner-api-key --from-literal=mimoto-wallet-binding-partner-api-key= --dry-run=client -o yaml | kubectl apply -f - ./copy_cm_func.sh secret mimoto-wallet-binding-partner-api-key mimoto config-server - kubectl -n $NS create secret generic mimoto-oidc-partner-clientid --from-literal=mimoto-oidc-partner-clientid=111111 --dry-run=client -o yaml | kubectl apply -f - + kubectl -n $NS create secret generic mimoto-oidc-partner-clientid --from-literal=mimoto-oidc-partner-clientid= --dry-run=client -o yaml | kubectl apply -f - ./copy_cm_func.sh secret mimoto-oidc-partner-clientid mimoto config-server kubectl -n config-server set env --keys=mimoto-wallet-binding-partner-api-key --from secret/mimoto-wallet-binding-partner-api-key deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ kubectl -n config-server set env --keys=mimoto-oidc-partner-clientid --from secret/mimoto-oidc-partner-clientid deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ diff --git a/partner-onboarder/values.yaml b/partner-onboarder/values.yaml index 50f720490..713521dac 100644 --- a/partner-onboarder/values.yaml +++ b/partner-onboarder/values.yaml @@ -19,4 +19,6 @@ onboarding: - name: demo-oidc enabled: false - name: mimoto-keybinding + enabled: true + - name: mimoto-oidc enabled: true \ No newline at end of file From 637f95ced055b4276fe25154f70e6ac0c45782ae Mon Sep 17 00:00:00 2001 From: akilalakshmanan Date: Wed, 27 Sep 2023 16:01:39 +0530 Subject: [PATCH 084/860] [MOSIP-29035] Updated quotes to set dummy variables --- helm/mimoto/install.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/helm/mimoto/install.sh b/helm/mimoto/install.sh index 4257a1e3a..6483fc283 100755 --- a/helm/mimoto/install.sh +++ b/helm/mimoto/install.sh @@ -41,9 +41,9 @@ function installing_mimoto() { fi echo Setting up dummy values for Mimoto Wallet Binding api key and Mimoto OIDC Partner Client ID - kubectl -n $NS create secret generic mimoto-wallet-binding-partner-api-key --from-literal=mimoto-wallet-binding-partner-api-key= --dry-run=client -o yaml | kubectl apply -f - + kubectl -n $NS create secret generic mimoto-wallet-binding-partner-api-key --from-literal=mimoto-wallet-binding-partner-api-key='' --dry-run=client -o yaml | kubectl apply -f - ./copy_cm_func.sh secret mimoto-wallet-binding-partner-api-key mimoto config-server - kubectl -n $NS create secret generic mimoto-oidc-partner-clientid --from-literal=mimoto-oidc-partner-clientid= --dry-run=client -o yaml | kubectl apply -f - + kubectl -n $NS create secret generic mimoto-oidc-partner-clientid --from-literal=mimoto-oidc-partner-clientid='' --dry-run=client -o yaml | kubectl apply -f - ./copy_cm_func.sh secret mimoto-oidc-partner-clientid mimoto config-server kubectl -n config-server set env --keys=mimoto-wallet-binding-partner-api-key --from secret/mimoto-wallet-binding-partner-api-key deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ kubectl -n config-server set env --keys=mimoto-oidc-partner-clientid --from secret/mimoto-oidc-partner-clientid deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ From d1fbb5a2c317925ba158e8b100f365db5a6e829d Mon Sep 17 00:00:00 2001 From: syed salman <72004356+syedsalman3753@users.noreply.github.com> Date: Thu, 28 Sep 2023 11:39:47 +0530 Subject: [PATCH 085/860] [MOSIP-29204] Updated scripts & helm charts to mount keystore.p12 file from secret (#121) Co-authored-by: syed-salman-technoforte --- helm/mimoto/.gitignore | 1 + helm/mimoto/install.sh | 3 +++ helm/mimoto/templates/deployment.yaml | 17 ++++++++++++++++- helm/mimoto/values.yaml | 6 ++++++ 4 files changed, 26 insertions(+), 1 deletion(-) diff --git a/helm/mimoto/.gitignore b/helm/mimoto/.gitignore index ee3892e87..1654d0dc3 100644 --- a/helm/mimoto/.gitignore +++ b/helm/mimoto/.gitignore @@ -1 +1,2 @@ charts/ +Chart.lock \ No newline at end of file diff --git a/helm/mimoto/install.sh b/helm/mimoto/install.sh index 6483fc283..4288d27c7 100755 --- a/helm/mimoto/install.sh +++ b/helm/mimoto/install.sh @@ -49,6 +49,9 @@ function installing_mimoto() { kubectl -n config-server set env --keys=mimoto-oidc-partner-clientid --from secret/mimoto-oidc-partner-clientid deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ kubectl -n config-server get deploy -o name | xargs -n1 -t kubectl -n config-server rollout status + + kubectl -n $NS create secret generic mimoto --from-literal=keystore.p12='' + echo Installing mimoto helm -n $NS install mimoto mosip/mimoto --version $MIMOTO_CHART_VERSION $ENABLE_INSECURE diff --git a/helm/mimoto/templates/deployment.yaml b/helm/mimoto/templates/deployment.yaml index c4f43dce9..7457744d9 100644 --- a/helm/mimoto/templates/deployment.yaml +++ b/helm/mimoto/templates/deployment.yaml @@ -93,6 +93,8 @@ spec: value: {{ .Values.containerSecurityContext.runAsUser }} - name: JDK_JAVA_OPTIONS value: {{ .Values.additionalResources.javaOpts }} + - name: KEYSTORE_P12_PATH + value: {{ .Values.volumes.secrets.mimoto.path }} {{- if .Values.extraEnvVars }} {{- include "common.tplvalues.render" (dict "value" .Values.extraEnvVars "context" $) | nindent 12 }} {{- end }} @@ -112,6 +114,12 @@ spec: volumeMounts: - name: landing-folder mountPath: {{ .Values.persistence.mountDir }} + {{- if .Values.volumes.secrets }} + {{- range $secretName, $value := .Values.volumes.secrets }} + - name: {{ $secretName }} + mountPath: {{ $value.path }} + {{- end }} + {{- end }} {{- if .Values.enable_insecure }} - mountPath: /usr/local/openjdk-11/lib/security/cacerts name: cacerts @@ -146,7 +154,14 @@ spec: claimName: {{ .Values.persistence.existingClaim | default (include "common.names.fullname" .) }} {{- else }} emptyDir: {} - {{ end }} + {{- end }} + {{- if .Values.volumes.secrets }} + {{- range $secretName, $value := .Values.volumes.secrets }} + - name: {{ $secretName }} + secret: + secretName: {{ $secretName }} + {{- end }} + {{- end }} {{- if .Values.enable_insecure }} - name: cacerts emptyDir: {} diff --git a/helm/mimoto/values.yaml b/helm/mimoto/values.yaml index ed7d85873..d45c60c80 100644 --- a/helm/mimoto/values.yaml +++ b/helm/mimoto/values.yaml @@ -461,3 +461,9 @@ istio: rewrite: /v1/mimoto enable_insecure: false + +volumes: + secrets: + mimoto: + key: keystorep12 + path: /home/mosip/certs \ No newline at end of file From bf4cc9c767b52fd9bbf4de138b3b6f72d72f6af4 Mon Sep 17 00:00:00 2001 From: akilalakshmanan Date: Thu, 28 Sep 2023 15:30:12 +0530 Subject: [PATCH 086/860] [MOSIP-29035] Added mimoto-oidc-keystore-password to mimoto's install script --- helm/mimoto/install.sh | 6 ++++++ partner-onboarder/install.sh | 3 --- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/helm/mimoto/install.sh b/helm/mimoto/install.sh index 4288d27c7..bb6b48b37 100755 --- a/helm/mimoto/install.sh +++ b/helm/mimoto/install.sh @@ -45,8 +45,14 @@ function installing_mimoto() { ./copy_cm_func.sh secret mimoto-wallet-binding-partner-api-key mimoto config-server kubectl -n $NS create secret generic mimoto-oidc-partner-clientid --from-literal=mimoto-oidc-partner-clientid='' --dry-run=client -o yaml | kubectl apply -f - ./copy_cm_func.sh secret mimoto-oidc-partner-clientid mimoto config-server + + echo Updating mimoto-oidc-keystore-password value + kubectl -n $NS create secret generic mimoto-oidc-keystore-password --from-literal=mimoto-oidc-keystore-password='mosip123' --dry-run=client -o yaml | kubectl apply -f - + ./copy_cm_func.sh secret mimoto-oidc-keystore-password mimoto config-server + kubectl -n config-server set env --keys=mimoto-wallet-binding-partner-api-key --from secret/mimoto-wallet-binding-partner-api-key deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ kubectl -n config-server set env --keys=mimoto-oidc-partner-clientid --from secret/mimoto-oidc-partner-clientid deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ + kubectl -n config-server set env --keys=mimoto-oidc-keystore-password --from secret/mimoto-oidc-keystore-password deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ kubectl -n config-server get deploy -o name | xargs -n1 -t kubectl -n config-server rollout status diff --git a/partner-onboarder/install.sh b/partner-onboarder/install.sh index 545fc2c99..6466ac0d7 100755 --- a/partner-onboarder/install.sh +++ b/partner-onboarder/install.sh @@ -84,9 +84,6 @@ function installing_onboarder() { kubectl -n config-server set env --keys=mimoto-oidc-partner-clientid --from secret/mimoto-oidc-partner-clientid deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ kubectl -n config-server get deploy -o name | xargs -n1 -t kubectl -n config-server rollout status - echo Updating mimoto-oidc-keystore-password value - kubectl -n $NS create secret generic mimoto-oidc-keystore-password --from-literal=mimoto-oidc-keystore-password='mosip123' --dry-run=client -o yaml | kubectl apply -f - - kubectl rollout restart deployment -n mimoto mimoto echo Reports are moved to S3 under onboarder bucket From eadf7dd96a9fce38db355e95c92f18aafc66269b Mon Sep 17 00:00:00 2001 From: syed-salman-technoforte Date: Tue, 10 Oct 2023 15:11:45 +0530 Subject: [PATCH 087/860] [MOSIP-29204] remove keystorep12 to oidckeystore.p12 --- helm/mimoto/values.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helm/mimoto/values.yaml b/helm/mimoto/values.yaml index d45c60c80..d89414b12 100644 --- a/helm/mimoto/values.yaml +++ b/helm/mimoto/values.yaml @@ -465,5 +465,5 @@ enable_insecure: false volumes: secrets: mimoto: - key: keystorep12 + key: oidckeystore.p12 path: /home/mosip/certs \ No newline at end of file From 7fc6af984c0e4d4888e42585d900f19bfb3d721f Mon Sep 17 00:00:00 2001 From: syed salman <72004356+syedsalman3753@users.noreply.github.com> Date: Tue, 10 Oct 2023 19:29:16 +0530 Subject: [PATCH 088/860] [MOSIP-29204] remove keystorep12 to oidckeystore.p12 Signed-off-by: syedsalman3753 --- helm/mimoto/install.sh | 3 --- helm/mimoto/templates/deployment.yaml | 2 +- helm/mimoto/values.yaml | 2 +- 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/helm/mimoto/install.sh b/helm/mimoto/install.sh index bb6b48b37..8844baac6 100755 --- a/helm/mimoto/install.sh +++ b/helm/mimoto/install.sh @@ -55,9 +55,6 @@ function installing_mimoto() { kubectl -n config-server set env --keys=mimoto-oidc-keystore-password --from secret/mimoto-oidc-keystore-password deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ kubectl -n config-server get deploy -o name | xargs -n1 -t kubectl -n config-server rollout status - - kubectl -n $NS create secret generic mimoto --from-literal=keystore.p12='' - echo Installing mimoto helm -n $NS install mimoto mosip/mimoto --version $MIMOTO_CHART_VERSION $ENABLE_INSECURE diff --git a/helm/mimoto/templates/deployment.yaml b/helm/mimoto/templates/deployment.yaml index 7457744d9..9ca07eb7f 100644 --- a/helm/mimoto/templates/deployment.yaml +++ b/helm/mimoto/templates/deployment.yaml @@ -94,7 +94,7 @@ spec: - name: JDK_JAVA_OPTIONS value: {{ .Values.additionalResources.javaOpts }} - name: KEYSTORE_P12_PATH - value: {{ .Values.volumes.secrets.mimoto.path }} + value: {{ .Values.volumes.secrets.mimotooidc.path }} {{- if .Values.extraEnvVars }} {{- include "common.tplvalues.render" (dict "value" .Values.extraEnvVars "context" $) | nindent 12 }} {{- end }} diff --git a/helm/mimoto/values.yaml b/helm/mimoto/values.yaml index d89414b12..fc2f31c9f 100644 --- a/helm/mimoto/values.yaml +++ b/helm/mimoto/values.yaml @@ -464,6 +464,6 @@ enable_insecure: false volumes: secrets: - mimoto: + mimotooidc: key: oidckeystore.p12 path: /home/mosip/certs \ No newline at end of file From 681e8d583379feb5aa02569223eb726c293c7658 Mon Sep 17 00:00:00 2001 From: syed salman Date: Wed, 11 Oct 2023 12:19:14 +0530 Subject: [PATCH 089/860] [MOSIP-29204] Adding rollout restart config-server Signed-off-by: syed salman --- helm/mimoto/install.sh | 2 ++ partner-onboarder/install.sh | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/helm/mimoto/install.sh b/helm/mimoto/install.sh index 8844baac6..fcd078efa 100755 --- a/helm/mimoto/install.sh +++ b/helm/mimoto/install.sh @@ -53,6 +53,8 @@ function installing_mimoto() { kubectl -n config-server set env --keys=mimoto-wallet-binding-partner-api-key --from secret/mimoto-wallet-binding-partner-api-key deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ kubectl -n config-server set env --keys=mimoto-oidc-partner-clientid --from secret/mimoto-oidc-partner-clientid deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ kubectl -n config-server set env --keys=mimoto-oidc-keystore-password --from secret/mimoto-oidc-keystore-password deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ + + kubectl -n config-server rollout restart deployment config-server kubectl -n config-server get deploy -o name | xargs -n1 -t kubectl -n config-server rollout status echo Installing mimoto diff --git a/partner-onboarder/install.sh b/partner-onboarder/install.sh index 6466ac0d7..52f6d7ed6 100755 --- a/partner-onboarder/install.sh +++ b/partner-onboarder/install.sh @@ -67,7 +67,7 @@ function installing_onboarder() { s3_user_key=$( kubectl -n s3 get cm s3 -o json | jq -r '.data."s3-user-key"' ) echo Onboarding default partners - helm -n $NS install mimoto-keybinding-partner-onboarder mosip/partner-onboarder \ + helm -n $NS install mimoto-partner-onboarder mosip/partner-onboarder \ --set onboarding.configmaps.s3.s3-host="$s3_url" \ --set onboarding.configmaps.s3.s3-user-key="$s3_user_key" \ --set onboarding.configmaps.s3.s3-region="$s3_region" \ @@ -84,7 +84,8 @@ function installing_onboarder() { kubectl -n config-server set env --keys=mimoto-oidc-partner-clientid --from secret/mimoto-oidc-partner-clientid deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ kubectl -n config-server get deploy -o name | xargs -n1 -t kubectl -n config-server rollout status - kubectl rollout restart deployment -n mimoto mimoto + kubectl -n config-server rollout restart deployment config-server + kubectl -n mimoto rollout restart deployment mimoto echo Reports are moved to S3 under onboarder bucket return 0 From fe5ae4ed0bd685d453a9c0a9c0c32b8e080798a8 Mon Sep 17 00:00:00 2001 From: akilalakshmanan Date: Wed, 11 Oct 2023 14:47:06 +0530 Subject: [PATCH 090/860] [MOSIP-29035] Updated mimoto keystore password Signed-off-by: akilalakshmanan --- helm/mimoto/install.sh | 2 +- partner-onboarder/install.sh | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/helm/mimoto/install.sh b/helm/mimoto/install.sh index fcd078efa..9c3d4fc03 100755 --- a/helm/mimoto/install.sh +++ b/helm/mimoto/install.sh @@ -47,7 +47,7 @@ function installing_mimoto() { ./copy_cm_func.sh secret mimoto-oidc-partner-clientid mimoto config-server echo Updating mimoto-oidc-keystore-password value - kubectl -n $NS create secret generic mimoto-oidc-keystore-password --from-literal=mimoto-oidc-keystore-password='mosip123' --dry-run=client -o yaml | kubectl apply -f - + kubectl -n $NS create secret generic mimoto-oidc-keystore-password --from-literal=mimoto-oidc-keystore-password='' --dry-run=client -o yaml | kubectl apply -f - ./copy_cm_func.sh secret mimoto-oidc-keystore-password mimoto config-server kubectl -n config-server set env --keys=mimoto-wallet-binding-partner-api-key --from secret/mimoto-wallet-binding-partner-api-key deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ diff --git a/partner-onboarder/install.sh b/partner-onboarder/install.sh index 52f6d7ed6..4d271d3d7 100755 --- a/partner-onboarder/install.sh +++ b/partner-onboarder/install.sh @@ -77,11 +77,17 @@ function installing_onboarder() { --version $CHART_VERSION \ --wait --wait-for-jobs + echo Updating mimoto-oidc-keystore-password value + kubectl -n $NS create secret generic mimoto-oidc-keystore-password --from-literal=mimoto-oidc-keystore-password='mosip123' --dry-run=client -o yaml | kubectl apply -f - + ./copy_cm_func.sh secret mimoto-oidc-keystore-password mimoto config-server + echo Updating Mimoto wallet binding partner api key and Mimoto OIDC Partner Client ID ./copy_cm_func.sh secret mimoto-wallet-binding-partner-api-key mimoto config-server ./copy_cm_func.sh secret mimoto-oidc-partner-clientid mimoto config-server kubectl -n config-server set env --keys=mimoto-wallet-binding-partner-api-key --from secret/mimoto-wallet-binding-partner-api-key deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ kubectl -n config-server set env --keys=mimoto-oidc-partner-clientid --from secret/mimoto-oidc-partner-clientid deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ + kubectl -n config-server set env --keys=mimoto-oidc-keystore-password --from secret/mimoto-oidc-keystore-password deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ + kubectl -n config-server get deploy -o name | xargs -n1 -t kubectl -n config-server rollout status kubectl -n config-server rollout restart deployment config-server From 01d3ccc675c3422df875f63db8192fadd2ead4e3 Mon Sep 17 00:00:00 2001 From: syed salman Date: Wed, 11 Oct 2023 15:51:04 +0530 Subject: [PATCH 091/860] [MOSIP-29204] Fixed secret empty issue Signed-off-by: syed salman --- helm/mimoto/install.sh | 7 ++----- partner-onboarder/delete.sh | 4 ++-- partner-onboarder/install.sh | 4 +--- 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/helm/mimoto/install.sh b/helm/mimoto/install.sh index 9c3d4fc03..b4450a98c 100755 --- a/helm/mimoto/install.sh +++ b/helm/mimoto/install.sh @@ -40,14 +40,11 @@ function installing_mimoto() { ENABLE_INSECURE='--set enable_insecure=true'; fi - echo Setting up dummy values for Mimoto Wallet Binding api key and Mimoto OIDC Partner Client ID - kubectl -n $NS create secret generic mimoto-wallet-binding-partner-api-key --from-literal=mimoto-wallet-binding-partner-api-key='' --dry-run=client -o yaml | kubectl apply -f - + echo "Copy secrets to config-server namespace" ./copy_cm_func.sh secret mimoto-wallet-binding-partner-api-key mimoto config-server - kubectl -n $NS create secret generic mimoto-oidc-partner-clientid --from-literal=mimoto-oidc-partner-clientid='' --dry-run=client -o yaml | kubectl apply -f - ./copy_cm_func.sh secret mimoto-oidc-partner-clientid mimoto config-server echo Updating mimoto-oidc-keystore-password value - kubectl -n $NS create secret generic mimoto-oidc-keystore-password --from-literal=mimoto-oidc-keystore-password='' --dry-run=client -o yaml | kubectl apply -f - ./copy_cm_func.sh secret mimoto-oidc-keystore-password mimoto config-server kubectl -n config-server set env --keys=mimoto-wallet-binding-partner-api-key --from secret/mimoto-wallet-binding-partner-api-key deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ @@ -55,7 +52,7 @@ function installing_mimoto() { kubectl -n config-server set env --keys=mimoto-oidc-keystore-password --from secret/mimoto-oidc-keystore-password deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ kubectl -n config-server rollout restart deployment config-server - kubectl -n config-server get deploy -o name | xargs -n1 -t kubectl -n config-server rollout status + kubectl -n config-server rollout status deployment config-server echo Installing mimoto helm -n $NS install mimoto mosip/mimoto --version $MIMOTO_CHART_VERSION $ENABLE_INSECURE diff --git a/partner-onboarder/delete.sh b/partner-onboarder/delete.sh index a91c9de68..e807c8bbd 100755 --- a/partner-onboarder/delete.sh +++ b/partner-onboarder/delete.sh @@ -11,8 +11,8 @@ function deleting_onboarder() { while true; do read -p "Are you sure you want to delete all partner-onboarder ?(Y/n) " yn if [ $yn = "Y" ]; then - echo Deleting mimoto-keybinding-partner-onboarder helm - helm -n $NS delete mimoto-keybinding-partner-onboarder + echo Deleting mimoto-partner-onboarder helm + helm -n $NS delete mimoto-partner-onboarder break fi done diff --git a/partner-onboarder/install.sh b/partner-onboarder/install.sh index 4d271d3d7..a9ef4bd6a 100755 --- a/partner-onboarder/install.sh +++ b/partner-onboarder/install.sh @@ -88,10 +88,8 @@ function installing_onboarder() { kubectl -n config-server set env --keys=mimoto-oidc-partner-clientid --from secret/mimoto-oidc-partner-clientid deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ kubectl -n config-server set env --keys=mimoto-oidc-keystore-password --from secret/mimoto-oidc-keystore-password deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ - kubectl -n config-server get deploy -o name | xargs -n1 -t kubectl -n config-server rollout status - kubectl -n config-server rollout restart deployment config-server - kubectl -n mimoto rollout restart deployment mimoto + kubectl -n config-server rollout status deployment config-server echo Reports are moved to S3 under onboarder bucket return 0 From 520bd5ce57c40a3dab1c21db2a5819c756517874 Mon Sep 17 00:00:00 2001 From: vijay151096 <94220135+vijay151096@users.noreply.github.com> Date: Wed, 11 Oct 2023 18:20:39 +0530 Subject: [PATCH 092/860] feat : Download Credential from Esignet using OpenId4VCI Implementation (#132) * Updated Pom versions for release changes * Update Chart.yaml Signed-off-by: Keshav Mishra * [DSD-2827]Update mimoto prefix in values.yaml (#88) (#89) Signed-off-by: Rakshitha650 <76676196+Rakshitha650@users.noreply.github.com> Co-authored-by: Rakshitha650 <76676196+Rakshitha650@users.noreply.github.com> * Release changes (#95) * Updated Pom versions for release changes * Update pom.xml Signed-off-by: Keshav Mishra * Update pom.xml Signed-off-by: Keshav Mishra --------- Signed-off-by: Keshav Mishra Co-authored-by: ckm007 * [DSD-3099] Update values.yaml (#96) (#97) Signed-off-by: Keshav Mishra * feat(INJI-221): [Vijay] getToken endpoint mock implementation for oidc * feat(INJI-221): [Vijay] adding feature branch for running the push_trigger * feat(INJI-221): [Vijay] modify the getToken endpoint * feat(INJI-221): [Vijay] modify the getToken endpoint to support oidc flow * feat(INJI-221): [Vijay] modify the getToken endpoint to support oidc flow * feat(INJI-221): [Vijay] modify the getToken endpoint to support oidc flow * feat(INJI-221): [Vijay] modify the getToken endpoint to support oidc flow * feat(INJI-235): [Kiruthika|Vijay] introduce endpoints to list issuers and issuers config, and also esignet get-token endpoint changes * feat(INJI-221): [Vijay] refactoring get token endpoint * feat(INJI-236): refer to openid issuers from config server * fix(INJI-236): remove utilities constructor * fix the build failure. * fix(INJI-235): add openid issuer property to avoid app run build failure * refactor(INJI-235): remove duplication in Issuer related DTOs * test(INJI-235): add test for issuer endpoints * feat(INJI-235): return bad request response when invalid issuer id is passed to get issuer config endpoint * test(INJI-235): mock issuer service in test related to issuers endpoints * refactor(INJI-235): change ID of issuers endpoints response * test(INJI-235): refactor issuers object creation * refactor(INJI-235): return 404 with error details if invalid issuerId is given in get issuer config endpoint * refactor(INJI-235): modify serialVersionUID of invalid issuers exception * refactor(INJI-235): modify response of issuer not found in get issuer config endpoint * feat(INJI-221): implement get token endpoint with esignet token endpoint and retreive the token * feat(INJI-277): return ApiNotAccessible error with 500 statuscode when reading issuers fails Co-authored-by: Sreenadh S <32409698+sree96@users.noreply.github.com> * refactor(INJI-277): add static import for PlatformMessageConstants * refactor(INJI-277): remove log chain * feat(INJI-277): return ApiNotAccessible error with 500 statuscode when reading issuers fails * refactor(INJI-277): add log for invalid issuerId is given in get issuer config endpoint * [INJI-245]: configuration changes to issuers config endpoint * feat(INJI-245): add pkce support for /token endpoint (#108) * refactor(INJI-245): add protocol & credential endpoint in issuers config * fix(inji-245): modify the partner details for testing * refactor(inji-245): refactor properties to point to general environment. * fix(inji-416): increase client assertion jwt token expiry * Updated values.yaml Signed-off-by: Mahesh-Binayak <76687012+Mahesh-Binayak@users.noreply.github.com> * feat(inji-231): integrating the mounted keystore file with get-token endpoint Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * Revert "Merge remote-tracking branch 'origin' into oidc-mock-implementation" This reverts commit 80d1e5d0cce96bb157f1c6a0705d2354ed36a8e9, reversing changes made to 84b600962b5f2fd2808ea5e38a46ac34ee174440. * feat(inji-231): adding necessary loggers Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * feat(inji-231): adding necessary loggers Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * feat(inji-231): removed unwanted changes and loggers Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * feat(inji-231): extract inline variables to constants, and change log level Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --------- Signed-off-by: vijay151096 <94220135+vijay151096@users.noreply.github.com> Signed-off-by: Keshav Mishra Signed-off-by: Rakshitha650 <76676196+Rakshitha650@users.noreply.github.com> Signed-off-by: Mahesh-Binayak <76687012+Mahesh-Binayak@users.noreply.github.com> Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> Co-authored-by: Mohanraj209 Co-authored-by: Keshav Mishra Co-authored-by: Monobikash Das <43202165+MonobikashDas@users.noreply.github.com> Co-authored-by: Rakshitha650 <76676196+Rakshitha650@users.noreply.github.com> Co-authored-by: ckm007 Co-authored-by: Vijay Co-authored-by: Harsh Vardhan Co-authored-by: Kiruthika Jeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Co-authored-by: Sreenadh S <32409698+sree96@users.noreply.github.com> Co-authored-by: Swati Goel Co-authored-by: Mahesh-Binayak <76687012+Mahesh-Binayak@users.noreply.github.com> --- certs/oidckeystore.p12 | Bin 0 -> 4540 bytes partner-onboarder/values.yaml | 2 +- .../io/mosip/mimoto/constant/ApiName.java | 4 +- .../mimoto/controller/IdpController.java | 37 ++++- .../mimoto/controller/IssuersController.java | 81 ++++++++++ .../java/io/mosip/mimoto/dto/IssuerDTO.java | 35 ++++ .../java/io/mosip/mimoto/dto/IssuersDTO.java | 13 ++ .../mimoto/dto/ServiceConfiguration.java | 11 ++ .../mosip/mimoto/dto/idp/TokenRequestDTO.java | 14 ++ .../mimoto/dto/idp/TokenResponseDTO.java | 27 ++++ .../exception/InvalidIssuerIdException.java | 24 +++ .../exception/PlatformErrorMessages.java | 3 +- .../io/mosip/mimoto/service/IdpService.java | 10 ++ .../mosip/mimoto/service/IssuersService.java | 13 ++ .../mimoto/service/impl/IdpServiceImpl.java | 44 +++++ .../service/impl/IssuersServiceImpl.java | 50 ++++++ .../io/mosip/mimoto/util/CryptoCoreUtil.java | 7 +- .../java/io/mosip/mimoto/util/JoseUtil.java | 58 ++++++- .../java/io/mosip/mimoto/util/Utilities.java | 53 ++++-- .../resources/application-local.properties | 39 +++-- src/main/resources/openid-issuers-config.json | 21 +++ .../mimoto/controller/InjiControllerTest.java | 152 ++++++++++++++---- .../mimoto/service/IssuersServiceTest.java | 111 +++++++++++++ 23 files changed, 729 insertions(+), 80 deletions(-) create mode 100644 certs/oidckeystore.p12 create mode 100644 src/main/java/io/mosip/mimoto/controller/IssuersController.java create mode 100644 src/main/java/io/mosip/mimoto/dto/IssuerDTO.java create mode 100644 src/main/java/io/mosip/mimoto/dto/IssuersDTO.java create mode 100644 src/main/java/io/mosip/mimoto/dto/ServiceConfiguration.java create mode 100644 src/main/java/io/mosip/mimoto/dto/idp/TokenRequestDTO.java create mode 100644 src/main/java/io/mosip/mimoto/dto/idp/TokenResponseDTO.java create mode 100644 src/main/java/io/mosip/mimoto/exception/InvalidIssuerIdException.java create mode 100644 src/main/java/io/mosip/mimoto/service/IdpService.java create mode 100644 src/main/java/io/mosip/mimoto/service/IssuersService.java create mode 100644 src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java create mode 100644 src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java create mode 100644 src/main/resources/openid-issuers-config.json create mode 100644 src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java diff --git a/certs/oidckeystore.p12 b/certs/oidckeystore.p12 new file mode 100644 index 0000000000000000000000000000000000000000..92e794eb7d4fa586f6cdc686394475014b55f84d GIT binary patch literal 4540 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 D{pE6a literal 0 HcmV?d00001 diff --git a/partner-onboarder/values.yaml b/partner-onboarder/values.yaml index 713521dac..7e02a6903 100644 --- a/partner-onboarder/values.yaml +++ b/partner-onboarder/values.yaml @@ -21,4 +21,4 @@ onboarding: - name: mimoto-keybinding enabled: true - name: mimoto-oidc - enabled: true \ No newline at end of file + enabled: true diff --git a/src/main/java/io/mosip/mimoto/constant/ApiName.java b/src/main/java/io/mosip/mimoto/constant/ApiName.java index f9ceab18f..35e288701 100644 --- a/src/main/java/io/mosip/mimoto/constant/ApiName.java +++ b/src/main/java/io/mosip/mimoto/constant/ApiName.java @@ -2,7 +2,7 @@ /** * The Enum ApiName. - * + * * @author Rishabh Keshari */ public enum ApiName { @@ -105,7 +105,7 @@ public enum ApiName { RESIDENT_AUTH_UNLOCK, RESIDENT_INDIVIDUALID_OTP, RESIDENT_AID_GET_INDIVIDUALID, - + IDP_LINK_TRANSACTION, IDP_AUTHENTICATE, IDP_CONSENT, diff --git a/src/main/java/io/mosip/mimoto/controller/IdpController.java b/src/main/java/io/mosip/mimoto/controller/IdpController.java index dc71b39cb..f75c164bd 100644 --- a/src/main/java/io/mosip/mimoto/controller/IdpController.java +++ b/src/main/java/io/mosip/mimoto/controller/IdpController.java @@ -5,27 +5,27 @@ import com.google.gson.Gson; import io.mosip.kernel.core.logger.spi.Logger; import io.mosip.kernel.core.util.JsonUtils; -import io.mosip.kernel.core.util.exception.JsonProcessingException; import io.mosip.mimoto.constant.ApiName; import io.mosip.mimoto.core.http.ResponseWrapper; import io.mosip.mimoto.dto.ErrorDTO; +import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.exception.IdpException; -import io.mosip.mimoto.exception.InvalidInputException; import io.mosip.mimoto.exception.PlatformErrorMessages; +import io.mosip.mimoto.service.IdpService; import io.mosip.mimoto.service.RestClientService; import io.mosip.mimoto.util.*; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.*; +import org.springframework.util.MultiValueMap; import org.springframework.validation.BindingResult; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.client.RestTemplate; import javax.validation.Valid; import java.util.List; +import java.util.Map; @RestController public class IdpController { @@ -47,6 +47,12 @@ public class IdpController { @Autowired RequestValidator requestValidator; + @Value("${mosip.oidc.esignet.token.endpoint}") + String tokenEndpoint; + + @Autowired + IdpService idpService; + @PostMapping("/binding-otp") @SuppressWarnings("unchecked") public ResponseEntity otpRequest(@Valid @RequestBody BindingOtpRequestDto requestDTO, BindingResult result) throws Exception { @@ -102,6 +108,21 @@ public ResponseEntity request(@RequestBody WalletBindingRequestDTO reque return ResponseEntity.status(HttpStatus.OK).body(response); } + @PostMapping(value = "/get-token", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) + public ResponseEntity getToken(@RequestParam Map params) { + logger.debug("Started Token Call get-token-> " + params.toString()); + RestTemplate restTemplate = new RestTemplate(); + try { + HttpEntity> request = idpService.constructGetTokenRequest(params); + TokenResponseDTO response = restTemplate.postForObject(tokenEndpoint, request, TokenResponseDTO.class); + return ResponseEntity.status(HttpStatus.OK).body(response); + } catch (Exception ex){ + logger.error("Exception Occured while invoking the get-token endpoint", ex); + ResponseWrapper response = getErrorResponse(PlatformErrorMessages.MIMOTO_IDP_GENERIC_EXCEPTION.getCode(), ex.getMessage()); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(response); + } + } + private ResponseWrapper getErrorResponse(String errorCode, String errorMessage) { List errors = getErrors(errorCode, errorMessage); diff --git a/src/main/java/io/mosip/mimoto/controller/IssuersController.java b/src/main/java/io/mosip/mimoto/controller/IssuersController.java new file mode 100644 index 000000000..7ed1363a0 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/controller/IssuersController.java @@ -0,0 +1,81 @@ +package io.mosip.mimoto.controller; + +import io.mosip.mimoto.core.http.ResponseWrapper; +import io.mosip.mimoto.dto.ErrorDTO; +import io.mosip.mimoto.dto.IssuerDTO; +import io.mosip.mimoto.dto.IssuersDTO; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.service.IssuersService; +import io.mosip.mimoto.util.DateUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.io.IOException; +import java.util.List; + +import static io.mosip.mimoto.exception.PlatformErrorMessages.API_NOT_ACCESSIBLE_EXCEPTION; +import static io.mosip.mimoto.exception.PlatformErrorMessages.INVALID_ISSUER_ID_EXCEPTION; + +@RestController +@RequestMapping(value = "/issuers") +public class IssuersController { + @Autowired + IssuersService issuersService; + + private static final String ID = "mosip.mimoto.issuers"; + + private final Logger logger = LoggerFactory.getLogger(IssuersController.class); + + @GetMapping() + public ResponseEntity getAllIssuers() { + ResponseWrapper responseWrapper = new ResponseWrapper<>(); + responseWrapper.setId(ID); + responseWrapper.setVersion("v1"); + responseWrapper.setResponsetime(DateUtils.getRequestTimeString()); + try { + responseWrapper.setResponse(issuersService.getAllIssuers()); + } catch (ApiNotAccessibleException | IOException e) { + logger.error("Exception occurred while fetching issuers ", e); + responseWrapper.setErrors(List.of(new ErrorDTO(API_NOT_ACCESSIBLE_EXCEPTION.getCode(), API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(responseWrapper); + } + + return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); + } + + @GetMapping("/{issuer-id}") + public ResponseEntity getIssuerConfig(@PathVariable("issuer-id") String issuerId) { + ResponseWrapper responseWrapper = new ResponseWrapper<>(); + responseWrapper.setId(ID); + responseWrapper.setVersion("v1"); + responseWrapper.setResponsetime(DateUtils.getRequestTimeString()); + + + IssuerDTO issuerConfig; + try { + issuerConfig = issuersService.getIssuerConfig(issuerId); + } catch (ApiNotAccessibleException | IOException exception) { + logger.error("Exception occurred while fetching issuers ", exception); + responseWrapper.setErrors(List.of(new ErrorDTO(API_NOT_ACCESSIBLE_EXCEPTION.getCode(), API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(responseWrapper); + } + + responseWrapper.setResponse(issuerConfig); + + if (issuerConfig == null) { + logger.error("invalid issuer id passed - {}", issuerId); + responseWrapper.setErrors(List.of(new ErrorDTO(INVALID_ISSUER_ID_EXCEPTION.getCode(), INVALID_ISSUER_ID_EXCEPTION.getMessage()))); + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(responseWrapper); + } + + return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); + } + +} diff --git a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java new file mode 100644 index 000000000..a0d7a4978 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java @@ -0,0 +1,35 @@ +package io.mosip.mimoto.dto; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.google.gson.annotations.Expose; +import lombok.Data; + +import java.util.List; +import java.util.Map; + +import static com.fasterxml.jackson.annotation.JsonInclude.Include.*; + + +@Data +public class IssuerDTO { + @Expose + String id; + @Expose + String displayName; + @Expose + String protocol; + @Expose + String logoUrl; + @Expose + String clientId; + @Expose + String wellKnownEndpoint; + @JsonInclude(NON_NULL) + String redirectUrl; + @JsonInclude(NON_NULL) + List scopes; + @JsonInclude(NON_NULL) + ServiceConfiguration serviceConfiguration; + @JsonInclude(NON_NULL) + Map additionalHeaders; +} diff --git a/src/main/java/io/mosip/mimoto/dto/IssuersDTO.java b/src/main/java/io/mosip/mimoto/dto/IssuersDTO.java new file mode 100644 index 000000000..b526cd43e --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/IssuersDTO.java @@ -0,0 +1,13 @@ +package io.mosip.mimoto.dto; + +import com.google.gson.annotations.Expose; +import lombok.Data; + +import java.util.List; + +@Data +public class IssuersDTO { + @Expose + List issuers; + +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/dto/ServiceConfiguration.java b/src/main/java/io/mosip/mimoto/dto/ServiceConfiguration.java new file mode 100644 index 000000000..84378075a --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/ServiceConfiguration.java @@ -0,0 +1,11 @@ +package io.mosip.mimoto.dto; + +import lombok.Data; + +@Data +public class ServiceConfiguration { + String authorizationEndpoint; + String tokenEndpoint; + String credentialEndpoint; + String credentialAudience; +} diff --git a/src/main/java/io/mosip/mimoto/dto/idp/TokenRequestDTO.java b/src/main/java/io/mosip/mimoto/dto/idp/TokenRequestDTO.java new file mode 100644 index 000000000..3ecaf1661 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/idp/TokenRequestDTO.java @@ -0,0 +1,14 @@ +package io.mosip.mimoto.dto.idp; + +import lombok.Data; + +@Data +public class TokenRequestDTO { + private String grant_type; + private String code; + private String client_id; + private String client_secret; + private String redirect_uri; + private String client_assertion_type; + private String client_assertion; +} diff --git a/src/main/java/io/mosip/mimoto/dto/idp/TokenResponseDTO.java b/src/main/java/io/mosip/mimoto/dto/idp/TokenResponseDTO.java new file mode 100644 index 000000000..365fe10ff --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/idp/TokenResponseDTO.java @@ -0,0 +1,27 @@ +package io.mosip.mimoto.dto.idp; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@Data + +public class TokenResponseDTO { + @JsonInclude(JsonInclude.Include.NON_NULL) + private String id_token; + + @JsonInclude(JsonInclude.Include.NON_NULL) + private String token_type; + + @JsonInclude(JsonInclude.Include.NON_NULL) + private String access_token; + + @JsonInclude(JsonInclude.Include.NON_NULL) + private int expires_in; + + @JsonInclude(JsonInclude.Include.NON_NULL) + private String scope; +} diff --git a/src/main/java/io/mosip/mimoto/exception/InvalidIssuerIdException.java b/src/main/java/io/mosip/mimoto/exception/InvalidIssuerIdException.java new file mode 100644 index 000000000..b79e83093 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/exception/InvalidIssuerIdException.java @@ -0,0 +1,24 @@ +package io.mosip.mimoto.exception; + +public class InvalidIssuerIdException extends BaseUncheckedException { + + /** + * Unique id for serialization + */ + private static final long serialVersionUID = -5350213127226295789L; + + /** + * Constructor with errorCode, and errorMessage + * + * @param errorCode The error code for this exception + * @param errorMessage The error message for this exception + */ + public InvalidIssuerIdException(String errorCode, String errorMessage) { + super(errorCode, errorMessage); + } + + public InvalidIssuerIdException(String errorMessage) { + super(PlatformErrorMessages.INVALID_ISSUER_ID_EXCEPTION.getCode(), errorMessage); + } + +} diff --git a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java index 43dbda3f2..b936e2212 100644 --- a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java +++ b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java @@ -80,7 +80,8 @@ public enum PlatformErrorMessages { MIMOTO_IDP_AUTHENTICATE_EXCEPTION(PlatformConstants.PREFIX + "031", "Idp authenticate exception occured"), MIMOTO_IDP_CONSENT_EXCEPTION(PlatformConstants.PREFIX + "032", "Idp consent exception occured"), MIMOTO_IDP_OTP_EXCEPTION(PlatformConstants.PREFIX + "033", "IDP Otp error occured"), - MIMOTO_IDP_GENERIC_EXCEPTION(PlatformConstants.PREFIX + "034", "Could not get response from server"); + MIMOTO_IDP_GENERIC_EXCEPTION(PlatformConstants.PREFIX + "034", "Could not get response from server"), + INVALID_ISSUER_ID_EXCEPTION(PlatformConstants.PREFIX + "035", "Invalid issuer ID"); /** The error message. */ private final String errorMessage; diff --git a/src/main/java/io/mosip/mimoto/service/IdpService.java b/src/main/java/io/mosip/mimoto/service/IdpService.java new file mode 100644 index 000000000..95c0d01be --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/IdpService.java @@ -0,0 +1,10 @@ +package io.mosip.mimoto.service; + +import org.springframework.http.HttpEntity; +import org.springframework.util.MultiValueMap; + +import java.util.Map; + +public interface IdpService { + public HttpEntity> constructGetTokenRequest(Map params); +} diff --git a/src/main/java/io/mosip/mimoto/service/IssuersService.java b/src/main/java/io/mosip/mimoto/service/IssuersService.java new file mode 100644 index 000000000..3d3f63d26 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/IssuersService.java @@ -0,0 +1,13 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.dto.IssuerDTO; +import io.mosip.mimoto.dto.IssuersDTO; +import io.mosip.mimoto.exception.ApiNotAccessibleException; + +import java.io.IOException; + +public interface IssuersService { + IssuersDTO getAllIssuers() throws ApiNotAccessibleException, IOException; + + IssuerDTO getIssuerConfig(String issuerId) throws ApiNotAccessibleException, IOException; +} diff --git a/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java new file mode 100644 index 000000000..fdac7f2eb --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java @@ -0,0 +1,44 @@ +package io.mosip.mimoto.service.impl; + +import io.mosip.mimoto.service.IdpService; +import io.mosip.mimoto.util.JoseUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Service; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; + +import java.util.Map; + +@Service +public class IdpServiceImpl implements IdpService { + + @Value("${mosip.oidc.client.id}") + String clientId; + + @Value("${mosip.oidc.client.assertion.type}") + String clientAssertionType; + + @Autowired + JoseUtil joseUtil; + + @Override + public HttpEntity> constructGetTokenRequest(Map params) { + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + + MultiValueMap map= new LinkedMultiValueMap<>(); + map.add("code", params.get("code")); + map.add("client_id", clientId); + map.add("grant_type", params.get("grant_type")); + map.add("redirect_uri", params.get("redirect_uri")); + map.add("client_assertion", joseUtil.getJWT(clientId).replace("[","").replace("]","")); + map.add("client_assertion_type", clientAssertionType); + map.add("code_verifier", params.get("code_verifier")); + + return new HttpEntity<>(map, headers); + } +} diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java new file mode 100644 index 000000000..8b7ac4872 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -0,0 +1,50 @@ +package io.mosip.mimoto.service.impl; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import io.mosip.mimoto.dto.IssuerDTO; +import io.mosip.mimoto.dto.IssuersDTO; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.service.IssuersService; +import io.mosip.mimoto.util.Utilities; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.util.Optional; + +@Service +public class IssuersServiceImpl implements IssuersService { + @Autowired + private Utilities utilities; + + @Override + public IssuersDTO getAllIssuers() throws ApiNotAccessibleException, IOException { + IssuersDTO issuers; + String issuersConfigJsonValue = utilities.getIssuersConfigJsonValue(); + if (issuersConfigJsonValue == null) { + throw new ApiNotAccessibleException(); + } + Gson gsonWithIssuerDataOnlyFilter = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); + issuers = gsonWithIssuerDataOnlyFilter.fromJson(issuersConfigJsonValue, IssuersDTO.class); + + return issuers; + } + + + @Override + public IssuerDTO getIssuerConfig(String issuerId) throws ApiNotAccessibleException, IOException { + IssuerDTO issuerDTO = null; + String issuersConfigJsonValue = utilities.getIssuersConfigJsonValue(); + if (issuersConfigJsonValue == null) { + throw new ApiNotAccessibleException(); + } + IssuersDTO issuers = new Gson().fromJson(issuersConfigJsonValue, IssuersDTO.class); + Optional issuerConfigResp = issuers.getIssuers().stream() + .filter(issuer -> issuer.getId().equals(issuerId)) + .findFirst(); + if (issuerConfigResp.isPresent()) + issuerDTO = issuerConfigResp.get(); + return issuerDTO; + } +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/util/CryptoCoreUtil.java b/src/main/java/io/mosip/mimoto/util/CryptoCoreUtil.java index d6074c816..873410d5d 100644 --- a/src/main/java/io/mosip/mimoto/util/CryptoCoreUtil.java +++ b/src/main/java/io/mosip/mimoto/util/CryptoCoreUtil.java @@ -83,7 +83,7 @@ public String decrypt(String data) throws Exception { return decryptedData; } - public PrivateKeyEntry loadP12() throws IOException { + public PrivateKeyEntry loadP12(String fileName, String alias, String cyptoPassword) throws IOException { PrivateKeyEntry privateKeyEntry = null; InputStream keystoreResourceStream = null; try { @@ -106,6 +106,9 @@ public PrivateKeyEntry loadP12() throws IOException { } return privateKeyEntry; } + public PrivateKeyEntry loadP12() throws IOException { + return loadP12(fileName, alias, cyptoPassword); + } public byte[] decryptData(byte[] requestData, PrivateKeyEntry privateKey) throws Exception { String keySplitter = "#KEY_SPLITTER#"; @@ -174,7 +177,7 @@ private static int getSplitterIndex(byte[] encryptedData, int keyDemiliterIndex, } /** - * + * * @param privateKey * @param keyModulus * @param data diff --git a/src/main/java/io/mosip/mimoto/util/JoseUtil.java b/src/main/java/io/mosip/mimoto/util/JoseUtil.java index f46882427..425c77971 100644 --- a/src/main/java/io/mosip/mimoto/util/JoseUtil.java +++ b/src/main/java/io/mosip/mimoto/util/JoseUtil.java @@ -1,5 +1,8 @@ package io.mosip.mimoto.util; +import com.auth0.jwt.JWT; +import com.auth0.jwt.algorithms.Algorithm; +import com.auth0.jwt.interfaces.RSAKeyProvider; import com.fasterxml.jackson.databind.ObjectMapper; import com.nimbusds.jose.jwk.JWK; import com.nimbusds.jose.jwk.KeyUse; @@ -13,17 +16,22 @@ import io.mosip.mimoto.dto.mimoto.WalletBindingResponseDto; import org.jose4j.jws.JsonWebSignature; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; +import java.io.IOException; import java.math.BigInteger; -import java.security.KeyFactory; -import java.security.NoSuchAlgorithmException; -import java.security.PublicKey; +import java.security.*; import java.security.cert.X509Certificate; +import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; import java.security.spec.InvalidKeySpecException; import java.security.spec.RSAPublicKeySpec; import java.security.spec.X509EncodedKeySpec; +import java.time.Instant; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; import java.util.UUID; @Component @@ -32,10 +40,29 @@ public class JoseUtil { private final Logger logger = LoggerUtil.getLogger(JoseUtil.class); private static final String BEGIN_KEY = "-----BEGIN PUBLIC KEY-----"; private static final String END_KEY = "-----END PUBLIC KEY-----"; + private static final String ALG_RS256 = "RS256"; @Autowired private ObjectMapper mapper; + @Autowired + private CryptoCoreUtil cryptoCoreUtil; + + @Value("${mosip.oidc.p12.filename}") + private String fileName; + + @Value("${mosip.oidc.p12.password}") + private String cyptoPassword; + + @Value("${mosip.oidc.p12.path}") + String keyStorePath; + + @Value("${mosip.oidc.p12.alias}") + private String alias; + + @Value("${mosip.oidc.esignet.aud}") + private String audience; + public static JwkDto getJwkFromPublicKey(String publicKeyString) throws NoSuchAlgorithmException, InvalidKeySpecException { RSAPublicKeySpec keySpec = publicKeyString.startsWith(BEGIN_KEY) ? getKeySpecForPublicKey(publicKeyString) : getKeySpecForRSAKey(publicKeyString); @@ -117,4 +144,29 @@ public ResponseWrapper addThumbprintAndKeyId(ResponseW return responseWrapper; } + + public String getJWT(String clientId) { + + Map header = new HashMap<>(); + header.put("alg", ALG_RS256); + + String keyStorePathWithFileName = keyStorePath + fileName; + Date issuedAt = Date.from(Instant.now()); + Date expiresAt = Date.from(Instant.now().plusMillis(120000)); + KeyStore.PrivateKeyEntry privateKeyEntry= null; + try { + privateKeyEntry = cryptoCoreUtil.loadP12(keyStorePathWithFileName, alias, cyptoPassword); + } catch (IOException e) { + logger.error("Exception happened while loading the p12 file for invoking token call."); + } + RSAPrivateKey privateKey = (RSAPrivateKey) privateKeyEntry.getPrivateKey(); + return JWT.create() + .withHeader(header) + .withIssuer(clientId) + .withSubject(clientId) + .withAudience(audience) + .withExpiresAt(expiresAt) + .withIssuedAt(issuedAt) + .sign(Algorithm.RSA256(null, privateKey)); + } } diff --git a/src/main/java/io/mosip/mimoto/util/Utilities.java b/src/main/java/io/mosip/mimoto/util/Utilities.java index e36ddb78b..28269b190 100644 --- a/src/main/java/io/mosip/mimoto/util/Utilities.java +++ b/src/main/java/io/mosip/mimoto/util/Utilities.java @@ -17,6 +17,7 @@ import org.json.simple.parser.JSONParser; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.io.Resource; import org.springframework.stereotype.Component; import io.mosip.kernel.core.logger.spi.Logger; @@ -55,7 +56,9 @@ public class Utilities { private Logger logger = LoggerUtil.getLogger(Utilities.class); - /** The Constant FILE_SEPARATOR. */ + /** + * The Constant FILE_SEPARATOR. + */ public static final String FILE_SEPARATOR = "\\"; @Autowired @@ -64,32 +67,54 @@ public class Utilities { @Autowired private RestApiClient restApiClient; - /** The rest client service. */ + /** + * The rest client service. + */ @Autowired private RestClientService restClientService; - /** The config server file storage URL. */ + /** + * The config server file storage URL. + */ @Value("${config.server.file.storage.uri}") private String configServerFileStorageURL; - /** The get reg processor identity json. */ + /** + * The get reg processor identity json. + */ @Value("${registration.processor.identityjson}") private String getRegProcessorIdentityJson; - /** The get reg processor demographic identity. */ + /** + * The get reg processor demographic identity. + */ @Value("${registration.processor.demographic.identity}") private String getRegProcessorDemographicIdentity; - /** The registration processor abis json. */ + /** + * The registration processor abis json. + */ @Value("${registration.processor.print.textfile}") private String registrationProcessorPrintTextFile; + /** + * The get reg issuers config json. + */ + @Value("${mosip.openid.issuers}") + private String getIssuersConfigJson; + private String mappingJsonString = null; private String identityMappingJsonString = null; private String printTextFileJsonString = null; + private String issuersConfigJsonString = null; + +// uncomment for running mimoto Locally to populate the issuers json +// public Utilities(@Value("classpath:openid-issuers-config.json") Resource resource) throws IOException { +// issuersConfigJsonString = (Files.readString(resource.getFile().toPath())); +// } public JSONObject getTemplate() throws JsonParseException, JsonMappingException, IOException { return objectMapper.readValue(classLoader.getResourceAsStream(defaultTemplate), JSONObject.class); @@ -147,10 +172,8 @@ public void removeCacheData(String requestId) throws IOException { /** * Gets the json. * - * @param configServerFileStorageURL - * the config server file storage URL - * @param uri - * the uri + * @param configServerFileStorageURL the config server file storage URL + * @param uri the uri * @return the json */ public String getJson(String configServerFileStorageURL, String uri) { @@ -197,7 +220,7 @@ public JSONObject retrieveIdrepoJson(String uin) ResponseWrapper idResponseDto; idResponseDto = (ResponseWrapper) restClientService.getApi(ApiName.IDREPOGETIDBYUIN, pathSegments, "", "", - ResponseWrapper.class); + ResponseWrapper.class); if (idResponseDto == null) { logger.debug(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.UIN.toString(), "", "Utilities::retrieveIdrepoJson()::exit idResponseDto is null"); @@ -231,8 +254,7 @@ public JSONObject retrieveIdrepoJson(String uin) * RegistrationProcessorIdentity java class. * * @return the registration processor identity json - * @throws IOException - * Signals that an I/O exception has occurred. + * @throws IOException Signals that an I/O exception has occurred. */ public JSONObject getRegistrationProcessorMappingJson() throws IOException { logger.debug(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.USERID.toString(), "", @@ -257,6 +279,11 @@ public String getMappingJsonValue(String key) throws IOException { return jsonObject.get(key) != null ? jsonObject.get(key).toString() : null; } + public String getIssuersConfigJsonValue() throws IOException { + return (issuersConfigJsonString != null && !issuersConfigJsonString.isEmpty()) ? + issuersConfigJsonString : getJson(configServerFileStorageURL, getIssuersConfigJson); + } + /** * retrieve UIN from IDRepo by registration id. diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 0140736ea..06b55e463 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -1,9 +1,9 @@ # MOSIP -mosipbox.public.url=https://api-internal.qatriple.mosip.net -public.internet.url=https://api.qatriple.mosip.net -public.url=https://api-internal.qatriple.mosip.net -keycloak.internal.url=https://iam.qatriple.mosip.net/ +mosipbox.public.url=https://api-internal.dev2.mosip.net +public.internet.url=https://api.dev2.mosip.net +public.url=https://api-internal.dev2.mosip.net +keycloak.internal.url=https://iam.dev2.mosip.net/ # Resident service mosip.resident.base.url=${mosipbox.public.url}/resident/v1 @@ -160,22 +160,17 @@ CREATEDATASHARE=${mosipbox.public.url}/v1/datashare/create DECRYPTPINBASSED=${mosipbox.public.url}/v1/keymanager/decryptWithPin # config.server.file.storage.uri=${spring.cloud.config.uri}/${spring.application.name}/${spring.profiles.active}/${spring.cloud.config.label}/ -config.server.file.storage.uri=${mosipbox.public.url}/config/print/mz/develop2-v2/ +config.server.file.storage.uri=${mosipbox.public.url}/config/print/mz/develop2-v3/ # websub authentication - auth adapter mosip.iam.adapter.clientid=mpartner-default-mobile -# dev -#mosip.iam.adapter.clientsecret=0YINDhkf4t2JVend -# dev3 -# mosip.iam.adapter.clientsecret=nD1CevIBri1X0Jzj -# dev2 -# mosip.iam.adapter.clientsecret=l22WdJg9Qdrf3B90 -# qa1201 -# mosip.iam.adapter.clientsecret=KXGkd7XMbsoxCUz9 +#dev2 +mosip.iam.adapter.clientsecret=mJQ3g1dPbonDFNW8 + +#qa-inji +#mosip.iam.adapter.clientsecret=vl3ox2rvSeW78LzL -# qatriple -mosip.iam.adapter.clientsecret=vl3ox2rvSeW78LzL mosip.iam.adapter.appid=partner @@ -201,4 +196,16 @@ mosip.kernel.auth.appids.realm.map={prereg:'mosip',ida:'mosip',registrationclien wallet.binding.partner.id=mpartner-default-keybindingtoken wallet.binding.partner.api.key=Aci9jg28B8mO_LDfDXo3ZTp5_HKgEMun2tYyHCa1e8k #wallet.binding.partner.id=mpartner-default-mimotobinding -#wallet.binding.partner.api.key=14378 \ No newline at end of file +#wallet.binding.partner.api.key=14378 + +# OpenID +mosip.openid.issuers=openid-issuers-config.json +#configurations related to openid4vc +mosip.oidc.esignet.token.endpoint=https://api-internal.dev1.mosip.net/v1/esignet/oauth/token +mosip.oidc.esignet.aud=https://esignet.dev1.mosip.net/v1/esignet/oauth/token +mosip.oidc.client.id=3FpvldoSV2XD8_X3D4BaVWgpDDRU8Yrmudugk2uazHw +mosip.oidc.client.assertion.type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer +mosip.oidc.p12.filename=oidckeystore.p12 +mosip.oidc.p12.password=5YBx6QT2wbY8Ls6w +mosip.oidc.p12.path=certs/ +mosip.oidc.p12.alias=mpartner-default-mimotooidc diff --git a/src/main/resources/openid-issuers-config.json b/src/main/resources/openid-issuers-config.json new file mode 100644 index 000000000..a5ddb0a20 --- /dev/null +++ b/src/main/resources/openid-issuers-config.json @@ -0,0 +1,21 @@ +{ + "issuers": [ + { + "id": "ESignet", + "displayName": "e-Signet", + "protocol": "OpenId4VCI", + "logoUrl": "https://${mosip.esignet.host}/logo.png", + "clientId": "7-j3xRzU3SODdoNgSGvO_cD8UijH3AIWRDAg1x-M", + "scopes": ["mosip_identity_vc_ldp"], + "additionalHeaders": { "Accept": "application/json" }, + "wellKnownEndpoint": null, + "redirectUrl": "io.mosip.residentapp.inji://oauthredirect", + "serviceConfiguration": { + "authorizationEndpoint": "https://esignet.dev1.mosip.net/authorize", + "tokenEndpoint": "https://api.dev2.mosip.net/residentmobileapp/get-token", + "credentialEndpoint": "https://api-internal.dev1.mosip.net/v1/esignet/vci/credential", + "credentialAudience": "https://esignet.dev1.mosip.net/v1/esignet" + } + } + ] +} diff --git a/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java b/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java index 9426286f9..b203e257c 100644 --- a/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java @@ -8,15 +8,21 @@ import io.mosip.kernel.websub.api.model.SubscriptionChangeResponse; import io.mosip.mimoto.TestBootApplication; import io.mosip.mimoto.core.http.ResponseWrapper; +import io.mosip.mimoto.dto.IssuerDTO; +import io.mosip.mimoto.dto.IssuersDTO; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.dto.resident.*; +import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.ApisResourceAccessException; import io.mosip.mimoto.exception.BaseUncheckedException; +import io.mosip.mimoto.exception.PlatformErrorMessages; import io.mosip.mimoto.model.Event; import io.mosip.mimoto.model.EventModel; import io.mosip.mimoto.service.RestClientService; import io.mosip.mimoto.service.impl.CredentialShareServiceImpl; +import io.mosip.mimoto.service.impl.IssuersServiceImpl; import io.mosip.mimoto.util.*; +import org.hamcrest.Matchers; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; @@ -35,11 +41,13 @@ import java.io.IOException; import java.nio.file.Files; -import java.util.HashMap; -import java.util.Map; +import java.util.*; +import static io.mosip.mimoto.exception.PlatformErrorMessages.API_NOT_ACCESSIBLE_EXCEPTION; +import static io.mosip.mimoto.exception.PlatformErrorMessages.INVALID_ISSUER_ID_EXCEPTION; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @RunWith(SpringRunner.class) @@ -66,9 +74,15 @@ public class InjiControllerTest { @MockBean private CredentialShareServiceImpl credentialShareService; + @MockBean + private IssuersServiceImpl issuersService; + @Autowired private MockMvc mockMvc; + @MockBean + Utilities utilities; + @MockBean private AttestationOfflineVerify attestationOfflineVerify; @@ -81,9 +95,6 @@ public class InjiControllerTest { @MockBean public CryptoCoreUtil cryptoCoreUtil; - @MockBean - private Utilities utilities; - @Before public void setup() throws IOException { //PowerMockito.mockStatic(Files.class); @@ -112,12 +123,79 @@ public void getAllPropertiesTest() throws Exception { .andExpect(status().isOk()); } + static IssuerDTO getIssuerDTO(String issuerName) { + IssuerDTO issuer = new IssuerDTO(); + issuer.setId(issuerName + "id"); + issuer.setDisplayName(issuerName); + issuer.setLogoUrl("/logo"); + issuer.setClientId("123"); + if (issuerName.equals("Issuer1")) issuer.setWellKnownEndpoint("/.well-known"); + else { + issuer.setRedirectUrl(null); + issuer.setServiceConfiguration(null); + issuer.setAdditionalHeaders(null); + issuer.setScopes(null); + } + return issuer; + } + + @Test + public void getAllIssuersTest() throws Exception { + IssuersDTO issuers = new IssuersDTO(); + issuers.setIssuers((List.of(getIssuerDTO("Issuer1"), getIssuerDTO("Issuer2")))); + Mockito.when(issuersService.getAllIssuers()) + .thenReturn(issuers) + .thenThrow(new ApiNotAccessibleException()); + + mockMvc.perform(get("/issuers").accept(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.response.issuers", Matchers.everyItem( + Matchers.allOf( + Matchers.hasKey("id"), + Matchers.hasKey("displayName"), + Matchers.hasKey("logoUrl"), + Matchers.hasKey("clientId"), + Matchers.hasKey("wellKnownEndpoint"), + Matchers.not(Matchers.hasKey("redirectUrl")), + Matchers.not(Matchers.hasKey("serviceConfiguration")), + Matchers.not(Matchers.hasKey("additionalHeaders")), + Matchers.not(Matchers.hasKey("scopes")) + ) + ))); + + mockMvc.perform(get("/issuers").accept(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getCode()))) + .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); + } + + @Test + public void getIssuerConfigTest() throws Exception { + Mockito.when(issuersService.getIssuerConfig("id1")) + .thenReturn(getIssuerDTO("Issuer1")) + .thenThrow(new ApiNotAccessibleException()); + Mockito.when(issuersService.getIssuerConfig("invalidId")).thenReturn(null); + + mockMvc.perform(get("/issuers/id1").accept(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isOk()); + + mockMvc.perform(get("/issuers/invalidId").accept(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isNotFound()) + .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is(INVALID_ISSUER_ID_EXCEPTION.getCode()))) + .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(INVALID_ISSUER_ID_EXCEPTION.getMessage()))); + + mockMvc.perform(get("/issuers/id1").accept(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getCode()))) + .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); + } + @Test public void processOfflineTest() throws Exception { AttestationStatement attestationStatement = new AttestationStatement(); Mockito.when(attestationOfflineVerify.parseAndVerify(Mockito.anyString())).thenReturn(attestationStatement); this.mockMvc.perform(post("/safetynet/offline/verify").contentType(MediaType.APPLICATION_JSON_VALUE) - .content("offlineStr")) + .content("offlineStr")) .andExpect(status().isOk()); } @@ -126,7 +204,7 @@ public void processOfflineFailureTest() throws Exception { AttestationStatement attestationStatement = new AttestationStatement(); Mockito.when(attestationOfflineVerify.parseAndVerify(Mockito.anyString())).thenThrow(new Exception("Exception")); this.mockMvc.perform(post("/safetynet/offline/verify").contentType(MediaType.APPLICATION_JSON_VALUE) - .content("offlineStr")) + .content("offlineStr")) .andExpect(status().isOk()); } @@ -135,7 +213,7 @@ public void processOnlineTest() throws Exception { AttestationStatement attestationStatement = new AttestationStatement(); Mockito.when(attestationOnlineVerify.parseAndVerify(Mockito.anyString())).thenReturn(attestationStatement); this.mockMvc.perform(post("/safetynet/online/verify").contentType(MediaType.APPLICATION_JSON_VALUE) - .content("offlineStr")) + .content("offlineStr")) .andExpect(status().isOk()); } @@ -144,11 +222,13 @@ public void processOnlineFailureTest() throws Exception { AttestationStatement attestationStatement = new AttestationStatement(); Mockito.when(attestationOnlineVerify.parseAndVerify(Mockito.anyString())).thenThrow(new Exception("Exception")); this.mockMvc.perform(post("/safetynet/online/verify").contentType(MediaType.APPLICATION_JSON_VALUE) - .content("offlineStr")) + .content("offlineStr")) .andExpect(status().isOk()); } - /** CREDENTIAL SHARE CONTROLLER TEST CASES */ + /** + * CREDENTIAL SHARE CONTROLLER TEST CASES + */ @Test @Ignore @@ -162,7 +242,7 @@ public void handleSubscribeEventTest() throws Exception { Mockito.when(credentialShareService.generateDocuments(Mockito.any())).thenReturn(true); this.mockMvc.perform(post("/v1/mimoto/credentialshare/callback/notify").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(eventModel))) + .content(JsonUtils.javaObjectToJsonString(eventModel))) .andExpect(status().isOk()); } @@ -186,7 +266,7 @@ public void requestTest() throws Exception { Mockito.when(credentialShareService.generateDocuments(Mockito.any())).thenReturn(true); this.mockMvc.perform(post("/credentialshare/request").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) .andExpect(status().isOk()); } @@ -219,23 +299,25 @@ public void downloadTest() throws Exception { Mockito.when(utilities.getRequestVC(Mockito.anyString())).thenReturn(requestCredentialJSON); this.mockMvc.perform(post("/credentialshare/download").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) .andExpect(status().isOk()); Mockito.when(utilities.getDecryptedVC(Mockito.anyString())).thenReturn(null); this.mockMvc.perform(post("/credentialshare/download").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) .andExpect(status().isNotFound()); Mockito.when(utilities.getDecryptedVC(Mockito.anyString())).thenThrow(new IOException("Exception")); this.mockMvc.perform(post("/credentialshare/download").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) .andExpect(status().isNotFound()); } - /** IDP CONTROLLER TEST CASES */ + /** + * IDP CONTROLLER TEST CASES + */ @Test public void otpRequestTest() throws Exception { @@ -251,11 +333,11 @@ public void otpRequestTest() throws Exception { Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(response).thenThrow(new BaseUncheckedException("Exception")); this.mockMvc.perform(post("/binding-otp").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) .andExpect(status().isOk()); this.mockMvc.perform(post("/binding-otp").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) .andExpect(status().isOk()); } @@ -274,11 +356,11 @@ public void walletBindingTest() throws Exception { Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(response).thenThrow(new BaseUncheckedException("Exception")); this.mockMvc.perform(post("/wallet-binding").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) .andExpect(status().isOk()); this.mockMvc.perform(post("/wallet-binding").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) .andExpect(status().isOk()); } @@ -295,11 +377,11 @@ public void linkTransactionTest() throws Exception { Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(response).thenThrow(new BaseUncheckedException("Exception")); this.mockMvc.perform(post("/link-transaction").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) .andExpect(status().isOk()); this.mockMvc.perform(post("/link-transaction").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) .andExpect(status().isOk()); } @@ -326,7 +408,7 @@ public void idpAuthAndConsentTest() throws Exception { responseWrapper.setResponse(resp); Mockito.when(restClientService.postApi(Mockito.any(), - Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(responseWrapper) + Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(responseWrapper) .thenReturn(responseWrapper).thenThrow(new ApisResourceAccessException("exception")); this.mockMvc.perform(post("/idp-auth-consent").contentType(MediaType.APPLICATION_JSON_VALUE) @@ -364,11 +446,11 @@ public void idpAuthenticateTest() throws Exception { Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(otpResponse).thenReturn(response).thenReturn(otpResponse2); this.mockMvc.perform(post("/idp-authenticate").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDto))) + .content(JsonUtils.javaObjectToJsonString(requestDto))) .andExpect(status().isOk()); this.mockMvc.perform(post("/idp-authenticate").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDto))) + .content(JsonUtils.javaObjectToJsonString(requestDto))) .andExpect(status().isOk()); } @@ -389,15 +471,17 @@ public void idpConsentTest() throws Exception { Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(response).thenThrow(new BaseUncheckedException("Exception")); this.mockMvc.perform(post("/idp-consent").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDto))) + .content(JsonUtils.javaObjectToJsonString(requestDto))) .andExpect(status().isOk()); this.mockMvc.perform(post("/idp-consent").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDto))) + .content(JsonUtils.javaObjectToJsonString(requestDto))) .andExpect(status().isOk()); } - /** RESIDENT CONTROLLER TEST CASES */ + /** + * RESIDENT CONTROLLER TEST CASES + */ @Test public void residentOtpRequestTest() throws Exception { AppOTPRequestDTO requestDTO = new AppOTPRequestDTO(); @@ -413,7 +497,7 @@ public void residentOtpRequestTest() throws Exception { Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(response); this.mockMvc.perform(post("/req/otp").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) .andExpect(status().isOk()); } @@ -432,7 +516,7 @@ public void vidGenerateTest() throws Exception { Mockito.anyString(), Mockito.anyString(), Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(response); this.mockMvc.perform(post("/vid").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) .andExpect(status().isOk()); } @@ -451,7 +535,7 @@ public void authLockTest() throws Exception { Mockito.anyString(), Mockito.anyString(), Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(response); this.mockMvc.perform(post("/req/auth/lock").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) .andExpect(status().isOk()); } @@ -470,7 +554,7 @@ public void authUnLockTest() throws Exception { Mockito.anyString(), Mockito.anyString(), Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(response); this.mockMvc.perform(post("/req/auth/unlock").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) .andExpect(status().isOk()); } @@ -487,7 +571,7 @@ public void individualIdOtpRequestTest() throws Exception { Mockito.anyString(), Mockito.anyString(), Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(response); this.mockMvc.perform(post("/req/individualId/otp").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) .andExpect(status().isOk()); } @@ -504,7 +588,7 @@ public void aidGetIndividualIdTest() throws Exception { Mockito.anyString(), Mockito.anyString(), Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(response); this.mockMvc.perform(post("/aid/get-individual-id").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) .andExpect(status().isOk()); } } diff --git a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java new file mode 100644 index 000000000..812090d40 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java @@ -0,0 +1,111 @@ +package io.mosip.mimoto.service; + +import com.google.gson.Gson; +import io.mosip.mimoto.dto.IssuerDTO; +import io.mosip.mimoto.dto.IssuersDTO; +import io.mosip.mimoto.dto.ServiceConfiguration; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.service.impl.IssuersServiceImpl; +import io.mosip.mimoto.util.Utilities; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.boot.test.context.SpringBootTest; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +@RunWith(MockitoJUnitRunner.class) +@SpringBootTest +public class IssuersServiceTest { + + @InjectMocks + IssuersServiceImpl issuersService = new IssuersServiceImpl(); + + @Mock + Utilities utilities; + + List issuerConfigRelatedFields = List.of("additionalHeaders", "serviceConfiguration", "redirectionUri"); + + + static IssuerDTO getIssuerDTO(String issuerName, List nullFields) { + IssuerDTO issuer = new IssuerDTO(); + issuer.setId(issuerName + "id"); + issuer.setDisplayName(issuerName); + issuer.setLogoUrl("/logo"); + issuer.setClientId("123"); + if (issuerName.equals("Issuer1")) issuer.setWellKnownEndpoint("/.well-known"); + else { + if (!nullFields.contains("redirectionUri")) + issuer.setRedirectUrl("/redirection"); + if (!nullFields.contains("serviceConfiguration")) { + ServiceConfiguration serviceConfiguration = new ServiceConfiguration(); + serviceConfiguration.setAuthorizationEndpoint("/authorization"); + serviceConfiguration.setTokenEndpoint("/token"); + issuer.setServiceConfiguration(serviceConfiguration); + } + if (!nullFields.contains("additionalHeaders")) + issuer.setAdditionalHeaders(Map.of("Content-Type", "application/json")); + } + return issuer; + } + + + @Before + public void setUp() throws Exception { + IssuersDTO issuers = new IssuersDTO(); + issuers.setIssuers(List.of(getIssuerDTO("Issuer1", Collections.emptyList()), getIssuerDTO("Issuer2", Collections.emptyList()))); + Mockito.when(utilities.getIssuersConfigJsonValue()).thenReturn(new Gson().toJson(issuers)); + } + + @Test + public void shouldReturnIssuersWithIssuerConfigAsNull() throws ApiNotAccessibleException, IOException { + IssuersDTO expectedIssuers = new IssuersDTO(); + List issuers = new ArrayList<>(List.of(getIssuerDTO("Issuer1", issuerConfigRelatedFields), getIssuerDTO("Issuer2", issuerConfigRelatedFields))); + expectedIssuers.setIssuers(issuers); + + IssuersDTO allIssuers = issuersService.getAllIssuers(); + + assertEquals(expectedIssuers, allIssuers); + } + + @Test(expected = ApiNotAccessibleException.class) + public void shouldThrowApiNotAccessibleExceptionWhenIssuersJsonStringIsNullForGettingAllIssuers() throws IOException, ApiNotAccessibleException { + Mockito.when(utilities.getIssuersConfigJsonValue()).thenReturn(null); + + issuersService.getAllIssuers(); + } + + @Test + public void shouldReturnIssuerDataAndConfigForTheIssuerIdIfExist() throws ApiNotAccessibleException, IOException { + IssuerDTO expectedIssuer = getIssuerDTO("Issuer1", issuerConfigRelatedFields); + + IssuerDTO issuer = issuersService.getIssuerConfig("Issuer1id"); + + assertEquals(expectedIssuer, issuer); + } + + @Test + public void shouldReturnNullIfTheIssuerIdNotExists() throws ApiNotAccessibleException, IOException { + IssuerDTO issuer = issuersService.getIssuerConfig("Issuer3id"); + + assertNull(issuer); + } + + @Test(expected = ApiNotAccessibleException.class) + public void shouldThrowApiNotAccessibleExceptionWhenIssuersJsonStringIsNullForGettingIssuerConfig() throws IOException, ApiNotAccessibleException { + Mockito.when(utilities.getIssuersConfigJsonValue()).thenReturn(null); + + issuersService.getIssuerConfig("Issuers1id"); + } +} From 3a1f1d7b2f1641c54ae6d80554687b62a3116d78 Mon Sep 17 00:00:00 2001 From: Swati Goel Date: Thu, 12 Oct 2023 11:35:20 +0530 Subject: [PATCH 093/860] Update push-trigger.yml chore(INJI-455) - Add qa-develop branch in workflow Signed-off-by: Swati Goel --- .github/workflows/push-trigger.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/push-trigger.yml b/.github/workflows/push-trigger.yml index fb0b471cf..51827f912 100644 --- a/.github/workflows/push-trigger.yml +++ b/.github/workflows/push-trigger.yml @@ -20,6 +20,7 @@ on: - 1.* - develop* - MOSIP* + - qa-develop jobs: build-mimoto: @@ -118,4 +119,4 @@ jobs: DEV_NAMESPACE_DOCKER_HUB: ${{ secrets.DEV_NAMESPACE_DOCKER_HUB }} ACTOR_DOCKER_HUB: ${{ secrets.ACTOR_DOCKER_HUB }} RELEASE_DOCKER_HUB: ${{ secrets.RELEASE_DOCKER_HUB }} - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} \ No newline at end of file + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} From ea5abecd77ed25981953c3e41d074d8bf34bb92f Mon Sep 17 00:00:00 2001 From: Vijay <94220135+vijay151096@users.noreply.github.com> Date: Tue, 17 Oct 2023 12:14:35 +0530 Subject: [PATCH 094/860] refactor(inji-429): standardize the inji issuers configuration and its related endpoints Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- .talismanrc | 70 +++++++++++++++++++ .../java/io/mosip/mimoto/dto/DisplayDTO.java | 15 ++++ .../java/io/mosip/mimoto/dto/IssuerDTO.java | 26 ++++--- .../java/io/mosip/mimoto/dto/LogoDTO.java | 13 ++++ .../service/impl/IssuersServiceImpl.java | 4 +- .../java/io/mosip/mimoto/util/Utilities.java | 2 +- .../resources/application-local.properties | 2 +- src/main/resources/mimoto-issuers-config.json | 27 +++++++ src/main/resources/openid-issuers-config.json | 21 ------ .../mimoto/controller/InjiControllerTest.java | 45 +++++++----- .../mimoto/service/IssuersServiceTest.java | 39 ++++++----- 11 files changed, 197 insertions(+), 67 deletions(-) create mode 100644 .talismanrc create mode 100644 src/main/java/io/mosip/mimoto/dto/DisplayDTO.java create mode 100644 src/main/java/io/mosip/mimoto/dto/LogoDTO.java create mode 100644 src/main/resources/mimoto-issuers-config.json delete mode 100644 src/main/resources/openid-issuers-config.json diff --git a/.talismanrc b/.talismanrc new file mode 100644 index 000000000..77d6ffa39 --- /dev/null +++ b/.talismanrc @@ -0,0 +1,70 @@ +fileignoreconfig: +- filename: certs/oidckeystore.p12 + checksum: d247acadb5fac098880011f0d0f8fa17223d78f67fa815525eff32616f5ff50c +- filename: src/main/resources/keystore.p12 + checksum: a4ff711aa52da2ca3ace8e660515991f71c3f76b5eee3598679f9282214013aa +- filename: src/main/java/io/mosip/mimoto/exception/BaseCheckedException.java + checksum: d6c31dadb603a3daa320c41a63cf94b983662749664c593cfac330234333a50f +- filename: src/main/java/io/mosip/mimoto/dto/ErrorDTO.java + checksum: f07ea78ad10b25b8c7ebb78be365cf87b03d7ee2681265de9617f1aa54a912e9 +- filename: src/main/java/io/mosip/mimoto/exception/BiometricException.java + checksum: e99050f4618224a32d378df776a177a1e0cf87089dfcc2ea542cb05c74c7d88b +- filename: src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java + checksum: 2ed11df9c90f52e7a6b9e9c31c462393e492f57493c6ec8f1492078fd16ce9ba +- filename: src/test/java/io/mosip/mimoto/util/JoseUtilTest.java + checksum: 5c407e9011599fb6ff95820fff6a3a4b781c7b95875937c629893d1a8cb08fa0 +- filename: src/test/java/io/mosip/mimoto/service/CredentialShareServiceTest.java + checksum: ba02215bc13737afa162de5be9d9d76701259cf9764b61e8ee0d27a7c94ecb3d +- filename: Credits.md + checksum: 785ea952bde3ffa1daac349e6bb0cfa1ae1c74fdc7ea33eb40eeca20b23f537f +- filename: .github/workflows/sonarqube.yml + checksum: 06fea629c2f32b36e385b65d9ba5437920b06bdd7c379e4e487a10d0964e9ce4 +- filename: Dockerfile + checksum: 8245c8124920165b6d9f0696a17d7ae1e945bef0b0d79e8a325bfe3c8afac3f4 +- filename: docs/images/id_pass_logo.svg + checksum: 81b14da4f42f335cf6a3094489844962b92fc629c89691487558c71c3d44a915 +- filename: README.md + checksum: b01438ae6897d9a2d311ca6f68cc839cb4d8252b29d9fa7d41a0362aaecf0065 +- filename: .github/workflows/push-trigger.yml + checksum: 157f32aea860b6c1e1fbe4ec64588af662337fca3d815b62b6a75e1b60a59f37 +- filename: helm/mimoto/install.sh + checksum: d5f2e121664dc1b3d8769a36b481ddb44a4f41f410df8c55a5467f4fd53a8a99 +- filename: src/main/java/io/mosip/mimoto/controller/CredentialShareController.java + checksum: 666c22ca63adb8770de901e220f8efeb5ec1d3f63064a58dea33ba49b8e15872 +- filename: src/main/java/io/mosip/mimoto/controller/IssuersController.java + checksum: 856d860de2562fa019ac23bd724b84e1d67b834883b332c12415e6714de9bb05 +- filename: helm/mimoto/templates/deployment.yaml + checksum: 6eee9c084a39881370a82d249c5f0ae42c99f752db93b59507f4e83b68e7ac26 +- filename: helm/mimoto/values.yaml + checksum: 3a851cd6ca92a0ec97faac8e771b834b92b226dc607681d2a936b067e3874e16 +- filename: src/main/java/io/mosip/mimoto/constant/DocumentGeneratorExceptionCodeConstant.java + checksum: 329b8341fed7a8166fd1ba66af3d74810e4549b00b1d13e1216d097374c1ce52 +- filename: src/main/java/io/mosip/mimoto/dto/mimoto/AttestationStatement.java + checksum: 50a8c075791999d3ffc6f5df0a06b790a69d922688c4c7498d8a6d415c8f046d +- filename: partner-onboarder/install.sh + checksum: 0551b30d8c6634466602d6e7234a6aa580a46bdd72ed02a737c7c095d5e32edf +- filename: src/main/java/io/mosip/mimoto/exception/ExceptionUtils.java + checksum: 078d1e13d2c6787718f2bfd8320380e3aa4921c498cd05c9e445d78f08384c20 +- filename: src/main/java/io/mosip/mimoto/util/WebSubSubscriptionHelper.java + checksum: c25969b732f7dd0fd49262c68983d85611cb78800b8080d9f63f7ed9eeb0251b +- filename: src/main/java/io/mosip/mimoto/util/Utilities.java + checksum: 71605c7209583dd3494e6778403ec89fb5f78f00db06c1b9b8512da20621390b +- filename: src/main/resources/application-local.properties + checksum: 4fd09fe56696b8156663da5e06c9c072bddd2007f81a87fdc69ce8f3acdee08b +- filename: src/test/java/io/mosip/mimoto/config/MimotoConfig.java + checksum: ba189011b924fe58a804281c88a190b9b969d21bc485e03206471f69be1a1b5d +- filename: src/main/java/io/mosip/mimoto/util/JsonUtil.java + checksum: cc7a9e1be3ffd68e809dbf70e75f57f1420d117eba0ea7a720eca1a43fbe7f79 +- filename: src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java + checksum: eddc1f3d44e8b8676c5c4ff6ed94ba9018f3a562d4e17908234704493ec6b35e +- filename: src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java + checksum: 4b17319b2ec9e41c943798700d7bf382281f1dd752246e635991f398a9bc9234 +- filename: src/main/java/io/mosip/mimoto/util/RestApiClient.java + checksum: 77b8afdefbb1f8ff56e140836e6713d150ac48f99c6778e43bc2854e5fcd4732 +- filename: src/main/java/io/mosip/mimoto/util/JoseUtil.java + checksum: 1a9b48b950b17c14c32c2ee0c8ad0448d63da887dfb7eb82f4f0bf0b71fdeafa +- filename: src/main/java/io/mosip/mimoto/util/CryptoUtil.java + checksum: fc4b7bd41ca63b2060854e218eb50689f77162dc51c45e95f51ec0272bd3585a +- filename: src/main/java/io/mosip/mimoto/util/CryptoCoreUtil.java + checksum: 0ecab2033342fbbc7828c3eae63247c8c33f4faea3001582338819669cd9b904 +version: "" diff --git a/src/main/java/io/mosip/mimoto/dto/DisplayDTO.java b/src/main/java/io/mosip/mimoto/dto/DisplayDTO.java new file mode 100644 index 000000000..35fd3ef1e --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/DisplayDTO.java @@ -0,0 +1,15 @@ +package io.mosip.mimoto.dto; + +import com.google.gson.annotations.Expose; +import lombok.Data; + +@Data + +public class DisplayDTO { + @Expose + String name; + @Expose + LogoDTO logo; + @Expose + String language; +} diff --git a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java index a0d7a4978..1f584f309 100644 --- a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java @@ -1,7 +1,9 @@ package io.mosip.mimoto.dto; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; import lombok.Data; import java.util.List; @@ -13,23 +15,29 @@ @Data public class IssuerDTO { @Expose - String id; + String credential_issuer; @Expose - String displayName; + List display; @Expose String protocol; @Expose - String logoUrl; - @Expose - String clientId; + String client_id; + @SerializedName(".well-known") + @JsonProperty(".well-known") @Expose String wellKnownEndpoint; @JsonInclude(NON_NULL) - String redirectUrl; + String redirect_uri; + @JsonInclude(NON_NULL) + List scopes_supported; + @JsonInclude(NON_NULL) + String authorization_endpoint; + @JsonInclude(NON_NULL) + String token_endpoint; @JsonInclude(NON_NULL) - List scopes; + String credential_endpoint; @JsonInclude(NON_NULL) - ServiceConfiguration serviceConfiguration; + String credential_audience; @JsonInclude(NON_NULL) - Map additionalHeaders; + Map additional_headers; } diff --git a/src/main/java/io/mosip/mimoto/dto/LogoDTO.java b/src/main/java/io/mosip/mimoto/dto/LogoDTO.java new file mode 100644 index 000000000..a28e4836a --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/LogoDTO.java @@ -0,0 +1,13 @@ +package io.mosip.mimoto.dto; + + +import com.google.gson.annotations.Expose; +import lombok.Data; + +@Data +public class LogoDTO { + @Expose + String url; + @Expose + String alt_text; +} diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index 8b7ac4872..7f74354eb 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -41,10 +41,10 @@ public IssuerDTO getIssuerConfig(String issuerId) throws ApiNotAccessibleExcepti } IssuersDTO issuers = new Gson().fromJson(issuersConfigJsonValue, IssuersDTO.class); Optional issuerConfigResp = issuers.getIssuers().stream() - .filter(issuer -> issuer.getId().equals(issuerId)) + .filter(issuer -> issuer.getCredential_issuer().equals(issuerId)) .findFirst(); if (issuerConfigResp.isPresent()) issuerDTO = issuerConfigResp.get(); return issuerDTO; } -} \ No newline at end of file +} diff --git a/src/main/java/io/mosip/mimoto/util/Utilities.java b/src/main/java/io/mosip/mimoto/util/Utilities.java index 28269b190..3c693c939 100644 --- a/src/main/java/io/mosip/mimoto/util/Utilities.java +++ b/src/main/java/io/mosip/mimoto/util/Utilities.java @@ -112,7 +112,7 @@ public class Utilities { private String issuersConfigJsonString = null; // uncomment for running mimoto Locally to populate the issuers json -// public Utilities(@Value("classpath:openid-issuers-config.json") Resource resource) throws IOException { +// public Utilities(@Value("classpath:mimoto-issuers-config.json") Resource resource) throws IOException { // issuersConfigJsonString = (Files.readString(resource.getFile().toPath())); // } diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 06b55e463..f8e0d8a81 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -199,7 +199,7 @@ wallet.binding.partner.api.key=Aci9jg28B8mO_LDfDXo3ZTp5_HKgEMun2tYyHCa1e8k #wallet.binding.partner.api.key=14378 # OpenID -mosip.openid.issuers=openid-issuers-config.json +mosip.openid.issuers=mimoto-issuers-config.json #configurations related to openid4vc mosip.oidc.esignet.token.endpoint=https://api-internal.dev1.mosip.net/v1/esignet/oauth/token mosip.oidc.esignet.aud=https://esignet.dev1.mosip.net/v1/esignet/oauth/token diff --git a/src/main/resources/mimoto-issuers-config.json b/src/main/resources/mimoto-issuers-config.json new file mode 100644 index 000000000..b87c2acb0 --- /dev/null +++ b/src/main/resources/mimoto-issuers-config.json @@ -0,0 +1,27 @@ +{ + "issuers": [ + { + "credential_issuer": "ESignet", + "display": [ + { + "name": "e-Signet", + "logo": { + "url": "https://esignet.dev1.mosip.net/logo.png", + "alt_text": "esignet-logo" + }, + "language": "en" + } + ], + "protocol": "OpenId4VCI", + "client_id": "7-j3xRzU3SODdoNgSGvO_cD8UijH3AIWRDAg1x-M", + "scopes_supported": ["mosip_identity_vc_ldp"], + "additional_headers": { "Accept": "application/json" }, + ".well-known": null, + "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", + "authorization_endpoint": "https://esignet.dev1.mosip.net/authorize", + "token_endpoint": "https://api.dev1.mosip.net/residentmobileapp/get-token", + "credential_endpoint": "https://api-internal.dev1.mosip.net/v1/esignet/vci/credential", + "credential_audience": "https://esignet.dev1.mosip.net/v1/esignet" + } + ] +} diff --git a/src/main/resources/openid-issuers-config.json b/src/main/resources/openid-issuers-config.json deleted file mode 100644 index a5ddb0a20..000000000 --- a/src/main/resources/openid-issuers-config.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "issuers": [ - { - "id": "ESignet", - "displayName": "e-Signet", - "protocol": "OpenId4VCI", - "logoUrl": "https://${mosip.esignet.host}/logo.png", - "clientId": "7-j3xRzU3SODdoNgSGvO_cD8UijH3AIWRDAg1x-M", - "scopes": ["mosip_identity_vc_ldp"], - "additionalHeaders": { "Accept": "application/json" }, - "wellKnownEndpoint": null, - "redirectUrl": "io.mosip.residentapp.inji://oauthredirect", - "serviceConfiguration": { - "authorizationEndpoint": "https://esignet.dev1.mosip.net/authorize", - "tokenEndpoint": "https://api.dev2.mosip.net/residentmobileapp/get-token", - "credentialEndpoint": "https://api-internal.dev1.mosip.net/v1/esignet/vci/credential", - "credentialAudience": "https://esignet.dev1.mosip.net/v1/esignet" - } - } - ] -} diff --git a/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java b/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java index b203e257c..8192eac69 100644 --- a/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java @@ -8,8 +8,10 @@ import io.mosip.kernel.websub.api.model.SubscriptionChangeResponse; import io.mosip.mimoto.TestBootApplication; import io.mosip.mimoto.core.http.ResponseWrapper; +import io.mosip.mimoto.dto.DisplayDTO; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.IssuersDTO; +import io.mosip.mimoto.dto.LogoDTO; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.dto.resident.*; import io.mosip.mimoto.exception.ApiNotAccessibleException; @@ -124,17 +126,24 @@ public void getAllPropertiesTest() throws Exception { } static IssuerDTO getIssuerDTO(String issuerName) { + LogoDTO logo = new LogoDTO(); + logo.setUrl("/logo"); + logo.setAlt_text("logo-url"); + DisplayDTO display = new DisplayDTO(); + display.setName(issuerName); + display.setLanguage("en"); + display.setLogo(logo); IssuerDTO issuer = new IssuerDTO(); - issuer.setId(issuerName + "id"); - issuer.setDisplayName(issuerName); - issuer.setLogoUrl("/logo"); - issuer.setClientId("123"); + issuer.setCredential_issuer(issuerName + "id"); + issuer.setDisplay(Collections.singletonList(display)); + issuer.setClient_id("123"); if (issuerName.equals("Issuer1")) issuer.setWellKnownEndpoint("/.well-known"); else { - issuer.setRedirectUrl(null); - issuer.setServiceConfiguration(null); - issuer.setAdditionalHeaders(null); - issuer.setScopes(null); + issuer.setRedirect_uri(null); + issuer.setAuthorization_endpoint(null); + issuer.setCredential_endpoint(null); + issuer.setToken_endpoint(null); + issuer.setScopes_supported(null); } return issuer; } @@ -151,15 +160,17 @@ public void getAllIssuersTest() throws Exception { .andExpect(status().isOk()) .andExpect(jsonPath("$.response.issuers", Matchers.everyItem( Matchers.allOf( - Matchers.hasKey("id"), - Matchers.hasKey("displayName"), - Matchers.hasKey("logoUrl"), - Matchers.hasKey("clientId"), - Matchers.hasKey("wellKnownEndpoint"), - Matchers.not(Matchers.hasKey("redirectUrl")), - Matchers.not(Matchers.hasKey("serviceConfiguration")), - Matchers.not(Matchers.hasKey("additionalHeaders")), - Matchers.not(Matchers.hasKey("scopes")) + Matchers.hasKey("credential_issuer"), + Matchers.hasKey("display"), + Matchers.hasKey("client_id"), + Matchers.hasKey(".well-known"), + Matchers.not(Matchers.hasKey("redirect_url")), + Matchers.not(Matchers.hasKey("authorization_endpoint")), + Matchers.not(Matchers.hasKey("token_endpoint")), + Matchers.not(Matchers.hasKey("credential_endpoint")), + Matchers.not(Matchers.hasKey("credential_audience")), + Matchers.not(Matchers.hasKey("additional_headers")), + Matchers.not(Matchers.hasKey("scopes_supported")) ) ))); diff --git a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java index 812090d40..85a6c9ff0 100644 --- a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java @@ -3,7 +3,8 @@ import com.google.gson.Gson; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.IssuersDTO; -import io.mosip.mimoto.dto.ServiceConfiguration; +import io.mosip.mimoto.dto.DisplayDTO; +import io.mosip.mimoto.dto.LogoDTO; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.service.impl.IssuersServiceImpl; import io.mosip.mimoto.util.Utilities; @@ -35,27 +36,33 @@ public class IssuersServiceTest { @Mock Utilities utilities; - List issuerConfigRelatedFields = List.of("additionalHeaders", "serviceConfiguration", "redirectionUri"); + List issuerConfigRelatedFields = List.of("additional_headers", "authorization_endpoint", "token_endpoint", "credential_endpoint", "credential_audience", "redirect_uri"); static IssuerDTO getIssuerDTO(String issuerName, List nullFields) { + LogoDTO logo = new LogoDTO(); + logo.setUrl("/logo"); + logo.setAlt_text("logo-url"); + DisplayDTO display = new DisplayDTO(); + display.setName(issuerName); + display.setLanguage("en"); + display.setLogo(logo); IssuerDTO issuer = new IssuerDTO(); - issuer.setId(issuerName + "id"); - issuer.setDisplayName(issuerName); - issuer.setLogoUrl("/logo"); - issuer.setClientId("123"); + issuer.setCredential_issuer(issuerName + "id"); + issuer.setDisplay(Collections.singletonList(display)); + issuer.setClient_id("123"); if (issuerName.equals("Issuer1")) issuer.setWellKnownEndpoint("/.well-known"); else { - if (!nullFields.contains("redirectionUri")) - issuer.setRedirectUrl("/redirection"); - if (!nullFields.contains("serviceConfiguration")) { - ServiceConfiguration serviceConfiguration = new ServiceConfiguration(); - serviceConfiguration.setAuthorizationEndpoint("/authorization"); - serviceConfiguration.setTokenEndpoint("/token"); - issuer.setServiceConfiguration(serviceConfiguration); - } - if (!nullFields.contains("additionalHeaders")) - issuer.setAdditionalHeaders(Map.of("Content-Type", "application/json")); + if (!nullFields.contains("redirect_uri")) + issuer.setRedirect_uri("/redirection"); + if (!nullFields.contains("authorization_endpoint")) + issuer.setAuthorization_endpoint("/authorization_endpoint"); + if (!nullFields.contains("token_endpoint")) + issuer.setAuthorization_endpoint("/token_endpoint"); + if (!nullFields.contains("credential_endpoint")) + issuer.setAuthorization_endpoint("/credential_endpoint"); + if (!nullFields.contains("additional_headers")) + issuer.setAdditional_headers(Map.of("Content-Type", "application/json")); } return issuer; } From 173ae7f0b83805f5a1b514abf3a2b55778c0990b Mon Sep 17 00:00:00 2001 From: Vijay <94220135+vijay151096@users.noreply.github.com> Date: Tue, 17 Oct 2023 14:32:21 +0530 Subject: [PATCH 095/860] refactor(inji-429): updated the push-trigger.yml Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- .github/workflows/push-trigger.yml | 3 ++- src/main/resources/mimoto-issuers-config.json | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/push-trigger.yml b/.github/workflows/push-trigger.yml index fb0b471cf..9062ed866 100644 --- a/.github/workflows/push-trigger.yml +++ b/.github/workflows/push-trigger.yml @@ -20,6 +20,7 @@ on: - 1.* - develop* - MOSIP* + - inji-* jobs: build-mimoto: @@ -118,4 +119,4 @@ jobs: DEV_NAMESPACE_DOCKER_HUB: ${{ secrets.DEV_NAMESPACE_DOCKER_HUB }} ACTOR_DOCKER_HUB: ${{ secrets.ACTOR_DOCKER_HUB }} RELEASE_DOCKER_HUB: ${{ secrets.RELEASE_DOCKER_HUB }} - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} \ No newline at end of file + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} diff --git a/src/main/resources/mimoto-issuers-config.json b/src/main/resources/mimoto-issuers-config.json index b87c2acb0..9db592362 100644 --- a/src/main/resources/mimoto-issuers-config.json +++ b/src/main/resources/mimoto-issuers-config.json @@ -9,7 +9,7 @@ "url": "https://esignet.dev1.mosip.net/logo.png", "alt_text": "esignet-logo" }, - "language": "en" + "language": "eng" } ], "protocol": "OpenId4VCI", From 0dee4a133ff21bfc3acd707b012d35e908f63486 Mon Sep 17 00:00:00 2001 From: Vijay <94220135+vijay151096@users.noreply.github.com> Date: Wed, 18 Oct 2023 16:16:04 +0530 Subject: [PATCH 096/860] refactor(inji-249): modified the local mimoto-config and removed the feature branch in push trigger Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- .github/workflows/push-trigger.yml | 1 - src/main/resources/mimoto-issuers-config.json | 19 +++++++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/.github/workflows/push-trigger.yml b/.github/workflows/push-trigger.yml index 9062ed866..6c7d86441 100644 --- a/.github/workflows/push-trigger.yml +++ b/.github/workflows/push-trigger.yml @@ -20,7 +20,6 @@ on: - 1.* - develop* - MOSIP* - - inji-* jobs: build-mimoto: diff --git a/src/main/resources/mimoto-issuers-config.json b/src/main/resources/mimoto-issuers-config.json index 9db592362..c0535d968 100644 --- a/src/main/resources/mimoto-issuers-config.json +++ b/src/main/resources/mimoto-issuers-config.json @@ -1,5 +1,19 @@ { "issuers": [ + { + "credential_issuer": "Mosip", + "display": [ + { + "name": "UIN, VID, AID", + "logo": { + "url": "https://api.dev1.mosip.net/inji/digit-icon.png", + "alt_text": "digits-logo" + }, + "language": "en" + } + ], + "protocol": "OTP" + }, { "credential_issuer": "ESignet", "display": [ @@ -9,11 +23,11 @@ "url": "https://esignet.dev1.mosip.net/logo.png", "alt_text": "esignet-logo" }, - "language": "eng" + "language": "en" } ], "protocol": "OpenId4VCI", - "client_id": "7-j3xRzU3SODdoNgSGvO_cD8UijH3AIWRDAg1x-M", + "client_id": "7-*****************IWRDAg1x-M", "scopes_supported": ["mosip_identity_vc_ldp"], "additional_headers": { "Accept": "application/json" }, ".well-known": null, @@ -23,5 +37,6 @@ "credential_endpoint": "https://api-internal.dev1.mosip.net/v1/esignet/vci/credential", "credential_audience": "https://esignet.dev1.mosip.net/v1/esignet" } + ] } From 0bf7ff0b47c2457bf44fe66e06479595f7a7abff Mon Sep 17 00:00:00 2001 From: syed salman <72004356+syedsalman3753@users.noreply.github.com> Date: Thu, 19 Oct 2023 11:58:31 +0530 Subject: [PATCH 097/860] [MOSIP-29245] Added chart-lint-publish.yml (#136) [MOSIP-25631] Signed-off-by: syed salman --- .github/workflows/chart-lint-publish.yml | 62 ++++++++++++++++++++++++ .github/workflows/release-chart.yml | 24 --------- 2 files changed, 62 insertions(+), 24 deletions(-) create mode 100644 .github/workflows/chart-lint-publish.yml delete mode 100644 .github/workflows/release-chart.yml diff --git a/.github/workflows/chart-lint-publish.yml b/.github/workflows/chart-lint-publish.yml new file mode 100644 index 000000000..1e7b34418 --- /dev/null +++ b/.github/workflows/chart-lint-publish.yml @@ -0,0 +1,62 @@ +name: Validate / Publish helm charts + +on: + release: + types: [published] + pull_request: + types: [opened, reopened, synchronize] + paths: + - 'charts/**' + workflow_dispatch: + inputs: + IGNORE_CHARTS: + description: 'Provide list of charts to be ignored separated by pipe(|)' + required: false + default: '' + type: string + CHART_PUBLISH: + description: 'Chart publishing to gh-pages branch' + required: false + default: 'NO' + type: string + options: + - YES + - NO + INCLUDE_ALL_CHARTS: + description: 'Include all charts for Linting/Publishing (YES/NO)' + required: false + default: 'NO' + type: string + options: + - YES + - NO + push: + branches: + - '!release-branch' + - master + - 1.* + - 0.* + - develop + - MOSIP* + - release* + paths: + - 'charts/**' + +jobs: + chart-lint-publish: + uses: mosip/kattu/.github/workflows/chart-lint-publish.yml@master + with: + CHARTS_DIR: ./helm + CHARTS_URL: https://mosip.github.io/mosip-helm + REPOSITORY: mosip-helm + BRANCH: gh-pages + INCLUDE_ALL_CHARTS: "${{ inputs.INCLUDE_ALL_CHARTS || 'NO' }}" + IGNORE_CHARTS: "${{ inputs.IGNORE_CHARTS ||'reporting|reporting-init|activemq-artemis' }}" + CHART_PUBLISH: "${{ inputs.CHART_PUBLISH || 'YES' }}" + LINTING_CHART_SCHEMA_YAML_URL: "https://raw.githubusercontent.com/mosip/kattu/master/.github/helm-lint-configs/chart-schema.yaml" + LINTING_LINTCONF_YAML_URL: "https://raw.githubusercontent.com/mosip/kattu/master/.github/helm-lint-configs/lintconf.yaml" + LINTING_CHART_TESTING_CONFIG_YAML_URL: "https://raw.githubusercontent.com/mosip/kattu/master/.github/helm-lint-configs/chart-testing-config.yaml" + LINTING_HEALTH_CHECK_SCHEMA_YAML_URL: "https://raw.githubusercontent.com/mosip/kattu/master/.github/helm-lint-configs/health-check-schema.yaml" + secrets: + TOKEN: ${{ secrets.ACTION_PAT }} + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} \ No newline at end of file diff --git a/.github/workflows/release-chart.yml b/.github/workflows/release-chart.yml deleted file mode 100644 index 4028b419a..000000000 --- a/.github/workflows/release-chart.yml +++ /dev/null @@ -1,24 +0,0 @@ -name: release-chart -on: - push: - branches: - - master - - 1.* - - 0.* - - develop - paths: - - 'helm/**' - -jobs: - release-chart: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: Publish Helm chart - uses: stefanprodan/helm-gh-pages@v1.7.0 - with: - token: ${{ secrets.ACTION_PAT }} - charts_dir: ./helm - charts_url: https://mosip.github.io/mosip-helm - repository: mosip-helm - branch: gh-pages \ No newline at end of file From eeec9eae457c28b92bcf3492430f6d1cb1be8e06 Mon Sep 17 00:00:00 2001 From: Rakshitha650 <76676196+Rakshitha650@users.noreply.github.com> Date: Fri, 27 Oct 2023 19:45:08 +0530 Subject: [PATCH 098/860] [DSD-3717] updated the readme.md for mimoto installation (#138) * [DSD-3666] updated the readme.md for mimoto installation Signed-off-by: Rakshitha650 * [DSD-3666] resolved conversation Signed-off-by: Rakshitha650 * [DSD-3666] resolved conversation Signed-off-by: Rakshitha650 * [DSD-3666] resolved conversation Signed-off-by: Rakshitha650 * [DSD-3666] updated the README.md Signed-off-by: Rakshitha650 * [DSD-3666] resolved the conversation Signed-off-by: Rakshitha650 --------- Signed-off-by: Rakshitha650 --- README.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 40f0e62eb..45127bd0a 100644 --- a/README.md +++ b/README.md @@ -15,9 +15,21 @@ mvn clean package mvn spring-boot:run -Dspring.profiles.active=local ``` -## Deploy +## Deployment ### Install + +1. Execute Onboarder install script + +``` +cd partner-onboarder +./install.sh +``` +* During the execution of the `install.sh` script, a prompt appears requesting information for the S3 bucket, including its name and URL. +* Once the job is completed, log in to S3 and check the reports. There should not be any failures. + +2. Execute mimoto install script + ``` cd helm/mimoto ./install.sh From 01761e08b7f2c01980deee7249178141de2262e3 Mon Sep 17 00:00:00 2001 From: Swati Goel Date: Mon, 20 Nov 2023 11:53:34 +0530 Subject: [PATCH 099/860] docs(INJI-565) - Update license to MIT (#141) Signed-off-by: Swati Goel --- LICENSE | 394 +++----------------------------------------------------- 1 file changed, 21 insertions(+), 373 deletions(-) diff --git a/LICENSE b/LICENSE index a612ad981..ba08bd62e 100644 --- a/LICENSE +++ b/LICENSE @@ -1,373 +1,21 @@ -Mozilla Public License Version 2.0 -================================== - -1. Definitions --------------- - -1.1. "Contributor" - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -1.2. "Contributor Version" - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -1.3. "Contribution" - means Covered Software of a particular Contributor. - -1.4. "Covered Software" - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -1.5. "Incompatible With Secondary Licenses" - means - - (a) that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or - - (b) that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -1.6. "Executable Form" - means any form of the work other than Source Code Form. - -1.7. "Larger Work" - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -1.8. "License" - means this document. - -1.9. "Licensable" - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -1.10. "Modifications" - means any of the following: - - (a) any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or - - (b) any new file in Source Code Form that contains any Covered - Software. - -1.11. "Patent Claims" of a Contributor - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -1.12. "Secondary License" - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -1.13. "Source Code Form" - means the form of the work preferred for making modifications. - -1.14. "You" (or "Your") - means an individual or a legal entity exercising rights under this - License. For legal entities, "You" includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, "control" means (a) the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or (b) ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - -2. License Grants and Conditions --------------------------------- - -2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -(a) under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and - -(b) under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -(a) for any code that a Contributor has removed from Covered Software; - or - -(b) for infringements caused by: (i) Your and any other third party's - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - -(c) under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - -3. Responsibilities -------------------- - -3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -(a) such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -(b) You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - -4. Inability to Comply Due to Statute or Regulation ---------------------------------------------------- - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: (a) comply with -the terms of this License to the maximum extent possible; and (b) -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - -5. Termination --------------- - -5.1. The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated (a) provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and (b) on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -5.2. If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -5.3. In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - -************************************************************************ -* * -* 6. Disclaimer of Warranty * -* ------------------------- * -* * -* Covered Software is provided under this License on an "as is" * -* basis, without warranty of any kind, either expressed, implied, or * -* statutory, including, without limitation, warranties that the * -* Covered Software is free of defects, merchantable, fit for a * -* particular purpose or non-infringing. The entire risk as to the * -* quality and performance of the Covered Software is with You. * -* Should any Covered Software prove defective in any respect, You * -* (not any Contributor) assume the cost of any necessary servicing, * -* repair, or correction. This disclaimer of warranty constitutes an * -* essential part of this License. No use of any Covered Software is * -* authorized under this License except under this disclaimer. * -* * -************************************************************************ - -************************************************************************ -* * -* 7. Limitation of Liability * -* -------------------------- * -* * -* Under no circumstances and under no legal theory, whether tort * -* (including negligence), contract, or otherwise, shall any * -* Contributor, or anyone who distributes Covered Software as * -* permitted above, be liable to You for any direct, indirect, * -* special, incidental, or consequential damages of any character * -* including, without limitation, damages for lost profits, loss of * -* goodwill, work stoppage, computer failure or malfunction, or any * -* and all other commercial damages or losses, even if such party * -* shall have been informed of the possibility of such damages. This * -* limitation of liability shall not apply to liability for death or * -* personal injury resulting from such party's negligence to the * -* extent applicable law prohibits such limitation. Some * -* jurisdictions do not allow the exclusion or limitation of * -* incidental or consequential damages, so this exclusion and * -* limitation may not apply to You. * -* * -************************************************************************ - -8. Litigation -------------- - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - -9. Miscellaneous ----------------- - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - -10. Versions of the License ---------------------------- - -10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -10.4. Distributing Source Code Form that is Incompatible With Secondary -Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -Exhibit A - Source Code Form License Notice -------------------------------------------- - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -Exhibit B - "Incompatible With Secondary Licenses" Notice ---------------------------------------------------------- - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. +MIT License + +Copyright (c) 2022 Modular Open Source Identity Platform + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file From 04779dfff3cc47d2e9101c9033a72cf6f3038590 Mon Sep 17 00:00:00 2001 From: Swati Goel Date: Thu, 23 Nov 2023 11:50:28 +0530 Subject: [PATCH 100/860] [MOSIP-25198] - Fix null pointer exception Signed-off-by: Swati Goel --- .talismanrc | 6 +++--- src/main/java/io/mosip/mimoto/util/JoseUtil.java | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.talismanrc b/.talismanrc index 77d6ffa39..2fca5e62f 100644 --- a/.talismanrc +++ b/.talismanrc @@ -24,9 +24,9 @@ fileignoreconfig: - filename: docs/images/id_pass_logo.svg checksum: 81b14da4f42f335cf6a3094489844962b92fc629c89691487558c71c3d44a915 - filename: README.md - checksum: b01438ae6897d9a2d311ca6f68cc839cb4d8252b29d9fa7d41a0362aaecf0065 + checksum: f3e7693f4f554640b93c82e438d28d015f8c09be622c22ac6847e528830968f6 - filename: .github/workflows/push-trigger.yml - checksum: 157f32aea860b6c1e1fbe4ec64588af662337fca3d815b62b6a75e1b60a59f37 + checksum: e809aa956d4d0cde78118bfa518e824f128aa67ef5b1e79983b8feaa40b3690d - filename: helm/mimoto/install.sh checksum: d5f2e121664dc1b3d8769a36b481ddb44a4f41f410df8c55a5467f4fd53a8a99 - filename: src/main/java/io/mosip/mimoto/controller/CredentialShareController.java @@ -62,7 +62,7 @@ fileignoreconfig: - filename: src/main/java/io/mosip/mimoto/util/RestApiClient.java checksum: 77b8afdefbb1f8ff56e140836e6713d150ac48f99c6778e43bc2854e5fcd4732 - filename: src/main/java/io/mosip/mimoto/util/JoseUtil.java - checksum: 1a9b48b950b17c14c32c2ee0c8ad0448d63da887dfb7eb82f4f0bf0b71fdeafa + checksum: 65c4d7f9d4f28e7e4e5376e4f6cdce8b49b485c3ea2ab214f72d018d5d73b6aa - filename: src/main/java/io/mosip/mimoto/util/CryptoUtil.java checksum: fc4b7bd41ca63b2060854e218eb50689f77162dc51c45e95f51ec0272bd3585a - filename: src/main/java/io/mosip/mimoto/util/CryptoCoreUtil.java diff --git a/src/main/java/io/mosip/mimoto/util/JoseUtil.java b/src/main/java/io/mosip/mimoto/util/JoseUtil.java index 425c77971..f6d0f912e 100644 --- a/src/main/java/io/mosip/mimoto/util/JoseUtil.java +++ b/src/main/java/io/mosip/mimoto/util/JoseUtil.java @@ -153,13 +153,13 @@ public String getJWT(String clientId) { String keyStorePathWithFileName = keyStorePath + fileName; Date issuedAt = Date.from(Instant.now()); Date expiresAt = Date.from(Instant.now().plusMillis(120000)); - KeyStore.PrivateKeyEntry privateKeyEntry= null; + RSAPrivateKey privateKey = null; try { - privateKeyEntry = cryptoCoreUtil.loadP12(keyStorePathWithFileName, alias, cyptoPassword); + KeyStore.PrivateKeyEntry privateKeyEntry = cryptoCoreUtil.loadP12(keyStorePathWithFileName, alias, cyptoPassword); + privateKey = (RSAPrivateKey) privateKeyEntry.getPrivateKey(); } catch (IOException e) { logger.error("Exception happened while loading the p12 file for invoking token call."); } - RSAPrivateKey privateKey = (RSAPrivateKey) privateKeyEntry.getPrivateKey(); return JWT.create() .withHeader(header) .withIssuer(clientId) From 3cfa9ea344a3ad29479d0a523694602b74bc18e1 Mon Sep 17 00:00:00 2001 From: VSIVAKALYAN <103260988+VSIVAKALYAN@users.noreply.github.com> Date: Thu, 30 Nov 2023 05:18:13 +0530 Subject: [PATCH 101/860] [DSD-3919] Updated chart-lint-publish.yml (#144) Signed-off-by: VSIVAKALYAN <103260988+VSIVAKALYAN@users.noreply.github.com> --- .github/workflows/chart-lint-publish.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/chart-lint-publish.yml b/.github/workflows/chart-lint-publish.yml index 1e7b34418..2ba7dff33 100644 --- a/.github/workflows/chart-lint-publish.yml +++ b/.github/workflows/chart-lint-publish.yml @@ -40,7 +40,7 @@ on: - MOSIP* - release* paths: - - 'charts/**' + - './helm/**' jobs: chart-lint-publish: @@ -59,4 +59,4 @@ jobs: LINTING_HEALTH_CHECK_SCHEMA_YAML_URL: "https://raw.githubusercontent.com/mosip/kattu/master/.github/helm-lint-configs/health-check-schema.yaml" secrets: TOKEN: ${{ secrets.ACTION_PAT }} - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} \ No newline at end of file + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} From 2e433139e32de7f3858496b0f9ac601403e36101 Mon Sep 17 00:00:00 2001 From: Kiruthika Jeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Date: Thu, 30 Nov 2023 12:01:52 +0530 Subject: [PATCH 102/860] feat(INJI-503): add issuer title & description Signed-off-by: Kiruthika Jeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> --- .talismanrc | 6 +- .../java/io/mosip/mimoto/dto/DisplayDTO.java | 4 + src/main/resources/mimoto-issuers-config.json | 95 ++++++++++++++++++- .../mimoto/controller/InjiControllerTest.java | 3 +- 4 files changed, 100 insertions(+), 8 deletions(-) diff --git a/.talismanrc b/.talismanrc index 77d6ffa39..7e76228c8 100644 --- a/.talismanrc +++ b/.talismanrc @@ -10,7 +10,7 @@ fileignoreconfig: - filename: src/main/java/io/mosip/mimoto/exception/BiometricException.java checksum: e99050f4618224a32d378df776a177a1e0cf87089dfcc2ea542cb05c74c7d88b - filename: src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java - checksum: 2ed11df9c90f52e7a6b9e9c31c462393e492f57493c6ec8f1492078fd16ce9ba + checksum: c4e28436cb04004d9cb4e1492a1d013eac076936a3fa3a99d35bfb137f27c37b - filename: src/test/java/io/mosip/mimoto/util/JoseUtilTest.java checksum: 5c407e9011599fb6ff95820fff6a3a4b781c7b95875937c629893d1a8cb08fa0 - filename: src/test/java/io/mosip/mimoto/service/CredentialShareServiceTest.java @@ -24,9 +24,9 @@ fileignoreconfig: - filename: docs/images/id_pass_logo.svg checksum: 81b14da4f42f335cf6a3094489844962b92fc629c89691487558c71c3d44a915 - filename: README.md - checksum: b01438ae6897d9a2d311ca6f68cc839cb4d8252b29d9fa7d41a0362aaecf0065 + checksum: f3e7693f4f554640b93c82e438d28d015f8c09be622c22ac6847e528830968f6 - filename: .github/workflows/push-trigger.yml - checksum: 157f32aea860b6c1e1fbe4ec64588af662337fca3d815b62b6a75e1b60a59f37 + checksum: e809aa956d4d0cde78118bfa518e824f128aa67ef5b1e79983b8feaa40b3690d - filename: helm/mimoto/install.sh checksum: d5f2e121664dc1b3d8769a36b481ddb44a4f41f410df8c55a5467f4fd53a8a99 - filename: src/main/java/io/mosip/mimoto/controller/CredentialShareController.java diff --git a/src/main/java/io/mosip/mimoto/dto/DisplayDTO.java b/src/main/java/io/mosip/mimoto/dto/DisplayDTO.java index 35fd3ef1e..3aed6abfa 100644 --- a/src/main/java/io/mosip/mimoto/dto/DisplayDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/DisplayDTO.java @@ -11,5 +11,9 @@ public class DisplayDTO { @Expose LogoDTO logo; @Expose + String title; + @Expose + String description; + @Expose String language; } diff --git a/src/main/resources/mimoto-issuers-config.json b/src/main/resources/mimoto-issuers-config.json index c0535d968..5c56de4c3 100644 --- a/src/main/resources/mimoto-issuers-config.json +++ b/src/main/resources/mimoto-issuers-config.json @@ -9,7 +9,49 @@ "url": "https://api.dev1.mosip.net/inji/digit-icon.png", "alt_text": "digits-logo" }, + "title": "Download via UIN, VID, AID", + "description": "Enter your national ID to download your card.", "language": "en" + }, + { + "name": "UIN, VID, AID", + "logo": { + "url": "https://api.dev1.mosip.net/inji/digit-icon.png", + "alt_text": "أرقام الشعار" + }, + "title": "التنزيل عبر UIN, VID, AID", + "description": "أدخل رقم الهوية الوطنية الخاص بك لتنزيل بطاقتك.", + "language": "ar" + }, + { + "name": "UIN, VID, AID", + "logo": { + "url": "https://api.dev1.mosip.net/inji/digit-icon.png", + "alt_text": "अंक-लोगो" + }, + "title": "UIN, VID, AID के माध्यम से डाउनलोड करे", + "description": "अपना कार्ड डाउनलोड करने के लिए अपनी राष्ट्रीय आईडी दर्ज करें।", + "language": "hi" + }, + { + "name": "UIN, VID, AID", + "logo": { + "url": "https://api.dev1.mosip.net/inji/digit-icon.png", + "alt_text": "ಅಂಕೆಗಳು-ಲೋಗೋ" + }, + "title": "UIN, VID, AID ಮೂಲಕ ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ", + "description": "ನಿಮ್ಮ ಕಾರ್ಡ್ ಅನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಲು ನಿಮ್ಮ ರಾಷ್ಟ್ರೀಯ ID ಅನ್ನು ನಮೂದಿಸಿ.", + "language": "kn" + }, + { + "name": "UIN, VID, AID", + "logo": { + "url": "https://api.dev1.mosip.net/inji/digit-icon.png", + "alt_text": "இலக்கங்கள்-லோகோ" + }, + "title": "UIN, VID, AID மூலம் பதிவிறக்கவும்", + "description": "உங்கள் கார்டைப் பதிவிறக்க உங்கள் தேசிய ஐடியை உள்ளிடவும்.", + "language": "ta" } ], "protocol": "OTP" @@ -20,16 +62,62 @@ { "name": "e-Signet", "logo": { - "url": "https://esignet.dev1.mosip.net/logo.png", + "url": "https://api.dev1.mosip.net/inji/digit-icon.png", "alt_text": "esignet-logo" }, + "title": "Download via e-Signet", + "description": "Enter your national ID to download your card.", "language": "en" + }, + { + "name": "e-Signet", + "logo": { + "url": "https://api.dev1.mosip.net/inji/digit-icon.png", + "alt_text": "esignet-logo" + }, + "title": "e-Signet التنزيل عبر", + "description": "أدخل رقم الهوية الوطنية الخاص بك لتنزيل بطاقتك.", + "language": "ar" + }, + { + "name": "e-Signet", + "logo": { + "url": "https://api.dev1.mosip.net/inji/digit-icon.png", + "alt_text": "esignet-लोगो" + }, + "title": "ई-हस्ताक्षर के माध्यम से डाउनलोड करें", + "description": "अपना कार्ड डाउनलोड करने के लिए अपनी राष्ट्रीय आईडी दर्ज करें।", + "language": "hi" + }, + { + "name": "e-Signet", + "logo": { + "url": "https://api.dev1.mosip.net/inji/digit-icon.png", + "alt_text": "esignet-ಲೋಗೋ" + }, + "title": "ಇ-ಸಿಗ್ನೆಟ್ ಮೂಲಕ ಡೌನ್ಲೋಡ್ ಮಾಡಿ", + "description": "ನಿಮ್ಮ ಕಾರ್ಡ್ ಅನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಲು ನಿಮ್ಮ ರಾಷ್ಟ್ರೀಯ ID ಅನ್ನು ನಮೂದಿಸಿ.", + "language": "kn" + }, + { + "name": "e-Signet", + "logo": { + "url": "https://api.dev1.mosip.net/inji/digit-icon.png", + "alt_text": "esignet-லோகோ" + }, + "title": "இ-சிக்னெட் மூலம் பதிவிறக்கம் செய்யவும்", + "description": "உங்கள் கார்டைப் பதிவிறக்க உங்கள் தேசிய ஐடியை உள்ளிடவும்.", + "language": "ta" } ], "protocol": "OpenId4VCI", "client_id": "7-*****************IWRDAg1x-M", - "scopes_supported": ["mosip_identity_vc_ldp"], - "additional_headers": { "Accept": "application/json" }, + "scopes_supported": [ + "mosip_identity_vc_ldp" + ], + "additional_headers": { + "Accept": "application/json" + }, ".well-known": null, "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", "authorization_endpoint": "https://esignet.dev1.mosip.net/authorize", @@ -37,6 +125,5 @@ "credential_endpoint": "https://api-internal.dev1.mosip.net/v1/esignet/vci/credential", "credential_audience": "https://esignet.dev1.mosip.net/v1/esignet" } - ] } diff --git a/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java b/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java index 8192eac69..972d67b24 100644 --- a/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java @@ -17,7 +17,6 @@ import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.ApisResourceAccessException; import io.mosip.mimoto.exception.BaseUncheckedException; -import io.mosip.mimoto.exception.PlatformErrorMessages; import io.mosip.mimoto.model.Event; import io.mosip.mimoto.model.EventModel; import io.mosip.mimoto.service.RestClientService; @@ -131,6 +130,8 @@ static IssuerDTO getIssuerDTO(String issuerName) { logo.setAlt_text("logo-url"); DisplayDTO display = new DisplayDTO(); display.setName(issuerName); + display.setTitle("Download via " + issuerName); + display.setDescription(issuerName + " description"); display.setLanguage("en"); display.setLogo(logo); IssuerDTO issuer = new IssuerDTO(); From fb6126e68e9ce28bf6283f5a93a92d3827976981 Mon Sep 17 00:00:00 2001 From: Kiruthika Jeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Date: Thu, 30 Nov 2023 13:12:26 +0530 Subject: [PATCH 103/860] refactor(INJI-503): modify esignet logo url in local issuers-config file Signed-off-by: Kiruthika Jeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> --- src/main/resources/mimoto-issuers-config.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/resources/mimoto-issuers-config.json b/src/main/resources/mimoto-issuers-config.json index 5c56de4c3..fc24c4090 100644 --- a/src/main/resources/mimoto-issuers-config.json +++ b/src/main/resources/mimoto-issuers-config.json @@ -62,7 +62,7 @@ { "name": "e-Signet", "logo": { - "url": "https://api.dev1.mosip.net/inji/digit-icon.png", + "url": "https://esignet.dev1.mosip.net/logo.png", "alt_text": "esignet-logo" }, "title": "Download via e-Signet", @@ -72,7 +72,7 @@ { "name": "e-Signet", "logo": { - "url": "https://api.dev1.mosip.net/inji/digit-icon.png", + "url": "https://esignet.dev1.mosip.net/logo.png", "alt_text": "esignet-logo" }, "title": "e-Signet التنزيل عبر", @@ -82,7 +82,7 @@ { "name": "e-Signet", "logo": { - "url": "https://api.dev1.mosip.net/inji/digit-icon.png", + "url": "https://esignet.dev1.mosip.net/logo.png", "alt_text": "esignet-लोगो" }, "title": "ई-हस्ताक्षर के माध्यम से डाउनलोड करें", @@ -92,7 +92,7 @@ { "name": "e-Signet", "logo": { - "url": "https://api.dev1.mosip.net/inji/digit-icon.png", + "url": "https://esignet.dev1.mosip.net/logo.png", "alt_text": "esignet-ಲೋಗೋ" }, "title": "ಇ-ಸಿಗ್ನೆಟ್ ಮೂಲಕ ಡೌನ್ಲೋಡ್ ಮಾಡಿ", @@ -102,7 +102,7 @@ { "name": "e-Signet", "logo": { - "url": "https://api.dev1.mosip.net/inji/digit-icon.png", + "url": "https://esignet.dev1.mosip.net/logo.png", "alt_text": "esignet-லோகோ" }, "title": "இ-சிக்னெட் மூலம் பதிவிறக்கம் செய்யவும்", From e30b9109950014482734e7a55812105af7fc96e6 Mon Sep 17 00:00:00 2001 From: Swati Goel Date: Tue, 12 Dec 2023 12:51:04 +0530 Subject: [PATCH 104/860] [INJI-605] update dependency versions. (#150) Signed-off-by: Swati Goel --- .talismanrc | 5 ++--- pom.xml | 8 ++++---- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/.talismanrc b/.talismanrc index ec4bb9f1d..8b73ad3e4 100644 --- a/.talismanrc +++ b/.talismanrc @@ -23,8 +23,6 @@ fileignoreconfig: checksum: 8245c8124920165b6d9f0696a17d7ae1e945bef0b0d79e8a325bfe3c8afac3f4 - filename: docs/images/id_pass_logo.svg checksum: 81b14da4f42f335cf6a3094489844962b92fc629c89691487558c71c3d44a915 -- filename: README.md - checksum: b01438ae6897d9a2d311ca6f68cc839cb4d8252b29d9fa7d41a0362aaecf0065 - filename: .github/workflows/push-trigger.yml checksum: 98fb3ab2510d2361cdca7cbd4a57afd88e9afa1ff5c4ee6d4b7930a8f565b1ab - filename: helm/mimoto/install.sh @@ -67,4 +65,5 @@ fileignoreconfig: checksum: fc4b7bd41ca63b2060854e218eb50689f77162dc51c45e95f51ec0272bd3585a - filename: src/main/java/io/mosip/mimoto/util/CryptoCoreUtil.java checksum: 0ecab2033342fbbc7828c3eae63247c8c33f4faea3001582338819669cd9b904 -version: "" +- filename: README.md + checksum: b01438ae6897d9a2d311ca6f68cc839cb4d8252b29d9fa7d41a0362aaecf0065 diff --git a/pom.xml b/pom.xml index 0600c11e4..9a7eaae04 100644 --- a/pom.xml +++ b/pom.xml @@ -38,11 +38,11 @@ UTF-8 - 1.2.1-SNAPSHOT - 1.2.1-SNAPSHOT + 1.2.0.1-B1 + 1.2.0.1-B1 1.2.0.1-B1 - 1.2.1-SNAPSHOT - 1.2.1-SNAPSHOT + 1.2.0.1-B2 + 1.2.0.1-B1 3.9.1 From 714f493204e91e681189048ac4091f84459f81df Mon Sep 17 00:00:00 2001 From: Vijay <94220135+vijay151096@users.noreply.github.com> Date: Thu, 14 Dec 2023 11:36:06 +0530 Subject: [PATCH 105/860] Adding PostMan Collections for Mimoto API's Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- .../Collab.postman_environment.json | 21 ++ .../MIMOTO.postman_collection.json | 211 ++++++++++++++++++ 2 files changed, 232 insertions(+) create mode 100644 docs/postman-collections/Collab.postman_environment.json create mode 100644 docs/postman-collections/MIMOTO.postman_collection.json diff --git a/docs/postman-collections/Collab.postman_environment.json b/docs/postman-collections/Collab.postman_environment.json new file mode 100644 index 000000000..244d7e88a --- /dev/null +++ b/docs/postman-collections/Collab.postman_environment.json @@ -0,0 +1,21 @@ +{ + "id": "8c93efeb-d403-4a20-aa23-d04afcfc0bd6", + "name": "Collab", + "values": [ + { + "key": "HOST", + "value": "https://api.collab.mosip.net/residentmobileapp", + "type": "default", + "enabled": true + }, + { + "key": "VC_ID", + "value": "9261578403", + "type": "default", + "enabled": true + } + ], + "_postman_variable_scope": "environment", + "_postman_exported_at": "2023-12-14T06:04:05.344Z", + "_postman_exported_using": "Postman/10.21.2-231211-1355" +} \ No newline at end of file diff --git a/docs/postman-collections/MIMOTO.postman_collection.json b/docs/postman-collections/MIMOTO.postman_collection.json new file mode 100644 index 000000000..aaf06f78d --- /dev/null +++ b/docs/postman-collections/MIMOTO.postman_collection.json @@ -0,0 +1,211 @@ +{ + "info": { + "_postman_id": "3f372076-5eb8-45f3-8476-2a591301de8b", + "name": "MIMOTO", + "schema": "https://schema.getpostman.com/json/collection/v2.0.0/collection.json", + "_exporter_id": "26539037" + }, + "item": [ + { + "name": "Issuers", + "item": [ + { + "name": "get Issuers List", + "request": { + "method": "GET", + "header": [], + "url": "{{HOST}}/issuers/" + }, + "response": [] + }, + { + "name": "get Issuers Config", + "request": { + "method": "GET", + "header": [], + "url": "{{HOST}}/issuers/ESignet" + }, + "response": [] + } + ] + }, + { + "name": "Download VC - OTP", + "item": [ + { + "name": "Req OTP", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"individualId\": \"{{VC_ID}}\",\n \"otpChannel\": [\n \"EMAIL\",\n \"PHONE\"\n ],\n \"transactionID\": \"1234567890\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": "{{HOST}}/req/otp" + }, + "response": [] + }, + { + "name": "Credential Share Request", + "event": [ + { + "listen": "prerequest", + "script": { + "exec": [ + "" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"individualId\": \"{{VC_ID}}\",\n \"otp\": \"111111\",\n \"transactionID\": \"1234567890\",\n \"user\": \"mono\"\n}\n", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": "{{HOST}}/credentialshare/request" + }, + "response": [] + }, + { + "name": "Credential Share Status", + "protocolProfileBehavior": { + "disableBodyPruning": true + }, + "request": { + "method": "GET", + "header": [], + "body": { + "mode": "raw", + "raw": "", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": "{{HOST}}/credentialshare/request/status/c0fc00ae-6fc7-4e9f-b818-f51827582c2f" + }, + "response": [] + }, + { + "name": "Credential Share Download VC", + "event": [ + { + "listen": "prerequest", + "script": { + "exec": [ + "" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"individualId\": \"{{VC_ID}}\",\n \"requestId\": \"61cedc07-e036-46f5-8c75-97d852406373\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": "{{HOST}}/credentialshare/download" + }, + "response": [] + } + ] + }, + { + "name": "Wallet Binding", + "item": [ + { + "name": "Binding OTP", + "request": { + "method": "POST", + "header": [ + { + "key": "accept", + "value": "*/*" + }, + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"requestTime\": \"{{$isoTimestamp}}\",\n \"request\": {\n \"individualId\": \"4536710485\",\n \"otpChannels\": [\n \"EMAIL\",\n \"PHONE\"\n ]\n }\n}" + }, + "url": "{{HOST}}/binding-otp" + }, + "response": [] + }, + { + "name": "Wallet Binding", + "request": { + "method": "POST", + "header": [ + { + "key": "accept", + "value": "*/*" + }, + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"requestTime\": \"{{$isoTimestamp}}\",\n \"request\": {\n \"individualId\": \"6148072053\",\n \"challengeList\": [\n {\n \"authFactorType\": \"OTP\",\n \"challenge\": \"111111\",\n \"format\": \"alpha-numeric\"\n }\n ],\n \"publicKey\": \"-----BEGIN RSA PUBLIC KEY-----\\nMIICCgKCAgEArk/N6Us8TkfH+r1UGCqTGWegJ3UzqHXmj49uE3l9ygIPrTB7Hee8\\ntiVnlNKcQR/7EipumAcNzOFzaysUUIX8rh/QSdlwYYXvC4OT9fLg5tmToYc5x3pN\\nO1k7qg9fnMb/Ksr4D95xUUxQjMLlbojBNWjLhvdP4da1gWUeAdfjIfyLjZGYiD8r\\nUqsVqOfmrec9Y0nLsIsUq735NVl2WIP9mMfjXuRId4MgEE3mN6x/Gj9Ov0AWfb48\\n22wLgybggTdIJZlCBAnPn/n+oiowqUdXADAB4CIaVH8hDJ1fz3Ag2RetriqwrcLF\\nVSK+PyVuLD261BhIeQrgyHdKC6qilVBOYIMqtXjazCdjGICNFoEa1nVP6mu85RN1\\ny8TTS+4ATUTm44++TFSNfsEEpagvd6O/BWlj6mJNGB9dmtEohowwR5fcSHgKbGtP\\ng5J49fKeSDapEln2A/xL7Ubk8KFzzgcQvPWttGaazs7tqdOE4iOMkI72XFbyvIVz\\nzwQEB7vOuRJRclP30SkcR81u694vCtXJ2t2pFUMQVJXat9ypg5BtiZMwBtAnc0Pz\\nDWdGCR5LIpJIaDISmPumHGAzeeRfREbsoVaCdi99vORoxBjuscpEOa5+MgYDKM3S\\nsJZWl2E2/7Kt9KCRVJoqeEkFFKq696zKVD3qbhbZJG3TjBcgYfbN2jMCAwEAAQ==\\n-----END RSA PUBLIC KEY-----\\n\",\n \"authFactorType\": \"WLA\",\n \"format\": \"jwt\"\n }\n}" + }, + "url": "{{HOST}}/wallet-binding" + }, + "response": [] + } + ] + }, + { + "name": "All properties", + "request": { + "method": "GET", + "header": [], + "url": "{{HOST}}/allProperties" + }, + "response": [] + }, + { + "name": "IndividualId Req OTP", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"id\": \"mosip.identity.otp.internal\",\n \"aid\": \"10011100600000220231011051701\",\n \"metadata\": {},\n \"requestTime\": \"{{$isoTimestamp}}\",\n \"version\": \"1.0\",\n \"otpChannel\": [\n \"EMAIL\",\n \"PHONE\"\n ],\n \"transactionID\": \"1234567890\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": "{{HOST}}/req/individualId/otp" + }, + "response": [] + } + ] +} \ No newline at end of file From 01e26cb197c49012aa7f137ab89fcc363e7d2208 Mon Sep 17 00:00:00 2001 From: Vijay <94220135+vijay151096@users.noreply.github.com> Date: Thu, 14 Dec 2023 11:36:06 +0530 Subject: [PATCH 106/860] Adding PostMan Collections for Mimoto API's Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- .../Collab.postman_environment.json | 21 ++ .../MIMOTO.postman_collection.json | 211 ++++++++++++++++++ 2 files changed, 232 insertions(+) create mode 100644 docs/postman-collections/Collab.postman_environment.json create mode 100644 docs/postman-collections/MIMOTO.postman_collection.json diff --git a/docs/postman-collections/Collab.postman_environment.json b/docs/postman-collections/Collab.postman_environment.json new file mode 100644 index 000000000..244d7e88a --- /dev/null +++ b/docs/postman-collections/Collab.postman_environment.json @@ -0,0 +1,21 @@ +{ + "id": "8c93efeb-d403-4a20-aa23-d04afcfc0bd6", + "name": "Collab", + "values": [ + { + "key": "HOST", + "value": "https://api.collab.mosip.net/residentmobileapp", + "type": "default", + "enabled": true + }, + { + "key": "VC_ID", + "value": "9261578403", + "type": "default", + "enabled": true + } + ], + "_postman_variable_scope": "environment", + "_postman_exported_at": "2023-12-14T06:04:05.344Z", + "_postman_exported_using": "Postman/10.21.2-231211-1355" +} \ No newline at end of file diff --git a/docs/postman-collections/MIMOTO.postman_collection.json b/docs/postman-collections/MIMOTO.postman_collection.json new file mode 100644 index 000000000..aaf06f78d --- /dev/null +++ b/docs/postman-collections/MIMOTO.postman_collection.json @@ -0,0 +1,211 @@ +{ + "info": { + "_postman_id": "3f372076-5eb8-45f3-8476-2a591301de8b", + "name": "MIMOTO", + "schema": "https://schema.getpostman.com/json/collection/v2.0.0/collection.json", + "_exporter_id": "26539037" + }, + "item": [ + { + "name": "Issuers", + "item": [ + { + "name": "get Issuers List", + "request": { + "method": "GET", + "header": [], + "url": "{{HOST}}/issuers/" + }, + "response": [] + }, + { + "name": "get Issuers Config", + "request": { + "method": "GET", + "header": [], + "url": "{{HOST}}/issuers/ESignet" + }, + "response": [] + } + ] + }, + { + "name": "Download VC - OTP", + "item": [ + { + "name": "Req OTP", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"individualId\": \"{{VC_ID}}\",\n \"otpChannel\": [\n \"EMAIL\",\n \"PHONE\"\n ],\n \"transactionID\": \"1234567890\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": "{{HOST}}/req/otp" + }, + "response": [] + }, + { + "name": "Credential Share Request", + "event": [ + { + "listen": "prerequest", + "script": { + "exec": [ + "" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"individualId\": \"{{VC_ID}}\",\n \"otp\": \"111111\",\n \"transactionID\": \"1234567890\",\n \"user\": \"mono\"\n}\n", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": "{{HOST}}/credentialshare/request" + }, + "response": [] + }, + { + "name": "Credential Share Status", + "protocolProfileBehavior": { + "disableBodyPruning": true + }, + "request": { + "method": "GET", + "header": [], + "body": { + "mode": "raw", + "raw": "", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": "{{HOST}}/credentialshare/request/status/c0fc00ae-6fc7-4e9f-b818-f51827582c2f" + }, + "response": [] + }, + { + "name": "Credential Share Download VC", + "event": [ + { + "listen": "prerequest", + "script": { + "exec": [ + "" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"individualId\": \"{{VC_ID}}\",\n \"requestId\": \"61cedc07-e036-46f5-8c75-97d852406373\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": "{{HOST}}/credentialshare/download" + }, + "response": [] + } + ] + }, + { + "name": "Wallet Binding", + "item": [ + { + "name": "Binding OTP", + "request": { + "method": "POST", + "header": [ + { + "key": "accept", + "value": "*/*" + }, + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"requestTime\": \"{{$isoTimestamp}}\",\n \"request\": {\n \"individualId\": \"4536710485\",\n \"otpChannels\": [\n \"EMAIL\",\n \"PHONE\"\n ]\n }\n}" + }, + "url": "{{HOST}}/binding-otp" + }, + "response": [] + }, + { + "name": "Wallet Binding", + "request": { + "method": "POST", + "header": [ + { + "key": "accept", + "value": "*/*" + }, + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"requestTime\": \"{{$isoTimestamp}}\",\n \"request\": {\n \"individualId\": \"6148072053\",\n \"challengeList\": [\n {\n \"authFactorType\": \"OTP\",\n \"challenge\": \"111111\",\n \"format\": \"alpha-numeric\"\n }\n ],\n \"publicKey\": \"-----BEGIN RSA PUBLIC KEY-----\\nMIICCgKCAgEArk/N6Us8TkfH+r1UGCqTGWegJ3UzqHXmj49uE3l9ygIPrTB7Hee8\\ntiVnlNKcQR/7EipumAcNzOFzaysUUIX8rh/QSdlwYYXvC4OT9fLg5tmToYc5x3pN\\nO1k7qg9fnMb/Ksr4D95xUUxQjMLlbojBNWjLhvdP4da1gWUeAdfjIfyLjZGYiD8r\\nUqsVqOfmrec9Y0nLsIsUq735NVl2WIP9mMfjXuRId4MgEE3mN6x/Gj9Ov0AWfb48\\n22wLgybggTdIJZlCBAnPn/n+oiowqUdXADAB4CIaVH8hDJ1fz3Ag2RetriqwrcLF\\nVSK+PyVuLD261BhIeQrgyHdKC6qilVBOYIMqtXjazCdjGICNFoEa1nVP6mu85RN1\\ny8TTS+4ATUTm44++TFSNfsEEpagvd6O/BWlj6mJNGB9dmtEohowwR5fcSHgKbGtP\\ng5J49fKeSDapEln2A/xL7Ubk8KFzzgcQvPWttGaazs7tqdOE4iOMkI72XFbyvIVz\\nzwQEB7vOuRJRclP30SkcR81u694vCtXJ2t2pFUMQVJXat9ypg5BtiZMwBtAnc0Pz\\nDWdGCR5LIpJIaDISmPumHGAzeeRfREbsoVaCdi99vORoxBjuscpEOa5+MgYDKM3S\\nsJZWl2E2/7Kt9KCRVJoqeEkFFKq696zKVD3qbhbZJG3TjBcgYfbN2jMCAwEAAQ==\\n-----END RSA PUBLIC KEY-----\\n\",\n \"authFactorType\": \"WLA\",\n \"format\": \"jwt\"\n }\n}" + }, + "url": "{{HOST}}/wallet-binding" + }, + "response": [] + } + ] + }, + { + "name": "All properties", + "request": { + "method": "GET", + "header": [], + "url": "{{HOST}}/allProperties" + }, + "response": [] + }, + { + "name": "IndividualId Req OTP", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"id\": \"mosip.identity.otp.internal\",\n \"aid\": \"10011100600000220231011051701\",\n \"metadata\": {},\n \"requestTime\": \"{{$isoTimestamp}}\",\n \"version\": \"1.0\",\n \"otpChannel\": [\n \"EMAIL\",\n \"PHONE\"\n ],\n \"transactionID\": \"1234567890\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": "{{HOST}}/req/individualId/otp" + }, + "response": [] + } + ] +} \ No newline at end of file From 9da72b10f482b0129906af34c3319c3f5c44226f Mon Sep 17 00:00:00 2001 From: PRAFUL RAKHADE <99539100+Prafulrakhade@users.noreply.github.com> Date: Thu, 14 Dec 2023 16:05:52 +0530 Subject: [PATCH 107/860] [DSD-3960] 0.10.0 inji release (#153) Signed-off-by: techno-467 --- .github/workflows/push-trigger.yml | 2 +- .github/workflows/release-changes.yml | 29 ---------------------- .github/workflows/tag.yml | 35 --------------------------- helm/mimoto/Chart.yaml | 2 +- helm/mimoto/install.sh | 4 +-- helm/mimoto/values.yaml | 6 ++--- partner-onboarder/install.sh | 2 +- pom.xml | 2 +- 8 files changed, 9 insertions(+), 73 deletions(-) delete mode 100644 .github/workflows/release-changes.yml delete mode 100644 .github/workflows/tag.yml diff --git a/.github/workflows/push-trigger.yml b/.github/workflows/push-trigger.yml index 51827f912..2921b0a36 100644 --- a/.github/workflows/push-trigger.yml +++ b/.github/workflows/push-trigger.yml @@ -4,7 +4,7 @@ on: release: types: [published] pull_request: - types: [opened] + types: [opened, reopened, synchronize] workflow_dispatch: inputs: message: diff --git a/.github/workflows/release-changes.yml b/.github/workflows/release-changes.yml deleted file mode 100644 index 56f3842b5..000000000 --- a/.github/workflows/release-changes.yml +++ /dev/null @@ -1,29 +0,0 @@ -name: Release/pre-release Preparation. - -on: - workflow_dispatch: - inputs: - MESSAGE: - description: 'Triggered for release or pe-release' - required: false - default: 'Release Preparation' - RELEASE_TAG: - description: 'tag to update' - required: true - SNAPSHOT_TAG: - description: 'tag to be replaced' - required: true - BASE: - description: 'base branch for PR' - required: true -jobs: - maven-release-preparation: - uses: mosip/kattu/.github/workflows/release-changes.yml@master - with: - MESSAGE: ${{ inputs.MESSAGE }} - RELEASE_TAG: ${{ inputs.RELEASE_TAG }} - SNAPSHOT_TAG: ${{ inputs.SNAPSHOT_TAG }} - BASE: ${{ inputs.BASE }} - secrets: - ACTION_PAT: ${{ secrets.ACTION_PAT }} - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} \ No newline at end of file diff --git a/.github/workflows/tag.yml b/.github/workflows/tag.yml deleted file mode 100644 index 9a5b079ff..000000000 --- a/.github/workflows/tag.yml +++ /dev/null @@ -1,35 +0,0 @@ -name: Tagging of repos - -on: - workflow_dispatch: - inputs: - TAG: - description: 'Tag to be published' - required: true - type: string - BODY: - description: 'Release body message' - required: true - default: 'Changes in this Release' - type: string - PRE_RELEASE: - description: 'Pre-release? True/False' - required: true - default: False - type: string - DRAFT: - description: 'Draft? True/False' - required: false - default: False - type: string - -jobs: - tag-branch: - uses: mosip/kattu/.github/workflows/tag.yml@master - with: - TAG: ${{ inputs.TAG }} - BODY: ${{ inputs.BODY }} - PRE_RELEASE: ${{ inputs.PRE_RELEASE }} - DRAFT: ${{ inputs.DRAFT }} - secrets: - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} \ No newline at end of file diff --git a/helm/mimoto/Chart.yaml b/helm/mimoto/Chart.yaml index 6062a8dcb..64eba9ee5 100644 --- a/helm/mimoto/Chart.yaml +++ b/helm/mimoto/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 name: mimoto description: A Helm chart for MOSIP mimoto Application type: application -version: 12.0.2 +version: 0.10.0 appVersion: "" dependencies: - name: common diff --git a/helm/mimoto/install.sh b/helm/mimoto/install.sh index b4450a98c..fa2f45f16 100755 --- a/helm/mimoto/install.sh +++ b/helm/mimoto/install.sh @@ -7,7 +7,7 @@ if [ $# -ge 1 ] ; then fi NS=mimoto -MIMOTO_CHART_VERSION=12.0.2 +MIMOTO_CHART_VERSION=0.10.0 echo Create $NS namespace kubectl create ns $NS @@ -70,4 +70,4 @@ set -o errexit ## set -e : exit the script if any statement returns a non-true set -o nounset ## set -u : exit the script if you try to use an uninitialised variable set -o errtrace # trace ERR through 'time command' and other functions set -o pipefail # trace ERR through pipes -installing_mimoto # calling function \ No newline at end of file +installing_mimoto # calling function diff --git a/helm/mimoto/values.yaml b/helm/mimoto/values.yaml index fc2f31c9f..e4fa4cfa5 100644 --- a/helm/mimoto/values.yaml +++ b/helm/mimoto/values.yaml @@ -53,8 +53,8 @@ service: image: registry: docker.io - repository: mosipqa/mimoto - tag: develop + repository: mosipid/mimoto + tag: 0.10.0 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -466,4 +466,4 @@ volumes: secrets: mimotooidc: key: oidckeystore.p12 - path: /home/mosip/certs \ No newline at end of file + path: /home/mosip/certs diff --git a/partner-onboarder/install.sh b/partner-onboarder/install.sh index a9ef4bd6a..12ae37e0f 100755 --- a/partner-onboarder/install.sh +++ b/partner-onboarder/install.sh @@ -21,7 +21,7 @@ if [ "$flag" = "n" ]; then fi NS=mimoto -CHART_VERSION=12.0.2 +CHART_VERSION=12.0.1-B4 echo Create $NS namespace kubectl create ns $NS diff --git a/pom.xml b/pom.xml index 9a7eaae04..4d98c8aa0 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ io.mosip mimoto - 0.2.0-SNAPSHOT + 0.10.0 mimoto Mobile server backend supporting Inji. From 0a3180807b94bf8f8d7f534815ccdebfbdf14e31 Mon Sep 17 00:00:00 2001 From: PRAFUL RAKHADE <99539100+Prafulrakhade@users.noreply.github.com> Date: Thu, 14 Dec 2023 17:22:21 +0530 Subject: [PATCH 108/860] [DSD-3960] 0.10.0 inji release (#154) Signed-off-by: techno-467 --- .github/workflows/release-changes.yml | 29 ---------------------- .github/workflows/tag.yml | 35 --------------------------- 2 files changed, 64 deletions(-) delete mode 100644 .github/workflows/release-changes.yml delete mode 100644 .github/workflows/tag.yml diff --git a/.github/workflows/release-changes.yml b/.github/workflows/release-changes.yml deleted file mode 100644 index 56f3842b5..000000000 --- a/.github/workflows/release-changes.yml +++ /dev/null @@ -1,29 +0,0 @@ -name: Release/pre-release Preparation. - -on: - workflow_dispatch: - inputs: - MESSAGE: - description: 'Triggered for release or pe-release' - required: false - default: 'Release Preparation' - RELEASE_TAG: - description: 'tag to update' - required: true - SNAPSHOT_TAG: - description: 'tag to be replaced' - required: true - BASE: - description: 'base branch for PR' - required: true -jobs: - maven-release-preparation: - uses: mosip/kattu/.github/workflows/release-changes.yml@master - with: - MESSAGE: ${{ inputs.MESSAGE }} - RELEASE_TAG: ${{ inputs.RELEASE_TAG }} - SNAPSHOT_TAG: ${{ inputs.SNAPSHOT_TAG }} - BASE: ${{ inputs.BASE }} - secrets: - ACTION_PAT: ${{ secrets.ACTION_PAT }} - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} \ No newline at end of file diff --git a/.github/workflows/tag.yml b/.github/workflows/tag.yml deleted file mode 100644 index 9a5b079ff..000000000 --- a/.github/workflows/tag.yml +++ /dev/null @@ -1,35 +0,0 @@ -name: Tagging of repos - -on: - workflow_dispatch: - inputs: - TAG: - description: 'Tag to be published' - required: true - type: string - BODY: - description: 'Release body message' - required: true - default: 'Changes in this Release' - type: string - PRE_RELEASE: - description: 'Pre-release? True/False' - required: true - default: False - type: string - DRAFT: - description: 'Draft? True/False' - required: false - default: False - type: string - -jobs: - tag-branch: - uses: mosip/kattu/.github/workflows/tag.yml@master - with: - TAG: ${{ inputs.TAG }} - BODY: ${{ inputs.BODY }} - PRE_RELEASE: ${{ inputs.PRE_RELEASE }} - DRAFT: ${{ inputs.DRAFT }} - secrets: - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} \ No newline at end of file From affcba56fd8c6a72ec6955a1f6213d93a69bbc52 Mon Sep 17 00:00:00 2001 From: Swati Goel Date: Fri, 15 Dec 2023 12:51:37 +0530 Subject: [PATCH 109/860] [INJI-624] - Update mimoto license to MPL2.0 Signed-off-by: Swati Goel --- LICENSE | 394 +++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 373 insertions(+), 21 deletions(-) diff --git a/LICENSE b/LICENSE index ba08bd62e..fa0086a95 100644 --- a/LICENSE +++ b/LICENSE @@ -1,21 +1,373 @@ -MIT License - -Copyright (c) 2022 Modular Open Source Identity Platform - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. \ No newline at end of file From 4faa51cdebb6c29e426ac3a27ba9911679bad6d6 Mon Sep 17 00:00:00 2001 From: adityankannan-tw Date: Mon, 8 Jan 2024 12:23:32 +0530 Subject: [PATCH 110/860] [INJI-696] update slack webhook url for mimoto Signed-off-by: adityankannan-tw --- .github/workflows/chart-lint-publish.yml | 2 +- .github/workflows/clear-artifacts.yml | 2 +- .github/workflows/push-trigger.yml | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/chart-lint-publish.yml b/.github/workflows/chart-lint-publish.yml index 2ba7dff33..df2148d28 100644 --- a/.github/workflows/chart-lint-publish.yml +++ b/.github/workflows/chart-lint-publish.yml @@ -59,4 +59,4 @@ jobs: LINTING_HEALTH_CHECK_SCHEMA_YAML_URL: "https://raw.githubusercontent.com/mosip/kattu/master/.github/helm-lint-configs/health-check-schema.yaml" secrets: TOKEN: ${{ secrets.ACTION_PAT }} - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }} diff --git a/.github/workflows/clear-artifacts.yml b/.github/workflows/clear-artifacts.yml index c78316f3e..3beff6243 100644 --- a/.github/workflows/clear-artifacts.yml +++ b/.github/workflows/clear-artifacts.yml @@ -14,4 +14,4 @@ jobs: uses: mosip/kattu/.github/workflows/clear-artifacts.yml@master secrets: ACCESS_TOKEN: ${{ secrets.access_token }} - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }} diff --git a/.github/workflows/push-trigger.yml b/.github/workflows/push-trigger.yml index 2921b0a36..f6f0f1a4e 100644 --- a/.github/workflows/push-trigger.yml +++ b/.github/workflows/push-trigger.yml @@ -33,7 +33,7 @@ jobs: OSSRH_SECRET: ${{ secrets.OSSRH_SECRET }} OSSRH_TOKEN: ${{ secrets.OSSRH_TOKEN }} GPG_SECRET: ${{ secrets.GPG_SECRET }} - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }} ## Recreate zips to provide support for docker unzip operation recreate-zips: @@ -83,7 +83,7 @@ jobs: OSSRH_SECRET: ${{ secrets.OSSRH_SECRET }} OSSRH_TOKEN: ${{ secrets.OSSRH_TOKEN }} GPG_SECRET: ${{ secrets.GPG_SECRET }} - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }} sonar_analysis: needs: build-mimoto @@ -98,7 +98,7 @@ jobs: OSSRH_SECRET: ${{ secrets.OSSRH_SECRET }} OSSRH_TOKEN: ${{ secrets.OSSRH_TOKEN }} GPG_SECRET: ${{ secrets.GPG_SECRET }} - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }} build-dockers: needs: recreate-zips @@ -119,4 +119,4 @@ jobs: DEV_NAMESPACE_DOCKER_HUB: ${{ secrets.DEV_NAMESPACE_DOCKER_HUB }} ACTOR_DOCKER_HUB: ${{ secrets.ACTOR_DOCKER_HUB }} RELEASE_DOCKER_HUB: ${{ secrets.RELEASE_DOCKER_HUB }} - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }} From adf12d0a736001a6dabd79ce0c549b94e1867282 Mon Sep 17 00:00:00 2001 From: Vijay <94220135+vijay151096@users.noreply.github.com> Date: Tue, 9 Jan 2024 17:28:06 +0530 Subject: [PATCH 111/860] [INJI-606] : Integration of Sunbird Issuer Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- .github/workflows/push-trigger.yml | 1 + .../mimoto/controller/IdpController.java | 21 +++--- .../io/mosip/mimoto/service/IdpService.java | 4 +- .../mimoto/service/impl/IdpServiceImpl.java | 27 ++++++- .../service/impl/IdpSunbirdServiceImpl.java | 70 +++++++++++++++++++ .../java/io/mosip/mimoto/util/JoseUtil.java | 17 +---- .../java/io/mosip/mimoto/util/Utilities.java | 6 +- .../resources/application-local.properties | 4 ++ src/main/resources/mimoto-issuers-config.json | 23 ++++++ 9 files changed, 140 insertions(+), 33 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/service/impl/IdpSunbirdServiceImpl.java diff --git a/.github/workflows/push-trigger.yml b/.github/workflows/push-trigger.yml index f6f0f1a4e..d50a72c95 100644 --- a/.github/workflows/push-trigger.yml +++ b/.github/workflows/push-trigger.yml @@ -21,6 +21,7 @@ on: - develop* - MOSIP* - qa-develop + - inji-606* jobs: build-mimoto: diff --git a/src/main/java/io/mosip/mimoto/controller/IdpController.java b/src/main/java/io/mosip/mimoto/controller/IdpController.java index f75c164bd..658b3d4ae 100644 --- a/src/main/java/io/mosip/mimoto/controller/IdpController.java +++ b/src/main/java/io/mosip/mimoto/controller/IdpController.java @@ -1,6 +1,5 @@ package io.mosip.mimoto.controller; -import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.Lists; import com.google.gson.Gson; import io.mosip.kernel.core.logger.spi.Logger; @@ -14,9 +13,10 @@ import io.mosip.mimoto.exception.PlatformErrorMessages; import io.mosip.mimoto.service.IdpService; import io.mosip.mimoto.service.RestClientService; +import io.mosip.mimoto.service.impl.IdpSunbirdServiceImpl; +import io.mosip.mimoto.service.impl.IdpServiceImpl; import io.mosip.mimoto.util.*; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.http.*; import org.springframework.util.MultiValueMap; import org.springframework.validation.BindingResult; @@ -42,17 +42,13 @@ public class IdpController { private JoseUtil joseUtil; @Autowired - private ObjectMapper objectMapper; + private IdpSunbirdServiceImpl idpSunbirdServiceImpl; @Autowired - RequestValidator requestValidator; - - @Value("${mosip.oidc.esignet.token.endpoint}") - String tokenEndpoint; + private IdpServiceImpl idpServiceImpl; @Autowired - IdpService idpService; - + RequestValidator requestValidator; @PostMapping("/binding-otp") @SuppressWarnings("unchecked") public ResponseEntity otpRequest(@Valid @RequestBody BindingOtpRequestDto requestDTO, BindingResult result) throws Exception { @@ -108,13 +104,14 @@ public ResponseEntity request(@RequestBody WalletBindingRequestDTO reque return ResponseEntity.status(HttpStatus.OK).body(response); } - @PostMapping(value = "/get-token", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) - public ResponseEntity getToken(@RequestParam Map params) { + @PostMapping(value = {"/get-token","/get-token/{issuer}"}, consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) + public ResponseEntity getToken(@RequestParam Map params, @PathVariable(required = false) String issuer) { logger.debug("Started Token Call get-token-> " + params.toString()); RestTemplate restTemplate = new RestTemplate(); try { + IdpService idpService = "Sunbird".equals(issuer) ? idpSunbirdServiceImpl : idpServiceImpl; HttpEntity> request = idpService.constructGetTokenRequest(params); - TokenResponseDTO response = restTemplate.postForObject(tokenEndpoint, request, TokenResponseDTO.class); + TokenResponseDTO response = restTemplate.postForObject(idpService.getTokenEndpoint(), request, TokenResponseDTO.class); return ResponseEntity.status(HttpStatus.OK).body(response); } catch (Exception ex){ logger.error("Exception Occured while invoking the get-token endpoint", ex); diff --git a/src/main/java/io/mosip/mimoto/service/IdpService.java b/src/main/java/io/mosip/mimoto/service/IdpService.java index 95c0d01be..ddc6a0ff9 100644 --- a/src/main/java/io/mosip/mimoto/service/IdpService.java +++ b/src/main/java/io/mosip/mimoto/service/IdpService.java @@ -6,5 +6,7 @@ import java.util.Map; public interface IdpService { - public HttpEntity> constructGetTokenRequest(Map params); + HttpEntity> constructGetTokenRequest(Map params); + + String getTokenEndpoint(); } diff --git a/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java index fdac7f2eb..52a3f55c1 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java @@ -22,6 +22,24 @@ public class IdpServiceImpl implements IdpService { @Value("${mosip.oidc.client.assertion.type}") String clientAssertionType; + @Value("${mosip.oidc.p12.filename}") + private String fileName; + + @Value("${mosip.oidc.p12.password}") + private String cyptoPassword; + + @Value("${mosip.oidc.p12.path}") + String keyStorePath; + + @Value("${mosip.oidc.p12.alias}") + private String alias; + + @Value("${mosip.oidc.esignet.aud}") + private String audience; + + @Value("${mosip.oidc.esignet.token.endpoint}") + String tokenEndpoint; + @Autowired JoseUtil joseUtil; @@ -30,15 +48,22 @@ public HttpEntity> constructGetTokenRequest(Map map= new LinkedMultiValueMap<>(); map.add("code", params.get("code")); map.add("client_id", clientId); map.add("grant_type", params.get("grant_type")); map.add("redirect_uri", params.get("redirect_uri")); - map.add("client_assertion", joseUtil.getJWT(clientId).replace("[","").replace("]","")); + map.add("client_assertion", clientAssertion.replace("[","").replace("]","")); map.add("client_assertion_type", clientAssertionType); map.add("code_verifier", params.get("code_verifier")); return new HttpEntity<>(map, headers); } + + @Override + public String getTokenEndpoint(){ + return tokenEndpoint; + } } diff --git a/src/main/java/io/mosip/mimoto/service/impl/IdpSunbirdServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IdpSunbirdServiceImpl.java new file mode 100644 index 000000000..9f6220f5f --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/impl/IdpSunbirdServiceImpl.java @@ -0,0 +1,70 @@ +package io.mosip.mimoto.service.impl; + +import io.mosip.mimoto.service.IdpService; +import io.mosip.mimoto.util.JoseUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Service; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; + +import java.util.Map; + +@Service +public class IdpSunbirdServiceImpl implements IdpService { + + @Value("${mosip.oidc.sunbird.client.id}") + public String clientId; + + @Value("${mosip.oidc.client.assertion.type}") + String clientAssertionType; + + @Value("${mosip.oidc.p12.filename}") + private String fileName; + + @Value("${mosip.oidc.p12.password}") + private String cyptoPassword; + + @Value("${mosip.oidc.p12.path}") + String keyStorePath; + + @Value("${mosip.oidc.sunbird.p12.alias}") + private String alias; + + @Value("${mosip.oidc.sunbird.esignet.aud}") + private String audience; + + @Value("${mosip.oidc.sunbird.esignet.token.endpoint}") + String tokenEndpoint; + + @Autowired + JoseUtil joseUtil; + + @Override + public HttpEntity> constructGetTokenRequest(Map params) { + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + + String clientAssertion = joseUtil.getJWT(clientId, keyStorePath, fileName, alias, cyptoPassword, audience); + + MultiValueMap map= new LinkedMultiValueMap<>(); + map.add("code", params.get("code")); + map.add("client_id", clientId); + map.add("grant_type", params.get("grant_type")); + map.add("redirect_uri", params.get("redirect_uri")); + map.add("client_assertion", clientAssertion.replace("[","").replace("]","")); + map.add("client_assertion_type", clientAssertionType); + map.add("code_verifier", params.get("code_verifier")); + + return new HttpEntity<>(map, headers); + } + @Override + public String getTokenEndpoint(){ + return tokenEndpoint; + } + + +} diff --git a/src/main/java/io/mosip/mimoto/util/JoseUtil.java b/src/main/java/io/mosip/mimoto/util/JoseUtil.java index f6d0f912e..837c5fe08 100644 --- a/src/main/java/io/mosip/mimoto/util/JoseUtil.java +++ b/src/main/java/io/mosip/mimoto/util/JoseUtil.java @@ -48,21 +48,6 @@ public class JoseUtil { @Autowired private CryptoCoreUtil cryptoCoreUtil; - @Value("${mosip.oidc.p12.filename}") - private String fileName; - - @Value("${mosip.oidc.p12.password}") - private String cyptoPassword; - - @Value("${mosip.oidc.p12.path}") - String keyStorePath; - - @Value("${mosip.oidc.p12.alias}") - private String alias; - - @Value("${mosip.oidc.esignet.aud}") - private String audience; - public static JwkDto getJwkFromPublicKey(String publicKeyString) throws NoSuchAlgorithmException, InvalidKeySpecException { RSAPublicKeySpec keySpec = publicKeyString.startsWith(BEGIN_KEY) ? getKeySpecForPublicKey(publicKeyString) : getKeySpecForRSAKey(publicKeyString); @@ -145,7 +130,7 @@ public ResponseWrapper addThumbprintAndKeyId(ResponseW return responseWrapper; } - public String getJWT(String clientId) { + public String getJWT(String clientId, String keyStorePath, String fileName, String alias, String cyptoPassword, String audience) { Map header = new HashMap<>(); header.put("alg", ALG_RS256); diff --git a/src/main/java/io/mosip/mimoto/util/Utilities.java b/src/main/java/io/mosip/mimoto/util/Utilities.java index 3c693c939..88933755d 100644 --- a/src/main/java/io/mosip/mimoto/util/Utilities.java +++ b/src/main/java/io/mosip/mimoto/util/Utilities.java @@ -112,9 +112,9 @@ public class Utilities { private String issuersConfigJsonString = null; // uncomment for running mimoto Locally to populate the issuers json -// public Utilities(@Value("classpath:mimoto-issuers-config.json") Resource resource) throws IOException { -// issuersConfigJsonString = (Files.readString(resource.getFile().toPath())); -// } + public Utilities(@Value("classpath:mimoto-issuers-config.json") Resource resource) throws IOException { + issuersConfigJsonString = (Files.readString(resource.getFile().toPath())); + } public JSONObject getTemplate() throws JsonParseException, JsonMappingException, IOException { return objectMapper.readValue(classLoader.getResourceAsStream(defaultTemplate), JSONObject.class); diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index f8e0d8a81..169fd8f6d 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -209,3 +209,7 @@ mosip.oidc.p12.filename=oidckeystore.p12 mosip.oidc.p12.password=5YBx6QT2wbY8Ls6w mosip.oidc.p12.path=certs/ mosip.oidc.p12.alias=mpartner-default-mimotooidc +mosip.oidc.sunbird.p12.alias=esignet-sunbird-partner +mosip.oidc.sunbird.esignet.token.endpoint=https://api-internal.dev1.mosip.net/v1/esignet/oauth/token +mosip.oidc.sunbird.esignet.aud=https://esignet-mock.dev1.mosip.net/v1/esignet/oauth/token +mosip.oidc.sunbird.client.id=3FpvldoSV2XD8_X3D4BaVWgpDDRU8Yrmudugk2uazHw diff --git a/src/main/resources/mimoto-issuers-config.json b/src/main/resources/mimoto-issuers-config.json index fc24c4090..cc367557c 100644 --- a/src/main/resources/mimoto-issuers-config.json +++ b/src/main/resources/mimoto-issuers-config.json @@ -124,6 +124,29 @@ "token_endpoint": "https://api.dev1.mosip.net/residentmobileapp/get-token", "credential_endpoint": "https://api-internal.dev1.mosip.net/v1/esignet/vci/credential", "credential_audience": "https://esignet.dev1.mosip.net/v1/esignet" + }, + { + "credential_issuer": "Sunbird", + "display": [ + { + "name": "Sunbird RC Insurance Verifiable Credential", + "logo": { + "url": "https://sunbird.org/images/sunbird-logo-new.png", + "alt_text": "a square logo of a Sunbird" + }, + "language": "en" + } + ], + "protocol": "OpenId4VCI", + "client_id": "${mimoto.oidc.partner.clientid}", + "scopes_supported": ["sunbird_rc_insurance_vc_ldp"], + "additional_headers": { "Accept": "application/json" }, + ".well-known": null, + "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", + "authorization_endpoint": "https://${mosip.esignet.mock.host}/authorize", + "token_endpoint": "https://${mosip.api.public.host}/residentmobileapp/get-token/Sunbird", + "credential_endpoint": "https://${mosip.esignet.mock.host}/v1/esignet/vci/credential", + "credential_audience": "https://${mosip.esignet.mock.host}/v1/esignet" } ] } From c5b531076642963f1b9fe2cc353476a2c4b2e5b4 Mon Sep 17 00:00:00 2001 From: Vijay <94220135+vijay151096@users.noreply.github.com> Date: Tue, 9 Jan 2024 18:08:52 +0530 Subject: [PATCH 112/860] [INJI-606] : comment unwanted changes Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- src/main/java/io/mosip/mimoto/util/Utilities.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/util/Utilities.java b/src/main/java/io/mosip/mimoto/util/Utilities.java index 88933755d..3c693c939 100644 --- a/src/main/java/io/mosip/mimoto/util/Utilities.java +++ b/src/main/java/io/mosip/mimoto/util/Utilities.java @@ -112,9 +112,9 @@ public class Utilities { private String issuersConfigJsonString = null; // uncomment for running mimoto Locally to populate the issuers json - public Utilities(@Value("classpath:mimoto-issuers-config.json") Resource resource) throws IOException { - issuersConfigJsonString = (Files.readString(resource.getFile().toPath())); - } +// public Utilities(@Value("classpath:mimoto-issuers-config.json") Resource resource) throws IOException { +// issuersConfigJsonString = (Files.readString(resource.getFile().toPath())); +// } public JSONObject getTemplate() throws JsonParseException, JsonMappingException, IOException { return objectMapper.readValue(classLoader.getResourceAsStream(defaultTemplate), JSONObject.class); From 8e752f0a0a17fe3fdcea16238a3e9221af3c50c5 Mon Sep 17 00:00:00 2001 From: Vijay <94220135+vijay151096@users.noreply.github.com> Date: Tue, 16 Jan 2024 13:26:40 +0530 Subject: [PATCH 113/860] [INJI-606] : added credential type in the config Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- src/main/java/io/mosip/mimoto/dto/IssuerDTO.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java index 1f584f309..f8e100889 100644 --- a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java @@ -37,6 +37,8 @@ public class IssuerDTO { @JsonInclude(NON_NULL) String credential_endpoint; @JsonInclude(NON_NULL) + List credential_type; + @JsonInclude(NON_NULL) String credential_audience; @JsonInclude(NON_NULL) Map additional_headers; From 018143d3a83373714c6b1fa4553c23c9bec29c46 Mon Sep 17 00:00:00 2001 From: Vijay <94220135+vijay151096@users.noreply.github.com> Date: Tue, 16 Jan 2024 14:42:17 +0530 Subject: [PATCH 114/860] [INJI-606] : modify the get token implementation for scalability Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- .../mimoto/controller/IdpController.java | 15 +++--- .../java/io/mosip/mimoto/dto/IssuerDTO.java | 2 + .../mimoto/service/impl/IdpServiceImpl.java | 49 ++++++++++--------- src/main/resources/mimoto-issuers-config.json | 12 ++++- 4 files changed, 45 insertions(+), 33 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/IdpController.java b/src/main/java/io/mosip/mimoto/controller/IdpController.java index 658b3d4ae..9dfc83187 100644 --- a/src/main/java/io/mosip/mimoto/controller/IdpController.java +++ b/src/main/java/io/mosip/mimoto/controller/IdpController.java @@ -1,19 +1,19 @@ package io.mosip.mimoto.controller; import com.google.common.collect.Lists; -import com.google.gson.Gson; import io.mosip.kernel.core.logger.spi.Logger; import io.mosip.kernel.core.util.JsonUtils; import io.mosip.mimoto.constant.ApiName; import io.mosip.mimoto.core.http.ResponseWrapper; import io.mosip.mimoto.dto.ErrorDTO; +import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.exception.IdpException; import io.mosip.mimoto.exception.PlatformErrorMessages; import io.mosip.mimoto.service.IdpService; +import io.mosip.mimoto.service.IssuersService; import io.mosip.mimoto.service.RestClientService; -import io.mosip.mimoto.service.impl.IdpSunbirdServiceImpl; import io.mosip.mimoto.service.impl.IdpServiceImpl; import io.mosip.mimoto.util.*; import org.springframework.beans.factory.annotation.Autowired; @@ -33,7 +33,6 @@ public class IdpController { private final Logger logger = LoggerUtil.getLogger(IdpController.class); private static final boolean USE_BEARER_TOKEN = true; private static final String ID = "mosip.mimoto.idp"; - private Gson gson = new Gson(); @Autowired private RestClientService restClientService; @@ -42,10 +41,7 @@ public class IdpController { private JoseUtil joseUtil; @Autowired - private IdpSunbirdServiceImpl idpSunbirdServiceImpl; - - @Autowired - private IdpServiceImpl idpServiceImpl; + IssuersService issuersService; @Autowired RequestValidator requestValidator; @@ -104,12 +100,13 @@ public ResponseEntity request(@RequestBody WalletBindingRequestDTO reque return ResponseEntity.status(HttpStatus.OK).body(response); } - @PostMapping(value = {"/get-token","/get-token/{issuer}"}, consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) + @PostMapping(value = {"/get-token/{issuer}"}, consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) public ResponseEntity getToken(@RequestParam Map params, @PathVariable(required = false) String issuer) { logger.debug("Started Token Call get-token-> " + params.toString()); RestTemplate restTemplate = new RestTemplate(); try { - IdpService idpService = "Sunbird".equals(issuer) ? idpSunbirdServiceImpl : idpServiceImpl; + IssuerDTO issuerDTO = issuersService.getIssuerConfig(issuer); + IdpService idpService = new IdpServiceImpl(issuerDTO); HttpEntity> request = idpService.constructGetTokenRequest(params); TokenResponseDTO response = restTemplate.postForObject(idpService.getTokenEndpoint(), request, TokenResponseDTO.class); return ResponseEntity.status(HttpStatus.OK).body(response); diff --git a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java index f8e100889..02a026550 100644 --- a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java @@ -41,5 +41,7 @@ public class IssuerDTO { @JsonInclude(NON_NULL) String credential_audience; @JsonInclude(NON_NULL) + String client_alias; + @JsonInclude(NON_NULL) Map additional_headers; } diff --git a/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java index 52a3f55c1..c6a9978e9 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java @@ -1,7 +1,10 @@ package io.mosip.mimoto.service.impl; +import io.mosip.kernel.core.logger.spi.Logger; +import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.service.IdpService; import io.mosip.mimoto.util.JoseUtil; +import io.mosip.mimoto.util.LoggerUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpEntity; @@ -15,9 +18,7 @@ @Service public class IdpServiceImpl implements IdpService { - - @Value("${mosip.oidc.client.id}") - String clientId; + public IssuerDTO issuerDTO; @Value("${mosip.oidc.client.assertion.type}") String clientAssertionType; @@ -31,39 +32,41 @@ public class IdpServiceImpl implements IdpService { @Value("${mosip.oidc.p12.path}") String keyStorePath; - @Value("${mosip.oidc.p12.alias}") - private String alias; + @Autowired + JoseUtil joseUtil; - @Value("${mosip.oidc.esignet.aud}") - private String audience; + private final Logger logger = LoggerUtil.getLogger(IdpServiceImpl.class); - @Value("${mosip.oidc.esignet.token.endpoint}") - String tokenEndpoint; - @Autowired - JoseUtil joseUtil; + public IdpServiceImpl(IssuerDTO issuerDTO){ + this.issuerDTO = issuerDTO; + } @Override public HttpEntity> constructGetTokenRequest(Map params) { HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); - - String clientAssertion = joseUtil.getJWT(clientId, keyStorePath, fileName, alias, cyptoPassword, audience); - MultiValueMap map= new LinkedMultiValueMap<>(); - map.add("code", params.get("code")); - map.add("client_id", clientId); - map.add("grant_type", params.get("grant_type")); - map.add("redirect_uri", params.get("redirect_uri")); - map.add("client_assertion", clientAssertion.replace("[","").replace("]","")); - map.add("client_assertion_type", clientAssertionType); - map.add("code_verifier", params.get("code_verifier")); + try { + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + String clientAssertion = joseUtil.getJWT(issuerDTO.getClient_id(), keyStorePath, fileName, issuerDTO.getClient_alias(), cyptoPassword, issuerDTO.getCredential_audience()); + + map.add("code", params.get("code")); + map.add("client_id", issuerDTO.getClient_id()); + map.add("grant_type", params.get("grant_type")); + map.add("redirect_uri", params.get("redirect_uri")); + map.add("client_assertion", clientAssertion.replace("[","").replace("]","")); + map.add("client_assertion_type", clientAssertionType); + map.add("code_verifier", params.get("code_verifier")); + } catch (Exception e){ + logger.error("Exception Occurred while Loading the Issuers for Get Token Endpoint"); + } + return new HttpEntity<>(map, headers); } @Override public String getTokenEndpoint(){ - return tokenEndpoint; + return issuerDTO.getToken_endpoint(); } } diff --git a/src/main/resources/mimoto-issuers-config.json b/src/main/resources/mimoto-issuers-config.json index cc367557c..177749e55 100644 --- a/src/main/resources/mimoto-issuers-config.json +++ b/src/main/resources/mimoto-issuers-config.json @@ -112,6 +112,7 @@ ], "protocol": "OpenId4VCI", "client_id": "7-*****************IWRDAg1x-M", + "client_alias": "mpartner-default-mimotooidc", "scopes_supported": [ "mosip_identity_vc_ldp" ], @@ -121,8 +122,12 @@ ".well-known": null, "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", "authorization_endpoint": "https://esignet.dev1.mosip.net/authorize", - "token_endpoint": "https://api.dev1.mosip.net/residentmobileapp/get-token", + "token_endpoint": "https://api.dev1.mosip.net/residentmobileapp/get-token/ESignet", "credential_endpoint": "https://api-internal.dev1.mosip.net/v1/esignet/vci/credential", + "credential_type": [ + "VerifiableCredential", + "MOSIPVerifiableCredential" + ], "credential_audience": "https://esignet.dev1.mosip.net/v1/esignet" }, { @@ -139,6 +144,7 @@ ], "protocol": "OpenId4VCI", "client_id": "${mimoto.oidc.partner.clientid}", + "client_alias": "esignet-sunbird-partner", "scopes_supported": ["sunbird_rc_insurance_vc_ldp"], "additional_headers": { "Accept": "application/json" }, ".well-known": null, @@ -146,6 +152,10 @@ "authorization_endpoint": "https://${mosip.esignet.mock.host}/authorize", "token_endpoint": "https://${mosip.api.public.host}/residentmobileapp/get-token/Sunbird", "credential_endpoint": "https://${mosip.esignet.mock.host}/v1/esignet/vci/credential", + "credential_type": [ + "VerifiableCredential", + "InsuranceCredential" + ], "credential_audience": "https://${mosip.esignet.mock.host}/v1/esignet" } ] From 4c36db5301c0099339a52244ccf7432cdf667ef9 Mon Sep 17 00:00:00 2001 From: Vijay <94220135+vijay151096@users.noreply.github.com> Date: Tue, 16 Jan 2024 14:56:21 +0530 Subject: [PATCH 115/860] [INJI-606] : modify the get token implementation for scalability Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- .../mimoto/controller/IdpController.java | 8 ++- .../io/mosip/mimoto/service/IdpService.java | 5 +- .../mimoto/service/impl/IdpServiceImpl.java | 10 +-- .../service/impl/IdpSunbirdServiceImpl.java | 70 ------------------- 4 files changed, 10 insertions(+), 83 deletions(-) delete mode 100644 src/main/java/io/mosip/mimoto/service/impl/IdpSunbirdServiceImpl.java diff --git a/src/main/java/io/mosip/mimoto/controller/IdpController.java b/src/main/java/io/mosip/mimoto/controller/IdpController.java index 9dfc83187..12c94f141 100644 --- a/src/main/java/io/mosip/mimoto/controller/IdpController.java +++ b/src/main/java/io/mosip/mimoto/controller/IdpController.java @@ -43,6 +43,9 @@ public class IdpController { @Autowired IssuersService issuersService; + @Autowired + IdpService idpService; + @Autowired RequestValidator requestValidator; @PostMapping("/binding-otp") @@ -106,9 +109,8 @@ public ResponseEntity getToken(@RequestParam Map params, @PathVa RestTemplate restTemplate = new RestTemplate(); try { IssuerDTO issuerDTO = issuersService.getIssuerConfig(issuer); - IdpService idpService = new IdpServiceImpl(issuerDTO); - HttpEntity> request = idpService.constructGetTokenRequest(params); - TokenResponseDTO response = restTemplate.postForObject(idpService.getTokenEndpoint(), request, TokenResponseDTO.class); + HttpEntity> request = idpService.constructGetTokenRequest(params, issuerDTO); + TokenResponseDTO response = restTemplate.postForObject(idpService.getTokenEndpoint(issuerDTO), request, TokenResponseDTO.class); return ResponseEntity.status(HttpStatus.OK).body(response); } catch (Exception ex){ logger.error("Exception Occured while invoking the get-token endpoint", ex); diff --git a/src/main/java/io/mosip/mimoto/service/IdpService.java b/src/main/java/io/mosip/mimoto/service/IdpService.java index ddc6a0ff9..b0de7c906 100644 --- a/src/main/java/io/mosip/mimoto/service/IdpService.java +++ b/src/main/java/io/mosip/mimoto/service/IdpService.java @@ -1,12 +1,13 @@ package io.mosip.mimoto.service; +import io.mosip.mimoto.dto.IssuerDTO; import org.springframework.http.HttpEntity; import org.springframework.util.MultiValueMap; import java.util.Map; public interface IdpService { - HttpEntity> constructGetTokenRequest(Map params); + HttpEntity> constructGetTokenRequest(Map params, IssuerDTO issuerDTO); - String getTokenEndpoint(); + String getTokenEndpoint(IssuerDTO issuerDTO); } diff --git a/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java index c6a9978e9..9d1a06910 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java @@ -18,7 +18,6 @@ @Service public class IdpServiceImpl implements IdpService { - public IssuerDTO issuerDTO; @Value("${mosip.oidc.client.assertion.type}") String clientAssertionType; @@ -37,13 +36,8 @@ public class IdpServiceImpl implements IdpService { private final Logger logger = LoggerUtil.getLogger(IdpServiceImpl.class); - - public IdpServiceImpl(IssuerDTO issuerDTO){ - this.issuerDTO = issuerDTO; - } - @Override - public HttpEntity> constructGetTokenRequest(Map params) { + public HttpEntity> constructGetTokenRequest(Map params, IssuerDTO issuerDTO) { HttpHeaders headers = new HttpHeaders(); MultiValueMap map= new LinkedMultiValueMap<>(); try { @@ -66,7 +60,7 @@ public HttpEntity> constructGetTokenRequest(Map> constructGetTokenRequest(Map params) { - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); - - String clientAssertion = joseUtil.getJWT(clientId, keyStorePath, fileName, alias, cyptoPassword, audience); - - MultiValueMap map= new LinkedMultiValueMap<>(); - map.add("code", params.get("code")); - map.add("client_id", clientId); - map.add("grant_type", params.get("grant_type")); - map.add("redirect_uri", params.get("redirect_uri")); - map.add("client_assertion", clientAssertion.replace("[","").replace("]","")); - map.add("client_assertion_type", clientAssertionType); - map.add("code_verifier", params.get("code_verifier")); - - return new HttpEntity<>(map, headers); - } - @Override - public String getTokenEndpoint(){ - return tokenEndpoint; - } - - -} From 08abc688017461d291c93d79242f823d7b708faa Mon Sep 17 00:00:00 2001 From: Vijay <94220135+vijay151096@users.noreply.github.com> Date: Tue, 16 Jan 2024 15:18:21 +0530 Subject: [PATCH 116/860] [INJI-606] : added loggers for debugging Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- src/main/java/io/mosip/mimoto/controller/IdpController.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/io/mosip/mimoto/controller/IdpController.java b/src/main/java/io/mosip/mimoto/controller/IdpController.java index 12c94f141..b8ade5a47 100644 --- a/src/main/java/io/mosip/mimoto/controller/IdpController.java +++ b/src/main/java/io/mosip/mimoto/controller/IdpController.java @@ -109,6 +109,7 @@ public ResponseEntity getToken(@RequestParam Map params, @PathVa RestTemplate restTemplate = new RestTemplate(); try { IssuerDTO issuerDTO = issuersService.getIssuerConfig(issuer); + logger.info("Issuer DTO is > " + issuerDTO); HttpEntity> request = idpService.constructGetTokenRequest(params, issuerDTO); TokenResponseDTO response = restTemplate.postForObject(idpService.getTokenEndpoint(issuerDTO), request, TokenResponseDTO.class); return ResponseEntity.status(HttpStatus.OK).body(response); From 426ebfb7884905c4c95460bb6d08f9b21e1b4d09 Mon Sep 17 00:00:00 2001 From: Vijay <94220135+vijay151096@users.noreply.github.com> Date: Tue, 16 Jan 2024 15:29:14 +0530 Subject: [PATCH 117/860] [INJI-606] : added loggers for debugging Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- src/main/java/io/mosip/mimoto/dto/IssuerDTO.java | 2 ++ src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java index 02a026550..720ad174b 100644 --- a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java @@ -35,6 +35,8 @@ public class IssuerDTO { @JsonInclude(NON_NULL) String token_endpoint; @JsonInclude(NON_NULL) + String proxy_token_endpoint; + @JsonInclude(NON_NULL) String credential_endpoint; @JsonInclude(NON_NULL) List credential_type; diff --git a/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java index 9d1a06910..fe0e48bb3 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java @@ -61,6 +61,6 @@ public HttpEntity> constructGetTokenRequest(Map Date: Tue, 16 Jan 2024 15:51:04 +0530 Subject: [PATCH 118/860] [INJI-606] : update authorization audience Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- src/main/java/io/mosip/mimoto/dto/IssuerDTO.java | 2 ++ src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java | 2 +- src/main/resources/mimoto-issuers-config.json | 2 ++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java index 720ad174b..58a14d4cd 100644 --- a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java @@ -33,6 +33,8 @@ public class IssuerDTO { @JsonInclude(NON_NULL) String authorization_endpoint; @JsonInclude(NON_NULL) + String authorization_audience; + @JsonInclude(NON_NULL) String token_endpoint; @JsonInclude(NON_NULL) String proxy_token_endpoint; diff --git a/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java index fe0e48bb3..4f1d47f34 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java @@ -42,7 +42,7 @@ public HttpEntity> constructGetTokenRequest(Map map= new LinkedMultiValueMap<>(); try { headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); - String clientAssertion = joseUtil.getJWT(issuerDTO.getClient_id(), keyStorePath, fileName, issuerDTO.getClient_alias(), cyptoPassword, issuerDTO.getCredential_audience()); + String clientAssertion = joseUtil.getJWT(issuerDTO.getClient_id(), keyStorePath, fileName, issuerDTO.getClient_alias(), cyptoPassword, issuerDTO.getAuthorization_audience()); map.add("code", params.get("code")); map.add("client_id", issuerDTO.getClient_id()); diff --git a/src/main/resources/mimoto-issuers-config.json b/src/main/resources/mimoto-issuers-config.json index 177749e55..6b70e7c93 100644 --- a/src/main/resources/mimoto-issuers-config.json +++ b/src/main/resources/mimoto-issuers-config.json @@ -122,6 +122,7 @@ ".well-known": null, "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", "authorization_endpoint": "https://esignet.dev1.mosip.net/authorize", + "authorization_audience": "https://${mosip.esignet.host}/v1/esignet/oauth/v2/token", "token_endpoint": "https://api.dev1.mosip.net/residentmobileapp/get-token/ESignet", "credential_endpoint": "https://api-internal.dev1.mosip.net/v1/esignet/vci/credential", "credential_type": [ @@ -150,6 +151,7 @@ ".well-known": null, "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", "authorization_endpoint": "https://${mosip.esignet.mock.host}/authorize", + "authorization_audience": "https://${mosip.esignet.mock.host}/v1/esignet/oauth/v2/token", "token_endpoint": "https://${mosip.api.public.host}/residentmobileapp/get-token/Sunbird", "credential_endpoint": "https://${mosip.esignet.mock.host}/v1/esignet/vci/credential", "credential_type": [ From bd7104d5c5f238373eef2af4fae160406b1750f5 Mon Sep 17 00:00:00 2001 From: Vijay <94220135+vijay151096@users.noreply.github.com> Date: Thu, 18 Jan 2024 13:09:42 +0530 Subject: [PATCH 119/860] [INJI-606]: validation for mimoto-issuers-config.json at the startup Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- .../mosip/mimoto/config/OpenIdIssuerList.java | 61 +++++++++++++++++++ .../java/io/mosip/mimoto/dto/DisplayDTO.java | 9 ++- .../java/io/mosip/mimoto/dto/IssuerDTO.java | 23 ++++++- .../java/io/mosip/mimoto/dto/IssuersDTO.java | 5 +- .../java/io/mosip/mimoto/dto/LogoDTO.java | 4 ++ .../mosip/mimoto/service/IssuersService.java | 2 + .../service/impl/IssuersServiceImpl.java | 14 +++++ .../resources/application-local.properties | 21 ++++--- src/main/resources/mimoto-issuers-config.json | 4 ++ 9 files changed, 130 insertions(+), 13 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/config/OpenIdIssuerList.java diff --git a/src/main/java/io/mosip/mimoto/config/OpenIdIssuerList.java b/src/main/java/io/mosip/mimoto/config/OpenIdIssuerList.java new file mode 100644 index 000000000..c37c2e097 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/config/OpenIdIssuerList.java @@ -0,0 +1,61 @@ +package io.mosip.mimoto.config; +import io.mosip.mimoto.dto.IssuersDTO; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.service.IssuersService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.stereotype.Component; +import org.springframework.validation.BeanPropertyBindingResult; +import org.springframework.validation.Errors; +import org.springframework.validation.Validator; + +import java.io.IOException; +import java.util.HashSet; +import java.util.Set; +import java.util.concurrent.atomic.AtomicReference; + +@Component +public class OpenIdIssuerList implements ApplicationRunner { + @Autowired + IssuersService issuersService; + + @Autowired + private Validator validator; + + private final String VALIDATION_ERROR_MSG = "\n\nValidation failed in Mimoto-issuers-config.json:"; + + @Override + public void run(ApplicationArguments args) throws ApiNotAccessibleException, IOException { + IssuersDTO issuerDTOList = issuersService.getAllIssuersWithAllFields(); + + AtomicReference errors = new AtomicReference<>(); + AtomicReference fieldErrors = new AtomicReference<>(""); + AtomicReference> credentialIssuers = new AtomicReference<>(new HashSet<>()); + + issuerDTOList.getIssuers().forEach(issuerDTO -> { + if(!issuerDTO.getProtocol().equals("OTP")){ + errors.set(new BeanPropertyBindingResult(issuerDTO, "issuerDTO")); + validator.validate(issuerDTO, errors.get()); + String credentialIssuer = issuerDTO.getCredential_issuer(); + String[] tokenEndpointArray = issuerDTO.getToken_endpoint().split("/"); + Set currentIssuers = credentialIssuers.get(); + if(!currentIssuers.add(credentialIssuer)){ + throw new RuntimeException(VALIDATION_ERROR_MSG + "duplicate value found " + credentialIssuer ); + } + if(!tokenEndpointArray[tokenEndpointArray.length -1].equals(credentialIssuer)){ + throw new RuntimeException(VALIDATION_ERROR_MSG + "TokenEndpoint does not match with the credential issuer " + credentialIssuer ); + } + credentialIssuers.set(currentIssuers); + } + }); + + + if (errors.get().hasErrors()) { + errors.get().getFieldErrors().forEach(error -> { + fieldErrors.set(fieldErrors.get() + error.getField() + " " + error.getDefaultMessage() + "\n"); + }); + throw new RuntimeException(VALIDATION_ERROR_MSG + fieldErrors.get() ); + } + } +} diff --git a/src/main/java/io/mosip/mimoto/dto/DisplayDTO.java b/src/main/java/io/mosip/mimoto/dto/DisplayDTO.java index 3aed6abfa..515893e95 100644 --- a/src/main/java/io/mosip/mimoto/dto/DisplayDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/DisplayDTO.java @@ -3,17 +3,24 @@ import com.google.gson.annotations.Expose; import lombok.Data; -@Data +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +@Data public class DisplayDTO { @Expose + @NotBlank String name; @Expose + @Valid LogoDTO logo; @Expose + @NotBlank String title; @Expose + @NotBlank String description; @Expose + @NotBlank String language; } diff --git a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java index 58a14d4cd..8a398635c 100644 --- a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java @@ -5,7 +5,9 @@ import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; import lombok.Data; - +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; import java.util.List; import java.util.Map; @@ -15,36 +17,51 @@ @Data public class IssuerDTO { @Expose + @NotBlank String credential_issuer; @Expose - List display; - @Expose + @NotBlank String protocol; @Expose + @Valid + @NotEmpty + List display; + @Expose + @NotBlank String client_id; @SerializedName(".well-known") @JsonProperty(".well-known") @Expose String wellKnownEndpoint; @JsonInclude(NON_NULL) + @NotBlank String redirect_uri; @JsonInclude(NON_NULL) + @NotEmpty List scopes_supported; @JsonInclude(NON_NULL) + @NotBlank String authorization_endpoint; @JsonInclude(NON_NULL) + @NotBlank String authorization_audience; @JsonInclude(NON_NULL) + @NotBlank String token_endpoint; @JsonInclude(NON_NULL) + @NotBlank String proxy_token_endpoint; @JsonInclude(NON_NULL) + @NotBlank String credential_endpoint; @JsonInclude(NON_NULL) + @NotEmpty List credential_type; @JsonInclude(NON_NULL) + @NotBlank String credential_audience; @JsonInclude(NON_NULL) + @NotBlank String client_alias; @JsonInclude(NON_NULL) Map additional_headers; diff --git a/src/main/java/io/mosip/mimoto/dto/IssuersDTO.java b/src/main/java/io/mosip/mimoto/dto/IssuersDTO.java index b526cd43e..1d24101cd 100644 --- a/src/main/java/io/mosip/mimoto/dto/IssuersDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/IssuersDTO.java @@ -3,11 +3,14 @@ import com.google.gson.annotations.Expose; import lombok.Data; +import javax.validation.Valid; import java.util.List; @Data public class IssuersDTO { + @Expose + @Valid List issuers; -} \ No newline at end of file +} diff --git a/src/main/java/io/mosip/mimoto/dto/LogoDTO.java b/src/main/java/io/mosip/mimoto/dto/LogoDTO.java index a28e4836a..987f267d9 100644 --- a/src/main/java/io/mosip/mimoto/dto/LogoDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/LogoDTO.java @@ -4,10 +4,14 @@ import com.google.gson.annotations.Expose; import lombok.Data; +import javax.validation.constraints.NotBlank; + @Data public class LogoDTO { @Expose + @NotBlank String url; @Expose + @NotBlank String alt_text; } diff --git a/src/main/java/io/mosip/mimoto/service/IssuersService.java b/src/main/java/io/mosip/mimoto/service/IssuersService.java index 3d3f63d26..7bd0fd0dc 100644 --- a/src/main/java/io/mosip/mimoto/service/IssuersService.java +++ b/src/main/java/io/mosip/mimoto/service/IssuersService.java @@ -9,5 +9,7 @@ public interface IssuersService { IssuersDTO getAllIssuers() throws ApiNotAccessibleException, IOException; + IssuersDTO getAllIssuersWithAllFields() throws ApiNotAccessibleException, IOException; + IssuerDTO getIssuerConfig(String issuerId) throws ApiNotAccessibleException, IOException; } diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index 7f74354eb..deaedfdad 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -31,6 +31,20 @@ public IssuersDTO getAllIssuers() throws ApiNotAccessibleException, IOException return issuers; } + @Override + public IssuersDTO getAllIssuersWithAllFields() throws ApiNotAccessibleException, IOException { + IssuersDTO issuers; + String issuersConfigJsonValue = utilities.getIssuersConfigJsonValue(); + if (issuersConfigJsonValue == null) { + throw new ApiNotAccessibleException(); + } + Gson gsonWithIssuerDataOnlyFilter = new GsonBuilder().create(); + issuers = gsonWithIssuerDataOnlyFilter.fromJson(issuersConfigJsonValue, IssuersDTO.class); + + return issuers; + } + + @Override public IssuerDTO getIssuerConfig(String issuerId) throws ApiNotAccessibleException, IOException { diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 169fd8f6d..39b6514f6 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -201,15 +201,20 @@ wallet.binding.partner.api.key=Aci9jg28B8mO_LDfDXo3ZTp5_HKgEMun2tYyHCa1e8k # OpenID mosip.openid.issuers=mimoto-issuers-config.json #configurations related to openid4vc -mosip.oidc.esignet.token.endpoint=https://api-internal.dev1.mosip.net/v1/esignet/oauth/token -mosip.oidc.esignet.aud=https://esignet.dev1.mosip.net/v1/esignet/oauth/token -mosip.oidc.client.id=3FpvldoSV2XD8_X3D4BaVWgpDDRU8Yrmudugk2uazHw mosip.oidc.client.assertion.type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer mosip.oidc.p12.filename=oidckeystore.p12 mosip.oidc.p12.password=5YBx6QT2wbY8Ls6w mosip.oidc.p12.path=certs/ -mosip.oidc.p12.alias=mpartner-default-mimotooidc -mosip.oidc.sunbird.p12.alias=esignet-sunbird-partner -mosip.oidc.sunbird.esignet.token.endpoint=https://api-internal.dev1.mosip.net/v1/esignet/oauth/token -mosip.oidc.sunbird.esignet.aud=https://esignet-mock.dev1.mosip.net/v1/esignet/oauth/token -mosip.oidc.sunbird.client.id=3FpvldoSV2XD8_X3D4BaVWgpDDRU8Yrmudugk2uazHw + + + + + + + + + + + + + diff --git a/src/main/resources/mimoto-issuers-config.json b/src/main/resources/mimoto-issuers-config.json index 6b70e7c93..7a326fdea 100644 --- a/src/main/resources/mimoto-issuers-config.json +++ b/src/main/resources/mimoto-issuers-config.json @@ -123,6 +123,7 @@ "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", "authorization_endpoint": "https://esignet.dev1.mosip.net/authorize", "authorization_audience": "https://${mosip.esignet.host}/v1/esignet/oauth/v2/token", + "proxy_token_endpoint": "https://esignet-mock.dev1.mosip.net/v1/esignet/oauth/token", "token_endpoint": "https://api.dev1.mosip.net/residentmobileapp/get-token/ESignet", "credential_endpoint": "https://api-internal.dev1.mosip.net/v1/esignet/vci/credential", "credential_type": [ @@ -140,6 +141,8 @@ "url": "https://sunbird.org/images/sunbird-logo-new.png", "alt_text": "a square logo of a Sunbird" }, + "title": "Download Sunbird Credential", + "description": "Enter your Policy Number to download your card.", "language": "en" } ], @@ -152,6 +155,7 @@ "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", "authorization_endpoint": "https://${mosip.esignet.mock.host}/authorize", "authorization_audience": "https://${mosip.esignet.mock.host}/v1/esignet/oauth/v2/token", + "proxy_token_endpoint": "https://esignet-mock.dev1.mosip.net/v1/esignet/oauth/token", "token_endpoint": "https://${mosip.api.public.host}/residentmobileapp/get-token/Sunbird", "credential_endpoint": "https://${mosip.esignet.mock.host}/v1/esignet/vci/credential", "credential_type": [ From c2c4903eb22c9a6e339e69725e808896560734e9 Mon Sep 17 00:00:00 2001 From: Vijay <94220135+vijay151096@users.noreply.github.com> Date: Thu, 18 Jan 2024 13:22:35 +0530 Subject: [PATCH 120/860] [INJI-606]: handling NPE Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- .../mosip/mimoto/config/OpenIdIssuerList.java | 34 ++++++++++--------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/config/OpenIdIssuerList.java b/src/main/java/io/mosip/mimoto/config/OpenIdIssuerList.java index c37c2e097..10f53865e 100644 --- a/src/main/java/io/mosip/mimoto/config/OpenIdIssuerList.java +++ b/src/main/java/io/mosip/mimoto/config/OpenIdIssuerList.java @@ -33,25 +33,27 @@ public void run(ApplicationArguments args) throws ApiNotAccessibleException, IOE AtomicReference fieldErrors = new AtomicReference<>(""); AtomicReference> credentialIssuers = new AtomicReference<>(new HashSet<>()); - issuerDTOList.getIssuers().forEach(issuerDTO -> { - if(!issuerDTO.getProtocol().equals("OTP")){ - errors.set(new BeanPropertyBindingResult(issuerDTO, "issuerDTO")); - validator.validate(issuerDTO, errors.get()); - String credentialIssuer = issuerDTO.getCredential_issuer(); - String[] tokenEndpointArray = issuerDTO.getToken_endpoint().split("/"); - Set currentIssuers = credentialIssuers.get(); - if(!currentIssuers.add(credentialIssuer)){ - throw new RuntimeException(VALIDATION_ERROR_MSG + "duplicate value found " + credentialIssuer ); + if(issuerDTOList != null){ + issuerDTOList.getIssuers().forEach(issuerDTO -> { + if (!issuerDTO.getProtocol().equals("OTP")) { + errors.set(new BeanPropertyBindingResult(issuerDTO, "issuerDTO")); + validator.validate(issuerDTO, errors.get()); + String credentialIssuer = issuerDTO.getCredential_issuer(); + String[] tokenEndpointArray = issuerDTO.getToken_endpoint().split("/"); + Set currentIssuers = credentialIssuers.get(); + if (!currentIssuers.add(credentialIssuer)) { + throw new RuntimeException(VALIDATION_ERROR_MSG + "duplicate value found " + credentialIssuer); + } + if (!tokenEndpointArray[tokenEndpointArray.length - 1].equals(credentialIssuer)) { + throw new RuntimeException(VALIDATION_ERROR_MSG + "TokenEndpoint does not match with the credential issuer " + credentialIssuer); + } + credentialIssuers.set(currentIssuers); } - if(!tokenEndpointArray[tokenEndpointArray.length -1].equals(credentialIssuer)){ - throw new RuntimeException(VALIDATION_ERROR_MSG + "TokenEndpoint does not match with the credential issuer " + credentialIssuer ); - } - credentialIssuers.set(currentIssuers); - } - }); + }); + } - if (errors.get().hasErrors()) { + if (errors.get() != null && errors.get().hasErrors()) { errors.get().getFieldErrors().forEach(error -> { fieldErrors.set(fieldErrors.get() + error.getField() + " " + error.getDefaultMessage() + "\n"); }); From beda47c9791f279f9fde47cad0bfc99f2ed353cb Mon Sep 17 00:00:00 2001 From: Vijay <94220135+vijay151096@users.noreply.github.com> Date: Thu, 18 Jan 2024 13:38:32 +0530 Subject: [PATCH 121/860] [INJI-606]: add loggers and renamed the validation file Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- ...rList.java => IssuersValidationConfig.java} | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) rename src/main/java/io/mosip/mimoto/config/{OpenIdIssuerList.java => IssuersValidationConfig.java} (76%) diff --git a/src/main/java/io/mosip/mimoto/config/OpenIdIssuerList.java b/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java similarity index 76% rename from src/main/java/io/mosip/mimoto/config/OpenIdIssuerList.java rename to src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java index 10f53865e..01b76cd72 100644 --- a/src/main/java/io/mosip/mimoto/config/OpenIdIssuerList.java +++ b/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java @@ -1,7 +1,9 @@ package io.mosip.mimoto.config; +import io.mosip.kernel.core.logger.spi.Logger; import io.mosip.mimoto.dto.IssuersDTO; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.service.IssuersService; +import io.mosip.mimoto.util.LoggerUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; @@ -16,7 +18,7 @@ import java.util.concurrent.atomic.AtomicReference; @Component -public class OpenIdIssuerList implements ApplicationRunner { +public class IssuersValidationConfig implements ApplicationRunner { @Autowired IssuersService issuersService; @@ -25,8 +27,11 @@ public class OpenIdIssuerList implements ApplicationRunner { private final String VALIDATION_ERROR_MSG = "\n\nValidation failed in Mimoto-issuers-config.json:"; + private final Logger logger = LoggerUtil.getLogger(IssuersValidationConfig.class); + @Override public void run(ApplicationArguments args) throws ApiNotAccessibleException, IOException { + logger.info("Validation for mimoto-issuers-config.json STARTED"); IssuersDTO issuerDTOList = issuersService.getAllIssuersWithAllFields(); AtomicReference errors = new AtomicReference<>(); @@ -42,10 +47,12 @@ public void run(ApplicationArguments args) throws ApiNotAccessibleException, IOE String[] tokenEndpointArray = issuerDTO.getToken_endpoint().split("/"); Set currentIssuers = credentialIssuers.get(); if (!currentIssuers.add(credentialIssuer)) { - throw new RuntimeException(VALIDATION_ERROR_MSG + "duplicate value found " + credentialIssuer); + logger.error(VALIDATION_ERROR_MSG + "duplicate value found " + credentialIssuer); + throw new RuntimeException(VALIDATION_ERROR_MSG); } if (!tokenEndpointArray[tokenEndpointArray.length - 1].equals(credentialIssuer)) { - throw new RuntimeException(VALIDATION_ERROR_MSG + "TokenEndpoint does not match with the credential issuer " + credentialIssuer); + logger.error(VALIDATION_ERROR_MSG + "TokenEndpoint does not match with the credential issuer " + credentialIssuer); + throw new RuntimeException(VALIDATION_ERROR_MSG); } credentialIssuers.set(currentIssuers); } @@ -57,7 +64,10 @@ public void run(ApplicationArguments args) throws ApiNotAccessibleException, IOE errors.get().getFieldErrors().forEach(error -> { fieldErrors.set(fieldErrors.get() + error.getField() + " " + error.getDefaultMessage() + "\n"); }); - throw new RuntimeException(VALIDATION_ERROR_MSG + fieldErrors.get() ); + logger.error(VALIDATION_ERROR_MSG + fieldErrors.get()); + throw new RuntimeException(VALIDATION_ERROR_MSG); } + + logger.info("Validation for mimoto-issuers-config.json COMPLETED"); } } From 7dd11c5bc9ed96f07934e3951e7d6994af43dbb8 Mon Sep 17 00:00:00 2001 From: Vijay <94220135+vijay151096@users.noreply.github.com> Date: Fri, 19 Jan 2024 11:39:56 +0530 Subject: [PATCH 122/860] [INJI-606]: adding test case for issuer validation Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- .../mimoto/service/IssuersServiceTest.java | 30 ++++++++++++++----- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java index 85a6c9ff0..aad42b075 100644 --- a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java @@ -18,10 +18,7 @@ import org.springframework.boot.test.context.SpringBootTest; import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; +import java.util.*; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; @@ -36,7 +33,7 @@ public class IssuersServiceTest { @Mock Utilities utilities; - List issuerConfigRelatedFields = List.of("additional_headers", "authorization_endpoint", "token_endpoint", "credential_endpoint", "credential_audience", "redirect_uri"); + List issuerConfigRelatedFields = List.of("additional_headers", "authorization_endpoint","authorization_audience", "token_endpoint", "proxy_token_endpoint", "credential_endpoint", "credential_audience", "redirect_uri"); static IssuerDTO getIssuerDTO(String issuerName, List nullFields) { @@ -53,14 +50,22 @@ static IssuerDTO getIssuerDTO(String issuerName, List nullFields) { issuer.setClient_id("123"); if (issuerName.equals("Issuer1")) issuer.setWellKnownEndpoint("/.well-known"); else { + if (!nullFields.contains("redirect_uri")) + issuer.setRedirect_uri("/redirection"); + if (!nullFields.contains("authorization_audience")) + issuer.setAuthorization_audience("/authorization_audience"); if (!nullFields.contains("redirect_uri")) issuer.setRedirect_uri("/redirection"); if (!nullFields.contains("authorization_endpoint")) issuer.setAuthorization_endpoint("/authorization_endpoint"); if (!nullFields.contains("token_endpoint")) - issuer.setAuthorization_endpoint("/token_endpoint"); + issuer.setToken_endpoint("/token_endpoint"); + if (!nullFields.contains("proxy_token_endpoint")) + issuer.setProxy_token_endpoint("/proxy_token_endpoint"); if (!nullFields.contains("credential_endpoint")) - issuer.setAuthorization_endpoint("/credential_endpoint"); + issuer.setCredential_endpoint("/credential_endpoint"); + if (!nullFields.contains("credential_audience")) + issuer.setCredential_audience("/credential_audience"); if (!nullFields.contains("additional_headers")) issuer.setAdditional_headers(Map.of("Content-Type", "application/json")); } @@ -102,6 +107,17 @@ public void shouldReturnIssuerDataAndConfigForTheIssuerIdIfExist() throws ApiNot assertEquals(expectedIssuer, issuer); } + @Test + public void shouldReturnIssuerDataAndConfigForAllIssuer() throws ApiNotAccessibleException, IOException { + IssuersDTO expectedIssuers = new IssuersDTO(); + List issuers = new ArrayList<>(List.of(getIssuerDTO("Issuer1", new ArrayList<>()), getIssuerDTO("Issuer2", new ArrayList<>()))); + expectedIssuers.setIssuers(issuers); + + IssuersDTO issuersDTO = issuersService.getAllIssuersWithAllFields(); + + assertEquals(expectedIssuers, issuersDTO); + } + @Test public void shouldReturnNullIfTheIssuerIdNotExists() throws ApiNotAccessibleException, IOException { IssuerDTO issuer = issuersService.getIssuerConfig("Issuer3id"); From 948ae5dc473cb285e714a0c392a375b7a737e619 Mon Sep 17 00:00:00 2001 From: techno-467 Date: Tue, 20 Feb 2024 19:13:05 +0530 Subject: [PATCH 123/860] [DSD-4654] updated helm chart version and install script accodingly Signed-off-by: techno-467 --- partner-onboarder/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/partner-onboarder/install.sh b/partner-onboarder/install.sh index 12ae37e0f..a9ef4bd6a 100755 --- a/partner-onboarder/install.sh +++ b/partner-onboarder/install.sh @@ -21,7 +21,7 @@ if [ "$flag" = "n" ]; then fi NS=mimoto -CHART_VERSION=12.0.1-B4 +CHART_VERSION=12.0.2 echo Create $NS namespace kubectl create ns $NS From 6f87b656582d616696312547a7f5408216fd9454 Mon Sep 17 00:00:00 2001 From: techno-467 Date: Tue, 20 Feb 2024 19:14:07 +0530 Subject: [PATCH 124/860] [DSD-4654] updated helm chart version and install script accodingly Signed-off-by: techno-467 --- helm/mimoto/Chart.yaml | 2 +- helm/mimoto/install.sh | 2 +- helm/mimoto/values.yaml | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/helm/mimoto/Chart.yaml b/helm/mimoto/Chart.yaml index 64eba9ee5..6062a8dcb 100644 --- a/helm/mimoto/Chart.yaml +++ b/helm/mimoto/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 name: mimoto description: A Helm chart for MOSIP mimoto Application type: application -version: 0.10.0 +version: 12.0.2 appVersion: "" dependencies: - name: common diff --git a/helm/mimoto/install.sh b/helm/mimoto/install.sh index fa2f45f16..35eba4287 100755 --- a/helm/mimoto/install.sh +++ b/helm/mimoto/install.sh @@ -7,7 +7,7 @@ if [ $# -ge 1 ] ; then fi NS=mimoto -MIMOTO_CHART_VERSION=0.10.0 +MIMOTO_CHART_VERSION=12.0.2 echo Create $NS namespace kubectl create ns $NS diff --git a/helm/mimoto/values.yaml b/helm/mimoto/values.yaml index e4fa4cfa5..b6e76c9fe 100644 --- a/helm/mimoto/values.yaml +++ b/helm/mimoto/values.yaml @@ -53,8 +53,8 @@ service: image: registry: docker.io - repository: mosipid/mimoto - tag: 0.10.0 + repository: mosipqa/mimoto + tag: develop ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images From 65d114054aacd76c52623d709dc00a3ffd1621ae Mon Sep 17 00:00:00 2001 From: Lalith Kota Date: Thu, 21 Mar 2024 10:25:36 +0530 Subject: [PATCH 125/860] SelfTokenRestTemplate: Added config option to disable (#184) Signed-off-by: Lalith Kota --- .../io/mosip/mimoto/util/RestApiClient.java | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/util/RestApiClient.java b/src/main/java/io/mosip/mimoto/util/RestApiClient.java index 7df0f0d71..87cbc0705 100644 --- a/src/main/java/io/mosip/mimoto/util/RestApiClient.java +++ b/src/main/java/io/mosip/mimoto/util/RestApiClient.java @@ -75,6 +75,9 @@ public class RestApiClient { @Value("${mosip.iam.adapter.appid}") private String appId; + @Value("${mosip.iam.adapter.disable-self-token-rest-template:false}") + private boolean disableSelfTokenRestTemplate; + @Autowired Environment environment; @@ -90,9 +93,13 @@ public class RestApiClient { @SuppressWarnings("unchecked") public T getApi(URI uri, Class responseType) throws Exception { T result = null; + RestTemplate rt = restTemplate; + if (disableSelfTokenRestTemplate) { + rt = plainRestTemplate; + } try { logger.info("RestApiClient::getApi()::entry uri: {}", uri); - result = (T) restTemplate.exchange(uri, HttpMethod.GET, setRequestHeader(null, null), responseType) + result = (T) rt.exchange(uri, HttpMethod.GET, setRequestHeader(null, null), responseType) .getBody(); } catch (Exception e) { logger.error("RestApiClient::getApi()::error uri: {} {} {}", uri, e.getMessage(), e); @@ -111,8 +118,12 @@ public T getApi(URI uri, Class responseType) throws Exception { @SuppressWarnings("unchecked") public T getApi(String url, Class responseType) { T result = null; + RestTemplate rt = restTemplate; + if (disableSelfTokenRestTemplate) { + rt = plainRestTemplate; + } try { - result = (T) restTemplate.getForObject(url, responseType); + result = (T) rt.getForObject(url, responseType); } catch (Exception e) { logger.error("RestApiClient::getApi()::error uri:{} {} {}", url, e.getMessage(), e); } @@ -133,9 +144,13 @@ public T getApi(String url, Class responseType) { @SuppressWarnings("unchecked") public T postApi(String uri, MediaType mediaType, Object requestType, Class responseClass) throws Exception { T result = null; + RestTemplate rt = restTemplate; + if (disableSelfTokenRestTemplate) { + rt = plainRestTemplate; + } try { logger.info("RestApiClient::postApi()::entry uri: {}", uri); - result = (T) restTemplate.postForObject(uri, setRequestHeader(requestType, mediaType), responseClass); + result = (T) rt.postForObject(uri, setRequestHeader(requestType, mediaType), responseClass); } catch (Exception e) { logger.error("RestApiClient::postApi()::error uri: {} {} {}", uri, e.getMessage(), e); } From 015f1de5ae01978bf81d356b970ff68ec159a397 Mon Sep 17 00:00:00 2001 From: Challa Rao <47347156+challabeehyv@users.noreply.github.com> Date: Thu, 28 Mar 2024 13:35:24 +0530 Subject: [PATCH 126/860] [INJIWEB-43] refractored v2 apis to existing controller (#188) * [INJIWEB-43]added inji web apis Signed-off-by: Challarao * [INJIWEB-43]added header for custom file name for pdf download Signed-off-by: Challarao * [INJIWEB-43] fix dto naming to camel case and change route for credential supported API Signed-off-by: Challarao * [INJIWEB-43] changed exception handling for credential types Signed-off-by: Challarao --- pom.xml | 12 +- .../mimoto/controller/IssuersController.java | 93 ++++++++- .../CredentialDefinitionResponseDto.java | 12 ++ .../mimoto/CredentialDisplayResponseDto.java | 10 + .../CredentialIssuerDisplayResponse.java | 9 + .../CredentialIssuerWellKnownResponse.java | 22 ++ .../CredentialSupportedDisplayResponse.java | 38 ++++ .../mimoto/CredentialsSupportedResponse.java | 24 +++ .../IssuerSupportedCredentialsResponse.java | 13 ++ .../dto/mimoto/VCCredentialDefinition.java | 24 +++ .../dto/mimoto/VCCredentialIssueBody.java | 13 ++ .../dto/mimoto/VCCredentialProperties.java | 28 +++ .../dto/mimoto/VCCredentialRequest.java | 27 +++ .../dto/mimoto/VCCredentialRequestProof.java | 20 ++ .../dto/mimoto/VCCredentialResponse.java | 18 ++ .../dto/mimoto/VCCredentialResponseProof.java | 19 ++ .../exception/PlatformErrorMessages.java | 3 +- .../mosip/mimoto/service/IssuersService.java | 15 +- .../service/impl/IssuersServiceImpl.java | 197 +++++++++++++++++- .../java/io/mosip/mimoto/util/JoseUtil.java | 69 +++++- .../io/mosip/mimoto/util/RestApiClient.java | 36 ++++ .../java/io/mosip/mimoto/util/Utilities.java | 26 ++- .../resources/application-local.properties | 2 + .../templates/CredentialTemplate.html | 46 ++++ .../resources/wellKnownIssuer/Insurance.json | 170 +++++++++++++++ .../mimoto/controller/InjiControllerTest.java | 144 ++++++++++++- .../mimoto/service/IssuersServiceTest.java | 110 +++++++++- 27 files changed, 1180 insertions(+), 20 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDefinitionResponseDto.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDisplayResponseDto.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerDisplayResponse.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerWellKnownResponse.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/CredentialSupportedDisplayResponse.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/IssuerSupportedCredentialsResponse.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialDefinition.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialIssueBody.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialProperties.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialRequest.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialRequestProof.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponse.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponseProof.java create mode 100644 src/main/resources/templates/CredentialTemplate.html create mode 100644 src/main/resources/wellKnownIssuer/Insurance.json diff --git a/pom.xml b/pom.xml index 4d98c8aa0..89450fa6a 100644 --- a/pom.xml +++ b/pom.xml @@ -89,8 +89,8 @@ 1.70 3.8.1 3.3.3 - 7.2.0 - 2.0.0 + 8.0.3 + 5.0.3 5.5.13 3.6.1 3.7 @@ -98,8 +98,7 @@ 1.15 2.9.2 1.5.10 - - + 0.9.1 **/constant/**,**/config/**,**/httpfilter/**,**/cache/**,**/dto/**,**/entity/**,**/model/**,**/exception/**,**/repository/**,**/security/**,**/*Config.java,**/*BootApplication.java,**/*VertxApplication.java,**/cbeffutil/**,**/core.http/**,**/util/** @@ -365,6 +364,11 @@ nimbus-jose-jwt 9.25.6 + + io.jsonwebtoken + jjwt + ${jjwt-version} + org.bitbucket.b_c jose4j diff --git a/src/main/java/io/mosip/mimoto/controller/IssuersController.java b/src/main/java/io/mosip/mimoto/controller/IssuersController.java index 7ed1363a0..302448847 100644 --- a/src/main/java/io/mosip/mimoto/controller/IssuersController.java +++ b/src/main/java/io/mosip/mimoto/controller/IssuersController.java @@ -1,27 +1,41 @@ package io.mosip.mimoto.controller; import io.mosip.mimoto.core.http.ResponseWrapper; +import io.mosip.mimoto.dto.DisplayDTO; import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.IssuersDTO; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; +import io.mosip.mimoto.dto.mimoto.CredentialSupportedDisplayResponse; +import io.mosip.mimoto.dto.mimoto.CredentialsSupportedResponse; +import io.mosip.mimoto.dto.mimoto.IssuerSupportedCredentialsResponse; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.service.IssuersService; import io.mosip.mimoto.util.DateUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.InputStreamResource; +import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestHeader; +import java.io.ByteArrayInputStream; import java.io.IOException; import java.util.List; +import java.util.Optional; import static io.mosip.mimoto.exception.PlatformErrorMessages.API_NOT_ACCESSIBLE_EXCEPTION; +import static io.mosip.mimoto.exception.PlatformErrorMessages.INVALID_CREDENTIAL_TYPE_EXCEPTION; import static io.mosip.mimoto.exception.PlatformErrorMessages.INVALID_ISSUER_ID_EXCEPTION; +import static io.mosip.mimoto.exception.PlatformErrorMessages.MIMOTO_PDF_SIGN_EXCEPTION; @RestController @RequestMapping(value = "/issuers") @@ -29,18 +43,20 @@ public class IssuersController { @Autowired IssuersService issuersService; + private static final String defaultLanguageConstant = "en"; + private static final String ID = "mosip.mimoto.issuers"; private final Logger logger = LoggerFactory.getLogger(IssuersController.class); @GetMapping() - public ResponseEntity getAllIssuers() { + public ResponseEntity getAllIssuers(@RequestParam(required = false) String search) { ResponseWrapper responseWrapper = new ResponseWrapper<>(); responseWrapper.setId(ID); responseWrapper.setVersion("v1"); responseWrapper.setResponsetime(DateUtils.getRequestTimeString()); try { - responseWrapper.setResponse(issuersService.getAllIssuers()); + responseWrapper.setResponse(issuersService.getAllIssuers(search)); } catch (ApiNotAccessibleException | IOException e) { logger.error("Exception occurred while fetching issuers ", e); responseWrapper.setErrors(List.of(new ErrorDTO(API_NOT_ACCESSIBLE_EXCEPTION.getCode(), API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); @@ -78,4 +94,73 @@ public ResponseEntity getIssuerConfig(@PathVariable("issuer-id") String return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); } + @GetMapping("/{issuer-id}/credentialTypes") + public ResponseEntity getCredentialTypes(@PathVariable("issuer-id") String issuerId, + @RequestParam(required = false) String search) { + ResponseWrapper responseWrapper = new ResponseWrapper<>(); + responseWrapper.setId(ID); + responseWrapper.setVersion("v1"); + responseWrapper.setResponsetime(DateUtils.getRequestTimeString()); + IssuerSupportedCredentialsResponse credentialTypes; + try { + credentialTypes = issuersService.getCredentialsSupported(issuerId, search); + }catch (ApiNotAccessibleException | IOException exception){ + logger.error("Exception occurred while fetching credential types", exception); + responseWrapper.setErrors(List.of(new ErrorDTO(API_NOT_ACCESSIBLE_EXCEPTION.getCode(), API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); + } + responseWrapper.setResponse(credentialTypes); + + if (credentialTypes.getSupportedCredentials() == null) { + logger.error("invalid issuer id passed - {}", issuerId); + responseWrapper.setErrors(List.of(new ErrorDTO(INVALID_ISSUER_ID_EXCEPTION.getCode(), INVALID_ISSUER_ID_EXCEPTION.getMessage()))); + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(responseWrapper); + } + + return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); + } + + @GetMapping("/{issuer-id}/credentials/{credentialType}/download") + public ResponseEntity generatePdfForVC(@RequestHeader("Bearer") String token, + @PathVariable("issuer-id") String issuerId, + @PathVariable("credentialType") String credentialType) { + + ResponseWrapper responseWrapper = new ResponseWrapper<>(); + responseWrapper.setId(ID); + responseWrapper.setVersion("v1"); + responseWrapper.setResponsetime(DateUtils.getRequestTimeString()); + + try{ + IssuerDTO issuerConfig = issuersService.getIssuerConfig(issuerId); + CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = issuersService.getCredentialWellKnownFromJson(); + Optional credentialsSupportedResponse = credentialIssuerWellKnownResponse.getCredentialsSupported().stream() + .filter(credentialsSupported -> credentialsSupported.getId().equals(credentialType)) + .findFirst(); + if (credentialsSupportedResponse.isEmpty()){ + logger.error("Invalid credential Type passed - {}", credentialType); + responseWrapper.setErrors(List.of(new ErrorDTO(INVALID_CREDENTIAL_TYPE_EXCEPTION.getCode(), INVALID_CREDENTIAL_TYPE_EXCEPTION.getMessage()))); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); + } + ByteArrayInputStream inputStream = issuersService.generatePdfForVerifiableCredentials(token, issuerConfig, credentialsSupportedResponse.get(), credentialIssuerWellKnownResponse.getCredentialEndPoint()); + //PDF file name with issuer display name and credential type display name + String pdfFileName = issuerConfig.getDisplay().stream().filter(displayDTO -> defaultLanguageConstant.equals(displayDTO.getLanguage())).map(DisplayDTO::getName).findFirst().orElse(null) + + "_" + credentialsSupportedResponse.get().getDisplay().stream() + .filter(credentialSupportedDisplayResponse -> defaultLanguageConstant.equals(credentialSupportedDisplayResponse.getLocale())).map(CredentialSupportedDisplayResponse::getName).findFirst().orElse(null); + return ResponseEntity + .ok() + .contentType(MediaType.APPLICATION_PDF) + .header(HttpHeaders.CONTENT_DISPOSITION, String.format("attachment; filename=%s.pdf", pdfFileName)) + .header(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, "Content-Disposition") + .body(new InputStreamResource(inputStream)); + }catch (ApiNotAccessibleException | IOException exception){ + logger.error("Exception occurred while fetching credential types ", exception); + responseWrapper.setErrors(List.of(new ErrorDTO(API_NOT_ACCESSIBLE_EXCEPTION.getCode(), API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); + } catch (Exception exception) { + logger.error("Exception occurred while generating pdf ", exception); + responseWrapper.setErrors(List.of(new ErrorDTO(MIMOTO_PDF_SIGN_EXCEPTION.getCode(), MIMOTO_PDF_SIGN_EXCEPTION.getMessage()))); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(responseWrapper); + } + } + } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDefinitionResponseDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDefinitionResponseDto.java new file mode 100644 index 000000000..ce001b8a7 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDefinitionResponseDto.java @@ -0,0 +1,12 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.Data; + +import java.util.List; +import java.util.Map; + +@Data +public class CredentialDefinitionResponseDto { + private List type; + private Map credentialSubject; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDisplayResponseDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDisplayResponseDto.java new file mode 100644 index 000000000..caa4faa42 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDisplayResponseDto.java @@ -0,0 +1,10 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.Data; + +import java.util.List; + +@Data +public class CredentialDisplayResponseDto { + private List display; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerDisplayResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerDisplayResponse.java new file mode 100644 index 000000000..5a6cf6832 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerDisplayResponse.java @@ -0,0 +1,9 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.Data; + +@Data +public class CredentialIssuerDisplayResponse { + private String name; + private String locale; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerWellKnownResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerWellKnownResponse.java new file mode 100644 index 000000000..5cb868cc5 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerWellKnownResponse.java @@ -0,0 +1,22 @@ +package io.mosip.mimoto.dto.mimoto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.google.gson.annotations.SerializedName; +import lombok.Data; + +import java.util.List; + +@Data +public class CredentialIssuerWellKnownResponse { + @SerializedName("credential_issuer") + @JsonProperty("credential_issuer") + private String credentialIssuer; + + @SerializedName("credential_endpoint") + @JsonProperty("credential_endpoint") + private String credentialEndPoint; + + @SerializedName("credentials_supported") + @JsonProperty("credentials_supported") + private List credentialsSupported; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialSupportedDisplayResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialSupportedDisplayResponse.java new file mode 100644 index 000000000..09ee09d84 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialSupportedDisplayResponse.java @@ -0,0 +1,38 @@ +package io.mosip.mimoto.dto.mimoto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; +import io.mosip.mimoto.dto.LogoDTO; +import lombok.Data; + +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; + +@Data +public class CredentialSupportedDisplayResponse { + + @Expose + @NotBlank + String name; + + @Expose + @Valid + LogoDTO logo; + + @Expose + @NotBlank + String locale; + + @JsonProperty("background_color") + @SerializedName("background_color") + @Expose + @NotBlank + String backgroundColor; + + @JsonProperty("text_color") + @SerializedName("text_color") + @Expose + @NotBlank + String textColor; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java new file mode 100644 index 000000000..42ee4f879 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java @@ -0,0 +1,24 @@ +package io.mosip.mimoto.dto.mimoto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.google.gson.annotations.SerializedName; +import lombok.Data; + +import java.util.List; + +@Data +public class CredentialsSupportedResponse { + private String format; + private String id; + private String scope; + + @SerializedName("proof_types_supported") + @JsonProperty("proof_types_supported") + private List proofTypesSupported; + + @SerializedName("credential_definition") + @JsonProperty("credential_definition") + private CredentialDefinitionResponseDto credentialDefinition; + + private List display; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/IssuerSupportedCredentialsResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/IssuerSupportedCredentialsResponse.java new file mode 100644 index 000000000..1a2ecc86b --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/IssuerSupportedCredentialsResponse.java @@ -0,0 +1,13 @@ +package io.mosip.mimoto.dto.mimoto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class IssuerSupportedCredentialsResponse { + @JsonProperty("authorization_endpoint") + private String authorizationEndPoint; + private List supportedCredentials; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialDefinition.java b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialDefinition.java new file mode 100644 index 000000000..a07a56ab6 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialDefinition.java @@ -0,0 +1,24 @@ +package io.mosip.mimoto.dto.mimoto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Builder; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import java.util.List; +import java.util.Map; + +@Data +@Builder +public class VCCredentialDefinition { + + @JsonProperty("@context") + private List<@NotBlank String> context; + + @NotEmpty + private List<@NotBlank String> type; + + private Map credentialSubject; + +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialIssueBody.java b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialIssueBody.java new file mode 100644 index 000000000..23ffad922 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialIssueBody.java @@ -0,0 +1,13 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.Data; + +@Data +public class VCCredentialIssueBody { + private VCCredentialProperties credential; + private String credentialSchemaId; + private String createdAt; + private String createdBy; + private String updatedAt; + private String updatedBy; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialProperties.java b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialProperties.java new file mode 100644 index 000000000..682767ac4 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialProperties.java @@ -0,0 +1,28 @@ +package io.mosip.mimoto.dto.mimoto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import java.util.List; +import java.util.Map; + +@Data +public class VCCredentialProperties { + private String issuer; + + private String id; + + private String issuanceDate; + + private VCCredentialResponseProof proof; + + private Map credentialSubject; + + @JsonProperty("@context") + private Object context; + + @NotEmpty + private List<@NotBlank String> type; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialRequest.java b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialRequest.java new file mode 100644 index 000000000..671ca1720 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialRequest.java @@ -0,0 +1,27 @@ +package io.mosip.mimoto.dto.mimoto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Builder; +import lombok.Data; + +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + + +@Data +@Builder +public class VCCredentialRequest { + + @NotBlank + private String format; + + @Valid + @NotNull + private VCCredentialRequestProof proof; + + @JsonProperty("credential_definition") + @Valid + @NotNull + private VCCredentialDefinition credentialDefinition; +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialRequestProof.java b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialRequestProof.java new file mode 100644 index 000000000..2c1f1635e --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialRequestProof.java @@ -0,0 +1,20 @@ +package io.mosip.mimoto.dto.mimoto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Builder; +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +@Data +@Builder +public class VCCredentialRequestProof { + + @JsonProperty("proof_type") + @NotBlank + private String proofType; + + private String jwt; + + private String cwt; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponse.java new file mode 100644 index 000000000..5d83fd655 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponse.java @@ -0,0 +1,18 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.Data; + +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +@Data +public class VCCredentialResponse { + + @NotBlank + private String format; + + @Valid + @NotNull + private VCCredentialProperties credential; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponseProof.java b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponseProof.java new file mode 100644 index 000000000..8a48fc00c --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponseProof.java @@ -0,0 +1,19 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +@Data +public class VCCredentialResponseProof { + @NotBlank + private String type; + @NotBlank + private String created; + @NotBlank + private String proofPurpose; + @NotBlank + private String verificationMethod; + @NotBlank + private String jws; +} diff --git a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java index b936e2212..833b4b572 100644 --- a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java +++ b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java @@ -81,7 +81,8 @@ public enum PlatformErrorMessages { MIMOTO_IDP_CONSENT_EXCEPTION(PlatformConstants.PREFIX + "032", "Idp consent exception occured"), MIMOTO_IDP_OTP_EXCEPTION(PlatformConstants.PREFIX + "033", "IDP Otp error occured"), MIMOTO_IDP_GENERIC_EXCEPTION(PlatformConstants.PREFIX + "034", "Could not get response from server"), - INVALID_ISSUER_ID_EXCEPTION(PlatformConstants.PREFIX + "035", "Invalid issuer ID"); + INVALID_ISSUER_ID_EXCEPTION(PlatformConstants.PREFIX + "035", "Invalid issuer ID"), + INVALID_CREDENTIAL_TYPE_EXCEPTION(PlatformConstants.PREFIX + "036", "Invalid Credential Type Id"); /** The error message. */ private final String errorMessage; diff --git a/src/main/java/io/mosip/mimoto/service/IssuersService.java b/src/main/java/io/mosip/mimoto/service/IssuersService.java index 7bd0fd0dc..70b7b08aa 100644 --- a/src/main/java/io/mosip/mimoto/service/IssuersService.java +++ b/src/main/java/io/mosip/mimoto/service/IssuersService.java @@ -2,14 +2,27 @@ import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.IssuersDTO; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; +import io.mosip.mimoto.dto.mimoto.CredentialsSupportedResponse; +import io.mosip.mimoto.dto.mimoto.IssuerSupportedCredentialsResponse; import io.mosip.mimoto.exception.ApiNotAccessibleException; +import java.io.ByteArrayInputStream; import java.io.IOException; public interface IssuersService { - IssuersDTO getAllIssuers() throws ApiNotAccessibleException, IOException; + IssuersDTO getAllIssuers(String search) throws ApiNotAccessibleException, IOException; IssuersDTO getAllIssuersWithAllFields() throws ApiNotAccessibleException, IOException; IssuerDTO getIssuerConfig(String issuerId) throws ApiNotAccessibleException, IOException; + + IssuerSupportedCredentialsResponse getCredentialsSupported(String issuerId, String search) throws ApiNotAccessibleException, IOException; + + CredentialIssuerWellKnownResponse getCredentialWellKnownFromJson() throws IOException, ApiNotAccessibleException; + + ByteArrayInputStream generatePdfForVerifiableCredentials(String accessToken, IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String credentialEndPoint) throws Exception; + + + } diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index deaedfdad..e7dc2bc8d 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -2,24 +2,75 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import com.itextpdf.html2pdf.ConverterProperties; +import com.itextpdf.html2pdf.HtmlConverter; +import com.itextpdf.html2pdf.resolver.font.DefaultFontProvider; +import com.itextpdf.kernel.pdf.PdfWriter; +import io.mosip.kernel.core.logger.spi.Logger; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.IssuersDTO; +import io.mosip.mimoto.dto.mimoto.CredentialDisplayResponseDto; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; +import io.mosip.mimoto.dto.mimoto.CredentialsSupportedResponse; +import io.mosip.mimoto.dto.mimoto.IssuerSupportedCredentialsResponse; +import io.mosip.mimoto.dto.mimoto.VCCredentialDefinition; +import io.mosip.mimoto.dto.mimoto.VCCredentialRequest; +import io.mosip.mimoto.dto.mimoto.VCCredentialRequestProof; +import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.service.IssuersService; +import io.mosip.mimoto.util.JoseUtil; +import io.mosip.mimoto.util.LoggerUtil; +import io.mosip.mimoto.util.RestApiClient; import io.mosip.mimoto.util.Utilities; +import org.apache.commons.lang.StringUtils; +import org.apache.velocity.VelocityContext; +import org.apache.velocity.app.Velocity; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.MediaType; import org.springframework.stereotype.Service; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.io.StringWriter; +import java.security.PublicKey; +import java.text.ParseException; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; import java.util.Optional; +import java.util.Properties; +import java.util.stream.Collectors; @Service public class IssuersServiceImpl implements IssuersService { + private final Logger logger = LoggerUtil.getLogger(IssuersServiceImpl.class); + + private static final String context = "https://www.w3.org/2018/credentials/v1"; + @Autowired private Utilities utilities; + @Autowired + private RestApiClient restApiClient; + + @Autowired + private JoseUtil joseUtil; + + @Value("${mosip.oidc.p12.filename}") + private String fileName; + + @Value("${mosip.oidc.p12.password}") + private String cyptoPassword; + + @Value("${mosip.oidc.p12.path}") + String keyStorePath; + @Override - public IssuersDTO getAllIssuers() throws ApiNotAccessibleException, IOException { + public IssuersDTO getAllIssuers(String search) throws ApiNotAccessibleException, IOException { IssuersDTO issuers; String issuersConfigJsonValue = utilities.getIssuersConfigJsonValue(); if (issuersConfigJsonValue == null) { @@ -28,6 +79,15 @@ public IssuersDTO getAllIssuers() throws ApiNotAccessibleException, IOException Gson gsonWithIssuerDataOnlyFilter = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); issuers = gsonWithIssuerDataOnlyFilter.fromJson(issuersConfigJsonValue, IssuersDTO.class); + // Filter issuers list with search string + if (!StringUtils.isEmpty(search)) { + List filteredIssuers = issuers.getIssuers().stream() + .filter(issuer -> issuer.getDisplay().stream() + .anyMatch(displayDTO -> displayDTO.getName().toLowerCase().contains(search.toLowerCase()))) + .collect(Collectors.toList()); + issuers.setIssuers(filteredIssuers); + return issuers; + } return issuers; } @@ -61,4 +121,139 @@ public IssuerDTO getIssuerConfig(String issuerId) throws ApiNotAccessibleExcepti issuerDTO = issuerConfigResp.get(); return issuerDTO; } + + @Override + public IssuerSupportedCredentialsResponse getCredentialsSupported(String issuerId, String search) throws ApiNotAccessibleException, IOException { + IssuerSupportedCredentialsResponse credentialTypesWithAuthorizationEndpoint = new IssuerSupportedCredentialsResponse(); + + IssuersDTO issuersDto = getAllIssuersWithAllFields(); + + Optional issuerConfigResp = issuersDto.getIssuers().stream() + .filter(issuer -> issuer.getCredential_issuer().equals(issuerId)) + .findFirst(); + if (issuerConfigResp.isPresent()) { + IssuerDTO issuerDto = issuerConfigResp.get(); + + // Get credential supported types from well known endpoint + CredentialIssuerWellKnownResponse response = restApiClient.getApi(issuerDto.getCredential_issuer(), CredentialIssuerWellKnownResponse.class); + if (response == null) { + response = getCredentialWellKnownFromJson(); + } + List issuerCredentialsSupported = response.getCredentialsSupported(); + credentialTypesWithAuthorizationEndpoint.setAuthorizationEndPoint(issuerDto.getAuthorization_endpoint()); + credentialTypesWithAuthorizationEndpoint.setSupportedCredentials(issuerCredentialsSupported); + + // Filter Credential supported types with search string + if (!StringUtils.isEmpty(search)){ + credentialTypesWithAuthorizationEndpoint.setSupportedCredentials(issuerCredentialsSupported + .stream() + .filter(credentialsSupportedResponse -> credentialsSupportedResponse.getDisplay().stream() + .anyMatch(credDisplay -> credDisplay.getName().toLowerCase().contains(search.toLowerCase()))) + .collect(Collectors.toList())); + } + return credentialTypesWithAuthorizationEndpoint; + } + return credentialTypesWithAuthorizationEndpoint; + } + + @Override + public CredentialIssuerWellKnownResponse getCredentialWellKnownFromJson() throws IOException, ApiNotAccessibleException { + String credentialsSupportedResponseJson = utilities.getCredentialsSupportedConfigJsonValue(); + if (credentialsSupportedResponseJson == null){ + throw new ApiNotAccessibleException(); + } + return new Gson().fromJson(credentialsSupportedResponseJson, CredentialIssuerWellKnownResponse.class); + } + + @Override + public ByteArrayInputStream generatePdfForVerifiableCredentials(String accessToken, IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String credentialEndPoint) throws Exception { + LinkedHashMap vcPropertiesFromWellKnown = new LinkedHashMap<>(); + Map credentialSubject = credentialsSupportedResponse.getCredentialDefinition().getCredentialSubject(); + //populating display properties from credential Types json for pdf + credentialSubject.keySet().forEach(VCProperty -> vcPropertiesFromWellKnown.put(VCProperty, credentialSubject.get(VCProperty).getDisplay().get(0).getName())); + String backgroundColor = credentialsSupportedResponse.getDisplay().get(0).getBackgroundColor(); + String textColor = credentialsSupportedResponse.getDisplay().get(0).getTextColor(); + VCCredentialRequest vcCredentialRequest = generateVCCredentialRequest(issuerDTO, credentialsSupportedResponse, accessToken); + logger.debug("VC Credential Request is -> " + vcCredentialRequest); + //Esignet API call for credential issue + VCCredentialResponse vcCredentialResponse = restApiClient.postApi(credentialEndPoint, MediaType.APPLICATION_JSON, + vcCredentialRequest, VCCredentialResponse.class, accessToken); + logger.debug("VC Credential Response is -> " + vcCredentialResponse); + if (vcCredentialResponse == null) throw new RuntimeException("VC Credential Issue API not accessible"); + Map credentialProperties = vcCredentialResponse.getCredential().getCredentialSubject(); + LinkedHashMap displayProperties = new LinkedHashMap<>(); + vcPropertiesFromWellKnown.keySet().forEach(vcProperty -> displayProperties.put(vcPropertiesFromWellKnown.get(vcProperty), credentialProperties.get(vcProperty))); + return getPdfResourceFromVcProperties(displayProperties, textColor, backgroundColor, + credentialsSupportedResponse.getDisplay().get(0).getName(), + issuerDTO.getDisplay().stream().map(d -> d.getLogo().getUrl()).findFirst().orElse("")); + } + + private VCCredentialRequest generateVCCredentialRequest(IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String accessToken) throws ParseException { + //Getting public key from the p12 file + PublicKey publicKeyString = joseUtil.getPublicKeyString(keyStorePath, fileName, issuerDTO.getClient_alias(), cyptoPassword); + //Generating proof from the public key with custom header + String jwt = joseUtil.generateJwt(publicKeyString, keyStorePath, fileName, issuerDTO.getClient_alias(), + cyptoPassword, issuerDTO.getCredential_audience(), issuerDTO.getClient_id(), accessToken); + return VCCredentialRequest.builder() + .format(credentialsSupportedResponse.getFormat()) + .proof(VCCredentialRequestProof.builder() + .proofType(credentialsSupportedResponse.getProofTypesSupported().get(0)) + .jwt(jwt) + .build()) + .credentialDefinition(VCCredentialDefinition.builder() + .type(credentialsSupportedResponse.getCredentialDefinition().getType()) + .context(List.of(context)) + .build()) + .build(); + } + + private ByteArrayInputStream getPdfResourceFromVcProperties(LinkedHashMap displayProperties, String textColor, + String backgroundColor, + String credentialSupportedType, String issuerLogoUrl) throws IOException { + Map data = new HashMap<>(); + LinkedHashMap headerProperties = new LinkedHashMap<>(); + LinkedHashMap rowProperties = new LinkedHashMap<>(); + + //Assigning two properties at the top of pdf and the rest dynamically below them + displayProperties.entrySet().stream() + .forEachOrdered(entry -> { + if (headerProperties.size() < 2) { + headerProperties.put(entry.getKey(), entry.getValue()); + } else { + rowProperties.put(entry.getKey(), entry.getValue()); + } + }); + + int rowPropertiesCount = rowProperties.size(); + data.put("logoUrl", issuerLogoUrl); + data.put("headerProperties", headerProperties); + data.put("rowProperties", rowProperties); + data.put("keyFontColor", textColor); + data.put("bgColor", backgroundColor); + data.put("rowPropertiesMargin", rowPropertiesCount % 2 == 0 ? (rowPropertiesCount/2 -1)*40 : (rowPropertiesCount/2)*40); //for adjusting the height in pdf for dynamic properties + data.put("titleName", credentialSupportedType); + + String credentialTemplate = utilities.getCredentialSupportedTemplateString(); + + Properties props = new Properties(); + props.setProperty("resource.loader", "class"); + props.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); + Velocity.init(props); + VelocityContext velocityContext = new VelocityContext(data); + + // Merge the context with the template + StringWriter writer = new StringWriter(); + Velocity.evaluate(velocityContext, writer, "Credential Template", credentialTemplate); + + // Get the merged HTML string + String mergedHtml = writer.toString(); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + + PdfWriter pdfwriter = new PdfWriter(outputStream); + DefaultFontProvider defaultFont = new DefaultFontProvider(true, false, false); + ConverterProperties converterProperties = new ConverterProperties(); + converterProperties.setFontProvider(defaultFont); + HtmlConverter.convertToPdf(mergedHtml, pdfwriter, converterProperties); + return new ByteArrayInputStream(outputStream.toByteArray()); + } } diff --git a/src/main/java/io/mosip/mimoto/util/JoseUtil.java b/src/main/java/io/mosip/mimoto/util/JoseUtil.java index 837c5fe08..9ea1e2f43 100644 --- a/src/main/java/io/mosip/mimoto/util/JoseUtil.java +++ b/src/main/java/io/mosip/mimoto/util/JoseUtil.java @@ -2,12 +2,16 @@ import com.auth0.jwt.JWT; import com.auth0.jwt.algorithms.Algorithm; -import com.auth0.jwt.interfaces.RSAKeyProvider; import com.fasterxml.jackson.databind.ObjectMapper; +import com.nimbusds.jose.JWSAlgorithm; import com.nimbusds.jose.jwk.JWK; import com.nimbusds.jose.jwk.KeyUse; import com.nimbusds.jose.jwk.RSAKey; import com.nimbusds.jose.util.X509CertUtils; +import com.nimbusds.jwt.JWTParser; +import com.nimbusds.jwt.SignedJWT; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; import io.mosip.kernel.core.logger.spi.Logger; import io.mosip.kernel.core.util.CryptoUtil; import io.mosip.mimoto.core.http.ResponseWrapper; @@ -16,7 +20,6 @@ import io.mosip.mimoto.dto.mimoto.WalletBindingResponseDto; import org.jose4j.jws.JsonWebSignature; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.io.IOException; @@ -28,6 +31,7 @@ import java.security.spec.InvalidKeySpecException; import java.security.spec.RSAPublicKeySpec; import java.security.spec.X509EncodedKeySpec; +import java.text.ParseException; import java.time.Instant; import java.util.Date; import java.util.HashMap; @@ -143,7 +147,7 @@ public String getJWT(String clientId, String keyStorePath, String fileName, Stri KeyStore.PrivateKeyEntry privateKeyEntry = cryptoCoreUtil.loadP12(keyStorePathWithFileName, alias, cyptoPassword); privateKey = (RSAPrivateKey) privateKeyEntry.getPrivateKey(); } catch (IOException e) { - logger.error("Exception happened while loading the p12 file for invoking token call."); + logger.error("Exception happened while loading the p12 file for invoking token call."); } return JWT.create() .withHeader(header) @@ -154,4 +158,63 @@ public String getJWT(String clientId, String keyStorePath, String fileName, Stri .withIssuedAt(issuedAt) .sign(Algorithm.RSA256(null, privateKey)); } + + public PublicKey getPublicKeyString(String keyStorePath, String fileName, String alias, String cyptoPassword){ + String keyStorePathWithFileName = keyStorePath + fileName; + try { + KeyStore.PrivateKeyEntry privateKeyEntry = cryptoCoreUtil.loadP12(keyStorePathWithFileName, alias, cyptoPassword); + PublicKey publicKey = privateKeyEntry.getCertificate().getPublicKey(); + return publicKey; + } catch (IOException e) { + logger.error("Exception happened while loading the p12 file for invoking token call."); + } + return null; + } + //Added this Util for generating JWT as the existing Jwt builder will not allow to have a custom header "typ" + public String generateJwt(PublicKey publicJwk, String keyStorePath, String fileName, String alias, String cyptoPassword, String audience, String clientId, String accessToken) throws ParseException { + RSAKey jwk = new RSAKey.Builder((java.security.interfaces.RSAPublicKey) publicJwk) + .keyUse(KeyUse.SIGNATURE) + .algorithm(JWSAlgorithm.RS256) + .build(); + + Map header = new HashMap<>(); + + header.put("alg", ALG_RS256); + header.put("typ", "openid4vci-proof+jwt"); + header.put("jwk", jwk.getRequiredParams()); + + + String keyStorePathWithFileName = keyStorePath + fileName; + Date issuedAt = Date.from(Instant.now()); + Date expiresAt = Date.from(Instant.now().plusMillis(120000000)); + RSAPrivateKey privateKey = null; + try { + KeyStore.PrivateKeyEntry privateKeyEntry = cryptoCoreUtil.loadP12(keyStorePathWithFileName, alias, cyptoPassword); + privateKey = (RSAPrivateKey) privateKeyEntry.getPrivateKey(); + } catch (IOException e) { + logger.error("Exception happened while loading the p12 file for invoking token call."); + } + SignedJWT jwt = (SignedJWT) JWTParser.parse(accessToken); + Map jsonObject = jwt.getPayload().toJSONObject(); + String cNounce = (String) jsonObject.get("c_nonce"); + + Map payload = new HashMap<>(); + payload.put("sub", clientId); + payload.put("aud", audience); + payload.put("nonce", cNounce); + payload.put("iss", clientId); + payload.put("exp", expiresAt.toInstant().getEpochSecond()); + payload.put("iat", issuedAt.toInstant().getEpochSecond()); + + return Jwts.builder() + .setHeader(header) + .setIssuer(clientId) + .setSubject(clientId) + .setAudience(audience) + .setExpiration(expiresAt) + .setIssuedAt(issuedAt) + .setClaims(payload) + .signWith(SignatureAlgorithm.RS256, privateKey) + .compact(); + } } diff --git a/src/main/java/io/mosip/mimoto/util/RestApiClient.java b/src/main/java/io/mosip/mimoto/util/RestApiClient.java index 87cbc0705..1df44902d 100644 --- a/src/main/java/io/mosip/mimoto/util/RestApiClient.java +++ b/src/main/java/io/mosip/mimoto/util/RestApiClient.java @@ -178,6 +178,42 @@ public T postApi(String uri, MediaType mediaType, Object requestType, Class< return result; } + public T postApi(String uri, MediaType mediaType, Object requestType, Class responseClass, String bearerToken){ + T result = null; + try { + logger.info("RestApiClient::postApi()::entry uri: {}", uri); + result = (T) plainRestTemplate.postForObject(uri, setRequestHeader(requestType, mediaType, bearerToken), responseClass); + } catch (Exception e) { + logger.error("RestApiClient::postApi()::error uri: {} {} {}", uri, e.getMessage(), e); + } + return result; + } + + private HttpEntity setRequestHeader(Object requestType, MediaType mediaType, String bearerToken){ + MultiValueMap headers = new LinkedMultiValueMap(); + if (mediaType != null) { + headers.add(CONTENT_TYPE, mediaType.toString()); + } + headers.add("Authorization", "Bearer "+bearerToken); + if (requestType != null) { + try { + HttpEntity httpEntity = (HttpEntity) requestType; + HttpHeaders httpHeader = httpEntity.getHeaders(); + Iterator iterator = httpHeader.keySet().iterator(); + while (iterator.hasNext()) { + String key = iterator.next(); + if (!(headers.containsKey(CONTENT_TYPE) && key.equals(CONTENT_TYPE))) + headers.add(key, Objects.requireNonNull(httpHeader.get(key)).get(0)); + } + + return new HttpEntity(httpEntity.getBody(), headers); + } catch (ClassCastException | NullPointerException e) { + return new HttpEntity(requestType, headers); + } + } else + return new HttpEntity(headers); + } + private HttpEntity setRequestHeader(Object requestType, MediaType mediaType) throws IOException { return setRequestHeader(requestType, mediaType, false); } diff --git a/src/main/java/io/mosip/mimoto/util/Utilities.java b/src/main/java/io/mosip/mimoto/util/Utilities.java index 3c693c939..2e0dfc18d 100644 --- a/src/main/java/io/mosip/mimoto/util/Utilities.java +++ b/src/main/java/io/mosip/mimoto/util/Utilities.java @@ -103,6 +103,12 @@ public class Utilities { @Value("${mosip.openid.issuers}") private String getIssuersConfigJson; + @Value("${mosip.openid.issuer.credentialSupported}") + private String getIssuerCredentialSupportedJson; + + @Value("${mosip.openid.htmlTemplate}") + private String getCredentialSupportedHtml; + private String mappingJsonString = null; private String identityMappingJsonString = null; @@ -111,9 +117,17 @@ public class Utilities { private String issuersConfigJsonString = null; + private String credentialsSupportedJsonString = null; + + private String credentialTemplateHtmlString = null; // uncomment for running mimoto Locally to populate the issuers json -// public Utilities(@Value("classpath:mimoto-issuers-config.json") Resource resource) throws IOException { +// public Utilities(@Value("classpath:/wellKnownIssuer/Insurance.json") Resource credentialsSupportedResource, +// @Value("classpath:mimoto-issuers-config.json") Resource resource, +// @Value("classpath:/templates/CredentialTemplate.html") Resource credentialTemplateResource) throws IOException{ +// // issuersConfigJsonString = (Files.readString(resource.getFile().toPath())); +// credentialsSupportedJsonString = (Files.readString(credentialsSupportedResource.getFile().toPath())); +// credentialTemplateHtmlString = (Files.readString(credentialTemplateResource.getFile().toPath())); // } public JSONObject getTemplate() throws JsonParseException, JsonMappingException, IOException { @@ -284,6 +298,16 @@ public String getIssuersConfigJsonValue() throws IOException { issuersConfigJsonString : getJson(configServerFileStorageURL, getIssuersConfigJson); } + public String getCredentialsSupportedConfigJsonValue() throws IOException{ + return (credentialsSupportedJsonString != null && !credentialsSupportedJsonString.isEmpty()) ? + credentialsSupportedJsonString : getJson(configServerFileStorageURL, getIssuerCredentialSupportedJson); + } + + public String getCredentialSupportedTemplateString() throws IOException{ + return (credentialTemplateHtmlString != null && !credentialTemplateHtmlString.isEmpty()) ? + credentialTemplateHtmlString : getJson(configServerFileStorageURL, getCredentialSupportedHtml); + } + /** * retrieve UIN from IDRepo by registration id. diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 39b6514f6..ef23e6d92 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -200,6 +200,8 @@ wallet.binding.partner.api.key=Aci9jg28B8mO_LDfDXo3ZTp5_HKgEMun2tYyHCa1e8k # OpenID mosip.openid.issuers=mimoto-issuers-config.json +mosip.openid.issuer.credentialSupported=/wellKnownIssuer/Insurance.json +mosip.openid.htmlTemplate=CredentialTemplate.html #configurations related to openid4vc mosip.oidc.client.assertion.type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer mosip.oidc.p12.filename=oidckeystore.p12 diff --git a/src/main/resources/templates/CredentialTemplate.html b/src/main/resources/templates/CredentialTemplate.html new file mode 100644 index 000000000..b7a1e20a4 --- /dev/null +++ b/src/main/resources/templates/CredentialTemplate.html @@ -0,0 +1,46 @@ + + + + + + Identity Card + + + +
+
+ $titleName +
+
+
+ Logo +
+
+ #foreach($entry in $headerProperties.entrySet()) +
+
$entry.key
+
$entry.value
+
+ #end +
+
+ +
+
+
+ #foreach($entry in $rowProperties.entrySet()) + #if($entry.value) +
+
$entry.key
+
$entry.value
+
+ #end + #end +
+
+ Logo +
+
+ + + \ No newline at end of file diff --git a/src/main/resources/wellKnownIssuer/Insurance.json b/src/main/resources/wellKnownIssuer/Insurance.json new file mode 100644 index 000000000..a701f1f0c --- /dev/null +++ b/src/main/resources/wellKnownIssuer/Insurance.json @@ -0,0 +1,170 @@ +{ + "credential_issuer": "MosipInsurance", + "credential_endpoint": "http://localhost:8088/v1/esignet/vci/credential", + "credentials_supported": [ + { + "format": "ldp_vc", + "id": "InsuranceCredential", + "scope": "sunbird_rc_insurance_vc_ldp", + "cryptographic_binding_methods_supported": [ + "did:jwk" + ], + "cryptographic_suites_supported": [ + "RsaSignature2018" + ], + "proof_types_supported": [ + "jwt" + ], + "credential_definition": { + "type": [ + "VerifiableCredential", + "InsuranceCredential" + ], + "credentialSubject": { + "fullName": { + "display": [ + { + "name": "Full Name", + "locale": "en" + } + ] + }, + "policyName": { + "display": [ + { + "name": "Policy Name", + "locale": "en" + } + ] + }, + "policyNumber": { + "display": [ + { + "name": "Policy Number", + "locale": "en" + } + ] + }, + "gender": { + "display": [ + { + "name": "Gender", + "locale": "en" + } + ] + }, + "expiresOn": { + "display": [ + { + "name": "Expiry Date", + "locale": "en" + } + ] + }, + "dob": { + "display": [ + { + "name": "Date Of Birth", + "locale": "en" + } + ] + } + } + }, + "display": [ + { + "name": "MOSIP Insurance", + "locale": "en", + "logo": { + "url": "https://api.qa-inji1.mosip.net/inji/mosip-logo.png", + "alt_text": "insurance logo" + }, + "background_color": "#fafcff", + "text_color": "#00284d" + } + ] + }, + { + "format": "ldp_vc", + "id": "LifeInsuranceCredential_ldp", + "scope": "life_insurance_vc_ldp", + "cryptographic_binding_methods_supported": [ + "did:jwk" + ], + "cryptographic_suites_supported": [ + "RsaSignature2018" + ], + "proof_types_supported": [ + "jwt" + ], + "credential_definition": { + "type": [ + "VerifiableCredential", + "LifeInsuranceCredential" + ], + "credentialSubject": { + "fullName": { + "display": [ + { + "name": "Full Name", + "locale": "en" + } + ] + }, + "policyName": { + "display": [ + { + "name": "Policy Name", + "locale": "en" + } + ] + }, + "policyNumber": { + "display": [ + { + "name": "Policy Number", + "locale": "en" + } + ] + }, + "gender": { + "display": [ + { + "name": "Gender", + "locale": "en" + } + ] + }, + "policyExpiresOn": { + "display": [ + { + "name": "Expiry Date", + "locale": "en" + } + ] + }, + "dob": { + "display": [ + { + "name": "Date Of Birth", + "locale": "en" + } + ] + } + } + }, + "display": [ + { + "name": "Sunbird Life Insurance", + "locale": "en", + "logo": { + "url": "https://sunbird.org/images/sunbird-logo-new.png", + "alt_text": "Sunbird life insurance logo" + }, + "background_color": "#fefcfa", + "text_color": "#7C4616" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java b/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java index 972d67b24..f29f754b5 100644 --- a/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java @@ -40,16 +40,17 @@ import org.springframework.test.util.ReflectionTestUtils; import org.springframework.test.web.servlet.MockMvc; +import java.io.ByteArrayInputStream; import java.io.IOException; import java.nio.file.Files; import java.util.*; +import java.util.stream.Collectors; import static io.mosip.mimoto.exception.PlatformErrorMessages.API_NOT_ACCESSIBLE_EXCEPTION; import static io.mosip.mimoto.exception.PlatformErrorMessages.INVALID_ISSUER_ID_EXCEPTION; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; @RunWith(SpringRunner.class) @SpringBootTest(classes = TestBootApplication.class) @@ -149,14 +150,127 @@ static IssuerDTO getIssuerDTO(String issuerName) { return issuer; } + static CredentialsSupportedResponse getCredentialSupportedResponse(String credentialSupportedName){ + LogoDTO logo = new LogoDTO(); + logo.setUrl("/logo"); + logo.setAlt_text("logo-url"); + CredentialSupportedDisplayResponse credentialSupportedDisplay = new CredentialSupportedDisplayResponse(); + credentialSupportedDisplay.setLogo(logo); + credentialSupportedDisplay.setName(credentialSupportedName); + credentialSupportedDisplay.setLocale("en"); + credentialSupportedDisplay.setTextColor("#FFFFFF"); + credentialSupportedDisplay.setBackgroundColor("#B34622"); + CredentialIssuerDisplayResponse credentialIssuerDisplayResponse = new CredentialIssuerDisplayResponse(); + credentialIssuerDisplayResponse.setName("Given Name"); + credentialIssuerDisplayResponse.setLocale("en"); + CredentialDisplayResponseDto credentialDisplayResponseDto = new CredentialDisplayResponseDto(); + credentialDisplayResponseDto.setDisplay(Collections.singletonList(credentialIssuerDisplayResponse)); + CredentialDefinitionResponseDto credentialDefinitionResponseDto = new CredentialDefinitionResponseDto(); + credentialDefinitionResponseDto.setType(List.of("VerifiableCredential", credentialSupportedName)); + credentialDefinitionResponseDto.setCredentialSubject(Map.of("name", credentialDisplayResponseDto)); + CredentialsSupportedResponse credentialsSupportedResponse = new CredentialsSupportedResponse(); + credentialsSupportedResponse.setFormat("ldp_vc"); + credentialsSupportedResponse.setId(credentialSupportedName); + credentialsSupportedResponse.setScope(credentialSupportedName+"_vc_ldp"); + credentialsSupportedResponse.setDisplay(Collections.singletonList(credentialSupportedDisplay)); + credentialsSupportedResponse.setProofTypesSupported(Collections.singletonList("jwt")); + credentialsSupportedResponse.setCredentialDefinition(credentialDefinitionResponseDto); + return credentialsSupportedResponse; + } + + static CredentialIssuerWellKnownResponse getCredentialIssuerWellKnownResponseDto(String issuerName, List credentialsSupportedResponses){ + CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = new CredentialIssuerWellKnownResponse(); + credentialIssuerWellKnownResponse.setCredentialIssuer(issuerName); + credentialIssuerWellKnownResponse.setCredentialEndPoint("credential_endpoint"); + credentialIssuerWellKnownResponse.setCredentialsSupported(credentialsSupportedResponses); + return credentialIssuerWellKnownResponse; + } + + @Test + public void getCredentialTypesTest() throws Exception{ + IssuerSupportedCredentialsResponse credentialTypesResponse = new IssuerSupportedCredentialsResponse(); + credentialTypesResponse.setSupportedCredentials(List.of(getCredentialSupportedResponse("credentialType1"), + getCredentialSupportedResponse("credentialType2"))); + credentialTypesResponse.setAuthorizationEndPoint("authorization-endpoint"); + Mockito.when(issuersService.getCredentialsSupported("Issuer1", null)) + .thenReturn(credentialTypesResponse) + .thenThrow(new ApiNotAccessibleException()); + Mockito.when(issuersService.getCredentialsSupported("invalidId", null)) + .thenReturn(new IssuerSupportedCredentialsResponse()); + + mockMvc.perform(get("/issuers/{issuer-id}/credentialTypes", "Issuer1").accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.response", Matchers.allOf( + Matchers.hasKey("authorization_endpoint"), + Matchers.hasKey("supportedCredentials") + ))) + .andExpect(jsonPath("$.response.supportedCredentials", Matchers.everyItem( + Matchers.allOf( + Matchers.hasKey("format"), + Matchers.hasKey("id"), + Matchers.hasKey("scope"), + Matchers.hasKey("display"), + Matchers.hasKey("proof_types_supported"), + Matchers.hasKey("credential_definition") + ) + ))); + mockMvc.perform(get("/issuers/{issuer-id}/credentialTypes", "Issuer1").accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getCode()))) + .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); + + mockMvc.perform(get("/issuers/{issuer-id}/credentialTypes", "invalidId").accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isNotFound()) + .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is(INVALID_ISSUER_ID_EXCEPTION.getCode()))) + .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(INVALID_ISSUER_ID_EXCEPTION.getMessage()))); + } + + @Test + public void generatePdfForVCTest() throws Exception { + Mockito.when(issuersService.getIssuerConfig("Issuer1")) + .thenReturn(getIssuerDTO("Issuer1")) + .thenThrow(new ApiNotAccessibleException()); + + Mockito.when(issuersService.getCredentialWellKnownFromJson()) + .thenReturn(getCredentialIssuerWellKnownResponseDto("Issuer1", + List.of(getCredentialSupportedResponse("CredentialType1")))); + + + Mockito.when(issuersService.generatePdfForVerifiableCredentials("accessToken", + getIssuerDTO("Issuer1"), getCredentialSupportedResponse("CredentialType1"), + "credential_endpoint")) + .thenReturn(new ByteArrayInputStream("Mock Pdf".getBytes())) + .thenThrow(new Exception()); + + mockMvc.perform(get("/issuers/Issuer1/credentials/CredentialType1/download") + .header("Bearer", "accessToken") + .accept(MediaType.APPLICATION_PDF)) + .andExpect(status().isOk()); + + mockMvc.perform(get("/issuers/Issuer1/credentials/CredentialType1/download") + .header("Bearer", "accessToken").accept(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getCode()))) + .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); + } + @Test public void getAllIssuersTest() throws Exception { IssuersDTO issuers = new IssuersDTO(); issuers.setIssuers((List.of(getIssuerDTO("Issuer1"), getIssuerDTO("Issuer2")))); - Mockito.when(issuersService.getAllIssuers()) + Mockito.when(issuersService.getAllIssuers(null)) .thenReturn(issuers) .thenThrow(new ApiNotAccessibleException()); + IssuersDTO filteredIssuers = new IssuersDTO(); + filteredIssuers.setIssuers(issuers.getIssuers().stream().filter(issuer -> issuer.getDisplay().stream() + .anyMatch(displayDTO -> displayDTO.getName().toLowerCase().contains("Issuer1".toLowerCase()))) + .collect(Collectors.toList())); + + Mockito.when(issuersService.getAllIssuers("Issuer1")) + .thenReturn(filteredIssuers) + .thenThrow(new ApiNotAccessibleException()); + mockMvc.perform(get("/issuers").accept(MediaType.APPLICATION_JSON_VALUE)) .andExpect(status().isOk()) .andExpect(jsonPath("$.response.issuers", Matchers.everyItem( @@ -175,10 +289,34 @@ public void getAllIssuersTest() throws Exception { ) ))); + mockMvc.perform(get("/issuers?search=Issuer1").accept(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.response.issuers", Matchers.everyItem( + Matchers.allOf( + Matchers.hasKey("credential_issuer"), + Matchers.hasKey("display"), + Matchers.hasKey("client_id"), + Matchers.hasKey(".well-known"), + Matchers.not(Matchers.hasKey("redirect_url")), + Matchers.not(Matchers.hasKey("authorization_endpoint")), + Matchers.not(Matchers.hasKey("token_endpoint")), + Matchers.not(Matchers.hasKey("credential_endpoint")), + Matchers.not(Matchers.hasKey("credential_audience")), + Matchers.not(Matchers.hasKey("additional_headers")), + Matchers.not(Matchers.hasKey("scopes_supported")) + ) + ))); + mockMvc.perform(get("/issuers").accept(MediaType.APPLICATION_JSON_VALUE)) .andExpect(status().isInternalServerError()) .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getCode()))) .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); + + + mockMvc.perform(get("/issuers?search=Issuer1").accept(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getCode()))) + .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); } @Test diff --git a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java index aad42b075..6aa85dfb8 100644 --- a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java @@ -5,9 +5,19 @@ import io.mosip.mimoto.dto.IssuersDTO; import io.mosip.mimoto.dto.DisplayDTO; import io.mosip.mimoto.dto.LogoDTO; +import io.mosip.mimoto.dto.mimoto.CredentialDefinitionResponseDto; +import io.mosip.mimoto.dto.mimoto.CredentialDisplayResponseDto; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerDisplayResponse; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; +import io.mosip.mimoto.dto.mimoto.CredentialSupportedDisplayResponse; +import io.mosip.mimoto.dto.mimoto.CredentialsSupportedResponse; +import io.mosip.mimoto.dto.mimoto.IssuerSupportedCredentialsResponse; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.service.impl.IssuersServiceImpl; +import io.mosip.mimoto.util.RestApiClient; import io.mosip.mimoto.util.Utilities; +import org.apache.velocity.VelocityContext; +import org.apache.velocity.app.Velocity; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -18,10 +28,13 @@ import org.springframework.boot.test.context.SpringBootTest; import java.io.IOException; +import java.io.StringWriter; +import java.net.URI; import java.util.*; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; @RunWith(MockitoJUnitRunner.class) @SpringBootTest @@ -33,6 +46,9 @@ public class IssuersServiceTest { @Mock Utilities utilities; + @Mock + public RestApiClient restApiClient; + List issuerConfigRelatedFields = List.of("additional_headers", "authorization_endpoint","authorization_audience", "token_endpoint", "proxy_token_endpoint", "credential_endpoint", "credential_audience", "redirect_uri"); @@ -72,11 +88,49 @@ static IssuerDTO getIssuerDTO(String issuerName, List nullFields) { return issuer; } + static CredentialsSupportedResponse getCredentialSupportedResponse(String credentialSupportedName){ + LogoDTO logo = new LogoDTO(); + logo.setUrl("/logo"); + logo.setAlt_text("logo-url"); + CredentialSupportedDisplayResponse credentialSupportedDisplay = new CredentialSupportedDisplayResponse(); + credentialSupportedDisplay.setLogo(logo); + credentialSupportedDisplay.setName(credentialSupportedName); + credentialSupportedDisplay.setLocale("en"); + credentialSupportedDisplay.setTextColor("#FFFFFF"); + credentialSupportedDisplay.setBackgroundColor("#B34622"); + CredentialIssuerDisplayResponse credentialIssuerDisplayResponse = new CredentialIssuerDisplayResponse(); + credentialIssuerDisplayResponse.setName("Given Name"); + credentialIssuerDisplayResponse.setLocale("en"); + CredentialDisplayResponseDto credentialDisplayResponseDto = new CredentialDisplayResponseDto(); + credentialDisplayResponseDto.setDisplay(Collections.singletonList(credentialIssuerDisplayResponse)); + CredentialDefinitionResponseDto credentialDefinitionResponseDto = new CredentialDefinitionResponseDto(); + credentialDefinitionResponseDto.setType(List.of("VerifiableCredential", credentialSupportedName)); + credentialDefinitionResponseDto.setCredentialSubject(Map.of("name", credentialDisplayResponseDto)); + CredentialsSupportedResponse credentialsSupportedResponse = new CredentialsSupportedResponse(); + credentialsSupportedResponse.setFormat("ldp_vc"); + credentialsSupportedResponse.setId(credentialSupportedName+"id"); + credentialsSupportedResponse.setScope(credentialSupportedName+"_vc_ldp"); + credentialsSupportedResponse.setDisplay(Collections.singletonList(credentialSupportedDisplay)); + credentialsSupportedResponse.setProofTypesSupported(Collections.singletonList("jwt")); + credentialsSupportedResponse.setCredentialDefinition(credentialDefinitionResponseDto); + return credentialsSupportedResponse; + } + + static CredentialIssuerWellKnownResponse getCredentialIssuerWellKnownResponseDto(String issuerName, List credentialsSupportedResponses){ + CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = new CredentialIssuerWellKnownResponse(); + credentialIssuerWellKnownResponse.setCredentialIssuer(issuerName); + credentialIssuerWellKnownResponse.setCredentialEndPoint("/credential_endpoint"); + credentialIssuerWellKnownResponse.setCredentialsSupported(credentialsSupportedResponses); + return credentialIssuerWellKnownResponse; + } @Before public void setUp() throws Exception { IssuersDTO issuers = new IssuersDTO(); issuers.setIssuers(List.of(getIssuerDTO("Issuer1", Collections.emptyList()), getIssuerDTO("Issuer2", Collections.emptyList()))); + CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = getCredentialIssuerWellKnownResponseDto("Issuer1", + List.of(getCredentialSupportedResponse("CredentialSupported1"), getCredentialSupportedResponse("CredentialSupported2"))); + Mockito.when(utilities.getCredentialsSupportedConfigJsonValue()).thenReturn(new Gson().toJson(credentialIssuerWellKnownResponse)); Mockito.when(utilities.getIssuersConfigJsonValue()).thenReturn(new Gson().toJson(issuers)); } @@ -86,16 +140,21 @@ public void shouldReturnIssuersWithIssuerConfigAsNull() throws ApiNotAccessibleE List issuers = new ArrayList<>(List.of(getIssuerDTO("Issuer1", issuerConfigRelatedFields), getIssuerDTO("Issuer2", issuerConfigRelatedFields))); expectedIssuers.setIssuers(issuers); - IssuersDTO allIssuers = issuersService.getAllIssuers(); + IssuersDTO expectedFilteredIssuers = new IssuersDTO(); + List filteredIssuersList = new ArrayList<>(List.of(getIssuerDTO("Issuer1", issuerConfigRelatedFields))); + expectedFilteredIssuers.setIssuers(filteredIssuersList); + IssuersDTO allIssuers = issuersService.getAllIssuers(null); + IssuersDTO filteredIssuers = issuersService.getAllIssuers("Issuer1"); assertEquals(expectedIssuers, allIssuers); + assertEquals(expectedFilteredIssuers, filteredIssuers); } @Test(expected = ApiNotAccessibleException.class) public void shouldThrowApiNotAccessibleExceptionWhenIssuersJsonStringIsNullForGettingAllIssuers() throws IOException, ApiNotAccessibleException { Mockito.when(utilities.getIssuersConfigJsonValue()).thenReturn(null); - issuersService.getAllIssuers(); + issuersService.getAllIssuers(null); } @Test @@ -131,4 +190,51 @@ public void shouldThrowApiNotAccessibleExceptionWhenIssuersJsonStringIsNullForGe issuersService.getIssuerConfig("Issuers1id"); } + + @Test(expected = ApiNotAccessibleException.class) + public void shouldThrowApiNotAccessibleExceptionWhenCredentialsSupportedJsonStringIsNullForGettingCredentialsSupportedList() throws Exception { + Mockito.when(utilities.getCredentialsSupportedConfigJsonValue()).thenReturn(null); + issuersService.getCredentialsSupported("Issuer1id", null); + Mockito.when(restApiClient.getApi(Mockito.any(URI.class), Mockito.any(Class.class))).thenReturn(null); + } + + @Test + public void shouldReturnIssuerCredentialSupportedResponseForTheIssuerIdIfExist() throws Exception { + IssuerSupportedCredentialsResponse expectedIssuerCredentialsSupported = new IssuerSupportedCredentialsResponse(); + List credentialsSupportedResponses =List.of(getCredentialSupportedResponse("CredentialSupported1"), + getCredentialSupportedResponse("CredentialSupported2")); + + String authorization_endpoint = getIssuerDTO("Issuer1", issuerConfigRelatedFields).getAuthorization_endpoint(); + expectedIssuerCredentialsSupported.setSupportedCredentials(credentialsSupportedResponses); + expectedIssuerCredentialsSupported.setAuthorizationEndPoint(authorization_endpoint); + + IssuerSupportedCredentialsResponse issuerSupportedCredentialsResponse = issuersService.getCredentialsSupported("Issuer1id", null); + assertEquals(issuerSupportedCredentialsResponse, expectedIssuerCredentialsSupported); + } + + @Test + public void shouldReturnNullIfTheIssuerIdNotExistsForCredentialSupportedTypes() throws ApiNotAccessibleException, IOException { + IssuerSupportedCredentialsResponse issuerSupportedCredentialsResponse = issuersService.getCredentialsSupported("Issuer3id", null); + assertNull(issuerSupportedCredentialsResponse.getSupportedCredentials()); + assertNull(issuerSupportedCredentialsResponse.getAuthorizationEndPoint()); + } + + @Test + public void shouldParseHtmlStringToDocument() { + String htmlContent = "

$message

"; + Map data = new HashMap<>(); + data.put("message", "PDF"); + // Create VelocityContext + VelocityContext velocityContext = new VelocityContext(); + // Create StringWriter to capture output + StringWriter writer = new StringWriter(); + // Merge template with data + velocityContext.put("message", data.get("message")); + Velocity.evaluate(velocityContext, writer, "Credential Template", htmlContent); + // Get merged HTML + String mergedHtml = writer.toString(); + // Assertion + assertTrue(mergedHtml.contains("PDF")); + } + } From 603f41924450e96a566dcf088c77b89e99df296c Mon Sep 17 00:00:00 2001 From: Vijay Kumar S <94220135+vijay151096@users.noreply.github.com> Date: Mon, 1 Apr 2024 16:11:49 +0530 Subject: [PATCH 127/860] [INJIMOB-961] : Add enable/disable feature in mimoto-issuers-config and update loggers (#190) * [INJIMOB-961] : Add enable/disable feature in mimoto-issuers-config and update loggers Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIMOB-961] : Add enable/disable feature in mimoto-issuers-config and update loggers Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIMOB-961] : Update testcase for Wallet binding and OTP Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- .../mimoto/constant/LoggerFileConstant.java | 2 + .../mimoto/controller/IdpController.java | 36 ++-- .../mimoto/controller/IssuersController.java | 22 +- .../java/io/mosip/mimoto/dto/IssuerDTO.java | 4 + .../exception/InvalidIssuerIdException.java | 8 +- .../exception/IssuerOnboardingException.java | 11 + .../exception/PlatformErrorMessages.java | 6 +- .../io/mosip/mimoto/service/IdpService.java | 4 +- .../mosip/mimoto/service/IssuersService.java | 3 +- .../mimoto/service/impl/IdpServiceImpl.java | 30 ++- .../service/impl/IssuersServiceImpl.java | 9 + .../java/io/mosip/mimoto/util/JoseUtil.java | 9 +- .../java/io/mosip/mimoto/util/Utilities.java | 45 ++-- src/main/resources/mimoto-issuers-config.json | 199 ++++++++++++------ .../mimoto/controller/InjiControllerTest.java | 10 +- .../mimoto/service/IssuersServiceTest.java | 43 ++-- 16 files changed, 273 insertions(+), 168 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/exception/IssuerOnboardingException.java diff --git a/src/main/java/io/mosip/mimoto/constant/LoggerFileConstant.java b/src/main/java/io/mosip/mimoto/constant/LoggerFileConstant.java index 18f05e68b..2b1db6a98 100644 --- a/src/main/java/io/mosip/mimoto/constant/LoggerFileConstant.java +++ b/src/main/java/io/mosip/mimoto/constant/LoggerFileConstant.java @@ -10,4 +10,6 @@ public enum LoggerFileConstant { UIN; public static final String REST_CLIENT_SERVICE_IMPL_POST_API_ENTRY = "RestClientServiceImpl::postApi()::entry"; public static final String REST_CLIENT_SERVICE_IMPL_POST_API_EXIT = "RestClientServiceImpl::postApi()::exit"; + + public static final String DELIMITER = " --> "; } diff --git a/src/main/java/io/mosip/mimoto/controller/IdpController.java b/src/main/java/io/mosip/mimoto/controller/IdpController.java index b8ade5a47..edf4797ed 100644 --- a/src/main/java/io/mosip/mimoto/controller/IdpController.java +++ b/src/main/java/io/mosip/mimoto/controller/IdpController.java @@ -27,6 +27,8 @@ import java.util.List; import java.util.Map; +import static io.mosip.mimoto.util.Utilities.handleExceptionWithErrorCode; + @RestController public class IdpController { @@ -54,19 +56,22 @@ public ResponseEntity otpRequest(@Valid @RequestBody BindingOtpRequestDt logger.debug("Received binding-otp request : " + JsonUtils.javaObjectToJsonString(requestDTO)); requestValidator.validateInputRequest(result); requestValidator.validateNotificationChannel(requestDTO.getRequest().getOtpChannels()); - ResponseWrapper response = null; + try { + ResponseWrapper response = null; response = (ResponseWrapper) restClientService .postApi(ApiName.BINDING_OTP, requestDTO, ResponseWrapper.class, USE_BEARER_TOKEN); if (response == null) throw new IdpException(); + return ResponseEntity.status(HttpStatus.OK).body(response); } catch (Exception e) { - logger.error("Wallet binding otp error occured.", e); - response = getErrorResponse(PlatformErrorMessages.MIMOTO_OTP_BINDING_EXCEPTION.getCode(), e.getMessage()); + logger.error("Wallet binding otp error occurred.", e); + ResponseWrapper response = getErrorResponse(PlatformErrorMessages.MIMOTO_OTP_BINDING_EXCEPTION.getCode(), e.getMessage()); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(response); } - return ResponseEntity.status(HttpStatus.OK).body(response); + } @PostMapping(path = "/wallet-binding", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @@ -74,9 +79,8 @@ public ResponseEntity request(@RequestBody WalletBindingRequestDTO reque throws Exception { logger.debug("Received wallet-binding request : " + JsonUtils.javaObjectToJsonString(requestDTO)); - - ResponseWrapper response = null; try { + ResponseWrapper response = null; WalletBindingInnerRequestDto innerRequestDto = new WalletBindingInnerRequestDto(); innerRequestDto.setChallengeList(requestDTO.getRequest().getChallengeList()); innerRequestDto.setIndividualId(requestDTO.getRequest().getIndividualId()); @@ -94,36 +98,34 @@ public ResponseEntity request(@RequestBody WalletBindingRequestDTO reque throw new IdpException(); response = joseUtil.addThumbprintAndKeyId(internalResponse); - + return ResponseEntity.status(HttpStatus.OK).body(response); } catch (Exception e) { logger.error("Wallet binding error occured for tranaction id " + requestDTO.getRequest().getIndividualId(), e); - response = getErrorResponse(PlatformErrorMessages.MIMOTO_WALLET_BINDING_EXCEPTION.getCode(), e.getMessage()); + ResponseWrapper response = getErrorResponse(PlatformErrorMessages.MIMOTO_WALLET_BINDING_EXCEPTION.getCode(), e.getMessage()); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(response); } - - return ResponseEntity.status(HttpStatus.OK).body(response); } @PostMapping(value = {"/get-token/{issuer}"}, consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) public ResponseEntity getToken(@RequestParam Map params, @PathVariable(required = false) String issuer) { - logger.debug("Started Token Call get-token-> " + params.toString()); + logger.info("Reached the getToken Controller for Issuer " + issuer); RestTemplate restTemplate = new RestTemplate(); try { IssuerDTO issuerDTO = issuersService.getIssuerConfig(issuer); - logger.info("Issuer DTO is > " + issuerDTO); HttpEntity> request = idpService.constructGetTokenRequest(params, issuerDTO); TokenResponseDTO response = restTemplate.postForObject(idpService.getTokenEndpoint(issuerDTO), request, TokenResponseDTO.class); return ResponseEntity.status(HttpStatus.OK).body(response); } catch (Exception ex){ - logger.error("Exception Occured while invoking the get-token endpoint", ex); - ResponseWrapper response = getErrorResponse(PlatformErrorMessages.MIMOTO_IDP_GENERIC_EXCEPTION.getCode(), ex.getMessage()); + logger.error("Exception Occurred while Invoking the Token Endpoint : ", ex); + ResponseWrapper response = handleExceptionWithErrorCode(ex); return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(response); } } - private ResponseWrapper getErrorResponse(String errorCode, String errorMessage) { + public static ResponseWrapper getErrorResponse(String errorCode, String errorMessage) { List errors = getErrors(errorCode, errorMessage); - ResponseWrapper responseWrapper = new ResponseWrapper(); + ResponseWrapper responseWrapper = new ResponseWrapper<>(); responseWrapper.setResponse(null); responseWrapper.setResponsetime(DateUtils.getRequestTimeString()); responseWrapper.setId(ID); @@ -132,7 +134,7 @@ private ResponseWrapper getErrorResponse(String errorCode, String errorMessage) return responseWrapper; } - private List getErrors(String errorCode, String errorMessage) { + public static List getErrors(String errorCode, String errorMessage) { ErrorDTO errorDTO = new ErrorDTO(errorCode, errorMessage); return Lists.newArrayList(errorDTO); } diff --git a/src/main/java/io/mosip/mimoto/controller/IssuersController.java b/src/main/java/io/mosip/mimoto/controller/IssuersController.java index 302448847..ddd487fb5 100644 --- a/src/main/java/io/mosip/mimoto/controller/IssuersController.java +++ b/src/main/java/io/mosip/mimoto/controller/IssuersController.java @@ -20,22 +20,15 @@ import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.*; import java.io.ByteArrayInputStream; import java.io.IOException; import java.util.List; import java.util.Optional; -import static io.mosip.mimoto.exception.PlatformErrorMessages.API_NOT_ACCESSIBLE_EXCEPTION; -import static io.mosip.mimoto.exception.PlatformErrorMessages.INVALID_CREDENTIAL_TYPE_EXCEPTION; -import static io.mosip.mimoto.exception.PlatformErrorMessages.INVALID_ISSUER_ID_EXCEPTION; -import static io.mosip.mimoto.exception.PlatformErrorMessages.MIMOTO_PDF_SIGN_EXCEPTION; +import static io.mosip.mimoto.exception.PlatformErrorMessages.*; +import static io.mosip.mimoto.util.Utilities.handleExceptionWithErrorCode; @RestController @RequestMapping(value = "/issuers") @@ -60,7 +53,7 @@ public ResponseEntity getAllIssuers(@RequestParam(required = false) Stri } catch (ApiNotAccessibleException | IOException e) { logger.error("Exception occurred while fetching issuers ", e); responseWrapper.setErrors(List.of(new ErrorDTO(API_NOT_ACCESSIBLE_EXCEPTION.getCode(), API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(responseWrapper); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); } return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); @@ -73,14 +66,13 @@ public ResponseEntity getIssuerConfig(@PathVariable("issuer-id") String responseWrapper.setVersion("v1"); responseWrapper.setResponsetime(DateUtils.getRequestTimeString()); - IssuerDTO issuerConfig; try { issuerConfig = issuersService.getIssuerConfig(issuerId); - } catch (ApiNotAccessibleException | IOException exception) { + } catch (Exception exception ) { logger.error("Exception occurred while fetching issuers ", exception); - responseWrapper.setErrors(List.of(new ErrorDTO(API_NOT_ACCESSIBLE_EXCEPTION.getCode(), API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(responseWrapper); + responseWrapper = handleExceptionWithErrorCode(exception); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); } responseWrapper.setResponse(issuerConfig); diff --git a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java index 8a398635c..dae7e6e90 100644 --- a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java @@ -65,4 +65,8 @@ public class IssuerDTO { String client_alias; @JsonInclude(NON_NULL) Map additional_headers; + @Expose + @JsonInclude(NON_NULL) + @NotBlank + String enabled; } diff --git a/src/main/java/io/mosip/mimoto/exception/InvalidIssuerIdException.java b/src/main/java/io/mosip/mimoto/exception/InvalidIssuerIdException.java index b79e83093..87bcda928 100644 --- a/src/main/java/io/mosip/mimoto/exception/InvalidIssuerIdException.java +++ b/src/main/java/io/mosip/mimoto/exception/InvalidIssuerIdException.java @@ -13,12 +13,8 @@ public class InvalidIssuerIdException extends BaseUncheckedException { * @param errorCode The error code for this exception * @param errorMessage The error message for this exception */ - public InvalidIssuerIdException(String errorCode, String errorMessage) { - super(errorCode, errorMessage); - } - public InvalidIssuerIdException(String errorMessage) { - super(PlatformErrorMessages.INVALID_ISSUER_ID_EXCEPTION.getCode(), errorMessage); + public InvalidIssuerIdException() { + super(PlatformErrorMessages.INVALID_ISSUER_ID_EXCEPTION.getCode(), PlatformErrorMessages.INVALID_ISSUER_ID_EXCEPTION.getMessage()); } - } diff --git a/src/main/java/io/mosip/mimoto/exception/IssuerOnboardingException.java b/src/main/java/io/mosip/mimoto/exception/IssuerOnboardingException.java new file mode 100644 index 000000000..930210ef9 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/exception/IssuerOnboardingException.java @@ -0,0 +1,11 @@ +package io.mosip.mimoto.exception; + +public class IssuerOnboardingException extends BaseUncheckedException{ + + private static final long serialVersionUID = 1L; + + public IssuerOnboardingException(String errorMessage) { + super(PlatformErrorMessages.MIMOTO_ISSUER_ONBOARDING_EXCEPTION.getCode(), errorMessage); + } + +} diff --git a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java index 833b4b572..28d8288a1 100644 --- a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java +++ b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java @@ -82,7 +82,8 @@ public enum PlatformErrorMessages { MIMOTO_IDP_OTP_EXCEPTION(PlatformConstants.PREFIX + "033", "IDP Otp error occured"), MIMOTO_IDP_GENERIC_EXCEPTION(PlatformConstants.PREFIX + "034", "Could not get response from server"), INVALID_ISSUER_ID_EXCEPTION(PlatformConstants.PREFIX + "035", "Invalid issuer ID"), - INVALID_CREDENTIAL_TYPE_EXCEPTION(PlatformConstants.PREFIX + "036", "Invalid Credential Type Id"); + INVALID_CREDENTIAL_TYPE_EXCEPTION(PlatformConstants.PREFIX + "036", "Invalid Credential Type Id"), + MIMOTO_ISSUER_ONBOARDING_EXCEPTION(PlatformConstants.PREFIX + "037", "Issuers Onboarding exception occurred "); /** The error message. */ private final String errorMessage; @@ -121,4 +122,5 @@ public String getCode() { return this.errorCode; } -} \ No newline at end of file +} + diff --git a/src/main/java/io/mosip/mimoto/service/IdpService.java b/src/main/java/io/mosip/mimoto/service/IdpService.java index b0de7c906..99971fb8f 100644 --- a/src/main/java/io/mosip/mimoto/service/IdpService.java +++ b/src/main/java/io/mosip/mimoto/service/IdpService.java @@ -1,13 +1,15 @@ package io.mosip.mimoto.service; import io.mosip.mimoto.dto.IssuerDTO; +import io.mosip.mimoto.exception.IssuerOnboardingException; import org.springframework.http.HttpEntity; import org.springframework.util.MultiValueMap; +import java.io.IOException; import java.util.Map; public interface IdpService { - HttpEntity> constructGetTokenRequest(Map params, IssuerDTO issuerDTO); + HttpEntity> constructGetTokenRequest(Map params, IssuerDTO issuerDTO) throws IOException, IssuerOnboardingException; String getTokenEndpoint(IssuerDTO issuerDTO); } diff --git a/src/main/java/io/mosip/mimoto/service/IssuersService.java b/src/main/java/io/mosip/mimoto/service/IssuersService.java index 70b7b08aa..8aa011765 100644 --- a/src/main/java/io/mosip/mimoto/service/IssuersService.java +++ b/src/main/java/io/mosip/mimoto/service/IssuersService.java @@ -6,6 +6,7 @@ import io.mosip.mimoto.dto.mimoto.CredentialsSupportedResponse; import io.mosip.mimoto.dto.mimoto.IssuerSupportedCredentialsResponse; import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.InvalidIssuerIdException; import java.io.ByteArrayInputStream; import java.io.IOException; @@ -15,7 +16,7 @@ public interface IssuersService { IssuersDTO getAllIssuersWithAllFields() throws ApiNotAccessibleException, IOException; - IssuerDTO getIssuerConfig(String issuerId) throws ApiNotAccessibleException, IOException; + IssuerDTO getIssuerConfig(String issuerId) throws ApiNotAccessibleException, IOException, InvalidIssuerIdException; IssuerSupportedCredentialsResponse getCredentialsSupported(String issuerId, String search) throws ApiNotAccessibleException, IOException; diff --git a/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java index 4f1d47f34..6181413b6 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java @@ -1,10 +1,9 @@ package io.mosip.mimoto.service.impl; -import io.mosip.kernel.core.logger.spi.Logger; import io.mosip.mimoto.dto.IssuerDTO; +import io.mosip.mimoto.exception.IssuerOnboardingException; import io.mosip.mimoto.service.IdpService; import io.mosip.mimoto.util.JoseUtil; -import io.mosip.mimoto.util.LoggerUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpEntity; @@ -14,6 +13,7 @@ import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; +import java.io.IOException; import java.util.Map; @Service @@ -34,27 +34,21 @@ public class IdpServiceImpl implements IdpService { @Autowired JoseUtil joseUtil; - private final Logger logger = LoggerUtil.getLogger(IdpServiceImpl.class); - @Override - public HttpEntity> constructGetTokenRequest(Map params, IssuerDTO issuerDTO) { + public HttpEntity> constructGetTokenRequest(Map params, IssuerDTO issuerDTO) throws IOException, IssuerOnboardingException { HttpHeaders headers = new HttpHeaders(); MultiValueMap map= new LinkedMultiValueMap<>(); - try { - headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); - String clientAssertion = joseUtil.getJWT(issuerDTO.getClient_id(), keyStorePath, fileName, issuerDTO.getClient_alias(), cyptoPassword, issuerDTO.getAuthorization_audience()); - map.add("code", params.get("code")); - map.add("client_id", issuerDTO.getClient_id()); - map.add("grant_type", params.get("grant_type")); - map.add("redirect_uri", params.get("redirect_uri")); - map.add("client_assertion", clientAssertion.replace("[","").replace("]","")); - map.add("client_assertion_type", clientAssertionType); - map.add("code_verifier", params.get("code_verifier")); - } catch (Exception e){ - logger.error("Exception Occurred while Loading the Issuers for Get Token Endpoint"); - } + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + String clientAssertion = joseUtil.getJWT(issuerDTO.getClient_id(), keyStorePath, fileName, issuerDTO.getClient_alias(), cyptoPassword, issuerDTO.getAuthorization_audience()); + map.add("code", params.get("code")); + map.add("client_id", issuerDTO.getClient_id()); + map.add("grant_type", params.get("grant_type")); + map.add("redirect_uri", params.get("redirect_uri")); + map.add("client_assertion", clientAssertion.replace("[","").replace("]","")); + map.add("client_assertion_type", clientAssertionType); + map.add("code_verifier", params.get("code_verifier")); return new HttpEntity<>(map, headers); } diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index e7dc2bc8d..1f202f395 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -18,6 +18,7 @@ import io.mosip.mimoto.dto.mimoto.VCCredentialRequestProof; import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.InvalidIssuerIdException; import io.mosip.mimoto.service.IssuersService; import io.mosip.mimoto.util.JoseUtil; import io.mosip.mimoto.util.LoggerUtil; @@ -41,9 +42,11 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.List; import java.util.Optional; import java.util.Properties; import java.util.stream.Collectors; +import java.util.stream.Collectors; @Service public class IssuersServiceImpl implements IssuersService { @@ -78,6 +81,10 @@ public IssuersDTO getAllIssuers(String search) throws ApiNotAccessibleException, } Gson gsonWithIssuerDataOnlyFilter = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); issuers = gsonWithIssuerDataOnlyFilter.fromJson(issuersConfigJsonValue, IssuersDTO.class); + List enabledIssuers = issuers.getIssuers().stream() + .filter(issuer -> "true".equals(issuer.getEnabled())) + .collect(Collectors.toList()); + issuers.setIssuers(enabledIssuers); // Filter issuers list with search string if (!StringUtils.isEmpty(search)) { @@ -119,6 +126,8 @@ public IssuerDTO getIssuerConfig(String issuerId) throws ApiNotAccessibleExcepti .findFirst(); if (issuerConfigResp.isPresent()) issuerDTO = issuerConfigResp.get(); + else + throw new InvalidIssuerIdException(); return issuerDTO; } diff --git a/src/main/java/io/mosip/mimoto/util/JoseUtil.java b/src/main/java/io/mosip/mimoto/util/JoseUtil.java index 9ea1e2f43..257abbdad 100644 --- a/src/main/java/io/mosip/mimoto/util/JoseUtil.java +++ b/src/main/java/io/mosip/mimoto/util/JoseUtil.java @@ -18,6 +18,7 @@ import io.mosip.mimoto.dto.mimoto.JwkDto; import io.mosip.mimoto.dto.mimoto.WalletBindingInternalResponseDto; import io.mosip.mimoto.dto.mimoto.WalletBindingResponseDto; +import io.mosip.mimoto.exception.IssuerOnboardingException; import org.jose4j.jws.JsonWebSignature; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -134,7 +135,7 @@ public ResponseWrapper addThumbprintAndKeyId(ResponseW return responseWrapper; } - public String getJWT(String clientId, String keyStorePath, String fileName, String alias, String cyptoPassword, String audience) { + public String getJWT(String clientId, String keyStorePath, String fileName, String alias, String cyptoPassword, String audience) throws IssuerOnboardingException, IOException { Map header = new HashMap<>(); header.put("alg", ALG_RS256); @@ -145,9 +146,13 @@ public String getJWT(String clientId, String keyStorePath, String fileName, Stri RSAPrivateKey privateKey = null; try { KeyStore.PrivateKeyEntry privateKeyEntry = cryptoCoreUtil.loadP12(keyStorePathWithFileName, alias, cyptoPassword); + if(privateKeyEntry == null){ + throw new IssuerOnboardingException("Private Key Entry is Missing for the alias " + alias); + } privateKey = (RSAPrivateKey) privateKeyEntry.getPrivateKey(); } catch (IOException e) { - logger.error("Exception happened while loading the p12 file for invoking token call."); + logger.error("Exception happened while loading the p12 file for invoking token call."); + throw e; } return JWT.create() .withHeader(header) diff --git a/src/main/java/io/mosip/mimoto/util/Utilities.java b/src/main/java/io/mosip/mimoto/util/Utilities.java index 2e0dfc18d..0fdfee164 100644 --- a/src/main/java/io/mosip/mimoto/util/Utilities.java +++ b/src/main/java/io/mosip/mimoto/util/Utilities.java @@ -1,25 +1,9 @@ package io.mosip.mimoto.util; -import java.io.IOException; -import java.net.URI; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; - import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; - -import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.core.io.Resource; -import org.springframework.stereotype.Component; - import io.mosip.kernel.core.logger.spi.Logger; import io.mosip.mimoto.constant.ApiName; import io.mosip.mimoto.constant.LoggerFileConstant; @@ -34,6 +18,23 @@ import io.mosip.mimoto.service.RestClientService; import io.mosip.mimoto.service.impl.CredentialShareServiceImpl; import lombok.Data; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.io.Resource; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.net.URI; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; + +import static io.mosip.mimoto.constant.LoggerFileConstant.DELIMITER; +import static io.mosip.mimoto.controller.IdpController.getErrorResponse; @Component @Data @@ -298,6 +299,18 @@ public String getIssuersConfigJsonValue() throws IOException { issuersConfigJsonString : getJson(configServerFileStorageURL, getIssuersConfigJson); } + public static ResponseWrapper handleExceptionWithErrorCode(Exception exception) { + String errorMessage = exception.getMessage(); + String errorCode = PlatformErrorMessages.MIMOTO_IDP_GENERIC_EXCEPTION.getCode(); + + if(errorMessage.contains(DELIMITER)){ + String[] errorSections = errorMessage.split(DELIMITER); + errorCode = errorSections[0]; + errorMessage = errorSections[1]; + } + return getErrorResponse(errorCode, errorMessage); + } + public String getCredentialsSupportedConfigJsonValue() throws IOException{ return (credentialsSupportedJsonString != null && !credentialsSupportedJsonString.isEmpty()) ? credentialsSupportedJsonString : getJson(configServerFileStorageURL, getIssuerCredentialSupportedJson); diff --git a/src/main/resources/mimoto-issuers-config.json b/src/main/resources/mimoto-issuers-config.json index 7a326fdea..a75aa68b2 100644 --- a/src/main/resources/mimoto-issuers-config.json +++ b/src/main/resources/mimoto-issuers-config.json @@ -6,55 +6,66 @@ { "name": "UIN, VID, AID", "logo": { - "url": "https://api.dev1.mosip.net/inji/digit-icon.png", - "alt_text": "digits-logo" + "url": "https://mosip.io/images/footer/foot-logo-b.png", + "alt_text": "mosip logo" }, - "title": "Download via UIN, VID, AID", - "description": "Enter your national ID to download your card.", + "title": "Download MOSIP Credentials via OTP", + "description":"Download credentials by providing UIN, VID or AID", "language": "en" }, { "name": "UIN, VID, AID", "logo": { - "url": "https://api.dev1.mosip.net/inji/digit-icon.png", - "alt_text": "أرقام الشعار" + "url": "https://mosip.io/images/footer/foot-logo-b.png", + "alt_text": "شعار موسيب" }, - "title": "التنزيل عبر UIN, VID, AID", - "description": "أدخل رقم الهوية الوطنية الخاص بك لتنزيل بطاقتك.", + "title": "قم بتنزيل بيانات اعتماد MOSIP عبر OTP", + "description": "قم بتنزيل بيانات الاعتماد من خلال توفير UIN أو VID أو AID", "language": "ar" }, { "name": "UIN, VID, AID", "logo": { - "url": "https://api.dev1.mosip.net/inji/digit-icon.png", - "alt_text": "अंक-लोगो" + "url": "https://mosip.io/images/footer/foot-logo-b.png", + "alt_text": "मोसिप लोगो" }, - "title": "UIN, VID, AID के माध्यम से डाउनलोड करे", - "description": "अपना कार्ड डाउनलोड करने के लिए अपनी राष्ट्रीय आईडी दर्ज करें।", + "title": "OTP के माध्यम से MOSIP क्रेडेंशियल डाउनलोड करें", + "description":"यूआईएन, वीआईडी या एआईडी प्रदान करके क्रेडेंशियल डाउनलोड करें", "language": "hi" }, { "name": "UIN, VID, AID", "logo": { - "url": "https://api.dev1.mosip.net/inji/digit-icon.png", - "alt_text": "ಅಂಕೆಗಳು-ಲೋಗೋ" + "url": "https://mosip.io/images/footer/foot-logo-b.png", + "alt_text": "mosip ಲೋಗೋ" }, - "title": "UIN, VID, AID ಮೂಲಕ ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ", - "description": "ನಿಮ್ಮ ಕಾರ್ಡ್ ಅನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಲು ನಿಮ್ಮ ರಾಷ್ಟ್ರೀಯ ID ಅನ್ನು ನಮೂದಿಸಿ.", + "title": "OTP ಮೂಲಕ MOSIP ರುಜುವಾತುಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿ", + "description": "UIN, VID ಅಥವಾ AID ಒದಗಿಸುವ ಮೂಲಕ ರುಜುವಾತುಗಳನ್ನು ಡೌನ್\u200Cಲೋಡ್ ಮಾಡಿ", "language": "kn" }, { "name": "UIN, VID, AID", "logo": { - "url": "https://api.dev1.mosip.net/inji/digit-icon.png", - "alt_text": "இலக்கங்கள்-லோகோ" + "url": "https://mosip.io/images/footer/foot-logo-b.png", + "alt_text": "mosip சின்னம்" }, - "title": "UIN, VID, AID மூலம் பதிவிறக்கவும்", - "description": "உங்கள் கார்டைப் பதிவிறக்க உங்கள் தேசிய ஐடியை உள்ளிடவும்.", + "title": "OTP வழியாக MOSIP சான்றுகளைப் பதிவிறக்கவும்", + "description":"UIN, VID அல்லது AID ஐ வழங்குவதன் மூலம் நற்சான்றிதழ்களைப் பதிவிறக்கவும்", "language": "ta" + }, + { + "name": "UIN, VID, AID", + "logo": { + "url": "https://mosip.io/images/footer/foot-logo-b.png", + "alt_text": "logo ng mosip" + }, + "title": "I-download ang Mga Kredensyal ng MOSIP sa pamamagitan ng OTP", + "description":"Mag-download ng mga kredensyal sa pamamagitan ng pagbibigay ng UIN, VID o AID", + "language": "fil" } ], - "protocol": "OTP" + "protocol": "OTP", + "enabled": "true" }, { "credential_issuer": "ESignet", @@ -62,75 +73,79 @@ { "name": "e-Signet", "logo": { - "url": "https://esignet.dev1.mosip.net/logo.png", + "url": "https://mosip.io/images/footer/foot-logo-b.png", "alt_text": "esignet-logo" }, - "title": "Download via e-Signet", - "description": "Enter your national ID to download your card.", + "title": "Download MOSIP Credentials", + "description": "Download credentials by providing UIN or VID", "language": "en" }, { "name": "e-Signet", "logo": { - "url": "https://esignet.dev1.mosip.net/logo.png", - "alt_text": "esignet-logo" + "url": "https://mosip.io/images/footer/foot-logo-b.png", + "alt_text": "شعار موسيب" }, - "title": "e-Signet التنزيل عبر", - "description": "أدخل رقم الهوية الوطنية الخاص بك لتنزيل بطاقتك.", + "title": "قم بتنزيل بيانات اعتماد MOSIP", + "description": "توفير UIN أو VIDقم بتنزيل بيانات الاعتماد عن طريق" , "language": "ar" }, { "name": "e-Signet", "logo": { - "url": "https://esignet.dev1.mosip.net/logo.png", - "alt_text": "esignet-लोगो" + "url": "https://mosip.io/images/footer/foot-logo-b.png", + "alt_text": "मोसिप लोगो" }, - "title": "ई-हस्ताक्षर के माध्यम से डाउनलोड करें", - "description": "अपना कार्ड डाउनलोड करने के लिए अपनी राष्ट्रीय आईडी दर्ज करें।", + "title": "MOSIP क्रेडेंशियल डाउनलोड करेंं", + "description":"यूआईएन या वीआईडी प्रदान करके क्रेडेंशियल डाउनलोड करें", "language": "hi" }, { "name": "e-Signet", "logo": { - "url": "https://esignet.dev1.mosip.net/logo.png", - "alt_text": "esignet-ಲೋಗೋ" + "url": "https://mosip.io/images/footer/foot-logo-b.png", + "alt_text": "mosip ಲೋಗೋ" }, - "title": "ಇ-ಸಿಗ್ನೆಟ್ ಮೂಲಕ ಡೌನ್ಲೋಡ್ ಮಾಡಿ", - "description": "ನಿಮ್ಮ ಕಾರ್ಡ್ ಅನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಲು ನಿಮ್ಮ ರಾಷ್ಟ್ರೀಯ ID ಅನ್ನು ನಮೂದಿಸಿ.", + "title": "MOSIP ರುಜುವಾತುಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿ", + "description": "UIN ಅಥವಾ VID ಒದಗಿಸುವ ಮೂಲಕ ರುಜುವಾತುಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿ", "language": "kn" }, { "name": "e-Signet", "logo": { - "url": "https://esignet.dev1.mosip.net/logo.png", - "alt_text": "esignet-லோகோ" + "url": "https://mosip.io/images/footer/foot-logo-b.png", + "alt_text": "mosip லோகோ" }, - "title": "இ-சிக்னெட் மூலம் பதிவிறக்கம் செய்யவும்", - "description": "உங்கள் கார்டைப் பதிவிறக்க உங்கள் தேசிய ஐடியை உள்ளிடவும்.", + "title": "MOSIP சான்றுகளைப் பதிவிறக்கவும்", + "description":"UIN அல்லது VIDஐ வழங்குவதன் மூலம் நற்சான்றிதழ்களைப் பதிவிறக்கவும்", "language": "ta" + }, + { + "name": "e-Signet", + "logo": { + "url": "https://mosip.io/images/footer/foot-logo-b.png", + "alt_text": "logo ng mosip" + }, + "title": "I-download ang Mga Kredensyal ng MOSIP", + "description":"Mag-download ng mga kredensyal sa pamamagitan ng pagbibigay ng UIN o VID", + "language": "fil" } ], "protocol": "OpenId4VCI", - "client_id": "7-*****************IWRDAg1x-M", + "client_id": "${mimoto.oidc.partner.clientid}", "client_alias": "mpartner-default-mimotooidc", - "scopes_supported": [ - "mosip_identity_vc_ldp" - ], - "additional_headers": { - "Accept": "application/json" - }, - ".well-known": null, + "scopes_supported": ["mosip_identity_vc_ldp"], + "additional_headers": { "Accept": "application/json" }, + ".well-known": "https://${mosip.esignet.host}/.well-known/openid-credential-issuer", "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", - "authorization_endpoint": "https://esignet.dev1.mosip.net/authorize", + "authorization_endpoint": "https://${mosip.esignet.host}/authorize", "authorization_audience": "https://${mosip.esignet.host}/v1/esignet/oauth/v2/token", - "proxy_token_endpoint": "https://esignet-mock.dev1.mosip.net/v1/esignet/oauth/token", - "token_endpoint": "https://api.dev1.mosip.net/residentmobileapp/get-token/ESignet", - "credential_endpoint": "https://api-internal.dev1.mosip.net/v1/esignet/vci/credential", - "credential_type": [ - "VerifiableCredential", - "MOSIPVerifiableCredential" - ], - "credential_audience": "https://esignet.dev1.mosip.net/v1/esignet" + "token_endpoint": "https://${mosip.api.public.host}/residentmobileapp/get-token/ESignet", + "proxy_token_endpoint": "https://${mosip.api.public.host}/v1/esignet/oauth/v2/token", + "credential_endpoint": "https://${mosip.api.public.host}/v1/esignet/vci/credential", + "credential_type": ["VerifiableCredential", "MOSIPVerifiableCredential"], + "credential_audience": "https://${mosip.esignet.host}/v1/esignet", + "enabled": "false" }, { "credential_issuer": "Sunbird", @@ -141,28 +156,76 @@ "url": "https://sunbird.org/images/sunbird-logo-new.png", "alt_text": "a square logo of a Sunbird" }, - "title": "Download Sunbird Credential", - "description": "Enter your Policy Number to download your card.", - "language": "en" + "language": "en", + "title": "Download Sunbird Credentials", + "description": "Download credentials with your Policy Number" + }, + { + "name": "بيانات الاعتماد التي يمكن التحقق منها للتأمين Sunbird RC", + "logo": { + "url": "https://sunbird.org/images/sunbird-logo-new.png", + "alt_text": "شعار مربع لطائر الشمس" + }, + "language": "ar", + "title": "قم بتنزيل بيانات اعتماد Sunbird", + "description": "قم بتنزيل بيانات الاعتماد باستخدام رقم السياسة الخاص بك" + }, + { + "name": "सनबर्ड आरसी बीमा सत्यापन योग्य क्रेडेंशियल", + "logo": { + "url": "https://sunbird.org/images/sunbird-logo-new.png", + "alt_text": "सनबर्ड का एक चौकोर लोगो" + }, + "language": "hi", + "title": "सनबर्ड क्रेडेंशियल्स डाउनलोड करेंं", + "description": "अपने पॉलिसी नंबर के साथ क्रेडेंशियल डाउनलोड करें" + }, + { + "name": "ಸನ್ಬರ್ಡ್ ಆರ್ಸಿ ವಿಮೆ ಪರಿಶೀಲಿಸಬಹುದಾದ ರುಜುವಾತು", + "logo": { + "url": "https://sunbird.org/images/sunbird-logo-new.png", + "alt_text": "ಸನ್ ಬರ್ಡ್ ನ ಚೌಕಾಕಾರದ ಲೋಗೋ" + }, + "language": "kn", + "title": "ಸನ್ಬರ್ಡ್ ರುಜುವಾತುಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿ", + "description": "ನಿಮ್ಮ ಪಾಲಿಸಿ ಸಂಖ್ಯೆಯೊಂದಿಗೆ ರುಜುವಾತುಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿ" + }, + { + "name": "Sunbird RC இன்சூரன்ஸ் சரிபார்க்கக்கூடிய நற்சான்றிதழ்", + "logo": { + "url": "https://sunbird.org/images/sunbird-logo-new.png", + "alt_text": "சூரிய பறவையின் சதுர சின்னம்" + }, + "language": "ta", + "title": "Sunbird சான்றுகளைப் பதிவிறக்கவும்", + "description": "உங்கள் பாலிசி எண்ணுடன் நற்சான்றிதழ்களைப் பதிவிறக்கவும்" + }, + { + "name": "Kredensyal na Nabe-verify ng Sunbird RC Insurance", + "logo": { + "url": "https://sunbird.org/images/sunbird-logo-new.png", + "alt_text": "isang parisukat na logo ng isang Sunbird" + }, + "language": "fil", + "title": "I-download ang Mga Kredensyal ng Sunbird", + "description": "Mag-download ng mga kredensyal gamit ang iyong Numero ng Patakaran" } ], "protocol": "OpenId4VCI", - "client_id": "${mimoto.oidc.partner.clientid}", + "client_id": "${mimoto.oidc.sunbird.partner.clientid}", "client_alias": "esignet-sunbird-partner", "scopes_supported": ["sunbird_rc_insurance_vc_ldp"], "additional_headers": { "Accept": "application/json" }, - ".well-known": null, + ".well-known": "https://vijay151096.github.io/did-testing/openid-credential-issuer.json", "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", "authorization_endpoint": "https://${mosip.esignet.mock.host}/authorize", "authorization_audience": "https://${mosip.esignet.mock.host}/v1/esignet/oauth/v2/token", - "proxy_token_endpoint": "https://esignet-mock.dev1.mosip.net/v1/esignet/oauth/token", "token_endpoint": "https://${mosip.api.public.host}/residentmobileapp/get-token/Sunbird", + "proxy_token_endpoint": "https://${mosip.esignet.mock.host}/v1/esignet/oauth/v2/token", "credential_endpoint": "https://${mosip.esignet.mock.host}/v1/esignet/vci/credential", - "credential_type": [ - "VerifiableCredential", - "InsuranceCredential" - ], - "credential_audience": "https://${mosip.esignet.mock.host}/v1/esignet" + "credential_type": ["VerifiableCredential", "InsuranceCredential"], + "credential_audience": "https://${mosip.esignet.mock.host}/v1/esignet", + "enabled": "false" } ] } diff --git a/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java b/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java index f29f754b5..ae0b2eb84 100644 --- a/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java @@ -308,13 +308,13 @@ public void getAllIssuersTest() throws Exception { ))); mockMvc.perform(get("/issuers").accept(MediaType.APPLICATION_JSON_VALUE)) - .andExpect(status().isInternalServerError()) + .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getCode()))) .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); mockMvc.perform(get("/issuers?search=Issuer1").accept(MediaType.APPLICATION_JSON_VALUE)) - .andExpect(status().isInternalServerError()) + .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getCode()))) .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); } @@ -335,7 +335,7 @@ public void getIssuerConfigTest() throws Exception { .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(INVALID_ISSUER_ID_EXCEPTION.getMessage()))); mockMvc.perform(get("/issuers/id1").accept(MediaType.APPLICATION_JSON_VALUE)) - .andExpect(status().isInternalServerError()) + .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getCode()))) .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); } @@ -488,7 +488,7 @@ public void otpRequestTest() throws Exception { this.mockMvc.perform(post("/binding-otp").contentType(MediaType.APPLICATION_JSON_VALUE) .content(JsonUtils.javaObjectToJsonString(requestDTO))) - .andExpect(status().isOk()); + .andExpect(status().isBadRequest()); } @Test @@ -511,7 +511,7 @@ public void walletBindingTest() throws Exception { this.mockMvc.perform(post("/wallet-binding").contentType(MediaType.APPLICATION_JSON_VALUE) .content(JsonUtils.javaObjectToJsonString(requestDTO))) - .andExpect(status().isOk()); + .andExpect(status().isBadRequest()); } @Test diff --git a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java index 6aa85dfb8..d49247b98 100644 --- a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java @@ -1,18 +1,13 @@ package io.mosip.mimoto.service; import com.google.gson.Gson; +import io.mosip.mimoto.dto.DisplayDTO; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.IssuersDTO; -import io.mosip.mimoto.dto.DisplayDTO; import io.mosip.mimoto.dto.LogoDTO; -import io.mosip.mimoto.dto.mimoto.CredentialDefinitionResponseDto; -import io.mosip.mimoto.dto.mimoto.CredentialDisplayResponseDto; -import io.mosip.mimoto.dto.mimoto.CredentialIssuerDisplayResponse; -import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; -import io.mosip.mimoto.dto.mimoto.CredentialSupportedDisplayResponse; -import io.mosip.mimoto.dto.mimoto.CredentialsSupportedResponse; -import io.mosip.mimoto.dto.mimoto.IssuerSupportedCredentialsResponse; +import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.InvalidIssuerIdException; import io.mosip.mimoto.service.impl.IssuersServiceImpl; import io.mosip.mimoto.util.RestApiClient; import io.mosip.mimoto.util.Utilities; @@ -32,9 +27,7 @@ import java.net.URI; import java.util.*; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.*; @RunWith(MockitoJUnitRunner.class) @SpringBootTest @@ -64,6 +57,7 @@ static IssuerDTO getIssuerDTO(String issuerName, List nullFields) { issuer.setCredential_issuer(issuerName + "id"); issuer.setDisplay(Collections.singletonList(display)); issuer.setClient_id("123"); + issuer.setEnabled("true"); if (issuerName.equals("Issuer1")) issuer.setWellKnownEndpoint("/.well-known"); else { if (!nullFields.contains("redirect_uri")) @@ -158,7 +152,7 @@ public void shouldThrowApiNotAccessibleExceptionWhenIssuersJsonStringIsNullForGe } @Test - public void shouldReturnIssuerDataAndConfigForTheIssuerIdIfExist() throws ApiNotAccessibleException, IOException { + public void shouldReturnIssuerDataAndConfigForTheIssuerIdIfExist() throws ApiNotAccessibleException, IOException, InvalidIssuerIdException { IssuerDTO expectedIssuer = getIssuerDTO("Issuer1", issuerConfigRelatedFields); IssuerDTO issuer = issuersService.getIssuerConfig("Issuer1id"); @@ -177,19 +171,34 @@ public void shouldReturnIssuerDataAndConfigForAllIssuer() throws ApiNotAccessibl assertEquals(expectedIssuers, issuersDTO); } - @Test - public void shouldReturnNullIfTheIssuerIdNotExists() throws ApiNotAccessibleException, IOException { + @Test(expected = InvalidIssuerIdException.class) + public void shouldThrowExceptionIfTheIssuerIdNotExists() throws ApiNotAccessibleException, IOException, InvalidIssuerIdException { IssuerDTO issuer = issuersService.getIssuerConfig("Issuer3id"); - - assertNull(issuer); } @Test(expected = ApiNotAccessibleException.class) - public void shouldThrowApiNotAccessibleExceptionWhenIssuersJsonStringIsNullForGettingIssuerConfig() throws IOException, ApiNotAccessibleException { + public void shouldThrowApiNotAccessibleExceptionWhenIssuersJsonStringIsNullForGettingIssuerConfig() throws IOException, ApiNotAccessibleException, InvalidIssuerIdException { Mockito.when(utilities.getIssuersConfigJsonValue()).thenReturn(null); issuersService.getIssuerConfig("Issuers1id"); } + @Test + public void shouldReturnOnlyEnabledIssuers() throws IOException, ApiNotAccessibleException { + IssuersDTO issuers = new IssuersDTO(); + IssuerDTO enabledIssuer = getIssuerDTO("Issuer1", Collections.emptyList()); + IssuerDTO disbaledIssuer = getIssuerDTO("Issuer2", Collections.emptyList()); + disbaledIssuer.setEnabled("false"); + issuers.setIssuers(List.of(enabledIssuer, disbaledIssuer)); + Mockito.when(utilities.getIssuersConfigJsonValue()).thenReturn(new Gson().toJson(issuers)); + + IssuersDTO expectedIssuersDTO = new IssuersDTO(); + expectedIssuersDTO.setIssuers(List.of(enabledIssuer)); + + IssuersDTO actualIssuersDTO = issuersService.getAllIssuers(""); + assertEquals(expectedIssuersDTO, actualIssuersDTO); + assertEquals(actualIssuersDTO.getIssuers().get(0).getEnabled(), "true"); + assertEquals(actualIssuersDTO.getIssuers().size(), 1); + } @Test(expected = ApiNotAccessibleException.class) public void shouldThrowApiNotAccessibleExceptionWhenCredentialsSupportedJsonStringIsNullForGettingCredentialsSupportedList() throws Exception { From d7aab31548ee127a19e906012a9cf5098cbc13c1 Mon Sep 17 00:00:00 2001 From: Challa Rao <47347156+challabeehyv@users.noreply.github.com> Date: Thu, 11 Apr 2024 17:52:55 +0530 Subject: [PATCH 128/860] [INJIWEB-123] change issuers search to filter on display title (#194) * [INJIWEB-123] change issuers search to filter on display title Signed-off-by: Challarao * [INJIWEB-123] add display title and description in mock issuer dto Signed-off-by: Challarao --- .../java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java | 2 +- .../java/io/mosip/mimoto/controller/InjiControllerTest.java | 2 +- src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index 1f202f395..f24e12099 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -90,7 +90,7 @@ public IssuersDTO getAllIssuers(String search) throws ApiNotAccessibleException, if (!StringUtils.isEmpty(search)) { List filteredIssuers = issuers.getIssuers().stream() .filter(issuer -> issuer.getDisplay().stream() - .anyMatch(displayDTO -> displayDTO.getName().toLowerCase().contains(search.toLowerCase()))) + .anyMatch(displayDTO -> displayDTO.getTitle().toLowerCase().contains(search.toLowerCase()))) .collect(Collectors.toList()); issuers.setIssuers(filteredIssuers); return issuers; diff --git a/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java b/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java index ae0b2eb84..8b121a9a0 100644 --- a/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java @@ -264,7 +264,7 @@ public void getAllIssuersTest() throws Exception { IssuersDTO filteredIssuers = new IssuersDTO(); filteredIssuers.setIssuers(issuers.getIssuers().stream().filter(issuer -> issuer.getDisplay().stream() - .anyMatch(displayDTO -> displayDTO.getName().toLowerCase().contains("Issuer1".toLowerCase()))) + .anyMatch(displayDTO -> displayDTO.getTitle().toLowerCase().contains("Issuer1".toLowerCase()))) .collect(Collectors.toList())); Mockito.when(issuersService.getAllIssuers("Issuer1")) diff --git a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java index d49247b98..afab8dba1 100644 --- a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java @@ -51,6 +51,8 @@ static IssuerDTO getIssuerDTO(String issuerName, List nullFields) { logo.setAlt_text("logo-url"); DisplayDTO display = new DisplayDTO(); display.setName(issuerName); + display.setTitle("Download via " + issuerName); + display.setDescription(issuerName + " description"); display.setLanguage("en"); display.setLogo(logo); IssuerDTO issuer = new IssuerDTO(); From 4abd4bf8f77556bd593387ffcb41a02cb5c66c5a Mon Sep 17 00:00:00 2001 From: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> Date: Wed, 17 Apr 2024 15:45:20 +0530 Subject: [PATCH 129/860] MOSIP-32084 Signed-off-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> --- apitest/.gitignore | 40 + ...ional Test-classpath-arg-1659588646071.txt | 1 + ...ional Test-classpath-arg-1659589592502.txt | 1 + ...tionalTest-classpath-arg-1695652238739.txt | 1 + ...ration (1)-classpath-arg-1658840665646.txt | 1 + apitest/Dockerfile | 63 + apitest/README.md | 3 + apitest/entrypoint.sh | 4 + apitest/metadata.xml | 16 + apitest/pom.xml | 185 ++ .../apirig/testrunner/MosipTestRunner.java | 350 ++ .../apirig/testscripts/AddIdentity.java | 178 + .../apirig/testscripts/GetWithParam.java | 175 + .../PostWithAutogenIdWithOtpGenerate.java | 233 ++ .../PostWithBodyWithOtpGenerate.java | 181 + .../apirig/testscripts/SimplePost.java | 207 ++ .../src/main/resources/config/AuthPolicy.json | 7 + .../main/resources/config/AuthPolicy2.json | 82 + .../main/resources/config/AuthPolicy3.json | 8 + .../main/resources/config/AuthPolicy4.json | 7 + .../main/resources/config/AuthPolicy5.json | 8 + .../main/resources/config/AuthPolicy6.json | 41 + .../Authorization/OtpGeneration/request.json | 16 + .../Authorization/OtpValidation/request.json | 11 + .../config/Authorization/errorUIN.json | 17 + .../Authorization/internalAuthRequest.json | 13 + .../keycloakTokenGeneration.json | 6 + .../config/Authorization/request.json | 11 + .../config/Authorization/requestIdentity.json | 12 + .../Authorization/zoneMappingRequest.json | 12 + .../main/resources/config/IDRepo.properties | 86 + .../main/resources/config/IDRepo2.properties | 100 + .../main/resources/config/IDjson.properties | 2 + .../main/resources/config/Kernel.properties | 278 ++ .../config/UmcValidationApis.properties | 6 + .../resources/config/adminQueries.properties | 908 +++++ .../config/adminTokenGeneration.properties | 5 + .../resources/config/application.properties | 103 + .../main/resources/config/bioValue.properties | 49 + .../config/bioValueEncryptionTemplate.json | 14 + .../src/main/resources/config/bulkUpload.json | 6 + .../resources/config/clientPrivateKey.txt | 1 + .../src/main/resources/config/errorUIN.json | 24 + .../main/resources/config/errorUINIdp.json | 9 + .../main/resources/config/errorUINKyc.json | 24 + .../main/resources/config/esignetPayload.json | 7 + .../resources/config/folderPaths.properties | 10 + .../config/healthCheckEndpoint.properties | 45 + .../resources/config/idRepoToken.properties | 5 + .../config/idaDeleteQueriesForEsignet.txt | 8 + .../config/keyManagerDataDeleteQueries.txt | 14 + .../keyManagerDataDeleteQueriesForEsignet.txt | 14 + .../resources/config/lang-isocode-transid.csv | 550 +++ .../main/resources/config/mapping.properties | 29 + .../config/masterDataDeleteQueries.txt | 91 + .../masterDataDeleteQueriesForEsignet.txt | 8 + .../config/packetProperties.properties | 2 + .../config/packetValidator.properties | 2 + .../config/partnerDemoService.properties | 8 + .../config/partnerQueries.properties | 135 + .../resources/config/pmsDataDeleteQueries.txt | 28 + .../main/resources/config/policyGroup.json | 10 + .../main/resources/config/prereg_SendOtp.json | 9 + .../resources/config/prereg_ValidateOtp.json | 9 + .../registrationProcessorAPI.properties | 27 + .../config/residentServicesQueries.properties | 15 + apitest/src/main/resources/config/sign.json | 14 + .../src/main/resources/config/test.properties | 16 + .../config/tokenGeneration.properties | 7 + .../config/updatePacketProperties.properties | 7 + .../resources/config/valueMapping.properties | 35 + .../customize-emailable-report-template.html | 61 + apitest/src/main/resources/dbFiles/.xml | 22 + .../resources/dbFiles/PMS_delete_script.txt | 28 + .../src/main/resources/dbFiles/dbConfig.xml | 22 + .../resources/dbFiles/delete_Masterdata.sql | 88 + apitest/src/main/resources/krb5.conf | 29 + apitest/src/main/resources/log4j.properties | 8 + .../mimoto/AddIdentity/AddIdentity.yml | 85 + .../mimoto/AddIdentity/addIdentityResult.hbs | 5 + .../AidGetIndividualId/AidGetIndividualId.yml | 137 + .../AidGetIndividualId/aidGetIndividualId.hbs | 5 + .../aidGetIndividualIdResult.hbs | 5 + .../mimoto/AuthLock/createAuthLock.hbs | 12 + .../mimoto/AuthLock/createAuthLock.yml | 183 + .../mimoto/AuthLock/createAuthLockResult.hbs | 2 + .../mimoto/AuthUnLock/createAuthUnLock.hbs | 13 + .../mimoto/AuthUnLock/createAuthUnLock.yml | 123 + .../AuthUnLock/createAuthUnLockResult.hbs | 3 + .../mimoto/BindingOtp/BindingOtp.hbs | 12 + .../mimoto/BindingOtp/BindingOtp.yml | 714 ++++ .../mimoto/BindingOtp/BindingOtpResult.hbs | 5 + .../CredentialCheckStatus.yml | 42 + .../credentialcheckstatus.hbs | 3 + .../credentialcheckstatusResult.hbs | 5 + .../DownloadCredential/DownloadCredential.yml | 42 + .../DownloadCredential/downloadCredential.hbs | 4 + .../DownloadWithReqid/DownloadWithReqid.yml | 26 + .../DownloadWithReqid/downloadwithreqid.hbs | 4 + .../downloadwithreqidResult.hbs | 4 + .../RequestCredentials/ReqCredential.yml | 181 + .../ReqCredentialResult.hbs | 5 + .../RequestCredentials/reqCredential.hbs | 6 + .../mimoto/GenerateVID/createGenerateVID.hbs | 7 + .../mimoto/GenerateVID/createGenerateVID.yml | 181 + .../GenerateVID/createGenerateVIDResult.hbs | 2 + .../mimoto/GetAllIssuers/GetAllIssuers.hbs | 1 + .../mimoto/GetAllIssuers/GetAllIssuers.yml | 41 + .../GetAllIssuers/GetAllIssuersResult.hbs | 1 + .../main/resources/mimoto/SendOTP/SendOTP.yml | 52 + .../mimoto/SendOTP/createSendOTP.hbs | 10 + .../mimoto/SendOTP/createSendOTP2.hbs | 10 + .../mimoto/SendOTP/createSendOTPAsEmail.hbs | 10 + .../mimoto/SendOTP/createSendOTPAsEmpty.hbs | 10 + .../mimoto/SendOTP/createSendOTPAsPhone.hbs | 10 + .../SendOTP/createSendOTPErrorResult.hbs | 14 + .../SendOTP/createSendOTPErrorResult2.hbs | 14 + .../mimoto/SendOTP/createSendOTPResult.hbs | 2 + .../SendOTP/createSendOTPResultForEmail.hbs | 11 + .../SendOTP/createSendOTPResultForPhone.hbs | 11 + .../resources/mimoto/SendOTP1/SendOTP.yml | 81 + .../mimoto/SendOTP1/createSendOTP.hbs | 10 + .../mimoto/SendOTP1/createSendOTP2.hbs | 10 + .../SendOTP1/createSendOTPErrorResult.hbs | 14 + .../SendOTP1/createSendOTPErrorResult2.hbs | 14 + .../mimoto/SendOTP1/createSendOTPResult.hbs | 12 + .../mimoto/SendOTPUIN/createSendOTP.yml | 14 + .../mimoto/SendOTPUIN/individualIdOtp.hbs | 8 + .../SendOTPUIN/individualIdOtpResult.hbs | 2 + .../mimoto/SendOtpForVid/createSendOTP.hbs | 12 + .../mimoto/SendOtpForVid/createSendOTP.yml | 21 + .../SendOtpForVid/createSendOTPResult.hbs | 12 + .../mimoto/ValidateOTP/ValidateOTP.hbs | 10 + .../mimoto/ValidateOTP/ValidateOTP.yml | 185 ++ .../mimoto/ValidateOTP/ValidateOTPResult.hbs | 7 + .../mimoto/WalletBinding/WalletBinding.hbs | 16 + .../mimoto/WalletBinding/WalletBinding.yml | 2953 +++++++++++++++++ .../WalletBindingEmptyChallenge.hbs | 9 + .../WalletBinding/WalletBindingResult.hbs | 9 + .../mimoto/autoGeneratedId.properties | 1 + apitest/src/main/resources/mimoto/error.hbs | 10 + apitest/src/main/resources/spring.properties | 329 ++ apitest/testNgXmlFiles/mimotoApi.xml | 106 + 143 files changed, 10726 insertions(+) create mode 100644 apitest/.gitignore create mode 100644 apitest/.temp-Functional Test-classpath-arg-1659588646071.txt create mode 100644 apitest/.temp-Functional Test-classpath-arg-1659589592502.txt create mode 100644 apitest/.temp-MosipFunctionalTest-classpath-arg-1695652238739.txt create mode 100644 apitest/.temp-New_configuration (1)-classpath-arg-1658840665646.txt create mode 100644 apitest/Dockerfile create mode 100644 apitest/README.md create mode 100644 apitest/entrypoint.sh create mode 100644 apitest/metadata.xml create mode 100644 apitest/pom.xml create mode 100644 apitest/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java create mode 100644 apitest/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java create mode 100644 apitest/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java create mode 100644 apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java create mode 100644 apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithBodyWithOtpGenerate.java create mode 100644 apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java create mode 100644 apitest/src/main/resources/config/AuthPolicy.json create mode 100644 apitest/src/main/resources/config/AuthPolicy2.json create mode 100644 apitest/src/main/resources/config/AuthPolicy3.json create mode 100644 apitest/src/main/resources/config/AuthPolicy4.json create mode 100644 apitest/src/main/resources/config/AuthPolicy5.json create mode 100644 apitest/src/main/resources/config/AuthPolicy6.json create mode 100644 apitest/src/main/resources/config/Authorization/OtpGeneration/request.json create mode 100644 apitest/src/main/resources/config/Authorization/OtpValidation/request.json create mode 100644 apitest/src/main/resources/config/Authorization/errorUIN.json create mode 100644 apitest/src/main/resources/config/Authorization/internalAuthRequest.json create mode 100644 apitest/src/main/resources/config/Authorization/keycloakTokenGeneration.json create mode 100644 apitest/src/main/resources/config/Authorization/request.json create mode 100644 apitest/src/main/resources/config/Authorization/requestIdentity.json create mode 100644 apitest/src/main/resources/config/Authorization/zoneMappingRequest.json create mode 100644 apitest/src/main/resources/config/IDRepo.properties create mode 100644 apitest/src/main/resources/config/IDRepo2.properties create mode 100644 apitest/src/main/resources/config/IDjson.properties create mode 100644 apitest/src/main/resources/config/Kernel.properties create mode 100644 apitest/src/main/resources/config/UmcValidationApis.properties create mode 100644 apitest/src/main/resources/config/adminQueries.properties create mode 100644 apitest/src/main/resources/config/adminTokenGeneration.properties create mode 100644 apitest/src/main/resources/config/application.properties create mode 100644 apitest/src/main/resources/config/bioValue.properties create mode 100644 apitest/src/main/resources/config/bioValueEncryptionTemplate.json create mode 100644 apitest/src/main/resources/config/bulkUpload.json create mode 100644 apitest/src/main/resources/config/clientPrivateKey.txt create mode 100644 apitest/src/main/resources/config/errorUIN.json create mode 100644 apitest/src/main/resources/config/errorUINIdp.json create mode 100644 apitest/src/main/resources/config/errorUINKyc.json create mode 100644 apitest/src/main/resources/config/esignetPayload.json create mode 100644 apitest/src/main/resources/config/folderPaths.properties create mode 100644 apitest/src/main/resources/config/healthCheckEndpoint.properties create mode 100644 apitest/src/main/resources/config/idRepoToken.properties create mode 100644 apitest/src/main/resources/config/idaDeleteQueriesForEsignet.txt create mode 100644 apitest/src/main/resources/config/keyManagerDataDeleteQueries.txt create mode 100644 apitest/src/main/resources/config/keyManagerDataDeleteQueriesForEsignet.txt create mode 100644 apitest/src/main/resources/config/lang-isocode-transid.csv create mode 100644 apitest/src/main/resources/config/mapping.properties create mode 100644 apitest/src/main/resources/config/masterDataDeleteQueries.txt create mode 100644 apitest/src/main/resources/config/masterDataDeleteQueriesForEsignet.txt create mode 100644 apitest/src/main/resources/config/packetProperties.properties create mode 100644 apitest/src/main/resources/config/packetValidator.properties create mode 100644 apitest/src/main/resources/config/partnerDemoService.properties create mode 100644 apitest/src/main/resources/config/partnerQueries.properties create mode 100644 apitest/src/main/resources/config/pmsDataDeleteQueries.txt create mode 100644 apitest/src/main/resources/config/policyGroup.json create mode 100644 apitest/src/main/resources/config/prereg_SendOtp.json create mode 100644 apitest/src/main/resources/config/prereg_ValidateOtp.json create mode 100644 apitest/src/main/resources/config/registrationProcessorAPI.properties create mode 100644 apitest/src/main/resources/config/residentServicesQueries.properties create mode 100644 apitest/src/main/resources/config/sign.json create mode 100644 apitest/src/main/resources/config/test.properties create mode 100644 apitest/src/main/resources/config/tokenGeneration.properties create mode 100644 apitest/src/main/resources/config/updatePacketProperties.properties create mode 100644 apitest/src/main/resources/config/valueMapping.properties create mode 100644 apitest/src/main/resources/customize-emailable-report-template.html create mode 100644 apitest/src/main/resources/dbFiles/.xml create mode 100644 apitest/src/main/resources/dbFiles/PMS_delete_script.txt create mode 100644 apitest/src/main/resources/dbFiles/dbConfig.xml create mode 100644 apitest/src/main/resources/dbFiles/delete_Masterdata.sql create mode 100644 apitest/src/main/resources/krb5.conf create mode 100644 apitest/src/main/resources/log4j.properties create mode 100644 apitest/src/main/resources/mimoto/AddIdentity/AddIdentity.yml create mode 100644 apitest/src/main/resources/mimoto/AddIdentity/addIdentityResult.hbs create mode 100644 apitest/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml create mode 100644 apitest/src/main/resources/mimoto/AidGetIndividualId/aidGetIndividualId.hbs create mode 100644 apitest/src/main/resources/mimoto/AidGetIndividualId/aidGetIndividualIdResult.hbs create mode 100644 apitest/src/main/resources/mimoto/AuthLock/createAuthLock.hbs create mode 100644 apitest/src/main/resources/mimoto/AuthLock/createAuthLock.yml create mode 100644 apitest/src/main/resources/mimoto/AuthLock/createAuthLockResult.hbs create mode 100644 apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.hbs create mode 100644 apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml create mode 100644 apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLockResult.hbs create mode 100644 apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.hbs create mode 100644 apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.yml create mode 100644 apitest/src/main/resources/mimoto/BindingOtp/BindingOtpResult.hbs create mode 100644 apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml create mode 100644 apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatus.hbs create mode 100644 apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatusResult.hbs create mode 100644 apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml create mode 100644 apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/downloadCredential.hbs create mode 100644 apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml create mode 100644 apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqid.hbs create mode 100644 apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqidResult.hbs create mode 100644 apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml create mode 100644 apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredentialResult.hbs create mode 100644 apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/reqCredential.hbs create mode 100644 apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.hbs create mode 100644 apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml create mode 100644 apitest/src/main/resources/mimoto/GenerateVID/createGenerateVIDResult.hbs create mode 100644 apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.hbs create mode 100644 apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml create mode 100644 apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuersResult.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOTP/SendOTP.yml create mode 100644 apitest/src/main/resources/mimoto/SendOTP/createSendOTP.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOTP/createSendOTP2.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOTP/createSendOTPAsEmail.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOTP/createSendOTPAsEmpty.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOTP/createSendOTPAsPhone.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOTP/createSendOTPErrorResult.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOTP/createSendOTPErrorResult2.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOTP/createSendOTPResult.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOTP/createSendOTPResultForEmail.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOTP/createSendOTPResultForPhone.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOTP1/SendOTP.yml create mode 100644 apitest/src/main/resources/mimoto/SendOTP1/createSendOTP.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOTP1/createSendOTP2.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOTP1/createSendOTPErrorResult.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOTP1/createSendOTPErrorResult2.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOTP1/createSendOTPResult.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml create mode 100644 apitest/src/main/resources/mimoto/SendOTPUIN/individualIdOtp.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOTPUIN/individualIdOtpResult.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOtpForVid/createSendOTP.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOtpForVid/createSendOTP.yml create mode 100644 apitest/src/main/resources/mimoto/SendOtpForVid/createSendOTPResult.hbs create mode 100644 apitest/src/main/resources/mimoto/ValidateOTP/ValidateOTP.hbs create mode 100644 apitest/src/main/resources/mimoto/ValidateOTP/ValidateOTP.yml create mode 100644 apitest/src/main/resources/mimoto/ValidateOTP/ValidateOTPResult.hbs create mode 100644 apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.hbs create mode 100644 apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml create mode 100644 apitest/src/main/resources/mimoto/WalletBinding/WalletBindingEmptyChallenge.hbs create mode 100644 apitest/src/main/resources/mimoto/WalletBinding/WalletBindingResult.hbs create mode 100644 apitest/src/main/resources/mimoto/autoGeneratedId.properties create mode 100644 apitest/src/main/resources/mimoto/error.hbs create mode 100644 apitest/src/main/resources/spring.properties create mode 100644 apitest/testNgXmlFiles/mimotoApi.xml diff --git a/apitest/.gitignore b/apitest/.gitignore new file mode 100644 index 000000000..defd05020 --- /dev/null +++ b/apitest/.gitignore @@ -0,0 +1,40 @@ +*.class +.mtj.tmp/ +*.war +*.ear +hs_err_pid* +#ignored files + +.springBeans +.metadata +.factorypath +.classpath +.project +.settings/ +bin/ +tmp/ + +logs/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.loadpath +.DS_Store +test.txt +.idea/ +.settings/ +.sonarlint/ +.recommenders/ +/.recommenders/ + +**/*.iml +*.log +src/logs/mosip-api-test.log +/target/ +target/ +test-output/ +testng-report/ +/reg +./reg diff --git a/apitest/.temp-Functional Test-classpath-arg-1659588646071.txt b/apitest/.temp-Functional Test-classpath-arg-1659588646071.txt new file mode 100644 index 000000000..bb81464f5 --- /dev/null +++ b/apitest/.temp-Functional Test-classpath-arg-1659588646071.txt @@ -0,0 +1 @@ +-classpath D:\Mosip_Automation_Test\Docker_Test\MOSIP-19726\mosip-functional-tests\automationtests\target\test-classes;D:\Mosip_Automation_Test\Docker_Test\MOSIP-19726\mosip-functional-tests\automationtests\target\classes;C:\Users\Sohan.Dey\.m2\repository\com\opencsv\opencsv\4.1\opencsv-4.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-lang3\3.6\commons-lang3-3.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-text\1.1\commons-text-1.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\ibm\icu\icu4j\63.1\icu4j-63.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\keycloak\keycloak-admin-client\17.0.1\keycloak-admin-client-17.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\keycloak\keycloak-core\17.0.1\keycloak-core-17.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\keycloak\keycloak-common\17.0.1\keycloak-common-17.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-client\3.13.2.Final\resteasy-client-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\ws\rs\jboss-jaxrs-api_2.1_spec\2.0.1.Final\jboss-jaxrs-api_2.1_spec-2.0.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-jaxrs\3.13.2.Final\resteasy-jaxrs-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\reactivestreams\reactive-streams\1.0.3\reactive-streams-1.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\jakarta\validation\jakarta.validation-api\2.0.2\jakarta.validation-api-2.0.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\annotation\jboss-annotations-api_1.3_spec\2.0.1.Final\jboss-annotations-api_1.3_spec-2.0.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\activation\jakarta.activation\1.2.1\jakarta.activation-1.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\stephenc\jcip\jcip-annotations\1.0-1\jcip-annotations-1.0-1.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-multipart-provider\3.13.2.Final\resteasy-multipart-provider-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\mail\jakarta.mail\1.6.5\jakarta.mail-1.6.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\james\apache-mime4j\0.6\apache-mime4j-0.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-jackson2-provider\3.13.2.Final\resteasy-jackson2-provider-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\jaxrs\jackson-jaxrs-json-provider\2.10.5\jackson-jaxrs-json-provider-2.10.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\jaxrs\jackson-jaxrs-base\2.10.5\jackson-jaxrs-base-2.10.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\json-patch\1.9\json-patch-1.9.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\jackson-coreutils\1.6\jackson-coreutils-1.6.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\msg-simple\1.1\msg-simple-1.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\btf\1.2\btf-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-jaxb-provider\3.13.2.Final\resteasy-jaxb-provider-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\xml\bind\jboss-jaxb-api_2.3_spec\2.0.0.Final\jboss-jaxb-api_2.3_spec-2.0.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\javassist\javassist\3.25.0-GA\javassist-3.25.0-GA.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\jknack\handlebars\3.0.0\handlebars-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\antlr\antlr4-runtime\4.5.1-1\antlr4-runtime-4.5.1-1.jar;C:\Users\Sohan.Dey\.m2\repository\org\mozilla\rhino\1.7R4\rhino-1.7R4.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\slf4j-api\1.6.4\slf4j-api-1.6.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-collections4\4.3\commons-collections4-4.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\jsonwebtoken\jjwt\0.6.0\jjwt-0.6.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\flipkart\zjsonpatch\zjsonpatch\0.4.7\zjsonpatch-0.4.7.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk\1.11.368\aws-java-sdk-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dlm\1.11.368\aws-java-sdk-dlm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\jmespath-java\1.11.368\jmespath-java-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-macie\1.11.368\aws-java-sdk-macie-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-eks\1.11.368\aws-java-sdk-eks-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediatailor\1.11.368\aws-java-sdk-mediatailor-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-neptune\1.11.368\aws-java-sdk-neptune-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-pi\1.11.368\aws-java-sdk-pi-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iot1clickprojects\1.11.368\aws-java-sdk-iot1clickprojects-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iot1clickdevices\1.11.368\aws-java-sdk-iot1clickdevices-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iotanalytics\1.11.368\aws-java-sdk-iotanalytics-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-acmpca\1.11.368\aws-java-sdk-acmpca-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-secretsmanager\1.11.368\aws-java-sdk-secretsmanager-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-fms\1.11.368\aws-java-sdk-fms-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-connect\1.11.368\aws-java-sdk-connect-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-transcribe\1.11.368\aws-java-sdk-transcribe-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-autoscalingplans\1.11.368\aws-java-sdk-autoscalingplans-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-workmail\1.11.368\aws-java-sdk-workmail-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-servicediscovery\1.11.368\aws-java-sdk-servicediscovery-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloud9\1.11.368\aws-java-sdk-cloud9-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-serverlessapplicationrepository\1.11.368\aws-java-sdk-serverlessapplicationrepository-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-alexaforbusiness\1.11.368\aws-java-sdk-alexaforbusiness-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-resourcegroups\1.11.368\aws-java-sdk-resourcegroups-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-comprehend\1.11.368\aws-java-sdk-comprehend-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-translate\1.11.368\aws-java-sdk-translate-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sagemaker\1.11.368\aws-java-sdk-sagemaker-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iotjobsdataplane\1.11.368\aws-java-sdk-iotjobsdataplane-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sagemakerruntime\1.11.368\aws-java-sdk-sagemakerruntime-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-kinesisvideo\1.11.368\aws-java-sdk-kinesisvideo-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-codec-http\4.1.17.Final\netty-codec-http-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-codec\4.1.17.Final\netty-codec-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-handler\4.1.17.Final\netty-handler-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-buffer\4.1.17.Final\netty-buffer-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-common\4.1.17.Final\netty-common-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-transport\4.1.17.Final\netty-transport-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-resolver\4.1.17.Final\netty-resolver-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-appsync\1.11.368\aws-java-sdk-appsync-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-guardduty\1.11.368\aws-java-sdk-guardduty-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mq\1.11.368\aws-java-sdk-mq-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediaconvert\1.11.368\aws-java-sdk-mediaconvert-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediastore\1.11.368\aws-java-sdk-mediastore-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediastoredata\1.11.368\aws-java-sdk-mediastoredata-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-medialive\1.11.368\aws-java-sdk-medialive-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediapackage\1.11.368\aws-java-sdk-mediapackage-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-costexplorer\1.11.368\aws-java-sdk-costexplorer-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-pricing\1.11.368\aws-java-sdk-pricing-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mobile\1.11.368\aws-java-sdk-mobile-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudhsmv2\1.11.368\aws-java-sdk-cloudhsmv2-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-glue\1.11.368\aws-java-sdk-glue-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-migrationhub\1.11.368\aws-java-sdk-migrationhub-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dax\1.11.368\aws-java-sdk-dax-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-greengrass\1.11.368\aws-java-sdk-greengrass-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-athena\1.11.368\aws-java-sdk-athena-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-marketplaceentitlement\1.11.368\aws-java-sdk-marketplaceentitlement-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codestar\1.11.368\aws-java-sdk-codestar-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lexmodelbuilding\1.11.368\aws-java-sdk-lexmodelbuilding-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-resourcegroupstaggingapi\1.11.368\aws-java-sdk-resourcegroupstaggingapi-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-pinpoint\1.11.368\aws-java-sdk-pinpoint-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-xray\1.11.368\aws-java-sdk-xray-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-opsworkscm\1.11.368\aws-java-sdk-opsworkscm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-support\1.11.368\aws-java-sdk-support-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-simpledb\1.11.368\aws-java-sdk-simpledb-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-servicecatalog\1.11.368\aws-java-sdk-servicecatalog-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-servermigration\1.11.368\aws-java-sdk-servermigration-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-simpleworkflow\1.11.368\aws-java-sdk-simpleworkflow-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-storagegateway\1.11.368\aws-java-sdk-storagegateway-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-route53\1.11.368\aws-java-sdk-route53-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-s3\1.11.368\aws-java-sdk-s3-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-importexport\1.11.368\aws-java-sdk-importexport-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sts\1.11.368\aws-java-sdk-sts-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sqs\1.11.368\aws-java-sdk-sqs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-rds\1.11.368\aws-java-sdk-rds-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-redshift\1.11.368\aws-java-sdk-redshift-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticbeanstalk\1.11.368\aws-java-sdk-elasticbeanstalk-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-glacier\1.11.368\aws-java-sdk-glacier-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iam\1.11.368\aws-java-sdk-iam-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-datapipeline\1.11.368\aws-java-sdk-datapipeline-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticloadbalancing\1.11.368\aws-java-sdk-elasticloadbalancing-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticloadbalancingv2\1.11.368\aws-java-sdk-elasticloadbalancingv2-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-emr\1.11.368\aws-java-sdk-emr-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticache\1.11.368\aws-java-sdk-elasticache-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elastictranscoder\1.11.368\aws-java-sdk-elastictranscoder-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ec2\1.11.368\aws-java-sdk-ec2-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dynamodb\1.11.368\aws-java-sdk-dynamodb-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sns\1.11.368\aws-java-sdk-sns-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-budgets\1.11.368\aws-java-sdk-budgets-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudtrail\1.11.368\aws-java-sdk-cloudtrail-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudwatch\1.11.368\aws-java-sdk-cloudwatch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-logs\1.11.368\aws-java-sdk-logs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-events\1.11.368\aws-java-sdk-events-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cognitoidentity\1.11.368\aws-java-sdk-cognitoidentity-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cognitosync\1.11.368\aws-java-sdk-cognitosync-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-directconnect\1.11.368\aws-java-sdk-directconnect-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudformation\1.11.368\aws-java-sdk-cloudformation-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudfront\1.11.368\aws-java-sdk-cloudfront-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-clouddirectory\1.11.368\aws-java-sdk-clouddirectory-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-kinesis\1.11.368\aws-java-sdk-kinesis-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-opsworks\1.11.368\aws-java-sdk-opsworks-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ses\1.11.368\aws-java-sdk-ses-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-autoscaling\1.11.368\aws-java-sdk-autoscaling-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudsearch\1.11.368\aws-java-sdk-cloudsearch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudwatchmetrics\1.11.368\aws-java-sdk-cloudwatchmetrics-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codedeploy\1.11.368\aws-java-sdk-codedeploy-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codepipeline\1.11.368\aws-java-sdk-codepipeline-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-kms\1.11.368\aws-java-sdk-kms-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-config\1.11.368\aws-java-sdk-config-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lambda\1.11.368\aws-java-sdk-lambda-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ecs\1.11.368\aws-java-sdk-ecs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ecr\1.11.368\aws-java-sdk-ecr-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudhsm\1.11.368\aws-java-sdk-cloudhsm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ssm\1.11.368\aws-java-sdk-ssm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-workspaces\1.11.368\aws-java-sdk-workspaces-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-machinelearning\1.11.368\aws-java-sdk-machinelearning-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-directory\1.11.368\aws-java-sdk-directory-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-efs\1.11.368\aws-java-sdk-efs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codecommit\1.11.368\aws-java-sdk-codecommit-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-devicefarm\1.11.368\aws-java-sdk-devicefarm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticsearch\1.11.368\aws-java-sdk-elasticsearch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-waf\1.11.368\aws-java-sdk-waf-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-marketplacecommerceanalytics\1.11.368\aws-java-sdk-marketplacecommerceanalytics-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-inspector\1.11.368\aws-java-sdk-inspector-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iot\1.11.368\aws-java-sdk-iot-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-api-gateway\1.11.368\aws-java-sdk-api-gateway-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-acm\1.11.368\aws-java-sdk-acm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-gamelift\1.11.368\aws-java-sdk-gamelift-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dms\1.11.368\aws-java-sdk-dms-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-marketplacemeteringservice\1.11.368\aws-java-sdk-marketplacemeteringservice-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cognitoidp\1.11.368\aws-java-sdk-cognitoidp-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-discovery\1.11.368\aws-java-sdk-discovery-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-applicationautoscaling\1.11.368\aws-java-sdk-applicationautoscaling-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-snowball\1.11.368\aws-java-sdk-snowball-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-rekognition\1.11.368\aws-java-sdk-rekognition-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-polly\1.11.368\aws-java-sdk-polly-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lightsail\1.11.368\aws-java-sdk-lightsail-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-stepfunctions\1.11.368\aws-java-sdk-stepfunctions-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-health\1.11.368\aws-java-sdk-health-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-costandusagereport\1.11.368\aws-java-sdk-costandusagereport-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codebuild\1.11.368\aws-java-sdk-codebuild-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-appstream\1.11.368\aws-java-sdk-appstream-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-shield\1.11.368\aws-java-sdk-shield-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-batch\1.11.368\aws-java-sdk-batch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lex\1.11.368\aws-java-sdk-lex-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mechanicalturkrequester\1.11.368\aws-java-sdk-mechanicalturkrequester-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-organizations\1.11.368\aws-java-sdk-organizations-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-workdocs\1.11.368\aws-java-sdk-workdocs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-core\1.11.368\aws-java-sdk-core-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\software\amazon\ion\ion-java\1.0.2\ion-java-1.0.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-cbor\2.6.7\jackson-dataformat-cbor-2.6.7.jar;C:\Users\Sohan.Dey\.m2\repository\joda-time\joda-time\2.8.1\joda-time-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-models\1.11.368\aws-java-sdk-models-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-swf-libraries\1.11.22\aws-java-sdk-swf-libraries-1.11.22.jar;C:\Users\Sohan.Dey\.m2\repository\com\aventstack\extentreports\3.0.0\extentreports-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\freemarker\freemarker\2.3.23\freemarker-2.3.23.jar;C:\Users\Sohan.Dey\.m2\repository\org\mongodb\mongodb-driver\3.3.0\mongodb-driver-3.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\mongodb\bson\3.3.0\bson-3.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\mongodb\mongodb-driver-core\3.3.0\mongodb-driver-core-3.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\httpcomponents\httpmime\4.5.2\httpmime-4.5.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\relevantcodes\extentreports\2.41.2\extentreports-2.41.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\jsoup\jsoup\1.8.3\jsoup-1.8.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\xerial\sqlite-jdbc\3.8.11.1\sqlite-jdbc-3.8.11.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\jayway\jsonpath\json-path\2.4.0\json-path-2.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\net\minidev\json-smart\2.3\json-smart-2.3.jar;C:\Users\Sohan.Dey\.m2\repository\net\minidev\accessors-smart\1.2\accessors-smart-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\ow2\asm\asm\5.0.4\asm-5.0.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-model\3.3.9\maven-model-3.3.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-utils\3.0.22\plexus-utils-3.0.22.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\rest-assured\3.0.7\rest-assured-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\groovy\groovy\2.4.12\groovy-2.4.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\groovy\groovy-xml\2.4.12\groovy-xml-2.4.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\hamcrest\hamcrest-library\1.3\hamcrest-library-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\ccil\cowan\tagsoup\tagsoup\1.2.1\tagsoup-1.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\json-path\3.0.7\json-path-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\groovy\groovy-json\2.4.12\groovy-json-2.4.12.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\rest-assured-common\3.0.7\rest-assured-common-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\xml-path\3.0.7\xml-path-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\testng\testng\6.11\testng-6.11.jar;C:\Users\Sohan.Dey\.m2\repository\com\beust\jcommander\1.64\jcommander-1.64.jar;C:\Users\Sohan.Dey\.m2\repository\org\yaml\snakeyaml\1.17\snakeyaml-1.17.jar;C:\Users\Sohan.Dey\.m2\repository\org\zeroturnaround\zt-zip\1.13\zt-zip-1.13.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.10.1\jackson-core-2.10.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.9.5\jackson-annotations-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.10.5\jackson-databind-2.10.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-xml\2.9.5\jackson-dataformat-xml-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\module\jackson-module-jaxb-annotations\2.9.5\jackson-module-jaxb-annotations-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\woodstox\stax2-api\3.1.4\stax2-api-3.1.4.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\woodstox\woodstox-core\5.0.3\woodstox-core-5.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\json\json\20180130\json-20180130.jar;C:\Users\Sohan.Dey\.m2\repository\com\googlecode\json-simple\json-simple\1.1.1\json-simple-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\junit\junit\4.10\junit-4.10.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\code\gson\gson\2.8.4\gson-2.8.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\plugins\maven-assembly-plugin\3.1.0\maven-assembly-plugin-3.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-plugin-api\3.0\maven-plugin-api-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\sisu\sisu-inject-plexus\1.4.2\sisu-inject-plexus-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\sisu\sisu-inject-bean\1.4.2\sisu-inject-bean-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\sisu\sisu-guice\2.1.7\sisu-guice-2.1.7-noaop.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-core\3.0\maven-core-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-settings\3.0\maven-settings-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-settings-builder\3.0\maven-settings-builder-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-repository-metadata\3.0\maven-repository-metadata-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-model-builder\3.0\maven-model-builder-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-aether-provider\3.0\maven-aether-provider-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-impl\1.7\aether-impl-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-spi\1.7\aether-spi-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-api\1.7\aether-api-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-util\1.7\aether-util-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-classworlds\2.2.3\plexus-classworlds-2.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-component-annotations\1.5.5\plexus-component-annotations-1.5.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\plexus\plexus-sec-dispatcher\1.3\plexus-sec-dispatcher-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\plexus\plexus-cipher\1.4\plexus-cipher-1.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-artifact\3.0\maven-artifact-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-common-artifact-filters\3.0.1\maven-common-artifact-filters-3.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-shared-utils\3.1.0\maven-shared-utils-3.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-artifact-transfer\0.9.0\maven-artifact-transfer-0.9.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-interpolation\1.24\plexus-interpolation-1.24.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-archiver\3.5\plexus-archiver-3.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-compress\1.14\commons-compress-1.14.jar;C:\Users\Sohan.Dey\.m2\repository\org\iq80\snappy\snappy\0.4\snappy-0.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\tukaani\xz\1.6\xz-1.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\file-management\3.0.0\file-management-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-shared-io\3.0.0\maven-shared-io-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-compat\3.0\maven-compat-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\wagon\wagon-provider-api\2.10\wagon-provider-api-2.10.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-filtering\3.1.1\maven-filtering-3.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\plexus\plexus-build-api\0.0.7\plexus-build-api-0.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-io\3.0.0\plexus-io-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-archiver\3.2.0\maven-archiver-3.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\guava\guava\19.0\guava-19.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\hibernate\hibernate-core\5.4.2.Final\hibernate-core-5.4.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\javax\persistence\javax.persistence-api\2.2\javax.persistence-api-2.2.jar;C:\Users\Sohan.Dey\.m2\repository\net\bytebuddy\byte-buddy\1.9.10\byte-buddy-1.9.10.jar;C:\Users\Sohan.Dey\.m2\repository\antlr\antlr\2.7.7\antlr-2.7.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\transaction\jboss-transaction-api_1.2_spec\1.1.1.Final\jboss-transaction-api_1.2_spec-1.1.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\jandex\2.0.5.Final\jandex-2.0.5.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\classmate\1.3.4\classmate-1.3.4.jar;C:\Users\Sohan.Dey\.m2\repository\javax\activation\javax.activation-api\1.2.0\javax.activation-api-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\dom4j\dom4j\2.1.1\dom4j-2.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\hibernate\common\hibernate-commons-annotations\5.1.0.Final\hibernate-commons-annotations-5.1.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\javax\xml\bind\jaxb-api\2.3.1\jaxb-api-2.3.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\glassfish\jaxb\jaxb-runtime\2.3.1\jaxb-runtime-2.3.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\glassfish\jaxb\txw2\2.3.1\txw2-2.3.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\istack\istack-commons-runtime\3.0.7\istack-commons-runtime-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\jvnet\staxex\stax-ex\1.8\stax-ex-1.8.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\xml\fastinfoset\FastInfoset\1.2.15\FastInfoset-1.2.15.jar;C:\Users\Sohan.Dey\.m2\repository\commons-beanutils\commons-beanutils\1.9.2\commons-beanutils-1.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\commons-logging\commons-logging\1.1.1\commons-logging-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\commons-collections\commons-collections\3.2.1\commons-collections-3.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\swagger-annotations\1.5.20\swagger-annotations-1.5.20.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.5\jackson-datatype-jsr310-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\postgresql\postgresql\42.2.2\postgresql-42.2.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\slf4j-log4j12\1.6.2\slf4j-log4j12-1.6.2.jar;C:\Users\Sohan.Dey\.m2\repository\log4j\log4j\1.2.16\log4j-1.2.16.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\logging\log4j\log4j-api\2.11.1\log4j-api-2.11.1.jar;C:\Users\Sohan.Dey\.m2\repository\net\lingala\zip4j\zip4j\1.3.2\zip4j-1.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\httpcomponents\httpclient\4.5.3\httpclient-4.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\httpcomponents\httpcore\4.4.6\httpcore-4.4.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-client\2.8.1\hadoop-client-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-common\2.8.1\hadoop-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\commons-cli\commons-cli\1.2\commons-cli-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\xmlenc\xmlenc\0.52\xmlenc-0.52.jar;C:\Users\Sohan.Dey\.m2\repository\commons-net\commons-net\3.1\commons-net-3.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\mortbay\jetty\jetty-sslengine\6.1.26\jetty-sslengine-6.1.26.jar;C:\Users\Sohan.Dey\.m2\repository\javax\servlet\jsp\jsp-api\2.1\jsp-api-2.1.jar;C:\Users\Sohan.Dey\.m2\repository\commons-configuration\commons-configuration\1.6\commons-configuration-1.6.jar;C:\Users\Sohan.Dey\.m2\repository\commons-digester\commons-digester\1.8\commons-digester-1.8.jar;C:\Users\Sohan.Dey\.m2\repository\commons-beanutils\commons-beanutils-core\1.8.0\commons-beanutils-core-1.8.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-core-asl\1.9.13\jackson-core-asl-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-mapper-asl\1.9.13\jackson-mapper-asl-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\avro\avro\1.7.4\avro-1.7.4.jar;C:\Users\Sohan.Dey\.m2\repository\com\thoughtworks\paranamer\paranamer\2.3\paranamer-2.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\xerial\snappy\snappy-java\1.0.4.1\snappy-java-1.0.4.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\protobuf\protobuf-java\2.5.0\protobuf-java-2.5.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-auth\2.8.1\hadoop-auth-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\server\apacheds-kerberos-codec\2.0.0-M15\apacheds-kerberos-codec-2.0.0-M15.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\server\apacheds-i18n\2.0.0-M15\apacheds-i18n-2.0.0-M15.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\api\api-asn1-api\1.0.0-M20\api-asn1-api-1.0.0-M20.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\api\api-util\1.0.0-M20\api-util-1.0.0-M20.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\curator\curator-framework\2.7.1\curator-framework-2.7.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\curator\curator-client\2.7.1\curator-client-2.7.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\curator\curator-recipes\2.7.1\curator-recipes-2.7.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\code\findbugs\jsr305\3.0.0\jsr305-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\htrace\htrace-core4\4.0.1-incubating\htrace-core4-4.0.1-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\zookeeper\zookeeper\3.4.6\zookeeper-3.4.6.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty\3.7.0.Final\netty-3.7.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-hdfs\2.8.1\hadoop-hdfs-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-hdfs-client\2.8.1\hadoop-hdfs-client-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\squareup\okhttp\okhttp\2.4.0\okhttp-2.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\squareup\okio\okio\1.4.0\okio-1.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-app\2.8.1\hadoop-mapreduce-client-app-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-common\2.8.1\hadoop-mapreduce-client-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-client\2.8.1\hadoop-yarn-client-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-server-common\2.8.1\hadoop-yarn-server-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-shuffle\2.8.1\hadoop-mapreduce-client-shuffle-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\fusesource\leveldbjni\leveldbjni-all\1.8\leveldbjni-all-1.8.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-api\2.8.1\hadoop-yarn-api-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-core\2.8.1\hadoop-mapreduce-client-core-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-common\2.8.1\hadoop-yarn-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\javax\servlet\servlet-api\2.5\servlet-api-2.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\mortbay\jetty\jetty-util\6.1.26\jetty-util-6.1.26.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\jersey\jersey-core\1.9\jersey-core-1.9.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\jersey\jersey-client\1.9\jersey-client-1.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-jaxrs\1.9.13\jackson-jaxrs-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-xc\1.9.13\jackson-xc-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-jobclient\2.8.1\hadoop-mapreduce-client-jobclient-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-annotations\2.8.1\hadoop-annotations-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\bouncycastle\bcprov-jdk16\1.45\bcprov-jdk16-1.45.jar;C:\Users\Sohan.Dey\.m2\repository\commons-codec\commons-codec\1.11\commons-codec-1.11.jar;C:\Users\Sohan.Dey\.m2\repository\commons-io\commons-io\2.6\commons-io-2.6.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\zxing\core\3.3.3\core-3.3.3.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\zxing\javase\2.0\javase-2.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\hamcrest\hamcrest-all\1.3\hamcrest-all-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\velocity\velocity\1.7\velocity-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\commons-lang\commons-lang\2.4\commons-lang-2.4.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\html2pdf\2.0.0\html2pdf-2.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\forms\7.1.0\forms-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\kernel\7.1.0\kernel-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\io\7.1.0\io-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\layout\7.1.0\layout-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\itextpdf\5.5.13\itextpdf-5.5.13.jar;C:\Users\Sohan.Dey\.m2\repository\javax\mail\javax.mail-api\1.6.2\javax.mail-api-1.6.2.jar;D:\Mosip_Automation_Test\Docker_Test\MOSIP-19726\mosip-functional-tests\authentication-demo-service\target\classes;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.0.2.RELEASE\spring-boot-starter-web-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-json\2.0.2.RELEASE\spring-boot-starter-json-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.5\jackson-datatype-jdk8-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.5\jackson-module-parameter-names-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\2.0.2.RELEASE\spring-boot-starter-tomcat-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\8.5.31\tomcat-embed-el-8.5.31.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\8.5.31\tomcat-embed-websocket-8.5.31.jar;C:\Users\Sohan.Dey\.m2\repository\org\hibernate\validator\hibernate-validator\6.0.9.Final\hibernate-validator-6.0.9.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-web\5.0.6.RELEASE\spring-web-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-webmvc\5.0.6.RELEASE\spring-webmvc-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-expression\5.0.6.RELEASE\spring-expression-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-test\2.0.2.RELEASE\spring-boot-starter-test-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-test\2.0.2.RELEASE\spring-boot-test-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-test-autoconfigure\2.0.2.RELEASE\spring-boot-test-autoconfigure-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\assertj\assertj-core\3.9.1\assertj-core-3.9.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\skyscreamer\jsonassert\1.5.0\jsonassert-1.5.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-core\5.0.6.RELEASE\spring-core-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-jcl\5.0.6.RELEASE\spring-jcl-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-test\5.0.6.RELEASE\spring-test-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\xmlunit\xmlunit-core\2.5.1\xmlunit-core-2.5.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-swagger-ui\2.9.2\springfox-swagger-ui-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-spring-web\2.9.2\springfox-spring-web-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-swagger2\2.9.2\springfox-swagger2-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-spi\2.9.2\springfox-spi-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-core\2.9.2\springfox-core-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-schema\2.9.2\springfox-schema-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-swagger-common\2.9.2\springfox-swagger-common-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\plugin\spring-plugin-core\1.2.0.RELEASE\spring-plugin-core-1.2.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\plugin\spring-plugin-metadata\1.2.0.RELEASE\spring-plugin-metadata-1.2.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\mapstruct\mapstruct\1.2.0.Final\mapstruct-1.2.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\javax\ws\rs\javax.ws.rs-api\2.0\javax.ws.rs-api-2.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\authentication\authentication-core\1.2.0.1-SNAPSHOT\authentication-core-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-cache\2.0.2.RELEASE\spring-boot-starter-cache-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-context-support\5.0.6.RELEASE\spring-context-support-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\machinezoo\sourceafis\sourceafis\3.4.0\sourceafis-3.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\net\sf\trove4j\trove4j\3.0.3\trove4j-3.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\com\machinezoo\noexception\noexception\1.3.2\noexception-1.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\mhshams\jnbis\2.0.1\jnbis-2.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\sanselan\sanselan\0.97-incubator\sanselan-0.97-incubator.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\idrepository\id-repository-core\1.2.0\id-repository-core-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-biosdk-provider\1.2.0\kernel-biosdk-provider-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-biometrics-api\1.2.0\kernel-biometrics-api-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-demographics-api\1.2.0\kernel-demographics-api-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-webflux\2.0.2.RELEASE\spring-boot-starter-webflux-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-reactor-netty\2.0.2.RELEASE\spring-boot-starter-reactor-netty-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\projectreactor\ipc\reactor-netty\0.7.7.RELEASE\reactor-netty-0.7.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-handler-proxy\4.1.24.Final\netty-handler-proxy-4.1.24.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-codec-socks\4.1.24.Final\netty-codec-socks-4.1.24.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-transport-native-epoll\4.1.24.Final\netty-transport-native-epoll-4.1.24.Final-linux-x86_64.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-transport-native-unix-common\4.1.24.Final\netty-transport-native-unix-common-4.1.24.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-webflux\5.0.6.RELEASE\spring-webflux-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\projectreactor\reactor-core\3.1.7.RELEASE\reactor-core-3.1.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\synchronoss\cloud\nio-multipart-parser\1.1.0\nio-multipart-parser-1.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\synchronoss\cloud\nio-stream-storage\1.1.3\nio-stream-storage-1.1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\springdoc\springdoc-openapi-ui\1.5.10\springdoc-openapi-ui-1.5.10.jar;C:\Users\Sohan.Dey\.m2\repository\org\springdoc\springdoc-openapi-webmvc-core\1.5.10\springdoc-openapi-webmvc-core-1.5.10.jar;C:\Users\Sohan.Dey\.m2\repository\org\springdoc\springdoc-openapi-common\1.5.10\springdoc-openapi-common-1.5.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-models\2.1.10\swagger-models-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-annotations\2.1.10\swagger-annotations-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-integration\2.1.10\swagger-integration-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-core\2.1.10\swagger-core-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\jakarta\xml\bind\jakarta.xml.bind-api\2.3.2\jakarta.xml.bind-api-2.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\jakarta\activation\jakarta.activation-api\1.2.1\jakarta.activation-api-1.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-yaml\2.12.1\jackson-dataformat-yaml-2.12.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\github\classgraph\classgraph\4.8.69\classgraph-4.8.69.jar;C:\Users\Sohan.Dey\.m2\repository\org\webjars\swagger-ui\3.51.1\swagger-ui-3.51.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\webjars\webjars-locator-core\0.45\webjars-locator-core-0.45.jar;C:\Users\Sohan.Dey\.m2\repository\commons-fileupload\commons-fileupload\1.4\commons-fileupload-1.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\mockito\mockito-core\2.23.4\mockito-core-2.23.4.jar;C:\Users\Sohan.Dey\.m2\repository\net\bytebuddy\byte-buddy-agent\1.9.3\byte-buddy-agent-1.9.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\objenesis\objenesis\2.6\objenesis-2.6.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-websubclient-api\1.2.0.1-SNAPSHOT\kernel-websubclient-api-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-aspects\5.0.6.RELEASE\spring-aspects-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\aspectj\aspectjweaver\1.8.13\aspectjweaver-1.8.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\owasp\encoder\encoder\1.2.3\encoder-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\tensorflow\tensorflow\1.12.0\tensorflow-1.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\tensorflow\libtensorflow\1.12.0\libtensorflow-1.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\tensorflow\libtensorflow_jni\1.12.0\libtensorflow_jni-1.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-templatemanager-velocity\1.2.0.1-SNAPSHOT\kernel-templatemanager-velocity-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\javax\servlet\javax.servlet-api\4.0.1\javax.servlet-api-4.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-starter-config\2.0.0.RELEASE\spring-cloud-starter-config-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-starter\2.0.0.RELEASE\spring-cloud-starter-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-context\2.0.0.RELEASE\spring-cloud-context-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-crypto\5.0.6.RELEASE\spring-security-crypto-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-commons\2.0.0.RELEASE\spring-cloud-commons-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-rsa\1.0.5.RELEASE\spring-security-rsa-1.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-config-client\2.0.0.RELEASE\spring-cloud-config-client-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\jai-imageio\jai-imageio-jpeg2000\1.3.0\jai-imageio-jpeg2000-1.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\jai-imageio\jai-imageio-core\1.3.0\jai-imageio-core-1.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-keymanager-service\1.2.0.1-SNAPSHOT\kernel-keymanager-service-1.2.0.1-SNAPSHOT-lib.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-test\5.0.5.RELEASE\spring-security-test-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-core\5.0.5.RELEASE\spring-security-core-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-pdfgenerator-itext\1.2.0.1-SNAPSHOT\kernel-pdfgenerator-itext-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\barcodes\7.1.0\barcodes-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\font-asian\7.1.0\font-asian-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\hyph\7.1.0\hyph-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\pdfa\7.1.0\pdfa-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\sign\7.1.0\sign-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\tool\xmlworker\5.5.13\xmlworker-5.5.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\bouncycastle\bcpkix-jdk15on\1.66\bcpkix-jdk15on-1.66.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-data-jpa\2.0.2.RELEASE\spring-boot-starter-data-jpa-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\2.0.2.RELEASE\spring-boot-starter-jdbc-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\zaxxer\HikariCP\2.7.9\HikariCP-2.7.9.jar;C:\Users\Sohan.Dey\.m2\repository\com\h2database\h2\1.4.197\h2-1.4.197.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\microsoft\TSS.Java\0.3.0\TSS.Java-0.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\net\java\dev\jna\jna\4.4.0\jna-4.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\cache2k\cache2k-api\2.4.1.Final\cache2k-api-2.4.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\cache2k\cache2k-core\2.4.1.Final\cache2k-core-2.4.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\nimbusds\nimbus-jose-jwt\9.14\nimbus-jose-jwt-9.14.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-core\1.2.0.1-SNAPSHOT\kernel-core-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter\2.0.2.RELEASE\spring-boot-starter-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot\2.0.2.RELEASE\spring-boot-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.0.2.RELEASE\spring-boot-autoconfigure-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.0.2.RELEASE\spring-boot-starter-logging-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.10.0\log4j-to-slf4j-2.10.0.jar;C:\Users\Sohan.Dey\.m2\repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\data\spring-data-jpa\2.0.7.RELEASE\spring-data-jpa-2.0.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\data\spring-data-commons\2.0.7.RELEASE\spring-data-commons-2.0.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-orm\5.0.6.RELEASE\spring-orm-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-jdbc\5.0.6.RELEASE\spring-jdbc-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-context\5.0.6.RELEASE\spring-context-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-aop\5.0.6.RELEASE\spring-aop-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-tx\5.0.6.RELEASE\spring-tx-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-beans\5.0.6.RELEASE\spring-beans-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\aspectj\aspectjrt\1.8.12\aspectjrt-1.8.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-security\2.0.2.RELEASE\spring-boot-starter-security-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-config\5.0.5.RELEASE\spring-security-config-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-web\5.0.5.RELEASE\spring-security-web-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\javax\transaction\javax.transaction-api\1.3\javax.transaction-api-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-math3\3.6.1\commons-math3-3.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\bouncycastle\bcprov-jdk15on\1.66\bcprov-jdk15on-1.66.jar;C:\Users\Sohan.Dey\.m2\repository\javax\interceptor\javax.interceptor-api\1.2\javax.interceptor-api-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\code\findbugs\annotations\3.0.1\annotations-3.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\net\jcip\jcip-annotations\1.0\jcip-annotations-1.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\swagger-models\1.5.21\swagger-models-1.5.21.jar;C:\Users\Sohan.Dey\.m2\repository\com\auth0\java-jwt\3.8.1\java-jwt-3.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\micrometer\micrometer-core\1.4.2\micrometer-core-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\hdrhistogram\HdrHistogram\2.1.12\HdrHistogram-2.1.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\latencyutils\LatencyUtils\2.0.3\LatencyUtils-2.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\micrometer\micrometer-registry-prometheus\1.4.2\micrometer-registry-prometheus-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\prometheus\simpleclient_common\0.8.1\simpleclient_common-0.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\prometheus\simpleclient\0.8.1\simpleclient-0.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\jul-to-slf4j\1.7.25\jul-to-slf4j-1.7.25.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\jcl-over-slf4j\1.7.25\jcl-over-slf4j-1.7.25.jar;C:\Users\Sohan.Dey\.m2\repository\javax\activation\activation\1.1\activation-1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-starter-sleuth\2.0.4.RELEASE\spring-cloud-starter-sleuth-2.0.4.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-aop\2.0.9.RELEASE\spring-boot-starter-aop-2.0.9.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-sleuth-core\2.0.4.RELEASE\spring-cloud-sleuth-core-2.0.4.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave\5.6.1\brave-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\zipkin2\zipkin\2.12.0\zipkin-2.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\reporter2\zipkin-reporter\2.7.14\zipkin-reporter-2.7.14.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-context-log4j2\5.6.1\brave-context-log4j2-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-spring-web\5.6.1\brave-instrumentation-spring-web-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-http\5.6.1\brave-instrumentation-http-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-spring-rabbit\5.6.1\brave-instrumentation-spring-rabbit-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-kafka-clients\5.6.1\brave-instrumentation-kafka-clients-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-httpclient\5.6.1\brave-instrumentation-httpclient-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-httpasyncclient\5.6.1\brave-instrumentation-httpasyncclient-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-spring-webmvc\5.6.1\brave-instrumentation-spring-webmvc-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-servlet\5.6.1\brave-instrumentation-servlet-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-actuator\2.0.2.RELEASE\spring-boot-starter-actuator-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-actuator-autoconfigure\2.0.2.RELEASE\spring-boot-actuator-autoconfigure-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-actuator\2.0.2.RELEASE\spring-boot-actuator-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\8.5.55\tomcat-embed-core-8.5.55.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\tomcat-annotations-api\8.5.55\tomcat-annotations-api-8.5.55.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\retry\spring-retry\1.2.1.RELEASE\spring-retry-1.2.1.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\module\jackson-module-afterburner\2.12.0\jackson-module-afterburner-2.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-registration-packet-manager\1.1.5.3\kernel-registration-packet-manager-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-keygenerator-bouncycastle\1.1.5.3\kernel-keygenerator-bouncycastle-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-cbeffutil-api\1.1.5.3\kernel-cbeffutil-api-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-logger-logback\1.1.5.3\kernel-logger-logback-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\net\logstash\logback\logstash-logback-encoder\6.4\logstash-logback-encoder-6.4.jar;C:\Users\Sohan.Dey\.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\ch\qos\logback\logback-access\1.2.3\logback-access-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-crypto-jce\1.1.5.3\kernel-crypto-jce-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\bitbucket\b_c\jose4j\0.6.5\jose4j-0.6.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\wink\wink-json4j-provider\1.1.2-incubating\wink-json4j-provider-1.1.2-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\wink\wink-common\1.1.2-incubating\wink-common-1.1.2-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\xml\bind\jaxb-impl\2.2.1.1\jaxb-impl-2.2.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\geronimo\specs\geronimo-annotation_1.1_spec\1.0\geronimo-annotation_1.1_spec-1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\wink\wink-json4j\1.1.2-incubating\wink-json4j-1.1.2-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\javax\ws\rs\jsr311-api\1.1.1\jsr311-api-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\checkerframework\checker-qual\2.9.0\checker-qual-2.9.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\activemq\activemq-broker\5.15.9\activemq-broker-5.15.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\activemq\activemq-client\5.15.9\activemq-client-5.15.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\geronimo\specs\geronimo-jms_1.1_spec\1.1.1\geronimo-jms_1.1_spec-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\fusesource\hawtbuf\hawtbuf\1.11\hawtbuf-1.11.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\geronimo\specs\geronimo-j2ee-management_1.1_spec\1.0.1\geronimo-j2ee-management_1.1_spec-1.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\activemq\activemq-openwire-legacy\5.15.9\activemq-openwire-legacy-5.15.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\projectlombok\lombok\1.18.8\lombok-1.18.8.jar \ No newline at end of file diff --git a/apitest/.temp-Functional Test-classpath-arg-1659589592502.txt b/apitest/.temp-Functional Test-classpath-arg-1659589592502.txt new file mode 100644 index 000000000..bb81464f5 --- /dev/null +++ b/apitest/.temp-Functional Test-classpath-arg-1659589592502.txt @@ -0,0 +1 @@ +-classpath D:\Mosip_Automation_Test\Docker_Test\MOSIP-19726\mosip-functional-tests\automationtests\target\test-classes;D:\Mosip_Automation_Test\Docker_Test\MOSIP-19726\mosip-functional-tests\automationtests\target\classes;C:\Users\Sohan.Dey\.m2\repository\com\opencsv\opencsv\4.1\opencsv-4.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-lang3\3.6\commons-lang3-3.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-text\1.1\commons-text-1.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\ibm\icu\icu4j\63.1\icu4j-63.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\keycloak\keycloak-admin-client\17.0.1\keycloak-admin-client-17.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\keycloak\keycloak-core\17.0.1\keycloak-core-17.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\keycloak\keycloak-common\17.0.1\keycloak-common-17.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-client\3.13.2.Final\resteasy-client-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\ws\rs\jboss-jaxrs-api_2.1_spec\2.0.1.Final\jboss-jaxrs-api_2.1_spec-2.0.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-jaxrs\3.13.2.Final\resteasy-jaxrs-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\reactivestreams\reactive-streams\1.0.3\reactive-streams-1.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\jakarta\validation\jakarta.validation-api\2.0.2\jakarta.validation-api-2.0.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\annotation\jboss-annotations-api_1.3_spec\2.0.1.Final\jboss-annotations-api_1.3_spec-2.0.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\activation\jakarta.activation\1.2.1\jakarta.activation-1.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\stephenc\jcip\jcip-annotations\1.0-1\jcip-annotations-1.0-1.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-multipart-provider\3.13.2.Final\resteasy-multipart-provider-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\mail\jakarta.mail\1.6.5\jakarta.mail-1.6.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\james\apache-mime4j\0.6\apache-mime4j-0.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-jackson2-provider\3.13.2.Final\resteasy-jackson2-provider-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\jaxrs\jackson-jaxrs-json-provider\2.10.5\jackson-jaxrs-json-provider-2.10.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\jaxrs\jackson-jaxrs-base\2.10.5\jackson-jaxrs-base-2.10.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\json-patch\1.9\json-patch-1.9.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\jackson-coreutils\1.6\jackson-coreutils-1.6.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\msg-simple\1.1\msg-simple-1.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\btf\1.2\btf-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-jaxb-provider\3.13.2.Final\resteasy-jaxb-provider-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\xml\bind\jboss-jaxb-api_2.3_spec\2.0.0.Final\jboss-jaxb-api_2.3_spec-2.0.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\javassist\javassist\3.25.0-GA\javassist-3.25.0-GA.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\jknack\handlebars\3.0.0\handlebars-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\antlr\antlr4-runtime\4.5.1-1\antlr4-runtime-4.5.1-1.jar;C:\Users\Sohan.Dey\.m2\repository\org\mozilla\rhino\1.7R4\rhino-1.7R4.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\slf4j-api\1.6.4\slf4j-api-1.6.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-collections4\4.3\commons-collections4-4.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\jsonwebtoken\jjwt\0.6.0\jjwt-0.6.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\flipkart\zjsonpatch\zjsonpatch\0.4.7\zjsonpatch-0.4.7.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk\1.11.368\aws-java-sdk-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dlm\1.11.368\aws-java-sdk-dlm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\jmespath-java\1.11.368\jmespath-java-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-macie\1.11.368\aws-java-sdk-macie-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-eks\1.11.368\aws-java-sdk-eks-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediatailor\1.11.368\aws-java-sdk-mediatailor-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-neptune\1.11.368\aws-java-sdk-neptune-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-pi\1.11.368\aws-java-sdk-pi-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iot1clickprojects\1.11.368\aws-java-sdk-iot1clickprojects-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iot1clickdevices\1.11.368\aws-java-sdk-iot1clickdevices-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iotanalytics\1.11.368\aws-java-sdk-iotanalytics-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-acmpca\1.11.368\aws-java-sdk-acmpca-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-secretsmanager\1.11.368\aws-java-sdk-secretsmanager-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-fms\1.11.368\aws-java-sdk-fms-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-connect\1.11.368\aws-java-sdk-connect-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-transcribe\1.11.368\aws-java-sdk-transcribe-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-autoscalingplans\1.11.368\aws-java-sdk-autoscalingplans-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-workmail\1.11.368\aws-java-sdk-workmail-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-servicediscovery\1.11.368\aws-java-sdk-servicediscovery-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloud9\1.11.368\aws-java-sdk-cloud9-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-serverlessapplicationrepository\1.11.368\aws-java-sdk-serverlessapplicationrepository-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-alexaforbusiness\1.11.368\aws-java-sdk-alexaforbusiness-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-resourcegroups\1.11.368\aws-java-sdk-resourcegroups-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-comprehend\1.11.368\aws-java-sdk-comprehend-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-translate\1.11.368\aws-java-sdk-translate-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sagemaker\1.11.368\aws-java-sdk-sagemaker-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iotjobsdataplane\1.11.368\aws-java-sdk-iotjobsdataplane-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sagemakerruntime\1.11.368\aws-java-sdk-sagemakerruntime-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-kinesisvideo\1.11.368\aws-java-sdk-kinesisvideo-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-codec-http\4.1.17.Final\netty-codec-http-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-codec\4.1.17.Final\netty-codec-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-handler\4.1.17.Final\netty-handler-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-buffer\4.1.17.Final\netty-buffer-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-common\4.1.17.Final\netty-common-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-transport\4.1.17.Final\netty-transport-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-resolver\4.1.17.Final\netty-resolver-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-appsync\1.11.368\aws-java-sdk-appsync-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-guardduty\1.11.368\aws-java-sdk-guardduty-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mq\1.11.368\aws-java-sdk-mq-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediaconvert\1.11.368\aws-java-sdk-mediaconvert-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediastore\1.11.368\aws-java-sdk-mediastore-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediastoredata\1.11.368\aws-java-sdk-mediastoredata-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-medialive\1.11.368\aws-java-sdk-medialive-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediapackage\1.11.368\aws-java-sdk-mediapackage-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-costexplorer\1.11.368\aws-java-sdk-costexplorer-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-pricing\1.11.368\aws-java-sdk-pricing-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mobile\1.11.368\aws-java-sdk-mobile-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudhsmv2\1.11.368\aws-java-sdk-cloudhsmv2-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-glue\1.11.368\aws-java-sdk-glue-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-migrationhub\1.11.368\aws-java-sdk-migrationhub-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dax\1.11.368\aws-java-sdk-dax-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-greengrass\1.11.368\aws-java-sdk-greengrass-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-athena\1.11.368\aws-java-sdk-athena-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-marketplaceentitlement\1.11.368\aws-java-sdk-marketplaceentitlement-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codestar\1.11.368\aws-java-sdk-codestar-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lexmodelbuilding\1.11.368\aws-java-sdk-lexmodelbuilding-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-resourcegroupstaggingapi\1.11.368\aws-java-sdk-resourcegroupstaggingapi-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-pinpoint\1.11.368\aws-java-sdk-pinpoint-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-xray\1.11.368\aws-java-sdk-xray-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-opsworkscm\1.11.368\aws-java-sdk-opsworkscm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-support\1.11.368\aws-java-sdk-support-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-simpledb\1.11.368\aws-java-sdk-simpledb-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-servicecatalog\1.11.368\aws-java-sdk-servicecatalog-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-servermigration\1.11.368\aws-java-sdk-servermigration-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-simpleworkflow\1.11.368\aws-java-sdk-simpleworkflow-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-storagegateway\1.11.368\aws-java-sdk-storagegateway-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-route53\1.11.368\aws-java-sdk-route53-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-s3\1.11.368\aws-java-sdk-s3-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-importexport\1.11.368\aws-java-sdk-importexport-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sts\1.11.368\aws-java-sdk-sts-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sqs\1.11.368\aws-java-sdk-sqs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-rds\1.11.368\aws-java-sdk-rds-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-redshift\1.11.368\aws-java-sdk-redshift-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticbeanstalk\1.11.368\aws-java-sdk-elasticbeanstalk-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-glacier\1.11.368\aws-java-sdk-glacier-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iam\1.11.368\aws-java-sdk-iam-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-datapipeline\1.11.368\aws-java-sdk-datapipeline-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticloadbalancing\1.11.368\aws-java-sdk-elasticloadbalancing-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticloadbalancingv2\1.11.368\aws-java-sdk-elasticloadbalancingv2-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-emr\1.11.368\aws-java-sdk-emr-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticache\1.11.368\aws-java-sdk-elasticache-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elastictranscoder\1.11.368\aws-java-sdk-elastictranscoder-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ec2\1.11.368\aws-java-sdk-ec2-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dynamodb\1.11.368\aws-java-sdk-dynamodb-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sns\1.11.368\aws-java-sdk-sns-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-budgets\1.11.368\aws-java-sdk-budgets-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudtrail\1.11.368\aws-java-sdk-cloudtrail-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudwatch\1.11.368\aws-java-sdk-cloudwatch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-logs\1.11.368\aws-java-sdk-logs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-events\1.11.368\aws-java-sdk-events-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cognitoidentity\1.11.368\aws-java-sdk-cognitoidentity-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cognitosync\1.11.368\aws-java-sdk-cognitosync-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-directconnect\1.11.368\aws-java-sdk-directconnect-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudformation\1.11.368\aws-java-sdk-cloudformation-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudfront\1.11.368\aws-java-sdk-cloudfront-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-clouddirectory\1.11.368\aws-java-sdk-clouddirectory-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-kinesis\1.11.368\aws-java-sdk-kinesis-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-opsworks\1.11.368\aws-java-sdk-opsworks-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ses\1.11.368\aws-java-sdk-ses-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-autoscaling\1.11.368\aws-java-sdk-autoscaling-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudsearch\1.11.368\aws-java-sdk-cloudsearch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudwatchmetrics\1.11.368\aws-java-sdk-cloudwatchmetrics-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codedeploy\1.11.368\aws-java-sdk-codedeploy-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codepipeline\1.11.368\aws-java-sdk-codepipeline-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-kms\1.11.368\aws-java-sdk-kms-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-config\1.11.368\aws-java-sdk-config-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lambda\1.11.368\aws-java-sdk-lambda-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ecs\1.11.368\aws-java-sdk-ecs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ecr\1.11.368\aws-java-sdk-ecr-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudhsm\1.11.368\aws-java-sdk-cloudhsm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ssm\1.11.368\aws-java-sdk-ssm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-workspaces\1.11.368\aws-java-sdk-workspaces-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-machinelearning\1.11.368\aws-java-sdk-machinelearning-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-directory\1.11.368\aws-java-sdk-directory-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-efs\1.11.368\aws-java-sdk-efs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codecommit\1.11.368\aws-java-sdk-codecommit-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-devicefarm\1.11.368\aws-java-sdk-devicefarm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticsearch\1.11.368\aws-java-sdk-elasticsearch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-waf\1.11.368\aws-java-sdk-waf-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-marketplacecommerceanalytics\1.11.368\aws-java-sdk-marketplacecommerceanalytics-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-inspector\1.11.368\aws-java-sdk-inspector-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iot\1.11.368\aws-java-sdk-iot-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-api-gateway\1.11.368\aws-java-sdk-api-gateway-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-acm\1.11.368\aws-java-sdk-acm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-gamelift\1.11.368\aws-java-sdk-gamelift-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dms\1.11.368\aws-java-sdk-dms-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-marketplacemeteringservice\1.11.368\aws-java-sdk-marketplacemeteringservice-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cognitoidp\1.11.368\aws-java-sdk-cognitoidp-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-discovery\1.11.368\aws-java-sdk-discovery-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-applicationautoscaling\1.11.368\aws-java-sdk-applicationautoscaling-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-snowball\1.11.368\aws-java-sdk-snowball-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-rekognition\1.11.368\aws-java-sdk-rekognition-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-polly\1.11.368\aws-java-sdk-polly-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lightsail\1.11.368\aws-java-sdk-lightsail-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-stepfunctions\1.11.368\aws-java-sdk-stepfunctions-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-health\1.11.368\aws-java-sdk-health-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-costandusagereport\1.11.368\aws-java-sdk-costandusagereport-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codebuild\1.11.368\aws-java-sdk-codebuild-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-appstream\1.11.368\aws-java-sdk-appstream-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-shield\1.11.368\aws-java-sdk-shield-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-batch\1.11.368\aws-java-sdk-batch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lex\1.11.368\aws-java-sdk-lex-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mechanicalturkrequester\1.11.368\aws-java-sdk-mechanicalturkrequester-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-organizations\1.11.368\aws-java-sdk-organizations-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-workdocs\1.11.368\aws-java-sdk-workdocs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-core\1.11.368\aws-java-sdk-core-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\software\amazon\ion\ion-java\1.0.2\ion-java-1.0.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-cbor\2.6.7\jackson-dataformat-cbor-2.6.7.jar;C:\Users\Sohan.Dey\.m2\repository\joda-time\joda-time\2.8.1\joda-time-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-models\1.11.368\aws-java-sdk-models-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-swf-libraries\1.11.22\aws-java-sdk-swf-libraries-1.11.22.jar;C:\Users\Sohan.Dey\.m2\repository\com\aventstack\extentreports\3.0.0\extentreports-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\freemarker\freemarker\2.3.23\freemarker-2.3.23.jar;C:\Users\Sohan.Dey\.m2\repository\org\mongodb\mongodb-driver\3.3.0\mongodb-driver-3.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\mongodb\bson\3.3.0\bson-3.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\mongodb\mongodb-driver-core\3.3.0\mongodb-driver-core-3.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\httpcomponents\httpmime\4.5.2\httpmime-4.5.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\relevantcodes\extentreports\2.41.2\extentreports-2.41.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\jsoup\jsoup\1.8.3\jsoup-1.8.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\xerial\sqlite-jdbc\3.8.11.1\sqlite-jdbc-3.8.11.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\jayway\jsonpath\json-path\2.4.0\json-path-2.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\net\minidev\json-smart\2.3\json-smart-2.3.jar;C:\Users\Sohan.Dey\.m2\repository\net\minidev\accessors-smart\1.2\accessors-smart-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\ow2\asm\asm\5.0.4\asm-5.0.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-model\3.3.9\maven-model-3.3.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-utils\3.0.22\plexus-utils-3.0.22.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\rest-assured\3.0.7\rest-assured-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\groovy\groovy\2.4.12\groovy-2.4.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\groovy\groovy-xml\2.4.12\groovy-xml-2.4.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\hamcrest\hamcrest-library\1.3\hamcrest-library-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\ccil\cowan\tagsoup\tagsoup\1.2.1\tagsoup-1.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\json-path\3.0.7\json-path-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\groovy\groovy-json\2.4.12\groovy-json-2.4.12.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\rest-assured-common\3.0.7\rest-assured-common-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\xml-path\3.0.7\xml-path-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\testng\testng\6.11\testng-6.11.jar;C:\Users\Sohan.Dey\.m2\repository\com\beust\jcommander\1.64\jcommander-1.64.jar;C:\Users\Sohan.Dey\.m2\repository\org\yaml\snakeyaml\1.17\snakeyaml-1.17.jar;C:\Users\Sohan.Dey\.m2\repository\org\zeroturnaround\zt-zip\1.13\zt-zip-1.13.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.10.1\jackson-core-2.10.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.9.5\jackson-annotations-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.10.5\jackson-databind-2.10.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-xml\2.9.5\jackson-dataformat-xml-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\module\jackson-module-jaxb-annotations\2.9.5\jackson-module-jaxb-annotations-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\woodstox\stax2-api\3.1.4\stax2-api-3.1.4.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\woodstox\woodstox-core\5.0.3\woodstox-core-5.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\json\json\20180130\json-20180130.jar;C:\Users\Sohan.Dey\.m2\repository\com\googlecode\json-simple\json-simple\1.1.1\json-simple-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\junit\junit\4.10\junit-4.10.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\code\gson\gson\2.8.4\gson-2.8.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\plugins\maven-assembly-plugin\3.1.0\maven-assembly-plugin-3.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-plugin-api\3.0\maven-plugin-api-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\sisu\sisu-inject-plexus\1.4.2\sisu-inject-plexus-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\sisu\sisu-inject-bean\1.4.2\sisu-inject-bean-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\sisu\sisu-guice\2.1.7\sisu-guice-2.1.7-noaop.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-core\3.0\maven-core-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-settings\3.0\maven-settings-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-settings-builder\3.0\maven-settings-builder-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-repository-metadata\3.0\maven-repository-metadata-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-model-builder\3.0\maven-model-builder-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-aether-provider\3.0\maven-aether-provider-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-impl\1.7\aether-impl-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-spi\1.7\aether-spi-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-api\1.7\aether-api-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-util\1.7\aether-util-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-classworlds\2.2.3\plexus-classworlds-2.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-component-annotations\1.5.5\plexus-component-annotations-1.5.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\plexus\plexus-sec-dispatcher\1.3\plexus-sec-dispatcher-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\plexus\plexus-cipher\1.4\plexus-cipher-1.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-artifact\3.0\maven-artifact-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-common-artifact-filters\3.0.1\maven-common-artifact-filters-3.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-shared-utils\3.1.0\maven-shared-utils-3.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-artifact-transfer\0.9.0\maven-artifact-transfer-0.9.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-interpolation\1.24\plexus-interpolation-1.24.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-archiver\3.5\plexus-archiver-3.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-compress\1.14\commons-compress-1.14.jar;C:\Users\Sohan.Dey\.m2\repository\org\iq80\snappy\snappy\0.4\snappy-0.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\tukaani\xz\1.6\xz-1.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\file-management\3.0.0\file-management-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-shared-io\3.0.0\maven-shared-io-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-compat\3.0\maven-compat-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\wagon\wagon-provider-api\2.10\wagon-provider-api-2.10.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-filtering\3.1.1\maven-filtering-3.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\plexus\plexus-build-api\0.0.7\plexus-build-api-0.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-io\3.0.0\plexus-io-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-archiver\3.2.0\maven-archiver-3.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\guava\guava\19.0\guava-19.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\hibernate\hibernate-core\5.4.2.Final\hibernate-core-5.4.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\javax\persistence\javax.persistence-api\2.2\javax.persistence-api-2.2.jar;C:\Users\Sohan.Dey\.m2\repository\net\bytebuddy\byte-buddy\1.9.10\byte-buddy-1.9.10.jar;C:\Users\Sohan.Dey\.m2\repository\antlr\antlr\2.7.7\antlr-2.7.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\transaction\jboss-transaction-api_1.2_spec\1.1.1.Final\jboss-transaction-api_1.2_spec-1.1.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\jandex\2.0.5.Final\jandex-2.0.5.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\classmate\1.3.4\classmate-1.3.4.jar;C:\Users\Sohan.Dey\.m2\repository\javax\activation\javax.activation-api\1.2.0\javax.activation-api-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\dom4j\dom4j\2.1.1\dom4j-2.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\hibernate\common\hibernate-commons-annotations\5.1.0.Final\hibernate-commons-annotations-5.1.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\javax\xml\bind\jaxb-api\2.3.1\jaxb-api-2.3.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\glassfish\jaxb\jaxb-runtime\2.3.1\jaxb-runtime-2.3.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\glassfish\jaxb\txw2\2.3.1\txw2-2.3.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\istack\istack-commons-runtime\3.0.7\istack-commons-runtime-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\jvnet\staxex\stax-ex\1.8\stax-ex-1.8.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\xml\fastinfoset\FastInfoset\1.2.15\FastInfoset-1.2.15.jar;C:\Users\Sohan.Dey\.m2\repository\commons-beanutils\commons-beanutils\1.9.2\commons-beanutils-1.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\commons-logging\commons-logging\1.1.1\commons-logging-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\commons-collections\commons-collections\3.2.1\commons-collections-3.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\swagger-annotations\1.5.20\swagger-annotations-1.5.20.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.5\jackson-datatype-jsr310-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\postgresql\postgresql\42.2.2\postgresql-42.2.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\slf4j-log4j12\1.6.2\slf4j-log4j12-1.6.2.jar;C:\Users\Sohan.Dey\.m2\repository\log4j\log4j\1.2.16\log4j-1.2.16.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\logging\log4j\log4j-api\2.11.1\log4j-api-2.11.1.jar;C:\Users\Sohan.Dey\.m2\repository\net\lingala\zip4j\zip4j\1.3.2\zip4j-1.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\httpcomponents\httpclient\4.5.3\httpclient-4.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\httpcomponents\httpcore\4.4.6\httpcore-4.4.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-client\2.8.1\hadoop-client-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-common\2.8.1\hadoop-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\commons-cli\commons-cli\1.2\commons-cli-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\xmlenc\xmlenc\0.52\xmlenc-0.52.jar;C:\Users\Sohan.Dey\.m2\repository\commons-net\commons-net\3.1\commons-net-3.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\mortbay\jetty\jetty-sslengine\6.1.26\jetty-sslengine-6.1.26.jar;C:\Users\Sohan.Dey\.m2\repository\javax\servlet\jsp\jsp-api\2.1\jsp-api-2.1.jar;C:\Users\Sohan.Dey\.m2\repository\commons-configuration\commons-configuration\1.6\commons-configuration-1.6.jar;C:\Users\Sohan.Dey\.m2\repository\commons-digester\commons-digester\1.8\commons-digester-1.8.jar;C:\Users\Sohan.Dey\.m2\repository\commons-beanutils\commons-beanutils-core\1.8.0\commons-beanutils-core-1.8.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-core-asl\1.9.13\jackson-core-asl-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-mapper-asl\1.9.13\jackson-mapper-asl-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\avro\avro\1.7.4\avro-1.7.4.jar;C:\Users\Sohan.Dey\.m2\repository\com\thoughtworks\paranamer\paranamer\2.3\paranamer-2.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\xerial\snappy\snappy-java\1.0.4.1\snappy-java-1.0.4.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\protobuf\protobuf-java\2.5.0\protobuf-java-2.5.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-auth\2.8.1\hadoop-auth-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\server\apacheds-kerberos-codec\2.0.0-M15\apacheds-kerberos-codec-2.0.0-M15.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\server\apacheds-i18n\2.0.0-M15\apacheds-i18n-2.0.0-M15.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\api\api-asn1-api\1.0.0-M20\api-asn1-api-1.0.0-M20.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\api\api-util\1.0.0-M20\api-util-1.0.0-M20.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\curator\curator-framework\2.7.1\curator-framework-2.7.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\curator\curator-client\2.7.1\curator-client-2.7.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\curator\curator-recipes\2.7.1\curator-recipes-2.7.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\code\findbugs\jsr305\3.0.0\jsr305-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\htrace\htrace-core4\4.0.1-incubating\htrace-core4-4.0.1-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\zookeeper\zookeeper\3.4.6\zookeeper-3.4.6.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty\3.7.0.Final\netty-3.7.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-hdfs\2.8.1\hadoop-hdfs-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-hdfs-client\2.8.1\hadoop-hdfs-client-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\squareup\okhttp\okhttp\2.4.0\okhttp-2.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\squareup\okio\okio\1.4.0\okio-1.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-app\2.8.1\hadoop-mapreduce-client-app-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-common\2.8.1\hadoop-mapreduce-client-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-client\2.8.1\hadoop-yarn-client-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-server-common\2.8.1\hadoop-yarn-server-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-shuffle\2.8.1\hadoop-mapreduce-client-shuffle-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\fusesource\leveldbjni\leveldbjni-all\1.8\leveldbjni-all-1.8.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-api\2.8.1\hadoop-yarn-api-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-core\2.8.1\hadoop-mapreduce-client-core-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-common\2.8.1\hadoop-yarn-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\javax\servlet\servlet-api\2.5\servlet-api-2.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\mortbay\jetty\jetty-util\6.1.26\jetty-util-6.1.26.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\jersey\jersey-core\1.9\jersey-core-1.9.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\jersey\jersey-client\1.9\jersey-client-1.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-jaxrs\1.9.13\jackson-jaxrs-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-xc\1.9.13\jackson-xc-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-jobclient\2.8.1\hadoop-mapreduce-client-jobclient-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-annotations\2.8.1\hadoop-annotations-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\bouncycastle\bcprov-jdk16\1.45\bcprov-jdk16-1.45.jar;C:\Users\Sohan.Dey\.m2\repository\commons-codec\commons-codec\1.11\commons-codec-1.11.jar;C:\Users\Sohan.Dey\.m2\repository\commons-io\commons-io\2.6\commons-io-2.6.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\zxing\core\3.3.3\core-3.3.3.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\zxing\javase\2.0\javase-2.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\hamcrest\hamcrest-all\1.3\hamcrest-all-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\velocity\velocity\1.7\velocity-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\commons-lang\commons-lang\2.4\commons-lang-2.4.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\html2pdf\2.0.0\html2pdf-2.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\forms\7.1.0\forms-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\kernel\7.1.0\kernel-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\io\7.1.0\io-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\layout\7.1.0\layout-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\itextpdf\5.5.13\itextpdf-5.5.13.jar;C:\Users\Sohan.Dey\.m2\repository\javax\mail\javax.mail-api\1.6.2\javax.mail-api-1.6.2.jar;D:\Mosip_Automation_Test\Docker_Test\MOSIP-19726\mosip-functional-tests\authentication-demo-service\target\classes;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.0.2.RELEASE\spring-boot-starter-web-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-json\2.0.2.RELEASE\spring-boot-starter-json-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.5\jackson-datatype-jdk8-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.5\jackson-module-parameter-names-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\2.0.2.RELEASE\spring-boot-starter-tomcat-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\8.5.31\tomcat-embed-el-8.5.31.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\8.5.31\tomcat-embed-websocket-8.5.31.jar;C:\Users\Sohan.Dey\.m2\repository\org\hibernate\validator\hibernate-validator\6.0.9.Final\hibernate-validator-6.0.9.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-web\5.0.6.RELEASE\spring-web-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-webmvc\5.0.6.RELEASE\spring-webmvc-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-expression\5.0.6.RELEASE\spring-expression-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-test\2.0.2.RELEASE\spring-boot-starter-test-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-test\2.0.2.RELEASE\spring-boot-test-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-test-autoconfigure\2.0.2.RELEASE\spring-boot-test-autoconfigure-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\assertj\assertj-core\3.9.1\assertj-core-3.9.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\skyscreamer\jsonassert\1.5.0\jsonassert-1.5.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-core\5.0.6.RELEASE\spring-core-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-jcl\5.0.6.RELEASE\spring-jcl-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-test\5.0.6.RELEASE\spring-test-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\xmlunit\xmlunit-core\2.5.1\xmlunit-core-2.5.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-swagger-ui\2.9.2\springfox-swagger-ui-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-spring-web\2.9.2\springfox-spring-web-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-swagger2\2.9.2\springfox-swagger2-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-spi\2.9.2\springfox-spi-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-core\2.9.2\springfox-core-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-schema\2.9.2\springfox-schema-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-swagger-common\2.9.2\springfox-swagger-common-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\plugin\spring-plugin-core\1.2.0.RELEASE\spring-plugin-core-1.2.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\plugin\spring-plugin-metadata\1.2.0.RELEASE\spring-plugin-metadata-1.2.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\mapstruct\mapstruct\1.2.0.Final\mapstruct-1.2.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\javax\ws\rs\javax.ws.rs-api\2.0\javax.ws.rs-api-2.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\authentication\authentication-core\1.2.0.1-SNAPSHOT\authentication-core-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-cache\2.0.2.RELEASE\spring-boot-starter-cache-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-context-support\5.0.6.RELEASE\spring-context-support-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\machinezoo\sourceafis\sourceafis\3.4.0\sourceafis-3.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\net\sf\trove4j\trove4j\3.0.3\trove4j-3.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\com\machinezoo\noexception\noexception\1.3.2\noexception-1.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\mhshams\jnbis\2.0.1\jnbis-2.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\sanselan\sanselan\0.97-incubator\sanselan-0.97-incubator.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\idrepository\id-repository-core\1.2.0\id-repository-core-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-biosdk-provider\1.2.0\kernel-biosdk-provider-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-biometrics-api\1.2.0\kernel-biometrics-api-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-demographics-api\1.2.0\kernel-demographics-api-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-webflux\2.0.2.RELEASE\spring-boot-starter-webflux-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-reactor-netty\2.0.2.RELEASE\spring-boot-starter-reactor-netty-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\projectreactor\ipc\reactor-netty\0.7.7.RELEASE\reactor-netty-0.7.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-handler-proxy\4.1.24.Final\netty-handler-proxy-4.1.24.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-codec-socks\4.1.24.Final\netty-codec-socks-4.1.24.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-transport-native-epoll\4.1.24.Final\netty-transport-native-epoll-4.1.24.Final-linux-x86_64.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-transport-native-unix-common\4.1.24.Final\netty-transport-native-unix-common-4.1.24.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-webflux\5.0.6.RELEASE\spring-webflux-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\projectreactor\reactor-core\3.1.7.RELEASE\reactor-core-3.1.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\synchronoss\cloud\nio-multipart-parser\1.1.0\nio-multipart-parser-1.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\synchronoss\cloud\nio-stream-storage\1.1.3\nio-stream-storage-1.1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\springdoc\springdoc-openapi-ui\1.5.10\springdoc-openapi-ui-1.5.10.jar;C:\Users\Sohan.Dey\.m2\repository\org\springdoc\springdoc-openapi-webmvc-core\1.5.10\springdoc-openapi-webmvc-core-1.5.10.jar;C:\Users\Sohan.Dey\.m2\repository\org\springdoc\springdoc-openapi-common\1.5.10\springdoc-openapi-common-1.5.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-models\2.1.10\swagger-models-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-annotations\2.1.10\swagger-annotations-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-integration\2.1.10\swagger-integration-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-core\2.1.10\swagger-core-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\jakarta\xml\bind\jakarta.xml.bind-api\2.3.2\jakarta.xml.bind-api-2.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\jakarta\activation\jakarta.activation-api\1.2.1\jakarta.activation-api-1.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-yaml\2.12.1\jackson-dataformat-yaml-2.12.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\github\classgraph\classgraph\4.8.69\classgraph-4.8.69.jar;C:\Users\Sohan.Dey\.m2\repository\org\webjars\swagger-ui\3.51.1\swagger-ui-3.51.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\webjars\webjars-locator-core\0.45\webjars-locator-core-0.45.jar;C:\Users\Sohan.Dey\.m2\repository\commons-fileupload\commons-fileupload\1.4\commons-fileupload-1.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\mockito\mockito-core\2.23.4\mockito-core-2.23.4.jar;C:\Users\Sohan.Dey\.m2\repository\net\bytebuddy\byte-buddy-agent\1.9.3\byte-buddy-agent-1.9.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\objenesis\objenesis\2.6\objenesis-2.6.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-websubclient-api\1.2.0.1-SNAPSHOT\kernel-websubclient-api-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-aspects\5.0.6.RELEASE\spring-aspects-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\aspectj\aspectjweaver\1.8.13\aspectjweaver-1.8.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\owasp\encoder\encoder\1.2.3\encoder-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\tensorflow\tensorflow\1.12.0\tensorflow-1.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\tensorflow\libtensorflow\1.12.0\libtensorflow-1.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\tensorflow\libtensorflow_jni\1.12.0\libtensorflow_jni-1.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-templatemanager-velocity\1.2.0.1-SNAPSHOT\kernel-templatemanager-velocity-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\javax\servlet\javax.servlet-api\4.0.1\javax.servlet-api-4.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-starter-config\2.0.0.RELEASE\spring-cloud-starter-config-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-starter\2.0.0.RELEASE\spring-cloud-starter-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-context\2.0.0.RELEASE\spring-cloud-context-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-crypto\5.0.6.RELEASE\spring-security-crypto-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-commons\2.0.0.RELEASE\spring-cloud-commons-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-rsa\1.0.5.RELEASE\spring-security-rsa-1.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-config-client\2.0.0.RELEASE\spring-cloud-config-client-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\jai-imageio\jai-imageio-jpeg2000\1.3.0\jai-imageio-jpeg2000-1.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\jai-imageio\jai-imageio-core\1.3.0\jai-imageio-core-1.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-keymanager-service\1.2.0.1-SNAPSHOT\kernel-keymanager-service-1.2.0.1-SNAPSHOT-lib.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-test\5.0.5.RELEASE\spring-security-test-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-core\5.0.5.RELEASE\spring-security-core-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-pdfgenerator-itext\1.2.0.1-SNAPSHOT\kernel-pdfgenerator-itext-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\barcodes\7.1.0\barcodes-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\font-asian\7.1.0\font-asian-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\hyph\7.1.0\hyph-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\pdfa\7.1.0\pdfa-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\sign\7.1.0\sign-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\tool\xmlworker\5.5.13\xmlworker-5.5.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\bouncycastle\bcpkix-jdk15on\1.66\bcpkix-jdk15on-1.66.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-data-jpa\2.0.2.RELEASE\spring-boot-starter-data-jpa-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\2.0.2.RELEASE\spring-boot-starter-jdbc-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\zaxxer\HikariCP\2.7.9\HikariCP-2.7.9.jar;C:\Users\Sohan.Dey\.m2\repository\com\h2database\h2\1.4.197\h2-1.4.197.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\microsoft\TSS.Java\0.3.0\TSS.Java-0.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\net\java\dev\jna\jna\4.4.0\jna-4.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\cache2k\cache2k-api\2.4.1.Final\cache2k-api-2.4.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\cache2k\cache2k-core\2.4.1.Final\cache2k-core-2.4.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\nimbusds\nimbus-jose-jwt\9.14\nimbus-jose-jwt-9.14.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-core\1.2.0.1-SNAPSHOT\kernel-core-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter\2.0.2.RELEASE\spring-boot-starter-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot\2.0.2.RELEASE\spring-boot-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.0.2.RELEASE\spring-boot-autoconfigure-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.0.2.RELEASE\spring-boot-starter-logging-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.10.0\log4j-to-slf4j-2.10.0.jar;C:\Users\Sohan.Dey\.m2\repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\data\spring-data-jpa\2.0.7.RELEASE\spring-data-jpa-2.0.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\data\spring-data-commons\2.0.7.RELEASE\spring-data-commons-2.0.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-orm\5.0.6.RELEASE\spring-orm-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-jdbc\5.0.6.RELEASE\spring-jdbc-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-context\5.0.6.RELEASE\spring-context-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-aop\5.0.6.RELEASE\spring-aop-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-tx\5.0.6.RELEASE\spring-tx-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-beans\5.0.6.RELEASE\spring-beans-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\aspectj\aspectjrt\1.8.12\aspectjrt-1.8.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-security\2.0.2.RELEASE\spring-boot-starter-security-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-config\5.0.5.RELEASE\spring-security-config-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-web\5.0.5.RELEASE\spring-security-web-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\javax\transaction\javax.transaction-api\1.3\javax.transaction-api-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-math3\3.6.1\commons-math3-3.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\bouncycastle\bcprov-jdk15on\1.66\bcprov-jdk15on-1.66.jar;C:\Users\Sohan.Dey\.m2\repository\javax\interceptor\javax.interceptor-api\1.2\javax.interceptor-api-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\code\findbugs\annotations\3.0.1\annotations-3.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\net\jcip\jcip-annotations\1.0\jcip-annotations-1.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\swagger-models\1.5.21\swagger-models-1.5.21.jar;C:\Users\Sohan.Dey\.m2\repository\com\auth0\java-jwt\3.8.1\java-jwt-3.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\micrometer\micrometer-core\1.4.2\micrometer-core-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\hdrhistogram\HdrHistogram\2.1.12\HdrHistogram-2.1.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\latencyutils\LatencyUtils\2.0.3\LatencyUtils-2.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\micrometer\micrometer-registry-prometheus\1.4.2\micrometer-registry-prometheus-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\prometheus\simpleclient_common\0.8.1\simpleclient_common-0.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\prometheus\simpleclient\0.8.1\simpleclient-0.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\jul-to-slf4j\1.7.25\jul-to-slf4j-1.7.25.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\jcl-over-slf4j\1.7.25\jcl-over-slf4j-1.7.25.jar;C:\Users\Sohan.Dey\.m2\repository\javax\activation\activation\1.1\activation-1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-starter-sleuth\2.0.4.RELEASE\spring-cloud-starter-sleuth-2.0.4.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-aop\2.0.9.RELEASE\spring-boot-starter-aop-2.0.9.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-sleuth-core\2.0.4.RELEASE\spring-cloud-sleuth-core-2.0.4.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave\5.6.1\brave-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\zipkin2\zipkin\2.12.0\zipkin-2.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\reporter2\zipkin-reporter\2.7.14\zipkin-reporter-2.7.14.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-context-log4j2\5.6.1\brave-context-log4j2-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-spring-web\5.6.1\brave-instrumentation-spring-web-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-http\5.6.1\brave-instrumentation-http-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-spring-rabbit\5.6.1\brave-instrumentation-spring-rabbit-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-kafka-clients\5.6.1\brave-instrumentation-kafka-clients-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-httpclient\5.6.1\brave-instrumentation-httpclient-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-httpasyncclient\5.6.1\brave-instrumentation-httpasyncclient-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-spring-webmvc\5.6.1\brave-instrumentation-spring-webmvc-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-servlet\5.6.1\brave-instrumentation-servlet-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-actuator\2.0.2.RELEASE\spring-boot-starter-actuator-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-actuator-autoconfigure\2.0.2.RELEASE\spring-boot-actuator-autoconfigure-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-actuator\2.0.2.RELEASE\spring-boot-actuator-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\8.5.55\tomcat-embed-core-8.5.55.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\tomcat-annotations-api\8.5.55\tomcat-annotations-api-8.5.55.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\retry\spring-retry\1.2.1.RELEASE\spring-retry-1.2.1.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\module\jackson-module-afterburner\2.12.0\jackson-module-afterburner-2.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-registration-packet-manager\1.1.5.3\kernel-registration-packet-manager-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-keygenerator-bouncycastle\1.1.5.3\kernel-keygenerator-bouncycastle-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-cbeffutil-api\1.1.5.3\kernel-cbeffutil-api-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-logger-logback\1.1.5.3\kernel-logger-logback-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\net\logstash\logback\logstash-logback-encoder\6.4\logstash-logback-encoder-6.4.jar;C:\Users\Sohan.Dey\.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\ch\qos\logback\logback-access\1.2.3\logback-access-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-crypto-jce\1.1.5.3\kernel-crypto-jce-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\bitbucket\b_c\jose4j\0.6.5\jose4j-0.6.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\wink\wink-json4j-provider\1.1.2-incubating\wink-json4j-provider-1.1.2-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\wink\wink-common\1.1.2-incubating\wink-common-1.1.2-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\xml\bind\jaxb-impl\2.2.1.1\jaxb-impl-2.2.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\geronimo\specs\geronimo-annotation_1.1_spec\1.0\geronimo-annotation_1.1_spec-1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\wink\wink-json4j\1.1.2-incubating\wink-json4j-1.1.2-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\javax\ws\rs\jsr311-api\1.1.1\jsr311-api-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\checkerframework\checker-qual\2.9.0\checker-qual-2.9.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\activemq\activemq-broker\5.15.9\activemq-broker-5.15.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\activemq\activemq-client\5.15.9\activemq-client-5.15.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\geronimo\specs\geronimo-jms_1.1_spec\1.1.1\geronimo-jms_1.1_spec-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\fusesource\hawtbuf\hawtbuf\1.11\hawtbuf-1.11.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\geronimo\specs\geronimo-j2ee-management_1.1_spec\1.0.1\geronimo-j2ee-management_1.1_spec-1.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\activemq\activemq-openwire-legacy\5.15.9\activemq-openwire-legacy-5.15.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\projectlombok\lombok\1.18.8\lombok-1.18.8.jar \ No newline at end of file diff --git a/apitest/.temp-MosipFunctionalTest-classpath-arg-1695652238739.txt b/apitest/.temp-MosipFunctionalTest-classpath-arg-1695652238739.txt new file mode 100644 index 000000000..0fc13dd5a --- /dev/null +++ b/apitest/.temp-MosipFunctionalTest-classpath-arg-1695652238739.txt @@ -0,0 +1 @@ +-classpath D:\Mosip_Automation_Test\MOSIP_FUNCTIONAL_TESTS\mosip-functional-tests\automationtests\target\test-classes;D:\Mosip_Automation_Test\MOSIP_FUNCTIONAL_TESTS\mosip-functional-tests\automationtests\target\classes;C:\Users\Sohan.Dey\.m2\repository\com\opencsv\opencsv\4.1\opencsv-4.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-lang3\3.6\commons-lang3-3.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-text\1.1\commons-text-1.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\ibm\icu\icu4j\63.1\icu4j-63.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\keycloak\keycloak-admin-client\17.0.1\keycloak-admin-client-17.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\keycloak\keycloak-core\17.0.1\keycloak-core-17.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\keycloak\keycloak-common\17.0.1\keycloak-common-17.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-client\3.13.2.Final\resteasy-client-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\ws\rs\jboss-jaxrs-api_2.1_spec\2.0.1.Final\jboss-jaxrs-api_2.1_spec-2.0.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-jaxrs\3.13.2.Final\resteasy-jaxrs-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\reactivestreams\reactive-streams\1.0.3\reactive-streams-1.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\jakarta\validation\jakarta.validation-api\2.0.2\jakarta.validation-api-2.0.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\annotation\jboss-annotations-api_1.3_spec\2.0.1.Final\jboss-annotations-api_1.3_spec-2.0.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\activation\jakarta.activation\1.2.1\jakarta.activation-1.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\stephenc\jcip\jcip-annotations\1.0-1\jcip-annotations-1.0-1.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-multipart-provider\3.13.2.Final\resteasy-multipart-provider-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\mail\jakarta.mail\1.6.5\jakarta.mail-1.6.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\james\apache-mime4j\0.6\apache-mime4j-0.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-jackson2-provider\3.13.2.Final\resteasy-jackson2-provider-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\jaxrs\jackson-jaxrs-json-provider\2.10.5\jackson-jaxrs-json-provider-2.10.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\jaxrs\jackson-jaxrs-base\2.10.5\jackson-jaxrs-base-2.10.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\json-patch\1.9\json-patch-1.9.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\jackson-coreutils\1.6\jackson-coreutils-1.6.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\msg-simple\1.1\msg-simple-1.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\btf\1.2\btf-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-jaxb-provider\3.13.2.Final\resteasy-jaxb-provider-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\xml\bind\jboss-jaxb-api_2.3_spec\2.0.0.Final\jboss-jaxb-api_2.3_spec-2.0.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\javassist\javassist\3.25.0-GA\javassist-3.25.0-GA.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\jknack\handlebars\3.0.0\handlebars-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\antlr\antlr4-runtime\4.5.1-1\antlr4-runtime-4.5.1-1.jar;C:\Users\Sohan.Dey\.m2\repository\org\mozilla\rhino\1.7R4\rhino-1.7R4.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\slf4j-api\1.6.4\slf4j-api-1.6.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-collections4\4.3\commons-collections4-4.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\jsonwebtoken\jjwt\0.6.0\jjwt-0.6.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\flipkart\zjsonpatch\zjsonpatch\0.4.7\zjsonpatch-0.4.7.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk\1.11.368\aws-java-sdk-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dlm\1.11.368\aws-java-sdk-dlm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\jmespath-java\1.11.368\jmespath-java-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-macie\1.11.368\aws-java-sdk-macie-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-eks\1.11.368\aws-java-sdk-eks-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediatailor\1.11.368\aws-java-sdk-mediatailor-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-neptune\1.11.368\aws-java-sdk-neptune-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-pi\1.11.368\aws-java-sdk-pi-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iot1clickprojects\1.11.368\aws-java-sdk-iot1clickprojects-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iot1clickdevices\1.11.368\aws-java-sdk-iot1clickdevices-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iotanalytics\1.11.368\aws-java-sdk-iotanalytics-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-acmpca\1.11.368\aws-java-sdk-acmpca-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-secretsmanager\1.11.368\aws-java-sdk-secretsmanager-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-fms\1.11.368\aws-java-sdk-fms-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-connect\1.11.368\aws-java-sdk-connect-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-transcribe\1.11.368\aws-java-sdk-transcribe-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-autoscalingplans\1.11.368\aws-java-sdk-autoscalingplans-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-workmail\1.11.368\aws-java-sdk-workmail-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-servicediscovery\1.11.368\aws-java-sdk-servicediscovery-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloud9\1.11.368\aws-java-sdk-cloud9-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-serverlessapplicationrepository\1.11.368\aws-java-sdk-serverlessapplicationrepository-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-alexaforbusiness\1.11.368\aws-java-sdk-alexaforbusiness-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-resourcegroups\1.11.368\aws-java-sdk-resourcegroups-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-comprehend\1.11.368\aws-java-sdk-comprehend-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-translate\1.11.368\aws-java-sdk-translate-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sagemaker\1.11.368\aws-java-sdk-sagemaker-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iotjobsdataplane\1.11.368\aws-java-sdk-iotjobsdataplane-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sagemakerruntime\1.11.368\aws-java-sdk-sagemakerruntime-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-kinesisvideo\1.11.368\aws-java-sdk-kinesisvideo-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-codec-http\4.1.17.Final\netty-codec-http-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-codec\4.1.17.Final\netty-codec-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-handler\4.1.17.Final\netty-handler-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-buffer\4.1.17.Final\netty-buffer-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-common\4.1.17.Final\netty-common-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-transport\4.1.17.Final\netty-transport-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-resolver\4.1.17.Final\netty-resolver-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-appsync\1.11.368\aws-java-sdk-appsync-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-guardduty\1.11.368\aws-java-sdk-guardduty-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mq\1.11.368\aws-java-sdk-mq-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediaconvert\1.11.368\aws-java-sdk-mediaconvert-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediastore\1.11.368\aws-java-sdk-mediastore-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediastoredata\1.11.368\aws-java-sdk-mediastoredata-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-medialive\1.11.368\aws-java-sdk-medialive-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediapackage\1.11.368\aws-java-sdk-mediapackage-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-costexplorer\1.11.368\aws-java-sdk-costexplorer-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-pricing\1.11.368\aws-java-sdk-pricing-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mobile\1.11.368\aws-java-sdk-mobile-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudhsmv2\1.11.368\aws-java-sdk-cloudhsmv2-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-glue\1.11.368\aws-java-sdk-glue-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-migrationhub\1.11.368\aws-java-sdk-migrationhub-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dax\1.11.368\aws-java-sdk-dax-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-greengrass\1.11.368\aws-java-sdk-greengrass-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-athena\1.11.368\aws-java-sdk-athena-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-marketplaceentitlement\1.11.368\aws-java-sdk-marketplaceentitlement-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codestar\1.11.368\aws-java-sdk-codestar-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lexmodelbuilding\1.11.368\aws-java-sdk-lexmodelbuilding-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-resourcegroupstaggingapi\1.11.368\aws-java-sdk-resourcegroupstaggingapi-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-pinpoint\1.11.368\aws-java-sdk-pinpoint-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-xray\1.11.368\aws-java-sdk-xray-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-opsworkscm\1.11.368\aws-java-sdk-opsworkscm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-support\1.11.368\aws-java-sdk-support-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-simpledb\1.11.368\aws-java-sdk-simpledb-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-servicecatalog\1.11.368\aws-java-sdk-servicecatalog-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-servermigration\1.11.368\aws-java-sdk-servermigration-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-simpleworkflow\1.11.368\aws-java-sdk-simpleworkflow-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-storagegateway\1.11.368\aws-java-sdk-storagegateway-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-route53\1.11.368\aws-java-sdk-route53-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-s3\1.11.368\aws-java-sdk-s3-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-importexport\1.11.368\aws-java-sdk-importexport-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sts\1.11.368\aws-java-sdk-sts-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sqs\1.11.368\aws-java-sdk-sqs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-rds\1.11.368\aws-java-sdk-rds-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-redshift\1.11.368\aws-java-sdk-redshift-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticbeanstalk\1.11.368\aws-java-sdk-elasticbeanstalk-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-glacier\1.11.368\aws-java-sdk-glacier-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iam\1.11.368\aws-java-sdk-iam-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-datapipeline\1.11.368\aws-java-sdk-datapipeline-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticloadbalancing\1.11.368\aws-java-sdk-elasticloadbalancing-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticloadbalancingv2\1.11.368\aws-java-sdk-elasticloadbalancingv2-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-emr\1.11.368\aws-java-sdk-emr-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticache\1.11.368\aws-java-sdk-elasticache-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elastictranscoder\1.11.368\aws-java-sdk-elastictranscoder-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ec2\1.11.368\aws-java-sdk-ec2-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dynamodb\1.11.368\aws-java-sdk-dynamodb-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sns\1.11.368\aws-java-sdk-sns-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-budgets\1.11.368\aws-java-sdk-budgets-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudtrail\1.11.368\aws-java-sdk-cloudtrail-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudwatch\1.11.368\aws-java-sdk-cloudwatch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-logs\1.11.368\aws-java-sdk-logs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-events\1.11.368\aws-java-sdk-events-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cognitoidentity\1.11.368\aws-java-sdk-cognitoidentity-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cognitosync\1.11.368\aws-java-sdk-cognitosync-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-directconnect\1.11.368\aws-java-sdk-directconnect-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudformation\1.11.368\aws-java-sdk-cloudformation-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudfront\1.11.368\aws-java-sdk-cloudfront-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-clouddirectory\1.11.368\aws-java-sdk-clouddirectory-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-kinesis\1.11.368\aws-java-sdk-kinesis-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-opsworks\1.11.368\aws-java-sdk-opsworks-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ses\1.11.368\aws-java-sdk-ses-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-autoscaling\1.11.368\aws-java-sdk-autoscaling-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudsearch\1.11.368\aws-java-sdk-cloudsearch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudwatchmetrics\1.11.368\aws-java-sdk-cloudwatchmetrics-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codedeploy\1.11.368\aws-java-sdk-codedeploy-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codepipeline\1.11.368\aws-java-sdk-codepipeline-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-kms\1.11.368\aws-java-sdk-kms-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-config\1.11.368\aws-java-sdk-config-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lambda\1.11.368\aws-java-sdk-lambda-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ecs\1.11.368\aws-java-sdk-ecs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ecr\1.11.368\aws-java-sdk-ecr-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudhsm\1.11.368\aws-java-sdk-cloudhsm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ssm\1.11.368\aws-java-sdk-ssm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-workspaces\1.11.368\aws-java-sdk-workspaces-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-machinelearning\1.11.368\aws-java-sdk-machinelearning-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-directory\1.11.368\aws-java-sdk-directory-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-efs\1.11.368\aws-java-sdk-efs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codecommit\1.11.368\aws-java-sdk-codecommit-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-devicefarm\1.11.368\aws-java-sdk-devicefarm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticsearch\1.11.368\aws-java-sdk-elasticsearch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-waf\1.11.368\aws-java-sdk-waf-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-marketplacecommerceanalytics\1.11.368\aws-java-sdk-marketplacecommerceanalytics-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-inspector\1.11.368\aws-java-sdk-inspector-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iot\1.11.368\aws-java-sdk-iot-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-api-gateway\1.11.368\aws-java-sdk-api-gateway-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-acm\1.11.368\aws-java-sdk-acm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-gamelift\1.11.368\aws-java-sdk-gamelift-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dms\1.11.368\aws-java-sdk-dms-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-marketplacemeteringservice\1.11.368\aws-java-sdk-marketplacemeteringservice-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cognitoidp\1.11.368\aws-java-sdk-cognitoidp-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-discovery\1.11.368\aws-java-sdk-discovery-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-applicationautoscaling\1.11.368\aws-java-sdk-applicationautoscaling-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-snowball\1.11.368\aws-java-sdk-snowball-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-rekognition\1.11.368\aws-java-sdk-rekognition-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-polly\1.11.368\aws-java-sdk-polly-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lightsail\1.11.368\aws-java-sdk-lightsail-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-stepfunctions\1.11.368\aws-java-sdk-stepfunctions-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-health\1.11.368\aws-java-sdk-health-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-costandusagereport\1.11.368\aws-java-sdk-costandusagereport-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codebuild\1.11.368\aws-java-sdk-codebuild-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-appstream\1.11.368\aws-java-sdk-appstream-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-shield\1.11.368\aws-java-sdk-shield-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-batch\1.11.368\aws-java-sdk-batch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lex\1.11.368\aws-java-sdk-lex-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mechanicalturkrequester\1.11.368\aws-java-sdk-mechanicalturkrequester-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-organizations\1.11.368\aws-java-sdk-organizations-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-workdocs\1.11.368\aws-java-sdk-workdocs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-core\1.11.368\aws-java-sdk-core-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\software\amazon\ion\ion-java\1.0.2\ion-java-1.0.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-cbor\2.6.7\jackson-dataformat-cbor-2.6.7.jar;C:\Users\Sohan.Dey\.m2\repository\joda-time\joda-time\2.8.1\joda-time-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-models\1.11.368\aws-java-sdk-models-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-swf-libraries\1.11.22\aws-java-sdk-swf-libraries-1.11.22.jar;C:\Users\Sohan.Dey\.m2\repository\com\aventstack\extentreports\3.0.0\extentreports-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\freemarker\freemarker\2.3.23\freemarker-2.3.23.jar;C:\Users\Sohan.Dey\.m2\repository\org\mongodb\mongodb-driver\3.3.0\mongodb-driver-3.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\mongodb\bson\3.3.0\bson-3.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\mongodb\mongodb-driver-core\3.3.0\mongodb-driver-core-3.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\httpcomponents\httpmime\4.5.2\httpmime-4.5.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\relevantcodes\extentreports\2.41.2\extentreports-2.41.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\jsoup\jsoup\1.8.3\jsoup-1.8.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\xerial\sqlite-jdbc\3.8.11.1\sqlite-jdbc-3.8.11.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\jayway\jsonpath\json-path\2.4.0\json-path-2.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\net\minidev\json-smart\2.3\json-smart-2.3.jar;C:\Users\Sohan.Dey\.m2\repository\net\minidev\accessors-smart\1.2\accessors-smart-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\ow2\asm\asm\5.0.4\asm-5.0.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-model\3.3.9\maven-model-3.3.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-utils\3.0.22\plexus-utils-3.0.22.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\rest-assured\3.0.7\rest-assured-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\groovy\groovy\2.4.12\groovy-2.4.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\groovy\groovy-xml\2.4.12\groovy-xml-2.4.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\hamcrest\hamcrest-library\1.3\hamcrest-library-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\ccil\cowan\tagsoup\tagsoup\1.2.1\tagsoup-1.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\json-path\3.0.7\json-path-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\groovy\groovy-json\2.4.12\groovy-json-2.4.12.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\rest-assured-common\3.0.7\rest-assured-common-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\xml-path\3.0.7\xml-path-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\testng\testng\6.11\testng-6.11.jar;C:\Users\Sohan.Dey\.m2\repository\com\beust\jcommander\1.64\jcommander-1.64.jar;C:\Users\Sohan.Dey\.m2\repository\org\yaml\snakeyaml\1.17\snakeyaml-1.17.jar;C:\Users\Sohan.Dey\.m2\repository\org\zeroturnaround\zt-zip\1.13\zt-zip-1.13.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.10.1\jackson-core-2.10.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.9.5\jackson-annotations-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.10.5\jackson-databind-2.10.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-xml\2.9.5\jackson-dataformat-xml-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\module\jackson-module-jaxb-annotations\2.9.5\jackson-module-jaxb-annotations-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\woodstox\stax2-api\3.1.4\stax2-api-3.1.4.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\woodstox\woodstox-core\5.0.3\woodstox-core-5.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\json\json\20180130\json-20180130.jar;C:\Users\Sohan.Dey\.m2\repository\com\googlecode\json-simple\json-simple\1.1.1\json-simple-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\junit\junit\4.10\junit-4.10.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\code\gson\gson\2.8.4\gson-2.8.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\plugins\maven-assembly-plugin\3.1.0\maven-assembly-plugin-3.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-plugin-api\3.0\maven-plugin-api-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\sisu\sisu-inject-plexus\1.4.2\sisu-inject-plexus-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\sisu\sisu-inject-bean\1.4.2\sisu-inject-bean-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\sisu\sisu-guice\2.1.7\sisu-guice-2.1.7-noaop.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-core\3.0\maven-core-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-settings\3.0\maven-settings-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-settings-builder\3.0\maven-settings-builder-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-repository-metadata\3.0\maven-repository-metadata-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-model-builder\3.0\maven-model-builder-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-aether-provider\3.0\maven-aether-provider-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-impl\1.7\aether-impl-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-spi\1.7\aether-spi-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-api\1.7\aether-api-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-util\1.7\aether-util-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-classworlds\2.2.3\plexus-classworlds-2.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-component-annotations\1.5.5\plexus-component-annotations-1.5.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\plexus\plexus-sec-dispatcher\1.3\plexus-sec-dispatcher-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\plexus\plexus-cipher\1.4\plexus-cipher-1.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-artifact\3.0\maven-artifact-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-common-artifact-filters\3.0.1\maven-common-artifact-filters-3.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-shared-utils\3.1.0\maven-shared-utils-3.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-artifact-transfer\0.9.0\maven-artifact-transfer-0.9.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-interpolation\1.24\plexus-interpolation-1.24.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-archiver\3.5\plexus-archiver-3.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-compress\1.14\commons-compress-1.14.jar;C:\Users\Sohan.Dey\.m2\repository\org\iq80\snappy\snappy\0.4\snappy-0.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\tukaani\xz\1.6\xz-1.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\file-management\3.0.0\file-management-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-shared-io\3.0.0\maven-shared-io-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-compat\3.0\maven-compat-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\wagon\wagon-provider-api\2.10\wagon-provider-api-2.10.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-filtering\3.1.1\maven-filtering-3.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\plexus\plexus-build-api\0.0.7\plexus-build-api-0.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-io\3.0.0\plexus-io-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-archiver\3.2.0\maven-archiver-3.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\guava\guava\19.0\guava-19.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\hibernate\hibernate-core\5.4.2.Final\hibernate-core-5.4.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\javax\persistence\javax.persistence-api\2.2\javax.persistence-api-2.2.jar;C:\Users\Sohan.Dey\.m2\repository\net\bytebuddy\byte-buddy\1.9.10\byte-buddy-1.9.10.jar;C:\Users\Sohan.Dey\.m2\repository\antlr\antlr\2.7.7\antlr-2.7.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\transaction\jboss-transaction-api_1.2_spec\1.1.1.Final\jboss-transaction-api_1.2_spec-1.1.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\jandex\2.0.5.Final\jandex-2.0.5.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\classmate\1.3.4\classmate-1.3.4.jar;C:\Users\Sohan.Dey\.m2\repository\javax\activation\javax.activation-api\1.2.0\javax.activation-api-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\dom4j\dom4j\2.1.1\dom4j-2.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\hibernate\common\hibernate-commons-annotations\5.1.0.Final\hibernate-commons-annotations-5.1.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\javax\xml\bind\jaxb-api\2.3.1\jaxb-api-2.3.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\glassfish\jaxb\jaxb-runtime\2.3.1\jaxb-runtime-2.3.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\glassfish\jaxb\txw2\2.3.1\txw2-2.3.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\istack\istack-commons-runtime\3.0.7\istack-commons-runtime-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\jvnet\staxex\stax-ex\1.8\stax-ex-1.8.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\xml\fastinfoset\FastInfoset\1.2.15\FastInfoset-1.2.15.jar;C:\Users\Sohan.Dey\.m2\repository\commons-beanutils\commons-beanutils\1.9.2\commons-beanutils-1.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\commons-logging\commons-logging\1.1.1\commons-logging-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\commons-collections\commons-collections\3.2.1\commons-collections-3.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\swagger-annotations\1.5.20\swagger-annotations-1.5.20.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.5\jackson-datatype-jsr310-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\postgresql\postgresql\42.2.2\postgresql-42.2.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\slf4j-log4j12\1.6.2\slf4j-log4j12-1.6.2.jar;C:\Users\Sohan.Dey\.m2\repository\log4j\log4j\1.2.16\log4j-1.2.16.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\logging\log4j\log4j-api\2.11.1\log4j-api-2.11.1.jar;C:\Users\Sohan.Dey\.m2\repository\net\lingala\zip4j\zip4j\1.3.2\zip4j-1.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\httpcomponents\httpclient\4.5.3\httpclient-4.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\httpcomponents\httpcore\4.4.6\httpcore-4.4.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-client\2.8.1\hadoop-client-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-common\2.8.1\hadoop-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\commons-cli\commons-cli\1.2\commons-cli-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\xmlenc\xmlenc\0.52\xmlenc-0.52.jar;C:\Users\Sohan.Dey\.m2\repository\commons-net\commons-net\3.1\commons-net-3.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\mortbay\jetty\jetty-sslengine\6.1.26\jetty-sslengine-6.1.26.jar;C:\Users\Sohan.Dey\.m2\repository\javax\servlet\jsp\jsp-api\2.1\jsp-api-2.1.jar;C:\Users\Sohan.Dey\.m2\repository\commons-configuration\commons-configuration\1.6\commons-configuration-1.6.jar;C:\Users\Sohan.Dey\.m2\repository\commons-digester\commons-digester\1.8\commons-digester-1.8.jar;C:\Users\Sohan.Dey\.m2\repository\commons-beanutils\commons-beanutils-core\1.8.0\commons-beanutils-core-1.8.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-core-asl\1.9.13\jackson-core-asl-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-mapper-asl\1.9.13\jackson-mapper-asl-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\avro\avro\1.7.4\avro-1.7.4.jar;C:\Users\Sohan.Dey\.m2\repository\com\thoughtworks\paranamer\paranamer\2.3\paranamer-2.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\xerial\snappy\snappy-java\1.0.4.1\snappy-java-1.0.4.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\protobuf\protobuf-java\2.5.0\protobuf-java-2.5.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-auth\2.8.1\hadoop-auth-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\server\apacheds-kerberos-codec\2.0.0-M15\apacheds-kerberos-codec-2.0.0-M15.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\server\apacheds-i18n\2.0.0-M15\apacheds-i18n-2.0.0-M15.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\api\api-asn1-api\1.0.0-M20\api-asn1-api-1.0.0-M20.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\api\api-util\1.0.0-M20\api-util-1.0.0-M20.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\curator\curator-framework\2.7.1\curator-framework-2.7.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\curator\curator-client\2.7.1\curator-client-2.7.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\curator\curator-recipes\2.7.1\curator-recipes-2.7.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\code\findbugs\jsr305\3.0.0\jsr305-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\htrace\htrace-core4\4.0.1-incubating\htrace-core4-4.0.1-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\zookeeper\zookeeper\3.4.6\zookeeper-3.4.6.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty\3.7.0.Final\netty-3.7.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-hdfs\2.8.1\hadoop-hdfs-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-hdfs-client\2.8.1\hadoop-hdfs-client-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\squareup\okhttp\okhttp\2.4.0\okhttp-2.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\squareup\okio\okio\1.4.0\okio-1.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-app\2.8.1\hadoop-mapreduce-client-app-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-common\2.8.1\hadoop-mapreduce-client-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-client\2.8.1\hadoop-yarn-client-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-server-common\2.8.1\hadoop-yarn-server-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-shuffle\2.8.1\hadoop-mapreduce-client-shuffle-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\fusesource\leveldbjni\leveldbjni-all\1.8\leveldbjni-all-1.8.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-api\2.8.1\hadoop-yarn-api-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-core\2.8.1\hadoop-mapreduce-client-core-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-common\2.8.1\hadoop-yarn-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\javax\servlet\servlet-api\2.5\servlet-api-2.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\mortbay\jetty\jetty-util\6.1.26\jetty-util-6.1.26.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\jersey\jersey-core\1.9\jersey-core-1.9.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\jersey\jersey-client\1.9\jersey-client-1.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-xc\1.9.13\jackson-xc-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-jobclient\2.8.1\hadoop-mapreduce-client-jobclient-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-annotations\2.8.1\hadoop-annotations-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\bouncycastle\bcprov-jdk15on\1.56\bcprov-jdk15on-1.56.jar;C:\Users\Sohan.Dey\.m2\repository\commons-codec\commons-codec\1.11\commons-codec-1.11.jar;C:\Users\Sohan.Dey\.m2\repository\commons-io\commons-io\2.6\commons-io-2.6.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\zxing\core\3.3.3\core-3.3.3.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\zxing\javase\2.0\javase-2.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\hamcrest\hamcrest-all\1.3\hamcrest-all-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\velocity\velocity\1.7\velocity-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\commons-lang\commons-lang\2.4\commons-lang-2.4.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\html2pdf\2.0.0\html2pdf-2.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\forms\7.1.0\forms-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\kernel\7.1.0\kernel-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\io\7.1.0\io-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\layout\7.1.0\layout-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\itextpdf\5.5.13\itextpdf-5.5.13.jar;C:\Users\Sohan.Dey\.m2\repository\javax\mail\javax.mail-api\1.6.2\javax.mail-api-1.6.2.jar;D:\Mosip_Automation_Test\MOSIP_FUNCTIONAL_TESTS\mosip-functional-tests\authentication-demo-service\target\classes;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.0.2.RELEASE\spring-boot-starter-web-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-json\2.0.2.RELEASE\spring-boot-starter-json-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.5\jackson-datatype-jdk8-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.5\jackson-module-parameter-names-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\2.0.2.RELEASE\spring-boot-starter-tomcat-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\8.5.31\tomcat-embed-el-8.5.31.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\8.5.31\tomcat-embed-websocket-8.5.31.jar;C:\Users\Sohan.Dey\.m2\repository\org\hibernate\validator\hibernate-validator\6.0.9.Final\hibernate-validator-6.0.9.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-web\5.0.6.RELEASE\spring-web-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-webmvc\5.0.6.RELEASE\spring-webmvc-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-expression\5.0.6.RELEASE\spring-expression-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-test\2.0.2.RELEASE\spring-boot-starter-test-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-test\2.0.2.RELEASE\spring-boot-test-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-test-autoconfigure\2.0.2.RELEASE\spring-boot-test-autoconfigure-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\assertj\assertj-core\3.9.1\assertj-core-3.9.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\skyscreamer\jsonassert\1.5.0\jsonassert-1.5.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-core\5.0.6.RELEASE\spring-core-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-jcl\5.0.6.RELEASE\spring-jcl-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-test\5.0.6.RELEASE\spring-test-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\xmlunit\xmlunit-core\2.5.1\xmlunit-core-2.5.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-swagger-ui\2.9.2\springfox-swagger-ui-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-spring-web\2.9.2\springfox-spring-web-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-swagger2\2.9.2\springfox-swagger2-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-spi\2.9.2\springfox-spi-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-core\2.9.2\springfox-core-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-schema\2.9.2\springfox-schema-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-swagger-common\2.9.2\springfox-swagger-common-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\plugin\spring-plugin-core\1.2.0.RELEASE\spring-plugin-core-1.2.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\plugin\spring-plugin-metadata\1.2.0.RELEASE\spring-plugin-metadata-1.2.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\mapstruct\mapstruct\1.2.0.Final\mapstruct-1.2.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\javax\ws\rs\javax.ws.rs-api\2.0\javax.ws.rs-api-2.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\authentication\authentication-core\1.2.0.1-B3\authentication-core-1.2.0.1-B3.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-cache\2.0.2.RELEASE\spring-boot-starter-cache-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-context-support\5.0.6.RELEASE\spring-context-support-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\machinezoo\sourceafis\sourceafis\3.4.0\sourceafis-3.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\net\sf\trove4j\trove4j\3.0.3\trove4j-3.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\com\machinezoo\noexception\noexception\1.3.2\noexception-1.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\mhshams\jnbis\2.0.1\jnbis-2.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\sanselan\sanselan\0.97-incubator\sanselan-0.97-incubator.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\idrepository\id-repository-core\1.2.0.1-B1\id-repository-core-1.2.0.1-B1.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-biosdk-provider\1.2.0.1-B1\kernel-biosdk-provider-1.2.0.1-B1.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-biometrics-api\1.2.0.1-B1\kernel-biometrics-api-1.2.0.1-B1.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-demographics-api\1.2.0.1-B1\kernel-demographics-api-1.2.0.1-B1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-webflux\2.0.2.RELEASE\spring-boot-starter-webflux-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-reactor-netty\2.0.2.RELEASE\spring-boot-starter-reactor-netty-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\projectreactor\ipc\reactor-netty\0.7.7.RELEASE\reactor-netty-0.7.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-handler-proxy\4.1.24.Final\netty-handler-proxy-4.1.24.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-codec-socks\4.1.24.Final\netty-codec-socks-4.1.24.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-transport-native-epoll\4.1.24.Final\netty-transport-native-epoll-4.1.24.Final-linux-x86_64.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-transport-native-unix-common\4.1.24.Final\netty-transport-native-unix-common-4.1.24.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-webflux\5.0.6.RELEASE\spring-webflux-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\synchronoss\cloud\nio-multipart-parser\1.1.0\nio-multipart-parser-1.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\synchronoss\cloud\nio-stream-storage\1.1.3\nio-stream-storage-1.1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\springdoc\springdoc-openapi-ui\1.5.10\springdoc-openapi-ui-1.5.10.jar;C:\Users\Sohan.Dey\.m2\repository\org\springdoc\springdoc-openapi-webmvc-core\1.5.10\springdoc-openapi-webmvc-core-1.5.10.jar;C:\Users\Sohan.Dey\.m2\repository\org\springdoc\springdoc-openapi-common\1.5.10\springdoc-openapi-common-1.5.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-models\2.1.10\swagger-models-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-annotations\2.1.10\swagger-annotations-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-integration\2.1.10\swagger-integration-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-core\2.1.10\swagger-core-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\jakarta\xml\bind\jakarta.xml.bind-api\2.3.2\jakarta.xml.bind-api-2.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\jakarta\activation\jakarta.activation-api\1.2.1\jakarta.activation-api-1.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-yaml\2.12.1\jackson-dataformat-yaml-2.12.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\github\classgraph\classgraph\4.8.69\classgraph-4.8.69.jar;C:\Users\Sohan.Dey\.m2\repository\org\webjars\swagger-ui\3.51.1\swagger-ui-3.51.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\webjars\webjars-locator-core\0.45\webjars-locator-core-0.45.jar;C:\Users\Sohan.Dey\.m2\repository\commons-fileupload\commons-fileupload\1.4\commons-fileupload-1.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\mockito\mockito-core\2.23.4\mockito-core-2.23.4.jar;C:\Users\Sohan.Dey\.m2\repository\net\bytebuddy\byte-buddy-agent\1.9.3\byte-buddy-agent-1.9.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\objenesis\objenesis\2.6\objenesis-2.6.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-websubclient-api\1.2.0.1-SNAPSHOT\kernel-websubclient-api-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-aspects\5.0.6.RELEASE\spring-aspects-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\aspectj\aspectjweaver\1.8.13\aspectjweaver-1.8.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\owasp\encoder\encoder\1.2.3\encoder-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-actuator\2.0.2.RELEASE\spring-boot-starter-actuator-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-actuator-autoconfigure\2.0.2.RELEASE\spring-boot-actuator-autoconfigure-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-actuator\2.0.2.RELEASE\spring-boot-actuator-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\tensorflow\tensorflow\1.12.0\tensorflow-1.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\tensorflow\libtensorflow\1.12.0\libtensorflow-1.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\tensorflow\libtensorflow_jni\1.12.0\libtensorflow_jni-1.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-templatemanager-velocity\1.2.0.1-SNAPSHOT\kernel-templatemanager-velocity-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\javax\servlet\javax.servlet-api\4.0.1\javax.servlet-api-4.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-starter-config\2.0.0.RELEASE\spring-cloud-starter-config-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-starter\2.0.0.RELEASE\spring-cloud-starter-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-context\2.0.0.RELEASE\spring-cloud-context-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-crypto\5.0.6.RELEASE\spring-security-crypto-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-commons\2.0.0.RELEASE\spring-cloud-commons-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-rsa\1.0.5.RELEASE\spring-security-rsa-1.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-config-client\2.0.0.RELEASE\spring-cloud-config-client-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\jai-imageio\jai-imageio-jpeg2000\1.3.0\jai-imageio-jpeg2000-1.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\jai-imageio\jai-imageio-core\1.3.0\jai-imageio-core-1.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-keymanager-service\1.2.0.1-SNAPSHOT\kernel-keymanager-service-1.2.0.1-SNAPSHOT-lib.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-test\5.0.5.RELEASE\spring-security-test-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-core\5.0.5.RELEASE\spring-security-core-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-pdfgenerator-itext\1.2.0.1-SNAPSHOT\kernel-pdfgenerator-itext-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\barcodes\7.1.0\barcodes-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\font-asian\7.1.0\font-asian-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\hyph\7.1.0\hyph-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\pdfa\7.1.0\pdfa-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\sign\7.1.0\sign-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\tool\xmlworker\5.5.13\xmlworker-5.5.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\bouncycastle\bcpkix-jdk15on\1.66\bcpkix-jdk15on-1.66.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-data-jpa\2.0.2.RELEASE\spring-boot-starter-data-jpa-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\2.0.2.RELEASE\spring-boot-starter-jdbc-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\zaxxer\HikariCP\2.7.9\HikariCP-2.7.9.jar;C:\Users\Sohan.Dey\.m2\repository\com\h2database\h2\1.4.197\h2-1.4.197.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\microsoft\TSS.Java\0.3.0\TSS.Java-0.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\net\java\dev\jna\jna\4.4.0\jna-4.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\cache2k\cache2k-api\2.4.1.Final\cache2k-api-2.4.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\cache2k\cache2k-core\2.4.1.Final\cache2k-core-2.4.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\nimbusds\nimbus-jose-jwt\9.14\nimbus-jose-jwt-9.14.jar;C:\Users\Sohan.Dey\.m2\repository\io\projectreactor\reactor-core\3.1.7.RELEASE\reactor-core-3.1.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-core\1.2.0.1-B1\kernel-core-1.2.0.1-B1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter\2.0.2.RELEASE\spring-boot-starter-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot\2.0.2.RELEASE\spring-boot-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.0.2.RELEASE\spring-boot-autoconfigure-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.0.2.RELEASE\spring-boot-starter-logging-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.10.0\log4j-to-slf4j-2.10.0.jar;C:\Users\Sohan.Dey\.m2\repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\data\spring-data-jpa\2.0.7.RELEASE\spring-data-jpa-2.0.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\data\spring-data-commons\2.0.7.RELEASE\spring-data-commons-2.0.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-orm\5.0.6.RELEASE\spring-orm-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-jdbc\5.0.6.RELEASE\spring-jdbc-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-context\5.0.6.RELEASE\spring-context-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-aop\5.0.6.RELEASE\spring-aop-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-tx\5.0.6.RELEASE\spring-tx-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-beans\5.0.6.RELEASE\spring-beans-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\aspectj\aspectjrt\1.8.12\aspectjrt-1.8.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-security\2.0.2.RELEASE\spring-boot-starter-security-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-config\5.0.5.RELEASE\spring-security-config-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-web\5.0.5.RELEASE\spring-security-web-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\javax\transaction\javax.transaction-api\1.3\javax.transaction-api-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-math3\3.6.1\commons-math3-3.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\javax\interceptor\javax.interceptor-api\1.2\javax.interceptor-api-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\code\findbugs\annotations\3.0.1\annotations-3.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\net\jcip\jcip-annotations\1.0\jcip-annotations-1.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\swagger-models\1.5.21\swagger-models-1.5.21.jar;C:\Users\Sohan.Dey\.m2\repository\com\auth0\java-jwt\3.8.1\java-jwt-3.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\micrometer\micrometer-core\1.4.2\micrometer-core-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\hdrhistogram\HdrHistogram\2.1.12\HdrHistogram-2.1.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\latencyutils\LatencyUtils\2.0.3\LatencyUtils-2.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\micrometer\micrometer-registry-prometheus\1.4.2\micrometer-registry-prometheus-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\prometheus\simpleclient_common\0.8.1\simpleclient_common-0.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\prometheus\simpleclient\0.8.1\simpleclient-0.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\jul-to-slf4j\1.7.25\jul-to-slf4j-1.7.25.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\jcl-over-slf4j\1.7.25\jcl-over-slf4j-1.7.25.jar;C:\Users\Sohan.Dey\.m2\repository\javax\activation\activation\1.1\activation-1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-starter-sleuth\2.0.4.RELEASE\spring-cloud-starter-sleuth-2.0.4.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-aop\2.0.9.RELEASE\spring-boot-starter-aop-2.0.9.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-sleuth-core\2.0.4.RELEASE\spring-cloud-sleuth-core-2.0.4.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave\5.6.1\brave-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\zipkin2\zipkin\2.12.0\zipkin-2.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\reporter2\zipkin-reporter\2.7.14\zipkin-reporter-2.7.14.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-context-log4j2\5.6.1\brave-context-log4j2-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-spring-web\5.6.1\brave-instrumentation-spring-web-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-http\5.6.1\brave-instrumentation-http-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-spring-rabbit\5.6.1\brave-instrumentation-spring-rabbit-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-kafka-clients\5.6.1\brave-instrumentation-kafka-clients-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-httpclient\5.6.1\brave-instrumentation-httpclient-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-httpasyncclient\5.6.1\brave-instrumentation-httpasyncclient-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-spring-webmvc\5.6.1\brave-instrumentation-spring-webmvc-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-servlet\5.6.1\brave-instrumentation-servlet-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\8.5.55\tomcat-embed-core-8.5.55.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\tomcat-annotations-api\8.5.55\tomcat-annotations-api-8.5.55.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\retry\spring-retry\1.2.1.RELEASE\spring-retry-1.2.1.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\module\jackson-module-afterburner\2.12.0\jackson-module-afterburner-2.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-registration-packet-manager\1.1.5.3\kernel-registration-packet-manager-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-keygenerator-bouncycastle\1.1.5.3\kernel-keygenerator-bouncycastle-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-cbeffutil-api\1.1.5.3\kernel-cbeffutil-api-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-logger-logback\1.1.5.3\kernel-logger-logback-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\net\logstash\logback\logstash-logback-encoder\6.4\logstash-logback-encoder-6.4.jar;C:\Users\Sohan.Dey\.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\ch\qos\logback\logback-access\1.2.3\logback-access-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-crypto-jce\1.1.5.3\kernel-crypto-jce-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\bitbucket\b_c\jose4j\0.6.5\jose4j-0.6.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\wink\wink-json4j-provider\1.1.2-incubating\wink-json4j-provider-1.1.2-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\wink\wink-common\1.1.2-incubating\wink-common-1.1.2-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\xml\bind\jaxb-impl\2.2.1.1\jaxb-impl-2.2.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\geronimo\specs\geronimo-annotation_1.1_spec\1.0\geronimo-annotation_1.1_spec-1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\wink\wink-json4j\1.1.2-incubating\wink-json4j-1.1.2-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\javax\ws\rs\jsr311-api\1.1.1\jsr311-api-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\checkerframework\checker-qual\2.9.0\checker-qual-2.9.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\activemq\activemq-broker\5.15.9\activemq-broker-5.15.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\activemq\activemq-client\5.15.9\activemq-client-5.15.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\geronimo\specs\geronimo-jms_1.1_spec\1.1.1\geronimo-jms_1.1_spec-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\fusesource\hawtbuf\hawtbuf\1.11\hawtbuf-1.11.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\geronimo\specs\geronimo-j2ee-management_1.1_spec\1.0.1\geronimo-j2ee-management_1.1_spec-1.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\activemq\activemq-openwire-legacy\5.15.9\activemq-openwire-legacy-5.15.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\projectlombok\lombok\1.18.8\lombok-1.18.8.jar \ No newline at end of file diff --git a/apitest/.temp-New_configuration (1)-classpath-arg-1658840665646.txt b/apitest/.temp-New_configuration (1)-classpath-arg-1658840665646.txt new file mode 100644 index 000000000..1aa22a4a9 --- /dev/null +++ b/apitest/.temp-New_configuration (1)-classpath-arg-1658840665646.txt @@ -0,0 +1 @@ +-classpath D:\Mosip_Automation_Test\Docker_Test\mosip-functional-tests\automationtests\target\test-classes;D:\Mosip_Automation_Test\Docker_Test\mosip-functional-tests\automationtests\target\classes;C:\Users\Sohan.Dey\.m2\repository\com\opencsv\opencsv\4.1\opencsv-4.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-lang3\3.6\commons-lang3-3.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-text\1.1\commons-text-1.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\ibm\icu\icu4j\63.1\icu4j-63.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\keycloak\keycloak-admin-client\17.0.1\keycloak-admin-client-17.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\keycloak\keycloak-core\17.0.1\keycloak-core-17.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\keycloak\keycloak-common\17.0.1\keycloak-common-17.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-client\3.13.2.Final\resteasy-client-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\ws\rs\jboss-jaxrs-api_2.1_spec\2.0.1.Final\jboss-jaxrs-api_2.1_spec-2.0.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-jaxrs\3.13.2.Final\resteasy-jaxrs-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\reactivestreams\reactive-streams\1.0.3\reactive-streams-1.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\jakarta\validation\jakarta.validation-api\2.0.2\jakarta.validation-api-2.0.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\annotation\jboss-annotations-api_1.3_spec\2.0.1.Final\jboss-annotations-api_1.3_spec-2.0.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\activation\jakarta.activation\1.2.1\jakarta.activation-1.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\stephenc\jcip\jcip-annotations\1.0-1\jcip-annotations-1.0-1.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-multipart-provider\3.13.2.Final\resteasy-multipart-provider-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\mail\jakarta.mail\1.6.5\jakarta.mail-1.6.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\james\apache-mime4j\0.6\apache-mime4j-0.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-jackson2-provider\3.13.2.Final\resteasy-jackson2-provider-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\jaxrs\jackson-jaxrs-json-provider\2.10.5\jackson-jaxrs-json-provider-2.10.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\jaxrs\jackson-jaxrs-base\2.10.5\jackson-jaxrs-base-2.10.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\json-patch\1.9\json-patch-1.9.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\jackson-coreutils\1.6\jackson-coreutils-1.6.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\msg-simple\1.1\msg-simple-1.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\btf\1.2\btf-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-jaxb-provider\3.13.2.Final\resteasy-jaxb-provider-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\xml\bind\jboss-jaxb-api_2.3_spec\2.0.0.Final\jboss-jaxb-api_2.3_spec-2.0.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\javassist\javassist\3.25.0-GA\javassist-3.25.0-GA.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\jknack\handlebars\3.0.0\handlebars-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\antlr\antlr4-runtime\4.5.1-1\antlr4-runtime-4.5.1-1.jar;C:\Users\Sohan.Dey\.m2\repository\org\mozilla\rhino\1.7R4\rhino-1.7R4.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\slf4j-api\1.6.4\slf4j-api-1.6.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-collections4\4.3\commons-collections4-4.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\jsonwebtoken\jjwt\0.6.0\jjwt-0.6.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\flipkart\zjsonpatch\zjsonpatch\0.4.7\zjsonpatch-0.4.7.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk\1.11.368\aws-java-sdk-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dlm\1.11.368\aws-java-sdk-dlm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\jmespath-java\1.11.368\jmespath-java-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-macie\1.11.368\aws-java-sdk-macie-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-eks\1.11.368\aws-java-sdk-eks-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediatailor\1.11.368\aws-java-sdk-mediatailor-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-neptune\1.11.368\aws-java-sdk-neptune-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-pi\1.11.368\aws-java-sdk-pi-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iot1clickprojects\1.11.368\aws-java-sdk-iot1clickprojects-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iot1clickdevices\1.11.368\aws-java-sdk-iot1clickdevices-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iotanalytics\1.11.368\aws-java-sdk-iotanalytics-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-acmpca\1.11.368\aws-java-sdk-acmpca-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-secretsmanager\1.11.368\aws-java-sdk-secretsmanager-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-fms\1.11.368\aws-java-sdk-fms-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-connect\1.11.368\aws-java-sdk-connect-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-transcribe\1.11.368\aws-java-sdk-transcribe-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-autoscalingplans\1.11.368\aws-java-sdk-autoscalingplans-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-workmail\1.11.368\aws-java-sdk-workmail-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-servicediscovery\1.11.368\aws-java-sdk-servicediscovery-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloud9\1.11.368\aws-java-sdk-cloud9-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-serverlessapplicationrepository\1.11.368\aws-java-sdk-serverlessapplicationrepository-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-alexaforbusiness\1.11.368\aws-java-sdk-alexaforbusiness-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-resourcegroups\1.11.368\aws-java-sdk-resourcegroups-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-comprehend\1.11.368\aws-java-sdk-comprehend-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-translate\1.11.368\aws-java-sdk-translate-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sagemaker\1.11.368\aws-java-sdk-sagemaker-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iotjobsdataplane\1.11.368\aws-java-sdk-iotjobsdataplane-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sagemakerruntime\1.11.368\aws-java-sdk-sagemakerruntime-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-kinesisvideo\1.11.368\aws-java-sdk-kinesisvideo-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-codec-http\4.1.17.Final\netty-codec-http-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-codec\4.1.17.Final\netty-codec-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-handler\4.1.17.Final\netty-handler-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-buffer\4.1.17.Final\netty-buffer-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-common\4.1.17.Final\netty-common-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-transport\4.1.17.Final\netty-transport-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-resolver\4.1.17.Final\netty-resolver-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-appsync\1.11.368\aws-java-sdk-appsync-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-guardduty\1.11.368\aws-java-sdk-guardduty-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mq\1.11.368\aws-java-sdk-mq-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediaconvert\1.11.368\aws-java-sdk-mediaconvert-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediastore\1.11.368\aws-java-sdk-mediastore-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediastoredata\1.11.368\aws-java-sdk-mediastoredata-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-medialive\1.11.368\aws-java-sdk-medialive-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediapackage\1.11.368\aws-java-sdk-mediapackage-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-costexplorer\1.11.368\aws-java-sdk-costexplorer-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-pricing\1.11.368\aws-java-sdk-pricing-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mobile\1.11.368\aws-java-sdk-mobile-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudhsmv2\1.11.368\aws-java-sdk-cloudhsmv2-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-glue\1.11.368\aws-java-sdk-glue-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-migrationhub\1.11.368\aws-java-sdk-migrationhub-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dax\1.11.368\aws-java-sdk-dax-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-greengrass\1.11.368\aws-java-sdk-greengrass-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-athena\1.11.368\aws-java-sdk-athena-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-marketplaceentitlement\1.11.368\aws-java-sdk-marketplaceentitlement-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codestar\1.11.368\aws-java-sdk-codestar-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lexmodelbuilding\1.11.368\aws-java-sdk-lexmodelbuilding-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-resourcegroupstaggingapi\1.11.368\aws-java-sdk-resourcegroupstaggingapi-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-pinpoint\1.11.368\aws-java-sdk-pinpoint-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-xray\1.11.368\aws-java-sdk-xray-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-opsworkscm\1.11.368\aws-java-sdk-opsworkscm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-support\1.11.368\aws-java-sdk-support-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-simpledb\1.11.368\aws-java-sdk-simpledb-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-servicecatalog\1.11.368\aws-java-sdk-servicecatalog-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-servermigration\1.11.368\aws-java-sdk-servermigration-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-simpleworkflow\1.11.368\aws-java-sdk-simpleworkflow-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-storagegateway\1.11.368\aws-java-sdk-storagegateway-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-route53\1.11.368\aws-java-sdk-route53-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-s3\1.11.368\aws-java-sdk-s3-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-importexport\1.11.368\aws-java-sdk-importexport-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sts\1.11.368\aws-java-sdk-sts-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sqs\1.11.368\aws-java-sdk-sqs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-rds\1.11.368\aws-java-sdk-rds-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-redshift\1.11.368\aws-java-sdk-redshift-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticbeanstalk\1.11.368\aws-java-sdk-elasticbeanstalk-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-glacier\1.11.368\aws-java-sdk-glacier-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iam\1.11.368\aws-java-sdk-iam-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-datapipeline\1.11.368\aws-java-sdk-datapipeline-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticloadbalancing\1.11.368\aws-java-sdk-elasticloadbalancing-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticloadbalancingv2\1.11.368\aws-java-sdk-elasticloadbalancingv2-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-emr\1.11.368\aws-java-sdk-emr-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticache\1.11.368\aws-java-sdk-elasticache-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elastictranscoder\1.11.368\aws-java-sdk-elastictranscoder-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ec2\1.11.368\aws-java-sdk-ec2-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dynamodb\1.11.368\aws-java-sdk-dynamodb-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sns\1.11.368\aws-java-sdk-sns-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-budgets\1.11.368\aws-java-sdk-budgets-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudtrail\1.11.368\aws-java-sdk-cloudtrail-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudwatch\1.11.368\aws-java-sdk-cloudwatch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-logs\1.11.368\aws-java-sdk-logs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-events\1.11.368\aws-java-sdk-events-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cognitoidentity\1.11.368\aws-java-sdk-cognitoidentity-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cognitosync\1.11.368\aws-java-sdk-cognitosync-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-directconnect\1.11.368\aws-java-sdk-directconnect-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudformation\1.11.368\aws-java-sdk-cloudformation-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudfront\1.11.368\aws-java-sdk-cloudfront-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-clouddirectory\1.11.368\aws-java-sdk-clouddirectory-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-kinesis\1.11.368\aws-java-sdk-kinesis-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-opsworks\1.11.368\aws-java-sdk-opsworks-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ses\1.11.368\aws-java-sdk-ses-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-autoscaling\1.11.368\aws-java-sdk-autoscaling-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudsearch\1.11.368\aws-java-sdk-cloudsearch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudwatchmetrics\1.11.368\aws-java-sdk-cloudwatchmetrics-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codedeploy\1.11.368\aws-java-sdk-codedeploy-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codepipeline\1.11.368\aws-java-sdk-codepipeline-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-kms\1.11.368\aws-java-sdk-kms-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-config\1.11.368\aws-java-sdk-config-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lambda\1.11.368\aws-java-sdk-lambda-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ecs\1.11.368\aws-java-sdk-ecs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ecr\1.11.368\aws-java-sdk-ecr-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudhsm\1.11.368\aws-java-sdk-cloudhsm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ssm\1.11.368\aws-java-sdk-ssm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-workspaces\1.11.368\aws-java-sdk-workspaces-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-machinelearning\1.11.368\aws-java-sdk-machinelearning-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-directory\1.11.368\aws-java-sdk-directory-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-efs\1.11.368\aws-java-sdk-efs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codecommit\1.11.368\aws-java-sdk-codecommit-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-devicefarm\1.11.368\aws-java-sdk-devicefarm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticsearch\1.11.368\aws-java-sdk-elasticsearch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-waf\1.11.368\aws-java-sdk-waf-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-marketplacecommerceanalytics\1.11.368\aws-java-sdk-marketplacecommerceanalytics-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-inspector\1.11.368\aws-java-sdk-inspector-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iot\1.11.368\aws-java-sdk-iot-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-api-gateway\1.11.368\aws-java-sdk-api-gateway-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-acm\1.11.368\aws-java-sdk-acm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-gamelift\1.11.368\aws-java-sdk-gamelift-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dms\1.11.368\aws-java-sdk-dms-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-marketplacemeteringservice\1.11.368\aws-java-sdk-marketplacemeteringservice-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cognitoidp\1.11.368\aws-java-sdk-cognitoidp-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-discovery\1.11.368\aws-java-sdk-discovery-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-applicationautoscaling\1.11.368\aws-java-sdk-applicationautoscaling-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-snowball\1.11.368\aws-java-sdk-snowball-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-rekognition\1.11.368\aws-java-sdk-rekognition-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-polly\1.11.368\aws-java-sdk-polly-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lightsail\1.11.368\aws-java-sdk-lightsail-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-stepfunctions\1.11.368\aws-java-sdk-stepfunctions-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-health\1.11.368\aws-java-sdk-health-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-costandusagereport\1.11.368\aws-java-sdk-costandusagereport-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codebuild\1.11.368\aws-java-sdk-codebuild-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-appstream\1.11.368\aws-java-sdk-appstream-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-shield\1.11.368\aws-java-sdk-shield-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-batch\1.11.368\aws-java-sdk-batch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lex\1.11.368\aws-java-sdk-lex-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mechanicalturkrequester\1.11.368\aws-java-sdk-mechanicalturkrequester-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-organizations\1.11.368\aws-java-sdk-organizations-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-workdocs\1.11.368\aws-java-sdk-workdocs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-core\1.11.368\aws-java-sdk-core-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\software\amazon\ion\ion-java\1.0.2\ion-java-1.0.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-cbor\2.6.7\jackson-dataformat-cbor-2.6.7.jar;C:\Users\Sohan.Dey\.m2\repository\joda-time\joda-time\2.8.1\joda-time-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-models\1.11.368\aws-java-sdk-models-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-swf-libraries\1.11.22\aws-java-sdk-swf-libraries-1.11.22.jar;C:\Users\Sohan.Dey\.m2\repository\com\aventstack\extentreports\3.0.0\extentreports-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\freemarker\freemarker\2.3.23\freemarker-2.3.23.jar;C:\Users\Sohan.Dey\.m2\repository\org\mongodb\mongodb-driver\3.3.0\mongodb-driver-3.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\mongodb\bson\3.3.0\bson-3.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\mongodb\mongodb-driver-core\3.3.0\mongodb-driver-core-3.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\httpcomponents\httpmime\4.5.2\httpmime-4.5.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\relevantcodes\extentreports\2.41.2\extentreports-2.41.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\jsoup\jsoup\1.8.3\jsoup-1.8.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\xerial\sqlite-jdbc\3.8.11.1\sqlite-jdbc-3.8.11.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\jayway\jsonpath\json-path\2.4.0\json-path-2.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\net\minidev\json-smart\2.3\json-smart-2.3.jar;C:\Users\Sohan.Dey\.m2\repository\net\minidev\accessors-smart\1.2\accessors-smart-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\ow2\asm\asm\5.0.4\asm-5.0.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-model\3.3.9\maven-model-3.3.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-utils\3.0.22\plexus-utils-3.0.22.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\rest-assured\3.0.7\rest-assured-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\groovy\groovy\2.4.12\groovy-2.4.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\groovy\groovy-xml\2.4.12\groovy-xml-2.4.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\hamcrest\hamcrest-library\1.3\hamcrest-library-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\ccil\cowan\tagsoup\tagsoup\1.2.1\tagsoup-1.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\json-path\3.0.7\json-path-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\groovy\groovy-json\2.4.12\groovy-json-2.4.12.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\rest-assured-common\3.0.7\rest-assured-common-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\xml-path\3.0.7\xml-path-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\testng\testng\6.11\testng-6.11.jar;C:\Users\Sohan.Dey\.m2\repository\com\beust\jcommander\1.64\jcommander-1.64.jar;C:\Users\Sohan.Dey\.m2\repository\org\yaml\snakeyaml\1.17\snakeyaml-1.17.jar;C:\Users\Sohan.Dey\.m2\repository\org\zeroturnaround\zt-zip\1.13\zt-zip-1.13.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.10.1\jackson-core-2.10.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.9.5\jackson-annotations-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.10.5\jackson-databind-2.10.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-xml\2.9.5\jackson-dataformat-xml-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\module\jackson-module-jaxb-annotations\2.9.5\jackson-module-jaxb-annotations-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\woodstox\stax2-api\3.1.4\stax2-api-3.1.4.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\woodstox\woodstox-core\5.0.3\woodstox-core-5.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\json\json\20180130\json-20180130.jar;C:\Users\Sohan.Dey\.m2\repository\com\googlecode\json-simple\json-simple\1.1.1\json-simple-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\junit\junit\4.10\junit-4.10.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\code\gson\gson\2.8.4\gson-2.8.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\plugins\maven-assembly-plugin\3.1.0\maven-assembly-plugin-3.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-plugin-api\3.0\maven-plugin-api-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\sisu\sisu-inject-plexus\1.4.2\sisu-inject-plexus-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\sisu\sisu-inject-bean\1.4.2\sisu-inject-bean-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\sisu\sisu-guice\2.1.7\sisu-guice-2.1.7-noaop.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-core\3.0\maven-core-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-settings\3.0\maven-settings-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-settings-builder\3.0\maven-settings-builder-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-repository-metadata\3.0\maven-repository-metadata-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-model-builder\3.0\maven-model-builder-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-aether-provider\3.0\maven-aether-provider-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-impl\1.7\aether-impl-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-spi\1.7\aether-spi-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-api\1.7\aether-api-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-util\1.7\aether-util-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-classworlds\2.2.3\plexus-classworlds-2.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-component-annotations\1.5.5\plexus-component-annotations-1.5.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\plexus\plexus-sec-dispatcher\1.3\plexus-sec-dispatcher-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\plexus\plexus-cipher\1.4\plexus-cipher-1.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-artifact\3.0\maven-artifact-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-common-artifact-filters\3.0.1\maven-common-artifact-filters-3.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-shared-utils\3.1.0\maven-shared-utils-3.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-artifact-transfer\0.9.0\maven-artifact-transfer-0.9.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-interpolation\1.24\plexus-interpolation-1.24.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-archiver\3.5\plexus-archiver-3.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-compress\1.14\commons-compress-1.14.jar;C:\Users\Sohan.Dey\.m2\repository\org\iq80\snappy\snappy\0.4\snappy-0.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\tukaani\xz\1.6\xz-1.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\file-management\3.0.0\file-management-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-shared-io\3.0.0\maven-shared-io-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-compat\3.0\maven-compat-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\wagon\wagon-provider-api\2.10\wagon-provider-api-2.10.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-filtering\3.1.1\maven-filtering-3.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\plexus\plexus-build-api\0.0.7\plexus-build-api-0.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-io\3.0.0\plexus-io-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-archiver\3.2.0\maven-archiver-3.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\guava\guava\19.0\guava-19.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\hibernate\hibernate-core\5.4.2.Final\hibernate-core-5.4.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\javax\persistence\javax.persistence-api\2.2\javax.persistence-api-2.2.jar;C:\Users\Sohan.Dey\.m2\repository\net\bytebuddy\byte-buddy\1.9.10\byte-buddy-1.9.10.jar;C:\Users\Sohan.Dey\.m2\repository\antlr\antlr\2.7.7\antlr-2.7.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\transaction\jboss-transaction-api_1.2_spec\1.1.1.Final\jboss-transaction-api_1.2_spec-1.1.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\jandex\2.0.5.Final\jandex-2.0.5.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\classmate\1.3.4\classmate-1.3.4.jar;C:\Users\Sohan.Dey\.m2\repository\javax\activation\javax.activation-api\1.2.0\javax.activation-api-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\dom4j\dom4j\2.1.1\dom4j-2.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\hibernate\common\hibernate-commons-annotations\5.1.0.Final\hibernate-commons-annotations-5.1.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\javax\xml\bind\jaxb-api\2.3.1\jaxb-api-2.3.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\glassfish\jaxb\jaxb-runtime\2.3.1\jaxb-runtime-2.3.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\glassfish\jaxb\txw2\2.3.1\txw2-2.3.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\istack\istack-commons-runtime\3.0.7\istack-commons-runtime-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\jvnet\staxex\stax-ex\1.8\stax-ex-1.8.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\xml\fastinfoset\FastInfoset\1.2.15\FastInfoset-1.2.15.jar;C:\Users\Sohan.Dey\.m2\repository\commons-beanutils\commons-beanutils\1.9.2\commons-beanutils-1.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\commons-logging\commons-logging\1.1.1\commons-logging-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\commons-collections\commons-collections\3.2.1\commons-collections-3.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\swagger-annotations\1.5.20\swagger-annotations-1.5.20.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.5\jackson-datatype-jsr310-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\postgresql\postgresql\42.2.2\postgresql-42.2.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\slf4j-log4j12\1.6.2\slf4j-log4j12-1.6.2.jar;C:\Users\Sohan.Dey\.m2\repository\log4j\log4j\1.2.16\log4j-1.2.16.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\logging\log4j\log4j-api\2.11.1\log4j-api-2.11.1.jar;C:\Users\Sohan.Dey\.m2\repository\net\lingala\zip4j\zip4j\1.3.2\zip4j-1.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\httpcomponents\httpclient\4.5.3\httpclient-4.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\httpcomponents\httpcore\4.4.6\httpcore-4.4.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-client\2.8.1\hadoop-client-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-common\2.8.1\hadoop-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\commons-cli\commons-cli\1.2\commons-cli-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\xmlenc\xmlenc\0.52\xmlenc-0.52.jar;C:\Users\Sohan.Dey\.m2\repository\commons-net\commons-net\3.1\commons-net-3.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\mortbay\jetty\jetty-sslengine\6.1.26\jetty-sslengine-6.1.26.jar;C:\Users\Sohan.Dey\.m2\repository\javax\servlet\jsp\jsp-api\2.1\jsp-api-2.1.jar;C:\Users\Sohan.Dey\.m2\repository\commons-configuration\commons-configuration\1.6\commons-configuration-1.6.jar;C:\Users\Sohan.Dey\.m2\repository\commons-digester\commons-digester\1.8\commons-digester-1.8.jar;C:\Users\Sohan.Dey\.m2\repository\commons-beanutils\commons-beanutils-core\1.8.0\commons-beanutils-core-1.8.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-core-asl\1.9.13\jackson-core-asl-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-mapper-asl\1.9.13\jackson-mapper-asl-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\avro\avro\1.7.4\avro-1.7.4.jar;C:\Users\Sohan.Dey\.m2\repository\com\thoughtworks\paranamer\paranamer\2.3\paranamer-2.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\xerial\snappy\snappy-java\1.0.4.1\snappy-java-1.0.4.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\protobuf\protobuf-java\2.5.0\protobuf-java-2.5.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-auth\2.8.1\hadoop-auth-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\server\apacheds-kerberos-codec\2.0.0-M15\apacheds-kerberos-codec-2.0.0-M15.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\server\apacheds-i18n\2.0.0-M15\apacheds-i18n-2.0.0-M15.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\api\api-asn1-api\1.0.0-M20\api-asn1-api-1.0.0-M20.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\api\api-util\1.0.0-M20\api-util-1.0.0-M20.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\curator\curator-framework\2.7.1\curator-framework-2.7.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\curator\curator-client\2.7.1\curator-client-2.7.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\curator\curator-recipes\2.7.1\curator-recipes-2.7.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\code\findbugs\jsr305\3.0.0\jsr305-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\htrace\htrace-core4\4.0.1-incubating\htrace-core4-4.0.1-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\zookeeper\zookeeper\3.4.6\zookeeper-3.4.6.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty\3.7.0.Final\netty-3.7.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-hdfs\2.8.1\hadoop-hdfs-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-hdfs-client\2.8.1\hadoop-hdfs-client-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\squareup\okhttp\okhttp\2.4.0\okhttp-2.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\squareup\okio\okio\1.4.0\okio-1.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-app\2.8.1\hadoop-mapreduce-client-app-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-common\2.8.1\hadoop-mapreduce-client-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-client\2.8.1\hadoop-yarn-client-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-server-common\2.8.1\hadoop-yarn-server-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-shuffle\2.8.1\hadoop-mapreduce-client-shuffle-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\fusesource\leveldbjni\leveldbjni-all\1.8\leveldbjni-all-1.8.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-api\2.8.1\hadoop-yarn-api-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-core\2.8.1\hadoop-mapreduce-client-core-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-common\2.8.1\hadoop-yarn-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\javax\servlet\servlet-api\2.5\servlet-api-2.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\mortbay\jetty\jetty-util\6.1.26\jetty-util-6.1.26.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\jersey\jersey-core\1.9\jersey-core-1.9.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\jersey\jersey-client\1.9\jersey-client-1.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-jaxrs\1.9.13\jackson-jaxrs-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-xc\1.9.13\jackson-xc-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-jobclient\2.8.1\hadoop-mapreduce-client-jobclient-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-annotations\2.8.1\hadoop-annotations-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\bouncycastle\bcprov-jdk16\1.45\bcprov-jdk16-1.45.jar;C:\Users\Sohan.Dey\.m2\repository\commons-codec\commons-codec\1.11\commons-codec-1.11.jar;C:\Users\Sohan.Dey\.m2\repository\commons-io\commons-io\2.6\commons-io-2.6.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\zxing\core\3.3.3\core-3.3.3.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\zxing\javase\2.0\javase-2.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\hamcrest\hamcrest-all\1.3\hamcrest-all-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\velocity\velocity\1.7\velocity-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\commons-lang\commons-lang\2.4\commons-lang-2.4.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\html2pdf\2.0.0\html2pdf-2.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\forms\7.1.0\forms-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\kernel\7.1.0\kernel-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\io\7.1.0\io-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\layout\7.1.0\layout-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\itextpdf\5.5.13\itextpdf-5.5.13.jar;C:\Users\Sohan.Dey\.m2\repository\javax\mail\javax.mail-api\1.6.2\javax.mail-api-1.6.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\authentication\authentication-demo-service\1.2.0.1-SNAPSHOT\authentication-demo-service-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.0.2.RELEASE\spring-boot-starter-web-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-json\2.0.2.RELEASE\spring-boot-starter-json-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.5\jackson-datatype-jdk8-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.5\jackson-module-parameter-names-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\2.0.2.RELEASE\spring-boot-starter-tomcat-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\8.5.31\tomcat-embed-el-8.5.31.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\8.5.31\tomcat-embed-websocket-8.5.31.jar;C:\Users\Sohan.Dey\.m2\repository\org\hibernate\validator\hibernate-validator\6.0.9.Final\hibernate-validator-6.0.9.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-web\5.0.6.RELEASE\spring-web-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-webmvc\5.0.6.RELEASE\spring-webmvc-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-expression\5.0.6.RELEASE\spring-expression-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-test\2.0.2.RELEASE\spring-boot-starter-test-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-test\2.0.2.RELEASE\spring-boot-test-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-test-autoconfigure\2.0.2.RELEASE\spring-boot-test-autoconfigure-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\assertj\assertj-core\3.9.1\assertj-core-3.9.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\skyscreamer\jsonassert\1.5.0\jsonassert-1.5.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-core\5.0.6.RELEASE\spring-core-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-jcl\5.0.6.RELEASE\spring-jcl-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-test\5.0.6.RELEASE\spring-test-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\xmlunit\xmlunit-core\2.5.1\xmlunit-core-2.5.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-swagger-ui\2.9.2\springfox-swagger-ui-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-spring-web\2.9.2\springfox-spring-web-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-swagger2\2.9.2\springfox-swagger2-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-spi\2.9.2\springfox-spi-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-core\2.9.2\springfox-core-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-schema\2.9.2\springfox-schema-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-swagger-common\2.9.2\springfox-swagger-common-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\plugin\spring-plugin-core\1.2.0.RELEASE\spring-plugin-core-1.2.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\plugin\spring-plugin-metadata\1.2.0.RELEASE\spring-plugin-metadata-1.2.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\mapstruct\mapstruct\1.2.0.Final\mapstruct-1.2.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\javax\ws\rs\javax.ws.rs-api\2.0\javax.ws.rs-api-2.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\authentication\authentication-core\1.2.0.1-SNAPSHOT\authentication-core-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-cache\2.0.2.RELEASE\spring-boot-starter-cache-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-context-support\5.0.6.RELEASE\spring-context-support-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\machinezoo\sourceafis\sourceafis\3.4.0\sourceafis-3.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\net\sf\trove4j\trove4j\3.0.3\trove4j-3.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\com\machinezoo\noexception\noexception\1.3.2\noexception-1.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\mhshams\jnbis\2.0.1\jnbis-2.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\sanselan\sanselan\0.97-incubator\sanselan-0.97-incubator.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\idrepository\id-repository-core\1.2.0\id-repository-core-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-biosdk-provider\1.2.0\kernel-biosdk-provider-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-biometrics-api\1.2.0\kernel-biometrics-api-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-demographics-api\1.2.0\kernel-demographics-api-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-webflux\2.0.2.RELEASE\spring-boot-starter-webflux-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-reactor-netty\2.0.2.RELEASE\spring-boot-starter-reactor-netty-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\projectreactor\ipc\reactor-netty\0.7.7.RELEASE\reactor-netty-0.7.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-handler-proxy\4.1.24.Final\netty-handler-proxy-4.1.24.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-codec-socks\4.1.24.Final\netty-codec-socks-4.1.24.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-transport-native-epoll\4.1.24.Final\netty-transport-native-epoll-4.1.24.Final-linux-x86_64.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-transport-native-unix-common\4.1.24.Final\netty-transport-native-unix-common-4.1.24.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-webflux\5.0.6.RELEASE\spring-webflux-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\projectreactor\reactor-core\3.1.7.RELEASE\reactor-core-3.1.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\synchronoss\cloud\nio-multipart-parser\1.1.0\nio-multipart-parser-1.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\synchronoss\cloud\nio-stream-storage\1.1.3\nio-stream-storage-1.1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\springdoc\springdoc-openapi-ui\1.5.10\springdoc-openapi-ui-1.5.10.jar;C:\Users\Sohan.Dey\.m2\repository\org\springdoc\springdoc-openapi-webmvc-core\1.5.10\springdoc-openapi-webmvc-core-1.5.10.jar;C:\Users\Sohan.Dey\.m2\repository\org\springdoc\springdoc-openapi-common\1.5.10\springdoc-openapi-common-1.5.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-models\2.1.10\swagger-models-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-annotations\2.1.10\swagger-annotations-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-integration\2.1.10\swagger-integration-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-core\2.1.10\swagger-core-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\jakarta\xml\bind\jakarta.xml.bind-api\2.3.2\jakarta.xml.bind-api-2.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\jakarta\activation\jakarta.activation-api\1.2.1\jakarta.activation-api-1.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-yaml\2.12.1\jackson-dataformat-yaml-2.12.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\github\classgraph\classgraph\4.8.69\classgraph-4.8.69.jar;C:\Users\Sohan.Dey\.m2\repository\org\webjars\swagger-ui\3.51.1\swagger-ui-3.51.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\webjars\webjars-locator-core\0.45\webjars-locator-core-0.45.jar;C:\Users\Sohan.Dey\.m2\repository\commons-fileupload\commons-fileupload\1.4\commons-fileupload-1.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\mockito\mockito-core\2.23.4\mockito-core-2.23.4.jar;C:\Users\Sohan.Dey\.m2\repository\net\bytebuddy\byte-buddy-agent\1.9.3\byte-buddy-agent-1.9.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\objenesis\objenesis\2.6\objenesis-2.6.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-websubclient-api\1.2.0.1-SNAPSHOT\kernel-websubclient-api-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-aspects\5.0.6.RELEASE\spring-aspects-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\aspectj\aspectjweaver\1.8.13\aspectjweaver-1.8.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\owasp\encoder\encoder\1.2.3\encoder-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\tensorflow\tensorflow\1.12.0\tensorflow-1.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\tensorflow\libtensorflow\1.12.0\libtensorflow-1.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\tensorflow\libtensorflow_jni\1.12.0\libtensorflow_jni-1.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-templatemanager-velocity\1.2.0.1-SNAPSHOT\kernel-templatemanager-velocity-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\javax\servlet\javax.servlet-api\4.0.1\javax.servlet-api-4.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-starter-config\2.0.0.RELEASE\spring-cloud-starter-config-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-starter\2.0.0.RELEASE\spring-cloud-starter-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-context\2.0.0.RELEASE\spring-cloud-context-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-crypto\5.0.6.RELEASE\spring-security-crypto-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-commons\2.0.0.RELEASE\spring-cloud-commons-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-rsa\1.0.5.RELEASE\spring-security-rsa-1.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-config-client\2.0.0.RELEASE\spring-cloud-config-client-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\jai-imageio\jai-imageio-jpeg2000\1.3.0\jai-imageio-jpeg2000-1.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\jai-imageio\jai-imageio-core\1.3.0\jai-imageio-core-1.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-keymanager-service\1.2.0.1-SNAPSHOT\kernel-keymanager-service-1.2.0.1-SNAPSHOT-lib.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-test\5.0.5.RELEASE\spring-security-test-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-core\5.0.5.RELEASE\spring-security-core-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-pdfgenerator-itext\1.2.0.1-SNAPSHOT\kernel-pdfgenerator-itext-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\barcodes\7.1.0\barcodes-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\font-asian\7.1.0\font-asian-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\hyph\7.1.0\hyph-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\pdfa\7.1.0\pdfa-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\sign\7.1.0\sign-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\tool\xmlworker\5.5.13\xmlworker-5.5.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\bouncycastle\bcpkix-jdk15on\1.66\bcpkix-jdk15on-1.66.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-data-jpa\2.0.2.RELEASE\spring-boot-starter-data-jpa-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\2.0.2.RELEASE\spring-boot-starter-jdbc-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\zaxxer\HikariCP\2.7.9\HikariCP-2.7.9.jar;C:\Users\Sohan.Dey\.m2\repository\com\h2database\h2\1.4.197\h2-1.4.197.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\microsoft\TSS.Java\0.3.0\TSS.Java-0.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\net\java\dev\jna\jna\4.4.0\jna-4.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\cache2k\cache2k-api\2.4.1.Final\cache2k-api-2.4.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\cache2k\cache2k-core\2.4.1.Final\cache2k-core-2.4.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\nimbusds\nimbus-jose-jwt\9.14\nimbus-jose-jwt-9.14.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-core\1.2.0.1-SNAPSHOT\kernel-core-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter\2.0.2.RELEASE\spring-boot-starter-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot\2.0.2.RELEASE\spring-boot-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.0.2.RELEASE\spring-boot-autoconfigure-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.0.2.RELEASE\spring-boot-starter-logging-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.10.0\log4j-to-slf4j-2.10.0.jar;C:\Users\Sohan.Dey\.m2\repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\data\spring-data-jpa\2.0.7.RELEASE\spring-data-jpa-2.0.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\data\spring-data-commons\2.0.7.RELEASE\spring-data-commons-2.0.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-orm\5.0.6.RELEASE\spring-orm-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-jdbc\5.0.6.RELEASE\spring-jdbc-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-context\5.0.6.RELEASE\spring-context-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-aop\5.0.6.RELEASE\spring-aop-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-tx\5.0.6.RELEASE\spring-tx-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-beans\5.0.6.RELEASE\spring-beans-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\aspectj\aspectjrt\1.8.12\aspectjrt-1.8.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-security\2.0.2.RELEASE\spring-boot-starter-security-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-config\5.0.5.RELEASE\spring-security-config-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-web\5.0.5.RELEASE\spring-security-web-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\javax\transaction\javax.transaction-api\1.3\javax.transaction-api-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-math3\3.6.1\commons-math3-3.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\bouncycastle\bcprov-jdk15on\1.66\bcprov-jdk15on-1.66.jar;C:\Users\Sohan.Dey\.m2\repository\javax\interceptor\javax.interceptor-api\1.2\javax.interceptor-api-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\code\findbugs\annotations\3.0.1\annotations-3.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\net\jcip\jcip-annotations\1.0\jcip-annotations-1.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\swagger-models\1.5.21\swagger-models-1.5.21.jar;C:\Users\Sohan.Dey\.m2\repository\com\auth0\java-jwt\3.8.1\java-jwt-3.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\micrometer\micrometer-core\1.4.2\micrometer-core-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\hdrhistogram\HdrHistogram\2.1.12\HdrHistogram-2.1.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\latencyutils\LatencyUtils\2.0.3\LatencyUtils-2.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\micrometer\micrometer-registry-prometheus\1.4.2\micrometer-registry-prometheus-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\prometheus\simpleclient_common\0.8.1\simpleclient_common-0.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\prometheus\simpleclient\0.8.1\simpleclient-0.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\jul-to-slf4j\1.7.25\jul-to-slf4j-1.7.25.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\jcl-over-slf4j\1.7.25\jcl-over-slf4j-1.7.25.jar;C:\Users\Sohan.Dey\.m2\repository\javax\activation\activation\1.1\activation-1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-starter-sleuth\2.0.4.RELEASE\spring-cloud-starter-sleuth-2.0.4.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-aop\2.0.9.RELEASE\spring-boot-starter-aop-2.0.9.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-sleuth-core\2.0.4.RELEASE\spring-cloud-sleuth-core-2.0.4.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave\5.6.1\brave-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\zipkin2\zipkin\2.12.0\zipkin-2.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\reporter2\zipkin-reporter\2.7.14\zipkin-reporter-2.7.14.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-context-log4j2\5.6.1\brave-context-log4j2-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-spring-web\5.6.1\brave-instrumentation-spring-web-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-http\5.6.1\brave-instrumentation-http-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-spring-rabbit\5.6.1\brave-instrumentation-spring-rabbit-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-kafka-clients\5.6.1\brave-instrumentation-kafka-clients-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-httpclient\5.6.1\brave-instrumentation-httpclient-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-httpasyncclient\5.6.1\brave-instrumentation-httpasyncclient-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-spring-webmvc\5.6.1\brave-instrumentation-spring-webmvc-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-servlet\5.6.1\brave-instrumentation-servlet-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-actuator\2.0.2.RELEASE\spring-boot-starter-actuator-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-actuator-autoconfigure\2.0.2.RELEASE\spring-boot-actuator-autoconfigure-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-actuator\2.0.2.RELEASE\spring-boot-actuator-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\8.5.55\tomcat-embed-core-8.5.55.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\tomcat-annotations-api\8.5.55\tomcat-annotations-api-8.5.55.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\retry\spring-retry\1.2.1.RELEASE\spring-retry-1.2.1.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\module\jackson-module-afterburner\2.12.0\jackson-module-afterburner-2.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-registration-packet-manager\1.1.5.3\kernel-registration-packet-manager-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-keygenerator-bouncycastle\1.1.5.3\kernel-keygenerator-bouncycastle-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-cbeffutil-api\1.1.5.3\kernel-cbeffutil-api-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-logger-logback\1.1.5.3\kernel-logger-logback-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\net\logstash\logback\logstash-logback-encoder\6.4\logstash-logback-encoder-6.4.jar;C:\Users\Sohan.Dey\.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\ch\qos\logback\logback-access\1.2.3\logback-access-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-crypto-jce\1.1.5.3\kernel-crypto-jce-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\bitbucket\b_c\jose4j\0.6.5\jose4j-0.6.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\wink\wink-json4j-provider\1.1.2-incubating\wink-json4j-provider-1.1.2-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\wink\wink-common\1.1.2-incubating\wink-common-1.1.2-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\xml\bind\jaxb-impl\2.2.1.1\jaxb-impl-2.2.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\geronimo\specs\geronimo-annotation_1.1_spec\1.0\geronimo-annotation_1.1_spec-1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\wink\wink-json4j\1.1.2-incubating\wink-json4j-1.1.2-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\javax\ws\rs\jsr311-api\1.1.1\jsr311-api-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\checkerframework\checker-qual\2.9.0\checker-qual-2.9.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\activemq\activemq-broker\5.15.9\activemq-broker-5.15.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\activemq\activemq-client\5.15.9\activemq-client-5.15.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\geronimo\specs\geronimo-jms_1.1_spec\1.1.1\geronimo-jms_1.1_spec-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\fusesource\hawtbuf\hawtbuf\1.11\hawtbuf-1.11.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\geronimo\specs\geronimo-j2ee-management_1.1_spec\1.0.1\geronimo-j2ee-management_1.1_spec-1.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\activemq\activemq-openwire-legacy\5.15.9\activemq-openwire-legacy-5.15.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\projectlombok\lombok\1.18.8\lombok-1.18.8.jar \ No newline at end of file diff --git a/apitest/Dockerfile b/apitest/Dockerfile new file mode 100644 index 000000000..bc00e7589 --- /dev/null +++ b/apitest/Dockerfile @@ -0,0 +1,63 @@ +FROM openjdk:11 + +ARG SOURCE +ARG COMMIT_HASH +ARG COMMIT_ID +ARG BUILD_TIME +LABEL source=${SOURCE} +LABEL commit_hash=${COMMIT_HASH} +LABEL commit_id=${COMMIT_ID} +LABEL build_time=${BUILD_TIME} + +# can be passed during Docker build as build time environment for github branch to pickup configuration from. +ARG container_user=mosip + +# can be passed during Docker build as build time environment for github branch to pickup configuration from. +ARG container_user_group=mosip + +# can be passed during Docker build as build time environment for github branch to pickup configuration from. +ARG container_user_uid=1001 + +# can be passed during Docker build as build time environment for github branch to pickup configuration from. +ARG container_user_gid=1001 + +ARG KUBECTL_VERSION=1.22.9 + +# install packages and create user +RUN apt-get -y update \ +&& apt-get install -y unzip jq \ +&& groupadd -g ${container_user_gid} ${container_user_group} \ +&& useradd -u ${container_user_uid} -g ${container_user_group} -s /bin/sh -m ${container_user} \ +&& curl -LO "https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VERSION}/bin/linux/amd64/kubectl" \ +&& chmod +x kubectl \ +&& mv kubectl /usr/local/bin/ + +# set working directory for the user +WORKDIR /home/${container_user} + +ENV work_dir=/home/${container_user} + +ADD ./target/ $work_dir + +ADD entrypoint.sh $work_dir/entrypoint.sh + +RUN chmod +x $work_dir/entrypoint.sh + +#ADD ./testNgXmlFiles/ $work_dir/testNgXmlFiles/ + +# change permissions of file inside working dir +RUN chown -R ${container_user}:${container_user} /home/${container_user} /usr/local/openjdk-11/lib/security/cacerts + +RUN chmod 644 /usr/local/openjdk-11/lib/security/cacerts + +# select container user for all tasks +USER ${container_user_uid}:${container_user_gid} + +EXPOSE 8083 + +ENV MODULES= +ENV ENV_USER= +ENV ENV_ENDPOINT= +ENV ENV_TESTLEVEL=smokeAndRegression + +ENTRYPOINT ["./entrypoint.sh"] diff --git a/apitest/README.md b/apitest/README.md new file mode 100644 index 000000000..51b622679 --- /dev/null +++ b/apitest/README.md @@ -0,0 +1,3 @@ +# Automation test + +All automation test code. diff --git a/apitest/entrypoint.sh b/apitest/entrypoint.sh new file mode 100644 index 000000000..b56500353 --- /dev/null +++ b/apitest/entrypoint.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +## Run automationtests +java -jar -Dmodules="$MODULES" -Denv.user="$ENV_USER" -Denv.endpoint="$ENV_ENDPOINT" -Denv.testLevel="$ENV_TESTLEVEL" automationtests.jar; diff --git a/apitest/metadata.xml b/apitest/metadata.xml new file mode 100644 index 000000000..ea66c92e6 --- /dev/null +++ b/apitest/metadata.xml @@ -0,0 +1,16 @@ + + 4.0.0 + io.mosip.testrig.apirig.automationtests + automationtests + jar + io.mosip.testrig.apirig.automationtests + http://maven.apache.org + + + io.mosip + mosip-parent + 1.0.10 + + + diff --git a/apitest/pom.xml b/apitest/pom.xml new file mode 100644 index 000000000..d67e643c6 --- /dev/null +++ b/apitest/pom.xml @@ -0,0 +1,185 @@ + + 4.0.0 + io.mosip.mimoto + apitest-mimoto + jar + automationtests-mimoto + Parent project of MOSIP functional tests + https://github.com/mosip/mosip-functional-tests + 1.2.0.1-SNAPSHOT + + + + MPL 2.0 + https://www.mozilla.org/en-US/MPL/2.0/ + + + + + scm:git:git://github.com/mosip/mosip-functional-tests.git + scm:git:ssh://github.com:mosip/mosip-functional-tests.git + https://github.com/mosip/mosip-functional-tests + HEAD + + + + + + + + UTF-8 + + + 11 + 11 + 3.7.0 + 3.0.2 + 3.1.0 + 2.9 + 0.8.1 + 3.2 + 3.0.1 + 2.3 + false + 3.7.0.1746 + + 2.0.2.RELEASE + 2.0.7.RELEASE + 5.0.5.RELEASE + 2.0.0.RELEASE + + 2.0.7 + 1.5.20 + 2.9.2 + + 3.6.2 + 3.7.0 + + + + 1.2 + 3.0.0 + 1.3 + 2.2 + 2.0.1.Final + 2.2.6 + + + 1.4.197 + 5.1.46 + 42.2.2 + 2.5.0 + 6.0.12.Final + + + 1.10.19 + 1.7.4 + 2.0.0-beta.5 + + + 3.6.1 + 3.7 + 2.6 + 1.11 + 4.3 + 1.9.2 + 2.2 + 4.5.6 + 19.0 + 1.18.8 + 0.1.54 + 1.4.0 + 7.1.0 + 2.0.0 + 5.5.13 + 2.3.23 + 1.7 + 2.0 + 1.5.2 + 2.1.1 + 1.60 + 63.1 + 1.0.0 + 3.3.3 + 2.8.1 + 4.1.0-incubating + 1.11.368 + 0.2.4 + 2.3.0 + 3.0.1 + 1.9.12 + 0.6.0 + 2.0.0.AM2 + + + + + + + + 0.8.2 + 2.2 + 3.2 + UTF-8 + 3.7.0 + 3.0.1 + + + 1.1.6 + 1.7.19 + 1.10.19 + + + 1.4.6 + + + 5.0.6.RELEASE + + + 5.4.2.Final + + + 2.1.1 + + + 10.13.1.1 + + + 3.4.0 + + + 1.3.5 + + + 0.3.12 + + + 0.3.0 + + + 1.1.2-incubating + 1.2.0.1-B1 + 0.4.7 + 3.0.0 + 2.41.2 + 2.4.0 + 3.3.9 + 3.0.7 + 6.11 + 1.13 + automationtests-commons-1.2.0.1-SNAPSHOT-jar-with-dependencies + + + + + + io.mosip.testrig.apirig.automationtests.commons + automationtests-commons + 1.2.0.1-SNAPSHOT + + + + + diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java b/apitest/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java new file mode 100644 index 000000000..de2bc8779 --- /dev/null +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java @@ -0,0 +1,350 @@ +package io.mosip.testrig.apirig.testrunner; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.StringWriter; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.NoSuchAlgorithmException; +import java.security.PublicKey; +import java.security.interfaces.RSAPublicKey; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Properties; + +import org.apache.log4j.Logger; +import org.bouncycastle.openssl.jcajce.JcaPEMWriter; +import org.testng.TestNG; + +import com.nimbusds.jose.jwk.KeyUse; +import com.nimbusds.jose.jwk.RSAKey; + +import io.mosip.testrig.apirig.dbaccess.DBManager; +import io.mosip.testrig.apirig.utils.AdminTestUtil; +import io.mosip.testrig.apirig.utils.CertificateGenerationUtil; +import io.mosip.testrig.apirig.utils.CertsUtil; +import io.mosip.testrig.apirig.utils.ConfigManager; +import io.mosip.testrig.apirig.utils.EncryptionDecrptionUtil; +import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.JWKKeyUtil; +import io.mosip.testrig.apirig.utils.KeyCloakUserAndAPIKeyGeneration; +import io.mosip.testrig.apirig.utils.KeycloakUserManager; +import io.mosip.testrig.apirig.utils.MispPartnerAndLicenseKeyGeneration; +import io.mosip.testrig.apirig.utils.OutputValidationUtil; +import io.mosip.testrig.apirig.utils.PartnerRegistration; + +/** + * Class to initiate mosip api test execution + * + * @author Vignesh + * + */ +public class MosipTestRunner { + private static final Logger LOGGER = Logger.getLogger(MosipTestRunner.class); + private static String cachedPath = null; + + public static String jarUrl = MosipTestRunner.class.getProtectionDomain().getCodeSource().getLocation().getPath(); + public static List languageList = new ArrayList<>(); + + /** + * C Main method to start mosip test execution + * + * @param arg + */ + public static void main(String[] arg) { + + try { + + Map envMap = System.getenv(); + LOGGER.info("** ------------- Get ALL ENV varibales --------------------------------------------- **"); + for (String envName : envMap.keySet()) { + LOGGER.info(String.format("ENV %s = %s%n", envName, envMap.get(envName))); + } + ExtractResource.removeOldMosipTestTestResource(); + if (checkRunType().equalsIgnoreCase("JAR")) { + ExtractResource.extractCommonResourceFromJar(); + } else { + ExtractResource.copyCommonResources(); + } + ConfigManager.init(); + BaseTestCase.suiteSetup(); + setLogLevels(); + AdminTestUtil.encryptDecryptUtil = new EncryptionDecrptionUtil(); + + // For now we are not doing health check for qa-115. + if (BaseTestCase.isTargetEnvLTS()) { + HealthChecker healthcheck = new HealthChecker(); + healthcheck.setCurrentRunningModule(BaseTestCase.currentModule); + Thread trigger = new Thread(healthcheck); + trigger.start(); + } + KeycloakUserManager.removeUser(); + KeycloakUserManager.createUsers(); + KeycloakUserManager.closeKeycloakInstance(); + + List localLanguageList = new ArrayList<>(BaseTestCase.getLanguageList()); + AdminTestUtil.getLocationData(); + + String partnerKeyURL = ""; + String updatedPartnerKeyURL = ""; + String ekycPartnerKeyURL = ""; + + if (BaseTestCase.listOfModules.contains("auth") + || BaseTestCase.listOfModules.contains(GlobalConstants.ESIGNET)) { + PartnerRegistration.deleteCertificates(); + CertificateGenerationUtil.getThumbprints(); + AdminTestUtil.createAndPublishPolicy(); + AdminTestUtil.createEditAndPublishPolicy(); + partnerKeyURL = PartnerRegistration.generateAndGetPartnerKeyUrl(); + updatedPartnerKeyURL = PartnerRegistration.generateAndGetUpdatedPartnerKeyUrl(); + + AdminTestUtil.createAndPublishPolicyForKyc(); + ekycPartnerKeyURL = PartnerRegistration.generateAndGetEkycPartnerKeyUrl(); + + } + + if (BaseTestCase.listOfModules.contains(GlobalConstants.MASTERDATA)) { + AdminTestUtil.getHierarchyZoneCode(); + BaseTestCase.mapUserToZone(); + BaseTestCase.mapZone(); + AdminTestUtil.getLocationLevelData(); + AdminTestUtil.getLocationData(); + AdminTestUtil.getZoneName(); + + + + for (int i = 0; i < localLanguageList.size(); i++) { + BaseTestCase.languageList.clear(); + BaseTestCase.languageList.add(localLanguageList.get(i)); + + DBManager.clearMasterDbData(); + BaseTestCase.currentModule = GlobalConstants.MASTERDATA; + BaseTestCase.setReportName("masterdata-" + localLanguageList.get(i)); + startTestRunner(); + + } + + } else if (BaseTestCase.listOfModules.contains("auth") + || BaseTestCase.listOfModules.contains(GlobalConstants.ESIGNET)) { + if (partnerKeyURL.isEmpty()) + // if (partnerKeyURL.isEmpty() || ekycPartnerKeyURL.isEmpty()) + LOGGER.error("partnerKeyURL is null"); + else + startTestRunner(); + } else { + startTestRunner(); + } + } catch (Exception e) { + LOGGER.error("Exception " + e.getMessage()); + } + + MockSMTPListener.bTerminate = true; + + if (BaseTestCase.isTargetEnvLTS()) + HealthChecker.bTerminate = true; + + System.exit(0); + + } + + private static void setLogLevels() { + AdminTestUtil.setLogLevel(); + OutputValidationUtil.setLogLevel(); + PartnerRegistration.setLogLevel(); + KeyCloakUserAndAPIKeyGeneration.setLogLevel(); + MispPartnerAndLicenseKeyGeneration.setLogLevel(); + JWKKeyUtil.setLogLevel(); + CertsUtil.setLogLevel(); + } + + /** + * The method to start mosip testng execution + * + * @throws IOException + */ + public static void startTestRunner() { + File homeDir = null; + TestNG runner = new TestNG(); + List suitefiles = new ArrayList<>(); + List modulesToRun = BaseTestCase.listOfModules; + String os = System.getProperty("os.name"); + LOGGER.info(os); + if (checkRunType().contains("IDE") || os.toLowerCase().contains("windows")) { + homeDir = new File(System.getProperty("user.dir") + "/testNgXmlFiles"); + LOGGER.info("IDE :" + homeDir); + } else { + File dir = new File(System.getProperty("user.dir")); + homeDir = new File(dir.getParent() + "/mosip/testNgXmlFiles"); + LOGGER.info("ELSE :" + homeDir); + } + for (File file : homeDir.listFiles()) { + for (String fileName : modulesToRun) { + if (file.getName().toLowerCase().contains(fileName)) { + suitefiles.add(file.getAbsolutePath()); + } else if (fileName.equals("all") && file.getName().toLowerCase().contains("testng")) { + suitefiles.add(file.getAbsolutePath()); + } + } + } + runner.setTestSuites(suitefiles); + System.getProperties().setProperty("testng.outpur.dir", "testng-report"); + runner.setOutputDirectory("testng-report"); + runner.run(); + } + + /** + * The method to return class loader resource path + * + * @return String + * @throws IOException + */ + /* + * public static String getGlobalResourcePath() { if + * (checkRunType().equalsIgnoreCase("JAR")) { return new + * File(jarUrl).getParentFile().getAbsolutePath() + + * "/MosipTestResource/MosipTemporaryTestResource"; } else if + * (checkRunType().equalsIgnoreCase("IDE")) { String path = new + * File(MosipTestRunner.class.getClassLoader().getResource("").getPath()). + * getAbsolutePath() + "/MosipTestResource/MosipTemporaryTestResource"; if + * (path.contains(GlobalConstants.TESTCLASSES)) path = + * path.replace(GlobalConstants.TESTCLASSES, "classes"); return path; } return + * "Global Resource File Path Not Found"; } + */ + + public static String getGlobalResourcePath() { + if (cachedPath != null) { + return cachedPath; + } + + String path = null; + if (checkRunType().equalsIgnoreCase("JAR")) { + path = new File(jarUrl).getParentFile().getAbsolutePath() + "/MosipTestResource/MosipTemporaryTestResource"; + } else if (checkRunType().equalsIgnoreCase("IDE")) { + path = new File(MosipTestRunner.class.getClassLoader().getResource("").getPath()).getAbsolutePath() + + "/MosipTestResource/MosipTemporaryTestResource"; + if (path.contains(GlobalConstants.TESTCLASSES)) + path = path.replace(GlobalConstants.TESTCLASSES, "classes"); + } + + if (path != null) { + cachedPath = path; + return path; + } else { + return "Global Resource File Path Not Found"; + } + } + + public static String getResourcePath() { + return getGlobalResourcePath(); +// if (checkRunType().equalsIgnoreCase("JAR")) { +// return new File(jarUrl).getParentFile().getAbsolutePath(); +// } else if (checkRunType().equalsIgnoreCase("IDE")) { +// String path = new File(MosipTestRunner.class.getClassLoader().getResource("").getPath()).getAbsolutePath(); +// if (path.contains(GlobalConstants.TESTCLASSES)) +// path = path.replace(GlobalConstants.TESTCLASSES, "classes"); +// return path; +// } +// return "Global Resource File Path Not Found"; + } + + public static String generatePulicKey() { + String publicKey = null; + try { + KeyPairGenerator keyGenerator = KeyPairGenerator.getInstance("RSA"); + keyGenerator.initialize(2048, BaseTestCase.secureRandom); + final KeyPair keypair = keyGenerator.generateKeyPair(); + publicKey = java.util.Base64.getEncoder().encodeToString(keypair.getPublic().getEncoded()); + } catch (NoSuchAlgorithmException e) { + LOGGER.error(e.getMessage()); + } + return publicKey; + } + + public static KeyPairGenerator keyPairGen = null; + + public static KeyPairGenerator getKeyPairGeneratorInstance() { + if (keyPairGen != null) + return keyPairGen; + try { + keyPairGen = KeyPairGenerator.getInstance("RSA"); + keyPairGen.initialize(2048); + + } catch (NoSuchAlgorithmException e) { + LOGGER.error(e.getMessage()); + } + + return keyPairGen; + } + + public static String generatePublicKeyForMimoto() { + + String vcString = ""; + try { + KeyPairGenerator keyPairGenerator = getKeyPairGeneratorInstance(); + KeyPair keyPair = keyPairGenerator.generateKeyPair(); + PublicKey publicKey = keyPair.getPublic(); + StringWriter stringWriter = new StringWriter(); + try (JcaPEMWriter pemWriter = new JcaPEMWriter(stringWriter)) { + pemWriter.writeObject(publicKey); + pemWriter.flush(); + vcString = stringWriter.toString(); + if (System.getProperty("os.name").toLowerCase().contains("windows")) { + vcString = vcString.replaceAll("\r\n", "\\\\n"); + } else { + vcString = vcString.replaceAll("\n", "\\\\n"); + } + } catch (Exception e) { + throw e; + } + } catch (Exception e) { + LOGGER.error(e.getMessage()); + } + return vcString; + } + + public static String generateJWKPublicKey() { + try { + KeyPairGenerator keyGenerator = KeyPairGenerator.getInstance("RSA"); + keyGenerator.initialize(2048, BaseTestCase.secureRandom); + final KeyPair keypair = keyGenerator.generateKeyPair(); + RSAKey jwk = new RSAKey.Builder((RSAPublicKey) keypair.getPublic()).keyID("RSAKeyID") + .keyUse(KeyUse.SIGNATURE).privateKey(keypair.getPrivate()).build(); + + return jwk.toJSONString(); + } catch (NoSuchAlgorithmException e) { + LOGGER.error(e.getMessage()); + return null; + } + } + + public static Properties getproperty(String path) { + Properties prop = new Properties(); + FileInputStream inputStream = null; + try { + File file = new File(path); + inputStream = new FileInputStream(file); + prop.load(inputStream); + } catch (Exception e) { + LOGGER.error(GlobalConstants.EXCEPTION_STRING_2 + e.getMessage()); + } finally { + AdminTestUtil.closeInputStream(inputStream); + } + return prop; + } + + /** + * The method will return mode of application started either from jar or eclipse + * ide + * + * @return + */ + public static String checkRunType() { + if (MosipTestRunner.class.getResource("MosipTestRunner.class").getPath().contains(".jar")) + return "JAR"; + else + return "IDE"; + } + +} diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java new file mode 100644 index 000000000..97c2a6dda --- /dev/null +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java @@ -0,0 +1,178 @@ +package io.mosip.testrig.apirig.testscripts; + +import java.lang.reflect.Field; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.List; +import java.util.Map; + +import javax.ws.rs.core.MediaType; + +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.testng.ITest; +import org.testng.ITestContext; +import org.testng.ITestResult; +import org.testng.Reporter; +import org.testng.SkipException; +import org.testng.annotations.AfterClass; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; +import org.testng.internal.BaseTestMethod; +import org.testng.internal.TestResult; + +import io.mosip.testrig.apirig.dto.OutputValidationDto; +import io.mosip.testrig.apirig.dto.TestCaseDTO; +import io.mosip.testrig.apirig.testrunner.HealthChecker; +import io.mosip.testrig.apirig.testrunner.JsonPrecondtion; +import io.mosip.testrig.apirig.utils.AdminTestException; +import io.mosip.testrig.apirig.utils.AdminTestUtil; +import io.mosip.testrig.apirig.utils.AuthenticationTestException; +import io.mosip.testrig.apirig.utils.ConfigManager; +import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.KernelAuthentication; +import io.mosip.testrig.apirig.utils.OutputValidationUtil; +import io.mosip.testrig.apirig.utils.ReportUtil; +import io.mosip.testrig.apirig.utils.RestClient; +import io.restassured.response.Response; + +public class AddIdentity extends AdminTestUtil implements ITest { + private static final Logger logger = Logger.getLogger(AddIdentity.class); + protected String testCaseName = ""; + public Response response = null; + + /** + * get current testcaseName + */ + @Override + public String getTestName() { + return testCaseName; + + } + + @BeforeClass + public static void setLogLevel() { + if (ConfigManager.IsDebugEnabled()) + logger.setLevel(Level.ALL); + else + logger.setLevel(Level.ERROR); + } + + /** + * Data provider class provides test case list + * + * @return object of data provider + */ + @DataProvider(name = "testcaselist") + public Object[] getTestCaseList(ITestContext context) { + String ymlFile = context.getCurrentXmlTest().getLocalParameters().get("ymlFile"); + logger.info("Started executing yml: " + ymlFile); + return getYmlTestData(ymlFile); + } + + /** + * Test method for OTP Generation execution + * + * @param objTestParameters + * @param testScenario + * @param testcaseName + * @throws AuthenticationTestException + * @throws AdminTestException + */ + @Test(dataProvider = "testcaselist") + public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException { + testCaseName = testCaseDTO.getTestCaseName(); + if (HealthChecker.signalTerminateExecution) { + throw new SkipException( + GlobalConstants.TARGET_ENV_HEALTH_CHECK_FAILED + HealthChecker.healthCheckFailureMapS); + } + testCaseDTO.setInputTemplate(AdminTestUtil.modifySchemaGenerateHbs(testCaseDTO.isRegenerateHbs())); + String uin = JsonPrecondtion + .getValueFromJson( + RestClient.getRequestWithCookie(ApplnURI + "/v1/idgenerator/uin", MediaType.APPLICATION_JSON, + MediaType.APPLICATION_JSON, COOKIENAME, + new KernelAuthentication().getTokenByRole(testCaseDTO.getRole())).asString(), + "response.uin"); + + testCaseName = isTestCaseValidForExecution(testCaseDTO); + + DateFormat dateFormatter = new SimpleDateFormat("yyyyMMddHHmmss"); + Calendar cal = Calendar.getInstance(); + String timestampValue = dateFormatter.format(cal.getTime()); + String genRid = "27847" + generateRandomNumberString(10) + timestampValue; + + String jsonInput = testCaseDTO.getInput(); + + String inputJson = getJsonFromTemplate(jsonInput, testCaseDTO.getInputTemplate(), false); + + inputJson = inputJson.replace("$UIN$", uin); + inputJson = inputJson.replace("$RID$", genRid); + String phoneNumber = ""; + if (inputJson.contains("$PHONENUMBERFORIDENTITY$")) { + if (!phoneSchemaRegex.isEmpty()) + try { + phoneNumber = genStringAsperRegex(phoneSchemaRegex); + } catch (Exception e) { + logger.error(e.getMessage()); + } + inputJson = replaceKeywordWithValue(inputJson, "$PHONENUMBERFORIDENTITY$", phoneNumber); + } + + response = postWithBodyAndCookie(ApplnURI + testCaseDTO.getEndPoint(), inputJson, COOKIENAME, + testCaseDTO.getRole(), testCaseDTO.getTestCaseName()); + + Map> ouputValid = OutputValidationUtil.doJsonOutputValidation( + response.asString(), getJsonFromTemplate(testCaseDTO.getOutput(), testCaseDTO.getOutputTemplate()), + testCaseDTO, response.getStatusCode()); + Reporter.log(ReportUtil.getOutputValidationReport(ouputValid)); + + if (!OutputValidationUtil.publishOutputResult(ouputValid)) + throw new AdminTestException("Failed at output validation"); + if (testCaseDTO.getTestCaseName().contains("_Pos")) { + writeAutoGeneratedId(testCaseDTO.getTestCaseName(), "UIN", uin); + writeAutoGeneratedId(testCaseDTO.getTestCaseName(), "RID", genRid); + writeAutoGeneratedId(testCaseDTO.getTestCaseName(), "EMAIL", testCaseDTO.getTestCaseName() + "@mosip.net"); + writeAutoGeneratedId(testCaseDTO.getTestCaseName(), "PHONE", phoneNumber); + } + if (!phoneNumber.isEmpty()) + writeAutoGeneratedId(testCaseDTO.getTestCaseName(), "PHONE", phoneNumber); + } + + /** + * The method ser current test name to result + * + * @param result + */ + @AfterMethod(alwaysRun = true) + public void setResultTestName(ITestResult result) { + try { + Field method = TestResult.class.getDeclaredField("m_method"); + method.setAccessible(true); + method.set(result, result.getMethod().clone()); + BaseTestMethod baseTestMethod = (BaseTestMethod) result.getMethod(); + Field f = baseTestMethod.getClass().getSuperclass().getDeclaredField("m_methodName"); + f.setAccessible(true); + f.set(baseTestMethod, testCaseName); + } catch (Exception e) { + Reporter.log("Exception : " + e.getMessage()); + } + } + + @AfterClass(alwaysRun = true) + public void waittime() { + + try { + logger.info( + "waiting for " + properties.getProperty("Delaytime") + " mili secs after UIN Generation In IDREPO"); + Thread.sleep(Long.parseLong(properties.getProperty("Delaytime"))); + + } catch (Exception e) { + logger.error("Exception : " + e.getMessage()); + Thread.currentThread().interrupt(); + } + + } +} diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java new file mode 100644 index 000000000..e450cf8ba --- /dev/null +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java @@ -0,0 +1,175 @@ +package io.mosip.testrig.apirig.testscripts; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.json.JSONObject; +import org.testng.ITest; +import org.testng.ITestContext; +import org.testng.ITestResult; +import org.testng.Reporter; +import org.testng.SkipException; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; +import org.testng.internal.BaseTestMethod; +import org.testng.internal.TestResult; + +import io.mosip.testrig.apirig.dto.OutputValidationDto; +import io.mosip.testrig.apirig.dto.TestCaseDTO; +import io.mosip.testrig.apirig.testrunner.BaseTestCase; +import io.mosip.testrig.apirig.testrunner.HealthChecker; +import io.mosip.testrig.apirig.utils.AdminTestException; +import io.mosip.testrig.apirig.utils.AdminTestUtil; +import io.mosip.testrig.apirig.utils.AuthenticationTestException; +import io.mosip.testrig.apirig.utils.ConfigManager; +import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.OutputValidationUtil; +import io.mosip.testrig.apirig.utils.ReportUtil; +import io.restassured.response.Response; + +public class GetWithParam extends AdminTestUtil implements ITest { + private static final Logger logger = Logger.getLogger(GetWithParam.class); + protected String testCaseName = ""; + public Response response = null; + public boolean sendEsignetToken = false; + public boolean auditLogCheck = false; + + @BeforeClass + public static void setLogLevel() { + if (ConfigManager.IsDebugEnabled()) + logger.setLevel(Level.ALL); + else + logger.setLevel(Level.ERROR); + } + + /** + * get current testcaseName + */ + @Override + public String getTestName() { + return testCaseName; + } + + /** + * Data provider class provides test case list + * + * @return object of data provider + */ + @DataProvider(name = "testcaselist") + public Object[] getTestCaseList(ITestContext context) { + String ymlFile = context.getCurrentXmlTest().getLocalParameters().get("ymlFile"); + sendEsignetToken = context.getCurrentXmlTest().getLocalParameters().containsKey("sendEsignetToken"); + logger.info("Started executing yml: " + ymlFile); + return getYmlTestData(ymlFile); + } + + /** + * Test method for OTP Generation execution + * + * @param objTestParameters + * @param testScenario + * @param testcaseName + * @throws AuthenticationTestException + * @throws AdminTestException + */ + @Test(dataProvider = "testcaselist") + public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException { + testCaseName = testCaseDTO.getTestCaseName(); + testCaseName = isTestCaseValidForExecution(testCaseDTO); + if (HealthChecker.signalTerminateExecution) { + throw new SkipException( + GlobalConstants.TARGET_ENV_HEALTH_CHECK_FAILED + HealthChecker.healthCheckFailureMapS); + } + + if (testCaseDTO.getTestCaseName().contains("VID") || testCaseDTO.getTestCaseName().contains("Vid")) { + if (!BaseTestCase.getSupportedIdTypesValueFromActuator().contains("VID") + && !BaseTestCase.getSupportedIdTypesValueFromActuator().contains("vid")) { + throw new SkipException(GlobalConstants.VID_FEATURE_NOT_SUPPORTED); + } + } + auditLogCheck = testCaseDTO.isAuditLogCheck(); + String[] templateFields = testCaseDTO.getTemplateFields(); + + if (testCaseDTO.getInputTemplate().contains(GlobalConstants.$PRIMARYLANG$)) + testCaseDTO.setInputTemplate(testCaseDTO.getInputTemplate().replace(GlobalConstants.$PRIMARYLANG$, + BaseTestCase.languageList.get(0))); + if (testCaseDTO.getOutputTemplate().contains(GlobalConstants.$PRIMARYLANG$)) + testCaseDTO.setOutputTemplate(testCaseDTO.getOutputTemplate().replace(GlobalConstants.$PRIMARYLANG$, + BaseTestCase.languageList.get(0))); + if (testCaseDTO.getInput().contains(GlobalConstants.$PRIMARYLANG$)) + testCaseDTO.setInput( + testCaseDTO.getInput().replace(GlobalConstants.$PRIMARYLANG$, BaseTestCase.languageList.get(0))); + if (testCaseDTO.getOutput().contains(GlobalConstants.$PRIMARYLANG$)) + testCaseDTO.setOutput( + testCaseDTO.getOutput().replace(GlobalConstants.$PRIMARYLANG$, BaseTestCase.languageList.get(0))); + + if (testCaseDTO.getTemplateFields() != null && templateFields.length > 0) { + ArrayList inputtestCases = AdminTestUtil.getInputTestCase(testCaseDTO); + ArrayList outputtestcase = AdminTestUtil.getOutputTestCase(testCaseDTO); + for (int i = 0; i < languageList.size(); i++) { + response = getWithPathParamAndCookie(ApplnURI + testCaseDTO.getEndPoint(), + getJsonFromTemplate(inputtestCases.get(i).toString(), testCaseDTO.getInputTemplate()), + COOKIENAME, testCaseDTO.getRole(), testCaseDTO.getTestCaseName()); + + Map> ouputValid = OutputValidationUtil.doJsonOutputValidation( + response.asString(), + getJsonFromTemplate(outputtestcase.get(i).toString(), testCaseDTO.getOutputTemplate()), + testCaseDTO, response.getStatusCode()); + Reporter.log(ReportUtil.getOutputValidationReport(ouputValid)); + + if (!OutputValidationUtil.publishOutputResult(ouputValid)) + throw new AdminTestException("Failed at output validation"); + } + } + + else { + response = getWithPathParamAndCookie(ApplnURI + testCaseDTO.getEndPoint(), + getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()), auditLogCheck, + COOKIENAME, testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), sendEsignetToken); + Map> ouputValid = null; + if (testCaseName.contains("_StatusCode")) { + + OutputValidationDto customResponse = customStatusCodeResponse(String.valueOf(response.getStatusCode()), + testCaseDTO.getOutput()); + + ouputValid = new HashMap<>(); + ouputValid.put(GlobalConstants.EXPECTED_VS_ACTUAL, List.of(customResponse)); + } else { + ouputValid = OutputValidationUtil.doJsonOutputValidation(response.asString(), + getJsonFromTemplate(testCaseDTO.getOutput(), testCaseDTO.getOutputTemplate()), testCaseDTO, + response.getStatusCode()); + } + + Reporter.log(ReportUtil.getOutputValidationReport(ouputValid)); + if (!OutputValidationUtil.publishOutputResult(ouputValid)) + throw new AdminTestException("Failed at output validation"); + } + } + + /** + * The method ser current test name to result + * + * @param result + */ + @AfterMethod(alwaysRun = true) + public void setResultTestName(ITestResult result) { + try { + Field method = TestResult.class.getDeclaredField("m_method"); + method.setAccessible(true); + method.set(result, result.getMethod().clone()); + BaseTestMethod baseTestMethod = (BaseTestMethod) result.getMethod(); + Field f = baseTestMethod.getClass().getSuperclass().getDeclaredField("m_methodName"); + f.setAccessible(true); + f.set(baseTestMethod, testCaseName); + } catch (Exception e) { + Reporter.log("Exception : " + e.getMessage()); + } + } +} diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java new file mode 100644 index 000000000..5e6c9ebe7 --- /dev/null +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java @@ -0,0 +1,233 @@ +package io.mosip.testrig.apirig.testscripts; + +import java.lang.reflect.Field; +import java.util.List; +import java.util.Map; + +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.json.JSONObject; +import org.testng.ITest; +import org.testng.ITestContext; +import org.testng.ITestResult; +import org.testng.Reporter; +import org.testng.SkipException; +import org.testng.annotations.AfterClass; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; +import org.testng.internal.BaseTestMethod; +import org.testng.internal.TestResult; + +import io.mosip.testrig.apirig.dto.OutputValidationDto; +import io.mosip.testrig.apirig.dto.TestCaseDTO; +import io.mosip.testrig.apirig.testrunner.BaseTestCase; +import io.mosip.testrig.apirig.testrunner.HealthChecker; +import io.mosip.testrig.apirig.utils.AdminTestException; +import io.mosip.testrig.apirig.utils.AdminTestUtil; +import io.mosip.testrig.apirig.utils.AuthenticationTestException; +import io.mosip.testrig.apirig.utils.ConfigManager; +import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.OutputValidationUtil; +import io.mosip.testrig.apirig.utils.ReportUtil; +import io.restassured.response.Response; + +public class PostWithAutogenIdWithOtpGenerate extends AdminTestUtil implements ITest { + private static final Logger logger = Logger.getLogger(PostWithAutogenIdWithOtpGenerate.class); + protected String testCaseName = ""; + public String idKeyName = null; + public Response response = null; + public boolean auditLogCheck = false; + + @BeforeClass + public static void setLogLevel() { + if (ConfigManager.IsDebugEnabled()) + logger.setLevel(Level.ALL); + else + logger.setLevel(Level.ERROR); + } + + /** + * get current testcaseName + */ + @Override + public String getTestName() { + return testCaseName; + } + + /** + * Data provider class provides test case list + * + * @return object of data provider + */ + @DataProvider(name = "testcaselist") + public Object[] getTestCaseList(ITestContext context) { + String ymlFile = context.getCurrentXmlTest().getLocalParameters().get("ymlFile"); + idKeyName = context.getCurrentXmlTest().getLocalParameters().get("idKeyName"); + logger.info("Started executing yml: " + ymlFile); + return getYmlTestData(ymlFile); + } + + /** + * Test method for OTP Generation execution + * + * @param objTestParameters + * @param testScenario + * @param testcaseName + * @throws AuthenticationTestException + * @throws AdminTestException + * @throws InterruptedException + * @throws NumberFormatException + */ + @Test(dataProvider = "testcaselist") + public void test(TestCaseDTO testCaseDTO) + throws AuthenticationTestException, AdminTestException, NumberFormatException, InterruptedException { + testCaseName = testCaseDTO.getTestCaseName(); + if (HealthChecker.signalTerminateExecution) { + throw new SkipException( + GlobalConstants.TARGET_ENV_HEALTH_CHECK_FAILED + HealthChecker.healthCheckFailureMapS); + } + + if (testCaseDTO.getTestCaseName().contains("VID") || testCaseDTO.getTestCaseName().contains("Vid")) { + if (!BaseTestCase.getSupportedIdTypesValueFromActuator().contains("VID") + && !BaseTestCase.getSupportedIdTypesValueFromActuator().contains("vid")) { + throw new SkipException(GlobalConstants.VID_FEATURE_NOT_SUPPORTED); + } + } + testCaseName = isTestCaseValidForExecution(testCaseDTO); + + String inputJson = testCaseDTO.getInput().toString(); + JSONObject req = new JSONObject(testCaseDTO.getInput()); + + if (inputJson.contains("$PHONENUMBERFROMREGEXFORSIGNUP$")) { + String phoneNumber = getPhoneNumber(); + if (phoneNumber != null && !phoneNumber.isEmpty()) { + inputJson = replaceKeywordWithValue(inputJson, "$PHONENUMBERFROMREGEXFORSIGNUP$", phoneNumber); + req = new JSONObject(inputJson); + writeAutoGeneratedId(testCaseDTO.getTestCaseName(), "PHONE", phoneNumber); + } + } + + auditLogCheck = testCaseDTO.isAuditLogCheck(); + String otpRequest = null; + String sendOtpReqTemplate = null; + String sendOtpEndPoint = null; + if (req.has(GlobalConstants.SENDOTP)) { + otpRequest = req.get(GlobalConstants.SENDOTP).toString(); + req.remove(GlobalConstants.SENDOTP); + } + JSONObject otpReqJson = new JSONObject(otpRequest); + sendOtpReqTemplate = otpReqJson.getString("sendOtpReqTemplate"); + otpReqJson.remove("sendOtpReqTemplate"); + sendOtpEndPoint = otpReqJson.getString("sendOtpEndPoint"); + otpReqJson.remove("sendOtpEndPoint"); + + Response otpResponse = null; + int maxLoopCount = Integer.parseInt(properties.getProperty("uinGenMaxLoopCount")); + int currLoopCount = 0; + while (currLoopCount < maxLoopCount) { + otpResponse = postWithBodyAndCookie(ApplnURI + sendOtpEndPoint, + getJsonFromTemplate(otpReqJson.toString(), sendOtpReqTemplate), COOKIENAME, + GlobalConstants.RESIDENT, testCaseDTO.getTestCaseName()); + + if (otpResponse != null && otpResponse.asString().contains("IDA-MLC-018")) { + logger.info("waiting for: " + properties.getProperty("uinGenDelayTime") + + " as UIN not available in database"); + try { + Thread.sleep(Long.parseLong(properties.getProperty("uinGenDelayTime"))); +// SlackChannelIntegration.sendMessageToSlack("UIN not available in database in :" + ApplnURI + "Env") ; + + } catch (NumberFormatException | InterruptedException e) { + logger.error(e.getMessage()); + Thread.currentThread().interrupt(); + } + } else { + break; + } + + currLoopCount++; + } + + JSONObject res = new JSONObject(testCaseDTO.getOutput()); + String sendOtpResp = null; + String sendOtpResTemplate = null; + if (res.has(GlobalConstants.SENDOTPRESP)) { + sendOtpResp = res.get(GlobalConstants.SENDOTPRESP).toString(); + res.remove(GlobalConstants.SENDOTPRESP); + } + JSONObject sendOtpRespJson = new JSONObject(sendOtpResp); + sendOtpResTemplate = sendOtpRespJson.getString("sendOtpResTemplate"); + sendOtpRespJson.remove("sendOtpResTemplate"); + if (otpResponse != null) { + Map> ouputValidOtp = OutputValidationUtil.doJsonOutputValidation( + otpResponse.asString(), getJsonFromTemplate(sendOtpRespJson.toString(), sendOtpResTemplate), + testCaseDTO, otpResponse.getStatusCode()); + Reporter.log(ReportUtil.getOutputValidationReport(ouputValidOtp)); + + if (!OutputValidationUtil.publishOutputResult(ouputValidOtp)) { + if (otpResponse.asString().contains("IDA-OTA-001")) { +// SlackChannelIntegration.sendMessageToSlack("Exceeded number of OTP requests in a given time, :" + ApplnURI + "Env") ; + throw new AdminTestException( + "Exceeded number of OTP requests in a given time, Increase otp.request.flooding.max-count"); + } + + else + throw new AdminTestException("Failed at otp output validation"); + } + + } else { + throw new AdminTestException("Invalid otp response"); + } + + + response = postWithBodyAndCookieForAutoGeneratedId(ApplnURI + testCaseDTO.getEndPoint(), + getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()), auditLogCheck, COOKIENAME, + testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), idKeyName); + + Map> ouputValid = OutputValidationUtil.doJsonOutputValidation( + response.asString(), getJsonFromTemplate(res.toString(), testCaseDTO.getOutputTemplate()), testCaseDTO, + response.getStatusCode()); + Reporter.log(ReportUtil.getOutputValidationReport(ouputValid)); + + if (!OutputValidationUtil.publishOutputResult(ouputValid)) + throw new AdminTestException("Failed at output validation"); + + } + + /** + * The method ser current test name to result + * + * @param result + */ + @AfterMethod(alwaysRun = true) + public void setResultTestName(ITestResult result) { + try { + Field method = TestResult.class.getDeclaredField("m_method"); + method.setAccessible(true); + method.set(result, result.getMethod().clone()); + BaseTestMethod baseTestMethod = (BaseTestMethod) result.getMethod(); + Field f = baseTestMethod.getClass().getSuperclass().getDeclaredField("m_methodName"); + f.setAccessible(true); + f.set(baseTestMethod, testCaseName); + } catch (Exception e) { + Reporter.log("Exception : " + e.getMessage()); + } + } + + @AfterClass(alwaysRun = true) + public void waittime() { + try { + long delayTime = Long.parseLong(properties.getProperty("Delaytime")); + if (!BaseTestCase.isTargetEnvLTS()) + delayTime = Long.parseLong(properties.getProperty("uinGenDelayTime")) + * Long.parseLong(properties.getProperty("uinGenMaxLoopCount")); + logger.info("waiting for " + delayTime + " mili secs after VID Generation In RESIDENT SERVICES"); + Thread.sleep(delayTime); + } catch (Exception e) { + logger.error("Exception : " + e.getMessage()); + Thread.currentThread().interrupt(); + } + + } +} diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithBodyWithOtpGenerate.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithBodyWithOtpGenerate.java new file mode 100644 index 000000000..1cded4cfa --- /dev/null +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithBodyWithOtpGenerate.java @@ -0,0 +1,181 @@ +package io.mosip.testrig.apirig.testscripts; + +import java.lang.reflect.Field; +import java.util.List; +import java.util.Map; + +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.json.JSONObject; +import org.testng.ITest; +import org.testng.ITestContext; +import org.testng.ITestResult; +import org.testng.Reporter; +import org.testng.SkipException; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; +import org.testng.internal.BaseTestMethod; +import org.testng.internal.TestResult; + +import io.mosip.testrig.apirig.dto.OutputValidationDto; +import io.mosip.testrig.apirig.dto.TestCaseDTO; +import io.mosip.testrig.apirig.testrunner.BaseTestCase; +import io.mosip.testrig.apirig.testrunner.HealthChecker; +import io.mosip.testrig.apirig.utils.AdminTestException; +import io.mosip.testrig.apirig.utils.AdminTestUtil; +import io.mosip.testrig.apirig.utils.AuthenticationTestException; +import io.mosip.testrig.apirig.utils.ConfigManager; +import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.OutputValidationUtil; +import io.mosip.testrig.apirig.utils.ReportUtil; +import io.restassured.response.Response; + +public class PostWithBodyWithOtpGenerate extends AdminTestUtil implements ITest { + private static final Logger logger = Logger.getLogger(PostWithBodyWithOtpGenerate.class); + protected String testCaseName = ""; + public Response response = null; + public boolean sendEsignetToken = false; + public boolean auditLogCheck = false; + + @BeforeClass + public static void setLogLevel() { + if (ConfigManager.IsDebugEnabled()) + logger.setLevel(Level.ALL); + else + logger.setLevel(Level.ERROR); + } + + /** + * get current testcaseName + */ + @Override + public String getTestName() { + return testCaseName; + } + + /** + * Data provider class provides test case list + * + * @return object of data provider + */ + @DataProvider(name = "testcaselist") + public Object[] getTestCaseList(ITestContext context) { + String ymlFile = context.getCurrentXmlTest().getLocalParameters().get("ymlFile"); + sendEsignetToken = context.getCurrentXmlTest().getLocalParameters().containsKey("sendEsignetToken"); + logger.info("Started executing yml: " + ymlFile); + return getYmlTestData(ymlFile); + } + + /** + * Test method for OTP Generation execution + * + * @param objTestParameters + * @param testScenario + * @param testcaseName + * @throws AuthenticationTestException + * @throws AdminTestException + */ + @Test(dataProvider = "testcaselist") + public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException { + testCaseName = testCaseDTO.getTestCaseName(); + if (HealthChecker.signalTerminateExecution) { + throw new SkipException( + GlobalConstants.TARGET_ENV_HEALTH_CHECK_FAILED + HealthChecker.healthCheckFailureMapS); + } + if (testCaseDTO.getTestCaseName().contains("VID") || testCaseDTO.getTestCaseName().contains("Vid")) { + if (!BaseTestCase.getSupportedIdTypesValueFromActuator().contains("VID") + && !BaseTestCase.getSupportedIdTypesValueFromActuator().contains("vid")) { + throw new SkipException(GlobalConstants.VID_FEATURE_NOT_SUPPORTED); + } + } + + testCaseName = isTestCaseValidForExecution(testCaseDTO); + auditLogCheck = testCaseDTO.isAuditLogCheck(); + String tempUrl = ConfigManager.getEsignetBaseUrl(); + JSONObject req = new JSONObject(testCaseDTO.getInput()); + String otpRequest = null; + String sendOtpReqTemplate = null; + String sendOtpEndPoint = null; + if (req.has(GlobalConstants.SENDOTP)) { + otpRequest = req.get(GlobalConstants.SENDOTP).toString(); + req.remove(GlobalConstants.SENDOTP); + } + JSONObject otpReqJson = new JSONObject(otpRequest); + sendOtpReqTemplate = otpReqJson.getString("sendOtpReqTemplate"); + otpReqJson.remove("sendOtpReqTemplate"); + sendOtpEndPoint = otpReqJson.getString("sendOtpEndPoint"); + otpReqJson.remove("sendOtpEndPoint"); + Response otpResponse = null; + + otpResponse = postWithBodyAndCookie(ApplnURI + sendOtpEndPoint, + getJsonFromTemplate(otpReqJson.toString(), sendOtpReqTemplate), COOKIENAME, GlobalConstants.RESIDENT, + testCaseDTO.getTestCaseName()); + + JSONObject res = new JSONObject(testCaseDTO.getOutput()); + String sendOtpResp = null, sendOtpResTemplate = null; + if (res.has(GlobalConstants.SENDOTPRESP)) { + sendOtpResp = res.get(GlobalConstants.SENDOTPRESP).toString(); + res.remove(GlobalConstants.SENDOTPRESP); + } + JSONObject sendOtpRespJson = new JSONObject(sendOtpResp); + sendOtpResTemplate = sendOtpRespJson.getString("sendOtpResTemplate"); + sendOtpRespJson.remove("sendOtpResTemplate"); + Map> ouputValidOtp = OutputValidationUtil.doJsonOutputValidation( + otpResponse.asString(), getJsonFromTemplate(sendOtpRespJson.toString(), sendOtpResTemplate), + testCaseDTO, otpResponse.getStatusCode()); + Reporter.log(ReportUtil.getOutputValidationReport(ouputValidOtp)); + + if (!OutputValidationUtil.publishOutputResult(ouputValidOtp)) { + if (otpResponse.asString().contains("IDA-OTA-001")) + throw new AdminTestException( + "Exceeded number of OTP requests in a given time, Increase otp.request.flooding.max-count"); + else + throw new AdminTestException("Failed at otp output validation"); + } + + if (testCaseName.contains("_eotp")) { + try { + logger.info("waiting for " + properties.getProperty("expireOtpTime") + + " mili secs to test expire otp case in RESIDENT Service"); + Thread.sleep(Long.parseLong(properties.getProperty("expireOtpTime"))); + } catch (NumberFormatException | InterruptedException e) { + logger.error(e.getMessage()); + Thread.currentThread().interrupt(); + } + } + + response = postRequestWithCookieAndHeader(ApplnURI + testCaseDTO.getEndPoint(), + getJsonFromTemplate(req.toString(), testCaseDTO.getInputTemplate()), COOKIENAME, testCaseDTO.getRole(), + testCaseDTO.getTestCaseName(), sendEsignetToken); + Map> ouputValid = OutputValidationUtil.doJsonOutputValidation( + response.asString(), getJsonFromTemplate(res.toString(), testCaseDTO.getOutputTemplate()), testCaseDTO, + response.getStatusCode()); + Reporter.log(ReportUtil.getOutputValidationReport(ouputValid)); + + if (!OutputValidationUtil.publishOutputResult(ouputValid)) + throw new AdminTestException("Failed at output validation"); + + } + + /** + * The method ser current test name to result + * + * @param result + */ + @AfterMethod(alwaysRun = true) + public void setResultTestName(ITestResult result) { + try { + Field method = TestResult.class.getDeclaredField("m_method"); + method.setAccessible(true); + method.set(result, result.getMethod().clone()); + BaseTestMethod baseTestMethod = (BaseTestMethod) result.getMethod(); + Field f = baseTestMethod.getClass().getSuperclass().getDeclaredField("m_methodName"); + f.setAccessible(true); + f.set(baseTestMethod, testCaseName); + } catch (Exception e) { + Reporter.log("Exception : " + e.getMessage()); + } + } +} diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java new file mode 100644 index 000000000..927e8d0fe --- /dev/null +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java @@ -0,0 +1,207 @@ +package io.mosip.testrig.apirig.testscripts; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.json.JSONObject; +import org.testng.ITest; +import org.testng.ITestContext; +import org.testng.ITestResult; +import org.testng.Reporter; +import org.testng.SkipException; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; +import org.testng.internal.BaseTestMethod; +import org.testng.internal.TestResult; + +import io.mosip.testrig.apirig.dto.OutputValidationDto; +import io.mosip.testrig.apirig.dto.TestCaseDTO; +import io.mosip.testrig.apirig.testrunner.BaseTestCase; +import io.mosip.testrig.apirig.testrunner.HealthChecker; +import io.mosip.testrig.apirig.utils.AdminTestException; +import io.mosip.testrig.apirig.utils.AdminTestUtil; +import io.mosip.testrig.apirig.utils.AuthenticationTestException; +import io.mosip.testrig.apirig.utils.ConfigManager; +import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.OutputValidationUtil; +import io.mosip.testrig.apirig.utils.ReportUtil; +import io.restassured.response.Response; + +public class SimplePost extends AdminTestUtil implements ITest { + private static final Logger logger = Logger.getLogger(SimplePost.class); + protected String testCaseName = ""; + public Response response = null; + public boolean sendEsignetToken = false; + public boolean auditLogCheck = false; + + @BeforeClass + public static void setLogLevel() { + if (ConfigManager.IsDebugEnabled()) + logger.setLevel(Level.ALL); + else + logger.setLevel(Level.ERROR); + } + + /** + * get current testcaseName + */ + @Override + public String getTestName() { + return testCaseName; + } + + /** + * Data provider class provides test case list + * + * @return object of data provider + */ + @DataProvider(name = "testcaselist") + public Object[] getTestCaseList(ITestContext context) { + String ymlFile = context.getCurrentXmlTest().getLocalParameters().get("ymlFile"); + sendEsignetToken = context.getCurrentXmlTest().getLocalParameters().containsKey("sendEsignetToken"); + logger.info("Started executing yml: " + ymlFile); + return getYmlTestData(ymlFile); + } + + /** + * Test method for OTP Generation execution + * + * @param objTestParameters + * @param testScenario + * @param testcaseName + * @throws AuthenticationTestException + * @throws AdminTestException + */ + @Test(dataProvider = "testcaselist") + public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException { + testCaseName = testCaseDTO.getTestCaseName(); + testCaseName = isTestCaseValidForExecution(testCaseDTO); + auditLogCheck = testCaseDTO.isAuditLogCheck(); + String[] templateFields = testCaseDTO.getTemplateFields(); + if (HealthChecker.signalTerminateExecution) { + throw new SkipException( + GlobalConstants.TARGET_ENV_HEALTH_CHECK_FAILED + HealthChecker.healthCheckFailureMapS); + } + + if (testCaseDTO.getTestCaseName().contains("VID") || testCaseDTO.getTestCaseName().contains("Vid")) { + if (!BaseTestCase.getSupportedIdTypesValueFromActuator().contains("VID") + && !BaseTestCase.getSupportedIdTypesValueFromActuator().contains("vid")) { + throw new SkipException(GlobalConstants.VID_FEATURE_NOT_SUPPORTED); + } + } + + String inputJson = getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()); + if (testCaseName.contains("CreateIdSchema")) { + inputJson = modifyIdSchemaInputJson(inputJson); + } + + if (inputJson.contains(""")) { + inputJson = inputJson.replace(""", "\""); + } + + if (inputJson.contains("$PHONENUMBERFROMREGEXFORSIGNUP$")) { + String phoneNumber = getPhoneNumber(); + if (phoneNumber != null && !phoneNumber.isEmpty()) { + inputJson = replaceKeywordWithValue(inputJson, "$PHONENUMBERFROMREGEXFORSIGNUP$", phoneNumber); + writeAutoGeneratedId(testCaseDTO.getTestCaseName(), "PHONE", phoneNumber); + } + } + + if (inputJson.contains("$FULLNAMETOREGISTERUSER$")) { + String jsonString = generateFullNameToRegisterUser(inputJson, testCaseDTO.getTestCaseName()); + if (!jsonString.isBlank()) + inputJson = jsonString; + } + + if (inputJson.contains("$PASSWORDTOREGISTERUSER$")) { +// String password = getPasswordPattern(); + String password = PASSWORD_FOR_ADDIDENTITY_AND_REGISTRATION; + if (password != null && !password.isEmpty()) { + inputJson = replaceKeywordWithValue(inputJson, "$PASSWORDTOREGISTERUSER$", password); +// writeAutoGeneratedId(testCaseDTO.getTestCaseName(), "PASSWORD", password); + } + } + + if (inputJson.contains("$PASSWORDTORESET$")) { + String passwordToReset = PASSWORD_TO_RESET; + if (passwordToReset != null && !passwordToReset.isEmpty()) { + inputJson = replaceKeywordWithValue(inputJson, "$PASSWORDTORESET$", passwordToReset); + } + } + + if (testCaseDTO.getTemplateFields() != null && templateFields.length > 0) { + ArrayList inputtestCases = AdminTestUtil.getInputTestCase(testCaseDTO); + ArrayList outputtestcase = AdminTestUtil.getOutputTestCase(testCaseDTO); + for (int i = 0; i < languageList.size(); i++) { + response = postWithBodyAndCookie(ApplnURI + testCaseDTO.getEndPoint(), + getJsonFromTemplate(inputtestCases.get(i).toString(), testCaseDTO.getInputTemplate()), + COOKIENAME, testCaseDTO.getRole(), testCaseDTO.getTestCaseName()); + + Map> ouputValid = OutputValidationUtil.doJsonOutputValidation( + response.asString(), + getJsonFromTemplate(outputtestcase.get(i).toString(), testCaseDTO.getOutputTemplate()), + testCaseDTO, response.getStatusCode()); + Reporter.log(ReportUtil.getOutputValidationReport(ouputValid)); + + if (!OutputValidationUtil.publishOutputResult(ouputValid)) + throw new AdminTestException("Failed at output validation"); + } + } + + else { + response = postWithBodyAndCookie(ApplnURI + testCaseDTO.getEndPoint(), inputJson, auditLogCheck, COOKIENAME, + testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), sendEsignetToken); + Map> ouputValid = null; + if (testCaseName.contains("_StatusCode")) { + + OutputValidationDto customResponse = customStatusCodeResponse(String.valueOf(response.getStatusCode()), + testCaseDTO.getOutput()); + + ouputValid = new HashMap<>(); + ouputValid.put(GlobalConstants.EXPECTED_VS_ACTUAL, List.of(customResponse)); + } else { + ouputValid = OutputValidationUtil.doJsonOutputValidation(response.asString(), + getJsonFromTemplate(testCaseDTO.getOutput(), testCaseDTO.getOutputTemplate()), testCaseDTO, + response.getStatusCode()); + } + + Reporter.log(ReportUtil.getOutputValidationReport(ouputValid)); + + if (!OutputValidationUtil.publishOutputResult(ouputValid)) { + if (response.asString().contains("IDA-OTA-001")) + throw new AdminTestException( + "Exceeded number of OTP requests in a given time, Increase otp.request.flooding.max-count"); + else + throw new AdminTestException("Failed at otp output validation"); + } + } + + } + + /** + * The method ser current test name to result + * + * @param result + */ + @AfterMethod(alwaysRun = true) + public void setResultTestName(ITestResult result) { + try { + Field method = TestResult.class.getDeclaredField("m_method"); + method.setAccessible(true); + method.set(result, result.getMethod().clone()); + BaseTestMethod baseTestMethod = (BaseTestMethod) result.getMethod(); + Field f = baseTestMethod.getClass().getSuperclass().getDeclaredField("m_methodName"); + f.setAccessible(true); + f.set(baseTestMethod, testCaseName); + } catch (Exception e) { + Reporter.log("Exception : " + e.getMessage()); + } + } +} diff --git a/apitest/src/main/resources/config/AuthPolicy.json b/apitest/src/main/resources/config/AuthPolicy.json new file mode 100644 index 000000000..3628348c2 --- /dev/null +++ b/apitest/src/main/resources/config/AuthPolicy.json @@ -0,0 +1,7 @@ +{ + "id": "string", + "metadata": {}, + "request": {}, + "requesttime": "2022-09-07T04:23:38.117Z", + "version": "string" +} \ No newline at end of file diff --git a/apitest/src/main/resources/config/AuthPolicy2.json b/apitest/src/main/resources/config/AuthPolicy2.json new file mode 100644 index 000000000..525415bb3 --- /dev/null +++ b/apitest/src/main/resources/config/AuthPolicy2.json @@ -0,0 +1,82 @@ +{ + "allowedAuthTypes": [ + { + "authSubType": "IRIS", + "authType": "bio", + "mandatory": false + }, + { + "authSubType": "FINGER", + "authType": "bio", + "mandatory": false + }, + { + "authSubType": "FACE", + "authType": "bio", + "mandatory": false + }, + { + "authSubType": "", + "authType": "otp", + "mandatory": false + }, + { + "authSubType": "", + "authType": "otp-request", + "mandatory": false + }, + { + "authSubType": "", + "authType": "kyc", + "mandatory": false + }, + { + "authSubType": "", + "authType": "demo", + "mandatory": false + } + ], + "kycLanguages": [ + "ara", + "eng" + ], + "allowedKycAttributes": [ + { + "attributeName": "fullName" + }, + { + "attributeName": "gender" + }, + { + "attributeName": "residenceStatus" + }, + { + "attributeName": "dateOfBirth" + }, + { + "attributeName": "photo" + }, + { + "attributeName": "firstName" + }, + { + "attributeName": "province" + }, + { + "attributeName": "city" + }, + { + "attributeName": "zone" + }, + { + "attributeName": "postalCode" + }, + { + "attributeName": "phone" + }, + { + "attributeName": "email" + } + ], + "authTokenType": "partner" + } \ No newline at end of file diff --git a/apitest/src/main/resources/config/AuthPolicy3.json b/apitest/src/main/resources/config/AuthPolicy3.json new file mode 100644 index 000000000..d7f53a6ac --- /dev/null +++ b/apitest/src/main/resources/config/AuthPolicy3.json @@ -0,0 +1,8 @@ +{ + "desc":"desc mosip auth policy", + "name":"mosip auth policy 2345678", + "policyGroupName":"mosip auth policy group 2345678", + "policyType":"Auth", + "version": "1.0", + "policies": {} + } \ No newline at end of file diff --git a/apitest/src/main/resources/config/AuthPolicy4.json b/apitest/src/main/resources/config/AuthPolicy4.json new file mode 100644 index 000000000..3628348c2 --- /dev/null +++ b/apitest/src/main/resources/config/AuthPolicy4.json @@ -0,0 +1,7 @@ +{ + "id": "string", + "metadata": {}, + "request": {}, + "requesttime": "2022-09-07T04:23:38.117Z", + "version": "string" +} \ No newline at end of file diff --git a/apitest/src/main/resources/config/AuthPolicy5.json b/apitest/src/main/resources/config/AuthPolicy5.json new file mode 100644 index 000000000..d7f53a6ac --- /dev/null +++ b/apitest/src/main/resources/config/AuthPolicy5.json @@ -0,0 +1,8 @@ +{ + "desc":"desc mosip auth policy", + "name":"mosip auth policy 2345678", + "policyGroupName":"mosip auth policy group 2345678", + "policyType":"Auth", + "version": "1.0", + "policies": {} + } \ No newline at end of file diff --git a/apitest/src/main/resources/config/AuthPolicy6.json b/apitest/src/main/resources/config/AuthPolicy6.json new file mode 100644 index 000000000..fb161e611 --- /dev/null +++ b/apitest/src/main/resources/config/AuthPolicy6.json @@ -0,0 +1,41 @@ +{ + "allowedAuthTypes": [ + { + "authSubType": "IRIS", + "authType": "bio", + "mandatory": true + }, + { + "authSubType": "FINGER", + "authType": "bio", + "mandatory": true + }, + { + "authSubType": "FACE", + "authType": "bio", + "mandatory": true + }, + { + "authSubType": "", + "authType": "otp-request", + "mandatory": false + }, + { + "authSubType": "", + "authType": "kyc", + "mandatory": false + }, + { + "authSubType": "", + "authType": "demo", + "mandatory": false + } + ], + "kycLanguages": [ + "ara", + "eng" + ], + "allowedKycAttributes": [ + ], + "authTokenType": "partner" + } \ No newline at end of file diff --git a/apitest/src/main/resources/config/Authorization/OtpGeneration/request.json b/apitest/src/main/resources/config/Authorization/OtpGeneration/request.json new file mode 100644 index 000000000..7ce05cc51 --- /dev/null +++ b/apitest/src/main/resources/config/Authorization/OtpGeneration/request.json @@ -0,0 +1,16 @@ +{ + "id": "string", + "metadata": {}, + "request": { + "appId": "prereg", + "context": "auth-otp", + "otpChannel": [ + "EMAIL" + ], + "templateVariables": {}, + "userId": "robin.hood@mailinator.com", + "useridtype": "USERID" + }, + "requesttime": "2018-12-10T06:12:52.994Z", + "version": "string" +} \ No newline at end of file diff --git a/apitest/src/main/resources/config/Authorization/OtpValidation/request.json b/apitest/src/main/resources/config/Authorization/OtpValidation/request.json new file mode 100644 index 000000000..800b94ad6 --- /dev/null +++ b/apitest/src/main/resources/config/Authorization/OtpValidation/request.json @@ -0,0 +1,11 @@ +{ + "id": "string", + "metadata": {}, + "request": { + "appId": "prereg", + "otp": "837439", + "userId": "9972388747" + }, + "requesttime": "2018-12-10T06:12:52.994Z", + "version": "string" +} \ No newline at end of file diff --git a/apitest/src/main/resources/config/Authorization/errorUIN.json b/apitest/src/main/resources/config/Authorization/errorUIN.json new file mode 100644 index 000000000..f54f8c7a8 --- /dev/null +++ b/apitest/src/main/resources/config/Authorization/errorUIN.json @@ -0,0 +1,17 @@ +{ + "transactionID": "$IGNORE$", + "version": "$IGNORE$", + "id": "$IGNORE$", + "errors": [ + { + "errorCode": "IDA-MLC-015", + "errorMessage": "$IGNORE$", + "actionMessage": "$IGNORE$" + } + ], + "responseTime": "$IGNORE$", + "response": { + "authStatus": false, + "authToken": "$IGNORE$" + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/config/Authorization/internalAuthRequest.json b/apitest/src/main/resources/config/Authorization/internalAuthRequest.json new file mode 100644 index 000000000..57aa8f2f6 --- /dev/null +++ b/apitest/src/main/resources/config/Authorization/internalAuthRequest.json @@ -0,0 +1,13 @@ +{ + "id": "string", + "version": "string", + "requesttime": "2022-01-13T06:07:20.554Z", + "metadata": {}, + "request": { + "userName": "110005", + "password": "mosip", + "appId": "admin", + "clientId": "mosip-admin-client", + "clientSecret": "xyz123" + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/config/Authorization/keycloakTokenGeneration.json b/apitest/src/main/resources/config/Authorization/keycloakTokenGeneration.json new file mode 100644 index 000000000..cb8ffb631 --- /dev/null +++ b/apitest/src/main/resources/config/Authorization/keycloakTokenGeneration.json @@ -0,0 +1,6 @@ +{ +"grant_type" : "password", +"client_id": "admin-cli", +"username": "keycloakusername", +"password": "keycloakpassword" +} \ No newline at end of file diff --git a/apitest/src/main/resources/config/Authorization/request.json b/apitest/src/main/resources/config/Authorization/request.json new file mode 100644 index 000000000..57831153b --- /dev/null +++ b/apitest/src/main/resources/config/Authorization/request.json @@ -0,0 +1,11 @@ +{ + "id": "string", + "metadata": {}, + "request": { + "appId": "prereg", + "password": "prereguser", + "userName": "prereguser" + }, + "requesttime": "2019-04-10T10:00:00.000Z", + "version": "string" +} \ No newline at end of file diff --git a/apitest/src/main/resources/config/Authorization/requestIdentity.json b/apitest/src/main/resources/config/Authorization/requestIdentity.json new file mode 100644 index 000000000..4c6b94e24 --- /dev/null +++ b/apitest/src/main/resources/config/Authorization/requestIdentity.json @@ -0,0 +1,12 @@ +{ + "identity": { + "addressLine3": [ + { + "language": "languageValue", + "value": "valueOfAttribute" + } + ], + "IDSchemaVersion": "IDSchemaVersion", + "UIN": "$ID:AddIdentity_Positive_PRE_smoke_UIN$" + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/config/Authorization/zoneMappingRequest.json b/apitest/src/main/resources/config/Authorization/zoneMappingRequest.json new file mode 100644 index 000000000..c7e5fbce5 --- /dev/null +++ b/apitest/src/main/resources/config/Authorization/zoneMappingRequest.json @@ -0,0 +1,12 @@ +{ + "id": "string", + "metadata": {}, + "request": { + "zoneCode": "CSB", + "userId": "110123", + "isActive": true, + "langCode": "eng" + }, + "requesttime": "2022-05-09T09:52:11.969Z", + "version": "string" +} \ No newline at end of file diff --git a/apitest/src/main/resources/config/IDRepo.properties b/apitest/src/main/resources/config/IDRepo.properties new file mode 100644 index 000000000..361cd04b1 --- /dev/null +++ b/apitest/src/main/resources/config/IDRepo.properties @@ -0,0 +1,86 @@ +# ------------------------------------------------------------------------------------------- +# Properties File that will defined from ID Repo for specific request and Response elements +# which will be used during automation. This is common place for update +# + +req.Documentrequest=Document request +req.notify=NotificationRequestDTO +langCode.key=langCode + +key=value + +#PreRegistration resource uris +#Make sure all resource apis are covered +ui.config.params=preregistration.login.mode,preregistration.workflow.demographic,preregistration.workflow.documentupload,preregistration.workflow.booking,preregistration.booking.offset,preregistration.auto.logout,preregistration.rebook.timespan,preregistration.cancel.timespan,preregistration.book.days,preregistration.max.file.size,preregistration.recommended.centers.locCode,preregistration.nearby.centers,mosip.regex.email,mosip.regex.postalCode,mosip.regex.textField,mosip.regex.phone,mosip.regex.DOB,mosip.regex.CNIE,mosip.supported-languages,mosip.primary-language,mosip.secondary-language,mosip.default.dob,mosip.kernel.otp.expiry-time,mosip.kernel.otp.validation-attempt-threshold,mosip.kernel.otp.default-length,mosip.kernel.sms.number.length,mosip.kernel.pin.length,otpChannel.mobile +private static final String preReg_URI = "/booking/v0.1/preregistration/booking/book" +preReg_CreateApplnURI = /preregistration/v1/applications +preReg_FetchRegistrationDataURI = /preregistration/v1/applications/{preRegistrationId} +preReg_FetchPreRegistrationByDateAndTimeURI=/preregistration/v1/demographic/applications/byDateTime +preReg_FetchStatusOfApplicationURI =/preregistration/v1/applications/status/{preRegistrationId} +preReg_FetchAllApplicationCreatedByUserURI=/preregistration/v1/applications +preReg_DiscardApplnURI = /preregistration/v1/applications/{preRegistrationId} +preReg_UpdateStatusAppURI=/preregistration/v1/applications/{preRegistrationId} +#QRCode Service API related URI's +qrCode_URI=/preregistration/v1/qrCode/generate +preReg_DelAllDocumentByPreIdURI = /preregistration/v1/documents/preregistration/ + +#Document API related URI's +preReg_DocUploadURI = /preregistration/v1/documents/ +preReg_DocumentUploadURI = /preregistration/v1/documents/{preRegistrationId} +preReg_FetchAllDocumentURI = /preregistration/v1/documents/{preRegistrationId} +prereg_DeleteDocumentByDocIdURI = /preregistration/v1/documents/ +preReg_DeleteAllDocumentByPreIdURI = /preregistration/v1/documents/preregistration/ +preReg_CopyDocumentsURI = /preregistration/v1/documents/ +preReg_DeleteAllDocumentByPreIdURI1 = /preregistration/v1/documents/preregistration/ + +preReg_BookingAppointmenturi =/preregistration/v1/appointment/{preRegistrationId} +preReg_BookingAppointmentURI =/preregistration/v1/appointment/ +preReg_CancelAppointmenturi = /preregistration/v1/appointment/{preRegistrationId} +#preReg_CancelAppointmenturi= /preregistration/v1/appointment/ +preReg_FecthAppointmentDetailsuri=/preregistration/v1/appointment/{preRegistrationId} +#preReg_FetchCenterIDURI = /preregistration/v1/appointment/availability/ + + + +preReg_GetDocByDocId = /preregistration/v1/documents/ +preReg_GetDocByPreId = /preregistration/v1/documents/preregistration/ + + +#Booking Service API related URI's +preReg_BookingAppointmentURI =/preregistration/v1/appointment/ +preReg_MultipleBookingAppointmentURI =/preregistration/v1/appointment +preReg_FetchCenterIDURI = /preregistration/v1/appointment/availability/ +preReg_FetchCenterIDuri = /preregistration/v1/appointment/availability/{registrationCenterId} +preReg_FecthAppointmentDetailsURI=/preregistration/v1/appointment/ +preReg_CancelAppointmentURI = /preregistration/v1/appointment/ +preReg_RetriveBookedPreIdsByRegId=/preregistration/v1/appointment/preRegistrationId/ +preReg_SyncMasterDataURI=/preregistration/v1/batch/availability/sync + + + +#Notification Service API related URI's +preReg_NotifyURI=/preregistration/v1/notification/notify + +#Booking Service API related URI's + +preReg_FetchBookedPreIdByRegIdURI = /preregistration/v1/booking/appointment/preIdsByRegId +preReg_DiscardBookingURI=/preregistration/v1/booking/appointment +preReg_SyncMasterDataURI=/preregistration/v1/booking/appointment/availability/sync + + + +preReg_ConsumedPreregistrationURI =/preregistration/v1/sync/reverseDataSync +preReg_FetchAllPreRegistrationIdsURI = /preregistration/v1/sync +preReg_DataSyncnURI = /preregistration/v1/sync/{preRegistrationId} +preReg_ExpiredURI=/preregistration/v1/batch/expiredStatus +preReg_syncAvailability=/preregistration/v1/appointment/availability/sync + +preReg_ReverseDataSyncURI=/preregistration/v1/sync/consumedPreRegIds +preReg_ConsumedURI=/preregistration/v1/batch/consumedStatus +preReg_NotifyURI=/preregistration/v1/notification/notify +invalidateToken_URI=/preregistration/v1/login/invalidateToken +preReg_translitrationRequestURI=/preregistration/v1/transliteration/transliterate +otpSend_URI=/preregistration/v1/login/sendOtp +validateOTP_URI=/preregistration/v1/login/validateOtp +preReg_AdminTokenURI=/v1/authmanager/authenticate/useridPwd +preReg_GetPreRegistrationConfigData=/preregistration/v1/login/config diff --git a/apitest/src/main/resources/config/IDRepo2.properties b/apitest/src/main/resources/config/IDRepo2.properties new file mode 100644 index 000000000..d2cface22 --- /dev/null +++ b/apitest/src/main/resources/config/IDRepo2.properties @@ -0,0 +1,100 @@ +# ------------------------------------------------------------------------------------------- +# Properties File that will defined from ID Repo for specific request and Response elements +# which will be used during automation. This is common place for update +# + +req.Documentrequest=Document request + + +key=value + +#PreRegistration resource uris +#Make sure all resource apis are covered + +private static final String preReg_URI = "/booking/v0.1/pre-registration/booking/book" +preReg_CreateApplnURI = /preregistration/v1/demographic/applications +preReg_FetchRegistrationDataURI = /pre-registration/v1/demographic/applications/details +preReg_FetchPreRegistrationByDateAndTimeURI=/pre-registration/v1/demographic/applications/byDateTime +preReg_FetchStatusOfApplicationURI =/pre-registration/v1/demographic//applications/status +preReg_FetchAllApplicationCreatedByUserURI=/pre-registration/v1/demographic/applications +preReg_DiscardApplnURI = /pre-registration/v1/demographic/applications +preReg_UpdateStatusAppURI=/pre-registration/v1/demographic/applications + + +preReg_DocumentUploadURI = /pre-registration/v1/document/documents +preReg_FetchAllDocumentURI = /pre-registration/v1/document/documents +prereg_DeleteDocumentByDocIdURI = /pre-registration/v1/document/documents +preReg_DeleteAllDocumentByPreIdURI = /pre-registration/v1/document/documents/byPreRegId + +preReg_CopyDocumentsURI = /pre-registration/v1/document/documents/copy +preReg_BookingAppointmentURI =/pre-registration/v1/booking/appointment +preReg_CancelAppointmentURI = /pre-registration/v1/booking/appointment +preReg_FecthAppointmentDetailsURI=/pre-registration/v1/booking/appointment +preReg_FetchCenterIDURI = /pre-registration/v1/booking/appointment/availability +preReg_FetchBookedPreIdByRegIdURI = /pre-registration/v1/booking/appointment/preIdsByRegId +preReg_DiscardBookingURI=/pre-registration/v1/booking/appointment +preReg_SyncMasterDataURI=/pre-registration/v1/booking/appointment/availability/sync +preReg_RetriveBookedPreIdsByRegId=/pre-registration/v1/booking/appointment/preIdsByRegId + + +preReg_ConsumedPreregistrationURI =/pre-registration/v1/sync/reverseDataSync +preReg_FetchAllPreRegistrationIdsURI = /pre-registration/v1/sync/datasync +preReg_DataSyncnURI = /pre-registration/v1/sync/datasync +preReg_ExpiredURI=/pre-registration/v1/batchjob/expiredStatus + +preReg_ReverseDataSyncURI=/pre-registration/v1/sync/datasync/store +preReg_ConsumedURI=/pre-registration/v1/batchjob//consumedStatus +preReg_NotifyURI=/pre-registration/v1/notification/notify +invalidateToken_URI=/pre-registration/v1/login/invalidateToken +preReg_translitrationRequestURI=/pre-registration/v1/transliteration/transliterate +otpSend_URI=/preregistration/v1/login/sendOtp +validateOTP_URI=/pre-registration/v1/login/validateOtp + +private static final String preReg_URI = "/booking/v0.1/preregistration/booking/book" +preReg_CreateApplnURI = /preregistration/v1/applications +preReg_FetchRegistrationDataURI = /preregistration/v1/applications/{preRegistrationId} +preReg_FetchPreRegistrationByDateAndTimeURI=/preregistration/v1/demographic/applications/byDateTime +preReg_FetchStatusOfApplicationURI =/preregistration/v1/applications/status/{preRegistrationId} +preReg_FetchAllApplicationCreatedByUserURI=/preregistration/v1/applications +preReg_DiscardApplnURI = /preregistration/v1/applications/{preRegistrationId} +preReg_UpdateStatusAppURI=/preregistration/v1/applications/{preRegistrationId} + + +preReg_DocumentUploadURI = /preregistration/v1/documents/{preRegistrationId} +preReg_FetchAllDocumentURI = /preregistration/v1/document/documents +prereg_DeleteDocumentByDocIdURI = /preregistration/v1/document/documents +preReg_DeleteAllDocumentByPreIdURI = /preregistration/v1/document/documents/byPreRegId + +preReg_CopyDocumentsURI = /preregistration/v1/document/documents/copy +preReg_BookingAppointmentURI =/preregistration/v1/booking/appointment +preReg_CancelAppointmentURI = /preregistration/v1/booking/appointment +preReg_FecthAppointmentDetailsURI=/preregistration/v1/booking/appointment +preReg_FetchCenterIDURI = /preregistration/v1/appointment/availability/{registrationCenterId} +preReg_FetchBookedPreIdByRegIdURI = /preregistration/v1/booking/appointment/preIdsByRegId +preReg_DiscardBookingURI=/preregistration/v1/booking/appointment +preReg_SyncMasterDataURI=/preregistration/v1/booking/appointment/availability/sync +preReg_RetriveBookedPreIdsByRegId=/preregistration/v1/booking/appointment/preIdsByRegId + + +preReg_ConsumedPreregistrationURI =/preregistration/v1/sync/reverseDataSync +preReg_FetchAllPreRegistrationIdsURI = /preregistration/v1/sync/datasync +preReg_DataSyncnURI = /preregistration/v1/sync/datasync +preReg_ExpiredURI=/preregistration/v1/batchjob/expiredStatus + +preReg_ReverseDataSyncURI=/preregistration/v1/sync/datasync/store +preReg_ConsumedURI=/preregistration/v1/batchjob//consumedStatus +preReg_NotifyURI=/preregistration/v1/notification/notify +invalidateToken_URI=/preregistration/v1/login/invalidateToken +preReg_translitrationRequestURI=/preregistration/v1/transliteration/transliterate +otpSend_URI=/preregistration/v1/login/sendOtp +validateOTP_URI=/preregistration/v1/login/validateOtp +preReg_AdminTokenURI=/authmanager/v1/authenticate/useridPwd + + + + + + + + + diff --git a/apitest/src/main/resources/config/IDjson.properties b/apitest/src/main/resources/config/IDjson.properties new file mode 100644 index 000000000..b78a17f43 --- /dev/null +++ b/apitest/src/main/resources/config/IDjson.properties @@ -0,0 +1,2 @@ +dateOfBirthEven=1998/01/01 +dateOfBirthOdd=1993/01/01 \ No newline at end of file diff --git a/apitest/src/main/resources/config/Kernel.properties b/apitest/src/main/resources/config/Kernel.properties new file mode 100644 index 000000000..d98d4febe --- /dev/null +++ b/apitest/src/main/resources/config/Kernel.properties @@ -0,0 +1,278 @@ +#---------------------------------- End point(s) relative URLs ----------------------------------# +authclientidsecretkeyURL = /v1/authmanager/authenticate/clientidsecretkey +authentication = /v1/authmanager/authenticate/useridPwd +authenticationInternal = /v1/authmanager/authenticate/internal/useridPwd +keycloakAuthURL = /auth/realms/master/protocol/openid-connect/token +auditLog_URI = /v1/auditmanager/audits +CentetMachineUserMappingToMasterData_uri = /v1/masterdata/registrationmachineusermappings +EmailNotification_URI = /v1/notifier/email/send +encrypt_URI = /v1/keymanager/encrypt +decrypt_URI = /v1/keymanager/decrypt +FetchApplication_URI = /v1/masterdata/applicationtypes +FetchApplication_lang_URI = /v1/masterdata/applicationtypes/{langcode} +FetchApplication_id_lang_URI = /v1/masterdata/applicationtypes/{code}/{langcode} +FetchBiometricAttribute_URI = /v1/masterdata/getbiometricattributesbyauthtype/{langcode}/{biometrictypecode} +FetchBiometricAuthType_URI = /v1/masterdata/biometrictypes/{langcode} +FetchBlackListedWord_URI = /v1/masterdata/blacklistedwords/{langcode} +FetchDevice_lang_URI = /v1/masterdata/devices/{languagecode} +FetchDevice_id_lang_URI = /v1/masterdata/devices/{languagecode}/{deviceType} +FetchDeviceSpec_lang_URI = /v1/masterdata/devicespecifications/{langcode} +FetchDeviceSpec_id_lang_URI = /v1/masterdata/devicespecifications/{langcode}/{devicetypecode} +FetchDocumentCategories_URI = /v1/masterdata/documentcategories/{langcode} +FetchDocumentCategories_URI_withcodeAndLangCode = /v1/masterdata/documentcategories/{code}/{langcode} +FetchDocumentTypes_URI = /v1/masterdata/documenttypes/{documentcategorycode}/{langcode} +FetchGenderType_URI = /v1/masterdata/gendertypes +FetchGenderType_id_lang_URI = /v1/masterdata/gendertypes/{langcode} +FetchHolidays_URI = /v1/masterdata/holidays +FetchHolidays_id_URI = /v1/masterdata/holidays/{holidayid} +FetchHolidays_id_lang_URI = /v1/masterdata/holidays/{holidayid}/{langcode} +FetchIDlist_URI = /v1/masterdata/idtypes/{langcode} +FetchLocationHierarchy_URI_withlangCode = /v1/masterdata/locations/{langcode} +FetchLocationHierarchy_URI_locationcode = /v1/masterdata/locations/{locationcode}/{langcode} +FetchLocationHierarchy_URI_hierarchyname = /v1/masterdata/locations/locationhierarchy/{hierarchyname} +FetchMachine_URI = /v1/masterdata/machines +FetchMachine_lang_URI = /v1/masterdata/machines/{langcode} +FetchMachine_id_lang_URI = /v1/masterdata/machines/{id}/{langcode} +FetchMachineHistory_URI = /v1/masterdata/machineshistories/{id}/{langcode}/{effdatetimes} +FetchRegCent_URI = /v1/masterdata/registrationcenters +FetchRegCent_id_lang_URI = /v1/masterdata/registrationcenters/{id}/{langcode} +FetchRegCent_loc_lang_URI = /v1/masterdata/getlocspecificregistrationcenters/{langcode}/{locationcode} +FetchRegCent_hir_name_lang_URI = /v1/masterdata/registrationcenters/{langcode}/{hierarchylevel}/{name} +FetchRegCent_prox_lang_URI = /v1/masterdata/getcoordinatespecificregistrationcenters/{langcode}/{longitude}/{latitude}/{proximitydistance} +FetchRegCentHistory_URI = /v1/masterdata/registrationcentershistory/{registrationCenterId}/{langcode}/{effectiveDate} +FetchRegCentHolidays_URI = /v1/masterdata/getregistrationcenterholidays/{langcode}/{registrationcenterid}/{year} +FetchRegcentMachUserMaping_URI = /v1/masterdata/getregistrationmachineusermappinghistory/{effdtimes}/{registrationcenterid}/{machineid}/{userid} +FetchRejectionReason_URI = /v1/masterdata/packetrejectionreasons/{reasoncategorycode}/{langcode} +FetchTemplate_URI = /v1/masterdata/templates +FetchTemplate_lang_URI = /v1/masterdata/templates/{langcode} +FetchTemplate_id_lang_URI = /v1/masterdata/templates/{langcode}/{templatetypecode} +FetchTitle_URI = /v1/masterdata/title/{langcode} +fetchAllTemplate = /v1/masterdata/templates/templatetypecodes/{code} +getApplicantType = /v1/masterdata/getApplicantType +fetchDeviceHistory = /v1/masterdata/deviceshistories/{id}/{langcode}/{effdatetimes} +getDocType_DocCatByAppID = /v1/masterdata/applicanttype/{applicantId}/languages +getDocTypeDocCatByLangCode = /v1/masterdata/validdocuments/{languagecode} +fetchImmediateChildLocation = /v1/masterdata/locations/immediatechildren/{locationcode}/{langcode} +getIndividualType = /v1/masterdata/individualtypes +getRoles = /v1/syncdata/roles +fetchRegCenter = /v1/masterdata/registrationcenters/validate/{id}/{langCode}/{timestamp} +fetchRegistrationCenterDeviceHistory = /v1/masterdata/registrationcenterdevicehistory/{regcenterid}/{deviceid}/{effdatetimes} +getusersBasedOnRegCenter = /v1/syncdata/userdetails/{regid} +licKeyGenerator = /v1/keymanager/license/generate +mapLicenseKey = /v1/keymanager/license/permission +fetchmapLicenseKey = /v1/keymanager/license/permission +OTPGeneration = /v1/otpmanager/otp/generate +OTPValidation = /v1/otpmanager/otp/validate +otpNotifier = /v1/otpnotifier/otp/send +RIDGenerator_URI = /v1/ridgenerator/generate/rid/{centerid}/{machineid} +SmsNotification_URI = /v1/notifier/sms/send +syncConf = /v1/syncdata/configs +fetchIncrementalData = /v1/syncjob/syncjobdef +fetchmasterdata = /v1/syncdata/masterdata +fetchmasterdatawithRID = /v1/syncdata/masterdata/{regcenterId} +SyncPublicKeyToRegClient_URI = /v1/keymanager/publickey/ +uingenerator = /v1/idgenerator/uin +validateGenderByName = /v1/masterdata/gendertypes/validate/{gendername} +validateLocationByName = /v1/masterdata/locations/validate/{locationname} +tokenIdGenerator_URI = /v1/keymanager/{uin}/{partnercode} +getRIDByUserId = /v1/authmanager/rid/{appid}/{userid} +syncMdatawithKeyIndex = /v1/syncdata/clientsettings +syncMdatawithRegCentIdKeyIndex = /v1/syncdata/clientsettings/{regcenterid} +uploadpublickey = /v1/syncdata/tpm/publickey +getUserHistory = /v1/masterdata/users/{id}/{eff_dtimes} +sendOtp = /v1/authmanager/authenticate/sendotp +useridOTP = /v1/authmanager/authenticate/useridOTP +preregSendOtp = /preregistration/v1/login/sendOtp/langcode +preregValidateOtp = /preregistration/v1/login/validateOtp +zoneMappingUrl = /v1/masterdata/zoneuser +zoneNameUrl = /v1/masterdata/zones/zonename +zoneMappingActivateUrl = /v1/masterdata/zoneuser +userCenterMappingUrl = /v1/masterdata/usercentermapping +bulkUploadUrl = /v1/admin/bulkupload +currentUserURI=/#/uinservices/viewhistory +actuatorEndpoint=/resident/v1/actuator/env +actuatorAdminEndpoint=/v1/admin/actuator/env +actuatorMasterDataEndpoint=/v1/masterdata/actuator/env +actuatorIDAEndpoint=/idauthentication/v1/actuator/env +actuatorRegprocEndpoint=/registrationprocessor/v1/registrationtransaction/actuator/env +actuatorEsignetEndpoint=/v1/esignet/actuator/env +tokenEndpoint=/v1/esignet/oauth/token +auditActuatorEndpoint=/v1/auditmanager/actuator/info +validateBindingEndpoint=ida-binding +esignetWellKnownEndPoint=/v1/esignet/oidc/.well-known/openid-configuration +signupSettingsEndPoint=/v1/signup/settings + + + + +#---------------------------------- APP IDs ----------------------------------# +#-- When test rig ran in docker, these values dervied from the environment ---# +mosip_pms_app_id = partner +mosip_resident_app_id = resident +mosip_idrepo_app_id = idrepo +mosip_regclient_app_id = registrationclient +mosip_hotlist_app_id = hotlist +mosip_regprocclient_app_id = regproc +AuthAppID = resident +mosip_admin_app_id = admin + + + +#---------------------------------- Client IDs -------------------------------# +#-- When test rig ran in docker, these values dervied from the environment ---# +mosip_pms_client_id = mosip-pms-client +mosip_partner_client_id = mosip-partner-client +mosip_resident_client_id = mosip-resident-client +mosip_idrepo_client_id = mosip-idrepo-client +mosip_reg_client_id = mosip-reg-client +mosip_admin_client_id = mosip-admin-client +mosip_hotlist_client_id = mosip-hotlist-client +mosip_regproc_client_id = mosip-regproc-client +mpartner_default_mobile_client_id = mpartner-default-mobile +mosip_testrig_client_id = mosip-testrig-client +AuthClientID = mosip-resident-client + + + +#---------------------------------- Client Secret Keys -----------------------# +#-- When test rig ran in docker, these values dervied from the environment ---# +mosip_partner_client_secret = vXS7WUyPDpfWYuoz +mosip_pms_client_secret = 5Qj8vn989OL1Vlu6 +mosip_resident_client_secret = SnZQ6nnVwN9YWvdM +mosip_idrepo_client_secret = AeM2TwFuuZygCuvO +mosip_reg_client_secret = DLXygc82rkAkjrwV +mosip_admin_client_secret = Styop9nqkshXMTgj +mosip_hotlist_client_secret = TKyc4cqWymxjiLEsVydX4uME1xU3i9xl +mosip_regproc_client_secret = eyeXdyhO0u2ETibw +mpartner_default_mobile_secret = iCkj8BRZU6hP6MAN +mosip_testrig_client_secret = AonuXbikoWmHP5ug +AuthClientSecret = SnZQ6nnVwN9YWvdM + + + +#----------------------------- minio proprties ------------------------------# +s3-user-key = minioadmin +s3-user-secret = minioadmin +s3-host = http://minio.minio:9000 +s3-account = automation +s3-region = null +reportExpirationInDays = 3 +s3-account-for-persona-data = personaData +push-reports-to-s3 = no + + +#-------------------- Keycloak User Creation proprties ----------------------# +#-- When test rig ran in docker,few of below dervied from the environment ---# +new_Resident_User = 111995 +new_Resident_Password = mosip123 +new_Resident_Role = default-roles-mosip,PARTNER_ADMIN +roles.111995 = PARTNER_ADMIN,default-roles-mosip +keycloak_UserName = admin +keycloak_Password = sMDr9Ainw9 +keycloak-external-url = https://iam.qa-inji.mosip.net +keycloak-realm-id = mosip +iam-users-to-create = 111997,111998,220005,111992,globaladmin,111887 +iam-users-password = mosip123,mosip123,mosip123,mosip123,mosip123 +roles.220005 = GLOBAL_ADMIN,ID_AUTHENTICATION,REGISTRATION_ADMIN,REGISTRATION_SUPERVISOR,ZONAL_ADMIN +roles.111997 = AUTH_PARTNER,PARTNER_ADMIN,PMS_ADMIN,POLICYMANAGER,REGISTRATION_SUPERVISOR +roles.111887 = AUTH_PARTNER,PARTNER_ADMIN,PMS_ADMIN,REGISTRATION_SUPERVISOR +roles.111998 = POLICYMANAGER +roles.111992 = GLOBAL_ADMIN +roles.globaladmin = GLOBAL_ADMIN,REGISTRATION_ADMIN,uma_authorization,ZONAL_ADMIN,default-roles-mosip + + +#------------------------- DB Connectivity proprties ------------------------# +#-- When test rig ran in docker,few of below dervied from the environment ---# +driver_class=org.postgresql.Driver +pool_size=1 +dialect=org.hibernate.dialect.PostgreSQLDialect +show_sql=true +current_session_context_class=thread +audit_url=jdbc:postgresql://qa-inji.mosip.net:5432/mosip_audit +audit_username=postgres +audit_password=2BhgiSpCaT +audit_default_schema=audit +DB_PORT= +installation-domain= +partner_url=jdbc:postgresql://qa-inji.mosip.net:5432/mosip_ida +partner_username=postgres +partner_password=2BhgiSpCaT +partner_default_schema=partner +reportLogPath=automationLogAndReport +postgresqlUser=postgresql +db-port=5432 +db-server=qa-inji.mosip.net +hibernate.connection.driver_class=org.postgresql.Driver +hibernate.connection.pool_size=1 +hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect +hibernate.show_sql=true +hibernate.current_session_context_class=thread +db-su-user=postgres +postgres-password=2BhgiSpCaT +pms_db_schema=pms +km_db_schema=keymgr +master_db_schema=master +audit_db_schema=audit +ida_db_schema=ida + + +#------------------------- DSL specific proprties ------------------------# +#------------------------- We need to see how to have DSL specific proprties file ------------------------# +packetUtilityBaseUrl=http://localhost:8080 +mountPathForScenario=D:/centralized/mountvolume +mountPath=/home/mosip/mountvolume +# Add scenarios to skip from automation and server side +# supported values "S-scnearioNumber" for server side and "A-scnearioNumber" for automation +scenariosToSkip= +# Add scenarios to include in the the execution list +# Empty if we want to execute all the scenarios--- +scenariosToExecute= +# supported values yes or no +useExternalScenarioSheet=yes +# supported values are 1 to 8 +threadCount=1 + +#------------------------ Generic properties ------------------------# +enableDebug=yes +preconfiguredOtp=111111 +usePreConfiguredOtp=true +# supported values yes or no. Assume that by Default e-signet is deployed +eSignetDeployed=yes +partnerUrlSuffix=oYf63Lax0DY2QkYMRHnrmDqhmO3RMWQagwm0ftgLlkuin1KOND/666/576732 +reportIgnoredTestCases=yes +servicesNotDeployed= +esignetMockBaseURL=esignet-insurance. +slack-webhook-url= +serverErrorsToMonitor=IDA-MLC-018 +pmsAuthInternal=true +partner_password=mosip123 +partner_userName=111997 +partner_user_password=mosip123 +policytest_password=mosip123 +policytest_userName=111998 +policytest_without_pmrole_userName=111887 +admin_password=mosip123 +admin_userName=220005 +admin_zone_password=mosip123 +admin_zone_userName=globaladmin + + + +#------------------------- Need to check if these are used or not ------------------------# +OTPTimeOut = 181 +attempt = 10 +ConfigParameters=mosip.kernel.rid.length,mosip.kernel.uin.length,mosip.kernel.sms.country.code,mosip.kernel.sms.number.length,mosip.kernel.otp.default-length,mosip.kernel.otp.expiry-time,mosip.kernel.otp.key-freeze-time,mosip.kernel.otp.validation-attempt-threshold,mosip.kernel.otp.min-key-length,mosip.kernel.otp.max-key-length,mosip.kernel.licensekey.length,mosip.supported-languages +# supported values are 0 ,1, 2 based on number of env languages +langselect=0 + + + +#----------------------------------AuthDemoService Host properties----------------------------------------------------------# +#Uncommemnt the below to run locally +authDemoServiceBaseURL=http://localhost +authDemoServicePort=8082 +authCertsPath= +#Uncommemnt the below to run in Docker +#authDemoServiceBaseURL=http://authdemo.apitestrig +#authDemoServicePort=80 +#authCertsPath=/home/mosip/authcerts \ No newline at end of file diff --git a/apitest/src/main/resources/config/UmcValidationApis.properties b/apitest/src/main/resources/config/UmcValidationApis.properties new file mode 100644 index 000000000..2f8c62c6c --- /dev/null +++ b/apitest/src/main/resources/config/UmcValidationApis.properties @@ -0,0 +1,6 @@ +registrationCentreHistory=/v1/masterdata/registrationcentershistory/ +machineHistory=/v1/masterdata/machineshistories/ +userMachineMapping=/v1/masterdata/getregistrationmachineusermappinghistory/ +valdiateWorkinHour=/v1/masterdata/registrationcenters/validate/ +deviceHistory=/v1/masterdata/deviceshistories/ +centerDeviceHistory=/v1/masterdata/registrationcenterdevicehistory/ \ No newline at end of file diff --git a/apitest/src/main/resources/config/adminQueries.properties b/apitest/src/main/resources/config/adminQueries.properties new file mode 100644 index 000000000..748b6ad0a --- /dev/null +++ b/apitest/src/main/resources/config/adminQueries.properties @@ -0,0 +1,908 @@ +#create RegCenter with ID as teId1, regCenter should be under authUser(cookie) zone, in this these things may +#change: cntrTyp_code, location_code, holiday_loc_code, zone_code, lang_code. update them accordingly. +createRegCenter=INSERT INTO master.registration_center( \ + id, name, cntrtyp_code, addr_line1, addr_line2, addr_line3, latitude, \ + longitude, location_code, contact_phone, contact_person, number_of_kiosks, \ + working_hours, per_kiosk_process_time, center_start_time, center_end_time, \ + lunch_start_time, lunch_end_time, time_zone, holiday_loc_code, \ + zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, \ + is_deleted, del_dtimes) \ + VALUES ('Tcntr', 'Test Center', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ + '-6.453275', '14022', '944945765', 'John Doe', '3', \ + '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ + '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ + 'STT', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ + null, null); + +#create regcent by replacing the id and zone in upper query wit this regCentID(using this center to map device, machine, user) +regCentId1=Tcnt1 +regCentId2=Tcnt2 +zoneCode=BRK + +#delete created RegCenter with above IDs, here role will be replaced by username of AuthUser. +deleteRegCenter=delete from master.registration_center where id = 'Tcntr' and is_active = false and is_deleted = true and upd_by = 'role' +deleteRegCenter1=delete from master.registration_center where id = 'Tcnt1' or id = 'Tcnt2' +deleteCntrCrtdByApi= delete from master.registration_center where name = 'Test Center' +deleteWorkNonWorkDays=delete from master.reg_working_nonworking where regcntr_id IN (select id from master.registration_center where name = 'Test Center') +deleteExcptnlHolidy=delete from master.reg_exceptional_holiday where regcntr_id IN (select id from master.registration_center where name = 'Test Center') +deleteWorkNonWorkDaysUpdate=delete from master.reg_working_nonworking where regcntr_id IN ('Tcnt1','Tcntr') +deleteExcptnlHolidyUpdate=delete from master.reg_exceptional_holiday where regcntr_id IN ('Tcnt1','Tcntr') + +#map regCenter to device, device and regCenter should be under authUser(cookie) zone. here device_id and lang_code can change, +# update them accordingly +mapRegCentDevice=INSERT INTO master.reg_center_device( \ + regcntr_id, device_id, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ + VALUES ('Tcnt1', '3000025', 'eng', true, 'superadmin', '2019-09-04 12:28:11.553519', null, null, null, null); + +deleteMappedRegCentDevice=delete from master.reg_center_device where regcntr_id = 'Tcnt1' + +#map regCenter to machine, machine and regCenter should be under authUser(cookie) zone. here machine_id and lang_code can change, +# update them accordingly +mapRegCentMach=INSERT INTO master.reg_center_machine( \ + regcntr_id, machine_id, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ + VALUES ('Tcnt1', '10005', 'eng', true, 'superadmin', '2019-09-04 12:28:11.553519', null, null, null, null); + +deleteMappedRegCentMach=delete from master.reg_center_machine where regcntr_id = 'Tcnt1' + +#map regCenter to user, user and regCenter should be under authUser(cookie) zone. here user_id and lang_code can change, +# update them accordingly +mapRegCentUser=INSERT INTO master.reg_center_user( \ + regcntr_id, usr_id, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ + VALUES ('Tcnt1', '110033', 'eng', true, 'superadmin', '2019-09-04 12:28:11.553519', null, null, null, null); + +deleteMappedRegCentUser=delete from master.reg_center_user where regcntr_id = 'Tcnt1' + +#create Device with ID as Tdevice, Device should be under authUser(cookie) zone, in this these things may +#change: dspecId, zone_code, lang_code. update them accordingly. +createDevice=INSERT INTO master.device_master( \ + id, name, mac_address, serial_num, ip_address, validity_end_dtimes, dspec_id, zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ + VALUES ('Tdevice', 'TestDevice', '85-BB-97-4B-14-05', 'SZ5912878988', null, null, '165', 'CST', 'eng', true, 'superadmin', '2019-07-26 12:18:40.718295', null, null, null, null); + +#create device by replacing the id and zone in upper query with this deviceID(using this device to map regCenter) +deviceId1=Tdevice1 +deviceId2=Tdevice2 + +#delete created Device with above IDs, here role will be replaced by username of AuthUser. +deleteDevice=delete from master.device_master where id = 'Tdevice' and is_active = false and is_deleted = true and upd_by = 'role' +deleteDevice1=delete from master.device_master where id = 'Tdevice1' or id = 'Tdevice2' + +#create Machine with ID as Tmach, Machine should be under authUser(cookie) zone, in this these things may +#change: mspecId, zone_code, lang_code. update them accordingly. +createMachine=INSERT INTO master.machine_master( \ + id, name, mac_address, serial_num, ip_address, validity_end_dtimes, mspec_id, public_key, key_index, zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ + VALUES ('Tmach', 'TestMachine', '8C-16-45-5A-5D-0D', 'NM5328114630', '192.168.0.150', null, '1001', 'Pkey', 'KeyI', 'CST', 'eng', true, '110005', '2019-07-26 12:18:40.718295', null, null, null, null), \ + ('Tmac1', 'TestMachine', '8C-16-45-5A-5D-0D', 'NM5328114630', '192.168.0.150', null, '1001', 'Pkey', 'KeyI', 'CST', 'eng', true, '110005', '2019-07-26 12:18:40.718295', null, null, null, null), \ + ('Tmac2', 'TestMachine', '8C-16-45-5A-5D-0D', 'NM5328114630', '192.168.0.150', null, '1001', 'Pkey', 'KeyI', 'BRK', 'eng', true, '110005', '2019-07-26 12:18:40.718295', null, null, null, null); + +machineId1=Tmac1 + +#delete created Machine with above IDs, here role will be replaced by username of AuthUser. +deleteMachine=delete from master.machine_master where id = 'Tmach' and is_active = false and is_deleted = true and upd_by = 'role' +deleteMachine1=delete from master.machine_master where id = 'Tmac1' or id = 'Tmac2' + +#create location data +createLocation=INSERT INTO master.location( \ + code, name, hierarchy_level, hierarchy_level_name, parent_loc_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ + VALUES ('TestLoc_code_1','Test_Loc_B_1' , 3, 'City', 'KNT', 'eng', false, '110005', '2019-07-26 12:18:38.523228', null, null, null, null), \ + ('TestLoc_code_2','Test_Loc_B_2' , 2, 'Province', 'TestLoc_code_1', 'eng', true, '110005', '2019-07-26 12:18:38.523228', null, null, null, null), \ + ('TestLoc_code_2','Test_Loc_B_2' , 2, '\u0627\u0644\u0645\u062D\u0627\u0641\u0638\u0629', 'TestLoc_code_1', 'ara', true, '110005', '2019-07-26 12:18:38.523228', null, null, null, null), \ + ('TestLoc_code_3','Test_Loc_B_3' , 2, 'Province', 'TestLoc_code_1', 'eng', false, '110005', '2019-07-26 12:18:38.523228', null, null, null, null); + #delete created locations +deleteCreatedLocations=delete from master.location where cr_by = '110005' + +InsertRegDevice=insert into master.registered_device_master (code,dtype_code,dstype_code,status_code,device_id,device_sub_id,digital_id,serial_number,provider_name,provider_id,purpose,firmware,make,model,expiry_date,certification_level,is_active,cr_by,cr_dtimes) \ +values ('inActive-D1','Face' , 'Full face', 'Registered', 'TestDev1', '[0,1]', '{ \ + "serialNo" "Serial number1", \ + "make" "Microsoft", \ + "model\u201D : "ca3e7ab9-b4c3-4ae6-8251-579ef933890f", \ + "type" "Face" \ + "dp" "SYNCBYTE", \ + "dpId" "SYNCBYTE.TCI322", \ + "dateTime" "2025-01-01T00:00:00.000+05:30" \ +}', 'Serial number1', 'SYNCBYTE', 'SYNCBYTE.TCI322', 'Registration', 'TCI322L1.0', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', '2025-01-01T00:00:00.000+05:30 \ +', 'L0',False,'superadmin','now()'),('Revoked-D1','Face' , 'Full face', 'Revoked', 'TestDev1', '[0,1]', '{ \ + "serialNo" "Serial number2", \ + "make" "Microsoft", \ + "model\u201D : "ca3e7ab9-b4c3-4ae6-8251-579ef933890f", \ + "type" "Face" \ + "dp" "SYNCBYTE", \ + "dpId" "SYNCBYTE.TCI322", \ + "dateTime" "2025-01-01T00:00:00.000+05:30" \ +}', 'Serial number2', 'SYNCBYTE', 'SYNCBYTE.TCI322', 'Registration', 'TCI322L1.0', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', '2025-01-01T00:00:00.000+05:30 \ +', 'L0','TRUE','superadmin','now()'),('Retired-D1','Face' , 'Full face', 'Retired', 'TestDev1', '[0,1]', '{ \ + "serialNo" "Serial number3", \ + "make" "Microsoft", \ + "model\u201D : "ca3e7ab9-b4c3-4ae6-8251-579ef933890f", \ + "type" "Face" \ + "dp" "SYNCBYTE", \ + "dpId" "SYNCBYTE.TCI322", \ + "dateTime" "2025-01-01T00:00:00.000+05:30" \ +}', 'Serial number3', 'SYNCBYTE', 'SYNCBYTE.TCI322', 'Registration', 'TCI322L1.0', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', '2025-01-01T00:00:00.000+05:30 \ +', 'L0','TRUE','superadmin','now()'); + +InsertMDS=INSERT INTO master.mosip_device_service( \ + id, sw_binary_hash, sw_version, dprovider_id, dtype_code, dstype_code, make, model, sw_cr_dtimes, sw_expiry_dtimes, is_active, cr_by, cr_dtimes) \ + VALUES ('inActiveMDS', 'dummy data', 'inActiveMDSsVersion', 'SYNCBYTE.TCI322', 'Face' , 'Full face', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', 'now()', 'now()', False, '110005', 'now()'), \ + ('diffDtypMDS', 'dummy data', 'MDSsVersionDty', 'SYNCBYTE.TCI322', 'Finger' , 'Full face', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', 'now()', 'now()', True, '110005', 'now()'), \ + ('diffDstypMDS', 'dummy data', 'MDSsVersionDsTyp', 'SYNCBYTE.TCI322', 'Face' , 'Single', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', 'now()', 'now()', True, '110005', 'now()'), \ + ('difMakeMDS', 'dummy data', 'MDSsVersionMake', 'SYNCBYTE.TCI322', 'Face' , 'Full face', 'difMakeThanDev', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', 'now()', 'now()', True, '110005', 'now()'), \ + ('difModelMDS', 'dummy data', 'MDSsVersionModel', 'SYNCBYTE.TCI322', 'Face' , 'Full face', 'Microsoft', 'difModelThanDev', 'now()', 'now()', True, '110005', 'now()'), \ + ('diffDpId', 'dummy data', 'MDSsVersionDpid', 'SYNCBYTE.MC01A', 'Face' , 'Full face', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', 'now()', 'now()', True, '110005', 'now()'); + +DeleteRegDevice=delete from master.registered_device_master where code IN ('inActive-D1','Revoked-D1','Retired-D1','ActiveRegDev1'); +DeleteMDS=delete from master.mosip_device_service where id IN ('inActiveMDS','diffDtypMDS','diffDstypMDS','difMakeMDS','difModelMDS','diffDpId'); +DeleteRegDeviceCreatedByApi=delete from master.registered_device_master where device_id IN ('RegDeviceIdT1','RegDeviceIdT2','RegDeviceIdT3','3000025','3000045'); +validateHistory=select count(*) from master.registered_device_master_h where device_id IN ('RegDeviceIdT1','RegDeviceIdT2','RegDeviceIdT3','3000025','3000045'); +validateDeRegDevHistory=select count(*) from master.registered_device_master_h where device_id IN ('ActiveRegDev1'); + +InsertRegDeviceHistory=insert into master.registered_device_master_h (code,dtype_code,dstype_code,status_code,device_id,device_sub_id,digital_id,serial_number,provider_name,provider_id,purpose,firmware,make,model,expiry_date,certification_level,is_active,cr_by,cr_dtimes,eff_dtimes) values ('inActive-D1','Face' , 'Full face', 'Registered', 'TestDev1', '[0,1]', '{ "serialNo" "Serial number1", "make" "Microsoft", "model\u201D : "ca3e7ab9-b4c3-4ae6-8251-579ef933890f", "type" "Face" "dp" "SYNCBYTE", "dpId" "SYNCBYTE.TCI322", "dateTime" "2025-01-01T00:00:00.000+05:30" }', 'Serial number1', 'SYNCBYTE', 'SYNCBYTE.TCI322', 'Registration', 'TCI322L1.0', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', '2025-01-01T00:00:00.000+05:30 ', 'L0',False,'superadmin','now()','2019-11-22 10:11:30.854'),('Revoked-D1','Face' , 'Full face', 'Revoked', 'TestDev1', '[0,1]', '{ "serialNo" "Serial number2", "make" "Microsoft", "model\u201D : "ca3e7ab9-b4c3-4ae6-8251-579ef933890f", "type" "Face" "dp" "SYNCBYTE", "dpId" "SYNCBYTE.TCI322", "dateTime" "2025-01-01T00:00:00.000+05:30" }', 'Serial number2', 'SYNCBYTE', 'SYNCBYTE.TCI322', 'Registration', 'TCI322L1.0', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', '2025-01-01T00:00:00.000+05:30 ', 'L0','TRUE','superadmin','now()','2019-11-22 10:11:30.854'),('Retired-D1','Face' , 'Full face', 'Retired', 'TestDev1', '[0,1]', '{ "serialNo" "Serial number3", "make" "Microsoft", "model\u201D : "ca3e7ab9-b4c3-4ae6-8251-579ef933890f", "type" "Face" "dp" "SYNCBYTE", "dpId" "SYNCBYTE.TCI322", "dateTime" "2025-01-01T00:00:00.000+05:30" }', 'Serial number3', 'SYNCBYTE', 'SYNCBYTE.TCI322', 'Registration', 'TCI322L1.0', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', '2025-01-01T00:00:00.000+05:30 ', 'L0','TRUE','superadmin','now()','2019-11-22 10:11:30.854'); +InsertMDSHistory=INSERT INTO master.mosip_device_service_h( \ + id, sw_binary_hash, sw_version, dprovider_id, dtype_code, dstype_code, make, model, sw_cr_dtimes, sw_expiry_dtimes, is_active, cr_by, cr_dtimes,eff_dtimes) \ + VALUES ('inActiveMDS', 'dummy data', 'inActiveMDSsVersion', 'SYNCBYTE.TCI322', 'Face' , 'Full face', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', 'now()', 'now()', False, '110005', 'now()','2019-11-22 10:11:30.854'), \ + ('diffDtypMDS', 'dummy data', 'MDSsVersionDty', 'SYNCBYTE.TCI322', 'Finger' , 'Full face', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', 'now()', 'now()', True, '110005', 'now()','2019-11-22 10:11:30.854'), \ + ('diffDstypMDS', 'dummy data', 'MDSsVersionDsTyp', 'SYNCBYTE.TCI322', 'Face' , 'Single', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', 'now()', 'now()', True, '110005', 'now()','2019-11-22 10:11:30.854'), \ + ('difMakeMDS', 'dummy data', 'MDSsVersionMake', 'SYNCBYTE.TCI322', 'Face' , 'Full face', 'difMakeThanDev', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', 'now()', 'now()', True, '110005', 'now()','2019-11-22 10:11:30.854'), \ + ('difModelMDS', 'dummy data', 'MDSsVersionModel', 'SYNCBYTE.TCI322', 'Face' , 'Full face', 'Microsoft', 'difModelThanDev', 'now()', 'now()', True, '110005', 'now()','2019-11-22 10:11:30.854'), \ + ('diffDpId', 'dummy data', 'MDSsVersionDpid', 'SYNCBYTE.MC01A', 'Face' , 'Full face', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', 'now()', 'now()', True, '110005', 'now()','2019-11-22 10:11:30.854'); + +InsertSingleRegDeviceValues=('ActiveRegDev1','Face' , 'Full face', 'Registered', 'TestDev1', '[0,1]', '{ \ + "serialNo" "Serial number1", \ + "make" "Microsoft", \ + "model\u201D : "ca3e7ab9-b4c3-4ae6-8251-579ef933890f", \ + "type" "Face" \ + "dp" "SYNCBYTE", \ + "dpId" "SYNCBYTE.TCI322", \ + "dateTime" "2025-01-01T00:00:00.000+05:30" \ +}', 'Serial number4', 'SYNCBYTE', 'SYNCBYTE.TCI322', 'Registration', 'TCI322L1.0', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', '2025-01-01T00:00:00.000+05:30 \ +', 'L0',True,'superadmin','now()'); + +createDevProviderUpdate=INSERT INTO master.device_provider( \ + id, vendor_name, address, email, contact_number, certificate_alias, is_active, cr_by, cr_dtimes) \ + VALUES ('TestDPro1', 'TestVend1', 'testDevPro1', 'testDevProMail', '1234567890','testCerti', true, 110005, '2025-01-01T00:00:00.000+05:30'), ('TestDPro2', 'TestVend2', 'testDevPro2', 'testDevProMail2', '1234567890','testCerti', false, 110005, '2025-01-01T00:00:00.000+05:30'); +deleteDevProCreatedByAPI=delete from master.device_provider where cr_by IN ('110005'); +validateDevProHistory=select count(*) from master.device_provider_h where cr_by IN ('110005'); + +deleteFTPCreatedByAPI=delete from master.foundational_trust_provider where name IN ('TestFTP') +createFTPtoUpdate=INSERT INTO master.foundational_trust_provider( \ + id, name, address, email, contact_number, certificate_alias, is_active, cr_by, cr_dtimes) \ + VALUES ('TestFTP2', 'TestFTP1', 'Test Address', 'testEmail@test.com', '1234567890', 'testAlias', true, '110005', '2019-11-25 11:22:19.799'),('TestFTP1', 'TestFTP2', 'Test Address', 'testEmail@test.com', '1234567890', 'testAlias', true, '110005', '2019-11-25 11:22:19.799'); +deleteFTP=delete from master.foundational_trust_provider where id IN ('TestFTP1','TestFTP2'); +validateFTPHistory=select count(*) from master.foundational_trust_provider_h where name IN ('TestFTP'); + +#create RegCenter with ID as TestUnmap, regCenter should be under authUser(cookie) zone, in this these things may +#change: cntrTyp_code, location_code, holiday_loc_code, zone_code, lang_code. update them accordingly. +createRegCenterForUnmap1=INSERT INTO master.registration_center( \ + id, name, cntrtyp_code, addr_line1, addr_line2, addr_line3, latitude, \ + longitude, location_code, contact_phone, contact_person, number_of_kiosks, \ + working_hours, per_kiosk_process_time, center_start_time, center_end_time, \ + lunch_start_time, lunch_end_time, time_zone, holiday_loc_code, \ + zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, \ + is_deleted, del_dtimes) \ + VALUES ('TestUnmap', 'Test Center', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ + '-6.453275', '10106', '944945765', 'John Doe', '3', \ + '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ + '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ + 'CSB', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ + null, null), \ + ('TestUnmap1', 'Test Center', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ + '-6.453275', '10106', '944945765', 'John Doe', '3', \ + '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ + '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ + 'CSB', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ + null, null), \ + ('TestUnmap2', 'Test Center', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ + '-6.453275', '10106', '944945765', 'John Doe', '3', \ + '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ + '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ + 'NDR', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ + null, null); + +deleteRegCntrForUnmap= delete from master.registration_center where id in ('TestUnmap', 'TestUnmap1', 'TestUnmap2') + + +#create Device with ID as TestDeviceToMapNew, Device should be under authUser(cookie) zone, in this these things may +#change: dspecId, zone_code, lang_code. update them accordingly. +createDeviceForUnmap1=INSERT INTO master.device_master( \ + id, name, mac_address, serial_num, ip_address, validity_end_dtimes, dspec_id, zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ + VALUES ('TestDeviceToMapNew', 'TestDevice', '85-BB-97-4B-14-05', 'SZ5912878988', null, null, '165', 'CST', 'eng', true, 'superadmin', '2019-07-26 12:18:40.718295', null, null, null, null), \ + ('TestDeviceToMapNew1', 'TestDevice', '85-BB-97-4B-14-05', 'SZ5912878988', null, null, '165', 'CST', 'eng', true, 'superadmin', '2019-07-26 12:18:40.718295', null, null, null, null), \ + ('TestDeviceToMapNew2', 'TestDevice', '85-BB-97-4B-14-05', 'SZ5912878988', null, null, '165', 'NDR', 'eng', true, 'superadmin', '2019-07-26 12:18:40.718295', null, null, null, null); + +deleteUnmapDeviceByApi=delete from master.device_master where id in ('TestDeviceToMapNew','TestDeviceToMapNew1','TestDeviceToMapNew2') + + +#map regCenter to device, device and regCenter should be under authUser(cookie) zone. here device_id and lang_code can change, +# update them accordingly +mapRegCentDevice1=INSERT INTO master.reg_center_device( \ + regcntr_id, device_id, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ + VALUES ('TestUnmap', 'TestDeviceToMapNew', 'eng', true, 'superadmin', '2019-09-04 12:28:11.553519', null, null, null, null), \ + ('TestUnmap1', 'TestDeviceToMapNew2', 'eng', true, 'superadmin', '2019-09-04 12:28:11.553519', null, null, null, null), \ + ('TestUnmap2', 'TestDeviceToMapNew1', 'eng', true, 'superadmin', '2019-09-04 12:28:11.553519', null, null, null, null); + +deleteMappedRegCentDevice1=delete from master.reg_center_device where regcntr_id in ('TestUnmap','TestUnmap1','TestUnmap2') + + +#create RegCenter with ID as MapZone1, regCenter should be under authUser(cookie) zone, in this these things may +#change: cntrTyp_code, location_code, holiday_loc_code, zone_code, lang_code. update them accordingly. +createRegCenterForMapMCReg=INSERT INTO master.registration_center( \ + id, name, cntrtyp_code, addr_line1, addr_line2, addr_line3, latitude, \ + longitude, location_code, contact_phone, contact_person, number_of_kiosks, \ + working_hours, per_kiosk_process_time, center_start_time, center_end_time, \ + lunch_start_time, lunch_end_time, time_zone, holiday_loc_code, \ + zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, \ + is_deleted, del_dtimes) \ + VALUES ('MapZone1', 'Test Center', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ + '-6.453275', '10106', '944945765', 'John Doe', '0', \ + '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ + '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ + 'CSB', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ + null, null), \ + ('MapDevReg', 'Test Center', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ + '-6.453275', '10106', '944945765', 'John Doe', '0', \ + '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ + '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ + 'MRS', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ + null, null); + +deleteRegCntrByApiMac= delete from master.registration_center where id in ('MapZone1', 'MapDevReg'); + + +#create Machine with ID as RegCntrMa, Device should be under authUser(cookie) zone, in this these things may +#change: dspecId, zone_code, lang_code. update them accordingly. +createMachineForMapMCReg=INSERT INTO master.machine_master( \ + id, name, mac_address, serial_num, ip_address, validity_end_dtimes, mspec_id, public_key, key_index, zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ + VALUES ('RegCntrMa', 'TestDevice', '85-BB-97-4B-14-05', 'SZ5912878988', null, null, '1001','pkeyI', 'pkeyI', 'CST', 'eng', true, 'superadmin', '2019-07-26 12:18:40.718295', null, null, null, null), \ + ('OutZone', 'TestDevice', '85-BB-97-4B-14-05', 'SZ5912878988', null, null, '1001','pkeyI', 'pkeyI', 'MRS', 'eng', true, 'superadmin', '2019-07-26 12:18:40.718295', null, null, null, null); + +deleteMapMachineByApi=delete from master.machine_master where id in ('RegCntrMa','OutZone'); + + +#map regCenter to machine, machine and regCenter should be under authUser(cookie) zone. here device_id and lang_code can change, +# update them accordingly +mapRegCentMachine1=INSERT INTO master.reg_center_machine( \ + regcntr_id, machine_id, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ + VALUES ('MapZone1', 'RegCntrMa', 'eng', true, 'superadmin', '2019-09-04 12:28:11.553519', null, null, null, null); + +deleteMappedRegCentMachine1=delete from master.reg_center_machine where regcntr_id in ('MapZone1'); + +#return the number of kiosks from registration center table +validateNoOfKiosks= SELECT number_of_kiosks \ + FROM master.registration_center \ + WHERE id in ('MapZone1'); + +createRegCenterWithDifferentData=INSERT INTO master.registration_center( \ + id, name, cntrtyp_code, addr_line1, addr_line2, addr_line3, latitude, \ + longitude, location_code, contact_phone, contact_person, number_of_kiosks, \ + working_hours, per_kiosk_process_time, center_start_time, center_end_time, \ + lunch_start_time, lunch_end_time, time_zone, holiday_loc_code, \ + zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, \ + is_deleted, del_dtimes) \ + VALUES ('TRegCntr1', 'TestRegCenter', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ + '-6.453275', '10106', '944945765', 'John Doe', '3', \ + '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ + '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ + 'CST', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ + null, null),\ + ('TRegCntr2', 'TestRegCenter2', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ + '-6.453275', '10106', '944945765', 'John Doe', '3', \ + '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ + '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ + 'RBT', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ + null, null),\ + ('TRegCntr3', 'TestRegCenter3', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ + '-6.453275', '10106', '944945765', 'John Doe', '3', \ + '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ + '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ + 'CST', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ + null, null),\ + ('TRegCntr4', 'TestRegCenter3', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ + '-6.453275', '10106', '944945765', 'John Doe', '3', \ + '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ + '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ + 'RBT', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ + 'true', null),\ + ('TRegCntr5', 'TestRegCenter3', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ + '-6.453275', '10106', '944945765', 'John Doe', '3', \ + '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ + '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ + 'BSN', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ + null, null),\ + ('TRegCntr6', 'TestRegCenter6', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ + '-6.453275', '10106', '944945765', 'John Doe', '3', \ + '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ + '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ + 'RBT', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ + 'true', null),\ + ('TRegCntr7', 'TestRegCenter6', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ + '-6.453275', '10106', '944945765', 'John Doe', '3', \ + '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ + '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ + 'CST', 'eng', 'false', '110005', '2019-08-27 12:28:11.553519', null, null, \ + 'true', null); + + +deleteRegCntrByApi= delete from master.registration_center where id in ('TRegCntr1', 'TRegCntr2', 'TRegCntr3','TRegCntr4','TRegCntr5','TRegCntr6','TRegCntr7') + + +createDeviceWithDifferentData=INSERT INTO master.device_master( \ + id, name, mac_address, serial_num, ip_address, validity_end_dtimes, dspec_id, zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('TestDevice1', 'che iris 1', 'D4-3D-7E-C0-8C-4A','ceec5f62-77b7-46f3-816b-3e734305a9c8', '172.23.174.113', \ + '2020-08-07 09:13:22.221', '327', 'CST', 'eng', 'false', '110006', '2019-11-25 11:22:19.799', null, null, null, null),\ + ('TestDevice2', 'che iris 2', 'D4-3D-7E-C0-8C-4A','ceec5f62-77b7-46f3-816b-3e734305a9c8', '172.23.174.113', \ + '2020-08-07 09:13:22.221', '327', 'CST', 'eng', 'false', '110006', '2019-11-25 11:22:19.799', null, null, null, null),\ + ('TestDevice3', 'che iris 3', 'D4-3D-7E-C0-8C-4A','ceec5f62-77b7-46f3-816b-3e734305a9c8', '172.23.174.113', \ + '2020-08-07 09:13:22.221', '327', 'NDR', 'eng', 'false', '110006', '2019-11-25 11:22:19.799', null, null, null, null),\ + ('TestDevice4', 'che iris 3', 'D4-3D-7E-C0-8C-4A','ceec5f62-77b7-46f3-816b-3e734305a9c8', '172.23.174.113', \ + '2020-08-07 09:13:22.221', '327', 'BSN', 'eng', 'false', '110006', '2019-11-25 11:22:19.799', null, null, null, null),\ + ('TestDevice5', 'che iris 3', 'D4-3D-7E-C0-8C-4A','ceec5f62-77b7-46f3-816b-3e734305a9c8', '172.23.174.113', \ + '2020-08-07 09:13:22.221', '327', 'CSB', 'eng', 'false', '110006', '2019-11-25 11:22:19.799', null, null, null, null),\ + ('TestDevice6', 'che iris 3', 'D4-3D-7E-C0-8C-4A','ceec5f62-77b7-46f3-816b-3e734305a9c8', '172.23.174.113', \ + '2020-08-07 09:13:22.221', '327', 'CST', 'eng', 'false', '110006', '2019-11-25 11:22:19.799', null, null, null, null),\ + ('TestDevice7', 'che iris 3', 'D4-3D-7E-C0-8C-4A','ceec5f62-77b7-46f3-816b-3e734305a9c8', '172.23.174.113', \ + '2020-08-07 09:13:22.221', '327', 'CST', 'eng', 'false', '110006', '2019-11-25 11:22:19.799', null, null, 'true', null); + +deleteDeviceByApi= delete from master.device_master where id in ('TestDevice1', 'TestDevice2', 'TestDevice3','TestDevice4','TestDevice5','TestDevice6','TestDevice7') + +deleteDeviceRegCenterMapping = delete from master.reg_center_device where regcntr_id in ('TRegCntr1','TRegCntr3') + +createUser=INSERT INTO master.user_detail(\ + id, uin, name, email, mobile, status_code, lang_code, last_login_dtimes, last_login_method, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('testuser', '7234451333', 'Dummy User', 'Dummy@xyz.com', '818876500', 'ACT', 'eng', null, 'PWD', 'true', 'superadmin', '2019-10-21 06:50:27.696842', null, null, null, null),\ + ('testuserdiffzone', '7234451333', 'Dummy User', 'Dummy@xyz.com', '818876500', 'ACT', 'eng', null, 'PWD', 'true', 'superadmin', '2019-10-21 06:50:27.696842', null, null, null, null),\ + ('testusernewzone', '7234451333', 'Dummy User', 'Dummy@xyz.com', '818876500', 'ACT', 'eng', null, 'PWD', 'true', 'superadmin', '2019-10-21 06:50:27.696842', null, null, null, null),\ + ('testuservalid', '7234451333', 'Dummy User', 'Dummy@xyz.com', '818876500', 'ACT', 'eng', null, 'PWD', 'true', 'superadmin', '2019-10-21 06:50:27.696842', null, null, null, null),\ + ('testusernorole', '7234451333', 'Dummy User', 'Dummy@xyz.com', '818876500', 'ACT', 'eng', null, 'PWD', 'true', 'superadmin', '2019-10-21 06:50:27.696842', null, null, null, null); + +deleteUserdetail= delete from master.user_detail where id in ('testuser', 'testuserdiffzone', 'testusernewzone','testuservalid','testusernorole') + +createZoneUserWithDifferentData=INSERT INTO master.zone_user(\ + zone_code, usr_id, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('CST', 'testuser', 'eng', 'true', 'superadmin', '2019-10-21 06:50:27.950738', null, null, null, null),\ + ('NDR', 'testuserdiffzone', 'eng', 'true', 'superadmin', '2019-10-21 06:50:27.950738', null, null, null, null),\ + ('CSB', 'testusernewzone', 'eng', 'true', 'superadmin', '2019-10-21 06:50:27.950738', null, null, null, null),\ + ('CST', 'testuservalid', 'eng', 'true', 'superadmin', '2019-10-21 06:50:27.950738', null, null, null, null),\ + ('CST', 'testusernorole', 'eng', 'true', 'Registration Admin', '2019-10-21 06:50:27.950738', null, null, null, null); + +deleteUser= delete from master.zone_user where usr_id in ('testuser', 'testuserdiffzone', 'testusernewzone','testuservalid','testusernorole') + +deleteUserRegCenterMapping=delete from master.reg_center_user where regcntr_id in ('TRegCntr1') + +mapUserRegCenter=INSERT INTO master.reg_center_user(\ + regcntr_id, usr_id, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('TRegCntr1', 'testuser', 'eng', 'true', 'superadmin', '2019-10-21 06:50:27.950738', null, null, null, null),\ + ('TRegCntr2', 'testuservalid', 'eng', 'true', 'superadmin', '2019-10-21 06:50:27.950738', null, null, null, null),\ + ('TRegCntr4', 'testuserdiffzone', 'eng', 'true', 'superadmin', '2019-10-21 06:50:27.950738', null, null, null, null),\ + ('TRegCntr3', 'testuserdiffzone', 'eng', 'true', 'superadmin', '2019-10-21 06:50:27.950738', null, null, null, null),\ + ('TRegCntr5', 'testusernewzone', 'eng', 'true', 'superadmin', '2019-10-21 06:50:27.950738', null, null, null, null),\ + ('TRegCntr6', 'testusernorole', 'eng', 'true', 'superadmin', '2019-10-21 06:50:27.950738', null, null, null, null); + +deleteMapUserRegCenter=delete from master.reg_center_user where regcntr_id in ('TRegCntr1','TRegCntr2','TRegCntr3','TRegCntr4','TRegCntr5','TRegCntr6'); + +deleteMDSCreatedByAPI=delete from master.mosip_device_service where cr_by in ('110005'); + +validateMDSHistory=select count(*) from master.mosip_device_service_h where sw_version IN ('TestMDS1','TestMDS2'); + +InsertMDSToUpdate=INSERT INTO master.mosip_device_service( \ + id, sw_binary_hash, sw_version, dprovider_id, dtype_code, dstype_code, make, model, sw_cr_dtimes, sw_expiry_dtimes, is_active, cr_by, cr_dtimes) \ + VALUES ('UpdateTestMDS', 'dummy data', 'TestMDS1', 'SYNCBYTE.TCI322', 'Face' , 'Full face', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', 'now()', 'now()', true, '110005', 'now()') + + +createMachine2Eng=INSERT INTO master.machine_master( \ + id, name, mac_address, serial_num, ip_address, validity_end_dtimes, mspec_id, public_key, key_index, zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ + VALUES ('Test', 'Dummy MachineTest', '8C-16-45-5A-5D-0D', 'NM5328114630', '192.168.0.150', null, '1001', 'pkeyI', 'pkeyI', 'CST', 'eng', true, '110005', '2019-07-26 12:18:40.718295', null, null, null, null),\ + ('TestF', 'Dummy MachineTest', '8C-16-45-5A-5D-0D', 'NM5328114630', '192.168.0.150', null, '1001', 'pkeyI', 'pkeyI', 'CST', 'eng', false, '110005', '2019-07-26 12:18:40.718295', null, null, null, null); + +deleteMachine2Eng=delete from master.machine_master where cr_by in ('110005'); + +createMachine2EngUpdate=INSERT INTO master.machine_master( \ + id, name, mac_address, serial_num, ip_address, validity_end_dtimes, mspec_id, public_key, key_index, zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ + VALUES ('TestSpecNe', 'Test123', '8C-16-45-5A-5D-0D', 'NM5328114630', '192.168.0.150', null, '1001', 'pkeyI', 'pkeyI', 'CST', 'eng', true, '110005', '2019-07-26 12:18:40.718295', null, null, null, null),\ + ('Test', 'Dummy Machine', '8C-16-45-5A-5D-0D', 'NM5328114630', '192.168.0.150', null, '1001', 'pkeyI', 'pkeyI', 'CST', 'eng', true, '110005', '2019-07-26 12:18:40.718295', null, null, null, null),\ + ('Test', 'Dummy Machine', '8C-16-45-5A-5D-0D', 'NM5328114630', '192.168.0.150', null, '1001', 'pkeyI', 'pkeyI', 'CST', 'ara', true, '110005', '2019-07-26 12:18:40.718295', null, null, null, null); + +deleteMachine2EngUpdate=delete from master.machine_master where cr_by in ('110005'); + +createDocumentType=INSERT INTO master.doc_type( \ + code, name, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ + VALUES ('Act','Activate flag test','Test flag activation','eng','false','superadmin','2019-07-26 12:18:40.718295',null,null,null,null),\ + ('Test','Contrat de location','Contrat de location dadresse','eng','true','superadmin','2019-07-26 12:18:40.718295',null,null,null,null),\ + ('DeAct','Deactivate flag test','Test flag deactivation','eng','true','superadmin','2019-07-26 12:18:40.718295',null,null,null,null); +updateDocumentType=,('Test','Contrat de location','Contrat de location dadresse','ara','false','superadmin','2019-07-26 12:18:40.718295',null,null,null,null); + +deleteDocumentType=delete from master.doc_type where code in ('TestDoc01','TestDoc2','Act','DeAct','Test') or cr_by ='110005'; + +createDeviceForUpdate=INSERT INTO master.device_master( \ + id, name, mac_address, serial_num, ip_address, validity_end_dtimes, dspec_id, zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('TestDevicePro12', 'test dev2', 'D4-3D-7E-C0-8C-4A','ceec5f62-77b7-46f3-816b-3e734305a9c8', '172.23.174.113', \ + '2020-08-07 09:13:22.221', '327', 'CST', 'eng', 'true', '110006', '2019-11-25 11:22:19.799', null, null, null, null), \ + ('TestDevicePro12', 'test dev2', 'D4-3D-7E-C0-8C-4A','ceec5f62-77b7-46f3-816b-3e734305a9c8', '172.23.174.113', \ + '2020-08-07 09:13:22.221', '327', 'CST', 'ara', 'true', '110006', '2019-11-25 11:22:19.799', null, null, null, null), \ + ('TestDevicePro13', 'test dev2', 'D4-3D-7E-C0-8C-4A','ceec5f62-77b7-46f3-816b-3e734305a9c8', '172.23.174.113', \ + '2020-08-07 09:13:22.221', '327', 'CST', 'eng', 'true', '110006', '2019-11-25 11:22:19.799', null, null, null, null); + +deleteDeviceForUpdate=delete from master.device_master where id in ('TestDevicePro12','TestDevicePro13'); + +createDevice2Eng=INSERT INTO master.device_master( \ + id, name, mac_address, serial_num, ip_address, validity_end_dtimes, dspec_id, zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('id1', 'testdeviceswat1', 'D4-3D-7E-C0-8C-4A', 'ceec5f62-77b7-46f3-816b-3e734305a9c8', '172.23.174.113', '2018-12-10T06:12:52.994Z', '327', \ + 'CST', 'eng', 'false', '110005', '2019-11-25 11:22:19.799', null, null, null, null),\ + ('id2', 'testdeviceswat2', 'D4-3D-7E-C0-8C-4A', 'ceec5f62-77b7-46f3-816b-3e734305a9c8', '172.23.174.113', '2018-12-10T06:12:52.994Z', '327', \ + 'CST', 'eng', 'true', '110005', '2019-11-25 11:22:19.799', null, null, null, null); + + +deleteDevice2Eng=delete from master.device_master where name in ('testdeviceswat1','testdeviceswat2','testDevicedummy','testDevicedummy1', 'testDeviceDummy2'); + +validateDeviceHistory=select count(*) from master.device_master_h where name IN ('testdeviceswat1','testdeviceswat2','testDevicedummy','testDevicedummy1'); +deleteDeviceHistory=delete from master.device_master_h where name in ('testdeviceswat1','testdeviceswat2','testDevicedummy','testDevicedummy1'); + +validateMachineHistory=select count(*) from master.machine_master_h where name IN ('Dummy MachineTest'); + +createRegCenterWorkingNonWorkingDays = INSERT INTO master.registration_center( \ + id, name, cntrtyp_code, addr_line1, addr_line2, addr_line3, latitude, \ + longitude, location_code, contact_phone, contact_person, number_of_kiosks, \ + working_hours, per_kiosk_process_time, center_start_time, center_end_time, \ + lunch_start_time, lunch_end_time, time_zone, holiday_loc_code, \ + zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, \ + is_deleted, del_dtimes) \ + VALUES ('59395', 'TestRegCenter', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ + '-6.453275', '10106', '944945765', 'John Doe', '3', \ + '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ + '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ + 'CST', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ + null, null),\ + ('59396', 'TestRegCenter', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ + '-6.453275', '10106', '944945765', 'John Doe', '3', \ + '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ + '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ + 'CST', 'ara', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ + null, null),\ + ('59397', 'TestRegCenter', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ + '-6.453275', '10106', '944945765', 'John Doe', '3', \ + '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ + '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ + 'CST', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ + 'false', null); + +deleteRegCenterWorkNonWork = delete from master.registration_center where id in ('59395', '59396','59397') + +mapworkingDaysToRegCenter = INSERT INTO master.reg_working_nonworking(\ + regcntr_id, day_code, lang_code, is_working, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, \ + is_deleted, del_dtimes)\ + VALUES ('59395', '101', 'eng', 'false', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null),\ + ('59395', '102', 'eng', 'true', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null),\ + ('59395', '103', 'eng', 'true', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null),\ + ('59395', '104', 'eng', 'true', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null),\ + ('59395', '105', 'eng', 'true', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null),\ + ('59395', '106', 'eng', 'true', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null),\ + ('59395', '107', 'eng', 'false', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null),\ + ('59396', '101', 'ara', 'true', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null),\ + ('59396', '102', 'ara', 'true', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null),\ + ('59396', '103', 'ara', 'true', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null),\ + ('59396', '104', 'ara', 'true', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null),\ + ('59396', '105', 'ara', 'true', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null),\ + ('59396', '106', 'ara', 'false', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null),\ + ('59396', '107', 'ara', 'false', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null); + +deleteRegCenterWorkingdaysMapping = delete from master.reg_working_nonworking where regcntr_id in ('59395', '59396') + +regCntrExceptionalHolidaysMapping = INSERT INTO master.reg_exceptional_holiday(\ + regcntr_id, hol_date, hol_name, hol_reason, lang_code, is_active, cr_by, \ + cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('59395', '2020-01-04', 'Emergency Holiday', 'Emergency Holiday', 'eng', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null, null, null, null),\ + ('59395', '2019-11-26', 'Emergency Holiday', 'Emergency Holiday', 'eng', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null, null, null, null),\ + ('59395', '2019-03-10', 'Emergency Holiday', 'Emergency Holiday', 'eng', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null, null, null, null),\ + ('59395', '2019-09-24', 'Emergency Holiday', 'Emergency Holiday', 'eng', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null, null, null, null),\ + ('59396', '2019-02-28', 'Emergency Holiday', 'Emergency Holiday', 'ara', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null, null, null, null),\ + ('59396', '2019-07-11', 'Emergency Holiday', 'Emergency Holiday', 'ara', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null, null, null, null); + +deleteRegCntrExceptionalHolidaysMapping=delete from master.reg_exceptional_holiday where regcntr_id in ('59395','59396') + +createHoliday= INSERT INTO master.loc_holiday(\ + id, location_code, holiday_date, holiday_name, holiday_desc, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES (20010191,'KTA','2020-07-15','Labour Day','Automation labour Holiday','eng','true','110005','2020-05-07T05:30:46.227Z',null,null,null,null); + +deleteUpdateHoliday= delete from master.loc_holiday where cr_by='110005' ; + + +updateHoliday= INSERT INTO master.loc_holiday(\ + id, location_code, holiday_date, holiday_name, holiday_desc, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES (20000191,'KTA','2020-07-15','Labour Day','Automation labour Holiday','eng','true','110005','2020-05-07T05:30:46.227Z',null,null,null,null); + + +createTitle= INSERT INTO master.title(\ + code, name,descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('TEST4','TEST4','TEST4','eng','false','110005','2020-05-18T05:19:53.996Z',null,null,null,null); + +createTitleDelete= delete from master.title where cr_by='110005'; + +checkPrimDataAgainstSecData= select count(*) from master.title where lang_code='ara' and code='TEST5'; + +updateCreatedTitle= INSERT INTO master.title(\ + code, name,descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('TEST-auto','Master-auto','MASTER-auto','eng','false','110005','2020-05-26T05:19:53.996Z',null,null,null,null); + +deleteUpdatedTitle= delete from master.title where cr_by='110005'; + +createMachineType= INSERT INTO master.machine_type(\ + code, name, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('Laptop-0002','Laptop-0002 test','Laptop-0002 info','eng','false','110005','2020-05-27T05:19:53.996Z',null,null,null,null); + +deleteMachineType= delete from master.machine_type where cr_by='110005'; +checkPrimDataAgainstSecData_MachineType= select count(*) from master.machine_type where lang_code='ara' and code='Laptop-1'; + +createDeviceSpecification= INSERT INTO master.device_spec(\ + id, name, brand, model, dtyp_code, min_driver_ver, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES('744','Cam','Technoforte','2020','CMR','1.0','Test DeviceSpec','eng','false','110005','2020-05-27T05:19:53.996Z',null,null,null,null); +deleteCreatedDeviceSpecification= delete from master.device_spec where cr_by='110005'; + +updateDeviceSpecification= INSERT INTO master.device_spec(\ + id, name, brand, model, dtyp_code, min_driver_ver, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES('746','Laptop','Dell','2020','CMR','1.1','Dell DeviceSpec','eng','true','110005','2020-05-28T05:19:53.996Z',null,null,null,null),\ + ('746','Laptop','Dell','2020','CMR','1.1','Dell DeviceSpec','ara','true','110005','2020-05-28T05:19:53.996Z',null,null,null,null); +deleteUpdatedDeviceSpecification= delete from master.device_spec where cr_by='110005'; + + + +validatePrimDataAgnstSecData= select count(*) from master.device_spec where lang_code='ara' and dtyp_code='FP1' and brand='Techno'; + +updateMachineType= INSERT INTO master.machine_type(\ + code, name, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('Laptop','Laptop test','Laptop','eng','true','110005','2020-05-28T05:19:53.996Z',null,null,null,null),\ + ('Laptop','Laptop test','Laptop','ara','true','110005','2020-05-28T05:19:53.996Z',null,null,null,null); + +deleteUpdatedMachineType= delete from master.machine_type where cr_by='110005'; + +createMachineSpecification= INSERT INTO master.machine_spec(\ + id, name, brand, model, mtyp_code, min_driver_ver, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES('HP001','HP','HP','1234','DKS','3.2','HP brand','eng','true','110005','2020-05-29T05:19:53.996Z',null,null,null,null); + + deleteMachineSpecification= delete from master.machine_spec where cr_by='110005'; + + validatePrimDataForMachineSpec= select count(*) from master.machine_spec where lang_code='ara' and mtyp_code='DKS' and id='HP-06'; + + updateMachineSpecification= INSERT INTO master.machine_spec(\ + id, name, brand, model, mtyp_code, min_driver_ver, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES('HP07','HP','HP','1234','DKS','3.2','HP brand','eng','true','110005','2020-05-30T05:19:53.996Z',null,null,null,null); + + deleteUpdatedMachineSpec= delete from master.machine_spec where cr_by='110005'; + + createRegCenterType=INSERT INTO master.reg_center_type(\ + code, name, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('ALT-2', 'alternate','alternate center' ,'eng', 'true', '110005', '2020-05-30T05:19:53.996Z', null, null, null, null); + +deleteCretedRegCenterType= delete from master.reg_center_type where cr_by='110005'; + +validatePrimDataForRegCenter= select count(*) from master.reg_center_type where lang_code='ara' and code='ALT-13'; + +updateRegCenterType= INSERT INTO master.reg_center_type(\ + code, name, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('ALT-3', 'alternate','alternate center' ,'eng', 'true', '110005', '2020-05-30T05:19:53.996Z', null, null, null, null); + +deleteUpdatedRegCenterType= delete from master.reg_center_type where cr_by='110005'; + +createTemplateFileFormat=INSERT INTO master.template_file_format(\ + code, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('Xaml', 'Xaml Test', 'eng', 'true', '110005','2020-06-02T10:04:43.336Z' ,null, null, null, null); + +deleteCreatedTemplateFileFormat= delete from master.template_file_format where cr_by='110005'; + +updateTemplateFileFormat=INSERT INTO master.template_file_format(\ + code, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('PDF', 'PDF Test', 'eng', 'true', '110005','2020-06-02T10:04:43.336Z' ,null, null, null, null),\ + ('PDF-1', 'PDF-1 Test', 'eng', 'true', '110005','2020-06-02T10:04:43.336Z' ,null, null, null, null); + +deleteUpdatedTemplateFileFormat= delete from master.template_file_format where cr_by='110005'; + +createTemplate= INSERT INTO master.template(\ + id, name, descr, file_format_code, model, file_txt, module_id, module_name, template_typ_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('test-002','Test-template','test template','html','model-1','abc','10001','Pre-Registration','Acknowledgement-email-subject','eng','true','110005','2020-06-03T10:15:27.703Z', null,null,null,null); + + +deleleCreatedTemplate= delete from master.template where cr_by='110005'; + + +createHoliday= INSERT INTO master.loc_holiday(\ + id, location_code, holiday_date, holiday_name, holiday_desc, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES (20010191,'KTA','2020-07-15','Labour Day','Automation labour Holiday','eng','true','110005','2020-05-07T05:30:46.227Z',null,null,null,null); + +deleteCreatedHoliday= delete from master.loc_holiday where cr_by='110005' ; + +createGender= INSERT INTO master.gender(\ + code, name, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('MLE-Auto','Test-Auto','eng','false','110005','2020-05-18T05:19:53.996Z',null,null,null,null); + +deleteGender= delete from master.gender where cr_by='110005' ; + +updateGender= INSERT INTO master.gender(\ + code, name, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('MLE-Auto-1','Test-Auto-1','eng','false','110005','2020-05-18T05:19:53.996Z',null,null,null,null); + +deleteUpdatedGender= delete from master.gender where cr_by='110005' ; + +createDocumentCategory= INSERT INTO master.doc_category(\ + code, name, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ + VALUES ('DocCat00','DocCat','Testing positive Doc','eng','false','110005','2020-05-19T12:46:15.373Z',null,null,null,null); + + +deleteDocumentCategory= delete from master.doc_category where cr_by='110005'; + +validatePrimDocCatUpdatedBySec = select count(*) from master.doc_category where is_active='true' and code='DocCat00'; +isActiveStatusFalse = select count(*) from master.doc_category where is_active='false' and code='DocTestCode11'; + +createDocumentCategoryForUpdate=INSERT INTO master.doc_category(\ + code, name, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ + VALUES ('DocCat002','DocCat002','Testing positive002','eng','true','110005','2020-05-19T12:46:15.373Z',null,null,null,null),\ + ('DocCat003','DocCat003','Testing positive003','eng','true','110005','2020-05-19T12:46:15.373Z',null,null,null,null),\ + ('DocCat004','DocCat004','Testing positive004','eng','false','110005','2020-05-19T12:46:15.373Z',null,null,null,null),\ + ('DocCat005','DocCat005','Testing positive005','eng','false','110005','2020-05-19T12:46:15.373Z',null,null,null,null),\ + ('DocCat005','DocCat004','Testing positive005','ara','false','110005','2020-05-19T12:46:15.373Z',null,null,null,null),\ + ('DocCat006','DocCat006','Testing positive006','eng','true','110005','2020-05-19T12:46:15.373Z',null,null,null,null),\ + ('DocCat006','DocCat006','Testing positive006','ara','true','110005','2020-05-19T12:46:15.373Z',null,null,null,null); + +checkPrimDocCatUpdatedBySec = select count(*) from master.doc_category where is_active='true' and code='DocCat004'; + + + +deleteDocumentCategoryForUpdate=delete from master.doc_category where cr_by='110005'; + +updateTemplate= INSERT INTO master.template(\ + id, name, descr, file_format_code, model, file_txt, module_id, module_name, template_typ_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('test-01','Test-template','test template','html','model-1','abc','10001','Pre-Registration','Acknowledgement-email-subject','eng','true','110005','2020-06-03T10:15:27.703Z', null,null,null,null); + + +deleteUpdateTemplate= delete from master.template where cr_by='110005'; + +createTemplateType= INSERT INTO master.template_type(\ + code, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('Test-SMS','Test-SMS-info','eng','true','110005', '2020-06-05T10:15:27.703Z', null, null, null, null); + +deleteCreatedTemplateType= delete from master.template_type where cr_by='110005'; + +createDeviceType= INSERT INTO master.device_type(\ + code, name, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('GST0', 'GST', 'Test GST', 'eng', 'false', '110005', '2020-06-06T10:15:27.703Z',null, null, null, null); +deleteCreatedDeviceType= delete from master.device_type where cr_by='110005'; + +checkPrimDataAgnstSecData= select count(*) from master.device_type where lang_code='ara' and code='GST00' and name='GST00'; + + +updateDeviceType= INSERT INTO master.device_type(\ + code, name, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('FPT', 'finger print scanner', 'test 1.0.8', 'eng', 'true', '110005', '2020-06-06T10:15:27.703Z',null, null, null, null),\ + ('GST3', 'GST', 'test 1.0.8', 'eng', 'true', '110005', '2020-06-06T10:15:27.703Z',null, null, null, null),\ + ('GST3', 'GST', 'test 1.0.8', 'ara', 'true', '110005', '2020-06-06T10:15:27.703Z',null, null, null, null); + +deleteUpdatedDeviceType= delete from master.device_type where cr_by='110005'; +deleteIndividualType= delete from master.individual_type where cr_by='110005'; +validatePrimDataForIndividualType= select count(*) from master.individual_type where lang_code='ara' and code='TST2' and name='TestInd'; + + +updateIndividualType=INSERT INTO master.individual_type(\ + code, name, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('TST0', 'TestInd', 'eng','true', '110005', '2020-06-08T06:12:52.994Z', null, null, null, null),\ + ('TST0', 'TestInd', 'ara','true', '110005', '2020-06-08T06:12:52.994Z', null, null, null, null),\ + ('TST1', 'TST1', 'eng','false', '110005', '2020-06-08T06:12:52.994Z', null, null, null, null),\ + ('TST1', 'TST1', 'ara','true', '110005', '2020-06-08T06:12:52.994Z', null, null, null, null),\ + ('TST2', 'TST2', 'eng','true', '110005', '2020-06-08T06:12:52.994Z', null, null, null, null); + +deleteUpdatedIndividualType= delete from master.individual_type where cr_by='110005'; + + +# These data is for Auth devices, used by IDA. +crtDeviceDetails = INSERT INTO authdevice.device_detail(\ +id, dprovider_id, dtype_code, dstype_code, make, model, partner_org_name, approval_status, is_active, cr_by, cr_dtimes)VALUES \ +('devIrisD', '1873299273', 'Iris', 'Double', 'EYECOOL', 'TCI322', 'EYECOOL.com', 'Activated', true, 'automation', '2020-10-09 07:10:46.072973'),\ +('devFinger', '1873299273', 'Finger', 'Slap', 'Logitech', '4d36e96c-e325-11ce-bfc1-08002be10316', 'Logitech.com', 'Activated', true, 'automation', '2020-10-09 07:10:46.072973'),\ +('devIrisS', '1873299273', 'Iris', 'Single', 'Logitech', '4d36e96c-e325-11ce-bfc1-08002be10317', 'Logitech.com', 'Activated', true, 'automation', '2020-10-09 07:10:46.072973'),\ +('devFace', '1873299273', 'Face', 'Full face', 'Logitech', '6bdd1fc6-810f-11d0-bec7-08002be2092f', 'Logitech.com', 'Activated', true, 'automation', '2020-10-09 07:10:46.072973'); +dltDeviceDetails = delete from authdevice.device_detail where id IN('devIrisD', 'devFinger', 'devIrisS', 'devFace'); + +crtSBI = INSERT INTO authdevice.secure_biometric_interface(id, sw_binary_hash, sw_version, device_detail_id, sw_cr_dtimes, sw_expiry_dtimes, approval_status, is_active, cr_by, cr_dtimes)VALUES \ +('devIrisD', 'binary data', 'SB.WIN.001', 'devIrisD', '2020-01-01 07:10:46.072973', '2030-12-31 07:10:46.072973', 'Activated', true, 'automation', '2020-10-09 07:10:46.072973'),\ +('devFinger', 'binary data', 'SB.WIN.001', 'devFinger', '2020-01-01 07:10:46.072973', '2030-12-31 07:10:46.072973', 'Activated', true, 'automation', '2020-10-09 07:10:46.072973'),\ +('devIrisS', 'binary data', 'SB.WIN.001', 'devIrisS', '2020-01-01 07:10:46.072973', '2030-12-31 07:10:46.072973', 'Activated', true, 'automation', '2020-10-09 07:10:46.072973'),\ +('devFace', 'binary data', 'SB.WIN.001', 'devFace', '2020-01-01 07:10:46.072973', '2030-12-31 07:10:46.072973', 'Activated', true, 'automation', '2020-10-09 07:10:46.072973'); +dltSBI = delete from authdevice.secure_biometric_interface where id IN('devIrisD', 'devFinger', 'devIrisS', 'devFace'); + +crtSBIHist = INSERT INTO authdevice.secure_biometric_interface_h(id, sw_binary_hash, sw_version, device_detail_id, sw_cr_dtimes, sw_expiry_dtimes, approval_status, is_active, cr_by, cr_dtimes, eff_dtimes)VALUES \ +('devIrisD', 'binary data', 'SB.WIN.001', 'devIrisD', '2020-01-01 07:10:46.072973', '2030-12-31 07:10:46.072973', 'Activated', true, 'automation', '2020-10-09 07:10:46.072973', '2020-10-09 07:10:46.072973'),\ +('devFinger', 'binary data', 'SB.WIN.001', 'devFinger', '2020-01-01 07:10:46.072973', '2030-12-31 07:10:46.072973', 'Activated', true, 'automation', '2020-10-09 07:10:46.072973', '2020-10-09 07:10:46.072973'),\ +('devIrisS', 'binary data', 'SB.WIN.001', 'devIrisS', '2020-01-01 07:10:46.072973', '2030-12-31 07:10:46.072973', 'Activated', true, 'automation', '2020-10-09 07:10:46.072973', '2020-10-09 07:10:46.072973'),\ +('devFace', 'binary data', 'SB.WIN.001', 'devFace', '2020-01-01 07:10:46.072973', '2030-12-31 07:10:46.072973', 'Activated', true, 'automation', '2020-10-09 07:10:46.072973', '2020-10-09 07:10:46.072973'); +dltSBIHist = delete from authdevice.secure_biometric_interface_h where id IN('devIrisD', 'devFinger', 'devIrisS', 'devFace'); + +crtAuthDevices = INSERT INTO authdevice.registered_device_master(code, status_code, device_id, device_sub_id, digital_id, serial_number, device_detail_id, purpose, firmware, expiry_date, certification_level, is_active, cr_by, cr_dtimes)VALUES \ +('2a4af583-da31-4800-8cb9-9340643fd1bf', 'REGISTERED', 'FingerDevice', '1', '', '78467169', 'devFinger', 'AUTH','firmware', '2030-12-31 07:10:46.072973', 'L0', true, 'automation', '2020-10-09 07:10:46.072973'),\ +('9ac2ea4c-6ce5-4558-873d-575d130dfc29', 'REGISTERED', 'IrisDevice', '1', '', '78467170', 'devIrisS', 'AUTH','firmware', '2030-12-31 07:10:46.072973', 'L0', true, 'automation', '2020-10-09 07:10:46.072973'),\ +('097b9460-d3d3-4e14-8ac9-c95a734d5d81', 'REGISTERED', 'FaceDevice', '1', '', '097b9460-d3d3-4e14-8ac9-c95a734d5d81', 'devFace', 'AUTH','firmware', '2030-12-31 07:10:46.072973', 'L0', true, 'automation', '2020-10-09 07:10:46.072973'); +dltAuthDevices = delete from authdevice.registered_device_master where code IN('2a4af583-da31-4800-8cb9-9340643fd1bf', '9ac2ea4c-6ce5-4558-873d-575d130dfc29', '097b9460-d3d3-4e14-8ac9-c95a734d5d81'); + +crtAuthDevicesHist = INSERT INTO authdevice.registered_device_master_h(code, status_code, device_id, device_sub_id, digital_id, serial_number, device_detail_id, purpose, firmware, expiry_date, certification_level, is_active, cr_by, cr_dtimes, eff_dtimes)VALUES \ +('2a4af583-da31-4800-8cb9-9340643fd1bf', 'REGISTERED', 'FingerDevice', '1', '', '78467169', 'devFinger', 'AUTH','firmware', '2030-12-31 07:10:46.072973', 'L0', true, 'automation', '2020-10-09 07:10:46.072973', '2020-10-09 07:10:46.072973'),\ +('9ac2ea4c-6ce5-4558-873d-575d130dfc29', 'REGISTERED', 'IrisDevice', '1', '', '78467170', 'devIrisS', 'AUTH','firmware', '2030-12-31 07:10:46.072973', 'L0', true, 'automation', '2020-10-09 07:10:46.072973', '2020-10-09 07:10:46.072973'),\ +('097b9460-d3d3-4e14-8ac9-c95a734d5d81', 'REGISTERED', 'FaceDevice', '1', '', '097b9460-d3d3-4e14-8ac9-c95a734d5d81', 'devFace', 'AUTH','firmware', '2030-12-31 07:10:46.072973', 'L0', true, 'automation', '2020-10-09 07:10:46.072973', '2020-10-09 07:10:46.072973'); +dltAuthDevicesHist = delete from authdevice.registered_device_master_h where code IN('2a4af583-da31-4800-8cb9-9340643fd1bf', '9ac2ea4c-6ce5-4558-873d-575d130dfc29', '097b9460-d3d3-4e14-8ac9-c95a734d5d81'); + +# list of the query-keywords for the bulk query for device management data +crtAuthDevicesData = crtDeviceDetails,crtSBI,crtSBIHist,crtAuthDevices,crtAuthDevicesHist +dltAuthDevicesData = dltAuthDevicesHist,dltAuthDevices,dltSBIHist,dltSBI,dltDeviceDetails + +# Below data is for search and filter APIs automation, so no dependency on DB data. these data will be inserted just +# before the execution starts and will be deleted at the end of the admin execution. +# below are the only zones we should use for automation +crtAutoZone = INSERT INTO master.zone(\ + code, name, hierarchy_level, hierarchy_level_name, hierarchy_path, parent_zone_code, lang_code, is_active, cr_by, cr_dtimes)VALUES\ + ('TPRNTZ', 'Parent',0,'Parent', 'TPRNTZ', null, 'eng', true, 'mosipautouser', '2019-10-21 06:50:26.445996'),\ + ('TPRNTZ', '\u0627\u0644\u0623\u0628\u0648\u064A\u0646',0,'\u0627\u0644\u0623\u0628\u0648\u064A\u0646', 'TPRNTZ', null, 'ara', true, 'mosipautouser', '2019-10-21 06:50:26.445996'),\ + ('LFZL', 'Child1',1,'Child1', 'TPRNTZ/LFZL', 'TPRNTZ', 'eng', true, 'mosipautouser', '2019-10-21 06:50:26.445996'),\ + ('LFZL', '\u0637\u0641\u06441',1,'\u0637\u0641\u06441', 'TPRNTZ/LFZL', 'TPRNTZ', 'ara', true, 'mosipautouser', '2019-10-21 06:50:26.445996'),\ + ('LFZR', 'Child2',1,'Child2', 'TPRNTZ/LFZR', 'TPRNTZ', 'eng', true, 'mosipautouser', '2019-10-21 06:50:26.445996'),\ + ('LFZR', '\u0637\u0641\u06442',1,'\u0637\u0641\u06442', 'TPRNTZ/LFZR', 'TPRNTZ', 'ara', true, 'mosipautouser', '2019-10-21 06:50:26.445996'); +dltAutoZone = delete from master.zone where cr_by = 'mosipautouser'; + +#status type is used in status list and status list is used in user +crtStatusTyp = INSERT INTO master.status_type(\ + code, name, descr, lang_code, is_active, cr_by, cr_dtimes)\ + VALUES ('TSD', 'Tested', 'Tested', 'eng',true,'mosipautouser', '2019-10-21 06:50:26.054295'); +dltStatusTyp = delete from master.status_type where cr_by = 'mosipautouser'; + +crtStatusList = INSERT INTO master.status_list(\ + code, descr, status_seq, sttyp_code, lang_code, is_active, cr_by, cr_dtimes)\ + VALUES('TST', 'TestON', null, 'TSD', 'eng',true,'mosipautouser', '2019-10-21 06:50:27.193756' ); +dltStatusList = delete from master.status_list where cr_by = 'mosipautouser'; + +# auth method is used in user +crtAuthMethod = INSERT INTO master.authentication_method(\ + code, method_seq, lang_code, is_active, cr_by, cr_dtimes)\ + VALUES('TPWD',1,'eng', true, 'mosipautouser', '2019-10-21 06:50:24.650103'); +dltAuthMethod = delete from master.authentication_method where cr_by = 'mosipautouser'; + +# user to use in whole automation, with zonal admin role and mapped to TprntZ zone +crtAutoUser = INSERT INTO master.user_detail(\ + id, uin, name, email, mobile, status_code, lang_code, last_login_dtimes, last_login_method, is_active, cr_by, cr_dtimes)\ + VALUES ('mosipautouser', '5400020000', 'mosipautouser', 'mosiptestmail@gmail.com', '975366148', 'TST', 'eng', null, 'TPWD', true, 'mosipautouser', '2019-10-21 06:50:27.696842'); +dltAutoUser = delete from master.user_detail where cr_by = 'mosipautouser'; + +crtZoneUserMap = INSERT INTO master.zone_user(\ + zone_code, usr_id, lang_code, is_active, cr_by, cr_dtimes)\ + VALUES ('TPRNTZ', 'mosipautouser', 'eng', true, 'mosipautouser', '2019-10-21 06:50:27.950738'); +dltZoneUserMap = delete from master.zone_user where cr_by = 'mosipautouser'; + +# below device type only we will be using for automation +crtDeviceTyp = INSERT INTO master.device_type(\ + code, name, descr, lang_code, is_active, cr_by, cr_dtimes)\ + VALUES ('TDtyp', 'Finger test Scanner', 'For test finger', 'eng', true, 'mosipautouser', '2019-10-21 06:50:24.840922'),\ + ('TDtyp', '\u0627\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u0645\u0627\u0633\u062D \u0627\u0644\u0636\u0648\u0626\u064A', 'For test finger', 'ara', true, 'mosipautouser', '2019-10-21 06:50:24.840922'); +dltDeviceTyp = delete from master.device_type where cr_by = 'mosipautouser'; + +# below device spec only we will be using for automation +crtDeviceSpec = INSERT INTO master.device_spec(\ + id, name, brand, model, dtyp_code, min_driver_ver, descr, lang_code, is_active, cr_by, cr_dtimes)\ + VALUES ('TDSpec', 'Finger Test', 'brand', 'model', 'TDtyp', '1.12', 'To scan fingerprint', 'eng', true, 'mosipautouser', '2019-10-21 06:50:26.685205'),\ + ('TDSpec', '\u0627\u062E\u062A\u0628\u0627', '\u0627\u0644\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u062A\u062C\u0627\u0631\u064A\u0629', '\u0646\u0645\u0648\u0630\u062C', 'TDtyp', '1.12', 'To scan fingerprint', 'ara', true, 'mosipautouser', '2019-10-21 06:50:26.685205'); +dltDeviceSpec = delete from master.device_spec where cr_by = 'mosipautouser'; + +crtDevice = INSERT INTO master.device_master(\ + id, name, mac_address, serial_num, ip_address, validity_end_dtimes, dspec_id, zone_code, lang_code, is_active, cr_by, cr_dtimes)\ + VALUES ('TdeviceSF', 'TestDevice', 'test mac', 'test serial', null, null, 'TDSpec', 'TPRNTZ', 'eng', true, 'mosipautouser', '2019-07-26 12:18:40.718295'),\ + ('TdeviceSF', '\u062C\u0647\u0627\u0632 \u0627\u062E\u062A\u0628\u0627\u0631', 'test mac', 'test serial', null, null, 'TDSpec', 'TPRNTZ', 'ara', true, 'mosipautouser', '2019-07-26 12:18:40.718295'),\ + ('TdeviceSF1', 'TestDevice1', 'test mac1', 'test serial1', null, null, 'TDSpec', 'LFZL', 'eng', true, 'mosipautouser', '2019-07-26 12:18:40.718295'),\ + ('TdeviceSF1', '\u062C\u0647\u0627\u0632 \u0627\u062E\u062A\u0628\u0627\u0631 1', 'test mac1', 'test serial1', null, null, 'TDSpec', 'LFZL', 'ara', true, 'mosipautouser', '2019-07-26 12:18:40.718295'); +dltDevice = delete from master.device_master where cr_by = 'mosipautouser'; + +crtLocHier = INSERT INTO master.loc_hierarchy_list(hierarchy_level, hierarchy_level_name, lang_code, is_active, cr_by, cr_dtimes) VALUES \ + (0, 'test parent', 'eng', true, 'mosipautouser','2019-10-21 06:50:25.785225'), \ + (0, '\u0627\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u0648\u0627\u0644\u062F\u064A\u0646', 'ara', true, 'mosipautouser','2019-10-21 06:50:25.785225'),\ + (1, 'Child', 'eng', true, 'mosipautouser','2019-10-21 06:50:25.785225'),\ + (1, '\u0637\u0641\u0644', 'ara', true, 'mosipautouser','2019-10-21 06:50:25.785225'); +dltLocHier = delete from master.loc_hierarchy_list where cr_by = 'mosipautouser'; + +crtLoacation = INSERT INTO master.location( \ + code, name, hierarchy_level, hierarchy_level_name, parent_loc_code, lang_code, is_active, cr_by, cr_dtimes) VALUES \ + ('TLOC', 'Location test M', 0, 'test parent', null, 'eng', true, 'mosipautouser', '2019-10-21 06:50:25.31645'), \ + ('TLOC', '\u0627\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u0645\u0648\u0642\u0639', 0, '\u0627\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u0648\u0627\u0644\u062F\u064A\u0646', null, 'ara', true, 'mosipautouser', '2019-10-21 06:50:25.31645'),\ + ('TCLOC', 'childloctest', 1, 'Child', 'TLOC', 'eng', true, 'mosipautouser', '2019-10-21 06:50:25.31645'),\ + ('TCLOC', '\u0634\u0627\u0630', 1, '\u0637\u0641\u0644', 'TLOC', 'ara', true,'mosipautouser', '2019-10-21 06:50:25.31645'); +dltLoacation = delete from master.location where cr_by = 'mosipautouser'; + +crtRegCentTyp = INSERT INTO master.reg_center_type( \ + code, name, descr, lang_code, is_active, cr_by, cr_dtimes)VALUES \ + ('TREG', 'Test R cent', 'Center For test', 'eng', true, 'mosipautouser', '2019-10-21 06:50:25.785225'), \ + ('TREG', '\u0627\u062E\u062A\u0628\u0627\u0631 R \u0627\u0644\u0645\u0627\u0626\u0629', '\u0645\u0631\u0643\u0632 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631', 'ara', true, 'mosipautouser', '2019-10-21 06:50:25.785225'); +dltRegCentTyp = delete from master.reg_center_type where cr_by = 'mosipautouser'; + +crtRegCenter = INSERT INTO master.registration_center( \ + id, name, cntrtyp_code, addr_line1, addr_line2, addr_line3, latitude, longitude, location_code, contact_phone, contact_person, number_of_kiosks, working_hours, per_kiosk_process_time, center_start_time, center_end_time, lunch_start_time, lunch_end_time, time_zone, holiday_loc_code, zone_code, lang_code, is_active, cr_by, cr_dtimes) \ + VALUES ('TRCnt', 'map test center', 'TREG', 'address1', 'address2', 'address3', '34.522414', '-6.320471', 'TCLOC', '0000000000', 'owner', 2, '8:00:00', '00:15:00', '09:00:00', '17:00:00', '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'HLOC', 'LFZL', 'eng', true, 'mosipautouser', '2019-10-21 06:50:27.012387'), \ + ('TRCnt', '\u0645\u0631\u0643\u0632 \u0627\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u062E\u0631\u0627\u0626\u0637', 'TREG', '\u0627\u0644\u0639\u0646\u0648\u0627\u0646 1', 'address2', 'address3', '34.522414', '-6.320471', 'TCLOC', '0000000000', '\u0635\u0627\u062D\u0628', 2, '8:00:00', '00:15:00', '09:00:00', '17:00:00', '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'HLOC', 'LFZL', 'ara', true, 'mosipautouser', '2019-10-21 06:50:27.012387'); +dltRegCenter = delete from master.registration_center where cr_by = 'mosipautouser'; + +crtRegCntrDev = INSERT INTO master.reg_center_device( \ + regcntr_id, device_id, lang_code, is_active, cr_by, cr_dtimes) \ + VALUES ('TRCnt', 'TdeviceSF', 'eng', true, 'mosipautouser', '2019-10-21 06:50:27.732946'); +dltRegCntrDev = delete from master.reg_center_device where cr_by = 'mosipautouser'; + +crtMachineTyp = INSERT INTO master.machine_type(code, name, descr, lang_code, is_active, cr_by, cr_dtimes)VALUES \ + ('TMTYP', 'Test M Type', 'Test Mach type', 'eng', true, 'mosipautouser', '2019-10-21 06:50:25.446465'), \ + ('TMTYP', '\u0627\u062E\u062A\u0628\u0627\u0631 \u0646\u0648\u0639 M','\u0627\u062E\u062A\u0628\u0627\u0631 \u0646\u0648\u0639 \u0645\u0627\u062E', 'ara', true, 'mosipautouser', '2019-10-21 06:50:25.446465'); +delMachineTyp = delete from master.machine_type where cr_by = 'mosipautouser'; + +crtMachSpec = INSERT INTO master.machine_spec( \ + id, name, brand, model, mtyp_code, min_driver_ver, descr, lang_code, is_active, cr_by, cr_dtimes)VALUES \ + ('TMSPC', 'Testro', 'brand', 'model', 'TMTYP', '1.454', 'To test enrol', 'eng', true,'mosipautouser', '2019-10-21 06:50:26.846071'), \ + ('TMSPC', '\u062A\u0633\u062A\u0631\u0648', '\u0627\u0644\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u062A\u062C\u0627\u0631\u064A\u0629', '\u0646\u0645\u0648\u0630\u062C', 'TMTYP', '1.454', '\u0644\u0627\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u062A\u0633\u062C\u064A\u0644', 'ara', true,'mosipautouser', '2019-10-21 06:50:26.846071'); +delMachSpec = delete from master.machine_spec where cr_by = 'mosipautouser'; + +crtMachine = INSERT INTO master.machine_master( \ + id, name, mac_address, serial_num, ip_address, validity_end_dtimes, mspec_id, public_key, key_index, zone_code, lang_code, is_active, cr_by, cr_dtimes)VALUES \ + ('TMachid', 'test mach', 'test mac', 'test serial', 'test ip','2029-10-21 06:50:27.523105', 'TMSPC','testpublickey', 'testKeyIndex', 'TPRNTZ', 'eng', 'true', 'mosipautouser', '2019-10-21 06:50:27.523105'), \ + ('TMachid', '\u0627\u062E\u062A\u0628\u0627\u0631', 'test mac', 'test serial', 'test ip','2029-10-21 06:50:27.523105', 'TMSPC','testpublickey', 'testKeyIndex', 'TPRNTZ', 'ara', 'true', 'mosipautouser', '2019-10-21 06:50:27.523105'), \ + ('TMachid1', 'test mach1', 'test mac1', 'test serial1', 'test ip1','2029-10-21 06:50:27.523105', 'TMSPC','testpublickey1', 'testKeyIndex1', 'LFZL', 'eng', 'true', 'mosipautouser', '2019-10-21 06:50:27.523105'), \ + ('TMachid1', '\u0627\u062E\u062A\u0628\u0627\u0631 1', 'test mac1', 'test serial1', 'test ip1','2029-10-21 06:50:27.523105', 'TMSPC','testpublickey1', 'testKeyIndex1', 'LFZL', 'ara', 'true', 'mosipautouser', '2019-10-21 06:50:27.523105'); +dltMachine = delete from master.machine_master where cr_by = 'mosipautouser'; + +crtRegCntrMach = INSERT INTO master.reg_center_machine( \ + regcntr_id, machine_id, lang_code, is_active, cr_by, cr_dtimes) \ + VALUES ('TRCnt', 'TMachid1', 'eng', true, 'mosipautouser', '2019-10-21 06:50:27.732946'); +dltRegCntrMach = delete from master.reg_center_machine where cr_by = 'mosipautouser'; + +crtDocTyp = INSERT INTO master.doc_type( \ + code, name, descr, lang_code, is_active, cr_by, cr_dtimes)VALUES \ + ('TDTYP', 'Tdoctyp', 'test document', 'eng', true, 'mosipautouser', '2019-10-21 06:50:27.732946'),\ + ('TDTYP', '\u062A\u062F\u0648\u0637\u064A', '\u0648\u062B\u064A\u0642\u0629 \u0627\u062E\u062A\u0628\u0627\u0631', 'ara', true, 'mosipautouser', '2019-10-21 06:50:27.732946'); +dltDocTyp = delete from master.doc_type where cr_by = 'mosipautouser'; + +crtDocCat = INSERT INTO master.doc_category(\ + code, name, descr, lang_code, is_active, cr_by, cr_dtimes)VALUES \ + ('TDCAT', 'Tdoccat', 'test document', 'eng', true, 'mosipautouser', '2019-10-21 06:50:27.732946'),\ + ('TDCAT', '\u062A\u062F\u0648\u0643\u0627\u062A', '\u0648\u062B\u064A\u0642\u0629 \u0627\u062E\u062A\u0628\u0627\u0631', 'ara', true, 'mosipautouser', '2019-10-21 06:50:27.732946'); +dltDocCat = delete from master.doc_category where cr_by = 'mosipautouser'; + +crtDocCatTyp = INSERT INTO master.valid_document( \ + doctyp_code, doccat_code, lang_code, is_active, cr_by, cr_dtimes)VALUES \ + ('TDTYP', 'TDCAT', 'eng', true, 'mosipautouser', '2019-10-21 06:50:27.732946'); +dltDocCatTyp = delete from master.valid_document where cr_by = 'mosipautouser'; + +crtTitle = INSERT INTO master.title(code, name, descr, lang_code, is_active, cr_by, cr_dtimes)VALUES \ + ('TTTL', 'test title','title testing', 'eng', true, 'mosipautouser', '2019-10-21 06:50:27.732946'),\ + ('TTTL', '\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631','\u0627\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u0639\u0646\u0648\u0627\u0646', 'ara', true, 'mosipautouser', '2019-10-21 06:50:27.732946'); +dltTitle = delete from master.title where cr_by = 'mosipautouser'; + +crtGender = INSERT INTO master.gender(code, name, lang_code, is_active, cr_by, cr_dtimes)VALUES \ + ('TGDR', 'test gender', 'eng', true, 'mosipautouser', '2019-10-21 06:50:27.732946'),\ + ('TGDR', '\u0627\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u062C\u0646\u0633', 'ara', true, 'mosipautouser', '2019-10-21 06:50:27.732946'); +dltGender = delete from master.gender where cr_by = 'mosipautouser'; + +# list of the query-keywords for the bulk query +allAutoCrt = crtAutoZone,crtStatusTyp,crtStatusList,crtAuthMethod,crtAutoUser,crtZoneUserMap,crtDeviceTyp,\ + crtDeviceSpec,crtDevice,crtLocHier,crtLoacation,crtRegCentTyp,crtRegCenter,crtRegCntrDev,crtMachineTyp,\ + crtMachSpec,crtMachine,crtRegCntrMach,crtDocTyp,crtDocCat,crtDocCatTyp +allAutoDlt = dltRegCntrDev,dltRegCntrMach,dltRegCenter,dltRegCentTyp,dltDevice,dltDeviceSpec,dltDeviceTyp,dltMachine,\ + delMachSpec,delMachineTyp,dltZoneUserMap,dltAutoZone,dltAutoUser,dltStatusList,\ + dltStatusTyp,dltAuthMethod,dltLoacation,dltLocHier,dltDocCatTyp,dltDocCat,dltDocTyp + +# temp for test, need to add fields in permanent +#allAutoCrt = crtTitle,crtGender +#allAutoDlt = dltTitle,dltGender + +# verifying the status in DB when create API runs with only one language[i.e when record created in primary language] +createDeviceSpecIsActive= select count(*) from master.device_spec where is_active='false' and id='743' and lang_code='eng'; +createMachineTypeIsActive= select count(*) from master.machine_type where is_active='false' and code='Laptop-2' and lang_code='eng'; +createGenderIsActive= select count(*) from master.gender where is_active='false' and code='Genderdummy-0' and lang_code='eng'; +createTemplateFileFormateIsActive= select count(*) from master.template_file_format where is_active='false' and code='Docx' and lang_code='eng'; +createDeviceTypeIsActive= select count(*) from master.device_type where is_active='false' and code='GST31607' and lang_code='eng'; +createHolidayIsActive= select count(*) from master.loc_holiday where is_active='false' and holiday_name='AutoTest user 16july' and lang_code='eng'; +createMachineSpecIsActive= select count(*) from master.machine_spec where is_active='false' and id='HP04' and lang_code='eng'; +createRegCentrTypeIsActive= select count(*) from master.reg_center_type where is_active='false' and code='RegALT-03' and lang_code='eng'; +createTitleIsActive= select count(*) from master.title where is_active='false' and code='crTEST0011' and lang_code='eng'; +createTemplateIsActive= select count(*) from master.template where is_active='false' and id='crTempTest-03' and lang_code='eng'; +createTemplateTypeIsActive= select count(*) from master.template_type where is_active='false' and code='crTest-info-Template' and lang_code='eng'; +createBlackLstWordIsActive= select count(*) from master.blacklisted_words where is_active='false' and word='asshole' and lang_code='eng'; + + +deleteBlackListedWord=delete from master.blacklisted_words where cr_by='110005' + +deleteDynamicField= delete from master.dynamic_field where cr_by='110005'; +createDynamicFiledData=INSERT INTO master.dynamic_field(\ + id, name, description, data_type, value_json, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('DF-001', 'Technology', 'Technology Known', 'String', '[{"code":"Angular","value":"Angular","langCode":"eng","active":true}]', 'eng', 'true', '110005', '2020-08-07 09:08:51.607', null, null, null, null); \ No newline at end of file diff --git a/apitest/src/main/resources/config/adminTokenGeneration.properties b/apitest/src/main/resources/config/adminTokenGeneration.properties new file mode 100644 index 000000000..0668f3973 --- /dev/null +++ b/apitest/src/main/resources/config/adminTokenGeneration.properties @@ -0,0 +1,5 @@ +token.request.id=mosip.io.userId.pwd +token.request.appid=registrationclient +token.request.username=110005 +token.request.password=mosip +token.request.version=1.0 \ No newline at end of file diff --git a/apitest/src/main/resources/config/application.properties b/apitest/src/main/resources/config/application.properties new file mode 100644 index 000000000..c0e9841a7 --- /dev/null +++ b/apitest/src/main/resources/config/application.properties @@ -0,0 +1,103 @@ +## End point(s) relative URLs +internalSignEndpoint=/idauthentication/v1/internal/jwtSign +signJsonPath=config/sign.json +encryptionPath=v1/identity/encrypt?isInternal=false +internalEncryptionPath=v1/identity/encrypt?isInternal=true +encodePath=v1/identity/encode +decodePath=v1/identity/decode +signRequest=v1/identity/signRequest +decryptPath=/idauthentication/v1/internal/decrypt +decryptkycdataurl = v1/identity/decryptEkycData +encodeFilePath=v1/identity/encodeFile +decodeFilePath=v1/identity/decodeFile/?fileName=cbeff +validateSignaturePath=v1/identity/validateSign?signature=$signature$ +splitEncryptedData=v1/identity/splitEncryptedData +bioValueEncryptionTemplate=config/bioValueEncryptionTemplate.json +idaMappingPath=config/mapping.properties +getIdaCertificateUrl=/idauthentication/v1/internal/getCertificate +getPartnerCertificateUrl=/v1/partnermanager/partners/{partnerId}/certificate +putPartnerRegistrationUrl=/v1/partnermanager/partners +getPartnerCertURL=v1/identity/generatePartnerKeys +uploadCACertificateUrl=/v1/partnermanager/partners/certificate/ca/upload +uploadIntermediateCertificateUrl=/v1/partnermanager/partners/certificate/ca/upload +uploadPartnerCertificateUrl=/v1/partnermanager/partners/certificate/upload +uploadSignedCertificateUrl=v1/identity/updatePartnerCertificate +getKeyCloakTokenUrl = /auth/realms/master/protocol/openid-connect/token +masterSchemaURL=/v1/masterdata/idschema/latest +preregLoginConfigUrl=/preregistration/v1/login/config +uploadIdaFirurl=v1/identity/uploadIDACertificate?certificateType=IDA_FIR&moduleName=$MODULENAME$&certsDir=$CERTSDIR$ +uploadPartnerurl=v1/identity/uploadIDACertificate?certificateType=PARTNER&moduleName=$MODULENAME$&certsDir=$CERTSDIR$ +uploadInternalurl=v1/identity/uploadIDACertificate?certificateType=INTERNAL&moduleName=$MODULENAME$&certsDir=$CERTSDIR$ +authPolicyUrl=/v1/policymanager/policies +policyGroupUrl=/v1/policymanager/policies/group/new +publishPolicyurl=/v1/policymanager/policies/POLICYID/group/POLICYGROUPID/publish +clearCertificateURL=v1/identity/clearKeys?moduleName=$MODULENAME$&certsDir=$CERTSDIR$ +fetchLocationData=/v1/masterdata/locations/all +fetchLocationLevel=/v1/masterdata/locations/level/ +fetchTitle=/v1/masterdata/title +fetchZoneCode=/v1/masterdata/zones/hierarchy/ +fetchZone=/v1/masterdata/zones/zonename +decryptKycUrl=/v1/identity/decryptEkycData +retrieveIdByUin=/idrepository/v1/identity/idvid/ +fetchLocationHierarchyLevels=/v1/masterdata/locationHierarchyLevels/ +fetchLocationHierarchy=/v1/masterdata/locations/locationhierarchy/ +generateArgon2HashURL=/v1/keymanager/generateArgon2Hash +appointmentavailabilityurl=/preregistration/v1/appointment/availability/ +validateSignatureUrl=v1/identity/validateSign +vciContextURL=https://www.w3.org/2018/credentials/v1 + +## Auto generated properties while running the test rig(s) +adminAutoGeneratedIdPropFileName=/admin/autoGeneratedId.properties +masterDataAutoGeneratedIdPropFileName=/masterdata/autoGeneratedId.properties +syncDataAutoGeneratedIdPropFileName=/syncdata/autoGeneratedId.properties +preregAutoGeneratedIdPropFileName=/preReg/autoGeneratedId.properties +partnerAutoGeneratedIdPropFileName=/partner/autoGeneratedId.properties +idrepoAutoGeneratedIdPropFileName=/idRepository/autoGeneratedId.properties +residentAutoGeneratedIdPropFileName=/resident/autoGeneratedId.properties +esignetAutoGeneratedIdPropFileName=/esignet/autoGeneratedId.properties +mimotoAutoGeneratedIdPropFileName=/mimoto/autoGeneratedId.properties +authAutoGeneratedIdPropFileName=/ida/autoGeneratedId.properties +prerequisiteAutoGeneratedIdPropFileName=/prerequisite/autoGeneratedId.properties +regProcAutoGeneratedIdPropFileName=/regProc/autoGeneratedId.properties +mobileIdAutoGeneratedIdPropFileName=/mobileId/autoGeneratedId.properties + +## As below are non changble values, move these out from properties file +appIdForCertificate=IDA +partnerrefId=PARTNER +internalrefId=INTERNAL +idaFirRefId=IDA-FIR +proxyOTP=111111 +wrongOtp=123455 + +## +regcentretobookappointment=10003 +keysToValidateInKYC=phoneNumber,emailId,age,dob,name_eng +#partner certificate refId, used for getting the partner certificate +partner=9998 +signatureheaderKey=response-signature +uinGenMaxLoopCount=20 +uinGenDelayTime=10000 +Delaytime=90000 + + +## Remove this from properties file +picturevalue=iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAIAAAACUFjqAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAABCSURBVChTbYtBEgAgCAL7/6eNhBy09qDi6gpjXZSxUU8o/jrfpDmcmY1QAOWhgTswv6sSm8zVhULlgst++8T51IjYNUHdI+4XZHoAAAAASUVORK5CYII= + + +## Check are we using these properties. If not remove them +zoneCode_to_beMapped=NTH +expireOtpTime=180000 +demoAppVersion=1.2.1-SNAPSHOT +AttributetoBeUpdate:Name +ValuetoBeUpdate:Sohan + +## As these will be based on regEx, move these out from proprties file +passwordForAddIdentity=12341234_Aa +passwordToReset=12341234_AaB + +## Need to revisit these propeties +XSRFTOKEN=7d01b2a8-b89d-41ad-9361-d7f6294021d1 +codeChallenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM +codeVerifier=dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk +policyNumberForSunBirdRC=654321 +challengeValueForSunBirdRC=eyJmdWxsTmFtZSI6IkthaWYgU2lkZGlxdWUiLCJkb2IiOiIyMDAwLTA3LTI2In0= \ No newline at end of file diff --git a/apitest/src/main/resources/config/bioValue.properties b/apitest/src/main/resources/config/bioValue.properties new file mode 100644 index 000000000..f40dee726 --- /dev/null +++ b/apitest/src/main/resources/config/bioValue.properties @@ -0,0 +1,49 @@ +#FaceBiometricValue +FaceBioValue=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 + +# +RightIrisBioValue=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 + +# +LeftIrisBioValue=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 + +# +RightThumbBioValue=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 +# +LeftThumbBioValue=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 + +# +RightLittleFingerBioValue=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 + +# +RightMiddleFinger=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 + +# +RightRingFingerBioValue=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 + +# +RightIndexFingerBioValue=RklSADAyMAAAAW7WAAEBAQABbsYH5gwcDCApAUcAAAAAAAE3AEAADwIAQAIAQAICAAEB9AH0AfQB9AgFHQE0AZ0AAW5VAAAADGpQICANCocKAAAAFGZ0eXBqcDIgAAAAAGpwMiAAAABHanAyaAAAABZpaGRyAAABnQAAATQAAQcHAAAAAAAPY29scgEAAAAAABEAAAAacmVzIAAAABJyZXNjmcoAAZnKAAEAAAAAAABqcDJj/0//UQApAAAAAAE0AAABnQAAAAAAAAAAAAABNAAAAZ0AAAAAAAAAAAABBwEB/2QAIwABQ3JlYXRvcjogSmFzUGVyIFZlcnNpb24gMS45MDAuMf9kABAAAUVuY0lEOkdSQlQwMf9SAAwAAgAJAAUEBAAB/1wAE0BASEhQSEhQSEhQSEhQSEhQ/5AACgAAAAFtXQAB/5PfG6ATziLE8nBo/Z7qDF8JnmEnkvlMZs+o47tK+oatnNt7PJ0VAc+jsdINcBtGn8/OpE5keRAT0w41Qt8LgICA8pBwNDjsuo8YDdNWehUriVyd7y6A8SDZKZPX9FrjRUnc1jZz8iNt2huA/AhAOF95JG5oRjkgwKG3iSlkHzep0pFDacLLBHa3F1nydXF/zqcTAHLSNsf2fbF0AMimBE2SXb970sEnXAlYSn/1LjoVQJ+e5MOv0/2gcDBe2krFtj2GFuRxd3biQy3+trWni0OmG725xDgvWInmO6YA7IvgpZY5nEx/tTl4yWbmSaBZnRDuczKioUoW8dlAPvvYs1kM5JSfJ7alFxNqmKRuwJHV4DGMlQCo4DRX7BKnIYKOejPq6BsctVhgttuJvloXnpzLlLYSiH4JLfs27+dNu2eNAvGDzMJA1RhPVk5wP9iT/lG+rdKq/G3+M1+Qen8o/RIleGHYE9rynqwNoPoK5WUpusITqm52ZKEFVyZ0b1fzvc6C53uQ1wZxk/8XaijgOg83b5+btsf2sgcS3peF7aVHuwOKAJ7wXgtCzEPz/DXnrtUqtBphQWE2G1OJxs8BdTqlmqpra7o6H0nOzf79DFeIMPj299/PJMY1WMZcF5hWcTipHszzc5tss6nuoaeRGSzD29+plnc7RXZVf4Oe3FV97sPqIp+AzqidpMhl077pYq0uorZPYzOtvxzUREm7jqFxy+C/rf5v+AWytQwY/CojkNH4vaHD4A3sQytOkRz/XeaRp1mugGCDfygHfYTYlucGwF+casfUEn6Kl2z+j51lOr7HHZBYLsnVBxsB6sHqp7lUQj2ke6FVW2etQ9r82kIAMwlBYaquJ2xDL7vo0WJF/PgS1cY5J5NtAXukdcHk85Wd7BwpVpDbnghk5Jlti2lUEcBVCG6BW/VPv6R4tNhwhC045WRg9yJiv3EtbMMhW+TpMI+jtk4JC5jnbk5yNzaJMcm1GRtHj21HORaJmKPh3Wuz6rUTBxKd/NKfeWdvNF6dIOzMDBX/dd1JP2yVaFbneK70Xt2uhITxV+FSa+Yv4Pr8es3oKbd9QLIkrNztKcaVUmLf7MnvcfzvY/KTymYUpgfL/NkrNqYqY3N+NI3fcVx7A66vwz3hJ8DLpT83BSLsNn94G/TKMcG456SUtHk4i7M9Ob7yPsOfoG25GxKWVLvbyPScUSCWSIkWLv24Qirhmavl2TAxnzRCy806Ega+kjZG5zD8gzaZUvbdwZ7GegDyyYewrYz0eyTYSSxno5qTjN0nkUVIJKnV2J7fAtAtjwN5fQdD5AzLyqvniHwikiRSHlDhZf6fx4D8yIfKkX0qgNQnF9hnN7MdyMZkWfpSB7ak91zy+h6Wa8pnqGAUgOdEZ9l8U7yLMpHJ896juur40t7EcPRXfWX5+erEVaWxOy/jPZglCjDO/BZvM5+ubX1YbUvCH8YByf0Kzv5ChLz2I604YegKaIEkAex7hnWgjRtLgeZNp1og6tAnq8CuOmtuAOMST7WDAlovsOYvbnXCw3rtKfCtNYFCvR5sr+9UE3LvEeWV2NcL7CMPD76d7ubfqMwgDshoEjRX2/oUJOdCfGL/WH+02DXPufxWpvHWt9TrG/JqhfhgPDR41SNnmnW6i8n3QLMCGlFyT40LgPx76YAMT7y56OD39jWNIvlfCb3kssrBrx8lS5uWrTBp+UiV5t4wqZU7z6aYBLcCnvQfop6B7IOunpVmCqR6bR6O37YUUznZW/uhaCeJhNyN3G1DRttfPMh6LiYguNTpQZsOpb/bCi9B+4G//mVZT0JUtgFp9Py/mphX2vKYHfwgZQHQVvpWbpxtQXL6Pp7Go9kCJgsEJXIBfhAaVH5B0d1YuoIaJ9aDCTdEnL5y90+50YCipuqMJU10WIJ+VVPpuKElx/RMKKJGoZnIKal0iFYIFEycbH5MCXwTWZCq68Koeh50KqjPv09DdHz3T3XrehJVbgon6K0C9HingmTWwAZrWzpUUEAAFYbJK5PzMRyz2PIRwqd7dxwrLai6HhdiXBsrQBP0hbORHLCiiOf6wzu2pQqplPbOjcZkzv9hKwCMYcnj07+BwDB4nopF61CkzPHo1OWZHJOiJTp6DQcIFeKsZ1GzerVnfHigzJ1v/fZyx9hot7gr0iwL81pZkEWtkn5hcpG/bqY75pdpj2f82PxPnScd1Qo+jRPX9N+pt3WdCC3ce12Oc6y7lUrw6uXIQtVz3VgdT29O0Clh2u/RslZTsSZhy+3EzYyxYrJmCAcqDs7mTsjfIpSmR+By14PA23iI+gFkP/BEmZZ4DGFSTkQ6X7FHJz+N1P7GA65Hz0KUC0hSXG4ke0bA7WqnoDCUAFc12IWo548gQNz1Et1NgnGMjrHis6Amv/VbA9ejhR4uLnG3figt1dSA1nrUF3MTd96qPRoaKl781/OjfZ6fZ85jq2sThbrP0EFAObiYVI0EH3GKPk4o4UjkO5JjKrzSUP9lPzhkaFdxNIFYB6/J29D6IsJfKt2PIUAnI1nuunneyFBXefyu68Cf7HJO0HUMl5H0QjhENNaasn3JSC90JKpjsaUMuUKar2dT9Ypj5r29PFgVBuWbpS5WQwEdSmeDUJ0Zw3Yr1MMPATrwVF/JKxxrY9XaQYBbe9kvSP0ypzh+IGrgl6PJy7gAe0IUecGQrFO+fV9h1f6vbf33LGruIfLqIpiQWrhA4Mub9sb7Q3um7d1rsN1Y2DpaIW5y6XTd10y1zPe+H0+HBKE1eOxdsrwTj8420t1SWpEaHEmrqaMxrsRcoxLkSONKh+YIIE+ZQb6VTRmEbh5bK6uT5n6TRf2EgtQUvV8jHJlvYjndJGIVafsWcdr1okeogg4hIIeSsHn2uNCJm/pPh/bUPXQNsAAwsb/VId7y0E23J71jHvWrLJAtXP9VKupN11gavVsQ9NH9LZaw2T2uSdQ2uJHrwACvbYLPfiGeCN3Ed6gxMfzplggAukc1YdPhwzAf2MZk8YM+87gkX5LL/lwhhru2upcXy21CmFmO7YRm7QfQmRC1b+tzAZ70WrKS8YGbEVaj3IdErB0QO3SMR/T+bdCn9jgrAdCzbRqGeDQVy9Bdz84EJZ/L2B3vFIwnoyaMESx1WFrjYWout64lBZq9ndk1LU1nYS+6/jRLI98Us1lYKnS0FjcDGlxPFWFJFKpdJ4yVJ0J4PIS31gCuAwx8yG06B1PQQqluqOpGG0Qd+wmvsoZROrpLIJJ0ZgRrnC+VMuYPYbSqDrAATN8na4rDA2IFTycpbd0aLnlbNZa24XNOOn+jeFTO6di3WIbahI77C74N759n7aE+iQ4lAyd4w8Z/t8zPy3EODMNi/kuMu4XHwEgrm71RtqcIoaf/SCEd/aFCsEsOMPtq2gNCioy0wFQdS2FeG3009ZPbM13WpqO941A0DLj6S/mOtFazNYWVwy9sA6dcmjlxO8U6wGR2fddTClT40OteRmbVZUhaPJlT0KXFRUG3R9Ay1I+XDRajgycvJsf6toEXakqS4Hpc7tOP2FxY5Ny+bjEZrM58iKWbSh6kJna1nfiOfsdRpL/mzNfEsrV+2QNMCj8bMHkaW+RxwjcJOGN0MiisYWK+d6KWxOS81l7TmPfw5FQVOXAXdGb3eFtMLVr0JUpKlo3xPQNuMQhK6cVOhNEFjVn/LKLG4SDGq5laWKTIT/9lnGzqxA7w3tB2N8cM2cIZSseRUcb0cBJxgnLkC2uLR/dqChIw7Htg51zR4XzgSQKv0W7+/P6ddIwV8yvkBPKZGEmAONeQwmtZuc5nqltmjLFdjRAVKKajRvs9CnmzTBYeSd8de0bkUSUO2aiHkBApPW/RT04SYDkqf2kRpdFavp+M9aNCZlaHQIL8XZVOm9FWZxe9/tfZbr+PLrmg1rvnCP8qbk9Rw3C3JtdaMmIn06tO9bRmDnccDTv+s5r8gvOClQMtC8HppH1PBu8zXkUMAFwjhFCEhPboeGNCVzNKPt4ofRRGTDZcEmA4QL8wTqfmpQr0j5AAj2zDeWCPC9y3Qkp++8fUQsy/RxPJ2o1SNywYVcq8Y11u6046wwwUfQwZ4xkgf7AQipJOXv09X+FLDThVjLR9rCL17jXcd4Cc8XbFlnbkq6gfBcrUDOOJl3Qv8iCG5QtsRAKjNSsUDD5/Y/0Gi78cJhX9CAIFSwlGxsxljf2YQ09RW9hIiaqjnSPWsSzdvW72/sHYvt34B9n6AdpJs12+Gp/vsblzi1E9GRqDqxUzpuxfJ28F/fOnHSnDfhL6mX1uEmLydqtAI7goYsvoOPfKoeMdqp4/4tMuTNFsa2MNbrlyvZNgmekNzcX39RuCuhQxZl8U68eLdbf7/oS2WkwDg7b5ymzIA6cQhVkJZxlnq8uETBeYvbo6sycsVIhsVgIQqUP2NWpJX5uaOqxljQ2x/ptvRbsP+D1ALvBVRJhsY/9EuSo7xfmaTERVA/2SuE5orgNE4cwKWxn83kX7fQAi+zNFsg/3OZ7+623SOL27h1D5VBcoSeb23ylsBOXUHN4Ps82kmNOtFjfwQhayXKZ+ECe0OrOmXGyTrunM/2zTwp87kpoZvj888OolDuROm2ATrEIHGsapfa78v3CKeMW560uXi1P5bdx67FFHm+TcnmIFAorInIhGaQLL7nmJev45xzLBCyAWjira5VOrLSiDCaz9Y1NxWb911nmvFv0qP/SqH9ZYQKdQI17ZZu/KJaJyIW35Mvgkqo7DHwAL41sNeavwb/py8OIAcbcSyQ7wOGSrbg/6pIqjSQU9aWbf0HDqAlS/A5yUoEHBs+XATIZ0fP8G4nwa7/4Ae1JZOhlE1MWRb+suDhljHcrUwLzDWPgpoJOaSwBXpKYTSbTfBSBm4oTkgRSrzrym1jOLyIouE9m6Hqyw1Bv+4erALl/HCnO9hUaryMwZfG8+2Q2yYaEhE5hiSpYowfQD8VjnlHOTrBE0M6gOS1qoJHkZOVYa2YeDf9pbhJTtZxQ6Ie2eGX5tEO7Dy9vDwuIdtvbvLQVLDGu+xmeUMiXve4BiJmmDJ7PTtfF03HynorShXzKsCEwUFQaetE33ftkv9LwhlDOobQJsB1PknnFSka3Dqi2nL1apDYKya6gPiOQMGUuO6xRqZcSnCnzm0EHX0M/9KB10OJfmp+gGQYJQ+PeGLA5QoIEU11Hj5KRyDZDBDW7RRWgzelFQth0hKwSr4+OK24y9djceCQihFkRTZS2nOuTnrmte9z54tP2mBN7KVXPQD4Wf2X+oiejxxj/ipBmOjiv2Ix5PUkWz0JAIyo7WImGHnjdMKRdnejjff4gULm8FgS0j+9YiIgAqSlZdLC2IldYr2/VLJHwmoE2qzkxVKKRw2MCTWpIK1JkojKsTfgo5m9ZtIsGZ7lyCHq+yq+8WLIDgRjyGsVkFWnjnL3+6cVyeVW88ZfaR7Lq0tfZXVwK14jr6kj1CRpwOK6MHUoUEUn67ZryE8BqSSgJ/6o/hf9w9bdPHqvr1w1+EtQUaRg4rsI99GOTfcI7Am5hSziWywPpHqH0anWQ6TZS+GZomw2yh6Bty1wtO4lr/d26oY467wetCk25fzdvQyNSfYB94be2ysquxvzq4ZSSF0ib/Kbiy6q59iKOih7VyTqswRD/tpFSBDtIonMYTS5HLFnrL/2Gz0QwFVgl9YWAW71gnsGGEBRo7GsCdW+O7cz1XCkwBv/J9UsfZ+6nFiXz/N9d68fY2ce/tvCvRpWvvkDfdgKLFlhhXCkBXgRK9q2x6jiyWMrEcStQ5JxIinujm2vVm8VsNc3EQEN0DmpN6Zs27uUf1g/cQGchb47fff6pGMbK0OfrRen9imkA+nW6AP/o6Qu/4PQUysRcHjDNqSQHCil32syPAAvbIlG3Pvx/UeqCdQUycgSvP5BZQI0feEBVi/INR+gGhZTSh68tu5dgeetabHsIXUJZQncWQUycOeq3mrk5DBOsHUnPOrCanb3t7zBCTGcSg2pjbXTYe+aRRteVHqZINfoaPXAFQG5wQseJ/WGUw/jo9lwUwUrtysJ5EydHh4rQyqV7y42FL3Qp0VK8kr3gp6tbkBenJAvEdu5n+uOhmcvOpMkGqumgWBhNIbjqZJPvuie1uUIcG0STSc9UdC/vSvJCgNwvWXuQkfGcjSXfA2e1Ir5beio2TIOpXcUuZ2dRIxC4861I9Gpk1A82zNYpkH5tJ38/3ecIaQtmNscK0TzfD8rXBL/J8SmOIPAPr6wWAFo1Sq1w+whkmjPS/usbCllUvGpf0AyVuMKw+8xCM3pAzhCFLfGPHJTSXBNiadrgi45v/d9HtdlYpOZJvHdwGf+6x7EERmwwpb/VlGxK3pluMH45+PZYbo4fjiztQqJ1TUOCqVeuAPH23SVhY/wC1pBhJ2XyhS8+Gfr5lfGVs7mI9gsYMWs5ZIaiBJ+8KCDERBJv1BJQXBT4hM/Tu3D4hJguEGbKSMmVc2tGvwnnQcnJCaj3v51f4c1Jpy8HJuxD8V9D/G/mmlCvNKr4SfmJkMbRd+VtTB7d4gfyQQx0WEcqtjKWUpXKX0prsECLxF/Pu/ZCcX0JclTUeWmsLLwm0we39IybIfjAj6tL0pH/zr7+R+ROdGGwmCLCwjx1By+SG35U5Dgf5N4fxAQmT0R0MIEjWEXuacIUZ2s44dL4wVOJbSjTN36nf5ydtEs3+XmA+VbLDHXiusdfkLZ3NuBi0Rfovkr6AHAkWEbaDq+mxn4Ia1MNL3rCY3592WMnrdT9OMlDw7omSgEGF6hJ4zXvGUSeSaDuZ6LC/cJUY1T44laKMwhTedyPi0hKgOI5WIavFLzt4FG/zrQ2k59LUNYPFibXm+tR49NzIiXg2Iz7aRxsEmsXuWwk+b9hjmX1OLgj972Ol6OMYHEqrY7Yre5cd9nuu7Od4YR5BLGbn/k1a0ogoYP6jjE09IIaNsvmgwyf3m5M7yDIDvly2i+ayycUPbombkVFrtZLd/0Bk2Q18KK57zz9IcMjwP86Hnk3OiEl2Kvn7dRpXeGo9DdTYjuhGrG11rtqDDDDhrKRBUP4WmXpAfOs2wmG/uN96/Rj6N+U3F/Bvi9pEG3rZK6SD+3kSP1Dk1QF3aSV6NLcNVxFNPzww2PjiHk2abxE0wTyHiVdWSNfwudUI12hWPv4AX2Kh60gTPze1PZPI5IMh1XW3+ObzXsHWsrf1B3ahfP8mdsD/N79NgYTt3A31C7CnkClY8/8YWRYXQ+P3y3RZx7ieYpmligIHLoXF/yQ6PjGe7r4H+olH82+nH9kQ0oCQXUMDnPw3JnA1qWdXydzaGiUP25WEq7yX6Gz7cuVWzAmeYbkx1tDGf2rfj4ZqWemm6K197t+1ytEbo77/aa+LeQD/SS3+CTGg95srRO+HVFVLvscHRT48EZ6OnWHVLl/ulRWuUqV9hTZLBo/414IYtwV5pwx4QLSlXwCpGB1W+t1qSsrbW19K34Tq6uMBlxaU99VnJ5dqIcEsYGwBJogI/UvjgGjVCHP+TkK79MY+gfi8IbgtbU7wm6qTcsCCmxuVOXD3plop8HHy3AR1yoZehtcdHtHjd2UOrGAfx7eNK+f7utxqOtqBMMOe6/T3mIM1D43jNP85RcyK/16r95etu5IA75NEYbjU0mrzUOUA916RQQ0wnNFKtaQJ6NczHTrpJXMo6qgnzwshbicuB3ile9mQtrgAVKm+oPeE66ACR+UbuIZYAbVG7bdVGTaU8ulNJW/uefOjtPQPnAifDV4ljZfcALHOhJ6/arMcHzenEeXbIuG7p/wlSflPK8zdDdCgl/LL/GZ03yEJ8adzO+HmlkYK0/l31WyHNCnJQL36x3mvCEtV0uomY9b/OaVO5DUaC7HPdZ/GRuy3dxsYJfUq0IlLLp1mn6uhsFFKYuVo06JOnSqWTLmt9/g/+v5CRe5cCGDvysqfiXw9doFlUSizichVMf8Sr3dYIu/bNMklOqsoX5S1eKF3BS58S/Rvo+y2Mi8butmbEuuGHHhUUMi2tKrlDyAPLULNkrlbwQp+2Q1ffpCA510CndZHFECCGRnjPcBalV63nB8RYzai2odOy/WpQ5bVnaVlNMMPgQGKB7QXVqFx921CzP5prL/Gcno9qOo1oERUMq9tLJKxL7gAeAIFUK/eQKCeDHUQFQWG3BuXeqAelMs97+gBaboTpjdrzRAFXu5iiqWnV60PpgsXq4PmZxU/vAIKTHGhkqK1tWKHsUs9LoZUafb48zJzTRERAUa3lMa3ov2B3+mgyn+aoIYLFXbG+KvwloQM8EgNp7tErP8edFOoWruiNLqpGpuEfZSposL/V0SiGZMzxOPOcE4io4zxiiqlhW8ApJzw3XbOrlN5rPYTyClyVhjD5dMZQSbOItM+BrP+2It8imyo9imyg6Vc/YIKwlVY4X9c/HmxhYLfX6710XpsTTXFkVvl3vpfq01R5TXrzciFcDauebyTOCIpSk8fa4cVjV9LevZVBQonluY4jMYp4SQyo4H4WKv+Eaa0Jnc56xAPWknRamoDTIeUtj5Wk+/lr5BF4/0e7d+mbG6r8euEUZfvbraReyTI4hdwncL5IQy3w4fxaFEcQvaWpXquHdmahabUAv9pCl8LV0ZW5hxDNTzaaZIfXH39eyFXOCyzJe+AIyGLyd0+gwmxy1O4iZaB8QgyDmTJIrs2mxKLg0X05SwYoFckXxrG2C2aQioZVsi3l1z2W+cZYf8mYpm8eTLxZJ8oQx9oImtwTWsmZnn1DVXt8R5cLhZlxhC3tTAdYlM4jycPZTzIyNOpOiCPQSDTO8sAuGHR6ehPmgeJhM7NMA6/0u5CdaM0T1Hq+MyCf6Xjc2S/+ETSyC9uWPWskxIsIeim3geFg5bax04Jmzu8TkuBTdOcnlVdOqHTNP8wO7sl4Y95VIYwB94aDka/qFjvviqIH7T3pZShwaLzl824MVsb4RddaBJvVY+AGkdKfgeqhQf7bsMRxGtN4yXfKO6OdBe4YlGMTJyZvAzVrj5hNnwJbt9o5wpEF08V3bMx/1NkAoDftAoBjCRtH7aWb+S/NzMlNfHjHP6+HO4O0PbIIX4kdYXjVhglyLas07rFBss93BBa22+q6zAuTkU1s8Q88u3zX8pmRR+e2PFy52WgPT49wVXpSKX60GkcuEo/tV2exGkgXoXE7x3SB6J3g4dQNTsAif7buOaBEdOi2Zlgq1prsgM6/CmjdmvOEeRuyCuZP7F4OQzijBHx7cvfbsipK/8pgmgZ0wInfoSbZllwNz9DiHYdcJmqcdcJjFQB7SMNfajDklbyzuDIsYKP28bcpqosUPsMk+X5CY9ay63w7NpYat0NOru3dtISd0/m7zkMyOZ0+rHhah4DNKoUeheeTdC7VN8EXkVop5/UOXV+YzWNb8KZQD78GWwwITMjpNTnb3MXxhKocqa3UKnn8ymDQQ8PdmCi7AV+qo5m507/IV/nbsVqhZLbzM+Mhejvjz7D5M8x7/6zesPQkFelujb5y8RfAN5Wq3yTNzlAFYWbMQcJpwlU2E390XQRzixJnCOjVQOB5B1Dd0FPaJY5H7BxrzZH/UlIEEZF9Xmzzi+4Qm3zau3R5R/idpzgkuIogVen/R3UMFVi1T6V0OntObV4rrNtQiX3tgf1E/QCJ5p5s0ucRPiOJdYsdUv3+AabHS8EKspRafJ/UFug9lCQCMEvBqx+5vZXwEBfn/bnKDZ7VV2ZXyIOoYzy4hS8n8YjDBMbGoXK2ThEcPNh3ppkozcwn4h5G/agRpVOto9ZrWTh20GWfDuWHMvpOYcGXAfSyUSPMc6+m63HowhI4nj14WlGV6X1COopNlkBSRATAoSkOHPRfW/Gy6D3z2n4ydiWDrlVgwsG2h0fCy0o34XFsNMtdO6xb6jVAOvSFZFWa4hAxUT20hS31HddDa4pdune49xjeeBuCd4TgvntJ46axpLtzLw7kWs+1RpA6ulVIpAf8xlMMMAXyNl3gWNiGuzEAKYLs3MNpCkfc3iHQ2r0yMJvtvhZdHDbYiGb3N6roZmXr7R5oXlXrotfn4dabvo5i1+jeSht7mWHwnMdaYmLS2OVCWV8wzxurSILK/fOJt6iQP8dTMMynHgXbN7UbGPsc3Qf02Z498vEfjcR24c0+93pXPp/gICAgOb0fbraOb38ANtIwfh2Xi911/zW6VVDkevQCLA3fe5RTNw1x/bZbgix3GESjR12qKyMmYSh6LFchG9K00Ufcexk9HpUwjHB5T2aOx+fpkbmsuUrKPMczR6SRUoCTaVpkHdEwt/u8IBAoofi6XIwSGOuofWLjDV7Qs1eUpg2ppMK4uWArAgKPQ+ndz8bLuXWGVGEXMWesmy2985a9pycFYK++skG2YswLa/SJR8rfixgqG9IP2vch+vA0i7btO//R7WTSARyswHkk2O1bj1oSYGiqK2zL7Gvyena0TEJku6fPUiL8A7XYS2J67surZyivSHa3fiLebprt4+NwwHkW24zDAAUNYgYoIENDSdMZH0kcdekAv44LR2Xa4G90PXGTxEZjkURtoPA3hkoyXtRMsfEzqnuy+Zv2UjgMzYYLvz3qQHy5PqRGHZF8ZzsUAEC3evPqSwMpLK86csX30PhtzIUfC8M/tmhvpx1axcG40hE07ZDBiNQyyIxGYGNpEIo3Rzb2lV57EvZmxLTlgg0lbiz3FXJXxGCdhmWgEcjukCLPAlTIFWxyuRQsfNEBtHkccaBk/hJxVpSsQYd47NYrm2S3rFsjQG14nYHPrBr/rKviVf3uDnnE+XAJJiZGUeyifjSxxVCJ1UAiKevoXsNKGu9DqtTt8Maj92LHdF4OQ0E/zm5h5Lwb8OEdO7NXhO0XpMD1LvnD532NOjMlEE71wxSR8I4NgzPSWUAWWfNZRqwKOF2WRXgzuuiSWTm9y//LVydL1Bj+RWQ33fe8OQt7hwQxxIOID3j9aWdWs3ZCR7FIz0apiAclhYqfD9hMNe3KhzXvElQPtb7236/jenA/U1Wfg9MFl+duEdIRjAuC5gcTMTae2kJAVzKW91Re1GclZ2nHWYmU5bm+UksMQp2aen1nIxC8D79tPo/LnnyR1ahNKRvHkblkT4UBNPmJxls1lFOkuc/w7sBkhGsz/6eAEeLnJnoKcFSVoyOgkhIly+1LHHmlzIADhD+wZvp0MTExOgRTWL+dp2er8n3rgptg1L98ZetSKHwnpBUJ7NMA/cQa6Dj3N5ilPYEx5yogTOBOfJ2+iJgolT7W4S1C9Zr+snsXLS/NtmChrpCWlHaNXh1/VbnhI9EQW/J2xwqttvruJvhxfaD/mnUHRwmuAxGp11fjgKT0V+tIVDLFyVsVKhY849VxUYpywqu2KJYxEiEJjZ64RDllpKVbml+O8mj7Mbg87oOmwo0suzt68eVttuiwzJanztu/QuxnigZtxhyUqHga+dPWVkRk2yHEI/5xt5Md0ewMjsdfhWdVv97XRUppCy3yXE+AZCIfQ3BcprYuYsgWhBFNTW/3ni2neCvYuRG/Dhv/k8hiI9E6Aytx1a3TAxOSzcIWyIy28KGYG3HqnkcsHha4oSn5gxdM4FvijmHFHVw1EOTGq0b4tpt9I7tijHWz5rFQhldAq9oGyLsoiAeM4S/eIkqSykaQ24Sf6aq4CGof/hZ0cprGb+5SPOsHcvTjGIxSkKA0sKjCxHsht871yGlE0ozpYrnZA3Hv5rIV5XKMjYD4WXymEAT3E5O4Sl4fSW8TqVKHDSDg4hAiiWF9NGdkfCQ4CHVKx+MzXdJIt9k21AULfnWD2wuEzMK48RxUeNFp4q+2P4EgS8CBg7/TBYpnUP9WPmvcs/DBR9liu2/Oxba3LE+c+pg4UYdKTiXEgK1KnvQLKP9Yy8NT+oWKlVF6hLxYeluaK1HNW6DThwJBGaiqn4TWSoBtOVc5qXVM2AeF4nKy3BNrLmKdmrKpLiBaHIUD7JS1TQ9FZrE1qwHZCJkkDwLSgId09mxct9JGdOl3I5R7UBRsO2LtC+tutjJ7+g9ot3ME+1DkpbwBHRPki44QVOtPybikxxhUvZrwWZHoUcjyjCd/BX3jEMsazJc10YTyB9nBjm7KOedByXtsjRPYOE1Evfu7nli2UwdaiHM7GBbfxLymwSNuWVKGWfM0qz80oK/1k2gk6JRuWPbBBIuGRsYQHO4gTSJO/Y/2tUBT7t7vNOgn+0v3ddn2BlfzwK1ADaWxyaQec7MutUmif1NEiFr/kVNBiDhdfqPl2e174dkf02FoCWJomBe/U0Dcu8prBfq1UsWKFifb5tQdDjtwk6fFumwxpcxN6s46LrfgdWi+Ez7N9hUT31p1PARcXXQQ1Bg5mkAlIQ8UYky3hrMkdDiteNmozQTmd3wBvMRhN826uI5ms9HVClMxv3sMvdI6/sD1cpqT9GNXVO62OaIw66iRtu8H+rcuKhporETrWB6fpLDPEBrYjIvjmQaDFf0+np+rlhvOYCPSx+/B9N07mcmT/OOOz+DBtaV3cZ6i2SsSQSsSicoicmg21PsumG/SsPPoqYQ6aurPULL+/4HlV21IGT8ykK0rXN3DpGP++Gp78auQzQ7Kj5psyQQ3PgOZ6mh2nz6wiMWAzS7XN59FNwhMY30gAt7sBQDi6mBTtyKz0NSeZqZyapAg+fQXhg+8qBYhBO0Njwwy/2B5IiND4PCeOprn6DFC5W3Ntda8JT2GhIMT6wTfONLAgmD/0lmM1inX1ihzDCpGhF1BrOQv346drL4d53iv3zS9iD3mGoGc8BfGvn8wigbgXP/ODLkHmOotueYgmO1fletU32qXdaZTldv4429+lK0YxPZIgu+Ad7hQYjj80ZJxOC0DCGiWSPUlbmFIkPJ0s+fwxXfOzWvsVI/MOIhQbX1dOgz/cens6vxYljITWk5y6VZojz/dS96iB9VeRC+ouVpTt3bXvgSPSdcmHoBTgo7FqtUDpM8SuchWRPP+ewn4F7OtY2Flmv3L2czLe1pgmlEb1w2J9RAL0ZglrJohl/AbqX+HRLeOOHRFyQZPmX2PT/0LRElGyXpe1gihSLi8nPyEBiRNnRE5qqRb7pRjiNt2wa6haHveCTuzVCEixlBNZPTihs7UmrLlNuW6ifjY/T0V8/5Kl+vDXcylR7cqHeDHyC+u/emcOdDGD9PCHRvSMFwz6IrhA1mtXxfiW7QrLcDCyVgZrwGFwB+OtCn+9Rj4RRAbGuruIodNR9c+su/04NFcCnPS8cJirnoUmhLFVGtp/8zzezvg9yYgPk7ZcGcW5nVP1BpM6ofA1Q2Hi2cA+betXJFEeh7fHwwfvV2rS4t1p70DxfEQKEAf5NpjEjRxftwnfAhTlJDj9BjdCjAQP5BWPMfUQRMxYkM6UWrez/5wMrzvopMbUy/BT8BiDIeah1MWe6Ff4pWINzU9hkGFwdbfLVzs8O7f1nkdEIFWeFzQ/QrV+ozM6LwBTH2763Ev7yfzSZnSGi1JbB0OlWYehNBST2F8vaTlZ73IVK6tHDCXgj7s8m7QRS5hNRQjcEIEHy3Mwg4UN46sjmtvl6F3nFS4LFRl423fyJNppuTa9WWSGawwFWCgh0RtYX4ih4dfWPZYxEihJVLZTHd1Xbw/WVc/We77KHr6z6+tYN9ejv7NBn9ehn22on3advu0fH79HhQnjyBzEac/E9qfAIFWiGu1CDp6WkyWoDyEEiY74aV+5wPYVoeGhVcNRMIJ9+kZLMu46l+DnqgOO9B96Rxwfx5RUPG5Tn3goM6Vx8aqzK4FV7GJIlhHOH9+miSlFA81q79tIXcUs9bOlqweYEuGJ02Kz5U0M9QmyoD6C3p1daH+9PYsT88HgrgI1oTb/6kINMLg31WuLKH/pxfVRzc7mFgraOG3IM6ORqXH1RatiGeNh+FX5calIsvrPB7P5/v+CSpwCsMuF5lRJKqZdIt0tqsduJpyN00EWh27wpOpDP7V9fX6Y+826UVOcPRv/RBTBfv3XT6kqF2T785azjcb+e1ELWfnVVbbCpBrRbBlyz6tRbm5BiSdbHXgrOQmdz/QmrvqSFLcy7dYNJRCqqZpgAy36s/mPQxVH7NVTBtyVHp9hy7f0Hxd+LsfXxq9KP0rdwEOqUTwb3sIHXvPGBsAo27hAJXVXGFbNfjG5DcBpWNu41YW/pomBZD3uF4S5hyshXCynHc+ol/qh/vq4V/1zEvuyR5+sbhQybs4LfIwWn3oXDIc3PuelvaCf5kYr2Id1RbAOs2c9hJ3Hsl60+KzYiSCqX3/1p4rF2hUOWMmytdzO4wNghkWYltYCSK1/oX9x2KvLJfNyUFf49uxO9itzAIM4vg9AKz/z9Vzi8tYBFsbcH+R+QptB2T38/NMeaLptPnn8U7UVgadfsNz2rikOHOimead6wiRoJWgHczOComl/Cy4Zr/MNgPGot1ZnHbMZ/6B1DxNT/56ujh66G/1gOIkOAUpk/a4o5JCrJW6oTXNw/UpGPZWFmG/zuUWrOHPA0s2U6BC4OkZZ9LXjPBbsN9KZ36izKUAUua9GDIOZyszy+XWbId+kfkVx5KvNe61A7WmUgIAVpUJ1xIOsS9iU2ydgAGLx3Bp+Z1yE6Wl9PeCd3t4fJrfUxe4IJG1I4stkBUwihdfbnM03+w6c+m6ZLQxTAajF3AvlI6KtcgGTkrUXIpW6JJuukLt13kYzA6/mHYCuPcZSfKp/zam/d3liG6aQdXRTuBcJ1PA76dzShwrzz8i0ftI4r4CJFA9vFpsVyctRXx83YjXvVSbFzPoeSHP4iGYbxnAYW3IPozmos8Shz7xvAvSiwU60+aitYzw0uSWVZzmyaca3ttVVKJAlYs1R2D1F56yGgP/Vrv3ztPd3r6REhMjSog6RmakNflMJEnl689seC0lNMqQdFVZ5yMtW9N9AM8fqbI/E6rn20l7/mMiqbdon1zN+Z5XHtnXfZr+D1vwcVKtNiElF26gW4Ez/oKSMWcXb6vW+zJtiJdewJU+gDrrmtUb6/I3YCIts1/lOkLmbqjbKX4bwu1Wd1YYoXb1ey3JhT3NQF3Fn35nk9Y/Bt8gs0j7XTb1gsGU+TOgD+VVpdBZRRjMb7pcOotKgXuqLzvYsCHRCO7mhsJ8bFgwmScTx0f5xq2TGXe+SLXonfWvLF94c0XVhJMPXKufDhFmYQdlu4YbjajZ0mGM2tBXFmMUpjK/ZPQ/z2eegytDAmwSiIzZcQgbmz2OaNrkzmtC0tfP64P5i8+tvmrdrUWbVlwdxT2oj/q8ay8a+Jr2l7Dnbl6NtNPuvX1nKRr74xlmOygaTO+XDL0yGuQvOo4i6attvhM7B7ZvcxXHs+8V2MPCm9KsUDvcjh2ADwLoKA4XJJlejxpb/9O/3QuvfSK8ki4kUZeHgnTSNO9fz5hpn/301SBgw5FscMZhnBA7K4SDCnCcxXiM3OWmbdYRQYdubwBQ+QU5mNc4Q9L5vzJhACnlkNyGi9CW1rooxXme/VEzEalf3tx6riV9Gw/bUkhsUKx1D2pM53pKTJaWsadbqHSTxUsdtPPHAZrQzJrGMv5kdBUxguFZYWF7WsViuoiw5SwnAoljti/LPFlhbMiwVqMqmhnZ1psysTAL5J7oNMIvZlRqT/2/Vwkx01GyhLaAYK6xXloQ9xt52tfc/yQfrbqd+PNdpFBQNbQorP4UymEX8VwBX/6SHUT/ezhdAFXCDYHHMk5icFXr1B/mggsmC2eN9ULHW4V2XyEoJQRg9sQroTqrq9LM/Wr/Ts/QTzVgZMOXaN3HXdq6sp+5VwBwK8DxKgF+htAAbrc9m9lQA3mmwanWLcZ/W7lWHuZLbRAeBSFzGII0NEcaIZVSyBSrY8eKmLdcgx/Ip1I5Q+QoMKz70Ec8PCVCQsUHKQXvPuEJCqxm8Td6DaZQo6NqNo3bIDeVQmDBO9rJB0PZAWWfSomReurjrzuLvf7NNnoeh0wmpBKEOIWyEP70Mouv1Ti08NRMtCfDCliIjC9Ea1dy/fEdBpAXFCAq6yySHSQG0ztEwsif6ltRb6H2+4rY7rR8dOMDYdltWCugxhwFARKomuFVsIT2Qmtk+fahiSNme9yKCNyXpvE/P6xeeJFngSqnT8PwpxySjMz+YNdLP9oOk3vGZLsR874JZ4E8w3vAmie6ls1Z/QjcsHJvHZU8N88dBAu+56zQgHJp8fOfwSIxvJFTAavLKxvG2A5XBIvVlYKHRXH6oTaxmgSW3lNeGG2iZjrN3Dy5yR4WwPbSartg0KjoYfauDUXBVnTrQ47OR0yz4c1Xv0EdpUAkzadOSssgOvZpDpIvyCvr7XYybXL5wyn61tqV+JjkzReGGx8U/KakGqj5Z/LuY6IzOMCRnipIwbSWkIvO6w44LTD91xyQBtHli3iz4ALRGPamusQkqtvSVGZ66p5CqE3mpDpoWtbSre0vyAcVhAnKxOqkulIK2bjpkjLXPWe1BkrNdW5U2ah82XEkZZ0wU08d+ndKxhc6SYDzpt154fQIF0lRmsDOmg1xn5J0uXEYbNl4ppGzkrqFx9SCLICIFxHQqtqbzGp4cfRKg9md0EkF5ST5Q+qewB27RcfJEYuJrBYIXNlSlwuYzagxv0TlGQYUO/KIeWsWYELH0LakA3DTDJ8x03ivy54BQ523GAT2wkYET1hNW7USdKOcNrG9udq/CoV4MdAyGkQFjlUmpuK8e8phJ2lkk4Y04h7tsx8rFb5J9MOSDpdawYVtPkJ9jaCXCmBLhGJbYv4aqVDiVSQGO+T3vAIU/EqIlDkUkW8dzs4OlomhwqVwYBI7oWZxic0NqH1Ic+rBDborZp9KHYdt+r59qjpSboNsDOmQO6Qc3XUspapXMbGXxw3hscHSc1CneyFnqzJJitpZFQxQS5QOth4aU9Ba9qtX3kvRErHAajdLIExzavm2I3kv02SoU8U0KWXARBVUkJkLkOgczR5B4yjk4Hfi7dYcWc5Gy7BCxzI9pch3TpLXRdnTECQja0meRvcHV3uSy01lGe9kQ7wGFt7rf5i4r3ZWkKcA8Mq2fZsrg84jb0PYxCuXvhlv+/pqAbO7MOyyGmgJNVaji2Hts4t8PqoFw8xMwYeE/80tkrgPY2gugSzf+UVqaVe384mPODY4LOO/XpjSWXay0sl+NyZ5x3Z1TwnuNi/uNoZ1VEiQSr3psd+Rt6fN4Eit0ordsA9RZOnzRRn/NK5hFv81Ag0F7bwfpnaA0OSum2nW/O2er0aLH9irdsXe5ANeVjxCYeg7rPOLRn2a+ox86bgQCGNVFmFlHmlk6G2RxXbe7yAa5GxxMU+yAPBTFkDpGrKvnjyQW/oeVS0yYeKeTsnndPszmPNQjib4RqmiGmvtGxKmoCRc816iFyIEP9CfTQ70v7IPC6wWgNOKTo6kX3NOvezN7Fpv8sNMNGrLe0/d4ymo7Z5cK/P2Xy3PHpUjDJx4fLvu4KmxncDyWp/zTLXIG1wfv9mqLgBGaBvIZq3oIwELF2Y0822GcFl0p5soSolIXpaOQIVHdVq/Z+3angcNzkAo9o0FUTmFzvZKbtU7nFRnIRQc7IIKQfwKz1/zlzCJlxRHENKMuCRf66rAeiG0X6jWHndMQsXKEoZ6bGiXjlKvx9wPIi9yML6IMgFFp7Cdt0N4bR/85H6uwB0Opc1Yi/OzfwkNFECzBZZhrT5agiRwqAdy33qJ/vqn4kqhBckqGIMJp40PeH3Q5ELc7vn+pSO4+wdgZa8SAxdwj2pZ8vSyD6lM0QvJ6x5tZ1pa4H+eOKSQAwOpgDtaZWvZEsBv+NidFnc8QIBVdpkjU/LwPd0peBi/D2Xy+kPrjPBikaABnKG8J4wLGmXZ7RLzI/s/Vh2JEpBl1Npsow/zR3LJsYo1Ex/4pnsHgHuBHJxc5rfcFuhVi6peqJLKV0mXfGXFvNLCRHDXD5W3oWOQvw+9b1d0gc6z/kSrfUztnnI3SWFgDQrSKs1WFGUbCn96eXBiiKzjN8Fvajmx/p0366kcIXs6xkm9Cr4VIgA7GMsl+saTz8/y2YHq54akGuNYVjFecgTPMzXmtiydRmPcxY9jbZeNDQIN+cRBQoZjGOTghY09RDftzZ7nIfnE9Q6yG2uMtdSqK5VrHGLfOOd2iHQHDlKGsvRunsW8KxYwabf9RuY1dMEAgWRjy8Uax/iWvEiOpikWFr+LfYgR0mpWDZhrwSyMDVSVCL54jMJ5WLUbyuNjwnnU6SJvTbcaJUGmQy+aONeloiri+PuhhmFMAZSUYhq7/Z5jR1d7Tghou4ClxnM+QAFucfo2pADYCUN3IxFgI8kPCMWZpSJaTbI49gzCM2uCzxppcqLdW938AJ6SnYdtQAdPeROV3iKADZJM9z6avphI5FBfXE4Uip6nzUr2JWhZyqq/PO35aqrShoC3PeHC2ifuMBQASJjv4gW8cE/nvtUteQJ88zNH0kM6Yix8GuFwEp9fgYDOo+MQDBQTaJI9Mz/WFvf8YF/5G4H/BxjBlE9FFEsPLuhw+0mAKDBOWfjdROYSx8BK37QX6IT+BLFINrBh8kprANKWL0T0BiZ4XptH/04KQ8SLbEv7LrEfm/Z5ojK7TMpSqJxnqyg/rY0DDan8AmqYY5jrjar4oXnLYFyWjwnFNFNON1n8JWBM4zi4/jmO/sggJZbfFURWyNAu5da1XGOgSHWJQ9b1zNoGnS6SwowNqYw4/Jsv8Fc++p8xtxV+oK5UwUOZAEkvBgKWjYaNPqrD5O76ryBgG9iqqOnGY2p/q+3ZD7Z/B/YlV6TV4vkS7N2E27ZwMBAxpVEfYL7/0rPalGBDWtBMXlQI1knXsoHKE8d2rh4SCxEr912UOUuldgmsqVxzGrG9n+jxFpDtsbNIshBa/jVai96xmgEfzA4G2I59FGEIt7jTNfW8IZEdrvXEzpDCadCILK7DDaFoJNw+U6Z8V3/VMkRIsQfWqOjGb9SBt/PEs/jA6/VhF3lOB9Tlnkhit+IxQwzN+A99+hqzxqO+MM8XYSmUGYct0Blj3rdYNsfDM5LzyrqByirSHiHyvSaijhPB5VMZ/KG2yedGMNPLKmY5Q8UWopv6WgSE6nUORIxVL02OeJ9CTUp5rmkpUbUlryzPkfV5ZvSWnV8ht1MDFqVGyMSTwZ3SYf9awDYpFTzN9IX1HBPRQ3N1WyW+KM6Xl00yilMXeBQLCUO7DwTscb5sr3lQaknux7aHdlHVAUqwGXUTKurnLgUJN4h9OIWNpEBc/BTujKqmQjl19yGHieyuygaaruL9IiC9AINyuQzjC+EDJBzEP4803O6wZ3+Rm/mf5WW+5l6Eeo/Hncn1HnaS4Pckti90J7rTeRJWOmlYVspv8TVyD2Dsj/HgW+ZAahTFASKjpYKscAPLwmARcLUd/PLgGAQDYybEZsR1t19BzkLbYWzQRA3451iJ2Zq9LoifDAtqPk74K7BthCT2rg1LY/9c8tJ6ZFkyRt05gftY1YMJVK628xELqGi5MaXprg1QFLyRijRRqvpBmJNFJJDXJfSjfTv+6hsLg/7DY3x33Tq4U/1pLKcitLyygejHuLz9y6wbGJ5I10Y8DAzX3mc0Wa+l/7m5KSivZg24x13BwQKBHtU96qhx89N0RJ7Rqi3OH72ujsMjQpyB/uCwfTi4NST4WsKskTr5MXoevQqs84gHvoZP7TVgq7A3TmAUWZIekTcOXzXuq0ocPhk8cqlefQWWdKMJfFw+V7nlmVmKmR8hA1Gj9maRTWONErg+uoKN5TsQDzZGdHh7qr34ATzyAo6m4vbyGLNK8XkEfGJcORqSpgTxXyhLlJASGga375KTVDVpVzD1RoNk6DhfplSmfVhos7hBUaT526Dimhv3a/5sG0IPLMD3SU63O3EOLDkPkAkhZOxTQqAKvm/MT06g23A0gE9iOZ5o9LRDkRi+JBH37aVahLSAj7VUP863Ki2lT/qmQ9o1z+BQF6MXH6zozAmTSD0bBUbKh5lDi8IGwAwTCQinVoY99q8GSpnhRr8BAYhIpFI628k0tFWo30dDePEf4tlDjzX5MXG7+xnRzddXSxLwrWFa+bZefz3PA8G3IPQLt9yEsM24d6KpuY5YaTH0nSbkfucf7Sx0s30n+9q+hJ+Fj3cVD4V9dF439QmpGyWMXkN/tbV4rGHzVi+1vCCn+Hzw71lc7eFEY7Rl8L1UYD7fMX80aeaL2jIv/ZgiCF1nMFc3FoHo9DA1d9occKqk7GeKQnxL0x+INGjwgRX0JP9GR1lmhiExD8juvhDEmSq2DPeUyb2y2IxiYd1ehHWHBBW3YJWCIpmqMaq1BQhBKAFi0hQ1cf0JtZEjzjarcIp/HXoCZ3pUhh8z25s8VVCZOsyFjYzbrpZG2GkoVxGSnMV/IxHoVEWlROlG6YxU0+W/3a7r0Yi8umleIepHMtxT07oTeKMFPFl3HRQe27b5bhXXIM7b9fBVAuXDd9Y7CTyOWhIbndHkASAT9PeEe9iVha9u31J9qlSn9b+x09T5i9krh8inYdNtqTrd9+2z0og6+7sm8u5/BjKI5hohiyXV3+mLSnMixFhfhOZmpRheLTmsx9uSDWWnvAnzeKKGPWyBXokYW7zeOBR6gxvaqSzjCiT/U9CzE14Z8ks6PYnhqUrCTaKAmlEe0I/gj4pu0cgztOlfdnlfuYylYBGiYT+gJsFPQd6eG0HaXcYr5QeSKc4hhFcD324Yy+t5hB88QTNDARoSMrNiPbUFjlrUO2YWNJZa2oGaRs7XQZP+Ldh8fUT4qSJBemGYiTGGrMoKiTisaxRwkEr2lZNQ4AwktQzmr4sSaMi6+2YQsuOmmcQ/vyNAyZ9LKCScapTRG0G4bdihmqz7OovoqsAFDQII83/BpTxlYjkFcYdxRY0muR64S3A6CjwkD/1yE4cmgdno45vvtwCdNx/NxmcfcVbi/55BMTsKuKz11OU+gDP/nrelvoKLOB3dfq9cRtXRuyUnfipHMmRPn/J9R/JT/H9aKsn38V2asViZhA1KuG7897R8lIaTkKj+xxhk/B7y6utaVKq34P7fybtqPZHQnEcS1evrdmyTDJyBg5avtvK/v3G7sR1DyRn8TDSM4DQR0tjEmnNZlmUAoJCkl0WwXuk5sryAgtqoPvLVSvB0PXtYP4htfmKRAjceN7OSRqv3GE1kuSvCvO2Uvd2Ym+ePUBoKcC/kzlvUM4t+xWu5ndTr3YFEoSdxCctXYGPLAH/GwY4RxSt/P8loE0FBrdnm8iZgYs92KDjmngyJ3pwTmGZjhHWTeNY3Y6XsiHq2n1HVn7DUtTqCu4t7e9tWHiv+ExfeCfkGD1ogSS+4b/nKzOnUkf6J+nHFPCEOUu9lgufsR2MB6o7Z+RVxn27Z77pOnC5WvBuyfMPXMBURJpOjH9r6QGEjhHdMh99snJMVw4dsfP7qrmQRDeNCPUKwMfAQkTItXoxdv1kuLbBUmPjTz50rB1kaRKFDzGV9LNlv3QW6MPOFnyJJCFBJUT8S4OkBQ8HecvH2r0vazRrRJjpcqVBFvyzqdETSTUFfDnXz+eeHczRO84vgSASSkhx43yNo8l02YvsvHc4VcK6DFa8vciUeSS71kWsGkUbnUwugOW8C7iUrNGkbfWC+DJuRKcd0BFFW5LnSsbe5LDY9nhrXm2Q0lt9Yh3iZjnE2TtXSJxKpmAP/UvNqspIq+Rf0hWnLpEeujs92Y+eVQk4/tfV8ZZkc7DHgN54XZFCiyx8cTbVbojtQOdDNdeEJyHd3xYkIZfhBSGUs80bmgYEv5on/zCsMV2zvYAV/2eZI6WafRDhXBk5ecvSAUPzjXqDdf1bkZ4qnZZ5JVTaHDfDkKN3qVotybsHtVHAz9iEoIIBAEZxBmfa38ZKiib/Vwi3IJ7irLiYutnYM6t+k0ESOBmdxfWO9mC4sUOHn+QfNyoMtHy0Zam66ANGslSRh4k+o92Z1uYLp3E4R5Q+vmmkcb8ooO/KSZieSeFHavzReGkxu+hp6nKgHBfw6OIcVBo3FRS7XJiFAV7u4uYDVceRc5loVtsIAD3HjPIwzyAW025AzhVIyNRTOjbqCulMfd9dRGR8L7z5zKIWmaXefScN3eXJAgRfZtz2g0M5ZAPYVYDa0OT10+OG+JOdtlX3c0Uo5PFRCas+NM63Q5no1EKrKFW/7ArQdREosPdkV40+mWfDEg+VRyqK5RWsLjVHZoNNbxtANGdCK2w1Tyaw011xyhEsj9HvQhO3a4V4Gb2Fhhv2nHBwAbVdUWW25hMKi3QwQtZT4UYXmZbXV7kI7EdFr/3uxbq1gPoWrwKOyy0DUHyv52yXGw4esGjCdAcfn3Y0MX2Lz1jIsRRYgmRFUGIwTkf+wYljdEx0jJR0Q+UWOv6JzlaqtFrxoq8EIdMeOogyjBvjarHNakdBvmQFpclQv35e288N6juwZ+DjSNyabwkjrw2VSQ7yhwzi/qmJ8tvC/zn2cFvkoVShncJYRBes3g6pv6wTJsYcnALf24Y/7AcHsf1AkpC8suqDnal/hxAIGXWMcT2qieGf6n2nwz0mawo79sTH4rR1JiWAnZVW+vCJqp20c/EsnGwheIfIEBj63tSWPYclLNQHFi3mwDVLIiXYWWI5IAMZDuU6jSiDmAL3M1fyhwGD138PfKh9L9GlfJVeWzsllVKG41JTZKBoGzRzBWkz55TrvEqCTG1UGzocXJWUmx860iWTMmf4vZ7xTpkdWiOnC9e7FonbEEM6CH5vLvRWYitW0YdQtmM3xodJgRV9ANoo3zk1/0ysRQSTko0qDYfnQ3HKSozB0AKWMT7INpQmNg+jmL5gDwsRxplovDcc1qr5Iu+uAaSu8wVKGa9i96adclzYi7fbo2ao1pwJC+uvQqr6tTpLMu/apJtVjC99cF03rIuRgwVc/zhc+HEpyjeKL0NplEUnBnwCOnDY1EFUee6NXjkHoQl7AKOZ2OVjVGyNZp8rqToBortokhnh2d1v3X89CrGRvMwlRECMljy4tJHzWnc7Jdaeqhrj8OhAGnERX/8FsD9afWF7GH5x3xLJFSPweScUa5OtPVcPvX7h7SFdnPLjT2siEDLkfsiyoeVlAbDtWDq/4VuDKDY5eGJk1CSQp52EtRx7+3uZdqyjOrCWsg5X1qDoxSPOo+kda4qdugfQTqfmYa+Cu4MLi/Mw/0ObFoY1i7CpSR0IeWpAoZWTP01+WIC5MHszdpg4dl9OglsdYk2ziQM5jsQRcg5vNM8VFQoE0PL1cRyOHCSeM8sOh5PLuwL1O900XF6/Kv1M034E7HgHPegiJgK0s3LZ6mQ4mM9kIaMih+IVek9EJ4/x3hj2ZzuSA5cl83RpCqtIzg+o5OQgQZNDSQTPTyVCKE0Vp5rKvPXmLCXj0ilQaZIAqXWcg9bWarQ1VOWP0iFvjNFjyBUBnizugMXV1B1nkG9haQh4zxW2UNSWbwjxqr/Rur2PSwt/qirqyWe3qm36TbUN8XeIt1E+XTGssfgiZfoEOprtZ7vVlLn9uRbLcn6IVOgKsPRHcbpc/z4FpolUIl5DFiulUqVJAK6L6+K0yPHS6qnCkqdPgFN7eIH7ZRgVh9crfes0AMCO8blgAplEzJEW5x0myLlT8svW5nUaUl3SEUNbg+gvcye3WHD+pkQxtI9/GAWQbMzkZVy+BN+5RCmFWwB0MD6DtsYTtWUSuR3E2boH+7nY2cTlfSXMAYTNNZ1HTFHFcpnBlHz8+OB6IvjhCpDORXCPzh5VhPKfC+DkCUpUmck2qdeV3kGyFiTyvhMn1fuWwp3DUn2eyCfYv05SaHREy92jMYW4bZ906cZQGVAB1Ml4a+dgD11WY8TXIZRHDhyy8XRuBaP3schR/xqGxDlVVlyHnhlvtIwHwiJMgC0eUnw/Ym+EuZRmFo4abPgdTK0GT2qyhviGOtqlqv6RBEA5vrCbDAlPG6LiXsaRd0Aij2kyUC9R27bEld+pxqUUGy6VTHEsxO9C54nXmHs9gLJnLH5jHu6zkCQVzipay5ZsluSmdz+LVvrPze08ZzFl5QfDgLPTwm1aVA5aZGUBrA35dhoTeKqfZkiMxzPZkQWCJbHWHCOY4aw6bMt/tQGR9lgUHUU8UmKvi9TbEhlF7Y64+BzdadWs5eQINSq0Tr4/FZKzo8UoT2vNhaGaWrvljfCcceTx1vHVL84DzdO3sJhFzysFncEtHz4rf7ESZQ8rXfHUBrZg1r72l2xUMPQ2lZBSSIVU86doC5JEaSMyskJ/A+pyUIGAoEbK63IGLyiRQoKw+S1ag06+v5WeImCeO6OvQo0ZplzQ0YTuXj7oMALrhdqWSPEr6mH5ZUnek3abLYsvKpex3+q11LrGJ0RAimBDIdEDtzkXbgPF4nKNk9gAxFqyjkHlsL6bJMmJnuzLcoA7xNAZiR4kkeiv9/FJY4oGPmZpkYimcJWxrjHBlaMt4NLZAMt4B67Ivnrwmc7jDjpXGo40ZvyxuYMExdt+jPjpXime2ta8bCSi1oPzlfYhfaGn4yNApPCUsSg2LYjWGnU3kEuq/SQDhmeCAle4vbOn+cDUSYItUgJeMjlk2mXrawX7ucUTbPs9IkmOXdeTXSFSmDgDD2qhNgFPQe6WXQ6Zb2pa9Iw5iCH6Wh+08MUm2otfIYbuZFPusfGS388QXNQ2F/rBvS7Jn3bMnRZkUaEsMO/UE1djlsE2agirtt2ZIvAxrdjJN2V3kpL/NAosC8mst5qRkBhwU7LWYODC8wi+L6mnQ8i8ntsdicmXkcUMb4MDxJ1P0kUDgTTaVzWlGSsbOXzpMmbxIXef3rV28tzkSo1MEKcFj7nA5t/Z8o+kVDUt/fjE5c63aR/QecokB3VAVyGiZwJLaBV7aNx+b6ynem/cc+NH0mpz11A8FmG+FWvUHPvKEu+ykDepFm3vkHMz9/TGgMqYp5h3WmpPaz37jWo5DY3mFTrC7K59BrGbn2ZpZN/d/0g0dwRh/2JyGFv+rcfWD95BwBx4Yg7HfkGWdz8mFUt6v+nmYBheTrcuJeR8uXz52PUhvaYNJ/AzE8qGVy8h+iVcFSsHQxOYoN4W9iOOfvB1vduEh72rh+z4wpD7leyizEeVKrJ2tXup5jKoRtY313VwiifuXK2/hX6plN0J3knRmHsp1FjJdj+iDJNT9+INDsxf2iv7h7RIPf1uaA1iyHZ58i1JgRjd0ZmoEB5/DdhkUJ54tbBz9CKq6R+4C+h78+viQp8mkSgUMsuiUVujSsixdzRB3Uq6ZUTOSfNkZdITYAo6VCX1Sx87hlMuDIYg/UZjab9DaFkZHySl3307dWy5OIgLvb5rmiYk8q1wwCtIdFcWskEi4MCOgBjnfdXp9qoN0oJKPBUDLrkb6ulUbvoqUyMZdgeTaaJLmxb2YE4Vg17oc5ndNx/0iWIv1/Q0IUku+dkFEHtoG4bJqYXJ4oyJ4vJs+9I0Bn6H9KtJFHaGYWNdTlt4LpmTqk8G8mKPlhDTxOuri1pskg6zJ8CeWE6cc1QV2TS80l0pTYsDVU7SKx1GOoGjtMVbWbgDRZgzCUN2Gckygg1Hde+os+5rk9CuuRjSPU0V+nFtPnpCc2xdCV+74HNdyivrSzKCI5jx3OCQ9vzlJ5P8PSY9bnO3YKOtYMldLNjTiLGSIcXIJrCY/FwOpzVTVxQSn0rnYdaA16C/9yXUv/8GhfkLmVf9ZHMawXEXy3EMgJPK1RxIa8KyGHw2pzr5sFpS1C6oa3pgCQzYW1lNe5rKYhKJpRuY7MP89UwXAA+nS5avdAYNDD+lzFAHoiNWH5h3k6zZ+oMUflzySbOwRCNRDJW5k6zyWJTSDU+CGCxAkvi22gf1RsCflC8qehXuy0JjddaF4kbKhG8qvq/gOGaxIQJXnruA3RUsYSNl3OWZKQW12py0l3L6gfv6Pl3GYJzeCLU+xnHuFSHiOK58EVbh2RW5xaw81Ux2Qs87j3A79T7CoOoP9/5fTfh3Q9nW4o6kLxmw/Z/btnNPOa6d8mxECvbuaUb0Yl5HBTbL6EayjBKwbdByEhcQ/HVgF/CSRocFfzJM+GQRJrzvOvWhzVjM+c7HWYYoiwffqlrIKg6j+n/NpyealFRe1Kyd9fOanijJ8od7MG6XVoBGTCnt/a5MiM46a73KjNSy/UNOHQh9mYiCPUOer6R5byvPbw0QrQS4RGl19sPwA/ZTxSJn0g2uo3cVnVExULO4rb+K8kZNV+3hbdlmcaRnj9DqMqxZ/ECy7Cl8oNB+RAJd9M33FN0lS0cw+ZbEB2K4D72jl6DJZ5R7SZSseMwaHllnuq4PAfSrQ0rTFM7yIm4VFVqop26FdhzCGs2jxbCl7Xh9b37FRcefMf8aWQTyMMMZW5B9Nx4awlVJLbdVYHPXfaGP/ec1ucNZ2k9uDykS3tqOS9gUhIv139RUPhJ/CCGgbxWnebVpW6c/hm6SUKddLK3vpaA8c5BLSl+DA28LG4sew5m8tRTQ1s4L5YVZTXwhj+CW+nrRs/hCkZs+7xHJCVyPXcuSLfptpMIKC4uF1RPW09xBqgLmAFwh06nDxeXkrapeHs1QbFNHA7tYuz/Zq7zpQg77vX26LiDKb/RR3zPBrwJUWFDoq9KpTFVEAgwZ8ERH3J31wVEgivbTpWq1ekGyKM9/sNRF/yvsRWGvHvE/jZ3s347KmEDxEeTMQYS6LG8WZDktdOATGXJ/E3qQhWAiD52UsmyxKCIXS8XOtEkYjtKttEhdae6renisqn/i0/Ke3PxoY+V/qel/Xk9oj2aJt0g7rDnYh7i3YVhlMtPu2r9NPTvBh6Uj27fXkAc87fg3sK6pZ6i7TkyIyIh/cvO5QMHCNfeVXr4wRZKK1599iqv+SY03VJDitH9R/OYmI6S0yKPfRiIvST5I7ioLFNNvE/2ZiN3X6x1KbnY17pNzeuGcTogKy4Etb36mJMsYxvjcAE6iHhsygpVrUdVyqZE39/w0GbIfwnLHCgsmFBlMxTkDS4dha33CCmKMp0uzmqdlAvEjygMpdLbLlTVS51kUshs4iYj3DGmM8ghw95sRubEkvDMwOB5Ec0ynRuJItvm9S5O80WrUSNbGI0UDVyJSNE/FZRJ2rWqaCRby9m4kQcECS/yxQD1N+aivEGPn52s+WavqWtr5L2X2qP7LPKEIomS9V1uoud6FOyGkMGcHbfNVprZL97Deo1RtGskaaRK1hzt70/05tU3gEMymF5WAystkf3OGgFFqKJzMB0pyydPAVlGC8w2hbrbE9UHlc3WBWiW2u0nRscyuo7+W+VGfGwo1RiOPbxo0P0mhRohSoO6Zoo2QQ6oRtOFaK32j2vaWFyxHAjYBxRWkM7bwcpBin7bdy7i4qQvSeRTeJ0J7H8J2YPWtAaTpETA9FV9nUqmZuQnu3M8l7HGvJWswXgImagf4SYGQ5r6IuWPM1NCcNOCJbQDTv8gT53VE3QIWGDftVUaFsci0pkoKIq97beUpYxxG+Tcf75k0EPCPn/v3/XyXuHmD6V08k2dmZX4amoT/GrXbgwhAUHyzU0lKdn/GpfLPW3pxCoorzyRQQJuLTCgRYdebhActZ0u3WK0yBDLMD2oviXVolGbQFgAo3wlyEmibcjJqA9wrbQyeQkjmUy5TXuOdqjIRWxFH1ki/+fcqgKOhYedWUDSJjqqT61NxfZWl5DjQya8iN0fVVyurWBFjtpey0l7tr2rxUAx1DiZ620PKC8tg61BTmBwDyahEOhwP4zcKdTdhT9FASekgC0J+qIp2zKy6ulgwlzBW0R1WSrfP4SfsBvdkvgOXUGwHJ91C0wgiFWkenEwZhlW2IPvgtcDf4cs+JpRJ2WC5FCcrF6UQF21QDmaar+3jKd2iUZvcsFx/g9P1RDsUSq6e60fZa0qR8gjNhYNmBA9B5HK0oXuNm3Xyu3Z4MjsPnq1JOZpGg3QVVJzXNpRG0ZaNAPFI1Cfu3MCFxMWSTaPI/E+rEgmuXsfSJszOGlGHzPjGzFSQDt+sls15OOGXodmqs/UHJ7dMBSgJdX2emLmbR4oJN0GOr3xosuPodNzmKuxPhWaq4771FlHg+ltPSDU/tDM0SppkHHuPou6FMdQX5n4SDPUZZWeHXszllzAck3F0cb5j8GjO7ZfF/q1/Mh7+Apso6yI5p+VAjPATF2DJcdb5t+7y7SPNO4SJCPnCBg14TkQXUTNKry7LxMCTbeF9HV598U42t8dkiMdxrgqywRfySMsujEgGNZorZ4TCeycFA+6d5QxXzb8ybSu2cMBzAWEIOMK/4/7kaWxph598xf92jc+alBpgl8SiqjKBqewqwEZE/nq8nrhyBYRhdIRqke1N9R5l774f9KMXf0Zjm14FCvEPNajSCOh8g/fclqadqJcWIovrkUJ7XLB46wB3qR+ysO+Y43me22F44GwahBvSajiZPDXOwdix7s27O9FZ/33Drx6KFleB1qhO1EW58sIw74PuEWx51ngfXyCGCSHSGn6UaXwn8gZlcNslcAGGenaAJoHx59kLxnc47ZRuMA4IN+UyEc1yT7QOcxq+6NIsfnTs/1WLK0YJHaWsS7axPUFwXT+60+p0bCZUIaBAWhyETcMkaBCC1+G+woLtIItIfkR+c4ndrxG9YBzHZHA1IZ+q2dat1FkWG8Wk1tvm4LWOOcmWeihKWv1ox7ZQhqgY507mncRk4J84gvFEbLHhdQEmSX6P5FfcUOIxECbYV4XwuROTns07ptVxIr7RJPq4kQ0w8mNzFxoPS8fe+5ZmHZjhHvEqbOW7uStm/BgFTTRQx/7sdXBTYgerZEW4Qz8KufKWKfFyTGXuqNiOE07hIaHMYxozRlGiodJgU/xf5+hzUpeyxMAFA+hVJQ57jNKtNUgSIzgnWLOhSKEPbsata0hP0PbKJytfYNF0phqlxwJ0i8goYfGpg6TsxdGGKvYPI1XmMy0bDcA5nNLLxD1sEGlCL46tIfVj8v2JMZL2sAwVIQQzkXI1L0lhwrNZiyWG5PFYNcVrm7XxixAZuakY01JPb8K2fKZykRsPSNbq3C+AHuZIXID5y2qJrJudqWjAeXzFgEKkfp8c/n9BvUlI+0DUlj3AbbnQ8zIuOR34a+ahjmPMVSuxH0GLytcRChvA+6BJGNGWoV4UmMSjQ7YqcenBJXVTu46OFkbRZ92+0HRcTce+aKEAJI0K/rp1Ws3oX+iE7JvmYLFHETrCcS4c63rdQyThutWqDXk/4PgONbImMZDo/q+3Bh+dYow3iNOdS95t8WNH9kWVPmK+rGLAUU3fsTGNt8x09s6eDi748275Ecug0Ji2Wkfm0wow/s5n38wwz+oCKfG0VsQ+8jvVsXCbb6YyixF+E2hoAgM95ChZNEIOfrpkckuhZSa8YMMM17tiiFTrXARX21Rox8iCjI1TiNqhv2HEQzZjcNcXEw0G/hqfKalLbqSFBcCAjHhqmHQ1frTUfC04LEn3KfTcv4hmAnO0KOGLiijv8MAbHJS0+YhSTD3NJZYNsWaN0fMRmeB2Ae86QOshHLUCNWs7M4yGsP9x2ZmBeqxlhic/JO7WibKf8N8fa3zvFjBoI4FnQ9yC+KHxB5436wi5/Dq9EnC83fpSAA2wDODuELYL4ukTl4i/YG2YyuyM6h0urYSUKFp5xv2REqBXZufkHdXF3+Vz64jvaPwmzHhs9QeDhIixombtzPe265JvHeVraS4Y9qFUBwClkj5OEmlazNr+8TkYOs1JQ2XNvq7861KzOv9GPrxd0XKyGRou2x+iw72Xq0sRhacdmhHimchAxCN79Fj7twf5kx8lJRBJx1YmNolutrG+cA/qYOOPpl2UhWbZr3eHwImjmRGz7PyqbnFBUEBpN9QzmYXwSt6XXYBLvLblVfySq3vun6bjvBrULN5S/OcyZOMNZve3/0/egrK7JUaVfpvGZTjpHN0W45jfW7hTJBnku2NXG8eDloJPGUWfKgqZ+iWLPV/X++DrrIK+UL4TCw6sSI5uyp0RcBWYWcAIIDApLqdyGDOm0pTwmgtnfgbZYiBwOISRccNTFTeD3Kwl3W9dXL+wPSZ9GkSAoYBMCYiNTFYWUtQmeUHaq077RnBByNzzwWMcbsD0JvLDKysaRGb35tBQzECaLdn9nDxSs0gsWsUSX8KQAXla9sVDoLtAzwVYVp80ou+u1Nlw9VOGsfoCOYow5k3GnEmEU4NMuF2UWOX+Nf95XqE1FiUE6Ae3+xpUSAVn2BDp1EGIWOWi/PN3arclcRYRGYfF+S0bCg47kgqk7zzo3HO/fM69DmvwXFa2iJ53kq1pQNKbiUt+ilUveqO+RGgtF3lJ+EyKQY0mj+4YDtCYj4zjF0l+4qMdx1UUbyTwHNRhHRy8gwlj5ruDdJ6G/sKa165fMYmmMMxMGLIMTexk/h/+WfatrLWvksYPYSxo+OrVLtd3TPppBGwHEoRz0N+EzMZkCfGfWcQ+7eZ+9dRKxP3kFdd9qlcZFVGl5E4R/U8Eg410AhJSKT+YIjPXQX7IbWaLrgOEVh79Nbgu1k24I+1cUzal/QxIuLBgws54aSI7ymsjdU7qqEcjUL2c4h50ZVkx0NtkHUDSUYm2FcpRY3jcHLznNPLqocJPmew6D9nTgXk84oQytyH8Ep+G5Vuonae+gU0yf4sH26nOa7TaVVJfZcral8192JZ9lLVwdF9G5YaeC8YPnn1B3utAfn+C9Zf42xyuQvTW7E6bI0XHdoCrAZRQL7viGlawH2u8OM/mupkz0WzWAl6rUkehps01dbfUWrnrVLtMU1HYiFEbGP1Mz8W00pALTfXmH6sjIcFRsiRK3qUFlN4iiQIkVKoRNVquDmzP79y7Wt/ie+MyYkmXJluH4gqN+fMGiKt29Z2PTm8+IQBpQwi5nOIeuunQ4t2hhstaL+qGnsSD27FVkLM66bi/38+yaK94Z2hTQ+ZEhnk1ewP4Y3kc1IQBUmsYIvoS2yS6TYN6nAIZih/qToIuzAt8jETM1ct+3hDZnJSVTjxrJr8tUkjsZS93O9E/LX2ebNnhywW1UJtxSbxE5AkAXLCEXVH3mNJbzx+efNLXZ/X5s1V7iMheAIUjjvayNOmgrKthzDSLXu9UMHPD9NqCeUJIc/EVnjGNPy0k9iqew9p4pTUaSWGq7Z+AmBVa2qd3gpe3k1OOEr9LL7NSd4a1zcW0/0vgDgBa/1FuOD+mI2f50WKYgmgaz/ym4mJMUq45L2t9t+PKVaCF5QpVxPeWbwzPza/bo5FSLnbHjSALP9wSX88h5ZcDE4ZHncEA9ndqI7VzcM3a1q09PpNFeoB9nuIZPeugnHyUVOC72pbGzsaR4N4AyHcdlTbNYG2+elmYCJqo5bYmaopOtCokOc871Nokdpqjug6Cch6w8DdEc7qcWFz3vB6LH03ilGgHr8gtik4x2MOgFy/z3b/9vwDv3edlkzdy4MhYgFk9YpfSCmXK7EcK3NftlPXG85afMOnAP77PfWuPWFZj3NyUQn+U+MUgXIJoU79UV2GPc4bMcqi7JZOtBgPmryH+IP2B/vDEZo6BB6O+b0mS41tuV8inaDpFf8n8y9Z/LZAIkV7kMszI7P3lXoPnpTTf+CUiLL6WywSuNczULXvVHWCXobxIOptKWNH1eyBgHMweBM9aZywDjyhztabnfR+xx/HLnVGxrxSIWPa1cgTiXqOd8r9CdRrEhgk++qeYgV+dC5ox7dipJTSJAyAIk+Qyh1Z5ADnJInl64B4DUKJHUG/ih83OLY/nO2U25aHWg0b0+NL4DoEJ24MwJ5CBPwh8lD/QuPzP4LmPtBpEeIzqhejTt1AjfKFjoCRdmhiC3H4+AlMQ2HdQVrTBjDBFrd/XWvs6G/bwWPzieNxjNZKpKVdeJJAEV/na4pX5yD+GsDzwDmP+UfZTCoKdfRa7DwWnE47Rmwbz7fPYzhfXSNoNwQwDU7CkD6b68v8riaA7pGRQf0LQl99iEeJS4D6NDoWxABPCyktKM2Z3ymhwsVaDeYkvwZLxsLywABF/+2n+vtVqQaun4Iu1KGHefGlgOPRFVum/4AQs/apOAg0VLdXZp2rw4xHMmx9MyvSXHm1DQYx8Yg+FuP8Me4YhM4yK9bpaTMfpWs360UtulpxHOgS/x+GtHZGgMbjIt9gKOZsdf96ck67uVb5eyfGjgvIOUt80jsaHWDFrEAzlAwWkclacdFIKeLGGRFuIJWYq4apad/odEoY8MZQHGrr+KOz6+Ma1B9oyV5m3h3nkpoT24RC7eIUHpHO0iGhuo1Oc8MqIhbED8AImSh/zz61O0u7SVWnlWmwghBx7bvyPQdix/kqX0eLgofz+NrBmVhVM2dZK7eTAluOLqekvqNTgELR/pNrM/xaolLifw0aPFDY00Ze8rh5XjWfLXFdao6GDlJ2n5lFliorkAJ8SG/3Qnl+zcBe90CZqe1AH1R1421lKxaSGeo2MJ8X8+eiqEk1450zi9RygZP1J/kWsFdkME/EO0TWbr89RgpkmYsD7teey5w3J9Sx6m9WfucwWT53L45RTZzPKt+9/RgAK3WKxvaWZyEu93X4equiKBbmutf7+42uTXta8uGL7QomUxYqQ05qq85bv5KlIm/V50xK24LyEhJmGj43eS5gRoYkAfEmzwx9/0jTOFBOuodrqRsLOU7MDOpDzgoBtu6C4UgkX3jG32/KtFvJdkOuFSjdgaISXUsMQO3nvw88pw5218wuAjY8NtN82lXQ1uB8wakPfXg7eIt2UJ8f+bY9F6kaqfeT/f9ajkL6SSWCXP/B1J5JMBD342M8XcLmRyyh4u8tjieRbt/PJHU0FjJx0o2rJpN+2FubDDak/MQWl715VDsnsKqjsSM+hoEHdreGA1+hBgYk2k2PVXG8pHUCz43pxZGuci33iOG2x871pCnvHb7LjpmFQBCvWXycLZDBI10yKk6oOb/jjQy0Ozm3tVT9p4bEsuDWrB7ePBHXR5IkEmzrkF4zFXnLCW9uC1o9flls2zBRlL3p2is4596NXv7Jukq7z7X0ey7NJ9iDkWisRXZYQKC8myJksdU47MDTNLOB8TOD0yog4yxQd2CurXlUA6j4PDKHgopeX2XziMzyiT1OSboiJZfPPP4FXq985MqrdINj5Pg68NiVDCUrjsF+ACor6Nk54Fc71p1//ANOqyGV6qYFKB86MAlOHNOsRtLdkvvYyhNWdd+pf6z5QyeDH6WGf6wrdkgMiiKDnxr1ED37j7j/Dn6VHiLUO+aczlIJu1jXiM9Bv6CB3zvPPWjlkUd9A6zeQpe5YG1HyGnvZq8K/TXg07TM9HqlE4N4zzdqtwadywvRLxinkflxBddPoB9Ck8ptCJ7zsR8adIbGrIZ6i3VNRIHho5rmfhgWUS+W89KjO4DNXvM3aqMMgSrq8pJP0rPH/JO9H420KBgyA0cdIbdMNrYkvm6bVrIS68wP1Lcz5lvSp9v8GQW7xLNBxxyZ/G6AEUkuW7T1ndmd1ptWdPz6my7HVVHGF/2VNqZSmdTqzrNDq2EHbu0geDw+I3LsvAGybqS0dcJsdCg2+xMy5PkkxbB/MYwuevOlPTM8T4DjPZnCfi4HGBm3bH2cYHQdtvG0f5jW0DfDG+ZEId7UD/oL+5yJ0++boxDKbL7TMnoekG+WAdKIVYLkB3Z+rTyBfbplr2rrpqMmd3DovJLxbLJq//PBdDLx6Z8UCHn8KTKY66vDozyowrsfWDehwHMj91fJgIHbX0XJ4x0kd/WJcwgcAwBgoF24Xo2AsMM/E7THPU8wMMAicpARojgwXlbSc6S01VUBR58/cPBeRQqhPhjs1d2/LSDjOYmNoOTC2mbN6OXMcqVdWuAbMk9zuoyYuBcd3zfdW0o3macTNrhOBRGq+F2Ozpt/YLXDBiIu95sTxN+zwQYxbkHVMdt8nzHv95b1n/HwQLELwjlYNMJAtZD4CBJbjl0ZoNNgenKRfwcWq3xoELT0eRaJIY63uoBdQ9Io3PDt89wzGo5U/b9NC/rkPiHWZ3+1EufokrmdRSlWLzIiQ0Wg0nKFq6DoUZHB5toM/+OrWo81j37gs97WIxXgsBExquEgFd2NLXBHgXtx11OVVz5FDaiTLg2LmT7/KfVTwU5UyKIJsOohyxSFgIuW2LUGLntIIBghZj5YdcrInKm5HUll0TlZJm5Mf0kwHTGqrzznoQLyUznzFNMFDGGBzMnlZYWfoQlF8Qrc+YqXJXP22Z4H1aa1/a+VZLIEYXGCiYXN+xyAfXqIg6ADLuiA6gagpUL9gPtKKVpjoa5rb/ctoMETopH0Nfhu9/oslvORI2l+fXPMIEpzqCj8byHE7EJa0ZbSpzGRIQ+irbw52180ntYZqi9/YqPL2+2SEkpXjF+ghvMUyB9UxwZvw4Vp2VMhbPP9ydDHVyCElZ7S52OH9q7IVaPXfJkRMZBlcOsy6SUP89MPMNTIVQY7DN3MJbcx9EuLDvLFje7axvl/YLsx7udeqsXNMGXW/y3WsWhO4tMcB/f8u8QOuTqr+TFqcahau66u3GRCjNgkq25EPCprelciamAEuRX90SnsGTP+F7C2PnXXvkq7qLmrrfik/x0DJ/xqzuYRKqmjSfnSFOFH2kSPMCvY8DryyXMmirs13/uWB5XxqaxztuwyDc3/ZN+JG4X4TvokekYYiV94k9+sXYKGXPcgNcTJuctvXODjn9uGM9VJkHMILKxAjo01gTTmsDZleZjLoXvJ21Lq3llwebTmlZZ8yaCq4mQctTiQpk4IrlZIpoCqfuavNFtuctMcYpirmJbpyk9fNugd+dGOiMVtPTzK3AB+49ECCp843fd6LHz/09JxqYIdyfUYW0COday3fZ+5q1ZZo21Azv7P/L7rLycdjo1m0wzenJM7mlaJt5BetTUorrkq8Sn6hXpkW4aQ/Z92qc1LnLDM6DpvyY9iRnucLp8YeBfY3C31foiHlddG5C/OwswJ1OGqlqmaiXU1rUMuNMq9bU/utR1IurNUPXLTtt3Yu4UqqoSNAvFcs1AGcbS+iKi8z5Q62VOPuK6/UOUio+kelJ0pU0mW3Jn+YfVhBSCLvKdm26jd/4xi7IgLMs6oCZFbVXlpO0ot61+ykXHYxzlVyqaaeFyCW9MuvIcj28QcFmFloroGkXpRA5ZoZ13MOmGJ6KHOsMQgnOPddg6soI6yIzFtyyPKsN7gk8iJBeVgHdqwveesZXtkNEJCwFNoq8RC/dDRi3HjhGnlBmJ7J2L9nf1LJvxpRYtItvRDAPwj/WDyxgJOj8ilpy5XgCiDxjYAcbQ2bJarGSVWcP1ana9squufmc8ZLfLgO+mj+++XrRJk+lqNqKQfa8n34/TJDdWwrMb0LE7O8sPXe0uX6/2G9V3+cUAN/Z+HgR2crEqVxzgv4uf9e1yOwKMmvk7JS0BRcctzfAZwgb/zOIlyxjFG0NC+oe0oXZswui2EZ1UwgCuG+WXTWGeCXuRHuUhDDXDMEjZvEbQttDSCpKY5O4946/atesLFKZHzxv86vtwHiDge0GgZKDsNFkkwjHNtABPFG3znnyRWn2ykR9/4k65lNEdxHV1OSQAy+War/Clet4cADsAFLs/8BqMkiFc5dhIq8ES7viP8lFFTSUpxG38SeuutAfVNxGqCLEGG3c8wnoRBtTrle3WxbQmKJyc2+FcyzK1cl/OjxBrwjSJ6a/4EAvpvBbulCLSjUDMBMiMahFWZl49YxonNI8kqjqMbb7UmHG0D2lB7yLeeZfYQZR0SWIyTzWdk7Q4IhiMe7UKk7zAczq728Lz8hrseaKnlVlojyq+tvpt9Rl0372SXTbJ4EjBYtV9BCkcFETjxsNDNsC3FpqkkTPTKm6kJk/s8PI8opBdYFW05JE8OL4KahAmGna0d26CptCBxQAvo/TOGPN3lGF26F9pGW9btKle6uKHIEQK4nKbOxeddqI6ETAnbDQ9t+TOgTICD4PfC1JpFziIPP3Cmkpg+lTY9TFGWnWtfmTruXL1AjgU7woCOi0uJF76nSfB5DoIK2sIVAypmxwwlJK0Y6PvDdaIZSoKufV982ti46q3fAg2FYetm7cVEoQ9rm2jGPM7peIEIMiVJyyVPZf+TVn4CkyA5ECdMQDnok/NHf4tfB36gwFN0f1Ep2bcMajemCzK9o7nxugSdbD1kJTXhuf35BGemiXX4Z9qnRlpp4+rNS1ICYsfZZEjW888iaziecHaipL8OKZk2Umb4v80SXrBFV666DH2kcDoYxefJdMhUzu17WYFfgk0FYZZ/cJLB9/wm4ck8RTLaKOQyCl1jl9sf9JOS3SCYyW+NaFReqU32PhSoEzQfjOrf2MDIodKp8p3WEymTAPu2wzaM9FNsr4NaBfSzAp67EccIN/vxvFxhjEFRBdmCdjWJ3lP69n9IIEXhU+G64ulYYRQ2/ICPP3oTPtDlG/uHTJeLfqNWO4EUjFBhgkzuIQg3bJjtNjFzHazmD6JN6CfKZ+nn4H1+QEXHx9eCazjs8eagtKOFzXz0Dlfbwzy5bL63LN4Pf4BPN9f4UYrvqBOYs3mSkVIOz9EnOnJqgOW/AGpKfVz65Xza/mtMAGMKzoMOmvOrKBzcqzRRKuNpaglMHCmzm7YlZ7EiNYyEOTLa9+R/FZWCyHXCZ5SMvWBIpxdLq+KLytExzZ98Mz50iJ5PdtUiFHPR+Bfca9D7g3gYWAoYhMuVtP+H+LVjOHs/wVVHSn4tISryoaSBz2pCqCz1MuKDwGWRLUgPKeuKNyuxgOs164LjYaLgEiBcyO/L3WVPxIFJSWxYr2pQL5NxYSV/Sg+oU1kQNe30M2QKdO02WoNV/OQxd4pVS0MgKe9+ysQ95nx7hnEFWlvowXpVSO4l/VcMxGJ28059iKJuozarDaMDPXgNvh38tr8hcg6tEbkAGP7C+G+nr9bRJ5/9j4kF2Ib1IthPXFkkmoOmsol9HaN7r5Y5wyBqeylyJHqUY+U0/BRkzL2gi5LdkzcMmphbhVfvb7eNcgKvjqnJn0Hwu+xQbTsHQlO4ZNrXJeKGE3417MtjmonPGPe/rMMXzEoGDM+IRF80+cdhno2cGLuwKQBRNOyUu71mlmNIws6dwTL6vx9owjJfaFpEa/zyi+14SaSbUQtg9GHarQ7CZmOuV1p6IkiO2aC9UU31ZLvDqHNCV27RH2aSTEYRgzTrQ6ZEekJeh966EWGMHQg3q9Dn4/ObcP2tCo2SMGNbjs/LthR4JIMxsN2d6lZEZdQ9HtRdqODXZyHM7ktWwHTdsUGl6tjM+TMVbLVUhbu+lXle5GQ4/jCvYlQ7HX4lvlfuEQ007HV8dgOJYOB/8cRJ1sf1m+wDWje7EeuBZXyh4/pMJiT1UcP0t2IphoWiV79JsBiadz3gkfdT1KGPp6KQQ6IScszTLNRGvOJXT9KYH9+O5U286RYQycaaLVaExco2DY4QNBJmbCkW5v94PTRsviUorwV7y1mB7wXnjTcSISRWuDMD8YO5vSsS2M+PdFuNcqegAi085JEhk1NJ22BTITn53symKzpQ7OatmP8M3C45bnQLqPLoJoFzkMO/60MFtxskwZSzw9LFAPlrfODOxbIGczhMBG5KwkN534t9kjySkrzwAK7kyNmzgea0xxfQPzus5K0Tdhsouq5ByLIdrJ+ggP4not6tew/KC6aeFbn3RmCXuuzGFV6Aen8PKfJvc7yKl+UOTXeij6f3El1ZF5Wy3giJKvQxhhehQiTDFMZ3mbq1oU3wQ/UC0WWsqs/97dguAgICAgICA4T76PgClJN4RA4pq7WwcJqq4u9quxocwWqk7lIY8TmtPc62Q0f1Hp14R+tAW8AwFF7ce39elliSRWl2vUmhFfFq30VdWpus5ZMpTcnpNcrkJp83k4F8jUvjGZeyQB2zgzOX6tXKVtAH+7jm0zRX4QSyddK4qcYH93zr+Hiz8/Lt2TvCQny7eaFRfRxuBv3ePEiJ7KG2brCh3b1GNmQmqrHupzrhx+9mvM8uvPKBrGiniR2ABW+55mV2CLXvL+eOnMrQ/l07ay2EKcp3JWRmBIZvVleqZnrW6BEBhk6plyxHU3Cf7Ut45TD19uJOMV787D5nEyN6y8cqDcttuNnsFlAaR+A+fRK+hMJT/WDrPmLws6ZnwBK6gAzpg0Oq1VITceVBbrN9vtTX2/Yif8Osm+37RH67Vf+HqEd9v2I/7/tuP+Hb5fb0n32dfMfOg5/h7sX8PtZN+3rK/h9ljfZ9jx+30o9+37Mr9n2hG/Z24/t6Gf2dZf7Cvh/Z69n7frQd+rqH/N+tS/Z9g3+r0Ue+r6uj9n13W/V1/X1b1X0+mv9J851VCdWbecsV6E8riA7deAo6eqqMNz3T4HF2zJKnEy9FlI7TBNKuIveaUuOa9L5Z/6MTG9A/lVQWxr6UvVbIczHHIsLz/RDFAnuokpiR14hCC+Kx3hDY4Qus4mUn5TsSlREWF5Z9i1Sz70u8gl/WapZSH3swQj1lKRTN4dD+WPFVwR8sLnpl7m0PiH35EbU8zs+CW7zNr4eGwSnf5KiU7jRkxjvdRarsxwmOiC757Mg35MMs9iHP6fQRJm4UwCMXXKHPb6TrHqEA3l7DmKPvKRdQ8s57mtUZ+gOXOo/Rw/DSdKKltQI+pqKJh4/AvKsXroyunDp2wDfD0t3KrHeskNpdH4jOwRtLbpSmMDI20d0v1tqsq/lGME4ZDNqqG1cZHU58tpM96tnLN1kSxRqBeIbo9XiVkW57dtchZDzeg82b/WlfYj26KYfuX4uqArECoT8cY/gY3C3nOQ6aU0MZbfEaoezscQZ9Rj9UgDDTyn8Bb8wN/Xjpobh5h8PKFgDBaRfRQepG2Alc2c53mhbG4OTH5wJA0T6YxIvWrN5yqi9bewnL4Vv4JbjRDaMrNE36H7rt7ET8Y/SR/tBQjmSwIDptbiuyWB9duSU1bDEC8trqBueePL13godlGGviX6fPZVWG9Zf8i5WJLWAXr0dpp6BLT0ACoIt8OYEI0dNY87aA/zICiaSUYS2j33zCFhmi8yNB6yx+eNSTs/1oGUMVhslEIBK+PWE5vlcwWxo2M0DV06t4GUpHShQzPxGjuidi1angAJTIRgUZl89ZqLswbqF15J8m3gUenNGM14cq0gyxT3WoOSwX01P9WWg+7rxp5+B7WJpofuaJizh5CfPhsSR7Q9sDyIH9bfljzjx/zSkH9kf38koq0lNcFvGig0ErAM6F6W62g84FIRq2aVwmhQs6W4pF2/mCx0Sga3S5KseWkQS63qLXXZHrjOBEpiYQAxknaezkhRynE1M3pKCS5CZNXnT3VyY1lY7vxhzDqtBI1AUSaVsTknd5O8Vwr6ks0Dlvbp416ayTW9sSOSmpR8M1DJ7B2ngheebVodhvSvAWo3TnsUpz3nxD/Q3pSPWSLLwVw1Kzs3U3HI2HllCrj5/1g9GJIWYdQfBiGegZBTFEsqHK/MJ0Fo7n9RgkKWrfWqo5Up6S7BLUGsA5Y/RdGUDbVOkYEnFdbn/VSJzIkx5XzJfE1u5rZaVsqbgaIc3ZTH68eGvzbvg6d7algkybbAWsCKmL75QN0KsA+oYO/p0JEm8qTPU5gYCLRfhkpiGhKTQmSta1Bn/Kol6jXonpqK/NfsqweDRDVgE3ae8P4bFuNBSYOTPpNvLaRzP23hodOTJ0fHnl5wmWzEwsbNwHg9Pg1ewW3Art2DowY+0vq8cK9VGCGr6vj2eMzuDsVE9rNdutC+ALkK8K6K8pSt1uck5TsscdTsMoX0GmJ6HslGQJ3WSKfRp5QQWS3OpX5saK6ZGjfEY/s7vlCGIh1+e3wMWEyn5KbpiUapN2/aGU6XBNVehxPTs+jEHZ/MP8Vje9EvWR5xO6PqGffeM+1Q8pOJrSANCiml6UQZptQdT7dStkRTcJYSap1fd4X98gYwEuzFxYIUr8hJBmN4xwLdx2IhRcmOnL88D47qAdG9lI4H7RtJLxxICIH+Vy6nTra11/WqHrLYuPEWKgBbZ32fJsaXPT4ky1zwz+vCBO/2IJxJFza0zftmG3Prt5VnHEsH5uQZ2fXDMWOFv9/VNYGnlaZC3N0Aq2f/342Ew8RPJzPs3eThDjgyEo1DiwBWtCA0APD6bF9aKlYfFfqSoQDPVCjb4Vzz7dwrYSNn0XmPoJ6uzo4HspcDEIYp7n99N9EZgVkcGGhqsP8blLGZGni/S3IYTUCk+SPfgxy/HCYOjZ/GTIdLKrRTVcWeLLsaDvPzt6bSKsBfshFeIyJjUUG4NmP2H3THTGz96hpqiYkd21uaKdfyHkwpTQLlqaFETXQsTZbvXxvR/WjzY9oKuKSrAGvbYB4KOhxj3V3JHtN4Izw1X1g8K+nk5mzbQ4k8o7l6mnA5GJaxAXrugu45TQxOisFE4maTRZ2oOhGvwn86Hkw4CHv+qd+VsCgDN70BzwT6MxRk6NhkhKLoc3DIQ6ALTFaUEss/zYjeY/egbhswMFHPvWVlhSiePmoi2Jo1Yrs/ylb3L4GrVybMiLNjmeVczaTjeLGi24Uzq+5HUtHPY3dobaVljqOm8zP2j+dCxv4WMjuuNvsn3ocITWuJRsIMwmaE/cgokg119LKw9qZAd9hwoHyI87qajr1Db6fxEMf0Ukp+eCRIeYk0r0GU7PqmkrWMIY97UBD9AHm0mcndAIz4/cuz4PB+yfMyDikbi/fgsnb03O/hrZ+2drHy++arWXTOWVp4ojv5fAFDHvCbZTUDLVL/0UeEOq6wQIaeWMvukUyW3F2+wGwYOkf96AcFsN9J/doS2w5cSG848KBA070l2Lp2iIVYxY37VGpwaSlw6zfRQJFzXphhZBw8OOfrWBtCj45UwRJ3SMJ2Ia/NWbC59Mqr3JSjncw+lQ/l7x8kTyJLxvD1SY6EOG21lUsUQikiTxWp1jdlKIzI/YdIERT/q9IjlnQMnQsidSmKD3adChWT3mTyaaCWrf2fRdoJFncrgdu9RxLnJaMeMp2YVEsXfdm9PBDsh7JOTR9Wl8AJzcPy+4FyYs26V7RZy0DV34qeMHZoRxvKnOUe2CKPK5zqEwIseYmKQUV2ZFEkOwO7XEOQrT6WiNU1U9SRX3s4kGkPa1i4UHJLOpjaMqdeJbxHfoZcx0K9S/CLP6bWXNbT7TFy0/zS5tKLiFY4a1NTxMAw4vqQ3IVYT3FBFiMzB/TqUJ4IiUaNBkBorCwVPEkzfKrwJosipbzpyz7ERwutmarVLjhJC7gp2IonLgRtsjlQYeCKWwjk0a6PIDe3U6qA6MWTQgi1WtlpB2ibyRa1FV2HN8NHOMoK2NRCCxpgiBw2RNf51zahghY9P9POwwJK2TapIOEKX2IeMrMCDR0eox3j5KKazEr11Q4PL1JLbCMzKL9R3+6b1Nz/xjzDDu0STCbQZAL1966oooOwiWyTwmKc6jhDf3V2I7vUFqom9xdLPrjMXdkUmst68X4n5QHnlfKWpDQeVQzxRoTQqQjHu7uXmqbCfEtssAoIPcMws2lLrI8eAuuE2MhxeMfQySk46tRONu03fuU2cU2Sm6v40ORxmjvFlnVh5tnPpWMop7xQcVXcVf2vbwxej/Y9Yo+flsmfnAZmBN98Q47p7iNbgswaCaaC0XawQHNCeZPQQcMfGvY1FRUixzNibLLPSf5fflZYMhfkYnwPb1m5DzpDyUmrQwlJog4ui0cvN9uMIw3MAURz/CUe0st/26wNXQiRZ4IhIEFwr4fFJjajkDoArKww94mQ7qg/yilqPAeSxDgwxabvN+jjaE8KEIHYS0d5vB7TH98ZH+Su/NfWpFb1mLCHdwOvXACoEWjh+Hhu5OwQ8V/3D1yrvKsij0nPNvoHiQa1M+W877AM4AFp2/iLUzGZ9U2i61BVaxB+gazHHyzgoLgjYx3IVNO+5Xi3j0TarKCoU5D4a5P7NYPJfoTvn1CzizfLtcn8Rgxgzdq+a/PYYPOyBf64F9MxogHYDuLIOlRkiYM1Rv+r7FKzLkdkSyDGl4Qwff2HwkO3nHwz3g8HUCqjqUjvH8y842+14LJem1JhaUYw3B5Gd6wCg5fIm9tT+s0fzZbXxc6j6RQLzMmwErb5KJoHVs2hv3L44DZlLyXKBXWFft3zZeEJpgLVlS32zvv/rqI4MM0HM2CENuzJfnHOg+LiXRfBS72F+QV1DAENDZHZWBi8FwTcBWH3t2GUhv555epyDfn+ZlC+gUm0uud4w7fzFyOwJ8GJ6z4E7mHcU6XXfRbnBSF5fHbTxlgZqaBO9cFex0gvcl4OeomDNWF4nFifYo2IS0AhzN6hMYef9tLS4aEAMJaUDYxf4TvVHsk8WfaDfp9o5nRu99zXY2jVyS+OKXxqCDUUnd4uqSB16jav6zU3Mbu5JgkW34TK0qaay5WWyAi5iO7XuokAwOZkWx6Z2jwLTyvfT+bntbJujWtodi8KUUq9Mw+81CzHB32WjbK5PnO+rNU3k5h3K6DVRRx1OZdMT8p9fGIIu057xu+OG/h65FPQkXRNpkldTiEW28KHBzR+DxiTb73cAXpInAFpeMjiVPjm1EnrC9gBoNuksZiAEd0tlSx6G8tve3bx1TdUQBZ9UysmVHjMxnItRRd7/8KhknzhYCiSzqgAmGm80gTiyxEQ78zfqGqa1gZ2+6Au0Rj3m4IhlVVz2U4O+ci7x3fx6fyN9++EmpWYA619Bw6+IX/ZiTX/LXX855Xp0NeMeXtf3vRXVS0wAGRKv3zFZvQkL+jN+sb2CabdyCxb6Lb3QVwf6DGu0RLT5+xnHN31iV32eADkP4WtmcWCueaYoEspKKNy2LL7q5GvWpkE+bbplGABbzZvmWs4+j5lUXQvHeSdAYXvTyB76HnNqqeNwpeFem85LnaAdjRT+SH4Xbbdc/FgmZU99UAH+S2mrTDQN6rr6XFW7x8lgESZdYkwtWuYHTCRVHaR4Vi/wPQEXnGybua2x7Kv9Tk9LoOe275iTXy2OciWwsIvPM/3fJEUW/OFJSj+pmliLgCATEBN4KDJ5NN3uQntc2nbTH1sxEAdq8uioxoMrL1wdWUuat/ApKBWvduvrzLuxc4UdhWnhLdgKJjgYnKmk6OyJXef4l2h1rzKLHy6p2jcW8t8VXO3GdmSf0PgJmelkSCCU1o0mRZRVnsYeY84BoopfxbhJ3i0wcJQKGeLKUO5an8RTFQKwDJUh/Zyh9BD46cC8vviCaHZenzZOMLCczqzXN1nHLjTmKRc4viKXyjxPhiXary3LjI81l0Q4RM47MW+SzoaPnfWI+65ik2QIa6dKmaDMIdIWGiM6NYenKeaNM1sao6aa42+bJFg2yaD/z0wZn/bRs5TuioQbAKnKvUfQpxpDBDi9NHkKwPBMV0uffEkjXcYuw+0E9bythF71l9Dkbyh9mZ8XKrSwrDrbTzbYmnMYxFkAlf+cokhFfhmsrnHlysunxrq2SNSMZwPuREkV62XXo4AtFuLTNALJarruISCt/g0I4zCozlmN0H0BC002HNVDXue+e0Z2yBIu7eyEmse21Vb7rd82D6LwZQFuPCza6guRCCqEjuqUh+Oq69FPsfAtBx35KP8WagG5+wKplkPO0vKC+tfn8yiuYWTq2rYURVNCTal4m0RPnBLRqgs/8gy0eyUPttWNMRD9giSRf/RE9MKarmxRdDeGg5g2LWACogVqPdLrWsTCscTd7bxBSn1xpOfuCByyBtcO8QQa0Ng0SmtAhuNO9pzdEpJoJIZlcY77PKc/m7YDN75k59uixFnkCkmpHJCiG76upSFOiPzZjQxOKMl1MB1O3uHBAoz59qJNL0HWM3e4UjHjSSUXHUfbpWOI9ZV3AhsHLI6kwKFNZglsK3gKUQaeEqnWPNHIBo+WzEwNrFHCHGKIN5PUnmvcI7bqOhLgqYqJ9QRdp6iDDCfct+6d6Wr6USwVJ4mnWoOJwokaOohtS7p3Yrwak03gCjHNk7OtBNQ8xjcqa3dCiNsGaSgd2PkIqkGg1k7zlwws5CSK+Vj/neBYb+GkX7O8NCpXrwoAmG1P85yV4HxzBKL2LqrsyAEC5mP6Q6vAhwAyKBfqn8Z0OJWg+uCY1oVfeu6TbJgtJpXSPLFLk9XmLKR/oRCV0OCqfl0IkTJTRKTkz7UycLvwGqQSqPOZs4FZfWQt7Fan97VZ1HORM22LaPmAhkXUiKtAB309qNOcLATQ6B99ZKkejKVa7vQuANsOK6sXh1LCUlF0jnw4ou6vbOSSgikbI7xh9NZEmsQ8TNj4hCnyRzpfueObUBUNxpMjj0EQ3wiy3oCJMC32dvvp2ZqvIArIaUE3ElaPKAl0zSYHtgFkymA6OrbVk4H/mYyhu2W2fWHUd8WFwIWGBgq4iXhJGQBVgXEmOnnE9raCKx3BFLulmcY9+HGAWHH3+FOgw97VAF1vRMFXdjLMitwSZrsGvVoeXda/wtQi5H3AMXboTKizg3FwnTgqNapjd/JE6u4RXduz999HXkhntUAyTyWeDr30cWSWJC+jsycfZI8GnQ4hb53l4M6R3+wU7/YzXhyKSyWhaB9l3Rbg1z3iqjjhVDpChH7pR+11eWY8C8afBa8oRwWnny9HQUVVEjV9T/D41K/Y2KVMffFXGa5WfFriMKTLwniP3RR4kZJ9SuIUEdWH9GqRxKMsz8QW6JbXTSINJqTU7S6Vqr1JNFQpHwKTfyxQDjs6EePHLk3oaQjEfNb1QO7Nn+yrKU6hJNoFtA83whNirbqpVnoVR1dcXDLSqLEhHAXUtWFCcaALFN8RZKVZ38JfnbN8km86HbZ9GP3ues6ZMdhR94sfWcpaEEN5kebjptHfWuPyvOfyQW2ajhmL8IzYz2XElaKeXph0C9ImdE7b1CQ69fCtSfMcoTBtIp4YqZbDRON+NkVvqX+qo1DCXanKtvo7belX8R1jcw9oqPRt+jZj+AYpRtFJdFVozWzmg2dh2g7iMaQxnRJPdNAml7HRXnrNFtPyFDcPcGY8EsrqUuXy1Fq3jUei82fAu3/0FTxrD0igVNBq9XGi3p/AyZeR6TOfNO4+zrFQTNU8nLYrb1apFori7YCLqHR5Jh4+PTMZaIzlrds6J+zaHlptxf9stvmSIUcXK7VP3O8YOvk1yvGk9e+c7SF5DYGavcULvjpV7BNQrVe4XST+IcS5rjPBHFR+oLajc7fZbJ1Ksek1KAJQo2KsUcif9NEQpD5aKluFtvh65nLA28KZsyfWdVcV6utQBKina/7hqNuh7/ZimCtc1RbmBay4cJ6WyKXOrqE6lJgct/9EBiXWY+MnS3ya8qZfj9qHDWKwInfMmiCSiLpQVHmlLsOlkn0kn+c2R+qt1gVKD5hWf7ez3GliXgcY3YBKVrzEA4AiQ7alKZgtB9wEjoohraMoTaO1YXprNQe05LvHdcTcZNzI9lolegJlSFK9KJauk0UwRrYnsRrf5EIgE5l/Vk71WJuQSLMQxEdArEa1ZPj5BKmH2DiOhheW3MJFJAVBIh63+FT6J1rvDOpe6G9z3W94Ktwzw8b0eG0VmGsxCtJxiZYxfqq+SwM4aT48skqIhB8KXqSXRIWcwJz3aRQ0BYTr1jpONoCXBDb1ubbhpYzX2XC61QHQkC5+zJ1HfK9/LJ6NQ4cZpUBMZ8dVnvpcgsHk8RFrqt80ytDInUlZohuzOPneNIrlLy/D/MEu4lFDPKZbdtnhegqEBoxXN1NiN42hu9Xru9CiA5pCEFLP1/tGo56pf9JYw8a0lEP41x+1+sbRWnHg/mOikVBCtF0NKV/ug2AoLvkCC9yWj93zmx2lsb1OLo8cJiX8AEoEw55e+Z/ixMcQath6qoaclFOMAD3klTtpm4GKBCimNu1wDZLpAtUBrU/FXuzb9kwG5qvIk0WOMJ/BIl0sJMil9O0roRyqpEEityOBpZf9y4Q870FsdH0VyjAvkdn92FuMEndhMVTTypVL/0luxKGtxlLQ48SyFEtlixyOp25LjScX19G7t7l26JLk0alQsvdp3reFnzahvRhREn9Z45SCGkVYLg4zqWyp6cV01sjRELzCrSxnNHXxhli/w9zpQxG9ZuO1m8937fFoPpPqskiwBeFze3UIBA613OWJKDXX3HaeYp3DmDnk0JJYeUyOoCf3cRd4yEnAcCAyf15SeQ76udG9gMHP4XWPGMMVvA67Z3SSPA7WUaW4hJR6BiOns0SHDY1gW6j3+AAG4a3DHBReu6wj9SEXX157RxEW1PD88qkPk2klfrdVhvxCeVSScUYgXHR0IwY67Z8Ni1qD4SAtwwOx/GSJR/A65KvSgD7DtyruizpCpjXra8shLkbWTj766mSrYBEBwxgtnxHquVeMqeA6k1p+kVpY1BV50WCsphK5ys6zuKg32kf1+C+YSNUqcefyA5neCSbUQT3mbqG15MVEOl45kiwQknEU5aXuiV5jPkow7bHAvGJt8b487ARwAOUD/FWcRBt5VXK84io/ZPG5Kb/OmCuVl85i5Me9bwFt9ZlltzQduaSCf88UqqHRZwJ2+/F3rvs9EnCi0xDO2CTMEAIusXFlrYA7Xag0DQJrmMlQX6hnbmvTVfM46nwuHPzXdBOfasQWlx2QrwnJGh9Ztqbrh2StYwptvtwKr99zUeVGxK6TwjaefyRh4f8BmKUluUgH2ArCsaJk6VVQI/Zc0JTY8C/3i43HbUGhxb0+dX+r7BMVvoDrUmvxd0Szeaz44Yk24w4/zRZtRaLTUPiZANsBGe3B/hHcSGyClgZWgDr0C/pBChji9xhNtBL2bAAZYF6YT4gSaTvHqRPy8WvhsYrU5FtpdSYVpzeL8GdHjj/KJFTvRVd+50R3Ufh7TQAa0Zcdnr4xzYOIL1BGay162t4SzTYYqq4SzlFUy6G8qAzUZZ3Q2TbQ6/LoMV9pbgQujxzvFeFa1XmR4UaiMK5Vnyp3X513rbfpsORHZHbsVCleJ6owUYsZ1Q+w+1wBUG4RLhPeuxCIa/iq0FmewCzNsDGq3k7we1UiroK2oekcIDHZAL0ygy0x9ab0MVrvJJBb0VeZfnXwySFNaTlDZBF4faamA/86UrKfy7F2InoFiXa5UwJ5DTHAFQMBfE9bVLV7tFoX8LNXuauovA6GU0oxmUt9+lkNm994jIJ6A5pA7xVC9z3HC7WJnkqdwUCuZUuB5jRq3zvwbTIb4r2kktMucNwHoxFxfJ9krej57NbpS/RGD6ZJLBnZk5rgNMGgWFgIODgMxic6Y9/pSXz5kLqsdHAdJGaTiAeF5x5t3jxvrEVyb6P4HypajhKlLkAt+e9ry9FD/8wDVyCkHtw0nILcM8RAC9BcOxGWolGV/s97H17oLnR2Icei+nzRuKLObSa13Ce/j2jM1KPITnCsfjD3w19jzEzXY6sKSV8e+5w37FhTx/uTfeg88IyV1lJRp5BybKVq9MaaV89Td32/H7Vtt7JDWwT3Od+FN+gxaK7hj2hsZXpkKVZkSn9HoiS6vCWENJIk4stf0ky0TFG7D0Il3bleXdcLTln/6cHxdk58xJOaKndySnIWXk1Sy+8CePT6ICtxEcevxwcL1qln5CAesw9e9i4u6JVNXu7SGX/enK7z5DAba/YN2zkUbMs4fWl+JzUXWKGS8i8C1CbN9WPfenKPc1P48ZlV24g7ShYbGQOhYdfg7/CYZVIUUQB+H78ovVYyVC1BAXZYVCTygot5DDQvqgmRvIbWe3qfkvtOiNIHJQSKuI+4LZfSYXCIsGwEoUJXiy5qySpnkcShNPyHjgB/bfCC7ZAb4Vb9e7LTKXws9oQtjQhDk142mvsHMQa7W83nLuhTjxA/02ges1fd8aHWP2CkSxNkBp8jbzCvC2vE5sFaHodTYHMm7g9Qw+SHsUX2Yk2D1BRsi+SGrd2G15J1O376dVoegXHHYR7Y6yddzpVIdIUAriS/vG2be38qQyMmgVD3eNTOABbgP7wEOdZZUJbyvvuvXSFfbn4I8pAqu1QHxXJeKHRf1LRb52WkdXWC4I984Fk+Bsnv9Nqzjh4KNBKu/r0B0V6Ju/VqHIgVK71eY/bllGbU1Xw+sXLMUMaeeBQ7m96DlWbHctcgtFgfOWgBos87DYS+EWna6xw5AT0ygQXywyR+qjLQYzQHs6mvTH6zEGK89QyhEl0SqSrtWhNbRiNcqs+DclxPQlws5pzcV4U3VGWN6yHG2wzlZINdz4mHGp+BolQGRzez4M+RxGS+/KadILT7K22dx9LaLWfDWAR6Fn1bOpDrokeE67XmTtSvxzU6QIwUeyl1J2R5XJOV6FCCpuqwSpn0btC6ck262TttXTq5Xu0/qhFMvhwyO57G8z2FKgOzHBBfzcaMGrzGAgl031lKSLbZ1dCLL77aVPEnmZZ/L4bBeVVDX6v9iUItE93ORmmCwZpv47sGIf2R5B1fmePv0tGZzE4nAe+k2fXXvzZKuPYXfc5wgnJrHYKt1Z/izSRJfWmX8a1Td09C1ny0hyAh+ZNMNYUxb04ZtQhXB25rtWLYUa8pzTDpXR4aEeaXdN8G2GbYgvbTM8nXcPSZN7qEvQFvW7NTGoHg+pOq4OEt61cs9Iojmkur054PgiFDILfKLD73B5Z9GVCQnN9NUJlJv5qOb1+bUy14eAzEbRbkGyKFcED0ucdahG+rNQYg67Nk0A/3JLlRhPPrh7ZJvw4q9awbEXG+KwOD0XLnBW73Gp4WRaJzzy/1/PAXjvfu6cNOzbP4MCiYi6tv6JZGVjU/3qgAbNXY2PpSFoOGFP26Y+EaE7bjdw/u53oK3PJL9JllwBqEGd1gwUZXB7M3fJXI9bl1quUYAOf3RmXHxsghASLddaBw/rCaiC15uyPPEFVDeSnYWN+Ydo9/bAnb+YyG0x5jwdWXqInCkJWldPAfWwm/sC4Qk+RckKP78ETfNX2lFihlmkVl39JZc9aJdHcoOaaceCr/uLbMScXv9xs2QzNXKispK6djHT5UjHFZ6jAmPUwV5dgqvKJ6fMZT6hPOwAkSeyVoIB4IPKZZashhpY4UrAjf9SZzeh0pAWsROqw16kKEbiYT9o5wzOG6zpNb9tj1S2vGaM50h0/xLC9MINoLHs6Emayh97ndksWSvEZY2Qyu0Fz+eogcAinjZksjl+5zUBHpPDWUJbaJv4w9xGtNOu5mgQeA1poGklXMciVAZ/U2wWDwOmidcREtuU5JBsUAN10PhDucEepyub79i67VYWSVJQ3+M3Fn/C7wRq22g1XDYWGH+unsOosV5x7NqJy2xFKEkQI+MAC0G9YFcu7bYzYHF764uvYKzUIwOv9jR8+P6elzLNNRQPZFzIiqFnI6tblV6T6ItsDjONIgyVCj5qdfXugk8S8Ux0JL6cslyO7S/ZoVxXeqCFJ8xbiKxztN06pcHJA4AV7MfqWIrg8vTnOutcSp1bjaF1jG+5CQ1mX1RVY0ldDnnHxFXcs3AFyDHO5I/khHEKFkCDusrKKxWK7bbn1omscfnN0LR8gVjNNuD1nLmJ23vwiGuAOxcU+L+U7WJSGw4MzP8Tuhux8ajaUhlrdyzEjeBSY0VTmsW4xM5g5GEz3a4zX6GZpP9thkaRwElFltpQv3YGpobqtCsqzmU3Gj5zCp76sLQ6mhMZWCIyJR4M69oDes9spvJevSvKIM/A/SDLLSSOLV8JK+K8Zymm9pyod8BBntJLZVe00sPk/DB7A41IJOhOCCpH+ezvva+ZaUouZJHqM/HdO7UyrlfKiRiPnGsb1eXcAVdDb4YeX49LE3Kd6Qdkp5TLvpYAQGOnkNqH9LTI7b1sfe6Bn+zT/Jt7cH/eNRRN2qg09NIfI6pempLMzWDaMKDhGFmHz/4qlIwUNUS/qHSaDA+73pUCB1Hl3MRNm8NCN8StCDXGkle0YuBkt5cbYcwI+qwyMIdj0FQR/t1SkcxSfj0ylZ6sf1dY0lE6WKm+EayPwjcOPP6ljCMmIg5iYdZ6xeSpxszXMYAxq6mm9MroMomGo5Re6IVb+dwOV8dPz6RKDHXQKpz6eLhjRLGTj/KO/CfYGME7/2N/6iz2fAnXoy1hyB2hcbk/DWkhuLh207WfCNuMkpqpyLR9sHLCHVql1DlXpEPI3KKE2ZiSsv8fOHn07kJJZ5rG5tU5DwyKY5YSuZ3SROjljpqrX76ympjux7RrhXOHh6OuSvxV6uhDhHDF3mNJUJlmIhfjNVy4Ms3XQo9jmWMqrs5kf5vAGk61ahkmE4+tJvQlNhmAUq9nI9KkyMvIVggwErFgAjwByThy7d2S2wDPKbsjGogft017aWWKSsyy51l8QQihgumoAGvQaoQkikcBy3Ql5jQkT2pwVgRwLjrPd9R9CIcPSP5pgpU6jsIYQ3nMc11276+la8jGwvUoPV00798cCoLt1qIhTqDFLaMdF4ZjRs8ijaitJMdcc1fFDGmjrsmSEP9UXKIAIEMyJTxUJog5HHe8Zvb6YwIXdwhsHns+2GM+qjTPFSw54KZcyz57PtYRejaETmRe7jTAY2xgWCyJIg/f2sbpD3JCQaYYm5lemuoT2VCgrZScZKrPkMVeRQPz63UlOl+yxk2cPJOVJ/NUNtXYNWUSfh/qVKWFlHYkScjm5t+nwO++er2q5Fm3X4zpQrk2I0NfhtseLkoO6pOHuabnbFQ5Q9qAftqsO/7NbxQ1UsubHTFcnXxhN8PDWI7rG1iJXikwAyI+Z3hcX4CDjvT7kAXO+YTB1uNySOecvw1Eof2qJAVAuy8xDsTVJLLiWoqGdVoFp4GGrVLXFwKGbODcoYhy/bUOpclgfBQtJfuqwn5L2x4CCBDpuKyjXRTcfsT0LirIEaNc/0lHNYe7B7HYPRUiiyyGT3132gDvt4SFa2VA/wN8nSuQCC64YV92l32KFd24YElCNMBjdzJcz3qRGijJUvYvqNowRBPawbtrqRV6KGQHs7V46hprCiRLaXceKoE0r/jbrU3/UlJfZTnA+2vjYB9+drlW/mEj2qZ+kIpBcpItoF+5HhS8j0xeGkxTNYjSpzSQ/SqdHChnUQkcV1dFNzf4sMYoOkTY7R52zXgfVCcTbM8+xASe8UYEq2rDkb684BRx8yScTAlPXu586ta9Kcjtfs1MGrmqovFmpF7PWigv+SqvjCoHnEmXhDkiGU1iosb9wxXXO1ZqzwVR5AZaUSawtnvmZ31bK9Pe7TsRmQRkpH/4pteziqOCPy7VrdEYKdTwSLFgOHvDLjglwJHWqLiWrxflEEoBrnPC8E+8Pgi4F/SBPZzMp2m8ftbiRdop229L6ueL3bd52PUz7V+sNeSN96kg1l9Sy92wy/8fY3OtllSy5OVydXIte24pgRWZmP8SDBzAT3m9Z5Bg4PWMBPSJJAxPOIGE2Cg8da7QKcuzU4Fgwjiv/gYuL/PiC6UOcC1KvM5TaomoDraMCwwFXiOjVeLkGvR36oHwafP7C+4IJlgSZe2irNe8UTNy58dtjKyLBsZn3ssSrIRjmR3nnv6d51Ub/qnS63BrlbooWbW9eaLo9wnVkWWrIODKQtBLh2fNajXCDbKQGNXbjMqRZttbCzSilsO1OtIltaeZ+LffekdS1HY/ZvdN6gn9DAxv433zb55CQQDfInAMkEVpk4LGuvCCn5ZUDJYQ8rHHDf3HWxJPgNNe17d0zRSGuN0OD5DLI6+BQsVCvXfc1eDgFCLnhUimX7Kxp/8Cgq6LG3A575zGzdQRSoFTycohehxDSOMUeOYKtIiHERNiRn6EC2ty6WHXTAMszpNKulvLdph6kUrlG1mXr5aCRBVW6vPhINu2bjQnN0gg6a0MqLHuQnXlEyxOOXzsua3gb6Wk9Uw8U8FB3v9QMxzNvDT0jOcigpvOKGxhmWqzYud4L7XwlCUQSbXLcpYlcQCgtMa2jukyXZZRgLt56tg+JSJcErWj7XBhkHDCrjPvMHf+r/r8yMzsYs/jndNs+GYHRrOWSd9Qto7A+EidW5x1xwUPafnw7xfsnctrvAzPZm5gGRlQ12A9jnzaOiSOSOHHIYMPVb9hNziiJ8famYryrpwNAGpIY3dfQ7LXp9m4jvYB26Emz6hFsAgm1jwGNqnMrIFerna5HzxOD7HXTOnYnf1K471CQ2VQO67aE7oo2Y9nQHNhR1ELE7vRZ1M+bNsBwBh/br16OszeTRNUSiV1NPx1mMoJqU0RaGCMLA96HUUqhCubiGNwso9e/dSzab7V3GcHmAJH1qqwAfwwMDNRqTY9buq56ENktsV835sS7i3ZyMNhkVJUyd/32+OdmR7/LBcle3vVI1Kl78KHklNznBnMtVfTQwXOaVLPUAWIjFtI0GwlmoM7CDCXUG6E4RnTLnmFAw7Jhnvpon/Mv3MreumtQb/viIV1uCr36WPGVrteQkjxHdAyBu6FiJvq+IayiQqGABVpTrhnMoaAfZ5h1EEJq4jCH6BG2WkSNKu1betup/J3wjVSzGBuhI8586tNN0kswhQJLfN4neOli+/Fskn1vgVd985ZZbFd6kPbXW7MaRENi6rbU+xiZdeqO2PAxd4xshIBfjOHbr9/h5EQmrmzzAsAhGkp9KmVND9vIIFSccbyQpqnzpZyoOUNrJbCcjeBvzs5xyrIvpPqxtYJpZBAyjYU8PtSRPtBE0OIaOyRn2ts1QvbEwys6l9h+PCMts6AwvI2l2xnDCYKfJHiqKS4WO5EO97AkeEUo5lUEFcWjISF+5/qDcEQuOvKyOIcuRZ5AyWVXF4Aa+55thODhhayCGCvyRWnOJnNaSFxglGjy2VEex2ynSqxxx4Cslmk1E6MPTWeqJYXG5ByfVIEZLK27WC59ob5Ryuq/fjwvPyEvMVNZyASE48cQk7c9zuwl6QWqeX0LuseC18b9z5QwRBZCqbL0WhLNI8eFt88+TwkZoq/xntekOuWsyO69Wmn64UBEZtbYMrpTr9rczAUWnnS8voFoFZGLl2g9+z/hfsY2UT3AITikqE1569dR34W3f53WE0wUgIRuZUZUU1F36xiiTE8sw8M9vU0Gap6L+Egcwkn6lE9W1H6+PrK0S59OsyT7NJXn7pUhF4mBsH2ibpLKUtEZD0lDISk5el1WaxAyRpHZRitzZsr4uTNVQfW5PPk1dwDcrtfemxdYek7Z+0XjEYnWsj4Qgme7/rnioOSMDuTVdk14BW/LM+HCWNi09c9I4Btndo2WjkcVcy+rP7ihX0NlwV5PpK53A2VFE159kKZHteHc8jXaZ1TXjXwvV+Dxzzc08qhjBKwEnkqVxSRh8+XyL4KzV4+gPw7FgZ0K9rDlbwFJ/2yppQUdRHFDjuFrvrTkMCx0Mt0XhoZ0xqVt65o8NaHltx2A5HF6J5lJttwAeDgiezlrIrgHDUN3hJF20TkK9IIOq17wyQMd/UdQyBplISkSDtfUYBNyqOH0UWf2zjza8R8hna7ysIgPesFvTk8QDUmzWPRrIxbKpTl4cdnuiNosekegdcXlANjHyDz42bXkStWgdJ2LK55yp+aYZnsul2Fwu+lHE9Eq5LB4BI78jaMgGlwH6EGSVg0J9r2oTq//O5kpG7mLuiUAD4F1PYcTZVLr7V2UDZ8dfUKPvMIMjdAyGZFHVnYIYYDcgufu5vgEmDrHpHHFujy+Y1VjfkYERFfbi+uEgcVE+kfDHFFf4jzBOsZSvhzDaN6K57IwIfNFVYDlrLOpHHFzNGVtl/WTSbXenbsj70oXu5ma/l2W9YOpDzNHDga+jn/X1p25NHznbCzUYGAM19g2tOXV1iijxOhw/Yd4zhQgd2t7KQPM50RmQ4lcSH1GlSHjtkVpKvo8WiE3DOaF3pyt7A0+P56I5RhZeuQ8KZXsTi9IydaQvlesvY7+OJ5CTWqzHtAM0NCIIxXlqDHiBVsltYXnfRorlwPFnYn8ifYe9SXFdePg6mOMFPUuLliQfNqdyMEPjtlcO2wNbHsMau/OxP3vXC/CkntVhsAsiGv5HgGJun+N7UyfKoQFdzQJkX4pspykaCAV3dm0OBXoVAsG8oqRPJ0UfS8c10T8PzkuhCbVl+nJvwxaL0e2qwUGVE3LFhIoFpBqt4vLwfcR24Cs8nWZ2l4b6wc+OTP5HZjxswb1oQxrLwQi6diRBaCfW1PYYVvBEIAEXWm+s4LNdihtEZteeelTFE7LoYyeTEskWoOUb8ugfLuVIkEQgZk4AVIM8P++RiFrRID3rWFnzKYTUx0edzlUZJ27pKflIb6lcwHR9dR+VG/x1KQ+fMwolury5u052j2WXzWN1Zd4ddmK3oCR933ScEyrRJfsmxpCv68rwkHRDtzkgSXl75aU4ep3kL130EJ9KVuVex8v1bQKH4VzVytxZoZqfGpxyi5BjzDVHAAV5ETv3R2tFJi5Vd0WSWJvPXkABf+Mpz20FT8pkoTo+PfCwvXSYU8oSpx8+PUATsHMejl7DNQ0U8B0Mz+5qWDkvcp3FkXIVItrHBAptQrqnXtxEhm/PCwfCR9k4Lu6VtzLZNe5Rp62QwYCFsoGplMAJhj2pwBs1xtq6fPn2Se/CtCEM41oq9NPwf3swK+VqNd2mkKzCPehkA9bTMa8RB+Efh8Z1dzAu5ruC8rid6tOOWN2jI9MWA8Dr1rBucAdcIzzGlWO/llOFgDYqq0H4+2vvM7nfydxNnHKk30SxqBCszlXRkHbxrA/sq/vJE5V+1PvMxLLOpXfez/XWzHHTynZ/Z22I7GvrHPrhAY2px8s7td9B7HrfKJBCOXBOESNDsXWsN38bmris5hi/NYqh9mGbO+sJb+c8EfxzF26blkKazd2G8Qc/wRCwanqIBrQbrowIbZ0pY6VBUDFbxqn+KyJZTJbtZ5xTj8o+DfbpJcUA26HxQBq5zjumQqa+D5wcKVRkp/s5qzGMuMR+P2jQ1P4h8DBRi2tKtMsgl/dGUpcw+CprnKdwqdqpS/YwKyNWI5mTfqA7xwtzgXiblJER4oOYLpiJ/fO63R1s36DpvLFg0nciIGy259I5uw34oaMo9PpmQvDocd4I5d70y8wITRqOAGMghNFVYBpuITYx884V0gTLlImQj+RgZGa6n6CRTFq3e/+9XEjBWNaYUA1Vvp77FywXTvANDmyzX4pOpp2SmB1HWlU5WDxLseEIItSJNcb43MR5D7+ho/xhsZjU9+HCbohTOLY/ZlEvLQc3k8GBLDV53emonlesM4lpeNNCUkjpkN7EcrSz0Wp31cVkxNBAMZRoZ37/9W0hBQFxqzkH+80rr+w4r3KJtGPC9dKIL2MmnVOUI5WbZseQvP4ETz9W0JkRiNjH4oHGUzOeB75eZ5R44HYBDUCjVLzzbhL5rUu2MLKOb3HOqAmqKWm/nvkpyja5AU8aHAbF282ZrU7XG7qwD19mh4Kde2TQcQz5i8T+7cgDCKyuSv76y6w2102nDRO+wQeCRMBGQ3RCjYA7oeeOqpQGC2PTblcJwrUOmVlAozlHGkH3pPXPgYJj8TILQIKXPGNTWdAs3mhuhL9KgCqHa9hnNQfz1FBvs0+bkVYH+3eSd18QcIDBUr7xfMwDz9B9LCmPQxJREYvPUeCs/ROKH468RQtJqHTz6UTGiW5wgzLdOepW2S2EBwXwzEqDjHS18CfmKs5r55Gme2EQ7TxyRK9wrDWRuCpUHZflrT2KtTsYhuz0t8s9tAGrXqf4/9n9klj39GQHCPI394GzV7ZvRysaUm3m9LGpb4uCdc46wBvjUQnpfq9x12dAGRbX9PFJH2Pj6/aEve4yUZVg+Hp8QttyPg9TOtV9NPbR4Ew79jx36WnMBVjQcDn4IoBFbH4tM7tMdp3NTNZklqKyeQqsaFde8G81XFMEcpOyQs1XAbv7/prKPuarR/+HKgDKmylbgv953YQhvgjWA0lYoApqKe9/MlJlf6KTqydNIdBJHNW9yw94Yk91FKXr2FVvycGjoPKxb79J3FL1Urry+LZdMpa+fNZ4lK+L2fS9qY6oA0A3SGfqkoofXgaWbFh76RBmMvsOwjVKPckaxy0fXZ8UjVP5uD7O7bEYg1KGpLF16zPDjMyjRNTycsfkvCXII4pRkjE8El56swAjmONoHAvgSj6EZXx43e14IJXzKzR3qiSCuylzV+CIS8ZsmVGCYKkViWa6r1NZMENKPshifSdBBVxZKdxoLS4XeqOghrf6hNTMX8l+GhVONPgacgQFyPqjcdyGFfVL2sOVUKDzgXvc750inX1Nh0QhBLKyr0ibQpGdzhMshFISgtHCZx2jv6mYFtsWlQUzzeRK8ZyY98Y8aun+W7DMgJ3jgIJ6vqQuFRcjjUisYX1pI+4jiZ/cNy6cPYO2AoIwR5Tqpdl8w0HIAVzWIKY0Sq1lk/taiox7Og0a5TI9cTVBPhxkwXdvSz8NU69SFlVaiUactCOuyxtlUuFeCsSFXRn1n82lUGbxvN2Zc7frtrsPrX7KE3O7SI+Yu/sNyEZag02FUOkGcAhtlixC+m29GBIceXwI18iLaSLkl8JPkgXu01AdyWFeMcykmbK8d+2hM1+AfccDn+v6T1qvtb/Ahg7X3ad1A5E/R6PZ23CHHSRL9KScCUGXF/kDHtPwyadYMvuhUIqJSjMxzMgVjQ+qthvyqQw3P8ZOX4d5Jdv0uzMKqEdxwF1I0E8KQgRCPUCf2tiseHcmosmQaYDJXViDO9CYFaoLkhyegeEmebWoFZYMu39SKcCHML6tsnjHA6joBUjN22owWkdcqYpe9jc+B1ScoRB3p4U/O+ni1SmfJRJjg7SYCMhiomvrUiz/UG/zOUkKJeWTYAOrMOkVt380yRZJT/hRuPX5RxM8ZcGetaXo/79pSERaMyGHqdoXF0jw81rqTo7REwPkg53T8caAwsxI47SJCxRawC2bRK0fXS19GKsN2EMnjbmU2nhdJ5ouCCN3Czlt83E9HrHgKMT8HGi4/gLnl1bo5EkmnP/1mLhf7J4SEw6Ypo5M6Whr6bisx0LiEM1GaRVEORHoi4/sRpFDwCEKT1L72ls83TRAuEdUyGXZe4FT2j2Xt4yGMF+iRbaZdPL75zxFHaIOV01b9OD2Bown9T9aeYvHa6sl9gs7VCmN/bY7XI0/rg2oe+3KuEXE4FylciYHJwp8m/ryVKbMSHe2hC99+otyBRNGjIfKB37s8WpiP7ZfE+AMeJ7LBJ0R/jq4sT/1S7W8JjHmpbnmQk0TJg3ZU0EiMce4Qq8V4z/bWaWOM6bgUH9hC16XxaHwGQohHd5XQkqY/JjGWYPiMnUELAcWJ2/nhPrFlK8GhEV7EbPcT40n/69spTQf7YFjZdYVwMyAMpmOjTsttUIAJ1GU49ozlKbQzSqSrlohIYFOXsTzxPw1NYWEqWVxPKqSiI/Dc/7HWi0wvdkdeDRRpNdmQbQyRYJeiZAc83lzid8lVdkttuTpxr96OXa55EFFXoW16DOdHOoX4OHdllMYQECd+bphRWvApn7fNrSmdJdZADCqW4EaDfn/2CH7GUtEvvhV78SWrUikvJLPTNFZQ2zyhOIkm+1SLEwRWHAJqtQKMBTq3zFk73zVUty/Up9Fa+wiBf7NnUX17RbCYBbNzxL7XclQfAeQSKbISZQrOHopW5onPGnzCgQVfQ9VDCduR2zFF1Ss0M/NJMS0Xud8oJn1APtSfuyxNYyAFpJk5t8JByXNXc/MMchPPG8vSt6W2Rbbab8HGKNPT1mHOiK93fUErS1tZIs3b5v+EIT7plTcd13UPSjB6s9akBBtzumx+xBZ2xeJyuD8zJ8BWjGThjn5s4yL2bkIjEDc89MnVvGFPALHepdLCncugFGX+8wLgaU5Xaz8pTlKLXGJ57sfelm3Wpu/CesYnVJf7781VFuypm3ZjjQOI4T+U7I6HuN0Q+MRv5vmx5v/10Wmw0Mi3fzedKyUiKJJuUEvBwvYKMetuU+sNyRwA7Gx1CSJfC6Qu8tA0gDqA4tLfmCtihNWwm4/YzfCu6jANtBQR7WnFbhHjxArs+/YUXYlHEQLz4E1y5lmLanZbFA4pKLkqHVwSWplbhQnjPe37g+qyaBRK5CT+/MUTm1FdtbcvjQ8WoqJMctkMxIcwUunldExHQz6y5ss+qDuIINwu2gSvS3dIDUTRjqcNLwbHeLLlX2KN0nFGi9oUyMzZY1VwAGu4n1/8GDLDXrSKREGWkj6qwk+Piwt0ZYD+B293J8npnA6tWcQJkwb6uQS8ptW57IxSEDorrfr6ajZ5mQX89Gh48AzSs6Eif1g948UzMs769YmgnDfm9XU0eYA55IrrwHUY82RZzyW7Tx+oaU093kJCP0Auy8OM5+DM6DFrDXZGRQ/DPUokW79nJGVhVMOuCjehC0Xiar/AaHTCs8fPQIaaA8lvj4CC/xUoGfxRtE6HfwVW2jmPsb/P9j5XZtNk+RBGSiBBBoWbuSU3R+6cQv5nFQsaupNrAEuJoX5xo34MZ+i/rKRKpopUOnpfe/dvqs+KJaM54+JKLgqvVIuiYB5PEDKQdATm1hyliXNcipCoQGhIgp1GpO8IM21Pth+0W6usfCbf563/p5vQzUSi805vW/jMAvzFk2zAHdBq5ToTOtEtDAkfzpnWQGY/dJltC6pgtTz743pF+b1fSvltOT9wFg+pfpud8Q9X6RswRoLhibQNPvwaWz/xEecCNQCwx9T5JD5bY8TXQb+/oGFwpUgUZWbJhPeaDA6hnvi/Ej/N54/c+BeZFl/9teCQQ3HEgcMNGLxtO1TlcK03qi8CNZYWQLaHmEKYm6ODhBfHKxGCmE0pCj7Q7S1n6d+GfI/6SEjV0kAjuKN1IXt//KeV6ryugfUHFOdH5d/Hiu/M9HDzMCxK4VA0OlpPXecEIPRXyWGAJkLDQWsypp+RoUYxiwgLcKO84GeG7mqWIrb8t2PtO2b3ixQXA6xZJXShaHoBtQRwzepUeMpXI/QOVIS4/7k+aQDUniBBZ0c4YZ9TCUow061GM4ERFYmSMIo7bfjPubeAR1kQubBfUH/i9EcutY17ebmnJJAbEdDpaQA2wDVS0l+uyh7p/tyE0Lb5/9OMBzaE9fuuhUWNadAAvD2jyiF9A5MHYOIqMSQL+HthKqeIEj7IC56a3GXRTmbOi6b/enswLfjjgvJJM2nid20mLykVyLFuAiYbz1MOAsZnfL+O0i3IQg0RQ+CU53smnSkdoHXasSkxDBLm/SXGV70M7mGudccnQEen3ORF59sz1wBW4mVnIbYXabnTMRaWZ/Wo6nhO8n756iyEnGSn+338a5sX9SgOIPCk/UYZNIuqABzFf69iStnb8ekuUsB8O49E+lFCfyp8e4MiD5+pad+54t1X6MQoSq6+x01LcfSVCUfVyxEWcK1rAY4271Ngfj29qefmM1zAoB64goxZHjcZZydmlUYPb21XSi1anpC7DXTCNjomKmRM05fNRAeFY3HDazfTJXWtO1UQ1uF+664d8DraBC+0sCvkbu7zyzDxTb30pqoNjTB486WF6s/kO7abQcD5Pr7rWj4hgddPlFDj0d1i4YmCsADJLuNgeWClGq6y3IQMpxTPMnXQYWIXsv+Iy28+/bBjAqzTOCRccrN3hFekzkWvsl1fo+Y+NL5aAL/AyrIFpUevfjKk95WUvtdZzwrnt5jE4y1dGPvPS7JHDD0fvM/cunjOmoIZt5rz5Wey8PE+xCb/QmcRVIF2dBPTUO/IkSVeqjRDA81eO80Qfp3bY/ata6qvQWU3wt58mwmuYfncaPXjjm6Myucs9idsusj+iePmkae/ZjDT+o8m66gw/pmmyELDXzROFIRLyLKnxzcpN+DdrX4d7zQJNqbe3rU8iALmAkQBteFUtydFCscQuqBnQvkOLWn9hqtqfGsEhVwNWTyxQZNPeeUCCjozqi1EDJ+USNiwir4MuGjGTonAgrYp7etRhDuf3tT/qSHz7PgpxE5G7rnr28rFPPDGY1xzRwO54kahAyRyF2DIXGPYj8wb6P+q5LhesAzYibAnPjEQv/T2wDUN/ummQhzezFrMEzADmTb9fo+6iOA97xoasnS8axxhQ9C54NrCoD8IZqhkrX8LLitjV9NkY/lX2oCZbkATix2K1puRTB4es42a+K0SNRBF0dXJ2EwQBezUi0HKFx5xorAFO49E9/1yBQszEzT3uTUI4+8xWuQNYZTyqrrcJRhGhkvV7vUqLXvo9+RoRNFS8BuVcIq0NdX1zvbXcvJTfm0F+F5e86Tvzl6ixo7BU8KedDBfqs6KVUE2hPymzMT8IZrrlC2z1loloU3z3rg/z50GTCE3PxmMXcP9/0vT2Nf46j5SC+AGM/X7ZolpXJjbDK96FCpEOhNGaL9Gnab7QsFzpKZ6sSc7uxS9YFgQDqAne8/nir6E13qUe+ARw639hzoYF02yxy3HKIjRtnyw17Du1pDLDpw9N6mqFWCWKN+Xlt1jZzQEv2SlHZqR4mlJzG67NygxzLpURTSYDOZjieNpvcDDYiFtv3LVLPi1ELulFTufhPIdquvLxi+ZGSDOOt8xLe7L/CqCoGfdQ7LW8RvHFnfxR9iGWjVATNU60dvmzwc1loCuDeK/Mc8rv8C1gU2Nti6NanH/VE4hsx0ATT0RpHLrKM2gs5KQfOKZaXpB2NGszbpc0OqSIonx4mtOE84pBzOePH/vVsXrzU3yETdDGktKufB59OHdoxR/vTbtTAT8a0Siy1cq5iu14xsiDlf1aXGYsNIuEMvkIZ1Q10DpwQD7s/3I3/11nks1WriS9uqTH4rb4tsHZKCCPucJy6qs93lk7d4wMg0AObkRzfN2oAUk5RdABWLq6ypCoheXsYYY63cDBqH3BIdUlJlt728xIAyqfnd7vCWPv6Ebl9+oDaegYf+7eMQ9Fn5tsG0i2ofFoE7GxMpRKPUHpM9v0z6t20MZRsurH4CSI6iOy3f8MCTO3pG1UR6GM44ZXilmVXnSbR8P3sgungHs3VF3PVsxYs2DZVRvl+94rdzAigxBrmdvwCu+Ai1hSEJPWNkiOAOpUwQiXeikElXmka6Azes1p2s5w5F7ACylhiKUcSdJ+R/YYsqKYfXNhbOLlj/A/+6LF9yDXCw6RVah/gaF/M6TaQ7wShNBh1MH8aezpgioxprnfmSVD7VeNTJVWIOmG5BOBK+WCjq39auc6uN7Y+kkBJvvuPvOJ0QjSIrZowjKziWPhMrcpX/+AuzboHUvlIB6CxLIW7EbxvdIclxPJ8MMGst75U1SFneHn09pnravsXsOqCKPR2q6nNTfXtirhBhnv9rQS5IsWYVA6nifcKj+FYKBqy4l//Ocpg7s0KrPeZSL8NDGdmyBeotdJ/0E57bQvbV/0SiDyQJAHNeJ21xSrLsu0O8yLma4ua4rHON12ssM3bcHrrF4S+5muT0O4XYHhmC1zifoys5/RBrcenVqUwwvDHzSp3uMijtIBdq6DrPcIuN0JGAKLVDdcP+1yQLbD/OZOsLCdSJcB+gY6WNQdH0haEDJNCJ88uCyoNv5+O8C+I+MnVi5puOoxtiyTCuAmONNsDYWjJAXiXCiSUxWTr7TNagzhdjniYmb5tqSisdJ6vUNXFa+IrxT9MOah8x/ag79r/ZmAyp3cYEmqhqxVDqD53iyKZrjpw7zTTWLQyHNTuDj38U/H/IivS7QDmDJTpKhWg9VU/VvZz4kIcumPI3owK7I4L6gl4hwWChnORd8l++DX1pD4wct6ko0YoaLbb+nf+B096GfBGqC3d9qbPqSwWZw2OOjw28+fHm92Vpn8PNuqlonqU8UOjzPxtpDeE/xuo9O4GOv6W4AWh+Wkaeaw3P51ZrxG3yrA6z8pf6V+gTA+X9wa/dFP2/JNYy/rdICeLItYsjYdZAA+4IlOm1LaE+LAijNMXibBNcnnRswcCqHJ4UmENBPa43H3t0kbfVAxtb6EO0FewthOZxiJj9L99FFoOEq+vIclu6dtaiNuYXmIx6LT4DshiN5eKCvXH+D+C19ufHy6BQYEaElD3fy7xh92h+tEAV7yTwae2IduUi8zvmF1AXGWa4vFxiy7CGEsGiRhn9HziXWA1KsT+rZtbZPNrvfbXFSotsQrzJS1qhJiZF/DDjUqIPFMiC2liJAPalAW4puZ2biAmnbf23487UG6yE3OgAf8y7MVlph9dJb8LA6weoYg8gyjnshuzjM32mQe1Oftk4Zl5BdSjL/KD13yfmsCUC08gzi89+6ASxO1U/EymQI8svz+X0tDjl8GqGDEF7Z2EaxbNnzByMAzleRH/wYSlQ8c3dCMTlNRYi653bm50wgwJopRiwXHw7mvSUKuTCiopi9ySEpjG4bjO68MlotxLu228gFmcUAEVsLr1My4mXiM5CsAW8aW9C7QnHEK4haMcau+TNcEmozqqEGz/itAfBB83d4Vt3VHBFFgWBibhU0ilFm58Fyj9eFttVwzKB1oMtC04Qga+MziOclV5ilRTZaol5w11IqOyjK4J4LShuGMDbXByW6dtsbBgxpzX+a+n3ew/qOQVIfqQ9T5lsaTXpLYQYvh/1mUK3TdnNUR10MU5UwX8PQPRpeSt6u02CCqzAKQgXO3W1dq5wmYb7bqBHme5Ow/6QveYzUepWVvV2K+tm5GbR2N2jOQWmJOBMJKLFc0BTJcatqkwBSvdcfn7gmcLYwvjz3qWH9eoprc/GiYVvAV6/bZcGbPj7iqb5d2JDNZNN2Y79n2uBkYuYv055MAhFb1a7ZHv1o1AhfhGIcWhdmiYxS1w/QybXwtBVtO+8/qUWrgJlE282WTam2e5K6Cg0Ynb10l3oVnm8/vltHuL1C9CxkyItjF3Pa788XbQSTcSPHwB/GIs2+NZLigiKhU7qS6WAnwoJ4YUn5YDgMdJxjnK2zagqq9AJsvwSoXm7cWbYuoqQIWJY/kfkrnc69sIXn8vRvd9KNIu4gN5ZaQyEi0R2dxjX1vRZqAWsRjYHeAwMXhH67VB98fH+9o9y6WP38sM4X7cgp3KTDgGz3m6B0VLAwCcgxC6xVluJp1m5uQqbjiOw9pHIJw0+gnCYUdrPT/dYB7tzqWX2kbxceZSaOhgILfRCT14S798cBKfy4h4EkkNAhfUMDaaGmlzTNJHDUpXeQPG9OWstfLtIj9rTgFazlkJmiPcD+Fu0NrGHrh0c4DTVHLCzBTt1x3FnYdrpUE9Yebav6fmqipX7Eae3u8e7KlGcWt4s98jTthzYaHBirgZM1PoX62W+M2iu0GFVnEenxvw1AUM7x8WbraMmi3etucDU8nmeGqPeN81fMPGGt+nziKJgVMpUBvcwNkiiXM9fXSspkxArUVfP37IqZddgKkNBskmEHVCoNokpan4DP8DKyT1/8Rz8V9cN6SoiamNSKkVpk8gPw7gJJYlrYiA9kyk0YVpAQM72JzWnMF+CFKiwjoLXq9JBJHeTftq4As7bxiimn/HJmV0C046vmKb9UiuceIaNCvnwHyoHtvAQ34PQm0g48KVBsh8LlzEHn302KVLU0ZZAhEifWC/nJsR06v49mSNMkxHuu9/DjbeXX/bAnB+sNDVyPSp8tayKJikdpzLh68XjMryMvC9cRUPqvpj3rXkzI9StAIWJFlK5gb1pHL0kAofpRbvlx/K4N73FBp/TuFGENSrvJ55pLdKkdOEeY/wIsdew7hQly4pQp58wLjAGQEhk6VJ54eGpneH8KWAxHqC4wW6KpnGI24zzgV9HpzsdsHyUSp85YDV2ZWAK5jcVFuxiybKFioh/6AkSasrNeKUXCCMqcXVXMo9gcUHz4Kxx8Z3qqiVqAc3W/L80vB/IirwS23CRjW8p4j9yxIXSnVUKeCFh5NhiZy2jfCphjmMtQwevz2kFBIFzu0WyCfVhCf2JHh2hHE5wvhc7glqaXzOwrxZVmJjU1EbYsiXQvUnCxIJquUSTyPZOGkh0ukl5qeHKeJCP8p7vcxSzUr4enoOHhFQEFOViCvuPFis2uH4F/Upq4CSiXVtMUYtjpm/3qBUlV0iqK2dy+qEeXSWfzsbGveAStZHo2zN/tZSd9GNCLMyn5mUBCZlKYz/WVRU8P7OPvtfAF26u9G1ZdwfX79+WQ/50Q9AgO5dHnejga5tOrOCBnW9AnaZETZIvp/mJO0bZB/rjSFih0HOZx9cupjwXtNwBmPZuT3GZcJ1EbgV7dtaKcsn1Yp1ORr6saeGR3sBpXQVfeVBCTnt+jk8qn4TJ+aAKw8RiTHYqsA6Cng3ppK2Z847Vcd8Gk+02VO4BUth618Zd0eLUotU34zuB8fP9W7jffLJ+3JF5ks4SC5VFleT+2F6jiBejj8x+8RlSy9URz5jZbTH0Clpz9S0Xe98h85Buf0S7TZA9meCmc1agJRHZtAT2ubnR1IFdfhFt1ZLiOeIS32McNNXzUvaPV0yQD53UUK/oyxoGun+nDRVngUS5ZroskrgtdHIg9kEvEKqb9NWSIg+k7KspseCTUxzkhvZhn45/jGIWxPifK8ChaybRiu6czfwKGi/JKAMXTnoYMP7ycH/PRtNtv1Qc7JknLpn4s5LTGyE925JFcCs0iQZYaPAhigBD27+Mzs0JVI4frR0JKzBKAsXcH+wmoilmEX0/YAvilD0NbRt/Gg7FG0We0vWuLmJW0FrCjuq4j35T/1Hus9qDYVt5QAQtGH4XoxqCZnWAcb8dEnwBaep1hp85Juy7oV4X/TY5v37MpYrrsCmz2ZgEIaajNqa2VQc+j479ONW4BMRBN/yx/ezBG/5e//VNyOo4nh/V7scD4ym4KfTHuF3SgVfS/YiZVmg8vDJcfu44eaerWHIbyugAQq9njht84pfqhsC6bRKEPj8Gby0z//GrMnrMgfPFSfPM9tSbEYSFSR5bObmvdjJ8984n2xr279veVuoG43kDqqNmSvnNQpNusRN0J5Xu1p9+0oBjt+XzerqP8DLNxcHlgUkCmLTOEd8fl226Vg7zlTP7CjsuevF/fhvRkSpy8vQRmT0Hk08wByA2NDxwfhdp/Jt143u4WjK3df/wpvSEUYIfYdS0ps5AlDEp0iTAAWi5XExwV9/QKtKoAYMVz08GbVImfwjlcxVgH9DJ+/B31K0uF7Mt0UXpf8cMLx7EesN6rMVIHumYtF+jjgKf8prtTFvzysZez9++Gl2y7LBFWbtWCpt3L+Og5lIgvQY00AfhWjDlhCWUh3yYjwhx7ZhpDNeAJraljp9oZF50ditluXxZl4hzJwb7GYvSmlXa2fJKbUo/usLb6LRtGbcdkmznwG/trGpFRU+OLjeQARUjNxhpLnRrFVHmmdWEoAu+CKGpJHAfzYXAhxlwVK9MWogSXb0rCAPA1YxjMQzGxUFZ6YTnEkK1yH01cSFTxMTwJdDCXhPc2lN22mZYrYUgZcHg0c4cae6YyRvVuPyi95UrYC91g7yXf6o1qi2ujhsGNJLSqsI3ePp4kO+06IYz+ZKe7okEHc5GeAnyO/49tJvSHkgkCOxWUPcO/QJZDyJJylFhHUIfHALbeE2xWvpSD8CzSpHJbITpdfzFr5Acq5hIji1xhdH1Rfyy31WxNBGo1qePdyvCeMj+/8PmHsZCw0U0kFy5M8VE/oUJXZ0xhl61Q87GDj8f3c2xy3r1sZy/ZBvLnMqCt9vozHqUoBp6BNu/ldvWzw1l3u5vapb5iS6agSDjraq9xrLJzZ75Yo7IBAuO3ohnDYpZRc9uO2xxntjdNkNKEo6UXTJkNiiLHxvf1gLqyeguSeguev+At2sTrv2t7ISAaJi4pQyN6ANOVSQTQj3MhJSYQzkKb4TLNPULOBhX2Ujf0X2SbOpzF8qrSgjmQgcyDz+i6tkONzmvQ/ST6xvJGG0wXdiC0U5XuyZvGOgwhO+2T6IoaacJ8qu38TXOiLvuoo8JSHRtNLdnyaW6aYI3Nlx8YOWTgSrYKoeWM7QPkNlUHm6m3hoEuxRCyYYVtJ2BPfZQ4PJu9BqNqfDeSAVhlHAHanrkmfQT7GtHzD4qQDTYq8EZq3ZuGrUZDngA4JlD3acTPLMpWdJmwcWApuN7TGoKGCGQ6vVeLSW5EdFKPLGNzlqKhzy6NMFNRyz4dBUrDxt0GnX79WUAdHeRYjP/FNartihuZPUMsrxfwsEXDo275XQxWIcJm/XyEPExTY1xhU5vTRyPJaWTpOIusclxRXL3nFhzbO2XatH3xSOLOuaeZFxIPbv/maqOhiq+XfEULa9MVfcQmqLlPHWADqgGNvbrmh6Xi/t4UHvVJczJ4aNAp5Eui4DPpIQQNldAH/EDdpol/dEAlosPdwgLmFjYRubpi4XlGXdRkhmh/Nv85wXttSPZaoRzlgcq2NXO9OgcNC1rmn6Kj4kua7fX8zXHn3tHO8V8Fi7rHnnujGfi9he/YwN5JnR2aRVTiIwFi8+6iCZJPIuIe3nFsItscHR6fb7+wo6l11r4mLv/Zx7OjPQ1dS3yFS5JBF22FqUlT679VA3BKEHDuua1AUe7otFVqwmZvx4kGIfCasgTUUC8YjAhacZ45jxgvtPL71QiNgIyYlcuHo8hg0++U2jbpoZVmD0VQjp70x2iTkVOFgi9+Oh0XQcXYIjU47PLGGMtjJDlE+jao8Qq5CMWFnj5t8axs1fiNNfI2Xem3uHmA+nDTwnecf7ON4LF3vC/cevkVFfDyZkFWgd99UmApPoIbiwYHy5GLjgu/cFjtchra6qiuFtV4l5Np7geriNl9106H+XCZj3yUkP+4wLUCgwp3yQZGsG8eYZFZOnJN2rgGoWna43TdAOQKclNbR/v3TLUAs6H1LKlr5Xb/SAD2+NfTG5p3FfPcv3GtZrlrfwudYDd/P4CSF+JrZPUDs2kNA38koCbPiEb85YIdlvXpYK5E+Vjo7/y9dMYi0ahvV5LoqKcRlEn+ZMQbyyvAxSeIxdCQKLpCPmh6vID5jlOowe/G1yb6nQSoRMKzpXmWIM96KzN4xTa2av1k1yUhOpTsL2c73FHmBt4StIoLj6+dyAy02/3wVcYcAfCvmZIa4zqfg98/qpN7xh72NCZgegQ0lkSPJ9Wm9j+gPlO5OTILVI31jhuBNcGukV1++mkN1JHqhQd7+R+e7C8twzZsJ4C0dGl2w8i3uiKeV4wYFUqE6lYVd5SX+sqDUWKwZMXW5PKm0BST1zD5mk77mFxR3AjC1n5JOVmUPC0e1X/qZ3dHgPmkCZEp4x1AxMnxpYOObAlYeY7ibG9lR5Wa/VW72MpxUaIqhTbhv4SV7KYpP5iir1/gTYB1QRjqx72CBdfi19qwrvOAigFJU4pez0rmJbRY7MMIJguIqzA+pOIKEP9yWvpvhilREsbnCpTBdTqgfHFi6EZt5RbuskzQrhJvqBHLl3agq/RtjIc2ir8idmZZ134T5m4GYTV+vlem+oFEl12h4ro1LiL1O67Pq5oVDYtQQQbPpeKZ/qWb9hBCJCkuIsBD900mMCjOwWUDNW6cRRwORZD/WF5w65x8HTKxOQp2p55HHd05b2Lcn9Az9C/JQ59vEKXYc78hTRHTqAlpDwz+Mda3u+jFKNQCMd3nWNTqLQVMo4USOPdtS7PdwvSgM2nsVW46e01s53A/oXE2vj9HrfqDNvIiRD5+N6YqZP4rigNzn/Nir6ZYYENsILpxXEbjYNizEpDs+VXDeugxGiyh/bGzuH9MmlzwnfdGflTxlOzyQg0jSeDhW43uInIVdzzMOs4gcWD2PZWBp229dUNoVLRpSIZV0HO4KnpJBAzQpWnPAofNeLO9uWMWHaYiCVUNVrSynOk0KdfQDIJPHZsVHBaeqCoI8akvEaxm0MRllJ0OVxNUCCmJjgpPwppUWrVeTDwdEzP9MF2FOfekM08fYbw3WM93fLU2GqhehWQRB8I9uCn7Haae9HkMZAeDD43r27Qr6v3TRUTAwQdzE1DYGRcQkTXPENpvp8V0cagaF9ui4Bx3tC6TRtEAi7HuoDZmwe+U+MT3tWjOUqKUwaAmEcSdn5DwFVUbRsjR5buYWbGb0lfoPiUC8XEcjiurjIi7Ld79E/mD02t4etOA0u1te91txIPWcc9RNGBCSmrCbQAOn5jwsRthHpj69NVok3sOq1JOhjuSeJ1Q4q4/Zf6JJKt+Mi1/XKvPsdYGVDFZkeFrYqYtl5FgElSOLbpeo0s2j4FDpA9fd8p6r54pL9jZwq9g8DZsfyWS0r4zmJVmsSSJW+mBFPDrdyxrxSWQ13hhtEssm5tA5bF0z1WkIBw/fs/xv4M7wsK8ZqTn6D2/o7cZCjPQ38imLOAnER0/jfPpG16MOlw+d9l4qzzhLAxqGeaOM9HM9ahh8E7rjpSa0ZVY5MIvtH8JYC/9yizz4OvSoNoQeYRRdG/BRaMAiyWq/yjokREuLZvcrxrQcwIqXbeL08LMpeb9Znf+HbiNvz90uQcwdIViWk6sxw3FcpZQe+jwP5elDeG/xw5LsXU8bI7A41ohiHR2cTX9JTNvoGxLD9Fz38PfjCT5MP/U1s/WSiA0zKKMO/VPxFPwgTl7X8HAkvzbnleKiklf7TKwO67o/9E/7MQl4c2ZWWVDCcMdzCv9RDqAGr21iIRBYlLlOaTgtDsTOyu7JGa/qBfHaCjXU26CXuQ4y0CR3e/8fCXTn4UNJaB4Fu2GzEPWY0RF7qt2CKoZh5kkIjgSQBplApjwKu0RsAF0LgxY2nUeNY9WsCYcedkZLeAp75/5wPx5FbmP6ieDPV5yPh32Yw3204hsDneE9U9MFhl134jUVER+xq9/AYzcA1YD+CfoMtMJBLLIrStvE8+gi+C9NQT9+1aBtKZV2MTZwUSmMqyxCH/ixlrNjd2s3cd8aKqCYkf6oi9q0FQOeP5i2tNOzKzwUKWTbElQwjW0vBWCRvo9F+JU8eJf36TPO3y7sgAJTaPVZ1R2YqC+ZP2Hn3jaho7QtrXdJ4Zkjq7EzuU7Ox96Bjd5/BHS/YBc5lQGQ9Gt+qdKoDkdT7kD7+SMxZ+nZy/R24iA/NUsMKWBzoGTwb2EvVHWPKUFbzGc23f7zKGS6zigAZtA4nrTfHqtZqWfU94e0iP9thhKYkk8HZXg/tMn6s2aO8LqIWqhjIRnd0sreziIecRxioslCaAtCmqW6IAmhg5nw7LOLLyQ+eu268eRbTbMiWmxKY9ME5fDUHy7+VUvt8IJFF3DQ09J5hSvVO5eOiLS8F8Q5OcNqGabBQ3wIyp/zzOQYTLvjYj+xISzxJSwkAGDDGRqoZbCrph1X20XDgGtsmh7YGm+JTww32kJ9qFMs5E4ddbLiKPkEmsWnr1lWQJxVGhvR84Gbp7PjRwu4aFobafn7QJOkbvyZwP7zeA+aunR+1f9YPgAxTWHNJo4btmFzeeO636lwlhFylbVKKqf9DRVS02eQ/MQA2pTsQzNvqeNz4w1/TZQoUWwg6O1ry3sQlDlQhUks80c/+gsFGmQTahQtkSWh/eDZhWYFUaPdt1EQ0M+U0JDbq5ZzY5tRlw29wLTb2oBTSxn+KwLd5SNIRFynkMAW9zFJ5rNFf6508f8du7OPN+l466uQQYKawUs9zp3F7Mjcszn7yHM4gmepItUdyzWwfuVarqX/IAgr9wer5dJuo9nX7rFJShrz6C73xWgbc1eliIc0joj5F0XWOUByVKiIZ8SFmWlZrGvYffAL/PuxMiZWb3ulqpp5Dop/mq9I1FuOGU0n4IDsntU730M0ETVqp/pGGBSskjyl1Q+umkym5crT5RrHBX7HkxFxFPBn17kyT1J+nwMzP4Vvazl6F0qJmm8V9Teiqs38Lodcw+xqf1zWvopcgDlRcwo/fKAOO+VHY1mrmc/5JyV0mRETQZk4iVcNMDM0ahbVUTgCdgs0m2lY8XznCO2aFK4hXHOEW2TsEZZoP04CFMW3cEJTnttpYG+SGX1PMzjR6q2eZg5ZzzuolI8go1OBVxY4rGJx/za52twfwaVGU86TT/NnYxFQLbDy7pIqXiMy02xSuUToOoLlDndv/HZAtyLX6GmHUJqDAMNWUy53PfEFaUxRL/19kA4apTCw0IIfF4L7wbD6RhFtO4a+eX4qwMsnqTOM2AcqDLUrritbZAmFwU6heOz9CsZ6r6xcW+Bw5xnLxdY/7BPJwiMpxlLXhp07OzATbH7nW5Y5MlRepK0NcXANvHnHeBWQYGnFGXxiSTbQ8wV+RAokn/hwFFAdwYfLhVvK9nqkW/ETwVYtcXw5s4Azua30htMLghm8VJaYBCZqHMfbgeLPlXj7shQZMo0DxwcpeghQutev0b1RjxrHoYOPcSO/RGFPk0yFIxDJdIhttf3vC1XDZWhWgopAGlkmot5B+WpgGC+39sXb8Kao9rvWMEAD093FoAlBjrLhUYhNtAXnnnxfjcX+yDspMWDq5rNfz3R8Jil20dVgEpdPgX9edadX/Yrbulqs1OQq7SSqIAU3R1yReYHIXKmuPPWyI8iweyxV7Lodcd+wv5WgUxmcexXfbXI5KOPmbcufRO3aH0mn1+t4J1sSg2S08PCjsd5wvl+F/CgRdYs+wuU/GeWdGWbsLrKJJiDsPiXlSy++ipmKh+h2IlTLrOonDz1mu06AZwodtKYt76x+S7ln0PKMroVw3TBAF/P3bnJ2BBTJzip+O9QiBliwNoqbVOCuh8utwCvoEV4jd50BOWvQT9aF6aGUht/rGER8hbBCfqSR8W4V/ysqqau0fp0URhK+55MfCwEyYZxH2JIVLJwO4cuVoHydYHNj9CkUGtHzJXflgvfDMpE5ARo0lLZEkCIJr5iLV4F2tG1/GFbJjS29gEawuDROWvr0JvkGkvJIfkfqkDSZr0M8usKM/sDvFI+wtJE9CNFpLzFve2JNmOMQ21Yub7n34daD8c3GNhPmoqOGKsjYunifnQq4Sd+t2B8CUnIfnMvKXAjaL/bu7g4QllVr/NYUWy7NI8x5+KAB1DZ8eqDAHvw+dtpnv3ocutDMgbS67pyV64qd+kCyGL8OAaFkJuH1W7K4MjmWVUdRBchwwXCbA+GVFigfeYvnf7g4gI9ueIfg01uQW/YziHSVXTF6eq2sdDKl+fjeqkZm8/vrB3Axbsk/xQknbyhKXkdDk1Cw3/37U4fFc4S/yEPgtrHvfLrJgDUAya0ZRi6Bee7lzKT9IoBUH6QjjG5/0JFM9yZvKS6JZlwMlk5xGPCyC5PP7140hh9xZhli/JeaGUIyH7FFEWji5WV20l3TUej/TLwxXUKTM2UUx82Tp3q96djWxurBzzrEsJUhEREcyEmYcjSJAtsn52wtsxj9ORxB28qqWtX7KVefM5YX2FtPOyCQpPqljFUNmztC8dYRFWMjNmNgb9M7GhldYh/9f0JaXx12hMRp9ALSIIixL44nEg+n8RkE8Q90zXs0hFaUtjPj/tzVkWzTYGm5AthjaX6/6VUJVSgbvkcmtskJ9EtVP8V9c+JLQDdtmUfMFvPsQKvVfeo6fKjxIpUrtyDhv6ydacui1WyK3JgG5SRPtSZcwmfTYe/G5fKmmbzjlywdSDbSDiE6eiFDX+x/LxbLb6KSj1SEcGVZQoK8wE6Lf/MkdfjaYYTyyoURJ+NhAkU9LkglsAYeAzEHyeV+oXx5/1cMBFPs18AcK/zOdj+EZwMgmC3GUaNyQJ7p8e/epOU5NTJ0p4prd95SvIRiZTkcA3kmNQULDhjPM4QxGTr3e/c5o/A4Rw2yQa+XG5BiVc0ah9J5HKRRVGixO5SaOmIdRyA/hQyT/03aaqOaR9VHB8glOKCaj9QzF64THEUlU92feWqNBsT+d83ZJ2YJu1Su1ENknnjSiWq3FkpZR14liJbsxxiruYIzciTD1XIjPHt0oEKctz8/wk2mRksXis2BIpf1F1HkpGga1w0XCOKkqJOgQazifcvjjamCzxiKhiHAfX0qj+RNG7c5c0oxmyJNoi01BT2QD3I91GtMYW6hrvsV/zU9wApmKcqh15GWWs2JWLj+uTM5y7Mu6SELiBj8mHB00Qp6V2yKnoUJ+nQzXM4GzF0gb3LKU3GWaONmuZu2Pz3jTRcM1Waq80Ls9vV69hMjZcn16z+UD8KynkW3ye9N7vLj6bjSSDVDTiGCwnBEeZRcAZaITbQRblpLIGzLmRZIOoBuvshXc4bqpMW86vhpoJVxzgxtUjOYpKmPh9rYwFktKZYcSuDJarXsberzTiHGwKCVBYODr3EMEYky1Q/j0sauGiz74OUv0l/8CxA1eK6lcFBMW2XOmpNwLlf0JwCkXdOMtVO37oPTv2UbgSKZ0IF47aF/IVhfFgh4XjwO+NyqiqpHolhp2/DE5647Jik5SFLvoSgMFWvAjqukuknwlCgN+PIviwxS7qnyCO83Hzw+XDpno8lyEheslmtwaqyuhwa/djZs48mltRRpSdPEbhc1MionKE8QcYjXY1BvMii4Z2N9K/d4zhU5+NuHXQtbfMGFb0e7wus5vdiPKdj7rRra4ggkwPwKAoskWAxfQ7b7nYQRbLNdxUhYHpJCPltrEY81aDupXcfFGabCzeO6YPKvW7GETVPVBQ3hCbVtFGCPa4ql0I9oxzBUu0HqWzYEaTKf2+e3M0rD0UlaNh6icHHWmBsnFZKxgwxRe81zfui1dVO2avIpgy3SsWI/OpaNCBhE5O+VTwdeWQjF0r+bAkLy9bRAIhd3+uGtbPhbEoNixz69sljo3pYozj7GE35nusg2EY+82wwfBTDWY8BJIKm085ML0plwzZ6AmF96/qQZH3ZFGCfPWpyxlzZQjE9SkgjTmkl5u3/rkapJEtgrdvoEFrGqZyEtb3dhaOkd3bzPfzDweAltN4zhYFo4E2LIyRKUZ+8QRykcNi3m3tqZojZQvqENUPiytGgLOctku30TChD6ZJswfdBZkRjKkdH0H+QnrBUl6kDDHkdCkvHnWtsy3/fOvIcYUlowbAbd3NHp4OFdToMJNMp7sRbao9YIQT4eaNEgxmWtN7mnSDA8nCAevsg9P7yddT3TYHXa7non3FnBb79yp4mAfnbbwn7C5JHa8Fm0/lfB2CGGqIoyK+kD0SvvtoAX458hQ3I3r42t+tjG90eOCPi9jsHtHuihSYv8YHf17gCjWcyhvOZ/OTTMZmJ/4G6vGdNvRL8B9goxQykV/UwM5lhJhkGJqXaXqfu9pom1JGL57OGnDqGgwaXOLM0GPhbpLJfl3YOEELHesmo/eppislSmRt+j2ja1iiYDPZD5/JXR++qYB3jO82y5qygWaf8qB4XeeeG99sqbCGzZJNNj9XpyuJLV3205EBdtw4WIcQK9HV9IK8AcZYTNhJbQVbkFNfLsjeL2LTCGG/oTPM0Vo2UknB+u36rcEJ+1HI/hBQbTUw/DqxeRzbLDpo2CNfi77bpr64BnnkUGPtVNioZXdliaXPhkchv1UWC1PosBFhL/Ah9n/0l3IVi6n4pG+F8xmZNMm4T/csTIGRRL0B/vu/7I/CHr2JXFrvgJXgO51I1pWsKBV2HiMRExXJSG2ygJhLai33yN7eh/eOjuoxKzq0hqHtnlsPD3SJETNPt1Ys9cUNLDFSv5Ny31TQeJctfo6n+faPAMKD3nNNm7yZXwwhglOmoRk/qXb5GkgJP5gZ55TYFfpzODMZBeoa00w00uYN+h2ToFB8/C+O+e6UXk6A39frwZ2Too5zJcunudfVCysrZBV8sbukwj3GfJYKhOX/FOADWhpbRropS/50WdXa7EFcWnb2nnMQivZIFb2QcXZ3H8RN7kludzC4tAnfjmAtAN9ZTT4CuRR+SljhmjLLqQr+7o5OimLRL6kxYkAbXzD8jpsDmhSqv0d53em84W9payf+B7AX0oUFg0uqoC6HxQy3zDNVuhnlkv4FQl30q1lbgHN3OI6SWZBRSgci6bA/d2fqEL7WGhbf0XYxQBQrH27hQkSkXknCGUsaKTSaiwLXV5YxLCriSB4wkIwAa9neYy2FiYzxOyYrhjnO2XHx3TbwfiQU3uB+tfWWrOZLlZaZlgkfDZHe//Ux0rb+6q5NCCawcBYpF2NxfVVbWmRPlVrMLFVGlOWtSXMKrME3QU5XtRHDwF/E89H5BGarKkCsTK9DSqJGax81V21MLdTl3vjsTijjMtHoyio+0yFTevhpEHuRqblxRwn/mh/1gYsDPW7OTdCVOGfjx6i4KrSQgG3J1mK/jA+pbkLmG6ZBYYim5BKHsD6xPMGrRbKwBP4tgkIMGrYcdH+vFn/pIecWjOUkcxrt5LnqxjSy17ZNGcovI1ASDkGPYwpauvRAhvjtz0zpbsx2oEEUKiQEVdD4+JUTWT5HurdQt522WEkOrUD1ADg+bc4qNlflLE9gfqQ8HqOOe+XedTtRVo7ayDKKn+m7eRMKHYqR/mZixfzLU68LCpOOuLi68g6/QSstITvk6TZSAGBVWk1QL7OP9EwIRnqnydYV0HjKuL0w+X0vVYdsqpiDKrcOua0FFWCdojZHidZnvs4gnqtlgOWIF6wJX7ldsNRmFzIq+5vcB/8SHBNJtDT/609lXYbNpE1OT9B11Qn7AQLm5cJg2aLvYR9jeYeL1lynxZHVJiNToaueuk0YOwBV8noqxheewR7ub2o7SMjrSMaGfYUZbPnKJJ4xTDzQyfGXNsOLXdHe8CVZ+o5zLDNlT/b0uIxoKwh9vVdKGxn4qxd9iu4SFPoHwKf9g8uC+sB8AbOV76q6qby9Wpbcr0RoiVZCOxcjYgO6VXom6kFB+mmwaP/coqzxEFs6ThxkJRGQylUAYbQEvx/nwMcyozleWHGM8huxnPZ0L1szn6jNnRyZZQaMuLvArOFDcIuPZcSnohrql9+zwp6ajLIMdxnBCqMQsBOnxNgfzvaBgwcfL14RviA3MQjEu3Qp83Fr3vCDvj84IDv3aLChX1Me1dO+hhl83dyeZdSI0Ffkn0JKm6Lm/z3pmguMo4Z2QQXN2QhkrheEDmfqfzZnu8I4n9OAIMHg5Q3sh4mhWT3LFOHQ7G8RXmOUBzJ4HSz/UpZVSyZzFJ4miil0ZvD8KBzDpAzctGi/eow6OQ42jO8FLks5iaN93LOxlwls641syXgSKdayqCSwUZSRTGHJepn84tjYbmY/r9CJ6BTth0N0eFKuE9Sz2W5b63ZDZ4E+RxyYiVwOSPlnJyij2Ugl1akw36Ef94/1JiqKwWTPmysh+T59eArsQF7luQWjFpOoQWlw/Uiz0H+OfOddbXPC3qG7NpWWyyJTi6/iXpNPaxsIAlO0omrE2AdoHAo/RB05W2SdPuXtrTGxNzSpid4CcFExDGVE/VdHZuKRxUN3ekZc4XKWuVEMHfR4LjH/KctwMUwP8/U6b1ihWyf1h0yPoux0IPZF0UPWkYYLsl1JU5pWikGy5IIzL68zA9jYbXML67s2zLoE7vvSe7QwXG0wNUkyTAWHjke+zN86TPGZdgxZFoUgpXiSAxwGE6ZLaMAepoXDTOs5NwZ4vAjQekQOb54jq9w+EywbgwkEiiPq3VfoS0ZCgArfspBmkia9qJBsvTsKIVrwRjLw7LKYXf4A8UqytqBBTN/GYzPFVvwrQ8fMjIfaDZ8zM4kSljAH/qkUH1jMoSqur73wVhI++fV+xDvjX4raa4Hi37ullSOggeHI1qpyLB4Cn0Wv8ZgOSbRLREs4/A4WAj7qy3NwqGRgNhpdT8uYm+JEX0Jf5z1iNHZUS2HffytP248TgJx4L/T8SYJ/vnGaY5TQFCvL8JZ7f38VxAapTzuT/io1Bs87VYgjYSQet4YlZYcSJHuZXRJVXPjRMbkQIridSz7ZJB1DXdwUSzCTQ4mRHZ+WJLVEuGT44vCukORbEFx1++OuJK8D2zM10n6JOE2RfTkEJL7CgcSp1Nb3yq1PGQ/e9ZqEzn2JJ6n1Y/5BBFQC0Gmm8Yauny3BUlnSPr1Km5D7fgMnoYL/w6cCeGPSGRIqQXfKlwcbalbUOiYEXqobNBJhfoV4i/5tFXG0fnrqgT2nRCKFpX16/kaAiyvAaRZIW/yVAirquME/1msjaKjdLW7Z3jDtQ9VAe2NH91VkpIIe5LZklz4MjyEv2MoXbfHDuU50eC0sLUyTaYS/ccCKMCJRIrENHA6LzfxmiU3Am5fgV3cAylgm4Hvlwlyl6t0G2eijMNj5X9mLuoWEAiAt+xMT3i91xok2gKthCczuGSX0antW2G5ISmdC/4ldsSige55LA40N7fpXqqC/7g1bF/O0XB1SzoCOWR8G155xZBpZXnDfBUzUfc0ieYSlT652uVCCwE7rcLIIDsmDwRs1nn8Y7q9cl7fzc/tHw3SGxaRnNGXYY8lDXPxHv17NrtW8l6sNBc+IB91HaudcxPLI+6K7EoXL39eHLo99jDDm12J8FkBkSscO5kIHy6/vlqjwF3zaEPz5OSD47Je6B1V76ruAGRys/U/fVlO54DMIQibsWYtPBqRwx9UZyiYoFDt3qhX5a2DFF8yFOvrQpG0oM8mebRpBXqU2uUKioOPyjAFn6VIBjVkgLwiwmZ20L6lsXtvjWGK7o48ME92cuayYhGnlkd1Kh0Y5C+8IP1UsaMhM15Dn3CP46vqfXialJ3RqzvwwWKWyC2ojoJ/fb0qQl7l+un9mo+uvZakr5Av/VW6PuHnqsBc6QIkUb2iR6wWSxk0YMhmX0Pz4fY7l0M/BDLuwgXQ45RSL+K2qlhslsKQ5aIvPnwfNE0OXx/5u0YAzw6NHMS0DvaPEmrzRcDe6LOORAOV21k/0WB6B72seyUhqF9poXJ8lIrqnbm/BC4wH3YP/bk8rSU8y5H3ZQLaBAZZFPIN8NDV34oQ44/oalibT5GbHa0OjcXPmJcqrKrSR4b3Torc7xe69gw77wH+z44PC/sdeE3x2mWtf092ox7vvw6GjrNp5NJzMwCmb2f+2svKN7pa5T4yIi9qZF7cRVKPWSHo87Z1OID+46qh86nNbAUc0pAEbsO6cEE4vP0kFFVar1JdyeOVFfz+6fHTF89Y55qu2zzWmglEjZvEZGRNAszZGwXeoB3qeoSc4xm3vuhRXPIdV27jEbI8tvUYEmrPjK9/sl2Ih6Qgj75q6F2vP9rdH7g1MSrBt5XeiWIDBPOx3kT6Uea9CXK50QObne2sC2+h5QtpL1XhZKnHTRcidc5TLdE47CNvOd+w696qq8gblk5Ecyx1ENr9eZu44U8xH0AH3KrBOom/2PiEoq/0PEysW3hDxleSSh39hbTX3HFIcJqMJu7psYYi330DeqoavoiTo9wo8bJGnhl4vjgZ2B/YM3r7Xg7beV5zbiolwelKopWpIbUyf2luPIq48J8bRz/Dc/XclXgc1pbEF08KT8wKTK75pclm6DXvxPpIrWyTHuEN3iGBIdl1kOqS0o2vXXAhuX+TEJMBOOXPQ4E6qVQZ6yuqtUeTQemOve1xP3AQJy2P/cl/Q3ghiGFMh2ptk+frKINzLozIZHH/XUqUbfZNDVwZldLxcms8DsYLCkT5bTIQl8vVsPZJRjGuMcCfEWRhYc7vK9K+u1fXTgxDFpmhAX0hiMaIM2g9MbotmHq+B0G7c8QbymSg07J9Dazru2EdalfjFe8zPmy+AmqABTG5LHYekaWI+tpBYYxebVPh0SyneNy80vMfUHsmn7vdGfAUo8cy1Zdrrw8VBi8XKQykTziEfN31EIu1I0qah7FJ/CaEEO1g6ZEF2cO3o50ZzN7Z4398E2ls6FT7n7pFD/+dpbVorne6bku69JB2oa+l3W45o9bTH58SPUjWjqw9nheXNiiTBTWDhZM0WcahTsie0DbZhr9A6yveQ1KyF81GUzKE+eJPgavJ/uNmvXpQqqqjpawjGl3iO5WN2S+GGTbro5fOfON64p8+OCgOfRdMEimaeETvxCsdx9255MIW/R7Yr9DIae87qxXZsvu7EBsyPYGXhd1nO5MrqVO8616p9SnNO8YFq/zPbaap7nfnIsUde0XO9tbzq1iPxgqthFn8YlNAN1ndWayzzyBxxOSpeaaXTOI5FejAgSYGisOQ5qb1mUx6FgGYO5gtzAyhBCLgENhg3fny0JRq6hIl6v1oC2nPSFGV/oyfmqPSvK8/QB2MyAZ2hcvg6iVGeJ1Z3/Vqm5jEvz43zgGvTBaQsWaBgQ60L5PQQBoHqce7Au2HHHmSpCMkCXsH3huPpgigiVUtRXnovbRK6T2QilzGKhzSERXtuz+2RhPQhgS9U/2Y796RbRFJpho1FuTgA11jc/MaYUsxYkftFYiMnXoxLp/kflNlOQUm8eEr+PiR6PQbhWO8Bq/AKXtA7T+G6jjgYSRmflBaUO1PppbVIewUe4yqJTRVcQqZeUERuprh+jpoVh6NGMZs3EQj5fKM3fRJRaNPx9997ilJ37Av3aDtN9jgXz6/gy1q+K3SEkqqNQ8JWfxDtTooudWD5yzSJER5/QQm/G96uT05pVweYTibi/C5iInpW8OmVfVBFUw9jTGafIVtJWDjGTdFk/BHtt1lGT7yOyF8JNmrDYvKB0kF6TUEwjHMuMq8kaNSQ6Z/kZwmT+rQyAMJAxMTggIlM14CPQYBnEhks8O7VlJRdfmjGjKMe8MGEyChvBaYpqIaZ6ASKT0YrPcQxX2KVh54kXzHpX85qeExRytNWXbfhz1j/1uFW5uXJ08IDvxrgq4ryzki4YLwCLU1YhUYtm0LFSnXsDbgJZmpk6iHCcEenVK+3rfZqPa41yVQu2nEiKMhAvYxgeas8lU2GWnM/kQHly8aOZdAzsxTEpUYwdtGP7yaiCavNrWwkiLA3rwYAGfyxRvf+J72zwWQ993OkTm7JynMLO3KvClG196o7DwG3nA3f1hqMVsCroY7R4grAUfl+aJSKqSuqwjpcR6EEuAuwYGKl7Pfw/2FjyreEFyq405tOveHKlnK+sdNcKNlqN2nFMwPNIo00zWfESi2jnQC7FHUDTKAkZE96J/SBMQaLW6XAC2V5YtjJ1qHQaWcA9zaqpKkoUVWkzK6/AtydIDNaDfe6eOkuMcYJL/N3dzPqul3wAqHcqB4/Wj6bbzH/jwd4n/VknbBcqHfEUpwRTbuf3nuhFEQrnKy8qYmLdrEb7RgZZ4wYuFmLvYkEUEPopHy9ZjbRrISBX9ksu0Sxr5foThBX85Oi5fV9KIjoI1jTDg9vk4phuqTPjocBAqFNiwK56u+knt6fB7sevUsguWIPj7ZJ8vZvMj5YliOeEyIUCIl5B7hf2kS4sSP7tcZKCOSEBhzoLIN+vZgZBCz3pbVVrc3UcJE2HARpyozZNKXlxrgnu8V2Vachu6VaNiRwv1gWv4HOPBa6CqALRK6DtbAR9RVUk4YoGNrLvCbJxbj0zvl4xqq4eBEh9sEIIPurVQWdrcqn9Bo+bi4332RJEZhjFlYIs84lenZ5yiGYOLz7zUMQZAijNmoN4YJv14WghqMtnVh/hfgOqF3yURHQt6rcuklzEGcpPSVjgi3oakZ42qrsd82VWNbhT949gefq1+Ru1bdRkWx0ZL6RQeCa4JRbP5KRMURHc1uxEBqgi/FHlTmygiv92y8z12NUrjtxUKFy9F/EH9xTZfOeUmfgVOsfSTuXjfOqdoQ0JBYwAx0IIPdR1/1SCsZOymacq3F8rKcdwIvgHRuhO4plnsFnwJjO58x2vVWkC2xbPXMD1FfrjPmI7XVNn/G8uGaqecOFJNHah2Z/6bMn63cay0lz8baacQOfwqcoUuaZVxPG3mWfCL2aoZNxrBfH58NIehlbROeqBIu2DWHOSvhQLWVxC/ES6jUuyH/wVq64rCIiqv9MwVWiQUg8+5WfXLq/htdJRpjQYFoCjIaGQBL6dAOc584mZzdp6wHudmDdQRK7gaMbY58QlZBXsz4pX6EjAoSh4RJBn1/nORPd687T4LFw6rixjb0FUu/evz7HhhYF4On8tYZfoQEhM2/ArI/u4LI9Qa5oZp2MMRI0avScm/kEuVlsroZvR5V1HhJ3UX4qsK2dWuCmOGePEl4Tif66vPQQHr5toTsSV5yBJkWDpeq3FR++SAstqb04EE8w/E4cc9exb5eQePS2FyWRgn6jrzdZ6waD1/e4ov5TTniCMCxEC4qypRdHxopZto3ANjmTnpmM6pC2ixFu1kfR0SamjSnEhxrP9KKHWygDL5B+IrDKtw0lsCuju5pGKhlZ2t2lFYrgBfEfrfhdM/0YLVXVji7I8C/u9s7Anv57HRc/yebM2Wabmz0mSuaV+f7ent3ha4w4ktiX1VdjBz2KzoBd09UpDnCXTbgHA4VaGHzQjUXpF1GNtIVH6wqrARkotIw2cb+uCjtp5psQoekh1da/fmkwD7Kwer9/p6dQDOoiO7Wx5wg/sdokPqd0gpG1JUvUUy+1xVW54qfVEMgU5Ar5r/b5cs1JOvBOLCLiTbd11aqgKGBaAVTNPQWyo2aMKMKGhTR3Bm9OUcCAq4VR9VaxdB3S2dFBcS21Fnn+89I3f0Wo+dT+kFqftpisDWDlJ/OSlq7PEn5B4e0GIYaOREqVwBfyIBJ0+f1Ca8i0TCKGIScckmiWMiU5snbwgPdaB8rjr4rN1ktruXlZjP0JXvTTqyhtV0rxA3dPtXD54LnYFyy3TnkxVGM4C7CHfT8HCP0JEZeEhjsHfMlWgVh4MNWBGtJ8F6M/PodC0SOVgbLiwnj5X6vCmPXbT1DyZ+U0mcW8vDC+vnc8bFT08mBT2NZIuplsfEhb76K5U1jtqQx1qVLNyAtEkfilpP0tfCHJztFnaydVPYSc4+UWnFhF9RA8VcF4BrDrtVMxBN2nDqgR9Pm8F2gXs5z3c01wnRZjoFRj7MiWAIRyCt/KNhrfrWOGUpwrBxRF0R9fYxCf9m8svKoleoQxHMM/i9FGJPDQGAIP0bzjuw+dg+Y6izcltHRT7Nm2ZGe9U5fVS9pL6qbP9/DwFmAFhz72w0z9Yqc+z+b3nNz8EWmJhFrz4PoVRzHqjAQ2G3FOIzmwft3aAn9jmVrfFfJ8VH2Y8us3xXqvXlW0Yfmh2yBwK+pE3vZuqhmOOjes7gotckwzMTeV+fvO1UybXTNQw+XvDCMW88/LSZSlfcByb/OlFn+WmozRvDwurVRNqOCg4SZOge7g54l3siRLyZIzmUS60em1b8pX902WmsB0TNX1cs08S1X6VZIZtapG/Ht9FPGVt/B8QDN5SI9ZJ65bkLnOJJarjb2yw7bIk9j9WeSdLF9g1Ljp0yqjkitBYsL1/m6ckHo6bzB8QdTTd79xG5Tn1Ow34MBRPTBLEWvohaJagRQX22v65DskGgBvIUNCqs5ka9zohEnkfYKth32zIqbqiTmX5mq6lZ+yEM4O43g4Z3bMcx58ntnb5oeAI/RB2Z6Yi2XNcwxRCz2243F08JT8fESg4i+BrScuDdAcRGi4eHDONWaZOXnf6kvNa+e5y41QeijF4TZy/PyV8B5uMx9o3OnEDJmiaoP3lm16K3SyX3T8862QvRvkEFAHnzG4Xy8cgjVvwTaGN3jkKhrUdclzdSfFTga40yLK7poBQqVeAEDtKY4VHXmjmsmzD3/1PsQOKvRqCHGU8HenNgI9WiRQim1tFKhBYTPAY/sXte4xK87hf41CDImLkjnfAl4bM8yIRisMy1Sid7eVvgbcm9buJrVdMHSzKskEN9uKlDaORUgp40vzmPFxQfYHUJgEEg732wUSo7fX4yswQctWahTNDvfoH6DHrjct8f1hnJbsEPlepYU4M8biVVnWspKkDO2oRQEz54/jWrKbFQxxAWuEL5FH1t5M0VM+0HVvEUggrP7c8lsKuWVnpsUrEcCTK3dj6JjdBP89XwqjCalgohDUHP7f82PkrDt6BNfpQD4sGOzV7uuE1LLBFL+HYWxSwP6H6/VndBimXriOg7jE8JH6taYtVgscpG44zVuHlJOZr0UTiwkQ8H5sgBpy9hnloaTTYOQALYSr2Sj3TIIdbLYFKkCl4X5sC+Eo9U/oURdIjxO65CUWFgD144KxqJpYLsJzLK2vbvun/KmLJ+dBwP6sejzGNpug1HJk+APLy9YP9HL39TICGC5BAKVTUHGp52JJW41QppJ24S8WA976KDWXC7L/kKz1PwnzxI1KxdidV/DgIQOMKwjKT09SnopDC7FnXAn5oC2nhN8XfUo71/xV8x6LIn+m1bBsC+OAEhUA2voK/9wcQ4A+v9J1Zhe59vfh4ltKmhASfIg7F1d4Gg0r93uFDw+LVPc3NAp/IidVzG1XO9YiKnmnPA2ATyuQY/grXB12e4LQZTdr7yF37q/eBkZ0RTF3y7BPwkCe8lPLQSc3MrtZfN2+30C9ttDKfu73+aEMEWQHwnQOQmPMCWk7AFjfMEXWD4CE5YUjTVPJiVWjVjI3p/pMi/LoXX2raP365ju5zb9CWpQ9ASUNNoBn/p9tgasuA0W7WvzXNUNfZFgkj7cKcmkpHJwqXa2y1lulMJ20WhD6brEwOUXBenXDp37/h/4IFzGc2n/Gzwex+xfeD+E74JcTwFFi53kjowywxQndsd7wz+mD9+UoNk3vaQ+rrmzgebr7LvZ/uGBoGwt6u8gMQ+j2mJio5JU3US4mONO2Jm8re8Rvnti6/O2P8YPWyBOMPtCDY03t/MHcjPvdjDcJPspcKnHQf6YvDOXBlFrWrDUqbmpqSruQ538tI1BhshwM5cZ+tnd8zoa4ms69Er/hi1/15wGmlkgjLE489KabF72HTzfPUNRw0MxvEn1h2A79cMxC3P6pjlaVopsbSazXZz/1HIpG6d1vHTzS5MarDmfabne0p3Xd7FmVI+a6rEREyc48p3pSewaOMIgOh14QTqYARoum7w9NoW/DaT9Z1glo66WSRWdDbHBh50M7iqGB2oMlrN3+do1a3bxw4ac2E8H3cDnMjFZ7QUXU9u6Ec4D+9kMXIOpF2cc+h8S5NAQyrYNAKmtqWA63/hyC6pWhJMz5ezbWL/WJRrwAD5E1zUMKCQDn6UutcLdBTDTnMLRKLtOw5LT7iCPsh5iyuaug9wwXRDdmYoZeVx+J0512bJKYC+2h6Gs1kHI8lb8+ziJ+lcnzo+8HNqh96y12IMBI34JXm1SVQK/XeBKcq6GympAHacIl8Lc6q2uGmHoVgOMNRVuACjXai16FjkDe4BPf9hLIBexPKjgnT/G45gcHQVDUdT5S3Q6pW6Gw4qiicRHsSuenB74pOoT2AUtJdZlEihbrwj7xAkJFACzgqoRrFxe2CQVY3VfBG9st5xP9mWaNTN60+JWEywCCo8kYFrMu2C64k27T7U0MQx2Sufx0KW8z0V/2OUp0ye73A1IXdrvtPUmiAYshxXZhVrBBHGGeN6K1FLZY4BsKJu1NEWh2m8PLPW+TDvxeGIWAPZ/h6sQ+XNP261HOqTLW6CVp1G1JvFfBy6Q+CBgHl8K1QEtQxETz40OMGyfGGPU3J25V1ohzn3r0pBfAbaDGDatsdFsCsHfBweRh9i2NyOk67mMWLkQhfU+19wausG1PdM8o84cO9zCKLWK5IU/ajHtwIQ5edqSC/IIKqXyGD9EFBw7TFN/Ed2CDcfPqr4OAmcAfIXaA6VJlKpuqyoOawN3pyCu7K/xB/Y2jfGQgDhIH9nHkGtvt2nQuuARXWT69pvJCssakxtlgnwGz7l4s/Mpi/sjdZkogE1HPBXNS8LMLRXvGIN3s5XU3Z3C02Hnl2Hx3o1nn/6dT7YMj2V1UYRIFMj9EQ6wE3Zz5bbV8f3XHbz3dpDwKi5eisrSQhLqG0it2J1s+kSGm4aoCc5YDKCF/Pre18P7rZL3jJZ4t7g1Q4f7au4tWry99Hvr27KpJADybc0ploG0C0If8OE5u9ooIbuORd1IUlhtBimqSTmpYMS6R4tt4Pbj8KEu/YD8mk5Ke1gc6pTF3QCVQIK0TVYxmDUEFjll/Iht3HE2eS45XOkBU2ENTJGyS+UEL0ZXsNXFH9rjIJZf/6g6q1w/Ziu/l94jdGTix/WQETloU1e3A5NTgbajnI+9rW1dK8usNesieRv0+LvH5iPSKr4W8FlEwz/f4QT4Iihe8YFV6PD72Dkyftur0qZ8U9Q4/kfPtuJpQ5dcN3e9+YT3zFc5lWjapL1mnMRvIftjzmc1FgzbXKgvdjyxrigZTnv1S9/WkT+Z/Rpt2V1DqMyqLLxkw3cJL+rFn7psFuo8Hs23N4SB6e/Yt1R+Lyl7tlDRtC8u+XSIB5oEGC1KHqFsRYTuiRyDwmmecljL38XZPNYRZk2/ctOKG029dRBUDsKWF3t76yK5qcbejiRMUORZ6tif9qYIlq+s3XgStf5HrrU0ScNP1s5SaE1hGr76+TYIvWJEQ20Cg65Ten+2Ffgb9tntbX9NOeEQ9W0HWKmQM1c9Un9gRIshO8lG4NmreUnEdZV15lBLTGJTEwtPbibQun9T90OY05poAqVuvHX8Za/QefKbjioV9NCDi9soBOJMTe/f6Hf35IzHUryzm5pr91sQx13je2a/pWS8HSqzfixnc93yEU5t/NL8DMeFoMgA0rja6rVc/VVX8/n9yKeCw1s50bfSjarK5VWpceyyXbJCg6H+uklpOtv7AUhoh5aSAXMfETYdv5rP3qsIsdDsCM0Rd8jOJyIprNdjVuzRx1qKX8T6mKEWLdJB0qDbgFIXcbahIctIJgomsNGaYNSE/H+Rm1i6B3uKx6Wr+M2TDczVof+8oGJvejOn8JV/Qql20Sb62RxnaBaLa+CTD+oGHQAd3qlZGlB+NdQz6edADiw2whc52cc1pYjdiLMfLEfCNKry7k+QNCBwRnlrZJivE+JeoKahUbYckhY9H633ZC9n09CsWPG08u238WclG3ia3CMRsSfmeLN+wxN4P80rwbM7reO3FakZ54kLBnxWOocjENrlXn7rccJ0XNXTqfb9uVLkKcg+mDNg5fyvOfOPr7/Jm1I+wDK1wfjbkr9iw36mtlIm594QBbP3DphFCC8xjzP5EQn/M1FsrUE37ElSCSVxRmjHDj7/i1hNSs2fmigubZJbiWAhTGu8OPWW3L2cvR3XaG6dCe7m1xB06gY2SBF6e5p8Wr5S31zbycNlIka9helMig3Q1yWjub+wU1kcnTO1aSIM1GWV3HB2Bl3QXKjQxCAEARZo/PoAhxueyfrKwxVCGYuD90RzSuRpA6LbqPIwdrDJzbFE1wzzzuvPD+R4esfYJ32FrvJZN+nCpxr3cJDYRmF3y4nGjvauTIVeAloZl+q5MPyDn4boI/VYHRzIo8C6R7CAPWu5JkzqsDoA/BYhY++lrckV3/QMmDXwaqgIIOxUmRKaIGGC9AU6PqB0mQKow7ucU3dEIse1wP0j8S4nbFNNolXTZ6miPncZwfT2EDQ+Sk3/C4dZNUsb1EZohSnl8Tiw7h9t4aFkR5rHk2t2gPEoRyJxHTGMSjlCLhT7+7KdDDYnzd2BWZx1AVF2RbpcajscePAU8luMGE4Ct5Bz5DfkLfZVAgB5VfUdqvAYMjcl/cW32LJ6epNhXqZBhlfQAvfEY9CXKsasjjxpiSCcKErRtCvUtDoDWxZV/KU0T7pmnuKs1YhVocSetQdsDDtGDXL6vqHb38J/1bNukyZumAkVlw2pQFsvxGiJtJYO7s/Ijn4a5ulpaLnW1uTzIy8zye5VbI8T19olFg7f83d4psLB4pbPqSfBz7FRd3oXiR58SehH24Oa97zaiVwzWXsJ/JeoVVIpzCZa7Oyq7Q7NhqMMgPZwUS4ngY5+wEE20oYZdxhDyabP+WiXLaA49C3Wl26hnskphcfIMdulfgCbHmnJu3vgg4oOgVguqumpgsLWrTiDqNIRZlWFFzMPVSP9UHc+Fw0xMvQ/1FcFfYbg9w2NWjK2h3PUoEpggJGY/fZ1hf/ModGy+7U3oOYOBGJLWzl6+ckO12ymzs1xp+jPORb8CESYuGvmoz+MtYVNNHY3Xcwi2fwdISXharV6B9rcCWxndCxBPJfWD8CcmpbPBiYPfMgbRY/FHQA9VNnKVJ6UAVk5NxegsiTBD5JOhgJ7d+c0ZD3FQve7QVZ8oY8L6JQs4x7tm+ux3Dsb26CLkXKhqatmHvlosJJLVTQJxUbqYVOwuXFHluoCfO4hpaw/1sBiSLu/ca3f2s1iL40E1qAJfNI4FXZBgBC8SovIZP+MywVMRPOgK6NSKpyF8qLTosQgRktsIqKkcckCFHZRwJ2HD42cvzPJ40dr0GQmF8Afepyact22npX7H88LW1X+dzEaBjQHno4hr4i9mo2jTR4DEVUJ1mOfT/sPJ+Wb15xRPLOsxiUISli/yb899BiuU5VXQnfMfbAZfRlJp6r8cjPTmZX0KE5LtE22qYyDo2NQzm047h2+i1BOPPUZh5qaU2rVWlDzATjpBWcgDY9nqDY8/vXg8oiK5senyQ2BbNFGRwz+LGQ1f7J0Qi0YkE1KSUgNcu0/e3FEGoNGYfa9oNMWbrU1QbdIx+yWq+HUfy6zswU3R+YB1TPgqgkWn1OeOQibGFbfMKV0AkFq5JqkVypPuI27TvyU9KdN75seyeEAuNFWB6sVxTxCFoBiYrgzTrH+Umlt+Kn/CxqBPzadtxAp45DUSSVj8CZ5yjcwuTbtAawtKK5UG/8ciHop8+MHMdUiDkj3HAVO5lXAsyLJP14g55R6wHEBpgr4dfuxu7TA4nQ7BAazvz0EhJB1RHR0q3jRgfKPZD6Of0i1YYVEAG5+eJe1iT50zj9TZsaAC5uoYk4ProsFkpQTnbI/2z9Y2TDesUJ0EWl4yQylyO4EbUXOr+LkgMUsSiZ9+WXBTjgVO0OG52w3pGVSMjz69ZCFDYW4vP8jrEZeTtobUAR+a0lTDXh0DDNVBtaXmegztAQdQIRa9ZdQYqKpWUvjFCjc1rmIP5PjrHk19GJ6/e95EsFFO6iXB3+DOVZyVRBn86HHYYfQcZQ7855d/FRUe6MO7GqtOJqRt1KmM80rCGpvqmbcIqkwAiIaEJOHy5E4u5hObE7QLQJnaKBVumlCarWyPyRmtHUm9Uc9o8ZUbvxoBhBiFaz9xdOkbtRkOwFdX4RwQLBUYHhwNeCNrqsVlZ8YB4c+PXYIUI6VWk/GCajrRWn4S5OFZaFeBLZUJNo5/Bo3ALdv/y0AOG8Tw+9tekv0uZ7FlMsyTdN29cxdEcOwwTzP4S37N4gXAgIjH5jLp6A7oOWrnmuWWUGx0eTRvS3gRRCO+k8fugE9tnS0/laiM5CN1V6OcYuHw4EwLOTPyRlpcgfAreVb4zas27yDkUZ7sGdf1/fIGICxoAA8vLdtYFA/3pGor8Ba1vO6SFmpdmb+F5iLe5RC+czCMS6ngHWTxncIOgA5P4/rsTrZex9xZ2VrnJQbm9pXTtSDDt5EjhhJrhLdkj0CNKisdPSOtFqI+reyCM+fkJRdTyEIrl9KYGAv6nUFUMLkpcAX+XzM7uXGo/YWbf0yK2s5fW6b/RnDou4TODvN8p6wOy7s3JTBJkEagvTsKfQgvvBTI2bCmWWzwc5FSmOUdNLt9OLPHaoA1graCgiS5nJFv9a99TsrgcYZEnXAT0nDbLj6q94nVWmKzKIUPcg3PcIz4vYrJBaU8w+vm7LOA/2/PdGt+4jwqZepkRfhbO6XpitLgsQYIa4f+OIoyhwGVUwivcrt4kzwtOi9XgDNnL3rDtd50MdohIHhJAXZZPe3sCD2impVLreiuxXKr5oiYOQ+alT6DnFsNxbmDAvoNp6/wEiidBSMZ3iFB87ghxt/0+SUzMaf01FXYFSlUbFOmkov11JKPptBGRPSOnnTiQdbyV7aFugWiqoUHO4lR9B7IEmh/soCq7vjGa2DtCYBIP6XzbjiQBJ8Ef+Ltq9VP9+D9ic5mA+9V7/I6kTUZ6wDgtw7l1EnczB0sv9NZRlBFlKQwttMXf2Bf99oxzaV63aXoa2bl60lkRSih9PdPGv1GKqpyrHkahdjktosAVwztlpqu7Y4l9Xw8GoLIiOzoiUXvZIKMgfckj0fxMiKBE/h2w1+JmFGIJZE3fPYmuBuQwO5CjFmhxJlTJdPEck+aDA83cXGxavXkshgqhmflB0c/zntdQ9YLSxwZHlJhPW8MgXY71SRcQWkS+VYHF5PnSpk0kqqYKwRuISLKtbc4am2ejkFgqrdHBwe+67wkDFcBlAnh9iqAdrIdrHDYcFub5i/hIjIsoTg6VqSINhaLion+pFOdV0MeIOvkzgrdw6ayEHWPbDmuvqXn3w2FamgaeCf9+rv8bEK4ojRExxO/Oanm9YfEVBpYe5zMp6wO8whRb9m3rz0dhIbk+mlhHFsY/Rrp40XtkY5Vo7QIZsYHbVepE/KopkN0V+k5R2bgXS6E7d0NY3CDRQ3yoPIEpcZO/3/2QrmIYzNQpr6/sYIceDID8eVsVFdtFjGLugLDlNGeeQWPI47lFb7snVvMX427NDHfGoAanucmHEIeqzt3r7EGf4P0XOOCXCupaN66tlrnHOh2ddh8S3YlpWTFB60N8lPWe1Z+e0Ryw8uulNU09u9JvGkwK2evvAvZpyp78Jtv5G1JOuKgZblWEPOuI/SRXKzBVcP0u8Po8QNDucCnSPkvyioWlFAFbJchZvAMZaBJ6hS12q75lRmv81o60Ch6RUdVcA9pDB2NQ25RgUz01+bhFLvsR7MlaWRnuKIV/o6ZQvGocuPXZ2EwUryILisQmAaruaB9/WVF9OmNhhOMOtw7ffY9Jx9bliRxu+9+6c2XRbIZPO6wWWSPeDRWyO8/+J3dv8Rd7KRVAVCtkT9SaQn577CQZf+1L4EBmnHe3E3253BMkXCUrKjoY7BAFh2JfDwYLBuS5sJA5Msm8ABnZlTDPFWJVDaWjbYRZ/iHnx+z/Ts58bhMNbb5/EWalUjVVXev5/0yiXpy5nrM1Fl3kNNoOKIy4yXKotreBsmfTPt0oXFAHjJMl1C6Z9vqzp4xEBB78eq+gm1zX+79titzs3dL18Rf9ZBAPZJLX8GwjJmZGYZzptBzsgL0YOPC7zIXBnizOutVYt9z2zbtiUChYZCMzMwFyihJDeFC9Y2CsVmLGX0YxFG9bG3wZtF7IPYFOV2xNqYLEKW/TeemaT2oKF5Wdn6tSEHdueWYrKu5WVqGvv4quTX++ldr1llPRk+MInFTSWbOKMz0X+/1AOx6V2bxMdBiA1TkBmQVUQB8AWe7UqXVCMBj3E4YbeVA0IAzwDH729dJMvX+C9Q0iQuJGVvU8t7apvE2cVKRbclsU9pJAzd9vWWp4uWHvmHOO7sgu9FGoUtDtfkwXYi7lFkk3dYTjYZ8uHywLndTpu+foESBnVWvalYbuDMn0U3i95kAzbcw9fX+Hy9DdZS6SB/ySkma5NqYC8T6OhNnam0NSCRnpghxy+PUJPQH76NCsJS9WZa77xdZZZOBsLDLALgnZnflsoQzXbvNH+FuVWftS6lB3PJwebHeuA4rF7W5/8t8juRgxo6N0HnZ2vn+SRZcLZXOL5Kd4PLDftDqFyYREzUns0LC6JrqJL7Qllg4njzbDo+BikEH74obOzzLcyqWf/gDExZj8SM3hp0Y7gr/awPLMWzF5QBkq1Aq/nz6NyDsPJ6pFniU6aQ+rKSRiodr51WgX5CLdLzAkgYh719/dKodz5X/zCk09e3TmhKQd0WwpynD+sgchRxEyHIQUEQTH4PzIufhgAt31Kh7JmFsY9s/kFDgG/vQWQ7EE6p9SvJl5kMSBkeZBmD7VKuB3VI8zoRSlt/0rQkIeHYHZs586D5KCSi5DI11EC4VOBkbK2NCiT3WSwTtmh5qsIMlPgDoSi9s6d5VsJ4PLu0FEZSvDhrY1XcmlCDuoa9iJI83OVaGlWF0JDSxYBaijlQXiNvf2QYcu4EuW7T1FD7eZami7psvsgfHJfvy/yvVSHwIZZR7IU6g839imBwt2hnmiEvs2tVTCR6NhR7JavODQ8pss60jbEA/xDVz6+y0wFuybp/xigbpinUtl8nUif7JghuzZGuiB2DAqajJLXWZNh/kZoPg2tyl6kcZcwi6vp/xYPIaDR67B7jwF1SpUpnCEwNKM++/8cssINdEdFPlrmZsnh64MSdUkZNKfCOKyIQ/GljXh2QVdH6c5lSXONYC2hBd89irNiy8IFe3k2eg6QkxHDgm52nOqugOq26TX099+e2YgfnuBp0al+H1XPAYHO4P5b5MhOJSYWjnhRgSzZ9cwnb3AkOM7MOX5CS0bWzQ1PU1ta1QVYcPdxGLuP3vjJk5UYr6l/INo6fs+59FNGOFzOOpsBy0lDomVBSV/jfhlklRcvr4B6eCOX7wTUd6LCfixrPNVuRG9NToL6UAhNq2vIw8l+j4+/u8XNJXtkRMCKfGzrz+CZaxbau1wxrRiUVwCuPyjLvzktql9wcf7UK2aohaOHmxmZAmmzC7NYTarthjho2EGvtrgj7KfA+mLynySyPp78xY7U7S06ckuQCp2X+8lV8PEJJfLnk4DPPiXRmgSgVNZhRqKPX+iZt7XdqK47o4C9Kx8NMMMPrxQE07mS+0yZ3UtQdHjRCYkUYz2XlGdNG5d1WtggJ8aAL6rIEUhf+AW+ORYqJiV/eX3DsgwkpCk8ogSyaBvIGtMqPHVp4xAZBPfJ+ISt3jmeU2/VNxPDhunRpdPHfdweNniH2ig008oIIzrxjhtbPuHp+UudLOt1/HK12m9BKJg3QtIOEMHaOFS7KTvVTcfyVDMwX6jXzFbO0JpbiXXnVMRiDaHylN+v6SAFaH8Jdj3NkaekR1s4BT27+ML/RX8Kjx4Mg4nqdeJieHscwJFgAvBETYpKUaGPtEzoV8zf27r1ou74YF2TBw0+wVXyol++PYemEbi0zG/zy2wRPFbfVvjdYTJEEJG8r37Hyaqm4/PyGfSwRdoxPgsfp08Qj5aQwI5xW8Mej3aEBhk+zWXXVjYP7QNGTnm7Ko52a/ifeglPoXPcLpiWYaOjSDxKUbvrjzcuSZXgrI5NtXIY6n9yN1YjTj4hnB10AYLqbjGfAZmUUP20eEsb87yoe1oW8eV2fNqi6CYK/rMGt1MSQUEC6q5NZYVQq5ZcFQ1uwkpCWiU5y1sqqJ+bTlDAcS0Ejhdq3RLhWuMBiHAorjkfH+o01O8kUVxPKjUtDspq0+qQW8o+O4Lc4D0NpsmamJdPw9KOlRWZm0784HDtOcBA7pEcXUJJjZ3FOHherDA5+xD+yQLGAxycmbiozoJq+ZgoIxUm35oynWR3X27X3sLfvc67ezmZTNg90t6BAxoatVu74vmLXXKgSpcP7dKcf2DohX0fixkgRjTy9THh/O7CBmVYHdCtsGCbv5rh+Zfjw/JxS/b0Jg/er5YgC13QdKT6XAY3EbhKM8pTS+R1gQePy0MbmWN5rsrEtzXndLxkeq3DuxZDONmAx8WRERloYigkWb06p1O5h+M/wfINImSEhhJEuKFbmlYU0QxUocEo141nOYNhzQebJ4NEFAThGMb6d9uAdrNdhii9qQyBOj1gBccrA2qpgJeP/Yr47HN4Kh04P+eYWJHgu7rEj3KGX5QWvT4I5Im7YV3F+hwU+vnXY/5tOJ57KsZRL+jXzCytauq/zFw3dkdxM5O5665lXORyy3EZ6tXz8skr85JdlN1ZboEN+58ImN6zIx464/wsVXBxqqz23Ru/fPKOrHB4OXP/FUQuAi9v0pgeb8P9+7M9ff3uYzfv7IA0prirXrsZmJsBhKzpl+nlSgra1gVJv6QE0FRKHh3QSMwNSUEyJSqrs1lkIprukD8g+H9Oo3ldoczR9vl9He9IlllN0F8uOLw1lCIc6dZuj/YJWp/2aExTRok6q3T1Rt21IlqpU53TmNNrBGnwcP2Ac5J2qJ0AlA1XGetoBpquxuxtYtdP/C2i9d9VvMYnLAfZr76D71pImfuCDV0+uEIhqdpEuaAGP6wj/VF+OJhnr1dB1FlOMmyVd3RjlN0au3jY3UVz0xqnY43vQG7/f+WcMI8sSuO/p7j4yimwMtg9DxA4f0CVeSmAdY+3KswRWSphIEHfo4PasocSdVtWzsgQgeYxdHzFJ3acFFW+eePPFyLJU/YV9AYq9aiBxTuFwRkCbbl5MGIDlXuTOSkZzmbwH1ee8NPArwxL/pga17rlgbFCx+ZPi8wLkcEHj37nbmFUTsL8Jr0P2B0aFPxbsHQ1lktN9MzqnYWdgOkyXdjV6deQUKJORbkGxBtzPrLOtW5OpASkXOIOGtfG5zRb1o5tqqnFloGvomMfeR2IdmCYVNc6Uv4J4HK75vdp7lOJceDzm+thHr5D/fIjxE+oknSScAaregt+Qcp/VkTd68BLFAx0oIfiYm87ia0M0Ltg58E1rNxCOOOGkR7zK68gh9WpLCIya/LdKe6mrV0Xo5pI2g9Jeh1DPyaQgpMqSOUOHc6ZUth7f6szNWDPA7O55ZCnHWVOr24R3ZXuXtNx4gkifYmU0z4AM9NsbO3lXQrodlxAJ7/ouzNWPO+ln3AzAMxojq+7i9cUM1x5n3OhHFmVMWbCxZv96BzskRRWl3buZCC7xhCmRC/E95Cs5YIpNHO9zkh1kq2u1ujFwrIs+HKd7wyIHxeZW1SU3gxw5A1FcsmmJiGtSt8AXhz+dztRQl5x5LTC5gXo8bvS4jbQ4zwbIBQ4c7Dq0NNj9G8GWwjrME0HhqhEhq5qtIbf2i2CVLVsOq0r1CS3I8ezg7NML2AQx2br1oxFJ+j8lcJ/AMbAp+iaDFSVm2LU19fo5AKI96NiQ9gjJ+YM41dWuRzkcy+vB+AVIrlLNJvqpSuwCtvu1uk9zUM9DKuYitPyQgaoHVm8ollNOQqh6sr3V56ggs/YRftfi8Hwirb4asvjGkbWgoy6kKlTzG6aOQ8YfHcvd0AfY6za14FEG0LNd0Fy+a+RQzP+O2W7bWWNsmhe4JJSPcO3vFqf5+ldjmLBsYmZjf4MB5OUVhWT9gZcSzaqQRjmAb6MU0JuTzlcsTmwx7P3sdizb1c1+Wvj3N9xe+/C8w9CkMLH8P84rRPY7DeyHlfUgumYF/1bin4T/zT+hedk1ScH2D50CstitDIrzsJVcFiThqf/VSVfHtJJBO8zatzTmMD3DpLcfb54Z7aTQicEjynhScIwrCmdUytYdots3dxpQfqClqscyQ1rBQNbEmeJByD8tKUJ3dhjRlTvoBmmYG8IXRXDGfYLf8mtzycWj9P/NnaHx1zdnvlRsKvgC6uXWXrnBdtTilbZkXxW/nx4x5fCooRL6Y3bb2ubRcZOgeeFdUe/Vv0f6ESiCZqZnvtCtPf0MfGZaOY954Xvcf7IM+Xpjwi2ggkaKxMR1xb1zbXnbLXuFnzmD4gyNVMxvM+Nyh3Ir7uWWI1FNIJ2AtzkoHP705UBSBUkL4I4bMsWSWene3HlkVF9qIp3QZaA12y1mn1pmdaBqOlu84nVo2/VzUcVBh1lH8a1j1HaNL5ELagdMB3/KlXGbK502sNTdqfZn68I2ifnzS27cLsqlA1m/1z7CbbRMt2WdoswsrLHPCwBTUVXTpvLwN2Xgun68mtfaC1jbGHToCPFJZFSZS/D6JVb5BJI/rva1ClW5aSXekC5gmlHD3j++LqROik6TQHqrwk5zzV6MNWulj3mkn/0bBEvrzHJN4lVUCOyce5MFSgOJTjr1omRqDec2ic2tQgzTGnRIvId4WDm+ZViNNxwSF8v44Z7lpojoRvRoKMruHJz+0SdQta+ROLaw2AOlA3WLP9srjkjl+lH6j/OHal5Gy53dCxA9k5rLBtpo9Su70vnPF0CB+EgWlGJBQ+BoD1rUgFqzCitWaOWVNxTwDAAbw3Lyu5dYfp5+gDW68eI6x50wbQn/tsJfWozmDxNyUH1z2WeJATwqJnrFb69AZODy+ZP8knB1MbrZPToQ1xLJMtR2RsNLipJoi6P4gD+DmEL/0epUKNqpu2cknRkAZhuWDcb9SNmcuqP0MuR0NCQan2iCAMWKNTD+tdzxOOgwadyXYSDJXcj18FQ8Qq7Fnrk6wvaKNGzgQoceADG3GGBDQHE2rpU8voe917OymyXIqsNrvR7a3XJ8hhmntv73QNZtOXSVgWlcYaH7zz2I2Kk1B6MtOrMg7Y9ne2QFbYPYNhdlgHkrs9Ndd2+1Nibd/l/WnYJghEZ0WennP2hHxEaOqh7I7xYgN5wLUjKMkSHg4vBH/8bgWdGEjMZ/SAvNmNkQYSS5qB1d0uUZ8Myee/GHqXrZcV0eSdZjlZg11rQrrcdfJKiD2N/GiS1YKKAGco5Mv6KHzX0JTXIwZCK7rr30v6yihDryz2eVUVvWNxOAnwulMmZ31an8cwbYdLG8D8e1gx5KFSajuEi+b2skCeVmh/rGRhsyMXSPYkKzaCK0dHex/Z9iHRr1KaOW/q2ygZPCZBuGkwfgqVCek8isNcS0VlOB5B+Hv2mRz/x6Mme8D0pQ0H6BWdQGq5h8GbqhPDuZ39XSMlNIJiyDC7U3s68i1wm8TT3onGcg0esdcLGVWc/knDS5xxtK3InQl5MQ70RlUJump7aodT36pyfMDf2qWeVe9Qqkrq4s74OWEI7PR1XiM0hyxnRdaHqZC9+qYxremso4xAuiM8lpaIpqADOEMs9gX9UHSKQBC3AGIiXH0ww5t0zYg6LujfzZ8gs2A3m2EjFruwtWbK3BvJ0/n4LzUL8eMcIMjtdeTVs86Lycf1RU2WFfwGZe1NvcD2VeN5HBd9dLmG66/U/wkJ1RPrR+Soix0KiRVNRXEmTVtXP40paoP7WLrXahNbWeoVYyx6u77q6lCzfUiAUTT6rGuHw93xOxdD4SK5RXgkJkxEIUZWMvSMYVWtAAIshOSlQRCpUfXzZyZd/Dc5gANpBvzHI38k+Xy2UZUxiGjqqCKaZOMg+tg1LIPNMJR5IM2alVb8vaZYPeNl//yisERkUKz1lTFVLRCRP42MeW/HBoD4JyKQgsbwheuS+jfTnZ2bsABrT3tSODRJq5Xa6NYPB00CXVWR6W74TwvTrhNICoCbn8nJpYZvvSAyi2uggyBDmUAy49IoXgOzJC5ENG5/LwdMx5jqZTVR+fbFZQMuRLqt7cRnZAA6q51O+GhSh4F3J8mntnJG+vQ65Mznc3nencXDkMyaKfixf2RJ0V+hpHs+LeKJBzkgO0CDXxruwQSIFnZzRlbe6AUEoqSAOwcUAZv2EykBrSEJ1SmN8ifMkcO0FnI3ax0hi6azokDqc/CV2DLP/QJA7cey2bP089f0Qhdqv4VE2Y6dLD4QwVb4+ndepczn4FMlON8oP/xJBVCkbRtt8wXvnuQewHjeoTR6ATXG7DP9OCWNVIC3rdqC6LO8s7i+SAFtYskbPwyEkhCCp80bZi4ZgAv1WWHHMGjkZ9o4eSyL8KWoV4gG1zUQ1I52hAHoXg/emaacFvnMCtr8hGlB/YNhjpLSvdcJg08CI7DhQFOxXDohzN3M0IPuVK0gaGuFJknT4cB0tBOhsH440aG5jgj1l/UwG5TsZ8HzqrqPah4/ejrBr++kacZNqGZdjFz90AQqMS5Bcm5IkdX7L+AxbJKFvCCNl+qtfhgkNikeaewB5TiUwGGQx8N4hIAz6AhaNSRIg9TpIlMeKqBwNUbA7wvdvlj2XJGcHRFrByE+f5JZNpc1PfBXA/JJrwaWRYp/bqtlz3vMUb27PqW6QrTIgxv4vAgYJPGd4NdYa9KG2OsBPSodZfBgMZwm9VRrMn7SUO2OzsIriNbcMeJkPN/HPlH0cJtBFgsOREsxr/ULDhHBlFdZ7J74E2I9EikAAuHbVgoJIkJT33QHHn3ipW0c/T6rt9Ni8WB+LK/NsumSlBjQ2KP2gh2i+Ppe3gkAjuwRxkDQIPCNaQaPjVvm/9Art/rzjh50dzW+RWEr9YnVHtnAa/VmdHWiuzQS+CBR1wntCo4IyHXqnqVbHSzF/63Jse4AdvxmYyJJMLQRZXqzNciZaSzK1T702f+xTmgC3o+3ELrQeQ78HsRH5UOaXrFt787yvhABBKALzmJor4YupjKW9qk/qBFjHYpdgcixVNQfdUgyjEctbS5YERdChQ2npiVhrQzcrR8Fzq+SPm+zbhfKBFyCDq+A84omc8ttTqYFMB84LkIqqKFRkbloiwXov2NP7f44BbUYCEnVlfv6eCq5mw2LAzmq4xG7g8wXOTtmGmny47GphtW5zBeTSrNYByiojfcfvkfJDDJVnx/XMhgxhBqxDRkEUh6Z29Qg4wZBPi/07mLGhNWgjrxalMdKlDTEI4/2vEzNoeS+P3BBy/WdxCXPq+1dF63Hna9I/T5+fhN0tJn8o9/I0AgF84UCMrOTnnANoKNgVCKxuGSPOPWppitUYZoK0if8rQe+dXgmxrg/+rIPQKIayEPBxt9bCx69rgOBhM014tsuqRg3dBahw5vLbwpzYohK24Xp/HwDmd4dhwPHTOloM/xbXdLhXT1IhUMr8h1hgDPrAMwGu4DlY9bf7A6v0PoPoJHnY2bmydIAIlaqm3P5uGVN9WJIt/MnGx76nsJbJmXl3/XRA5EDieaVKg0vLfZJmXw/P1UC3TYZ4tkye9m8MGSZcEcOS07GV9P4Vw7AnU4z6tQWMjz/RPX7BVHbSw97R099Yo5jW7+dFtOxSmSSync8JpJ9wuvTKQaazG0S42CczqdFkCvOA30TrWEpEagFzhxb5nJ130rY+r8fXhqei1G7QsTwzMTQrJ608dZeQi/b8XNg9FisBOKsbCXjlHOdT1rHYnkOpRx/Ymo7Tylks7p/J2zT2npum5pHDMckoeCN4KVah94E2aj9oFCoP058Y59LCMdbq/DM4EoQphya0xnLhCV+w9WAccu1Lb4iU7PL8RWA7115XwpwCSGlstxaQrAbt1vCvscnYMxffBcW+KOQwZVeq8KdP21f8hHbRBB+RMhWXh3Pznzz5V8k9irpgykmUD/zx9L+RIXgT0q//UTZcdt08ALDKTr4nxSy3UdqYGomEs4lrhYDjk2crgUiS0DC4xIagRCyF3/9Mukhg5LiHnzVUn1LFgVvldycUauj1Or5RtTXOBWls87IwzdjibXnA9sweKBdQGKlCrc+9SvuWChxIHfQHMUcyXLwPTzOOfi0/jpCL5w56kzk2xUMFHKG54XhFlMFt3oKCEQZGJ8ggEFVPidEweEhs5j1aOdWB6vpk4oRhojRgS5BGLDkRNbKQ6seAqU7BdUGj/K16Wnr3b3O6obQMmCpfMrhVzIoYDyU6GJZk23V66i5BYLyRJZ8Kf9qtKEX/fEkceBb9NkaJZ7Ro6xpdnLeXZHrXvI65+IiDIqaH8uN6ZIE2IEeAAIzSx1ev8LxUROEQIZpTSVIaanwi8sm6WyGiMknUmKVKfhCh4v8GfAotkAbuUU++W3ZqkAt1YooDLCuepbsWj26wBcATTPZHDL5c/xnClInW8cvSXrf+98guzSYj/dKKe9omtznAU9kvT+daGHlHqw5XQx1foAr7oTnHJg3NGaPETEOwLI6CyE2T+D9dQRGHx1fWTOc/dfiBcBAcmQuCXcM2/3OEzRjPquNkEeisEVpQDKT8rQDHvCMf+zI5I73qMsHi03BrrUaR9udqBLATPmslAMikpt034vHZgDs1Nm5L9uJ72OKCaklDyu4S2tlXAr9hRETyKI/Ipn2lfxn6wr7UHabwAYP39V4wvuXmxFCVulb91XUvz2VlKg3cRpnkjK9ZImmuQe3ewlfGWeaNkcE9UqQk1KvqVK/fc/3N9Zv4m+NwzUXmCPEumJdyKUSeZ8cLRiMkn5OIo2HcZEXcqU3R6MRYowuXh6B3WaIvO/nYS9KSDojZ1D15US+zivTZDw7PQ+srNrErjVq1uK06sdCHW1n6anf6RVNXm4ZCaqOAlnkGSSiuPyoKuYISTaR9ay+dR6Ro3Kb4yVFIIng4Vw3X99f1QD2VDmdGgYGf2kStb9Lg/CwzXumQK9HkFZsXSUH/MU1K2vB1QJQbd3viRyk+SOzQOqYDfwp4gziFymmTS/q0+PUbE6N70DVI6SK4Bh0uPJfVwnHLuby+Ipu0jtWIgIliBF9M+rpgq/PBvO7PWDqc5YUZnXpnHdJy7vyH4eHPA8WhQ80R7rwyA4veRnYNHBqOgYgClOPBpGHEoeN2YK70xyVGUhHxuBQsQ/dzYC1sV6PJZ5kJ3Kj+Ci3VNyiaYfUK5ML/Nmn8t5vgtH4GezCoO4BWqUKxQY9R4xp11zS+XhA7QfJUGPFTSZYXIAlXB3spiPnOr0W4PdHG3s6ko9q5Eokmw4i+TqOvMD5JbVGWmKhr63Jas9InYhu/FXxoHWCp3tif+9ypKMeu/0xky63LpB6suIo/1X6Orpaa5TtLPd5wGVpCzntyKAUw0cxEwiT9iup0qa8QL9YMdZYvo6XopDuM2oKJ9QTiHEOnDXVtJeODO6/thKrrRp/dCX7DC14ESGem1999Vzyf4jZU09m+z5KU+v7kPNIdJ28SZ4ufm2vqUwnfZAgAUMbqDU6BIMy7+7n4fPJiPYlNmadRaXub8/rPP+NfMaFmzfzaQmgfojBGKHkslcC4owANLISTx7mtvti8oSsXv5kaS/iJDDlFwHkFPFFFYkcQ+w+XYIYAI6YwTF843/NYChW/9D6dNDGhN2m3zx2cVoc2YKdXoSSPEe/8U7dmpgxY08jBH02Pn7TDbL80cWByqIhqQtsqkxl4n8irYb2uRq6TOSAU9es2WK6j2Df1MR7rRQ3mCMnqHoyUW0ilIzOfOzNcKcaNiQAtC/Aevj1LP+Fz3oJud7WL7R0xv/aaeFGByWA6+SzmfBVIRjmltbsaYbmADpNUUSSCnxEKcTPw8trm8ccfHZgt39saEuZ63orpR8WB08AGir2rTOA3vVWtvG/p9dWaGiQVjQkFCj9ZbIaHN9Ax6yGOzdtJ/kp8EA7foK+yflXFu/ONfBdpfUBLkrbQNaB9cjyA1sQuwxIFmiZtLeti5PQmzoFvzFNmX7M6HAZ2jPdTb+nuwbF/AFB/nNPtY8Aj8RX3S0t/q3JbESMOFASNQqIjpSTHgKPGOjTXr+6lljBAAmT0VppYVGA9/0SFbQXFTPCgRrjLs8ESEVmjCFGuJ47w30S7EOv1zzZ3KRYGmYL4CulSS5qYAIBF6RcSnUP2g6ZLEP2JfdA+BeKYuNS4Bb4p/sGeUaaf2+gRSII0jj7thn1wcUOKWW/DEmainxdszuy4L73JvZxT3IjhBRUnNUwb/pShbjU5zrLCRNKykU+BBakwK18QkmV97W9FrO78jET2xiHcdSCWJSsSESCy9CtIVIHsIdyNaFxYRdrJtjLqGri/x0u7WgKrAlGQxjXj2GLydc9anBFYSfm0hBWlpCzRxtIf5DhpNNZa2BVl4Mm+Q+g9UCQYWozKCBX3lSePY9Dg4SdGsGMFYFugbykp+GJFIpxN7Y++5kdo1viyGFGCieY6gnFLSyyVzafljayKccLtPcWShOMh/bAhv2d0+2xv9xBHJJC6IpUTBti5IMBFsIdKgG/c5e8vdWTlLvX4CtuM8OgwF8V0rjNgK2N5WYww7JcRfjOFceTVuGgS5CKSWPSNuDtoQ2Y1WPK3HVV0utTyieVT2UEaFhjj2Rkl4ieyvEKZmPCSvP50+RfDTEumqcxg3O5p4YpBSTXSi484/nS8llOhmaRhWEdlzT0ga/pdnHLPaRQJrG4EmJ6qR7x8LP37ZERijFU57Ye1lW2tGfXQTnTn6O3Fuqv3BE6+xe3pMUn+u1Lojk7EYRR5MQsuddeI8q4qh3iNQzFUz5XQ2j5OSPO0uR4M/ATuJtGbUor7R4aK3nIr+DzsV48GdqiK/n4/PlGwyY32TNdyA1c2s7PDuzWwbZ3gkPsMwO+SOCHaVGhe+mWMzZhKaPqJtknscYUxj4nHajRsUtqsEnBFCBXkrLI7SpBjb6MimzRUBK6GabMEA1rnywzjuTCOlEttjleioH7zusWpWS+ov61P0XVEBjycRvU2EKWbzK5J7QhOFmzLX75mFkKhK2uKgo2a4YEZgqxdoBy1mpIOWUiGN7qa8tW9FyaSnz+wG0zzl9bN4ubn6k+ecMZxBrhXP8tJmjvEskfelYfE8lOhhSh9Yo4/hOdLKHG9kKYDBV9C7fIOTLN7BIF426aVx9VgJ3emCsHSMcCsS4GEJOLagHHsmZx1qiXGfD9T6MRT+jPWF54Symdf5e+MzCvPDewamnR5BjG37ZO4nhk7A/G263bYlqupR1Dq1n2ICoEKsxN7qYgwxSFC0kOb1lMbey277g4hja21iSi74dycRLF2FgoKpZP8ZHxzZ0bqpkLX0y5qsD0qKyICJ8P6BxllnBBMNdnUHaQBJbP20GyjzHo+pKVk4qvMMxNWb1vE+U2t+7j96Ww3QkJ29W+eM2qC4Fru77b7MlIhi7iBu28+QTAVNxl0WlpqjNKK5PlNFZJdrCiDY2uJ81CF322dtZtZHuGNFwv8UX8+swe0rC+Ly7aH1fLaW6VcwFpffTVZ8hR3Gc/08VMfTRBdVNA3bvVxX/9/AQyyOdDey22Vd9Os7+zXnhiJ/LboVzHQx5RTKjoH9qFOnlOY5+W/DOHWbP4hqG9UbkCf8b8NyLG0j1UhsD8z9cc7JxZWhIrbrf8gmvcjr/8kl5nLxc2fGGiwJt1H2yYmvCkchoHGn4ZuC53C6Xupjl9Y4lJZF/hhztTV8CJHDe3A/jR9NjfAFP3VVyCCKvczbjVLZYsFlMYwIVKUR2ZXpaVhBcgqDj8VVrqfglCWQPvzrFkJpoujPsH8BUO7+hBV/12QUhryf9FbVamswWqlJSgjc8gq5L/+eSx5/djmbGHR2fyoQGGcgsXWIWkb0fY8rZiV9a5vjfPmBFQDHN3dVDkZvnu8toI2XpGC+vjrLeahx3gQq0NA0cATpV4i/mAT/w/b51XvFTCt7jxLl/8PpJupiT17d5EWVXB0G+wgp8AaMpvJJs87TfGWsEgFaQ1DVLLdboOfoItSa3Qa39AoO/1UWIoIXSgNQ10AairoP/OxlOowHFxy/ENM8nDgwiROQAGaCJu/vmIaMsYUP+5Wo1wWDKE3tMNqm6iAjaDng7B8L7JjC5+JFb92pmwIijbxXGdA3U2ADvA5kpPfxlZZ2sqHnGje471+sL8eSDoTrtxmQ5YGdJ10D9YxQnRGJU3V1PnlzDzdSoNFFTboWC9y4h5RNN++eoc9EfZoAVGONW6NyPn14fK1yTZCnENcS0mzdNazzNrvElY4Xai5Uc3p1xMxBGDHOD7feDuU8RSTq98cZJJ5WvuiYzT4+4S3suc4lZFPhb7N3aTxNBdidJbrmuMDXo48W1KgrnYR6uyuLVGbyvfhGVFqUst2zwIxDL7SZPrYu4FNKncneU0gbVSHrWNGlN0sbjUeTwO659xj5vuiGCtQQK0Rizh6ytS7DX8PfCd8jrpOe1wDv8Atri05WZKMG49ridw9j7o2VvL5PlHfI5kL4JvrnLYKwOjKA3Ztrmc1x7MMaFcLOYErdMMu3K2DbMkD1cm98PGjVRFT41D6iR78rD0iCntsUwmcHkaGmE8ogOLjS1dy+jPtBwGnlVokPxSVkmRIlL75UN3xdbkLA7cqeqxuAkxwqCt/pwgb5pGPc/+AgYW766gcxQBEPaLvmNnsbl1m85NEKnR0wOodl9WSv5bPNeH5fjOcp7TPbKqJUpw/n8v7CRDD7XTeFc2jy7iXuc7GgsREb605kWHHOsuwPlxjZZaV9TRR9tmGzenm1C0OB0j/Ah+vw1MU6ozJsIgapzEk4yPxJEds7cbE9DbjIoRWKczlyb0pIaXPMOYWVOlHseAETKsNbh6zFBWNlT15xzpsX9hjpoEfowJ66QWSHFwIpK1oQij11fOGldJYbHPoF+8fcAcIzbMFbqFv70yHUj5npAA2YD5Yeb1i5Hi0DlsLvLsvAgT96bUfPiqpxbR4c5xpDqsMS6CafojF9T1AUzu/su6q25eeGmNtRgOuvkLIxBbYjWo4Bu7C69u8k+o5BA6Hh0T1NJstusKc0Zgrhd3hm94DqJzN5uyTucp+DEEpTQkVoJ308Q8oS+kscxkhDPrcf/HWBJIXXou/IuxAZ2/wc4cTpeak2O6IaHVk+NuS6IRb9f71byyLeLcJ6nOqlFkX8cFqSEHYW0iL1KEctOKMGHO32emA+8IgxmBBhY5Ti3E1GtAeJbjL/gAuV350QaVXnwJhCcvAp6BsHWX+wvG/xfiJ6XzmPrQhcnFrm7d6+19lIS1lpwazYHyuH+MsiC1NPqEkOTNXzZkIIoPP96vYDYMLx3HmEUcXpHW3DmXZfwfjsWRhC4dnyejMytUZ0MbgafEKPtisOVgPWrDbcFRSVIhrctA9YLjfrxJ0hbMjUqzvMM6cGpcJkAaT4gLOk65fOmN7Bn2KSDqaEgFIor3VwkbkiDHMNNTMUPVG5BoZZz8S1EmqsIcTDowr06ncTQ0KLwlJddX2+xp8sYBG2Adk1q77KRciR1yUkwMdzY2+AwADO7Ha2UCckh72Ppp+mKFZgv9ADEv/DiIlByTWrrvFCCOULZoBL/7zN0KH7FFcVGyepDj4DLq/R1ejnyu1uxAsFqBruS8IpxzdN7+u3tUZP5Be3IFmRs4f9/LdI1R+0gOIbstDRFmVJRJJ/jgx7tRXkqFLGM+UgRwlEfcV5nkWs0bZybPk6XRGib6z2iDkKTyR3F8YNwv/VIIpzhHi9nsYAS5XsFpt9g3J2NjVLJHR1Bvb1eTRU0RTl5Pqwgd4yvj5Q5fGWmi3aaOYi3KDS4jsYC6VoIliXv4b8V1SeO1V1QEoG6Sm79rf2F6wMs8RdqtjKCZgy17WxN3WQk3CZbwi0P6euYpEqFEmLnb4oqLCf3EjyTyyXJvJZuwEfhFd/yT+E7DgQY/p+SQqZSiRcZywpd+WQE3iUeg9J4VlFHF1rTv8gim4+Mbz30PbumwSyETVpV0It4X7+dwd9svtNRz0Qo8Tj2bvqLupZYu+rKX3BQmxptQnRENm2502Vq/rb/T4rW7JqtM/aVfGOUnKvV+ZZ5phF54CuF1c8lxPW3IqU2WeKJlUs1gix9jDwBJ3BemuBPUQGzAjzE2ga96FaRMseBO7SIaJr+tJswrpms0QtgOdvOSKL+MwSwMnnAWJsouKq9fx0CQz0E8kM1QkDbtSmZ6e16aPXQ0ABoGdeJtUr2vxgx1fm6DcQtS5/2PqcoMQeWUg+ndpcDvBgP3fFpzu2AOA8N4osT/uNbnaM6nvfmr6hJZv4dsT2pzkuOlngfkB3gdeRm6zy3o/XqJiqbsQy8YY/SYwbeQIr6iR7yt4LTrxrBXnyGDboWBwug5ZiQygqkQ1jwpfObtmxn9UQvamMz+Ymt4pRhoEFeIJydVMJBscX9Vb3mLYL309pXetRTcvW8LJ+bfTrHagT9H9S3XlVZhfdrtDzclT2QDBnFojyFQ33pnFrZdO4/dd2h/eToXR++oBvAH8JCO8eIXm1bGqZis0AsbHb0rL5BycO5CBl/gpqF8OXXwdCiDxa7ub0EoSa+C1R5Sy6gqdKw8AFKhXGouETW7MCSeFaGQQw54HQSf6iOwkw5AFCl0JW7unBNHzTc79208l5mhlSLjmpOUrE9DHYveX2Jpq7roqDTUVTX+qeL2/8v5/vItICWr1ml7F04k8UyR1zwwK7Q0KHVQarcmGFi5BVnfMb/EViBFFqt1ZT2eV++e5NPcySIkgP3ONrLXxRxsqrm9ZYC9WV7gYb/ATwks3o5Jbsmnts5o5bdKmOxTiidBtnFQgW7uSpuRdNuNYXamYvR+E8xXh2QqQAuQ5fle13HuC3bWpq+d5m5eiCPRLVfeZUBZnwTELtZj1M6T9eBlig/U3CYthqJLwSTeHszCA18W6X0mXwWS9bJ3ufm7x6JnKP5IWizJyBD4JEjBn9rB6SUZLNtPt0tfkZXB4a8DEJsrdgr2Asp/70IRyCzFh8oWq7y5gRRQHT4GrkxgQymwbF31+xiaRSbUpjT5A6YRArryJAFKXdZcTE2NlPxHF46sjJve4JmbqX1LN8+TAt4y6QgkZj9s//wZxe71aDiTlsv99Rk+Pv6LQrqtpsAGkLGWlMXxO753+OENtwYpwxT6XuxJnAPhgB8A5Nw/mMlW9/xE1wvubZfSaOcDbGt/naIKcudhEj5lLgHc22MfDhm48cjZKn/YYe47l/dROBkXwzLIQPuPm9t3e72fYVecjS7wssMdzVCsIsT/5O97ROV1/rdBeU4aqdmtO4woCOe8YnBZN7XUD9M6li171OOpdXpzvD/wdnizgrzF50PkmO6xRDRLsbPZpGrRMuOIBiiG1kMiJxQ/QsRIMzjTUoGlo/OrFU9Napaxp4AkrJCUKjWn9AR2C1IVxWF0wUSXA5DeeBoE2DAtXxh+qg5P8KUBJ+cOUV/9lP9wl+2pSx3FpYfpvLoNgTHQAHgl5NWo4mofHW0SFi+3FC/dt/mGVXbI/TCC1lttmhX2ohWjGEi34/LWqWXMsX8xhjbq8CZahw7Y2+YW5Fvg0ScGD0BOxo77FD1w1lpCDX4OLbMZC4I6WNuHKnQY6vH7jeG2NrpVpAYYBrj5oc7vpL8MpwSjFbf7Fmn8ZpJ0pMdr7j32aumyhKV/3IKD28EHcWckjy5+twcFc6DmeKLeZhKJU4NIW5M4yaseG/NPX3Oq7PnnTHQbZTLh13KOQyLuIDV2M+9uQkDmLmgZ+azn386dapxmFvDfLYxql8uZe/nRnYOG2MOhpFnTrmN9P5hoB2l/EfleOaTOBV6k4zFkGg7fHms3v8JHomCST2jSnu87Jp3NxevjQG+7alotJjp6ozg3SiOul7H2+D2pQbzEQe5ZptnYtsAI0bikrm1TDdXEftMyaSDD5TVfIK4CA92LxzBG9lkkmHen353WoloqBySFuG+dqVfFD72eTuIeeZY+h+jwePk+q1ODCZUrfOE4Oxj0YZly36UfQgw/wVuDyTcCFQ3o4WEI85Lxzqq50PKeoQ27K9hJgGWll3cH1DmbZcm9SL3JUtmuN4+B2NGWeVC7aDxkeYdoaYrgeCAtEnWDqRpQLioS+vubjds0PWTonxWLptoa3AJhjd5MiuBpqhZKAMj69zrf4ZEjAm3ls8j0ktDCLqz1rDweNx1t8tek67dTaUtaBXPJWD7ETba7cSFSXKwJSRIsAy3JgEGwPsQH7FgiZeD32mZD0OO9mfMy1ENckCZA4UAC9LEUtIec2mCd2Hg//S2CNWaXAqUmcsuPwHx0Mw1fyKx7oLZOXW6WL65B0Wr/FU6tej6bPG2y3FIGBR6KSaZDf9Kfnm/OpwwPQzKZeT/2ojrsiOYW9Dxv4wU09eKAI7A0n/zVyuLizJg/bMvtlm4bPV1g6AEZHDd8Ei26mnD0fDo4x3+wSuRn8sU0iGl+dFh6nlzf430fUpvaZ2++A7bhapdcSWxvqfmXDGG3n+Ucd0AgiuNhDp+m6N4vPyWKqWJ/kUnCEkNdxWp5lERVM7wS26YiXzm4mIZFwKJo45EhhNjFIsbhu7bDU2iwyFIYPo8gOR1/NP8EDZIzZRQjHa2nDUm/i1Xuj71Oolzqm0qeFcuZ6fUlW+kI8VrDtU6hthAsJ8uF/fuNddlbtk+A2Oi+JHhnvARHRtTPTbpslbW3cCn4P/ogcZLehHWWajImcSTiGrftGfzHx8xd2piZ2TAaRTUe5evD/Ez5X/CTz8RmNfdFbG0/9rkPJvJbWsXe+JLBPQu0LAlzA5A1eviupW3NCTr5EJ1NnCPNxHCMytRczgdqYsq9vnUkjUimt3DiWd5LNux8Eui2G6If0DWb4mnIFCqn2SGAee1dB3GCELpMRYGB+2+DhOldolNHwXUy/73X8rQZm/Sl0yGYKNihxuzn2RV0mt/Bhu5bBsS4hNbTdWWxwXMySnckzvt8QnqajZA1WPxF3nhQ7RKKMUA65CgFOCY+7hYwk+iPlFHrCcNGwAPKju5b7dTCzygWyJs2jU51pmdBkMxOznbTMF9RC0j6uE5Px8iOr5qGGfexMMx5ySLz7N9As8qeNao7tkhX4AYfdvgcFexQ1aGq93/HeCq1H9TdtCQT0PnCyRlxyFhLdHo1fUrsU0WDPAnWRPtv2xacAfUWXWcY7vFb9TYoWeU4ubsyHmEHvVO5K84eBtQkGkpiMngWyRrSgDBzsqX+BMj0a0/lb0e4LgxCjgvzbU/zoYsqhKUaHkU21KWwK+fCQB+Mpwn7dq8XiXzFPKEAOAulH66mtux+hgk4oFlEDOYk9oqVMKKbltCnrSSgmLvh8ET/UhFSGEbPNy2TnoCCxvewkuUElpDcegil+J+fgXdraPYTeBzc/JdZfCp3bCu1fUWR1D2B8tFkou7frB7EH+X06xV/jLS4BpAJccQ+U1oJMFEtMb9RvVMcFAYT4n2Sb4OTH4R+rDdhqPLNNqNClC53t8bbq8M+7FBqQIgHsp15V4N7X+qKzUFTRRVa8pJHFnXxz6sQVpAgzo6xvXl5yhSnwV44Il89ApE0wTpytFKciVZjaGA7CoeYjCH/lVtjcrC6YHiEyUfajTjD12zh8ghrVJ0RF1jdM5HjteIa18xG1dCVWgO65pYJUnCmx5n1iyKi5gj595V2Fswyui2+4BgA1E9NxZFMDyqErKyoBTgju8jbY8Bl0GOGQpwAVzR5v37bcKao7H/xqbh5X8jlhLF+yHnD2reN/t2H9DTs3OF8LSvUN2tob/Mdqhixs2v0kzceAoT/U81vmmh6f3L+8Jd7YfUgray3e6oFFJpM3+1UedcGdC8zebNIwySDgg5LontnVaFM1KardmpkynskxxKkBlvT2cvi9Inw/Ied0sPB/J938lqs9jDet05iZ/C1/im0N7IlredivlVt6kHqzgAlESIux11QFa24Voenvdqt5XEfwdWRda2Te0cNso9Suj0ZnvoisrdCh9+zmRMZsA+Qng3saREEdYtzlyWXHzXLDkT1DyDcurhG1rDk5oAztZYXNPzqVcPBzuwFU6jCiLwy6QJ7nXCoaHHMFctLViAdmijCqpaw7E8TbbU460gNFfU7mM81YMt9yaGVEyIWQkTycq1JbA3kQZL+VN6xnsIJtuFJ4vFsI3lC7WLefzSHwpZOoMODqjCBN1tc4E2Hq1l/t1nMKLREvKftzhjgZdr4x/LYbDbq/FoQ+fP3SA6cdbJNhCqiw+bXKUA0Pq88GvCgIBwisqnBngbm45mpEQ8mTw8Wxrm/JZq83zKZLDPBz/jyZQKdHomMxgDbnkjFNQ9RuTHysVICqQnbHx0zKDZTISE541FDY8qXnK2sCHXKowIV0AjHp3u8lMijpYtoASds1zm92gqB5jyec373RigF+mTTg2gsnJNqFrkkwc0hk9HXQFuZkvQc5hR5ci1SJ3UBMoYo9z7IKZXrraJhraPhoYnfFTzmNQWnEA2Xccx4GT116Y1OpZoNsgBtSVUjJlCGuwYfy4AU1tnZXEwmRHjkX8fKTNIdd1HgBL5chO5ZXtUSjovrqFtXqxrTRhLAoPeUeFv0a17yWcMU5c/W/L+zPerTIeBcCGdD/TcvMTPdWVJxWKCNBiST8x2cSdQ/itfT/XH40HEPdEAwLNF13NOSJoPd0qonHQ29KVq0tT/jADGpSnEVlZ6rHcaWzeQ0/Dj8CelGQ/Ipx3cq+8tHZAo1Sl5IsywHpNrZqnzmaxvKB9IllamhuiX6Jn/DNr2Cy9pMh6v1Uwe2/EROetlR5G1jDnwx7NDxKLq8jku3YREEg49albOBUrPwqNwXL/yCndMhJRhFypCFItcuxQG2czxk3Deru/IXpkacMXxg6piwyw8wbbX5rsDjp4A9H2z65Z7SFPYH+YrX8rvmY5ZEM0d4CKNHuzXgsMDjY7TGhc6S5YQUmkuBc/m29eC4UGbsDx/7EYAde5ujsPJthK1xfEpoxZirGP/ZSZyMUFeu47zsY5gLhdGAUIwWrC94Z9GrzvxjrlsMhAEg9tsKPIOr677EVcCKhthrwfX8L1KiIR97/UlFiY9mLEqWPZkMvZ7oLpt4SlUMZ0BGUSwr8pfeTEegER4+GVv92CboQsxf5KHAi5y3pmy5WZSbf65btW1UQrgQplCMhGd5on4JtuAdF8A6A9DW9WtflJhlgCufsSlYygnEuqCzk4COJMwC9rOQKmtXm2sHEhgJ/FIE3wt1nQZkkxoTg9+eITBElf5CRNvkgv/betgkYlVfPIHOuhPgDgK++izgnHLScc9bzSDjsMaw9wJNLU5g2qB5/0jKm8zV85N1EmeDXcRGPY+g/q7t4XkeNnMFLvRV10StXu/Z/M45X6wKvICD0hKgXewplDkOX2/LY1encicuUARrKL6ZuZV9fTB5r52WKu6Le0j283OlGDTYljqls5OAg7+xIL5JGpDRg8Fg2/tCGnWAsfVYLpxlPl0lr2UpWlRmBNaaQOXPZx5z5YTOxWSbe5YnKSXp3hgUp/d7ixiAWFI2R1YgrjSCwUDWY3FmvNdx7HgP2mH/3THrCtlT5ZDavR73Dg9EPlJIOZ72KM8ZHENSLd+ul5oPV/K6Zqh+1hpldU5IRK8ohgzVkXI2OsY2/x/okca+6qrEUjmgWinDFUWeyBx5xD1XbyJ74dxi8wGFlFbs2ouHEtOVG+0m5YZNX41miLZDXXWb7DNOWkcyFr8WVnwqViph7T/qaCX9EzgIo7iY2UjMWRA05Mc11Qrx8S+p+R2nYeo8BaVltglCZHZzTsgGnRqy+oZcClhtwYe5vk7sh1ZNZem7fzgQKpgs59iiiaIgWl49fkeXN1iP1CoNMcOetKpSfU4WYgO7huscgIv9FWOlSX8Y7pZYRelGfqRTaWwqiLcbvTeracGz+yIlGTrw/rwVAhmBvB+RjCTMPGki8xDrvG09HRbC4fxyTAed78M0b3X32wvoWcNXASR6LNS2NPeaQxp7wrjkzC5TIWfZZn49Ax4NjwrDeKv8Vw268IDGHy29vKz02i5XC2pOkDTgKu5a6Z8t4+Cn7fVWhzpkuX0j4LHhRb5RqdmslCL+XVqdrslfkuNhpXgCBq7hZ2XKDOxPRVXe7+8329owppKYDJ95tG/5yR57XeJN3oA91O2W0sQOB5COJdOCTiB0Gm+8AHVfcnjLz3lRe+vXIazuZpby4rMYaDbIbACZPVwpvYD29xdyFO0IP9jVVoizstxYNFN7GTdGrfQv9muCdYpdNzuNxkBz7mDtoY+KkdwBnwYHICvp+xOo+fbPjxOefCSdmNDoFCC6juf7mapv/hV3YiERlmEJldXigHBQ0s5cIr2WCLL71zFHufdGz1XF6Kskh+TzUpBQTxasiafc4vQUbzSjeJ29dNcn460UHwVLsXp3cQ960VSWz/OF5Z1ZQtWeAMROWLN9oQybLRQ3n8F+kcTde99vzJlEBLq0CozUtmSCqLGFIG41jaKZFbUUj9izBOKFMK9LyM3yw26Gx4MyEiiFE1FXhtax74U4CJkaObRxPT6TxN8oRMLkM2NURipIlQhWHColpjOZWz+JBq6vEwkhuC8NoVj5RibcvbZS3AgbGtfEru5wbx3yJJEysyuk+PMIIyFEyXjgCPUOkbKbOQHan/fdAvuZwLiTutPQ2XiTAvtMXiExJCt5e1VQvjomUh/HkACDF59uvmQtAfVRaymLOdw/zCn7rmbnxVofhsA/E83gjlGtXzTCUYKz4mcBLXoc9OIXnW8+4gSCbZgLDG3wnSyRFfE8sM8UYzvUoeCy1EcSODjNUDRTSTSHbiiGkvmNoxmS5HPNWrYI4TeHENhEZaeR34xqntU2vatkBGH28Ik1Jp5+18JEDKKCGl8ERKtumGPluq5FJCOsJi16AUAekhcthkZJCylEsgfee6iSR3LjmUkQ+32adt1nMgd+q8tp3nNFvzCNKQoWX+bm5wB1qS6FwWNHvLgNAZyXLA9+RNTIUO1rtN+6317aFSLp1+lLtkycUJNRI1TQWl0c0mpUHfo45kqkuzPHtCpw6fsXBbB5t+WTSD1fnmtk8TcWHjFm/rvFo2ksbITGbThemsQx6bmlJ/W9+w7SvhTx+CrY/iWrWmInYuW6FQ/F1NREyg5Qhe3hHNNY80Km5qBJUEyLDgGGNVvQZT/8ZTh747P6ZbQaFXrt1DRMdvz1kUjlIxJlRMcs5JIbzlwS0qrZFoUnbEiPti0qGhvwahYR4ocRSmj8IFKjQmi9oP3iLCdB5l8tAGj+NFreChLxV1J/moj8LQN3XPTDiNtN+beAijHs1Jyz/D++eiH/HGlBJYDJ6AfQarjTjarYw+9E3B5mr56uxsfdWOJffbIo2yzzUT99lVp1lVjRXSubTue8e/zAo1Ku5hCegd5eAnWqnqQTwSmEF98NU8gBkQ9jYr4Q6d1tM5q3aD8zRbn0gt6QpTYe752/joR/faUhNOgA4E9YucKB+tNGi4/22aRq8xN5p/rWZPs1mIqNqFqRoTfavAH74uYHByFXws2+0KOarcbw7pgNgGnI3GYGT9z5tw4n3bHJTS07fwr1QOJANJWdzQhVPUiDt83mV82z6rO/04b4QdIdWs2P9e2FMF23U/zYosddhhJC8NJxs37bO8MRAwgbSU+ru0ryTsHPjLv48QjfJ3x/WKqqst/XIj24V+hBzMvW/aywXZVMdyYxeJDOWhKgvM9c/OL/39KYOk6fv5ZZbOpk65u53f/nfHP7mrPTSB+caknlUQlxrBRIm6o+fXOnEYr5gkAG9woa8NmNg0M+GwcF8en3cGFnKB1d7oPcqyWmiGnvbA+05VQjrSARm8GgWBdg6c0sHtK8E+/P77KvHqngxgb4VMTa/rM+yaKqdLrTqCxSvXqfnSRt8ll3AMFD7CxnaZI0Z/TqgbAcp5jS07JRar9Vt9clcXftA8XFBKlvwtD6DywmtUMsi3aKaZkz1hdJJu0O3O7SWjYJlY50cU+91vQ3sQtnRevWZW4B7JRC7YVtm8UzQ+ushukdFSdB1YSA7nCYv9NRHOcqMt58plwkVZ+ra03EkbTiy1DBgjrb/Mn9J4S9cdQLquQrsrY7h4VE35olBAiB/7pSzwwsHrj03dLPAgkbmiVYIxO9T+yxebiCwW8dfRCYNsp+L1/t3dlqVN79LZgFekEyvr0RiUjJqEMqLm42XZQmIrxGUEd9u4nr4dkZrl9UoC8dlX9UAvJjkxsbLYdv5Y758zvui3GRhgBzedHoVqZbEGBqJ9bFQHlvPKS7EcQNkhVOhN/Z+FL69EXP2Pe6TnWsf/w0EuiI9ExQyr3Lh1ZROCiU/6kBwJ88VNgafTKpxU7Y/mr2uFu41qDHGpLLeKBkSdyIDRnLrTevLxt/6wOrU/H8F5LcuuNm/vQ70e2JYYAW7ZrXBN0NRLLCruwW9WlD6H0SmHY2dQQsOsAf4q3WGOWuXVCuZ0mvTH7BM615VzmSvML9Nxau6pgHrE8sT9gWrtbNnWydaa6q7MnBn9t7OwEmsETkCNSuSl9Ela7Vel5Anf8y6HrS9UrTuU55VT7ZqESa/DxRpqjOAuTSxlRLT3v13UunabnF1C/YB2F6BIzDk1Iz988Clsz7skSYCX/ydjn7Hn14V1b2heeZb41sSWGjMl6fvxIWa1ekcvx1+d8jsOR3wKUppwsGohODSDgYsY8uhEVv30ij3JmWFoOVgKlfm5ogT3NVx8GOVJOYtULuukEwv5K0LA3ctQaOZl66ZpBqdIqZnFU90wBB/t/yovnq2WWz2RRDVRt2qDBPr9tnCKT/oQqdxo6yrADj0LW01fvRHo3BUNJPKIvBSlb9F5xsw2J+hXoZPrQjt0gRXdALCUW1m2xPNXfrVWfsMnEShFWKT15gvf2cfZnrj9Az67PB3Mt0lxQnFMAeDY6tp/RZF8ZL9gNyOIQxPiUFeIIQam0biShf8ZitXadXsFxf8R2BZZZHKip0YX1oFRLX5i15PUysUdnarU2jKHDoAKO9mPGGYMOP8BFj6oFxRx+MUGiYajmmc/VTnaIzMLznN48DUR+Mzotel2ERNSCZMShzWIHMDDDAsnwumsZj9ZHAg6wg+bzAwlXkpf3Md3N4kyXAQ5AjCOHywgToWMbRr8Iy2LKBkhtJ6FYsG7LyctxLwD6uGZ/2AycSuPHr2qyJAuf7+3VzuNvjDkHvQf0byuKqx0+RHIq/86X2txLTSGMln14RjqfWKX8b8bdnwKWZmql8y6OjPEysk55o+Afzd43Dm4rifQLg6G8bH7+xOEOuxy/pnT6TEYPjBfXa42U9USWs8o76GLJ3tanf9fSIwAXYysY6Z6vzF5WgXLeK7JwIDhoccQxhHuum3gfG7huqMX6ez9pH9Am2SsSNhXs2GLHDiBunPm5+zaHaKItbReX7OF4Fi/uu1C5fp+foRwgfBciK+VbZN+39hMeMhNaVjFK0Vzr/DbkCNv18jelult6XGfmvDyMS5dQvi/VrME97mb3dWdgmiPubqJGIfMdJEFPvur1jDIXrZtV2JI7an3AAZOPIcP85jDZCes2YHXbam3hlu+zuJLtwlkU/OpqNcEEcJYtADhDVK75fm73+AXPOXrN3HEicicHYXYzJ61f1gpCeALMbC2c6jifC9SgQW6q3/VQ5lT9Em8cQWp2CYqpkKLZAhyfIMaKMEM1i5K6dQKwmpClNFgiU7DzVvQ18rtiFaS9e0TISds8kR0k2QfMWAJ44wyJPGA+YiHGcnSmA6J63/fg3xK59kJ9l9NoLU13j8xKM/cyAOXCzIcPug1V8KNhTZfh4ZrNJRQuO9ztxz0CdDd1e0x5UmfJb2wjx3utTZYvN6KvUoMOgRRaNdVMRbcJYN5IKTvWfmgbZ8LRImOSXFZL3g70SDeEGHxN1VkMjwTyhHxpFQBFWFcohL4Ktcd0BTeotR7xyuaVn8sQMn0/YGP1ZgMWVbYz+ttIPJl9PcdnA5i+BnNupPjk60ZcHAjEHsb4Q2oU1pd2ek7L8A1qjWxlSgxzpeWFPv+J0rKICqI7ECAiN+CyLJdB/QNvqTbndzxOCNKABBqnf58fcgjKyd3BTmT+OTXZvO9ECKm6VSp7RoJuO93uCk5P9AnYmnshvMljkROsGsZD+Wn2nAVNINPZR0N7qX3iGxVrl9ShYQbW9+oJ+Sg9wcx9pp3OpQ+n8VIQtFgedaGzGlstIpH5G/Qb3DCUc92PYhBaF2RHy3hiHgkRUu5+WoheaqKu9Z+Wt5DILJuQjSUYRcXrDLScKwT7ItYJ3wm3ItXBExETeo81kK9dYc5vnYURPkkewYz08cjTqqwn23/NrrY2TynWVqDDkXjNWk2nE+6HvFFLIP5ByiOH+5BTwR/Qv0EvgJQPgEDKywGE/+03D76qu7EK5Z2u5tY24YNT95gP2L+Gx9bfw+XYAxhyOVhB3i+fOKpKJW66biUFWnzhqzcm1zcG/8KSfw03tk47wphnH0t3sov1e+Cb1XBQhX6CqV3v98pkj2idpfNnwxMlgDS17pKW8+FNUcAXW6heancGMyLVc6DRwY6ztpGXzBDQQNT1onPW4GrxXoUvOBrCM4M3o4CilD6hBJ2EOASGmA3GajPp8fqk8IE9vYqkyUKwmRYwRslzrkalzam48PnAeT0eyEyRkJ584Qot2Mr83xhmKYUM151v7YautuYXXXxyKmZNHx5Z93ewHbeEDf57moKbnxcEt9RZZX2fFhy4pzLZ3zCnQmWUTHDPWltB+ca3zoXE3q/qsFDe9UqwdOYRFxJnM0sEMzjpR2KDpAdpfEPJDRmUAWudsbCe69JKA2ansfvynLwFa77u/f1ze8OAUHdMoy7kD2RdCaDNHufmkx9b71zjbWTz4P/z5YdVNh33hYPqr/WOUM6kWDAiu9eAxrd+8bOpvPb1qP4kGu6ftEnuCrpRQGq5aiq502Pd9xlxbUz9fEHA4UKXQ8HPFewVfvXKHBTpnwdsP20WtQwFE4rtHnpv0jlGyvi6hv8eEcfx4XTUKGbkdmPV8o4pgwFq4rzVQZmHTcIO5Hy1ttIGq59+FmTaMwnCMBScBIOA5lXFN+vyftnGQxKfn9ytl4WR38/of8LLEsRX3X6/IZJWZ4xL0AMIFR+RiHLx5TGyZ7L8vKNPk3HcWXUP3MueUzNi3fcUXbCDrOnbmVTbnlhnk/GzMFSdK0aLQZKh6eBXSpf4GLvz0axfGmeoYsa0wDL8O5i2be+T/ti2LcNcxXpZ5omYo92iZqdXoj+nrfySVVUkz9OW0D/0pTnF0gfKgzCfcs4DjehtiV3JllhhkU64KM2FCdVSobfNjcy751Kq8vBbJY8XHnFJvcUQCIY/zF7lBOniqcTgzmbV6SfS0okc2HxLNyYMX2Y+vyK/uVXDzl2UR7cVYstscwavExbJB0uhdOerFiGgPcZW6ahEhh8oHlEC2ZsBNcoOvSHnqkvuQNq2z/GgRpwBOctbM/JrH+6W/km2GzuAS4B9m//T9+0Oe5CplDIfDrwz95qIUuZby4iZ7wn+8i4t2R47P7duiOcuqd7SZL5B5r+gZhqSV5p5V07HYVNffjWb3P+cLyKd7Rc/k7NxWNjnfVsDjlJazTYVkTMJ7VEvr0P2bJzWK/spCVLhQgZ1t7gFb71Rs7/3B/DpKqrxbzTojsID8jMdUe2ywKB3+QcH7Ts5mxR/9XdXaJmIOO796o4SXeHjRNiJ9boJ96R5+cR4f682zL8WoXMlLdwZDkAK7zjq4W/vDGOrBoqr8XalizqrVA+3E8t4u0ybrmh6cFR1yfCcvsgRYmxzgUpFHNkaBCAtf2z62LYylS7SPtlOtKQ3LeFKE9BQhscgt4epY6IQt8C+cVa6TKmNdy4t+ZXX++hg3+xtD/WkGzuJQfo0RxjGyiJXGrENOyHj4tFRcwDmN7kUQUjkX9mjhHgQcAR1P0/vYTh6aadYue0jp4ZLOH1Al6Xabt9qVeiN4WiaYdyFstzDEYoV6wNJPEcTlQOcuXoesb2qPi1blR05RjwOpX/w3hF0HRO2Oqlw58ZbC87bUGQJ6Q0oDgr4xRXdrzu2tLEA+10LtKX67AKnjhrGtEK7j2pqHrAr6uetwCTUtp/FygkAKra+oA9VDgWlzgUz5xPz0Rw8/GynIt412qlcjUCN7b3/hj8ihyDnFumRZbRt+e8QkKCV5eqoutz8B35QfKC1l4P7xgXaGYX+qoM+Xi94z5KQMdkl/zUXqpqkR2jgaRiXWfLaroMU+SkWjidUVtyzMVXx9DlkZYpKFIX+zTDrnGP4vriri5RjICDM2GsIY2Atz7JCLVtEM3kmItUA+6v79nNsqAy48xZ3Jrilcuf/4ukK60IFJeky1HuqYwhH/a/OvQ4bleKoKee4r+f2slFBws9qc6fonFdoZ74eISX4TZCPkPoK4IPopGb/GW7W3VPbh2opzAJcpIVv4ksYcfHY9xnEyAjeubbb2SMLXRGewccxhYy1AM+hxvDfA2EXXMlPfrH0EN17PPlSt+LrScKNSJDv9ynD2ieMG3CvU3fnG+pL96v2TUSh8DuJzLcZ70VP30xW9F3DFYopiq1N5RkfNo6N/iVbUUcepRExIZLKxWtUSURVHNG1tlPfFUlZCdWpfJtu/bo9wd2jzqN7PxdOnAm+UselGaHj5IJgLK3xY/Eci0cHdU7J1FfEo1oV9OLBD+naR09Wg5xdg7YzNbZlgxzgZrXbOvWxi9H5RI5pZ/q9Mq8/9mfXweTxJ7vPSuA4X5thmYhJY72HR3/kcOeJYeZQOVImY77TJ89h5MQfURy3BDbPtcvoTNB89Ho0t97Pj56OLI2yZ4EVOfon5/UM3Ssl1jwvjZ4HO9Rfsw9iajcwXXioto0SGGzZIFhtskVj7tRt7aCkngag+UEsFdEwb6z1KXflr5/j/KA5HJoUoWFcBXwvVdcLKTVtH4AoenmMRaHI0B24VOPI52Js0vF0lPDLOIgCB/VcwIjio6tS9fUBUs5NiajZK6VpnY1V7RzVq+cvJKQFHfijQgpvc5lM3Dc+5Twa6Cvp3OtbW9h5YMXWTLpkjjhWnc1Tfl0Xh/TLzXExQM1sg0Mrh0lntliIXj0fdTBI396ACruxOSglJTU8emF0/s+ferO1ca+1bUMA43JUtwYdQC13276o2qJGELO3LtxWIDOaCyzGsC6hyJNzeU28/BWVWz454UV9exdiJclnXPZRugacAn7YPPo9/8NNGZ7ZYqsb6lD0FA7y+LLR7ZqzoOo/iblQ8LCVg3qi1q8RrapVhWsm9a9qQ740khHS5flQRSLW5Q1mrEu4269SLGZ7J/E0CPILT03Y807Rk8NFGicEEtMvf+6JPr2yaUAoiI9B8grA2ph3aC/WwvwljzlchfhXJ5XVOss9RFyACFPLyQPv7oEgGYDk987siGyx9AEN1RbYERI6JOKTk7arMjqub3xBFWp+LMWw6ngkMZBfo9tEADiXI9f6whroZ0yrR3GaGRbjDxVoYL+yvVHs91Iy/dkodbUOKiF4iqdXsJqeJKPpYbWKYD64q+kVenXaQSFjtm9+K0PUx+bB0k30Elv3jPiR0Egj9Xb5D/O/gNxYc87DrbQP6QfadDfY/BrHs5BQOcBMHfuyq7SVXcyRu4NfbBxezD8Zs9pjcY1ZGFmB8326T+YLoioqqIfEUW6X+KrlPWsIwwR6lqDzSA0BqJuP5KfyTMzPnvmk7NWunWmZVE6Z+ir8wxC7h7sDeDYKDdoNn2xlWJEo/xeuulCswgCx9KtJ13tmwbPIf5qJ4u40kAEQdQqKjk8V0BQ/XG+62INWL9ZC4lxCe9NQ7Pl3oTabnCSeuQc+xu59vG1SHXwnia4jAQgbxAl/RX1pKXRN1+/OB4qww8pykt2aP50M0VN0j2nKsiQ8rZsx2iEtiehB62B14tEKf08TSpMXJ4yaQHLWmiQpk7LfFKg9A0d3Zjn8GSjXG37pmc46VsO3S+abrHTFVOVnTKWjLZgS9ZtsyxroC+9xUrRugaQcwO3XF0i4Js7KeqSUHqZDewENkIz2b2mnNJuYv8hFmYbYgTKyQm43Fmv08AmKFXcwYaV7/n7Rf50+uHxG6eKNXp5lcdv9aXNg9x8boZt+7o2VueA2o+kBkbVhR4IgFVnQ/nOCalolju2kkb31GHrt7vmBNGzGFAfelsBJ7wTyL8jc5jDPqnmbrBrFaU1YyFsF2rN62xnSrIOcPLp+l83igxOs39Jn90ToU9kVj+gTVZpDmm55tAh0IwVHaq6Zdn830xD5YUB3zMLbcGa48/EWI+XGZklMN9xXq61kQbf3k2+2L+g/uPadCbU6GLLn54bECOmgvAKyETC+AO58xLH7/XImcdEQSDISSEvjSkPMLlBsFO66b6fmyDJMjCkyEBZ18gopmObmjByCqSHbK/rVbMLOYO5xWjdStRezgQLZwN7siobOoCcmAC+nR6yEmWMo8Rj2eh5ecRNNFuPyR5K8eFmfsNZIgjyzkBA3lbYAg8r/5GqB2ue7yXeNDowLDJTKp2+yXr7Oy6KiFvfJ4m1J3PH0V9HPMrGjwx1Ke+kN/0SuAD8TzqGFmpztQGUZvds17RnD359q9yFz1KURGWvwucciqIInfvrJuDGzIoNSoR+S+ExkKtP/Sx6HDNc/h/uvLBjv9Yk4YBHrjgR1gpnidLe56qbjp1mDomt9nkS1Gd99z4HK2FhbEj2jpYHBq4R0UI/08q7Y8N4uaCNYT2KUxwfhHuV580njVkDrVe6wHTzfBOIm9j6GuJszyDVMGwRMf8M7k+EHnLaba3cDrwei81Ll8D4PMXUR6asMXXfWt7fKXiRuZHgva415OZh3wNqXBr1389XGYNz858C4HwQ4zKZZ8tWD4MB82xRdBt7FFdCbUfXCljEmcVZHUIDNRUgXf/A3xLhCinWbqCHCcHF1VQpEQgobMoE/lgGeEyS+oimlroh5ft1W5UcIEdCZPtFMGg0BpcZQxtnDLeQEPoVRtnza6+VE/0nVvzk7IzDERYQEFSQ/pscuLvU2Qbw9OI/QmbCP4lfAPTtgumZ9ucgmmgUXmGsDMhB6DFDJJuHRg4S5XNOxG5P6PUn2AI8Pl6rkOxUlpjBKYTloP1vKRHFqTVhR50vhnQ4Mj4gXw0jVzJY9nf7uIHpshSWZDak6F8B1yVKdteqmQAWVZqAaAyFtRek8Yikc2U04nDmSLPcfz/ItfxvOj2KTGp6jGlOUesjkin61WiTUrsVCt9pKuTxPorSxjaw1eDHROwtN+q6S2VI4N6PduaQ2YqWdp42Sz8vrcOPrG55UoiNoo3UBSqQXta0w/9JsYxz3yVxSzxcHWava5Tzcpo7oLRJc0WGc4ZGDJZZRkL0cOLiAaPxU7NSF1OjLRHlYCFIza/e7e2NQi+g/gUyD0tTZJ/go1uja2TnDidgRXFGg4zimGs4YuvmunT0eE8ZWwaUKzn8IVbw2WqRH+oyLswDuQDjyE26H6pPMnDjt8rx5YDOsnaZQW/Y/p4JQZ7yZMVhcnroel1AwHMNXPj+rViQiX+8nG7AJg2oYqpjyoB5kEq9TspvEyT8+sLft8H74K1Cl0pigLtooboWzdhrbbs26EX0fjwWMKpsy5GHNXpqjgZ/RxNog17Sm6hU+s7MN0Ddc0GzM8CI/4eS9Xxk8ww1nXI6ma6OHl+BM03Fb2tzrhsY82oVFP4CBxPBP8a8wp6eCW70xTQ5vspgizgYnWSI3P34z9Fim+Qdq/Rj/hbYELS4Cy6OZH4ClHi29rREAlT4/7gfhlDPaZKMXsCQtDkQ4r+soV6595+NKxCULTN0KNaSqTB3Rr/ckhe2T4rnvFMgC6pvalXyOpqUHMuwyP7/03HKBEfwooHkvu9KbBwUxovR2LAsQvFc5IqbzvegYVuIR0fwquvs4prY/FyX+Frk0zxF9Hnx21UmG1J8zX2elFRv2cH80w9OfXlstEs6494M2ha8H92zrG0J5xJaeLpfCsWMoo/uoGXH2+bih5NIZ8AfDUWHkbOxlnB7ZwFRV5wFjO+7niK5+kEPZhlWTp3uyNTAnOOqsBlL+Ip0QIlKQ22cQeRznE1R5rDvzguBiMrJ2dVSxnSdvrAENcf2ViY6Wrey2NjRtipuh5/sJ8lq0neVGjFi8VyUe15QIlck6oVk6/WPi7eL2hUXui/JvrTO3aoYLUKouUokmswlB4zU+SSG8oVyN5F70qkEwPeMNM+OsZh6m5ttwLcJduRWN4rOo1ujlS+Z/DEPUMYEfi9ntAkT47TjHmcXSxZVGwjV8/Ph9+1wt/ptwFSqYKCU2NXDquBMbHze/EUF4o4am0OcaGbjygKwv4eOYm/MuKtmr2ZCpKuAE+d1XhG2JMx+dArFdMqJVALsuVFO/sqTmn+EOYVttierWHyzYWEp0xBwjM7QORy946pYpkwFO3F4gxYGc1Pl8/Dlq9Tk0BBJ5hxTRiUlB6u+RmsAqE9EvlBc5HjdXN8qqV1PodpMFR/n+EuYUYtEzV2F3udcjxMiBMxI8XQkGFX9Cby5vKmA68Mf1xdPmI4st1/S7i6jaL67dnlT00fqRKi0ZGXOGhA++rcKb4uxu8mQqCKbc6+iiEW+0qm2ce2IlT4KiSCRCXU9rXAqLFkXFCl9tf5EccGs/htZCMmzPLgYWXCdre/0v4p3nVK5jaOKWeGfjqg2H5gBOUlWEA3t5yalYo+tNhPRm9mKyCfGUI+qvx/nAFDgbIVLN/ut5kf7Ny0u7xJK/irmojmPfw5QSTBas1tkq+ISCzpiQtob9Ai1bHwIA1G7iLqWl204OdTtN6y+5CzOtQqoF2vrErz5ElHE/Jz5WIGHBamxT5pzFLHaAQiKk1L+4YY1JX5vjkKqJI6Ne0cdtqoebwaH0ixe/EzfE9DZvmycUpuhZX46O8FWbEdJ78VYw+75ucclUJ1kBjiYhVY8xJ7aroPkoqAsyrQWrI/trpoXJ2yJZfhdozh4duULBjVcZQtj0bMjDc9wQSH6qkV0ryJH/bm8qchwnsXYi49g20hcHGFFEaBu24b3oq3cdeipdetAGwnqOJ1pSqrmdg8rPQ0NadedzWGlNTOSc2MsoeW58Ll2R46IfN6OMFoGeoGF72pzJT9FD40YtWlqFuPGL0mzpQ2Isj+V8djv0BZxewH3EpyT8Vo0nV1kRaYhQ/NNAP4hvhegVdC0JkhJLNEGpRK7BLCtjWChnrlAF66hCwtNR+DG5JeJ0FNuSFpJ5Nb8uDt2OYbajhoPrZmz+9kIG5eIwBwW44WVPY9wXQr5rhmvNYXCp/gsb51I+hYjn4VsZK9u8dIRv6DshkhJrUEH/BTKRQmnVJQImboO7jeBrHZp8lzCEevyE31SbxkqNCQ6v627KQrHPKgkmkSxhj8adnO13qNW4mwlJt+INt6AOceZfNbrX6zM+JxeKSd5Z2T3KC6TOL2rB4PnrQGXnEb8zU0rRSs5DQXTUQc4C18c/NxUgo4MUfGcCxVc9YOEuPG0Fx1Ll5Dgoggr1NgcvdKmOA5CXISRBeOmiqg3pO+m8mVKPH4y4TzI+KhEAnN/Lud9/5CTn5Tl7C4jZ4d3Ku599DIFx56Fle2GXzEw3Cu7aAlrNrzva1z+oBFd4dhSyjX/3YCVVdE7hQhjtiLxn+2Zr3AQDcKp933aaOnGD5swTlqoRj0waMA4MB+TXM5QJRMg59wVsQQIkXJDhzZTcL4dBe/3kuZEw6ZQhSmGADY4ZW0YB2+KSnn9rlGhPr7kKIjMex8vhxgwqWCN8DlRy6VUSmGrvzCgh/Njol06b62z3hFbVTgVgZ9AoNcoow8YBOOgdTIfKTmlJMtSzEjMzzjdFjH/oTD5eskB1NvaPfDW/amWVU0tzbpFc/HZ6ziITMIZB6wNqeo6KcpxXynPpn5VMNe265JFcC97SEU5zCwq+RiCcLYBxYwHE7v0RPjFop2qaz+suQhYjOwy3C9IZbAVQKLO8emKxsyAs7WnZcUUN2MutSg87CavU//OM8dXxzO8/jfW6fuHXthjLfRiVMfxm1bUgHfOV7m2SxiFmZEPTo4ObWW3vOITXgfby2DfBaKlOoITWRkFBgI5mBcg9DNKkQFLoQ0Uc1FD+RX3GKSY732Lr6Tv+iSwYfu/iB6fteO9juUq87zxVAYYMfV+ZgOlqwGwS46WgPBkVAqS8Fd2F2X/z8gOrwuquy+OQW/pOMIKN250T78ElKjjD3eVfLqlXlbAa6nt7C/pFpSjarSXCFJ4LBwgIU+vm4qeX7mZA7aACX/QhdbZDfXd2BbVxVhEn+BOW7ApoqiNkvxwkoRyu5+MlyriZQUfskqKVov38Q6kicKTgD6nQccNIqWB01lQmbtgelDUfHFNwkplFRdXpgHkpj6HcdwCOyk0XyoNjP4eqL3jK4KEhDjP77sDywog+4CKXe5m7bf8ZF10ptOIs8wmaX69cojywUTfkRRP7TrutpnX3IuY9Gld9+X7zaZczAntHj/HsEPBnUFvnWbNpmlU9CPm1OWQ86N7MplZ4B8IsYVbL3noL/li4s9y8LHivRAKSrSkN3xAORZXfHxYaADhjbWixm9rpcf2dxvR2cxsHq9NQMAPMNzNV8tYtP0/cKo1v9d5h0kUKCr1xjs7NDThsvJDIALSEecOL99CIGffIJKLob/DU65JbAPgXoXSXnxf2YIT3T6rjB6qzIuN48NmN53mX2kBeNbSCnnNUiWucMV2C4+QA8o0Iv3d94+DSZP6vLqdSiFt9cJ1lbD3hz9+FRJGZWBiUK1WJ0DTKscCqHVWM63qfHVqRwB0dzfnaEEORPpzF2EBX/Hs4ZnbfV7aMU/uaQLkU1/MtHFFjcncMDOQyg6xGt6euCXMnTeigMQvqmHUkf3KaeOZNLjAgx4xu2MOWpG2XU8+ehyvOo4F+MgG1RVedG8CQo9VUyGKwBU6xpUGLxvgk7f+cEBxcKYccH5bvrsd6cahD9qIXG53+vCX9EiIcQudwZkv+4eEKsCmLxGX9Kjg4xgssIt6n20e10D7XCKiJU+vKrmQ2DNP4RNdfVf3CT1f/WM8zuuVhfbWx1Xt9y7kQ/OsOI6JiphxE0PEbr1iCrIHYXQETbyb38EgVU6LSs1mZOx7TP08g0AxeRcyR07ttLtssdIwre7vdeCX+12Acn9cmuQsDVA8u7uMBAWo1cLxWogAgwx6QvSpbmrEAdZHM5RmKE65JIBgKgjciM/iHO8E5z+FD1WBanje2UMV6Dmp7iuLjgIwzdEVis8bOHSrVpDJlwkzWnzI8MDYIU89/NQ8Wcj6OPyKBcEEAh1yIzr6vritRwTWjNxRZZ/JMyrGSr0vMnu8cRd8J9FiUsQY68V7yOEv43SkyIy1dVFcK8GYhDXPkwH5woBZMIwVQtEBJgS42k6hwmNXFJS/T391S/XgbQeU93jvAUKqS8y7lowjZj0s/RjKS8wh8+k5PyvDTeKTl9t+4584ov8bzJkwZd5aeYxcTuX7ulPGZenaAGzHmOvdwBr8lVGhxtGm728dAcQ8uLfzbUcv1QrKF9F0C0CMDjoEWaR4Mh8WTewoQu3dHGezVLaEvP3VFmdlBKCJ1ASrVFZQqPa7WTddiNXQUjocb7k2C2nGYeQaP6ysIAOJGXNbEAMRLDttrWpX9Z934Z0Q3c5mshKCgFi3LoRzMOcyWQAvPdjWUwAdpvO8joJHCshqOazfMsSXNVWZgbcHGZ65jdVvZqdHHkxZ1XPsZyeoX9XkFfRPwe/mmUHWnrbxgTPSjq6a2nAaRuJUr3Rdycpuh1tdtXROf71dP2BoeIkbI2NJi6Jl42VAfiNzeNpEIXWdOMPv9Z0VPF+WbIQbpBxg8L3rn4WtlUnEyXNBtkIMW9MZ8QrMbMSBjhrzM7RVVAX71xZ1gwBlKYkZzaMF90W9tiOt9kfFAifEqnlGUvGc2KxTuHgomvCi756ebOzRuxqW/dcGbVstBnnUNLKjQwbgUmlgGY+UXUc6rzoAktFI68KVIHGlmBMYNAiKEU1S30cfYkabUxd/HpYaDsMueDnZKUW+h7ONUQ3lVsGrqnsjoQiB4qzhj3Wt5O9ZPAYG65vK8xyOaQOBS+8EXro2YmmjqlgT22J4vJdBo2+P0C5HSXNuLXuyts0/SF3VEd0IMMG3HU9aizlKfwcoLAjRtKypUJqupuCD9EbdzIhhuqFxa37ymgV49X4yjUA5Zg/xCGUDNREvXrhQGnDZiLlMvwg5Fo8x2V8bHP4klPdbhEHEeSzOoNGgc57PTBOTOT/Rq7v3yqTZVYrdICCBqcd1aF61y/+NEO/ytdjCCSOpxtvOXAXXUdHWeSSH9sHAYlzVcaipBeyUaNDQjtKcLEs8w/uF98IW47nkbqi5lfXqwe6iyMnCM48hOWzf1w0jV60nvIwV0SAkYDma6T8HMJKZbIcPvlBvrML8ZWmEr5O1dYDEUI21/lhqOJPYbcrfgtDIyP3u0K5b/mMEHkTDQI1CU1EHWGK6SE89pMakbVxFXylQbThWPnvB46KTm295KEhrModgSfgf0EUdBu35gLBEMw2DMLSiE98gunplwAZ45IbPaunYnRkcdonTSBddLtfh0YDH3kkJCPN1A7SmR0oP5aHj2JIoMiTKTh/936wCUiqfogeryL/Ya7rs++djDANcjrvH/iXddczWSQvoba8wuPpGutdKFjSdvsbi75HYg2xVA22SyFMXUIHKGAp8zw7w/Ka9O7gRbxZrxYgih85wNccYn3YoAHVWgK/PnfahGlr9p9L3RZzoBlhTxYLb+UyMCBAdC2NOqIe9ZOoRsm9WjSK4Oo9v/TumEBS+AgjK/W8I2SKmxI8TplEVpNIWBjSuc5bIHM+CA6sQsl5qEoiqPY9n7XA/ImTYLZVVPc3lovQqHV9uyySVFKEdDUm7nc9xoTLXts4fMWdVlr7JEMevp9oZwMhc0VmcJWOG/KUR0WXOjYeMKDVHIcfxfB3gqsVyhBNH9Z2nwmLrhPuOn+QohycsOOcDnR23mQK5tAAIXq07YZG72vUI2LE37cWEs9ClDfnywV8Mw8jpNd3YTBetF0t/OqjKyqMIxyx+dHg2E8tMrretUVRuZc9CeM9/JT8MdmRPRI3h+18S5wQpcHPYUaR9B3MDhtfHvolUk1iW/ruXoCQ+OO2HrS6tUTW6mGzjVHnF9al9QK8ShNAMg50pFP46RVp5OuC6XhFc0zAo7Mzl60YKZUhZtn9lmZ90L1zibFGRAHZDonwi/XyxiUyEL2twNyFxS/jLHK9/I7LONUYlsbfgcjzE3BXaN3p6F2PXtVk+qkGNL3tAmgLuu1zK8M+8gTVY5pgX4HO5mJaIKs0dFgb4itutm77SXwROzFeqv1HCiwkx431Rz/qV+VZ9Be441k6C+x90rKZgOwKPhM3Uu9N53acHYjgobyJtQmRNhUpM68Zr1uS3GWu0+8UTq5E0YzSvF6FrIU9mqNJIfm11U3W/QwGrdkJWxx6zbmbGLgroPGXZldzURws4BcdfItPI1kAbLQxN7r3eNQvkwStMdhQg8zPon4q/cCBJ0Yusiw3sKNamI85JD56TQA0mYrdF3qWX4JsNRpB2pDGUQx8HfVlpL+qaCjQWY8J1j44k6qhi+mK2ALXs3JKjfWhkEe9W9wz3u92SwTV1Sf6dY+AXK8V/B3UAXKpIC+Wyy3J41VfVTUitM7xVGNiQQ1qCFGJO2R+ILCoU0uNieX/CiSBgR/B2qf3LTwCumU5TegZy6FOXof76EvbdoyOr2Ka5dH9hzZBd49ny7LIug9yPGRaoA4mET9LLCK1BJqs4zm4W0w1Xwrk9h1tz5RcxlIkYuxW23Dtulc4LkPte3mQ0OPQLO7oNbx7QTKqLpQkT+Prm6NmzciqiogGYWmemrqWPReZC/zoK+yjuoD9x20tT77UOQFhKA25eHkYJxNq4rNRCSWrWdoCWIvWPOLl4dHBRA4Q8IbUIiNj0WuJFcLSPR5mZvRk7tqhNshJzKJ2sEtmIV7u3woZSnazOKMZSTi0MLQIs0dJAJ2prFgbExygXCuUR9KerHw+W5YFQB/8r0F0U1HXyI9zsQCywn//2QABABoAQAABNwBAAA8BAjcCAAAAAAE0AZ1AAAIACQIBAQoCAAMAGVRoaXMgaXMgb2YgRmluZ2VyICgyKQ== + +# +LeftLittleFingerBioValue=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 + +# +LeftIndexFingerBioValue=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 +# +LeftMiddleFingerBioValue=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 + +# +LeftRingFingerBioValue=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 + +#BioValueUsedInYamls +BioValue=PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI_Pgo8QklSIHhtbG5zPSJodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLWllYy8xOTc4NS8tMy9lZC0yLyI-CiAgICA8QklSSW5mbz4KICAgICAgICA8SW50ZWdyaXR5PmZhbHNlPC9JbnRlZ3JpdHk-CiAgICA8L0JJUkluZm8-CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24-CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I-MTwvTWlub3I-CiAgICAgICAgPC9DQkVGRlZlcnNpb24-CiAgICAgICAgPEJJUkluZm8-CiAgICAgICAgICAgIDxJbnRlZ3JpdHk-ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8-CiAgICAgICAgPEJEQkluZm8-CiAgICAgICAgICAgIDxGb3JtYXQ-CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24-CiAgICAgICAgICAgICAgICA8VHlwZT43PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MFo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU-RmluZ2VyPC9UeXBlPgogICAgICAgICAgICA8U3VidHlwZT5MZWZ0IFJpbmdGaW5nZXI8L1N1YnR5cGU-CiAgICAgICAgICAgIDxMZXZlbD5SYXc8L0xldmVsPgogICAgICAgICAgICA8UHVycG9zZT5FbnJvbGw8L1B1cnBvc2U-CiAgICAgICAgICAgIDxRdWFsaXR5PgogICAgICAgICAgICAgICAgPEFsZ29yaXRobT4KICAgICAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPkhNQUM8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5TSEEtMjU2PC9UeXBlPgogICAgICAgICAgICAgICAgPC9BbGdvcml0aG0-CiAgICAgICAgICAgICAgICA8U2NvcmU-NjQ8L1Njb3JlPgogICAgICAgICAgICA8L1F1YWxpdHk-CiAgICAgICAgPC9CREJJbmZvPgogICAgICAgIDxCREI-UmtsU0FEQXlNQUFBQVdEYkFBRUJBUUFCWU1zSDVnd2NEQjRQQVZrQUFBQUFBQUV4QUVBQUR3SUFRQUlBUUFJSkFBRUI5QUgwQWZRQjlBZ0ZIUUQ4QWM0QUFXQmFBQUFBREdwUUlDQU5Db2NLQUFBQUZHWjBlWEJxY0RJZ0FBQUFBR3B3TWlBQUFBQkhhbkF5YUFBQUFCWnBhR1J5QUFBQnpnQUFBUHdBQVFjSEFBQUFBQUFQWTI5c2NnRUFBQUFBQUJFQUFBQWFjbVZ6SUFBQUFCSnlaWE5qbWNvQUFabktBQUVBQUFBQUFBQnFjREpqLzAvL1VRQXBBQUFBQUFEOEFBQUJ6Z0FBQUFBQUFBQUFBQUFBL0FBQUFjNEFBQUFBQUFBQUFBQUJCd0VCLzJRQUl3QUJRM0psWVhSdmNqb2dTbUZ6VUdWeUlGWmxjbk5wYjI0Z01TNDVNREF1TWY5a0FCQUFBVVZ1WTBsRU9rZFNRbFF3TWY5U0FBd0FBZ0FKQUFVRUJBQUIvMXdBRTBCQVNFaFFTRWhRU0VoUVNFaFFTRWhRLzVBQUNnQUFBQUZmWWdBQi81UGZHeEFPelpINllyNnU5bisrbEtwZ3ZleUxHR3piZjlocHNZSGlHTlNCK3htTWVqV09yS2d3S2dXTDJTbXc2ejZ3SU5oZGdJQ0E4b2pleEZBQ1dON0tOLzBhM2tNS3Fnd3VLNENBOFFBMVBJQldRZkE1bTN3RmxrNzZTaTg4L0FlQUwxWmFNSnlhRmt3Q05wY0xCOVJxbnBNZGw3Qld3ZGJMdXZHdGpRcS9nTWRVQURnZ3FnSWNIZEwrSGxqeXpId1hzcVZ0MzM0ZW84eENxQ2E2SG9qb29ZdnZQeDdOZXIxNnA1azFCMnN6VmovblJoNXZkeTFIU3A0Mi9BSFZKZ0M5M1huWW1yS1cwY3NZVE9sRzBVWm4wMnVZWC9vSThTeWNRSzczNVhTaTJ5ZnhuTHJNNEV0NExGNHZtOUZuZFFad2szSkxCSmdnOStyTHN3WUNxdWNBaWNrcFArcFEyUWMxWmFZRlhoNnU4ZlZLUUFncVdoT0FYc1lBNE9Yd3dyOFM0bUpHdFZ1azBXTEZUSXJ3VGlGOUJXWjlPRkp0MlB3cXZqTGZtUENRUG0xYkRZenVlNThtU0VmdWk1bU9GYXVZQmNuMnkyQ3Nac3UxdkUvdVdRMmpVa05RUmpGZHRyOExwV3RVSDlhaWpISkVtQnZxMXdReGVIcDZoSEhqaHBUaGNhcXEzU0RicVF0MUZUVzQvZUx6U1ZGQ09qRnpBclFpYTA0VlcwR0lORVBlS3BBOFJpZEZKNStnTjh4MUhpU2VYYkRqdWlJV3BPYjZuWXlYbi9IM2Q4eHBvdzhaM2pkMEVpaFQ5dlZJbWRlbXRSYlF1b2RhdkxLTG10UnladDZTYlNwWVBBQ3pSL2RLQ2t0QTBIWSthL0wrWWIvOFV4WTV2UXlvZ1QycFlwY1B2OVpqQ1pOdFNiS0F1bW1EeG5zeUUyS0d2RHVBT00wVVRObCsvdXJPMFlCdE5teG9QMWsxbERpRlBmMS9yVkIwbjdnU2hncHhnSndtQ0o0VE5sMFI4c0s5VXEwRlFtWjBLTExCdkJremZuUWVUSnhIaFFrVUdLMjBZbkMxdjZRRWpjajVUSEdMcnZjd1Q5Qlh3STZ2Nllsc29KN1lxSUxZVGR6VDhja1I4TXNtNGkzZkhINE04dmNOWWRCOTJVVmI0NHVDb2RoREIyVTYxcmpZNll3SzlaczBhcksydG1XeVVvL0FCN2tsMWpTZFZobHpEcGxGdUc4dThNQnFQb0xXdU9Cd1d5T0o4WVFOWmZya1FEaGF5c1k0YTEycjVSTmgyakF3VWJ4UU16bEhYU3kwcm05cHdHMG9OeCtJaEdQRkRHZEJLeVU1YkpJZENWeCtNYnZicWRicGlQb2hKTHRDeVBjNHpSNDJZTlVYN29qQWN3VjVUcDJ5eWlyYldoQWJDV2FjeGJBYzl3bTQ1ZEI4d0ZNK3hmakFEa25kTk91SXh3eHRnM1llTzl0ZmtTWWlQLzE1UVJXRkU1NnB1cVBST1FvZ1dpcUcvcHRMOHc4YWpGb3BzOVAzTXp3L2ZlWlJ5WllLdytWZ3RiNTBVdkVEOFl6S055Zk80ZnhLbVZWd2I2L3pzUDZCOE5ia2tobEVCd09qNUpORkRYdklWakVZNFZhUXk4YjNqc3FtcDRGSFpCamlWZUlNTmNOd0RIUUQrR0RzZi9aSXhKeC9mSHB1OTFpdkFFT1h2UTVaQUhPYmM0MXFpZ0RudUpLOGNOQjVFQ3luT2pqRnBXdDFNQjhpM0FsdFFHZHpQQnViUmViNDhNVkZGNzgvY0ZlcDR6K2FYQlhaV0xDOXo0cW1kcFNnTXFJYjQwRmNtd3k3VDFuNHJEaHc4Y29OeDU0THNNRmhuQlA4aHQvS2Yvem8yTTVpRFI2TGlJRTBTeGo1bnVlYmRkUkplbWxRbE1DbGFGbDlvN3VyZWdRZTBzMC9ieGNzaitjUFFyNWQzRnoxQ0JtNk1GVmhoejV4V1NXV2UvOVNUVFpPNkx1NVZZWi9LVTA3Q05NRTErcWxaejN1YldQRWpjWWxTL0VXdkFLOGJGYmZuQ3VVYjdhbjZPZjF0OVVKYWlRSkVBbWV6aVREVUozRnE1YXZ1TVBTZm1SKy8ycWw4QkZZRTBlek5ObmZlTEpmTytySHFkT3lqeEIvUXE5V01WQVd0T1VjRm5HYkNHdDRsWlJJRHEvZmZ1WHVWdk0xcTVKL3hPdWt2YUxuaHdkOXhBMVcrL2x4MnNFL1JnTnVzV01tMjVPdmlON0o5Tm1MTDR1UzNiem91VU9XNDVwaUx0cGxidDJIS3JKTTF0ekh5eWR6ODJ2TVRvZ01qYW1KMDBSY3RabFV6RDJ0SmRJM1hEOEdueWdIMUNTaWhSdHVvUWNOSWVrenlma2htd0Nnc1dudjRjbEZ4NzMzbVBZUVZBMEtXRFlyeHE4aHg4ZkRNZ0lvQk15V0xmU3VuOFE5T3ZBdE13NmdDS0N3RGVuRzhUZUZVK3R3MGZPNGR2dSs1TG5MU2lvYk5lbTZ1bTdhYzNLaE4rMUpONVVXV2dxNFdQOHFBYnYzQVpjMFJOSFRYcWoxYWhWekZNbG1YWEVkU3daUEFQWFRFOFVNNTlDVFVOdE91VkJyY0RSZEEvYmpRc0hJM2VOczVKSzRHVHF2a1Vud0p2b1YxSGVYcFlHdjFaSkNsaUNCWVVJOXFydGcvU2NCVlhZVDZXY1h0STRWdVYzR3g0Um9aR0JrMk91SVg2azQrcDh0UVc5L29aV2JzSUJQelA0cWo4SHhCeENUWGJocFRzb25BbjEwK0VsTlAweDhLOG9TbEcvd0dyVjFIdVRzYW0xZnRqSjZoWWwyWnhvckxmQ1d5OU13SEZ1eDNSTjI5YjBCTTYvVEwrUUUxSWpmbjdGTUlGaGQ1Q21JckJHeFZlTFFCNDllUDRnMWYvQXQxelRpRlh4MXJlVVVFVk1UcTE2VkFlMlkxWEF1NEpBZHhUUjZWc0FYZEU2Z29SYlI5N3Z6SllIbm5oQlFoQWtHYm54UlhWaWxFN1J6bStwOWoxNlRQUW1aU2F5Z0xJc0FXdy85R0kvanp2TWhzV2F0QWxvZjhjY1JOUzdteHZwcVJYMS80UkJoM1BnTXlMTVpOVXlHdFh0SkJmVnFpMElJa25uUUt6KzZyN1ZNNDg1b0QrWWNkU2pzcUlvM0x0cjYwRkF4Uzdxa1c3MGpuajcxYjIvYTNibTA3cE9BeTk0QWdldzU3c1B0SnpQT2h3QVZMdW0xTkdrdkQwenkxN3lTL0ZZSXdlVkM2VU5HM2cvYlVyVDZMVUhZL3ZpaXNPRTB3clZYTnJCNC9yQVFxakRYYVZOZENMSFY5MlVQaE4wOEZxR2dYSUFtODltNmM3Y0EwdHdmaHVxR2xDamoxQU8vWWRkRTdYNEpCaHlKRHh0bnNQY1FwVnl5RkJuZGUvOWl6ZkwwWUpnNzFoK0dlcC9ScTBZVDZjWUhjZ3QzWjRzc3NiMUtzL1pMbVZjbnkxQm5QSDNjU2JQL0tUMUIyT1Z0SGkxZG91RkJBUDhJTlBuQ21jY3pIdWVoNldmcHNHSDdYNUlWUWVKdm9lemMwL2lzbEdGZ2loRFpTQ2gyS0diNkR6M1g4R0pIcE1oWWd6K1pkT2JvK25zZERVMnhZdm5qRjhhV0Nzbnhxc2diZG81WDV6Tzc4VjNDVDhjSGI4Y2pxYzgzdUg5TTRuL3dZZmd1UXBjaEQ4c1RDeFJ5MG12bGxEMXZGUFNrWVJaelJnSS9NTGthM2x2QitOczJ0QzZ4NXA3SEorWUlDbmlBNm10YWRpY08rVzBWcldRTE56ZmtCanhIV2MxUGpyeSs1d3dQc001OExCeEdxaFNiWmdybXRtS2c1VlpUNVhxNStMSzNQNjhDYms0Sk84RFBPQUZ3aTFWbEhYdnNMMkUycUNEd3VOYTRzMDZvTzdvSVlOd0ltL1dLN2c5SWxEcmtvMkVJMnFwbUpQQ2ZNRFNXTVI0c1poVjdrUkdVblA4N2NMWXQzdlFjaXZDYy9yRFR1a3BoMVhYcVlMcDZKTUdoamxSaGxjUlMwblNHSzlGSFduaklzeDZyZ0RRa2N3NjB4dzc1QkJOSTBRSU9OUnE3THdpRkM1QzVTWHN4NGltYmNPdFFWL2lBRHlMSkxOUnF3UG0vbHJxb0NMMFVvVnNyK01MUjl6cmJyV3FmVm1NbDZvMEpyVElqaDl0TGh3ZkREQWlpVEdzUUpVZVM1TCtIZERHN1I2MlRBWHJCUVVRbXNlbVEvZGJPMXNpOTJNU1V6eEV4bm5UaStjQkpEVGlwWURvUENkeGlqaHFEOGZ2R0lJS3kvTmJ5YjdnNndBUm9WS0xJNlJ5MzJFamxjdENKZDVNejU5RDRBa2hDa1RRS2tuSjQxdTBFMUE4WUxvTVlGU1NGWldJOFUxUjlRSG5waFFhdUNQS0w2MnduK01uRlZjK1RucDNGcWVGU0Y0WkJuSWlpaXp2NTlsbTBhcytGb0dnOFZ4anY5bTNkLzNzempmaVREUWcyNHlteWc2clFjNDhSeGZZUUFURjBZV2EwTUF4dmlkMndMZTlpT1lqUjdISysyeEhvemNaRU5PUmFXMlV0VjRGZVgwc3JPaWF0Y0NpSGROd0plY1BYL3MvaTFLNlJqdCtxZmtvUnhtYURvZWdmTnhlUmZXVmEvQUNIOG52bVNEY1lUN1hKL2xMWXBkTEtNbWVJYkhvWkdacE0wZE1FT2FCam9IdVdFeWxSMjUzS0kxeDNRSXJEZEhnK0VNMHphTUNLbFgybDVZbEp6SGlpejh1bzJWQTJpS0ZsYSsrZjI1dHVidWxOVVpzaWY3R2JvZXdVMkpZUk9yWUExTHVXOE4xSjlaVk5QNnpKTDZpeVBONG14dHl2ZC80WjBWOTcya2lQdFE4NHErWHNSMk9LUFBlK0MxVzliU0RsdklmSEw1YW1lbFUvTkZjOUlEQ2Nyc0NQZDlrRFdVL1ZyYVJSTDQ0eEM3aDNIaUlWTllwMVhkejBDRnIwUW9LWFFidmhuckV1cHBXb3NHOUhFdjVTbDZkemRjNklrUXFKTGtmMjVDNGNZV0N0VDgzbnJOc1JoZDIwWXNBS2N1TTE2U0E3bVo0UTRyZ3lIeXRIRlNES3VUbnpUNG9ucGFqR0JpR1JER0QvZEd3bG5HNDY4WjBURUxCcEd2VERXbWlrOW4xTGtVaSsyOU5yTFVVUmJZNHNoNERZbGIvd1dveGhTRFNXdXQwZ0ljajZyb1Z3TTl2UjVEZGNnV0xqNjhxZE9uZWhoNmJaOGFpdFlkYUR0NGRWRG1oc2JNWEQyNkhGSnVIL1ZDSENyMHZEZHBrbDhmR1JVYzJ5ZC9QcHl5QkVnRDRpZnIwd0FLL09odFJpR1I0aGFQZVROa0p1ZXNUeU1CWFlROVJLMlIzWlB0WU9aemxOMUVFQ0FtYnRDMlIveUY3MkUvcFVSVXdKUkJITEpFcEZnaUFrNGI4YnFjbWhZRnpSTVI0R091VE1xUHg3eE82RHNYM3cyY0t0WUlBd1huSmFrSVZCWmdudHlhcTFjYUlwWTRQVzVRZEpIcG42WjRXdnRrTDhmdkxhVUltbDdPQXVEKzJERnVHTCtWalh0L0pBaHJTTVNzMXN2eG5PWkU2ZWdSVkdlQTcyTFNtOVZkL1NNNElWQlIzbUJyRDE0c0cwTTd6SjBaWjY4elpySE1qL2NwMkRNTllUT0FHL1c2NldJay9rQkdkaDE3S29SL1hBNlEwMDRPbFREcEhNNUs4OTB5ZGVscm5BbkU0U00yQ1IrT1lJdkZrL3U1WFQzTkc3UGw1aklQeVR2ZDYrZ0NJYk12WmhjSVdHZTJhQlZSMjdSR0RVQkRXQWR1YnUrRUpmcElqeEs2d2FCZjk1NHhadTAyWENTZk9oQWJSU1hVZXZMc3dpMjlHQVh0d0x5NFhHZURjYW9nVzFCd2dpMENhTHlibWJFMGdLSGZyRTNTVUhFQVI3MnpKYXFqTTdnWEg3VFdQZ3V5QWRHUWEzbm5sYThEOFJtaXEvcHZMOHZ4Nmw3eG84TjJQbUQyZkVOZDlkTGJCS0hHYkZtd2JFaGlPc1p6YS9PWi9OMFFTWklqOU8wL0luR2twQjJYMWlDYzk2bHNoYnJwRlY3UG9Kc1RjME54aEhvaUxzYXFwMXNSdUp4SUpxek1rVmlQWjBCaG16OEx3K1ZNaWhaZDBsd0t1QUFDUVFNQ2ZxeXlyNWFMVUk2WjRZak9McWNiaktwL1RwaDZ6K1c1S2RjWXhSdU5RR3UrTzR6N0Q2d2dyc3ppakpUS2t4a3N2Ymk0aktwOWpnTzh2SVdRNWdDVVpOaXo0UW92RUxZN0dyQkh5dW5hbFBhNklPWXFRaXpWMzV5M1IvNDVJRHlUZ2RueG1BYnd2OUNFZjBKbGZXVHdDandDUEEwSVM0a2JtTDgzbnJ6S0c5L0MrSTJOQkR2MjF0NGovUXc1VE01ZWhNcHA5bTFkYUNyWlMzS05wMVNObVk1Sjc2bk5ZdUVHREpEblZSOW4xY095TWtCVTNiM0RqdGtEbGtsTEVtY1lKbnpoczZzaGJWK1A3YlF3TXdVcllDdkVHdDBIbXFsY2syMDVEd2lTektCT1NwMDRwQkY2MFRXK2szOXcrRnJvbTk4U2FTMEppaHpwM2ZIMDYvTC9TSXJ3NWRMOGhvNTcxZVNkS1d4emRLRzJPemx0TXczTDFJR0RPbGFueW9pUnVmWEpwc1hncVBhRmZyWEZ1VmJFYVNlVVg3UUNNb2xOTUpTd082OFV3MHVhMkZyZEIvWFpWZ3g2UjRITEtIZTE1UnNzdUd5ekEzQjlhOUVleGJNdWFydzJiRE04Sk1ETUtjMnVmaFducys5dDlnYXdQOURHc3MrbjFCVnRYMGtKbWZneDgzWjgybGUrS2dwUXppU24zaU9YamtTSVZDdmlFTnpQZXpMWDZoZk5DbUtVaU1wUzltMG45ZExRanpDT2pOTWRZeXBDOGMreWRTVndTRThpYVBTNGpJeWRJL1ZBbGUwOTV0Vm5DTHZIVmwrN1JFanFxM1Jvb1dIKzFHRm5hazcrcDNIL0d6VlF0UEU1aFBoNk5Vb2I5WHNxdnA3LzZXNW9PMzBNY241UDVLUy9qbENiNTllQTlCSnRqcnZwaU01VWJQSVk4cEFxclE3YTNQSjY2WDRTUUVBYTYyREhYS2xBQXRSczIwRG9FejF0QlF3NVI3aVYyWjYvMlNwSU45SEQzSWZIaEhZK1hMNG1DOEdsQXByKyt4VXFkcTdRUFhBR2pJWmJKdFR4a0M5MmUrUHByTm8vbE9VSysrSUNSVS9IT3lOMnEyOUZ3OVMrUnlFM3FCa3lhR21pV2U0cjZpOHl3WktwaGdwQ1duU1AzL1h0TVR4SUtXRVFJRGNyS0xYeEUvTExmUWs5TElQTXJSZzYzNlVBcHdSK1RIZTlKSkhZZUg0QWpXQ252QWNtZHRmWnQ5TXJsNFFxRVd3TjcrZXdqeE9SZXlFcjllRjhscEtaaWQ5NmZvZ3kwaWZybHlxTmtscndCUFFzbk13RnpEbldEVHd5TWlFVHovR3lzN0NxZ3gyWldFUVhFNkdubFdHMUcrL09sVzlZeVdUbFE4QkI1eHdUdXRURHljaVlrWmxIcjdvL1FyVHpZMWg0YkY2UVNydGFqTHNDallTSHhhTDJ4T0hXY25lamJpSmRBc1orY0c0MlBNbjBybzFWZVh3NXNEYWoxOHpMS0ZYUW1ZM0tSVGxtK2xYbyt6cDRCUEJYN3pVYjZ6LzNTUDZVVlV0dExSVkR1dkNaN0MyQkZTc2V1YktuK0Nia2lUU0xUMFZray9IOVBiYXRya1JnS3pncjdjT3J4TVU2eDgxb2dsRGoyZS9wWjE4NkdlZEQzeUhiZkcxaUdtdWpqcFFvTEZXOURxWGs4eld6aFFObFBLZDBhdDN6OHh3eFBKTVNkU0VWTHl0WkdodURsbzZKdW56U21CQW5mWjNzTjN6REhjQmZiOFlyS2x4S2xNL3cveHhjRmhaa1FCaXNSSG9KRDZxN2Y4ZGtNOGJKcjAwME93MngxbTIvWUdKUDBtWTN2S3JlQitLblcveS8zTDc5WTA0UW9ybVh1NDdtSURsM1ZRUFVpNVI5NGFNZEQzK2wvSEFYQk1hT2V5QWlvNkpHTG95R1dGdDRSOEZHL0krblFwUHh2NnlWQXdzWThFWlhHYVV1S3EzTy9iUG5nSHh1TkQyNkpOTkVEN3R0UmQyNktSTVNpUkxEZlV4WHJ6bHY5YzhJMHdHV3RUTEhwbGRXMXMzWjdHdldTcGpzbUV0RjZFZGN1Y2ZLdEJZUTd4NHNlMWhPSm1vWUY0eEVyK3k4aEFSWmVIQnVNdTJmUTRaNTZTMHEzbHg4MzE3UGxDVlcxUUkzSXFDZVMzQUFpVTFDaEJ0WXZpbldoQy94S3BwZXp6eG5YRTlBWkd5eWhoZHpsVFBrcWZWbWw4RVBVUitPMVc0cEZmOUVWeDBjNmhxSEVGZ0FCN29JYldSTWpKWndxYllJRGY2TG8rVy84aEVpOUQzU1dJVmx2SXdCTWdMOEI3TlI3ZG8rY2o3V05HeWRzL0lEdjEvalZJUTVVYzAwcVJLaUpZaEpjYVU1UFd1VGhWbVJFWmhYa0I3cDU1cUNOUXNycTZ3QmNPemFlcHNkWVhFODRsL3NqZnJiOUp2dGU4QnVDaW1NOWR2LzJyOUp0eVkrRWI0Mm4yVk1ncTlKOTVCTkVZWVcxYnNtTjdLNDZjSkp3MUcwNXFXOHBhSVN2NTBkZW51Ky95NVdCZitDbjA2ZmtTaXhwdng3b2J3KzVZTjVVNzYydGNGV2x2Z1BsUGdXNVhTMUlsaWFNZU1OaVVZUkJ5YllURGxDOUNvZS85RjYyUkE3aVB2akxEQ0ZiNEVBUGhUbitVSW5HRnkybzhwbzkxUkFTK1hEa0U1QlkvSFhyWFBaRmgwcHVYMTd2NHRjNldOc090VEhSRmp1MllyZGE1SFo1c0ozNTh3cjlVL2M5eHdkMHhnSlFlS3hnSnNuOHlSRlkweUNja0lnREhxV2JWSWtVU2g5TWFlQWhlYmN1Zkc2YlRudGFNekFGOWlqMmhTeWFpU3pGQk1GMFRMT1ZXMGdYVjJIWmM0WElxemJOWVErRHVmSjRQWTR5d3RGRkJUOVV2NThVK0M3aDR5TGYxTTVFWCtPT1h5cjRhTEs5WUM5aTU4aCtCM3d3ekY2U2FRdGxPalBaK2s1WHVxV3hvcm1PK3hMRzlWbXNySHRIdlczV2lpS3RDeWJGQlNKUFJDWWlkM1BaNjJydENkeE5qNUZTem5WSG85djBENCtzWDhJbEd2cXE0T2xMV3ROdFFwZHJIL3pETGlua0ZOMHRTajBSM0I2b0FKMm0yNUNrTkFMY2xIK1Vuam9tRmgwWGdnY2thVkpwYWt6aVZhTGVJcmNLbEpsZlZITHFaeTYza3AybER4cjRRUnhMejdNMmtmYmR1eVZ2QmJLSFhLTUc0K1psT01hYXdzTnI1YWl4dnJmTEZITWV1b2xJQXpUNHQ2ZVFPckFYWWozZnFDR1ZXUTV5dEsyTmFzemJMbXZtYTFoRjVTOXJ3SGthV2pSdU5WenFic2d5MCs3b2IvMmZTQkpzU25BUHFmSmhsbUZaMzUxcjBjdEJQSWRUOGR2TUo0eS9xNnlJSkdzdlQ4aVpDcXMreDJvU0tXNm5zM1VtVzUyODVwOG13aHNENTFtZC9SSXc1QUFzTkJCL2VwQTl6MWhEU05wNjhtL3JhN0MxQ3ZsR1lNNVVXaWpkb2tUYzA2Y1ZsaGljZnhROXM1ak1JRUNXWDFCdnY0eDR4OG1oVWYrbG1SaC9rUTY3WVlmMWNOOGRPREMxbk5aSjBZM3JpQ1MrakJ2M3gveU9KUGwzVUNzb3FoVzgyeGpaK01UVU1sSHh4WmNKS1N2ejF4bmMzQ1pIMm9vYitJQkVaQ0FjRlh6bGJYQ1JtRHl2REhnbE5kM0dvbjBRamNzL3gwYlhCR0hBYVUrU2poNERHa1hPcVducisycE5rSlhrZG9UTDhaWkp0Uit5bC9ZdXBhWXhtQ3UvbGtmRVV1all6ZXBNN2FrU1FoQkVldnFRVDlYK3JVL2ltWkRxUHZ4Qy9XakZmZmVERnVVTkZuNU9IN0UybEl5RXBZVjRBelpYQmFLckhYMTVLU0h6dHBDVFpFeVdIUWtYd2VjQnFQamR1T0o1SEZaMzdsazRoOHVubVZBTERrSndyYk5vNnRtQ3hyQ2FmK2FvTVQybUthajZuQ0ZYQXFhZHo0Y1BkVkhqeTlHZENaRmppMEJYUTQ4YnoyWDZ5N3hUOEpEbU9YNVZWV2VFcUdEZ2tnMW5lNTZua09RK1JZd29KOTNsclhsODdUeVhUd3E0NWJIUHQrTWtTaDdlbVhIQmxkbmtOb3FaV0hhc0tydGpsSDRLNi9MYWduZVlHdEpsRU5BcXhxZG8yVUFMNE5kdXAxM1pmdytubnMwWmdSUFc4L3pXbW9wWVg3aG5xQXBLZ2I2ZVgzanFFaVZWZ1FUZGhJSnBRMUN3NmgvUm1MKzhwQlo0Z3drVHBWM0p3aVdNY3RjYlpaQlRkc3cydHBhdjFrUjNzQU83aDAwNDMvQ1hwL3RwVkRaZDZtT0ZJcjVmb3QxK0FndThzREFHUWljTzgwWTB6Mk1aaEZwN1RVQ3VhM1JQL0Jobk43aHhJaERGcDBhQzZ0SFJqQ0tEeEdqV3N4NnM0Rk83NHdGd09lYmF4cVdudmZ6RlRUaTk0Z2VpK3ZDZHA1bmh4N0drRzNMQ2hRVUVTM1h2TW9TZldFSTlaT1VGZEVKUzE5VmZGTzBXeE5wVmdPdjhvWWJpUVNTTTZ4N0gvUUpuQjhtalQxLzlzZWhmS3dRUGk3WnpYRFJyU01LaDRTYU1yVzc2WW9rTjhNeHkwTEVZbjVOQ0FpNktGa0VvYlBDYUhPNkVZdlY2RWVUZW15dEdTbHdEVmZicklxck51VTdNWng1ZjUwOFUwUUVlOG8vU1RsdkJjT0RpenlnQXZKK0FVQTBoY3JmZjh0TWYwU2Q4b0RNQXhqemNOZm80aVY4dU1jeFZaSUY2OEpTVXhQa1liZ3JYOVZpa084Vmcyb09rMFJpZlRPUGcvUEVmQ05OS2w2R2p3dW9zTkpwQ0tMOUhOdkRpcWtObmhGc04yK1RoZ1Y0dG1KMGhuOUpQdVJ6RWg0andPaDRzL2F5WjBiZjlaWmlocUNYVDBkd21ObzZvZDRnSjNuZXhvMWVOTWE3VUo5MHhZVFN1M2dvNHZPS04rallMNkJMMUpTbHF0RlJVUGF5bXRuRklYTEh5TU41QUxsVjByY01hTjVCc2crVjRFYTlsRUltZVcyZ3ZBT3MxT1NTYzNwcDhjeUlZbHE3MEY3WnBVTGtQbTBQQnZ2N25FUjhHai8zczdScXUzc3NFMDJRVmZITXlMZlVIZmZ3WmVhTWZqNmoxWmlYZWNtdGRFNFd2ZkFnbmhPSXVWN2h0U0Y5UkZiVlozTnhIQzk4Nkk3MWhrSlBqTW9BNE9CaXZoSU8rRGxhTHNJbWYxWUVTTnE0VVZENVd5R1pwTEcrMXhXMjgveGhjR3oyZTh0U21vOHFWTDFMbkdNRkx3V013em1hMVpNQmd3SFY4SkNKekcrVEJ6Qzg3TTNTRVl6dlBqWUsreDBkQnhBWEFBSFc2VDdva0Z5U0NRWnZ5TWlmcWxqWmVmTHVTQWRCVmFBTVV4UFBvaTlPUmoxSnVjK3l2MXVaeEpzZTFFTEtnaDJQOUV4UHlweUIvbWdCYUpGOGpXSjdSWXRSKzA0SnBqVzVmdmxYZXhEb0tXMUtmZ2JPYnlrT3NlWUwzT0kxVEF5NnFiSHdZZXUwdDk4dzVrSmUxQmw4RzlHMW0yZWpsWTgwcDl4b1JRL0dTV2lUWSsrMWFBbGNLZ21jRStkOVNlNFhQS3h0ZEV4Q1BLRCtML0s5ZVNaaEgyNTd3NURoWWFTVVg2cFJrVnYxK2VuTkQwcEJQOTd3Q2JrS0hLRUV0NU8rYy9abWRHa29OcWFhUXc2UjFnWXU1WGc1WG83Y1VlUGJlQ0tEMEhHL0loVm1HSU11Njl5UXo3Z1pyV0lyYTNiVVlCNnlGTFhtQmxJUmhTU1BYRmdaTVArUHpkczdpUFphZ3dRRmpYN3IvZy9YN25XM2lVTVRUc3Jlb3hjdzgzbmorWUJQdmFuYVQ4clF1ZUxtQVdNclI1WFJ0SlgxbFRiZzd1dm9wZnVDRWh4Q2VPSG1RNWlJTTMyTUp6cVNUZEVJaEdMU25uMVNVYlBtOWQ2MFRSbTFTM0NhR2FuTTVOSVo0YUVUd3JxaDdrSG9NS1VGNHJqOWpoWmRvbVppTXYyYUk2VzNPUThzbW5VNmFPbWcraElRbnNBZ0V1QytTQ1liWWVrYS9wQWd2Y0xzQlpsMjMrTWs2enlQMG01N1dQWTdLZHBqT0JTcDJ1S1NrQkhjZ2w5Q1Q5YWxQYTdaYkJzejc0UURleFJHS09TZE8xbk9jQVZrQVJOSEIxdVlCSFBCKzBvS1lHeDVGTFI3N01IeEdwNXVzYTFXWm9xSUtRZkNGaXhUZmUySGgyVlBlempzd2JWR3NLMnl5bVNCcEFTdXRxV1RyTkI0MWdYeURlU1lwYUVDNUtKU29aU1k2VmJhK0FnSUNBNXZlR2JzalpYOEhwZ2RhcmVqelF1akIwcHg3dVpsNmpWTklvVlFVOVdjM3FwdlFpS3NNY0dSV1ltS3d1eis4RDhxSkdML0JML0dWVlNTYUlqTlRCdmhvNVFSdDltc01rdS9yZXN0cjBoRUlxNUF2WDRmOWt6aFkyNEZTUnZXVW9wemZMZXpveWhTOGM1UnhFYytpTXh4K29jRGxoemZZekl2eksrakNIT25nOHkzQnEyOUJkWGpjMXJzL2QrTXh5dktsc2YvcGF4dVFMV295Q0RMZGtjM3NRRml1dlgwQ3pZR3VHdTlDd1Zlbyt4NkFDNkxBYzFLMTFqMzVGdytFVUVtdE5sNFpwd0ZqNlZMc2VkeVMyRytrd0IxTUpnZUhLYWoxa3lMUUFpcFFnSFNwenM5YnJkejZIQ1lHdWdTcXJtU3I1MGFURVJHQzVFSFlub3BDTlFKUnZkM2VnQStDYk5ZNVBRUnpTbDBTRDFROW1YT0pWWno2Uk9mNEJqRnBnMkhwdHJtMGdDQVdMZEQyVkJrRVpvQkdzenhZK0tWMU43MXVzMHVab05Obzg4RzlnK1JkaElGekl5aHRmZDBvZWNJam1RYTNGU0RoekFTamVEdWpRK3FLa0pQdEgvcGZXUXJsUGJsdDhQMGlRRExXNDNZSXhtRENOS0tQdmhYWWFFVkdtK1hhZ0gvNHVxWEpRTkZ0QWdQU0xKOSthRnoveVZtbzN6NVRpbDZVaWtMSlRiT29QVFdOb2kyTTllb1BRcGpFUmZ6bVNFNlVCa01KWGU2Sk5lNUIwSlI4aVRqU1Q0SEFlNDk1M0VpMHNVc1dNTFRDVXZXRDg2Mmp6TFNoRGZLUDRRMWFJYlY0MStrTTRZMWVYSXV2NnJsa0FYT3lDWEdnVkVyTVpnOCtqaDZQaWdoaTE5QWxqS09SdHlZN016MzBDZSsyUUhvdlVyWG5tMHBydnBJME5HNnFpOGE4Y0hsZEpadWpzNVdtWU5VWUozVGpKbkpoeVV6U3BrNnJ0VitqUWdWU0RtSTIxNGpkVVNSdWRpOHk0dTB2bjJkWFRmbzZxRjRFU1F5MjhCUmZkNW0veEFLNCtlQmFsbHVaSEw5c3V4b1c1NkViaWR1OEFSa21zRTU0REF2VmRXdXlEUkZpZWdQY0NzanBqZE1BQS9VQTVWU0RhYXlsSHkrbWhaTzN5MkNZMjBXT2dlNDNZbUswVTNISDBrZDJPZER6SzA0TThqNVVUV1JXZVZaWTJ4T0RFUlk1UFcvTytBbVhvTFJma1ZkZ3ZVQWhpeE9qRDFkeURmb2dqT1VxZm4xWnE2dFBHTTN6SEpBNSsxT0QrZlRveUMvSHhUaG1DRmFLcmtwVTIrTHRja1dhY1NuNm83N3RBYk0yaHZBczI1Qzk4QWMvZ3o1MExzbEhEejEvdzhqaFljQlc4U1l0OER1dW1DOHZXeVE5R0ZOeDVqR05QeW5KOGJKbGNRQkRyMzJvcEt6NnRqRndjY295NHJPdlE1ckhibkIyRjg3U2ViVzVNSUxuZFFPekRNVmpZMEpGaFlKckNaekxFR2Q0Zm12ZWRrQ3dCTG9UaUZyVlRlZ3VUUmxJL0orblNqaCtvUmlrZG9RVDhMcWlHeFVDcGZSMkdYYlpHeVd4dWRZUERPM3hyVmg5Zm03YklKSU9EY3NkS1gwRzdZVXg2UTBrS25QTE1xWlpYdnJRLzJrUHVFeWcxTjIyZjU5MVhMQkQ5QXRjSlNTdGs4Y1RpemM3TGZuYU9NUGlYY280Nk5VYkZwTnJMUEthMUh5MFlhZXlEM1BlaXRSM2pEMkFwT09hQ3cySUw3bEZNTituVjlha09rMFlZQmVTMW1TOHE0eEVFQzNSNzRQUktzaWU5U3dWV0VENWY1a2x4dnRYOHYwdmZWb0QyVHViRW1Qd0l2cWN5enMrdzY5K3Q1ZkRNYWgxemxEOUR1aDF1SjZBUkI3RlIxRTMybDBseFl2Mkd0Yk9lVDFrODVLcGxSR2FseFRRWXpncVBsaW5RNjFuaUo5L0tZUWZnenV4ckNPSVN0aXhFSkZRcjk1eC9EaWplYUNXZWVXNjlFbjdmQ2NWUEJ0TGNHYk1odmRKOUx5UGNsRVJ1S3VkMGlGbTdzMjdGZm5ROERkN21IcVdyb2xsU2NRRXdJVGpxL1FBTEVsNVJvU2s0MDdJM2tmbGQ0UnpRdnljOXhhd0RSTzhLRHJVc2ZCVWtZdjl6VGJsNld0eDhNSzNQa21Sbm9oMTJJRU1GS1o3MmY2Vk9hOWJIbkNEbk5NazRsUkRCUWFMY0N2VnorMkgzN0JnQ09yTitvVGwwN1NmakxGUlFDQTN3TzBaVjVoemxiZkZZMlJYc2NJTU1FcmRXdllSVWkxSVZVNzZNR0FabzVEN21RcUFwOEt6MXNubzJCRWZjVmIxYmhjcmVZMFZlVkFFNk9odlNhOWVGbnZ2YXlBdHgzMWg0VzQ0OFpDb1JKKzUvOFV0Tjh4WXNhWWI3YkIwdWxqVEx6akpwc0NOT0s5VnoveGJWbVd2N1lBRHhLRlFzdGdZRHU1aktaL1U1aW0wSUFPVU50UjFOQk13YUpwYmw0OE1WYXBaVXhXWlU1Sm51M0ZDVU83NjYvTE84cmVnQi9wdG5zV3c0Y3FjSmNvcFEzNFlHWHVyTkRwTG9NTEpKVk03Ri9PREh5cm9ySjBFcGNPTEdSY2xjNmRIUDNFUURSeEFjempja3hrRlJMQUF1dXNYbEsyZ25tckFDTDdwNkJTM09nTjJCWUZFbG0wS1BuckZrd3c4Y3lLeWoyZlRmdHJDeDdVQlNpdERQaDY1M3pmT0VHS1Vack4yanJmd1hNdHBwMGdLYzB2bk1wSGpaTTVIYzlTUis1VUhXcUFCZ3psU3poUHBMOUkzMEFTRUd0OWpVU1dEa2F3azk0WHZKZkhzSGRURHF3b0ZJT25Jdmx2RzcwM1lBUy9DK0NmeGtCNUFkZ2lac284UXIzSXBRdEJrY1V5aDVSRDRHbm9lRjhnZWw4RFZwSmZHL29kcDZDREVLVTlld3pYUG5XN21Hb0FOR1R0ck1PVkZXV0ROVGVaa1U1eTZwQ2krZjZseUhaZWlqNmd5REtjWGsrKzV3c1FVSDZpOXhOWk5EZVpyendOYkl6WkhEeUp2NFgzc2hYNWtpc09xK1BEc1JwUU1CYmxzTkJVRjY2Ylg3bW93U09xZFdOSm5wOVNYTFhHMWZxSC91U2orOWJiV1prMFdmTUVtdFpDZUlUOVFyTGp2TjIwcWVkT3BUR01KM05mUTNjczBUYVRtYW1pMFZZYWM0ejE0a2tBc1g2WTFvU2NNdEFxYVExd1p1bXI2QnRkWThaNklKOUhDRENFZDNGbTZhajNyY0NxczZDRitMb2hwMmFkS3FXUlcxdm9oQ1NoaElqLzhSTCt3UlJFUFlpemdzdmJxZXR4WEtXTVNKYVdVa3BWanlEc0FMVURIUWRTb3BvTStGaGFFTkRnRkZ1SlZZUGtpOGtvVEFoSlY4QmY0MzhLbHVFNDJLQ2xpTnNUQTR6aHNnTTBYQmZRaFJpMmlha01jZEsrS1hIS3Z0cWJvUEVKejFnWUZaejVIdFo0WlR0bEFTRE0wNE80WnBjSE9uWVh6NHcva1JqM0xHWWN4RWowT2hGeVcyYm5HYlZWM1ZKdXFraFJJMnBPM2pVeUxFTTdyQnVlRVYvMjhkWkM5RVhsY2d3TytZa1NQMVBhd1JNaUVmM1V4Tnd6Tll1K3E1WlV5SkxsNVlYSElQZ1FmZVNobk10NEFLcnhyeXZaT3Y5aEdNek42Zm43KzZ5WUtFVHFLS3g5UWhXbDUxY0xXOEVITXJxSGc5NWZjSEpkTHUzdWRaZERzZCtFZndoQWo3MXpxSVdpYVZ5VmZhdVlxZ2Y5TTRyOE9jUDZPbldKUjBHbE10SlF2ZlJxcUM3QlBzdzdibFZ2TlNuTlBzNFdYdXdwaXQwT0R0alpNTmc1dmZQTEhWS0RzRWdvMmVMQ05GNXA0eXpwbUxBektuWWIraEp3VHozZUJXcjk3ellBY2lCTFNjbU90K2k5ZGlpV1Uwa0tHdnJMRkNjcTNVVDI5OHl1cU85ek1tWVliVVI0WjFqWEVmWmlaRHhGUDR6Qk45d1Vlb0lvV1RaQTF6S0lXaWpGaVB1eEMvZC9MMGZPRFJsUUhOazkzOVpQcjlsVnQ5aTZUNnlPbkg4UHRTZjRmWHZpeGM5ZnpMNzJLVVBpYzltazh0b1Z0Z3RWNUNVTVg3M3g4anhSV2I1LzAwS2xSb0s5S29sQ1B4YjNDMXJzK2xoN01DS0VQZWZBT1ZlNkl3SEk5dFZLdUZVVjBhenptWFZGMWFxK1d0azY1U0NwaHlKWGRpYVMwNEwreFZrcWNGQ2VocGxFcFRlemRiTjRjbm1SNE8zYUNwVmJvYlY5V3pnZzlpWFFXMlRpd1FuaTlGd2taUE5aTTZqUS90L2owZXNpS2VxcXhnSnREWjVvSmVqeHI0YUxvTTF2M1RQTjZISXFMeStndlB1Wk5BR3hUL0w4cXVPRDBxdXlOa3NNZGlTWisrS0N4MzdrS1V5R2RiODExc1FwbzR6cTZOeVJSaklUVUJUTDRqeHlLR2JUbjFkYnZoMmF0RU5vRmMwQVVqMGlMWlo5U05NVHhOdHJ2Tkxsci9KQ2xSbHhIbTJXWTUrWlZEQXhMazlic1VtM1A0TysrY0pkdG5DWnRicVhZYitQTk5oN05xUkI3dzVFeTR5L240R3lPa0paZytEQlNPdjlYR3E5ak5tYWd3VjVaUzZVM2c2bnZsSUYyMjhGVDB5eUZucHJ0cFpoYkNGTG9PT2U1ZmR4VkIvVWRjTkRQdllFdjRVbnhkT3ZLSXYveDJNMklEZjY4YXZySmozcTJxUThFbW1uc25aVEFGaXdGSmh0N3YyMkt6Nk1mdkprR3l6eEJzRWlvc25naWNsdW9ldzB5UElvLytoSWIxbG9nenlzaFcwd2VsLzBGU0ZHQUNDb2lPMHVqL0hBSFd5ZUhqUS9xVnRNUlU3UjJJZjI0NlZCdU0wM3ZuR3ZtQTFGd2Z1NDBLd1Y3UnhjdGtQUjVFaVF5NnFRMFZ5YWwzK0tjS3NtL1JiRE9PczAyT0NIU3pjM0JOOElNTXVVQkhKZ05LTVRJbkJuWXhPOElVL011S0EzbHpmVUJsb3BaeDAzdnNnZGU3WEtEb1BKSGlSdlR4SFZGYjRkdFRscFN2dFpHQTNLcmRCblA0MTJaekNtM1o2Z3AyczhNaFFkaUU4amlMbE1sQU9LbGJ4SlNaZWJ5aEhzd2k1UDdwVlpBSEs0M2hwSzUvZjZ2b1FLUEZaa2U1M1hUQjhPU3hUTEpyVXBCVTR0cG1NcHFNWG83MkZVWkp2cEhLNzBTaTVnN2szT29IKzE4ck9iWVBuT0FGMmhhRFN0Titnb1pBcGxYbm40bEh6MGRTVjdLTE1xNlAwalV2RlIwWWlLVmRNV2tZK3NqSzdVaTJGWnprUG9RQld2TkFQWUNJZGJQRUl0OVN1Y3ozSU1EQkJIemJ2Tm1wWWQrY2Q1OExJODg4Zkg5R2FoaTNJUnhia05KYitUTzZ0WjZVQ1hvR1RsVmFhUHNFUWh0SThva0N4QWNVeXpFUlhEYXg4TDNnTEtiNURlNndubi91S2JvTUpHM1dkS2dXVXNpUzVsdHduSE9OODZkbUpCTU5EdzZRZGQ4RUV3dVhqS3FJZDU5VUs2MVoxdEgzckpSWTkyb2s5SEtmNEVlOHgrWncrMDNjY2FkMHFjeXhkaUVLQVpxYm9kR3RocDhRMmFNbFQ0THpYVjd1RWkzd2M4UkFPSldneExzRldMV1FaRG9HQkJmZ3QwQ3dZZ0U2R1pvR09YaDhFdVJFT3ZyeFJTYWNCZTBPTmNKQ2VHQjI2c1QxUjY4TmxNdTJFZEVoZzZ5U3ExME0veXNYcHA0dmJobEFBQy9kck84Sm5ROUFINjdvQ2FyOEdncTlOSm1vaDdRaW52Y2ZqS1JFK01kN0xSNVRPVFM1KzB0bVo2S2dGR0toYlJCeFp2OFVxemhvVlF2c1dWazkxR2ZIWGRUQXJRWEhIWEkxcmdCYUU0c0pRRU02MXh4Mm1qY3dEdlhTQnIvaVdYeTVnTkFJeGd0WUZjY0YwSEMycXZqMmk5T2hlVXNOeW1YZFpXSFZBMldKclFPQ04vVWFzWS9lUXQwOU9lWXYxT0YrU2ZLdmNLM3o2eDh2dEhZamduS28xYXhHMmNVS1VsWHg2aHdSMGpaenl6NWFlbmxpQW9sTFltMkgzQWtMWFZFNWU0dVdkKzRKb21QZllyRkVzamRyYlRFZm1LaStXeWJGVHorTkI0Y2hVQUV5K0xFa0pRT3lMenFHMFMydTNyMCs3Rk1kSXZDTmw1UTY3NWlDcWo0ZlVPNzZrUnVBdzNaV0J1Y1c0ZkhNRjIvaEtpM1FwZ3pST3BGOUFiU0oyOWVtd2RMNTJ1WWJIdnlyQjQ1Z2xEd0x0L1RYTEc3NEdiVlpwZVM2Nys3dDJTQnhydEIwUDBhc0RSOUdLODFyNlhsdWRETnNadEY1S0FZWnROUVpyTk9vbno4M2EzTUEyeVNDUWlCb1BVVlFRQUFNUDJLam12ZFhnRjliZEFqZTRXbmxXQ1pETzUyTTNtQ0t5eW1hSzJTdEpCWmpxdTlPYWJKTFVRRmF0VThHN1REZ2hOdndsYzJuZzVBSXdsSEEwUktXWHZtallwcHY4Zks4TVA5ZE95cWxHMWpPcmY3ZWRNTWYxaWdZdUtMaU9IZExaQjNxZHpIRFNoWWZwRDc3dzFYZFBoOWVGSUw5MkRjckJ2M0JrMDNWdnY3V0FiVXVPSzVENWM4ZEFHMWRZS1pGeEQwNjAra1V0NHgzR0dCMUlmMUtBS05xcy9Vc0JHY3FoMXYwdWdTTE01SGx3N1duUW44ZXd5OW1IZnNaZEkrOTRZSlgwZ2lwNjBrcUNEMU9CcnNBT2pJeGVwRzlZNGFjcFlLdW1POWlMY2YyL0xRenJGakVXa3pBM3g3VmZ3MkNnMGtiOXZzLzJQN0ZEUnZSV29uMTN1dDJ3cjViK1ZBaU1BcnJNWEFsdGxDWWgzalNtZUhtWHRoOXpwM2I2N0ZCc2d5aHV6YS9Ua21PbjlsN29ELzlrb3FHMTF4dVJjalVlWk5GNG5LZDQ2OVNPTTVHeFc0Y1hiOTk5dnNoV1MvdGsrcmdLM1RleElBQkZjd0ZuRzZGMktyZVRQeFgyakZEL2dRTmV6RjBFY1Z2eEtrcmJXTEJyVm9sUkFibkQzeXRkeE9ibUg0RWdJRGo1TXBMbVhSS2c0OXM3VjZnT2xLblB5UWhkRm5COFgrU3gxRzh2Ui9OdzI2ZnZQY0ZBVVVOOVZVYnBtSzh5RVpZdjNTQUNBUEdvSzMxUFMvcmRUV3ZUclROM0w4VVc5Sks3N1BSdVNCS1YrSVN6R0kzN1RJZ01tTnZGWnJlMGZaYkRIaWFiamNuTWI5Vk1uL20zOHRORkFxL3Z4R2N0Q0tyajFPRkxRd3o1MmZGMFFWL3UwUWQzdVlEWFp5NTZ6TEtIOEpDOHIrQXNQeE1QUUwxVmc1TjJRc3ZrbzFIWUk0OVFWQVZacDJhTzFhWmVkZG9jenlIK0F3RTZDNW54UlRYUGhmd1ZTbmVwZzg0OWx1K1dxMjBRdzRCb2F0dERTNWQ1NG5lenhrU3FtQllHeG5iYWF1NzdzSjZ4VlRRYThKdGFEQitrTmR1ZlVUcmkzVE95elBOWkdNUCtOTmM3MU8rbGlqK0g3eVM5MmhxTEQ4TWlRbEFqajVhM0hIT3FZZ2I3blh1N2tOdG43NmRMZENLTEZJcEpVdXdQdWJOaEU4blVIU3pjRHFhMmpwakd0V2t6eW81QmhCanFoWjc2b2FFT29IekRXbmZMbloxT2VKcDBPcytQVExiWkNoZnAyTU1hZW9RSjRIQVgvOGFlbGw5MDdpeHI1SW5xZ1dLSTVzOFEzek53TzNnNWh0VWlRejNHOGQ4ZTlPNU52YTVDekNNQXVwL1NweXI5QTRTMUNCQnZJb3dtM3o5cFkrSk4rYkdkKzZLSmFIWnJBdmt5bjByL3RlM3cwVEJtRXRyOVYzSTljcldvRWQzL1g5aUZYdXVHd3c3blNjdFFWaFNZRE1RYzMzbFp5ZlR3VjVuUWxzVWRNSmV1TjEraTR5aEFzWmN2VUtPUGxadDljNEsrN1NMSStBemRBWmZlWHBLZWl5dkEyWHFscmxJWVdnTGV3cWtwOHkzVi9pcVEwZTZMNk55N2hBSnIxZHdzSjBkUmdUNndsWVJ1WndHRjFlRURHeDhmcU5nSGVDMmc0eGlGUkwxek0wRkpQWHB0Vm9pV2Y3RU9uKzR5RlFCc2ZGdDZpNm16MnlCWU1Dd2RmeHg3cTl4aHNEL2RPRUJEWFhubS96ZUR2Y0s4azFqM1JrSlZpUlRwTUM4b0plKy90cmVtWkRKY25SckZTSzNsR0sreDRhbnZmY25aL0l0NXJNN1NncTlvenJNZ0hsREZkUGFJT2RQTU9Hc2xUd2l3TWZ5WnlaZ1Y4VXdwQ05RVUoxck5JbFBSaTJCb2ZETnh5MFJWYzl1S0ZmMlAzWVZLMzViVEdlQWlINjd6bVZXNVFEWm9ydlBXenF4bUJOZmJiTDQzc3ZpZEhib1JFa01qNUhuVWRobzVFKzdYVVM2MHlZdkxORHE5RGZqTjYyVGhTMmp4ZWZ5YWx1UnpJWFlTRHpPaHdWeXpuZUhtd0J3L0QxR1E4VUpNa1QvSWhTY2l1U202SVJ1SlU5MWdCY2lNZkVFU1hiZ0tmWk9hY1ZBUTg4SytYRjRGYW04RGluS2JhdGE2cFZNMGtmK3lCd1h1a0JQWG1rS1gyK0I5Q3kwbit0dG1QR3ZDcWE4SHhsWjNoS3k0N2ZIUHBwNjhHa3pjdURVWi9EdUUvZFdNQ2VCQVBENnZPa0g3Umk4Qy9wWVN4bnlCN1dHOFpHamZaUTJvOVMxY0VLdXNzWGlGK0VmOG1leFdmcXJ0U3JIZGdLNmlyTE9nT25PaVhUcEpQaWNrRU5US2Fla2E0V2ZIdzREVlNDOVh3Vjd4eW1KaXI5N004a3UvWUF3MUtQNTFoM2tpZmZEbWQzRTB3cUNacXNGTk91d1M0emFJS3RtZkdocjVKdzV2OVdkcUxqWnF3bzEyWkFROWZrZGdhU3pWSWtlTVRGeXNuRWpqQUEyZ3lkZSt4dkVuOVg3UkRGUDVPclFGaGNVQWdNSlBIZW5iOUk1Qytab3IwdXFSdGNiNHBUSEhsYWdVUStsbXIwNDBoWVNiL3NMOHdVS2tTOUEzeUlWNUQ3ajUzRDNDYWNyT0RiekYvZmF6Y1U0R3EzL0d4SDRIMldPZ29tZ1ZwTnhmZ1RDa1Fpc0lnb0pMYXRKUjloS1FURUxlaUFzK1JjaHROaEFTMjJoRWdFdXpQWnlWNTBtVzhGVk05ZWlKRGt1L093YklweWc1RVI2SU5WYUh6emdpN2VnZ2RabFFnSHBtdDA5WVA4OGZEZ01GVmphOHNucElLck1ZbDQ1M3g2R3NFQUZJMCswYlFCSjdUengvVkZZTE9KSDJtTUVQVmZmY0Q2clA0QW5GSzBPQ2pOcEx0UDBiSElUb1Vndjd4aU5iRXQ3R0x1UG1ScjVYRXo3ZWFVWFR2VlBIZVh0Sk0vOTd4OERnNVlzSDVSOWNCa2VVeWsyY0R2dzlOSmlQN0pXazVIcXBmUGRFV1Q5eVEwUlRaRzdaZG9adDNhRitCOFpNSnVNb3hvOHdHNkdrVDVjRFNTdlluUmpqdzVSZFFYaWYzaTVLbDF0NVc5dktWRzRHczdzaTl4aFhZbTJyZ3pmZ2hDT1RieExYelFERHdXZktIK3F6TUhZTWpRejM1ZXVCTjYyWnU1SXIrTVdGeWZ4QUQrSTB0VGFxendCakdEakYyd0tmbHhGWWRyRkxFR3FKY0lsM1pqVHRnSjRwMktoRmFFWkV6N1BCQUJhM0kyQXluR0xPQ0ZPRDRjbGdrWm43UytDVlpCaUYrODE0MTcyT3JNWVVSRHN5SVl2Y1Y3YnYwdnpFSEExcFNtdnVmY2xjQTFBU1NZcjlSOUViSFE3MEs1WFRZaHk1bWJWVmQwMHIrem1yeFByeGx3WjlITXZOS1NQU2IwREVZYldLd3AreDRQT25OdFl3dUdMQm9HcGE5S2xHTWxYVjJVaSs2QXNydjdIUWlaRnlJakIyb08zcW1sclhWbHcrQ0oyRmdiL0J4b0NmakdEbkZvUFJwUEo5QVlFdnl2SGFBTTNUb1Y5RGZnNHZ1ZEE0cnB4VGJBZm50THJsU2dUbXVVYUt6QzVVNWg5YTRacnptK21ndC9jMXUyUDJEOTYvb0tWQ0xZZ256QTRhanFFZjBMOEZRUUtsamNuaFY3WDJqWnNiVUlBVzhSM2VBRktKMDZqekY2QjFicmFRZWRZRUd2Ylo2OWk4aVJIY0xBWFNzRzI0ZWhRcm91V1ZpRTlRamU4dStrN0I3N1c0U0JJSGpmbytnQ0ViQWFJdjlTelNmU2hTNVN1VmNYRHpLZmlRV1ViT1JmTjhLZ2E4Mlo0RlVkckwxVUxNM251aEQyVXptcjdxTkJPNThEbWJuTDRQU2hFT0d6Y0NVTE9CSXg0Q255ZFIraThtcVBDUjMxUkVRWVdITldWRjA0KzFUNC9sOVd4N1p0T0EvUXZxeGhMaUE4YmptdzFKUlFuWFV6Q1pVSFRHSE0yakdLY0JlUFVIb0Q1UjNMWTJBNHNPSk02YTZNdndPM0lWOHRXbVlkSGI3RzVJb004NVRrQmdOVWRBU3U2S0VLVjRYa3JVR2ptZGVTaGRmMWF0aHhmQ1BlY1lIK1prbE5jZ1JSdkdyZG84MndWUUJSa25menNwSUEyeGE5NXJOQW91VUxibGoxeFlvYTM2Q1RIMEl5NmV4aFI1Q0xXNlkvOVdpMzdkTGt2ZitLUnllUTVDS0ZqZmx1Y1ZxL0lMNjVrb0J5N1g3RzQzakNta3phUHBra2ozNTRxU1NXV1RteCt2dDVuY1BwbEF0ZmFnb1VwRm1hK1JPU1l6a0VSdUNJdWwvSnpHZE1OcGpDT2pLWlFFUno2d2JhV2tFeHUvSVZUdTF4WXlTMS9MQ29zdUZhcmlkUWprMXZIUmJCd2V1aWtSU295RnNqQlEzOWhkMEhIeDkrSkpXckx0STI5NTVRa1BOdzU2T0RINHBuYm1NQ0J5Uis0cHc5cDVGOFlnZytGRllYUlYzVjhlb3ZURWwrWGdzSUhnbDZpQ1JrVjg4NTFzdWUxRmU0WVpLYmU0eHc3Q3lZZ0NzYjRSNzZSTitOK09wYkM5TWs5NHVRS0JSUXN5Z2JnUm9VcllLYVlhNnh5WDJ4VDZMODZURDliZS8xaFRReFdobEhqbFhOUVAzamYvY3lyb3hkbzQ1MU5DMnF0VVA3N2pOMkZPVzVQdisybG0xcDdPMTk3Tkd5eGVBd2VhVmNZL0FLSlRyWS9uVnVZY2hzS3dpZEdGNkxCVEtJcDUwSWwvd2lXTmNTSzhCREdxR3JlUTcwckV0cjRDamJmcXVEaDc3YjRRbXdoajhWQ0VKTU8vMUVEcnpTU1ZqWmgvZnBwTWtIUXJOOTc5ekp5OUY3SVdWVEdKNk9SU01rTUlTSzRKcDk2L0lVRE0xVnVrNGhZSFd2Smc5bUxuKzhndm52aGt2aFVrZGtPNkpTNVdYY0c3RWtvU3lyRjIrVDZlb3ZqMXNIM3NtUEorK3VPejlRMmRuVFlDTStDdjVLZHAvbUlmN2dvVnBlc0V4NmNETFlIelhseUdHZmNYbk4wdjBjMCtmaWE4aXl0ZGhVQjkxVkx4TlI4cjkweU90MngvQmdtWXVHVmx4MUtFWEd1MGFEaVh5bklUYk5wT0xQOVBTKzkwWGp0NktLd1B3MnpBRFZ1Y1NoR2daem84VCtpekNsNE5hWjMzU2VpM0Rxei9yOS85YTBuMlluRmJCSDNZYVluSFF0dTgyM3psYzZqOFhzSUxEK0ErdlNwWURhWXFSRGpnejNlTzM3djZzYitLQWY3ME9yZmtYalZhWk51YjEzYWZvM2N0SjZmckYxMVdtTDAyaHVpUno4SlN0RzAwNldLVGE3WmZ0Rm41UzJtQ2N0eDNHem0wUk1TUGpIY0FGVTZsZzk3UzNwaGtvRUxXQjZTeGxHalphdW5ybGZJaTFFOWl1WGd5b1dwLzM1d3prUlZWS0JBTlVHM2VsOWlWR1dVSU9vYVhYcGJlUG1nZG1FbEwzRVlkTjRTbkh5SUdZS3RzWEVCa3QxaTFuUDlzUktMMlcza3NvUVFDSllZTVpoUTZ3TGhUYmNxWlFGeDRBUkVLK3dDQ1RWNC9QSU9RQTBKL1pLU2xrVHY1S0JNOE1qRTkxRTB3ZnpyTytYMEw2cnBmUVhrWkw5ajBvRE91Nkg5UkpLQ2VNSkhLK3FIdWhkb0NPZ0JDdTFFQVV2TUkwOWxEOFhiVEcvVXdxR3Mwb3BtLzFEc0RkOHVYQjVOWkVZS1VhejNPb0ZsUzg2M2NnUlFHV2h5RE5KNFd6ZS8xYlIyV0VScnNaalpMc1JUR3BUWXV4NmRzMnpmQXpuazVxL1MyQ0dZMThYcFdESThYUDJ6OHkxSFNteVAvVU1VWjdXNVJpSFQxbkR3WDVPYnFKTXVyZzVLRVpiMHYyaFR2YU81YzRvTlN5QWN5MkdRaHVOMG1xQ3NnYVZVK3hyR0hxQjRJVGh6dkNMMEY5MWlZRngyQ0Q3Tk9ZNGFOYXlUSklDZ1FXUHJHS2xPTGxPdGVVemJhVndFYzRsM0xqdDhlbnhveTBodW5tV1VOcGZwdFlFek5oTHdmWUNxYkpKUzJlMGtRUlZmODl3a1Vscm85NS9ZYS90NkI5Y3NOcEdld1lTWUttM2ttZkhvZExaMGtNVlRCMlZaY2NIU1pKbnA1OWx2c2lldlpKZ2M0YlJrVjVDWE9sU1B1QmFCaUVjelhoREd0THZ1bkJXL2I5a0xGWWdkWVl4cnVPYTI1Ym1IWTNWYTltZVcvMnY2QWJZcWFKQXdXM2ZyRlBsbWkzUnBud3o5bzEzNTBFUmhBODZhbmFUMkFkOHdmMCtTaW9kWjRNdWNyQk1iY09ZdjZRKysxMDBDN0NKZUNSaFNCRm1QNFlQcHJ6YVlTeVlhVzMvSFFIdlZlc1lOL01ib3RvTXBRSFQzRlNhbi93dVNPT2N2clNySkg4a2tadldhclljTnZZSG1HUEV1c20rdlFtMkpmSkJrc3JROUJQMVFvY0JBZTlRcFZITFJ3U0ZDbU9HbkFpNzZiTlRaRlBzTzVzNHpEMkIzZC9IeFJGcURObnhOZG5pT2c4aUhsc0sxNVlCaWx6cmU1bDVQUld2WnA4S3ZLZXFNNHZDVnR6Z0lGTlR2ejZsblBlT3loWWhXTVVzWFNNK1k2TVNaUWxxOG83b3BIOE1wWm9lYzhzT0VEVVdHV3hheFRaL0p6ZmY1TjJLS05adXhOZlQyMHVNdzFpQnVoQ2d0enVHZ3Bjc3pqYWswdFU2RitmdVQyZVJTNG1MUG00ZlZOVzltS1FMUStNSzVQSE1UQXhRMGpBQWoybWpnUjNOSXFoMFVZNEFEb2JNbDYwOTVqSU5LRHVLRjY4WmFPQ1VRTjVqWXVuY2R2SWwyWktTQmM4ODc1OVVJOElhWXNWUk5GSDJRemg5WVNjbWt1ZkFybGhRRVcxekNIeW1rWEFaQjk0WUlMK1owelNpL2dJbEpwOGdNcXRHaXZ4bUdUSCtIRHRxOVgyNVQ5OHBzbHR4NGZtNko5M3FyWlhJcnJhTDJoRXZiTTloSWkyWGErVlhacWhtMVVJVkdDdHMrOXpsRXplQmI4WXhqaENDVlJZZUdCaGZaYjJjMHBhb2d2aE5IMGIzRVB6OWcvMnFGaXZTRXdZdDY3aGNRdTBkRkdSYmlUSnljRUZYaml4Y3dZTHYzblEyeEE2SzlFdkkyRURobUkyZGxRajN0Zm1DSE5QdlQzY2p0R2RZVWtxNVVCYVBSZ29EbWh3K1p5VWRPRjF5WmhteHA4bWJnWi9WYkRCc21tS2ErMFdxZTF5NVMxNTFMekVJNHBrL1kzNkx0RWk5WE5ZWVdMT2tmaVBxTFkrRmg5VmVaaE9CdHFTOXo2WTdKOGc4RG5aT2piK3N1eWVsR2RJc3ZzQytuMXB6Qis2bmd3MG92blRXWi9XaXBMM05nb214b0EvdWdmRnFTRS81QnBVZ0QzenhlU3ZCUjB1T2NSWExBSHAzNkZHTTVSUUVsSkFFbXlLUmt3b2pnbVVXKzlUenJIMzZWWWhSb3AvcFBsaXQxWG5uR1VERGFaKzhxdTUvNDdtUS9jSnJVSFpyenh1T1JCUmJiODV6Wmx5QVVWZDdjVGdTNUJITXY0aWRCbVdCWm8xZFdTaW9kcm02VXE2RnJKa3FGTkRQeU5Zd1lkeDMyUmErT21jcFhuLzhrVEUzdHB1VjJEd2JhRmxwbGUxZmtCQy8yZFJhT1NSaUJZUFFMQ3ovVWZjaXpoUTlXUm5JS0s1czRjV3IvZ01ld2h1aFByZ2ZGYkdKY3NpUU1BNC82NTR4UzdXYWo0aHh0UzB6cUlJYk5VZjBUbWdZdWVSUVBhSGdxRk5RWlh5SzkvdHV6MWJWUm1WMS94cUxtNFFVYkh3eEtoSVR3TlduVVNJQXVvYlBaSmkxVlNMa1c0T25kSXJUWHFaSzBXMUtLaDArckZyZjVFVW00K1RvdnFuMmYwMmJuVVp0ZEoyVkxnU1R5eFdseUJHTjN0NE9SbW43bmVjMTF5VDI5bzZTWXp2c01MUVZGN0dOQXMvYzRWMElGV3ZEMkFIOVlSS1Z0dDlLME5qcGZLWXRlYXJ0NjhiVk9VZFpvV0JXMFNHdFN6Z2U5QjgyZCtEamoycHlqcUZwSDJxQTR2QnlEdGEvcGNPaW95R09uczR2Q1VPM2dITVpQZFJZZUo0a2k2ZHVuU0xSMWhLU2Y0SzBOYlo5SXZFU05wa3hEM0pGbEhXZEoxT1hFNFJWbEt1OGZvcTVENll3Um8zWXdiNitrckM5amtmV3dyUjM1ZXo3U1EvczlHQTlHOW5McGNaaFROSFh6T2RHY0UwNlJkM1hMcS9wRStSbHBMQmZzZkxrODZuK3UzMVlhTm9mNmZqVm83cGdGb0xxbGVXRHFxei9jaUlyMmp2RVNIcUw4WGUwU0FaMG81WkxtSjhzSjRtQjloMURwVlpmaUJnTy9YcG5KMVljeHc4NEIwcU9obUY4a05kVlRKMjBMOXk0aG4yTXZFd0VoSTliOVhOeVdXZG1jQmp0ZXhDWld3Z2t0bENRcnlYcklEUWlmaUFQN042dlplYlhRY0JZcmw0a1pDTEZVZjVzK0FjQkRMUng1eG84VG9scmgzKzBwaUhxV2svazdLbmNFZnU1Kyt6Unp5WWt5WVIxTHZMRHc1S2ZpMXQyWS9EZkY4RlBEdHdXci9CT1ArOWZ3d0owV3pkSk5acUdTenN5RTZKZFNvSEZNOXpIcWJQbERETHljZTh2UmlnU0RYd1pJbjBJekU0azkxVkFUYS9pRVNQcnp2SXlTcVAzMmhHMjQ5M3dTY2hsaWl2SWhIZTh0VFVUVndJazdoTkxBRTc1QTlBNGRJYnFCcGI4QnVMNzdGcFhrUkFJRXdWR3VVdXVEcDNHVjJNQ3Bob05aWC9QaXRib0ovVHhDVngwUWVpUXA4bHVKRzgvSU4wTlA0U0RBakw3dk1MMUt6YXpzVENxV2FvUEtycFRLeHErVzlSTDBVaDBsWWFaZ0FkWHhESFNqUDlMVkVIVTgvYTB2UktxdGEyTDYxcklUQ0VCL0FwVWwzd2JxbU1hRk9xdE9kRThrYnM0UkhDS3JVNmxHQnpCd1MvS2gxbzBFRm16L1JHQktsRjR1UlZ0RW03akxXQVRZYlQ0SUlRSkxwZkVqbmIrOWRGcUNuMVc1dXpEYSt1NFRaZmsvN3VBZk5GMXJwYTBWV2ZPcVRuamxIMEtDVW5UdVhuLzlpT1FQUGZvczVweC9qL1dpdzdrSC9BK0VtVFRIemxocnRTZkxncEZOK243ZklNSStMVFB3dkNhOXphbWlhYXZNWkZiU1JFM1E4dDZhSktyb2JQZmFnVnRUcTFyczBPdkhYTjAzN1NBS0Zsc1NWSTErRVllUnR0WXNJU1hYTVVIUUNzVDYyRzcxMlRNUEMxZ21SZjhxUUFhK0dlSncwRnptM0RrUnRVVEhZTm9DRy8wWU1TMmFhMzlOVjJtS1NyTC9JVHRmbXArY3pWNG1jNDZHN0IzSmlvanBlYWI4L3dMbUpkSVNiMUFZT0kyRG1XSHBPSnJ2Z01zYnJDeUxWeTEzWm9OaHlTbWtJaWZUUTk5NlBEY1B4SUdRT2ZWOXF3QVcwOStadExxSmZ1ZWZaQW85MG9aYngrMlkwTFZ2Wmdwc1pJb2lXZUs2OW9FdnlWMTg3NDVOdXBWcjFtNkh6bWgzdGtURzNTT0EzMGtGTVJNYTljc2xoZVNuK3YzSDBtS1o3OXFkSElDblNxempHelRjY05kYm1hL3FsdU1ZcFBZMml2VWRMYTREa1hlOElnRzd6M1dvcklzVmhpS25sUGFPeHhpc0N3anhua2U0V0ZTcVQycnQ2Vy9sdEp2QzNTcElnT1VETUpyWkhoUWRReVg0SGJ0VzhWTnVTdENrZmVjQkRjRkd1WFVCb1AwdVpDZzd2UEhXZFZiNGhSVW4zQnpKckFlV2xod0FqSnFIZGhVWlM4UlJpM2xuY2w2NUZlSjQ1NytBZ2JYSC9VZTJyL3VscDlQbXdMNDM3YjdVUU5VU25LTSt5UStMd29NMnp4dTlMKzVnMlEzakNmdzR4VmNVQ01pRm91QmdHQUMxNUR6U1NmQWtSUlR1ZW1oRWgvRGM1RlUwa3RoWTl1aHI5a0N2cWhOUTJFUDFpemxVZUhONzluRmlnckdwbjF3eHIvSldoa2pONnRHS2kyaG91d1FyTnVwWSt2cW9NZnJ2b0JtU2FVSWlIZHBna0ZjN3ZEQWJGdGhyRUlqUW5FVEN0OFhZc1dQYityNVdzaGJYbFgxZUoxV2pQeXJJcXI5bm95bmpHUUFTYTJuQTZyRkdtMnJLRWxwRWhBakN2Y2Job0cxQk55NmlzY0JUdC9QZnE3dGNjNVBFQlQ0bXBLaEpmMTJuZXZBRmUzUEx0eWhyYUc2NnN5NDZzdzNkVXJlVG9qalhFc2laeXUwbEF3aXFsREtjTDRQbXhwNnV6Ym1UWTU0Z2ZoeCtBSkU2bjdhMmFEU3Zoa0JrTjUybFF0OWxlN3ZqcHE3MHptN3JteUJ6SzA4SlRJa0ZoSEZXOW1LM0JKRWcwQ0hvOVd5Rk4wVTloY3hRdGMwLy9Pc05HMmFDc3Y4ZTU3S2hkV0JOenprVUtSV0t5dWhvRjRXQ3ZKTlp6NDlrVWZOZDFZcDNxVFZBTU1ucjdXd1F0MzdDL0ZUUjN5YjMrbEJiRHZaWUE2ZzhRMDEyV2xma2JEY0M2NGxaTmdmQU50QnFab1k4VU80U2JLcnFadGg0bVNjTys4azM5cmxSVnc2Nm1FN0tMdWhHZUZZM3ZXWjJvWnBnNG5mSy9nTE16ZVJ2cFloM1Z5c29OcitYRVdURCtNdm8ycWVhN3V5Tk5YVDJiR2ZhdmwxbGRNdnllcXFMRWxldW5lZy9rbkYySTRnelpmZlZJTHA1VzAzc3BNZlBTZ3Z5MHBzbHZ3R3MvSU5lUCtBYkhKeEM1VTkvdXF5alkxbVR3bTFocjRJVEkxaUttcDNrbjQrREZMQ3hOdWYyMHNMbGdGMFgzekE1TVpUQXhDT1NacklxZVNpOHVGR1Y2VFE3WTJvOTVndnBXMy9hdzhOSHl1Q29qSUFicDJ1U2lBbEZPMXRTdk9mNmcxejVpRVJROE1odzRRb1R2Y3R5dEE5RUprVHRuUXJ5MWQwb0U0ejJUZWpBWVZ2MWtNRUgycVRZUmc3WHcwY3lHM25FNytSYjd4czBCVlhkckJibTdqb29Za2c5V29HSE1JU0VSRkFNNmhpOURiYlZMVXJ5UlRmUWdaZHlyMWxIOFI5NUlSNjNobFRKWkc4OTBzMEtiRHo0TFNIY1R6RGN5dmxzMG02M1V2YXU1MFdQT2t6MDdDNzk4MEgvSU1mVjQxMCs4Qk5HUmhHcitWVlJ1eUNBWnExVmE1bEp1ZURBYkQxNUlUa01ZNzVTcllyVktOaUZCL0pqNkNGSzFLOXZtZnk1MGV3eHAyTE4rVUNNQ2VKaUdvdWpNYjBPcmhnZFRRa1BZNU1ScmwxK3dsWm9lSkdaY09BTVhQd041ZjBjR3psRWhZWjBNMkdUY1VQcjFBYUsrcGttWkJjTTFwOHNTZTh1ZGtkSUsyS0xwQ1c3dzNlWTFaVXgrM3dQcTRMK0dOODFJbkVIcXQ3cnEzNWRlYUNRUHZDN3VpeU5aRWlzK3pVamVkQ010d0FzNVN4LzZQSjdod2RBU1NId0l4SDZseFh0MTEzVWFBWXBKNkVvMDVXaUI0R0grRFlEZUd5SzUzZmpYbTlGV3RFbjVjK0c1anV0TVdaV05MUnl1aUwvSTRCazhCZm1KY0ltWkdOK0YxajUvVW1YcmxyeWlZZzR2eUllaDREQktGUmVTS2Q3dVhubVJsTTc5eVRJYUxvNHJlSC9ldkNaTEVPaHYrcElybkJjaXVwU0JTU25pMlhOY2N5SnNrN1pXSHJvNXJNWk5HN2hIRUVEcEo3SFB3SXZJdmxycllaMkdUb1FzaUxWYjBwNFlab2duU2xCelp4MGhQTk5sUno3cEk3L2Y3TnlLTWlsTkRZSDAvMURNL0tKb1B2MWdjTWZONVFTMXEyN3Y3aUFSMTVXM0JCVWRCQXFma0lZZGxZUEl6ZXhBRUQrb3hqcUozZ2ZhUkhoUmR2eGszRys4bUg4OHlnRzdoZFNuVkFFbEhQajBmS2NnR3lIVnZLU3laYVFxckRKVndYTkZ3SWEwZDNxWlp3c0xyZGJYL3dOZDVoSjhaZHF5clo5RWZlUXl4ZWFzNjNNUm5kMm15YnBRUnlvZ1pJais2R2pZdU1ubFJnVjRQRG1CZEhsQjVaTjlMTFhlQVJZb1k3bkorMnpRY21xNXUwUm14cm0wdFJPNDV1SmdPQzh1dHZ2SUpFVXZxMjYxZWk4ZmNvUDEvaGR5UDM5eDNoM1VNWVJHTUtsYlI0MzFPZDNnZGpsUmtPOEtVWG1aREhnNVBhTC9ZVmRCNVFXOHArQXl0RU1oSW8zTzZ1Q0dRY0o5RHVyRkMwVGVMazZTaFAwTG5COG5xbkhVMkVqWUx2eW93ekhZYXMxUXVpQUZSa2ptT0ZtTEEvUWF6UnNudks2MW5qNnVvRzg4bVljeU0xNnhINjFsNEllR1d4S0NrUHVJRFF4UUl6NFZlVVJKbmhmbzBEamJqTHRTM2EvZ3F5T05QYlJrblZvaS9SZm5hSThjbU10QWZra05wQTd4QjV3VnJDUVBSNTljbGVCdUFmSEpwVnpFYzI0SkRUR3IySHphd1FnQkRjcjBqdmxwakZxcktXeGEvOVN3KzlNTndzMFN6N3Y4U1ZHOWlPem1QVjJnNldLTENIUi9UYTlRL3VqdmF4ZmZMOVpENDh2bE1DT2c4YmorK2xLbCswY2FZZDhlcFlldlZPMTB1MXFhWCtMREhSRDZJRXQxTm1vNEsxR21hTEM1NUpKdWxMZTUvM0NmZnJIZTVrVHNRd0ZiWldyYmV4cWtIRXJYeVM2NmJwZ3Z2UWdnRHZTSnl6RDdaamdLSUdsNXovVFoxYkJ5NkRqclUxQXM5L0Evem1Yc0xxdkpDZjVOY2o3TnMyMkowMk01T1BSTEs3VzAwNUtBMGFZbE1nYVkwRkVDMENTNTFFVVpnWWNaU2F5cjBBbHdHVjN0eWpockpIZkRXcks3N0hoMU1GOVd0czJtTnp3MEEzMUZTdGpHQXZpNXdQSEsraVpCNlIwY09PeTlWYlVTNFVFS21UNm5iY2J0K2hFczdPbmpKaTJmQ3dVZTZtblZBNm56Q2c5dkwyQXlHeWdrRUxIY25NQWtleG5kTFF4dkx6V2JSYWpkODY3OEdHK0lMblZOcU5uZkV3b3VCbGxCU3ZYOW9uNVdRSWVUSlpIVXd4UmtPQkkxVCtoODdVZWErRUZTWjkwL0Q5N0lTWDhyRUxrSGlaa2NrcUQvVVkyNExEVHVmWitiOUhGcXZOWUJhdnp5djhWRWJqZEg0RVhGRk1XMk52UFRFd0wyRXBOQVRtZGlvSjhMZ2ZENEtGbUFHeUJnanNpSEhRbW1jQlk5dkZTUDdHeGl6MzFDUlV1RiszSkRvaEc4bWxzKzVQVWR0OXhQRHN0MVZvYWVYTEdacGs1VVZzU3FHcmZMTnpiYjlUSXF5d1JVQUlodmxRd3VzOVRpVlkxUjBOanJFQXk4dnJCTEVLZHk2OFh2aWZudnVhVlptOGs2aHYvY3dkK1lmY2wrQ0VEL0xENUYxUjRITitoS3pYTzZPSm5UUEdFSjU0SmljeDVLRnl6dzNoL3hVYm1qZWpqVERncVN5c3FBRXJwMFhZWUd6bS9IbXJ0OXJRZlphRjUyRSsyTWI2VGJjVngzL0xXOGtsdmhsRWxhRnRJaVZkVjF0Zjh1TngrQUI4cVFVRERlTnpoeE1HRnc4ckpHVGQ5K1Q4WXRtQytqSm50TkdLK0JFNzFBNmJPVGdudUtyWjUydEt6SkZTZDVtcnNsMk5zc0RpWkdjTmFnTXlrRUhHLzY3ZEhQYUgvYjJoNkhhZzl1MW1Mc1J3MzdiUDk1dEFtZUEvTDFkdUhRU21tK3hLMWtNUUhUb2w0MHZmaDk4UmVSUFBaeEZQTmdSMStLdStIc0dMWlZPYnpKT1AzbkQ0Mjh1WkRsWGlJUDRBYk5yS0NQSE1EQ3JVOFhqKzF2L2xaQU9oeWJyMkZ3L1FqYVcrdUc1Q25Gb2Y0blJwYzM5cTNydFhTWHgyYUtvNFd5Tm1HcC9MT3VjdCt4VEIrVlY3ZjlwbXVJc3ozNDU1Q1ptOVFKbVhiYnFxRFBtWHZEazdINVFoeEQwUUIwR05uZDFDMHgzTFYyVk5pQ3YzUkRzYjZWUUdsd3FnLzZiR3A3K3gwd1E5dEh5MjFlVEZYU2VvQ0FzeVNQRmdYUEx3SjJpQnZScTZJNXNCL3M0S0RiQnJLVTh3UzN0Z3UvY3Q3VURXWThtdmpzd0F5YTFjYitVMElzMHFoMEp5NURDSSt0OFRFY0Y2UXI0Vmg1VEZNdElnVkRlOWk4Ylo4eE9GTnRHczVSZ05XWTc5amVaeUlDamN4TUM2Z0lwdWJtdExZSjA4elZLdG5CVVBFcXNhaXltL21PSi9NTk1iT1pFT2k2Zk1UTHdlMGVIK0Jta3FPMXMxdzRONmtocHpnM3lIRzBHck1NQi83TzI4Wnc0T1pJc1p3TnU4QmVCeEVCeVJObnRyR3FYc1ZZTkNDZGp4ZUhteDAyZzZJVUhYVTg4SmxlTDIwZWgyT0haTjlqbTdLTDI0ZFV1UjZIL1k3K2RPWEV0dlY0WGMvZm1ZZlNXcjBEdXV6aHppYVdHbjdHRUFRTzFZd2dQSEU0dWIxaUVab1JqODZEVDM3c1htWVd2OFc3bmhiZFpLV2xhZjQxaE1JeGRrTzl5Yk1haE9DQ3A5cU8rOHlOeldnMDkySWVBaGZ4L1Q3VVNndkhQdktUb25DTkF1K1RNZnRMZ3pCeDZzbDJiNmR3czQ0akpIRmkzSlE5aUZPMVV0MFltTWY3bVZxTzFOOHBOc0poTXZQazBvR0t1aHBTS01NbG1BSllCR2x5bmhzVDFnVnBvK1RDZzFHekFjNlBkZ2hGV3NmUnBob28vMUVHZWFqWmQvVWVYenViQmVSWW9rSnExS1l1b0F5NHpicHNsMUlXVkJTSUdVaUY1SUtpVG1veE1CQUQyc1lqU2hxcVdHK2hGODJFdTdLZ1ZJM05UeExjeHpWMmVzVVh5Sm9kWVlPK1ZRd0tyTTlFak0wVFhOc0EwOFMyekwxYm5hK3VIRlZVWmFzWW1zWVVvR2Ntc1l6cmRrQW5VQ296WWllaXdNeklQck1FOXpTSmZnZUgrR3JxVi9BNWpjM0ZjenI3RmhaNjQyc3ZSbHIwTWJic2J6OHM0cFF3cXRrMzliUmV1NHMyeDl2a1BMZkVJTEhYVlJzeTlqME9hTTM2RlA1WlVxbm5RcmJmVG4vZXA5c0N3VENYckZPU3JrTlVnek5zSldLUmJpZDdGc2RvYjdQWm1ncEZZdGx1ZGNhR3A2alZFd0FlMjBhTlBKa3U1bFpVL3Nralc4R1hJWE1hRFh1M21reVNwdHVubWNNUWEySHJTeHNaR0hZbXR4RXZqM2UvWWVnc0owRXlzNHYrcmw2ajlka0hTUXJ6SDZMVkY2NTZTZkVzQUxFN0ROeWNWUjhRN1pSNnRjbkhtc3VNeWs2d0FvQnlpUjVsOW43T21nWHBqTmphNUJpc2RMZW9DeWRuRzIzQzF5MEw3Wm5JY2lNRjJBaTNzbWQ3c1BpOXlBTWxmTlNzNllXRUhOandNK240ejE5c0VYbHA2Z1cvWVd2cE5OcWYwOWRDelE4NGZBb3ZuNWxrdUhyQjJlSGxlWlp4MU9FTERoVnN0Q1FVSC80WG9BR1hEYlJqak1PM3dYYUFxbHJvWWQwMDVXTDVxbHNKRUdQR3hDeUZPMGYyTUtQNERZcnhRZDZrdldnTDc1YUR6eXJPaElwaGJUT3NHTGZTZW1TN0h2blBHdW5xOUpEQUE0N29uNW5QQy82OUJ1cmpBbWswNjFxNE9yV29zRTlacFhPcnFwWUtPbVh2UHVKZEJUK1p1c05UZWx5TDQ0UlNEMlFySlJGeWZuNzgybEpNR245SHJnZi9ITVVsbzlkR0UzY1ZVL3dWdStxTGdZNTlEM0J5VS9ZU05JMnBHRFV5eUZ3QWFsUmJLWWRhZ3hsTWdHem1zV1ZBelc1K05IRXliVFE0S3RoUGNvd0dUUkppMmZsUE04MVA5b0c2WWVDSThxcGdpSEx6WXo3RnJ1eWNnV1pKaVpHemtHMU8zN0VnMlI2UDRQd3paRExDeUprNlhIWjRUdE5VRy9NYUh3cGIxUmRIS2dpcGg3MnNwbzFzaTFybXZWd0l1WTRqM1RSOW41RVR6a0dIR2xTcGZQTDFEVzFzWjJ2VEc4bklVbWlxME5tQmJxaUk2UDRoRHpDR3NtY2wycE1aTlRnQjFXWmszdWE3WjhyUzJEN0xaeHJnS3BFbVhNOG9hS0x5OGdJbUIyYlRDa1dBVnA3Rzdsa1kwVXo3Tkx0YU5IeWx6YUV0VXA0Z2dXdnQ2Sjl6RCtBU0E5eEZnYzJFdkZhdkl3MWxxc0lKYWUzNTA0RzFUV1BvMmkwamVPWEI5djd3cjNSalZkSnJuNTRsa05iYUltdnJsU0N3TURGSjNMNzV0ekRqWW1Cay84STdJRW1nVGgvTVZNYndRbW0zbEZJblVHNW9PVWxtSjRyc2tLSUxkd3k5ZDlVazdibjVUZENRT0IwZkg1Q0tzbzRjT1RBWUZQMEFMUzhsN2s5Y2JjZXp6TlhZU0QxNXpiVHB6aEFvMURrbnlZN0lRamNpU284amNyTU90TTFhUjF0NSttODhRVm9PZTFwd0xtUFJyanZiQ1Q3M0NDRjJScExoSnNZa1FNeUFadW9xcmhjYm43ckdPbkxEcFRWcDdqZFVjSUR1Mkx0WVZROWFocWFjUzRpNm9oRU9WVDhhM1lxYXBFOE5rZlZWMjlyMkxWOEdDcjA3dXh2QTFjYUJqY1M0eEZqazJYZEROT0J0MmNJNVRRKzZpMmgvTkZDVmdCUVRQempQeUtBNkw3NlNVMkRiem9pa3lwOWttWUdmN1UzRGJFNFk4UiswMWRhNXp4aVBPVHkzNVQ2VTlTclRsVlJ5UWhkbU1paitUcW9RWHdicTFqVEpNTEtWMjVIaXMxdDkyd1p3bDJ2dlUxQmgvYUtUT29VdlZ2eDVaK0pkVHFYNmRodWdLNWdsMWxvbG1haTNlbjZCY08wUVMwdlZ1c1ZaQXViNVU4dnltUFd5MWh5azNja3h5Q3FhSW9XSVJOK3c4ZDk0V2tLR3NmS2RSL0xnQi8wemxkSmN1VmE0MDEzVFlGNDZKS1RvUEtna3BpQmNha3hXcDQ1YVpDNUY0RXorbTZ0dVVxT0Zza2tDVUY3YW53VkNCMWxSYlc0UTd4azEzOFJ5bE12Z1NXYkFLeUdvTm1keUpoZ3BDTWlpSkhEZmU1T1RKMDJRM1BFajMrTGhrbm1rbGh3VVpIN2swZWpZejFuaDA2dTJPb1c5SHBSTFBzOXVBcjljckhYY3dQVHJ1bi9XMnJsVk1jMDdySEt6WXk1bUkyZzlFcG94SmJxWmRmSytVOHZqRHZwR2xVMnhFQ2RrRHk1cVkyMjhMenRScmhQdVNzZDkrTUY2eTdDY3F1RjhLV0VidlV0VDk3dHBPVUM1elBSRG5lRk1pMXF1dDZRbGlPMHE1My9YdUZsbmRMVGFybG85YzlWS0hEeDBNRlFldy9GZDdQaWNQVGsrWjNHUUVhUGR4VjcxY2s2enFRTDhGQU9ZS1JaRk44dFBFY3BMSjBObExWWmRkaEJobUJrRUdwcmw3TVM2bWtNYmFCbkkrbnNtRFhjUGNpalFFOHNobjFSeTJHTDNwTE5BaWdUL2lDa3crdWRKL2kvdDE2SmRnZ1BjSERFbVB1TlZZUVcvZTBVd1hkaEUzSXFET3ZyMktUMzdOeFMzRUtHdjBuekZUbGdlcmoxNzVGSkZuNkUyUUJ0NEhGTEJjdVZ3Nk1mY3FNOFhTWlp0RTQvOHlyWCtGaXFiQ053U1ljaHJXVVNtK3AxOEJsOHVDNHZzaVBkL0w2VzE3MHphRUZMMC9iUm9qVE8vdEtweVlISXd6UW5qSnQ0YWFxTjh0RGswSVVSWXJ4VzcxeCtaRHVMYzZRUFl2VVZwTDRna2U5RFNzeDZOMUVrTWoxMWxsRmlTeWhJR0NKMnROQWtMOFJwNlBwNnpML003bG5UeEtvVk12TFZ4dm9JZ2t0NWY1dit1NnJUT3N0SEtMNHZUdFpYblZTdnhic1dSSkttSHVNelpuM3gzN1VlMXJSMjZhdzRPcVd1M0xDSFNUZ3RhWWI2YzRnbXBNakR5TUVpdlE3Z3B0Y3FTelJhc0x4aDhGVGFFeEo1alBIMmNtREFFRW92VTNBc0g4VjdaS2p2WkplNjdWWTdJNkxmZ1I1NS9GRmgvRzVtVVVZM3V1dUhQVjBZYmU1SU9PTHR3Rit2VU9jNjNJS0FyMzJ6L25iMWQzdWIyMWJTNWVZd3J2Ym5QeldqRElKenVWbStsVG1yVklsTzVONHhpMnJaMDI4MW1ydTlrV3l2ZC9EWXR4TWl4cEdlZ1FCTVhyek0zN2lNVjBsOFRWVWswQ3oraElSMmVMTlV2TlRwTWhzM2RxdVBuMWZPempLbGRhNEpyTko5elpQdHdrSWkvbk8vNmlEY0VFMktkUmsxUzlnc3BUVFFLZjI1eGR5ZVlOQnNFZDdxa2RlUlNYN0pKVXNZcUNIeEdqcThhM1VnM0hvUk9XT2M4QkxtVGU0M1lNbUZoSm1sOFg1bUdkVmxrK0o1Q2Y4UWpKTGJWK0twSmRPUUE4cFZFbURhVVJEWlhObVRYZTFhdXhvUXhoQ0UvdWo4Tkl0UlVQT2RCRi9RS3hvam9UVzM4WEZBVXNFNEZITE9LQmIzbExFQTBETThtVUcrT3ZzbG5QOGtORUp3NCtqb1FhSThRZGhsTGJ3dzEyeHMxNk14dkhqTVNiYVY4eUtzRmVNUnRnMGhMczFkWER0U0dxUUt1cUtLSlZSM3NjSmVWZ1d6NmFQbDY4N1lsbmkrMUZOMWFLME14YWhoSWw3akpYd3N6dWhyRkRHbmNoR0hzYUQyR3JqbTlqai9RMmtkeVhpQWs3ZG9xYk1uanowcWxhZEtuckdyRTJrM1NGRVYxWkwrWXY3ZnpiTlFIK0dKOUxZL1dwMHNVUkY3YU4xZEZiMjRqME9vcloyblYrQUFrT002TlNnRjBIVVBqclZrY1h0Qzc3aDREQ01BTkZQTDBROWtudzIwNlNONlowV0oveVZZa2dGWm40cHJYR1dNUWxUQk9HLzFLS0p2eFBhdDJpaWM2VlZKNDVVZFVLUXNmSnFoa0hKUmRySmVmK2plUDAvNW50UElTQ1F1TVFYcnVrSFBZcUJpTnB6L016RTlUZ28vRzJ3d0tKTXpUZmI5TE9WTmVIWE10VmhWbXlqcUpZUGQzQ1JvMCtKcGp1SmdqdXNYWVRKRU9DYlZNTnhKRUF5UGMyeHBYSks3UitUdU1mNzY5OXk5eGdkajdnM3h1MUNqMVhHdTlveGd5Q3ZNYUdwZW14SmtFS21oSDdxQ0NLay9iYmRLM3E2TUFjNmVpOGNWakpqRi9RaGJwMUM3Vks4b1VpVnpiV3dQR09MSkJ3ckpYeEt5bSs0aXorZUNMUWMyTTIydVVvVCsxQS9ybkpaN3pkdWloUUZOVldFa29udVlCUUR3cjhLQk9lVTllZ2ExSnBRMVpQTnkyY1JmdjdleS8xVStDUmVOZW1sdHE3bVBIbWJpUnM2cVNNMkZzUVdGcUtoQnVWbGN6QithNE56aVNrNVRybEpqc0V6RzN4T2FSV2VSNnY1ZWZodm0rbmVZeTJ1SnRJdXRmeUt3OUVDWDBCeWJFRk12NXFyS0xPMjUwbE9jTkl2S0I4Qjh2WGZXK0FtWHZFT3dOR29BbGM5QkxKdk5VZWw4NTRubE5VM0ttbStIM0RZMXJRcnB3cTlzZnJZMEk5NklpZFBGdW1aWkZZbnd5OG43NFFjdXpWSHJORk5ROUF4Q3h0a0J5YWdsY1VBZ1hHTHI5WEwxSHh5MWlmV01aSDcrS2UrcU1tREJhcE9IN2JTTG5SRm1uV2ptNFZCc1k2S0JKOWx6cS8zb3BMVm1xdkt1VlFIeDVvL2xCQjJ6SWpnWjRDaW44M0VuZ2tESjJTMm4vTUJhbWg5ejFWcjQyU1VJRU82ZnlaQ2doSGhqSkx3NTZsZllVcE1KcmVMOHI5b2dKUU5RYno2SFdHaUp5RTNOcFZhWWF3RFNKeVdwb0p3UXVUVWpneDdJN0JpQ3lmMzhPNkhDOFV1dStKQ0xwWnhlUGk4U3REa1JqSXBMSlc5b2drU25iUERsYjcycGJUV2s0RFdobnpWUW1VaDFJU1B3VUc5ekplS3d2WTF5eFRIdWMxK1ZSdEhtTjU1T29lLzFhOVBMMzdwanJ4UlYyQUJTeW5SRXBlSU8zdjcyRkZnS2xvS0I4L2t5cjBmU2lUZDVBeUZrMkZTYXUzUGxMdmY4T0lRTnBJaVZKbk4yVkl2TzZieEpLMEFabTBqNkxLOStHaXJ2cVU3UUtZWEMzMnBYUGwrekVidzRBZ21aZ2RrVkhCUWI3OTA0K2FXekRiY3duSEVsYUNEY2JieTNtdVI3MEh0bmFuREFTSnpJVFg3UzFSZ3p2bVcvQmVPaHArb24xKzlWSlQ2NFA1UGloRVRCWExCZ2lYbkdIOTFWeTJmd1JXZ1d1NG91RTg3NWh2VFVYa1RSV0pqKzRUMVRLanI2SXdLZzc1dmUxR0FPbHBnOWxQeEZySHFhQ0E3ZVZWTTdwVlNrNCtzWDYxemdDd0VwUTA1VzRQVUo3OWgrVGdwWG54WmdQMkNjV0hRRGFwREVTTU9qK2JiN0xRZ29RaEQ3NUpMYUVxbi9aUG9kRGFFM1k3RS9xcEszQ0dqTHJkeHh4c04zSUtZY0hNcHFvd0NuK2Nsd0xNMVUxdU9udHA5ZVNhWXFzK0xHVHhxN1RHRWoxL1htdjBRVmtLWW9raElneXAzeFM2amRPYlkyNFZOM3BsZTdoSzljTDZtUE5iNFhsRm1NT2dvYkJWSnJaUWVUNGNSZCtqcjdKbjRpUkFFVnlBbit4NXRVRUpIOXUzK0srUlhDZlBKbXQwZW0vd1ZQRGQ4YXZDU0M2Ym50U0J0ckRoQU9BU2NYMEJGeURDR0NTMkNuWWp0c0dQQURIQkdqR25MYkFqRTJBQ3djUVgwckFxRE5GczdacXZxa2w1SGV1Qm1xc0pZQTA2REhZQ2VWR2g0Kyt0T3duWTZoQ0EwdDRYWlBEd2dIa09kL2hxWTNNUjBUTFJWL0dkWE9UZlc1bndUb1BLMGtQU2pzd2F6SXc4a0o2Y2V3VC9JZDRjSUNpM3pHQm9FUk54ZENEblZaNXRxUnpYWUZia0dkbis5ZGhkWVU0Q2Q0YU9vK0tiZGtUVm9jbGExUmQ3N3Qzbnl5VTFYRnVUMFZnRnBXMlREbFY5TW9sZEFzaWxaSDB0UEZjam1UUHFzQ0U2NGRpakovVW9rZG9sUkNqZ2ZmNGlVR2dsUTVUN05rbTFlTE83K2FyVWVtTFBqVWJCdEVIb05Cd2dkWk1vMHFkdS9KQUJ6ekhGUVgyamVtRnFBTTlXa2ExQTRhWHJuUlU4b00rOHhacWF0RjZMb2lFQ0VVQTdVWTVNODJyd25UZksvemRza1lJSDRsUmJTc2FqQzJZVmN2ekRaYk1pMkJUbTFncCtweW5FVzdZcDRxa1ZaTFd0NmNKM0EyaXkvNjFJUWRibXdsQlNQRStpcGRrS0dzYlpKNytBWkN2R3lkM1liSU50U1FSNzRBd3AxOWhzOHdURkRFNlJNNXV1TFpJSlh1YVBrT1dYMUd0VmpOWityZlBRdDhJeG9rYXRFNU5pelVtTTIyRlU3RndwYzFTOWZqK292RU5RR3pUMnljdG9PWk5sQWJleXpVZ3VteWNBdHFnc2FXRXY1enpvcGl6ekpEUXord3VDbEdFaC80QUpCOUJhalkzNVJ0WmlUN1ZGb0JKeEd2ZDlYVndJY0FXRVJ1UzMrK1NtQklWWWZhNDFPamRtV05qSitQUDhhQ1gzbVNrYnpMeXVkYzVzZEZDbEtHRmQ3Y3A5MC9XWWNaVUpuTkYzcy80cWxhTUFhOHNsK2FxS3lNMndHa3M4MTlQTURkZDRwaWMraElrZUlEMFVrOGVJY0YxcisvbFBna2VIc3BwUkxQaEh5VzNaOVE3SzlXTzJVSGxLSmpTeGt6Ylh4NzR6K3ZLK2djRDB3ajVzOVpPaHlQcGlpa2dCWEpuMUJ0ZFJCSW12ZmRTcGpsL0V5MFFLeWZHT3RpRjFXYy9lS21MK29CQVA3bDZ5RFhFQlhtdU5rNmhvdi9FZnorZEkydUF5QVZLcnJLSU1GZDV4OHRZcUpyTWdFeDBIcDRYd2dERG8rYWNUb00yRlFFUU1PandmU2gwS082b0kwUDhwR0pocm9wTWVMaFdwS3piRklMQjAyVEdQWkRtTGNCeGRmQjBjZ043OU9qaDR1My9TMkQ3V3R4YktOS3g5dmZLaVlwMFE2N2QzOXE1NXp4azVSUzcyODJ2ZE9jMm1QS1U0MnFuVFhyb0UxNk9vOFdaWVhEdU1DR3NXbVlHa0d3QzROaE9kU0oxUVVINkVOZjVjWkR5ZWRTOGpRUHRHMjBQTXA1OGdmQjlud3N2YTJBcTQvVkFvZlY1czlhOHJ2aGtZKzF5S2puUkJiWWY5T2NIbktrSlAxc3V1NVJvWUVNT3FOVDAwblR5RG9hSzczWloxMlFWc0JMVERvWStwWWoxSTNHQkpMeWdOQUE4KzlRZHBMdWxKeGxnQmM2SHB1TTZZV3RWdHljd3VOb0c1WERqcnU5c0RLVnRCcXh2WTlvbEJNN0hFZk10SHg0Wm1tUXRZSjBOOWUwZC9JU1ZEdlB0bCsvQWlHSEtweWNCY3MveU9SU20zTVQ3TjVBYzA2ZkN3SkV0bjkwV1RKUERNcFp5UTBwWER1ZkZZcHRyM1BBaDlKVDRyYWwxeWNVL2ZxMEJZQVJMdUNySStuTWc0bHVJdWJtU1BnYjY3N1lYOVhUNmtobTVnOC9WSHQrMEk2RVk1enBZUVhqUGdaaUFWR3ZQYzRvbEtYMzVMMDU1TlQrUjRsbHZjL0Y2WkFWVGZDbDhVSGhYTWNxbk9FcFFZVEVlTzNwMXFvWkhBYTB0eEUyWE43eTJkRk83dXU2WnNrSnNhc1JBb3YrRFFHVWh5eVFGbENEbmpYMFdqZm1xZTk1YmJvV256eFJVeDk5N2FISkEvUTQ1WUZEYTczckIvRmRhc1JpVlVJWGJzUjJEQ2FqRkJVc2Q4ZkRZcmZmRU9VTXQ5ZDd1SVRGSzNuRGVOL1RyZ3F3dVhxTUJUWlpObUZ3U0RwWkxvMVY5TnQrVUg2cWVZekx1YndOUCtabmJBZTFTZzdIOVRiL1ZBdU5ua09hR3l2NVZrMncwZDJGNjVmQlQ5dTRmclAzeWh4SmYyU1QxSUMzWjBMV3VqbU9QUmN0aTNEdDdBL21BcE5ZUk9uWjJCemFvZGxKaVZGUjhLL2VUZFlNMjFtcTQ0VXBmZTdwRFpOelk0WTVmc3QzbktpTUpiQXZES0I0SW1UczFjY1FaTXhISmRTSEJRQldEek81aWNzbG9ORk9BQlR2VHdaUm5RSzNMb2RUWmc0TTdpRWE1QWh6b1FZMnNpemM4dTFhVExxbU4vMmxqVW5KblFGY3BKMU8rVEFHNm5IaU1Xc1NaTlNZekNvNlhWV1Bpd2Q5UTZneW1xQmg4U3hGUjU2QXNVa1FncWU2eE5KZFVDT0c4ellTN0hHL1h3STNOK3ZHMEx3RGZJRW5vUHN6SkR2UjVLZnlFSTJ5SlV3azByeEliclJmaEZsTjREYm9tZFFBOTkzS3I1N1JNNTI5dXd1NWF4Zk9CeTR2cFo5QjlKMzRORVY1bGU2RXN6OGtkeHZ1RzZDc0ErVWdGdFlzNCtQUkF1eitJRFNQaEI1NGFqUTVCaitiMU92b0hvS3VBcmI4eUh5ZEtTOXozd0o5Ylp2aVN3SDhTVmNrSW5lbXoxN25WYWQ3N2dDVlJyOEJsbVBCUk5ycUQraW5LdE9WZGtGTVc2TldGak9KeVFuUjI0VUFITW5LUFEzQnhxZ3M5V0dIRnlaYmkwZWt5d2Z6M3pxVG9jQ1ZCdmJtcldBVkw1NnRCcVR5VThZYlRpdCtZZVptVTNrR0ZYK2o5bUx5Y0VNQWJ4ZThxL2txU0k5YTYwWmN0R2VBcnRxZHliaWFyZjVMeFY5NUNldjkvci9hSmlOMyt3dnJZSEJjbkc4dXRrZ3YwOEtFVmF6OVR3ekRsMWh4b3Fvc0RMZkVMbi83eEFOUGtJU0VGaEpmQ3ZtQkhJdUUwaE93eHBzNG03M3A3d2ZUK09LSXVveWpNMHlZVG9aaDMvdnczeVFxRzY0WGRQaDhjTWZyK2dlNFhBc0l4STlLaXo1UG93OTUyWVIrUDhtYjhSVjJ4eSswdDlkenl0WnhsUDloYVRFK2MwYVcxdmFjeWRWMGEwWGNYTnRJVkU2dVlvb2lQRnFBdFp2bnhVaEtYU2tJZXArRitNL2NsOHo3OVZsTHZnYkFDSzNxT0NrSi9jNVpsV1NTMHdkRVhIcGFUVzVpOHZidmJyN2hrMDlKVm9Td0NWRVplVDVVSTdSNnZmZmszSFpTVmNqdUtvUkd5UVdPNGNDMGRtdWNSRHp6MmF4cll5QnNONkxUc3A0V3ArVjY0K280VFpSbkhkNTQrR2Z4bks1TUdLdEU5Yzd2bkd4cVpoOEJ2YmdCeUxKVGFZdUR3ZVJ4RjNMc2NRNGxMRmJDV2xRV0lMcjNGOUtjaksxdisySXUrNUV3NU93ZTNzZERnMEgwZ2swcnpyNDNLT2RTK212L2NOdFNEcGtwcHV2aE5zM3dFaUlRQ05qdUhUcjNObEJIT0tpL3NLMXZZM1pwajk4WURjNGcyVU5BS3czQnFKN0lZc0E3QzVDUUFpVi9BekVSMGFVcFRjUkhzVWpSeGtGMEMyNFZyckxtMDVhQTFPMTFVTk54V1NmS0RNU2xIY1d6QjlYZkpMR01qRjNxRU1jSjFHNWZUSXRMREtSZGk1L2Fvd1BIVHczcXBLU3RiWWRZY1RRLzVWSndlWldEOFpWeVp0ai9RZ0Rra1lOckhhVHIxQW1tSHFRRThNWGNQYW1ndTRaTlo5M1FEb2tBbW03RG8yN1g2RXhJb3Y2ajVJQzZIQ2NMY0oxUWdXY1pHSDJibVRIZS92M2lNS21Cc3Uyc2xUb0dUTGU3SnNiY283Zkl0Qys1ek95a3QyTGJIOVY5QWhBNlFFTEttUmk2L3I5bGRnRU5QbEc5aHZQMzVWNmhLdDBVMTMyV1pKendjbEdsWnIrMko1cHpDaDZ4aWNBTFVFUjdxU3VOUGhCSXZ3cXVsVGdHaVJTVWFSMHpqSVFtWC9qcVFaSEpNQUx3SFh5cE5VeXVWNkgxdTZPNnV3MW1pQkM1cUh6VHZsZnBiaHBlTmJ3TGRtcmNTN09CdTJmL2Z1WVY1KzRNOTFLZ1M4M3FZdFlNd1gwY01FUG1TTlRVRGl4UHdIblZUUU5CQmxVeXF3VVhQaVFWTEhscXZpdzR4RnlBaTFVTzg2cjQwWEdaaDlIQkdXUFFwSjdmOTBleHY5TzhoaU92K05xRXFaeUlUZmRDVGkrK1RZa0RVYkcyakRseTl4TEMxaVVXU2lGUEdwQzM0S01OL0ZYWHNyRkF2amtoTWh2d29nUFYvT01vUUhUaDRIeTI0cmlNSTE4YkNveDFuUW1ab0wwRUNqOWpMUkVLTy9QeG84cnZPWVF6Y3pKdXhSQlJwRnNRZVk0U09Sa3h1WGxQTHN5TFZpb3FwcG4rTUVMV1ZqUFBaTG4wMEtRSHRSSVlhei80cmo4MVBjWGUyMCtIRnZ0K0FZei9UY2ZzbHA2U2NqQm5CMVdwTTRjcVJwNGM2Z3lvS2tvcFpqdU8xRFRzQkVxdW1uQXZSRDlQYVZNS2JqUWdTSEdFMGRqQlF1Tk5IQy9yR0o2MlBqeE9tMzdqRkNYL2hjRHdJNEtHUDJwWW13bVFkK3N4L2xBY1pvQmZXQVBXVjRCajNLNEM3dlRqOUxtdFhQV0dOczl6YktoY2ZEQWlyVXRPWkxHQm9NUWdKMU1UNGlKMy9ET3g2d0VTaERwQVlrdkR4bGszRFBXVjFWLzFwYVc1ZGpvR084N3NWQk11aHhUYms2NTdSTXRuckZtcW5PQTFzd2Z3aDFocDlQQUpWTkFaK3RrWHVFc3UvenVFS3E2WlltamNQL0tDT3M2UTRpdXhseFpzUVZZbXJzTVdNcjBVWHNLaWVxakVLQ2FKQW0vdFVxVXRQTVpISDhUTkU4MTVRZGQ5eVZIdkJISm5BeW5GbW9BR0dwbjdqRGFUNzM2bzAyRXpkTlFXb01HMmdENVlwK09pY2wwb05taC9BbVQ4Zmw2YkY2OXJjd0NXRm00V0ZXZU5xbVJNWklVY3FtaHhlTWVWNS9MRUliVzlQR1dtb09tTkZYU2hYTzdKZEpJd2V4eC8rb1gvaFROVjI0bTFyQ3R2SGx6d1JySG9HeHNFN21wcE5ZTk8wV09XQW15NzVkL2FPaUZ6M05abUc0N3ZnYlNQTURLYjNqcktCQzUydEdjdnNwU0lLZ01nVmhlTmV0RUFGWG5HYm9KS0xRcmRzQTFXY2FwT2N1ckxRZmFVTnl6NWNVUUR3V1FFRHNZVUlnYWsxSkl0YjNYeXp5NHcvTld1cGtPU1BCZVo3dWp6OHhlY1h5alRPRHFidkdPTU50L0toTk9xeHpkbktYcUxiWFVVdFZnUWlwblVzZTU2Q0tvQUorQkIxcFJ4TVdHRFUva3hNT1NXS2lldlF2SmNxV3NtUDUyTk9iRlZWOG9KdWphb3UybU93K3lrQndCV1ZvYnVCUlA4Y1JQd2dBbUFjYUorZG9JMlNzUkovYWZZQzR5c1VMRmVXdzJYV2E3Y01nR3FXdm5FNkg0MStJNitRR2szbDRITVRZS2JveGtGSFFWRmVoMlVNSkxCWmFIQi9Dc3M1T0dRTDRkWnlHdHlkOFcrRUc0ZFp3UGpJWlRNbFBtajFhZEV2TThjZDR1ck9WY05VUHkvOUk4Z3BMMHRwd1cva0VNaUpBUmVmOHR0T2piQ0h4ZSszdzlENENiaVZteGt2QTFWUXpOZXV0U0R2b0VMTkhueXZ6b0s1YUdWck9Kd2JpVWxlQThqV21FTDNpTnVKYlJ1UTNxNVlPeWRkVHNqWUpYQ1IwYzI5bUZYdms2NFNEMm5FS3V0bXBZTXZ3WFNUSXVJTEtJekg0Q0FnSUNBZ0lDQTgzMi9RNzMyL1ZTWDIvYUQvdjliOC84SDJGZDl2MlMvNy9mSC9oNzcvTjl2MFN2OFBxWHI3ZnI1YjdQc3o5KzM3RDc5bjJoSDdmZjQvWjcvVGgvWjd6WDdmcGJyNnZySnYyZlh6NzlYMVZQNnZySmYxZTNiK3IyOWdOaUF0TTZRb1BxenRkQlB5ejB1T3QwWjZRVjVLM2szTmRkS0Q1ejRvc094dkMrYjRsaWVXbkR2cGJ2cCt5RzdmUVcvTXo4R1l1djY4aE92SjJJL1JYNkk2UkczZDIrdzVoaE45MUtnR0lxNTZISFErTU13d3RhNy9HR2pQTzloNWtEdkJ3N0pUSGxrMlpCejl4TVJBaDh6MGpyMTFuL1JVR0hJL3lVV0VCVjBvbVNYM1JWQVhrZnZkYjVGMDZoNkMxSmYrcHhvVEREbjJuaS9IYUZTWVdwRmJtSDRDbWF2ZElsOVN6TmxZR2hlVkFTdDQrY3ZEdHQwMTc2NDVYNkZ2cHpYekU3UDF1N3Y0Q0ZwaHRNVVhSa0FTRzBBMVNoa3N0ZTI1bjJPZ2ZTalhQZHpVNis1RHFxdkYyNXpBaFpFWktYamc2TjZWQjJZNVlrZWt4OTVBVnRWSERudTdDUDJmTjVzZnIxcTI2RkFaVHpMdmE1bUtiTHpFMzVsYzBWcnNJaGNqVEZoeVB0cFRPYmsrS1lpZlNram1uR0lCa0xzQTM5N0Mzek1SME80ckxSVEVodGNOdHU2VnZWOE8vaGRPTWdCQmFjY2t1d3RDQmx0STE1RTBRQitPZlhaTUZ6cVIzNCt0N3pvSG1IRDZUZWViOUxpcWZrd3RtVXY5R2U2Um90czliK2d5ZFlrSzdpR2VHNVE3Sk1nTFJhZWltYlRaZkVlKzdaeXdTc28rQ1F4ZkxSL003VmtEczNHQ0tSaUpRS0hvM3ppczdFM2tPcjVMWFhBRGtBVW56UHhCVktiUDNMWDIxZnlTNU4zdXJqMXhTZElJZWxZRXRnaEl6TnBwYnBQQ0VDdnFkekFoUjE3bGVzLzZpUW1CeXlneE5wRmt1d0hhUzA5dXVJU242U1p6cDlrZ1pqbjg1R2dkTUkxV0FUWURhblZWNDFrbktRTzVodzErVndMNTM2N21sTXQzQ09UdUpaOUFjekIzbjMyWXhKbVNTZXdyNW51V2JGVGtrcWUwRXpJNk4rQTUvSSswNmwrREMrNUFxTjU4WTI3eWVBeFJJTGhlU0krVzd6Rk5Rd2FaZVlQN0RlL0RIVjFlYldPMFQvUC80UzhEV1BwQmF1M2NTeDM3elN4Mk1SZnIxNVVrQkI2U0YzaGdIQ0pFVlhFaUVabDByRzQ4ZzhKRENUczllZnFRaWgzSzVVZ29kMDY4cnJZVHJvZURwSkQ0TEo4TGpTTzBpd0tpQjh3c2lsbDkyMElkZFNPaktTUEt0TGpMTjRsNGhpYTRBVC9lNS9VNW1YN3hSa1M5WXBicTlFcjdRcE8ydWpxUVV3cXNmUGxrYXBBUEU3WWRNWjJMNldubUl0dzRCY2hQTWU0b04xQS94ZGFWbjJIbjdCT3Q0R25OZTRVN0RXV094M0tiWFJua0RrTWFuRzRXVWN3bmxka1VMMFdsNzRNSUR3NTh0MHJqOHJLRVBMdzVmK0M3VHdxcXEyYVZYSmg5YWthN0FUUXVsU1hYN0tYTnZ0R1JORGFERnpPSmxjYStkUzAvMitZeWhtV0IyL3MzQ25pYnVET2FmSjE5eCtsVnp5QUdHcUZvUVFFNzRWcTlJaFh0eUJZcmpOcXRRR0xIaGg0eTJjTmZvUXJlMzYwVnhEcHg2amJrd0FobFpzOXRjVnFhaXh1OG1zSTBKZE40VldMMjlMYi9xUnFST1ZiZ20zMWdEamdBOHArWmx3eUpBbGR0ZVh0YjhPZStyZUgwNkZNQW4rWld0dlVRb0Rpa2cyRHhTSElpMFNxMFRaUFQvcURZK3FSNFhUcHlYWkN2WEllMjZJZ0tvMUVubHZaM0doZjlhdHdQZkt6RUdWeUMvWU12QWVZSDBwbTl1TjAxeFpkYUsvWWFqTGJOL2lvcnNWRE9aazJmNHd0cmliM3YvTytoWVMvdW52U0o4LzJQbmxPNnZLRXBmb1EySWE3Y2pCcFBDckxxTzJtbTZiOE9hczdqSncxeHVkSnlrdElNZU9mQXEvdzh6TCt5Rkd1YlF3UkRtUGJuSkxqbVI5UnJqTitydHJNcGhQdVZlNWVkUzhPNEZPN0tDQ0VLbVNUSWZhUk8xT1Rob2hBT0pGUGV1SE9wTGNDVTE5UjluQWJoQWQvT0w0YmptYkZyeHp0ZDYvYnkrUDRsNWhDbWlTY3lmdUJSeUxWK01lemR3MzJsSnBMR1BodzZraUx2dUhJNFZEZW93TEJqZnZYSTRmcTBiSXY1cFJrb2VNOEtDb2tsK3pnUkYvQ3dLdXZSNjl4U3g0NGpyWDlBWSthR0lKMURJMlZDOW4yU0tWTnl5V3NzSFhPdTVLQzQvczllRGt5TXVHejFnNE9Jc2h4NmttYzFqdlRoa2EwdmxLRC9ycVFNWnJPellQVXVhWTRxZC8wQmZPU2ZlOENwVzVoVkdNM3ArTVVPdVY3OGF6Rm1PTTJnU2VqcE0rZnhSeStWMnFCMERIdkwzWEFOcnNaKzk5ZFkrY0dwU1pVR3hUNE5kK2s1dk43blcyTVZjUWhZMUFNb1Q5Zk4wV1BZaVhDZStaU1dnRGthdnNWZWd2NEVZL0VoZTdkMmpqVjV3eVNKOFVwM296YThYS3ZKVnRSd3RjeXlSNkptS0RyTDFDcCtJK2d5aWJEM2MzMGJpZVlzNDExcytkNjF6ZTZxTHVwSStMbWZTdGl4bkZoNzQ4U3RxRVorTVdvNy9WQVZSMHErNGJOTGpFd0llMEJRWGt0L3J2NC9saWdkWjhob0Z2Qzd3cDh4SVZSUEhPaTUyNHR6WVBZcTUzenpiODhYTGxBcmdlbEd6aFhtUS9KampTclhKYmFCMWFIZyt2dWNYeGs4ak1tTUVOeVBWNFFnWFpCRHhZTWxsWW0vb0pBdkk5VmFNSU1jenNTN3puMExaMzh6VkY4RWtqY3F1MUsrenhDWStEaWZ6aDVnUGdYeC9ndk1hc2tuTXVURklxaWFYbkw3L2d1WUhib09kZml4MTAwNmZ5RmJ2dzlBZWJGUGpWeWlEMnZGYkl0NU9uS0pmeXZ3djdpci9CZ3Bmai9WT1BTSTViRGw3dEFuKzEvamJWR1JNTWV2cGovTW1mTUNUY2E3RmR5R0crSWJOciswUnFHWUdlYWRucHJGNk1ZdmI4QlQ1NUVydVJwQ093d1dqK1EveThCNFFyWUorWE93VkVSZm9RMm1ZMVEzYmg4bWJmYU1ScTNqMTVKNFJ4U092OHFXQ0o3SXBvRWFaZkloRG5raXUvT1ZjcGtqOFFUcGdONTFXRmJEeFM3TmNwN2dJQ3hTQTRTUnBTeW1NYm5tSEZvWno0VlgrRnlXcFl0eGlua3BBb3VGZ3QzTlBUMUtwYWhOaEk4eFBkbDc3RFZjSFBCZVBtaVBwaVVlTXFVeFlFYW1yWC9MVi9XOXo2a3p3aTMwdVIrbzZ6TEtWa1VFMDhBODhjanNyL290YW1OaXpkY0x5cnZDS0N3QTVpd2dpVTg3WmV4WkQreDI2TUFsNG02Mmd2SjhyMHRMTzBFRjg4RXZBdTNPVGM0ajhLSzNhaUdPM0VnNEFTRTJyU3dGNkl1dllyU2VSdjVrWC9SUHorc2Vtenhhc0x2cFptZFR3RTVSVURKaXVtY054bUJzdDg2T0FTT09hOGlpOWdwSEx6MU9hQXJKbHBQbVliellEUEhEZEZna09iWWhFeXFaVVBMSzhZdksxbjljZlhveWl4OHdKbTVQdXJtWGdxeUcvb3hwWG1QNlEreVViQnI0L0pwdS9GU3FTWkczMk16MmM2VzBSZkpvZGR4WjlXOXdaZ0ZxYklSZWI5V2kwZkEzVTlhcFgvQXVpakltUFpnMHI1MmxXS1QrRlhVT0xtWnRKOW5RL05DcStYY1RVV0ZYcS9MMDhpcnlCWXA1QzRzVGFUdTE2R2dUeGpEcjRPUy9pQU1sM080N1hIaDRDODhwU0luRUlZcXQrZ29FN0lNSlFEa1pvd3pmYUxsZGZBYWkxVElSSng4SzNyVkUyanZGcTJzMFNzZmpVNTJqUldsR2ovQzNIN25ZWUlRL3cybHFWYmVyTGNOMmpiZjhzaGdvQ2tDTlB5SGJxa1MraG54QVNmb0NOOVpOUFEzRTRUa0dzV09GS0RZVDZmV2NKNkl2eUhabUF2OUlXeFFZU2NIVmZJeEZydVQ5b3RZVFZlaGtzSDFrMllqeG85RC90eU0wSkpZOXlmNzVnTkZrWi9keUo0bmh2ZE1mbW9CMnM5aGU0WmVwZk9DcHlid2ltRFdFd0ZxMVkwbEhaMmt1c2ZhdjRzbTBTTDB4NDhDa1NHRXNmZG9xTVhJTTlJUkwvUWk3SVcveEJiQ0VOSSt4eTZWdjcydXF2Nll3SXJncVU5OGl4cGJveTBwZXhseW51SEZwMklORmtBcUVCTy9pU2lPYnhQemtrTjlwUkthN0VWbmU4VUFuMVpoRHlQK2I2UUdkc1BXdkVpYUlmcWkrVHBrUnlvM09vSXljQzArVVA4aWVoR2J6SjVzM3NLejBGeit1ZGNUNDYwTFZxZnVSMVZYTEJoODExL0NHb0Z3S2pzSmNzMmltVko0NUI5OWQ1dWc2SC9iclVSdUFibWU1NGFET2N3Mld6eTBvZGlYcXlzTzIrUDhXTXBVV0RPSWZKdmpOc1pPZVk4TTFBRjFib2xtOS9md00vbnFFQ0ZEWS82TU90YVo2MGRoS2x4dllrVk5RVTg1Ti9VWmNmVzVvZUdzYmRmUmVTYzhnajNlaWVBbElYVmZ0VVZQRkc2RTlxVTczLzUrWkhoZTk4bWw1dGtrQmVpUXN1dmdyaUN4c2RnZ0tYTkRWazZFdXNmdWJMZG9UQzg4NXc2aUZXQ0JaaVB3ZWwvZ0dqVHhHd1pRN29NaXI2a3NmY1F2VERGOXNSOFZ4OFdiQlkvejBkcW9ncEhkK0RWZzlSYjRYY0NCQmhyUEF3RGFoY3lxZ0pVM0NDQUNDOFR1OGVzSElqYnZ4aXdVTUl2VzNsUU9oRDJBbGdhMG40R1kvVFFaR3ZocGZuWHgwbGNiMTEramFrOU53ZGQzQzI4K3hFYUxydFBrRDRYMzRlVE02YWQ5T1lCZStBSDVXaEp4WnpzQ0Z2bktyVCtySzM4RCsrdkdrNXl5N01raVJTUmYrUlgrbG5OWi9KV0NXNnJwbWtEVzBzTXVISGVScmVsd2NxMFV4cVZIS1h3WlJESVBWZzhHQlE5eXRSd2NsQTA5Q1FyWGtTYjQwKzVhWGI0SXpvZ3F2NTE5YUxOUHh2amNCSzRQdzFYaGxmNjhQb2RUNFpEQTFYVWRPaE1tRmY0anBWTzlCenJqT2ZsS3QwQU9GeTFIMjZXM0lVc1VQTjFJQ0NoYjdwVllzeGUxR2MySHFXSjJNSGUyUC9oRnIzaHVBUkE0cWo1dllTQ0pORGFVQm5pZTg0RHpBT28za3FzK0VoRk84L2c3b2VXcmpaSU81anB5MndxYXU0MFg1V0kvN3B2cHZMS2wyQkNWbFRNSUJ6aGJ0dzNUc3JGeUpIUUcrTWdaSXlHNWhkcmwrMG83RGl6djdsVU1XVnJkbUR0NnJVUEZhb2JWNG9RRUQzc01IMXJRMVd6MUUrWWE2NkZEWXE3UWVPcU1PeUdKSlg5UE56SlNYVTBNT2IwSHF2Mi92cEpDblB0cTI4ZCtJZUw3ZUFCbjREZENZb0pEejd0YVNpTlJXVXYvUVRKWFhVdWRXaTY5VGw5MHpzZm9Ob1RqUWg4bWtBdStiNWtibHF5MkR3MXk0aTA4TWxwY1lOeDd0LzhiWStsS3cyR1JBd3hHem5rRTdQRG5Fell3d3FicUZOQVFyRllKQ0dwYUVuS00yeS8xbWdFd0s4akN0MklWZmdWc3A3UzVMK0pyUzg1Q2lwZ0xtNVpjREtWYXNIWVRVRExRU3ZnUXFZM2Jpd0V2UTlseFhzWnZWdnpSUTNwWXFQcjcxT01iQUpGSjBhWUQ3bVhzZWMwcTZWWTQ5Yk40eHd1ZGFqcWpCSnVtd3hLdCtnS2k1OEFOalU4b2pDUy9qL004elF4TUpvdi9NamVyYXdUL0RCR1ExVUU2c0tTdTc1NDk2aG8wRmc2NDRYbVhkUU1jOVhYOEtuVEZKdlhPMG81bVQyU3NzTGNkWXJTakZLckhLM3pST2xBTDRWblE2MFBZNmZMUjF1VDNSSXcwcDVYTTF5aUJxY09MR0o2U1hBRzdTOUhsM3BiR2RBZUF3YkdCWDVrb0F2UWNqY2YyTTMrakRxZG01czZDRHpxT21OcEczWXZDWkNtbHJLZmZvYi83eEFkK0kwSE51Smt6R2ZaY3Y0cFVCQjZ3YTdoMm9kdXdBaG12S0RoY3VscER6MUhpbjFkOE9UM0psNEVKN0x2aEwrUWdCeGlpNHhxeG1MZHMrc1d1UmJjSy94NXIwaEovczJabHcvTzZZL0VJaExLVVI0TXhtYXJjMDV4Tk1XYWphNlMzbUdhTXFwaExpZnZFczkvdmNnV2VESXI3SzFYUWIyVUw0ejhBelpuU2dvb1k3cDVTMGFoaUNwd010WVk3UUJKNm5RMFltYVhhM3NLRWVNRUp6VzAzcWROazFGYXQveW5iZ2RKcnZwVk5tUGZpR2VCUEQxbEoxay94dkJxdGIzYzQ1TG1Qa3B4Q2VISjJ3ZnAvVU5PK0dNMU5oak1DQlg2aGFCV2ozMlFzdUtqREc0R2Ftb0RVOXc1c3ZFK251VVk4d3pIWnZ3QWJvSExLdVRRL0FiZlZJVitlUlNiTW5xaFdZajBqZXlaMUhsRW9EMnhvWFFVaWtMZjFJOUFuYlcwMkZYR20xYlZkb1hKZ2ZKNWZ0TnRRbDFjM005K0RMMWxDYTVMNlVkUDZRTytabDRjbG4yczUxNFIvdFJHQ05QSm05QUVjMzVrQjV0OUMxblZmL3ZlaVY0Y1g3Y0s3SFV0TUF6NThnZHUxaFZaZldvZW9VM25qbHdmbmlEUHpCR0x0QUF4eXlDUDBuYmViSkdWcXlaL29qTWpzV3l3SXE3a2Jwa0ZVd2duemtuOXpzRlZpTGkzekpZNFhUMXQvRTFna2V6Z0x3c0QwalhYUkFjUkZnZkt1R2xpNkxNa1JaVG56OG56N29UY0JiWlJEWnM3OHdITktucmhRa0htd0YwekZvVDYvRkRZSE9mcVNEbThoNkZVUjQrTzNZTnF1cVYyVzNNZHBDVC9QbnJvaWhxL25NdmVnT3FNWjJKOXFvbHF6ZnoyTjYzNGtoSjVNTnRxa2FGdFhmZnllR0toV21TT1k2MlJhbGRzRnkrNWNYeGEvQ3VFMDQ0YXA2TTUxenVuQVdDYTRNaDgwb1dQeFV0cUowTEVXWXhJOUhMdEs2cytOLzNhODBNQTZVUWRBbUg0eFZaVnJEa1VTME9aV2g0QUNoK1dpbE9BRnFkTFhGdzVrNFlyc2trY25KRTNVYmt3UHNMTXF1cnFpNTFOaWNyQytXUldRRkV0OFdaUGlwVUxQWENQK2g1Z3EzZzlwS0pBZTFvbzM1UUJjMVFwb0RQWHBWSlNjU0VqOVgvWC9IZUo4b0Jkd0pYYk1xanVSNUdUSlZaWkxBb1NuVEtJZHZQckNvbjlxTFNmcmVFR0pmM2hoaG5PZ0NvN0lya0ZpNitjV2s3RFdSbnBWK0VDVE9HS2hVSjVrQ29teUMxTTIva2hwUnlxZDlmZEs3TkxWc0F6dTVoNnlFSExyeFhPNGxLNFgxS1Z4NGtNNWhiL1Z2UFJldUg2MUxzSjlOaG83S3VDUXdjOVZOeWZxZkNjYm1tcUozWUwrWWhwWlVKSWRqdk9hWEpRQkxyMHZ1OHplZ2NDZHN0VEUrM3kzU1ZnZlp2d0hpTHk0d3kycGh1M0NQdFFsaVVDM0tDMlpUMlhacmxDV0Z4M0dTS2pKNjZNZzV3cnVkQ2pnNTQ0djhmYVFibFUwZ2NOOUZocE0xT1I0V1l1d1lDaGozMW51eFVJdXFUZzhGdytQWXNPc0xYU2kyc09XNHdnWm1XQ1FTejJaaHhxQjJLQzVJYXhTZldLMVJHaVdpNWg0QmtDUEpIaVRVb1BCaEhCeGRvT29qNEpaUEZuK1g0bXpBT0dmL2VTRUF1RXNObHNFZ2w0b05aSTNlSm5nV3FZZ3AydVdJTDYrSGNWc0t6MllmSzRWNEJVUXprLzNEQzlWSDZSK3gvV2xPQzVHT05qRUFaRUV6SnpGMmkrRFBSRkNadHAwbzQwbmRBb01mVTlPZm5jVm1qNGc2NHIreW1mWm9NSlFMMHhKOHBGcXlhc1UyNnptYUpOSUZmUUhRWkE5WTNZVkUvbGZXZWkyOGo3Q2RNc3FDR0QxeFNtQnpUVEViZWhFenliUzUyN3Vja3kzTG1Uc093d29CajN3TmRxRUJOcGQzK1dDbXNndW03b0tiR1REM0l4VEtXTWlSMTYzRkxmNzNnMEFoRTEvQUtDV1lHTDloZkRGWWUreGtFV2xiRGZHeTNlRHNhUjNiYkFNeFl1UXBKdXptbXhvM3F3eTBtdGp1Q2RCRkltVUJoeHNnRUQ1ZEI0ZlZjT1c5ZjFjVUU3OEp5dFBiUVJrYUZjMWwxSHc1Um1tVmJPZEdpNUxtSzYvUmVNMlBTRHd3YnJ3NTU2VjRFb0RNWmZBVjQ4SGh3Y3ZxVjVSSFNUQVdVRmlUVjJSeXZOd1hzV0RzMnJFYVBaaWZWUFBIVUFocEZWclRVbEJMRDgwUnk2SU9uV1hDWFlDZ1VCVmhZdUkxcHVjcm9La1dtbzI3ZVNoZk5UUkUrdXpYd0NMVTBIUFBSZ3R6YkVTVmFON2RzbXU4ZjJVeFg1TVJZTC9hdTdBUkNad045RVFXQmJQdGFER2V2ci9ZYjBOeC9acis5NTRDd0cwWVQ3Q1pHZVF4WiszeHFDVTdrcGhDOEpubXBSQ3gyRnNBOEkvUllrbHNOOTYyMnZoZEVyTEFUZUdOc3FoaWhYNXlLMmVyY2hUTEoyQmVmWGZiM0dpMUZuaU1sM0gzMngyY1lHNm9LN1IyaVFxMXFyRXhnRzJOUTZ3bnlNWXVEQ1dWVytOeThsMG5NS2NQTzVETk82Sk1hcWx4eXFUTFUvK01mSG80Um5NbldnZ2h1YXBDMDNaVkEyN2tBMGcvUjFoS091R0FWL1FadDZ0MUthRFBnVnY2eW80WnZMYngyN3FTYjN6V3FXMUNBbHlKS0wrbUZJMHp3K0NEZ3hVeElaSUdEQnhlY2dMM0NRdUE0VE5qUUdoRDc1VWxoYkFob3UyOTJMWHlwSkZYR2FoL3c0czNENzJtLzU0ZXppSmxTemNrbkJCdVV5NlhRUUpKeGxVWURRZmFZN3ZhZmd4eVAzeDZzWXpxWkdOcEMzdUpmTE9tWW5NY3NEWFRodG9KaDRSYlhFS2x5Tkl1RGZkay9iVVNteEFuZjJJMGFyS3NtNEhQam9rcjMzcVVwZW11aGxrZzVxMGtzdkU5MkhZZnBPeVgveUVQelQyR2d2K2h6TGxRZCtCTFF1U2txZHVrTTlPeFFEejhsYmUvMXp6TFFqT1dnOHZMUWJOczB2WGJsSmx2T1dDQzdncXhIbWRXaEZROGVjQ2xTUHJVVHMyblh2d3NyVTc4YTdTUHo5cnhxRXprZ3lvZ3NyN25OUGdpNTZrWSswWHJJWkwyOWV0NXVETHAzd2VOODhTQjdoVXBIcUhab0owT3FzRXBFSkc2UnJmd3d3eGNSVzBwUFFQSThLTWsxUEplRE9KNG51Sk9UYXNpMGNmZ3JRSlArak11YTZabDR5cy9YMm5VNXhHRjlLS1lrQ01CbTdzWlpWbEY1ZFdoQnZsaUdXYVl0Mms3ZG5iOHVZVHlZS0pXSlptYzhxcFZQcTFWTkhWTGVUSm1OMFlSamtmTU9RMU1JZ2wxVS9DZnhoWDZPNXBlSFQ2NS9xWmhvdVBkRTdIV09RUm53bEtYSDVJdHR3UWsxVUZoR3ZOZkNiWmY5dmFpdTVKMjhselA2Z2RxNkNqY1FrWXhjUkNsRURiZVlWYU94Sm1EOVBrcVgzQjZMblM1bStYbldvdFg4Y3hUQ1JSckpCYTArMzJYZzZMUGsxNXlYWjNtR1YrTTVENCtwOVRHNTQzSkxQQi9td2lsS0dJdkhZRFdNOXN6M3VDcEI3QUpSUmJNck96enBuZ2xIRTAzbHNIampYS1BBcjJRTkl5MExWTG5BR3FmaWFqb3JqVFRNYVRCMjJNak5rWVh0NmdTaEd5dFpZQ3o0T2MrbzRUa0ZHNkNwQkpOMU96U1dVNTFPODk2aTA1bUVDUG1zbktoQnZUQUdkck5sdnlFY1c3Qk53UVp0WWFkYmYySnArT0RMNGVNeTZrZERVUUlmcElheVNIbUx5SHNQT0FndFhsdFlWdGZyUElVOFBNaDMrK21QTEhCeUkzd1plREhQcGVSMUh3UkdSWUt3OTRwbW11a0JwRkk2YUdkSUsrNHZUekVOSDdLV2FKTmdySGpuKy9OR2ZJSkMwS2pGaG1QZEdWY2NwNVdrekZkYUFxeUg4V00zcGZMUGZpd2hNN05GUGZqVDMyUFZUaWFxTkIySFJnWEpEWFMwdTJVMk83TnpHMXVLNnI1RmFKZ1cremZwd1dBaC9IV0s0ZUI3eXlDYi9VK2g4d3R1NUNWSCs0SDQ3QWw4eldXSXZQMFFhTU4zNWRGNmJRa3V1TGM2Rng3TXJqZDQrY3JReUM0N0krUHNhSktjTXkxelNFQld4Z1pwWlM0MWlURFRBTVRqTXNUYkVUMTI4a3QxNmNnY2swY2R4eWk1WlRRZ3dGZ1dFQW1Oc1VoOHA3TllXclZoL2ZFb1ZMOHA1Z0ZBYStOYllCUWY0emI3ZGRla3ZUbFR4bWlFVlcvcmRORUhIbDBDY2ZsaDFqK2tVb090NG12NlMvVC9Gd3g4TWZSQ0llYUovbFJPei9ScE1OSkRNZXBhMGEyKy9TS2pJKzNzZ1p5T3pEWndMSDkxNnMzU2ZxU20vaGg1Njh2WVBJdlBEV25xYWZsd0hyeDN5Nm5uTVJWdDF0bjN4dDZNMGhaUFN5V3BEYm5OSzg1aUFVc2VVR1pTbEpRTTV2ZFc4WE83THV1NUxsUzdHeU8yTjBpeVk5UjlIdEMzWmszSXI5Q1lQOWdSRkhoOWFKUVVTSDh3VmZGQk80UGZzVXRrQ1ljQy94YldZSTNBYS9DSnNWSmcydGh4dGdZaEJZYSt2ZDJUSmlvQUFPb3h2SHRTakU2Zld0R2FsZ2VlckxKVHlETmdLSGZ2Y0l5NG9xZWlhR29yNWhseUhDcjRYUkdJYmhNSkh6V2V1WnFvMzBqSlByYmpMdW81ZThJQ1dFa2lxYmV4Z3ozWnpQekJ5NVpHQWE3M1cxQndpbDZXbHl5aDZpcDloWVNWRHArcFVuZHhzRUhSMWpIdlpzZmpyd1hzMVY5M2oycDlXd2pSejBVdCtobDN5b2lWanFydnZNeklTKzQ0Wk1kb2xxUXBmdnltVjFoejRKN0llcTcrcDdQelA2OVcwcWVEb2E0VWJZNStJcms2dERNMnptMGZNQ0MxV1RzN2N2SHVVd09MWlUzUHlicTZ1T3p4M1oyTGdDbDZ3SC9MZGdjdm84aUswNXJHMHNLOFlZWmd3YkhhWk1FbElicTJLUVpNd2VnczFVdTZ5TjVJRHZTL0c2d05uZ2U1K0UxZ3Y4V3dpUzRqWVAyM3BrMThDZUE1OVkzSGlFL0pHWDlDcEhNcnRiOWd4RXpVWmF2SmRjV2lQQXFFdTlHL1p4dkhWZDBPU3dBeS9ReTAyTFJaUTFIbWRNb005Wnhpa2NBd0QwdDNBbFYycXgvVVp6SHRZWXEwOFdydVY5dUVCS2FTNXFYeE9pOTRYZHZkRDVJNU5oZmdCN2srT09GanRBelRyY3d3QlRUT2djU0Qyci9YYzZZclRiRnRNU0pGcU9BZ1V1RkVXK0tDNmhVbWNpUVZXckl5RlRHcUpXcjFTN1RiTmtYZERFV1AxdDF3ME5rS1lWS3N0bldUMTJ6Q1k5L2Exc2hFeUVvOUhkaG5pdkN2R0VvY2Y0VnRQNm1rNkJKL1FwbnhLRkVzWEtRMEM5ZkZHc0sxMnVlNUtVUE9GYyt3K1BaYks5c2VoNFBSVUF4ekozMll0QXBVVENuN1hDdDU1bDRnU1V1QlYzS01qY3BwUFg2ejZ2TnJ0R2FzZjNEQ3BTUDNRZ1lsZFRSakNsWWdsK3g0azN2cFV1YVU0QVJzd1orZWU2Y2hPUE9SekRlY2ZyZUNRNnJWcjRjUjNIU3oyNkVqaDJ0OCtDTmdoRWZMc1ViQ0d6WnV5NFgzL2toMFNheWFxNFU0U1VpVE5GTTBWVzJWbkNBZDRBVFhkWWwxb1ZwQWYzbGRMd3VQV1Nmb2x6OXZRM1hNMGt4WTN6Z2tjSy9GdThCaXh4Rzc2VTVDbGdWS2FoUG5MYUVyNzk5bFpGMUwrbytCSEhGWDdSZ0NnYldiNngvaWkyM1JmR0Fra3B0L1dWWjU1MjUrU1ZjenBLYWNRZHFDdlpiQUJCbEJkdkp2aysvazlGcE5VUmZ2NmxNNzlIemdYQ2tQaE5XNzFJbGlqUXRvcDF1VHFZMU4vVkFmaWNVUlUyNEo5WDhVY1o5OEM0M0Vqc2VSZjduQ3ZtVTF6cktNek5sL0x0Q2IxbXF5RkE3VVkvRWtZbjNORTYwbzJxY0I2eVV1OTF6aUpVcVlsS3p6RE8vUnFId0Jpem1XNHpBTkhKamZ2Z001WFoxenBJRlFTdU5xaEFQSTlhQWhhUUp0TVpyOXBEc3U0eWEzLzdrQzVnRktmbkkyOGt0YTdaSVhXVHpMazFIKzdjRjZYNUxHNDNONG1hcWJkdEpnRjV3ZTQ4bitiVS9vQXUvWENEY25RV1RRQng5bUpHTHA2ZHFzNFJGT1d2U3pRalRlaEEvMHBjUnJvYXpIcFRUb05uSzhwVWdGd21SL0syTndXRTg4WitISVN1VXNhM1o4eDB5S1p6empuOGo1OHlQdVhXenorZDltdUJ5YmxJVks4cHdKN3J5MFA1dSt0Vy9WSGNDR25aR1BLOUtEbFpYNWpKdFpMRWxFbGVoS2Fsa3hlRHNMZnd1N25QMWY0YlNOcXlNcGtQQnFYMFJmYXdyTmxCTCtZZGRZS1RuYUVQYVAyVk4zbTJTZ0l1bmNmY2g4dUxGQlh0cGRaS0pESVFINUFnai8xNzFWSTdUcGh4WUhBUG96a0FlZjdmR3FKaDFESmdXWXJZMVlCNkhvWTgyQUd0TFNROFpZejd0V2FjL25mVWdUSDlFZXJIUW9hdFE4a2ZqZDlEVW9jUXhibzRKYWZCR2Rubjk1QXFHUTBFUEkzTmVKNFpyREVJS2tyQmRkV1ZkdjhJL3Z2eTA3TTVZWC9zVkVFendIZDRZanNaRU11akdPaEF1MDdtcUpYQWdSV3ZaVkNUK1hlMHNLRWhmL1dEb3pRUkFPV3NuaFdwTFBoSDl2akViQ1N3ZDNQa09YK0NkK2Zxd1RLRml5cHEvQXNuZXIzNlBKeG5JYy9QU1dKME5aeFZGdGEreTFoZU04ZUlqM1pGT0dveGN0Ty9KdFMzTUUrR2JrUnU1bmRncUYzNmhGYzIydTBmUkhXRVFyRzFGMkJ1SkZlbWN3ZDhqallwVVJzMnBSbUdBZHA5UHlvK1p2NkkrZ1dReDJoZC9kRjNLUEM5bzdERTZ6QUd3c0pETXhMQ3E0Qk9DaEhEN3lHdG5mU0pKS1loL0xkdzRjSWluL1J1TjR2VzVCaWJUdTliVXQxRWUwc1ZGeEgwdzl2UHhheHNHUmhVQmFuRTU5NTZTeS91S3JzVGpwODR4SDZheDNWakpvNG5DeGU0V1E3YWVmVW52NnpSQkhCWnIrNXlVR0traEdzb1ZUTzZYNDFDOUNXazVCa21udUF4YWhkU2psdHRzQjhxZDVLUXVqRHZkUElGS25ob0U0OG1qWDkzWGpFSXROV3Jkam5zbytoVS9mN09VcE9XZWx2alBMalBHdVRlUVFoVGRqOEtRUnlmcnlYWDAzTk5lTkZLMGVWVkNGSFJuQ3p0TytPOVlhNFVyQnVseThiUi80WE1EamE2SjNHZXBJQUp1ZjkyZE82ekR3VXo5UVpxaVkzVWdqZGljMElPNTFGNUxpY0k1RERFNUxKSkI1WWI3Wk5rNG12NFFpbjBlKzUyYUtQUkowa2Ixb3BsMkxkODI3aGVqamM1T1MwaUVBUFhlVGI1Zk1xMXcrNkV2N2NKN1VEOHduTDZKT0lMbUp6cjAvdzJQUlY3VFRjcmx5RXM3ckkxbERqRVNTbFJkNHJ5cHI3VUVJWUV1NkVCdllLQU5zU1NpbFBvQ1ZKMktIVW1oSWw3aGNTT1l3SU03QkNodTF5aXBWckRqUldUYWcrNUZSUmxQWVBQQ09ibFdERHZMdmZ1YmUvMHNpVi8yQnRBL3hEYTVNeitLYm9jRGhBZHZxVE1WVUlEeEJrRW5XMHVoYStlVHpWcTFteGowTFdha2EyRDREVTU4SEgxaUVoWUJoYkRiUlR3c05yWExxVUhHK050SlRJOTZlc1hLcHVlSm5nNXRuYjV6R0UwbnZvRlgzNVU3TjZUeC8rQllzMFZNRjgzdGl0TjRvK3VHNzg1cElJQW5xd1lmK2hkWjR2VnN1Rm9zMjFQZHRzM0tQZXBUN2t6STBtaGU5WWF1OG11bWh1a2V2eU85b244TG94dENFQU5lcmcyTmlKVDY5QTJJUHBYWmpQaHpuYWxpSnVvSkhOd3NFd1ROS08wcjNxR0ljTWM5RzI0eVdZOGI1QVczbkljb0d5NGZZdGdkRTRra0lpMG12eUlIZWRrbWJBMy8wSDVvbXJDZTZtanNWQ01TbWNmd2E0M1ozTGYvMUhQU2xCODFibG5tdzk5ZDNqWW5xSXVvN1RTaHlpaW5LRzAxMnVxdC9uWTRrSFVTMHZyM0RpdXEwUUI0YmNMMWZhS3NoSm9RNkRNdVp1QU9qZDFWSnhQbmlETmtGQkpIbVptaXpNbVZsSlFKMnI0SWxsOU9tbnMwczBKZUVhNmNINDQyNVBoRjd4dmdPTmQ1a1gxQmxVY0VLd1R4eWdUQm1vRXFCOHdFWXJOcG9UTDZKK3VpaTdmWmZBMlgyQk54a25ETGtwK09WSWFtQzZXNlNucEc2Q1hJSDJGN0dSdVFaSDUwanJES29mU00xbzZmcy96SFRyK0xOVmpLeVVnZDk0UVorQUh0MFdqdU1uaWl5SDJLcXgxbkc3QWdSNU9FenUyZTRadFVPUEw0UGt4NG4xeUxsOGY0Z3ZxbGp2SmF4amNOWFdacW80QUk4QnFoUjFWNGtTOThYUCtlQnRoQnZGdnFGTUR0a2JSemJnNzFSOGpMM1lEOHU5QWRnZVdmcGp6ZW42QzRPbkg0Vm00MDZ0ajBNcW9CaW9UUEF2UFJSREYvVTBndG15QVd3eDJ2TXAvdHJQdWhPakNibDB2MEZueExwTW1KeFZQSDBwOGYwcnZtR0lOc1hQUFZBQkw0bWxLRFlvSEhVUmN3eVUwb1dHVElGdW1VbWNoVGNOZ2hOcDBLVTRxVjZiMVBTT3ZtbWsyVEx5N2hSREhQdU9VL0VKRmRwVjdwQlZwSmN3R0VRbW54RzFLZ09LV24vTGt4VldpQlJsTTZZMXhrbXNTVWVUQ09HSXdldkh4akdHbWtHWUdUUnVSK3Myei9wZjhRS0VKVm93OElqdy9oMlR3UXY4TFJjRks0ejVueGx0NXhYMGI5WVpjZjBrMHRuazhVZEozSGFlc1dhZjNCRmMxVitUcFgrYTBORFVCdmRhWGljWk01Vm1xY1B5NUdpTE1DQm00NllQUG9obFJXd0Q1VG02dEdMT1J5aEp1d2xaWkVFQkFORnNUNzBaQ1phRldQQmFMNG05WnZSK0lNMFZNVEZaT3B1MFVYL3I3cVoyNHNuSlQycUo4UlZYSlJTMC9OSmIyczVuMTJqUlRvOUtPUE40Znc2WS91RmlER09xVkhFalRVRGZvaGpxS2JVYUNNU2QrUWdsUHZPZEFFM2Z0UlNGSGRTZGxjVnJ0Ti9haVJnZlA1VkxTeVhtSVFkZEZxcVI2RGttSThDL2o5TFkwd1lpTTNkdjJVcXBqVndDYjVRREdLY0JyR3VycDgvaWVEcFNWdzcrU24rS0p6STJocGRUenpqbmZnbHo4UWdRTWZsRnc4cmVRYkZKcldiWkNEZzcxMUU3RG1Zd3BUK2lQTWNUSnowendiSkNCVnBFRHgvZFVwRnFDNFRIRzlvMzZTbFIxTmN1VU5LUmxyWVZPZFMyb2RMeW5LU0VnZXZWbWFoUVd4ZG1BamRERUJSaVhQajFjMHZTSTA1VWVyd3NQNWN3VXdkZ2JKR2xITC9ST3RxTjJCYnN0czVYTHpvNWdWUTRHY2R6ZkNNTHlpWkNMVDhGb1JESEJJNWtlbS9nTzI4ZGQzbW5tbU45OTdOc25rWFpKalhwNjhXNFF1N0F6YjdobVdFQ3NiT2lIbmgxZHB5YmNOOVJ3U3RkV0RJOXBOTGNod3dPQVRiSFZzYnBGcnNSSmdGeWs1MzYrV0xHWWNXUm5LWk9lSDJwVktLMFV0U3E2c1hoRmtXK09RcVNHQThpbHA4clo1Nk10VVVqZng1RjZPY1lPQU90TzBRQTJhN1NJWG9qQ1lCQk1LUmJ1ZXRPTTVwWE0rUDhOM0M2eE4wSXNKanRDbUdpK3hnRVZhdHVNN0QzR3gwSHZtaHRjNzlpYWJMN0FFc3RaMitEVXNQRkk4cXBtWVkrL0FHS1A2OFN0M3d6Tm8xN2x3MHJRMXpqbmZDendTV1c3TG4rQSs4Nk9qdmlOUFJyMW96bzd6OVlYY3pjK0hVaXJNbzBMNG9kRWo0YnROakhFMDJDV1ovVU5zZjdUMVByZUxmaTRtSDNFbkhmd01mZjcxS2JNWjRaUnFGdU5DZVZTUndTZFUySFArRDRTSzd6ZG5aUkZFOGphZEJ5ZWVaZFJxazZLRUhIZDNkQm9yQnRDOGRlLyswYnZFOW5PR0VLZGJZM0hxL2ZlSUNyYzNiUHY0Q2dRaWJOQkxZdXdUcGtiWHo2TkZOaVQ2RW5CRVhSczRYNVRrTmROYzd4TjJGTjhjaWdoYVJNSjI0MFlSY0dYS0lKWVc1bWJmMkM3ckV0VXNxaSs3cG1GOVp3NVRnM2tkNHlFS3A2QStrMW5DRC9PaEVqUTFrU2ZWdW9wNXl5bGtpRXc2aDVpSUdUTVQ0dVJJSVJTZmowUW1ueGF5d2MwT0Y5dzFMYlQ4MXNtWEhjcVV6OVRweGtMVlhpblVVQW1pdFYrbGwwMWRxVEhTSmp4MjBJc3N5UkVoU0FIU3VFWlNRN1l5Z25SdzBEdklraDZObHZadWkwZHFIZHZpSFdiNVdBWW03MGxTVXRzcmNtYlpIbTc0cUs3YXRKdjBTZHZZUHBlRThzTzByWm9qRWM4WDF5QU9WVU1GNTVBZDhXSndnOUdMQWYxV2JyTUIrTUhUOTBqdUFQYnMrbHM0dDdHeENyVVl1dW4rSUJ4R1VVOVpHak1DVlFvbVhwMFo4cHNhdXFkbHJEL09tOWJPd1Vub09XQmZOQ2dQTC9tTFJyc0tHakZEb2c2ak4zcU9MVnV0YXhwL0ducVo4UEFuWGpFTldjUXEvU01QM1U0RmgrRitzeGdNK2dWWUVkeGlsYit5MnhBeVRCM25TQlYzYStwc0pqbFFGZk1TQm5pRlN1cFVPNXlkOUlrSTlTWGNHS0N0ekxGOUplM2M1d1NzOFdUeUZPaWpqTG1rOUxDdXgxV3lhT2UvclUranNwK2V5bDdFNk5BL090cjBUbjNJeVN1SlRsSE9CV2dwdnQ5bm9xcDV6bWlYazVLc1VocXhWdnhJRm1DLzE0aWNIRkNQbkp5dno0N1h4Z3hUb1phVUJTUUdqUzV6VGxzVWRBUzNPc3lzY3QvVWRkUjZGdTE1OU5aeU4wYnlkM2Q5bVRHeEI1TEhBZmxXazdPQlhxK3NjYkZyYlRxb29Dd0xITGt5eUVWWHpDaXhYT0NTak9WYlpwTENsa3hOZUpuaDdHZGJsV3BqMloyZGlqQTJYSyt1WFZQa3pKM3U4RVFYa1dCa1NXMFIxeGoyYkJWM2g1NmUzdi9IMlhzY1BVWkN6RFZ6L0J6alk5YXVWbE84dHkyKzhqNHFBYVhyVmhZdUVjdkF5eGJaY0taZnV1ZUczYTd6akJEamcyWjRwMHlVclFmZDUwY1JReVg1K3NTaXNuRE9jZnZzU0Q4UVlRUWZOSmpvcTdza1d0U2pXaVdFUmdPcjM1MmUyUG9uazFGWk9yUzhjTit1d1hycWU5bjVIS1dsRW0rRHlPUXNLcVdxc2dNVC9HdW1FeURZTnJ5eHVCSnJCb1VzbWlUVXZqSXlnNFZWWVZLSDZKRUNiL1Y0OTRuVVM4WS9FVDNDZE1FZ0dtbkpTTmI4bUdham54U25yenR5MlpwdzNaTWNmems3dmJsMmtZTmtkZDNud1hlZ0hEREU3TzZ2cVVqZ295cTIzZWJ4anB4M2ZKVDFsUUNNaWtuK2pIZmRUSGVqcWdjQWUzY0ZPSUlpR2lpMHdYL2RWM05OeTRVcFBZTjFBVXZZdklIY0s2VnZPanlMSktzS2JBZmdVVkdiNGphOUhDQXJSNDNSSzVLNGJCbEh6Q3VTY3VvclFuREVaM1JiZTJzT0l5WXdDMmRGZkN3SUJyNTR1L3c1L0pMODU0QkVKRUJHUDhhbmJZeGsyejMwMm5mbDNTR1YvUGZTelp6SXlXYXVsdW1tMml2VEgzK1ozUlMwU0lHM2o5emk4SDBsbjI0RmVXMzNFc1dvcXRaa0NOS1kzeDRMTGZsdGlUeU01VU1TdlJWY0ZJQkFGdU5pWUwxOEF1cGU2RnVLbGRsbVhQWFlDUnpqR0syOXNRaWI1N1hVVnFzK3NGamVOZVVLS1Ewb0dsaVVvSUlCbnM1SzNodWdya3hXT2czY3JadFdxbDNqUEl0ZkRpbEQxRDVyS0xZU0FjRTc1SnFhR3V5VUFidnp3TEhqcHFpbXZXaTlsMENHOVZRWFBUR0E3VHF3L0ZNaTAwYW5udnlrUzdoYkZ6eVhBWFFocXdSUVU1Qk15emtJRFhQbUZrUi9mTlVEWHhyT1JaeFczMEhoOVhUcFNBRnhuRkNITCtmdWJiUWFoK3dOMVZNNzJ6cGNFRXBQVmFLdFhmTVRJOEJCbmE0S212bm1RQ0s1TW94VDBjSjYzcXF2WHROUzgxQUJna2dkdWhEVFFuNUdRWWJBTmhHNXBLaFZtMHFXL3JRbHdoRGdVTCtWOFlDNXR6M1VvN2oyTDBoK0J1M2xpMTBoSU9aWXVCUUpLZm84NHNIUENvOTVnd0NCUnBqbGFua0FDc2ZpMGNkckp3V2h6UnBWKzdBM1ZleVBoZExvRTc4Rjh5QUFyaE1pL016U04zcU5sT2VscnRzSndieDVmOWJvL0pQeW10bUF6V05mMWhra2JlSW1JSUFGcXdlZW5xZTJ5WnZVSFZSaUs5alNobGtWbDFXUFVUL2NrQmZkMXlFS0JzZVlvbTJWMnJhck5aODVwQkNpeG9XNmtaaitmc2QrODRIbDlGMENFWnJhL0dmeEdrbTdONVZDTmY5b1RDWlE0eVpCQkZ0dER0VzhQNkowNmdDcXZuOHFvY0dodGZ5RTlFMGNRa0lGVWk0TXRSdFNmdW8reThWK3hFQlcvcHlDaGlBaUZGRFhOa3I3QTdSNWQ1SzREMWZiVmtabnZJWWRTaDZ4V21DMDk0Zll4Skdkd0g0WjJYaGI0ZEk5M1RrVHJZa3hLL3FSZytFV1N5NXhkZUJOQXlpMm5GS1JTQWV2R0x6L01UaW4rVUNyQUNQbzRqWkRkTi8wWWtlN3k4d25heWdFS0dIeXFUeWpFUlVGRnFQYTR4Vm01RVdLcDJxQ2J0ZURCSlFhMzVxaEQvSnBKaGdOazQ4NndTQjR6Ym10Z1hjYW5rUEcyQzVVN1FWYjhkdGxjMTVqQUVNREt3TVdUMTU3T3V6T0U5c3M0VUdWR0dsS1hYMktHTXcvSHZGOVZ2dG1OV282Z1E2eldVZ1JvY1dzSnpaWHh6MGZWTHB1MUxOQUI4K2tYVENSeDkyVzBGT0dvRUdGM0ZQVmxSTUdEalZjLzYxUDVIUEV3VWxBS0xreisxVjN2OWd5T2NRU09qUnRjN2w0OFU1c2RvdWY1RHRoaEJMQ1owb2xqOFJDSFlnNDVGRUs1TVRMVmZJS3JWaW5SdmZWa216aWJEaE5CZkluYm9EWWlzQ1BGbkRVclcveHY0RTY0K0RyRFR4aGhRTWFpMFdMa29rQ08wUFBJeHNBSmNZTzJCYkJDS2VnNTVCcW9nRThWdUlRMDE3dDF6VHhSMitSclk0Z0ZDMjN2NVJFTi9tcVdqUGx2UFRyNWZveGxxbWF3U2FyNW5MQnJCcHVNN2VOalkvQ296MUdrTVp0TjU3SW8xMVhDZi9COTFOclZLWWwzMWtENTI2OHRuZHRyNEpscENtU2Nsdm1pWFF2ck1yNEtwem9lS2R2d3FpWDJjSHhNOU9SRnJZblJmdFoydmJRU1lKeHdxdmpoRzJFRWYvVk5vbDU5S01LdjkwNENTSzh3NkhVaWF4cVZPRi9QaWFHdzlYdXp5Kys2ZFRtcXd2YmQzTjNwTXlGRG9NVGg1ZzVaMTFqRGVNUFUrOXB6clVBRkpuUy9yNXFwR1lBMG9uMmxFOGEvQVQySGo0ZytIUjZtUmIvRUg5TUpqay93OC9NUUxzNlc4OFo1U1RjYnN5UnV3SkplTndHYzBPQkFKRitJVW53SW5ncHdXY3RZL01xZnpFUCtMR0lncDVaTTRaNWxTWHhGQk5lbEQwMHVzaGRqbjBYbG1WZlVXUTI4VmV5b3BtRVNiRm5Idk1PSlJ3N1g0Q1V1U0lGOTg3RzhqVTRubFNRbkYwU1NLREowVmlmRTc3cXNLdklwMDVxa09RTm5TYjUwTkRRR2taQ1pkWjBoMXhoRE83ZHZ0d0F4QzRlelZYRm1jUE5YOFZwTkNkMUkzRmQzOHFVQjJMckpBWTdnWnZ4YjE1MXJ6Z3kxMjRNV3JNSEpKblo5MEYwTXNxRmVQWkZ4am5FN2FhNElPVmdVM2dqVnpNY2ltT0lLc096N3VJYWlPSHdkNDJCaEZ1L3JtRTRpNjFrV0lQZEdDUGdudjNJL1JWQjFjL3lTTDh4OTUrQzY4V3lPckwzeGRWdUVHRk9yczVzZ0R4c0tyOFl4ODgrTFR4TWQ5SGNuRjlyTm9FdlNKV1Q0UnNSckRrNVNRbU5FeDNOZjlnTmhVdlZEVlBSNFA3L3kxeFZkYXhhb21adDFhNzlBTGtYUXFhT01aWlJ4MDJzcTRlemVIMkhOL3BWeCtwbU9FSlhMNVBmczNXRU41R2ZEdHowQ2RzaWZUMkZFR1hteE5COXZqUERiVDJIaHRldHI5bDRtQXhBVHhmd1k5Wk9LNVJTU1A5aVZIMVJRZC9lT0JSUEtrSk1FTDNYaFowL216ZTRwU3F5NXR1NTU0anNRcG9TUXFEc2ZVYzh1NmZXNVhZelZWNTdyZ3lQZFhwZFUzQ2UrVzB4MVF0bWhCVnVCaHNiWUtENTVQRDExRmExb09OSUdDelBkYTJkVHgxbUxramZhZFpjdlA0OTY1RjFoNnEyNVpSRHJkc3JrR0pTckFQWEswUVFzcmQ3R24zdDBxMW1mWi93VmxzTExmaHpESkcwZTNpdEh3TFZaaDlTNlNjQmErU2JndjRsL2pYN3lYQVhaSTNNTHhFUWdPL1hzNlgvRmRpUGZiRlFzTnBYL01DbnFGWkVrTTgvQ3lYVDRxL2w5SzdKL3N5VndCdFArRG8yQ3VUVFNQYmVtVzl0OFBwaHdNMDhvNWdmU1dvSmNQV0lLcWwxUXFxWmJxK3lDUTdsK2JsenNodGhoUVNzUmUvRHlWdHNNRlg1Zlhqd052NjluSHB6NFgxY2NSV05DOEg1S212SVNMdndtaEVXZkRmYVJtSmVpZVpzR2ovVHY5VVhNMHpDQlhzcU1nZFJHWkg2OWQxRlBrdHo5cFY1aFhEUTA5V0tUZUFZdEpieFc2NTJ4S3ZOWkdpS3FNMFBaRG94U0FVZ1Y4YlZoeW9yR2FvV1lkYVROWjNZeS9PTU44NFkvNWxjcVF5WjZ3SmxPMWdjNTlOYTNLVEhDbWQwYzNCRjNrUnRvYjhHSDJPTjBKSHp0K2lSSGdTWGc5V3Q3OFk4djBCSjh1WDAxWW03UDlmVE5aZWplMUdZTmpPTGxlMFIyUDh6dG9lVG1aOUxqOXRBb2QxZjlra3NsTmxoRkRCT2Q1VVdkK2lvdkk0bG9IeStDd1k3NXlmTFZOT3JYNHJGeWFJUCszOHFYRlAwQkpDYVF6UUdTTFdvN053cTI2OE1iWGpCQmJ1dnZMUnVpZ1MrVC92SEIrSk5UU1RMUUJ3ZzBBcm56RDMyd0NhWWlLWWdhaTlUakJZcDlzTVNpaUFRUFpqdEE1ak80eDR1ZWl3d0tqVUlWelRHRFVmKzB2cHZZTUhLaFlPajFQL1BJd2d6RTIxQ0pLaDQvUjQ3SjRJMEwvdjZMaG1ha3hvcmRYcEk2WDZXekR1NlpKVWhyVVJuTGxrMVNzaXQrME5CcFBtWkJNRi9aSHZtL25lZ2xENCtwYTNnWGs2d0EzcUR0VXRtZ3lQRkREeEw3TnVqazVQRXJaV09FK3YyRGpaUU1rek9PMU02N0JST3hBYk52OWhmMTJMYzFZR0g0VHU3Uy8reGlMTFBtVGNPUE9NdUlMS0VEcktTQVZ6aE5zNFpaMktqeVoxRlFkUzhiNTdWU3FheWk4SnNhUDdzTzFINWtWMWxaVk9Ia3lGMVRxRzZwdHQ5MHdxaHlYeWF6SjJ1djhuS1FRL1lLWmJoc0NQaUJiN0k5R1ZrZlpNa0dTejFBWGRaMVZoQ1JuUlg2QlE4NnRReDFoTU5mWjVGUi9uaEpaK3FodVVOWXJtNy85Nm44Yk5UUzZ3SnlSNlRoN2svZEdWRnYwS01xMUptVmp5MmZhVTZzWjZNMnRIekg1S0tGOXdoMnNRSkorVlNwT0dma0NpdHdKZS9VUGF5enBiZkFwZmxWb1E5ak5MdjRqMGFGdVBJUmlGd010ZVdna3R6WDdrWktLSU1Ea2M1ZzFwbzlWSWZMa0U1ZWxwKzZIR3dDOWJqUDhoOW93dmwxei9iVkVFVkppM1Y0SEZQa25wRWVRVEcxaENzQzl1QXZDYXlLOVVXajhWZVE0V0ZvazlpME15SVpWN0V0VS9scENhbC9zNGMrWStycXFuVjAxVWQ3b3FjNFZjdldvTDU0QnNTdy8zaGNkZ1hvcDJxVzNSRTRKYnhLNGlOWU5FdzZLZHUxUlphdml2VEowMSsxVXgrRUU2MG13bzJpRnd3RFZWbVNnQzRuSW1KMC9McVFUemtYbU81MklISE41NDRoajlrNG5rTHhnWEkzT3NQa3p5elkyWUtOOXNtMk5tR1dHS3JNSVRuUStHVjBSNFJMSlBtRVBrRkE2a3ltTDY1QTdSL2dBaHlRdWhxRnBpVVJkcnhYSTBrbXRKNE50MXdZV1YvaTgyVmRIRGJUZWRwaFRBM2FOelZ6VkNZTjV6Nk80WGdxRHIrVE1IcmdBZllWbGlkK3BCKzZRU0xzTERuaXBMZlRXMVkwbUI1aG1Mc0pTQnFCWlNaTDFCZnpjMm0zL1JsdkIwbGlnNmdwTVdENFlIV0cwTDFNMnBFYXVxN00rSXpaMC83dmkvSzBjQmNuR3lFZlF2Q3RFZnBPWlF6MG9lNVBMWFZrekdHTTJaVS9Lc3pnMHJlcXQwWkdTYlpaM0g5R2xpdDVpbnJHaTNhdGJJa2loUFNEYllMMFRiZ1RScjVRSkNyVmlvT1lpbjJNUGNncXpiQUtmeW9VQ3JEOEZDUkhUYjEvUkx2WHFaRXpRVXpucFE0S244NGMyaXdmQjJ6ZHNTNTNBS1RZZGZLcXh0RmxhQlBRK2RaRDNzajJpaUIzOFh1Qm9aWWNDMXM5bEFlZ3ZPZlNUaC8ybmZpMzN6WTBqVkVDOFNrNTVoUFo2VGpxZnJtQlRwZjU2TmdCZnFRcDVpbERyUHJlY1B5VThNVnJCeVpGdmRuU0N5ZUROVCtIWnZ1MzJlSStqNThDd2hRNjN1aVhyOGJkY3pmcGRkOTNDMjNYaWJzU2VOQmwrdkg0QjlqWHFKL25SdlRGc1JEWGFjSVRyZ1J2S2dmaU81NlZkaVRPaHJzOGlGSW0zQkpXUCtRQ1FJYnZ0ajIwV3FjMFl5bHUxTkVNUzVpUmE1Wnk3a3ZoQVhKVVRCQktBN3dCb3Y3RlhsL1JtOHBmRmxaNXNXUUJ2U2xFaitLWmtLVVhESDRDdWVKelhVcnhlTGFiNVVFMW5WYjVNRlR2Q3dmVmdQYUVzWUpGYU1kVkQvYUFML1kvNUxmWThFNGJJRWdNYnl5MFpMSERGMHRkOHRNanFZMjNic2l0ZWhkTEJ6d0pyUzZOOXNTZDkyQUo5d29hQ0JXaXg4YjU3bFQvUVR1K05wc0k2YVMxd1BIOHRqMlhDcHFlVGdLbkhvR2srNGprUCsvR0FEZWM4bmM2WDdJK3NnQWhFM2M4bitGUkVqZUtBWmd0MldHcm1XTTl6VEZYbDNicXdaMFQwUUVKT1RLZllUWFFMc3l3NVRFZjZrRVdZVUpSaVRBWml5WkdLVVVPb1VVZjhxQm5sMFBsc1BldHhLSHVmUmgwRnVhd084NGQzQ00xN3RpWUl3MDVOM2N6NEtMNW9peExwd044aDRob3JTUHdidFBNcGRLTjBFNlg1SUVtSU5udEVRZWtHMXYwM29lWkcxV3RVcmVoaHBGdFloNlk3VFoxMDZlS1M5RFh0TlIxb2Y3dnY5eENRMHNrSitsRVdvU0ltODBFVUJMT0JoVTB3ekJqd1dRNmtZT3RsMEI0ZGVYeGFmZEF2cFRVdGRlZ2IyaUhDdzNRVzFJSnVtanJEL1pNUFY3VU4wWTBnQzJtdmRUOXhkY1FrUzEzTm83WVp1REpENi9FUi9zTGlPRCsya1lIc1g0dDFEdmlJU0VML3B4ZnlPbmV1K1E0MmYvT3V1YzlLS3lHa2o5MlZZU3BjRjhQNHZXNHF0bHJsZjFjUWxnYUwzM3NsQWVXaEc5bG5xMWJaRi9CcklOeERWM29KL0t4NUVOUkxqNFJJWjNMc0RnZGFRb2VBWDZTMTh1bS93Yy9UYU81QlcwME85Rk9sUjhWUE1ZL0ZKNXVCVDBvNTVNVW9WQU5ndTJRanJoSWV3L21KUmd2REVpb29nUVBzaXNja09JQkMwRzljZitVbjFPai9YbFRITCt0dmhiZHByQkxQd3V0VGR1MWNsMmdnL2UvaFI4UmN4WkdXWTdYTlJNSWdveng3RmthWldRL3RUemRIajVCbWFhdjhOb0JwZ011UVZXOXhkb3h5VlRuV2JpM3pIc21ZOGpSMVhMUHA4aW5QbGlZck9jQ1FDemw1NThldDhyMXpTc3ZaSzNKa2p1YjY1cXdrMUNIbGF3Z01YdzRMdTFxODFrUzBuMDNackNhRFhzN0VpVzZSNG0vYkhMaHVyQkZSY1pnVDRGNlZneEdWcWRZYUVSeTFJMTg1UGtEaitZN2dBaFU3SUpvSjNYMWp5Ti9ybnF1d1R5QjNSRFF2dk5ENzJDNWhHRHdnOW5uUUxqZ25BNEMydXFYSTB0K0g5MjZYa3FZdEcwcC9iTGZHN0dxUVV2U29QQWZNcFpabVhhTUZyZldzNGRYTEh4Q3FtcU1DNU5xcUpuc0JtNmZ0Y3dnTkhLUG1RU2dBTGRiMnEyS1J5M2V4am90RUk4Q1pYaTRaVi9wYlpERGdBb2lVbmFsNHlmVE1QSHErcE1WNjNmT2JsQnlNdjczRSt5ZkwyMkw4bmdibHlQVzZ1WW01bVBRSmZqaTh2TXZzNnBNY1pFQWp3eUZ4NlA3RmEwVnNYWkUrdk1yaWhqV3JoeWJxZUl5VHJ2dURIdnl5MUhGTWtkdHlRbXVPcUhJWDRxN0hMOElFWkxtaU9yMW1XK0tSNWlYZFJGWFdIeXNiVTFyRWtjSFNCRU8yOVo1Ni9lRnhRRFdiRVQrOGN2YURwSWRDS0h3bys4dGNPcnNpRzhOdzcyWGxsWktnZGJEZUxFMDNraHNzdG0vaWZHSzJOcFJjTnRrYUx2R1RmUHozRTRSQ203OSs4UEs2RklpSERuTDQwL2dGRXBMQ3R4ekIwbDV6ZW1hQUJ4b1VLUStxd1N3cEJSa0pRSy9sUllvME1IbmdoeFR0eGl1dG9uMTdCNENEOGhBUkhSTk5vbEtlaEZKVjcvMUt1anFnQmFBTEJtN24zaWdOSW90ZEFodjN2NitTTVM0ZWN3L1A5aHBsNUozQzFSTkZnY1F5c0gwcXBQUWYrMmxzMm1BVENoYWZrNVVrTGxnOEdZN0c0NUtXV0d6QjZ2OFdvRWFoODBQUGhaakphamhYQ0ZQbVRPaVpMMzJZYUNVeVdYdmlZVTVmdFAvQUlEWjNiRENSNUZna2hCUU1tVk1vQXprc3Voc2o4ajdGL0MrZmprWUlFVWlTa1ZHODdRaTBwTWM1S2RyUzVCczJpbTMrdFE5anBaSGNTc3VqMGRHbkM2VUtla0c3SlVQRjVKQkN2MkwzTTdaMERqMlZHdmoreklXcHY2VXBhOFRXbnY2TlpLbG9HL3dla1pGd2dKQzdjVWczNld5N3B1R3NvaWRhNmpGTmZkM1dvS0pjM3VsY1VIMVA4RmNJU3RjYjJjcUdaWTZENkxhbzlreTNTWXJUdWNQaTN1ejFoRTJKaTdJRGtKRFdsZzY4ckNrWnNiYlUweFlSbzFKdFFFN1k3b3d4NHlzcXc1WXg1eFRpNVhzUW9lRFJ0QXU2UUR4MnBqYnJBN2k1TEhwTTBOQ1dyak41V2NxMldtSnF3VFdtSk9LanpHTkRMcEJGY2F5eEhwbUVoMStLdkdFR0hCQXFnRlRIV3p4ZE5OOW91SjJNZHdGRFNjbzFzZnpVREpIZkhpMGpCRk92YUJOQjJKR0dqcVJ0WGtIU3RrUkRQQzhxRjRlbHdjSFUyRjE2ckI5ZFJjY3ErdUxyczNhK0VHazcrYzk0MGw3NzNCZDliZG03WUMzVnRxc1VDWXpHcjhmUnJQbEQzVTc2eUYxM2hkVksvbzZWNlpUdklRNGVUSlZHMExJc05tMmcwWXlOMWRGb0s4S0IrSlgxUFFxdkhBWjlrOGFNUUJvSUV5QldYdHNGNitOdXdYUHVGdHhkZndUaHVJZTBDcGZScDFNY0xrNjZiNW1CYkdUaUxNNDFtM0VwWXhpRDNyellzZHpibmRBVTRjUkI4TEg1dzF6QkZ6M2k3R0o2OEJaams0bS9kMVh5dDlMNzVNRU91a3h4dW9HWFZUWHkxaHR4dUtDU2hBRzZLOWpWSnR4d0dwL1pERzVTc0JCZXdCTC96ZnZkSFYzZ2d1STIvV29HOXBrSjhVckxyYjFDc0NrTGlXYm56a2JsVUc3YkQrbXVXaXlnMXZvWSsrdTB2NU1VMFZPNW1YNk00OEpwWGRNd3djMjY3YWdKY0RLV2ZabENCUWpkajRZWE9qRitlRTk3ZFNxTW1wNURZSk5rNDRXRGd3Z0pvK0R1SW9GZGlvaW5XdUZOamdrdGtFU0FDeFVxd2VqaCsyUkt3Qk9GaGZWRjgyN0c2Q1B5UmNPcmhyQnRJVXp2em1sOGdBUzArMjlHMS9TWDc2MDVYcHdjYnRGcXBaZ0VsWlNVb3Q1M09PNnFXMzJaRVRuQ0FCdmt4RStWUmxrZkliZzRwWTV5eU9tQ1ZFenM2ODVDT0dhVGlhMFNUTTZLbFp0RktIb2p3WjFGcEprblBZMDJlV2djTUU4NmVzUUR6ck1HNFdQcVRBa2lLOFdSRmtjSnQ3c0lmZnNWN3djNHluRW96eUsxTlNibGoyams1Zm5DdG55RXhIeFN2NGZaRWkzRm44ZndEN09vbFhjeUQ2ZjliZHpDWE5QblBXREtqOEpxZFdnZnpYTExTZ1MwOUgyb0djM0N3cEJkQ3pCUVQ4Nk1Fc01QQWpaUzlhVzdZSmtPb0JmZ09nSHJCZEs2VTRFS2lnU0F0L1V6RGFJNkRmaXk3YVVKcVluNXNHbzhwMG1OdHNtMkxORlpCSWEvUDErYU9lSG5FZkJBdlZTV2VpWk5sVEE0SlRVQTNZUGcwQlZxenFWTytYb1VTaUw1K1h6ZXV6cHdmK3orZ0FPK3VwdXNIQ29MaTJWRmx3dU42NjNka2k0eFdQa0I2UG9SYSs5UlBjTnMxN0ZlTU9hcXhhYld1QVMva3hOeDMySE15Y3dhdDZOVEZQNmladTBwWXRqbnYyQm5ONnJwYXRiVDh1cWx1NmVXSDJkUno4bWNEd25FbWVteTg4TyszK1luSEZEME5lMHhVWDhkNEFhTTlPOGc0Y2E2eWpvWUpHc2YrUFpGeUNsSVNCQ05pTGcvdWs0SWF4WG5Wd2Y4alRZYlErUFVqd1JGOG5CdEd4bW5nNzdjRkhTa2F4VWk4SVEvMmFMUitHU05GMTdxdzlPeU9JUzRyY3UxTDAweXhrSTh0emlaQk0xbGMwQUw4bkpOUGJVK2FkbnNEeHBsOGZic0o5eG9TS25TSnplUUVXcTdIWTFjNTNPMkc0c2RFMFlTWm9tb0Qwam1oYVJCL1hzVEZLd3dxc2JCbG5NdTJ1MnNlVC9xbExld1d6azhWZzF0SjdnQjROOGMxaEdpaWFGUVZkQzQ4R08xWDByd29yZW9IcmVwSFRYV3EwbzdzMVlka0JueGJwRTJWZktveCtaOHhrWkFMNHR1QWFiOE1penZiVU1IWHRVNXV2dkI0cnRZcU1zRkxkNXBSQjJleHIzaTJqc3ZxSGp0M3czZDFiSVZOdExBZ3BGNlo1bkQrcml6ZzlacVF4M05uZ3FZbGdYVERXRUVMOENqRXRhVFBnVjRoR3V5UG5ya2lERUkzNWxCTUUrbHV2d2w0eGxSZzJxeldQRlZPc3c3aUJJdTJXcUYzNCsxeXZVZHJNS3FWRTdoQk91MGN2RVU5UzVaRjVUaGdrYlRJRDdHenFiRHhvVXM1eHBRei9ONklKSElVS1BobGpKUlI5RHgyaEhXemtwL0pEelZLb0Z5bEt3YTBqRWtxaE5UaVJWeTFFaTRSTGQvL0pjVytxYUNKb253Z2lmRnFGZEZQcW9lTnJXNTFiS1h2d0xMc2hpNGNhRXQvM0xBMWViSThCWisrQWxxSGJYZlI3SUJCWXdlaXdYRk02UjMraEt2M3A0blovMGIzOG52cTQ3M3FMUlo1UXdpYS9HbUZYeThxZVRqT1Nidlcvb245REE1N25ZK25kRERsbUFnQzQzTjcwYmtTNzA3S0JGc21rMlpjUlNZdkRUVUdyZkN5SFdYSUxDSEw3M3RuTnVNNjRiTmQ4d2wxSlg2Y0tQODdycTFOM1FHcG9CeVdtRHFvbEswMSsxYTNsVGh1Y2ZFVm5HeUw5NCtnOUsrc2NFTGE2TS9LQVBYL0pWcWtRYkpOelhISjFqTDk1eUJoRm51bEdXamVLYjBKejRKakNRenNES0lmY2x6Z1YzSHlsRVc2NVRyeldFNTdPRjlsYmFhbGthZzgwa0FLaHRMbWJFaTlITWN3NWVuSSthQlArTDBLR2h4dUd6OFZMakhVVktjTU5QOHRlaURFVmFFU2pLZXUxdU9pVDE2bEdVeE9XL2xVRDRGWm5DYld3V2RlcG1GbW1xTVJQZXFQL1d6a2FLdWhOUVFYaFhyNlBUazJrYzZEWGlhNGZxTmY3dGpPWjR5L0hiZG9jNGE2aldPTEdVaXlxb3lxNlNPR05NRmZvaFBaaWlrdjhoc3VNd29SRVUxZjJlMFBOVnV4d2Q5Wko2WisrRFVRNmZhWmh6bWFwTm1IdTQrNGpZQVJIZTY3N2NuSkZ5bnozZG5IRXBwekRNNFdaZExDb0F3NVMwN3hMUk5aRjNrOHVmT2lCTnB1M1FBYmRicDV2T1huZTd4REhybkhhQU5vNDdBMFFHT1pNc2t6cHB0bE5ObTIzYVYra0UxYisrR0VITGp5QnNqZzV5QzRrS21zVGZUZlZSNUluMGlaWjZYZHNBcVZhenhCSG9zUkZhVUdXeXlGUXJSRnFTNExuaEQwTk9vZkw5b2xiVTV6blRKK2R6VU1makZzbGhnQVpIZnNLVFhlUUVPR2RkRzRmZUdtbmYxMVltRVZsbFJnY3g2NmxNOHhmblJiUU9Eb3pJSkRHU1A0SW5lS3MvVDBMSkYvOEp1b2RjUDQ5K1hLMXMxd2lMQlNMbWl2am9aZnUzMCtzNFdRcE5iSzFCZmFMRVdqNXFqY3JxMnB0V0dBMWFGK1BjTUpzK3NJY1ZJVzRaMFpHaVBVdnJKRkRxUmVWaFZQYWFQUGh2V1lUdU1OeHRWenJTWmQvZExJZnczMC9mcjJ5Mkd3dEdtVXlEUnRscHdva01UNmN4RnF3SnFuOGZNZnI4c2lMdkhFdFJsTWRNbWt4cThPVGd2WGRNT0tETnlOVnNxMUdPYUpHV1JqRGJ0Vm9UcXoySFVwUGpvNWhHOGQ4VGNkVUNLajU3NW5MaG1lU2lnQnNBcHNyTEl6ZTJEVXRCOXpPVEdrRWp3THVWQ0o2OVpoaVg5MDczQmdXcllISU5jN0J2UndXK0R4RTRNbVF2b0JXMENFN3JJdGNCeFVtYlRJZGhaUjJVMW55UDhTMC9qWVNYQ2ZUbXZZcmdRMFlROXNla0ozOXpVTDNvQ0hSbklDdzQ1d3NjckIwN2szdHpFeUpBTDR6WHBQdFZpNUlWNXNPRmpJTkQ3MzZGcTBvV2lFcUNRL2RMYkJubEZ0cW8ybGd5NkhUdWUyVjlEYjZhNytQUXFLNWdhWnB5cm1pbmlvdEpWa3N1cUhaNzJWSXlpME9MRDBYbkdjT3NzMUQ5ZEJQNGhQRVdNZE1sU3lyall1TkZKSEFDU2JDM0QxcmdPbWJBK2k4cFpNRmRQYThxT2lwckpPenZNZVpORXF3R3A3TTVJaGxaT1hGVi85Ry85RE9lVzlacktVK3pBd1dHakhwS290TlN6Y3YxcmtibVRsNnJkT3p6WFUyejBzZnR4dERpN2ZxcmlyVUhuMXA3ZWxPakhhSGk3bXlmb3cyWmlpSWlYY0tab2h2WUF4NEFxYUJaSHhrZUtwK3RZMWtRUG41MC90Z01PNVR2VmE1MlpJR0xzUkRoTlR4dUFPQU9vb1k0a0NsdzBjRGNWMTVUYTlpMmhGam9NT3FTRE1sd0w4VnpiTlJzd1RpempSWU9xaXljZ2dIZjQrKzRvNHZnUGJxT3hkZWZ2N0ZZbXdZWFNDMEwrV2RDeGxVdGJFMXpEZGVnN1VXZnM3cE9KQ2RRak5FQmorZVdhZHdpcjhYYldyTGJsUmZQbkt3cmhpUDdzNjZmaktsK05CdlMvZ3lFQmJhMlVMYndTdGZUazk5emZ5ajR4MmV0RWJ5MkFKaWlDcHFGSWtoK2lMUUkrdllsNWxiVjUyTVZwbTRyS1NhenlFM1d4VVdyOTFMbXBwa3paQXpqT2drdHQxdEVJYUZ1UHJsVHhVN0FTM3RzRnlOakdZU3ZRRjR0K2ZNdkc1NjZWaUVqZ3Y2enVZU2o5Y3RUNkhFaDRLSU95djgyYlpkUDBYN1NNa3EyZFV1WGNTYURZZ2ZaTmRWeHZ1dHFzL0w2UFlrZWUzUVZXajdTRXBlanQ3OHc4V3pEcWFyQ1VCMHJzZ0NONDFCUzcrdUZwNGR6NzVLalFwWStBK2Jzd2NlbGQvRDRxZmhxUU9OOVUxRERMcUtuSVRpNExBK1VvMEhmWGRHNnBtdkZiZmtpckZIZlFXN291eDRpMHRydzVRQ3krMG9icEJDaS9sU0dTQkllQkZwN0VQRktNVXlDeUQybkVvMEMyUnpGeWQ5SEc4WWVQaFpTUlRIZW0zMmgrd21GWEJreUdGclVJVWtIRGt5dFdKODBxQWd2dll2ZitJWkZpM0dZb0dCNDNuS0NLU0E0ZGJlV3pVZmZGSzVjekxFVlRsWEF1T3BLdHZYQ0pOSU1UV0hwbXR6eVJXME80SVBxS3hDL3hJRkZ6aWNaZ0VtVHNlQzlDUkxnYjQxczMvWitDNm9xN1I1NXhzSE5kTWN0M05OVkVuY0V6V1BmSTdoV0ZwYjRGMjgxcDd6ekhIM1FIcytTSmJadEJBRjZxVjJTeGVESE9SVTJIZjlTL1lEMnpYODArSlhiOU4zQmNyQkhOY0pETFh4UjZ5REkxN1FJbjV1emhyNE9oK1JIOHVTRUtWTHZNWksvb3U3K1poeGlKUjJiUzljR3Y3L2tJZ0ZtVEpNVHpHWUl0RjhjbnBBZkp6Wno0Tk1WMytqLzZJSlF6blZoRy9PNHRBZDBjaElieVZhVzhlQjEvK2Y2YkE5VE51N0lyZnBRWm54UzZRNVdIRGJ4emNjaU9MeDliVGFYTDFtVVJOK25LVWh5OGlydmoxOTZJQy9VcHlkRjZZU3laZWV2ZmI0aHZyeGlYb3RvTTQrNVY0bnY5SEtjN3VVNVk4cnBwV3lQdE9UU2FlRkxjTzQ0TzAwb3NYQkJrVW5SRytQUzBSK3d4UTdMTnhvUk9PVUhhRE9hZDNyK3dQY2cxM215T1VOYk9CUGRJclh4Szl5dHNGeDNpWTFGeURSMnJKenR6M1NhaGZIRmZ4dmJHMDdyTGlEcHN6RTBQUndtdERrc0lJYzVHYU5DcUhkdjU5OGEyWDZXNStMa0VQVnA3QjhMV245aFphU2ZIL1NJZEthdUkxKzY1V2R4L1dKeStyVFBSeEJaQjZDNC9FdlBSSUFQTFhlNGNSb0dsU3FhSi9pSlY1NEpucmVmaGhwUnY2Z0xkd29MVEJ2ZDBsUnc2TnYzUEZoMjFDdWtKZjBIcnZnODBGak5icE9TbmJuWVoyT2NrenVpVlZydEkxb3Q3UWlBdEl4aSsrUjNpY3pQYWxHNTlqTG5zeFFZR29DV3pZYTJuZUZFdkVBWUdQYmJaU2J2UHN3dVNBdWpidEZkalU5QnN0MDAxR0QwZE5iejN1b1ZPRkVDaVNvOGw5RGEzdDJCOWR4WDhKOHBaSXpKRDZ4WVJJaGxVcnlkVzYyYXVEMEtHZ1pCQldRV2ExRFVPbExmQ2grNmhzZkhqNnFyKzk1MGQraEEyYldYQ0toaWdQeDhZL1pER2hBTUY4NzBPQ2l6eUJXR29LU0dHaDRFUFJQRnFSU3FZZHVCOTdsWnBTQ2F6RENEOXBRRkRnaVhqR2E2RzBTYW1LU3F3RGtzZHgxUWJFMWp1T21scG5INThFNWFLOVFhaDZGdVdRWS9jNHpsSklMemZFc0ZJTzN1U2hNVUJPTWhVM01QdDhoMS9MQVBsRlpkaWN1dlFMdzdJekdORG9rc0dMREFPVXMwbWlMcTZWSGZGT2JGWkRGY3NxK0ZjaUNFRmY2ancveDFsSlV6UGUvVDBheUtXTmZxL0IxNWxYVG5mZzFRcXNOSkxtOHhQcThKdWE0akZIMnp6SGJCaEI0dGNEMUtKMjZnU0d1MEVVMDRndFRtVERWL0dCOWRIR0hzRVZUQlpoUE5MZnI1dGQvME44cmUyUmtQMDF4TGc1N2h2T1hBZXBrclpWRDJIUlcxdW94ZlAxSG5NN09ISUlKN1o1VWc1Rmw2aEs5WHpSTVd0VnBscmc3b0gwMGQ5cHQyQjZQSkhGN0tVeVZ6bFovYTRqNzlKZ3dhVkJRVmhkd1lOdDk0bFovZFQxSm02ajFncVhjK0p5NHA0aDZhWndFOFcva1lxbnBEMDAwcFZBMzFHeVJ6VDJMTjYzQS95TWQrWDd3OFBjUXJNYzhkTjFXenBPNWhMUGpENXJBbTJhSHlQUjZEWlM1Z1F3b1hmeVd6UnRnSDBoKzMzWmNOenlkLzhidWh0S014L3FZVlVMVUFIOTZIbEZTK0xiSWdnRlVXYk1SQkxLbk0xbGhGSVQ2TUEvSmVlVE5tU0U4ai9DTXQ2QlRpV3U0MEt0b1YrZUg5d2hMcE5Td2ZZWEo1dVF4NXNFWVp5cGVRWFBqR2dYb2NORnU1NVU1R1ZLTnJUcTJVQXVLNTYrMUhKRGEraHptY2tCWWFsY1Z3ckJjY3NQL2JMM2pleXU1MmYxUTNMd1l0dElWSEhJa0VXSzFLcnE2blpxVndFMDVPNFcyS1pJNnQrTSt0dG5CUW1kWksvb3kvektNakV2L3RpNFVEUzlqUXBuakRJb3FjV1MvRHAvMXBlUDFsSnhna2p2RVVTSTVidXpTeEYwRDExMGY5NnB6QzV3WUVkVjJJM3ZOK2I1dTR3UTNjUDRta1dNd2ZCSy8yYzhUZnlNQ0pvM21QemQ0Y0pibm1xUkNwV010R0krQ25jNi9CZ3lnNjdmVHZDRUNmNW5KL01xMXMxbTJxNXIrQjQ2QVI3TmRiWGM3MlpJdEp3cmVyL2JxYnpjbHp3cGVzSUFVMGlLRzFWeVBDMmZxYjZKSDd3SC9GdzdJaVNxU3YydThiaHpyWExoUGpyWDluQW56MUxLbjNEL0Q0Z2ViWTVwMFdWdEE4RDJhNC9mNWdscUZ5RkdUTms3T01BY1l1WHVsYWcrVDJzS1JvQ0F3ekk0RU8xR1BoZnUwNEMyS2xEanN5MTkyVHRQVnhmd0Q3ZlJWcXc4ZkhZWjJNWm9qcjFjL1FhRFhCaDROOHpoMitDL2dTUW9MYWdJTnVTTjVBWkRiVmdxS244dkxxdzNBcFRUTDdsMGM5LzJDYUppV2pmbGNEdmNiZ2VIVTA2VkFqWER3SXV2T0RVTFJUZHNyY1cxWExubjBXdmRpUDVON1Q5QjhVR1BGd3o0MG0xTWk0WjBXMnp3K1RMckp5NHBpTDZObGhGZ2hBZ21ob0pFU056c25DelpTdXljaG1GNlY2ekplOUNGK2FXMzM1S1lHZHFxVGdJMHJlWkoycXhUMXdWRHBoYStnbnlNd3I0TU9XR2FZM0JvdUlZUXFDYkp4RG9CSjJ0cjFVSW9hMnFEZUpaSU9kL3hjRHRhdDh5VEU4MkxQUXJ2Ykg0TGxOQWRWMHgvdWU2SVRMTlJWMzA0TFAwME5UYzFpck81NVFudk9XdnRXVWdnTE9rdWRPMDI3MGMzRjdBTERXR2RUMTFCZUJyTHJsL0lTVTE1TjNnUFVxOWNWaWRTNkhxK3NhZFVxdjl5VWxnejVOZ09KSVZQQ1hnaE5GaVIxa2ZYckl4TnZ5UnJJRU10Q3ZyY3JnVE92TDJsZW1VTGJkVERwc09EckkvSmZzS2ZKcEdhY1hFSStyMTlDaW5mYldxa0h5aXVMVFNsek0zN3dwQWpHUnFNWkR0Z0NETGVBN1JBUUI0eEUzTVN5c1FrU0wzeDVjaFp5YkFhOWRWN2IxZGtwNGZYdktyQW5FQ2JJb3Z0T3dpNEtRV1p0eG5xYVMvVzFYUkJPZUFrY3VkUDRNem9MRjNaK3lkNjdFSk1jSllBN1pMcG91M2NsZWZtQUVTMndtVnQzNDlEM3UrTEI4VnJUUXNqajRzUmVMRkVtVTE4V2tXcjhmOUJNMG5IR1A4eE9UK05mYmkwcGxwZUpCRXZkWkltYmZucjhyMzMrZDA2UHdMQXZncmJHWXVjWTNLejlUYnp3Yk9USTlib2w4RU9HbXc2NFlEd2tWczFucnZ5U0xiZ0FNdHFINUpQWXlteEx6TS9namFHczJ1d1N5NE1aaXFnUE5lczgxWGJWeWVSdlBKU3RqMVNPM21OWDlaNXJhUEFCR2hLWmJ3RlhFcTA2VnJQTnNmRVM0cDczZmhyZ203SDdtOXlXL2h4d0FWeWx6TGJBbTR3Qzg5UUxub1VJVnpoYlp3Qk1Ra1RIalNLZ1JWUEtyblNVUklNeFAyYnkrcHdtY0tXVFF0dWF4cDlOc3NiWmFMMFd5TitIdk1lZHduL1p3bXpVWUt5ZGJiUG5ZeEVTTjJCWXZUald4TWtCUDhnQ3FSVFFTdXdUbkU5WUZpOGJFcFEzRElZenJZR3lCLzBNOHN4UENKYTB6a3hud01wWXhtNjFKazVLcWF2THF4YkNrbjhHQjJlNkhJcngyZVc3V2hoZ2tlcEJ6VGlySlM5S2VLWWY3UTJTckZTZFh6aW5rVEM3VGdQdkxEL1NGUGRseGNrMkxURnFoZkVCNGVxOTJQdncxRW83dzl2NHF2TUZxeDY1TktMSHV3Z2ZUUDBmdlRtMCtHYUl1czlETEwwQmpKd2R6TTB0cUQwMGtsUE5CempHcG9DaTFRd0xka2xVWHRpRG8yM3dPaU9HNUo3eHFxbzk3anRma1kyUjFhaVRkWjd0WWhLYVlQQXlqbnVETmtRRmtFdG1IUWluSmJrNnBDS0ExTTM0SnMyenBHSzJEcnVnWEFkaVdlYXNRRDZnVHpYRGRQWFR3NzJnRjF2Uk50bWl1YUZkWlFkTjBPYy9zQ1NYNFUvRm5pUFBrd3hOenhlYmJodWhXeWkxSmRObC9lNzJNY3h2YTRqcE5qNVZZRkpRSDdPWkV1VXZ2aUR4akdLQzZlMkJpOVh0bHNaalkxSUtxMFNDM0ZwaUJhTjNnSnFPT1IrUlJGYmNROERHL3VVSitheGpyTTczVXRvOWFGRTJyNWc1Nkt4MStDNDRuTVY2cWU3ZzRNTWJwckp4TDR1Q24xdExGa2czUGpaQnBCNnlBV3FqWDByelBoMWQxSk9PQ0tYb3c0SVU0aUlRL00zM211WEhvejhFVndld01GeUhOVEF0NTRhd2xVejZ4R0MwNjBHUlhiSDEzT2puQ3VvbnVOYXRDVzduSlhxbUFlalczaWs4TTNjOUpiK3dlb1QwSklSMUxrQ3MzYlJ4eXBGSVZXNTJVajQ3clBBalpDaFVJaitMWUhaaDRSWkRaZFJDTmNLN25iVlp4NzgvbUM5QWI1OXhXaExxOVZicWV0VHFFdnEwclBXTVJneTR2QXJlN1I4Y2s2QkRSK0owTlQydnkySDNMYmZNWVd4Y212MlRYUTRDQ3I0YWdxRU9FMVBGaW8vQ1pqSjJpWkF0YTBvVE81UFJ5RTk1SnJ0UENZdUg5QlBEaWJXeG03WDEvOG5wTHhWZC9WM2JCamw3VEN2R2VIWDFtaWhKNndGOXl5bSttcU92MGlMcVM2OTM1WFpMYzJ3Ui9VWWExM1dSZHBoVm93OUh1M2g3Y1hubFVtNXB2bVY0NHRMNnN3OHR6endWNm4yZlEvTEY5bnovUDhKSnZYeEdCdzlqWk1HeGF3M2IxZUtHb1JkZTZIOEhPUmxlaFZVaEsrNHY4VnBZbXJYMXlvZ2lONGJocDgrZ2VkeVlXY1dZMGVzS2JQc2JpeDdUM2FyYy92SzhFZEZPK1FPZGRHMGxra2lQMzFFVk5Oek9oMnBPQUttNkV5QmhzLzVnc0k3c0hkVFIxY0l0SkdjN2pkUXVWR0g2aCtPRGJFdFZsWWphSUFhSDNLc0FnODE3cTlSVU5zdzhMSmxaMzY2VTFGRFBYcm8vWGJrbHZnYTF1RFZqb2RjVnBhUTlsYnlPem1MeDlLcmlaQnh4dTk3U2ptMmFiUGdHdjlJSm1PalUyOWdxTEpmbTVtaENpV3FmU2NPSldyVVE3WnUycmxndTJkc3l3Tk9TSVR3SHRYTVh0a1BYS1pJNEpBcU5veVJCUVdqVjBPWVFtVFNwemg0Sys2d0NFMjBZSFlRZUlrYWdVWE5oV2g3bG1wcUFDWmc4VUlneTYxa2UwYzROUk5JTGR1c1MwS1hrYnVvR21LUWs2bUZRUDkvUy84K1YxQmlmOXZwVVd4aktMODYyenNmR08vL2VKbERpTitEVkNxMmtaemRiUHZOTmxYRndxdmVxdnRtM21RQUxxSXpXMnR2bHNZSWEwVW5oUlpiemp4aXNMUm9sOHhzVnBUWUZsc25GbFhmQ2VsdUtMQ2tVb2lOSFM0MDdsTlliN1Z1L0tBbVRyWXZyNnNQSVhRQ0hpK0NZUVRjeU1aUXpHdW53QllEVGNNc1FheEVFSC9WM1R5cTZsUmovakhEQU5KMk5yWnp6QitzWVo3RzFNcnRJUmp0MXNRZmY3c0hxL1hrMEp1SGNUbW4yLzVVMTdCRktrdGV0ZjJ5Y1EwbHNOME0vWEJxQVB4and5OXBId2VMblJCN1hKYWJOY2lSeGRvREFiSVhSdG5Yd0VYSkpjZk1uSVNJaGt2cGZXWW45bzVpTEhWVXQ0czlqcEJJNXYwMng0VmJ2RTQxcHFPY3RaMUZhbGptc2VSLzI2cmxBbmpwNTNxNXlCaDFrQVlBYXNFL3ZsMzNjbHIycnNDSzZ6Y1F5ZmgvTE0vVmZoaVQ5UzViemV4Q2ZodUNBNDU1Mk1OZmZpVXdXOWpvOTdhcEZjU1QrdllGbGswRW9Gc0liSmp2RUpid21YU3NRWG95RXJoZzBWNTh2Y2pFUTRWL1JiMkhRR1AwNjluMlV3ZHc4TGpnSE5iUjlDbGdaY0VUdDNEK2RHN3RIRHRLLzFsaU5xeW8zdjlIU1ZxMkRnU0JTU0xwcGQrQnduQS9WczE4RWxmNUZleDVrYVNDMGF5anI1RDJiYjlzWTdUZm56bjlWSGY2WHkvU2REcnVCUjN2aENYZUU0NU1FeThDY1lGZ1NhRnhqNXE4UGZDSzlYcGFUUmNuQnd6M3pQNENGUnZTTys0ZEoyR054SDFaenh1SGNPNEhYL2ZpQnhtMHVldFh1d2sxRDlPamhnYjIwK05KaVpwbFRYeXJ6NTg4UTh2akJvaTFiOFFSZCtobUliZTkyeUJhaHhtbC96bklmSDA1VzVFZ1ZKWERPYjZUUTdROUliMnpmUWlNZmZVQmRMelBtL0dKYVVzQmsyUVFoQU41RGpKUThmWFV3R3BoUGhiUkdLVzIwYlJHL2krdGE1YWN5ZnBJZUJWRXdPMDcrRVZDc29pMGRuMVp1Rng5Z0lqMTlneWdUTEpsOUM2cGVHMlJuc1pzKzY1OHJ6Vm1nQ2dTRmNTZjBlTlgyblAyR1FOV3kzb0owbW1YZTBzS1NJYXZobnNrUmtwd3VzRkJDV2hZbGREd05RSWE3dlV3NWg1THVvZVU2dVQvT1VVMzFRQXZFYXI0bGIvaFdXVnYxcnlOK1pmSWVsR2lXV1dxZWE0dmVTV1lXUDhXL0U0YzJFS0I1Y0E4aHQ1WHFIM2NrQ2hEdnFOcEQ2S1Y3bC8zZm10STlEL0dCbDF4SVczMUNFSzZGdmhPSDg5UTYvRFNndVJ6cHczN2RXM1JqODZpYTdKakF6S1cweVA4SUQ0VGFXR3J4REhTWWd2eVZCMkhsT2ljb1NCNUFqYkh0amk3b3M5cU9MWUpTRFB3dG45cXdKTllaNzVDMnNSSHZzNUY4RGp4YnJZNHdra0JsWGNsMm5BS2gxOGJaQ1RyWDRMQ2xWUXRQK3JkSVlhQnMrd0tsSXFITHNGVll3TUV2TDJ5M1lYU0g0dndUcm1QQzRCMWNFR1NTSnlnV2RxeEZQbUo3enY3TTUvS0R5S3dlZ1ljOTJxYUl6RWlMekx2dXV1RTZCOFBqN3dDWlo0UUhyUUVDcHNIQTVQa29Va3p1ek9SODQxdjNkR0pVRXowQllxYVN1VFJQSk1WTXh3Wmc3enZpNG5SWlIvU05RMWRncFN3RjQ1QkdxU2pWekQ5dzVKT0pxSkZGTzg2dGVxMnFBUmMycUJIbXEydit6M1AxeVVQSG9rNTdNL0IraFNtMXkwby9OS0ZQa05iYlBrRVkyT05Odjd0SjI0KzhZZktZQjJ1S1JBU2o2ejBCQ3JOWWwrOFhPeS9tZzBKUWNGWGhUZm9NeU13QVA1RUtSNU81QVBxejVCVXRNbmRjTG1hN2sraExHRHM5Wm1jZWtFVGFqdkRMa3E5K2FkTHIzZ3JxeEY4MWNzcDlpMkQ5R2JlNW94QXdqREc5dXpsUmwyNkl3dXpYM28yclRKTUQ2MCtBK2JsTWtUckxpcGRMeVp3NzM5SjBtcjV6R2NzUVNsM0lwNFdueFlwdVdtSHNDaWVKekJPQjNob211MjZjQzdtK1lqQmxKblA3SVoyUmM2bTZSbFZTMzdYNTJBWi8wUmdZd1RHWlRBaEFzLy9SQ0xGb3VQQ2F1dUw3WXpocUZ6Y2JpQVA5VVNPYW4vZERpQmZNcEZ5RmxQSnh3aXJCWVppbnhLOERTMGp5cFNvRnZ2dVFOTWo2czR5eUxjSElZcEd1Z0Z2ZGlJcm9GZGExM09KZ0Z0WGVobFp6QjduS2pmbmF6RThJdFIvemNDNU9sMWpraVR2Z1Z1YzJPK0o3dlFkekFCYTIwdVh4M1piYU5LWXpLREVjejNhWWpTODNuVkhYUzhXb2lHam0rSEszNDAvZnVuVzNaKzFTNE9rV0lLbm1EczVZQ2ZpYWl5SDFqVm1POUVOejB5SXdPRldkdVd6V0RDazhjNENkVTdyS2o5WDJuYitqQWdKRHJaanlHbmY0MFdBSVNEdG1DbE5GeU9ZN09mOGc1TFozNDdhU3FFZDgzREcwZ1g4QmM3WnFDYUF3RlVvWGpFSm5ndEhoNk04UmI3MUlvaWwyU0dqcWxGMnV5dXVrbEprajBqS0FBdHJVcHE4cUJveG9WUVJ2USsyZ3pFWjlESUNPZXVGZkhrWXNkK1k2K3F4d2RVNXNXcVlta2V4LzN5VVhoc2trbEpYM0xjY0RFakZoZXRIV0tyL1pXc2Njam1ZK3c1NlBPZEdGdUhzYkdTZWN5TC9QL3ZMMFVMMWpRVFgvaCtXM3k2cnJqejRHNDlFblZ0SWdEUkJza1dXd2NOaTgzY05CVzVYaFhtR2ltTVh5WStkb010NlFmcFZCQjNNVnN0aE9CZlE0NmliV0p3WDV1WjJCcEJEZXlJZzBPWWVQeU8rY01Ka1dLdWlHWWlLMW41WFQwblQ4SW0ydGhjeUV1VjZjN2NYVXNteEpSWFg3YXppSGV5aDBGOW9KRmJOUExVZTV5bkw3bHRqV0RLMzJqSDZ5bmtGKzBPbmdsMnVQWURSbDZ5Z3BWTkFkNitKMTl0MEovTE1pNG1PMTloZHc2cTkwazBxU3BaKy9TeGxNMFE5VzY1MTJtRlhZRUZnWUNxYlRzSy8wYlBxa0hCQlBtVSs4ckRjWllaVlZiY2dHWjFyZGZId2FxYXd3V0VmeU81SUw0WVNtNXZLVmtpUXI3WnJUZmRaNTFYTndFSDlxdDZ0cEZhYzFOYjZUcHlJV1M4dXJuSDNNMzNFNHdoeWxzM0g5dVhhbkJVczJLaGhZYjFjeHdnZnIvWG8yR2swdWgwSGQyNkx1cWlYVHREcTM1LzVBRlI5OE1EVGFrUFVpVXhBZjZVaU5IVU16Si80WVpZOE1PS0tKMnY3Witqa3FDaFBqM2ZCSzdMUjRLYWNVdGFCZkhJSjdSYit5NmUrQzVKVHdvZkI1eVhlbkNSU01pTzZ2ek1DNVFIa3NXZWxYa09PTmQyeFFmVExXVHNxRkpGWFpLeDE2QXFocktWcml5Yyt2U2lyK0dhN1R3NXVMaGlVZDZqT3ZNeXBhK01CSWM5M0tvRkQyK2RpVlF3ZmFmVFRZMXcvUk82dTBiWitrTHpPSnFTTktUODhPcHd5VmpnWlcwVGVRYUNqM042Q2NueTBqUk1EcVhRWGxXU0l3SkNRS0NjUWFpMnlNM3ZoNTdObk1KSDQzMjJ3RlV5eWIzVCtKaTlZNWJxUWh4cGRUK1YxWGh2ekoxU0FoNmRzdXFLL3VHUGRSdVRaMGkxL3pHT3V1ZE1wdXFJSFBGaEV2anpJbHNUYkx0ZTJqOFk1VkgyR1hKRlpYTjhWWkxCbTA2OHBhRjVINzNTSHd3V1VQUEw1SVJ1aWZrSmhyWjJRRksybTlzRlllZ1FSMW5yR2dic2RUNllldE5hQ2VWZUdTMWN3MjMrOFhYMUR2SXVsTkFaVExnVmRybWRmQnp1azBKN1VURUtkaEk1azhFWXViVFdvV1V3dXg1WVEzejRkQzhkVDczbHE4anFwOWNNU2lFTzgrN2oxNGFFelpiN2xEZVkweXBLR2xqcG1pSmRuS0Y5bUllSW9MS215UHZBVnBDSFlZbE5jZWlrUkl0dTJZYnc1bXpVU0tjMm40b01GMzQ5N2JyWlI2L1NOR0tNT0IxSVM5RlA1VS9iNWJRNVJrOWp4bVdDODh4TnF3VHVlVmZXYS9TdWxnWm0yaW5CMUEzMjNVYzZUanB1UTZocnA2YzludGpkVEREdkZ1WXJCUjR5NlRuWkY4RVhuTE4rUk11YTdrWFhIaGpIbVVkU2N5eW13cFZ5bjRzUlFkNjJwSXRIdFRpL1B3M1VlUjdYWWNqdzh5SWdBekFlbVlITWh3d3FQSlh5MnI1MmVpbmpxWmZQNklPVVRmaENTQkxzeHNVZzdTdVJnTW8yaGR4RmhCR0xxbFBrTHgvQk9oME5UUjNWbC92STZzUGNwQ1V4VDFMTktYTUpTak9DNStFQWdQNk1BT1llbUlxeW1BazUxTlVJRlptbTdRaS9kdHh4Z3MyVThFZ1Q2d1YxMWp2Ymw3S0xXRGFYblI0OUgwenJoQ1YrNWFFekJ1UVo5M1VqdHpnQ3J6QVpvSVJMcHpKZzJpUVZ5cUM3Mkw3VDVsYndvOTRXRjQrQ1R4YTZZOStGcmJGVzBDbUVPTDF2RnhXVXNXR2JTanRHL013MXV3ckU1TUp2eTNhcUZmZ3RhcG9ydXplRnZZSkJoVTZIT2F4RUw2UlAvQjVObFliUXQ4RVIxU0Z0MTNIdmVVQkp4SUlzYnJlTDBkNTUzYTZYck1ydmI2YkQxcUdlWVN3Z2J1UHQ3N1hsb3l4Tm1vWGFucFZTVW1RV2xFa1hsb1dZVGQyV3ZsSGJDTUYxbWdwT3o2SDRBemw0WDRIa1BzR2trOG8yM25zOURKTHZNQkZ4dFNIQ1V5d1E0N3hPTGxkejJEam4xSkdGNjRKbFZwOHk1dHNlQkJXNXg0cE53OSsrWGVYYjRUU0psMXZPY3FKSWllUTJMS0dHZjNqZXVrbmZkR2wzQldBa1pHLzFYaTVHeEdKc1RZZnFGVGVIRzFsNDI3UklYWXNCWEZac2Q0aEJpd1F3RTZOQ2NqajdYY3FEK2pWNkZZNnA2WDJtYmRJdGRBcVk0MEJRcjhkUVQrMU02RFFNU3lnY3pZVEo3SVVwN1pUaXBPNklkQjdXcHRnUFFmazgxYWpINW4waGRUdXVYZ01pbVY3Z2c0Z1FkTWtLQWpDUTF0L1lLbFNCSjlUN1BzWjBmN0oyOFVlV2pMN21hSXdWdWVVUm4xWHlIdW9nYWJHdis5SVNEQnFnaldKQWJ2ZXJKemo4cjh3d014OWs2RkQwWmtaRW82bkJoNFpKUldDVUcydTJYOXFBN2RJeHQ5Mm5UWkwrZTdNd05sRnRuME4yd0U1dmJsNktDTzJFVXMzV2FLSWlHaW5TQ2Roa3k1S0RYdG12VDNRTHZDczM0dDFyM0NOVk15alNGRDE5MVBaQUdJaTBYdUhsTUd3enFTTmtZRjRTM0NNRVRVTjM1Z2xjdVdwU0pkREVzcXRUM2ROcUJnbjgrT3dFWWM2OW5qSTZPbG95N2ZhSkV0VWtWcEZrQnp0S1BLZUFhZU56OEdrei9hZXpEL3hJYmFPK0dKajZxc2g0cGUvVDJicDBtb3VVSUg3ZlhDa0dOdjZ6eGdsMFBaRlVsRHN3YWlGUytUc09aQzRhbWt3S2FITHBjQncxeC9Ncmg2ODNQc2VzQ3Y1TWw5ZFFZRHVwamJpbDZCOGRhcUJLWGI3SmVqRjZOS1prbjVoem82cmVISW14Umd5akRNVUw2QmFyNmtaZHI3K1ZZVVl6WngxZk5ZdUZybGl2VWp4dWc4K2g5eUtBVWNyUllYMXl3VzBpbzZMQjdteFJSZy8wZjdubnNjQzJkM0tFdnVFRXA4dXhOd2g2d2N1K0ZlM0wwS1E5cXNKUU82NElrUVFxU1VBTHdsT3hMdGVUeVVzY0VjdTUycEF4WndjZ0RrNVpyVG9WNHJ6TTNMVEo3aXE4Znd5LzZBTVNsSGtLaDhCYkRVM3k4bVZ1czZjRTRSQ3BzZFZZVG4vQUR0ZFhzbEo1TDVvT0R1VjFSdGliVDhSYzQ2YXZWbVBHQmgxRzVjckFlbTRqc3FJbnZ1eEt3bU56TTJSQ3VDbmxPK0JqUGRZai9VNndIek5KakRKelRHbUhtV25uTlZySkJxOXhkd3k5Q0NBRjlkazVKbFRlWkZwNmoraTB1T1RVbDJqdmJ2RzdYSE40cVhsRHNFRkh4bjY3VXlOZUYzUVFUWnU3L0g3WWloSUJzaE5wdHI5Rm81UFV3cTZJV0E5dmgwWTNSOTVOMDNadUxWdFhrTnZEditPd0xkTWc2NGp2NUtjRWxhVFdvK2tkVU1IWkd6NlkyRmxScDVWWFVqZHBhSmY5RFB5QVJxN3dNZzJBODVNRHNVZ2JtdmNHRk1tQkRQOWZKSGhqcUI3VkpqTy9NQ1FPTlBlOGhsQnRYL0lKcFRXOGhCRFJyOHlBRUtqSUcxZm9OT3JLZm5MYTFaRHltd3lMWDdwVlV4V0RaVE42RytweGRXUHlVK2dkTkN1aEpxbkppOG8yYXVrTk1lbUVPMVQxNGtiL1VRcGNrUmkxbFd1anNvaUNXcVA5TVc0amUwblpWNnhoZ0JlNkJTanU0ZW51c0g5Q1FZWlhLZ0JUVVVQZmM0TWRSdDlmOWRqaWdxVDdWUjBKR3hXVWNLcUYxZG9mL2VtUCtaZ21ibzVrUE5id29SZnpQcUIrbzczZERiU3JxTDJRU2ZwMFBFaE1EMkxmVzdOOFlIT283a2x1blZ5VlZHYzdLZnE4N2h4MlZBb1JpNW5qd3VCWE1KQkZoL0lydlh0T2pkUklWTThick9FSTVYNnI4S2lPQTRWK3NjUFA3d0toNHBPalE0YURTbWRDYUtHeUNnM2xsWm9aVVM5eUp3NHhkeWxoZXA0THNPL3p6cGpkVlJuK0lIbGR4R0JRdzB4MXpTMGdVeHVyY1pjTXFMMW54WXlYK3BaWDdkZmE0clg0c3IzZ0tTS1VTRHNoK0NxSlNxbHN4bGRjZmhTSlJNWUJjdUtZa3BVeThkbm9KZERLVDV1QXNLV0lmaEdhdnVxTXhGckYyd25ySUl0TzRDL1ZPMEtQSUpWRkI1VE1ITmlrQWFXZmd5bWxXaFVMd3JERXIra3g3YXhaZ1pCTVdzcHN5bUh2ejRnRHYvZkZJTGgzTGE0TlhwZ04xZ1dGMExwSWVXVWpvMElOVXJMTHRUbVpMU2wyanpXRUdUR0xTTVpJSjlPUW9FcXFmTjlab21tRjFQQVdFUGV2WDVIKzFiSTIzV3hacXNDY2Y3UXpTSENNZmdpNGZvcG5tRGIrd3NxVTJOT1pCdS9lUGdXMWxlTm1mYWRnK3FwK3VKUlo3WjQ0blpnRWhpQm12TjYzd1FiaE9wbGQzZHpTbGxCZDlkeFlUNlVHRktrbmNLR2hBWEJOVEZCWlJFcEhieWdRaWR5bGF2d05NaWRBdHF6U3JiNWJLRit3UG5YNVZ0Y2E0cGkrMksyZmRlbWpBUjR0dEM5K0V4K3A0aDFSV2FEc2tmbyt0YVFpOC9RK1pPbCtGdU5IbkRmMjlLM09iRlpqaTNQeEM1a3B0RnVkcytOWEg1WTU4bnJJN0JTMnFaeGR0M2NoR3FCcW93NXo4MDc4VDFHclpRbVl1VXd1NFU1Q1BrbVF2Vnk1UGtmY1NUOVJLaWZEK08wTGl2NzBTZW9pSXpJSE5qYmFvNWlwUlAvUnNGZjVQMzk1M2cxY3BWNStmMlRjQnlJcUFZc3RDM2hpdVFmbkd5TElRdHFiYXIzQ3ZYRC8rbXJEQnduZVg3UmtCTmt3L0IzejM1djJNc1E0TDNkaHpHQ0NRM1ZpeG1hM0VvWXk3dmVZdmdNRGVqNXRBdkUzMXhyclBKTG9kUlJQYUZoWVFzWUVqUml6Q3N6U3BaSkpQcFlQb29uRjFmUE54eWdBZURQeU4rQlY3bFh6dE1YVy92WW5DMHcveGhvZ3NlL3UwVE51QkdONXgwUytRbHRtcEtyUFVyWUNoZWFpbGw4TzlEMW1BWjUzTlcwa25va1ZQaUg2N24raXdIYnN1T1g3d0xTN3ZLNTVNUDdxNytUVXQ0V1JOUGpxUmI1bk05WlI5NzlYdlFjcjF4eGNyblR0YmpKTzRiRGYyRTVuZzBveGFPcmQ2VzlyQzJvOEQyd1BLMXFYRHU2UGN1dVhBd0UxeU5JUzVVU0pvSjlqSTZYVG5LSmNqVnNZMVpTK2UrTVEvNGpvdHNkdkFlT3FvUWYxUmFEa3ZnTndDUTc0RUZzY21XaC9SK1g4NWJnR1I2WitocWpGTGNRaUh0YklvRlZRdEt0ay9ESCszV0J3dEE5QWlxTC9sK09mbHRSZ0Y2SGdxU09tVjVwOG1rNkxuV2kvWWl2NUFoZ0dxSHM4ZmlhcXVuNmFGU0lINzI4dzRDczlFL0ZiK1R1Qzl1ME5Ldk91WnU3aFZtSk9lRFB6eDgzZEpnd3pTZXdsaFVnVitHLzNvMlQvRU1UcVZzNVZZK2RHVmN3cXFnZlRqMFNOUVZpZGpqYnltQUY0TjhjNWNHb2J1ck92WjArUnZveGE0RURLdCtBNEh4dXBWbGw0S1dwYndkMmdWR3Y0R3l6OGRBZnQvUVNOYWgvSE5zV29UelFrVDVQVWVQNzEyaTkxa2I1VDkrV2YvSWNGV0JsUFhUTFViU2FTU1NPZVB6YjZOQ1BxWFUzWEZPRXBjSnNlNzlaOVFPS1BYbU9kcm02eEc2cUx1TnZJeU1pVnJYRkFNOUdWbTM3VjJpczFXdytXNStIWlErc1pXM2FERmpDT0o2ZUpBNXRoTGg4bmJUZC9JRzJDWE9rTXltakhabmlvK09qMW9hVGRPNEorZGR5Rks2MCtwQm5ESFJpWExNcjlyWVE0OUVGN1J4Y1NwWURaTDFqWTBxdWkzc3YxUVV3WnlKREhGYlB1N1BpK1BhSnN5NDRJdEN2SDdsYlJnVlpBWWRyeC9PcGl0L05tQzlLL0xpQmpvekxCSnZpV0lRYmFxQUpRNWl0KzJjdVQrc3hVQjYyWXphQW10YVNpZFBmZ1c5eHQrZmJqWUhzRnhaMG50eGYzbjd5a283bUhmZmFKMm9WRUZxckRvNTY5NlpyRkkxTXZOZGNRdHBYbHplWWRJT2FQVk0wTjJ0NFZkMXJ5NzgxbjZqVGRHOW51eDhsSEM1RnpSTWhQK3c5MTNHOUYwWWNEU0cxUEEvQ21jTW4rTGtyYW1SMDRlV2NCMk1HdFhabnZHSVFPa1ZSMnFtSTh6QTRSZlY4UkluWTNCTHF3UTcrVFp4NkI0eWNqM3pOME1KVzRlS2k1M09WdWNndU1TNGdOY1RRWjZFRVVrcld3SlltR2F3SWhNaWFZZTBNaXZxaXJkV0ZCSml2Y1NWY2ZsZW1CVldudUVSa2w5UHFiY05WWWpRYjhDR0lJQjJRVVFFYUI0elVtNysrZENjUFlTcVJpM1l2cTdvczlXQjgrYVUyQ0h5L0ovNmFFTVd1ZGF1VUtFcXI0TGZwejBCVEg0dkJNU0N1NzQ3QXEyb1VvL2oxTmJaVElFdFhER2lubTVmQWE4UVpML2NoenZXNlNOMGdPTDlhWGtxdWtNV0t2VE1QWDEwajR0UzhORmVSeVpSRHo4T1BkWldrTmlBWVMrYWtQSjVER2NFMk1raGk0dVVCc1pvaVVjczFLd1ZScTZBdWFyeGZhMnFjMXV4SW80QWMxLzRGZzhmcmE2djIyOU1iZjJDcm1qRFFCcXRlRERvNnpIMTN0cnd1bFlrZ3ErU3oybFNKelFWdmZMVlF2Z01tNjA2MHlVWnlrRmprZFhJclM1SXNvZFROY2Q1bENnc0Zobit4SmxMSjV4VEVYeE8wNzlCMUFXRk1Xa0J3QWh3dDlvUEFaZUhRUW5qSmhWblJ6SFpnTmdpcll3SkhTSU9wS05wUStYdEJXZGF1Z3B0K2thWTBNbkkwMGlka3k5cnBjd0VaQVRRWkxjZHpKVHhTd09EaXhIeTZUTUhzQUhzTXQvVWJHZkE4RWtVbWR3a3g5cllOS2tJR0VEQmlIbHA4Qkp1L0puN0xCUlhMcUlTbk5uUjdWSHQzbGNwVWt6TlFGc0cxQkI5NlZodFVINFM2TytYeHZSWWRpVmhSWUNHYm9NTkdPdE82dXZsbmgyK1JBMnVCT3dNOFNUaXRKb3lodmhycnVRcmNDZjIzcXBGSzd6QklMcStvNlluL3R6bGtsUmF5c1RwTCtYNWE5RjlQNWdtSGV6RGt6bnZ5SVdRNGFSaDNHWmhzY1V6RDZlM0tkcGhLT1NnUWhiN28yWWh1YlZwL3FHcUNmalpQYXpsNzZwUXRZTExSNUdsbmUvdUo0YWsrKys3VUlra3pUejgydUtLbE1qaitnY3U1RVFPUnRtWllTV05Wa2lnUzJsckl1eHUxM0p1YW4vSm9XQzJWRWVaemU2SVBIQ2E2SUlaa214U2hWSC9vdUhVS0FXMG5VR1VSVzFNblM4eU9PSW9lOFlUSWZJSjVRU2FJaFdqSXhqOEhGVlVOb1MxZ3dzU1o5dzJySTBKUFJ5VTZLaGxHNm1YZSt0Znp5NWVjV0IrazlCa0xDYmI5TGIwMnVCU3c2OXRwUGZhVXU5MWhRd2dheHVUQ096U2h6TThsdFF4bTZQU29FNTlQNVBEdnkwZ3EwQWV0VEJCWjFZMGRSbEwxdlpXamtNc0gzWmJ3UGdiMHBOdjJPM1RJdmtkRnpDaTh5UDUyUXV0bUlxakJONDc1ZUFMMjN4OGhYSFB3dVg3MUpZajdkY0F6U0FpMC83ckFwdERHaVVQekM0YmluM0ZlUmlpTnM3RkxiTUZaZzc1QUlWSmVaVzc2UFh0Ymo1QzdlbmlwTysyRFVPNVhFSXJVWGxTK0RHSEJ3RUFYNjNkaWtzbjlsWEp1cks5aTMvYmxMVnJURVNDR2V4bGZOWmZteE01MnZUeW9va3QxZnQ2eUxqNnFWNUZnY0NYZVpsWjBsSisyS1MwcFV4Z1ltcWIyNUI5WmhYVmNHRGVkSjZxZ0psSjJncDkza1EwU1UzUUo1YzQwM1NqbXYvRld6TFNtbXI3dTkwTGhpN3hTMHVPZkhNd1QxWlNlQk53blpjWHZoYTFVV01kMmVzQy9DOUVlRHI1UmNlV3dySlFyU2hPU0pBZFU3NlZYOHlha0IxaFo5TjVicnN0cDFPdUxsZGdmeVlVT256eXNoQ0ViMGZaY1NrK3ZRZzlITk1qRHJobjZvQ0xNNUF0aU9nQ29tWGZhSXpyU1ExQjhyVXVuU1RKV0NpY0pPL0sxMjNMYkNnakZRdi9yZ21IQTAycFNZU0FhcWNrbUVhQXdWRDBWVUFKZ3J3RmRDZWxISmJUZVkvQ205WWFYblM4ZEZ6dTN1dU96UkpEQ01ZVzlrb1B5ckJCZ0R6TEFoZUxXRlFPYTljb3Z3cWt5SU1QNnR6VXJBclZlRTVLNURrblZHNDJsd21EYjBTRnFBNDQ4TjAzTmJOVU1EZGZRTXZ5WWt5OFVhVU5XTHRhdjk3REllTGl5TDJqT2NqQzlBT2Y3RU5rME4wczE1dUFuRkwySitscjZCWjk2cktESEJjd0RhSlhVc3FhU1IwZDBRS3c1N1k4QU1OYWpmdlhDMlQwYVNYQ3pYMm5iSko1VkVhQVpMWW5QaHFnNE1yeDRndFJXSWdaMDN0eElnWGU1YkJHTnR3eGpKdU40S1hkRmROd2ttS0w2eXVwSjhMRERuVlN1a3RnY1lGaVBqL1lNRENxR1ZseTJ2VmZ3NmU3UjBtbWxmdTBJN202RlFWUDJucGkwNXFCOSt2RUc2ekxhVDllbTd0M0dMK2VsVHBqZXFETCtGdmtwdVd1MUtZTnNoT3owZzJLSi9ZNWlTWEpGWnkyWWkrd1pBMVBMcEN5UnFwVDB3UGRReElkN1F5L1E4ZW1aOUlKVGRzRzZ5bHoxWXJpZnJ2ZTd3eFRqUmFsT3pvVjNDdXFMREJDWWViRFVOaXY1UW5Nam5BU2FzL1Vac05QUXZFdVg2YmZJVXJYZ0ZiV25FZzcyTWZzM0tZS1F2S0czUEVCVGJEeU5UcUxWcytmS2syeE5DS2RhcTlNcGVXWjZiYkNqblNWc2dHeXVPZXFhdURTa0hqbWxhbUhXYzhvRkF2bTVnRnVZZHY3MUhPQUx0RW90NjVJNHgrZXltSEtLVGRZTVViUzhKRncrb2h3WFdVNWNudUVkNm9nMEZ4SGpRYlpGQ00zb0VMT3hUZDFTRS9zalpXaHhQdXlwSU94SGhSQVFXdjZxWW1oZVY4TEtQc1pkOVo4QUoxTXE5bmg0ZEV1OERoZGRrTWJRb3RxeHVUUm9KV0c4NXZJMjFNVFN3Q09vN1B0MGROQ2NtdmJYUUxRajEzNzJhSEtXUGRNU0xReFAxaXFBdzlZdENiT2VOek5XR2JBOEpPWWRMQ2pqM0pPWVhLcU4xeUlGNytMMS9DOEVsTk02T0ZzSnZzYmM5VHBES3daVzdkQ1J3OUhFK1FTVElxakZmM21MdTlaK05PZlRObElUWStIK2ZJY2RCcjhlRlVUVlFMaEZxMTE0Zm9yVlVadU9DdXh3RkhDb1M1RzBvSXZ6aEpla3RLVjUwRllLQk4zLzVBVHJpczZLcVBETjRqYXFxWVZUNDNtSitqRDg4dUROZGx0VmluY24xMzRyUG9vQ1lzWnoyOHpoK1A4ZkQ2Q3ZtTk5zTmpBSE16UUJ0c05NVUo4dGxRZnhlVnVoMEFOajJOc2xjek9TejdWcFZnOERZSm85alFZdzFZNGcrS2E5K0phdUJSeHVNVlAzSnlNalZyOFAweG1XOVJETkFDQlZvWkFKblE0M0xBNmtSelh0NGNOM0orTENFVEFyZVM1T3lQVDJvendFTnMwYjgwdGNTZnQ3Wkx3bVM5elVKMXhFdWdiRmRmSUxRYXl5N1lrV0l5dm1PWExtSWRYeFpCczIwZTI2a1FsUHFzL3pScW0wMG1IdDZNeWRaOUh1LytOZncvTkt0UlFCM29FOWU2K2RkQUV1SmJLZFdWdERwMzhVaVlITWtZTW8yc1ZncDlHVVgzSFFNL2hYLzNjZy9CcjI3UndkWlE3Y1ZvRkNPQnpnTTI5MlZsM3NmcFlKb0loamF0SGc2c2cxeTFTaGNORDhtdkRRbmR6cXZNQ2xsNURuVjJpVlFVUWs4S0ZpOUVwNDJ5aE9NdUttOTNrckNqVktEUlNla0lrWTg4elNjLzNuOXRCaDNEcjJuZ205VlZCN1RHNm5TUUR6Z29TUlZtVk5LdE4rY2wxZnFCT1g4TDFNVEdOcU1zN2JObncwY2xHSzA1Z2ZCTTk4MzRnUGNTZm5qNEhqS1VMV2JTblk4TVlKNytmaFNXcFNjZXQ2Q2VVaGticmFyRDM3cVNNQzVlUXBsdE9ubEUxeVlrdk51OC9DcXlFMVZORitWbzgzRnAwaE5DWHRiVnZzYnc4SFZORFVwR0duUDh4ekYxZ1lUV1JsZkpTZk01YnYyTnRRT0JSWjlYMUZzcEdJcVVxNXM2THBucG9FYThlTE9ocWtXUkRmak9ibjhHQ3dBeW5oK1RJcmNkUUtBU2JUOXNXRU52SWFuM1RDSVViMXgxWGd0b01FVkEzU0N2SVNLZUZ3bU9HbFdpMVY4NEJ5NEJhQUkyVTU4YmdjbGNza05RVTRycUpFM0ZHUDIzUjBNMnMrSnhlQS9xQjEzc3dlNWRZbVU5bWgzQWsxQnEzczZjUFR2L0kyTXJtZGpzT1B6MVpOb2UxR2ViS2xRM1NFcVJGL1MzdE1mM2g5YiswRGw1a0FWd2cyUVBjTG1JTUdRMEhndlZ2VVlYU2RHQTJYN3ZSTHU0Zi95UitCd2t2eUdjcnRNUjcwVXlsK0pDSXBsbGN5b1FvSlZGUG9JT1Fkc0wwSmRnaU9iWUs2Q1lKT0lPYStqUFZRQXVneXkwalh0YjlKbmQvRlNQTlpRbXZicjB4ak5tRElONm1RazlXTGV3YTJGOVVaeFRqODF0b0FCRVVmd3prbUhVWGx1amQrb1lleUxMT3NlOXpIczVlR3ZWczlQNzNOMEQ1VkdxS2pJTk1uUDBsMmxFRkh2ZG96MlRYVGlFVlZVanVMWE8rRmtlaGh2QXR3RDFib3RnR0xlSTZENkxHdXNwQ2hkaTdiSGlUSDRDM0lldXZCaEFFQ1lOOXp2SllSNXVibkVnUGNVNmVMNEdNY3IwRThHY2hXYWVRbkxxTTJUUTNsZFJlOEZva2l1Z2ZyWCt4MWtiaXVhRWVHYi9GVmpPZkprd2FCcHE2U3NUSXE0VDBMY3ZJdGFmTS8zenRXT2pRZm9VSzAxNENiQTBUQlRZdlAzVkRQQjM4bXUwNUFRSGZ0M2NtQmU3M1JlenM4Y0pscFJCaEU4Qm1hY1Z1bzhmaTloQkdLNmFqYUpiUTFjT3ZjSzZqOTJVVit3cFFLYjRkQnluRFRBSnBVNVRwQlVSZzFTeVpDeTdWWi9iTGkyMHc4K1dydlFuQTlNbVZ6emR5VExxWkcyWUlLT2lBTHVOdnhTUXNWekRubjN1TGZPa0JhYnJtdUVCSWRDMGtCT0hmY3ZJQ3VycDd6MUNjTDBSTE91STdkNUlIUXI3eEtUbVcvT1ZocUJYMVpGWmNKdUwxSTl6bnlEZ1NPa24rOVVIc3JQOXp6d1daNFJxQUdtRGJ4Q3RHRzZ4WXJDdlFFMWQxK3VZYU1KQ0xpRXlUWlNxSHIzdzJrUnViaHdpN2FTd1dVQ2VJaFdBUHJEWnMvdXZoZXhxc2lONXpVbFBpYWd3T0hKenh0cmJKZ3B6NmFjWjMzK2E0S1lSeS9hNGVLNDJyWFJwUHRQTzVaK0F5MUFBYkI1dExTcVBmNE9vMk9nRnJPVWt2Qld5VVpLN2xpUEdINm4waElpY29MUFR1K1BuSjRDNmNmc1owRjlHdTJSN3N5dEt5eldFUTd4Ti93QlFoT3BHNlFBMXNQbStEejgyYVluTng4TThoSVhsNCt6Q3RWNXZ1ODhSRWdCelpaK2ZUeldHTWM3UllWeWtOc1JqVHFXeFI2UCtLVVAzWHlFL25EQ2U2ZWtYUTg4NmJiTGlQZTlUZWZxdDQ2TVUwcmszNkJRcm8zcHlyTjRCZUpaTGx4blNYYWYzWXpaT2g2R3BiMThtZlBQY1lBN24weS9sZjNIbGpBZjhCWXNLOS9kK1NOODFGelN0K1l0RkV3MnNyUHVNZXVITXQrSGRvdktsaTRobTFGeWd1L3I3NWMyQWN2TE9OT1hNL0tvaW9SYjB2dXFDREV5MXVtUnhzSmZpOU95NEVBd1hNZ2ZuYXhqa1FiMFdmejB5WFBub0tVSDArSUdPekd4ZUxITFloT3REa0pRTXEvMkZRSjRRdVBuRzBndTZIU2p2SGNKYW5lck1mREpVYlAxbjU0YkhsZ0V5U2E5ZE54bVV6TVdWMC96U3grMy9ESFVpczBzcmhNYjV2NUxIU3Erdmw4UXVhbVFQeDBrdnhYS3ByOXlwa1Z5VThWUmNwZmpBVnpCM0FNa3kzNGM5K1NrNEErVmtUNlBEYlhDSklVdkgzUkduSFB4amRqdDBJdzNvbHg2dUVOS2tsZmdNdU9OSkV2SXltRGhFcWx0SnZwQjJ1bWZzVVl5Kzh0K2Jva3hXOElQSnRSRllCdXNLMjVORktIcE5xdXRhVlF6dFFSWm5idEVhenQwYVoxbUZZMjZXNlQxQVovaytobi8ycEZjN2lrU2VzK2Zoc2dCZVhHa0ZkQVFlOEN6QnUwZnlIWXBXSWFaWXJYVlNJczN5V2lNY0dIZ0I4YVhEeU9EVlc5VTJ2YVhvY0RJa1FzUEpVeUlNU1lmWHZtd1JaUDc1Qm1Xd1hNdDA3dmlGM29xT3FPNlA3U1ZGKzFLOFU1eWNQaXAxN2ZZdW5VSHA0Z2RPNSt5RGpEZjJUcW9MRUpIWTZ2UFRZWnNOanBRR1FHTXZYTnJma0V6NmxTSnBFUGtiN1RNV1dPWFdVamIrbHhjSTF1MHJCRXFYMmE1M0kwNkcvMVdwOXN5YThtVWlyNDgwQW1iV1VUTEhqWFpOSXNMNXpMWkg3M3V3bHJsS1lMMEQ0L3RTWVhHa0psbWRZMnZ1N1d5SFl4T1dMSmt2dzFHWm5lZi9iOUJNbk1VUWlNYkQ4djdkSFNNZHVMYTM5QkdjT0tocWNwdHpUWXNjQW9XMlRtMWQza3pXN29lMW82NzM4TTh2SnBBOTMybmwzelpkZHEyVGUrM1VGaEU2R0xndGNNUnQxL1I4NEJrcDErWXQ0UlBFM0Jibml0L0t2aGVkLzJwTWNzMnlmSFN3NGNNQlNyK0dLREJCcGV2SStqTzVyeXN4TFZEckRjZ3lxTHpwTGJ5S3RCOStzcE0rK1NMY0F2RUZ6QVp3VHNNNU41QVhld1RIeG1yMXM4MWFHVHZ5bDh6Snpna1pqQlZ0NmRtWkJlMUY3d0JGcUI2aTI1cmZ3Q3g4Z056czV5Ry9FYUw4UlBVZ05GSi9Jbit0MWlVUHordENza3lKdFl6TzNvQUdJSlRXdDBZN3dJVUEzMGFoYVY5TS9zY1IwZkNSZEdOZ2JxV2xSdVlLT01nS1BQQ2hucVJUQkRUdXpVb2FWQldHTWtzcXI1bHJzU1MzSVc1K3JZYU5zTUdZdHZrUHU4MnIzY3E0WUREck1yWU4vSStJU0gxVUVudlZDQitzSWZ2NzRZU1pXbnlVdkw3b1ZOSjNWV2xBMlBCa01BeHM3cVJWNjJXTEZlaGpqazhWcFdYMHhnWWY5UTBsWE00OU55WlRtY3VTcko1bUwvejd4Z3N4cTAxdWYySVpxLzNEZkpidlpBeDlGbFNFSHlwQVlYd2dZSDJ4a1hmNVF6cDJQb205UytET0k1WHdsc0hXYVZzd1h4a3NhZVUvaURpVmt4bmRWVHNiWUdleE5vMG1yRFJyVmFWMzRCQkNxWGcrMlRxeC8xNEt6TmtsTmk1M2VJeHVhZ09UWnZleS9aVGpOZFFwNVZTeURMMU80RVR5TDNPcHc4citJWi9BNE9aNGJxdytpc3VDNzJBTUZBRmgvQkZ5ZCtVMk90K2tWV1E1ekJ6VnVnMEs5MkNMa0JzazBEbkQzWWFSeTJaclpwUm9QRTBMWjhvc1YvaUVZTmR6VytFV1BvalJReWRiOU41SXk5VGl1UnF2Nk5PNEtWazFnUm1TT2s4V3JnMWZ1eEdadVhidzl3UHpVbkZmRGtjRXg5dktxZzRuQkNUSW5TWEozZkE0ZjB3c3VsQTMvMW50a3hUYU1CTWtoWndLTmdtRlhCMTg5Z3JpZmNxNGMwZDlMenpNYjZ0dmlwNEhoRk9sM3h5RHRVT3NZL3plMlRqZDRtT0dKWmVtNktyZFZYSFhFMlRmbEYvem9EQW0vbU5tS0lnUGU3YzRzMnovZmRCK25DdWxxY2tGTDhNSUg2aHVONWh0Q1l0TlFTZzZqZE4rNS9FTGFzd2JOelo4aEYwbTZTdjVWMENkcTR1cUlUUWg0Z2dENjV6VkhFQU1JMW9XcExoZmkvOE1LOEZLbXBMdDdaMldiWFRVSVpYMGwydXA0anJ2TDRXYjZDZEMvS1VkTnJsRGtmS1N3NXVGY1ZkcUpuYWFJdTFTUjRTbzVXWEM4SERTWC9UVVlCOUw4cU85WHJKK1pvaFR3RGZiREZOaUFtdXVaVEIzV29ud2V6WkpNOHFnbm1qTG94Q1FDV29nOW1ZL0hSUFYvbzM5VTFKakNMYWZNTWJyeFRvY2NuQ2U4Nngzbml5dDA5Ti9oNjZYZWRtRDJsWTRJRHlkUjcxNDRnc1cyQ2daWHoxSlJUZjRTdGZ3ZHRwMkt0WFBwdmp6UWlFNUhQS0RVOXY2TTdJTFV1QUtxMWd4NmZBZGxnU3JSc1JFMHF6WjAvWDdzQlpaSUtpOG96TzE5K1ZmK1ZXRTd1c2IrS3lOam1BOGVJZGZVV1ZQc2dreHhsTU5MSjVxZmJFYlN1NUxYeE5RWjVEVGh4OG1ndTJTbGw4MVRaaHF2dzlQOGVLUjBqa04vUzdSdmgxN1BGNThvUk9qSHFOdEpZcDVmM3JvQU1IeVk2bG5lQ3ZZZXJBYjY4MjlEcTFlZVJzUEJJWFZJbTVaZmV4ZGJzRWpLUzNScVovZWozL2xCbzNCanZCeDR2WlB3WnJsdCtDRFRKblNpWExzVFlEbHVNL3ZrZjE1L2VxZkZIa1cyMVlMVDRzYW4zWnBkSFM1RHBzZklVTS9OV21kWWRKY1gyRng4b01ob1h0VHdHWDFLcUxNUEtQN1BETkdxaUxvWkV2MjFDK0VpRnh6aUVPQk9KZjMyT05QbmdiL01FcE1LakRFZ1hUbzNDZTBzV2lxNjVWQlRtUjY0YlB4SElHb2g5ZnYxYWQ4bGFmWkdqNHJWaGZjQkdiRVgwQzYxQ1NIdE1XbGxrTTRvOHhPS3NPQ0MwUEZVaG9YOEFwV2NpSjdoNjhPMURQamMwbWI3NVBEQnVZa2JFak1RMllvMXNqNjdOdU54TTh5NnJ5ai96eTBnT0hVMXdkN0lEY3dIdjduSUVqN0U1eGQwTzdhMm9nV3ZRRU9kamJPMDMvR25OdUpUTThJMVl5S05vcWw5T0tVQnBnUVp5OHpUaDM2aWZZZDJSRGlKRWZXKzUybnNWTXBLTkJkcllOaWRYMFgzTXpKSmxwNHVjdjJvWWRhTkZiVHNIM2w1WGxleWVEMmxyK2NCcFBIQW1VL1BVOFdTQWNET3QvZ1IzZDBhS3pFRmZIRC90c3htL2ZTSk5KdzB3bnNtWjEwU2lROWlHbG5BZklXUjBsaEZDR20rRjhuV0JoTEljZEZWMTJaZllGUWdjY2grTlNaYnVpM3lKODl2eHVaV0tXcnd3NkEvaE1vU1dsVzRHdzFOeXhFeXVKQWp1OG9TU1Vzd0hKTmxyRkFPMG1tcHg2Nmd1K1o2cDR4N3JxOTRPcUQ2Sll6SURhSVhQc2pDUDhyTjNqOE5kSkIrY0JYWjlDdlViNDZ3VEFSM1I0UVdqYjI1QUlNeTdtd0RjZEUxcDkrcmVKbjFDY0FMYk55N1B4eGk5cVJSVnBSSTNyTFRLR0VtLzlrUTdSckNWb0dmOWhKa1d1bVhNTDloTDB2bnhwTTkzbmliMlRPV3BUL1U5ZUcrUXh0ZHdOVm5NSHA3bzhrMmR0WnBsbFoxWkJTb294ZzhUSDZKZXFST2s2NGpNZzN0RDFZYVNrbXRZQ2RuaVVycGRtaStQRmk3dUpWR2dVRzZybTNYZ2xNT3ZJYmJzZ3VadmhSSnNRa1BONjlWc3VQRms3akdLanMxWlNhUnJkOThtcDFPbzJ6M0FzQjZxbW1tTCsyaGx2WGFFcXVKSWhpOXgwS0ZBMm5mdHRXL2o3QnJnN3R3MG43bUZqMm1mVE4yNzFtaUtUSCtIU0pvRkxMdnd6WXRqTEdDaXhuWTZZOFdma2VQYzZ2SEw1VUZFRkVXR1pCcHZCWE0zeXBlMkJrSVRwRlRJSFkyRjBPbnFqZ2Z6YnVOQXhIQ05OV3JkRDA1aHhOa2xGMitkZEc3cE1CYllIYThqZUdZU25sZGVPRnRqOG4xYmhidVJVYmRtckROM2VWQnoxcmpPeDZsaU51a21lYXJRN1RKeGNvUjB4dXVaSVNNUk8rK1N1SFRYYktnU1VVYUo2OUFEQThoOWFTOHg5NXVtQkl5UklRKzBJVkZHWnpyY3plMjU0Q2VqMVRYMjJKMU9rSGR5Q0szQktYZ2lSM0dqaGVYdlppdDFmOVZOcUtYUjJvcWMyRExva0ZqUXZoVjlKVFl4aUQyckZOSUp5eWdWMVBFSjFLenNBbURZcFVSUzE3ZmlPV3M0VllJb0VIVUwxbS93amRHbTFZL3hzL0hEZCtoOUVSbi92OXlsQjc1Zm01SUFwaDViRlZyWWluTkoveGQwMHgxUWVCUk5PSkwvR1RqVkpicmNJR2lWaVA1ZlpQYTVraWNPUW1XNEVLNncxUC96YjFMbDc5dlIyQ0VSdVZxTHQ0cnJOSzFNQmxRUUgwUm9VUHpUOWN6eWlHalQ3ZERxbTN5d2xSQlV0SFphdDdzWWFSTlJNRTJyZ1Z3V2pTeFJtRFlMVTJkanJ1QlMzUGlCeGE4ZlNTdmlDY2hMRWhkNGxZa3d1NFpQVkhxRnVqQVZzdmNlZXFNdDZmNysybUducHI3T0pTRTNmR2FrUkRTVGViRGIrazg1VHcyeUtWeFFocnM3eWdIeWtadEpSdEZyOFBEUFd6Y1pscXMveStIV0xiNVpCRjZoeXREd3lacWZXVVV0Z1dJamdTN0VpL0NDM29Fb3BYWGgwbDU4MElyM1BZcTNhY2Q1MkpxeGV3eXBuZVNBaVU1bisrbkpYRThFWlpKNklIUXRGSjF5cG5SdzNabmJIY3VVazVXeXRFOHQyN2xKV201bGFnMStIQStGR3l0UjMzb1NPMVN5UTVhY2dOdTFjaDlzaGJ5SnpnOHhtZ3VrSjRoTCtsRW1Ua25GbEZZS0VCSjF0MitqaThlMy9McU9sZkhvOVRRODArdUFlL2ZIcGl4aVpHZlMza291bngzMWdHeWZaYnpsOGQ5dGE1NVNjd3pWQlJ4RmNPRFNWbk8yV1NYeE9xUTJnTnIxWFFZemVSRE05aGY1S1UwWHVyNjVIdms1blF6WlFlWHV3dmRsb3B1M1l0YldZRldvYU5hUSsrbkFrYnVtMWdFOERWUWUvQXRTM2F2emRTSEdCUUh6UUZhYzc4UFkxWDdHc0hCT240d1hFbFVyUG85MzQyN01LQnNPaUhBZkFTUTVOYlJWS2l4U0lNc2wvM003dGhjQTlxRnE4SExUMVNQN2l2YWhLbXFicGl4eE5HM043NGRVWGgwRDdvZWdqS2dqNWcwbkVtT1BOOXhXNkhLQys4bnBBWmMyU01VSSs4NU5aeWpWeXNQajdNUVE5dW1nRFh2Z0NsZVVuclhMN3dCblBOZ3ZGNkJJVXBJbUZ6NGxFWi9mOUdySE9HSy84NlZldlV4bFIrVkI0aFRzQkplRFRweXVLazlRL3QwaG03djBNWlN1bHgwWERuRzBTQm51RXUrWEllTmlkRFJXV0cxU016N1JkSFYyUW90TXpYYkFqUEdRU2dpNjJ1YmVnblpYbXArYW9aRVIvRU9JRThZL2VVWWp4dE5HWHJVNURsakJZQkJocTFlRDVRamlrWWpOZHRFdFgvWFlaY0NoRHJ6MFVIV1ZEOWhFdE8vZVpvY3o2dFZ2OFppSjRUR29yZzdUWHhaTWQrYWVJamFuQ3ZGRDBSTU54eXlRSlhRZU84dktNVmJkdzBmRXpQRWk4NElxT3RpRUlMTmNZemN5OGhqUlFEakRPSXpKelFnYzlYejFTMnR5WnBSOW1TNkdibkdHQmwvVk5PTitYRmhFSFpFVzJJTXozbk1DTE9ybmdqb0RYOFg3Ty9DZkhTVHhwampJRFNxeSsrLzBvcnU3dW5JbUtmTmlWK3BQWE5xSGU2eXF1bWFOcXBjaDJhUlVyN3g5M2VkZmdDMm9XejVYaHVwN09QMnQ3b1BPU1kzVVVzdEJaUy80Q1RJeGJGTmR0V1VNRmppYmhOQUlEMDI0eEw0cEFaWWJPMXQxSkYwTHNLUmw4dGJQRldSdEhuQ1JFUmF6bzVNTEkzaTNNQ0JGNVNoN1ZCZDJ6N2ZXY3l2RzFQUFZ5MUx3OU51QUJzcDlMNmxiMnRPTExaTkUrczFBKzBXUTBGSURmZXgyK0ROQWpjS1VGSjVJT2I1UUdqUzRJcE1Uc0FHQTVvcmFpdUVlNHkxS3JaM3J5bHJQQkNNK1FvaG1sV3NPVjh3WkNlOFgzV1Q4UFNxQ0VEb3dxWEl1NTNObFZ1aE0rQnExUWVMTzI5R3FzSE5VWndEZkpuNWx6R2FLZFhVU3dNaUlCVTRYeWtOVTVoUkhRS0J4M2VXSlEyYTFxZlg1YXRKYTd0ZjhlRGpwcnR3VnJLT3FkNjZMZnpYdXBLT2U1aklrTW9lQWdCZ1RvZkRSRGlVTXBVQUhNdmtXN0JRaFZhbEh2RnpSVUI0OGhtOUNXVUIxSnIyUWI2M1REVUgyWUhyeFd3TEl1NTh6SnhmanpnVUN4Q2dZQk03ZWxjT2M2MlFhQ1djWG9CcEdPR0FScS9iVHB6eHZUOWs3MkgwU243YnZ5ZWt2aWJrUXE4U1V5U1hqamltWm9XMW5EM1RLU3pzRlFPZ0JoNWh4d3FtZkYrU1hybmJoUXFhamUvWTMyMGRpSUpaVUJyT0tWOGR0Y3FnWUJHUklOTUhSSWZyYUt3UEtQOCtLSFp3V1Z5OVBuQ2lOcFJZa0VZTm1zaUF0SDl2VTZDRzFjamdxalFxL010Mlg1VEttamU1OTB3dHhnT3pFVll5VlVKaGUzSjltNUE3TXNsK1VoTmRrMDc4UFg5VFB3aEpPaGxBV21ZOGI3ZWlIMmR0aDRxMS9xRXJRc2FFZXNGWkpBU042cmRLcnRmbWtiNFhsMDNVWHpTZlhSdmk1NXZZTzFoNk1wUjJSTDgxRm4xQkdiTVpxRkZVdmNrd21va25SN0dZWldObSt6QjU1N3JGUDFEUVZsZ0ZDbFlRNHhLaTNlUGlBMDRodDNqcVhkd1VzNmlGWnVKbGtOZG00WitFRGZ0T0lNVkFKVW03aXdTdkdLcVhXWk9HR0FjSVg5bm1NdmFWcThhRSs1SUN3ZEpJVnpGdVdHZzE4akZOQ3BSNG51WjZkaXdFQlIrd0lNOXJkenBYemJZZVdZVXFoSzMvTGQ3NWRocnFuR2dFejFCM01hNWw0VmV1ajNQeENzMkhWcUdvQzFlU21vMGI5b01LeWJXdzdtWmg0Ukg0ZnE2bk5LRXh2ZFR4QVp4VjJEbFpQWTh2bkhZL0pEV0l4RmNqL0owY3pCejgyVld3eG05REtyeW4wb1BwR250Ulh5NHd6ejV3R3hmdzRldlBCUktrL2RFQmpGK1N0RzZWMFYrZk9PWnlJeHhxWFYrSHhyQ1BVY0ppQ2Q4OURjRVVtblM2YWRrMzFqNzhXL3JRWXRBZDF6Z3RzQkpLWHBkMTV1QzQ3Ulh5SzJyWTU1MnE0VTFwVCtid1o5ZG9id3REeXBndE5QWHBQcjZSR0VJSFZiYm9taHprVjEveExVOURrWWdsdk5NdFdpZ1J1VHUxeVY1TnZIT1Vtenc2UER6UHNDalJlSmdaeTFyZ25EMFd1ZWZCSmc1Unc3TllyVjBlWnpRZWJPWHVPZFlMejFZOU95aUNkVEpMOU9pV216ZCsxeDNvcHJsRXYxbjU2RVVsWE5IcnhJSFphNW1FYlVzaVhHUmhkUzA5ZUNka2RqeHBMb1hyVlZ5UGpvL3BaRTFrQXc3TWhqVHFZUkVrZUhkYkQ1NXNzNkxpSXViWWJqeVF5WTAvaklzdmwrc3lIYXNVNGdwYXpxYi9vSGxJRUlMK0g4WFdHQUZOM1h6L2E5c0MxRkJpcTZxVzdnUTRqMlVETnVnejA4c2kxSXVFZ1VhVkR4ckljMURXQVNEVGNDblhFdXdwVG1aZjBSY3hiTVhld1ZHV3YzWVJEL1UrVy91WEpGM1M1R2pLZDNyN2ZpeTFVQ0N6NHEvTHNkaUNZT3RrK1FKNFErbHZVNEZRcVhYeFFjemZUbUVXYUE1VFlvMmQ2dWl4WktPLzB0aWtHNmkvb05ZbnNZcmhMRTd6NElrUDVxSWhRWU0wek1SQSszZ3Z1V3pHS3pwVHlhRFVPV1BYMmljQ1VTMHZock55NDBqekF0MlQzajR5aVBSUDBBNDF5a3U1bE9ycXQ5ZG4rNGNhbnJXY0RkL2FFN016YjVTY3ZzMkRKRGhmUVlvdWNHcXB4UnZrUXYwN2MyY1ZCNHUxRzNSV1l6elNBbHdSSFN0WWthemRqY3VKdUtwcFpRTEc4QTNDR0Vnay9CVmx0UGJVTys5TWpFYTRJZE1NSTZscmFFL2RjOU1NNVV6NnhTUjJuUVErdzBCWlFEWUJnUGF6cDNPeXZET1N4cyswVXdhMkt2eThWalB3eVQ5TlFNd3VWd3d2Z1RYTWY2aFIxSmw1UVdMU2EySWhHM0FKd3ZsMEVFbkZleTlyYXVleXhjZUtXZHQ1QlRVWjdIN2tsb05TL1lkTHpUUXVyTnNsclI2eWJaY2p0QVVtRDBXV0hwTmJJNEV2MmsvelQ4UzB5QSsxNGRTdWhFcnpsM1VTSTN0U0Myb0VINzZITnVWdlcvcXNxOXo4dE5wOWtwUFRPYnZKR2JxOVJPWGx1SUVocWFobStpeDg2VDY3NFJiMFpPUW1zNk5wa2ZYamZRQnRxbTdDUWhPejZ5dmpRNzdBdUx4SWJVYW5GV0VSSjBobVhEKzFqMktSVGpWby9FUVBFaEpOdFJNN1RmenVQMG81UnMyVlRRNG9QV21WWE1GQVA5QllBc25xai83Ym9pSTIxQVJkYkdwWXRRTXEvQ0RqWHc1ZEF3ZFR3ekZyRHpoME5Fb2VHanVIVWVBckpyZFp6YllmajJXRjFHbjE5UHdlL0h4YmVVTm00SlZERlVHeUtESDFJZk9FZlJGdkxVNnJCSzFCWHY3U2ZGb01ZWFJrWkRjejdKcFJGVmJ1VTZmWGhKY0hHWjhhSWxPTnJJZVhTVjhTSWVZYmNWWmVNZXlHWk5mUjVEbGI1OWFkdTdTclNKS3ZiQmVUQ1hzdlRwMTJpTjFqZUM3V2RzTmNiWHVkUWtaOEhLMG9kVVp1L0tyNEZqT3YyZUFGdkJiaXUrQTZZMlpkSEtXbTdOTGQvVkcxMXRtUGdnVS9zMUVUNGYyTTFOK3l5elprUlp2TERmaVQwSjBTWnh0MkMvRENicSt3Q2N5bTE1elR4VlZqdXR4c0RWOFY4UGdzdDhJZ1JDTEEwMnpsSm12ZEwzL2hnbmtXS29SNEd4dEMxcityQnhBQXIyc2lrblhRRHFQdzNzWWluS2hEZFVENmxlU0owMHFqV1kyWHpiallhVHhUbUQwQTBoVGlNZVEzWkpqZFZ2Q2FLTWJNRUNIZkF0MzFTeTAwVVhSbmJqQ3FZMGowNDArQWZ1Tk92c1hhREVicXR6RUVSQkowSjF3Vm1taFE1VTJzc3RKc2p1ckZaVGtvbGJNdFk4RjZiNHd6VWtKYktHYWRIazU3cnkzN1R0Zm4vYUhzaFNBS3NZekpZUElZMzJkdXNBY29ubXlJcGttNzhFWXhiOXhSOTkyZW9NRDFZRHJPMWozeVdnNElDVzdYSUdHb1l4SUo4SjJ2USsxazhmTEI2K25PVWdXRlZhU3VVRG9VSXU0a3RGR3hUeUwvd00vb3NqY25HMk81aUQ5NWlmZ1hzcS9KemtwZkFjY1ZRc2wreCs3a096SGtjaFoyUWlDazJxMld5YUkyUDh6UlMyQVN3YVBoalZjd3NGODg0dzR4Y2FNemcwTW4vZTJuL3hYUkU1SFM3aHdWZWhkcjRzV0dNT0RSbks2TjVUNW9nRjVuNFNQcGxoZ1BsU3VPR2RMK1JRdDhoZ0dRZG5wUGpYRGk1TEhOUGNJN2RsMUI0TXM0UFRUdm9YMER4OUtLRVFtTitoYUZDN1ZIYjNESlBLMWU4aHVYRmgwSnVUcDAwVFFlQnlIWko5ZzQ1S3MwZjVmczZIZUNFUnA5OXlVSjV2SWxmMEJFanZTMkZ1dWdkNTBYbzFKbjQvV2hiaUlYSmU4d2JpMzg1TnRqaU44OFYwWVRGcnloeVg0bGwzMEhsMk85YlVXUFlQZU45dzFFQmd1UGd3S0hIMGpjVjdWWjJpdG9hc1FvUEdGb2l0VzRyN1dwRTBaZWtsMGQ0aHM4Wjd6c1ZHdk1uQXJEdm83NXNqUExGcFp4ckgyZWZWTUpRTEU2MzlFbUM3YnpGdGVMNVFwWlQ1K1pua0cxNGk1QlAwQ1Q1NmFZc1U5a1AzR0FUSkFBYUxJVkM1V2lCcTdUM0cwUkpPbXEyT1EzR3puVUtMbWtXSDE2MyswOHhkdzg4ckNrazE4U3V0YjlVNHdRdXJ2S1dLdndBc1FDY2NvNDhEcnROM2xRU3JTNytwSGs0ZzBFRjJMTGoxTS8wWW5BZ0JhWGNmanI3U3JldDdoZ2s2ZnRqbUY5T3BLT0VycmIrd2FHK21kbmE1R1lROGJMTzFzSGtLajk1eHlXdm9Fc0IwUWZXaytkZERGTVAzRHBDVTBUVm9XU1U2blpVbGFmNmdIeTVQRExLRmc3OE9JUWFackJsUEFRODlDQTJZTDdlKzNzL3dib3NCcnk2Q1pyRTBWZ1ZZWldNZHQ1cXg5bVRDNDVOWFFLQUhIbHN5bDJpQWVLc0diL2Jpay9zRUVlZ29rMlJZS2tJVGpCdE9pdUd1cDR3amwxSys5WmdmbEV6WjdYa2w4bnp2OU8yZWQ1NGxjd3YzSzZVRVQ3MllSWGhrdE9LQjJrOVJIMVRDdjBPakVDSXY1UHFVbndNN3ZkUUZKRGxlazB3VXRuQ0NOdWs3QTJiOTdOWmhTU2pmZzhEeUw3M2JwRGV2OGZOeEhhY3NUTHUvWG13UmdvUXllSWRvU2cvQVByRlo0RkZWOGRJT2NxZk9EZmhKT21uY0xuTEcycUFvR005b21nVFlLKzE4SVdxUFY3ejNKeWlYM2Q0bnZDeTlsU1JrTWRDdSttYnVRa0xYNnkwMWhvTVUvbjR1WnlNN05jcHM2bEZaOWlZbytCZnE5aWwvVlZLczRZZ055TVFxK1lQNitOUlZrMGwraW9jRVREa3Z5dlJOZ0hCR251OU9jeVV6MzhSeEFuTE9qYkM0WDl6KzNZRzJQV1RsSmxKeEdyWFQxSWdzb2ptZVBDRndsY1JSVFdncWFnRTNTOU1tMGkxTzJtVVVqYUVwYVNZajI1NTlDTFN2OVFhdlRWYmVQcmJkajZqWEVLc3RVWnp1Y3JqSm1BOXQ2S0RTNFBMWUpZSFRITWt6clpncHZ2SnhuaENHbnl2QlJNVWwrZVNTOXFidDJZd0o4dHpFVGpqK0JsdmdvVCsyOHdRY3Rldm4xRk9BbVBFWFh3dlltM0tYSHl4cDhUR1ZnR2h4UFNLZk14NWNST3dJNTRuSlNYTW90dEhLTWx2VG0xU1dEdkxRa0VOQnJwUDJoZ0VmWVBMWmNJWlZDVmRVS2dLZ0xzbWVDdU1lSFlNVGZvN2FvcWhvQzJXZTN3d2lnZXdNTEp0Q1dYOHFhdzU4ZHluV3IrTlcwckhrSEIyZzBCd3JxNHZ3Wk5IVHJXa0d0Zk1DSDhrU1FwRXdpaFp4VnEzT0lSL3RRY21LTmNvL3VKYkc2Ym5IdkhpSUNPN2VhZm1zK21pcEE1K2lQalJaVkpjN3ZFZkhTZFJuOUNkSWdQZVRiaGhyMUsrQ3lGK2VreWU5M2ZSK2V0VjBBSS85T3YxazdnSHN2U3l2aG9rNmFjVFJYM2I1YkRJQlRPN1RLUys5cm5IUXNhYVBSNjVjSk9qdzNSWlo3VzBBTEUrQUNkcWxSS0lYUk10dGZ0Q05tQWRqZUQvNWMrYWFuMTBkOWplQXFaOE5WeS84eUxjUWZnQlF5UEV5M2duTmFWVk1mU3hjOENGcXlaM1JGSHlNVXk1UElQV0tPQjlVeVZIczhqK3llMkwrZ0dmclRod2Rpall3cUtkRTErMDZsbFFCRnJiQ2ZqVE85STVsQTF0NUFacVlGbENUQ2dNSSsycjFBN3ovdy8yVmRxZkY3M2RZZ3R0eUl6S2w1M3RtV2hRWkRSRXNJMnNHWFEyUDU2ZnYvWXFuektxT0MwR0lqdkFJYzU5YXc2endNQjBjN0tuT2pnd2M3K0IxUDFvcytvOG9NWDVqSmtHMWh4YmZZc1dNRjFzK01GRkduNU8yOSswcHcxZzBhbkpMdjNuUW0vVDFrbzQ0QWRicUw3eERLYzRZUUhlRldWNkVDdTBVd3BKTFRzTTRWM0pZVG8zQWNoTWhncnB4b3lsd1lLR1hmMGtTVTF4NGJEd1FVRzVxaFA3Zk1jNkFsdWZGTDFUYllhclZNSDAzZEtwQXZabDgweEpjT1I2b0Z2cXVkVEYxaExHNVc1S2RnV05mSVBpNEVwZTB6V0s0YjhRV0dGL2xHbDBqUTJpZXZ6SWtzcGhSM0ZOZFdpc1o3eUNVSEVMWHNaOHl4cXp0THpzemF4dW4xT1I4dnJXUVcwM3dQLzNmQjdwT28zK3lwdFFEdlFFNnIvajBRdXJiS2VTZTJqREJQdUYxREJYYVlEWlpUTEp6R0ZSOUI5Y3FqY0w4RklJSFNaR29vQVh2QWFTem5NMjVmQzFnY0s3aGxFYm1Jb1IzdXRDejJOOXFGemNSV0VrTnlid2dLSExzMmxhR2RkWnJhS2ZFdGJQRUVjREVVMkJrLzVCNEgyVjg5SU9vUFduMy9UK1dPdkVFT0dycDM2azQ4Zno2elpyWnJNZk4rZ3lub0dSbzNoQW1mK3BYbnh4a0Z2bjZhSDRhNzVVejNpMk5ycG9heW1BR0VuRVRrRlgxM1l4U1N1YjJPVzFmdlFyZ0ZDQjlIbjk3MUs0WnRPQXd6VVNubWtQRVdqZG0yNWVvOHg1OHhJek5wVzNpWGoraW4rVlBVUzVYajRLRUpyWCthcVZ3S015Y21yMjVPMVU1OUtEbzBMdzFTdTAzeVh6bldYN04xR2VqcUIwRmx6WjBCMWZ4QTB5ZVlmOTFTUFgvYmpNN1hOMWdMalVqWWF4eWpNWEhzbGlJNXdHak52eDVJMWdSZXRjVmxLMEtaeUVFbUozeFgrcUtiaWROUXZrdW4rU0l5c1B5c0hoSUhIWTlFZmhUaFN1OFlRR1RxNFhSZ01DL28rUmZESnVMTGZtdHJFOEFIVHE1enlFcTNYd3dqdy82TzB0bHVKSE5lUWpWeGhlSUl1U2p4MVlzbmJXZ09ScTcxODA1YStpeEZraEJ1S2ZiL1JreWtZMzlNcGdXSE5mU1NTelg2ZkRxSVlQSzlwQ2ZBRC9zMU96WG9FNkMycjhady9rdG5WcUJ1UW5OOXl1eUx1Slg0Q051dzNtcmhXRUcrbWtDWk1pZUMyTDhvc0dNWktBNGZDZFF3YVNxZDdKSk9tZncySmNMbG5QSEw5dTVCUmFoM3I2YS8xeDRRbzdnSk1Qc3A4VGFEL1YxL3d0b01OMjNDT3VJUVFadkxEUzVTWXFnWTY3UUpTMzVRQ28zbUpOdENWVGRSNDQzVHpBZnhFcm5oc2xKc0NQa3NuTUx4SjNoU1RWZG0wMkJZbG9BaVc5bC9KUTc3aGlBaVprMks0NUUvRXdycGRFaTlqY1Arak5SSkUzckYwd016ZFJ6QmpSZStPY0xOMUFXdFFQaU9hNXQyelVWUnNQTHVrSUJONzNnZERieUE3WFNrTnVleUhjM0JzZ0wza3NLOFczVVNqcDVMMFRHNThMcEEzS1VLYm05S2FmTUROR0txWWRDZnY1OHZselVCN0RWRlRJdmtGOCtkUldmalAvZWNueU9laFRRalVkNVJXT1M4eGNmNHArMmFBdDF1MFpEeTE0ZVBOWHNjYWZGVnFBekVSYnV5bjBWTS9oYnJNNmhPVGE0b1QwZk9RM3VHN2xxYXJvYzJmR1oxN2xIYUhEbjdLSXlZeDl5ZlJoQjFVbzY1QnFhb0QxcTV1K0lhZzZKQjdZb2pBV21veis5TUVKTENYMFBCN29sd1FkTTNRUHVGVnZiRmRXN2ZvVElpcEdUckI0c0UrQzcxQ2x6MXhlUmpLVnFvUTA3NnRlcmFZVkNBQi9ZcFl6QTE1dHRkMk53cWRBSmUvaXF3cngyeUlncTNnOEMvbVM2bjZhVGtCY2dMODR0bDlHby96UzQybTg3emo2bGpDM3MyQTNtdU01djZaMmNoWmp0VFBiMVppRVVLM2RoUlRhSmFaRkhPYk1ucm9QMWJaQU1jSUpqNkhmWDBxR3lLTzhtUlpGNFlRbElzVjlYVUpzSjNsNnNaK0Z2dE1maE1uSUdRNU9TNTlPVHZMUkxjbi8yYVU4MVo4QUk3ZDUybG9jaHRkem5QYkRIZExGc05zU1k3Tldka29vWi8yTG1lMjI2RWdFNHA3UWhsdnZ2U3ByT2tFbE51MU9acXo3eTNSa3lrVTg1RkNZRm5ybHgreVU0WHFyOGVnQlNxOHpySDlYQVV1R3JVcjN1VlJNWDJjMnNNZTkzVGlVSEljREFtNFlBSS9wYTArZTJHeFc4T0dHRG90N0l2ZXh6eHZOdkcwTmorTElmS0xPZ09iT2xmVjBGR0JZZlIzQzJEVXk4dlRaMlRQSVdxUG5uaHJTVk1Lak9JYVhLclhJS2pld2hHOVVXRUpNSUJPYUpCbDFYTWZSNXkvTS9ZTjY1VHJVNm1uSjRiM0tTc1FrK0tSZ2hhYVBWaUp3YzczRG5mb040M1dka2U3UjlibGY3UTBKZE41OGtoZ1c2WG1hOGUwb1NGZk5ZRy9uaC9SOVNZbGVvZzNVL3IvZTY1Y1RaNVhzOWlad3RHM2l2UExIN0wzMml0S2F1Sk5xWDBGK0t0dDdEVVE3ZkhoSGs3WExMdlRnSFNGUE9sRGRQUVFZVG9QbFdlZlJxVUEzb2V2SWZpM1BheVltV0JpTzBBd3J3dzJaSEhHQk1OdGl3eGV4RTJXYVhuVGZ4WEo5R1VGUG5kWkw0OWpEOXBXSXdJWjE1MFVIaU52YWd0WmpQL0ZHam1xZEc0Q2xLYW1OVHkrNlIxd2lEM09BL3VSdTJTUmNkdlVBWXZhUWtyTDZFeVZJM21uOEhxWm9qN1JZMWE1N1FVcmN0cXpnNVltRXI1KzRJcUtCTmZMOGhaNExMTDc5ZjcyMmU0WEd1OHdkWTI0YnpKZVFLOXpFR1ZpTzJPbG9VelRyVFV4eUM5RG9wUS9ORkVzd1hLeVNrSnBPL0RvYmlVS2pEQUVaamJWMGxydmp3KzJsdWpDL2s1S2VTTjFoTGprbG94UFVDcEkraEtaTCt4UmV6cUFhMkRXd2pHd3NrR0ZreUFydXZ2YU4rcTRFL21iMG1YdG01dHVEajFoNmkyWjYrbUJHRUZGdXFqZE5XVEJUeHhxcVpRbEdEY0d2T09qMGpuaWpOT3hMWE16V1VpUjdBbWhqcDgwQU53U3JsSEI0L3VINzFRQ0pnYjFXYTlmVjBXdWlDOEsvOFNUeTBkVVZ1RFJ4bVp5aTNxTk1pV1VvcG5xYWVqUG15emdOMlY5YktJOW9zL0JRMzVQcGxDNDFDQS96WHRqR290aEdQd1ByOEJnajkwOEdkQXUzcEs0WmhwWnlwRWMwQkJtdCt6YjMySFlIZmR4QzNBR1c4d3NFaUtwZlRyVVl6WnZ2ZTg1dUYxUlI1dWNGcXIySjZadXgrWVNxMEtaV1hiV0FzQmlDcnBQUWxnd3NKOFlhdDdvOUF2bm5jblRyTms1SXF5SzJpQWhYZkhWcmxuU0xUdS9xWXFxQjhrSC8yTWVIdGJ0OG5vWUdSaDlzSmlDUGwxdFBGMTZEelNYQ2xMWkdzdVBTWEp0ejdSMjJiN0tHUll2eXdzcTZaNFdvR3RaSTB0dXBLRU1CcUROZXZZaVdXQ1l0KzZIZ1c3UjRJNGlhSzF0dkRuTWFqaXZ0Z1Nrc3NFSnVIbGNXRi9DVlc1OTJ0d0pEL3F4UE5ya2RZdzNIYUhoaGN4WlRxVmZOdzg5ckpTdmxyenJINUlGUHM1SWQ0VHAxYS82elFzQUlHNDBuLzVCb0hCbDFlbkhBUEJ3R3NlQUorRkQzbGY3K216dUFnSy9DbG50QVpJeHo1Yi8wcHp1QkxZWW9uVUVJRXdVUGxLTHJ3VjVDNTZKVDNLQm9sUkdoUDhOSVR1UVhqaUZYNVBoSXdYS0REcnVaZWxFR3VZSUJ4ZjR4SGR4SDAvaHZ4NUI0UjRaMTUwVXRmSlMxZnFXd01Fd24yc0ZDVnB4YTQ0NngxUEUvcGh5RzVIV21Vc3V1cFd4R3diQmgrMDNEaHB6cnh0amxXdTdkalZhMGdJM0VqcGVOTHhveDhyeFdZekhnaXNFd0wrWGlvdGVSRjFySDFUQnUxcEFXNXhXMXFGcGUxWDQrbWlTT1ZSRGs5dFhCZ3d5VHh3L0kwTm9TWnFIbUl1SHh0ekVESVdwYU9YZUFIN1pkbGdVQjBJRzB2R2FWa3hJU3RpbzgvUkQ2L05WaXIyM09rVEpxSXlQbVJnYzdOTStSVExxV2htYzlxMXJYSkJUaGN2MVBucFVLQlpsYWhCNjRRV3FGY2hGSk9Xd0RCb2tXeW5pYmhjZW5nRXJrczUyY0wrUGkzVnNCdVExM3ZsejI5UW5YU1h2M1JWOTlCeDdmeHIrVlROWjJCS2d6WW9wNDczdDRnR3Zqb09hTHpONHB1Q3h1V092YUJDQkc2L1dWalBuZ3ZJM3hxeHlMYTY1bjBlcGFJajcwMUh6TG1BVUkvWXRnQ25zckswazZjL2xienBjeTV4Ym5lSHQ3NTBGRnpSdk5ZUVVBak5YSjlqS3NjQjl4bG1nbkNKZDNJeE9IMGs1dWN2b1FZRURIMzc4SytXMUQxQmM0aisySkpLaEZxNmZZNlVURENIUGIxNDJoZDBxczV4QXBhemZXYTJPRGNKN2ZJNUxYSUFUWTVSQVcweER3MTVQMTBrNXEvc3dYRmFlUHBIblRrbklCZml0Vjd3eDdxTU5jdzd5V1VXbElxQlowRkU5bllDNXdZTEorVkwxclN2K0ZLZG45NmpJaHdhWi9Gb01lWHFUNm1pOUFMSkFZTmFHNlduLzNUZk11MDR6N1FHTnF3WXU5dTdKa2xIZnpoaUhQdGdxZXNkbUYvTnZTOUtkK0JRS1NIdVRmRHUwa0lXSm4rTFBUSjZ2L2RNZWVxRTNXNFFJVjA0WFFLQUoxcWFYNTJ2Z2p4Qm5WK1BzK1Q1UVgwbEpySi9DVHBTL0FYVU9RazJLN1BKa25tUzdNSkdFOXd5TFYyRC9GUUEydFQ2dDlMamp3djlNVXZWcXZBNTh4MjhkS0QyVys3U3JEMi9VTitMTGJQbGwvbHIrY3RGVmdzSllVb0RjM1NvVS9kM2VVeTRxNkU2NkIyQ1ZObVRoWDY5TWlub0dlcFdUOXgwMWxHQmp6TlJDSUZSL29tZXcxMStQai9JeW1WWnpOU0ZsSTRjbjJxYVVNbFhqQlVhQ3RnMkk5amtIWndMNjE2SUs4M3VNQXRGR2tRd05Ob3hQK09jUyt3R2ZVUzVLWUNPRWJhRVNvUGc2VE1nMldQUTNwVDhaTXl5QUs1b3pZV1ZRN2ZwYUs0YnprZmVEV1B4TFBZcE9zdnhka05VYXdpcWxSZmxQVko3a05LZnJlVVZTVkRCSkRqaHRsL24xV0pYZ1gzVXBvOUhkWUlXbU9aeUFKcm9Pb000Z2wzNzhJcThYMjJScTNMdkRqMDR0WlJaRGtqTTN4Zk5jZ0tjT2NVY3dCaTQrMCtWWnhhZnJTbFVaK1R4TkdMZVNqRXRBV05IUTBMWkxuUWg5ZjgxMXZWckorcVhKMzBrTTNTTmNsRDk3bEtrc2FidThQS1hCUkNMZ0NSdVlOeU51dGNLM3FNUStOL3hpRlpQZk5kTkRueG1OaU5haE1mRzZmVkorQkZHWEIzQVFnMnhxQklPQXZ0REk1SmE3UVpzOVJENUFHU1FPME5JR3BNYzJRTVY5MDM3bE1XUXMxSURRQzVMTlJQbFlBdDdpU3FSRk5OdjhZWHNOYTBQT1c5QXh5NkFWcjk3aVpKVHdRVG9mQU53cHRaVzQ0eldjeEthbEtVdkN5bHNxdDY3bXpBL3A1dWlBZjg0b0hRNmkyOXFXejVVYUR2VHptRll2cDFvM2tEOHUwOWgvV29yVVB0UzZrVVRwOE05REVJaVV1YXhYN1NxYk85VVhCQlpQcG5rMkdaT0E1bUNDdEI3UGEvWGF2Y2FwYllnWjZ2VzJRcE9nekx0b0ZjUUwybE5QMC9tbUJLNnhMVzA1OURwazgwUFpCdms2TmZVeFVkemlRc0EwWkZlZTE1RVg3bjVFdjNFQkt1N1dpYnZobEdiaGhQb3ozMGZVdzFiSndwR29McmkrMlpacTM5c0R3eldESVNTOWw3R2dmU0tBSkVta2IxeHc4S2dCMXJxdG9kNldYYW1pdWx4ZzZvM25JcmdXUTV5MWUwNndjVitnbnVwTTMrTXhRd3JYVWFGUmhsQ0pCOWZhTno0ZXhjOUFZZm9OeGRMOUhxcWVQTGZDWUpOSGNDNHN1eitzR0t2bnF3ckxLc2tWRTNaV1hERjAySFhrb0xCeDlYRWZKSnBCeko2aDBNYlljQnQ5ZmRuMXNLaUxyWUV4V2g5d3dsajh5NGFDY2dxL1dLTnArTGNtSTM3YWttbG5XTk51RTFRKzNCd3FJYlRsZTU0MW0xa3lzSENxcndUSlZxZERzTFFiejlpazRYZEMzVlNZS2dUalVrdVJjY3drS3dQU2xGbGtnbm5aOGJ2bk5mNzlCajdXMSsyM2M5UFhYamtDV0VuR0ZxNXlvd1RqRU5zV0NSNFpkYnBnZnpMOVdSYTZnS3B4VGtlNVN2dE9lV0dlaVVpZGM1MldXNWFHYmNSNThBcWs3M28rc28ySnpReWQ4VDJmdHFSd3J4UjAyZHVEZ05DZXNtWitNWkpDN2ZodWlDTnVUczBqcmJMZSs3aGZ0ZmVYOEx6eG00UEdGNVFna3p3bnkzOUNoNnNRMlRhQit2cHcxUmIyTmRHTC92eURnNzJ4TzhsME9YcXVjdGczQ3VBSnZQbm55cll1eTI4Ry9KS1dkcmdOZTgzSHNrYmEzamwyUlgyby9PM2JrZDJxdTluL1dwN3ozdzF3NXBHWGdUQmhmU1h0bnFMNWthdmMySzgzSGhpRExGSDBBNmgwUjVYNm0xem1GYmZrQTlvVXdPUEt1aFBKSzArV0xqTXA5NlUyV1ArWHU4eEZ3VGNQRWlpdEMyWWxqSW1RTEI0VjlaWkQzWG0zc3JDS1dzVmtkUUQzVTd1aGRPMGZjVnI4cnJVeFplNDRSdm1TeFl3YkVKR1A0SDlpUzVMQkplSnU0VGJhMHdaM01iWStXTCtzRVcyT1lqODFMM3AwdC82SEJORmRkNEtBNzN6YjVOSll6VWU5V0RtM05vTHcyUkxtUGFud1hqYkl4TkRwdnN2bEsvdWRHbGVpZVBocklNVjQyUjVIVVJOVFRESUVGTUN2akVBUk5Rb250MjZHdVJRcGR6NXRlbTJENHFLdlVVNVBwWFo1WWtvUDRtN2doMjVQdW5malBXbmtxK1NOYmlJUHBuWDdpVnl2bGZSTTJPN2dDZ3VKYWlJRUpvMXgwNVB0TDUrUEVJQ21rTmovZjdvdTlyd3diTFN1ZlJUQldMVkI0UC9aeUw0bk56cWVacXNVSkFhdE5Ma1RqUVBUTzZreUtlSTQ4WDNNZkZDU3J0dWVRSUtxUGtzcldEREttU2RYUzVNajc0NEx2MGt1T3c1TWh0TzVyWVMyTFdBeVhnWWcwd1FIYUZaaVlHZnlMeVlxMUV6N1F1UkFsSS9sVktUcXM1cDM0SHgyWG9OOG4zdWlBREdkNU10bHNwTncrWUgzTUFVdVJyUGh0bWdWTVhkV0d4YjdPSHlTWkhRSDVhYTlha3R2NmpodUZHN3JxalcrSm9lU2tnd0plYi9mdmR1WW0yakFHYWppNjI5dmc5dDdoZzJDZkhnTFdoMXRTOGU2YzUyckNCbzdOa0tnbDJub1BIbTlXM0RJUWJYai9ta0tKWFRlRUN1a3dhYzhJZm50ZzJYODFHamx3VThHcVErdHE1OFArL1AvbGd5eTZ0dzRZa0RjaURMSkpuV3F2dmM2MUg0Y3hTb0xEaTAyTnBScEtBTklDVjNYcmhUV2Zjb0I2ck43dVNjelU3d0hidW43cVk2VVJpNnNhVTNDR1JUMUVESExacmdpQWE2dnJ6L0RGTWZZTW92WlhJU2M4VTZPWjI2bGlxTjFwTzYzRDFBODh0dXcvdlAyaDZYZldoOVZGNWR6cjdNclBNdWFrYWxaSEdEWFZQMDRzNjVHSG8zY1MzbXZOdTRUR2pZNXQ1bEswVFBuSXJjMCtCcEFrY2NaYlY5QlZJU1EzSUNDYUVVS0xJaFNXTis4YkExaTZZeU1sMW9XRXhNNS9GNjhlSDBGTDR4STBsWUZ2OUovTEU0cGFBeEVoZHFSZXJxZEVvZk1yQU9HeEY3WktMaHkrMVM0VmUxNkdTMS9DU2w1VlFTR3RWeFc3REdtVDJpRHlkQVZsSjhVNnJCMXJLMnhINGo1Vm5tWGZhK3l6elVRT1NSbUl2L1RWRUpvWHJYek9LdDZFcXFyTFp5NjFvRnZvME5YVUVudUFMa21hc2dPNlI1MlhZTWU1RGN0Z1BsSXBKSkFxZkY2cFZRSUVpM1drSEljdG45anAwVGJkaktQdkJDRXBwdWpkRGVuclA4QUI1QjFBdmN0Qm9vRlY2NmZiUkFOaTl1ZjlHY3FBb3E4L1NGRExPenJkRjM3Y3B6eXRXUHhaN2hVSGtQcGRkdytCemJBWmhTeXJ1TEhyOHBhZytIWEM0TWZGdXgxcFU3V0dVWmpBK0wxaSt3V2VkL3dXcGZOUk56T3d3Rzkrc1p0ejRGQjc5aktZWk1yd3VEbkJSeEVhc01VRnRQRE1kVW0yTGtjM0Q5MS9vTEorUU1OZldwUWt1cW9YY1AveDlrR3c0a0dRbFlnMWZ0dUVHY2x5N3dabFRRbTUwQ05oVm01Myt6Wk05QzdQcWFYWngwNmlyZmlTbmNETlRDRjQ5akRHRFlZVGNRWUh4cmR1TzJ5QW9BMWFCZk1lZnY0TlVTa3JrSjNYbkFsN1JXdDR0bGFRcURqY2duYk9Cck5qSDhWQlhrM0tJeXdBSEZwc2I4Z1k5cENxQy9OMHZURFVkZ3lZS1Fic1lmQ1E4N0F6NHQwREFEU01JNHFrWGoyQkZENzN4c01tRGtRaGFaMkVTcHhqSGdmMUF5Q0EvOU1UR1ppa0lPRjdvS1pmUENETDlQV09pNEJkU3lzcFNmZE5rSkhJREt6SWdSTEdQdGZadTlLQjRBUmo2NVNUYUlqUkhLTE1Ja05KL2VSZkFJaXlPSTh2Mk83Z1NVRDNmQ3R6dGs0amZEZ2t2a0w4Qmw5UWtvSnNLbEhOVmpnOGE1K2tMOTRQcForQis0Z3UweHFjeVFNVm1Vc3ZXMUZSdndQOEJYOUQ0STFZaDViL050WDBIRmZ0QUt0Und3MHlWRUFTcFpaeEtkc0JYQ200dFBPQkVLYnBQM2l4dUpGaDJrQ3BSRmxsajVpQzhiZHFab0Yrb3NzUWVjTUxPNk9oN2lBcGlHSEs3cS9YVkpXVHVDZW1mSjRtZmEvWU5FSE16ekFPK1AyYWhYcE9nRTNSdnZ2cExlZzJNRERyK1JVOGkveENuTU52MUFIWnBvT2wxWnlockovMmNMS1NUdU5FQTRHRCtXRitod1lLOFJPUXZIeThjNVg3cTRyejNwWE0wSmlCRjJxTGFBakpMTGI3enowK05iREcvUWpKQ1h6ZGxnZ0xnalo4L3FGSVpmUFRwTnVJQVZEaU42RlgreTBwYTBmVTdwa2dhVzlyVjJOYUdtak9wZDJZZDlTdU1BZE5MS2xBbWlwM0RVSG9mcWIyMGk2Ry9zQ1l2Y05YS2M3ajNuYmJOOVo1bGY0Z0U1NThYUjFHUFB5REF3N3BtdTRTMHhScmhvejZuUmZncndhT3FPdnhtOFFFVjFlVnJSSHlVK09JOG8wV0pDZllOWk9SS1FoK3htdjBKbkhNNWdHZzJydHg0cUpscnZEMmMwOGc2V25aQWwzWTUvZXVqMzlrN1dNTG1iT0Mrb0tLUlRlRE9OS1BiZndReEdNbjdoSC91ckEvVkdCRGFLSWRHWUQrdkw3dW1sZ21PbldnM2VPd2dUL0lNdXM5REVoaW9jRncvN0Y5a3dyaWFFK2ZEdEJSMmRQQm5Uek9OWXhkRWt3Zm1HS0QwSEpRaFFSVW5HWjZ2SUlyV3NBdUZ0dncxK1NvMmRCRW1kd2EwQTcvd0V4L0ZkMi9YOUhVaXJXWlozaHhkTEVlcndvS3Y0d2RzbmZab2hmdGtvWkptU3VlaXVHVlRjYllWejBoYkcxTUJSeFpXMzZ1b2hDSXlGenJ6K1lBZlBCa0dPRjluZm1KVUZQc2JBNWw1d0dGdVcwbjFEUS81M1JpK0x5VnBIYURvY1craUp2SGQ1a2xhSE5meDNvdlFCN3RnZ1didWUwWm8reFA5NFVqdDk0bGFIT3R4Z1FmU1JJUy9kaDBTNTZyNS9FSkZIU1NjNGN4TVVnZktFOUVvc1J1YVB3ZlFZN21uNmo3dFB5TnNQVEdUbHJNQ1h6R1pWOWhtL013SGY4QmZHd043bTY3UmoxM3FoSGFZZWpvQ1JUclFab05mRDlBbHZTS1U1RllGYzNnejVaOFEveTV2OXJxWkhnSmpMUFdkeXg4L01Ca2RLUEFsNWJiRis2cmZIS2FKS0VwS3E4S3dCMkVSTGlSTTVpa2N2OHJtREVpRlBUTVlwOWZvdGJkOGIrbTU0MnlReWNkeTZXU0hrc2xlekhVSjljT0NjWjBTNS9xWjdpSkdFWFRXbmdheFJ2cTFxdDFPZDVwTUpKU0pPdmljeXQxM2xQWVFYZG9hazUxTHdHM2YzMFAyVlQvaHdsZ2RuUVVXVkdmWHFYTGZvNk1HdWVFUTFDekZCeUVxVzAzNkoxeW1aRnEreWdzUklYRnJTRXdTckpCZHJOS3piVTlKaEo3eVZ6NmIvWFdBOGxsOFl4SUxQaUZ4SklMUlBGZGI3WGw0NWNscHJkZmh1V2FSZFozQ28zZ0dPTmFxSndOSTdSaEZ4S3Y2YVdCZjhkR2JWaGJqZ1B0cTFrS0FkTGZYMVhWZmhHcjA2bHFyK0didTJPQlFVTmN1WjdpQVl6ZldURWkyU2QxcjNxWXNLRFFYRnpXUS9pd09PZldhRlNyQUM5V0k0MDl0Tkdsb3o0ODR0ZmlhSnNRSWlTc1pqS3dzQ1NxZFpvNEl6ZXd2RjBteTFQejhFRFl2QXR4U2FCTjhwQVhacXBITlBjTURTZW1iYlZrNFNCd1lyM0hhTkRGZkZOa1FNNmZuVHNRQ2FQRDNpTitJZy9rZ1hpdGw1ZG9HWlZ5L2Zza00xTTVsWk9KeFF5ZXhvUnBSNFNDa3E1UW1EVHZLZi9jaE1OOWtmS3AxRVlmZUY5RUhoY2h5OXdQTlJyNGwzbStLR1NUTHE4aW90dFV3Ny9OaE5PSGNoS2ttUkFxWjd3QTNlNUdhYXdtaU11ZEZsdkRGNjVBZ0hNMElVSEp0M0NWbnJ4ZS9ZOGoweUJjd0dRbFpCckdnRE9wYm9ta0pZVFovMzZ3T0dXYXNaOHFkSDl3UXZxSEtCT0REcVFPa3ZNS3JpWUlCRnU0K081Y3hiRzJmUUQ4ZHA4QzdYVk50VEY2M0pnbzd1alMyNWlCRjdlSjdOYlQ4NG5uczJIQlRWM2hrZ2Z5cFhHNlYvVlNldkQwVWQ2d0U0SU5Rc0RaZkpqSnlGbGFKbDNrMitGelhLOVFTSFdHSmQrVXpJK2ZMQ0dYa2NOWnNpNXRqcTNyMElxYnQ5bTVPb05GQXRKZ3hwZnVRMC95VDdpU1J1RlFjK05PY1pKVnNxYlJiWENUbFJhNCt6bnUyN3JOUzI5R1E0RFl5VmE0Z2F2NWk0UThYdFUycyszREh6bVVWcmdZckhhSGlUVmJYYVY3dFFjNzhlMXBvU0ZSejdXN1phM3ZjbE5xZXFqbDJML1p1Sm1MOTJJZUtxb2ZtZHhYLzVmem5xZm5YRElKbFFIZEMrUkFOYnZhVjFlaVIwdkM1OHZBWVhzNEZIT1pFN1ppVXdZbVpDWmloWTdjWkgrdXMxbWlyMm1vUXk0dWdYSDRLNVdXU1I2ays5YnJFWStsZ2FNU05sdzJXSTFUSFViMS9WUnRnZWdBRjZGTWZ4T2JWeWJTOWFZM3hVcmNrV0JxUmRXU0w5aSt0cW45LzBOMmJHL1lNWTNvS29oaUx5YTJTcXFhbGNpVmdXYXEyd2NFOFdIc3dQOWlKSzFNaUtsaW43R3RqMGRTYlBHK2tMdVNQT1VkM0hObEU1Q1VWMjQvRHhPVDlyWUZXUEIxZnhnUEpvajdDbSttUTZ5dFNhRFZsZFlLL3hlQndsbVVJS3RBMEdCTHZLUkdkc2VwM2lncFNEbHlxS3Fpc2taaDJrY1BTME9nKzJFc2JqYU1XR3VTeFl1amtERGxUbXJnMDd4WGVuL3liaDFUY2N0YXhDdzNWUklqMXdxMkRlYng5MmJNYjZyODlzOTVNZ3hBYWJ1NllJT3lmNGtDeGlGbWN5c0JFMWNhY2hNZ1FsWnY5NDhsMnJwRU95Rk4xMTJpU09EWjhQNnpHb0hBbWdMYzN3SVA4ZVhUMDQ2bjdYbDIzUzRsK1NUb1N5U2lEdFRNb2xRWG1qVExlUHBobnNBMFZ6aDBZcjEwNCtMNHdIM2k5bVlQd2dvcmloak1PMFZnSnlRcHZmbFdGZmM2b0hWeGw3MTVVczJlNktPbWN6VUsvWjU1QW55TEw2RGU5NkNaeERpRE5kcnNDUUJIUU4xSWJJOWFReDMxbG1jVURQUHQ4L1JQUjVyNXFvUzdCNllwbS9XVmttU25vZ1BoWXJGSlRKaTA4bm1CTm40RVBJVWYzWlR0MWY0TnhoMDFEREJ2bkp2MHRXa1ZYNXBJdkRvTURlVTBzVExyL3MvMm1tNmYwVHJ4cDBQRWNKK0xUTHpxT0xreFlhcEdMdW9GY3d5N0JheGtGUzdYSUduNktRcDROcGswSnIzNGgzRG9Dc2VPajhuaDdiS2ErMExRQWlvbFp3RDNZbGFBRU9XRmtrcnZROW9yRm5KaXBmUm5TL2QxenllL05UZFRNS3lnK2xhTnNzTmpnTGZ3VENuMUpTeUNpeEtRbXFuVS9CNFErdVdseElUYzdPbHpMSGhqYWYvWEtWU2tqcG0yMDg1a0huK3dLOXp2QUdka3I4dkVvdkZCSmtzbFdGVkZXY0NVQWRMUmFLL2wwL2ZZT1g4Z2N2aXRKVkVRT0c0bi9DWEJtTmpqaVQvMlYvRk92QXZRcUtEVHU0RFJHT05BQTNKenNvTGdlMGJocDNDcEJZN0ZnWGpuTkl0ME10VitkVk96R2NVSjF6SU1sdDFQOHJnOVJaQW42ay9XanRDc1VOVDRIUkhvUXE3YUhqTXMwUzRxdTVXVjgvSU5aQ2tyaGdMdWtDSkxlS1pRajR6NHNwaDdJMlZHRVVvTXN3b1o5allkMERtY21LU05HOXMvcEl6N3NqamdSd2JjWVZVdHpNUGFNNmtOYUdiV1k5SjAwQis1eGxWdWQzVmtUTGtXRTdqbERPMHBqSiszYVBTbEdhaXF4ZlgrRXhBbkVOa0dpSW8xQ2lYeHJ1U0liR2FiZGpHTlo3QU9jWFcyVnNsbUFwZ2w0MnFrTHhzRzRPV203R0lkZjdrNlpEZVdibFdGdUl5TU15V3B3UHhzdUJqTDUyYmNybmthaGFrT2U3Q1cydXM3WGRHVzNOaUVzOVhYbm5yemhxem9LS0ZtK1RBTEFPbjBVK3o4bjBoWGN2M0JxVSt4RmduUW14Rk45eG5pbjBsR2RxNmpxRmhCZDRySEI0MWFnMCt6cEdhSGNnalcvOGhvZkZCS2U2SG9COFErbUVTK3drNEN6NEMrZUJDTnBjQ1JtdDlxOVlkeHFpVnZlUDIzWVo3RlZZMEtyMWNxTkhma3dLelJOYVg0UkdTL0JOb3loUVo0SzA2cllzbnJFZU5tQUlYQ1d0ZmFCT3loNnFLOERYY1NzQWxtcWt6aXpOUTFuNGJENGhyandkUDNkMi9MRjZWbHZXTTNJdHRjRmQxdkhVa1NMUzl0TkdQTkhqQzJaajNRMXpTRkloK1dJRndoM0tqVVR6eVBQVmZFK0t0cnVxdGhySmo2TkI2Q0FEcUcxdUY3dWtHQTgzS1kzODhoVFAwYmwycnZNT3dMQ2JSdXl0MlptY3Y3QW9CUVdvU0FpaWZXOEphREN4WURIZXZabCtUOGVYbDNOdkhNaUJqMURaaGZhZk11NDEzeHpMeTQ5Z3J0T01IdlRwbEQrclJXbCtrc3NWK1g0MjBxRGxqYzh2dlZ0ZlNrT1RCMEN0ME9aV0NBdHNzV0dBbWYyYy9IbXFQYmFVeUVmSGhiUk5zd3BRNTVsb2NCTmUzczRuVmcyZFdoVE9oOHZDZFJtMHF4NHcxTTlsSGZlc09WOEJmTkR1M1czUTUweUc3WGorYkFJQmdCdmNFcVVINDZ6cmE2Q3BNa3Y0K2kvSHdHMDVFNGhsNGhTK3NtdE5kdFJicHdFRFIzdTZlUG9oNUNFZUJGT1l1MnVnaFNJSjg0bjJkckl6K0FlUG5HTE1PWUJmMHhBRmpOc1g2UGZDbS85Ry9VWnBPd1d5MTkvRWdBUk5ib25YaVJaN2UvbnIzcnBFQjRZbVI2dTc2cFRJdGV0MTZvZTlmTmNnVWlpVWJYVnRwR2tJUUFKSE5DSnJqSGJxOEFPUERGZkJuLzJoNWpmaEU0VDhJVGhHZ0FPL29kaGxDQUZvK0dpVzhUNElzNlFmbEFmTGxpd3RHQXZLK3FEc05vV3ZuT2RnajVTSHRFdHhsTjNXb0VkZlNydWJ1ZW9Najc2UW9jVThKRHVTVE5ZWnU1Z2J6b1RHUTlpNVZyTzFYMHBxTE9HaG9vOExKSE11cG9KSGFZYnRYRWprZW5qZE1PbGN4OTBncUh3UEh5Qm1vWDR5bUhSZXBuZ0Z0NUk2L01xbEZKTmVYSzBYVS93Y1BwMXd6Q0FGQkNCVmJRZldSR25PZWhzSGF6SFFYSE5HK21jSUd6NmltOVI1eWdpMzBWQlRMYXg3UUxRYUZmOVhySzdnT2w2RFRkMkoxRUk5N2dxN0x1T1NyVzRySlJCM2V0cjQycGpldDMzaDk2RGNLZlMweWxwWVRmR3dZT2JidU0wMVZqZlhjbkxKZU8yT09VSEFUcERaN2c2TU5zeENnaXdPdjlRTHo0TnJTTzlhR0E4d2JkbTJVa1VvVUNlUWpVeWpqb3phbTI5RVpDQllteWNJcUNYZWJNcXNGcWhZZmhCSG9mMXdacjJPV0hCRDd6Q3daZ01URUluVVlOSURVTDlrQ0pvWUF2cTF3akhjR2dNVTlJVXFBTVdPdWxRRXlxc21SQW9oU0loREJtS1NKUm91NlFxY1Y3djBzNDBWRDNpR2J6eVZwL0VXdTRad3lpR2VWWlhxTjNqSzZodVFyN21ZRkE1S091OHdSZjR0UmRwYVhxMUxpQzJBc2ZWYUdtemt2Tlp6Z1cyWG1JMXV4V2RUTTRhMEh5ZFlJK2U5ck93RTd5ZFhlTDlRb3pralhtRllqQlJnNHdqTi9qZHVJWnBLL29HQkJkN3V1SDUydURqN2g0bTgyb2R5OGJyZWNodjRvWENaeFVZWHhObEo3dFg0cHR3RE5hVTNJQktiNWgxY01NS3EwUE1wY3JPc0gvbzNPY1p0L1RGMzY4YzhCMGlZYXgxS3NyQ0R5YXBMelRpcEszb01EbnlpOUFmT0ovYUx4TmJLblhKT0tBSHQxekh1aVh3V0VPTC9iYUd6b25QYWE3dnU1SkNBUkhxaUROLytGb25aUld1TE5KYUUrTkVHY3dyZHYvc2ZxZWZGcWFGQ3Q0L200cUFySTU1a0owZkh5R003SzFEN1RYRTJqdjdWMkgzL1pBK0RGRThDUlpZK1VPSW9RakN3N3poSnhsTzNMUE5LVERDTXM0YklVeFFSZlN5Q1pTbnEyMG5aUisyUWI3VWJpRXpnbkQvUjgzYW03bFphUzZnS0MvaXFlZlpnSnJ6WHl5OUtteEVNKzRMMFA4TDQ1K0lhaUp1OXRiaGFTOHBsNWdSTnp3NU9rYldoTmJaWDZwZlJLanp6UDB1Y1ljT3luUjh0L2EzY2wzTUh0a0NVUm00NmRXUHV0aVZDdHo2RXZHOHhZVFhVN0ozeUR4ZTIrT0xDNXd6ODErck5taEtwdDNLUEdnbTlNTVhNSnpmbVNwY01qS1h5dk5VdmlxelJOOFhEYlRnSXYwTHB0ajJQVC9YTXRiWVorTEZVTFdmR1VyL3pNcHFKSDYzQ05Ta1NQazY2NUpCd2xwOXR5ajlkOEpZS1hhaWY3NlBybmNJYVY5cENvaWhOUzBEbERRSVMxbllIVDJtQzJ2eFNNZjgwemVEOGYvbmRlczF4QURIRUNzZmlqOGtZT1NvK3A4ZFFjOHhzNDBTTXo2M1Zza00xakVkYkdjczBSbFlzbVRWeHFSUmtuR3JzVTVxZVdYNnF4ZUVqY3cxcG1LMk1lRmRrTzY3ZHZxK25samRQbysxMTczVnUxZy9QcnRvQm5wMTVFK3k1L1VlNmxpMGxSL0FYZGp1a3FxakRod0w4eUl6SVYxWkRSRnF0UzEzNWM5SnB6SWFQRE82aEJoQk16UnowaG9JMVhabjBrVUk5eUhpOWlQNG1jWkU0elZ6OE8vdWdJcVN6cVBKQWRTQWI4LzVwV0dDUHliNGY0S1dxYU9tMjBTS2w1bmFZWUNPMUR4VW0vS0Fyak1oZGk2cUVYZnYyTWJxTUE1Y1dNdHpRR2FnYnNZTmhwSEFkVHY3TUZEK0dPQnZIa3pnZHpOOVUwek56bVpUVU83TEs3MEJnc0NNQmNuZ0FKU09vWnFUaFk1STk3c0FwNXN5UUVsTHhSMWFqOXVVbXNjTU5qaVJJUnp3Y1dtdE9UREdBbGJaMy9oSERBOEVZMEdheUo5RFQ1SU1sL2ltam9oK0gwS2Z4L25YMVFOQ3E2aTNicnFVYmVyUENteE9CNkFidTQycnZQMmszOEpZWTlZUFpYSnV3MXp2Q0NIQ0V3TkZ0eUVKeTl6SklNSlVHVWNvV1RrcndSVFo2Q0VpRWJ6MlQvMjMyYTBrK2hoSkc5akhoa2RLWnVDanNrdkM1cGxTU0RuMVlHWFRjSkhneExkWHcyZDZOY1BuVlVZV3EvMm9pMGNYNCszWnVUZFZObmZybGw4a2JtRVlpTndqK3pGRENUVWNuVFBiZU9PbUx5ZWxsMDFFdktnSy96a3R3MWdXSGJRUlNoNm1TTVR2L0VMcHRaYTNwL3FmdE15c1BEdC9tak1kRkR2YTI3M050dnlNZit0NjNxM2I3VUx3ZzAxL0pobVV5VlhtQVJWU0w4bDFBUlpjTFlpSHFueWJXTzVNaWc1WnBkaitRTFRzbHMxdmdrY0tzLzB3OS9uQ3lSaUE1eGVqOFJPM3F4Tm5FVktkMDV2NUUwZEgrZ09GSjlQcG0wU0MybjJSZ1hESnhacWZBR3Z2WUZOOVVCbVJBTVZXbUFXOWNZeXh5ak15L2FCUHdqUEo5ODBYV1NaTTlTdU5HR2QweFduWFhHTXg0UEZhZXBrbTFmNEVXSG1iZEZJWmhMSzFwMklFeXYzTmhmV0oybWQxc3NTcWVNT2JjVjN1d0NkQ01qcjBVek0zMnJRRDJzU0xNZGNGeVJnV0FLbkN5MGdQNEpDbEZ1Y1FYZy9KbWlUL0s0UlBiQkFXMzlIVlhvYVVnQ3hFZjVtVk1zNzFoeWJQQzJDMTNoR2VwbktJMjllN2lvTWZCaGFMSlhKRVk5RE83MXVpT2tpWXpEN1ZIdk51aXo1SC9ORFBhZENCR2ZtUW5PMi9FU0dsVXFONXQ3VDBrZ3hCK3pDRm9McWVpT05yc3NKZHZ2Mnd4Q2VJNEw3M1ltMkkxVVV3WERCTXpidTZCV2ZCbkxtU2hQazhmR1hSV2N1dm5KdGdTcVVFMnpHTU5DMU9KL08wUlhrYnJRNElzQnI3b3IrQ2xUUU9oZm81K3B2Rkg1TStKa0oyaGxrbzMvSzF4TWVjUEthaTZSRHhKQWFaYlpyeUY1S0QvZE1GVzlPWm8rSmhKamVmYTIxc1FGUGpBb2FTWnh5WmRWWlB4QWxRUmpPRlJ0OEdUdjhEQjQ3WnJuYXpEbTJ5UjVaTVRrSWtkSXc0ZU5zYzg3YTBHVldnVVl2QnEyNG5uMTVLeTJVNlFrb3dxYlBqMVdVMXg5YlZQNDc0WkhqeXFHM3BkSUJTUGVselhtUUtRTVc4TSsyak5aZ1lrS1MycG9oa2tIbm5qVVRmUW56YmMwSlFHbFZCY1htRW8zTmo5bGlaTml1NzNVbTJXeE8zMjBBSnViL1ErY1hiV1RKekdhM3N4b0szeU9HYmM5aElnMHduMlBpOUdrVVlXWHY5aG4rR3A1Tlp0QTVrZHFDTXF2NDF4TzNFZFR4S2tlZ2MxejBNYjFFenlvNGJ2L3cvMnQvc3FwTEZOYVVUQVBQdURYa2JWYVNBUEhoY0JGeVJwSWw1NzdHREhsT2dMNEx2bXkrdzFKdVBVSmtHdUVscHE5dlVoR2k3VjNxVktpTVNuSzVQUWdYQkVySGUwR01NelNoWmtPWFpWNWZLVzZSMWR0cHVkdzFneWhQN0Y5NytKUEdyY0htbmRtVlo0R1NXSGdPUEV6WFplQjU0NW1MbStjUk81MlNSeHhIWGJJTDA4VXFoSGk3NjErbXZ6VTQrNzJWYzAvcDVCNHVnZ2hIaklmQ0tpTWlBVFdPdWZMTmV4Tjg0U2M2UDR0K2RFdmh5eTVoZGJaU0lTL0wza0V4ZUZadE9KMmtnVVk3aUZWMjdFa0diTi91MlRieHZCaUlZQjVwRnpuYyttcitPNFZKdkE3QjAwbjVib0tNMDArbUhYNDRLRlBJd1kwalFEUUlUYjhqQ082d1pDS0NOWkdPazBCSVVCbTNhM2hCdHFXS3VRS2J4UHdTbGZORTBtajhiOXo3UU9kYUw1ei83c296ZnVhT3hWN0xkRDZJL3RXbzkwemVzYnBBWkw2Q2ovQ01FSlUvSWFLb2wyN2FJNG5sSGtjbE9SYjZCTFNrV0psMkgwamJvU1dDd0h6VXBmOGtzcFBzZ3A3VFdRY2RVY1JIUXdsOFdZYlpQRzVEUnp2SVJEWHMzbklmdGZzRjBFcWt2K3dtOVhQWFd5ZzFON1ZrYjdiV2VXN1VUKzFFOEJ5UkxzMmlzRG9zeXAyUnEvRmxYaTdsaHZPRUdCenZpM1dSM3ArbVdhUlpONlJIUVFaZDVnQzc0bEx6MEtRSjRIeG1FL3JSV2MweWZvWDkrTVlxbXZYMGEwRGdFWDdacEgybUprbnkwa3k5OTF3K2VXQmlHdXhEUnEzTWFlVnhHeE0wKzRVZCszVkRYclJGZnVOVEIrdCtIVWxlNXdGWGxleUE4MUwwZW1ONzVMNjZvcEVCNlNqMkJBTXY5aEhEMGFaYXVLazJPbHcwR0YxbmRZbHJxZ2JEZmpMSWovRXNOWTFmaW5tb3E5aHI2ZGt2cGJXZGJXY1hLU0dwQS9ZVUtDeEFPWnUxaDhnWmpwQ1VJcWJEbW9iWElUM1lGcFo0enNncmtDOWtHT0hZNEVwR2dRZTBpa29IdE5XRGV5ekNIWlBWNFhsYUFCTHdEZFE0N0tscXVHYmlZUm1lMUM4Z3dvRFp2dGZnYjlINUtrQVVLR0JxZFJmSHBvVVBkbCtERWpWQTVzek51dHFlaE1qZS8zemtEM21GRGZvYTRMallPbXpGNmdzd3RlQ1JUamVOdWdKbWhiOTJ3NUJuSkZMTld6MXpSTlN0ZzhwRlNWakdHNFN4dWJOcDAwdDNXZU5kSnNUUzlpd3hrSUwyN2U1OTRWT3RwaGxTREFnS3ZHVXovSVpiRXUzcFh6NWdkeGRsNHdUWjAvQXFiVnpRbXMyeXp4bGJZNXZQdDhZOWpMa0kyaTZRNlUvMHhPc1cwKzg4b2hObmlpZXkwZ0YxTG9LSmdBM2lLUTFzS04xR3pubkJIN2FTSXp6UForbGJRaldsdUxtb0lZVndwYUcwSmVBMGc2SUV3V1VVanpaTnlRemFmWDhpZ2dPUnoxS1RGUk9LVzdtZ2hNd3Y5WVlpcldHYS8wb0hiVmFyQVloeWk3UVI4WTdTaWlIRHAwa2F5NU5LSXM2SC92aG10MU9wV252VS9kbjUyWC9ucUEyWUxmZlVmOTBHa1U2ZHRjK0VyZlVNMWtCdXVlZWRLOTBrYlF0QmpyWjZoOVVYRlpsSCtCUXIrUWtGV244QlptRnhmZzJFL1QwSE1SQi9idDdqSXl5bEJRQ1lsYVo5aXVkazV5d2tqd2JZT040WGxsNUc4RXhobU9uL0NvbHg1L2JuOURhR3lvWXpnOUd6Tmw0V243OGRWY3VDYnAyYjlMeWZFb2k4QUZTSFJCMGY5YzNQcVhmWjNSTUsvQW9lWUxGK1JTcFVCMC9DOXlCVG1rMFlBdHVRZHFmZEFZZmdIKzg0RXhWMUZLWEZONHRLRWhjTmZjSndUaWpIN29lMVVwME9vdE5QUXFTWmttZ2YwQVR3SUg3QlVnUGpWS05JbTFsdG92SEZsRVB2TVEzMnNMUnp5QkEwOVAyZTE2QXR2UmxTVGdKaDFiVUZhMmVITXlKeEEzSjFFNlo2eENrTW1rQVVYTVFRQUo4MzNxbTlNZVFKa2xUYUt5RGpBY0hUemRxcThEZWQrbGlsL2ZRYUR0N1pQMStUV0RPSnd6SDNQV2FWY3pSUXZWczBQYTJTYnhnSXoxOG51ZXc5WndDd3JQZjVZWm5QY2ExaGV0UFEvRVVYa0JFZDAwc3lPdHp2UGszMERoODNmYmRnZTMxeVVQNkpVbENQRXhEWkhTMmF1MG81U1MwRFVNT1pSNGxVa0daUVpFSjFvNTZ3WXErY2ZoWDE4ZnRvZzU5UGtad21ZNFdCWThOSTd1TmhOekl6VWIzbGtwTnRKdjVtTndOU0NBK3UyMFJNRExob3gwNk50WGt1UHZPeUFvTGZFTTdocGhyYldGSTlVemQ3ZVVIVThObEtzd21PSWxXZEdObS9HUFZjS3BzV0Nkek4rdU9Lem5SRmFmVW9UOGlDU040MnJHT0xHTDJrRWpDS1F3ZmRtNmhrVWIySzFHajFlQ2VzNmpxWjYyd1lUenkzVFlIQU1TV0REQ3BrYlNuTVdkdFhYVkpwTWx6ZVptTkhVZXhJU0JXMkVCWDdkUy9JdE5CT2N4S2ZJWGVZQlduTEh1aTduMXVnZS85VkxqdllsS09HSjkxWHJPUng1aUw1UFJza05USTBqV28zTXptdDA5V2ZBZU9wT0ZoZTREdjdNckJ3NG8ySDlWRWsyeXFGMStOc0NjbUtCL3kycEVoWndLc3cyMjZHamR2b1FBdnRPVEo2QVFHWkpVSnJkdmdRTVNzRDdpRi9mUDQ2Z2g2NWpQNGw2VzBGaUZNWkVaK0FkQmNXeExtYkpRMnlUelZtRXlwWnlKQWhGWi9VbDUva1c5ZFRBV08rYTJvUDVMRGNjSURMRndmZ3RQa0h3T0xLWVdVNHFpNStyRjIyUHAraklKZTlLOUdRQ205eEhLd1VLRU1QbHJqWU1KTTFhc0xOSkFkbHBTMm11eUR0RlpZcTRIZW9raExHTGFqK2xveFhqajdDajI3SE91TzRvY2VFZmp5b0tpeG1mRzZtSytLLzErOUxJeFhaK01Mdk9iZ1J6elJ6MjZvR3VSNWtGaGJEelVSM1FseDBUdXVJVnUrbWlYeDV2U05CRG9Pa1ZLdXhlNkNVcjFtODlGTTQvS1dPL0RqRUp0MlcwYmRGdE4wOHhWVEYxdDZtQkpFdjhxMFYyM3g3cktpck9rdkNnRFcrRnV1Tlloa1lFVkE4QnNTVFBWNjc0eEhwek5FdnJ5VWV6R2V5OTh6N0VrUGFvZkM5c20rZ3ZxL0pDaldiRVZGaWpIOGpOdkhsVlRkY2xHaW5wYjBpYUJOZ05FajBTY2dmOUxCeUNPc2ZhQkI2TGxPbldKMkxMeWRYd2J0UzNpaFlZMXg0ek80dDZNWnhSWHovUytyVUdQZmE0SFo5cHZPUGRXcGwvVVRGT2VFeGFlVE9lcUg5SitUQjFxWWdlblNPUmJweEFrQS9wN2dDS2QwNi9tT1BuYkZOUjZpQWhoWTVESUY4WVViREpZZHVoSjZlS1ZzYitFMWx1UVlLdHg3ejZEZUFPNCt5WCtkYnZjS3FpOEFZNlF6Snl4N25pbWduNCtDZnlIUVMrYlcyemNRS1ZnYkRwTDJhNzdOdkdyUldXQzJ5Rzc4bkN2N2R4OHl4alRRUWJqbVp2bXg5aisyZ1YyU2dRNWQ0MzhtSUZoOHljaXhWODFiOXZ3N1JVN3F4UUNFUjRZMkNBbWhZUHpRZGs2V1ducGtyUWRwSDZPcHVhYUhnUCtOL1dMdk5vOXpCYzZVWHNuWEJUbWJ6eEMrcW5XVStDdkJNNVVOdndnck44NTgvSkttejV2VUdnLzE3bE8zSVJ5d01lMEJ2UEdoMHJoTG9PSnBqZzR2ZVFPdmFkYXZ1Zk5QT1RROUdyRURZdHhDeXViSnljQ0dTbWVDZHludG9BSDQyZVZIZVhmYjR5a2VsWDBGSzYxTDNFTWRFMDM0RHo2cDB4cnlPSE5aazNWYTk5WkdwV2hLRXJ2UEhUYkpiNmdGTHJCRlBmNkdRUVY2bTQ1MVdpMEg1ejVaWXVtSGZtQ3hLQ0NvVjNVb2M3VExuanZBeDkwcUx2TE1UWFBIYisxYUhBMHZsMGxBaTRJR2hlT3ZMcjFTZllCSjIvZXlPTHB4V1RmNUlWY3NIOEpTb1I4RjF2eDg1bjc5Q3NXTkhoVnUySXMxeno0cmpLZHJvN0hObDZaVlpHK1prbGRSOS9lR1JQb0EwV2Jic3ZCdnA5bXdtRHZ1VmRBcWdNamdFbG1NWmg1QnNLV3hKdUVoUW52Qnk5Z0I5QjE5Y3RVc3FCbFhBMi9BcnB6T29YT1JQZ0FGZWFCWU1hc2lXazlLNnRKZ2RPdDJ4SkxyTmpNT0kybTNsL2UwbThnbXRSdFRvN1NORmI3RTRQVWFiWXhmR0trWTFiOXhkYmo0T0srT29TYnBzKzc0QjE0M2pnK3I5ektnZnBCRVI5di9tM2dTWVNwU0FTYm5iMGRubGNUSHN1QTJZZzV3K00wWE5MU2syZHdZUERZOEdSMjVzZmRQcEgzb0RPZ2F2SmxEQkZJYTZHWEFJWEs0VnVtanE2L3U2bHR6ZU4rYUtRa3hNVk9wWHRkclgvdWtBTkNLS2hWbG5PdFpsTjB1b1ZnMXhiMlU0QUZkaXEvU3o1MFVjY1BORFUwc1grREZEQ0RmN1Zpd2d2TnVub0k3T3AzQjdHaGtsbjZORFBSNE9zV1ovYWZXRTh0REJjTUVHeFdWVGQxQUM3SWJWY2c3eWdSWGtCcEVTclRybjZERVBlRmNjRU1nTHJTQ2NET1hHaGs5aEVGUE9kMlJBS3BJem1sb05VWkc5UW96b0hxTHZBdFQ1Y2ZIRzZTUWtoK1J1MElyU0V0R3ZsQVJ5WERTVlZaZURzam5yS1FXY3VSNnQ5V1VDU3JXeFdFN3NGU3ZXNk9JcUlEMXBUTk5wT25jcWIyOXd6YWhhVm1lOGlTM0toL3l3M2tSS3V3YW5aYzJlem1ST0JYcXltdDFZQnpBWnpMTnJrRDZJeDhlajBhc0I3Z2VQaE9wTDBEajUrUm1jWGJMT1grMzl4OHNpb1NmMXN0MG9pNFNnMlUwZDE1Z1c5c09ncS94R3hXb1hMbWR5c2FURm1kQU9vZ0dueXZscXJvckhMeTIvTndSc3ozUSsxeFZTa2tiUVpleTU4dWszK3JZK1RkL0pKZUdtaG1aMlZzTk1YZzFpZWdlYmg4NnY4ZXJOMm5GYmNLQUliTFN5cnpDcWNIOEdiRXY1elkxT1RmZkVmTTQ3Q2RTTWRiSkQzMGRwWEFaRThLZzY2cFhQd3ExdzlHWjZLWFE3WmN3VW5wbWFtNk9ONzlxN3ZvZmpXaEtyczZUZE5iWFBBdmNmV3hoRVJvWHpwNDNDeVJBeEJnZ0ZaMXgzdENjby9YUFFFV0ltZy9qZ3NoM1IyQlB3eEFZQ3drYytCcTQyVDB6cXdISk9pSFdWbndRSjZZYzE0SXdpdWlsUWhZcnZwVHFkNllGa3k4SFhkVHI4cHozRE90ZWE4a25xY1pEYzN5QzBBWkxlZDZ3RDUyMGd5bVpTaUMzS3c0YWdBY3owRFRTMjA4ZzRjSm9SUTZ5TTBBczhmdTVma20xRERVSWFqL0NSZjNBT2QveWJiZTNacnZKTUh4ek5IcVlQMHkwOW84bERXRWl5TkZsU2luMXVGckdKSk5ZVHNaaHNNNFg3Z1orMTZQbFZwMlRjQUZvRENBVXZYb0VTQ2IvRGVQdG9kb3AyY1Z3M3dyai9RMFo0ekhKL3BoN3RQVjBKNFU3UEsrRkd5Q2k0NFJySlQ0QUxKemduTW4vTDBwN0ErS2NRYTZBc1hKM0VFTkhvR0txVVY0cjA3dGVwc09xOUMrczhZVEgrbCtUSGtpekpNZ2gyaTVUV1gwMTlpYitCTU1YdDhPM0drYlAzV25nM3ZFRnBmREsraE9nRFRQZkxOVnJHRmx1dGlQQWJTM0w4NnBjenRXbElHdktySEwzK21jNlY3U3RCc1RjM2ZvaVQwdDhrQ0Eya2kxQXRxL1Z4bFhudzlGWTR5S3g4L3RMMUFvaEs2bUYwOC9hNVdnbUlONkZMRWRrQzJ2ejJaMVlqNERJY2x1TURIUmxoL2VXb1ozSHNwSmEvOXk5cWEzM1BJWW1sVXBQYm5sM2RsdC9BTlp2WjE2OURUZjFUUWFFem9BTCsyS1lRaUVnWWxlL0ZVRG03UXNPYjdoRGFjRWh2YUdFRFpQdWZzOVF6MUFFeUZNY0hwaTVQdFRxaXRaZUN1UzdNTmZsOWRJbmFLOGE2QmROS3R3aG9RMDlHM2tUK2pnSTJlNi90UnBUOU1tYXZKMTZXRDd6dHVVYm9nR0RGblRXblUvVWVmb0k3K2cvWGludlYya0RDaDBWUS9CbXZsQmE3VHkyZmNHaWZIVkhXU1ZCTzEyYUVrUUw2MUJwZEgweEprL1FJcjVqb3RiT0k4QnJ5VXduS1Y3U3NqTVBWcTVTZThldWJQZlJKalZOTXBPbm40MDVLMUxpVWdCODlNeERaNmFWSXkyMjBVa2RIb211L045QjFWUS9lLzdBekF6N2VHQld6cW9KbjlNUC81R3BueUY0UDhGOVgvNENBaVlIVGg3Rm9HYm80dDlmckFLMnU1THZkd0dXRk1EN1hRV3Z5QjBTVDZqQm9seWNUVUhPZG1lQzM0ZkRaZVJMUnh0YWIrdEJhUWloY24zUDhiSVd4d3NGVlM1WDBhZ0pHVWN3RlU5clBnMDZEV1QzemFUQzhMbDJrQWU3Z3k3eVB6ZmlCcEtCNE9URUk1cURVemhrV295SGtnbG9ZbnF1YSszUmwwaTVtYmZlQUovUDUvdHlHbTBsa1FySnZZcWpiUTl0TjBFbWxzdjBQejc1b2ZRMER2WXdTalc0VFRFWElFNm9hYjFlazhXYmV0WGdwMm9PamlSQk4wdm1hWGt0US9TVm9oc2NxVVVXNUFoRDBrc0xZYjlUR3JLTE84ZzNyUmNIbDFNQU1kcmdHN2dJYURCYUJCdGpUUGxyYlNEc1ZhcXN1N29SdTdldWRyYXhyRTdyUDVRU0RRYTE5aXAvSUk1K1J2dkdSSlBsWnB2azRlM0dPRnJXdDhRT3pxSzNvSjFUUDlSVWptaFludm1WNjJIODZFSTg0TU9QRXRNKzErZVV1WnFIRjF4UWd1d0FFeFdRZDBjOWM1RnJqWWJIcXZWV2JTaHNBRXpsSS9OM3BHYmFLZ2M4QVN1aHZFL3hTdlEvcmdPbUVGZHM2RWVZeWVnY1hNd2JaQ0YrellIRDNwNTB0WHp4cFFrQkpjQm5CcFR2N3N1T3dxWVNsSkRuQ3A1OFNRdGlNdVdiSUdFZFpXaU1aNHU4N2xUSXJrYTdMYm5Ib0xKT3F4VkI2SU01WjcxMVMzVmNoUndBUmp0MU05aG1KMlZJSlY3NDErRk1PY1NhSTFyUmlUMDRBTndCQ0NacEs0V0MwaGMzWTRweDh2ZzVKQ2wvWnFsU0g5VEdtR2xMR2haWmV2elpEZXJvcFhvM1REbkcvalRlRVRwVVlCMzBVWi9lejFUS01jTnkrK1F1OEZTK3NrVm9GcnFaYjhad0RGc1pqVGxNV1N3bXJMODBxbHpkK3ZnMlhITm8wTUVBS2czOTg2Q3Y1dVp4b2JzeTIvZWprMFp2RElEWVMzOS9vK2xFRUNhejNWNHpaeUdKT1A1YWl5VkVlMTNCS3ZlMWN1dW1rU2ZuV29VUzdnY3FMdVdtd0tGSzcxTG1IcGxxcyt2M3FrMjBKZGNSRXZNa0ZuaGZJU1F4SjIzYWYxak5FeTBjMjZLSUFZQXZWWUtvT0lpbmFMUnJqZkw5MURrV28xcWUwMEkyam9TWklvclBwbVgweDVJWlY5Qm1nNkFvV0orUTZWMEdHRFA2OVYxRnpZTzhaZzRUU3NYa3NMeW8raURtVnAxRk1PY3VlazNyQ0daNGY5NG40Qm1maUd1V2pnSVRIQmhZNTgwMmk4WlFrcHErS3U0NGpNOFduWWlLWmJlZmpGMjdaS3JLbE9PUFJHK1lTU1hTRjlFQ2N5cnFRS2dFYnlGNVQyeVFJczdNVUhiMG9lbGxGQ1dXanc5RmNUME50SElGbjRzY1c4cGNQOCtGVkhPcnhsby9FU1dUaDN5NSthbGphQlNyeHpBRWVUSFJBeko3bWUxYjhDbzMxSnZMTExmODJDRUJIdEwvcTM1SWQ3WlVsY1ZhU21KMXRrTVlJdnp0QjFhelpwd3RpcVlwcGhTMXRENlVobWtFS05vVXhXYVJMUGtXQjBKd2hIaVZ5MmphZmRaMEdCUVBWODY2eXpYZE1UdFd2c2srNWhJNHF6RkhjVWVJWU5JUmNMMUVtSVJQMWxFQmFuZ1l2b3VjVk5aOTNqUnM1TlVpcTNZV3hwaFdiU0JCQmU4cGpTUldpRkZLd3N0WXpFWVFxSlZpYUFGdUZKQXljaHJORE1lcnIxWG43Mzl2QWRsVzJHRmg0YklLRG1DQkFGU1B6YUFZSnhhNjRCbE54QUN3NllvbVFqZGFFSytOMHFyNW0zeFd1QUZYYUlQeGxZMHlrT2UwWW11cXdkMytBeHBXb1dtWHF3V3djNHBzYU9SVFN0YVlsdmpxS2l6YU9LQTYrSUswYi9OdWFDLzhNa0NkVHlEL3RjNlVwcWVubGxvUHZ6cyt5TTk3ek5NZEFXSFVVYVJjNUROSFhQWEVqSDdITUhWQXNtRGpQc0ErNDkrRWswa3VwS2o1TVB2b1I2TXpqMGd4WnNYOTdsWjlPazFtaEoxYW85KzNjUitycmtuL2R5cnpnWG5qUE1QVTh0Y3h0ZDFtUkJmSzFxenZJOG5uVkdyZVh6NjVObVRDQ1MwRDhkcHdrOEhwWC9UT2Y1Ym12eEMveC9UNVBiai9SS2xVYnpZMFQ2RnU0YTFWTFNJbXlZVTNKK2dDNWVvY1pKV08vZEJRTkJRRU41VHVpcDViazhidW9XbkN6WG1oQUYxc3lJMXo1d3hYd2dmQ1Baa3U0KzFoeThyZFNta0l4aTJIWXVnUWQyS3lRaXF6R09DRlFVRVhWNmN6L09mMTNDNDNJRzNLcDQzMjlPREx3OWJPZkVqbGRUeVNuRlkrU1dBSWxyUml0WXoxMVkvTzV2Zm0zRXFaNHBtekZYaU1mVzRoRUJzRksvejFidDNLY3RmV3ZMY21TKytTeUs4VThlVGZ5N1dPL0p0NVhXWUV6RDE5SDQ4cmVub091SnIyNndjcGwrMHNXbncwUlA0MW9tMDdBM0NhZ1pRSUlnN1NQSklBWkFIS1MwSjJSVmpnbm5MQ2NNQ3ZrSmtLa21RTDBvNFdaZDhIcG1LaTVmVFdHam5tb0xOdnVnREZaeFpGWEZWTUtuaDcxVHFFNHNGS1JBZXFaNWoxcm5EYlNHMWV0dkIxRUVHMDVsT2FqVVJZeTgzVmJVQW1WelM5ZjVmYzVUTUJWQnJrZ2hNc2ladXR6cVZTbzNrdDQ5TkE4cE82ckpZVTVpYm02aitFVVdBU1N4YUtGV0I0bmJYRDJiR0pzdE9ZYjJTUTNZR25ZZ3dVNTkrOEdhcUx2a0MxcVBMWjNaY2MvQWlCbXdubldKTTNqWW1PQ1RhaEdJWmZvbmt3VmlJNit1OUdsQkVGYXc0U29NeWJwekdOL25MNDgrenRoMXNXbWhHektyWGROeC9FdEFVMFIwd1N3eDVBYjV4ZUdQdDd2YXFnR01FbGc0VTIvaUc2SzQwRnlLdjlQZC82NmloMS9sekhqZ0dKbUtZWVYvcGRwcHBpN3d0NzVHSi90RnY3VXMvMEUxR1pZcHJtVFQ0dkMxMU42bnBzYWtJOHF4OUFmV1dMSmJ5TkRiUjlYb3JHZDh2Ynd6TnFia1FFVHRuTjBaamtzNGs4bTAveFNhK25zKzA4NHE2V092T1V6M0ttc0ttRjh5TUdneHFxZCtoVDVyMndldEhDZm9QSGZtNTFtd1hEV0JManBkdGNMNnJiRzN1WnJxSzBxenpCUEV2cnlyZU00TFdiREtpUzluTXpxdTRpVVNrWUpkcy94dm01TlFJaTBCN1Q3NVZzT0hpM09RWVpqMURkM3NIOS9NdDh0a0o3VWZiUUtDVEtWR3lZYjBjK0VldEkyYTFDSVFxWFlGbDVpWXp0cUJKVXZYcEk0YWNBV3BwemVNbjlzWk83VUxIZHB1NXBnQ1BOelB0aTR3OHcrNnB4MlVmZkZCSGFpY29MS2NjeHFvMXFuT2hUbVdkamw2YTRJSHpFakxzVmNuenk5ZDFiWFRabTVGUjNPL3BISkhxc2xpR2FKVUw3Q2lraWtjajVOdmRjZXpiL3ptWGpqMFE1WUxWTmI1Yk4rNnRWUHRwS3llUGVEYWt3a1J3cXU1dkU3RGFUOTZCb25UK2svQmsrM21vQVlCWUhCRnRzYU5sbmYzQXEvVHdDRjFhaU1YaVJMcG1PVC9JajAwVzNoQ0ZBbnBPWmh1cUN0enNEc2ZIOXpYU1B2MTNEWExjQ25QUnNjZjR3VjR1RTFUaENGOExHKzl1NGFRMmdTSG9ZSEhYdVg5eklCdThsV05aS0hiY1R2MVFoTWhtZFFkS090V0twL05oUzRVTWFRSHovUm1aSDhkN000a0VmM0VMeStRUGUvOVFMOFdKMnNGNWdIZTZRQmtmWUc0Mkl5WTUrazlUdmZ5N2ZPemNsMkZWZmQrS244MFlFZ0M1QTN3S1lQai9QbXllektBa3NYV2dyZTE3cndSbnNuU1dvbGRWTFFaVVRpYlBOMG95K2U4MXBmTlJSa2FUbHVJVE1ZV3g2bi9rcjFzeEh1dTRFWTNqNXhvcDQ5ZjlYVVlaWWFCbnJmOVQ0NmQyY0lRM3QyZmxsZEJmY3lnRUljdUFIVkdxTlJOQmFwZlEwOVpBcll4VlFhbktRQzBiM3hCSmJ6dkczdVZaUlU4c29YR1lxRXh2MU84Vis0ZS9zYSt6WitkVjltbUtDbDZwZmZhTDIyQWh3WGtPV0pzY0h4WnZKVzJyTDVQSzh3MUJBVUNoK21oMlovTGZvTTdrL3Q3M2haRWtIYW00ampOaW13Zkl2WHVRRGczZUVPczNyaDVRd3p1eW1MRnRUdFE1ZEFabklMTE9VamVwRytnbkhRTngrMCt4dnRsbjFrVi9UK01SdGxSUStKNVR2RktzUFYrZ1YxSkhieXJJdm5zR2g1Tlg4Si9YaFNEVHNFWGs4WWVpS3drU1dKRkFmdnFwUmkzQ1pUaHZLSkt4b2h4NmdkNE1yRUd3bUxSN2taUzJpRXdXR29VYVljQXMyWjFMOXJRbW9kMUI2bGgxNmFJSTdGZC9SUFFCNEx1R2xkT0p5WGlSdkJnRFFMbHdVY0laREtnOXVwNkJmMHdGczA5ZXZ6b0o5TFdvUTZkOXQzNUJHeDQ4alFYL1kwYktjMnlEUGFya3dMVzFUcWJnYlVWRmRtQzdjeldWd1JldXZjUXdzVlh2Vmw1VkhwZ1NLUzZISDBEMjBQczI0dFhnQUVYNmxhL2ptL3NDbW5OZ20yRmhSb2NmVy8yclAwY3FNSnVoc3EvS0pmRGFGSVVzdkdyNjd3VFAxK0hBeUhENU1wdjZkYnozMUg1dzhVUHRSRDJ4b0VnM2RVRVIrcmYvWVZ3aU14c09WNkJNUS94NXBycWhBb3pzeUpDYW43THpqNFZ0RTdIelI0SVE1Rk1SYWpsVFpaVXh1MlVNY0RUcE9VdUJUUUZoMDVhY3owekNIbldHRWZDb2g2QkJadEFFN0cyUU85ck9CTkluRG9GL1RIU21qUXhLcnZZQTdsM2llWHNIUERlYkhWWGxLTEYvcmJ6VndqNEp3aCttN3hBck1BS3RlQVRUVTBKT2ZDaEl6Q041aXpnU2RGWXc3OE5uYVROeGlCTFp4L3ZoZy9jaGpTMkk1aFJ1dE80WEV2WThHeG9FOVVtV2VqTzRDZUZjTzBPRjJsTG1FQ2QxMmNCL0hCbzkrYmVrbk93RC9Db0ZrSlZIamNvN2FFQkxvWDV3Z3cvOUZ0d1hEeFJzc2lhdHpLOEJRVXk2RGNkcGZQRmFuRUtJVGdxUWFvVWdtLzIzNEwyVVQzMVZpb3ZqVFJuK3hZMHp2Z3JJR3pvcFJhdnhILzkxRU5CY1FvK3Z4dDlZRjY3TlF4bzJuTUVmUmlWRGZmUmdxMW9yZXQwWkxTY1FuNmExVldPYTZBeEI1MHRsTHB0KzRDSHZHQnI2cTBhckVaZ3A5NzlHK2t2cG9EUDg0R2MxZXdtbitCUlg1UGtjbGp6ZzRRWWY2dHBYYms2Qkw4NThtUk1xSkJZWHlXU0FyYkpvN3dycTBlOFZOWGZFL2hHUE81aHdCa3BYbUNRaEpBNUUvTnpBMS9aZWRoT0luOGt0TGJkMHQxT0diUGQ3UDRzN3J0cEo5dlpSNS9ORlk5S3ZZeXVNNm1SWm9QeUt6OTFiN0hpTjR3ZXJPdFBlL21pdE5lYWhwQWhYcVFuWk1zREZwc0pFNFpYVGU5RGpRalo3bHhJbm4xdUs4L21RZmRMaHBlNVNTNjU4dkpucE84NFJINnlSOXA4aFA0M2VKMDJ4OUlvUmpTZ21jRUVDMjlyTnJzejF0VitWbEhsK0lySkZwdjRrbXlwTTNoWEpXbEF6ZlpRb1lBRjd2NTBKbjg3bE03eVViTkg5ajdHcS9XZlNnSFBPekJvazRzaFhkK21OdExIYWdrUE5YQ2hlRVJSVmJ6Wjdad2twL1hqTzE0TllSQm5SQ2tWaGpmUlM1RXpkOWUzWVJEMFYvRU9QdU1BZmJDMEgwRlh2V3BZMlJ1d1Nqb08yTzg5Snh5bWdwMjdRUk1KakxLck5EeG10NHV1VXJkVFYyc1llUzhja0IwM3ZobllwOSsvYUxNOGVoaE45TFpHVUszQlV3Y2ZnbE41Q0ZkcUxYWktLYnBwelJhZ0tNWHlSbUtCRk54U3JBZzVBNUtoNU91M2Y0N2tCVkRCWkRndEdBOGk5dUpGTkpQWkxXZXJwbHp2T1JTSW5VTXJScW5wRHg4NDFiZjlsa092YzBxWUx6eWQ0cWIrc1IvcHBkSGs0TGJGRkI5V2lhaE4wYkpmVkFtWDJzR283UW1UNXNIYnFnWnNBTkVxYjdPVmtUb2I0S0k2UVUzcUNUVG1zUEU1UE9mOWRvMW1zcWtjSjZyZkgwdVBSVDVwTGVVcWVkamwxZ21OY3lwam5CRldJcHNZK3VjaXVaZzZObTE1c1hhVXVFTFVxUktEcmxyeHJIZW9tZCtPOTRGbldIVGZBL21lSVE5Z2YzSVVSZXpsVFR5ekY3L3Q3a3dmOHg2RmFKanVFNHlkVEZXa3o5MXpBSExzc09CRTFaNWIvVUxqc2d1RFlKNC85YW9yUFQxUEFmN1V6T0JpTlpBeEZnZ1h1K1h6cjdqcG1MTWpvVHF0ZGNSRS9GRUMwSktKZUJoYmx6cStiN0RVdnFTY2pLZ1pGd2FRTVExRDdWN0RFM0E0cUl6a0haWDZkU1k4YnZHd2NaVjlOZTJxRFZDMVZMSEt0YkJWdWV3NFZsYTdtSE5iR3lWNmYwYzEzbXRVZE1HeDNWQ3MxeVlqd1ozYWdlcTFSK3JlWEN6T3pMNVpaZlBYam00ZEJkU05Lc0liakhFT0xjTEZ1WHBtZkx4ZzdSTVBJZUNxZkhlTWlEZE9Gbjh6UjIyRUZEeUI2QUJMcHdPOW1yNVhTd09Mb0FOa3VrQ1hYUTNWQTkxK2JmL25lcUpqZS9pTGN2SDF1Wm0yaUt1d3NwTTBBaFZZZmhrVzF4ank0YVc1S2tqcEJuWFFqWitjSUZFVWJ3R1JZMzhML0NiczJhbHBQdjJ1TjJ5bVlzTGNpRDRJZ1ZPREZqTUhUWkw4UGVHNms1TC96UnB5bVlrNE83eXF5cDUrM3pjdnlnTWVJeVp4VGtxVzVPOWV1c093Q2VMdE9DUm5EU0FpZlRtQktoUW9HdCsvMjVYMG1FcTJzR050dWZZMnRsVmtGc0hvRFdTWFlWUGZkTnBUNjEwU2pmZHYvZEZlVXhXbTFaeHRLaXZjVnE1M0hnSVhQRVBubGRVQlZBa2hPYU5PWTlkR1FxUmhlaEdEcWNzVDJnbHpHZXRYZVlBQTV2VjJ4a3Q3V0JkQkp3ZTBJT3pBSTgrNGQyUStaM0JVZlBHN2VVSk12U05BRnUxU1owUkZOWUlmbkhyY0ZCeXQ1WXNPNEV6d2dTSVlnOFBJdVJPSVltMEgxL282Nmd1eVp0SVJlYzN1MkxuSEVtZXREb1NZdlBZZnJLdDBPMndEZkxxeVBUUG95d2U5Q29jdzVZMFNHWVNnUVdxSGVJVzBYMk5oa09BemVqZDNrVzBMRWg1bE1UeUZmVWwvSml6OG5pdW9VWjFNRDlZK0F5SnVwcHVndis3UlJQSlExQ3JOZE1ueXQ0eVE1Qi9XWTFTZlR0UUhGajVjZ3Z5STg5TkVLaTlOSTA4VXRGdzZRNEZkcWZZdEV4emNFZE5lcXFSUmhzd2dOS0dWcVgyYXdSc0ZnQkxQY1ZzUXhxSWp2QVhwUGVPVXVZcENLNkc0alZjQy9zRjg3WWtjUXZZQ1l2MHFOODI0UHIvMVBTcmhvNmgvUEtycmZpSEtBTyt6RHJDVnpCYThCblpnMVY1cjVwZTJBNFY1NitKTXI3OHRlTWpZcGE0YUVEWmRqamdNaXp0VVhIL0huckFoSWljMm9uUFBtVHRLQm9vWHFLdlVnRncrWFZsWCtqeGo4VFI5bmlWcVVValVQcWN6cUd6S0o1NmQ2Sy9DV0R6M3NoRjFxYUF4YWhPaldtdHkyNE1mYjNDanhJNW1aYktDZ3BlWnI2dG5ibkE2Slg5UjNMbnZnRDJ2Q0x2QnhFNVJmUmZYR0x0U2NRMjdBdEN0QkpSQ2Z3aFhtUmdjL01mUHJWZ2FCT0UyeFlLS2tNZXlwSGx1bitzMmRLL1FtRElvTmdISzFBMUdRY1c3VGFIVndZZWRWRnJDME9oanBGa0xpUU1kUEdpZXNhVGxpTTVUL0VJUmVDQ3VBRDQxc2k5NTBSYVRMTnJqSnRFU0UrRm43UG5YRGhxd0ZJNlVXUnRzaGZZY1hTZE1TYnAwNzBpRUNFSGZ2UFNGVmV6WFUzZXR3dUVzTjNLSWVlbE5HNjBjZElBdElEUVdwaytKbFA4N0d6Lzd3cmZyeENiMUN5TmxyemFXNkhJemYvbm50NVZhRWtXa0dMcHViQXdNTmxZb2FXaE9reVcxdTl2Rjk4VXZMc3MxSkwrVWZDUlFaMm53MVFaYm95ZHo5aGlJMWZRN0lmdTM2TTJJbkkvTi9xcVg3cFdTNkNRbFFpRmtEQmxBeGQ5OEJEL3lFQzh0UTVGTy9EaDJ1bk9pZlNUeU8rdUxWZkRNUG9rdS9UYStBb3ozZ2ZnalFVTkI4NysvWGM0VHRWTXZEcTZQamRDcHJHUE44S3NuRitwaHdSMmdjWW9jM1Q3V1lIL3BKc1lsS2RMWWViUDNZN0pQYUlZeGE5Qlp1RGpaZWxZdGZMYk5uRVhuWjVnU24vRU9wbHozOFFGK0dOZWFsZDU4RHBJMTNFQSttczhkSmJEZW5jZVk5NzJ2TGhIblFaUWtDengzVnBuakNEWEJrOTgreW5EQ005cnltR09RbkE0TEp4cjQwRzJ0RWtjRyt6Z1ZMeHZBczZWSXN5Z2VmMGNvb3Q0RDhkRGNDV3V4YWEzK0czbnlUcE03d0psZFZDSWdFSzFzWUVEcy8xQzdNV3NPT2hCWnpPQXNQL1VVcjJQSDJmbzljVU5ZN0d2N1RBN2JhN0k4dk91YXdpMktEMVd3RXFYcTVpYUduNWdUbU1sVG9WeG1xd2FobXJOZnA1blQ4c2Q0NkJIN1Fsb2UwNW9qZG11c21KOUV5UXVKVmpkTW0zSll6UG4xK1cxREZaT0NRaTY0WkNNUTl0bkdOVEk3cjBKZlBvNHNqU0pPT1pvU0hzOEFxZDNoVktXUmhibitDd2RmWXRNWE53Zm1zU1k3RjRTaWkwOFpibTc0WFpld3JoQStLdzRzV2xhVk1COFI4SFY0QmR0ZHVyNEdWZFdjOFZSUmY4cUlNbzJGRW5VVHpPUDNoajBUUzNoY3JmSFI2N2xPV1Jvc0w2WHR5Tm1ZMlFzaFNZNFRSMHBzNUhIZ1JYaHcySUxYQWZtVUFqOGtVTU53MTRJVEFqY0NwazlXOUdDT0ZYVWJ6VG00aVV0NXJBaHZ0NElva08zdzJzaWdGYlNUWWVuSmU1OXV1dlNISEQxY1lROEF4ZSt0c1dxdlpCMjhjUjNZSnc5VlJOa0pnNlhuaWk1dHZUTzc1NENvcDFwVXRhUGR4S0UvY0xkMFY4bDI4V2ZCUElkRStPc1ZkNjdoTEJkMlhJelg0Mno4RUxwcFZtOU1FZllhYzhCRnExQWhRRC82dENRY1I0M2F2d2RlYytqSDRYT2Z1ak5vVCtoWU53d2Q2L1hLSHQ5YjV1OHVWaDJsMVJjUlhNT3NHVlBXYWNSSVUxcm4zWnNzcDZydUFITXZBRUNsV0c1aU0wM3I5Mk9RNGFFM2dIVjVRdlpwMUJXTDh0OUgwcjBzQkdieVc2S0QrK1Y0WUkzRGtISzZmWit2dmJsK0J5M3RpaGV0eXVwNHlSZ0dmQUtaTENHelNMVXA3bDZBbGJscU9uUTBOSkdIb1ZLNlpnL0t6ZUJ0TXNhK1cxeU84K3pFdHdSNkVBc3hJdWVkVXpzM2JSRVZaMXpOcnJFekpIQ2Q2WVhTZDZHVFVtK3VzNmtkY1A3cjhoR283UnU0eWs5NWdWa3kxYzVYZml0MmpmMzJqTk04NEI3dm5lYngwVzBjOGZHcUZPeTJ4ZExIZmJDRXk5a2NGR2x4SXJpNGFvK1p4eExhL0VGNkRBV2lVbmh6SUlMMnN1RjA3VUUrUFF0eWpvNTUxbTBnZGpwU0hkQ05zOTQrZnhlM2VnRkd1RllwMUVORVVnSjRHelU4eGtZZGdyT1ZkVDJEQiswb09icERFRjVpUWRXcjZGNWtTNXVocXVkV2lLNUlMTkhMM3hESENISUVPUDhFZnhRWkN3TGluZmdXNFZqUDdzckorTTBzb0hmQUh3M2tCSjRkRlZjZTBmYWw2RTRBa2lDREd6RHVZZnpYbHBObXk3cjBPaFdLZm9CTHRXUXhxVmliaXZOTDA1Z3dIakNsaHhXT3EydnF1Qk9nNFBNMTdLSGpzQzdWVnpPTjh4SzRmVzZNMDd6cVZOUVZPQlhIbDFkbHJCTlNVcytIVS9vZTZlQ0NLS1RVbEd0SmtmWW1QdEVxL0Z4UDJsTmRrVHhZcUY3YnQ0cTc2cjNJNWREb2NqdTVTMjhqTlZNNitIclB4N0VyajRlM25DdGVuSjc0ZWh2TUNPZkFRbkxZN0NiditSKzBTMlNQd0RqMGRUd1RMMG1ZSm5zeXdEaXloZUlqaGhDK0xWL3AvV1I3K2hlaDZ4THZrb0tUbE93bFRUS0ZJSDRoUnYwSDR3dXBlVHV6a2lGVDEwTU9EUkEwZ3JscGJEQ1pZMVdIOExYZHZYU1d4bVBvcnViMDhwL3BXaWRVZkFta25JUER2ZUcxclJ0blc1bmZLOWFTR0ZtbFdMR0RSNk1DQ2ZyMSttS29PWG81dmZSYWRHTEFLL0h5YnFDMjZ1a2Q3T2daYkNPbnU2L2ZTZkFjSWVja3REYlBzMi9teDZHVnBxb3FDOWZmV1hWVEdXK2hpam9HTzdpSWlSaXh6Z3JxbWRDakh6cDgzOFUwbjRsSGZ6L0hvZy9SZ01mcTdEbEZ2TzQvdGN3dXo4ZW5CbytvMEJvdHNNNXVqVzhjVUgxWTl0SHRoZU43NlVBdUFVcFNoVFBDN2Q0bTNwMEFPK1hIZnlYUmpyTFJHNTZXN2NqR09CVG9jUXN2cStVUm9Na284bXcwQ0tZQmxrWVRIamlJMjVpeE1xYXFrTkxPZmE3Rk82UXNENnBrM2NXQmJhT1h2UzJNdmRZVmVmK3BFT3lrTnZXclRDSUNCaDF6VFhjMmE4aDkrdUMzTXJjbFVuSC9IMlAxWUhSL2IwaHl2RklrUG1OMlZKWFNvcllNUFVRM0R6eHFGdTkzbmxVSGJKOXZNU0R2RGtZWVhQMUpEZnRvWWt3cDllUnh1SUo3SDd0VmJCUEREMjhWeERSTzBteFgrclFKLzZrVnhpQTVFU0h0Z2hJRkpnTzdpMmZ5Z1R3K1hRemRHeHZkNll5eHVJUG9hM1VXSThVbHdUcVVaRDNnUUlSUXNFUUwycm5oWGx3WVY0bWtyWTBZU3V6d25xQjhLblNoSTk2RExmYmlybFAxSXRoMFJPOEJqbExJd0pnbExpTmJhV05oNXlwL0dpTWMwc2lYWjZ0RitXY0NhN0R0WVpVRTNtZSs3aDZmT0JOVlFkNnIxZ3kvWWEzWGs3Y0VSeVZ4N0kyMnZaNWFLSWxldC9va0NyTWJ2NVN0bGgvRjBlaDc5MzNKMDBsbk5MRWo0ajNLQXV1YXoyOEd6NXc2SHVPVVhJbkhaK001WUgyMCtrZko2ajFVVnpYejhsQklIeUpXZkRzbkN1YWs5cDAreWVNSUh1NzFnOExHbk9QWlptTTg1aTFvM3JUVGE3QitreDdYWnNwUmQ5eE94azY3RE42MzdxSlVKQVNoemtUWkRtNTEwb3pSZVRjdGl2eTJHcm5rSk1xdGw1bmRpdjd6bnhOcWVTdFAxa0tnNndKYWdhTmp6amQ0QVdhTGl3ZUFlZnhwTmtESWJ6TXp3T2RNZyt0R29rZzV4cGp2b3NaZzQzbm9JYkI2YndrS3JYQVJxNm0xMEZhM0dSb2N5aFRPS29hMCtValdwSGczM0hJZ2RVaEU1SGFQaXhSUDJkL2xicEdMM0VSQ3hNRWlkMllEUXVJWVpoR1JOMjNQSUZrQ2hoY3ZIZ3B4ZzRlaU9iTEJrZ3RMU3UzdCs3STRmcXlyNDFPREkzODhpWDJLZ2hHVGhnRTNyMEk1MmxMamU5K0ZuU2NTWm0xSzRuSlBOZkQ0R3VyR2RaeGhSeXRCTVNCV2ZYL3k5YXF2UEpYSXNNVjRjOTh3TVZ6MzhJTEwwZ3NyY1lYWnppaEdFNXZBWFJvcE1XN2d5MXpoWllrVytRT2EzUmNFd2ltc0I2dmxLTFFRcVVEcmZ1TTBpSTd5VzhIZTB2aDB0RDBQV3llVWdITkpBMVQ4VmsvV2wrQ3RQb3M1ZjBKY3FudENESEpDc2h4MGcvU3V3QStUaGtlMnl3dlBLcGVRSFNXaTg2eGFzV0xHUFo5aXRSS0V1TFB5dE84NjVBZzJCYzFrcllqcHZvZ2VlK1NyWkNtVWI4T2lWQVFaa1lrUEEyWjcwRDh5Q3NHQ2M0RzRuNVFJdUZhTmI4UVdLQXFSNHh4WDFQQVQyNXVHYUE1NmxFV1JsZDQxQzcyamw1cTlCUkVUcGVROGdSTktjWTN6ck1zcE9tc09RRm1ybDhtZlh6eWNNQWU4QkhMVmNuY1F6clRITHRzTElVeHFya2QxVnpKVDF4NUJJVHF5VVZmNDBvZXRMd1hFQkltMDl1ajVHSmQzUEU5YTIxT1A4Z21BRDNOMTE2YjA4MElqeXNyWC9CZy83bzJmU29Ia0RIcjZJdC9RMnA3b1BJV0dWNWQ5WDZFTVpSdmFldUdsdXhUOEl4U09xNWRvK0dFNFAweElNSDdwR1J1b0R1eUZjZStNMXJUYTNDTFMzdnBPb0ErUzhwV0paa0t2QjI5S3M4YmdoQkgrc3J4Q3c5T1h2MERwdEFobkJUYmdESUYySkpzeVNaQ2NGcmVSbFZOOVVLcUp2Z2FKdTRWR25IemIvQlNKK2dLT3U2dnhxWmpCWkdsSitHRTVaVnZmVUtBVGtpL0wwQk5MaTZCbnk2eW1JRnNjN0owQ0gzUzFmOGZJTE9CdlFuWE1NMWtadklvRzNuSHhtS1FCUVVQODJBazZaRWhmYWtkTjRpbmsydUU1Y2lCWjZtWWFCS09udEd3QWg1UzU5V0thVlZ0VS9tZGYxaDNjTnlSZDMxN01jdXNQRjFsWDFIMFRjVkV6aldLUi84NUt0RXBOREhHVE5BbTQ5MlMwdDY1WmhtVk9oMjkyclE4THlOUnh2aWZ5TlB2TUd0S24yS3hqM1g1N0dMcVhEQXA4clRzVUFRZGg5N1p5MUFVMVZ0SDFJNGN4VVl1MEhYem5iRFBQVDhPTDBzUlNUbTBNcVp3QzF0RzM5MFRrR2NXckZUM0llS0dBQ2JQRWpwcjRMcWdKZm9oTW1CZ1BXeDJIZmtXRUtSOWp6Q1J6cjZwWkZGdjZCaFBWV0hsQTFTcG52V2hEejZ3eUVWc2JIREdnMzBVR3BYOWFOSjBpRGFtVk9sU01heHVsY2Z1ZHRjdTR6c3I3N0xRdzdHb051MnJnSjUzYTZ3QlU4VzlVckpLTVBlRENRQi9LbHMxWlBEd2h3OWJLMWM2SG52TUF2c0VGUWRlNlVUb1BVRkNmUDBIa3BRYUROY1NFYkYwU3dzcFdXRXhUUGNIVERmN1hXN2R1ckNrVm1qOERuNEVyaURZT1lxSmFibGgvckJ6eW0zVlExZ2V3dnFMS1VQOGhvUVQzUW1jODFWK2EwY3d2Z1o1Y1NTU29oaUZhdnBvazRGYjFRT3J3NmtPeVNKQVJNWXZqYktubWN5TjZMR3pHcGhkWGRDbnFoVllmUmR4ekg2NXZrR2pyR3VGVXRhL2NSL0NaS2Vkb2QyT0l0RDloTTJyZ1Z0a1dUaVpuY1FsaU9ndkZPR1didHVEcjhwSktrYTA1ZERFVWowWFFYUUd0Wi9nQjJxenVjNXhnS1FkamVsYlA3YTZEMFF6aS94ZlVVbThJRUp3ZDQzZ0dTaUZwM0ZXcGxmeTVuTU1kbnY2VkdCUDNEalNqd0lqbENITDQvRFhTZkxrMXVzWS9KZ0xWUDY3Ukx0dFpHMUJpT2xIY1Rxejc1ckZjZjVEQWF5Zjd6eHVzZmllVTVtSzh3MWRtNWRSMUF4VVAydnZ4Zm5XdHBSeXNJR3lEc0dIN3kxczl5VlJXOUFaOTZORHhPZ3JnbFVTbDhQS01YNXQrbkUyeEQyUjJ1QitxbXRJdDNHVWNEUWxyK09uR1ZiSWtOYklST0kwR2Zyemk5RjJ1RzRQdHBIT0RaNFJKd2k4SHAveWg3RzRwb1kvaUVjMi9YTTVyUXNrYVR0V3JFd2ZoTkJETG1BL0JmdGdyWSsva0xORmR3bUJzNkNnWWFDM2kxUjVqaTVkZUV5SFVWMGp4T2FQdjdPQlBXVUFmZVU2dEhFS1FwZ3RJNzVtZXVCZnZPdmNwMWxFaEZNcENacXNhakoza042dlI1TWIzZG9ZVGdHZzIxcXBnT09KMm5Fd3REUG53dFhOUkFSdlc5VmJrRGlPN25PTVFKNHQ5U2ZTa0dVQmQrRjZ4OFhGTjhwWGFCM2t0RUI1elppdlRFS0FKZnNHeFY1SWVYOVdvK2NlNVlUeHJFUHJzQWZrVEgzUW8xNFFpSnRRS1dEeGt0Rml3QkVoNndmcERwOVRDbWZwQTVKbE1ONEVaZEwyaDZ4RElqd1cybHlSK01OKzRkL1pUNHl5V3ZXci8wRTZRQzMxWFBUMHQzNGREQWVLZGVaY2EyYnNQWHE1eWFSSUhScDR3c25vbTFiWHlHSC8zbGxjTStHNlRPMWpVMmwzcHQyaktIT1RkSlBkWjd4MEZMclhMcmN5eHd5MlJXSnpHMGZWbEJaZVNZaXl2V3Mrb3J2NWxFaXBlb0YrU09pZ0x3V1FNZ3YvZlZITTNCWTFKOUZrOWg3UXd3VkZ5elZOK2w3UloxVlhCMmV2OGY3U0xJdUs2WVFkeEoyMWJZYmFFdXp0VlIxTGFmdCtSQm9DUHVkZ2l4M2xwMlhHQjdYa2pqV3JkQWZkZUJ2WnVSSHBNWXR6Unc5UUY1eGpIbTdRekRyTjhOa0xDYi9KaXFDajZEcWdkOVE3bmNiNTNEMjlBWE94OVNwTEVVZVdjS3dxdG5oL2lxQ2hiczVlbVdkc3JZY1ErSjEyM2Eydy94aGpCNlI1elBDb0tjVi9rNjQ2dng0U0UxQWRVVjZrZ1hlYURiY0ErMERWeDdrdENPazhpSkhHMTdkc09CaXRsVDRxS2tPY2ZRdEZUTVo4d2FqcTgxY1paWDBaWE9GV0luZ1lMUkViZ2ZsL05ZTmN6a05lL3Y2N1A1UXg5aUJkV0I3anZiN1U2bXpZNTNZRm02TXpOa3gwT21Rd0ZrTkZVR0ZJSjNLb0Q2RzZMbEs5VVNERWswMUx0Y1h4VWpPck5WcVJ5NzZ0eFpSbW5ia1Iyc2dZVTNmNG5DaVgrOGlqVE9SMXdzQm44YVY3UktKWVJINURiRXk4Zm9wNk04NzV3RTFYQU5RRWlaZS95bk9HK0Q2elRLSnVCZHluTDMvNEl5Q1VyNmF1czl3d1RXVElXNUZEcCs1MFAxeUFpd0tnZnpacExFcE5BU1FsbDU1U0lSY1c4UFJUdG5SZWZYLzEzUDEzZWYveERGVkI3OHJ0Nk40SmJhcGN5aGpFaFZYeWJWWjRoMktxZDVRRExIY2ZKejlpY0k1aXNjamJQdWJZanI3L1BXMnFMMmwrRzRIVUlSU3pIS1VuTWdKOW1nd2dEeklUaXVDOXkvQ3BPY0J0ZGhEMVJEU2lPeTY3Q3JDdEFSYzE0TW90OTRpZTVnZnZFOGNZUWliNXZ5cUtGRkJqa3pFSkNBaHdXVVFpYi9ZcE5KUUpxd3llbHIrSDBKcDNuaEZ3SkVnL2lBK2JCYUl5d2tYbkJmVlVrTGkvSUV2ZE80TllRNFc1REM3RVdDNzExVmJnQ1VLSFNlRXFveUVVZTJDSTZPZWp0STQvMTF0UGx1bTJ1elJSb3RId01nN1dMUmd3R3FhZ0FzLzRZWStMUmlEaDhqWjc0NVRkcDFpSGJPY0N0ZURRdE1JSUE4NkxBckxPeGJ4b1VSNDEvMFRQT2JRejJyaDhMR1g0ZkJLVXNJaXFJT2lYU0VQTVdjYUhsUUJ3Tlp5bURYYU5IS1dVNTFYa2p4TlZNTFhtaUxLVUFzbXdYdmVuNTlOL0E4WCt1WHdTZWRsclh6NFpVOE0yUTJYMmtHa2hZUTUwT0tuQ3k2YWpPUXB1bXBjZWRuY3Z3OURNRHJDL3NUOU5SNFJEMTRvU21FOGlZTnA3QjJEZVBtckQ1a0hWL2VHQzhjWmlxOUtML0hzM2svSHZIKzdoNW5yWHNPenFNZUZ2QXAvemdZSHExRUhlMkErYjkxV2E4OFZ6Tkl4UTE1VHl5TkdIV3ZFaWpJWVIzd0Ywa1ZURFhyWFZXU0tCVC9aTkNjY01jS0xkazFlRTR3V0hTNW1aS1lVYnFWcVZrdXZYbm95dGhXSlNuWGQ5aWh4Q0dRWVFGaW9abWxVMWxBaFd5L0psY0VCZ3krWlhKVm5zaVZLaXB0VUtWZU85L01RV1RUL1VVSEEyQ2x4cU82NXZQNlRGT20yb0xFMTJBTTl4QzZpRUFtTTF0aGlvdjA4VjBtZTZKVTNKM3dOL3UyR3Z1YWx2cGRlNGI3bi9yM1hjWGRZRjA1UVd6MjZUQzl4OENHRithbFEzMVoraUdSM3F5bU1Td0N0cWRvak5KY25sR2ttQ05IWGVsdzI1dkFKVmFodzRkdEp6Zk51TFVZcmhCbGp4UmVmbHBTMkxLWk1aZnpwbkFzaG1oSEVRS0c0UFBLYnZaZFdUYkhlaDRmc3lOemxOUFdXd21GTHNEdi8zRUN6Sm9aZjBzdTFqS1NhYnV0b080anFFbHJaQXhWcCsxcGhFMERWUG9veDhLRUxRTW1aQjJHVzBjbjg1ODdLNFNZbnlpTXBkSHdpUTA2VVRvcnQzb2J4UmE0cGh2emZIaGd2bGRDSU9zZllRWTJ4MVlVK2w4RlYzc3Roa2RtKzVtamVwTDJJczlhTVRyenJLanhzbW10UkpDQ1hrNnl2K2k0Z1ZyQVFYZFBCVE0remFkLzFKR1Y1c0xZaVdlS2pxM0p6LzB1aytCYnFnMzQvbXI5MnREcGE3WXpLdmdRb1NCb1hvbG04eTJqc251S3NodThFMWlqWVI5L0RGMTRoNThkVnpPTjBFeEZkdXJHK1Q2NDRqSmdMMFlYK3lkSUNzMmNoL0F0OTF3S1JVOUNQbGRsWW05c0cvR2ZJYThZTVBqYWJPRW11SEJUcytyVzZmcmhIdWt6dE5IZ1dHZnFEbmFONjhtODl4blpTMXNIYWU5NForSExYQS83N0YxVTFsR1lDK1l4ZEtacTBQTklVSmM1SjZMMlE3TWlBREhwMTJkbXhmV0J5VHAwYlBnMzUxajIyVytrd0pOZGRrQXgrV1N2ZUFWeVlocTRHUExlNlBYL0Q5K0tIbkN0Ykh5bE9BZDY5OEYzWm9ZRksvTmJORmo1SlRKbE5Hc3hWWkVWUG5QU3NzOHE5cVdpZ1FVcUpxNVBGYWJjbXBxdThKR0pDc3hmUlZCV0dZMUhMdEVTRERZeTM5WFFuZmdsY25BdEI1KzZaWEZFRkJHUk5qUWtST0NoQnFTWk9lMHAxNjlqVkJmK2xra2tnWjNHZkdkYmczQmZVb3QrMWVtOFc4SWt0dk1mZFJwOTVTWkM4L2pOdzBpTmhwTWJDV0pJSUlCNDRjSDJvRHVFbnR5N2JQaFpsV0hiZ2ovMHZ4Vm5ySlE2djIzS25LeE9SeTFzZC9sdThvZm1BeDR1L3NjcjE5MTRqb1lFVlcwaXRESmRlUzFPb3k4K1o4M0dDZVdIdGNleEk2K2N5ckRIc1ltekZlUy9GV3FyOUU0UGlkZ1NkKzVGUmdpZlU2Q1A0UG5OWFp2eFJ3Yms2cDdNNFBsRXV4RWNSRGtyRWlnR0dwOWF0aXk0S1JJSlVTdHFISzM1YitKayt5SVJWZG9KVWRUREk2S0JhVmgvbmovdWtwSXE5WVh6cGFiTG1RdUFPOVlqTTc0TSt6R3VlUk5ESkZ2bmt5WWxPWGJzbVhmNllwSE0yRk5FVnkwQVhwYWthTGE5UHpDZlJTUFlwQnBDTTV4VnE5R2FIMkdsM0ZzT0ZOM2xybiszcnREZlFoc2JxMzNpb1o2MW5hTnI4Y0JuaEJFTUdXS1JrWkZ6SnczbXBNSGlUZTlnTHhGTmtsb1M0SlpOaDlYSU9WaHJjQXMzYkhpelN3bmJqWFJvcUlEeHlBRDFHT3NkbitSU3FVTnlObFlpbGJiSWJDdGZCbk1uRkNwVjJlN1dSNU9WRmhyZXdCUGk0V2VsOTFudVZWY2F3MVpMbjhVRXpheWIwV1VucktIRU5DcjBXcFJ2LzMxemM3N2pROG5uUnJoTkZKRmtsdVZVUUl1L24vclRDL3dKTzFiSWt2WDBHY0d5SkNWVXgwaGwxbHB6aFFNZGJZc2lVbGsxVjE3QzZDT3RQeWswcENqZzAvRytNUXlYVGZYNW5xMFluejF3bzVuZVp0WkJ5MW9IcVV0Rmc5VS9tdFl0R0dTekROWWpNZVpWSko0V1ovcy83anFNMFlsTnpMamppMytyWWYzRHB5MHMydEJXRWZONXZWSFN4THJPVk5NV1NaT2x2Z09zQUNrTW04K2ExdjZPeGFRM0J2OWRrcFhRUmFjVjhnNlo0Nk1CMzcvTWl3YXY1bnZMQVl3MW1OV3BXdEJOTm92YXo1TE4rZFJGSW5TNFJxUDV6V0htN0NoU3dLT3g3dzJSYVM5eEFrbHlmZzUxMkYyQjdBNlk1amhTQ3BGQXcxakwrRnBQUHRQbnVQVTFCRnhkSUlrWkhZQ0NCY01ONDkyWmNrSUVUVlpHRnorSnRnVDUyNEpVSWM5M0Jxdktnb0xOeldkTHg1OEYrNHNldzlKUVUrdTVyeldVVSt0V1EyYWlKVldQNjQxU3ZmRFZFV2VPNXRkVG9VLy9Qb2NDd2FnbTIyMnJWWE9Db2Q1SCtCdVRoSE13d05tdXhlT1IwSXFZNGVodFF3a0VaV2hoVzlVV250WU5kb05zQmROSjErWTVQdzRCYUZBM2hOK1BxV0FFdEhWaXNIckdkZnJPQUY5eXkwUlV2TjhKeTg4MUoxWi8rZCtNMG42YnoyVmltSjBsbHQ0cDZQNFJ2WHlEZG9TVWFRNmpTc3dmdHU0WDRLN3pFb3hBa1dzZ2F6ZXl1TzFxa3BjdFNsK0FUTHNRakRpWmRJRnptZW5tTk14UmFKaFBpMmtndGxvSjFXc3krdDh1b2IvNDlmVVVXUi9sZ3FSSStkRlpTNEVxdnppQVpueWZiVlU5VlhyNkxXVU9wY3R3ZXl0K0Fsd3ZsS1phVTY2Q1RRWm1ZRDhNTmJtOWpTVnVaVWRiKzFnV1hlS1ZmRHRqS0dDSUxFajNBcVlYMDM0ZktlSElLQ04wcTA4d1ZmOGR0OGNOcDNhL3NwanR3cUxaM3U4WWJBbWNOZ1hoaEhwT3NNbFh3REowWUhxSFliLy9VQ0ZQWmJIYS95OEZyRnoyWWNPRHU5c2hXc0VUQ2RxTnE2bHYzZXgvdmRReDZPNGlOZVNocU8rNjd2ODMrYVo4OEdZNXpVcHpwQXlxKzZZV0hyaTRhdkNsV3NlMlJvUkk5UnJRaWlHM1I3UllueE85OXVxMjIyQS9KMG5vZ0k0Sk5vTHphOGxIUE1ndU1WRWdUb0t5OVB4cXI5Mjg3YVVYRC95UGJYUlBUeEdjQjZqRE50L3JyVitoU2t3MklXMWJUelhsaTlOblR0ODBLQzh1cGRUaGI0emdKaDBJa2FVcXY0WUZRVnBJY1h1bjZ4dHc3T01UOTR2TWE1alRYTTZneFBKYXJSdVBIWHBucS9wRjNzcUNwYS8zbytOaEd2Z1lVVVBtcW9jNDdCYjJoNXhmL3UzYi9DYWYzRFBxZDVhaTBCQzdoUENWRXZCaGM0c2NyVmc1SjRXaUduUjhHVWNoN0RTTUZrR2ZwTXcyOVcvbzBhMzNOdjlacThYbmR0bWsrWEVvOXliT0hvZ0I5ZHdHN212bWlReHJKUk52ODlndmNqZ095eEdmdGRPUEJ6Mmo1MWM4TkJQSXJtam5URE9XcHZHbXg5RWZZZFFrc2Q2RUZHSEFKWm1VdHkvbEVOVENjcUlYZEEyY24va0dBZkdTYk8wSHJGZnU2R3pXS1oxRHhOOTJxV0ExODVqZy90d0RvRE9reGNBRGJkbVA4dFh0eEFyR1lkV1NpYnd0YWRGRERwM1VkeDhmc2k1aS9oaDRtdjd6dUR5NmI4L2Q4NmxpbDliOHhUSmpoWWtPR2c0Y0tYUHVzdDhmVVhhWmpudU9xVC8rcXM3SkNMdm5mN2FWd0lIcHlENkpVZytCZ3JqUlV5TTUzMXYvMlFBQkFCb0FRQUFCTVFCQUFBOEJDVEVDQUFBQUFBRDhBYzVBQUFJQUNRSUJBUW9DQUFNQUdWUm9hWE1nYVhNZ2IyWWdSbWx1WjJWeUlDZzVLUT09PC9CREI-CiAgICA8L0JJUj4KICAgIDxCSVI-CiAgICAgICAgPFZlcnNpb24-CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvVmVyc2lvbj4KICAgICAgICA8Q0JFRkZWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L0NCRUZGVmVyc2lvbj4KICAgICAgICA8QklSSW5mbz4KICAgICAgICAgICAgPEludGVncml0eT5mYWxzZTwvSW50ZWdyaXR5PgogICAgICAgIDwvQklSSW5mbz4KICAgICAgICA8QkRCSW5mbz4KICAgICAgICAgICAgPEZvcm1hdD4KICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24-TW9zaXA8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgIDxUeXBlPjc8L1R5cGU-CiAgICAgICAgICAgIDwvRm9ybWF0PgogICAgICAgICAgICA8Q3JlYXRpb25EYXRlPjIwMjAtMDEtMDdUMDI6Mzg6NTIuNjcxWjwvQ3JlYXRpb25EYXRlPgogICAgICAgICAgICA8VHlwZT5GaW5nZXI8L1R5cGU-CiAgICAgICAgICAgIDxTdWJ0eXBlPkxlZnQgTWlkZGxlRmluZ2VyPC9TdWJ0eXBlPgogICAgICAgICAgICA8TGV2ZWw-UmF3PC9MZXZlbD4KICAgICAgICAgICAgPFB1cnBvc2U-RW5yb2xsPC9QdXJwb3NlPgogICAgICAgICAgICA8UXVhbGl0eT4KICAgICAgICAgICAgICAgIDxBbGdvcml0aG0-CiAgICAgICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5ITUFDPC9Pcmdhbml6YXRpb24-CiAgICAgICAgICAgICAgICAgICAgPFR5cGU-U0hBLTI1NjwvVHlwZT4KICAgICAgICAgICAgICAgIDwvQWxnb3JpdGhtPgogICAgICAgICAgICAgICAgPFNjb3JlPjY0PC9TY29yZT4KICAgICAgICAgICAgPC9RdWFsaXR5PgogICAgICAgIDwvQkRCSW5mbz4KICAgICAgICA8QkRCPlJrbFNBREF5TUFBQUFYNUVBQUVCQVFBQmZqUUg1Z3djREI0UUFQRUFBQUFBQUFFNUFFQUFEd0lBUUFJQVFBSUlBQUVCOUFIMEFmUUI5QWdGSFFFZkFiSUFBWDNEQUFBQURHcFFJQ0FOQ29jS0FBQUFGR1owZVhCcWNESWdBQUFBQUdwd01pQUFBQUJIYW5BeWFBQUFBQlpwYUdSeUFBQUJzZ0FBQVI4QUFRY0hBQUFBQUFBUFkyOXNjZ0VBQUFBQUFCRUFBQUFhY21WeklBQUFBQkp5WlhOam1jb0FBWm5LQUFFQUFBQUFBQUJxY0RKai8wLy9VUUFwQUFBQUFBRWZBQUFCc2dBQUFBQUFBQUFBQUFBQkh3QUFBYklBQUFBQUFBQUFBQUFCQndFQi8yUUFJd0FCUTNKbFlYUnZjam9nU21GelVHVnlJRlpsY25OcGIyNGdNUzQ1TURBdU1mOWtBQkFBQVVWdVkwbEVPa2RTUWxRd01mOVNBQXdBQWdBSkFBVUVCQUFCLzF3QUUwQkFTRWhRU0VoUVNFaFFTRWhRU0VoUS81QUFDZ0FBQUFGOHl3QUIvNVBmR3dBVGZON1VUZWdzTForL0RQakRqTXp0bGtmeWtvT1Zza09PNnFhR1JlSWpaZDFJc2xJZ0s5RENqTzVpQUFlRzg3MkE1SUE2RVJkLzdTcEdmaW1BZ05TQUFaZC9qOW1pekJDaDRnQjVEMVoyQ3VheEtzemJZdFdXRGx0amJ6aXFNOC84Q0lBOW4zVXBSb0hKYWg3eEYyUTlJQWYwdGV3RlV2dVdQQVNGODd2QU13TVJhZWgveFVSbGdFT1NvWWhacGtNaklqMWkxbFNLVTNZYzFEUHcwT1BFcGRoTVU5Z2Y5UzE2V29HeVk2aUE3ZHhnTjlEVHdRMzRQd25yUmh0SXNVNklJVVB5aUEybEdtR0E4VjFIbElEczJrWmJhZklnVDJqTUhTQmp6M01Tdm14cVIxMW55ZUE4SkhrZy8wSXZhMWZMTWFzak5KQm1mWEwrTURlSWxWZjFOc3JTck5BMnJzdE5teHRMWlVaNUkwSmFaYXFsRTMwVnNlV1ppekd5ZDM2Z3NnQThMUFFKSFhmWWRxMUR4VDFDeEtON3g0L0RnQ1VvQzZ0amlDelRTWmoyTXFVc0lkZjc2TDM0dmRMWWlDODN2elA4Wm44WnA4aDQyVTZWOHFxQVFRV3FaZWgvS2wySzhVNlhKYnltc05yQnJVZFJ6Y2xKc1kwbWJqekhBU3dheC9adGlJVG54MmJpSHM2NzRUc0NseGlhWlBZVUtzZk5HNDhqdW5zeFNWeWlmTWFNV3BOQUpVWS9MK3NXeXJ4NjZ0U3VlM2dDNnRMbFBKRzJ4UkxsdWl1OThYWHZOV1owVmZPekFXZXhoLzhBbjEzNkhUZHZlSklDbGNYY0EycHdEOUE4bld4Rk1McmlGeWlDRE9lQlNJUE9pN2RuVlpOQnYwNTdqNENtU09BK0pmdTlBUXBQZk03VDY1RnZBS0w0ZzRHYUMvNG5uYUwrcTNISmxDQjFMaFlzVFVtZTdUTEFVN3gyZm05ZGhtaXFzcjVtdHZscjJMNkpKaldmMGNrR1ZYTWhlODJER010U240NG9jdUcvZWZBa25hUHJ1OUJ6bUR4MXkyVE5abDVFcVZQYUwvbHZHaGRwWW5RenExYXRHSnB6cHFSSHQwUldoZjlWTnhqVUNXZXpBK285enNLNVUxcGRUSzYwcjNJL0ttdkM4djhIZU9oSmhQQlVYWUZFa21SdVRKNHZsUmdwY3JMSFZsM0N4czdjTWRlZy9nZXpqaFJjVmZPZGx6UFd0Vm1ZaW9KZVFSbzRQOTBCSHpORG9MTmhwVW5XQytuVWpENmFTTjFUcC9pVHBoSmVCNWpidHY4SERWMnVFbXlnSjJHVHo5RWVlWG82dnFGUjR0UEpjbThQMlQ3ZzJ0bDZMdWNRVUlwV0xOY29URmpuWGRyUmxuYk81aTZsTVMxVUs3eURicDZNREt6ZkpHZHdYYkdWdUpkYVUvOWViSUt6Qkh5Z3pVVTVqbjB6MGwyVHpzckljMnQxdUxxOXQ4UTBCQkJzNmMzazNuczdqRnVCQkxpakwzL2FpVlAxNU52WFUxaDQ1eVlJNUkxS05yUTNtUTFIckorZTZPNUZJOHEyUW1uVFFnUUtGVnk1NzRGTVVYbHo1V2dZMEJRUFRjVG4xaHliWTZXRGFYNTFrbmZqK3hNQzJrOVNTdFZCRmlHM0NzVStPeVpyVFVGT1JpaUczbDI1eE54d1JyRGhqWEZ5VnE2T2x6eGRrdDNYZTAzc0ZkNGQvdUg5aFZWTzg2UGNXdkwyQTduaVRnQy94U0tndUFETmtveW02dTZvYTZyY09KUWVRSG10VWs5TTcxamxTY0JhalhpQXJNUUNrMzQ0ckN1bG9Uejg2TmZPaVAwcXFGRkI3bkY1bS80M00xZWdvR1JzdFBWMFV4WndSVEp6elNSVS8xTmJoUkE4N0Q1Q3BrQlluL2xHalR5OXNPRG5vdFJGV3ZNL1k0OEgrU05UdXQ4UVA0YnM0N1dnb3dJL1EvVEd3UHJGanprSlpPYkY2QWRCQUgzc0xFdGZ0MHlqMDVPazFHemQxZDdKeTRHYXlDK3VIc25LRWJzUVJaMklvR0Q2MVgwamljUE92ZHRiSHNEeGNJVHJoQTZBTXNId0tFVnBXb3FVRmtrOTlvZmhhbm9hd2JKQVV6Y085MTlkKys3YkxUVEdEQjZqbmhKNDFYTzMwYzc3dWZRNzZSNlAwR1JLN2kzM3JBKzY3VUNYN25VWjhKN0VBem1PNnd0T2JRcDd0R1JXY3BHeGNCKzZWRHRlRit0eE9GZGlXaDFCcDhWRFM0SmVRaDNxcG5raVNSdWcyUTNBTUhOR21iTXgxdEdSUUVRaFJWS280dlYvWFJwN1JRVUJmd09CRkdMdTZaOVh3MG9SMmlrYUJVQ05RTnpNaHNOcFl2dlZkci9BblFsVjloRzdoNjJETUJFTGFNMTdiNVlLckFCTFVGL0NTMW1FMHJONjczMksvekJ1M1Foazg1UVM1Vk1hL0pJK21TbzJjM2RTbjc5NStjS1lWdDNBYjUzMjdrdVArbVk0WjB0c3lDZDBEZjdiUGdxdCtJQ2x0SDV0bmpSRzNJSnBzTitaeGh1OWFoUnF6OWlMZlMxMWhXN05ONkZoRDVacWkvYVZ3MUhDOWFhNXEza1Z6UHlmMGZhdEk3MU5lVXdWMitnL1ZpNlhYRmZpbmh6b3BmNUhuK281MDBFZ2hXcFR2T3o4eEdLdXUvS2ozL1FPQ1Q1RW1sSzJ6V0p6MFduNEhvTCtwTU1xbXg4emh4b0ZycU9JVEFkVGRnejlGbTJlcXRJZjV0TUN3L1dGMHpqUzBwak1xbElKZTdsVkF2ZjZrNS90SDArWlBGbjZJMm9NQVErak14ZEYrYUNYcTFYYTBjc2ZHQnh5UzNIYnVjTXpsQWZFK0JXVG56Mnh4bFlUdHdvVnRxeEFveFVBcVlUUlp0Qk1JWlNTbVhNN21vVk9VaGlFMlhtV05MNlpCR2w4UElHb0wydm56N0YrSG9qQXczYk5UUTY1c0psazdWZUI4c2RJSjc2VVFqanppMlJjc080S1gzUzM2TG52Sis5SWh1QUQzSnFtS3JEdUlNOWFGUTVmYXVkMEpXMjFuOHdZYjNVSnJIUHc1djAyVGsyUmFZL3NsZmcvOS9VM01PRWN3aXZmR2NucWowczNiZ1FOczRKR0JmdVk0R0p2WWpLWHVxbDh6OXZ3SVNOMDZzQkk0WDFoSlUzUWhuNXJoTlE5UVozVTlDeXdOU2dGYmVFcXZEVTJzOEFPVWdsMjFScm05SEY3TzJ4ODVhbFZyRUE2VnRVZmN1TWhZdmljQU0vMVNwc3B1L2tUazRXc0JvekVSSVZxL09Ta0lSWUVoR01TVUlpd3FncHk5ZldHL0hPV0NObnlra1U4TXFFUWdieHBxV211QTJ1TUEwYkFtTU04S0ZDNmp5Q2VlcG5QZ04zcGNOSkNvbi9rT0Z0T3FUSUZuSjVBM0FnNHBqSzRMZFRkQzdFODd5UmhvNHpRaFJqNWdiZzhPM1o3UVkyeS96MWVGVmU0NmFoVU1WcTdpYmZsWmh4NnBPNjdWd1lPNHgzUEg5bFdUL05MOVZsTlM4Qno4M2JHWE9sVlpibzNrK0E0Rklxenc3aUExamh2RWo0YTNGc0JVQWdoTTg5M2RzMk0vMXpENWorY1NHeHNvZHprSkIxWXU1cW1ydGJ5TGEreE13V3VVQUE1QzV5dTdTRHVSWDV1c1AxZTk2S1UvanpOMEZhM2pEakxyUXlYdWRNRDNHa3ptZGVIaG53VnYxMjVPU0R4M1VmVTVRTFlVemd0VlFybDFaS2ptdHNuVmp2WXdkV2t1bHFJZFlUWWRVZThiZ0h3VU04RDIyVG0rbkx5M0NvUU0yWkYrYjU5YTN5SFc1Wmxab0p3SVhyWHJhSG02R0FFMENnQWlDTlRKVmpMUiswODlocXkzQ3NEeFlrK0dLZ3NJNU4yeThzTEF0YW5lemdSQ3FhaXhKTjkzZDJZYm1OMFFtRENhUGlsb1hxRGJjYmhzTXczNVJHcHNRTjZJd3VjRHIvTFpOMm4yNjJya21tWFlqMTQzUFZwaUFsUisrandNUkdlTHIxdEl4T0ViY3JHLzNvUlFsREhwcEpoN1VrNXFXVE1CeERnak9nUVUwWTBPVDhnbk5ianhOdTkyUGZNZEVPa2VNUitodEVrN05ORUttL21tYy9tZ0dSRXRwWlQ1bEtQU0JDbkIxK0pDTks5dko4cmpKTkxsTm5ibXcvMGVMbHE1SW1hT21LQlI0SnMvUk1RME9malRqenoxMncvT25ZajJGVklsWW9seFJyaDUzL2o0SGdBQ0hjL1ZCT2tUem5rcU9uY3A5bGU5NzFPRzJlci9renBLWml5N2lidkpncmh4VVNsRWpGTmg0ak51YTF3RnZrdlZHQU9Ja29aN2ZNYzlkRVdpenR1TkQybVhudFVnUW9JSU1GcmZ3eGQ2RDFWS05aMDltNTRBR0RpWklXYWdGN1dJSkNSM0QzaHB2MEJKek9xL3Q4a1RvZjNJeHhJdWtZajVQMkxyWG9NTTJRb2xrL1NJeGpjSW1EZGZncUdkMEIrcjI5U2NPOGpxVUR3VGlyVUJKamVPWUtUMzRyTkF4K1FDaGYvQVZ4cXNSakk0cUFtYkJpWWQ5OWJpVlNwNmJQSE9EQlFSeUtjM2pCNkRvY015TUN3ZjFndmh1SlZ3bXhzcEc2VWxDNzVTQU5Tak1qWGZLS2huNGdvRzRIQnNrbG80RXJJMGJPdnBIOFFyMFh6d3lmWHhORzBPdENxTGNxZUplQndlZ2laTU9mL1Q2eGZzU0VpRUlld3RYTFkycmlkUnJVOU5UUWNoaEsxdzRKZ2JkZTVSQnp2WWw3aFhQVFowR3JKRmFtMmFVaUVjZFJMc0VpSkRIU05YMWc1STNEUjljYzB2K3BibHBVbjgwekg1S0h4OGxvRENyMEk1UnYwL3BoQzhQOHRhUVpQTk50d1I3ai9MTVh0YXd2VU0xQ1VQbnBacDM0WldJeFJGZnFzV1J4TkRjTGZxRGZ1YklZNXZSWmRjV3kvYUJ6Rndla2hJTVJ1RUQ4L1hFWjB2ZzNaNVJScXRpNzF4b3E3VU5NS1g4MHl4OG94dGs1M1VjdXJJcElWbTNaRzQrb2hSeWQ3WGpSZU0xMFpzTHRFd2ZjYkZ2NGZmOVpmSUs0cnBFMHZMdFN0VE9GNHF6YWVjcG9QNmJMK0ZPR2JrSm9GMnJsWDFwNWwzL0pSV1o0SEdmTzV2VE9RTkNvZUt6ci9MdlluNnlHWUI0endObS82U2tUM2VBVDhEdXNYL1RlZmF5bEpNcFdMR0kxMlJFZWw0dkhtOTgzYlVudFFaMGZDdGp6YTZ3QVN4ZEFhdHJFVXUrSldKdk1pTkNZNXZPUWZLMUorb1lGV0RTMXNlVEw2ckhva2p4RWpqcit4Zi9QQy8wL0E0OTN2TEJxWTFlbmVvaVZrUFNjaHNRN1pCN3h4Y01LQURGZjFBWlFpaTkxaXJnWmdseDgwazdkOCtQbjM5cWFhUGxCM3JZZWtiNGNUOVFicnNJc2pVeGxydkFkNDMwYWRkc245b01RZHlCdUhJSENCZkxwbld3STdBTDFwcWVSbFVPV05xbk5CakpnUTFYbVlGdEhVUU8yc2JqK2RWWUcwSTZOelZFdlR1cDJqRVlZTG9nQkhlS3ZWeVhJWjM4ZnB5REVmVEVuVmw5VzhFMzRBUXBHOWlzVDFSR05IYzZVVDBWd29Nb2tlakp6dkJLNGpIK0ZjQmdCU3JsZkpKekdjTU9MQkJZaDJSWkdHMEduRWNwTXVHTERualorMEhUbXhORG9WQW5hN0pWWDdzMjZDUUw2RTk4MFAyS2hNSGhDOXkxOTdQY21KVUJlUFhncWFRdDZMVVlpVDRkOE5jc2dkT2tuZDhHcC9JWDFidEc2L2xIVldNTCtwaEJNTnFWNjdIVUZUUUZZTUFrbHluUVROajgzeHU5NkI1VHh3cVNXOE1jS1BRb3lrWjRKVVZIdXNWRTJlcDFNa3hCVWFlM0h5YkNXb2RlaWtDZXpIa1A2VUYvcDF1NHd1WklOT0JValEyWkUvOGhTS3BVRllRZFlLYmE1MEVvaVcrWFpxSVhvWXFmd3JNS0RuWDhtWTV6eWlWV3dOa2lIb215U2NGU3ovSUNUV0cya2ZTbWdXSk4vb0hjdFhiMkdwQUdLdVM1Y0R1ME9zVzFSRlZKbHZVZ1lEZkhESzNCVDFwcXJNWFhjNjkwUEFHVXB1U2JyWWdlcm5DcndBUlVTMnFQYW9vTWtpL1dIaTVWVHdPaW5QQ3MvSk5pYlZjVDNyTDhOSjBSV25mbjJiTkROWE91S0pkSDhicGFUT09WcDlVbGdTY2I1TWN0Ly9BZ3dVdUlWWWVCKzBzSVh5N3htTktSNUpEcllsVHJoZ051T0JZOWk0OTZ6Wi80VkY5TDZRSVcrM0tjOXdWVi8raUtiSFcrNzBqdkR3VE54cmUxazJtb3dEdU5vc0ttUUpBSFlDZC9aUHhCYnhhOXZrOFdueFpPUCtCa2F0SXl4bTFFdUVwVW5UbnExRWlqUW02aHdVckhGSjZoZi9GOXRITDY3bWdwWVd0dXNyZTc0Q2hSaUUwdjBLWWZTcFI5UlgwSDA4dUtvZzI3VXdBSFEwYitCNFNYaUQ5ZDNveVp3Z3RTNlhKUHNScUhVNTRQY2xMbnJSRU9BUEJpbDVEZVZNU1Z2bUllWEdPUWRqVUxnUzJzWFJmSW9YNThFc0g1cUk3OElqVWNib2FyTVRnUEkxYWZ3dzdvTUh4MHFMWmZseXZzYU5STFVhb3cwY2NtKzlWaDJvMVJmS0RxUzlXdG1VS1hLSjNMMTcveXNzSmd6UCt5NEQ4OW9ZK2psbmJQS2hJb3Vlakoxb1NlS2hvYWJCWHlBSWVmWmQ5ZzFFTGpjcUdlNEN6WjBKSTJaYktSTTJDdG5RQ0Z4RmorY3pUVEw4UHBjeWtGQTFKZ0l3NnB3QVRzbi9lVUJ0K3FHWjJWeXJBZHhRems2SFlDVFEwODVPQkcvbmhmZzlUcU90U2NQRmVkUEJTV3MvNE05bVBkcmVFcjdFZ2M2SCswamNQUEQ0SXJTRE03djhYZTc3RVZWWncyaHJnMm5FUWJtaW9nbGFtUGdPTllpMFltU2UvbmR0T0RMQ01nZjF3TTZuNVNzUkQzZmhORVhYYTRaNllkMC90VmFtYTNvWk9PWWZkcDZRT012K2MxYVlsRzNtT0I0dkY2Uzh2RXE0UEFoNUtWWm44MmlzWXBEZkVnZzBkMG1iQllIa3FXbmhha3FVL0ZNN2tWaVhMdUJ4UjI4a0hwY1EwQWVUVlMwUk0rQ2lleHlnd0lPczErVUJrQWw4dDd0Y3dXb1FVK0trWTJtVkxBRDNrM0xLNXliMHc3bDFmRjZ0alM1Sm9XQlJQMlY0c293b01ZdzQ5QXdsTXNpY3FBZVZtUis3Wmc2NDZ0V0lhNmFwS3NXUDRSeFZnWklRMHpJRUgrYlZlZU9nTzEzSk1KUTVqT2lNMjRReU1aTzNlc2lVZmp1eTF4WXBzbFVpVnZ0cXp1MEVwMXFrMHdpNDZJOUxqTkFxbDgyTlMzMGUrTGhNYzl4SjdzdnBFVzY5MmFHUVRWUyt2Tm5sMHczSG85ckpzbVFPOEUzeGt2c0NIQnE0Mzh1cUo4Q1lWZnJEQm1zRStMbkZzd0NMQkhJTWswWXpGbG9wMW5tNC9SeS91OEJMaTlvd2tVT1BXS3dMUXNLZkpUODBRNEtQYnFvVnhBekpnd21rc1FxVnJiRzVnVmJIQlVlVjdNSDVUdHdsZmtYUlYrZWtmczJuSzhpeS9ISktGaTI4Y2xPZktjYUZLU1ZEQTBnbXl1Sk9zS1VQcHZDUnF2TUREZmRzeUF6dlIrVjIrd21VYlpEWkdpb2x6UlFZVnZNYkt2dnp4OVdTSTRjLzBObEFSdnFOZ0NNQnV2OXJlRDB5amx3RzAwMENwcmpXbXM5bXNtLzhHL2t5Y2NoSkE1enVsdTRjOU5VcXBtU09aOGtVMWJ4Z2pMRzl3OUtBYitRLzJZbkwzdWF0bTNNR1VWNWdnVWNRblVpQ3lGeUtkTjZleHhhdzltU1phTFdnam03ajQvZ0RZUU11UHNpL0VWQWc3M2tTcGxqSEFuL0FBS3hIcWVmb2pHN3orYTRzanlmRVo5a3A1cWdXQmtiek1BRmFXR29ZV3EwL0xqNjRNYU5rYWw1T0MrMXRmbHgvTzJHMFJvaEdqQnJ5NVVYUFdmTEhJc3ZuRXY2MStnWm5JbHN3dURSK2tpaTB2dkZuQS93UEJxbjJ6S0ZPazVmN1dNbjN5VnJROHFlY0huRUIvWUE1bFdZWnpNc3dsUzJzU2M4Z2d2ekNYc3NQOGtHcWozSzhCdmFCNWx1amJNN2hTeVhDbW85WmpHRnczWjJZZGNycGNEUTJVQURMamU0MDI4M0pRQUM1d2o3eXR2Y2QxK2RhcUxncUJhSm01bkpoM280d2lqL1p6cDBnYldjWjZiT1R0RHVyVkJKSmRubjBTQ2tQOW81YVc2ZzNlTlVzNzVzdFJ0aDBwOSttMnhZNE1Kc00wV3BJbmpaZXNzVGFVdU81c1dQaTdpRTVvc3Jzcmt2NHZqdjMvdW9ndVA0VFhsQTZrbE8ybzB2NVQ4MDVCQVVkYjdPVklNaDRrNUVXWklKMFNaTjk0NVJHVU5UeWFaS1FBY21EcDRUK0hNd1RaeXBlN0ZTUmkzTVIwNTJ0azVWRlFuVnUwdXJYalVuTC9kTEJZaHZkMkt5RW12Y0Z6ZUIrWW1SYlJ4ejIwZjNwOTFBUmw0eUJBQjBkZ0hHcjBZRDFNQy9PbWFqWnp5WjEzU01JNFRuK1YxMzZjbWJac25MTXpHNlgwVk1KSjVMdkNxaHNWVkl2eDR0R0pIeklONG5xdk8wUVRGd25xR1FNQnY5UWVqeVFHMy91TUZiOUl4ZVp5Y0Zab0J2SCtHZTFsejRnV1ZSVDNXalRVY2ppOCtYZ3VFY0h2ckx1VFc1YzlPODlEUkxlSitJaElMQmt2dE5TclE3bnpHWVdVWXdMTTNnZlhqSkdRUVRWb2VIc3F3bUJTUEtjaSt5RE9Kc1Q5aEtQMUhWZkFTcHhmVnR4dUlqbFNxZDdFK2x1R2thc3RxeE0zcHRqWmZ6aC9wSCsyRWlQOHlHS0lnbzA3K1RReEgzdHRtTUFWYUV4N0FVT1UwQXp1M2tpS1UveXh2b0Z4NXFUU3lNOWF5OFRscS9FdE5idU1lQ3M4aDFRb05rZW50RXF3YmM5dk42Tld6dUxyeEZENHYzZmluWDFtNTl6bzJOaTZ1cHBnOEpwcjY2UmMvNDlVUlJQUmpNaWZWVXlpaVo2Wkw3RElacVdYYk5pK2RoV20yVTlkY2cwcndRSnZqb3duL1hOaFE0dkNJZGt3aHVOSWpJUUVmVmlwSkNnU3dMc1N0d0RKdUJvTllvUE1ERFozSnIrc3Q1RC9PRmRTYXZnc0pKUlE0QURDdkx6V1FXMkVwOXVGMHBZamh2ckxHcWFYdHh2OTZZQllSWEZqc01ocWFXWk1VZEJUU1p2Y1dYdDQ0UjlFdnZjYThDQ21yME1STUxrbVpwazJRYWRuTjVlSTNOKzRRNE9HODAxSWZJbXFiNzFjZzFYcEtFdXR5Y1prVWJLU1ZNNk96RTBpK3BRTDBtajhGcUdIMHV6RW1oaU9FYXh4TWJlR1poRXdxYVlxdytYeVQvWWg1dThXblFWV3Z0TDRrNDdnb1ZLUTZIUVBvNGM0aWx5ejU0MHBRZCtYb3FwN0NFTHdQTVc3Ny9MUHUxaEYzYWYxaFN2MllIOVZBRDEvdnlISWUvT24yZnMwdDk5R1JUdklka3NxNFF1NzV4LzJsbDY2L2lZaGFNNEFkaE9DdC9QNGIwUHREbDF3dHY4ZzgvVVBsT3dQRm00U0pJc1NOUzVtWUI4RzM1VzZrZ0wrcFM5WGFNVUNVY1VFN1RwU0dwWGZMcnNhQ2xkRy9mUDlYakVCRE51M3dFQnZvQnllVDdhemhzUCtvcW14V2dGWWtIWWtLbUZNNG45TmR5UFV1WDN3VkFtcGcwSmFaczZVeDhxYjg5SjZrRDVzS0tKT245dFExRXBHakpIMVRKTlpTb0dQelhKZExuRUZTR2NTRG5WTnB1eThmUTJnUVFseFBjc2NiajhWbDU1emtIWlllUHdWTjA1WnQ5SkFVcWtYdXZySHN6d01kWjFib002U1MrZGsxd2tvUG1xbTNvUk50WXZTV29STmNhQzBCSzZidENqYmtZSkYvd1UydFZadGQ4NnU2SGRGZ1lrSzAwNHZBMUlkRW0zMTlHMjVkb1Erayt6RFo4WWZNbStyam1IREs2MUh6VFNneDNTNkdrakxZL1lhU1JQbDNjMVVEUjM4Vm9KMUJOd3NJZWEyRGJ1WjRWd1YzNjQvc3d2L0N6dXVFQ3pMMExucnVzOWxmcGZ4VlJ3VDJoQmwwRUdWZVNJREp1YlZEYkIrUHBjY2xqYlFSOHFYemFmdGVlZG5SbUhJSDZqcnpWSVNDdEkzNFJUOEllbUxWRFVFV2prZXBRQmNzVVNRN3lnVHBNS1dzbWNkbVBydjNvak9MZWY2Uit0SHFwVFNvU3VqRFRIZ3EyQ3BZY04wS1ZFUDdIdGFOMjI3Y1hJNHNWUFZRM2JhLzg1YmtRT2Nucm1HQjdMM3VxVjRZeDVyZDdOTUtEcm93TWdMTDZSU1VOYTFiSmsxU2kvMnBRc0dNOXVrMkNTbWZla0xIVGFBWTNJaFUrV2RQUm9QYTlqNS85eUxXdEpBQy9SMVNzUzN5K0EvZXh6UUJCaWhIMUc2Zkwza092TnA0UWJuRzZROFdiL0NHK2NSNTFnREthNVVXbnZTbjc4OUVCVERFQlBMa01BOEd4MVY2UWpjZklESmRSZnlUR3dIMXQ0NXFBRTRJZ085MER0bTdxK3BGUDNvazhiR003MkNtS0ttcVF5emhFdXV5YnZ5NDFiVVUvS3VkYjB3c0RBbm0zQXZlNFJDVUpiK3o0cTJFaVErSzMxdGdMT01SQWpsaEJURzAvYlF4eEJ0M2t1ZnQwSUFabnpTZEZzVU9NcXRmRkROSXZrVDc3ZGlVWnNKallYQlR6MWh2czNxeitCbDFwZUdOckR0SHZsL0grNStHaEdJMUd0OGJlNDhOWkFhSit3b1JXcE9FQllBVmtJK25YRExVUGpTVUkvc2s2VVM4TklmcS9iTlN2SmIxSGRYSHFvSmtDUXptcGc0MHF4dG9ET3RIelVoZG40QzVsVDQrMEZIZ3NUNGlNVUhSOFZFZENwRVNtSHlhSHdCR1pNUjRQYkVYTXVac24yTkEycFZHLzRHYmZMdzg4ZE0wQlhNQm11U0NjM3JpOUdJL3p0MEpqbkRVSDJscDlGSnFzNWVmblBqdk80WEJvRkRiMi9IT0J2R0QwWS93U0VXcno2L2xwbzZzczNRQkc1ckJWYWJnNXdMVzh5WktaYXlwZUxaK3VuR1VZVU9YRDFQWWpENXdVMk55dVM3bFRqd092b0NUOHBFOGZuVFc4VW8wUE5mRFBvU3kwQVJpWmpPVi8zN1BDNitrWG4wbzFtM1RtWUZPV2ZXYzROWUQzc3lvMVlrazU4SSt5S002TFVVRHIycmJwRE9NWElZK1NQR0JMMGVxbWIraVNqYTNwQWhXMG1icll1ZlN5Y0NWdnM1V0VqQlNRQTEvTEY3ampTUmFmQ0tiTkVpOHNyWFgzQ1VSS0lxeUhtSWptb3Mwdk8rY0licUNvTFFjKzlYMUZsZHpXQ0lJVGFZSEtaQ3hBdEV2b01OdWQrZmJzR0kramgySDY5MFNneVlkcWdJQU5HT2dxRXB0Z3V6cDNxUWJrK3paWnRTTjlVU2x1V0hUNzg3QUZEU0dXNzRyZ2NHWGlQcWI4bWdQVjlKaUttVndwKzJaWnhBZm5EbFhPNUpFRDVkYUs2WmxBVnNpVXZzaE05eDdCZ3RzZ1JGUlFVN1hrc2Nadlk3dDFvQ0RJK1NHNEpPUnpRdzZxWWhFMkI0ZXoyT1FaQ1lBMGdGczZLOEU2M1QzQWdveDN4V2k1cmJ0NlBRd2tpZEUzY0s5cjV5YmpHSnVxM01Tb2hOZWVqMlVtNWJHRmkvUW9wSDRKV21Vemk4OEFkUkl4aURLMmp5RisyNlJGZWhLNXZSNEZWbUhrbHhzR3ZURmR0WEFNU085b0tpbzBSYWVWYytaa1pmRmdDelN6dDBxNTNVQ0hPRjljWlVNdTQrckhZc1l1NEZTUDdrbitqYmF5ZzhzS3RMQnloa28wa3Y2cHhJZ2pEN1V0Z3NFT0sxVy9HV1lwbVRKeHRpa3JJbGtLUTRTSjlzbWhxMjZESXNLZjRzWkd4L2ZGMEhReUZ4TG1nb0M2Q2NycGpwZTNPMldZbk83WkZCdll1T3hRUTdkNTYrNkxCc0FtYnZWck1CamxQaWFSMERsclU5MUw2UnYwZUNqUGNtMEp2ZTl0dFVuMUdoTU14Q2VwRXJyZjN6d0gvWWRVV25HRUtCN0l1Um0yZklHVExJRG1KNjcxc2NPbkd3V2RnL3dpUlFIYkdYWkluMk96RmI5TG8rbmxHRFZaYXg4MTM4bW5MaXRHY1l3TnlWR2JzTm50b21FVFI2a1lOWHZ5cEFBaHdjU2FUNkZEWVBCTlcrMXZGRDlLbXloMktGV3A3YVJYcTV3VmhmUEdKZkZNRFo3S2hPOWNtQndwZ2w3SnpHb3Rkb0hwQnY3Z3NESUk0UjE2d3lSQzhURFk0ZTFjN1lMRi9FcWZGZk40RG1aRjAvM0hQcUQ2SnNLY3BDVmEwTUNWSHZ3eGRhUDBKaGdZYVI1RGxDQm5lenFlc0tYVzFHd3VycVQ3a2hmcHJ3NUQxMldqbW9FRklmM255d2o4Nm8yNUw2R1ZlQnQ0QUVBVk15d1k2ajNZME81NG5ISk01RmJoY3NBVXBKUkdUVThKRGIvaU1yVDFWKzg4S2s4NXg1amlTMU5qOUdpaVIzTTdBMzNuNG5VRkl2akpCMURYY3ozZHNwbTNsdXVVWjlsNVNiNGxhT2w2RXpUUElubHBiUWtZVm9UcnJUY1lyVmtpOGRVamV0R2ttYUludVRtRmR4eVQwaFZrNWY5bzRvWS84eGVlNlBEakQvUWhqeGNQQlUrY0ppMWNoZmtCaGNqYkRkQjJmd3AvUVdjVk4wNy9tdFZGWEhyK0tzUVNyVmM0ZFhOOXpSMitOZkZjK2xnTEluTW00VkdyejFvZUlmTFpXZ1VnSVI4TkF6YTVYWlBWNDQvTjNCd2dlSTNtMFBRVURicWxtSFl6ZTA5SVlURG5UVTZmQzVtd0hzRyszNi9SKzdnRkQ0dEo2ZjF0YmF3T1NSUWJQbFl3amVCSnYxVHdvOFdrT0tHODRnRjFrRTloeThraDd0NFNaYlViWkZmTG5jNjYwdGd1NTQyczNseGJaOUt6eUFsc1dPMzhrOVQzNHFrRDlXcEFxYU5KYWRibU96czNJYUFKYUJQYk16a05Gb0RibjQ2NmdUMVllZEdMcStXTy9BVU9UeTlDTmhOaUUrbUp4MkljT29FQmdjTWlkRkh3UjZvY0NGdDdvazlxRXZmSTBSRTdWbjVxRFhxbnFocUkvcXhWOG1KVUtBTVBvM0VEbTB1QnJYaXFsMFF6MWNpbjNJdzU4UVlrVlc2ZEsyUjgyK3J0U3UvT3NZRnNRM2w3ZkpQQVpBWm5yUjRUbGNrNzFzVWo1VXZEMGtJNDNRNFc1bVJURDJna2kyL3FuaElDQWdJRG0rclFBNUxGVVhzNXY2R0lNeTROYzAyZ0lEVlA4TEJKVE03M1lDMk8zUnNETzIxbFg4bzUrZ0tYUlMxU1J6SG1SREVMaG0ra3cvZkw4K3BpVW8yUEhQN2RaU3RQbldSbTBxSG1BSEZSRDZpWlNCRFBIeXQ3K0lZcVBoKzlyWkF0aUhlOVlidEhEdURNcHB1YWMxUkxBa25vYzEwTE1ZVzdlMG9NT045YlVXOVJtQ3NwU1dZckIvSDFBTUFQMExOK2h5ZDB4NDA5andlVlNFNDVMT0U4ZUJ4NnV6eXM5SVVTeDdkRVlLZE5kZWZqbEdicVdidjI5UkxmbnJNUHFyM1NmaURIQXJkTTVScHVnK04raVVpeVQ3VGpoUFV1Y1hsRmFRRE5kcHFCdkNRcXJsNHg2WGhwNzlrVkpYeXNBSGdxdGljNjhhYXFneEl4M3BDWkpVV1NVOGJCQUwyVFlEZ1IvM3BIYllIQXRTaHZGSEtWYXc1U3RTaDdMblhjTWVZZkIyYkVoSHJOckFYWEdxbzk1UGdDdER5UzdaWlo0TVNpeWlPVHdrOHFJTXUzQ1dtMGNpRmxLSisvSXlYZHJ3Q0MzTjBDeUZTVTlBdXBpaUZ6QzdIWUI4dTBUbC9pVFoyZ1pKc0JZNEtrZitiRkhHTVdSWCs5Mzg2UUF6WWdqNmhLVXkrM1FnUFlDZFlHd1QycEE4c0t4cHJyTFJWMmxrQmhZcEgvbUw3bWt4L1dvYStMcHF4enMrbDE5SCs3M0VVeGVwY0pXTUJMRFVlVHFnUzhjTkIrS1hxNzViMDZvb05ldTE0THp4d29hWVhxQzlrTWZVMTBLL01YZWJIeFczUVo3UTFtSnhuazBsamlRUWhGOG92dnZJRGpLU3lGUWVCUHRBNUQrN2pGZUpCTVI4NnM1SkQ5c2swY1RUczZPcjI4Sm5DSXhjNUU4RHQ1d0J6RkprUzBCQWY5RXNxZ3JyMmFPeFhWa01KaW5JVEQ3bjRibFRreWRwdHdFSDZvTTJYcWRjNHMweFB3RVc2eWlaTitSMkZFZ0tQaC9oOE84OS9pSkVxYUZXWFM1ay81ZlIxcUM1b2drSGYxTDQyOVVTS1RsbzFIRDl6bkZ0OXBVSHVsbWw3eE9WLzZFaG5ReU5iWkZLU2JGSXdiOUdTU29IODJYbExXUVlTMG9WNXpuRkN2ZmZteklPQVdhdXdocms5NHIxMDR0UXdxeGx3QzFvMGpLZjJ1NWR6TWpsU3ZYd0FZUEdTNHJSTXJMWms5elVNeWhNcEkvMlJTZW51SlZrWk9XekoySTNralFTTVhqbmdVRE5sRk9xbHBzOTRaT3krTWs3OEFUTWplUjdzeUJqelBuNzFUOHAzMnlrUG5rT0JjeTYrTDBrc2xPOE9VaW5jajI5ckJhRmplVmszVlBGL3I4T3ljc2ZlSXo0YjVEMFFWZnE4Ky94b0ljd2ZFY3pnSEhKcmRVNXUyRndCbE9WRG9JOUxTa3VoWmFyKzhvQ3lpUnp1eFpJZGlETzJTSlV2c2MrS0pkQTZTUnpZaDFxRUFuOTVoYml5NjVQOU5qSndVR21XQlA0aExaUGM4WGZkT0hmK29MQ0VMdWdRNXl0ZEVFZTh3UjZjU2JXT3FuUUVTUTFaeFhYcW56T0pnSzZMU1B2SGxaVVk1Q0dVc3E0dWgvS08rVUJkcFZ6Q01rRUowVGFxRHhDRXp4Y2xiTU5sK0I3WU5kUVlKbjVIZTUzbkZOVUd1dXkyTUNueENSaSsvL0pHdkRVRld4T25hN3I5c1IzYk5HaU9Tei94RE4zSnF3NnEzdlprZ1MwNEY0SVJ5dDFzV3F5eXpWcURmQjYxQlNxaWUwSGVmK0RQMnRhY1ZvOE4vRkRYcHhLR0VKcFNMS2pvU0I4SnVVNWJ2VDYzc3NqY1JSZTF0ZzU1dUtCbGNTUjUrMXEvOXo2NmF4TnlUcTdjeSt0TTFORFBtYWhqRDI5TVJseE83bVN1cERvc1dKQUI2S1I5TFoxNC9CbkUwK250MmMwcTFBMjZPZG0rVU1RblduejM2Q2hwTnJOMmd0UWROeExLMkR2dGJkYmh4aHpsTkkxdGhraldKZ1lIWkhVdjhZL052cTlIY09jQzZpaXV5UXM3SVNVekU4bk5qT3RpdmZXNnE3TTJmK1lXSXAzUFRjbk9RajB6OVVuM0ZGcWhwK0gyRDI1eURYbnR0QXVmMmgxRDVZZ2lRaWw0MDM3a01MYWZGeEk4M1k5RmNoeGlaWjlMTTBhaTc5bjhwZ1EzbGtkYUVuR0xrb2d1N3kyUkVzWCtRck1lUW1nVUl4K2c0YnZONHZjTzAvRUxvZ1dPTThpUU4wWWl4bWJrYk5kTzVjL3k1VGdkVG9YcVdMbm9PRWtxV2R6ZG5penJPOE9FY1Uwa1R0bW5sVDQrY1pNeFNPanI2S2pTNXd0WkdVUGhOZEY0eTRmQzJRWDBLQis4YVZSWG1aZ2VvYmRnU3hjeE5pQXJTWmM0eHB1OGIwRzh2Tm9iSWc3UUlIdjRZa3ZqbVo5ZWk3L3dZcFpvTko1TzJBWFlCVHBKcHlmUElRTUpaanVaQXp3OWp5STBUdWpoTWptV0N6VEJIRGh4NGtmV3daLzFmcVlRbEkrak9NT0lCUUdCYjhITmk4czRQL2JuUzdVTjFld0lycmplN2dtMm12amhHMWxLaUIwbExwZDA4SGlqZWorRG9XZFpZbitWcjZrcU5CbmVEMGZNQUZ5RmRJWndZUE1XUkdXcEFQRnE5RCtFVWgxdloydGM4UzVJazI2ZC9Sems0UlRPa3N3N2pNU2ZDNHJiNHVYa1lwTG94SzVIMllXd3hTL1hsWHowblRGaWFXa2NQcy9kWGF0SzByWGRhNjA4ZWVvVzZrZEE5ZUVyWjR5R25NSFpvbVBVNk1hYmIwVlhCaXl0bGZHT2oxK25NZm5QcXBuRmp0TjdDcnpKMnhNYkFiN0Y5S0VCTHkwaUZ4Y2hiZEZ1QUhaelcrZDJ6bGZ6S0FIL0U2UWF3bFR3ZkpKMFVoRDZuRm5ZejJ5aEtTVTdPL0FCakhZaTNwMGtvZTdGTitFeWN5cVB1aUljSTZOd3N1QlBmaXNRQzRBd3lFWEE0eGNGM3RGdUQ0RzNZZ0R1NzRmWmtqR0FOUzdrRkxGQ0E4dnVPL0FKZ3hjR0pLV3F3NUUwZ0psVDhmQWg2MkhoNzNMRDBkWXVEcVZkdTZsQTA4N082UE9MMzZTcHlDYWVaS0lKWGpvZFF0a2F3b1U0VkxrWGVrU2hKWTV0OE5naWdlSnVWVzNrVUNyMmRoamNreHE5Z0lFR3Bja05pYzhVbEFPWmJoaFhkS0ZjeGo5emxxTVNaK1RHenRnNHJQV3YyUkNjbG9iQkN4R0hGTzRWRzhudTd2eHIyYmwveXRpY3BpREYwTm5MSFJndFRZSkc0Vk00ZStVVlRRbjB2WHBMQ2JSTnlvVWJSU1BRQWZEWUJSWDk4RHp4enZJd0cvR1pXZGNuS2crRmwwV0w0QW4wWjRWNzlFV2ljd2JSQ1pBanVKUkZ4L2ExQnEvUkFFQjhsYzhHNDlnN2NuMFFNRW9ybGwyTFRzY0NaOFRSU3R0WUtST2NJQWdkbUJqTCtXUWJXRWZTVndVbFIyaVZFN2d3TDFiM0ZsbkdpRUtqTWcyTG1rR1Z4UzlzUGNabG1LeC9nNG4rSGhWSDFvRXVxR3JrRmRSSksrcnMySGdvYXJEbWJBR0ZMYVRTaHVrUWc4Z2FPY0F2ZlRBdm5yZ0k5R3RRdVdleTBySUNwdkpBYmVSRjZlMDk0MkdFVVF0MEFoQm9YQlh6cHd3emFJME5IT1IwaU1neGFUaUU2ZUt4ZGQrNXJVU2x0S3FHRTVZckMwTnlHMG9FNHpBT2xtdDY2cE93OHNPMEFsWC9ScU1lTjdzV2ZMTllQZU5FeFM0QVRUNXZjRExiQ2xpL212YlVLTVVDSVY4OVdpcmlUNTUycStBRmJSNUExcVVyczJRYW5zMTlpZ0RsOVNpeERJemF6SjIrV05pdGFNcCsvQTVxR3U0dFdabE9WMEZvZm9OanE4dFlmRnFuM2d5R2dwbGZlRy9GZTArWTlTajBPNjlJVWF2UG9ESkhJc0dEYmpEc2hSY0JRRVB3SkdBTnZSVlh6bFVXSnJqLzNYRnhXcDZQWGxlNjhqVGVPV3hDME5RRmhhTkVqWGhRZlJLVXd3WXVGcHlUYzFzWCtMMnlMOWVmNzFzblNNNjZ2WWNzMUVRTTRYVlNDSlNwSWRQbGJkeG93VjBNeC90emw0NjVFcnpvK21XWU9sUE5kWW1NS2h6VjNJTEhmbWovVGZiMVVDS1ltamxaY2l5OWxZbWVmeWl2alhTdHNPTWh0SDJCVXR5VEh1TDh2SS9XV0QvV2VYMlV3UDJHSjlqTUQ2MHY5V2xFK3NxL3R1RS80YWVmZnFmUDRXdUhoZ2pzSmZxd2pKck0rdEdoYUIvenU3ZEFoRHRoZW5vUWl2MzVJdXVZcXRmUFMybVJBdmthSkJnbmZma2dpZ3d2bG10MTJGWXMzTHpIczBFNkdMcFEzSHVrQWFQMnN5WU5NOVJ0cjhVaTB3UEFTaFE0L1dQZFNweHRiREZJT212Wkc1NlVYMnpvNmhWd0puR1VOMFBIanVIS1RoeS85dDhqRWxoRzV1T2NtWFJNOWRnSG9CRTJKTmo3QmNrOXk2Y2dLUEtPYi9Vdm9MUFhiMkRWczdSL3YxekxoWWJDNGJKWmM1WGZQbzFsQVNrUDV5ZEhXQzRrc3BZckM1c3BhRVFGeXNnSXBnVzU3K2Q1MWoxWGNUYlNybE9XSm5LYVBVUHJhNm9aV3ZkalJPREpjbTh1OTNXQytuOFF1RnptMDhmby9vcWF3WithTlRvZDMzWDlzdHQrYjRYKzk2dFhEaGdySWpobzNGR21udEFNVzVXVTIyck5lYko2SG03OHFkQm40MkhJbDFEQnVZdTllM1JOTkpWaGUwdmFFNGFTSVVFc05WV2ZwMTl0cE4wek5ybFJxaEY2R3pBOVpFUTBrQXMvaU03TEdkaUxIc3hjVElTM2IvSVRKYWp0eVR5VUJYcXVqRVprUjB1UWVsYWpscXhDd1NXaXJDeC9ueWpBK0lNNHZoZXQrUSt0S1hZdTVCSE12WWxLZ2hqRncvRFJJOXluWndqNWk2WTQ2Z1QyNklabVNHcVhleEgxMXlTNkx6QlJDNDJBaVRkUEN6WElnYUhYTDRjVkhEZzl3TlRpd1ZZLzFKQUlGaDdiTmtrdkkvUDlTQUlKNkpKWHBZS1daaTdXQlJzVmt6R0l6NEZQTVA4M1ZRYVQybXVnSjhjc2drM0s1NlUvVE00NmF0U2xvVk03YkE1dW1QTURzTEIySzZBaDF6Qy9RaDlsQUt2b1dBQk4xOEtKTTBWUTY3MjR0eUlNeEFnUGNQREthdHZ4Z1RRSEZpQkpnajk2M1h2MUlGc3lsQzlMT1UrMFNBeERQOUNsLzA0WkRHeW9UWXNQSHREZWpKNWVQaVd4QS9EQkd5VEJad05qQlpXSXFwSTFkRFpJRDdYaXlSZGQ4MU1sLzdkNHpxS2E0SDNxN2orMm9reDUrb201OEtpSTUxM0Fldm5xb201ZWliUFk0dlNVSEN4YnJ0czRDZ2NKNzExS0FkSXRWaVZIUGVEbXE2SU5uaThjYnZaU0RuOG9VSTg2bGx6K2RINDdZeHYvcmZuT2dCUFBtazZLUTUxZ2p3RU9LY1phNUl0VTNWZnJrOGZKYzBMQ2pCV2t5M0hFZ0hLTFlZdk5hWUdxOFJhbVpoRGFRSjVpN2tSS2ZveFIyRHk5S0p4Sm9EMHp5b25Bb2JlMGlVamF6T25LeE9LNzI0M2NqNDFTR3ZHUkV0djIveFF0YTNMcHFFMWNPYkUvNnhlcXh0emJid2x1MGJsK1cwRmJqNmlRUzRnUkNFdFNjVVJwK1YwbVRpelNCaEUrQlZTSTFWY2NLN0lBNjFZME9UbWZoeE9KUEk4Vm9jQXVhNmkvZWtXdE5mb2o1RlNnVlQ3d3g1T1hINWczYnYveEJGamFRQlV3eXI1SmEreW9WelduMmdNNXk5YlBHMW5QWWRVQXo5WHNuMGZLZnNQcXcyaDFQSlMzaEdwbkhoSXBsTks3emNqM1RWVUV2elFCY1FxSFhMQ2dBNDE3empTTVRzVHpzU0JibHpKRU5ISVFiVGwxU1FRelR3NFBsUnQ5MW1RZFVvNjJqdFREZUdFZkNnckVtbEIvSHBEc2ppbkt3aGJsL3lkd3paZ1htaHZmc0UvblN1SEtBcGVYTUtnRDNaSU4raWtuYmtQWmtFcTE5Qk9UMzV2bHRDcjlqK0RDcnFYYTF2a3RCaTFic254MmV6OWh2enZ4eHRvUWQ5OElwTWFJMzVJZlQwQUtYbDZYYkpOVXg5UFhvMGo1MzFDOHFWMjVBa2h6MklEOGdBcnE3YUhZVFkzcTFwd3Z5NWhkREZneS9YTzVwZGhzTnQ5UjNhcEZkOXVqa0t1UHJKQmVxaDMzSEROZW10bzhTdDgvU2Y1VWE5eHdONWRGZFJlMnQ3clNGbnJ2a1RYa1dCVlhNV3A1Qm8zMnhFa0hwRWJYeW1kcW9HVU9GWTNJdE15Qzhydm84SnplMksyQ1A4dXRmTkxaMThVUExMOWgzVXo0TW1PQVIvUENsLzZWemVqclVycnRtb0IvOEtRa1d3Qld1YVRRNWx6Y1FpQ0FwNkYrdENYbk1sdXhocHNBd0hiSXZqcjRDVXltalM5eWNvcHJIZFM5YmpZVmVVTWI2S1V2S3ZQM0hDRXFTSmZrZjh3Z1cydjdQYk9zeVVmUXJNcW53dkFlNENyTVJqY3RLNWxuUmhEK1VXbm4zUlE5V1cySkFhOUxYdWVzOHpITTFVaWJCMkJWM3VRNVMrZ2g2RDdGK3pzVnM3SXVhSDg2UHZTK3lxT0pJZzZOb0VUZGYzY3dFWVlTVWIweXBpTHo0MEpYYjNYQUZVMFNHYnBEQ25xUkRkbjFGVS9ya0k4Q04rOFhsZjJhbklPMW1BOFZTc1FibkJrdjZ0cTRMV0RISXB1dVBxNXJEN0RLYkVrbU1yYkNJa1R6bmEvMWJxN0g1K0tYOEd5dTlERDhneHJHbHBUZUhsSjhoYTJSeDBvY0lXV2tQTlE2UmFVcFVxN2QwM2hrRXJCS0c4R2h3RitmOWpLek80bUIrUG4xUCt2clVkeFp1RENCWGNSMlVIWjcydy9TdExNY2x5SFc2clBVMlp3OWJ3QlM3R0ROOGtvTDRUY2hJVHh5em5FMVRKdGlGWDdSajZJZmEyTFNJY1JBRUVuVkZsL3kyZXlSUGVzcU5OOEZFenRwQW9SSkhhU3F5VTkvRHc3bzM5M3luVGhsYUZQdktEc1YvWmpwOGdOSkNSZlF6bW9VVEFxYi84SHRrS01YVlhLQm83ak0xa2wra28xUlgzYTZiU0kxNnVoNVdOTWdwai9JMzdVam03TTlQdFhCdVNCdGNYa3FhV1FxbUQxS25ab3hwOGQ1Z0F2WDRUMVFHa254TTVFWGRGQU9FMEEzOW41bjVjOUVhTUJyMFRvYWZiNUZCVmx4eVNpTjhxQU95VXAwVUYydWVaTkFLMUZNRmhjRFN2d1dqem9hQnhDeVQ0YU5KVndTM0tWS0xFdEpWN0tRRHU3ODRPby9SaEk5Ly9mQWQ0dGZlUEJ5aTZNajdPYlcxNUkrV0xOK25iWStIRytMdkFvRW4yZmRjRlNJczQvMUg3MUphS1REbGVZMER0STM0d1grcS9OTzJlQ29uMGR1M2pRdDk2NW9HNXpTUVBSN1JZRDZqQUkvQ1ovSnYxWDkxSUlJbDZCOWJpN3Q1RGpzSjZrQ1pWQjA1aisrc1VSc3FrVFJxYWcyWnZFY0JWT2lDMGZVN1BIVys4SEJ3TzlYWFpzVFVpN3JieWErMkZ0cFRuLzM1MWNsZWFVYXI5MWl6RERJRW8vWGkvQlNNbXMvWEJJamRMeHlyV0g5UHJVc0pFc1ZzU0wvTEU2T3R1STQrdXVEMWIvQUtoMWhad2lWTm5xMnk2ZVJYVCt5SEFaVmxpN3dWcjZlSmEweG85Z1NacjhiK0FIOFJJa3Y1WVRTK3hCTzJKN3BWL0VZNUkwK3lnNEsybkdaOVc4enUxT0UvQS9Ea1diWjFHRkg1LzZqa3lwcHNrVzVmaUZyMG1mVnlaMFF4SCs4VXJVYnk4dHNlN3VkT3NoSGdkVHFMbHdyOVA0SGM0MEJCWkdwNmdpYjUyUERYcW1KU2hYa1ZTdDdpMDBEUDMwTnFEUGJkSEdvNDlaUTZmdjVOTVE0YndwTUV6OWFPQWhWaUxTbXdDV0VRUG00TGdUek9BVnQxSzM0dHlwQ054NFBXYjJ2WkNqdXJhNG52N090TVBGdUtFM1E2Mmg4T3VwdzJlTm1sUG9NYTF3ckQ3WUFCL25OUnhjcHZLczVMWHVEYnFSRmtLSmVTdTJMbFc2djh3OVY0a2VVSjMrZkdtRXQ2MGFBT0d6S1kvZm5NL0RsZU0yMmNVRDlpbmI4YUFvUGtZV1NBS0dqUGM2Q0hVQVYyR3E3ZUxYblFIRXp2MW05RktuQWk3eTUyYXFyK09pTFZ5SHI3d01SMjNscUVia0ZTeFkzVkNROEYwb2UzaThlelBDNzNmSnk2a0Y5Zk5OYlZxYmJoWjFuTTRaVmtHMTNCWFlZdVc2emJ5YUNxeU5xaHlHZWozUVlFcitEVkRvNWlUVWZpWXBhTUJQOVowdG9sNHBjNk5OZlAwWkVzbTllRllHWDVNWTFEQWxQRjRWbHpiYzBZN1RzbEx3QmswbUZUd1hSVFBLeTNYeHBMWmc0WklXTXo5dTYrcThmRExXVzMyRFBHNzdzYzJJemMxVzZqaHREdkdTWTh0bkdySWNZSktmVmFQbUxESzVJNEJYNTdpYVJqSmU2cDRQdlNVdzBwTlg1K2d4c0dMMmh3aHJaMWZRYXlDeGlYUS9PdG5FQ1V4TTBxSkQxa2poYVhEYmRTUUhNRTVOZlNpSmNjR2NGOVNBUjg3dHdSRzh0Sm9CQUI2WVFGRFRRVUpnUWZ5cUgycnQwcU4vZUtNQnJ0MDFhNFFJSDBwcjNvRmdlZzgxVndiWlE0NEJPZEhaL3dSVG1zYjFOM2plWGdhQ0dyUlMvSEw0cEpXdmovVzhEQk5FWTU4azdJS0M0SWxld1pPV1BQY3J1RmRYNDNRcERnN21xQ0dYSkZad1ptdnFaaUZ4d01YUFMrSVdtTFl0bGVHSEZWU1laVUIzNEl0TVo5REwrNy9MZGQ0S0ROalNkNTNjM1JDNElxd0xuOEswMXlxdnhab0xqYkNzenowQW1BUWxRbVVIMndnQ2VHUzM0WmpiRG9tUHhzNHNkeUlidFAvTTNXZ2F5L3BWUlNud1NTeWs5bUtvaXFkaGxhNlhPc2hyemMyMVREeTFldVUvMzBPaHlwQkhDUTZyWnZLRVg0cEtWMDkycFV5bkZadldObUNKZjgzWnNZckl4NTVBNlhkWnV6NGNDaFBTd0hlOGNxbVRlWFBWQmVSSTVaTXFHTXVuUktQV2xlbUE5bUQrM3FESHozbm5yVDFSZGFVbmNrVTBBbktnbGowNGIrakJZWUdWNDBLWkorczQvZEsxNytZRDA3N1hBcGpCRnhZMlM0WkRkZm0zOXYwRkJ6NTd3N0NrRVV6eStVRzNqMU9KaE5FL2kya1pqM0ZsQ2U1VU12MkFVSi81c0dKbnoyN3FUakp2d1ZzVU4vMzJnQnB0dUxqeFhTMVVVbFNTajMxYVhCbVQvMjZhMUc2MWRuUm92c1pRUnFlTWlQMVZuZWhKZGlkS3U5c0kyRlBGRktDVElld24yZC9rM3o3OVJ3YURhMDBJVXdyUU5KbmQ2dHZtZk92eENHZ3M4NzYrYWo5QnNlZzNtZ1ZxQ3Vwb3d6cEN0OGJuRmdUTWs0NEpicW8zQVdwams5NlcwcU5sQjMxZCt4YW1oU3B3V041Mk54ZXlySnllVnA4YVlCeG5EVkczZkE5UVNoVjloTW8xRHpwS3JURjQ4VEZtMEN2a2FuYXlISkZ2VThBLzNLalF3cEEzSXloU2hNUStLZVAzN0p2S09Rb2hQcmxhKzBQNi93S3pEUWUwanpEWTBjVVJxQVBlZms0WC9kWXRnb2VtemVrK0xxVEdob1UzRkRkODQydzYySGg1Y3dTMmlOdzV4RUw2UXdVODFwMi8ycTA1RWJJOTliaTd5dHVyYlp1VzJjS0tuUWxqU01tZUMxT0tyR29VdVhTRWQydTZQZHhTTHpWOURjV0dWK0xnd2Z1aFYzTXBySk9mTHFJODhtbGtjZE9MaHowZWdSUW9XYVhvYUZnbFJMWE5JaDdCMDFVYVcveTZ1eDNvN2pEOGpDdG85RFRuZkE4aFdvR3ByTiswYVVqV0F5cG5YVXRJWGRwbUVhanc5MkptQlBYNXliRElxOXBHZ2VBK3VTc0MxQllpQmkwTkZBSnQ4bmF2NTVKMlNVUnJvRytGdHRXYWRuQzJlMWowbzQyQ0pndEYrVnB5SkZ4OGlTRHgwNmM4VFpkSElpYlRLRTBXWXp6ampOSjBNRDRiWmtHbGZKVlN3czhUanp6ZXdmMkNaZXFXT3JxaDNzKzdEWjdCRWl4VlloeDkxWTNGR0dvODJZN09DbU5nYUZ3eU1Wd1Q4WDFtRjZqWTBua0pCWFdaVFN0cEdBMGJJdUZYZnczSmZsSWdKODlJNXFTdHpOTzBPMTV0TUxkZDlXZDlWRW11MFR3WmppNzgxRE95WkN2bG1STmNjcFowN0wxOElnY29lSlNSZ3hZcFlpZDJzNnFhNTBYQSt2K2l1YVVTQ1duZ0syOGlmQU00ekhrOVIrZDRzd2U0QnpCUWs1NkNBaEdRdDRjQjZhVi9mNloxVWtUUm9JTGV3NlhDbFJpY0YxSDJTRnhpaDl2SCs2M0dDcDZySGx5REhDZU40bFY1alNnUC8zblg1cDdXUncrTTk5MzhiWGtyMVNDZ3F1Qitxa2FZQ2wzdHNUdjRQMk93YittcDVSajNpMStmOEhVSVRRVG5MbG9WWHFEZWozRFIrMmw2TU1LNWorWnJ6WkN3SnVTYThxa1NHTlNaWlAwTHJSaEJndkxIdnR3cldVNmZBVDlSRFNuUXh3MXhJVmhTUXVSYlNJb0hHc1RGTTBFekpGZ1FRd0NLU0NPTEtUaHBEam9ZekpHQ1NUTWJsb2tsenk5THhndUxXeGRYTEpjVEJrTWJxSFA4ZzdTeXY4TGxyRzBtbUVjMjUwd1lOUmMrekxNdTIrTUpVREx2dVB6TkF3T1JnN0JDVnlMTnRLTzVXUit6d2RnZVNkU1Bja201VThIelN5eXVDTEluTlhpY1IvK0V6NmtYTGhwemREMVFCK2dBYk9YcGxCc2JKcGVTUExDNjhIeTQ4M00xZkR5Y0c2OXE2QUlHWXlaUUhRandkdE5Zak5aRGZ2RkdaUlRoZnNobFpDaFZ2YTA1Q1hWUWtXVkhjb2lrM1pIMnlhSHJQMkIvREVaUjBXNER1aCticHVqTTZnbEpxbklKVjlNZDZkdGZ2UnpiQWZ1UkF1Y1hiTWVCN0V5UWRYMlVDSkpBbnYwdll1dndnbVpvdE1RK1VORUNlc01adjJDWDNDYWZyTVRveVBiTHhxc01UcFdnc0thWEJhS3N2TmdiemhlUzVpVHBKSXdXNlczTE0vWWpxN25pMXY3cjNMNlgwR1lDWUIvNTZwaUZ5b2ZhRXl4cnd3eTFlREI2MEo2dEhmaWJZQlkvZ0w5azFoZFM2dW5RcndBM0JxTDBJNTJRRCtKRG5QQUh1Mk1hcFVBa2RsS3RJR2JtZlFxQzN4dFMvbS9JamNPVHBjY3g2a3RpeU9lQVJZRzJDRjVKUThlQmtQbVpOdm9BMmtZNmk3bVJYMUVqeVhTWEZqby9xTCtqRDdyem8wY2x6MDljQVNBdUlsNGdPWGxTaGFCbUZoRXNRcTVFcWppaFpxQ09yUitQWXpQRTBWOHVWRmw0TERGYmgrQVVIZmt1bElpRXg5QlZQdUwyTm9ScVhoYWJWNWRQMnBQcThQYUhwUTNzRm5IcS9xWU1hQjF2U1drUGVEbnpwMERhVWxnSXc1OWRiT3FKK1k1L3lNd3UzL1JMNGJpR2k3UHZuK1JNeWd4MytkMXV0VURvRGFKZU1ucW51U0puSVVjNmkxLzZOT1ZOWXAvWFF5eFZWRTZJMlZJbUlnWVJhd1ZMSHJtMmZwSU4zZkg0QUk2QSszKzZ4NmduNkFNTEZlTnNON1V1ZVFHZEJHOE9vemVaNFR2UmdmeFYvMkxJVXU3RzR4OHl6Q1ZVa2dkZ1VPV3poNXZXN1RHeXpBWTE3NzA1VzVtMDBZMWMvZFRMdFBwNW5yVDEyQmo5M0RwM3VuUjBuSmhXaWw3OGpCTWVuMlU4MFA1VCsrOTRxM3ErOVdDZVZYSnc3RXVOZjlDUTcrdzdHMnBJMU9NcWlBSUhwZEJVOVpyQlEzRkM4OWs4OVlMRmxOQkVkSWtMajc3VThOSnh4QWNKR3ZhSXlmVTJRSzJnNk1BTENqQnZuK2poYlM3RmlkRHArbGZiUXdJUENmaVBZU29yZVdnc3dHNEN2R2hTQ0p3NDh0L1JtRFJPU0hsSGE5M0pLMTgwUTkzTCtiZW1KVU51MUpOMkF6RldmNWJENFl0cll4aEJraGE3Rm8wRXRFSkt0N3Fqcm1NbWcrWW52d3FkM0Q0bFdjTzI3eUpkemNXN3Z0eHJVeEJxaFh6cklIdVo1YlhqaU5nTWJFRlZGVmxNaTFpRGo3ZE1WMEdLYkwrQnQ4VXVFSS9kNy9iMW8zUDdPbFo1MEcxZWowYXpEZ3hrV25WM1grNHFueVk1Tld5blhrM21jdTgwMjlkVlMzRFkrOWY0T1lEOUVzTXdSbjc3TkZiMVNSS2NIdEZXeVBYMURYL0FTU05vMlN1N29YYVdCdkI5TC90UmhXdm42WGQ1anAyQ1Q3YkZSdzFpY05jSVdmeWFsbWZVOWY5T1NMNTlsSkhJcm5NSHEyTjVjMU9RcCtOeTBoMmRJSTB2NHhlMEZwZlBIc1VFN0pvZmV1cmxLTG5SWktZZjlUMkcrUDU0YklncTgwbWQ0QkYwdUdZVUE4S2Z2ODdNWG5yZFV6MEora25GUU56RXNNekpCVENuZFhLaUwzbUFMTVg3WHZCZzdUVFNvMnhHeTVoTzF1ZGhINlJLcTRYRC9OcEVlTFlRVkdMRmpoL016bEFaK1BwZ2JzaDJEVXdOSW9GTHhhL1hCUlU5ZG9wUDU3d084QVhsQ2hVTjRUQTRwVXVSRzhRZm43TlNQdWUweGhuVlpPc0V1N0x2ZVpCL0txOWFFUjV1UktzeXMvTlFnOStSR2RabXdEdHlRWE9BRTFaOXZWRkU4Z25lKzNiRGppb2k2bW12RFRqMFpDblUrenhadEovMWlKbU16S1pYYm1SdmUzeW1YdklFdld3RGlMakw3VXdwbGtsczl6TUhRbFJDTFgzYzJxYk16V2J0T3pRNzF3ZlRzWE5hWEhmR1BBRkZCZ200Z2hwZXdjV2pjc2FxL0grZzhGK3ZpaXR4YTlBSjRCR1hrdWJDZlY0dlZoYmk3VmFnWHBSWUVpV3R6aFZKQTlySHVZU1VlMnBIMGNVZ0dhc3BTZDNVNGJDQVlzMkdwb0FXcFcwYzlHQWZ6YW4vandsUVQ4TmpDczExWmhpUndPN3J4SS9QNzJhRlFXd2luY1hJVzB2eG4wSkxCbytCY0c4SC91MWllSnl3ckV1RHU2bXBkMmpUTmU2QWhjelU1ZGE3d2U1T0xSdUdkUnZ2UjV6S0krWERRVU52aFhRN1ZGQ1RkcXoyd09EQ0FRSUlwL29HbFVyd1ZRKzl2ZTIrSDVOK1hNQ0tjcVhHWXVuOEdWWCs1anlIVkQrKzdlK2R5YjdkSUpROTJPM2hGT0dKZGJINzloMERBcWVVcjhJVEtaNkpqNktYVU5ONlN5UHNuNTJPb2c1bEh6dkM5RVBwOS9RKzhrUG02cHFTcHhhUEd0R1lhTDdNMEpBb3BvSFI2QmhoRWlLd1NjRnVMcTY4UDJmZjNzNitabUlXcEdpUUpEdHpJMHYvU0JUNnVMM1pTbXVtSkplVmhvRU1VeVJYS3BUQUhmenY1NS9vQXNEMFhzR212YUdKT0xLa2RzWERiWmZPWXBuR0FHdEYzMWtMUDhPUkdiQmJvOXFhdjNVNXVsbWZhOGliWGRKdmE2NHlmaFNqdG85Y1RPSlRvNUR6L3FZWFBVelJxWDQvZUlkejlHa3p5ZEVPbjBmbTRxNWhWY3pGT2N2Zm1lUUY3TFJtYzdlSDhReENralF4Nk9YdmpNbENRVGdKdXBKejR0WHA4VUZOb0NCYnVVeElOanh5N1h3MWJzVXpJeTNNcUlHWGtFcGlLNmZsa1dpQVRiWWRVb1Q2alU0TFlUcGpXd2FianpwS0dFK2o3TlVDWWFpOTM2c0JrYkJmejVJRFU5VUUzZUdaN040NFNOVUlYeFUrb01WZkUwZHMxSmZWakxtdytpMkR1aDdGYnV2NHJSdmpDSXVqTVFVb3R2TGg3QXZ6WllHR2NucVpWeStwazdZdTlVK0hnbUxyc0Zkdmx3eGcvdU5zS0k5NG1KaHYyOVpHa0xUdXRyWGsyYktoMGkwUnpCSmZyVzR0VXRBSnFkNWo3cnoyc3h1andVek83SjZRTE5oWm8vSGpRdUZoQUgyQnhsUGRJakhaL04rRlBIb2dmN1M4K0xUL1loay9wTERweGhaWUQ3QXJPYUdBdzludDJmWjAzSzlrU0FtQkQxRDF1dHF1SGg0NWtzWWZSK21CL3N1eFJXN2N1bGV4VjhDeUFXblY2VnB2alhNRWF6WGQ2NmUxNk1xZlRpQ3ZSUlVMUHBrbndONXRLU0E4VjZabnlCMGEzdUVEUHNJUXhkYlI2ZG9sdkhPRi9mU2JLQjBVUHV6eHQxbDdTUkRNOWpIbFdaQk1RMGhRQVhCWDBLRlFaczBMRGltMW14K2tnR0Nnc0lwUTh4cGM2VHZ3NHB2YjRFNVE5dklSQ0ZRNUNmbTR2MklHR2NsbzUrb1hubzhJMjZkWW9aTTRtVXU0dlV1blR0bXJNNEZMbW1PejM0dlZGNUpHOFUrVi9zcGM4SUxyUlJtazJDdVIvNEoyTHBUMU5ia2lyUUlCZWgzYWY1NGJRRkJuNVc5Z0pDaFkrTGlJbWdNS1J2dUR2M3crK1kvVE41alFBcWQ5aCtGTHNaejZ5NE1lWm5vaFhiZDBhNW4zMldNb3ZlVkh5WG5KTnZEb3VYZm91ZjJUK1JyMkp1RHQ2TGIxOS8wNEhHc2ZjQUFMODVoY3BqTGRWTmhSYTNXMlNhWjliam84aWFXU2lpYU54MnVnMGFNWnFGeE9RMEczTURweGRSblJmSU4xNG54RmowdUorWmpNRWw4Y28rVTJiVUE1bGxUT1pOa2lXRXV4MmVoTndQUys0ejlFYjhsZEN2YWJMQ2FlcmVOUkJCb1ljaEt6WmZGREtSb2lvNzY1cTV4eWNBbjA4R0pqUk8xeC84ZGFkRyt3dXBBb2tMVTNZd1RDS1pNakNHekpJSUdqOEFoR0NDTURseHhxUXl5azhuZTBFRWxlRkNxK0JYU3BzWHdoODd1MS9ydHNEVXFnV1V1S1NYenJsV3JkOTYzMS9xcVVucjlKaTBkeHNSVWxMY3lrNUJ2ZkIwa2RqRjBra2lNOEFmejF3Z21mTCtNSElndGNPazR1V1JubS9PdzRNSm1lVGtDTFJiSThWVWZWT1EyZDlPZEx0MGdZMXVKSEVNOUlDK2pwR3hERTM0aGYwaHdHbVcvWjR1YjRqNWJBMG9KakpXTklQbCtqMmo2VXBTZVNHbUZiQlorNnV4VWNxYTdKQm5lUmJQTzVSTWdZRWhGTGFzOWdaWkJsbit3VlVUdGJFRU1CVi91dVpZMHVLQ3RkZjNoWFVHeFgveDhZVm5SREQ1N2lqNFlSVTNKbFhWemVFd2J5bm41NXVuRHZ2Y1BzVkw1UXBaMWlZMXQwQmpqTzIzRnFxdy9nNmRVelNMdUc0RndkM216bDdwR0VINGkyNXZaNkI0NjlaeEdRSnNiQzdrTXA3cDlKcWpmNGNWazhBTmFsQ2RvZGFwcDV1L2gvSHZoUXVPQnNLMGZ1am84TnB3cEpvZ1U4dkdtQ0Y2cnNUMUxOSjkrUFNQOElSWTdTMnkxckhweXZlYzhrQnRNTzFyNmozYTVISmF5c0xqL2ZDVzIrVXlVbjBaRTFsUFQvbjBnL1FDSDVmZDQ3cHppYTV4bEUxNzBuek5ydFo0ZjFrbnBsU2c4WXBka2RKbkhxeUhZUlI1VUI4MkhMRFBZN2hUWjB0cDBDN2E4RHRKRm9mb1lRMCszZmhDRlpSWTMwTVRWeG5ZYXRtZ2gra2JyclZkV21adko3QWJOeHF2NWx4ckl0Vm85azZWbllEWHdGbCtTc1J5RWo2OUUwTG1hY2s3emFYVmZrNEVnWTFoTnJCMWYvd0NZbm5RdzZ1anpmVFY5NHVpeDlXUmY1M2Qxc0JFNW9qcWNNSi9xeWZVaGpLMUdiT29wdXJKdmhLNG5kNm1CVEQxTjdVdWgram11MFlobCtndHJsRHl0Q3Zkb0JXamRqbUFzU2x0cWlFanNaQld0OVRHLzJSRzlhQ25xdVB4aHc0WXBxWE5NZm03TlZ5dk82UTR4cjhDd0FuWXR4RnRidGd5TDhxQlJ1TnkrbjBxSXBDdjZidVJDRkxMaHhaT2IxUERHUlB4SXdXeWVENTdkNEtZQzN3eHlsMG5ycS9KcUU0MkdBY3dkTVBpZ0o2VDkwMW1qTVNlYW9QdUZUdjNZWCtNMXBKdnBjU3RWMXpjVVFDQytjVVkrV1FPTkxUNWREZjNMNTgxYmtMVGJKMlJDbFF2TkU5MWlvREhPbkN1dDhiUzZINGdKT0VkeUxpNi9nUUxhdU5POWgzYWpGUk4xVTQ0UlJVc21SSmEwODJMTHd3c3JkU08veTVPY0tCN2JRT3lOcGZLUHNVQlZUVE92dEF4MTVwaE9vRVhHeUNndk51K2lCNnlHeTdZczZWUW1wUGRLRDhjeGY2QmU0aUZtOWNWRmN6MHQwaGtTRVp3ZU96UVVuTFVoQTBqbGtud3hqQVprbGVvWm14VGUyTUgxVkl0U1VacExScnY1YmYydEY1VmNIVHo2UDZsQ2ZsMHM4Q2xZTjdrK2RPVGUxOGhseG1ib1lMNkRaeU43L3hNNGNlenh4Y3V6M1IyblFlRk5wMThVRmVyaEhKTW05N1lqRHEwaWY1N1Yvd2ZxaVZnaWdPTHV4OTZVL2FCNFA1aTE4RytKZldaclFqL1doRTZEa2podzhGdHRINmJKMHorQlNLY05ZYkFTZ1pjcHR4ZFMwMjN6dUZFUk5EcHkyWmZYTm1zVVZZc0FIakFVTWU3U25BcDg4UVUwYkRkaGhkRFZJNHJrWlZGV2ZEVldnZFY3dTI0NnlrVzVUSUJZVlRYWnJ1aEFaRCtWdThNRGhpS0R3Z1JUeGdYTGpjR2pLYjlNRXlmK05CNFY5aWsxSGw4VWNZTjhmbG52dTROM3JHL3U1bVpySnMxdTBoTVVlK1loc2hmTFNlWDN4Y01UZmFOMDBNS2oxMnU4aVRkY0ZlN1NBNDY1ZXo4aGNkYnBkSEx5aWNPaEdLSk4wdUQwVkNzaXVhYWdKa3RKTVFkSHJxeW5QK3g5Wmx5R0dyUVBJeW16ZHk0ZGdrZXplWU9EdWMya3ZYYlIxUUhtZ2VvamZ3Qm1JNUI4STM4cS9JVVU1RXJ1VVdiYmU3TDdmc3ZqQ3RCNkJpTVdTaTc3OHoyYmluSkdZY3FjdWd0aWhvV2JQeTdLSU50K2VWYWZkb0U4cXBIMzBmWkZEcDBRcXhuMWpDUFVLcmlpOGpNdVE4dURVejBieDJOdHVDeHY4ZGl1RFJsWDdWb1VPd0FNbTBROUdmSHBzeTZ5Qy9WSWpNSi91c1E2eGFoRWNTMW4yU3RvOGRrYUV5N05IdFBlS0drN1kyYmFjNEZkcytIUjlCTTU0WVpuZ2RTcWxJYVRIdVFwU3p5ZDRDckVoSkpxSkhhbjV3VGNwZElvZ0IwV2ZxbjJVbWQzRjdpQXJEblJFLzZNWmg1YlAxVVJ1OTJERlRHc1RmRU9YNGNyOFRqb05Tc1dGSkljUTdtOXIzY00rUEV0QjZ5MEUxTVJjK0pjc0d5OEJUSUN6a0REdmRtZ1ZXUTkzNjFrQm1Cd0RyRnRmTzlHSFJ6elR3emFQSzB1YXBnQVpVV2RUdTZwT094MGFPVThSYWh0WHhROFN6UktRUVNuYU1LZVUrTXQzRytDYVh5MzZWb3I0bE05eEVWWm5mTER1aU95RG4zSmZEc0hkWHVvTFlLeTduamNzU1IyZnlTRGNaVU92USt3cWRGODBSV1BneC9VUnZRMDhKSk9hdDNpVXlpS05USXRqaU1SeXNMK2Z4bFJBTzRpc2JaVW1TVkc5T3RPTS85a2FhZTliTDdwTjBiTGYvSkpMamhkemVnN1RSaVNuREd2U2VmSXc1T2tGSy9vTU9uR2lDeDQzcW5rTVJLZ0c4cGI4ZXVFK3dvby9ncWFTc0xVVGErY29RSlB6cUtzOTNvZDZNTzAyNndiWlV2TFhXbHE0QUJQZDBmT2pFUXdrYWZtSTA5Q3o0S2lXNDhBSURhOFpQNDBVUDkzd3JIWWZ5U1VlYTNHSkppWEFJNmdDd3Y4TUhGUUhzeXZLSjJSc29iYVFjK3hWdDJ6L0dxakpXVzFROGUySm9CbVRyd3M1UmJnOHJoT2pIa0R4V2JPamlWb0dDSitaYjlLKy91amhRNGdRWUIzWkxRMmJUK1dJdUJxOHlmVURKeVl0cDZGQkMzUW5nVFdnQU9rNnBtaHFqYVpSeTliTGJiUEw5U1FocjdqYlZEZFR1bGRUU2c5cVhzeHJHL1VwZy9WQ2pXelVuV3d3YXN1THlETnVyT3QzV05ySUY1M1EzT2k2NnJuSFVqcmYyMVE3UGNXOC9RZGc2eWtrVDhwb0VWYTBIZGRUdnQyZVZPZDdaU1BGVWx5VXZyK2NrM3VPTUg0TFdHNWwyRTdVamhtb3BVME5BMXVoT1prN0hubXZ4bHdSbTlNd1dEa2JjU0RBT3ZaaVNIZmcwcFNLY0hLeElGd2lkZ2hFWjVEa1dCOU80d3FsTDNlakZ5TGNNL3FqMitHSzVkK29XaEJGWUdwYXlaQ1dpcW1KbktRQkNBMXJoS2ROc1Fub2lPQVRHR2tQdjk0K2dlc3ZMM2JId2hNM3JJc3JaeXpGd2k1RG95WEYzU0RUSktXRGptR0hzYXFUM2s3dkNzSm4vSGRZZm1yeG14SC9Gc0hSRjBJVG40N3ZtM0Z5V0I3RTVrMXV4MXFibmpMU0x1QTQwOXFQR0kxNnNxSmRBZWdrMU13QklRSHlGb0RFMGlBY0hJRk9tc0grSklkdHE2dWtmUTdza1JCNFBuZHVsQUdIWktTQWF0akloYkZ2R29xeGUyMnhINlNVMWNmZThXY2Vac2RzaFhscTJQbnp2UXBGbExCRUdYdnJSalFOMjR6blRjWnhSQ243elByNjlseFdUUEpRaFNkbDNTNDdBdzJTdmhWbzAwK3hQT3g2MUczNUxmazlBaWdUR01IQzJuV1JtTDdESnpTbmR0cG9NKzZlMkxFUUhrbzBTUzhYTEp4VkVKb2VEWW4wT0htakdLSzNrdGtIRitHclJXQWdmNHZDbE1HQ09OaWpMM1R1ZXExaGptQWR6WlJ6cFlaeVpiODk3NGFRa05DNWI3cVJvRWM0b2puSktCblBaMVl0ODd0ZGJrb1BYUm5XaEcxRWtsWGc4MHl1L2ZNL05TbHlIY2owdzVXQWZvelU4K2NTZHduSFNNUURDQmJqMGRwc2VDUXpzYmFBTXRINWZXelo4YWNVM2xSWDZUUWljUE1uZFczUFRLWHBvTWdJYk83Znl2d2FCU0x1OTVjZkhWQWovdHptSVd2YTJKd1dYK082Sm9Bd2VJeExBZTVxOGJqYnc0eGNkdWdVZzByMFdYamRGWVFra1RQYi9jc0FHZ1p6NHVsS09Pb21vRXhBS2QvVFd1OVI4aFg0VVQ4N2tzb2VDMkFtMVVnSGZqOE00N3JXNUZEY0hMaHFqaUdydTBlOGVuQmpRTWdtOWJaYmFtYVNrRkZDMXBIais3S3ZNcHpNS1QraUV1YUZiQzd5eS9IY0NzL0QvVjRHcHUyT3FMcWtYbTR6aVJWQ3BNTFNoRVpyeklESTlVcHB4RDc5TjY3MkxKWjBURWlUZmJNYnpKRmNWTDhWRnlhVHczOTVKbFV1Y1htaTA3TnF5OVI4RzQ1ZTBwMHA2a1JZYzdJRExxSjM1OWxzcTY4U1l6aDRsbW51N2p0bFJkdCtFdTF1VWZsYVo2by9ydmE2YlRiNTBWT1JqVGtMWStCUThVSENSSEdRUDRvTDNiY3FyeG9vTEdQWFRsY2l3SXA5RXNvd3FxYUM2SHJIWjJCRXY0RGZTZ2pMNnhEZEduQ2pjWDF2eS9hRFFvSThhejYvUmJpWWpsWE9HTDVXaTR3aGwxdk4yYUErUHdqNlBqWFRZSXhyUDZIRnBxYkRob2RhM3dGQWJqOE00ZEVxakRmVzM4ckdhRitkZFN5T2FrKzJxcjdMdWYrWFE2N0taK3pOWVZnUHRUa1BKdElrdGg0ZkNqL2JVWTJqV2UrNmNpbGF1c0JkQXFES2pkMFp6eW1kRG92cjhLUUIySXlYSEQ3WE1JWlI5OW9kRlI3TFpZRWJJejRxanlGTjNRSTNvblB4SlFsa0pxSXdacG9OeStkYkhCQ0tTbWNNVU05eHpjR3kxS3ZWS0M1ditEMmQ1Q2VkRE4wbFZIV2xYM0daNGE1VmJJR1FibHdyM0ZEV3J4RG83MDB5OUNCM3pyUFRQeCs1S0JVNGJVbmJsUWY1dnBBb0ptd0dtck1QN21aeTdMRnFyRUw4c1h6ZmhGOVR0QnY0V2NubjNBN0dJVVE5cHVNRFVWLy8xdFRpRzMzbEF3bmZTVGl6UFRubUFMcEw5VzBia2lWc2d6YlB2TUhabU84d2k3ZnhKM2t3eVhZRzNlTWhUcnROUFpwSG9lUisxMmM5YVRiTVBKd3NBOFRjVms0RnQ3TUZIRDNoWHpDZVFnK20za1p0VzNRUGQza1dndmlzd2lMdmEwak1hOENVUTlqMmRFRUtUOC9MWm9WclFWeXA0N0R1SDE2T1g0MGZiQWVYYW5GTDFTUFpPUEpCS0hkNWFnNlpHM0NjZHROMVZLaDdrSWFUTVNvaDB3QVkzUWMwTU1zazdBdlVEcDgzbjMvWDNOS25nUFRoYVFldGtHRGNPekphMHFiUHNpUXdiaDY5V3RmL0luM0NpVEdSWmwzZndLYW1nOC9aRGRFQk1lUDM2em81ZGc2OWxlSFZ6U2ZLMVpTYi80T1dlanJPYjVMd1NtZXoyUW9UMmNGVHN0VW1yYmthdUY5RVQ2ODUzT0FqRzA5dVJiUzhNU0k2ZVN2d1dtcDVwKzJPbkc4UmsxdlowZnF6QVQ5RjRPdXBlRmF4cGk5bERTa0ptU1VqTkRKOXJmSnRDOXdLV1l4ZVNreEV4eCs0ajllZVpXTkw5d1VqdmdlZHBMaXQ0TndCRFVyMjBFOS9lMm9pVW9VWm5VNzBnNEhNdEFRRHFsRFI2QXN5cjZybm5Ra05odVBoTFlwSC82M1VFaTR3OFRGUHUrQVZabG0rdXFweFJzaXJCTlgzWFRNTE9hL1pVMkRLV2dYbkZaeEl5R3I2SjQ3YU5SRFQwdkR0ZVk3S1lxaFZrdzh2eCs4S2VITUIzcDd5cDkwandXanFnNjJ2NVd3eEg5TUluOGxpbkNhUEU4bTRJS3VDSE1acTUzbFI4RWV6Qmt0VWR0QlhpSTNUTXkvUVZBVjl5UjVvUzQ1MWVEUDRNVERYeWVJRGMxNTlQdUVia2E0aHBOTVRLb3lpRnY4dnhUbWRzdVB0ZUxGdlNYeXd2NXpWL3V0cjNjaGdRSjlnK29SbGpGVjlxdlA1bHRmaElrMngzNk5QNk1yUFg3enkwQ1RKaFdXMHo2RnM4anBXK1RpVGU2cWFHVU9WVC8wNENRc0F3cGtTU0FYNDl6TnROMFlVd016bTl4bUpEZDMvcjBreWdmeUZkakJOTlVla3FQam1HUEhFQ2E0aFdaYnlQTzJPTWp4eDNDN0ZNZC9sT29nKzcwcjI0UGRQSktvZWZrSm1iSWY5Mm11d2JjdktVMDlxOWlzby9lSFJRcGZ1OUlxVndFNkZWVjdCeWJnQVU3ZWpURjRXbGh2K1dBTHh5ZGd0M25xaHNidElZNCtEWTJNdlljN3FveVpqOW5wcS9MUmRod3F0clEyREhFRVBxUmdERTl6cnZYNDRvUTlwYkFsQ0V6SVNEemdXL2ttMXpyYkJpYW9pK3FMUUhKaVF0UTZrZkd4ZWFPclJVREZwcVVWdWtkcXl1WTN6V1lvUDdYeXpGZ2RRUiswV2JnVXhrZGpQMHpwWEdQbEd6dmZtais0L0ZmVjRtNWNtd0M0OXFNeGErbFpYNDJEMjE1TStaVFpzS0JBMjBkQUZIWXVWMVEzUEZ5cTZDM0JWaGhLT0RmTzNEb01mY1dWSTlrN0loZitNanlwSUhpWFk4d0t5ZnJLZCtjM00yU1piNEpEY3BFQkxyQmV4eTlFSVNweHo3STdEWHZvYlBEelNWVVEwSXQrcmRqeEpKSGUxelNSd0xIN09WWk9MZ2FIaWpyTWtlY01ZYzZ2bkhBcTU1eC9MZ2s5NzJVQWtoVnorbFJMT3plbDdodDAwZW5nUVcwanp0Njh5RU11ZGNsK1I4bHczM09taU1XMGlsSUcxRXJJTnNJUW12bjRDREdrNkdOR3k3dFA5K0F3aWVyN3B2VlNGeld6NUZBa0RVQlpOQ1E1eThVaTZKUHZjNGJvR0dMWGhybm5QZHp3SXdrYnlzblJOMnZna29BZWtERXo4UENkRjJTVUoyaGc1ZitBVEk4eWZBRnYzYWlMK0xpU29hRCtnaVVyV3JGVVdVNjRpaDlwamV5aVlIS2hnaWZwVDFSdFRESjR3bjBaSFRJQzM1QVd0eDVLb0krVmtzaVU1RHVudHJKdWtGTlQ3d1M4cDFhY29aemlkYWgyNVQ4SzRKbzN3VXhaMFprWnpYUXpoTmM4bTBhSFJSY0h1Y1B5YnZUQk1pbWZRQ1RIZngra09NVWsyQllaelVXWmkvbUtKWHBIRXB6V2wrVnZNaUZ2TERERC9tT3JqMVBjelI1WER0ZnRoM3h0eTdzbU1nWEQ5aWFVN21CUGpYYlE0aCtjUXdKZi9RUGlzak9iVVoydXlaNi9UU0R2bFJ0LzZ2S0NJQ3R6ZmlCTXFRNmtKK3dxamhuTENvSXdqa3VYdEwzTXg4QnZTSVdXeWVwOFdrZzRUdjltUjhwaE04bkNOWWhnWERiZlJFMGhaSVpZS2F1UGdlMlNNTzd5bVZBOFRoUVBPdDRwM3RqVlI1SjVIOUQxczAvU2xRTCt1ZzdFVUduRkNld0Rhc2o4eXlYbEx3WDNPNSsrcXJDU0s5alRsLzRhTEttdG4zQW9uVkh4QTl2Z25VeElWT2RqWkZNZjF2c2p4SUhKMysvZlBQWVZSVDZ6TS9Bc1lLRll5N3RFZXJ6V1BXOXpOVFVFWW42WHJUM2l0RTlkMEFkY0p4dW5HRkZSOGxGZ0NLYkZBYjlYTnlqcDVCa2xMZkdSQlVwOFYyeW85b3dhcWx3QzJhQmRjVHNJanJXTFVzdmFrOUx0YzFwc3FzOE8rY0s5YVZMcVc0OHc0T21Da0NOdDFxc3NPK0J1bWhlcW1lTW1SL2puVnhjdXF4a3oySWdoRk1uUW1OSmJtTlpuVFdyQmF5YWwzWHp0KzdhWUVHcHgrTFFUVzJkTm1GZDhOUVZYd0QwTWZUbURwYm1Xc2VKWndBMHhHRTFYODRLVzRWcGMzYmFKbkVlR2djditsWHBGZzZSMnFGS0pMQlR1bzdoTEJhUWR0TXNZemxraVU1QkJWN01sTHlMeTE0VndONWdhbW41UnBTWWRud1dGdk5YdGpQQmgyOXR6SXNtZGxZTHpFNDYwTzhCbmxHdmRsYU5uT3BKVUtLTUxTT2JaUjlsRnZFTUxZVXB6WTVnbFc4V3g5V2lYQUR1aFhFbittNVJOcklaRDNBVkF2aWVaWlFJVXhOWGduNVdTQ2ZDbDdXL3poNHRlRFZ1Q2NiREVqQWJZQ2Y4eU8rNGR1VnRrb2hsTk9XNU5JeWZnQzJPZGUrQzFpSXZnY0p2QlRiZ0hPMDF4L2pJejhROFN3alpnQ1hRUDZoMnlHRjRLN1lOWDI3aCt4c2ZUZGc2OTJ4ZENrbnRrcnEvM1VtVlY2RWNXMk1OQWhVZEcyRDhNZVZhNUwyVGVsdFphL3lXN05yQ3JmVGx3VWtDOHE0YjhzSXczeHMxN3FNd2l1aktIT25rRHFNdGhRT2V5RGRWVDNLQk95UTBZUXhLa2pRalcwOUVraFVBb0NMcFNuejBoRGtFVmVQODgxU1pWMGZHMXVKckNXb2ZZSkpvbkIxd0lsUzN0L2VZUGhsTmduQVRrelBWL05sNnRYREpSanRFNGIwckgzQUk3eGVUcHBwaHZuMFVJWmJpTDB2ZWJXVlFrSW5adGxFMHdPdGFmWUkraGMvY0ZwcGF1SjFPVTlFUnM0bTZPNUl5VUdzSEdnRmhyS1gvRGoxYytKZWVwQkxJOEdWYmxjQnVmZ2NQYXh2WW9aWFVMbTkraFQxUXVxaXo3Sk9LUUEvQXZZSk0yYytGQ1ZaN0p2NXhrc2pqMkpOMmRpa1VKNWZJY3hRZm1pNnRzMHdMTGlucFdwZndidkZGRUpjU3B2enBoSmtqQXdreGUva1U4a3FYZ2RieEVDRmdQajhjbGJOdTBUTE0wVHZQN3RTVWYxTTN1cUNUSXdkNjk4c1l5dzlxdFJqaHNyWVV1OVBqdzNHR2FVU0tOOTkwQ2cvaWRYQzhpUTNXWnZlM290ZVIzeGJmTWduMzc3bzVJNGpWNVZCVFVoUmgvUFlMbEcybWU4VTgwZ1AwTno2dWxmN3NIbU0zT1ZWQUE3M0todDBYeFQxTjFEN3hKa3NoWW9jeU9IdVNidVg1Q2xsUmhJMS8xM2NXb3BNNHFsYzlCaXl1V2dRbkszZ3VOcE9tUTRtSHJWTWRyTVJnVDdOc2dRSzhnallDcjdTc0ZKeWpoTEhpM09XejJqSUhhRTFTbUNEaVFycSs0eE13S20xd0tQQ05iVy9vRzJEOFVDSit6SnVBTG9kTHRwRG5oRmRPTWxKRktvVHJKQVNkdUZVUHpUNHVlcFI2ZEp6NjVzeTBKbFZLa3h6QnVwemw5TUdUbGZ3czNqMU5uSDhJYmpzaW5XNjhhdlQ4bXMyMTBmU0E2bGFFZjFDSjNENjR5SFh4a2t2d0swRTNvSmdRZzAxbU1YWjVxbUlNSmYzaE5lajRUUHhjSWhXZUN4Vi9NdFc3bTNNNnB1enFqYjJUT01wbll5WkxEa2lLY2hidFpNMjZVWGFObEV6emVObnZzTzFZUEIvcTZWSVFWbUpMYjUzRUNxRmRncUZWVzNUamxKSzREeTBUZkZOMnlLT1hnNFo1dytmZGN3NldYM1FqN0x5am9BcGlIdHY5Y3c5MzRoNzUzaFhFd1V6TldPNmpFSGF2U3JDMElTejd3c054alA3R1F2aGl1cmZrUHNIaHVqNmtPL0lWdmI2SUlZWnkyYS9DZUZIWnhuUEtndWxqWVNUZmRrU1U5UEdoSDdyVCtZcnJ5V2d6N0gwalE0dW5oSmNzM0VLaTYya0g4RkhpSmlZcG9qSWJtSGJjMnNSMCtPVUtmRFBXSVAra3N3eURGcVBiQXVlSUg2UVpZSy9HbGowc0VmbVIvZXVNN3NycmN4RUU4RFhjeHNDUUk5RmpobDUvOGNRRXljTEduTWI1Rk85bndaT2d2WTRRbWRlYXZVQlBLbFVDUlhWd0RYZjdrWUE3N1lyRFE1djl3N2VoVEdOMmNraWM3MTlqeW1CR1ViR2xjMDE0cHFrUjRoV2dnZmlHWVk3aVMzV0FYcU1wUERJZnkzb016cW9kclh1dEg2U0RiRkQ3NDVJb3lkd2xPcWhYc21Ka2hyRHhNcGI1a1V1N0Y1ZTdEaHZ1cWVaTVRoT1V3SnJKT2ZzMWtGSmg5QXQ1S3Q1d1lKUitaZy9TTFNpeEVWUUdnOTVQVE1kaERsWFdkK3N5eUtpbWJpK0E1SEJRVjh3YmVXOUY0MHFrM29oQmlIMVFUS0ZVaGJidmFTU2M0ckxYRnMwSDlxZ0c2elFSeTJYalhSOVI3TkJPbUxldWdOSU1lVnNkWldTZmVlUlV2bnVIcGd5T0k4TVlrNWZ5b2tlVmY3M29ybThhZngxd3o5S0hGSjc3VG9BTEhoN0VrV2tlWUlWOXF3QVcxQ0wrNWp3VllKR1hRV0xBUFVRSDhlVzdhTE1kckNqUDVUVkMxYkJpaUhLY1k5SWg1MzRWLzVtbm4vVTVET3A4THV4VmdyaWFPSGJ5aC93TGVVSkg4N2VBTElMeFdrWHI4L1ZPb3NFY2g5S3JtbmdUa2k5ZzcxQWtvdkVzdTdQMWJnaHNwdlo1bEJ4S3VIUVJLM0wyNnhaZ2UzaXNTSnJsWmpLbkhQNTNwSDRjcWJsV1dpNXE0SGhkT2YyUzB1MnVkdWhVM3hPeE5PMkhRQ1UrTkdxZlZtRTJUajh1TGJwN2Z5TGcwYzV4TTlGRXVqZnM3UUVkYVJUak5hQjZjZC9NekUwR24xRlpYOVBIdUcweFNUN2hScFhxbzExRGZsNkNrQm1LRWpsYzZNeVJxWXhSeUJuTGhJbHBjUTZMa2RMaENDd2JwNkxId01kUmNJNUo1SGVCME02VVBua0xrNDNLbG1ZZnVXQU9UbXprSy9rWFNGYjhKRC9PaGV1REQ1WlBreHhrOUI0NnNibFJYYk5RS0M0YmR2MlhXSkdrcEJ5VWFoNGhlUjZIVW9TN05wVjlGaCt2bUg4WUZPZFlQbXBTTjFHUE1Pc2xBbHdwMmZXczIxcEw1enFIUXpneHVPbnJrVWpoMXNZTzlyMFlHVUtZZElES3hPS1RUVm9vNnZIMm1oT0h0Z0NFbVhMSHlNaE51S3BTMzRRU2M4c1hwaGw2V3Yvb0h5VW43SVl2akQvYmFvdm5QTlRsV0pOK0tEZ3ByZ2Q4RVc4aVVDS1MzN2pmcERwcjUxUWMreEt5RmxOV2tCU1g4dXgyL28zQWtzWTNHOXl6cEhSVk8rTjIwTGJYRys2ODZSUzF1NDBScXJQZzczZ2JCa0hlZlBNRndmclVLdlVMOW9jMS9ZWHp6d2JVL09UeElyYUtCSkRzUGhodm9lem01dFFKaUJVVlBMUXJpS3pjZEpwQWt1Tkd5VzdBMHBQOUtmT2dId0pLR2xxK1BWZ3kzVEFTUHRUQWpjZ0xWaGRIQ3AycEtuSlpTdGdVWHJNQllZYTM5WnlEMXpIUWtLUUo2Z3dSSElldWxGbjZERW9TUUtiM0JXWnBwV0NncWMxZmNhaENrMEZWWTBrRHViNTgyQkVYUHZKTHd2dzRnbE0zUXNiYkR2SVZvMlRUVWFlZFJ6SHcyVEhpZnZRWUxydm1wZU9UVnNGYzRYcGFYSlh4NmZqOUNTU1lzcWRRNzF5aGRPSGQ0b1pGZllKZndmNHNVMysrWTIrZVdwdGhTeTVaUUxMK1BYQ0dNVGhBMm9BZHdReW8zdDRqVk41YmpuejhqUjUxZ0V0VWJ2UTltazdMSFd6dnRVLzgrZHB0b3NRMmNiV3FTOVBVMGxtV0Eya3RReWg2VmZWdTlXM00zUWdETEtNQXozQStQMkZ1am5MN3N3NjB1dnQ0R0JuV2FGSnpnZlByNXdpbk5NVk13ekQ1UGQwZXE1RTZHbUxHWGNHWEE0SUQvYTdmQUpmU0R6cUxVUktET09scVhWUmNob3VkWktYU0pNb2ZqRDkzYkxUVVdmZTVUcDdkc25DRmlYYkEzbWJ2emx4VkVEUm4wQndDZDBNTXU3WThHa3Jzek5STDR5cVR4RFBoWW14Q3BYRlRxOHhNZDhGY3dPSnZneEprNUc5eTVIM2tlbDY4UUNNY1ljWFhQUnlhTHA4cnFYK1IzZFc0RExSeENpVkF0alFrSVEwODdmenBCZnZQOXBBVS9rNzk5MlJUK3Y5T0NIMWFXYXQ4REdwOGo5SURPVFc4Z0V2SGc4RTRHbkgrY3lDeGFFOC9nTjE1cTQxcktpNzZPM2psRDZQMWpUaGljRW5UK3l0Z1l4OGRqWjA3M1dTYXVLN2t0OFR0TEJNTktvR013QWVxV3lkSHg4aUZVaXhvZFFaZ3VmOWpBMU1WS295L3Q5QUJpZzc4YjhLcFZ3YjdETlVqU3h1T0RMZ0dOalA4Tnl5dzNmeVRiQzI0K0lwNXVmUlQrQ2Znb2hYSVRWNXJzQWhvbndQWUpkZFlhcGVMNVptM3Vodyt6ZnhYTUY0eE1MbDhXcmhWM1YzWitFR3RWRDNOeVZ0SUhCa0ZJcXNBS3ZmUWs1aENDVk9XUDRTT3AzMzl0dVo0bVYyMGJieG8vOXFHRVpYbGN5VWJuOFRoN0JJdnZEaUFjejd2ZDZPOE1vU2NlNjZOdVQ0WHY2cUQ1QnBseWdzY3p6T0l6RkhzdnJkQXNKbTMvSVpKUDRWUXpmcTVMQzByM21QOHQreHVLSmtTNEpES051Z0JrSy9wK3RXbktiVGMwMnkvOFJPRDRsYU5CSElPd2J0a1BDaHdFbFRYM3EvU3RkdWtyMDdVQ0RkVmoyZTVxeGJBQkZESmNoVW1UQzJzcGdmd2I0UDlkVVNTam9vMWdkT0JVM3k3czA2bjhyMXl3WnB5MVVaWXpoYU0vcTVmMlhhU3hidzU3MnhNTmYxTjVvZy84RGpmZGpJODRyTC96SFpCODdoWjhYR2hUVThCL2QvVzVoNjZXRzhmaVlJNndlWGtncTBvWVVWamYvMyt3V0MrRTgycXlnVWwxQTVnZmlKVVdKbldNaktTSmhiY05PcUNoSUhkQlB5K0l5UVNGdWkyclJWalQwYzFGcitxRGhjVW9wQXlGK3hBaEJITVRlSDhwak5XWCt2cDN6eWpmM3dqSFpCNGdXZnNURFpMM2pGN2pubmEwOTVrd203RThUTTQ2Q2JmNDJ2RVZDcUdWKzNieU9GeVpWQ0FiSHpDVjdUSyt3QmVscGx4ai9zNFZycGpNM0VsaTVnV3JnaklTMHhDTEh6QVl3NzNDbDdOK3FYbDhyOEJlbkpXbXprc09YSkRjbGEzeU9TOVZIcVNFTjhGSm9sdC9mMmJLM09QSGt2NEg1VVpEMFRidnloaXE2T1p6bk9XYzUweDZvbVF2WHJqaXg5czdyRXhNcDEvcG1tYmxEbnM3aHAxWi8zRkovbDNmbk4xcFJSUWVrUFB6YnVIQVFDRGp1dXV1eG94R0J6L3BvZUd1R3FhWW1ST1FlQXZwZ2h1ZngzOHBQSzlFV3Y3T3dWVTR6U2ZsQ0JJVGRuWitldS9KNWNNMU9LSWxteE0zanFKTjk1TCtpTEJjcVQ5bkJaaDZUYkdRVk8xTVdzNFNuai9RTGJlY0hHYmpJZUR3WWhRdjB3dEEydmo1UkJ3MTZoK1NBYUlSc3RQVHlqTlFPaEtrc3VXQWNGdjR4eGdocElEVHk5UGJQRXBPZ0FOK1FDK0ZvTEZpR1FPUlk0S21nb2ZiSFNydVluL0FOZ0FmWEgrcjJvdmViWmZicUFZeC96VXhaMGwxczdLY3pldVhRMzR4bnIxdDNBU0lBK0I0SXNqaWcvUGUrd2pGRVlMbWVFWDNUNndYY0RHcVBnVTc5M2sweUx4TnRCRGgyMFNhcUZDNHIrN2taVGhpY3N3QmV6QXAxOGMxYXpNRU5LQWF0QkRsZnJKRkZ4NzN0Y1owUHBSdjNKYUw0ckM0bU00Yi8zK1VtbkpwMTdUTFY3clM0V1ZQSUZRejFDaTQxVDVySzlDYkRIMmdrWUhJSnFtOExkWDhJcmFjNjlLTGpVME41ODBLUWtGdW1DUlIyZURsZWJnNk5ad29VaVh5ZUZzUG1lbVJiUkw0RlMvS3UwVWlxbzNqWjZvdTYvUDNyWUp0STZBVW5BTU1pRE9xRmIwQkFQaGViY3BZRGt3dENvL1BFdWo5Tng5SmZ4MHlteTVpWWlXRW1xb04xdjhDbm9yM0lOWGRIbVk2aVdCYzJGVDYxSzNRTzU3bnNKcnVQU3FsN3lJaUZYVStlYkxaNnJMa25TeFJ5SDZ3TEwrbGd3c0NLbGRhZ2dBVWRRYlREa3BXaXBubytiRDZ3Yy9XcXBGeGU2bUI3RTFabjBDY09NNDlneGh5azlMaVRuQ1Z5SDhKREgrYTJ3VzR5SzhaSHBuaDZ0Nmo1M3ljRFdtU0JTWmtBU280OXZ5UTFVQ2NMY1NBQUk2WTlVY1IyQVJ3b083VkNLNlhkYk9pV3I3REpKV1Y3SVVISTVpeEQ2MVpaVEdqNHFHZVh5S2ltZGIrL0NWY3ZqdlNEUGoyMVV2TmozLzBETm1ieFUyMnJxYnQ2blhUdFV6REZDWWVGMDdVZWUxUmtIQXhGcXFPOThRclFEcE93RFR2b1FWdXZDNnRpN1NEMExQVjIwN3ZxZDdKcnVOYWxKa3ZZMUJxRFRmekJReXNjaVU1U05WYVNucS9aU0UvRHVKaHJkTXpKNE13eG5tWnV6UEZXL3FBRm1zbG42bElZV3FKVHV3c0dZUm1pMStkVHpLMFpVcFh5Z3FrdGpreVM1QWY3M2hzNG9paE8ybG10bjMyeFo2RWxXUmZKOHByZW5EczVvRldMSFdlbTNsV1RtM2FhWE5wNGwzSE9ITi9rUTJWWkdEV3N4UWJ5eGhpeEZqYUE0c2YrclFGL2piOU5CSW5nQTN0QlZDUzZTeVVkVDhjTHNGeHB0VjhJSzFBMERxWEdqOFBuOHdHNkJJSkc1ZHhMRXh1SU84MUw5c1FMVkRzL2hoRmdVeE1BNEd6UTVuZWFXRGg4VW5HeWxoQUNpaWxmUG0zaHdaVUNndnpFVllkeXZ4dGw1cWhZY0VnVlM3WG1PUFFBVmN4ZzV4MHRDaVM5dGtmTVRiaHZxZXRSeVFRQVZQa3FjNGMvRjdCT0ROZU5jYkorZDlrTE5VSFM5cFZoa2xybHJXb3FYT0hZSHgrakErbXRkSU9KM0hEOG53QTdWbENUM2R2SlhFZnBLZE1hTUpuR092OHNxNHVzbmpOektkbmhRV1BycjU0eVdENkl0aUo0c0VrSVkxeHdtVmtkVnFOVWtMZW1YSXNUd0lPMitRZFpOYTJlNkVQL0dxSkhzS3JrMVVnS2tITVJBWllvbVhTTnBUejRsQ2ZpSXd0cUJXYWllaGVnV1I5TE9GaG9CL1FNU3FrS0VUNUxCS0ExYTZwWlRzOTNFT0VIUmNyZE96aGVUTkVSdUFpcUVlTTdXY1BtdnY0cytGRjZobzlwSFdRci9WbDF2TzUwcjhndHIyVnEvbXNxdkRjSXQ0c3o5M1MzaFVtM2R6WjdWSWJudFZadGpva2MvWVdyYi9uNFRoYWhoUHE4djJ2d2srVCs2eUhJUU92R0FpaEN2OGNBNGZuY2hXcjNTNGU0ZVhxb3NuSkNQWGtqYVFEdVZsZnp5dTNvbldpZVhFOUNUV0pWSGM5ckt0RnFNWWl6ekhtY2hMb2s3NlJyUEprRm92bUcvT1ZHZ2NLNmJkWlE0aFl3ZUZvenZ0MllDWXB3YjJCMVg2emh2M1dOMmI3dDhNS0ZGS2dzK2V0UG1MV09NR0hxRUI0dGx1cXVyb3V4dE4wV29pekF0TytOVmw4ZHI3VXlPekVQcVZHaWxjeDNEbWZPUHdkcFVUckplMmxXcmdIempmUmxDR2xNNGpPMHVxb0ttcktUMzdhMm5ob0ltWm9DN2NuVjdyNWVCLzkrL05IdXU4WEdGZE9TcFJFU2VkQm0xUTZweG9hN2E2dEV1Q29tRkJtdEMxQ1dXWExSOVBRcVBBS20rbGxnMXRHTXBYclozbkViTGp0MmF6b2owMWxEMTR2OXpSNEpHQTdtaTc0cCtVSFJEUEpzbEZvT3lDV0pDOVU0ejNGcGdWeUlZREFieEN1djZaQ3Q5a3Z1T0oxYVhVRU1DK1lhMjZlT0JEQTlCd3ZSNVMrUEhaZzFVVFNES3FldURSOUJzdFE5REJISnhFN0x5SHRRL2tzckpicVhhUnVFR2FFTUF5Y1I3UkVOVzAvYzVHMElYSCt2Vkc3T2dyc0hlT0hDZUtycURCaEhUVGQ1RUtoWUNFejZLZjE0WTNQYmJ5SDd5a1JTa1ljVUYxMTFOYWpxaDVQdkFMcnJ6ZW5tVm9pWUgwQzB0cTdHNk1tUU5qOTVOL28rckM1ZDA0eXZkREJYcTI2aERuYW1QOGhTbTRlOWRXUEo3OW9lU2psK1pOM005RGFWREk4dEFRLzk4WjVPeVNFTk1xcUlXdm9zdWYvTThSeG55NmZMQytuTENlOU1FTUlMc24yVzhScUo0RlhCSm1IdGJIWHVkUDk0THdQMHVhSTZhUzBzcnRRQ0EzUUNKeEdFcmk5NWRaZ2ovcjZveUZCbkJtS0RURlI3b1FQZHJyOWpWUEF6TzlzZCtmWmdCYzlidldRajJLRDN6TklNalEyVmhUa1JtRUY2djBqbU1aV1piZER1dVRBWnVPUU82bk43bHc4VHRqMExyVENDTEcrMGx1MGRlY0pNRnlBbHpIM2FBazFXOVVQbEI1eGNlcGV5VEhPakFnbDhtWkJDRlpnVXJTVG1WY0tTQ1lrWXI3SzFyZVVza1d0YXZvdlAzbGdTRTE2SGRHeGl6VzI3cThZLzNjTnRHUG1HK2E1RkJJdG91YnVQeC9yME01cVQyV2trNS92QlMvSTUyRkRHSmJ0RXBmZjN6VytWWkZDZ0VEMW9EZEhrTVVlOVFqVDZBWHEwNWJGbFhLRTlaM3AvZ1pYNlRBZ0FuM29aTDJsMFA1ckQxQmQ0YmR3U2VNQ3NXNFkwK3ZscVFwbi9aNS9XWjdoQWozRDM2RWMyUURnWENTdE1Gem11VHU5WnN5M2EvcC9PbVNFUDA2TG9ESVlNVHBnaTZxQ0hycXV5RnVxM3hOaWczRzZnRlUzZ0srTTlEUk1uWXRWNWh0b1JONTZEekRkVzM5OWUydThOelpBVFA5WjVaSEROOHFrZFY2b2FZWGJXYlZ1b0V6OE1CM01RWmUrSkVRa0JXdUNPUmZsMHlRb2ZCQzd6aHpDQ2VpUUN6d0VJM3JGUU5UYlBManB2MHBySm5QYVJyOG1vRUJMbHRVK2NtTUpxeXRMZGpSaUNKL3c0SWlBL1g5WHJzUDZxK0lrWm1HQVdMN0s0S01UdjJSbzR1bUZhODRaazhlb2IveUN5Qjl1dkdvazAxTW5qUTNLK1JETEFjNkd0Q0JISkl0Wnp1bFJJd0RXd1hOVXh4Vit4RkVrZllYNDVXY0ZuV0xzY3dxVVRlN2lEWitsQzNiRlZHWUxvYllXblZQc0RFNk1USVJtdTBwRHl5R2dkcEc3QmNNbnFBTTdLbEQ4TjdQeDZITFRlRjg4WHpGeEppcGthbHN4Qkl4bWg3OGxWRVRjdlp1TzEzaTNNZTFDVjh5MDZ3b2s2RENCaFpkS3JKREFEZUdtaUgxME9EYml0Q2M2bkxxZjZGYjNBSUhWK2Fvc2hsTnFOdzdubmJmVG4rVmprd0svSURzZlliY1lCd0hFR0pVNnpnWnVTQU11TmEzSTJuRDhuUEVrZ3o3UHgwS1E5d3NFdDNUZzFDbUpINmZLRUFuODhPSk16R1E1dkV3WkhwcHFWOFEycDA2UXBUNXR3eEFBZnZtL2ZxUkp3WjhDRmxta3dQTG9RSWFzdFNEUWZ6cU0wSjNWQ2Y1bWxNUFZyRmR4RDJwVWdDeVdJVVE5UGVuSzRHL29kczJydVl0N3Y1RmFuWUpsc1hLR0s0d3d1UDhqLzJxaGpiT0creW1sTVlLbmxyNmUvV0NrQTQ2SWVTcjZXZ204dE53Q1J6ckZINUZicHFudWE3N3plRU5FSExodGJHdThqUXBJREdrRUdMNlJOQUhvQ3VGcnpCY2REMHBTYmltM0JBUnp5VjBXNHdIRG9kdXZtNERsN3NEVGNnWTNUSjVLZEx2U28wRXBBbG12TDhteDNhK1hRYUhRRUZhaVJKdUlRVHpvZjdLTDU3dTIyQ2RoZ0xkcENzcDF3M2FtVmh1bm1wYndHUTg0ZVVBWXJZdWROK3NlMmV2aGxwZkVITXFTMXRWTWRuQnJCdFUwTjdxM2k0bEFHVkN3WHpUMG5EK0N4YU93bzlIUEwweHEyWVYrc2RoM3RoZE9WTkVyMjBUR081WEtzSDhjK1JDeHBTQ01QNkt3cTI1WklSYmVNZ0tDNDNpOU9kUVVaODdwNEg3d09SL1hhczBUWWp6RVRvNTg0SGoxaURHbDJnVkJJU0RwZHlGaUtrTzllMGw4bjJ4Z0s2N2g0UUVKemwvNDFjWExvQVNOSCtLMEduYVFaeVJhODFRY0ZJWXdTUTZoMkZLZHZxUHMwTE83dStpRjl3UkhaZldOVmVVWG50Qld1Q3JENzg0NUtxKzZYK01YKzFWL2Vic2NONWpYNjdCcWh5OG1lbEovVUJwK09vVG9xUVpxUXVVVlJ1b3pHTlAvT0hNbUhrSHkxK1R0dFhzWVhyWElvR2tSOXFVQk1NV1hjRDMxcmY5MGNNUTVlekRIZkxzM2RHc2JZZ0UweWxMdDdUYU10TmhRYktlUGRWMXl5Z1VHdDF5ZFBvaXZHSm9NSjhPTG9GZnZVWHBicCs4cFZoZEhhdHNZUkhQNWN0ZTJhZFN6RkhITVR4Q0pBejROR0ZjaE5RNGJpbUhDM0R6aVdLbytKbWpPMlIyZ043RTdSdEthWEhveVBLS3FScDhVVWhrMG9xNVM5N3BHWm0ycHRKeDVET29TYXlMTUNOTkZDWTc1UGNOSURWUnFaYlJQRjBvRnVTdm95T0ltZXRvOXRTVkZLQ2QwaCtiZDlSM2VkaUYxZUFiOXdtRXRRb1pYSW1qdlpsaVJ2NElIWGt1aFcvclpIRGRtVmdwMDViQVdMNW5DK2VwOFlldWprTmdac0JteUFVRTVlMFdBTGpVT2VxOXpSVlExeEM3WnJ4Z0c0RkRvWkU3cFhCNlVieUJJZ1BLSUU5dEpVQzlKbTFtQTIveFpkS2M4T3lxcTIxRWJFeEhPbDlYODdiM0IzdVI3Ni85UGtRZ2lpVGNxMFZISTNsWXlTbHNvMFdhcHJlZjllb0dDcFV6MTdGbFJNVkEyekhiUXJLNExjSXhjcjA3Q0ZEYUduMlBOMGFyVmFKck84N3FBSEN5OHhVK0ZhMC9Ld0pYQy9rbm1Sekd0c05nbWN2QWI3dytHL2M2ZTd6YTdKdDd2Q0xOUGVrRGZLNE8yS21hMm1hK3FwWmZ5d1ozcjViSW52WkEralFJNWxUSjNQQjY2SXl6M2VDaG8vM1NPU0pLOUVwOUxpQ202RzRETWF0N1NITFBxV1dPWXdvM3lGNzFETHNnbVhUQWd1SmFIeHV3THVOQll2WW1HTllMODY5clk4WnQyR1FwK291VHdaNVJuaklsWFBYYUVoc0p4b1N0eXgva3U2UERhcXAxbWVxZjNpR21GOFNOSzUwbUFrRk1JTnZYcGdtL2tlbjlJeTRvMVI4d3p1L21xZ0ltUWJOanY5alc2UTRIL0ZCOG9ZVjNkd2c3SGFoZzRqR2dUYzVOTEpSTEFlcWFwV20rcTRUUllaQWlPb3lDWjZ6djRnY1g3SW90MGxaTXBKdTRZamN3a1FEbkVKQ3paQnlXNGY3UElObDQ3SkM3MkZBQXk2RzNJQ3NBRFR6ZVJpZXhEb0R3RDlaYjd2bUdPOHVydWEzYXBldTVoL0ppeEM3akdSS25wUHpqMUdyVkp5QzM2L0dNOXhya3JQTGRVbFlwSFFrM2RveWpjbEthYXd2RGtGbEFCYTFyM1pxL1QxUnZKZGlNbk11V1V0eXdHWi9iMmRacVVySUJUUXJINU9Vd25BYlY1TXA4VUVjWXRYMDNqd3lLS2RMaUNhM1JqVTBMaGVDYW9PTHhES2FScVphMTZKTlBDSHFKZWloYS9jOERmbkxUT2VKVDJmWFdaSnl1dnJ5UUl1YW5tejRrMDd4VHY0eXJXYUtNSXNoaVkvclJ4clo4TTNTT3haay9jN0tWQ3l2SnNhbGszQ3dQd1BBdStWMHVRYk4vNmhqbXFwYThmWjc1RllJTmU3SDNZWnVWdDcwWTNXT20xTS9BM2J6OGlTcExRaFdxZFlRTUdlRkFnbTNNUkVxY1pCZVdLWlpWN3RIcWwwNFoxak12dTJwVkVCRXBkSjUxTXArWjFIYzJ0aklEZnd6YktxMXdQWnRiNjYzUEVKeWVFd1pubHlMT05MM1ZlYTdUTk82aFVpMnE0N3huR3BZUXM2cTAyWUUvenhGOXUxbEVrMzJYcDF0Uk1WTTh5UHFITG5uWDVNaHYyRjdnZmFVK0U5VnlscFlYbUJEYVo1ckhqQzROTVI1ZWE5VlBrTTZHQlJxemNVKzM1ZTlONGJJbG05dzRVYmxDZXhSSVdjdEEzVzNZcU9YU1NwaTMrOXhwNlJIdFBGNW00ZTB3cHIyUklMWlkrZERoalh3Q1Uwek5NM1ZXSVNKa1o3alRBejJyYWxkLzdKZFlnbUdubDk4KzY2UHRka1lOOG53d0FOUW8xbHZRL3JNMEkxUzBrdUJYV1krNjByTlZ5SUx6NGc2MWpZZG1yVTJtMmpEaG5Xa2FBZ3MrVTZ6N2FncEdtZHdBaGQyMHNMb2dLRTE5VythdnZrWm9mVENOYTVyV1RpY3p6WWdmZkdLejZYV2FGelpsRm9JNHVHRFE0bThFemZtaVprbnNVeTI4THpUazBEWDJqUnJ3dFZIdzdsZDQ2UVFNY3Q1RXpDa0JXR1EvOFRJeE1QSmZOOFVkMlRmd25HZjljYzVTa1FySlhxTjRURU5EZ0tmREtTZWVPN1BUWHhZWk5Fa2c0ZmpDWUovdXpmaGZkQ0VRdTdIaU16OG9FNE5mZWtGa09YNFd4cmljSXpIVWxDSmduL0VWY1JTUGxxRmVNSitQVzdSYjQ3SkRTSzJ5a3lnMGtjbFlWQXd5NzZkdW53S2Jrek5PK2hIUGV6dzBPRFFFWHl6eDVQdjZFRTBvWlRLUnEvMm5CeSszQzk5SldlS0M0eitWb3hscExtdm8wdE0yQWdJQ0FnSUNBZ1BQOFBwcTc3ZnNjdCsyN2Y0ZmNEL3YrNnAvWjFSOTl2MldmNy91SDkrM29pdnQ5TW0rMzA4cjZpWG0rMzZZYitIMmt1L2JmVjl2MmU5OW4ybTM3ZXFIdnQrMUd2cyszbDM3ZWsvOUQwOS80ZW94UG5XY1A3Zm9mL3pmckhOK25aLzdmc0Z2MmZZLy9WZExmKzM2MUMrbjlpTHYxYjMvdDlGQytyMFo3NTBiMDhOVXFxTERvMTNwK05RNzlIVm9OM0dxR1FBc1FRR0tMMnhaODFyeHhOUFlDOEhmY1NtTDZTYlFoZDBBd0pQeElqM1RPc0tmbzZQZFBtRkJhakIvTjdkdzRTKzZyd3dGc1lWZ1pvaE5mNVZ2WEdpcDBWKzRvcDN6T3hmYnQ1amFncjBENjFyQllOK01lUkFuNGN1UncxVG5uYkRoWWx4cllDRG9sajloV1NaTGYvSG9zcE5lcW9zY2FqTTFWNG9DVGwxK1pJc3NQb0tneHVKMmZIaVlaSWRnRmllRStyeUxFMmRsbFVZVkV0dWdkcXorTGozTmFpenllZnk5MTcxSHA4QjNDaEMxblhFRS95bE9ObFo5bWpzMXlOY2wrR0lDellBUDJ2cFVhdklrdSt5UjllbTQ1bTlVdXhZcXZTYStjNjFNNHA4N0VONFpDWnVSYkZtd0JUSWsydm5VSkVvQkMxQXFWYTZYVkFyMjRSTFFuVXI4Wllpd2x6aXNZQmg1aTZPK3R2ZEJNby9ROXh6WXcreGx1TDQrWC9pVEVUd3Z5WjVlbXA0cWNIcDlkcWlaaUhHU1lOZ2x0bDg4ZTA3NEIwY0tOcCtvOVM4dVFQNFpydzgzQm9SKy8velN0cHdTLzEyc3RmTDY5SDNZTm1EYTg4a1IweDA4VEFocTR1SFZJNFN1Tmh1Z1FZYkFSUXVkc2VHWnNHRTJyTkxoOFZXV3ZkOENOWTFhNktEejZ3N2pibFBQTmVzYmJXNXZaY0cvSkswMUlzSFdlVVN3Mng3ZkVmdEd0SzlIMEl1dVkvWVlTQnVHSnhCOE1QT21DRmFUUk5KY0d2UlpoVmdLZWJUZTRQY3FyOFIzdWoxUU5URDdtMjROM21FcEJaTHJ5WEM0UjI1WnZPWWk1d2tQVjVUcXJtRTZSSlBkNllEdHFZSmRkQzhYUG5ld2c2elkxbEpLRnpzaHVrditCUFNnRnZrVTdNL2FCZllhL3lHSVg4Y0F5ZEhFYnR3QitDd1FUQzFoajRVdUR5K2REKzZWb1FFVzQwb0FVZUh3S1dHTGxxZ0FQZkh3VGxrVHhuOGJvcWV5dzN3dDZpN2dFYUNSc0xNeTkyYWxBcUs3cm5uR0w2eTM3OFdzNnlFRmc2ZU9RaU5uTHplOHVqM3F1ZkI0MVlWNkU4ZWxaQVJxY1pxNitsNGtXTWlUcEtiaExFclV3L3EwZm9Sa01TQlRIbkhtVFYzbWs5bHFGQUdWQUxZcGY5LzdhbGprc1J6TTVEVDZUSUdEcisvVGRLeDRpVWFPYUF3VXlnMWZER1pXUnh5QVA1L3FENkVOZ1VFS0NXNlZiVnpVSm5OOVNidk4vQWtjNERoTWZnR1Jnb2xucnc1ZUp3SXZKcm1tZ2hKL3dpRG5LNXo3M2JtaHdQcmNmZWw1Vjh4QzUrVldneGYxK003c09kay93clF6d2ZjeDRINnRVV2gxa09BNHVVNS9odGhMYTdFQjUwNTVHZmdkaWhCb2FxUFpFbHBvbFFQaTRDdHlvT0tpVHBDRUJGYUlpbk1qOHpSaWRaZjlCK2hIcXdSTWhoeHA0cUUwRnRDR2hBQmxBSlBtWjZLYThkVXpMdGNlN2J1STAxWmw5bmxENkwyRXErR1crOXZtanpaK3laQWhnZmVPVnkwTk1JZ3RlQ3hsMTBFR1BQZWpWVXU1bHpqSXFPdGd0cFJvSzArWGlMeDZRbVZyOHhlNDdsTndIYk4wZ1JRYTNHR0I1MjllcjlLcHIxVzk3dVY1N1JqbFRvaXZYQ05pUUxWWFpOQXIwbkxoM3QyaDl3ZGpIQlJvU0lGelY2TFNjYmY3MWZOa296eFg1OGU3enE4eTBSa3ZQV0lCTkVOcE5DUjU1dXh5K0FNd2VwSEZJTHFvYks5RW5LWmh3a1k2K2xQeWZrYXVzWk82UTN0RmRqWmZ2QUZMbVhPMnpnNWpESDVaeEFuSXFRaWxaY1RSN3RsT2V4OXBodXJ0RVhyNDZuT0phdFE5NWZOVmVuM1BqOExMSG5ZZ2htL1dFL1BZZlF3WXE0ZEZTYjh6NlR3RTJ1N2o4bW5kZm9PL2ZmMmFzSjVTeFVCRjg1b2NRVkw5MVVVRG9lV0FFNTlXc0JORjZBSjJLNzU3eGdNMXdqWGlVemFiMGFaNzZRbG9PUVpSdWN0Y1QzcnpJbkM0N2J6aVNrN3VLWW5GRllselpSNXMxWThkQjc5U2F6Ui9sUy9raHFVbkY5WTkyL0pYQU9CTWpkZE5ndDZnRGVlNndoMVFFaWtmUUN1bEs0bzQvWWJkbSt3TDYxWUF2M2tzeklrZ0pvNVkvL0xZQU05NzdxSEd4NkI2UGFIWlIxLzZFZ1NjRDdOTmg3eEljcFo1dW1sUTZQOXNrakgxa29GRDhXNEpEZzErSWdCRUlYU1hBRXNkRjBtYWJFdW0xTGVJWlJRdEFibWgraFlCaG1lZ2pmcTBHbnNmWVp3NGxZUTU0b3htUHdZK0xKUHNkU2xBcFVZMG5ZaGRuT0sxSlEwRElha3htK3BmMlk0NFlHT2p6WXVvRFFIV0lWenFXWmhiSkRQd2JMREt3NjFKVllPQm9acFF3Q1VUdE9VbDc3K2p4aVlsNnhIck14WHAwU2dTcy8yNEVJb2FOVTlwVElBRDBhRVQremRGTEtRT1hKNXQxNTdTam5COURBL0tNYlJjWlVVYWRlWC9YZ0cwSEJKYlpuTGVWc0g1T25jencwc3FhNmxTVGg5aWFoYmJ4VkJCQ1YxVG4zNGk0bytsaXhTZWsybWIwc2RzUExiQVVrWlpKTDNZVEZtSE03Q2R3VVZEczlnbHF2dXhvamVKL0R5UkplOWw5MWN3N1BjTVlwK0t4UUhqb3cyWDJRWllKTjBScCt2NDJNOFphaW1Edkl0UktsR3E2RzZXYUZtcmpXRzhNWkh1aTdSVE5vRGNaU2dhWGpFVmJ0TFlxY1J5dkJobnd2a2E5NTdGTW5ucCtlZnBvVVROZU5WMnpFVXhnNmlEMHpRdG5jQ2x3NWlqWUlndE9YYytSVVNCbWxVOWl5ZEYycXROZW50VWFWQ1NrNDNpdzRFMG53bzdKQWtMSkkwVk5TU2NPeE40ZTh6VnVUUjdNZnduZXFMcWQzN0owNktNMGZUM0dYL3Q3T2JrNEVEOTNRdHNDK3A4NHFKelJXelZOVUhIcUh1Z2hZV0JMTXo0RGMvd0w0N3Q2Ukcxb05WWURSNXIxTndQTUdmNExOWm8vL0NSVWpGZVVCVVhUTXZZcTNPYlBkamUzRFFtcGVZOU45UFZFMHpUOStONHcxejNabFE0bnJXWHd1NDNyTU11VllRUkpwMUNZSXRaZFNzWVRiZmZ5UjZqR1VVMFhSZWxyYW81V2UzTTl1TCtzOGdwNS90U3hqR2l2OE5XOE9DSWliMjYwVzZjbjJpYUVCbUk3OXBEOVhtb3FyckM4TGFVeVdlZmYwSzZ2VUFMUFk5YzlXVlRoNVcwVGF3b01aTEVhaS9rTnI4WlBPalhBMEJiNGpUakR5NW1hOFF6OFVPR2F0R0Mxdlg0Q1krS25IS1d2WmFhb056MDNIaGxQL21jbmc4RWp5TjdERDB6YVJOY1lCTnZMOEs2eG9Wdm9jOFo2SG1GcExwR0FrUFlyTm1xTTcxa1dURUNqRG1nSVY2aVRnSWl3cGcyVkhyZEw1RlJ0My9QMGdpTlR4dDdwNzRPTGpYQ0ZjeWF3c1QyUDJCRkVxdkIxZGxUZ3pJVXdFUWpMUVhJT1NZMTEvUlRFcGJ4c3V5SGRDZ2xwZ1pYa3J0V0xKRGVUVnVpSmdpOFRodHNzZjRnc0xIMEV4dmQrbWRiZ0tiWjVyclc1UUo1c1BKNVZ0N25wYktFU09VditLQTFqODhaSjl1VUFsMHgzYndGVFMxekdyTE84c3ZqTFQ1VVZ2bmRrQkZLclFVc3RKbUhyRE1UdUpqdWpmRDhuTmZ0QUZYRWFJaDh3Y2JIQUNwWXdvMmQrdXBSRGtoSGFEcDczVlFxM3d1ZFpZQlNLNERCSUJGMks2ZXJnL2NGcjBXSFBDL0JlcGxldWNNTmloVm9nSWlKckYxd05zRDhVSGNmVzFqZEYxTjhDdXNiNzBDQ2pzYWcwaVZsQWRsYlJqa0wzWDhPWko4b3BxVDlJOFR1bUorL05CNmdVMjlUTS9RcHBMQ0tHNitnNUJIMDlIWE1mNnR3QXVOVUV2a1NrTk96d1k5UjVudjlCcURVa3RNZzErT1hHTjVROWFiQVhXNFJEaFcrdzdZVkxUTFUvT2FNY1Q0K1hwclZTcUx5cWJMNGtuWGlBbWRjdEE4YXIySHhuS01nUmtkUWNGSlAxZWFTWHhZNWhrVGZJSmtqcHJlOXMzazY0enhEU0RuVlRvSkRDTHNoZlZjclZIVE4xYnd2UFhLZTFYdmd5eXdFN0E2QVBGaWRDeDQ5am9QQk9ueXU2SVNycVcyUlhDbnFEWHhsWXJ4VlgrRURRa0xHdkQ0eVJaTVNlT3VvYjZCUStiSm9pTlppMlJ3T0tlNlJadWtCNVZqdm5zMk9nb1M3Rm9ITlp0bkFyOHRLZ0hQOHdHakFpRXJMeUc2U2JDZEd4RXlmbTN1NXhxdUZ1Y2JVRUxhTkZNdURNRmFnUVVqTWpnWTlBcXpLOHdPN21BSExxUm1uVkl3b2JzdU5QVGZCSjdOU3NkL3JRUkF5N3pLSjUvcHg2cHNHdlFWbGdlYkdFQUltOERPcVJaRVJaMnhFYXVhSEt4R1hja3NTN3hmb1g0TGhwZy9uQjZLUXZuOVpnV2VJN1V3N0xqeVNqR2VEYkRaMGtaV050UFdFNENUOUZ3ZEJHcStYL0VHZlRNZ0R4Ujdla3p3Wjl3anVpczFiYjhWSnRFWkMxR3psaU1oZWN1UzZDTm1xeVM1SEthTnU0VTNIa0t1dzgwQWZOMFJZNHR0Z0xpdFFyWGpPaGV0N0lUcTc1Q0VnOWFXNytvNVFxanJCcHdpbWplcU9Dcyt4cTdPWDlCMHRiZWxheTdsd1JJNjBueGovTHRiN3NvWFJvSEJwVGtuZE12R3JlNkphZmVRNk9WV2dhWVI1Y2Erb2pXUDYyOGFrb1FMa1JVejFXamI3akZESUxERzIvMWhVSGxmVkJScUlGaThSMHlqaFJsQW03bStPVW9qSVAxSnl0dlpsNGZCa3JrQ2NyU244MjJUaEZraXN2aHBiK2VFNXNhd3hwdWs5T1ozeWpGNDNKTWJhc3BNemUxeVc3Y1FubHIrTmZHN1FaQi9maVVhTHFPU3I2SFZhMXEvd3ZEQlNGbFVhbjAxc0FsWjdBRXZ1bng1d3RqZ2M3clZ3eXVGdTA5UXNIaG5vcHJuajEyL2tpMEVUSXBkWTNtNWxtQVo4aTVObUJqNnRGNUlXVTBjSENldUlBYXBCem5WNDFTOURzemVldE42VlhEeHdqODR6QUdJNUtSVzBremRCaFhGQmw1QzloNU5JNjAwRTdNTS9sSzl0RmxkQlVqMm8zUDJZd1JsRlhXQ3pyajAwdnFla0tEUEorZUFKYkRYcU9CWmRYMlFrM2VNWklaTVJJaHJOK2UyS2hDYXBaSEdVbW9DNmFnQzNrU3J3WGNTWENOSFF0eHNZb0loZTR0UWF5b3R2UnVYWTlrb3lZbTJCb1BodUVKY1pMZTl3S09BSi9uSjNweTBGczI1dnZldEF3SG04REV0VGxNYkN5cytnM1MrZVZwOEdPY0lGb1NGNGFCUjdzWXVoQVN4RzJPaTFDY0RhazE2Y1RLenI4OUUzZ3FmZ2R0bXk5MCsrTmxvaU1wbFIzd1pVc1lQOHN5N3Zoc1QzYlZZWkFKMzNKaVRUY0NMNzNuSmlzck1TdGc0U251ODZ4OEdIT3lzYjZWM0lCbmZsSW1uQzE0OFpYNGdDUGF0TmswT3BySjJCeldRQTVwS0NORktmcHA5djVuNytIV2FoZzNzV1ltZE5yalJVQmFlYVBZSktxRXhHVFZMSmRBenFDdFNuK0U3N1JXSWprVDN5UjhVNjcxNUpYS1I2cUZRRis4UUppNXhrMGs3Ny9hMkhqcTl5N1ZmN0FqbE9jOEZIb3ZUekJpNDhFcXFsQjYxditqRkZRZFkwNitjNCtoWVEzVDFCSWRRcUltaXZnV0hYWUZhbzRzMXk1cStRTUg3NFZ2N2EzYUg2emxrcmR2QzB6UDJXeUZGN1VsSSs4Y0huRDVIUmZLZ3Fra2hZT2hNNGl0ajJKQU1EZkgrOTBXUElRWHJUOXBpVlFCajlqZXFHQ1ltMVRvSlduNWhmcjJWN0YybVpkNFZqMUhxT3FPTFlsaDUxN25qWWFwRU1PTUYrenFqOE1QRHhqSUw3SDBLcUJNcldxVVhYaGM4SFRuSnp0Y1pua3RkZXV0aFNXZkg5ZkRITlc3RklXTTdodkxpOHY3THZBaWR2K2hmTFRTZGk0TnNzZDZ4RklBZEJ5c1dMQ0xub3R2NmZpYXVUL2lSVk9OU0FSTjlwNlRXR3BKcm9KYWsvamsvVHR4ODdmbmFBSXN2M3hYT3hrUXNmY3RBckk2aUtxSDg4Z28vcEJENEJoSEY5OFJlK1doZ3ZHVUR6OGo1a0ZiTTVaWTFPUktXUktOVWpYdnlkYjVMOWJMcGRaVTVjMzROS1NqeUYySnJCM254MVpCRXM5cnNoZzVsK3pFQkZpRE04MTQ5amY3TnppaDhxTndndkkzcVFiSkZMRDBlQ2tyZUsrV2t6QW5SMG40ZzVUcWhrQ0xTK2dmcjQ4Z1F6cG1sTGhqUzJ6Njd0SktKYTZmK1crSkIyODhyK2YrSFpWRGxzeUNtNkYrS25MOExWa2VvV1k1YXFJanFHeHVzbDIwWGdINHlCczljZFlpNldDNUdxSlFaVFRVZXBndy9MR3h3anE0VEZQMzVucE5TbkdtdVE4YkpyeFJkWjBmbEhMQU93djllK0pvSU1NOW1qWHdFTEtWQTdDZkJoTXJMM1hBYTQ0dkw3RklpS095VkF4SklJelpoOFVRZGtJTlRQSm5iRmFBUTl3cnk1T3pjRUdlQTErNyt0L2E1Q1dsL3FuRGFvMzZwR0FLc3R0aC9NdkNSWXVVUG5BcWlSbG5SalF4NFNnRytwVThEa0xFQldWMHEvdDRpV0d6K3haaTFvQjdPUlluZm4zSjR3bVh4aHdwczVVTnNuYStYb0phek42WDBKOGF5MUpZbFhiVXFmY3ZUcllrWWNULzFIZkZHaitKWlRNdzZwSE5pem1hTEtLN0NXNGltTXphN2xhTktKQkFIUmh0SkxCK1BkZWpXNmc5MnpzRlhJOWZzY0gvQkZuTDdkL3FNM0tzclBPNjQyZ0xpUU8rN3lTT2JNN09uNHU4VDRmWENEMUEvYVZzS2tSOU5SUkRMelpNRitsNTdOb2xnSlIvdEw0dlhLVTlmaVlGaWl6TjhQb3BkYnRNTzAvSTRYMUJqbHlRQUxPTjdCZmxGWlNZOWp6c0lBdE5jN1hNRk1idHNaM3ljeHFEYmdZUDdoamIxSW5vK0p1WTdZb1U1REhxREI2ZjJzbjhNeHFRYytyR3Z0Q3NqelBQd3I0bjN4dTJCd2tHS0MxMkhqc0tUa1NEREQ3TGRobDFzVGFRM3NTMDVINXExYTZJTDFEbjgxblNDTTk3V1NURS9UNkgremUzYXV0eUNIMmZkNVN0U2ZUSmJNV0ZmbjhkcmRhekZUQnUzWDlGeEozRGhrTElWeG1UZ1lpcUJLd3ZuVmRYSXdBSCtJbXBnK203ZEl6YVRYMDlSeVI4OXNhRERBYzkvV2kvYmJpbVMzTG1iaGxtV0pvU291WmhZTUgzZFlMTVNmRTByemtEZktuQXVGUDhMdVhUcWpVTVZYbUx0TzlKdEp6UHdLSDI4bXBTOVRmUy9lVHN5Y2RnRzVKUlBJaG9OMHg1WHJwZFh1cXczUVh2d3FSZTgwaVJET1BBSWxOTWx2MUZDd0dSV2xwaGRhdy9yK0ZzaEc5RE10dGVPRHJ3eHdkaXVZVWxUbldpbVYvQ2FIVEpiblFCYWJKMEJUSUZuY0l0bHppL2E3Qm4reDJmRnZ1bnZWTTUrcXJTbUNvNzRVZnAvTVhOdXVmYytsbHR6TFdOZFhqUlZkdnRwUkN5K2xEdTlZV1JQOXJ4T3I1YXMzekgrd0kxWEtiWXdjckEvODI4R3kvL1BqaUF5Z1JQZjhzTEZmVGV2UUNJN2hJaEhwWW41R1dudWR1VzZMek9DNGQwNk9uMVlVVUZVM0hyOVNOM0tHMTdvaDVNclZ4N2lkQkcwWGZLcXZzc3ZkY0g0UDVZQW52YUluS1lOb0luRTUxK3Jia3NBZDBOUllvcnNYZ1JGQ1ZYT1FiajFKczlhTkxQVXFTOGkwY0ZVUGt5blRZR2Evbk9vRzlCZDB5em82Tnora3NCb3UxMHdKYUlmQUlyN0w4cjROaXpZanRxdWhPcHFMWWlkUlR0c1hBUUNkT2NqK2tCVVFsQWI2Tk90bHd2Y2RmL0JXSmlzRmZmdVNjVFdmbUgwMlF6WXJWNkgvZG9OOFpleHN1YzVYYVJXSnZYZDd2UzluQkl1RWRZbThtQkw2TUpOVnduZE8zV3dPekhOUmlPa2cvbUNOOXVveDFETFo5OTIxeUlPUWZiZTBOYVJidVRnd2ZjcFFPSlpHbnVOSjNuVDVCbzh3MG5CVXBOMGthM1NwcGZDWGNVOWZHT3FvanlqRTVTZWJENVN5UDRQenprTGtkaUxjTGx4eVhKbURtSVN0VGxuZkcrV2lYYzZINThSaFlqckc3V2U4U0lPRGZwSWsrZS9Mbkh3SW5DYjYvUVJkWmJYUmw4eG8yTjFlQVJaekpoVUplMWJYSjY3OXF3SGhpSGJjbmZqU3pLVkRsenVSaDVaZXVyOTBWT1lLcDF0bTZsdlA2QWdyMWtOK1hvSXV4aWdENlVnaTJzL0FDbG96Szc1Vk5ESjNEdDlEUFlqRE1ndnJyaEN2VlFXUXdHUGd3dC82L0pGdHdjbnI4VDJVOWhFVC9HMzFLQThHLzhkeVZ0VlZWNE9JL0hQbVV0aGpPTHM0VktYTldPNTFCUzJSV2VkTEd1cVU4S1lSWmFTaWc1TmpqWWtudE9TcDF0TkhaOU5SV3dJajBjNmtPL0p2ZW9HMXNhUlJ1RWE1Y1ljSUUzQWhsZWNxcElRR3dkWUw4SXVHd1Z1Y0xNUXVqbmMwY0hGUHE3dVRMTmUxRlh3VGhuTUg1VGFRdWpVTXhGYzc2OTdkS1ZFbUJQM1J3QlQ0WHJ3U25vajcrMUdjcWJ4VjU3dkN5cTl3cWNtRlZpdGsrUWtXZDhlSUhoTk5XQnRQeWYvTGdSek8yWjVKYi9uTjBDUEI2aGtHanBXamRQWndNTEFZQ2lQTExzSTIvcFZIRUdJcldqdzdtbGtBY3hhSTZ1VTFCWml2dUQ3a0NKRnJKWkMyWDZaR2RKM0htUk15SmhEN3dkVDVVdHpJVHBmYUFqcmc0ZEtPRnhuVHJMZnRvRFFBUjdjTUEwemdJdDZIVWNXcXZQd0pPbUY5d3FYVkZCcVhtd01pOFE3Tm54NVNIQnZJbFVtOW9WZm1LQTJMNXFEZis3RXYvZWthTEordnhaV1BtcHRZTXMxNWhHUkxlenloRmJXQU9ocENGTXlJYU5LOFBRQkNadjErQnYxVERhWFBmM0tkY1gxell2eXE4eDFhTUo0VXpIZGZZWFZaei95WXR3NG4zeC82MDNvaTAyeWRQMjdPODlRT3ZJWlY4TUJVQ01jczNxVTN5NTY5ZUsyU0djN202M1lIa04rTWxoeXR2ZGVSL0QvdUVxZnIwaGl2Y0NYMXdLaEVJR1NaWTMza1MrMC8yTWxqSnpObDZpeXJKMjEvZmtHdEZyZHZKckYrbm80ekU4U3plTzhXK2VIYzZmK0dmaWhGcU9DYStoekV6eENRbjlDMDZzNnFyMDJ3NCs3ZlkwVzBwVDBHTFVyeDdYZ3FCK2h2SG92dU5adC93U3lyUnRZSlA0S0VMV2ErUkJWTitEWWdaeHJLWEJidm5LV3VlcnFaSHpiRVUyVlNXQXN5N0xCSllCcTN5UElXSGZ0QzNRYnNQZmJqMlhzQ0YrbjMrQ282S0ZvMGJJY3NDaC9RLzRlUlUwb0pJMG1CVys2alR0SWR4STBTUnR6VkxaZEdwaXYyM3JyNTNXQUlhNUpIcFBtMmxLRWx6dTZaVlBuMHc0NHNPeDVBQXZQaWdKZ3AzN085N1RkOEZSY093T3F2WmZ5WG5vd0hKcWpFR3dyU0RVQWVkeVA1ZmFwZGEvb1drVEJJbWVIRFhlUy9DbFpFbzBSZVFYS25FbEdLVlZkTXdxTnlybVY5eFFaczJkZ1FtNlpoOWRwN0tmNWZWTmJUUEViY1lsaFdhVjNFWWE1TkxFbm5nbmdBb1U3eTZxbEszQ2lSZnpCdm0xZmpVQzRhb25XSHFyUDFDbVZTSEg5eUpVK1NQYXc5QVdPTDY2YUd0bkdqbEgyNVVnQjVpQnN3cnZhblROYlFLVU53UUdlQWcxWTZvREh5Mk1VZUJaN3ByY3NKYkZqVHBlQzNrSDVTeTQ4cjRjZk5XNHpNWkxEN0UwWEgwTmNxNGFjLzBCN2hyRFZOTzVvME5iYVd5RFhMVjczQ1hkNG5rRlhhZmtRb2FLWEIrOHVkckpHTkg0SDcyL1YwL29oVnBvb3pnM3lCWGhvRlE1dXA5WXVqWExHdHpZZkw4dWt1bFZERHJrOGVaQzFZRTJha0d6czdzYmNzMEQ4OWFCWXRYYjlPOVJtSW91bDJTajRaWTMrM0FHcVg3ZlpTczdnY0NNVjdnSE9YRGJaMjNFS21Namw1N1VqRmNSQTg4NncxZk1ZMGlBNkI2aWF0U0JmOFl4SlFWaWh4QWFsVDg0ZXhHSVROK1ZLdGUyOFB6VVRVRURPbmZZME5jN1RWWlFpVjlpemdNcHk5bmgzYURET0pFb0VyM08yRXgwRGVhVFMrdW40RW1sdVFVWk9tNTZjbG1ZM0NHeWU1ck43V3pLNXRKZHAxMm80RjMrQU96bCs2VVh4VFZHdjdOenllSmxPRkVrY0ovQTVFSXpWYnJNN3Z1SFk2L0J5WUFjcWpSWk1vcnJLNEcxOXRyQmRUTUczbnNrbWZUUnpGRmRrMCtkbDNEektLU1pyZzhQNXVHdVZJQVp4cVl2YmgwdXpUUm9GVmNVSTFzbVZId0s0VTFwSDAzK01YZWoyNitNZXRTcFQwOUZFYWgrZUJNUXdYbVVSU3l5dHJMN3RGdHFLTmQrTDVBa3cyQUN1NGVDT0Mrb0pseFVWMnlYZEdaZ1N2Qi9VaXJ2azhta1pQejhUTXJHcFBpbG5NRUxDZk9lSmdSUTBXQ2R6enFRbmViMXZwWW56UWxQaHYxa0ZXbUdsKzY1Nkp5MmlackxTVHdCZnI4Zks5eFc3QWRMY0dIS3RIVzh5YWVuc2RSQ3QzNm9vTlNwMFNzUEdLZDZaVDVNaXFkeDczVXpKMFBRNGVMNFQ4UEFZSjdhb1h5WjFxdkJZMk83eENka3VQYjNxdW9nMUNWL21oV3V5bW5Lc05FZmVJelFqeSt2c0psRlQ5STFRRlRZK0pza3dVVDJKaUMyVTN2d1RPSHgxMWN4dDd0akhIcnZydEFaYlVWa0F6eUxybWJOS0ExcjFPM3pGMWlzWWxJTEF4THdkMjZzL1h0ZllVSDMyVjNqNUY5QmR1c0ZtV3RlY0RQU2VUS3AzL1dTRnZXZUN3NU9iZEoydU5IZXJ4NllRYll3Ty9XYTd6WHFHS1Y2VGNnRisxbXhtTDJ5S2FjbTBES1pBaGpyc0dBZ2ErV3BpZGV4aGRzd2hBbys0dDlPKzFGcy9qZ2Q3b0xmUFgyVjQvNWY5MXhWbnVSYWlzaFAvTklUclo1TndTMVdWNGp3OEdmMXRndFhPQVR5VlhtVWxEeUxDRFZlbTRDelZ5SkdwUDNxRE9CY3h0N0lFQTM3ZW9GeUZKSTZqNHBVMGZtQVZ1WTVwaEhUNTJQcVNyQTdoUEZjY00zeHpCdFN2NzUrU0dRMUdBbUh0TFlSZEtIdUJHY3dlWGpXOXlDeU5sWHo1Y01pdWdETnhDN3FrVk51d21JbzN1WUtYUi8rSkhVUkZOVk1YU1BrNHZYWmE3bFZkQWwreDV2VElVenpXQ2FTYjNIWXhLdG8vbzJvM3NDQW83OGZyVDB5KzUxb1NjQmF2NTk3NjdDcVJyaTNZT0Z2U2hMcHJGOGpoMEF0aE1STXl5cUZHVE45amQ3Y21RTUVtSGxwMEtHQzk5OU9ydW1JY2tuL1NWWGFJU0liQlRiZ2pxdUdVZnhWT2hqbTZ5bno4dlI2cHRMdFowMy80TndlYmVreDk4cVhkSWlIL09udEdySXBuK0Evcmw4cEdkSHkxTGtGQitWSlhnYUk4N3hVU29od3lhUUU2b3I2OGhzd3RoMWd6VHo1aVM5d1MwM0NiQ3NwTkViSHpWSmtMeG1ia1U4SHdETUJRSDRKU2NBbTlmamFBbXh2QXpGTThBb1dScStPV1drM2FrNnhGTWlONGluVVl1OTJ3ZU1EaHg4akRZb1didUZoR3lKeHdCUE9QdnNJQWRROHZ1NHVYclB1bUpxcUxRZmtobEtKc3UrTDh4Q0tVQ1NtUFhqZkIzRkpTclRzMzFTdWV6bGFlVXRiNmF4Uy96L1lmTElsRW5UN0lTWVc4Zm9MRmJOVnYxZnVLZkEzQjh4bTM2ZXJUMG5pb3NxWFZ4SG5nUUowZzBhWk4wYkloeEZmUTB2VTN2TjJuRWtXRGsvMVdRZU8vTkI2aFQ2RFpiS3Zybmllak53Vi9xMDRrSlhlNWZjVGpZK3ViMzRuQ2FyYXVPQ1dDMmN0SUt2MFFuV3RKdWt5S1ZvYmtkT1lwMWZpM0NVN2wydHY0bDFZYTVRVlB1a0tPTnhnNVVxbklOT0poZDlsSWJlVktYOVp2TDdWczBRVk9FdXFCZ0ZMNWptNG50QURNRTBxVlBxb25ETm5pVlRMM3RrRC84SE9hM2VMRFJyUW5wNldnaUNNb0RsYU5uTW14dkFJMjJtNFc0TVd1cEljTEJpK3o2eEZWajJqRDJzaGttQS9aZDJsbEdZemg0WGpKck5vQkFHY2psa2lmRXdOQmtCM0lLVXJPbUVaOUk1REZ5SWVkb1RuSHhUK0tqdVNNaXduam5ReFllekRueE9BSStSdEZldU1PYW5VZDdOMDBEbFg3d3BJMnBDYVhyeG9mUHpPZHh1QXNIcjM4aGNObHhwTXk2L1NuL3BvenZiaHA2NXR5YTFTMGNuMXdGWjdmNjFDNE93bi8zb1p0VE8yQnNUTkR4dzY0WUtqbTJNN1pBRkRvbFdpQmRmanlHSnZjaGkxM2RQUmh4Z1haYWthYTNxQjgzYnJDS2hCNit3K0VkKzNFbkxXU0loVG5DT3NwcmVJSWJYYXpJY2NPaUp0U3pzaENGT1EwQ3FhTXJHeUYrQWV6TythbWVSc2g0UDF2OHZrOFBWVjNtcFJVNmJjcE1EMlhvZ2JFSklQamphbUQ0ZTJuZkd6NStvTWYwL2REb0ZIZEZuKzE1SzdjVG5sOXZKOTN6cTVUaG00aG1NakZpMFBmUnJjNjR2SWFOWnlSa0p6VGxMMW5DWlJkUkl0aWcyTVA4Y2hzSnM4dXVDODdXSnZ3SXlSWDZ3TlhJakhhdlBzeDZ5Yk96cTVUblduWHo1akpaK0VYa00waE1ReVdKclROZWcwSFJuQ2wxeldBNkEzZHZvMTBWUWJRMGlQYUpwaU51OVozb0RPMHd5MnVZdURncERmUjQxM0MrbWpZVWJLY2NhakVVQ0NPazZRaisrZ1VSTHRZb0N3MC9mQzJiYVg4bHRWbTF4ZnBVeVF2Y2hHcjhmc1dxYUs4eFdtbC9hbytDaTZuSlJtcGxxaSt1czhVRnhLbzlRbDBrSmdEcWt4RDhxbzFlNVRDQStNcExQV25GUUxESFJpbCsvaVNuTUZBRGVvWE9VdGYzUGFMQVVhT1lOdUdXVUhjQ3FqQU5yWkRyRCtLRHRRQW9uNFpRRFlrUTFBd0VGRk9oWTR5aXcwci92Uk1qRVBlTlMrS3RXay9wdkVRQ1VEc0dIT1Zoc3djdFcxdTU5UTd3bDd0ZHAwa2NNa0RhQ1dkZ0xKWDN0L3JCcG1VTElFeDlPaFRTYkd0Z1E2cjFKRzdoQXVvcGNRdExFRGhJZmxBU2luMklOTUxHUkh6b0xwV01qWFAydXNMdjNMSy9Xb211RFd4RWp6eGgrS1doZmVaVVYwR2ZOY21RZHZrQTc0b0NzQ2ZmQStjbTJuS1V3ME1uWEMxY0ptYlBncFhwbkR2dXRBeERwU0JHV0NCT2NScllsOVNkK25HWWZvSU9zT3Q5dUk3MkFWMG9nNVl2MnJUTVNMUUdXSWFxblMyQTZYWGpSU0tweFkxWDZWU2twVnZ2L1NBWmVIUXVCMTRvREE4Snl6VjVYTU9NUFVxZ0N1Q1lveDVEb2tIL1RUeEJiaGJrSmk2ekNsNmZvb3FETnFoQmNreVNvbWVRVE5OVjlxR2hrOUVVUXd6L1VGODZ4OW1Pd3c1dzhEYnBzeUpremVhVlhKUmRndW1sVFNLbGxwcXJObHZrSGMzZUtpWmVlNXNnMHp2YnA5a0VYUlpLVjExdzZvY0NNVGJlM1RQWExUN1FpSUtXZnZUWTU3Vnp3WC9GMEs4WlUxaW5JcDNodW5WQ3dZdlUzSzBZaERpZC9qS2xRM3BocXR2aTRpUHNERUlsZFNkQTNWSWxiMURCbDZSRW5PNHEzZFhRanRDUm42eUNhL1JjQkxTeXQ3T0gvRXpwZktzTkdsWTNuUGpqN1MyMFdHajFEV3hTRk9oNWJtS2t0ME5oY0Z0SnQ4TFJtS0RJNUhkYlZ6Q2VqYzRDL1hMUk5ZbGlJc3hKZEkvWXkydVE1cDlpa21KcFFhQ2o3bkxnUGFraFlXSEZGYnVyYWVVWlc0Uk4rcHVOM3hJSTZRMjJtdk1SNi9mRG1ReVBYNWh1WGdYYXhJWHdtaTRpbjNzUkEySXZzNlpyQ1QyOEljbDhYcnFHaC9MdjF1OFZsWWpORmxBZnRQbW5MNlNGNFNWSmp5cHpYMkR4SldvVzV5QThrUWVIVFVab3VINXR4aDFRYmV4VWpuaXI4YkJLZGlubkNWZ0VNbEpKaURRc1ZJZ3pIdkhZSG9nc0kvREZJTkc4VWthWFFXMG9nTVdTRkRFQVp2cFBKQVRTSTVXUFAwa0V4R1NwTzVJalVGdEszZEY4dnI5cHRUa3NkVnlHOG11dzd0TWUvM1BvZkFvRmJhMjExMnlyVC9xR0JQcnZaMDhDSU9OMW1DeHU2b3lKQzFucXRlcVcwSlg5c1R1RVl3R1NqQU5PT01XcEl5QmQ1eklDb3FFU2Z6WDk4bE1EUWlzaFlGRXllQ2VkNDIwRmsyVFpWUnhvdXlncWlrTHhPUEdKSHFlL0xjVlc0ZVhVbnJVUnVhN21mU0QzUVBhK0EzWlIwU2lzTEZGdzRObmlPTFBVTkRHSEcrWUk3VGZlc09Pbk5tcDFDd1pkeHpVM2RvYmlOcUl4Ny95VkEyTUJXZTN1VnZ5MXZqL2MrajVpdkxaVU5EQXBKN1RmcUFzT1phVWZOa2FGbGp0dFhvVkxNTWdRYnpJMHUySGUwaE9aUTRXMXFWa0ZWejBxeVRqbXNXUlVwSDBYZnZuODVPSEhWVmZlWmdTRm5PSDVGbit6dlZkYjF2ZzdublM1ZERWZlliWjhybXljUmlHczhzSEFxRzI0Zm1qRGxiMlVSZVdRN0Fna2RaeE5GZ3hUYnRmZ0YzdXkwUVdHSEVuWEtGQ3hsOFRhTEthTHJtYzUxWHFiS291c3lnK2E5dVozL2RPaEdJbFRyS0llSWJWT0l1aUpZd0w4N243MjM4cXh4VWhLTE5NRncxWVBPclZKcGx6YkFDTHdMSkN4RWRjb3hTY25FVjlCWFVCKzYxcHFIaTB6TTc1U1pHNVZ1YlpLWWlVR1RvbkI0SGtnbFA3VFd4aVVWRm1ySnJBalNYaXN4a3BJZUxDaUc3a05ua0ozY0dRR2JudHZ4MVlKZy9VYTZrRkJqQmJlcVdoOGJWMmFSaXBrMWFpditFK2FjMnRxK0t4ZGw1dnU3L3hOWWFwM00yc1dJZk9xRFBjaEF3NzNuSlJORzV2aVZoWExTZE5ZWUJ2UFg2Zm01N3BiUjIxbWtxMWRaMXNLZk5xYnRyT0ZjQjgvaDExSDFNdWFaTzdLR0ljM0xwajRQV2pZQWdLRTVCTHo1SmVvVUtxYVYvcExyUWdPc3lYT1QvTzV1dkMwT1VHcEdROHV3V21FNVZrQndwOFRqclJKL1VCMEd5alhXd1Z4UDcvc3NwYWl5NzA4SnZJQ0dVMFN1M202R0FPU1RxZVJabVptVUI0WjFTdFplR1Z5UzZCN2F2enhKRWhESHBrZVNEb05VNGhBTmcxcE9EUmEwdDB5c3c2TE5nVHUvWjhDU2dna0dpeHlEOW5kMzlRVkdFRHE5bWNQZ2RsMkpSOFlwbDU3ZGR0NWphYnphVHhsUWRNTVdiWUR0cWd4YmV2SStubkp0Um0yLzBPeFplSFptMk1QN3FYL29iOVRKNDA3OXZjQ0RBNUpLblNRQzBlcDdpcG9BUFNCb1dzMWxYRFZ2MkluYnJHbnpJeU5lSmd5OGlVRk1yUjZINnpBMzhMNGYzMytxSjFqb0JHdFRNRlVHcGdXaHI3ejN0Lzc1bDhIbXE1bzdkMGpMNDhyc3dDL2dvaXhhbEdsN1Y2NzZSdG15NUZQeittdy9PRXpIN1FIUkU1K0J3Q3dWVVk5TlZxVEFGcXk0cWlmVFZIdEJGSUliZUtHeDJEMmQwSFlZNmdPb1NrdUE4cmJoLzA1UnVOaXU0Nm9talNwYVZQVUM1VXZPMTBLUGpZL0JxcU91UDRTbVhEVXlkVVFDV3h5KzZyTEFsdUhxWVdaSnIvREY3aEN2Skx2N3JpKytnNzUwdEJXUjZKMEs2YURNd3o4T2g3V2hGNmIrQjlvdHBOME5vQ2h2Mk5lVEpVbXlhbGFqVDRqS3Ayc3V5SXRRMmNORXhJYUk5cGRLMW81aXo4SmFWN09hK1ZyR1FZNzdYdlU2cTdySkJ2ZktNL1p3Q1RvVXJPQ25IL215c1BNYmJ5eHdXTXhscUJuOCtQcmlCMkFZYkpxVmRPV0hHcy9NZURmMHY1VWwvVXhDQy9JRTB1bkllNkk3UklOM05WUmtiUFpGODNrK2oyanRxUkU1M3dQQ21NdFljbzczM01vVWh6UktwV01wYVVPcFIrUXZqRk9hM3M5bDhnZ2pBYTQ3alU1ZnZRbWUrMHNBKzVIN0dOamdpYkNzazZIQVVaTmhIQUZPdkdDaTlPeUNHWHA5R0J2cTRYdENJZDVuQjRwVDZFZlFmY1VIQXRjaENVUkpYcnRXWjdpcWp6ZnkwNWtPbkJMb1ZCbUxGOXJnVXRoWjU0VWcvSTBmaFJCekQ0dUNIczdxOFlmaXlVNjBvOXB4RFdVR0hOZkREcGxydHNhNk5nZlpGMkQ1RWhJb28wcWNJaUJScVFxRUhEdTZjbUE1MFpKcEZuVml3TFVSTUxxQWF6VStua1Zya3BGUUJFYzVIN0NrVVRWMlZOTXFHYlpReEVpOGlDRS93RDhZQUhUelZIRGlhQUJzYlg3YnFZdEFyYTQ4Nmo4bGlKT0Jlc015MnpOdE1MNUZXWWcrei9DVmNUakVKaU9DS0d6cTAzdzRKeXBCY1UxZ1IzNlQ1NUFmUzNic25hdmhIUFVyY29ZRGxFSks0QXkzSGFkYUdwWmlyVHJFYlFiU2krQlczQjhjUE04TWtONmhsQVVXWmp1MkdjNFc2cHpKLzFKK1dReUM3K3JSSkpRRXVLZ3MvUlRlQXZGbjZwbzFFcGN5TDVzUm1SMzRNUlZZL3o2bjZraWxUZlhqeTlwMDR1UDlVMldmVVJTMEg2Tk1wK0Fqa09GdUEvVlhHeGJrUmh1TFdrdjZyUGR5dXg3R0RwMnJ2bHpleFNJTHRIclN3R05LQ1lNc1I2QnV5aithNnd2L0wxQktVZjlsT1VNOXdGY1JsKzg4UUNRaFRTRGhndHBxdlFZaVczbmJlMmhyb1lDaHpGL3Z1Y0JJOHEyMzNuQ085T0FHbUJqclFPZ3VzbmdYY2JycXA2SGp1N2daQjRybzd2UlU2eHdWd29NUk5JWWx2a2UvaWZ6cTFKZlEwa3hLSTdXblJVVjFnejNoZkFORG1oblpDdGRUK3luTHIyRTBwbUtRcllGR0tHU3ZQNExFbkdUY05VbndvaDFOSUgzbXJKN1RRb1kzbHhBZFVNbHhaaEFFR1FIZVRrbE12dTBrd01wM3pjOHRmazVHdXgxN0ZacFZhL2thWlZzTGo1b2JrWHpMWk5Dcmg5YmNKNnhpeEk0cTgzdUgvbDFJaU95YzFhWFFyQlFWWTlmOXdWWk9wTnpqbWNXeVdZRXN3bG9ZNHV1ZmlkOUEvUFppbTBYcFRvY1JibVJLTWlKcjdYb3pjNlZZNjRQMnpOK3JRSndkc0NhRlZHRGpOVVNsenh3WjhlVDU3MVplN2RFZXRGTHR5TXNwM2s2YUZqMFlSYWI4NXlseGVGNUVTQmtqQ3VIRTZJZmo0dlBGSWNOT0phWWZqbkNkSWtMcWNndjN4azJEcmlpMTk4L3pmV1FyakJid0NpZUl6dHFWUFdDRTdsamV5OEFoSVZVN292cnZkakVZNGYwVVVtOWdPSjg5K044VXhJWWZpRXdiZFJLVUlyMXQySENGQ2o1SEZHY1BocXppZnV5U1pjZ2JhWC9ldis3TUpiSS9ZQ1hGUEFubGxSaUJ1U0trWVk2Tk5SQ2t2a282SE04QU41OUl0V0FTckxVSjFVYU9ZM0N1R1pzc0g4WFI3M2xBL0k0dnJISFJab2p4ZlR4ZXFKc1RHMGYxYlpkNUlzbzNyVElQMjlLbmNJYUNPTEduVzJYaXA5Vzl2QktoRm56am1jOTEwdGxUN3YwOXFHZ0kvR3hNMWRwUzJxSkVyS3VUbzV1dXBoeU9jTXpSbVBVVXRKbEI2VTVPRWtOK0dJQmlCeVBJVzQ2ZTNmVjl5T0RRMVZyVmtxRnFaQlpwWXd4eTlKQ0hQWGgrZmhoaE5TV2lZWnQ1YXVUT0FFUHBvanYrc09YS3VQOTF5b3gxT0pRTzBUNmJKTGhVY1pOZWYxUHA4MG10K3c1K0EyVWZvcm9XVGowbWJkaVB0OWFsSGtiT2hENGhOM3BOQ0o4WEFyUlM2S0ZKUzArR1ArNXdVaTBVL0p1WEtybGdhaWFjUklOMFJzaFo3S1U0TS9MZTNZYjRrT1pDdVFkd1hxRGh1emNpVkFDYUpYOUdlSVNubWRySVcyOVN2SHgvdTBML04vWXI1UEI4UkVYZjR4Tk5hUUx4UW0ra2lvWUVYdlZkRis3cW9pNThvcjc5TXZaS01aYmdEMk5NYmUrdXVEVlc5V3BYRTcrVWFlWWlIV2dLdW91QXhSY0ZxMFJZdVJWcGVsVEJxUFJoeCtidnFTZ0syMUFZeTRRcExDR1R2YTRUakhiYVFUUndFS2JFb1lEMjdiUU45MWcvNGl4d3FwZW9YM0F1V2NtbEFFUnBwcDcrU2hxVXRDRUlTbTREdEtNV1NMQUZDcDJmM3A3UlU4MGVrWXhSREhyc01DQlBGQWVyWmJiUnZtdnNkenZpbVF4cFcwc0RENGR2WkZzeXQyREJmbXlpVURRV0Eyam1xaG9pVU52MU15dVQ3T281VG1SaUtJZVl0RGF6c1gwUHBRK0hmYW5FY1B4eURoQ3pqaW44Q0p1dE12cHF2OWl3QVBHUmNaVXVZTHhheFRZVmZ2ZlBlNW9mdDkvNFZSbWM0MnV2RGVZYitrNjg0UXljWG4yMlo5MjBoQmw0SHFyUXA5NWpYaXJoYWxiRk14TVA5WHE5bXd0WndVTVpCdkpGTWZlMnhpUDQrMk5ReGFYcGl2ZWRHMzhSTVdUVHRZWHpFN0c2UlBjNWc0RU52N1VYbnExNjZDdll4L05ZcDBzdTNubDZzQ3ZsRTJXU3V4TVcweXhIMzlaMU5RUlZFNzdEcDI3U1VRRWo1c3FWVGpzeklBTmpROXVDN2VXQ2RGUHErdVZ5YTRjSWdRS2FyNFovRS9NSkhlTU5HR0xpUWNiNk5jdkwyNmZXTVJDZWo3UzN2WllRdk1FTHQxTHhXMytTWHZRZHpXWUE1TVBiNHgyU1EzV0tlRW4zdmxSazFXUEQ3bUltNFhrcjRrbnh5ZURyNGZIY3ZVNnZRZGsvbzIzSnFzcXFlRWRucjhGVFUxMXh2bFZGMFFJOUx1TG1pbVNDWkpvQ0xtaWFVK0YxdmoveUFNOE9ncENCTDZPT2hMa1NlZ1V0Q2ErbXk5Z2wrVnorOVBmd3lZb2diRVdSbEtlVC9QMjN1Qk5sOWxmNTV5MXVVc3JlOEFxQVdCai9KNmtzWnJVeWxWSGVnTndHbXlmbzNJZlBmdTBnQzE4cnptdVUrck9LbWJ4ZXVnYWNRNHIzb2hxdmVQOU9pT1JHQWlmMWVlWjdFeFZ4T0NjU0VWUmRWSW02WnJtY3V6d1l3TWp6dXZlY3VxTWw4UUkxdzJuY0lKcDBSTTZFdDd6N05Dd00walorMWlxdTh4ejdPS2Z5ODV4VzJBWUtOWGFGcUJRRzBEQ25tclBwSlBSM2JiTXlkUHpFZ21DSkpoSG9ScmFMcVM4UnBoYmc0bzE3THczN0VONUE1b2MraUdOeDVFRzBBdmdTM0ovNGVRd0R2Y3hPMkkzaXl1MGtpeUZ6NUk4RVJjZzRIR0wwRU9YaytDN3RkU3N2d21JTkNzZUVaaHRWMlFhSzRHODBvRVF6U09jWGIrZXU1SmZqS2V2YlFOY3U2UzIybW9vOEtWaGR6QVVscTI4dlY5OXJBMWM3N1cvaGhGK3lKdzVXZzg0dXlLS3dpZGtLSVRjYzd1NkxFVXFZQzNVdXlPN1l2Kzg3bnhUb01wSDlqY3FXNTlVU1RjeGRhYjFOK21NbUFIVS9qNG1rWDAzU2dzcUR0Y0lHeXpYY0UyVUhvQ1FLRGNWbDVVM1ZDR2NtdnFLUk43VTE1Q2ZrTVlJSjhwVUZJRXdiZ1h4aHV2YmV6bjRtMCtWVHEyeDNRU1ptekxOc2tMbUIvSzV0ckJCTUR4MmhDeWFlNmtGK0JTamRNOWUrOXhoYmJIRTIwQW5oRlJVZVpXLyt2bDEram5YT0JzcVpvL3BKV0xBSkI4bVVxaEZ0b3pQNVlzbnFCUGZWNnBkZXd6RVRaTHBkeTdWOGNHSXoxNHBtU0RRY2NrWlVqTkVHa2Z0MWlhckwwb3RxWTJBc2c2eDBrem5UcEE4OVNDbzFCMUVJM2M1Y0tLZzN3blJlanJNR0c3ZDh6SFBraWw4WFBIS0F1dHhwdW81UEZKbG1VdVN3RGwrbWtmS1Rva0ZoMXBFRmc3ZHJLLzBkRG9rYVg1RGsrZmJlSzhydGp5cnFmNWl0SDd2Z1NZZmhCcEV6eVhkaWlCY2FGWEpaYlIyWnBMekdlRzBoUWc1MW1kNTMzNVlmVVc0SVJVSklxTmVndGRhamZHMnhKTWRtN3hkbEg1dFI3ZDhnWFVtQjluQmlldmsyNWJ6K1pCcis0QndHUm9iZmtobTl2ckpQRmRPRVJPbVZVdEF1c0c1YVVJMFRyWkNnZCtzb1UyeTVib2lCeG9xVDAyK0szZ3pTcmZXaElGb2ZJVmpMbXRYbDFWc04yalYySlRTa1BQVWVPbFVCSWEvUVByTW5VLzhFeWNxdFNCc1NqN3prcG1jbko1RGNXc1VTS2g1NkorMXlSU3FXenlDclBZZG5QVllSVlZQSThlUkVmTkhqL1JtWFJzUmVoaWZKVi85dzJyTDZmWnVPYjdnNFpUemZJbHluRHBKWk9IdXg1NE5LNnlDTlBGUUZXYlBSUzBWQ3d4WmwrNXozQlNJT3dRVDM4WWluQTZidE00aFkyNjUvQi9zR014dW85K0VjUjlJdDJPL0lzSllYSWNLdU1qK3VKM3dHYzQ2SC8xR0ZqVlJQZU4rTCszS2ZmSjQzTDRkS0NiYjJMdkZxblBvNldNQnlwVWJtV1ltS3hDeFp2S3Eyd3BKQndZZEltUWZIZU51d0RSa0VaMHF0Y09samNqUUNsWGkrMXVKZWRqcGgrYzhXZlpsdUI2Q1doSzdPTU1Fb2V6VHZSZFp3ZTVYa3d4ZStmcmNSaVlRVWtXWFpwQklwcSsrbHBiNGoybXJhVkI1NTliTmUvVmgvYVY5NVJsTmNpVVZzVlN4ZDl6ZzRlT0FYQmxvN2FyaUp3dUo4ZHdJb1lnaWNFZ0FTUEdrYlFyZHNjNUM5UFVHYUs4Snkzc25ldldtd1I3djhxSnRLK3B1bEVyODRoT04zWWs4WjhuVjNFaUJZTVVKZTd1K0QrdTRYb05KOW93TVNqZFJJOUplMXB2cmdWRnBlSCt5U3cwazhOMU5JVEltWVAyaVFRblJ0NTRDci9KSDJFanNUTEUvWlRpUllIT3dUOXVkaHgwUDQ1ZHExV2hRb3IwUDhlTTZKMDNtRVcwSVo0NlVjQmZQVm5IbS9oVmtnL0hoRVZHcVEyVEN1Z003UW1hK3VkQlYyT2l1MkdVQ3VWcnhjc1J2NnRab3VRWjlheUEwR3ZoWUJFQ1NmdlVjUDI1TUttMU5idmU1ZGNzVm5IdUhjTTFHc00wQUVoUitpRUlTZnl0R0JZZGc2b2ZuL2R2ei9NYXBtcTlCSEJqUnB6eWhSSU9vZEVNRFFRL2ZBR09XZllmRFptU0ljVXN5aGdidjhTNFpXQkF0c1RCQnF5Y0l2UFIyNjZ2R3BJa3JIdUUyOXNGZk1pdDkxTWM2YmQrbUFDWjVRdmtOOHhLd2hiUGNOc05DZ3lrTGtneGpTbThQVHhTWEc1YTFwK2RsUmxiMHQ3VUcwTGdldlViNEkreXVJTjZ1bURoTVVtUlZ4clZmL1ZWNlo0UWE2UENLWVdzbHNPcnZneVBpdkhoNFN2cVhvNG9zenRTQlkyUUNscXVIL0RwazlTQVE1WjZMUTdnUmZocFNjaGZDZFVDdWNJNGgxWFJIUDA2NjBLNWt2YUI3N1JTWGNiU3RVWEFvTlVKNUpCWU1XMiswUnJwcGVMejdTdXQ2UHhJbWNRWDlFVGQ2SUhuZmNnMm04QVR1UEVObXRodzdveURvbEl3OTRyS3R6NndxU0JBaklZemFtbGZScnV5ZnI3WGJ0M1lIVTlEZjN0Qm1jczdCUllGYnpqTGt5TVZZTDVsSDAxUGFxaFdZRXl1YUdCMmllZWZxelVYK24wOE5mR0hXaEYxbHprdlNzaENodEpCTWhld1JFWWY3TFpCcjcrN1B4NzZyRDNsSUVEMmVuREhIOWRpY215RERoRGxQZ0FudWQvYVNpL0Q4N3FwNGEwWkFoMlk2REJpQ2xOSUNtZWNlYW1FWFczVy90dU1jNEx4VERYbHBRc3RlUEUrODhKMElCRmlYaVlhMVN4NERDeU5JUUEyai9ibU9LeUN6UzNzKzdCTGxodkVLTE9YNE5oUEp4QWtrdEExMmFJRUtmUUpHZDFDM2w1ZjdDQkFES2VPNUZhWWVxbFpWak93bUFFWGUvNU5SOXkzNmxLVFkrK053cUVTY2xLL1k1V3N1QmRBWHF1R2Z4cHVPT0RHaUNROHU5eS9rRHV6RExQT2wrbFBhTldlZU9uR0NzcVdBOFdiblFETzZDMng5MGZqZTFTMU91eVNKNERsSVpWaDZZY3hXeURsT3d3Nmt4Q1p4WVNBd09oVVU4aFJuRnA3RzdqeXlSQ3RoM3NTRnU4bFA1ZklDNXJnZVpnbkVhc2dneUlaVVRscFI4dC9PbHpOc3RLZVNMenI5SWpXbnN3V1RBL3VrQkZnaVBDZGxxb20veHJmNktGdm54WTlFTmpZYmUxenhodWlZUWd2TUh2U29FR25MRHJrVkNNMTZCeWlkbkZBbFBia01jWGpHdnpXcFBBS3lTVWhZVGQyUXVwZWt2SGFSazR1MllhMlNVcU4xN2FUWjUrMGRiREhFQUV6WmhTZ1J1QW9pZDhyaEZYS2RhM3MxSkdWbWpXclpRMlBwZFNQWnBueHdJL2VJbzExcjdpTkZyRndmQ094em9IVTJlSXFmNE9mZWZDWkZZMHBqMnh0U21XUEpETkRHRnJ3dVpVNC8xNmU4V29OL1llMUJzNnZIblVhdHhDUXM5WDk2dnRHTm5PaEdFKzd5T21tTm9XbEFRbGNwZHRZSHNRNm1TeWdaTnh5b2ZPdjI2SjB0S01MWXFKRUlUNVNlMU90TldSd2NMQTJpMWhIUUU1TTJjalhuYlV5b2xOMUp4clE1MVdOeUdwT1JkRmRmSEl1aTN5NUh1MThva1NVak9heFlKVTNDNG1ac1oybFJyRG95U0VmMTJDeVo3eld3NHpnelJpeUl1dW1nV2tyODlzZXN5SDJFQXR4VnNraHNablVmdnhNb3Z5S2VrOUNZS0hFTFZ5TXVuWUtOUDV5NVFUVjFDaEdIUlVCMFVsZW1LRURMSENZYXorUnpmSmoycEhxT1BWZFB3cDY4YXNac2RrTVJuZjBRckJvOTZ5SStzck55cHU2OG1ZNDRZL3lCSk9SK1RxY1JmbXNxTllYeUlqelFkQXFTZm5HWUNKQzBrWEdlYkVBcFRQY1JxaHo1TDB0M3ZpM2NVclg2NkdxUVlXSU9sUFFPRkZQd0xnVll6Z20yK2VveVpPck1CdkNlYlQ3Z2p2OVJlMXRlYzZhbS93UG4rYUtXL3h0bzQwMDRrR0pZM0JsbXdtM2lGSnl5RWVKN3YrbldZZWtrL3U3OEFqcGdMUFQ1NTFqaC82VG94NjdUQ3ZkTEw1ZGRlOUNBeldzWWZpRmIybHhZUTd2UitSLzVtNWdlcGt0WU11NkVqRTlRbmUwaVVwRCtaWk5aT0duTm5PeVNMWXYyS1FmS2xjbHBmSzhCM2l4WHU3M3NoWllwb21TUVgrMUxhSG1SSUVWcVJIeHc0ZVFjd0wrQjJmclVkVnNrRnFvY2g5dVRRWGViQWdvRExEQ1J1TndIQVNLQUxmR1R3MmdmTmFLWHhPMVMyVkxSdGV0cWgvVEVaeklXZEhLc1hkY0ZoK0F0eGEwMjV5T1NVcUY1dGk1N2I0S04raGY1MW1VS29RSEJlZmI2ZVFrVG8yOGZNbGtDaTQ0bEdxMDF0T1p0czV6YW5yVXVQcllGOFRFRDJBZjk1R0FicTcveW1RQ0JzTytCK1dMTFVyaERsa1EvZXBZZVgrUVdMMGNMdWVPTHR4ekZoNi9TdVhMWTFMSzF1U0pnQmc0emc3a0p5bnk5Yk82YXRpTC9QMjB2eGxhRWYvZjcwY3Bqb1l3L1pwN0VYL3Q5NlNWWjRiL3FVTWNzL1lvZWdGL0hsaHRGM2hUbHhpUWxUbzdoWDRPRkJPQnJIOE1JS0swVjNEOG1NdDdQMElWZGJJd0UrWXBYOHFnVG5hblo2TS9nN2QrOCtxWkxhUDdQdXZkUTlrNkRKU0hENGFnYStFK2xBeHlZVm01NUdSSTl5VUJHc0ZYVGE3Tm5mNTlFendPLzl4dnBUbmpObWp3cThDN203Nmh2L1kzdm9mS1NhMDdvTk55V1liSC90cWlpWnJaYVNzd1phemhYMHh4TC9HRmtYcFFQYnJxb1FOZEk4bHZJWG5MejZxQ3hIakxKRG1tWXlCMEhtc0dPcUpDT1ZFT2dGK1U5SDNyQ2JWcFBWZW4xYk9TUWdGTThKMmcremZHU3NmdDcrMDRlUW1HbTZEd1hZeXkzcTZYbnJuN2o3T21XUjlUQ2s1a3FhQkRuYk9nR3FZNHoyUmVQMW5GNDkyVVR0c2RVaWt3MVJ4TFVvcWhhT3M2NXEzM1lzK2gzY3RsbG9XVmczZ1hmYkdWUHladGVHNUFVbWhVVWgvdU9BYy9FNGhvaXBsa3NuQTRkVUJDaDBzK0Nhd203OHNwWTF6S3ZnRHQ0VTA2SEtteEdqUmRFcWlhZDgzekNyRy9xcHNEcE01KzhldWZEZTNtTWd2YXBUNmtGUnN5VDRGS3FxdHVBRngxVHNZOUxzK2dlTytyQ2RZcFViRklyeVZTdjhVMlFkdjlwUjBjQm5ncDhnb3N5UTd1WlkrckFRQzgvT3lRQW41NmV0S1NMMWR2bmJ3VVc5eG5wcEppeStINTNVRnhESUpCWWRYVFMzRW4rbXFTNTcvd0w5bHZoQmdFY0FQU09tV3Y1Rzk4V3daLzMzSHpqbWU3anZOVjVXZWcvQ2o2QUVMMXR5Z3AvRVN0aW91TWtndytaZ08rdVp1MXFoR0duVUM4WW5CVmVsay9HdkMycTJNZGxTYlBWUTNCWDBWOE9qUnh6ZHR4S3NUMEdsUGNoa3VEWE1IakxlYnlLWmdQdU9wUVByZVRCbU5ud1NVSjUwKytFbXBFSkFSOWZJSlpaMk15MnR1ZU0zM0MzNklNcHVGeFJaaDFuNDlCWTNYVllSaFZsYlJyTUNsTkhtS0RUTDZubktKZDRIVi9GWityYmplNVE2dk1OR0hCK0NQVUlIblFIb0Rlb20vaXNldDBmOWxFbVB4SXVjSVpnZXNaejJad1M2VTZJdi8zL09KN1lpY2VIc3hob0xqeUVXT2RHdkowVkI4YVZmamJJM0pZYWxXbUVRUHZwa1FSdWg3S2kyVEtQUFBic1hSeklvMitBSTNiU3hKVkk0MUtyRHZiS2RMeTlrb0cyeWM2R25nV1NlN20wVjlDVVBnY3doS3lsMGQ2K2Z2cHltbUpPTTZSd0VoS0tyUm5PcUlDUXRrdjArTVpYZTZrbDBUTHJvM1kwMGxwNk5RbXJLcVZGdjlWZXdEVEE3NW1KcldZc1F4TFluZ2ZLQXZzUkI2N3VyaGtvTXF0REJHSzhyQ0Z3blhyeVVZdVd2Q3pWY3JEazNBTEJJaUlCaVpmRzJhSkRBb0lSdW9Sd2RVdnFsZ2lxNStxbDVWZ2VtTERYRFIrUFNTK0Z0cFk3eTlERktLMGdtbkZSN0FoS25FN21oQkV5RjBRQUs0Q2FUMVJ5WWhFcXVjY3N0UnFXbHY0TUNaQVVpeUxpWllOckE4WGtuMGw0OHk1bWhoOGpIMlhRWlVrcG9oQUlkOVo4N2lkS0VJSVEwUkhjeDZnakZ5UE1PQ0p2ZXg4anFPV2J4UU9yRTFtVko4eDNVZ3Y0YUg2ZU5uUDRMamdRWnNhQ1FCLzNUa3prNXRFSUY5OFRUYmlZRmswUUd1S3kxUmR4aGdJQzl0Q3RJb3F0Y3JIaWhhMmdJcjdaMlFXRFZheHpYVXFNMXhzTnVKYVBvakdrK3RvSkJQRXRRTGtMa09mR0ZKNTI3WENwMzIrd0kyOEVXaE1QZ1g2OXdVd0x3ZnRzWWpQSGpwdzUwS082Ujh1Wk90WlB2WDBNenV2eERWUkRKYnhwN2F4UnE3TzBRalNFTnhxOXkweERlaThQcWJKUDVpYzQwVlgrbWg0Vkkzdmlzc1RjWExuRzNZbFY4a2xIQ0IrcEVDbDBRd3FzMEpqUi84MHN6bXhjOVBXaWlhbUhteS96ZDcxTnpaZXRRV3dPT085QkJLVm5VYmdSUnhRVndnc2N2Y0JER0V2WGkzazRGT1hDRXdOQ04wU0lpZnBLWTZUUFV4VmRjdndndWd5TTFVUUlMcEpSL1BLWWdHOVQyaTRJNWhpQnZEbzNvTStZKy9kYTZ4TGJ6dk04b0psdmhUeldKM002SXBxbDRMT3NlSmNKZDdZZUs4ZjFpcWlTMU1VQW50ZTVPckZpQmF5SUpzNUVHeUdoekZtaXJwRVUvNEI0SFRHYlo4R2ZDaDU4TUN6cGFoVHNCZmpjRVZheXdnYzRYUVFkWGJIWlJLVjdhdUx6bDVBOVBoMldZV3BRaVd3blM4U24rcFlUU2lYMXRzSlJheTg1a3RqWFNGVGxuU2dscDltNGZSQXBhYnU5VzlFUFZLWk9zbE9SZnlGYnlqRndoVmZhZVJmakJIWTd5eUNxMW9QNGx1WmhHcWpkcmk0Q0ZxNTRCVmNrQWpoOXJDU2libVNLdi95SXR5YW1Xa3h4ditQOThWNm9wREhxVnhwOVYxTXVlZHhvWm1IWlk5RTQrUkdBYkNLa3F0YnBidys1ZUVMZ2x0MjVzajVZY0czNWExWi91dTdyanlsTXVldWg5Znd2ODJiczE1eVd6dkhSUHpoMjdlTUxGdWp2ZWlGUm4zQUZ0aWFSQ0gwYkZ0N0VGVlBWUzJjRTRkMUdZQjBaZUV5Qm12aGUzREU1TFlycEpBU2ZMV0VwYW9CbGRJaTV4ZFB3YWxsMTJTNW1lbzV1UnVpZ05reVl1U2JEQjh0QTEzL2V6NTNPRGM5RlBGUDZhVVljc0Z3RkFFb050YndaMDNyeHlvMmpHWVc4cFpWeHQxWDV0a1RTRmRrWWhCTjJLVTdXSWpGSWNyUUl5dlliMFQ1U0tDb1REWm9OclI2aUVyWW55YmNxV0ttdE5oenNHS3cxM1l0YjZqL2FUY3RKU2F1NGs5SFBVazUvZmxPT2RNSXltcStWeFpaUmQrTEZlUDZpK3Q1RVlZS2tmYURmKzdPdWs2TzlRZFhqVlo2NThUaFo0VzFic2paZlQzbzFrMG1BOE1WeUpyMmMxN1N2SEFMOG56M3lZbkxVZ3doemZzR09iYUEraEJHSDAwYTc1dG5GbUJKOU1wYTNjYXZlYjdXRkFLSkRnWHlwTzhJZjNVekh3RE83dUpzaU5IajZMRUI0QlNRMUh4RGVKUXFld0s1NGpBUTdjN1dxM3Y0M0grdTdQaURBR0Z6THNMK3NIeW0xODA1cTdLdkJIcHFVU2FxMEZ1U1k5TlFSTEhqUERqOVpaQWpVdTQvdUhlR3kyaGsrdnkyNVkzeVA5c1NiNzRPZzIrMUljSHoyTzNrMkQ3N0pTR0owbUV6V1RBZndJRjdjNUswdzkwQi8vZ01wYnV5SXplL2JzYWtUbUI5VVkwTUwvQXlBWktWQlRZMGNucmtPaTVBSWNkZlV5b0h6SHBsdTRaM2hlZW1qWTRsODNwak80S043T1RkeTZFbjI4M3dibU5aNm1Nd0NHaGc0eHBzTldDa3h0UGxhU3Z2RXVTSXpnVEs0S2kzQ3JuZSs5UlpFd3RUVHpWckVLaGlac3RkSTQ3K3FpNCtad3FQYjR4SWNSYUwyMVoxV0NHOE9NeUJ5amp0MGJLQjJUTVFzcDRtaXFhM09hU2NWVTgzV1BBVmRHbGU2MS9FVlI5d2RoUWJFK0JvWUhQSTE3SHVKQ2JTbEtPYmF4TFR4aWFvRkVLZ0I5TElXUnQvSE9iZkJPWEpwbnk1Y0tGdkpiaDA3alJmOHVuam05aC9zaWtKNHNrZ1VnTHU0enF3ajFTTjZxOHVZNEtKRUluNkZ6RVFnQzhDQ3BFYnVTUndldFVmRzBmR2prNmt1UGUwQzhxVHBLL1E3UmlkdndPY1F5eDF0V3JWaWpya3hNTzhQZnNVdEVsdUQ3VjdUUzUxNExQcDdzYmZaWWdycjY3Vjg5UnN2ZWN1UHdKbUVRZ0tLa2RFQXVSRFlqbUM1WGtmYnI3M0xTNTA5U2FGNWdPeWNtY01vb1hNcnZCQnR0eU1Zd0VVaE9QNUxZd2s0WXZ0QVd4RWp0NUVlYjFLU2JTeGY2WXRBMW1zWG9KVGhFVzBqNW5OMzRwTy95eEhoSHorUEpwNWx2T3FqbnNQaERBWDhwWVk5WUQzYWNOSVFDTHVNOUxVMEViQlB3WHc0UjlHMHF4TkV2MTZDclRHTHkvanp2NVdKVXhTVkZoSUhMaE1xb3AxbDNpZmx1cDkvRTF5dDNBRXJYRU1jRXArNWgvZ0d3a3ZVNmlocHhCc2R3cWNpek1KdSt1cExoQ0RlL2pUREpsaUNKa0dNTjJWbHZvYlV1WDRFM1dsSzJDZnA3N0E0bUJNYWZKTnM4TnRmaHNYckFqMUxGenZHZlJZMGtmSXhFRXNNU0YrNDA0U3NicUlZTUFsRjJBTDJaY25pMzd0b2RkQ1kvMFJxd3hLOHNTRWdwUGROY3pWSFIvbWFycytrekhyWXUzakxraUtWK091MklKc011RlZWZWliSWI0dFFmK3diTTBNRFIxV2JNc1g5a3JDM1VVOE90aGxQQlF3ZEZVM21xT1VBeXpnY0hUa0J0L2djTzNkTzh2UkkwczlnT29nVjl6SzNmdFJpMnRNUGdaNDJPS1FmaFo3c0NYN2s2bnVvaVNTRVFFa1lZSmVnL1V0eDQwbkoyelNSMldkejJ6RzBIQ1N0bmdJZmthSStaQU8vdDRaSldSL0gyUHlkallJVjd2WDlWZ1VoUEZ6bXNlQnhXY3JhelNnaUJQOHZ6VnJWc0R3N2VnMHNOSVBkNFlpK09mUDkyNnE5MzdMMFdEUStYQXVpZ3FrbmpwTS9XT2ZRd2pxQTJaNXdXM1RlWUNCVEl1K1U5YU1HTDdWMlRqQ0p3Z2VXQmlCeGEzZTI4MjZJd3hsQ0VVT0lNa3lVYk83VGovUDhUZmpsVlcxcTJSalJjV3k5bFhCVTVTcnJLK21QbGpVcU45ZjFNUnpLQjZRa2VRL3ZYQkFpdVhpbHpGb2l1TExyV2l0b1hLY2p0c213RVNmWDdjdGVBT3JOT0RuTXliS1pWWFIwbUgreS9uUHZZYm9tOGxWVUlIWldURkFBR1ljR1YwYWRFeVV6bGVMb3BodG1POTRYVW1GdEJwZTFzUmo1Y25BaDBQWndKUCtBRkV1T2U3SjNFZGkxU1dpcXBIdzVMN2hDd242Y2VTQUlLOU4rcWdMdTNOdXB6U0d4ZkE3eUhlWUo5R28wK0IvMnBNUG9zemc3MkRkM0t2VUJQVGdiMi9hMlF2SWd3eWlObzB1T0VVTjdPRGpOWlBSK1hVclBLZXpXZXFIY1lEUHJ2K3d4cGFqeDgrbDFWS1V5Uk1MQ1kzcVZXNy9LeXZEVERRamNTZ3NJdjdSVG0veHRxTnNmK0V0UldkenhxamVKZkhDQjJQWjdveldhcHpWeXhtM3pFbVRZUGhSTmtBWG4rdWV2L0VWaUdFdDB2VGRrYXhpODN1UGdCU2VaQ0h5a2g0VUN6N3V2VVhkVXBvbEVSUTRjVTVseWNLRFAydzBwU1poS1crNEJmRzdXZHUvM3laNkVrZDQ4dWYrN3owYm9ETmF4VmxGR2pJbE84cDhGOFM2cnhJOCtsVmdmZU1wVk1jd1lvZ2F0QXVnaDdQRmxUMXpxaHRZMXVpekM0dG9TbzAvck9lbXN5b09USlNBSFhKcVgyYU9ZcFBSNlFWcDdVQXpRWmV4OXc2TFh1aFJqRld4VnIySmUxUVZpMWZuL1RlUks3aHBscG8xNXhocXAyRXJwQ2FHLzRqQ0hEcU5XdW5xUDdLOHhSeXVZekJSei9OU1pvU2h3NWo5UysxRUI2RVdCSUU4RFRvSytxMEFudk1jZGJnT0c4UFpFWWNlOWVHYWMyWVU4RXlyV0ZpTzF0bmcrZ1lMNHFoZWNvNzNUQ1JCTFl6Yy9yKzBIeHN3R29lem44c2g2c29LWll6ZjAyV0xZeVdoQW9BRGtGL3JQTmgwV1JaUGhyTDJ6VEtNbTJveExIM3ZQTkVWQW5lOHZJWWRQaHU5Rkx5Vi9jQ3lKakxlSXNvMG5SV3hublRMTDBmRFRRVjVBMk9JVkFlWUtqUWYzOTdMWC9IdFc5bnhzTnVzcGhKYlkrY1E4eFZua2pMS1lkRFMzYkxnOHZUTXJEcVNJZnFKeEkrNkpSSjM5MklTektITmlvRHpYQWVDRFhVNFM1YzRkYVlreGtZNkY0VHNLbjJFMjVPNVZBanFTZ2VtMlNvVEdidWQ5bGUyL3RGY0VCb0NteXRjK2dDUjEvWk91eHpPejRtWlFHUjg5WEpPaGE5WXkrNHZXemRPaUU3Z2RNa0JnRExPa1ZHV013UExCbWdvNmJHaUZHRWo0U1hoS1Z5Q1B4OHdzRlNVVm9IUVI2bFVyaE5RaHM4RThYMm9JTUZWRDUwVVEvNG1zODY1emZoejEzQWRBV2RtZGh3OHpUaGl0RlRqcFlBbEZoRWZjREdjdzBVQmpxT1h4Kyt6a0xtdFBTSmVySno2TEZyckNkajByVVl5UWZGS0RkT3JaNEdUMlJ4OG1SUGhVbmlsMTlvclU0Vk1UNklSVVNkUEhLUmVyQy93eFZDTTVSdDVHZ1NPbUxTRmpHNWx2RXdhSXE5VVZLSm50bHNONTQ1K1V4N0ZXcjBoTTVxL2Fyc3NENnNaYzZzZTNzZ0paeHRQUmcxWnJ4dEUzc0RKeEtkSUZlcnVWWnVobGxTeWVLMkFOWFZueXBjK2xESUhlNG92Rlk3VDd0eGI2MWZzL1pUVnFCK3RVelhxK1NjUlhYL1IwekUyNWdQQTducjI2clRYVFUyOVRNRHNBU0h2SDZwZy8vUkhGTlAxZTRMOWlzS2FnSzF2ZjEwNklUQ0xPNjBHSjU3MUcwcTc0WWZUNDM3ZTJaMUpxTlFsRWlzc1hUSFhkU3QvWVhUQTRFanBTS1NVYXZZNlBVNkloWkR1bUZjRWFuMVJXMzFaSDZ6VnRNN051R2w2dnFqSjdTVVh3SHBaV1RlS1hZZDRBazZ1bkUxTDRkckZPOXpJNW5sZkRBVGRYOVRpOWd3ekdWSjAwdG41TTc3OVVTVUtURzhicFQ3bGYrcm05OTk0L2FlN3BXc3NUTmlsN2FzalFmZjIydGFkcXZYcGlPWkxpUzU2R2xycTQ2M1crcFQ0YzY5MTZ0R2EwT2NkL2loamxuak9Jblc2SkUxdVg0ZEdYY1l0bkNFRDROcjVzbzIzcUZUZmFFOG5yK0V2akpNSUNmMERTY09yaGtRWkxPZXhqNWRjSzN2MDErYzB3NHJhRDdpQmZRN2hLY21QUXhIUjE2c1RjSnIzSVdYMFpTV1FPbmlJUS9vcEt6Y3NkaDVhanJEZE8zRXBlMWhiMnFlY3lSYmdCRXNleE1XZzJYZVBoZ1dHdlBCZ2pMS2xGU3BoMGdqSFJLZjZtL0djeFRyRnQ0dmVPUnl6N0xFTkl3Z2lad1FRM2M3cldJKzJ6aEhINm4vc1QxcEp2TXZSZWtNdkFLTW1NRCtUMEt6VHUwa1hIdy80RGtNU2pQTjBIRGhuT3BHUTlkR0ZGTWhtSmJxMTEyeUJWRWQ3WTAwcldrK2RUaHc5SFJmcm1XSFYvOVV4VFBjM04yZ3BONHlseHhCa0czVkJKMXVLUFVpdUtaK1BOTi9xTWp5RXEvQzhqbm1BRUVZMFhuNzc0bmJaMFRzWkgxdjZtMk5uYkFvQ1ptcnY5UmRHelBXbWZndUl3RjErM1psanZXeWk2NVUxM25NbndIekdkbzdEK3VBWVRyUHN2cHhuK3pNSy9wUUNXVnFqSmJ4SFRNTVpkalRQemg1TmdzMSt0cFJjR1k5NWk4Ym5XeE9nYWtWVERBTTRqbEFJM095WlFYUE1tcWNaUVpZWnQ4ZjNBejRtcnJVMVMwTnM1UFZoc0ZWUWF4eFRlY2UrNXBOa0M2dFlKWWJIVk1rWWM0a1FmN1IwazJpc2ErTzJGKzB5L3B3c2pqejFwN1VKeDQ1NDlMMVV4b3ZWU3BnOXYxSGxEK1pUYWJSMS9yMnVQb29LUzRDWHBYTTJlVk5LU0g5VXJpdWZJdVZ1cUhSY1B2RHpNaUEvZmN3Wi9BUEsydXBNczdaWnpHU2cyQTJlQnZudlNhY3NsamE4VkhQa2hQa0VteFFJY0tQSnplNzhGTE13dEFxbDNQSGl0ZjI0M0lRcndOcTd0ZER0dTFONkpFTzJtZ01OZnRZYVdFcWc4N0xXaFNXaWRGTWo4SWQ3M1oxZDdVOU1PTTk3UDBqNEVmSFFPNHlZSVFqczJGRitOaGI1TjAvVlVZZTVKVVRYdlJXZTJwaU5WNE9uV3FYcVpSNFltQ1k5Smxpa3UyUG40RS9vVW5GNlp1SU03NHJzaFVKSXFKQzhWcXVKTHVEZEJSMWMvQVZ0Rk9kZkVhTUJKalNaQ2lMWU9nL29WYkVISE43eWRRQkF2b29FTUQyUU44endWMzV3TnFsQThtTzB3NXZaNktndER3SzMzL1dVVFlVZlNwVTFmRk5HaXdJYmZKeEtlWGV4VFh5RC9WL0c1Z21KS3lpb0p6Z2liSFZRK0hkeEZZQTdNUGZzYWs2SmE0VnRJZ3RJVUZFdUVPdzRTdnQ3Y3o5eDFIeDM4aFozbXNSZERCdkplWWx1OXFrUkxSMEl1bERUUzVzNm8zM29SQUtEai9CK1VxUExOeEM5WGg5SU9QbG5wSnpYSlJpekRrck9Rd3orOW4zaGlmUGJISWJmWnJ6S0VaYk9hRUpCdHpHS2VoUTM5ZDJiNGdaWHpTQmlocnM0ZTVWTXBmTUxpbiswaU1qbTdEb084b2xEUFY0aEpjY3pGZDJqTlByRUNjT0lEVk9RZjAwME92R20zNWYrUktJMlJPS1M5bTZ2WVpPejMwSUVvdjdTRGY1U2EvbGNZZnJIeTYzeWduYUh5SEtqMndwNmlhOWhScldDc0xuV3N4ckxpTmhKZytNaHI1aDdDTHg2R3VKWkM2UXloYWYrVzl2eWlGVGEzRlhvMTV5cjl4NC9LOGpja3FRL0k2NDdyUi9vYnFpVTlvRWdWWkJDc0NIR2tkRnlKVG9qTnRUek5neElTS3NjMVViMExLV2R6M3hldzJzWk1aRUJiNzhmZEJOK3NLNG1STTA1a25xOG5DUnE3Z2ZOcWR0dk1Gc1lEMW9GSm4rZDM2eUhQUkRUV3lVNHMvTTVncG1QMjlpdFliVmtrVTBReXQyK1EvSnBwRnM5UGJ1eEpQVWp4TnVia1oyeGhFVDlsZkc1dXAraWpFVGU2ZUpNVWtvTEhSQmNtc2RtKzRqK1FjbFVXeXFGQUp3TVpVWWNCdktkQ2IvaEYwRWxoMUxzbmRUcFZrd2VhV29vZTVrMEhUam1SVlFZV1VMWmRUZUlBbWxrKzNaQlNMVXdyekpIeEtLN2d0ZGVNdHJxdVJjOTA1YmZhUUlxMDNCMWNRdmRsaUVTRTU5bTYraDlyalZUVmdXZ2pYTmVqRDFNNnVGU0RVVWl2clFwamJIVVZXQkhkdlYxYzg2djVZdmMrcTlDbmVxN1NVY1BhLzkxYlNpUVN3RTVOQ0U0UUlWbjJ2aHZiU3pQOUQydncvcFkwV2hVYjc2a3M2WmhWOXVEaXlSUjVWekYxUDBvMldRN3BWMmRxbEtMTHFZNjgxM0h5T3NFdG1QRHRaQWRIODUxU0Y4QXo2V25HUkVHbTVSQXlNeTNqWkZISXF4R2h6NTdoRHZuQmxVY3hGekJQR0RXcXEyVEZ6M1JSMFBIczRiYTRxckVKdkhFSktyN0J2OUNLbFdrT3dWR2JsU1p2R1d3QldqMDZHOGhWVXFZRlZ1Mnc3N3pmb2I3aThqR2RhdVlYOE9iU3loamk0ckdoTmhMVjY0T3FsOC84cnlHZWhabXNhbTA4b3FZMVN3UXRYWmxIVXVoNTRWQW14ZFpOdWFCUjlFYzMvUGI4WWtXbEUyWjRScFBnajJxaTl5czl3bVBlUm1KamsyZXVJa2VLbUxBQUdZckpYZzNGUy9yQ3lCL1ZYQkJjSFpWUWpySWxPTUExeFNyTzZJMFJBdUd1YlJEbkRUY3FlR05PaGY4VktselRMSHJEYjRTYk9NQzdsM0w0WlMwM3k2Z3ZBb09MZnA0djR0MnhOV0I3YStrMGhKUitYNG4zT014cXRPbFpLVWZRdU8zQmZVRDJBblR0a2lYbllQdFJ1bnNOVFVjTGJZd0dVb2ZzM2tRaW5Xa2VwNERSVGt5Q2dZaUNBSUR4NFUyV2kyWVVyOWFGdG5XWWRTWHF6RHdaeUZCNW53SmdObVk0NFJ2NGdFOHFvTXNuVjlPSklNTzBseFNEalF4enNtRWlHZXRFQU9Uckt0SVE2eTRJRVhoQ25WY1hmYWt0eXdTNTZNdHRjMnpDVlFmOE9XVHRQWWRhMFFOeUNjMklNRGdicnRTM1hwWFdRcCtlRE5DSCtGd3dlemhKL1o3UnhHR0VQRnZOWkx2TjNEcGQ2MXd1NjlwSU5IZFJMU01mUHZGbUhNbU9TZTBaMHRadkNHQ2l5WDRvQk5mNUpkeGJjRURkY2hwNG1MY0FpSXI2ak1iSXNZTjhucWk4aGRFOGkyY1plWTNGMzNtTDdRMkpRbmcvclFwM2cvUHgxKzZpMjI4SUVDZzhxenorVGJSVS9uelJYTFZSYjRoWHcvd3ljdEJNVkRIWFhqdk0yZHlRZXpuSmpWaExTbzBCY1BFbXJ0bWFsTVoxeTNCZjZrWFNIaHVtZ29kZisrSzJGa29KR29sY2VnVVpTLzNHcmdWcmNvd3o0U3BScWM0TXh2alJPenRrUEhFKzBMUFRUbHFITFp3Tlh4YnpGUkU5cG02dWtWdEZaM054ay9qM0JJOElHSmcrSDBjWDBCblE4SVQ2WERZOVRJZW9NVkhVWWc1d1BVaTlZTWZVWXVtSDFNZGxHSUcvSUdOTUliSHUrbGQzQWswNGlDMDZEQndNMnVJcmxBWU9CYnVNUTBNMWtuN3ZRaGxxK2xjZitVVDZyTWtxOWliNTM5WEd1cGs0aUhxRG1KZlVGMFkvb1VzaGxRaU80MzFDaTJKSGkwaWpPdW9TK3piMmNuMWxCdTRudDBPeTRJRTAwNTkraGZ5YTB1VFdJb1I5TU5yT2ZScTVyNGNEUlc5K3l0ZW9zZWhDT3BtaXcxbWtOT2lTeHNISkgzWUNTOGRoV2UvVUUxb1JHSEFFQjlUZ05XcE1jSG9yK290Z0N1SkpSK2JVNzk2S3I5ZTNHWDEwZW5rRFk0eGxJaS9LT3F1LzYzNHVPR2FmZ2Nud1A0ak13U1FpN3JjTWxCMU54RXdVM3hIdmI3NVV6KzNtQTBTM1gyeTBtaStxSmI1cXVpaTk1dWhEMFE3YmpyZktiL3lRbXRtSkJxdjZVVkIyTjk0V3NjUmdJdjhHaFpoRjhTRjY3WHA2a2xWSWxnMW1Fb2N6bE54YmxDeWhWaCtqczl3QkVhb0ExRzlHb0VFYm9EMXRkaHlubnRQZ1RRYVlPbUEvcFRUMFlOaGFtQUtVMlBPRGF4UlFHQ2FrTWhIMUd4bzhxNWxhT0l0d2kzYmY3L2hZR3FYZzcveUsyN1grMGo5ekpDMVNpc0MvYjQ2OFExcEFmNGxDQVNMTGFtaGZaYVA0enBoMkthUFQ4Vjhzd3B3OWdFR0Z0ZWRjamV1YlVaeXVCdXA1MmJ4TnliWlpqb3dyb1IxN3pNZEMxYkhsejBPOWdGZXIrS3M0L2NyVGQ2aFhMMTNDdkhFSnNXaVVsbVNIWUZiSTRlRUQ3c1VRaWgzVlQ2bWxCOHZMVUQvQVFJQndhRVQydUphdW4vcTEvbzhyYlByVjVmb2I0eldIM2VubllSbzd3U0xNN25zNWZ4NWptNGViU3FBTEtaeW1yQTJ4ZWdrZWoycHRtbzFaQjZFbTEvZE1uVFNBeUE1N2VhNEpXY094N2E1QVloNGRHalVISmg1Sm9DZ0krODN4NDZBTUZwRWQ0UWtKNmorVWcyRDFyY1RTSU1rRi9RUnRId2JyZWUwUUdyRC9UOFpwRHpnZnY5bVk1WmNXc0pNVnBpZ1IzbVVRT1JKb3pNSDlnZjQzaSsrSFZCT3VZeUpIVzFlSEFFWXBzRDVlV3ZISG1SWUFtY3paS0NQMW9ra1VpZER4SlQ1UHl6YzRZVlFGam14R2FNUWEyMHRJQzg0TGl0WkZIU3VwUXdGM3UvaWdXbkg3dEQ5R25zUGNpU2E3SE14NFNjL2dtMHE5MGhoUVlyODNmOTJLTG0xakNUUEVVTzQ2MGRSZTEydldDdWV1aDJlVHVUc0V6RVJnRGJUUGJSYzIwRmwwL21XVU1OdUNXdFlwTDgzTXY5OC9Pd0tpNVk4Q2xrQTFhNmVocGlXQzN1cDdVUStuZDh6SXF0ckh1emxHUllEdkdDRDdEVmI5by96Z0hNMW52MmJzb0JkbURSOUhSSEdONzR0QkM5YWg3NWEwTFZQVEFYR1pZUjZDYWI2ZVpzYTd6TWI2UWtmaHhPbTFOT3UzTkVoM29qYzNmRzZaQzhMVk9VUDFnUWRjQWp1ZkhJOXBkWlBTMlpacnJmdVZyVy9ZalRhWFFKbjBiVzRqRmI1OGR3YXNRTVh2L0M2ZkZvWTlQMTNId3E3RElyYmFCc3huQlRFQ2FFNmVFRXI3bmxKNVFRUWhnOTN6ZmREZzQ0a0xrWjFRaTQyY1BiSWluYTJFdm9pdmNETHlZZ2FoWG5LRlA1aFdGaWE5NUJmSFhNNkV6aGdDckc5WCtBbTJucTFzUzBWMnp3Q09QS2tHdWpzbXppbkQwRWNRbzJGei9TTTlQak02ZS9FK1dEQWxHZ2RLRS95RmowckMyU3I0QVFJSjV6WlE1S29LTnh5S050L1liNnRlYVYrM3MxVE1qaFZQRk0wcXdLQ0dVY0FwaWF3ZGV3YTh6MEJxUjZnd3lwUHVwc2RJZDViZ21TMUEvTHBYRENYcGpSRnZIZzdKdHBFLzF4SStZRmY0VFdXd1VBOU50S2dqYU0zWmRkRFVOTDB6clhZT1loeEtXMXVNdnZvTGFmWVZwSWx1Rm1uVGNaWldXZkMvU25NMzNTQ01Cb0d0L0NyUGFhMnhxRXNqaDRnTkFJUTlHaFp2YXZxZkpRVm1vT3B6SDlvUVh0dmtMdDZOWjNsMTV3VHVDN3dwV3Yrdkl1bG9rdmo4N3RUZTdTWW53Zi9OMHVEbUN1Zzl5MTlVQ1hselVzanhBcDltRzMzamQ4RzlxMWx6bW1OKzd2TUUxUmMrNEpBVzJzbUIzL09FT2pYa2luNGVjanprSkFrNnVsT2ZIZEZnKzNqWHdVMEY4NXNQd2pibFJNWGI2MHRITUV4UDJzamFhczhwc0xQOTJjd0NaVE12MmVBWGxYUGE4S1BhaU54YzJQa1dBcmszYys1Y2xoMTVXMndod1B5eCtBVVM5aGxnUDdxeGJuazNUaVBVTG8xdGNoQlZvamFtVFowMnR0dnlVQmtNb3JSaVI5S3NxQmpYR3NrRllaMDdGbEo5cTdsUjVyVGZacXB6Zmt0YXdXKzFmMm1pYWZYODBMdWJidnpSVHRWOGF0QVFvdkk1QURBdmZ3bXluTkI0enVVSnIxOERLS1lDTC94Y1Q0aWd2dURZbkVuRVhZZDhKNzB4b3pRMi9yL3hOR21QaFpnUzRQOFJsaDd1NmIyaWNFenNGc2ZTaDZXc2k5c1loM0VoVVRyR2kxLzFRRTIvRDJOT3QxSldqY2VHZk10eFBaeTlBWjB4WTdxYzI0VUhWOWhrQUh1WUF1K2ZxTUdDNWc4TWprOHo2TytRWU5mYjJ0UVJIOHpZM1VNaWsxWlQybHJSMnhvV1plOHJ4TE9kUXZYRllIV0xGSDdWeW92QmRUaUltbFZOTFNHTHFzTTBlS2hGM2UzNyt4ZXBUd2dNUVpYRU5Ib3UwQlk2c3V4TUdpamR3NkJsVnJjbHZMc2ttMEJjY0lNMi9NQ3RJN0lVVHFuS2Z0cWNOQlhjTG1XbVJVRk41N21vUVYvd3h2cE5UWkovNVpkUUc1eWxFUENRQzExMzRQdXVOTndRNU8yRS9FSXI3cG1uVjRabHkvZUR6NzM3aGt2dUVxZFgyM3FnK21YemoxOTdkWGJ4b2ZlUzNxSE5IU2crZVNsVThIR2ZlNFB0akk2V0RBa0dZZFFJODR4UVBhS0NSTHcvdUduTGMwS3dxanVUdm9pVlpDZjkxWmNubGVyRitMcURDSGttWHM0SW5DNzlzaGd0Y0RmWTRBZngzSCthN2dNNXBadkltK1VJcENPTWM0Q2VlMmNteHpwQ0xIbWJSRHFqMkxTTWQ3NUg1aWNHUmxXcGo2TU9INU1tM3NHTkRqQVBPOFJYZjRoMmRrTXVxbDJYcXFWV1BNVERNbVIyNjV0dXJ3Vjl1WWtVN20zTjY2UFg0RGxkTUlCdXNiemZrdHZPam5xVVNQOStjVWhxdlR0TzRxQUJScFI4Y3VLWmZNTlZuMkQrOWtMMHZldnFieENFMTR1dGp0aEx2M1QrWVpIdHdmSUxOWVVLN2J0dnVSNmxUTHlGK24vaEpjSmJuYjZkTWdJSTdxcDFxZVdLZGN3djJJRUdIckM5U2o3MDJjRDFsRXZLMmU3aEJvMDVjYVkwRFR6aUFZNVBCSnVpOHowUUFKOE9YRk1LaGdJeXdIclBWTGNoK045YWU2b1pUOHhTa0twUWN6NE9VZHhqTXJJUW14bkZaeGxvTnFzc1FUNXZFRGhVTWY4bUpmZTg3c2orSy8wN0NoWHRLM2dDbmhCdWFpamdPYlJocG9mM0Qzc21lVG1YVmpsdGxiTmVCajBhR2N0Rkg5VUowRThGNTBIc0xvZHl5bVlLVWMxT2hIM01GY05qUmpaWWZzT0NGWmJiNDEwNVltZ2tJVDltTyt0bm5OQmY0Sjh0eUhDbUpKYzd6cWk0VlZsdnc5YW92Tjk3R2d1U3IwQzh0aXZiZ1BTZldqZ2Y1cEU5QXJmM2tEb0pDdCtSQnJ4amU5OGt2bVQxSGxkY3cxMCtkZHFJNTRRVjhURnhaYndSU1cyQlRjYll0S0EvNjZmcHhKMmNKejBYUXcrUWVGVnpmUlcxQXV0NXhxQURHcWd5MEZuZmZiOUtzcllpODJJZFg0Nm9USTBjVUdPb2NURlpaenROZG1DcHoycWs2QlVVSmpwb09UUHd4ZDNsdGxvVHVVSmtsaFZ6ckpzbGZWb3RkUFBaNUFHQnA2RGx1bE1QQ1MrUmNhdlNES1dTaVpDaGtLREtOMkVJMkFwV2hTSFpGUkV4a0VGeU1QeWhyV1Y2dGVxOUZFV01qSzNYVGVFaFhpbHlaN3BxMVYza0ZrRlJ5STNBYVlUN3RCeVdwc1NrWnVjM1hJczFVM0k3THRPbGluWVhqbGdIVzZGaVk0bWRmQmZDRWZoTXpPYmVrU29iNkFLTk1SVFh0YlpOQlZiKzN2aC9VejAzdFBwVWhCaXJqcFVxNGlKL2VjTmRHZ0dzTzZqUXF0QldsMFV4R0xNTjJ0NnRab1pjeUNZVTZEbVNIL1Bsa2V5VGJGeGJac1lrblN4WXJPcER1MWtoZU9XOHQ0OVhkY1AzQ25HbkZpb3BUODY2dkFVODJ0eEUzc2N3RU5oQ2pFeHlYTExXMUtaMFZMV1o5RHVMK0c5bDAwQnZ6TDl0UFA0Z252cmlnRnBjc0dEMC94eWtmQksrUXMrdE51b3dudzRBQU83SUlld29CVXh6L0tLbVMvV0Z4RzQ1YmQzZzEybkRsZXY4eEdGSVF5K1hpNFFRanIrVU04NE1rRkRLa3pXUmc2aTZUYXFmTk9waUowWitGUnU1N001dGE5eXBEcE03Y1dUVnA4eTVEeDUzSWg3dG9XRjJDbXVKckRKczd4K2RsUDNHbDk5MDlFU0RrNlJnaGxWUkdVeGl6RElyNHphdWI5cTVQdDZuV0t5VXVmdDFtZEJZNnEzVlZoUE96OXdGS1dmek4rMndKd1B1SlN0bWl2QTI2MzZYV013VFl4REJIYWprVUVVY1FrNDd4c2UydThZWm9vaDY0eS9iN3dPZGV2RFVqbVkwcXYxZVdJOVhnYVFPdHM3ZGRKa25VeG9yanRnakFUNHMwVTlKYnR0U0ZJTFFlLzFZdDNxVnZZQVZucExBYW5DQ1ZWYks4OFVuMitmdE1YVGUvVTJRT2pyRHNLWDRyT1l6RE9PQXJTb3hLVmJEVmxoOHgwd2F3Z0lXR1RsU1BDbExGN25oM24vOUZ1THpGdUxWay8zdFBsalB2bCtxeGpMOEp0UEpQUmgrakMrZ0twNUdSdWVOMzJhRklXRXBta2sxbll2aW0wbVQzQ1ExRDVtUHowNUZueUQ1a3Bzb0dYdjkrQU5FbDZZWGFSUGdiYW04TDh6VW9ySElaeVBnb2lUUFZhQmpqR2xQS2ZFditWQ2ZFeElXbGZ3aWNSZ2ZwM3VscUQwZlFNTkdqL2syRGxyZUFWZ3pFRTl4TmNjMVdzVCt3dzYxNytPa3k0MDFDMCtNUHd3TWduclVtY2JxcnBlYkY3VTRST2MyWkFtbkZqVWI2M0IvUnRuQ2Y5VFU4WXBqNVg5dTlsajcvWlc2SjkveWJVMkhmeSsxd3QyOXJOMEZja0VJREorKzJpb0dheHlGc0hEWTdWZTVEajlEMTh5Zmo4L1NXYS84c3gwbVJMMnlaRHZ4VDI2elo0cG0vTUFzcmJLdktDajBYYkRFRDRiNmcydzd1Zzl2QW9udjc5ZXhIdUFZRHlEMU5mcytDaXlpNWMwRVgzcnEreE1VckpGem5hc0NpelRCcDA4U0svMGtsd25aVDZsaDhKVmZmYWpRdDR0MUlTc0pLaG5jWjlrVzc0S2x1SVRERXNXbHRUdGNlTVVxV3NxNUM4amFERUFOZlRkWXBxWlZKdlZNdDBNNmVzNzRDdkQwWFBKQ0E1SG82WlVkeFJVVGF2RzNPc0lncFNidEZZN2NlVEtVNWVqNlgyQ1gyRlNXM1RCY2FRTkVsMFhnQ0RVMUtvWFdROEoyeTdKcGxLa2crWjhhTUx1b3p0K2NoZDBEMkZNY2IwdWtFY3NPcjhHRzRxaGJYV01CQ0FET1dNSHpzNHFpRzhUWE52Y3FJbmtocXZvc0pjZm9sb2FlSTdPR1RiOThoN3lRQWFCNlVwUE94YWpJTTRLZGtNZUF3S3dzTDNxNE16MDNwWGk1czRiSE9GOGlRVXhwZ2ErUFYzN1h0R05ja2VyN0RUMWZVODlGR3lZa3N1eGlhTG9pZUhTS01hRDhXVEFuUmFxWjVDQ3VuM0l0dnhQY2UrZExMWUp4Rkp0WHVoYU5tY2ducEY1VmxVRUhkUXRTRVBicFlJb3EwQzBETlF2aFRHRXpoV0gycEQ1VWlZR2NGSnFMYWRrK2FIbk54czlwZWlnWFkwSEVGUU9aODNuZ3g5Y2lzdUxwUFhyNVNhd0c5TE1OL1BrSFZRdDUwdHIvaWI3aVl3VEFyY3BBV1hPTmF2S2ZueUg2QWg1T2lRa0NKeVJyaFIvWXFTYW9rcDVITnVZb3FBeXE2aCtQeHhzYmxsZUx5ZVZTdE1WSEJxb1NPbkFSS0g2c2hSMERBbmIvTWpsRTVLTi9LbEI0eXR3bmtTMkVsOExRUEhKZythejBwTVJ6ZlY2WXdnUHdSejlGRzFTRWRTZHUwQTJxSUdUUm9keXJiVk8wNFBPM0YvZjBuTmxaV3QwMFQzSkJtVDZha0VUMWxZWVduUnZlZGlxdFl3RWFaajc0WXpISUtjM1RiUG1ETUQvdXRpR1BuUkxLOFVaNllDVmkwL216d0V5QmhNQjBOb3VjUjAxYWNnOENLa0pGNVFWTFpnVEp1ci84QmhIYTBWckZEc3NndDUzc0FJdVc4RHJhR0VySkcxN3BpRFc2YzBwRVBYd2VZWDVWcVUyY2xsQStRdGNUU1I2RVorek9SV2FUTjJoTXh6SjlMR1hnb3pKUldlNkxGazRrelA1Q3pmbkZBNkJ4ZkRlZ3Y1MzRoU0d0OG1WQ0Z5Q3kzOW5KQ3hGamtmTy9kd3BsL1R6SnpBdkhhVHFJUTFCNVFaREFNV09qMTFtRUNkS1FqcCtNdEtSU0p1amtmRnh0MXVqUXdzVTZBWTh4YmY4V3JtcFJTQk5UWW1RZERBNGQrbTZGRDYvNzBQcSt3eWNaNXg5Sm9McE0zaGRvcjBsa1QzQmJhZE5VblVGMGtwNUhFMFh4L2h1Q1l6SnBrU0trcW1FbHpZdWZyUlRLQ0szWUhDamZhZW94Uk5PcnhtUXdJb2hLUzJmc3ZXMjFYOGc5eWo1RHFlRHhrMjhocFQ4MzQ1S3VNcHNTa3V5aU1pSnhSaXJKMU1jNVJkUnpBS1dzZkxLOTNjaHRyekI5OHB2a09lS2luclNvM3BWblNoRDBoVTVmK1BNcDV2dTRTMEU5Z1VEbDEwbEhITVlkQjhjSnlvQS9qTUFwMG9oam1mVW93WkQ2MERmei9SODlaMzlaTFdEKy9hc0t0VHBnOWNhVHJTbjdsbUlyMDBMZ2VMNUl4MmllMGtzd1loSld4Z2tMSG5BT2IwSHNaQUxEQ1BIYnVIZzVXUXJFbG4vRFMyTmczeko0ekVZdVMySUpaMFAwNlI5VmlqeVQ5Qmgxbysxb0d3Q0hyQ0QzOWo0eUJZZlhteE9WTk5tS3laZmp5N3JiTnJKd0xTbW14d1dEN291NnhaZDV6Q1RlSXI5aXExUVBmVDR3OW5vMWJObVBuM0dNU0RFQk9aRUtaclorc1hodVk5ZFYwanRRMWVVcHhoY0p0ZnpBc29CSHVncWhPNkxuWGNoZG9FeW13Y0hVQnhJV0tzdlBOMDV2ZVdsM3Z0ZVJTOVd3Mlp5NGMzeThZUXVkVDhiR1I4VStsck8xdkVyektuYURUL2pNbWRuRis0a1prZTh6Sy8welorOHdSSmhNNXhjS250dVFaSW4xczdEOHU3ZjlyZlFzTUY1K2ZSc2RsYmR6WXNjL2liY3hsUGRvU1lkWGtyTy9SWk4rUUVNSUJWc01tZEFtbDRpdXp4Q3dkL2F6QnVzM2IyMFVwUi91UlMwUW5aLzQ1N2NsZUV4a2FWa1g5aTFKOWl4WFVraEFWRGJuNk9hOExHSkFvQzMya3R1OVZGdEhZbEV6L0xtTmhVTTNVbW5NVzZSS1c0ZFJhTHkzNXhJSU9jb1JmNWdQYjd2amJ6UUcyalVDQVJUcnp0ZVpQanNjbmp5ZGJITWdWMmJpc2FrNDNXcFBuTkhtYk84VEViTmdBUkxXZTVrSG5kbEtCZkwzWDVETS9WVnl2WkJyMUhxZGhVcjVCOXZMMHdyRHd5WExFWUwzR0tXd0NMWFJDa0NGZmFuNUl1TXg1NTY5QzFrTVEyb0ZqaGl1QTlRa2J2dVB5OXlkY0c1elo2UVVkVmcxR3liaFFaNHk3QWhpRGZLZGNnbWlNdWFaR01QUEZKcDUwS3JnanFIQVhLSGl5QVgzZUVDS004TkNIQ0tyKzdLa1liMHdMWDNUczc2Q2I4bWkwN2F3Nkc0Z293UEdIaUVCV2lvaFlxa1VnRWM4dkN4VDFhMmFaZHc2cXIrTGs0dnJ6OE9XOE1OcDJuZ21pQWVqVkdST0FIN1g3cWl3UFlJVmw2cXJnc0p0MnQ0MVJnS3A2V0YxWFp6eDZlcTdhUTQ1c3FsQzZ5TWhUZWtQREhMS1d1cUxiUzczMGZCQ1hnVGRsNmxPckUxN204VEhzaldxS3NuNzR0S2o3NVpWSHdWMUg1NUJWaCttWDZuRTgzV3d1VDg5S3djemsyYVNXcHNDNHdnNDlYVlVaR09BQ0RKN1FUelpXaUJYSDBlRnZ2aVIrUUxMRHZJU2NjS0t6MXA0dGtnamJ2YnNiVXc3MlV4Ymc0b2lwdXFhUHZXR25oQ1gwa21lR0ZtdjNycWtQaXptTno2WTVWK1psblp5ZFBQWWtPYlFQZkZEVll2WUM2SVRhNS9FWStBbzBscEV0STQ2ZEk0ZWdRRWNiTWtwZ0daeFRLSURLZ2p1d2lqL3RPNnNGbnZtUUFhRmZuNGhkZXZTcWpwOTN5c3d3VVdoekZxSUtoZ04zWktZUFZrZHVZWkJ0cmdOQlpvdjJvV2J5UFF3aHVjcWRPTDBPOG5WRlN3Z3ArYWFSdjlQL1d1cXoxQUtHQ09HSTgxMWhiWHFpbmJ0M1R5eVd2QlQzTGNmZUtvMnN3Tjh6UVViUFFTa09UYkJDb3FxWTZoZXVEVk9tQ1pBSDBMU1VSeXVSUjUwTDZmZTVCMTgwdS9mRm9MNzhIMnNYUk55UFo0cnE1L0RJK1BrTUdKNEhkM2tLdGVKRzd5NjFJZmZuZnN4UlZFSituc0ZCY3RuUHNqckdaRmdIZHkzU0RxMWcxbmNOWXQzcHBaLzJsNnl3WElTT0gzRVJrMU5LcnZTd2FWV096Tk1BQlB4SVZLR25yeVFIY1AyQXRKNkJIb25xWDB6eiswTmxPdTMreUFSajdrQzFURjd4TkpHMHlzNCtVMTFDK0ZweXJkVjg2cHJ4blEwQnMxU01Oc3lnMmhjcDVYZkl6RzNRRmxmalhHQzY2UDUydk5oMm9aRFhQNU5oVEw2QW1IUjIyR2dhbjNLYVl5RTE0L3NPU04vUVdjbjRuN0krWUl5TkJTVitoTHh0VTdBZmxLTVhGa3ErcW5BNVRuUHkyVE11eWZia3kycEdsZDNjUzJONDNKUVZRSExSMjNwTWRTZmo4NTQyNFdLcmlOWW1LU3g5Y3gwS1dvWkZzTGZ5elpLMGZmU0h4MDNlUkU4eUVzZVFGTGRGWWxFdmZ1dXR1clpZR2J2YlhEVWdqRmFXQm5aSEI3NHVKRERySFVpNEZFRkEzeWM3VEFOeVZub2Qvd2prNWdIcWExc00rQjVzNnRJem5sUzlxb3VYMmlxMUZNakpWdlp1Y1JnZjVvZ2ZOUlpZREQwS2IzNmJzd3VrTzYrVzUrYXIvdFFUSjAwdzNDdU1DTmwxUnQ2b0RqdkNaejJRakR3NVFvMHZBNnVRSlR0TnVKNkhVRm5ubjcvRVZqNm5na3lJQk9Eb0hEbXVuWnlDd1BCNFBrWkFUUDFqWXVRanRBcnJVcWc4dmxuOVh2TTlVM3RoSG82UE02UlpPSFVSMG5iSGNQQUtJaXArMmN6K0VOOUJXTzBqbGJuK2NsbkJBdDlZRXh3cXN4NmYzeWppVmoxU2VITE1XbUNKOXpVL2FEOVc5alZRTEZ3c2ZISXphQ0s0Vy9FSnd6Rll3REVjcHh1RjBpSEpsUUNubXgrTHdvY1BrWjdteHorelYySlJ5QnU4VDc3aU1nNGJDUWw5T0U2aTg5SktRMlMyNWxiNVNyT3FibkFTTWhDaHphc1JiRkN1cnBUbXlSWUN1TVpTSGZScnpHd1BkTnpYTDAvdE5VNmRPTXRqQm1zR3JIQ2w0L0xwN0VrV09zeDUyQ0hkRWgwRll4c3NDOTNQdGJZRVRZR3EzeWlZd0hPTi9DMEtpTkNHR1pqbENVb0lXSURLbzBLVlFWZEhZTmduMC9LYmdJcmgxaURGRUFwQmdZODNTRVZDZGtGK3JPcGYwSE5GTmtxa0NLb0Erb1plSWxaeUkvd0Q2dldIbXlUbW45Z3ZZK0V1UTNEUkJ6MU8vaWZGNVQ4SkpiVlE1bm5RNENFMDNaeUJ0QjRMcU5JRzlDT3gremN3Mm1IbTk1T1M4RGlJUFg0ODZ0UnUvaG5KRHVUemxaRGUycjdXZ0xNbTFQTHFRbzlSa21CdFFiaWY1QlpvY2JIS3VVVlRyK0ZTSTZpTndBTTVzNjdGbHNPQ3Vmd3BuMWxRa1Z1YThjRk9obnFPZktqYThNd1FHeTROTDBGMUNTWS8yTUFPMk1DSmF4YnpMc2h5TmtXY3Z2YlhWSVp6OCtabncxdCtKc0Q4YWlFWitmMS91Y3pNemt0VGo1OTY3cGdkczd6VUkxSTYvaXQwVVRzT0lnNnNGM3lINUNQSjRnZ0RpQzM0dDJxQUZZQWdRVExBMzhHUnpQOEV0SEcxSS9pOXc1MVc5TXU2NlNMbHV4M0t5M0tYMFJzQW5NVkdITEhpeDZGYnlRajBDVWdYcWpvYnVFUUh6UzJlYnN5OVNWUkorQVJxQUFSVnM3YmZXYjcvQnV3cEtJYm8wQ2V0SXJiYTlhV1h6dUhpeGRSQUlzM0xXSVd3SUtZSWcrcS9OMHdRMXpBaUxRZjJST1VYQnNBWE15ZHJpc3RTdlhHaUgxdWVTODB0dHFkcGlMYyswaFN0L0ZNalNpbStaM3VFZG9aL2VIbXplTGxzVk0vUzZqRncxMU5PSlptZzQvSHpPclRPVjE5NlBMK1h0YWNCNkhYb1c0T1NBaW83REZyMzVuSnNrWDBrQVB2WG1idTRTSVc0THBsR2NkdXhhTlJGMUx6ZHljcTVRaTR6a2RjTGp0UjhVTXZDK01xRGY0ZjloWUFhTXZ5ZExqRytwU2o2VEg1SGlIeDZpTkNYdUliWjVrTmRDSTN6OW1kYTNrNmJIRW80amJtR05aZHQzdVMyci9jRUc3NWlFRHQ5d2NxOHFHdmQxY3dnaWhtZk9DbEdQSW5FNWdtS3VkamtjV1h5ZFhxd0ROd3I1MVUxSkYyV01TVExESHplZ0Qwbm93TlR0V1dpTWZiaG1RVDFiL2lMVWcvZGc4ZTBJZnRMdEF6OTBEbzNFUFlYYkJsUFl4aWZjSE43dzhodUQwaHZ4eGtjNml4Tm1Kajg4RlpMdXY0SFNLMHprVTloNDlvbjd2aktudmJMdk1pa082Uk1xMjJkbjdadnN2SWprOFozZU01OU1BQ3hZdDk5RWRCL0p5eVdobVRVMitxRUN3SS9haU9Jc0pqbEdpNUdCMnVPNDN0MDloY3pLSWVqaFhUbit2UmJxUXI5NmxLeWZ1b1BQZm9Ub1UwSmZsek9sZnN1SW5VZ0t3cHNxdThVbTNRdUllZVd3OTlKNDgxN3dUTEcyVzIxcmh4MWlSRURTd1VnVVUyU1lGSy9KM05PaHp0SFc0bEFvREhCejJKU2hoMW51QjVrQ3hFUVpLYUhJSzZ6VHRhRFllRFFyRVczYVk0UjBkR2ZzRlppVGY5VDlPemtaR1kvSCs2NXp6S1c3ZzRadGVJVkFGT1Q4bnZyWTNuNVJTRHBZazZob3FJUWJoZEhwTVNzTXBxb3hVMVh5STd3OVgzSmZkTUtwdkdSU1JmNnphbkNuL0NUNXRxZy8xVVA0Z01FM1IrMG1VUC9nbGdqdXB2ZzdnRmRHbUtVdUZKK3Q0VkxXZ3BFWVZnNUlFUTNrNVhDRlRvSVRRYmJQaVVGL3p2bDZrK1Buby9XMktqK1Q2czJGRDhuY0I0THlXKzJGeGhuMnpmaUxIVjFTNmxaZFhaS0tPaWpncHdNQWh5Q0RPVU1jNGFZRm5oOHNjYTdKbjVKVkQwTXNlS3lRcEJwTWh5VkpzSWZrSWNUVXBCd21rakxMbm1zZlUrcy8xdFExZm1YNHlUeHpyeGZYUFZZNnJJelkzWWRhMDFGVzBqNk5GMmZneVhZQ29WUUxlUHZUMUJPVStiVmpBUldmNlZEYTdGaVVWZGs2ZDdFajJ1dTIyMlNVc3V3NE4xSnc4cU9VeWVKaVBmUmx3Q2hEeDJQOGViemhtUkZaREJwa3V3alRHMHN2eXpKdjFxbGtKWWxoajN2cEEyb1BaMW1NZVdHeVBuRnU2dWhkRTBLQjNqdEE1eHJjOUNrc3kzeUJmVFFuTVNLVmkxaEZUM1o3Y1dhWGtVNTc2elRNNUJXVmNJaGJxalBVMU54R0crSzVXNm9Ea0VSMHRsMU4yRFl1UmxqUjA1c1RVYVdjZGpKTUdjaFZwRUN5UE55VVR1dDJ6cGtlRHk5NENOVHFhczBOUXkyaDBvNzVPcHNyWmpGTXBnUlczZ09vKy9QdWg1M2Jacm1rVjlWQmpaK0NNZVlXK0p3NGdXQWJYaU9hOEVSRHBSRnZWMTRMU1JCUXg1bCtEVXJBTWE5Q1FKV3dnWC9RbGNHZ2d2aVBDRjFCa01ESG1lbGU1NklWWlZaYzdYcURRTDZoU0JUTE5WTG5lWmxjcmlhb2lDWDVBTjBhS21Xbkh4bXJtbjh5TU9yaHhVSUgvMmZmVzUxczlzbk4yaHRwT1FlY3BNSnAvYWhJMVNHdGlMUEZYMnhpcVBiWVhTdHNpZHpGZVUrUTZmaCtIaWo1YklLRGxYbklKa0lQTW1pQWVkL3N3cXZCL1cwQ0lsczdNV2F4aDMrTnVwcURNSVp2V3BobUs4cHlucHlKNHB4VS8xRUxtOGtLUVFGMXF6VWJ2MWV1K292aUV1VjBQM0R3RCs2YVJrTERtOXJqSEFqaDVWbndVM0t0TmN4MVVSd1B1b2ZsQ2M5RmtVaWFwdHFXUyt1MGsrZDN6MEdlcWpOYUZCdjArMUVxaDEyU2lkYzhKOFY1ek5qZThHTjFLZUFGWm5udmdXdFRUSndmVVpUMWNPVWs2eGEwRzAxZGlQRURFK2RBZ3NDcUFZOVRUMFNnc0U3Wk02ZSs5Z1JidENSY2ozRW5WODhNVVRBSnR0QmFpQk5mK1MxVGlDcEsxMnkwY0VibVB5bDZzSEh5OFJKUDlXUlBpc2YvaTlqcXRXd09HeGdwaGFUN1UrTFJiaWR6ZC9qOGRJcjE1MkFtZGNiKy85VER5Q0YvMGExTmdNOVRvbVBVam5ISk54ZStDYU1mbG5NNjJ6ZEUvWHhvaGZ0UWp5Y09WcG9Hd3RNYzY1ZUJYU1VkRVN2a2VoaVBZbDhXODdYRFlVeit4Si9jS3ViVEFrZXZoODZaRGNtOHJVbkNRTVQ5UHgvRnZYRE9LUUhRc0YzWlRaZ0FGVEtzVWJya2tsNXAwZXFRSXRoSWFUdzc4cXd1RlYvRXlZRGQ3UTRZQVhnR0N4MWxMSlVSL0IyY3UrcGN5OVZJQTRRaERWdHF1ZzZJb1A0dDk1V05PZHg0ZkhIZUJ2OU1WRGQrVWM1QkpEWTB0NU1QdEQ2U1N6RGcxeEkrdm1zQVdlZS9ucU44M1JGZDVVOVVJTHMwMitXL2ZuRkJnWkxPUGJWc0JqUXI4MVdtZEpvdjBoTE1jM1NxMlNZOHRNdzhrZ0xHcXU2bmRGVTM3SytIVzNETTVuNmtvRDk1dlp2QVJJYmVyajZFNUllL3hUQTk0c1JqSVFLQWRyeUdpNDZnV244YS91UUgyN2l1YzRCMEdOb1BEWXJvTjVjcUJJWG0wVVNFNms0R1BpU0hMeG50ZHFDVFY5Z01oQi83WnNTeTZ1UGJsQWNnS2VwK0l4bDIvY2RNUzdzeVVkOURHSEtSaFpRMkkyQVpWaVFoeFZSa1YxSUZKK3pvdExYL1NaVDMyOGhVa3J6RUxvNlpLOGlRTUFBWTBCVm9ES0o3NGFoSTFXRFVVUXUvWVF0d3BsTXdadmlwQTZEZlM2S3YwQS9CZGVMS0xDSTduRXd3RFVlRXNUSnpHSzlOa2xUZGpUd1FqR3lSdzBRQXN3SmhSbW0vYVVWOFJYTDltczROWU5seDd3ZmgrZks2Z09OY0FZdXBtQzZFRVhrd2FnbkZaSGJkeDBtclRUNzFyaXFHZHBhODMvK24vZ1JlU3puWTJVL1c3a2FXN2RXQTBtRm9pdVBBZzFDUVl1Tyt0WkR1YXE0RHRyQUgyclQ0ZG1YSHZYTnVvdTNMV1RiMW9rcXI0VG0wZWJCTGplQkx6cXNlY3F5RjZ1VmJJVzJSZEJkeGRrei9WTnUvTHFDM3NzS0FHU0RGVjB6dnVjVW5DbE80VmdXS1RHZk4wc2RaWmsyeDVyS2pVM2NYZ2NCMFp5UVBKVTFyWitxcDB2NWpUYTRmWDcySUNuamRhWDVPVFBxek9aYzVFdHBsN1c1N2lCVDR0Ry9FOTQ1aFJjS1pSMlBjd1Z3ZzQyK2o0R1pjcEVzT1VRRTkyeVJVTjBuTmg5NWRzdlI3UXdRWWpFY0F3TmRBTjljdFYwbUlwOG01b3E5a3J4aGJsYmtiaU5ZT0Q2M1dQb1ZpMEMzU3NncTE0VENRRVRTci9CTmJkcFdTZjhzSEcyOXcxcTdyb041aG1JVEEydXpKZVR0d0d0N1BDUXVtbVFlSEVjVmtjR0JQbGN1WlRxWEZsNFdKMlRWQ1FVVnEwWFFydWdUakk2MDhtN1Bhd2d1MXZLS1pEQkRtZnlnMDM2OFNvaGZCUEVnNnBBcHZnZDhXenF4Vy9tZ0xNVmRlNmIxbTRaYXBnSFI4TEVQeVV1MytYWU44dVdHam5XVThXa2N4WFIrYjdCTWxBalowUjF2dXo5d3VnWlNyRmtSdDNETUtqZ2JtcjJxMXB2YkRwQ0tHbW5wQ2ZkWThkb01Hd3hYN0dkU0lyWlNRMGt0eFlFaWE1Q1lxbnBsSzlmaXcwM1Jld0s3MUFqT1F5KzdDdkhNWWFGVjFlYlJyRTVReVlxVG5iZTgvS0RLUjJWVGI5aDY0RFJQQXBuM3hsWGRHVXlYQU1NdFVweW12cWUyS3lrTEpmd2NHcllXMVdudFdXMGVSQ2hOckhlR1B4UnJ1VmVsak4vMFVZUWNvbHFKd0p4emJuMWdMZW5MVWZMVVhpSVM1dElCalpqNGNqMlFDY09ZRkkwNlU1NkNlWGlLVDZuazZ2ZTZBR1Y1Yk1SSEJORURjZm83aG1ZMEphZ2tqMmxsTU1Wb3djU28zV3JzMmk4RTJGL3VmL1RQVnRiK3RnN3hEcHJEUFVWbWJkZE5vY2w1VU5aYlRZMFJ4dzRtbVlJSDg2QWJzUHhMdkFUNVVIS3FtVzBvbFBYckNhQmF6MHNYSEdXZzJmWVpTUmlqcFY5VDhLejl2OUtqVUtQSXdTSHZlaHpYb00xeU40am0ya2RudVV3Nyt2OC9VU2FkRko3UXdkK3JvNTQ0ejNNRWJ4OHVLaGEvL0p3NDNWbzdKWm9GNUVBSmNNYmFWczVvWlNaajVpbUdTTld6S1N1MmtIOVhyZzFOVENaMEx1VjMzTU12SEQrYWYyanlncVltMnhkUEJuZ3NQeUtod21DN1Rab1Q3ZXR0eDh5L1RvcjNZWHFZNFBQSnBMZ0Y2TXNEVUFjc01zbXhYZU94Y0FqcitEVTcveU9UQ2ZLekNMN0p6VnZuTmFycmh5MUpWWkt4NVFRUlhLWndIWTVlOXNVQmlRdTBnU1pBNmcyR29DaVV4Nm0vTkN1RUsyb204WDk1UnBxeUZmYWxPQm5wK2h2dTRPbGtxZXdrV2l0RGR4OXRTOWxLRDdvQkN4T0xpck5YVDRuT3RvZUFYN2RnYkE0SmtzdnRGM01pTE9SOVFNQXM4ZEdoQU4rcFJWOTZYR1hCUk8yUTZLb1VwTVJ2QVF1WndVbEVzVTBpT3BtVXdQTnErS0ZvMEVsc2t4NXYzalE0aXV0c2tMb2JUVjVFaGFCUkxUVkxFMHBERDdaUlB3T2JxUEFjaDNHMGErSGhlbWNhcW82Z0kvYm90UWU5S1BoaVpORXBIM2NTTHFkZ0hwLzlTWU4zWERVeWJEWXN0OS9SV01OL1BkMm1QN05CNUdTS2hRZzJtdFl5SHRETmcxMUpwYy9PZ2dHNWdRdFg2N3JTQlNtM2pKYnREUnpiaTQ0S0pQM1d2eFJVcElFVUJCbkRqZTRHbnR3UGRCOTFGSC9jbm9CSkZUVnBOSHFyU0o3WkFUZS9PY05ka0Q4T2pQTjhsNS9KakFqeWkwNWRVamVnNHVhZDU2blROM1JwYWRNT3NhaWprQStxalRHbE9Wa1N4RWtpblRyMnhNOE1ycGJRN2xLdzJKbmkwR3hzck50MXY4TkpBamUzYnZCOHFyWW1lQVc2VUpCUFZnN3RFNGdwTk1nTnFYTnBaR0FtTVpKQkNMTS9rVGNJZGN0Zk0xYnVDYzBZcFJUbjROYzNKSWdMcWgrdHlSNE9sSGp1RTZLSmVaOEkrWlJsekxmOFlvM2dldGUxakFOb0tFRU13Z2QyVDF2aldsdEZQOVBlUjNuMW9jM3ZmclNPbks0USsrODJoWWdlMFdMc2xtMGc0eFJUa1liUEFIUHp2R1VwVTd0LzhQOUR2UHk4ZDZwUUJ2d25qeU9oWGE2TVdkUFZpSS8yR2R4d2RodkVJUFoyMFI1UEhmSjE3MmNWUDJ2NDdaOThWVGVGcTNqZmtwc25jWndZbHI4dVlzeEpLdzRZME9UL0pMa1dQTTNFN0kramVBTlp4d2d4RzdoQm9iL2NMVzVHbTZlUEI4dTVJUjNwMEtHUjZKSE4rcDlVSjlNZmtSMnRFaTdodGU2OFk3UE9ieWZjQ2FjVEpENzZWZlh1TEsvWWhVMm5tSVF1SDVNem51YmhRbEhWQm1RZkFTZW1XM2R6b1FkbHdjZURmUnMrSjFkOGJ2ZFlpdUVObEtFYmZpZElHeDBZZjUzUmx3NVRxRVNydzY4b1gyNmxwTzNxQWpheE5sdSt6OEN3QS9mdzFXZ21QZEFsMTdCcndWNzJtbHpieGJxaG4wYWE3MmRMSTMyZXBrcFRHZnRmY0IvT1ZSNE5IMnpHSklud0ZVSnVtQkFsdElxSkV5TEYxL3g3UmQvVGhSOTRCL3U2RWZ5Ym14WXdyZjl1S0ZBOEkvRzlsaUtQeTdZU3Brd3ZjM3NOSjh6YjRZcXdtNUMxSUhIMmhPT2RKRDMrTjdDWUs5MUF1c2lJSXJhcGVPK1JST2NDWVVSbi9iWkZRVEloRDFBRnkzM0FrRnpSejY1aUF1UXdVbmw3WWt1UGlmVkZ3bm9zU0d6NXRLS1B2emFVT24rb3Baek1EUExFZElhNkxuRklOQWRzc0xxKzJvbXJpUHJzejlBUjVueVFoVStORTNzWVUwZW9tUEFpOUs0VnNLUzBvMVB2Ukw2RHl1RlZKOGp5YjNGdjhFUStXbERLZk5vTHMrUUxlelR0ejI5OVljemYxejFiWmdHd1UwbzlyK0tjdGlPLzZZRDFPQXk2b09zS0RaU2tGVHJtU1pWbjQyN2hhQ1VIWUZpZ2FIUEIvUW9aRzBvTU42UW9Za05QTXhNbUhXMU53bEhUUkRNaDRsOC9BS0ErWE5ZVTkvS0tpUmFtQy95V0syNE1YYWZlTmF4OWNVT1M2YXkxNWc2Z0xQVTdNYlVvZ3dyNUxtdU1hcCs4c0c2cmYzV1lFZ1ovR1RLTGZqTER2Q1VHa2d5eDFMbGovUHBwWVprdVc4QkY3R2ZzcWxvZW5LaUZjWjFKY3FnMGdOU2pRQnowUW9UQ2J2YlJyNU9aNVpyVjJxWmVwSExOT2d5d0pScmtCNUJXcWlqN3RBNVJ5QWZtQ05wNUlVelVZbjY1S2dIcUFXbktva2M4RkdvWnh3OFhtOTJzKzBHb2pLRERTVFNaYk1uUHd2OUMyamxMZ0hxdUEyWnR6Z0NNOG1nTTNVY1BHalZFNndaSG5jSTFhcGx1VzFqdWJubEo0dWRiSDhWSXRzUENxWHQ2MURtTVNiR3VLZkxjYTBKUXV6V014V0dHdzNMWllGUXBHZ3F5Q3A0OWxuTFZHcG5rQmJoTGNGbzYrd0Y1ZlVKU1RieWZmTVJCOGxRemlKRGxLUWhuYS93ZmJKU1BENzZMOGFqS1d6NEJhWndiQUV1ZVhmbUFNV2Y0M3E2aGdtZUZaY1dQUk1qckwzbUs0QmlZZTQ3R3k5M21MeWZFZlM5S3ZjSnZTbFV4Ny9MQVY0Mk4rbUI5cW16ZGJwVWRVUWtvZlhwTzMyTjYvM3oyZFQ4bXFsWlZhOVlrMUFhNHpMbElZeklkczU4TFduNy9Ca1RlNG16YXB1TjJ3MWY4SkpvTnhEd0cyVVJxZlVma1ROZklBdHFPRlJUUzZ5UUJPclJMSzVSV3BBRzVkU2R6cHdxVXdjelkzRDhPZ3BTNndDOFFDNVRNVHZzeG9ycGpuZWp2UzIza2dBekxlMDJnN0p5akh6YUIrSjRxZmNVdHB5TWVRY2xadXJocXpobHg1cTNtNXgzMkJDdWNFUlJ4cHNHSEI3OXZnTENUd282aHV1MmcxVW8zWG9kUk5Fd1p0RjhmazNOeGlMWDVkZTVBUkZIMExmckFsRGxJd3AzUmNEMGxkM1hoYU9Id0sxYnp5SWdUZFJVSUxDV3RMbEh6Qnk0K09tRW9wbTVLM0dNeVJFV0RQVmxzNkV6OXllcVhNSS9NVXYxcmJwTWVGalAvSjU3emlJbi9KemlxaEZsM0NNeWJJY2ZTRFdCNG15ellVbDFycGswcjI0b2xEcXpYbUJPZ3BQMUtHcTd3eTJiYlBoZ3Vvd0hnWm0xaUdTbjF6b05NK0h1c04wbmZtaUtla1hHTGMyNmk2bU9tc0Uxa0ttTHNMZjhORnRiRnlIMUx0TythMUVZcE9NaXlDNWZoKzNOd3VYWUh3R3VZZnVJVkFlSEZ5N3hyQUFrRWF4RERXbHU3c3RSclNkMnp2a0o1V0s1NzRNdE1qU1czS2RNd1RSVFFGaEs2dTJpaldpcGx3Si9jU3FOdWZqQ0NuWG1PNDZ3U2t5MmtibnNRU0RGT3d4ZzA3NmR6WWxNTDZUbkN2bGNHcTV6SjMwT0g1VldGYVI1RHFuUUlKck9WbzBvMUh2dHpwdHoxbHlXZlVNbW1FS2pRdnMrajBaa09scDFWL0ZsVEl5NHNucmlhWUFpcis0NFIzSnkwaExoN0tabC80NzRyZVMwNFhuc001VEl6VDEzdUdFWVB1NHN3eVRUNXNRTFpHWC90eitRTkRiRWVXTzNtbTZhSU5vQkw5c3UyWWh3VG8rdFBCTndjMFNqZjJ1MzI0N1FHSzBnL1VhakVKZkZzQjlSTWs1QjhMK1ptOWZKVjJCdjhDbitBWEF2bXZrNXg1R085aVlUcVpqbHZhY1ZUZEdMVFdPMmZ5UW9XK3BST2dybzFzMFB0TGFwazVaS0xub1g2ZjdGMVl2SEI4SUpvNjhUMnRBVXdpaHhiT3crMHh1QlpEUVlkaHdiNzhDQnhEQi9vYnVWME1hY0JEenVFbUVXMVdqMk9vK2J0VkE2cjVKczEzZU03WUVCNHVGZmRiZHMxVk9sWDVkZ0dYcUtCV2dNRlVNdzZCTlNGS2dQY3EvVVdmQksxT3NXcHIzOThubDVwZU9yK0YwZGNZV0w3RXovTUVtckpkS2tsS1VSUVFiakc2bHF2L0l0ajNwU1JoWVpkT05xMmJDSVI0Z0lxU2k2VSsybHEvaHpZazZFMTZGTzI0TmZMY1Y0SUhGcjlscXhoTDRzNlA0eVFCc0JlOCtjRTdUOVRsOTJia0JzN3VNdUZ1dGVtelBBZzR1YnBGVlRCYmlzMEZFM3VRMis5bUJ3M0o4RG5ZYzNtL3FWV2llcmpBM28zcHJ1dFhZTENhQTFSYnJJUjFkMGFtYlVGWGV2ZCtPWUZNV0FQblFPMTB2UGVtMVZHKzFDYytmWWRMWkpmNUY0MnU4U1BOa3NTNnZuMUhyMmhVeFluMThSSFNBUERLcFFZOVk3NUhRT2VxcjVFd0hDQ09JODVneFVlclAwM0hzbndRV0ZUWEt1OUFsdHJNYzNaanJjOFMvaEtrSXVIT2ZDdnBNdTdhQkdpWUpOQkNzaEVONXVxS1FpcGE4WWFzblZML1FrM2NXSGtuN2JYckQ3THQrNFhUa0RMSktzZkxFZzJlbk9JQUJRbGZkMlpMbEVmektvZTdZOHJ2M09Na2duSThlSEJ1SDAvT1B5SEU4ajVBTTJCcUJDZXRPNkdaZ1k4aGg5QmVZWUtZeldoMnh5bkVvMkptTWNlS2hBeTkvTjJoQm5GUDczempKL1RXS2VKMlpBUzdIVTRBY0tzNWtWTDNNODFKMnNSTEVrenRUM3RkK2ZBalhWc0prQWFocGJFb1F6Zks0QTNQWE5xdzRxUUJwQ25ZWWNzVmt0SlpnVXFndmRrUzRVRldwR2dHaGJmUk5QQThJSkNGRVJDMGdvWk5nbHZ0M1JIN1pwSzVrVmgvU3FvQmRoZjlQMjc3cHovRnVxa0lCUDEwNU9aYWxiTHM1cnFyR05zMjRZLy9pYnM4RXRpZ2k2ZXl4amdsZDl6LzBCZTN0Z2RYejQ5TEJKQ1JQNi9semdaSFlrRm9jOFo0a094MnNhUVBjUmRVZjRTZVgzKzBsbTVSVHZSQ2EreVVWZnJpNUZuOGZSR3BualFkNGZGaGlKUGorOTRONVRyc3hEa3liSDJFZ2M2SFMxOGVoc1ZPYW9zNkM1MDJKcEc2YnJmem9lajQvV3k4YXROeTFwRmJSN0lHckRqc3Z4L1JzWWhlUS9NQWNOcEFBeG1qbGppUjFOZmlZWUc4STYvSXJDNXVjT2JISTgvdTdWVjVpMG5Pb2pQRmtNZmhhSjJwVWFOUlQyQ1Y4dHQxelh0anA0a1hmZUFoYTlvYTRnbU1QUEs4T3RsMllQd2tNc1hQaDQvcW9VSFp4dWZjcmQwUHR0dTEwU3NSVGpOMVQ4M1FNS0VoMXNoOGJybWFzY1lkcTFRbTBSaVVSK29PVkxxb3F0RkxnbmNNQks1djVGaktpWkoxMmhlT1BPcm9QWTg2MGk3UG9lTXRMRlljWmk4OTBYU3A0c0J3OWdHRUVINFRpWXJFMEdHL09JZm4wdXN0cUdYdFhtWXFZZzJ5UDg0eElJKzNRdVJKNUhXQ3V5UUl6blR6T3FFTXFPTmJSYjFNQWdPY3dIOWtwVjdSelo1UGxCZURnM1F5RitUTjIrM2F1bUo1MUZsOU1zQkhxaDNaUWlJVlJyYnlXMDlUaDcvRFJDSzlua2RaZzIwVnJleVZQZDRicDVQZWpSQnhVdEpNZzE3WXNKK3RsMnhpWXczL1dWNGNhbkxESnZMakF3bUVOWE9RTktwczNUUzZlQVhVaGtBNTdEanhtWG9CRFBsdER3VE56TkhnV0FET0NXeGpZaDMwNC9wWDFOMThJLzdSVVhtN2l1bHR1RFZCam81UHBsUmlOOGNOTFFkL0RkeDFyejZWOVRtYkZIRmhJR3hpRC9FNFNaSTlOaW9Ka2VGSmFaK3VZTkM3Uk10UWgxN290QlhzUWJsQThwYW01T1BzNWhmcUl5UFhEcUNTSGdycHhwRnlPQUNxRHVmTlR5cFhYUVFlVFhzTTQ0cGJ0Q21WTklTVk15L1o4S2F3RkZ6d0d0dDdUZDhNMTZsbkVOei9SNEkwTXd4dVdzZk1hSm41RVd4aTNZTXhYYTY2VEJPMENlNzVVWEcwbjBoSTdxQUhJUXV6S1ZnTnp3WjVMQ21Yb2pQVkNPaDVBb3VBQkwwR0l0Q2lmVnI0dVRRa0JqS2JqeG03YWZLdjhOWTZua1dpZ2hKekRHQmpobU9xSjJHNkw3UkpKa3FuSHRGaVZ3Ni8wNXB6aFE4SVQ4aEdJMVN1UDZtdWVlVVNwandJTXd3QWpzRFhSWlhhRjBDRWlqS0tRYzgvSHFpa1V3SysyQlpIb1djUGd6UnorN2M4UjVxSFR4UW1ZRlN0b3Q0U3NDYktBTjZvMDN0UU5teXJCNG8xSjZQdjRsN0htblNwLzUxaWNPUHZlbVVyRC8wdDRsbFBFemNRdWZxeDlWWkpHM25pcDRoV3JZdmE5SFpURVhEeDlMUE9QZVhzVy94MnY2aFJLdlF6SHpZZkpvMTU5TUZvN3VLZVdKdWZsZm5OclNqYUxlZlllZm1QSkk1c3VvMFh0S0U2VlhIQVczSjRpVVAzTTBJZ2RJcm4wNGhaUnhYMGswZjVHTE51T3JJdDhaU3JKUFlyWGs3RlluT3A2UXp1U1Z3WWZ4OHZVSVV2cHRoaWZXcTFuY0FhNkpCZVlaQ2dqMFhWd3VXU3lJUktkTVR4WVcrOUk3bmhheTRaTjJiSExpR3dHYWZjeC9yazNaTE9uL09QM05tak1Wbld5RlZUa1BXNUJTVk1Ub2RYTWxCRUkrSDcwNnAxLzVvM2RQODJYRGFOa3MvSElQV3pCVHZFUURka3FGTEovUkZpNEpiWmF2c2lLdnpaVVdVYUVyVHJhaHFhTm1NRVRwNmxRaUVMQmVhbzFzN2ZKWUhSNmNlMWNIQVYyNFF3OXY3L09qOTBQSWE1amJqajRhVHB2eWgrK2RYeUJ1aUEwaU1WVjU4RUI4TFhhMXpiKzZzVUtSUUYyYnV2ektZeUNnWHE3cE9TeUtyN0dXZWNqbWhsdjZyZUh3SXhuTzcvc0pGa3FCMU14UHh4bDQ4bkFYbEtsbXNET0Z5d0R0VElxdnlMa1FnREZhS0kxektrSkVnMTlvOEdoRStqZVJFc1BsM1RkbEhNTTI4NC9tYVlsaS91NE1xK0YwUE5KUXdQMTZBQXpBRU5vdUdOSEg4amt1cTZ6NjJkSTNQWVlNYzJrSExnYTJ2SkFnK1l3bWVMWU5WYy96UThZdlVGZUNZK0JaYWs1VVUwNnpiTXpNQ25TNE9CaE1CWFFINWUxeFJFbDVhbHB5c2lxM1A3Zlg2N0Q2ZmFDd21PVVRMM2lqYkVOY3pFbzFod1NvL1dXTjFMZVV2aXZsaGx5c3EwSVU2SSt6OGI1bUNXWmpKeVN0Tkx5NE43OFZBSGVyWjFJRmJmajErMW00akQ1dTFGYUN1a3BvWXBJa3VQWmExVjQrdFVFVTVQRjlPU1hLUVZUT3piZHQ0R3BrU2txS3dRTGhQZjV5RlVuY2V3RVRoa2s1NUROdUJXVHoxcW4yK2lZdmdibzB3RTZxYzRCT00xby9ra3Yyc0VUZWtCRlYwVWlpV1dGYzkwcGVhVE1vaWoxOEQyZ25wcThDdnlvSStKYk1RbnJicEhyWjdCQlVhVFNhekZub2g4Y3dsWHpOcU5EcDJvQ2ZpYmNMSlpKZllsWFNIcDdscXV1cDh6WHpialJaNDJQclBwMm9yM0JqL1JnLzVKUW9IRXJPdVE1VGtGYkxqaHFBeGF0N25aNXhUcUdINzFNSDNlUm9OcTYxOWpMSEhEZ2kvOHRXRi91NGVLcXV0a0dCbGRFeTN5ekNUbmE5YTlrb1ZvL3NaTHNvYmlYcmxTcjNTNjNCWGRVZ0RyU0pPSjZvUTVoT2RCbmRSZFZGck1WRzBmUkhTM0xSdm16MWJVVk1wQ0ZJMFg5eDdBaXRibnFiT24zbDZWcyt2b2plVmdZZGU0cGxoZEJMOWZyeDBpeW9vdFUvcHNnZ0JMeGEwS1ZTc0lIS1MvTE9EM3J6MFN3L2FxSjhxVStCdmlwcUF5VFJXVWttcWNtTFdpZEY4WVYveVBEYWVoWUwvT1JtNllXa1Q4OThWTTI5N283aDdjWG8vcjlxTEVQRUt1Zy9GMXpka2VVNWlDaVk5RmJJSmtMUEhNVCtMbVp0eHh0MCtMTE5SdStIdkt4TjVNVXUxdkVpZTJTbVJkdlEwYjMvUlVSNGdqWjRHdWVvUlJucUZ6VVBvRDBJSDhyaVMvTWs3cVdtSDlFNGE3VnAxUVdPekY5WFA0bGNuYmV6TkxpNU5aeUQ1MEVETm8vd0RqRHRFL2IvZFY5WG9wWTZleUpaYVB1R0xuUy9KT3dXWDh1N2hiWW9Kb1FJRVZnNUZoZ2o1QVdBK0NGN1ZJMmFCLzNubEVQVXBzRGdLVUt4dkVWOEFpSjFoazF3S2crdWRpSXlueVRXYUV3eWp5ZWIyczI2bUtINGZxeVpiT0ZWRVNmU1ppemVlREdBSHFaUk9kRlBDSFhLVlVOWmtvMTROQUd2N3VpU1Vsd0s1SURURkxYSTN4N3NUSkJuMnRDNWoxYUloNzhtR3ArUFNzcFpBMmlhalZuRUhvaWkrU2JJMVdIYTliTzlIeU9TcjB3QjZUazN6VFZaM0RkK3hqdU1pVVFaR3ZLQlpMQWVFeWtpd3NUTm1oUUI5cmIzcHdkOXh1ajR3bmh6VE94QW9wUUhrc3FsRGtkWUtFYmluVnFMZ0JRekRNMU1SUkJWdk80Q3pPeVAxOXVHT0hNUGdpWXYvQStjUlNpcHZzeG84WThVS3lIVG44WnFSb1JVVWw5clZvMTVoVWVBeXFpd2N0aXp6ZEpzYkdoNUpuZHgzMlpJbURWQjNUR0lsYTkyS0hLK01WdjhJNElHS3BvNWtLRWhkMDNrUkNqRU05czE5VGZ5Ui9NZGxBYnZiSkI5MGJEK2g5ZXAxSzA3Ry9yL0tybzB5dytBWEpjMmlSWm5uL29Cd3BvQkdxNDFrODBOMGpJVGZMN1JpQnh3MUU5aHN5bkpZa290MTdjeWtsclM3Z3pXQ3pub2pLajM5TGZvaXppQnRHZ0xzSkk3cEZpS1JHajBQTFBFWDRzWkJKSUFMTHlEdVVHMFlkMi9UUUZpYUNyL0xScVlEelFLYTgvd2wyT0FOWjViMGI4dHIyZnVkRkIwUTEzR3ZHM2t6MkU1c3JPN284OUhuRXJKazcxcDRlSERxYTlFbmcvZHNaSUhwVTRYcnNzOVFXaU81R0JPK1lYc0NYemJWb3hUTVAwSGRJZGVVem9tQnRaSXc4OEtyL0F5Z3VJZnFPWUJ4bmNGcHFFbkpVN0JtNmVpQUp6MnJvc1hvc2lIdGlvc0NZSGltMXRiTzgvT2ZEV2FMeUF2MFhtdGg5cFNRN2I5NlJqRXgwTjlOMGw4L1ZwT01LZzVSd2FFMEpOUTkvdDVOL3lRVVlGZC8xSmlQcG5hMy94RmpPUFdheStPZjRlQ2lMVkY5ZUttYS9uTXdrejdmNG90S1FuV3o0ZFFwY3hRbWJ5cGh4aGUvVXpEL1QzWnY3SGg1YmRpMXZqYmVab1B2VDh0L284b0l2eTBqLzJUdm5HNDd1T0Ztbm9ITEpzK3FOYlJIY3M5My9uLzlCcDAwWC9BVU1oSGZraUx4dktLajBsMEhBaXVCbWozRmxxcVJVSVQ1YzdwL3ZDTGJwaUN6YmUzemFicXo5WCtYclhkWEpCZnZpRFBOWkZ5ZkJNNEdtVWZTT2JIYkYyb2EwaDY3VGRybTZudGtjaVZOTmJKck5uTVZONXo5cmU2NTdyQTdzUFFEbExZTHpkQ2FOSkVWM3VhK0l0R2IxVlF0SkdleVZXaWh1M3hacFZ4QWpURDRLbmtLcDlaU0M5MlNjdVFuQ3dYTTl5VUNkT2R5U3hkR2ZmY2VtMkM0TnduV3U1Q3EyNTJiY0tNOUNUSktaVVhGalVGSk5qWFducEorYkhlcDE3aUJlQkFQSWxaM3Roa0VUMmxia2RoMnFEZDdSYmduOTl2d01CZGozSFdJTVNmTkhiN2hEUThGQVREVWhTak1PZkxBV2lkSXVyQ1cyb2ZJTGlwNTFFcDFRck5YN0h3VUtLbVlYMjZmaHVxWGNnTWNkd2RMaUdXY25YWlE4azRhSlpzQlpPOEhWVHFYTGRIdGZLeGRKVmdIZDVRTmNha05hKzVIVDdNdDhNTFZjZE9xYVhUY3R2dlZVaGNvUVJ4VHVSNFQxU1JadWllSnoyajc0Y29UUDZWQUpINGcwNlk3Q1FHd0ZVK3lHWUd3elA5bVg3Nzd0V2dmcmJ6NEptK0FTMjN3T05pamZCRzV3dUxTdnhvQ2lNTlZuR1ZIWlNTcjdBVHZyYnlVNGRnVGJUaDRsWFQwOTdWM3BFVVF2UkJzaGYzK29TSENXVUlFUHNGV0JBSXNuUXRGT0pZVnhoYkxzZCt4SVFrMm1KckFiS1JvZmpoRDJhcnBOWmRPaERnMFZrdDkwbmtRTCt3VlllWHducUVOY21NM3p5TkFjR0RMaG1GaGwxWTU4NVdxWFRqRHN6WVFpUHQ0TzNQUWJXaTI2Q2l2bW5PVmNmNGY0L1FzRzZsd2UvY1JVVDZXa3hwVEs0S28wQzhlR1M0Q2l0SEZNRGpSc05rK0pTMHJVOEE2NmtHTFRWK2xZR3JrNU1nRGp5WTcxUW1jczZ1SGJkUU5ua0Q5dElJanpaUjlTclUzNVMyQjBhbC9mZzZxNnF6TmdqUHdWSDdmdVl1eW5iUjdEQlpkQXFMREJLYjcrUHNWQVMyb3RQU3E2UlJhVE9YdlJLWUgyekRDVDcrSS9uRklaRThQUUVQelFJbGp3cUU0ZnJhbWoxUENFWjR3TjZNb0x3ZEFkTHViRWp1aUpialVwLzloMmNvRStJNGJRZnZtYm96TUY2TUgySzVEcHAwaGxvUWo3c2NKVjNXZVIyK0swT1ZhZEhNL2EydjcyYnY0SGdSUGhrZFR1QklnNHhpNkJJc2R2UjBML2FPV0xxNk9XbWJjbnM2WXR4ZUdxbkNGa0hUakdPUlplSUhBUlVzZkZPVTdqSlUxenJuN3JXaFVHa2ZITlcyN3Z1UEduaU12VFF0S2NHdVVXMENhTDBITG15QlpjcTdEV2J1bVprWFhGT3hCaGlUZmo2UzZqNkpGY2tXaTNpMjJQNlFOT09UaVV6MjFzbmlMaXhlOStGbWZtdGU3d0t2RXowNDQvbXNzSERqc1cwVkF5UEZzNkh2ZU5XK1h1TGNvVU1tWmlqLzkvMko2TEFZMFdPZm1iUExCallSTnZaTU9oYmYrZ2MvdmlJV2ZwOW4xa3M1aFN5dk1FSzlkcmFhRWtYRWh5clZFTmRmemQvclgwL0syejBIMTlwaXBuVkl0SlpDQ0h1ZER3ZnZ1dXNaa0JqL21PeHBJNVBBNFNNRU5WOTMxQ2RaUyttL0ZBSXgzN1ZZOE82YWxwQnRFSS9Ob2RNZmxiN045Yy9DQnJrT0ZYOWYyTEN6dXJRTU5LSlM0VFNJcGQyc1ZsRXZJTjFHTnZTR3pmVzllVi96aUtRcjVQaFJLeFU5RG4zaGF1blorditBelBaV2JlZ3NyS20xNytUNGtrQkk2S3RjalJQcjk3VGhrUlBZVVdGWTVFR2hiZXFGVXcrN0RUZVBRUTcwdlBZTVNjYU9CQXZxWTNETDdlRmI1Y0ZzbHoxYzg2ZXZESlJZU2p1d3loWm5wYXgvYndvVzRKejNEUEYwVE9XS21iSHo5ejBRYjFGaDcxRWlneERLbUFCMFd3SlRMZXExcCtOTVdUM2ptRHNGL2VKOXZubjJkbS80aTRidVNOb1V3bmJneGgwNE5CcU0xdksyK2VlY0NGRng1d0trN0hSMThmVjJrN1BQNCtEd2ZHWnFEL1VrRTBvYllyWjVzWEZGQ1dBZ0ZvKytTaHM1bXJKWHY2dmtqRGlScFVncWFLTlhkZzFVd1NEeGo3NjdCd01vcnowdEsxVUtGRWxFUG5ISXoyQUxraTNyUC9PR3VheUlxenAzc3RYWEE1czFreVpMcmdoRkhzVzlwL2NSZnU4VXptamNYSktaSm5TVTBiZnRzL0NmT1VQNmgwbDQxYThpVjRra1JReVRQd1Q2OTQvWFI0MDFscTVNZkxVZFpHcmRTbElEQkQ1Mk05cFkzd2k0M0FnV3QweGE4SUkybVpJQUYzWXRPQmlOdDJGVGU5OWdyL3ZhTnJWcnBBMkxneWcyT0U1MFhydytSektJWndVa3RIU0VEa1V6OTVSUHhkb0hpR1NoV3RoSXVZem0wVDZzQ2YwWmZRWjI0MTdINzJENE5xbXhodUZtNGQwa1licTFXVmhyNUFTNlgxMEVXdm9SUFpIbHJ1aXZ4Tlk2Ullucm1TbEJMM1orVkxwZHNRTjAwK3BSa2xvRXhBd0NrazZHVTIxM0dEV2lVc1pQd0J4OE5YcFJsbkZqZE4rNlYvb2E3d3pFY3cwZ1ZGQmhOWVdQNTVacUNDTWtNL09XT01OQy9Wbko5K1kxWE1jclBoNmlYYkdnNWdVVU9hWlVZM0dRdk83LzRkVXYyRGNmTk1NY1BTZXN1c1ErRGpRYlhRTmlqM2gvRmQvbitTQ0F3RU9JNTZ0YlpReDB4ZjIrdG9VcTNieHhING41QWowZXhKWHM2d2Y3dXRoRWs0VWdubEIrc2t2cVBqalB1WEp3V0tRWlo5aEZ5RDRtNXVzUHdoUFBaa1Yyclk5QmprbW5Ta3ErT1Vrd2JhbnNjV2dMWG91b0xLM25rSitVUEEzOVVEYWFuZklMVklqeEtldXI5TExaNnFseGdNNytDMm1uZFE3MHozd0Z5ZXV5dGhWcHdHRGZ6azJEck9xSXlYK3ViTUkyaEdpREFUdnkyY0FSbEtlR3hZb2ZWLzBiZURVbC9MQUFiMStxTWVvY3N4N09UcEhKekpGNjNRV1hiVTBWSk1CTE9nQUI5bkZURFZMTFJoMW9vR2VPVkZPcW14dUNUcThsRDNwdEVHTDRQeXVGbTNhaWZPYlkyVGlLT1licStXRDUrRW5jZ1ZEc3FvRnk0dFA0ZlpTQXg0UFpYZllJOGVrbGxoeE15bkVmQndPczA3RUlJWm5pTExJMFJ2Rm5pckswcWYrSVZRYit3SjNJMEVqZ2ZSNk81K2pFRThFT3RZMURLT3cxZm1ubFlna3BBb3NHeXViVC9VY2N6aWRvYjc2ZEpwY2J1d2Nsdys4TFhNQXhZTGNUVW9iSzNPTUNPdzZMYk8zSTlpQVRHNElhc1FOZ1ltcFdkalNkbmxQWHd5aGIvY3VKQVd5cmdiZWhVZHpjRHhvdUx5VVM0blEvMmwwcm5nS1hUVU43ZG8weGZhWFV2eHZERnB3SjROMzJaMm91RGNOWG15L0F4Z3NBcmdxRVJVWkM4RysxUXR0WVJZazFwWDZPVW9Ga3JjMlpRWTZsY2NPeUhiejN4YTlnSVhGa3NSeFU0Nm1ETWpnZ0R0R096b0xlL1NIS1NFNWJFT21rdWNlTlJDVVNLUkVoLytJbGQvQ24vTE84VWRMNWV6QWw3VWN3dE9iN3dtWFVDUk0ybGJMbW9rVlhCK2wwV3FRZHI2Q0NUT1p4SU5xQ1Yrb0czVXpHT3JrY2hrb3oyUlpseDdhSEc3RCs2c2pjWFJZa2hjckNHZk9pano4OTZhRkU1aDEraWl0clF6anlMQ2lBWGd3YnNTVUh4UUp4cTFra2dZZmU2VmgyRlFTbjkwQ3d5ZU9ZTU1vRGdNUGxURGNKTTFVbTlYMll0eGtTRkdXaTgwOEpMS2ZSZkcvbmFlOFA4djBUUEkvSHlzL1pGUHV4aS9OMjA2NjdrbXpCSkNKVC9jaXJCWGVCSXM0SlhrWjlJK21BUFAybTcycHpwQzVscDgzYUJCOTBpb1JDTUowV3RSUk41RFlHYmsxTDk0T2IrNzNSWkhhc3MwOXdkM2IyWm56ZDRIUlU4V1dQYjIyTXk1Mzk3cmxpL2tiRDBQNlRwKzNXRUxHc3hUcEFTRVZldzEwUlJIU05NZTVUWEozVUFJaDlCSms3a085UFArb1VpVWNNQTBla1grS1JaRC9qcVFIWGE4N3V1OGNOc2pkYzUxNUlGb0VvWlBFZHIrdjdGM1A5NGZsc2kxOTBPb0NjNXQ4aFZtaWJRYmlrT3VVOW5rSVpDVDIwUnBMdFIxUVBGeUNGMDE0L2FyVi9IdlNIUmJid3dJWThQaXpCSnRmOXdBaHVhVERMWGZzNnhWYVFoeElUUTQwVlhKcFJFd01GSTlCNmdZYXYrQWw2NUtUM2dDVnRRSUEyRWhhamdWcjZWNFR6ZWhpZzdNVnlGV0ZoZWlaQk1MQzZqdG9LTnFIUTUwMG9wZE9reE1VZGZwM3k2bkhvNGpCS1NwRjB5cWFtUXRSMnJ1SlZ2Z0EyaEtZZjkwemFwTENjVGduSzZDK1FFWFlCOVJ1c1pSakJ2RkhqZWdrTFpMZndLeUNiOW1CTGNkelBMUjZsVHI1aFR5NlJwRnE5WkllbFR4SG5TOGdqWWgyNXpnVWdBeGw5M1prZk0reU1RY3E0aXNhNDFWREY2Z2lpZWh2c2tKMFRRMXEyaFJVbkV0VTlNYjB1RmNCd2NWNUdIeXd1RlM1UzNBVHhrQWQvdFRwN3hnWHMxVHBSQmdrQ1dRdUR0TnQzWnFJaWxvaStjZHlxYUxwTE5XdXh3cTJUU2c2RDhLUjJqSmNxOW9VK0pYUVFub0l5eTU3VDZRUW1VR09sMzdkWHkxYk9oTEo5TVhFZ0tsdjFlMFBCUnRTbVMvSVRPTy85dFVoc3hxajBZMUtOWWNVQlh2RDd6V1VEbEQ2YkpFZlp2bjd1Nkx1clUzcTFqK2QvMDJFcFpYalg1Ym9zTUt4R3dKQmd6QUR4T2pWR3FWVUx0MlgrWE85eUlzMmxoMzlpMjhCRmFZWEVPay9mSmIzOURjT3B2WWwrWThPanlCRVhYOFFsRUZqeDV3dytuTVVOcFVQeEh4dzc0L1NjMzJ5S3BMQW4zY1hRWTJWdG9mZlk1aFQxb0tVZEdFSWZVRTNKWnNORVY4aERaUmtRNFRoR1VTQWw1SzUyRmhmT0JtaUY3Q24zRVAwNEpLSDZ6RXZ5NUpRQzhBN29sWmJ4bzJlZVdUK3M2a1FPV1l1bkJIc0V6WEx0SEJ6WWVpbFNmYlgxWXNMbms2TlQ2OFRYa0h3Sm95NXhjVlNTR21EMDRBcmd5U3luK0ZVdWMvQ3RQcGRiN2ZTeTdsS3c5YmY4cWxFWi9QTWVPTjhDZkk1TFBySUlPOFd0cFAwQ09nb2hWYkIrZGRsTjJ6TXZkZTdqYjhPSFRDbFBhT1d5T2VrTEJVTU5zQXBVSjZvdlpGRlU0ZE4vaGYrQTMxRnlseXp4d1VSeFN4Qkw5M256dGlXbWNGYUpXamtGWXR2Z2MzT1JyNXFKK1VVVUZMQUorcFgvY2MwVmR5ZGVwT2dGQXNqNUhTbUZlVW5WWHd6ZE54Rm5yeS9GMi94Y1l3ZDBNY0c3aVVVUUFqU0VFYVJNamd0NVYzUGQ0OGowb1gyYXk3Szd2bWxvcm5HTnR1a01Kb2xyUXNzVm1LMmhpczYrcHpmYXQrUEljT3VIUndpUDF6ZDVnVis5c3Z4QUJxSnF1SmlyL2RTSEY2RnJPa0dxdFlFZUlwMUhCU0YyZU9rT2pFVGVqQkhhQjFoT2tRdHJRRk1XdnhLSXo2MmNPOUQ0QXVOKyt2VFdnengxNHhFdVBvd2U1a2kvczNSVVdJWXVjWnY2S0hST3F5dzcxVldmbDVpUUwwdHZvcGQxa29obWM3YWc4QW9XL0kzdmJFQmR3OFZkKzlqaVFPaG1IRmROc2ROVGtKTTdUeVFONVl5OXVDSUdTdWNMaGd2QVpQUFhkaFdOaTZmckRBbWFTSXM3SXBGN3VML0ZzczdjRDBnWkRtMjRRUEFlS3NabGVPM2lyZ0FJNGJNbzVseGM3dm1kbkdabEFYKy91c3I4ZU94eEc2LzBzM013WDlKWjNTUnVaVm1yWk0rVksxdVBURmtKWUJTM2ZLSitoMVZnR2V0QnF3ei9SNy9FL3pRcjRvSGRRSDQvNU1Mb1FnTi9NcDIyVUQ2c0tpSWY1eU9jYko3R2wwbVRDcnhYZkZsbDBTbDZoa2hudmMrZnBaZDZJaW96RE9pV0x0bzZMZUNyZEJ4OEFVL0ZrcnV2NnovTC9TY1B2VjdxdFFaUXVMZnBwSFU0ZXZRUHRXdnRnYWxHdzFmWndCSkFzdzM4QTF1eGVaWTVYbWxuTncreklZZWFiSzgyVnpSQnRPcWZDdW5mb2x2aDFyRng5cHM3QWhZaDdFcTNuUnc4WDBtN1BhdHFhRHJHejl3b3hmL0tMcklTQnczUEtCQVk0NmJUdXUyUzFOb3hPTmV0VktUSG9XRUFtUHlxcTJmMmJOUDhoTUw0blhmU09sY0FHUFNhTVJGUzkxRWo2UFh3RWJvdkx5Z09IanlraVZTTS9SQTF2L2NwWSsyUlZhNjMxMGlvaVNvMVpNU1I5MHVGMnRmNlJCUERCTnFHUXJ1bVNzM1poS0YzZjJIVFdkNThWd1IyTjRPNHpPQXFPSkZBUXNTUWRWeXNMRzRMRG0wYkJaLzlSOVJNN1MvU21nVGJTQlJLTVF5WWY2WEl6K0Z5dWp0aEprdlpmWGUrOTd4SSswRnJ4dHFXMC9jcTRjSUpnU1NGSlZHRDFHZm0vV3l2KzhOOXRSNUhCZ1RNQ2YrMDBkM2hhYytxampXRW1ZV3lIeGs5UHFQczhiTDVYUGUrZWtJQVVsSHRPR2JJQ09UMW5tbHFvMmdmNytkakhpUHd6Q3BDUkM3TGVYa3oza1RZWHpTb3F5c1BTNEp1ekhBM2ZxaEFJRzJWTWV3VWQ2TTVKQ3ZFeTNyWkNwdXYwOXB0T2xPb3k4RHYycWg4R2pWMktpdmk2S1RGQzBwVFM3YTNCbGNEY1BjL0Y3U2RJbDR1VUxTMTNWZ2xKc1hXTlRVMExTN1dwQ2l5MG1uSkk5dy8weUdJcXZMMFBlakRmQ2RoSVkwaVM4NkxlN2I3NURrV0JuRFdFV29vUzJmZ3NWQ3J4aHk3Umx3NGV5OHBZQnlaUzAxdndibHNHRW9QdkdPcTVKSmNpRUNZajFFVHN6b1pxcjQvZm5pVFBCc3JYd29tOFlnZXFmR25QUFA3L2YxQm1RaklWcENtak1DczVBaXFxV3dhbmxKVnMvemhBWFlzVTQ4WnFyZGhCVEw2Q1ZHWURSRk9iT3J1WlJqZ1BoakVyMTFyQ2J3L2p2aEt2TG5sZUtqVFRqMXp3N29XZk4xM1BFRXpTRGwvaElhbzFrcDJDTEpBNXhKeW9rN21qZnp6cUJXMEhBNGN2d0VkUkdTUVNoM09kUG9sMDEwZlRKRFE5RzRnL2poRUxreFVJQWpWS0F6bmcySUM2dG9vTVRqSFJaaW5ZajQ5dGM4dHFqU2tlTlA4QWNZK2M4UzM3dGswV09qY1c0eitxMGxxNVE1MzJubGhCRlVKMTNVZHJaKzl3SlVoNjh1ZjBMZDZCWEF4czh6cWozaHIwWUsxZXMyc1lrQytYemszK3FISmF5TXdRNjJYdFhPOHlHaGZoUHZqeTI3clp3Y2ZEVWNmbGoxeDhwb3dSQ0IwZ3VSQ2FoL21aWVpIanRmdmxtM3ZDMUd3R0dxbFNvVGZLeVErRGpnblozeXYrc09YNEtYanBQMlpXM1l5eHJLUnV0Wmlja1ZGQXlVNGlzbkJGSHdiTmdxYmVjWmh3WUZXT2RnQVI1aVp1NXlLa3hKYkF2c0RyWk9DMXRNTDhSNGJvTGYwVnRKcVNNZTNJRUJod0pPaGl1Znp2OVd5UmJZbHNYUTdoOTJHR3gvdEkrL3BGMzN5Sm1GUHNUTk9SRW01WFZDL2dpbVJDZVlyL1hua3dWRFdSTUdRQzE2a01XN0ZSY2FPZDh5bzJQTkMyRU4vOWdWdGtZU3lNZis5ekdXTHk3OE11M3N4cVFUQzIveXpRNXFwUjdIelB5VER0cDlhRFNKK0MySU5ZZE1zcnZVdmZqWG15U0phWU02UXFySEF6UE1hcXk4dnducml2QVVzNnhtSkVDMGtoaTlubTIrdXZ1UHVaTHMyK0F0T0tjbVFxV095TjVJMVVyQWZXQmZFS2U4VldNb0lHTkNkSzN4ajNGUWVCN3Vyc0YyWElTTVBHZzdMYk5mbGRoME5ZL0F0VVBHSVduczlpS3diT1BiQnh6WTAyTk1kK3d6U2c2bWo2eXhQbVNxUUFjanFhSktyY09kamxkbVRORHdQd3YyeGtPcDlva1MrNGpXS1F5MVd1dGt5ZHJXKzlMbVlaUWcydllETUg5U2tPQkY5WW9qUTFWcW00R1JtcmJXSjVKR3hqUUhIanV1cDJuWWVKOFJITGdLRTV0bVpkdTdHbStuVEd3cXN5ZzJkeHBEaDYwYzYrdVZ1UVpQU2o1aThyNXM3aGxnU2JvdXJBdXRUWUhadnlQU0pTQ1JIQkcwK0Y5d1JUZXR3bzk5OFNhNkt0Z3A2Sk8xMnpwMmlwVEY0T3ZiNk4xaWxNNXVKbGpKVHVCL0psUFd1NXZENVdYelVaNFdEMGpNb1VMa0MzbUhtbjM0SFNqVnk5ZEI0S2JDYkhYSTJ4VUlXUDVKZ3oxV0ZQanl2NFpuQ3l0QXdDNlVmRTVZcS9ZWXBrTGxWZTVFdVovSWQ0dGh1a3d0eXUwUlVXREp0NDBtUURWNmpaUyt0Qlc2UGtwQlFuK29oYWhxSmJkT2lMUUpGUlV2RkNEVkpBM2V3TGFYN2FPS2lXMEg1WnVaMDYvVGZ3azI5QnlnL3dYTkN4Wi8xUXptK1ZacjYvN0Q4K29UUXAwem1IcTJBWlFyMzk5OCs2NldacVVsc0hIenFucG1YN2grMnJFb0IySmRNM3BzN2x1MFc1Y01TcUtiNCtsSDlidUovY1pwNWxURjRXVlJsSm5rbHloamhuaFUwWHZkbjdkeUZicnJFYWVIVU5EK2lwMWRkRm5hQzFTeGVSVDBsSmdGeWVNbGM5QkRpWGd5bUlqRUFkZTE0RVJRbVluOEZ0NUtkL29zUm5JZzRTU0E4L1hsNnM4c05HaXdiU3ExYVNLWUJOSVlNTlJhQ1ArUkJBdE5pSXpRVjlmZm4wRExrclhvY0xkZTFvZkV6eFhPa3lDU2NMVEhDajFsRWRwdHFiL0lJbGlNc2YyUnN0VHZmM3N0eXB3eWExd0h0Ny94K0RYakZJbXVHWHFNdVpaZnN1N1VOQVBoT2NoVXdod01LSm9XMGwwaHgyTS9wdVcrb3dXVmZ5cFB5OWpjRCtLcXRjekZzRzlTV2lrNVpQbkdPdzR1QTEwZ1V0NDg4YVJhQmtiSG05WHpPZ0xqVTdiT2x1YVl5UEhMeVUyTTkrV1JxVlVBSnJTNVNIVnJvMWhkbGc2ZGdmWGxGZkFlZjM1cXQxRWwvTkVGWXVGZEtWUGtzbGFPZmdDRnB3Q05yS0RHSGdyL2hMTUMwQ3JLaWZJaTc0QThpUENsdFZvd2VlWi9Ld1cxRTA2RnE0b3V6QTMyRjN2ZDM4MzAxRjJYeG93TmF6ODg5Vkl3WHY1STlBc1dDTE1TYXRNcUVDcno3dXQxUjU1K1ludjRpU2tVR0dENlpBUWZGSTVPaEZIQnZmSzNOVEk5QjlIMzhka0NiVWFTMm5oeFV3Z2huWENsb1VRSHIxVDFaWUVJWklTQkU0SE5KdFJHc014Q3VUOTlMWjl5MUcrQll4MWMyR1JHUElEL2xtWWJ5QVlEbXlCY003RUpEaWd4SlVoYUFBTm1PMFdTRFJaK3haWnQvK3h6UlNJNlU0Njg1L3kxZEF2dlNyL0xxc2ZPSS9zOXVRYk1YQXhSSFZWYVNTY1VaK1N2TXhST1pra1NTa0wyajF4WFhOaW9VUHYvVStvMjIwYkV0amlkV1Q5dFp1VG5EMnRTdk1iN0dibnJNVkNOaUJnK3JiTWJwVURYREZFampudmh6SVhKWmEvcm1VZjVEeXhid1lrNk9wclJxQ28zajFOWFBkOGpjWDVSMk5kWGtkSEhrbm9kb1N5aWlqYTdDOVRWSTdPeDd1dU9rbXQrNEo2OGlEMm1VK2oxdEZ0Z1FySWlaVjYyOFkrZmwzYlpjUDYzMWNGbFVtYUIrRnIzaHdMOWFENXZzdFhZS3c2NmFMbEFBZlVtM2xKeW01TWVxc0ZKV1pOR1Q3RldaczFOMFpTRDRJQWxDdmZHbzZ6QzZ3c3A1M3FiM1lSRUJNK3hzUXVIZ1d0OWY1d1JyUXcrcnF5MFVyM0E5TWVHMUlsNkZOallWK3VUNWt3aENSalYrc3U4UWZCS0I2eVVuS0p5czdMNmtZYjgrOUN2ZHUzazJuSm5lN1BVcnY2ZHhlVlNON0JOUUpEY2d5Zis0QWo3azEzZE54SlY1aWUrZTZlQklhR2hmSDF2M0dRdmZxODZWYXp3NmVMV1pkdCtnZUMxSU1teVJQT2luN2F2aWUzbWVtdSszTjhXZHlQVlg0SkJ3YS9CMG5lWFZEcUxGeGw2Z21BWnVnSlVXTC91RDZCWHFDWGVTZHpKOHA2ejRkb2lDdGxNRjBIZjJiM1hWdm9KQ2tJZUM2dWVCVlRPaWk2MlVCNHd0a00yN0NMZVFNeHNDZTVlcjFjdU1RQTRHQktmeU84RkZsV1RrZnFOenMvT1gxT2ZQUFJVclB3VWF2dVdNeDRDV3RBZEoyYTIyNE5EUlQvSndWWFE0SEg5azVqR0grazFUNDFtaEFQVnlLK1hSYXE3Y3l1eDdpTjQrMmV0VlpwZ0FCMlFNR1JET0k5K3p1MHpHRmsrZDZ0Rk5neW5xM1E3VlI3RjA2MUJuUFY3aVgwSGFzekRxa2ZNTkEzNnA0a2xxUHlsbjhaczdqSXgzakJrRlRtZmpEdFBETkt3KzU4R3J2ZWV3T0w0V0l2U1dFc0t0L2RJZ2tPSGhEVGUzeEtlZmI4RFVqUGdHRnBFOGxsVWZUUFpDNXFpaUxoT0VuRForT282RU5OZXZSUmE1ZzhjcE8rZXNlTENjNWNZa0JwV0UxSWRBeTBXdEpDWU9yT2gzYVhTd1JHSjNQOHRSeFlaV0FZUiszM1pGNkpyUC9RT0I5VFVBV1l2bW54b2NrdHNKR3lwMFlJWnZIYjlXalhOcklkdHBOY3pwUEpGVEV2eUtObmFJY3pldCtoMWQ4c01Ub2VXRDc4cGxCZ0xueEdVYTIzSHA5YmlDK2w0WGw1YXVXcjVQNUgxalN2MVdyaFlwa3BvU2NSRUQ5SzZaSlplVUtZSHRIODBUbWZWc0VRaHlzS21uUGVCZFZ1dmVpOHQrcDZwdzZJcS9hVWVZb2IzN2svUU1Oa1VVQ2pyQ3JpbXZnUWxYVDNZMnkyWkNnYk5EN0l3MHpYUklKdW9IdnpwT2J5akM5UVZkWUFWNnZVTUxybytYZERySHZPTy9LcmQ0MUN6eUVBVkNjUmU4cjNmY1NINFdSWDRjWmVWeUUvUTRVV2RyTU1IdzVDTWhsVXNudDlZWWVoWXN1alVmRkdMOWJ2SjZxL3pkQ1NXbGpna0M3NmpJMmY1WmpFbTU2dG56MnM3dzkvZXdwaHZQc0FUWVZhSUUzODlValFBZjFZajdFWE5FOTNVNDcwNlFET0o1dlVMZXRTckFtNlkycjI1NG8vR1BxdDhhc2tab1NRdUVIU2Q4OGxwWEZZWExrMVJTbXJRWFkzTktDRzFEUk0wd0MzaVpKTExERW84MzgxM0pUNnJXbkMzTUd2Z0JtbDJLejZUU3dkMXY0cUF2SWZXVEhCV2dtaVdyWEJjOGQ4UElZd3p5a2R0Q3pjMUdFUTdhWFNEbmZ4cFdERXZNY1hjb2lPVG5FcjFHNi9idkVhVVdoclByekVFZUdjTllxY1ZiaHl4L1UxRnBVVnpSSVl5QzI3MnRocW1ieDZnQ2lHQWxmNmJoQkdrRnAyOERDbXlIQWQ2a1BDZWNSRWVqTXRIT3pORHB0VThNWDFLZHg5amZKTDJjWHR1eEZoZ0Z1UmNHT0Z0TjJabTNqKzYyaDRLQ1RDMjRmSUlFRGdDZDNzRGd5a29FbTl6SVByU1V5ajlCMU56SGMzMkQwV3A1aEsxMFhHSjRiZGNKWEpSREJHeFQzcFBtNW1aWjk4RkFWNmI1MmZSYWlSQmk3cjhUbng5WEdLTFl1aUptTmRJNkw0VkFNRjVoMTZZZ1R0Zlc2eTJhM1JhV3VST1dmeHFxcEVCZDR4bXIwN2xyWjZQd0lyTXd0T0tXMVFxQ1VyVUJqb3UxMjE5OVZ1L0RzYzg5am9GRVUwZ1JENE1PRDNucmh6VHhUdWFtU3dQWS9hdUtvWTJJVzJzOUt5SlZkNXFHMmppN3VRZkt5TkNIWTBoV1RTWit5K09LV0tLdFYvTGlZSHJlcXJySDg0Ri9PSTNnakZ5eGMrMzVOVmNpeVNBUzFDa24rYnNIWVI2YzZxTVBiR3JxYXY0SXNYM21kZGJ5RFBDUi9oeUdMbzB3VHBIbUFVdVhmVXJ2ME05SDZyRXJBdHkwL0VlQXVKNElRVmpWRFlHTDBaMWR4cHExb2hjWU1iODdEdi9sZjR0ZTIyRnA2NnRvM2RsTGJIY2N0M1VPZVlubGhZYTNLWW11WVVuaGw3VE9RMzgzaklGd3RRWHpXejJuTmJvN3FsZ05PZlprYUcyN0FnY2tIT3Qvck9hOFJMdlpaSWJwb2RuTXZJc2RQcnArMDR3RG1zQXE1YXR0ai9JYjc3TkNuaTNyNmtZM0kzVGhPQ0pXSFBYS1NlemMyZ0JwbjE0a0QzUTRRZlBCOHVpbEFVRWF3U0htR0JvN2JUb2s1WXVxSmhJLzk4ZHRqSW9hb3pRVjNFNmhXdFJCdHdqZGN2RlkwRWFlVXBSZThwdWlER002QjY0bFZSUHE2Q21NeDdaa1g3M25GM1NuTFkxN05XMmpoUUNpdENDanhTc3l1SnRIaS9SMllCVzBNME5QTWx0dzk2aEdaOWRiYXNzenhZWDNDM0k3dlFjNWwzNTNuVDVRdUV3TGJQVEpkeDhvcmdlamY0MVExVzFUSjVyRzhvdEJKZzRqcmEzL1ZsWTN1anJwODVJOThpVWkxQWxZbXY5TEVSRjRrNXNFYk5aaE5uSitVajBPV1lrYWk5eE9lTUlvUk5FOG5pN3lDWHVzcUxzeEE4LzFiSi83NE50Q2RoQnhMWTdVeWkvTWRUU0gwdmZ4UEVaK1FQU3BpQ0hWcE1VTUY5M2dhYm83azU1TkkwN1BOaGlqcmtmVTNzcmc0c2FLZk1QWkFobGdVdWErMTNxdXpBZXhIVmlMTXFJZHNqSTQ3ckRZSElXd2tVUEJJV2Rab3VhQlV5VGx5V2IxZEZBWEFLa1kvMDloYXpESFZkRHVlbStWVnNRQnVyMW5MUWpGejBlK292bTlEallFdjhXY2VMYVhNRFpTMGRWRTIzOEE0djUyazJPVTluaWcvZWp6UUNaNFZPZTRhck8xaGxsS2Z6NHNjY1Z5NjhjUmh5MzlkRWxEZXNwYUhQZndlY2VXWDVKa1QvTko5d2ZWd1praWRFdWhEaGh5NTREMTV3aW1jTGFzaDJhRHVweUVqQnliZk5EOWN1VGtZeGZ6ZmIxbmljZTRLS1Q4ZVJ0VXppVFFzRjJYM3ZSeTEveU9HM2RvcEwvckRleFNYMEhQYUNXS2pVOUpKUXM0dnBsOUJ1Kzg0d3N1VkFTYzlOT3p0OEU5L3JlS0RreVVjd2dYTnNmdTVSbmplZk5KaHY0ckVRMldyNElHdWtyMUxLU3VyR2t0eSs3MVNnNmtsdUJmalp0R2Eva2cxekxNc3VaR093Nlk5V3krUlVDTmRlYTluVVJMbERBanhpTTZIa2h0UHVDOEJRQ3ErNjBHYmJrdGpCcnFpbkN2RUpveDJOSkVHY3I5OXdyNnpuWnRlUGVRZFZtTTNYeHY0ZWY3WGR5dkRNKzBxSC9NTzlIUmJsVzFOTHJRM0c3NHhFVzBuRnFRNThGY1U3VE1KYkVRNjdaZ1dac0lRek8zb3NFYkovc2hjR3hCc3F2bXVCWUsvM3RxVWt3NkNTUDVrS2JtMHFpT1IzYU1uR0ZoK244dGc4bTNYQ0N0bWd5WndnRDhhSVpNY3N5b1YzUi9hb2pDMi92eXphdXBKVUduNWZrdG9HcWFUbEtGNjd1OFZQd2xZb09DMkx0Nm1mcnJJL3k0NG1uKzdtTXB2YWdITTllbEdSUGJTbGtMbnF1eXh4UzIvdHA0M3cza2xwNlBYTUlhVGJWbm5COE9UT1l6cjBoQTFlSUlqZzJ5Tk5rQmplSk1ySHc4dUNUemZGU2tNTmY4WHJtTU9XeWVpSFN6T0VGRWxCSlZ4ZG5UVDc2ZzJyMU40VS90cU9LZ3NTUklDSjArSVBLOVJYZ1JxSFkzdnpnUU5DYmtjaUtITzh1UjhVWW1RNmgwVTNsYkMxL1Q2czJ0UlZhc2EveWdyU1lHdGlRNnJQREFFVEdZeEZ3WWtIUFdKZXhUcktVVEY2d0s4ZEtwcTQrQm9MakpnWGFUMDNIMnMvbHJ2TmdGcGc1MzJ1VSswZExyL1VKaWhrZUlYVHcvQjVUdEN0ZnhGZHdYcklTelNsd3dtTS94MnN4b01TS0JCTjFZenhHR1A3b2M0akYwdUpMNVlVWWM5NGJPMDdhK3JLWW0zclpIcGFxd3dqV3F3MTNpekhZbHExa0poS1dhQzRSbVRBM0U2bHAycW80WEUxNlo1aUhaRWFiSWpiL2FhWFdUQXk1TkNRVVdRSS94ejRFSC9WbWttSVg2QlNmbUpEaE1OMDRIYnJRMzhrcFVrMVBncWZTMmpJNUpMczhKb1BzUXlTcGlqdGZ1K3g5S3UyNW5JS2N2ZlN5eENVdklHM3F6WkRKanA0TzBrNXFiM0N6RFVPaGMzcVVpVXhiY3hjU0dvemFyejNVQUJ0b3hRcXZ4OC9IRVQ0cWFERE54UWRuMXdHa0Fnck5INWtaZTlOa1JxbzNRaGVKVFY0N2lPRWQ0TDdLQmN4aldXTDJYT2YwOVBIRGJXdWw4MDdkSlpTOGVUeFIvc3ZSSWZxcG0zOUJ6QVkwNVdja3VuRFJYUUIzaStSVHVnMTVoYXhzalNwOFoxcHRlWkc4VjY5eUtQTnVROFplYXVjRllBL2ZzTUxwZ2ZBNUxWcEV6QnZCbzZRUkJweWdZUFpHWGN5M2NuMGRpVjRXcmlZNGw4UXlSUFR3YlhwMFVKZXpnOGFiRkU2NmtTbXhyK2ZHRDVSQlgwY0dKYXRuN0Q1cGIvVm9PSXJyTjBWRzE2R3lzdHBzSU5pWW0wV1dCY09NMW43aUE2c3NLWkRQcEJHUXNBenZXVEgwYWtsOVpXV28vQUF0L2xHekF2OWpoQlF3T0hYdG5FR3VNbDFKTTJ0UUVkMVpYRHRjVFhSUE9xS244RVVBM0FmbjJXUXNPbHZDcGpaUkkvK3RhaEg3TW9WSHN0REhtU3FoRERoMitFRXNHQm10NmNaWFluMjUyVGxyZXRJL1JuWVlRNURyTFYyQ0FkOHF2STVLcGMxU3Y1cXFEYWFqOU8wWnJvOGtnR3FzZnhqSk5KUDZzRHlPZnZGQ2hCWmZOaW9DTzJWZmxBVTNoZHNyN05ITWJrQ3d1T2JTQTlqUG1GYTFTOWlRaXlKOVNDS3lua2lIVkFGRFlNaW50TjVEKytlaUtEN3lTbU91ZU9iKzZBQUJPdExheDVHSk1BcEkxUFJCTjVFcUN2OUdLUHZscXc0TWoxaEZIWUJZcjdHY1ZVZGhWa0wrUk9XcFpZYlhIdm4vWkhjMUhnRHk2QmxPQU1sSk9xMEl5bmQxY0FNN0g0clg5Rit4Lys3TzVhc2JjUGVSdll0Z200VUxCZGsyMjBVd09vVWYyYmsraVh1WlNxajNMS2tpUDc2SGh5RmhRNFNRTjlmaE9ScGdFUkkrMzVnTHU1eGtLSjFXOG4xb1AyNnZWdExja0VsVzR3ZTFxTFZVTzBCaWUyM0cvWGlyb0d3a2l0RDJ4cEhYUWRtWS9HdzQrZGNpM3JpSzhaR0M0Y2pwQ1JZUVIzZHkvSDcxYjMrU3llUFl6cEUvcDI5aGZKbjcvd3psc2VxMWc0ckZlMGp2REVSRjRsU1lOR29KeDAxbURRRStGc09FS2x2MXlZbTdxdzU1R0NZTUV1STZmZmJCUzNvLzRrN3o3cHlSVjU5M0MrVTAxVzdoa3FVMkJaUXlUM1JuWGM2NXd2d1hMSHBFRTU3VVJMcTByZEE0aFIyUzczVHBNcFpTbE1aTC9CaUYxMFYyMXZDaVd0TmJFOG13Y09KNlZHczdEbnZXK1ZSYnk5bTlXdTJ0QXAxRTVXWi8zOHQzYWpNQzRIVE55RkRGWjd1blVYek9WZEJRblZGUWxldzJhT0hCL2lad2pLdmtmc05iTUFNOHFLd3NwQkM5bUZSNmJFNEVGMzd4RWdYTkNyMnprT2t6WFVxU2x6a1JtV3FKcW5UU0JyQTNMaGhkVkpuWEZhK2RROUVUb0xRNmdZbnM5MzgySUlCaUdDZUl0Um9PL2gveTFZN1QzL1RXck9BbnlSY3ZuT01tOVpqVHI1bkZPYWs4R1BiU1MzanNrMDlualN2SFM4Q2NJNHcxbnRkdmg2cm5ITmZsK3Nka1VNQS9DQUZscmdEWEhZZWtUZGV4RFZkcmgzajN6SGhuWk84R0dSRnd3TFVEWjFrYjZzQWwxWnBvUzN5NGxmbTlLM0VLcE5tRDJBZHhqMHAvUWtwaGozY0RpRXZSRjdHZWs5UXBjbXZ1bDBLS2hoSEZ6YTNyNFQrY0s3M3ZrakVHYkFUMmlJcVRJV09PUGtSNmdMTzJrTWpWTjdOR3hubXo1aXdRNXgrbmxiQnNvSnFlTlU2UFh6NEJjMXY2Z1BrZkNxemNVZ1A0WkNuMDlsL3pLNXNybmh2ZWIrcm05b09najZqUXZncGczUmxXTlk3UEI5NUFIOTRpbHZyZ25FMWpFeXdmUEFCcVMwK2Z6N1JWcUJsYWJRSm1hUy9NWndrd2pJOUxhOWpSWGo1QlNmVXRVWkhzbXp1MVFPbjhBWmlqVGlVQm92TDcvajRNNmNXY0Z2QkNBV001Q2hybEkycmlqV3VOSUdPc1JuTldvZ3NRNEgvcGtwTG9QM0ZHY2UrSFlTV2hvVWRBekJzRUE2MVA4ZUtPSXlqdTdDL1AwM1p1Q2lXdndDSW1xanMwQXRjelJzV1dnalBmbXNWQTNJemdzaUNHeG9naWpoRXgxeTJpcXM2NitCVzczSGJuaVhGK0tyWi81ZVdROWpZb2RMMXZRQ0RVR0NJU09lZDNIQXNBMlNaYU42eTdVN2k5RC9YNllNRWE2UHdENnpjazdVZCt4SXI0REljeDJkQUpnSTU4d3hxQk90Slk4MnVyV0lnTzQ2cWRyZFFmQVBVbVFtdmUwdERIVFhQaEpUMkMxQllyZExlblJFUFllcDRudXBWUXVqNjZxTkRQaSt6cTZxdnNKanFOcThwZlVpMkVCNG40N050SEpsRDR6bVdyMUpSYmUxRkoxZnVlTmV1aTZRSjRrd1ZBd3NBZGw5UmFQek45eWszY2hudWtiT2RUWm05ZXlxQ0JSUWJJM05LeitiemJrRHNvcVFydDhMSHRTSHN2MmVaQVhIUVhMbUdXWU93MWlaN2xxZDk1MnBhTVFVTXc5YWpSNmhYc3VPZ0U5U1F1VW53Wk13blUvWnA0RmFpNVc2YnRzdFN3bU9HRTJtLzFBSjdyZkZjWDdZTk10ZHRNc1RWeGhSQ3BxekVKZ2tkZE1zSytzdElvTjJHTEh5b3RJTnRYWUwydks1YVQxSzQyN0pxNHY2bXVZU1lmenJ5NEtzaUxTOEx3UmpJRDU3LzEzcTZkMEZmSXlZaWdGMkFPbEIwNStkWHZ1MmROQk1ydnNTZG1WbkdOMjZMaGdHcUI4ZDJwb2hVcnQ3eGI1YTlxSDZGZUtydlNYZ1ZtNmlDakRPdDROVXNyQWwxT2JqVGgzNlQ0alIramJOWFVvdEsxd29zb2JyRTlLeXJhVEw0QVFYZDExT3p6c3E3dTh4WTBaem15MnpERWJnNjgvSUgyZm1ObVNPTmpGWTlHVEU4bVRMK3lKRCs5aTJxbnpBU20zeUsrN3FkY1JOd3g4OU9tNmc4UGpDaW9HcStYM1p1ZU9XYkozL0M5WVA1Y1ZJQkZFeUcwQWV1RW5DRFUyQksyTmJhK21XaVFOcWxJQzN3U1l2N3VzOEFMb1p6bDdHUVI3bkxyamlVTmxQcndGTmJLSTgyWFI5R214WjdYQ25VcWhTSzkwb0FVb3RaM3RQcWxOQ1Y3dTA2eFNYdTdBL2F5WmsxbW5nN1JoUTR5dG5BamQrQmx3Vy9nU1ZxVkJJN2plZ2tlaEw2M1h4d2JpdmN6NEFZSmtWVlRNOVFnZkRYZS9hcDFNNm9jZ0VUdjBKd01RenZ4K25Pd3pmVUNINTdxdDBsR1ErdmU0MzBUN0V2S0JKZ0RiditmQ2JRdE9wQjhUMzkxUHl0TEhYbHlWcjZ0b0JGUk5aK25USXltaWxody9mekJ6Qmt5ZFBXaTZmdWVENzV1ZzdDb0ZocWRML1diZmJHTStJQzc3bTZORmNMUnQ0c1VSSUtwTkZpZlJYRmcydjB5dmtTRXU1RG1DVWIzUEsyVWsvZk1FdFdXUllmU2tXaG05SXJNODdmWFZscjF3SjZ1T3VGZ1U5ZnZSekovMDNIZEFJSm9QNTRCZkVoQUg4UXI3anNyOVl2VkVLRE5BbXNYL3grUTZQVHRGS1RNUnFMeXdxY2dIMEkrNHpKalhEZ01HQkxjWG8zeHNOYjgxRGIvcmNvRjN3OGR3UmlqbGF3ZVovVDBKMGRUQ3NZUXZqM2p3OS9mRkJURmxha0RUbWwvNzlPSW5lTURUSitWWFpRUThDczU5R2hNR25uVnRIMjZqYU0rQlF5M0NHVGFQcnhDTG1IZHpxNkhkblEwQkRpcmdPazlHaDByclg3aHJ2NkxtcGFNTUpjb0xYR1JHQk1WT3FjajhocjlZekw4bnVmVDAwamNuT0w1RGwrWTNueXI1UEszYTJkaS80RUN0bjRYbFJFTDBiQjlIK0RuL3VCM25zT204YmorUmc0b0preEtRWHpEWDlEWWxaSzRpOTBlNGwyT28vZGhrclp0NStyRlFheTRVZzU5NmZaREZ2UnRHZkV3Sm5VYlNrTll2bDd0RzM0cUt3d3FicEZSdmdkZEhZN0JwN0xxOWR3SXVjczEyZDBjUCtWNE0yQW1ONVJ5VXcrVDcxODhwNHE0QUlTZHVWa3Z6REI5dUVNTEJlTGJHbGFHQ3d3NEQwMjYxcm9hL2t6d0laTEpUM1pJYzRHNEErUVVmMmw0cVRXY1I2NlBQbEM0MFhwS0tHZllpMHl4Y2lUaEFKbHJZbmM5b1picFEvNXhUb3hmOTJwK0xaU2hKQng0ZE9pMnQ1ZnNxQ1lPQnQzTVd0RmhLcG9sL2tUR2hZR0VHY0Q3R2wwRTl4WUdGTWt4RWF4d0VpbVFrOVZYcjVnT2tGMk9adWgwTW4yVHU4NTZvL1dYeUNjVUlZWEliOHVHY2N0Tkl0ZWVvSFczRGd6MG5xbUNCbEIwUC9VSWYzUlRxbTNHTlFoVFRZekV5NXVWQVlyTmJYTHoxNVUrUGZ0cTJYb3RaOHR3dUxpUVQ1aUE0UEhYeTZBQnY2R2VhMlRKM2pVSTd5Nmk5VWhobUNocWhieVdla0RldVB3OXcxRDhxaGJNZVRCRDM4QTBSaWxoelVlcXI5QkRZTytvU3VkeUFxTUhEUWg3UmdoQ1Azd2N5SFpVWXY2V092MS81Y0h5WC9YY2RIWlpLQkxrUHBBODYyWDJ0aGJ5c0NlWWhhZlc1VEZoSUIwRXc0MTlnUXpzVHk2VGdlVSt5cHg1ek9iNlNzK0xRUlNwNWEvMXpTQkhvSHpuWWlZbVJhcVljamtCWU90ejdwQ0xNUzBJSEUvdDJGVEtyVm5mU3JPRmtBM2IxeEYveW5sZDZPUldxUUlWK2Uxam9OQWpDVDA5RHlMSzJTaDBlb2ZhTzhiQ3ZjcDZIUGhqRVV6KzBIS1AzS3BsT0FQcS9RdDFNNlZ0TVpzNWFrWkFxMFZiWEdsaFp2dVR2VzFaM1NGWlp0MWtPMnpaNnhHeUxZblNMMUpPdE1KR05tYlczZDRwWUxCZlFjcXQ3R25aUmNSU0F0aTc3aDVQRGs4ejlzV0JEVWFISUdCZmJQR3VndHZtZFF2dVRHZGx0OVdIVkZOVFgrdU1PRks2VGlhNTl4TDRWYUFueHdKdXNJcG9ybGd1WWRMelBRZjY1WUoyOUdEaDkwSHZyb3hRaXpSSjMyallqZUkvdStLaWNxaHZKcUdyQkN2YXlFZzBkWTl3WTh4RzlqT3dOSk5TYm9aeXBDcEpWVUEyYjRKc2tTRVg1dEJlRTFta3dmaUg4dzBEZGU5OEFUQUtPRk9qWWhEUnVzSWtFR1BrNFBYNnFONmpvZy9jWEI2NnBGbDdsd0pCZ0FIcU95SDdPb0tvbGJFYVJmNE5qblRKZ21ZTDhZTmczRXZjMTdiTWpGUnV1aTgzSjJkK2F1QVRqZGo5OGFNeFFyYmgrWS92dno3NkVwdURRWmw1K2NvN1NKY21BeUFJSTBQeG85R2pEWjdDN0lpbVZWL2kwVkVnSVVwMjhuUlBEM1BmZisyYit0VmU1akRYU3dXQ2FMS0NXV3JFTGUzQUhROHQ5dklqZEpqMTU4LzE4b0tvZkZObFMyWFZ5Qm1aN3RtcXZSemVSM25xSTFtUkZrS0ZLSXdvelIrSmpwWWpKVnM0Q29Oa045Tmk5ckF2UjRUcjNaVFk3aVIrNVMrQ3g3NFNhWEI2RElmdkV6akJLamYwOW1jOE9qbmU0ZWtzaUVodTVmZmNNWjZDdjQyUDZ6eTBZM0lTQ0xicWNzRW1WZmtUMUxMMnhmTjFUV0tER21SMEJ5UUpNdkVNVXpmK0EzbXNtdjNSalBXR21Xbm9raytLalNQenN3Z1pUK3BmYy96eGJnSko3dFJ1WjBRelp6WmtMRWhyaEEwZXErd1gzVHY3VmJXWXUrcWNRbnd3d1BhRGV0TnQxTFZLeE42L1B6VU94dVlpYzFkSHNaU1p5N3IzOG1pWWVIV1lpUDlnU1ZTTkp4MXVYcUkybnBqMFAxQWdFZkJiUWcvbTJvdFdQV2lnU0I2WlFrSVdPaFVnNGZoQk55dVd2NU0yOHAreHp6VGViemw4a0U4QXhCRHpLeXYwaldHSStiWExQclVvSVc0VUNRWkQ5N3hwaHdUdktpMHo2bEp2amRTemxOd3NjZVJlbzdFSWJGcTBxNTljTWlxWE9pcXNWQml4QnNVdWU5ZmFpZE1oRENvdGdQcG9xYU4rTnZicXY4UkhKREpmcFErS2w1SWpZcDJuSDZyUHhMY2l1VWx1bEtxWjBZaExyTEVoMHJETWNnNnkwQVp6TXRQbFZjOVFZcE1keVhlOHRtcnFJRThpT2ZjV2Z1UzQ2ZWVwbXFjVGNySG02b3RsMktaZVc4ak80czRTZjM3LzJ4d0pITGo1eWFnSjREUGJNQVNacmFWMzk0aFIwVTJPY2grVGN6QlEwa1dqU3h3UXQxSmY1andiL3JkRDVqWUwycE8wR0JOV0RYbnV0TjdhcnQ5TGtxU3FtRFA0Nm9weHJISzZha081YVQyVUlmeXkxWjgxZE95K1J0c0RCTFdXejd5eFJheWZxcnd0c01PVk1hQmduWjgrVjVGYzROQVZVYUcxYXVzRngrZDIrNFBvN1hLR3V5QVlUWHpIVXVxODB1T1JKTGpSZkdzUWJWeXVXdlpFZUVuT1Mya0VnbTZ3NXIwOUViYmI2djRGUFJxK3RWWTJkN0t6ejFoa0ZIbW1heGNNMXRteXVNaEZBSm43VnYxVEJGMlRHVmh5dkI2elozKzdIT3N5V1lwZUM4WllTT1pGRC9EWFZIOTJaVWEyR015WHpHUU5NNnZkdlBLN1dNSTBWMlJiaTVPUDZCcWx4SldsejZ4K3dza1JDTVFSUzJrb3RjWWZqRnZOQXp3ODFuL0FaQW9FK3Z1ZVpqd2JiZk13R1RiL3dkbFNPOEZEQVRObXFkdlNLUWtjVVZiakhuQW1IVFBmOS9UazZRbWluOGY4QkEvMlpRWXdNVEJuQTZtOG9FclNDMERRYzJPMmtuODV1T0ovTkNXWXppcVVFNE9PNWtURkNTenVsNGlaSXZnYU5IeW4rbmg2MWNNbCtIT2lMQUp5VWozVDh1em9RWUNzUTA5YWJoeFREZkxqRGFCQlNCMkNVNnljM0FUY2dONWEyRmpBRWdtUEppRmVCRlhwTmxTYkczSHVoQktVOEx4VDBBUFBlOWN4VFUwMEhDNmpPcm8vVGg1S3l0SUFpTVF5dWFFa1prOTRWeTcwWjMzK21oYzVGVzRvTjhSOENJQm9ZYnI5RlZuS1pldlVvaVAzRmYrSlV2V2VRMXA5ZFBRYXNjTkI5Q1lrcXhKdlFpb0xXZDkzUW1hR2cvRCtyYmxaanZUdHlPOW5wYkZQOWVpTEFybFgzSUZJOVB0aHp3bklZc0E2aHVjT3oyOG4vTmJ5Q0RKdjFwRks2eHQ5eFpaUDZKZ0tQL0Y4NUJSZlFyY2xpY3hUVmRMSE9hb2xJY1VBT2NRSjB2WHA5YWlOUEc2RmJ2a2tLakdHMUQ4SlE5ZmZoQnRDRzZEVlRReUR2dExVVWhpSFdIandMNDVOak5tTkVxTlFLM0RyV0FZb3RvNUdTMEtCalN4a3JCQXdpd2RYUDExZGU2WU9EWVZWWllQc3ExV0VlSVBHWlJpbFo0OHlHUkZQRkNBN1I1ekZUcjU3TlZZWGVMK21NWFBFb2dVakl0ZlNNTUxlNjczblpBWk91WTl4ak1ZeFhpZXY4di9uQ3NGVjVraC91dkhIR1FmRjEyL2hheXgvcmdNL0pTTHZmVS9FVENvUjZzb29OYjFOanFCZFd6eXpPWTFyQzZGaHh4bENWR2diaU9WK2J3Myt1MExEdkEyNzMzc3lDb21PcFVUZ3JNMjBYVFNJNWhHWDlHdUpER2thdnpqNkd3UVVzQXlJY0tRTHJ1WHRYSzR4VW5BSEQvTHU0RDl1N21CV2NBNjV0UmhXeGE1M1lKZ2ZxbklCalFWWjRqVkgvWDRNYXp3bmQzQWJXRnVQa1B3dW1nbFVaK2dMNFEyR1pHOGNmVEtBZFF6V0pIMkM3SGNXOHErUWFHSzIzeVA3QnRTQVkrWWwxd3lYYmVRYW1IR3dKK1k2Tll4SDVVc1ZnMW9NSXppK0RVcFpHNU5LK1pPZ296RGFJU0NaVHg5SWFlTjdoTERqT0ozUGFhb0dhQnlIcGhQc0R0QjBGR05TQTZOc2p3THBoemhGOXU3eW01d0UzOEwzYS9ZcXE4NHNyZkFuYUx0MGFEeWIyQ3l4aHZab0pXMmpUbVp4ZVJsam9jMExQdWdJNjBlKy9EcHBSK1Nvc1pVMXUvalpmVGpzRHM2NXprQ0F1K1NuL0VSa3ZTYjFvbXYxRnA4RTBsUEkrWG5KL2htTytCU0ZMaHJQUjh2UDBDb3AwRGJhU3JCKyt1ekJOSjE2VmdVRnRkZXZKNmoxTlA1Y0o1a2hJdE5RR3E1SldHemtDUENwSjd1b25VcmdXenVKQjBzS3F2S3hQSmM2VFg4RFpDU2l0M0pwblptOUZmZFYwRUFOaVc2QUJKOTM2MkU1ZGRKZjN5K0UzaTJTZFIzQWliWnJreDJrVW9ZU21pcXdWTERaS2ZvdTJaaktuNE91K3pqaUY4Z0R1Wk55L2NwQUhIRGpoL1UzUGk4TmlWUm95cDY0UXFZOXh4RmNOMEN0NS9Sb0NpMXBrR2JlZVZrSnVsdm9ObUxXT0thbENzRktEUGJrMkRYKzFIODFFZ0JLVk1UQ2pzRHBHRmpiRXREWng1eE9QVEhJaGFHazY4aXFKZlV3Y3BMbXhuVzhrTGUzdjhEL0Y5dm1aNkQyTmdSSkwrMjZUSEdTNndCbTkrdmVwdHdlOEFhYkN3dUUraHFYSXJKNVRrTXU2MHVrb1FWNXZmSDQzaHZnS0RIQmljY2ZkVm1rYzhpa3hFajErTkxLZXVWME1uUUpQdGd5QmFUem1YQUNFc2ZoSTJEUnp4ZFJJWE5SQnNTYzA2OTZ1V1p4c1I5VU5Wb1daV3BBSFhLZmtXRnNPNXlubnlNbUNRWENHL3ROUXJhUXQ4Tk9VU29RYktwZ3paR0c0cktnQ0xCbzhXMXBkSnBIeWphclZmWDU4eVY3S1orVmxLZUloYXJLdit5YkJYZ0FHNHJ3eGxuYkQ1aVdadkg2QWFTa3dhakZsU2NhMmdiSnFSaExnV2RzNU1ySEF2eFhjM3ZyeWovaEhOVEVjUmIzWDdEMWc3bXVqb2R2UXFFTThrQisvNk95ZXU4MmFFWlU2UVF4MFNNcDZMTDlDU0NTdCtGRXhvT1ptTHgvYlh6WjZ1YWpPU1VjMGFVV1pSd2tlTzZmVTU0Q0FLRTdTQXhYaXJzUHd4cTAzeDdjckRyd0M4R0tBaXJOaGZ5dkkxTHBHRWthakRCOE1QL3BxdWoxQThFT1hoc0NjK3BiTDFzamNHUGxtcUdTaFlNZ1pma1FZTmJmTWVDOEJRbTRrUE41VVpJQ1UxN2xJamhvQ0VxNnNSQnV4OTBQNFZDeTZ2V0lqVjBjR0tLZ2lOMVEyeTVhSlZtTWRuR3NQek5rVXQ5VFB1ZDlDc3hiN0UrcmpMVjNFY1NOeDI1RWRIU3U4M0t3cEU5cC8yM3lCQkFSUlNtckxSUUNGdSs2Y0tOdWNQZUpySVV3TU02V0p3eWpTSWxpaU5RTFRLMmxqOE8xRzlrZUJ0TTdtdjZ5NEVyeDk2NUpRQzZFVmdrUnFjWThYNm9CTHNQQmdIZnBUaG5nTUY2SzFIdDRiMVRXNnJEUnhDem9PQjNlY0R3MTBpSTlmMmR4Q2o4cm1uWEhmVzVvVE00U2FNNWt6c1FXbFhzaTlEWXZGaDRrYkhUR1ozdkNiRjVGVTdOT3dVUitaWjlZWWxtdmtsTzdYV21iWUdoSXF0MVlUSGdEa0J0dExxZDE2QTRpQVI1Z3ZWN29ZRmVGY1dUSU55ajU2cFdJbGFSbVNIdmdhQUZ1ZnVyekhmcDkzV2VoMm1meEtGTWgrRExkRUdwUGVGMlhZSVVvUjBWVlgwQWF5Rm9TaCs1b2lQQ29NZFh5cjNaWStDSTNqeGhTMmNWaU5GdUV1ZE9MY2RSMWtaMGZsUDFzZXp4ZmJoMmFkbWpBMDVlNm92ZndobmZIOXEzRWZESThMdjFGbE9BeitZZFZwUGFlNVdZUUZUL2YwYlMzR0N1WkdBZ1ByaXcyK3hwYlNVTjRSRVdBUmtpZ1YrRmZSQkovZWlLVEVTdm41d2RNRUt6cWdlR1paUzl4OVM3OW9YUkhBblRLQUpYN1VXZ0tteUdhS1ZpTTZKRFFISVl1RGMrUk5rZjh5c3pNdXJnN1VPSlNSSlZFYTJ6cTh2SHdrb0tIcWhLSGZCUU45SFNWbFBmRDlha1RQa0RLNlRyK0wxQkJBS1E4akRTNC9waXZBVCs5WFpCd1lSa2RLTEFzcTRwaDRKY0tkZis4aHZ0RERRWGt6MmlFRHhZTWR1V3JiK0Q2OUJCMEJoYng4MW5iR29IajBVQnpQSVRQRVJpR0VQU296eXJKS0xweTk0VS8xR3dXWjBzVVVxWjRYV3I2cG5WUFhVNXRYRWpFQVRNTk9PUmtCOEJrMzJUSGFtUlNoUWxrOGNPQTltTkNrOFhzVzdPcWo3V3hQYXdSTDhNVnk4WkVWU2FuMGRPL05IeGZ6WjNxM21HK1JiN2cvekUxRVpTSFpBRjlvQTN3MmtGbnpXQ1BXVGY4N2RGN29mZVA4MnozUUQyQjdSbjZRcmo4a3FTcTJVK1BYWFpHbWdscitjSjBsY3psM0t2QWcrYThETVNDMkhSRzg2eGpqYTRyOTUva29zZzZLMXNMREZUMW5MTUhhMDhlUW9rd0kxdFVTYkUvV3hBaUhZV2Z4YUFsT2JZUGZaMys2a2hCNndRcVZkQmQzeTZZcDF3aWYxdUZYK3o0dStSdW5wWDl4eWdudGZnYkgwOVgrR0xVR0E4aTlXaDFwVVpsUHJENGhKMnRKMmVnMTZ6bkdJaXhXTklMY0kya0ZpRFhxQm94NWY2eklXdUl5MnVrNFF5MGhWZDNEZWk5UzB3UE13dGRqNDJzNUwvM1EvdlJBK2tTUHBkaFloWlc2MWF3akZiVEZWMXdoNm5aRFoyQ1F1bmNSdlQ1VTNZQlBZOW04MlFtNVVSenVSVDE1UGN2RGd1TjI4OUxHT3BySFArRDF5dkh1NldTYXpkdVhiVnRTTC90dEROU0lzdHQyMVdMbHkwaWZtS2E1RDc3R0h6SzR1TnduTkRLd1A4M2plbVN1Q2xETGZwdjkyREhWd1dTb1pOTjJnMWNSWVBSeXhIRWg0dzlnVzh2T3RVME5EdmlSUVBNMkZZSzVUYTJ2VjczYXA5SkRCcjhTZXNuVlFrL3lUeDRGK3RNV3g1dFI3Ty83dzBST0FvVllvYWlpTk9oaWx0QkhWRk96a3FmcjlkQVNiSGNqQ0prVGIrNDZ0ZjU1SkYyMVFIbDdwNW4zNktMdVVyUkplcE5mUXYxaFZ2SWdVQ1R0Y25BdW5nZUNiRktzVXJKeUdyWVZYZWFNSERZT2ZzS21hWSt4a3dNZnJsbzJCYldJbGd6dm9PaWpKS3Nac29oVWVXTFFoeWJiSXRtT3FSek1ITzdGNWJRVjRycnBqbzUwN0JqMWJ2UHA4VHVSL0xIL3hGWnZqNkoyb0taMVZuc2g2WE4wVmVLbnc4eThlWnZRZUVJQXF1Nm5WRjA5MFJkdVF0WitzVlExNDlwRXZkMlBuNDJWR3dNcmhocEovaEtjUGpueDZWQTFxcU9HcjRiNTR0RUhFZnFpcHNqc3IxRU5DanUzc1NNUWNwQ21neE5yWWpXczZDVEF6cHpxMUdwRjB0Z3BneG05QytoMVZlVVV3QnZjQUZnbzJsa1hmc3Z5MzhjQklkcEtnRHkvQzA2QkhIQnpIbkpuQnhocWkzTEdoMm1XYnBpN0x2QXJVcHJ4cmpKUXhhZWtSRHBZcEE1TWxqWDhETVlVTHpxV0xCak00elBNUzFkVXhJajdwK0cxQ3ppTXhlcXl4bmtTZHNZaEZrV1JLTnV4OEdTWGMrY1Z3aVo4aGV2Yk1lM3pFSG1ETFdndTRxajNRbFI3VnN0OENoNlYxZzBqeXcwR3BDRWpOcHpNWFRjaXRlN0RmeFg5VXM0ZVpGT3BJTGdBeEQ5NVdXMm00dVAwZm1rS3Q5WVpJa2o1M0ozQkNiL1lXR0plaTdXZHl1em1sbWVHTnE3Ukl5RDBrSjk2TklCMGhRQW9uUkN4ejk4UjFTZEFHVHFUUDZVSjJKSyt6R3B6NTlja3U3UU9hbEdlV0pIUE5HbUg4Sjd1Ti9vTThwNFM3YUJVK2d5REd3VWdHSUxlYUpOVERiN1REN0JyMk95UjA3cFBhd0ZuUnhUSjZjWmRMOHA5Vk5zUkw2V0MrOURNL0RuWEFtc3ArZTF4TVIzM29reGJSN1o3em9TQk0vMld2S3NjblJBVTlLVjczVjNjL3lMTVcxejFkY0VhejYwRXdmU1YwU1dMTWdHM084a0FSOFMvOElzSWc2eEFCM050dStvaWI1Z3k5SHdETlZnODJrYkdueXIwbWw5THo3SCt5TDZucjEzSEdOQko0TGVyeHh0K0taVnVTdUlyblZuRitaMjFKNldPdnJydFZVR2FsclJ5aVRoWW1aYWZjaUpQRlNjams0c3BDc0NiOGhwLzY4N3ZWOS9xUkZ3ZDNoYzhXQVdrSHgrajg4dHl3dVUxajQ0ZmtPOVo5dUI5UDg0dG1HU0lMTnNReUpLZlNqbTJueU5LRmo4NjQwaGF5MDlzRXpYNm4zUFVKT1FXSnFPVWxYWVpYbzlDSFNLcWIzL3FpVjF3anQrZlFhMjRtVnZzdWtDZXh3TnVCdlZzcDFoa0tjajBSL3liUGdIeGo1RHdOaXYxVm5sWkVaZ0JWbzRYVERyWXdJYzFnaGRFRzBsekxWMllFUnZiK1hNVENWRHNYazd4QXBPYitRcE50M2k4dEdXVUxhVVk2Y0JvaGRpSG9KSm5TTTQ0Ti9OeS95dzdaTldZQUpNNWNtQXRJenpOSWxMY0lyQ1BnNU91ZGdlUXhoR2k0NFlNOTN2QUNuOWJDY3h0OTMzZ0t1bHdGQnRER3hmcFFTS3E2SldSeUNpUkduWkRubmhIVmhjUXo0L1krbEd5ZEtYb3N6QzcvZDlFSkxxUnNLU1djbVNJa1pMOU9nelhOZ0wwRTJXaXBRc2VKMDFwK0tEWWtlOExudTIzSXozNi9RcjVaM2tJYW41Qm5yWGppM0hXTjVKK3dzYkl4V3M5bmxXamNqaEpHcFhGcnZnMnB5Q2hwNStPb2E5UllrdTBwMG9ucHhRQVpScmw0QlpoYmRRYU5EekZHeXQyTks5d3p3UStGeGhOQ01NazI5R3hHVnlhaldubjB1OVJqQzJBZzhpcFdjMExyajFSaDI0OGFSWVJFbHJRR2dROW9LQ2xqZWowK29Zb0ZrVHBKWTNYemZQOUk1bTVSalNyZ1ZDb1lIcDBZTWdoT2lLQ2xKNGdwanNIYS92VFBYNmNGaXFpOGt1RFNydGZjenNlVXloSE9OR3lXSCt5ZHZ1WDMrMjJhanJYelJITEFZOVBMZlFyblN1VXhCa3UydVlCNm5vV3VjWDVJbFBTcURuc0M5NmlaQm9Gb0w0YlRram5rbTNlSld1NEY0MjgweE9HVExPNWRUeXl3dmJmWDk1eTJhc3FjU0R3UklVbEV0TnFiN0Jqd2RzNUdvWHBEZ2kxV2JIYjk3RjhFY3JzNXhGUWtPTjZSNkUwOFB4SVZYRkI1ay9JeVk1WmQ4TG1BYWVwWGltMytNbExYMDNlQXlsbUNOS0dQaGgwSlJSVUpBSUk5dnR2ay9uY013b0d0a1VCRGRYQWpPdEo5Y2Zuc2hHenVHTnBzQ2d5aU1YcGc3LzBkT1JhaEZWZzFnVml5aTRkMTc1K3grY0xxVG0wZFhxRlN2bVhWNjh4a2xEUWZlNDlVbHZWbGs0RnAxN3ZZNVBMYjdTQ1lzcnZuMnF0VXJxVWYxU3BCYmpVa0FNeElOeTFNTTJyejNFeGFFTGY5TnVXQXFhcXVVV1BEYjl3d2I0dTMzc21rN3U4dFNnQnhPUGN3RDRHRGF1TS9CZSs3RytNUkRoZy9WM0ZkZ2t1dlNwY0NMcE9jd1pjS3FtNHBiZ1RVazdBSUVaY2RVR2VLaXpQNG9UbVpQRjlyM2RhMWNiOXI3S0VldE1oY0ZBZ3diN2NVZFhNbjMvbXZOUkJZOVh0VlUxY1g1YmF3dGFjcGJ6VWlEVTRZSWtBQi9WMkdwSlpYU2RyRU5xOTNjdjVxS25udDhLZ2tJMDFNcXNuTG9DbTlOblROb280cEhJUDFXb29BVGp0RWJva1dhUHMwa014K0JWZmF6WnJuais3ZjZ2WG5xTmlXUHJyWHVxNjRjSGZjQzMwTzQ3aUhyUVNPMFJDTzdXZlZIbUpNRmpnNHBoK2V0UXQ5Qk12UUd5c0NUcWdTckQvcUdnUERCNldSa1B4VzV4ZUl4eWNWK000SkVxQ2xKK3NmSHZIbWIvbXlETVc3SkZMR1MyQTFtQmZ5VENtWERqZmZGS3ppS1p6dlF5eWxMMzdtNTQ0L0Z4eE9UdDlja0cwUVNRSEljQWtQeDFaTDBkYU9lVzRrUUdjR1FDaVVpMzNENzNtbWhUTEdTcU1vOXYwMHFuWlZNLzY2ZmwxUkZncGp0aHpaRW1mRmpXaDJONGoxWk5JandGWGRjRTJDN1VyelBpM2gxODRUTjV2TFFmZExEZEJxZjJBTjZwK1Z1ZG1CSUpONFZMU3hldFgxdnoySnJjS01weGVJTVh6SXplUkRDZng5ei9pbEtsM0l1Zk8rZ21hN1BFTHpmektZSWxET3ErUStpWUhKN2VJNSsxQzFFdSs2Wlh4bjhUWktuOENnWS9MZU9rOVB3eTR1N1RNZFh3VDJyVDVDOGxUMHNoSytxTm1MTXBvbEFPd0FrSVZBYysweHJUZHQvZUFZSTR2UzNNMXNId1N5L2xSQXpqQ1NoNVBBQzlQejM5QkVlS3RweitZNzBUcEJjVnJMWTdmQmkyclpmRmNMUm1tVHpzZWdBVTJWR3dpZ0YrQ1lUNThjaUhPaC9nV1QrTjUrNXhyemxDU2dhYkxDVWVoTENJZi9HQ0lzM2ErMDlOeWo2MzVDQ0M4NzdPTWpKNlhUM0NNdTZQaHk3SjRZeHh4WkFHTlltemFNN09UdDQ1UUJvYXVMb2J6aTQwckJMRjZRbEVSTXVkaHZ3OUgwM3NSMjBTaVRLczlvMXpyKytpZnA5eVBjeUFRLzU0R3JQRkg2SitZcVFLVHBYZTJGT3grSVRBRzJYeURNNUJ2S0hqSm1zWlV3T2o3U3c4bHRYSCtxN2VvWlhoZDNVT043UXlEZVhveUdHWlRMbTJzR2tQeEFyV00vTXl6dHpQZE44SEN6WW1JR1ZZTGZZWE1MU2hJMFh2cTF6bnNkUkIyMWVvNkVtU1lMY1VTNGFDanhkRDRtNDM2b201dWpiam5USXhDV2ZEYllyVWc3M3lsK0ZKdGxhcm9hSlBObFZiMEtYUVlLdW9CZkZEMDNmTmNlL3JHSUo3ZVZLTVFtYUJLK0FVTzdmWitRVzlNWnIyWW9jTVNneGIxT3htNi9Bay9teVFWNWtQQ29CbG03YXRiekFMZktINjZEZUxuakZyeHZCOEpoMExCY2F5WDEvMGc5bVNVaGI2RGpzVXBWMkFPMStWelNBVFNNVmQvOHg0RUtkcE5TV0FkM2cydm96cmJyUUJmQWxValY3WVIwK0wyWnNtQ0FYamY5UjJEMytTdkxmOU15QkdqdkFVNFR0Z1plTDd0UVpldVJOQ1diL3pEdjBzQ0d4SDRjZVVUL04vTzQ2cHM2OGxUVW56QzMzbmwzRHNmYmlPVW5PL3lmV3N3TFVLSVBFc1BKR3BjRndTem8vMkowd3NTcHlqS1psZ0ZOeVQyUE5oZU8wRWZqamVaOHE2Y2o2OFM2UURRU1NNbmpBZEZiMHdWeE9KTHJFUjlrSUpNUjloSW8yOUVnSkxSVXIvNTJjVzlwWmxIVzZ0ZHVwUnB2NHZKbUFISzRDNUlrUUh2aG4zcjVsY3V1UUREUWtHMEFkRml0Sys5Vkt3Qy9FSTRNbCtSbitmc2YrMXhWK0ZKNlBoVmgxNndpRXFOc04vT3Q1MGFlTU9BZmt1L3liYnlIZW4yLzJ6YUlCYmRFeXd5TEhlSVZnUzFWbW05aUhmVklRVDVFdnhocWI2MFRRNitLWVM4UWR6S215WEtDNHBGSlZrNWFkNmpnS05XazRtbGdCbVNJcDlOV294S04za1VXdEtUVGE3S3MxT3pNUnliMmFCT1IwN3JFSm9nRmhzazFwTzRNQVJKQmlDWUI0VWZFWlRXaHFhZVFGcEYxdXg5K1NLWktwcUxhY0VwSEEyU2VpVS9OT1ppNEhiVzRkYUJyc3dGOG1iRnBLaTF4b1ljVVpxVXJSVU4xMy9tcnNaZTZzQ0I2MHFDVWtCVTN0WVlUa0xKaVBHMVpoa2oyQ2RPK3MrMGpTTHRURVVRR3NyZUhvVDJRbG9yVkx6YmFQUlhYM0RiNG5TUENwQnM3cklId2JQOWpTZ3g2bW9uR3R4NmMyYTRSL3hCMVlycnpNdktialVOSlpBdTlVb2gyazRLTWxUcitDQ1pxdElMbUFWUXRUekZQYnN0RlZHdkNDZlJEYmNYRDlYVi9XWC9WRXowMkdqY2Z1NUpJc24vNHRnR0xObTdwSnhxeUptZ1BuUUhJRkl2R3JZMHBVc21ScjdSUkRvRllSZkxVR2xvY2JUdU14Q2pFWTFtM2hEZXI0R05uakNoV3dIQ0thaEo4a2tibjZ2SDVJUWxucmZQaEdWL0g2Q1pvMHBaMXowU0VqcTdFaFJuMjR5dDYxM0U2QzVTdm9qWkxPUi9TeWpYS1Nha0xCUWEyMmUzMzhuOE5Ea1pkdGJIZmZRMHd5V3RlTUs4dnNENjNNMTRJTW8xYXdGZWlteElMNWVUL0ZNVjBpNmdlVmtidXY3R24xSGd1eENESk5YZGpGeStmVnY3NVBPVWlGWWZsME85amdiT1ZCb3ZSejZGU2hBT21qcG5FTXRXSWhiNEEwYlhVa3ZFY1lUY1NOTmJGOUdCUUliTzhtdjhjZmVSL1Fpa0ZtRHZEaGYzVkJZU1FPQ1ppTDdXYkJzS1VIZjFLUWFzYTRMdjlNNHdCVjJ3RnJOdVR2dDNaK0lRRXhGaDlhYWpVaElDNGhNMzhRN2liZTRTcFhBbUUyOXVFTGRvbkZqczc4V01wZy82bTdpZkhVUGJzODlkMkxoK2hJdkpvdkRBd0k5bDhlNlNZbVUzMkZNUjYvakdQMU5xVDBOckdyNk9aTldlT0ZjWWJvdWw2WGE4SytLbmtBbUl4bTlaemtYTVNORHE2TFZLcXBiUmxzcThiWXRLbjc3SDRqZ09EQk5PTUJDWG1ickh2dVY2aUhValVkSlhVZE5Qck51RFdCcUYrNXczRGpocElIRHQrMk1sNVIxREVnRHlka2xIWG5nL2JxT1JXSHpqYmtmS3kvVXFNRWh6ODBHTFg1OVRDQWZJMXhpTi9Tb2txdUQydGNZR3A3aFRPbThaeVpkK2lHU2pIQ0UzNk0zbWhPM3d5OXY4UkVFL3JybVUwRm9iaFlZMXRTM2lsT0xDcFZVTi9MQUQ3d3FLYTB6blVFejFKMnlSTmFGQjdRMmI4dkM4aEhIS3p1MnJxNE5VcVMxV1kvRTZiUllBcWx6VlFqcUlZdGUrd0Q5azhkb2tFcWtERnRoWmEzZnJ3Z1dHZTR4ZGJSVHYxYzIwU1dZV3FVNFIzU1FLRVpsQ3dOcVpvVGZKVDhuQVVQbE9uYURqRnlOdGpiclR1QTFsQ1dCelBFSDhMNURKYmJnYlVYektXTGV5VmtmQThaWVQyVFpTL1Rwa1YwSGdDMkl5MjRTMXZIVzZTNktaV0x5VTk1UkQ4R1gwQllRMkRPaGxDbURoSFRnanl4NmVOdTg2eGVkRnhYVG5LQlpvcGRUUkJ6YWZLdkRIeE43aEdyWVBsMGVyZjh0MFVwUzZpWW9SZmNDaEdJbHI3djFLd0p4QjJIMHBBc2NxTXVGWmNYRE54Rkg2Y0l0TXJDTjZCcVgwMklMeXczOS9jbGRLR083WGhXOWNlZWFVbTE1VEtZbUEzakxwbGF3Rmt0WlB3ejFCaWRNU0d4OUl1VnRNaXdvbXg5ZE04a0VnMmN2bU01QzZYdFZJRnNMNmdDMlJhblBENUlqRldxYUVDWXJlbm1yaFp3dTZxb0pxNkpkZDdYdW42R3JuR2k4U0czNHV1dHlMV0lseERaODNCblV6RXpTbzFkZUhXVTBVUUhUWDQyL2VJakNDSmNuNWZLNzZtaUJyVHkrR1BxWHRwTWwrcXpKM3M2OWUvVVhZT2hSSVZqRlJLNVdqVXd4KzN1V2lrWGVrWmQzU203MUJSQ2tWL0FNZ0VodFQwaWg1dHB3dFVSU3FmMkhiNlNsckhsVUZ2WjRsays5RmcwMUFDWnZ5Y2paNXVySk5GWmUwOUtXejJ5Ym11bm5pRi9QOTBjTnM5Z1U1WmN2NXlVYVIvMVZQd1F1Q3ZhVHhlTFVXKzBxRUlNd1dDNGlPR0w2MWJUT0FQNzREbUEwcVJ1TlRVTEJRaXNkOEFOaGRoOXN5VFpUa2ZCWnJKakRaRmQ5bGF1ZnpkbTdMTmdscDViZGxLRU1GSnBEQkMzazhUZzNkTUNvT3BMdzFHcDA2YjgzSVNJQ1M5ZUN6eE1SZU43WXYzYVR0REZUSWJXSWlXMjBqNmJ5VnlkNEtSdE5rVXQwb2Y1VllueTYyTjlUd0RsOEJkWmwvcGpUVytRVGhYdGdVTnlKZ2hXdno5a3NNOFUxWFlyNWliOEJleVpVTEZTMVBJTnlIMnd2OVk4Ry9CdmIvYk1PYWtCSE0rVnE1aWFMeTNiZW16cEg3Z3lLdFUvbXJ1MldydE5waXpjdll0ZHNtaHpoZDV5QXFGbVhveGxQQnQyaXM4U1dtR1R0NUh3by9XVEJJUEdJR21ySjB3L3M4Q1pRbGxFRFVRV0k5WFMzUE5vbENlMVoyNEp1RUdZYktDQVA2TjBSQkx5TTl2OEhSSXh0SGhVNzd0cjJRWkxjT2Z5amptRkxVZk9Xelk1eWpxSGtRZzBucHQwUm9MSzhrRlgxRXRzQ3JKUUdnbmdmRnV4YWRDeU9jblk3UHkvekk1dmxjYndTR01yYU5vQ1ZXTmE5K1NhUjZtV0RNeUE5UC9mbVp0bGRUTEZ1MlJTVzllY1FLL29PeHRQa2RPSmh0RW5xaGdlTk9jZFhQQ3E5OG91dm9FNDRCdTdDTjR6b3BYR2lpaGpuK0U4OUhNNGJMcDA2SjYwZlpxVnFlNVIyZWVpbWF1UGNXVVA2ajlhbHN5UWw1MTdDK0MzcjNycWhsR2plQkxiVkw4aEhSZThjUUpKUHJJVmE2YTRQODA4TkJTY2xJWGlpeVBGaFFXc3JNRmRLVXE4YUJYSnJRMUNYenBIODN0dm9IRnBvMUcxKzNOT2UySGtpK1N4c3djTEJUVHIwMmwxUGJNRERoOUlraXhrM05tWUZBQ1RUQnl0SFI2Y2tQTU0xQVltTERxZEtEK2E2THd5aHBGSy9QTENHK3VXNkRXWmg1c0JCWEZaZ3BqK2svdTVkTTF2cWEvd3Z5cXVRSTFZMWlzTXBjRUM4RC9LMDYzdCt3YWJnbmpFZ3ZMdW9SalY2N09YeU9nRlJTWkM5NFVsbnR0dmlKYllBaXVTZ01DaWRwbW5BOXp1TzdmTXhZUmFhM25ZRDhFb0VFZTNzNUdXL3M3bmlzS3oxMExpY2g3ZTdJM0lrY0MydHRQYWVUNDBiYVZDaG5tSE5VZFBLRjlsZjY1SjhmcC96YkZRajcrZUFSSVlvcmdYWVc4VjlwMUkrZ0pIU0xkK0pQTVFKZWNjNWlNNHNGeWJUWHMvR2hDeFdYdXpKd3ltK3ZlSFlQc205M1dTZnpiVmpUeFR4ejJpTzRwb0p1cEFNekRZK1Nac08waTRJd2ljQ0g4SXEyVFZmdzNwc05yZDZnOERzLy9XYUNnMnFxeVJyS2REd1p0aU1ObzZla2JrR1B2ZWduYXpUa0JUYWRnc04wVllBOFdpNmhZTkQ0WDVmN1hVL21YdHRFTVF4eExaaHo1SlBDSTJrS2dJRlBZYjYwV2pIMDRaTTZ4Q0dMdVBqRTZVU0tDbGJBYmZIenZFc0xVckx0MDlIWGw3RUZpTmxCSm9ydVZMZmN0bnNDbWdYaTB6dFpHR2lBNHE4MSsya1BlZXV5NDVWRWtrUktMc3JZOEFjYTBtcm1NSllJK0EyVy9EY0tIU2lCQ0ZicWsxOXNqcUNQV2ptTmhlNUZ6NEEwcmM0MGpwUXl6ZzREVzVTUERudzYyYlZKc2ZyNFJyWWZNRXBKcDI0bW9uQWpObG05OWJGS1hkUHdjd0pRdDNJS3lZdGhTbXpGODYzeHJDSTFVaUtxTnFYN2tlOFljVGxVN080c0NNdGhpR0IzL0VzbFRVdUJYQldLNkdjazFobVJwT3VtTVF2Rk1kTmV3UXNNVFkyWDNOOUdOc2I2Y0VucE50ZFVvNjBPNUV6YjFGaTBHTFMyMXRSSVRpRXlvTmRqNWJ4WGt2L0o2amJvS0pMVWw0L2xYRkFuaS9BUEtvYWxBeUlEbTlMeDd1QytBcExVYU53U0RzOThXVTAxNXZnQ1M4aGRsOE9CNEYvV3NqTDZHNlZXOEVtRUw0M21MbDdEVGNOWVFaOE5vSlpJeTcvbTJuQVFod1VjZWYzb2IwS3dmdGdPdU9FcDlFQ1FrMENJSkhDSDd1UGFuMFdLTFVYSittbnZwOHpXL0Y1Tm9NNFYrdVZGMXZpMXAwYUxuUHlaMlZNY2hWcEJ4ZEVET0lPV1Jlb0lMeEpiZk5tSWlvYlpqWGxsWjlxWDNPdEtqb3JZWDB6VTlkUVJ1MmFaa2FNaFR1RzZOaHJQOVJTOXZEeHlBWG9XMlBJUFpGSmNycDR6V2t1dTN4QUJxcWV0UEZ1ZWcrRWp4UEZLVFNRNjdhVHRsY0l6Z1B5S3F1QlRYOFBPU2R3eWVmeWhzdHdNTStkQlhlOXRCK1l0YlB2UE1CV09HU0ZKWDlWek80OFFSVUNERFF3R1lUbGtuV3haeVhvaTRnVVZwUXprSXBybTFOdjh6dGRGYmUzM01PaEZIaU5FaDFwMjhZNzNxeDhLYU5pZ1JtY2RkL1pWckFxZGtVWkNIQlloUVkvOUFWT3BPcEZLYTR1TVZXUmw3aFUxbE8vOThRc2I3Ulk2eHowZlNvMHpzTldaMElxUWt6ZGg2RXYwZHZva3RiVUlPWWFsYm0zN0xVblQxUDBSZG9wamgwZjdBd28vM29aWTNUaUNHTkp3RHlGTEZwZGk3U3h0MzFsUWtoSDBxaGx6SHIySDBQUWp0dEZFaTBXcTlLaW9ET1BKWTFJUjVUSjBkSjU0NDhUUTdOam5Wa043SVhRZzBEU0V1Q21kODNLRUxNQ2hFUTFxSnJXL0NCWkRoTFhJQlJLakNxbkkzVkQ5R0Y3cG41cXNoU3hBWFJhQmMraURwOU1sYlJiUnExa1ZneU8yNzJOMEhpNml1Y1lvMVpGd3NnTlNNYlpQNmZ0SVpTTytEdGx1V2E0b3pYL1AwTVd5TEFzbDVJWmNoT1JNYWtUanUzejhCdWZPL2hTMlFUUExVYi9oSFM5UWVLM0xsS1VMeW1FZEg2cE5BdlU1MitIeHZtU1VYZkFiM2grOTJUeE5VL0hsdFF5NkZuTkJQbi85Sjc1Y1NqbTRROS9VOWppcGtTUTVnMERENGhHZG5HdjI5T3FRUVk3eis0UVN3alJpZnNONUY1c1dHcnVsQnd5N00raHdsQ2xlY0lLTWF1SDl5UGsrUWZQQkV1NUJXNHNpNWdPVTRWc0tRMXV1YytBeUNjazUxQkd6c0RxNmZPbDdoYmJjV2xSOWg1c0U0U0FPZTFiTm8zN0lQa0hnYzFMK1pjTzZ2dCsyYVgxeEIrRjlYUE1OOEdPekMxeHlDb21DRWU2OTJUMklIdVlsU0F4QWpQMVVSeUFMNC9HQzJzTDgrUHAvQm5udTlhaUdWV2p6WFJFR0FwKzZGTjhEQ3hBb3UvTG0xcjRCemcza0c1U2dYcGdKQmU0d1hLM1NuRFdKaE4yV25Nc0NsMEFKc3lMeVgwUmJualA1dk5IdEVuQ2ZJTGRibkhLQTBhQi9GS29FcWV0NlZBWXduRUFRUFV6ZTQwV0k2SWRFcnJoNXRleXZDQnd1R2p3YzYxZzJOTDBnVnpXSG9GU09YSTlhV3lCMFljNmFuYjZUWGF6d2pGeEVrSGdKZVdVQVlLYmhzT1lMMFZ6dDZqYzZOTFIwYW5KYVRueEUrT0Q1WU4rNDJhQUd4WFdVQkx4Wk5uODZiQ1ZjVFF6L0FZWnhsUi9wTGMxbEZvemNGYnk0QTVQVDV4VFg1TlU2WFFNajhlMVIvVGI3YlAya3lXYUVpNy9BRHh6aVU5UW82ZFYzMzRaUW0vekdvcjdmSURFRmFiMEJuNFR1YTI3KzJYdWpUckdxSFBnWlBUaTRZMDdsR1R5UXNFeGk5cXRpUUxhUCtMdmxMSzlKR3ltUjZ0SUNQTE93MGd6SEFieUNTbWJnZjVmTnNhRE50b2c0QjdoM2hjVjhLdHFWN2R3NXczSXFjOTJoQk5FUDBPcVFpZEFWbTdkSWZPSG1zRmpHaWZseUdLUXdLVFhsdXU0YzRBd0RBR2QyTm05SXpGakN5Z0VQREpiaXRPaWpxN0JRUDBVYXRCWVI2b25NMnZZNUw3bzA0Z093MVo2Y3RUVkhrSDZ0N2ZGeGxCZm51d0xMY1llZTZLYWVJZ2dybW4rYzljMGszZ05IckRKV0dmYnpXTXJ2V3l2WnBpNXU3UjB2TVVaeWt2VUh2dEp2NG9TZSt2MXFCMWl6QTRTSHYyQXpHOXM4bFVrYnByZEJyUGpxUnI2QW5mZHpmb2NyK3pLRDYvSERQUTBDaHdzZm1rQzA2WmtKT2VzQzlnWEVLaFRRU3RWWmJiS3ZGcUhjNm9mdzZ4Z0dYWHRocVUycGZiMlRiTWJLb0lPNGp2TUU3TStCN3EreFh2YVg4OHBSN0NQRUx1cE5oTldFa05BaUZlckh5ZkpEcWZBQzRZUG84cFFMeDhhR09jczJRc2ZDSmR0WTN6ZEFjVTA0c0FPb093QWxKcGFxSFVSdFhuNjZwR0VObS9HQ0lTTmFnTWxXdzc3QjRSL1dOLzFCYVFtSUl1K1NyNEYreGFwaHFKMW1pNVcvdERMVVZQZTk2NXdxMEd0TXpOcFI5TTNZK0JjYUhUd0N5Tm5XM3dqUFhLV05Oa0l4dnhxVkVKaW81V25MVmhxV25mRUJnYVFsQXJIUHllQXZ1MnJKS3B2elVBQWp0ZE9CTXpOTHk3K29uZW0yT0pjTEhXOUFsbnVKZVp2R0s5Mlp6R2toQzBENE5Ca0htY0hXKzdFbFZrMHZPN09aNmZubXBFYzBiUjEzMWc4TTc4K2dBYTBaQ3dyLzZpeDJpMTBKV0EyNkFWOGVaODhvT21FYnVsR0ZXaWdHcWhIMkNCS0prR2dhQzV1WW56YTczSFB5UEZQYjNyWXpZTlE4Q3FNWWRyY3NDWXFxRGZTUkkzV0dHUmFXa0E1d2FsbXd0NDNWZ0ZrUVZLallZdVYwangzR0U3OHdXa1EzMElsWGZZUFBwRGlIZ2RVa0lsazJ4aldzbTVTZUZtVmsvRTd4VG5BNFVEVnFacWpZZXlheEdaMUd2dXlXMVJGdTJkdk9xSWQ0ZFpiTUV2QjFnR2txWUtyL2sxemIyTWJkZHl2d05VTWMyeXNReVJ1VzRpQll6UHBsMWQ4ZnJlSWZYRURGY05QYW5DMERrMVZzZWUxakdua0xqRWJFTU1DNDZMRFg4RkFveU9Fb1FKejVnWnV1R0N5cjgxRG5hMlcrN0Z6Zmp5Uy9EWlVubk12ODYrSE1hckc4MU96Ym9EL25uOXRRWmtsbGNVNWVpcytTRGJZRURYYjNRRjFuYlMydmJPdW9zdURQVGRoSVJGQld0SndNSmdGKzlJZ0lTVWg5WE53aWNjOUhHNk9MUFl0NUtNM1RmSHd2SkhneHdtM01EUzlRYjBZeWxYcWtrZ3BGM2d3MUE1ekhBaXVEY0Q1WVVFanJnUzB6N2U5bERWRmkxMUxiVUhZSnp3Q3BXbUVPMERKejJtZjRwd0owVi9nYmVpUk5YQmlDc3JDSWJuSnprVzBkUFk5blJKNXNHUmlDa2h2dHc5eVE2RHVobjhmbUNxZ0hoK3Z2RUhtSW56cGY2REdnVm9yWHlrSE5aTzdJSzBZbUFPWGhMWDV6YnVPTkYwdUh4cC93OGxPa3FpVUV4TkxTa1NYOWVnaDdzODAzbUorNElla3Y4bEpmTUZtcjZLRXFhWjBXYkp6dzdTZU1RdWJSZDFQa3JzKzQvRWU4WjJGdjVvaDlnczEvdE1ocVloMmNYeXVJcDRPWGt3WkZsR0lCaTFoeHV1aFBER0lMOUV0OXZpK0gwbDU4N0ZmVmVkZ1dHK0ZKREZMM1ZPZ25wZWs3WlkrSXVPY2w2dXBwRTZDTHA4MzdsQXh4c1hJOTdENTFsRWhrdjk2YmpBZno0aG9HM0haTFpUNnRjdUNDRVZRL2kzdElqYk1aQ3RIL0NyK0syUytETTlzMWFmS0dsNmFzZ3JzQzZlQVRiMGVuakJYeGVuZWpsbjV1a3h6VDRrOWVlVUhwVDRmd3hhWXRoRS85OHhuMDZCRXZKLzJpRGUveHRiRG85aU1iZzBzei9SSHVRSUd2d2ErblVFUk9yZWpCSmU5V0NIOWZTNm4vYUdWZTIyRjROU2tyZ0xYM1FsYURhcHA2Y3o1TWhJTGs2ZE9EOVdoZHZ2SXpkeWRBY3BHbjE0VUFvdTFBWHlzNXU4TUIvYlYycnFVck54cHVuRXlWNS9Yd3MwYWluYmJjdWE0UGVac25yVk11UDZ5Q0V2TGIyRk9tQ205NnNzUkhnSjZzanVaZG1kdndaMWpBenNiczFCYkFJaSszdld2OVFDdllyVkQ1QWlua1dtUzNpS2xLUVhsQWV0eXdRRm9QUjM2dWdmTXJSZ1dpVnFaNUNObjZsdzB6WFlpUVZCS3NIQjJTWjNJa2YyYjRIOUFGYjdyanBaSStJR0YxMVdGU2MxOUw2dHFEK3dEenpFWERBK0Nma3dLMlVUWUtBZkpaSW9GMGtaQWdvb2ZjMGZqS3loS0NaNTNrZVpxV3kyMUtzNHVvaTBEQlhPREpjNFlkVzl4UGVQQzNCaGVHaGE5L1hXYnk1aVVkaWNTdVZPY0RHdDY5RVBUYytMSFZWcldzRGN6T0ZwalY4TGU5YzlqVTk4bzBCZzZRSW1paStVdzZ4aW9IYXV6MUJmajJRL1A2SFJZTmxZa05MK2F3cGdzd3Y3SjV2MEgvcnY2dUtETDNhTnhVWU1QUFFMSERRaTR6cWs1b0Q0aDg3cHZUV2VGc2dPV2h4bjhxTFVucDg0emUzKzdocDRKWFFsOGtMSzYvQysvaGx2Wk1LV0t0dkl1V3RHTTU0dmxvRXY1TFpLN1JaS1Nod2VyL3ZxQXBxNUUrenkvelRUclc2TDJtdWE3d3FzeVgxUENpNXpEQzZ0TVpCOVFpY2VvYmN3QzZmMzZKT2ExZGk0ZlpGYjhQNmlPRlBXMzM5cUU4bTZxK2RqaVphYXdyWWZZSFM0NmJYL0ZqTGY3SGZaSllySEZiL0ovallVY0xwZnlsWFBoS3lMdUVIMGJPaXVQSzdVT3Y2cDRMNHZGeVpYSExma1c0QzBhdEpjWmJKdlluTGFaTitLS0h5bzE4TWQrZk9HTXJkeE4xdUJNR3VYZ0J4b092bjF3TVUzdElrRFRCUk8zN0sxS0c3bU42VDJOREk1REtUeGNmTGRrNFBPM0d4NHlkcWRjUTFLREZoRis5MFVINzRTYS9IcjhSY1h2cjg2YlR6dGxmN0dhK2YySTN5cFdNSmhhdnEzS1dOWVNGamkyZ1QyU3VXOXZ2d3NOZE5zdmlWczdIajVlS1B0bEc2RUtHMThqbGxXaFhhM0lsZDlxcHd4bzl5N01vcE0wVjFydmxYQUk4ZENLM3d5ZGQ2dDhCaE1pVTdzcFR3NVJZUzF6MmU2QVNLOXJzK1BEMmRIcDViL3Bpdm5nNXFvL014TFpZc09lNElwNkhiM3VtNWRJdkxad0lhSUxadHU0aWMxeThJNlBNSmgzbVMwL1hjMkJ4UnY0TXhBY1ZJNDc4Snp5cytqcTlMNE1LcFM0enZKS3E5R2ZkaS9PUlM5T1hQdHFFdENKSXl6dEY5bG00Snc1aEJMcUhRWUM5NStKZUhHVHRtMVc3eWtGY2poQ0Vuc2pKWTgybm1ONitaYW9vWDRTbkcxMlQ4VWFuV1lpbjVHT0ZOMGJlTnB5NVRLc1F5QWM1UWs4QUlsWUJzR2lMdG16SDc3NWxXTTBBeTZTYXRwV2FONHd5ZlhKeU1ONHM5RDgxc3NwaXIvV3Q5QTZnSU55ay9KaVJTU2FKaEd0SmdOQVdBSGo1d0ZiVUNoT0RiV3pSUlJzNzRmamhCbE9yMDdwNVpjbVBRdXVFVE1GTjJSN3U5azVENk1OQXJ6dFV4QVo2WEpKQkh1RjZWUmplZjc3ZS8zaUZLU2RSRUN5MEs4NjZSbFVERTU5ZnFZUDREdmxCMFFMRE80UEpGYnBJQXFKVjhjMXpPUDAyYkExQ1JYTm9vQTVyeFlFblhpYVZTMVhpbGVydmtORGQzTXd0SU5pck5JNG9WaG5nTWVqZ0JOeTVaUkQrVXRrN3FQSlk0by94YnFWYnVucFNVRmhZM090Q0d4TjF5T3NNRUF2U3lSTEJJVHYxNW5CcDZPNEc4NThoTVNHbTFSVWhWcXpDbmNDTE9ZQ3U3d2EzbUpvWS91R25rWTdzYmdPbktDUS9vTEs5SXA4dCtzclV1VitLblFORTl1VTRFRTY1Nyt3NlR6ak9pSUthQ0FDZ2VOaHllWncxTWlLS2NBTnlvWUpUVUEvSS94dmU0cmU0ME5CeVBCSXhQbFZhaHFWMStXK3VEeWNzQW9WSWw0WXRUQmlDSWxYQlhNOWdpZHVhMjNXN2dFekNCQkRRVkxaWndwWHE0UXJQbHpMbHhUMFV5ZE9hZEI1QzRYU2JpNWVsL3pLY3VYcGEyTlNFeHlId2I0bnArSmxqL0JaSkZNMjVadzQ0U0V1RFlRMDFReitEL1M0L1dyZWVxNlBLQ0l6dEZ2K3BUa09sa3N1aS9ad2RpaUJadzlOS3lLSWZpZjJzM21iVkE0QjJ2c2NmQVE0eUZnNXdmdjUvajhyc2hRaUJSNTd1bGttbm5KOTN2VzE4bmtTMGpyZlhqWmtJVGlFT2lzVVhYU3YwWVRHbzgyL1JpbU9YZFNiOEJTRzhDcndZVTlLZGhrQVdkMGZkTDlzN2pZY3FmTk5CZFBORmREZ1JzeS9RMEFXQXhLWmNtWGhDbGU3b2oxSU5yZjd6THcyNldIVnAxdWxLeGRuOWFWMURHd2JOMzlQZnZQRUtVM1lmZlROMFNSWkJ1V0x0eUJPNVpPUTVmQzdWUWVCUklqUTJac0N5U2FabDBaUVlVeExwZTZac1d2QVdqd2tKempaRFhBOW5XejZBcFFnS0twL2ZobE80cVE1R0J3K2llRUdQMkVEZWtVVURTdTA5WXhjZ0drOWZ1K0RaZUluaVE1VWt6L0xLaFhrL3VCd0ZHZVhMOXVpd2tNVzJsRSt5Mk1kYzFNK1RhdVpRblpjNlpQclhubHZmUTBxVkZpTzNSeUxJTzRZYTJsYWNOUW1BNmlDTXJTV2F4aWdsOEtVZ0x6eWJoTXRtR2x3RUtKM2pNV3NtNldkejBVR0tPOHFLZjFtNEsrLzRQQ3VoQWxSbWJ2Y0xlN2dTamZhT3FZb1FzQUpHVURFUWl3Z1Q3MWUrZ2pmS3ROcElOM1BIcU1BazM4SGszS21yY3FxNS9rL29JeG41Y0k2aWh4RnEzYkZBZEpCMlM0VzJiU2RTeXNCZHhkUXg4VlFVM0xvVzBTbTErdEdKNWtjRU5yTlJzQVVxelUrRWxLNFJxRllpWGhTQnhhUVE4WW9VcmpyalhhNjA0Zy9mdVNuT0NHT2N0MTJqZlhObERIOFdnV3NjZWd0WW5ZS2tTNkxjcWkyWG1MQzNDZ29OWitxV3dkdDFpRGJYdW1zMzM0V3JyZGJBeVF1VDhEQkx1YStCSjhqd0ovZ2NFZXBsRytpNUNrNitGTFlTSGdDYkMveFNHcWtYRTlwQ1VkUGJGUjM1aExDbkNDTlJMYWZBRTl5a2VNN1pOYmo2bmQ0QVNXOU5XUFV2ZlVYelJCbEdObDFESVV0dlJKelIzTzFtZjJqVkJRNmpvNXpBL25OdEtpZklVUS9SOU14Q1JROHpQR1lFb2h4VWZWejh1RHBQcGxLZFpVVERldWJDS21vcGtVbU5saUNOUFpEWisvdjVGR003V2JTMlU5VkJCUkY5WUtHS0sxay8xa2ZZV2ZJTlJpSkZoYlNxOWxMSzhqdDZ3QnRZUi95OVhTWDB3bW5GRytvRzkwNFFmSnBWaEFCaGVWSmhaQzdHbTJza1E3WlJ1U1doajhkM2tuRFZpei9GajRPbzRpM25ZaXlFWTRnUG1ZMmlRN2JPVUlnby9HNERITG51K0NRYTBwdjNJYUxIUlYrZ3FyUjJMbG9XakxUbTBsV0d0Vy92NFk5NndQR0s1V1dEMFpxalJwMDZtbElranVtdmhoZkxIanZPaUl0c2VneXVWcjF4RHFYait6L0JId2hCUnB3RGF4YkkyQTdCdlAxQnIwQWNTbXJhZ1VLWlpPY0c3T2wxUDBFM201a1R3c2ZGSTRac3VVZTFZczUxblJ0cVNPVU9lNFhvU2hmM2hjS25FR3ZDdm14UFRQdGxkNGRaK2RDWDU4MlRoQUJnekpTWEtIYndQTStCU053Y0pTUjREMlJldFl6M2d6Vkh3M0dub3E4MUo1b2g2eUgvaVF5T0ZHQ1lqWHIwR1ZoVytoYmdiNzVwWUI5Wm1XZlY0Z3R2SlFFeEhoMWVuY2t5VUhPUzY5L0lxSlExTmlOKzA4K3BxdGVmdzlNWDd3K05RZ2pMMTBVODhHYVh0OU1uUGIvZWdSckVnY1JRckxFaWxjdldTN09FNjhVSlRFTXBjSXBDaFZTT290eFhDc09CMktaTDVOQ0xRZmk1NUpVYmxPNUZ5dlZuS0NMRklvL0syZkZPcnJMWExodlJkdG5oSHZhUExIRndYNnJ2MWZSd3RuZmxneEZlSVpBMW9jdkU3bm15ckRldE5zVzZRMTFWdXd0Y2U2U3pyRmNGekhRaU1DQWVRUTFIUnFieHhiQmVGUmV5eTF5RmdRWDg3SmZOS0poNXROZWNNYm0zZ3kzSkhKeGlNcHFaZ0crelhVRHJIQ3Z4eDdhcmxOT2FJZzhzZGw3NFdnMnBRclFuZGg2Q3lqR3NZdFNPdGZOMkVJQWlnL2N1MWxSb2pZMGhtSVFiUHJJZ0xLQzN6UUw3ZjBrRWpmeWZwd1cxL0ZBU0t6UlVCVC9uNTloWEhlOWR0cFF4QWtTMzRScHhqUS80K09hVm1IUWZqdG9WcE12S1JoUHBBbk9hdVpZdy9LT2xWcHZtUWVMNHhhcWlSVy8rQjdIK0phQkFEYmwxbmpJRUlZQ0pCL05IdW9hWDR5cUlPek9taXBXWWJwNnNKWVA4bWg3VEFpdXdqTDFYbm9RN3piN1BZQUpTOUNaMm5COWMreTVZQk9xVE9JZjZkMjNoQUhYbmZnYkVwd3ZBdnBUcEdrTFFNUWl3Y1VEQ1R5a3hIZk5uZk1CYWdNL2Q2YTZJSWxGUE1Wc0t5U2NzaHVNOStXeFQxakx6b013a3JvUGFUL2U0TVdsY3dOcTJ1UE1tODFaM1BrNGdjN0h5UFluQURscmd0NVYvcllhY3ZMWmtVQmFSeE0xMnNpQXRVaGo2SHJJei9NR2s5TGZqaXFITzl1dEU3THQwS1J3NVl2T0FiRWVVOFBwdm1YK1hScml1TW9ZdXkrUlBHbEI4dmNLWDlxTUkyMGxqeHBiWW95aFdaeVJ3a3NUNGFGMWVwQkV2MWVDOWtabXB5d2pOdGZ1NWkzNVJIeEcxenhRWElkbS9ZV21EVmF3T2lCMzkrbk5LM2kxQllrMTVkUDRvOTk2eUlzL0N5QXlxYUVGTUErMjBOZWJwNit0Mk9xdU9KY2Fwc1gycU9yTFp2ME15RDhabytmTnBXTTR4c0k4UE9wUDJsVHZUV29CU2VXNytxbWZ1Y1dkeXZsY1NOYU4veVdjUkQwSUdaY2NFNlhuNVNnbTVmaFlzamlpQ2xTYXppQ1dtaXZFNlJRV3hWRzgvQ1R3MXhVc2duN0VTaExIUmRXcmVqdldVVjdUTEh5bFBSUFpSTCtMNVJRSTloTVpHVlVDelBneGRKOGRNK3VzWDQxRkdrNE5SeXkzTnR5dE1oL3V2MzAwQUM4WXNEZG9WaGkrM0tBb3lrS3VweW4yQTR4ejM5dExXS3NjQTRlMUN5QjVnQ2VsSVc2Zm9aak1LZWNJNjNVWk13YjBYc0h1UGlKWmpXeUU0aXQrWmpjVkMyR09ZQ1liVlc3akhXWFVES1ViVTZzazBsS2luckdDYUlyNzI0c2RpZ3dPeWVzS25DNG5hdnFHVllGWU9GM0RGVUhrQXg0UnlrVW50WnF1RS94VXh3L0ttT3ZhN3pHUnR1UG5mbnljcUFQaDdzSGVVTWVraS9zRUFGWTFZaGhMdnV2dHVkbjFSTW56b2NGK3RZSjJaZ2JCb2RGbHkzWi94L0xOaDR0WDlHYWpjZEVPQ05JTnRXTFNXODZoUzRIRE1Bb002ZjlvT0pzdVFEeXhDaVNXcEgxTG83UDlUSkExa21ncHpaRXU4YXhWQTBBVUdXZXp0ZUlFeUFKOFlvQVNFZ0N6TGszaEwvTXpnUDNnZXoxWHZhbWcvakU2aUoyZ1l0T3FxQkxuTlVDeTVYWU5BUHBpejkvd0xsUVZsNXFGU0NDenJydDZJNXFscExrTTZacFQ5WTBvUTRncThEalh3R0pwblk3VzV1bzVJV0tLcitxZ3ltUlg5UjcxNzN6RmUwM3ZERm4vRXJES3pTN1hYSWthWkxmS0d3bGwrNHlGUTFON01VV1BOYnZDYnZhbTZRM2wzemt6MVpQbEtWSGFGVTRHQ1RRaFhOYnBMY0V6T0Q3RnJJbFdzblcvaWJ1eW1qQnBaUU1mTEJsQis2YkRQVFphalJRdUY4cnBid21OM0Jaei9pekdHYy9BVHliSlFCZ2g2UkxUMm1jSGhqY1d1U3pkT2ZieXl2UVJweXdPZzRPMENBdXh4ckRMR0VCZTJ4bHA1WkVBaWxQckV5aUdzZUNORzMwTERlRGdEbkNJNnRIeUVzdkFLMkFtenRhaVlzWTJBUk54Ri9acndYS3FiNVB0bitlSFZycFdLN3JRU1lKc1pseU00SjluTjR4VTVjNy9NcGxUcFpud0VrRWVCTGpNMXZQNS9TTGczOFE5S2lJd3V5dnQ2dzBTcm9IdEJRTnVyS3V0VkFmeUZVZForNU1XSi9YQUIvMEZsZEkyZzRrZ0V2VXRsVVQzOFVReGVxdHVRaHJuNDF6RnBQeDF6bkx4RDNOMHExbElGVkdzbnkveUNFR2M3dWVIZFhZSGZxcU1GQ2dscHlJREFEOURpbHVzeHZpNS9aTnM3L1VnZkV4SEZveHJKeVl3NHZGRVFGdXc0UGJkTXpVWkUxeTZKT2RyZHlwWXdYOXE3QldGb1RWYWhWSno4UTRIN2JJWldTS3JYZERQdzhxVW01NklZNDNUcm53WnU5VmFLWmptTGR4STNmZDBvaHFIY2pid1VxajdEMkQ3ckUzVmUyaU80aWVta3pOQ0l2Tlo5RUdVek9mQk42akowa1J3OXdwdTlDcmVQcDN6a3NacDVEYmR1dUlkRGVUei93cTVXY2R0WDR4VWQ5YmxGUWpyT2c0b1JiRVFxakhBdzJkZ1VXUkgyaTREQXVpU2V1aHAzNE1HVEtoTVRYT0tFSHRFZ3IrQ1NydEJqb3krcUJpZXZzTkxaaVdtQWVVUmEwayt0eVN0NndnTUluV1hiZG4zRXZURDhzaEhZUTYyeWYyLzljdG5qc29UNzA5dVl0QnJOYjFBdVFQZ2JlOTlRK2JrOEI5MWErS09LZFZZQ2p2a21MYzUrYkdmY3FlbDgwNWIvUFlLdWpyTzVYcmN3Vnc3MzZiYXNTcWNzTy9nOGNuNVNBcEs0M0oyeFVtclF4Mlg2L2NMbkdhZUdTMEdDSzJ6V3hhQUJWd0N4Q2xQWVVsVmZZMlQzTHd4c1lSejJscm9wUThDN045SEE5dVZGMFJtbjRIbjZ0RjFBMFAwS0U1a2sxcHpPUUtCcXkrb2pnVGkyQ3cyWUFVaTgva2ZnbGpoeDMyT1gzbFN6TlRTcGJDWXo0VzR3Q1dndThXZll0ZkFudTdvR2I3dW1jYnlnbkJQZ1Z4cCtINU9zQkViYnFuMkZQdTlidnljZXNFWEwzNUZZY0N1a3VoU1plTEpLRFQvaHVCanJveStjRjZQeitSTzU4dUFJV25hUE5YRlhvcm55Ri9LdHFzVkJ3REJibjhIR2tIcVpaZHlsUTNCS1AyUzYxK1VPSUNpclhKNFpxcHZqbnJxbHIvQTN2UGlUUm1OMjRLZG1vd0tyYTZBeCtTUVRyUGNKMzZkeTdDQkR2RmY5b3hhWm91Z0RaRUFWUksrdjFYYjdUbUhtZlFtMVkwZnl3WlBROEoxSEVLYjhIVlZCelZ4dXllMXdzRTErSkxBOGxQekQxNjM1VWdkZGZkMlN6RUhmNWs1VUdIS2JaYjRlS3ZlME5WQVZtV25VR0FzMUZmVFZvOWlOZFMzOUcxd0NHUlN3VjdFY0dQdzJuYlpObGtObWRzdlhqVDlLWTNxeTFJSHViK0JpRysyNkhqdytON2s0RVJGTzhEZEx4TXQ5bG0yTnpNSTVIc1RkYk1zdW1sNDVES1pMOTA1elBQWG1WSWRKUW9UNEcwbUFmanAraGo4MFRqQmlZVUpoSWhWMzVmbFl1azZPdXFNMUpOYmVadkt6dklka2RQblFaYkFRcG9WSkg2VkZOdXBLbFZnWkFXaTExU2R6bXEvVFBVV1dWYlQvYUxNZ0dPRk9KSXI1SWVNb0VjZ0hnTXJOcWVkL01BaU0yZEJTOEFLZndubjNlR2xFaWN5ZnQxL0JmbE9FZEoxQkh6VVJidmZWZVRrWk14Zkh5cW1NT0lqNnBBMVBvOS9TdkdLWnlHMmQvbGRsN0hRZ2xOQTZVd0J0MXFBNGVqL0dTZnZhUnU3RTlYMFllendCSDF5VU5sR3BsWlQzbEZycmZhbDIzdEtOd0NXUmNxYzR2S2RCZTNtbTh4czU2Y2gzbWNWT1pBKzgwZndoaWhmTlcxOGJndGt6cmdVellIRzRBeDlxbmxka1I1NWNSUDN6SkxTTXdWdFNOaTlocUxpelRnZ0dFdGVMY29ucnpmeE4xQk41V0dqNWw3TVFpVFZNdFR6YmFYbkJ6WExTV0RBUnQrSjJ0cEVneGpNZ0lpdXJlSHRZc2RWN2h2bDFqcjZNb1NueVNpRWNSUmd4aStkTHZtYk5LV3BKcnJzZ2N2R2pnS2RPZVptRTJGb3YvRWZuSWVPTTYzM2ZTUUMyYktBemU3THJmSXo0M3E2YTZFTlR5NFNPYWdqbzFGTlVkaHJpMDRtTlhDME10NHlReno2NHNHZFJxSit6SnUrRVUvdmpZWVJlWmtLVHI3bDVqc2ZMR21UNlVWbHpKRTQ0STMrZndpeXBXMG45bmxIc013UTMyeTQvZnFNT1ZNSDlra0xMZVBmSEJQVHFTaGdrczQ5WUtDVnZGSUxaYjlKREZYZVlXTjRIL0ZlOUtuZnNtSlZlNmRMbkdYb3k1VVMzaVhtTzhVeTFlSjhLT29BUGVEejR0b1M3dmFKNmdadWhsREpKRXoyZ2pBQzBoYnpjMHArMlVtMmpFTStrbklSV1pqK01WSlp6R2lxMmxySDRVeUhOaE1oaDd5eFlUYi9jeUd0eVVZQTIxTVF0OU1oMkNwOVVsaXlDMlE5ZlZLUzhZZkthYTQxdHc3WUJXaEhqNXNMT0lRdndNNnZXbVh3ZVNQMUNwMno4b2M3MXc4MTFncHNmMUJzSkl6UnlCR2NmYmVoRVkrTGVNeWFZSzR6Q2pPUG8wcktyM0ljTXkyaG1ldENIUnNGUVNuSTY3R3UrK3hZZDFQYllOT0hRM1FOaWRrK01MQlBGdzFTSW02RnA1di84WURCMEpwMG1UVTNmWTh3Zk9QZnZGTWN3S3Q2b3dBbGFLaGVXQ2xwN2VZRDFYY09wYTJXbE52R0VWL3hxRXMrKzZLOFlYSWdZeUQwb0IwUUxEalEzVkZqWE0rUFRxQ0RWL3ZtanJmbWtsYjgxRk83U1BKSHRWd3UrbWt2Q04vdFdiOU5lL1h1QklUN2VIck9PbjNzK1BnVXFWRDRteWRZb3MzcDdZK2xSSlAzdXJxTHR5WENXUWd0QUloZDBtQ3ZRczdaeHVMK1c3MFFyenZZdGlMWVN4T0JoVWlwNnRWSWJuaE9rUlZKYmlGTFU3UkhJMkExTFFETUhlRkpXbmJhcTdPU2ZPNm1EcTBHZGpnZ1ZUTTNlb0ZGM2sxOUcvWURESHFXc2EyWW5IZzNIdWJ4aDlGM0tJSXBTd0JQalB1NG9mR0lTNUxCSy8yakJjTlA3UHd5YlJucUJZUm9vaHFRUDNMY1JXTkc1bUZaWFVKNDY2djNxOUNzbnlHRlRDQ2hKL0dnWDBvSmZtM1RCUzFWbHhCU0VJTE5uSXZVUCtOVjNPZldFNEZCTkhsUG1sS0FMaU5aU0ZJVndEeUxUeUtjczY1QTVSOGQrQ3kvVkNjaTNIR0xzQndXSmVZM0ppMk1GRWNNWTdUdGcxc3UzRDRBTUhsaU40L0YyOTJwdjVpTEhHRDFXTmFxM0hEdmNjMFU2RjVGSFJockUwb2RmSCtZck9xWFM1RTFvWkFNVmQycmx1RFBIUERZcjNEL1FnMWNnRE4xRUFqb01nUmdob0h4aTdNc0ZueUxUUmpQQjZNVUZWc1liWTJuK0tLbXBBMGJDRW5Fakcwc3g1NnNNdFFPeWtlN0Y2VHV1c21HVFo5VjFncytXY3lVSmxUcGdUbkg5ZktFZnd6TEJPVUZTV3RsT0llTXZxVmJIMTA0MXdPRVhCbzdRUS8xclVNbWFHL1poMi8zdVBiNE9xQWIxcEpNWXp0bXFseWpqakt2Q0Rxd2gvYVYrNUdnMDVXQmJNZzdHbTJFbnFueTJHUjk4blJCbjY4eTFqQU9NUjY0bkQxd2h1TFJvK3BWRXV6TXI0K21TS0RjOVpyNnpjN1ZYU2tiWHhSaXEzeU04ZVplYUFsSXh6cktqd2toWURjY2VCY3dCbUpVUWVuK1h2VlFnSjRJVTd6a3FJN1luRDBMcFk5UWFZcHQwdHlhVW9pUzlkQzRSVmRodnN4ckEzN3dEenB2dDlwdkFXTUpjTmh6OTF5anZvSy9leVJiRzJlSkdBR3FFbTF3bnd6Sk9TMC9OZ2pyeDQ0M0c0Z3NUZnNzYnpUSzlObGJEYzVFdUpPNnBrbzVHK2wvbGZOTjdSTnYyc01qYXRtNE92UjlRT3QrYzUvTTNwQk16L2NoRGJVbVpEb2VkN01hRytrMUhIWkhjNW1yWXN4THdscmtuSW05MlBLMWk5dm56SDg1UnBCVDRmVjJic3FrM0JCSHlaYWtkNFZzTU44aktkL1dhc0RNLzVSb1c0dEhieElzY0RSblh4M0pwWlZTb1h2MXVzOFJ4RW5EdjU0VHpZTzNrR2hRQXBqTXd1WDlzdU9maFlMQk05V2huUUlUUlNnQVV6OFl4aG00d0FKNk5kNTFTSzhGaVJpenFKcFdjYWZmSHF4Uk5QcmEvY1d6QWgrTmVLVEs5eWdnSDQySkdzcmNNTnNiSFZFVmlONlFGQURnL3ZhaHJ3bWtTV1htQ3NKZnh6QldaQXF1a3FmYUtUN25hYkVMem51TmRsNGpUbEY4SFp6cWlQUUl0bm1UOHB5UjVYOWZ1Q3dpUDZ2L0VHVy80SG5sVFJWcUVJU3k5RGMvYzUrZnJQUVRjQVNJSUJaTTNEWFFGd2JWS0cyaEN4Z3RuOFNKSC9lTXZnY0wrNENxSlJrMnJzWlVqTUFZTTJZM2xLZGpZSkdDRVluaEFtY3EyTmN5enFXc05BMUxlTFNZNE50VFg1R09GOVJFL29Pd3FSN3dZT2VmMkdDYUVUSWFzRVpMMStKd3ZmaUh5VUJTQlNlYUZ4ZlN5Y29ZVExJVTRaVlduNGJENFU2ckwxTnpDL2dYZ0VuR3hhMUg4bjhZNld2bGg3TWpGMzd4U1RjNHNZTE02NURJUlA0OUFBMWVVVUhYa1NNRG0yQTdjN04wUW56eEtNdjY3bk1WMU9YNm1kN29UOXZKL0xHUUpNd3pXV2ZHUzFHYXhHZkNhQzU1TTE1S0ZGZ2lNcFlEOGEwRjZjbzhIdytnQU1wMjVYWTRVUG5xRUdrTXdHSDluQlBxT3NnaUFoOVkzTkR0ZE9rWkFVN29CTFM2MzBBdy9vd0NBN1lneGNIYTI1VWdwYjE3YkZYWC8zbkR0S2ExeGl1Vml4OXdTT1Fxd0N0bnVGNTJ2bEdoNTNURENDMm5yRE1pcFBuSmZaUjdKdG93WGZPZUFRc3llUFNNWXdNWkcrd0YxWWtycVdkYnV3b0lKaFlzWVl2QVRpWFc3dktBb0Q0N2lKb1NIQzFIRzVSa3Ewc2NuYVgvMHdtY3Zsbm9kNWRlZHJxSGIwT3RYV2NaS1drWkZqS2YzYWh5d3gyeUhwQU01L3BsdEE1MDQ4bFNEd0JwOXFPZndKL3pCbU94K0RLeHowcmJhd1dtZEZsWW95WkhscXhBTC9LS3NFbmFrWEw4b0dIdEp1RTJGdGM2REFLNlhTV1FuVmZxQXE5QmRsRnFGSFowcFV5TkdUaVY0dEVNUkdwZ2I1c1VGcjNDcUdkblJLNGdYbGxvQWhUZjhBendlYXFBT3M1SzhPOE9TdE9ISzhqbE5ubWIxa2VGU2x0Sk5ONHYzUGNYVTlpS3ZyVzlKV3JBMGhiK1hLY04wS05aQ0ZDdU8wRkE2bXdzRVE2M1NkMTZzSGpRVGRYNVdzSHJiU0FxdVFiUXIzVnFHVm8wbXE4Q29EandHbUs3QjI5OWhMZFdkWGs2N0FLME51ZVNJbnM1cERoY3YyQmFaOTdDNXVDOURUU0NQdVNYTXh1c3lQTTJyTms2bHNIcEJVZlEyYVM2d1k3MDFGcmtsWXN2RnpoSlZVTmpwVHhwM0REeTRzS1R3dUFqOTlXWFB5MUJtOFp6SHpXdk5aNi9LMHVMY2VUcWZZMkVUbmM0YndONWRCWTZRMGxlUUsrT0lVczZLcExRVzJlU0NhelV5S1NnVmZWMHpBdXNNc2tHM3IvRGYralVqN0E4Qk1pb2xNWTM4SzQ1T1N5RnIxVG1QV3ltd1pseFhpcm1HV1ZjWlZzb2JRZGVPSzVKZkRXNGdzQklNYXJvV0RJdWhreGlWenRNUFdnSlljdTdxcHR4REhWZjlod1VNaHloTzZJRWVML2paS2NMdzgvMzZka1hHdmN4dkxIRUFGWmJkZHRlZHJHZ3pBd3l5d3dEWWtyUVFhUE13a0t6SmtFWkYvNkwxcnBnOVNmd01OUDRCUENKMmxoVjBLM2YyRHFJT0k1NG1LcTVxSXNWRlRpMVRTUHV3ZE1PUzVIWHEvelIrYkVEbXIveWk1MGJnNmFFSW5TQTd3MncxNG5jTVlXV2dXZENucjNydUdWdmRpTDdSelRHT3lvOUVpWHl6V1R1RERzSVpVWWFmSCttV0oxMWp1T3pQTXUvNERFN2dnS3pHbmNFN3lFemhGTVllS2JTeDBjU05VSUhZN09aLzhtTGEvTzFzaWtSd2RRUWRpcHptNHlxbTRJTSs2MkdYNmx1aysxK1JidVdFditTMTdMN2paU2loVkdRdm5QZUVnQmVyazR6N2hzUGZUc1Eya2czUCtzaXEzZFFpR1ZuNng1TE1SaDBoRXRhbVdhZFRLcDk2ckFid1dKemhaYjlvSkFWQ09FQTdHejhjdjA4SkRkU01TUnJNY0hjUDdzcjJYUDdzWnQvczl3VjVRQlJDQlc1dUlFTVpJU2xIYTRyaW51L3QvTVR4V1ZzWHVhVUd0M3BMTTl6RG82V2dXTEVuY0tGOGk5bWM0YWpnWlZPNmpoaExzKzlOS0N5VXZvNzBhSWd1MU9IclVQMFpTRU5oMlZrbkZ3SFRmTWg1MTRTdC9mMWxjRTUyNDFLNGYvM3MrTVFBbkpRNks2cGV2NVJ6dklOalRsUnpXSmFyZGdhSVdXTUY0MUg1NEdkZ1p4bGpBT1hkVkt0VGxkVjd2MnFoaUkxem9uNTVWOUMwYk1EbVFvcy83VW9odU0yUUlQR21FT0tIcnd2cnV4UU9Ua3p2bE92VFVGNkFVVkRnUTlYSTRiWUgvS284ZUdDcndEam96WkhVZm1Kemsvc3NTUnNRQkdXK3Ivd1E0b0FubVloQms0QTVKUHNEL1Y1ZDFmTzdiWWpHajg2amtJQzR3RG9vOEl4OC9MTjNzcXAxbE9oYzNQbUs3Z0xoNkNrcjdDTGw3ekFYcXJxZktOTE9tbTBNTWc1bkQ0eHh4K0l6bmdvUjRoaFNSTXdRNHVsRE1TY2ROUFM5OEd1R2pWcC9NYnVNU09NRmJESUxmMHozZFdLbVpUV015d3dxM1ZkUmR5Y2IyVGovbW5UalVVbU5ZQ0VmK2E1czAreXc1Nmc0MzVvaU1EZ1pnTUdmNjRVYTAvUTgwdE9QVUFKSWdlNmd0aHV1UW9DMitSamdiWENJMGFUYS8zekFOeTVkdE5HNHBXTTErT2Q0cGNHZE92cElVVmRsekdNVEhGcmVNblVXaXdRcHN0MEhYS09TTUNQNGlsZDkyaHY0L3IxNk9HR095c2ZXN2dPSzFwVTNuNUI5TnMxL0trYkM3eENIU0MzL2ZsbnkyZmZSVThQa0tleEQ0Q2I3WnAyQTBuMVphbDRYRE1kbTRmMU92RGVzUFBTdmZzUXZpUkVTNWdWeVVhaVV3Z01lUzVWWDVkRFBPSmhvQ3VXMFU5ZmJlaTRLK2ZIUnAwbWcwRjZKMW9XeVptdUtpY3FLWjF0MlZFYzBDbDhYSmVkUnZ3ck9RVWt5ZVkrdSsxNWpqeklSQmR4cmozM3hoSWZnd2pVL3BSZVB2VWViNXBQT0dadXF4REp4dVMxTjc1emJOcnFyL2FVK05lTlZOUU5DZGVxRVJXNjA3Kzl4cVpIMnB1a25YZ3dxNm1UUHJoaTBSMmNTVHJOZjk4c2xsLzE2bTRhUUlSMzJDREFuMDhlSUUyVG1BbHNTSDVhTXRFM0FETEN4YlloTHVSakVuT3V2eXJ0ZWxjeEZGUjdINFlHYTQxZEQrSTJrTXQvWG4xb2xvWjhpL01ZRitqWXNDVlRpb0tudHNYdUhrWHlNOGszWmVrckxZNlVmS0RaUmQvQzV6bEppczNESVplb09xaXBxNHI4cE13VFhDL3k5R3FiS0prOXlrTXptN21BQ09IRzVxWDVLMTdPMkRRRGVpMGMvK2RiUUNLTnVXbnRBRXZRb3oxYTdXNE1rR1Z1V0NhMXVrV2FpRS9pSDdwd3Z4QVlMTFVJQTlHQkxoM0pvRDNGUU5qN3JWOHlOSU9BbTZKaUpYNFloVUJZR2lsaXJzMWI0c0ZzOHAvYkRTR2ZjQXFDWDMyQmZFOFQxclpnRnVQaEdoRXVQVXN6dFFZOEFISG5ZQUp2RWNKMzFjcnhmUkRTNWFEVnJQQ2txUlJyc0lxMFVaNnlraVdlMmluekQ4TEZmVFhET1JHeiszOTJoUDJYRVRkajBPOEZ0NEcxY2hXaW5HWVdKMXQ5NUIvY24vYmhnZjAzL3dqVnptOGVVVFJxdnpDSmN4dVVPQ2crd0Z0VVA2emRRb0NVTDJOek1MYUxBMWt0d0lvTS9mVFlGOWd6NFc0eEpGWCtiaC8yWU9sWjhEU3lsMFVXRG9QU1JKY0d2bms2MjJ4VUE0QnJJK2hmdzhDS2MzU1h3ZUJYTkVXQVhtUHBqaWkvdGRmUlB1MVRSN2tDeHhEL2lrdk1CSFB0S3o3NGwrbFhDMHJqenZGLzBJKzdNaEQrdDZxWGhTVFZndUxmOWJUaG9WRjhaem5SY3RXRG9JU2hCdGlQOUFNdWFoWCtBVnhPU3hBRERXbGJFTFpxNi8vdzJabmx1SjltbVl0Y0RYOWorR2dVZEx5RURId29zSWQrWGVXT1dNWHVBY2pwYWRQY0xEWnhBMHpkUFIvVENXUmFBZk5TN1AvdlJCa3loaThtNEdwaVN3WHUxcC9aWmdhZXlJdjdpRUhyUzlyclZBeXdqYjVuWjhrQktJUUxVMzJmOHliS0gyQVlPcTNOOXQ0b3UyQVFCQ0dMTkl6NFc1Y1JiMkR6ODNQWnRPRjNWOEVWRkZrVE9hMXNJMnNLUnBXUm1GczV6cVhqZUJscnQrSEhka1FzZTJpUGgwa3JRcXpFcTJFVlV0dGl6V1cxbnNZc1RtcFVMWUpmdldDK0ZYaWsrWGsxVm5rbGREWmpoS1RRb203OXhESSt3SWZGaTJ5Uy9tblhJczQwRmhwTndmaE1uZWJoYXdsTXY0azM5QVAybHYyNVNEakpvNGE3QnJqaGQ2MERoUVlicGlhU2lkZ1RMZHBWNmZic21XOFd3ZzVXVFBYQUphUi8wc3NNRU8wbWlOcXZGVDd6K1MvaW44c1BtdlA1cjQ3dk9PMXV4UTBHSFZrSlByeSt0aUs1UFJoWk5XZmNyRyt5N3RaU1ZRRE9XOE9CTVJzaGZlUkEyQ08rT1Z2S3I0ZGZndkR6N013ekJkeVhMa3ZTUmlmUzhwN3dOUXp0L0dwSGlvT0VFUkpDd2w3ZGFNMXdSN2NucWxNbUFtZ1Rnb2dxSVVBL2xGNkg5b3lGODZMdW5LbUUxaUpMa0dISFRHWit3T05hN01LRWRJREJzeHRja0pEZFlIcTBNZ0JydkVCUVVHeTFvOHBEbWVuaXM4TWlzbTMxYXZzV2N0RUEvS1JiZXlUelMrREZORDl5aXloTno3VEMvcGNhOUFwY2lXSDVuaE8wQklmcVhzRGMzbXlmNEdCL0ZtSlorL0I1ZEZXVEFlcDFmVDRwNFBSMGhpRHF6c1lDNXV3REVLVmlZQ1lDUS9nQm51M2p0enpab29jWVpQNXZNOFArL1NGRHZRMG1ZVUptWU14N0xZbkhSNm1abHlTQlJZWW92Rmp2ZjhuMURiakUwbWI2T0UvdDQyOVVFYTNLK2lFcXp3TkV0SEhIMjVzOXpTaUcrSG5PVnpaK1R4VDR0VWxsRVlVZzIxbnhzeDZjbjlLdDkwTzVFc2p3WTVvUFBxODFxVFFyNVJvYUtlT0g4a1dETWwrT1A1azJtVU1RSGMydEtZVFFDNXEyZkRlT2hDUHhFdzdCMnY4cURlMnBNc3B4ajV3d3dQOUNIdER0QWdPMFhKUDV1clZoT09CNTJSeC9kSDZEajluRkdkZDNCWmFKaVQrVHgycDdpUzczNHlNMGxzekdWQ0FtNGxIdEthUHBKWWlyaGNoYnJmWXMyWU1sc1pxeDNPUFJEdmg0Q2JGQ29HeTN4QkRoRkQ4d2RKYkpCMGVYdzFnbVA0cm40L3Q0MUwwZzB2UG1pbTRUNmVEblJ5RWlTT1A5RE9pZGxDdDZtamFseS9uZC9vbXJaM1FKTDRubmw5WFB1VjlXK2Y3Nmw1dWNxcWNxbjc4U0J2U1JodkxqeW5yU3VidjJUa0VkdmdnTlpIeFdMM1BuOVhjYXFET0F0UVNYVmd0VURwRG1lTVRJOE9ERExVM2ZTOGtKbEMxZEFtUVVlWUJhcWZTM3RDWi9DRHZudXExeHc1aHkvU0t0L2FaKzd1NDlQcDFwVXhDMFYybkxaYXRGSm9wZk9BcXVWbnpqTWVSVlUvR21oQWZ1cGtvcWQvMW1SZ0F0WmZmNFo0Y2M2dFdjN0NwRndLSHFvdzJ2WDhJVjB0OC83THprUC9IYVB5UjlFRzNmMDU0anZZS3dwYWczTHM4dU9jNnZKYUpxd3pOSWI5bE9zT0lXZXN3aVJIMlpjUExnZWhUbk02OWRMZE5NVTlvQzRaZFExTW9oVnBncmZqSE1sSm1kN3pDSVc0a1JuSVVGclg2VE9vUnA1L2t2V2tWVytmRUNRckZrRENPUyszS1YzSjJOZzVlV0E1QmJ0TzA1ODhIZDNyQjFLcEdha2tKMDY5aXAwaTFERGFNc3MvM3lEdHE5ZHl5czIxWDRiTlZRQnBTMlZicjkxOHNDUWNZK2FjY3V6ZEYwSFhtc0FIcjc4TGxEUHpKNmQrcHdENEtueG5WUGsvMk9TSUx1RU5FcC9uaUt4L09DeUxLK0RwdDZrbDZPbjd0eGZPdm5Bc3duMS9RS0JZRzBWeVphWXBFaDVlUkJXUDdMbFRFaU5YTkdjcGo3RE56SGlaWlhRNWk4WGRQT1NWRnBTRG5tcGZJMVh6VmJPQklEMGV4YUtjRTJML0RPU3NwL3dOeTl3Sy9lZ3BZa0x3cGI2d2xPVWdqVmxGcUlDQWcreStjMnhnMmZsYzB4bngwRi93UTR0Z3ZLc1ZNalpJYk9qb3N3NmxkR1gvR3RKdmZodkhLWXMvS0g2RG4vQzFkSDB6Y3VOaFdtMHFJZERkU25JaUdBdjByZU5OTTREcUNmQmdyU2FZci9BbUlHZmo5dmhGOUM4WXpPdzhsM09ZNkRuVmVXRlRpZi9aQUFFQUdnQkFBQUU1QUVBQUR3RUlPUUlBQUFBQUFSOEJza0FBQWdBSkFnRUJDZ0lBQXdBWlZHaHBjeUJwY3lCdlppQkdhVzVuWlhJZ0tEZ3A8L0JEQj4KICAgIDwvQklSPgogICAgPEJJUj4KICAgICAgICA8VmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I-MTwvTWlub3I-CiAgICAgICAgPC9WZXJzaW9uPgogICAgICAgIDxDQkVGRlZlcnNpb24-CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvQ0JFRkZWZXJzaW9uPgogICAgICAgIDxCSVJJbmZvPgogICAgICAgICAgICA8SW50ZWdyaXR5PmZhbHNlPC9JbnRlZ3JpdHk-CiAgICAgICAgPC9CSVJJbmZvPgogICAgICAgIDxCREJJbmZvPgogICAgICAgICAgICA8Rm9ybWF0PgogICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5Nb3NpcDwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgPFR5cGU-NzwvVHlwZT4KICAgICAgICAgICAgPC9Gb3JtYXQ-CiAgICAgICAgICAgIDxDcmVhdGlvbkRhdGU-MjAyMC0wMS0wN1QwMjozODo1Mi42NzFaPC9DcmVhdGlvbkRhdGU-CiAgICAgICAgICAgIDxUeXBlPkZpbmdlcjwvVHlwZT4KICAgICAgICAgICAgPFN1YnR5cGU-TGVmdCBJbmRleEZpbmdlcjwvU3VidHlwZT4KICAgICAgICAgICAgPExldmVsPlJhdzwvTGV2ZWw-CiAgICAgICAgICAgIDxQdXJwb3NlPkVucm9sbDwvUHVycG9zZT4KICAgICAgICAgICAgPFF1YWxpdHk-CiAgICAgICAgICAgICAgICA8QWxnb3JpdGhtPgogICAgICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24-SE1BQzwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPlNIQS0yNTY8L1R5cGU-CiAgICAgICAgICAgICAgICA8L0FsZ29yaXRobT4KICAgICAgICAgICAgICAgIDxTY29yZT42MDwvU2NvcmU-CiAgICAgICAgICAgIDwvUXVhbGl0eT4KICAgICAgICA8L0JEQkluZm8-CiAgICAgICAgPEJEQj5Sa2xTQURBeU1BQUFBWUhiQUFFQkFRQUJnY3NINWd3Y0RCNFBBOUFBQUFBQUFBRTVBRUFBRHdJQVFBSUFRQUlIQUFFQjlBSDBBZlFCOUFnRkhRRVlBY0FBQVlGYUFBQUFER3BRSUNBTkNvY0tBQUFBRkdaMGVYQnFjRElnQUFBQUFHcHdNaUFBQUFCSGFuQXlhQUFBQUJacGFHUnlBQUFCd0FBQUFSZ0FBUWNIQUFBQUFBQVBZMjlzY2dFQUFBQUFBQkVBQUFBYWNtVnpJQUFBQUJKeVpYTmptY29BQVpuS0FBRUFBQUFBQUFCcWNESmovMC8vVVFBcEFBQUFBQUVZQUFBQndBQUFBQUFBQUFBQUFBQUJHQUFBQWNBQUFBQUFBQUFBQUFBQkJ3RUIvMlFBSXdBQlEzSmxZWFJ2Y2pvZ1NtRnpVR1Z5SUZabGNuTnBiMjRnTVM0NU1EQXVNZjlrQUJBQUFVVnVZMGxFT2tkU1FsUXdNZjlTQUF3QUFnQUpBQVVFQkFBQi8xd0FFMEJBU0VoUVNFaFFTRWhRU0VoUVNFaFEvNUFBQ2dBQUFBR0FZZ0FCLzVQZkV2QVVPNjhJZE5rMmtDMVduUW5pOS9Ga09aQ1NzTVJBK011MUxYWHAwNVhFSysvaUtaSkpHTXZ4L0k5SktOUkZLWURVQU0zWDdiV2x0a0VuZ09JQXVaRTVhcGs2cnIzTGlPdDhtRTZtR2d0Y1hDcUE4U0FqNkg3UVRLK3ZGWW5yemY4bHJKREh1UG44Q0FBTE5xSTFBSm5pRzRMVWlqQnI2THRubHNOVXBPdCtPWGRIREx3ZWJnLy9BOFpzWndCRGtwcVRJRDI1M3lSaExCeG1KcStvcFNicGxCVFFnTTFiYThia2dOVXBwOTFQcWE4NCs1Q3ZBNmVWbTdtRzlhaDkvYTBoNThhRnVVQzdURThFV3FMQ3V0RXZQY2NkaHFXZjhwNG5xRUNsREx2eFR6ZnlCemRyWC9TZFdVbmUzVG1IeGsxSDdNb1l6ZHhROVpOV2VJR1QzeGNDemhrUzVlZmhjNkdYZmFrd2orUGhZUmUyNWs5b2haenhnTXllbzhVSVdTbDNLcE00czFpM3JxYTZzRXBJS2RQa1ZGTythSWR5eUlzY1JINVM2ZDMxby9nYm5HeXV1MTNhcWhOTmdRTDhabDhacDh5Q0pDeHJsM293TnBwYTdEQllJV2FTcXVmZ0x0WjFJUkFlSmp0M0V2aXNrNnNlL0VUTGpkSlErTmgrZ1ZIRVZRSUZVYVpHSW9oYjZkUzVUekVaQnIzMFgyaElRSW1wcTYwd1JEcXBPWFgvTU9FT1NjNHYzdGJUWXJIbWIwYWpGNlQ3am9jbUpwcXpKOGtpSHNDTXcvdUxRWnlyK3NUK0FrenJ2T0J4VnY4TnRBMWcvMzUzTU5yR3VySmZSZTBzUzdCRWcrZkhqNkNhTnBqUW52WUp6RjRKZW1GOElWNHF6czZUVUM4VjU3bjlodC8wN2N0RHZ6YUthdUNaSVA5NjZwdHFHQzhuVml6NGFPSVg5WFdjTTg2ckYxU2d5MjR2aTA4ZVZyd1JmclhQem1OaXQzRHprajRkR3FqN2lQRjZVV2NVR3E5ZDVaVDJlUnVBOEQ3NVM1dFlWL3JpUkhrNUV3dG0wdkp6cTk1MlcrV2xJQmdUUlB4Z3RjQXpmOVJxaVRURW0xOGtyQmNYcTR4UWFyQ1ZCVEZDV1BVa2l5RG5yZmNvWmsrRDgzR0dPV3A4bGtYTC8yTUVIUnlvdVpjd3UzUmw2L0NvUmxKNDlOc1ZTTGRadkRQWmdjbFNHcVJPU2I4Nm9rY0Q0dGs3V05ISENIZXVsOEtZdmZINUJXeDg0QU9OdzZXWDFwVnllQ1FzN0JhZnNiVXA1cU1GSndTNkZSWXlia2xKRnZ4ZUhONC9ISm84T3VaVGorcTNuTjI4SFJCZkRiNUhHNlUvVklKRml3bWxmcUpMNmRZcFFZa1ZnTmJTeXN5d3pBdDI4cmF5NHZ1emtYb2w1ZndDdlN6TmNjNTFOWFE2M0R3UkFxU3FjdjJ2L3BqTGZWb0RwaGdzbFJoSzA0b0hLeEhmZ1ZDZVJwdWNQdmE2U2s0Tm5IdnpMclJZM3MxaFc0VkFleGlwNDJNR0I4eGxER2VveEtwbFo4dmhYSjJWY29aQW5wTzR0U3dFZlpMcEtiUXJabUR0K1BnclFyTjlpV25HVVFldEVrdEhYMFQ3QUNtZ0JvYWg4ekJUMGs5YU1TZk5yK0U0MWhTRDUyeUQ5MUpvbjYyeTNEQWFXVWZWeXJJeVVsQnJ0ZjNkMm1xNGZaL3dLejNqYkttTnhLRGFXSUJOdTFhcld2Y1BldzBrTHpQZDRHMHlmV1V4NVdCMVlQeW9WOHlOZlFwUVVtN3NPejg1ajdXZ2w2SjdYU1JQNk9IWTZ3cjlKL0luckpab0Uxb0Q2TDQ0Qm9TRllUemJ3R1hFNTNVTEt0MVpUM3pjaStqdVVDbis0NjhJaXNYbEhyUW5CTnk1OExCeHB3YmV3aVJDazNaR2ZWTzh4OG01bnBPOHVhTUhPc1YybmV6cjgwejFyVDlDazBZRkNTWWdpaUVTK0dOc21EUmV6QWtpVUc5bFNQUWJ6V0U1bUU2cmpLM0FWSjFMMnZiVU92T3puSXV0YjNoSWtLU0Z4MUh1TE4zUGV1K24vV2RVVEpUdjA0elVqK0ZpODRkVHFaSjh1OFpDS3ViZmgvZi9LRC9MQVpUeWhtajR2RU9JU29qOTU2WUsvZ0J3UDBJM05XVzA4QU80VjUySDRMdWliQ3g4LzFYTytlWjYvM1hOdGd0ZlRDS0R4SDhMd3BqODFBdHpvbUFuREZKbTYwcDhJeitWUlI1eVBJc1lPaWNHNGx1UVVSU1dUZ1M5aDdHekVpekVranovQ0d4S1RIcGtyM1NneXo4amFlQ0M2aFVuenl6MUtoL0g5Ri9KVGN1RTlsSjgremJySmNQZzNSZGFsWXlHTjJUNUp1Yjl5ODBMMkQ2d0xuVUwxbnFjb2R3OW1kZk1LM2N1NHNnNDlsS0RtZkhrc29rQ01nMUp4Z0RjQ1NzcktzSGpGSnk0cE9QM1dtQTVHdFFrRDNOTzd6VzJ5cWJ6L0ZhSExQZE9WUkJTMzViMzNkbm5OR1NLZ1YveGl4OVJpTTZnRDNWZFZyek9vNWxSVmNXMjFSVHNhQ2p1ZEhFVnhZaFZlR2s1N0g5R0lRQ3d1ZXJZMCtvYXNra081dkJJZDgvbmQzSTRuQjMvUnVEMktub25nV0MxcXRwUjJjUjJ2ZUdpUlJxZSt4eVhFcjJCU1BzVDB0Wk5zbkcvQU1Ka0JheGJxSkdhbktmbWh0aTh0dGVVZmtiUHQzUlVzTW9GTVRNekxsdVhFZFExYndheDhXTTNPd3pKcmVkL0pPNXRsM21wTDNmOXZjQi9tYjdtK0ZUcE91Vm05eDlpVTVjYkJjb240SG1aaWJTY2RROGcvU0hWbnNsL0dNeHhRMXhvdG04UEF6aWlXcWxEdDNtNG5ocis0dXBuRnRWbjBLemJhZ3ZrMEJReU1UMTJIc0RHVGl6UDJMZXI2QnRwVnlacVh3NTMyMVhqU0hjRU11SGE3NmpiRWpUR2lJT01XdUNIZUkvbmJKcE5jQWJKSEJLSEI0OHZVd1BuK2pPV2tTdVBlRDdXS3ROc0Nzcjh5eFZKUk9rUEtWYnI0VUNROXJ1VUlMWjFpSC80TzlWWlZuZkRrWUxCeW9Rc2orRk1XS2ZBakttNGdpV3p4b1dCYUZUWlRVVDJqODlmbkpQdk1xRi9VZEpkeE85alpDWE5YOHNBd0ZvRFNySzV3MzhiL3l0YU9tRVp3dlhteDVRT1MyUHVSNEdLa0IycHdnb0w2Y1BQMnhZT0c1bkJsVFE3Smx5SS9zVDBIcEVLVm0yV2FKTXB4M041ZWF4c3h2YWFpU3VBeTlUbDlEaWNIYUtndWJvcTY3TDdQRUJwZkI1Y3VaSDdhdHFrZU1aNUhHQ3NMSG1WSTQvREpQV3FMd1hTcTBTWDJHeGpvbmFKRWN4bXVraWptT1hCN29NOElFV2dUM0h2ZGs1MGFiNXBmUVhDUEpwTWYxUURWa2JSOTJvRm1LSDY3TmFLd09kWHdnSDVKcFZUdnBkdUkxZmtkTFU5amY4N2lEWnFUK1dMMUduZ3JCTmxIVk1SemJEUG9NTFFRYzlRZ0tGZmdPZFQ1NmZvNDlXNW9EdUc2S2RBTVhrRzQ3YmxXdUZienR0bnRzdHBZTy9aUnBLby8wN3lxY3F4cXZybkhRWkVaREJKYUdKdmJJV0U1UlpMZE0xeVR1YVpnWHN5MGJrSnlTMlNzcExzUUZic2JlYWNtNTdpbDdjQjEyeElKNVZ5Wm1qQVlickRMTWU5UFd4bnpKN0QvajVTc1p4Z2RXemJEaW5jamdEWlFZYk5rbGNsQVBYckEzK2pieHZWZlRXZXpibHRndmJYVkVPUVNDdElZUk0vNVlLTUlGN3VqVmdaN0Jrd29aK2tObk11REVTdXk5SkY1TUtNdmduaXFFM216dmRvRnlhUjRPclhWczdKTXRWWWZBN0JnN1FIOWpHR1FmS1JHSUFsZndrd0dKcjIwWkFLQm5jTUJCTUtGb3dhMDdxSzlVQXNhMGgyQ2xQdlBQZVVXNHNuNnZydkFOVWdoZk9XMFJPZXpoYlNwUkN6RlRSNFlUMjF1OU5vZ2JRaFdQUS83ZnBiZjhaQ3dBMHZ1SzV3K0lmTjZ4Y3JRa3k1YkxHVlRPcnVRNktkUGRLM2N1dlhiRzhDWnBUVWdjL2tqcFZ6Q2xXWndDZUF2eUxyL1NvRVBHSUFKWDduUGFnU0hOYnkzZ0JNcXVOWmRiME9WRGdGdngvUGJKMi8vbkxrbDhSUjNobTFPQjRRSlovRUNiY3BoSVRPeG9XK1lsajlXSDhmREUvYkJvQzcrOTlxdzhvU3p6ekFBY3NEUGQvd29RbVBQOVhDREozQzdIZmdNcCtiK21iK1hvNk9BUFlWb3diT3dzSUsveWJpbmhHcW9Cc1hsR25VUnBjSVNQbkRBTlFSeXpuU3F6VEhNRHNHdFdaWERkVGpBUXIyRU1GUTRPbDZnNjQydDcvK0pRWmtMUmlOTGRJVnVTVjJFNWlqeWo4b2lpMWZDWHJNV1M0WnI2ck1zV2Y4MTQzc0Q0UytJaXhFSklobVVMb1Jpd1RLcGhCa1NtUVFoY1ljN3A4a2ttNExYTGdzVWlxWmtNL1JCMVZid0U1UkhpM3NiOFZXL1ZOQVNBdkRqdFRJWktRbVFaTXVJL2hNUXp2enppSjhnWEdrZ2xhWkJJeHNRS1VubUh2c0ovYk1kb1A1YXQvcHVDd3M3NjNwKy9YOHE4UDd5MlBocHFOellHT0lWU2pTemJlY3VuT1h2WFowMmpJbWw1R2tsYTBYQUJpMVlncitSZVhPWTJxY3BvOGxMSURWbEpianhKVmp6OXVydTZjREtrRk9FK2s2VEF0Q08zaEVVek9NM0ZscEJ0bE1zaFlxMitnUVVyeHZSbHpqK0Vyb1N4NDRNaUppWG5uckhzM2xSemVaaExnZlpBRWtFSTBKc2ZBc093dFprSEdPM0tUaWhyQm5PQTNnL2RIVGZnVWUvTWZrUkVqVW5iUkNUQ1V4UzdEL1NJcTR4QVBvN2lDT0s2QzdFUndnbjV1K240K0syWTRrdGZXRHdEUk9XZnZoTE5kTUZ1UzRTcjhIMzczZElpUE80T3k4bW9WS09POFEvaVA2cGh5dkJocSt5Z2p1ZnRReE5vYXh2clVpbW5UeDh0aVRCdmVtVS9qVFcvOVhRM28wbzhRSis2TVo5c3E2L2FxRExaOXZTNy9RTCtvMG94aWsyS1loK3dwSk9FMTQ1Z2dXbWZGSjYwS0pWVkUwQUh2REpJeHR5RmRJMmdoYUJNcnBHVVgvWEttQXZiZUw3TnNyWmxwejU0bUpWNmswR2pDZGVZRkJIQ2ZRSUpid1ZLa1U2L2VLSW9RWVJoajBwWHJzcm1qdTBlM0FUVWNPZmFKenJDS2FYTHE2WkVpR2ZOcm1CdVZISGgrQzZvYTBXQ1dJa3loclV2aEpKNXJYakN6VDJhV0tRVDZoc2V1aWV2U1pKSUtuUWVwMXlWNWlIZEVpK1N3NmdJQ2RtQVFWZG44VmRuMGNGOFBIMUp5R3AzTGNmTzZBVlN1cWl6b2lhdzhUaXplenZIUUZkN0JtT1U3dG1ETHVYRkZGVjFFa1NiYUZMOEFaMFlNVFJYaCswaEZLU2JSK0NRbmwweU5FQU1lSGpoL2ZIcWhwdGdVREREOWxmT0hqNW1DQ0ZSSWNqWFd6VHpML1ozL082cUx4MEYrTi91TmRNSjI2TFdZK0t0emxpRFVkb2N0ZnpNVG92cVpWVTAxalMyeWNTYzFmZXlrQUd6Z0tybnYrSDN3eU9JMmxGNVZOSVdIcjFtNk1SbjQrOGNJekRZSFA0WXNOWUhMZ3pqZE1rNk9sckZHT1FsTHdFNTVOdVpYanl5ZkhEOTQ5SjlYVTdJUDRqS3RHeTNPVHZ4TWF5eWNUZ2YwSnNEVDRWUUtQWjZwMVV6c3FUYmNuZkFjV3d0NERXRmZTSWNoOWlGcCtreGxERis5UUtFY3J5YXRjZlg3M3JpUUU5NHNuY0MzUGk1M3R1b3p3OWtqbDVPT1h0SHRQa09xRW1XRWdWQ0R4R1o1c2lPQlFhWWNxS3c5N0toV2FBZGYxVVRzL0YySXVKUUJXNndNYUs5SHFMRXRoSnduUHg3dEZjaW5KRkJyTnlnMFIrbzBscVRZSEttSERPQkhPZG9rc2Fnd2lPblRuTFA5QmZNTzJOOC85Q2puMEtRL1d4Y0E0YTB0QzNuR1F4VmgzQWcweTlpT1lZVUpVMzB4YkUxaFBJT0hiRUE5NStMenhwbDZjS0ZBTldmNUtPbmdERTJGWmFhbHNkM0VFeHF1Z2tQbHZCV2JpdTFPcE9VTm1lQnBDRFluRnZEUDVJNlBTV3A3cnlYM29SUFdvS2NudXoyQzdUcGhadUNrcVk0VXB2alRpdzV4NnAwY2F5SkJKL1hCYVBCWng2ZFZGaThtUzAycUlzQjkvRzVWTnE1c3lkNldjOUZ4WUdvbnlvTk9VRTJLeHgzaGQ3QVV1Wm5hY0JDRDY5amM5aEVSSWs1b2lPWE9LMklXdHR5Z3lhT1UwRzFoTEQ3YzdieVdRdUFGMkVESWJDU3dPRTY0VzMyL0FLQjNVRU1DLzFQS1c1YU9rOTk4b1QrRUxjbGE4Z1dhTC95anBxb29FejVuZUU1R251emF1d2NOcjFkTmhOYzRnNkRCVXlXbHVFTGYvTHpVeVRKVFppZHA0dUdnUnNVc3N4QWxIc3NEVUZPUmgyMzgwSnBkL2FZWVlQNEEzSzBrTHBIU3lwOTQ5cGN1RU85QUVXejdna2ZHVUxqc1g5Yzg1QlhsRVdTaEJONHczNU1WWlZhYUlFNWFSTWlPZ3YzSk85QnJ6c3NPeFJSRC9QYzJmVzlieThVaXhmQ0JmMk16Z3dEdHp2YUhTR0hxM3NFVkl6UWRSclVKMXFaeTM2U2luQTlKb25IS2VEaDlZYlNYNkdxMzM1RjBCYXpNbUJnb3FIZ3dQakkzbisyR1pIVVpORkdjUmVSTk9BazVTdk1sZjVlQmVWNTR0SERWSkI3RGRwbXBMNXgrUmRDQzZWQ3Vla1lValU4VDJKOWsybnJVRlAzYVRLNkZYRXgvQTRscURyYVFlM1BkSG9YL25kanVvdit0ODQzUDl5Wmo2Vy81VUdGZURvTHgzQ0pvdWhUeUtLQWhhZHhLME1uUDVSazFIRVJkK2hPa0JNOFBpVmJZWXBnd1JwSUZRTC9SamYvbC9NVlhzT08zeW1HVm5BN3N2S2xMYUx3VEJSZTB4MWtyczhZNklEYU1UOUNmY2pyN3U3NUdsbmtld05Od2NlVzZ3Z3poU3Q1MVJZK09rYUtjbmhQWVJLeGVlOStqMk9oRjBKUHFKUUlzQ2ZoYUYxR0lmRWpQbDlBMHIvWHNnanBDYkl2eFg0OHRaTEEyZStMVTB1bEcxQWlQT0UvYll6MmJDeStZcGdxUmdKejNGd3hob0FaNWlvazd6UWVFYjZUWlFlM2lGNis4QlF6ZGZqQzlPbEZyR2w3ZDB1VEhKQ1ZxbGFhVk5Ea0doZGg1RGowTHc3d2xBOGw5bks5R1AyT0Q1UGMxbWRVQkh3MmFYd1UvekdSVmdnNDJnbHRsOHBvOXcxWGV5WXlhSGFSemhqMisvMndOL1R4bDF2TWtjMFRWdUt5YnZ3ejlYZW0xMCtDRTBLUVBERUh4c0pqZ00xdml2QUV5Y1R5Yy9TLzhOTG5VTzdVcHd0QW0xaVY3Wm5TMWw5Unl3RUV3cVU1dFB2Um5YNjJMVzBRUnBKR09Bb3g1bTRFRkV6N21Id1ZtaEgyZXZVb2VOc2hzV2ttNW52a01kSGVZekxyRjR4N3paVDdid1ZTck9QdXYweWcrdW0yWVQxWXBJa1BTVGhWd0NhaFEyYmxTVnNLZXR2NlQrVlVJSXlFcmZBSStlcDdIN0xaNkl6TlNaZ3hoVUZiOVZldGtxRlRySENnYlZuTzJhTUIrdkdsL1JsNzM5djl3TVlNNTVkcm84RSt1YUtKR1RRRkdzOEtTMUhIZHVXaE1tcEU4cVBwc29KMlQzWjkvVzdVTmd1eWQzclVyVEJPaW1ISnd5Vms1MVozR1NudkFtd3Nra040Q3hlZHQ4SFNNZUt0cmh0L08zYnRPOGhlMksvNFFlZ0JlcndOR01wZGpFb1NlV0lYQnZQZVBKS0lqUUQxQXZuRUFuUStaMGFMQVhSd1pJeVBxbE9kK3BlL2dnNExjRWVMcGNKNjhTR0NTYTlqbFhjdzFOaXg1TXdTT01Md0tEUzhaczIxVmJzbWpMNEJ5czZoVFZkK2c2UDFNcHBTV3hhUUw1SnBsZzlOSVI3YmhLVmtWdUtzTVhJekcwVDhkUEJMYVBvRG13ZjB5cDgvR0FBWEdCWTJncHMyQnB0STJtSVFuRTdpK1F2aU1wbXNzQXFtWmtDR0Rmd0dKVnAyZWEwRnJJaFFBUFVRM3Z0eEQ2Z0ltZXpJY2VjbERVdkc4QitFWmtrN0ExVDluNjBpZWhDN2VFMEltby8zaU02cldtMUJlekJGZlh6d2RyUlBrNlFlb1BucjZGMlNyZDI5N00vcy9pYzRNSDJGVHM4eGF3L0w1cFFkaExiNlNHUFE0cVpLbGpsOWZKOW1ETTlsQXNBMHZRMElIT0RZY0t1SXM0dndycXZiUlhyaWZ1OUhJdUUrR1gyeXlqOVVQSmhValVhOE9ORTJNNmxyamtGcjNBSDdVWng1b2NPSEpVdGVCaWh2a1VPZHREbEdMbDdscVMxRVlPdlZBeC9GWjA3RDI2bkJaY1l6aVZ3RWlqb1FSdHJqNVVOSm1CZVVGZXVHdmltMnFLSklYWllReXJUMzB2ZnNwQStHdTRPa1huRmlCYUMwTnVqK3lteit4Y0U4VDBLYmQ0dGlGcnh2ZmhMdEIxSHI5bDAzTHJIUUxvazdCRFlGQ3hRQnRPUm5UeUFqZGQzT2w2ZXo5YVhtc3FDaGdGeFJuWHBkQWZDV3hRVzM2bmdkWHBjTnM2azMrWGRwOGE3d25Ydi9tcFNrL29kaUN2WEtiUUFFYndNQllUd3Y1b3Y2N2I0UWY0b25vMnRKeDkyRVUwaDlPcnR6YjRQZCt2L2o5R05WSklsL2RUSm13OWRUeUJXdzdOdGRuYzQ3VXhMbVVpbWpCb21jQWp1Y1ZhYjdQRWtzN0JFUktBZ3lmMm1XL2h0endNKzlIN1Bsc1FTZW5QQkYzUW5PV3FRQmZLSWFibEJxN085d040MFREQjJmRytFMnlISDgyMWI0bnIvVEdWSC94aFpSWmErNHYxMGV4dktvYnZieXlnc1FPbmRhSWI4NTUwRXRLdVZiQi9pRFhKcFBLZlc1WmRJb0ZYa3paZDdYZGdnNmRadHpDazgwTitJMHNUQUl0TXo0Y09PQkFNYkF2bDFWaXo4RHBXOCsvNDFHUnFKeXR2L1BXRVg4bEtkZUVFVjhLNTJTZ21ZTDBzenc5L0R0OFpFQ1pXdExmaVhiQzROb0FldFdad2xUQ2IraHVHVml0VlN3LzcyTTdPNnRrdVlGOUtldnFjNHdxRk1UR0pheDhKRWhIUFd6RlNXb2kxQ1JYSEw1WFhRa3U1QkxXT1pralkzZGowbHV1amFiZlo3enJDNW1LUUlraHJEMW9yWmo2M3J6ZUJwK0ovT29vdXZUM25SMVd1T2hucEh6MFg3ZWJLbHNvb2NGalprUWZqRWRzanRQbk1NTkdrYXpzbGFqSEZFSmc1YmM5WXg4dTVlMXhUWEF3M1ZLWU5MWG9MZldSSUVxeThjUEdOallYTkFxS2xCTWhmMTBtVWtJb1dsVXJMWmh1SU8yN3FJYXBMUVN5eWxwOTFPUEtpOW9IckhOQm5BemN1bTdzZ3lsZmN1RlZrVU5kN2g0V2N1STVhVkdBRlVFS3ZSSU12cUdTNlpadlJkQTMwa3pCRjM1bThHKzdWNWhBRjlrN3ZKb2hDTE1FVXVSSXBiaFN6SHU4V0FWNlQ4M3M3S2pBTWVtZUh1am1CZUtLWXZzcGxDdC9JUTQyZzlQbjFZUGROaTNQVFNYTGRRZXFSdU5UVVFwUHhXcjN0YnhZMW91NGNUZzltV0FHNHp0Wkp1YlR5dVZ3a01FTm8vd1FVUmZ6QWdaS3lrMHJyeEhEZjQrK0lLVGRDMDJMN0dmWkYyYUJ5Vkd4Tm5MczZoODNhdFMrRjJUZHJzd0lBZkRkeGZEQTFBWWtubGF5M0tEOWhhZ3RMTFg3d2tuZnFSR1NSbm42cTZVNWhrV2FXK0U5ME5vQVJ6NUtzMEJvM1FVaFc2MjVpVzBOQ2NmVUtIcWI3TFVSSnRYZlRRTUtheG1mK0VDWDZBdDM2NnREYTJHR3NCUy9nc1BuVkE4RkVSeExQQTN6aXI3R3NkcVRkUXVudzhncUZhdWhoUWhRa2RpVmd2MUNGN25QQnVFSTQySWRpa2tFSFNvU28rRENoODNJZXhOMVlyZGhXQWVBTWNZWFZyRlJmRjBLSHh1ZzQ2RFU4Vno5Wmw5K3dOc0dVenkxbk9XcHhUUmZTTlF3ZXRKY3AwV1FUbTR5WXpjVkdZbTZLdGhtYVMxNWQ2Ym9LcWQ3WEs3WGt1YVFsOVQzbHg4Y3pMMWFQRG9RSnlkVXhNRDRNSGhsb1YxWm5UT21WMW5zZTE0WFZiayt3Mnl1VUZxeldmZndNeXFwbTJOVm1BV0ZMakRHN3AvdU5lakQ5L1k4SEZIdW1nN0dEUUg5NUZYTzB5amFSTGlvVlBDNEViYTNHR0dqOGl4b3dmWGg5RWhxS1cvZWgrb0s0UWJWblhjYU5JdHRZZWZWRlZnVFJTV3Evend4YjQ3VlpWdXc2cDVoSHBqMUJSMlIyYnk5U3pyaVBWeXZjbytqNUdmOEc3bjNibGhXN3FjM0l0Si9Dc1dHTkpqbHdlZ0ZLbWlwdVh2bTBDYjVmYW9qYUVUUXBqcVkxTlpGVnJ0Nm4xVnFuOTJ4ZlppTVlmeWNSYWVPbk55c0FxRTI2L1NYcHhaY2FTRDlhdVVYcExBNS9MRXlzanFzSXZZSlRjV2FLbHFGSyswd0RQVjJabnJid2VwZGhRMWdCTVI1dGI4NXA1OXE0OVNYRXIzTWxvMzVWU3lBendKYkhlMEJvU3RRTUIyRW1jZnRUUTE3N1ZoK3Y0Tk1Qd0taVWU0N3JTSlNTTFhPdGwwTnd0azN1dTVGdGM1UWNxRkZTdWFIRUNLOFRWb2JlWHRiK04rcWpMM1dib3BKRDAzZHhZeWo0RVNtcVVlS3dKVXN6KzVrQ3p5RHNBM3lFYkpLdTg2bW5DZ0JYbFFrQ2o2M1RHMEdkVjgzSS9aL3lZS3VERUlabXVZQ2dkM01tMkh4WmFMYmNmRmg3YlNNZzZ3alJzWG1qYnVJdmlMWWdsVGhJQm85SjAwQkhrUlZ5M1Jmb25YUWYzSjFWbWc4Y3NWaUljdWdrbUtuUFVLMVhZN1hyUkpHYVByRGxwY2hDaTFxTGpZUERlMmtTb2VQOUcvTkFLT2ZpamtVUjRPUC9iTjFmVUx6a3QzdEFleHE1YVBpbitPSG1HcjJJMFpUQ1Q0TnNJcXVmTFl0TTZuWTZQNnpRTWVDYm1INDRnVzNaazBnYm5MbXpqY3k2WlUzZmswaUlXRTJnNnV6UHNhbEtUdHp5QzZtK2tNVHJQZHpqV0ovUTJibkdSQ1pVaVA3WmdVMU5rUStpU0phYitkRG9FWVFieFFwL1pzU0ltM3YwbHhLWTg2MytpNzV2Y0dDZ0lqRUJxSGNvRFF6UGd1bzhMTWNHVEUzY2YzZDRvaXF1dzI2S1lpc1VmV3hOZFY2dDEwdFNMcXdteFgrMXJXK1U3azExdkhrbFBJNE5jTWgrSkxXNGFZdUp3QWhIMXYxMmtkSVU3c1hERm5mTEZJMVU2dTlGYjNMaG43VHY0Mm1Mc0t1V3BXRXQwd3hCeW1qek9WSlZXUmx1OWtHZzlxWjkydGNLbWluTFkvUTJiTUVOR0tTTDhCbEk2bHBDV2x3QzBPS3h2VFE2eTVpdHlIL21iZXg5Yk5Bb29KMkJvaURnQzF3WllaQ2NleTNPYytiYVViR1Y3eTdIRU9NTFQwNitReDVWVFIwNUhXSkZpRm5DSTlEQ3U4MGtTL243UW1RbVhNNTBVZDJhVy9uVUdjU2svd295OWNvU2lEQzhDSUxIVGQ3NWNudGcxbjduTXM2UW12WjVvUEszYlpPbEVkd1RqQWZaRE1aWDMvZjFMR0kzR1dEMmhoNVQzZXJicEhoc2FBbzErWUlsUjQyR3lGb2NVZWV1TURjWk9lVkRMNW4vWTZTb2xDcFo1N2lMUHV3U1liQm1pWWcwcVJCOXVUREU0SG0rYUVxc3NBVGlBZExqaFdaYVpPa09pdHpDbmJvMUg5SVhhMlYyR2UyZ1NNMmpicExsWkVEK0JFaHg0MGVEQzZ4RUJ0YWtSRzcwM3gyNGxxVEozc1g3dVFtd0NLTDhVNGNlaFJ0ckRoYlduTkFXTzE0a2lsRlg4TVkxV1Jzdk1ENWtXU2ZidlZMak1YOXFKelUyelZVMnFHNk9xMGdKeG1PeEFlZ3E2YVZjdHhrUWp4MVd2RnFFOGdoWk9iZmZ4MVFtMTMrRmMrYWdFaFoxQ0hpbytRbmozbnZ6MzBXUUhmSHhzaVVNUlBNWC91N3owM014WlNLcnZCVGxJZ1M0OFJpdkJqR1Y2TnlaUVd3Qmt3aVhRV3dTYU9vOFV3U1BTSDkybDloeFJSZEJ0bnNZSWRLc2lXOVVsakZxZ1IrVjN6elZiTnIyR1JFbWkzWlBmT1FtbWFla1o5ejhLS2EwM0dXbjdZQzJ4Q3N3TWhybmtvMmJUUnBMMlA2U2h1TFhQU2poMDduNzBXbDJscXF6RWN2YmpwNGQxSUN1b2xnS2I1SWs1eEF0TmJRbFFJSVlxbm9FMnR5MmIraHhNRnB1RGN6RFhkZG9uamxaKzJjTkhhS1F4cGJOT094WjhaZC9BRjVlOTMvdDZFdzNMd0hWd1ljWGJzS2NmdlVMUUtidmYxOEVlWG55SlA1eEcwNHA4UzNiSkdSQ0tNRUNmeXIvU3c3WnhWUkVSMFRPSkRuTGkyWTVzTysvTHRBL0VlMk5nMkFLazgrUHVDWmxyZkFJbmgzVkI4ZjBaR2UxVVBrbWZHY2NsbmE5M2hqazhUWDZ3R21idTI0YTRFb2FsaHdiYUNDZEdHQWhGaGF2eHBsb0sxeG9sMWdKbDdpbktURzByeHF1dzVFbU1nTFZIdGpmRzFaZXRuOXJUc1R4Z2tzZXYrb1U2OXF3dEJ6RUVNd2EybVZsZmtOOExQOGx6clowMWl3Zks5OUxVb0JQazJQcFZqdGhmMGF4ZVVML2JSY1lReGdhOGZqaVRBZVJEcU9HK1NMUlFaNVJ5MXZRaEFKTGNBUncyei9DYXdJdjljQjI0SitUSWRDWVZMVE96WTYvb3RzOHFQN24xRlJyY2dPOFlnUjRQUkd3Mm5SQWZCaWhxTUt1Q29aN0tWcE05VnRMRVBubnVaK3dvREdTd1dZdG82Rnowc3JqVTc0WTRRN2MvUU9xdkpNWElybGd3TXN3UGFuNVlmc0pzakRNVnhvWm85UlI3SDJqRmF6RjVHeXdqVDJ5NHMwSnRObEFyZGJZTXFZZ1VLcHpPT0dBZ0lDQTV2cGtBT0RranhQWkV2WGlZUXZqREhxTDVqRVEraTBicTh6KzRRQjk5YnZDTFFUUmpuTjNJQ0gvYW9CVld1ZVpZSU5vZ3F1MGc2UmxjcUJTR0tleWJ5OVN2Ny94cUhIcEc4c2NlRjdrcEI0dlJKdzY4b3N0Um15aVZiL0NscExPYm1OVUVMd3htdUpQRlEraXh5eTFqelFtNmxnQWFBUWxwdkNZeG13RmxsVUIxU2t3a2FLRmZybWg5TUJ2cVFwd3FoYWdwb3pwZitWMlhvSGR5WnU0WjU5bjI5cEFKSHRDWEdZV1RLQjNDRDgrMkEvY1NKbmdMeDRRYUI1NklHVHVzakhiQ0pvSkMwNW1STXB6eEZ3OTJZSitBMkplMEV1ZlFwSmhOYjZVQmNNTUhwYXZiTHFackVNZHhkVURaWjVuSEJQTUVoSGdXSTFXWHVXeENGRGxHc0pHMEVSYkFBb1l2T2hFNk8vUEZZbnBRQVlPd1kwMWNwUk83RC81RVdpbEIyNlJrK3hrSWZraGM3V3V0OGM1dWdvV0lkWXZDaUJ6czhndmJLT3RWbURYVDc1Qkw1MnAxSVd4bzNDTVFnZFhwQkpmSDFybVhOUEJNVEg2bjRNcEhXeVNMc2J0ZXZLMTdxQUxpQTg0ZjZmSGM0UEhNVDYydzVBVzFadGNlcXlGRlpNSVhyMGRwdkJGRlp2ZDU1amN1alBoeXlSWEFlTDQ5bkMrNkNpcTNMZFJtOGRLeHhnSmVhTzZCbWNQZDdjQ1dTbzlBSkpYejBnazE4SkpwMEd0R0FWNGJXQmRKNnoxdVRITVVua3U1Uy9CU2tIVmZUeGZlc3RoN3VsL1Jwa28wNENobktPNnNySU12MlFqcHFUM0ZVZERTYVVkZE5wM1NCRnQveFJIeGZPdmlMczBRSCtkUFJ3UWxST09lRDFmNjFjT3E3OXIzWE1KeS9JK1JDNjBIZmVlajA3a1dIb1lxZHN0N0Q2Sk4wT2MvcDRsWVYwT3NsOTB5T25OblpjWGFjR3p4djluNjl6RXN3VjV1SFFJQXUxdlFvMUN5TnVXaUF0SkJTZmxaV2crcTlMNTZzeHpEbHlkdURaNkdsaVZVVC9FMk9IU3Fld0FwNldQajZyVTlYQnUxQjhMUWlja1Q3T2ZEMWhPRnA0Mm4wcGVjcG0vczZXTGlZV0ZQamxSWjl1ZDFNUVE1QnU4RlF4QnpocTF5ZW1rN0hQeTFKT2ZhODJabm96NVpsWDJrSTVvYk9hZk5KdzBpVUoxQXNnZWMwVHlEbkNvQ2t0Smk2YktkQjBMSWhyRWhCaGc0Lzl0SmxMcXNsWEt5KzFnVXVabUFnaDFxZ3loVkJycWkvQWYzaVBNeFlXeURPRTdqckV1b3BHNVBPR1QvcFNvdGxCZjh1dlczRlF4V3E5eVVEWG5PWUZjMzhjRTFqS0xsU1Ryc205TlJiUWtQQUNNd3RCbzhKc3pOOGJDVDc1bjBadytPbmpOMnJ4MHRwWkpNYitjT1JhQXdvM0NVTWtqWGxuOW9SaFFFYzZwL3duU05wc3Y5cktpbHNBVzkxYjVjZnplZ2tvL3NVMVpzSnZmQ21QbnBqWDVBY0I1dG9kNC9RUFNvdmMvcVBublZyU1k1Ukc2ZTIvTEVUZEx6cWVOR3FNMjJPZDdYclJRU1BCRm1CNWZGdHoralJ0ZDVEd2RXY0pUYk9TQUc2aFBNSjVYd3A3Z0l3czd4L00zMzA4dmpGaFFFRWViM1E2c2ZWR1BTTzkyeE4xYkpPcUlVNGcyZHhIdHVsaFl4ZzRpS0VORWNpZEI4bzUvUFpPTVI0ZElUU3prb3pRemN3MHRXTG9ha3A5eDhVUGVuN1duTzZYTUltdG1CM3IxZnFhdnhTOFBpVmN0NlhlMUl3aXlCUXpRUi9DUTdJNnVjallVU2N2c3FGdUd5aHlCNWhJdGNvbHh5NU9oZy85anJzODcyNHVGU04rV3BzYUFsL0p0RGdJVXlqYWtTTWhaYXhSUVN5a3RUeHgwOXhkVjJkOW1rVUlnb0xTRnNnWVV5bnNxa2ZWMmxEL0FzSDFPdnhxQnhTbTZmamxFaVQwMFg4VjVoS2FEdHk2Z2RvWTVZSHYycE9qWUdXMm9VbThvanpuQytFYTdVMkdzRVNXbTA5OEtvbFFLUElrTHEyajlaRnRIM1BPcHhub0paQWExTndzUHYyOFAveDBmVURlVTBSQnZGOWJ4VjJLWDRjclZwaEV1dklESlhYVVBZekRqL2pUODNWWDB0YkEyZUdabGRGaEQ5ZExMWS9QV2JucmZXK2FBbzhlZVdObTJZRE1DalpxUnllYzlxV3FtQkx3UWpYeXZsVnROa1BsR3NROUtWelJDQnlIMWxrTEhxak03M3lVR3Y4bDZCSUprVG5KRW5KU3N4a1RMbTlSdVMzMDZ0OG5iakozNE5MQkJmTHltekNZUXBoYTdkeVFuZ0RRcUV1QmF6b1AxVVBsbHB3N3pUYXNzUWJGV2h2SFI0WGN3cGdlenkwVGJUYmFTVUJNOXc3K1pqV1V5Tyt6cmN2b01RWGFPdDN4MnVGd3hJTmVlRGFiYzFqbDNwQTlONm1kSHFkNUdxUVV3dTZNNUd6UGNTb29tUzBFVGV2ellaUkEyOTRTZmF5dktNbWllTTR3SE44aWJPWWZJT2lKcjlFdUFQS1Q0clFFQ1JsKy9CZ1B1OWc0QjBQUmdQeUhVNHlsUlg3aGd6eXZaOUhlbjh3d2djK3dwczlqVUFEV2tGcGg3MUdNT2tTMG1zcFdIcUxnbzk5YnhDd2pCNVdqdG4zbUxvQjhwS1pQanZyMzh6MEhCV2hVQWRsa2ppdEcycmVEd3kwTUZib0xLc0I1cHhEUGpXSkFDMFZOMkZzV1IxNnhHREJsQk03WE91aGJZOUI1aWhwU1dyNit6VWk1bFkyZjVhWEdvdVZ0eEtlWkcwejBtZGlvN0NzbFhiZ3JqOUlsV242N0Izc3c1NVptR0RGZmZWaXZKOWEveWF0WlhzL0I2MVB3ZDFFVUM2bnYxN2ZXNlNLWmkwdndJZ2UzNloxbWx0M3JXNEZKRGYxZlk0V1g4WU9BeFRrczNjZEFmK0E3dDVRLzE0MkpKazRWaEh4aWJKZUg5czVUQTVIbmUyM20zTlltWHh6NUI3RHB2eFA2QTRoV1pRQ0NqYXVuMDRxM3ZmMGYrcVJneTdRVVZURUs1NUJjaElaYUxiS2ZZWEE5azI0enNTT2tHNjc4d0EyK3p1VjF3ZE9rckJZMEdVSEt5OXdXb3JpM1NlcjJZSlo3RlFYcm9HTzl4amJjMXk4dE5zemg5ZzZGR29ieW9ObmU3SnU0QlNkbFVzNTY2MWtTakc3MHF0dG42SmcyeEpTdXJjeDBPVXhSdU1uVTBLQysvSUM2OVgvcElxaFQ3VENPQW04TUt4dDJpaUZjVThNTHlXeGJaMHBRaEJlZlpvM2JUVEJPVENhOUFpWE40L3dnM21HTWp2Z2hacVl3TERQS1djcitCRHRhZXgxTE5zR0EvWDNWbzlOdGhNdjVGMHZTYXVUVnNkVlBjM2JQWnpkZWU3YjNFZTRGcTVrUW9ET3JaNlpGT1RpRy9DSFl1UjJlMnJLYTM4YTM4K0t2eGEvcmgzamNNaHVya1JCdFk1RVl1NWVnUS93dUpWSVRrNXpGQkxsYnJJR21ZTXRmMWltV2ZxUGpmSHMyY1ptK2Z1bEJZeUV4ME5pWEtBTktvc1lKUUI3L3ZzQ1pvdVhyTHZqaHdwc0duZXVqeGw1OGowMkJnWlRpZ256U2ZqcGJHWUNiS0J6c0pnN05jaEp5bHpyMS94VEhmcmlOajJvd0NEWGlLN0dWMzVYM3YxMlhTRHNIakxWZ2g5b29hT1RNR21iajN5RFlHVk1ZT1plNWpRMU9URkovNElhK2k1R1N5RS92bXFGZEZCV3JyQU92bVdSSEQvWndyZG5PMnpFY0JYL0dFbXBMQzRiV1ZoTUUxZmZSME94WkNXM3FPQTJIK3hTb1Noc2Z5QlFqU0phREFsUVErbzRZVHBrK2dPM29Ia1RwN2VpUWRKdW8wTlFVOXh6THJwdzJ5RDJyZVdGVUtPRWhUd2RNQmpReDdpL3RLcytMU2lkTElBYXZDclF5VVI4SWdUK0gzZ29QZldZY2wycmxKQWIzYmhnRG44bnF2a25vOVZsdHpTKzZkbVJkRmxCZUF2c3BhaXpLWDg4RlhjOVkxcld6Y2ptUWJnUmZ3S2dEM0xPcHR0MEg5ejZUajlsOXZmV01jZHNaanhEQ0FXSURFTHJwRFREMjA0d0lEWXFyR0lCb1gzcTFmbXZmVU5rME96UWU4K2wyWkppOWwvZDEzNm5Qc2ZSS0JSMmoxVzlzdy93QklRYk9OcEFIR2xqZG9HVHZ6VGRUMFNjTGlYM1JzY0dOSzZ2MWpnU09EOVo2MzVmalBiVFJQN2MxMnhaVHduVktzSjVVdGwrR09WMytaMkZBYURjMWpOQ1dtenQyRkZucloyUHYwYVZTVHRvVmx5S0h2b2RUL1h6WHdmcVc4RUxXYjJTcWJpSVFJZ1Azc0VvN1hWU0JoWnNZZXd1cUxxZ3VVNEFOR1MzTnFmZFZoMzFxY3VVTmJVRTdGcGI4RnVZSkFvSjQ1TDZJL2tpWDR1OTFJK0N1VW5PWFdhK3ViY3cvVC9hZkVadGpudHBCV1gvc0xmWG9oeWpDZ1dkOXEwMzVQUFN1dGV6WGNjaGMya1cybTUraW1FU1NnbVl5ZWNUVmJEdTNCZVIxNkNjRjdNL2ZaRTNpc1ExckJkK2pEV2RQaUVML3NRdzM5Zmx0RTFQMk1KZnJhUDFxRS9yYVAyTUQvVm5SOWllVDZpKysyMHV2dnZ2N2RYUGZmZlFERzB5Q2k5MmNmMXh4cGZweHNYL0RSTU5lNlhVU2wrcS9waG9HQVh3cXgwNVhmNS9ieHMzTUlBMVlmMzRFOTIwWXYreXNySUZmblpWNGsyQndFc0tNbXFpNDBvSVdxQnljeTlLNzJyZmtDOGtlTkkrTTFnakIzdkxKc0lKN0NkUEpuem40YTVzbmtGdXExbkZoLzdhbEp1cG1HVFlSSjVWaDdBVHVFQUFsNzhNd25DMVkzQngvSk9ReHMzcVpGVGdMQkxmQXBkOUdNaVNQZElRckxzZzZBRVZJTHVlcDNQS2tGd0p6QXFmRk9oczRvdVBvQ3hwdnhGbUgvQjF1K1hiV0FpRHNNdXhLZnlIdkxGNE8xUng0aHg2dVlyTDFRbUNPSjRFNW5IVU1UNVRqUWdqSks4eFhLait1elVTV0NlaDRXY3k2YkVBYnVHRWRqbmNZNDQ4ZU5EYWE0OThEeHhGTWRlN1pzOThvb1BUa0ZJSDY2MzFUR0VPc2VHQXkyZzNIMlBkNWJvWTEzUHI5akZHS2FPUE9QQjlnWXRPaHpCV01kWm9HUk9RWE0yMVphL3N6VzNLRDVIOHZJUlE1RHlCUTFTeEFUSHlGa0FYMjZLbnovRWhiUzY3ZFVoN0tnRi94NVp0V3paVkJubnpoSURNVWZYcSs3UWhYaDZabFJrR3pRdnRaMFRFeHVNSjdGK2NlTkZOaUMvYnVXbzkzOU1LdC8wd2pGOFh5Um9RREt1TXcxemkwVy9PbHNpaktyeGY4OUFiY3dZMkdQQk5XNXNKbU52TEhpTGRUTGlnV3dRdVBxRDhWeEJOeitlT0xzTWFldUJkZ3k4VzJLbDBLRmZQUXV0S0Fob1JwUkFqMStldkRTWVBLTU0zazRvTkFmajJCcGozc1VEdVNhdmdHNjNEMDkydDl5c05zaVFxZXMzUTYzc0IzR0VzTlZUTXdpUUhMaE9ZVmZwM1dwVGo3bi9zZWg3NlpTeXNXbkRLMmxuOGN1dm13TjUvNXFOQ0U1ZDN0ZUgzNjZOdmd4NllSNHVJei9HRHIraC8ycFBZaVRSMHZBejB6K0FCSEMzRVhVTSs4dVRuZ3hEWkVsWVNUeFJrYjNNY2dPbVlnZU5wTjhSN1NvNWlDczl2dDFxRnZYaW9ZSjV3ZzRTbk5aMDNtS0NSWXRIaTZHa250K09iZE92dGRNRDVWZ28xbWtiUmNNdjhLWHBDOG56d2U0ZGJZdklYU1FaSjIrTERDc200L3VpQ011NktoODhiMzlvZ1lkdmY2V3I5Ung3MjFBTm1KTTFyZVcxOVg2M2g3ckp1d2J0cWk0dCtnRHpIUk1CQXRSN0g5V3VEaGIyUGpQNkE5QUFvd3Z4cmY4NjJiaGhzSS9Yc2wyOGRrVGU4cCsvWXNNMnZvSGh1NlJUWUFGNzYyb0lWSkI5M3E4UXUrK0NEMGw2SkRIVnp6ZDl1YkIyTG1tV1B6WWNEYUI3UnVJT3MreUdMSWZQQnV1MElZV3Fna2lhQ1U3U29hclZLeUppSmZZQjd4K053Ym1Uc25RV0FZQVZpRU5LVnFRU1M2TWxLSTlmRmUyN3pKR3grL2pEV0dIYitrVFpzWDNXSWluRmUxV0E0TlNkeTZRZWs5Q2p3UFY5ZEFDVkdWQ25wQjBtNThwY0FZK0RoNVJmOGliUHZqdkgwSEwyZExMS2hsTTFxV2greTRlUlpRSWVhbmZTVFIwbVV3bXVkcTl5NzFScTlLTWxaajVMa3NyUWgzV2FmRitpSFllcHZ6dUsrRFVxckRvb0ZXWUFvaDJVa0NxOExkWjlNdi9VNElHa0R2Y1JVcUtYVG1lYWtLYnU4SjgyOExUQUJJbmZ0aWtNeTNJSW5yOXNJQWUxWFY0ZDBPWC9BYmt3RXZRUVlFOUIyYmVvWVp4Q2lWTHR4cHU3cFN5Tk1GTVNkdDQvUm8vb2NYTTJRRm9WL1BxVjBUL0JXaFdXNFN1b1NTd3Jkcy9JbklObHlKbFJoZ1RQemk1c3ZJNGhFNnpSNlh2UjhXSEpIT0wvaHg1VTNFVXJiNC9ZZy9LUzdxLzA5QnBNQ1NvTit2WmZiWUpzZHMrVkRJVjBRajczUFlaMzAxWGVRdGN4MVdpcHdPOHo5Uk5vaGhjdU9PbCtWcTRHOHg1L2VlU1FRYWpvSkVHNmE2OG54dUdjOExWdFFLTHJGRTVZeGthZXB2S1hvWm9iaW8xRk9zM3Q5Vk1Wdy9maXZZbmdkL2toSE9hZytsSElrcEkxaS9tMGJraUZNSWN6ZWVsaXhUd05MYzlSZ3U5aDdIZFMxa1BrdWFnUWF1cnlmOFppSkhMcERMQVhqZWRNamMzWHJsMEYreHJIRW0rU09TWDR3WnZpTEEva3Avd0U5UXFXOWxTOWVhZVBDczlMdytEWklpeTdVRjM0cTAxRDQ1OFA1L1ZrZXl3anJtZmltVWNrNXNlRjJLSkFMMFlvemU1UVdkUCtiUWNjSzZCd2JzS3FwSjZpVUZBQk9DU3RQMXliOUk3cGp4TDAyeExhclFPbzQrYVFjTVJ2alNOMDFaRURiRkFHMUhrUlppK2RUbDliUUhyb2w2UlFUbk1IM2xoUEE0NzZuUnAzZjd0Umc4OFZJQ0dpWXpzeThPOUplZUJPeHhTS0VYNE43T0V4ZFlkd0JMOUNoZnRlL0J1dHVnZ3ZCR2dxV1E2SnA2UmEyYTFBbXp0QjM3bDlpYm1DWUUwa1VwSU1OT29OcVJMS3pvUkV4MlhnMUhjd1NUZUpPaUEveFMraWVCK2gySVMranphV0kzWnZqQXNYbzEzR2JRRHBpN1Yvd2ZKQ3dJL1czOGNOdEVTdWFFV2MvaUh2UHBnY055RnBUN1hmQXlhM3FOY2RHRlorZm5TWitpNk5rSWhlV2FmcHFiMnBpSi83eXBSRWxBdnBta0x2dkpEcXRQSzRLa3ZqZFR6LzF1UHIwSTN0TlBYcFVlK2V1SWZ4M2V4TFQxSklpN3Z0dzdQbHJlT1hwRk1hNkhKN2ZpbWpDeUlqcisyYkw0M0J5ZVNjTHVhY2FMbnJSWkFIc2Y4emd6bWxnWUVVRHU5bmlFdzFpUDRtWjZyWW84UGxuVVBIWUcvRTg4K3ZvbDY1TUtkR1BOMHVVREdkMWtHN2F0M3lncDV0N2Noa1Y5TVhYV1pLVDBUZ2JyL0ZJdW9HNVZVV0RHb05tWnBQd3V5eFRpeERKK3o1Q3dwNnNKS1VUeXJ1RlFUbEZVOUJBcnBaL29BcjNTd3lEWWF5bFp4citnazdDSG1BNml3RmQ4dXVNS3pIeFFrZkh0dk5RSElZZEtLVnBmU2QwcGk4cUo1eUdlbVJVVm1YdkxUZzErZHZsYjdCeE0rSDlIb0tVcmlSZUxVSXdsZ0hiVHJ2dE9yeXNXdXZIMmNsK0ZaV1drV1ZDRzhseWEweWRoMklsK2Q3eGRqcDVXMy9VVlNValV1bDhnNXMzS2NvS3dzMjd4bTBnUElEY01ERXBSM1dNUmFKR0ZRbzZDaXgxT3JJcnUzM241dzZ2ek9jdUpFUm11MHEvVWFrRzE4L2x5bXlNQXAyT0lPMHZIVWYvcVdUTEdMNy9yRGIyMW1Sd2VPNjlDc0xzTVdhNzlaMFFBeUduaU9laVJXajFlcHV0Qmg5U05sTlZwblhUb0lWWHJHc0FMQ1ZITGw1NmJmd2Y2K0xMbUlQdW41YXBLR1BPTXgxS0h2eURiYVdaSkQ4bmMwWm1UQkNzd0xCYjVwQWY0VS9pZWJucnZVekp6TjZtSnJxTk9PNTJGRUVyUGsya2hHQm0wQXYwSWhrRjZFa21Ndit2bmRFSlo4dnhKWDNBUmtKazR1MXhPWXlmOHRRb3NJa0pOWXhTZlhxM29iOWFZOXYwb3dOR0FNdHBXejBmdzl5Y0c3Yk1GL0JBV1JIWlZyWGdDY01FWFZ2TU1reVVmQW51R2NZVmE2VVlYbHdlekdsTHJSaVZwK3J2aXlhZUNHMjU0eUR6WnEveStkZThXOU9PSEh0c1Y4Y0dpNmR4Mjd3QldEUmtvRU41TFFjWnMxelBEalNQcDRCdmJKcFVvMUdSVGNUZVhYTGs0NUliV3lwMWZlL2tVRlliemhDRWNKQXNkbXJVS3JpRE9xOEJHMTkza1pQa0ZmVHBxM0dRckxzU0JwTGJVT1FEbVUrMG1lakh5MXg5K29FNC8rRWQyRXdtb3FBSkd1RE9yMGJWTERUc0IvQ3gwdW5OSFhObGRIeG5obThOa2Y0MDJCQ3ZFekU2MWpiRHpOSFR3UmViMUkyajRJMUFrcTA4ZGNEN0xyY2d2NEIva09udmxJWWNWcHUzMU1jb2dwRmNqMnBXUjB4SlI3MzM4cnZKQ0lvdVZIUHNta0U5ZWxxbFlRdytKRng1THZMMEN5UU5KZFA3bmV5N3g1cERqVXp3dmtWVFFNZCtIM1Zub1V0Q0s0Yk0zZXlSdmw5bUNxNUxZUGV0QUNBcWhqNUxyQlNtNzQvZmtoUmx1NkFneDJJOEFBTldpSXBkY3dsT2hiOXRkeTlYSldBM1pUVDNOSkowcXBGVVZwVEx0K00zTE9GaUlha1loWks2bnlUVWhyM1pJajA0ME9ickptNWo0UzRCRFlRbmpxWFBxbEc1bGFyeE10WVAyWXVaQmRoQmhlWWRsNk1WS01WeXlZd3FNK0h5VGQxVjlscjFGTjVVWklzWWI3djJXenFRQXR4L2tYUTlzUzgzQmZYRHdkMWQyM29XWmRud3A1YmlKZGt6a25GNXNUOUhtQkh3WlRjR1F4d1N0aURxOGEycExkOGRHeUkvTEMrTDBSMnB5WEV1THRDZURxc3gyejRJZXhjYzVpOGJYRWo5OGdWMnFxVXVWWmRuZWtmK1M0dXV1eEFoMHNORy9QWUJMeGZZMmRUcHg1VldJWjVuTkZOTitvWHppSFBzWmJ2d05ndnJySWxCZWtHQmpjWWF6VEh5U0k4VVNudE5RZm1tbm9jWTRPdjh6QmQvSkQrcDk3NENHQWRmSnFzaHlSZ2RkMWh3WlhIaFp3RWdNK1NhK3BJcExDdEg0bkhuOTJLbW1CakhTclgwRjdOdmRvTVRxdmZGZ1FxeFNyVDBzWTVHWEFrNm1YaGZIUnZFdTlMblNzeWt5RlFadmpyVFVBdGVTSzFnYXNLVS9ZNmozeTRrWDFVS2ZoSzdDcTN6MW8ySUREcnVLYnZmUFl6WWVBN3JKQmZwTGVvOVdFNG4vNFV5MGdUR2F4UXAxSjZiWG9vS0Iwc1lqdWRCRWJlNWlqNkFERG9lcm9pNkxkZ29TRyt5OG5mQUJuYnR6ZzBRZnhSa2x0YXhSNDlOK0ROeW9ndjQ0YTZEMmNRZGhLbElRUUZhcEtENml4THRYb2ZGZmw1M2tFZjgrNW5VOU04R1ErQWlqS0dpN0NYY1BhTG1GbENuMlB4MVFOUTE1a29LUm9CL0E1Q3lyM3VJMFdQQWUwQ1dwaTRVQXBkZGJCbDVaTUtzUk5HVFAxQXY4SjZkOXpnRkQySjk4eFJpUHFJWk1IakpqZVMzTEpsMFlGNTRXSE9PYStUeitqTEwxTHRaRmR2c2MrRDZSaS80S3F4VklHQUI2TWJZRFRVbGpnU2J1d2pxVHFBN3Q5ZUhDbzROTlgzVWdBNkYzN1JobjdOSHZ6VjBMZzhXbGZ6bHFlc0ZvekpMd0ZRWVF5eUY0SjNuWndON2t2S1dEVGYvcndWSmJlWFpJNCt4MUErZWRKRUJQZTVHTldsbFZOb2dZL2lDMzJhQU1malI2S2gxQytFSlQzZWJRajZpdGYvQVpvR3NrZk5SdlZLTGQrZk5uYjRYb2FzNzhRbTRGTktKUWtPNi95UDc5Z3FDRjVoaEV3OSs4eE5idUdWbmNrSlNpbWJNdGZiaWNTWUJVRkdudytNQmNWazFvbTdLc2dEaDZLT01LT1hFNSt0OHNYLzNPMEZnbEcxbXBjOHIrQjdsUS9Nemg1Uisrc1prSXRGNmtqUFQrZHdtczhjU2hkV2xGeU5rRWlzZUdScmlIbEM4ekRsekNIblNEZm1Gbk5MaWVnR2t1anVTWm9iN0pvWTd4K3F3Yi9hUkRnZVNEQVcxWVpveFcxTEUvZWoyTm9ReG1UNXpUSElGY1ZyeVlHOW05azR5QXh4NUsvYlgyS3Jzak01V3BZdjBCSTI0RnJsWVprR2xUbHpYYU5QVTlmY3ZrOWNFTVRSWEptSCs1THRMaFk4UUllNmFGY3NvalZGZ25DdEdJRk5rNEZkVzFzd1VieE5vUUlWQ3cxU056OTUydysyVk1qb3kwRzVJUHF2TmlSNHlQL2Y0Q1JkYkt3OEtISDRManJBejlZT0tpVDloa3BFR2xRUXVmM2o3SjcyS2VSYTQrZ1c3T1RKTEJIQnhwSVZGWkYyK0lCZUhjKzNwWlA5VHBmYUY4QzVheHpDNVVaLzFlR2xDZTMrTTdrc01hdVFiekNvRUtDcXNpKzFnSjhoMng1VHAzNFVVV1hNdGVEbnJtTHVJaVVnV2xjZmZVUVA5K3E0c04reGxZajZicE1RcXE4Q1hoYzVZU2twdDIyTm02Y1UxbldsaEFPS0JraTVOTm9sN1JZNkNTVXRuV281UjRjNlpLU0NPbXVqZkVIemxWUytTVXFwWkVDK1FiNGoybUVwaTJ0V0ZDSXZnaWtmaDM1eXNmNlRYYjZDNlZqR2oxTExVZDdyRW5MYjZES2ZsM2NEbjJXalRHNGpDVWdDQnJMR1BKWEJjWTUrMGl5SHE3YUJ6TFVUODdEbXFuMFgyQW1Nak9Nby83cksvekhrNWRieUhZZ2EwRXNlRUl0WWdXa053Q09JOUIzZi9VcmFBVDFDVXhwMjBQNmk0TmNCQUNLcFdPUGNOeGVXOUNDc1BvZU1UTWxhS1IxTEJ0YzltZW04bUpNL3N4OEVrU3YrdGdFUDlkcy9ta2VIdTAzQzlKKzJyNmlySGhrV0JBaHQ2WmF5SU1GVXV6MDgraTVWRENZeVZoTVNVcGp4SFZZQUo2YUFGTVpjWU93eU14djNNZy9hVS9TbXo0cWx3S3A1YWxndmJDTkJqYmxDS0tuY0JLL1BDUHNlTDVsbjVFb3R5SnFZbUJHakR4cEp5TStGbE92M0RiWDJyY2NIeG9PZVhRVlZQTWJIb2E3SXB4M1ZpcW1nWUhMT2lFZ2h1UW13bjZ3bHA2bVU2bWRWdjE2cTRDYTB5R1dIL0pGTFhWSzJRWW0yNThzdUppRk9LWHIzVDI1eVU4dVpNSjVtbWh1QkN3MExjUFZBM1p4ODB4Vmc5OHJXeFlQT1dLRWlXL0NWY2dHbVB0VEExeTAxeGszcGxNTU9HOXdWT2xJNm1LempDYVFDVGxaMjFlWnZmUlpCcVVFNGRFb1JuRmxEaFZiWjNjZmdybE5MV0VVSVFFUjg0Szl2YlpqM2NPWi95L01YSXRnTVpIV0R0NjVYSmhFb29PNTFQeUt6WmEvaEIrSlJ1NFNEM3FlbDVZdEg4QXp3RVNDaW9nUFlQbXRDVU9naWs3VWNWVmd2YXd0cStaTW00M2hXS3F6KzRRUExQOHFVVG1oZjJRNmtmODA0c0VoZ1BXakdOc2lBMzFaY1hKNEhPT29tTC9hRmNZMnJYeFY0WDJHMWxNL1RNYmJwSGNNTTF3QkxpVzNhOG5rOWh1bFRDYW1KS3JzeXVTRzE3MWRNT3JNK2JPRlRZd1FDY2hsdFBRR3E4ZjUwOEtwanE2R3JRdENrbjg5QldHOHBtZlBBRW1xQkZtRTVkM2U4b3BJSGo5OXBYamFxdlNKd1QyT3d4ZHR2MG1FdmFSYlkwUGcvdEk1Q3lRL0xQSTE1SmUyczVkNHpYYi9kNkpXT2VCVVJ0V2tBck1FVDBWLzdhR3lnaWVBbkx5WUora2l1aVZVUzhxNFdHS1lGRWRzL2N0TkdTZDdKS3lRL1FZd0ZGQ01sejlYL05OdWs0WnRYSUpsR29RWVQwc0ZWQTRNTy9odjhwV1pQb0I5MG5LVnRQS0plMGxUd0ZVVWE2RzY3WkRMU3NNeGJMa1NMQkl4dEk0ZExKZVZPbVVGdEU1MjZGWG4zU0c5ejNmNkN4ZEFUU1NITGRiY1lkaE85SGhoMXU1alo5QkJwYlZlMFQ4ZzBDNzNnaWxacHU0YkkvMk1waU9wSzMraUdWckZIRnYxVm1xaDJoZlBTTGpyQWhaZ2dMR3lDWUtJTXdKejNkWUNQWWpDZVJIaW84Mll3UmZtNUZuT3IzTUdJWjlwUmwvekl1dHNuZEZ0YWs0bkNQdHlFbXNjaFdLQy9sbDFGbjBaRWxhb3dWcVJBQi9WMXJYUkM4Tk9kU0UrTGlnSWJSSnI0L0xZU21ET01hYmtOY0EwZGVCbjBJY0Q0aEN6UzZ3bGtFbm9tSnNBSk9pZjZhUUh4RDJRaXNBbGEvNDB5UFlDVHNkRVV0SEtWTG8vSW9lcUVtWHVBSldpMmU2U2Nlb1c5SHlGV3g3c1RYYWk4WW9yNU84QTVzcGgwWGxtZml3K0dpeFErV28ydkJiZWVNSlpsYVVpOVRzSHdESEx1YmpaL0FOcS9yTE9aMlhVSnpQTkEwZjkwb0R2TVBqaEFRNGxvZGpMNW5VR0FHZ3QyUmlWTkp0VVZQSVFJT0FWNG1sd0M1V0lxeWZMYUFQOWR4b3krVUM1bEhMbHlUKy9SRW54WXlBYm5aa1hwazh2dkQ5UUQrRkZiRDQ2TFZpdE1xb2pRVmFTYUp1SDNKVitEb3BQeWZGVWRBMXZXblIydGdhY0VGRjNMaVZHL1hWeHU3Y3hLaXcvTFFJRHlJSWNkeWdhS01MYUNpdXVUYkFJclNLSE9kYzZXZ1piSTNOaVJPRnJucjUydDdTcElsSEFvcHBmSVQyREl2RHZKVUpHeTZWRTIyWHlSVzlVSGVwRUk3b1dpeWs5N2FBMytlMkdFT2svUVRxRUxsNUZyRndBbHVqeWZMbVNGeU9BZHpNTlM5MC85NWh3VFJ6RWgxbHhUL3h4ZUpQb3c5WkI1MGo0QjN6aUhzSmlJRGFvVThLZjQ0YlRTc0p2bGdyS1FaQnJIMlB3MHNWNkV2UHdWR3JCZzMzTmZKZ2h1aWplSGo4VVZuMEFnZjJQVEpsMDczbW5TNGtXYjVDKy9zQ2Rxd0V6dFZYaDVIbHFkVUdwbDhmSWNhb2RnRHM5N2ZDZ0R0bFBoMGxIRzZSSmdCaVdSV0Z1RnFHZTBBa2NjZDRDem10d1Ztemh1a1dwdEZ5clBvRTJEVmRHdVJLbWlGY2VOVVhOMTI0UzhxS2lHSDFiSkJvcUlJOFQxYUpVbnNDbWdnamFkOHlhZkYrMHBHUmV6VUgwY202OFBlK011NHVzVnNEbG5GYmF1VE5rWEl6MkhDdDcyaWpqWUpmRmh6emo3ZFV0aEFnTEUva2RKMU5uK1diUEdOajZBMnN1UFg3SW1iRnBKVWVoQzNDek5tSlpNbWYvV1J6blV4cTI1bmNxRzFJejQrcmhndkhUcU1ydzJZN201TVc0UnpHdGZpODI2UlowOWRGMU9NaUdlb0ZxRjNjZFpMd2NsR0dTV0lUL0dsb01JRnJKOTMvSzVJRC9Xc3NBNFFoa3FoQnV1dk1sV3ljRXhwNU0rRkNBSThzZTFaQ3h2RW5WZm8ySFMxYndQS1lNM3F2T2JWUnBSd3Jta29rNUR3RXhsUWFRRWR6dEp6ZTVCZDhwNVcwaVhLTWc4WWZwZ0FNSFMxYzZSVXJndWt3MEg1SnJKRFF3Y1VOMWhuOTN0cmdzb2hKdTEwdTNnYXNkUkdSTHNTU20rdWNtalNNdGhTT2FSTEh2MWd2dTJXOGVpVTFwOUZGaUpLckovdk1SOEthYlVWZmg0MUF4RlpEVWd4ZGs5cGhPbkNvVE4wZ3hPQTNLOFN0VUprLzBTL3Mwc0VldHVkQlBDdzBlTkNLbkdLcHBhTlVYejUzWHk5K3VqNi9QZkNlREpucWVUUVRrV2VBNjEvaEE1M1g1akVZZmtBMHpSMm1Cb1ZvUWlMQmR6aXpaOTdHTVdrNnhrdWZsWVBUTUdiSngyd1NtbFllTXRsU0NIc2JvT1ltcXpHTHlPMTlnZFJ3NVBXREZrZ2QyQjlkS1ZiMitPWFBpaXlhRDRVV2hIdWM1SVh4OUFKTWkxWklZMnozZnEvYmZLbVo4ZlFwWmNqRk11MkdtWjVaUXhWM1UwWS92RHF2UjhmYVVOdElGUTFGYVFlRGRpSzlMM3hNWTROa2xvNnRpekUxMURFNXhvRnZnMUlnVUpBRUptSDZMb0ROZ210MS8wQURXYmYydlovSDBjaEtzWTBzZlRwMGdpcHRPK3lTMnlDcHFLd0xGVy85MUQ0Wi9uNUZqNHFVSUJpNmxvMko1UlU3YkpwaWZpSFlocm1JLzZDQ1RHSW9ZZGdGVk1rRVJOZHloNFVTM2Q4Ni9LV0NHMDNDemYvcFE3UU9adnNqWUdwSE52L1VwRm95bHJjV1paREtlZDdsbWpndkpQNlZUYWZ3NVZ0a1JsN1JEcEwyTFhCZ3BtOGs1QTB2Nk9VanJqYWVHcFJmd0FnM29NKzJWdVh6VnJxbkFXYUUyUjBQZ3QwZXpzQWlLU2FDditLL2VhVzhkaXJCRmZSSnJzb2JKN1VYNGoyOURtdzVQdDMrMTFsckVuNkYrcDA5RWxpY01tSkt1WmtXdzJyZzBZeGJOQklqWUQyV3BvZ0R1Y1FTM1p1VW1NUmd6QkRSbFF2SE1WdkllRitaMHFWRXVTTldNYjJrbllZcjRJa3lIRm9ielpTUGQyZFhyaGdoa05DUGxCYTcyMUl0cGlNaGZBd04rR25SdnBzZ1YwSmdWUkYrNVhNTHA2eThxZzVpL3h2TW94MFlodlVWODdWTXl4QmtZc3NRUXRPdTNCOWg3UGM2ZzRnN1lnZjV3OEx4T2Q2Z1h4dlM4enBXbkZwbXY0VERLbXVCS2l3ZzFzM2FzNzcxWStIb09mdzZrb1FTVWVSYkVWdklPWHNQeFllNS9nR2JSeHkxcXp2clFBOHhVU0lUVGxhNCtlWkUyaGZLTjNHK0Q0Z28zaVQzMVh0ZGxmbHJKUkxnVjdyaURXQU5UU1p2eSsvQXE2bkVsZUFrVXNUMU5Idzh6T2o5VGNNdzFodVRIU3diNm1IV3ppOE0vZ0VtQ3Q4alZmL1NSelZXSEQzQmJLQWp5VGJRTGpNSllGbmRkVzBYMEFrTGhUVTRMWmxWUktYZHRmd0xFVEVxaC9KS1BySW4xMk44N3dVMzNjVUFGTUh5UHN3cVVrMDBlZStNNUQ5cjVkQTY4YzNIZE1OZmY3OExtbTJLenB4WVFJSi9XKzBqVmREak4yZHV2dlEwR1AySkZmMUtYby9wS3dqS29zSWw2NzUrY2dlVjMxOVRtWUVhTW9NQmsxZUk3bjBHd1Y2c3NXWkI2SEhrM3V1WkxyN243VUFlbWFjNlAwZzFmQmxleHlDdkg0SytReUx0SUpVK0xsandXR0JqT1BvaElybmJTUlpGZWphRTViTWhMczI5OGxSZGdOaHh3cTZod29qbXVFakFoYUQzb1NrdERWQW9PS1k1ZDkrYVBxNVVwL0pmTEtGY0xTeXNDY05HMlJMd29naHNTeFc2aUhHc2dObVlIY0VRTFl4THJSZU14WU0rbVRQZk4yazhEU2RSSUxSM3ZCWFBGNHFZZEczTGFlLzh0b0VPbVhKd0ZGQjBNTDAwcHNWanlUdlYvOHk1Q051WFZlQnJRNjNhelprT2lQMkY1dFloWVZPZUU4QzVvcGJNdHAxSzlXVE4zbUF3RUgyaWF1NlZnQTR0R3Q5R2JyaElpSHZwbGlIeEd2aXJESWhKV0MrdUlOWnFORlMxNVA0dGVib01KcS9LMmJNa09IUWROU0hoaG95YjlUbHdldDJVeXRWbkd0eWtnNDdOR2NwMEpNSWx3Si9GRnFGOEpCYkdDcG9VdFVsMTZSOVEyem1WMWZUVWMwOCtKd3dtNm9zTFovemNXRnVuWlNRaDNEcTZSZ2RqUWlnSHFYQ2pldnNyVThRWjljWTJGWmtsK1g4R0VTRGUvTktDVE02MXhpZU9rVytxZitMbktUTk16NWxGK1E5bHdGMUw0VXFibFBacnRtaWs5cTlVZHpTa2M4R1hRRnRaUjd6UzBDd2tYbTU5S0wwcG1lVTNWQjdjbENvM01VbWN1OGpKUkZxcU4vZGZ2YnZQRnpFVk1WZUNIdDl5c0ttSGRvalprbVFhV1JuSWluYmorYUs5ZFR5TUFSNEg5Nno1MTRPdXd1bHJWUGJuS0F2TzdLRDU0ZXJkUUpEekluU0tZMjhwVTZNdTVJNC8zbk1VSU9wcURONjBDN3JHb2xzeU1zQlFlMEtDMmh6U1pGSHJLN05VdVlvVUZ1Z1JoWkxaSThDWG02cm1OSk10S1FqZHZkOHNDVU9QT1pVY0MyTVk3OVNqTGNxT2F6NFY3eWg1TnpFeEFvRDBZZUZQdmlZWXVCNjIzdEZWYVN0MkJ0WTRaalhpamNKMGFuZlYrQVpMeXM1ckEyM216Q1ZDTmN5V2hiQ1BxVU93bzJGcW5ZUlhtWEJZZG9zSEtLZGRrckZYL0dqMG1SSHBCNWpkR2pmeSszdVRScW9TTnZTbXh1cEVLUDltMTkwNVFUcWJUNmxxQkRwS3k4WTdzTFY4eDB3SEVpQUJsTTVYR2VOeUlWc0xlcW9RZU9ZOUFheG1mdnQ5Sm1NVFR4MlBpSGVzemdSc0VwOTNqR0VRYjFhMjZscUlxOFA4SkIwUmd2MmpYdFd1aGFyVmlRaE1CQ1Z3ZFJPZ3NpTTVLQ21GbFRIT1RZaVU5eVp0Y01SbGdESVQ3eFlpaU4zYkFUSDVyMkpZdjNpWlpGNG9aN3duSEtIdm1ZV1hTU3VhS1NDTExFaGNybk96OXZpaHZVRFFrUVUzNEtULzQvMFczSFZzRCtHNG1tbkZrejFwL2QvZy9oTUlXSzhzWWowR3Fma0F5MXNFUUY2enFNV3ljV2RQVkN4aWxsbS8rSWFQTmhMOGtSbTFLL2xkTnRtVHh1Q0EwcUIzS0VKQ1dEU0lBeit2UHhqMUZITzZmNTQyTUlodWxWRUdoSEhVSEd6UGd5VjBHMzBxdjNGZUlxVU1FTGR5eXd6UURqV2F0cXFEbzQzRmJwai9JNmJLVk9QeHQxQ0p5VEF5MVB1WFdMNzdLeXVLWlFjYU9nTWhEYWFTL212T1gyVi9peEZDUWFLcmUrM0Q1RVN6VFFaRWZIbzFXZjhZR3lQYU5KVW1jOWt2bmtpOFAzMFUwdzlWOVVMOThzUHR0T0x2TkFaaTkwNy8yTW1yc2ZVZDZtZUJhMm15U0VaQUYrQ1FMTk96ZEFUc09vdDBDdWpnSTFkZWVzRGpwa0Y5RnRrMmhRZ1JxYnVkeEZPdWZsUWtteC9rRHRJbDk3dUo0bXJ1bkhLR1lxQXNSWnRSY3JjTWxxNVVQbnZwcjVHTmUwQmlCVTg5M2JqSXFUQzdXUWtBcWZiSmM5WTFrcHRPZkZ4ZjVVcUhUSjJBUVpqazRQaU95a2JYcmltbm1KN0dqbHl1OE1vN0pScVh0SG1kTTVva0c3bDlUbmY1UGN6UlYrNUprODl0azhQenp0SUMwbHVqdEhHZS9FOEtPbEZpTkQzR1Z3djg5RWJvQ2hZR2hRdFMxYmoxYWdiRjdpUXRPZHpUbHRRRWcvbklMbHhYZUlFeVN6SGNsek5DeUM5b3M1LzZQMWJsOXBDT2hlSVhZbGNoZW5IWVY1L0ZFN3M4TWVpcUw4a0JySkI5M05BMXNGS3BBaDNzTjhzaWlxNlF5Tk0zTzBoU0RzRUxOS0tjeUN4TXVydWMrcStBSXhhc1p1WVg4SnBYNTluTXJxNDczUlhxdFN0VGptR1E1VWhmekRzNWJTSzVVNTdYWXRxYW5sV3ZmZmhCT0h1ZVJwNXVVOWh0M2FEN0twM1VwWEk1SnB3OXJBRFlMeEhBbitRS2htOCtIZVp3UFQwMm14ZnFiQUUyNktZMlk5OVI2M2pET3lzU1BPSjZHOGlXMDR6VHYxcVJHKzBiREdpZnRQOTlMaHhod2xLVE80Z3Z4NmViTXplanhFT1NpdlVERTNpdzBiQkJYaTNiMi9JZkd2cjhmYlZjSGcvWUZUTUU2SUF1RnJmaytvRHN1QVRTM2UvQ2JDSk1ZeTBpOXEzdTVOTmViUVpUYi9LKzV6VTZkZGtCWnpNWHozMVR6bUsyNC8wbktsMklxd2tFWFF2eXlwbmpoQzEwRVlCTENNYjZyeUVUdEV0aDhjZEVLVW91cjYyRnhKbE1xZGtFWGplZnRiYUlBSVJrSUtldXRQSmtuUHk1NnlRRGxjc3c3dTFmNzdRNUVIeEtGU3FIUW1TSTF5bmhpc1pqWXFTZTNMdzBtTVRpbUYzbWo1VDdhRkp1dUtuQVRVTm1oT1J0VktZUmIraXpTem5ZV1JrR1JGWEg3bnZ2YmZKUFc3b25UMzlxQmx5bFpkTmcySmtPYXc1cGs2OXQ2a1JxV1lYVzlnMHY1WVExTnRxY0VnMlZKRVd6NzE1ajZ4eERaMCtvN1RtWENWRllnUmhqL0tBSE1kejBhZGxBTW9VZzluaUcxWlEzMWx1SkRrRGxuSXdwYzNnSWxjQllQR3o3K1E2ZGc0WVBJc3Bzd3hDRG0vRjBhY3JMSDcrTTlUMlhub0RCWG9zNmdsakZSZnlGVVV1Y05tNzNiUjNEays4TTd3NEhsYndBRzZmNGdyVE5keGs4NlQzMXJWNVpabVJLZy9yWnJBTSttc3cydnVXYzNrQnhzaGVOdXlzNU9xaS9ENmJkeWpWWmYzeHY2VGRybVpKYmtnY05yRnZWZXJQbXZkMVlvbzRLVDdIdHhOSUhzbVpHWkxZdGJweGdTZ0dISnk2THk5a3lvQW9MR1hvRm1Iejl1Yi96eDRyK0dsRDBPRE9RaXBreGRhMDlrc0NmYzkreDF3U001Y01zNmZJdzVHMGZiUjFiRlJLMS9iU3FxN0dOSjJKdHFzMkIydjA0emd1U3VsSTlFbytnMHNQZFpLeHVoWlhZN3QrWU16b2tYZ3NhWlJEUFZ6SXAwNndiSllYL29lRVdUTXhlY084ZmxKdWl6Nm5LbnQ5SzZ6THgzT2dlYUhud3JLekZ4UHlhbEo5ZUFJSDRFM0ZYbGFtVHdrbDR2a1ZjZ3AvNGV3dHpRUlo4N2ZuWlp0MlozT2lROStQZlRIVEpvS0QrZmRETzByUTgrOGFVTy9ES1pmN1B5SENnbnNLbFVlRHN5SFVadFNMVTU5bXU5cXdhMjY5OFd3NWRRMkFvZStVb2cyYWFVL3VwV0lIUnJyZnNCSmRzS0U3cWZLTDA5V2tpaFAvQ1hRWmMyNHJTNndJUE5wcGhwTkp0MmhoU1UrTlV4aWRvNDlZWGh0ZHkyYkUxTW9vWHFCVzFiRzBTODlnNGx1eXlSRVB2YXMrZmJEMlZicTlrVVRKTlhSZkx2OEpKdDJRUzVqaS8vRVd2SDhmZXFvMVMrY0ZmTE1zZ01TNHpabWhoQVI1NmNZMGFJQ2dZQzluNGNsbXJOQytVSjA1eHBZN0M2NUlkclBaMWhSaWFXMzA0YkZnT05VNTJtS1R4QnhmWk5mVWRsRGxYVU5yaVdMekh5anEwWlBydW90aTMxQ2toMTNvby9vSy9RdUY0a0IrUDNpMmZxSVdybHJWb3Y0QkpoRDBxK0x0OUR2TkgyNDJJeHBQRlhST283VGxubWNlTFdDd2paQVBFUUlDMExCM0w5UklFT29oVVMzN3JWdFhhZjN3a2YwV3lHU1l5QnFmNEpMNTJqbHhQQmlDUjJSWjJuaU1aTDFRckhoVVpHQW5vTHhVREsxbFBNMEd5MFpJdUc4bVpia3ZOUUJQNnNzL0xUUzY3cFBIR2lOTU9hVGo0eFZadEVTQUx5OGN2ZUg5VnRWbjY2d3ZQQmpwU1hpMWdCa3pzM2lJVkxrSnRFU2JGVGhKNU4zOVhRc0dORG1DQWh3bFk2QzVjWXRhVnRaYWEyak9mZDFnRFVYdWJkWlpIbTFkMmxUOVl1ZWxqZ1JLSXphK1VJQ3FLMXl1c2hsT0kwMEpyVmhBdUJtWVJLSXVFMVYvNmRlYTY2WlVHR1Zad25pcVl6K2VEUitzRHl3VnFBYmtYTGhBempEalFGN0ROS3ZFd1MrWXN4TldDRy9ldklCaGVQaVpISHJDV1FPdzg4eE9DS092RzgzTExsUktySnR5S1l0ZkZmRGpMVnFVM0VyeU5lWEQwTlJncjNzS3lJM0liNTBLVko3SExHSEJsVVNzVU9NY3I0RG5ZbS9NcS9sTG1iUjR6WFVQTDNleDAwZWQ3cDAySjJNOGVFZXEvY21wNGJ3M1NIcUlnQWl1WE54QldnMzYzbkpXd3dkOHFRUmNqTW1aSlQvY2J0OVhqQWxYTTlhYlBhUlh6Z3NzKzdqeTdkKzk0UUpPNTlHRVVWYUxIMnNrSFVhNzRsd1RMNnliRGRVRlpBMDYxalBpeDFMUTI4c1RNK2NROFBZZWkzMGZIMisvRVFyL0k0U1VQU0pMSkZRazFrekJqSDUxNWtacFVFVXJ0bTRZdjd2Vit1MTkrVDhaS1NpWDdFdUttVis1OU96ZnpLMG0wSHNOcmZpM0ZhOWFVdkxFUG53M29zSzN4OWxJUEE1aVZoam9ISXI1LzNIQ0dUWGdzbDlrL0FoT241enJpd3RldURjdlhwZ0IyZElha0ZGT3MyTHIzUjlzc093cTY3dUx6cmd0SFNwWnFwWk85UTJEOFRSWU9ZN0huY1k4TDVXdFNNc1crTnhpZGRMSUpRdDExYnhKRThrZ1hCVGd3ajB0VTdLRzJhYVJUOTY4YTJvcmJMM2hXTXh2OFhtaFB5ZlZUSDE4cnV1QjlwcTUvOEpBczZ1WXBYUW9iYUIxOGhCZnJvODhsS3lpUVJ1ckRKcDZ2UGpjMzZjMUhVNERCMDdNZW5GZlpLazNCUDRPdGM5VU5wYlNvNzRNcnZ6MmlXakJuaDZEa0F0TFlKNjh4OEVUbURVZFBha3F4cnN1Q3RablR3KzhqZzhNTWx5Q0F1QlloeFRqZ1VNV2daYSsvaEI4MHRhZm5DMGFsQWFhNVNCci90bGlML0FweWxGbE10d0duMFdHSDczN3U0R1MrK09zS2dpZTB5TU50M0FwZmxRcDBJVDIyM2crTnZxOTl4NXhTVTZWR1lkUWk5WlFUYy9yVERkNEZNZW1CUDAvVXFnMG1wUGtteDBNejZOajhETjFUUmF0ejgrbmxORzZwZEJjMlVBUDhMU2x3bFBwNlBLYVo5Y0pkaWFQSDFLbno5MmdOd2hUekkxempkd2Y5cU5rMndtaDFPMVJ3RTQ5ZVZuVGFYZFJ4bmZhd1haU0tNcHdLM04zeVkzZ3hZamRleUhLQnJYUTk2bWRRUGFYbVN1WmtXRDFLckY2V3pTT3JYL1lTMm9JblpXZWcwVEJ4ZW5kS28xWDkvSHJUR0pUQWE1RnF1L05UTklUYXhRU2ZmVmNEaC8wTWdWR1dzZFhWRTNBV1lzYlVjQWQrWjJ3MkdhL1N5ZzM1bVA1aG9NZDFjb0s0Rm4rRS9qd3ZidEUzalUwSGdqUytnZFZhRXhPN05JdzFUdm5QNE8vay9TSWwxbm1RdWlpdEMvMkYvaytzMG5ib3dYcWljbmpsMHBvK0puSTQyM1RpdDFHQjVnZUhnTDVqU1g1eEEyKzhnQzV1QkdYY2Q4eEQxT3VwVlVFNmNsZmtLQXR4QWRMRDN6c1Nxazgwb3VhbzR5VTR2TkovbXZNbGVWOWllSThMYVBPcEltcFRJVUZ0UE14YmJuOHV6cnRKTW41RFNNcVJJSDJodi9yMkdhb3pwL3N3RXZrZVJlT3ZQTVJnayt4SG5mK1FXMXNMUWFCL1V3ZkpPbVV3MEVmN0pUcURvUUc3M0VoYTlBVVFXbHdHVG92Y2xXVE5FdVc1Y3psK2o1RTIzVTJtYUxUNmF0bjF3dEZtdW5RWnR6eGpyZnlCLzl4TE8xSUQ0UGlUWm0rc1R3UWhtbGtrbmJqN3k4K2hmSm5ZUm84b2VpL01HKzNyWVEwdlZsMW41VGo1VWpMMlZjeWtVazNsK1J0UW5RcjlYellEcHNiMmUyMlJGV3lJNWRURTR0VkRJK0RCbExCWDFhTjdUSVR4dTFFY001VlRzeGFSb3BDREg2WWRkbFFVTzlkZ0JVRTlvVjNySGJlYzNOWjlxN0VPeVBqZ1FwSWFGWlRzV09TZlFucmZwakdQanpGK3JxWlBQbzJFN3JUU1Z0UUhFWUcwWk9HdUd5OFZta0d5WDdka2hSZ0VUNytsL2Z2Ynh4KzVtQUYxSmtqSHN3b3pkcUtmczlqd2xMYWlCdnRBUmJpa2szbDhFTi8yYUJ2UEdEa3RyTnZvalYrTkgwQmQ0WUNqMTJ4alZGcEZva25uaTF2UlpzcDlSNG5PU2haZmRnb29nc2R0S0VVYVB0ak5pcFdMeEEwa21SUjd0V1VOeTJKYW9ORjRWcS95Q2hzNW8yTk1UYUVSUjZ0bElaVmticlY4Q0xtdm52b3VsNm5kVGlEdEdScEdveDBqOFJOYVByR3B6VmIwSVc0d29xb1JmdE5TMXNNOXI4aVc0WjRjVG16aEZkZXUyblcyRHJJS2F2Z0ZkR2xCUTNqdjVYdER3SWhCWkhXMUk4SjlyaXhoeld1SEtNMXJmRXY1TkExNTMvZUJIdWYyZ0QzNm5sMzFtRjk2WVA3dW9LNnFhQUFYODVFbzJURmgzOXFpK3FYcGxERVB6bG9VWDNvMkdyNDk1VjN5K2orTnFFa0JhOWx0bWxRd2piSWZ4ZnVwOXlyelEzUWg4bjEzbHU0WHZSa0VRNENFNWdQOVljbklsNS9VRUtQTS9KSk5YbDRUMjcxZXA3ZW1BSlI0WkdWajM1L0xEU0tLRWt5VnR3aVhXQmZsVlhWckxLeTBQVi9nNlVoanFmOElqU2U4OHJXYU1lSHhkOTBUQk1yV1VZWWhTVFNaVENhcTVxZHJsNHJFdHZTRCszMDMxOFlBTXhBeW5NcEdJQTlmQ1JDZXR3NzN4ZnhlRmd3cVRqaHJFRFNZdmdtc0lwb0JPRHMxZnQ0R2h1b3BDSURKckh2dnlZczZCRThXdDMxZDFGTHM0b3RHL3BwT2hubzk4eHNFY0FsUGkxT3ZCWFJPVEtud3krb0x5dFVHK2dFSG5NZEQ4blVSL1FIMC9kZUlUdFBQeGlMU0U1azI5OVJQMXhWdEsrdVJtZ1grUHFXV3pNbFRLZ3pEY2hVeHRnRDVNWk4yQUpkenpaTzAvVkhIUlV6eEZ2bEgvRVJTUzdwQ0tydjhGMzJnbzQ3N1dDc0hWY0ZKWlRIYWJrcDFqekhibWNIL202NURQMnFrUFJxM2lSOWdRZFB2ZWNuaDdlaDNxak4wei92Nk4yb0RRbzI1ckYyTHY0dUk0WER1clBaYWFBZFRqUUdoUnczdnhvK3dCcGJUc1l3eVkvQXVoTEFzcUxQZ3kzM0J6a1RNWW9zOWJPcjIveGJ6ekFlS1pnT2lHWkRBbVlYQkxKQ1h4eTdHK3JhQjg0dlFJTmJPdDJlSFF3M1F3bS9oOFNkaVcvMXI5eXJVcWROemZ1dDdER05JczlSN2Y1QWRmQUh4UGkwRTZxdE1wRE5lclhuSVFXZHY4RkFUT2dxM29SZ0VPWW5tV3FiWG5POFhuZ1lFeklDSVFpZGJRVmwxUnBBQlltc2t3OUd0M1gvUTVpMXJyS21XQ2VPZE94bVMrK0x5ZzYzc0gyQlJwYVlwSVpocnh0K3Qrd05Zc2p4bHZtdjhrUHdqQlNvTmdQSEtwaWJXUG5rR2ZYMytsM0g4WS9Ma0toVnVjZkpFWEk1UVdQbmJsalJKN3ZIM2dWTmZVb3p0S2xIU1F4NGJqSHJWbFRaa3lTc1pJNUFvRHhRVzF0SFByclA4TTlVZjJPcC8wcVRDVVFIUWJTQkRFRjlzcjBibVI0MzNFYzV2Nzl1TnBPeDdtV1Fwa2lxZFJlTTllbnpXWnQra25iRmFuSWk5cWcvaVlXTit5bjFwY3pUMThGUDQrUkt4Y1ZncjdMWnlrN01ZY3ZkUzJSZUZWdCtOZHFkelRDSGVSbXlIdXBvZVBzbXBNQkpqUS9OY1lUdExJZnVMR1FxTkFCTDRwWFVBVUVQZTMxU25XY0E4cjZKOGIrK0xUQ0U5eTY1bktQeDRDdzB3SElVemFGdEhLYlNlUVE0NzFqRlFRVmZJRmZUamNIei8yLzErSWx0ak5yTjhGVWRGaWIwNE8rcno3Y05FdHp4aTkvZkQxR2tOZ01pZUtabmxSOG1yaFdlRlBDQzJJM2pKR1VjeGVZdGxuSWo5anVBUFp0SVdzaFR1SGRjdCt4RG9qTGxpY2JIbTBsb2xURjYxREJSaTlnWmxIMHc5Qk4yRHY3bERLc3BHeGN5UzFGWlVIY3ZzMld5T1dsNlNTRWN6bVI4aFVSVnYzZmpFTUc1cE5aVUVVVXMrcko5Tksvb1FPczFwZHZ6ZFFnSUw3dEtibXlhMHdBRmZOck83MTdQUFAzbVpWMklYaDk5ZjV2ZVNVeTZxVml3bXdaUW00TExBQkR4b3hrcVFWYnAwakZDK0hRdTB3aTB0QWRpbTJ1akFnTXNoeWFMR2taaldaLzFDVTEyeEZ6NUJmcjNjcUhTeks3UGdUUmFnbnpleWFzTmcvVm9pRTAxMEt2WEUxSE80RGtaT1BEc1N0ekp5RWRXaVVGUUxvZWxzZlJJbkVTWXFZa0lHRnEzRS8zMXc4RGpQeksxNEtVbUhqYVVYS1FEWTkvM3JIQ0JZK2JtNG9vaFU4d0pPRnVwU2lORTlVVEN4aDhmdnoyTDlpN0xpRm41eFB6dTJCeVlzTVhPa25reWU0TjNUQ2FwYWxrUnd6Vzduc3dVL1YvZ05GZXdXZ211ZStIYjdJYmh0VHVHUDNPN05zbUNUUkhVaWE0WUE1cnMwWm4zaHF1d1pIWnJaTjYwcU9BNEJobUJNMW5PVTJkWUFsQ0VZQVpzVWNaRVZpcXJ5YTYvYlJnY2xuS0tBLzMvTkl5WUhERFUzWWhkZEhRSndaQ05WZ3A1OEU3N3F2bzVtOW52eXFRMWE4bHJNb2pHRW56SkoxVmtCK09nbWdmK214ek5kaXk1QUZqR0llY3IraHRNZkR5UmpUVjhwcFJzTkthZlFSTk1aNDIvSzh5OXRqMU83NFd4NXYxQWFnQ0FSWVVVTC9iRzdrTVJSeUFrZlpZMHFTMENCYUtjbjhZRjcxNnIzZHU5QitZdkNWbWhBelJhWGJVd2Z3NGtGRllDUVdqQWlPcC9HdnEzU3EvdkZiVDN6K2hNZzZqN0lPekY3L0JYa3IxSm5heXRWWUVvK2hjaGtEa1ZObVk2Qm9BT2JwZmFSUUNqRGJnTzNDaUdJQzNqMS9RT3RhNjFwRGk4WHBEQ0grVWtueDNzVXIyRGRkcHV3c294bHFuUjlmMUxWdWJoQzFQSW81dUFIc1M2MmY4VDlDNzA2NVBCbWNzaEpaZkpjVEZockVPRFQ2MWNEQlc3Y0poc21iRVhBbzhYanBaQjVBUEoyUDBtVVF1OGM1N2sybXgvU2gySmVaY3I5WXBNWVBRN0QvQXFla0luOGd2ejg5WlNDNm9LZGx4cUhGQVBUWDY0eEVFOU1Ja0tZU1VObHMvV3VZTGxyVStTbXNISkhGMnZWRnVCYUNoVTJUT2lQUnk0bW41UWlCQWVBWWdFVkhUZUdHd2Z4V2lBTTFoNnFHOEplcU43M21WYjkybG5LVitENm4xUStiek1hZmhDZ2NqMXAyN1pTb3BJN3BVajhrUkxSU0pwb0VmYVpGTDdmeTBNYWtQM1BHbTRNdWxqZGVjZHpsMTZEc3lsMDVTNjJwYkxoR2RXZUVWVHNlYngrR3FsaHdBbHdhK0NTRnZEelhtZk84SmZOTXhPOStIWnJsc25VU2w5VFgrYmpQRUpOQkpNSVpTcE9iNFhXa3ZmV0ZCWThNMlVxdlZHclpxTER3OUthd3hCOFhubmFjVEZOMzZCUUIxWFM3QjliUXNqeEtDSzF2a21UbFlIYUppYmRCU0x6d0dJYnFWaThONUc5cFZVOG03a28xMzZUMS9RZjhibTluU0NSMm1Obldya2s0QmF5VlMwQjE0VG95OU1TcTVVQWFTVytNcCtUZEpsQ0c1ZlBUbG1QZWx1cUVwRU5hRjJRaWZDTkhwb2hxVERPK1N4NHZYTWVVY0FyVG5wUjJzcUs4dlhKVnllbUhDT0FGSWI3MHdZaDNQZk5YY1c4cUxRMUs1MEExTzYzUjVPcEUwaUVPbW9ndVpwQUFVQmgvenpkSURPTnNBWGt1WXlZbjdISTlQeFQyMnE5WjFoam4xTlkyVUMzdFp0NGNONXZ2UlNDcjNBMUkzaWo4ZGZ3Mi9JUVJxaFN6Q0l2NXV6dGlMa1hDdm4rZk9idFROY29yOXA3V2FDeGZnUlNTZDZXVUlER2lLeVZOeTJWbmRrZElFTDNxODhGcmZrSlN0SUFlNHRJSlRSUnNSVHNPYlVGSUwvMmNhL2RGeS9CQzJBWEMzR0xuZVZaSlJGZnZ0Nk1XMGV3Z1ZlYTF6Q2ZHaUYrWmxUeE1pQ2JCVStZc3Q0YmRsTWVsdlc4WWNnWDRUcjhtQStiRzJQZHIzQjE1bWJtbmlRb3pjbWhoc2toa1BCT2t2OXdhSEp4OXpXUUdQQmtReVg2QWlGTVpCbVl1Z1kreU9ZcXA1anZ2c2tPVXpYQ0tCS2NwU0c0MUdIRCtieGxYRDJxY21EdWRsOXNqQlBZa0dFY0QwR0s0NEdSQ2oyUHJ5czliWUhDdnBQY04wVjNSMzVWQXp6NzU2S2ZVakdZMnJYOENzRktvdEt6anJUZkJVQkZ5dERBdzUrTWtuM0lQNEprcnl2ZUZ1QVR5ZmN1NUE2Yzl4TW5iYjlQTHM1OUpRS0YrZVN5NzRwY3pKa2NPS1BVNHlmOEhQaEdnVVc1MTErYVBxZWtnZW1FOWo2dnNrc3ZQR3BDVG5CTzJWdjhESnJXSnQrNnZqNjVrSlhhS2RFODVtYitzU20wcmc1dGtrR1prK1FRWDN0MHZKTm1hRzB4bURhR1JNV2dxaEUzbGczY0xFMVNtNjZMOEJIMUxMZUMzV1pjeXNCd2hDNGRsc044akpGYlZyb1M5VDZtSENRcTBhREd3dTFtQUE2emFxV0pnSHkzak42UFYxeHBLemRaTFY3cHZNQ2JFTTMwQ0U0L3kyQzFBN1ZzVFJ6ZGdDU00rN3Y0L2pJdzFPaVVad2xrMU9vWEY4MUxFVElWL2plLy9mNmptUG5BNGJWVjU5eU9mRnJuYUkwdFFrclNqYi9MUG0zZ3VZN3kxNEt1VE9USnVBZmlPeUplVnplSjJDNUY1STVYRW5BZE9YTFdoM3U0aVFENFBqWVVYYmJjMHduMG5QS2ZtRktFTkdYVW9HMGxKSy8xNThJUTZOWEFUd0EvaG05R0tnSjlrWjZwbGZrRXVZWnhDWW1tdW1DK1NVWXlhd3YzNWxJMjNzOU40QmNpbTRjQTJXYnJQNi82N0dWTGNuZXdFUU9JNklxM2RhNWpnWHphQ3A5bDFNRkI2UHNIWHBZNlM5ZzNpV25CNGZRK0pIaHJvS1RQamdMMWRHWUtKL25WU0xxNWx6QTFiWk1vVVdEZ1dtOXQrVUNEajlNSXZjQVI0N05hMmprbUpVNTVnNDljOFVvSmhxOHV6bUdvZHlIdWFWL1ROMEd1RDNkVU0rNnd4MEpyTnBTNitIUFp5VHNvaDBCYTJielZteWVMbWw0RXA0V1VCNmszTmVjUGtFc2lud1dYdnpobm44YTh0aG40SFRLU0tjTnpuVFBOM0VmeXIzVFdzSm9rZ2x2TnFLNDgxK3ZDTEFZWDZ1VXlGV0FKUTVvKytacUxvOTZPd24yTmZPUGFXNG9BQ3g3ZUs5d3RpS0tEL1AwY210anFnSlZybG5oYTZvVVBYbHdhQUpqZExTRTlqVUtlWDFDNlk2RS9vYnZrTm9iM2pzWU1aaEUwRFQ3dlVtTUVrdGNzVmRjSXFUb3pFUkFud0h2bUlhd1BVbE8vMmpNYk5rZjlPOGhSSjdFbEwxQTg4amVsa1c0SDM1NktQTkREaS8yaC9HRlZGQUEyWFdsWHkzLzN6TWxWUitwaWl5WVVpVWVEVGVHUCsvSFZmZklCaVh0dHphZ2RCa1lSWGNBZ1RPWXMyeFo5Ty9tQnhlWGZmMXREREE5WDJqQnFPbmRET1FEZzJBeld5NHpFUHVQOWhWTTQ0cEJzUnIyTTFuYUJ5UWdGODZCeTN5NjdvakVKTHpjRlY5RzN0WEFKc2VDU0xJLzZSbnpoalBtd2J5b0V2aWhXb3F6MjIraWhBeldsUXdWU2Z4dXN2WE1rajl4MFFHeG1wUTRHZEFINlRzZGtsbW16a3dhT3BIcFRuV0hVMVhSbUxIVG1kdGFUV1B5VUc2L0tSVDRjWXQ1YTI1aHpud05KdzgwYUJIcUl5dXNnai8wYWpOY3k3L3lZY0daUDlLWE1DVDlQMGkwMDAwUjZtSWxLQVpvbG4wVzM4Y3dJZzZ1NVpOT0N1U3FsZGlURlRhbG5JZHFWUU5XNEFvZkFqbnVwelFxRC9kRTJpdmJzalpqZ1R0NnZIUWc3WWZTZFltT3N1THl3SjFPclF2T2doQnJ3UTBRK1QzT2I5NjhtSmtXcjJ1OSs2a3FsTFgwL2ZDLzJZTnhwT0QwSmlkaEpmRUI2ZVV4L3gya2hzNUhvaml3SjBCTkh4OGlUUWZDQVZzc1YrWkd1S3g5eXZBUGJTUFpTbE5NWVFYR3J0Z0pTcUFJcGxaZ0NoR0s2MUFIR0F6WldpdzVWZ2xORXdZOUpUeU1TQUN5Y1g5alg1NlVzQU5nWks3L2VidlhpYVdHV2dWVU1sV0JLcUg0SnlJOE40TjZxUWNiR01LcFZOVmpxN0J4c2oycjZHOUU3QW1kZVkwWVJZK0FCMGk2ekVBQm1OWmRwUUVCNzlPRzR6U0toNFVSUGl4ZXVla0ZCb0dwc0YrQkpXbjd1ems4REowT3cydHJQRDNXL3VHVU90aldsSUx4OGtBc3VqZTVzenRtK1RxQnZHWDl0VzBPZ3FHVGwyMzVXNHNuL3Y4UEU0UXBUQzhPZ1lBOG8rcEMwM3BuUVVOdEFVZmdaRVlkdHExUnFBdHZSVjlXdldHNjdFNUIyVlJMMjdSc2ZFTWEvT0pVaWdwU1RrcmNrRG9USzJYZ0FWUkFtSXlYODRzaWVYSDB2Mnk1U0loUWlUbDVhN0gzclRQZHlBYnFwZGluOG9sbThSa21GS2NnajJzZk1mM3JOcWpSeUlnYWYwNUVHSjgzNExoWEdIWVVTeCt0NGtDdjV0bkZYU2JIcnZ3Z3RNMVRCS1p5czlVamFsSW9yeG41cHRjQlBOU0xqR2l0MEZ0cFd1eXdrdDdDWCtMclQ2ems4bjM4NDBJWjIzTVkxYTFiVkczVWZUaWhyMlljMC96UDdSVVpmSEFzOXU4anhza044LzZEOEl4eUhIT2c1cVJWQjVGbUJhdHJJRGY0NnVadG9FSWxRTGJpWnpZajh6YUplZmpqQnFSdkR3aW9TY1REY2FsUlhRNEhJS1diR21WREU4ZXcwbktSR1Z2MzlweGlQbk94anJBZU5HUU9wZTVLL3p2TEpSVmphNUExanRad0M0citZVUR3Vll2Q3R6endEeUFrYU9PWGtWb2ZGamQ4cW1yQjBrblZHekNoMEJMb3BtQ0RHQTNhS2pyWndtQ0VZYlJTcHIzd1MrV0tJbFc1Ymh1ZE9jTUZqS0laN1RqWU5ZNURFRzBoUWEyQWhnRG43RlRkeEh1YW43amNYdzNYem5lVkxlTTdEcW5VRnIvUURnbWJiU2NiSDRXZ2ppTGFkTXBhSE50V1p5d2h6OC94NDRBdk40blFkdGNaWTJZZk5ldkNCbmQzTDl6T2NiTkZQVW9Zc2Y4YXU3cHBvT0NGMzRNcHc5OEg2aXF3UVpOeXBGYWxPMU5DTC9QTXZCMzdhU1RNSHd4MHFLMTUyZjcyV1VGVjBRaXJrUy9qOU43UG1PSHEwcHdvZG1aUTFGc3o3TDlFUnBRVUlEdFd5VE1zSHQ5a1pNTXVjbXhPK0JURU5hRVdyUWZyMDhiVUF1WXNzWFFWK0M5QnFneC9pT0l2NnI5VFFiV25ac1dhbmRHYXNHS0dvWTNFZVFGNVU1aU9ZT1hDdmhNcFRONHJJNVpjbHVFVUNWcU02anRoUGJ2SGdQNWZEUXRmZHJOSGl4ZUR4RDEwdkVjNmJUZXFKUmxCcDlUdjIwRnJheWNtL2FzZHhHbWlnUGJ3MGljd05VY08vZWo4NFp4Z0xYY2ZoL3JRY3A3L1plWGtjNWhIMUc2K1loWHZVaHcyRjZ1dm1nNzVRSDgzenord2NTUmVGemtub2pzRGZ3VHdEZ2E5ZEgrK3hBRWdpWHpRL1lZQ1dGbVZpODkxZUxkNGd1MlJEbXlFWmZsV2pBWDkxY0d1QnlTT010VVNIa3ZoUC9aVFRhYzY1M05qalR5dy84dzZlelYwamU1M3g3ZEVuZnZrT3dPR3pSOWtuUEFFeGM3ajAxVW1LcWp1dEt5cm1RdEhtSjl0WEZWMXZQWndERkdjZlJHQ0tsUHdmT3pGQllzdk9zOUsxanV2bmU1ZjRMV04vRTBGMkM0RzQvU3k5K0g0eUFtS3pmbUVEdEdEOHlpQTh3K0VIVjVVTENNMlljOHQ0NlQxVXBDNThiK2xFN3EyQnpEUVc4U0ZWQnJzbkNPWEpZR1RjWHNxaSt2ZlN5M0liZW5nUlZwOWliQStsbWl6WnhEU2R4RHlYYjFpSUdaZm1vOGN5MkVwRWMwbHh3d1JVZEFoak96MjhSZ1packdHQ0ZXeXd1Q2JJVlNRUzJVMnhFUGJ1YjZtOHlzc3dPbHR0K2o3cDF6Mjk4M3JyUmU2VndFTGpWMkNrSUkxRCszVU5EZHdpZzkvUXdFZ1FtdmI4UTM5Vmp1MllrbTYrdkdwNXh4TUg3K3MwV0RSZTByMGpGTk04YUExNEx0L053WWtkM1BuNWJNaGRzODBUZ1B3T1o1R0RWUmZ0WDVRM0NkdzB5ZUJ5aFJHT2ZFOEFQL2pKY1BuOS9YM3p4Z2g4eFFjdnFUUktZdDZvSnRzNnVZblo4bTRGa1BMdlJjc3JIaVNPMFlCOWJna2VOSHlZTTUrWE12ejc3bllFYVEyc241NEY2MWhuamNTSGVWOUFDZTl6ZjZGQnR4dTkrVHR0djZrYldNMi9HMmtFRkc5Wkg1dTJzR0JpeTVEOVhPMlUxM3p5SGQvMzY4Uzl0OXd1djRUOUNtN29iSFlYUTF4dUpXTzRYb0Rwc0tEcFBFb0taeFBCamtxU05hUTl4aDVKOEIvUUo3MHJpbFlCSXZKWVZrN0pOTnJJMWtXU3hGakdFTjBvTmhQcTd6R0JzWUxEUThZOGU3MTNGcEhXNUhSZ1d4bXU5U0ZoblIyZ2JOYnNJQVpFRkN5dEQrNjhzQmlGVVo0WVVCVGRtQU1VRDNaQUZQQWJacERobmpNS3puUlZnWXlSK29yT2VqYXo2L1A5TWZkYjBmd1BnSHc3Y3VORHNSNVI4Zjg4OFZ0N3pQTDhybjY0eGZ0cnA3b3RTaXk1Q1pxSE8wSHpGUGNDdENiRHF3SW1SRzRibnJNVytqTzNoOWhyakdGTnJwMnllbjFyQjVDcEF1NjM5UERqUnpyMHNOc2p4Ny9OUmpJbTNlZ2ZvOUdlOUFmYXpVMmNQbTZITkpYVTJoWXJUOG0rYWJ2SWdtcjBDR1ZUb25INSt6dEFxR0ZIZjRoNUE1d2t5NDVrNmF4MWRoU2Y4emc3RVpSWUdKdnR3MEt6NmxqQUJ3NFdCTUxIcWhtNGcveVVRVHJoU1grRXVPeW5WNGVMaVJBRVkxUDl2RUdBbjcrdUl5TExwVXBTTlpXWTcraHNCUGJKR2RqZFZKMzRLZDJmaGFjQWlhbnVPVWlXY2pXN3FNRWpwK2xvTW9Yb0IyMkY5RXcweVBoSlBDS0RtNUtSMUcrV0ViZngzMVM1S2Z5dVBPRHhZSWNrQmM4a01CUHU5T2k3Mm9JZVBDOUI2NUMxMFVnR2t5dkJyYU1oUFpCQkxRMTlRNlNvYm9Ba08vUUU0a2NlelNhakFUNWZLUUlYSW5OWmoydnpDVTg4Y3F6TUY3MWl2L3RwS0VCN0hyOUVLb2ZmNWJQM2pmVDN1cktKMk0wQVY1TktGQjVEN2h3dy9HWU15OG9xR1UzVStFZHk4Z0hoNWp5VGJIZm1qdmt2dEdvWXpDMXUxVTEwZW13VGZocUVDYzZsaFZoL1FISTFhMytCK2dnd1pMTnBFMEZvWFV3S0ZxdGVCQ2pRZ1ptVVBwOWw2Yyt3a2hnSHVka2c5L3hPc0gxb3Q3SHdCUmY3RnpqWlExLzZYWW9EdmxRV0JtRnRTZjhreUViYkJRMk1VQmNMY1ozYWlNclJoakg3R2NTR0w1VlBmbGdWekx3OGNHbDZYRzdIaUh1NWI2WGxnMS92YkQzdEFPeGV1S3BLb1BZbW9MaTRmRUlmYWFOMGJBc3QvMVkyYlR4NmJGdmJkZjFnYlBSSFBSa1pON0RheDFhUXRSRUR6UC8xSjZhYWhJVnVHMFRZbmpjRDRzWVIvMjlKcThwbW84Z1F2YkdKWGo5L2RLZ29UR3RNWDY2QnRnbDJabmVRbTIxWTcvVm1zdC93RGl4OFlLdTROT25UZDIvWG9yUmFyUit2NXp2M0VpVTZTNFZYZDN6VlBiVEM4MDNwMW9MaTlFUmRKZkQzdDVlbTV2WVBUVWIzUXJocEdTQk4ycEp3Qi9Tem9aQWU1WjhtdUZwK0N6U0grVll1Q0R6bXZyK2wyUlBueHFRNnJtMTczdEtvOTVNb24xcmcyZUNJY0o2S0g1ODhjRzF1RWhDRGdLSmdRQml0WnFtd0Z5NzZNY1lyOUtleE1xTG1Nd2k0L0w3aHRaTWpXOUlMUDZreXVKN2hwdlZBK3RldTNUUUhtTEFFUTV2a3hWSDI5eVJabTBlaURwUjdjRFl5ZnJ0UFIvTFpqbWp3UGUyR0ZnbEREOUxTUUcwaGx0QVM5c0dGSlB3OW5DSStXRmJEYjlROEFuNnR3TDVGU1k0SFRuRWtWVnNCaHV0MlcxOXZvMFdjM2NNTHo2TXJWTjVaK2hKR0o1N1lqNDVBSUoxdWxHaHMybHJEN2d2SEpsYWZNZVdzN3ZCdStGVm5zWEZ6K1NHcDRYYjFlbmJBNndRZjNha0dDVVJCcDhSV1RSekUzZ3Z6TmV2dnVxTnBxWmVIbCtCeEk5Z0tiSUlJODRNMW9vOHF1YnlhWEJSQVdGY2xJeE9kNkNaVnQxVnA4WktCUWZ3OTR1T1IxT0lsNTBKZmFYYStNN1Q3c2I3YkVWWDdrYnA0clV2OGhYcGhnY1FkakZqUGVLRGN4OE9MVUtQbUN5QU0zZnBKR2ZqUEtzNno3a3oxM2hrOGdvdGVNUjZuL0NtL1FWNFpURmR4RGhYL2cyK2JJQ0NsaHNMRTJrdDc5ZmtGUDFJTzVha0M1ZnBwaUVoQkVDaEZJeEJmaW9EeDh6VlpLSWpHWjlhY3R0bm44YzNSOXpaelJNdzl6WnJpWThaUXZTWXF1dFJZSzMyTThHSHlnUllyR0I3U3NING1PNVVzeExndWRURGlDY3ArT20vZUQ5WnFwVW41K0xPTDlYUDI3RnJieE11VndoTlZzSDVTL1pCUUhPZkhweEd0eE43dDdWOTJwNDZsQVVIQTN4MWN3bGN1MkpnMFI0ZWVKUXgyOXdTNHpjS2UrL3oxV3I3L2MySHdZdld0dE4zVk5pbFhyQWVyWHh1QXdzQy9zeXRLOXFBbjRySE5GUVVzbkRnOFRudUVKaUl1eU45ZDcrcEV0cHFXTWlKbHhHa1Y2RTkxSkpiOTlINWF0Tno3Z0pZKzFHMk1nT0JEUUhTK2VrRlU4OFpIM0dkRm1ncy9BL1o5NUdSTE02SFcxYzl1ZjNGTmZmeFRaNkJhOGZPMEhCRkpuMjdaOGFGdFlMYUZZVEsxSUJMekh3VHdDYjlaaG1pZ0VTQ3M1bzBjQXJBVHRXNUNoV2RtSm85UlJPTmx5TmlBRncyZDVaNWpSclFRVzk2MWh6cmovZllQZjhUbThOYVorVWtsd3k4a2Rzem5mcXVZZFNSeW9ueE5aR2M0cVZGdndWNElKOXdLN3A5Nm5tWUM0UXdrbzlpdVRETUhzZ3ZKS3VaMnkyUjBOdFFmamJKWVB4TytkeGFDMzRSVUk1eW8yS1R6VGUxMWtEaytxN08zMXJxVnRiaERRaFVPbTBkb0hPUEFKM0hIQVVDWFpFQ1laMURwVE9mN3dESWlqRWVRTW45R2FTZjRWN3FjSVVkM2xJR3lWU2FpdUx3WGh0M0VOT1ZXd2tXRm9XWnd3NkxIU3IxaTJPdE9jUklPemN4QUg3R2VsWmY4RG9FcGo3OGtDOEZCOHhnL2oyU3B1SjJzNENTcDgzZFBKenNkNXVsMW1yOUZHRjhFZm9DWUVscVJ1anRGSWJCb1Z4MTV6Q3ptc2p4ODVKSlFQYW4vUkcwYzZKWVdzcVlsVGIwNTZOYjJid2hwRU83UWFEb1J6UVBTYVZ0QXlKVG1LaGphN05mTmlSdURVemROTnJQWGc3ejU5UVlXY0JkbU9XcElWSGdWM0xpbCtGSUtiMTdmaGhERkczclBUKzR5SVlkNWhMK0tDd2R2QnhNRHBKdGc5K1JtK1dxejBNeEFYaG4xeXlJcFdjb0l4YXZRZHNmbVJycXNZTW82MHpDS2dJZW9oQ1dZMmp1eUJUN0NjUmpVa3kvR1k0Vy82RWhsWkQxVjZRemtqQVRRMElZZzdFc3BoS3Y4TVBuY0pBK0hTbDNmaE1MQlpMRWFoOVBrK0NCU0tzQlZ1am96M3lrZlpoN0YwS1JxaW8ySVNUN3I5eWdOSjZjZjFhb1F2WWV0SnhPeDlLZzBLRWdRamFEVEhrcWZGRE9XQW5YdjFsMk5XcWIzb1BzZnRqZkZneVdFdnZFS251U2QzRU9XZUhaQjJTNzhlRWFYOEZpalZON2tjSzhQYXpTT0w4Y0Ixb0g2ekpXYmhXYnRhRFdEaVpYYUxwV2lGcWVvWmJ2TzlWdWdvcy9XZ0JKQnA5c3F5c1J4S0E5R1JuNlVQWUZFM0VJK05meTJ0QkFHck8zSWVqaytrWjRtYU9FY3RtUzNFM2syVTIxNkxXbVh4ZFd2Qks1ajNYazFvSlRzZnlpcGlhbWUxdFR0c0hDSXpOeE9kZmJ1bXBKck13MXlYZUJPQzFDVCtiemFOZlR2QURRZnN6ZkhrTmdzRDF0S1BpUzRvalJJNUNBS1RvNmR1N0liMENSSEdkRisyRXF3djgyZGtLTnF2eFFhR0tYUjMwOERIV0txenZrdFFzblZvS1pxblUzTmR0U05XNUZJYmNvYnpPVnlqSlBZOXZudnFhM01XZWRtNmdNS0x6eGp4REpPbmd0WGVRRHoyekovOUZUa3ZoNlkvbTJZcVUzMENWMllONW02SlVKeTNlR21MMUI4MFovY2N2NWlIZUxWeEVybEFuWDBxa3g2S1hpaFVNRHoyc2hNcWNLQTZvVDFyOWxGbjVoeDE1TUcrYmtyYnN0dzJyeGdrbVB2cEtKbmFydHRObGVKaDhWVjYydjVTWWNpbE1qeXZzSVhITGFZQU5jU2p5NlU0bmlEbDRDZ2hNMitWSmt5YWEvRFZTVDdVNGVweHV0ZlFNY1RsUDBYR1JIVjdYYklMSm96ck5MRDFLeGh0WWpEbzJSajNiVDZqdUVGNnJySmxyRmpqMmhsMDh5SEdCcmdwOVl1eldLbGZ2WG9JNGJITHZhQmJYdkV1QU1wMWdRUjYyOE9hN0ErSGxxNEV4dG9MMTB5L3NIRTR4Vlh0amUwRkhOZDhlemx5UDJqVXhxQWJHOVBlR3NOMnE1YnNTek84Tk4wSkdJU0RsblhGaVQzWDVLR09GMUZiaW9hZVo3emh2eC93TjZCYWR6aWgvcEZ0NXkrYXVoOENvWUZodzBhajU0VnltQUJnS2dXNzVHYVp3cjZHWTdjR05SdEhwSmMrZDNTRXluUE5yZ2RpTjRnVWxjQktvT2xlZkFjalpBYkNlZmhTUm5UU2lZSlMxMVdpaG1rcmlOM3dTNEw3bDJ2MlpyVUJzVmhyOWYwNUx5V0h5WVA0ZUlMK0VqNkJ2N2haQWtnS3hrdUlMZGdvVjR1U2ZNd1l6ekxmT0trS1VJWUZZNS9hM2x3ejQzczM2S09NeTlFRmN5WjlzUmlHU1hHelJMK002VWdUMWIwWFRweU5VZ1NRVWlXR04wN2FRSnZPZStGVjNSdnQ2dkpzU3NZOGlWUXhnQVJNN0NZbkF6V0ZGclRTaGtSOW5ESU8vSFZheC9idms1OUExRU1pR2liTi9FNWRnc1BnVllRQlhOeGlCNlZ4ZWppcjl4R2lZNXRUZ0N3UG9vTTAzWUpRSmlKRnZEKzVHNko0d1VtNjcxeXRRSGVYaHg1T1dzR1pZOTB0ZkhEdjI4UFJzeUJheWE2dUFHR1prQzFYZEJGWkJ0Zm85T2tCY0tEbDJ1cnNZZWlURXNIeXIzNWlJM3V2ZkRDUWEyZ1J1bTVQTEZqTEZ5K3BPYllhVW9qY2lRYzBFZVNldmNoTndjRlNkWTJWNFZNU0RsK056Zk1td1Nic05HSjZhSnNiYVBPbnpoMkxRQU9VRzhuTjN0L202SWNPS2FsUjdRRUdxZGIvYS81UXVQME9mWXBTeER6NE5GU2FHY0dJaTVTRUtuMFZLdXBCMVdRMlBMdDBVbVgyZHlYelZBQlRwUENGRjduOFdrMzArc3BiaEZqWFBrZlFSZm5zaXBkVFpPdStiQmYwdEZXVExLTENyUStjM0VQUVNPT1Q5d2ZNUkd1clJmbVNtZWxXaWxhS2YvWEtOeEFpVFRVbHhERGpNcFVaWVlkbFhPNTc5V2NTZjN6RGlFQW5OOUgrb3JHTGxJSW1DdXlja0ZaUkNyNW8xTW5OMFNuc0xqcEhKQnluU0lwcGk1dUJZRmZMN1JEWElJQUN3c25Tbm5pYTQ3d2tMZ1puaHdJS29IOEpFTzVZN0V4bDNOdSszcDdNYVJ6aUY2SWl6cnh4R29BVVVFb0NQbmNsVTI3K0MwQmRCWHhRd2VjYSthQytXcFVSMmhGbFNqNCtUdGQwSkJnU0E1K0FnSUNBZ0lDQTRuenNiNndBa29xcjJMSktnVTlyVForaWhoQ3ZQYnUxbWFNSTZlYk1GR0dtVUFSS0Vnek0reHNqZzN2MTRyREZVL2tyT2RZQTRsajdJeHdHNkRFQ05yQmxkUFcvS2ZEL0tGTU0vakRIUUovSTFreDh1NXJTSkErMG1nSmszWU9IeUVUYnhKeHdLVzI1aVhlb0Nja1h3eVRWeHUyOE9SRWltUkFhNGFBZHBUOVkzMi9UQVgyL1R6YStxeWZzMit2Ny91VFAyZEVIM2UwdS9mODIxLzM5UGw5dnEzL3Y5ck9mVlJmUDhQcDhQNGZXaWI5dHJYMmZaby92KzNoL2IwUWY4UHNyZjMvY1c3OXZVbC9EMW83N1BjZS9iVFBEK3o2Smo5djBxbS9WWFA3UHNSUDJmWTIvcTNoLzIvWEMvcyt3UzM2ZlJiKzMwNzc2ZnNGL3FvYlhQZ2sxcnM5bG5hTmZ3am1iU29MOWNQU3NxOWtHRjBzaU10aEREdlpZb2x5MDFXd2JZVDZkRnB4U1JMMUJVdTVGdVBLRUZoR0lkaCtrTFJBUmxXMkRjTGh1M1Axd01yZ00wWk1XaGxuYWw1bWFjSE5ZWFNld1p4cUYydjQ0NzFyVXZ1OU1nbm5tWUF3bVNCcmszOENIaTB1bU02ajVHaGRrSG94eCtZMHFFT1AyL052SGdFOXVuSGFYazRjd2ZJT2UranQ2aEpsWUZ0anRwcDcyYzczNzdLNHU5Yk5RcE90aGRsVmhhVXpNQnBTYWFuQng0aFlOZ1k4SWd5NEhETm1mbzhNeXRkZS9lb25NUnA3RytkYjFYaFh6OTllU3pIcE00aWVXRzhUQ0dLWmZ0eVA0eG0rblZ6MVhkSUFvUURPYWNpb2JzR2NVTlpPMDZPZGtDWGpab09Zd2ZSY2Fxb0k0MnowTGlyVFhSODlQQjRpQlBjQkFmVTUzTDE4bkFsSkRjT2VveXRtZkRCaGVkWlcvc3pqaHNkTnNSbmNuWHJZZmlQOHN4MVRTMnZVZFFFQzFKYTY2b2NObGNwUXZDRnV1aHRXYWJLSVJoUXRVL2kyOEJUZlMyVUViSEhxWFVKWWRDdTQ3TUZIbDEvbnljUXF6Ukc2U0c5V250bm1yWlZpOUg3S1JrTVdTdlpPdTFXM1M4MDU4VEJKT1F3Z2lyZk9CVzFaekQ4dkZKQy92QzdUVVpTc3gyMzlwek9xWDF3eDQ2RGY0YmNvS0h6SnJSMStDdG0xZ0wzNEpZN0VhVTJMd29IR1UxdDhNNC9ubkJnbk04Zmg3U1Fldm1rejhVT290Vi83NXZ1MGpqWFNiUkdDSy9lMnRMY2t1LzB6MWZkelhjc0R0N2htSU9IZ3JnTlMyczZudGtKM1RucHBvbVIxaG42R0lSR2FVQnc5eHA5aFBTU3pTbEFKM09GOUhMd3Ixc0RicU5OdGh3OEgrUDhNWnhXd1VwNWZzdHpxZUpQNlZuMTQvSWt6bTBFUzZjZFdJMVRQY3kya1l0U0NxdCtoZlF4UXRGU0JEeTJaeHdQTVVjSTBTMi9LNUZlVWd6Wnh5NEVqeFU0bjdyUEtBZVhFSTM2Y3dHOGFqOG9iODByMTBhb3F3SmtuOW92b0JLd011dlZOK0tmOWh3Smx4VDNjMThqVDhCU0YrcGxJWkhXbVdlUGpQNkpMdjdvRmtqbTJZU2xlSjh6T0pvVTNNSTNEWWhXTmxWaFFUYVc4S1NwVE1WMmdEVmJheUZENVF0Ri91ZWpxbU1HbHZKZ1p5U1Qzc1pLdjJ4ZXprRDdzUDQxakpTcHNuL3IvL2Uzd2w0bnBRTzV5Q3Jsa1lsNTFQcDlDbWE5S21sdU40OWdMeUJ6bGpYTm5iRjIzTWVRM0FaVzRPdm5QbERtNlBoOU5pamUvYVFPRnNUZDlibUZpWm1ERDBKaWVGN3pFbUZERjJqVHkyeWMyRCs4NVhDMksyZlVMems1OS8xRjUwTTVsMmhLR04zWEkra2g0Q2NDSGFTTGdqayt4QXVzNU5PcERTNEVpK0NKUzhzTURWc0Z2WC9Eb0RkK1BkaG1IeEU4Y1RQdmNQUU44QnZ4ZFFnU2NBYWtET1ZzcHM5QTdDbXhJQWRSUEc3MU9LWUhBUHZpTG9Hd3BPN2dSTkNPS0dQZ0hpbHIxaVNpWTBlS25HZHBoUldhdjNyejViNXV2aXEwSlVJdVdqc1pldDByWldtTEh1TVp6bDJycTk5VzlXVTNLRGRlek5ycnh4MTJUeWQrYlUrRXdsbjVCVjdEK3h4NVdnRWwyMTV2eWsxTDVLSEh3YzVBZklnd2FFVzNrM3JOaXhqNWtXUk5XU2I1azVqeE54NkNBdlZvMmF1b3BhK1cyU3BoTHVhMzNOaDBLZERNR1RMNkZoaGFVUnZsWHhQcTV2UkF6MURJUUNJQ2twWkZQWXQzTUEwR3RMZURqRUkxenAxZXk2bnIyQXVxZkFzbkVleVVFK0dkSHFLM29vSUJQUHJESzVmak5ueHpsc1VQdkQxS3h0ZlhBd1A4VUdtWVM0WUk4MW9BVE9kbWx6TTh0T0pzejhOYUhOMi90MGI2aFhEVDhVK0VQdEQrSWVqdCthS3RXSVNTeVBxdEN1OXJlQTlYMjRvR0laZ0pGajh1cUxlQzBHQ1Z2ZW5HTHVKMHNjQ2pwRUJkekxHTHJLb0FmZ1pRbm1Zb2UvVjBVZjZNM09QUTlNd0xGcWZzMVR2Q010d2psbHQ0OFp3WnRrSmFrcjRqU0duMUdoaGJzVmVCenMzc1dvcldrcytWUndCS0JFeVFvM21jcG5zNzF4L2ZLcXdXQjBjS0ptL2wxck1jcFZnMHZ2NXJEOU5xbjM0eXJsZ3VyZ295KzZqL0VJamQyazdoQUhDckd1TEVrV1hlOVVIVWNiYmZ6MlZnLzdJMGRKMWFOZkpqNGJPc0Z2Mis4VmQ4Nml1WlIrQ1RmMlpyTXN3U1RURS9SZ2pXQ28vdFlscFdJL1VVaERlcUtCVXFpeGt3YTB4Qy9lMVpOL3B4Z0NwYlVpRTNQdDJLTXpwd3ZTcG9RMEdKaVRoYTBlS083UldGVDlzSkxWYWZMWGZTbUdyTG05R01KV1JWR2pNRDNaY2VPRGtDdDZDM043VW9oODBVRS9sU0lUUk91ck4rbGwyWDd2VWhMaHZSSUNIb1Bmbko2Zk5DNDJOV3lYbTVadk45cUh0S1pVT0Z3RzBNOTVWbDdORlV0VkpDWGxmSHZpd1NGNkFlSXZKaEtoRnJzUzJYbXMyTGVGN2Nya1hUZ05qbVpxdU9lNE00STAydnI5bG12Q1NxTlE1Nmc0YStEOEhaK0xwcStKdUpOYkRTSlNEWjhQNENrdzRaRFpQU1NNdExWdG5qdWxtOGRCMzVNZ1kvSUVnOXluS0l6aWFCL2xBeXhkZDh5cWc2TE9uOUxISnVNYUkzb3MvMWpuWFdldmtOQlR4UTJTNUtLUFh3VkdyU3Y4dDFFTmREUnp4c0ppRjB0aklhMHlXZEtMSFhOWTUwUFUyOFRLd3RNelhNK1lTYWJJYlpMTlBlSVlRV1dMOUZ3QjE1aFBBZkg2dVZjRWk4U3M3dzJsUE5rMFd3Z3A4M3RjSWtTZitJZGl3VEN2ME1zR1hUN0pNRzFYMVFiaGN5Z2FDZlhjQ3pyTWQ5TStDU212MzRhY285Z3FaY3VRdEhORVdzVkZjK09vTmVFZWdBYklEaVA3NEVWL05Cbi9mWmRTUHZ0MnA2SXVoSXR1dk9aVk9PUmVRZUJuSmJTYUVCbGJOK3oxUTJjQXMzWUEwN3d5M0NOdStiNVhCQktUMGIvWk9LL0VQQ2kwcUZHdHNkMzRXM3IwTnZRc2lyaFRLbVlRSDVYbVQ2NUpVZzlWWkt0R29HN1BNTW5iL3VZMzBucW9ZUUd3TVZQY0FlN0k0WWdOdHVSQUdSR01uUW9qWTBjaXd3Um5EYXdhUWZiUGF6SlFHWitTU2dpMGx2WElGbkZsc0kyQ1dIWVlxZUV0bHdCeWxCME1iREl4K0w0MUY5bmkrMFJXRmNnYUpaUUMvVzF1ak80UU1teWNXQU5rcXFNSWw3M2lXcE1yL29EdjkxYUNxTmtkeUo3S3B3bjlXWmxQT3lBZlZkdk9NdTVHVzFDS2kwdUVNWE11ZTd0QlJhaUpFdXpTQWprWkt3WGVQVlFXWnpwTU91SzVIaG5VaUc2enpzVURyS3ZnZGdJNTBjZ3R2UW5aTkpwYzNuQnlXTlRIb1dyY2YwNThpbUJrcGpwL3A5YUtaUVYvSFNqRkJSV3k5UjJZVkdLR1NUblNqUXFwUGZkWGFzU2RRc29SeEN5dWc2L0F6eGhCSjJRVzR0Nk4yTG9RbncxaENLWVg0M09wRUJ2cmpuU1NLNW1LTHRFdDZoWTgvUEpWK1EvMkU4dzE2NTRrU0FldFFnMms0VnJrUjYzcVBCaTNIK3I4aGxuUTY5ZFRFM1BQc2xwU2IrVGIwRHlGVXY5T1FFWDI5ZUI2NEhOa0NPQVk3SFVJVUVFZVF4ZjV1eWZvVlg3cEs0SUtDSTdXSCtibGh3TVQ0TVYvckFCa2VUWUtzNUErS1k2SnRUdmkyUDZkTHY3TEJadTVqcWlVMjU3SWhEVGU1L3hSZ0dsV3JMSS9CbEhmUStIa0dtSE5PU0pzWXVqbUJEZjdTeGI5UW1PeHlYNGxjbzNqbVpZbXJMZDFSMDdyQkxIZ2R2VUd4Z0g0VmdiTDg3R0dMUXZNa1U5K0lRUTdZYVFJd3J4V1FneHh3SXRDTlFXc29TejNmdmFPM0hiNWx2NnhNZnRSOW43VDJSWTVnNEFPYmp0ZmRiWnV5aVU3MUJJalBvWVFNcVI5VndzOHFYSzdUOXhjZHhZRGdvaFB2dGs5c0VTeUc0Y0RiaEdsZ0p5TVNjTU1seE1ZekVIdll0L3RhZ2dWVGcxY2NkUDJBUHpwZ1Q3KysvVDBhYk0xb0lwSERIQWlXSzdqYy9YWFlIajhVL3J2VEE4MExSZDJITlczSjdPUld6NzZYZFpsZk9DcmlaQ0tSb0JsallpbGtVYVU5K3FtYnRuaDNxQVFUaWtTSFBycWpXRmVuRnpCVGlwMTZrd0pqeUdCQVJmcys3eXdlL2w5MWFHaTNZdVdVZWNaSTNpN1pLNzJzSmdlNWNLbDNvYW4yZU1LVGhXUC96d291clNwWGc0Uzl4L3VNQ1F0Wm1EdGJyb0JYamVaUkFxWEh6dmJUOVdMMU51VDhPVTF4blJrZTFvZ0kyMkVTNFVVbnhQUUtIcEZtR2JnVnNwUi9JQVNna282REIrTU5oQmNTYXVvWDU2VVBsM0plRFBjVFU2UlB1aW01ejhBdFNKMEpQRm5YK0hxUDlnYjBkbzFMSlcrR1p2RXBDS3VuZnkvbDJpZDF3a1c2YU8vMzdvRlJPcGw4ZGphNk9IeVB4WnEwdmpWNVQ4NGVBcVlqL3ZpeERqSnN1RDV0TU14bFo3TTNFZnNucjNJZkxuemxzTFdxWFV1MWJyMlVqTWprNFpJQWFvN2gvQmY1ZTZrb2hkME1pdU55c08zZW9yKzhqL2hVbi9DYUFUTHJnK2xhREdrMXFwRXhibFFERlRCZW90TUtOcVd5RFZlQVNVUFlOSEdycjE5WENOYWdpMDg0WW1IMVVqQ3huSEpjb1U3TlhGYTduNmJtVDVzVFZERjhHZ21pLzhzVno2anNBQTdvbGpidDJGY3BSSW1jREtmeTNMWnlYMVh3cXVxdjliNHJUUkE1Mm45cWVCNDdSeFoxWURiRC9abEdCaldFUElqSVBTbkRDL0F0SElaMnRXM0c2TDNwWUZlcVNTTmk1Z3FrSS9qZDNTTGM0ZW9nZ3ROMWRBT1pmeEhOb2tWMHRmR3ZDQWdTVXdMVzZIaVpxdW5nVTFwOExZTFpDdGpPaVRkZ09LK2VBK1FYZk43aXJsUm44Y1k3VTQzQnNCYTlQMVJPOTBVb2lBUk1zWTRic20xK3BFTjRrOGF5VEZicEFUMzBtaDl3YVFYNmdEV3dsU1JSdXdXTUFielJONXQvWklaNDNaRlJNUllJcWRGRUxuWUpSWEtWb0dhQ0wwNnRrQmpzNGNubE5hSVZFcXF4andRQ1dVUUw5aW01NUYreEx0U1Rld2VkdGxSKzhVd1ZzYTRCTGg3ZEhVczJtc3R2a0Y1Q0UrbUVhTkpRYTNtZmJNejJmTlhGZXBMeTIzN2hpWTRCaUtRNDR0MWhxbzh6UUwxZlpRZ21tcGNLUWF1MTM3cDhScFdkVEY4aWlCL2czYU5IcmdMc2FDYXVOMGRZT01lRHdNOERHeGNpUUl0VGtsSVZwYkRkWG1EZWdpVElGQWZVODVNT2h0RHdLV2JuSGR2NWgvQWNOQy9ZZUVvd3NPdllteXNYU2R2SW1yREtsank1L0tSalMxMWY4OS9aVDFibUFYdUgxendmUlJxNHJJOFNPSTBlUEZqQWs5L2VDdC94WHZrZTRvVGkwcnFkUll0MzhmbTdzeXdrbEdmdWErMlp6c0ptTHhsREs5b3RwRU9OcWNZS1dxYVAydEZMTnVHN3hEUVUvYzFIbUZCZTBIQmZ2WTFsTXVDa3pBODNhMUljbS9veGMxWTd0emhiRTltS3lzZXg0dFUrV1ZkMDlnWmkyRlVnRVUxSWJzN1FzVWR5ZXd6REVvcUpDNjU3b0dna0JiNzJLWE1IU1hrYWVXRkZ3cTRZVWJ4WVVDMjlSbFZ1dXNXeTZoL24rTVo1anFqOThaWEsrdmF3SExHM25Oa3ZzdlFQRHRkUzhuTkRsNDBrSWNKOUNaZGcrODJzU0FOWmsvSUdXaW42c3FBNHhsRXRBYmFsQkFYc01xN2tEdDA2ekppY1QvSFNoNGZhUWtRTEJLY1JJNnVJVUFGbDA1SGpLNDVwSlk1aUxXREVUd0FLZzlnckNsVnkxMXQ4QTgycEwyczRKZDVjYmdMeHdvMTV0MWpOeUM4UXJFb0NYWnZRYVZ0cDVxaUhmNzRsZkhxaXltdjJ3QjRkbUFJRXJPaGtxQzh2VzRVSmRIUjAzQ1FQSUphSjAzSzZ3L25kTW8xQzZsSGZabmJJaHNXei9tVUVWOFpKNGl0VVc3dG1kLzRlWjlYQXFzUCsrQTRHQjUwdHJSM2FtZ0FGVFNpN2F4UWJDM3g2RWpwdzlQTlB1K2dOQ2Evajl2S1U1SEt2NStRMVdwWHQ1dFFHK0dSNmg1cVFpL1JQNGY4QnpuYlAxSDdNZHBGTVI2Q3BGTUN6U3JoMDFPQm9ra3krS1BkNXlKZ1E2RnFxUEV4aWtxbVlIaDFONVpueWpmZE81Uk92ZWZnTmwweXh5eTljZmI1UDV1LzBBdDFzbTllQzNHeUJuY1JnNm41cVVtb3R5eFlseld1UTN6cGljMHZEOFpqa0lTeFN0ZVNaemFMZlc5SFFKdjZsbm9oVnpVV0Uvd1NzWlE0eS9qZ1NQM0dyQTBsTnJqRWpFYUNoTzEwTno5TUcyQzhsL0Y0UDhuUnlJaUVremZZVEVnMk5zZXBqaVQxU0J6SlJFNXRIeXlzOXlqUitDUiszenNVcjlueVhLdXQ2Y1VKaytzYTJCMmwzcUpWVkUwWmtUb0VjZ0pjWGhBcTlvSG1ramczQmc0VTlMaWRDZjBUMHVVcTBPNFgzdWJwYzR5MzZSWlVLOEZEd0tMeUhudElwL2lJai9sWUZWZk9wZXdmTDZRaFlVdnhiYnZTaTFQc1VVbm9FcVNEcThlR1BJUE9QTUhQSnJoMEJKRHVDMWlVVWZlbDdzcDNpZmxFbVFmek1qNmYxTitTSWhuU00rZUJ5NFJGaU1KWW9SMkJZM0NPR2ZlZk42MmlkTnFtOTB3MXlOSUY4aERxRk1GUmVvMUJYdk9BYVdwd2FzdUdEcWJ2NllpTzRrTnpteGJlWm5kZDlEOURReW5sZFRQQWFLTFc5VDFrcHBsOE1PMWNPcGNlZ3RaWlpjM0pvcFA0dURSU1hNb2pQbmpqempWOFdtVUFmeWtCTFdJeEl3ZkUxOHYrOTlwK0E4cGxOdzFVamQ3Tnh5MHhCK0RHRGkvYm5nQmtzVmJGbEd1QUcvaCtHNVZNYkhVSkIwY0F0TnBUT2JRSHZKY2VOczIxTmFMZ1FsbU10K2NEQVJSb2YreXVOTzU0NS84bkpFQlRrczR5T3J0TXhoeEdlYk54R01VK2FlN2NIZXZ2dkRYT21Pd2pVKzBXWlZqQ0hPUzNFM0hjYk5yQmhva2hNU1NxSWhiU0lFaTFWRnJVUWVJS3JvQ1daeHZmaU43T2xCNVJueTgwRCswSnVxa1liQ2pWeEpuS3plVXFGalNuWWRmVXVaU1o0YjFsVDBOamFwWGE1Y3dIZkZXZlhQbUk5WWNBMUZhcDRLQUZUOExyaGt1MUg1YnM3V3ZGdXlaVFpSSUNyUzJNRHp0bnN2eHNXNm9sa0REUVA1ei9GUGtNTlN3WXlTN0g2NVdrMStsWWVJd2xSMjdtZk5zQThyS3oyMm5iUkJXQWNWc3p1UkJOWlo1Tk91RnEvWGNuYVdJbmdJS1VGdW1QbXJsUEJFSHNWODUzRlBOKzU3cFpMdFJ0VW5DMU1RUDg4QWtidlAwUHNYQ0xxd1FxRzFsZ2oxK0hJSlpKdk5CaDU3RmhYbGNXVmgwMTNibmkvamtmZFFSWTlFZEo0YkRxVzk0WXlQcTM3emdCb1F2ZGVYSmVvWklIckZyTWxUYWxpV01EbGowTWVGeDJHRzgxM3ZJU1JHRytXbi9nY003NHRXMXk5NjNaK28zOVZ6Uzh6R1dvWXpjbjRLdXNEa1B5bXJ0Szd5SkQwUUEzNkNuZHArcGZtMmM3b3Bmbzg1clZ0bHp6NWN3LzNDSjBIbi9GUGE3enNxbU5MMWF4cEVZb1RHU3pCYU8rYU9aSVc0Zi9EanhjN0ZZd2VLTW41V21teUc3dDg1VTNSQjc1Z2g2SnM3WGs4aC84SkdtY0Z6eHNPRHRNNG50dHEzMEpZTE1zbHFjZEpzaVBQRytRVHRCbEJqTVVoeW9Gb1BQUVBkNHpuUUR0VXhISE9oSmFFNCtUODN3TU8xTUdzaGxqL2oxNHpiT3ZhRlJ4VWN2NWZBZnhVL2dKeFVySkRtVzQ4Q2pNaVNKQkw0QmU3YnBtMnVZU3JEME04d01rdXhTY3NPWmNVZDR0TXBnUFRyTTJaNlFoNytETmE4eDgvalVuYmwydDIvQXl5WmxSeGx4NmI4SlJjSnRId2RORjNNV2JBTDBnZmkxL3E1L04wUVpJZ2wwYkRuSmYwckE3NUNUNGc5UlBUbCsxYnZtSzVTdEE3dFpDRHQ5ZUszQ3hXS0VBSzVWQlBuOWdMckMxeTNheG0yZVNRQlRjYTYxUUZHemg4V1hnQmxUOEQrNlBhVjcwbUZjZithb0xpbW12TXNFUnpjR2U5d2hYbEhyUXB6NUhhOXJ4UUtNOVR0bUpGZWJTNlNzQnRaSzBvcFQ2WlhkT0gyZ2pjQ1hjSHNnZ2w5c3Z4bFhUR1ZuWGdQdGZKK1RDVnpaRFZUbVkwUzYvZ2lYQVBGaktjSjZzY3FlKzM1ZjJ3dXdUQnQ2c2JjSzVSb1hRV3Y0NU5qRDBibXdtcDVhS3lXMVAybmdpNy9wY3pXREM1UDJQNWtwNVZnbFlSMklGekJINXpSajVsY0x5K0JPNC9YTkJ6Vk85ZmVMTittb2lXY1M0QlNzODZDS3BqQTFCVnMwYXNkOUNleE5zdE0yWVFGREt5c1FITmY2Ry8wN0tyY1Y4MU5NQXdqVGRSNFhhOFNFWVdBdXRHM09wSkhzMmhqMUpYTFV5OE5vRlByTUI2UFJMY2FuWitZRUZsTUhhYVZUMHl2R1FYamVxQUVIMUV2RmsvSU11WGp0U1BuQ2g5MW4zQ2tBQndHSzZib2UvQ2dDaGRBVXF5S2xLV2NsSncvZ1hiREo1VkEzcWNzMlJEUEsyb0YxdThJRWZKdWhnUDk4V0tUaXBRWGs1dHo4WEdBa0lPLzhiYml4aVFmd05SSjJyeng3aE1JVytUZm1zUU5NQ1VJcytEbTkvTlJ0R0xNa2dFU2VxSG5BY2hxOXpVR1dvQnY1TFNCV3V3QVF6MmlTc1ZaaFcrTHNRM3BIanZPNUVCVHV3MHpyTlBHa1pmb284eTF5M2xPdXZkb0RNZzg4RVVpSUFWd25NSUFVbCtOUFFMcUNFWUtsb2I1REpTRmFvWDdDL0cybTJrUmNWSTBIZG9hZFdtS0hGZlRsWU11UEhoUUp1cThLb0JpcTlPUk9rNTMrc3dEQ1NERnU3RmoyWXFoNVJEUVJpWjk4aENZcUxPWkVxUFhYM0RsSGVaR3VKN0ozc0FVcDBucmc3YU9DYWhlZkx1QkdhWENrMjR4N3hCWlZLVDd4NGZ4ZUI5OGNoWEkxKy9Ta3RHdDh1Q0x1TDVFaENZNTh6Z1hTZkszZEFUSUZEY2NGNnU5eG1HV1BtRk5wNGVSOGZ4NEdPQmhpOWdUUklWWm9wdFdUVGpIdEpFNHB2M2lhU2FOek5NcUxLWXFuei9hYjNxUG1IZVUwY3YwV1hxNWR1cUg0UHRoc3EzM2pSVjlQRjRrQ3RGMFJPUU9CYnczcGFTZjhRMjhmRUhRbTVnN2JEbjJCV2Y1TjhPQjFBNnl0REZqL2JTSFJDVVBKOUV3S2hRM1ZPcGtBeDN1aXRuOXgrZnpLYWhMZVY0VEp0NFdvTG83dytUenliL1lMT1BreFN2VE5QMkh6MEl5SnJiNDF3cHV0U0JQbTRqMWE3WnhlRDZNWS9GTVhFYTV4SDJoRVdFREdKbmdyU0EyZE5jdnlNNDlKaWVVYWpUNHlLYVl2ektmeVNLbDBHdHh2d1pTYWMzSFFRYWZKbld5c3NKUXJHYTVudGRsRFE0TGVaczlZTUpGVkt4enhBKzBzSW5BL0VqTWdlR1Bvak9VdCtYeUcwcHZ5NG80eXNweWVVN2V6SmVVT09QSmk1dk83RGRTRmJxNkU3R0NrVC9heHVmRVR0eDdKTlAwUkc1TDl2T0plL2UrL0VnUWoweG01bnNZYVljZXFtN09YbHBkcGN2MThOaHYyNUt0UFNRYkFzbHhCRWNvcEpxV20vbkhKMTkvbnFSU0V3S1dsVjlvaDFBelhXdit1VDVCTG00OHlGdW9ZNjRUczJQUkxhRFVEK1NzRXdWUTBLOHRGRTVPaVRFS0NLeVo2UFFtQ1FPNE92L2FCMFNRYWl2Y2g3OXlhU0UvM21KT0l6YkEyR1dPZEw1b0dzTkxzQ0dzR09HNnBjNFVQUCtydXkwUEhPNm9HSlFDWnNmdlh2NklEaUNBMG8yQ1JZQVVnbzYxU1dBRk0vdVRydTF2c2FxVmxTOG5VVmkrRkpJVCtmR1g3aHhJYzRkb3gvTE1nVmFPdEZBUlBRVjJqTC9hZGtBMmwzblFyYU9teVR1d1BLZkU4eXhOQ0VYeStrUHBQN1VoWlllYlJNZC92bmJBZHpoOGdsUlNyMFhpcVJKYm1STStTNWs5WllobDltUm5lTDZxaHFSMy9DK2w5NU1DZkQvaUlmTXQrU0pkOTRGLzkwUWh4ejlpZGJpNDhGcjc2MlNMNnNlQ3V1bllVaCtPRXRta0FNREpBU3RxR2tIcFVyN3phS09Tc1gzWW1ERlAzNHJEQnR3dUoxTnhBZzZoZVR4MkV3d3gwYlBsSmx0SHpVdm9wL0c1QlNuVkt2OHUwdk9sOGF5U09BQ3BBS0VteFUrUkdNVDNxY1BYc29LZCsya2szN21tMlpqN2JFUzVuQ29PT0hNNE93VmxIWHVWWFEyYUNlczNWcXV5dUhreUNrZ0FFcFU0K2VKQjM4WXJLNE9OaG4xY1pjeEVpalVLVURITE1iQkRLc09rV3FPTFd1WXVUM0REakpQRlN0NytVemZ5Y0hPS1lTbmsxZ0VWYS9wbXY5L2hpWlFuS1hVUFhJWm9zci9WSklLUEtWNmROOVpReGgxNEtDaUROQnhGc1Rma09CbnlyWHdTTXlOVTBwMHlrWVc1RUU0OVNoOC85VlhJUGJrMmU3TlBWQ1FwbXBVK1VyK3JBNm1BMXlpK2ZrNklPUlNRcVZHZ3RpTUZsbkRsS05IU0FrNDlSd284ejZUNHVrVEd0WFp2R1dUT2h6dGgrMzVRbG5DdUp3ZUxNdnJJMGQxY2drblBITWE0OUw1OUFJT3JhSU9FRWFyRGFheGFxRDFPeGdISVNoSTJPZjBmeDFoVWdkSUdNMUZmSWFwT3hNdS9jdXprZzR4aERzY2ZMbTlZSThhN2JDYmhlbHRZNzFIZ05DYy9DbEdVVFNMVE9GTlNMbFdjUzhZd0dETG1sSGFhTFNKaWdZak5TT2JFakVJWFdTNjAzMHl6N3pFalUxQldTUk1SbW1GSHZLRW4vT29WdzI0TWxKT1ZHSkpVcTBPV1JMbkhRL1BiTGNnTzNqS3h1NXVLUlFuSWJsQTFaZjI4YVRYbnFzNGtyODA1YnlXZ082U25Ed05pVWlHMWh6cDFaNmFxc2tjUFIvdjliSTNDdlZ2S3ZuNFdRZGovMFRwZHRpNWZLYTdPeFJmMUdQMTQ0SHl6Nmlpa1hvWlkwcEkwTCt3ZG4vTVhuY1FrUFlhdVoxZVZHVkZ5TmJpajBJWnByQ2UzcTBLeWxVSERXN3BDOWRYR0pEQkhtajQ5NXhWMGhHWFl6czhWUlJlRWpPbURNRzAvMGpXSGhYSThvZ2J5SnNDeTFJQjNTYm9XN0NweW02ZXo0aTNIMHlxWE9ISnVUWVdnaE9EY0JlWU52TVBISGQ3R3FTQ2UvSUd3M3JuVkN6T3RBcjJEYmhHY3llU0w5OCsrdDZTYm5VazZsTFN3ZS9DL3FucjJDWWVxR0h4RFRjU2c3TUhZZ3ZRcmJxUkJvQ3ZBZWxCTUVXNHl0c1cwVVRyd2M3U2VKc2VPNndoVituYzFGV3NtNC81aUdDZXlnNHA3NE9haEdtTDhKbjZ5ZUhTLzJKWGlLT2N5OTB3aTBtTzNUUEZhOXpLUXJVbFMrRlAzUlBRYlloYWZQVHFOekZxbG04Rzd3d1VvWE5ja1o5RE42NWtVWlVvMWxsdjNvL1ZMVThHR2FJSW1ONTRCa3FCM2ZNZ2dsMXNTU3Z0YlhkelBmVkxNNCs0M0NVa1RUc0RWUDNwUFVCa2R1L3doeE5UUG52VStLdmp3V1o4aG5Tc3BFTitFc2FwVHhwYjJnODBXTm5la1QzMmFwZnphRzZ5Q2g3RmFiSFVQK0NjOWd1SzYyelVuQUpBaEVZaU5KWlB3Njc3a1RhQjMyakhDVzBUVEgzczRwWGlNVEdPR0M1M00zYUM2U29FL25SZ0FJMjJvRHIyZWhiMWJueVVNd05TNXM3cjduUVdobXpERDBoQTkwT0ZPazVGbkVaaXRJVkY1L2RrR2FTb1JMSWl5OGdhTVZtbUFnRk1aNXgreFBEVmxMQlN2cmtYdHJFT2t5N3dKTXNkVWhOVG81NStwS3hlWXVOYVNNL1AzMjFGK3hEdWc0NC95cmE4R0k0ZWNDbVZldE9UUHlDYzZjTFphdjk2M3JGbXpDTnVaMC9jWUNzYXliN2pHOWNDenhTT0o3djk3K1pla3BmOGVxcW5ZWEJsdkgxYjBVaWMzR2lXcXBsamlkYTZNWkttdElvN2o5cDBPQzBuZnEvZFhNUUR6dVltMkVRdWpXSy8zMzZscXBhM00rbThtVFUvWVVzZzExSDlnWXpVZC9vWDJjb2RiY2RXRkpxeGVpSnNVcWRNb284NGVLSUUwSWRucG1GMmk4R1NiaCtLNHF3MmVxdTRCWSs0dkpSY0FRcGF3WEhTMG5uTmcyRGU5NzczZHdhSEtjL0s4a0hqSVYwdDdiclg2K3VScjFOZUUrRUJ6T0pvMUFwVkRscjlJdUtyTThuT1plVFNXaXQvVGVhMFhDTU5uODlsWEpXc0piNWxMNnViZEZpN2o3SzNXNW0yTFBaVC9QUXcrUCtJRXJuM1JYRkZkTmRhcWc0QmpzeGY0YTcxTWlrUWNoVDF1L1I3NHVuVXNpNzQ3WXB4U1E2bGN0QU5KbndPWno3Q1c5S3NadS9PcFJ6aTVLZFAxMElub3BwcUNuaW9xRW9KM2pOaCtRbmt5aVdYbWNUcy92ZFRveGcvNEFWc21VUFRZcWVSSXJhVGowM2hRdllQZ1kzdEhadEtsSG5WWVZrZFFnV0NhTTdXRjFLVGZmclR4bU83TVVmaGcwZEpLbmx0cDF2VlcyZ2dDSnlkSTI3WWNycGtGRi9zVDVoTGxJeGExeVBuVVN0YzhUdlROazY3a05ZVEhYcjVnV2x2VU5YTDBEWE91TEJlUFRSUEh6T0RLL1hsdEZPRWlSYmtQTGFxWUlPQVI3MUxTVDEzQWRmME45elNmRll1cmg0b2s2NlNpS2tab21NMnZpU2VzTzVWbm04TkM4aytHSS8xanlUYndpcUV2R0xuQkFOaGR5RGtWbm9QR2d0UlRKaVk3cUlZWjVNeXRqdFUxa0djRUJKTWRkcnJveFZEdExvcGlWRlNEdm1tU0hwdHlYZEFGUWpxZEZoRnFPNkovWmJscEpBRGpHQnI2VENDc3R5bEc5VDZhekViajArNGhMUlpwY0hiYUxrQWlzV2xOejM1THhOL3BmSmR4bDMzTVFwelNHVHp1RlBHWkp3T2Y4dHBsbzZ3M2VtOTFYSXZ6N2JHMFFGMnFqRXBOQ3hxbXY3RXFUR3lPZmdUZktUNmVsL0wwTUdOVjRtY3N5bHpVMFdTNWU5emRSaWhPTFM2b2Vnc0c0eGx0ZHlHMUtFb1M0VWJLRHduR21pc2hoM3JxeGxlQUx0Tkx2emQySXFiQnBETUU1T0Vkd1p3aTBvcHB5NzNXcTdSTmFFM1NIRkVTQURJTG9BZSsreE42bkV6VVdseHBFeDRTd1BZMTk5eWswSTdKUm15NHByWTBJUEJxVjEveDBVUUZPOEtCc0ZxbEhrczZmbEFNOWl3eTZvd1IyVzBncE9WSGdXeThycXBUcGsySEU5SkVpTTFpcFMyVkdRQnVXT2pmcnYzMmd4MkVJWkxGT2ZOdW9IcFNXbnVWTTRSMStEVXEzUGVHdFFDaVo0MkJqTGNtT3dHNzB3TVdRR2swR0tUWHJlMXdoK3hkTERoNUNSN1hxaitINlpSdkpFN1dWK29xVElvSVZJQjd3V2I0cUlDL0xxMDlLRWZ0eUFxTEZMOUlVT0hkMjFrVDV1ckc1Y2JDMWg5c1dnVFgzNGtDRXN5ZnpuNVl6aS9KVDhmaHUrdGE5Qy9wQ2JqdVVNM0l0RjNFeHFmZExRTm94WGRZd2xIY2cxV2E1cWlkd1lsS0p1YloxRnY0dWJHWlBpZzcxV04xRllzNy9hNm5rVTFqUEtKRjZoU3Y4alJFL0d2bzFMTUlnNEgwSzBwaFVhV3JpeUlJK2t6SU1JWlo1eGJVaC96Zm5EczNkU0xPQ2tXN2VKTTZ4TzZhQUR3cU9DRndkR1ZEQk41bXBmekR2OUt3ZEM1UHM4a01lZTB1MmE1b05jTXZWcjNxYWdtdzlrWVdRQnJGRGozcFk1UlJ4R2IrbklsSWtqZVlud3ZMbEFsRVZjaTA5bmpocGVoWEtJa2hsbmZwbHo5Q0FmUTdNTEU4TVZGYVpDR1B4VHoxWmpGR2JZNVRzNmJVcS9mVlhrUzZwb093Nzd0aDNOTGJsRW1XTzJMcWFBYTdlYWJsNE9PQUg2YkNEOGw4YWVJbkVLdjNnL2VzY1d3NmRPV2cwMTByQ1dpWjVYdEpyUEY1c0lvY2s5NkIzanBLRlFETGhQV2taMUpyamVZZ3dFODFPTlI1Z1pETDdRdVliMXpabXRoSGNNL09xakRXOXZzZmlNMTJOcm1PRXBlbXovVjBudWJ5clA0cDNhYTVHUmViOXQrcEYraU9RVkx1MmtQYWg3TnRMQjk1aFU4Nnd5Uk93a2h1eko1aWJDMDE4TXM0ZkcxaWFRR1g4aUUyckhkTEVLTWR0ZnpOV1RPQnVtdGlvSFRFcFpsY1pPbGdJdFNBaWl6d1RBdGpMZWdzdmRrdEtGTkQwckNIR21CQkFyQ1B0VEZoYlp6dTFUTTVIUFRoVnpEVmdvVEl4WGxITlFnejJENWNQbm5IMFY3Yk9idjlnZG1DTmhnVnp2V0laSjdlT1JwVE13eFB1WlZSeHlrYXJISEd2U3hSNCtzZE10QkhBakpJNWNHQlI1RmxhQ2QydjdNMFVEZ0JJQnUvaUN1SG5NVWRER3NuWEJYMTBFalB1ZHNseGcyc0lMSWJUVElVenNTdnlHa0tzOGV0TEVjVWlVWnNkN2hSY2ZvUThQNVltZENvMjJ6Tzl0VGtZOCtoNlB5ZTlNZXBmZTl5R2wzTS9kT2hoTGVERlkwMFJXTFEvYVNhZ1ZRL0RNWldnekRFOTc5T0ZiRXQ0MnhXTkdJSS9FQWNBeUVWR1J0YS9PR2RkNkJrcktIbVpjNyt2T1FDQ1N2bHA0YVhrN3FnVWFLVUoyWXE3TGl4cHV6blFXTXl6QzJtL0RkSWc3L01xNXRJejRjVFNadE9CU0FKWnBHZk41THB2VjVQUXhSWGVoS3EweHRsU0VFOGlMUmtMU1ZZRGMyME5jNkg0ZnV2SDdudkpTdzdBOEMwYVcyZHRDbHpnM2F3Ym9GdVdMd1FLNzRnQTdpblBINmh1Z1lFcUhFcUt0S2lwb3dOb1BRTU0zZzMrRk5aTjhoM0w1enJzb2hUSHpIWlhvVlZsLzMzeGhsQ0FMMHB4dzFab3JabEp5Z2JaTC9DWHFrL1ZwcnZ3WmlJeHlzV09PSXkzU2liT1B2S1JUellhTGlyblBKa0RWQ3cvamZ2YW5CdDAycWp0dEVnYzdqK3BvUEFpTDFxTWZqL1hjb2pCMnFySUMyNjFKU3FhSnA4TDZiQUptTUtMVGhQcXkreWNHZVhqWlAyeHZrUDFwTk1CMFpKYVNudHpRREt3MUcwNkRYSHdRT3A5d0Q0UlVtaGpDUm9xT2FtRVc1Y0ZiTDZUM29pdTVtMHowWk9hZFJOU3hWd3VRcmxZYlRzckN1TUdBRVY5VnVsZHh6ZEFuMzlCMkppb1U1Tkc0eElZRTNzYzRvYzFmZ1VQRFFEb3d6WU56RzgvNkFNdFVtQzh6T2F4RENRKyswdjJwZG9ZbFppRDFvbFhDWnlRUHkvM2RnUkhhbnBaUWxLdFl1djVRbTNyR2dFUEhBM2xUekVxbUlCT0lybEZRM0tkVEg1djlMY0V5QURhSzRTL28yMWk0N2gyMHJKdXI0djVUanh2djVTMlZzMkNZTlcxUEh3UnpERjZKT0l4YlFXU3UyWGJ3bS9sU09DTHpHUVkzNWJxWmk1MmtUdThvbVNKRGF1ZDZEcjh5MUFIUks5KzJYblY5bWJoSGJZek9VYWt2ZGgvR0FIZmxtYTZRZVZkc25kNVJkWTRtMlhaRkpCbmgzdWIydXJYOGkydC9TM1NBRUJ1UXhzdHJmcnFqV2lWMGs3cTR1TEZEWG9tb3FvcDd3NUVpV1d6N1BmcFUyQzJDRGhvWmVsTHZqMXBsZGorL0VxbDdJNVE3U1B0Rmw0akRzbCtaRnNvcHI0NUw3TXZDKzRNMmZWMkc3RXAwNzJORGk2SjNsRDdobTdvL29DM1p5a3pXelBDcml2OVcxeWlDRUdlN3N6akRMQlZCM1l4dXI3U2lURXdBSTB6YkthQllhQnRlT0t2WXlsanQ5MFNBUGt1aUhNYVNsMTRmU3ZOc1Zzbnd0bEhSb25BUm5Wc28vTGVVVFFaR1FzTFJHOXZnUmo0bE9Zd0xnaHd0VmZpWWZVMkp3c1gyZzVCK2xpTkM3WGRiUTVoc201OFdsQnBHejhyRDFlaFUwSXVTM1ZjMU42YThRdmF1M0xzcDY0TE5UZWVBOHZXWDE2YTcvQ2VNV0grUkJOdGdiQTZ3ZGxKTlc0RTE1Slhoekw3WFJ6Ym1HM0s5YzYwaWhuZTVnSlRTMm9xcGx1dXRoN3VuTjl6NFlydUN2MmE3NC9IZjFxcHFDalVCTVZjbG0wM0RUTWVVNnBWYzd3WFJRdlBNTEVIU3gyYThsSk1TbW1aNjJNdDNHNVFuTzVMT1U0TUFNZkd3TUIvTjZlbmFRMGM0Y1dVWUJFNEp5bTduWlp1bVhPQWdBM1NUeDZlRGdVblhXWXlIU1Q3L013VFRHKzFrZlpIVVBVWGpnRmJURWdBVTVLbEVKSDhBVlZZbG9wVDhRKzVPd0RyUWlFRGlHZDM1bEpJV3NteS9sSHBzeUxaTG5pcjByekdVdnBpdUt2Q1htRjNnZUtZSXdsK3haajVIalNmcklvUDFjaXhEQm4veGQ0OXN1MHBsb3M1L2pUR1NNaS9Jekk4VG5JTmFIbTR4K0gvdFYrRHdUUVEvckhCcnVyV3dRdW9oOXo3RmNIMVc3UU1YejB3UUNBRTlHYi9POC9Ld2U3VTIySzJOc3dVWnRCQmNaVzVLeTlsM01qZ3ZHYVBuYkJGM3dOcXBuOEtqck1CM3pSNVdSTkVCc0c0MVJQZXBjVE96UCs3S2pQMWNDVm1ZcXJmOTk1UlBOS1RMRnhyaTBuTE1wRFlxSXBENG1Ha1lzbnJWckh2NElkd0diRFp0Wnk4amJuSGxkdjljRTJCTlhQV29tM1kyemhtdmtuWjZ2RnU3K0taSGFOS2VuYVg0cDBRdlpQUk9XdjhJWDVOZmwzcmZpa0NVYjViS1FjbWxtWjkxenhQQWg2bjViaDJFdUZWaTFjandybXVXUnlmRmgzZm9zM1RFUnh2MEdUSjhxMUxKSThYRmU1dDJ1MGUrZnc1VTBFb1lESlpRcUVKcDBlU0E3UWR5NE5CRG1wUTBFUDNGSi9NSzR2WEIyRUFnT0tMYWt5Vnh1bXFxSVdSSDNVY1lYek1KYVVKc2hJdzZEdCtmMHlkWU1acFRPRGxXeGsyTWdSZU9SeU90N1dsYXlhc2FwaVdhckJPMjBPdFJ5eE9EOTg4RG9DaXJzYjFGUk11dTFwcFpnQzh0N0syb0VQTjVPYVJrTzBXaUNQRnh1Szl3eHdZQ2kzNGdJWnQ0Rk9kaUtwUFlZVWhIMkxUSldrdlRMaVZ0UE1iVjJ3Y2NSU3RIRmkyRVk5TTgzaG00ODQydWd3K3lLTDlIdEh0YzBLL3hST3RBcnlKTHJtVVdnUTB4S1dZeTBJQStjaG41YS9jUUR6cmVPVUpJQTdiR1F6b3RaclZ6bTcvdGorUnNVU3NVVWluWUZPZDVPWkhCeHZiWmc2UWdjcGdwdFU4TUhzazRLekNBOVRpM0lhOC9JQzR0RmFwZGNLeTNqZ0U3U2thWWovOHBRamRTaSsvdHkxcGZsb3U4TEI2YjlHb1FKa0hjbWtkczFCTUN2a2twSURSbU85MnNQVXVnUFpsWjczM01JQ29xcmZIakNNTmpmQ21UWi9VNG9keTRvK2pLT01SeXdXYXRwTVNzY0xXeXVGTjBLV0lVc1BiMlZsTENFOVZBbFVWaTBuOXRDYmsrSkZBcHVUd2tpRW9KQ3VqVzV2TndiTkN3dUZOMURvakF6dnkyVjNTeTZHaklOTnJBYmRTYlF1N2FYeG5LUjA1RDdHZVZXVDZRaytxQ0pWV01Mam80Zzl4T21TbGhiWnFDT21oem5pUVA3S1J4YTFBUjArK2kwdStEWjVxbjYwUTBXTkNlc3k5K1ZPeHJNM1phTkc0UE1oVWdaenhRYmZpMno1Z0txYnhLVFFkaXZRTVF2UUUrNzhkMTRobW5IRzRTRFFjS1k1bFpHeTFLbTJWeU8wU0RockVvZjdYaEJnU1ZjZDdqdDd4TXJvSzg1VHVBS3lneGhvUE1VZUM5aDB3Q2F2S2FTTnRRU3BoVUJGWmtqZUVpNGcyWkwyaXR2WG9RSnUwMFZseFE1VmVVcmVXS2dTM09jSTE0bDJ6VG1ZZ1BvaTh6VGNPRlYreHAzYnRqNHlidmoyTS9pdDJtN29sdjFsQlZBYTJWVXBoY2xXN1RGUVFjQ0Njbmg3ZkZNVko2Z2JzbG5VNEFydEtFcG1Jb00yd01oYjUwVlFnYThnU3k0M2E5UTZNSGFZdXMxTjJObGZNMWd2TzBWOHBpbGdmVlNnUVpZTkJ6T0dRUVlxVXMrL0ZmZkwwUFNlN1FUaVB5UDBwUnVsN0N1MFFYU2ZmQWhpRWI2elN3UlBoRnhMR3crOHFSdWFhZVNJVUJtTEkycC9yeHR6a0tJaC9qTkkxL09wbmxSa3Q4NERZSWhXZ3JwUTdKdHdhd2JWMDNiRkJpTXYxbytWQi93MEQwWjM5dVovOG0wYkxFK0h4dDZCZ0pXNk5TQzA1ZTVsUGFGcWUwdnQ3d3p0QWVQays1YVdYaWFoZUtIbFl3Nkt6WS9sejRjbEpnNEJHVEhVczJveWN6dGRWWTN3c3hzdC9YWjB5M0J0ME56bXhycVBmZTNvOG9ZUXN2Qm0zNTZjR3ZMN1JKcGcyakdrTHBxVGluRmVBMGc0ZE1ObDhYMjJVSDhyTWJBZXJzZDRMVFZ2bXhMaFVTNnZSbGI4bVJXeWIvUnFybDZPUnhCQ1dZUnRtU096cFJwY0I2ZjlXbyt0Ny9DR1UxTVNkczNnMXF5VXlzQlRpK2t0K2s5N2dTc3FnSGJzRitYYzVBOVpubGdtMFNtUmIxWEl5MDhBSDFsUkgwekt0N0d1RCtoRnZOaVRveTA4WncxUEpsdEZRaEJIemNpQ0dCVjJaZ0YvMlVZVlhYL1hBVVM4YURaZVRET2UzdkdMVmYrcGlsUEF2aXlrM3liK1pNR0JGUndGUWx5eTUzcytFWVd0UGFxaTAra09oMXdWWWgwYmh3UmE4Zm90L3N4UzRreTZJL1VmYS9sUENKS0pUSFFLY3hCM3Vnc3FnZDZQR1BoTytIUzd4cCtJRDZIcmpJUmx0b2dnOHU3N2ZpVnNlQ2xMTytCcUN3RmxVODJ5YmxxL0lGOEdxWVEzVWthQS9vVGhDVTZoTTJ4UWdvRXlTd0xLMUgrUzRKcGVMZjZqZkNLMnNFU0lxN3A1ZVBlVVA5dzNJL0gzaU41bXpJUlpvb0gycTVTbEF2MC9BdlUrc0R0bmJTOEhkYVFEMFI1NjZlc3ZmWGhxRUloTUplTWlBNjkwdFlkc1dCa2xvc3E0ckNyVXoxWHhWQlcreFdUTWI0bXpCaWppcTZwMG9lelg2ZkJUK0o0QVBwOThnYnNJQ1NqbXJkaUtvYVZZaFVnWG9xTkdHdXVkUDlqL1FmU1pPVGxLSDBCbGhnQzViWWZ5RzMvaVhQUWIvd2hqcXJva1dXRjNLeDY0Y1hUcHVGVGtyTnlhRlhxelArRmd3SVV0Y3VhTzJMMks1K3Zta3BONzFUd2VSbHlwZ01VQ2x6aFZtM3RKa3ZOQ1k4TXhDUGszN1BPWXF3N1NCZmVObVRNRHdYUTl6NW0zTmZ1MERiU0MzRGQ0aTBGVU1TbVNuMHNsYnNKZ3g2NG9LQ2NvU0lRbGhEWHNSR1hPTXZPSlFZREhHNEYrMXk1RGd2bUUyNkpmcWxOak9oWUEzdnkvRktwNHE2aVJpeXJvVXUyeFo3WkpxNWxES055TEFJa1M1RlRuSUt6NXJyUFRYVlkyalh5TWVwNUQvWGN3MGV1WEY4My9rZkJRdmZsK3Z4YWoybnlLV0xuTlI3NHhYeFMwd1QyK2F3OUhjLy8xcE1WRk1oUzI0aWF4dEY2Q3F2VitYNkxSbTBrbjU5VGVYR25qZy9JRDNTSHVONFFpdFFtK0xzTjUzdTdvcUxPYXdoS2xQaDcyc0E0bVVOR0VHdmtvTFhBeUYveFd6UTJyUjA3SHBJaTlUd3JTRkxQbHRzK2pSTHA0WjVibkxnRUhBc1huVStsQ1ZUNVFOQnhYKzdiQjZBWnNiR2NtbEhQVzUyajVFaW80N1VCOTZVOHdqQWNRcWtNakV3QXpEV3RqNEdGSmVEOTdrMEZ3NUVzTENvRFE3TXRpL1pkZ0hjRlVWejZoWTlNQ21laTlNUFZXMjFDbW1Ja0c0SFF3YkFHaXRVRURld2dTR0tRek9lWmpEQ1kxbDllblFyNGlqV0tIb010WmJkbHV0WkZnbnI4TTFCRkkzWXlqNytxVzBHcFJxM3FHVHg2QzhqSVdmSGEyKy9UWGd0SktLbXNvQTdlT1ZFNXROWExwVXhjUkQraDhvWXZjZmVOUmlySXFNalF4MTlzVENVQXpDWGFPTFRPd3FrRThKMi9DNmpDTEhoM2QwbVp6MS9mWkNMMk0wTzF0RjhTbUJBNnJwZVUxNERsYWxRZEpDd2E1QlZGWnJRREJkeXVYWlhjQ0p2S3ZMc0tKUEttcTFIUlBuMi9kR0xsK2w0cU9MdFVMZzVnZnQwQ0VnZ2NOWnAwWEFjSDl1MWhLNEZrRFkxUTNBZEZSN2V5c1J4cFVSNUNoMGJTMEtkN1NQNHpDZUZub1ZYSHJreHVGazhib0hlakVYQ0NobzYrK3BzTTM4bnVuNExUTGpTQ2dkS0lpSlBsWTV1dkZZNFUrM3JwOE95UzI3WVF4M083U2ZxT0pOMWxHN01OQktLV3NhTjJDc2MyRzN5YmJkeFhNQ3doRzFmV203TzN5MlJHYkZ4SktNK2hpaUIvM3BYVUZ1TDZIS1I0TEJDem5sVTRaQ2ZyTkZsdVNzdUcvcVNLRG0vRlN2Z1g2d1ZuWFpvOUN3ZVhXcmNrdXl6d2tVcFZEbXBlWHVlSTFIWDZWbWtrOHRSN3lZanVVK0llbWNmQVR0ekVVQVdzSWtUdUNHOStFeDZhVUlrZjA4c3pEckowNDVsQzdWZ0YwWG54ZDJFREk0ektpbGRoVTBGaEd0MkVUWlRBdmJvYXZKNVMyMXNPQ0FrV2tLSlFFTndXOHNIZDIwSDMySnRJM014K3hSK1hvSjh3d3JmMlZ1MXVTZ1IyWVdYM1ZhUmlmdkNBMUZHRGdUdWtoT2tDcU12cDNJWWE3WmJBaW1vL25zOGduTWJpVkVjZVM2VUU3dzRsWjJiR0hCTUZ3ZjNBQ3psbjNha2hRd24zTSttdXdROEQvVXFqbERaMm5nVDN5cHVFWCt4NlUvQnlieFlDSWMwWUdlUFZNYmtoYUpwWUM4cFJieTVySGdaM3hrc0VlNmpHd3FtOEhmWkptU2FWdUpDKzZLaHdvT3NJTGhNM2w1bE1lT2UxQnpUTmwxUENUN25UMk50aFVETmEyamtEa3RXZ3JFU2JESWwvWTNMNjFkdjdUR0lWVEhYWEpVS0swa21HbE5HZ1ZUODNFMkQrZ3ZvV1NjMUFudkVkWEJQMWpnLzc4emd6cW1lc2M4SjVyS0lIYUdmK2lTSjBRQjBNUkpKMjVJR3U3OU9tME5YQjFod0ZuZXRLUGVPZDdvUGllWTdmMnF2Q0kyQkJrV1V4SFR0OGx0a2syeThLQ0o2UE0rYW9qSm1lakJYcmlxdzMzOFNSTVlibVd3UjVtTUpqcFpuWW4rNFJzb1hsTExDL3g3TllQTnZ2QWZNSFFXVXdHakVJUDFHc3gzc1VVY2x4YjQ0Yy95SFk1Y3V4UVEvY0p3eTNuTG42SEJhK0NYZ2JaTnk0SThZRWJxSlUzWnpmV21RamNqZnFtcXRBT1dNdDU1WTZqSjNFSTIxbS91TnVUTmJMeTV0MDJSMkQ0U0VOY2VsYlN4TENCRGRxTWZjVHkxNW9ROGdWcHJsaFg4OVhSdnBKSFNIK1dkcGpMNmQxcTR3V2ttaEtvdnpYdWcxK1ZoemRHR2JjZ09xd3RpeTd3MzV0eWRDQmcyZlNENkx2YzMzSC8wbWc4emlqT2NISzNWSnpLZFlnYmRXWlpzOWdjSktLZkR5ZFRuUDROc1h6Ym9XK0JJaTVRWHJUaHdFMThIdGlhVHZXdUhXeUdOUGVGWjZEOCtMaE05a2dmOXdpZmNsUjl1YzI2S050YzlzekZIeC9McTNvY0oyc1RzRGliT3NqMDBUSzY2dHZ3U1NoeTZpcWcwb3hBOGh5NGlYZGMxeHpUcUR6V0g2UHByMWt4UmU4N2ticFdCQzRIS0QwTm5ESEZhMWRmOGtuclNPVXpLbS9lZUYyY2wreFJLbW1kWHFwSHVqMmlNd0c1d2VVTU44UXRHUEhWKzNrR1JjVCt6VGI1MHdDN0ZzU3FFNm9jTjdBQ1VJc0Q5UmJLZSthTE5mcXVoT0xWWkIvRy9wOENLVUFNNmxaKzNZUGRRVFc0TDBhbXhkUndSczM5OS9LT0FrRjhWOGpaTzQyQm1pdzREbGs0Q3RWZTNVNVZPRXU5dXIwYjZpaitKRWU1YWZERUhaS0d0SFVWdDQwVGs1ZWJTRjVZWUNPTm91SFdvM3paNFNQdmMvb2FhZzE1a1loMVMrUXMwcnNGMU5VMlZYc0dDRnJ0WjUrcUw2Y01FYU0wTjlEZ1BUdG42Vjg2NXJ5N2FrWGFFSjlwKyswdE41S1UxOHlrVEZhNCtmT0E3VTU3OXZjVitBcXMrcXltb3daS3dudzVIOVo1YTIzVUw0elA5MmhtUjBWRHlSaGMrdFkyWmkxS0l6czdPMVNWTEJOc0dDdVlUYjNZbUFKSjkrQU9CMTB0MnlnWDZOOEhJQjZUa0RSNnh2cjJCdmYrZVl3djlUelcxVytpQXV0TGoyZldlZGRDTko2anJWZ0V5YjBrcVVJbXVlRHRYbXpPUFBibkIwTHpNdzlEQmt5WGkxYkh5QmJhckJrWnBaSUhSWUxab3NiTnJPdzNyRWhmOExGU3FobEkvejNhR1o5NkdjOWRQVlBkSXpMZFJBeXMyZks5SmZ4aEJKTmljL0lkV216d1k1WEQzKzBvMFhHQVZhZkZZVkdrcXBQTVdjOXBnNStaU2NzamxLV3Y1UjNzQ0lyMzlVSHZTRGNBeEtHdGxxdHRiamNscDRQSU8wUkxwOUtkaDRYckxqQ1FoNEYzZlREU21mb0hyQ1FMTllyOVFHaVFHU0hLeEI4RWE0MG9keVFxZHJmTkJiaURDT1p0VUx0Qng2a2M5MmhNVjVyUWlCOUp6WlI0YXMyWlA4OE1yb3M4QkpnNis1MmEwS2hxb2dLUExjZlZJQWordVJnTXdQTmtia3pDMjREYW9ZYVNzUmtZS2g4Sms3a1RwMEszcmcvcURKcStFL2xxY0NodU1FRjZQTnpVWE5ZNEdrUUxXYUZGSDZVVzIza29DOFJaM1RRWkV5cnpiVGRTYkI3cnZiNlEvOGNLR05kYlJwUnA3dHVHanhncHFDMS9EOCtGYnJPWUlVWm9yNFlsNUdjR00xYTZQYWc2Qk9YUDhzV25IN1JDWEl0TnN5eFVQcGdrcmphVUQ5ckIyQmp6WE1UYUZqWTBVNEIzT3dzcEdhMDMzQndxaHdaYjlNQnNzMFdPOXoyN3JKTjNUQVpxdUVwazJ1YThVMDBvcUFkR204VWJNcGhtKzBGenl4emVXU1hudU50cUxVUnNKWHJBdEd1Z3pZZkM2d212Ylk1S3l1RGhSOWZvY2YrZW02dVI4dVZGcHJ0bFRJVDdYaUJ6Z2lybHUxZ2pmRkhEcWs3WEhvS2g4VlJtQkxteGZ1UkJxU0ZvY0FZRzN5R0lXcFAwK2hGa2tyV2RCb21CRWNsV3JUVkJHUzFic0QzN1RYSnFadE54RGFzTU1NdTMyWndzLzdvd1dIb1VFWmErTkUxaFd1bVRoU290V0VmTUtjd05qcGw1eVozMDR4WVQrdDFPenZXMnV2ODVaZFFtRHhSWlpPUWl3VEdCNGYvcmZCcjlsclZ2bGp0NFowWUxJVkI0T2dPc3NxUlkrYktYZ3ZaMHVFaUZVc0JmWktuL1ZtVkx0b3dKS0RNMXBZdjN0ZUloK2JDWnZWTk9MZ0gvMkNWd0VKM1lJYmNPMFdJRUlDdVJqa3VoQXpMUmlBdzFCcGE0TGJCMXpWdzllV1ZmdDFwSmRCWnUxaXdIYlhDNy9oQ3FFeW5IK3grZElFNGNONWI5M2d5UTBjckR2QzI0cDJwS2YwWU9OSklkNFRLNzNhWW9mT3dLTWxoOXBoL1puKy9mbVIwWkM0ampkZEZValhXUmxMRUY0ellSS0c1RVFpTmN6Zlh0Z2tmdmttaUdYZGN5akRqM1RGNzdoWGMvTXNBclZVY1ljbU1SWXJxR084aXFGdy9wUndONnplSXJZMERyRHZlWE41TkZUbXlxM0NXcU9SL3lJY1ZkcUs0V2FsNW41bWFTTGx3L2Rva1ZFRkxWK3FLVXRPem1PMzZ1b2xoei83aUNBdXpoVDV3Mi9zd0IzaithYVpCY2tHcloxdkh4T0hGNTZIYnEyL0tOdFRJTjBzV3Q5MGZkdlJJcVdjcWNRb0VXZ2lFcTJZb3NXZ0hYSmM3UEJuUXRWQ2E3OENtM3F6Y0ZmNUhScmF3UVdvaHVBTTdKWHhXUFo2dVl6T0cvOTYxSEhPenJFbkcvNDRxVzNyZEExUnJSTytHOUV6YlhEb3VYSHdoekFJYjM2VndnZTAwRExCeDFaTkJ5SXl5NUNIZzdwcC9CYVpmSVBwNlNYb2Fzd3g5S1ZxdUw4a0l6RjJ2TTI5RTdaQXBoTUpraGtkVkR2Sm1RbndtQ2NIL3pDSFBtYWx6NFU1QTVIOThJb0NscmRVRkMwRFJiNmsxREc0YVVtaUVPMDJRMHlDNldnN2dFTTdwcDZjV29GM3lrT3YxZmpDZFRpaSszOE9KVFRjL1pYc09qRUNITlNDNGVnOXN5MURuVG9WMFNKd0VvNmJNeTNQc1pkSlJSMm0rQ3hueG1vMzFIOU5xc09qaWp2RWtFSjFTUXppMklHbnBDcmk1Y0diUTFVSXlteXdMOEZzV3QyaEdUeVdJSjA0RlZuM3l2akJVWE9JQXBxdklVd3ozQ2hxdjF3UklZd1Bjc3NaR1l6VzNid25XVG9ZT1pCbFUzVXVKbXYzMURxTWl4cU41aWpKTC9FSGJiMEtNczVHYmFUS0VtVnVtQ0pSNUpuUTN5MW1VOXRJQW9VaDdmUE9EQk1QMHQ0cVp0cUQveXpHSDNlYUVVOUJXUjFCT3BSVzVsc2JXZGNUcCs0TXVPdVh4Vkd1ZGt1V05SU1BVRFpPVUlnTzIrTTRDUmJOWFBTakhtQnRhVGZmS2xIcGluVXhqQUVybndjcWtXMTBncGljZmttM3YyNXpNeWxwSDkvbWF5UmZWbmtqNFF6NXpqaHdqTXoxZ1piSmtMenVFMk5Oa0g2MWlCZkloR1NLL21LWE1relBkYzVQaUcxbFZkL3R6NWZPK2Nma21qcUZzQzdYYVpUVmh3a2hhRXFDMk5LNHBsTURQV1RBTldvZnBwOC9sVTNrbFlUcStXNzdyNU9NRDlBOG45VitnbEJCYzhnN2ZTRkF4U29wN2lIWllheWdQdkVVTXhZclVTZG5jK0IyV3pRMXpmRzI5cUZnQVYyQThoOVZVaWxSUU1yWXY5bzR2YUZObEpQKy9NNmdqaFllWDNsQU1veFA2M1Y5K0NDb3g4MEk1WVJ6VDMxbmw0empQYkNzVklZMHVWMnprbFh5bGhiSkVUMGl6TGthS1JkRmYyS1BpTHdYaHJhcG9vd2p1S1ZjSzNtQ2hyK1A3U1NpUHh3TTBCc0srV2g3eVRpNmIzc2kzQTd1bVRWZ1hYOFJaNHQ5Z0dlODJWS1Vlc1Mvb2pnZHhkMnljMVl0T0s1TXBKdUh6NVlhcnZ3amF1UHlkRzAyTHJneXQ3My9aYzFJWVMxTkh1eDluMzBNRDdLMVhROTYwY29lU253WUo0ck5RbXhyNlVWNkt1SzVPK2hzOTFOKytza3VzdlRhaE9kZnlxWFFjUlVRMjZDeWpDeE1HQ0g3VnJwRmVtZzN0bkR6RlRVSE1WSW9uVUdzU3JGTUoxdzFwSGtqY25SRTYranV0eWRWbW0zUW8wSFh1WVkyazlWdGJkRGhBNXRhZXp4MDk5b0ZqKzAya0Y0V3NSTENKeThxSThzUHBzMFpkRzRDOUp4SlFRd3ArVGVxbk84NHA5Q3FpYldsUmFwOGMxMGpJUEJvSmxMWFBBOHY1cVdmcHlnek9VOFpGU2RBY2VBUFREcDMwK3MySmVhMkcxR3ZrVDh0THNNalFLUjRmWm5ybVdPTWlmc1RnOEtxYnBFMytpWDdLNzJ1Z05pdlBaTEx2RHZ3OUVoU3N1enpyM0ZMZFBFemNQZmVtdUZyQUNZcUY4LzQvMWMwd1RaUDc3a3pPcHR2amU3WkZwU3M0NThtOG1XSzB5cW1xeXBKSGFRV2NHNjBOWDhleE5VVHNQbU5ZTjB5TTRUdDQzMWRoalRVQUI4Zk5VbWVCSkxiZERGdEw3V1M1cFhBS09DTEN4bUM5elRQWE4zTlBibzIzb3NTUE5LK3pSaDdzcTZjRW85UW9ranNRaEZBRWYxT25tdFMwb3Z3YXQ2RGdwazZJT3N6U2JsbUlCczQzN1gxbGhpQWZMWGN5WUNTMG1NYWNQOEJPOHZSRXBQY3Bmb2tzRG5pWTZ4a1FKTWdLVWNlOWcyc2xSc24wcThkcCszN2I5SU5Mck84bys4NVZqelZtRjVoN25vRWhzSnpEbjltUFdjVzZlZFozMWMzSytXZHV1SzNUQWV0ZTJ5OHdqdHlxNzJKcTVyMFMwYzJETllIdDR3UjY4M2lmZmFHdmx0eTJ1ejBnVXpFWWtxVU9NY1RjMVNuOXBaTGVrQlFJdWlEUWJIeTg1Uk9pSWJsNGFFMG1MdkJ5RFdVK3ozQ0t1RHEvbVlWM2lST2ZKSjdpRlgwYzZyQlBNbFFLZ2ZHbXdYMEFyazlZaG5Ib0p1TU9LaWI1Um9PdnNiTEw2a1YzUUcvOXR4Q1MzR0loTE45dVZmTmZ2Wm1iM2Y0UEIxQ2pwSmhkWFUyL3VvYzdWc0ZuNkJWR3I2NEFhcGdoK2JCTC9GR0tFM0lLSzdONEE1U1hQZVBkUWxJY3hyUHJ2UXhheHJZWmFDSXkyb3RMbjV6QUk1TlBNV2RKTWd3elZLUVV5V0ZFUmtQWnBQL0daRUw1b2FkNit0a1h2NURzQ09rdmNBN0I2ZHRmcUNTZGJOVy9LemFTdVhiK2ZkZnJUcUkxbm5kUDVJZXo0emE3WDdFZnpubUVmVG5qUExDU0xsTTlHWnEzUmo5Zm5zNnhqNFR4VmF2dnljaW1GbjgxTWtlcHVXMWxTV2ZnV01iYm56TGczZnMydjRiVGxHdG9sWUJ3RVBOZm9UVzN1UDdnTE1FeHhBWW9KREhrcHZJU01rYU8rTHQrS1NNVnEyOXhUQTJJczF1YjB5ZDJCb3RsVzJLQmh5VWI5S0IzUUl2dFZwWjhUQ2ZPZks1TkkwSW5HaGJ2Y1lodUMzSXo2U3h5VDZqeEp5eWhaWHFuTzJGZnY5RjhaRkRtVVNKSXpKT3FIUWZHRGNPcHZJc3h6bE00cGNPMk9yTmtYQS9ieW9GbXdEZEg0UmVad0x0WkNtZ0VFLzdjc29IU3c4blFWbnYzS0EzakQwZnlPek5PTGY4aXJwbVByMnR6RFJ6bVRBVFcyanlxZG5nSm10aW5FM2ZYdW0yODVRc2ZrdXN1c2VFRHd0WjJpQ0RaNFd5U2k5amswdHZyeWhKbW1TT0lxMXlGdUFPYUxOVGUxNU05SWFPNDAzdDJmeHVPWUY5VHB6dVRsdndINU1uc1JrZ1ZEa2hvVWd6N1dZMG9hZC9nUFg4RFNwTWxKdlJDenAvak43Szd3ZFNhT1hkY3h0NlBDK2tNaVJoeVlJei96ck5zK3Uva3FOTWVSSGYzK1lqSTNTUlZYT050N3loK0tIUCtXdHhqdmg1d1hXcTg1TmF4Y3hyQzYrMHRYN1QvZGlva3U0ODlHSzJodXFUUWpxaHRTVmZyZ1J3K1ZNUHRVWVRBMEMvQ3Q0cW5wQ0NvMDZreUl5OGt2ZllCajRNYUdsV0hzbXllNERqenpKQk1BRnVNNmFLdDBzVVYzdURpWCtGOWdOU3NDd0w4dTFFWVl0S1BkOTNPaDBhcjcwYnVTbTBBZ3JxSDlsUmpWaXl6aVc2L3pjR3pERXQzT214azZpdnR0aG5DdUkxaExvaVVTRy92bTBvVDlGcUxWMXFaTFFUM09FeGwwd2VvdENtYVA3VUhIUTIrRnQvdnc4TU5kZENWalhVelZiVm96WmFXdGEzbUFBTW1BZGR5TzQ0VURLWEJBQklPQWNEalBVVm5uc05BMWNTSnBNWW5uQitlelFLdjdSdGt5MGtqM1dVQ3gzTmZPcmM5emFEVUhlMWNSOFhEZmFCZW9Ga25JWGVFZzY5eHNmNlBJWU56OXh4QlVmSUNldjhhNjJRTFJESVhQdmN5UzdWSHlOMWE0M0RPU0lSdTQ5OUpJbk1wdmFQM0kyYlNwT1ZTNEhkNDlYSENMTnhqVnh2WTV2NU0xMCtkcVM5aENidUdEVnpsT3ZWUXdYbHdubG0zR2I1K28zS0xxN3JSdVo3enVVblY0RXZxMkJDQ09lOFhiVXk3eXJIY0doVythQzduZ0llMThsQ1JuRHVydXBIVnE0V245bzRkendiV09KUnBGUzdxMDE1UDZzRlBVMTdEYzh3WmEwczdZQjJ5UUp1K1o4TFpHUkFpYTl0TS92bHBvTkRQYWJsQXFNMWNkN3pIUHJJaUdHSXFYckRQcjduQ0QvVXE5Y0ZoTFNLK0NXMUd0YTZNK3dPbUp4Vks2NHBBTXlnZ2RuU2hUbUhrTjV3TlIvT3V1andUSXdzUE9mT2VhNDlWRXZacFNQSTBsc3lSdmNRanc5S2VKcVQzR3R4eFBPN3E0YTRjREczTE1QS1NObEVicytVbVd6ZVFaeG5ldEQzemk5K1BtNTI3dlc2QXAxMkFUdWJQSzJvZ0gyalpuaGhzT0d1VW44UkxUVG51MUw0S2YrQlYvODlmNFA4Q2Y4bU5mOW1hYXpMRWZsY0tFczJsMUxVU1lHL1dwS250TXlEbHZJZHBqaklaZTVoejFVekhDS2RWckYxcGVpQUd6aGJWM0hpRFlMeEY3NllqMTE5cWh1T2tNS0hWUldBbE40Ly9yYW9kZmVtQnpnRHJXdE5DYXR4ZmJuVndLRHJQL0tZeTkzcEZoU2FYWmQ1SlVESEFwWThjR1hwSWJ6Z08wVnVNcVRRUmR3KzJxbHF2Vlk3eXZ1NEE1elF4UTNuRVM3TmdRM1laRXdxNURlbEpEZnFuVGlMb0NQR0dPOFJxM2JxMUhYOHkvVkdpRGpwOFo1bDJja29iaW9Fem43OGh1L3ViU0JQekRyajhGSlVaNjNYakRsSEkwVHBuQklDUEVYeXppMGZZRFJvUDRSVGp5MTk0ZUNjc1R6bWc0VTBZNG5oSTZkb1Q3cjQwUmV0SFBTSEF2TTFod1VXMlhvaFNvbk54QndlRzVWTXJ4Y0Fqa1hyUUNLM2p6M3VtdDFRSy9XZ0tNcmVTZjVPbGF4QU9kK0hGNTJZdWJBL0xkU3ZwNmhLbFlhVzUyY2VmMXovZC9zbk10bGNEQUpiU2tHWEZXZkQwaVBWNE1tS0tEbEc5cEtDUXdmSUNOZG1FM0VQK1FBMjMvMG9LRWxHQnRtYU1VanJ2dEFEQm5oVXptbUV1U011dHVVaEkwS2lVT3pBMnBmcmdkb2g1ZHc4NXNlQXM0Zzk5T0JaVy9VdGtQVVIyNUcxTFpyQmtxMzJxdnQxWlEwZVFNdjF6YWtBTmRrQStTRGtIQmVveWJWdVdDbDFwTDZNeWw2Y1dBSE9uNzNIbTk1QWMxVUMyMjlTOWJ3bDZteGgyWGNaYldLMHc4NmJVaFNaSCtJajRQY0JvTUJldE9kWUVFZnhiVktoN3M3bS9vWmZ5SGdNbXpkbURCa3F6cldsZXFBZ1Bhb21hbU13T0hnSkRTRHlZRjlOSWhEblRDVWhlK2E0bEFua2NhQlQxMFJWT0poZGsvdy84QTVtOGkwWjY2Q3VOWkNjbUlLUEpOUUdVTUREUkgycFM0QVk2dkdzM25KUXp1MTVrU3Y1UkVxeGRuNWpiM1NubFk0aUdlWXpIbnVjVjhmYVRVYVg4Z0RyV001VUI1YmZBSHEwTjNZNndrMENoeFRQN1RhdjNPY2JsemFYTjhDL3RCT1ZRMDl3eGFKUGZqcWEyMVFxQmtsM3ZEejd5YVdiUWJYU0szY29uNEdjTUlmRkJacDlFQS9RYXROVFFqREgrRSswV0JIRmQ2ZFRUY2o3elBQQ2NKWkJWbGE0WHA0K0U2ZndINmQxY3NFM0NoUEdEZWtyc2gwUzVxb1d5Y2xMbGVqWXQxV1Byd21uYUJJUDFaT2wrL2Y5ZEZXbEtpZHJqUDJWS0RzOUUvUWw1SkpIWFZnNXd5amJLd0k0amFjNE55a25LZmdkZlA4SndpU29MZFNWa29SUlZvMnlxZmJFL05BL0ZJSDRVMnA3dGRHMVcyRGxkRGMwU1lZS0JWTng0bnpjbFJaV09GY0cvZGQ4Ymw0WWxka0k2ZTNaZy9ISVR2VGc0alRRNzZBS0xSYVdKVTlJOVozMFZEM25BSW9RQy90RExEMGxtcFpTS2ZsNXZzbTdreGsrL1lLR1lFR2FRUURrdVpCSUI1NGVBNVBWSUR0bVYyU20rTnZ2TVNVTnJaUGhUQmlibnF0N29TcWR3aG9TbTZEWVBMSVNyK2RBOTAya0RnUjJPM2ZDdkowa0ZxVWM0eUhkSTN0RVJvcFpkY3RYMUozVWhlZE14a00vd042TzRueUp5eUNDYzVwbU5MSGR3QUg0Q2lZVkovSDZXbnhVTkUvdVpoVDlzaW0xWEVKdWVlcllkWW5iTjhOaTlmN01udlRFbFJHQVBRUDQ1UDNjUG8vV3k4eC9aM2luOFNHWGo4NXlyK0pHb0dHWkFIQTQ0YlgrdzMxN21rbEhwMUdVSzk2ZlMrbEF2TDhjUEhrdVZONVFhNnpKRzB0RHJHUVdQdjIzV1FlaVZhQmFYSGJBNTJ1aWIrdlpNcjRKZUtweHVBV2dGeUwvZnh0WFhtYjg4MWdJTS9RMDdZTUJXQUtpVEthalZ2YUZmYlo0Ym5UelNsTXplZDZRSEJLWGNuZ2h2dUlXZXhOcWZkUEFlY3pMYno0bGlOT2ZkRHNrM0RJeDJVRE45aGZyTDB3TU5UaFAzV3c4bFRycXFVSVIvZDh6UHFTUXhkQnZRYk1neHlXNmdnM00waVNXYWdScnQzbmRxRUt3eGM0L1BIdi9WWU9ITUtwanAvY2RBTEtqdXlFMGVpK2hGbk9raDhkZGtWSEdtNTBod0Y3QWl6YS80V1hBekhJL3hPRi85S2pDY0poVTdpS3JLZHhiNXZqZHJzWlJVNm1SMytPaEpTVUV4bW5pSkRPQjRCbkJ5czlxTUNkNUdHdDhpb1NwOGJBUVRuMVZCZ1M0M2t3WDc2RmVoRWx1a3ZNWlRTNDZpRUlUTkl0OFl2Zyt2YmlZMDgrZENYamhtUDltbks4Mks5MlVLS3RhUis2OFBZNlJxQTRsb0FUZStmVlVlZkc5M1V1L2g2bTFKNHBvY2xGN3NOWHI4VWVjb1JyZUNzQ2o0U0w3a0pvWG1NUGZFZWprNlppeFBWMG43c0d5Z2IzZTFoU3A5L0NMdHlPU2l0T0d0WkVCTENrMXJPUVFGK0VvRmNma05hbnYrajQ1SDd2c0hoRkZZM21EMW1iM0xibjA5ZFpFWjNLeUJvWWVwOG5MQTBWTTl3VlB6akpHdWM4MkhuNmVxeG5MMmRJUmxoZkx0RENWN3ZEeHlRanZvVmFXWUxXOU42dHdXYW45ditDKzRPYjk3Ni80cWFYTkVhVUFmb2YxcXh4MEV2NVVjOTd5SWpFZlk3YXA1WVB6bUU2SXZaSkhES3JNQWNHNS9QWHJiRHJFNHQwUXBuLzhpSDZWSWp3bkY2aVFDRkQ2dGg1djZkVEFWZmFLZGErTnpEWWU4L0RUQzc4NWtoMUZsN1JqNmViU3VFMkJCZXFlWFNIdlNmSms5bUxlNlpya1hRcExsK0N3ckRRRUJLQjZ3MmlWdjljTFJTSjlnT0RnMlV6cWRWdWhMOUhReWlXSVZwVDBLYnBYbmJtemlPdjlEOS9ldjhGM3NkUDE2UmlTbWxFaklzWWJ5VkxvNXpoNDVtU0h4MytWcHRrSTRwMjZtY3FtdTF2azZKUTJQUlBqQXlnT2xmM2lhN0FUWXdLb1BGQnFYd2wxWVBKaDVnakdTMXRIbklKNUk1Y1BoRTQwanJSQWloeFdQblNzb21DNjJ3OEtxYXJNUE9VL2xFWU9GY1F2dFZSRWliREdzd2JuY3o4Q0sySld3OGhjWFdoZWxRKzF6OGl2cWFGVVZBQkxlKzBlWjl2VTBaNVBSbm45OWRzSlVUbUEzRHVadEZuMTBibllDWHQvZ2xSTy94MGJJVjA2ejVQTmhxZ2FhcE5YbzFGei9HWUR3V3ZLUTdtcTg0bitMd2ZMZUlTMWJtelF2MFpSSDNlT2JVWVkrRjdrRXp0MUk0MnZvaEtLb1k0WHFzekdYTWZZSzF4TWhTYWs5S0J5VXlPckdBdlVXVUJmb1pUTzJ0RVlsb0RJZCtaUnlYSlNyWjJ0R0Y5RVdPSDFQdnRLcVhrQmJkYWdOR0VyN0FlMUs3aloza01BcklqUFRnS0FqdnBRdWp2UEkxbEV2ZStJa2phd0FwU3ZNc0ZJY0tNOTg2NERyTFBVdUg1SUNOZkFPSXpFb3k4dHRvWnRJUHlnVkhnMXN3OXBXeElINFoyL0h5eVd3WVN5ZG0wNW8zVDBNcE54OFRvQ3IzZ0lTU0htenJsNW54Y1RZSk1WSDQxbTBDS1V5bTFsVjdudi9mZ1J3K3ZZTGRuQVBJWDhkZ2JFcmFEa21peWNTWUFCL2Z2UGZlWUY4YnkxWXVKNFlmOTdEU1AvZ3hwdGtVdENHTUhRbmFLOFZhOXk4c1d5aTZQTnYxbm5IMHNqOEtsY0FXMlpNZWlBSXFtK2orUGc3dFEvTWVzNUxaZEhMM3drYUdMQldLbVk2dzZ6NklQMzZUUFppTHRGd09MSnFaRUlpZVpGYWkvdkdKM3VFVFdqOGZ4MUl4Q2g3RHRrWmRaYmZHNDZDOENjQzRkbTR5VjBqd0JZd2xBU3dlVVhNd0RlNEtmRTZ4R2xoSitYSGI0ajlzQ29PclRHNzRNRGFxK1lEMSt0QTdqblFVNWQzc293MHpsd0RiT1Y0NHZkbXpiMStDeXNLeGd4cjVrK1ZUQTVoekM2bG1IQmxXd2xPRmVwSXBwdm5nODkxc0JNR0VHVE55TFFFSnNSZ3M1NkhIUDRVbXczUTJmRW1kVjhld1lVZGRpSDZTZzRpQi9pS00rYUdWL0NkRDQ4VFhERlUvaU1EanAxc08wakVFSTFpVFZwNnJ5Z3lvNUlvSDRibUpoNTFUYzJEdVE3UnptLzErWkwvcjdGR2ZYdlpLZTNvcWd1UHZRQjBCSTk3d2RPT2E4QVEvT1E5b2dCL0FKNC9icEd6OTVMRHlUWW5tM3NybURrbTdpVmRUSnhhKzhDemZSRGVGdWRvOHc0bEMyQnVHdGVOM0lIaHMvYmh4MmtJc21LbGtBRm5KRHV5aTZwbHlkaWl0ME4rVkczN0JXS214aWlmNkhtYmZnODVqdVBZb3JJUUxsRlU2WmdZekMwQ0VZaHNBbGV2S0JPVVRHdW0zYktqTStUNUdXanU0eEh6enkyN3lXd1k0cW40WTRCQkJ5NEQ3bFBlaFdOK1czU29raWhRMXNRcVNjVGZFNjM3elhYeCtHdlVnQlFzN1IrdEUwSHN4dXdBUGg0eXBNZlo0dG5STWtwWWJkeVZYR2trNXZyQ3AxU3ZkRFQwTGtGdHVxcGRQT2NRbnJTQUtxeFpNSHF4NDFqTTZVWWVHS05tNUxRM3J6dkFPbTZ6YTRUdlJRNE5KakhOeHl0WUxldGVobnZObmZIZWFOb0Y2WEkvMVVIYXV6dzBqR3NGdTdEWTdjTmVPVVJlTmJVTHB4cnhLZEpBQ1NBb1FJVkxvMzB1dzNmbHBZOVlWVzIzNGRQL05CTFk3clBDWWswa1RXSjU5ZEYvRWRqYUVMa3NyaFh6T1lxTVdvdnI2d3MzbE9TTndsUmxDYktFUHJwOCtKQU14ZlFsa1Nxa3BmeWVqVWdxRnBsWWMybkZ6eEcxN2NFVzI2MEkwMEw5bGZHU2lwVmsya2lFL0VFZ3d5d3lFUnZlSzBGVW01SWhOVDNDVzkvejZQbVc0WUZ2QkxkRVowMEM3OEJ4K2pjR2pQeWdZRnlBenlYNldKMXRjSWptQUxHa0M4anlmNzBVRU41OXluYklpN0FmOHdLNkREc2JsaHZ5ZjlHeUltUmhZL0tON0w4elg4OGVNclp6eXc1YlhKdTFkcGpuYnNvcWhFd2xIdTVSSEVNZDZsaG10R1BzMFlFNENCVDRaQVJHYWV3Z01KOUw1RS9laFQ1UE1adjZKQnhXWjdUNWRicEdSSG5LTUVYSElaTGRDazh3eWRtUGZ5d0N4V3lPVklzQWxPSi9tRzdRR0l0clZMSzdhQzgwOTBodDdDQ2tyelY2TVNCa1IyMlBkSks5SGt1bGgzOEZPbHZTMVgwSnd3bjR2UlNmU3FKM3VITG96SzZ5b29FNEN1Y2JYdEhXdTJmcDdDaXJtSU5vcmlGblRkenc5OVZXSXYyY2xDQTlnWUFWTVkrakJFdTVCaWhuMkZKR0VXK3dHcGI4MjJZZEdYcFdhcVU5QmVxdG5XUEU3ejR4MWhtbVE2RG9sVHRZUElzaVdPRldYZlpyaFQwSGZGK1VJdTh5elh1NDlYWEFNV3FST3NlOVBEMGV3MzVETVJQU2JzdTUxSjBWOUVrMEpMK3RqWndtY2poTWJQbE1jaExqYTJRdEIxaEliVk44ZWxoWTFPcEY1SFBwZ0xkZk5ITTNEV3laRGtJMEo2U2Q3Q1NtY2JEWUpPRE9IY3FibmJLQWtrTzJaOXVSTGN4cm42UzBlRGF0ZGVaNkJ4SnArRlRxR2ZWMi92K1BrWDhjZUM1R3N3VFZ4eWx3aHpBN1hEOG1iay9nb0FjWEkzT3ZGQTdxUHRwOFBMZHdEbk1mSTdrYmNKQ1hFS0xwYis5RDNoRmNub3IrWnpHRlhzZFp5bklPZUxReE1aQnc4T1JHc1BDV1ByNTllOHg2UzRGa1AxS0l3MVp1akozajJ3WEwvQnZrVm43L2Q1bGhBc3VBY1lSZm5zTnMySlV3MVBrSTVMWit4S3JNSlEzRXJzZnluQW5NMllMV0RyUEkyOFFMRTJFb0IxMW5tSWlwQzNEb1Q3eE95cU1VYklja1d5dXVQeWxKZGVGVHRCRWtWYml1d1JVQkJXL043RlNHbGUxMG1zUXUzZXI3ejRGd09SeDNQdFVDL2FKOVAxNHk2d0NIcGVTVDhtNmJVbWxvaXdaNGpLV1lIRW9HUzJSYWRZSXdnQVgxUlNLWWtUSGpiNC9PTmxpR25EWDlIWEFUR3NKcHp5YUFyM25vNmR4RVVMQlB2NjFsY21QeWprSno5WUFsaXFBMEh4NHprSTd3TDB0Tkp0RDlnTmppMGk1azdWajlIUUc0NmdrSi9HT0J4WDVoR2hNcE5EQjBsbUZ3VEpCeFpoQnJWQ2FWUTcyNlo3bDhPbEJ3QlBjd3RHL3BEelZoVXcvcWswaStRREZmVXZ2WnE5YXNETG9lVXBJbEx3OFMydFFWa1FZZWc3ZGpOaFhwVldqQVRyS3ZmOUZTeWtIMnpqTmYwS0d0anQ2RWNpSXQ5djJPYWVVa0xHUkVZZjJRY2dRZkZ0Q2YyNDlrTDMzM0Q0elh1TklPUmVtb0tTSkRxbmFIb0ovVm8rUC96MVdrUnlGRVZtTHhPVU5WTHA1U0ZZdlpoSXRzUGNOVGpyeVFnTnBjaXM4U0hSV3J6c3lOaUhqWU82WGtSemlyb0JDVi9UMVk2a3VWRXBUYkpqM2VUZFVFOHUxcytqQ0lLcENneEoydStRYWIzVk4yT0xjblpmRy9XSURZRGRWRi9LU0N6MlgvRkd2dG1PQTdPTUR2SEphWkh5L1pwSlUvajhsUnF3bHc0TVlPcDRBamNINUJnbElxL3RLRU1WSk1nWldsc21BQVl5RDBnS044dVN5RVVMUW5BWjA2dDkrZmNGME5jRHBaamVqWDV3djZReW96SDgzTnVTYmxNRmJjYmtYTUNuc2l4VUc3ZmJzaFdqakpvQlk0UlliRy81NllrUHltYVhQeU8rMUdJcXpIdnlFVm1BQ1FjY0xFNVJIendBb21GRkNJVWpuM292MFZFZ2x5T2xzWGEzQXJJY29Rbk40UWxYSXRxd1AwVnN4TTZ4Z3ZHR29IWDVlazNMTFVSZWExMUZZTlhyeUROSUNuY3BMTGhTc2E3ek41RWNWanNpdzBpc1d1Wk1BVU5aUmYvbGJJbUxmNEpnTE1yZmF4UWdaSlREMVh1bnBRVFM5U3VpN0crS2p4bmdIMlhxWmRRM0pjcVhzaDhQZzFIM2ZqdDVhTVk2bVV3eXQwN29xM0tscE5zbW1ZMFZZMWZiZHpaMVVCRytleGxLZWx2VytaejNuRHd6cXBTUkswQWJHQ3g3RE82ek5TMUlOVllHVEJoSklScXora0N4T0F3b3R3bXJBMXJIVDY0aVMwamtseURYRkxCQUpLeG5XYVFnMUp3Uk9jT2Q1eEYwdmhWQ0ZqVjEyVXRua04wNUZ4R3ZZUUJPRHZ2eGZ4cGxuN05VUXlQUVc2V2xITWxNZzlXUmIxMnB0TkN1YUVEZGZWTTV1NC9kdlJiaXhTaUk1eUJyS1lPUXg2OVVZNkU5d0NkK3pnQ3JuYi9zQzF3dkppVUp4cExRc1JYbkNJa0xZOTZNNlhIQXEvQldWdEo5MUFVL202Mit4QUNVSkZkdFV6VVlaSVJzSVBld3c3M2ZPbmRIellaVVNIcW1KeFhJUSs2YUpWSG9mT0RjTnlZdjVVaVMvdU5LK2lJWHVtcUkyQTNncUtxMm5IRjd2QlBvcEVOM052bmYvTkhEQTBjREZ0U2RTYmdxSlBZQVJKYXlsZ1dqQlBCNlA2NzlKVWtpVjNYU3E3UEZWNXdtWmJwR2hFWkRJcDgwaW5hT0t1am5XN1A5MHlpUU5xYlByTTdDNVN3Ums1eXp6SG9MWDlWSEVDUExMKytCVG0zYTdKdlVlM1BqcEpxNVdMOUtDcG9BRWZ1OWhiaE9wdlFnRk0rdWJvMkczd0p6aExPTlhjSkl2TzBoTEYwYmRxQ2c5ZUZqWTd3YWdGY05TdlN1WnZKaUEwU0I0dEd2bHZrNkt5RDZTTnpLT1c5Z0JaM1pGZ3E1V2liL2tXamtPSGV1K0lhVjVsSWxBeTZidmdrdi9lOE5LWXJEMnFESlFBbXlkbkUzUzlVZno1VDRiMXVJNWsrWjRwM05mc3ZuSElVZnp3U05TOGhoSVdVRFpqdXQ3VVllcWxiRXhTVWhPSTZSR08reWZWVFFUZjNiRWQ0d0poQ0czckJNM3FsSzQvUWU4ZzByV1VhdHRDa0xXT1pTWnpNelhGclJ1eGJGMEVpSWJCdWdORTBzS0pVa3RqVWtQbUk3bUdLUVUzam1yUytabWFkQUdORkxZMStVcnVONjVnV0E1RFV4TEluckxPRHMzS09uM0gwMjk5eTQ1MGhvY05kUG13ZWF2RXRCZmRKa3hXNlhxSlkzWi9oWGdQZE5sRmpwd2tDR2VyNXk1L3hnVEIwR1FTalptdUJpTWhIa3VrTm14UldoM3gxMlVHZ1F0UllQeVRuZ1BQZVErZ3djNWRjd3hsZy8xc05UdGp6eDV1ZUN1SmlJTFErZW8zMFc2cnFyaGlYR0psWGhRV3p5dHZPZ3NEa0xaY1BERE9uOWtTTk9KWVJOZUhPdHl0TmV2MG5ZRmV0NGpIc0dRN24zL0N4b2cwNEFqNFd3MDAzVnNKNk9xTmY2dkEwTmtNVVRrMkQwTzIrOHAwMkYrNGlndDVOK3dQaFQ4VXdCU1RiYVpmOFNjMEZxekYwOVQ1YkFUY3o4c0FUcTNuVmlyT0R4SzJHUDZWUjYwMlNkVkNncWRYRkl6R2lHUUEvdlFHZlZFbFE0cVd4S0M1RTQvOFlBQ2pkZ0pxZW85WE9uVjJqOGdXZ3Z6WnA5akxkQWIrMDlsUkhsMjd1WW1CNzZoWE4xNXRVUElHd0VuY1FrY0xydWFUeGFnb3o2RkM2cU0rZko1UnlGN3VuQy9Ic0xrQmYwRXRZZ1EzNHhLSVpoM0hQSUtTTzRzRTZJcXp5MGtXa0IyUmJpNEczVElpUGg1NS8wbEFpNG91K3ByMkFYaWt0TkNSOHErS1hFWlhrZnZVZFU3K2ZVb0pvcmg0UGFMV09WZHJTS3ovWGdUZ21XbWs3NzNJMERNUWdMYTZ5dlVHQkM2WDRGL0dvSXZ3S3hxbndFZEF6QnVmYjZQUHBjY0o4bExGV2I0NmMxRWpOWXpJakUwTTVxM0RQRjYweXQ2VmUwS3V6YkFtYldiWGdlZDluNUZRZ3laNXNicDc0dngxamVBVTJlbmJCOGRQSG1FSVdPNDM0T0VjVnE3Q2FaT3E5OCtBanM4ZVhUODF6UzRaTFJ0MWM4N0J2UHNJb1Zvd3h3OVhidDdnVElEbFNzRkMySEZ1OHFoQVY3SUpqMG9nZy9tQStDejRJdnFXdmVsNnRCTi9pWXVwcmo2bzViUGFQSStEUHlUdWJnTEVoYzV4d3dJZTVCL1AxV0N1UWptVlR1Vm9NWTU2RzIxRjBYVU53UkVjKy9MUlcrVHliZHBOVTA2aE50WDBVRFU3bDJ1Y2JYVjl1eEM2d29ZSmVPNnpqc0NoN21WN09teVB5TlJjVGRtK21DOU8zRE5rT04reFhuUllrZFVRVXFMZ1FpNEpSMUFMMXE4RVdsWUYzY3gzRisrOTIyQUtsb1lCOTlOQUhvQ21zVXNxanFOVVBGb2pkZk4zL2VFZjdURWJsNjgzYTB0NDZqVXhIYi9LMFhVamFzSXNQcEJKenY0bDExbmxDay9xUVBxM0lVa2RFcmxlSHZsc2lrc21pZDgyWGtZUzA2WWFGL1d0MFJBT0FLdkFwZmxnN2UzOW54REgvTFdzSWx2VGkwWWtEbGVXUnlVSVFHeHdUUWNsc0Fvc2h6M05UbTBGM0tLeWkvOFFRYjFSOEkxd1VPanA4d29ONnFlOTlNNis0cFVKRWpCZ0huUVR2Q09wQmgwNXlwbEIyckw5TXJEdnNOa2dhZHJmY0ZubWVqbkt2YllBdGZoU3Azb2JtWm40cjBKOUxLbzJ0L0FFZFVORHpmSVZkMXY2SURjeERsdFI3bnlJeCtQSk1sUWpJNGh3aGdFalI2SFNWYnM0MlFXbU91RllkWDFsbkhySHVValllbWV6ZzhQOGp0eHhid0RaOVc4Wnd6cXBiZHVaUktIT3dPQzNZYUNLVVlXOEhscDdCNXVTTVEzM3F2eDY1T3FHMVRHdVRYQ21USVRPcmFYSHVRVWFEMHBBRnFZTENzOVZrOWsvQ1M5elhyT1pLZVFmTVB2Wm1CNGFXWEdjTTZ4bUxLckloNmVSYXpBOVkrdGZSV2tvd2VCMldZSHIvc3k1OSsrd29jVkoxNEczUURiUzNWM2VsaysvY2xGQ090aURaMGJiQ1psd0t0aWYxcWJ4dnRUTnRBNEhvY1VuOWcrRllzUHlkcDk4czRUL1VBL1hsajBtOXNlcTJuSzJpbWdGeE80cnNIWHNQaStzUloyeXRiTGlnWVZrMEZmcnovTnBHenRjSDIydTM4U1BMdFE2WkViZ1JKeFFRMGxVbHF4czFOTjk4ODRxV2liemNZcnBTV2FFeDRmNXljRkQ4N09wUWc1RWtQL0VnZTA0REk3SFgyYzRud0R4WThNUENyWFpEZHdNRXZLS0RDQTNXVnVnSWYxN2l3Ym1VRFJFak9IekEvRUhFayt3YVBSZ08xT1kreDNqaTg5Z0lwMUlLR0xoMlhYYU9YMWg2dWlWOUlGT1NCQXJYc3VVbjJYcmEvcGlQOUtmRHBEeFhmcFlTTGhkcHhnQUZTWlQyOGc0Rm82U0Z1TTNlT0c0Sm9CTTZWZUVyRnFBWjRldXRoWjVUQnZ0MC9sSlRRSUY5RFRDN1lTNjVQcnhpRXR1UHVXTUhHcXlPb2ozK1M1YnIwVzZKcFd5bE1mNFNsdUVlZkl2MUM0VE9DdmJtZGVqay8rZStmUTY4dC9MM2pBdzZQSFVBaXhGQ2JhY2lPZjBUQzhtY2xmSEdtUEhQOWNLeHV1ckh4Yyt5QmlETUl6R2JiYzhnUzFBQnNtMmlkRml0S1grRFc1YmIwWE5YL29BT3VIM2hBeUc5OWsvRkVaME53WWpzYytJenV3SjJIZkNsRitUNEUyWXVaYXkyNkVsc1J2b1BMeXp1dFdmYnUzOWJpQWJXV0dvSmxWSUNmeW1NQWxUNWdaQkNoeGM4dWpsZEVIUGZBQ2xVQzNRU3NUMm02SEhGYnI2VUsvbk5wM2VsZHFIL1JOUW5mMk9IQkJZU01HNXdyYjR4RVdKb2hpcC93TVpNWXd0a1lIdHo1VDdRZzJESTVpN1gwQ2h0elBvZDdycURNV3J6OWhRdkZvZExQT1FSR28ydjc3VUgrcXNiWmJOQ2w1RUdZS2xON2p6NWZxd2wxOU05ck9kNU9jU2hZSHNZNzVCaWVoZENzWC9pZTJiR0EvRG9PcUx2MndrS21TRzh1NXhMUDJPOVEybkdDZmxVbkJrdWNPWjltWFk0ekJjcEpOU3pJTWlsUU9yMmlrWnpHQ0RxS1pDNmRwVklMSDJKd1ZSWTdjZnhTekkvZmpxSzNubmNwd3JydFZsb3V0QXVMVnZCMWJJK3JyRFRZZDExVVNISjE1cXdSOVJVa2Y5RVVIbURjemQwK1ZFVjYvc29ZbVhyMENBalZibEd4VlZjVzV3OVl0a24xRTFOYXFQWkc2ZUxRcVFJNTdOY1FNdzh0Q0krQUUvZWRVUHFmRmxHZ0hSK3libEdPS0dubUtBdGhza2hKWlRvaEQrZG9KSTdFcU5TRFo4RVk3M2YyMFd1eGVzUExvVjJOdzFqWDBRcGlDZTdBM0xIR1NxS0E1MXdMdzhuSHU4M2ZqTkNUWUhXM0hsZnVkdUNmYjVXKzdtVFdScmN5aEs2b3V5UnBxTUVyUFJDclJIZ3F4VEpWWEV5Q0xmc01zaGY5Ynp0eVJxenJzcG5CemJtcHZoTE1qNll5WDQ1b2pVQ2hkUTRlblVNbFpxVmNJdWpZQWpVQ2h0NTdHNDRJUTBGUTBoOVB5Z0pmb1IreWhSQVNxTnY2VUZuUlExSmYvTjBSNWFyRlZNQ2c3THE4WXN3Nk9uZ1lYYW5Sd0VJelpkQTJ3UEZPcVJGL3NXSjVVaTAyRnNLMzFxbTlhRElXWDFKc3BsNEJpMjFudjdhTzd0NlVqUlBqWEdaYldRS1BVYmZlVlppdTdLcVo1YmNXUEh0OUNRVlZtQmZlWjc3VHgrc2Jvalo4OWxVdld2RlNYZ085ZXZURDl4UGVrL1piTHdrb3Q3WTZUQ3JYUXpKV3F0aElaUi92MklrUWRERjFUQ041RmxWMFlNZS8vY0g0a0dLejlyM2tTRzR1VE83Q2RSTGRFMTBQNTh1UTVBWHk1cmlIbmU3aDF6WDVDUksyRjlSNEt2b3FHaE03UWErMDNsbHFFQXBadytxN3A1L0NMNHVIS0cwUEhrZGxLMit0VzRSelBqSXBXVnI4ZWhQY08reWNnU2ZDMWx1bEhuTDlac25nVlMzcE1JaXFFbE4vN25qeklrdGtZTll1dzF2NTdPTVdTRmFGR29oVEcvU09DTEcwUEFTTGR6WUZGa05WeVhTa21iQkNTbURlZ1FCSXZLZUpWSG50TUgzTU94VDR4VEJWWk9BNzVzdkJrTHlxTnJuUmdnYjNHVGdMVGNDYlZYRDRxUWxib2FmWkNBamUxR3pRMzlrb3MxVitwQWV6Nk9maHVseFVteWlweG03VTNZc2NEbXB3MjdES1V1TG1HU05Kc2lLT01qWEpvRE5ESVhkVVVPQnBlNTczbUxxV1VpN0QxMW5ZQmx2SVlidU1KZFB5UXZTMFFzeGhtK2JYd1NsdVFTajNXL2dDdzRhMTRkMVBvQktZWVgvY0E3NkRoM3FUa3Z2aHZyemRIc1luUmYxby91RU5NQmhZQWkrb09KeTkzYklrbkZURGtoOHRKMWVvZENJSTBkemxmMS9JTUNYZDVLRkdjSTUrYW9DZHFTK1lhQlRxcU9IK2o0aUhoZE1xcFBDeC85UThobHkxWnNZWm13VU8vek8yRzM2MTRRK09IM1V2KzZ2TVZ6SzFuSnRUZVJSNWhNeFFZTkgxYjF2eURmR3E1T3Z1N0E0SmlXZXBFUW1kNElWaHhQcGpxRzVsT1VyS2Iya0EraFVIR1g0MGpFbVQrbXc3SmdOOUVyc3BRdmxyTGpJT0crVUpVdDVsclBlTk9tWjFNajlmcXh4SHpDQmx1N3FqNnpPTFNCaEQvUFFXd2NzejUvSk1VNGdsS2M3YnFWU21QMVZlMnVRaVNXeHJOWVcvTXJsVlhkOERROExYMDMzcmFlanhIUW5zOFJoNDZ4eUx6aGlMS2trekZrOGV1ZjZ1UE9jYWdHQTZrMnJrdExPNCtGdUkzOHl6dW85TUM4djh6TE50b1ZXKzZCbWFXYUpSZlVIOHVYSWZ0citMQ1JDSzZBN2oyQ1VLSDZqR0dyZzFvaEh6bC9aUWwzREErT1UvMTJpNWtIdUdrN1hkVWRVejBGVU5vcTF6aTRRMGUyU3p4K0RsRmxVL1ZmdDVaUjArYkVYTldjM0g0VHBiUGQrdFM1K3ZFcFpqMExNRUYvM3YyVkFTQmhTdG9walltUEhaMzllaU40UjZCM1p3WlBDVDdYa3krQzlPMVRnck10T01aK0V5K0lnZEkwOEVaT1UrbDR5Z2E5V3dUVmxvMzJiZHU3OWdQeHFyMG54RnNnUTlwSkdRS3BjMWVIVCt1dFU2b2VJZG5zYjF1dWVSVVc0WFI3blczZ2tyc09rcGVhbDQrQy9tbVJBaTdUTkJNbTQwZWppeCt1S3JtTE5sTXRET3hQWnZocVJSYmY3cnVKM1c2RzdmT1lEbFE0eXlJQ1NaKzBxZzl0aTZPdFJvNmFBdWJDS3UwcHQ4a3J2b3pBUUR0bHJvSXpLaEEva245RzhJdmh5U2RsNldGTGhtVzVYOURXNlVLbk43S1BPZExkaXFUUlFiTGJqTWlrZFJQR25tNzYwR1V5VEliMjVjcU5qU0lqZTBIOWIzNTVkQ1ZrNzNQK0xtNFRrYVF0dU02M2xkUkRHNjQ1ZDJSWjVBYTRTN2MwRFlWQ1I4V0N6a2dtNFhjaEtvN1BZUlhLUis4dHNqVVp3SlpSbzNFUmNGVy9sQndzOEt6RWcwdlFpSjk2aTBLbDMwL3dwcnhIbnV6cDc4MEora2VneGhPQmN3enpJeU1IVG9EalFvS1BlQ0V4czdEOWRmdVI1bjBHdXU1VU55Z290dDl3TnJTWUkyZ3pIbGN6U0xNRnhtKy8yd3JxdFkrWFYrSWNXRHZ3WDQvazB3ZjJTckt2ejBRVC9NSE12aG5OS2xQQ20wdFpsWXV4QVd5dzBxdnNkMHRPdXBDMUtiUUF5MTdmbjBFaW1PYlU5QmZTSUZlbldIQjJyVlNuT0F6OVZzc3FKeTJsWkdvYk9EenhyeXh6NGhSTHJ5akRuOEZSSTNjQWxUM2cxVktwK3dPZGRqMEcvdENpNkxiT1A2ZlBvRDVKNXpRNjZBUHF1aHdudHJTc2NqdFpjd21LSEJENGR3VTZTUURKQXBOMmNUdCt1aDRDVzAvUEdLRDdSdFhhZWU2MEh1WlozYnRRK1YwYlBEVjl1R2gyTXliNFp5WXhIZ2ZLbFZNMnZYZ0VkQzBiZ3QzQ2pTdTR4RDdZbnEyZFI1V25HbXpGZXVsakdwWVNsK2RoazdjTzhjTGM5azNjbWxsanpkZ1M3YU41TWtqUkRDUnlGampaenFlTk5lbDY3Z1Fybk9jc29BdkZrQ2ZRZVpTRW5wZ0h3QXNNeEFxV1IvdDhVdHJ2MW5WZlo3eDEyS2l0MU5VaTM2VXJycGg5WW5YVVk0c0x2RVZCNUtQZ2JDN0Vwb1FERVlrTVV5T1BKQXJLeGthUERDeG1ONUEwZGtXbzBuVU0zbTBGRU10aEJEQmMrcHJ0TWN4UDd3eFVURXFDRktCWmozcmFkcnZOWEZNR3l6bllWZE5qb0NUamhPMlEybmxRbmJvbTFmYnp0dUt0eWJEblBPcGswRFZPTjNBTmFXVHZraUgyMzEyTUlFREQzRm8xSDdkOFRHSXhFMlZGQkNsUWpCZDFkOUROcDZFYS9nOExqL0pJZ3ZUOXJSYlh2TzZsOVByOHNaeXZ5K1N0QjB4bWFvNnBaQjdXcE5XVTYzNXk2RWxwVGZLNDF2ellWbFZlWVlFYVVpU0graFlOMjd3WDVrUWpTaWttODhBM2FsQzFFYjMyTFd4SHJRbnk4WmVXdmQzeFZzcVIvU2d4YUR3QXlJZjR0RWthMVdKdWZBR0lYcVV5VnozZXo1UnlLdER2RFpoVmhNSXFWK2xRSUpwZWdmSTc2SkI3VkZLbWYwL2xyUTdzUnhRUVN5Tk8yOGtRc0tiRUhpeTR1TXArdjlvQ0o5ckJDbU80UDRsRzhidzNEdnF1Z0oxUHZHbHgxT2NTQnlBWEEzT29MT2N5N2paNGFidXlya2p0ZEVDUjBaRllrUFpTY1p5RjVlQmgrTUQrSUZIQnlxSktZZmxENnhJdW5RYUVGKzFMS3hBUFRHZDRic3hGdDhMdGZlbDhKYlZEdEd3cnJsdnlVTE1xN1dyTkV1WlE4MUlEcnQ0bXNqZkx4TEZXYjBxeXZLTThra1JZYjlMWjBBUUpLd2pWRk5hN0ttM1E1V3lHMnpka2tnRVY5MWduNmlpRXJvZVpsaHJCZ0d4WVIwdWNrZWVnd25MUUxRdGQ5SHBhRFIzYUZCMEhmZWo3Yy9HaFp2dmxzbkcrUHJDR01pdm1xL0oxOUJNT2g0SXlnQkJ4MzRXNEZleUJhL1dGMWNBcjUySHk1aEE3aFQxd0F5VjRvbGVSUGpRcENjaGM2TGJFY21UQWordjR3Q2d4bGlaYkJVMkpvQnNwc0x0R2p1VFZaa2FuZlgrRFhSQ1Z2SHlOcmJZM0FrellOajNWbzhvSDBWM3l1RzA5RW5ibjcxeTVtNzdlK04xaFhla3ZUM2dqNzNhQ01zMWErTGNYdVd4d0xMSkZrK3FGOHpvdTV2WFJJQ1dwS0FISVpvUHBsMlBvMFJyMmEvYWhVQk5EeHk0NjdValR2bElnejdNdUlsOXZYNDJpdWFCS3FneVdVenBlN3FicHlFM2lvQkpSUHcvYWl5STBWbXJWM0d4enZDQVVXUWtaTGRqT05JUmZEK2NLbDBCdk90dVFjdFRhcnYwOUlzbDF2MU5RRzgvRWErbm9WRmx3OXBwOStYTUNoWmE5QUM3ejQ2SWJIR3d1NjZUdVM3eXptaFJvZTQvMVY4RFJ6M0VycjdZN2FqbnpEdUt1WVFoRll3aWNyZi9HNHBFY09TK3JjZUR4bDhaRzhkZkZwT0dvL1lhQjIxUTFmSDdoM0JtbHpjaXNOdUlxQUFVNXJwdldVdW9ZcGM5cGVMa1hMSUhUZjF0bjFiQy9ic2Z3WW50TnNOc2ovSW9odGVPMktrTHQyNDg3cWUrSmJCZWNRQ2JjSkIxVURGK1FpdE5NUlhyY3M1NEY2UFV5Mys3YllEc1Ewd2krVXJGaHkvS1kxSEdqV2I4bmt5RFZrN2pBRjRxQzVOcGJyVzdvMTdwWERkRkkwNGR3R0FBS2d1NldYdlVhUiswTElOWlVMLzhhWFZ4RjhzeEZOTGZIV2lVRjM2cVlWd1dabmpZanNPYkYxUTF6THB5Y3lQRFg5SDlnczBxSWc1K2dzVmNjdVhocGJLRExNbGFrSHVGMUZKV3Axd3N5djFnYmlnV0lvOHRwNmNMTkduK2dDTzlCWlVHUm1XUGEwaUwwbXhodDdScnRsTUhiU1gzSzJSUHdTSzRHZDFtclFEWEVjMTE2aUFoMjB3ZGFoN0lYRmhPZS9DOUdlLzYydDRVaTRVemJYTGIyckY5K1lEYkx0U2o0OGR5Rlkwck9WaW1IQ3NUTWk3ajhKaHN0ZkpEVndhTDlDU01ndjl4bmZXeGg5ZVdHditKT3I2SXF6TTArZTNEaU1QdkZzSHRQT0pYS3NIYzZ3RmU4QTNYMEsyK3FLYjhYL214YVlBQkloRkwreVJIbnpZV2xrQVI5MHVHVDNpMHZzTi85M1JoMGlmeDZ3T1VMNGNNci9PS0dEL3Z3TUdGUll0NFB6NEh0THkxTkNlbFhkb29hYVRvejdZWkZsdWl4VmdLemZjL2w4TFEyVmJ3RWFwQmd4eWMwVnRjSGE3Z2xpOUcyNTQ2R0FNUXd0R25qYk9DZ3ZVSlN3UWdWc3NvSnVoZjZFSEx6QjhNWmNBa0RKbGZsV2NnUHVPV2YzTFJzQ1BBTk03V0thRlJWczhzRXpBV3FCWWJxWWRjM0xONVBKaGpTOUJYbVpkR3h3RElOYXF4eDJBYWZOWXVNU2xrbllkMVpFa2lwL1cvU3VQM0NYSHFCd1A4bDhyZFJUUWFFTFZ5VVBIUjh3UWxXd3JueVQxaVltREUrT0ZkMW1ZVG53ZGlIbUMxL2xMQTU5MFBkUnhyUjFFbUpNZUhJMVJtZmVPOXpKYkd2WkpDc2R0emVOYmVHV3JBOW9FQ2VlalZuUEdyNWhUMER6WE5kVjh2YkhGaXNYWksxV3k3ZUxxUkxjWkliMlZNVEFnQkFvL2g1S29mMmlaUmVTelJWN0w3TU9Ta1g0ZVp5Y1JWY2llQUdnTWdNZWg4dUdIVjhhb2l5R25IZnlSTkJaUk1uNlhMdjRsUjNNMjVBV21zWEQ5YXVyc29mbFR3aUtLaFdTY0VwaHZUdVBSSlhJdUFvU1J0ZGZ0SmJvcitncmJOaEFoY2VseVpYVExZQm1idDlzWWZERW8yYnMxWkk4c00zQTZhZjZFQzB5UVQ0K3FhM0J3VDhIM0x5Q1dwMXpldEFRMjhxK3JFcFdLZG14VkVtM1h0QWErWUlyazQyREY4ZWZnNEtTSVFZTVlxWVlNdnl0N3V5SUgxWk1lL1hKWVk4SjhGbHdCQUdQMVNROTR5VUxWNE5acndLWFFBYUJsZkVlZWV6TjhzeTBBNmFrbS9rMzJmcDl5T01aT0dPbGxUOUNVR3krcWlPUDZZSnFTMi9SbkhneHljOWhEbXR3LzN1Tmk0dGh1dThsZTFLQ1ZDaU1mY3pDTGxXeHl2c01YVlpscWM0VEt0M3liTFdta1ZxaDErZXBzS0FTL3o2MU1YaVZwem9QRkZ2cWQzdGh2aENpNk82dExNd2ZRYlFvMHdjeWtNcGN2Z2pNaGNrNWMvWVV6QUNkdXdhWUp1NFVKMVhtKzdPVy9Yd01kLzhGb1grOFN5SWNkTjQ3bDJFeGdRbHp4dVBTOVFPOHJuc2lRT1ZlaFlRdFpvTjhxOXBvdTZqenVIREtJekk3cTRISHNhNkFQUUxoalBWRUx3NzZkQjQ4cFdNaVB1bzE0eGVvd0JhSjc2czljZlE3ajh6STJNZzZpRjJmRC9BY0RJdWcrU1k1ZFBTVXBxOFFLYVI3R3E2V3dmVzREUVhoTHN3cnlveFl4eVdkdWU4VFFKZUNsR0JRR051K0d1NFV4SDFwL21LK3FCK2c2VnZkbHdyZGR4bUt2amZVTXUySlBWR0FYMEJJd3dFNXdyTDRBOHdCelVxYU4xaktNRjFOemlEdjA4TGhZc0MreUtGanRDQnhIKzJvVDA3OWMrL3FDZVFWWEtscFZaU0IrZkU4cDFpbGo4TUlWbTEwV3NWQzRlY0ZBQVhoVWRCeTEyREdvY0RuZVB1ZC95bGZsRkxPcXFMSStRaFhzZkhjKzNRN0pOM0pXN3lLVmtCalpwWG5Za3hrQURnVWhaNm9MaS9qNnhNT0VKTWgxaHl2NXlWUHlnb1dOZE9uME4wMGI2K1gyV29Sb1lNT3A1dnVPQzl3Sm1BZTFDekxlQjlpZUk5YS84Y3hzSjhHZy8yVUtZQ1lHbE84RDY4MWpWeW42elhiSCt6MGVCSVhBMmFaWlJHcDE2ZEZEcmJsSjNzWis3ekc0bk45YzFubVBuUUZCL2FMNEE0bTV6Z3VUaDRiZTFPNHc1czMvMENoRHZQVkZmMGdpeUlxUThYQ3U4NmhnOW5DelVYMExZS2pvZXp6YStzVnFXTGVXZWtNWVY5ZDdTT2xRQ3FuL1dqRk9ER09TcXVrZVBzWTMxVW1pa2I4ZTdzbWZRdDE4QWx3OG5oMEh0eUExbWZmbmZIemxkYXFreGFhZVhxNm1yUURPME1zbHVkVHppVFhUdSthUCtVdlVIeWhqQUZrK2xvM3BtVXRWalVLaGN1WHdFQjgzQy9JckpMVDFPYTM2dGdaNmhtWFJFbzVxMy9NT2RzT2VOSlpKZXpCbXJRakFDS1FHVWxxUXRvM3pIVmtxOWpvMlZXUUZybmFWMk55VGRCVytzeHJKSXRzd2RsK3NCZEp2M1loaElhdkJ3a0lDUWpGd25mcnN5bmh0U1prbWJRQTVYaXBWb3V6bVpsS29IV3paU3BkNnkyL0oxcGs4M0EvVlVHcVBTM0N0UXFiT1RzcUhjRWkwc0tCK0pidEdCTXVPMkhpVko4a3JSMnRoUlZZQ1NkamhrbHRoK1BIRzVJODB1aHFUNmZRMXJvUjh3UjF2WkpUT0xsb094VjA0bFhnZTZGMWtVaHd5K2VIWllBOElpRFZCR3g1SDVsYTRJbW12VkFVNnU5RllRZVM4R0JUQk05Mlk1a1cwelRoRTBxNHdsb1NaM1lPTThyYkRJK0Q2dkg4VUFUSVJQd0lIdklTSGYwazB5N2FWVUtiSVJNbU9SOUEyY01mUCtqdk5UeVh2M1JPQ3hEeExJZ2hOdEpDb2pzaUExaW5ZSStXazB1b2thOHIwaXRYWW53QVJ5VmpINEhOVFNXWG8vZE9PWFhKOG9CbHhRY2J3UjFGTnZGbEI4VDgzbzlQOENlR3JyeEx1cHdad1VuS3l5dWJoWFc5Vldoa3NnMHZwUkUrbFdtekhSQ0x5SmUybjJwdTRpYno2a044eU9ITDQvUk9TWjJqZk9ETndWc3JZRk0zbkROYVZHamJVbGhFSVRFYzdBVXMwK3dYUksvWkxubE9COXZrLy9XcjVENEk3a2paQWErWkhHQVlEUS8zODdVZ0Y3SXlXUDN2QkY4eUVJVnB1WEN6Z3QyZmpyejNvVnc1VlVEZWFmMEptNm5DRE5FaElSSmk4MHllNzBtMmZJVTVwY215OU1Ia05tSXpLVjBUNkk5cEdUS3NlV3hTTytzWHJkLzBqcXMzTXd5aU8reUdhd3dhb0xaWEZxQXpRRTV6Z3NtZXdMYXdzRWhYNVZQMFlHT00rUlpjNFIrY3RQeUZxL2RGOTR5VnpKbFJRcldMTFpLTFhKMzVHUjZhN2RuQys1cWZJeitEM0lFMkUzN1hkcFJrV3VqNThNNkNsT2doazd6clhMaWpXTkQ1ZXhEc0l4TjlNVGR1UFN5NEljVm4zQ1g3R2wzNlZpNUhNSTZ0alVRVVkxT0lLNWhGSUZ0ZThGYmdSVDgvd2ZIZjhIVUxrUVRCbFc1UVNsc2NjR1I4Uy9hQmRRQ1VueTJEZDB5TWtzN1gvOCtKWWhscXdoa0NmOHQ5L213WDc5MUlUdHAvUWZ1ZTdIbUFEMmUwZGxKSnQ2SlR3aDVlclFtMEhpN1BCU2piWHJZWXVXZWtHR09EejMxMUZ0WUJYdEM2eFZ5OTVZaU1uRlFXWkVyKy9YY1FiRmZoWnRYSmZ3R1BneVBGVXM0NFcyVEtmSktJRmJVMGdYTDJzWTJIWWJhYU5jMU5RY3VYUE96dnZDb3h5cVNUU2hPazVabXNYWWVvbzRmd05qVWR1UndlVktGcE5tYWVPRE5PNjlzcXlXQ3lsUkYzTVhPdFVYNkh1c2Z1amt5ekRINys3Vy95V0MvMy9LeTRpanE2TDhsdEI1a28rMmcwaVVLSjZMWUVhVlZQZGpQUnREMFlnb2M3NUJwbm8vT3JzYlJyZFJaazA5K0lIQk5mRnZUVDFoTWMyNUU3T09zMlJPTnVscTc1NEJ3Z2Z6WWM5dHk0OE5ETWZJd0ZOSlAvTFN4enp2bzg4ZHBFTHhqZ01KQUpPa1JxRDcrT0FnMGN6QUJmM0l1RUh0YTFvVkMrTHdZNmZyR1pqdmJEaTB3UzlMSmI4eXovWkluNVF5cFRPTXJNMVh0NVdmVHhIckw1VEczdnJMZ0J2SktsUjdyaG9GMlp4dWc0U2V3ZzBtNWVBSTdKU1h6ZmE5aUZkYkNRaVU5OUxCQUE3QmRLUXg5NFRqWjZtcHlCcUhOMmNBWDdyODQ0MjR1Zlk1eEJ0KzMxQTNWc0VRWlAxZ1RUUjhDUTJPMitNUEVWSVRsSnpQNm9WUm9VdVArWkxtUUtjRG1UNVF6VkNXK1dqdzFHQnJaOUxmWHZ6RFJYdlJMY05lMXFmUzNuUDFDL3JWdUtXL2pBVGpGMlNuV1RLOEY0T2FlbXBGbnlBWnBCWDE3SlVjMmIzeE14Wmo5ZGI0QmorcFZYWlFCdEd5cisydHVCSEdVTzdmblFzR1RtRnBKT2ExTURKSFF5Qlp4aFNUd3kzQ1FwRGZmNmw4aWJkNmJWdDlXZ085TmFTOWNZSzIrQS83YWtXMmxybDNSMDY4ZVJYZ3FiWGd6VzFpMythdUZJN1ZUWVR0a2gxTlFiVW4xUzliOEM2M1k1WG4xS1dHUUJwRDJESnlmWEZVbXV1WDJaNHZIQXFuOGZMazcrVzBpNFFBMjlUbGxhOHlsMkY4N1piT1gwTjFmRWl1aDRQQUN3TjZUdUxUYnpuTW1YSWR1Z3pPWTU0RFcwSUcrQitYODhtRzhwdE9nVkFxMlkxVGF6QUNpK3hmU1FML05hK0R2M1hoQi9vdHRJMlVsYUVubEp3clkzVUV4ZWJNbGthak9TZ1VWZlZoeGl2SmNhamZIakdtZHh6Mm9URWM2SU0yaWx5MDZMUWtLT0R6SVdIQ0RVdTczUmw0RXBBaGRXQ3dCbktOb1Zkb0lQQnU2Mk54ZDd2TWVwekFuQjdUZmJBR3I0Rlh5ZHVDQlpXc0RqMzJhWlA1WmV6cHFpV2ZWV3Vybkh2dWxxM2hRTEFxM3lmanhFUkJkQzVoaHkyMWo2ZzNKMjBQencxTVE1ZTk4d3RZUlY5U1FZWEFyeGRKY0l2dVppb0kxaGFIemNTRWwrZGx1bHFacjNhQ3pzMTl0QjZJMnRIN1prQ0ZZNDNrVUwzL1hGZUMxK2k4RXlpdlRPRFlCeVV6RU9zbUNUVHdNRmhzSHpCcExqVkhSUlI3L1NPbkJ0bW5QL0hobkF6UGhRYXJhdHhBVjNxdmF1TEI4K0YyazhhTkRQclhodEFyaXBoQjdFbTBiRUxIeTZsQ2x0czExRnNzODhMNitHMWdYbnZtM2Zia0V6d2tSdjlmOVdFQVlUL0JBcHdCK0M2d3Joa1ZpNXdRdzZISFFJOFhQOXNiTGlGY01sN2QyUUlOT213dWNsSUY2c1hUWXRwUlJwUTIzN0dycWJrWTBWZit3WFRpWVZ0b3NNMkRidklOU1Jjejkzb3dVc2pnMURCNVhvYmNIRTBPbGZXVGtyZUg4VXAwcWxpL3E0V0ptUEpMLzNkS3krR2dLeGVMSDQ4MkxkRVdxdFAvZHY4NjBVNUYveFRKMWx0RU0vcC9YRWRHWGMrbDduWDByaTM0TlhiWEhORU83bmpwMWJiS2Y3K3RWNW4rYVBEUFU5VDEzaStqbkg3cWxSZlBGOTZsMTJzSnJwVGRkLzhoVG5Ici9TZk1zRGRtVXNMcjdxL3hwbWNUSzlBd01JeDZ1NzloYXd1MnptN1loK1RSbDZUU2hOSmdhaDlIQ0RkL0pNWE9zWU9MMWRKVTVnMS9LS3AxYk5uc0puck1rdEVYTXhxaVc0cVM4R250S1hpdXRJYWorUE4zS3diNVV1dzRpc2htRjFOZTVkbWE3QWl1YW9NMDhSLzZBL05qZ2txaEp4TlZqMVlNTTBRSzZMTDhvdUFFYWRNRWZQdEpoWWRkWlg5VnhnczVIM2RyQ2dlbDBuUXhDV0FNclpZWWNhR01tbEIyMHhBNGpRRlhBQkM3aWVRN3VhUTUya0VGUjBxVHJ3cW1ocERMQlNCOEZ3cGxtaEpOM2Z1dlROclhsRWU1MjVvVEhQQ0todVFlR2tVRzJEWW4zUGlOQTZnTWhuVHhIZy85TzJqRm90SzR3aTdGN0hUbTA2OXdqVnFJTTUrZUNyMW90dFlEcXArN1VQT05qSTU3eFR3Y3d3S0VocGY0SHM4NDdodDB0QkZEV3o2bE16d1NtU0xURHhIMkQ2UGdweVNLemJDOXdIUzJ0bUF1WXFJdWFrWktMb2VFZC9KN28weW45OTVxM0RzQ3lVY2FLSUlBUjdveDJqdUdNTE1MZkQwT1FQSnp3NmMraHVWekxPWWJsQ0xlVlIxRDdQWktvbGtVVmFFdjN1Um9WeHdHaE5SMnEzcFhSei9RK2tId1hLTFFYbXBGczZpOU9zYS9veStmdkhQbk1IL3BmYzZveFExUDVoNHBCSGhHQlY2U0tWaUE5VlJGcmp0VTRXZ2UyZXYvVng2cDBUTElZcE5BR2NTcU9NbDdITCszL0g0dXI1NFYzWWVZb3RnRkh2ZWZ6ZEFBN2F4dXMwaFJPWkVJMXlYMkN2ZDRvWHU1bzRYaW54Yk9QNTBJR3JHdG1xZGxQaUhUTVdqTDlJK0JuOVdrTUtaWUUyQmlOSDFqQzNPNEFFTGR5QVc2YTA0WXRqNll2elc5TGhHNGplcGNRWnFScytDOHFhK05BK3hUUWxxWStyTHNXQnFua2paV3JQMjhUYzJ1VEN1VFBaRytwazZ5UjJxRlVSMExpY1JTclI1LzN1dGVXR3JPcC90ME9zYXU0VTVJYzAvcGxWY05seFY5WXpXZHJNRjJ0TUVGK1dBeXU0Z0xrRGZQeUUwUVpiUnV4V2V2QlNvTHRWQ29GRDNqczBVWFN4L2c5NzdpQTNXM3doVUwzQ1dtSTljcFZCOGVqWllyVkhRaWdiUnFsTDFMVm5LZTA2YVJ0VnphZDNFU1dMRTNCc3F0T3V1WnBOM1JsRUVZTlNzYnJsSGNoSjNKUE9EcG45Rk9Hb2V2M3NETXVGbzRxUkJIcjhPVW5UVXAxL3M1T0RlYlg3V1BaSW1qU2NKamVnVllnV2NyTnZDblFIN2lLUlRHR21lMVhudjd4Nk13aUJnZE9TV0Rrdld3Ti9wQkNxMDdVR2lwSWxQNkp4ZU9Pc2JLbzJ6cUtOVUd4MElWN2F6VVltYWRWbXloOHJZeDc3ZjN5bGtRY2JiTXlveld2Ni9zRTY4ejYvUU5XWnVzbGlGYmRIbXNGaDFXVGhKeGlSRjA2d1lDMHQ0OUpMcnV2akJoRFduWHJrNGVDTnRIMmwvY1BNMm82SXkyWU9FNzRzRkhqVEZtRDVYRFFzNTJZWkNVSFdJLzVWZHZXWWZzNzE4ZHpDUFhRZFRVMzgwUGdJcXpmSGJ2Q3hZNHp2OEVDc2djd3NqMy9zZHFUbSthNUNoUkZHT0tlcFVZdlhBNjZkQTJFS2dYTldVZXpuYmtNYzFEdWVwZDdQeHBhSGg4cHcxNkxGNXNhcmVZamFHclI2YnJ6UHdwd3BXancrOThkd3FsV09BbDRZV0prZHJkSGIzeCtabEh5UjErclF6N2NMaXZCOCtmRmkrU2dDU1hvZlRsSnl0dGJvOEVrbUdvai9Rb2dkclkwM3NMK2hEWWN3a0dVKy9CditjRUNQWjFucmpVR2I2d2dxZlVSaXF3Q3hyem4vYUY0cXB1U3dqbXI2ai9TaEVDaDc4V0laWksrVnlBTDRKa1FkM3FWWnQ3dmZGRCtWdG9YMGFxdGxwRVhJb3VQL2hta3VyZkhZZ1U4OW5zM2dueXdnZjdUTDJtUkl3OXJuQkpZMU5aRmlpU1VhOW1hOXd0VEQyV09Zck55Q0NMR1IzV3RTVklSY1NmK244QjBRMzA2bnBRdk5nOVVjSWs5WXJUMEdGVVFJV1pualNwcFZreEw4N09aMTFseU9pa3l6RFdlcDREcnlWTnlyZDE4MUx0OHJ2UU1tamRlVGdvQkgramdTWWFrcWdPVDBCcmhTNE1JMUMzQVBYVnpsazhaTUVnRGg3WEVFOEg4U2Q0RGhBTlcvUFFpVDB3ODcvMzMxdlA3R0ZwZVljZWhxMmYyNEdMc2hxYkFTekVMVjQ0UVNNOEJNcVNmWWsyV2FWY2VKM1lRSllNc1FNcEt6Yks2Q2ZQcGZveWpVdmtsNG05SWZxanZBOGtmOTJWSW5DTTIwMjFvcXNLVHNDa0xmcnlBd2hERnRIK3hyUE1ibjBneHdVUGRKYVNhZEFSOWFzbHlsOEZ6WGxwbmFhRysyZFE4SXlpcWM2WGFoUncxMHJra3diUEowcFFXTk5LaHM0amFqNjN5QXB1cDkxcjR6K3pTSHNwTFBMektwdTNkUDZDd2VEWUVyRjdpUDRObTNZT1RuNFBhcU5aVEoyUzVnNk1zelhGTEZXQTVxSUs0Z2dQenExUHVQdGl0dVU0d3BHMVRoOFFpVEFPeDhXNmZVUEFERlN3V3ZwSTBJSFhSYnVtSldsRWFJd1BPV1E2T1huNHpVZThzeFMvL0VpcExxbDlMVEZRc3Jyak9wWXQ3ZXZ0ditqd01XVnNHQVZ5aEFKOUlmbFBOUU9OK1I4STZWa25FcFk1ZFh6NzRnTW00eVhiRHNwZlpNM1NwNUU0WHV4RzBBREJGZFVxdVNBaS94eG9lSXoybDJmanJpOVRST05TYWVXN3Q2R0RsYzBwRDl0NkJhaG5EMmtINmdLWW8yVzlnMVN1SjRXNXRVNWtnNXF0N055ZEpzVk56WVNhcmdSMHQ2NG5sbW9nVDRab2duN2h6MkEvSHFMUUp0cnlDT0FEeGplOXFQaWxaSWErcDJGNHplMnFpanpHTFFCbWFvNzVIV0JDZmowQzV4ZXlISHlacUdmcjlXc0hXN01wSDVMWllSNmlia1VOSGxHejF3NVVlQndadU00bHp2YTlWTElaNTNsek1XWWdMbVRocmppWXZOcVUrTStWNDFjMVFYczVjcmp0NitrbzZRMCtudlFyWDRhS1R6UVF5Y0hkMEdRWS9ieGRCZkVGZ3Y3UFB3OUVGcFY2QUppeWxTTkRsNWpLWithY1JhWDhCUElJbG1LSVVoMlBTUUdESjE5NFgxdWVNWmk0bmJiL0dKY0tEYWlnNisvNHlNUFl4MWQ5K0dHMk5LY0VwNTF1WEkxSTA3S25LZlorT05IdzIyMW03OWdaaGl1ZVBYSkxvT3A3RkN5UTdqK1cwTjBMV05TbmRhUlB6anUwVFdiUjczY2d1WGQvZ205cmdrOGVyU0F5VHVsMEQvYk0venhlZmFjWTBYM2g3eCtsZ0ZpVXNzWkd6enN1YkJ3K0J1eXlMKzQyVDZRbkV2U0ExeDhDUDhmNUoxemRtUjREcWgyTisvclc3THVtL0pvRmtpK0w1SER6eXBsY1g3aGN3QXFBS2orTlNka2NpdWhsaWw4WUkwWHNoNlRmb3JpTVdZQnJQMDZhZzhKTzlvanBxekJpbk1oUGdhbHFyV1pneXNObWNyeVJpOE1zRHJIK2tKNTJwWS9pcEFoeXgrUlI2SWc5RXJhVnVuc2t2ckhKMzNHYklqT0dRb1ExYkxnMUF1SlFEUmU0OTBRbGlLejZjZ0o3TkkreWxyREdOcm1CWFhzd2tHbFErRmROOEcybnJwNElDK3FnWSttZGJjOGI3b29ndDNWbVFJQzJpUTZhV0k3ODB1K1RpbHdpaldsRG1MbEZ3Qk5jbDdlTlptQjFQOW1UOEwxbDRTUFF0YVlSMWJ1MHFUMTEzVmsvSFYySCszaTVuRUx1OEVlUUFtbHBUcWlYZDlzU3pNUU5hVzZyOEFlNGNBamVuckpjc3Q0TUxXZXpLdVBqUmoxODg5WUQzTlp1Y2NMQUdlQ3ZGRHlJMDZteUUzeUNRUUMrVHpyNGhucnlZczNRVHRmOVA5VkoxRHhlVHBJbnh5MEsvdDVQeVZ0UDM4M2tZclMzRTJadXdIRlVMYzkyUXRTSHlBZzNNTTF2c1Q4V3NaTTJYRkpNcHEyQ2ZrUHhKWmZJcEdIVXVkTG43Yld0Tlh4VlNPOVBoWFZ0SjRJRU5NeEZoTEpvaU80THZ5a3c0RlZ3WmJsY2pDK0lxeGNZcGV5NlRvMTFEQVBDYUwxVzBjQ0xNYVlQTnphbFMzT2VJcGxPNHJnOW1QNHhSMFk0UTNqcjNseUJOUkl2SGcvajcvOUErajZsV2tkMFV3TG1JWE0weUVjMXZPVjN4VGRVWXQwSDVrNzMvcFlNNmszK0liSFRva3B0MWpYc3ZXSVVJN1cyUVZlMm9KS1duL2JYQW9keFFTVnUvZUl5bzVRZFVuZGJ1Q2hjeE5waHJuaVcxSXk5WGY3aTYzdFVPSXRYUllGU1lITThSdHpTdVNUdG1PNjVpWXlnK2dxNHVxN0VsYzBGeHQrckdqa1NVakVrRWlXVEpXZzMvVmtPVjU4NWZZK24zOVd1d3JtS3MzRDhIVFFGK2tZenFlVWZCV2ZjbFZXdEhxMjZZdEpLdnBVdDBreDcyTnNPVUNHSThBTnU5Q1BPZmR0SW1HYks0UEJLNkp4bFpwdXBKMlY1Z1FyUTBtVXRseTVWN0srOVlZT1YrU04zeThIWUFpS3pTdWNJZ0lQOHB3M2luTlU3cndVVHBUdzZMMlN2d2U0VXJFRS9YUWtSQ1NnTEw2bmRSSVpxLzJ6aGREajZZcDFTbkVYR2tBSEMwMUREdnE2ZVhPV2VMK2dCZjBrdzhLVjI1eGhiK0FZT0Y2Ky90Rlc1aHRhdE94aEI2UGZoNVNKMkU3UnZkT2xWT1ZlaHk2dktsK3JrZGZTVmx0WngrZnhMTkVQRUtGdFpPTjliME45ZnlBZDVwbmlmaWc0TDJjWkpMMTQ0UVYxZmw3Tlo2ZnVTN0ZHTHNvLzN1eDV6UUw4NDE1OWFJT2t3UUJwRm80bjJYK0ZxRXQrN2YzekxZSThSdXROWTNYSDJuRkNENnR4TXBIeVFEWGdMVmhKdkRKbFM3Wk1mUzFpenZ5NUQ1TW5UMzlvbWlDNUYxc016VEFhOVJTVkRnbzJaZGhzZkZ1cmNPekRqcE5mSk9nUEZvLzg1OGZHWGZMMjR4bXh1ZENMSy9UQzg3TDJWTlRUT0p1QlBZcHNMM2xPL0JkWXBWYkszb3pDZGxvTVVobEphNVdWcGJSTFRvQ29mNGUwTUMveng4QjB6Z0NQWWNaWHZ2ZFQ3V0hKMUxveHZWUGwzWEJJNDBybjR3bTR1Y2pBUGJDUmdPdWZ5Nkt0YU9nTmhtS21CK2V3QU1ETi9yTmdEd25EcmJRcnY1NFpaL1M0WHlMdnJSUDhQN1pQbzJDY1liVzVIdG81elRxbEZQSXR1K1hxVFBiTmhqcXF6VlZXL2FjTWtiTmFYeXBJRnl6Yy9WaGRGTnI4L0MvNzZsRFBHMVlsZ295ZUZCUkpxQVlXNDIwVmpaRlZVV2gzbDAvUUFvT29xLzJ6YitiNVNMckliYUFwOXVVV09XTkc4QzZZSnBqRFlDelZHZXZUem14UkNVb3kyOExjc0crN2RoWC9vSnplc216Vzg4bzJRTlJCSlhtZmxuUkdjYmcrSElmMTBlSzg0ZS9vSktVMkNLR01NTmlHSVFTM3REdVRKT2tRRTB6QlFTejM3RXZkcmhGWnFJNTVQc0VJdHkvRW5Id1RJR2Y1WU41Qm05ZEViUXg2KzIrUHd4a2cxa3pHQ1hUQVZMWDhuU0JUdUJsNEZsUHN0ODZzcDRtd0dPYzU4UGltMkg0R083VFNaaC92bDNWOTVNeHFnT1RnYTRRSTJNQ2cwelZLSHVaM0lIaWNDU2hvbXVqRE9vYlZDeDFVS053dGZhYnB3NGdhY1NYckROTGpzakNOa1ljL0VST2trTnJ3YnVDYW4wZEQzNUdNWHVIUUZsMCs0SDBONC9QanNhMzlyTkNOcHAzU29kSHhMa1ZoZ3VyYnFqVStEVThSTGxkcFRaRmJDQ0dla0RUUytrUnpReDhjZEQ1Qllzcm82K01pV3pvQkRxTjFGZDV1WnZxWXRlQ3VYS1RsNTNTdVV3UmlscmIzNkNtd3pYOWhvUHN6RGRVUVRxOEpNVEo5QlRmQzZ2U1VZWmx3QXlpUEhZanpHVmMwK0RCMTVaK3E2Vk9nMk5UV0VRUGkvN0JLWEtFNy9GMU1yYlE5cmxRdjQrZWkxcEt0NjZ0Q05oYVFUT0srZzVLajdsSGFjRVdYMmNZMkNLWSs0MmQycGZxNThaQUdHL3UvNW1EVE5xcDNldzdpY2FHQit2dHFyUG1CR0ZiMnF5Z09tbElMdDhoMGZGVlFhWFRhZW9TMUhoZ3Zuc2NCWHpaZ2Z1VWpQbkRyS1oyV1AyRS83TDY5bHVCYkxEaWVPcEJRanZOMkVUVWtnYm9oeUttUVA5dkVwalRUZXJXM2g5SWFOMklxd0J6MDFNbWtEVFowNkc0UWVPbXNwU2J6c0wraXVPTWluT1AzTWRMam9lV0ZiUXp4NVM2YzFWemZVaGdYNU9QTlN4ZkkrUS9ld1FnaW5lYUdBVG90QVZaczlwSkxGRnI5RHNMRHFYdUlWZWg4cXgrQnd1T1hQUU9oeDlHSVA5OHJSSVJqV3pOdzNSRXRpRURQMEV0Sy9ZMVRvSlp5bk5UdFdmZDZGT3l5ekJsY3FCNWNHSnhtbVdrV0hRbWhpWENTVmwyTnVMVVdlVEtWeDRxaUxhV0VDU0NxOHQ1ZCtEWWc3anhrUUo5VDJ3NWE2eHR2bGlHMUszbmhRVUhaVkJGNC9HbHMvUjdXa3dXdm9QYjFtdU5GM1cwY3lrcUs1a2J5YTcyQ1ZaeEJERDVjeTYyazNmZ3RHZXpvS3hnazU5N1ZobjEvclJ1Q2pNOVNpK2tSVkNxNnExTEptWXlJSjNpRGxuR2VSWHp4MHdZQlJibnF3TnRBTG5HSUt3a2NiTlgrczd3MjIrQVdGeVdndkJpMml2VTNndXJxS3pHVVhrZ3E5enlnN0MvMGtJQ3UxK2NadnAzMUFlcnlzUVRsSzhEd0VvL0g1K0x3bnN3MUxoVlJTT0dnZDRYOTRvenNQbXVOQ0xwNjhDaWtKdm5hajQ5bHRMcitNb1JLVjRnV0RPdDRQd0phMktnZXdnY3JEVEJPV1ZUVDhmTVRERlpDdXY0eXRLdCtMdU12cUFLLzBjS1dBb25hNjg0R04rdmd2WEluYm1vbnQxQWw3b1dnNmU0UFVqcEJwbktnWFRPNWQ0TFJ5c0xLWkp0cTQ5VDdHb2hFa0k0ZVBjTnNXcG5iSjc2YjFIZnFTNW1ESHVKTGJXd3dqN2oycEdXeGlmdUoyVEJnb3h3Ulh0ZERzWDFudUdlbk9DZFlBenhuZk9uRlRVaE9SNVVSalFyMDlibTRGbDhxaTd0ZkZEQTVnbkppVzBmME5VL1dtc2xnUXM1eTB0Ym10VUxHaUFQWHFUVUJPN3QwMHhNYXFmV1JUWEJ0UWc3NjA1Y2h1V211U2U3WEpONzc2OTg0dTMrcUxCNEI0YjRVYzcva2pNRWsrVWhsUnlFQTRWcmxuVkg5Zk9oeXVlMVlWdExiWC96NFpETkhyR3VpdVAvTU14Vkh4aE5HUUpZN2YxWjRETktqNitlNE1GVC9zQWtxcGZzQnRWd0ZsOElLVDJJUWF5OTNVakRjaFhWNG1tMytIRkMwbTUyUzFraVhJWkFGRUlQOE1MTUF5VXJxYlNxTWRvZU5VZ212YTFLU0Y2djJtV0p0YVhnQTJkcm03azhhcE1yL1ZMUkNSRUF6RGJIUjVRQ1JTZHdLcFp6L3hsNVRINHNZSXQyOTZ5L3ZwYUovTjU3RUw0LzRwRmY0YWtzbTFvRDgvL2pneUV3R3lYUDNmNkNzT3h5WTB6MXhrNXpVdXZzb2UvQndqV2dnZG9WR0ErYmNVSnZxRkZMZ2xIclQvUDFTc0lETkN1ZWQ2Y0R1Z0xyRFFzVXVWcmlVWExMcnlGc21YMWFCeE9VdndDd3UrOFNVWlpzQk1GNENnNk9RM0M4ZGdVR3RXbURpMURldjFXRDhNL3pmeFJyd2MycmY5MzhZeEhsRS9FdnBPZkQ5QUgyRjZQNVREamNsV2lOTjFCb2tyMG1MSE40aHdvcVkzbG5Kek9hNGxDcVArNnVudWQ4VUIzbk5hOW52RTZwYjZReWdMU3RMZ2dhRk1JWEkwcmdGdFpkbzdRZnQvTVF0Rm9ud2QyKy91ZEFwaThuQ0pubDdsMEVYTHkwWlBUOGl2Mm4yN1hnc1JJQTE4WTFSUFFKU2FtN2hadnByemNudHdkekRsNDB2RDNDazBQeDY1QlFUYTZUUElOaUljVGMyenpwTGVCWStXWTJmYTZmb3BIVGw4YUF5UUM1VWhEMWptTk04TW85R1JQVzZSM3hibDJiZWRiWjZIUnVhc3VwU0tnRVM1NGdvdmY3Y0FrSlBqbVA2YWxpKzhDS0hJY1BoWCt3QkU3YXRpejdRSDFxRUxrU2VueFpoR0JpUTZHWXE1WllVbU0ra2kyOENGaG4wV2xPa2swdWRkdnFiZlZDZWowYk44T1duWnJiYS90bndhZEJKMVhFM0FVM3FVRTZXSzVTQ0doRDFDSUVMckdLclRjYU5sWUI0NjFjZUE1Wk84Rzl3dFlIOU5ub0pDejFlckdWWVNVYWJ2MUh5RFBxd2NhZ1RHMmRneStOV1VtY0czYllkNFVWSUlRQlNhc2pudncyblNteUhxUGY0TEdwUjRpQ0tZRnVIdEk5Yk1aUW82VDFReW5yakRHZHRlNFhabHNmSmNDNThKelJtUnplYm4wQjVrZmV1WVErQmY1dHdDc1pNNjhVNzJWOG1GMzJ4WG1uSi8zTzRHcGZmckZWWlJZSUhtb1M3Q0U5VXFoR09lUXByQ3B6WHVXNmZ1OW83aFlzblpRb0JsUFJVbVp5NzlsKzN5Qi9ZT1ZmZkJ1MnVsbTM4cjVmeGo0NW96UGhXZVJneGZJZW05VUcycEVnUU5BSS85RWNxdDNxc0R6TytvcTR6MGxENkF2UVlBN1JZN1Q5V2UrQXhFZllrQnk2MnkxTW1iMzdlMFlWNTRlRk1lM3hLQm9UOG5SQjhXdHJQbDZpTVhxUE5EZkkrTUt1V01CTXNGdG5JSnQ5clBoRWtiUEowYXBBQUpkb3h0akh5NnF4c1pSSC8vYnJCTGlYYkpDbTJTelVZeitGNERta1NNcE1icEdpbTVLd1VRbE83QzROeE9GS3ZQOXJqK1FSRFpPNGl1T1A3ZFBNY1M3cndaY2tEWWlJTHN0aHRuRE1pRkErZ1dHRnBJM0wwWmpOZjFEVWd1OGZlQWFZMTVCcmo4NE10Wmk1d2RJalNsNHZPcDRXZmgzVXZSVm8xNXk5UWsrQkRhRW5qWDQ4SlFwMTZaRVcvR2RpZGtQMXMxbzFaWmp4OHZWNElSNVZocnhMU3dQOEs4a1IzNHNYcUtqZzR4NENxajUrbW9kYnJQMCtrNlpNRDVUMDArZVV1Q2luSFF1Yjd6TW9FWmtIUUxQd2R6blJWUVBuZ1ZoaE5KSnFScVJSRmhLWkNzclJqWVRsMGJJZm83U0JjOHJDVGhSM3NqWnNDQzJPNC9abTJKcXlCWjRoV21ucDJrSTVvdllYYXY5ekZVbWxOMnBwbHVHR3RNWE14NDFhMkhKcThxeVZtdDZxZm8zcVlTcG0wN0xSNk5GNXF4bSt1VHZmUzNZVndnb2M3eXdVQ3l6SW1zNTlaYlpNUE9idXUrNGpKcldQY2dXNHoyeVdlMlB5UHByZkJhR0lPaVlyUWRyZDBUT2piRCttOHM5TWJnNm9NdjEwTEs1SGFUTFRMbDVUR3BpekpNa3FnWm82VUJxRlhDSGJ0Q29mVTM1VkIrcGZqeEErNzhIRURYeHFPTnBWUGlOOHZBTmUxTldtY2JwNUpVZkt3VkpyeG9DTjlxS2toWjFTb0VkdTBPeHRjQUtPUUVpU0dmRFFlNnFQeFNYZ1JDVTZuU3hzL29hLzF4SHI4Sml5ZnlkUzRJTTlKa0tOODM1dk1QZGZyaUtIRDRoNHBuanVBMDFsQk11Mms0eVpxd1QvemVKTnlndWpwMlpMRjN4TVUvaVh5UjJmVzg3K3ArNi9wZjRtRU8rMVhuZlhDR2hyeUFmUTNYeEJEd2NoQTJZQ0lNVDRQM0ZoaGZJdW54RFJKUDl6ZDR1ZVpDbjh5YzdqVjdONi9nVUZwRjRsTHZkQXJtS3ZIK2RyL09DRE8vbEdmTGVtQ1dnTmxMOStieGxXMVBNTGJKMTBEclpJM21ocW4wZkFyekZqNmNTei92aDI5ZWh5WDFNczEzRk5OcENzODVlODNHaHArTWRpdmF4UUtQMHpmeGt6SWNmaUJ5azJSUXhSRGw1VGFWcUhRQXVRaTZ6MmFDbkczV25YN1JIWnRvc2FiRXhYaWtJd01qY0dHWGlORXFFRjFwWGxJZFRhQXgzdFlkMjArR0Q3U2JoQUEvQkpOUTlGdXFCdW1nOEo2Y1psRzBLUGtBMzlEaDNxcjVESHdGaHlkbVg5cEUzVWlTWERnN3hoZWFXZXpyQkYwOWFzOWREbGQvdDdEZkVFSWtsVjVpVytyWFJ0QXNCSmJySFpsUDVuSTdFd1B2aG1QT1RYRW5uWElwb1ViZEVoYTR4dmJRMWZWenQrOFZkRDd5SWptVmI3VmpOL2dtdEdTeUF2ejcyeXZHSDRyT1RobHBldjZkbzZjQVRMejNYVWRLWGVsRjg2ZW5GcEhMZUlmZ1FqdUxuSlE3ZGFaeHZiZFArRTkwUmIrRTI2aENyUE11MlFHOTZuT21NMEtzdXBWZ3NFZFZnMlFoYkZxZ1R1TUp3TGxCd3JBcG5VYmVLNmR1K3ZNZzVpbkNGNHpWa0dWTml3QjJKbXdHdnJQWThZTVU1U3Q5alVnR0hwUkplZmMxUFRYQjh1c3dtOU53bC9pTG1JVFJ4VFpFd2ppZnphYnFSNkR2Unk3eVZSU2tkbTB2OUxrUFpKelpSV0hEcVU4eXBqMU1pM1dybVVpeG42ejREYVFLMHJVMkw4M1NLYi83aXE1aG0rZ0Y3WXZTQjhaN3dCbXZ3VEEwK1pVYzZsckJIUE5jSkorNE5renRvcmtvVUg1OHB1UTJSUTgvNldYS2VnRUltdHZzS3ZVYkdWTFJjeDVmVTNqUXJoUUs3N0s1R0F6Z056MUFHeHI3czRyWldscjlWNkJYbkw1MU52MTFaeEg1S2RIZlgyU1RpWXFaWm1FK09SYzkyTld2TVVWVWovVU9KY1h6b0ZQSXRCdnAyZGxMUDd4VHBkMnRHWm1iSUtPTEV3bU1nRjFTZmZBV2Zacnk3a2xmbjFqMTRDcGtRRjhTQ2x5ZForV2NsaE9wN2R6K0FRbmkwNWVvVU90ZmJOVGZxYUtqekU1Q2V5TnN1eWFkbGc1bDZHcHQzWDVpNUpDQjZWbjhWb3JOaCtoQU1KS1dsUE1YYmQxVDVnWFE5bXFha1VlaUQrbGExUUxRaHlXV0paMVhUb2ZNTnRjRDQ0UHYxaFZkZEljaktCb044ZThleGRBc3A3ZE9kUlQ4NU40dlVubENmY0cyaml4TTR3TUU0dS9keHFaRWlyWWxKNFkyWlcyQ3pSV2VjazMzWDZPNDQ2eW4yTnhwVzNRbnc5NG95QTZ0TGhuWWk3OHNEVFpPRDJTanVxVnRpY05LVnRKWGQ5b0lmRkJBcEhWUE5Kd2swZ3Q4aXFrTGlNcytIcE9TdzlsWmVNZzQ2YkZrdWZRbFB1R3hGejNFejVWTkZsN3pJWkZ3ckZtd2h0NkxaQUl1QkZqaTc3dDRXbFNrQ0xDSDRzN3Q0RkZrb3d1cTk5SXVzSWM4TkpSUy9oRGx5ZFJ2czM3NjNBR0VXNEFKZDFwZzR6S2xDdnJ6RU13TTJoUW5wUzlvVGc5VllldTVFUHQ3QTVhVk1EK3dvTERYR0hFVWZTN2hoZ3JXMDV1YTZlRFZBeEJva1VOWDhQR0RCby9UVVBwWG9nM2FiNjhNS0MwQUhLd01DOEVsNm1ENW5RT2F1ODBpbjFHMVhnNWpqVmhFcWRDeHM4T2wwSnEwYkZoNE5IZ1RiWTBzc3ZpZTJHMnFQLzhvNTlJWGR1QlQxMVROYlhpdE0wRkZNN1dUTzFpUTRUa1VaMml3M0FrV0lieW1BZFhQUm5CT1pwci9heVN6U0JlN2lVa2dpNU5pODRlS0EyaHp4WXRYUVRUZFU4WWpGZnRiRmdCaXNVcEJuOEFHRThqM0hxM2t0V2hJYktzeFNHaEZsQ1g4ZlA1a3lBd0ljd3lzQWhGbytwSU92d05TYjhXaVNTeWRzWGdaVEUvZ215VVg0Vzg2eXU3N0hFcXJHWmMxYUdveDFGVndiNXlybEgwSG5GM0RLVkJMS09BdklYR3pGWnQ5VTNYMWR6S1VzYUU0UjlrUjR3eGdoeGNiT0c5NDVxalNKVXZSNXVtc1VHTmVCK3JUNFc4V2laNGUxeEl5MzVma0VBRWZtQnNla3NEdTBENG1yaVJ0WUVpVmgrczVveDB2aW1nSm5WQ0hlZ1ZUdEcrMWJBUE5tbnd0Q2pPVU9tMzg4MmM1M204dU5Ma29RWXVvY3dNanJLRkx6amp3bnEzeVpZdjlvMFlTTzdWTU10Slh2OVFDOFFUc3N1VHUvMm1MbWVUMzYvVXJmSVMyVURIRnBQN0dwVUhtZHBWZ2N6QjIzUld1MTZjS0ZJUG1DMyt2K3BsVjAySmJvZmRENStOc3dvZW1OTTNzU3E3c1pOZlVSQWlJZzRvb3lLajYrSHVmd0tVZzRXUXF3MG1vL2lDd09udWFKM0RyZUZtdnVPalBqZnVUY0dyRjZKNDZ3M1VpWGVlVFhMV1BPYTJYaloxTCtPdzNXMXBhOXdHUGovZE52WWJtaG5kbkJ5ZXhXS2lRbDZuRFMvQUkyaFpmOURMSnhIRU5wMmEwZmVZejJRVkFlS1NDK1gzd3VRa0UxMUh0OXhoWGpNMUI5aERjRHd2SUNGT1pJMCs0SGppTUhRUXoySm9GRVhCR1NvRzhqelZyQlRkdGdQaVkybTRjd3RkY3p5VW14d09QM29saHFEdzRwSjFKdmRVMEdCM0JRWnVrU0VBWHAyZlQ0djdPbUt0OUFHZ0V0SFFVT1VWSHlpT1JEZ0pvRTd0KytLd2VodHoxNXE1SWxqdkdtbkVDVzlkampXMEpxbjFLVFhHc0FQMFN2eFg0ekthTVRtY1dPYmR6T0JtTUY5VGFNcGJUOUdMV2l3SHNJU2c0eEVXUlFtUXlKWXlGTGZveEFUSFRUQUNvRVgyRGRGeHI0NGZDc2JtRG1idTI4YWhkd1BZcHVUWkdBRGoyd25iYTI5QUI0aXRibCtHNTdwdWIxc1F6cW5ucVJDK2NRb1lmOGZwY3NONDdyeENWYmhEV0dGd2FmS1RydkVqRGF4RUNWYXVHenY0SWlzT3lqR3d6N3ErNTBtbmJLMHhXY1Y2UHE0TjNaSGF1Z0NYTmpUcDZBSjI2WmdjaHdrL2R6SWdLbkZIb1B1QStQemhIT2FwQ3JzV2dKL2pSOUpYVS9NeWczcndwNG15bHpjOTJqaFRnWVM0RmZHVmFXcDQ4VHdwZVhFNzgzbEZ3RHRXdVJ6YTMrOC9TeFVZWHNGRGRTb2FwTmp2M1J1Sk42WnJ5RFF5d3ltbDR0anc4UXZPVStVK000cHY4MWRhOTFESHZLZDIxa1c2UmZCOEF5SmxsdHlqWG0xTXhDRUsxWjJwMzAyVVN4aUkwQUg1NGp5OUFFSkM0aXMzcHJWZ25vMzZtK3E1dUpFRjhub0o0cTBFdVM5MGZ5L0p6aWp6THk0U1RsT0RpYjd2UnRXSkRTMUUzNU5BRFpuUkR2RmdjZWdaY2lCTG53M1pmMWZyN3AyUC9IWnpyM1o1VHJWOXNHTHU5VmRPd1prdzc2anlOeGwzZVpQSk9neittN0M2aTNaQ3ViVU84N1JhN2R1Z2w4N1R0TE5LZFdnQm9IY1BSRjFqOGRjU2ltbm85dVFsd1ZDNS9vN2VhbzVzZnhibEtUMjdOSUxUS1UxeDVQM1dLeFUwRjJ3WlI1YW95UU5oRUk0T1NMTGQ0U0RxeXoxeWtYZng1bXYxMSsyVmF2Mk0xenZXTW1rdVdTU21mU2hPNXppbjVTOVMxRmN0eDdOMEZoSkdiczdVa1FKaURKa1dMNWxmcGFzQ05aMGtiSjRGY0RxT1JmQkcyYWR5THdyVnp3L0VneFFIT1hxTFBSSnBTMnorSkk3OS9ZVzBOZHRybmFvSDFFNjd5MnZhZGJsY2tjUmsrYTFCSU4xeG5qeUNUNEs5VC9xUUU3U1VvRFFSNnhqT0hFMWpVQUtFK2Y0SGlzSEwyTiswSUJGYlNsYWszKzlBQ21NY2JneDdsaS9ENk50UDh0K1Z5QmNWMkh5U0xTN01CT3piS3BwZjRqOVY0QlRFM1FBUmhSeEVCVkMyTy9SWGs4ZWttUzBkUHRTS3dtc0ZLdjhMVWJLaUx6cDRtU0YzWURFNHNtQUsxK0U4c2hrS2tqanJhTU1FaXJLUXFERVF3V2JVMDJGSW5TTEI0eW02M01VUW03Z1d0bFIzeHYxOTBkeTMvYW41MXVwZGp0eXJkWXppclhjK1NadG1Nbmhaa21PQnFwQ1lSbmZzcSsvVlpWU3I5ZTVQQitqZ3lkUzU5NTdEbXQyWDZLaG8zMklLa0tPb0o3UTVrWS9ZTHVyYms1LzNNc0Y2Wm1lNGhLRit6YVNHeE1nUkJoNFFEZEFVMlg5V1Z4eUVORXVyK2RWcWErdTFxdGQ0UFFXdVk1MGhleXRNbHZBUzJHOUpQdGo5cFBMQTZHSllscTMyOG8wMWtlaFJXWU1RbVdPV0svcGpoZmJRaVdrMno3d1RsazR4bjNPVjFCZm0xbE81c1VSZFlyaThzNWNOOGVnZ2VENG55eUJ1czM3cU9JcVRJbWZqTUI3VWcrQjc5V1JDSVdPMk9kaDVoYXM5K0pDcVR3ZmZ1c20xbnlhT1lhbkp2WVhTY3NsbHdSNHFId0E3ZXB1YWF3NHRISHhXSkFXa0lIQm9mdjk5UjFCRGNSb3gvRi92anBrQ1hmOGdHTm9paDJ6dklsUDh0TzJNdGxsYUZDT1FNaXpKUENsN0pmZG9mSVpxM1hmZG5pSHBTRjlHaC9CeDJteVRjUmpuZU4ydldub1VFZU03c2IzQTUwaGVCTWxXNStXQ1B0VUd1aVJjR3hBc0NXMHk3eEY4eWVCeWNKZ205c3NCeWxuV1ZLZlVjN2dVOExTb1dXaTFqd0tVdGhjL2JLSVlsUlc2U21PZ1hyWjVNM3dFZERjY3dNS3pDZkxTcnY0MkJGcTc0Z1p5N2J6aStZajEzaEV0QWJoQlFJUDNwc0NBV2F0ckhLTXpXTzJ3NWt0cEViUjZYSzZsNEdpUjRNYzk1NnBpUUViTmY0ZlNsc045dzlFQXBGSGFQd3V5eHNMUUhrd05BdkMycnNkVGVZV0h1NEQrYkk3ZHhRY2VjcC9iQVpsMHhQd1VsYVVjUU5OaFZOMXhOMkZmeWZWdUFNTjRBSVMzTXZ5b3o2dmc2MVYvYnF1alVlVlVhbTZBNko4dTZGU2FXMUY2YVFvNWdlZlZwZTNRbzUyM1NDbG1ObVViQms5QWlObmtUdm8rWXczMDh2WmlXN2t5ZDdDcFErQ1U5RnBhQ3BzOW9XMG1abGdXTUFrN3VSS3ZQNlo1NFFZeEs5YmkrUno0SCtrZkZvOC9Dc2M3TGdkSWNSUjdiSUZ3U2xueUZFazE2MEdoNC9nZVdtcEt5RXVKbjVNNCtkVzJ2ZUdhZFBIWUxKZWhOdmF1R0I0Z1RLWmRPUWFERU95WjVjOVRjTTAzT1UvOVAxdVV5SnBrVWpMaDNpMGxabE1aemRVVlNaQjFQOVkyUUl4UU1yNGowMHRjdEJxMHliWSswSEg1YmtQSTRQYS9BcXZDa1hkY1RtSTg3VkhFTW1xRWoxQXhhNytiSVRRbnZQVnNSVWE3VkgvZnhDcUZ6RlNDVFVKVUZmb1dqOVYyajdxTzN4YUl5N2Y4OGQ3QTRPSlJBTEU5ZWcwYy8vTTdBNVgvNStwNEZZU0NFRFhtV25oWVZzZjVhRWFPcHBrNnhUZXR2WmM3aElQTlN0R05HbXdHSjRVNUluVjBWcTRzK3VoeDJYTlBPaHk0ZXJQRXBqNWYvUmJpMS9ISnpsREJDaW9aLzZNays2dUNFaUxoQkd5QjFpbWoyYm5oVGRrQUZ5K3FDRnlDTmpJcXBOa3RFeUQrVXkyZENveG1za0Z2dGozZmVpNmpLamNqa0JleVBGWUlmM0dFMitQOG9PempyVGwvbkcxaXcvMmZneDhEVVpEcllHbWpmZTlwaXZ1TWxGWmhYdlZJOHBxc1UxU0hiUWhJeEd0WlJubG5YOE0zUEhSSnVQZUJkWFV2MFo2eGwxOHBhbzM5R3h2OWhwZU90bWZ6OE9VVWZsWDRyOVprVG1sYVhQMnlVUHJ0dTdiY3d4SVIxNnNieUVVSm80eXlNZncwYnJsWXpoTkRLNiszNXY0V2cwa0dEdGRkL2tzOWVZRmlXcEpXeXByR1ltYnp6ZHlUbVkyMEtXWEU0WVMwUWUwZ0Y0NG1pYVNOeWNDZWhZdGFjbzkzR1FvTEJjMGl6SitqV0tIU1hEZXR0SWVFWXljd05WVEJhaE14NjE1MWRvRm9id1FndmlneG5CdmpkZXZTV2NHR2k3ajVPWW12NFFVRURSRG5jbDlMM2lIb0hPbzc2RU5WYmRxaW1BcXZRWHpvcHdHUnc1TGZ0MDlOT3dFYmFSMUZRbytnNllwWnJ3djF1RElKc0M2VjZGZTZhWnZ6ME1jZGhZQ0Q4c3h5US94b3JjNnljbUYrVHBvQVFVa0lwaXpOR1Y0eWl6QXZNdktiTFlBeVpDMmt0M29SQkVkdzYrSDIwalpiK01iU1lsMUtaK0o1M2FWU3lqUE1CNkZCTUNwRUNnTlFXb3dWSkVaZ1k3LzkvNUpzQ3JXS3VMZnlxWU0rOXhZa2poL1NyRCsrUWh2azFOejIzZGNiNmFVLzd4cTZxYWNyRjZwQmsvYk5vSXRqYlJud1RWdGFkaHhRc3YzdWJPQmtnZTFweTM4VzNvMGRZaTlJNDFxMnppazJTbkliTlA3alJZSklMUVZTdVMwMXdPSUVzM0Jralo1VExHeFZwR3Raa0Q5UGFMZDdiajlrbFNXVlByQ01DSDRQR1RtR210N3kxS0oyV2RxQkdhdmVRRVhFNjZ2T0N0QXlXZVZtRkUzcU9DdzdITnhhNDg0VERhZDJ1Vzd2eWVsWWc4cDVjMmRTVzdzMHBpYVVVMThGalA2Q2NsUHdWM28rSEcva3htMUJJbUU2T2loQVdVVFZHRXBGVzZuL1FiSDRBN1J4Qlk0RGxKN1MraHBMakpnQjV2NkVvMzlnMFhWenJzcU9Oc1RhcThEU21kRVg3cHhidzhIVStkdk9mUERvbDdKU3ZkM0hPK3ZpT1B6QjZZM2tBeDBTQXVWOGJOeGFSS1ErNHBESjdubzhOS0I5VCtINmk5UWpPUEZtY081ZmZGS2hRUXR4SDIyekxXTHFWa01mbXZLL2RzblNOc3RqMnltbXplZ1NvWWpWdWJZSW9SSHFidmxHelNac0VIRnFkbm1HYkwvQy92dEduM3E0TzNYOVhEL25FWXBjeUEyNHNocTFrQzRzWDh5ZW55dEE0aWlmRHRwN2Y0a0Vzem8xay9KTDNDS3BnQWhwSGVNVVNibmU0YnlkTHhBZGx6UTZ1bmRLYmtTSjEwR3BEdHdXV1NvQndWOEVUdERSaS93a3BGSzRyMW5pNHFXREEyUkE5UlVUbDhqbkFrTnZqTy9WaTYwd2NxcTUyRkUxdlFtWFVOd2VpMVpITWZNdUw4TjFacGZDY09wQ0d5M3M1b20vSGVsMmo5bGlyV0tHRmg2bEZXdVBCeVNzS1lEdHZVeENkOGE1QVk2T0NRaFB1cTNDV2k3SmR3dDBvdC9WWFR5WE54QnEwS092ZG12dm5SWWVzS2w1a2hYQ3RlUDlBRkxaNndKT0tydjVsKzJ3SUpPcVBGY2hFekFVUlcyNUg4a1dmU3RKanpFV09XTlJDVGUwRXpNMHBxSUZkbW15UmpRSHR4YUVvQzZtb2twQ0t6Q3pQRDlBazRkbVZNQmt0TS9hUENrcmJpNDJJVjZHUVRSWWtIOUNxblFKbWtSVkJnNEF6NWdCR0JEOUIwNGJKSmtjL3JsRDdMVTVjbXpsVXpnTDh0Uk5vZUlPZ1k0T2NZTEp0TUlzZ3E3b0pDR1JRT0hSOTk5RWVLYldXZVJ4cXcwNGdLS0laNU40Nmt4NFlUc2xaZnVsdXN6TGZURkVoM2pEZS9xeHhPazdvcjJTYTlqVEV1aEpZZ1IyVkdOWmNnMjR2RjhyRFVxZEgyWGZyWGdrbENoVG1VekdBQVdRU1BOZjJHUE1SQ3dNMUZGeDJQRHFHT1A5K0NISkQ5dEIxM0NUTXlRNU5CYUlybXVVREFaRVo4RER2ZDhGbyttTUlObFZDeFViMXRKRVRrcGl5R25hTmpwZ2FjREZ2RjZVSjhjaXljT3BrSnZoRVA2b1dRUU1qYmVab3daa25jenBrL3hCOW9kTXdsdVdRNEdxSjN1NEdPeUJvMnA4M0xrYTBQMFliOXVHUFEwQlU3RVlGRzNoRFlQVThEc2xydkI3SUt6VERmN3ZtSUpJbWYwdWtIRURGeVovSXZUVmkrZXIxWnFCUXZxSDh1ZnEzTUNnaVQ1dWVsaTdzeDRqdVBtZzFiNHJITlQ1dk9td1BlL0pTbXRkZVNEWm5kK0ttT3BNSWxNTHl0OFlTemQ0UW1nQTJNZTVYRVJWeTVBNFRsazVZcFpLeHp0OTRxRDFRTGRMakNzL1B4RU5ZUWtPSFFCNVkvanVSc05rR25rQ0pUTDRtYmM1Nk5VUE42ZUhrR003STc3eW9GMndKSnR0UTNmdXZZdmliUHVDbGJuQnBJUGVYNmJHQldSd1JWWHdvWTFwMXU1TEk5cE1kSDNsZUZMeEFzZzlVTWNkdEJjVm15ZTlNT014Q2c5Wk5aRGFaTTQ2dVZFK2d3VU9WZXhuRm9VcG9Ya01JNklJaXpWTUZ0RmRJaDY5Q090MlZ4SnpBejZHcFZvYkowWVFSbkZVTlpOcHRtdnZoVXVuNFVrV0VYWkxzSjdFZFV3WVdGMHpHL3dQWkkzSHppaXhqODZkbTBnV2I2ZGdwaWpLaFozT0xTY0lSNmRvYS9Pbm03b0NQUHlpejE5UzFLNkthSlNGNjBLbTlTcm9aelJkNmh5ZzN3M0xlZUp2V1VBS0Jmd1IxZnZIUlVyZW1laU42b3lSbVo2WGxPZSt0YVQ5cS9JSlNhQnZhRGFMaS91RWFXaUxWNHJGTzJlMi9TSlJpTlM0SWx1ZFdZTVBsd0lpVytWZ082R1Y4TXFacjZKZC9NdHYzdnpYa1VSWFZVakRFdkhoa1JMSGIyYlJFWWU2SWJveWVXcVJ2Ui9mMitsa2k0ZExRR1pWTVhobEc4c3grNTN6N2t6U1ZaUmxtditIalMrNEswZ3JWcnBKOENGTkNGWnVlYVV6RnJoSElKWUZxMVpLeFQwekwxZjAyMmZxTW80azlweEk2ZFk5U1BlcUhYZnd4SEZRL1lKaTYySE9Rd1hlVmE0ejdUUVdFeHVIREhtYlErNEdid2kzaUZwVUpweEVYUmdqSkhwM3J3UmliWDhtaEY3QVFMVmJCZ2ZaVFNkY3FxMlJDSUpZWFZnTEJxRFI1bnJkajliMmt3WlRSaDdtRHdKZklOT1JPTGo1bFpJQVFxajRNdVlQanJJRTRxazdVQmNBbkNXWHRuTEI4bnVaZTNDenpwMG1HYThxOHBuMXhGOHdHcXJNYmxwb3lnM21NMGdRZFo0TlM3d0cyMVNMU3NoK0hGNHpTS3dXTjNHVFZHR0ZEUVZBdVZ1OFpMVmgzZnNNcnBNcy9aMXR6T3VPMUphNm1XNWxpNGxBSjFFT0hqNzZYa1dzSWFvTHFuQk16V093R05tMzdaVHZZRjQzeVYrNm5MOHdtMjNGclNNNjhsQWFSS1RDa1VnUDd4RmVQb3NGYy95dnZ6Nldra2JUU3EycXZ0WCt0MmJ2dGhnQ0JwR0J1NndmUWZCc0Q2QXA1MDRnTDRPcnJLNGM5RDRML09sanQrV2trZ1UrWFdldHZsbmt5eFBnL21UVkZtck1CbUtmUERKTGZuMXRBaG1RMzYzNGNocUNtajJWUDZ3cmdWaWVpRnVUNGhHS2Q4MldKTHFJVk9zMjdLNFJsWk5URnNvdFZseEVrQVhNbnpzcE1LZloraFgvSnBoZy9icE4xemsrNFMzQWVXUkJoanVMR1gydzA2OGdJdDMveVorRmQxYlJaM2M1VjVlS29PdlpZNFlXaGRRaEhoNXhydDk5VWJiM2ZRWm5MUkpuVCtSSGNGSW1mZTA5VlVCSDBQT21BelFYK1NFUzUrVWxxM1BGVVI2WlVJUkM2MFp6enByQlRZQmZNVVNzQWtDK2hPNWhxVllZQ0VMeWpnZUhDbWRIWXh1azhHbmIxT0dGSHBFMWtuVWVWNjlUOUExd1RnZ3h0OWVWOWZVcER5WmlQaVJNcjNERXAxZFhjVDJsVlJRWlFUMEJMUVJPUUkvVnNOaXZqcUlDdytKM21aaW5MYUlieXNvcUpCM1RZTE9FbHlrNWN3emJLQnZqYU1aTUdBYnIvTUdEeEg5N1NjNTZTbnZtUDlHZ1BVRjdMQTVZWXc1SUVVT1I1SmM5ZTdMTURsMjRTcGNwUURXcjhDdGRTbS9KRFJLNk5OcmhVV0FxRzFMQkF0SXlnOVdxRWZOTW55RG9aOWpWR05ZWjFmK3VBMVV2WDA5MU8xMW1ha256YitvNDR1cCtER2JiVFhoczlqczlzT2JwNEc5bE9rWHZ2bEZBS1lzNTF4MTFFbHhVVVNZS2ovek42eXZMY2JXS3JpTW9LMUs1eUVYTVJqN3hJQXYwY1B0eGJSL2RJVnRnRWhEcDY0K1VER2pseWZlYzFpTzhVNUhyaTQyNU5kc2RaaXZkRjhzdDJBMVRJMDFJQ201ZmtFZW1oZmRZemR0QTNqclIreGt0ZGFxbTZ5a2FsVU5oMVQ4U3ZUVURDRWFOUk1uV3FzK3licXlsYVVEcWxrSFJnOFVyNmsyRlJSV05LZWcvVmpyR3dLbzVKQnBNb0Y4cmF4aFU3U1hSSHFaTVRyTFdVR2RoNGdQaVZtQ2xxdGhhaUxKb05tbTdnM25wOThhZm0vTFpMNFFkL3JxL0orbkt3OFM5d20zREN0cERxd2szVlRWajVHdEs0MU5QWFRWVTJ2UHNhelVQdUVlU1M5UkVRbWh5Ny93MEI3d1lwRGNmZkt1QnFIc1I0dlhncUE1RUxTM2drTEIyNnBPY3hweHpEQkZONTVDZHp1WUwrS2tCQUY4NjQ4M0kvaWQ1RWJUYjdWUzlkaHVTRi9MOUY0Nm5GVVNzUlgrcnZMMnBqZXFXc1JrODhuZVVpSmlzL015MloxYnZmRkliOWVUeWVONEU0L1FUNnp5c2xVWUpPYmU0U2lRaWV1ZHpFNVlGa2EvWkJmMysyUnlpQXlYN3UwUVJDdytYNSt5OFZlWGxuZ2lnSUN6ZEE4L3d0KzBTK0kvaUVVTG9wNXlPeitJNnlPQzdjUEVoR0NSZ0s2RHhQbEUrYkl4aEFJcGVCV3RMRTFLZElHaEQ1ckxRQ3diQ0x4UVYrbFozc0hSVkpQcmF5SURQRGVXZzgzUURmaE5uMmgxMkpCL0dWS1NpY2xCd0dqa1J2S2ZvYXRraVZyQzFMN2xEdFZ5WjJFYnhsdGlmTytXV0E1SCt0T3RQeHQ0dll1ajZUVEtZL05pZ3QvTk5kaG9nbmtOcm84SGxaYjJtRmF4MllSNmYyNUxES2svY3pQdldTaXN3em1jV0hjU3A2enJsN0pXTzNwUVE4VEVhUUN0bUpVTWNiN3hjMmU3dVgrNlFUUmVOaUo0a21ISzgxNDdMMUFFNktraUk0aHBaNWVZclJoWjJxeGxqUXIzWW1nNFEvODhOdUEyNVpqM0h5MXFBeWxaSDgzVzcyMUZPbnhUZXhmTWcvdUN0VXozZ0c3ak1Fc0xCZ3N2MG1yK0hCSXVqSVpPalhpaTRkN1BKcDJhYUdsSm10eU1GQlg2dGpoWHA0SEFjWXArUUFrM0o2MEQreTFBNk9ZUXFkMElibTdlL3FZNG5pYUZmeUdrSjNyMmJ5WjRwRzRDK0ZLS3lKTmVhREJ4clJsSlBUSlFhQm1HcGt6MXJUbXQ0cmNvSCtHckoycG14Z1JrKytvOWxvQ2hFTVdTaHc5MXNvNmNRRmw2RHJZbUNjUFVNZml3Um9IblhpaUNmWDduSEZML29vL2FkSFgrNnp4dHBhMFQ5UVVpYktEeUdPRmlyaEFtc0ZDWnNNbXY5blhrRlZlOU0xVFk2NmMybE1CWW9EUFVTaGIxcTU4Q0ZVZ3FDZW10VDJFbmdBS3Q5MHVqUDlYQms4T3ZPbSttYndQSWNyTXVxWEhpUGxKNmNoRWFCTXFUaEJnN3ArS21pQzE0dFVzNUIybmlwVzMxTE1JbTVkTFN0ZVQwdW1RSHczNytuSmxRWnFvSWJUTnZpNVpoSk9HSjVOU3Y4YXBjeVBjTDlML3I0TU5DeFlHQnArUlNOalpnR0pkWWR2OTFNY1VIUTFLRUdBNFdmTEtKN2l4MUhObXJ6VkhINkEvMFFXcTQwSGZjYm5BZm1NWVIrcGxuZ2Vnb0wrOXNkdk54VnRzMEZjditaRkViWmdDM1VXdWV1blVPb2d6NHBPQURjeXZIN3dPK0hrQzErVTRVK2gyekd3T3N6QXl6OXFKb2wxZUx5UEVRVFFFdUo0alIxUWltWEV0ek12Y3RKUzB2ZWtMU0xtTFBpcDJkZTRiOHZrQUhlYUFjaFFSbVVia24rRTFjdGI0cm13cVlkZ3p1RDZHRVZocXY4eExBNXB6UTIzQVJSMlZoUzEvdFBzQ3VXdnVCQ1BWMVJrdngyR0FkN0ZuT3hLcW9VaXBJRC9CcjJtVmdqQStTU1FISjFVQyt5UVFwQzdrRkpoeDFwbW51YU9UN3JBU1NVdGE4MDZFOEl2a3ZjWlMzemFRMDRqRG5nWEg2S1M1MmtObFo3OW9PNElKVEdUbkE5aVZjODQ2VVJtYXN5SytNcWVYVGowZHFsaHhyQTRyREZjTHVtM05HZUZsNTN2am9ZOGxzb0Z6ZC82aTl2S1ZDU3hJSS9QTmhqYWU1NXBHMW15RlNqVXF0enhSMEdIbVBlRGZuRFFON25ERlpUQStPeks1V2dkakd4akVCWjAvTktlTG1CNW1WNklFOU9neGprWSswODRKZVRTYVU0Wkh1akZRRTdNWFI5L1IvY0dIMHozajBNMTVHQWw0YWNSMHpuZmd6VEFtOGNlL3N0eUd3b0dXOGpob1lYMzVndEYybEpjdk44b2Z0eHlsK2pXV2JlSHNxRjBrL1JNU3RhNEl5aWp3MWJFZk0xNVNtQ2ZPTGxsN1pLTVNhTExtTWVXSGpjZzlkcDRPVVd3bDVmclB3ek43OW52TEVsTXgveitYTWRtWVVyeUhRWU94WFBpZTJ0VU9CSjN1SWtFMlNaOCt1R2Y1YXd6c1hjSWdXaHkxWTN5cFlVWUV3OExPcXB0T2ltcE1mb3REeHBYMHNhWFMyVjBFVWc5WEl3RGJ5VnQ1ejZsdDR6MzE5ZHRIbTJybjRrWEhjQXhqZUFaMHE2aEpDbm5nNkIya21KdE5LNlRSampuYnNCK2x6cy9iV0dxV1F4a0RJeTBaYm5zSnd2cFVoSUVlbmpVbmxZUURVZncyUmpGRVBYNEtGSXRZaGRCa0ZSc3JIYnBMcGtFb0k3eC9LbktzcjVqQlpQMk9qQjNBbDh3RE1vUU5XV09OR01jRE5wNFNXNWpQUkxoMnNFUlE3cGZzb05xNm0zaW1ZMHVkVVNuWWdIWGlkdWVpRlM3NGdsVytGNkJMV0hOZFZaZUN1OGJvM0RocDhrYXVwOXJZV1d2WkNyTEV6aUlydmgzOXE4VTFhQjBEUWdNWTBQZlNSUHZsS0I3eFptVzFWTkhpWk5ZWDFxSGFvR0M4ZGtPcGFRQXo1RnkyVVRXQU1Uc20vemxZNlljTEU1eC9WbWI5bGdCMEFleGwxL1hNZm1meXRPL1ZGNjAyc1U2NmEyelNuRUtrK3JObk10ZzhYeVFzaFAreFJKNk8vQWJmNnNZUUVUbWRmODlwRG1ZM0VmdUhUVnBHKzAvMkw4dWhkVzg4bXFIZmovQW9TY1pqa1NRRHQzSnZTMWlIQjBzNGZrNWl0RnIxbDFKQXlEZ1Q1ZHNxQ0x6MFh6MDhBRitSTno4aTJhNVQyZzQ4cWdna3I2bkt3bDhhREZOeEhiQndMRW9RZDgxcFlSRDlqYmJnMk5KVU8vc2ZqdTR1Tk9pc0JJTWdLTHpXeDNHejVDY3JHNjZuN0FLWXErKzF5WmhHQkc0V1d6NER2dHdYaU95QVFkKys0VVgzRS8zVEEyazkweVpsdG1ZdFV6ZjZ4YmRoWGtEeTRZR3VZV0Y1VjV5VlkzNWhmMUlhcmt4OTYvdGZqN0RETytlYlVZYzIyUzFNYjNBWTNDTFdSeURyaUdjQXpIWllPaWxFVkszQit2VXBicnVqUEJCWmhBS1JXWXhTdWFFRklpeG1HVnZ0WE42WWtnRkNCRVRMUnVlL2s0SDk1OEN4aU9NZnd4UTBlV2FIQUx4bUNUa1BwcUlBNzJDK2RZM0gwVkZGVW9FaW02M2c1blJ1bldGdDREMGNka054VWZubzdmbDNlQW5SY0hIQk5NVm52UWFibUFkYldxemptaUlBY2YxRzR2d2RGTUtHUXNQOVhVUFVrbUJBTGxZSmc5SC9IMlNGdVZFMjlDZmVWazA3OG41bXhvMGJkZmFyOG5vRWx2YlA3SzBnSjdGNzNMOUVDQmxCTUZIaG5haUJFd3h6M1lqWUtkODhQYWwzQVRoZVRRVG1aUCtnQmxtNmJGVE5TaHZtY1VwK283SXNmZElWYXYzc1RudjYydmZpWHpqSUJuUkJSanJsZzRsVlVWbTdNdlJDVXFvQmFtUjFtUEVFemdXd2hkVnNhNlFUWDdpek5xL3BUMytkeVpWR21BUEdQbDlJNStwVGZOQUo5eDRicFErNEdDZWpFZERNMTd3WURqQlAwWUxxckpSejltU2x6Y3poQm1wS0xMUE1JenpLQ0tPMFFWQ0JXSUcxRGVpTldhc1RFUTFDYlRVTk1IWUhVZ0Zzc0JFdEh3clVoSjNEaCtqT3V2UTFLV3c0QlJ0ZlY4cmM4SEJMak0zMXRMU3RNYlhNL21TRDNsbmQ3RDhSaFBQbFRQOUtWVXQ2d0piM3VUWkJKckZ0ZFBJd1VRd3hhSlFDUGdqcEpHRXc2RW9sWmY3eW0yRk5NdEZFMnR0UE84RzF0cUdabnpZL0RoZC9GQUNrT1M3N3VUOThlQ0VFMGEvTFN1aTZMd29WdUNtSFlHc3BLTXNEeURwOTZuTnVERU1GbTJXU2hrbEp4dnEweDZVa0VPcTFPZGErRzlJSXJYKzY5VEtaajlkTmxVWHM4OElsS0xCRWlmeTdreU5kRXRxSUpqOHZ1dEJpN0hKNFpNdDdraW1qWHpZeGpMSkd3ay9YVTUvTHd2Tk8wYlNQNmtFSTVXL0JvU2NJSWp2cForZ3k5MTJDUlRVdmJpSTlsc1dpVHoweFAyc05VelV3MjNPc1Y0WEFJVnBQNXRxdnY5Uk1vRWdZUDhKYVNLeDRPa1d3UkpSd3dYbEpTVXRBYWhycmtGelZTTGlPUmh0emMvZEpUVE5pUk8zMjIyLzVKdkFHeS9sbzAwZlBXeVBNOVFyQ2VnbXhwVVRyWFlmWE9LY1FTajM1TzRUajdYaHVQMy9hOHQ3Skg3OXZXK3JyWnJtN01ndGlKQXkyQ2p6cU1XZ3VTalNVVythdDhMRzZPTzBIZ20xL3hmZ0VBOHk0SS9wS0FGSFh0bXlwYkZpVkFIdDlSeW8rZFJ0ZnJjaWc1cUg4OGxzcllBRGJOeW51N3ZwMzQ0dTdITGx6bWROVGdaVkJ5SVhwdFJIS1pmcjVEblhEcFV3NkNOYmpMRXBrc0o5dWs3R2ZtVi9PUmxiRitvUGw2dDdXSjA0ZnZNZHFCUkFqaEdHZmNoeXJZdW9TYUdiTXZacjE1aWFTNGxSdndrekJtcUZ5Sk13REF1WDVzUmZyRWt3MmFNbGlGdUJUYjFhR1lqeHM3aWhHajdZbGgwdngxY2J1ckg0NXBrWFQyaWxDM1JKekovMkhQYTlldWtNQ3dkSjhpckxJbzhlQVRjWXlwVEI5S1dpVGF5VmcveVROcDBia0JOSmhBS3RsWWFSTFlBWGNZbEJoMEFVNHUxMjJua0JSTkUrSU9pTThqR3V0N3doUFpKclF1NmNwYTV0eW5LN3JPVFRJNldzRUJVaHFMOVJ1cHJBbEdhQm1aTmtBRGliUkRhUjZaazR4YzA0b3RNdmYvNnc3cnc2eDRaUDNiVHVSQW1kZm4yN0VlemI3S2Z0SnRlQkNWRi9xcGRHS1BHNGpkYS9CNnJaMlZBZjlPSFR5QXBEb3UzcFM5VWNiZXVkZjFUc1diZFlzaGhsa2pOSWVHekxXK1RxR2hmaEtNSWdmSjNqdDk4VE5UbUFaTDFrZ01tbWx5RWdXUDZ0SFJNOHBXMFd3Q3FMNnErSklFalVZckdJbDFBbVEwL1NjV2NiM0pOVU9nci9JYU9waW5RaHJTMVU3N3pkL3RiWXErYVRsTkZSVFhNNEduQURqbkVLUmhaSEFEZ3FRR3BubTh3NjJjb0o1bENCSmZlQ01mZjJodXh5UGtPN0NRVnZSVmJYWTNoZ0s0QlpxVVV4V0RNMmNYRXdONjhQc1hGSFArNktpb0lieHBudzR0ZWkwMktqb3VpdVVYc2c2T0lNRXlkTzVndlpoSitUV3RhUFpnOXJhUFgvQnBCMEhjVVMxa2E5YUd5MXVSK0Y2Qmc5VkJDS0RUcmJLMFcwenNCWlZkSmVKNUhQYUtzdTI5ZGpkSGtqNkZzTnpsSVM2UUF1Tjk4dTI3UnlEMm1EYkg2dmo0V1VlZ3U0SjJZREkyNWVvK09DNUJ5VHB4dytHeVJvSHFnNnpjTzlsZUNUK2pWeHdnV1lBS3hQSG56OFRUK2FiU1IwaDlETTZWbFJPUllZSWNVSXZuMnRTdkR0c0NNb1Y5a0Z4akl4RmRvdVNHMjVBQ3NLMUxZMElVYldiSlFCWjRUR2lnV2FjUnlEWTk4WHdRSjUxL2tUVDZvRnJzK2RYZ3pXRTRkWjl1NGM4d0pXRm12dFg5NzFnRkNtZGlWQ2ZUUDlYRDREb1ZsR09FTittcXUyV0l0Z1J3emFLUU42Q1ZqelI1RUxPZGhNTkxBaUFKV1NtbTFCTGlUakpqRUNyN0RHaEQ3cFN3Rko4NFlTelZwWnh6ZUxWOXd0bUh3ZDhBUzF2M1Z4bEtIVU1lWm1jQ2s5VWtIMXFQSS94ZS85cW4yd2R3ekZyY0QraWlGRFVHMGhyQkV2bVRYOWxldXhienZ1NHFEb3dCaFcyUG9QZks3L2ZIcUlzSWY4M3Nya1Jqbk1wVWxReHhaZzNXelkyZUFaTWdrRmMrZmZxbXFLVnpES0VGb09rNXNqN240Y3JUOFJaTzJWQnVnTm5DQml6L1JsZndGTTZJcG1lcDk3S1BOalFqSnYveDNpZDhlNkMrL3QvcUwrTzd5algyQUVjRlF1MVZpRmY3cXltWkh4TGJNdTJTSDFIZ0VtNm9jaE1NSWZERWdBcEd1OVVNUm1EdWxINCs4TXZwblpTS1VBc3Z3OWhHKytuSEVMMCs4RjRjZ3NnL1RqbkxJdXVWRnhxOGJVek42eDNvQitmUzRnd2hva21uM2lJdEFhdFBiRlU2dTBBQjhNVmV0SjV0QkxaaHRQL0szemlnWlJEY0ZsTXNVVFIxUlFZZExhQXBvazl4VmtZTUorQ05Kak5IMW1wdktUT2s3eXNjbTJxcmIvUlJ1bkx2OHl6TGRWRFRQbTY5ZEdJZmlWSFZFSWZGaTJLMGJkRnZkeTF6R3BsN1VNM0Y3a2RoY0tZUFNjRVZXSG95Wk54c2N4V1cydHB2am0vekgwTmhtYS9MZFRSY1hMVWpTTk5DWFRaNnNSbldwZjVaKzBibi9aeEVaS1hhUzEyeithb0d4anI2N3J1SmpjWXkrZ3E3Nk1PUHBVM2xlWXB6Rmo1b0ZCWXFaSjErZjJPbGNDS3JyZjJja0duZGF2dml0QnZFTmQ5YllqN2NuUmRlOVpiSTNWWk5oN2RVOTMxVWlDYUtTVmd4dndrcWpoMUtqSnBDYkJWc2tMSU5qdEVNQ3ZubkRVNmlsdjlleC9TRTFTOERHOWl4azNPbVJXaXhmUUpVdDRteDRhdjlpYlVUMGFnZklPNUZ2ZTNhNXVMNU9helZsc3NGZUdXRWJmdTVLSEVLRXpJQ3M2Nk4yRzBHU29pSStIV0NQeEFUcWZ0VVd2aG1hM1VMVHAzMDI4SmsrbFdqYXpXbEJOUmJXSTJmVU9sY3g1eFg2M2JxaEpZd3J4ZjZKN2lhQlo5L3E5WXBINEl1VVgybXExeE10dy9lN251Z3QyZ1JCd2dlR0JHSjVDWHRSTDRlcDNFTkw5MnpvRWZuVC9NVnRuZUtyMGRza3JnbXNuQThLZEUvMUJVNlpOeVVhdUJJMUs1QlhTUjh4L1BXWWRhMWFBSGdwMXJveDF2OE5wSkRldlBKVXJHRGtqQmt6STVpaHJPVUg3Uk1YeG1qbGR5SW5YcmhDS284TXdwdHE0NFhUVnhzdC9aRHVWYlc1eCtFdVdLeVA5aFhkRmNZVkk1eHZuUk1OeG5UTG12Y3hpNkxaVTM1VC9Rd3pmaVZWd0tJOVVreUswZWpHYVkzcjFiR2ZiNG8xUW1XMUp4Wk4xL29VeXh6SkRDQUJxVy9maFVxMG1XNWIyc2JJZFBQVy94K0hRTVNzN3FLYlZkc3FZYUJkRjVFTzUvUXYrR2VTZ1J5ZGlLOVZwdStGV3VCaDcrNnZqdWFMQnozdUhFSDlwOEpKZkVMYVAzNWRXdHNlTVBCejk2RW5hM2lQcXQvaDdpQnJsY1BmZDV2bHZIYVErYXVNdmcxYmhrd0R2YU9nZEcxdGxpMUFBTmM4cUZGTFVpdXpTeDZrc2pvUkdqWkhiQkN4b1RoK2l3RHRsNkt5QzFDMFU3Vm11cnJicHdMT0JrbnhUQmFiVWdQRUwvZkRNbmZYMDBDekxobUtjMjEwR2p1NUthaVdKcnZuSnBpbk44VUlZUmVkN00vZW5Pb3U0Q1Uvb2J4a0llOStWWHM5SjI0bCs5NGQ0VGJNUzFaNmY3NlFBZ1hKL2QzQkIrR1BMSThZeXh5enVGTEdYbGowWGRqZkd4dzdQa2NWaHlzenVwR01TMkkzaGRmMGpCTTAzMzFkYTJTSGtZeUZsTFE2N2VqU0F6N3NCMXhHQ21RZ0tod1lhSXEvckZiUThKWm9nR2tIZHN3bTR0dTM3UEFtT2ovRjI0WDZTalZBK0ZDM3BLa05Tczc0cG4xNUMyWFh3MHBmNThrSVNrOHR2azhIMytiYmtoNXZyWnE2NWlPUG8yS3lKYmg2VGNucjR2MFBrY2pqYzUxeklaTTFOVmRHd3oyUlc5M3VKdXc0M1RDMlhxOXJCTU1NdUhVSlVFNENFNHFjWXdlcTJUWXdCU1ZOVHNzMnhOdHlHTVAyVXpGcHZVY0xQSUM3ZCt3OGR1MDFPcTVKNjEzem9nSEFWSlB5Y3ZPR0lqYnNraUh4RDJoL2FBNUhoQis0M3lFM3pZbm16SDY5ZEJldi9FLzVMRUQ4dWVCcFpsVmVtZmo2Q0NWZU1qT1lpUUVyVE1DSkZqRzdYSXZTaHRhdDV5czVFV0wzTjlsQlFyOTlKd3B0R0JLUzc0Q3Zubng5ODFrMHBDY2ZkdHNYL05xek11SThZZ0QwcmIzanhwa3JsRU5OTEc0bGNNeDdYSGVzSm4vTURhQXA2MG5jd0V3Tlp1a1AraUlJRjJxVjZXaHo5THA0RkE3RkkxOVhPZzk2Qjh5WTFGZFo5OVRRcndTUUF6V2RRY3dzcTE4ZzRhWVBJaVludEdyVWR0Y3ZZL3QzVzdPQnRNUUVYaWVnU0pFQVJsN0FZUnpPSTBrSEJrUzZLOGdyOVNhVHA0Y0ZOZllGM24vTEVYWVhUYno5QkZjTlFBMUdFTHdmQkQvUDFCOHVoWHNpVDNDellBN0xwNndwTFRtRHpXVmMycHZrdHJPUlZLTE4zYnlMYkR4MmlzVXQ1a3VoaDhwWFhDK2I3OWZkZitBcEI2VHZ4ZC9JRWw0TVY5WnRNSCtPNjNHTVpPLzg0eVY3WERDS3ZLdjZCZkRjRmZZQ2pFWS9mRlR4ems2a3JrazYwVXVZam5IZmNnK2Q1Z3VjeHVpY0NNODhyOVpOa0Y3NTU5TG5SejBzZ2NCRVVtcnh2ZHliaHRYbHJMb1VSN29pa2hPT0NoZHVHOUxaeG1rU01TR2paa2h2MXh6Q3c0ZVRmWXF1cWgzRUl4ZlF3VmZSN0JrK09WM3pLMVYvSXgwZW5SVUtJYVBHZkpPNWVKRUpxM1VsZ0kvUi9QdVFoaCs0MzlOcmM5bHZrWDJuWWtFRytleTdTTTdhNFA0MjJhVkdyVWo5Yk9YVWkvUG5QMitxNGgyL2ZYR1c2M3MraVk2a3BzTjJWVXZKbjVKU1g1OU9FdHFmNlNpd29nLzhTbjVHd2hWTllLQWM1dEJneStSQkcrREt4TExZcHIyV0RFQnl5NG1DTjlZSWpYM3JEV3JXWDZFSU1NS1FFS09wdUpneDc5K2d0cjhkZjRtV3ArTFFtRVVXeUQ2aTdHNVJtT001Q3ZJdFcwT2h0K0JGQzBhVjhDR3ZCVjgwczd6MDF6cTlDMlordU1VeGlub2JDSnVpSUNQYVdtbWhqdGs2QUNlNVBkL3BxYloxVmRGU0hVNXFPV3QxSnJESFBvRjZTcG9leXdUTUg4UmQxSGxNamFLV1FwZkJnS0pBeFJ2TlpUanFTckMrbll4azVBME1FdXppVDROMTZFQ0Q2Qjdqd3FkQ3M2SkNva25YZVA1dzBUOXg2dml3a0JuK0lsQXUwNGg2dnl6NmhxOFNsWHNHWUdXT1o4aUtnOGh4Y2hzWmJFWUtHbDZZUlNWT1NFVE40TGg2Nm43Zmhka25pNkFmcmx4ZFVzMUIzOU9HMElDZ3BZdjljRUxGQkpFUVlzd0NxVzZ1TytNNGdrWk56SkJSdmltT1hQNnBNbVdCVTErMTJKc0cvdmUxOExxRjkvVmlrTCsrSzhnWlQ0U0gyQnZQL2JWc2ZCVzkrKzEyeERnNHhZdXJTYmlXQW1GMGVwTWZpZm1qNjNORW5tNE5CMVdzMTVXRWtyRjdOVCtTc2JZaWtkWGJKeXhmbmxRL1g4cnJKYlA5MEIxZlI1bVY1ZmdzMDNIN1BYZW9pQ0FuSXhkTFNxSU9TUUlZTW1zS3ZDazJ2eTBNSVVncXZvZDh2bHQ3M2I5TlMwcjdNT0FaS0p1MmpBNjdqQlZKVGljYlJGZTlVOHVKU05jaENKSU1MMm10SzgyM1RwSEh6MmdWQlJBWWRkN1oyNE9vWGdaWXRmcHF3ZG9TcVIwMWFYYlltMnY0cllCRmx1L2lEczg4cDBkdllUMHUyRWI2ZmhYTm1FL0xCcmtKcllFVFFTSTR4MlIyWXlRUWVzNWU0L2x4b0FFbEFpQmpETjFNU0NUeEtkVWg3b3lCaWdWZG1jdmtNTG1xa3B2NEFQZ3Y2TWZYWkR4dEZlWE9Bb1JhZ1NsR1dubnhPWDlqWUI2RE9LK0J2U0pSL3p0MTkyLzFmc0k4akY4dVhaTC9kOFVVam0zVkpnMzNlVDZ3dENTUE15Nm9LbWY2T0NuR2VmYityRzZqZ25ickIxVk5EbWNsMFF4R2xwVVBoTXZlMU4zY242NDVpMGUrRUtma3Y1blI0Vk11L0tYV3luSVVaS05GWDUzR2VyWmtsRXlURStLY3ZWdXpnVFhnNUNTdXY5UFBONFRTRXhNYWRaaU40alVTNTFsUlFxM25lcm52UzkzYnJ2YmtUTjliOUdEeFpSYVd6VUlFR2E3RkU1ZUM0U1F2c0lxMjcwTGQxY0oxT2VBa1I2UGZURWpqM0JPL0dzei91WXowdGF4YXdzbjlCcVROaHNLZDlZOU1JMHM1RVFmdDVESzlaY1N3TkNGYnlzaEs0UVRvN1hPTk9CeHhDem9DVFVEakRjNS9JSklDaVN4enVtQXdkOXBxeHVsRnJpL0tHZm9DT3lUb3NVT3YrclVPNXIvOU95aUd3Q2h5OENpMzVsNVNBS3UrS1h4ZXVQR0F5b0lrQ2tJVGpDZ292K2F5cS8yL3JZK3N4M0RzdGs1cXMwVGRHY2FUaWZOQWZEWUMxTnpkaGluekpLYW03RG51V28vYS82d0RXODhEM2V5NjV5N1BBaWQxLy9wbkJtaUZ5MFR2WCtTTUlsV01vTUVTUUV1ZmZtRGswNGFKWGJZYmNsWW9BZzFlNStUYXNEc2pzYS9EQTZaZlNyWExWQTc5NkIrOXF0aGVlMi9xbmdDQ3BYTS9yMC9KK3E1WFMvR3QwRmVEbzk3V1VsazE2YWFuK0gzQnY0WFY2RHk5cG9JLzFMT3hNUmFOVktNbzdNZ3p3UzgzVjlkT216M3I3N0JhZzVDOUR1bk8wUUd0dmlxNVE5WGc4amZ4TlJWYkl4RFRCNTcyT1dlRGErT1VTeFBoTTQ2ODJ3azFoaEM0TzRsODI4aUIxbmNWUzJaeHlVRXdYK2w0YnI3ZmtWVERoTVVrTVFubVVJdm9QQ3FRSU5xaVJPV3I4TEZsdUlLMjVaODBXeVVXaVRKblFTZHFNOFRIMCtHb2JoM2lLaDlMVXpJR3hWcmRQb1RkY09UVUJPSXpvS0dWRnptVHVsTjJ2aEw0WDY4YUZjSlFheU5jR0ZQaDY2WW5ncjRSNDRmd20yRUlVYzBzUTVjb05VaHBibWN0Sy9Vb2ZFWXdxL2lvMFhUdnkwSmd0dzYwYTJiUWRjZlVMUjhqZ1p2bWlmZEpkYTZYamhndFJ4aDFzUVM2SGwrNVRFWkt3M2NHV2luWHgyUG5rV2VhUHErSWRickR6dElzVmxQUlZSd2p6Q0taZ2J4cGdjY3pRbnFSTWlnc3ZoRlFtVW52ZG9mT1M3UThubzd6SFExV1RDNjVDQkFEUVE5VW41aTlkVUtwNjF6Qlc4OThuSUZPbG9MMXZ5UWxzU1NOTVpKM3Z3dUdmYU5jd2Z2cmI2ZTF5N3k0alNFSWhOajRTK2N2eXlvMTYya0JhY3FiTWVOQ1RydllxNWhwbml6eXkvR0tORGZHL1VBZWpHNVcvcVhMeDA5eDJsZE9HL3p0NllrVGtNay9iSGFXUmVIdTJzUTlCMm1ZbXhxeGhQOVZXK1NLZXIwU3BHSDFVazZQenQ2SXV4SGJTcWxra3A3ckI4dHduM21SWnkrc3lMLzhtcWpRWW5lMU5xN0ZrL251TStLRmhscDdKNk1nT2ticWVrQXl3YkxoK1F3bkNIa3REMWtIdUxRMXBMcDd5Qm50ZnBTU2Q4S1BPK0E3aUJhVWszV0JzV2UydmlCOHJ3NzlvdjdBTHkyR1YraUNWVE1SeGs2WklSTk1aTzBVZmx2SkdMdmhWcHViUGNXY29PTWF2bmxFM2s3SlNsYVpOMEZCak1Yb0xQaGtpNXF0ZU9xamxuWEFmOEt1VXhpMysvYnlkQ1JSNzIrZDUwQjFPYjd6eGZvcmx6aHdJVWsySjg3VlFPM2ExRk96YjJMSEFCR2JQb0ZaNTdzZS9CRTR1UmhGYUhMc0Y4Uy85L1ZNRUN3eGF1REdxR2NFcXBtcEx3NUdDbjE0bUUrUkRQRUk2V0lyYlNMcHcycmxRODFqeHJicVp0TXVoZk43VEhiZHAzSmt2dGplNTl6MXFKcFlHeG5CcDJiZGgweGwxc0FKUWt6RVRJRGh2TEsxN2UvNU9ySVVUV2htN3pYV3lHKzNGM2pYWkN2TElQWm5pamtQYkI0aXkzNVpuUHpvUHZ3aU1WcUMzWkFxcjNoWkYrMFl4TVJ0RDVzOXRqWXlvck40ZCt0Ylh0RGNvNnlKUEo4eTk2VVBmUk1wblpYTmwyVW11cHBiVU82cHhmRk55UnhhQ05VSGJFbVZUZ20vZkhLdlNMTW85cnhVdUYwTHJoU3pqbnAvQmVWS2FvZlpjNHB4MVJvamxYUDRyU0lBWURFQWZmalFZMkxGVkpwRzZHQkhrOUpzZUhZbXpOMTJWcFVEdEN3ZHZGVnRnUkxRWVNRZmdRV1hzWUtwNG5sMG1URTFTSHhvTzA4YTV2dGxlNXc1bjNzdTVtbGs0cU9WcU9TTk9NSGZETTh0dnVoREZETHMrOVcrZ1B3dGZXSmpCUWxwL3ZBblFDazBRcTBPLy9mVXZBY29YNUpDLzJFTS80VFZweTRLSUMzN2VIdDkvbkZVKzdpbExGdm5mQjYzNE94M3k5dnRmd0lPSERIRlFHSnpodUJwcVAwVENEZW42ZEo2MmFVSUJ4enhzOUtlckU1SWUxVVFQUEl4OThMMTFNRERoK3VNYzJhWWlvSjdEOGFiQzFSOE9HVTVYREhmd0QxNVlZamM3OE9Wc3IyVlZLUTlNTlRlVDZacGFsb3hXc3MvVHh0RnE1WDNhbkZ5dlRaa0NWL3RqbE1LdkYrQW9Lc21NWHV2aWY2MkFZbGxBUUpNbGdLMnVjd0d2SWNMUFBWcmxtaExtY1pOSmVQRmhHb0RGRGQ1Y0wwczhxall5dDFKZE1PRyt4dS8ybmdoaGlNWjlyUnpPN2trSyswWUdLQ0ZDRFkwNHVKN29lOWxvSE9RajAyNUk5N2dpQjMvTld1WElyRk81S09SMndsbWFIalpBREo4Zk9mdERGRUtiSmFPZFlyQ1Z4eCt3TjBmUU9qYTAzOEVzV2dIOW96d1VTUHRKZ1MvQXVNVmxvOGpCYmJaaFk0aUtScmxPL0Q1QzRoY0hMdk9CUExNK0tEQUxsUGQ3akZ3aDEyWWhBUi9OMWFVYXhTZkVOYUIzeXVWbG5BN1ZvbUpTZVBaUWtHS2syMW56TEFIdDFjTDFZQURFVG5hZm95ZllnL1YzOEhGWG10bFBKSFpjZ0Rkdi9tZ2pzM0l6N2w5cHBSQU10RUtXK3lsQmpSZmExMDV6U2d2aHZPVUdYOVozakxOcnF1WFhRTERGWG1CU2VUVCt6QVdRL2FsRVBMTldPU3ZWTDJPOE9FRm0ydTdxTGpRZ2ZLZE5ua1F1ejF3SVBxdit5MkRHVFB5eFpxOTlodUNaSGUzKzUySUYwVzJrU1E1bGtpZSs5MnlvandiVjBUVmZKczNIL1cyQ05OczJvaG81REVlUy93eFhiaTZiajBMYVVNa0w1SW4wZVFSUWkvVXkwYmE4WURqOW94SjI0N2RIOG9rN0ZqMHZvSE0ydVUxeHVoR1MyaHd2K21ycnJYNHJPa1VhcmFoWU5teHlleHNGc0xCenNPUktEM0phOElIdkxlTk1pdXl5SkVOUHVBSlVQWDZDeEIxQ0V6Vjl3Q2hwUVBINFpZaWZDRmhMRjFJUXQ4NlpQeDYyZkdpMUVkMHI3dDBuZnNWeUMxKzJ3bGVtUE0vYUlrNGdoamx0VEtPRkhmVkkybmNiU2RBUWVDMVRPOXZxNnBUUDZvSjR6WEJkS2picTRzczkzbzVRaXNQTDBaeTVDVnN4b3lNaUIzV0lRb29UUk1xckZRSTFoaXlIb3RzMkZ6eXk4NFk3V3dZTFg5ek1JVHJZbjdLTWpwQWk5QkNGYThkZFZhOE1WQnNtOEcxOVlBZmtlQ0o1RC9OUkNFOEFsRVhITWtNZWk5TVdEVTdZSWp0UnQ0Q0ZTYy9hTnhjRmpsYmh2K1pRaEZ0S2p6ZG9LK3ZDRjgybEM2NnNoeHBFK3R1VkoxWkhtUDUwN1pta01sQ0NhaUlQcU1DcWNJWlVXUnhnVkxxVi9CUktLdEc2Mnk0Y2tqdnBNNkRIWWF5eS9RNGJUbUpFOGFpQ0RCa3NHaXJ4QmJRSjJQZXRYR1ZTWTBaSnozWW5GWmhiYndDaW01eVMvdXJGcnFEYm51d0pDRWF1Yk13Zk8vWWc1VDNYYythN3d3S2RuZURjTEc3UWFTK0hCWlZ5ZExUN0pVY2JQUnF1ZnBQR2xKTER2czUrY1lzVVBDVDdBWUlaa21NTXNyYVB1aVFoMVBJVHlJd0JDNTVXQU5ZREI3anRxa2huWFVTWDUvc3Q4UU1pK3NJZmxEZkVtYjFpQWhXZ1RlNE8xckFQZ01CNFJtR1VtR3plVWhRVlVxZEl3RWRCdVUvekVSbWEyWk9KVmhQNWFjd3RvMUtwY0VweWdyOTFOeTgrOXhtUytHSElmWHEzWnBFQUwvdWtkUnYrS2YxSWdNcXdETzhpdXRHSnNvRXFNSHFOUXJHNThkeGlyRmRXN0h4dWcrL1BNVkpRb3NVbmh3YWdYVVJKZC84aTRFYk1xcDluWFBoZGJyZ1NOeUdycVErKzlpbXBzMXUvTGdqcDRSUVJlRXZacWFGWnczLzJJVkxuSW11V2x3azhWci9RKzNaaTdrbnJrMnZNaXg2Tk9CNjR1Y215QzJTTU51b0NmZmdUWXpTaGovRWNBVW1BTVRmaGxNS1phOVdMeC90MmNNWGdROTA2dlNKcGFqb2tqSGc0cE4veU8ramhlZHh1WGZ6eS91bHdaMHdOcm1vcGt3SGlHUWFyZTJ5MmhCTkNpQjZVYmR5dlNOaUZLcXkybXZmZk5OSEFLTmcwd3ZaOUhMbGZZd1p3TUJQWlUycHUvM050cE9pbUYvaVg5cEQ3MUxSTlV1ZFVCY2c1ZDFTRnpHdUJWMVNsZVozRHc5UE01WngwUUdIak5xd0VTdTVBVm9jTzVYaitsRWxBQUtaajhaSEdGZ3VSSXhMVkhzZXlweVpRMC85NFAvRGtvTHloWGhkb2puOHYrMTBMNkNwQVViRkpvd1N6ZGRCWVRQZ1YvT1VyTWQxT0VHVmxIdlV2d0RGU2M1Uk9iSmlvTU01dkhEYWlhbDdaUlZTT3c2R1cwb2ZiYjJTTUNFZEkyOHRYM0lNUnZveGp4UVhKRndzcGRTL291STdxakdUZjVnVGtaTHVNaTJRSXYzZHdXSXlwQ05LMEFPS0p2WXNZYkVYaDl6Tm04aEhLWTlqTUR5VzNFclRONFhiRGFpKzYxbFZTdmNDM3EwYnM2NXF1NXE3TXJuU0toaEg2VUdOVW1yTitJTWtwYlltZjlGWWpVcytKSjM4Q2t0dnJiT1BPbjRpMUIvU1lvcElsdk8wMjRSU0NkTFdlakpZMm1NZTFBbGlNNFlvcGphY3FyOUZhb3hQL0tzT205N01ScUdaSGJYenlSZEhXS3Y5ZWgwK2ZDcS9UcDAyR3FwS2Y5MklFK25UQjhFYVA4anFRdlVSWjdDcWI4a2Vtd2VIcnI5WEhxWEJ3ODVITXl5K2dxd1VocXUyUzNJOHVMM1l3cVpneXRxc1F1YVlvOURPeXhaK29XLzZXQmlwVHM3eHhpTnExL0NIYzVGOXFBOXp5QWtNSWl0bGdUelg1dVBjZ01PWlpiZ01pa0w0Nm83aEVTWEIvMkdkZmROV3hWUzF2MXQxU2gyWUlVSTJPOHBaakJIVDAxclBrTDdTeE5UYUxBcTVzdXhtV0xlc3JOZXBtb1crcWUvUmJHU1BOQmtobG5CcExpTHN5emJLVER5UkZRUEtLM0xIN0RZVmJhZlJQRXFqL1ExakFYMG1TQk95cEFhUXZ2VXNyYjNoWXNUaFhEQWtKQnJ6dHBmM2tTaVAyeXVFVVB1dDNybkc1M3pUTGR4SW9IeC93ZFZlMlNpOE04VjZUcGl6WG0rNmVRUHdBcjFvbitGZkVuZ0hkVldFMUJybEhqZ0dFeUlsaVFGSlB4YUVSTzkyMzd0eEc3WDZJNWZsVUlubnR6WWRxenJ4bEhrZ0ZMeWQ2QWh3amp0bGd0TEJGKzNlM1V3YlRDNjlvMExvU0RTdWhsK0VWQ213M2ZlZnBqckFrcU1RNTc2bFRvMWZ2WWlnUUdjVDUzd3NueFVNck5VWDA1eGtONG5FSU81TFB2TDdWS0k5NzBiRFlRQVZjMDdNUTdQc0ZqS2VmKzVkR2toUGdsWnd3MGVHalQyYnU5YTluY2x0TDIrZkRlNUhpWTNiTHhuUTNmS1d2UDhFUzdiS2pEOXJuNTZsRUFGbG5VTHNPQndlOEtSZndLb2Q5UFhKYW5FOEtMM2V4RXFYNFU2WlZQVi9URzY5ck9hUEVBV1NxKzlJcnNLdXJEenlqZ01LTmI3L0VGV2o3N3RVK1dkTkFJQnJQSHYxNW9LWHphNTk5M0VBUmtEcnZCcTUzdnV1Rk9HelhjS2lEb0tLK3JRMHVZNFBza0ZkTzJBMUtFZGg1RUFrU0duaUYraDNjMkVTRElDbDZUNGZ4ckROM3JWVnBjUVFsb1NraDBES2t5QjRNODVXWVFPelp1ZzZYOUUwN2ZidkwwZVJBcHNoc1Q3U0FtSm5XU1FtZHZ5a3kreEdzNXU2eFQrQWwza2tSbS94VWtCQVNJZmh2Rkk2VmxwRkw2YzA0ZlByYzdpOG9FS3VxVlF0Y2h3U1B6SmFzRnBWWXY0L2l6Z2JFQjNBV3VmMmlGcGMrQng1Uk9takt2Q3UyblZkdUJPMmR3QmlXWTBVMXd1T05PQVNaaTZ3OW1INGVGL2NRVlBGeDlIM21meUJQdnZhd2xuenorSHpHbXU1eTNwU01MdDU0M1FYbnFhQkFoeHJUUExXcFgwUGwvSEU2czQyTzVNdFluYVlOd1pFTEJCREkzSUZ6cEwzaUNORldlWGcyMlgrSnFnSTdMcWVlQThvSWpBMjJ4cnBJQkhJZnlSMjRLTnNVNjhtU0hYQUFZS0xvb2pQYnFtMHk5VjBsN3l0Z3QvQUVMdDRjYmk0a2Y0d25pY1dscDVVN1NmSkdYdGVXRDJKWVVRNEdzVXdtbFVWTEVhN2tnendrcnJBSjA0M0dJOWQ0RmFwUTdZb1grNDA3RWlYaDh2RUdhWHZjUk9vbjI5ZXZPanZITHNjY1A0bDdvdkppRVRRYnhhNHg4SUZ2YTMxV3FNelZYa3VuVHl6MUpiTHZDcE1Zd3N4VHlXemQ2bnFkbjJ1Y000aitRYzBtQ0FUZTVuL2ZFM3ZNVko4emdvdEUrclZzeW9nQlJWOGRWTisvU2s5ZCswYWcvWGxOcW5Fd3lWa1h0NHRSRExqa0psZmVmajBzWnBpMnVENHFoeVRxOUVXQ1JrTytYeW9lQ1RBZXZ5MkxuR2EzcW9sN1dHZC9yVXVDbDByeFVSK25jeUp5S2VVc3VZY0p1MmJkYzQwV05XNG91M0VwSitBOXg0U3NQMWk2WWpUY2NYRFhQL0I0OTdyaXJaY0pQVzlvV1pLald3aC9QUERTenI1ajNCSGx6TUFnRVhxbTcyTE9sbjR6VStBY3RCTDh6bUhhcnVCbWhiTWFSWHdlSTR6dWFBYXpENmFUclNJeGl4RmdZYUVaU2VZNG9NT3RCejMzRFprZ1pGZnl3OVZFUGFTdzRtNWs0SEw3Tzg4RXNtSWRGdW1ZMVJCWUNsZk9jOTRwTHY0VjFSSjVZTTNaVmZXUE5qYUVFL2x4ODZQSlBCU0JCQytKMGdZNmFseFZYOXpRWkRnZWd0TG13T0IwcUJhNkl1L3V4TisvRW9FTFFTL1Z6OVBqU1dDbTJ1WENqYzg5SWI0eHRDcjlBcG5wZ2lzVlZCRS96K0Z0N2JuZjRFNno3b0xuRXRWWW9Qa25YclUvb1FBM21HOTFwZW5ranA0clZmMlpGRWp1WDIyN2U3VEh3TzFNL1Rhc2pvQml5YkdZUkJ4Ym5IdXZxZ3NoVTJwTDA2b3ZZYVlicVc2OWYxMUU3Vi9kcVQ4QmQrcExpaytId3VNK3NmYldvSGxMUTlCMlNMR0pNUUNLSjJPYjVTcENEN3RWMjRNUTFBc0tlQ29DZGQ3c2xCRENTajF0bGp2Sk92eXAxUGV2bk5DcFpoUWxtQWVXT3B1a1l6bnVQbVpPOWgwS3dMd3p6QVJSL0FWRzJNaXRRQlFIR1N4bFFCVGlKdHkrSTZXL2pYY25jNHZaeVJ0SElpWTJmTElseXJDRldCOFlha2xjNm8vNDFYZkdQb0tJRDJIOEdSaXdVMEpxY0JXYUthanE3bGNwUFl6c2pqVUhLZnVDbkI0NlZURnZLdUd6OXRNTmxOekFJckdTNnFDNGJLUkF4LzZPMHNDYkJsS1BtbDZiZnhVZHZ3TEVsRlV4c0hYV1ppQ1pEKzgxOGtPb04wbDZkSjB1ZTJTQzNPRyt4K3ZuVXJ5RzZVMTRlWmdlaE84Y1dadk1FMThXREs2YjdDVSt0QnBzYUZ6VGcrSUpFWFYxVVZHMmhMUjVYWFFzMXlZVmZDdUpPVmpZYUsxb1dNcWlJNmhDZTkxVFNaaE9Od1ZSbVR1WmpLZ1RpUWVZSEYwRkNLcnQrUmMxM09BVU5DelhvSlpkOGVWaG1FdVA1TWYyUm9oVUIreXlaaCttWXRrSkh3MTBoR3gvNi9Dc3dTTEk1MUNtSE14bnhicU5XdjhGdzVadUNOc2MwY1ZmTUxMYmR3Y09VSE1kR1cxZGk0YTk5b3M4ZmZsV1cwcUYvVWhtcElob0NBNDU4VGxVWnBWWU1Mb1VPcmNqWmhYOVIwMFlUWk11eEFFbThReEJPVk9iZkNaVVNtN3RnQ1pYbVhkb2ROWXB3TnFVZHd1Lys1T3dETmZqNzN0bXJXcnVQZHBvVjVkN21Od2s0RkRzM3RidHZpOTYrSnhSTW1xTXFJQ0kveUczR0pnMEd0KzMwM1NadndManpXa0JpcVFrSVdTYmhQYmhhcUVSOHd1V3FyWGI3Umo4RWliVTVkbjArZFpHSDBhak55bkltU0FhTnlReDF2a0JZMW9Id3k3WkY5RGd2clphdFJtOXRBSXNrSG9EMkN1em1odllpVEpyQlczL0RPUkJYeWpkaXQ1THZObWxuU2VZRTU2VjIwQ3VkVXhRaDFpbkg2TWZsbGdwbHlKZDJYb0dFakp3cy8waHpnWERmZ21YQ3AyUU5MdlhNdDEzM1lOL0JVTlovY0pYNUZUdjNRRytld2Q4cmVhQjZOc3puZDNzVEhlL0d0d1YzaVRFcjZRc3o2N3FPMnl3V3ZrOHNDL3Baa0FyZkZBZGRDaUFaay9mTTlEYkYzV2hRd0NQQVV5R1NuMVhxWHZ4Q1lndEp1VlNFOG9kSlJjZE92UXlXTkFtWGE3NXpkVHJFcXp6dUZpVXpQdGZXRTlZMGtmMUdGcXlydXFpYm9OTHl0TjJ0Uld4QXV4clU4aURuQThNMmNJYVRsekdvWUlBalpZN1lVcHlSZHk5Y3pZM1BPaWVmbm9OdDlXMkg1L3BTMUs2K3RVQzZyUmYyby9vNjZmdmRZbHp0a2JsbEFyVUtxRmNNOUpEQjQza1ErL2xvS3pINDVTU3g3aHptcDZ6NjAyUjF0d0YvMWN4Z04vNDFXeXp3aDVYenVFWlJ4UEtlaHN6L2NuZW85Ym52RU5UcXRXUnlRbWlKa2RaVGgxTHJ3OEZkSnpKZHB5R1NleEpLa0EwSVJJL3lQOFFVWndqQXp2ODRGNnUyaGtrS251NGcxbktmam5vUkVsR3VRR2pDU05DdXVENVQvSTNtWC9SNXF1T3M2RHJUam9PUnBFWkN3NzRIK0JnclQ1Mlp2aWNaeXRreldsdVFGQ2c1aGdBcEVzRFJLeitna3F5TTR3ZXlVamJrSkdoTnNLb2ZBcmhoaWIxb0lTUklBU0N1QmFTRDFPN0VEWFZrTFNxc2VjdzRuYkVzRG5ZdGZEYTZDbzBOTlJxNk9xQktMVEU5S2RFdWhUbU5tMWp3WDFLVU5sanRVMW5vM09vd3dMMXRpNGkvR2pHK0xQUjc4b0g3VjRqeFpJK3cyd1oxelVQNjFER2g2QkJKMS9FT21QcXVoaFNDY1lXY0dBTjZSWHZGVzg0UzNqS0pjVHFoT3lwV0Q5c0dBZjhNK0NZVUllVkxBQnpwblczeXhPNXpQOWxsSk1DanBlTS9SK1RRei93MmNJY0R1bHIveG4rMHNKQnJraG8wZm9Xam9CdVhwYll3NFVNT2l3dTlZRkYyd0lPVlVGdHY5ZlE4M1pYV0gyNmVsNnBaaElsNDc3T2VFbWsza1U1NGpMQ0QxZG81dDduYjZEOFVFc21Sd3pNc3NicHIzcjE2TFNjY0RNTzJ4TFB3THlWaXg1bHNpclBobnBvSldFeUpkUEJNTzdpSU1wRjJFa3A1QXNGVjJwMjJ6TGk5bU9jeVdMSG90YzAvdHEwdFlRS3dKVHQzUy9qblkwd3F4c1hab1NFT1R0Qnd2ODQvM1RDMXdIaElKSmlnV0RrRUNQOHdzOXlqcXp2eVlRSU82R2o0QXZDdmU4VjdSbDBVOG5FZm1uRUNRc3VjSmpyQzNURDhpektJUGdPZkZ5bHdWdllWWU8wcTBoeGJ2eEl2OWx1YnVraWo1Y294RitsOXFjNlkxbk5WcUpQL0NQblpmeEtaZEc0MURUT2s1d2hOVHl3KzdmZzhZV0VXUFcvUlBWdXRZdUNDNGVoYzJlNmVwM3VVbnU3Yi9tY1VuMk1uK2JmZ0lVTmVIdEJ2ZDZNQXBPT00xak1tUWs5U2N1eDh5d2sycldPR1NtazBNZ0creDBvUjRPTEwvNzc2SjAxRWxGeU5WZWQvdkZqazVvM3REbUU2cS9zWFZGVDJmaWNXUUZxWjAyQjBpenlzZHgySVBRRFBtUjMyb2JOeUdxRWFhQzJjd3BwSm90QmRoLzE2VTBVd1pzWlpLWnJjSzhmTTJZN3lFbDM3TzEzcUsyc0lzak1WdFpiOW5lZE1leW9wSlBHVlB1QkFwSWN0MDZpYnhDeml5MFA2QURwYVdPVFVhaE53QU1KWGhPRUkxNkowQ2xYc1N1aTV0dnV3UlJKVmFHQytmZlZTeEZHUDN1WVYyZG12eG8yWXZnTEc3TWJsU1NNNC9telUrUWRjcEU3a3U0V0JoUlRpczZhYjdtYUg3dFVIS3hCak5YYitIOEgvMk01VUtGSnJHeU54ZDhUaUtRT3VMakxNTk5kU0hEYnYxdGRHWmVwTTA0UVExb2V5TjBaU0ZzWnZxTFRiNTBxR1ZLQ1J4OTk4cEFFb1M4akxRMkV2aFhKVDN2RmFwVnNjSW84cFR6bGsrQVRUOXAxVnBBZzFpUk4zVkdkQlB2TWcvVlBxRlFHcWpkNjNvZnVmY1VsbEd2Qk11QzRKMjZUd0lKUmdSY2xCU2FwZFdGSThSbzVVYjVPT2tIRmtHZ1FPYTBZdWVKZ2J6QXd5M2Z0U3Vlc3FHSG4zQURtQkEzOHVHY2tCYkNQK3hjbnMyRW5sUU5zdWkrVkhJNHpPU3R4UkRINnNjc3pzeVpha2M0aUp3aGJOYWQ5dndSNi8zQ0p0dDZPRmpDMEVSQlFZMGVjTy9MR0tYR1dJYzFHRVBNM2xCVlhoNXlyVzRpSTBTMitwWWQ3bDBLaUErVEZENTl3M1psVnNnell2UEs1Rm5vdmw3M1hkaWxRbE9KQUQ4VWpUTTdsV3UxOEd6a0xMeTZMUG4zYjZZdEs3b2dnV0RhSkVOOVBPS1lkK2tZSU1DRSszVnhEbnB5RndMQ3pHRjRPRWJVRVFSSUg1dTRqNDI2alV4WFJSaUNjOHVwWkdRNi96bFdsd1IwaEVEdUFDWm8xMW1WanMyaGt6b1gvVjRsZWlYcU1Jczd4OW1jd2dpcjJwdVY2UzByc0NuYTk2MTltcnpBN2JtMXU3azdzTXg3Z0ZuTEppV0RoZTBtTGx3c2N0YWFYcWxsdFg3SVM4S2J6N1JTenpzdGx4SExrMWEwN25kaHlFMk55SlJqSVRWdDE1dUJ4U0dSNjNqdFppQnFrTUFnUm0wbzhTclhaNTRDeDJTNHd0eGVQS3RCTUVPT2dXUXdjL2pjNkNXZFRKbHkranorNXRRUlZTVDJJSXBTenVDcFd0aXZJTVlwc1lxUDZEVW5QdHd4VHczdXhCTW9CTUE3ODZRbUJrSFdNQzlBMVFreTBuM1I3RlhOUmxlVkNCRjdtUlBtbS91bzZqYlU3Sk5XZVNpMWdYa050dHBqVkd1cW05T3lRY1ErZS9PaGJZcjZNQzRyYjdyVnczK1EzQUNnSW5PaEtub05FblJvaVV5cCsvMGU5YmNIVHgwdVVEZTAyZENBdTlCSUYya3NqVXRzR1AvZXYxZE1BblNPcXAwa2x2NWJOalE0WjE1VGhTNy9yMkozQkluNVEzOEs5bTBPNjV6SG1FZG5YeHpOTGtoQXVTWDU1dVB1RzFZczRiQ2ZEa3FhQUs3QUtEbm9qTHVsYTE5OFRzYjhCSE9UK0lEaFJoaDdtTm1lcWtMTlcweldjR3BVeldZeUNiSmF3ZmhSUXV2Q29qOXpFelhSd1NMUGNXSG5KQzYyUjJTQXhzd3VEdjlPLzZKOVhQYVREU0hiUkRlZUpJSVg0ejczY0R3NUQ3UnJ4K0diMEpjTmVQVjRaZFZZM2dSd0tzM3JUbjdMczJkdEVJWkw2UXNsZUs5WEM1TkRrbGpIQjNLRzJGOW12MFNGMllVUEdSeHY4eWovRi9kM00rRHVrL3VWaHJQRDF0dWNnVGFobFRXWlNYSmlST0V2WTVyaXY4c1BsWHdaQ29tMERZNGhwNDNSeTczcCtIMFhBdnRRYjdTVG8yRVhQWjJicERjb25OTWdxR21DN2JRYlY1dysrZUhleUZXd0NjWU5Ga1BVWGFUWTFxYlBJc1MxQzJML1ZjOENrUkJYb3VYNGVZbDVwWFNOengvMVkzZG9JWlUrbUd6SGhmR3NlNVd0a3E4K3BMM2F2bHJoMXBVTEpWendrVVlvZitOSlBDbXFNMnllREgvR2cvWXdGaWFTWjBQeUpMYm0vOFB0dXJ6ZGZVV2h6Tkk3VExCL1FFTUUyM1AzcENMMTJkSUd0SW5iUERmalkxbUZzMTk3ODVLMFdxdkZER0NJOTF6YXl3YllEVDRaWmNRYzJ3dGloYUdRTThIRnpOMGZiaGRtNXlNZit3TStNbnhhbUxPQ2tlTkJXbEZvUmw0cXY2T1NPUEp1cXlBQ01TQXprSi9BZllGK3hYZjV6RFpid3l1K0EzSXN2S2JPZlJldnViZGN1UWRNRTBpTVAxUVhaUFJrRnRzZEJvcXRrUHNYajR1dUZzamZJbVlCbDhTUFVzTlFyZVBFOThKTS8vR0F6WDJyNnYxS0JhNFVQTy93UGhUQlFPSXNZdnpzRWxkV0I1STVFdWs4R21EempHSm9iN2hOVnd6N1FMZnBiSUtKTStzTUpJMWh3bzljODVDTnVpeGFVRlZzRWVHNDBVVUhJQXFuZ29qamxocXlhKzdvMmd0dHVVaGhYOU5oRkFSLzJnakRhNkd2WkhMYURxbnJDWkx1bldOL25mQW9vazlUSkZ2N3JHMjZRc1h3bndJejJ3cTV2dFcyT0MwTDU4NUcwd2Q0VVo5bEliSlRya0VFVi90d2dpd2tpOCtlY1VNK0x0VHlZQndiWlM0ZDlLUFdZRnY4ZTA5WUZkV2VYTXh3TEVZaGdnTXRwcG9RbEtzVWR3YWE5V3VZcmgyS2dLUUtIK2VPSWE5UzJPVmtCcC94SDRKeURLZkVLRW9TUmZOZDZwa1Bvd0hsTGx2ZDRoRjhFbzZNTGhrVnZ4cFlvSVNwUWkzN3Flc3d3QlhjNEFMd0NUMVp5QjQ0b1dZeTNxREYyRFhWdzhKY2RYdXNqd0FnZHRyZ3ljU2YxYktIU1htdm1JVzc2TVp6RXg3azBFTGVPRHBML01tVnRZMFRTMG1pczREcTNyOFllZ0x2TE9JS2oxMU16SDMwTkE3djB1eUQrMGJ4WXFOcW9SQmtwQTdIbWx1bnNtSE1NN1ZwU2JmWXN5eEV0MGsraytOMDlSck1IRWJoVFU1cjlqaHhiYVNNMFltZVJhK2pmQTRSQkY4RWVLS3BtTUllUUQrT2JHZHAxNlFtTDNFZmxHWnlsbnVZd3BqVjc4YTM1SlJVK1RkUyt3K09lOTQvMCtJQ0IvaThQdml2bW80TklFODhtNHFQWE1MR3FaQnhTVFBvbjVMTk91M3Npbkwvdk5JL3FMVndUTWFaUm5EbmZYQmViVDB4UXlxQ040NE4vTkZWbHRVL3d5UUwremtocGlZRWZMMk8rUWZ3N01vSWpGbjlyMWFUaTdWZ0ZBd3lKSXdHUFVybUNOL0tQZVFxQXRpQ3cxSllSdVRLcVk2M0dGbEk4SU5wWlVKM2toSmZLeE5yTFcwajB1bjV4VUVmOUdLcXE1NzhoTURjcExMSStKL3Jzck0xSFJJdHdIVjFwM2gySDkwaUFhb3FNMHhHWjd0NW1QaUpCV1VUeVA1UzdYYlhqL1dHNHlIT24za2tHZkorYkRhTW1jYVE3QWRmaUoxN2dXTUYxRHFaUVA3RE1TN3NjYVdFWnhSZC9CTm9Ua085SUhDcC9ZZWFsSUFlWFV1bUpMWjZ0OXNrQjVRR2FUWXJXV0NzazRvdnB0VHZXSUhacWY5dUM5NWFPaXdiN0NJcmgyVUVUcXRnUlk3VkN4UGFURUN3U3JuVWN0ZXpwY2IvbGg5NWMzNnhCNW9IS0V5TmNxSEU2N0Q0cU9EVkpiZ2d0ZHhtUi9Wd3FoV3JTZ00rNWFFbjFuaXVicjRldXdqMXFTWEtHVWhWVjdtQ0pGUkxaY0UvTjhXOXI4ZkcvNjNxRUZTa3IrZ2pQdzJUWkxGNVM1N1RYZ3RyQWwvdDZncXdVR3lKTmc1SVZNa3c1UDlBQUxrWDBLaXFFdk4vTDJRcWFMSUJCeXlUd0NMYXRQV24wOUMrZTdFL0JIMTJacUJHZ3hKc3g2SE50WFVoSUxWUzNqaVBkQjlSZm1GQ0IrWEZ2bTAxMDhua1YycTAyUUFZaW01R0YxOEVhK1FpVEpqQXhPb0VFRVdLb1VIYTRKdk4zMlNlTWJGemhjdVFwQ0tpUXl3MlIybnRTbld2SFhqd2hPa0t0SWtuTENPTG9pT0tabHlRb1RJRWZVMDRzMnRjTEhLTTJoQnJacTJpSG55cXNnL0RCV2UyT2Q3Mldia2JVd0p1TGwvV2N1ZzZyTDlzVFlzV1Z6em9zR0tkakhVaWFpaEpTcVNGTjV0aHJNWkNNMW1LbU9qMG80Q09MbkRSekpQa20xdFlmajh0LyszbUZOcmxRQkNBZnozTTJONWJKSU9IR3QwaUhTbCt6bVFwNS9KdUdPRFJCSUZuSU9VVVRyVytURmVlcko4S3REUTdYQjBxYmlMNllOWmJ0MFRxbW83TnZ0VFVDMGMvT1FsbGZEK2F4am05TEVkUzA4ZWxDankvUmtWYVRLRFpWZDVNaXBwd09YOVc4OWNubHBCUnpFTm9rcjA1NGRsSTNDTmtOWkFwdURtZDJVMkUyajBncFZqbDlWdmRnbytpK3lDSkJham5CU2VLUHhudUFaTUdkUkh6aTBHYWUvdzN1YzdEcWtXTDFhVng4dUFWZWhTbEF5MWxSQnZZR0orUDhQbndXUUZUSWVoazErT01KaWRabjZkYVg0K3I5Q2RjMi94QUdJSDh2cFV1d082blZZU3pBWVFyWWhwQUEydjhjVG45Qi9ha1lhTDhrcjhTZTVySmZsRy9SVjk3MXVibklnTmp3NWZ4aUYwR1NrU2VwVHpNQnlWZ00vc29jVmZ0RmU5SmNvaG1KV0ttNkQrS2dvQVQ3TG1lRnBhYnNQbTVtYytWRjN5dk4ydUdIc3VjTW8zNFFTRHpNb2F4U0IyUGJCUk9tREE5UVE1a3B2QUZCMTJxOUYydG5VMzMrRFFBcVBjOXIrdHVTM1NhOTBVTjUzUFhTbndTbnNScFdOMG9kS3k2ZFFOSnNRYXRkVXFiUmlsbnllS0dWN1RDNC95NXlORDZiNnp5d2xicTcybEhZTFc0V1BYUEtzWFU1eFZDU2JtV0E1NmtJaVhIYlUrMmVQVG5CZVBrSXF2amF4QXpnTHlnN0JwQVUrUnNzcGxCK3lEdFVNM3d3cnU5UjZQbDI5U29aWnZrZFlXNUtQdzIzR2FHM2ppZkJaenNTOE56dTZqRUZLeitzK0xkN3lmQzRsL2RtNDZsTkVmYTVDdklxMWVtOVJRR0VYQlA3Uk1McXV1UVlNZDJJeC9kVjVRMEp6T2VRc2toVXFqQjBNNXc1dTZzK2RQWG9lSTNOaE1qOVYxQ2tHZ2E5Y0diOEVMZWRSQTlhMmpWKzY0QWl6Ni96M3REV1NRSXRiVHVMcnFXNjdUVzhscWpBaE1od0g3dFVaeGRPZmtNb2JabzFyL0NuMXdQOE5ISFhQSFRPendPY0g1Y3lYYmNnVnplcmtkRzFkZmZ3QUxrWWxpNW0yOHpSRzAvd3ZJOVpWU3ZZTFkyajFDYUxtM05BQTU2L0MvcDZsQlk1UGM5Ni9Ld1pqS0VOVkRFUDV0Y1lUYWJsZDQwWjlZbFhCamNaTFQ0UU5tdE5rZ1ZGMkNZTEc3WlBQMzMzRk9FZHlMc1NyVzhES25JK3Q1WFZoSUliOVBRbk9wT2lncVNNaU93eE5vZUZiNEFLRWIrRkZYK0NaTGpkTHQxTitkUHVrcGkvQUxVWWFnbEZFTXR3blV3TXIzLzdJaXNqOHpGSG9nendlY2N3TDNOYVVCMUtrOUM0TklnY3Z5dGdaK2duekJLdHNrSVBHdFNGTmR1VDRrUFZTaFZSYjViNUo3alRvUHRuMk5FUlhOUW5VM0ttQ3hvUzA3WDhMdk5SM0d1cUJpelEwdUZxVGNZUTVsV1Q3VmZYd3NNaWRJcEJWV3FoaDBmeUZvVVlkOFhLRlJNcE54YnEvUFVOT3NuaHU0dTRBdTFLVi9PaGxqSkViSDhzVHg4ZXRMdEVGMnhKNXlkZE9qN3ZKSWh0T3I1Z0tYdWs4RTBzTFdNcmtWa2gzM0VGSURnWVM0SlZ0aW9FYUEvNWJZM2VxMy9rbC9TRkh5Sm1Ic0lqNGxLbWhORjk0ZWp1MVBSZXQ1YWI5ZENROUFUeCtXWWVBRVUzR1pKemQwMmlMUFZ0bW5mMGJhVnU3ZjVEaUp2bUc2aDlEN05ScFBKQnRQaWtPRkdFdktSUTZpRkk2QkhIdHZzcjBpZ3c3MzJOV0J4TEpmOXFKVmVmWXk2bUZmdEhKejZMREY4NVJIdXZlQVJhL1paMENaWFdjMlcycEd0TFRXMWV3STVzN1puMTFPWjdNR3kzUGk4Q0hzUldtZTcwWVBlUnlpbFFnSnhkbjNudk0reFJBbWc0aTNIQzVoYjkrRitCR1NYUFplSXpzZEJtN0xTc3QzUWxiVWVRdTUrY3R5ZUtSVEJ0U1B4eUtud1F1Q0VwQmlwcE5rcTlUWmwzOCtZdWk5amVoZTgwVGVSYmZKaUFsemZubEk5cWxYTjlxOSs0WUlUbzg2aExUeHBLRkdZM0RqVm5YcDVoTTZYaDlpaUdGU09IOEhPZ1R6VjRpTEljd2VBelMxZEY4ZUFYWXR5Z3pHWC9DN3dmbjlUYThGQ1FHWWFVcXFoSEp1cmlCRWt6K3piVFo2Y3BJSGE4NlZHN2V5L3pHSGYvRTRBSkhmcVBXaEpydklKV0swbmNaWnY5NmJNbDVJWVpFSi9XN3BMT2tkT2dvbnpLMVFsWk1qQ0dzWnZRWGZZTmt5VFQ0NzBHWEQxdTFaeDVxRkQ2NG1RR1pCLzM0UGl3TkZybVVIZGNxUklGcHdsaml1c01VaFFtWklnTTZ5Q01lZlM0ZGNjbVBEUFhYS0cyUzZmSVAvdC9aRnI5MmRuc1cxUGtNTUpjc3cwS1BlSGwvelZlV1RDeHc2WFZHc3IwNUdKNk5BOFpVL0RLdUZKcEdNay82bmNGSWFneDh5bE8xRGtUNkcrUmFsZXovMVZET1A4Q0tIZlkzOWNJWmowVWZpTEMwOHBUK01NbG5WTHVCMEF4b0JYTURPMnVPMzAwZDd2QytwaHNjMnBNNlRaaXpwOTMzeUlrN2FrbmQ5cmNVU1poMVJ4cTRIRWFzNlBDU2FMakdLWG1TQmRvVmttWVVEenllUFVjaGFyaDltRXBkT3dNd1lVMHZiS1JFMHdJb1dNS2hnczI0QkVKTStvU0luWktSdVhUR2paeElSQU9SSVNYYjl1WGJ1WWp6MytVdTJGRWhRbVhhTThrVk5XVTd5NmxKRGxDLzFKUUFhSHFMRUlGdE9hRk4yNFh3a2lycFN4ZlcvTDdMZWFYNldjSk5pOTZqUVVHWVcyS0M1QXBsMm8vV25CUkx1YzFPeXp5YUg3eW5ZUnJ6UEsyUE5QOVRuOGlHU0dKeGJXeEJlYWZVdjQveXhuMy80RmNpRHhpemlxbzJvZDR1Y1c4Nml5NlhIb0UwRGdOdkNLYXVBdHR2N1lVRml1bGRDcnhIZTNtUkgzL0phZURBdWtDUFRPQlE5VXBlV3loWnpUN2E1SXRCajFxR0FMUngxckRxL3g2MHdNd1NyQUYzd1NSS2FlRlJPTDZCcU05N3RoNnpKYytpRVZwRDZIM2gvRGk2aUN5bnFmZ3Q3dy9ZWnNiWSsxb002QWpwNEMyWTl0TjBkRENjNUFHUlgwdDFZVWRRQ1hqWHA0MlZwM1pneHBRR2tBUXhrUU51MjU2QnZQRDU3ZzhVSzhXQWxxMFZHZ3c5OGlvbGdXRDIvNG5SSUJFVzU5Y3NhNHRxWmRpV0dKMC9yb2lzbGhwRlRuNVZTekFZYTVwU3lTWU9kZnV5TmQ3WjhSUXRSNkxtcDkxQW9QdlQzeUFCQ3Q4UzVHQm5SSGcvcFIwd3NRTW5XV3NBS1B1RCtVWC9IcUx2d0xQRFI5bkRMTzYyUDVKMjU2VmQxYlZCakdtaWVhcmsya2RtVmZtUDVjNXIrblBSeWltd0tRVllhWURNMGZUS2N5c1NwdHlyUkJqN2NibnhLNDBlby9FMW8vZzVWbkNTL2YxbkN0ZEh0UllTT1AxYU94aVZvaXNJNlhFc1gySjhvWHFEQUorNGh5czRxRzVMZ01QM0cydUY2Uk5SbEZXYjIvOXo2UWxzdG1YTUhwekdlQkVjMmxTT3B1N0M1L2tPWmxuK1J2OXQrVmdqTkFtaXhxTytjRllhSWw1TXBxcC93cHhaTW8xbndNTVdTWW80a09FRldaaFBWL0tMVDVRU2svU09qQ3dIei9jTm9nekd2d3VPK0JjY25QVzcycUF4azE1UUVqbStpNlh6QkxKZlpUcmFmdW1mYXowVnk3RzJocjJpeVdCdnh2SktxZE5nRC83M2xlbUJoNDBXd0NJellESFh6M0ptZHlTRnpBUnFOZmd4MzB6Vk9sVlpOaUJLTkVkTE5hVmZYYTZzaGxiUDVyNFZ6aDBuT1c4SmJsbVpXV0JOQVJsRVE2YzlvOW12TFhYcHJQUDlYbklDT3NOREhFVGZVMzhxSGxvRlVDc1pCWnVLTWJkaXQ4Zk91KzVSTkN1bEZjRkQvOHUva3IrQ3IzQmNROGY2M2tHVmQ1eVdyaTBFV1Bjam8vN012ejFnL3g0bCswNGJzMGVMZVp0QnkyUFhBYTNYY1ordXQwS3hybkFhbEVtQVFsRmlYKzNneld0UGVjY0xreUsyM0YzMG9xYlJLOTkwSWlsVlN6RW9CNmFPMmVEOW5Ha3A0MXdqTytPSEU5Q2hxT3dtZWlSVUZFNnBBQk1hcDJmbjFuTmdnQ21PazRLd2tldW9nTU54SUJwdUQ1T21reVJTYUI2Mk1oSk84ZTU2ejJUWWo1TC92V2hhS3g0Y1VVbDVQQ1k2dXQ2SVR5Qytkek9oQk5PNWlGdlVlWCthTURQZi9LT204bWZyTTRROGF6THJvTnQ4NFV6ZHlDdG9PYlVGNXhZbStGOUxBTXFzeXEzcE9wb3ljMTl4UUxROGE3bTBTb3RxWDE3SGdsOEk0byt0UmJINE82R2JrQlV3ZGtkQytPQm5sR21GMWphMlFOUThRRUt0OG1tZkt2Z05HQTBiek5MRE5GV3orRjBnZmVQbUM0Q05sdzlXalhVVTh5SERXakVjbjdxeXlUSm0xSzh1TUttbWVPeHZPdTR2MkR0YkcrWkcrYWY0WDk5Ull2TWh0THMyb2QyaHVLSzc1czVRbk4xMzMzR3RibktmR0FmUnNQL0REUHJtMWw4M0tTdHJ4RDZrNWZOQWxicXB2WnA4U0pZNFg5MmpWMU9FSWRON2pGL01lQTNrRWdHNXJ4SjE1d0g5OWtBMUFRY1RCVDNmOEU1TTRZNjNJMSs1TktGK1hhUGp5dWVzYTlFU0xSY2RnNytWT1pYK01FMnlDdFVaQ1lsdkpmWjlHRjlwV2Y2SXVlT0JtTFVJdEFwSXhYbHJTM00zd0ZzTitpWE1NV3dycUpyWVVzN1B4NEFOWVlSNmZJVmRZVDlBNlYzZjFrYjFaREpyV2FxRWZFaEpQT2o4c0ZwWEUyT1gyR2ZlQVJ4dG9uZU1MNzhtQVk4ZVBYc0lzMTR4aFdzMGNuK2JlWGpCdVV1SWkzVDRnelpZMWVDamZkZXBFZFp4YmFUdFNrRzJBQlh6WDEzaTJBNnZMZ3BCU3dLNU5kSkZIVlgzcnJUcWVCQlB1dWx2WjU5VEtMSDRmbG4zK0lNZW1pY0tZUmJwKzVyOFMxKzliK3ZTK1piNHM0dkFSUTJWVGdHWWNYSDQ3Z3lWT0FMZ2JIK3BwUWhPYnJzTVNTb3A3dnVBVnljYVZwbHN1c0N0YWthQ283Z1VVYzJGK0gvRUsxTmRZVlUvZTIyUE9xNmhGZXlvaFZETUJyZFJvaXdiUm9RWDV1WEMvRkRodXp6ZjhhNnBJWXpHMklTWFhiNE81Qkc1Q2ZEYjZmV2xzSkRaa1g0NDJzc2xNd2F6WVo3MzYwaVpqajZlMFNrOGFuRGhUYlo4dzJoN1dFSjVTWWR2UEVmdi9MeEFvR2pMa2NCcjdwaVpTNTRRRnl2d1l6N0tJQWkvZXljbEplWDRsRGVZZ3FLR2YwVGVDVHRaM291cG5HSVkzRWdRRDRYMWNES0g1dDVwZVhYZFZ1d3FDekIvemMzejVIYWQvc0I4NnVQRm8xZlpsWmNpeXlCTWdzaDRGUkNBekdYNjhmbXlueVVka2xSdjUvZWlHbGZNN2dLcFlBSy9VYjdHUnRsdmRESlJ3blVwc2w3bmRjNHlOQ2ZYUHpuYnlaRjZWYTFuTkJmY2lrYzlrZEVESENYckppaEVnYmdwOTZtY2FOS1loVVozanp1N05hQWpjMytUdVQxRWk3cEhJNDRqY1dGdUg2alJobmppZFRXeEMxcG16N3RKMEhtSWhiWThXcUhROWxZays2d2pVamZEZEt3c1E3VzUvOGd3cVRZR2FJVXRQaXVCQ1NjSEs3MTNpazRFRFBSa2w2YThYMHFPYzZ4YnFybjV3OTdzOS9ma0xpSUpGdXo3QWliYnNUMTFjVllnTXVaZnpyMmhKVG5LUy9QWElzSWJEYlhVcCtlNzgzWk1mYVMzV0NJdzZDVXlNUTdWOUdzYlZQK2EyR3RlWmJUWmw0cDdoZ0NCTFEvSTh0cjFybmJYWjRibkxTcDFVUHVBUlVwb242dXduM3plRmtFN21mNHRTdDhrSTRscVl6VVBveXpPZWNpYmIzTFB5KzViSUEzdHppd3NwelJqSG9DaXBUaGx5RXcwelArWkl6bERtK0ZBWTVpVmJReTY0NUhxYkFXajJYZTlGUlZDQkUxZmd1TDBYbDY3NzRPQ09sVDJDdHZwL2pqZE8yRVhXRml1dkhKRHhhai91djcvQkpFdUtBbGNhNC9OamhBdEtvNlFjbG4vYUh4dEswLy9QVTg5dk12OVlUdFNZVnBDS0pteXRYSjJYOXZGODBMV2NCMUMzM3I4UFpxeDhxRXV4WXQyTXJOc3VPcHE3a2FIdTVTQnBRdldoZHBkTDhOS0M0NlIybzA5aEJqRWNab2N6Z3paY1l5RHZtT2hPeVdrZVQwM2VrZWlBdjdtenZDMkVCbFYxMW8wQVhoMXpVNTJGcWFQaVIxWTU1M25VenhEUURNMmhxZFNnVTk3NkVuUmxCbUUrbmVpNmcwT3NjMjlGYmphQjVGRkc2QlVpbEQ1RGhyK2JnU3lJNzZsNE9rN0x2cjk5SytnbzJIQkFZVTBtMHE0ekY5c1hBaExjR1VDUlFRZEJqNEt1MXN6Z2p0azE0VUFPdDdGaFlYY01PZ1BKVWl2K2Q0VERJZm1GOXVBWHpYUmNabklLYm81ejkyRlY3V2d3OXB2OVE5TDZrY0R4NkZsZXh5N0drWm1CM2RXbkJrS0pEbXFEZGZZdVE4MkhiUTNzdnJJbmlETjFqSkNsSEFKa0R6ZUQxcmFOWTVkQXhFcTBSeWRiY3kwMFA3NlZmZUpkOHJtSjhqUkhKWjhFenNLdTBqdDFESTVmMWJYWkVtSUlRaWVkbi9TdXNaaHBBRHMxd2NCaHdUYTc5M1FYMEJ1UFd0R29hcmx0Q05KU1NnOVhMV3VEZ1pHVGp3UnM1cDVPemN1WEU2bUxPSlA5ZzJFWmc4RXE2ekt6U0JXU3pENEhONnZwMFR2b0E1TlBETWp0b1Vlb3k5eGdFV2owYUtzL0NCaEFrc3YxV0ZsU0hGUERINVNrWW5GdExoY3BXTnFpSzByVE5QU2dhRnZPUEgyK28rbEIraHRJd2lVd000NFpYblo5djNWbXBJYjVVT0Rjak01Y0dNR2hrNThNWDdDeHZiNHRHaHByQVZBS0l2OGlvUUlTQlI1enFZOW9rSnlxSWZPZGNya0NPbTRXUytWeStPMWFlQnEzZ3hsMFNFWlp6MEtIczBwMktJQUlTbkNiSUNWeUo3QnBCWEo2Z21RM3UxQ29odTdQdWRhRXFGc09icUhLaG1KaHVTaGxZbTRwM3NEYXNpZmJ0ZTBJQTUyK3ltNVRSbElCTEx1OTBDaEswbStGYUgzcEg0NWVKZVJmTHIzTzcvVmpFeDJRQjNIVFBuQjRXdEVEeHlEL242ak4xMUhqcURNTUlkR2NKemVJcEwxcDB1Z3grbDB6ZG9HRVNmZmZNbzUwZkZHQjFxb3grdTdQbUVzR3pGTHJKbGdLMXJySE5PdEp1ckt0K01ZNEt5a3l6NlhkY09SQWpxYXZ5ZEV1T3RZWEwvRG5vbXU0WXgwMkMyd2NXRHByeVFrUG9hellVZk9rby9GeFZEeWlpK1VnTFpYOVF2bENDaXpEU24veXprUkcxUDE1R3RZOUZJRjhqaVd0Vk1jeTRhYlozZVRGaTB4S3BpSzB5TkJZRy90cVJWMVl4ODU2bFp2NnFGam1TdWRBMmMwUThJb1FxT1RSM3lQUThJL2Raa2Uzbzk2Yjl5VEhHc2RLTFc5OW5sNDRRNFM1UU0rV0dwdmRsOTFMQXROWm9DWWVtbG9mZEwvVWlmVW1WSENwb3ZmQlhRa1BIZWNRUVBrcnFTV0VjMHlKbDVuMk1HSDJybkdqZG9GREVRb3RWL05nc3BXaSs3bkw1MEtKMkNaSmY0TWZWeXMxdFZZRkEwbms5aDZNSHB2L0M0Y2VNL1lsTzM4bFp3T2RhbUJDalZDMlFzUExtb1I4Qnl5YzN6amNKbGpXMkdzc1lRQ1UvclNrMzNnN0pCSzluczNZdERJMkJHMzZ5bFVxa1I5S1hqbGFKaHA1aUxqVHJMeGpCMTNBYThSemRUVWVGMmVWcXlON1ZyZWc4MzBpdU5UMS9hMUo1ZDVZL0VNa3lselJCSy9ac1B3MzVTZ2hFNkpTZ3I1bnFaODVVeUdPdzVvNlZCYjBENUtjaFpsOGJJWFlyL2FCRjg1bFpKaC92TDhEN3hXUGcvRUJ1MTFKZXdyRldFQ29aRzM5VlpMbEx3N1BlSG5qNEZ2K1ZScXBjKy9qcHRGOGVZb0FINzYvWHVTdGRZY1pQaEFPWDFWbEZwRVNhZXdRek9qWkpabVVNc3NwZ1Arb1hGRVNadUl3c0piTmRhVDdCTWNqWWpqYkludnlQSmllYW5DeTJBU0poaHlRcjJZZjlZaE5zWkk4WE1yZGJWTHVzUmY0QXI5WElOcGZ4dTZoeDNIeVNRYTFjSU81aWJSVk0zanNTbVJiV1pHcXlvTGNiaFJOaWxLSUE5NVVUM0ZPeTJvaWtQaEpUZ2ZZdHNoeUI5c1dsSW1nOTVlSTk5WmFxb0hvR2wxeU9aaVcxZ3N3cW42blF5ZUZmcUNMWVFSVUJBQWV2REVydnZncTRucWZmY3ZIeTFYaGpwRGxWQk13WmdKa01LQlBwejR6SWNOemV4ZlI2YzYzZisyeEIrRlIxNEZBekFBVlowREV1b0J4STY5REl5cG16YkxPRDBCUHJnRkw2MlNIWjhFQVd2eDFDR2YyQkE4MTZuY1N5ei9HdkRpZzcyVmxZU3R5UVJNUWlySlR3dXdNMklEL2lqbC85bDU2OS9FRytmNmhnUXFTMVJFb1YyNzZzYlhmUUZ5Zno2dXhkL0p3VzRpSDloY2FyZDFiK0tOajdQWEY0SmZ6MWZ1NFNCbm8yQi9EVE1YTjIzQzJvdXptaHBTcmEwRmdvS1NIZDVwcWtaaGxKd21HMFpTY211QS92Q243cmtRM1Jwc1U3Ukl6aTRmU3ZSZlpvcmhkWHZ1UERVclNvRW9JT3YrRVpmczllSzAxeGpBZ0VUU1dXaDNERVREYnR5eGljYU02WXdlMEtMZXcrZDRXNFMxOU9RWld1Qkk2V2Z6US80RDd2S0dYdVVEMGZzMHNPayt6Y3ZUa1ByaUpsOWpjeUVKN1pJbVZobmJVaG1Ocy92WG9ITUNyNmUxU0lFblNaTFRaZE1aekgyc25iMmpRZDFXd202aWR2aXJaejFhYW9ZdHRFWVdRaG9EUFl1Y1JDUjdsZ2owajl1MUMwWDM2ZFpyVmo5ZDRxbDdaQ3NvUTVZUmprRG9PbGY2WjJCRkk4cnd1eHdOMk5hcE5MN0VPM3lNTk9ET3BMaWV2bGI0RFdDTCs1dDRJNEprbEc3eURyRzQ2aHNsRDhrSmZkOXJhRS91WUxmazFSeUc0UFh5cGEvdVFQWHVPRC9GWGtFWjA4RmFpS2xTL2VaSnVxMytVdEtKM054WmdBZGluNEFFQ3FaaDV3M3hNZUU2ZHlWeTEzOGw2aE1JSkZmU1NIVzZJbW5IZVY2Yno4OWdoSWg4ckxIb2xvYXJBeHdKaEtpaFJ6TkZnRWw5MzBabnRnZEg4SlRPM3RPZ2lYeFZkOXQ2eHdqMGtKMzR1QU5td2p2RGVjZWhrOFRHR1hxSXVPdDVhWXp0Ync3Q0drMlhKa3VnK3I1eVNtTzYycG5JY0lOWWRYV1ZJRW5oN3p0ckoxbGJybnVUYSsyVlBxWnorVjJLaVNBY2dxRFAyV1ZwVDBJMlo0QXZWNGsySVJMMnVvSHVleCtyc1NKQzFaQ3dIcmRSQUF1b09uSGM0N1paYnNQUHdHWXFZZG82MkVSWEt4aFEvRTZIYmdlMlpUMENBdWV2MHpjclR0b3F3TEFnekZ3Y25NMkEvUk5weEpORmQ3RWQyMUp4RW15azQwOWExOEErOWRBTS84SUhXVU9oa25qdENrOC9wZ0VYVDNWNUc5ZWhaMnd3ajlLcGxzM1o4MFZLNHFjdEkwY0ZWUDVxNkcrVDBsa0Q4VjRVTkd3WWxtenA2M0pEdUxoMWRaY2Q4WVFMWDdvMXl5ZjhtdzBabEdPbnJ6UFRpdUVvMWo0THpGTFQ5a1BnV0JXOUg3a0xtZkZDb1kvZmxXeU93K3p3VzZEaWtZbk9nQi9Pc2ZmMXY0Tm9vN1QxYzhFcTFxZWJEMW9BbTVidE90UTlsWDJERE9jY2lZNHd2YTdXWTN3UTMvWjFydzBSZVl3WExBNFV5YXlrUHQvMzZ4WVRBUk9Vak5wc2IraTZpdll3OGw5cm5IeUdFdlQ4dG9jb0h0QmgwTUdhWnRTNC9KSWdIUmloY1liU2ZDaHdSemZGd1R2RkFSbWl4YTFMRkxva3JrTldiMCs3Yk1ZNzk3NGVFMEhEMGgrd2NSSnJlWGMwdzYyMTJiUW9Zamc0Q1lyQjFnQk5KbXpKanFuQkZINDVBSTIzMzU3TlU4OFRqMVZXWnFpdE50VHBTMCtZNEttZkxoV0Nqb3VGQWdzcG1FZ2ZnMENoK2pScUpHN3FscHBiQXRTSGpVaXlmMmN2Y2RrYWNLQnVlK00xNndZVi9uSnRzcGlubjVRZFFPdzkyZWpjdGJzN1ZWcTM3ckdkYkhkTWxyQVVSRlFtanpTSEFoMDlZYXltWGE4amQxSElYTG03bnVaT0p0KyttSVl4dmw0blVHbDZMRzdua2JZbzRWUGwwOUJicFFtN3piTUdybVVoTUV6NE5pT29jQ0JNWC9sa3FOQkhvcGx6SlNETFNSZVQ2dHJDUkpxV3R3Zy9oTDArcXB5bCs2OTE1MW0zY1BiNWR1bTkxMms4Q25JMUV3WHdqQXFwL283NHJRTDhWVm5uNmN3YWtqcTVuN3dkelZRRThOZVp2ditOTXRBSVRSR0YxR3BRb0l4UCtvalp3aXB4WXJCQmFQR0pRVnlzUy9BRmF2ZUYyaGxUdERpVUV6Y3RxcXdjWE9TcUgrUEYyaGFUQ3JEM1A2OFB1bitrMVVWL25CN01YN29VT0tINSs1UXBicnFXZStBZThOWGZNQVlyck1SM3F1THNVYklBV3dOT1JEdmFkRW9hVWlieUNYc2tDUnAvZnlEOXJDRnNlOWsxOEVaZHNqdzNza1VTODl1WFA2aVMzTkY0T3hWNE0wekhTUDBPK2tLSHV4cXlzUDlmMXZFb0tMSExndUlRRWowZmtDYlBVYlE2QWR0NnNGL3JRd056dGkzdm5qY0tIelloQVdCM2ZrZDZsR3ZJaU5zWlAwRmpzK2crVCtQaGx6MnVJMkNkcVZmT3RFbENTM0k3bzRiWlpMMFg1bTJSMVh6S2U4VlpOODh2dFJPcWhrQWdEWmFmRWJwTDdLTmJEbTd6b0NaMHc0Vy8zYzUrODBnRXNTUDdXT0lMd0c5Q1hxQ2xEQXlBU281ZDFlT0grcXJBa1lyQ1pwRlBpTlN1UjBlS2daeDByN1Z3Mms3SG1LOW4yRHA3NWdydUFWK3VlSzlNcHo0ZGM2RFFTRUJaQy9lNkdzS2ZjV0NVczlOVE50RkcxWlZBUkVYRXhoRTdzNGFTbWJZZW1kYzVaV1ArcU9rNFdRKyt0ZVhCcDljTnE3TllkOGVjR1hJN0V6NUxCNmlTUzBuZnZDNFdzV2d2RWhmMnU5RTRXWjByd3FCTEVjNEwvbWhSaDREcEF6OGovTmJzYVlaYkVzQ2NyaTMwdU9SRWU4bTUraWhseDlmZXAwVTl6MU1FZFJHaFFKMUcwendGNlhCMy9lRFExN1Bnb3FDcnFCSjNsczhLM2p3VTdsSnB4VmsrZnFKVVAxY3JLNSthMkxEQ244dUpjc3M3YytKNWM4Wmo5VWlUL0Z3RG1YcC93RWtoN1JaRTVsREtZQWh0L0ZKMWh1QXZJUXR3Y3lIKzRINVlNQzhvYkxheDY1VExUYnNiMGJjRzc4bUljbkxDOEJKZjZ4YVRwOFVmeVNXQ01pdkhNNTB2TFVvaTZOako4elE0MW1ORnA2RWN2ZUorcnJFMU83eDI3QVEzV1hZNTBqdkEwcmc1OUpaRjgvUGhDR2xFbG5mYUl3SnlvTHFUWFQzSWhyVHo0SW1hZ09CejRxeElZaDRvWVdDdHR6RE90SXZNRkxZdW0vTHNUR0Fhc1Q4V3FEVXFSWkkvVFNYSG5hbmNnMHJOS0UvV2QrL0JMVFdpOXd4djFMZzVlUUxueGNMT1hIcklOWVc4eWtLZDZVdi9SZUZoQkFkdHVyVzlwV1ZqVFFHb1BGNDNEcWdyMWxjanJjMWFNRWt2YzU4VGZjdVk4UDZzc1BzbUNrZG11WFNJUzA3V1B2dXRQVUE2L1ZaTDN1NGUrRW1tc09ucmN5UlUxTUtkSlRXTnI3RG5GQmZJaVJWS2VZTk9Db2RtRXI5b3dtRmRRK1psNU1uU2JSOVNMeFpPUUg5VmQvUHJhSEJMaDRNUDFaK05kckN0ZTlHWHNQOHBEWWgyT0FNWUwzcUpTaGtCS1Z5dU02WUptay9mMyt6MmtVOHhWM295Q2tEU1JmMk9zZmkrQ1ByeFpQV3ZIaVFkREJRNEVTUWs0c3M1WHFBQzVtZ0xacjZaNWVWbGtXaHVjVVgrNVNzQzFYL0FVMGliTStGUGQ1RlM5VGV3N3lHZE4yVldCS2xUcmlhSXdJWHJ2ellkVWpmbjJiUGROOTk0K0tZNWl3dFRpKzNiV01ERVEvZXZZQzBUazljTm1neHNMZ1VSRGJOWkx3OEVpMVBBa21GSGIzMTJqZXkwSXBMTTc1dElTNU5MQ1VSZ2xUcnRvZWRSSDQ0b24vWHlpMExiU0dUTU5ybXRRTE1FRmRSdDVMbEt2bGZiTGUrOElac21QS1NHQmFNODhGcUIwdWliNy9WOTNjYXNOeHdZR1IxR2lQNEh0b1YxUkRGbmhYOVlJVEpNSVRXbC9CZ1doeXpIUHlZeEp6UjNmT2wyRXB5Umg4blFDZkVPWVNRTS9pRjZzblptTHprVmlPZUtRa25OQVRPODl3T0NrNjBCQWJjYnY2VmVPVVNaWGxJbzBGM1hlc2FPcFZPV1lBVmNpL0JuTWd1ZGNjOEl2cU10QlFadHovQlN4R1ROc1hNVDJlMHFYdTQ3VExBdzNOVXZYM2QzS05ucGRYR25WSWVOZXk3ZERFU2lWb1NvcUZlam1BdjR3NTcrSEJaZnlLQlgwK1o1WE4rTWthNi9FN3YrYTlzNmxPUUVHelo5TFRydzFrOXc3RWlqc3dZMWFYcGtDcU00Y1FaclFicVBtNWNXQTdKZDVESkZocDZERmd6b0JaN0hnN2E3VkVleGxxZHNqYk9VL0t4dGR4dnlHUWlPSFliQ1hmaWxiY1U4M1JncG5UVHJKRll0cnMrV1hnOXBEVjVjempGNFhRMGdPNktVUDlzaHFPL0ZoOUtKdmJYcWFZSDNWZ1pYVjlrSXY4NGZaVXpLTEhUMUVmZ3NRM2tRTnl1NW1hREgwUEJYdURmSndYR0N5SnhtVi9ZMUZFWUtub2psbi93WVRnZzBWM0NUWWZ4cnVBSW1kV3l5NkdIR1NGek93ak1xK2RVTXBLRThTSHp2cS9ocG9nK0xPc3dLblEvcVRoSlVxcWxkemhUcEttTm1nRTZLRjNJaXFJbWt4UlRLSTNCbE83cTlrRE1nd05KZ09VTHV0RlprdVNmTjR1OUQrZ2l1WURieklUWmZIV2VXK09rRkJnNUltdzliMW5rSWU4M2l4MmxKbU1mUWsxVFNWUjJzSWRNYnpUWjZ1ZHJSaGhDZHdFbXBVb1FWQXROa3RkTk42RFduVmRIZ0dzUUR2ZE9ULzIrRERzSXFhSHVBUGc1aDFJRkhLRlFpNG9OZzJBNU9XaTh6K2xiak05U2kvUzNLTi95RzJ3L1Y3cGRsdjYxeG5GWGVZUlVXVWdvbkJCMUVYV3JwQytYZldVTzc2dllxTE9Jdm9nQ0lWQzA5elNZVHF0V3dGQk1XemVCT29hUjM2K1JSbUY3bVN6OEh6ekhLdThTWTN6b080SDdyZSt1Y3Y2QWNlQitlalpYbFQ4ZE44SXJaYlJ4ZHU0OXhuRmtQUkZZRHpTU1FsUGkxc0o1b1djSndQZ2xzQkdiWklBeXYxK01wUEFtbDQ5R0hydjhGMDI1NjFoRHFySDVGaVIwTnhmWTMyMWlMUmJ4bHdVVW5pcjU1RzdpTkNqaDRTa1VRd05LanQ0VktFUzRwMWZTK0lITFhiMktZaFlETWxpb3B1SXhxb1dlRFRmQ0lmS2lIRFIrOXB2Q01mSzErblNzb1VKK3RPQjg1K2RXVk5GUVJUMHovdVNablR6UXlMeVA2VllnbC92dHJjeXVXYndBdEtTeFovcXJOZmRRVXZGWjIwQStveWNhUGFOTGtYR3lOVDNjMSs1MVFwZVRlalYrYXV6ZVpwNk5XRzZDaFA4Z2NNb0FxTkJ3QnlzNXoxL0JJZytNYXd0bUVTK05qQVJnUHZtTWtCd1JSTndMaDUycGQ1MFZjWTdIWGdYWGQ3WjY1UE9ESmNyajJMMCtKUDhhbHhSNjNuU2tnQUdnZHpjSFVvbHFBT09rR29WNDkvZis2OW83L3FnQVRZM0x4L3hvZkY0eGR4dUtmVWlqWSt3elM4d204bndQWW1oNUhFdTQzeG80dE43aEk0NHRvZnQ0NjQ3L2MvYkYxSVVnUUdLVUZpYTcxdndEVk5XT1YyVW1pM0FzMVpYeTFMeWFpS0cvNE1MamI3YXRmRGwvTElzM3dSd0l3Z2RheGxjWVBPZTFEd0VMZitpQTZKNGowWW12OVRzVDhrZGZGOHQvTGJ5ZUtwaDRuQTlBSzBkYnBVTkc3bnJZYTFBYzhsVEY3MDBWNVJhcjdlaC82dnBCRVM5djA2clIydlJPUHRZSkdxWUdRYkxWLzNBd2U4VUNETHhDVkNBazNiU29KbDVXMjRaOHBXV01ubDhVbG1GbnpXV3VOSHEzVUhnQkd5emR1L01NLzJrTHNHVHpQUXJ5TTB0UXZiTEd5d2ZyUGtLdFlSd004NTNFdisvNGNseTN1dXdtZXJkeVhTREtqeit6RzdHdnhmays0MmwyOVFaazNBZDRHSndlejBKaHk2dU94c0FFbDlXc2JXdE9ZdGgwUFZEWUNCS0orbXJoTTJNZWhHNTE4MFpvNlNjTmJsUEdjZWJiYTExNjQ2K1REcS91RU1rWE9JZTNFNVlDRzVON1lpTmJ4WGQ3MzljUS9vQzFlQzQvcURwNTVmSWp5aU1EdEpDdWJIMVA4SlYwV21TVkluOFYwRFdPY2pkYldycUxJNWFEWTFqYk1xaFpQNy9lMldJcGxubjdqNEJQcnJTZXdSMkxoa3gwMjBmNG1Zd1VneC9DYkxnVjY2RmN3eWpzRHlrdWEvbHVNZXNSWVl6dlAwN2lUc3hCSkp2d1VVQS9ZVmdRZFhxcHcvQ3RCZnU0Q3Y5ZmVmZVQvTHpCcFJ5UGZ1M011alpoUnMrSjFWZzBTc21sWmpZOGZZSEh5MzJ0YVlwMUdLMFpaWDdBeldpQm9TVXg0TjlRa1BPbEhrTjFOV3p2d2luQmdrMmdvUEN2MVZLNU41cDA1QnQxYUFFZzFPRGtJQitwakxXaURlQnMvMDU5NGI5ZE9aK3JnZzUvR3ZBNjJiMCtSOGN1UzhTQnZSeWlOa0Zqb2VsZjRGam1ORnUyYWZoVnBnWkEyQ2ZNek5LT29wck5TZVhxRkNjQjQwb28rQkpvZGFnU0p6Ym1Jb0dkMnNvdTY2ODlqSlRiWEY3MXIzUUI0SUZqSkxiMjN0N3AwWkY2S0xxSnh0VEdNRFRwY280UjZ5QmZ3TU96ZTJ0NGszdWI4TTRJS01PakVYdDdJZGxieDBNYjVxREFib2o0bVpMKzhjVHh4YTl4RjF1V3hidjNjUFBwSk5YR3UxTDY5VnNBdzY0WFZ3OWRiYnhFeXYwa1hUTTBXUFVoMmwrd3lJNVFIY1MyckgrajZYVnBDdmgrbVdCdWtTTTRMbEljWC80SUk1SHJWTnRHczgySHlDUjdOQUloOGpZUWwyMHJFNXN5OWMxQ0ZTbzNkdytaQmJsc0QrSGxmNXdNdTFCYXFWeDMxb2NySnR3OFlMNzJIbXFNYUR0WHg2NndoQm03Ymp3WjRESjVTcXh5S0Yza3BOVEM2aVpNWFVCUWtvRStKcFBnRXpYYkpjWjkzWVhaTlUxTlBQOUJoVzFMdkFzYkpYVTdDbXRHNVZ4L3B2c3BESzNucnZ5OWhSZ2RkYy9CQnRVazJBRlpHV1RzTkhMR0Y4SWpDYTVtRlNXa1F0SnJ2ZEpaSHVuSVFjdXc0Umt6dVF0bFVtRmZtc0J1QXI2aElwVDVaSm93dHJjajIvdmIvdG1hbHRJSkg3NXc2aDBvRUlWeG83RUJWRHcrLzFMdWtHbGkzcldESndKeDlVZk9mRENXMkdaWFEvWVlqNjBwRmpqRkNzSkRXSnRhc2ZzQWR5WnhMVm1VUmhSYTRGNXJseTJoWlVrNkdQUDZOai9JM2FrRGhSS0FBMUlxK1pjcHpuM3F5a1RrL3Z3Qlo4b3FpUUt1eXpoY1B2QXl6eitIckxlZDR2UnRUVE9zODNtVUwydzh2L3A0VjhTOWJVVkRYU0RmdS80eDhYNitDYU5WSXkzdXVGdmtRL3BEMWZGSmlvWERPay94b0pvTlhJWkVONGlFSFJ2OWFQY2dNWk9UN1pueTQvSXlhaUxJZTRoWG1iYytVbll2bHFmNGpBd2M2cXFOOHMxU2dMVDNyQmxKYkw3dmxiOGZvQXRFbSs4UkVlVHNIYXFyZmtDb1ZVWWN0RHhoUGxMYmZwK2VNNVpibmdWMHJwbCs5a3pacmJnK0REWmo4ckFrNnJKbUN5UHBxYXNVTDJGbzZVWUJBZWFBaE5IVytiVG5oWEkxS2x2SUpHRWpBOVZzTXNWbXEvWDlxTTJTdjJmUGUwRWEwUDhBaDdtd0VtNXBlbU5ER1hLU0Q5anJkY1A0ZlZpV1AzV1QySHFQM3ozZUVQWDF4R2grUVFWSWZTd0RoU2pnanBJcjIxbkZtcWVNaFF2azhNdWJWN0Fuam1SSWlNTVZwbEovMnk1SWtGblVPclphL0I0UzhpL0Y5Z05IWVNFMmVDL0dmazUwSGl1TWZOZ0tTdlpKS0Q5QTd3SHFOV3dtWStiVE5sdXk2MVNMSGRVS0JqejJ4V1Vqd1IvYnZXNFUvVGI1UzMwNW4wQXhSY1J0LzFnWmdzcVZobzZ3U1oyZ21aK01COHIzcm8xNGZRUEFqUlZzbVNPTUNUbEZucTVmclBrbGZFQzR0WFNWcm5pYnpRUHRPVnBTcjh1T1c0TXdTY0hEdTJCNE5yRDcyaEh2cnVpZFFIZlA0SkFNOGcwY1dHcURNekZXSlpuc3A3QlFmQmIrTmcwQ2dheGUvV3BiM0UvSGFCNWQzMGprUnNkeU9ySEdwWWFtVmN4SnFoTjBsbllRcG1udXFxcFZQWGpNc2VodktHZUpJQ04vNHllUStYY1JKYUx0R3h3Z3FueENqQlRRcUt1Z05VSytVckVqcUJZSUFuSzcva3ByeVBtekhxNUxSampzZ2ZadGhCK0MyV2xGVDhQdnJVa2p3ajFrVUVYK2VnTVdnVmo4bnk4Z0pyR09KV3ZyUkVHbzhkQlAvemFjVkt6bmNhQ3NZdjgzZldiR2pBT3FEVEUzQ3ZpM0JLak4vYlRXK0FxRWorbDJMSWpYMDRLMXc4UjRuU2xXMEx3RHVJYjlmaW9id1BEZEpGdSt2MTVzRHFSdEcwRmN5b1hqQ3Y0L3pYRE5aeVl1WVpsQjJEQkZZS3lCcW9mUjNQem83WjlQUU9NT2ZHbjA1aElNcHF2Q3J0OWpObXJIWHhBQlIwQTFZamdWNkRoUy9PbkJvMGZrREh1ZUxlR2pPUnNyUW5jK2tJZG1JYmd6ampIRjlsYmt5VWpxNHNpVWFyWUNuWU52dkdMYkRmRk1ZeUlPcUJNYmN1eEJvSStUc2RiNlJqa0hvRDVzWkovRXdKckViRWs1WnkrbDR0Z3BGalFjS0VqS0V3U0ovb01jejNDbEtMZGtDWjZnZGlLRWQ0cjN4QVBLVjNLZnROY1BjQkI0Z0F3a2F6cnFXdkVoZ0FGcGpNNVlHU05CV0dXUUQxVndIQ1RYVkJiYjcwcm42a1V5aEpENEtmNklQZm9RN1EyTk9jNW16dU53VGdDb01xWkp4OVBNOUVHcGdTUEY5MFBEWDZSOFl4NWUyRFVCb0xPakNXNU40cmpMOC90a2ZwM0ZWQ0JCQnlhdWdzQTNseFdhMHV2WmsySWJVWWIvTUVGdGFEbElZMTdvZTdOWlBweUJjV25aL3hwWCs2VFBub0hPRXdHcmdSVGVHc0N1S3MvZVdpVm1zRkZSd2x0WHU4SXhHcmVubTRxRmtLaEJqYlFrY254MlBUZDArQkF6VjZzS01kRWRCN0lDcVBLeU5iaS94M3ozazduT0dHc29xb01oaUcwMkFBemU1bzVSb0Y4UWZVamFaRk96ZEYwWklzUUE0c01IdkVoUmlWckE0N2gyY0o1V1pucGJtSDA2TGxzT1kvRmcrVU1ES0ZtTURDQ3BSTkk4d3RkajczNWtFUzBBbkRDVll5ZmRNeURQRTBVSWlxeHZzL25kdkt6ZFBza2tOd2k2WE1laGs2MWVsKy9ZRlM4TENaTWR0WkNUSlQvNWFkWTR6eE9PZ1phWE44Q0xNdkhuWVdoYW9vNThEYnl1TCtQU0ZBTUw1Nm5NbTl0Nmg0UUNYTjFsTXRyVkxheng3b3dyaWkySmVKUVI5UDdHaWlORnNDVGsrdTg1RU80N0dPd2xzMmNoQmRRaXVzekNoTmtjZXJ6RW1pUEhnQUM2OUkyNFhRcGdseGJ2dFhCZW45VHpVVWI3THc2b1BwWUx1bTJYcGtOWlczYStpUDFEUEVER3pSRFRyVndLaW5uV3FwYkpsdjJZMWZ4ZFV5WGcrZmVEeEt4Vm9JSXprNUFtL2h3ZnlUTlVybEVCUGNncWNCNzdXUkwrNlN0VVdqM20rRmt5VmxnUFo5QkZIRTBBNEd0cmtlVUlsM0t6VnJhQXdwVmxHb0psMlUvT0RqNVJIZUNKUnhzZmtjcm15UDZFY3BLQjVneDB1SWNRQU56NXF0cXB6ek9jVHRiUGE4SjJjTnRKVnFIbmFYbWZtMTE2WEc1aHpjalUxZGw0eVBVTVRickIvcDJZNXpHODVPRDB1cEFLckFrcitVanJ5Z1Y3WXVRUUQ0bUxTb1NXZVdFaGxodk5pcDI3ZURvSTVITW92eWtqL1hXeHVxV2E4U1F5RlJkYkJkeis4T2hidjNEMXk3Ty9SYkJRcEU4YXlRMFJnS040aUpYVFVmdFk1YUppaFN1N1VtTk1vVkxmemhFOFBzRDZlK3BmUWd6TGM5TnIwNGFhUXlmYitheHNhMWY2LzBXUzN3eWt0UVZHM1lpRGUwam9uYjBETU4zVnNYZEZjQ29GaGlsNVAyZEJ5eHZJL0ZBL3IzS3I2OVhwTmhvT2JIWWk0OTdqWFJvWVN1ZEJZTzBWUDhyQjRIb2tiS0NHR0hxOVQ5Zkk0VDdiNTU0emtkTFVUZjhsb21ubUNzUXlYT3F4Q3pVQ0JOT3VDb0lBNE1PRnMwZ2VlK0dhV09sQmNzUWwrcCtZN2x4NGtQa2kxUVB6NjVVMTFBTlhvR2Rsa2l3SGgwUEhHUEhQZXhSRWhlNlp2TzRQTkJGQkFqZW5HL3NBcFhKbVhYSmIyNHZoWkd1V2QyRTdVU0IwODk1Yk4yZlNsVzQxSkdNYTEvS2lWMGpNUmVuK0xhRnNrTElrNFhNczJibEc1ZXBQVkhobXVsWi9zVER4SUZuYjFlQUoyNTBmKy9zVWtiNndyWDh5MGxWOTAwV3Z6SEZJTlRqeGIwN3ZPZVppdlFmQWdUM2djZGJOaTA3ZFNDNjl0aW1TYWlMTm5GZWZacWZqUE9CdUVBWE5qU3pHaGtwaEV4UDMrVWtjbWE0eEx3UHFvVi9IMVZtUlR0eXl3SDZzNjkrVmtybllQYUtqMXNMQWhIbmhtb3duRnF4ZGZhLzV1MmxERkNEMno4WFgwdFY0NmhZeDBSMndBZUdrTVV6QVpLclRhaGloSkVsT2dSYVY4Rm4weEgyZWlGT3locGFSYUtMMDExVE9LNXZuaEFyY0txM2lZaVZLREwrai9lbmYxcEdma3U0N01hODhHUUF2Mk5KQlc3SytTWlAzNkYvLzJRQUJBQm9BUUFBQk9RQkFBQThCQnprQ0FBQUFBQUVZQWNCQUFBSUFDUUlCQVFvQ0FBTUFHVlJvYVhNZ2FYTWdiMllnUm1sdVoyVnlJQ2czS1E9PTwvQkRCPgogICAgPC9CSVI-CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24-CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I-MTwvTWlub3I-CiAgICAgICAgPC9DQkVGRlZlcnNpb24-CiAgICAgICAgPEJJUkluZm8-CiAgICAgICAgICAgIDxJbnRlZ3JpdHk-ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8-CiAgICAgICAgPEJEQkluZm8-CiAgICAgICAgICAgIDxGb3JtYXQ-CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24-CiAgICAgICAgICAgICAgICA8VHlwZT43PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MVo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU-RmluZ2VyPC9UeXBlPgogICAgICAgICAgICA8U3VidHlwZT5MZWZ0IExpdHRsZUZpbmdlcjwvU3VidHlwZT4KICAgICAgICAgICAgPExldmVsPlJhdzwvTGV2ZWw-CiAgICAgICAgICAgIDxQdXJwb3NlPkVucm9sbDwvUHVycG9zZT4KICAgICAgICAgICAgPFF1YWxpdHk-CiAgICAgICAgICAgICAgICA8QWxnb3JpdGhtPgogICAgICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24-SE1BQzwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPlNIQS0yNTY8L1R5cGU-CiAgICAgICAgICAgICAgICA8L0FsZ29yaXRobT4KICAgICAgICAgICAgICAgIDxTY29yZT42ODwvU2NvcmU-CiAgICAgICAgICAgIDwvUXVhbGl0eT4KICAgICAgICA8L0JEQkluZm8-CiAgICAgICAgPEJEQj5Sa2xTQURBeU1BQUFBVWZwQUFFQkFRQUJSOWtINWd3Y0RCNFFBZ1FBQUFBQUFBRTdBRUFBRHdJQVFBSUFRQUlLQUFFQjlBSDBBZlFCOUFnRkhRRURBYmtBQVVkbkFBQUFER3BRSUNBTkNvY0tBQUFBRkdaMGVYQnFjRElnQUFBQUFHcHdNaUFBQUFCSGFuQXlhQUFBQUJacGFHUnlBQUFCdVFBQUFRTUFBUWNIQUFBQUFBQVBZMjlzY2dFQUFBQUFBQkVBQUFBYWNtVnpJQUFBQUJKeVpYTmptY29BQVpuS0FBRUFBQUFBQUFCcWNESmovMC8vVVFBcEFBQUFBQUVEQUFBQnVRQUFBQUFBQUFBQUFBQUJBd0FBQWJrQUFBQUFBQUFBQUFBQkJ3RUIvMlFBSXdBQlEzSmxZWFJ2Y2pvZ1NtRnpVR1Z5SUZabGNuTnBiMjRnTVM0NU1EQXVNZjlrQUJBQUFVVnVZMGxFT2tkU1FsUXdNZjlTQUF3QUFnQUpBQVVFQkFBQi8xd0FFMEJBU0VoUVNFaFFTRWhRU0VoUVNFaFEvNUFBQ2dBQUFBRkdid0FCLzVQZkczQVVONHo5RTlsc0hEbXZXMGJGemNhbmVoV3dQVUp6aDNSeExodVBBejJsckpVRnRZeHNmNnlmOHJtT2RSOWFsSTVieXY0aDFaYTlnSUNBOHBneWJJdlJsUTdjS0VGcTZkbDNVWndhdkxKZWdQRVE1VmdHeDJZQ1I0SlhhSE9vUXRVWDYrdUEvQWhBeUtMVEljblovMjZ3OC9oMjFYZHhQT3dNSmNWaGJYOTlEQlVyM1pBWnl2emZ4MVFBT2VlbmVUUE9BOFBURXFxZjFQbU9GMkpuRi91QW9WMEs4QnBUQUxhUmVQOGhJS0g2MWJvMElrWGxZeHZnenViUVV1NWtwSnhnMTgrVUVpb0laZGRBK21nQkh5U2c2T1VwanVPTkdKQ0c3M3hlcmdjUWt1STdNREorL2Q4NzZwSGpzb0RFNGp4SW9zT0cxKytaNDJ3NVdaeHhtZWQ1ZmgzUHoxT1dDRDdtU3JMWko3VzVpeTRLajVjVWdGUmw0bEVBend3QnV3S1NQWSszOGk3K2xjaU1hOU9jRFl3cHFlU3lkQ1VZZ0FQOFpaOFp0OHlBQXh1MncyYXlnWjgxeXFKRzRKaTk0TmxZWGp3ektRRktTaWxuK3FjOFB5ak5xS2o0SWFnQ2xPMGFWdU9MeEdCQTNPQlg2a3VCLzRmSUlrNmhNYzNXUmNlb1ZFNUpIMlZSYmJERzNCYTFkaVQreWNOYmZ5VkRaaE04RG43QUpmZmVzSk41WkVHL1BRRTVURTlkY29oRkw2RVBZZTVwYTlkeENWdTlVZFBxOWNPQjFSVTJRSEFJeGtibmcwOHR2em1MT1BQcFhGUFZycXVBZ2ZjM0JaaTk1VmgveVZPMUlKMlZPVkVWVGVabmhnZlI0NFBHNkxINWZyekdFVzFOcS9ZTFhRWEw5UEJqR2kvb2Z6Q1RCUUZLVGNsMjFXeUE4cnhib0g3N1ovRWFJR1hiZmVzR0VmUjJFTEtDVjZkRDlTbUFPZUFZd0FScnNwSGpneS9DWU1vUTZqWXZoaVNxQkVVb0dCci9HR1RhU3BLMmR3YUllb1FMUk8rRFJzZVpvSE9lNkdCMThmODRSSE5OR0tWQnpDck0wV2xwZzFWNTdkS2FaMkNqV0ttbGE4bVhDYlhOWUVnTkUwRmlQakZnTmM4UGg2UUkrbU1JVkRmSUI1YnA1ZTNqZDdNS0VNNFp4SGp0V2U0aThscEZVSklITVp4dzRUd3Bpd0RIc0tMZUloL1NiMkdCbVdqV2N6eVdFMVZtYnNxNEorWGpMcVNFR1JkTWd6NTBqUDhwMTF0T0NRWWpBeFRSTC81U0dXTG5TZ0piV2FVSHJYOWR6T1lWY1BOTGZTZ1UxUldJK2JpanZESmxNU21Dd0JCWTJWNVNvUXNLZVRkN1FGbnA1ak1sWjZ0OWU3U0ZYNDI0MFAxNEdiZ1pSNjJlaGVpclphaEVpQVdqay9jaUM4Q3Z6alVJYTZiNStuZmp2em0xQndiVFM5cFRlTTVVd25HamNhOXAyZ0pvUVJuQ1pRY0loWFN4b1o2aiszemdRZnIrZmVGdzZkYmRZUUZYV1EyZElDcCt4N3V4UlY5Mk9rOVRUcU5Rc2h1QXhHSWNNeEtVbXViTGEyODBqTXdkRGtkaStYTDN5QjVLUmZDQjB3YkZCRm9BUWlsMlV1cEVkY2k3YjlQSDhoNFZtc0VCRmNJeHV3bnREM2MrRDAvbWFhYmdkOThUQ05qUHVnbjQ2aVFSdEJjMTlrbnJsQ000VlB6bmw4NkEvUWg0dzlZS0VCanZYS3JQTkp5ODRwRDhOeWxob21jUGFDdGd4WTJPeFo3M3lDbGdMckgrSTk4MWRMTkkxSk5UM3pDbys4QnlYeU9OUmxROU5hRnpiMEV6MlBpUFNCMi9vN2FoQk1QdUxMWTUwS2dWdG5YR0xRN2RXUVI4ZG1MaE0rS2tEUVBLdE5tNGdOd2FPVHFWOTBXOEFJTzdabGlSaDF3bTVZK09WbDR2SDQ0M0ZaYmJyckNyWlEzVGdYWDdIUnVtTGdJbnE0QVVYcmtnTWdYd3h0QnZmMldHNXMzSHE3R1R5bUtobnNXSmlMRHk5NFBWYXZzYWo2QTFQd01xQmNYczJsZGVYOFRTM25XOHJrbDV4TXVvR3RXbmppeUtOQVB5K1RrUFhBT1pBUEM3ZS9yQUUwbFRDOHo1dlZIQU5lZWZFcitSRWd2OGpka1FHdWs0cncrREs2c1VNL2lRbDh1bmtubDUrbHIrQzdVeXV4NFJ2a2VwM1lFOHBJY2lVeE1vb3pzTFJzd01UUitMOE5zU0x0cHJBVzZ4T0ZlaDhyVVdneXFiaFQ1UE5QcUR6YTB3TVJuaGJRdHU0bTNqbHJPTnhOMmp5ZEY5VjQya2ExUXZjaFRPRDRUUXVxY2d4Uko0My8ybE1Td0xQbzFPZ1JkZEZXNndXajgyalBtVUFOMzBleDlDaThBUHNRY0RmMjBSQU1OVWNQaFI4VFpHMHdrMzNJMGgvd3l2Wko2ZXphU2JtOWtRWUFwYi9NbFdLeHVGT3hDTTJpUEtYMHVSdXpWeWc1TjZFcHJ2Z3laN2JCNjIxZDZqZk5YVGNvaU8yc28yZEVmMVQ2UHlBSURuNUhRQ1lUTGZyQkdOSTB6c1FoNXZ5aVl4SkxMWlQ3cHZUcGswOG5xdG5CY1M3eEt5aXpFdG9LSFYweHZETGl6eERtVWgxcGJhb29mOVBQWlhPMnRQemlodDZRTzhyV3dtUzBJTTgySFRDR2k2b0d1bDVWeXlMSGxSQ0IzRENWdXA5dGpiQkJjR1pJRGxjUXVjeVVTdHZtWTlTOWJOdG5KQk5UVnlmcW1ScG9yamVrZU5IbjdIVjk5MVdOMDBSVVVDQTZ2ZDgwL3hpYytKZUJXNDZKcHhuZkFFcks3amZ6Z0hmemlxOW96WC9GQkhIYzZ3TEo1WUJDKzFzSVFNUU15Ukt0T2M2M01SS1cwajRDdTVwSHN3cXdFdEg1V1BOVXhHaUtNT0R5ejFOVytRQzArcjN4Qy9QR0NSVW9YSzJ0dng1NTltbDlua2VLWDRjNTlRdmxwS3lOSUVzTlF2U0E1TW5ZU0pHUVU2NC91bE03WFRJdTZKRXF3b1p0N0N6UWR1a21pNzJKK3NzSHdVS1Jnd2d1eGlpcmRveTlmM1RBREhjRld6MnB6ejU1bnlNNzVsQ2NVcVU1dmk1RW1QOXRTVXBGZjgzYW5qM2tjTWREYzN0MTM5Wjdpdkc3U0dqbjVGZlpVencxUk9TbE9lR3ZRNncwbURaczcxcDFXRlZTaFFHUmxpSGgvTHd3bjIxOFhTeXM4a0NvUHlwcVpzNjlSUVNYUlRYSVQwa0dmd2tMazdyWEo1VDhWY25pRGxpVUh0YUZ4eUQ1RFU2c2xUd2VVdWs4NUc3aXR3MSthd1JvdCtqMldqc3ZZRDNRd2RXZHE4QmxKd0c5cVNxWGdKOG9CNm14WGpXS2dKS1dQdDBiMHNjZ3Rid2hud0ova09hWlF6SlV5YUVBaGVhYWVERzM3SGtpSHlqT3VBRWxPWlNXaHhmVWNMdUEvSCt3d3VPeHptcmo5djFGVzFYNXZqOElTZTUvSmlzWEw3aWdYelhIVjF4Rm9NTGVlMWFtYjJ5NHBQaGtuSUprZVQwSkhyNmVlZWFnMzJzdVRiSUVqR1RYRWc3eVJUZ05Xa1hsZWg3SkY2NVQ5RTNmd005TTZ5aDRiUExIRm1JVjRDa1BMU3hIWG9NbXVzeVlGTnMxemxzQ09ERHMxMWtjMnVjbkxSL3hBSGorc1dFVEFLVi9kZ25PdDFqZVhNWERoLzdab2RPeVNDTXBXVnBhM2dZbDc0clMxelBIQ3laTWtMa0FkTXhJQ252R3k1ZmxBcFV5MmVWc3lJYjgvdnEydTd1RnU3dy9KbDdyd21LbERLTlN0YmdDdmlFamFMeFZJR2JOdmhwMGJtSGlTS08xWGJ3eDVodEdmdSt0Tmg0NkZITXR4b1gxOTVLbHIxd3ExUEYxdHFTS2ppVS8ydm1kZEpzd3pST2s4YlpwN3R2bVBiYVBIZTR5ejVnZ2hURWY3WXp5eWZxcHptbDBkZnlxS3RXSHYzOFMraUtNRkladHNNWG1RdkJEaXVJYjFXdS9YRjBUd3JNemVZSmR1NDR5TnBpdGh4NXRMV0lZSDM2ajIzcVRkQmo3ajJtQ2N3TVZsS1B6L2FTanVmMmd6T0ZUeE01YU1odm01ckNzbENPdFNicU9ndlc5cERZZExreXNSZEdLNWplZDYveEFuWnRKd0R4T3Z3ZVZ2bVhWTFZYQSsrUGZnWVZnUEVDdzJWaGNTTGptNnBnSWI1OTRYTTZFYUpXbmJoSFFBd3pCMlFYbTRzbkI5S0hKa3VmRUhOM3RqTFZwOWEwSGpVa3RQZ0l2bE9xYXI2OGNRWDBZK01IN1R6VU9WcTRuelo0cFp3bmg1TlZKU3U1VE9pZWhZS0l6eG1MTk50TnNYMWhOUkMzUndTVndpSzhxek0zaGxRNkk4TC9CNFpsM2tjbVJ5Qm45NVRINkY5aUpsTkIzS1cxclNCRlJDT0owaDZHcjhKYjlTejkxckRSTThjNFRGYlF5M0psSHM2U094OTI4c1JLM2ptRFZzMXRvSDR3L1BOciszRGJ0bzZKK2ZwQzI5UC9ienlEWlh4d2Npem9zMmNyaTRkRzB2aG1uTWV0djNCOERDZmZ5RHkxbHFuUURVZlpxanNUTkZxcDJHRFZmT1VEbXhRajBVUFJZRkxmekZ1TmEyZWZiRHorcGFvVW9nNzdydCs1WUh0ekE1d2tQR0VaTks0dTI1TEZnM0lWTWNpRm1PSlowd3ZjVE8yTUtLS1d0dGdmNDNtTzVaeDBXVnRaM0VyTC9WQzdRMHJGdy9rbGNSNnl4QVZWbHNkR01OOUxsT2hEQ2FERCtmcnVycTZ5eVNqN1BhcVZ3ZGdsbnp5RUZZUEZsR0I0bjRkTVgyZUgyWi9SUVdVWW9vTmxucUVGNHRpL080dzRIdHRWeXBXVEVEVmdSaVM1SDl0Y1ZkcDMyOXlpYVdkM2JCRXkvdTR6WEd1czBmaG5PTXZSSTJtVGx0TDJlM1daUXBNbzZSeGJsTVBiSEZZNFZoS2xvLytSMGhHUzJsU2txeFNSSUtsaTBVbkUvMG53WmdManlTc0NDK0ZUYWkwY25FNDExY25aK01HVVpuYlQ2REwvTlA1Q2JKbm5BRWlTYjFDbzl0RGg3MnZ2YXIvYXlFb2tMWFQ3Q09kUFVnZHVFY2hWRk1JTUxSblhzaVgyV3gyaExVWmdPVWQ4bWY2SGhPakZOeXJ3dUZEQ3JJNC9WOXYyNGJBRlpobUxpSlRuNURpMVhoRmkyemt0RnM3cXR4ZTJNbjN1MjRlVmlBc3M2S0djc1dka3hsd2Vkb2pWcFhlTjN4anV0WnBpSTAzdmFzTStVSzJvUUxNa3RKNFBKZ2VPc2FxT2xhOVBTakhjWkpuRkNOVWpFb3JlZFMwNTVHT3R1bm9EUU42bVhuV1ppcHp0NXBKb243bTU1eWVTekxuOVoyQTl6UnR6UERENUdMaGZnZVMvR2Y0Z0NldHI3OXdQY3FlWVlNRlJURkJiVDA3WUNFRDl6L3VTWjR5dG4raUpjY2ZBWXJJQVB1anpYS0RUTmxYSFlzUUZMS09scTlDS0oyZlFrMXhVcjQ3ZXFseEhlSEFFU3RueXUxOW5ybVVTZDhpQTYyU1BZVE53dXBKUCtjVzJPczYreWRLMVlxeUJ2VkRUR1E0SklidGNUM2JIZVB1VmtYai9Dc0xVVXgrMzFUTzNxaWs3d2F5K2hwbkRPZmVqUFM2RGE0cUI2OHJrNzM3NWRrcjUrbklwdE9LVHhVc2svMG83ZlNrMzlaTklBRVJnMTVWbkxoN1NhMGtLcEZ4TGx2WEtaVTFvWDZTd29mTmxnK1A4SEJDQ09nYU1DWDFQbjBKblYwLzZtWlpzZ1prazc5a0JVamdVUG40bnQ5MzdKbFRkeEVYc0dNUnk5VlBFdjFFUHJ5QWRSYnJEbmY5MUg1OE1ZQWtKSUpTNjBibEJDb2FxTThQRWNtTjVMQ1hWK3pGWDVVcFJxdzdianFEWG9YT0hqNUc5WTFyRDRIUWl3Mlg5ckNkK2wwbzBvTzhtOGU1b2xqQ1d1WTM5TlArWXMrTExlejhTV0xJdFhsYzArTk5rNngyME5jZzk4VWxFM00rQ3RQQXk1OUV6bk1YWkNnOHpWKzRlWno1Q3hwaWlVMVJRRnN0OG1ialpscnJEbExjWTNxVjlKa3lWenZNV1N6eGZ5SFNmTEVhS2pzRmM3a0dORWppWk9Lcy96MVV4Y0hQN3Rodm0vZUQwT040UlB2QnpnNGhRR05VT3huYUZjRjUvSkVLUXJiNUxFcFpGaHZnNlBxRXRMUTFCOGc5eHNDc1d3UWc5d1ROYWFBbXBKZnM3RGFpajIrSjNKSi80TVJWNlR5UFlVUjVYT0dPeFV3UHhiUHJnb254QmZBMDlWd200ZHh1Qkk1OHVhNk5OUkxkNmxabThSSnY4ekpRZkZCdExGZ3ZmaXg0MzVIUE1XdmYzU016VnNyeEMyNW5hVjEyc0hxNmx5UVpBNTlTd255SDB3RGtQWXdOM3dLM2lDQmVSVzhSYjFDNTJQb1ZObElROStGWmI5Z0RLVmx6aFN1RkU3NU9DRVV5VmRPTGg2bkE3S3QyTXlIQ2Z5UFU1Q2xHblFRMVBJQW00VHBTczBaR29YU0RlQkxtd1FrZitOeDcxNEJYY29rRUZXZ3ZoVTZEN05VSzdwR2FrT3pncTZyck80VFN0dVJUbDIydDJwQnUvMmxpUmMwRkNQODk0MDVRTWtMR1hYMjNEVzN6eVplak90bVJiVnh1Nmo0ZmZlZ0xhcVhINXFLT2xacUt4SXNCZm50RU5GRkwxazRuQjdjdU1taE1UUXNtMWpsZy9RdUZtby9YQW52RjV6dUlINkhURUpjUnlBNXBZN2pDREVhWHU1WU9zejE5Qm1hUVVpRDFmVm01eWdRWTA2dnQ3d0dQV2VDUyt1Rll4cnVJeTNJYXpNSURWY2NJdzk0V2t6eDlUS0IvbUtQc0xtaGxhend5NVhXMExjVU1FT20ydks0SXlCN2N6TUNQOGtVM1JVSEExbGtibFBGV2tpOXVkUWRaYnljVGZvMGFoZHFYQjUwYzdES01TZU9ZRWFOMXNrdlJScW1DT1dQemRmam9BUlF1UHZoVlhYVXFHVCs5dFNBT05QTlVXNE9MWW9Vd1hKdlJWanI2YXlLUEkvbU4yZ0hPNGlRRFdkLzlsSkhDRVRLLzhXd1g2ZzJIOS9PZnBDU2tJVWl1cndsTTlsNmFqOUZ1OTN5d0thVm1RM2Z0NUxJVjB1Z0hiZ1RwMWEwVU5iOTRtakNWUFl6UmRPcGhGbE1uakdJSmIzM0xMcGloTDhVQlgxbUx5OTZBbW96RzRSZVpsMlhrZUdXVStVbmxkVzhMRm8vWmptUjhQNzFucWVHK0xrQmcwd08wMllNdjh2K0NiOVhZWXh0U1NhRmNqKzYwYUpwN25xSGJ0dTliNmFlV3NoL3JCQzhpWllmdEhSMUVzb3JjK05KV2tsRlRwTUZJc2JGMm5iMkZoVDdOTFppTEhQOUVZZ0V5Vk1Eby94dkhzVkt2TkdhZU1Ec043OXdza0hkZTBlL2lzeUlPQjFiUTJMVG1XMHZnalFTMHpKN0czRWVjSWlYUkFRZTJzWWtpM0VjNGdrNit1OU9MdCtTTzM4WEphRzltNTFnMlNEMWNGakZKSUltWjQra01OTzRMc200QlN5QlJLSy9jK0Z6S29mb3dNeGNNQzc0aXdyaEdJSkRRbW16RWx6bXo3T3VvdEo2S3JUeWhFWk8reG9wRGFUZ1I2c1VkQVltN0ZscmZPRFlSZ0dtdkRDOWtNcE90N29SbzloamlxU05kUHFaa0NoQmRiOS82VmtGK2FvdFlEZ2I0b2ZHRW1WVTVMdnVXVkdYaHNDOXlPejBuRVBFQmtIYWZPNERwei80YkZsM2VSR1hzRmJaSXRyUks0NkRnUUkwb2ZOZm83ZjNCeG1hcEsxdmdsQSt2ZlhlV1FBL1VkRGJvcVR0U0hmTlkvTE9panU3RGRna3pSU1Qxc2dXdE5xelc2Sys3SUtLZkxwNzFFMUpYUDh6VWw4VHQxN2JYVmEvOGJLbU9xcTdYLzRFeXBaVm5CbVNSNm5tbkM3SzU5TVNma0ZIK3k1eUpJRzRTYjAxdnpmbjJKMU9mdWVud3F5VjVKK2JOcU1IWHlLWTRObU9MSFhOc0pqRHFzLzhxZXRwQXZpdk0xVCtMdms2VjV4Q0M0SVc2Zk93UnA1MC84QUwrT1F2R3ZJdHJQSEQ2SnZvZGVRNStjaTBHdHRTblAxTnRCYko2a2Rhb2RSZmZWVEE1UDgzZmgzQ3U2MkZuMDhLQkFmc1lpaTM5WDl4QitXdGsvTzNVZmtPcE5aTjRjdXhQbitmNlhOcnBYQVNDZDlRM2lwWWFwSHBzekNWVUhSaWtkTGQ1QWNNdHRyaXJiWEFubzMxbk5rK25ReHpJRld0MlFKbkExc3VSOWpreFo3eHV1TXlTZFEyNHEwV3ZXZFpHS2NZanhQRTcxd0NjcGt1VjVJTE50S2RWRWdXaVAreCszM1lKVVczQjFsc0VncFBEQXZjZklObzcrMVJOcGk5TjBXRG9nR0lLOTlFOUt0UmdDOE9ReWFXdDVBS2xBODJzVFByNXl1R25wV1FaQm81T3FVblhlbVJmSXNqQzFUSmx0ZkVxVTcvVXhaUnNYMU5EVWFNZDRaMDJNZHI5WXEzd3d6NzNWbzJlNWp2bmNnY09aa3NrQ3NLLzV4VWpBcmRSa2xXL09idXgxRVBpQXU5Wi95Y25paFVQWnN1SGU1WlJTYVZlNUNVZTlaVk5JTldiZ3VXRUNGeFlCcHFyMjhOdGhDQjFYMVROMDlUS1M2c2ExOHhSSkVFZXdjam1lQWl0SGlBdUZyZUEwak1jdHFtSUc4YzRrdlhNWlFJc2NUcWliUitpc2JVQ01SdGRFMmpDZiszZ01MdUFnV1ZVY1dVOFV3U0pDV2VFcGNzT2xRS2tNcDBrdzMxYkJOWHEwUE9RY2lEQ1VTWS9aakMvbklQRmcrcGw3REFYUk9lektxTVYvUWRLdzVWTjRPajJ4V2xRV2NtTHVLeUFEVUh1bHhSem01SVFZQzZuVnczRDIvR3djbFRJVjgrSlExSVBWQjJmTnphdExrREgvTzlRRGlQSmhBYXg3YzNibHhzcG5TdldUTWowUnByOTVsVzhValZzODEyc1FBLy9YcFpqUGVXZWRZSlRIcUZ1Z3FzT1l5WXJJY0dBaWs0VU0wNGtGQWttRWFMQ1ZFWHl4TzVxRldXN3pIRmYyeXhHa3RsM3lFOS9PV3ZGdU9RSnI4UlFqWE92bHN4ejVDTDJuOUFUWUpkZlFjejlLdjlNazR4dm9vNFJrUEtQV3dIeHVVb0pEK2JVamk1VGM3a0FwczIyQ1ZuWEtEamxQZ3dBV2swbXFLUmxsTEhkalp3QU1lTlpYOW8yZnAydTFlWCs0V053aTVyUXZQajR3cGF0aXRFOExBb1BMb09POEt1Y3pqMnlsb2dDMlVqS3ZmcGx5U2lGbnVsKzZmam1IRGhlVWpic2ZDL3lTam1CQkpVNVM5ME5vU0pZdzZUQ2ZBZUxXU1ZjZnhLeU9nMmVOUGI1RlJOVUp2UTR2MEgraTdmdEc4S0xZaG55akU4cWd5aGpqcmVCMnR3Wnc0aHB5ZTNIbVp5OHBzNUlrT00wV01qS2NpamdnNjZFMTgrWE9wdjd0U2crcDFsTi94RG9qYmtia0JPaVg4OGVMQjZFUjRoMWZkNXVlWElQQWFCWDRPNlEzQ3drM1BSMlBBU1F1d2p1ZGNaUkdaS2k0cDNnQ2F6dHNVZnpqLzdKREpFbGhWR0NRTlVZbm1aQXVDNnUxTEpqRmRGL0ljRmpxcXJRK2h1cFVwUW9FamQrczRKU3ByNE1sTnoyMTlad0gwVE0yN2RzN2xCcjVMejR4V3I1aXc3aGNReFJDMnNkZFRjZStCSC9ia2svTEtWRUNuSkhKcVlzc2FoRnJ2emM2L2FRNS92NG9YOG8ybmxuNCtpRG1tQXYrOXRDellIc1FwUkhaVTg3N1JFK0hzQU9RbGlLWnFDVHJyTENkRjArN3NhRVVlcE5ubTdFajRCM2lOQ1g4OWNOL1BUZGcwS3dPQzBjQWtndTFubU5jY0xhRUxJbFRtRzJFVW0xdmtjUDVubk1iVGlYdHM1eVhNWTFHRWJiaHJZR3VPYzBFM1dIeENMMFQ5NlVSM2MyZ0xNRG80Y3Y3Q2t1MW4xdFNPNEQ3dWV3aHhZTjZuUVRieFUzNXNqVjNKU0NqODgvck9ZMXRBYi9mNnRMR2NyS2hBRXBBeE5PVlZyYkNBQ3krakhXUG54OGNkVUgzd2trdFJOYkJNYzNJK3MvVG4rRFVSVkQyYm1uelcrT29WZE9kdzlTUFE4dGx3Y2JFMkE1bDFqVndjL1NDbGduY1hYTGhCNS82cnh1ZTAyb2cvYlZ0YWdzeGt4QURnOHdYcEJReEVadjMreGN3dmw0L3lMSGtmN1VhNlpDYlRaQS9aRzN2V094VlpFcElDZzd6SkZIdjR6bHV1RmlXZXNNdDRmVHFwZDhtTzhWaXVPU0pqcVRNOThOaVpXT3pKY0dSNTAxc0dxTllqQnZuS0pOemt0bzdDTURJWDVOeDFoVGJJZDl6UVNuTDZlZDlGY096WnZyZXZMNlBGMkZ3UHJWeGZnTWpETjM1MjNZWlBOT2VpNlppalcvL1JqeC9zWFVOZ0I1OTh1Z3BwY0ozVVVQQnZReVZRUGxHYmJXQVp5OFh2eDNubndDM2RBbXMrazJSMTVGNWs1UmprTWFwRHNNSXZhaHRwZGRLRDBoL3lvZGg3V3RlOWQ4N0RsTHYxZjdGMmI2MTVOMnA2d0VzUjB1ME5NdTVKR2t6NUdoRGU2M0lOVVB3M1V6dU9xcjNqY245c3NmMG5qbUQya3BNb2FlMUdVaHc5ZktZNk4vWVQ5MzY0OWROaTNodVZXTllwK3hGbW5weXdIbmZPWnptRzBuVkF1U2Y5MTV5VHY2bGt1WG02OFB3aGVlOUN0REhOLzRUaWZTQVhtQmRxMXdzYjdYcXIzNmVYL1J5bXlQS0tXMlpNVmJPTUs2TkFVZ3lLVTFzRHhLL0xTMDU5SjFQcENRcy91SFZiZEkvMDBreXRXcDc1Ny9kcGhDVGlQenRCcFNlbWkrT1lBQmdtT1NUVTg5TTR3b2EwYzM5b2NhZUdEV3pGd3dPeTlMb0xTR2QxZDhGRnJVRU5rOEYya3ZqMExUQnltbXlCSk5YMUZBYjJJMmowQVlxVWtKem9BNnFvMVhkajVWdURRb1J4b21PeWJpYThLdjNmakk4RDlyb3Z0WG9jMkJqRm1FWTZvN0dreVZPek5md0llVTdhRDZvbWhzSk03ZXhsaTdtdERkU3ZuY3FQdHFqZUNPZC9rSWhhcWVFVnIxQk9taWQ4d2lRVmh4UmV4SmdQMmFrQWtNSm0yMXRnTk0vSzJyREpDVWR1R0FqN016Nkx4QTNlTjU1NVJrWFlmRGtVY1JQdDlQMTNJK2ZRMmkyTXFlQ0p5SXFvVVlrVm43S3FEOWNKdlZ0WWtZRHh2MEk2cVhVV1dhd0VPUjErMWg5cmlmdmVSQlkvb3JNS2xvQTVFWVhXN0hHYm5raTJualh4a2YydTdmTXpPVU11NGR6Nm8vckNZS09GVDgzVDU1bWxlQjFaS08zSFlhK1Z3d2x2TldaTUdRdThtOHJyMEF5bjc4eGh0Q1IxWXR0UUNxdy9OU2o1ZHM4ZjJrang0MForVDNzZ2trU2N2UEt2Vml4MkFWVm0wbEJlbWh1SnNpQUZyYjYxVVF1UE9OWHlHa0ZWUFVWbFB2dmF0WE1YbVBIR3l4Tkd1NldZd0NBM2pMRWFPMTBiT2lpd2Z4aXZscDRDZEVOUy81RXEvSXN3UkpKRlFjZGltMlJKbzh0OUZyMHRaZXRwcEJYNHVEWXh3UGJGK3V0RXV5QUxHd2VYRXR0M0VmY2dUSHN1OTNuOUdQVEs4TitGaHh0TWM0Y1ptbGhSMW5NMi9sMUFoR1A0Q0FnSURtOVdidlFKdjBWK0Y2NDZZVnJlb3ZFdVR6Mlp6bDFqOFcwbGZHTVlUUW5BWTBpS25semVKUXp0cWJHMXpyTjExcGpVNEtzK080c2tTMEx5UmNTTCtWSWxPcmkyeGxvNjFOTzMraHZNdjVxeVhiSm1WdCtIKyt6SXJpUnRaamhRSVNhTlZ1Y3ZVMHo5S3dZK21MYmNGQ0dxc1J1NVdRWFdyTkZHdlA1L3MyR2x5bEdVc3o5TGM1d3RiUW9aLzJOUHYxbWpLa3p0d050dVVZemV5ZzFScHdVcERSU1hTS0xVZTlxamFsZzlta01xeWVnT1lUeVdPSXFkVFhINkdPOXlrYjI2ZFhMd2UyYWZrUWora01hSGMzVjJRZlBreFJJaEhZTlc5MllrZ1ZHNmoxa0wvektYWGVTalRXVGFhT0tRaG1aY3BTSDFOZzZaK0tscnNMNTRQRmlkVlprUEVBa0JvRUxEdGNyNWRNVFUybnZSb1JLRnBsUmpPYzZyV2x2SUtMV0NMbWxOaHRFMzZmYnpJZFBpb0xjRlo2ajYzdjN1UXd0ZnQxODQ5djJNUU9KT3l0aGtZVTZROE1IYTIxUzgxNTJSYWIzanZhcUZibG90aUpMU3lrSXNYQVRyUVJPeWtUTjRGS1FKb0crczJDeTZuWlBjNnRWT2FIckREY08wcXRGN005YzFwNTFETGRRbjUxWW5Yc1BvR1JOU3ZMWnkxaWhtdnp3U29SU1A0MHlmR1Qxd1plYUR1VnFlK2l3RmdTSldTNnhDNk9rK1hCMjdwazhIcEw3dzNKWUxhaHJwQjhzd0tEc2ppN2pjNDBsSTJhZEZZaG41SUpCZU5CcFZWUHQ0UFQzV1plUjF2a3hMY1U1NVNiMmpIMWU5cENhTjVETkN4dDBaWEdlaGg0R216ZUxHbEdubVpHa2c5MzEvemhjWlBPV3BqWGhLTUdDL1pLcWc3K3o2Y3AxZGwvV3Vpa0QxTVFITGlBU1JsWHVPUFRsTUd2Rjl1cm1pMG5EaTArc0hBUC8wUHJrTk5aU1N1bjZTQThBREpzYXM3VjVkcWNFU1NYYmJWTXZmOHJ2UTNlNnRDN1VoZC8zVmhCNVV2SW5tK1Y4SzFhTEg0dGh3WVpFekJrakVSeC9SSmhCVDRSYjdUbFJ6RmhUSDh0cmN4T2dPK3RMTU80eFhxa0hFbDBTTE8wN3AyRy96cG9XbTVPc1dNdllwV2xuMks2cHdOT3pmOWdYZDFXL0U5d1k0amh3a0dSajhoKzJSdHh5aEtSMDJqK2tweHo2VTRkdHNnMysrTng0Q0w0UncyT3dDMlBtVGM5YjZmVmY4eW1nVFhOWEJHZi9LNVhHVFdYQ3NjZW1odDFaUTAzaGttTVJFNjl6U0xZOWVwTlE4YzBSZnREVHNtMW8wTStIZjhLaS9wMENBWS9CMUtKM0pZcnJkc1lyanlsdGM3bmxhL3U5cXNwZjhXU0E4TzAycjRmV2lxUXg0eVNqVjRJTzB6YUhmMHVqZ0E5NlZ5Wk1WRjUybGNGVU9IcFVmREthQVVkcE1ZaUN1bm9mcGxxR1JqR1JnTHphcTBVempwSFRhTjljZXE2OVVxeU5DTU5Wa0xwUDRBY1o5K1NvNDAvUHZHWnQ5eHp2Z2o0L0U0bFNxNWNvUTZGWEd5QU9scXJ2R1N4dWJDalNGUHRPZy9qREVDR2FOajFackltczhuU3J4NzNqMmZ5VEwvOVJ5QUNDTVpXQklNanVjd0VUeWJYaXZLUm0ySUFFTkh6dGlWenFiN09MSnBlQzlsaHpPL28wMWQ3c0lrRVJYZThPaVR3QmZTZjZNc0FyMzcwd0JvaUVybVltMWZJY0Y0UDJmRnF6dFpyc3BUckN3OGIvbjNVUWZnUFM0N28wc2twcjNNM2tMSTV0VkhjZXZpK3plWGl0bjRjaUFrU1ViMjNrOEFqMllBMnNYb3lmZk5QZndrMVYyeHA5VEsva1ZRbTg4TjV4U2VDdnkxVmtZNFoySUtzS29WeFZTYlMxWUs4ZUFlT1k2WUZVdTY2Rmxua0lRU2Y1eWNkRW9kSjlBZHpkWWQyTVBnL256TTFFZm1FTlg0MjdhSzgwT0pMT0l3QllJWG9QWTBGUWZpbkJya2pvblY2aU5MSVZzYmVrU29NbllzS1YrSVM2S1lhaXptYmg3azhOTnhLTEJ5ODdzQ0NES1p3Z0lEbjhoNW4xQUlnamUvbkNTSjNlZm4wYmhYWXo5Wmp2bkRWdHQ3akh1bFhFSytoVnVSZVdaZmh6TmgwM3oxVm5LMGt6TDgvSktVSnd5MC90ZmFXQjVFSnZZQy9mODFSQ0hnNVU4Y2JwVWlURjdhSDlrMjZ2NGFWK0htNUcxMUZ6TzhZMVhtTXhmYy9aRnlab1RLZmlWZEZCU3lkZUtpSE81OHlDZnVWWXArc2RPc0FTUjlpdUF6ckVTd2dnRlZlL0I0Y3h0N3pmelhjYVlkWXRhN01qLzhyNlppcjVGRXJ0ZTdGZVBncXJUam1ZU1N3QmUxeWFzSEcxdFdoM3dNQkJsMzlQR2RiYXZ1ZXBhYnF1NmpiZ1JzNUlmQURCRm9kRnNFc3Awa1dkYkR0T2RpNTB3cG1JbXZWZDcxNDJZYlBVYmVlMk41Qzc0YU5sU0ZMT0VGZlVVVUpQRk5Gank5RUxNeCtlVXRUejJCZDJrQzhEM0pTR2VrTHBBZUYvMWR3TnhHdDN4dnY1OWM1RmQwbXI5aDF2T29qdTYrNHVBRUJJUDJ1N0s1V0VoZlZ2VCtWVXhqZHdKTHFMbG9ZV3piMGNYMER5NHFmNzBWRzhEcjliMG9UZWZyS0FXK1JSOUp3WEFCKzNDc05SVWVUTFZPdWIxdXduektaSFRzdmJPRmh4T0hPQ1RXS2JNOWttbmFscUREYmxWUWU3SFpISzkrU0tXZHpIL2ZoM0FhUEFEekdCRm0wRnRWdnE1bVZzTXNZT25xN1VWTUpuSWd1NDVBVm1VZ3lOWVA0T3d6cFY3SHU5bUVSSk5Zb0NvZWxhUVZ2Y0tTVExPaE02VUU2RXFDL1IwQ1dFdlJ1M2l6SXRjelhUK25CVUI3TmZtZEJYUElaMjJ2WUpuT3RwUWxmNmlwcmN0SVBlN2xrR29uWitIZWxMVU11UXE0TFp6RzJCZXB6aWRqVGIzME5WTHMzNHpPYXBmVTVRQU1Jbnh5RFhSUDl1LzlHcjBsTHlxNER2QzhwYTd1Rkk1U2thMGZxczlSdnVWZ1EySjUzM2M5RjNOdnY2TmtJVmpCTzVvdU4xNVpPeUk0TG1RcVloMWZ2ZVl4V2cxN2Y3eEExRHl1VXJ2cDNiVythOHBPTjM2aXQ0STFXNjJIQzVidmVSQzZGVGdWeEVDd1hqMTRHSEJLTGNBYVJsejEzMG94anZGeVdXazBvOVg0eHJzRkVxMGF5VHRNWW9NeHpwY1NzdFFiZzU0WlN3REtycDR5Zm1wQVZmTWFXZWFRV1J2dkwwY09mM1l4RmY2TnJwTUhHNlU1TTVaZzl2d04yeklPbzRrRW41SjNzZDZNTWxJM1R3V2Fla1lhZWtXdUpnTTNVZHUxZk16MFhrNmYxQmZodXgyVVFpRHBqc1FleUU0NEgvMjBrVmt2MTJBS2tQZllFS2NwdlRwaXg2OGRtMmxaRU43ZmZaaGxBOCs5U2lrSnNjWThhMFVFSDA3TitadVZGS21vRlBHK0x6dnF1ekE2ZlFzOEtINkM3cklSaGl3ZWN6OWVUR2lWT0gxRkRqMmI1UUVOMUszcjBvTkJybVMrM3NwYmQxSWw0cStNeGl1MmN5SU1UaCtrcEhPVU1OWW5BVjMvT3NtYnJpaDFlckxzUEQ1VEY0NzVqTlFXbnpMZ1dyYThrVkt4eUZIREhOaCtDRU96bVRqaHl4L2RhTnBKZ3RKdjJVZzZKU1RYZDhXZ1FRL3VSODBFSm1KcmVSN3cwdkphWHZ1NDlOSUxjMGpTakkyQ2JkaEljdU5VNXFuL3ZYTHBnUTY4TmVudytjQlN2RDZGbGg1Wnl2am9odVNYb0xBVGdsU25seUJNM3cwclpoQ3F4ajU4TEZraHNWYUluKzAraUdLN0NodXpDMHUyV21zTWc0ZTRqbjBlSEtXc05pMFp0RS83b2NLRTZ0cXVlKy9qOE1QejFJNUxRVWFnelFhOS9IM2g1WXhsQ01kWHFjTjcwMk1TTzV1TEVneFU1cVlBckhEVjBudDZDZzBteWVBRzAxL3A5bmFFSnJZUDJrRFJjd2QzMnA3TldOMW05bnRURVdraTJjYitpU3dxQWNvSUlaR1NJNnEyYk1mVzZ2bXJjanExVGtTK0wyOUFJbkN4NnlLRWpHSnRKRm02SVE1dkc2d1YxeEg0VjdNT0ZzNGZneHpnSmkxTFNGelNyWDVKYTllRkJ2bGlkL2hVRnRQdWRwN3o4YWZ1M2lzOWRWNElZUnQrMnE0NjU0RkdLNlhmY1ZYRHZocC9oL09FTDFLZGVZQjRUNm1uaGJTZjFUbEdoSUk3M1FpdElyMlZwcWdJd1pSU2pPcmRuVTcwYzd5dWgxbzVNS0F6V2t3eWQzNU9lUW0rTC9XVm0vZVAvTFBJUU9pZldWM3o2aWI3S0hXRDRTZnYyK045cEovRDZaQ0Q0UkdJb3ZraWd0RXE5V01aOG9NcldBUjFyWEhKcW9td3NlQjRVRmVoVGVnQkkxTE5kd0JrMUs2MWYvSmZIclVjSit3akR3dVpqVnpkMTZqanN1NjBNRUhyeWx6YUpSMGFZOFM0eDROQjVRUTdhNDU4MnlUMU4rZjFDRk5lSCtpeFNhdnl1VnBlWDcrVmU0TkpMTjZYZGthSmdveTgrRW56MnBBZWdGcEZUVFFUOTU1akxIMi9qUGRiS2JtTFVQekVHcUt0eUZoTEw4WjRvd3gyZFhIcXBhcC9TYXhCQkNyS0VrMkczTWdyMEpDZFdIbVJZRVd3R1V2SWFJRmx2bHdEd01qR29oSjNlelhvazdaZ0N5aS9VQ1hiUklVN0oxbWw5TGo5NHFKbllZK08ra0xBZXl4OTYvTE12OXVpVVY4cWJhS0h4K0VKT2s4T0lBb2lickxiY01zNXZ2T1ZINGRzTnMycWpYYi9LamUrVHk0TEtDZ09rdHVyS2ZqZ00yT1NVREd3RUhueGd0MzlEd0NxNm5RRnR4KythQXJzeTVaZ2VhU1Z0T0UyYklxaVpGY1oyRkdUbUdEc3Z0bm1UTzJpR0Y2d24vM1NrRTFPQUpnVUI3aUthTFNGOThiTURtQ2pZOTVWNGcya0NhVVF3QTJ3WlowNzBkOXBTNlpheHd4QXcrUzJOd0dNejJvYXBFdnhWR3RUb1FHWnF5ek8rUmdvMld6L1l2a3pDMkNTbnZlaEVjU2ZXa1hDZDBGOUxTTHRSQ1lqanB4VHdOcld4Y3Jya3pQZEVCNUoyZnE1Z0VISWNROFhZV2FFWjlaNUtmOTRXaDk2SVpvR251enhKRSs3WitkY3JzR09mOUxWbTRjSlh6ZEdnOU83ZnQ0VlBKTkVXOGpzanFWOHFNbERiUEljSHVMMnhjR25pc2lhUTRwbWsxUUs0b1BnSEYzRkNnRnB3Ui9sUGtwR1pKMzJkSE1BMGVha2pmRm1PaWxyd0tTVjU0ellzMC9GUDI0RXlSUDlUY09aNHQrVVdRNmNtTG8rY0xqSjZNSnBlMjg3YzM0VEpXaXA1RVFtWFBZQUFQamF4TE9sYml4bmUrRHpQSWlTY2IxWllVUnBFbU41Unh6VU50N1pFMzlEWHhTZTBXanJEbHBkNkZKWmRNZjVnZUVnSXJ5NWtEcDBzUHd4Mmx6ZWpZWkgzSk5acTFLS3V6VjQ1SmpsUktncVJoV294Kyt4citKODdycFA4OElPdHJhSW5MeWU4R0pSSk1aSldnUmVGTE5XS2FJQlVRVGpCMUI4Z25NZ0JqNkx0WEwvTVdCN0FzdngyQ2R5VHBCcU5oTlpqWDlMdG82c2FHL0ZPMHdLZytRelhlb3NxTmQxRGIvOWFIMkxHMkZiVzJZK1doRDgzVitPZ3hPUVpVUFphKy84OFZGaVpBVHljODVicVhpVGhIMmRtdDFsT1Vkc2FmSnNoMU1HbUpmT1RHRCtWekg0OUNNK0RVeWF4bDVLWEdWbG1SOXJYcStuamtTRlRnbG1qL2VDRGpSVzN4U2t0NDVmQ2ZUYmMrcnRvWC9DUmNuWkhDRTlVbVEyajdDWTZEM1B1dFhGd3JSSGQrTVdxalFBVjl3N1RwNXpjZktPSDVpeFp6NG9pbFBIY0gzMVdIdHYwelJiL2ZRNW1zSGcxMEZxTzdpbEV0UkNiUGFVN3liZ1krdmxtMGdsWXVWY1JNc040cVVjdGpFa0c1bjFFQi9BL2w1dWF0Y2tIRUJNbUVKWUJWMDBZVDZBRzVtWHphL1RMYTRrWExYWU9IaTRSSThOc3NwQW4xZElraFAxbGVtRW05d21laDBlNUFmNGpUUGYyQm1lalQ0Q3ZvdVdVbE15UlRrRGRoN1NSTm5sKzJMaEJ6bUQ4dE1PNThTVjZKYWhXdVhqNGgrNlUwc0s0RG1WYnhrTFBzamxIRGhRQkc0d1hRQkxjRGpGa21PY1BuUHliTitDQXQzejBGcVlmWGg2SWpDSFVraU9hMTgrcmxyRkt3c0RpOWtacXpRejYzQXB6VU40RHRlQ0R3ZExIcFFZcDVOSDF6T0sxSlZaZDZmbW5kSmQzcThNT3FVWWRsQkpRZUlsSlBRL1hLR2ZIUGdSa0FheUJhN054djRienZHQUJwcXlSZWdiYXVDUGJEdXhYdGQ2STQ4bzh6OHpHYVVIVUFTTmdYdjFhOWZWOGZ4SzR2SGFWcDJZUHlXZFduSW9CejE5TWIwUC9VU0llbFZPL3Fjb1paSmFTVXAya1crZU52Y084bDBnTEdtVjZONlEvRDQzV0h4RjhuMzI2VWZnTjcvN1RRR1A0ZFcvNjB6UnJwaTVGYVFXanhNL0wvTHFPUjJmT0NPWUlrSTdWMjMzY2JOZzdhSHVCbGcyYkVJbGdub3NhckNBQ3RCMVdzODRST3Q2RWxnSCtZN1dJNHNLcCs2WVRGL0t3U3RlRU8waCs3bEtNbWRuRlJoUUtvZGxLRVljNlY3NlRucDdDK0Rjb2E1Y2VFdlM0a2VyY2xvSVczSmlSaEZOeXdKbVZNeCtqZzB0ajhmRHREUWNrL0E0S2ZPcUQrNUVLVU1paVBpQUQzeUpjZDJvZXZDVmNvd0J1TER5K0d1blY4OE1tZUtqSWt4d3JIMTREVzlzMTY1USsxN0ZmZzdXdnRMcVdMU09YS2c4amNIdlM5Q28wZHJ2UjdIWUZGUHk5REI2Q3VwRitYRkdRUERQc0IyMEMwK2t6dEdJVDViYkJ6R0RhMGJTUXNTNE1KNmc3eDVrZlZ6eTNZYWhGa3RyRmtKdUpyRHltNGlkOUNLcDNQWndkM08wdXRndXdmbDVqWXlYZHlxWFdTSW5heWJjamIrNXNaTW9uSmRiV1F0eGJ6eUVTWncwMXQxVXdjZnkrQ2VJa2hzY0tCck1EbElBeVJod3EwVVVTNmdoc2ZhNmE0UHowYU9DNVp1MkNodVNGbDk1RzVsMS9WYTZrN0lIT1FnVUNxYjNpMzR0M2FhZE5WMmhYSlJyWWR6NFh2ajVxQTdtTlJkR3Z2M1pJc3dzU0M1MUt0SE1SdEEyLzh5SkxEMTRiZHlKQWFlZnkwaWpYTUltK1pvTzR6Q3cyUkorZUd4S3IxUmRiMHBob2ZZaFlnWS9CNTZPeXpwcTExbHB6M2orRUs2VGlsNURPR3VKVGxUNEtML0oyMEZKUnlDdmpPZXhWMWUyV0NBQmR6M3NMS1FxWVBaeGJDeE14UjhnckRDajMyZ0ExTVd5S1h3V2RwUVV0OUwvNnh3NGsvTXFacUxSeHEvVkxtN0VEWXY0bjIvSDVUdGJ3YlJ3bldWbjBkd2lpVnB2L0w1bjlHMS9va21yeU9USVpSSmZ4bCtLbHB6blZYTHdhYWF6V2ZYa3FueEwxWVZqRytHR3U5LzZBK201dWdyRVBQQ21CejBaZHdRRVN4WEJKOFNNc3BvQWYyRXdjQ0xYaThZNyszNnVxcG15bUJqQmtabkVKUFB2U1RwWGIwRlhUU21pNzZ2bTBnQ1lPQnNCdS80Uk9YVnNZbWNiR1RTVkxuL1NaOE1BM0hHNkNodkk3Zml2WitSWVlYOUFMVEkvUUYwaXJrVDBFL3pqWVJEekp0S3l1a3RWcjg4ZmUxSmZ6cXFjLzF2V3VubFJFUk9aV2ZvZGZHcDVybXcxOWZ3WWY2OEIwNEMyWG0rd2xiU09oWXV0Y24xK2Jmdy8xbzJsamM2WVgyU1RaSXZEcGhqenZxTzZHZGlQU05YdG5sK090Y2lPUCs0WW5RK3Q3ckEweWhhNm04V2FhWG1BVFVkdmgrSFkvRldjdHBuMlpON010REdyYmlLa09vTGpadFFPdXZhd3l6Lzg5Nm9xY0pNWmZpempabEkyVTJMRityTC9yWHFvYVBIc3lJR1duN0hZRGc4RHBOQVlUWG1kYUdZZk1XTlh1L3JWUkljUWp2eUdnZ2JxL2kreTBPOVdUYnM4c2dzV3Fvc3Nod3lpWkxSeXJQZ3F0cUVvV0drRjVoMktzYm9wUDR2YWZXOXdIaGg4RkpDaGFybVFxL3JxOXhEV0FvcW02Y0VUc3puejBwY21Sai84dUJWeFI5U25HM1I2YW5yYkZteVA3OXlEdnF5eHVHTUMyT0x4RHEybEoyUVdwK1NwN1hWMDBKZUZ6T0JteWZMQkkrWUw2S0VOaElwVFFiZFh4OFFFTUlpVzZMbk5wMWt6VllMWDFNamlEc2tMTm14WnJXWlFxQ1F0UTEyNGUwbVV5WEttRCtQdmo1ZktkQTZvc0gwUThEN3dWdCt6aXU2ZTNFZHlNWTI2dTA0dTVkaVpGT2g5c2pUUy9IYUt1cGNubmdSQ3Z4dEpHL3luVS9hUG5xNnlOSFZjK3VWLzRiTzRGU2xoemhpcnpLRUZqNFVDLytwMzlGNXlmNldTZFI1a2hEdHRYbG9QamZCZjNMd0ZmWVJrL0lQOGdzU0gzb3BmRzczL2RnS1h2cHpCU3lvWktvd3RjcVpFZEdlclJxTnZJYW9FLzZnK2IweS9xbXA5WkhwRCtma1c3ZkRKWm1UVTZKejBzMmY1VzR3bjdPYVpEVGlHU01qTEx2Sk1hZTZqVGUyU0ZhcUNSL3p3TFRVNUtkc2h2TnpiWGxMQ0hGOWsyMVhidTJYMmxCYThqK2VHeFNGMU5qSFJyUEE0bTJIQ2ZSbVo5bzJjd295UmFvM2E3T0lpK3BDRDBsREsyYzkvTkxJZlZYbVVGNlh6eG1hTjVsa0V5emJaOHgzcGZ4MXJWSHZldTBXL21zK09LMEV4VFFEYW94YkwvRFhsVHNnSDBzU2owRDdxL0Z2eTNRYXcrdGxLdzVXV0FYTkNRTEMyRWhvNmM2b3pVY2FXRk02R3JFTzZVd2ZhZmpIaFluK3ZJb2FIS05LVWRDOWRZZnVON1F5b1JMT3JoY1JvajhGZ1NNazJtOXBqL2VYS2tYeWZkTnhiUmdTYVFtSDJXVTBSdW80akVUSEZ2YndRTkdjajFQRHdEM1VrdUYxdnZUMk1ycmEyNUVPSGJZemhQZ1pZRkQrNUlabU81Tk1PeVozZlYvTSt3WVVibmU5SzViNDRJR3FCclJjTHNRb1FLaGRrdTV3SEFpenFOeGhLNnpJZk82d0srNzAyYmlPajM4VFBzOHNpMm5kcG4wOHo0S0xmS0xMTHdtNm9GN01BUi9iS0NGamc2QUdjc3hGVjJ1amtKMlZ1RXVZUkRiYXAvUmtRTnIvZkpqb3BUcCtEVEVYV2pNMHAvVHIvN2ZmRFBUTmkzNFRLS25HUmN4QU1rbWtRSmxvRHNMRktzN1ZmVjJjTGNXZ0xZYllSQmxZZDB4c3BWaWwvbUhzSGhPWGZuMWVnRHRITkI2T2g4aGV6c0FqU0VLU0VyeUExTlFjenJDYm1hU3M5U0pmWVczU2tHelF6NHJSSkxoMkRDYUNrc3g4YmIxc2JtbzlFN1h2aFc3aHJ3S2RWbmJCd0JNS284NzFFNWZ0d1htcE1xNGRpVmRaSEEyekZJa3AxdkJZMEZ0TjVOWENoUWlkY1Bja0ZYWGhtdmhWdyt5N3V6M3lQNExNUU1xREkzejltajBiS3ZJdFFKVVpvM0RzaUIrdTVxSnpHNTd3c3pIR3JpR0ltV2VINVc0bThmNFgwSDZCMEtZbWFNeWx1ZnpjTUMvbUtzRDhjV2xKb1RISXd4elpONFRhUDU5dHNaSHRGZ2F0TjhYdDVpZUV3M2NDUnpJZHdwcUpUT0lMejYxRlNaL1A5S2RyWnFyWi9vRVppU3dKMXdBMUJ1eE4yRWZvOVI4M3ZjU2Y1czhnbzRZTGpWbXBqWVlKaDhJc1Z2UWQrb2VGcHoyenhLN3I5aGpTVUhhcXFEazhkcEZqaUxubHBsQzl3VWtIUTI0clN2VGtpOS9HUDNkcUx2YkFVUjNhclVHUzBaTU1iZ3ErSFlUSUJKTnVZd3NzUi9EN1gvRzcwNDc2TStqQlNONC80Z2lvcnhWUUtJaVBVNVlyMkE5UUxqYkwzNnpJSDlUcGdHM25NMDFiMUxxZEY0RXU4WTREZVpTUDBXTk5YTGpreGw1dmZVNklNVmNseXFiby9zdFF4aVRnNkQ2QktjUFA2VFdpek5lWFk0UG1Ia0MzL2xpT3ozWHA1RmtLNzdSOVFhNk1yUkJpSHNSdzN5TGkzQVBZdlAyZ0JVeW9iRmFkOGtzK0doOFF6MngyK2dybk4yK0JzMEJTR2J5V3A1TEdQOTRiQjZVQm5EUENsTmY1WG0xUmNLeENxTzVZYjJVNkRpTXhkRHU0OUsyQXFGTkpCTDNTR096a3UzeERVT0d0bXpxMTNrbmd1YVk0RVBudXFhcXd6ZUt1a0lBSldlYlBMNUI0cTNtdFJTa1pzUk1hQXFUaEpUY3N2c3hyMTE2ZFJ6L1U4Zyt2SmxSN0x5ZEthNldEdVNNOXJoNWEzV3M2bXRaZ3NXdjB0SlQweENscE5idnpNV2FHZlJLUFRUamZOU1FTdnQ4dHFBa29raWRYUDJrblkvbHh2Q3Q2R2Zkenp0OUUvUGxqVCtRVm5ETW96ZnhNL0tTU2dlMDdwZnErU1pBR0JBUjFoWUJ5Qk11R2N2RHp4VDA3NXBoUS83cXRVaWZlVE9HTXBXVitBZE5xczZ1REt1YnRkUytTL1puODZsM1JXVXdmUlhZWFZ5NWsvcUhHOWF5WUtWbEVEckw3SzVUeEl3L3p6bUE5elNJbENyVG9tK0puMlJpUzNIdTFneXl5SUMzMVU2UlFBWDI0cG5keDdFaU0zaTJVRWxKVFpUenMwWS9uekp0R2ViM3ZvaUN6d0ZxTlZXUWhTa0NQT2ZDNXd5ZC9xY3BoajJkK0dodkxBTGVmQmNnMGdKVVFrbVc0WGVBVlZlcDhqTWxmSFB2WVU0ZS9VNjhxNmpiZnJKL0NVNk5heHp4R0tnemovWWpWbHM3VmhWVm1hQVluVjIrb1FPQ1JFUHJLaktLdURWZ2NLdStKK08wa25rMkZnTytrbHA2VVdnTEIzaWl4UU1ZTVVUa0l3Uld2amZMNUpkVWc2V0V0cGlPVEl2MGVIYm1tcEtab0RrLzFDNmMwa3JITTZTcmdzZklLUXZaNXdsUGszV3dwRTBWMzAraEhLRkQ5WUYvSjFYVTdHRlpCYlNiTFZiekxTT1NxaVoxTXlSWTdiaUQ1QUtFbEU2c3dIa3dHOEV3R2JSTWhqQnZ5RjJKcHM2TFd0cm1vQUJDbGE0U3hUMSs1ZVBxQ0h1bUc2andpMEIwMHNlOE5ZWjc1c2RTWXlIZ01BWVB0SGRUUDRiMFltNzNFQzgyajNPZm81NEZOU3kyTzFWYWRNN2JxYzZJeTFUWFJRdU5WNm1VcWl5djZ3S3N4ZDVSaCtlQVJpRWpkNUFvUkNEY1dvZkpOVGlZQnZUMnFITnBNd0IzZ2l1UTlUdHRvUVVaL0ttS2JrR2VETFJKL1RrdDNqMTJIUnNzK3Q3WUxXTC95NHh1RElzRmwvcllMcFhKREFQQUpZc1c5UTZidXNiWDQvS1gzSldvcGtXbFV5a2VDQmZIeHBmeVZ3d3oxU054czRDT2hEbFRLNmgxSUJoVVJFZ2IwZkxPbHJ4dDg0bkF5Z3p5ZmZqR0JuU0JUWmZiWE42RU5OalUrb2xDbmRtOEx2S2Via0lhMUc4R3dKQWdBSHcrUS8zUVIxazZPSXpRUzdzcUN1SVU4K2wwWGFLQjcvS2dGc2lDT3JzMnpXektyaGtGemhubUs5SVprSzE3eEcxdHJWZnpPcjlZak9CZTgzd1R3SndRT2RET0orMW1KaHQ1S2k3STRaRnVUd01qYjlxMFRvcW0xMzBtTWlkUnY4YjNYbFBWV1Z1SXBaQVNvdjAzVFNxL2M2UkxtUk0wdk5YZWcrQkdQSUtabWxvTDRTdlRXUUVtSGFwNHB3bmRuKy9XOWd4c1R5MXRzeVY1NE9wazNTU2JIQ3VXckdpbytHaElNRTFHVjdRR1hCZEhJR2dxOTRoSlpJWTJpS2tsUzRoU25pSzJ2WnlOcEFGbHJqU0JXZnE5ZzA3ZUtYdWtUOVp5U01pdS9rRHVCQ2poV0RTSEp4QjFJSjN6N05vbmo3Nmd6Y3lXbVM4YXNRZTZLellPZUxESkM1QVVhKytvUUhnK2lCV0tCb0pWRFd6WnFGSnJ4Z2FHSjI5a2tOd2VJWVFVTWhoUGFwdU5HSkpWNDN4dEFaY3l5ejV2ZEpCL3BDVFhJMklkS1pjM1FWdG9KRUZ0SkpMK3NmQTJTWk0yL0lNTkRKZ0ZhamtTWXNmbkFiTlFJeHMrODl1QXRKUVNKV1dFMDNVVkxoN2hLUWhiRHBqMlRUQngwK3k4RXVJZjFrSThqamhkSWw0MFpqMVVSWTUzMjhlTk91UFRoNEtKWlV0ZU5oYjhVem9CZ29PWGNNN0dJOWJNNDdtMU9yVnNuOTY5SVRnTUlMQWZodW9iZFdTY242eGR6RDFPSGZob0JKMlozNHlTWS9peXZIVlFaS0VqenR4YVlVdHFJaEh5Z29BODh5Vy9EOVpHaXZsMDJrZWN6OU4xSC90NndvOENtQ2UwVXg3TVl2NW5ScmlsdHNhcnZoWFA5aXdaL2lSaDk1QXRPajRZNjl4ZXJGWE5aTjlVdUU4VEQvUnBaRllXc0t3cXk4cHp1Z3NyaWVFQlpXTmh3RDB3RFE2TUhyT3N0M1Yxd2phbjkyZzJSUVJjdHY0SXlsbkhZSC9hRnJZNk9iZTdvY0dtMjFIYmYyQVhjSnZrRE0rU2k1bkZxM3BZbXpzcXI4Q2N2cDU2NHB0ajhRTkg3cGl0S1Q3NTgrMzhpakQwOGtCeCtnVHZnK1plU2o3dm0xUGZsZTJ3TURKZlBWYVE4M1JQWWI0SXhrWmRrMWZSazVKaXEwVmcrZzNydHJJR2pxcS9YWVFCZU54Wks3WE1PK2NPYjVjSVRudWkzWHV6OUEwdUtWTkkzODJTekVUdmRMeEo2MVJLVVQ0aWxZemRWUitGaGZGak9hS0lVUERpNjBsbWVCcGJ3Rk8zbHBMbFIyZTFWY1JNemNiOElWK1BsNVV1ZlhBaFcrSW82eTM3SExKQVBFb2d4cHZ0MEFWc1FpYkZ3VHE3QTJJN2pzMXZMVmRrS2Rtd0JrMjVGem9zYk1KYk1LcFUzTHJ2eFJMZmpWM2gvRkc3VFRFTXNReW5JcVJRdEJsdHBsSERVUTNkbTVLNHdoK3BxZ0pGV3FsNWZzOStSZ1VFS0duMFZhMU9GVzFvWjhmMGhXRmVkNzkyVGJUdDViZWp4amc5ejRoeGgrVkwvRVpYdHZ3QXl2a1htTld3dzNMNXhHV3BTTHlaT2c1OEJmY0RDUld1cG1KUE4vckFZSE5yNDhqdzZDUFp0TlJ4aDhBTTB2Mzg4ajBZUVdVcURpb2tuYnRNdG9wV1pVeWNpOXl0a1c2cUdwaXhkeDVEU2p4QUptdk1HSnJxM080K2hNOHRra1cxSXZoME1yWkFWSTUwT2NVQUx0b0JKa1FvVGtNeHFyZlAzNVRGMVJsNG96NS9sN0dKOWY1cHhOVlZXdVJLaUdTVkpTdGRKa3lxN1VEbkJwUytiK3czekdBVTNCRWlheDdLMVpLRVY3MHV3d0xKeThWQTlPUTZ1dGxaclJ3WEdJcGZSZTN5VmVJSEJjVmtIVmVwQnhIL3BaTHRUeHRhbUM5TThZUFQ4cng1Tkc2MURlVTBCdzdmam15VDYzUjVrdHQ2STR6Tk1MWmdPSHZsWVk5UTdhOS9Cekc5QktOWTJUV1g2M1ZEd0lZTGIvVFQrMDB2N1VVZEpiMHlYQi8vVXVSeElTQ3FYWklsV0l1RUxFZzdpck5PcWRUUGJETUtYS21nbDBXOHUwL3FqQTBMaWJ5UlJhNm4zM1VBaTBYYTRueHJuUElZd2dJN2FadWF0UkhqOGtxMXF0WW00ZnVXV1hDWHlOekNGamtITlpNRzBPNmdjM2R4S3RCK01SRDdRelJvT2pKOUtOckxzN0d4SUVydDBKQ05kbHlBVWkzYlQzZ2RudWFJdzM1eU5DUWd3YXNqdGlwWk0xWkNXbEliOE1lMVFTaTJ6T1hockh2OXVCREh5S3VEV3NpRGV3OU9ONEMwTlJJQ2NCR1NYK0hid2srUW8yOW9sS2VIN3gzYWpCT3pGSWZ5L1Y2M2x3S3RxNkQxUElrc1pMK0orak9HaGZCTlJlQmdnVlcvRkRLYkpxUXhVazdQaHExL3k4Zk9zV3J3amY1eTdoSmtYbzRMQW41bWlTOTBsOU1rbDZCbklBUHNIOU5wVUg1UThxVVFvdTB0OWdQaUZqVHlxNTd6aTY0TlBKR1ZiLzRCTk9laVFZaFNxWWpJNXd0S2xSUHhQM3NkYkpWNHNucUJCc3lmUEJDd21uUHp2amtacWc5UkNFUmFCdk9GbzFjTmF4T0FTV2wxajFGb25VWTk2N0o3em5GMGtTL1I3RUVNdng2c1JGajBnbkNUQWFRNkFpVm1pWFV0VXNBcUVkM2tnejRzUFI2SWpVZnJOMnl3bWlEN0tMaHN2Mkp4Mm1nQmRvZHJCVXBMZjg5ZklnMXBaN1p0T0VpbGJsUVRmQVg2aTlpbk5tMlQwRzQ4UEJUOEJjVzRzK2lrTHArTUJ4NC9BcXpXNFRrbzNPdWdhRmsrVGpxWDBwanRxR3JVRUUvdHZsdFRWVlVDUlppejllZS9FNWgrdkdHMTZJSFVFRUI0UWhnYU41aHJ2THVSK2F5a3ZzQnQrOEg1d0hrd0dsVXJab2YxMWdpdm5kWUFFYVNlV1NoNXU1Nnp6U0dLU295RnNjV2hYcHNDcDcvSDF0U2pOakZHWWNXS3Npdm50QTFqMzFyTEliSlFxcGRqWUwwNloxU3ZpeWRJKzhhZHpidlVnR2krMVlOcnB5NXRKN0NzOEFiNEdWcndsdHFQNXpPS0tHZldJNUhXTnRZRnN4R1RaQzNnNlJnZHIrSmVlRDJnNmc4eGFkQ2RQOHkvSHoyTlJXY1NrRnlWZ1BRMWpkRDJJLzlhYk5OanowRmlWQkUwTncvTCsxb0FlWnVYSG1xR3dlU1QwdXpCUXplb0N3VmREWTVRR011QlRjQXJENWx5VlZ1UWZqZGhLL3draksyYTI2U1BMeWI4Q1pMZVA1ejVYaWNxQ0ZyeUQzbktiMG91MTQyWTFQeTBBVVQ2WEF3V1VscWFuZ0lpRytQZW41T1FNNWdaVG00ZERCbDY3ejBJR093WXlXcHdXV3E2ZVNsMGFvZzQ4Y2g1Mk85QmliT2dwbmVWTU93Z0pYQUZOSEJLbWF2aFJzeWM4b3EzWThXZGNIUHQ2OGZSWW1aNHpoWjZHbGhtTFdLSXArNGY2SWVrL3VCSWRCYkhxSWJLa3NIcFFtL25MTVo4SE85bmdyN0VaTThEWjZnaUFKSjcxVGY3RGtEQkxDYkxXSGpYdWRoZGF1bTJ5ZlJVU2RFeHpJUWU4UUNjamZRRkFjOHF3OTFUSFhacVp2eUluNngzWmRmdkkydUZDcDJiUVRCSVZ1MDdsdTJZU0FLb0FyY0F4R1A3RU5DaDZscndSbmRqKzN1b3pMOVQ3VjdOZDRWSTJINmpVMHh3cEtoNlgrYWdOelRpbHdPWEtEZDBIeVlJQTV3dkliNUxPek9jayt3cmZ6WU5FQmwxYWQrUmJaa1hVMWp2ejNKVHEwSVJ1dEtRMTdmNEswMEQzZWppNHdpTlVwcjFrMmh2YVdhQkFkMnB6VGJLckkrN1BTN3hyK1o3UGd6cDJ5QnM5anJtOE0rL29hbGxrdkViNldXWEJVSjFlZTZGS044Z1B3bG9LaWc0T3lVenFxYmpOWEdyamFSR2ZtZmk3ZEdNeWY5NkVCYXRaY1greVE4bmpwOVJZemo5bmVlTEN1QjVJbWJ0bi9FZDBnbXhFVzg1elMvN1RrdENoNWwwQXl3U1pJS084VlpER1JFUU9TNng1WDdnbUlIWllNWmEwSnF5c05WV0E1WGo4SlBzYzV5MEgrd3RYNjZUdnluY3pzZGV2dVZERmsrdFBvcHI4Szd6NmNkd1JiOU9Ldmc0Q3BFaXRNR0FWU3d2TTVhbWdsaEpnZTdRdmVHRzNTZmgzMHpBcWhXV1F1bkNXcDVnZURGZGE2RUdtdUFIZG5LNThxZ2ZWcUJMWURrY2srNU5TMUpKQ3BocDhZMEdjUUVPbGh2WU4vTHo1R0ZBS1lPQ3NlRmNzbng2anQ2OUIwSXpKblVBWDVIZzR1RTZsWHpydXB1Y2xGWG1HRnVIWTBDZnRJTVAzQ1VMa3lkTG04bDF2M0oxVUNFdlIwMThhSklHZys0L3hHM1ZtWW1ERWtjTFdvQ0NCTUdZZDNaVmlpQUZJK0wveDdiRjBnWGdLeUkycm9DTnVpM3pZcFd1ZUIwb01rRkE4TmFZWmxpTnpXMzcrZE9qUnlGVHJsQUQyYnplTm5FNzFnRS94YkQycC9zZVlES0ZnTE1Ea2FKOTZUM2NCQ0dWeVovcXlmNVIxenpHZ2FTU0YxSU1NU2JVR01jK3pNUVBWa0V4MFJIeVVHMlltSDJzd1RNZmJtbmZ2dkZjMnhoRTA3eWtPQ3RrV2hpQm5GSVBpVVVCNW8wdjVCVEQ5M3dtTS8zVGEwYUtKcThEbitFQ0FUekgyekhma25aKzN6ck9hWG9XM2hqaVpVWUM2UXA4ak9rNUptM2JNUmIzUTcwWG96S0VmRGVmUGV3ZzhSVUN6TFZmTXhoZFppUkdvSlcxRU1GcHhORzMvYTcwQmUvTGgxL3dlb3RxNDN0bEYvZjRqUmpsb1E1SkpmWHFSWDhheWRyZmtoZzE1ZWdrQmxaeU00cmNaSkxjMmNibnhUeXdJTkNqa0hjVkZ2YTV5eHhJbVptcXBqSy9FKzVpbFBZaitvZk5Oazd2Tk95ai9uU1BtQVVPbHk4dGF1RGJ5dEFXUXNNU3VRNGxtNGpJUUlmTmh4b0VHTFlLd01UMFgycWk4a2drZUZxUG5YTHhoRlFvb250Q3hleU9zRVR2cFNJNE9MeGtselY5VzhhNEpuMnZ1Ni82ZzVTNHoycXRTNzRaL1ExOHVpdW42YzFLTGtwb2hyV1dYWnNqd1hnWFhHcFVJdkZNWnowQlNoOVZKRHRyNkVHSkdJSStsOVYrMzVEUXpTdElRbVVsdFZybGtHRnFKNC8vcDJFdWxFU1VnVlpDK0lpbmdTT1JaZGs1U1ZJemE3a2hMbEIxWUpNaGFaMUY1THFxMEYzZmhPOFZ6SzFYWXN6bUVkSjhZNlJXalExMDBFZlZ3U0JIRmtKUzlnM3JSdm5BajJiMjlyU09LM0k0eWNOSGVuQWowbXFLVDczRkExN1EybDB6ZFpJd2daQ0ErNDVqc2E2ZzdUemZGSE1Zc0hKdThkaDdkemd4cHpCUis3YlhWZGsyOUFZL0lQVVJGZXlPTkQweFpaTWx0VllOR1p4Yk9CZXNFUHB2ZmVUN3Jna3R3KzVnamp0Zkp4TlRsN2lKaWZXVTRwVENiZ2dmY0M0cW9oV0FYOUNleFgwWU4zbUFVK1NJdDJPa2NLREkzSGpSbnVPTWdaTWg2eDIyUEdvQmtIaVgzaGtvaUFkNlg4aTV6WVRDTGFXdndWMWhsNjM3TFJkdnRqSHVYKyt3Mkx3UDlUekRORFBYRFpmOHdWOTBLUjA5VUY3b2FZN2dzaGY5MzdkSnVPMnI0UENRL3h0S3BjL1NyKzVHNDIwcEFzQW83T0RkQmRDOWhIWGhWRWU5U3lHTWVwb2lqUE5hRlRrQTdPaUV6RzJOb09xNUE3WHpyb0FHbXhUait0N25qOElKdERoT2h2dmFiSHVQd1Q3aythL1pleFVMZTFlRWRPNzFjeldDRTROS2RpUVVjTm5NSjVEdDhtNit1MzV1UmRKcDJZUDF2UlZZT0JVcGpBUVFDa2tHc0xYUmFQNTdHNlNmY1dtSEVpREZjS0RuOXpvZlVvdHB2SDVtU2E0Z1B0akhneTNhakd3WGwyS0t3b0xIbTRCTFJJL0VtcEl6ankvYW4yZkticHJHb1BhMi84dytHMFBWZ1BXdjNraVN4UTB0NHBMMEpnZU05anU3bzRoZnMzRC8wc243TkQrU3kzdUdvQm9adGlZWlBmdFBPRGZabTJwQ2pLQ3ZhaEtTTWxJOUdtMTltQ3NNQVpNdCtOaFVZZWhxYWRGUkY4OUhvV0tHeXNqcmNjV3oyMFZvdWFJdGpsOFdEK3o3ZTNReEx5SVhwM2NiNFFBa1k1WkdtZk94d3FiL1RaN0VrNnFxQVRpb1l2cjkvaGpTd3djcjZtNmgyOXYrenloK2ZCTEhqLzhDOVJJalBIK3pBdDJWc2pabW41bTJjYlZPQlJTTUVUVldLbkRhN0IzaGNKWDF5dXRLTUJrTk9GN3dMVFZVTitxd3NjS20rVlY4U25xWG1LTDM3OW81Y1hRT0Y5NzFWSUp2OVRlR29tL2xWcXpQNk4xVWVJK0dyUm1XL3RaOEJUeDlZOWVML0JTdk1CUlJoNXVJdk5UTFNUTTg1aHBzZ0dkNEM3Tm5lNVlQLzYxbXJpOTdOVnZLMWUvVXFUdXJNdlVRemZZZ09GcGJ3TGFqdDBYMkdGN2dJNTRySUYraVBOdHlqQlcyRDlQQ2ZUSEJSN3E0L0tpVysrNHpjZDBJSUR3SFhCaHpKVE1tcnNPQ29qVGNVcVRZVWxuZGV5YVdVbUt1bFdRb2Z5Qk1HRko5SzZUbUpkZTkvK0FUSG90MVZ4U2hVcDRuRmtOK3NBMnZ0NjhheEpNa1BYbk9JM0lUeGhGT2RQaVFLUGpCaEg1d0R5bkxnN2N2dVRaMHJyUG9NTkZHcGg5VHlhakpWQ29nZ3RadjJXN3F5MjhSMEFhemhYaHJmbGh2aVBzeEdqV2ZYU0xBU1hzbDNVNkZmbTA0NGVKc0wwZDFROG50ZzZKNWpkWFB2RFpxMG9jZEo5L1VOM0FpeHNjcnVidzMyRkFMV0pZUDNudE5BR09tZGxmdlc0YmZ0cWl3aUJtRXJsT09wS09VQXNJTndBNGMzZERuRldKQzhXNkJYdmtBV3JXb0JITW1yU1o3V1FZVDU5cW5BcE12Sm9lYm96ZUJ5L1ZVRVgwcmg4MlFYNHgydEU1R0UrTkE4WHh3UFdnNHE3SjFzZnl0Zk92S0l5ZXd0UzZiVitrNXNvMGdTV0paaTV1WjZ1bUs3NWtLOFJJUTVJU0c5SzlYKzJxZVQvam5QenpyczNjWUtnOG4ySUl6MHplRndWSU9PcFVaUDl5cEFqTEZFbTVOQ3lUSXczckphQlNISC8yU0dRbTZsOStoRlp1b2JHTnpGYStzV2NLdG1jL1ZhN3Z2WFVUdnhYeDJ1a0pVMm1mRWRlWCtzVHdCdWZGWmRxQ0w5K0Y1QW83a1h4cWI2Ymsya3cyLzFjUlFaVlhJaDJ4d3hEam5iUm1Ua05FQ2NMTEtrd09vaEM4UEd5eE91ZGlRZkVwR3lhNG1aeG5NWi9JZTZmc0dKeHk4RDI3OFVYSE9ab2RDSzNpbUd1eExUWXZJODB1eXNmNGJhcnBiR1BqU3lDeGxscFZWdzdlYmpoNmk1MFp3SlJFM3lnZ01zL1hiV1Z3ZVdybXMxcXlyNURJSTVkTWk4WnF6ZHRtTzJEamQ4UFEvV0ErNDBXWDNoQ1hYeG1ZdUlUWTZESmVaL28wNjRWZEc2dTRtRkdxSGpsZzgvRFFKZm0xbkF3a2NCMWxZS1ZpZUFkRWNTdVJYd1NDQ29IODhvOGdUTndOL0ZQUnF4bXhUOTgyaU5BNWJvZmlnbmdoTHZlbDBGMDBjZFVEUGZBSGtKNEVBU2JvV0FYMkN4VnRkWlJya0JVNWdqcGkySmtWbjdzUE5kYk1FRkdzd0N5T3VXWTYxS3hiMEVQaVpLdmg1bmY0QzlKSHNlOHJjbndYeGNkQVBPb0E2OER3UmZCVUJ6bHd0N0dyUXg5RUhWMGNrcnhmVDc5bTBoVkJxZXRjNVluRGg1VzRGOHA1RkYvMHI1eEpOajBudXFEcU5EWjBCRDFmMGp1MEFsMkdjMGJxQzlqZTBTZ25rek9kQ0d3cUpWV0FhS2Zrc0NXZDFIT3pJVU9xTDNKSGN4a1hyeDdoRVR3cXJUSCsvZ3JLdCtwaHhJN2lESTJCdFRiU2ViekJpRmoxV1hXTEZWMHJkendEbzlvVEZrVmtpN3FpU2ttK3RrL0M4YWNXazkwd1BWSEJLVTdkRHc4WXVCQ0JBL2JpYUx4UDE1VkEvcncxSTZ0aEZ1eTJDeU50TkpzYTNWWklrdC9sb3NIVmM3dmN1bWxDSTBScUJEYStVSXRPa01oaWVVMTcvM1RSOFJBYjhXWStuNmRkZlhjazFraldtZmpDVkJYblpXQzMrZDUvSERyWE05c29mZFhQSzNXWDd3WXp0bVNWMnNTa2lvYmtyNndWVUhMdU9OSys2VEpFWFZVYzJaanpuQlYxZTJjTHNHMWxsalYxdFRRMGMvWS9JSGc2a2t5VDZOdEswSC9qTTh1bW1WcE04bU1IUmtIYzJabnBLNlhFWk1ldnpXTnE0T25RUEkydmNDRFlEQVRZdFVNam1OWGw5cjIvN0NiQzhUanZBSlVacTQwcm5zQnFRdDNzMDErVVhlajdEUm5qbCt4bjFFOGt5NU5Za0V5OUNLdWg4VDNmQ2JqUFduUHJ2ZEFJU1N2OG5DdjNHcWRWMmNhTkpCL21XYlJRNTVIbG83TDlyaWQ2UDU0VEpMUFN5K3dydUdpVmJHZURCbE0wSDg5OHhQYW9GNkdjVjRGWUpjeGw1Q0RrUUhuMVlveW4xYkZhTGRjNnhwUUpaS2tZZy9oTCtIcy9pbFFFYXU3V2lCRXkzaGNuZWJGckJjZHA3UnVEWlZEUHFLZzFFamkvL0hkT0tsYW0rV0ZWMmVhZXdiTkI2WVpvWjlPdDA1eVFGK0xXTU0wMVFGTVUvQ3dINVJjT2hWR2d4OXl2dkpiWllKTU9HN3dhV1RFdklqTWpQcXFZeVM5T1lWbUoweEJ5T2VaUCt5TFhPN1ZhOHNwSTR1TW0zTm1CdytIVXovWDYxQVFBZmxyMkhabkJSblcwVFZRaHdZSDdRcVZ6d0tya0JNWm02d25DRy9idU4xb2dJendROW0rSXQvNDBmekp5aVlSazNJSWU5SVYzWVpqV0wrc29vb0svVWNycUR0dDhtdEUydzFoaGJpTjNqWHQzV0RVMExCQTBqUWZSTE96WlpnTDVYaWlPanhRdHpjT1VQVkpxNzlZZDhMVmFEdmNySjIvZkozSmRSa2NRWDhUZjI5bUpVZjV2ZEJOYUVCWFZTcUtTYmlZWjN3aytIbzUyMmdvNFg5TjdEMkN6WGlxSElLK1BMYXgxODdjQUtGeDk5S3VjNlJEMjFkQ2hFbW42WXlvblUvOVROU2tzV2hmYVJZTm5keWVhL2VYcnR0bjhvbjRrY0VJNGFnbnhiY1ZYNEZkS0VlTzZ2cUdFZDVmdWIyMkdjcHpuaHYxWm1CRjJoZ3d0UFRObEFEY3AxcEhyQlB5ZXhVY3hIYUQvZGUvZTEvSVNpc1RYRCtNK0xGcE5kYktSUlBuSlhqSmp3REQ2N2FmOThmTTlGZGEyZlI2c2ZQRWtrM3RQZ1UzVEZ3eGpsRmZPc3JUckhSVFlGVktyMW1kOHlmUlg2dmJjc0RSYmRjRDM1YUVFSlMydzlabGdXb212TmdwakpKWWFqZmZ2MHpCcXAycGVsT1NIQUIreDE0cTR6Z2IwMFZ1Y21kRXRyQUp6TC82LzlRbWtIa1JSMVY5dzVQbjFsZFVOUGFyejcrV0lMYkdBRkpuc3JESUI5bThrbzNlVDNTaEFtZjVMd2RjZjB2TTI2bGpnT0JtTnA5Y09IRVM3VGViZEtodU5KWTh4eEw4b2tWSzF0Umt6NFE2WmNjYWx1eUJ2cnhHUHQrSTdEU0o1amorK3I1eVlvSHNYeFpxMC9wZkJjMlYzNngrQlphTGRLQ0VrY2hFVDdXL2VJWDFTbG1jbkUrYXB0NUxFYTRhR1BnbzlsQXJEZTl0Q29TcG9sVDBBWHJRVTRXZFNRdm8vNmlycm9TbWlkek1qWkF4Qnk0dG16YkVTM01zSTVZNmUrdGlzK1A4Y2wzQVcxWi81NEVSY2ZkSFRwZnY1c1k2L1MxR1pTZVZseGh3YllJQ01KbUdRWENjbWw4aXRvdTQ5VnlRYjE5b2MvRE8raFFUNWVnODZuL3FlczVMVkhtMDhtdUpTQ291azEwT1JJRDdET2dmZ3FERDNXNVllcjhXMmkvcDdpMnlOUG5vekk0S3hQU1lkamhXSFB3VUxMeFZXWHlqS2h1WXVrR0IweEpkc1VVcVh4YkEvQnB5b0hmckpxaytpN0JzVWl3T0pwODBUMmlUeDdBM293T2JlNXE2dWhRWFFnc3RzVkpCME5tMlh0K2JQTlowdGdYaDc3aW1nMkxTQTZnbTZQMjlGeFVuRWxLQjNaTGwreElWTTVTNUJFZDh2WlRVZWlKSjIvMHgyc0c5V2Rrc0V5TDVaaEc2N1ZvcUdKd3hxOW1nOTNVMFNNWGtmakkxVk1qeXM3dXR2UEt2d1dCVlI2MXhQUnNUb3hMNVNKdjlRN1BoMnlvSzVwcEoxWHpwcUNwZmEwbVREZ0g4QjNTNzR4MVg3ZzdqNlRwRTZ1RU82cjIwTXJsZ2ZEdVFpVG5DaEgrSHlQYkkyM0dHVkMvQ202eEo3bVFLZ0MxWW9vVnVGYmtJdi9MZW9GbHMwT3ZLbDE1bi9EL0JBaEtPT0JSWElJaENrOEpOV21iUVIyQmVJcGF5SkhhRGw2UHcyZ3Z0YnV4YitjdDRJanVSMFhWUXZ0L3gxV1h2YjJrcDVQcHV0bVJ0WmsyaERBOHRsQ3oyZTJqNHNOR2paUjlaT1lZY2FuOWtyWEZaZHlZcTVHTE03WnF3WHo3UlBZRTdsU2JiKzZBUkVIdFZIR3pFWHo0eDFaam5laXdKVHBLSHhwQ1Q4NWVEN0xSLzFjZlpwTEhHWStZaUcxQzk2amc0N3NxZ21rc3lPZHE3NFpDOGZGVjhNSkFhbnc4UHlUOUJoUW5YWU5IMmVlbVB5am52M3FWRWxncnFsUTdNWFppdlpIQlhiNnloWHRkdkJsVzd1bGtNS0VMbFAxTzFtdjFvL09MYkJUN01kQTBYMk51cmE3amNGU2EwOG5WVEprK3ZudXpsdmdsVklzYWRTMHlLUVdaNGZNZTRYSnpxWnVoTnQrNHltQVZBbkl0Uk81U3dMck5XYzdZSjFmdVA1b1hRUGpSVmxGQkhMRHYwbU9zZDVKektqMTlBQW9UcnpxR3JNSmlBdkVtL3BQdkt0WlNyc1k0dXI0bkU1eDJuNGxlUnl1Y1VrbmVvQmp1YnYzVHBBY0RrS0NSTDR5YTRJdStwWFgxRjRZOVB6aTU2NzRjQmZ5UkRCZU1IQ3BOWVRsUldPb2FBWElGcE5HQlBDcnY3QnpVSWRadDB6UGdYWmFVeFhMTTdQQXBKVXcyUW9aa2JtNWtTcDBYY2JCMUZUK2JkL1lRUUdDUVdCZUtQMkpwcThDb1lheUpFVytWd3FKczZyanl4OWdIWW5YYlVKeG9INVIzU0E2SUpnZVAzSng2MVhoWGxiUFY5NnVHbWZkaDBLQnl5QkZ0MkNEMTJMRURIWWo4L2xpZzV0Zk1IaENBamNNYWNob0pqaXVhRFkySVZsblFXZHVDbmxyMmpmcnQzSVl1TGNtRTNQRHFBRndpVHoxQmt6d05RbDd3WFRQdWI3aWtqc3JxdVFmOUg4OUJIUHFmOUdFSk5Kc0FpVEZZajRTMllYUjlQVW13MDFwQ1pOWE42OXdQZitUa3R5RmhKQm80YjBQVm94THpURnJvdFQxR3pVN3l4M2pEOVpSSng2TTVBY3JXVnFWWkJJUHYwWUFxRG5kb2daRmtGTGdLV3lkM1BRMkJEU2ttUk81am9KK2svVFlBTy93OVh1VFllNmJYSW1vbGllZkxDQk9SenB4eXlvV3lZd1Uwby9aLzdPbWgySEV4SVFyRGtXc2htL1VPTDlnK2hmelRSc2JwNTlIbDNPaExraEdqNW5FRnRFSFhXcUJHNVdhVzc1MmRGQno4UWw2WFZJUFZLY29MYUxNTXIwV0dQb21yVStPRE1sU24xOE9ubE9keWZhUmZtV2tlTEJwZEZhcGpHVFZ5M2U3azNGMkdiM1dSdVlTbWVMeGRYM2g5ai9jcWJlS1c5bHpma3RLVHBXdDZqbFlCZ1M5YnBCWGg3cWNBSU9vVmhwbjFEYS9QdnkvYXVjM0NGMEZ1MEluM0VDdlRCelRZMmwyUnZaWWs4cGw2VnFaclV0R2djRDhVL2xtTytsVDgxcDB4V20vS0dOeWI2THVpK2RHZDFaaVZkNGtQdHJoUkNZckpkUGVGVnVaMDR3TFFsVlhrMTZzTHNyK1ZnL29DckdZLytCVFR0bkJvRURKNXV2WWZ0SGw5VnBhZGwvem9UamlUdmYvUVpUcnV4TGlxNnhqVmpnTzZuSFJxemttSGhBYktZRlc3SGtxY3A3WVZQM2d6ckNySi9PQWt2K1FuRTBVYmpwZFFxcUd1bHJiM2dhT2JXM1RxZWJFNVNKTEVESHczanNDbVdOdFNQQVhXVDhtZGlIWjdyOXF1NE5VL0ZRTnFUTEoxOW9LdGVsL3kxM2RkMGRZakQyRms0YTlmVE1KZVhhazlwYk8wSXVwV1NGSG83U0c1SVV2VmVBWnRPR2RvNXMrVTIzWWJSKzRZOUI0d3NSSzIraDJjRTg0QmducnZQMDh4RkgreDdlVUtFS0paZHhDcjdNckVwZ2xHTUE0eU8wWU95NGo1RjFjS1RpM2I2eTFQU3hqanB2OWkrVDBlakhuR3FlbFFMMW51ZU50MnlmdmFYc3NTbVprNEpvZkd3WStNTEcxejQvTHhyejBMMGd6MlNrd21hUm8wVS96RWVzdkxneU5nWUhCMUdaUU92RW5McXVUb0xYT0FVV3ZqaUxLMGp0TnZTMzkzdmNSY3J0OEowUjZ3UEE0bFFrMzBZVmZQQnZSOWZQeWFIanpmRGgvbS9YbS93dTZMWEdDSk16QThZN0E1VmVXakk3c2N5d0M4MGJSREpPSnpMMTVaaU02Q1QrK3BzNWhucFI5bXc0cFBmWEtwVFJQNTc0a2wyU2M0OThHaUo5c2w4dmdBL1owK2ZiODlOYlhBbkhOZS9KbmZGUVZOaUlSREY1ODFJc2RjMTYvWFRDOFhvV0pmOGRUMU1vV0M4OGh0OWhzZ0h6dnM3K0Y2Z0tvOGU3ZUlwS1VoUmZUUlJnUml5VzhzSk54cG1YVTYyWnJGdjJ4YjJWdVNaSU9nVFJVbmEya21xcFZRZGREbS9DS3poV0MrMWF0V1Q0RjNRSWxQT0hvR0padDR3UzJIUUpjK3ZJbVZRKzE3allGNE0xdmhNOFNUdTd1Z3hmUFFjYWRMUDhrQmtKNUhFeEpWeGtad1NUUDdobm1ldFBQbktlaVJ5RGRudi9IZGM2QUpWZXFFc2pZNFJxT1p6S0FLajJqY2E5YjB4b3locEtwRXE1emhEaUM5bTRJSitFQk14dHdrVXk3cmR3RzhBUFFZWFpmVFgyR3F4R2s0cEJ0Zm1IaGNTMXAva3E5cUZuWXA3MlpWMk1LSW5Mekp3MmlRVTJXWkQ2dVF5ZzlXREROVTFLc1pkMHFhTyt3djh3U0VHSGhWUnVrWldXZnN2diszNEFlbkRzWldLYmQvWWdRMEVFTGhFV2MycUNiWm4wTGhlLys0UUNYL1FEMU5sdERUZXhuc1UySXpnMEsxQjFWSmpmQVpzYnJFWjJZQnMvdGdNcjlyaUZMd2h4NTQvK0xWNHpDODhZYWF6eEh6WTZQalY4RDBZdzArV0xwUEJXYmFMbWVnYXoxRWVIZ3ViYkhpNDAvWGdiakR0dUhBSFpmaG9nQU43OWpTd1RZNnNITytBcE92cUtDT2c2TGd0NXJmTloyOGptUmJJVTJxbTNod0pIai9WaEdOL3FWMFNVbTRFeEN3ZkVLSWgzTGttelBDVmxiMmJFRnBnc3NPdG9EUVU5cU1CWnFrdmFtN2JVS3hmL2RSak0yZ0xUeVhPK2w2OXYvenBLUXQrT25GK1BLU0NwcUNWZi9xMzBPRkJVOTJWZEI1a2JwcVpwalpZS0E4Q1NLY2JXWVRxNE1xaGh0YVNJMCt3Q0ZoWUVJbklWRWV4RHhQTnk5TFdJMEExZVBlSy9oSm1IblVtS3JIV05WVmFRWkJWTlg3c3h3VnNEL2VZNEM0Mm5TWi9rRW1qNE5XT1lJZzJVMVRXZHMrYXZ2VG5Tb011WkpRbU4vM1Y3MzRxdVdvWTZtVXIrOVlNWWdNK0gxNmhlMEtQSWpObU83TDBwT0VjTWRXWm9jSnRNMUc3SXNWa1BGMCtkZjFkak1yZnd5MXVINENEUXZpTkFKWmE2UVo4U1YrYzhnV0xNME1VZFRXZ2hRYzhNckRsOE5ZV2lGQ3VxNzEyMWF3OGJaWmdGdldTZXpmeFQ5aHhpc25KblFzWHVKQm1TRnNsL0VZb0N2ZG11K3NkSHNhSHVnNy9CWFpHWG1wRXNuUUtnUTFtd2h0bHM3TUZIRllMOUhkWVluS1RocStyeCtpRFl6NFNSeU5RVWVZYkdNbENKS0ljdDByaGhWaEJJNW1DaVBzd0N4Zjk3YXkydWI2TzlCMVJzbVh3U1FYK1JCMUZ4d1NONXp2YWRWQUVESnhzSnVZZWh2dXJUSzIva0YweHQra0ZJbVh2UHQvNlFMaFdUNDUwSGxGemV3VjFJVEdDQlkwMVIvRW0vWGFpclBrR2dVZnBtdFpwWWZDdldxbzhrSDd2Ym5tQTdsTVdUZTZjaXA4VE9HQzFWVVpFNGtwdWtDbm1EU05JYlRnbkdSS0M1VVNXNlJMM0NQV25sRFd5cTJuRlNrUFkzTGJGKzU2dzlWMGV2TkRiZkRYRjIvMkoyT2crdGU5MDlIQ3JJUzdreHFPWVc5S2VDWmptZWdsMFBqVnE0Z044UjZpYnI3L3Vqdnd5M0RCSlZMVVFyeitxZWFucHZDRTNJNFdOc3pzSFl4WlZjZDdZc1hQTUc1RjY4b0pjSU0wcWo1S0o4TXZjVGU4bG53UVpiVTlOdkxpTlh4b3JKbGxaQXBxaVFCeHYyKzFvVEZwOWtMUEFOMGNTZ0lLREJCZmd1L3hiY21FUTR3S1d6QU9qMi9Zb1JtYzhTVVppLzR0WG03ZW1OMWpINGV2bGVmLzVpcFRMU0w1Y0M2Yk9qRk8zeXBMSGNqaStBOEVjTDhSZ1ExMk9aMjlEWElHM2htcDNWcjF4QlB3WUZPdGY2NWpVelcycjFSc0pMTzV1ME9ubVNKVXhnajhxZ1drUndXNWI3enNsWGJoazllWE1Kb3VyT1BRU04xZ3hTaTJGSFBkcDViS1FoWDJkVmZUaGxkaExOSjdWUEJIUDJpUityeHljZXN4cGZpcFo4WDFWNmJUSEZVSzUyNHJ2YjJXQ2xhK2p3WDlEYjFHM0NsNWFYZXpSNTFqSUwzYU9QVGFPZFZmOS9SVjhPMHcxS3JLSElIVDIyM2IwK2JxcGFWNHpJSVJiS3pUOWpzOGo1ZnB3ejRaZlh0bGFYUjFGODBFdTUwT3hZcU1ocW9rOFQvanJWZ0tveTVrMWhqakwza3Z6aHpCZThBVk11NHgyVm9kQm9sYzFZVzlETzgySURXNUlHSkJLd2tQQTZmMDBLQldBS2I5UGlwZDltYkV2aFZvVy80b0JFWGlEYTNKTkkzOTgwSDFvaVgxbXEyclFIUXJCYmZaWVMvTVdiNk53cGhuTHo5Qld1TEpBVFhiV3ZDeEtXZmRrVDVWYUFPOHVWRVZtQkYxQlJJYmRBTk5wN2Flc2Z6UnpuT2J1RkJGYUsxRWlzNTM0TlFhRDI2WlExZ05jNmI4K3ZlaXpGWTMxckNyTGRacWxwZHA5bWFKRUN0UnlrU3ZZRlM1SHZLT1RzNkFLQjBsRGtTeDhwMkd2M1kvWlhHUzJaZEtqTkp1S3VnajRQYlNNdXJBMDBYVG50Zk1yRG5Lc2dJNGpyZnd3aGdnMEpZeG10bkFFUjFoUFR6U1pUVUkzMmQ0MGw4T0d6c3FRaVpFcDNNL3hydXNQRkNzMHFUdzZMSmdyRXU1cW9mbUhSTTFBNk9WWkZ6MmdNYVBFekdIZ3NSV0I5NkJ1ZEQ4TGhrK1FuemI5UzhoMGZyQWkzN3NRaWtEcm0wWjBpSWJmalpNQmkvaDF5YlZhMjJOYklZSzA1SW5pU1BCU2hmWi9KMUZyYU8xMy9YU3BhSXFrNTBYZWY4YTBHWHZxQ2tjbW1VcTVmUm9LSzRudXh1dzEzTktRZUFnWlNtQjh6VWNSWGRTa1FHYllJWmtkTzVhNUVBeGtwV0FnRTFHQzkxWHdlTk8yRVdYS0tUSGpkY0JJV092d2paMnZQU2FVVkF5V2tpaUdab0xvQUR2b3ozbjRXTm1FaVdEMkw3SktmSXZIRDB6NWtJZ2JhalhHYm0xeXpzQmY3WWwvNEV2MnpuZ3VGcUZTWjIrbmtsTXN3Wnk3bVB0aklXN1pJSENtQVVqRTNhUkRzNVgvRnFJZ1laRjFZZXBaVmtBc0VweElNR1JLZURZSWV6VWZCQWx1ZkNMWFdsZ3c4eThQZi93SzRZL2dmdC9sODJsZUtad2ZOMUZQTlVpUlJPSVFuYWpJZVlmcFFSSjhUL3ROZTJucUVjaEY1aVhLdjZHcTB3RFRpeUhZSTZBRUZGa0dnMldOaWRjUXlNUHBNdVZYSzEzcENwWDZ0WXYxQXZOcmtmVjRwMXhhNTNQQ2prbVpkU29GeUdUYU1jbnRCVmtHS2hrNURjODBuWVlERWRUbHlUZnRxK2Z3b3FIZ1FhRXlaUFE3M0VGay8wWmF2c0NOTU4wM25PU1VlZng1bzI2SGtTYnllM29EQ2JIdm9Va3NISUI3U3VjWnVGWktjclNTeDNKV2VBckF5Mkk4K3ZUMFBMdVNMVTdiYm82RmtneHd4WjlyTFZoYmkrb1ZQVTZPdU56cm1ITGI5TkkxUnd5VVVhcmhPalBjeFF5SkthQ3piV2dHdlZGR05KN0RicDhkMGo2Y1paZURqQjM0SDVtSjI4bVA3U0FKeEozYXQwR3NRRVJCZUMvMTZjTGg1VWhpc2lZU1NiVmp5ZFNtTUFtNFlZbjdVSktzL0tLeFVTMDVIV2pkemt0RG5nbzN0ZkRSRFh3bEwyZmorbXhwbi9CbnlxcGdYZTE3NkNTWDVhbS9uT0FyVWQ0aXpEQlRVaURuU2Q1d0N4R1dLU1htVjU3T2x6dWROeTkvSWc3L3Q4TXUvTGh2ZWdoSE42TisxblB4bUcxUmpHOFRIVUF3a0lHTmZNNW1XT0tsWCtON1BLall3bHVkTGdmeGxMTThWYnp4STBDWko4aWU2TFY4ZEZMT244OE8vVDkxN25JN2d6U3ZVNzVkQUo4Z0RkOXVoMTlDWG1BR2d5L2RoTGlKTktXS1F1ZllLek91UmVvZmxuU1R6aXh1eGxHdGlXRmQ2NCt1NGxkNk9VV2o2d1FyY3BncFBCVDVJUi9qVTJja1RBOHBQYXBiYWVHZVZsVUxjV3dOMWpDaDVucHFONFdJR3dabWYzRGZzOFVCNHFPMnhsV3FlWUl1OGEyUUoyZDNXdzdKYldaOWNta2xMUUxiQVdETEkrcjVIZjlSQk5IT2h0NFplSkkrVUl1MDl4UnR2NmJJT0I5L2pIUkdOVHlhcDdXZVBBOE1zMVRTem9Dck8wUW43ZzBxQ3IwRWI4M1lrR3lxK0pJTkg4TjZnZzgyamZqUDNJdnpTUHltbHpXSEl1RVVMMU13d3VsRmowakw3NHZOK1hxbkY2OWllUHBFS2dUQVE1MUh6RVRoNHZvUWxMc3hvYXhpSXhRMGFQWlJVbDJGNFNMNFd3eFNhc296RjhpSENaNkx5TjBZNklNU01IckYvaEk2QXdRdG50NnJwTDJJLzRHeXJNVkRvMzRiNnZ0OHdjc0l1eUUvVFFTbnVOd0U1UWNjbEtYNmR3SjlFNldIanFGUWVwZzl5U1NhanZEUTh1WHRFb0haUktRMGMwNWNuL3Z4bzRjUFZ4eDJaOUExeW9GM0lRZDRFeUtpTXFmSUtzZGdPbmlTVjlvOEwzOGF6MG5qMFVRZ05aS2lScTZtT2tEeXVxMW1OQ3EzQ2x5K1BYdnU4WGhJUksxb3VMR2IyZGRwTEUxanVUL3Azb1VMRWNDZklUb01oTHBxRVhOY0x6VytCK1V2aDIwUUhhV0g5ajIxM3RiTzFBQXA1WU9vcFpUVUFvaVNvU2hFSkIzVnNWTHRHaUd3OVludmcxQ3N5NnZoRytuWllma3FRdEVTYWN1ZmUvdk56aVNnd3hwSjRjQWZ5VzhrcGJBVkltRGdqY1kvSkx0dXorbysxbW5iTkRxeStTY2xzWlNOUEZmSEJKRkl2eGtvTFVaMDlUckRqZExzb0lTTCtxbjUzL1J1bnNTOXM4aHo4UG91SWozcExlRXFlRC8wcWZsSWt0Ny9VcW53ZEd5dGhFVmhzeGVyVFZHWkNyWjBDa3VGdERHYTBkUDZMWFlGYTdNbEVZVUlMdUdLUWYycmN0b0laMHN0RkpHUkluQWZVUjJOMW9PeDBZaVZ0NXdibldObHJHU1o5QmJEUHZOUm5iUFFqTExyMDYwcStMOHg2VDlUZSsyUFZWc1JMZHc0cjM0TkVHYVVGRGFCRFpFL3BNUnBBMXQyODNQZ2JOdWJTMC84SjdpTEl5VmRYVVhMYm05NDNVMWtwUFpOREhLN0tPc0RGd0xTVkx6S01FSUE0N3ZlejNDdFZneldNaVNhN2RlTUY0aXgwaHpjaklGbVI0UHRLR2IxeGlhN0lCSTFFMFliQVVkU2NMTmtDQWx0NGxueVptQ2NzbG1BdkdqMVJ3ejBQMjdtekFnb25lR2Jvb2h1RkRqRlVHNFZGTFNxYk1zeFE1bzFmRGhmdnl4WHloYWlwZUFsU1paT1JicElZWE4xczZ0ZXFKY2kwZnU3aTlZUGJMOG1zcFEyaXZ0eUNyYTkrelZENWVPc1VCaEc2S0FyTHpzdjk1bEtPYWhadks2bkVuQ1NhTFNxSG12WkJNUzgvc3crWWRMQVVWbkZZRVFBSmxXR3JmcDF3QlQwYytINlZmZnlUNW5sQndkUDZSQ0ptaVVMdUNLNVFnakhXdWorZWx2V1R3QUcra2VqM3RmVnRuSWlOMUViQW1lTGpJOUppK203Ui9hYWhsenJndVJkNGJ6bHdXTklqZHFTb3NUaTR3Wk80ViswZGNOUVVyM0sxMG5IOXdqMURBci9qVnpYKzVjUGF5OG56cDFMOVl2bjZMb1Jpd2hFVUY1eXBsYi9HR3QyR3prYWJ2VmhBZlVuZHk0bUc3VXlkaExQU252MnVlK2xvcUZHeW12dE5vYTVCd1ZVdk9hMUVkaTJZZCtGYkRmQWhqOVJhSUNITjcrTEplR0Q0YXJ1dUJiT3lYM3pSSjg3RkJsOU9HeXB3VDlaRzBYQkpjbTJBYjY4ekJacTJnR0xkenM4QjNDY3BVcW41QllyTlZHMU5nOE5lL2ovVEs0bDhabW51MWdWRjljbHBCdnpzN3hNbXBYY3hIcmJwSHNEcTFzRGl2VFQrZXJpNndmR2RLMkpoQkpwL1JaRmxSWGlBNVRGUGtpSDI4SERmK0kreHNwbkJUa3NiSDhLdWhHV1ByYmlOSXhUbkFtQ05XWXNjdG8rM1dsNzQxdzY1TWZrTnByOHpoZGY3NjVrUHZSMWx6UUxJVXZCQkxsWmM2TXRXQkphTE1ESDh1NWxZYm9RWkVxTzZPVG5oT3NVeUJydU1MY2pkR2lxL3VLQ3ZWSGlRbVNuQ0l0MFZKSzZueVFHRmhBTkduamc5dWdUZ3NhVXVGSUw3V0RVbk1qaC9IcHc0eklDQWdJQ0FnSUNBOHYyL1JVZnQrbTIxOVFWKzM3Yzc5bjNOWDdTci9oOW54ZmI5ampnZWkzMjlnTjl2Y1E1ZnQrbEkvYjlXRG42Zy8yMzdaUDh6N1VyOVNoMzJmWlQzMi9ZZDRIcGY4TzBDKzN1cGNOOVgwQUY5WDBmR3ZuRDMxZlh6ZnMrd3EvVVRmN2ZyUjc2dnEwMTlYVjNmVjJRQTlBQldvZGVMRFc2OHdURUlYMnhZVjc2dWtsbUdnUWJOK3JTOGlKL0xwWmhoZVBaTFk2dVZHWG12VlZiRmg3dzdPNVU2bi9FWVZuMlRQRUxTQ1hPSkxuN2l4dllxdGtZRUZMT3NkNnVab1Mwd09mbDNnZFJCTFc1MUo5SFUwaGVMb3AzZ3hudGtmRXB0bmdpVnVneWkrMUkrdXVRTyt4aUV3NDloZjdOekxaOEJaUDc4NWxMY090d2FvWk5IOC92eDhjL09qampOZXBUU1lqT3o3TTIvbFVoTlJhQlVsUFp5VWJFVllVd0FiTFVMMGt6N2s2bVJVVzkxQWVvMjkybU02SVNHM0N1S3V0ckhhSDVCZXAxWExSZks2NURjVVdPRVVYVUtIdVVSOUlobDRTRUdzVFFDdlRjV0dETzNpajRaeHo1NW1mMGJNTW5lWWxNaFRqeGtPQWpydzNVdVk1M1Q3bzNXcWFQNnpWd20vWGdXaVZQTzJDc2ljWm1TSXc0eWRoVTFmeTNsdDVTRWVwWDhMVHBLSzhNWEs2ZzU3VUxQeXlyUHFCcTRQUUpYa21LdHJZRVE4WXF5bCtqUXBTN2IyV0l3S2J0ci8weG94SHBvZ1k3RnpKOGVGWjhwYm1IaUdBVENZMGliSkxwaC8zdStuN3FyVkdwU3FOclFSdmlUbWEySVpMUDg2YlZUeTdHazBsRzlGQWJKc29xeHJ2OGpLZmNjSXpBTlAwMGx3TTZ4aFJveWJ6R200b1I1T3JIbDVtdlc5MjVvdEJZbnFLVVhhWHZmYXdvSmRYeXo4NS9TT3JFb09WNlhpMm5ETXYwSk45eTFkUUtaczRYdm5sbHV5TVFHbnVTN0d4T2g0djhFRUZlVnltWmM4c3J5dXdISVc1SHhnaFU4bStxSENHN3pmdWRwd21ZVjlZMFErZDlham85T1JNQklybzl4blV3eXAzbHlrQnZwZ3pNWGpBVkhORGlCYS9wTGJKUlM0dCtpUDlGVWI1a241QWFNTG01dnAxODFDR0J0ZjR0VTN0RWtpSWl4WmlDT0l6WTBacW9nSzRDYXhuVGYvZmNoOC9UYmtYTHNUNnVhMnQ4MUR4L1ZSUzdYcHJrWUZMRGpzKzRHdUwvSGE5SzZ0cG1qcDExemhDSGttTFRSempIZStMMnlQM1U1MWhDelladi9mSUNHT0RFdWlOTk9jY2lXRTlnZjBIV0VZTDR1UUhuM2E4V2FzVUF4MDVFS2hmN1BnTjA4Q2FCLzNCZHlsZzF0VW1LNWpIWnRDTnlPeTBiSFRNT1NTaGJnSWJKTUFJL2s2aXRTUmxKeUJZMUhsQ1VnUzQ3QmlyZHd6MlpnQnRYaEY2NzlIcUc1V21MNnZtMEVpd3ZWNkwzbXVVdi9Xdm9WMTljRnQwb3RObDhTSU5KbjJBTmRFWVdMRVlzUzdQajdXc1BqdEhqR2RUbmNEWUt2T0dWS0xuV1NoUTNOV3hJVFJlNEVqYXNFMytPS3BpZHQ5eUdVYzF6Qzc0LzFYdjhBNHlMMFJ6cmRBSmFOSFZFbk9BOWZ1dEdGOHdTcGpjMHdpVm1GdHFxd3Y3SG81Y2VGRjRJTllrUmpSTEpobDNJc3UrMDlCSkhja3dEbmlsaHZNdFZ0bWJxTklsamhHazhUZGwrNVZNSEFIaVcyZTBPNnN6eE1tSm5wMGROOW4weWxRVG52Q3VXbit6RFAybmdwUTJxMk55elJxZHF3UFFET09VdDUxZDdnUGc3dGQ1bHNJSEIvK2puVnppbC84Z0hFcnRTclhJTVZBK1UzTHk3V01nN0YzajNLa2FCWCthREdNY2x2V0h5cUpNNlVVK0t4Wi9KTWpNT2k4T3JXdTBMVENiMTJ3S3hLajZPZm1RU21TZFFwRmp1YzdPY3AyblBkUDFwaWVEdTRUMWRKZTh2Z0F5M1BFSHlHY0N3TXg0UUtBWnF6SkovZDFHVXo5TnVtV0RBN2o5UHBWSit6Wk5VbXJxWTF2K05VdHRrdFlFZ1RUZGJadnRzRHB0OG4zdmtnMDBMRkpMa0Z2Ukx0c3RoR2RJMGw3SXFaRFZNM1dZa1VPVG05cDFabVhtQTdrY0ZmanJtb1dVcm9QL01NejErbmw3K1JjWWRnMC9XNWdQY2w0bzN1cGx5aGNhQ1ZrTFZBTnVzazZWM3hLek1WY1dOclI1WHBjODZBMTBodU5zZldmdzBLRlZxQUZwalFzVUI3RFlySE9jY1RWWldKRmZhbENRTVloQzBaU0tEZ2ZFVis5U0RGN0NlTTJtTE5xZ1NpdlZ3cEIzbmdjVGlnS1IrZ2paT05OejRRdEhOSCtMRlBhRU1TQzQ4c0lYSVRKV2p5SVVlMkNCRnFMZjcrQm9ROWo3Qjg1RkEvZHhvTlR4b1l1dWJEQ0pxckdNTmdLMnpmc2NzVUExT3MwVjUzd01HVCtOUnZ2NHBsQjQvc3FOd0FYcWdTQlBWZGNqZURudWw1a3hUYVhDOWJiVDMvVXE3RlBVVUJCdGh4SkdPcVFMaWFGUlBhaHZPc1NFcEtMVUhsSWxQT1ZQbWZxZExaUXhjNkl6VzlwdTVEWFRpQzhZQkVUTU1XR1JLK0J5cXkrdlU0QTJkU0VhaUVXd2RqREZ3ZnhUOURwZWxGaUw4M0hNNUFNRG1LRkQ1Y2VjWVFjTmIzdzdSNVczOWhETlNqU21JamJqUVBpVHdaQUZRNmIvRGhoNXc3bUl3MlkrNTVkbjRMU2JhZkZxZFQ2Mlp0RjBDNHVIdlRlcHpQUnRqNFVpSmNWcnNMam1ndzJRYk03NXNvSW9SNFpOcktlZkw4R0ZKQVcyb3pWeDM4K1JJMzdsVmdNNldjTEgvbkhqODQwVVgyU3VEUEZrVEh0N2p3cjJheFUvMDFWblpseFdvRGU4KzVEMEE4UndLc2RQNGY1NEUyM2taK0xGMWNrT2UyNTFJZWFVYTF5b2tvOGVWUlp4MG1rSUVZejJzNWVoQjQwSG9oSEE4emlDNGNVZmJwMkJYVEpCTkRLYVBpVmk2OXNHZkQxcktuQ1c5clR6cUFQVGJFekF3Yll6SjRmMU1rNm1MMDBJQnZoSmFCMUZJQXFpazBNMnFqY2RydGNHeUdLSnhtUkdSRzJNR0RLamZqTEZnWVA0ZVgwN0FtK21PNFVUMXo4MSt0aFJBd3ArMmM4QTFFaW1uOTdQWUVRa1dUL09VV3BwWnpNQ2JHL2MxRmZhMHZhczZYUzdiRDI3SWNRd2lMVldROVZHdFNxWmRUTVlFSDlINVBRZnEvRVJ6Qlo3YVhaOUpuN0pjMTBJOEtzdVg5RTRMUTFkaWpsNG83eXNMTWFMOUtqYVRnWnZWM1daNVFzTkZxUzZIb3c0NDlVMDRmZWZuVWxWREFUTmI3eGtLcFJZUC9SYnUyNzFsTWEyRzErNHhjUkh5WTMrRDZidGxSMThmVEZiOWJvd1djYS9hbWlmVEJlWEJiQ2NDL3pDUUpVLzZ5Ym9peGhGcTZBUWlhTEJxN1E2NEJ3KzFOczZDU0FJRWp0U3lRN1EyK2FnOE1CeDFJMVhuUENDamxTRWYvUExIOXFNYmlGVi9JWDRKY3RLK3dIMVhpcStUdDFnR3o0U01kUnRoMVpzRnBQdFF2UjlJT1F5bWJ3c0hJN3pramNtZDA2QWNrNldITzRmc3RjRW9vQUNQT0JEc2RKVlpLYzhGM3QzbUhRUlZ3RldLRnBmcjZuVmNQNDNsRzA2ZUh3QTlpSENnTFNSRGo2SmE0QWFzOXpScDF0Tm1VcmVQakFzcmpXRkRmcGEwOU14UzJYS1BqK1lZWFlOTkNXVm1RaDdCUk9FdldscU1ObHArTXVONEM2YkZZYklXR2FGMjRxWXJ2ZURnVEp2dGluaVJtQ0N6WFV4WFlwYXZJTzQxUXIrekJsdys4MjhWaTV4L3BsYmhWeEZ2a3ZVNmswS2RtN2h3WVJzRlZ0S3BlNFlXVTlKMUVicTZZdVhwQlRnNUdaV2taWk5TeWxiQy9PMG42SjEyR3V4Tkwyc3A4N24zdWZHVnVQVThBTkhlUWFhSzFjKzkyZ00xWTc4MW9oZjBCaThvS3RpNS9CWFBqbWlES3d1U0RxclVxVU5mUkRtRU1NblczY0YwN2FrbWVzNHQ0V1QvaGFSQ0tRWnFqV3BXM0R1Ly9PV2tBQ3pHUHhydkRpZlp5YjEzcUFHS0ZvVWNVT3hYWHlEcUNZN1JSN1pZZjZrRVAwdnlRZmxQdDhoYTJKa2N5Rzl1QnVOWkd2d3A3ckRpeTg3S0pKR0RGdjRldHFhbGlDV3lKeHVUN0sySG4vQUlucjdwb3hUU0JCY1c5SlE5dHp2WlRvZXg5bUs4dVhaOTU2TmZRNG5iZjNkRHZUNCtydUpaMjFKUjNmdmUyMWRSQUt0aEEweGhkMnRmdVYxY1Q4QWs4Z3hRUmFEZE5XVCsxaUw2WTcyaGYzU3dWd241UXhIK01ja0h0RkkvcWtYSGxIYzJrbm1KeEZ0bkt0Tms3NmF2a1hyckJzMEw3d28wdE9ON2dQVGRMZU9pSnJ2UGx2RWllV2thRk1VVzNsa21veW1RVC9saG1NeURnYndHYU0xaVJyZGxHM1E2dTRaVnM0ak93NXB3QmZSdXZZRnJlTkEvYm43cFU5Q3p4SE5YZkFzejU2MnBLUlNHekNiOGlVN3JZa2NOQUtUSXNHWnRveTlVRHJNWFhRZ2RRSEt6VG9nUUdYT1BYamovd2szSXhFK0lGdkFnYU5JcENqT3R0ZVJlOUhsVkJMcUhWT0R0cm13N2lWRlFhK2t4Tnl4dVE5T3dPTW1IU2VKc1d5OW05RFh4MmNvejB3MG9iMkp2WEtnTkd2UzRnd3pvQVNJbTBsMWtFQ0c0Y25GUU1LQkxBYmtwaXhWV21DQzBSYkEzYzg3ZTllWnZxTzVxOUlTYitXclF3TW42VEZmdkVlejl4aTdNazBIQ2QxS2dkT3pmVWZzd1krcDJlRnZaajZIZzVJVzE1SWN5Y3RLTzNkaW9VOUlQeG94ZUJuWXZ4cVNlUi9NZytNVGh6U09qeUJObmxaV0s2RmZHWFRMWEZCbjVUenltMXlVWmdkdjY3NEU5a09zWEc1a3BQWHc2a2RMVVMvTmNtcm1idHJoZWVzTmh5Y0h1M0FJYVVsUUtNOENHQm1ZVE8zci9lNG9iVXZTUUxFM09Ha0YySEFtbnB5QkZNbFp2WVFxbFA4ZVRyOVMrU0pSVHcxOGZHdVp5V0hSNmJkOWF4T1hraWkwYXNnREk3WDZWMWlZWmZaWVJjcW9wM2tHditxL0tSWW9ScXVKdjRkbkVPUkNqbTRtTWRGMlR2MHNUZkRIS2xoSldEbjFEaEhSWkw0dTlrMDdxSFpJaWxrOWZ3ZDhqcGdyT1MwRVhDcFdEVXFDR0NQV2o4MUxObXFkcTh4QTRCZEpIbkxoaElXV3ZueUZ4VFFNOVNSY0c4TlNVeFlWcnNBQmxUM1I4a1V2azBSYlpxSUFTYU1lakt4WEREUkZBMFhpZTBBWVRJak15bU9LYVMxNGxvaTZpdkNoVHBqNVVjYlRTdW85MFJnc3MxTCtGK1B1TVllVU1MLzFtS3ZoOEZJcGxlalkvRTRkaFlROEZtMDhMSXRIZzJxZmVKVU5SRVpaM0ZCTW53WmRKMmpDeWQ2b2U3V0pTNzh4cm9CK2RkUG5aNUcxd1I5VGhpWG5zRm9uK3pqTUdCTlJYTnEvb2grVTZnbTBxbG9TVXc5Z3pqa09NN3dHdTlJUithWEpOZHZxRks1WFFpQWwxTWpEckpBcWF6R2VYTnJNYmRtMWtZZUVaRVNMb3M3aGRTQ0NNZmdWM1cxYjcxbitCTjZkNlNMaTNnVEQwa2ZwOXdVbmZqTExUMG5Jd3E1ZTJlWVdMdGZoVEZDYklzb2ZoUURZczFSTkVwQzdReGw5NDhwazF3bjdTRGF6VEJuVjFnS3c5VGtvNnYzR1pwMEJ1TURtMmN2VEw0NFZRSUZXUUpmR0g2V0tsM1FrNDVWWW1tMkN0WWY1V0RXaGdzdC9kajA4VnRldnlad2JLVkZNOXltUnN4RXB5WXVoTk5wMm0yRTJ5TTJrT01ldGsydVlINTJRb0xIMEZ3bHFJM3A0T1ljUGk0NE5KZ0d4ZTV2L01zRGRkMGVOSHN1UURCQ2RHK2hsQ0FRSXVibWgzSUtRajJUV2J5SlNkdjF5cWJ0bnFiWGxHcmxUNnQ0bXUrZWxMRGNrMlAwUDg5TUg4VDhnQ0JteUVFN0xBc1FMaUtSTzE4T2NTR3ptQWhQU3ROODNHVGp1TnRseEVSNkk4MytTUlBDVFlsckZHTzBJaW9BRGtrS1h1UlFxcmluMENhR0dUdUpWbzNHSXM3RU5Uc082V0VPbjIxNDd2eThjUEZoZGZYSzNnaVY1NksxR3RTQVRwbWdQRU9ZaXkyL3QwT1JvNWVaYkl6TVJ6THJ6WEpHdDVoQ0NET0pyQjVROWhQZGtCU3pWc0VSOU1LbWZjODQybWtoL3djcXZRbmJtbDBvYVZ1NHJjTUQ0S04vaS80TXYyVHMvbmxMMkljSlF5UHpRNEs1NTNybXc2enhpMGVmenl0WTduSm4xSkp1UW82UW5WYmk4ZFpYcGEzL1g2RDNVR0dLK1lPWDR2YlQ5aS92NjlGbldHMHkvSXIrdUROMnM5QzJBMFh5SHF3R3ljdmZVRDRRM29UdkVuUmFzQWthUXhUYlNVL0FGZ1JtWkpsa1Iyd1FaOWtGNE9MVzNkRFBJNHJaOHBuTlJYTFFFVmZmVUVCSlFqb0hVZG5vTk1kbTV2Y09xYUZtNmpRR3RxRzVQcEsvWnpXQXVwVk56bzYxSmtiZFhrR3QrNyt0aFBHYVRmbkhmRjVsSnlWdm9xdW9vWHJZZlZvcWhSQi9WK0VOcEswTDU2WUplRWNOR0lQOHpybmJ6Si81bTRFaWZ0aytwNlRLMHoweEUyeU1wMyt4ditFM05RQlFQeFAzT3oreklrTHFYaWhsemwwZ1FmYXdRRVhISjg1TTcvYlVUZUpOYkVWZE9pYW50Q2ZpcEZ3U3FEWnNrQ3owa3VSUnlmK3BWQko1TEFnZmFSd0dGcjdPRDBQUzFReFJnRVl1VEVnaGtCci9HSUMxTzVZeTlVcnVMdGRlSEMycy9jSkFXaDBnSFFKWlUrVWVIVWl6TWxJNkxER3FRSkJ0ckNzR0t0YURUTFh4bkZweWk4RFpvbU1HQnJRY3pkS1pkMXJhT0dmRmFvczhONjF2a0pvUlJWQ0xDTmw2SXdlQWtCdDZQOFh3ZTZGRW1sVXppRWZNSmNaVUowNG41bWdJWC9Mb1FSTHNtNm5zd0duNzR1S00vUlE4R2Z5VmJERUFCZUJzV2xoZ1draUhodzkvYlNUU2lOcTEyYmM2VjBTRTl2L0I5UlJuVnRjd1ltdHdXOXh0MWJNcEVWOUJNMDc2ZFpkakRhNGYxOW1TdXdBRDBxeUVaTy92dXpQSURoV3lRRUswS2VhZXZhUnlnMVpwRFlSb0U3aVpBN2lja3JsbkJabWh3WHZvZXNLVDBid1NRWGZMdnhuNU9yL2V5SWNoQ3BIS2YyQWNZbHJjOG1QZ2FnOVM2ajQxaUlhQmtMS2lOeTVtSUJ5NzJYWkFmQTduOU1qc1lybTBSYnEwMHg2aEJabm4rQ1ZYbHZsNmNORHZwOTd1dTkyUzArRXZFcXBRc3RaV0Y4T1E5YnpBT3pXQnV0eDdHbWg2OTMyaUpDdlh5SXV6QjJPZUZlL0VXR0V1OHR4cTU0YTY0MmxwZ0VoUGtuSlZSNTFXOUFMRkpuWjBlQklqZEg1WjF1UXhqMEtUS3RJNi9nQlBNdytYdk1aMFlMTjFLTjYySTh5bG9oUDJZVzd0UGxPL3k1SVQ5TVQrcXlLb3hGdFNkejFjcjB5UWNielpyRWZDSy9Yc2JqUVNsb0tnWXJJK29DZlVWc3U0S0VzdnRzQTF1VDZIODI4REJPSW44R29MK2ZqNkNjY2pyVHE4RUR1UXNJUVdMQm5zR1FWUDFNTXpBbXBOK1FoamRRaC9xM3YvcWNqbndWaHhHOHp3LzhRVkpna3hHUFNROEFKdEFoQWJlMDlZZk5ycTliWnRsanA3dTFqM001aURWaXBrOXdHUk5FVVZxNEc5Z2hycWx3Y2RXd3VyVi8zUDJzZnVETTlRRmcvb0ZWVytodlRaMGNvaTZOMGxkVW0wRmhibjh6TUl3K0JsSExHcHEzWFZwd3hZTWQ5d1FBNGJYOUlpeEhzam5ZU2syd1VMOWVTbEtYaFdUaXFWM2wwWENBSjhTbEtWOWFoRmNmbTlUZE1mekp1RUdyeWc5NnpXbDk5OHdpV1E4NW1LZmZxeXE5SGFHYnVzcTZTVzdNWkJuVEFtYThWS1ZNMGliY1lycXBvSHBPb2dmWlA5THE0cFliTnZFdE5SS3VnKzJlS0lEY05LbjJDQ05wWG12bGszR3FZSmVQN21CZkxNZ2FjRzFtU1lCenh2bUJzSm92b0ZGb1Z1Y3J0V0ZnbFJGTllPUzRVM1BNMWJrVElweVJEa1hQcDJwNE4xOXNtUnhIOUJkZ3JBYnpIYU5tRktyZEptNHhuVFdPeGtRVnZDK0U0OHQrZzBFbkd2UWVQSnluYWFBWlk1S2F5dEFlcmJzMWRBTldnQm9PcmVkNVhRZWQrbEFzdW0rV01BZXgrK1EzSUlnd0NxUUxMK3V3cVF4bEFaR3VqYVN2eUI2ZFNldlNEeklRblhnRDBSVk5aZEdlTzhlM0RZVTBsamo2SzNZRTltK1EvVkwxeHUyTGRwWTQ0MFF5V281N3Z6REwyS2VkdlRPLzBPT29zWENHcVh6QnRDaUNhQVpZc0Z1cStMSDJuL3pnd0FIMjdXWmt2ZXFyWEVaRnhuZDA1dUI4V3JFdk1KTEJwbkdiVC96MTJSRlJnTG5sd3lXczhpaVNsNm1oTE9zQ1JKS25QU2JIVDhJTU84WmN1b1JvQXNRVGxCaWlzOFVQZFZ3Rm9JYUxZV09idC9sQkxaeW5SRWo3cEhvSllWNldTMktacVFKSnRFL3BsYTB4L3czUnhJQyt1YVRUVkl5YjhacnlvOVZMMEtiR3NvNzc2cVlINWVvMmpUWi9tQWdHVW1TUTJQMjFiZjNoQzZTVXk4VytpTlpwZ0VFajN1dFJKVUNKWXRPcXBjY25MVzhPWEdzWm04MWVOS2owMzdOTjVhNTlvYm1iUzN5RUFhS0VlRFhPbis1Vkxwek1adjJ1L214WEhoQ3hXZVRmY2ZtOVJDRlhrVWR6Wm92NXJ1OUtlMWFCR2pnNkVuZzd3ajI3NnBaQkZJOXAvZXpoZkNicXMxNm82RWRYekRrdGhhN29TdlRtZXhobldJbktjYmNKTUs5T2tZeWptS3dPM0l6enVkM0I0WHh3T0Z5eHlSbFhHS1hiVU9La0liZXdEYU8yWEliUnNVaU12OGJ3MEcwL3M2ZGRpai9rbmVzS0lHblJEdExRWit6a0lQZU1ubysxUnV0U2o2aXVSOHQwTEtwN0hMTERaNXU3U2Yrb09UVmFJVGJ3bjEwYU1ueWtJU3JPWnVWZkc4dEVCRTNHaHpoSGtsWXNMcDR1QUpTY1Bsc1oycTYrM2c2Y2FOTFBwK0dIVlpqUWNZU04zSkZlVkphTFlHTlNRTWNydmpidnZYOEZ6TDU5cDNWdXF1cHZwdC82V3JwWmNBWHcrNjNnbEY2Yi9NQjc3ZjFhMUJ4TFdCb1lYRXhHckZOdU1SdWFxRU9QbGhYcTJWTWRzWU41Tk9tS0kvTEVYYmxLM2FIazU1L1poN1M0Z2ZWYkxFWDBnckpzMkE4aEhaZVFhTWFlY0JibGFKRENiT0lUVll3cXppRkNuNTlXeDQzU2g2ZmtGcDJLMC8xMG4rSHI0SUNiMk82ejVoRTgzV3ZhaEl6RWdVNnB1OFF0c2Nwc0FsMzYzTG0zemIwOUdJaFhHd1lySnpnUUtrWWVJT0FlbHpCdFU2bUtPMHVRTEg3TENxNFEwOCtZNWVsdzBadWljbUUxTTVLQ3g2dzBDQVRwR1ZFZVg4dE8vRHVvOFJBVTZOY1F2M1dacUhNa1gwWTJVOHZvL2JJdjVqYmJDK2QwbXh3RnlmTlZIMWdSdTl5Y3hLZjgxNXBEcUd1WWs0RmQyTTd2RmtDNU5XN09ydHM1UUhsMmdab1hqYUFOOUlJMTBESW5vUDdqcE03T2tjNElGditMeEVwNVZRZDMrTXhGWXRSekI0eitVWWhTMzdia3lJVXUxVjh4Zlp3SWxFSTFCT3dTTzZiWHhZRjlYUlpnbFhTV0dUUTNvelFtNmRaaWZlUWJjRnd0MlhER3VXbUQ5RlRvbmttQ1NIeXBaOFRaNlVIK1JHNm5FQ0VaNVRBU2ZhUUNCblBhZmcwWk40bzFNdllROUpva2UySDloWnR3TXRhNS9Zb21EQUxZZ3hEOFhFeDRZSlIwRy91bWN3VFUydXVvZ3JxdkkrbDB3K1JPTk9UZWlzUnZNZTFnWVRWKzRtSkNhdzdsN2NtV3VVRFAxaFpEcmdEdmM2SW5vaFdjVUQrWmE3c01WVVJLVVUyclBEckwyazVSbHIrb09PMndKN092TUt3cVNsRkVOYmxaeEdiMGJEWDFVRTBEV1RzeWdGTGtyd0hOQjQ4MHpXanJYVVQvcWMwTnd4M0tIOWlldldwODFXcFNPWE5SdjJTODN4aC9XMFVOd3hzcHl1aEZuZXZEZ3pXb3UyelpmRkNCOGd4cDlwdmE2RkVtd2VReENwcXVYV0tmNXVIbXBhUzRpa0lKQjA1bERVUmQ0c0RNMTBDQ2NrUVRKM1gxNzVLeFE1RXFDQVBvZFYrOHpaaXVUQ1YvNk5mR3F5ZWZqZkhqeW1RWGszUkdvelZ5L3REeXJpa2V5cFhoS0tDOG94eVBGRDVLUnB3Sm1oTTNVUktVY1Q2R3YwK0lpKzZKY2tOblJMRWo5QlQ5c3J4VnpFSDZyNTcxQkd6UENTWC80M3JYQ3Fldk5JM2NiL2UySkFDRW9SVDFibVdsWlJyL2hXdHNmZXZzVFdFTG5nNnVKTzRETk1OcitlRzJIR1lOM1g1dURwSEdjb3FUcXlZbWtMZ3dObTRtakkzKzFYZW94dHdJak9XSGdxZ1ArNnRXeEJ2N1krREVxcWRTalJqVXBrT0FjcG8zNTRBVFZmRjlFVjBDRUUrbUQ5dS9Bb0RtcGQwMzhOVm9xQ25sMEpjVmJjMHRrZ0h5OE0yZzFpNDdFMTBpQ1VhWnE3S2QzMU5xcXNqaUFwc25weEkzUGU5cEtUNVJGMHMxV1pkb0hsWlFTcHZ2NEJQdnAvdXo2bnVLNms3TTNTU2gyMUJZNUkvOGdMRCtDRFFCMFhUYlBTMmFnNElnTE55eXpac0NXY1VjbC9aMmFyRGV0N0ZFTXlIQWprd25WSFdySmVLd0hTQU5kQjY0L2x4VGJQS24vQWg1Zm9ZaFgvRkhZemo4L1VJV0pBR3FBOTRReWsxbVVuNmdZelN0UkJKd0RKS2E0dnhTZVZ0U2grUkdPdVJseGUrZ256MlpTRGU4VWc1TmdOckI4c3lSS0dCQndYclJJNERxLzg5T1ROTkhGVkVqYzdZZ2U1VlFnTmJ6ZnJ6TU14dFRUcVV4dHlsaFNyTjdWbXg2TVk0YmVVcEtzVlQwRitIZzgwelkvRUpjalVrWldFSm4zOGczd21lcVVlZm9UT05Da1FPYklsUGlPTjhFVlJUWHJ5VGdPZzg5NTI5N0w4WlQyaHJzZjI5N0R1TXBweng1T2YzSzVOR2FyUlNYa0FNR3NnOWY1NlhYN0NlcjFpbzUzY0g3Rll0OHpsSlJmUEQ0M3FQNzZpNmcwRnJUWGlqUjZRMnY0ZjZoV0RoYXFsRGZjQW9hZzdkeEIvTzVtYm1xUWlCVmRXUFdaUSt5SHZ0aVVzYkplZm96cUJLN1BsNTBvZWRxUndlS2dqYVBRUmh5ZmRJakpRZlVPcENuL1BGT21TVlF5dE5YYXFGS0FFUlVnZ2FjQm5GSnR4YUxiUzFIdlY4RG04U3lzRGNwVnIwaTF3UklLeVFKUTlpVHZHYThRR0R6eGQ5N3JlZk93UDc1bjYrdXNuMDNEYXpDaHBzU0VHKzZRQjRRUGpqZ3pHL2NQeFB3ZUgwMVA1bDZ0OFkxc0xBSGhVTTM5dzhMWm53ZTNCQWlmdmFXSXdIVTlEY0tSRkN5SmdzeEFTTTVvMWY5M3FzN1Q1RUVDMkV2ckdZdk9jbWEvQjF4czZFSEQxM3VlbTgyRW9UT0h4L0hrcW1LdjlCSUxyZXByRHVoUlY1VjIwWGJiK1dRaStsMllVdk1kb2RTRzV6bUNoRGNtTWtGY29mNXZlUVZJZXVyaTE1OTYzTkxkS0M0Q29hMUNWWUo5MmVjNkVXUTd5VlVNblhKaWwvS0o0a3NySU1WZWh4ci9mM2lKMC9DMkpvTXQ2aWJRanQvVVRvWWJSTXNtd0QwMDk1VnB4eWV5QmVDM1NabkhGelZZbWZWaGFkanVvZ1FEOUJ2cUZTY21tVlJIYkI4QytTK3UzTngzZmVUMXhPWDF3NXZuVVJHT1kvVEo4QXd4RHVTS1hXZVJkdThxRzNjRWVTWDhOU1RTTU96NGhNSFlCcWxRb3c3N2hTL0gwdHgwNGF0VmdmZkFKK05QeHBVa25jZWh3SnAxcTBLaytXQmwxak53eG8vTDBHOThqRVgyTlNnZE9WWEZlNWVxNDNjbUx0bmZRY3gzV2JKRTJZNjdra2xxWG9PZEhlKzBoU3BWRmFIdC8zOXRxUXRLZDVVN2Ztb0ZKNEhEQzNZUEJNbGhhdnliVnVwMURQUW1pdnV6b3RUSis3VklGOWNIK2ZMN2tTVDRTVXdtWnZ2emxkL1o4a3RDdmFQOE9odDNuWkt2UGgwZXYwbkxwd1RsZkRaOFRONEcrMjdrNlNtRk9Fb0lCVE45TUJDSU1hQm1EV3VqM1NIMmtLa0R0ZGVZeS9mb0NOWXZSNmNaL0hGWHU2cFZZVTJYbnpVVC9xbmlMdFVOTW5hWXM1eXp1cVYzbHFkME9mWXNlZC9jYklKOTlNKytRWi9zZjV2eHZ6TXVaQVp3cjJxT0FwWnlnR1lmaXBJdWg2OWFRSlFFTUJnVjFHdFpFUFd4c3pzaU1ESXVlaVNCUXhjTkJrUGlaRkovbzhVSStuem9uY0F2MzJpNEIxT09xaGFmMXhoZlh2Szg4R1c4aUt6VkZlRzIrdzNIb2FwNzcwMHRCM3E3TkdZSll5VGVjQjg1bnlvRzRkblFDSThNZThEZ1hIMVhZTDN2cnUxQXZsSHlwamtYV1ZJZXFkMzRlTHVRUFZIa3lUQjRobldrNy8zalhXbjQ1ZlloRGVuREdzeXc4VmhhSVlDZGlTRWdJVU4rclI0cWtzbjVZMTNFZkFzbExvaGFLZWFHbFA4Y0YrWUU5NjZDVGZ1QmFDenJCZ0NtWnNuWEdlYmpNVVdwSmd3UCtVV2w0OXFhNFNJN3dvQTlyNVhvZWFaTC9GMTU3MHNkaUxNUFdGQnVWSEJONUt0Zzd2emRwZDFPS3ZrQmY2N0tIQlphVFpmcTRZbXZ3SU9KeExaM2FzcktaeUxiSU1OZnA4TkIwOEdHQ2xmaE9yOXF6RnMzQ3dLZ2QxSGY0cmVEVExZRzFvUkVpc29tQ3lnV2k4TzgwY0NvSEI0VUdFNjcyTnpscjFlbGxUd3kxT3N5WFRGR0xwZjN0OTd1bzBDMmgrbkNudWoxaUJJVXhtVnZYNFlsNVFWUXlqR2ErdmZwbk9wTzJsd0ZuaHhhUVh5SUVqaDNvUE8zOWQ1bGJEMmQweHRlWWV6VzI5R29QcGtFMmJnemR3MzRzTHhNTXdUUjEvVitvb3Q0djhhNVN2OCtPRXZ2K2hxUWQ1OXBvYzB2L3puR09xN053MDc2bGwxZDNKT0hadGVmdlVBQlZmVDJidzMwenhBUzltYURGSHNuZVlxd2lKeXJoZ0NwK0NoK0g3SDVWcGcrUDB4Q1FkVExEczdlakU1OHFFN1d6VldoT3UxZFlNNjdxbi90b29haWtLWTBSTW9HY0hhemhibUNldThBbEJUQm93QkxZWHVITDFna24ybzBCeXdKNnl0dFNsamRDcFNJbS9ZZWhaL01ZVmdTekFOdzI0MWFoYzB0QXpYU01BUHlhRkFSMUxLamRuc28zdE9QcFh1SVl0UmR1WGFOejh3VjhRS2N6ampQTlhYRHcxYnlpT1pYc3haS2pPZWdTQkkvLzN0cVZKalZsWDF1b2FhYzZzNzN2NU5PanVPblBGK2dZRk1VS1FWOXBaWnpnT2F1b3VrQVd0ckRMaXBsWUhINytEK3N4K2V1ejNpRFR3RGFMZUFzZ0R3SkdMZ1ZMNENETFo1eENZYTdySVUySEF2bytTRHMvaEVVUTQ4YXBuQll6bHVjMkI3SzZETHVWNEpnYTN6dDRmMFFsTjBLaE4vQ3FHNEhlOXYyY2duVmwyc3NwWHpFMTF6aVBsOFpqbmNvWXlzMzRiQ016SFB2Y0FzTm5jSEtuVFlOSlBPaW9TcHZLNkhxWFV4NGVQVUsxQmErZ3QzRnZoK00wV0lHaEhZdWt1SHo3cFFsaDV1RTJidUE4SkcyM2Q5eGZENzRxS3FVS01sOUZCK0c4SjJRT1lxLzJYR0NPd01RbFd2NXBaa1RDTThwWUs0TTFxZldwYXhRTjZYQzlVdTFEUDRMcU0zaDNnRzJob2VZYThlUitQM3RiMERTd1lKcXF6ZzBZM2VqUi9qU3N0azVaWFhyMFdPTWNySE8rRElBUllMUE45ckU3Q0F3Q1FtaFlCYlJwZzBwaFU5bnpuYU81Qld5enZpUmdkRnZWazJNWWxrQVhwb2EzbFRoL1lZVkRSU1J0b2hMWnVBbUpCMmlMOEsvZkhEMCtpeHFNbTBpNVhRdGNLbEorUFNkZDBkQUtVcFhlM3o4L3pYcDZrZnJQWkpHS3grMnZ0b2x5MFljb05mQ3k2ZEJteFVTcElxL3BTS2FVQklQVjB0bFE1RkVJb3ZMMUhER1NKc21NNTRodGtudDdpZnBiamJjUTV3U1ZPaU4raS9FaTlLbmRvSER4NGxYcjZDbUc2Skord1NhTDM2SlFBc3V4Wnk4SDlXZUdVb2U4Y245UVp5YWMxdlRMcktEMGtaZG5pdFRxd1dzdmU0MXFaMnpwT0xFd3FNMEFJU2NXQzhZeWdyT3dSYkJlOGFGQ0ZhS21RZmRvcWJuVHQ0cVpoeTFOczRxUEtLV1FrVDNjRHA2bDZQWmg4SlRmV2p4ZkVTYnFQMW5zMlAyQmlOT1B4OUd2VVRvSXM0ek9VYUVRR2xDa2o0TWZiVmxESk4xMXQvTjZXeUttMzFTVjhJUkV3TlRtZVBjQXphUTBJUml2Y21ycUxiR29XajdTbDNoWnJ1NytmYXBwaWpyV3Y2aGlXNFlaVTB6ZFBoTlpvbVplNSt5bmEvMGVQdXNYdkIrLzA1bXhSaEJWR0tMZWVzbk9hVGxMd1Z5ZmlHYnBlU2dzQnAwRHNWMmw4TTVxS2tsUHo4RzNDNGRRK0UxV201WkNVUVA1RldDblNNQmFaeUQzRUwzc0p6eGx1L3BGVVpYSHVPck00azhzMUhCeHo5eXVKR1I0M2J5ODZTNzBoNnpKMi9oNUVjTVAwcjgrM2srdWJnU0NUcDM4cmpCSGozdHA2K056UjVERFVlMjVOVEFiQXRzaGZBeGpHRDlFTHkyV1VJMFEvVTl4S2VxbGFXZXd1L29XNnhhR3JlVzNDUGJkYjc3RUhKTzBrcnJKeGJlRzVBTnpGa2NWVGR4bzhOZTVNMjI3UGF4c2xBRlJ4eDZVVk1CdHhvbURmVldmNUpqWTlwRnVTd3FPVlBWdlNwbWVNcGYwYVFGNlRDSWdUanBUVlNLZVU2TWxKU1NlTkNhYTNYeWVMZE1rMzZjVTNvS3dERG9GWVdWMzNlTlQzMGNMa3FTQmZCZFArT1JZWXdBKzVvcnlvbWZsbzNjY0FqdXltRXU3a1JPMk5LWThZWnlHZXR5YTFPSkJlVUhIeTRHaFZ4Q2d1eTczZFp3UDVkR29lTzB6UUZCT0QwNGlFR1JmNisxdFo2RDJWUVc0cXl0M3ViRllNeGEyNytnNVhvWi9wa2hUNU13NWR4aTVpMmxRNlhydFRmRmd1blVvVitnMmovNXdDa1JyY3VzSkNXbGcxUHhMMDVsTGNGNU93OEhEL0JZU2xoNlVESkpPSjk0M0NOUlR4MjBWaHdiQVlydkJhbEg4UW12WmphOUh2a1M3cUsrU1JWK3NiNVF1L05TdTB3RldjM2pTblFTK29iQXlJTkc4SGd2TnhuWTFjSCtSekl4ZlFrbXhzMkVaN0cwNVBOc2dsVUJuWXBUMkZYL1U4bzdvRE1vSUVzdVBIenBVRituRmt0aGdmNUw4bVo5QUlHT3o1MkRNbmpmK2lQQ3FZY1RYQ0xOWTM2VmtYRHFCMWR2aW51cnFTZEJzbjlobWJxdzNIa0hQMU54MGhqTnpyMWYwSmYzcUVDRUgzMWxDdGlsNjJRSHl6WTFMTnJjTW5GbFZ0RTZsa3NnblhUL1pYMzAxZlBFVHRrbzBOd1YxU3hpV2hpL0liRVNSRTRIWWJDbTh6VStuNzlqb2loa3BGekFwTktrYjdtaWMvb3htM1MyZ05GYm1XclhsU1FoL0o3NTFGbEUwWDk5SW1mSUlsSjFrUjZPa202dkZOaDllRkJZL2g2WmJZYkovZWlXdGJmbTdJU295MzdCTWhua0tRL3B3WmNNaHdxTGIyTTV5WWtKZnNvaCtnU0pmMlNkUjhGMGpxSTVyK0ZaQWlCVG5CdHZTMFFhY1dkK0o4cmZzYVUrdlNESUNIbS9xVk5RSi9BRWVHNnUxYnQ3WEYzemoyRk5hQ1p3dUR2MDVLYTJkUTJ1b1FCUndXb2dmZ0hFdkQyU0I1aWdYL1NlQmV4cW5YUnR0SGNudVpYNElHYTFrS0EzZGpDM0NTcVJDYjExbkpLWjRRRERSQzd5OGRWeUViU2FRTmVQWUlYV01JR2Z5STZxUFIxOWF2dXlRSno4ZGdhd2h6WFpwdU1VVU1RdDlQNTZkWU5RaVhQMG9TZHQyN2ZTWThpcHBJTzB0VURGWmtLK3FGdk0zcWgyTGpnb3R6T0daYUp3Tkc4V2E2a1luZkUzL3NaTis5YlNRMUVwRzc5cVVUQ24rc2J6RXNsUngrYWFaWkhiZ0x5NU5RUDl0UTJtNHFaZnZmZ05xaDJ4Ykc1Z01QdlVZQUtCaWZ5SXE2OGhHeVVYU3RQblA5Slo5UWNFTlJTU3l1cFJrOW5RZnBKdWdZbXB2bTU1MVFVbTRXWjh1bDRKRWtkRjVDU3g4RGY1eU43RjBLSkl0alJxRXdOd0F6enhrRlE3cEVHY3VXTjB2Vzc4MUdTbERYK2E2NSt4YnJGdTU5Nm9jOUxzRCtDYWJFVEI1SkNNVjdLcklBZHprcGFOYU96QzJhODU3WFRwZys4OEhWYjZpNStxb1dTR2dOZFM5RlVRcjRRTysyU2JHTlpERDcxVHpvR0o1NlZ4emN2UGJOUWRBSDRmUVBHbkUzMUE5QWxjNWk3TStwTHVJUDNyVkJ1Z2lMRnNMNHlKMkJzQVZ3ZHE4aGVEMVl5T1NmYVB2alpCRThOb0luc2JPa0Q3WUJDWXhhZEJkS0NicFpSaEZYK3dpUjhQNlhHSTZQdjdTWWpxMSt3U1p5SlQ0QzdDNzN1eHl1WEVrNW54VllUM0IrdUxQQmFoOFpFS1h1NVFvdVc2bGd0a2NhTC9Ockh2c0c3T3JaYWZYTEdSeE9YWE9jRDYwTkFQczdKeUc1R0VTRXFJYUU4YjduNjJmU0lxWEVEVnJTUVVRUTJqejZkb2xsbDMzZlhvaHRlNDBrTktIaFF3VnZnWkQwUGU5YVJmV2VzOENnWmVLbFZPbndBMWh3WFRxZllRbGR3Qmd6UFV0S3J6RmhIMzAyeUFQQkdVeVdWdndzWVNYU2l6RHZEVzZybjBJdGIydHVOZnl4WWMvZXE2THdEbVVYWkY0UkJhRU92YWVUYmpuNUh6bFhqTUcwNnIzckNEUkRFbzA4aWwxNVpuS2g4TXFBVVVjUWZQL1lQOUpBNTQ3Y3BaeS82UjNsRC9NOG96UjdMdnRYelZjdm1rbHhHNXVteWYwS1JibzlOc0VrdmNwaHE5U1FMcFBaam5oUFRrbGlZQUdjcmk1cDQya2M3b0lrbGc2YVNoQXQ2bUNSeG5XNm5aS1hIV2F0WWFQdklnYmFDUHhGV0RvcnlGZWNvbndQRFVkRFkxbXdKRGl0MUNHeEJnL3lIa25maXQrYWlCMjVpZlA1UXdpSkpVelVJL2hLNEJYSnRRN3FSUVdhRVh2WmFhREVXQU1hQ2xIS1p0Zm55SkFuaWk0NkR4UHlqZFhHZmg0WHVQblRVMGw0QWF2dDk1Tm1OZmVVeXZseXNiVm9hY2VFNnlSL1RZWDUycStDczFqTDlKaDNiNXhwMkt3OHppVUZQVlpOVXkwMEZtalY1ZFpudkU5RVkwL0UrbGhUMGp4Y3FPb3BLL2g5bUxhTWFGOGsxbWM2dkE0dnQwS0YxRUNVcE1jdTZyZGdrMi9SdFl1VjJvblZuWlg1TG1Ha3o1ZzRYeUR2dm05UW9iMFRhMFNzdWo3bERrWEFSdmg5NzN5eFFRTEJ6eVVZKzBML3RON3NucWt6MXF0TUZROThpRlJzUlc0QStyNndidTZjSFJlUWNlVTZxZTRySFRQbG5HaEg1blBkWWpraUFERVl6a0xReWhCN2hxK2dCTHFYODV4SkxFWHA3Vlh3RmdhNmNNa0E2cEphRUduOG1FOWVIYmRNYWg4YXVWenJsUXVzdnZEcHpTVHpQV1BwYk1CamNuYXczTTY3OUNVcGd0RUo3REFOYkVPNFV3RkM3RmZrb3FiUzh2U1ZiWGJVaUJja056R2JLQnZJWlRxelVsdEp3cXo0RGhVZ0l6RTYyYzlGNTlsNU9mT2ZmWlNqdU1mdVRnQWxwRnYybEFiZ1cyLzFyendrSldkL2lZbUQrU0VuOGVnT1BITmtIYnlmNDRWQ20yZ29sTmo2blRXWVB1ZDZZTWlteml0akNrUW55L3FXNlNiTnVCaSs5cW96dlpCZW9ES2I3SlNEN2dTaHpaaWxwTlhvOVgrSm4xZHFqVlBpYXZvM0lnaGNTaTU1dXQ3YWlraDZncUFkSk5OUXdCRXV5WDFIaWZSczVralRzL2h6WGpLN1p3ZDZubmVBUjFtNFpJWlA3andNQ1NIQVpTU3QwamxQSGE1Vy9URS9BSVFMTWlZcUppSHpjam1NTlRoWkxqSDVlaTFxNzVBaTZPYVpWQ0N1OUlBanFRWW1xS2ExL2FxdjhvZzRmS2k3ZVBKZW1UWGRyc29WQStFa2o0VktjNGFiMko2dzZJMkZxWWo3VW0rek9BQWE3NW1zbnRwN3JzTnhLZDVuUmhMZ29ORFdFcm9lWi9SQWhiWjFieDZqUTRoU2tPTXU2dVd1b3pGYnRaanU3cTNTVmM3U0NTWE9YelkvRGpISUxTNm9ydFhqU0ZsZnVnSWJBM3RqWEJ0cklsb0czdUNDVGUva2hiUGRJbWl2MEdXN2VxdGF4Y2Q1cTR6dWdhS2l3TmJnaW4wVFViU0huR2tBNHJ3UG1PRWMySGxmMlNQaHY0SUJNaVZaOWg3bVNqclUyOHc0aFVtOUJiMktjbnVIUlNGdEthek1TVGN3RmtTVEZ3ekVJRG5iSWJBSWlCR3VNclQ1TmJDREhGUWRDVVI0WlFLQW11eHN3eHBXY1NJdW5seS9rTUJPL0lON3JrUnR4STJXaTlVWW1kdEcwczAvU2VXbHRpT1pOUnpROXFZa2gxQndIWnlVY1BHZmpwbUhyYTRyU2JvM0JSdlFKTjFIRFRXN0I1YjcxdnpMbDN3N2gyN3NTQ0lMdG56K3JZUTFUeDVHeEtLYVBBd291Wm5Pd3NDVTduQU5LL2gxR0FrUnR6Um9SVWFUSzhmcUxMWjhYa0lMaHBmVm1WMitJRXhPN0xDaDN5ZzdrMXhqQzNaTUJudjRVZTg5UDRoclYrNjVNY1BwVXFGc0FVdTY3K082SXdkcjlaYnVtRENOaFRvWFZMelBMRCtCb0tud1V0SkQ1b1ZOUjc0QXpxU0I2M0tCWkZHcHgzYVUwM0JpN1lYblpxdEhkMU1QUTNMd0w0RmptWkJhYTlNdWI3ZWZyeTZWMWdLK0tHTVkyNG9pd2JDbTNqdlV6SzJIV0FwUHo5ME5od05qRW04MTNRRW5UdkIrNm9kWHFrdkR5dGNDWEpMb1l6TnBTaHBveXl2clJ6RW01aThheU55SUJqVk52UnFvTWd2ZlAvVzB4eGFKbVJ0NEh3Ukl2ZkJTbHFtd2NzUWQxRkl6Njd2SVVrOTFvWXVCeWlXNUMxUW9KQ0VhNTNyc3J2NG5FR2txb3BHVGIydnBVQXZxY0VVZVRsdDVPQTJwalhxQ3F6c05aWXFEVnNQSmJEci80eEx5d0k4cHo5aG54M3gvTHBsRVZsUW10NzNHYVpianowWks3dHNaL2F0T1ZTWTFzUE53TkZzc1N4eXJnQjRJOUk4K1J0TVRNTWxCNUNHN2lZUndNa0ZVK210anM5UDZrdmgrckdCeCtUd3NoMHRUWlVVRjFUNjRoSXdqRC9BcU5aRzZkL09QbUcxc1V4K25JRXR0V09JSklXbTBZMVl4N0pqVWZqRkp0K01SZ2xNc3VIWk5kenN6ZzhaU3QvYkI2RzVyUFhHN3QvNHE3ZUFPaEYyNzhKNHpGc2ZMTGFKSkFicGprMFpNaHBySzZoVHhwR1Jqb3h2U1o4c05USW12bkwvQXNOSU8yaURkdmVYTXFUTi90UmIzb2c2VG1zb05HWFZuZUk5d09wUmErRUtwVFBWMkh4YUoyV2RNMCtaTjlRZDA0SUNoQ3N6ZEZFSitWN0hkLzRQalRWQ1pwVHhBSFhsUUtvSXU1bXFhYjRKRmZ2UHZWV1RjN2J3a2lEVHhRcVNTazhZQzN4Zmt6Q3lOMU4walpwVW5oV0FaY1pxSE9qOEFHd2Ezcmo0SG1hbk9xTmlvY29CTEMxRGZNRmxTWTBRVkZHZEx6Z0pCYmNra3hadXY1TE1VZkpJRlBXSURhZTBsdDJYZDBFMzZiMy93ZEh2NzdpZnJOekhVUjVuQ0pRM2k4UExTMWNaNTRVbDhqa2RoKzlLRkxFekZkRkRHZFl3QWFCelBnY0NCeFprSVRMTjAya0JUL280Tk9NMnhSMU5lREFNeFNOWDlVMHUyYVNwZVY1TTdIK01YZU9ocXZaYjhQQ0NVbUI4d2krZXZLQ2poOTNUUGRDSlQ1NXRjNVlTOVZmUXVqbGVaQTV6U3IwUzNUS3BkSEo5VEhybVBqdXZXUVZNUzY4OWlMNDVVSUJxTmdsb3FnT1pRN2MzUlN4VHVuV1FpNm52RHA4YUwwSktndjhBNkdqVUdKUDdoYWhKeGp2dHRPQ3ZZN0oxdUlId2txTTBwbkVVYU84bTd2VVorWDg2Y21sM3hHa25jZzVxSVhXc1VPMUI2YlhKQmplRVJ6RWR3N1c0aW81bnRvbmVWbVVodThVdW5xR3J5a0tHdnpHcW5qVkUvOVczRHNGM2RHMzBKbHVqYkgvWDRBTGE1WGZrVy9OT2xoNzBRSlhvQWllb3RRL2xvZmo2dkF0S0RUMFV3UXMycko4MXJrNmo0bTFGSDdUMm92ZmhFb0t3NU9paGlNMncxTk9MTE1URWduWjlyVkRTZnc4NU52RHluQjlQTHR2eFp3UUNPbTk0dnl3QmVzVThzaUpSTlBHazcxNzE0cDBla1FvT3FoU0tndnlxMmI2cUJzS2w3c2R5V2Vyb3RjQUxUWmI4T3I5a2FVOUNFbUszRmJnZElldU5CbHdEa1QvWWNHVUFvcW8zUjR6YVEveEJ2Wk9xNmR1M01wMGttZXpRNkY1QlErUHBGOEgzcVFZTE5oTVVzY21BTkNpbHJhaTZlcGRvMmY1MWpDOG96dDNGUnB4YkVKUmg4dzltZjNRWmxIczF1RGJnS0ZtYU12SS9LSE5HTGNiQUpvZndvS0Z2THFNbjArMm1CbUJrdHBWczdOTW5Lck1ldGtHU2h1TkQzMWdwOXN5THBiRmM5RVE0N0dpek1tcGdCTUlZdUZkR2ZOWXZ6M2wyQ0Z2cmN4Ync3UGtDNlg0L3hKa0dKUjZ6WnNBb0k1QkprdTFMSGFnY0s1bUMyVUwveHJzSEhueVJEbTMzbTBvNFJ6T01QbUdSTnRPUjRDQ1RvMmc3YUpuZlRLeERnU0hKcUw3aWp5VExwWGZVL2VEU1V4WEc3V0R2RUtoZjZFUjBJbHZQeE0vMEpTaGtCZFA5L1o3OHRBYnVRb0lMVFd4bFRSQkd1QjRERC9QNUlrKzNpQm56TUl2K0RXdDlzK1pJcXlJQW9nKzRqK1l6SjNwZ1VycFdTQU5aNEhjbHVYMzVhVXJrdFJOMHdsdkwwcm9STTZKYnVsYWJqSmxDMkFndVBQN2FSYlM4bXhNbWxRWmhGMVNsWTd0Nk1UaXVkRXNpYjlxN2VBZFR2cnFQNGhsTVp1WVhDSUhPamlFMnVSZGczd2txVEd1ZGVxbkxGNmxqZ3FYWDNXMGhKZ1U2bUVibjlxejRPZXBZMENham5WUlpzL1A4eFdQZE5hTDc1UXRnSWhRRytJQ0NZcWZxakpEMkp2T2JLekhsQWtjamppVnVEdWxjU1FtejAraTdnRFVtZkxSRXZMUk9wVU5MS2VRazNlajFmbjRBcGxVcjFydlFJOEZ1bWZyMDBOek50Z21zZ09TZ01OV2dlcTJmZmdoRFpHc2xSeWl6K3daUmIxazR0cEVlaTFtb25icVFwaVc3QzQ4bGRMeEJtdkZVSWRUdVVtQk02REJZREhlZ1IrVFp6NG9yb3BpNVZqYWpIUm5LL1hnSDlqM0ZGSCs5WnZIMHJidGZxVVgrYTAxVEtzNW8wT2F3WTlpMFFXL3dKK2V6ZWJVSzZjc2plYWk4OXF0YmU5RGpTY1E1d2IzaWMzL1BET2IrNC9mNThHOXVSQjNsLzMyYjZHSXVTOUZjSVdHQWtkTEVhQ293Q2FPR1psUFZWVVMvbnAvZU5KMnFUOWlydXVVdWpaOTdONHJWYUowRUpnU2lkYktaTGs4bDYzQXV2M0tvZjFHb2pzbFkvUG16c1dGVE55Z2JRNkdvMGplVDFiRUM4bmEwSTRyZnc2cHVGY2ZLSEkxclJKd2RLUEVHa2drbVFrNE44aURoTzFiZHdyYzZTVHkyRTh5MUJ4M2RrVVgrS0xldENyUEkzRlF5bkNjWUdQMEtnUEhydXN4Z3B1djBwam45aWFFK1ZXejRuN1FzRmUyOGhOM2hQR1BSU3REUmp5L3p5eklYclkvd1RjS0hYOXEvbkVTRTBBM0pYUmdyUVdLTzN3bFJHSmVQWXRXRENCS0dlL3BUd0s2R2F1NG44TnRqTU9TSFpIdXBCeWEyVHRQN0pJdUlVUTROY2FCVFJqU0hnRFlGVC9ZK210TXFxclVPZkFhRzd1aElsNU1wVHZNaFkzSWxJYkhmNytPSFVWbjl4cjhtUitmRCs2MnhZdWhHOXM2cHlXUDBSblQ1VXpiY2o0NWp3dUxtb0VSNVQvbktBQ0RDK2FxRnExbGo5SXlpZ2FZbDUxVGlVa0NKb0g2Vk4yTVFzWldWbm5ERnR3RDB0ZDZBK1htQktpOGo2OHBLRDFCd2xCWXRrY3Q4UThqZ3RPWGxFdDVJcUdjdFQwSmEvOHliSi9VMlZYV3pNM1hPS3d1Kzh1N3NJZjlWcVNnSWx4bHNKcFp0N0JsZDFUT3lOT25WYTduOUZYVVpjWXRwSlppcGFJMFNXeFRWMHNiclkwaythMFV3eERzUEJUbWtIMU4xVDJSYklReVBPdlF6aHMwT0xtbHFjdXJEV2pKVUNTWW5TSWdHOXRhRFcvVzI2UnZVK0cxZyt1Q3orWjdtcnRWTUlUYk9LeFVnd0Y4d3laQ2tsdE5sbnAwNWpIT2NNUTA1Ti81UldGSW54ZWZnd3FtbzlYNVB1WUZnbTJwSjQvSjhkTFlwdmkvQU9NUlZvMU54VlZnTWZoS1ppRUpKbVFJVGNXUE1IUHZXOWlaejM5QXFQbmF1cFF0Y3NZMUdqWnhjVjBKb1V0dXZJeDZyNUdBMmw4dWJaQ2gvWHlvdERwUE16cFFNYXpTQlN6NXRmMUxlOWVrTmJEVXhMQnJQOTJqMFRBRXc1VW9HWkFYRGlKbEhYeDJKOFQ2VzZaM1ROaW1tMHdZWXBvM2s1S0JNWm4rZGIwMS94TXZJOUkzY1ZWOVZqVlBmMnQ3alE2SkpVcEhUSFdaRXU1SkRhZ0Y0N096bWl0SFBYYkhJeDAyTnI2Z1RmeC84VWYyR1pPTG1aNVBpOFlBUmlSVkxNTThQb25pa3JYa1JQaW8vM1I1bHkycjAxY1VVVDdVdG1vRXRnRjlKd2pQMWZsaUlPaitENkk1VjlrLzZqeDZBcjVyNStsS3lIdkovMElmSzBiWk9saDNFL2U2d05BaVI4Q1ZpNTFEL3hnR3krS2VLNHhkV1g0dXpjMTJ1dXM0WFgvVVZRVEI2K1MvR2EvWlZ1dzdnUzRucEhuWDE0M1p3NTM3OFhRUm0zNTNhbTRVdldFcHRTMDZPVTBnZDFEWUFTaWFEWWsxbTMwWjdIZStPWEZKcjMxUDVFeXQwaVBkd2UxaHY0bkl2WFF6NnhZN1c0dndudE9PMkZkMUIzbTU0UFh5Nk1WWVVjVjdhSHZERm1laU5uRGgrekhxanZCK3Nza24wa0ZTNlFrZkVSSVFxQ2RyWW5QUUZudjZHamdSTjlnM2hLZ1YzeW9nL3pJei93ZjRsWjhZUUxCWUZpdEh0YU1RMmZRQ044cDhFdUgyeURpK21ZWjlJVnc1cTdjL1lHd0N4SHp1Q1RUKzJrSUVLMUdvbTNWNWZMbmdqUDJqNmk4bnYxemNHZk5rTUdPYmErcmQvRDlMZ29NK0NFVGZXMmhHbkZFS3daKzZPL3B5alBrWU5Teko0QlQ1V1MrTTYyTjE0a0lybGs4b1oxTWprTE9LVWRuc1kzT01VcDRjVy9Ua2c5Q0E2QVlObUZaWmsvb2xXS093OFRDbDU0NHZFeVlOQTNweHRRcU44WUxjL3Y0T0NrdStlNUc1a3JGdFFtSDJQWkFpN2NnTkhNZUhGK2t4bnlMQ1VMTWR1NXNwajV4cmw3c1BocElzODRLZ1VzYmdaTk9HSVd0WHdMUVNxaTc2Z0NBKzBEdHpSeTBBakpEREV4MUxhdE83OEtlSEtvZGVOWU1ScU5HcmlOL0tKMjJ4cFEyQ2g5ZFBnbklKb3VSMEh4a1ZFa2l3UVFrTXk0OThJb09LNEwzOXdKaWRVNkhlWnhVRi9xN04yNFlvaFZNS0dTRnZzajArYURIK3JSMjdUc3ZKcjZwK3JvczJCZmFjdmN3em1vajk4bHY1d3hRWTJEOTZVaTVaYVdmcHR2NmxNRi9vZGpYNTdCeUV5UmRBbU9tMHFyaHZuWEtyMnFPWlc0Z2p5QnZLeWN2ODluT0FJdGZSUGpBVXVFODdlc2JqNUZZL0t4b1JDVmRzUnk2YkpVRFZjbVJMZ3VMd2pmd0JzVnNodEN0T3NHUnpmeDk4a2lRbFhQSWFsTWVWVWx1cE1IQ09yWXd4M25WTDBwRUtHTldJMDAzMlZLN0hrWWdDR0ZUNzhtdTY3RUlDdFdHaDdPajlVM0RuSGY4Q0kwd3ZVVzJaVi9hbFQ5VWlzaXpQSjVsWlR4Y3ROSTJBZ0hkSUljYURBUHJ3ZzgzeVBNeENxbldseUk5ZTlKdms0Y0prWHNSUzRpOVFxbjE1T2Vja0ltbTZ5c2h4S29jUXBwNk43QjgyZWtNczh5NVdZeFhBQk50SzBqNW1RTXhnR3VTNWlnckx5T0IrWStXZjg5RlBHSG9kYkRQVUJjbVRtUEZySWNMRUZuY2Fmb0NtWnVZRGdtajV1Umo5NU45c3hvYldWUmRDSVFtR1BDUEVoUk9hTitzY1ZmcldrbXV3OUEvamF3Y0VWd1NzbXhNdzNiQlV6SGowOFhUdGNZcno3dHc0QWRRYXkxNW5CVG5ueXJNWlVVSVpERjhsMHo0dGk5WktvdnRmUG5Pb011M0ZYS0dmTTNYRC8yclJXajRtd3l2NEx4SUVKd2NNN0luOFJKNjN0dVhqSDZ1S1p3OFNhY3NPUUlCRHRRQ1FPblh1QzR3a1MvNk1ZK1BTTzdzd25NUHhZbWltN2pHcHJxZHBJY1NETmhTOFdpcEM2enUrRHRCbzBHdGhJMkRRKzIrdzlqSmp3Z1hDUmdCc2hCRWZ0OXNadTVEWFBSUXFLZFlMUklmMklXRkhxbFh2dVRuVWlFTjNoVmRpUEljN3hYN1p4K1lXdjhiN0svOUZqYkljRDJpTERqWkZhbnd4UUkzYlVuYzY3R0ZlYk5SUnRwUUh0dnRIWEhkaXRLVm83RmtWSzlmVWNwMEZKaExjMkVPNDIzOS9ndmFYVFN4YVE3M1F5SHlzTzlhSUNuSkZmRTVodTFZeStBblpXTGlGbEJYODBldWZBU3RLaE96RGNEQWMva1JPM1c4OWZobnhmbFB6eGtzbUxOejYzMGNMNTJzc0d2Wko4QVlmdXJFU0J2SktpMWJXM010bVROUnIvdFJwcktnUmREU3ZQS1BJV29FMFBqa3NWTE9paFl5Wkc1VkZ2dUhDeDNJck80LzYzTWdJY2hIUXBPVTE3cXVWVXVLY3FteHJ5WGFCUTRFMS9JUWVma0ZqbTBpdjJwcnZJVGpwZ1ZGS1NrTzUvVE5qbGZvMjVQZzh3T0FvanRpZm9PMnBPaWkxRFd2dm5UeVBCeXV0bmRSeTZiSzFxRUJCV3U0M0FFTHE0dE5KaHhrc3k2R3ZPbmNkTDN1aWtYMW93aTZsUWxGMWZLYzRsWmJUOGlXcHN4aDRiWGk2Q2dzcUk4eEFWa2NuZmtrMlREQVZDS3ZTZng3M252QWFOZE93RXFDd0xzYUhaMTM2VVh2N2JZV2U0OGtRcjExRGc3VUlvc1lCNGNIb1djMUREanlqWE9uckxRZk9pM1hFSmZpUDl6cTFDQ2d2ajNiMEpLcWRoMmxmZS8yWFVYbGNMNEJKQ1FLTTRjWkhPV1AyK2tjanFVU2lTWEIwT05nRU13QjVTbHdGUlBhR0lPUjZHdkFyQkpjWDZYOTFTODFBcmhrQWhtZFpNU1B4NnJhdVVrVEozVHBvemw0MEpMWE81R2tOY1E1YTZQWVBiYnBuRTV4bXFBVHAyeTlhQ3hKQnZ1cWJneEc2UU9RZHptNERIZ3c4clhpVENVMHVBWUh5bmhndkhIZkMveWdvTHRtSVYyNTBKalcvQUMzTFJiakErU3lZRU9RK1lJcXNKYmtmYWpqbHlzNlh1bDFLYXJJcHJlZGdVOFZoRjNLSlNhMU1iNzJ6TnlIUDNMeFE3ajN3dWJOMkFOdXNSSlRlL1JCMTc2dkJSOU5mZ2VuN0FWTm5OQ0trVXAreE1ZblQ3ZlIzWllDeG5VMnNwdTFmZTZZc0lHUG5aeEc0OFlRRVVuYlhRU0NOZzdONmtNWWxsay8vTUJFTWFYZDdLM0g3VzhtUEpHdXNob3NnM3F6MnI2c2dZT3liaG1Fak1BTnRUVUtkUzN3bFpLRitBZEtySENYZHBZUkFQV2x2amt6VVFtNDZLN2xCNUtUelAzVnR4RUc5MThrbStNbVJxajVJdExNQ0ZKT01GQlp6QjFpOW9nVGNDbkJyeU51T25yTEVKZzQ4MVhIdEpRd1doajBmdTZPak1wWmVaZFJlVG9CTDZoRGUwdHhWOWc5OHdVamFCY3phaDR3WFRta0N2N2VQVzg1RXNZY00zQXltTUhtbE1RMUZKMFhld2x1ZlozM0Jmc0EyREF3VmUrRjhpQ3JTbjR3K0VBTjB3eFg0THNiQ2RsbXRvSks1TEREczJuaWw2K3VTOGxia3hDbWdyTkR0NVM2T1BrS1FPak4vcWtPOHdsMzBTYTNxZ1RSSk9TTlRTUG94aDFWdEhjWnh0aTBFVkpjNEFEeUxKUWdxTXFqbzFoemoyTURZTWJZSXU0N1BHQUttME5xU2ZTYTlETkwzTjNDWGVzbFFsWnZvUU9XODlOTUJsZnpZZTg4Q1hQRnYrMDk4NFYrTTFyQWhRNGpVSkVUamgvS2I3T2pjTG53TkdieHRXWlVqYVBqOHkxSW9KN1poNTE1cGZ3dXJzL1VWNTVNbHRONHpwcjZIeHZYR3VPbnBXMlVDQnFnMkNiYXNIVmg4Rm13aGpjQ000RldGWThyL09UUGhtY0JVbVhqN1lkc2RHNXp0S0lPKzFtVEZqVXNhREhpUjBHaFdLV2U2NERmMWVZM1N1SS9KdUJ6bFEvVnJBVmY5ajBvN0JrN1E3NHVEb2QxS0VoWEJrK0hzZzRMYXFTNHdGL1RUSGY4dWNIWHBkQmQzZThSVXREYlRiR2orT2U0S1BQaXNoS25yVHJQeUR2MXRVVzNiZUNyL0VOV2kzVkFYZlFsb3h3alhDSTAweVZPRy9Zb0dadU1SRjRTaU9MWkJQWEkwdHVVQWZwR1Y0VWVVSlVpSWNGVWVOcDR4Y2lGYTZURCtmcnhEOHFvY0o0TjJJTDM2T3BMNTlPM1RTeXV0aDgzU1k4Wkw1azBBd3RsWXFnK2pjRUdRQ0h3UjlscTh0cFlmT3ZOUVpaOVZwcktYeGlDVDR0YmdjR09sZFlWa20wYisrZWtYbjJjRk9lOHM1RnlwL0JoQjJONGxiSFoyUkRXZUpnQ080VDZnSjNlbk5sOXUrZWpxeGw0ZUhNaHk4NXlTeFcrTjBrUHNDN0MxTGppaFBrVzE4bkRnTUpWNEZFWVcvYTY0T3RSZ2Q3cW9RTzloSE9sRFBtd0s0blQrcnJFTitYbUdTREw1UzRQSjMveUNCMWxYYzBWbHE3WnVmM1VSQ2kyRjZQOEJjRmtRMy9wei9pUHhGNHk1THFEOTgweFhtMGNqUHVNS2FaMm9rMHhvckpoSlpGNGlRUW12bnJGUTd3TU9aaEtiM05zSGpDVUZtVTEyQ3oyTXYwdFAxQ1IyR2d0OFUyTkdZenp5MWIvckRiZm91aDJwYmV3QlpSV1pkVDAycHhTc0Q0RHdET2VndXgwU1BMSkxxU0pjU1p4dG9QQzNuYzJMZ0cwa3dXS0s1NGVlL0U4UkFMNEpqYWoyZmNoeUpmakkycmxpTW02QWlTeWxZMUNNVnRFRVRWRXFIS1RaM1BUMFVVeWFOVmpuakY0eDRZUEF0aVdwK0pNT1BSQzJiM0JYN2M4NWVDcFNJVzlkMzBhb2VtSlpaaGY5SDRkOVZPTHVsQ2V2ZGc2NHVYR3RqNzNHY2N5NXBEcVVFSitWZ2tHZXpNTk1oaHFMbXRBVUxpZlA5eFJmT3JMZG14Rm5JTUo3TktTNmpkelF2R1lWeGxpbHAyNGsyNlROTk40bUVFeFJOdjRtck5LeUc1SlJyMmY5SXpjdXRyZDlGQU1uaUlEc0MwVnU4VzBqbGdOUnhmRTk0eURMZE8wV2JCNnd2RTVabnd1akxIN1duMEpjSmM2UHNCRFZVZmYreFJZcjgyR0xsclZzYytFaFcwTU82ZFR2bWgydll1SDhnVnlFbE1qMmoxbFpnV1ZFZThKNXZUZTVYZTZzQUpsb20vQkQrVUMwR3Z1OVJ4eUVBNWtCb1k0R0JEQlNRZGN2VmlGVE5CU3BQUXo0QXMyMWdvQWJYWmxnYWg0bGtlSkpuMzVKZmJuQWowT29WaHNtRC9qZTk0QnI1QVFkaWQ2MUpaekVaRllZbmJST3Nla0s1RTYreUxiQXdaVkdxRTcrMHlKSjM2WVhKZEloSkgxZnBFdjRwL0FiVEV6R2txK29mcW9YcGExOGhuaDVHL1NManBRMmFOR2xTVDlOZzFGMEpFK1lTd3RCbnhXMGhOSkhkemIwbXFhSFdZRjBWZGhUdDZ5cmplRlJvRUlyaHljSmUxWkEvcFlZeDQvbFVHSW1LNnFIaGlCVUY4WXg4SDNwdnErcE5vN3lDTXN3cUdTbWVPYXFiMlh1dWZmdjhVbnRpcDRLWnNYZ0VtUFF3NWdReGlKLzlMeG1IaDNHMFpYSUJxYkVJZXg1OG51MzRXbTZnTnRjaFMvbXNHUW1wSk8rUFlVUHFDNjF5N1laZmdFb3AvQzFCb3BTZzBkQytKRVJtZ29mV2hqMSt3ckN4Kzd2WDZBUWpvSjJQWDdWOTQwVUNjeHNkUTBYbVZkdDFsdjJDU0E0OU9KR1piM2ZHeEtJQ3Rkdk5MUXdaZXJaZmhNVDlXc2w2NlNCdXNJNjRKbkJtaXpQcjN6V0RYNXZPM3g0MHowQWxpbVdwQ0ZQMTZKY2dPRmRvWmZUYTZGbk5tb054eUdZMzZiV1JSeEQ3aTh5bVI3NFJCQTZ4K2FGdlhaSTExdy9DWjRKVWdsZU04aDBiNHpMTnRvOHoyOGZuTnFWYUtxK1NrUGM2cUp2RHNTYUVJZ2xDTzdTZ1B6MHpZakFrZE92bTdhVGFMLzAyQmdxYm54TmJTODZidUcvVlkzamt6UnJ5TWtMWlFralhUcnF3NlVOak94WksvOWh6dGFUb3NhK25Xa3dDVjduV1FXNXJXWGtyRUdWcjYreG5Da3hxTkk1QmtZS2Y5U2kyY2dxTGRZM1ZOLzltcldmcUUxQWxubDdmcis1SmxFNUU1UWdnM1JRTmY0UDZVVUp1ZnRtbkpXdU9ST21paDFISHBQdVE1VjFuN05ud3NyM2VxL29YM2Joa292eExta21xVXcrM2s4N3BLNUlpakZ2ZXV4Tm5CODIxQVdkYkdnRWR1TXJCTXNuczc2MjVvZ05jUGs2QUx0SnVBUG5NMFNJTWdyZ0RidEkyNDB2VkgxT1JmMGk3Umh0YW1ZUmt0NVpNaTdXbGgxb2ZoWCtXT2JmbG1xOFRiT2M1dElDYnVYSDdIakF0YkNzYy83cXA3YmYwdURURFB5b2JNZFQvZFovc0tQQlU2OG5aeXQ0RnYyam1sNGNlcFpOTnIybnA1aGhaRU4reXlvWkhNaEwvck9ZSTNpM1dTR3dRNFZsdkYxOW0veW8zc3F0OU95N0dOdEErWHhMOWc4U0cxN01IbGZRNTdrV294Wkx1bmM0TGpaNW9WRjZDeXUwZXNxa3M1TjF1RzRTVFNNcHJGZS9wbFMyN3ExNTFHMVJjbENtNndzdHd0U2ZMTGQ3WEFPSDJVV2N5eW9UYkZoUVRUa1llaWRIaWIrekFEckdyM05PRE05VTdrbmZQZmZjY3IwNlFRTmgwOVFGb3NTM1JrT3lqUjRUSmppQWxVK1gwQjIyNm5vMFdqS1RidGxwUlBYSi9LMU9qTTN1RTF0M1RlbnV1b2pwRDEvVGh5ZEJnN3MwbjQreTlJZXhpdy95V2Jvdk1ZZFkzV0NjQVYvQ1cxb3pyNk9pc0xTd2pzU2pNN2UvMDJSZkkvdEl0QTNWZndRNUtDM3N6UW5Zam1PQWc4TnozYTQrUnVxWlNweFM0SGhabXcxUWRCZysrMFdhNW80QmJwVTBVUFpSbk5PdVNuM3ZjbkZodys0UFBVYzFKY2prNXdIN0xjRzYzaTVxQ2hkcU9Bc0lqczgxc2NEaWJnMHoyR3hpRVRBY1dJbzRPZWVZOWdYSW9MblBKUEdwVGFhZGVlcmZ5Q3gzY2JMeWdRajNQL1RnUk1UMTRHdC90c292SFhFVEtueWhhQXdCdkQ4OElpSU5GZVo0MjlzSGxiaEN3cU02U0srSHlGOU5rQnlkQVJxWjRJbmlQS2JUZ3U2K3lZeGthU1o4ZW9jTXlsTUNZYTF3aCtoclpmRXJsU3ZwR1BvejV6QVVNa3BGQjRDT3BtVkdsRC9sRlYxelB0cWNKTFVFc0N4OThCVHl0bVFzeGxNMzJqNjl1VU43QzJZbzdZUmpzUU1CY0Myb3Z4S3RIeGFoKzhXSXQ0MTdqc2tLalBKR2paZE1NbHJyeXlGZUhvRUx5V0pabWVtUFR1NUdOUTF6RVltck11QVNsWGFPY3pSM0xVR3o2YUdkbXBTcVdzdngyWEhCcG83T2M3YktwWFo5dmVsd05FdEpwNHpRMTYwWTMxL3dhWVVCa1BJa0pjV1BEeldxVERiL0NWeGNxZExTRVkvMFBlZllGRGFTNjNyRFQwdUhXTXQ2bjd2c3hnV1dpQjBORWMyRGs1emEzai9STXhha3FVSjFSQjc0M3hhSWM2dVMzRkttWklVZ3hRcFdFZTZKd3VSZllhZW5xblFNdTNKTkt0dE14UlovSERSc3hkSkZpMU1OVFNvSExaVVBPVmFZQ2RSMk1oNGozZVNENW5MTE9neXJQNlUyemYzNXg3amoxNU5PNGFXZm5wOTkxbjdzNlJqck5SZzZxN1hwTHFqN3Q3ajBSa3pMb0tYb1AyTnd1ZFh2SHVyMmRrWXRHTWEyWndCbFZSUHZFOWNwMnlvWStOUnJRVjV5NFdCbXZsSnNNcHdaMU1GZmwyMkVFdVEza3g2TWZySnVhSmFBTFl3Uk8wc1FZdXZsTkRveUN3SytLek9hb09NbDRCWjZyMzVWZ0hxTUhTM2tsWkhpVmhjT1EyMS9WenV2TEVFdGtyK2o1NzFqOUVSMlJOdG1aNDArcXRXSHQ0YytNTVU0TXA5dFFscUxwUVNnZUtTV2x6YVdxOXdGSDlaUE52YWk1RndUbEVmUlBkL2ZvMUN3WUdhajI5SGRHdTVrNHorc1hjTmlJS2d4L1BDUDMraGI3VTRzeWJGOHRNODNIeFlrTnN2d2ZMSzFxbWN6aldDa2x2c0dvUEovZ3VzZTNReThyOFZ1SzY5UVdMSFlQNlRYWlpOUC9kaER5OE9MM3hsZ2VqZk4rQ2xYMHZBZndMZGx5dGR5K3lQNjhCbXVjNm45V2lWSFdRb3ZQdExOZUEyUk1SQnJITWpQd1hIUElNd25QeXpPdFplT1FxbDVFNzVZMGM4SC9XVW5wK3F2NE1MVjhnTTVGQkJ1aXJGUVYraDNmemhYV1VtL24yeUdWNFdRa25wQVNydUd1SStQSlYrL2ZyY1lBbXFWSEVKQUFqYUExUm14NUxjTXcxYmQ4aWFBd2VMdng2c1NSdXNTWkpCQllrYlkrZU5vcHZBTk1Qc05DbnV0c1diOGVSeFE0NTZEMjA3M0luQXFLSWNqWXRqdmk4V0oxTlJGTEIwQlkvcllDMUMzcm5nNVpQWUVNS1ZPTk9GbkNXZnAzNHppZW90YzUyVVhDcktKQ1psZFJsLzdna0xSS2s4Rk9zKzZ2Wld6cXV2UWh2OXNqV1VtUFhSSXBOdE9BQ2pQMEFoL29LOXFhK1J4Z3JWekMwbnpkVEtwOEpPVm1JejRTZEJGMHNjeERGUXJOVzRLcS9jTFh6aU9RbXMxSTF2TnlWTUlhVnFIbVI4Qk0rNTlZMVNqWjVKTm1Ba2Y5aUd5T2ZpZ3dGNEc2V1B6MWd6Q3FvWEtEVlVSNUorNmQ2RVc1N1BlK3BCTjdjUHlzOFZJcGRjWWVjcmRSOTVzTEFSK3Y4RVhVZHNKV084Q21uNlVoNkw2T01WL3lmSm0xampDUm44NzFRdjlDb3B5UUZNeVdwcktaSTYrRXlrU3J0TldETEVZSExYTTRsZlhoYm0yMmpVVWVSa2xoYmdPTEcrN1B5bWV3VElaTU9CVWF6dXByT1drZ0FmZkdjcURWMTlzcUd3M2dMMnl1VWF2WHgySmNLMVpoeGZWZHZyUjRWeFlWaHVnV0I1dEdjQjQ1ZUE5SWRIbmpteFhYb0t4S2Z3dTNMQi81RU9uaFlHbmxrWnhmNkZBVEp4ZHduRXlIVzBnd284YU5TOENjcHRuVGRKWVdJNnFhYzFCdG95b3VNNFJJK2tCdUI5Vms5SUdvVFRxdE9jc2dxZXRnZ3FCaXlJMVNscGgvY095OVB0NVdLNkpwTkdKczVrK1FaQlJQWVlpakxXYld3U3Z2THQvaDdsZm4zNEtrS3hUMFJQZWtSRVFqRlY1Rmp6KzhKY3RZNUovakRhQmRlcjhXQVZLS3A0bHAvVEpQeCsxWHk5K3YxSExlUW1NZ0lNaTk2WGFOTWRiZi9xbHhUZFB3YlA4N1lXOTFsaFFVU0J1WEJiZ0lpaVpBV0NlSFExYlFvWTQwaE5naXZLVlBybDhWNG9Vb2o5cXFNVWRabWM0SG9YaXk5WFZFeUFSTGNKemZodVpYNFEzdkJBdjRoZ0l2ZXZSaEdCZERQcENoejRKbEg0Wngyam5oMHdqY3ZkOHVmYXY1eWpyKy9XMFdiaFVVaXlrcVM1bm1XdlM0QkI1VjJnd2hWaDFJYjZhaWZNMFhndzF0YWh2SkJZcjAwdllZdFhuVGJKdS9LQnJTbXVIQU9KS05FcEh0RW5mdmhKZ3NvV1hhK2dhNUxRQndvbk1MSU9mNWtsN25vUnRQUldTN2puZWt4S3J2L09sNXB1UHpKSU9ZUUtUdHh4QjFXaDVNN3VuRkdrQkh2eVF2K3Y2TWxTZ1RkblBORThYZWROREgrREVYc3YwZG02MEhCdWd4ZEowbHJaeXdQQUVwWTlPZEtDMTRJMnNFcTlweklTUi93TEJrZkgrbjZVTHJaVlJSRHVaOHpEQVNVcHF1TmtBcjNpTDYyUDhZbDE1ZTdrdDNqVWkzR1BwUEFadCtiQVlqbklBc1Q0YTJqTTBCUkxNbGxmWll3cUVoNzFWT1VoNTA3ZEIrTTVhdUw4RDJYRk5iN0NEZk5xQktTV0tLTjhSNkJ5YjJ2bkYvcUNsdVA5VEZTbnVhQkVsODBIZUU2MHM0ejR0d1dqeDF3SGFGMklpTk01QTVMaXhsSUxPMWo3Q3VWYkI1TEJXRTBCb0ZCMFc5cDZDN01RRE5CdnE4V3hONTVxT08vajArZnRsZDBQTXFqaVlsUzJMcTYxUGJNWnVUV1lpdXE2RkVXc3IvQk0raUZ1L1ZNc2o4M1JWZ0VvREJ4bXU0L3greEpHaStLZTVVM2YxYXp2RjlNQTJVOXFzRTBrSG12VnZtRlhrK21FemhxRHplM1U2ZHZiR0hDTVVmQWdiaUI2dGxGNmc0NjEwVXN2bDd5QStwanNPSCtFNTB4NnlRdFJuSFd0UkFFaEdNUERCREUvV3BRbzMyOFc4dlMrQ3h3Z2t6ZDkvS25iSUFacFUrMmg3dVZVaEVkRXdqTDlPUzZ6alJTWkExZkZwZ3hYamE4YlJvQkVEYTRqT3VheWZBOE51bWdsN09JNGlYc0VXbkN1UnM3UlRrb0JZOHVoeTNvL0xwS3lRWEIycytPZnRYWlJoYmtkbFFrdWFnTGFMM1FPT1hIRDMvMXdlZ3VwS3RsUmZoSGxyV3ZuMzdmb1lnL01zVjZ2WXB2RDBVUjZJZFhNQlVWVzhJcDhJdThNeFlFWHBuK0ZlakJwc1JrNElrckVwcUUxZXAvQTNzc1JyZWlkNEtudnUwcjlYa0RKbHZlLy9KdTlTMmRYNUR3amhjc281SSs3U3o5dmdlazlwWExrdmNzK3lTZEtOSG9ySGtmZlRyV0g4QWJ4Ymo0RnJTZjVzQXJKbjF3OElOeUtYdVh1OGo3OFNFTW5PWUtzQWpKanJxOGZLcXRRUWZDMmQ1SU45ZUJWOUxxdlNmWERrZmxqWGhDY00wS28zQ3pMS01makcwUmdGTm9PTkMrZGxKUTgrQzl0NmxFVkR3UXZpa01pQzNDcXdMcDQzdk1tNmliRkdLVE16R0dERk50ZUVBWHo2SWhGMDJmNW1ORmhjV2xVVXNNQjlLT290WWE2TTdrck1NWEpBYjBpcmMzN3dIYVFWYjhhUzJkS1M4bURtQ081UlByT3Jha0VJSElqcENITUtSRmxUMHd6T0dXZU55emtwOHJHZnBpNzdUaEZsTUtOQ05kWUNQeXJYbXlGRVZTck5MVW53bk1PaVpvUEUzTTZQcElnRHNNamxHbkFDUFJ1UkVQOG8wN2wvOEJNcnYyL2JOc3lVZk83Y1dlUnVaOGl6aHNCRytqbVU1UzY0clBzTFdnTXN2eUdTa21tV0VzeDQxR3pUNERpaUc4SVlsbWVLWWt3SWZFemYxQzM4Vzd6a0RhRlJmbTdWc0RmclE4NWNhS3k0dGJZbXl5WlJ6NjV2OGYzRDhjcjVSSWJSWnJRNTYwaUtzNVJDSm12U08wQnh0SnMwUmZ5cDRYQk5mYkl0dVBsdG5xaHV4aEFlenkzeElieXRDVkJjeG4wVmVkdWtQRURhNnBoTGpibEhuS05aRDNkMFpRSHZJWjNVS2MraHE1R2c4TDVqN0N1TU9FUFc2OFRub2o5LzEzRkxwUllXdzhPWWJ0K3BzVGJ1UVBlbVNnblFHNFM4N2FtcWpEdjFCSUNkSURYMkJyUXRpaGNwNDJQTmhlREhSM09yM1dONFRCNnZ4RHh3QURrZkUyR1hnUEgrQkoySFZPb2RTK3ZDcFFXdG5xTHltbHFHb1BUZTB1b0dmck5xeVRPcnllbDhWTW9DVmo2T3NZcmE2QUF6Z213WDlrYTVlaTJvZkd6Y2ZKczJEajU5dmRMM2IzRzd2NlczbW9zM1hMSVNXOGxGOXVWYXNpS01oTGJzV0VtYnNjTGJLaW5ZNi9QdHA5WXozeVNIYnlTS0JiSnQ4bWpaTzhCcnRBYzFqZWI4ckJKM0tlUEJlSmJqNjF6UjRWa2F4LzQwTnJEUm1LVHdxTU5TWVhZazJnWnJwRlp0TlcrZ0krZEJWbVVObWU5S2RuKzdMUVNOaWVGOG1rYW9IUlV1eFIwZWRFUmdqSUFiQWoxdHhkTzh1ajlVcWRwbUVHa2JyQXJzdnJIbWloRE1GNXpjRzFOM0FiUzJ2QWdmUmloTjh4OFhIUUVEbDRMTXVVY3NId2RrVXRzYklDQ0dBa3l6bVdocVV3OXU1czliREIyZUhkSVV5TnpidzhFSHViekcvVlpQVktaRnNKelV6d2NNZ0ltQ3FzY0lLTGIwV21OWU1Dc1RYRVJxLzFrNG5YMGFVcS9rMEdrR1BHaGxuZ3RLSldETTg3TW1YMi9XVnE3NzZ4WGZHcGZXYzNqSElkZUcyM1U0SEN6ZFZCWXlzdWVJVTY2ZnRWZFRJQTd3RUF5V1BsUFk2TUwxQmxKU1dtbWVFVFdJZzdsdXFIVFM4bU85ZFVITldJbnludEZNOW9tUEFjR3hqOXpsNUc5NHp2ZkIxMkN4c2swSlMrcm9DUnJyREI4SE5mbkRZSWZWTXd6Q2RVYjJNN3ErTXpTYTJuRnhxMExNNWNXaXlocFZwclZNU1RGN1BYcUpjaGFCajM4MGpDVWViK3lMdGFWZnVOTUJ3dUhmYVpoYzdLcExXUEErNW9UWm1rWW92cmlJTWhRcG1rOWpFcmpsNEJpSVp3NXFnelpVdTNqcjFpVlBDc0hDcTJSbGNnTnNoMGFwMUI0Y0VZNTU5bFRSU3hmd3JLdUtLWTVTUHpud3lkZXdHakVxUDR5MTdaenVOWTllMjFQUXRlT2ZmUDBTajIwSnpMRUdKWUhYZEJlR1NVTy9PWVhyZXBZSks5VVdWYnQ1bkJROEs3NzlxN1h6d3dUK1JubjhlZy9LTXdGUDNjTGNlOTdEZ05xOExyV1hwVGJmNnI2bjBlN0N3K3NuSU42STUxUWhHSGNhbnAxZFE0aHNjNjdjUDdmbkszSTRKTXpsTFllMXJUdzNFdzd6VEdEdU16WE1NZy9xWjFsSWFTcEY2SVR6Yy9jRjgrQjdBaE9waG9YYnhRSGFiZkRkS084UWJxTTRsT1BnUU5tc1JoQUlUNHJ4WExvWmFNK1V3aTd2bEdScWdxa0V0bHZMTGxHUHpTSGFadEg1VEZJV3FIdGtobnlybGRGZ2JnbjYxamZyZHRPa2pUcUpXOUVSTDdwWVdLU2NRSTRNSW43VHBIUTBDYW4wd252a2hjOXNxMUI0T0M0bWtIcFM1TkN1eURkUHNBQ0k0aCtTNXVIMWk4eCtRc3NuaWJUY3FWc0JzY2JhYURuenhQd0NYcTZiVHpBNEdRSU91RXpJR3JFL2xCemprcE1ybnAxclJUcVJGNWJQV3ZiTUNoWXY0TUpIeDhTeHhuc0ZxUjJGNXpDQkVERk5kNTE4bVpzcHhsSlZZY1dyNTZ4TGFVRXlndE9md0FiQVhHcFRDRjRUR2lNOGNJUDVGSmdzVGJBaUhMRzFIZjZzQlNsY2dYa21FK0Vub1FyZEFlOTRzV3dxTUJSRVRRUTdrTVAvVGVwVHpra2RuakkrNWkrWnNpaFFwRitkVXBLZTMrK3ZMVy82cTY3cXdRWWI2b2grTHFneHZqUERQZDFyS1p5ZjZCZk9rT3ZLVjRaenhxeTJPTVl3RWhVZXEyMkxkTVYxeHZhNVJyNG1Wd1NpdzE0enEveFRlMTJlZnE5TDhtM3dvTVNLZG5pRDlWbkQzVXozRUNVQldURnN4eTBha3RwYzRNdmdIU0ZGTXJjNjJVbyswdXVCY0E0Z1NJQVZqRXZxUnhnd0ZxZ2lKZnpMeEdVbTdWYmhRWWd0VDMrbnRUV1JRZ3JpclVtQWtrK0lQMm1oYzZwbmhZbUVjdVNBN3BZMUNTQ0dzTklRR3YyQ1luUUpKVDNWeVFFMXhoNTZnMkNtS0FCMWRxTnM5YlJDdHRIQ0h3a0pjcm9ZbG5sNGF2VEJuK1llWDN3aFBTTTdZQmNDaEpxUmlCZzdHZ0hEU01iOUpOZ2o2ay9lM0VWQUQ2OFZKZ2JsZzNuZ204YTFGS2lZL2ZVTGFBTHZYWUlTOWdkOXlCVGtqTzhKWmttSDVQaVVUWW1zWEptWEFQVzRYMWRRM0Q2cFlXc3lnZSt4c0hPYmoyR2VBMEkvd3R4dnUrYWc2TzN6cGk5WGpzRnhOaUtrWDZhL1FBaFZQYURDM3dZNmJpV3JmTW56M0lZYXNuSkZzVHFuUnBLd0JvWUVlVG9kbmxEN0dXb2M4N1VzOXNFT1lLbkRrYytRdzgxbXZqQVArZExlSmhOek0vbDY5akVEbjQySjB2SExlNVVwZDU4cjB1UFI2b2Q2b2tVcFdpTGtuclZBdjQ1L0RhSTB5RUFZMHRFTndpOWpqVVhaU3MxSTIxN1huc1VNdzM1VG1ReEVJODZFQVNncHZUQ296bjBSSm1yeVBDazRlTWRNMlJpL0RBVkxkaG5IcTZmTEltOVZPMmhaV0tDRVhvc0RsUmhCQld1R2c1ZmlXVVNvZFJ0Y1dBZWh0VG1ER3dCOHpEY2hEQ0V5YXNPVVJucktxNG5uaHdVencxdUJBY3l5ODlvQnF1YUxwbjhCWnR1Ymh2QXpVVGl4YmtvWlJrQStweDFqWFRpQUtDZHFlUmFwMlFENXJtaEJhVnlqUy9hWmtFMklzaERnc09IblYvSDBWdXYrajIwS0RSQko5VHRGRldvZ2VqMFFuMWdiT1V2SWIyeEdkaWlQVjFNY2JoVjhETGNiY3FndHlUbUNCVk1CVlhuMkNxMmQwalRlQW83MVE4OEJMY3hESGFRZkRyR1RLOE9sMWZrejNvUGozcytobnVnVUVDL3ZHb2J3OEZRdGtFMkZaNzMrVTBBcHB0aERoTU1RMi9mVEI5c0lYQ0RqeDJnVjJOL2hsWG9naS9VZVozSGJhbUw3aU5ZUzEydEdWTnFDSWY4dkdBNDA2cWdlQXF5cnFzdkRIRUI2dWI3dUNqU0V1K3k1Vlc4ejhvQXE1M1NWVmFJbWlVbFN1ei96Mlc5YWxmZEtnZzdtMi9hUG53Z0F3Y2RteG1XL1VXclRXYWxTN0EvY2lSdFlDRElYeVhJQTA3bEhZdHhPTHJRcmlVWEFUcU80T2xqdjZWeXpSQ2xzZzlOZFdTa0pEeUtkOWIyWkI1S1BLVis0Tys1NzFCNkZROXFmWDd4dFVZY0hJemZGMTFUbUpoL0JWSUk0NjRSU01ZWFhjOXdjNFhiaUMyUHpjSFk1Z00xcUtSSU5kUkVJTFYvUlVqdnRvbThzemlPYTVGMkJiamJUMjNGRDJJbDZMOVFKVmZ2aXJVL1VBL3V2cm9VTU01S25NbDcyTW5MYjN6alV1THZPMFh4elVKeHRuZy81ekJ6WnowSmg0ODg0WFlmM3FFYldyQTBYNzY0UjdSbFdWT0drZnBxZkJyOWZiVk5wVHNrN3B2dHQzTC95VDZDTWhIcFdiMDkwVUV6VnZ0Qk5zZmpqYUpGMnRqVUdjUkpHaWUrbkV5ODNoamk2L0I2SC95aVBTdHlZNVlXSEJuMFlYbFdXdEZvQ2JtcXJKOUQ0V2wvaHdiZmtBcTQ0L3Jhdi96MHRRZWYzbC9Sc05iVEpzV2ZUd0dXbWp0ZE1Rc0l2OFkrbG5Bb3k2YkRScml4RHNleW1BMnpsd1k4REppSzJqWWtBRFlNT3V4dHFpczdPMWcvSCtDUDcxcTI4ZlIwTU11RXRBd1RodnM0Z1NJVmQ3SlZ4enR5U1VSNFpVUlBXaWN1RmpJaFBES1ZCMmdzMFpuZVFxdkVOOW12YmpEd2FxdjF2UitWMVByUEMrZlNPUDZ6bWd6d0xqL01uV0R2UTdKUHBVcU1HOGlialk4VGlib0RtLzJiQmlhdUN5ZTMzNjlPNWROQ1Z5b1BveW8xa1hhN2RuRFZTU0JDV2xZSlc3OWpwNE5hNEhqWjB4M0VOaWFrY29rYUlrbUZNQURXWTlqL2lwK2J2MmpEcmRiVE4vSUVGVzdNTEY5NGROVmtkaUZFQ1VkK1pmU2pWeis1MHFDenFOYjYrSktwcTdqWU1Eelhmdjh0cjdXZmdiSE0wcWNWck9xbWpVYUwyK3JwVW1DK3BlSEVsVXJNRXFBV3oycWRnaWIrZzBxZWFmVXRVaWVEaWlNWGl1UDlyMFp6enJxdlk5YXRoN1EzZjB1eUFVZlZFRFFRTEllQ3RkV1hVWjBXTVpCLzVDa08yd1dlQmZWK3JiQjdyV3hQaHVGZDJDcHB2cktKem00NHgxd3pHNjg0VWxsSHREcm1tV3VXU3NhWVJZd20zdHBTZGJpbldaZUU0S0JENnZxU2hJZ0lCeDNzOG01Z3h6OW5YaFFRTDNRZXo4K0orZklyam8xTGJyRWEyL0hnNi9wZ2l5azZOdUpTNFJMQm9xQlNaR2FOQjBFVVdoWWFyQXJOUDNVZTkvQ1VtdjRFdFJDWVV1Q0EyR0FNL3ZPMERGNDVQbHEwT0hiNHBtdDNSU2VUQ1VlaDB3bGZCVzV5OVU1SG85Zk1FQWUxZkUzSS84dHFzZUh6YmNOZEp5WFIyZVQySUE5NE1iVU56a2ZBSVJqRmo0Y0ZjanVQeE12eENOZ05uRXJ1V2RTUC9jakVpSDZLVGdXSXRRcGM4T29ubXl3aDB6QUVCSHZuT2NMWWM2SThGYWF1dXl4MEh3YUZUWUxkSVBMOG1PUGM5V2RtaWtPWHNLK25udlZVRlltbXhNRDhobzQyV1hLRmVOanp4Y1duWEpkbGFJeVpoaVhteFlJY0E2SS9WOU5pMXI2ZitKL0VtVWxBOW1RemE2a2l5eUI1QjhaRGFZSmxWQ240SlZDOFoyV0Z1eE5tZ1ZQV0hFblR5aGpucEhUWGFab2MzQzdSajlENGI4YVZiNlFFcThJQi96NkhZSVZXNGRQVzNuU2dxam5SMjhGWWpMT3MraUVtRXNKZ2tsMmVOQ1BhcTdrbzNnTUNFeEwxeitqVDZUU3FhZW1HRXpUQStha1hPakNhWHdXMjQwOXJyaUlza3lCcUExN3d6Q2phRFVlSkNtdHYrSVJKdG9ITGJzbHhreGJzUWo1NElNeVZyTjh6Tm9NZHB4eC9ydjl6RStkeUNLTkY5cmhpbmlzNWFscE13MDN5aWpXcGRsa0hCQXczUlp3b0lqUWNJYkJMdFRzTW1ya1VpL3ZGV1JGK2NEVjhzTkN6K09WS052b0lzUkNzN1NERm9NSDM1UlFlU25QMTUrWHp3eFJOZ1BUQ1h1WnVyQWNyc1diK2hpVnEwd3ZGcGx2RmI2dlFwRHN3eU81eTRoa1ZWRlBTSkFzMGJ6Y2ZKMEJUS1oxNDFqVjd1Q3ZCM0svWFFoUzRVZEpXL0xYS2J0aCtZcVczdlVJRHlnU1N1L3FId1pQZit1dENTSDl3YTJOSTJMZnZ0a2RRLzVOalBCRXkyeUdtK3ZXdlRDMUpxVURtaWJENUh4TjdZZml3U0txdE1lMlo3YnFPWmMvWFArOUVqMnBBaTErVmpoZlVBb0NKWCs4cnRxdVpVZlRQbjF2ZWFkSGx3M3FXZ1VOVlhLeVo4S1lFKzhyNU45WTl6S1JTcE9Ua0VmVmJlTG9FS1lUSGk0NzBIZ2pIb2hjTzhOUE03ZlZHT0xkZy9XWUhyeVpTNHpKRUxVbWkyN2xKY1FaSGRzOUVqZmNLL0szU1VtZTZXcGhMUTZEUmdSSUZTdTI0WU1YS1JnaTJrR3M0YlBFSVkxZENNTjRvQ0hYSVQwMEZoYXdjaGVhd1VQQlJEVFpSNGhlVHgzRTJQZDZWQ2FyOWIrbE9oZ2NqRVN4U0d2cVZta3Ftei9TUXVTRWc4dTRqbEMrb0FGSzdzUHpVYU81WGlGUHRrdEZLUDZDZ0JGeVdIUXdwTlFBMFo5VDhoQ3VVbDFxSmZKSzA1WW9DcGxGSFc0REpiVmR2RHZyNHQxT2tLSUxyNFI5c0hlSzE0TW5rMjZQR0svdTB6ZUtNVm4vai9JcGhobXBxVzVDR2trZXo2dVZrN1h3YkQyQnRGSjJKUmJXK2ZNZzBUOENibHFNQTJDYUhGL0J6OUNRaFd4QlR2OUtPVjd0T2NveThURHZteGZTcGFyOVUyVU9RbFJZQzNFZUlFOEVwWHM0NDVuZzdUd0NvZW92R1N6b1VMeFJRaWhWUW9LS1hROWpWMlM2Wk9HQWI4d0s5c2hFb28vd240eCt6N3o0cXNFalpkT1ZHbEFxanphM2VINWY1S3pETUFTSThDSzhKekFsRGRJeTNrR0Q0d3VqNHVQMHhwK203WDREcXkwbHBiZmNIcm5VelYrT0I0ZitYaTJPVk90S0tpejBxaUxjTXlSbjdCcFJYM2RKYlhSN1FvWm9ieHNiZVJsS09TSDhWQnNHQUc5YzRJT0hxQ05McHJzV01qYllYanF6ZmcxU0IzV29LUVdIZmZ1WW1QOG1JQnEzUGpPYjNnMnFXVEpDeWROWnM1S2NCWC9TV2Rna3hnZ2EyMUY5bmRPS01LdGRucnc5T3BXdGdvUUZIL2UwVktveTlTa01wcWNnYUpmdnptYmJraVRBMUt3UjlFSDdTMXRrNmNRZ2RreVZycXZJQzR5bWN0TnFFcWZxeGlHOFh4VkxxUm5SazJKb0hIODNEczR2U3lhSG5BblJCK210VXEzM1dMRkdFL0tZWWZQbE03djRWS1FlNFB1UmxWTjk4UGsvYy96cU1BcmVYNERRYmtrRDdmOUhEZS9NNm4vWUJiOFQ1aWM4Q3J1YnMyWTljMDMrU1gzak5tS2JUT0VuTDFpT3pSVXhXNzZVZGxXZElHcFpjVjhvdzdwVzEvL1c5Q2pteG9XT3lxaWxSaTZIKzhsNS95d1I0RzlCbnpzbC8zWDBMc2VZdXZldWJNRUFBaEpFTmxFSDB3SGFQYmhOZzhtc0tyV2VKMXE5T2NZMXA5eFZuQWdKcVo2QjZUZWY3U2diVUdpTHRHNmwydGdiYk8wRW1PVG9uL0c5RHVCR1AxcXdnZ3psMzUyL0oweHcyM2gvZ2ZqUllndmN0M0I2bDlJcXdEMVFlV2hVSXh0blZ6N3FWTGlTclY2N0xrbGVwQkJHTWFFNHlzd3p1VktzNndxd3M1TjNhVHIwbjErdVA4UCtpOGpHOExxbFBCdmR4cXdNOCtScG1ZZk1Hc0cyNlgxTEF2eG9razVGUjhaZVlJM1NtM0dyem0vVFM0anhCcU1WUWhxNnFNRXljdHBLc09nN0ZMY3FJRU9pamdjQjU2VCtZWS9vcUxtRDVsaGlBUFhpWlFRc1IyNWhIU2JPcDR6TFdqWm1kYmRDa1BETThiY2JJcFZlbnJyUE5vZit1UDB2ZWdQSEQ4Zjd0OUdBRVNScTQvNllOOHNnMlNnVU1VbXFFaWpXN3BFY08yTWg0NERoMG5hWG81U1dZNkY4eHBVN1VFYVNTWWI5Q1JDNGpUWGJ5VFJVUlZ1WGp1N0lXMnBFSnBjMldkb1hCSGJ4SjJldW5iWDdWUDdVcE5FcDd4ZUViQUthaXFjYWJQRFE0N3Nnd0ZxaHlNMVZwdW1FZVRzYjVDMXFSKzhNNDRNMHExZmlPQUJCOGVTZHZ2UWg0U2hoK0FLWCt5aTJOS0tDREs0Ny9XdzBpQkIzQTZvWXZxWWNQY1Z3d055bzA4NTd3QWIzbGdZa09HYVcrTTh5cjVtbTB5cjAxTkxIZFplWHlYZnBhaTRUY2RiZG0xSW1MVzlNbDdtSzI0NVlSUi9CR2xKbjliMWlPeCtWejU1ZjR0eFJ1c3RhWXF6c3dzTnYwQkxyREhyNzIyQm11TXVHZ0xwVXRyS050WVN5aGFsWlNuRVliRWppRVhjMlRRMWFpRFVHcjVLTmVsdER3ekdERUUzQ3hpU3JjTTB6T0hKUWlhb2o0b1FSd0ZGVjVBOFJwR2VGTXZqc0x1QXJLNnIvQ1NnNDAzcmZoR0NjV0pLdk00ekFqN1dpelVhNy8xYkc3bVRuVit4ODhyVW1OcVlCN3h3SHUvbEJoSGJ1RHAzTGdjZVI0dG1kRW1jMzFycmRVSGJMWXZoVnFyYjFSdWVNYUljOCtTRUt6emFOTzVHeVVaRGRrMWdwVkxhTWRNQlZGem10UDB4dTR2NlVCNkdZQS83d1IyWTNnSjRBZ2VCa2RPWGVxYlFKNEQyYXJqWE04ampBV3RZQ0FuQ01sU29BelNBK0ZnY01pOVhSTVQyMitDUUcrU2doRHBSTEhQV0hWWjAyRDZEczltUFYxaWllUDZJRncyalpiYlVIei9MeXJKWFhNaWZDYktobm5BY01haEZTb3dwMmRCZzBkR0lMZWtiTUJDSEVBSGg3RnVVYXowRUp2c1h1RW5INllIZXY4eTl6bE9kRmtGQXB5U1NPbnRwRVNaZmVGRUlIcmRjcU9wemxvYW9nT0w4QzNBeEZuMWdDTVJVOGFoM1hJZk41M0JNTmp6M3hUWXZ2UGdpWE5oeWM3WVFOWHZZSW5XakR2b0pRb1FyY1NkQUtZcFdqeWdmYU9OaWpBQVJmb0wzVW1JVE9zTUFzZTdyakFyY3FGZTJaMUpEdGVPcGIrcGMzdU51YjdGWkRodUozTWlKUjRUUklLanJWbWdKa3hQdUdXMVoyL1VNNnNaaDF0WGc2MmVsNkJiRUxYQzFOblZ5bUFoK0hhQlhnOWxmVVZNalRxeWNEb1BESHlFM2xtZFJkU2lEUWNxVnMvRUI5d29kTTZ2V1AwZ3Uwei9jUUZVek5DZjhabTlZZDZLOHdRcXRuWDVIbDgyRitVVlRSUnBrWHpFcVdHNG9RZUFJdXFNSVMrNlBCMTN2OWFvMzlqU0Zvb0ZORzd0NnY1Mk05QXFaQWJEUGlRVnYxLzdYV3VBcGhIdjFjSHJhTGJoQ2liNUxReVlpbENvbTZjK1F0UHpOWE9Pd0wyRS9pblNyMFFacnlSQXJrTHZXU0VBaExLNHVEQ2dQSVRKcFczRkZnZnVwWkFxU2Jna1JLUDJnSklaVSszdUpPUmljdm5IZkthdGQ5dmd6Zmd0ZWRIVkVvRmg4ZkhXaFIxQUJ0SS9xcWUvcEJNRExJd1dFT0FhTmdQTTZRdmlaWjBPa2NEUHR3eTlkcHhtZUxHc1Voemg2UjRMWkI2WTkvOE43bkJlMFJGTUFqTk9LQ0NZRE5nTmFrWDVnQTYyeTdWcXo3VkRjQUx4bWI1ekJoN2NweHV1ai9wN1o0TERmdVRDOFN2aUsvY1ludzV0SDNaanBvRFg4bVdUZEFlbU1PNjFZN2k1ZDNtRkdlOHQ5a1B4a1FFQnVGMWVxbjJxbEc3aEVyRDZlYVJwS1VUYk02czlXbmxyZUtWS1UveWZsSEUwTEVhdDZiZko2K1pBY1FWRWtIMkxUbHRKSTBXb25WTTIxcFpETzBaaW9zSHJNeXcvSnBqS2wvcE9BTERuYTZKWFZzU0NCcndoZHJWZEFFTFV4NStEaXBSVE9wRDlTcGVkaDNsZWM4SStHcWZhcUFiZmhIWnBsWjFIRTRBODAwTGdYN2JXblhTbHVIOXRROVVJWk9rNGZBdTlqdlE2OS9Rc1FTY1dQRUV5TGNGejAzeDVEUHZaeVlHR2pOZHBISytIcnE3cWpwNE5ONW1CcHovTEpOTUtxMXNWSStBTEZNbGc5cG55aEdSRmZLSjdGS05aRjhYOUJDRzVCNnVLUkRFSXNRRGRkTDU4YXhjSGdjVnhxa0hBNk1iN3V5RHJiMnB1bFRaeVRLOTA5ME9MUXJndXhJYW9qNzYweER2dkhicDNhZEU2T2dNWGlqY3R1UFM2UmNCSm1FT1hMMWNMY0NockVCaFRSMnpCZXNaaTdtNFc0UFYvZm8rMUM3dFZuVmY4WVNxUHJONGVrRWZVRzZuNVRUcVgwVlFRalMxVkFYamZWek1DS1gremRpYktJWFoxbXhQdUVxcG53RlNxVmd6b0pQdFNrNjZYdTdjUkZoMnJOcTFFbDJreGFxQ0oweWdlQjQ5SDcxN1kvcDg5eUY4Wjk3RisrdExwT3M1cU1ORWhRS3d2cUtZM0F1Q1NmNGEzMnNHanFvMkwyaFA5VHN2WUVteHJQa21iZTgvQ24za1FBTENjRzdPaVUvc0F2SjR6Q1lvTmJpRW9hTFFQVGtTSG1IWlh0ay8xYW9GYmF4S2R1WmwyalIwdExNWm00T2dpZythVE9PaVB0UGNoMk9OYlVLSURxZHdlcWJOZENySzZwc1kxOVZ1aVM5d1p1aUtZYkEzL1dvT2tuOEhXTzQ3dUtIeGhhWEc1TjVNaExpNHcrTVlyNTl4NVFLTXhuODNBQUJCWWorMFRHR3laRG9tOTlFVGlyamRVTDZuUFJ4aHVDenlMeUZucHJWN3ZINjR1aW9uUkJyRDdtYnVFMG9tVXJkY2JzWFZ6cUtiei9TRHB1NXJTY3pEc2dLeVFmWEdsK1Z1M040ekNDR1NBNzE4MnFpVjBmcnNnL2hYdmNUaHVRNGxIcTNLZGVGcnBJNUpOTWR4ZHMyYWx3ckNqdUN0Uk9YM1pvWGxVbG9QcTZSbHlWRjEwUjd5TytNemxGL3V0T0NJK2lzQkpiOUZwdjVWZEFLWG9Gd3M4Sm1NQmxJeVFvV0FpNTFyeU9PaHBjTGJLUFZrNWU5OW14NUxoNi9NejhpVlYveURGMEt1Q3dwZVJ6RTQ5MDh6K2U0Qy8zcmVudUVEOVlUM1A5S1FmbGVMUHNNQXVSUHRUcHBqSXJwYTdpV2xJSy9JY2RpOG5iekczbFJMT0hFS0xPV0ppVlFNdGJFei9FbGdsMEZWMjRKUHE0Ym5Fa0Z6dk1LaHRQdTFkWTg4c2xPbGoyUUJ1cDhnKzc1ZmowK1JlbmZUek8vWmI3V2VSbHZNTjVOMzdyNmJ1T0dsOGJmSGpZMDhyNS82TCtoUENZRE9yWkFVaFJSNTd0N1lOamlZa252Q2l2RVkxVVh0TTN3Mmk0Rks5RjQxczAxaHBTSzRmNlNjTWl3N3lEVzJoNC91RkJpNW1nTVFxWmY4SmdjdG55UEo4UU4rUWNEdnRaZmFaTzJIWDAydXlPcjRXdXdNb0hocWFRMTFFTUJla2Z6RDJFd3VxbVRiMnpBNnVzdVJyZFZ2bU1jLy9GUmpzNWZCdzl2Z2JDYUozMGw4UUY5Tnk0R3FQN1hIS3VhbXdIQjV2MXVWQ2w0VkphQkdLbkczRjRyUDJLc1Q5eDFiZHJiL0RDNDM0UmxhWWU3RERCa3kvQWdSL205VWZuTGhoYmM3R3dzaWVlR0MxaC9ISG96VnZKbk1XWU1lc3VkTTR6VkVqMmcyLzh2bnFLdm1OVzIvMG5NWGhYMjZLTTZPeDhJeTVGMnBSRURWZDVxZlhWOEpwSGkvVzIzUkoyekI4UlFEN093ajBLeG9OSUoycDFjY3FsRnJsbzRFNk5aNU1pbnlERWlqSjJ6RktBZjg0NDBjdlNLSGZLY2lIRTlVS1pCWUdBTGVzY0tuNDJqVjVqS2MvNk5OWnNJYWFRQkRpVXpkUUYxZmdVUHhNcEhVWExDaWtES3FtWmFnRlZKUFZjQmFUMEhtaG1vaURNWnNXU0srYmhJZDNvejRqOWg1SGZvSUNnckliZzVwTjh6aERodWVsSUUxalJGTjBONVRNY3dRVEhMM25neENuYWFvOVNhUXNYRnl6QjRmN2dMQzBydTlsaTg1ck9PdGxQcEt3bzZvUVFiR3MrWWo0YWR2TEoyaG9zQ2lpN2ltYS96VElQeTYweEtHZUhOWkQ5M0daRkM4UGowYmIydUpZMFJiT0pxc1VIWjNRakcvV1ZiQk4ydjhLVzNTaG1oOWRYZUt4VVFuQWx0Z1IzUDR0YnQzbDdqc1VFc3pwUU50aWRuRE53VkN6ekVUYVdON1pPQ1VsbEpSK0ovaVZOVytDNDF1Smx6MndEQ1BvUTFWZEczRmdXNENKdG9tNnZCaUF5U01vSmhvYU1NMThxSmE0TStpU0gya0gxVlgwd2pkclZWKzQwUTVodmFwaEt0M2phMVdMc0NkU21MaEk0Vm4rZkVEdzZnSG5BMVNhUWJlc0czdG5tb2RUeXRZeW5iVzRTa21Kd21KU2JTYXp5cUo0WTAzbEN0d0dXa1hTODkrR2kyUmRXaUpXdkl2MmxVMDNteEVGVTZXU21LUUZydTkyLzBaRlRxQ21oQUxMNzZ0dGZjQVpPZ2g3Y3JOYXVnajhtSnBHV3E0L29aai9OTk1uVzNpa0pXNHlTN2E5eU9rNDA0ZDFWd3RRTXFrQXo1aEY5d0ZvYUY5Z0Q0OENKWlYxZzg0UERDdGNJVzlwQWZPd3R3NGVMcStEeHBkN1ZHaE4yWjlzSlhHdmlhOFF6RjF2UnphanZySFRmN0N4Qm1JdFhjaHlUK0pqZFgzb3BubTFhR3c0ZmxyWkl1REFsRlhLSU5HUko5Tm9XRFk3YUdyQUhlNWZ3ckVxbVV2VFRNYWJZeFpDNHFWcnIwMm9QM1hrZElaNm5uclZrZEZuZnhsS1FXNFVxNktKOGs4ckdwM0dCMXUvZkU2UHdSaVFDT04xNTk2ck9meDg1K0s5Y2p5K2h2MEtkbTdJWVgveG9EeXp5NzJ4T1A2MmJUcldsY3dJb0oxMHN4RXpIeFBqSkVpMldwOSs0OU5BYnplRTVqb3Jzd2NZczQxNCtFSytwT2ZBeHR1R0lkaU5OUXozR01Gcm1xdlgvZzVCUHZaYmlOK0c5SFFuWko2cEN6UGxldGZqdmlRWFcwUDVBTzh6c1h6ajBlMVlFek9mQWxEYUNnc001bkdYWW9xVi9RSkoyUGxFTitpc0FnSUE0eVkwcFc3SnZzekx3WGxGd2kvTmtnVnllVVJjVnFPS24yY2NWelljYmtFYXoyTWNLOWw2MUVaSjc2V2tuZDIzVmxzeExMVFEza0NUWXI5S1lBMWhTdldsK0JUMk8vZStuY3JwKzZDQUFEeXlsYWs0UktqcTRLRExHVm80eTUxU1pwMW92djRWQzdnZXVmOWtsUGZoMjFmVEl5Q1dSaHRidDV2RUFaYk9NbjV1bnhITTZGZ0FSeVRCRGlMSkhNNGh2NXB1eUdHZmJkSkEvV0FXemlieXkrNTRXNTJUVlFib2VFdFk3bUsxM3V5Y0JWM0dFWURIZmZZcHc0VzJIT2hROGZmZVo0WldlV0pvUTdMVis1VVl1U0g4NVJtN3JwVTQ2aysyT0RvVjR3a2hoVmRNTDA4ZDArV1hqUzRlNzVITU5zV0NQNnVLUnVSWmxNMytuQytTTU92Qk0wM3oxWG56c1U2RVk4MjJnakNSQm9Bay9oSFN1UUNnZ200Qkd1Y01XamJzRE9YYlB2VzYvRnQ0Um5oQVdIbjFFQjZHRzJET1IyYUE2UmdLeFk2NnE3WlAzY2ZzY0xwTDhJWXBIdjY0ZitEM2g1MGlDNVBoMklhUmZrYmVOUVova21xaVAwQTBzSmQrNHJkU2lMclJXVitEdW5jbGhWb3paWnRTWnlFVElvK2FKazQrRTYyM1d3UGE1VXo2eVIyeHlTM1RjbFlha1lBVnBVTzdMODg1cXZsa0ZQeTJ1aG4xY3k1dThZSDRkTWhDbUltSlJpdjhGeUdzb2swSWJvc1Z4K2RXSFJOc091dkVjbWZJSnFIckYwaXZEMEVyUktwdkNNWVh6bE0zUjZ6U1ZoMFZuRmo0UUxJS3pNVElYR3BjUDRLSkdrcFpGTTJMOURncGRabW41WUU4OStFa21ZZFA0TCs5N0V3d3YrM1RsNmI4NnEwbGkrSFB6eTZpcEtFV0pqdS8vcVcxZ3ZpSTJKaWc4WGg5MkZlMlY4SW8wM2tQTFpITkMyQ1EyK1A1M3BScW5zK1Bmc0tvdzRvd2dnVXJNWlBHY1g3TlRTUms5dXBYRVNGLzNGdENkOEFMbnZZSlhURnQ4bVJkWjZ0OWJJNXNLQ0l1RVFRL3FFNzhkSjZsWUhrNEswQ1lWS0pxVGJma0JTa2ZRN2x4dVVZY0RYK0JJSk51MWtPOEhNbjBrTW1wNm5ZNjIyZlNwUkd4M0RRY2xCMnphdDV0czJEb3JFelVmV3h3NjNJL29qczVYQ0ttNWp2MzJLQWFxVWEvTU9DY0FuMU1qMCs1TmhoQ2hsWC9DUWlUblZyWDF3RmZmcEI4SElmbTBjWDUxaGJQdXNvb1gxVjdnYTZ6RzRYdW9ZdnMrMHhIQVFqeDdEWVJENW0vUzJFNXVqUDlrNkRPTFZYemp3Unpvazl6bjBlWWVFeXBDUEFqTWdXM20yeUFGMTA3VmNBcWNEaWFBRDFWU05oQ0tMdjA0TWN2cWxCa05Gck5QWCtjZkhidzB6QTZwbE0yR08xcTRpY05GbGlHM3UwZ09mNFV0ek5xZ3VzUUtHK1BTZ3NjZFRUb0dyZXpOcVA1dFpxRnVhZzNKSXJyOFVPZ01VajZVOS8vWWUwK2YzL2hBUXVqRVUrT0pNUDFCMmNsMHNvM1pxZVNjckNoMkg1VFlKOVdVQklSOUtram9STGFQMm1JdGJiSy80QVNsMVB5UElPbStEczVXSUlnL3p0ekVQbDVHMG1FdW5tQXNKdUZmR1dQRENhNEpZeXpoU0NaNFcxTVNJT0JvQUF4RHRiRUdKTlVVN0FQSndzUDlseFUrUlRzZUlpTWI5OWxVQkRWdG5DdGFkNDBrSGdDOTAyY2JaSU5NY1BEUWg5NzhBZnZFY2VBcU1OTm5VZFl1cmFkeDBWRzZTWDRZMStmQ29PMlhTVkhmMU9uRDdMOXhPSm85MTJOdlBscENYUkcxTWovVHJDZ0FKRUNobFhDQ0w2ZjNrRHBlQ3dqVUZtaE5JVkhPQ1pZV2MwOWNENG81WGhOT09GdGpRb0N3M201aTJkbWJ3cXVaaDd5aWxZU2E2Q2lSblFkQzhYSXZQMm81MFVpbnlsZHR4Z0VxUXk5dHRKUlZjbE5aTlNSTzBWU2lFQnlXb3F3WUxjUDVxSzYycDFNc1ZUbkErNG5vZnBWdmRzc0RmSitMZ2c5aHZINUwyUEtEL3RmZWZUdURGUllqdVlpMWpMZVZKaElHUjRUOW51MEMzY2JJUUt3cEN6dCtEZU5FNlEyakFQclRmUG1ONmsremdVS2JEY3VadGlyaHF4Y1I1T0NGdzI5d01xYTJtVXFINlhvOCtpYnYxT0R0L1lKYUN0UVMzVWhMN09DNGYyTDIyTFVaR2JZKzl0NnZnUVUyY0dHUU5uaFZLSG9GWkd1QmJGZ09uSi80RDVISjlzdG9EaytuQTA5QUxsSk9LOWJlVDF1V2FmS2ZOOEtHbXJUdFJNMG56NnJTb3pBUjJOTmhmN3RoQkZvYTlrcTMwQ0g0YnlibFl5YUxJN2N0TURrQlk4dmRFdGxXb3Zwa0ZYVmthemF5d1BXUTJVVnZ1aW51Q0FiL1I4bWwvUzRydzJJTlJrVG9oZTVqTkVsaXo5UDUyWDF3dEFTbkFrZ1lXK3Q3WjlYL3lMcVhnU2RiWHdHdFVnbmtWczlzNmIrSlpGU1cyRm9KazFQOHdoQ1BLLzFzVG4zVkxJMWNtQjlleXZCaXBZMjNNYjUrbWViY0c0UzRQTUtScTQvaUNrUXZ4UDM0UDhlUFk5R3lrczNFRHpkZGx0MWNaT3M1cHp3ODNnNDd1YUFjeTBhYUNoMnY3NkVQWDZSRTdBUTJuRTFOeldiVEQyZk1vUHRhdU5GOGc0TDR5b2tGdjRpQzlUSmlkM09tNjZtdXpTYjc2Z3ZEYVZVOU1VQVFyYjh0QjZLaVJNUUNLZ21ULzc5SUlmSFgvTGpLeWU4bVk3ajZzSGg5R0VIMnlEY3N6RVlTczBFczUyWGxGR2ptM0hIMUJpSm0zVk40Z3RjNnBWSXRJT0V0aXhMNkw2N0RGYkdkbnU0WHdRMWJwN3YwRHpuTk9JSEZiV2o0djlBOFpQdXZCS1pOUnNBVzlVMkVBN0pHWE1ZcTRVc0kwUi9OZmZnSzF4N0tDZ2ppQSsrOXd4OUdSQ0RYY1NkWDZ2R0ZlbGRhR2lyOGt2WTc5ODk0dDc5YlE3aVJzaWhXVVduT1p1M0JxN2xtN2xDdHJoWnB0SzZoRUFZekFKK1FpSjJRT0FockhNNzlKb2JKV2lXZ2VmN0RnT0lZUmhQL25rTUE1cmdJeTVsdG1SWEZYdGtpejZRdzBPWVVkV0F0NXplLzFEUllaVDd1cllSYVUxeE9XUUFkSjhXYzRpSzV4aUpMM244aGNReW5XZFM0UFBUUm9JbE92OGRkdWE1elZaanJMcm1wNGlYVlh2WUY1bmxuTVhXUVdMYmY0aHV5Z2hqZC85RExQc1Zlb2JwcE5kZEp2WHFMYUh4eEpnNEpjSTFCTFYzcEtrWWpWYzRNeU50Q0t6UjlHa1JIbHE5QTQvZVg1NVhsNjUwS1cxaEJsOTBnbXRQN3RLdE03ZUpLbUo5VEpidjBuNkQ3bEg1U0UyVWpRNkhvK0ZvQjE1TzZQQ0RQYXlycXAzYkJ6aHgrVFV6QXY4MVNuamtDNEg3MjIwakg1SWFRSG5nbGJMRGRxd3Z2WUtFbHhPWVoxL1VoeElFOGF1VVBQblFiaHIxeDRlNnhsSGNrb2RIOGc2QU1LeGw3YnoyYkVJMGxXMTRDcTlGb3dBazFQYVJta3dvNmlITFF5SWxmNTNFeW9TRFVyQmV4UmRYL3ZMYTFDdGtZQTdKcnZwT3VrS0x2U2Q2TERUT1pCQlNqYnhkQkd1QktuQ0l2cVplV2VXNWpsWUVYbjAvR0syaHRjTTNpNjV4VGIySWFCVlFlYTZVTTVRdkxMWVhvc1QwdmZ6N2UreTVRZWxFbisyT3lCTnVxSTJKSUZKbUFjK29Dazk5SU1tZXlXb0I2WUZFSzFPSW9sZ1ZJNE9qSHlZNVhkbkdFSmZGY3gydk9EaEFWU2d2T1ZEZUROT1hxb0hweWlSSjZOYjdPZnNZTEh4YTFib25EaG9acW84dTZGWjNiVCtMb28zaWFpZmN1VytMeTdsaytkQTd5bXZoaGt5SmZRdXRKcmcrb0xZUFRNcmpHY2s1VVZSWjg2UkszMlhrVnFNcW9aRk9nakw0YmoxeEM5d0pCdGowMndFMlpsNFVSR3E3WmRtUlBZNmRKS3NLNGtnQTEyY1FqUDlBbjhlRXZvamxJN29qOWFPakhXZjVTNUt3Q0pPM1E1RThzcXRmNWJ0a3JLQU1hakk2eGw0NmNXWWdNYmZzWU5yNXJibVhNUHZQQmV6bkN2OW80VmFOR3NDd2tjWlIvbW9NNWJMZEpiRHYwbVUzdmUwcWpwbzhRVElZamgyVmQ2ajJCWHp4SytCMlZTZXQyZXlmRTR3bDNjRHBsM3FxbjJWRDVJaGw1S2FISlJGdzlBWEMzNTVFWVFLQk1GZERyOGdWWnRPak1GK05PeWhOZGlVaXRBcGJqdUU0eDFTc3FUM3lFL3dyVmRINXcvV1lvUUtleFc2UUpBRWJUSEVhSEluNjFmR0hJMkcxZW96cmhibWZHRUZuMS84TDhIZVNJRmQxWG5JME5wbEhhZkFZR1E3WlF6dVdQUUMzbTIxcTRSVmNtb1pwRGlxR3N6c2J2SmVkUjN1Y3JMMnJ2bFVTcFhqYXVoMFJtelkrTnlkNmZJMHBmdUN0RzNZNmdUN0dZVTZjcDRZcmExYUNXQzZIOEwzZStMOTI5VUhFd3NlZTFEVDdtdjZqd2FGakxXTURDMURFdmdTcFBVTjNoMldDYlJVQU1GR2YxVFNYYmxaOWxmOUFydk1SbUNyaWhBdktPRnVkZ1NCQXYyYjZXS05YQ2tieUZ4ZUJ2RjZHOC9KWUpqM0l4M0pMSkZuU1lXVHkzZVZDbk1ZYjdKcm5neFc1d2NPYjE4bDk2dUVmMThkaUxPaGhUUlZIZG0rMWFWanBGMXdyZFgxb2pnNHh4RmxBQkhqL2VTc3pkdkNUbGd0Zk1zR3FHbmJTV2FVNkVwTDd1YmVKRUlvTUhQMnpPVnA2V3NMRUNrcUpEWWN5ZllyVG1wSy96VXp4VTc1VHZIUXFUc0hxVlR4NXkxNmp4STd5cit6dkk3WVN1WHdhZ0IzVVdOUm0vSTB5aDBpWW9RVDRLaXVQb2FnTEpRcVZtM0lMUnB0ZFFoRXhOSVpLZDl3aCt0V09rbGhkZERDRlFJeDU1VWcvUGdsSkNOVXROMWxNVWI2U21kNkd2L2g1Y0xGdlpqMDUwei9jMU9MaWJzaDVoK1phSDFONjI5dnBmS1d0eDNFVld3SE5rMEZ0RUJyV09PNTdmZW03VTlzWHB3TG5qcFpJSEhRdE50azhVV09WbGVMQmlCOEZ2eDQ0VFRIcXdEUTBuYWpLMDZxYkkyUHMwZS9nSmhvRTJUbE94czV3VGZncFRLT29zL2dsTFp4dGJkUjFMU3prUnMvUmRqOFdMNUNRbnpUblRLQUZFT3ZIWWpnVWZQRFo1SmhZTEI1aTlJQkNObVY2cXRqZUE0M294RVlHTXROUVNyUXFPSllTUUVZYlZWQVVYR2hLT25URFAycm8zSTV4Y0VkbGtHZ0JYQ1NUN24rUVVINTNhbGpydXR5bm5uMzV0UUJIZ3JJTW44VUdMeWZvS29TZGJFelNMeFMyUUgyRXZwQUZ6YTlNNWJ4RVJQY1N5bHpVNVJWL3R5TWFZYjRnRmRQdkRPQTFRSTBMSzRSVUxRVzlzTGgwemtJdjBrNjR1TWc4aTFFRy8zWGxQd0dYeG8yTVc2bjJTdFVkeGxXR1VDbzZreWhzb2ZaY3RGbk5NRk5UQjJHSXNralVBOXlhVEJzNXYwanZrRnIyTlBtMi9JVmJlZ01CNmQvOGNWNGtObVhlT1hpK0RGL3U2Q2NMbzltUitFQWJyRjhZeHZNcDBaVHRIVWJJVUkxb0ltMFhOTExRejIwUnNmbnFoZnRDYzVFZzQ0NktBaW4xTFRPS0c3ME5MNDlyT09QK2hqNjhrZEw1QTJIajBNT2RSN1BSRzBiY0xIWHZWekJvVWJzUm4xcWN2R3IxaWMzVit5eGc0V3picFp3U0JiTjNrQmIyY21TUGlFdjZOcUduZzRpd0RLSjEvaWpKNWxLc1ZBUVhORHV4aFp0Tkc5MFBIQjBFaFJQTlZjeTZ5a3lUT0tZSzBXYjlLRXFheW5RcnRrYzVTdkd5eGNOdkZFZ3VKNmNnSk9RZDY3L2gyaFY1YW44M1M0WDcrTWNaYkdDMG0wbkZUSUswSDFBNXNHMkxiL3JWVnZPVW9vdHBWUmp3T0I1OWZ0WDVieXdYeldBQzVUR1JIdVhCRy9UM21FNXJHSE84eVBhYitUN09tR3A4ejI5MjE4Z0FTTXpzZ0tzUEFlYzF3TzJvVWt4MGQyZU5ZUWZJNHN3eDlIREpCSHRwL2trbDZ2MFR4S3krdEk5b0wwaHZ1ZC9kVElvU3pPczdqNXI2eU5neUVTVGpVYVovSFUzMjhyNWxRVmdxYTRodytUVGtVdWNxVEp0QU01M1RMdHgxcjhlTWU0cHBUWEZFdThuZmVmOG1xNlU1L0V5dWJzdXBhY3BrNUtoTjdCUEdjd0pIYU5HTXBWSnI3VTVDcXNiaFFhcTB5UnB6WWI2dmhLQ1pKQnkwUUFneTgwRDhOQkpWbUc1SUh3L2JQWUFSMncxaGsvMHhsVHI5SnN3bklYQjk1dGU2bGk5RXYvakx5YlU5KzFPcEFCSC9CeGJmckV0MVJWN3dGT3I1cUsveHZ4MkFtT0ZwMEVidjcvdVNoYjIrSkJLMUUyakx6RzRQRHZzK3NEZXdudEtYc3IvUHByUFdlQTRPRWtyek04eXI5K0YvSjlMSTZRNysxVnErUkJ2WkFWanYrV2ZqWFIwNU9pcVVnZHlxbFdoN1VSN1RKUDB0aDZoUHZFblpZVFhCRFBDUUdndTRtaHRBVFBRSDJkSWN4MW5xc3h0M2QwT0x5L0xIY0g2NmJuVC9nUGNBZXVEaDhuUHNUemFGQ1FoNmg2WXZFM09SYkRMcHJQK0QyNlRjWmxuRnRCSGk0MGNzZGJjY0JVeDBYVWEzOHdQdW96cmp6RTR1Z0lXMTBhQlRxS0c5Zk5mNHhBSGR2azVUYkhCb291WjBHY1V5Sjk1MytNTVZ4NjFmTy8xSVlwV2g4djlYN0kxUzlTNE5URXY5VDErV0h6N2NTaTdMamJNWnJ3LzhpTVR2L1ZzekQyWm9aT3FpYnBidnpjQSttTXBSMmZIWmJOV055YU9peno3MEMySVJIT1pvTUYzS3lkSEdPU0dMbHdqcWR1a2NSOVRGV1VsVHFYcUxibjBjZ3RSZmNmSnF0WEZEWGV5dFp2aHBkUi9pOHJvb1Z4RW1UVC9tTzFUbVNKVS9HM2lVNE1COVRlZDQ3UXNQTHlYcll3TUlxQ2tWaGY1STZDdExQQ3llRXlpWmtudkJrdzlSR3gxbFI5c3Q5VXp5NExVSVFKeVoyZFZvTFNMNjAzTkM1M3h6bWgzaUJSNnl4WWZTS213ZmkxREdIQUxUZlRvblNCbTRWeHZpNHpwalpKaXRLTHJpYytpY2ZXMGx6Qjh2NnpaVnpvUHUyNWNHTzlacjlKSTFOamNnanZPalcyNEduWlNQeTAweVZvcnRSeXZZK2p6aitRZldldmx4Yjg3bUFna1pRT0YrZ25vRXNPak0wVFpSRjlOeFNVaXc1bHJEdjN2UlVQZ2xyem96TE4wZDVTaXRkbUlIS0lGL0VPWGxXdGhLcUVHNllCQVhweldCZUFMUWx6SE1VSFkxdWdERFNzeS9FRmMwTVErVXJkZkloOWNQMDVEYjJHOTVVUm8rSlhHNEpsOU1UU2dkUDR6WVBJMkRhWkhQbG1ZWHprakFHODJhaE1uMXdRRVhVaXcydE1LMVJQVk5RVStsV3V0aklYWDhDcU1aMHhVRWsrREw5MGNmQWpuN1pLU1Q5S0hOZWFCaWJoaCtUcjByNTBCRUthdkd0K01aVHRQZnpTWWFRa3VHZGQwR2Rienh6T0dvVGMrTVdZOVF6VlBFMHovQllidGJOYUVMdXdXdmhjZFlUZnlNWVkvelBHU09WTGp3d2oyUHZKQzU2M1hrdTBFWW03bk5oUVUxTGtyNnNCODNHNEdXL3FRKzZ6VDNsbmR0bCtYUkVETGVKVGpsUWdnNXQ1MXAwM3YvTkZPeWNjV0s3b2MyZHB1c3dER0w5bkhqbkdrSXBKOU5zcllZbXU5RnhlcGZBRnRML2NKbW0yRk1kUjdLSEJDNDhvVkFWNXVOWXFYdWJMaG1QRW9vQkhNRmMrWWtmazBCYlhlTmlObmRCdERXb082NHcvVGUrV0l5T1JVNzJUSFNPNEw1QklHdjZ5WU9wcitpR3g3bjNOVDF0czk3VElOVTUyWFJMRktxVDBzTDhXcjNKVktLa3NXQWRTanZidWlWT2l6VU1QM3VCYXhZNGFnYXBzYjd0eUloOVUvVHpwMzJ4Rzg0U1gwNG5iSlpZNGo5ck03TG1iNDJOK093Q3A1ZUNsN2xNbTFDdlM4ZjhQdm9hdkJ0VFNKcnAxKzcrSFN5bWdQS1Jid2RvcCtGSDlFV0k2bSswWDMvS0xTVVhYVEg0N1RtbHlsTExKQ2FFUVpMSXBuL2dPTzNKK1BhcEpMNWtYKzdjakxWTW5lR202WmJvVGtRQUZDU3JBUVdWNFMrU1ZFaE5Kbk1tVVk3UWZ1eFNLYmpyVVlMWVFYeE9HVld2bUh0dlM5ZEtJZ2drY3BLR0hLZWZJd2NpUTMwOHZSRWhuRDVnU0YwZkhYOC9UMWFkK2QySjdpK3VnbE41dFJleVFZOTJOVzFsU1BaNnhqNE01WHk4UGg5NXI0UHVQb1ZsbW5GMjhVaTVqblFqU0twWlFLMi9nK2kybDR6MGNML0VUV1lnTFZXQW1Idk5iUVR5dFoyQkh2ZGNDTnBZQzdiZWIyOUpFS1JDTzJ6OFd4Z2JDWWpoZGZNUUU0R0dFVkliNDE2eElDbmNCT25QeWxyVE91QkM5ZHNrdmRIeUU3TDFxandKalZhMkQ5enhZTmRZZXlreDR1am9oYW4rd1VCcGZNVkhOZmk2UmdPbEVFSjl2a25hWDVhZlMrY0FlL21wWkpHd0NwQjdWWGZhUnVIKzZPcEdrYjZNYk96b2FIMlRoOC9LUWxwS3czS0NPb3NHUW4xMEZ2aHZ1QVJFOVBXd1A5Wjlqa21LUWZCbUFwMnlOYTM3NERPVzd4RTB3SUkzdmNTNmJkNGUwVE13emltVE1iVDZUVUVZamc3YWpobC9tV0FlUXovZEs4VW1xSURxZTYvOUgrUFlpbFY2ZTJVeUJqeHJVYkFxalJyU3R5eWFYd0xRdDBPbmxtMzNmZ2Q0Ull2VTNndjlOejF5cDd0QWNYSXAxR2lPUStOOTA0Vkp3L1k4a2hFeEZYVjdEWXlIV1pkRGExUmY3dmZzTFBLekRjZXF6bEZLMVdINFd2aSsvWXFaZjV3Nmg4KzRINWM4VnY2bXV1K1pUYlUwdzF4SnJUSmtoSkc4RmxoTFJmajJjbGFUMnhPdG5xTnNadkx2N3l1WS84Q1hzQU9yYjRwbUhxSHNqZ0lyS3RxRlI1eTY2aW5pOHNlOHRuNHJSc2ZxNW1ORDVPVmhyYnJwbmlweFR6bjV3K0hsU2RMU0hhWGpZTnRnVlNOMFBmWm5tc2t5TURUVnU5TE1ZMmtxTEl3c2doZ3cxMThTc1dNSFpVWVZiUmlWRjFDNkQ2a1kxbXkzeDdteGRocFlQM3FKbVFqU3ZTZkU3ak5QZnVLRGI4MnhBM25DNXk4SVdQbzQ3QkJFdmtCOHlwcDBWY1pSdElaUjc2b0RaUzdxRFcxUFlpa01wM3hYaWZSYzloWVNzeitaTk5lT2NhWTU1eUdtSDAxbVN6V3YwbmNTWkVranRhTHF6ak1yd0NtZlhHa1EyK0hpTGVPTWhkSGZ3R3BxRnJhM3lkdVVyU2dWMmhWZ25nSjhGaU0wQiszWGpVTm41Q1BFSThZcitkYU5DS1h0c3FzaXF4MUw2UjRZc2txM1NiN2M3amVXU1gxSFhkeHZ4dlZDVGxrTm5UTnBqK0ZhSktoMGJPR3dqaktWMXBCOE1CYzEvc1owUnFzTHFKdDVsN1drSXh0MWtEeGVWQU9tYjFUcTFXa2hIbUVPUDdZQVIreW5ZYzlpaXdYdGZseDJBU2FhZUx1SU0xOEd3SWNrVk5ob0RJa3VnNlhEVGJvY0VhZkZDbkl2TkRKbFY4SksvS0p1anowV3IyWXNEN3ZybHVxSytGN3UyTU42QXgyeTZsWU5TVzNnblpwYVFNZkFOaVlmRk1xSjM1WUQxTGswSVBSRThFTmtsMUlrMEFuVk1mQ0tjNmYraXMxc0t1RVN1d2luUmdhU3JmR2RLRGQxVDFkelg3N1E2K3FyY1d2Z0NjY3d3NytiaURHZFdZcmtvNGw4MDBjZ1pvQy9VaHM2T0huYXB2WGM1QTNRcTF3eVgvMUE4WWRzK2d1eXR0SitGcHU0S01vdFhJYzVjYzNSK2doSDJNMXNydzJZQmRlUzNCMXFYemFseTRNa0wwblFlclJyYWNyOW5LYTdtQUd2QWxiU3Fsc1lvWXh5dkF6cVRVN2YxODNWbVV5a3B1UGVvdVA4S2RhSS9nTGd5bUVJV2JDV2IycDhKQ3NwMHdTeE5iUVBFMk1xM2c1VG41ZlQyZnpaTzlUbE03NHNPQXl2N0NNVjU4aXIyaVpyYlFPRXJ6djJSRUJMa1dhWWdtRytuOUpRaFlaVEhSL0puN1Z2R3RwbkF3MDhuUkowd0Y5SXRNUGZVVVZMeXFORWJJYjhKdTFiVE05cXVPL1k3enEzamRMT1BHTGVqdmMwWkRVeGxuTFpvU1dsWWJEbW5xMXlSREhLb2d5NGJpeTJCaFVDSDQ1Z0Y1aUxwd3pxdEtZYUZzSHp2SjkxSlVaWElNL2dGS3VXRkFqL3pzMlF1bjZYTGNRbXdaSzhIWnlUYzhrTnZ1Wmh1ZFpsYy8zMU9zWVBBT2hMbUY0dVEzeTFXTXZYVXZ4V2lPN3AzSDZWQlVRcUplb1FCSDZ2UzRoZjYraElnMElDbVFIMm5nVmxobG1YbU5OZXQ2dHRMcW5PTFgxVnBnaXZLVnh2aGtoalMyNVNrOXhVNk9NblVZU3VpSWhudFJydXBEamdRWnl3M21yaHRKclJuNXB6TENob3pSOEpUMnEreDVTenVaUllnLzJoUDlCNEs2MFVPVHFvY1d4NWllOWJhZE41WnlzVkZsUXVVUzNXMVpEV1B6RC9ZcS8yRENhRnBKQ29jOE9wMExZTHFodXNMMzQrVk5ZS0tVbGJRek13R3pRUFRta0txaGRxMmlLUG53OHV1Q2l5NDZ5Z0NTOGlWVWEwT293UEVodzNKczJuR0R1NWZHdGJSWkRvU1ZESjlXclZwV0gxZHVUS3U5VmNwK2lzbkw2V2dzTWkwaHV5dUJ1eDBoOEc5d2tDUTFwTzVZK2VKS3Z4dmVKU1B5SXlZSHNuMlhOcTVtRlBuVVFHZDQxakVyczhvQ0x0TFFpVEtuTkE3RW5wSlFNSmN3S3FieWV5Z0NqWjFFOWc2enZ1eTV1Q25SSTVOcG5acjdGTExhOTZYdUdmTzE3SHNoTHlCSjVkOWlSaHl5YVplckJFYldzZ1lYcUd1c1czUVVlc1Q2UXM4UVJSTk40bHB0MHZucDNJckk5anM0Y0NsKzQrZ3lMY2s0cktnSXBCMENMNTcxTnI1emI3VERSYmNkWjZnMExtY2RrWTN3bXBrNGVCeW04LzFOWHdZL1p3dVhKS3RBb3Nid2lMTWt1TGJzSnNVMEx5YWo3a2J0bU5TNlc3aWM0ZFdMK2l4UllWbGtQTzFQMTdrTDRNQU56SzZYb0Z1a1JnRStDK0tnUExxcnFBZmdIV2JsM2twYWZ3eXIzMm1GbkI3VkhVNHlmUkRQZHVoMXUzQVV6WmtkbkZvWlFYS3Fla00ybHI4eW9Lb3VUNXBxdmgyQ256MHFMSFJxVkdRYkMwazdRZDJBSlJSZ3pveUZkTWErQU5KUHFJOUlBY3Z5ejhLWU85ZTgrWEg2MUdONTN5enFuOWdiUDFMQTErVjhBZUpLa2tRbS9LeXZzUzFJbE96VW9nWXdTeTVaWTJPYmdPS3FRc043dGJ4NU5ad1hhdTZLN1BvL0R2M0J6dzV3T2VsNkFSZEpjQ1ZhUzJYRVMwOHUycHBxVVFPSlh2Y3RnTk94YXB4eU5pM2NPWUtRREYrR0hBeE1rL3dRMWpwTEhseldJUndSR1hkUjVnUzVKYm1ZSHQ0dWc5T0tkUk1iYXFjMFBrdVhYME9UODRUbGs5R3FzY3dsSkJwUERiWm9GQlRyaXB2d2hJNmVKZnZZWnk1LzJqUmFKc1JmNzl4cHM1UG9uNHFJNHR4RFplQWxxYzFHT0dhSC9ZN21sc0ZKTHl0WG4yTmZ5QUtIRUxNY08vaDh5SjAxOXJGT2Urbng3ZGtQNnBuQ2ZJbGhzS2cyQWdqd25EWXB2bE1lVDlIa3duMmY3SGkyQUsyYlFKdkhqMUJ2QXUraWYwblQ3K2ROdFpJM1k5T1NuRHZoSVNFMHkxWDAyMm96SVNIQkdyVmI1elBuN0NiUHFtOGsvcEFlTnBqMjdKL2d3MkRUdHJOTXM4a3BlTEpHVlRHNm92bUI2VFNHL1ZVMFdiUnY2QXQ1V3h2WXpKdE9PYVFzdEVDNXBBSVF2M2RPVHRmQU5HMXFBZUMxRjlyYjVuWCtQejNyQnAzYy9DZkZjclNnWjJQSGFjSE9NOWtueks4U09xcWxQRkNvSmN1S3IyWkRMbDBCQzhqL3NCYVVuMTdZbWRPRCtHVUR5NGt1ZDRiVTIvTXNRY0l2eE5uQVM0aW1pTmNpd2w5TzhlQ1RlUlpHWi9WRTg0WHh4ZkQxQkMrNDMrQWYxK2xuUk1xVjBtOWhkeDY4TnFOWU9udyt0R3pvK3ZQdW9hMTRPN2tqY2UxZWFFd2ZsdVhOaGEzMUdIR0Njbk9DbVllZDdwSWQ4ZDdSRSszQ3R0cGk0UkJWcFo3b0F4T1lsS1lCUGJKUFp1NWVEdHFSMThqN1B4ZHVBK3l6ZWhrSXdCTzFpWVJVQXE3VnhrWC9ITUJDd3crMmdzM25URm14V1NQM2RaazZGRU1vRzZpSDRSM0tGL1V0QWk2RVVqRVVGTjhIYjRaalh5RmY2L056VktibkVtd0thbXJ6OGRjdjlPenI5ckZnMG82QjRHalBTRGZTVEpxdHBPa1NNYWtYNE5JeHo1c2Q0dFZKdzBvSis3cXBUdHE4T2ZyLzFUa0wvTlBrQmJLTkdzbEpSd252U0ZNbDFpeFBDMm9QZzFVRGtzaHMxTTVCSlpNbDJqUlp3bU9WNEpMV3ZFaUJBL2NuMDJJUHpLNGw1ZUJKWGF0MDZDcHMrcFhMdW5YcTlLbzVIRFRkK1BVM2dJc3Q2KzJxUXVZQTdVODYyc0h5NEp4ZnR0NWRFTDh6ZlpLam9YMVVtQ2k2UFRBYjhNZG83UHcvaE5QbDVqWnYyTEc5Nm5HeUltRkpTaForMWM0c1Q2TTdNaldqRHpnVHlyMnRjakFMODhrQzJFTlRDSnVNUjl5ZUlXOUt3RExTUlRYYmdoY2N5N2NVTkl3SHlHZEo0U1pmQ2wxbFJKZ1J1dnVuc1FOUjRSUzVUMkVodmp6TW5xZTNrVWtsY0F2N0xCNXByai9IZXBoSm94OEtNa1JRbXNlU2wzQjZZUENyU1puaHNwM215OVN3U1F0MEgzS1hPdEpLU0dkdDFlQ2VoZUg4UkczWTIveTRKaXhJb2VDcWN4RUcvNDVob29oUG1FOFVoR1l1UmJIRWxLbXA2cEs5eHNqZk9GNGdabDRKSmJ6YzNnSUNxdGpEMEY3dy9TSGJwVndIYTgxMWxDKzUyYVZxalJ3UVRYVEF2eHc0STNSbEtQUlplUnp3VGhJajd0Nkh1S2ZEbTdVaTczeWxQWFVZNitMak5GM2JRckxFMmttMlZLUXc4NFByUmlRN0k3WEh5cXNUWW5NdG5ZSDQzYVJFMDJrbXI1b3RFR05vb1luV01aUVRISWNiME9ZTU9qY1JUMzI3TDNwNlhwc1h6NmVTdzlmOXU3N256Qk12L09raFcvZ0F0VTFBTjZ3WmgyVkY4R09UZ3hCbW1qVjZoSzE1T0l4QTZ2ZkZXRzBLSGxLdmpBQW5VRXd0ZDFwV1lXRGM5K3RrTTlHMjJEQzd5emZsVXFKVFNJVWNhSjNtcTZ1ZXEydHUzSmJ3ZXo0eEI0ZWRRdlFGZ1J1K2w1VTk2Y2RtM1Jhb0dyQTZZVk5lK3VEaGJ0cUk1bklXRS8zay9HUGdPTmpoVjlZZW9wYkEzWEl5T0VtZXRwVU9ZQkdDcUR4VDZzdWhtWXJRcjVwTlFnV2VMNXJvNi9qQyt1alJJWDRaZENSTlpvWHV2OGtVVDRYNW5QVU1DamVYb2pzYVBzaEdMVWxXZWtuTm9pWkhXZGtOZ2lFVm50TkZSek5sOXJlQ3llUlVZWTRDQTZhTC9ZVEE0MEs4eDd3aXhFK0FLcGlmSHRqQU1uN2pCL0xyMGFxZ1pzV1lYajk4SVFLUFo4cUhKRTd1RGFNRTJGWFVRRFp1K0czbkdlMFJBaUdlT0hlbXZaRktQTzFUcVNiSmUvRjVsbkE4Y1RETE0xSFVyTGJHc2loSUtEUFRPeTM4cE9EcmdNVFNaKzJra2lmcjQ4dFZBeFNWbmFUT2dwYmloS0czOUppMmxLNThJUFY1LzBpNXRRQzZQbi9rVXlXVnJwTEluVW5IbkJucWhvMGhRaWc0TTFJdHJzSXpmcDZGenhTWHRDYXBDY1BCMTBJN3hRSldVb3BZR3haUnF5bzhFRXFmcWZJZWpFbDUxcTh5SE9saU1uUEZwOC9ZSkVMVG5ILzJ6c2FkNTA0TFoyTEcwTkljR3p1Qm01anlYTWJqMFdubEZtaytGQkVMN0Q3QmhLWHVlVWdBN0NBWEt0YXp1ekF2QXpSQlNCRmVvUE9GbWovOFE1bmErWFUwY0NsVTlOMi81ekhsWmlkN2wyMG9uc05ETnRNQXlBanBEZnpxMG9iYm9INy9pZ1RIMDBBdHRuYnJYTHpSSjVhS2xnL3QzUllPNUZjWEpPNVpIOERXVWYvOFByTFF4TkVqQ1ZnelRUMURNVFV1aGV6bXJIVkQ3L1dYaVlQR2E2SGZWZ0p2WlM3S1A5d2JaR1lFZS95RC9MYWZNTlZ5akRaOURZNmdFS2lYWVhjNUxaUXBJMU5XWVY0cElJa2xOVDRtZHdFNG8yNHNmaHBEeFNMekIySnVPU203dk51a1RhSzRVM3ZiVGNNMys3c2RVckRPUklNZ253TUVGVVFmelNadXFFUVFBTm5teGZCYmJrVHdXM0h1YmJ5SnZSUEJtNkNtb0w1R1ZsOERzSFhvV29raWIzcVNUSE9rOEljWlVnVjhkZEQ2aS9URVJGSzlnalRHMThMOGRqdSs0eDgxVkdpY05Kb0tGcXY5ekNSTUdVRU9WVkNaa0FwdTBrOEovVG82Sm5BbzI4UXoxclpCd2s3R0xuRUVEcEZEQS94ckx4NEVjS1pGN29ZSlhCTGN3NFpJRVAxNW5icVBnZm9ueHE2ZGZsZm5OQktrZkJMZWNoa1d3cWZFK3dVZnltbW1WS1BLRVV2c3NyZU5QdVdGUXZxODh3Y1ROQnlCdGM0M0ViZWFOYi9OUlpya2Z0elRBbHgxc05QdllsaU1qNWowTDk3VkVHNitVZTF4YUtWYVZLblV6NzkzVTBocFpmRVFBWVpKS1hlb0dSbkxNWWtvMDNWVGtnRU5zVkoyWkw5WHlpd0dUS2JYSkZieEJqdGVmcFVSUE9WSkU4bi9wNnBQZmhqeTdWWjFDSU1CYjFtald4RUIyWVgreVB4L29qQWY0Sk4xcS9rZ1h0R2xRbWtDZW9STm1oUlFEWmlGcUJsZDUzMkEzaDdWUGUybURaa0tXSmxlV2d1WEg1bDgzNFZJcXkyRXJTUElkZ1Zva1B0aEdxalJZejRnYzlPVVp1cjR2NWk4NFViRUREVU9vRm5lVW53Y1dld1RMVDU4VUJIZ1dPY1NLK2pKZWhpYWc2aHJTSXZxdG1OVjduUm5TL2lOcWl4Sk1JdWtpR01VVTFyMkhFYlVFSVBpdDhFM1VlVVdxRE1OY0hSYjBDWE9PdGRZUFhNYmtZZHY2d2IwWUx0clU3dDR2R1dMUFcyWVhobWR0YkhtQWw0S3dRYUZaaGxsdnc2OHovVG5VN25DRzFUdGtDQzdna0FCVVBCRTZJODBmbkRrM3kyLzk4c2oxc3dqTUR1Z1VjR2NFeVVxeTdBZ1JLcythcEpiNHE4MXNySFNGd0JXZElYdlhDVTZtNkVub0JvSFM3NjBIT1dsTlNnbXNpSzl0OGJsMVpWdlRQM3RZSkhXNW9ndk90eFk2aCtkRFlPajQ1WkFNYXY1RFd2WWlIMEZwblhRR3dZUGt4ZU9KSERLdG03OGhXMTFrMDVKbDBtK242RGoyT3BjWEQ3aExBOHVZMEk4MjVIOVJ0Qnk4NEVCMVplZExab0hVQVF3elBLakw5NiswbU5ncmJCcW16VDVqOXdCTDJPWlhiNlFGRFcxSHZReGRxTno1ZG9HZ0ZuRGFJdys1VGV4REFGWWxSdG1Qc3BaampSWXhCWFVNRUFReEZpcFpTRVYwMEE5TUZRaGJJdTNxNS9ITmxNUVpWOUZHaTltcS9hZm9UMldLY25TWEZ6aEpmbmlZWmI1Snpkc3cxSnFEWTVoNTZpSnoya2VhaEQvUTdTZVVDclJCUHB6a1BMTU93L3hMOGdvNWdoWTlkampGa0ROZEJiSjNMN1p4Q2JyenNZS2UzMXM3Z1QvNW1Iay9sSU9hejR1ZEFZY0U5Rkk5TjF0d1JUSjlXTWdXMlMyZkNzZUxqbTNlZGxEeWdFR1UxTi92QTJscG1sbWFON0J6d0toYjRmQncwNW9RUkY1Y3h3RjAweXRMMEdpblJQTjFJcXBBVkdoa1BpZ2J0VEJpeTh6RWJwcXQ1N2V6cUZtZFVXTEh2aVJ0NDlOdnc2OFNQalZTL3pjY2dvcHZUU05Ca1JKOUJiaHRFZGpDNUd3cGkxOVVBV2RjUEl3SjVqSGpNZnR1VWVHMFV5bFVBV3hFdy9HK21uMTREUmZCUTRZNG9PQkhvVndFdkN3TmpPVnZVRXJUOStZaElsaUIvRWxKMi9iZjlBcEcreVFMUUMyTE4wME1FeE5Xa3JtWjBYSjVPODFoSHdkMDJkTGhTNGx6QUtCdWJDMS9kYitaTXpyUDNXL3IxN3VWd2lpL2UrS01Kb2JublN3OTA0WDYvWGt4VURuNVVieFRVZ3hWYTI5Q0ZlaFhiNitpT2RxWnJQd21UbW94WkQrSGMwN3BCblBJczhRMjd0MUFrSWlORTNSSndhY2MrbkNkak1PZWNxL0tGZHYzSTVNbDBtUGhQUUZyU1d5SW1kTXhSclZWSlZhQlJ4Vlc2Slk1M244eXdJZmVhRk40RVo1UWpTN1p3bStzSThKY3NGSm9BbTFCb0kzUDg0Z1F4ZGhiU3ZHT3cydjNCMWMzUE55U0srVFR5VW5BUGpKdHpZTjBtcFBZUmRQT0lEZHp4MVN3VSsvUTZnUUpaTTA0aU1wS25ncThEUGd2U3FicWQxRm9hdnRoWXVUYUk5d2tqSE5MRUlQdWhtdjdBcjhyaCszdkxOSFlUWmtWRmRuY2luSHhoaUZWYzdzQ1BZNko0TGFLRmJxOEw0OWY5M1pRd3BwSWh2NnF6SUl0MG94a0pkTzZ1bThCYk1DVXpRcDUvY0g0c3pGRDRUUjMyOEtXR1RkR1Ayd3N3MVNuSXNiMHErUUtreWdEOGI5bVlwZmZQRzUxUjd1NGZha1BjUjNLZyt6Z1ZOc2hoTW16VUVDL3gvNCs1L1lZdXBzR2owMnFtVVo2MnlsUkJ6am00eFpBZnU3UUxBR3hheHpZdzVwNW94bks3Z2lKREcydC9VTWsyemg3Sk55a3lOTGc0NGZrYUlJd21waFZzM3hBUG02cVNOL2RtZlN5S0krVWVqUDlBZVQ1RisrandKL0EvaHJsc0hSK3pNbGdyemRMQ1NRSjVYSFdHZkhNTzVWckdXc2pWQzhVRk5nazRmZ2tvSXpxU3gxS3oxOFRkd3Z5WXhTZStUZWw0LzZsK1JYTFp5bVB0eVlWbUxmaUFKOU52djR5QkhSN1VKU2FZREQxaUNUWFUvdHBvcWlMTXRqTVltQk5tc29hTlc0RWtxaGMzVlp3MnVuemJhVjZjRmdscVVDcU9IMDZ0bWZ2RW1hbG4weDJVUzlTU1M1UENDemhyelkxMXFWdml0T1YrSkhld1NlM21LbDN1SjJ0eGc2emt6V1hrU1lSWFZJelNCMU81TXBWZmpQZFFsOExWdVZ5R3ViZUI0dXZ2TFhCUi9zYVkzWFlmNDFnUUtrVkQzQTVsZldVNldYZTlMUVVLUEFnNVYxZExDWGZYSE5ZNWlaNE1tM3JDdHVkMXR4eHdPNHV6Q0pVb2VGTHRNaDlFQSsrZUVaQ0N3OVNEem9DakhpWlllOGZzc0dLRWc5MVFuZkd4aFdGN3FaVWdTZDN6N3lDVUJWa1BYL0V3aGNYRGFPN0VUbDV2eEliUXBaRm1yQUJxOVYvMWxNT0tlZC9MRWtsc3VRR0xKZ004c2F5VzQvRytrYkQ1SzczYi9Ka0thREVRcE4zZVRIaVBZaHJiNHYxNEdSUE11N3F1WW1ReE1JSEpEeHNvbzV6b0x0WHdrQnM5TFhqK2IrZWZ5a1JVc2ZuMCtVYitKQUlEeW9pM0cvbXhCSHZUOGhrN0h4RUlyU1I1UzBFUm5rR3RGYnJTWHlkVjlIbjNXdUxDcHhQVFpCeCtRVVU0QW9CdnJsakt2ek5vQXRzNGNvYXhQMDhsNEljbEpjZW94ejkxQit1dDliRHBBUUoyNDI2K1dzOUplb0U4ZmY3QzkxbndRbHpaa0w3a0REQlBBTEJRMlEwZ2pNSXhsS1ArT2JFOU9rNW0zZE1mWnZ3ZmRhZ1VTV1RSNitGazNhMlZ3Q2RCRXhhTEpWNk1Sa1BPNnBhTVJDUUQ2UEhaRHdLMXVnZHhBTGFlNzJHb0VMT3paamR2akd2YjZnMVU3dHhxK2E2Nk1iaTBsWWE3RmlIQXNSRjM0WmFGL0lNYTE2TGZpaUNhODhSbnhNZEtiNTZobzNwSXk4c0hUalZDRGlYMlh6WGJ1NnN4MWZsb0c0cGt4dk1YVGZwMXNCQ3psQ1g0ampLZndNaHJqV3crTXBCU2YxaFpVMTBIZU1JbHBZeHRNclJNY0NzSTMxd0RvcmpIMitTY0JNeXU0Vi9oRUMwZEg3SmpESCtxSmZMd3NzbHpkMjdBVEFrNE0yYnkyc3hJU3NxZk9mT2hUMUJSdzdCUDhNS3RoMW13bzZFUDFTMFJWMXNFY2JaeThlVDE4RWExVVRLb2hlQ0VIZVp4bE1uR0dUYmlKaXJ4OEw3c3EybXk1cTlDMGtTdEcycHA5a2ZZQmxFRGpDMzBNbUFTUHR0N0pPL0MzejlxSHRWck5KZVVRYlR6S3ZyVzVPb2VReEZ0WXYzeXRBNW9JN0VnWmNWa0RpYW54cGt3TStRSlBRTHBpTlprRUpUWnYyZ3JqZVVHWC9iRTlUaXpEaXJ3dUpKbFdLVGk1aGo5Z0g2YmlxakQ5S0w0TWFuN3M5alRjNDIyekNaMnZTTGwrNG4xNGIzMy9oMUdNOTBHMlRPU0kwVXJKSFZRaHBPYVZhMHNUNnZITkplQ3ZvV1duVlBwdXVZYndqbEY2U2I3c0JLYUVERTkxbXdsMlAyV1ZOWjN5V2Z4MDZZZk1XaC92SHJrYmlpcmRibGFnU0N0dUxMMHlvVUs1QTFsNUlpQVBtaG5hTnZ0RG10VlJieXlOWExIVXJsZzlUZnl6ZmxiZFJzeXZFM29OVTJ3c1l3dDAxbnJ5VHVlbTBQQzgrUGlXemVFNXJnRFVuV29mVS9mWWVTVHB2czViMXdSL1dvWjlwOWx5NlNlSkZwUUM3TVMxSFhuQmgrQ0pYOXdaK0d2UnU4Zzh3dFU2R29peTRITEdIaTUvUmJEK3BaQzBhZmdlTHk0Qll5L3R1RWZ3UUpWRHlVWGFhLzl6a1pKR2NhcnFtSTQ5TFptZFlVNlpwUU9jeGxlbzl6VjQ0SkV0anFUOEducHBIM240SmRmOVRGRStjeXBkL01QRk9LUzZ6TkFiZUwwNlo2TEdrOU9KL3dtSFRPVS85QVVYMlA1aHlqdHVsV2FreTlsOHJ5N0ZJZWxyMFVSV082RDFXTnBQcm5Nd3g5T25lak9IUC9LK0R1aXNWZkZMRG1JTjJIQmtZV2lOWFVoYzZEcW5wSHFhZGtaVE1WV3RpTUk4aDJRZzByZkZQamdjdHBYV3FVeVNFVmcrTC9hL2NWS0ZyTjREbHphTkdrdElQRE1JcWdibFF2dTU2NDhmOWFyWTcya3dUOGo5di9XVWMweU50ZUU0a2t4akdMLzFiYkcvRVlaaEluNU9keGpUR2NpcmViNC8xcVROLzVZVGRTQkkzRks4ZHRIUk9hL0g5eHhDdnRQWHB0a29BUFlYVWNGZ1pEcmdkQUFtajZqZHFiVy9kQzh0ZmZmbGtUWlVoQmNGWm84MnRVQ04rZnN6a1lFNFRDTXp2UFFTN21RNUI3YjF6U2FSRWw2M2dHZXZ3L1hyVnU4eFlYT3J3dTRXdi9PQ2N0Y2R2ZUM4ME1jOGxMMU9yUHE0RmdKVWgrRmJIejdoNkVjTVExaFg2Z1liajY1dno2cGk5Z3Iya3pYM1MrUklZOXNrNFlXYURxZHJqdE52b2JCbnhhZ0NObW1uRDRYeDRsTklJbmlDUU01dUJjK0xwWnc1aEZ5N3EwaG5DdmgyeVpwQ3Y1a0NPSDdWaXFySkY0ZDluY3Uvb1hzRUhZU1BCQTg3MlRWRWpveFJ1VWVqcHZGQXNjMGhCVEpjejNITmdLNnVKOTljSFFyRDJPV2xZTERranBFemM0d1NjdFRJZ2RnMUVoUVFlc1g0MmhJQm9yL0RtRHNMU29WZ1E4cDI2YUovWUMvMittNWt0QXpUTWg5bFo5cDJ5RytpcGpQNmJZSGFQNEd2OUtpSXcvaXc0SlF1NGZJcGZkSG91WHhZYzNJaUhCWmZOWnlQaEJHdWtHOU1hNVhKVHlwTGg4eGg3RFVkd09kaURjeEx3a1FVN3FXSnFqTDFRVTZkWnZTM1ZXQ3NDNkpRNGVmY2xmdkNGTi8ySWhQQUdTcDlFczNoNWRISDNYRmFnMEZHUzEzRTU0SC9wOExwRDgxcXRPUSsxbkVPRGs3Y2RsalQ2aStHSFV6bnFuZnI0dS9TYStGRkhueUZndTB6TGFYQ1NnVTZMOXMvOXZzM0RNR2Q4bE1Dc0ViTW1uOXhMOTdRNGNhNXZ6emIreEFwaXpWVTdGcENudnRZMkduVFNGUDYwa1l2Rk1meCtJSlJ3V1k3eVNWM3MrSHY1R3NYQmhMNkhoVHJKZXFVdGJmR25mT1UyV2VUemtSbG1aNW8yYVg2TkZHN09EUkd4dmxlSm5GUjErWFJ6Smt1bDlaLzh6UTdNdURzMUZkSFVPd3FQcXhjNVo1ajZIM2NYNHZIdTV1d0VpSWgwUW9wUmVjNmFEVjUyN0Y1ekJzRUE5MEcxM3piWGdOMkNnK2d1SythYnMycjhxbFVpRXhPUVVGQ3ZGZ3hjWWNLTXg3VEdaZWJDZGhvL3VwRDgyNU94TTBOK2p6N1pQSmVMZnJIL0U4R1Q2UkRVWVduK1hNUURlczZQVlpqN3Q2dmpQUWNiRWhTSVBFZHVlSFI0bG14WFFQME8zWTloYmV5STcyQ0V6L0xQT084a1krWGh4V0VRZmRLRkI3R0k2c1RvVzRxTHFGTHJaTklOMCtUUitJYWoxZkxLM3d1b2RLOUphRi93MFczekkxczR0aElKUzBIRm1kVFFzNC81K0ZlMzVvTDhBSWlsSVdwSGJrMk9reE5KQUpkRU5weGlFOVlwaHVNblkwYjNaWHlkZnhhc1ZRbjhXL0Q2aWFUN1ZiTlBkR0FnL2taNUJlaS93ZGE2N1FLY01ISEpXams2TVBpN2Eyb0NWUmtBV2xzci9KdjVvZWwyTnM1R3Nhc0pJZU8zT1d1dFlMM3lWYnowdzFiTE1IUjRUK1gzbXNOL2ZreWNEb1p3WWZRVkRJYXJIVTZ1dGV6U29tZERjZEhSbUxxN1BnSDIremtPVVdWaVFQcVJUbFhqODF5cnVvL2ljSDFnNnFWdDlEc1c3TS93RUZDSWZCQjJQNGZ2VWU3YWNwS3ZwaHJ1MmJhT1poaWNqOW5CWUtRUTl1VGx6Z01CdmJXUnFUdUQ3bGZKK0FJYnNKNEF5cjh6OG14dE9EMjc0bVg3aE9qUDdmRTJta2x0ZHhzME1uUitjMzdPUXdmcHJuRmZGb2duZi8xTzcvUTFpM0s4VXdWbHBzUDhVbXYzcVhBZTZFRnRNSG1wUEtDVWVWWEhveVVZMEd6cnZXTkpqUk9CZVpXNUFFdjUyQjlWdlpSOGtFaGhrVXhTRkRkTGlVRGhrcVZPcU5acGdWdXFEREhnbSt5aE1hMjl0dFlIaktUZ0hNY2ttd0x0ZzU0UkR2LzhHQTNIOVBKZk8rRVBFYkt2M3BsTEZQNlY2UUFNMjVRcWIvMFdVTVY5TFR6VmVoUlduOG4xZUpQMEFkcUpEYXJTM0RjUmd6bGErRnkrVncvTlhNZjlUTmdSS0pyUVJxdVl1cWVGY084WmhLT05oQmtwdW9Nd2lOaC9BSzJSQkNObzJmMjFWbmdhUHFEQk02NGVMWGtGemhLREdyZ0VLSDA0V1Y1Y3R1aHp4S29WRTdqQnZOQU0zQ1N2dnZ3My9SK3FScys2VkpGcE93OGZXRXE1aTg1MWo3b0tLWGtFcURHQnU2ZENLVUd5QTUvQVd6QTdjbWMvV0dMV2NSUzNiS2ZsdFY5MmhNc1EvWkJTRlZadk1mT2dZNndmU3hVa3FOcG9ML2kvdWJrdERUejljOVQ2bmQ0aEdzQnp3dkxPRXJMWnB1OWtqT3JPcFVlK01GRzJsTCtBcmliWFd6bmpxZzBYRjQwUHlQZTBwaFk0d0ZHVW9YNy9GN3N3a1QwL0tHc2N4cHp6d0hJR3F6Skh1a1VKeWlzOEpuRU5FbllLNDBldE5QTU5MbkprakZSWmlCNG10aEIxNnJiYS9oTTdBYWwxalkvTXZNdnVTbFNIVFNkRVRiYU9kTWRXdzhkd2FhQ3J1cmg0cVFaNzNYN0VzL3gxMWJ0YVBuMFdNa2dZWmdYQTA5M1U4VUhUMk5qU2xJQStOcXl6UmpjZk9rUGJlWm8ybi8wNXBPTjVWNGlJWGNXTUgwSmNFUmZDTURHejRaa2tWVHZROHpZTnhqMEZneXIzbHVURllkMEd3NThQRllKYWl5cm5ONnBrWVhvVURzQy94WHJ1MWhYanlsdW1kWnM3b1ZPWTBEZWhXeWdua0p3UHFZcFdLQ3RZTnp5eEZySEtYRXFXOWdqZ3p2cnkwdHg0eEtteHJrYWF1NE1iUnRqN29GRkp5SWNRMWVjZ3I4ZHNtWEZZZlNGcks1OTYrOExaZWc5L2pWT0hBVGZyZDF5N3puRU5QNUNGWTdXVEd6RUdFUWxUL2crS3dYaHVKa3dWMWsyZ2M5eGdxay9SRldmek55TzhHbVlVQ1BTNXZwOTRrcGpTY05rM3hrYjExQlFVL2V6V0pyOUVHdEpDdHMvdkpqUHBWR0UxaGVERWlBZnE1elVVL3k3eHdRcXk3cXEvdjFjVFJ6eFF0SnhaeW13ZVBDUVIwMHAwUGI5NmZyK05XTS93aHFzMGkwZGZOSVd6S2NnUS80WjlCWTVIbTFUK3RvZUI5dWdtdDh6OFd2TGRSZXFZcHJ0dWs0T2hoTUo1aFVteThIN3FHa0ZkeER4clgwcDUzKzBieTBlSjFCTUlzMDExNG1NYkUzdGNxc0NTWVlwNUVDQ0IzY0tMemZoaU1qa1RWMlBDenV0czVsVE9INkt5ZzNibnF1cVB4ZEgyWnFaNHk3UUtuOUlYbjE3eFZpTHR4RTZ3TWZYMFVQQUlIQ3c3M0huTnRuY1M3UFZxdzRkOEdnY21rTExhL0JRVDdQazU2OGhQZ0l0dGF0RTI4MmU0ZmwxT2tyNmdGVW9kR21yNTltcHJRbEp6TGhJTlladURZa2RpbFZqdW53SnVPVFR1WWFaalU2NGF3dHRiMDlLZmVxdGJjREsrdGdQUmJSQUNsaUwxWm5DemcrUlh6Z1hsenZFbTlWWXNPMWxGYVdsbjJXWXUyNFBJZzZhVk1ZTGdtSnNmbHp4NTB1Yll4dXBWSmtqWDl4SExESks5QmZkT29vYnYxMk1RMUhsOGpodndBU0xzRGVGS2JDY2UyTDZnbzJVeUcyM3pWeXRNeDAyVUhBeXdMdXVreGZCRk9PdWlxQS8zV093TkZGY3gvdDhPZVlnM2FOTGgrWXpvV25sZ2haRkZ5RHZKWEo5U040Qy9TVnQycThPZUhJelFVUm02ZUNVTC9TUVl1blVLV1E3MDZhRkxONVlNMGIwRVA4YXE5Nm45ZjRNYWhFblh5b0FzeTZvYVl3bW9zVVUrT2RaYWgvWnRXR2pNblBpelZWVmV4Y3p0QVB4VC9GTjFVRmUvSVZNaGYrR1NiTGdQTnRUbWxmUlZKNVR6SjZPRGQrZ21EQ0ZaYTlEYXRqS0YxTmlDOEtxTFNvZ2VKNkRyMG9YSWN0V3FXK1BsemFVaFA5c05MbDFSNkROOTcrN3NFSzJ0S3g5VENqS0Y4Q2ZlRHpma0tnejY0eCs0em1DQnIxbW1YK1VwZFZSSVVLVGRnbUk4Q2J2TW1oVncyVWJYaFQvS2NMQkxFRE1vK0ZTVDcyOTQ5NUJlNEdVaVpzUGdlTU5WekcrRXlPZEd6ZE5iRU4vcUlRbmt0ZGQySWY1QzJtc2NndmxvcHFrcGtBUnVRNWwybStFbFk5QkttSGU4TmFCMVdlUTAzSlZnMTdSa0o3TW5peUlJcUYwc3c3Mmd4YzJsL3JVTDFuUlEzZW10NVBNZkx3cHJiMld2ZXlUckxVeHp5OXBLMnZZN1FKVXQxRHp0TDRVUkpFeTl2VFBUYlpjTlNLc3lEekx1R2FJYTlJSFBtZjdiU244MHVyS3F1S0F3UWgrMVcwWTUwczFraUFhOVZyRzB2VFVoWWh3R0FnV3paU2hVd1FFWGdJSWxKS1BPbVZWeEdoNzdmRTdxemFsKzB5dzFWaGpUd2x6eDAzZ2kvZm50c2pEbHo1Qm5yRWFBdUc5cGxRa0RlYjJYbmwyT0k4eTg5d2prcGgxZDN3a2hZZVpsOVhGMHU4UmNkYVMrUHJRekkyUmt5Zjg2ZSswZDZLK1d0RXpRZ2ZnL3BHOXA0Tm00akw2RjZwZzZzUW54S3E3MDZBVHp4N2ZRUnNIekRwSzN4MnAwWXBJNTVMeUt3OWF3UzNhSG8rOU1yMmRMNkpNL3YzclRpTDJjRkRuQlduMnVxVnczN3BEMEtmNElkdmlqYWt2RmxDdzBYaUJFdEZvZHhFSGF4ZzBSS1Y0TmxUNVBzenJ4aXZYR2UrSC9PV010eEtwVExpWWIwV0o1N2RPOGtOdlBRbE1uRmtsTzJiRFlmQWppZUFKbW45MVN1aU1weXVueVpCanl4cDFoOElvdmVpTWkxbVBPWW93MHFGQjFPb3RNRzIrejZibmg2V0p5cXdhSXR0TnpaMFQreTYzRWovdTIzczlRRnpNdTRHS0RtV3dFelAxZE92Slc3S0RwaGVVNXZMZkpjaEU3THNJdEF6TTF4QWZGVVRRZFVMeXQxSWtrcGs4U25KZ0dxbkJuM0J1TXljeFRNMW5vbFZmN2NWbnNwUnBNTEtEMXFzR204ZUp4RFJPZjVkWSt5QjlKQ29zc3Q4dUVxcVhIaHYzTWdHN291UDJuNDBBeXBHYWdpNzZTRXhVclpoOEtvU2pqRVFEc2VuMTNrd3hKNzNaMG9ob2xXSnIzMEszTlhnalVYMUxZUHM3N2Y3WU9jNXNwZUZ2cko5dHRLYnJQSFhxVmRkYTM3WUNsTEt0NVA0VVZDTzRsdmtQUUpFcHdvOG5FQWh2OHAzN0R4MUxucThtclV0NjN4YlJ5Y2g4dlZzYU52SERFUHYvNFBhd1JvZEZkMjgzTlNYdTFROVh6WVNlb3JpcENCdnp1UG5WOUFOTVlrZUd6Z3JodnNDY29jL3l0ZU1uWFJCcWJYczY5ejVzcUFMUEVodkpXUFhKNUcvMGM3Y1B5alVVS2ZBeVVHR1diZFk4TzZFais4OGp1WTZhR2RWeW41VTRYbW0xZjZMWVhtcHRBNDFtQjdhajhISEExSEo5OWR6YW95S01nR01tbkg1OUEyUlg1WjhvQWF4YVR5Q2ZkbmR3U3pEV2NVOFdvRjFZMDJ2bmVjSFA4YXY3VVVNUUFkRXZuTjVxNVBmcUU4K21GT1JBMkdibmpFNWE1NHphZEhFUXF0cGxscXB6dy91WHBKdGVKV0FRUzJJU2JBV2tScHViM1EzUVZEYkRYNkVBaDRVTi80cGF0RnRtRDhTTnRrNTU2bVR5a0tKMjI1YnhpbmcxNEZkN3JnNk42MGVLbGZOMVhhZUcvU0dLR0o5NERVR3d2b2txcDFiQ1NpNC9Zd0dxRDRMc05UOFVvTGdpWXlQQzN2OG9PQnBocHlaMDJRNlIvZ2dJRCtVb3JKcjMyUE1ZYVpTZjJuQkZDMFBhdEkrRFM0UXBXTHgwcElMOU9JYzdJM3VJVm00RE00UGR4RHJtOWc2UWd0MG02LzJlZGQ1cWJ1aEREOU5vakM4cmpocWFqWlY0dFlhSDhKZWdCb08zRjZDRHlkWEh2c0JmSEoyV2oyUkZlcnlaQ0g3eVBobFdHejhqVEVHd21RR1MwTGRyOFdtRmVHYU5Dc21zN0t0T0szdmprL0xscmJPV0hlMkRTNjBETHpIZkZVYm5JUmNwRUF6VGJ0RGxiZzhlMlpQSDlMTTJ2V29iWmVPZkwyc3hGYThJSjJyR1dBR2FVUXkyTVBJcUJsdm5PbS94N2xqODZoQjU5LzI2WHIwRUswamZ0SHMvcy9QR3g0akVxaUU3cGoxY0FwYVdzR3piMjFOZ2ZkSkVvd1FUSWh5OU9qNVdEV3pvNWNIZUNoSkF2WHluMlhDOGtjc0RUTWJIWUJuNmltU3Z5c3YvWFdpZkc4eC80L1hOcTlJdUxkQ1M0MVIvcVJlaTYvRkZDUTdqL0V2YUFsNFBtVXFEdVUvMTVDd3BiUDFtYlNpTUltdkkyZERBdis2TnQ0dXFzR2R6Y2J1MVJtemlucWZvdE82RXVIalZPeENrQVh0MkZrMWlHZmJRS0llVGsrKzFia1hNRlRwOFdrQWt0dXB2OGJvNXdRZmpxVWtJYjYwL2JvQ0k0WndIZzlid0dieVpLTEFRR0o5N0V1L0t3aGdTbFNidTQwUzJUUnpyNUVzV1pUN2lpR0VIQlpsVzZPUVpqcGVSVUJYTS95RTkxcGlDMnQrSXBZT2pDSVZEaFUrOGlzcXpKZDR5ZXhXNzBXQUc4RzZTMFBvVlBiMHZzWVF3K0NkR1lRb2g3b001c3VsSlZ4aDBEcGx6M3pDY0tkZUZodEU0Mk9zN1FaQkpjbExNOGRUOFdnUVZYbGh2NzRKTlBXUnZrNlpNbW8zREhQakpnSTBMcnlSaDlkREdkcDhwOHRvSk0zbUZBZ2xqRnN3dExHNk1kY3pOMm83bnJQRWo3bHkzczZLaUs5d3cvbmRGVHFVQmNLbTROdE0rZEhRMzZlT0ZFcWMvRm51UExPbUF3emtwYVBQZzJ2QUsxZURyNzRnajJJZm9ZWndkclJVdFErbVFqUjI2dFdiVnBIbC9La25vTXNRSDdQNXhTcTNlVkxnYTNDSFZjck5kWlRhN2lrL2V1bFhVazNDUi9WZ1RxRDZZaFBhZTN5S1N1ZktxL1dxN3F5Z04yUC96WW0rdXNQTklzaGFVWTRvRnBHVW96bUdDY25mUjRQNVBzeFFEZ1dBVGpHN1g1Vm5PMHNWUVVCUGZDTEM2UGgvMmRDRGhKbkM1YWxKbllaOTN5SHVzTDBRR0piRUFLcGFQVnQ2WVNIYW9MWE4rZllyY3lzbjN2V0MzQ3VZRENheC9qTVRHMTA3WUZ6Zlk2b0tMUVdIUERqWktXeEZrbGJQSlhkT2VwVE12V3R0aEEwNSs3RTFHUk5lN0lxRithSTVtTzVnQ0VCWXgyYktyR2RWbmlzcmJ0N0lwZTlRbGpvWjIyQmRoY0oyL3RTUVJhYjZ0dG5YekU2VVVrVTVYKzM3NTVYbVVzcVcxWUFNMnZXR1A3dVNhbThFZDd4SVZkVFVCTlJwMDAyNUdkcytoWGZKamRQZzRsejZGb0hNZTdoQTgxWjlSTVZ1T2pJU25ZVWtlcWwwaUUvbEIvR1VuK0Y0aHNaRlJmbjVXQjdHZzU2TFBiVzZMdDBRMWdkRzBVbHNWekxJQXg1RkwzNFVESUd6MHRQQVptL2lxVVkrY3g3UHM0b1d4QVYyTTRYQkdWc0RsZjVTNU5pL3pURUQ4MGp4cm1Ia1hjbXU4ZC9vdjgvaW9qWEdWdjNFYVlKcjNIOFFobkdLeHZSa1pIT2dHYThuUzc4NkJVb2pYMzJaNDRDcmg4OVhTZlRGc2FDRXhRd29NRFlzVUo1dFhxdlNDR05ISlFyVDdUMmVCbDIrb1hxdTl6M1N3NmVIcC9ONGVSZVdmQURxZVlwc0F1cmRxaWxiOW13NDRGbXpmdG9YYUtybXhhUms2ZWhpZVZNU2lDamhhTEszNzYwWm5CR3NrS3ZjNGU1b3dGNTdQU29BTGU4YTQ3NW9HZFNZK2hoaXIwTlJRaEJoTXZEWFUxM1NBMEVESmo0Y2xFZ0hWc0ZsT2lCNThUWU9GbFVUeDVQK04yUVZQNHB6dXF2TDdxRjNJbmF1U284dXBSLzl3M2hDWml5MlptLzJzUGVRK1p2YVBJa2FJajF6dUhSVDI0WnRTbDdSTm9yVHdkbHM1ZUlYRjg3bXpkdzJ0Q3RCOExoNnE1RzdNci9laGpadlNuZ1oxd2VmVU95SmpHanEyWFYyQXozelh5eWx3WG8wcjhuYUNWTkNTd3Q0TEtGN1N0NUlJMGV0N1ZHTVo0ajY1WWsvS3A4KzdkZVQ0eld4VHZiV2VhKzNUcllmYkZ1UVg1ZXVKRjE5TThBN09pT0hwWFBNY2txbmJDMXdJNVQvWkY1YmhrYkFhWDlsaThTZk9IVTBSS1hNVnRoQXRBUzZMTFhXcEQ3TzN0Q005ZlFNUjYraVA5VDkrNFJGZWNSWjVqMHlHNjBWQkhXYzJCSVBzZEdlTjMvSk9aUUpubnlVbzI0UVBxOGlRaHlsL3RUdjhsLzZKNDVDWmlwY1R6ZGFWS0Rlem56Y3JjekJuTDljTzBiV2hmc01sSFFoQi9maUFHazNnVm5VQ2JwT2cwZ2VKZ3FrdUFaa0FReU5CTUE3MjdveVhqSFdkaEZLRzB2Wnp5SGhQdVFXUjBHRkVDUU1zNHpRQmt3dWdWVTc5cmNzOVZaYkZGNXB3T01vRTFPR0JRZEM4ZFdZNktQYTM0LzRCaFpIRzVmUndRM3QxamJUMlNEa091Szh1djFrZmt3akNNTGxPUE1wdWsyS2cyVkZFSC9YMWEvbXpQRGdZZ01KNWJGS0sxYW13SXdzT21PUTdBTXRyMWFLRGVzSWJkekZlOHZrQ2ZYamNvRSt6NUNOQzhyZXhtZXl1ME12Rms0ODFtT3kzazU4czRTOVBCc3lWc0duRGpKbGZZSHpPbVIxM2t1TTVZbnJRMWtVMHdrZWF4VzlTRG0xdEw0TWU3OGIrR3IxUzJVeExqZDdCQ1AvdkpJK290bmxHM0tIUGxDaEFYU2xsMElaVWJudXFUd1FaVWRWZE5yVEcvZUFVcU9mNENoVCs1dWMwb2xTVzhRazNHY0lRRXhwVHZmaTJmUXR3bU8reUg2ZVR3V1JEa3BSVXNxTzFLTm5XRzNMU2hqa3RMZkZDRktpMk9laTdicU9PeHdELzdwcCs2SjNLMGJXL2M1OXd0Wnd6WllrdldDeDh5ZUpmNVNxcVJMUFNRZFVRbWF0d2VNSTVXN1RkV1ovT1JpVE5LVUtaVGtneE9iNzdudGJtcEVIbzRjYVc1Q25BekFCeGdDNVBRdWxhNXJNZXE0aVg4Uk9DZ2RsNFlYSW4yZWltelRNdlBPcEtZTlJTRTM5bjI4UGxERDcrSlArUUt0Z0NzdCtmbzQ4Vm9XcU84QmUxQ25PbStRaFMwUEZNenh5dHpXNFdjMG1rbmt2cmdCcnJWOXBUS1BBTDBZLzFNUHVYMDYvRHlhbXdVTzVNQnE4SS9XRldKTXhpWXdxREhSUzJSaXhDTjh3U2Z1WUxiR3EyajFmYUY3Y0xVajBDUU9aWHVTT0t6aGFYc2YvUWVmQTBSaUNDQ25XWG5iSWpQcVozUWlZckpMSkFZY1NtTDNEaHJMZm5uZU5FTWt4MnlrajJIaFhpanQxRzBIWW8zajFJMk9Qdk1RMDBsZzRNTktNMzl6YnVvdStFUjNuMWxUU2QrUVNWTUJ1c3NyTnhvQ0RMTE1oVUxlM3VBUmdSaUlqMk12THRBajdJek4zRDI5ZCtJZUNNM1NQT09NOEw1cTdzSC9McTk5OXh6V0MvZjRFMi9zREs4eTJIY1g5SDQvMU1OQTVXRE56c1QzYUNuYlZrMDZFUFJWUFc1WnN0SFdZamhGUjRKRjVuMGhvZVJpZ3pUdU1jZUFRNE5EeVpTVy8xLzJWU0ZSL2ZiUVlxaFNHMlNaUHV3c2VCZmNYUHhUSGxmYWhlckk5SU8rV3RQVzcrZk5BTmxEbDE2RnJyeFhFNmhmNjV6QVlGMkVBTmViWmY2ZWpjcE1SWUkrck5qMk00dFlnaDVSZ2NVSE45OWNLMWxibno4eUJ5eE96VnVzZG9lL0tDakkweXVLZGcrOTVYd2FTbDJkZWFoeVVlUDhlelZJYTNGYm0vY2tMeEwrN0JoRkRrTjNvR0FNeDd6VElad2VrRFZZb1p0d0taeFE1Zmdpek45MHRMc01FUERWZmVjUlVCM2hGRW96OFFVQVhGeVFjdEVOc09hTXNYYkNLVWpNVmNvS3QvZm9sR0xlaVoyL2RhMUxHOGllQ0drb0p2NVYzdUV0ZkV6ZkJWZWlidElxcEZWYXlKdm1JK0ZQb1dYVjJPc0hWVVlxN0NaY1RVL2lMZ3RNQVh2WllDWmFKWXVodEZsWDJGWGFqUEhIN1F5bDg2VHlRZWZzSmdibWd6Z3RnSUQ4S2lpdi9pQkJ3MXRhTkZkSGxpQ2xlNThKUTlDZ3cwTEk2TDNtNVF0dkgzSFNaSGU4bnFmYTlXSS9xZHJsRXoreUVPRXhiR3BNVTZZSE1wNDlYMjcwV3VsQXlBamZQVzArK2U4d2VGSTVpU0l4K3ZWcmU0alFJVmtNdkYwNmZMemlUUFBzQzNEYk93R2dIMzVrT0E0eWZkMUhMZS8vRnN0aVJob09CUlY3S0d6K0tRK1pIK1A2SlBaeXBDOThVUFI5dmNub2tSL3NIamh6V1pXWTJZM0ZBbjF1R3h5aGMydUkxTUhuWTJNci9mT3dWTjhoL0RMMTRqUktRa2xXdHl1Wjc5eXV6Zmpndmxrb0dLeDJNOUlocmVHZjlRVUNRME5VRi9aSmlnR25ucHcwdE0rTzdmZHd2eVU0emR5dHFmdTRjdG9DcGVUVTFoYVRXaWVsRjFsTWtBTXFlZDVYSG1CRlo3WVgvUTdZdU94TmM2UjlJLzhYZmwwbkF5VTI1QmVkMXJtV2lwSkVnMHV2Ri9SVTZQaFcxR01LNTEwQi9VWGJFUEdTL2xleU42eVduR0xDQUtiN2d6cXJkaHlwUTlHVXI0RE9BKzRETE9WNkNYVzgvQjhmSCttVW9OT0JLNlQ5ay9WSVRmSkNudDVaNXEwRTdja0l1bEpIWG1IU1pEeXFiemJ2SW1TOUJuV1JkRE0rVkg2dElwdTRqeTN0K0JLUXdSRFdBU3pUVTZsb2t3S1lWbHhyWjRhRGxmVEZub2lROFU5eGtUbkozY0QvS01GbXFWWmJQRXByLzFrUGxVZUh6eTFIS244VDVxRVVMb2ZQbkY3a3E0UjZwWXpIMnoyYnZMZlRSTHZZWEthWG12OEp3WDdXL1lqb2NrNmZTeGtyemRXbUF5b0RIdXJBb0pBcnQ5Q0dvQmpHYTFVdGUxeDNLdGpKVy9BdHI1NUs4M2FXYythUkE1RjFqL2VpVmMvbFlzbTN1SXNVUUhLQmhBcEphQ0JpMkszL0thWUo1UVRUUy93ZjdOQVhKTVEvMUdYcU1keXZaODRtcU5JRXNoVkJwWjE3dzAxbWdDZ3JnWXNQWTBORlM0WGpzTmF3OExnOGJtMW1sS1gzZ2NTdEZDWUdTcHgzdGtqZFdGZWFQdGVlaE9GVXlya3hnZ2lBd0hwWkdYVmNIVW9rRVNsSmQ0dmhINTY2eS9veGx4bGEwWktOZTdoN1gxa0dCTWc3RC9FYTM1d3ZKdEtzYTFTUzU1b1VWUGZLQjdNSEl4alB4NDRic2xoZ2VGRzJDSHkyam1QanRIMUcyZEpGbmxjS3FYRnk2Z2FzSlhJSGJhZFhIc1NsUU5ycHZwRVBpYUkyTGxKNy93b0lDSUdBeXZCMWx1NlZNUGVCTWsvdWFuRFJFaERPYksvVnEwUFZDYys2TldQbGU3R1pGT1I4R0Q1eC9FbjlaS2RUWUJTU0RPTUVLemsxdWVseEJ2V3JHQ0xnWUN0QzNwVGwycDJkMnJ6b0x6U1JSMlc2cWZmaXpqTUF6NkJqWkgxOTJaWEhwWFE2MGVHUGVJSVI3QjFKeVU5akorem5CRDY1NWFDSGIzcmFVd3hzYlN2VEdPNEswSHFtM1d0ckJpbGNGZ3B2SzhaY29Md09ESnFXNFp3b0Q2V1VPdUtEOE4rT1dZbDg2UVdLbE5xbC9xOVlwbWhUcDNhOUM5M1I3clhucFplNnFhc1AvcnNWcHRMSzUwUWJKVW5RZWFtZ0htLzBiR0c4aCszUzZvVFF3SXVlYVJjSGwrK2hBOWI2TGNkdTJqaDdCUEtKWE9QMElqaTY1SnNXby82aENVc3R1YXo5OStuL1NrdTJDbTdCcEpWVTZoK3p2OXNjTGJDcVVPdTg2U2NHcnRpeERLSDBuL2NucVFSU3hIdythaURGYk9CdVBLZXBzRU9xK09NYWZpU0I0aEJMbkNCc2hvU1g4VkJpMzNwcHZyQ1VYdVpSZjZTM2oyWFpmRHpIeVBZWXNTU2FBUE5pTFNaUkdLaURVaXFlQUNKSzJSQ2J5TzUyQld1ZzJLZExTbzJKOUJpejV0bW5QaWNmR2hsSmt3UkJwUHVDMU1XWGIxanZhMkxTK24yb0dFZnpaR0xNaU4zaHdURUMyU2dzQXFzOXZMSFVnMHJWbnhPdmNsaEpJMjdxQ20rSFZTTE5nS1dDWEROL2hoenpJS3BmTWgyL1V1VlZhdFFSeWRKc3lRbWJoaTdUTG4zdHFqZVpjc1kvaEJYRlpHNmp4SUNxOUs5R0dDeFFLUDh3OVd2R0ZVTyt2K2xoRHl5SUVveGJTZWRmR05kMDJqelB5WUJUeFdvZjVrVklLSDl1Qi85YlIxZEJnR3puZmJ5bm1TS0lsSWVIZTBnTEg1YnlvMkFLaVhPaFNBZFFFSDdyYmc2V20xNUFBK0ZJK2RXbkVEZFB0MVU5QWcxaHhCTGFCUXJLcEdlNDdCRjg3OWpadzdHY1I3TE8zaDBDMVRoV21pcUZsTW1kK0RwdVhRbWFSWGpNSjlqTHZramdESGpvVTNNYmlwU2I5VkM0SkpBWUJMcE82NkhzWVpXN3NjOVhsMWozdWJXRTgxSkd6NUt5emYzK1BxemthbmFZSGNUTzVxS0hnWmx0d2NHTWM3RkJJQ3NucTBQY3ZyOTU4K2UxZFR6V0twZmFoeUlzWlVJVXFoZ3NXQ1lqRGJYVlFHYWxybTJCSFZ6OXJrKzlvRTNUNkozcWJwaHVBQ0luRk5JSjNNY1EvTmJmYjhkQ3ZMVnY0WmFrVmN6d1ExZzhLbFBzc0dhMGp6VHVxSk15ejJYWnRoWUJQalV6VmRvVlpPYVc1VUFXMDN1Z3hxcnc5Yll2djZoR203ZFBHRlFjREhyUjV3bEZEbmlDUG5hT1lxQldLSUNPWkEwT0w5Y0JkL2lPOVkwQVZZemFqYzlxT21YR1ZjVmd5cUVOZ0JIZENka0Y4bU80TGFUaEdWa3NSdkpNLzJ4Nnp2cWRreWNrU0ZnWkg4bXRVZWZwRHZWcU11UnY1VmJtc044VjZNeTRXKzNBWGp4cGZjSlNJYlR3Njc0TVNZdWRRbDY5d1REL0p1TUhMWkhmQm9nQmYvSndoZmh1dS9GNC9jRmRSNUJGT0J3V3ZCNXZQcFNEZU1XYWhTdHlGa1BXay9UNitPc0Z6a3djejY4bHlKKzVXTkpFbHowdjRJUk15aGFmZkhTcEl1YjI5dFY1aUtJSmFDME1yYXVobll6eWUwVTJwYkppYUE3NllqVzJGZHBkcXVyQlRxcXdLL2RENStMYzdaV0lqN0dGS3JFMytBdVpNVGh2K1VQUUp5dTcxZ3JjNzNKQS9wbHU0NkIreTJKb1dIRVpwRC93aUNJS1Y2bHJGVXBEQzUvUWRrODRyNzMvY3BWOUxZMmsxcUxvNmhqemNtMnQ4djhkWGhoUlpIN2NoNFBSZ2FKWGxpbEVZUlFrczNUZ1JmQjMzckYxNG0wcllrUTlTLzVqZlo4SDI1SzR4Ukt0OWc1NlgrNFJpTGVQRm9mRHhMOStrZFRFcG94VjQ4MlV5S2FkMzd6Wjl4MmE3OHkwUWtQWlFsTXFXdjBWc0g5eGwvOFU4NFJOdTNxdmtxM2xmT0g2VFNhY2IvSzM5UzRZK291Wm56bFFZRUxheXFjQlB3THlSejg4OFMydWpXVEUya3VVVHU1a0NGSmczWDRFSWo0NGI2SFF1b01KV0l3YkxacEUrTUFUbVQrenRlRkNUT0I5WUI1ZWFKYWh4am1DWEI1VDZBMnhjbGZ2UE5abkgzdUVtOU5vNHZvbFhBQXJ6dUlzOHdEeDE2Nm80MktGZW5NbC9lU29yaHpBYU1qQWprU1ZKbVFmd2lhdXhXS2JNV3dFVDJiQXl0KzhxcmxJVEtxZGsyQ3hEYTVsdmhBRmYyZHY5alZ5UnAxQU85cmVmKzZHaEtHYkpYa2NndXRsRVMrMWdld010blE5bHNzV1dlNzcvMGlza1I0djJPTVVwUEhDbzRheXNOSS8xdHRwaXFxY3MvdHM2TVN5d3V6REhILzdaeWVlMlVteUg3dDhqMWhScVVVY3M5MmQ3YXRBVE5rS20wY29oamRCaDl4ZWpvVTh6THk1RnZlWlNXeHZ1U3pqQ0dOODRkVDJZQitWUFZBNzcwSnVqeERZeElnR3ZKZkVnVXkzZDEvdjZ4UXpLSmtEOWtXSi9HZjRuU3p2ei96eG5TdHM2ZlpCL1JJYlVCbkZ4MDRYcUZoRE5PTWwyb2hRUDJTTG96TlZyZTQ0RVZ1Ris4ZGxTQmJIaU8ybkNCRnRkTVFNeDVMRU5oYjJhSUx2dmlNbTZ3ZTBaZTU2bXRhUGlPbTQ0VTVPYWpQbytLQ1IydFNrVFhzWHZpKzh1TGJSMllydVlIaG1xSVZiK2dGeWJ0ckFqTHdoTCtpejRLNGtkM3Y1aGxjLzkrbWpaazNFQXFTdElmQjJDdTYxc0dLejFqazFRQXZ6NUhqbDlwQUQwZDl3dUhtN3FMcUllQlQxUzJiZlN4STZyNVlpS3I1azJwQ2VoZHFoSUx4RVd4QjlZcktneG93cC9OODBNWmg2L3dWTUppd2NxY2d0ZDVDL1Vuam1CNVpjVkp0bGVQa0EzRGlLVm5UVElMZ2VCaFlkVE9jVU1DSmVnZHhIVEQvVnU5RnlkNEhFb2JLTVlDZi9aR1FQdmV0aEhCQU5xUUV0UzN1a3hZRXJjM3IxVGtRWUp6bUFzdkN3VlFmK2lvYVdaUGhRWHM2eVVocENtUDA5Y1k3cVkza09GaUp6TTlHeCsxMFNIVEpUUXNYOThNQS9UTDNxaDVtOXVhK25rdGxGL2hNK3VNNThWalBSaitaYzRTNjgrVEZ0RjhiclZuQTJWc3BVM2d1LzJuK2tMeDZ2UktkY1JVcEorMnBOd2dFUDdPdHJUaTNRRXI3U3J5SFpFcGFKRzJlYjNsRmJDVVE2ekIvWTE5MUt3djh2QTQvU1o5ZUhvOExDdGIzRGY4T0htUTJnbEtTOUJSbkU2a2FGVFpmdUw1Q3VLV1NXZDhEMWZlRG1rTWdMMzV1TEx0NEIvS25Bd3hOakRRYWlGMnBkUlRNNFVsekVJcWJGYk5NREFHNFRLSzkrOWQxZG1TY0lWWXVNRnRkczJuL2IxdDNaYUdNL2k2aUJueHdqeG1mNDB3SjdoNDlFWEJSQnA4bmVSNmFhQStqY0djc2hudVpnUUZwSzEvRDZOb0xPT3RwaUl2MW9yWUtUK0phQnpWUTNFa2hoUHQ1cG1DTVJ1TFoweVNMTjN3dThacXpDR1ozV3JXNGpleWFUeXVuREhJc0twbmxMM1dKcnJJeVFzemtpRVlEckVhQzlVNVI1ZDV4Zk96dm9PNG54ckRSbUdpT0YvSEpGM29tN2FJYXdUWExTNDRwemVVT1JCd3I1RlRURHpKeVdZRnVwQ0pqSWo2ckVRMlllR2FSNVIwSzlkT1NrREsrUnBod1cxckEwODhUWUNNL2FzTkplVTgvTE9DWG0wZWZiV3dYUHNhRGc4WTFtWW45RVVYQVY4RkhpY2R5cVFNNXp1aUZtR09IQ29pZkNaQ1NHM2FybmprSCtxUUxjbUh1WGl4U1dtWXNHZi9GZjhxdmZtL081cnRjUU55WGJpZGtPM1FSUGpPOEl2NXZ4QWR6UU5PQWNwbHcwQzd0TWJYd3pKS1N2Sk5RcWpJWGc0YU9XaTBjbzNpYkRoMjByc2c0dEZpTjQ2RlVHTFgrdlIrUW10N2p3VHpLdlc1bUd6SytGaXQxTUtDeG1jNWZSUVpQV0JjMC9jbXJ5UWhmZTJJMWdDR3ZUL1BLU2FiZ2F4ZjREMERrTkNKbS9WT3NOUkMxUlNyUlBCY0dmb0RmcVlsWWg1REQxQWhuWTI0LzBwQUNzVUFiUlpBeEVBVzFXTlh6SXNrMGNyTzVQUDRYN0JHWGdtOFQrWHZmN1lHMDRWakE0Y1pHc2JsY1VkSUJBaE0wWFdidFBaemJRK3llMmtyb3pIZFE2bDVLVFdHSUwrblpNRWR0WkJlWmgvRUFId2hKU0JzUlRCY0g3WURrRlcrbEw5M01JM0tpZFFVQmdhRVF2V0pqNitDU0NvMlV6MGRVVW9KZVhNdk1vSzlDc1dyY0FGMklhaVEyUm83OHNZMTQ2VE1Pa21SS1RUcXU5Yk1SS1d0RE52OFVRaVMxa2pXcHZCcm5UemVnaEJKUTl2NWl4OUJmekJ4ZkpHQ3h5Sy85am5aZTN1RVNZalVhTUFEL05ONlVxcUJLSFg4VE1VUGJKL3pDRFpyOUtZbjlDbGE1RlJGdHY5RFlEV25nSG9kTVQ5ZGN5TXMxbG1FZkdacTNhekM4SnhIdXU0Q0NRYlZqZ0pybDZtTzlxdG9Rd2NsQTh5Uk1YUnhzODdPditCSWFpSjJ3M0pFTEFVRGJRb3FxN0JXNnpIWm5seHBZSWtDOG45QW5iNldOOEtIbkhUOXgyVG4zNjcrc1NLSjFxU3JKSUl5b3o0MFdSQ1g2WGVQaG82Q29wVlZYMExkdlZiZDRwTG5FL3BzZ2l1ajJOMWVENHFDYlU3SkRoaHZVYkRKcFhLU0o5M3gzdENBT09xeHpVRHYrQzREejU0bzMrV3hoZ2I3dE1qUnphbDduUE5DQmlCSXVhNGprb096Q09TRVZCTWxIcGxsdVJSR1ZPK0dGQ2p5NlFDejh0K0dVQ3hKajdpQUt0ZG03SHFyc2EwSXorekVsamNNNys5WXU5WmNyN1dGM09TQmVXeFFwMXJvVzM0YmNlbUw3dlgxb25ZRjFjeVNyVSt4d0FqaE1zNEtJTTZzczhreHo2WlpIYTBFbEQyaHFYY05HNEd0UWQyZUNWZkErUEdVaXp6TFA4WlE1MDZ2dG14NmMrM3FuRVpaWFozYjM2QzVzamVrTWx5WVNFVTZWVDFmNzljU0ZNUG5aQ01FNk1zWmd4YWNoTEZpckZuWFZIMEsrYmtNcy91NzU4bWJPSjZwZTJvWTBIQ2RLbEphbXZUcTJjWHgrUndLTXorZFIvbFlQMjNhRUkxbi9iZWpJM20vekd4eTN4SzJ1RVdWMCtmc3oyWDJYaWlmTDNWWkJMSmk1STNLVkRrT0I5ZGE3b0M4Q1M3QnZyYzlSbVlXUWc3bDZ4VHp6WXVvK2QxTkhlNXNMdUVWSTh6V29ONDh5U0JDSFdaTi8zelFkdUdxWW9EVEN3Rit1bE9GK3MzMW8wbU4zL0ZBVkU1a3dvOTc4M2tMNW5ZT0hqWWFVd1VGZ3BqdEhxdGRXa1hNck9DTktkS1dERnp6djV2ZVd2NkEvYXBuUER5WUhMOVZTZjlEYVVRejNCaUs3elVVUWcwOVRJVWdLQ1RVNTAxVkMwbjlicFJmbS91ZlhMYTc1T2F4L0lGUWRIalV0WEFvUXAzaFJOcHBGOHFsc1JNWEc4a3A4QWNOUk5WMGNsb3lsTi9MRWhLc1JtNGs5TG9xcDRlYnE2WnFQT0NpNkNRZEdKTHJsZmhFVjNTc1FCdE9Cdk5FZ1pWTGtyT29XS0prcUVndDFMOFNDaDJ5STlqTFNxM1JSTUNqbzhsVTJxdGovcUpqenJpQWI5VGRIa2NoMTBPV1dIVy8xYWdreHVRV0dNcldHYURqcURvYjd3bGdFMlo1c2tlK3VTeHQ1NDRyUlIvcEVjT2tRWHNLaklSN1U1Z3kxT1FteVZGNGlxelhnczBSNUhXK1RPTGRyVTlrREFGdFR6MDBGYVlMWHhNakV5dW9IcE90T2d4elYza25NQnhoaGpFeVdKRy9DOTJia3VscFZJd0FjODBxRUt0OEkwa2ZvZUVlMEdOcHJtREUwRGtGTWI1cDE3Y0tQcmNmUE9qRW4zMTZnMzZ2Zy9WK0RpMWNlWEZXcTJubFpwQ1NvVUNDaElqNHFuSWo0Zlo1elJuS1BGUHN0K3VaUTJDQmI3cEJ3MHNHR0FVT2w0YkxLWjJuVUhSbHk4SktsVzlvZkRDM2pyMkZjaHNlQWdRTDkveVJxSEVyMHR4OGkwR2hQZXU1UXdGbjlEV25wbU1uZGliS3RxS3hVdkprWEdRVW9sd3hra0JyNUNPVzlROWx1UGx2c2hrWFdKSGRKcnk1R3Z6VUQ2TXU1dk92d1NDOENDODdpSTlZK1hQNHVvSWtJWWdvYXA1WXhQRm1xS1dSUFN1N05vRk8vV2Y0Q2lYM0RjUXNjTDJYVXZWQmZjNUJFS2ozSG14K2VOUVloTGNpK05wSUJIMU9nSXhuaGthdlRYWWlQNkwrOGh4Zkt0Zi9LWFZqM3lobWtYYVpkc3ptZDh4bzBqSUE0RWtRN3pycUhLY0VyRjRMQ0t4S0Y0YXBFZjVYanJ0S0prcU1ZWUlSRGdldWRkZURjL0ErSzFtQ3RpSy9zdjQ4VVpYWGdlVEVaYmJrS3k4UkFtcUowZTZheDRsb2J0c3BqYVJqYkpmQ1RVZ0xVbi9WNkxhdDBKUHdzR3lsWDJrcmxEMUxZbERLREkybnROQUZxL25kNzZyb3N3TVoycHVvME16RmlETEZ3aHhIc2F5UXRGckpkZjhkWDZXemI0V20yZHFyVDFaMG1rOXJiT1lGb01IY3F2SExuYWVUckMwNktaWURzQlNrcEhNeFdVS2JxOUY4OVNpT2NwaE9YWFQ3bUtTSkJUdXl5ZVp0ekJTRU5nbk45SURnYWZXQ2E1QkREL0FaUVdSVUlXRUVwZElsUjBBTzNhbUZvQnF6RkZtNU1FOE5IZTdSSXZldEg2S1ZBWlZTcXdOYnplaTlMSkU1eFJkaE0vRVBXN3pTVDMzeTExV3VSN01xTXJNNTh5eEUxOWhqQ2syUmlueXpPNzgrR0FLWGhtV0FBVDl0djU1aWNhUDRBYlVJTHlGQVJuQWppNjViVnNqdkkyb3RVTzBOcVRNeG8zbUtXczNXdGFTR2daK0JGR2pKMDlmMFlZOG04Y2Z5TFZSOExrQnRpeEF5L3FXQUdSS3lBeFREU3JDV0ZTY0ZvUUUwNDd3RXdGVndiblprTFdDdnc5ZkNTQ1B5Z2tYU3I1blVZYVBDaDl6cHkvZllGR2dNWVFZNHNTS3JOVGQzU1BSQmZmaW1kV2dnejlyeDBmRitNRTVBMTJmK3VOSE81SWRVUDNrOFZrWGNjczcxbGpqVHdQS2lnQzA3QWxJT3hOb3VGakZiTWd4VU8yTmNiYkxiMlMvQ2ZGemZDeHBTenZvY0J2OFdJVHllWG9WZGlpcEtnRVZkcTZKelVDZVhqRHlqcDkxWjVpVVhRaC9wY2ZQQWJVQkl4SGlOek9oaW5HQ21UajY5ZDNnRmFEZXVmTHpuY1dEQXF5bHd2TkV4Y0hqdFVuUlo0T0tyaVRVSnh0bzlLNWF3ZTlWSmQwYU1hamgrUktRS1liZkQvVmtoVHg5ell3K2RTN0VXdk0vMW5hV0g4eVZHUTlGZlZvWTN6TWxJSkFOeEFwZjVYZXJMRHp4TDNhSU13NE15WlpXWEtzL2NpaTFBUnVsS2hIVFMvZE15MURPMVhGcWVqcU11U0k2QzFvZ0ozOEFGTEwrd2JkRzgvd0Y3Ry83cHFYREhoZDVkV21tSmQxeFNKVVYrSGV3Ni9XRklCK3JPSHFpdG0zZjJwWDVWc0FlUUUvMWRTLzhoK0JEOTBYRWVQR1dDUnVSYXU2UUp1YWZiYk1WQkN6Y1BWdkExT3YwL0hLZXFUMitobUNEWTBtT2YwR1ZNMmh4bnNNZU9kZEx4eDl4V01oRFRGUDZoakNDbDVxbEVGUndieVpxRVp6dktGS0xzKzdybURod1BIbjYwRkxPVjBrVHczZXVNUGdTN0pjakxMcFRNVENIbllBMW5FVkFuZThSY0ZpQ1FzSGxVVjZBdlBxQ21RMzJjNnVsWGh6R3FleVk3dEdtV0ZCYWdkUjFhTlA3aGtBWWp0UDMxeXRwd3gxZVozOXp2YVNpeWRRSEJWdWxjY2tuN1ZXTXAvSFRjWWRReHBKaUNZRFZxbXhOYkR0b05RL04wWXBVdVpjRSszL042eElXM20vRGRock4zSUFYZkxZUVg1T2VrQlpjc2VmUENNSWtNWWNKalZxU0VlR3ZHRUVWMi9HWDdFMitCa2c1ZE1iQ3luRDdXaVFHSE9LUVJHZm1MOTZyanlBYWxMMFpVbDBVbUVWU1QxanNWYzFrd1VseS9nUSsyMkFIeENtU1BCOXFqNkJjZzFIWTY0bC9kaFVMQ1krVlRoaGt0bVFINkpQY1RJeUtiRHp6TFUybU9PS2Y4U3ZwZHJIMGRQZmwvdk5ITVpjMmFqZVNwVkhXWk16SWljVkR6Q2I2eHlQV25USFFxNTd2T3Z4RUMrM3ZzTmJjYVNUS1ZNMzhONFVNSm50TmNtdkRUSWVMZTZQSWNGNGE4NmQwYktrM3Q1d0xwMXRmWHM3SjBDU0VkNEdDbEtDSVorRis1aVg1RG9iT2hYcWJTN3JyYmdLSTF6d3JPVmZqSGw2dEhHNkNMQWNmN2ljUHVrMDRTWTFtUXJvNnJoQ1RIVW1jV0YxUzdDWTBUNHp0b2ZHVFRQVVFPUVJPODRsVkRlb2ovNEhKTXY4U1NaVFIxYVVMZTZwM2sxSGd6UmExSndwWVl6RUk4dVc2N1lnYitsZ3Y5bHRqWFlXcjRWRUNUTTlNZXg5eFJWT3AvNkxHU3luR1BFcFFqbFVrNWh4Nk5icjB0SmRQY2VmWkhheFRDUG05Y0NIZFVldiswYllDRHQrdzdnVVlxZmRVV3AvbERFRk1WRU1JbWRLRlIxN054by9Bak5jcTdGNzJhSTRGRWEwWllDbDJrWEtBS2xvaGdIQzRVbWV5Rlc5bFZqTUVWY3RjK2pyNFByeU9WZkIyWmdmQ3hIQXo2QlpueUVHV1YrUU51Mk9nYUlYTUdyV2JmQmlYcWhqLzBUMyt3THRqeGxMd3FmMXhsa1BLZDFTVUdpMXFGQ0FXZGpCZWVTSDB4WXNZaGwzTDE2WSszd2llVWMyUGEzNUVHZXM1YksyNUxUMDVnL1NKUHIwNnFkU0k2ek5FWU9XSGp4L0J0UkxUZ1NGVHN4QzloSlpDeDBWVzAwU2h4eittbDllUXZTMzRNZE84YkpLWmlzbGFKakM0KzFpWmFqbVhRVlU1QTBSeTF3bytXbldrZ0dsNHRwSmZOSGdwdzFsaTlwR1lSckorOWNDK1ZrYWhCQXU1UStiY0dHRlQvS3BrV3dsVFVMZy9naG5VQ09ISVgyaFdvZnpMTkdFZHZqY1F2MnprZ1ptUldlc1oyak4xYjVrcDFCN1c1MlM4bDZHY2dOckNxUUdHOFJlQXBxVlIxN2pjTTU1U1hTYVk4TjRiUnpFZSttSG5TNGtxWHdCdXJ0RlpyYXBnUUNzajZxSTExZTlqbUJTZkpmMzAxek91VFhqM0NyMDlTYjFZZ1A5ODNPNzh1NHhVSXhnMmNTdFJZWlRzN2VvYTlUVXJGVkhwQWZBL25BNC95NGJLQ2RyTlhLMXhKZFBOMXVqVE1TQVBmVCtTQW9PTkIxNGtFMGp5cjNPQlpESWdTMFNtRHpuR2k2cW01Y01CVnRab3RPYm5RNWtmalJ4dkh5V1lLbUQ1MzZYQVNWUGRtTzd5a0c4YkI5amRnV0RSTVZwaTRob1NJUUtLTVkzajlJbmQxc3ZDTHNITmZwM08wTW5JeHF1RXlWa3Q0UTNremtZWERyUWtTdE5kNEgwYTNOYXRHUGdheUx5NXVrM3AvYVhnWkRnaVUwaFRiUnd5OFBBR1EreGR5d0ZRc0tTYURvMythS1d0MkhhSkFEbm9XWnRIdkZFdnB5T2o0QmFkUXZUVkhnMkdESjlSMTlmVzdJZW9scHpCQlgyaEJ4RzY5a0w5dXF3R1FMSFV2M2E4WUVNVkptdFVOS1YydUJ5eGI4a0FSMG8zVVVlc1BtZUU0aEsxM1RqeHNvOUdremVtelo2VkVOWHhDTlZoazBIOUlCaXp6elJYNm9vOHZTOGc1SW9odzJmUkIxKzFHUzUrdmUwOUhIZjF5QXM3bFpJSkpKVXdmRG5lZzFvZWVWaGQzWndzMUlqa3N4c1dVTk51dmpyOHFHNXllT054UG55QnJJQXFWZGloNnlwWVd2UTljZzVPZjVxVmYzWUhWRjhxa3Y1c09JNGVmbnlGVGRXY0FlM1ZzdVMxM2xxNE5qSjBxanNnUmMrVGQxT3BnZFdSK095NUpLMC8xRUt4QnJweUxqQnlrZzg0NVI0WU1PcER0SzJ0WXlXNTloTmlzazNoQ2ZQS0E3MjRuakhaelMxWlUxYXhxK0JWdzVtdmhiYVB5ZlZtMmpTMkduTWo2SEQveFQ4dkFqUmRWMDRydTUyVlVmRFdRRFVmbXlNM1Mzd21BTHVDNVpIT0NkZW1vODU5VUFBNnQzUzlWRy9Fa3RhbXZPK3BaTUNCRU5WUjh0eDVxWWJCbkVVaUxDWmZkZHlGMXFNaE1VekFlZFk2ZVNKanVTRm56ZldHNUdpU2hQOUpuaGpOc0pTR1BiM1pQZlpBYkJFUks4YTc4TUxESXFiR0tyVDBiWDN1TW1uSW16ZWlKa2NNNVo2NXUvNGVHZTEzcVVmbjFNM1JSd2dGNWRoaks1SHZxZGxEelZIaEdpdXVkeTNpS0w1YUpoN2MvdmplSWJ2SFZ3Qmpyd2F0dGxvMGF4ZUowb1lNcUFKL1lzYlV4R3dBUk85aVpDUC9MMWM5eWJZdUpiOU5sSEVyczNWcVZPY2dKdmVqckJPbmRTbXVFcG83V3lMTVNNVG5nNEphbHlyU2pQRVh1bURFTyttb2VmWlZ1eXMwbEZBQmllOC96RWJMRGh3UlQzdG5CYU5mbFUwYzQ2WDQza3REbUxxZzZkcGNTTG9iTGIwME53czNFWHR1K2p0U095d2tXVk9WUERXTkgyd20vVXVwSm1JUFFMSktoQ1pmL0pUbWtlOVUzNlIyeVp4SFowU29iMHZNZ0NSV2UvbjNiVFZPNENmQUVZN05Ba3Fzemd0RnVqTS9vT0Jab1k1N2RUZFBHRmkwSXZWcE9PZFhQQWd2ODNORnFsU25XYS8zUkxUOFBVR2I4b1dvWkJGdXVmd0pBTE5RdXZPVHdlMHVUU2IzYmJwNFFQeERycGFGVzNUbFRoajBtekNWN0tJWG1oVy9JYkdZOGgxaENoRm0xeEo1U1BIcVZ0U3VLcmRXOVUzTVE2MVh1Y1ovR3Uzc2cvNEQ5WnZJUHBYZnJCbzVjZWxhcEs0NUtteXNwb2htS3M0WEI5YzE2TFgzaUp0RG00c1ppY2Urc2hGL3l5WUdaVm5teW4yTDlBSno5blVLQW9BMnZJZ1dSSXh1bTUwQ0pGUnVzS0tVajloSkw0V05YV3U3VVJUSEVyR0JYTmhRK2c1c0x0YUk0TDVKM0dhYmtHU21RdEZSdExnQTc2YTR5eU1hamZUV20xako5S3FYeWpWcEs2eWF2N2p0Z29tVlhpdTZPUm1TMVNFWXBVNmJnZGtiOHBlczhPcDhWaFJaekxMTjd2aEt6ZnFuUllVUWZOVFBKVDMzTTdOc1pZUFZZMUR2RU9aK0o1TU1CemFhbHZ1SGNma2cwWStHaFNnWWh6d0xUQUpqd043K2N6aElZb3VyaUloUEJUMW0rbU1nSGdVNHBoWUVDcHhrT0NueE1TLzIrSHpreGY0MFNuQ3RjT2pOaVFpUDR1TktEMEM5SW9DM0dCRUtkWFlBQmZxdThLVkFqWDIxZEVJblBIYXNhWjFrZnhacndTMWg2TnRhVnV0czB3Mmphcy9CVHFtQjZQN0x2eXZ6c09LWFRydlhEdVJIdzZvSDk3K1hPRG9NV0RpVk0zM3BXRkxrZ1k4dXpaL3FoSXc3ZGFSMXJiSHREcTdvSnZ2OU0waEh3WGtuRWVPM1crQmEyUS95SVJIa2wvdFJQTTJjNm9UUmpwN1RaT3RiU3JJTXBqQjdFNVpOL1JzRktJMVBha2VZWmpqcTZ3c3lWQWJLZXVUQ2t6T0RIRS9wYVIvNzlmWkZhMDN2aDdMUzlVMi95Nkk1cGl0eW55ai9MRnVIZjZrdnZPTnpwWUd4UEs1QklsRUtoejVQZ2w0NEJQMElxeDV4TmZKdkM1aTYyZ2FNWk50aVo4emVJRWx2SVFpZ0hoRWtWOWVCbzVjU3dUdldKd25IQ0Z3Uitrbi9meWdaK1U4QWprSGZiQm1CbTJIZ3U0VTJaYWFZQzZ2YTFiQXAxcHE3SllJUURYS1lwQ0U2d2JYTE9pajVqdWVOVG9WUE5ESUJsMXY1RmNPanJOalpkemIyMGZuN0FEVFZ3VE9uRzI2UDlJRjVmWUJidFM5TllBZ3lSdUd0emhySjF0SWhocTVYamlWU25CTnY3eDVxSHh4c043U0JsMklIZ3RFa1BxMWJDY3dzN0IxUktCLzEreVVzY1lRMHc1M2JoUW1ZSk5DaTBTeXFjdHo2SmZIZ3hqS3FudENuZWVJNXp6ZDhZZmJLUVFZY2NoOHNTWWNtVTB4SHl2RTF6d3QrMGJtQVBmYjE2b2x2RiswQy94UmpzWjZHaFZRU0JMNEsvdk9hOWE0MWZSS2x3eHZqYkxxS2hUSXpxN3ZwaWNDcUdxSmxhK1lrQnlmUG9vaW1tMjRYR2NOeW9rSzlsMDN1dUJjZzFoclZzTUJZK0RxYXBTaUVhRFR2M3paWFhoZ2I3RDVUUzZFbXViRURabVJ6MEgzKzA3RnM2UmZ5QXd5RHVSVmlzNGFUU0dXWEgzR0QyMjMrQWZWbW1EMCs2RUxHdXMvekpZdTdhNnpCWlN4SUhLSVFUdk53SzlqTXpPRjgweERML3hIVUhnOVY1YUQ1NnJGVDlWSUhGY0FqNjhSZ1R4cTFlc2FTMERIcUppbFNrbnBwRlIycmoxSnM3UXVjQzVzNzErNko4NVBlUUxFdFFGRXg2MlJraWs3NWFpYWZkVG9HTkF1L1o5bnFPaWd0NHowMFh1S0V1bGwwMUU0VUlBWWtoZm5BNmE4RmsxZGxocmNvL2grckl2VFh3OUN3cm1Yc1RqRHRDeGFGVzI2TjR2L1pQK0k4YkNENjdWQ092VGNmMjBvOGtMU3hsOFNNVDcxUFVGTHR4SWNtSitsQUxBRE5mSjFMa0hMR1ZlbldCY1ExcExmRWpwZUFPSjVXekh5WEZydGhpRFdmcnEvUldOb3NWWHVjY1E1TmJIRUc3WkFnRGs2dE5oS0NZcHo5L2hDTG9ScmVKRFNNN09wbU1jTDhhNC9MR2FUaENITnlPSmFDSk9NbFdOUGFGTzhDb2wrMDJvSW5wdUFmZENRWFlQS0tWREZFVU53eVM0VHAySWtoQzVHaVFtcWdMUUYvb3V0Y01xbmxWT2k5WWNNQXdqdlpiRklDNVpnTktkOWxiRkhlNE1lVXgrRzg2WkpqczNOUDRsNlRYZE8wUVFsakFRamNZTnZRN3djMU5LTVE0SS9XNlpEdGNaQjZ0ZSsrRUVaZTFucG1nd010azNhOGF0alUzdmR5am96N00vSkhYbDlrdlQ4SUxyYndhSVkySjV4SXZDb3VnTGl2ZzZjSXA4bzVUTWI0Q2tNdmpxSThDR0UvVlZYM2xQbWk4MkptQlRhc2FOVFl3UE5tNVdMOTZHT3dIendqZ3dBOUs5ZFhSOGhmN01zbDVUUWxBdmtmSlFrcnZVbjhVZzlUa3RGOUl0aW5UaTJsb3htdW1TemV5LzFFOVEzK1VyWHd5OHIzQTFHRC9pVkRBVS9Jck1iZGRYNTN2c04xaElQVWRiN3FEVkZHSGtNUkd3b25Ba1pocGxnOGZNUHF2b0EwTXYrQWxLcU1POVJidnBFeWpzV2hqNnh6NTZmWDlnbDhGN0ZMM0VRU3pBcmhaRDdDM25EcEFldktUUTBQR3IwQkFNS2l0cys0UUQwdVI3ZlRmV1hHSGY4NkFENldZSGEwUUtQMGM0M1NqdnhzVXRGUTdxQUJvbjF6QTdFQlBaS2ROeFd6UkdUYmFWQ1BqeXhsNXJISVc4bG9qNWo2NFZxUzE4dEp2emhBMDhJSDZ0UENKTlJBTlpaV1BYOEE0RFRueFBDb29tay9uRWJ6aExKWWRQb2prQmhrN1JNNXBOVzdLSUdhdERodzRzRUpxYy9DNGE0QmQ2YTRzcGZ1NWVtajBOUE4rNlBKTTFydllIT2R6WFpubjcyQTNTcjRGbjVhN21xdDZOQW1uSEpEcDMvY0k4cHl1YkJXZExNV2ZYSHFvRkZoSnBlTjJkdlBXYnd1ejVIU0UzMWNHOEVTRjljVzgxRVdTMU1xMlFSTkRBdEpIV1hRNFdtSWJldDBYU3FNTjdYY1RUSmZzNnVJenpvOXFGRWY5TlpZK1MwdHhjVXdMQUthZFpMMktONE9UYjJiT3AwZE1EOExPQVphU1FGZ1BlOUdyb2kwZllUSEdOVndrSXZqUlRWZG5hTkdSeWY3K3hRQ3g2VnRGMGx5Z0g3SnNXdGY2YWtocFRYbFVZb1l6d2Z3STVSRDhjV1RkUjd2V001WWVrVmZEdktCRXZqOVhYcmVhT2hNalE1dXZDZVc1Y3VzMmNNOUFGZTRkaEZqc0dodFZiSTAyYnZuYkh6V1JOcDcybjNKMjM5elNYcnU0cWxOTDVjVndZSDZ6K0hueTAwUlRVblc3Y2tDZjZzUEl1cjB4SXZpQWI3dWQ5ZElKOGRtTEVrdmRMaTdqSlA3TEZaNXJBcXFpNUZrNW5nZERqMW1pTVpHWG8vWWdZdEphKytiZElzNjZsYUNCQlFJY3d2MTV2Nzlna3RUN1lmK1NoSDZveWFocEVGZDM0cVpPVy9sYmdmKzZ6Sm8xY3lOdFRQOTNhUkdhamxGUzhodzRDanc5VnV4UldnbytKT2F0TERIanlmSlhlZjVsMXNzaU8yUWp0UDhzL0xFNWZuTm1TcHJxWXlqdDFzQUNiQWk0NE9PZDllanV1bGdJY2lPcGFERjZDdURsSDFsaUJFbXlOUVlVZm9Wb0t1c0RaZGw0Y2lBYlBtcytSdnd1TmZxZHYyNjQ3ZHphc3RyRVdHMjZWMHloY1FQbXJXM0g1QmRJU3NlRjh5YUJEQi9Fc0tTR0RCcDM4SHhpYWpSOHJOUEZNYy9pbUpBdmRCRjJBZEJmenowK05sZUlZaElPN3VqckpwT2w5MXFnTitSNjM5enpUTDJ2SzJ6K2RSV1ZGTFVaTWVvWVJZYkE4YUUzYUtkV3JodWxsNS9xUHRyKzNGdm4zK1FEYzRoVDZWbkNwSHBzaUwrdDA5QXUyeFBzbWEydklDazlRTis3c3hGTHMrS2ZmUWdWTEdHRG1RcDA1UVJLSllKNXkraVBPUVZENG1tZkVSNWtwZE1UbS9tNEgydFBrajRZUDJyZGVvV3FZZ2gxZHcrNFQ0U2t5YUdISTNrWFM5M3dlc1QrWFppbFJqQVBTYlo0cTNFNmVXUVJ4U0dabi9TYlFwai9wVmJMc28zbGZmVTFwSmwxYUFTZEZudnlLdS94cGZDYUQwWHVDaHRSVVpzb2ppN3hFV0JTZ1FQR2N3U3pLdTRidHM0LzVhYmhyY3p1YWJSRld3V0VJVjM5b0lqVkNhYUgvMTUzN2kySi8xallDMHg5c1NGWlRDVVMxYW01V29WRmZmaklvSDFGSk5Lc3RMK3F2OGRFdDNXVDhubzh3VFBJWFVlVCt3elRXZXQwSjB1akNLSVgybTEyc2FXdHM5MmtlUkF5TGxDVFpKcXczTmZlWlp4QlpjM3lMQ252OHhvZ3JkWWN6dWRkRXNad1loS1J0ZE0vcGtremljUzVaeGF5T3VIakYvcGhLeVA4dkxUdGsrYk45LzFNNm50L2wrdTR1aGlvV3NGbGZWa0xpblBkZm54NFB3a1FWWnBUVjVNL2JqMVhQdFczckJVamRIOUd3dDlya0w3SE1vUWowU0Y4YUNsVTU4dG11TUFtc05BRTZRcTViS3gyQk4vMjhob3ZaemJXL2lNYTQzenRtakFuVVg0bm5OaFIxU3RDeWN0OFRwZ29INzNFZHQ1dlZDVnhnb1VXenF0Sk1USkFPZEF3YzU5N3hJTWYxR3FLNmprMTFtajhXWFY5TW5IUWIya1J0dUk5eTd0dUNLZEZTcmp6SkttUFJBNnZBeDFJU2RwSGNDU0RldjF6SXRVOHBNcXFodVQ5b3J5ME9PbnUxU0RZUDhsVWlQNnBQU1JMcHp4S1ZROVB2NEJZbnB5ZHVOTHZXRkVXbkdFVVpPNEg4RzFuQUpUT3djRVJObC9TeFY3R0kxWGkxVU5Tc0hlaExPV2RER3dCK1lEbk9xQXFJY1FtK2pITFRWbGw1b1ZZbkxTU29NWktvTUJxbmxibHp0QmN4YURMVlMxczhCbStLcHhrcllLMlhqM05xTmpibXVXRG5YWXY4T0FCYktNVTRBWG5qV3kyeEd4TEVnOXNxU1dtY1JRM0ZTTndFeitEZVNtOEE5cjA5aE8rdnNJeWFCRjliUWJHRDBKWTZSRkJFMS95WjI2OCtJNW42ZGxRQ2F2eHR0ejBsaCt1ZUFlazFaWTlsK0xGVVoxYlU0ODRhVWdaamFrNndtcHl5Nm5zRy9yNWt0d3JCaDk3eW81WnFXWVZjRUIreUR4SHoxd3c2cW9lbFRXbU8wdmxDZVB2N2V1Q2RHZE9uVHZPczJjQ0xubyszTWNaZEtGU1lleHJGc0l3Q05Rd3VTVkZaQWpiRlRxMURlaXJFZHJlSFM1cGZRY096c0sweUhmQjlIRVZCdXErb1Erd1ZsdjZDYzd1bG43cTZDck5lRnNiLzlkNkF0TFpZb1dqeFVXZE1QVUtyd0t0SW14cVVGWkNyaHcxSkticUZaeExmMnI4aHZubnpzZU9HR1dKdTE1eW1LMTEvT3NWRXNaTWExaGsyTHdzV2FtZXhvWUdPa3VIbU02RDlvS3hCd3BCRGQ5d05XY0VETEJneU5LbmdFb0FrSEM0Rm5CY0xnQkxKQVM2QUtqVUlKYmxha3Z3Tlp6ZUl6MUNiTW9EcVBicHk1U3QvL0IvMHpYOFNLZmlac21TemQveTNoZzRVOGlQNlJYVmVGdm1vUS9PS2g1OVNVRnR0aVVOSWllanBNNjA5NnlsRFlQbXlnVDdkaEgxbTlpLzdTWHZSUHdqZ3FoNE43QVBWc2RKLys2YStmQjRYa1ZSK3Q5V0V3N1J2VkxkRW5mRlIxZERZSHJDdHlRYWlhMGxjR0xHVGEvejlxTGdTVjY3QVZJTVdJTC9KTm9rRGc5Wkg0WS9oV3RQeTFUTURRbkN5TXcvbTY0cytYQnl2SDAxZktUdk1aczdiMUNKcUE2djA3cThiUFh3UDR0cUIrRmhxU29yYy9TcEpjRUp6bFloQWtUbmdkU01scDB1aHBZVnJ2MFc1LzA4emcrYWhKWTkwOGlFMGdaVWNVT28wWGpKcEg3N3hhSmJzdEV6dFZlQk1oN0ozU1ZtK3hUcFUxQWE3YUQ3YnVabGpMQ3V1T2w2SWpyVW5vRlprbXBXbTRWWWRyT1B4Nk1BVGRxZEpQNzZMNG42NnhSZG1XSWNMR0N1b2ptZWs5cXBoMGYrbHJlRDJxTjluYXgyenpGTDF6S29wR1p1dTMyZGkzZ3hsYzNaUmd3aGJMZkxoWS9qREh1a2V1RExITUR4NWVUYlVkeXd1bXQ0Rm9raE4rOGFwVTJSRGk3d1YvMEFkejRKNjluMmRtdUs0Y3owZjJNSVN3T1orN2IwN00vQ2taL1ZWa2Z4amFvRUl1Q3hDT3V5SXJFbEV1YWxuUkw3OFRLZys2Z3kyOEJ3QTZMUDZPSGRyMVdZRzEyK2RWWWtFU0JHdEdoQjVoNFl2bm5nWENycUdnU0FYM2pvNXZwUFdONGl0WlQ3aFp2NGRSQ1BVdkkxNmtPMXVhNnFCb1VGWFBIMzQrRlk3Uk52R2NMSFNPSWtMWkh6UXZCd0JLNG40cnkzR1pNWWFCVlRtNExLVi81dzJzbFI5bDQxNzNCbHBtK0xEbkFON0ZXZWcxWEgyNS94NEt3ajYrTFA4T0ppZEFtMGQrVXdIRWI1czBocGZzcERVaVYwaTBDcU1MaFFLT2RrNnNrSDI1YjdnYlBkME5Ham5DMGliZGRzSXVMN2k3cTdDbFVkVWpFNnNJdlczaStEcXBRTlRZVEVycS9vdkVwbWhsRHFMVjdhUlMrd2dNUzVvc3hrbm0wenljRVRwYkRxVWNqKzVzeERzMTVJbkYxQ2FYTFp1ZXJaNy9hRUMzblJkRHgzenVvWnJNbzIxZTBmOVlMK1FyV3pCUmlKK0U0aURrQWJObzlpdy9oZlFlczhtN1Q2WWxvTWE4em5QQ0toMVI4WTh5NnV3UDFvc1A5aWZwSjZZcWZSMTRtTWtsR0k5RzdUUjU2MEk2djY5R1lGL29NTC95WXcxc285anhBeU9EZzFDZmhEaDZBNmt5OHdJb2FBV3JsSkZzSk5GQUp0ZHRDcjVJbWRVOVNpY1N0VzBXZWVFT2dwaEpCUUhweUFvZVhaQ1F4Q3RySWlXQlU1WTFJRjhyeXpVZy95WWZOdmlPM0YxNkk5dCtVUndybWx4Lys2OGprVjVHanU3cWxJd0tKODdZRzZVK0NpbEs4ajZ5TldidGRpZkplNnF1Z0RMRXVuM3BteHFnbzNaNGdQWGVpS2UwU3FIRy9GWnNQN0NlUGtUemhkZ3NlM1AvUm1zcm8vSnpYMm4yS044ZmdSYzZlSHgwQXU2ZkNOUjBsc0FWWEoyOG4rbXkwVVpPRTNweWptTWN6OXUzeHJJVHZnQ0p5VnJwRVptMDBhNmxQRFo3bFNna3J1bmUzcFhFdk1SbTdIdEFqK0FHNngzZVlBbllMWUlnSkxHMHROb094RjM4ZXIxYUgySjBERnBMS2hNaTNZamhyQlJGUTdmcFZxZDZ6TThOMVFXNUFxeXhkQUcrR2pZV2ZWeTJudlFwaWh0Y0dzeEV4ck8wNTlQNDlsb0s0WW9IM2lPRi9zS0RlYitEVEtUd0hmdTVGcXEyTDdLZnhpVmJzK043ZVlNOVNVZ29rdnkrZmRQOVR3N3ppSGxFQ0Z2SWpUZE1YTFdXaUM3UlBwNnFlUTJwbmxyREoxdlQ1dVFTWFc2TE9VZHE3bm1pTDVjUHErdHZ4YUt4bG5MWEY0UTkreUZ2eHB2dG9sVG1qeU5xcFpnRDNTWGFsQTg0REZPQ2h3N20wcE14a3UydHNvSzB4TjdPNU1sVUIzejBxeVRqYXF0KzRKOUgwbWNPVzhqSmdEWGhVaUthcVNpQzRCazNNZ0RLNVNTWVNQVGM4V2cvdDJKOFdHU2UyS1N1K3hKTDBiZGZQR2J1UUo2YWxoVnYxQUZTTHkzb0VnZ0lzL3Y1U0hzVmNub2NacDNFRDUrK00zL0pTd0ZvUk81M0VJYkZqVDc3VFBqb0RyNWlRLzFzQ2o4dUpSdjVmbHFGZUo5ekEvbzE5QlhKTGh4T0kvNmw5aXlZb0J4UzM5Y0tpUGlsVjN6c0xPdkh3VGJEdnVYMmkrODBXbG90RnhXVU9QZjIxMEFXeUxkYnhGUHlBb0hNY1ZIYVRqVHFyUTkxamhtNDBZZW4rSTJ0OWNwY25OZ1RTU0dlN2ZtY0dlS3pNcjlERkZ5RFJSdFVzWTRLUHNpUVdRbU1GaUdQYW45a05USnR0WkpBWnYzNHBuZUVCNVBnbUVCVkVEaklTN01mMzFNWWFkTml3QWZwSTZxZ0pSUlRrc09xWDFvSDNtR1Z3SDhrT2x0TDNXYWJObWRUam43UDNWQVBzQ2pJVUxmdXB4dEhQV2YvMlFBQkFCb0FRQUFCT3dCQUFBOEJDanNDQUFBQUFBRURBYmxBQUFJQUNRSUJBUW9DQUFNQUdsUm9hWE1nYVhNZ2IyWWdSbWx1WjJWeUlDZ3hNQ2s9PC9CREI-CiAgICA8L0JJUj4KICAgIDxCSVI-CiAgICAgICAgPFZlcnNpb24-CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvVmVyc2lvbj4KICAgICAgICA8Q0JFRkZWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L0NCRUZGVmVyc2lvbj4KICAgICAgICA8QklSSW5mbz4KICAgICAgICAgICAgPEludGVncml0eT5mYWxzZTwvSW50ZWdyaXR5PgogICAgICAgIDwvQklSSW5mbz4KICAgICAgICA8QkRCSW5mbz4KICAgICAgICAgICAgPEZvcm1hdD4KICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24-TW9zaXA8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgIDxUeXBlPjc8L1R5cGU-CiAgICAgICAgICAgIDwvRm9ybWF0PgogICAgICAgICAgICA8Q3JlYXRpb25EYXRlPjIwMjAtMDEtMDdUMDI6Mzg6NTIuNjcxWjwvQ3JlYXRpb25EYXRlPgogICAgICAgICAgICA8VHlwZT5GaW5nZXI8L1R5cGU-CiAgICAgICAgICAgIDxTdWJ0eXBlPlJpZ2h0IEluZGV4RmluZ2VyPC9TdWJ0eXBlPgogICAgICAgICAgICA8TGV2ZWw-UmF3PC9MZXZlbD4KICAgICAgICAgICAgPFB1cnBvc2U-RW5yb2xsPC9QdXJwb3NlPgogICAgICAgICAgICA8UXVhbGl0eT4KICAgICAgICAgICAgICAgIDxBbGdvcml0aG0-CiAgICAgICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5ITUFDPC9Pcmdhbml6YXRpb24-CiAgICAgICAgICAgICAgICAgICAgPFR5cGU-U0hBLTI1NjwvVHlwZT4KICAgICAgICAgICAgICAgIDwvQWxnb3JpdGhtPgogICAgICAgICAgICAgICAgPFNjb3JlPjcyPC9TY29yZT4KICAgICAgICAgICAgPC9RdWFsaXR5PgogICAgICAgIDwvQkRCSW5mbz4KICAgICAgICA8QkRCPlJrbFNBREF5TUFBQUFXN1dBQUVCQVFBQmJzWUg1Z3djRENBcEFVY0FBQUFBQUFFM0FFQUFEd0lBUUFJQVFBSUNBQUVCOUFIMEFmUUI5QWdGSFFFMEFaMEFBVzVWQUFBQURHcFFJQ0FOQ29jS0FBQUFGR1owZVhCcWNESWdBQUFBQUdwd01pQUFBQUJIYW5BeWFBQUFBQlpwYUdSeUFBQUJuUUFBQVRRQUFRY0hBQUFBQUFBUFkyOXNjZ0VBQUFBQUFCRUFBQUFhY21WeklBQUFBQkp5WlhOam1jb0FBWm5LQUFFQUFBQUFBQUJxY0RKai8wLy9VUUFwQUFBQUFBRTBBQUFCblFBQUFBQUFBQUFBQUFBQk5BQUFBWjBBQUFBQUFBQUFBQUFCQndFQi8yUUFJd0FCUTNKbFlYUnZjam9nU21GelVHVnlJRlpsY25OcGIyNGdNUzQ1TURBdU1mOWtBQkFBQVVWdVkwbEVPa2RTUWxRd01mOVNBQXdBQWdBSkFBVUVCQUFCLzF3QUUwQkFTRWhRU0VoUVNFaFFTRWhRU0VoUS81QUFDZ0FBQUFGdFhRQUIvNVBmRzZBVHppTEU4bkJvL1o3cURGOEpubUVua3ZsTVpzK280N3RLK29hdG5OdDdQSjBWQWMranNkSU5jQnRHbjgvT3BFNWtlUkFUMHc0MVF0OExnSUNBOHBCd05EanN1bzhZRGROV2VoVXJpVnlkN3k2QThTRFpLWlBYOUZyalJVbmMxalp6OGlOdDJodUEvQWhBT0Y5NUpHNW9Samtnd0tHM2lTbGtIemVwMHBGRGFjTExCSGEzRjFueWRYRi96cWNUQUhMU05zZjJmYkYwQU1pbUJFMlNYYjk3MHNFblhBbFlTbi8xTGpvVlFKK2U1TU92MC8yZ2NEQmUya3JGdGoyR0Z1UnhkM2JpUXkzK3RyV25pME9tRzcyNXhEZ3ZXSW5tTzZZQTdJdmdwWlk1bkV4L3RUbDR5V2JtU2FCWm5SRHVjektpb1VvVzhkbEFQdnZZczFrTTVKU2ZKN2FsRnhOcW1LUnV3SkhWNERHTWxRQ280RFJYN0JLbklZS09lalBxNkJzY3RWaGd0dHVKdmxvWG5wekxsTFlTaUg0SkxmczI3K2ROdTJlTkF2R0R6TUpBMVJoUFZrNXdQOWlUL2xHK3JkS3EvRzMrTTErUWVuOG8vUklsZUdIWUU5cnlucXdOb1BvSzVXVXB1c0lUcW01MlpLRUZWeVowYjFmenZjNkM1M3VRMXdaeGsvOFhhaWpnT2c4M2I1K2J0c2Yyc2djUzNwZUY3YVZIdXdPS0FKN3dYZ3RDekVQei9EWG5ydFVxdEJwaFFXRTJHMU9KeHM4QmRUcWxtcXByYTdvNkgwbk96Zjc5REZlSU1QajI5OS9QSk1ZMVdNWmNGNWhXY1RpcEhzenpjNXRzczZudW9hZVJHU3pEMjkrcGxuYzdSWFpWZjRPZTNGVjk3c1BxSXArQXpxaWRwTWhsMDc3cFlxMHVvclpQWXpPdHZ4elVSRW03anFGeHkrQy9yZjV2K0FXeXRRd1kvQ29qa05INHZhSEQ0QTNzUXl0T2tSei9YZWFScDFtdWdHQ0RmeWdIZllUWWx1Y0d3RitjYXNmVUVuNktsMnorajUxbE9yN0hIWkJZTHNuVkJ4c0I2c0hxcDdsVVFqMmtlNkZWVzJldFE5cjgya0lBTXdsQllhcXVKMnhETDd2bzBXSkYvUGdTMWNZNUo1TnRBWHVrZGNIazg1V2Q3QndwVnBEYm5naGs1Smx0aTJsVUVjQlZDRzZCVy9WUHY2UjR0Tmh3aEMwNDVXUmc5eUppdjNFdGJNTWhXK1RwTUkranRrNEpDNWpuYms1eU56YUpNY20xR1J0SGoyMUhPUmFKbUtQaDNXdXo2clVUQnhLZC9OS2ZlV2R2TkY2ZElPek1EQlgvZGQxSlAyeVZhRmJuZUs3MFh0MnVoSVR4VitGU2ErWXY0UHI4ZXMzb0tiZDlRTElrck56dEtjYVZVbUxmN01udmNmenZZL0tUeW1ZVXBnZkwvTmtyTnFZcVkzTitOSTNmY1Z4N0E2NnZ3ejNoSjhETHBUODNCU0xzTm45NEcvVEtNY0c0NTZTVXRIazRpN005T2I3eVBzT2ZvRzI1R3hLV1ZMdmJ5UFNjVVNDV1NJa1dMdjI0UWlyaG1hdmwyVEF4bnpSQ3k4MDZFZ2Era2paRzV6RDhnemFaVXZiZHdaN0dlZ0R5eVlld3JZejBleVRZU1N4bm81cVRqTjBua1VWSUpLblYySjdmQXRBdGp3TjVmUWRENUF6THlxdm5pSHdpa2lSU0hsRGhaZjZmeDREOHlJZktrWDBxZ05RbkY5aG5ON01keU1aa1dmcFNCN2FrOTF6eStoNldhOHBucUdBVWdPZEVaOWw4VTd5TE1wSEo4OTZqdXVyNDB0N0VjUFJYZldYNStlckVWYVd4T3kvalBaZ2xDakRPL0Jadk01K3ViWDFZYlV2Q0g4WUJ5ZjBLenY1Q2hMejJJNjA0WWVnS2FJRWtBZXg3aG5XZ2pSdExnZVpOcDFvZzZ0QW5xOEN1T210dUFPTVNUN1dEQWxvdnNPWXZiblhDdzNydEtmQ3ROWUZDdlI1c3IrOVVFM0x2RWVXVjJOY0w3Q01QRDc2ZDd1YmZxTXdnRHNob0VqUlgyL29VSk9kQ2ZHTC9XSCswMkRYUHVmeFdwdkhXdDlUckcvSnFoZmhnUERSNDFTTm5tblc2aThuM1FMTUNHbEZ5VDQwTGdQeDc2WUFNVDd5NTZPRDM5aldOSXZsZkNiM2tzc3JCcng4bFM1dVdyVEJwK1VpVjV0NHdxWlU3ejZhWUJMY0NudlFmb3A2QjdJT3VucFZtQ3FSNmJSNk8zN1lVVXpuWlcvdWhhQ2VKaE55TjNHMURSdHRmUE1oNkxpWWd1TlRwUVpzT3BiL2JDaTlCKzRHLy9tVlpUMEpVdGdGcDlQeS9tcGhYMnZLWUhmd2daUUhRVnZwV2JweHRRWEw2UHA3R285a0NKZ3NFSlhJQmZoQWFWSDVCMGQxWXVvSWFKOWFEQ1RkRW5MNXk5MCs1MFlDaXB1cU1KVTEwV0lKK1ZWUHB1S0VseC9STUtLSkdvWm5JS2FsMGlGWUlGRXljYkg1TUNYd1RXWkNxNjhLb2VoNTBLcWpQdjA5RGRIejNUM1hyZWhKVmJnb242SzBDOUhpbmdtVFd3QVpyV3pwVVVFQUFGWWJKSzVQek1SeXoyUElSd3FkN2R4d3JMYWk2SGhkaVhCc3JRQlAwaGJPUkhMQ2lpT2Y2d3p1MnBRcXBsUGJPamNaa3p2OWhLd0NNWWNuajA3K0J3REI0bm9wRjYxQ2t6UEhvMU9XWkhKT2lKVHA2RFFjSUZlS3NaMUd6ZXJWbmZIaWd6SjF2L2ZaeXg5aG90N2dyMGl3TDgxcFprRVd0a241aGNwRy9icVk3NXBkcGoyZjgyUHhQblNjZDFRbytqUlBYOU4rcHQzV2RDQzNjZTEyT2M2eTdsVXJ3NnVYSVF0VnozVmdkVDI5TzBDbGgydS9Sc2xaVHNTWmh5KzNFell5eFlySm1DQWNxRHM3bVRzamZJcFNtUitCeTE0UEEyM2lJK2dGa1AvQkVtWlo0REdGU1RrUTZYN0ZISnorTjFQN0dBNjVIejBLVUMwaFNYRzRrZTBiQTdXcW5vRENVQUZjMTJJV281NDhnUU56MUV0MU5nbkdNanJIaXM2QW12L1ZiQTllamhSNHVMbkczZmlndDFkU0ExbnJVRjNNVGQ5NnFQUm9hS2w3ODEvT2pmWjZmWjg1anEyc1RoYnJQMEVGQU9iaVlWSTBFSDNHS1BrNG80VWprTzVKaktyelNVUDlsUHpoa2FGZHhOSUZZQjYvSjI5RDZJc0pmS3QyUElVQW5JMW51dW5uZXlGQlhlZnl1NjhDZjdISk8wSFVNbDVIMFFqaEVOTmFhc24zSlNDOTBKS3Bqc2FVTXVVS2FyMmRUOVlwajVyMjlQRmdWQnVXYnBTNVdRd0VkU21lRFVKMFp3M1lyMU1NUEFUcndWRi9KS3h4clk5WGFRWUJiZTlrdlNQMHlwemgrSUdyZ2w2UEp5N2dBZTBJVWVjR1FyRk8rZlY5aDFmNnZiZjMzTEdydUlmTHFJcGlRV3JoQTRNdWI5c2I3UTN1bTdkMXJzTjFZMkRwYUlXNXk2WFRkMTB5MXpQZStIMCtIQktFMWVPeGRzcndUajg0MjB0MVNXcEVhSEVtcnFhTXhyc1Jjb3hMa1NPTktoK1lJSUUrWlFiNlZUUm1FYmg1Yks2dVQ1bjZUUmYyRWd0UVV2VjhqSEpsdllqbmRKR0lWYWZzV2NkcjFva2VvZ2c0aElJZVNzSG4ydU5DSm0vcFBoL2JVUFhRTnNBQXdzYi9WSWQ3eTBFMjNKNzFqSHZXckxKQXRYUDlWS3VwTjExZ2F2VnNROU5IOUxaYXcyVDJ1U2RRMnVKSHJ3QUN2YllMUGZpR2VDTjNFZDZneE1menBsZ2dBdWtjMVlkUGh3ekFmMk1aazhZTSs4N2drWDVMTC9sd2hocnUydXBjWHkyMUNtRm1PN1lSbTdRZlFtUkMxYit0ekFaNzBXcktTOFlHYkVWYWozSWRFckIwUU8zU01SL1QrYmRDbjlqZ3JBZEN6YlJxR2VEUVZ5OUJkejg0RUpaL0wyQjN2Rkl3bm95YU1FU3gxV0ZyallXb3V0NjRsQlpxOW5kazFMVTFuWVMrNi9qUkxJOThVczFsWUtuUzBGamNER2x4UEZXRkpGS3BkSjR5VkowSjRQSVMzMWdDdUF3eDh5RzA2QjFQUVFxbHVxT3BHRzBRZCt3bXZzb1pST3JwTElKSjBaZ1JybkMrVk11WVBZYlNxRHJBQVROOG5hNHJEQTJJRlR5Y3BiZDBhTG5sYk5aYTI0WE5PT24ramVGVE82ZGkzV0liYWhJNzdDNzRONzU5bjdhRStpUTRsQXlkNHc4Wi90OHpQeTNFT0RNTmkva3VNdTRYSHdFZ3JtNzFSdHFjSW9hZi9TQ0VkL2FGQ3NFc09NUHRxMmdOQ2lveTB3RlFkUzJGZUczMDA5WlBiTTEzV3BxTzk0MUEwRExqNlMvbU90RmF6TllXVnd5OXNBNmRjbWpseE84VTZ3R1IyZmRkVENsVDQwT3RlUm1iVlpVaGFQSmxUMEtYRlJVRzNSOUF5MUkrWERSYWpneWN2SnNmNnRvRVhha3FTNEhwYzd0T1AyRnhZNU55K2JqRVpyTTU4aUtXYlNoNmtKbmExbmZpT2ZzZFJwTC9tek5mRXNyVisyUU5NQ2o4Yk1Ia2FXK1J4d2pjSk9HTjBNaWlzWVdLK2Q2S1d4T1M4MWw3VG1QZnc1RlFWT1hBWGRHYjNlRnRNTFZyMEpVcEtsbzN4UFFOdU1RaEs2Y1ZPaE5FRmpWbi9MS0xHNFNER3E1bGFXS1RJVC85bG5HenF4QTd3M3RCMk44Y00yY0laU3NlUlVjYjBjQkp4Z25Ma0MydUxSL2RxQ2hJdzdIdGc1MXpSNFh6Z1NRS3YwVzcrL1A2ZGRJd1Y4eXZrQlBLWkdFbUFPTmVRd210WnVjNW5xbHRtakxGZGpSQVZLS2FqUnZzOUNubXpUQlllU2Q4ZGUwYmtVU1VPMmFpSGtCQXBQVy9SVDA0U1lEa3FmMmtScGRGYXZwK005YU5DWmxhSFFJTDhYWlZPbTlGV1p4ZTkvdGZaYnIrUExybWcxcnZuQ1A4cWJrOVJ3M0MzSnRkYU1tSW4wNnRPOWJSbURuY2NEVHYrczVyOGd2T0NsUU10QzhIcHBIMVBCdTh6WGtVTUFGd2poRkNFaFBib2VHTkNWek5LUHQ0b2ZSUkdURFpjRW1BNFFMOHdUcWZtcFFyMGo1QUFqMnpEZVdDUEM5eTNRa3ArKzhmVVFzeS9SeFBKMm8xU055d1lWY3E4WTExdTYwNDZ3d3dVZlF3WjR4a2dmN0FRaXBKT1h2MDlYK0ZMRFRoVmpMUjlyQ0wxN2pYY2Q0Q2M4WGJGbG5ia3E2Z2ZCY3JVRE9PSmwzUXY4aUNHNVF0c1JBS2pOU3NVREQ1L1kvMEdpNzhjSmhYOUNBSUZTd2xHeHN4bGpmMllRMDlSVzloSWlhcWpuU1BXc1N6ZHZXNzIvc0hZdnQzNEI5bjZBZHBKczEyK0dwL3ZzYmx6aTFFOUdScURxeFV6cHV4ZkoyOEYvZk9uSFNuRGZoTDZtWDF1RW1MeWRxdEFJN2dvWXN2b09QZktvZU1kcXA0LzR0TXVUTkZzYTJNTmJybHl2Wk5nbWVrTnpjWDM5UnVDdWhReFpsOFU2OGVMZGJmNy9vUzJXa3dEZzdiNXlteklBNmNRaFZrSlp4bG5xOHVFVEJlWXZibzZzeWNzVkloc1ZnSVFxVVAyTldwSlg1dWFPcXhsalEyeC9wdHZSYnNQK0QxQUx2QlZSSmhzWS85RXVTbzd4Zm1hVEVSVkEvMlN1RTVvcmdORTRjd0tXeG44M2tYN2ZRQWkrek5Gc2cvM09aNys2MjNTT0wyN2gxRDVWQmNvU2ViMjN5bHNCT1hVSE40UHM4MmttTk90Rmpmd1FoYXlYS1orRUNlME9yT21YR3lUcnVuTS8yelR3cDg3a3BvWnZqODg4T29sRHVST20yQVRyRUlIR3NhcGZhNzh2M0NLZU1XNTYwdVhpMVA1YmR4NjdGRkhtK1Rjbm1JRkFvckluSWhHYVFMTDdubUpldjQ1eHpMQkN5QVdqaXJhNVZPckxTaURDYXo5WTFOeFdiOTExbm12RnYwcVAvU3FIOVpZUUtkUUkxN1padS9LSmFKeUlXMzVNdmdrcW83REh3QUw0MXNOZWF2d2IvcHk4T0lBY2JjU3lRN3dPR1NyYmcvNnBJcWpTUVU5YVdiZjBIRHFBbFMvQTV5VW9FSEJzK1hBVElaMGZQOEc0bndhNy80QWUxSlpPaGxFMU1XUmIrc3VEaGxqSGNyVXdMekRXUGdwb0pPYVN3QlhwS1lUU2JUZkJTQm00b1RrZ1JTcnpyeW0xak9MeUlvdUU5bTZIcXl3MUJ2KzRlckFMbC9IQ25POWhVYXJ5TXdaZkc4KzJRMnlZYUVoRTVoaVNwWW93ZlFEOFZqbmxIT1RyQkUwTTZnT1MxcW9KSGtaT1ZZYTJZZURmOXBiaEpUdFp4UTZJZTJlR1g1dEVPN0R5OXZEd3VJZHR2YnZMUVZMREd1K3htZVVNaVh2ZTRCaUptbURKN1BUdGZGMDNIeW5vclNoWHpLc0NFd1VGUWFldEUzM2Z0a3Y5THdobERPb2JRSnNCMVBrbm5GU2thM0RxaTJuTDFhcERZS3lhNmdQaU9RTUdVdU82eFJxWmNTbkNuem0wRUhYME0vOUtCMTBPSmZtcCtnR1FZSlErUGVHTEE1UW9JRVUxMUhqNUtSeURaREJEVzdSUldnemVsRlF0aDBoS3dTcjQrT0syNHk5ZGpjZUNRaWhGa1JUWlMybk91VG5ybXRlOXo1NHRQMm1CTjdLVlhQUUQ0V2YyWCtvaWVqeHhqL2lwQm1Paml2Mkl4NVBVa1d6MEpBSXlvN1dJbUdIbmpkTUtSZG5lampmZjRnVUxtOEZnUzBqKzlZaUlnQXFTbFpkTEMySWxkWXIyL1ZMSkh3bW9FMnF6a3hWS0tSdzJNQ1RXcElLMUprb2pLc1RmZ281bTladElzR1o3bHlDSHEreXErOFdMSURnUmp5R3NWa0ZXbmpuTDMrNmNWeWVWVzg4WmZhUjdMcTB0ZlpYVndLMTRqcjZrajFDUnB3T0s2TUhVb1VFVW42N1pyeUU4QnFTU2dKLzZvL2hmOXc5YmRQSHF2cjF3MStFdFFVYVJnNHJzSTk5R09UZmNJN0FtNWhTemlXeXdQcEhxSDBhbldRNlRaUytHWm9tdzJ5aDZCdHkxd3RPNGxyL2QyNm9ZNDY3d2V0Q2syNWZ6ZHZReU5TZllCOTRiZTJ5c3F1eHZ6cTRaU1NGMGliL0tiaXk2cTU5aUtPaWg3VnlUcXN3UkQvdHBGU0JEdElvbk1ZVFM1SExGbnJMLzJHejBRd0ZWZ2w5WVdBVzcxZ25zR0dFQlJvN0dzQ2RXK083Y3oxWENrd0J2L0o5VXNmWis2bkZpWHovTjlkNjhmWTJjZS90dkN2UnBXdnZrRGZkZ0tMRmxoaFhDa0JYZ1JLOXEyeDZqaXlXTXJFY1N0UTVKeElpbnVqbTJ2Vm04VnNOYzNFUUVOMERtcE42WnMyN3VVZjFnL2NRR2NoYjQ3ZmZmNnBHTWJLME9mclJlbjlpbWtBK25XNkFQL282UXUvNFBRVXlzUmNIakROcVNRSENpbDMyc3lQQUF2YklsRzNQdngvVWVxQ2RRVXljZ1N2UDVCWlFJMGZlRUJWaS9JTlIrZ0doWlRTaDY4dHU1ZGdlZXRhYkhzSVhVSlpRbmNXUVV5Y09lcTNtcms1REJPc0hVblBPckNhbmIzdDd6QkNUR2NTZzJwamJYVFllK2FSUnRlVkhxWklOZm9hUFhBRlFHNXdRc2VKL1dHVXcvam85bHdVd1VydHlzSjVFeWRIaDRyUXlxVjd5NDJGTDNRcDBWSzhrcjNncDZ0YmtCZW5KQXZFZHU1bit1T2htY3ZPcE1rR3F1bWdXQmhOSWJqcVpKUHZ1aWUxdVVJY0cwU1RTYzlVZEMvdlN2SkNnTnd2V1h1UWtmR2NqU1hmQTJlMUlyNWJlaW8yVElPcFhjVXVaMmRSSXhDNDg2MUk5R3BrMUE4MnpOWXBrSDV0SjM4LzNlY0lhUXRtTnNjSzBUemZEOHJYQkwvSjhTbU9JUEFQcjZ3V0FGbzFTcTF3K3doa21qUFMvdXNiQ2xsVXZHcGYwQXlWdU1Ldys4eENNM3BBemhDRkxmR1BISlRTWEJOaWFkcmdpNDV2L2Q5SHRkbFlwT1pKdkhkd0dmKzZ4N0VFUm13d3BiL1ZsR3hLM3BsdU1INDUrUFpZYm80ZmppenRRcUoxVFVPQ3FWZXVBUEgyM1NWaFkvd0MxcEJoSjJYeWhTOCtHZnI1bGZHVnM3bUk5Z3NZTVdzNVpJYWlCSis4S0NERVJCSnYxQkpRWEJUNGhNL1R1M0Q0aEpndUVHYktTTW1WYzJ0R3Z3bm5RY25KQ2FqM3Y1MWY0YzFKcHk4SEp1eEQ4VjlEL0cvbW1sQ3ZOS3I0U2ZtSmtNYlJkK1Z0VEI3ZDRnZnlRUXgwV0VjcXRqS1dVcFhLWDBwcnNFQ0x4Ri9QdS9aQ2NYMEpjbFRVZVdtc0xMd20wd2UzOUl5YklmakFqNnRMMHBIL3pyNytSK1JPZEdHd21DTEN3angxQnkrU0czNVU1RGdmNU40ZnhBUW1UMFIwTUlFaldFWHVhY0lVWjJzNDRkTDR3Vk9KYlNqVE4zNm5mNXlkdEVzMytYbUErVmJMREhYaXVzZGZrTFozTnVCaTBSZm92a3I2QUhBa1dFYmFEcStteG40SWExTU5MM3JDWTM1OTJXTW5yZFQ5T01sRHc3b21TZ0VHRjZoSjR6WHZHVVNlU2FEdVo2TEMvY0pVWTFUNDRsYUtNd2hUZWR5UGkwaEtnT0k1V0lhdkZMenQ0RkcvenJRMms1OUxVTllQRmliWG0rdFI0OU56SWlYZzJJejdhUnhzRW1zWHVXd2srYjloam1YMU9MZ2o5NzJPbDZPTVlIRXFyWTdZcmU1Y2Q5bnV1N09kNFlSNUJMR2JuL2sxYTBvZ29ZUDZqakUwOUlJYU5zdm1nd3lmM201TTd5RElEdmx5MmkrYXl5Y1VQYm9tYmtWRnJ0WkxkLzBCazJRMThLSzU3eno5SWNNandQODZIbmszT2lFbDJLdm43ZFJwWGVHbzlEZFRZanVoR3JHMTFydHFEREREaHJLUkJVUDRXbVhwQWZPczJ3bUcvdU45Ni9SajZOK1UzRi9Cdmk5cEVHM3JaSzZTRCsza1NQMURrMVFGM2FTVjZOTGNOVnhGTlB6d3cyUGppSGsyYWJ4RTB3VHlIaVZkV1NOZnd1ZFVJMTJoV1B2NEFYMktoNjBnVFB6ZTFQWlBJNUlNaDFYVzMrT2J6WHNIV3NyZjFCM2FoZlA4bWRzRC9ONzlOZ1lUdDNBMzFDN0Nua0NsWTgvOFlXUllYUStQM3kzUlp4N2llWXBtbGlnSUhMb1hGL3lRNlBqR2U3cjRIK29sSDgyK25IOWtRMG9DUVhVTURuUHczSm5BMXFXZFh5ZHphR2lVUDI1V0VxN3lYNkd6N2N1Vld6QW1lWWJreDF0REdmMnJmajRacVdlbW02SzE5N3QrMXl0RWJvNzcvYWErTGVRRC9TUzMrQ1RHZzk1c3JSTytIVkZWTHZzY0hSVDQ4RVo2T25XSFZMbC91bFJXdVVxVjloVFpMQm8vNDE0SVl0d1Y1cHd4NFFMU2xYd0NwR0IxVyt0MXFTc3JiVzE5SzM0VHE2dU1CbHhhVTk5Vm5KNWRxSWNFc1lHd0JKb2dJL1V2amdHalZDSFArVGtLNzlNWStnZmk4SWJndGJVN3dtNnFUY3NDQ214dVZPWEQzcGxvcDhISHkzQVIxeW9aZWh0Y2RIdEhqZDJVT3JHQWZ4N2VOSytmN3V0eHFPdHFCTU1PZTYvVDNtSU0xRDQzak5QODVSY3lLLzE2cjk1ZXR1NUlBNzVORVlialUwbXJ6VU9VQTkxNlJRUTB3bk5GS3RhUUo2TmN6SFRycEpYTW82cWduendzaGJpY3VCM2lsZTltUXRyZ0FWS20rb1BlRTY2QUNSK1VidUlaWUFiVkc3YmRWR1RhVTh1bE5KVy91ZWZPanRQUVBuQWlmRFY0bGpaZmNBTEhPaEo2L2FyTWNIemVuRWVYYkl1RzdwL3dsU2ZsUEs4emREZENnbC9MTC9HWjAzeUVKOGFkek8rSG1sa1lLMC9sMzFXeUhOQ25KUUwzNngzbXZDRXRWMHVvbVk5Yi9PYVZPNURVYUM3SFBkWi9HUnV5M2R4c1lKZlVxMElsTExwMW1uNnVoc0ZGS1l1Vm8wNkpPblNxV1RMbXQ5L2cvK3Y1Q1JlNWNDR0R2eXNxZmlYdzlkb0ZsVVNpemljaFZNZjhTcjNkWUl1L2JOTWtsT3Fzb1g1UzFlS0YzQlM1OFMvUnZvK3kyTWk4YnV0bWJFdXVHSEhoVVVNaTJ0S3JsRHlBUExVTE5rcmxid1FwKzJRMWZmcENBNTEwQ25kWkhGRUNDR1JualBjQmFsVjYzbkI4Ull6YWkyb2RPeS9XcFE1YlZuYVZsTk1NUGdRR0tCN1FYVnFGeDkyMUN6UDVwckwvR2NubzlxT28xb0VSVU1xOXRMSkt4TDdnQWVBSUZVSy9lUUtDZURIVVFGUVdHM0J1WGVxQWVsTXM5NytnQmFib1RwamRyelJBRlh1NWlpcVduVjYwUHBnc1hxNFBtWnhVL3ZBSUtUSEdoa3FLMXRXS0hzVXM5TG9aVWFmYjQ4ekp6VFJFUkFVYTNsTWEzb3YyQjMrbWd5bithb0lZTEZYYkcrS3Z3bG9RTThFZ05wN3RFclA4ZWRGT29XcnVpTkxxcEdwdUVmWlNwb3NML1YwU2lHWk16eE9QT2NFNGlvNHp4aWlxbGhXOEFwSnp3M1hiT3JsTjVyUFlUeUNseVZoakQ1ZE1aUVNiT0l0TStCclArMkl0OGlteW85aW15ZzZWYy9ZSUt3bFZZNFg5Yy9IbXhoWUxmWDY3MTBYcHNUVFhGa1Z2bDN2cGZxMDFSNVRYcnpjaUZjRGF1ZWJ5VE9DSXBTazhmYTRjVmpWOUxldlpWQlFvbmx1WTRqTVlwNFNReW80SDRXS3YrRWFhMEpuYzU2eEFQV2tuUmFtb0RUSWVVdGo1V2srL2xyNUJGNC8wZTdkK21iRzZyOGV1RVVaZnZicmFSZXlUSTRoZHduY0w1SVF5M3c0ZnhhRkVjUXZhV3BYcXVIZG1haGFiVUF2OXBDbDhMVjBaVzVoeEROVHphYVpJZlhIMzlleUZYT0N5ekplK0FJeUdMeWQwK2d3bXh5MU80aVphQjhRZ3lEbVRKSXJzMm14S0xnMFgwNVN3WW9GY2tYeHJHMkMyYVFpb1pWc2kzbDF6MlcrY1pZZjhtWXBtOGVUTHhaSjhvUXg5b0ltdHdUV3NtWm5uMURWWHQ4UjVjTGhabHhoQzN0VEFkWWxNNGp5Y1BaVHpJeU5PcE9pQ1BRU0RUTzhzQXVHSFI2ZWhQbWdlSmhNN05NQTYvMHU1Q2RhTTBUMUhxK015Q2Y2WGpjMlMvK0VUU3lDOXVXUFdza3hJc0llaW0zZ2VGZzViYXgwNEptenU4VGt1QlRkT2NubFZkT3FIVE5QOHdPN3NsNFk5NVZJWXdCOTRhRGthL3FGanZ2aXFJSDdUM3BaU2h3YUx6bDgyNE1Wc2I0UmRkYUJKdlZZK0FHa2RLZmdlcWhRZjdic01SeEd0TjR5WGZLTzZPZEJlNFlsR01USnladkF6VnJqNWhObndKYnQ5bzV3cEVGMDhWM2JNeC8xTmtBb0RmdEFvQmpDUnRIN2FXYitTL056TWxOZkhqSFA2K0hPNE8wUGJJSVg0a2RZWGpWaGdseUxhczA3ckZCc3M5M0JCYTIyK3E2ekF1VGtVMXM4UTg4dTN6WDhwbVJSK2UyUEZ5NTJXZ1BUNDl3VlhwU0tYNjBHa2N1RW8vdFYyZXhHa2dYb1hFN3gzU0I2SjNnNGRRTlRzQWlmN2J1T2FCRWRPaTJabGdxMXByc2dNNi9DbWpkbXZPRWVSdXlDdVpQN0Y0T1F6aWpCSHg3Y3ZmYnNpcEsvOHBnbWdaMHdJbmZvU2JabGx3Tno5RGlIWWRjSm1xY2RjSmpGUUI3U01OZmFqRGtsYnl6dURJc1lLUDI4YmNwcW9zVVBzTWsrWDVDWTlheTYzdzdOcFlhdDBOT3J1M2R0SVNkMC9tN3prTXlPWjArckhoYWg0RE5Lb1VlaGVlVGRDN1ZOOEVYa1ZvcDUvVU9YVitZeldOYjhLWlFENzhHV3d3SVRNanBOVG5iM01YeGhLb2NxYTNVS25uOHltRFFROFBkbUNpN0FWK3FvNW01MDcvSVYvbmJzVnFoWkxiek0rTWhlanZqejdENU04eDcvNnplc1BRa0ZlbHVqYjV5OFJmQU41V3EzeVROemxBRllXYk1RY0pwd2xVMkUzOTBYUVJ6aXhKbkNPalZRT0I1QjFEZDBGUGFKWTVIN0J4cnpaSC9VbElFRVpGOVhtenppKzRRbTN6YXUzUjVSL2lkcHpna3VJb2dWZW4vUjNVTUZWaTFUNlYwT250T2JWNHJyTnRRaVgzdGdmMUUvUUNKNXA1czB1Y1JQaU9KZFlzZFV2MytBYWJIUzhFS3NwUmFmSi9VRnVnOWxDUUNNRXZCcXgrNXZaWHdFQmZuL2JuS0RaN1ZWMlpYeUlPb1l6eTRoUzhuOFlqREJNYkdvWEsyVGhFY1BOaDNwcGtvemN3bjRoNUcvYWdScFZPdG85WnJXVGgyMEdXZkR1V0hNdnBPWWNHWEFmU3lVU1BNYzYrbTYzSG93aEk0bmoxNFdsR1Y2WDFDT29wTmxrQlNSQVRBb1NrT0hQUmZXL0d5NkQzejJuNHlkaVdEcmxWZ3dzRzJoMGZDeTBvMzRYRnNOTXRkTzZ4YjZqVkFPdlNGWkZXYTRoQXhVVDIwaFMzMUhkZERhNHBkdW5lNDl4amVlQnVDZDRUZ3ZudEo0NmF4cEx0ekx3N2tXcysxUnBBNnVsVklwQWY4eGxNTU1BWHlObDNnV05pR3V6RUFLWUxzM01OcENrZmMzaUhRMnIweU1KdnR2aFpkSERiWWlHYjNONnJvWm1YcjdSNW9YbFhyb3RmbjRkYWJ2bzVpMStqZVNodDdtV0h3bk1kYVltTFMyT1ZDV1Y4d3p4dXJTSUxLL2ZPSnQ2aVFQOGRUTU15bkhnWGJON1ViR1BzYzNRZjAyWjQ5OHZFZmpjUjI0YzArOTNwWFBwL2dJQ0FnT2IwZmJyYU9iMzhBTnRJd2ZoMlhpOTExL3pXNlZWRGtldlFDTEEzZmU1UlROdzF4L2JaYmdpeDNHRVNqUjEycUt5TW1ZU2g2TEZjaEc5SzAwVWZjZXhrOUhwVXdqSEI1VDJhT3grZnBrYm1zdVVyS1BNY3pSNlNSVW9DVGFWcGtIZEV3dC91OElCQW9vZmk2WEl3U0dPdW9mV0xqRFY3UXMxZVVwZzJwcE1LNHVXQXJBZ0tQUStuZHo4Ykx1WFdHVkdFWE1XZXNteTI5ODVhOXB5Y0ZZSysrc2tHMllzd0xhL1NKUjhyZml4Z3FHOUlQMnZjaCt2QTBpN2J0Ty8vUjdXVFNBUnlzd0hrazJPMWJqMW9TWUdpcUsyekw3R3Z5ZW5hMFRFSmt1NmZQVWlMOEE3WFlTMko2N3N1clp5aXZTSGEzZmlMZWJwcnQ0K053d0hrVzI0ekRBQVVOWWdZb0lFTkRTZE1aSDBrY2Rla0F2NDRMUjJYYTRHOTBQWEdUeEVaamtVUnRvUEEzaGtveVh0Uk1zZkV6cW51eStadjJVamdNellZTHZ6M3FRSHk1UHFSR0haRjhaenNVQUVDM2V2UHFTd01wTEs4NmNzWDMwUGh0eklVZkM4TS90bWh2cHgxYXhjRzQwaEUwN1pEQmlOUXl5SXhHWUdOcEVJbzNSemIybFY1N0V2Wm14TFRsZ2cwbGJpejNGWEpYeEdDZGhtV2dFY2p1a0NMUEFsVElGV3h5dVJRc2ZORUJ0SGtjY2FCay9oSnhWcFNzUVlkNDdOWXJtMlMzckZzalFHMTRuWUhQckJyL3JLdmlWZjN1RG5uRStYQUpKaVpHVWV5aWZqU3h4VkNKMVVBaUtldm9Yc05LR3U5RHF0VHQ4TWFqOTJMSGRGNE9RMEUvem01aDVMd2I4T0VkTzdOWGhPMFhwTUQxTHZuRDUzMk5Pak1sRUU3MXd4U1I4STROZ3pQU1dVQVdXZk5aUnF3S09GMldSWGd6dXVpU1dUbTl5Ly9MVnlkTDFCaitSV1EzM2ZlOE9RdDdod1F4eElPSUQzajlhV2RXczNaQ1I3Rkl6MGFwaUFjbGhZcWZEOWhNTmUzS2h6WHZFbFFQdGI3MjM2L2plbkEvVTFXZmc5TUZsK2R1RWRJUmpBdUM1Z2NUTVRhZTJrSkFWektXOTFSZTFHY2xaMm5IV1ltVTVibStVa3NNUXAyYWVuMW5JeEM4RDc5dFBvL0xubnlSMWFoTktSdkhrYmxrVDRVQk5QbUp4bHMxbEZPa3VjL3c3c0JraEdzei82ZUFFZUxuSm5vS2NGU1ZveU9na2hJbHkrMUxISG1seklBRGhEK3dadnAwTVRFeE9nUlRXTCtkcDJlcjhuM3JncHRnMUw5OFpldFNLSHducEJVSjdOTUEvY1FhNkRqM041aWxQWUV4NXlvZ1RPQk9mSjIraUpnb2xUN1c0UzFDOVpyK3Nuc1hMUy9OdG1DaHJwQ1dsSGFOWGgxL1ZibmhJOUVRVy9KMnh3cXR0dnJ1SnZoeGZhRC9tblVIUndtdUF4R3AxMWZqZ0tUMFYrdElWRExGeVZzVktoWTg0OVZ4VVlweXdxdTJLSll4RWlFSmpaNjRSRGxscEtWYm1sK084bWo3TWJnODdvT213bzBzdXp0NjhlVnR0dWl3ekphbnp0dS9RdXhuaWdadHhoeVVxSGdhK2RQV1ZrUmsyeUhFSS81eHQ1TWQwZXdNanNkZmhXZFZ2OTdYUlVwcEN5M3lYRStBWkNJZlEzQmNwcll1WXNnV2hCRk5UVy8zbmkybmVDdll1UkcvRGh2L2s4aGlJOUU2QXl0eDFhM1RBeE9TemNJV3lJeTI4S0dZRzNIcW5rY3NIaGE0b1NuNWd4ZE00RnZpam1IRkhWdzFFT1RHcTBiNHRwdDlJN3RpakhXejVyRlFobGRBcTlvR3lMc29pQWVNNFMvZUlrcVN5a2FRMjRTZjZhcTRDR29mL2haMGNwckdiKzVTUE9zSGN2VGpHSXhTa0tBMHNLakN4SHNodDg3MXlHbEUwb3pwWXJuWkEzSHY1cklWNVhLTWpZRDRXWHltRUFUM0U1TzRTbDRmU1c4VHFWS0hEU0RnNGhBaWlXRjlOR2RrZkNRNENIVkt4K016WGRKSXQ5azIxQVVMZm5XRDJ3dUV6TUs0OFJ4VWVORnA0cSsyUDRFZ1M4Q0JnNy9UQllwblVQOVdQbXZjcy9EQlI5bGl1Mi9PeGJhM0xFK2MrcGc0VVlkS1RpWEVnSzFLbnZRTEtQOVl5OE5UK29XS2xWRjZoTHhZZWx1YUsxSE5XNkRUaHdKQkdhaXFuNFRXU29CdE9WYzVxWFZNMkFlRjRuS3kzQk5yTG1LZG1yS3BMaUJhSElVRDdKUzFUUTlGWnJFMXF3SFpDSmtrRHdMU2dJZDA5bXhjdDlKR2RPbDNJNVI3VUJSc08yTHRDK3R1dGpKNytnOW90M01FKzFEa3Bid0JIUlBraTQ0UVZPdFB5YmlreHhoVXZacndXWkhvVWNqeWpDZC9CWDNqRU1zYXpKYzEwWVR5QjluQmptN0tPZWRCeVh0c2pSUFlPRTFFdmZ1N25saTJVd2RhaUhNN0dCYmZ4THltd1NOdVdWS0dXZk0wcXo4MG9LLzFrMmdrNkpSdVdQYkJCSXVHUnNZUUhPNGdUU0pPL1kvMnRVQlQ3dDd2Tk9nbiswdjNkZG4yQmxmendLMUFEYVd4eWFRZWM3TXV0VW1pZjFORWlGci9rVk5CaURoZGZxUGwyZTE3NGRrZjAyRm9DV0pvbUJlL1UwRGN1OHByQmZxMVVzV0tGaWZiNXRRZERqdHdrNmZGdW13eHBjeE42czQ2THJmZ2RXaStFejdOOWhVVDMxcDFQQVJjWFhRUTFCZzVta0FsSVE4VVlreTNock1rZERpdGVObW96UVRtZDN3QnZNUmhOODI2dUk1bXM5SFZDbE14djNzTXZkSTYvc0QxY3BxVDlHTlhWTzYyT2FJdzY2aVJ0dThIK3JjdUtocG9yRVRyV0I2ZnBMRFBFQnJZakl2am1RYURGZjArbnArcmxodk9ZQ1BTeCsvQjlOMDdtY21UL09PT3orREJ0YVYzY1o2aTJTc1NRU3NTaWNvaWNtZzIxUHN1bUcvU3NQUG9xWVE2YXVyUFVMTCsvNEhsVjIxSUdUOHlrSzByWE4zRHBHUCsrR3A3OGF1UXpRN0tqNXBzeVFRM1BnT1o2bWgybno2d2lNV0F6UzdYTjU5Rk53aE1ZMzBnQXQ3c0JRRGk2bUJUdHlLejBOU2VacVp5YXBBZytmUVhoZys4cUJZaEJPME5qd3d5LzJCNUlpTkQ0UENlT3BybjZERkM1VzNOdGRhOEpUMkdoSU1UNndUZk9OTEFnbUQvMGxtTTFpblgxaWh6RENwR2hGMUJyT1F2MzQ2ZHJMNGQ1M2l2M3pTOWlEM21Hb0djOEJmR3ZuOHdpZ2JnWFAvT0RMa0htT290dWVZZ21PMWZsZXRVMzJxWGRhWlRsZHY0NDI5K2xLMFl4UFpJZ3UrQWQ3aFFZamo4MFpKeE9DMERDR2lXU1BVbGJtRklrUEowcytmd3hYZk96V3ZzVkkvTU9JaFFiWDFkT2d6L2NlbnM2dnhZbGpJVFdrNXk2VlpvanovZFM5NmlCOVZlUkMrb3VWcFR0M2JYdmdTUFNkY21Ib0JUZ283RnF0VURwTThTdWNoV1JQUCtld240RjdPdFkyRmxtdjNMMmN6TGUxcGdtbEViMXcySjlSQUwwWmdsckpvaGwvQWJxWCtIUkxlT09IUkZ5UVpQbVgyUFQvMExSRWxHeVhwZTFnaWhTTGk4blB5RUJpUk5uUkU1cXFSYjdwUmppTnQyd2E2aGFIdmVDVHV6VkNFaXhsQk5aUFRpaHM3VW1yTGxOdVc2aWZqWS9UMFY4LzVLbCt2RFhjeWxSN2NxSGVESHlDK3UvZW1jT2RER0Q5UENIUnZTTUZ3ejZJcmhBMW10WHhmaVc3UXJMY0RDeVZnWnJ3R0Z3QitPdENuKzlSajRSUkFiR3VydUlvZE5SOWMrc3UvMDRORmNDblBTOGNKaXJub1VtaExGVkd0cC84enplenZnOXlZZ1BrN1pjR2NXNW5WUDFCcE02b2ZBMVEySGkyY0ErYmV0WEpGRWVoN2ZId3dmdlYyclM0dDFwNzBEeGZFUUtFQWY1TnBqRWpSeGZ0d25mQWhUbEpEajlCamRDakFRUDVCV1BNZlVRUk14WWtNNlVXcmV6LzV3TXJ6dm9wTWJVeS9CVDhCaURJZWFoMU1XZTZGZjRwV0lOelU5aGtHRndkYmZMVnpzOE83ZjFua2RFSUZXZUZ6US9RclYrb3pNNkx3QlRIMjc2M0V2N3lmelNablNHaTFKYkIwT2xXWWVoTkJTVDJGOHZhVGxaNzNJVks2dEhEQ1hnajdzOG03UVJTNWhOUlFqY0VJRUh5M013ZzRVTjQ2c2ptdHZsNkYzbkZTNExGUmw0MjNmeUpOcHB1VGE5V1dTR2F3d0ZXQ2doMFJ0WVg0aWg0ZGZXUFpZeEVpaEpWTFpUSGQxWGJ3L1dWYy9XZTc3S0hyNno2K3RZTjllanY3TkJuOWVobjIyb24zYWR2dTBmSDc5SGhRbmp5QnpFYWMvRTlxZkFJRldpR3UxQ0RwNldreVdvRHlFRWlZNzRhVis1d1BZVm9lR2hWY05STUlKOStrWkxNdTQ2bCtEbnFnT085Qjk2Unh3Zng1UlVQRzVUbjNnb002Vng4YXF6SzRGVjdHSklsaEhPSDkrbWlTbEZBODFxNzl0SVhjVXM5Yk9scXdlWUV1R0owMkt6NVUwTTlRbXlvRDZDM3AxZGFIKzlQWXNUODhIZ3JnSTFvVGIvNmtJTk1MZzMxV3VMS0gvcHhmVlJ6YzdtRmdyYU9HM0lNNk9ScVhIMVJhdGlHZU5oK0ZYNWNhbElzdnJQQjdQNS92K0NTcHdDc011RjVsUkpLcVpkSXQwdHFzZHVKcHlOMDBFV2gyN3dwT3BEUDdWOWZYNlkrODI2VVZPY1BSdi9SQlRCZnYzWFQ2a3FGMlQ3ODVhempjYitlMUVMV2ZuVlZiYkNwQnJSYkJseXo2dFJibTVCaVNkYkhYZ3JPUW1kei9RbXJ2cVNGTGN5N2RZTkpSQ3FxWnBnQXkzNnMvbVBReFZIN05WVEJ0eVZIcDloeTdmMEh4ZCtMc2ZYeHE5S1AwcmR3RU9xVVR3YjNzSUhYdlBHQnNBbzI3aEFKWFZYR0ZiTmZqRzVEY0JwV051NDFZVy9wb21CWkQzdUY0UzVoeXNoWEN5bkhjK29sL3FoL3ZxNFYvMXpFdnV5UjUrc2JoUXliczRMZkl3V24zb1hESWMzUHVlbHZhQ2Y1a1lyMklkMVJiQU9zMmM5aEozSHNsNjArS3pZaVNDcVgzLzFwNHJGMmhVT1dNbXl0ZHpPNHdOZ2hrV1lsdFlDU0sxL29YOXgyS3ZMSmZOeVVGZjQ5dXhPOWl0ekFJTTR2ZzlBS3ovejlWemk4dFlCRnNiY0grUitRcHRCMlQzOC9OTWVhTHB0UG5uOFU3VVZnYWRmc056MnJpa09IT2ltZWFkNndpUm9KV2dIY3pPQ29tbC9DeTRaci9NTmdQR290MVpuSGJNWi82QjFEeE5ULzU2dWpoNjZHLzFnT0lrT0FVcGsvYTRvNUpDckpXNm9UWE53L1VwR1BaV0ZtRy96dVVXck9IUEEwczJVNkJDNE9rWlo5TFhqUEJic045S1ozNml6S1VBVXVhOUdESU9aeXN6eStYV2JJZCtrZmtWeDVLdk5lNjFBN1dtVWdJQVZwVUoxeElPc1M5aVUyeWRnQUdMeDNCcCtaMXlFNldsOVBlQ2QzdDRmSnJmVXhlNElKRzFJNHN0a0JVd2loZGZibk0wMyt3NmMrbTZaTFF4VEFhakYzQXZsSTZLdGNnR1RrclVYSXBXNkpKdXVrTHQxM2tZekE2L21IWUN1UGNaU2ZLcC96YW0vZDNsaUc2YVFkWFJUdUJjSjFQQTc2ZHpTaHdyeno4aTBmdEk0cjRDSkZBOXZGcHNWeWN0Ulh4ODNZalh2VlNiRnpQb2VTSFA0aUdZYnhuQVlXM0lQb3ptb3M4U2h6N3h2QXZTaXdVNjArYWl0WXp3MHVTV1Zaem15YWNhM3R0VlZLSkFsWXMxUjJEMUY1NnlHZ1AvVnJ2M3p0UGQzcjZSRWhNalNvZzZSbWFrTmZsTUpFbmw2ODlzZUMwbE5NcVFkRlZaNXlNdFc5TjlBTThmcWJJL0U2cm4yMGw3L21NaXFiZG9uMXpOK1o1WEh0blhmWnIrRDF2d2NWS3ROaUVsRjI2Z1c0RXovb0tTTVdjWGI2dlcrekp0aUpkZXdKVStnRHJybXRVYjYvSTNZQ0l0czEvbE9rTG1icWpiS1g0Ynd1MVdkMVlZb1hiMWV5M0poVDNOUUYzRm4zNW5rOVkvQnQ4Z3MwajdYVGIxZ3NHVStUT2dEK1ZWcGRCWlJSak1iN3BjT290S2dYdXFMenZZc0NIUkNPN21oc0o4YkZnd21TY1R4MGY1eHEyVEdYZStTTFhvbmZXdkxGOTRjMFhWaEpNUFhLdWZEaEZtWVFkbHU0WWJqYWpaMG1HTTJ0QlhGbU1VcGpLL1pQUS96MmVlZ3l0REFtd1NpSXpaY1FnYm16Mk9hTnJrem10QzB0ZlA2NFA1aTgrdHZtcmRyVVdiVmx3ZHhUMm9qL3E4YXk4YStKcjJsN0RuYmw2TnROUHV2WDFuS1JyNzR4bG1PeWdhVE8rWERMMHlHdVF2T280aTZhdHR2aE03QjdadmN4WEhzKzhWMk1QQ205S3NVRHZjamgyQUR3TG9LQTRYSkpsZWp4cGIvOU8vM1F1dmZTSzhraTRrVVplSGduVFNOTzlmejVocG4vMzAxU0JndzVGc2NNWmhuQkE3SzRTRENuQ2N4WGlNM09XbWJkWVJRWWR1YndCUStRVTVtTmM0UTlMNXZ6SmhBQ25sa055R2k5Q1cxcm9veFhtZS9WRXpFYWxmM3R4NnJpVjlHdy9iVWtoc1VLeDFEMnBNNTNwS1RKYVdzYWRicUhTVHhVc2R0UFBIQVpyUXpKckdNdjVrZEJVeGd1RlpZV0Y3V3NWaXVvaXc1U3duQW9sanRpL0xQRmxoYk1pd1ZxTXFtaG5aMXBzeXNUQUw1SjdvTk1JdlpsUnFULzIvVndreDAxR3loTGFBWUs2eFhsb1E5eHQ1MnRmYy95UWZyYnFkK1BOZHBGQlFOYlFvclA0VXltRVg4VndCWC82U0hVVC9lemhkQUZYQ0RZSEhNazVpY0ZYcjFCL21nZ3NtQzJlTjlVTEhXNFYyWHlFb0pRUmc5c1Fyb1RxcnE5TE0vV3IvVHMvUVR6VmdaTU9YYU4zSFhkcTZzcCs1VndCd0s4RHhLZ0YraHRBQWJyYzltOWxRQTNtbXdhbldMY1ovVzdsV0h1WkxiUkFlQlNGekdJSTBORWNhSVpWU3lCU3JZOGVLbUxkY2d4L0lwMUk1UStRb01LejcwRWM4UENWQ1FzVUhLUVh2UHVFSkNxeG04VGQ2RGFaUW82TnFObzNiSURlVlFtREJPOXJKQjBQWkFXV2ZTb21SZXVyanJ6dUx2ZjdOTm5vZWgwd21wQktFT0lXeUVQNzBNb3V2MVRpMDhOUk10Q2ZEQ2xpSWpDOUVhMWR5L2ZFZEJwQVhGQ0FxNnl5U0hTUUcwenRFd3NpZjZsdFJiNkgyKzRyWTdyUjhkT01EWWRsdFdDdWd4aHdGQVJLb211RlZzSVQyUW10aytmYWhpU05tZTl5S0NOeVhwdkUvUDZ4ZWVKRm5nU3FuVDhQd3B4eVNqTXorWU5kTFA5b09rM3ZHWkxzUjg3NEpaNEU4dzN2QW1pZTZsczFaL1FqY3NISnZIWlU4Tjg4ZEJBdSs1NnpRZ0hKcDhmT2Z3U0l4dkpGVEFhdkxLeHZHMkE1WEJJdlZsWUtIUlhINm9UYXhtZ1NXM2xOZUdHMmlaanJOM0R5NXlSNFd3UGJTYXJ0ZzBLam9ZZmF1RFVYQlZuVHJRNDdPUjB5ejRjMVh2MEVkcFVBa3phZE9Tc3NnT3ZacERwSXZ5Q3ZyN1hZeWJYTDV3eW42MXRxVitKamt6UmVHR3g4VS9LYWtHcWo1Wi9MdVk2SXpPTUNSbmlwSXdiU1drSXZPNnc0NExURDkxeHlRQnRIbGkzaXo0QUxSR1BhbXVzUWtxdHZTVkdaNjZwNUNxRTNtcERwb1d0YlNyZTB2eUFjVmhBbkt4T3FrdWxJSzJianBrakxYUFdlMUJrck5kVzVVMmFoODJYRWtaWjB3VTA4ZCtuZEt4aGM2U1lEenB0MTU0ZlFJRjBsUm1zRE9tZzF4bjVKMHVYRVliTmw0cHBHemtycUZ4OVNDTElDSUZ4SFFxdHFiekdwNGNmUktnOW1kMEVrRjVTVDVRK3Fld0IyN1JjZkpFWXVKckJZSVhObFNsd3VZemFneHYwVGxHUVlVTy9LSWVXc1dZRUxIMExha0EzRFRESjh4MDNpdnk1NEJRNTIzR0FUMndrWUVUMWhOVzdVU2RLT2NOckc5dWRxL0NvVjRNZEF5R2tRRmpsVW1wdUs4ZThwaEoybGtrNFkwNGg3dHN4OHJGYjVKOU1PU0RwZGF3WVZ0UGtKOWphQ1hDbUJMaEdKYll2NGFxVkRpVlNRR08rVDN2QUlVL0VxSWxEa1VrVzhkenM0T2xvbWh3cVZ3WUJJN29XWnhpYzBOcUgxSWMrckJEYm9yWnA5S0hZZHQrcjU5cWpwU2JvTnNET21RTzZRYzNYVXNwYXBYTWJHWHh3M2hzY0hTYzFDbmV5Rm5xekpKaXRwWkZReFFTNVFPdGg0YVU5QmE5cXRYM2t2UkVySEFhamRMSUV4emF2bTJJM2t2MDJTb1U4VTBLV1hBUkJWVWtKa0xrT2djelI1QjR5ams0SGZpN2RZY1djNUd5N0JDeHpJOXBjaDNUcExYUmRuVEVDUWphMG1lUnZjSFYzdVN5MDFsR2U5a1E3d0dGdDdyZjVpNHIzWldrS2NBOE1xMmZac3JnODRqYjBQWXhDdVh2aGx2Ky9wcUFiTzdNT3l5R21nSk5WYWppMkh0czR0OFBxb0Z3OHhNd1llRS84MHRrcmdQWTJndWdTemYrVVZxYVZlMzg0bVBPRFk0TE9PL1hwalNXWGF5MHNsK055WjV4M1oxVHdudU5pL3VOb1oxVkVpUVNyM3BzZCtSdDZmTjRFaXQwb3Jkc0E5UlpPbnpSUm4vTks1aEZ2ODFBZzBGN2J3ZnBuYUEwT1N1bTJuVy9PMmVyMGFMSDlpcmRzWGU1QU5lVmp4Q1llZzdyUE9MUm4yYStveDg2YmdRQ0dOVkZtRmxIbWxrNkcyUnhYYmU3eUFhNUd4eE1VK3lBUEJURmtEcEdyS3ZuanlRVy9vZVZTMHlZZUtlVHNubmRQc3ptUE5RamliNFJxbWlHbXZ0R3hLbW9DUmM4MTZpRnlJRVA5Q2ZUUTcwdjdJUEM2d1dnTk9LVG82a1gzTk92ZXpON0ZwdjhzTk1OR3JMZTAvZDR5bW83WjVjSy9QMlh5M1BIcFVqREp4NGZMdnU0S214bmNEeVdwL3pUTFhJRzF3ZnY5bXFMZ0JHYUJ2SVpxM29Jd0VMRjJZMDgyMkdjRmwwcDVzb1NvbElYcGFPUUlWSGRWcS9aKzNhbmdjTnprQW85bzBGVVRtRnp2WktidFU3bkZSbklSUWM3SUlLUWZ3S3oxL3psekNKbHhSSEVOS011Q1JmNjZyQWVpRzBYNmpXSG5kTVFzWEtFb1o2YkdpWGpsS3Z4OXdQSWk5eU1MNklNZ0ZGcDdDZHQwTjRiUi84NUg2dXdCME9wYzFZaS9PemZ3a05GRUN6QlpaaHJUNWFnaVJ3cUFkeTMzcUovdnFuNGtxaEJja3FHSU1KcDQwUGVIM1E1RUxjN3ZuK3BTTzQrd2RnWmE4U0F4ZHdqMnBaOHZTeUQ2bE0wUXZKNng1dFoxcGE0SCtlT0tTUUF3T3BnRHRhWld2WkVzQnYrTmlkRm5jOFFJQlZkcGtqVS9Md1BkMHBlQmkvRDJYeStrUHJqUEJpa2FBQm5LRzhKNHdMR21YWjdSTHpJL3MvVmgySkVwQmwxTnBzb3cvelIzTEpzWW8xRXgvNHBuc0hnSHVCSEp4YzVyZmNGdWhWaTZwZXFKTEtWMG1YZkdYRnZOTENSSERYRDVXM29XT1F2dys5YjFkMGdjNnova1NyZlV6dG5uSTNTV0ZnRFFyU0tzMVdGR1ViQ245NmVYQmlpS3pqTjhGdmFqbXgvcDAzNjZrY0lYczZ4a205Q3I0VklnQTdHTXNsK3NhVHo4L3kyWUhxNTRha0d1TllWakZlY2dUUE16WG10aXlkUm1QY3hZOWpiWmVORFFJTitjUkJRb1pqR09UZ2hZMDlSRGZ0elo3bklmbkU5UTZ5RzJ1TXRkU3FLNVZySEdMZk9PZDJpSFFIRGxLR3N2UnVuc1c4S3hZd2FiZjlSdVkxZE1FQWdXUmp5OFVheC9pV3ZFaU9waWtXRnIrTGZZZ1IwbXBXRFpocndTeU1EVlNWQ0w1NGpNSjVXTFVieXVOandublU2U0p2VGJjYUpVR21ReSthT05lbG9pcmkrUHVoaG1GTUFaU1VZaHE3L1o1alIxZDdUZ2hvdTRDbHhuTStRQUZ1Y2ZvMnBBRFlDVU4zSXhGZ0k4a1BDTVdacFNKYVRiSTQ5Z3pDTTJ1Q3p4cHBjcUxkVzkzOEFKNlNuWWR0UUFkUGVST1YzaUtBRFpKTTl6NmF2cGhJNUZCZlhFNFVpcDZuelVyMkpXaFp5cXEvUE8zNWFxclNob0MzUGVIQzJpZnVNQlFBU0pqdjRnVzhjRS9udnRVdGVRSjg4ek5IMGtNNllpeDhHdUZ3RXA5ZmdZRE9vK01RREJRVGFKSTlNei9XRnZmOFlGLzVHNEgvQnhqQmxFOUZGRXNQTHVodyswbUFLREJPV2ZqZFJPWVN4OEJLMzdRWDZJVCtCTEZJTnJCaDhrcHJBTktXTDBUMEJpWjRYcHRILzA0S1E4U0xiRXY3THJFZm0vWjVvaks3VE1wU3FKeG5xeWcvclkwRERhbjhBbXFZWTVqcmphcjRvWG5MWUZ5V2p3bkZORk5PTjFuOEpXQk00emk0L2ptTy9zZ2dKWmJmRlVSV3lOQXU1ZGExWEdPZ1NIV0pROWIxek5vR25TNlN3b3dOcVl3NC9Kc3Y4RmMrK3A4eHR4VitvSzVVd1VPWkFFa3ZCZ0tXallhTlBxckQ1Tzc2cnlCZ0c5aXFxT25HWTJwL3ErM1pEN1ovQi9ZbFY2VFY0dmtTN04yRTI3WndNQkF4cFZFZllMNy8wclBhbEdCRFd0Qk1YbFFJMWtuWHNvSEtFOGQycmg0U0N4RXI5MTJVT1V1bGRnbXNxVnh6R3JHOW4ranhGcER0c2JOSXNoQmEvalZhaTk2eG1nRWZ6QTRHMkk1OUZHRUl0N2pUTmZXOElaRWRydlhFenBEQ2FkQ0lMSzdERGFGb0pOdytVNlo4VjMvVk1rUklzUWZXcU9qR2I5U0J0L1BFcy9qQTYvVmhGM2xPQjlUbG5raGl0K0l4UXd6TitBOTkraHF6eHFPK01NOFhZU21VR1ljdDBCbGozcmRZTnNmRE01THp5cnFCeWlyU0hpSHl2U2FpamhQQjVWTVovS0cyeWVkR01OUExLbVk1UThVV29wdjZXZ1NFNm5VT1JJeFZMMDJPZUo5Q1RVcDVybWtwVWJVbHJ5elBrZlY1WnZTV25WOGh0MU1ERnFWR3lNU1R3WjNTWWY5YXdEWXBGVHpOOUlYMUhCUFJRM04xV3lXK0tNNlhsMDB5aWxNWGVCUUxDVU83RHdUc2NiNXNyM2xRYWtudXg3YUhkbEhWQVVxd0dYVVRLdXJuTGdVSk40aDlPSVdOcEVCYy9CVHVqS3FtUWpsMTl5R0hpZXl1eWdhYXJ1TDlJaUM5QUlOeXVRempDK0VESkJ6RVA0ODAzTzZ3WjMrUm0vbWY1V1crNWw2RWVvL0huY24xSG5hUzRQY2t0aTkwSjdyVGVSSldPbWxZVnNwdjhUVnlEMkRzai9IZ1crWkFhaFRGQVNLanBZS3NjQVBMd21BUmNMVWQvUExnR0FRRFl5YkVac1IxdDE5QnprTGJZV3pRUkEzNDUxaUoyWnE5TG9pZkRBdHFQazc0SzdCdGhDVDJyZzFMWS85Yzh0SjZaRmt5UnQwNWdmdFkxWU1KVks2Mjh4RUxxR2k1TWFYcHJnMVFGTHlSaWpSUnF2cEJtSk5GSkpEWEpmU2pmVHYrNmhzTGcvN0RZM3gzM1RxNFUvMXBMS2NpdEx5eWdlakh1THo5eTZ3YkdKNUkxMFk4REF6WDNtYzBXYStsLzdtNUtTaXZaZzI0eDEzQndRS0JIdFU5NnFoeDg5TjBSSjdScWkzT0g3MnVqc01qUXB5Qi91Q3dmVGk0TlNUNFdzS3NrVHI1TVhvZXZRcXM4NGdIdm9aUDdUVmdxN0EzVG1BVVdaSWVrVGNPWHpYdXEwb2NQaGs4Y3FsZWZRV1dkS01KZkZ3K1Y3bmxtVm1LbVI4aEExR2o5bWFSVFdPTkVyZyt1b0tONVRzUUR6WkdkSGg3cXIzNEFUenlBbzZtNHZieUdMTks4WGtFZkdKY09ScVNwZ1R4WHloTGxKQVNHZ2EzNzVLVFZEVnBWekQxUm9OazZEaGZwbFNtZlZob3M3aEJVYVQ1MjZEaW1odjNhLzVzRzBJUExNRDNTVTYzTzNFT0xEa1BrQWtoWk94VFFxQUt2bS9NVDA2ZzIzQTBnRTlpT1o1bzlMUkRrUmkrSkJIMzdhVmFoTFNBajdWVVA4NjNLaTJsVC9xbVE5bzF6K0JRRjZNWEg2em96QW1UU0QwYkJVYktoNWxEaThJR3dBd1RDUWluVm9ZOTlxOEdTcG5oUnI4QkFZaElwRkk2MjhrMHRGV28zMGREZVBFZjR0bERqelg1TVhHNyt4blJ6ZGRYU3hMd3JXRmErYlplZnozUEE4RzNJUFFMdDl5RXNNMjRkNktwdVk1WWFUSDBuU2JrZnVjZjdTeDBzMzBuKzlxK2hKK0ZqM2NWRDRWOWRGNDM5UW1wR3lXTVhrTi90YlY0ckdIelZpKzF2Q0NuK0h6dzcxbGM3ZUZFWTdSbDhMMVVZRDdmTVg4MGFlYUwyakl2L1pnaUNGMW5NRmMzRm9IbzlEQTFkOW9jY0txazdHZUtRbnhMMHgrSU5HandnUlgwSlA5R1IxbG1oaUV4RDhqdXZoREVtU3EyRFBlVXliMnkySXhpWWQxZWhIV0hCQlczWUpXQ0lwbXFNYXExQlFoQktBRmkwaFExY2YwSnRaRWp6amFyY0lwL0hYb0NaM3BVaGg4ejI1czhWVkNaT3N5RmpZemJycFpHMkdrb1Z4R1NuTVYvSXhIb1ZFV2xST2xHNll4VTArVy8zYTdyMFlpOHVtbGVJZXBITXR4VDA3b1RlS01GUEZsM0hSUWUyN2I1YmhYWElNN2I5ZkJWQXVYRGQ5WTdDVHlPV2hJYm5kSGtBU0FUOVBlRWU5aVZoYTl1MzFKOXFsU245Yit4MDlUNWk5a3JoOGluWWROdHFUcmQ5KzJ6MG9nNis3c204dTUvQmpLSTVob2hpeVhWMyttTFNuTWl4RmhmaE9abXBSaGVMVG1zeDl1U0RXV252QW56ZUtLR1BXeUJYb2tZVzd6ZU9CUjZneHZhcVN6akNpVC9VOUN6RTE0WjhrczZQWW5ocVVyQ1RhS0FtbEVlMEkvZ2o0cHUwY2d6dE9sZmRubGZ1WXlsWUJHaVlUK2dKc0ZQUWQ2ZUcwSGFYY1lyNVFlU0tjNGhoRmNEMzI0WXkrdDVoQjg4UVROREFSb1NNck5pUGJVRmpsclVPMllXTkpaYTJvR2FSczdYUVpQK0xkaDhmVVQ0cVNKQmVtR1lpVEdHck1vS2lUaXNheFJ3a0VyMmxaTlE0QXdrdFF6bXI0c1NhTWk2KzJZUXN1T21tY1EvdnlOQXlaOUxLQ1NjYXBUUkcwRzRiZGlobXF6N09vdm9xc0FGRFFJSTgzL0JwVHhsWWprRmNZZHhSWTBtdVI2NFMzQTZDandrRC8xeUU0Y21nZG5vNDV2dnR3Q2ROeC9OeG1jZmNWYmkvNTVCTVRzS3VLejExT1UrZ0RQL25yZWx2b0tMT0IzZGZxOWNSdFhSdXlVbmZpcEhNbVJQbi9KOVIvSlQvSDlhS3NuMzhWMmFzVmlaaEExS3VHNzg5N1I4bElhVGtLait4eGhrL0I3eTZ1dGFWS3EzNFA3ZnlidHFQWkhRbkVjUzFldnJkbXlUREp5Qmc1YXZ0dksvdjNHN3NSMUR5Um44VERTTTREUVIwdGpFbW5OWmxtVUFvSkNrbDBXd1h1azVzcnlBZ3Rxb1B2TFZTdkIwUFh0WVA0aHRmbUtSQWpjZU43T1NScXYzR0Uxa3VTdkN2TzJVdmQyWW0rZVBVQm9LY0Mva3psdlVNNHQreFd1NW5kVHIzWUZFb1NkeENjdFhZR1BMQUgvR3dZNFJ4U3QvUDhsb0UwRkJyZG5tOGlaZ1lzOTJLRGptbmd5SjNwd1RtR1pqaEhXVGVOWTNZNlhzaUhxMm4xSFZuN0RVdFRxQ3U0dDdlOXRXSGl2K0V4ZmVDZmtHRDFvZ1NTKzRiL25Lek9uVWtmNkorbkhGUENFT1V1OWxndWZzUjJNQjZvN1orUlZ4bjI3Wjc3cE9uQzVXdkJ1eWZNUFhNQlVSSnBPakg5cjZRR0VqaEhkTWg5OXNuSk1WdzRkc2ZQN3FybVFSRGVOQ1BVS3dNZkFRa1RJdFhveGR2MWt1TGJCVW1QalR6NTByQjFrYVJLRkR6R1Y5TE5sdjNRVzZNUE9GbnlKSkNGQkpVVDhTNE9rQlE4SGVjdkgycjB2YXpSclJKanBjcVZCRnZ5enFkRVRTVFVGZkRuWHorZWVIY3pSTzg0dmdTQVNTa2h4NDN5Tm84bDAyWXZzdkhjNFZjSzZERmE4dmNpVWVTUzcxa1dzR2tVYm5Vd3VnT1c4QzdpVXJOR2tiZldDK0RKdVJLY2QwQkZGVzVMblNzYmU1TERZOW5oclhtMlEwbHQ5WWgzaVpqbkUyVHRYU0p4S3BtQVAvVXZOcXNwSXErUmYwaFduTHBFZXVqczkyWStlVlFrNC90ZlY4WlprYzdESGdONTRYWkZDaXl4OGNUYlZib2p0UU9kRE5kZUVKeUhkM3hZa0laZmhCU0dVczgwYm1nWUV2NW9uL3pDc01WMnp2WUFWLzJlWkk2V2FmUkRoWEJrNWVjdlNBVVB6alhxRGRmMWJrWjRxblpaNUpWVGFIRGZEa0tOM3FWb3R5YnNIdFZIQXo5aUVvSUlCQUVaeEJtZmEzOFpLaWliL1Z3aTNJSjdpckxpWXV0bllNNnQrazBFU09CbWR4ZldPOW1DNHNVT0huK1FmTnlvTXRIeTBaYW02NkFOR3NsU1JoNGsrbzkyWjF1WUxwM0U0UjVRK3ZtbWtjYjhvb08vS1NaaWVTZUZIYXZ6UmVHa3h1K2hwNm5LZ0hCZnc2T0ljVkJvM0ZSUzdYSmlGQVY3dTR1WURWY2VSYzVsb1Z0c0lBRDNIalBJd3p5QVcwMjVBemhWSXlOUlRPamJxQ3VsTWZkOWRSR1I4TDd6NXpLSVdtYVhlZlNjTjNlWEpBZ1JmWnR6MmcwTTVaQVBZVllEYTBPVDEwK09HK0pPZHRsWDNjMFVvNVBGUkNhcytOTTYzUTVubzFFS3JLRlcvN0FyUWRSRW9zUGRrVjQwK21XZkRFZytWUnlxSzVSV3NMalZIWm9OTmJ4dEFOR2RDSzJ3MVR5YXcwMTF4eWhFc2o5SHZRaE8zYTRWNEdiMkZoaHYybkhCd0FiVmRVV1cyNWhNS2kzUXdRdFpUNFVZWG1aYlhWN2tJN0VkRnIvM3V4YnExZ1BvV3J3S095eTBEVUh5djUyeVhHdzRlc0dqQ2RBY2ZuM1kwTVgyTHoxaklzUlJZZ21SRlVHSXdUa2Yrd1lsamRFeDBqSlIwUStVV092Nkp6bGFxdEZyeG9xOEVJZE1lT29neWpCdmphckhOYWtkQnZtUUZwY2xRdjM1ZTI4OE42anV3WitEalNOeWFid2tqcncyVlNRN3lod3ppL3FtSjh0dkMvem4yY0Z2a29WU2huY0pZUkJlczNnNnB2NndUSnNZY25BTGYyNFkvN0FjSHNmMUFrcEM4c3VxRG5hbC9oeEFJR1hXTWNUMnFpZUdmNm4ybnd6MG1hd283OXNUSDRyUjFKaVdBblpWVyt2Q0pxcDIwYy9Fc25Hd2hlSWZJRUJqNjN0U1dQWWNsTE5RSEZpM213RFZMSWlYWVdXSTVJQU1aRHVVNmpTaURtQUwzTTFmeWh3R0QxMzhQZktoOUw5R2xmSlZlV3pzbGxWS0c0MUpUWktCb0d6UnpCV2t6NTVUcnZFcUNURzFVR3pvY1hKV1VteDg2MGlXVE1tZjR2Wjd4VHBrZFdpT25DOWU3Rm9uYkVFTTZDSDV2THZSV1lpdFcwWWRRdG1NM3hvZEpnUlY5QU5vbzN6azEvMHlzUlFTVGtvMHFEWWZuUTNIS1NvekIwQUtXTVQ3SU5wUW1OZytqbUw1Z0R3c1J4cGxvdkRjYzFxcjVJdSt1QWFTdTh3VktHYTlpOTZhZGNsellpN2ZibzJhbzFwd0pDK3V2UXFyNnRUcExNdS9hcEp0VmpDOTljRjAzckl1Umd3VmMvemhjK0hFcHlqZUtMME5wbEVVbkJud0NPbkRZMUVGVWVlNk5YamtIb1FsN0FLT1oyT1ZqVkd5TlpwOHJxVG9Cb3J0b2tobmgyZDF2M1g4OUNyR1J2TXdsUkVDTWxqeTR0Skh6V25jN0pkYWVxaHJqOE9oQUduRVJYLzhGc0Q5YWZXRjdHSDV4M3hMSkZTUHdlU2NVYTVPdFBWY1B2WDdoN1NGZG5QTGpUMnNpRURMa2ZzaXlvZVZsQWJEdFdEcS80VnVES0RZNWVHSmsxQ1NRcDUyRXRSeDcrM3VaZHF5ak9yQ1dzZzVYMXFEb3hTUE9vK2tkYTRxZHVnZlFUcWZtWWErQ3U0TUxpL013LzBPYkZvWTFpN0NwU1IwSWVXcEFvWldUUDAxK1dJQzVNSHN6ZHBnNGRsOU9nbHNkWWsyemlRTTVqc1FSY2c1dk5NOFZGUW9FMFBMMWNSeU9IQ1NlTThzT2g1UEx1d0wxTzkwMFhGNi9LdjFNMDM0RTdIZ0hQZWdpSmdLMHMzTFo2bVE0bU05a0lhTWloK0lWZWs5RUo0L3gzaGoyWnp1U0E1Y2w4M1JwQ3F0SXpnK281T1FnUVpORFNRVFBUeVZDS0UwVnA1ckt2UFhtTENYajBpbFFhWklBcVhXY2c5YldhclExVk9XUDBpRnZqTkZqeUJVQm5penVnTVhWMUIxbmtHOWhhUWg0enhXMlVOU1did2p4cXIvUnVyMlBTd3QvcWlycXlXZTNxbTM2VGJVTjhYZUl0MUUrWFRHc3NmZ2laZm9FT3BydFo3dlZsTG45dVJiTGNuNklWT2dLc1BSSGNicGMvejRGcG9sVUlsNURGaXVsVXFWSkFLNkw2K0sweVBIUzZxbkNrcWRQZ0ZON2VJSDdaUmdWaDljcmZlczBBTUNPOGJsZ0FwbEV6SkVXNXgwbXlMbFQ4c3ZXNW5VYVVsM1NFVU5iZytndmN5ZTNXSEQrcGtReHRJOS9HQVdRYk16a1pWeStCTis1UkNtRld3QjBNRDZEdHNZVHRXVVN1UjNFMmJvSCs3blkyY1RsZlNYTUFZVE5OWjFIVEZIRmNwbkJsSHo4K09CNkl2amhDcERPUlhDUHpoNVZoUEtmQytEa0NVcFVtY2sycWRlVjNrR3lGaVR5dmhNbjFmdVd3cDNEVW4yZXlDZll2MDVTYUhSRXk5MmpNWVc0Ylo5MDZjWlFHVkFCMU1sNGErZGdEMTFXWThUWElaUkhEaHl5OFhSdUJhUDNzY2hSL3hxR3hEbFZWbHlIbmhsdnRJd0h3aUpNZ0MwZVVudy9ZbStFdVpSbUZvNGFiUGdkVEswR1QycXlodmlHT3RxbHF2NlJCRUE1dnJDYkRBbFBHNkxpWHNhUmQwQWlqMmt5VUM5UjI3YkVsZCtweHFVVUd5NlZUSEVzeE85QzU0blhtSHM5Z0xKbkxINWpIdTZ6a0NRVnppcGF5NVpzbHVTbWR6K0xWdnJQemUwOFp6Rmw1UWZEZ0xQVHdtMWFWQTVhWkdVQnJBMzVkaG9UZUtxZlpraU14elBaa1FXQ0piSFdIQ09ZNGF3NmJNdC90UUdSOWxnVUhVVThVbUt2aTlUYkVobEY3WTY0K0J6ZGFkV3M1ZVFJTlNxMFRyNC9GWkt6bzhVb1Qydk5oYUdhV3J2bGpmQ2NjZVR4MXZIVkw4NER6ZE8zc0poRnp5c0ZuY0V0SHo0cmY3RVNaUThyWGZIVUJyWmcxcjcybDJ4VU1QUTJsWkJTU0lWVTg2ZG9DNUpFYVNNeXNrSi9BK3B5VUlHQW9FYks2M0lHTHlpUlFvS3crUzFhZzA2K3Y1V2VJbUNlTzZPdlFvMFpwbHpRMFlUdVhqN29NQUxyaGRxV1NQRXI2bUg1WlVuZWszYWJMWXN2S3BleDMrcTExTHJHSjBSQWltQkRJZEVEdHprWGJnUEY0bktOazlnQXhGcXlqa0hsc0w2YkpNbUpudXpMY29BN3hOQVppUjRra2VpdjkvRkpZNG9HUG1acGtZaW1jSld4cmpIQmxhTXQ0TkxaQU10NEI2N0l2bnJ3bWM3akRqcFhHbzQwWnZ5eHVZTUV4ZHQralBqcFhpbWUydGE4YkNTaTFvUHpsZlloZmFHbjR5TkFwUENVc1NnMkxZaldHblUza0V1cS9TUURobWVDQWxlNHZiT24rY0RVU1lJdFVnSmVNamxrMm1YcmF3WDd1Y1VUYlBzOUlrbU9YZGVUWFNGU21EZ0REMnFoTmdGUFFlNldYUTZaYjJwYTlJdzVpQ0g2V2grMDhNVW0yb3RmSVlidVpGUHVzZkdTMzg4UVhOUTJGL3JCdlM3Sm4zYk1uUlprVWFFc01PL1VFMWRqbHNFMmFnaXJ0dDJaSXZBeHJkakpOMlYza3BML05Bb3NDOG1zdDVxUmtCaHdVN0xXWU9EQzh3aStMNm1uUThpOG50c2RpY21Ya2NVTWI0TUR4SjFQMGtVRGdUVGFWeldsR1NzYk9YenBNbWJ4SVhlZjNyVjI4dHprU28xTUVLY0ZqN25BNXQvWjhvK2tWRFV0L2ZqRTVjNjNhUi9RZWNva0IzVkFWeUdpWndKTGFCVjdhTngrYjZ5bmVtL2NjK05IMG1wejExQThGbUcrRld2VUhQdktFdSt5a0RlcEZtM3ZrSE16OS9UR2dNcVlwNWgzV21wUGF6MzdqV281RFkzbUZUckM3SzU5QnJHYm4yWnBaTi9kLzBnMGR3UmgvMkp5R0Z2K3JjZldEOTVCd0J4NFlnN0hma0dXZHo4bUZVdDZ2K25tWUJoZVRyY3VKZVI4dVh6NTJQVWh2YVlOSi9BekU4cUdWeThoK2lWY0ZTc0hReE9Zb040VzlpT09mdkIxdmR1RWg3MnJoK3o0d3BEN2xleWl6RWVWS3JKMnRYdXA1aktvUnRZMzEzVndpaWZ1WEsyL2hYNnBsTjBKM2tuUm1Ic3AxRmpKZGoraURKTlQ5K0lORHN4ZjJpdjdoN1JJUGYxdWFBMWl5SFo1OGkxSmdSamQwWm1vRUI1L0RkaGtVSjU0dGJCejlDS3E2Uis0QytoNzgrdmlRcDhta1NnVU1zdWlVVnVqU3NpeGR6UkIzVXE2WlVUT1NmTmtaZElUWUFvNlZDWDFTeDg3aGxNdURJWWcvVVpqYWI5RGFGa1pIeVNsMzMwN2RXeTVPSWdMdmI1cm1pWWs4cTF3d0N0SWRGY1dza0VpNE1DT2dCam5mZFhwOXFvTjBvSktQQlVETHJrYjZ1bFVidm9xVXlNWmRnZVRhYUpMbXhiMllFNFZnMTdvYzVuZE54LzBpV0l2MS9RMElVa3UrZGtGRUh0b0c0YkpxWVhKNG95SjR2SnMrOUkwQm42SDlLdEpGSGFHWVdOZFRsdDRMcG1UcWs4RzhtS1BsaERUeE91cmkxcHNrZzZ6SjhDZVdFNmNjMVFWMlRTODBsMHBUWXNEVlU3U0t4MUdPb0dqdE1WYldiZ0RSWmd6Q1VOMkdja3lnZzFIZGUrb3MrNXJrOUN1dVJqU1BVMFYrbkZ0UG5wQ2MyeGRDVis3NEhOZHlpdnJTektDSTVqeDNPQ1E5dnpsSjVQOFBTWTlibk8zWUtPdFlNbGRMTmpUaUxHU0ljWElKckNZL0Z3T3B6VlRWeFFTbjBybllkYUExNkMvOXlYVXYvOEdoZmtMbVZmOVpITWF3WEVYeTNFTWdKUEsxUnhJYThLeUdIdzJwenI1c0ZwUzFDNm9hM3BnQ1F6WVcxbE5lNXJLWWhLSnBSdVk3TVA4OVV3WEFBK25TNWF2ZEFZTkREK2x6RkFIb2lOV0g1aDNrNnpaK29NVWZsenlTYk93UkNOUkRKVzVrNnp5V0pUU0RVK0NHQ3hBa3ZpMjJnZjFSc0NmbEM4cWVoWHV5MEpqZGRhRjRrYktoRzhxdnEvZ09HYXhJUUpYbnJ1QTNSVXNZU05sM09XWktRVzEycHkwbDNMNmdmdjZQbDNHWUp6ZUNMVSt4bkh1RlNIaU9LNThFVmJoMlJXNXhhdzgxVXgyUXM4N2ozQTc5VDdDb09vUDkvNWZUZmgzUTluVzRvNmtMeG13L1ovYnRuTlBPYTZkOG14RUN2YnVhVWIwWWw1SEJUYkw2RWF5akJLd2JkQnlFaGNRL0hWZ0YvQ1NSb2NGZnpKTStHUVJKcnp2T3ZXaHpWak0rYzdIV1lZb2l3ZmZxbHJJS2c2aituL05weWVhbEZSZTFLeWQ5Zk9hbmlqSjhvZDdNRzZYVm9CR1RDbnQvYTVNaU00NmE3M0tqTlN5L1VOT0hRaDltWWlDUFVPZXI2UjVieXZQYncwUXJRUzRSR2wxOXNQd0EvWlR4U0puMGcydW8zY1ZuVkV4VUxPNHJiK0s4a1pOViszaGJkbG1jYVJuajlEcU1xeFovRUN5N0NsOG9OQitSQUpkOU0zM0ZOMGxTMGN3K1piRUIySzRENzJqbDZESlo1UjdTWlNzZU13YUhsbG51cTRQQWZTclEwclRGTTd5SW00VkZWcW9wMjZGZGh6Q0dzMmp4YkNsN1hoOWIzN0ZSY2VmTWY4YVdRVHlNTU1aVzVCOU54NGF3bFZKTGJkVllIUFhmYUdQL2VjMXVjTloyazl1RHlrUzN0cU9TOWdVaEl2MTM5UlVQaEovQ0NHZ2J4V25lYlZwVzZjL2htNlNVS2RkTEszdnBhQThjNUJMU2wrREEyOExHNHNldzVtOHRSVFExczRMNVlWWlRYd2hqK0NXK25yUnMvaENrWnMrN3hISkNWeVBYY3VTTGZwdHBNSUtDNHVGMVJQVzA5eEJxZ0xtQUZ3aDA2bkR4ZVhrcmFwZUhzMVFiRk5IQTd0WXV6L1pxN3pwUWc3N3ZYMjZMaURLYi9SUjN6UEJyd0pVV0ZEb3E5S3BURlZFQWd3WjhFUkgzSjMxd1ZFZ2l2YlRwV3ExZWtHeUtNOS9zTlJGL3l2c1JXR3ZIdkUvalozczM0N0ttRUR4RWVUTVFZUzZMRzhXWkRrdGRPQVRHWEovRTNxUWhXQWlENTJVc215eEtDSVhTOFhPdEVrWWp0S3R0RWhkYWU2cmVuaXNxbi9pMC9LZTNQeG9ZK1YvcWVsL1hrOW9qMmFKdDBnN3JEblloN2kzWVZobE10UHUycjlOUFR2Qmg2VWoyN2ZYa0FjODdmZzNzSzZwWjZpN1RreUl5SWgvY3ZPNVFNSENOZmVWWHI0d1JaS0sxNTk5aXF2K1NZMDNWSkRpdEg5Ui9PWW1JNlMweUtQZlJpSXZTVDVJN2lvTEZOTnZFLzJaaU4zWDZ4MUtiblkxN3BOemV1R2NUb2dLeTRFdGIzNm1KTXNZeHZqY0FFNmlIaHN5Z3BWclVkVnlxWkUzOS93MEdiSWZ3bkxIQ2dzbUZCbE14VGtEUzRkaGEzM0NDbUtNcDB1em1xZGxBdkVqeWdNcGRMYkxsVFZTNTFrVXNoczRpWWozREdtTThnaHc5NXNSdWJFa3ZETXdPQjVFYzB5blJ1Skl0dm05UzVPODBXclVTTmJHSTBVRFZ5SlNORS9GWlJKMnJXcWFDUmJ5OW00a1FjRUNTL3l4UUQxTithaXZFR1BuNTJzK1dhdnFXdHI1TDJYMnFQN0xQS0VJb21TOVYxdW91ZDZGT3lHa01HY0hiZk5WcHJaTDk3RGVvMVJ0R3NrYWFSSzFoenQ3MC8wNXRVM2dFTXltRjVXQXlzdGtmM09HZ0ZGcUtKek1CMHB5eWRQQVZsR0M4dzJoYnJiRTlVSGxjM1dCV2lXMnUwblJzY3l1bzcrVytWR2ZHd28xUmlPUGJ4bzBQMG1oUm9oU29PNlpvbzJRUTZvUnRPRmFLMzJqMnZhV0Z5eEhBallCeFJXa003YndjcEJpbjdiZHk3aTRxUXZTZVJUZUowSjdIOEoyWVBXdEFhVHBFVEE5RlY5blVxbVp1UW51M004bDdIR3ZKV3N3WGdJbWFnZjRTWUdRNXI2SXVXUE0xTkNjTk9DSmJRRFR2OGdUNTNWRTNRSVdHRGZ0VlVhRnNjaTBwa29LSXE5N2JlVXBZeHhHK1RjZjc1azBFUENQbi92My9YeVh1SG1ENlYwOGsyZG1aWDRhbW9UL0dyWGJnd2hBVUh5elUwbEtkbi9HcGZMUFczcHhDb29yenlSUVFKdUxUQ2dSWWRlYmhBY3RaMHUzV0sweUJETE1EMm92aVhWb2xHYlFGZ0FvM3dseUVtaWJjakpxQTl3cmJReWVRa2ptVXk1VFh1T2RxaklSV3hGSDFraS8rZmNxZ0tPaFllZFdVRFNKanFxVDYxTnhmWldsNURqUXlhOGlOMGZWVnl1cldCRmp0cGV5MGw3dHIycnhVQXgxRGlaNjIwUEtDOHRnNjFCVG1Cd0R5YWhFT2h3UDR6Y0tkVGRoVDlGQVNla2dDMEorcUlwMnpLeTZ1bGd3bHpCVzBSMVdTcmZQNFNmc0J2ZGt2Z09YVUd3SEo5MUMwd2dpRldrZW5Fd1pobFcySVB2Z3RjRGY0Y3MrSnBSSjJXQzVGQ2NyRjZVUUYyMVFEbWFhciszaktkMmlVWnZjc0Z4L2c5UDFSRHNVU3E2ZTYwZlphMHFSOGdqTmhZTm1CQTlCNUhLMG9YdU5tM1h5dTNaNE1qc1BucTFKT1pwR2czUVZWSnpYTnBSRzBaYU5BUEZJMUNmdTNNQ0Z4TVdTVGFQSS9FK3JFZ211WHNmU0pzek9HbEdIelBqR3pGU1FEdCtzbHMxNU9PR1hvZG1xcy9VSEo3ZE1CU2dKZFgyZW1MbWJSNG9KTjBHT3IzeG9zdVBvZE56bUt1eFBoV2FxNDc3MUZsSGcrbHRQU0RVL3RETTBTcHBrSEh1UG91NkZNZFFYNW40U0RQVVpaV2VIWHN6bGx6QWNrM0YwY2I1ajhHak83WmZGL3ExL01oNytBcHNvNnlJNXArVkFqUEFURjJESmNkYjV0Kzd5N1NQTk80U0pDUG5DQmcxNFRrUVhVVE5Lcnk3THhNQ1RiZUY5SFY1OThVNDJ0OGRraU1keHJncXl3UmZ5U01zdWpFZ0dOWm9yWjRUQ2V5Y0ZBKzZkNVF4WHpiOHliU3UyY01CekFXRUlPTUsvNC83a2FXeHBoNTk4eGY5MmpjK2FsQnBnbDhTaXFqS0JxZXdxd0VaRS9ucThucmh5QllSaGRJUnFrZTFOOVI1bDc3NGY5S01YZjBaam0xNEZDdkVQTmFqU0NPaDhnL2ZjbHFhZHFKY1dJb3Zya1VKN1hMQjQ2d0IzcVIreXNPK1k0M21lMjJGNDRHd2FoQnZTYWppWlBEWE93ZGl4N3MyN085RlovMzNEcng2S0ZsZUIxcWhPMUVXNThzSXc3NFB1RVd4NTFuZ2ZYeUNHQ1NIU0duNlVhWHduOGdabGNOc2xjQUdHZW5hQUpvSHg1OWtMeG5jNDdaUnVNQTRJTitVeUVjMXlUN1FPY3hxKzZOSXNmblRzLzFXTEswWUpIYVdzUzdheFBVRndYVCs2MCtwMGJDWlVJYUJBV2h5RVRjTWthQkNDMStHK3dvTHRJSXRJZmtSK2M0bmRyeEc5WUJ6SFpIQTFJWitxMmRhdDFGa1dHOFdrMXR2bTRMV09PY21XZWloS1d2MW94N1pRaHFnWTUwN21uY1JrNEo4NGd2RkViTEhoZFFFbVNYNlA1RmZjVU9JeEVDYllWNFh3dVJPVG5zMDdwdFZ4SXI3UkpQcTRrUTB3OG1OekZ4b1BTOGZlKzVabUhaamhIdkVxYk9XN3VTdG0vQmdGVFRSUXgvN3NkWEJUWWdlclpFVzRRejhLdWZLV0tmRnlUR1h1cU5pT0UwN2hJYUhNWXhvelJsR2lvZEpnVS94ZjUraHpVcGV5eE1BRkEraFZKUTU3ak5LdE5VZ1NJemduV0xPaFNLRVBic2F0YTBoUDBQYktKeXRmWU5GMHBocWx4d0owaThnb1lmR3BnNlRzeGRHR0t2WVBJMVhtTXkwYkRjQTVuTkxMeEQxc0VHbENMNDZ0SWZWajh2MkpNWkwyc0F3VklRUXprWEkxTDBsaHdyTlppeVdHNVBGWU5jVnJtN1h4aXhBWnVha1kwMUpQYjhLMmZLWnlrUnNQU05icTNDK0FIdVpJWElENXkycUpySnVkcVdqQWVYekZnRUtrZnA4Yy9uOUJ2VWxJKzBEVWxqM0FiYm5ROHpJdU9SMzRhK2Foam1QTVZTdXhIMEdMeXRjUkNodkErNkJKR05HV29WNFVtTVNqUTdZcWNlbkJKWFZUdTQ2T0ZrYlJaOTIrMEhSY1RjZSthS0VBSkkwSy9ycDFXczNvWCtpRTdKdm1ZTEZIRVRyQ2NTNGM2M3JkUXlUaHV0V3FEWGsvNFBnT05iSW1NWkRvL3ErM0JoK2RZb3czaU5PZFM5NXQ4V05IOWtXVlBtSytyR0xBVVUzZnNUR050OHgwOXM2ZURpNzQ4Mjc1RWN1ZzBKaTJXa2ZtMHdvdy9zNW4zOHd3eitvQ0tmRzBWc1ErOGp2VnNYQ2JiNll5aXhGK0UyaG9BZ005NUNoWk5FSU9mcnBrY2t1aFpTYThZTU1NMTd0aWlGVHJYQVJYMjFSb3g4aUNqSTFUaU5xaHYySEVRelpqY05jWEV3MEcvaHFmS2FsTGJxU0ZCY0NBakhocW1IUTFmclRVZkMwNExFbjNLZlRjdjRobUFuTzBLT0dMaWlqdjhNQWJISlMwK1loU1REM05KWllOc1dhTjBmTVJtZUIyQWU4NlFPc2hITFVDTldzN000eUdzUDl4MlptQmVxeGxoaWMvSk83V2liS2Y4TjhmYTN6dkZqQm9JNEZuUTl5QytLSHhCNTQzNndpNS9EcTlFbkM4M2ZwU0FBMndET0R1RUxZTDR1a1RsNGkvWUcyWXl1eU02aDB1cllTVUtGcDV4djJSRXFCWFp1ZmtIZFhGMytWejY0anZhUHdtekhoczlRZURoSWl4b21idHpQZTI2NUp2SGVWcmFTNFk5cUZVQndDbGtqNU9FbWxhek5yKzhUa1lPczFKUTJYTnZxNzg2MUt6T3Y5R1ByeGQwWEt5R1JvdTJ4K2l3NzJYcTBzUmhhY2RtaEhpbWNoQXhDTjc5Rmo3dHdmNWt4OGxKUkJKeDFZbU5vbHV0ckcrY0EvcVlPT1BwbDJVaFdiWnIzZUh3SW1qbVJHejdQeXFibkZCVUVCcE45UXptWVh3U3Q2WFhZQkx2TGJsVmZ5U3EzdnVuNmJqdkJyVUxONVMvT2N5Wk9NTlp2ZTMvMC9lZ3JLN0pVYVZmcHZHWlRqcEhOMFc0NWpmVzdoVEpCbmt1Mk5YRzhlRGxvSlBHVVdmS2dxWitpV0xQVi9YKytEcnJJSytVTDRUQ3c2c1NJNXV5cDBSY0JXWVdjQUlJREFwTHFkeUdET20wcFR3bWd0bmZnYlpZaUJ3T0lTUmNjTlRGVGVEM0t3bDNXOWRYTCt3UFNaOUdrU0FvWUJNQ1lpTlRGWVdVdFFtZVVIYXEwNzdSbkJCeU56endXTWNic0QwSnZMREt5c2FSR2IzNXRCUXpFQ2FMZG45bkR4U3MwZ3NXc1VTWDhLUUFYbGE5c1ZEb0x0QXp3VllWcDgwb3UrdTFObHc5Vk9Hc2ZvQ09Zb3c1azNHbkVtRVU0Tk11RjJVV09YK05mOTVYcUUxRmlVRTZBZTMreHBVU0FWbjJCRHAxRUdJV09XaS9QTjNhcmNsY1JZUkdZZkYrUzBiQ2c0N2tncWs3enpvM0hPL2ZNNjlEbXZ3WEZhMmlKNTNrcTFwUU5LYmlVdCtpbFV2ZXFPK1JHZ3RGM2xKK0V5S1FZMG1qKzRZRHRDWWo0empGMGwrNHFNZHgxVVVieVR3SE5SaEhSeThnd2xqNXJ1RGRKNkcvc0thMTY1Zk1ZbW1NTXhNR0xJTVRleGsvaC8rV2ZhdHJMV3Zrc1lQWVN4bytPclZMdGQzVFBwcEJHd0hFb1J6ME4rRXpNWmtDZkdmV2NRKzdlWis5ZFJLeFAza0ZkZDlxbGNaRlZHbDVFNFIvVThFZzQxMEFoSlNLVCtZSWpQWFFYN0liV2FMcmdPRVZoNzlOYmd1MWsyNEkrMWNVemFsL1F4SXVMQmd3czU0YVNJN3ltc2pkVTdxcUVjalVMMmM0aDUwWlZreDBOdGtIVURTVVltMkZjcFJZM2pjSEx6bk5QTHFvY0pQbWV3NkQ5blRnWGs4NG9ReXR5SDhFcCtHNVZ1b25hZStnVTB5ZjRzSDI2bk9hN1RhVlZKZlpjcmFsODE5MkpaOWxMVndkRjlHNVlhZUM4WVBubjFCM3V0QWZuK0M5WmY0Mnh5dVF2VFc3RTZiSTBYSGRvQ3JBWlJRTDd2aUdsYXdIMnU4T00vbXVwa3owV3pXQWw2clVrZWhwczAxZGJmVVdybnJWTHRNVTFIWWlGRWJHUDFNejhXMDBwQUxUZlhtSDZzakljRlJzaVJLM3FVRmxONGlpUUlrVktvUk5WcXVEbXpQNzl5N1d0L2llK015WWttWEpsdUg0Z3FOK2ZNR2lLdDI5WjJQVG04K0lRQnBRd2k1bk9JZXV1blE0dDJoaHN0YUwrcUduc1NEMjdGVmtMTTY2YmkvMzgreWFLOTRaMmhUUStaRWhuazFld1A0WTNrYzFJUUJVbXNZSXZvUzJ5UzZUWU42bkFJWmloL3FUb0l1ekF0OGpFVE0xY3QrM2hEWm5KU1ZUanhySnI4dFVranNaUzkzTzlFL0xYMmViTm5oeXdXMVVKdHhTYnhFNUFrQVhMQ0VYVkgzbU5KYnp4K2VmTkxYWi9YNXMxVjdpTWhlQUlVamp2YXlOT21nckt0aHpEU0xYdTlVTUhQRDlOcUNlVUpJYy9FVm5qR05QeTBrOWlxZXc5cDRwVFVhU1dHcTdaK0FtQlZhMnFkM2dwZTNrMU9PRXI5TEw3TlNkNGExemNXMC8wdmdEZ0JhLzFGdU9EK21JMmY1MFdLWWdtZ2F6L3ltNG1KTVVxNDVMMnQ5dCtQS1ZhQ0Y1UXBWeFBlV2J3elB6YS9ibzVGU0xuYkhqU0FMUDl3U1g4OGg1WmNERTRaSG5jRUE5bmRxSTdWemNNM2ExcTA5UHBORmVvQjludUlaUGV1Z25IeVVWT0M3MnBiR3pzYVI0TjRBeUhjZGxUYk5ZRzIrZWxtWUNKcW81YlltYW9wT3RDb2tPYzg3MU5va2RwcWp1ZzZDY2g2dzhEZEVjN3FjV0Z6M3ZCNkxIMDNpbEdnSHI4Z3RpazR4Mk1PZ0Z5L3ozYi85dndEdjNlZGxremR5NE1oWWdGazlZcGZTQ21YSzdFY0szTmZ0bFBYRzg1YWZNT25BUDc3UGZXdVBXRlpqM055VVFuK1UrTVVnWElKb1U3OVVWMkdQYzRiTWNxaTdKWk90QmdQbXJ5SCtJUDJCL3ZERVpvNkJCNk8rYjBtUzQxdHVWOGluYURwRmY4bjh5OVovTFpBSWtWN2tNc3pJN1AzbFhvUG5wVFRmK0NVaUxMNld5d1N1TmN6VUxYdlZIV0NYb2J4SU9wdEtXTkgxZXlCZ0hNd2VCTTlhWnl3RGp5aHp0YWJuZlIreHgvSExuVkd4cnhTSVdQYTFjZ1RpWHFPZDhyOUNkUnJFaGdrKytxZVlnVitkQzVveDdkaXBKVFNKQXlBSWsrUXloMVo1QURuSklubDY0QjREVUtKSFVHL2loODNPTFkvbk8yVTI1YUhXZzBiMCtOTDREb0VKMjRNd0o1Q0JQd2g4bEQvUXVQelA0TG1QdEJwRWVJenFoZWpUdDFBamZLRmpvQ1JkbWhpQzNINCtBbE1RMkhkUVZyVEJqREJGcmQvWFd2czZHL2J3V1B6aWVOeGpOWktwS1ZkZUpKQUVWL25hNHBYNXlEK0dzRHp3RG1QK1VmWlRDb0tkZlJhN0R3V25FNDdSbXdiejdmUFl6aGZYU05vTndRd0RVN0NrRDZiNjh2OHJpYUE3cEdSUWYwTFFsOTlpRWVKUzRENk5Eb1d4QUJQQ3lrdEtNMlozeW1od3NWYURlWWt2d1pMeHNMeXdBQkYvKzJuK3Z0VnFRYXVuNEl1MUtHSGVmR2xnT1BSRlZ1bS80QVFzL2FwT0FnMFZMZFhacDJydzR4SE1teDlNeXZTWEhtMURRWXg4WWcrRnVQOE1lNFloTTR5SzlicGFUTWZwV3MzNjBVdHVscHhIT2dTL3grR3RIWkdnTWJqSXQ5Z0tPWnNkZjk2Y2s2N3VWYjVleWZHamd2SU9VdDgwanNhSFdERnJFQXpsQXdXa2NsYWNkRklLZUxHR1JGdUlKV1lxNGFwYWQvb2RFb1k4TVpRSEdycitLT3o2K01hMUI5b3lWNW0zaDNua3BvVDI0UkM3ZUlVSHBITzBpR2h1bzFPYzhNcUloYkVEOEFJbVNoL3p6NjFPMHU3U1ZXbmxXbXdnaEJ4N2J2eVBRZGl4L2txWDBlTGdvZnorTnJCbVZoVk0yZFpLN2VUQWx1T0xxZWt2cU5UZ0VMUi9wTnJNL3hhb2xMaWZ3MGFQRkRZMDBaZThyaDVYaldmTFhGZGFvNkdEbEoybjVsRmxpb3JrQUo4U0cvM1FubCt6Y0JlOTBDWnFlMUFIMVIxNDIxbEt4YVNHZW8yTUo4WDgrZWlxRWsxNDUwemk5UnlnWlAxSi9rV3NGZGtNRS9FTzBUV2JyODlSZ3BrbVlzRDd0ZWV5NXczSjlTeDZtOVdmdWN3V1Q1M0w0NVJUWnpQS3QrOS9SZ0FLM1dLeHZhV1p5RXU5M1g0ZXF1aUtCYm11dGY3KzQydVRYdGE4dUdMN1FvbVV4WXFRMDVxcTg1YnY1S2xJbS9WNTB4SzI0THlFaEptR2o0M2VTNWdSb1lrQWZFbXp3eDkvMGpUT0ZCT3VvZHJxUnNMT1U3TURPcER6Z29CdHU2QzRVZ2tYM2pHMzIvS3RGdkpka091RlNqZGdhSVNYVXNNUU8zbnZ3ODhwdzUyMTh3dUFqWThOdE44MmxYUTF1Qjh3YWtQZlhnN2VJdDJVSjhmK2JZOUY2a2FxZmVUL2Y5YWprTDZTU1dDWFAvQjFKNUpNQkQzNDJNOFhjTG1SeXloNHU4dGppZVJidC9QSkhVMEZqSngwbzJySnBOKzJGdWJERGFrL01RV2w3MTVWRHNuc0txanNTTStob0VIZHJlR0ExK2hCZ1lrMmsyUFZYRzhwSFVDejQzcHhaR3VjaTMzaU9HMng4NzFwQ252SGI3TGpwbUZRQkN2V1h5Y0xaREJJMTB5S2s2b09iL2pqUXkwT3ptM3RWVDlwNGJFc3VEV3JCN2VQQkhYUjVJa0VtenJrRjR6RlhuTENXOXVDMW85ZmxsczJ6QlJsTDNwMmlzNDU5Nk5YdjdKdWtxN3o3WDBleTdOSjlpRGtXaXNSWFpZUUtDOG15SmtzZFU0N01EVE5MT0I4VE9EMHlvZzR5eFFkMkN1clhsVUE2ajRQREtIZ29wZVgyWHppTXp5aVQxT1Nib2lKWmZQUFA0RlhxOTg1TXFyZElOajVQZzY4TmlWRENVcmpzRitBQ29yNk5rNTRGYzcxcDEvL0FOT3F5R1Y2cVlGS0I4Nk1BbE9ITk9zUnRMZGt2dll5aE5XZGQrcGY2ejVReWVESDZXR2Y2d3Jka2dNaWlLRG54cjFFRDM3ajdqL0RuNlZIaUxVTythY3psSUp1MWpYaU05QnY2Q0IzenZQUFdqbGtVZDlBNnplUXBlNVlHMUh5R252WnE4Sy9UWGcwN1RNOUhxbEU0TjR6emRxdHdhZHl3dlJMeGlua2ZseEJkZFBvQjlDazhwdENKN3pzUjhhZEliR3JJWjZpM1ZOUklIaG81cm1maGdXVVMrVzg5S2pPNEROWHZNM2FxTU1nU3JxOHBKUDByUEgvSk85SDQyMEtCZ3lBMGNkSWJkTU5yWWt2bTZiVnJJUzY4d1AxTGN6NWx2U3A5djhHUVc3eExOQnh4eVovRzZBRVVrdVc3VDFuZG1kMXB0V2RQejZteTdIVlZIR0YvMlZOcVpTbWRUcXpyTkRxMkVIYnUwZ2VEdytJM0xzdkFHeWJxUzBkY0pzZENnMit4TXk1UGtreGJCL01Zd3Vldk9sUFRNOFQ0RGpQWm5DZmk0SEdCbTNiSDJjWUhRZHR2RzBmNWpXMERmREcrWkVJZDdVRC9vTCs1eUowKytib3hES2JMN1RNbm9la0crV0FkS0lWWUxrQjNaK3JUeUJmYnBscjJycnBxTW1kM0RvdkpMeGJMSnEvL1BCZERMeDZaOFVDSG44S1RLWTY2dkRvenlvd3JzZldEZWh3SE1qOTFmSmdJSGJYMFhKNHgwa2QvV0pjd2djQXdCZ29GMjRYbzJBc01NL0U3VEhQVTh3TU1BaWNwQVJvamd3WGxiU2M2UzAxVlVCUjU4L2NQQmVSUXFoUGhqczFkMi9MU0RqT1ltTm9PVEMybWJONk9YTWNxVmRXdUFiTWs5enVveVl1QmNkM3pmZFcwbzNtYWNUTnJoT0JSR3ErRjJPenB0L1lMWERCaUl1OTVzVHhOK3p3UVl4YmtIVk1kdDhuekh2OTViMW4vSHdRTEVMd2psWU5NSkF0WkQ0Q0JKYmpsMFpvTk5nZW5LUmZ3Y1dxM3hvRUxUMGVSYUpJWTYzdW9CZFE5SW8zUER0ODl3ekdvNVUvYjlOQy9ya1BpSFdaMysxRXVmb2tybWRSU2xXTHpJaVEwV2cwbktGcTZEb1VaSEI1dG9NLytPcldvODFqMzdnczk3V0l4WGdzQkV4cXVFZ0ZkMk5MWEJIZ1h0eDExT1ZWejVGRGFpVExnMkxtVDcvS2ZWVHdVNVV5S0lKc09vaHl4U0ZnSXVXMkxVR0xudElJQmdoWmo1WWRjckluS201SFVsbDBUbFpKbTVNZjBrd0hUR3Fyenpub1FMeVV6bnpGTk1GREdHQnpNbmxaWVdmb1FsRjhRcmMrWXFYSlhQMjJaNEgxYWExL2ErVlpMSUVZWEdDaVlYTit4eUFmWHFJZzZBREx1aUE2Z2FncFVMOWdQdEtLVnBqb2E1cmIvY3RvTUVUb3BIME5maHU5L29zbHZPUkkybCtmWFBNSUVwenFDajhieUhFN0VKYTBaYlNwekdSSVEraXJidzUyMTgwbnRZWnFpOS9ZcVBMMisyU0VrcFhqRitnaHZNVXlCOVV4d1p2dzRWcDJWTWhiUFA5eWRESFZ5Q0VsWjdTNTJPSDlxN0lWYVBYZkprUk1aQmxjT3N5NlNVUDg5TVBNTlRJVlFZN0ROM01KYmN4OUV1TER2TEZqZTdheHZsL1lMc3g3dWRlcXNYTk1HWFcveTNXc1doTzR0TWNCL2Y4dThRT3VUcXIrVEZxY2FoYXU2NnUzR1JDak5na3EyNUVQQ3ByZWxjaWFtQUV1Ulg5MFNuc0dUUCtGN0MyUG5YWHZrcTdxTG1ycmZpay94MERKL3hxenVZUktxbWpTZm5TRk9GSDJrU1BNQ3ZZOERyeXlYTW1pcnMxMy91V0I1WHhxYXh6dHV3eURjMy9aTitKRzRYNFR2b2tla1lZaVY5NGs5K3NYWUtHWFBjZ05jVEp1Y3R2WE9Eam45dUdNOVZKa0hNSUxLeEFqbzAxZ1RUbXNEWmxlWmpMb1h2SjIxTHEzbGx3ZWJUbWxaWjh5YUNxNG1RY3RUaVFwazRJcmxaSXBvQ3FmdWF2TkZ0dWN0TWNZcGlybUpicHlrOWZOdWdkK2RHT2lNVnRQVHpLM0FCKzQ5RUNDcDg0M2ZkNkxIei8wOUp4cVlJZHlmVVlXMENPZGF5M2ZaKzVxMVpabzIxQXp2N1AvTDdyTHljZGpvMW0wd3plbkpNN21sYUp0NUJldFRVb3Jya3E4U242aFhwa1c0YVEvWjkycWMxTG5MRE02RHB2eVk5aVJudWNMcDhZZUJmWTNDMzFmb2lIbGRkRzVDL093c3dKMU9HcWxxbWFpWFUxclVNdU5NcTliVS91dFIxSXVyTlVQWExUdHQzWXU0VXFxb1NOQXZGY3MxQUdjYlMraUtpOHo1UTYyVk9QdUs2L1VPVWlvK2tlbEowcFUwbVczSm4rWWZWaEJTQ0x2S2RtMjZqZC80eGk3SWdMTXM2b0NaRmJWWGxwTzBvdDYxK3lrWEhZeHpsVnlxYWFlRnlDVzlNdXZJY2oyOFFjRm1GbG9yb0drWHBSQTVab1oxM01PbUdKNktIT3NNUWduT1BkZGc2c29JNnlJekZ0eXlQS3NON2drOGlKQmVWZ0hkcXd2ZWVzWlh0a05FSkN3Rk5vcThSQy9kRFJpM0hqaEdubEJtSjdKMkw5bmYxTEp2eHBSWXRJdHZSREFQd2ovV0R5eGdKT2o4aWxweTVYZ0NpRHhqWUFjYlEyYkphckdTVldjUDFhbmE5c3F1dWZtYzhaTGZMZ08rbWorKytYclJKaytscU5xS1FmYThuMzQvVEpEZFd3ck1iMExFN084c1BYZTB1WDYvMkc5VjMrY1VBTi9aK0hnUjJjckVxVnh6Z3Y0dWY5ZTF5T3dLTW12azdKUzBCUmNjdHpmQVp3Z2Ivek9JbHl4akZHME5DK29lMG9YWnN3dWkyRVoxVXdnQ3VHK1dYVFdHZUNYdVJIdVVoRERYRE1Falp2RWJRdHREU0NwS1k1TzQ5NDYvYXRlc0xGS1pIenh2ODZ2dHdIaURnZTBHZ1pLRHNORmtrd2pITnRBQlBGRzN6bm55UlduMnlrUjkvNGs2NWxORWR4SFYxT1NRQXkrV2FyL0NsZXQ0Y0FEc0FGTHMvOEJxTWtpRmM1ZGhJcThFUzd2aVA4bEZGVFNVcHhHMzhTZXV1dEFmVk54R3FDTEVHRzNjOHdub1JCdFRybGUzV3hiUW1LSnljMitGY3l6SzFjbC9PanhCcndqU0o2YS80RUF2cHZCYnVsQ0xTalVETUJNaU1haEZXWmw0OVl4b25OSThrcWpxTWJiN1VtSEcwRDJsQjd5TGVlWmZZUVpSMFNXSXlUeldkazdRNEloaU1lN1VLazd6QWN6cTcyOEx6OGhyc2VhS25sVmxvanlxK3R2cHQ5UmwwMzcyU1hUYko0RWpCWXRWOUJDa2NGRVRqeHNORE5zQzNGcHFra1RQVEttNmtKay9zOFBJOG9wQmRZRlcwNUpFOE9MNEthaEFtR25hMGQyNkNwdENCeFFBdm8vVE9HUE4zbEdGMjZGOXBHVzlidEtsZTZ1S0hJRVFLNG5LYk94ZWRkcUk2RVRBbmJEUTl0K1RPZ1RJQ0Q0UGZDMUpwRnppSVBQM0Nta3BnK2xUWTlURkdXbld0Zm1UcnVYTDFBamdVN3dvQ09pMHVKRjc2blNmQjVEb0lLMnNJVkF5cG14d3dsSkswWTZQdkRkYUlaU29LdWZWOTgydGk0NnEzZkFnMkZZZXRtN2NWRW9ROXJtMmpHUE03cGVJRUlNaVZKeXlWUFpmK1RWbjRDa3lBNUVDZE1RRG5vay9OSGY0dGZCMzZnd0ZOMGYxRXAyYmNNYWplbUN6SzlvN254dWdTZGJEMWtKVFhodWYzNUJHZW1pWFg0WjlxblJscHA0K3JOUzFJQ1lzZlpaRWpXODg4aWF6aWVjSGFpcEw4T0taazJVbWI0djgwU1hyQkZWNjY2REgya2NEb1l4ZWZKZE1oVXp1MTdXWUZmZ2swRllaWi9jSkxCOS93bTRjazhSVExhS09ReUNsMWpsOXNmOUpPUzNTQ1l5VytOYUZSZXFVMzJQaFNvRXpRZmpPcmYyTURJb2RLcDhwM1dFeW1UQVB1Mnd6YU05Rk5zcjROYUJmU3pBcDY3RWNjSU4vdnh2RnhoakVGUkJkbUNkaldKM2xQNjluOUlJRVhoVStHNjR1bFlZUlEyL0lDUFAzb1RQdERsRy91SFRKZUxmcU5XTzRFVWpGQmhna3p1SVFnM2JKanROakZ6SGF6bUQ2Sk42Q2ZLWitubjRIMStRRVhIeDllQ2F6anM4ZWFndEtPRnpYejBEbGZid3p5NWJMNjNMTjRQZjRCUE45ZjRVWXJ2cUJPWXMzbVNrVklPejlFbk9uSnFnT1cvQUdwS2ZWejY1WHphL210TUFHTUt6b01PbXZPcktCemNxelJSS3VOcGFnbE1IQ216bTdZbFo3RWlOWXlFT1RMYTkrUi9GWldDeUhYQ1o1U012V0JJcHhkTHErS0x5dEV4elo5OE16NTBpSjVQZHRVaUZIUFIrQmZjYTlEN2czZ1lXQW9ZaE11VnRQK0grTFZqT0hzL3dWVkhTbjR0SVNyeW9hU0J6MnBDcUN6MU11S0R3R1dSTFVnUEtldUtOeXV4Z09zMTY0TGpZYUxnRWlCY3lPL0wzV1ZQeElGSlNXeFlyMnBRTDVOeFlTVi9TZytvVTFrUU5lMzBNMlFLZE8wMldvTlYvT1F4ZDRwVlMwTWdLZTkreXNROTVueDdobkVGV2x2b3dYcFZTTzRsL1ZjTXhHSjI4MDU5aUtKdW96YXJEYU1EUFhnTnZoMzh0cjhoY2c2dEVia0FHUDdDK0crbnI5YlJKNS85ajRrRjJJYjFJdGhQWEZra21vT21zb2w5SGFON3I1WTV3eUJxZXlseUpIcVVZK1UwL0JSa3pMMmdpNUxka3pjTW1waGJoVmZ2YjdlTmNnS3ZqcW5KbjBId3UreFFiVHNIUWxPNFpOclhKZUtHRTM0MTdNdGptb25QR1BlL3JNTVh6RW9HRE0rSVJGODArY2Robm8yY0dMdXdLUUJSTk95VXU3MW1sbU5Jd3M2ZHdUTDZ2eDlvd2pKZmFGcEVhL3p5aSsxNFNhU2JVUXRnOUdIYXJRN0NabU91VjFwNklraU8yYUM5VVUzMVpMdkRxSE5DVjI3UkgyYVNURVlSZ3pUclE2WkVla0plaDk2NkVXR01IUWczcTlEbjQvT2JjUDJ0Q28yU01HTmJqcy9MdGhSNEpJTXhzTjJkNmxaRVpkUTlIdFJkcU9EWFp5SE03a3RXd0hUZHNVR2w2dGpNK1RNVmJMVlVoYnUrbFhsZTVHUTQvakN2WWxRN0hYNGx2bGZ1RVEwMDdIVjhkZ09KWU9CLzhjUkoxc2YxbSt3RFdqZTdFZXVCWlh5aDQvcE1KaVQxVWNQMHQySXBob1dpVjc5SnNCaWFkejNna2ZkVDFLR1BwNktRUTZJU2NzelRMTlJHdk9KWFQ5S1lIOStPNVUyODZSWVF5Y2FhTFZhRXhjbzJEWTRRTkJKbWJDa1c1djk0UFRSc3ZpVW9yd1Y3eTFtQjd3WG5qVGNTSVNSV3VETUQ4WU81dlNzUzJNK1BkRnVOY3FlZ0FpMDg1SkVoazFOSjIyQlRJVG41M3N5bUt6cFE3T2F0bVA4TTNDNDViblFMcVBMb0pvRnprTU8vNjBNRnR4c2t3WlN6dzlMRkFQbHJmT0RPeGJJR2N6aE1CRzVLd2tONTM0dDlranlTa3J6d0FLN2t5Tm16Z2VhMHh4ZlFQenVzNUswVGRoc291cTVCeUxJZHJKK2dnUDRub3Q2dGV3L0tDNmFlRmJuM1JtQ1h1dXpHRlY2QWVuOFBLZkp2Yzd5S2wrVU9UWGVpajZmM0VsMVpGNVd5M2dpSkt2UXhoaGVoUWlUREZNWjNtYnExb1Uzd1EvVUMwV1dzcXMvOTdkZ3VBZ0lDQWdJQ0E0VDc2UGdDbEpONFJBNHBxN1d3Y0pxcTR1OXF1eG9jd1dxazdsSVk4VG10UGM2MlEwZjFIcDE0Uit0QVc4QXdGRjdjZTM5ZWxsaVNSV2wydlVtaEZmRnEzMFZkV3B1czVaTXBUY25wTmNya0pwODNrNEY4alV2akdaZXlRQjJ6Z3pPWDZ0WEtWdEFIKzdqbTB6Ulg0UVN5ZGRLNHFjWUg5M3pyK0hpejgvTHQyVHZDUW55N2VhRlJmUnh1QnYzZVBFaUo3S0cyYnJDaDNiMUdObVFtcXJIdXB6cmh4Kzltdk04dXZQS0JyR2luaVIyQUJXKzU1bVYyQ0xYdkwrZU9uTXJRL2wwN2F5MkVLY3AzSldSbUJJWnZWbGVxWm5yVzZCRUJoazZwbHl4SFUzQ2Y3VXQ0NVREMTl1Sk9NVjc4N0Q1bkV5TjZ5OGNxRGN0dHVObnNGbEFhUitBK2ZSSytoTUpUL1dEclBtTHdzNlpud0JLNmdBenBnME9xMVZJVGNlVkJick45dnRUWDIvWWlmOE9zbSszN1JINjdWZitIcUVkOXYySS83L3R1UCtIYjVmYjBuMzJkZk1mT2c1L2g3c1g4UHRaTiszcksvaDlsamZaOWp4KzMwbzkrMzdNcjluMmhHL1oyNC90NkdmMmRaZjdDdmgvWjY5bjdmclFkK3JxSC9OK3RTL1o5ZzMrcjBVZStyNnVqOW4xM1cvVjEvWDFiMVgwK212OUo4NTFWQ2RXYmVjc1Y2RThyaUE3ZGVBbzZlcXFNTnozVDRIRjJ6SktuRXk5RmxJN1RCTkt1SXZlYVV1T2E5TDVaLzZNVEc5QS9sVlFXeHI2VXZWYkljekhISXNMei9SREZBbnVva3BpUjE0aENDK0t4M2hEWTRRdXM0bVVuNVRzU2xSRVdGNVo5aTFTejcwdThnbC9XYXBaU0gzc3dRajFsS1JUTjRkRCtXUEZWd1I4c0xucGw3bTBQaUgzNUViVTh6cytDVzd6TnI0ZUd3U25mNUtpVTdqUmt4anZkUmFyc3h3bU9pQzc1N01nMzVNTXM5aUhQNmZRUkptNFV3Q01YWEtIUGI2VHJIcUVBM2w3RG1LUHZLUmRROHM1N210VVorZ09YT28vUncvRFNkS0tsdFFJK3BxS0poNC9BdktzWHJveXVuRHAyd0RmRDB0M0tySGVza05wZEg0ak93UnRMYnBTbU1ESTIwZDB2MXRxc3EvbEdNRTRaRE5xcUcxY1pIVTU4dHBNOTZ0bkxOMWtTeFJxQmVJYm85WGlWa1c1N2R0Y2haRHplZzgyYi9XbGZZajI2S1lmdVg0dXFBckVDb1Q4Y1kvZ1kzQzNuT1E2YVUwTVpiZkVhb2V6c2NRWjlSajlVZ0REVHluOEJiOHdOL1hqcG9iaDVoOFBLRmdEQmFSZlJRZXBHMkFsYzJjNTNtaGJHNE9USDV3SkEwVDZZeEl2V3JONXlxaTliZXduTDRWdjRKYmpSRGFNck5FMzZIN3J0N0VUOFkvU1IvdEJRam1Td0lEcHRiaXV5V0I5ZHVTVTFiREVDOHRycUJ1ZWVQTDEzZ29kbEdHdmlYNmZQWlZXRzlaZjhpNVdKTFdBWHIwZHBwNkJMVDBBQ29JdDhPWUVJMGROWTg3YUEveklDaWFTVVlTMmozM3pDRmhtaTh5TkI2eXgrZU5TVHMvMW9HVU1WaHNsRUlCSytQV0U1dmxjd1d4bzJNMERWMDZ0NEdVcEhTaFF6UHhHanVpZGkxYW5nQUpUSVJnVVpsODlacUxzd2JxRjE1SjhtM2dVZW5OR00xNGNxMGd5eFQzV29PU3dYMDFQOVdXZys3cnhwNStCN1dKcG9mdWFKaXpoNUNmUGhzU1I3UTlzRHlJSDliZmxqemp4L3pTa0g5a2YzOGtvcTBsTmNGdkdpZzBFckFNNkY2VzYyZzg0RklScTJhVndtaFFzNlc0cEYyL21DeDBTZ2EzUzVLc2VXa1FTNjNxTFhYWkhyak9CRXBpWVFBeGtuYWV6a2hSeW5FMU0zcEtDUzVDWk5YblQzVnlZMWxZN3Z4aHpEcXRCSTFBVVNhVnNUa25kNU84VndyNmtzMERsdmJwNDE2YXlUVzlzU09TbXBSOE0xREo3QjJuZ2hlZWJWb2RodlN2QVdvM1Ruc1VwejNueEQvUTNwU1BXU0xMd1Z3MUt6czNVM0hJMkhsbENyajUvMWc5R0pJV1lkUWZCaUdlZ1pCVEZFc3FISy9NSjBGbzduOVJna0tXcmZXcW81VXA2UzdCTFVHc0E1WS9SZEdVRGJWT2tZRW5GZGJuL1ZTSnpJa3g1WHpKZkUxdTVyWmFWc3FiZ2FJYzNaVEg2OGVHdnpidmc2ZDdhbGdreWJiQVdzQ0ttTDc1UU4wS3NBK29ZTy9wMEpFbThxVFBVNWdZQ0xSZmhrcGlHaEtUUW1TdGExQm4vS29sNmpYb25wcUsvTmZzcXdlRFJEVmdFM2FlOFA0YkZ1TkJTWU9UUHBOdkxhUnpQMjNob2RPVEowZkhubDV3bVd6RXdzYk53SGc5UGcxZXdXM0FydDJEb3dZKzB2cThjSzlWR0NHcjZ2ajJlTXp1RHNWRTlyTmR1dEMrQUxrSzhLNks4cFN0MXVjazVUc3NjZFRzTW9YMEdtSjZIc2xHUUozV1NLZlJwNVFRV1MzT3BYNXNhSzZaR2pmRVkvczd2bENHSWgxK2Uzd01XRXluNUticGlVYXBOMi9hR1U2WEJOVmVoeFBUcytqRUhaL01QOFZqZTlFdldSNXhPNlBxR2ZmZU0rMVE4cE9KclNBTkNpbWw2VVFacHRRZFQ3ZFN0a1JUY0pZU2FwMWZkNFg5OGdZd0V1ekZ4WUlVcjhoSkJtTjR4d0xkeDJJaFJjbU9uTDg4RDQ3cUFkRzlsSTRIN1J0Skx4eElDSUgrVnk2blRyYTExL1dxSHJMWXVQRVdLZ0JiWjMyZkpzYVhQVDRreTF6d3ordkNCTy8ySUp4SkZ6YTB6ZnRtRzNQcnQ1Vm5IRXNINXVRWjJmWERNV09GdjkvVk5ZR25sYVpDM04wQXEyZi8zNDJFdzhSUEp6UHMzZVRoRGpneUVvMURpd0JXdENBMEFQRDZiRjlhS2xZZkZmcVNvUURQVkNqYjRWeno3ZHdyWVNObjBYbVBvSjZ1em80SHNwY0RFSVlwN245OU45RVpnVmtjR0docXNQOGJsTEdaR25pL1MzSVlUVUNrK1NQZmd4eS9IQ1lPalovR1RJZExLclJUVmNXZUxMc2FEdlB6dDZiU0tzQmZzaEZlSXlKalVVRzRObVAySDNUSFRHejk2aHBxaVlrZDIxdWFLZGZ5SGt3cFRRTGxxYUZFVFhRc1RaYnZYeHZSL1dqelk5b0t1S1NyQUd2YllCNEtPaHhqM1YzSkh0TjRJencxWDFnOEsrbms1bXpiUTRrOG83bDZtbkE1R0pheEFYcnVndTQ1VFF4T2lzRkU0bWFUUloyb09oR3Z3bjg2SGt3NENIditxZCtWc0NnRE43MEJ6d1Q2TXhSazZOaGtoS0xvYzNESVE2QUxURmFVRXNzL3pZamVZL2VnYmhzd01GSFB2V1ZsaFNpZVBtb2kySm8xWXJzL3lsYjNMNEdyVnliTWlMTmptZVZjemFUamVMR2kyNFV6cSs1SFV0SFBZM2RvYmFWbGpxT204elAyaitkQ3h2NFdNanV1TnZzbjNvY0lUV3VKUnNJTXdtYUUvY2dva2cxMTlMS3c5cVpBZDlod29IeUk4N3FhanIxRGI2ZnhFTWYwVWtwK2VDUkllWWswcjBHVTdQcW1rcldNSVk5N1VCRDlBSG0wbWNuZEFJejQvY3V6NFBCK3lmTXlEaWtiaS9mZ3NuYjAzTy9oclorMmRySHkrK2FyV1hUT1dWcDRvanY1ZkFGREh2Q2JaVFVETFZMLzBVZUVPcTZ3UUlhZVdNdnVrVXlXM0YyK3dHd1lPa2Y5NkFjRnNOOUovZG9TMnc1Y1NHODQ4S0JBMDcwbDJMcDJpSVZZeFkzN1ZHcHdhU2x3NnpmUlFKRnpYcGhoWkJ3OE9PZnJXQnRDajQ1VXdSSjNTTUoySWEvTldiQzU5TXFyM0pTam5jdytsUS9sN3g4a1R5Skx4dkQxU1k2RU9HMjFsVXNVUWlraVR4V3AxamRsS0l6SS9ZZElFUlQvcTlJamxuUU1uUXNpZFNtS0QzYWRDaFdUM21UeWFhQ1dyZjJmUmRvSkZuY3JnZHU5UnhMbkphTWVNcDJZVkVzWGZkbTlQQkRzaDdKT1RSOVdsOEFKemNQeSs0RnlZczI2VjdSWnkwRFYzNHFlTUhab1J4dktuT1VlMkNLUEs1enFFd0lzZVltS1FVVjJaRkVrT3dPN1hFT1FyVDZXaU5VMVU5U1JYM3M0a0drUGExaTRVSEpMT3BqYU1xZGVKYnhIZm9aY3gwSzlTL0NMUDZiV1hOYlQ3VEZ5MC96UzV0S0xpRlk0YTFOVHhNQXc0dnFRM0lWWVQzRkJGaU16Qi9UcVVKNElpVWFOQmtCb3JDd1ZQRWt6Zktyd0pvc2lwYnpweXo3RVJ3dXRtYXJWTGpoSkM3Z3AySW9uTGdSdHNqbFFZZUNLV3dqazBhNlBJRGUzVTZxQTZNV1RRZ2kxV3RscEIyaWJ5UmExRlYySE44TkhPTW9LMk5SQ0N4cGdpQncyUk5mNTF6YWhnaFk5UDlQT3d3SksyVGFwSU9FS1gySWVNck1DRFIwZW94M2o1S0thekVyMTFRNFBMMUpMYkNNektMOVIzKzZiMU56L3hqekREdTBTVENiUVpBTDE5NjZvb29Pd2lXeVR3bUtjNmpoRGYzVjJJN3ZVRnFvbTl4ZExQcmpNWGRrVW1zdDY4WDRuNVFIbmxmS1dwRFFlVlF6eFJvVFFxUWpIdTd1WG1xYkNmRXRzc0FvSVBjTXdzMmxMckk4ZUF1dUUyTWh4ZU1mUXlTazQ2dFJPTnUwM2Z1VTJjVTJTbTZ2NDBPUnhtanZGbG5WaDV0blBwV01vcDd4UWNWWGNWZjJ2Ynd4ZWovWTlZbytmbHNtZm5BWm1CTjk4UTQ3cDdpTmJnc3dhQ2FhQzBYYXdRSE5DZVpQUVFjTWZHdlkxRlJVaXh6TmliTExQU2Y1ZmZsWllNaGZrWW53UGIxbTVEenBEeVVtclF3bEpvZzR1aTBjdk45dU1JdzNNQVVSei9DVWUwc3QvMjZ3TlhRaVJaNEloSUVGd3I0ZkZKamFqa0RvQXJLd3c5NG1RN3FnL3lpbHFQQWVTeERnd3hhYnZOK2pqYUU4S0VJSFlTMGQ1dkI3VEg5OFpIK1N1L05mV3BGYjFtTENIZHdPdlhBQ29FV2poK0hodTVPd1E4Vi8zRDF5cnZLc2lqMG5QTnZvSGlRYTFNK1c4NzdBTTRBRnAyL2lMVXpHWjlVMmk2MUJWYXhCK2dhekhIeXpnb0xnall4M0lWTk8rNVhpM2owVGFyS0NvVTVENGE1UDdOWVBKZm9Udm4xQ3ppemZMdGNuOFJneGd6ZHErYS9QWVlQT3lCZjY0RjlNeG9nSFlEdUxJT2xSa2lZTTFSdityN0ZLekxrZGtTeURHbDRRd2ZmMkh3a08zbkh3ejNnOEhVQ3FqcVVqdkg4eTg0MisxNExKZW0xSmhhVVl3M0I1R2Q2d0NnNWZJbTl0VCtzMGZ6WmJYeGM2ajZSUUx6TW13RXJiNUtKb0hWczJodjNMNDREWmxMeVhLQlhXRmZ0M3paZUVKcGdMVmxTMzJ6dnYvcnFJNE1NMEhNMkNFTnV6SmZuSE9nK0xpWFJmQlM3MkYrUVYxREFFTkRaSFpXQmk4RndUY0JXSDN0MkdVaHY1NTVlcHlEZm4rWmxDK2dVbTB1dWQ0dzdmekZ5T3dKOEdKNno0RTdtSGNVNlhYZlJibkJTRjVmSGJUeGxnWnFhQk85Y0ZleDBndmNsNE9lb21ETldGNG5GaWZZbzJJUzBBaHpONmhNWWVmOXRMUzRhRUFNSmFVRFl4ZjRUdlZIc2s4V2ZhRGZwOW81blJ1OTl6WFkyalZ5UytPS1h4cUNEVVVuZDR1cVNCMTZqYXY2elUzTWJ1NUpna1czNFRLMHFhYXk1V1d5QWk1aU83WHVva0F3T1prV3g2WjJqd0xUeXZmVCtibnRiSnVqV3RvZGk4S1VVcTlNdys4MUN6SEIzMldqYks1UG5PK3JOVTNrNWgzSzZEVlJSeDFPWmRNVDhwOWZHSUl1MDU3eHUrT0cvaDY1RlBRa1hSTnBrbGRUaUVXMjhLSEJ6UitEeGlUYjczY0FYcEluQUZwZU1qaVZQam0xRW5yQzlnQm9OdWtzWmlBRWQwdGxTeDZHOHR2ZTNieDFUZFVRQlo5VXlzbVZIak14bkl0UlJkNy84S2hrbnpoWUNpU3pxZ0FtR204MGdUaXl4RVE3OHpmcUdxYTFnWjIrNkF1MFJqM200SWhsVlZ6MlU0TytjaTd4M2Z4NmZ5TjkrK0VtcFdZQTYxOUJ3NitJWC9aaVRYL0xYWDg1NVhwME5lTWVYdGYzdlJYVlMwd0FHUkt2M3pGWnZRa0wrak4rc2IyQ2FiZHlDeGI2TGIzUVZ3ZjZER3UwUkxUNSt4bkhOMzFpVjMyZUFEa1A0V3RtY1dDdWVhWW9Fc3BLS055MkxMN3E1R3ZXcGtFK2JicGxHQUJielp2bVdzNCtqNWxVWFF2SGVTZEFZWHZUeUI3NkhuTnFxZU53cGVGZW04NUxuYUFkalJUK1NINFhiYmRjL0ZnbVpVOTlVQUgrUzJtclREUU42cnI2WEZXN3g4bGdFU1pkWWt3dFd1WUhUQ1JWSGFSNFZpL3dQUUVYbkd5YnVhMng3S3Y5VGs5TG9PZTI3NWlUWHkyT2NpV3dzSXZQTS8zZkpFVVcvT0ZKU2orcG1saUxnQ0FURUJONEtESjVOTjN1UW50YzJuYlRIMXN4RUFkcTh1aW94b01yTDF3ZFdVdWF0L0FwS0JXdmR1dnJ6THV4YzRVZGhXbmhMZGdLSmpnWW5LbWs2T3lKWGVmNGwyaDFyektMSHk2cDJqY1c4dDhWWE8zR2RtU2YwUGdKbWVsa1NDQ1UxbzBtUlpSVm5zWWVZODRCb29wZnhiaEozaTB3Y0pRS0dlTEtVTzVhbjhSVEZRS3dESlVoL1p5aDlCRDQ2Y0M4dnZpQ2FIWmVuelpPTUxDY3pxelhOMW5ITGpUbUtSYzR2aUtYeWp4UGhpWGFyeTNMakk4MWwwUTRSTTQ3TVcrU3pvYVBuZldJKzY1aWsyUUlhNmRLbWFETUlkSVdHaU02TlllbktlYU5NMXNhbzZhYTQyK2JKRmcyeWFEL3owd1puL2JSczVUdWlvUWJBS25LdlVmUXB4cERCRGk5TkhrS3dQQk1WMHVmZkVralhjWXV3KzBFOWJ5dGhGNzFsOURrYnloOW1aOFhLclN3ckRyYlR6Ylltbk1ZeEZrQWxmK2Nva2hGZmhtc3JuSGx5c3VueHJxMlNOU01ad1B1UkVrVjYyWFhvNEF0RnVMVE5BTEphcnJ1SVNDdC9nMEk0ekNvemxtTjBIMEJDMDAySE5WRFh1ZStlMFoyeUJJdTdleUVtc2UyMVZiN3JkODJENkx3WlFGdVBDemE2Z3VSQ0NxRWp1cVVoK09xNjlGUHNmQXRCeDM1S1A4V2FnRzUrd0twbGtQTzB2S0MrdGZuOHlpdVlXVHEycllVUlZOQ1RhbDRtMFJQbkJMUnFncy84Z3kwZXlVUHR0V05NUkQ5Z2lTUmYvUkU5TUthcm14UmREZUdnNWcyTFdBQ29nVnFQZExyV3NUQ3NjVGQ3YnhCU24xeHBPZnVDQnl5QnRjTzhRUWEwTmcwU210QWh1Tk85cHpkRXBKb0pJWmxjWTc3UEtjL203WURONzVrNTl1aXhGbmtDa21wSEpDaUc3NnVwU0ZPaVB6WmpReE9LTWwxTUIxTzN1SEJBb3o1OXFKTkwwSFdNM2U0VWpIalNTVVhIVWZicFdPSTlaVjNBaHNITEk2a3dLRk5aZ2xzSzNnS1VRYWVFcW5XUE5ISUJvK1d6RXdOckZIQ0hHS0lONVBVbm12Y0k3YnFPaExncVlxSjlRUmRwNmlERENmY3QrNmQ2V3I2VVN3Vko0bW5Xb09Kd29rYU9vaHRTN3AzWXJ3YWswM2dDakhOazdPdEJOUTh4amNxYTNkQ2lOc0dhU2dkMlBrSXFrR2cxazd6bHd3czVDU0srVmovbmVCWWIrR2tYN084TkNwWHJ3b0FtRzFQODV5VjRIeHpCS0wyTHFyc3lBRUM1bVA2UTZ2QWh3QXlLQmZxbjhaME9KV2crdUNZMW9WZmV1NlRiSmd0SnBYU1BMRkxrOVhtTEtSL29SQ1YwT0NxZmwwSWtUSlRSS1RrejdVeWNMdndHcVFTcVBPWnM0RlpmV1F0N0Zhbjk3VloxSE9STTIyTGFQbUFoa1hVaUt0QUIzMDlxTk9jTEFUUTZCOTlaS2tlaktWYTd2UXVBTnNPSzZzWGgxTENVbEYwam53NG91NnZiT1NTZ2lrYkk3eGg5TlpFbXNROFROajRoQ255UnpwZnVlT2JVQlVOeHBNamowRVEzd2l5M29DSk1DMzJkdnZwMlpxdklBcklhVUUzRWxhUEtBbDB6U1lIdGdGa3ltQTZPcmJWazRIL21ZeWh1MlcyZldIVWQ4V0Z3SVdHQmdxNGlYaEpHUUJWZ1hFbU9ubkU5cmFDS3gzQkZMdWxtY1k5K0hHQVdISDMrRk9ndzk3VkFGMXZSTUZYZGpMTWl0d1NacnNHdlZvZVhkYS93dFFpNUgzQU1YYm9US2l6ZzNGd25UZ3FOYXBqZC9KRTZ1NFJYZHV6OTk5SFhraG50VUF5VHlXZURyMzBjV1NXSkMranN5Y2ZaSThHblE0aGI1M2w0TTZSMyt3VTcvWXpYaHlLU3lXaGFCOWwzUmJnMXozaXFqamhWRHBDaEg3cFIrMTFlV1k4QzhhZkJhOG9Sd1dubnk5SFFVVlZFalY5VC9ENDFLL1kyS1ZNZmZGWEdhNVdmRnJpTUtUTHduaVAzUlI0a1pKOVN1SVVFZFdIOUdxUnhLTXN6OFFXNkpiWFRTSU5KcVRVN1M2VnFyMUpORlFwSHdLVGZ5eFFEanM2RWVQSExrM29hUWpFZk5iMVFPN05uK3lyS1U2aEpOb0Z0QTgzd2hOaXJicXBWbm9WUjFkY1hETFNxTEVoSEFYVXRXRkNjYUFMRk44UlpLVlozOEpmbmJOOGttODZIYlo5R1AzdWVzNlpNZGhSOTRzZldjcGFFRU41a2VianB0SGZXdVB5dk9meVFXMmFqaG1MOEl6WXoyWEVsYUtlWHBoMEM5SW1kRTdiMUNRNjlmQ3RTZk1jb1RCdElwNFlxWmJEUk9OK05rVnZxWCtxbzFEQ1hhbkt0dm83YmVsWDhSMWpjdzlvcVBSdCtqWmorQVlwUnRGSmRGVm96V3ptZzJkaDJnN2lNYVF4blJKUGROQW1sN0hSWG5yTkZ0UHlGRGNQY0dZOEVzcnFVdVh5MUZxM2pVZWk4MmZBdTMvMEZUeHJEMGlnVk5CcTlYR2kzcC9BeVplUjZUT2ZOTzQrenJGUVROVThuTFlyYjFhcEZvcmk3WUNMcUhSNUpoNCtQVE1aYUl6bHJkczZKK3phSGxwdHhmOXN0dm1TSVVjWEs3VlAzTzhZT3ZrMXl2R2s5ZStjN1NGNURZR2F2Y1VMdmpwVjdCTlFyVmU0WFNUK0ljUzVyalBCSEZSK29MYWpjN2ZaYkoxS3NlazFLQUpRbzJLc1VjaWY5TkVRcEQ1YUtsdUZ0dmg2NW5MQTI4S1pzeWZXZFZjVjZ1dFFCS2luYS83aHFOdWg3L1ppbUN0YzFSYm1CYXk0Y0o2V3lLWE9ycUU2bEpnY3QvOUVCaVhXWStNblMzeWE4cVpmajlxSERXS3dJbmZNbWlDU2lMcFFWSG1sTHNPbGtuMGtuK2MyUitxdDFnVktENWhXZjdlejNHbGlYZ2NZM1lCS1ZyekVBNEFpUTdhbEtaZ3RCOXdFam9vaHJhTW9UYU8xWVhwck5RZTA1THZIZGNUY1pOekk5bG9sZWdKbFNGSzlLSmF1azBVd1JyWW5zUnJmNUVJZ0U1bC9WazcxV0p1UVNMTVF4RWRBckVhMVpQajVCS21IMkRpT2hoZVczTUpGSkFWQkloNjMrRlQ2SjFydkRPcGU2Rzl6M1c5NEt0d3p3OGIwZUcwVm1Hc3hDdEp4aVpZeGZxcStTd000YVQ0OHNrcUloQjhLWHFTWFJJV2N3SnozYVJRMEJZVHIxanBPTm9DWEJEYjF1YmJocFl6WDJYQzYxUUhRa0M1K3pKMUhmSzkvTEo2TlE0Y1pwVUJNWjhkVm52cGNnc0hrOFJGcnF0ODB5dERJblVsWm9odXpPUG5lTklybEx5L0QvTUV1NGxGRFBLWmJkdG5oZWdxRUJveFhOMU5pTjQyaHU5WHJ1OUNpQTVwQ0VGTFAxL3RHbzU2cGY5Sll3OGEwbEVQNDF4KzErc2JSV25IZy9tT2lrVkJDdEYwTktWL3VnMkFvTHZrQ0M5eVdqOTN6bXgybHNiMU9MbzhjSmlYOEFFb0V3NTVlK1ovaXhNY1FhdGg2cW9hY2xGT01BRDNrbFR0cG00R0tCQ2ltTnUxd0RaTHBBdFVCclUvRlh1emI5a3dHNXF2SWswV09NSi9CSWwwc0pNaWw5TzByb1J5cXBFRWl0eU9CcFpmOXk0UTg3MEZzZEgwVnlqQXZrZG45MkZ1TUVuZGhNVlRUeXBWTC8wbHV4S0d0eGxMUTQ4U3lGRXRsaXh5T3AyNUxqU2NYMTlHN3Q3bDI2SkxrMGFsUXN2ZHAzcmVGbnphaHZSaFJFbjlaNDVTQ0drVllMZzR6cVd5cDZjVjAxc2pSRUx6Q3JTeG5OSFh4aGxpL3c5enBReEc5WnVPMW04OTM3ZkZvUHBQcXNraXdCZUZ6ZTNVSUJBNjEzT1dKS0RYWDNIYWVZcDNEbURuazBKSlllVXlPb0NmM2NSZDR5RW5BY0NBeWYxNVNlUTc2dWRHOWdNSFA0WFdQR01NVnZBNjdaM1NTUEE3V1VhVzRoSlI2QmlPbnMwU0hEWTFnVzZqMytBQUc0YTNESEJSZXU2d2o5U0VYWDE1N1J4RVcxUEQ4OHFrUGsya2xmcmRWaHZ4Q2VWU1NjVVlnWEhSMEl3WTY3WjhOaTFxRDRTQXR3d094L0dTSlIvQTY1S3ZTZ0Q3RHR5cnVpenBDcGpYcmE4c2hMa2JXVGo3NjZtU3JZQkVCd3hndG54SHF1VmVNcWVBNmsxcCtrVnBZMUJWNTBXQ3NwaEs1eXM2enVLZzMya2YxK0MrWVNOVXFjZWZ5QTVuZUNTYlVRVDNtYnFHMTVNVkVPbDQ1a2l3UWtuRVU1YVh1aVY1alBrb3c3YkhBdkdKdDhiNDg3QVJ3QU9VRC9GV2NSQnQ1VlhLODRpby9aUEc1S2IvT21DdVZsODVpNU1lOWJ3RnQ5WmxsdHpRZHVhU0NmODhVcXFIUlp3SjIrL0YzcnZzOUVuQ2kweERPMkNUTUVBSXVzWEZscllBN1hhZzBEUUpybU1sUVg2aG5ibXZUVmZNNDZud3VIUHpYZEJPZmFzUVdseDJRcnduSkdoOVp0cWJyaDJTdFl3cHR2dHdLcjk5elVlVkd4SzZUd2phZWZ5Umg0ZjhCbUtVbHVVZ0gyQXJDc2FKazZWVlFJL1pjMEpUWThDLzNpNDNIYlVHaHhiMCtkWCtyN0JNVnZvRHJVbXZ4ZDBTemVhejQ0WWsyNHc0L3pSWnRSYUxUVVBpWkFOc0JHZTNCL2hIY1NHeUNsZ1pXZ0RyMEMvcEJDaGppOXhoTnRCTDJiQUFaWUY2WVQ0Z1NhVHZIcVJQeThXdmhzWXJVNUZ0cGRTWVZwemVMOEdkSGpqL0tKRlR2UlZkKzUwUjNVZmg3VFFBYTBaY2RucjR4ellPSUwxQkdheTE2MnQ0U3pUWVlxcTRTemxGVXk2RzhxQXpVWlozUTJUYlE2L0xvTVY5cGJnUXVqeHp2RmVGYTFYbVI0VWFpTUs1Vm55cDNYNTEzcmJmcHNPUkhaSGJzVkNsZUo2b3dVWXNaMVErdysxd0JVRzRSTGhQZXV4Q0lhL2lxMEZtZXdDek5zREdxM2s3d2UxVWlyb0syb2VrY0lESFpBTDB5Z3kweDlhYjBNVnJ2SkpCYjBWZVpmblh3eVNGTmFUbERaQkY0ZmFhbUEvODZVcktmeTdGMklub0ZpWGE1VXdKNURUSEFGUU1CZkU5YlZMVjd0Rm9YOExOWHVhdW92QTZHVTBveG1VdDkrbGtObTk5NGpJSjZBNXBBN3hWQzl6M0hDN1dKbmtxZHdVQ3VaVXVCNWpScTN6dndiVEliNHIya2t0TXVjTndIb3hGeGZKOWtyZWo1N05icFMvUkdENlpKTEJuWms1cmdOTUdnV0ZnSU9EZ014aWM2WTkvcFNYejVrTHFzZEhBZEpHYVRpQWVGNXg1dDNqeHZyRVZ5YjZQNEh5cGFqaEtsTGtBdCtlOXJ5OUZELzh3RFZ5Q2tIdHcwbklMY004UkFDOUJjT3hHV29sR1Yvczk3SDE3b0xuUjJJY2VpK256UnVLTE9iU2ExM0NlL2oyak0xS1BJVG5Dc2ZqRDN3MTlqekV6WFk2c0tTVjhlKzV3MzdGaFR4L3VUZmVnODhJeVYxbEpScDVCeWJLVnE5TWFhVjg5VGQzMi9IN1Z0dDdKRFd3VDNPZCtGTitneGFLN2hqMmhzWlhwa0tWWmtTbjlIb2lTNnZDV0VOSklrNHN0ZjBreTBURkc3RDBJbDNibGVYZGNMVGxuLzZjSHhkazU4eEpPYUtuZHlTbklXWGsxU3krOENlUFQ2SUN0eEVjZXZ4d2NMMXFsbjVDQWVzdzllOWk0dTZKVk5YdTdTR1gvZW5LN3o1REFiYS9ZTjJ6a1ViTXM0ZldsK0p6VVhXS0dTOGk4QzFDYk45V1BmZW5LUGMxUDQ4WmxWMjRnN1NoWWJHUU9oWWRmZzcvQ1laVklVVVFCK0g3OG92Vll5VkMxQkFYWllWQ1R5Z290NUREUXZxZ21SdkliV2UzcWZrdnRPaU5JSEpRU0t1SSs0TFpmU1lYQ0lzR3dFb1VKWGl5NXF5U3Bua2NTaE5QeUhqZ0IvYmZDQzdaQWI0VmI5ZTdMVEtYd3M5b1F0alFoRGsxNDJtdnNITVFhN1c4M25MdWhUanhBLzAyZ2VzMWZkOGFIV1AyQ2tTeE5rQnA4amJ6Q3ZDMnZFNXNGYUhvZFRZSE1tN2c5UXcrU0hzVVgyWWsyRDFCUnNpK1NHcmQyRzE1SjFPMzc2ZFZvZWdYSEhZUjdZNnlkZHpwVklkSVVBcmlTL3ZHMmJlMzhxUXlNbWdWRDNlTlRPQUJiZ1A3d0VPZFpaVUpieXZ2dXZYU0ZmYm40SThwQXF1MVFIeFhKZUtIUmYxTFJiNTJXa2RYV0M0STk4NEZrK0JzbnY5TnF6amg0S05CS3UvcjBCMFY2SnUvVnFISWdWSzcxZVkvYmxsR2JVMVh3K3NYTE1VTWFlZUJRN205NkRsV2JIY3RjZ3RGZ2ZPV2dCb3M4N0RZUytFV25hNnh3NUFUMHlnUVh5d3lSK3FqTFFZelFIczZtdlRINnpFR0s4OVF5aEVsMFNxU3J0V2hOYlJpTmNxcytEY2x4UFFsd3M1cHpjVjRVM1ZHV042eUhHMnd6bFpJTmR6NG1IR3ArQm9sUUdSemV6NE0rUnhHUysvS2FkSUxUN0syMmR4OUxhTFdmRFdBUjZGbjFiT3BEcm9rZUU2N1htVHRTdnh6VTZRSXdVZXlsMUoyUjVYSk9WNkZDQ3B1cXdTcG4wYnRDNmNrMjYyVHR0WFRxNVh1MC9xaEZNdmh3eU81N0c4ejJGS2dPekhCQmZ6Y2FNR3J6R0FnbDAzMWxLU0xiWjFkQ0xMNzdhVlBFbm1aWi9MNGJCZVZWRFg2djlpVUl0RTkzT1JtbUN3WnB2NDdzR0lmMlI1QjFmbWVQdjB0R1p6RTRuQWUrazJmWFh2elpLdVBZWGZjNXdnbkpySFlLdDFaL2l6U1JKZldtWDhhMVRkMDlDMW55MGh5QWgrWk5NTllVeGIwNFp0UWhYQjI1cnRXTFlVYThwelREcFhSNGFFZWFYZE44RzJHYllndmJUTThuWGNQU1pON3FFdlFGdlc3TlRHb0hnK3BPcTRPRXQ2MWNzOUlvam1rdXIwNTRQZ2lGRElMZktMRDczQjVaOUdWQ1FuTjlOVUpsSnY1cU9iMStiVXkxNGVBekViUmJrR3lLRmNFRDB1Y2RhaEcrck5RWWc2N05rMEEvM0pMbFJoUFByaDdaSnZ3NHE5YXdiRVhHK0t3T0QwWExuQlc3M0dwNFdSYUp6enkvMS9QQVhqdmZ1NmNOT3piUDRNQ2lZaTZ0djZKWkdWalUvM3FnQWJOWFkyUHBTRm9PR0ZQMjZZK0VhRTdiamR3L3U1M29LM1BKTDlKbGx3QnFFR2QxZ3dVWlhCN00zZkpYSTlibDFxdVVZQU9mM1JtWEh4c2doQVNMZGRhQncvckNhaUMxNXV5UFBFRlZEZVNuWVdOK1lkbzkvYkFuYitZeUcweDVqd2RXWHFJbkNrSldsZFBBZld3bS9zQzRRaytSY2tLUDc4RVRmTlgybEZpaGxta1ZsMzlKWmM5YUpkSGNvT2FhY2VDci91TGJNU2NYdjl4czJRek5YS2lzcEs2ZGpIVDVVakhGWjZqQW1QVXdWNWRncXZLSjZmTVpUNmhQT3dBa1NleVZvSUI0SVBLWlphc2hocFk0VXJBamY5U1p6ZWgwcEFXc1JPcXcxNmtLRWJpWVQ5bzV3ek9HNnpwTmI5dGoxUzJ2R2FNNTBoMC94TEM5TUlOb0xIczZFbWF5aDk3bmRrc1dTdkVaWTJReXUwRnorZW9nY0Fpbmpaa3NqbCs1elVCSHBQRFdVSmJhSnY0dzl4R3ROT3U1bWdRZUExcG9Ha2xYTWNpVkFaL1Uyd1dEd09taWRjUkV0dVU1SkJzVUFOMTBQaER1Y0VlcHl1Yjc5aTY3VllXU1ZKUTMrTTNGbi9DN3dScTIyZzFYRFlXR0grdW5zT29zVjV4N05xSnkyeEZLRWtRSStNQUMwRzlZRmN1N2JZellIRjc2NHV2WUt6VUl3T3Y5alI4K1A2ZWx6TE5OUlFQWkZ6SWlxRm5JNnRibFY2VDZJdHNEak9OSWd5VkNqNXFkZlh1Z2s4UzhVeDBKTDZjc2x5TzdTL1pvVnhYZXFDRko4eGJpS3h6dE4wNnBjSEpBNEFWN01mcVdJcmc4dlRuT3V0Y1NwMWJqYUYxakcrNUNRMW1YMVJWWTBsZERubkh4RlhjczNBRnlESE81SS9raEhFS0ZrQ0R1c3JLS3hXSzdiYm4xb21zY2ZuTjBMUjhnVmpOTnVEMW5MbUoyM3Z3aUd1QU94Y1UrTCtVN1dKU0d3NE16UDhUdWh1eDhhamFVaGxyZHl6RWplQlNZMFZUbXNXNHhNNWc1R0V6M2E0elg2R1pwUDl0aGthUndFbEZsdHBRdjNZR3BvYnF0Q3Nxem1VM0dqNXpDcDc2c0xRNm1oTVpXQ0l5SlI0TTY5b0RlczlzcHZKZXZTdktJTS9BL1NETExTU09MVjhKSytLOFp5bW05cHlvZDhCQm50SkxaVmUwMHNQay9EQjdBNDFJSk9oT0NDcEgrZXp2dmErWmFVb3VaSkhxTS9IZE83VXlybGZLaVJpUG5Hc2IxZVhjQVZkRGI0WWVYNDlMRTNLZDZRZGtwNVRMdnBZQVFHT25rTnFIOUxUSTdiMXNmZTZCbit6VC9KdDdjSC9lTlJSTjJxZzA5TklmSTZwZW1wTE16V0RhTUtEaEdGbUh6LzRxbEl3VU5VUy9xSFNhREErNzNwVUNCMUhsM01STm04TkNOOFN0Q0RYR2tsZTBZdUJrdDVjYlljd0krcXd5TUlkajBGUVIvdDFTa2N4U2ZqMHlsWjZzZjFkWTBsRTZXS20rRWF5UHdqY09QUDZsakNNbUlnNWlZZFo2eGVTcHhzelhNWUF4cTZtbTlNcm9Nb21HbzVSZTZJVmIrZHdPVjhkUHo2UktESFhRS3B6NmVMaGpSTEdUai9LTy9DZllHTUU3LzJOLzZpejJmQW5Yb3kxaHlCMmhjYmsvRFdraHVMaDIwN1dmQ051TWtwcXB5TFI5c0hMQ0hWcWwxRGxYcEVQSTNLS0UyWmlTc3Y4Zk9IbjA3a0pKWjVyRzV0VTVEd3lLWTVZU3VaM1NST2psanBxclg3NnltcGp1eDdScmhYT0hoNk91U3Z4VjZ1aERoSERGM21OSlVKbG1JaGZqTlZ5NE1zM1hRbzlqbVdNcXJzNWtmNXZBR2s2MWFoa21FNCt0SnZRbE5obUFVcTluSTlLa3lNdklWZ2d3RXJGZ0Fqd0J5VGh5N2QyUzJ3RFBLYnNqR29nZnQwMTdhV1dLU3N5eTUxbDhRUWloZ3Vtb0FHdlFhb1FraWtjQnkzUWw1alFrVDJwd1ZnUndManJQZDlSOUNJY1BTUDVwZ3BVNmpzSVlRM25NYzExMjc2K2xhOGpHd3ZVb1BWMDA3OThjQ29MdDFxSWhUcURGTGFNZEY0WmpSczhpamFpdEpNZGNjMWZGREdtanJzbVNFUDlVWEtJQUlFTXlKVHhVSm9nNUhIZThadmI2WXdJWGR3aHNIbnMrMkdNK3FqVFBGU3c1NEtaY3l6NTdQdFlSZWphRVRtUmU3alRBWTJ4Z1dDeUpJZy9mMnNicEQzSkNRYVlZbTVsZW11b1QyVkNnclpTY1pLclBrTVZlUlFQejYzVWxPbCt5eGsyY1BKT1ZKL05VTnRYWU5XVVNmaC9xVktXRmxIWWtTY2ptNXQrbndPKytlcjJxNUZtM1g0enBRcmsySTBOZmh0c2VMa29PNnBPSHVhYm5iRlE1UTlxQWZ0cXNPLzdOYnhRMVVzdWJIVEZjblh4aE44UERXSTdyRzFpSlhpa3dBeUkrWjNoY1g0Q0RqdlQ3a0FYTytZVEIxdU55U09lY3Z3MUVvZjJxSkFWQXV5OHhEc1RWSkxMaVdvcUdkVm9GcDRHR3JWTFhGd0tHYk9EY29ZaHkvYlVPcGNsZ2ZCUXRKZnVxd241TDJ4NENDQkRwdUt5alhSVGNmc1QwTGlySUVhTmMvMGxITlllN0I3SFlQUlVpaXl5R1QzMTMyZ0R2dDRTRmEyVkEvd044blN1UUNDNjRZVjkybDMyS0ZkMjRZRWxDTk1CamR6SmN6M3FSR2lqSlV2WXZxTm93UkJQYXdidHJxUlY2S0dRSHM3VjQ2aHByQ2lSTGFYY2VLb0Uwci9qYnJVMy9VbEpmWlRuQSsydmpZQjkrZHJsVy9tRWoycVora0lwQmNwSXRvRis1SGhTOGoweGVHa3hUTllqU3B6U1EvU3FkSENoblVRa2NWMWRGTnpmNHNNWW9Pa1RZN1I1MnpYZ2ZWQ2NUYk04K3hBU2U4VVlFcTJyRGtiNjg0QlJ4OHlTY1RBbFBYdTU4NnRhOUtjanRmczFNR3JtcW92Rm1wRjdQV2lnditTcXZqQ29IbkVtWGhEa2lHVTFpb3NiOXd4WFhPMVpxendWUjVBWmFVU2F3dG52bVozMWJLOVBlN1RzUm1RUmtwSC80cHRlemlxT0NQeTdWcmRFWUtkVHdTTEZnT0h2RExqZ2x3SkhXcUxpV3J4ZmxFRW9Ccm5QQzhFKzhQZ2k0Ri9TQlBaek1wMm04ZnRiaVJkb3AyMjlMNnVlTDNiZDUyUFV6N1Yrc05lU045NmtnMWw5U3k5Mnd5LzhmWTNPdGxsU3k1T1Z5ZFhJdGUyNHBnUldabVA4U0RCekFUM205WjVCZzRQV01CUFNKSkF4UE9JR0UyQ2c4ZGE3UUtjdXpVNEZnd2ppdi9nWXVML1BpQzZVT2NDMUt2TTVUYW9tb0RyYU1Dd3dGWGlPalZlTGtHdlIzNm9Id2FmUDdDKzRJSmxnU1plMmlyTmU4VVROeTU4ZHRqS3lMQnNabjNzc1NySVJqbVIzbm52NmQ1MVViL3FuUzYzQnJsYm9vV2JXOWVhTG85d25Wa1dXcklPREtRdEJMaDJmTmFqWENEYktRR05YYmpNcVJadHRiQ3pTaWxzTzFPdElsdGFlWitMZmZla2RTMUhZL1p2ZE42Z245REF4djQzM3piNTVDUVFEZkluQU1rRVZwazRMR3V2Q0NuNVpVREpZUThySEhEZjNIV3hKUGdOTmUxN2QwelJTR3VOME9ENURMSTYrQlFzVkN2WGZjMWVEZ0ZDTG5oVWltWDdLeHAvOENncTZMRzNBNTc1ekd6ZFFSU29GVHljb2hlaHhEU09NVWVPWUt0SWlIRVJOaVJuNkVDMnR5NldIWFRBTXN6cE5LdWx2TGRwaDZrVXJsRzFtWHI1YUNSQlZXNnZQaElOdTJialFuTjBnZzZhME1xTEh1UW5YbEV5eE9PWHpzdWEzZ2I2V2s5VXc4VThGQjN2OVFNeHpOdkRUMGpPY2lncHZPS0d4aG1XcXpZdWQ0TDdYd2xDVVFTYlhMY3BZbGNRQ2d0TWEyanVreVhaWlJnTHQ1NnRnK0pTSmNFcldqN1hCaGtIRENyalB2TUhmK3Ivcjh5TXpzWXMvam5kTnMrR1lIUnJPV1NkOVF0bzdBK0VpZFc1eDF4d1VQYWZudzd4ZnNuY3RydkF6UFptNWdHUmxRMTJBOWpuemFPaVNPU09ISElZTVBWYjloTnppaUo4ZmFtWXJ5cnB3TkFHcElZM2RmUTdMWHA5bTRqdllCMjZFbXo2aEZzQWdtMWp3R05xbk1ySUZlcm5hNUh6eE9EN0hYVE9uWW5mMUs0NzFDUTJWUU82N2FFN29vMlk5blFITmhSMUVMRTd2UloxTStiTnNCd0JoL2JyMTZPc3plVFJOVVNpVjFOUHgxbU1vSnFVMFJhR0NNTEE5NkhVVXFoQ3ViaUdOd3NvOWUvZFN6YWI3VjNHY0htQUpIMXFxd0Fmd3dNRE5ScVRZOWJ1cTU2RU5rdHNWODM1c1M3aTNaeU1OaGtWSlV5ZC8zMitPZG1SNy9MQmNsZTN2VkkxS2w3OEtIa2xOem5Cbk10VmZUUXdYT2FWTFBVQVdJakZ0STBHd2xtb003Q0RDWFVHNkU0Um5UTG5tRkF3N0pobnZwb24vTXYzTXJldW10UWIvdmlJVjF1Q3IzNldQR1ZydGVRa2p4SGRBeUJ1NkZpSnZxK0lheWlRcUdBQlZwVHJobk1vYUFmWjVoMUVFSnE0akNINkJHMldrU05LdTFiZXR1cC9KM3dqVlN6R0J1aEk4NTg2dE5OMGtzd2hRSkxmTjRuZU9saSsvRnNrbjF2Z1ZkOTg1WlpiRmQ2a1BiWFc3TWFSRU5pNnJiVSt4aVpkZXFPMlBBeGQ0eHNoSUJmak9IYnI5L2g1RVFtcm16ekFzQWhHa3A5S21WTkQ5dklJRlNjY2J5UXBxbnpwWnlvT1VOckpiQ2NqZUJ2enM1eHlySXZwUHF4dFlKcFpCQXlqWVU4UHRTUlB0QkUwT0lhT3lSbjJ0czFRdmJFd3lzNmw5aCtQQ010czZBd3ZJMmwyeG5EQ1lLZkpIaXFLUzRXTzVFTzk3QWtlRVVvNWxVRUZjV2pJU0YrNS9xRGNFUXVPdkt5T0ljdVJaNUF5V1ZYRjRBYSs1NXRoT0RoaGF5Q0dDdnlSV25PSm5OYVNGeGdsR2p5MlZFZXgyeW5TcXh4eDRDc2xtazFFNk1QVFdlcUpZWEc1QnlmVklFWkxLMjdXQzU5b2I1Unl1cS9mand2UHlFdk1WTlp5QVNFNDhjUWs3Yzl6dXdsNlFXcWVYMEx1c2VDMThiOXo1UXdSQlpDcWJMMFdoTE5JOGVGdDg4K1R3a1pvcS94bnRla091V3N5TzY5V21uNjRVQkVadGJZTXJwVHI5cmN6QVVXbm5TOHZvRm9GWkdMbDJnOSt6L2hmc1kyVVQzQUlUaWtxRTE1NjlkUjM0VzNmNTNXRTB3VWdJUnVaVVpVVTFGMzZ4aWlURThzdzhNOXZVMEdhcDZMK0VnY3drbjZsRTlXMUg2K1BySzBTNTlPc3lUN05KWG43cFVoRjRtQnNIMmlicExLVXRFWkQwbERJU2s1ZWwxV2F4QXlScEhaUml0elpzcjR1VE5WUWZXNVBQazFkd0RjcnRmZW14ZFllazdaKzBYakVZbldzajRRZ21lNy9ybmlvT1NNRHVUVmRrMTRCVy9MTStIQ1dOaTA5YzlJNEJ0bmRvMldqa2NWY3krclA3aWhYME5sd1Y1UHBLNTNBMlZGRTE1OWtLWkh0ZUhjOGpYYVoxVFhqWHd2VitEeHp6YzA4cWhqQkt3RW5rcVZ4U1JoOCtYeUw0S3pWNCtnUHc3RmdaMEs5ckRsYndGSi8yeXBwUVVkUkhGRGp1RnJ2clRrTUN4ME10MFhob1oweHFWdDY1bzhOYUhsdHgyQTVIRjZKNWxKdHR3QWVEZ2llemxySXJnSERVTjNoSkYyMFRrSzlJSU9xMTd3eVFNZC9VZFF5QnBsSVNrU0R0ZlVZQk55cU9IMFVXZjJ6anphOFI4aG5hN3lzSWdQZXNGdlRrOFFEVW16V1BSckl4YktwVGw0Y2RudWlOb3Nla2VnZGNYbEFOakh5RHo0MmJYa1N0V2dkSjJMSzU1eXArYVlabnN1bDJGd3UrbEhFOUVxNUxCNEJJNzhqYU1nR2x3SDZFR1NWZzBKOXIyb1RxLy9PNWtwRzdtTHVpVUFENEYxUFljVFpWTHI3VjJVRFo4ZGZVS1B2TUlNamRBeUdaRkhWbllJWVlEY2d1ZnU1dmdFbURySHBISEZ1ankrWTFWamZrWUVSRmZiaSt1RWdjVkUra2ZESEZGZjRqekJPc1pTdmh6RGFONks1N0l3SWZORlZZRGxyTE9wSEhGek5HVnRsL1dUU2JYZW5ic2o3MG9YdTVtYS9sMlc5WU9wRHpOSERnYStqbi9YMXAyNU5Iem5iQ3pVWUdBTTE5ZzJ0T1hWMWlpanhPaHcvWWQ0emhRZ2QydDdLUVBNNTBSbVE0bGNTSDFHbFNIanRrVnBLdm84V2lFM0RPYUYzcHl0N0EwK1A1Nkk1UmhaZXVROEtaWHNUaTlJeWRhUXZsZXN2WTcrT0o1Q1RXcXpIdEFNME5DSUl4WGxxREhpQlZzbHRZWG5mUm9ybHdQRm5ZbjhpZlllOVNYRmRlUGc2bU9NRlBVdUxsaVFmTnFkeU1FUGp0bGNPMndOYkhzTWF1L094UDN2WEMvQ2tudFZoc0FzaUd2NUhnR0p1bitON1V5ZktvUUZkelFKa1g0cHNweWthQ0FWM2RtME9CWG9WQXNHOG9xUlBKMFVmUzhjMTBUOFB6a3VoQ2JWbCtuSnZ3eGFMMGUycXdVR1ZFM0xGaElvRnBCcXQ0dkx3ZmNSMjRDczhuV1oybDRiNndjK09UUDVIWmp4c3diMW9ReHJMd1FpNmRpUkJhQ2ZXMVBZWVZ2QkVJQUVYV20rczRMTmRpaHRFWnRlZWVsVEZFN0xvWXllVEVza1dvT1ViOHVnZkx1VklrRVFnWms0QVZJTThQKytSaUZyUklEM3JXRm56S1lUVXgwZWR6bFVaSjI3cEtmbEliNmxjd0hSOWRSK1ZHL3gxS1ErZk13b2x1cnk1dTA1MmoyV1h6V04xWmQ0ZGRtSzNvQ1I5MzNTY0V5clJKZnNteHBDdjY4cndrSFJEdHprZ1NYbDc1YVU0ZXAza0wxMzBFSjlLVnVWZXg4djFiUUtINFZ6Vnl0eFpvWnFmR3B4eWk1Qmp6RFZIQUFWNUVUdjNSMnRGSmk1VmQwV1NXSnZQWGtBQmYrTXB6MjBGVDhwa29UbytQZkN3dlhTWVU4b1NweDgrUFVBVHNITWVqbDdETlEwVThCME16KzVxV0RrdmNwM0ZrWElWSXRySEJBcHRRcnFuWHR4RWhtL1BDd2ZDUjlrNEx1NlZ0ekxaTmU1UnA2MlF3WUNGc29HcGxNQUpoajJwd0JzMXh0cTZmUG4yU2UvQ3RDRU00MW9xOU5Qd2Yzc3dLK1ZxTmQybWtLekNQZWhrQTliVE1hOFJCK0VmaDhaMWR6QXU1cnVDOHJpZDZ0T09XTjJqSTlNV0E4RHIxckJ1Y0FkY0l6ekdsV08vbGxPRmdEWXFxMEg0KzJ2dk03bmZ5ZHhObkhLazMwU3hxQkNzemxYUmtIYnhyQS9zcS92SkU1VisxUHZNeExMT3BYZmV6L1hXekhIVHluWi9aMjJJN0d2ckhQcmhBWTJweDhzN3RkOUI3SHJmS0pCQ09YQk9FU05Ec1hXc04zOGJtcmlzNWhpL05ZcWg5bUdiTytzSmIrYzhFZnh6RjI2YmxrS2F6ZDJHOFFjL3dSQ3dhbnFJQnJRYnJvd0liWjBwWTZWQlVERmJ4cW4rS3lKWlRKYnRaNXhUajhvK0RmYnBKY1VBMjZIeFFCcTV6anVtUXFhK0Q1d2NLVlJrcC9zNXF6R011TVIrUDJqUTFQNGg4REJSaTJ0S3RNc2dsL2RHVXBjdytDcHJuS2R3cWRxcFMvWXdLeU5XSTVtVGZxQTd4d3R6Z1hpYmxKRVI0b09ZTHBpSi9mTzYzUjFzMzZEcHZMRmcwbmNpSUd5MjU5STV1dzM0b2FNbzlQcG1RdkRvY2Q0STVkNzB5OHdJVFJxT0FHTWdoTkZWWUJwdUlUWXg4ODRWMGdUTGxJbVFqK1JnWkdhNm42Q1JURnEzZS8rOVhFakJXTmFZVUExVnZwNzdGeXdYVHZBTkRteXpYNHBPcHAyU21CMUhXbFU1V0R4THNlRUlJdFNKTmNiNDNNUjVENytoby94aHNaalU5K0hDYm9oVE9MWS9abEV2TFFjM2s4R0JMRFY1M2Vtb25sZXNNNGxwZU5OQ1VranBrTjdFY3JTejBXcDMxY1ZreE5CQU1aUm9aMzcvOVcwaEJRRnhxemtIKzgwcnIrdzRyM0tKdEdQQzlkS0lMMk1tblZPVUk1V2Jac2VRdlA0RVR6OVcwSmtSaU5qSDRvSEdVek9lQjc1ZVo1UjQ0SFlCRFVDalZMenpiaEw1clV1Mk1MS09iM0hPcUFtcUtXbS9udmtweWphNUFVOGFIQWJGMjgyWnJVN1hHN3F3RDE5bWg0S2RlMlRRY1F6NWk4VCs3Y2dEQ0t5dVN2NzZ5NncyMTAybkRSTyt3UWVDUk1CR1EzUkNqWUE3b2VlT3FwUUdDMlBUYmxjSndyVU9tVmxBb3psSEdrSDNwUFhQZ1lKajhUSUxRSUtYUEdOVFdkQXMzbWh1aEw5S2dDcUhhOWhuTlFmejFGQnZzMCtia1ZZSCszZVNkMThRY0lEQlVyN3hmTXdEejlCOUxDbVBReEpSRVl2UFVlQ3MvUk9LSDQ2OFJRdEpxSFR6NlVUR2lXNXdnekxkT2VwVzJTMkVCd1h3ekVxRGpIUzE4Q2ZtS3M1cjU1R21lMkVRN1R4eVJLOXdyRFdSdUNwVUhaZmxyVDJLdFRzWWh1ejB0OHM5dEFHclhxZjQvOW45a2xqMzlHUUhDUEkzOTRHelY3WnZSeXNhVW0zbTlMR3BiNHVDZGM0NndCdmpVUW5wZnE5eDEyZEFHUmJYOVBGSkgyUGo2L2FFdmU0eVVaVmcrSHA4UXR0eVBnOVRPdFY5TlBiUjRFdzc5angzNlduTUJWalFjRG40SW9CRmJINHRNN3RNZHAzTlROWmtscUt5ZVFxc2FGZGU4RzgxWEZNRWNwT3lRczFYQWJ2Ny9wcktQdWFyUi8rSEtnREtteWxiZ3Y5NTNZUWh2Z2pXQTBsWW9BcHFLZTkvTWxKbGY2S1RxeWROSWRCSkhOVzl5dzk0WWs5MUZLWHIyRlZ2eWNHam9QS3hiNzlKM0ZMMVVycnkrTFpkTXBhK2ZOWjRsSytMMmZTOXFZNm9BMEEzU0dmcWtvb2ZYZ2FXYkZoNzZSQm1NdnNPd2pWS1Bja2F4eTBmWFo4VWpWUDV1RDdPN2JFWWcxS0dwTEYxNnpQRGpNeWpSTlR5Y3Nma3ZDWElJNHBSa2pFOEVsNTZzd0FqbU9Ob0hBdmdTajZFWlh4NDNlMTRJSlh6S3pSM3FpU0N1eWx6VitDSVM4WnNtVkdDWUtrVmlXYTZyMU5aTUVOS1BzaGlmU2RCQlZ4WktkeG9MUzRYZXFPZ2hyZjZoTlRNWDhsK0doVk9OUGdhY2dRRnlQcWpjZHlHRmZWTDJzT1ZVS0R6Z1h2Yzc1MGluWDFOaDBRaEJMS3lyMGliUXBHZHpoTXNoRklTZ3RIQ1p4Mmp2Nm1ZRnRzV2xRVXp6ZVJLOFp5WTk4WThhdW4rVzdETWdKM2pnSUo2dnFRdUZSY2pqVWlzWVgxcEkrNGppWi9jTnk2Y1BZTzJBb0l3UjVUcXBkbDh3MEhJQVZ6V0lLWTBTcTFsay90YWlveDdPZzBhNVRJOWNUVkJQaHhrd1hkdlN6OE5VNjlTRmxWYWlVYWN0Q091eXh0bFV1RmVDc1NGWFJuMW44MmxVR2J4dk4yWmM3ZnJ0cnNQclg3S0UzTzdTSStZdS9zTnlFWmFnMDJGVU9rR2NBaHRsaXhDK20yOUdCSWNlWHdJMThpTGFTTGtsOEpQa2dYdTAxQWR5V0ZlTWN5a21iSzhkKzJoTTErQWZjY0RuK3Y2VDFxdnRiL0FoZzdYM2FkMUE1RS9SNlBaMjNDSEhTUkw5S1NjQ1VHWEYva0RIdFB3eWFkWU12dWhVSXFKU2pNeHpNZ1ZqUStxdGh2eXFRdzNQOFpPWDRkNUpkdjB1ek1LcUVkeHdGMUkwRThLUWdSQ1BVQ2YydGlzZUhjbW9zbVFhWURKWFZpRE85Q1lGYW9Ma2h5ZWdlRW1lYldvRlpZTXUzOVNLY0NITUw2dHNuakhBNmpvQlVqTjIyb3dXa2RjcVlwZTlqYytCMVNjb1JCM3A0VS9PK25pMVNtZkpSSmpnN1NZQ01oaW9tdnJVaXovVUcvek9Va0tKZVdUWUFPck1Pa1Z0MzgweVJaSlQvaFJ1UFg1UnhNOFpjR2V0YVhvLzc5cFNFUmFNeUdIcWRvWEYwanc4MXJxVG83UkV3UGtnNTNUOGNhQXdzeEk0N1NKQ3hSYXdDMmJSSzBmWFMxOUdLc04yRU1uamJtVTJuaGRKNW91Q0NOM0N6bHQ4M0U5SHJIZ0tNVDhIR2k0L2dMbmwxYm81RWttblAvMW1MaGY3SjRTRXc2WXBvNU02V2hyNmJpc3gwTGlFTTFHYVJWRU9SSG9pNC9zUnBGRHdDRUtUMUw3MmxzODNUUkF1RWRVeUdYWmU0RlQyajJYdDR5R01GK2lSYmFaZFBMNzV6eEZIYUlPVjAxYjlPRDJCb3duOVQ5YWVZdkhhNnNsOWdzN1ZDbU4vYlk3WEkwL3JnMm9lKzNLdUVYRTRGeWxjaVlISndwOG0vcnlWS2JNU0hlMmhDOTkrb3R5QlJOR2pJZktCMzdzOFdwaVA3WmZFK0FNZUo3TEJKMFIvanE0c1QvMVM3VzhKakhtcGJubVFrMFRKZzNaVTBFaU1jZTRRcThWNHovYldhV09NNmJnVUg5aEMxNlh4YUh3R1FvaEhkNVhRa3FZL0pqR1dZUGlNblVFTEFjV0oyL25oUHJGbEs4R2hFVjdFYlBjVDQwbi82OXNwVFFmN1lGalpkWVZ3TXlBTXBtT2pUc3R0VUlBSjFHVTQ5b3psS2JRelNxU3Jsb2hJWUZPWHNUenhQdzFOWVdFcVdWeFBLcVNpSS9EYy83SFdpMHd2ZGtkZURSUnBOZG1RYlF5UllKZWlaQWM4M2x6aWQ4bFZka3R0dVRweHI5Nk9YYTU1RUZGWG9XMTZET2RIT29YNE9IZGxsTVlRRUNkK2JwaFJXdkFwbjdmTnJTbWRKZFpBRENxVzRFYURmbi8yQ0g3R1V0RXZ2aFY3OFNXclVpa3ZKTFBUTkZaUTJ6eWhPSWttKzFTTEV3UldIQUpxdFFLTUJUcTN6Rms3M3pWVXR5L1VwOUZhK3dpQmY3Tm5VWDE3UmJDWUJiTnp4TDdYY2xRZkFlUVNLYklTWlFyT0hvcFc1b25QR256Q2dRVmZROVZEQ2R1UjJ6RkYxU3MwTS9OSk1TMFh1ZDhvSm4xQVB0U2Z1eXhOWXlBRnBKazV0OEpCeVhOWGMvTU1jaFBQRzh2U3Q2VzJSYmJhYjhIR0tOUFQxbUhPaUs5M2ZVRXJTMXRaSXMzYjV2K0VJVDdwbFRjZDEzVVBTakI2czlha0JCdHp1bXgreEJaMnhlSnl1RDh6SjhCV2pHVGhqbjVzNHlMMmJrSWpFRGM4OU1uVnZHRlBBTEhlcGRMQ25jdWdGR1grOHdMZ2FVNVhhejhwVGxLTFhHSjU3c2ZlbG0zV3B1L0Nlc1luVkpmNzc4MVZGdXlwbTNaampRT0k0VCtVN0k2SHVOMFErTVJ2NXZteDV2LzEwV213ME1pM2Z6ZWRLeVVpS0pKdVVFdkJ3dllLTWV0dVUrc055UndBN0d4MUNTSmZDNlF1OHRBMGdEcUE0dExmbUN0aWhOV3dtNC9ZemZDdTZqQU50QlFSN1duRmJoSGp4QXJzKy9ZVVhZbEhFUUx6NEUxeTVsbUxhblpiRkE0cEtMa3FIVndTV3BsYmhRbmpQZTM3ZytxeWFCUks1Q1QrL01VVG0xRmR0YmN2alE4V29xSk1jdGtNeEljd1V1bmxkRXhIUXo2eTVzcytxRHVJSU53dTJnU3ZTM2RJRFVUUmpxY05Md2JIZUxMbFgyS04wbkZHaTlvVXlNelpZMVZ3QUd1NG4xLzhHRExEWHJTS1JFR1drajZxd2srUGl3dDBaWUQrQjI5M0o4bnBuQTZ0V2NRSmt3YjZ1UVM4cHRXNTdJeFNFRG9ycmZyNmFqWjVtUVg4OUdoNDhBelNzNkVpZjFnOTQ4VXpNczc2OVltZ25EZm05WFUwZVlBNTVJcnJ3SFVZODJSWnp5VzdUeCtvYVUwOTNrSkNQMEF1eThPTTUrRE02REZyRFhaR1JRL0RQVW9rVzc5bkpHVmhWTU91Q2plaEMwWGlhci9BYUhUQ3M4ZlBRSWFhQThsdmo0Q0MveFVvR2Z4UnRFNkhmd1ZXMmptUHNiL1A5ajVYWnROaytSQkdTaUJCQm9XYnVTVTNSKzZjUXY1bkZRc2F1cE5yQUV1Sm9YNXhvMzRNWitpL3JLUktwb3BVT25wZmUvZHZxcytLSmFNNTQrSktMZ3F2Vkl1aVlCNVBFREtRZEFUbTFoeWxpWE5jaXBDb1FHaElncDFHcE84SU0yMVB0aCswVzZ1c2ZDYmY1NjMvcDV2UXpVU2k4MDV2Vy9qTUF2ekZrMnpBSGRCcTVUb1RPdEV0REFrZnpwbldRR1kvZEpsdEM2cGd0VHo3NDNwRitiMWZTdmx0T1Q5d0ZnK3BmcHVkOFE5WDZSc3dSb0xoaWJRTlB2d2FXei94RWVjQ05RQ3d4OVQ1SkQ1Ylk4VFhRYisvb0dGd3BVZ1VaV2JKaFBlYURBNmhudmkvRWovTjU0L2MrQmVaRmwvOXRlQ1FRM0hFZ2NNTkdMeHRPMVRsY0swM3FpOENOWllXUUxhSG1FS1ltNk9EaEJmSEt4R0NtRTBwQ2o3UTdTMW42ZCtHZkkvNlNFalYwa0FqdUtOMUlYdC8vS2VWNnJ5dWdmVUhGT2RINWQvSGl1L005SER6TUN4SzRWQTBPbHBQWGVjRUlQUlh5V0dBSmtMRFFXc3lwcCtSb1VZeGl3Z0xjS084NEdlRzdtcVdJcmI4dDJQdE8yYjNpeFFYQTZ4WkpYU2hhSG9CdFFSd3plcFVlTXBYSS9RT1ZJUzQvN2srYVFEVW5pQkJaMGM0WVo5VENVb3cwNjFHTTRFUkZZbVNNSW83YmZqUHViZUFSMWtRdWJCZlVIL2k5RWN1dFkxN2VibW5KSkFiRWREcGFRQTJ3RFZTMGwrdXloN3AvdHlFMExiNS85T01CemFFOWZ1dWhVV05hZEFBdkQyanlpRjlBNU1IWU9JcU1TUUwrSHRoS3FlSUVqN0lDNTZhM0dYUlRtYk9pNmIvZW5zd0xmampndkpKTTJuaWQyMG1MeWtWeUxGdUFpWWJ6MU1PQXNabmZMK08waTNJUWcwUlErQ1U1M3NtblNrZG9IWGFzU2t4REJMbS9TWEdWNzBNN21HdWRjY25RRWVuM09SRjU5c3oxd0JXNG1WbkliWVhhYm5UTVJhV1ovV282bmhPOG43NTZpeUVuR1NuKzMzOGE1c1g5U2dPSVBDay9VWVpOSXVxQUJ6RmY2OWlTdG5iOGVrdVVzQjhPNDlFK2xGQ2Z5cDhlNE1pRDUrcGFkKzU0dDFYNk1Rb1NxNit4MDFMY2ZTVkNVZlZ5eEVXY0sxckFZNDI3MU5nZmoyOXFlZm1NMXpBb0I2NGdveFpIamNaWnlkbWxVWVBiMjFYU2kxYW5wQzdEWFRDTmpvbUttUk0wNWZOUkFlRlkzSERhemZUSlhXdE8xVVExdUYrNjY0ZDhEcmFCQyswc0N2a2J1N3p5ekR4VGIzMHBxb05qVEI0ODZXRjZzL2tPN2FiUWNENVByN3JXajRoZ2RkUGxGRGowZDFpNFltQ3NBREpMdU5nZVdDbEdxNnkzSVFNcHhUUE1uWFFZV0lYc3YrSXkyOCsvYkJqQXF6VE9DUmNjck4zaEZla3prV3ZzbDFmbytZK05MNWFBTC9BeXJJRnBVZXZmaktrOTVXVXZ0ZFp6d3JudDVqRTR5MWRHUHZQUzdKSEREMGZ2TS9jdW5qT21vSVp0NXJ6NVdleThQRSt4Q2IvUW1jUlZJRjJkQlBUVU8vSWtTVmVxalJEQTgxZU84MFFmcDNiWS9hdGE2cXZRV1Uzd3Q1OG13bXVZZm5jYVBYamptNk15dWNzOWlkc3VzaitpZVBta2FlL1pqRFQrbzhtNjZndy9wbW15RUxEWHpST0ZJUkx5TEtueHpjcE4rRGRyWDRkN3pRSk5xYmUzclU4aUFMbUFrUUJ0ZUZVdHlkRkNzY1F1cUJuUXZrT0xXbjlocXRxZkdzRWhWd05XVHl4UVpOUGVlVUNDam96cWkxRURKK1VTTml3aXI0TXVHakdUb25BZ3JZcDdldFJoRHVmM3RUL3FTSHo3UGdweEU1RzdybnIyOHJGUFBER1kxeHpSd081NGthaEF5UnlGMkRJWEdQWWo4d2I2UCtxNUxoZXNBellpYkFuUGpFUXYvVDJ3RFVOL3VtbVFoemV6RnJNRXpBRG1UYjlmbys2aU9BOTd4b2FzblM4YXh4aFE5QzU0TnJDb0Q4SVpxaGtyWDhMTGl0alY5TmtZL2xYMm9DWmJrQVRpeDJLMXB1UlRCNGVzNDJhK0swU05SQkYwZFhKMkV3UUJlelVpMEhLRng1eG9yQUZPNDlFOS8xeUJRc3pFelQzdVRVSTQrOHhXdVFOWVpUeXFycmNKUmhHaGt2Vjd2VXFMWHZvOStSb1JORlM4QnVWY0lxME5kWDF6dmJYY3ZKVGZtMEYrRjVlODZUdnpsNml4bzdCVThLZWREQmZxczZLVlVFMmhQeW16TVQ4SVpycmxDMnoxbG9sb1UzejNyZy96NTBHVENFM1B4bU1YY1A5LzB2VDJOZjQ2ajVTQytBR00vWDdab2xwWEpqYkRLOTZGQ3BFT2hOR2FMOUduYWI3UXNGenBLWjZzU2M3dXhTOVlGZ1FEcUFuZTgvbmlyNkUxM3FVZStBUnc2Mzloem9ZRjAyeXh5M0hLSWpSdG55dzE3RHUxcERMRHB3OU42bXFGV0NXS04rWGx0MWpaelFFdjJTbEhacVI0bWxKekc2N055Z3h6THBVUlRTWURPWmppZU5wdmNERFlpRnR2M0xWTFBpMUVMdWxGVHVmaFBJZHF1dkx4aStaR1NET090OHhMZTdML0NxQ29HZmRRN0xXOFJ2SEZuZnhSOWlHV2pWQVROVTYwZHZtendjMWxvQ3VEZUsvTWM4cnY4QzFnVTJOdGk2TmFuSC9WRTRoc3gwQVRUMFJwSExyS00yZ3M1S1FmT0taYVhwQjJOR3N6YnBjME9xU0lvbng0bXRPRTg0cEJ6T2VQSC92VnNYcnpVM3lFVGRER2t0S3VmQjU5T0hkb3hSL3ZUYnRUQVQ4YTBTaXkxY3E1aXUxNHhzaURsZjFhWEdZc05JdUVNdmtJWjFRMTBEcHdRRDdzLzNJMy8xMW5rczFXcmlTOXVxVEg0cmI0dHNIWktDQ1B1Y0p5NnFzOTNsazdkNHdNZzBBT2JrUnpmTjJvQVVrNVJkQUJXTHE2eXBDb2hlWHNZWVk2M2NEQnFIM0JJZFVsSmx0NzI4eElBeXFmbmQ3dkNXUHY2RWJsOStvRGFlZ1lmKzdlTVE5Rm41dHNHMGkyb2ZGb0U3R3hNcFJLUFVIcE05djB6NnQyME1aUnN1ckg0Q1NJNmlPeTNmOE1DVE8zcEcxVVI2R000NFpYaWxtVlhuU2JSOFAzc2d1bmdIczNWRjNQVnN4WXMyRFpWUnZsKzk0cmR6QWlneEJybWR2d0N1K0FpMWhTRUpQV05raU9BT3BVd1FpWGVpa0VsWG1rYTZBemVzMXAyczV3NUY3QUN5bGhpS1VjU2RKK1IvWVlzcUtZZlhOaGJPTGxqL0EvKzZMRjl5RFhDdzZSVmFoL2dhRi9NNlRhUTd3U2hOQmgxTUg4YWV6cGdpb3hwcm5mbVNWRDdWZU5USlZXSU9tRzVCT0JLK1dDanEzOWF1YzZ1TjdZK2trQkp2dnVQdk9KMFFqU0lyWm93akt6aVdQaE1yY3BYLytBdXpib0hVdmxJQjZDeExJVzdFYnh2ZEljbHhQSjhNTUdzdDc1VTFTRm5lSG4wOXBucmF2c1hzT3FDS1BSMnE2bk5UZlh0aXJoQmhudjlyUVM1SXNXWVZBNm5pZmNLaitGWUtCcXk0bC8vT2NwZzdzMEtyUGVaU0w4TkRHZG15QmVvdGRKLzBFNTdiUXZiVi8wU2lEeVFKQUhOZUoyMXhTckxzdTBPOHlMbWE0dWE0ckhPTjEyc3NNM2JjSHJyRjRTKzVtdVQwTzRYWUhobUMxemlmb3lzNS9SQnJjZW5WcVV3d3ZESHpTcDN1TWlqdElCZHE2RHJQY0l1TjBKR0FLTFZEZGNQKzF5UUxiRC9PWk9zTENkU0pjQitnWTZXTlFkSDBoYUVESk5DSjg4dUN5b052NStPOEMrSStNblZpNXB1T294dGl5VEN1QW1PTk5zRFlXakpBWGlYQ2lTVXhXVHI3VE5hZ3poZGpuaVltYjV0cVNpc2RKNnZVTlhGYStJcnhUOU1PYWg4eC9hZzc5ci9abUF5cDNjWUVtcWhxeFZEcUQ1M2l5S1pyanB3N3pUVFdMUXlITlR1RGozOFUvSC9JaXZTN1FEbURKVHBLaFdnOVZVL1Z2Wno0a0ljdW1QSTNvd0s3STRMNmdsNGh3V0Nobk9SZDhsKytEWDFwRDR3Y3Q2a28wWW9hTGJiK25mK0IwOTZHZkJHcUMzZDlxYlBxU3dXWncyT09qdzI4K2ZIbTkyVnBuOFBOdXFsb25xVThVT2p6UHh0cERlRS94dW85TzRHT3Y2VzRBV2grV2thZWF3M1A1MVpyeEczeXJBNno4cGY2VitnVEErWDl3YS9kRlAyL0pOWXkvcmRJQ2VMSXRZc2pZZFpBQSs0SWxPbTFMYUUrTEFpak5NWGliQk5jbm5Sc3djQ3FISjRVbUVOQlBhNDNIM3Qwa2JmVkF4dGI2RU8wRmV3dGhPWnhpSmo5TDk5RkZvT0VxK3ZJY2x1NmR0YWlOdVlYbUl4NkxUNERzaGlONWVLQ3ZYSCtEK0MxOXVmSHk2QlFZRWFFbEQzZnk3eGg5MmgrdEVBVjd5VHdhZTJJZHVVaTh6dm1GMUFYR1dhNHZGeGl5N0NHRXNHaVJobjlIemlYV0ExS3NUK3JadGJaUE5ydmZiWEZTb3RzUXJ6SlMxcWhKaVpGL0REalVxSVBGTWlDMmxpSkFQYWxBVzRwdVoyYmlBbW5iZjIzNDg3VUc2eUUzT2dBZjh5N01WbHBoOWRKYjhMQTZ3ZW9ZZzhneWpuc2h1empNMzJtUWUxT2Z0azRabDVCZFNqTC9LRDEzeWZtc0NVQzA4Z3ppODkrNkFTeE8xVS9FeW1RSThzdnorWDB0RGpsOEdxR0RFRjdaMkVheGJObnpCeU1BemxlUkgvd1lTbFE4YzNkQ01UbE5SWWk2NTNibTUwd2d3Sm9wUml3WEh3N212U1VLdVRDaW9waTl5U0Vwakc0YmpPNjhNbG90eEx1MjI4Z0ZtY1VBRVZzTHIxTXk0bVhpTTVDc0FXOGFXOUM3UW5IRUs0aGFNY2F1K1ROY0Vtb3pxcUVHei9pdEFmQkI4M2Q0VnQzVkhCRkZnV0JpYmhVMGlsRm01OEZ5ajllRnR0Vnd6S0Ixb010QzA0UWdhK016aU9jbFY1aWxSVFphb2w1dzExSXFPeWpLNEo0TFNodUdNRGJYQnlXNmR0c2JCZ3hwelgrYStuM2V3L3FPUVZJZnFROVQ1bHNhVFhwTFlRWXZoLzFtVUszVGRuTlVSMTBNVTVVd1g4UFFQUnBlU3Q2dTAyQ0NxekFLUWdYTzNXMWRxNXdtWWI3YnFCSG1lNU93LzZRdmVZelVlcFdWdlYySyt0bTVHYlIyTjJqT1FXbUpPQk1KS0xGYzBCVEpjYXRxa3dCU3ZkY2ZuN2dtY0xZd3ZqejNxV0g5ZW9wcmMvR2lZVnZBVjYvYlpjR2JQajdpcWI1ZDJKRE5aTk4yWTc5bjJ1QmtZdVl2MDU1TUFoRmIxYTdaSHYxbzFBaGZoR0ljV2hkbWlZeFMxdy9ReWJYd3RCVnRPKzgvcVVXcmdKbEUyODJXVGFtMmU1SzZDZzBZbmIxMGwzb1ZubTgvdmx0SHVMMUM5Q3hreUl0akYzUGE3ODhYYlFTVGNTUEh3Qi9HSXMyK05aTGlnaUtoVTdxUzZXQW53b0o0WVVuNVlEZ01kSnhqbksyemFncXE5QUpzdndTb1htN2NXYll1b3FRSVdKWS9rZmtybmM2OXNJWG44dlJ2ZDlLTkl1NGdONVphUXlFaTBSMmR4algxdlJacUFXc1JqWUhlQXdNWGhINjdWQjk4ZkgrOW85eTZXUDM4c000WDdjZ3AzS1REZ0d6M202QjBWTEF3Q2NneEM2eFZsdUpwMW01dVFxYmppT3c5cEhJSncwK2duQ1lVZHJQVC9kWUI3dHpxV1gya2J4Y2VaU2FPaGdJTGZSQ1QxNFM3OThjQktmeTRoNEVra05BaGZVTURhYUdtbHpUTkpIRFVwWGVRUEc5T1dzdGZMdElqOXJUZ0ZhemxrSm1pUGNEK0Z1ME5yR0hyaDBjNERUVkhMQ3pCVHQxeDNGbllkcnBVRTlZZWJhdjZmbXFpcFg3RWFlM3U4ZTdLbEdjV3Q0czk4alR0aHpZYUhCaXJnWk0xUG9YNjJXK00yaXUwR0ZWbkVlbnh2dzFBVU03eDhXYnJhTW1pM2V0dWNEVThubWVHcVBlTjgxZk1QR0d0K256aUtKZ1ZNcFVCdmN3TmtpaVhNOWZYU3Nwa3hBclVWZlAzN0lxWmRkZ0trTkJza21FSFZDb05va3BhbjREUDhES3lUMS84Uno4VjljTjZTb2lhbU5TS2tWcGs4Z1B3N2dKSllscllpQTlreWswWVZwQVFNNzJKelduTUYrQ0ZLaXdqb0xYcTlKQkpIZVRmdHE0QXM3YnhpaW1uL0hKbVYwQzA0NnZtS2I5VWl1Y2VJYU5Ddm53SHlvSHR2QVEzNFBRbTBnNDhLVkJzaDhMbHpFSG4zMDJLVkxVMFpaQWhFaWZXQy9uSnNSMDZ2NDltU05Na3hIdXU5L0RqYmVYWC9iQW5CK3NORFZ5UFNwOHRheUtKaWtkcHpMaDY4WGpNcnlNdkM5Y1JVUHF2cGozclhrekk5U3RBSVdKRmxLNWdiMXBITDBrQW9mcFJidmx4L0s0TjczRkJwL1R1RkdFTlNydko1NXBMZEtrZE9FZVkvd0lzZGV3N2hRbHk0cFFwNTh3TGpBR1FFaGs2Vko1NGVHcG5lSDhLV0F4SHFDNHdXNktwbkdJMjR6emdWOUhwenNkc0h5VVNwODVZRFYyWldBSzVqY1ZGdXhpeWJLRmlvaC82QWtTYXNyTmVLVVhDQ01xY1hWWE1vOWdjVUh6NEt4eDhaM3FxaVZxQWMzVy9MODB2Qi9JaXJ3UzIzQ1JqVzhwNGo5eXhJWFNuVlVLZUNGaDVOaGlaeTJqZkNwaGptTXRRd2V2ejJrRkJJRnp1MFd5Q2ZWaENmMkpIaDJoSEU1d3ZoYzdnbHFhWHpPd3J4WlZtSmpVMUViWXNpWFF2VW5DeElKcXVVU1R5UFpPR2toMHVrbDVxZUhLZUpDUDhwN3ZjeFN6VXI0ZW5vT0hoRlFFRk9WaUN2dVBGaXMydUg0Ri9VcHE0Q1NpWFZ0TVVZdGpwbS8zcUJVbFYwaXFLMmR5K3FFZVhTV2Z6c2JHdmVBU3RaSG8yek4vdFpTZDlHTkNMTXluNW1VQkNabEtZei9XVlJVOFA3T1B2dGZBRjI2dTlHMVpkd2ZYNzkrV1EvNTBROUFnTzVkSG5lamdhNXRPck9DQm5XOUFuYVpFVFpJdnAvbUpPMGJaQi9yalNGaWgwSE9aeDljdXBqd1h0TndCbVBadVQzR1pjSjFFYmdWN2R0YUtjc24xWXAxT1JyNnNhZUdSM3NCcFhRVmZlVkJDVG50K2prOHFuNFRKK2FBS3c4UmlUSFlxc0E2Q25nM3BwSzJaODQ3VmNkOEdrKzAyVk80QlV0aDYxOFpkMGVMVW90VTM0enVCOGZQOVc3amZmTEorM0pGNWtzNFNDNVZGbGVUKzJGNmppQmVqajh4KzhSbFN5OVVSejVqWmJUSDBDbHB6OVMwWGU5OGg4NUJ1ZjBTN1RaQTltZUNtYzFhZ0pSSFp0QVQydWJuUjFJRmRmaEZ0MVpMaU9lSVMzMk1jTk5YelV2YVBWMHlRRDUzVVVLL295eG9HdW4rbkRSVm5nVVM1WnJvc2tyZ3RkSElnOWtFdkVLcWI5TldTSWcrazdLc3BzZUNUVXh6a2h2WmhuNDUvakdJV3hQaWZLOENoYXliUml1NmN6ZndLR2kvSktBTVhUbm9ZTVA3eWNIL1BSdE50djFRYzdKa25McG40czVMVEd5RTkyNUpGY0NzMGlRWllhUEFoaWdCRDI3K016czBKVkk0ZnJSMEpLekJLQXNYY0grd21vaWxtRVgwL1lBdmlsRDBOYlJ0L0dnN0ZHMFdlMHZXdUxtSlcwRnJDanVxNGozNVQvMUh1czlxRFlWdDVRQVF0R0g0WG94cUNabldBY2I4ZEVud0JhZXAxaHA4NUp1eTdvVjRYL1RZNXYzN01wWXJyc0NtejJaZ0VJYWFqTnFhMlZRYytqNDc5T05XNEJNUkJOL3l4L2V6QkcvNWUvL1ZOeU9vNG5oL1Y3c2NENHltNEtmVEh1RjNTZ1ZmUy9ZaVpWbWc4dkRKY2Z1NDRlYWVyV0hJYnl1Z0FRcTluamh0ODRwZnFoc0M2YlJLRVBqOEdieTB6Ly9Hck1uck1nZlBGU2ZQTTl0U2JFWVNGU1I1Yk9ibXZkako4OTg0bjJ4cjI3OXZlVnVvRzQza0RxcU5tU3ZuTlFwTnVzUk4wSjVYdTFwOSswb0JqdCtYemVycVA4RExOeGNIbGdVa0NtTFRPRWQ4ZmwyMjZWZzd6bFRQN0Nqc3VldkYvZmh2UmtTcHk4dlFSbVQwSGswOHdCeUEyTkR4d2ZoZHAvSnQxNDN1NFdqSzNkZi93cHZTRVVZSWZZZFMwcHM1QWxERXAwaVRBQVdpNVhFeHdWOS9RS3RLb0FZTVZ6MDhHYlZJbWZ3amxjeFZnSDlESisvQjMxSzB1RjdNdDBVWHBmOGNNTHg3RWVzTjZyTVZJSHVtWXRGK2pqZ0tmOHBydFRGdnp5c1plejkrK0dsMnk3TEJGV2J0V0NwdDNMK09nNWxJZ3ZRWTAwQWZoV2pEbGhDV1VoM3lZandoeDdaaHBETmVBSnJhbGpwOW9aRjUwZGl0bHVYeFpsNGh6SndiN0dZdlNtbFhhMmZKS2JVby91c0xiNkxSdEdiY2RrbXpud0cvdHJHcEZSVStPTGplUUFSVWpOeGhwTG5SckZWSG1tZFdFb0F1K0NLR3BKSEFmellYQWh4bHdWSzlNV29nU1hiMHJDQVBBMVl4ak1Rekd4VUZaNllUbkVrSzF5SDAxY1NGVHhNVHdKZERDWGhQYzJsTjIybVpZcllVZ1pjSGcwYzRjYWU2WXlSdlZ1UHlpOTVVcllDOTFnN3lYZjZvMXFpMnVqaHNHTkpMU3FzSTNlUHA0a08rMDZJWXorWktlN29rRUhjNUdlQW55Ty80OXRKdlNIa2drQ094V1VQY08vUUpaRHlKSnlsRmhIVUlmSEFMYmVFMnhXdnBTRDhDelNwSEpiSVRwZGZ6RnI1QWNxNWhJamkxeGhkSDFSZnl5MzFXeE5CR28xcWVQZHl2Q2VNaisvOFBtSHNaQ3cwVTBrRnk1TThWRS9vVUpYWjB4aGw2MVE4N0dEajhmM2MyeHkzcjFzWnkvWkJ2TG5NcUN0OXZvekhxVW9CcDZCTnUvbGR2V3p3MWwzdTV2YXBiNWlTNmFnU0RqcmFxOXhyTEp6Wjc1WW83SUJBdU8zb2huRFlwWlJjOXVPMnh4bnRqZE5rTktFbzZVWFRKa05paUxIeHZmMWdMcXllZ3VTZWd1ZXYrQXQyc1RydjJ0N0lTQWFKaTRwUXlONkFOT1ZTUVRRajNNaEpTWVF6a0tiNFRMTlBVTE9CaFgyVWpmMFgyU2JPcHpGOHFyU2dqbVFnY3lEeitpNnRrT056bXZRL1NUNnh2SkdHMHdYZGlDMFU1WHV5WnZHT2d3aE8rMlQ2SW9hYWNKOHF1MzhUWE9pTHZ1b284SlNIUnROTGRueWFXNmFZSTNObHg4WU9XVGdTcllLb2VXTTdRUGtObFVIbTZtM2hvRXV4UkN5WVlWdEoyQlBmWlE0UEp1OUJxTnFmRGVTQVZobEhBSGFucmttZlFUN0d0SHpENHFRRFRZcThFWnEzWnVHclVaRG5nQTRKbEQzYWNUUExNcFdkSm13Y1dBcHVON1RHb0tHQ0dRNnZWZUxTVzVFZEZLUExHTnpscUtoenk2Tk1GTlJ5ejRkQlVyRHh0MEduWDc5V1VBZEhlUllqUC9GTmFydGlodVpQVU1zcnhmd3NFWERvMjc1WFF4V0ljSm0vWHlFUEV4VFkxeGhVNXZUUnlQSmFXVHBPSXVzY2x4UlhMM25GaHpiTzJYYXRIM3hTT0xPdWFlWkZ4SVBidi9tYXFPaGlxK1hmRVVMYTlNVmZjUW1xTGxQSFdBRHFnR052YnJtaDZYaS90NFVIdlZKY3pKNGFOQXA1RXVpNERQcElRUU5sZEFIL0VEZHBvbC9kRUFsb3NQZHdnTG1GallSdWJwaTRYbEdYZFJraG1oL052ODV3WHR0U1BaYW9SemxnY3EyTlhPOU9nY05DMXJtbjZLajRrdWE3Zlg4elhIbjN0SE84VjhGaTdySG5udWpHZmk5aGUvWXdONUpuUjJhUlZUaUl3Rmk4KzZpQ1pKUEl1SWUzbkZzSXRzY0hSNmZiNyt3bzZsMTFyNG1Mdi9aeDdPalBRMWRTM3lGUzVKQkYyMkZxVWxUNjc5VkEzQktFSER1dWExQVVlN290RlZxd21adng0a0dJZkNhc2dUVVVDOFlqQWhhY1o0NWp4Z3Z0UEw3MVFpTmdJeVlsY3VIbzhoZzArK1UyamJwb1pWbUQwVlFqcDcweDJpVGtWT0ZnaTkrT2gwWFFjWFlJalU0N1BMR0dNdGpKRGxFK2phbzhRcTVDTVdGbmo1dDhheHMxZmlOTmZJMlhlbTN1SG1BK25EVHduZWNmN09ONExGM3ZDL2NldmtWRmZEeVprRldnZDk5VW1BcFBvSWJpd1lIeTVHTGpndS9jRmp0Y2hyYTZxaXVGdFY0bDVOcDdnZXJpTmw5MTA2SCtYQ1pqM3lVa1ArNHdMVUNnd3AzeVFaR3NHOGVZWkZaT25KTjJyZ0dvV25hNDNUZEFPUUtjbE5iUi92M1RMVUFzNkgxTEtscjVYYi9TQUQyK05mVEc1cDNGZlBjdjNHdFpybHJmd3VkWURkL1A0Q1NGK0pyWlBVRHMya05BMzhrb0NiUGlFYjg1WUlkbHZYcFlLNUUrVmpvNy95OWRNWWkwYWh2VjVMb3FLY1JsRW4rWk1RYnl5dkF4U2VJeGRDUUtMcENQbWg2dklENWpsT293ZS9HMXliNm5RU29STUt6cFhtV0lNOTZLek40eFRhMmF2MWsxeVVoT3BUc0wyYzczRkhtQnQ0U3RJb0xqNitkeUF5MDIvM3dWY1ljQWZDdm1aSWE0enFmZzk4L3FwTjd4aDcyTkNaZ2VnUTBsa1NQSjlXbTlqK2dQbE81T1RJTFZJMzFqaHVCTmNHdWtWMSsrbWtOMUpIcWhRZDcrUitlN0M4dHd6WnNKNEMwZEdsMnc4aTN1aUtlVjR3WUZVcUU2bFlWZDVTWCtzcURVV0t3Wk1YVzVQS20wQlNUMXpENW1rNzdtRnhSM0FqQzFuNUpPVm1VUEMwZTFYL3FaM2RIZ1Bta0NaRXA0eDFBeE1ueHBZT09iQWxZZVk3aWJHOWxSNVdhL1ZXNzJNcHhVYUlxaFRiaHY0U1Y3S1lwUDVpaXIxL2dUWUIxUVJqcXg3MkNCZGZpMTlxd3J2T0FpZ0ZKVTRwZXowcm1KYlJZN01NSUpndUlxekErcE9JS0VQOXlXdnB2aGlsUkVzYm5DcFRCZFRxZ2ZIRmk2RVp0NVJidXNrelFyaEp2cUJITGwzYWdxL1J0akljMmlyOGlkbVpaMTM0VDVtNEdZVFYrdmxlbStvRkVsMTJoNHJvMUxpTDFPNjdQcTVvVkRZdFFRUWJQcGVLWi9xV2I5aEJDSkNrdUlzQkQ5MDBtTUNqT3dXVUROVzZjUlJ3T1JaRC9XRjV3NjV4OEhUS3hPUXAycDU1SEhkMDViMkxjbjlBejlDL0pRNTl2RUtYWWM3OGhUUkhUcUFscER3eitNZGEzdStqRktOUUNNZDNuV05UcUxRVk1vNFVTT1BkdFM3UGR3dlNnTTJuc1ZXNDZlMDFzNTNBL29YRTJ2ajlIcmZxRE52SWlSRDUrTjZZcVpQNHJpZ056bi9OaXI2WllZRU5zSUxweFhFYmpZTml6RXBEcytWWERldWd4R2l5aC9iR3p1SDlNbWx6d25mZEdmbFR4bE96eVFnMGpTZURoVzQzdUluSVZkenpNT3M0Z2NXRDJQWldCcDIyOWRVTm9WTFJwU0laVjBITzRLbnBKQkF6UXBXblBBb2ZOZUxPOXVXTVdIYVlpQ1ZVTlZyU3luT2swS2RmUURJSlBIWnNWSEJhZXFDb0k4YWt2RWF4bTBNUmxsSjBPVnhOVUNDbUpqZ3BQd3BwVVdyVmVURHdkRXpQOU1GMkZPZmVrTTA4ZllidzNXTTkzZkxVMkdxaGVoV1FSQjhJOXVDbjdIYWFlOUhrTVpBZURENDNyMjdRcjZ2M1RSVVRBd1FkekUxRFlHUmNRa1RYUEVOcHZwOFYwY2FnYUY5dWk0QngzdEM2VFJ0RUFpN0h1b0RabXdlK1UrTVQzdFdqT1VxS1V3YUFtRWNTZG41RHdGVlViUnNqUjVidVlXYkdiMGxmb1BpVUM4WEVjaml1cmpJaTdMZDc5RS9tRDAydDRldE9BMHUxdGU5MXR4SVBXY2M5Uk5HQkNTbXJDYlFBT241andzUnRoSHBqNjlOVm9rM3NPcTFKT2hqdVNlSjFRNHE0L1pmNkpKS3QrTWkxL1hLdlBzZFlHVkRGWmtlRnJZcVl0bDVGZ0VsU09MYnBlbzBzMmo0RkRwQTlmZDhwNnI1NHBMOWpad3E5ZzhEWnNmeVdTMHI0em1KVm1zU1NKVyttQkZQRHJkeXhyeFNXUTEzaGh0RXNzbTV0QTViRjB6MVdrSUJ3L2ZzL3h2NE03d3NLOFpxVG42RDIvbzdjWkNqUFEzOGltTE9BbkVSMC9qZlBwRzE2TU9sdytkOWw0cXp6aExBeHFHZWFPTTlITTlhaGg4RTdyanBTYTBaVlk1TUl2dEg4SllDLzl5aXp6NE92U29Ob1FlWVJSZEcvQlJhTUFpeVdxL3lqb2tSRXVMWnZjcnhyUWN3SXFYYmVMMDhMTXBlYjlabmYrSGJpTnZ6OTB1UWN3ZElWaVdrNnN4dzNGY3BaUWUrandQNWVsRGVHL3h3NUxzWFU4Ykk3QTQxb2hpSFIyY1RYOUpUTnZvR3hMRDlGejM4UGZqQ1Q1TVAvVTFzL1dTaUEwektLTU8vVlB4RlB3Z1RsN1g4SEFrdnpibmxlS2lrbGY3VEt3TzY3by85RS83TVFsNGMyWldXVkRDY01kekN2OVJEcUFHcjIxaUlSQllsTGxPYVRndERzVE95dTdKR2EvcUJmSGFDalhVMjZDWHVRNHkwQ1IzZS84ZkNYVG40VU5KYUI0RnUyR3pFUFdZMFJGN3F0MkNLb1poNWtrSWpnU1FCcGxBcGp3S3UwUnNBRjBMZ3hZMm5VZU5ZOVdzQ1ljZWRrWkxlQXA3NS81d1B4NUZibVA2aWVEUFY1eVBoMzJZdzMyMDRoc0RuZUU5VTlNRmhsMTM0alVWRVIreHE5L0FZemNBMVlEK0Nmb010TUpCTExJclN0dkU4K2dpK0M5TlFUOSsxYUJ0S1pWMk1UWndVU21NcXl4Q0gvaXhsck5qZDJzM2NkOGFLcUNZa2Y2b2k5cTBGUU9lUDVpMnROT3pLendVS1dUYkVsUXdqVzB2QldDUnZvOUYrSlU4ZUpmMzZUUE8zeTdzZ0FKVGFQVloxUjJZcUMrWlAySG4zamFobzdRdHJYZEo0WmtqcTdFenVVN094OTZCamQ1L0JIUy9ZQmM1bFFHUTlHdCtxZEtvRGtkVDdrRDcrU014WituWnkvUjI0aUEvTlVzTUtXQnpvR1R3YjJFdlZIV1BLVUZiekdjMjNmN3pLR1M2emlnQVp0QTRuclRmSHF0WnFXZlU5NGUwaVA5dGhoS1lrazhIWlhnL3RNbjZzMmFPOExxSVdxaGpJUm5kMHNyZXppSWVjUnhpb3NsQ2FBdENtcVc2SUFtaGc1bnc3TE9MTHlRK2V1MjY4ZVJiVGJNaVdteEtZOU1FNWZEVUh5NytWVXZ0OElKRkYzRFEwOUo1aFN2Vk81ZU9pTFM4RjhRNU9jTnFHYWJCUTN3SXlwL3p6T1FZVEx2allqK3hJU3p4SlN3a0FHRERHUnFvWmJDcnBoMVgyMFhEZ0d0c21oN1lHbStKVHd3MzJrSjlxRk1zNUU0ZGRiTGlLUGtFbXNXbnIxbFdRSnhWR2h2Ujg0R2JwN1BqUnd1NGFGb2JhZm43UUpPa2J2eVp3UDd6ZUErYXVuUisxZjlZUGdBeFRXSE5KbzRidG1GemVlTzYzNmx3bGhGeWxiVktLcWY5RFJWUzAyZVEvTVFBMnBUc1F6TnZxZU56NHcxL1RaUW9VV3dnNk8xcnkzc1FsRGxRaFVrczgwYy8rZ3NGR21RVGFoUXRrU1doL2VEWmhXWUZVYVBkdDFFUTBNK1UwSkRicTVaelk1dFJsdzI5d0xUYjJvQlRTeG4rS3dMZDVTTklSRnlua01BVzl6Rko1ck5GZjY1MDhmOGR1N09QTitsNDY2dVFRWUthd1VzOXpwM0Y3TWpjc3puN3lITTRnbWVwSXRVZHl6V3dmdVZhcnFYL0lBZ3I5d2VyNWRKdW85blg3ckZKU2hyejZDNzN4V2diYzFlbGlJYzBqb2o1RjBYV09VQnlWS2lJWjhTRm1XbFpyR3ZZZmZBTC9QdXhNaVpXYjN1bHFwcDVEb3AvbXE5STFGdU9HVTBuNElEc250VTczME0wRVRWcXAvcEdHQlNza2p5bDFRK3Vta3ltNWNyVDVSckhCWDdIa3hGeEZQQm4xN2t5VDFKK253TXpQNFZ2YXpsNkYwcUptbThWOVRlaXFzMzhMb2Rjdyt4cWYxeld2b3BjZ0RsUmN3by9mS0FPTytWSFkxbXJtYy81SnlWMG1SRVRRWms0aVZjTk1ETTBhaGJWVVRnQ2RnczBtMmxZOFh6bkNPMmFGSzRoWEhPRVcyVHNFWlpvUDA0Q0ZNVzNjRUpUbnR0cFlHK1NHWDFQTXpqUjZxMmVaZzVaenp1b2xJOGdvMU9CVnhZNHJHSngvemE1MnR3ZndhVkdVODZUVC9Obll4RlFMYkR5N3BJcVhpTXkwMnhTdVVUb09vTGxEbmR2L0haQXR5TFg2R21IVUpxREFNTldVeTUzUGZFRmFVeFJMLzE5a0E0YXBUQ3cwSUlmRjRMN3diRDZSaEZ0TzRhK2VYNHF3TXNucVRPTTJBY3FETFVycml0YlpBbUZ3VTZoZU96OUNzWjZyNnhjVytCdzV4bkx4ZFkvN0JQSndpTXB4bExYaHAwN096QVRiSDduVzVZNU1sUmVwSzBOY1hBTnZIbkhlQldRWUduRkdYeGlTVGJROHdWK1JBb2tuL2h3RkZBZHdZZkxoVnZLOW5xa1cvRVR3Vll0Y1h3NXM0QXp1YTMwaHRNTGdobThWSmFZQkNacUhNZmJnZUxQbFhqN3NoUVpNbzBEeHdjcGVnaFF1dGV2MGIxUmp4ckhvWU9QY1NPL1JHRlBrMHlGSXhESmRJaHR0ZjN2QzFYRFpXaFdnb3BBR2xrbW90NUIrV3BnR0MrMzlzWGI4S2FvOXJ2V01FQUQwOTNGb0FsQmpyTGhVWWhOdEFYbm5ueGZqY1greURzcE1XRHE1ck5mejNSOEppbDIwZFZnRXBkUGdYOWVkYWRYL1lyYnVscXMxT1FxN1NTcUlBVTNSMXlSZVlISVhLbXVQUFd5SThpd2V5eFY3TG9kY2Qrd3Y1V2dVeG1jZXhYZmJYSTVLT1BtYmN1ZlJPM2FIMG1uMSt0NEoxc1NnMlMwOFBDanNkNXd2bCtGL0NnUmRZcyt3dVUvR2VXZEdXYnNMcktKSmlEc1BpWGxTeSsraXBtS2graDJJbFRMck9vbkR6MW11MDZBWndvZHRLWXQ3NngrUzdsbjBQS01yb1Z3M1RCQUYvUDNibkoyQkJUSnppcCtPOVFpQmxpd05vcWJWT0N1aDh1dHdDdm9FVjRqZDUwQk9XdlFUOWFGNmFHVWh0L3JHRVI4aGJCQ2ZxU1I4VzRWL3lzcXFhdTBmcDBVUmhLKzU1TWZDd0V5WVp4SDJKSVZMSndPNGN1Vm9IeWRZSE5qOUNrVUd0SHpKWGZsZ3ZmRE1wRTVBUm8wbExaRWtDSUpyNWlMVjRGMnRHMS9HRmJKalMyOWdFYXd1RFJPV3ZyMEp2a0drdkpJZmtmcWtEU1pyME04dXNLTS9zRHZGSSt3dEpFOUNORnBMekZ2ZTJKTm1PTVEyMVl1YjduMzRkYUQ4YzNHTmhQbW9xT0dLc2pZdW5pZm5RcTRTZCt0MkI4Q1VuSWZuTXZLWEFqYUwvYnU3ZzRRbGxWci9OWVVXeTdOSTh4NStLQUIxRFo4ZXFEQUh2dytkdHBudjNvY3V0RE1nYlM2N3B5VjY0cWQra0N5R0w4T0FhRmtKdUgxVzdLNE1qbVdWVWRSQmNod3dYQ2JBK0dWRmlnZmVZdm5mN2c0Z0k5dWVJZmcwMXVRVy9ZemlIU1ZYVEY2ZXEyc2RES2wrZmplcWtabTgvdnJCM0F4YnNrL3hRa25ieWhLWGtkRGsxQ3czLzM3VTRmRmM0Uy95RVBndHJIdmZMckpnRFVBeWEwWlJpNkJlZTdsektUOUlvQlVINlFqakc1LzBKRk05eVp2S1M2Slpsd01sazV4R1BDeUM1UFA3MTQwaGg5eFpobGkvSmVhR1VJeUg3RkZFV2ppNVdWMjBsM1RVZWovVEx3eFhVS1RNMlVVeDgyVHAzcTk2ZGpXeHVyQnp6ckVzSlVoRVJFY3lFbVljalNKQXRzbjUyd3RzeGo5T1J4QjI4cXFXdFg3S1ZlZk01WVgyRnRQT3lDUXBQcWxqRlVObXp0QzhkWVJGV01qTm1OZ2I5TTdHaGxkWWgvOWYwSmFYeDEyaE1ScDlBTFNJSWl4TDQ0bkVnK244UmtFOFE5MHpYczBoRmFVdGpQai90elZrV3pUWUdtNUF0aGphWDYvNlZVSlZTZ2J2a2NtdHNrSjlFdFZQOFY5YytKTFFEZHRtVWZNRnZQc1FLdlZmZW82ZktqeElwVXJ0eURodjZ5ZGFjdWkxV3lLM0pnRzVTUlB0U1pjd21mVFllL0c1ZkttbWJ6amx5d2RTRGJTRGlFNmVpRkRYK3gvTHhiTGI2S1NqMVNFY0dWWlFvSzh3RTZMZi9Na2RmamFZWVR5eW9VUkorTmhBa1U5TGtnbHNBWWVBekVIeWVWK29YeDUvMWNNQkZQczE4QWNLL3pPZGorRVp3TWdtQzNHVWFOeVFKN3A4ZS9lcE9VNU5USjBwNHByZDk1U3ZJUmlaVGtjQTNrbU5RVUxEaGpQTTRReEdUcjNlL2M1by9BNFJ3MnlRYStYRzVCaVZjMGFoOUo1SEtSUlZHaXhPNVNhT21JZFJ5QS9oUXlULzAzYWFxT2FSOVZIQjhnbE9LQ2FqOVF6RjY0VEhFVWxVOTJmZVdxTkJzVCtkODNaSjJZSnUxU3UxRU5rbm5qU2lXcTNGa3BaUjE0bGlKYnN4eGlydVlJemNpVEQxWElqUEh0MG9FS2N0ejgvd2sybVJrc1hpczJCSXBmMUYxSGtwR2dhMXcwWENPS2txSk9nUWF6aWZjdmpqYW1DenhpS2hpSEFmWDBxaitSTkc3YzVjMG94bXlKTm9pMDFCVDJRRDNJOTFHdE1ZVzZocnZzVi96VTl3QXBtS2NxaDE1R1dXczJKV0xqK3VUTTV5N011NlNFTGlCajhtSEIwMFFwNlYyeUtub1VKK25RelhNNEd6RjBnYjNMS1UzR1dhT05tdVp1MlB6M2pUUmNNMVdhcTgwTHM5dlY2OWhNalpjbjE2eitVRDhLeW5rVzN5ZTlON3ZMajZialNTRFZEVGlHQ3duQkVlWlJjQVphSVRiUVJibHBMSUd6TG1SWklPb0J1dnNoWGM0YnFwTVc4NnZocG9KVnh6Z3h0VWpPWXBLbVBoOXJZd0ZrdEtaWWNTdURKYXJYc2JlcnpUaUhHd0tDVkJZT0RyM0VNRVlreTFRL2owc2F1R2l6NzRPVXYwbC84Q3hBMWVLNmxjRkJNVzJYT21wTndMbGYwSndDa1hkT010Vk8zN29QVHYyVWJnU0taMElGNDdhRi9JVmhmRmdoNFhqd08rTnlxaXFwSG9saHAyL0RFNTY0N0ppazVTRkx2b1NnTUZXdkFqcXVrdWtud2xDZ04rUEl2aXd4UzdxbnlDTzgzSHp3K1hEcG5vOGx5RWhlc2xtdHdhcXl1aHdhL2RqWnM0OG1sdFJScFNkUEViaGMxTWlvbktFOFFjWWpYWTFCdk1paTRaMk45Sy9kNHpoVTUrTnVIWFF0YmZNR0ZiMGU3d3VzNXZkaVBLZGo3clJyYTRnZ2t3UHdLQW9za1dBeGZRN2I3bllRUmJMTmR4VWhZSHBKQ1BsdHJFWTgxYUR1cFhjZkZHYWJDemVPNllQS3ZXN0dFVFZQVkJRM2hDYlZ0RkdDUGE0cWwwSTlveHpCVXUwSHFXellFYVRLZjIrZTNNMHJEMFVsYU5oNmljSEhXbUJzbkZaS3hnd3hSZTgxemZ1aTFkVk8yYXZJcGd5M1NzV0kvT3BhTkNCaEU1TytWVHdkZVdRakYwcitiQWtMeTliUkFJaGQzK3VHdGJQaGJFb05peHo2OXNsam8zcFlvemo3R0UzNW51c2cyRVkrODJ3d2ZCVERXWThCSklLbTA4NU1MMHBsd3paNkFtRjk2L3FRWkgzWkZHQ2ZQV3B5eGx6WlFqRTlTa2dqVG1rbDV1My9ya2FwSkV0Z3Jkdm9FRnJHcVp5RXRiM2RoYU9rZDNielBmekR3ZUFsdE40emhZRm80RTJMSXlSS1VaKzhRUnlrY05pM20zdHFab2paUXZxRU5VUGl5dEdnTE9jdGt1MzBUQ2hENlpKc3dmZEJaa1JqS2tkSDBIK1FuckJVbDZrRERIa2RDa3ZIbld0c3kzL2ZPdkljWVVsb3diQWJkM05IcDRPRmRUb01KTk1wN3NSYmFvOVlJUVQ0ZWFORWd4bVd0TjdtblNEQThuQ0FldnNnOVA3eWRkVDNUWUhYYTdub24zRm5CYjc5eXA0bUFmbmJid243QzVKSGE4Rm0wL2xmQjJDR0dxSW95SytrRDBTdnZ0b0FYNDU4aFEzSTNyNDJ0K3RqRzkwZU9DUGk5anNIdEh1aWhTWXY4WUhmMTdnQ2pXY3lodk9aL09UVE1abUovNEc2dkdkTnZSTDhCOWdveFF5a1YvVXdNNWxoSmhrR0pxWGFYcWZ1OXBvbTFKR0w1N09HbkRxR2d3YVhPTE0wR1BoYnBMSmZsM1lPRUVMSGVzbW8vZXBwaXNsU21SdCtqMmphMWlpWURQWkQ1L0pYUisrcVlCM2pPODJ5NXF5Z1dhZjhxQjRYZWVlRzk5c3FiQ0d6WkpOTmo5WHB5dUpMVjMyMDVFQmR0dzRXSWNRSzlIVjlJSzhBY1pZVE5oSmJRVmJrRk5mTHNqZUwyTFRDR0cvb1RQTTBWbzJVa25CK3UzNnJjRUorMUhJL2hCUWJUVXcvRHF4ZVJ6YkxEcG8yQ05maTc3YnByNjRCbm5rVUdQdFZOaW9aWGRsaWFYUGhrY2h2MVVXQzFQb3NCRmhML0FoOW4vMGwzSVZpNm40cEcrRjh4bVpOTW00VC9jc1RJR1JSTDBCL3Z1LzdJL0NIcjJKWEZydmdKWGdPNTFJMXBXc0tCVjJIaU1SRXhYSlNHMnlnSmhMYWkzM3lON2VoL2VPanVveEt6cTBocUh0bmxzUEQzU0pFVE5QdDFZczljVU5MREZTdjVOeTMxVFFlSmN0Zm82bitmYVBBTUtEM25OTm03eVpYd3doZ2xPbW9Say9xWGI1R2tnSlA1Z1o1NVRZRmZwek9ETVpCZW9hMDB3MDB1WU4raDJUb0ZCOC9DK08rZTZVWGs2QTM5ZnJ3WjJUb281ekpjdW51ZGZWQ3lzclpCVjhzYnVrd2ozR2ZKWUtoT1gvRk9BRFdocGJScm9wUy81MFdkWGE3RUZjV25iMm5uTVFpdlpJRmIyUWNYWjNIOFJON2tsdWR6QzR0QW5mam1BdEFOOVpUVDRDdVJSK1NsamhtakxMcVFyKzdvNU9pbUxSTDZreFlrQWJYekQ4anBzRG1oU3F2MGQ1M2VtODRXOXBheWYrQjdBWDBvVUZnMHVxb0M2SHhReTN6RE5WdWhubGt2NEZRbDMwcTFsYmdITjNPSTZTV1pCUlNnY2k2YkEvZDJmcUVMN1dHaGJmMFhZeFFCUXJIMjdoUWtTa1hrbkNHVXNhS1RTYWl3TFhWNVl4TENyaVNCNHdrSXdBYTluZVl5MkZpWXp4T3lZcmhqbk8yWEh4M1Rid2ZpUVUzdUIrdGZXV3JPWkxsWmFabGdrZkRaSGUvL1V4MHJiKzZxNU5DQ2F3Y0JZcEYyTnhmVlZiV21SUGxWck1MRlZHbE9XdFNYTUtyTUUzUVU1WHRSSER3Ri9FODlINUJHYXJLa0NzVEs5RFNxSkdheDgxVjIxTUxkVGwzdmpzVGlqak10SG95aW8rMHlGVGV2aHBFSHVScWJseFJ3bi9taC8xZ1lzRFBXN09UZENWT0dmang2aTRLclNRZ0czSjFtSy9qQStwYmtMbUc2WkJZWWltNUJLSHNENnhQTUdyUmJLd0JQNHRna0lNR3JZY2RIK3ZGbi9wSWVjV2pPVWtjeHJ0NUxucXhqU3kxN1pOR2NvdkkxQVNEa0dQWXdwYXV2UkFodmp0ejB6cGJzeDJvRUVVS2lRRVZkRDQrSlVUV1Q1SHVyZFF0NTIyV0VrT3JVRDFBRGcrYmM0cU5sZmxMRTlnZnFROEhxT09lK1hlZFR0UlZvN2F5REtLbittN2VSTUtIWXFSL21aaXhmekxVNjhMQ3BPT3VMaTY4ZzYvUVNzdElUdms2VFpTQUdCVldrMVFMN09QOUV3SVJucW55ZFlWMEhqS3VMMHcrWDB2Vllkc3FwaURLcmNPdWEwRkZXQ2RvalpIaWRabnZzNGducXRsZ09XSUY2d0pYN2xkc05SbUZ6SXErNXZjQi84U0hCTkp0RFQvNjA5bFhZYk5wRTFPVDlCMTFRbjdBUUxtNWNKZzJhTHZZUjlqZVllTDFseW54WkhWSmlOVG9hdWV1azBZT3dCVjhub3F4aGVld1I3dWIybzdTTWpyU01hR2ZZVVpiUG5LSko0eFREelF5ZkdYTnNPTFhkSGU4Q1ZaK281ekxETmxUL2IwdUl4b0t3aDl2VmRLR3huNHF4ZDlpdTRTRlBvSHdLZjlnOHVDK3NCOEFiT1Y3NnE2cWJ5OVdwYmNyMFJvaVZaQ094Y2pZZ082VlhvbTZrRkIrbW13YVAvY29xenhFRnM2VGh4a0pSR1F5bFVBWWJRRXZ4L253TWN5b3psZVdIR004aHV4blBaMEwxc3puNmpOblJ5WlpRYU11THZBck9GRGNJdVBaY1Nub2hycWw5K3p3cDZhakxJTWR4bkJDcU1Rc0JPbnhOZ2Z6dmFCZ3djZkwxNFJ2aUEzTVFqRXUzUXA4M0ZyM3ZDRHZqODRJRHYzYUxDaFgxTWUxZE8raGhsODNkeWVaZFNJMEZma24wSkttNkxtL3ozcG1ndU1vNFoyUVFYTjJRaGtyaGVFRG1mcWZ6Wm51OEk0bjlPQUlNSGc1UTNzaDRtaFdUM0xGT0hRN0c4UlhtT1VCeko0SFN6L1VwWlZTeVp6Rko0bWlpbDBadkQ4S0J6RHBBemN0R2kvZW93Nk9RNDJqTzhGTGtzNWlhTjkzTE94bHdsczY0MXN5WGdTS2RheXFDU3dVWlNSVEdISmVwbjg0dGpZYm1ZL3I5Q0o2QlR0aDBOMGVGS3VFOVN6Mlc1YjYzWkRaNEUrUnh5WWlWd09TUGxuSnlpajJVZ2wxYWt3MzZFZjk0LzFKaXFLd1dUUG15c2grVDU5ZUFyc1FGN2x1UVdqRnBPb1FXbHcvVWl6MEgrT2ZPZGRiWFBDM3FHN05wV1d5eUpUaTYvaVhwTlBheHNJQWxPMG9tckUyQWRvSEFvL1JCMDVXMlNkUHVYdHJUR3hOelNwaWQ0Q2NGRXhER1ZFL1ZkSFp1S1J4VU4zZWtaYzRYS1d1VkVNSGZSNExqSC9LY3R3TVV3UDgvVTZiMWloV3lmMWgweVBvdXgwSVBaRjBVUFdrWVlMc2wxSlU1cFdpa0d5NUlJekw2OHpBOWpZYlhNTDY3czJ6TG9FN3Z2U2U3UXdYRzB3TlVreVRBV0hqa2Urek44NlRQR1pkZ3haRm9VZ3BYaVNBeHdHRTZaTGFNQWVwb1hEVE9zNU53WjR2QWpRZWtRT2I1NGpxOXcrRXl3Ymd3a0VpaVBxM1Zmb1MwWkNnQXJmc3BCbWtpYTlxSkJzdlRzS0lWcndSakx3N0xLWVhmNEE4VXF5dHFCQlROL0dZelBGVnZ3clE4Zk1qSWZhRFo4ek00a1NsakFIL3FrVUgxak1vU3F1cjczd1ZoSSsrZlYreER2alg0cmFhNEhpMzd1bGxTT2dnZUhJMXFweUxCNENuMFd2OFpnT1NiUkxSRXM0L0E0V0FqN3F5M053cUdSZ05ocGRUOHVZbStKRVgwSmY1ejFpTkhaVVMySGZmeXRQMjQ4VGdKeDRML1Q4U1lKL3ZuR2FZNVRRRkN2TDhKWjdmMzhWeEFhcFR6dVQvaW8xQnM4N1ZZZ2pZU1FldDRZbFpZY1NKSHVaWFJKVlhQalJNYmtRSXJpZFN6N1pKQjFEWGR3VVN6Q1RRNG1SSForV0pMVkV1R1Q0NHZDdWtPUmJFRngxKytPdUpLOEQyek0xMG42Sk9FMlJmVGtFSkw3Q2djU3AxTmIzeXExUEdRL2U5WnFFem4ySko2bjFZLzVCQkZRQzBHbW04WWF1bnkzQlVsblNQcjFLbTVEN2ZnTW5vWUwvdzZjQ2VHUFNHUklxUVhmS2x3Y2JhbGJVT2lZRVhxb2JOQkpoZm9WNGkvNXRGWEcwZm5ycWdUMm5SQ0tGcFgxNi9rYUFpeXZBYVJaSVcveVZBaXJxdU1FLzFtc2phS2pkTFc3WjNqRHRROVZBZTJOSDkxVmtwSUllNUxaa2x6NE1qeUV2Mk1vWGJmSER1VTUwZUMwc0xVeVRhWVMvY2NDS01DSlJJckVOSEE2THpmeG1pVTNBbTVmZ1YzY0F5bGdtNEh2bHdseWw2dDBHMmVpak1OajVYOW1MdW9XRUFpQXQreE1UM2k5MXhvazJnS3RoQ2N6dUdTWDBhbnRXMkc1SVNtZEMvNGxkc1NpZ2U1NUxBNDBON2ZwWHFxQy83ZzFiRi9PMFhCMVN6b0NPV1I4RzE1NXhaQnBaWG5EZkJVelVmYzBpZVlTbFQ2NTJ1VkNDd0U3cmNMSUlEc21Ed1JzMW5uOFk3cTljbDdmemMvdEh3M1NHeGFSbk5HWFlZOGxEWFB4SHYxN05ydFc4bDZzTkJjK0lCOTFIYXVkY3hQTEkrNks3RW9YTDM5ZUhMbzk5akREbTEySjhGa0JrU3NjTzVrSUh5Ni92bHFqd0YzemFFUHo1T1NENDdKZTZCMVY3NnJ1QUdSeXMvVS9mVmxPNTRETUlRaWJzV1l0UEJxUnd4OVVaeWlZb0ZEdDNxaFg1YTJERkY4eUZPdnJRcEcwb004bWViUnBCWHFVMnVVS2lvT1B5akFGbjZWSUJqVmtnTHdpd21aMjBMNmxzWHR2aldHSzdvNDhNRTkyY3VheVloR25sa2QxS2gwWTVDKzhJUDFVc2FNaE0xNURuM0NQNDZ2cWZYaWFsSjNScXp2d3dXS1d5QzJvam9KL2ZiMHFRbDdsK3VuOW1vK3V2WmFrcjVBdi9WVzZQdUhucXNCYzZRSWtVYjJpUjZ3V1N4azBZTWhtWDBQejRmWTdsME0vQkRMdXdnWFE0NVJTTCtLMnFsaHNsc0tRNWFJdlBud2ZORTBPWHgvNXUwWUF6dzZOSE1TMER2YVBFbXJ6UmNEZTZMT09SQU9WMjFrLzBXQjZCNzJzZXlVaHFGOXBvWEo4bElycW5ibS9CQzR3SDNZUC9iazhyU1U4eTVIM1pRTGFCQVpaRlBJTjhORFYzNG9RNDQvb2FsaWJUNUdiSGEwT2pjWFBtSmNxcktyU1I0YjNUb3JjN3hlNjlndzc3d0grejQ0UEMvc2RlRTN4Mm1XdGYwOTJveDd2dnc2R2pyTnA1Tkp6TXdDbWIyZisyc3ZLTjdwYTVUNHlJaTlxWkY3Y1JWS1BXU0hvODdaMU9JRCs0NnFoODZuTmJBVWMwcEFFYnNPNmNFRTR2UDBrRkZWYXIxSmR5ZU9WRmZ6KzZmSFRGODlZNTVxdTJ6eldtZ2xFalp2RVpHUk5Bc3paR3dYZW9CM3Flb1NjNHhtM3Z1aFJYUElkVjI3akViSTh0dlVZRW1yUGpLOS9zbDJJaDZRZ2o3NXE2RjJ2UDlyZEg3ZzFNU3JCdDVYZWlXSURCUE94M2tUNlVlYTlDWEs1MFFPYm5lMnNDMitoNVF0cEwxWGhaS25IVFJjaWRjNVRMZEU0N0NOdk9kK3c2OTZxcThnYmxrNUVjeXgxRU5yOWVadTQ0VTh4SDBBSDNLckJPb20vMlBpRW9xLzBQRXlzVzNoRHhsZVNTaDM5aGJUWDNIRkljSnFNSnU3cHNZWWkzMzBEZXFvYXZvaVRvOXdvOGJKR25obDR2amdaMkIvWU0zcjdYZzdiZVY1emJpb2x3ZWxLb3BXcEliVXlmMmx1UElxNDhKOGJSei9EYy9YY2xYZ2MxcGJFRjA4S1Q4d0tUSzc1cGNsbTZEWHZ4UHBJcld5VEh1RU4zaUdCSWRsMWtPcVMwbzJ2WFhBaHVYK1RFSk1CT09YUFE0RTZxVlFaNnl1cXRVZVRRZW1PdmUxeFAzQVFKeTJQL2NsL1EzZ2hpR0ZNaDJwdGsrZnJLSU56TG96SVpISC9YVXFVYmZaTkRWd1psZEx4Y21zOERzWUxDa1Q1YlRJUWw4dlZzUFpKUmpHdU1jQ2ZFV1JoWWM3dks5Syt1MWZYVGd4REZwbWhBWDBoaU1hSU0yZzlNYm90bUhxK0IwRzdjOFFieW1TZzA3SjlEYXpydTJFZGFsZmpGZTh6UG15K0FtcUFCVEc1TEhZZWthV0krdHBCWVl4ZWJWUGgwU3luZU55ODB2TWZVSHNtbjd2ZEdmQVVvOGN5MVpkcnJ3OFZCaThYS1F5a1R6aUVmTjMxRUl1MUkwcWFoN0ZKL0NhRUVPMWc2WkVGMmNPM281MFp6TjdaNDM5OEUybHM2RlQ3bjdwRkQvK2RwYlZvcm5lNmJrdTY5SkIyb2ErbDNXNDVvOWJUSDU4U1BValdqcXc5bmhlWE5paVRCVFdEaFpNMFdjYWhUc2llMERiWmhyOUE2eXZlUTFLeUY4MUdVektFK2VKUGdhdkovdU5tdlhwUXFxcWpwYXdqR2wzaU81V04yUytHR1Ricm81Zk9mT042NHA4K09DZ09mUmRNRWltYWVFVHZ4Q3NkeDkyNTVNSVcvUjdZcjlESWFlODdxeFhac3Z1N0VCc3lQWUdYaGQxbk81TXJxVk84NjE2cDlTbk5POFlGcS96UGJhYXA3bmZuSXNVZGUwWE85dGJ6cTFpUHhncXRoRm44WWxOQU4xbmRXYXl6enlCeHhPU3BlYWFYVE9JNUZlakFnU1lHaXNPUTVxYjFtVXg2RmdHWU81Z3R6QXloQkNMZ0VOaGczZm55MEpScTZoSWw2djFvQzJuUFNGR1Yvb3lmbXFQU3ZLOC9RQjJNeUFaMmhjdmc2aVZHZUoxWjMvVnFtNWpFdno0M3pnR3ZUQmFRc1dhQmdRNjBMNVBRUUJvSHFjZTdBdTJISEhtU3BDTWtDWHNIM2h1UHBnaWdpVlV0Ulhub3ZiUks2VDJRaWx6R0toelNFUlh0dXorMlJoUFFoZ1M5VS8yWTc5NlJiUkZKcGhvMUZ1VGdBMTFqYy9NYVlVc3hZa2Z0RllpTW5Yb3hMcC9rZmxObE9RVW04ZUVyK1BpUjZQUWJoV084QnEvQUtYdEE3VCtHNmpqZ1lTUm1mbEJhVU8xUHBwYlZJZXdVZTR5cUpUUlZjUXFaZVVFUnVwcmgranBvVmg2TkdNWnMzRVFqNWZLTTNmUkpSYU5QeDk5OTdpbEozN0F2M2FEdE45amdYejYvZ3kxcStLM1NFa3FxTlE4SldmeER0VG9vdWRXRDV5elNKRVI1L1FRbS9HOTZ1VDA1cFZ3ZVlUaWJpL0M1aUlucFc4T21WZlZCRlV3OWpUR2FmSVZ0SldEakdUZEZrL0JIdHQxbEdUN3lPeUY4Sk5tckRZdktCMGtGNlRVRXdqSE11TXE4a2FOU1E2Wi9rWndtVCtyUXlBTUpBeE1UZ2dJbE0xNENQUVlCbkVoa3M4TzdWbEpSZGZtakdqS01lOE1HRXlDaHZCYVlwcUlhWjZBU0tUMFlyUGNReFgyS1ZoNTRrWHpIcFg4NXFlRXhSeXROV1hiZmh6MWovMXVGVzV1WEowOElEdnhyZ3E0cnl6a2k0WUx3Q0xVMVloVVl0bTBMRlNuWHNEYmdKWm1wazZpSENjRWVuVksrM3JmWnFQYTQxeVZRdTJuRWlLTWhBdll4Z2VhczhsVTJHV25NL2tRSGx5OGFPWmRBenN4VEVwVVl3ZHRHUDd5YWlDYXZOcld3a2lMQTNyd1lBR2Z5eFJ2ZitKNzJ6d1dROTkzT2tUbTdKeW5NTE8zS3ZDbEcxOTZvN0R3RzNuQTNmMWhxTVZzQ3JvWTdSNGdyQVVmbCthSlNLcVN1cXdqcGNSNkVFdUF1d1lHS2w3UGZ3LzJGanlyZUVGeXE0MDV0T3ZlSEtsbksrc2ROY0tObHFOMm5GTXdQTklvMDB6V2ZFU2kyam5RQzdGSFVEVEtBa1pFOTZKL1NCTVFhTFc2WEFDMlY1WXRqSjFxSFFhV2NBOXphcXBLa29VVldreks2L0F0eWRJRE5hRGZlNmVPa3VNY1lKTC9OM2R6UHF1bDN3QXFIY3FCNC9XajZiYnpIL2p3ZDRuL1ZrbmJCY3FIZkVVcHdSVGJ1ZjNudWhGRVFybkt5OHFZbUxkckViN1JnWlo0d1l1Rm1MdllrRVVFUG9wSHk5WmpiUnJJU0JYOWtzdTBTeHI1Zm9UaEJYODVPaTVmVjlLSWpvSTFqVERnOXZrNHBodXFUUGpvY0JBcUZOaXdLNTZ1K2tudDZmQjdzZXZVc2d1V0lQajdaSjh2WnZNajVZbGlPZUV5SVVDSWw1QjdoZjJrUzRzU1A3dGNaS0NPU0VCaHpvTElOK3ZaZ1pCQ3ozcGJWVnJjM1VjSkUySEFScHlvelpOS1hseHJnbnU4VjJWYWNodTZWYU5pUnd2MWdXdjRIT1BCYTZDcUFMUks2RHRiQVI5UlZVazRZb0dOckx2Q2JKeGJqMHp2bDR4cXE0ZUJFaDlzRUlJUHVyVlFXZHJjcW45Qm8rYmk0MzMyUkpFWmhqRmxZSXM4NGxlblo1eWlHWU9Mejd6VU1RWkFpak5tb040WUp2MTRXZ2hxTXRuVmgvaGZnT3FGM3lVUkhRdDZyY3VrbHpFR2NwUFNWamdpM29ha1o0MnFyc2Q4MlZXTmJoVDk0OWdlZnExK1J1MWJkUmtXeDBaTDZSUWVDYTRKUmJQNUtSTVVSSGMxdXhFQnFnaS9GSGxUbXlnaXY5Mnk4ejEyTlVyanR4VUtGeTlGL0VIOXhUWmZPZVVtZmdWT3NmU1R1WGpmT3Fkb1EwSkJZd0F4MElJUGRSMS8xU0NzWk95bWFjcTNGOHJLY2R3SXZnSFJ1aE80cGxuc0Zud0pqTzU4eDJ2VldrQzJ4YlBYTUQxRmZyalBtSTdYVk5uL0c4dUdhcWVjT0ZKTkhhaDJaLzZiTW42M2NheTBsejhiYWFjUU9md3Fjb1V1YVpWeFBHM21XZkNMMmFvWk54ckJmSDU4TkllaGxiUk9lcUJJdTJEV0hPU3ZoUUxXVnhDL0VTNmpVdXlIL3dWcTY0ckNJaXF2OU13VldpUVVnOCs1V2ZYTHEvaHRkSlJwalFZRm9DaklhR1FCTDZkQU9jNTg0bVp6ZHA2d0h1ZG1EZFFSSzdnYU1iWTU4UWxaQlhzejRwWDZFakFvU2g0UkpCbjEvbk9SUGQ2ODdUNExGdzZyaXhqYjBGVXUvZXZ6N0hoaFlGNE9uOHRZWmZvUUVoTTIvQXJJL3U0TEk5UWE1b1pwMk1NUkkwYXZTY20va0V1Vmxzcm9adlI1VjFIaEozVVg0cXNLMmRXdUNtT0dlUEVsNFRpZjY2dlBRUUhyNXRvVHNTVjV5QkprV0RwZXEzRlIrK1NBc3RxYjA0RUU4dy9FNGNjOWV4YjVlUWVQUzJGeVdSZ242anJ6ZFo2d2FEMS9lNG92NVRUbmlDTUN4RUM0cXlwUmRIeG9wWnRvM0FOam1UbnBtTTZwQzJpeEZ1MWtmUjBTYW1qU25FaHhyUDlLS0hXeWdETDVCK0lyREt0dzBsc0N1anU1cEdLaGxaMnQybEZZcmdCZkVmcmZoZE0vMFlMVlhWamk3SThDL3U5czdBbnY1N0hSYy95ZWJNMldhYm16MG1TdWFWK2Y3ZW50M2hhNHc0a3RpWDFWZGpCejJLem9CZDA5VXBEbkNYVGJnSEE0VmFHSHpRalVYcEYxR050SVZINndxckFSa290SXcyY2IrdUNqdHA1cHNRb2VraDFkYS9mbWt3RDdLd2VyOS9wNmRRRE9vaU83V3g1d2cvc2Rva1BxZDBncEcxSlV2VVV5KzF4Vlc1NHFmVkVNZ1U1QXI1ci9iNWNzMUpPdkJPTENMaVRiZDExYXFnS0dCYUFWVE5QUVd5bzJhTUtNS0doVFIzQm05T1VjQ0FxNFZSOVZheGRCM1MyZEZCY1MyMUZubis4OUkzZjBXbytkVCtrRnFmdHBpc0RXRGxKL09TbHE3UEVuNUI0ZTBHSVlhT1JFcVZ3QmZ5SUJKMCtmMUNhOGkwVENLR0lTY2NrbWlXTWlVNXNuYndnUGRhQjhyanI0ck4xa3RydVhsWmpQMEpYdlRUcXlodFYwcnhBM2RQdFhENTRMbllGeXkzVG5reFZHTTRDN0NIZlQ4SENQMEpFWmVFaGpzSGZNbFdnVmg0TU5XQkd0SjhGNk0vUG9kQzBTT1ZnYkxpd25qNVg2dkNtUFhiVDFEeVorVTBtY1c4dkRDK3ZuYzhiRlQwOG1CVDJOWkl1cGxzZkVoYjc2SzVVMWp0cVF4MXFWTE55QXRFa2ZpbHBQMHRmQ0hKenRGbmF5ZFZQWVNjNCtVV25GaEY5UkE4VmNGNEJyRHJ0Vk14Qk4ybkRxZ1I5UG04RjJnWHM1ejNjMDF3blJaam9GUmo3TWlXQUlSeUN0L0tOaHJmcldPR1Vwd3JCeFJGMFI5Zll4Q2Y5bThzdktvbGVvUXhITU0vaTlGR0pQRFFHQUlQMGJ6anV3K2RnK1k2aXpjbHRIUlQ3Tm0yWkdlOVU1ZlZTOXBMNnFiUDkvRHdGbUFGaHo3MncwejlZcWMreitiM25OejhFV21KaEZyejRQb1ZSekhxakFRMkczRk9Jem13ZnQzYUFuOWptVnJmRmZKOFZIMlk4dXMzeFhxdlhsVzBZZm1oMnlCd0srcEUzdlp1cWhtT09qZXM3Z290Y2t3ek1UZVYrZnZPMVV5YlhUTlF3K1h2RENNVzg4L0xTWlNsZmNCeWIvT2xGbitXbW96UnZEd3VyVlJOcU9DZzRTWk9nZTdnNTRsM3NpUkx5Wkl6bVVTNjBlbTFiOHBYOTAyV21zQjBUTlgxY3MwOFMxWDZWWkladGFwRy9IdDlGUEdWdC9COFFETjVTSTlaSjY1YmtMbk9KSmFyamIyeXc3YklrOWo5V2VTZExGOWcxTGpwMHlxamtpdEJZc0wxL202Y2tIbzZiekI4UWRUVGQ3OXhHNVRuMU93MzRNQlJQVEJMRVd2b2hhSmFnUlFYMjJ2NjVEc2tHZ0J2SVVOQ3FzNWthOXpvaEVua2ZZS3RoMzJ6SXFicWlUbVg1bXE2bForeUVNNE80M2c0WjNiTWN4NThudG5iNW9lQUkvUkIyWjZZaTJYTmN3eFJDejIyNDNGMDhKVDhmRVNnNGkrQnJTY3VEZEFjUkdpNGVIRE9OV2FaT1huZjZrdk5hK2U1eTQxUWVpakY0VFp5L1B5VjhCNXVNeDlvM09uRURKbWlhb1AzbG0xNkszU3lYM1Q4ODYyUXZSdmtFRkFIbnpHNFh5OGNnalZ2d1RhR04zamtLaHJVZGNsemRTZkZUZ2E0MHlMSzdwb0JRcVZlQUVEdEtZNFZIWG1qbXNtekQzLzFQc1FPS3ZScUNIR1U4SGVuTmdJOVdpUlFpbTF0RktoQllUUEFZL3NYdGU0eEs4N2hmNDFDREltTGtqbmZBbDRiTTh5SVJpc015MVNpZDdlVnZnYmNtOWJ1SnJWZE1IU3pLc2tFTjl1S2xEYU9SVWdwNDB2em1QRnhRZllIVUpnRUVnNzMyd1VTbzdmWDR5c3dRY3RXYWhUTkR2Zm9INkRIcmpjdDhmMWhuSmJzRVBsZXBZVTRNOGJpVlZuV3NwS2tETzJvUlFFejU0L2pXcktiRlF4eEFXdUVMNUZIMXQ1TTBWTSswSFZ2RVVnZ3JQN2M4bHNLdVdWbnBzVXJFY0NUSzNkajZKamRCUDg5WHdxakNhbGdvaERVSFA3ZjgyUGtyRHQ2Qk5mcFFENHNHT3pWN3V1RTFMTEJGTCtIWVd4U3dQNkg2L1ZuZEJpbVhyaU9nN2pFOEpINnRhWXRWZ3NjcEc0NHpWdUhsSk9acjBVVGl3a1E4SDVzZ0JweTlobmxvYVRUWU9RQUxZU3IyU2ozVElJZGJMWUZLa0NsNFg1c0MrRW85VS9vVVJkSWp4TzY1Q1VXRmdEMTQ0S3hxSnBZTHNKekxLMnZidnVuL0ttTEorZEJ3UDZzZWp6R05wdWcxSEprK0FQTHk5WVA5SEwzOVRJQ0dDNUJBS1ZUVUhHcDUySkpXNDFRcHBKMjRTOFdBOTc2S0RXWEM3TC9rS3oxUHduenhJMUt4ZGlkVi9EZ0lRT01Ld2pLVDA5U25vcERDN0ZuWEFuNW9DMm5oTjhYZlVvNzEveFY4eDZMSW4rbTFiQnNDK09BRWhVQTJ2b0svOXdjUTRBK3Y5SjFaaGU1OXZmaDRsdEttaEFTZklnN0YxZDRHZzByOTN1RkR3K0xWUGMzTkFwL0lpZFZ6RzFYTzlZaUtubW5QQTJBVHl1UVkvZ3JYQjEyZTRMUVpUZHI3eUYzN3EvZUJrWjBSVEYzeTdCUHdrQ2U4bFBMUVNjM01ydFpmTjIrMzBDOXR0REtmdTczK2FFTUVXUUh3blFPUW1QTUNXazdBRmpmTUVYV0Q0Q0U1WVVqVFZQSmlWV2pWakkzcC9wTWkvTG9YWDJyYVAzNjVqdTV6YjlDV3BROUFTVU5Ob0JuL3A5dGdhc3VBMFc3V3Z6WE5VTmZaRmdrajdjS2Nta3BISndxWGEyeTFsdWxNSjIwV2hENmJyRXdPVVhCZW5YRHAzNy9oLzRJRnpHYzJuL0d6d2V4K3hmZUQrRTc0SmNUd0ZGaTUza2pvd3l3eFFuZHNkN3d6K21EOStVb05rM3ZhUStycm16Z2VicjdMdlovdUdCb0d3dDZ1OGdNUStqMm1KaW81SlUzVVM0bU9OTzJKbThyZThSdm50aTYvTzJQOFlQV3lCT01QdENEWTAzdC9NSGNqUHZkakRjSlBzcGNLbkhRZjZZdkRPWEJsRnJXckRVcWJtcHFTcnVRNTM4dEkxQmhzaHdNNWNaK3RuZDh6b2E0bXM2OUVyL2hpMS8xNXdHbWxrZ2pMRTQ4OUthYkY3MkhUemZQVU5SdzBNeHZFbjFoMkE3OWNNeEMzUDZwamxhVm9wc2JTYXpYWnovMUhJcEc2ZDF2SFR6UzVNYXJEbWZhYm5lMHAzWGQ3Rm1WSSthNnJFUkV5YzQ4cDNwU2V3YU9NSWdPaDE0UVRxWUFSb3VtN3c5Tm9XL0RhVDlaMWdsbzY2V1NSV2REYkhCaDUwTTdpcUdCMm9NbHJOMytkbzFhM2J4dzRhYzJFOEgzY0RuTWpGWjdRVVhVOXU2RWM0RCs5a01YSU9wRjJjYytoOFM1TkFReXJZTkFLbXRxV0E2My9oeUM2cFdoSk16NWV6YldML1dKUnJ3QUQ1RTF6VU1LQ1FEbjZVdXRjTGRCVERUbk1MUktMdE93NUxUN2lDUHNoNWl5dWF1Zzl3d1hSRGRtWW9aZVZ4K0owNTEyYkpLWUMrMmg2R3Mxa0hJOGxiOCt6aUorbGNuem8rOEhOcWg5NnkxMklNQkkzNEpYbTFTVlFLL1hlQktjcTZHeW1wQUhhY0lsOExjNnEydUdtSG9WZ09NTlJWdUFDalhhaTE2RmprRGU0QlBmOWhMSUJleFBLamduVC9HNDVnY0hRVkRVZFQ1UzNRNnBXNkd3NHFpaWNSSHNTdWVuQjc0cE9vVDJBVXRKZFpsRWloYnJ3ajd4QWtKRkFDemdxb1JyRnhlMkNRVlkzVmZCRzlzdDV4UDltV2FOVE42MCtKV0V5d0NDbzhrWUZyTXUyQzY0azI3VDdVME1ReDJTdWZ4MEtXOHowVi8yT1VwMHllNzNBMUlYZHJ2dFBVbWlBWXNoeFhaaFZyQkJIR0dlTjZLMUZMWlk0QnNLSnUxTkVXaDJtOFBMUFcrVER2eGVHSVdBUFovaDZzUStYTlAyNjFIT3FUTFc2Q1ZwMUcxSnZGZkJ5NlErQ0JnSGw4SzFRRXRReEVUejQwT01HeWZHR1BVM0oyNVYxb2h6bjNyMHBCZkFiYURHRGF0c2RGc0NzSGZCd2VSaDlpMk55T2s2N21NV0xrUWhmVSsxOXdhdXNHMVBkTThvODRjTzl6Q0tMV0s1SVUvYWpIdHdJUTVlZHFTQy9JSUtxWHlHRDlFRkJ3N1RGTi9FZDJDRGNmUHFyNE9BbWNBZklYYUE2VkpsS3B1cXlvT2F3TjNweUN1N0sveEIvWTJqZkdRZ0RoSUg5bkhrR3R2dDJuUXV1QVJYV1Q2OXB2SkNzc2FreHRsZ253R3o3bDRzL01waS9zamRaa29nRTFIUEJYTlM4TE1MUlh2R0lOM3M1WFUzWjNDMDJIbmwySHgzbzFubi82ZFQ3WU1qMlYxVVlSSUZNajlFUTZ3RTNaejViYlY4ZjNYSGJ6M2RwRHdLaTVlaXNyU1FoTHFHMGl0MkoxcytrU0dtNGFvQ2M1WURLQ0YvUHJlMThQN3JaTDNqSlo0dDdnMVE0ZjdhdTR0V3J5OTlIdnIyN0twSkFEeWJjMHBsb0cwQzBJZjhPRTV1OW9vSWJ1T1JkMUlVbGh0QmltcVNUbXBZTVM2UjR0dDRQYmo4S0V1L1lEOG1rNUtlMWdjNnBURjNRQ1ZRSUswVFZZeG1EVUVGamxsL0lodDNIRTJlUzQ1WE9rQlUyRU5USkd5UytVRUwwWlhzTlhGSDlyaklKWmYvNmc2cTF3L1ppdS9sOTRqZEdUaXgvV1FFVGxvVTFlM0E1TlRnYmFqbkkrOXJXMWRLOHVzTmVzaWVSdjArTHZINWlQU0tyNFc4RmxFd3ovZjRRVDRJaWhlOFlGVjZQRDcyRGt5ZnR1cjBxWjhVOVE0L2tmUHR1SnBRNWRjTjNlOStZVDN6RmM1bFdqYXBMMW1uTVJ2SWZ0anptYzFGZ3piWEtndmRqeXhyaWdaVG52MVM5L1drVCtaL1JwdDJWMURxTXlxTEx4a3czY0pMK3JGbjdwc0Z1bzhIczIzTjRTQjZlL1l0MVIrTHlsN3RsRFJ0Qzh1K1hTSUI1b0VHQzFLSHFGc1JZVHVpUnlEd21tZWNsakwzOFhaUE5ZUlprMi9jdE9LRzAyOWRSQlVEc0tXRjN0NzZ5SzVxY2JlamlSTVVPUlo2dGlmOXFZSWxxK3MzWGdTdGY1SHJyVTBTY05QMXM1U2FFMWhHcjc2K1RZSXZXSkVRMjBDZzY1VGVuKzJGZmdiOXRudGJYOU5PZUVROVcwSFdLbVFNMWM5VW45Z1JJc2hPOGxHNE5tcmVVbkVkWlYxNWxCTFRHSlRFd3RQYmliUXVuOVQ5ME9ZMDVwb0FxVnV2SFg4WmEvUWVmS2JqaW9WOU5DRGk5c29CT0pNVGUvZjZIZjM1SXpIVXJ5em01cHI5MXNReDEzamUyYS9wV1M4SFNxemZpeG5jOTN5RVU1dC9OTDhETWVGb01nQTByamE2clZjL1ZWWDgvbjl5S2VDdzFzNTBiZlNqYXJLNVZXcGNleXlYYkpDZzZIK3VrbHBPdHY3QVVob2g1YVNBWE1mRVRZZHY1clAzcXNJc2REc0NNMFJkOGpPSnlJcHJOZGpWdXpSeDFxS1g4VDZtS0VXTGRKQjBxRGJnRklYY2JhaEljdElKZ29tc05HYVlOU0UvSCtSbTFpNkIzdUt4NldyK00yVERjelZvZis4b0dKdmVqT244SlYvUXFsMjBTYjYyUnhuYUJhTGErQ1REK29HSFFBZDNxbFpHbEIrTmRRejZlZEFEaXcyd2hjNTJjYzFwWWpkaUxNZkxFZkNOS3J5N2srUU5DQndSbmxyWkppdkUrSmVvS2FoVWJZY2toWTlINjMzWkM5bjA5Q3NXUEcwOHUyMzhXY2xHM2lhM0NNUnNTZm1lTE4rd3hONFA4MHJ3Yk03cmVPM0Zha1o1NGtMQm54V09vY2pFTnJsWG43cmNjSjBYTlhUcWZiOXVWTGtLY2crbUROZzVmeXZPZk9QcjcvSm0xSSt3REsxd2ZqYmtyOWl3MzZtdGxJbTU5NFFCYlAzRHBoRkNDOHhqelA1RVFuL00xRnNyVUUzN0VsU0NTVnhSbWpIRGo3L2kxaE5TczJmbWlndWJaSmJpV0FoVEd1OE9QV1czTDJjdlIzWGFHNmRDZTdtMXhCMDZnWTJTQkY2ZTVwOFdyNVMzMXpieWNObElrYTloZWxNaWczUTF5V2p1Yit3VTFrY25UTzFhU0lNMUdXVjNIQjJCbDNRWEtqUXhDQUVBUlpvL1BvQWh4dWV5ZnJLd3hWQ0dZdUQ5MFJ6U3VScEE2TGJxUEl3ZHJESnpiRkUxd3p6enV2UEQrUjRlc2ZZSjMyRnJ2SlpOK25DcHhyM2NKRFlSbUYzeTRuR2p2YXVUSVZlQWxvWmwrcTVNUHlEbjRib0kvVllIUnpJbzhDNlI3Q0FQV3U1Smt6cXNEb0EvQlloWSsrbHJja1YzL1FNbURYd2FxZ0lJT3hVbVJLYUlHR0M5QVU2UHFCMG1RS293N3VjVTNkRUlzZTF3UDBqOFM0bmJGTk5vbFhUWjZtaVBuY1p3ZlQyRURRK1NrMy9DNGRaTlVzYjFFWm9oU25sOFRpdzdoOXQ0YUZrUjVySGsydDJnUEVvUnlKeEhUR01TamxDTGhUNys3S2RERFluemQyQldaeDFBVkYyUmJwY2Fqc2NlUEFVOGx1TUdFNEN0NUJ6NURma0xmWlZBZ0I1VmZVZHF2QVlNamNsL2NXMzJMSjZlcE5oWHFaQmhsZlFBdmZFWTlDWEtzYXNqanhwaVNDY0tFclJ0Q3ZVdERvRFd4WlYvS1UwVDdwbW51S3MxWWhWb2NTZXRRZHNERHRHRFhMNnZxSGIzOEovMWJOdWt5WnVtQWtWbHcycFFGc3Z4R2lKdEpZTzdzL0lqbjRhNXVscGFMblcxdVR6SXk4enllNVZiSThUMTlvbEZnN2Y4M2Q0cHNMQjRwYlBxU2ZCejdGUmQzb1hpUjU4U2VoSDI0T2E5N3phaVZ3eldYc0ovSmVvVlZJcHpDWmE3T3lxN1E3TmhxTU1nUFp3VVM0bmdZNSt3RUUyMG9ZWmR4aER5YWJQK1dpWExhQTQ5QzNXbDI2aG5za3BoY2ZJTWR1bGZnQ2JIbW5KdTN2Z2c0b09nVmd1cXVtcGdzTFdyVGlEcU5JUlpsV0ZGek1QVlNQOVVIYytGdzB4TXZRLzFGY0ZmWWJnOXcyTldqSzJoM1BVb0VwZ2dKR1kvZloxaGYvTW9kR3krN1Uzb09ZT0JHSkxXemw2K2NrTzEyeW16czF4cCtqUE9SYjhDRVNZdUd2bW96K010WVZOTkhZM1hjd2kyZndkSVNYaGFyVjZCOXJjQ1d4bmRDeEJQSmZXRDhDY21wYlBCaVlQZk1nYlJZL0ZIUUE5Vk5uS1ZKNlVBVms1TnhlZ3NpVEJENUpPaGdKN2QrYzBaRDNGUXZlN1FWWjhvWThMNkpRczR4N3RtK3V4M0RzYjI2Q0xrWEtocWF0bUh2bG9zSkpMVlRRSnhVYnFZVk93dVhGSGx1b0NmTzRocGF3LzFzQmlTTHUvY2EzZjJzMWlMNDBFMXFBSmZOSTRGWFpCZ0JDOFNvdklaUCtNeXdWTVJQT2dLNk5TS3B5RjhxTFRvc1FnUmt0c0lxS2tjY2tDRkhaUndKMkhENDJjdnpQSjQwZHIwR1FtRjhBZmVweWFjdDIybnBYN0g4OExXMVgrZHpFYUJqUUhubzRocjRpOW1vMmpUUjRERVZVSjFtT2ZUL3NQSitXYjE1eFJQTE9zeGlVSVNsaS95Yjg5OUJpdVU1VlhRbmZNZmJBWmZSbEpwNnI4Y2pQVG1aWDBLRTVMdEUyMnFZeURvMk5Rem0wNDdoMitpMUJPUFBVWmg1cWFVMnJWV2xEekFUanBCV2NnRFk5bnFEWTgvdlhnOG9pSzVzZW55UTJCYk5GR1J3eitMR1ExZjdKMFFpMFlrRTFLU1VnTmN1MC9lM0ZFR29OR1lmYTlvTk1XYnJVMVFiZEl4K3lXcStIVWZ5Nnpzd1UzUitZQjFUUGdxZ2tXbjFPZU9RaWJHRmJmTUtWMEFrRnE1SnFrVnlwUHVJMjdUdnlVOUtkTjc1c2V5ZUVBdU5GV0I2c1Z4VHhDRm9CaVlyZ3pUckgrVW1sdCtLbi9DeHFCUHphZHR4QXA0NURVU1NWajhDWjV5amN3dVRidEFhd3RLSzVVRy84Y2lIb3A4K01ITWRVaURrajNIQVZPNWxYQXN5TEpQMTRnNTVSNndIRUJwZ3I0ZGZ1eHU3VEE0blE3QkFhenZ6MEVoSkIxUkhSMHEzalJnZktQWkQ2T2YwaTFZWVZFQUc1K2VKZTFpVDUwemo5VFpzYUFDNXVvWWs0UHJvc0ZrcFFUbmJJLzJ6OVkyVERlc1VKMEVXbDR5UXlseU80RWJVWE9yK0xrZ01Vc1NpWjkrV1hCVGpnVk8wT0c1MnczcEdWU01qejY5WkNGRFlXNHZQOGpyRVplVHRvYlVBUithMGxURFhoMERETlZCdGFYbWVnenRBUWRRSVJhOVpkUVlxS3BXVXZqRkNqYzFybUlQNVBqckhrMTlHSjYvZTk1RXNGRk82aVhCMytET1ZaeVZSQm44NkhIWVlmUWNaUTc4NTVkL0ZSVWU2TU83R3F0T0pxUnQxS21NODByQ0dwdnFtYmNJcWt3QWlJYUVKT0h5NUU0dTVoT2JFN1FMUUpuYUtCVnVtbENhcld5UHlSbXRIVW05VWM5bzhaVWJ2eG9CaEJpRmF6OXhkT2tidFJrT3dGZFg0UndRTEJVWUhod05lQ05ycXNWbFo4WUI0YytQWFlJVUk2VldrL0dDYWpyUlduNFM1T0ZaYUZlQkxaVUpObzUvQm8zQUxkdi95MEFPRzhUdys5dGVrdjB1WjdGbE1zeVRkTjI5Y3hkRWNPd3dUelA0UzM3TjRnWEFnSWpINWpMcDZBN29PV3JubXVXV1VHeDBlVFJ2UzNnUlJDTytrOGZ1Z0U5dG5TMC9sYWlNNUNOMVY2T2NZdUh3NEV3TE9UUHlSbHBjZ2ZBcmVWYjR6YXMyN3lEa1VaN3NHZGYxL2ZJR0lDeG9BQTh2TGR0WUZBLzNwR29yOEJhMXZPNlNGbXBkbWIrRjVpTGU1UkMrY3pDTVM2bmdIV1R4bmNJT2dBNVA0L3JzVHJaZXg5eFoyVnJuSlFibTlwWFR0U0REdDVFamhoSnJoTGRrajBDTktpc2RQU090RnFJK3JleUNNK2ZrSlJkVHlFSXJsOUtZR0F2Nm5VRlVNTGtwY0FYK1h6TTd1WEdvL1lXYmYweUsyczVmVzZiL1JuRG91NFRPRHZOOHA2d095N3MzSlRCSmtFYWd2VHNLZlFndnZCVEkyYkNtV1d6d2M1RlNtT1VkTkx0OU9MUEhhb0ExZ3JhQ2dpUzVuSkZ2OWE5OVRzcmdjWVpFblhBVDBuRGJMajZxOTRuVldtS3pLSVVQY2czUGNJejR2WXJKQmFVOHcrdm03TE9BLzIvUGRHdCs0andxWmVwa1JmaGJPNlhwaXRMZ3NRWUlhNGYrT0lveWh3R1ZVd2l2Y3J0NGt6d3RPaTlYZ0RObkwzckR0ZDUwTWRvaElIaEpBWFpaUGUzc0NEMmltcFZMcmVpdXhYS3I1b2lZT1ErYWxUNkRuRnNOeGJtREF2b05wNi93RWlpZEJTTVozaUZCODdnaHh0LzArU1V6TWFmMDFGWFlGU2xVYkZPbWtvdjExSktQcHRCR1JQU09ublRpUWRieVY3YUZ1Z1dpcW9VSE80bFI5QjdJRW1oL3NvQ3E3dmpHYTJEdENZQklQNlh6YmppUUJKOEVmK0x0cTlWUDkrRDlpYzVtQSs5VjcvSTZrVFVaNndEZ3R3N2wxRW5jekIwc3Y5TlpSbEJGbEtRd3R0TVhmMkJmOTlveHphVjYzYVhvYTJibDYwbGtSU2loOVBkUEd2MUdLcXB5ckhrYWhkamt0b3NBVnd6dGxwcXU3WTRsOVh3OEdvTElpT3pvaVVYdlpJS01nZmNrajBmeE1pS0JFL2gydzErSm1GR0lKWkUzZlBZbXVCdVF3TzVDakZtaHhKbFRKZFBFY2srYURBODNjWEd4YXZYa3NoZ3FobWZsQjBjL3pudGRROVlMU3h3WkhsSmhQVzhNZ1hZNzFTUmNRV2tTK1ZZSEY1UG5TcGswa3FxWUt3UnVJU0xLdGJjNGFtMmVqa0ZncXJkSEJ3ZSs2N3drREZjQmxBbmg5aXFBZHJJZHJIRFljRnViNWkvaElqSXNvVGc2VnFTSU5oYUxpb24rcEZPZFYwTWVJT3ZremdyZHc2YXlFSFdQYkRtdXZxWG4zdzJGYW1nYWVDZjkrcnY4YkVLNG9qUkV4eE8vT2FubTlZZkVWQnBZZTV6TXA2d084d2hSYjltM3J6MGRoSWJrK21saEhGc1kvUnJwNDBYdGtZNVZvN1FJWnNZSGJWZXBFL0tvcGtOMFYrazVSMmJnWFM2RTdkME5ZM0NEUlEzeW9QSUVwY1pPLzMvMlFybUlZek5RcHI2L3NZSWNlRElEOGVWc1ZGZHRGakdMdWdMRGxOR2VlUVdQSTQ3bEZiN3NuVnZNWDQyN05ESGZHb0FhbnVjbUhFSWVxenQzcjdFR2Y0UDBYT09DWEN1cGFONjZ0bHJuSE9oMmRkaDhTM1lscFdURkI2ME44bFBXZTFaK2UwUnl3OHV1bE5VMDl1OUp2R2t3SzJldnZBdlpweXA3OEp0djVHMUpPdUtnWmJsV0VQT3VJL1NSWEt6QlZjUDB1OFBvOFFORHVjQ25TUGt2eWlvV2xGQUZiSmNoWnZBTVphQko2aFMxMnE3NWxSbXY4MW82MENoNlJVZFZjQTlwREIyTlEyNVJnVXowMStiaEZMdnNSN01sYVdSbnVLSVYvbzZaUXZHb2N1UFhaMkV3VXJ5SUxpc1FtQWFydWFCOS9XVkY5T21OaGhPTU90dzdmZlk5Sng5YmxpUnh1KzkrNmMyWFJiSVpQTzZ3V1dTUGVEUld5TzgvK0ozZHY4UmQ3S1JWQVZDdGtUOVNhUW41NzdDUVpmKzFMNEVCbW5IZTNFMzI1M0JNa1hDVXJLam9ZN0JBRmgySmZEd1lMQnVTNXNKQTVNc204QUJuWmxURFBGV0pWRGFXamJZUlovaUhueCt6L1RzNThiaE1OYmI1L0VXYWxValZWWGV2NS8weWlYcHk1bnJNMUZsM2tOTm9PS0l5NHlYS290cmVCc21mVFB0MG9YRkFIakpNbDFDNlo5dnF6cDR4RUJCNzhlcStnbTF6WCs3OXRpdHpzM2RMMThSZjlaQkFQWkpMWDhHd2pKbVpHWVp6cHRCenNnTDBZT1BDN3pJWEJuaXpPdXRWWXQ5ejJ6YnRpVUNoWVpDTXpNd0Z5aWhKRGVGQzlZMkNzVm1MR1gwWXhGRzliRzN3WnRGN0lQWUZPVjJ4TnFZTEVLVy9UZWVtYVQyb0tGNVdkbjZ0U0VIZHVlV1lyS3U1V1ZxR3Z2NHF1VFgrK2xkcjFsbFBSaytNSW5GVFNXYk9LTXowWCsvMUFPeDZWMmJ4TWRCaUExVGtCbVFWVVFCOEFXZTdVcVhWQ01CajNFNFliZVZBMElBendESDcyOWRKTXZYK0M5UTBpUXVKR1Z2VTh0N2FwdkUyY1ZLUmJjbHNVOXBKQXpkOXZXV3A0dVdIdm1IT083c2d1OUZHb1V0RHRma3dYWWk3bEZrazNkWVRqWVo4dUh5d0xuZFRwdStmb0VTQm5WV3ZhbFlidURNbjBVM2k5NWtBemJjdzlmWCtIeTlEZFpTNlNCL3lTa21hNU5xWUM4VDZPaE5uYW0wTlNDUm5wZ2h4eStQVUpQUUg3Nk5Dc0pTOVdaYTc3eGRaWlpPQnNMRExBTGduWm5mbHNvUXpYYnZOSCtGdVZXZnRTNmxCM1BKd2ViSGV1QTRyRjdXNS84dDhqdVJneG82TjBIbloydm4rU1JaY0xaWE9MNUtkNFBMRGZ0RHFGeVlSRXpVbnMwTEM2SnJxSkw3UWxsZzRuanpiRG8rQmlrRUg3NG9iT3p6TGN5cVdmL2dERXhaajhTTTNocDBZN2dyL2F3UExNV3pGNVFCa3ExQXEvbno2TnlEc1BKNnBGbmlVNmFRK3JLU1Jpb2RyNTFXZ1g1Q0xkTHpBa2dZaDcxOS9kS29kejVYL3pDazA5ZTNUbWhLUWQwV3dweW5EK3NnY2hSeEV5SElRVUVRVEg0UHpJdWZoZ0F0MzFLaDdKbUZzWTlzL2tGRGdHL3ZRV1E3RUU2cDlTdkpsNWtNU0JrZVpCbUQ3Vkt1QjNWSTh6b1JTbHQvMHJRa0llSFlIWnM1ODZENUtDU2k1REkxMUVDNFZPQmtiSzJOQ2lUM1dTd1R0bWg1cXNJTWxQZ0RvU2k5czZkNVZzSjRQTHUwRkVaU3ZEaHJZMVhjbWxDRHVvYTlpSkk4M09WYUdsV0YwSkRTeFlCYWlqbFFYaU52ZjJRWWN1NEV1VzdUMUZEN2VaYW1pN3BzdnNnZkhKZnZ5L3l2VlNId0laWlI3SVU2ZzgzOWltQnd0MmhubWlFdnMydFZUQ1I2TmhSN0phdk9EUThwc3M2MGpiRUEveERWejYreTB3RnV5YnAveGlnYnBpblV0bDhuVWlmN0pnaHV6Wkd1aUIyREFxYWpKTFhXWk5oL2tab1BnMnR5bDZrY1pjd2k2dnAveFlQSWFEUjY3Qjdqd0YxU3BVcG5DRXdOS00rKy84Y3NzSU5kRWRGUGxybVpzbmg2NE1TZFVrWk5LZkNPS3lJUS9HbGpYaDJRVmRINmM1bFNYT05ZQzJoQmQ4OWlyTml5OElGZTNrMmVnNlFreEhEZ201Mm5PcXVnT3EyNlRYMDk5K2UyWWdmbnVCcDBhbCtIMVhQQVlITzRQNWI1TWhPSlNZV2puaFJnU3paOWN3bmIzQWtPTTdNT1g1Q1MwYld6UTFQVTF0YTFRVlljUGR4R0x1UDN2akprNVVZcjZsL0lObzZmcys1OUZOR09Gek9PcHNCeTBsRG9tVkJTVi9qZmhsa2xSY3ZyNEI2ZUNPWDd3VFVkNkxDZml4clBOVnVSRzlOVG9MNlVBaE5xMnZJdzhsK2o0Ky91OFhOSlh0a1JNQ0tmR3pyeitDWmF4YmF1MXd4clJpVVZ3Q3VQeWpMdnprdHFsOXdjZjdVSzJhb2hhT0hteG1aQW1tekM3TllUYXJ0aGpobzJFR3Z0cmdqN0tmQSttTHlueVN5UHA3OHhZN1U3UzA2Y2t1UUNwMlgrOGxWOFBFSkpmTG5rNERQUGlYUm1nU2dWTlpoUnFLUFgraVp0N1hkcUs0N280QzlLeDhOTU1NUHJ4UUUwN21TKzB5WjNVdFFkSGpSQ1lrVVl6MlhsR2RORzVkMVd0Z2dKOGFBTDZySUVVaGYrQVcrT1JZcUppVi9lWDNEc2d3a3BDazhvZ1N5YUJ2SUd0TXFQSFZwNHhBWkJQZkorSVN0M2ptZVUyL1ZOeFBEaHVuUnBkUEhmZHdlTm5pSDJpZzAwOG9JSXpyeGpodGJQdUhwK1V1ZExPdDEvSEsxMm05QktKZzNRdElPRU1IYU9GUzdLVHZWVGNmeVZETXdYNmpYekZiTzBKcGJpWFhuVk1SaURhSHlsTit2NlNBRmFIOEpkajNOa2Fla1IxczRCVDI3K01ML1JYOEtqeDRNZzRucWRlSmllSHNjd0pGZ0F2QkVUWXBLVWFHUHRFem9WOHpmMjdyMW91NzRZRjJUQncwK3dWWHlvbCsrUFllbUViaTB6Ry96eTJ3UlBGYmZWdmpkWVRKRUVKRzhyMzdIeWFxbTQvUHlHZlN3UmRveFBnc2ZwMDhRajVhUXdJNXhXOE1lajNhRUJoayt6V1hYVmpZUDdRTkdUbm03S281MmEvaWZlZ2xQb1hQY0xwaVdZYU9qU0R4S1VidnJqemN1U1pYZ3JJNU50WElZNm45eU4xWWpUajRobkIxMEFZTHFiakdmQVptVVVQMjBlRXNiODd5b2Uxb1c4ZVYyZk5xaTZDWUsvck1HdDFNU1FVRUM2cTVOWllWUXE1WmNGUTF1d2twQ1dpVTV5MXNxcUorYlRsREFjUzBFamhkcTNSTGhXdU1CaUhBb3Jqa2ZIK28wMU84a1VWeFBLalV0RHNwcTArcVFXOG8rTzRMYzREME5wc21hbUpkUHc5S09sUldabTA3ODRIRHRPY0JBN3BFY1hVSkpqWjNGT0hoZXJEQTUreEQreVFMR0F4eWNtYmlvem9KcStaZ29JeFVtMzVveW5XUjNYMjdYM3NMZnZjNjdlem1aVE5nOTB0NkJBeG9hdFZ1NzR2bUxYWEtnU3BjUDdkS2NmMkRvaFgwZml4a2dSalR5OVRIaC9PN0NCbVZZSGRDdHNHQ2J2NXJoK1pmancvSnhTL2IwSmcvZXI1WWdDMTNRZEtUNlhBWTNFYmhLTThwVFMrUjFnUWVQeTBNYm1XTjVyc3JFdHpYbmRMeGtlcTNEdXhaRE9ObUF4OFdSRVJsb1lpZ2tXYjA2cDFPNWgrTS93ZklOSW1TRWhoSkV1S0ZibWxZVTBReFVvY0VvMTQxbk9ZTmh6UWViSjRORUZBVGhHTWI2ZDl1QWRyTmRoaWk5cVF5Qk9qMWdCY2NyQTJxcGdKZVAvWXI0N0hONEtoMDRQK2VZV0pIZ3U3ckVqM0tHWDVRV3ZUNEk1SW03WVYzRitod1Urdm5YWS81dE9KNTdLc1pSTCtqWHpDeXRhdXEvekZ3M2RrZHhNNU81NjY1bFhPUnl5M0VaNnRYejhza3I4NUpkbE4xWmJvRU4rNThJbU42ekl4NDY0L3dzVlhCeHFxejIzUnUvZlBLT3JIQjRPWFAvRlVRdUFpOXYwcGdlYjhQOSs3TTlmZjN1WXpmdjdJQTBwcmlyWHJzWm1Kc0JoS3pwbCtubFNncmExZ1ZKdjZRRTBGUktIaDNRU013TlNVRXlKU3FyczFsa0lwcnVrRDhnK0g5T28zbGRvY3pSOXZsOUhlOUlsbGxOMEY4dU9MdzFsQ0ljNmRadWovWUpXcC8yYUV4VFJvazZxM1QxUnQyMUlscXBVNTNUbU5OckJHbndjUDJBYzVKMnFKMEFsQTFYR2V0b0JwcXV4dXh0WXRkUC9DMmk5ZDlWdk1ZbkxBZlpyNzZENzFwSW1mdUNEVjArdUVJaHFkcEV1YUFHUDZ3ai9WRitPSmhucjFkQjFGbE9NbXlWZDNSamxOMGF1M2pZM1VWejB4cW5ZNDN2UUc3L2YrV2NNSThzU3VPL3A3ajR5aW13TXRnOUR4QTRmMENWZVNtQWRZKzNLc3dSV1NwaElFSGZvNFBhc29jU2RWdFd6c2dRZ2VZeGRIekZKM2FjRkZXK2VlUFBGeUxKVS9ZVjlBWXE5YWlCeFR1RndSa0NiYmw1TUdJRGxYdVRPU2taem1id0gxZWU4TlBBcnd4TC9wZ2ExN3JsZ2JGQ3grWlBpOHdMa2NFSGozN25ibUZVVHNMOEpyMFAyQjBhRlB4YnNIUTFsa3ROOU16cW5ZV2RnT2t5WGRqVjZkZVFVS0pPUmJrR3hCdHpQckxPdFc1T3BBU2tYT0lPR3RmRzV6UmIxbzV0cXFuRmxvR3ZvbU1mZVIySWRtQ1lWTmM2VXY0SjRISzc1dmRwN2xPSmNlRHptK3RoSHI1RC9mSWp4RStva25TU2NBYXJlZ3QrUWNwL1ZrVGQ2OEJMRkF4MG9JZmlZbTg3aWEwTTBMdGc1OEUxck54Q09PT0drUjd6SzY4Z2g5V3BMQ0l5YS9MZEtlNm1yVjBYbzVwSTJnOUplaDFEUHlhUWdwTXFTT1VPSGM2WlV0aDdmNnN6TldEUEE3TzU1WkNuSFdWT3IyNFIzWlh1WHROeDRna2lmWW1VMHo0QU05TnNiTzNsWFFyb2RseEFKNy9vdXpOV1BPK2xuM0F6QU14b2pxKzdpOWNVTTF4NW4zT2hIRm1WTVdiQ3hadjk2Qnpza1JSV2wzYnVaQ0M3eGhDbVJDL0U5NUNzNVlJcE5ITzl6a2gxa3EydTF1akZ3cklzK0hLZDd3eUlIeGVaVzFTVTNneHc1QTFGY3NtbUppR3RTdDhBWGh6K2R6dFJRbDV4NUxUQzVnWG84YnZTNGpiUTR6d2JJQlE0YzdEcTBOTmo5RzhHV3dqck1FMEhocWhFaHE1cXRJYmYyaTJDVkxWc09xMHIxQ1MzSThlemc3Tk1MMkFReDJicjFveEZKK2o4bGNKL0FNYkFwK2lhREZTVm0yTFUxOWZvNUFLSTk2TmlROWdqSitZTTQxZFd1UnprY3krdkIrQVZJcmxMTkp2cXBTdXdDdHZ1MXVrOXpVTTlES3VZaXRQeVFnYW9IVm04b2xsTk9RcWg2c3IzVjU2Z2dzL1lSZnRmaThId2lyYjRhc3ZqR2tiV2dveTZrS2xUekc2YU9ROFlmSGN2ZDBBZlk2emExNEZFRzBMTmQwRnkrYStSUXpQK08yVzdiV1dOc21oZTRKSlNQY08zdkZxZjUrbGRqbUxCc1ltWmpmNE1CNU9VVmhXVDlnWmNTemFxUVJqbUFiNk1VMEp1VHpsY3NUbXd4N1Azc2RpemIxYzErV3ZqM045eGUrL0M4dzlDa01MSDhQODRyUlBZN0RleUhsZlVndW1ZRi8xYmluNFQvelQraGVkazFTY0gyRDUwQ3N0aXRESXJ6c0pWY0ZpVGhxZi9WU1ZmSHRKSkJPOHphdHpUbU1EM0RwTGNmYjU0WjdhVFFpY0VqeW5oU2NJd3JDbWRVeXRZZG90czNkeHBRZnFDbHFzY3lRMXJCUU5iRW1lSkJ5RDh0S1VKM2RoalJsVHZvQm1tWUc4SVhSWERHZllMZjhtdHp5Y1dqOVAvTm5hSHgxemRudmxSc0t2Z0M2dVhXWHJuQmR0VGlsYlprWHhXL254NHg1ZkNvb1JMNlkzYmIydWJSY1pPZ2VlRmRVZS9WdjBmNkVTaUNacVpudnRDdFBmME1mR1phT1k5NTRYdmNmN0lNK1hwandpMmdna2FLeE1SMXhiMXpiWG5iTFh1Rm56bUQ0Z3lOVk14dk0rTnloM0lyN3VXV0kxRk5JSjJBdHprb0hQNzA1VUJTQlVrTDRJNGJNc1dTV2VuZTNIbGtWRjlxSXAzUVphQTEyeTFtbjFwbWRhQnFPbHU4NG5WbzIvVnpVY1ZCaDFsSDhhMWoxSGFOTDVFTGFnZE1CMy9LbFhHYks1MDJzTlRkcWZabjY4STJpZm56UzI3Y0xzcWxBMW0vMXo3Q2JiUk10Mldkb3N3c3JMSFBDd0JUVVZYVHB2THdOMlhndW42OG10ZmFDMWpiR0hUb0NQRkpaRlNaUy9ENkpWYjVCSkkvcnZhMUNsVzVhU1hla0M1Z21sSEQzaisrTHFST2lrNlRRSHFyd2s1enpWNk1OV3VsajNta24vMGJCRXZyekhKTjRsVlVDT3ljZTVNRlNnT0pUanIxb21ScURlYzJpYzJ0UWd6VEduUkl2SWQ0V0RtK1pWaU5OeHdTRjh2NDRaN2xwb2pvUnZSb0tNcnVISnorMFNkUXRhK1JPTGF3MkFPbEEzV0xQOXNyamtqbCtsSDZqL09IYWw1R3k1M2RDeEE5azVyTEJ0cG85U3U3MHZuUEYwQ0IrRWdXbEdKQlErQm9EMXJVZ0ZxekNpdFdhT1dWTnhUd0RBQWJ3M0x5dTVkWWZwNStnRFc2OGVJNng1MHdiUW4vdHNKZldvem1EeE55VUgxejJXZUpBVHdxSm5yRmI2OUFaT0R5K1pQOGtuQjFNYnJaUFRvUTF4TEpNdFIyUnNOTGlwSm9pNlA0Z0QrRG1FTC8wZXBVS05xcHUyY2tuUmtBWmh1V0RjYjlTTm1jdXFQME11UjBOQ1FhbjJpQ0FNV0tOVEQrdGR6eE9PZ3dhZHlYWVNESlhjajE4RlE4UXE3Rm5yazZ3dmFLTkd6Z1FvY2VBREczR0dCRFFIRTJycFU4dm9lOTE3T3lteVhJcXNOcnZSN2EzWEo4aGhtbnR2NzNRTlp0T1hTVmdXbGNZYUg3enoySTJLazFCNk10T3JNZzdZOW5lMlFGYllQWU5oZGxnSGtyczlOZGQyKzFOaWJkL2wvV25ZSmdoRVowV2VublAyaEh4RWFPcWg3STd4WWdONXdMVWpLTWtTSGc0dkJILzhiZ1dkR0VqTVovU0F2Tm1Oa1FZU1M1cUIxZDB1VVo4TXllZS9HSHFYclpjVjBlU2RaamxaZzExclFycmNkZkpLaUQyTi9HaVMxWUtLQUdjbzVNdjZLSHpYMEpUWEl3WkNLN3JyMzB2NnlpaERyeXoyZVZVVnZXTnhPQW53dWxNbVozMWFuOGN3YllkTEc4RDhlMWd4NUtGU2FqdUVpK2Iyc2tDZVZtaC9yR1Joc3lNWFNQWWtLemFDSzBkSGV4L1o5aUhScjFLYU9XL3EyeWdaUENaQnVHa3dmZ3FWQ2VrOGlzTmNTMFZsT0I1QitIdjJtUnoveDZNbWU4RDBwUTBINkJXZFFHcTVoOEdicWhQRHVaMzlYU01sTklKaXlEQzdVM3M2OGkxd204VFQzb25HY2cwZXNkY0xHVldjL2tuRFM1eHh0SzNJblFsNU1RNzBSbFVKdW1wN2FvZFQzNnB5Zk1EZjJxV2VWZTlRcWtycTRzNzRPV0VJN1BSMVhpTTBoeXhuUmRhSHFaQzkrcVl4cmVtc280eEF1aU04bHBhSXBxQURPRU1zOWdYOVVIU0tRQkMzQUdJaVhIMHd3NXQwellnNkx1amZ6WjhnczJBM20yRWpGcnV3dFdiSzNCdkowL240THpVTDhlTWNJTWp0ZGVUVnM4Nkx5Y2YxUlUyV0Zmd0daZTFOdmNEMlZlTjVIQmQ5ZExtRzY2L1Uvd2tKMVJQclIrU29peDBLaVJWTlJYRW1UVnRYUDQwcGFvUDdXTHJYYWhOYldlb1ZZeXg2dTc3cTZsQ3pmVWlBVVRUNnJHdUh3OTN4T3hkRDRTSzVSWGdrSmt4RUlVWldNdlNNWVZXdEFBSXNoT1NsUVJDcFVmWHpaeVpkL0RjNWdBTnBCdnpISTM4aytYeTJVWlV4aUdqcXFDS2FaT01nK3RnMUxJUE5NSlI1SU0yYWxWYjh2YVpZUGVObC8veWlzRVJrVUt6MWxURlZMUkNSUDQyTWVXL0hCb0Q0SnlLUWdzYndoZXVTK2pmVG5aMmJzQUJyVDN0U09EUkpxNVhhNk5ZUEIwMENYVldSNlc3NFR3dlRyaE5JQ29DYm44bkpwWVp2dlNBeWkydWdneUJEbVVBeTQ5SW9YZ096SkM1RU5HNS9Md2RNeDVqcVpUVlIrZmJGWlFNdVJMcXQ3Y1JuWkFBNnE1MU8rR2hTaDRGM0o4bW50bkpHK3ZRNjVNem5jM25lbmNYRGtNeWFLZml4ZjJSSjBWK2hwSHMrTGVLSkJ6a2dPMENEWHhydXdRU0lGblp6UmxiZTZBVUVvcVNBT3djVUFadjJFeWtCclNFSjFTbU44aWZNa2NPMEZuSTNheDBoaTZhem9rRHFjL0NWMkRMUC9RSkE3Y2V5MmJQMDg5ZjBRaGRxdjRWRTJZNmRMRDRRd1ZiNCtuZGVwY3puNEZNbE9OOG9QL3hKQlZDa2JSdHQ4d1h2bnVRZXdIamVvVFI2QVRYRzdEUDlPQ1dOVklDM3JkcUM2TE84czdpK1NBRnRZc2tiUHd5RWtoQ0NwODBiWmk0WmdBdjFXV0hITUdqa1o5bzRlU3lMOEtXb1Y0Z0cxelVRMUk1MmhBSG9YZy9lbWFhY0Z2bk1DdHI4aEdsQi9ZTmhqcExTdmRjSmcwOENJN0RoUUZPeFhEb2h6TjNNMElQdVZLMGdhR3VGSmtuVDRjQjB0Qk9oc0g0NDBhRzVqZ2oxbC9Vd0c1VHNaOEh6cXJxUGFoNC9lanJCcisra2FjWk5xR1pkakZ6OTBBUXFNUzVCY201SWtkWDdMK0F4YkpLRnZDQ05sK3F0Zmhna05pa2VhZXdCNVRpVXdHR1F4OE40aElBejZBaGFOU1JJZzlUcElsTWVLcUJ3TlViQTd3dmR2bGoyWEpHY0hSRnJCeUUrZjVKWk5wYzFQZkJYQS9KSnJ3YVdSWXAvYnF0bHozdk1VYjI3UHFXNlFyVElneHY0dkFnWUpQR2Q0TmRZYTlLRzJPc0JQU29kWmZCZ01ad205VlJyTW43U1VPMk96c0lyaU5iY01lSmtQTi9IUGxIMGNKdEJGZ3NPUkVzeHIvVUxEaEhCbEZkWjdKNzRFMkk5RWlrQUF1SGJWZ29KSWtKVDMzUUhIbjNpcFcwYy9UNnJ0OU5pOFdCK0xLL05zdW1TbEJqUTJLUDJnaDJpK1BwZTNna0FqdXdSeGtEUUlQQ05hUWFQalZ2bS85QXJ0L3J6amg1MGR6VytSV0VyOVluVkh0bkFhL1ZtZEhXaXV6UVMrQ0JSMXdudENvNEl5SFhxbnFWYkhTekYvNjNKc2U0QWR2eG1ZeUpKTUxRUlpYcXpOY2laYVN6SzFUNzAyZit4VG1nQzNvKzNFTHJRZVE3OEhzUkg1VU9hWHJGdDc4N3l2aEFCQktBTHptSm9yNFl1cGpLVzlxay9xQkZqSFlwZGdjaXhWTlFmZFVneWpFY3RiUzVZRVJkQ2hRMm5waVZoclF6Y3JSOEZ6cStTUG0remJoZktCRnlDRHErQTg0b21jOHR0VHFZRk1CODRMa0lxcUtGUmtibG9pd1hvdjJOUDdmNDRCYlVZQ0VuVmxmdjZlQ3E1bXcyTEF6bXE0eEc3Zzh3WE9UdG1HbW55NDdHcGh0VzV6QmVUU3JOWUJ5aW9qZmNmdmtmSkRESlZueC9YTWhneGhCcXhEUmtFVWg2WjI5UWc0d1pCUGkvMDdtTEdoTldnanJ4YWxNZEtsRFRFSTQvMnZFek5vZVMrUDNCQnkvV2R4Q1hQcSsxZEY2M0huYTlJL1Q1K2ZoTjB0Sm44bzkvSTBBZ0Y4NFVDTXJPVG5uQU5vS05nVkNLeHVHU1BPUFdwcGl0VVlab0swaWY4clFlK2RYZ214cmcvK3JJUFFLSWF5RVBCeHQ5YkN4NjlyZ09CaE0wMTR0c3VxUmczZEJhaHc1dkxid3B6WW9oSzI0WHAvSHdEbWQ0ZGh3UEhUT2xvTS94YlhkTGhYVDFJaFVNcjhoMWhnRFByQU13R3U0RGxZOWJmN0E2djBQb1BvSkhuWTJibXlkSUFJbGFxbTNQNXVHVk45V0pJdC9Nbkd4NzZuc0piSm1YbDMvWFJBNUVEaWVhVktnMHZMZlpKbVh3L1AxVUMzVFlaNHRreWU5bThNR1NaY0VjT1MwN0dWOVA0Vnc3QW5VNHo2dFFXTWp6L1JQWDdCVkhiU3c5N1IwOTlZbzVqVzcrZEZ0T3hTbVNTeW5jOEpwSjl3dXZUS1FhYXpHMFM0MkNjenFkRmtDdk9BMzBUcldFcEVhZ0Z6aHhiNW5KMTMwclkrcjhmWGhxZWkxRzdRc1R3ek1UUXJKNjA4ZFplUWkvYjhYTmc5RmlzQk9Lc2JDWGpsSE9kVDFySFlua09wUngvWW1vN1R5bGtzN3AvSjJ6VDJucHVtNXBIRE1ja29lQ040S1ZhaDk0RTJhajlvRkNvUDA1OFk1OUxDTWRicS9ETTRFb1FwaHlhMHhuTGhDVit3OVdBY2N1MUxiNGlVN1BMOFJXQTcxMTVYd3B3Q1NHbHN0eGFRckFidDF2Q3ZzY25ZTXhmZkJjVytLT1F3WlZlcThLZFAyMWY4aEhiUkJCK1JNaFdYaDNQem56ejVWOGs5aXJwZ3lrbVVEL3p4OUwrUklYZ1QwcS8vVVRaY2R0MDhBTERLVHI0bnhTeTNVZHFZR29tRXM0bHJoWURqazJjcmdVaVMwREM0eElhZ1JDeUYzLzlNdWtoZzVMaUhuelZVbjFMRmdWdmxkeWNVYXVqMU9yNVJ0VFhPQldsczg3SXd6ZGppYlhuQTlzd2VLQmRRR0tsQ3JjKzlTdnVXQ2h4SUhmUUhNVWN5WEx3UFR6T09maTAvanBDTDV3NTZremsyeFVNRkhLRzU0WGhGbE1GdDNvS0NFUVpHSjhnZ0VGVlBpZEV3ZUVoczVqMWFPZFdCNnZwazRvUmhvalJnUzVCR0xEa1JOYktRNnNlQXFVN0JkVUdqL0sxNlducjNiM082b2JRTW1DcGZNcmhWeklvWUR5VTZHSlprMjNWNjZpNUJZTHlSSlo4S2Y5cXRLRVgvZkVrY2VCYjlOa2FKWjdSbzZ4cGRuTGVYWkhyWHZJNjUrSWlESXFhSDh1TjZaSUUySUVlQUFJelN4MWV2OEx4VVJPRVFJWnBUU1ZJYWFud2k4c202V3lHaU1rblVtS1ZLZmhDaDR2OEdmQW90a0FidVVVKytXM1pxa0F0MVlvb0RMQ3VlcGJzV2oyNndCY0FUVFBaSERMNWMveG5DbEluVzhjdlNYcmYrOThndXpTWWovZEtLZTlvbXR6bkFVOWt2VCtkYUdIbEhxdzVYUXgxZm9BcjdvVG5ISmczTkdhUEVURU93TEk2Q3lFMlQrRDlkUVJHSHgxZldUT2MvZGZpQmNCQWNtUXVDWGNNMi8zT0V6UmpQcXVOa0VlaXNFVnBRREtUOHJRREh2Q01mK3pJNUk3M3FNc0hpMDNCcnJVYVI5dWRxQkxBVFBtc2xBTWlrcHQwMzR2SFpnRHMxTm01TDl1SjcyT0tDYWtsRHl1NFMydGxYQXI5aFJFVHlLSS9JcG4ybGZ4bjZ3cjdVSGFid0FZUDM5VjR3dnVYbXhGQ1Z1bGI5MVhVdnoyVmxLZzNjUnBua2pLOVpJbW11UWUzZXdsZkdXZWFOa2NFOVVxUWsxS3ZxVksvZmMvM045WnY0bStOd3pVWG1DUEV1bUpkeUtVU2VaOGNMUmlNa241T0lvMkhjWkVYY3FVM1I2TVJZb3d1WGg2QjNXYUl2Ty9uWVM5S1NEb2paMUQxNVVTK3ppdlRaRHc3UFErc3JOckVyalZxMXVLMDZzZENIVzFuNmFuZjZSVk5YbTRaQ2FxT0FsbmtHU1NpdVB5b0t1WUlTVGFSOWF5K2RSNlJvM0tiNHlWRklJbmc0VnczWDk5ZjFRRDJWRG1kR2dZR2Yya1N0YjlMZy9Dd3pYdW1RSzlIa0Zac1hTVUgvTVUxSzJ2QjFRSlFiZDN2aVJ5aytTT3pRT3FZRGZ3cDRnemlGeW1tVFMvcTArUFViRTZONzBEVkk2U0s0QmgwdVBKZlZ3bkhMdWJ5K0lwdTBqdFdJZ0lsaUJGOU0rcnBncS9QQnZPN1BXRHFjNVlVWm5YcG5IZEp5N3Z5SDRlSFBBOFdoUTgwUjdyd3lBNHZlUm5ZTkhCcU9nWWdDbE9QQnBHSEVvZU4yWUs3MHh5VkdVaEh4dUJRc1EvZHpZQzFzVjZQSlo1a0ozS2orQ2kzVk55aWFZZlVLNU1ML05tbjh0NXZndEg0R2V6Q29PNEJXcVVLeFFZOVI0eHAxMXpTK1hoQTdRZkpVR1BGVFNaWVhJQWxYQjNzcGlQbk9yMFc0UGRIRzNzNmtvOXE1RW9rbXc0aStUcU92TUQ1SmJWR1dtS2hyNjNKYXM5SW5ZaHUvRlh4b0hXQ3AzdGlmKzl5cEtNZXUvMHhreTYzTHBCNnN1SW8vMVg2T3JwYWE1VHRMUGQ1d0dWcEN6bnR5S0FVdzBjeEV3aVQ5aXVwMHFhOFFMOVlNZFpZdm82WG9wRHVNMm9LSjlRVGlIRU9uRFhWdEplT0RPNi90aEtyclJwL2RDWDdEQzE0RVNHZW0xOTk5Vnp5ZjRqWlUwOW0rejVLVSt2N2tQTklkSjI4U1o0dWZtMnZxVXduZlpBZ0FVTWJxRFU2QklNeTcrN240ZlBKaVBZbE5tYWRSYVh1YjgvclBQK05mTWFGbXpmemFRbWdmb2pCR0tIa3NsY0M0b3dBTkxJU1R4N210dnRpOG9Tc1h2NWthUy9pSkREbEZ3SGtGUEZGRllrY1ErdytYWUlZQUk2WXdURjg0My9OWUNoVy85RDZkTkRHaE4ybTN6eDJjVm9jMllLZFhvU1NQRWUvOFU3ZG1wZ3hZMDhqQkgwMlBuN1REYkw4MGNXQnlxSWhxUXRzcWt4bDRuOGlyWWIydVJxNlRPU0FVOWVzMldLNmoyRGYxTVI3clJRM21DTW5xSG95VVcwaWxJek9mT3pOY0tjYU5pUUF0Qy9BZXZqMUxQK0Z6M29KdWQ3V0w3UjB4di9hYWVGR0J5V0E2K1N6bWZCVklSam1sdGJzYVlibUFEcE5VVVNTQ254RUtjVFB3OHRybThjY2ZIWmd0MzlzYUV1WjYzb3JwUjhXQjA4QUdpcjJyVE9BM3ZWV3R2Ry9wOWRXYUdpUVZqUWtGQ2o5WmJJYUhOOUF4NnlHT3pkdEova3A4RUE3Zm9LK3lmbFhGdS9PTmZCZHBmVUJMa3JiUU5hQjljanlBMXNRdXd4SUZtaVp0TGV0aTVQUW16b0Z2ekZObVg3TTZIQVoyalBkVGIrbnV3YkYvQUZCL25OUHRZOEFqOFJYM1MwdC9xM0piRVNNT0ZBU05RcUlqcFNUSGdLUEdPalRYcis2bGxqQkFBbVQwVnBwWVZHQTkvMFNGYlFYRlRQQ2dScmpMczhFU0VWbWpDRkd1SjQ3dzMwUzdFT3YxenpaM0tSWUdtWUw0Q3VsU1M1cVlBSUJGNlJjU25VUDJnNlpMRVAySmZkQStCZUtZdU5TNEJiNHAvc0dlVWFhZjIrZ1JTSUkwamo3dGhuMXdjVU9LV1cvREVtYWlueGRzenV5NEw3M0p2WnhUM0lqaEJSVW5OVXdiL3BTaGJqVTV6ckxDUk5LeWtVK0JCYWt3SzE4UWttVjk3VzlGck83OGpFVDJ4aUhjZFNDV0pTc1NFU0N5OUN0SVZJSHNJZHlOYUZ4WVJkckp0akxxR3JpL3gwdTdXZ0tyQWxHUXhqWGoyR0x5ZGM5YW5CRllTZm0waEJXbHBDelJ4dElmNURocE5OWmEyQlZsNE1tK1ErZzlVQ1FZV296S0NCWDNsU2VQWTlEZzRTZEdzR01GWUZ1Z2J5a3ArR0pGSXB4TjdZKys1a2RvMXZpeUdGR0NpZVk2Z25GTFN5eVZ6YWZsamF5S2NjTHRQY1dTaE9NaC9iQWh2MmQwKzJ4djl4QkhKSkM2SXBVVEJ0aTVJTUJGc0lkS2dHL2M1ZTh2ZFdUbEx2WDRDdHVNOE9nd0Y4VjByak5nSzJONVdZd3c3SmNSZmpPRmNlVFZ1R2dTNUNLU1dQU051RHRvUTJZMVdQSzNIVlYwdXRUeWllVlQyVUVhRmhqajJSa2w0aWV5dkVLWm1QQ1N2UDUwK1JmRFRFdW1xY3hnM081cDRZcEJTVFhTaTQ4NC9uUzhsbE9obWFSaFdFZGx6VDBnYS9wZG5ITFBhUlFKckc0RW1KNnFSN3g4TFAzN1pFUmlqRlU1N1llMWxXMnRHZlhRVG5UbjZPM0Z1cXYzQkU2K3hlM3BNVW4rdTFMb2prN0VZUlI1TVFzdWRkZUk4cTRxaDNpTlF6RlV6NVhRMmo1T1NQTzB1UjRNL0FUdUp0R2JVb3I3UjRhSzNuSXIrRHpzVjQ4R2RxaUsvbjQvUGxHd3lZMzJUTmR5QTFjMnM3UER1eld3YlozZ2tQc013TytTT0NIYVZHaGUrbVdNelpoS2FQcUp0a25zY1lVeGo0bkhhalJzVXRxc0VuQkZDQlhrckxJN1NwQmpiNk1pbXpSVUJLNkdhYk1FQTFybnl3emp1VENPbEV0dGpsZWlvSDd6dXNXcFdTK292NjFQMFhWRUJqeWNSdlUyRUtXYnpLNUo3UWhPRm16TFg3NW1Ga0toSzJ1S2dvMmE0WUVaZ3F4ZG9CeTFtcElPV1VpR043cWE4dFc5RnlhU256K3dHMHp6bDliTjR1Ym42aytlY01aeEJyaFhQOHRKbWp2RXNrZmVsWWZFOGxPaGhTaDlZbzQvaE9kTEtIRzlrS1lEQlY5QzdmSU9UTE43QklGNDI2YVZ4OVZnSjNlbUNzSFNNY0NzUzRHRUpPTGFnSEhzbVp4MXFpWEdmRDlUNk1SVCtqUFdGNTRTeW1kZjVlK016Q3ZQRGV3YW1uUjVCakczN1pPNG5oazdBL0cyNjNiWWxxdXBSMURxMW4ySUNvRUtzeE43cVlnd3hTRkMwa09iMWxNYmV5Mjc3ZzRoamEyMWlTaTc0ZHljUkxGMkZnb0twWlA4Wkh4elowYnFwa0xYMHk1cXNEMHFLeUlDSjhQNkJ4bGxuQkJNTmRuVUhhUUJKYlAyMEd5anpIbytwS1ZrNHF2TU14TldiMXZFK1UydCs3ajk2V3czUWtKMjlXK2VNMnFDNEZydTc3YjdNbEloaTdpQnUyOCtRVEFWTnhsMFdscHFqTktLNVBsTkZaSmRyQ2lEWTJ1SjgxQ0YzMjJkdFp0Wkh1R05Gd3Y4VVg4K3N3ZTByQytMeTdhSDFmTGFXNlZjd0ZwZmZUVlo4aFIzR2MvMDhWTWZUUkJkVk5BM2J2VnhYLzkvQVF5eU9kRGV5MjJWZDlPczcrelhuaGlKL0xib1Z6SFF4NVJUS2pvSDlxRk9ubE9ZNStXL0RPSFdiUDRocUc5VWJrQ2Y4YjhOeUxHMGoxVWhzRDh6OWNjN0p4WldoSXJicmY4Z212Y2pyLzhrbDVuTHhjMmZHR2l3SnQxSDJ5WW12Q2tjaG9IR240WnVDNTNDNlh1cGpsOVk0bEpaRi9oaHp0VFY4Q0pIRGUzQS9qUjlOamZBRlAzVlZ5Q0NLdmN6YmpWTFpZc0ZsTVl3SVZLVVIyWlhwYVZoQmNncURqOFZWcnFmZ2xDV1FQdnpyRmtKcG91alBzSDhCVU83K2hCVi8xMlFVaHJ5ZjlGYlZhbXN3V3FsSlNnamM4Z3E1TC8rZVN4NS9kam1iR0hSMmZ5b1FHR2Nnc1hXSVdrYjBmWThyWmlWOWE1dmpmUG1CRlFESE4zZFZEa1p2bnU4dG9JMlhwR0MrdmpyTGVhaHgzZ1FxME5BMGNBVHBWNGkvbUFUL3cvYjUxWHZGVEN0N2p4TGwvOFBwSnVwaVQxN2Q1RVdWWEIwRyt3Z3A4QWFNcHZKSnM4N1RmR1dzRWdGYVExRFZMTGRib09mb0l0U2EzUWEzOUFvTy8xVVdJb0lYU2dOUTEwQWFpcm9QL094bE9vd0hGeHkvRU5NOG5EZ3dpUk9RQUdhQ0p1L3ZtSWFNc1lVUCs1V28xd1dES0UzdE1OcW02aUFqYURuZzdCOEw3SmpDNStKRmI5MnBtd0lpamJ4WEdkQTNVMkFEdkE1a3BQZnhsWloyc3FIbkdqZTQ3MStzTDhlU0RvVHJ0eG1RNVlHZEoxMEQ5WXhRblJHSlUzVjFQbmx6RHpkU29ORkZUYm9XQzl5NGg1Uk5OKytlb2M5RWZab0FWR09OVzZOeVBuMTRmSzF5VFpDbkVOY1MwbXpkTmF6ek5ydkVsWTRYYWk1VWMzcDF4TXhCR0RIT0Q3ZmVEdVU4UlNUcTk4Y1pKSjVXdnVpWXpUNCs0UzNzdWM0bFpGUGhiN04zYVR4TkJkaWRKYnJtdU1EWG80OFcxS2dybllSNnV5dUxWR2J5dmZoR1ZGcVVzdDJ6d0l4REw3U1pQcll1NEZOS25jbmVVMGdiVlNIcldOR2xOMHNialVlVHdPNjU5eGo1dnVpR0N0UVFLMFJpemg2eXRTN0RYOFBmQ2Q4anJwT2Uxd0R2OEF0cmkwNVdaS01HNDlyaWR3OWo3bzJWdkw1UGxIZkk1a0w0SnZybkxZS3dPaktBM1p0cm1jMXg3TU1hRmNMT1lFcmRNTXUzSzJEYk1rRDFjbTk4UEdqVlJGVDQxRDZpUjc4ckQwaUNudHNVd21jSGthR21FOG9nT0xqUzFkeStqUHRCd0dubFZva1B4U1ZrbVJJbEw3NVVOM3hkYmtMQTdjcWVxeHVBa3h3cUN0L3B3Z2I1cEdQYy8rQWdZVzc2NmdjeFFCRVBhTHZtTm5zYmwxbTg1TkVLblIwd09vZGw5V1N2NWJQTmVINWZqT2NwN1RQYktxSlVwdy9uOHY3Q1JERDdYVGVGYzJqeTdpWHVjN0dnc1JFYjYwNWtXSEhPc3V3UGx4alpaYVY5VFJSOXRtR3plbm0xQzBPQjBqL0FoK3Z3MU1VNm96SnNJZ2FwekVrNHlQeEpFZHM3Y2JFOURiaklvUldLY3pseWIwcElhWFBNT1lXVk9sSHNlQUVUS3NOYmg2ekZCV05sVDE1eHpwc1g5aGpwb0Vmb3dKNjZRV1NIRndJcEsxb1FpajExZk9HbGRKWWJIUG9GKzhmY0FjSXpiTUZicUZ2NzB5SFVqNW5wQUEyWUQ1WWViMWk1SGkwRGxzTHZMc3ZBZ1Q5NmJVZlBpcXB4YlI0YzV4cERxc01TNkNhZm9qRjlUMUFVenUvc3U2cTI1ZWVHbU50UmdPdXZrTEl4QmJZaldvNEJ1N0M2OXU4aytvNUJBNkhoMFQxTkpzdHVzS2MwWmdyaGQzaG05NERxSnpONXV5VHVjcCtERUVwVFFrVm9KMzA4UThvUytrc2N4a2hEUHJjZi9IV0JKSVhYb3UvSXV4QVoyL3djNGNUcGVhazJPNklhSFZrK051UzZJUmI5ZjcxYnl5TGVMY0o2bk9xbEZrWDhjRnFTRUhZVzBpTDFLRWN0T0tNR0hPMzJlbUErOElneG1CQmhZNVRpM0UxR3RBZUpiakwvZ0F1VjM1MFFhVlhud0poQ2N2QXA2QnNIV1grd3ZHL3hmaUo2WHptUHJRaGNuRnJtN2Q2KzE5bElTMWxwd2F6WUh5dUgrTXNpQzFOUHFFa09UTlh6WmtJSW9QUDk2dllEWU1MeDNIbUVVY1hwSFczRG1YWmZ3ZmpzV1JoQzRkbnllak15dFVaME1iZ2FmRUtQdGlzT1ZnUFdyRGJjRlJTVklocmN0QTlZTGpmcnhKMGhiTWpVcXp2TU02Y0dwY0prQWFUNGdMT2s2NWZPbU43Qm4yS1NEcWFFZ0ZJb3IzVndrYmtpREhNTk5UTVVQVkc1Qm9aWno4UzFFbXFzSWNURG93cjA2bmNUUTBLTHdsSmRkWDIreHA4c1lCRzJBZGsxcTc3S1JjaVIxeVVrd01kelkyK0F3QURPN0hhMlVDY2toNzJQcHArbUtGWmd2OUFERXYvRGlJbEJ5VFdycnZGQ0NPVUxab0JMLzd6TjBLSDdGRmNWR3llcERqNERMcS9SMWVqbnl1MXV4QXNGcUJydVM4SXB4emRONyt1M3RVWlA1QmUzSUZtUnM0ZjkvTGRJMVIrMGdPSWJzdERSRm1WSlJKSi9qZ3g3dFJYa3FGTEdNK1VnUndsRWZjVjVua1dzMGJaeWJQazZYUkdpYjZ6MmlEa0tUeVIzRjhZTnd2L1ZJSXB6aEhpOW5zWUFTNVhzRnB0OWczSjJOalZMSkhSMUJ2YjFlVFJVMFJUbDVQcXdnZDR5dmo1UTVmR1dtaTNhYU9ZaTNLRFM0anNZQzZWb0lsaVh2NGI4VjFTZU8xVjFRRW9HNlNtNzlyZjJGNndNczhSZHF0aktDWmd5MTdXeE4zV1FrM0NaYndpMFA2ZXVZcEVxRkVtTG5iNG9xTENmM0VqeVR5eVhKdkpadXdFZmhGZC95VCtFN0RnUVkvcCtTUXFaU2lSY1p5d3BkK1dRRTNpVWVnOUo0VmxGSEYxclR2OGdpbTQrTWJ6MzBQYnVtd1N5RVRWcFYwSXQ0WDcrZHdkOXN2dE5SejBRbzhUajJidnFMdXBaWXUrcktYM0JRbXhwdFFuUkVObTI1MDJWcS9yYi9UNHJXN0pxdE0vYVZmR09Vbkt2VitaWjVwaEY1NEN1RjFjOGx4UFczSXFVMldlS0psVXMxZ2l4OWpEd0JKM0JlbXVCUFVRR3pBanpFMmdhOTZGYVJNc2VCTzdTSWFKcit0SnN3cnBtczBRdGdPZHZPU0tMK013U3dNbm5BV0pzb3VLcTlmeDBDUXowRThrTTFRa0RidFNtWjZlMTZhUFhRMEFCb0dkZUp0VXIydnhneDFmbTZEY1F0UzUvMlBxY29NUWVXVWcrbmRwY0R2QmdQM2ZGcHp1MkFPQThONG9zVC91TmJuYU02bnZmbXI2aEpadjRkc1QycHprdU9sbmdma0IzZ2RlUm02enkzby9YcUppcWJzUXk4WVkvU1l3YmVRSXI2aVI3eXQ0TFRyeHJCWG55R0Rib1dCd3VnNVppUXlncWtRMWp3cGZPYnRteG45VVF2YW1NeitZbXQ0cFJob0VGZUlKeWRWTUpCc2NYOVZiM21MWUwzMDlwWGV0UlRjdlc4TEorYmZUckhhZ1Q5SDlTM1hsVlpoZmRydER6Y2xUMlFEQm5Gb2p5RlEzM3BuRnJaZE80L2RkMmgvZVRvWFIrK29CdkFIOEpDTzhlSVhtMWJHcVppczBBc2JIYjByTDVCeWNPNUNCbC9ncHFGOE9YWHdkQ2lEeGE3dWIwRW9TYStDMVI1U3k2Z3FkS3c4QUZLaFhHb3VFVFc3TUNTZUZhR1FRdzU0SFFTZjZpT3drdzVBRkNsMEpXN3VuQk5IelRjNzkyMDhsNW1obFNMam1wT1VyRTlESFl2ZVgySnBxN3JvcURUVVZUWCtxZUwyLzh2NS92SXRJQ1dyMW1sN0YwNGs4VXlSMXp3d0s3UTBLSFZRYXJjbUdGaTVCVm5mTWIvRVZpQkZGcXQxWlQyZVYrK2U1TlBjeVNJa2dQM09OckxYeFJ4c3FybTlaWUM5V1Y3Z1liL0FUd2tzM281SmJzbW50czVvNWJkS21PeFRpaWRCdG5GUWdXN3VTcHVSZE51TllYYW1ZdlIrRTh4WGgyUXFRQXVRNWZsZTEzSHVDM2JXcHErZDVtNWVpQ1BSTFZmZVpVQlpud1RFTHRaajFNNlQ5ZUJsaWcvVTNDWXRocUpMd1NUZUhzekNBMThXNlgwbVh3V1M5YkozdWZtN3g2Sm5LUDVJV2l6SnlCRDRKRWpCbjlyQjZTVVpMTnRQdDB0ZmtaWEI0YThERUpzcmRncjJBc3AvNzBJUnlDekZoOG9XcTd5NWdSUlFIVDRHcmt4Z1F5bXdiRjMxK3hpYVJTYlVwalQ1QTZZUkFycnlKQUZLWGRaY1RFMk5sUHhIRjQ2c2pKdmU0Sm1icVgxTE44K1RBdDR5NlFna1pqOXMvL3daeGU3MWFEaVRsc3Y5OVJrK1B2NkxRcnF0cHNBR2tMR1dsTVh4Tzc1MytPRU50d1lwd3hUNlh1eEpuQVBoZ0I4QTVOdy9tTWxXOS94RTF3dnViWmZTYU9jRGJHdC9uYUlLY3VkaEVqNWxMZ0hjMjJNZkRobTQ4Y2paS24vWVllNDdsL2RST0JrWHd6TElRUHVQbTl0M2U3MmZZVmVjalM3d3NzTWR6VkNzSXNULzVPOTdST1YxL3JkQmVVNGFxZG10TzR3b0NPZThZbkJaTjdYVUQ5TTZsaTE3MU9PcGRYcHp2RC93ZG5pemdyekY1MFBrbU82eFJEUkxzYlBacEdyUk11T0lCaWlHMWtNaUp4US9Rc1JJTXpqVFVvR2xvL09yRlU5TmFwYXhwNEFrckpDVUtqV245QVIyQzFJVnhXRjB3VVNYQTVEZWVCb0UyREF0WHhoK3FnNVA4S1VCSitjT1VWLzlsUDl3bCsycFN4M0ZwWWZwdkxvTmdUSFFBSGdsNU5XbzRtb2ZIVzBTRmkrM0ZDL2R0L21HVlhiSS9UQ0MxbHR0bWhYMm9oV2pHRWkzNC9MV3FXWE1zWDh4aGpicThDWmFodzdZMitZVzVGdmcwU2NHRDBCT3hvNzdGRDF3MWxwQ0RYNE9MYk1aQzRJNldOdUhLblFZNnZIN2plRzJOcnBWcEFZWUJyajVvYzd2cEw4TXB3U2pGYmY3Rm1uOFpwSjBwTWRyN2ozMmF1bXloS1YvM0lLRDI4RUhjV2Nrank1K3R3Y0ZjNkRtZUtMZVpoS0pVNE5JVzVNNHlhc2VHL05QWDNPcTdQbm5USFFiWlRMaDEzS09ReUx1SURWMk0rOXVRa0RtTG1nWithem4zODZkYXB4bUZ2RGZMWXhxbDh1WmUvblJuWU9HMk1PaHBGblRybU45UDVob0IybC9FZmxlT2FUT0JWNms0ekZrR2c3ZkhtczN2OEpIb21DU1QyalNudTg3SnAzTnhldmpRRys3YWxvdEpqcDZvemczU2lPdWw3SDIrRDJwUWJ6RVFlNVpwdG5ZdHNBSTBiaWtybTFURGRYRWZ0TXlhU0RENVRWZklLNENBOTJMeHpCRzlsa2ttSGVuMzUzV29sb3FCeVNGdUcrZHFWZkZENzJlVHVJZWVaWStoK2p3ZVBrK3ExT0RDWlVyZk9FNE94ajBZWmx5MzZVZlFndy93VnVEeVRjQ0ZRM280V0VJODVMeHpxcTUwUEtlb1EyN0s5aEpnR1dsbDNjSDFEbWJaY205U0wzSlV0bXVONCtCMk5HV2VWQzdhRHhrZVlkb2FZcmdlQ0F0RW5XRHFScFFMaW9TK3Z1YmpkczBQV1RvbnhXTHB0b2EzQUpoamQ1TWl1QnBxaFpLQU1qNjl6cmY0WkVqQW0zbHM4ajBrdERDTHF6MXJEd2VOeDF0OHRlazY3ZFRhVXRhQlhQSldEN0VUYmE3Y1NGU1hLd0pTUklzQXkzSmdFR3dQc1FIN0ZnaVplRDMybVpEME9POW1mTXkxRU5ja0NaQTRVQUM5TEVVdEllYzJtQ2QySGcvL1MyQ05XYVhBcVVtY3N1UHdIeDBNdzFmeUt4N29MWk9YVzZXTDY1QjBXci9GVTZ0ZWo2YlBHMnkzRklHQlI2S1NhWkRmOUtmbm0vT3B3d1BRektaZVQvMm9qcnNpT1lXOUR4djR3VTA5ZUtBSTdBMG4velZ5dUxpekpnL2JNdnRsbTRiUFYxZzZBRVpIRGQ4RWkyNm1uRDBmRG80eDMrd1N1Um44c1UwaUdsK2RGaDZubHpmNDMwZlVwdmFaMisrQTdiaGFwZGNTV3h2cWZtWERHRzNuK1VjZDBBZ2l1TmhEcCttNk40dlB5V0txV0ova1VuQ0VrTmR4V3A1bEVSVk03d1MyNllpWHptNG1JWkZ3S0pvNDVFaGhOakZJc2JodTdiRFUyaXd5RklZUG84Z09SMS9OUDhFRFpJelpSUWpIYTJuRFVtL2kxWHVqNzFPb2x6cW0wcWVGY3VaNmZVbFcra0k4VnJEdFU2aHRoQXNKOHVGL2Z1TmRkbGJ0aytBMk9pK0pIaG52QVJIUnRUUFRicHNsYlczY0NuNFAvb2djWkxlaEhXV2FqSW1jU1RpR3JmdEdmekh4OHhkMnBpWjJUQWFSVFVlNWV2RC9FejVYL0NUejhSbU5mZEZiRzAvOXJrUEp2SmJXc1hlK0pMQlBRdTBMQWx6QTVBMWV2aXVwVzNOQ1RyNUVKMU5uQ1BOeEhDTXl0UmN6Z2RxWXNxOXZuVWtqVWltdDNEaVdkNUxOdXg4RXVpMkc2SWYwRFdiNG1uSUZDcW4yU0dBZWUxZEIzR0NFTHBNUllHQisyK0RoT2xkb2xOSHdYVXkvNzNYOHJRWm0vU2wweUdZS05paHh1em4yUlYwbXQvQmh1NWJCc1M0aE5iVGRXV3h3WE15U25ja3p2dDhRbnFhalpBMVdQeEYzbmhRN1JLS01VQTY1Q2dGT0NZKzdoWXdrK2lQbEZIckNjTkd3QVBLanU1YjdkVEN6eWdXeUpzMmpVNTFwbWRCa014T3puYlRNRjlSQzBqNnVFNVB4OGlPcjVxR0dmZXhNTXg1eVNMejdOOUFzOHFlTmFvN3RraFg0QVlmZHZnY0ZleFExYUdxOTMvSGVDcTFIOVRkdENRVDBQbkN5Umx4eUZoTGRIbzFmVXJzVTBXRFBBbldSUHR2MnhhY0FmVVdYV2NZN3ZGYjlUWW9XZVU0dWJzeUhtRUh2Vk81Szg0ZUJ0UWtHa3BpTW5nV3lSclNnREJ6c3FYK0JNajBhMC9sYjBlNExneENqZ3Z6YlUvem9Zc3FoS1VhSGtVMjFLV3dLK2ZDUUIrTXB3bjdkcThYaVh6RlBLRUFPQXVsSDY2bXR1eCtoZ2s0b0ZsRURPWWs5b3FWTUtLYmx0Q25yU1NnbUx2aDhFVC9VaEZTR0ViUE55MlRub0NDeHZld2t1VUVscERjZWdpbCtKK2ZnWGRyYVBZVGVCemMvSmRaZkNwM2JDdTFmVVdSMUQyQjh0RmtvdTdmckI3RUgrWDA2eFYvakxTNEJwQUpjY1ErVTFvSk1GRXRNYjlSdlZNY0ZBWVQ0bjJTYjRPVEg0UityRGRocVBMTk5xTkNsQzUzdDhiYnE4TSs3RkJxUUlnSHNwMTVWNE43WCtxS3pVRlRSUlZhOHBKSEZuWHh6NnNRVnBBZ3pvNnh2WGw1eWhTbndWNDRJbDg5QXBFMHdUcHl0RktjaVZaamFHQTdDb2VZakNIL2xWdGpjckM2WUhpRXlVZmFqVGpEMTJ6aDhnaHJWSjBSRjFqZE01SGp0ZUlhMTh4RzFkQ1ZXZ082NXBZSlVuQ214NW4xaXlLaTVnajU5NVYyRnN3eXVpMis0QmdBMUU5TnhaRk1EeXFFckt5b0JUZ2p1OGpiWThCbDBHT0dRcHdBVnpSNXYzN2JjS2FvN0gveHFiaDVYOGpsaExGK3lIbkQycmVOL3QySDlEVHMzT0Y4TFN2VU4ydG9iL01kcWhpeHMydjBremNlQW9UL1U4MXZtbWg2ZjNMKzhKZDdZZlVncmF5M2U2b0ZGSnBNMysxVWVkY0dkQzh6ZWJOSXd5U0RnZzVMb250blZhRk0xS2FyZG1wa3luc2t4eEtrQmx2VDJjdmk5SW53L0llZDBzUEIvSjkzOGxxczlqRGV0MDVpWi9DMS9pbTBON0lscmVkaXZsVnQ2a0hxemdBbEVTSXV4MTFRRmEyNFZvZW52ZHF0NVhFZndkV1JkYTJUZTBjTnNvOVN1ajBabnZvaXNyZENoOSt6bVJNWnNBK1FuZzNzYVJFRWRZdHpseVdYSHpYTERrVDFEeURjdXJoRzFyRGs1b0F6dFpZWE5QenFWY1BCenV3RlU2akNpTHd5NlFKN25YQ29hSEhNRmN0TFZpQWRtaWpDcXBhdzdFOFRiYlU0NjBnTkZmVTdtTTgxWU10OXlhR1ZFeUlXUWtUeWNxMUpiQTNrUVpMK1ZONnhuc0lKdHVGSjR2RnNJM2xDN1dMZWZ6U0h3cFpPb01PRHFqQ0JOMXRjNEUySHExbC90MW5NS0xSRXZLZnR6aGpnWmRyNHgvTFliRGJxL0ZvUStmUDNTQTZjZGJKTmhDcWl3K2JYS1VBMFBxODhHdkNnSUJ3aXNxbkJuZ2JtNDVtcEVROG1UdzhXeHJtL0pacTgzektaTERQQnovanlaUUtkSG9tTXhnRGJua2pGTlE5UnVUSHlzVklDcVFuYkh4MHpLRFpUSVNFNTQxRkRZOHFYbksyc0NIWEtvd0lWMEFqSHAzdThsTWlqcFl0b0FTZHMxem05MmdxQjVqeWVjMzczUmlnRittVFRnMmdzbkpOcUZya2t3YzBoazlIWFFGdVprdlFjNWhSNWNpMVNKM1VCTW9Zbzl6N0lLWlhycmFKaHJhUGhvWW5mRlR6bU5RV25FQTJYY2N4NEdUMTE2WTFPcFpvTnNnQnRTVlVqSmxDR3V3WWZ5NEFVMXRuWlhFd21SSGprWDhmS1ROSWRkMUhnQkw1Y2hPNVpYdFVTam92cnFGdFhxeHJUUmhMQW9QZVVlRnYwYTE3eVdjTVU1Yy9XL0wrelBlclRJZUJjQ0dkRC9UY3ZNVFBkV1ZKeFdLQ05CaVNUOHgyY1NkUS9pdGZUL1hINDBIRVBkRUF3TE5GMTNOT1NKb1BkMHFvbkhRMjlLVnEwdFQvakFER3BTbkVWbFo2ckhjYVd6ZVEwL0RqOENlbEdRL0lweDNjcSs4dEhaQW8xU2w1SXN5d0hwTnJacW56bWF4dktCOUlsbGFtaHVpWDZKbi9ETnIyQ3k5cE1oNnYxVXdlMi9FUk9ldGxSNUcxakRud3g3TkR4S0xxOGprdTNZUkVFZzQ5YWxiT0JVclB3cU53WEwveUNuZE1oSlJoRnlwQ0ZJdGN1eFFHMmN6eGszRGVydS9JWHBrYWNNWHhnNnBpd3l3OHdiYlg1cnNEanA0QTlIMno2NVo3U0ZQWUgrWXJYOHJ2bVk1WkVNMGQ0Q0tOSHV6WGdzTURqWTdUR2hjNlM1WVFVbWt1QmMvbTI5ZUM0VUdic0R4LzdFWUFkZTV1anNQSnRoSzF4ZkVwb3haaXJHUC9aU1p5TVVGZXU0N3pzWTVnTGhkR0FVSXdXckM5NFo5R3J6dnhqcmxzTWhBRWc5dHNLUElPcjY3N0VWY0NLaHRocndmWDhMMUtpSVI5Ny9VbEZpWTltTEVxV1Baa012WjdvTHB0NFNsVU1aMEJHVVN3cjhwZmVURWVnRVI0K0dWdjkyQ2JvUXN4ZjVLSEFpNXkzcG15NVdaU2JmNjVidFcxVVFyZ1FwbENNaEdkNW9uNEp0dUFkRjhBNkE5RFc5V3RmbEpobGdDdWZzU2xZeWduRXVxQ3prNENPSk13QzlyT1FLbXRYbTJzSEVoZ0ovRklFM3d0MW5RWmtreG9UZzkrZUlUQkVsZjVDUk52a2d2L2JldGdrWWxWZlBJSE91aFBnRGdLKytpemduSExTY2M5YnpTRGpzTWF3OXdKTkxVNWcycUI1LzBqS204elY4NU4xRW1lRFhjUkdQWStnL3E3dDRYa2VObk1GTHZSVjEwU3RYdS9aL000NVg2d0t2SUNEMGhLZ1hld3BsRGtPWDIvTFkxZW5jaWN1VUFScktMNlp1WlY5ZlRCNXI1MldLdTZMZTBqMjgzT2xHRFRZbGpxbHM1T0FnNyt4SUw1SkdwRFJnOEZnMi90Q0duV0FzZlZZTHB4bFBsMGxyMlVwV2xSbUJOYWFRT1hQWng1ejVZVE94V1NiZTVZbktTWHAzaGdVcC9kN2l4aUFXRkkyUjFZZ3JqU0N3VURXWTNGbXZOZHg3SGdQMm1ILzNUSHJDdGxUNVpEYXZSNzNEZzlFUGxKSU9aNzJLTThaSEVOU0xkK3VsNW9QVi9LNlpxaCsxaHBsZFU1SVJLOG9oZ3pWa1hJMk9zWTIveC9va2NhKzZxckVVam1nV2luREZVV2V5Qng1eEQxWGJ5Sjc0ZHhpOHdHRmxGYnMyb3VIRXRPVkcrMG01WVpOWDQxbWlMWkRYWFdiN0ROT1drY3lGcjhXVm53cVZpcGg3VC9xYUNYOUV6Z0lvN2lZMlVqTVdSQTA1TWMxMVFyeDhTK3ArUjJuWWVvOEJhVmx0Z2xDWkhaelRzZ0duUnF5K29aY0NsaHR3WWU1dms3c2gxWk5aZW03ZnpnUUtwZ3M1OWlpaWFJZ1dsNDlma2VYTjFpUDFDb05NY09ldEtwU2ZVNFdZZ083aHVzY2dJdjlGV09sU1g4WTdwWllSZWxHZnFSVGFXd3FpTGNidlRlcmFjR3oreUlsR1Rydy9yd1ZBaG1CdkIrUmpDVE1QR2tpOHhEcnZHMDlIUmJDNGZ4eVRBZWQ3OE0wYjNYMzJ3dm9XY05YQVNSNkxOUzJOUGVhUXhwN3dyamt6QzVUSVdmWlpuNDlBeDROandyRGVLdjhWdzI2OElER0h5Mjl2S3owMmk1WEMycE9rRFRnS3U1YTZaOHQ0K0NuN2ZWV2h6cGt1WDBqNExIaFJiNVJxZG1zbENMK1hWcWRyc2xma3VOaHBYZ0NCcTdoWjJYS0RPeFBSVlhlNys4MzI5b3dwcEtZREo5NXRHLzV5UjU3WGVKTjNvQTkxTzJXMHNRT0I1Q09KZE9DVGlCMEdtKzhBSFZmY25qTHozbFJlK3ZYSWF6dVpwYnk0ck1ZYURiSWJBQ1pQVndwdllEMjl4ZHlGTzBJUDlqVlZvaXpzdHhZTkZON0dUZEdyZlF2OW11Q2RZcGROenVOeGtCejdtRHRvWStLa2R3Qm53WUhJQ3ZwK3hPbytmYlBqeE9lZkNTZG1ORG9GQ0M2anVmN21hcHYvaFYzWWlFUmxtRUpsZFhpZ0hCUTBzNWNJcjJXQ0xMNzF6Rkh1ZmRHejFYRjZLc2toK1R6VXBCUVR4YXNpYWZjNHZRVWJ6U2plSjI5ZE5jbjQ2MFVId1ZMc1hwM2NROTYwVlNXei9PRjVaMVpRdFdlQU1ST1dMTjlvUXliTFJRM244RitrY1RkZTk5dnpKbEVCTHEwQ296VXRtU0NxTEdGSUc0MWphS1pGYlVVajlpekJPS0ZNSzlMeU0zeXcyNkd4NE15RWlpRkUxRlhodGF4NzRVNENKa2FPYlJ4UFQ2VHhOOG9STUxrTTJOVVJpcElsUWhXSENvbHBqT1pXeitKQnE2dkV3a2h1QzhOb1ZqNVJpYmN2YlpTM0FnYkd0ZkVydTV3YngzeUpKRXlzeXVrK1BNSUl5RkV5WGpnQ1BVT2tiS2JPUUhhbi9mZEF2dVp3TGlUdXRQUTJYaVRBdnRNWGlFeEpDdDVlMVZRdmpvbVVoL0hrQUNERjU5dXZtUXRBZlZSYXltTE9kdy96Q243cm1ibnhWb2Zoc0EvRTgzZ2psR3RYelRDVVlLejRtY0JMWG9jOU9JWG5XOCs0Z1NDYlpnTERHM3duU3lSRmZFOHNNOFVZenZVb2VDeTFFY1NPRGpOVURSVFNUU0hiaWlHa3ZtTm94bVM1SFBOV3JZSTRUZUhFTmhFWmFlUjM0eHFudFUydmF0a0JHSDI4SWsxSnA1KzE4SkVES0tDR2w4RVJLdHVtR1BsdXE1RkpDT3NKaTE2QVVBZWtoY3Roa1pKQ3lsRXNnZmVlNmlTUjNMam1Va1ErMzJhZHQxbk1nZCtxOHRwM25ORnZ6Q05LUW9XWCtibTV3QjFxUzZGd1dOSHZMZ05BWnlYTEE5K1JOVElVTzFydE4rNjMxN2FGU0xwMStsTHRreWNVSk5SSTFUUVdsMGMwbXBVSGZvNDVrcWt1elBIdENwdzZmc1hCYkI1dCtXVFNEMWZubXRrOFRjV0hqRm0vcnZGbzJrc2JJVEdiVGhlbXNReDZibWxKL1c5K3c3U3ZoVHgrQ3JZL2lXcldtSW5ZdVc2RlEvRjFOUkV5ZzVRaGUzaEhOTlk4MEttNXFCSlVFeUxEZ0dHTlZ2UVpULzhaVGg3NDdQNlpiUWFGWHJ0MURSTWR2ejFrVWpsSXhKbFJNY3M1Skliemx3UzBxclpGb1VuYkVpUHRpMHFHaHZ3YWhZUjRvY1JTbWo4SUZLalFtaTlvUDNpTENkQjVsOHRBR2orTkZyZUNoTHhWMUovbW9qOExRTjNYUFREaU50TitiZUFpakhzMUp5ei9EKytlaUgvSEdsQkpZREo2QWZRYXJqVGphcll3KzlFM0I1bXI1NnV4c2ZkV09KZmZiSW8yeXp6VVQ5OWxWcDFsVmpSWFN1YlR1ZThlL3pBbzFLdTVoQ2VnZDVlQW5XcW5xUVR3U21FRjk4TlU4Z0JrUTlqWXI0UTZkMXRNNXEzYUQ4elJibjBndDZRcFRZZTc1Mi9qb1IvZmFVaE5PZ0E0RTlZdWNLQit0TkdpNC8yMmFScTh4TjVwL3JXWlBzMW1JcU5xRnFSb1RmYXZBSDc0dVlIQnlGWHdzMiswS09hcmNidzdwZ05nR25JM0dZR1Q5ejV0dzRuM2JISlRTMDdmd3IxUU9KQU5KV2R6UWhWUFVpRHQ4M21WODJ6NnJPLzA0YjRRZElkV3MyUDllMkZNRjIzVS96WW9zZGRoaEpDOE5KeHMzN2JPOE1SQXdnYlNVK3J1MHJ5VHNIUGpMdjQ4UWpmSjN4L1dLcXFzdC9YSWoyNFYraEJ6TXZXL2F5d1haVk1keVl4ZUpET1doS2d2TTljL09MLzM5S1lPazZmdjVaWmJPcGs2NXU1M2YvbmZIUDdtclBUU0IrY2FrbmxVUWx4ckJSSW02bytmWE9uRVlyNWdrQUc5d29hOE5tTmcwTStHd2NGOGVuM2NHRm5LQjFkN29QY3F5V21pR252YkErMDVWUWpyU0FSbThHZ1dCZGc2YzBzSHRLOEUrL1A3N0t2SHFuZ3hnYjRWTVRhL3JNK3lhS3FkTHJUcUN4U3ZYcWZuU1J0OGxsM0FNRkQ3Q3huYVpJMFovVHFnYkFjcDVqUzA3SlJhcjlWdDljbGNYZnRBOFhGQktsdnd0RDZEeXdtdFVNc2kzYUthWmt6MWhkSkp1ME8zTzdTV2pZSmxZNTBjVSs5MXZRM3NRdG5SZXZXWlc0QjdKUkM3WVZ0bThVelErdXNodWtkRlNkQjFZU0E3bkNZdjlOUkhPY3FNdDU4cGx3a1ZaK3JhMDNFa2JUaXkxREJnanJiL01uOUo0UzljZFFMcXVRcnNyWTdoNFZFMzVvbEJBaUIvN3BTend3c0hyajAzZExQQWdrYm1pVllJeE85VCt5eGViaUN3VzhkZlJDWU5zcCtMMS90M2RscVZONzlMWmdGZWtFeXZyMFJpVWpKcUVNcUxtNDJYWlFtSXJ4R1VFZDl1NG5yNGRrWnJsOVVvQzhkbFg5VUF2SmpreHNiTFlkdjVZNzU4enZ1aTNHUmhnQnplZEhvVnFaYkVHQnFKOWJGUUhsdlBLUzdFY1FOa2hWT2hOL1orRkw2OUVYUDJQZTZUbldzZi93MEV1aUk5RXhReXIzTGgxWlJPQ2lVLzZrQndKODhWTmdhZlRLcHhVN1kvbXIydUZ1NDFxREhHcExMZUtCa1NkeUlEUm5MclRldkx4dC82d09yVS9IOEY1TGN1dU5tL3ZRNzBlMkpZWUFXN1pyWEJOME5STExDcnV3VzlXbEQ2SDBTbUhZMmRRUXNPc0FmNHEzV0dPV3VYVkN1WjBtdlRIN0JNNjE1VnptU3ZNTDlOeGF1NnBnSHJFOHNUOWdXcnRiTm5XeWRhYTZxN01uQm45dDdPd0Vtc0VUa0NOU3VTbDlFbGE3VmVsNUFuZjh5NkhyUzlVclR1VTU1VlQ3WnFFU2EvRHhScHFqT0F1VFN4bFJMVDN2MTNVdW5hYm5GMUMvWUIyRjZCSXpEazFJejk4OENsc3o3c2tTWUNYL3lkam43SG4xNFYxYjJoZWVaYjQxc1NXR2pNbDZmdnhJV2ExZWtjdngxK2Q4anNPUjN3S1VwcHdzR29oT0RTRGdZc1k4dWhFVnYzMGlqM0ptV0ZvT1ZnS2xmbTVvZ1QzTlZ4OEdPVkpPWXRVTHV1a0V3djVLMExBM2N0UWFPWmw2NlpwQnFkSXFabkZVOTB3QkIvdC95b3ZucTJXV3oyUlJEVlJ0MnFEQlByOXRuQ0tUL29RcWR4bzZ5ckFEajBMVzAxZnZSSG8zQlVOSlBLSXZCU2xiOUY1eHN3MkoraFhvWlByUWp0MGdSWGRBTENVVzFtMnhQTlhmclZXZnNNbkVTaEZXS1QxNWd2ZjJjZlpucmo5QXo2N1BCM010MGx4UW5GTUFlRFk2dHAvUlpGOFpMOWdOeU9JUXhQaVVGZUlJUWFtMGJpU2hmOFppdFhhZFhzRnhmOFIyQlpaWkhLaXAwWVgxb0ZSTFg1aTE1UFV5c1VkbmFyVTJqS0hEb0FLTzltUEdHWU1PUDhCRmo2b0Z4UngrTVVHaVlham1tYy9WVG5hSXpNTHpuTjQ4RFVSK016b3RlbDJFUk5TQ1pNU2h6V0lITUREREFzbnd1bXNaajlaSEFnNndnK2J6QXdsWGtwZjNNZDNONGt5WEFRNUFqQ09IeXdnVG9XTWJScjhJeTJMS0JraHRKNkZZc0c3THljdHhMd0Q2dUdaLzJBeWNTdVBIcjJxeUpBdWY3KzNWenVOdmpEa0h2UWYwYnl1S3F4MCtSSElxLzg2WDJ0eExUU0dNbG4xNFJqcWZXS1g4YjhiZG53S1dabXFsOHk2T2pQRXlzazU1bytBZnpkNDNEbTRyaWZRTGc2RzhiSDcreE9FT3V4eS9wblQ2VEVZUGpCZlhhNDJVOVVTV3M4bzc2R0xKM3RhbmY5ZlNJd0FYWXlzWTZaNnZ6RjVXZ1hMZUs3SndJRGhvY2NReGhIdXVtM2dmRzdodXFNWDZlejlwSDlBbTJTc1NOaFhzMkdMSERpQnVuUG01K3phSGFLSXRiUmVYN09GNEZpL3V1MUM1ZnArZm9Sd2dmQmNpSytWYlpOKzM5aE1lTWhOYVZqRkswVnpyL0Ria0NOdjE4amVsdWx0NlhHZm12RHlNUzVkUXZpL1ZyTUU5N21iM2RXZGdtaVB1YnFKR0lmTWRKRUZQdnVyMWpESVhyWnRWMkpJN2FuM0FBWk9QSWNQODVqRFpDZXMyWUhYYmFtM2hsdSt6dUpMdHdsa1UvT3BxTmNFRWNKWXRBRGhEVks3NWZtNzMrQVhQT1hyTjNIRWljaWNIWVhZeko2MWYxZ3BDZUFMTWJDMmM2amlmQzlTZ1FXNnEzL1ZRNWxUOUVtOGNRV3AyQ1lxcGtLTFpBaHlmSU1hS01FTTFpNUs2ZFFLd21wQ2xORmdpVTdEelZ2UTE4cnRpRmFTOWUwVElTZHM4a1IwazJRZk1XQUo0NHd5SlBHQStZaUhHY25TbUE2SjYzL2ZnM3hLNTlrSjlsOU5vTFUxM2o4eEtNL2N5QU9YQ3pJY1B1ZzFWOEtOaFRaZmg0WnJOSlJRdU85enR4ejBDZERkMWUweDVVbWZKYjJ3angzdXRUWll2TjZLdlVvTU9nUlJhTmRWTVJiY0pZTjVJS1R2V2ZtZ2JaOExSSW1PU1hGWkwzZzcwU0RlRUdIeE4xVmtNandUeWhIeHBGUUJGV0Zjb2hMNEt0Y2QwQlRlb3RSN3h5dWFWbjhzUU1uMC9ZR1AxWmdNV1ZiWXordHRJUEpsOVBjZG5BNWkrQm5OdXBQams2MFpjSEFqRUhzYjRRMm9VMXBkMmVrN0w4QTFxald4bFNneHpwZVdGUHYrSjByS0lDcUk3RUNBaU4rQ3lMSmRCL1FOdnFUYm5kenhPQ05LQUJCcW5mNThmY2dqS3lkM0JUbVQrT1RYWnZPOUVDS202VlNwN1JvSnVPOTN1Q2s1UDlBblltbnNodk1samtST3NHc1pEK1duMm5BVk5JTlBaUjBON3FYM2lHeFZybDlTaFlRYlc5K29KK1NnOXdjeDlwcDNPcFErbjhWSVF0RmdlZGFHekdsc3RJcEg1Ry9RYjNEQ1VjOTJQWWhCYUYyUkh5M2hpSGdrUlV1NStXb2hlYXFLdTlaK1d0NURJTEp1UWpTVVlSY1hyRExTY0t3VDdJdFlKM3dtM0l0WEJFeEVUZW84MWtLOWRZYzV2bllVUlBra2V3WXowOGNqVHFxd24yMy9OcnJZMlR5bldWcUREa1hqTldrMm5FKzZIdkZGTElQNUJ5aU9IKzVCVHdSL1F2MEV2Z0pRUGdFREt5d0dFLyswM0Q3NnF1N0VLNVoydTV0WTI0WU5UOTVnUDJMK0d4OWJmdytYWUF4aHlPVmhCM2krZk9LcEtKVzY2YmlVRlduemhxemNtMXpjRy84S1NmdzAzdGs0N3dwaG5IMHQzc292MWUrQ2IxWEJRaFg2Q3FWM3Y5OHBrajJpZHBmTm53eE1sZ0RTMTdwS1c4K0ZOVWNBWFc2aGVhbmNHTXlMVmM2RFJ3WTZ6dHBHWHpCRFFRTlQxb25QVzRHcnhYb1V2T0JyQ000TTNvNENpbEQ2aEJKMkVPQVNHbUEzR2FqUHA4ZnFrOElFOXZZcWt5VUt3bVJZd1JzbHpya2FsemFtNDhQbkFlVDBleUV5UmtKNTg0UW90Mk1yODN4aG1LWVVNMTUxdjdZYXV0dVlYWFh4eUttWk5IeDVaOTNld0hiZUVEZjU3bW9LYm54Y0V0OVJaWlgyZkZoeTRwekxaM3pDblFtV1VUSERQV2x0QitjYTN6b1hFM3EvcXNGRGU5VXF3ZE9ZUkZ4Sm5NMHNFTXpqcFIyS0RwQWRwZkVQSkRSbVVBV3Vkc2JDZTY5SktBMmFuc2Z2eW5Md0ZhNzd1L2YxemU4T0FVSGRNb3k3a0QyUmRDYUROSHVmbWt4OWI3MXpqYldUejRQL3o1WWRWTmgzM2hZUHFyL1dPVU02a1dEQWl1OWVBeHJkKzhiT3B2UGIxcVA0a0d1NmZ0RW51Q3JwUlFHcTVhaXE1MDJQZDl4bHhiVXo5ZkVIQTRVS1hROEhQRmV3VmZ2WEtIQlRwbndkc1AyMFd0UXdGRTRydEhucHYwamxHeXZpNmh2OGVFY2Z4NFhUVUtHYmtkbVBWOG80cGd3RnE0cnpWUVptSFRjSU81SHkxdHRJR3E1OStGbVRhTXduQ01CU2NCSU9BNWxYRk4rdnlmdG5HUXhLZm45eXRsNFdSMzgvb2Y4TExFc1JYM1g2L0laSldaNHhMMEFNSUZSK1JpSEx4NVRHeVo3TDh2S05QazNIY1dYVVAzTXVlVXpOaTNmY1VYYkNEck9uYm1WVGJubGhuay9Hek1GU2RLMGFMUVpLaDZlQlhTcGY0R0x2ejBheGZHbWVvWXNhMHdETDhPNWkyYmUrVC90aTJMY05jeFhwWjVvbVlvOTJpWnFkWG9qK25yZnlTVlZVa3o5T1cwRC8wcFRuRjBnZktnekNmY3M0RGplaHRpVjNKbGxoaGtVNjRLTTJGQ2RWU29iZk5qY3k3NTFLcTh2QmJKWThYSG5GSnZjVVFDSVkvekY3bEJPbmlxY1Rnem1iVjZTZlMwb2tjMkh4TE55WU1YMlkrdnlLL3VWWER6bDJVUjdjVllzdHNjd2F2RXhiSkIwdWhkT2VyRmlHZ1BjWlc2YWhFaGg4b0hsRUMyWnNCTmNvT3ZTSG5xa3Z1UU5xMnovR2dScHdCT2N0Yk0vSnJIKzZXL2ttMkd6dUFTNEI5bS8vVDkrME9lNUNwbERJZkRyd3o5NXFJVXVaYnk0aVo3d24rOGk0dDJSNDdQN2R1aU9jdXFkN1NaTDVCNXIrZ1pocVNWNXA1VjA3SFlWTmZmaldiM1ArY0x5S2Q3UmMvazdOeFdOam5mVnNEamxKYXpUWVZrVE1KN1ZFdnIwUDJiSnpXSy9zcENWTGhRZ1oxdDdnRmI3MVJzNy8zQi9EcEtxcnhielRvanNJRDhqTWRVZTJ5d0tCMytRY0g3VHM1bXhSLzlYZFhhSm1JT083OTZvNFNYZUhqUk5pSjlib0o5NlI1K2NSNGY2ODJ6TDhXb1hNbExkd1pEa0FLN3pqcTRXL3ZER09yQm9xcjhYYWxpenFyVkErM0U4dDR1MHlicm1oNmNGUjF5ZkNjdnNnUllteHpnVXBGSE5rYUJDQXRmMno2MkxZeWxTN1NQdGxPdEtRM0xlRktFOUJRaHNjZ3Q0ZXBZNklRdDhDK2NWYTZUS21OZHk0dCtaWFgrK2hnMyt4dEQvV2tHenVKUWZvMFJ4akd5aUpYR3JFTk95SGo0dEZSY3dEbU43a1VRVWprWDltamhIZ1FjQVIxUDAvdllUaDZhYWRZdWUwanA0WkxPSDFBbDZYYWJ0OXFWZWlONFdpYVlkeUZzdHpERVlvVjZ3TkpQRWNUbFFPY3VYb2VzYjJxUGkxYmxSMDVSandPcFgvdzNoRjBIUk8yT3FsdzU4WmJDODdiVUdRSjZRMG9EZ3I0eFJYZHJ6dTJ0TEVBKzEwTHRLWDY3QUtuamhyR3RFSzdqMnBxSHJBcjZ1ZXR3Q1RVdHAvRnlna0FLcmErb0E5VkRnV2x6Z1V6NXhQejBSdzgvR3luSXQ0MTJxbGNqVUNON2IzL2hqOGloeURuRnVtUlpiUnQrZThRa0tDVjVlcW91dHo4QjM1UWZLQzFsNFA3eGdYYUdZWCtxb00rWGk5NHo1S1FNZGtsL3pVWHFwcWtSMmpnYVJpWFdmTGFyb01VK1NrV2ppZFVWdHl6TVZYeDlEbGtaWXBLRklYK3pURHJuR1A0dnJpcmk1UmpJQ0RNMkdzSVkyQXR6N0pDTFZ0RU0za21JdFVBKzZ2NzluTnNxQXk0OHhaM0pyaWxjdWYvNHVrSzYwSUZKZWt5MUh1cVl3aEgvYS9PdlE0YmxlS29LZWU0citmMnNsRkJ3czlxYzZmb25GZG9aNzRlSVNYNFRaQ1BrUG9LNElQb3BHYi9HVzdXM1ZQYmgyb3B6QUpjcElWdjRrc1ljZkhZOXhuRXlBamV1YmJiMlNNTFhSR2V3Y2N4aFl5MUFNK2h4dkRmQTJFWFhNbFBmckgwRU4xN1BQbFN0K0xyU2NLTlNKRHY5eW5EMmllTUczQ3ZVM2ZuRytwTDk2djJUVVNoOER1SnpMY1o3MFZQMzB4VzlGM0RGWW9waXExTjVSa2ZObzZOL2lWYlVVY2VwUkV4SVpMS3hXdFVTVVJWSE5HMXRsUGZGVWxaQ2RXcGZKdHUvYm85d2QyanpxTjdQeGRPbkFtK1VzZWxHYUhqNUlKZ0xLM3hZL0VjaTBjSGRVN0oxRmZFbzFvVjlPTEJEK25hUjA5V2c1eGRnN1l6TmJabGd4emdaclhiT3ZXeGk5SDVSSTVwWi9xOU1xOC85bWZYd2VUeEo3dlBTdUE0WDV0aG1ZaEpZNzJIUjMva2NPZUpZZVpRT1ZJbVk3N1RKODloNU1RZlVSeTNCRGJQdGN2b1ROQjg5SG8wdDk3UGo1Nk9MSTJ5WjRFVk9mb241L1VNM1NzbDFqd3ZqWjRITzlSZnN3OWlhamN3WFhpb3RvMFNHR3paSUZodHNrVmo3dFJ0N2FDa25nYWcrVUVzRmRFd2I2ejFLWGZscjUvai9LQTVISm9Vb1dGY0JYd3ZWZGNMS1RWdEg0QW9lbm1NUmFISTBCMjRWT1BJNTJKczB2RjBsUERMT0lnQ0IvVmN3SWppbzZ0UzlmVUJVczVOaWFqWks2VnBuWTFWN1J6VnErY3ZKS1FGSGZpalFncHZjNWxNM0RjKzVUd2E2Q3ZwM090Ylc5aDVZTVhXVExwa2pqaFduYzFUZmwwWGgvVEx6WEV4UU0xc2cwTXJoMGxudGxpSVhqMGZkVEJJMzk2QUNydXhPU2dsSlRVOGVtRjAvcytmZXJPMWNhKzFiVU1BNDNKVXR3WWRRQzEzMjc2bzJxSkdFTE8zTHR4V0lET2FDeXpHc0M2aHlKTnplVTI4L0JXVld6NDU0VVY5ZXhkaUpjbG5YUFpSdWdhY0FuN1lQUG85LzhOTkdaN1pZcXNiNmxEMEZBN3krTExSN1pxem9Pby9pYmxROExDVmczcWkxcThScmFwVmhXc205YTlxUTc0MGtoSFM1ZmxRUlNMVzVRMW1yRXU0MjY5U0xHWjdKL0UwQ1BJTFQwM1k4MDdSazhORkdpY0VFdE12Zis2SlByMnlhVUFvaUk5QjhnckEycGgzYUMvV3d2d2xqemxjaGZoWEo1WFZPc3M5UkZ5QUNGUEx5UVB2N29FZ0dZRGs5ODdzaUd5eDlBRU4xUmJZRVJJNkpPS1RrN2FyTWpxdWIzeEJGV3ArTE1XdzZuZ2tNWkJmbzl0RUFEaVhJOWY2d2hyb1oweXJSM0dhR1JiakR4Vm9ZTCt5dlZIczkxSXkvZGtvZGJVT0tpRjRpcWRYc0pxZUpLUHBZYldLWUQ2NHEra1ZlblhhUVNGanRtOStLMFBVeCtiQjBrMzBFbHYzalBpUjBFZ2o5WGI1RC9PL2dOeFljODdEcmJRUDZRZmFkRGZZL0JySHM1QlFPY0JNSGZ1eXE3U1ZYY3lSdTROZmJCeGV6RDhaczlwamNZMVpHRm1CODMyNlQrWUxvaW9xcUlmRVVXNlgrS3JsUFdzSXd3UjZscUR6U0EwQnFKdVA1S2Z5VE16UG52bWs3Tld1bldtWlZFNloraXI4d3hDN2g3c0RlRFlLRGRvTm4yeGxXSkVvL3hldXVsQ3N3Z0N4OUt0SjEzdG13YlBJZjVxSjR1NDBrQUVRZFFxS2prOFYwQlEvWEcrNjJJTldMOVpDNGx4Q2U5TlE3UGwzb1RhYm5DU2V1UWMreHU1OXZHMVNIWHduaWE0akFRZ2J4QWwvUlgxcEtYUk4xKy9PQjRxd3c4cHlrdDJhUDUwTTBWTjBqMm5Lc2lROHJac3gyaUV0aWVoQjYyQjE0dEVLZjA4VFNwTVhKNHlhUUhMV21pUXBrN0xmRktnOUEwZDNaam44R1NqWEczN3BtYzQ2VnNPM1MrYWJySFRGVk9WblRLV2pMWmdTOVp0c3l4cm9DKzl4VXJSdWdhUWN3TzNYRjBpNEpzN0tlcVNVSHFaRGV3RU5rSXoyYjJtbk5KdVl2OGhGbVliWWdUS3lRbTQzRm12MDhBbUtGWGN3WWFWNy9uN1JmNTArdUh4RzZlS05YcDVsY2R2OWFYTmc5eDhib1p0KzdvMlZ1ZUEybytrQmtiVmhSNElnRlZuUS9uT0NhbG9sanUya2tiMzFHSHJ0N3ZtQk5HekdGQWZlbHNCSjd3VHlMOGpjNWpEUHFubWJyQnJGYVUxWXlGc0Yyck42MnhuU3JJT2NQTHArbDgzaWd4T3MzOUpuOTBUb1U5a1ZqK2dUVlpwRG1tNTV0QWgwSXdWSGFxNlpkbjgzMHhENVlVQjN6TUxiY0dhNDgvRVdJK1hHWmtsTU45eFhxNjFrUWJmM2syKzJMK2cvdVBhZENiVTZHTExuNTRiRUNPbWd2QUt5RVRDK0FPNTh4TEg3L1hJbWNkRVFTRElTU0V2alNrUE1MbEJzRk82NmI2Zm15REpNakNreUVCWjE4Z29wbU9ibWpCeUNxU0hiSy9yVmJNTE9ZTzV4V2pkU3RSZXpnUUxad043c2lvYk9vQ2NtQUMrblI2eUVtV01vOFJqMmVoNWVjUk5ORnVQeVI1SzhlRm1mc05aSWdqeXprQkEzbGJZQWc4ci81R3FCMnVlN3lYZU5Eb3dMREpUS3AyK3lYcjdPeTZLaUZ2Zko0bTFKM1BIMFY5SFBNckdqd3gxS2Ura04vMFN1QUQ4VHpxR0ZtcHp0UUdVWnZkczE3Um5EMzU5cTl5RnoxS1VSR1d2d3VjY2lxSUluZnZySnVER3pJb05Tb1IrUytFeGtLdFAvU3g2SEROYy9oL3V2TEJqdjlZazRZQkhyamdSMWdwbmlkTGU1NnFianAxbURvbXQ5bmtTMUdkOTl6NEhLMkZoYkVqMmpwWUhCcTRSMFVJLzA4cTdZOE40dWFDTllUMktVeHdmaEh1VjU4MG5qVmtEclZlNndIVHpmQk9JbTlqNkd1SnN6eURWTUd3Uk1mOE03aytFSG5MYWJhM2NEcndlaTgxTGw4RDRQTVhVUjZhc01YWGZXdDdmS1hpUnVaSGd2YTQxNU9aaDN3TnFYQnIxMzg5WEdZTno4NThDNEh3UTR6S1paOHRXRDRNQjgyeFJkQnQ3RkZkQ2JVZlhDbGpFbWNWWkhVSUROUlVnWGYvQTN4TGhDaW5XYnFDSENjSEYxVlFwRVFnb2JNb0UvbGdHZUV5UytvaW1scm9oNWZ0MVc1VWNJRWRDWlB0Rk1HZzBCcGNaUXh0bkRMZVFFUG9WUnRuemE2K1ZFLzBuVnZ6azdJekRFUllRRUZTUS9wc2N1THZVMlFidzlPSS9RbWJDUDRsZkFQVHRndW1aOXVjZ21tZ1VYbUdzRE1oQjZERkRKSnVIUmc0UzVYTk94RzVQNlBVbjJBSThQbDZya094VWxwakJLWVRsb1AxdktSSEZxVFZoUjUwdmhuUTRNajRnWHcwalZ6Slk5bmY3dUlIcHNoU1daRGFrNkY4QjF5VktkdGVxbVFBV1ZacUFhQXlGdFJlazhZaWtjMlUwNG5EbVNMUGNmei9JdGZ4dk9qMktUR3A2akdsT1Vlc2praW42MVdpVFVyc1ZDdDlwS3VUeFBvclN4amF3MWVESFJPd3ROK3E2UzJWSTRONlBkdWFRMllxV2RwNDJTejh2cmNPUHJHNTVVb2lOb28zVUJTcVFYdGEwdy85SnNZeHozeVZ4U3p4Y0hXYXZhNVR6Y3BvN29MUkpjMFdHYzRaR0RKWlpSa0wwY09MaUFhUHhVN05TRjFPakxSSGxZQ0ZJemEvZTdlMk5RaStnL2dVeUQwdFRaSi9nbzF1amEyVG5EaWRnUlhGR2c0emltR3M0WXV2bXVuVDBlRThaV3dhVUt6bjhJVmJ3MldxUkgrb3lMc3dEdVFEanlFMjZINnBQTW5EanQ4cng1WURPc25hWlFXL1kvcDRKUVo3eVpNVmhjbnJvZWwxQXdITU5YUGorclZpUWlYKzhuRzdBSmcyb1lxcGp5b0I1a0VxOVRzcHZFeVQ4K3NMZnQ4SDc0SzFDbDBwaWdMdG9vYm9XemRocmJiczI2RVgwZmp3V01LcHN5NUdITlhwcWpnWi9SeE5vZzE3U202aFUrczdNTjBEZGMwR3pNOENJLzRlUzlYeGs4d3cxblhJNm1hNk9IbCtCTTAzRmIydHpyaHNZODJvVkZQNENCeFBCUDhhOHdwNmVDVzcweFRRNXZzcGdpemdZbldTSTNQMzR6OUZpbStRZHEvUmovaGJZRUxTNEN5Nk9aSDRDbEhpMjlyUkVBbFQ0LzdnZmhsRFBhWktNWHNDUXREa1E0citzb1Y2NTk1K05LeENVTFROMEtOYVNxVEIzUnIvY2toZTJUNHJudkZNZ0M2cHZhbFh5T3BxVUhNdXd5UDcvMDNIS0JFZndvb0hrdnU5S2JCd1V4b3ZSMkxBc1F2RmM1SXFienZlZ1lWdUlSMGZ3cXV2czRwclkvRnlYK0ZyazB6eEY5SG54MjFVbUcxSjh6WDJlbEZSdjJjSDgwdzlPZlhsc3RFczY0OTRNMmhhOEg5MnpyRzBKNXhKYWVMcGZDc1dNb28vdW9HWEgyK2JpaDVOSVo4QWZEVVdIa2JPeGxuQjdad0ZSVjV3RmpPKzduaUs1K2tFUFpobFdUcDN1eU5UQW5PT3FzQmxMK0lwMFFJbEtRMjJjUWVSem5FMVI1ckR2emd1QmlNckoyZFZTeG5TZHZyQUVOY2YyVmlZNldyZXkyTmpSdGlwdWg1L3NKOGxxMG5lVkdqRmk4VnlVZTE1UUlsY2s2b1ZrNi9XUGk3ZUwyaFVYdWkvSnZyVE8zYW9ZTFVLb3VVb2ttc3dsQjR6VStTU0c4b1Z5TjVGNzBxa0V3UGVNTk0rT3NaaDZtNXR0d0xjSmR1UldONHJPbzF1amxTK1ovREVQVU1ZRWZpOW50QWtUNDdUakhtY1hTeFpWR3dqVjgvUGg5KzF3dC9wdHdGU3FZS0NVMk5YRHF1Qk1iSHplL0VVRjRvNGFtME9jYUdianlnS3d2NGVPWW0vTXVLdG1yMlpDcEt1QUUrZDFYaEcySk14K2RBckZkTXFKVkFMc3VWRk8vc3FUbW4rRU9ZVnR0aWVyV0h5ellXRXAweEJ3ak03UU9SeTk0NnBZcGt3Rk8zRjRneFlHYzFQbDgvRGxxOVRrMEJCSjVoeFRSaVVsQjZ1K1Jtc0FxRTlFdmxCYzVIamRYTjhxcVYxUG9kcE1GUi9uK0V1WVVZdEV6VjJGM3VkY2p4TWlCTXhJOFhRa0dGWDlDYnk1dkttQTY4TWYxeGRQbUk0c3QxL1M3aTZqYUw2N2RubFQwMGZxUktpMFpHWE9HaEErK3JjS2I0dXh1OG1RcUNLYmM2K2lpRVcrMHFtMmNlMklsVDRLaVNDUkNYVTlyWEFxTEZrWEZDbDl0ZjVFY2NHcy9odFpDTW16UExnWVdYQ2RyZS8wdjRwM25WSzVqYU9LV2VHZmpxZzJINWdCT1VsV0VBM3Q1eWFsWW8rdE5oUFJtOW1LeUNmR1VJK3F2eC9uQUZEZ2JJVkxOL3V0NWtmN055MHU3eEpLL2lybW9qbVBmdzVRU1RCYXMxdGtxK0lTQ3pwaVF0b2I5QWkxYkh3SUExRzdpTHFXbDIwNE9kVHRONnkrNUN6T3RRcW9GMnZyRXJ6NUVsSEUvSno1V0lHSEJhbXhUNXB6RkxIYUFRaUtrMUwrNFlZMUpYNXZqa0txSkk2TmUwY2R0cW9lYndhSDBpeGUvRXpmRTlEWnZteWNVcHVoWlg0Nk84RldiRWRKNzhWWXcrNzV1Y2NsVUoxa0JqaVloVlk4eEo3YXJvUGtvcUFzeXJRV3JJL3RycG9YSjJ5SlpmaGRvemg0ZHVVTEJqVmNaUXRqMGJNakRjOXdRU0g2cWtWMHJ5SkgvYm04cWNod25zWFlpNDlnMjBoY0hHRkZFYUJ1MjRiM29xM2NkZWlwZGV0QUd3bnFPSjFwU3FybWRnOHJQUTBOYWRlZHpXR2xOVE9TYzJNc29lVzU4TGwyUjQ2SWZONk9NRm9HZW9HRjcycHpKVDlGRDQwWXRXbHFGdVBHTDBtenBRMklzaitWOGRqdjBCWnhld0gzRXB5VDhWbzBuVjFrUmFZaFEvTk5BUDRodmhlZ1ZkQzBKa2hKTE5FR3BSSzdCTEN0aldDaG5ybEFGNjZoQ3d0TlIrREc1SmVKMEZOdVNGcEo1TmI4dUR0Mk9ZYmFqaG9Qclpteis5a0lHNWVJd0J3VzQ0V1ZQWTl3WFFyNXJobXZOWVhDcC9nc2I1MUkraFlqbjRWc1pLOXU4ZElSdjZEc2hraEpyVUVIL0JUS1JRbW5WSlFJbWJvTzdqZUJySFpwOGx6Q0VldnlFMzFTYnhrcU5DUTZ2NjI3S1FySFBLZ2tta1N4aGo4YWRuTzEzcU5XNG13bEp0K0lOdDZBT2NlWmZOYnJYNnpNK0p4ZUtTZDVaMlQzS0M2VE9MMnJCNFBuclFHWG5FYjh6VTByUlNzNURRWFRVUWM0QzE4Yy9OeFVnbzRNVWZHY0N4VmM5WU9FdVBHMEZ4MUxsNURnb2dncjFOZ2N2ZEttT0E1Q1hJU1JCZU9taXFnM3BPK204bVZLUEg0eTRUekkrS2hFQW5OL0x1ZDkvNUNUbjVUbDdDNGpaNGQzS3U1OTlESUZ4NTZGbGUyR1h6RXczQ3U3YUFsck5yenZhMXorb0JGZDRkaFN5algvM1lDVlZkRTdoUWhqdGlMeG4rMlpyM0FRRGNLcDkzM2FhT25HRDVzd1RscW9SajB3YU1BNE1CK1RYTTVRSlJNZzU5d1ZzUVFJa1hKRGh6WlRjTDRkQmUvM2t1WkV3NlpRaFNtR0FEWTRaVzBZQjIrS1NubjlybEdoUHI3a0tJak1leDh2aHhnd3FXQ044RGxSeTZWVVNtR3J2ekNnaC9Oam9sMDZiNjJ6M2hGYlZUZ1ZnWjlBb05jb293OFlCT09nZFRJZktUbWxKTXRTekVqTXp6amRGakgvb1RENWVza0IxTnZhUGZEVy9hbVdWVTB0emJwRmMvSFo2emlJVE1JWkI2d05xZW82S2NweFh5blBwbjVWTU5lMjY1SkZjQzk3U0VVNXpDd3ErUmlDY0xZQnhZd0hFN3YwUlBqRm9wMnFheitzdVFoWWpPd3kzQzlJWmJBVlFLTE84ZW1LeHN5QXM3V25aY1VVTjJNdXRTZzg3Q2F2VS8vT004ZFh4ek84L2pmVzZmdUhYdGhqTGZSaVZNZnhtMWJVZ0hmT1Y3bTJTeGlGbVpFUFRvNE9iV1czdk9JVFhnZmJ5MkRmQmFLbE9vSVRXUmtGQmdJNW1CY2c5RE5La1FGTG9RMFVjMUZEK1JYM0dLU1k3MzJMcjZUditpU3dZZnUvaUI2ZnRlTzlqdVVxODd6eFZBWVlNZlYrWmdPbHF3R3dTNDZXZ1BCa1ZBcVM4RmQyRjJYL3o4Z09yd3VxdXkrT1FXL3BPTUlLTjI1MFQ3OEVsS2pqRDNlVmZMcWxYbGJBYTZudDdDL3BGcFNqYXJTWENGSjRMQndnSVUrdm00cWVYN21aQTdhQUNYL1FoZGJaRGZYZDJCYlZ4VmhFbitCT1c3QXBvcWlOa3Z4d2tvUnl1NStNbHlyaVpRVWZza3FLVm92MzhRNmtpY0tUZ0Q2blFjY05JcVdCMDFsUW1idGdlbERVZkhGTndrcGxGUmRYcGdIa3BqNkhjZHdDT3lrMFh5b05qUDRlcUwzaks0S0VoRGpQNzdzRHl3b2crNENLWGU1bTdiZjhaRjEwcHRPSXM4d21hWDY5Y29qeXdVVGZrUlJQN1RydXRwblgzSXVZOUdsZDkrWDd6YVpjekFudEhqL0hzRVBCblVGdm5XYk5wbWxVOUNQbTFPV1E4Nk43TXBsWjRCOElzWVZiTDNub0wvbGk0czl5OExIaXZSQUtTclNrTjN4QU9SWlhmSHhZYUFEaGpiV2l4bTlycGNmMmR4dlIyY3hzSHE5TlFNQVBNTnpOVjh0WXRQMC9jS28xdjlkNWgwa1VLQ3IxeGpzN05EVGhzdkpESUFMU0VlY09MOTlDSUdmZklKS0xvYi9EVTY1SmJBUGdYb1hTWG54ZjJZSVQzVDZyakI2cXpJdU40OE5tTjUzbVgya0JlTmJTQ25uTlVpV3VjTVYyQzQrUUE4bzBJdjNkOTQrRFNaUDZ2THFkU2lGdDljSjFsYkQzaHo5K0ZSSkdaV0JpVUsxV0owRFRLc2NDcUhWV002M3FmSFZxUndCMGR6Zm5hRUVPUlBwekYyRUJYL0hzNFpuYmZWN2FNVS91YVFMa1UxL010SEZGamNuY01ET1F5ZzZ4R3Q2ZXVDWE1uVGVpZ01RdnFtSFVrZjNLYWVPWk5MakFneDR4dTJNT1dwRzJYVTgrZWh5dk9vNEYrTWdHMVJWZWRHOENRbzlWVXlHS3dCVTZ4cFVHTHh2Z2s3ZitjRUJ4Y0tZY2NINWJ2cnNkNmNhaEQ5cUlYRzUzK3ZDWDlFaUljUXVkd1prdis0ZUVLc0NtTHhHWDlLamc0eGdzc0l0Nm4yMGUxMEQ3WENLaUpVK3ZLcm1RMkROUDRSTmRmVmYzQ1QxZi9XTTh6dXVWaGZiV3gxWHQ5eTdrUS9Pc09JNkppcGh4RTBQRWJyMWlDcklIWVhRRVRieWIzOEVnVlU2TFNzMW1aT3g3VFAwOGcwQXhlUmN5UjA3dHRMdHNzZEl3cmU3dmRlQ1grMTJBY245Y211UXNEVkE4dTd1TUJBV28xY0x4V29nQWd3eDZRdlNwYm1yRUFkWkhNNVJtS0U2NUpJQmdLZ2pjaU0vaUhPOEU1eitGRDFXQmFuamUyVU1WNkRtcDdpdUxqZ0l3emRFVmlzOGJPSFNyVnBESmx3a3pXbnpJOE1EWUlVODkvTlE4V2NqNk9QeUtCY0VFQWgxeUl6cjZ2cml0UndUV2pOeFJaWi9KTXlyR1NyMHZNbnU4Y1JkOEo5RmlVc1FZNjhWN3lPRXY0M1NreUl5MWRWRmNLOEdZaERYUGt3SDV3b0JaTUl3VlF0RUJKZ1M0Mms2aHdtTlhGSlMvVDM5MVMvWGdiUWVVOTNqdkFVS3FTOHk3bG93alpqMHMvUmpLUzh3aDgrazVQeXZEVGVLVGw5dCs0NTg0b3Y4YnpKa3daZDVhZVl4Y1R1WDd1bFBHWmVuYUFHekhtT3Zkd0JyOGxWR2h4dEdtNzI4ZEFjUTh1TGZ6YlVjdjFRcktGOUYwQzBDTURqb0VXYVI0TWg4V1Rld29RdTNkSEdlelZMYUV2UDNWRm1kbEJLQ0oxQVNyVkZaUXFQYTdXVGRkaU5YUVVqb2NiN2syQzJuR1llUWFQNnlzSUFPSkdYTmJFQU1STER0dHJXcFg5WjkzNFowUTNjNW1zaEtDZ0ZpM0xvUnpNT2N5V1FBdlBkaldVd0FkcHZPOGpvSkhDc2hxT2F6Zk1zU1hOVldaZ2JjSEdaNjVqZFZ2WnFkSEhreFoxWFBzWnllb1g5WGtGZlJQd2UvbW1VSFducmJ4Z1RQU2pxNmEybkFhUnVKVXIzUmR5Y3B1aDF0ZHRYUk9mNzFkUDJCb2VJa2JJMk5KaTZKbDQyVkFmaU56ZU5wRUlYV2RPTVB2OVowVlBGK1diSVFicEJ4ZzhMM3JuNFd0bFVuRXlYTkJ0a0lNVzlNWjhRck1iTVNCamhyek03UlZWQVg3MXhaMWd3QmxLWWtaemFNRjkwVzl0aU90OWtmRkFpZkVxbmxHVXZHYzJLeFR1SGdvbXZDaTc1NmViT3pSdXhxVy9kY0diVnN0Qm5uVU5MS2pRd2JnVW1sZ0dZK1VYVWM2cnpvQWt0Rkk2OEtWSUhHbG1CTVlOQWlLRVUxUzMwY2ZZa2FiVXhkL0hwWWFEc011ZURuWktVVytoN09OVVEzbFZzR3JxbnNqb1FpQjRxemhqM1d0NU85WlBBWUc2NXZLOHh5T2FRT0JTKzhFWHJvMlltbWpxbGdUMjJKNHZKZEJvMitQMEM1SFNYTnVMWHV5dHMwL1NGM1ZFZDBJTU1HM0hVOWFpemxLZndjb0xBalJ0S3lwVUpxdXB1Q0Q5RWJkekloaHVxRnhhMzd5bWdWNDlYNHlqVUE1WmcveENHVUROUkV2WHJoUUduRFppTGxNdndnNUZvOHgyVjhiSFA0a2xQZGJoRUhFZVN6T29OR2djNTdQVEJPVE9UL1JxN3YzeXFUWlZZcmRJQ0NCcWNkMWFGNjF5LytORU8veXRkakNDU09weHR2T1hBWFhVZEhXZVNTSDlzSEFZbHpWY2FpcEJleVVhTkRRanRLY0xFczh3L3VGOThJVzQ3bmticWk1bGZYcXdlNml5TW5DTTQ4aE9XemYxdzBqVjYwbnZJd1YwU0FrWURtYTZUOEhNSktaYkljUHZsQnZyTUw4WldtRXI1TzFkWURFVUkyMS9saHFPSlBZYmNyZmd0REl5UDN1MEs1Yi9tTUVIa1REUUkxQ1UxRUhXR0s2U0U4OXBNYWtiVnhGWHlsUWJUaFdQbnZCNDZLVG0yOTVLRWhyTW9kZ1NmZ2YwRVVkQnUzNWdMQkVNdzJETUxTaUU5OGd1bnBsd0FaNDVJYlBhdW5ZblJrY2RvblRTQmRkTHRmaDBZREgza2tKQ1BOMUE3U21SMG9QNWFIajJKSW9NaVRLVGgvOTM2d0NVaXFmb2dlcnlML1lhN3JzKytkakRBTmNqcnZIL2lYZGRjeldTUXZvYmE4d3VQcEd1dGRLRmpTZHZzYmk3NUhZZzJ4VkEyMlN5Rk1YVUlIS0dBcDh6dzd3L0thOU83Z1JieFpyeFlnaWg4NXdOY2NZbjNZb0FIVldnSy9QbmZhaEdscjlwOUwzUlp6b0JsaFR4WUxiK1V5TUNCQWRDMk5PcUllOVpPb1JzbTlXalNLNE9vOXYvVHVtRUJTK0FnaksvVzhJMlNLbXhJOFRwbEVWcE5JV0JqU3VjNWJJSE0rQ0E2c1FzbDVxRW9pcVBZOW43WEEvSW1UWUxaVlZQYzNsb3ZRcUhWOXV5eVNWRktFZERVbTduYzl4b1RMWHRzNGZNV2RWbHI3SkVNZXZwOW9ad01oYzBWbWNKV09HL0tVUjBXWE9qWWVNS0RWSEljZnhmQjNncXNWeWhCTkg5WjJud21McmhQdU9uK1FvaHljc09PY0RuUjIzbVFLNXRBQUlYcTA3WVpHNzJ2VUkyTEUzN2NXRXM5Q2xEZm55d1Y4TXc4anBOZDNZVEJldEYwdC9PcWpLeXFNSXh5eCtkSGcyRTh0TXJyZXRVVlJ1WmM5Q2VNOS9KVDhNZG1SUFJJM2grMThTNXdRcGNIUFlVYVI5QjNNRGh0Zkh2b2xVazFpVy9ydVhvQ1ErT08ySHJTNnRVVFc2bUd6alZIbkY5YWw5UUs4U2hOQU1nNTBwRlA0NlJWcDVPdUM2WGhGYzB6QW83TXpsNjBZS1pVaFp0bjlsbVo5MEwxemliRkdSQUhaRG9ud2kvWHl4aVV5RUwydHdOeUZ4Uy9qTEhLOS9JN0xPTlVZbHNiZmdjanpFM0JYYU4zcDZGMlBYdFZrK3FrR05MM3RBbWdMdXUxeks4TSs4Z1RWWTVwZ1g0SE81bUphSUtzMGRGZ2I0aXR1dG03N1NYd1JPekZlcXYxSENpd2t4NDMxUnovcVYrVlo5QmU0NDFrNkMreDkwcktaZ093S1BoTTNVdTlONTNhY0hZamdvYnlKdFFtUk5oVXBNNjhacjF1UzNHV3UwKzhVVHE1RTBZelN2RjZGcklVOW1xTkpJZm0xMVUzVy9Rd0dyZGtKV3h4NnpibWJHTGdyb1BHWFpsZHpVUndzNEJjZGZJdFBJMWtBYkxReE43cjNlTlF2a3dTdE1kaFFnOHpQb240cS9jQ0JKMFl1c2l3M3NLTmFtSTg1SkQ1NlRRQTBtWXJkRjNxV1g0SnNOUnBCMnBER1VReDhIZlZscEwrcWFDalFXWThKMWo0NGs2cWhpK21LMkFMWHMzSktqZldoa0VlOVc5d3ozdTkyU3dUVjFTZjZkWStBWEs4Vi9CM1VBWEtwSUMrV3l5M0o0MVZmVlRVaXRNN3hWR05pUVExcUNGR0pPMlIrSUxDb1UwdU5pZVgvQ2lTQmdSL0IycWYzTFR3Q3VtVTVUZWdaeTZGT1hvZjc2RXZiZG95T3IyS2E1ZEg5aHpaQmQ0OW55N0xJdWc5eVBHUmFvQTRtRVQ5TExDSzFCSnFzNHptNFcwdzFYd3JrOWgxdHo1UmN4bElrWXV4VzIzRHR1bGM0TGtQdGUzbVEwT1BRTE83b05ieDdRVEtxTHBRa1QrUHJtNk5temNpcWlvZ0dZV21lbXJxV1BSZVpDL3pvSyt5anVvRDl4MjB0VDc3VU9RRmhLQTI1ZUhrWUp4TnE0ck5SQ1NXcldkb0NXSXZXUE9MbDRkSEJSQTRROEliVUlpTmowV3VKRmNMU1BSNW1adlJrN3RxaE5zaEp6S0oyc0V0bUlWN3Uzd29aU25hek9LTVpTVGkwTUxRSXMwZEpBSjJwckZnYkV4eWdYQ3VVUjlLZXJIdytXNVlGUUIvOHIwRjBVMUhYeUk5enNRQ3l3bi8vMlFBQkFCb0FRQUFCTndCQUFBOEJBamNDQUFBQUFBRTBBWjFBQUFJQUNRSUJBUW9DQUFNQUdWUm9hWE1nYVhNZ2IyWWdSbWx1WjJWeUlDZ3lLUT09PC9CREI-CiAgICA8L0JJUj4KICAgIDxCSVI-CiAgICAgICAgPFZlcnNpb24-CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvVmVyc2lvbj4KICAgICAgICA8Q0JFRkZWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L0NCRUZGVmVyc2lvbj4KICAgICAgICA8QklSSW5mbz4KICAgICAgICAgICAgPEludGVncml0eT5mYWxzZTwvSW50ZWdyaXR5PgogICAgICAgIDwvQklSSW5mbz4KICAgICAgICA8QkRCSW5mbz4KICAgICAgICAgICAgPEZvcm1hdD4KICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24-TW9zaXA8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgIDxUeXBlPjc8L1R5cGU-CiAgICAgICAgICAgIDwvRm9ybWF0PgogICAgICAgICAgICA8Q3JlYXRpb25EYXRlPjIwMjAtMDEtMDdUMDI6Mzg6NTIuNjcxWjwvQ3JlYXRpb25EYXRlPgogICAgICAgICAgICA8VHlwZT5GaW5nZXI8L1R5cGU-CiAgICAgICAgICAgIDxTdWJ0eXBlPlJpZ2h0IFJpbmdGaW5nZXI8L1N1YnR5cGU-CiAgICAgICAgICAgIDxMZXZlbD5SYXc8L0xldmVsPgogICAgICAgICAgICA8UHVycG9zZT5FbnJvbGw8L1B1cnBvc2U-CiAgICAgICAgICAgIDxRdWFsaXR5PgogICAgICAgICAgICAgICAgPEFsZ29yaXRobT4KICAgICAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPkhNQUM8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5TSEEtMjU2PC9UeXBlPgogICAgICAgICAgICAgICAgPC9BbGdvcml0aG0-CiAgICAgICAgICAgICAgICA8U2NvcmU-NjQ8L1Njb3JlPgogICAgICAgICAgICA8L1F1YWxpdHk-CiAgICAgICAgPC9CREJJbmZvPgogICAgICAgIDxCREI-UmtsU0FEQXlNQUFBQVlqZUFBRUJBUUFCaU00SDVnd2NEQ0FyQTdjQUFBQUFBQUVqQUVBQUR3SUFRQUlBUUFJRUFBRUI5QUgwQWZRQjlBZ0ZIUUVSQWZnQUFZaGRBQUFBREdwUUlDQU5Db2NLQUFBQUZHWjBlWEJxY0RJZ0FBQUFBR3B3TWlBQUFBQkhhbkF5YUFBQUFCWnBhR1J5QUFBQitBQUFBUkVBQVFjSEFBQUFBQUFQWTI5c2NnRUFBQUFBQUJFQUFBQWFjbVZ6SUFBQUFCSnlaWE5qbWNvQUFabktBQUVBQUFBQUFBQnFjREpqLzAvL1VRQXBBQUFBQUFFUkFBQUIrQUFBQUFBQUFBQUFBQUFCRVFBQUFmZ0FBQUFBQUFBQUFBQUJCd0VCLzJRQUl3QUJRM0psWVhSdmNqb2dTbUZ6VUdWeUlGWmxjbk5wYjI0Z01TNDVNREF1TWY5a0FCQUFBVVZ1WTBsRU9rZFNRbFF3TWY5U0FBd0FBZ0FKQUFVRUJBQUIvMXdBRTBCQVNFaFFTRWhRU0VoUVNFaFFTRWhRLzVBQUNnQUFBQUdIWlFBQi81UGZFeUFVTFBjTUJlVWZGTWhxbU56VHNad3NDdVpoNVN3bEN1T0xpdlN3LzBHR2RmVFk2NlNScHdCTHd6aHFqQXZabG01Q0lOYUFlZGtQOHIzdytza0pzMDc0Rm9DQThVQVJFaG1sbit0YU9GQkwyMkdDaWFFb0lWaHBCb0R4VUNlcGg3dU9LMXBXbnQrZ1g5VVdlNGc0M3FkcGZZRDhDUUJFTk5iQTU2R0oyOVFhRVUzYzhUU29Rd3p5eEM5eGVSS1VZSGRlYlFZN0tycnBYREhIVjRrQUpCcnEwcjJiOEpBSVdaNy9EN1VMdGxpR1NCQWVzZXlDa2k5enVPaFdnRkVGZTd6R24zd0d5TlFqZWpaRUhsN1AvWElqdjF0NzIrY0hONnRBUnNwVXNsenhyYk0waVhaVUxOYXFRTFBZOFhtNml2bVcyYVluNnVFc2RFVWZkMnNUY2pvUTFrVnN0S1JuRDRUaU9LOEpnRDhEOW5ueGJ2cFVNWlk0S1RTRzZWRWgwZmF6MjVaV1NNTEdPVzVxSTlCL25lY3NlQUdvbzJFWnU5S2wySkc0WDgwQVV4NXlleGRWdGR4bFFCOVpoOGlQRHJDclhjeVlKRys1alBLL1ZqRDZPS2RCZzdNWTFPcUEvR2NmR2UvTVRGMXJJN21CSUlhVWY2aFh2MEtBOForcXhRRjMvai9JRnhEWEtJOERZUVhQSERUdnZQS3RUUEhpdTRoc0EraVFtclJHOFkvL0dnSi92ZFhIaG5tcHd4dzBkdkpmV2cyd0hVVlZjMlM0YjJOZWwzNTY2eGlEUFRucjJtUGw1SGw4SmZGUmVueDlLdWJnZWVneVZsWmh0ZUZhTGl4OGo3dVoyc3pUaGJ5ZElmVWdLeXl4N1RCTEVyUWNQSkJXT0wxNHNUMmtucm10bmNIMHJ1OTc3TjFDZW4rUm1DTGlURWYyS2hBMGZQTEVOQjg0bzlsLzFtWnVZK1Jkd0xpSVM5SEhWck9tYUx4MjB4c0dFeEFlQ3M1SjF3dTJqaTJRcVB5Nk1HUjluYmZ1dUU0a3RvQ1d4TmNkYkZaWHRTSDJic3poZ2xBc3JwbU9UY1VsR1lXZzZNNGsyVXdyam13WHVSWE5RajRTYld0R3ZDQ3BnTWQyRGxENDRDT1prMDdNUU92cEpVNlZ0YVJBZ3ZHbXoxVVV6SzFUVXlFRXRFTkwzTDBzRHhmOHJjWHBjaXFXLzFqSm5BU2ZXZHZuNjlwRk1Ka3NmaG84VnNpajhkMUZic3JraGZTN3hrVUh3SnZXRDBEMW15blhIRkZJUk9keE5GbUJleDJwenZFK1UvMFlJZjlsdWlGQ29VMFdpaENWS1dZUFpManJ0cWg2MUpFdmQ5RzNVMTdQUXZSWS96djlzc0JwLzJKNFVJMWk5QXNPVi9Pc0VXMlVZMlJ6bkJZaGtTcnZEZ3FYSVd4UFRvNi9GOTBBUVkzbGt3S1Q2ZUV2bEw3UU5FT1BvU3VTNEg5bW1IMWN2SFNoOXk2Z2hqN1I1SkdKcnF1L0JEYTUxNERYRTNyZ00waml2Tlk0UXMxSzk3SzFpVllqNUhGV0FTRmI3SzRUNnVUUlhHOE5qY1JuakRZUVdHdVZDZno2SCtwUURFUU5sZE1zUENpK2krSVhCeFhwVEZCODc5MnVJKzNldFdhUGJnM09QSEtlcFoyNTZWSDJxZnhYY1kwTXJxN0ZWSC9MN1d4WXN5b0h2NkRKQnJDQzZ6b0xxdnhRQnJSL3BMaFMyZnFIeXBkdkx5aEhuRDc4SXNqcmF5Wkx5djlVcHVKT2M5M3UwTW5kTjNBOUlPNmV6ZndTVGU4cjF4Vng4bkxFSXJoRW9mQ3hzb1RkdXhDOHU1R3hMNjhvQi9vTXMzZTMyd1dLTTZDUG10ZmdDQXRtVnhkVW9CLzc1YUwwcFo1ZFJnK3hsRERDaVFCU2txRG9OU2dBMTkrbi9LbXpMK1FYbjBXckYrVEFLSWsvYVRuN2hMeWwyc2JBSUY2SjErd2JvMHpmSjgvOHlTZk1sUHpwb05mREtVQVhoSzdIa0Y0VEZSbXhsQWQwRjhrdE5ubVVqMGpJbWthK3lCT041ckVoUFEyZDhMYS9QbzFHSFVCZDc1aUhmQ0E5NFE1dkIraldFUy9IQUg0OWdrc1VZejM1UFRxUVR4UFFIcklVZ2hlWm43ZHZlNHlFMlhSMThyVDhmRVpnY3B4NTlic2JWRFhwUlNKSUFGTDcyNkxRMnlDVlByRFdLREFLdmZyMXhWMkdiWDNJR3RmdDJ3Tnkzam9Jd1A4YmZYZ2hucld5bzFlSTBTeFFDM2FWakFQNGw3dE40Nlg0RW1od3Y2OFk1bTRpVXpha2VxUEMrUDhaZFc0U0pCMGJxRHlEM05xb3NDK2ZZOUlCeWNYUFJLSHJJMk55MWZSaGNPd0Z1WXNML3VUZ2xLK1RTTWFvRGZCdFlHSUp0YjFyQ2wvNmwxVFE5bkVoR1pwQy9KTlNJd2lPTVpLV3ZwOS9BR1k2b3pOSFo1V0pZQ1JtVHYxeExJWTZBRXpiNHpGbzJCOEhFZmV3NGFJOTRHU09mNWhaWmhrVWlySklMMmdpc0FCMmIyOWRWeGhQQTBxTHU0NlNWcVVSTk9obUZJMnZvM2dtUFlURlNtSGNTUndYdVl5dTV3QWkzZDduS1o2Y1FUNjQ2SElKa1BJM09zWkRmYWQ3WkFLZDcyZ3N0TVVxRUY4OWNGM0NCdzEvVGgwbGhUdEZxdG56eFlzRmpaQjdKT2tSbkJNZTFNUUQwVDUxc2RIOEhSMVYxbVRuVVRxejlYaGlRV0Izd0xtWnc5UUFlOVhlbUNFSllnMGI4NE5wOTRseUdEQzBJRzdPcVVHdGFseE1HL214WHZqbjZoVVRyVjVvWGdvdk9rOUZUa0tEZEVPZnlHemJ1dHcwNVRBUlVKbmduTmNYZDZQNkVnNHB3NkNsNDNiKzNMaFpLWnhSZno2Q2drSnBhQlYrSldBTTAvWHZDZzBzdE80UitmYm90NGUvL0NGU1o1UUxXVVBWR2o5YTN2Y21SQk1LcnhEdnBxUWRmNStPN3RTbTdIODl5OWtHenduUzBxVWQ2aDNTM3hiZDIyckpGWXpNS1QyQmVCQXBabCtQR3dxcVVTN012Vk0waEdwbHdqT2JLaHhmeXhDaGNrcGVqd3lMank1cy9HTGJUdGJDRjJxdm1PZVRZcXRsYmdpWVpZbkZzaFlsb2kyUWx3YVk3ZWlXTjRxUzF5ZVN2SlVldWgwNzBuNUFZbUdlYVRtOG1EQ3g1T2lLd1ByQzBMN2pEcVN6UHpSeXVjS1Q3cjJTNDRVNld1bEdnWlF2OG9ERDljTlFWMDI0aUR3ZElSdHp1UlZlNUdrSGdFNGRRdUxVenlaVXh6SEZJdHNBOGtYbEZVTTJNREhjYTRIekNycVdwaHo3U2F5TFR6Uk43L2dhQnV6ako0UmhMRzEva2NUOU1tY0lMQ21CZUZNeEtMek5qTDhlQTZEL2NtN1dGSlZpK1V5ZlpqVTF5M1lVcXhUMUsvZVBVK0UxTFZWbHU3VnAzZWxEVWViamI5TDhXSDJXQk1BSVNCT0RMOXVUZWRFWVlzVGVYMGViRS92QklSUXQ3OHZYd0pSZ1JlbytUYzl6YkYzL2RveFV2VUpJNXBPb3ZablY2bkZ0OXBYeEtrZmxEWndGSUllSTlBUEJyNlE1c2QvdElBcFh1cXRpQ1dVNWZXdUtFdjROS2puRnRSZ285akFMUDRwR0YzUUkrVXV1TkE0RUloQzJGSWV1eDkrNjRnTTZwZW9nVU45Mmw5R0FBK1F6dWo2TE55MmhjdmtmSTFMa1lOTk5MaFdUS01xTU9qRENIR0QwYlNycE9JbzhVeE1kYzdvd2l3YkE0bVF0M0NtSy8xd1cvdUFiRG8rWkxSSEliaktYUmk4bEIrU3htMUNteTNrSXEvUlJ3WmJIaVZkNzM2aldldjdMT2VSaGNnOHQyYWRrc2xnUWp4YXN4by9WNUNoa2hzVXJJby9vcVBIYmN5TjZEb2ZWWUg2NmlXdHRVZ1F1OFNWL2lkSzlHelV4N1l0Mk5OSHoyc1lsNDUxcjVZUzZKekZzTnFHcmduaUs4U1ViZVNwaG9XeFJCVDJiV2tlSDZaZ2pKUElncWRxRnFJWkluUytjc05pR1dXVEhXYTBYQko3cW0vRVRROFNpbFZ0V3gxNWFLTFg2TzNVWUNVdzg0Q2I3S0lLYi9QSThxaUlTR2MyRTFlRFpGZ2k1VlhlUkxxdURESEkzZWpCWnZrRGhDZHVJWGhaSzY5ckhMaTA1ZXhXZEhwRjByRzNjKzZpSTA4b2tuZGNpTzhHSnRZRFlZbkRZaVpHbjBDOUo5a0thVzVsV0FMSDBNMDNmRXM0TVluL1VmWWVNQVRrSkVkSmhWb2RaY0dJRmRFSFJKU05uak84VC9yV05EOHFUUHFpQWJ6QnR6R2ZjRHdxR3hQeThnK3JVaTMzT1hjVlBzdXQ2NkRWWlRHM2VkVGYwU0ordmF1RFpVNzAycjlwNXBnZms3cFYwVnlXZFJWSFh0V3ZYYUlkdmIwV1NZdzFmS0lWT3lKM3FjUWxVMXoyS3dsRENCZ3VDTlh0RDFsT0NIaEVaOHpYQlMwL0EzT1M5eVZyZ3F0RVR5QU5hM3N6WS92Y3pYcE9XaFpTajh5SU1MbE9hRzQ4eXcyV0NSVkdXc3hYYTJwYis4QXZHcDBWYjdGQlN5UWp3ZlE3SHJnTkdvdXM2WG5BZWJmcVpkd3JwUnZuM2IvYWJObXYvWkNNMnVDZlhyemxMUVpYQ3NaM3N5anVXSklQeUN4UGJma3k2eEJiNVZoYWUzSGkxcDUvbVc0NGlQdmxIMzIvTDFib2ZNQ1VkNlFCY3ZWeVphdmtZRFJXd1RLbldoUnlscU0yb2p1S0p1TnV3UjlVbFhkZXdKSHpubmhHb2NtbXlCNDhkTEN0Wm9COFd4bCtDV3BWMmIvbGMxQjQ0cnNleWdzMnpyclVBVnhSOWsyLzdkejFTRUhia3Y0SlFvNHVwMlJzNnl1d3pDemFwNTZHVkZCZFV2VE5MS0M2eUdIQVhnV29vTC9vR1o5eGJvUTJDWGFsaUdoNHYrR3pDa3U5RU8xVjJ6a1JMT1h2a3lENUw1SEhjVm4zc0JIVHREN0Z3UjBrbXczdlZTVVRBWldxazlWdzhYUFN4WU05N1g5SzBNNlhBSUlrZk9hdzZvbXM1eldsZ2FMOXRBdDhqb0JTR3BRMWdzWGp5YWlPdjJ2YUl2bjdRbXFyajRJRm5GSWlmOURxUXZlNnZHOHNhdWRNUWcyYnJISVVnSWhXaU5ZSHlrVkJLbnh0T0lMelJKN2ZPMmI2OHExK0FCalp4alpVdU1QbVgvcFRZa211Nmc3TUhiSWdiRUZNN3NYMHdsZG1lYmlSMWVpRHVuODNtRGNDdjY5N005R3BQOUh6RlVvR2pqRDZUSWFKMGRTdHJmOTVpVFZjNVlrOGRtS29RMUlPbkI1eXExTVlwaVZmMDNjb2d5amtKUHhWMjZYOHJiWlplVS96Wm1hVGM5NGwwVWo0dUd1dDZJUzQyZHcwUm0wSi9uV2c0aFo4VUxVWXdFNkQ1SE9YSEdtQWRZVjYwQWpHdlI0RnNML2Rsckg2bWhyZFRPQWEzR2hibHFIV2RpcXhsVzVGakhlbjc4Rmsyb043S0ZDRk9jdWM2L25BWTM3eVFUKzZQN3FIazNobk1PaVFOemNzQVN0ZWovcEZTcVd6ZDFTYk9JNGg1Wjl5YzRhOEwrT29Gb2ptQXpiTE9Vb2tFVUkxQmp3UVVsQm5vR29wQU8vYWpXMiszdEZoUEUwbmRsSDJWYjVJUENzaXlWdU4yNWhrbkQzWldzaEFscTJGUE1vY2IxSkU3YmFlTEd0K1VtTDBHeUVXY2dnT2pPclpVeno2dnlwTUJ3YUFzQ2pVMXZlNTUvblNoRXhtdlFZblVrcG9ybEF0WWIxSFZqQ3c2TXRISGR3a3Ryd1VzZ2U1MXZERGkwNmxLUWRIMFZ4bVdacjVKS2lmSUlEUEJJcjdML0d1SGc0MFpjMHBqbFhFSmN6WFA2NnpodUxKZkF4anNPQ0VhYTRRdGZmV2FqSXRiTFcwaUxEMThhOFFEMWRHdmNyTlQ5ck9VR3c1amRGbTgvdXNid203K055SFhEOTB2ZVVZVWNTVU9wdjJVWXRwc0U3SlIwMm9iajg2TWhGd0lvL3ZoaDMyNDFFK1V0cUpjbGd3YTlJcERxYmUyV0FLMTNraXVHQWdQMzlmSHMwWGd0M2cycDQxdGRQaXJweXJrSnliQk9RTFZzMytFSExmN1RJNEp4S1NPUFJZZnlja3JXeUNmbS9icERGemxTN2E4WEFjMHd6OVpqWDQ1Tjd5U0VnSVdLUkJYQXEwMWUvWUd0MC85WW9yTGVlempKQnRTQ3Brd2xqOWVCRzNuZnc3b0IxN3RPUFFpaUhLaExSMS80UmVnRTZJdWtFMkJTelY3cEw3MVRvV2JqTS9PeG1nT3VXclY3NzAzcE04VDNiNkRZQ3Frd0VSbTFxaWwzVGxDY1BjTFhSeU81ai95Nmkvc1Q2OURHdTN2M1FyekR4WDRDd0c2TzNoNjI2MTNJSTVDeFNuemFQOHFCZkxwNEhwaHgyTDVDbituKzdTeDBVLy9idUZIeEFJQkE1QlBSRGVtV3J6d0lnYzJQSjQvUlk5UC8zMnN2eGtCbzF4RVNGS1liV3FkRzFxc3EySVhVZFAzTnBNQXp1bzN0ZWZncEVvL2FXaXhyL2J6Tk5HdFJQSDdteTJsZTE1alJLTDErRG8wVXNQTEg1ZWRnTVcwNUJOOHpNYXMzeW9UaTBOVm96VzE3WStCVGRFMC9VZEVEZDIvM055Y3dnTWwzKzA3WGJ1MXNSOFZtS1JqcWpHMUxsNzRLUW9HVVlQa0ZvQ2tWSDlaTDFlVnZldjhvWnQvMkZ6eXZaOFFmOW94bkRLc0MvSVhtelBTS0lycTc4eGcxbFcvUFhPU2IwdzhkRytOa2VBcXl1TWdEKzlGUi9OU2RPVVN4UEtVUG1LZ1VPVXlrTkI2TXlJVFQyeHVXOEVDZG80WmMyVjc0WGJkcDFsZGUxYmpHellrSGJhZ1lxTUpCYnZQZzhhc2x1Z2Q4RnNxblV4cTdveDNGK0lRcXY1VkpSTno2RVBqS1RIQUlhc01YZnN6U2pySzE5cWxGcnNpaFFRQUl6bzJPS0p1Z0hRTTN2ejlOWWdJdWFNeFZNbFNaR0xhcGk5YzkvS0tuclg5Q1hIMEp4ZldXMkJSdEdHcndsSEdTd29keW8vTmMzMEFDdFV0L05jakNIMThCREo1eStCTmdNdGREZnhoYlF2cFBseS9NbW02RE1mdnRleDBySjJpZHlaM2NZRy9YMG1zaUtmWVhaOW9ENldwQTkvZmV0cDcwYkw3K1hrUVVVQXRBYjNHMlFFeWc1NW9TaUVYdVdsWnNUdEF5LzdYUTJGQ3JETDhTWjUwbC95WkxaUjJDMGFMVHJNRmYxSU5pZ1NsTy9GRVkrU3BaYkN3N3hDQjBHTWxBVGFCOXRldmhKS3hRWTc3eVRjbW50VU91eFlWRzhQT24xcXgyWHBxZi9SNitRNEJ3NTE4anFlVExkWTNpb1dOZHR1MTlSbW5mRGc4eFkyWDhZOXcwdEIyQ0JWaVgwb2ZSbXljbXlDVmRScXhEQ08yNTlhYUFQRjBUTGk1L3dQYldjMXZscm94WWRUdUVrSG9YVEEwVWdLNy9wTFZPLzZsUGMydGxpTnpwS3UxY2czZTF3MkJCVXk4TTdjVUk1M0V2cHVEdER0U3dKVVhaaTVya0pzYmk5cTZseEVqSjdVSXNQcTVlWU0rNXJCU2VOM3gzVWI5RDFkZjU3a3F0SFdaa1lNeWVadzlDSGdMVSt5WXhEc01vZENLOG1qN1F1S1ltS0hQNTZCMEE2cjcxZGl5a3Irb0grcWY4bnhTUXFYNEZTKzV2QjJvR056V0NhZjhSVkZNcnd5OVIyMTgwdTRqUHJqSVdIRHVoQzhyZlllZG1nNzNyV3A4OXI0VEdoeVUvM0NPUUhVamdtdGMvM1FJVklTK3ZzQ3FmU2c2WEJLOElBQnpVUG85RXk4R1c1a3lwcDd4NnR4dTB3SzdNdXBoMWlLV3N4YmNTZFVkNjRMT3U0ZzhMNXF1R1lPQU94MWVtWGVEcExMM09JYnZ5WmVhMEhtTmI0Sy9ldUtEUzNzODVEQnJ5cE53M0tpZkVidE1tTUh5QlRhU0RlajRqNExYU0xRVG1KZ2tDcTAvSFMweHFLMGJlY3Q2aGtzQjMvV2NUbzhZMngvcmprSEE2dXgyOTQxTHBpMnRicXZQdEwyYW5UY0wyc2ZPL1NEOWdFMjY2Z0xyajBlTmpxZzFWdng0OUZVdHBRc3ptRm5RbVdOU0syVWpXZ3JhTjYyK1E0WENsMmpadTQ4UXQ5VnZaN1RDUytGM2RTcEVBekdndVVWRGw4T0hNTmNuckc5cHJUZ1ZiMWRKZDh6YmlXZlltdEdpMHhvYmFmZ1VVVm9WUnBvdDdURXduam5RN3dGNGhzL21pOTBaVktrWnNsbTJPbzJ6U1NoaFpwZDE3N1lsdGJQK0J2Q0RZdmFqTG1iV1h5UnhQaFBDQi95WGwySWJyeCsrekllMkw0bDU5OStFcmF1cjVtckFIZTNUWFYzY1BickYxZnVUSURIdzRvelZOR09RS3JvNUlGU05WaS9HQnhyWDZpYThBNXpuMjJkVU1QNklhY3k4ZG85K1VCckoxMzRoK0t2ZTBhd2NydE1VWVlkbURORGMrcEpveTBSNk1MTnI1VTJYS2k0dG1IU3lsZFhtcUpKa21xdllyZ0tqUEkvVW16d1B0Ry91cEFocnBJUFhzRDZmNUdaNXB2SXZFSUJaclRZMjVNcWlaOGVlNEtTWjhDV2lXdDQwMm9jdmlRc3JaMFhOUWU5MEFCM2FNdExmZ004c0o5NmI5WmREQ2ttd0ErVjF0VDhhUTFYWkFhVVFtUWw4ODI1VjJqTUwwQWZSVkNjTXZSTFZpK2x1MjEwd2lwQ2VLcUJDaEpQYVVpS2xZeEtSNytXTWRqSHp1eGNoVEtoZWpxN29rMTU0c2JlM21yVGsreEFEY3NoTDZJNnF5dFdqYVJ0d2RpaG5PS3ptVFZ6enVJNUhtemN0dURpVitvQkprbUZlMEtQVWtmQXVWOVlBVHdDK3RscU1BY2J1OCtxZFRzeHpYTisrYlhvNHY5WkdZQ2FQeUc4Nm01S3pkek0xdHRIcUxUOTd5b0xicEhlUTd5a3Y3ZWVaRGhoVkhiSGdqY2hMS085em43eU5rUWlPdkZ1OXdTSWg0TVQ1RU5rU0VjZUw0cEJPOWxnKzhnRnQ0VnVKWTh3QXd1SkhXUms1SnpDbFNQWmxXTzlBWjRndVYzSm01Zkl2YWtTdkhUV3hldGtWbldLSm1PT295YTZpVXVYNXhtYWFoVkJSTEQ1R3o5eWRhaGFoandsbVJnSnl1OXRKZWdWUHFvbThRWUF0aDJLK2Q0U0h3TWtubitvNlY5eDhWblFDMk9QejdGOURENHpKMmRNQjVUeTdwRVNEMDM1UVdPNnZZTmkzS251eis4VDBvNHJKUDFJakZmbGFucTFTY0dhWERrRjRKTjREbC83Z1JiZW1oRGlDSnY4MUNDSzVhSG9GUWY2OG9pRGZhaklvQ3R1b0RhU0huL25HUlUxM29XNE1xZDkvamJ1OVhJOEJoYmJzdE5mT1hiQmxzb0RjSmNGZTFPMDRSZnZQeHVmZlpMZ1JMZE9OTU1jZlF2R25BbjJGMzZGNm5ISmI5NXV0Z2NnRStzaDlNVEJnRUhvZDRkSVB3VlZ0OWpUeC9xMmlOWVdyNmpGNWlKYWlhdHJZb1FycmNybnVyODJ6SGo5UUpmdS9Fb053MWdqRWNld1djSU5JcUpqZzlieXRNZC9wVnhHNUNuMnJSUnJEVHRCSTBTWHphQW1EZUxHMlZ1RFRzejE4NldiSGRVR2xXNG9meUErbkUwNmlsQ2VYTFJHbllraFRHOUpLcjZPZ1AvYmFwWWNtallnT2FFZnJGSHJRYjFORlUrOUF2RlNOeXdTSUNvVzRHQyttTHY1UU4xbFA0MjhONVk1bVFKUXFhaUo3UmU2SThPU01WU283MUExVXhqaitvdjhnZ1VtS2RQNnZFeDNkRk1NdVl5cHhXMUFZQno1SGVId2hOaVFmMHR0SUhLS2ZOSkxpckN4dkRqdzNEWnRGTW5pWVJ6T0o5NUw4MWhBc0VaREdNZ1RZQ1d0eXRKZ3JMZHJIZ0JzY3ovQ0NmVk16eG9VU1F2ekRQb000SDVTdWVSVjBoUGI4ZWU4bzJobjA0VVBLTE9Oc0pHdEpHTW1jcldPRXZkTzBtQVFVREdIYkNndWVZTXFQWHFIN25iRFA3c3hoMHcrU0V2RVVNT0c1MDVGSzdLUmVSNWhlaE9BSEFsUnBtR3ZVd1MyUGk4T21yaUNIN3hJTTNkMjQwOUdGemxYRmtpaDB3M2RqUW1QT0Vma3J4ajBJMFZzZWd2bllYek9sc200UHJyeW14SUJZSWFvbVI5NS9pRGZQWGt0NXhxeHFOeTZSL1dVRTFKV2NIN21OOWJ2V3pkeWp4OC9QODZsbkIzbm5kRFljaGlZVC9wWmhaQmJRL1lLTTM1T1UzUkdJNVFDNmY1MFZkMFVOSTBybjkzRkhJRTROdU5FY3k3bFZzcVk5dlk5WTdyaDBhOXZOZjNGaFNpWWlGQ0ZaMlVqVlFUZFd1ckRmSkwwL1oxUjFvbEJXcVJEOU1IZEJ5VXdjWE8zdHUxSENwWU1XQmd4U2tmRXM0Wk1SSmg5T3lNeVdCVHRWVHlYaERpbm9qWU5nenpTc2xBQkhQWmJIQ0JEcEVFaWxuMHJveEppR1E5NVphelp3alNBZEdVL3lSQU1kdS9zL2dZSFlGcVdEbmRES1IrUUVhaGFDUVRvaEt1NTNWN0hwMmtmdkhSU3NQam5QTkFBWlREWVlOSnRISXBNaUVqWjVoN3hhL0ZvL1o2dWNnSnVOc0tSdEQwUXBQRE5abGNyL1huZGMvZ21qcFN3Vi9NR2o4VkJFTVpYb0NLSllnTDQxd2JGM2FKN0VHK2hmUGowaUlyeXpSZDFlVjhRMmsybFRWeUYwY2hGWkV3YnptWHNtMHViWi9RRjkrU1JKZlkxQmt0clRGKzl5dmtmS3pESE9vcFNsNFZVM2ZWbzZsbVZudXNQdGRyRmNnN3NWa3hIeWMvU3NMbzJxUElCZm5HWnpnWHMvSTRwV0YraWVNWmFIVUhFZUJwd2xiZEl1cXorNHFDWU1aR2N3OHFWeXRFbzFmT1RQZ1hWelc1NHJoeWd5RVl2WWhMbVlIU1lxNi9QRFhpZGtDQy9TRHRCbHVvYzR1dEh0R3YxSmFaYnhjVTlKejZSMUUrRzg3UnNhTUZreFhJUFg3L01CbTF0YW10c2FxVG9zMnBMOWttT2pIQXV3L0pIL1Fqc0pmRmRWWDJnYnV2WFdkbEZWclRpUGswSkVlQWtHYnlHTm1YMm5YMm4rZ0Zvb1hhL2FhVnNTQmxmL0paZlptdXVPemRrbGxBSDVpYisrNXcyWnQ0cVNWRHMveWRoa1lVOEVmVGl4aFNqaFJyVVhjcHB0bVROMFBkbWJmQTE4RG11cTBkS2l3enM4TG1wL3k2WGNicnJqZTY4eHFybFBuRTJaRW5jMndsRS9MUUErc1EwcDlVZXhQN2lrSUF0SmtYRHJyTjE3dnljbnQrZEFSY053VWQvenFTVXZtWmpnMDBLQjQzNEJCS1J4NVE2anpTTnBobG9ja2p3bDJyUDNCYlhRZWxRcmljUFpOd3d5Zno5L1dIN1M5dzAxQllIckk3Ym16M1VPUGVjWUpyeXRTT2R2RTJjYlo4aTJ2VjROYjIzT2c0eVZMTGM4VHVGSXhaeGJ5MWpGK2E1NnJzdVpIRlFxUGs1Smw2bWlyWXU5ZVM3YXdJayt3TG53YW4raWI1dzFzUFFaL3FQSFdSdk16bk0wUHVoa3ZuK3laWW4yc3dZaVJRMGJMcUtUUlBZRGVVdzEyMjRPOFg3MEJHTkJMVGhxN043Tjk2cVp1SXBTa2F1UjJTRmJPNitEZ2t3N2hhZXI2QW93bzdhYkFDMUlmeUhBZ1hNMFJtdW9QREw5S0QrSlZab00vbUQyQnZ0SlptelEyOGI0eThmejdYV2ZrRXZMa2gxb3JCMVM0ZWQ4ZXhpVjFPenErc1JJcUhCRml3MEdqZ2tiaTV0OUY3d3BEZmZ4VWVHRGt1VnVaaXBXTGh6Z3A1L09yejlCNmpKYXJiQU1sa0lZZnduWWdnWXdOSldpMjNoWFJ5ZzZlRUs1VjhqZFFIR2VzaE5TRkg1azJMQ1FlQ2pwRm5kQWc4YVBwdkVKaW1lMDR0SElIamdCaVlITnhPZXFQRlMvWDFLSnJqOTc0aWhHM21Ec0V3RitVbnFKdHFsTStLTHF1bjZabmVjU2ExeEJ5dUJHRlBOUllFTHhpdlRvbzdEVkY4cTBTYnFUMXlFaFhMd1JqLzZuNTliOXdBYjJzWEh4ZWhsR003Vk1QZUhmcGZVUjgvU2NJSk10OCt6NmRPWjBaamtOOW9YN0c3amNnaGlEV28veGIweWNZUnFNOTMzQXBYYVVkbUxQcWIzeURBbktFMCtQRngyTjJoYk9KTTNNc0hZRXlkUEVXZ2tjLzF5ZCt0NHZjQW5TNjgyZXJId2Y2RUEveGUvSW1KZFNSVjZaZVNRK0RoemtiRDlEdU80K0VaNDByK1RLZHFldVRzMENhd1A3NmhybDBiYWk5bm5WcWs3UU9ZZmJ3Y1RlVHIvWXUwVjZrQkUzbEhyRnM0K2ZGeG0rT2VFNURtbStTcXBIdFVxZEEyU3hIbjlYWVBJS2hNYW00L21ZcGIyc3VUTHVvTWtGcXBKb3R4TjZlME5xYlQyNGZKRnVLeVVpUkU0eWFzMHpJcFVrUGtNUUVpbVhZeFRIUCtZYUxGcGo3b2J2TFpMVnBUNlFaY1NsUkgyNEtDUUg3Y3dPcWU1SVBCa2tzZjhQL1RLdjQyZm9YMS9NcHN0SUZjMGI5MkpOZytPNVZ3ZTB0QlBpd0YwV0hweWcwdk1HWnVpcjBvckV3b1VHUWkxaG5PU3ltYm1hZ1hDSjlOMlB0UDYwWWdsbXMrZmFORlhacnlkMGdWRDlNeUtlSklDejB6TXY1RmhhUXIyTjdzcFN0ZDRyS1F3cEdscCtkLzMxT1crMXdzb3h6ZEZHMlFwK3M5OHlUbTF5ZTlmS2xjdmVwWjVTaDlmR1JsS2NVamdwY0VDZlZzTmxNZTJBUmZGU0JQVWg4SkZ5c2xJUmF2bmdaa3FkV2F1SHRnOHZIcFdybTAzSjBYcVhZeUx3MTQzRmJkcDdNSENmSUE5SGMrUU11SXZaeFRUNmFrWW5wRUJSeGZIdHZFZXZkZUI4QldJL3pZK0Z2TDRRSnFGNjBIVW45ZkxXQSthb203R1JoVHR5VHByd1A4c0xBNTZ4dktyaXRGajdUYVlpSCtzelVwcW1PcmxkYVo2REZaVStWZzREUDcxRjAvSEI1bVMvdytuMDhEY1V0ejI4eUJZbTJFNXZKbUtkbXgzRU1DcE50UVlvMnJzczIyV1lZdEFhd016eDBjRFZ1Z20vdFUxSmx4SC9ia0lUMTl6TTR2bEhra1FwcXlESUUxWHZCK1B6ZjlyV3VoQ2J0TnVkNUpmcm5RNUFzQjNGSlNON3BmaUxjWitidnQ1eUxJaTQxZUN4L2hIMGVWSkwrTTdXMC9hT0JBbHBpY3JsQytSNS9aYlBhdTdWKzBSbmlXSEJrU2V4N3pDWkFvbktoZ1RMbVhsUmZpNmdPMUZFZG9mVE9oVG5qNUFqMXN6SExFdjRIU1RwS2VoWGpmRWRGZ2kzRXorNjg5bDF5TWdIV3lGaGgvQkxWaFVsdzJHZ2tRRlNsQ05LbVBmOW9NMUhEZjRjajdKWFFCdVRTaVIrQjBBUTgzTFJPVGs2aThRRWRkL2JBVXFDREJzOHJqZ1hsNnlOOEtQN0JQaG9HVUNhVDl1UnhLNU5xZGVoQk0xaFJ6VEt5MHlCeHZ6czNDRWZHK2srWHVJNHNXeGREalZBVDNIV1FybExwTGZiNDFlZmdESEswNmxQWDVmOFJIc0tqMzRhdlZ5K0JjV2swNVJxWGJXS240Q0FnSURubjFRQTBkcDhiZ1VoeGxTeUFHNHBMb3JNOHRPSlQ3K0l6OVNsQXhFSGFRWk1mMElWVFNhOGNKanJvb0tuUDFZc2tsbVNjcmdVdEpwc1ZwUTVTV2FvV080bnFvV1lFK2ZzWFJzaEJpQ1dPT0JrODJrSm1hSzBHTVozUDNiRTJQVFAxQzIvRDNJNCsxcVBOT2hNTnExOFFxc3FDcy9hZHp0emZwdzNGd1NBSzhjMHdXRHhUbE84Mld1NThUdmpYc2lpdjJmVXVhQjNJcUJ0akVvcjZqRTNqZDlGUGtHdmR3WmN0Tm5ISGozK0RBSkRoOERFemJFUGh3YUV2VVdrYUNaTXlvaW5tVWN5Wkd2WG55U09rSHBURUZpK2lzY0tHQ0dRdmd0djdTMDVEWXlVbVBPVFVZWGxVVnRNUFE4QVBLekxDMGdPdllIbzlFdDROUGZiYXo3MDJkazNZWno5YnNwVkVqbXkyOVRvTDRLSHJ1Zm0zZElKK2NlWkNpL2ZLSEZWdC84R1crQUZPekJ0YVdYQTJHYiszWlFJRTd1QzNIYUp2b3AvNE9PcWk5a2xxcEpCRXR4enVCU1k1eUxCVEJYelB2MXpobm5vQnUxQWhVNGU1ZmtBbWgwQk9jNFppa3dSTkZMeEhsZTNjdUZEc0NJUXpxcWVnWCtYcXpFTzlXNUVadytjREUvZ05rM3FGclpnY0h4dCt4RzFwdmdRZThlejQzWEV3MkZkWlkxVlpRaGMyS2owSm1TUU5KY1Y5WDV0Z1BnQXY0cFVQdW40NkhFQUJXT2p3ZTFJRGRoYjExN2NoUHg4MEhVYnBWTTRHUlFqOGY5S3JENGNVM2xjZGFTSzRubzR5a1pNRnp1eVFqWHRLTTdVWk01d2tJRkZxU1hWTSsxMVFoa2x0eWJXOEdDQTVONFRrNVg5U3RuWmhNMjN2ZWF2aHpYTXdGeWtkNzlYanBEeGNNeE9sVjA0SEdNUktQNUJCUDRzczVrTHorNUJZM2ZISkxlOEl5VnJOQ1pXc21HZUgwMy9YVFpPU1M0Sno5cURpS3ArRHpWd2VGQ3JkTURLVkZWOGZ0UWptQnBBUFY4UnovSmZoOHBVYnMvTFBoeGpxNU5aMXFkVXpVMmdvVHkxZDFlc3pFSjBZWlZPR1BzeXFHZW4rY2hvWnpsbVNWWTNJMXpuMDd6VFk1UXZFdWVYNEx0QXVaS1F1cFBzaExoWFlxeHRyMDhSbEpDT0Z1ZHg0MWcxMEVJOThsRmw3Vy8xU1UrMmhRWGZLOGl0STZnSGxTb0tRVGpoZ1E3Njh1WHVVMmhJYXhsUmg0ZHNxVzBrK01Ld0t5SU8zbDZWMTJRaGpEVXhKWmh1S0N2cVVYMFgyNTBYdm05N0p6L3lrYkNzYjFIVkpTQnk0a3pPZzZYOGRMKzYwQ29odXlPMFlqazBweFdBbFh6RE5QRS9jYlBQb2NIeU83SjJiaFYrTUpTYjVmb1doczcxZ3pRbHRxKzF1cW9FVTZYRE1MMllXRk8yS0VEN1laZGorTDlNREt5LzZGYnFlcVZjcmtBNGZpL0hQaW5FR0d1TTBER1EwamR1QzloYURZSHN0d2ljSzhocHozdXFvSFZXUDVvZzdMVzU3VGxnYWtvUDZJeVNqV011a3hmK3Z6M2NWczJiVnR2dGFTVXplRjNmSFhxMHNSYVNNTWp4VHNLdVNJT044VUtsMjBzYzB4RnJrNW56NlYwbENSTmVSNnBPV3lvcS9ZQUdDbUpsc21hZUZWaFhjR2dwaG1xblY1UFRCMVBkSGVUcHNuYnNtZkNqcVlIOFlvU3dod2ZNbGVTVUhXZzJYTWpIV2JaS281R003L0MrVEpzU2FscVNGd2FEZ0hGVjZlUlh1ZDBzM1hOS3ZOUFp0QzVPQi9GczBIOUVZMlpEZ29BZUFnWlZVTGdpTktJYzNFenRYNWVmSTliUTVEV0hPMDBkVmxFaE1IWFVRcDJKSmhGaGc3ZDl2M2UwUlRoRENpUU11Q1pUY1pGQWZHSGdZaGRyd0UxRnEzNk5wOTIwVU5NTkZmU1dNUzVBQUpoRFlDU2dRWUxhVzFzM2RiZHNJWXd6dWU5SFJnb0M1dzYxcVVUdE9tb3VrYlc3K2VFbDdzSDdWR0dhOTNoOUg5Tjk0ZlVZTS9FT2p3cHlyZUhBRlFoS1pISFAzc3FoSDIvVXlDMm8vZnhsYndPelR3K2JrMTIrYysrSVZObFBldjZmZHdjV2dxZllQWWdWMEFySTR6MW96Q29HWTloMVVHT2wvNEpLeXg4Qy9tV3laK1JMUmQ2UGZMTEMwcmNMbE02RkFWcUVlM1g0ZFdkcm9xaHBNQWdYZWlaSVoxTzBESUk0WjZmVDdKb1haVkNCbUxRbGhUWW1abE9JMnliSDRhRGptbGVKZEJmMGgwM252aVFWcWUydExyaTNuTlEyZnIrY1VDZnNYL3lNaU90dHFCSk0wWTRpWEV6MjZxKzJoTVh4MDRpbDBDVmw3TFpZWVp3Nk5TWlp5clVJVGtscTA3MGdBSnNjV204VFZrWW04VXZLSmEvenRCVTl2ZXgvNjlkK094WTAxaGcxbExjaHF3NVRqbEdyRUJxV3NHbjVRdVVPTDFSZDVYR2RZSnJ4NmRVV3NwVDB0L3RtYnkxZ3pwaE81TkdrdzBDcjBNeDVzVm5wK2toVDlBUW52MWkrSXp0bkxzS2x6eUZjYWpha0FnbkhncFlocXhlSGFodXorSEpKQnlsNVRYd2l4czdpSGxJbDk2aVlYbVhlakFONlB4SmpicWczZU11b0RVakkyT3IxV1N5RmRqWk9Ta1VoREJHSUZ6M1k1ZzZvYnJiY0N3Yk5OcmhuNzFzakZOWHdWYjFZMnk4ZWVsRzZFTFIvT3RSZ0d6OFNLeTg5N0l1dEVOTksvbXFtWWNPWW10WU5ZUHE0NzVZa0xIK1ZNSjl4VmlCMTJ2VnoyVVBkU0QrYW9qenBTM0tLZjhpYS9JMTdVTFY2OTVIcUdZZjFFRFlrSHJXQnh6S3R5SFluMGlaNDRVTUd5cm9GYzQ1RWNKUnRNQkY4M0duTlkxc0tXc1JOUm9NaTk4cnI5em9sK0ViTThtNWNodGpFMTBrd1RJallZbUdsTTZ3LzlWS3JqWnhlcERKcXNrTmJXMURtRnI1ek9pNkdHR0s0V1pKYzdnNkZ4MmZGTFh4WTFBMllkZGNnZWFoYjMxdWVOUDNNT2M0eGRFMjFOMmw0WHg1YmVhb2E5ZnJrK2VHWnh0OXNWZWluL0JUQ0s2M0cwZTRzaUJhUXZkcDNpNk9kNWVjQTJadnZnWHJ3MmdpejA2N2xqd3N1ajhmeWRTcmxiZTFlZzZDTkxsdG1IUTBnQlJpYTVUQnRpdXlEb1RzS2plV0x0UmY5eDBvNVJDeWJ6ZU9RK0FmdHB4WUEvMXpTL1JGVnZpeVJaY2ttbTNRaVpVSE4xR0xqaW5Jb0FWMlg2TWlnMGVkR1h5YjRWRU1VUG1rSTBsVjZDNy9BWk5EbEVrUGJCblBzTE9zR09pblhFT3VqN2hhQ3BLeUNHRHR2cURtWXB0a1YzNGVmeCtKakx2OTBRa0t2bzZrM1lCSmNBUFNMd1YzOWc5WGhld2JDVXZ5eEtIMGFNbGo1SHprSjl4UEZxTmV3TWRCVWVJc21FSkhQMzc1ZzREVkFOR2JTMjcvdVl1ODR1VWFsdC8wLzA2RUlnOUs2eWR3cCtDeGpWUWtRNU00c21Oai9LcE5TclVGdjZzN2p3YmVUcmdSdTU3ZXhsNHpCUFJFajdmY1lWYkZQamU1Yk5IT3J1Ym9IRXZxZDJ1aU1ocm0zaW12aGVnT1FaWE53K0FwWXBIUUMrN1hoNjdGZmRUZ043NVRlZ1Y3YXV0bmpxQTZLSjlxM0I4NFBtUjZjNkE5cTBpNFlCc0RPU0NjbjNLa0g0UlFOWTQ2UU5pbzdlQW5lSHVHQTd2NElKSjlhOWNvN3RDMno1dkxEblA5SlN0QkFqQXFMZGpzR3JSMTJhSGdpR0xkQmhJTHp3dmhUaEhoNDZUM1FBOFMyOGdlSXhZb1JQdGNDeEF0ZGRKeGpTbHhRMzJWdDVvMVV3NHlTYXFBTjJ5WTIwRWFwb0FVQ3BHd0lDWWNuY3pCb04zaVowN2g3WUx3dm1xTU1JRWNwU1EweDg5Mk4xeDJoQnE2bXgySTFIN1VhckRZSExGREMxLzlrYUwyalFnNDllU1RPVTNyUlpTTE5tSWNLWWlRd25FL0NzQ0Zra0tnazU5MTV6b0VkQnlreHA1NzFsakFEVThnNVhMYy8vcEdFblNPY0Rpb2F2bWlXdHJIRXJJdHJuc216Y0FqdEMrZ3RydXUzT20vL0plcTQ5Y2poWG5UaCt0T0dLc09ldWNTUkFVZ2UwRUdqK2ZxWEh1dlQ5K3AxWVZqMGd6aEpTNzZCbmhZcktpeHhuemVOaVpvdWtPalY2NUZ5L3dHZmFyb2ZUTHNnRmQxMWh5VGdpOTIybUl5RUxvS2syNXhDanNLU3hadWRpMVNJV3hhVlBuVGF1RVBLbUsvT3JFQkpYM25oSXhkR3BLTEw5WkdsaS85eUJKY1gxc2tkQ0M1TEl4UEk0NmpUY1NhM0ZqbERJMjNlbTY0cGs5dFhKM0hRcnNwMlhGbnpxeGJpaThPS2FwTVZWZTZqRkN4U0M4Zmc2NUpBeVBvMXlBUDhiVWpZKzNiL0NUWEIrd2FsUkVqR29jMHk4UXV6cDJ5VW9MdlJOUnJDcjBwcmF5YkJXTWJScmJSWXd0ekoxYm5vRGIzN0pkNmVNRUFsMlJjbGQzZmdKc3Q5MWpNbVJoS0ZOR1pkTXNWcloxMlZkVlN0aDRBTHA0d3p4ZCtFMnV6U0k1RC9BT29GS3lHUWdvSGdPVmh5YitoVGJ0aFRvS2V2c05QWE1KZ004VjcraGIrbXoxLzFsRjVyRTlnRHgyZ2dCU3ViRWtESDgrVGlyelNEN3dPMm9hTk5CV2NwQmo4OE5reVRoNzUxUFNKNWZLbDBhaXhjcXEzMmdNZDlEVnlkRDJOM1FxNXhWMnpRZ2dXTEFpdkcrNmIzbmlXZWdpa0swRi8rUkpMcGRGa0w1VmpsYXV3RHdEYXoyR2NlZlhFa085bjU1N1ZwbXl3V3AxeXVqamdrL0hOa3M0NzllRVhveFBGQVBaYVRncDRJdmRaWDBtQ2NpRVZUbFpUNFJzREJIb3VkT3I3bnAvbTVtNFdYc2tGeFRuZG9NbmFWNUkzOVpTbEh6b2ZzMlUvOEZyNnlxRyswMCtzc08rdGsrMjArbjFGSDM3ZEsrMWRBbVhvaXdCbUZBbHNNb1JsVmh2VktaV2tibUdXR0gwSW9uYVJoSDFFTjY2aEpZUEdPbTFKNzRRUTBYbmRnMXBoNGdMYXdtR2Y1VjNJUmNyM3hvWHFRelVwNC96KzlJT0Y3YnJGUzZOS0pKb3RlVzBXNjRGT0l5YWpCaWNxNEd2VUpxcTlXT1JwRkhRSnlaY3o3cUhHd0hzMEExK2JoVWZvcHBoaU1EVllldkpJY2dHZytGM2o0dVZPc2JaNnJiaER5Sm5hRE95K0p3dURTRXRQL0h5bGRmZzg0VmNjZVE2R0NMWkl6bmhPUGJVTEtnWStXOW1IbU10TTNFMHpyVVEweC9ySjBGK2JVMUl3UzZ3MXBFSWlEc05jNm9VY1UxUjB6S3JHZThYNisvbkxJejltcklhR1IxclA4eE1HOXVuazgyMVJWZUtPWkgzUmRGVGpUVlpiY0NKUnFsc3Qrb3ZOOFQwRU0vajM2d1dJM2U1TGNTWmRaU1haM1QyenFWSERGc2JXV2lBOTdwWHhhZGViZ3lkQVdGTHcrdkZTaldhN1VibTFaeFZpUzZkSlNFR1JOVkRiMWhZL0tCMFgrbnVYUmNveEZwOENucGtYUzFOdzNGb2FRM29adVpWdHo1ZXV4Y29Kei9TWmMvZHJLT0Q2Y1YzajZuY0doRkppTVJzMlQ1S3p2dE5RbzIwZTdkL2VuSm1IZ1FCNlkydmtIbEIxRFYvcWVZTFpJQzBJTDYvc0dLZG52bnZ1VFdIaVEyRUN6VkJaQkZ3VGU3UGs5VGhlZ3hZNFlNQ0w1SFFpei95T3hHTUU3TkR6S2xadlo3dW5rWDVnMVlwNTB5emQvVTJmWlF0T21vV0dFaklVSUhqRGlSaFo1bVpqYUQ3VGc5cDhYd2x4V3cyR3ZJT1N6YS95anFtWFpQUmFtbWIzZzZRWC9XeUpTV2FlWjVwQmlIZ04wTXdDeXlsMjVFY3hGZ1hsKzRHeUs3RGNrNVgwUW5yelhwYU9zb1JNb2JhNWNvQ2JneVdyaDE1RjZIcU5vSTJmNmxNYUM4OCtrZWw2cDdTd08zMTFwelRoaytrZ0xYQjBMbkliUUd5VUxIZG05dys0VmNvRXhWTlIvRm5QaFljdHQ2N0c5ck1oNnVORUV3ZVNNSlgxeFg4Wi9DK1JXdlZ6cHVDekc1SkJ1ZTlOaWs2Sjdyd3hLZVFPdTl6c2JDZVY2d2MwOTN2eWtOMHZHUzRmL0xSeGduMjhIYmJWMzRSenFyVGVHYnA5dzIwVmo0bnlaSkRIWkJpa21IZFhjalEvYW5OQXlCWkVLVUZ1VFpyZWZScTlZMXJpTXZDZkQ2OE01L0RKZlpoM1ZRRlFGbzdLSTArQlRSUnJKV0VuMm9jV2p4ZE5MMlFGdVZnK2NEdm9vWS9DdndTK0lBMEtxRDdsOHRldDRKcjZoOHFDODlncDNvdHRnaWhQUzJlVUtYWWhRU090dVREaEJNbjZVWWZMYXlZY1BPZ2FDL2sxSlRrMW5OeXhpWkRLNTBjeXI4V3AxTDVvU0ZCVllpVFFTM2ZiS3hwL1VvemNzWHBlWWxHWHRMVGdhcVcveHBZeDIyQWxnMnlGeVQzZFhjaitOMVZwVnRoM2Q5OUFxajkwaWpWS2dacWFXUE9vVmZyeUFnQjNWcGhvRUZESjVFejZoeG5veXdpMjhMZWhKeWVtY2JLVHcvTXdCN0xPUmwwMUhHN3ZKNG9YVXQyZExVejdab2wvWXhZbHl1UzlWMWt4bFpRL2lZbDdNNHJpTkRRSXc1NVRyV0IxZjZ0dGsxdGw1bkFTVjlsdHgrU2RkRVRPMVJYMndzL0ljaG94VldyYTdjRW1WNW9la3N3Z1IrOVdWNjM5VTNqZlJiMnlTWTJPNy9vTC9PbFk5N3hLbURHSVpNZWhLczNqbjFLV08vWjMyVHZXWmJPUjRHanRneGh4bUV3WENsTGloS3hKaEVSdzJVMFFVcmZyR2drcGhwbkdGWFU3czhCVUJnZXlhbHVyUlBhTEVxQjZIdHk2SWxYaGZ1ZXZmMzM1bVo4YnFTTVRLNzg2SkU3d05KS3o2aXhRWWgzQzczWEh6ME53ZE5xTFhoNGVuZE5UeUtCLzhnQ1VBL3JJbTZUVnhpUE9ySURtZXIvaGVEdFBrbUpxOFI3N0V1NGN4aCsxWkFoVmQrVG1NTVQ1WDFkTXpaQTFMOTBhWWtTRUNxWUZOR2ZrMlo1Zlp3Wk82VlJPUmRMUHNNOUtlNUxKRDhEaTBscFdpUkxuY2RsSzFUY1FkUklIVjFLYzhhZHBGZktLam5PZVMvRWIxWHdIdXJVU2RDRWg2bzl2UU9rS0hqSEFEN0NUbHRBVm05STZTczZlYVBsbjgvQ29KdjVNTGNtMUk2YTFPbm8wbHRoNFVDWVdGeXpWVEZBZGxTV1l2N1pRMVF1aFBmSlM1cE1EY1hkc05sWVRvVi95MVZKc2hmaThnNEpDWlNXbXFEZnYyKzZEQWlmWXhiZytvNEFTSUlvcGUyVGVqT2ZxaG5vNk1wbTZLZEUvQTVsbytRalNURjJkSExwaVhmbFNWRlJia0FpWDdOdUxRa1pEYnVtb3crTnA5aE82OEx6Z0RoRm91SlQ2elcrb0pRNXdsTlhqMCthYnpreE9VMHZibVZjTVd3VDk3eFlOSHdRSFFLM1F5SGJBdEh2ZzZYQzFPemlONkNaNStwQXZRNC84d3R0K0tPOW9xMjRPckpLY0xYSkpzRGRyVEczQ29HZ1FTaFNEY0NTWUh4eE9ETFFiRFJObEpsaUNwNnRKZVFGNUlvSHF3WWZubmoyUTYrNk1sUHRneDdTSWs5RmFCYUZodmkyTXplbnN1N2RsanhxUDhKbnZMRzVMSWJVclVDUHJYa0VhMTJXRS9VYXh1SHlqSDBMeHJCVkR5ZWN2UWVncmtjSnR2S01XWUhOZWl6NTZ4ZWdQZ3J3OGhJNFEyVjQ2SGt3eVV4d3pqNm41N0VGMUMvVEFzY3g1RjhhVnovaWl6eFZMYXYzU3hnS3U3dEdmTEF6b3FKbFNKQmRvZGZma1plTElYeWpEZXBZL2MzQ0dwNVFCRlN0NS9pVUhxbnl0ckJPS2hFYmdPci9kRFEzNUZRcDlKNnBuWXpGSWgrdDcyaFZHSElJeXRIazg4V2xDOEhnMmcveUZvdFFvcVpMMjB6U0JRQit6TkgvaWVDc3FJVHQ1amdTUTlNaVlJaGRHRXdjMjRHQzIyWDRVQkJ3VW5sbldNa0xUY3ZIUVRIVGZmT2wwRHRZSzN2QUFjSVFEYStYeG85MUxkMGtPVy96Rlppa054bFRFSVRVN1djL0tybHo5VHRMOExScHY5Y3IzOUhqTTBtLzh5MVF2TXAxVnVybkxnY3lsais5em11Wm13ZUNQdk55OFNlMDFFd0ZNdTc1bkFLNjIrZ2VScEVxZHAvTlRSTDQ3V2pQVHRoenNwZVJtT0R0U00zZDdiZ1RxTGpLUWM1WGsvNUdIdWRTUmlaM2VPL3habE10VXNrWDdpbmZEOEQrQ25ZVzJOU09FQTlsMVFVcjFUbWJXZGh1b0FXVEpvTjZkUFpNTU9xZ292ZDZFdG1pZ2VDV1lLY0c3bnFXbmtLWTZoZlRNYjZPTWFFakRyR1Z3T2FvZXJBV1NwZ0N0Z3JxUXpHYXpmaGhXd3JKYTdtTGNIZHUwYUZ0dDVLNjdHUVJqdEJxS0JveG1BeVNBZ3kxN2Z6ZFFqYzhXdFRRNkQyOHU1RWVOdzlDYXlJMTFxN3daaWI1eFdyZHF2SEpNcGV0d1NyRS8yWkh6YXJBQ2JPWTF2eUtjalJjb3RtZ0pNU0x0eTdWZzM4Q3VkOFJQV3loK01sdlAvQWl0b0YrOFR2S0wxZnM2K0pSVTJkQVhWaThUR1FtUWpaS1J4cFVBc2M1cEhNOEppWm16VkNNbkkxRUZMclZUK1ZCQ01idkF1RkRNckk2cUV1WStwSWVqVXFhN2tNQmMweHVWZzBwVnU5YnUxQ1Q0RWhVWVlWMk9MNGZ0M1BXejlpT0RadkNOQk11YjZHNzhVVDlJajRtZXhNVzR1dW5DNHZqZnprMVdyQ2d0NkpXL3RuajV4cE9BSWJMUThhVS84Mjd3ak5zSmZaMU5aRzFGUUpGdXpxTG02aDNUek1relZsNXFGVUhEMkFWSTlSNWxuV2hxcVVZWXlTRm5XNGN2c3NhUnFkWmNsK0hFMjEvUDJ0UkhqTFhtUjdndHhUSXpGcHRUMUkxVjF3Ky9DZ1NlM0xOSGpTNnFZTlVWbEx6M0RNRU42OUt6aW5GK3J3RVpzMGxLTUdOdThXRlZQb1FDMDNLUzNWS3dTN2pQdXpraU0vZGp2L01XRzl6QjBpWnlXNk1PdXF4SXliZ1dTNjdsazVyZUtjRnNLTk9jOGZudkgxQkU0bVR1Vk9uRWlMd1p6ZEpYK3JGYlFpRGpwUWN2SlN1aXRwQnNRTER2T1cvejdqdDQ4RC8xdHROc09NbTlEdmRiV203bHh0aHgycC9iMGd1UHkzOEJoVjhoZ3p0YXY3eFFmOGVPVHJJbWJaQ0ltQnB1bWxGallsRlkrTkYyK3lza1djdG5XT2h0TTBUcHAyMy9JNlpWZGxINmM2L1RLN3dhaGZxRW51dnZYRWdZaVlBK3FnVjJnT09rQ0dNTGJiYlpraDZSNEpyK1lXZ0JYWE9yTFAyRENsbmdPRUN4UHVjNXpCRTN3alBYQ3pGd2YrVzRrQlg5ckduQlFrd0VtOWtITEUrcnorcU9SdnR2RXF5RW1PZjF5RUFseU9nVUU5R2pSdFlXbUw0VU5QSUV0aFUva0kxMGk4WHRZM1NSSWFGQjVtWWR3ZTF6WDZQOUdrKzJ3T2R3NUpVZ1Arako0UlNSZmI3clhzYk1RbW5lZXdIKzZBWGZHQ3BMeVYwamF5dm9FdW5aOEkzTEdiZjlSUVZ2Slo0ZkN2eWwvL20vRDJ1RWxuWlgvUUVLV0VsTDlDWWU5dnhpeERuOHZaUkk1bUVMOUs3YkJ0UVdVWjg3a0N4QVpISmNveEFnbC9oWDhyeUF0ZFM2ejZ5VFdkcTFrZG5lUmlKNWpCdGxJalorcnV2TTFEN29OQ1NWTzFGWFVtVmNSQVlHUmEzSEY0Y1lTMThIMy9rMjFzN3VNRnByOVlsNktianpiZHo1cUJrcjZXRkJtTWVTN2c4WS93RU5IWUVqUFVvK2JYZlpXRHZzcVBZbEZXc1kxbEVncVREWkNpRExnSHFaOHhEV1FoTW5ib2RMZDhud3h3dU10VmNTVlp3V1REdEFWazY1ZkJLaWJoMWpvUHBWZkJnM1Z0cE9wZThjT0VqMlBhRHRFaEl2ZVdXREs0cWxmaWlTOEIrSXlHajJzdEdMVDVBSXlrQm5aVmYwZTJyVGpuM2FHVWdlV1ZFVUZMUnRiUjd3MitqYWtBUHUzblRSeGVWWlVxbTJwU0NiYVhtWEtHc1FOZm51OTZ0QytxNDcxMEdlQUhOQmF4cWFkTkIzRC9XMVlnUjRiQVp0WWJUWHFwVCtwRHViK3c2VzdPdStSeEZWSm83bjlJcjUrM1pIbDRuM1RSWGRid1Bkc091NGlnempyNExqcXBPTXd4MnVpYlgxTDRUWUxObkN0bEZUSU05Z2NHZEU5RERCQ2FjUXJBTXFWWXp4SHpFaSs2VnE3UnNMYS96SU1xcWkwa1ZQZkJsekJRZlNKR2wwOGd4UmxQeU80dW13empTd3lmNTVFR2QyenZZWm1wd2RKd2tMM2pEVUpwaWFMZCtiakJ5NG85WHRTTlh6WXpTWkJ0RzRsNXpvUWVLUFNhL2tBemVoSmdNN0tOOVNoSnhKQW1BRmhzZGNrUkdiYWVESWZpb2VoRUlFK3MrMFBoQmtyejFZV1JaYWtBYzdMMjZoTGNMTjkyaC82aXI1UDE0bG5FWHhGUDMxakVkektlaHNkK2pMbEI2N25RVlhNd21nM3M4TE05L2xsejBoRzJ2WjlDbFFHbFBFOWRMTjR3d0VmRS80Q3YxRUVBalhiQnRqUzRldklCQW8rQ1JmWEdubnNrWGtPQjdLR1pYZHV0WVd0eElla2pqeHFsQkd4aTFnMm8wZktNVFVrSmxJc015dUZ3cWJnSk84eVc1M2x4THF3alIzTElib3FZVG8rR0cxUFpGTDd2NDlNKzFhdzkyR2RhMG9nQmdtVGpwTENGcTBJODQzRXF1TzdRNzdUbVJsQWhrdktmUTNZaXhNcDd0UW1oVGZKenduODBsQ2pDalY2QkdrNFZBNkFleXhrWlF5aFhsbjd6eTdpTXFoRW9ZckRPOUhVQmZDRG1ZbUNUOUZzSEFMZE5SczhvQ0FCcy9HNzBoZk1WWEIyYXpHeFdkOXdwZzhLczdsY3Mxa2xCVHhFbzliVVZUMUhDek5aOG5WV1pIbGpzQVZXbEJlRThLdWo4T25rMVVKNkFzZ1o3bmlTUWdkMmtNMmJFK1BuaS94UTdKUUtKMDNnNm1jOGtadnUxbkpuSzVKRFdIRlc0QnNKb3dBTi95cys1K2ZQWi9pUnBVdmJNZEFqekYrL1p1U2REQlpsTFFVWEFKM1dENFJjYUozbG04enpVdjk4VENjRGdsU1NQd3AvZkVpRjZSbjRPL1FKVFEydVkzTWVBRWs3b1FRSzBDRnhXQ1dibDFRK2FRaUQzQzNoQysyenJyL3gxUnN4ejd6cHRWYm5aK3NzTHMxUEpya2ZRNXFmWVpEWWFkK3RrZlFTRDh5WVVyRDVSQ1JPNW9VUUZVRXlXWEV5Ny9PN0k1MU4xRUkwb2xrZ3YvTk5JMFZnUzVpeG9kd3J3SEVraUhZRmphS0Z3ejRTblFnTDJlVEdPeldMS2RqdDJxd2UwcWdCRExNWU5FQm56aXp0TUFhby9IUEZjdE9OMGdwQnEwa3JwRE1vVEM2d1QzT0t1amtXUWhEVDRuSDJRM3I0VzZhS1ZXNkR1cHI2N1ZkTWd5WVU0eXFWbklrN1NjamVxV2twVEhpa1ZMOFdTaXY2cG90bk1qMExiTDhGb09MQ0dldTBBdGVJSEJtckh3cjkxRnB3dTI1SW1vTXpBdmdYNDF0VFhwL3pFSDc2Rnp6NnF2TVZNTWFmVXBPdFVXZEpvTGRadnE3Rk1mYnpHZDQ3RTR6Zk15ZFNoRE41Uk5GVlF0ZWY3bndYSWRzWVpYdFVhWGdNSm1vaHd6aW5UWnpZZHh4WUtZK1dyVW9ISTFFRDdKUlJSbStEM3paU0l0UUZDWkxVWTVmVXYvUm5oVUhTb1hRa2t6YlVpTDU4UExSbnVrZmZpWXJhRE1vTU1NSFlLc2hiU1lNd0Q0bkZCVkpNbFFBOHI5czFSUTBDQWs1Rkw0YW5QV2ZBRittVkw0bFNMdzlwdC9ZODE2cEtOVENGOFlueU9heWZEVHRtVktpOGxrVFFKeVhZOHVoa2lHVHhXZ2YzdGhRbVAwWkt6ekxvTDJGa3paeC9iT1E4d2JpSHJaWHoyWVIrSkM3eHJiRDloS0NuRUt5SCtWTnBBUnFCQk4wYmZzWE5LNEFjQnJIaFMvTnlnM1czL1dIRXNZeVFZd3Zvd0F0ZHd1SFNkS1paOU9jRDRHS09icWFRNGhCNnFjUmdNTmk4REtST0VwZ1o0bmFSRVpuWWtTY1dLTitlRHBwWHJleXJPZDVKc1F6VzlOYVpqZWZjKzI1cHVsRGZMMUZDbW1CVC9NcUtLckl0NzRTcGNOT0Q2RTdvQUplYlkzRDZPU1ZCUVhVQ0oyZlJyV1k4N3NBQW1MYnhMd01SZ283djgwb3pUTVorOWdpMWFuVXJNRStZRzJFY3RaVE9PMU1lQmh5TFN3V0Vjc3NvejVhaFdRRjBtdTJvSFBXOTFSa0R3MVREVjNrS0N1R2lMaUdDV3BrZXhJVTRsNG40cjFkcW5DY3hlY1pVbE9ObW82eXlXdGloUDBTRmRibnFlRDcyc2ViRUh0M01CdFhQOTJqSngzVWk4ZmpybmV2TXBNNFBicmI1dGVLK1J3R0lxU0NrWFhaaUp1SkpBWlgvRFJwVlN0akpESytGaVYzUStMNGk0ZE0xR0VjWUxNeE00ZERORWpGeStFK0FXaEdPb0tiaXByaU1XQ2l4QWZWRHYzdkN6SmVYMXN0OEhwdjlkWWVCaGJXUmdSa0k5OGlvU1psakgzOXF6MUpEbXFRNzhCbHAzRHNPOFZwR0VHb2ZydWE2OGRwY2czV3ZpcjUwT1dlNFBXVGVHaFo1bjJlMGNZYU15YTgvTDJwQ1pma2ZkbEFKUVFUTlZIWkdha3pCMTB6QUxOY0RwUlFjdzZjaGhDNlMzaWx5ekQ2d2VIK01MbFJlMlhpMXBBTzYxWDZncEUxV2NjeUdzZjhlUC9RUmZlUlNBcVRXL3RrZHpXckQ3NXB0TmpBTDR3TEs0SkJ6cENTYXE2NnRzNVlpelhaVkZRZHVjUlIyNUxOc1g5bEsvcXJtcHNiSENBNmwydUE1bDFqUkp3SXZmbWU4WC9RbWcxOHAwYnAzQ3ptQ285cS9PMGVDak5JV2ljdXFQMy9LaFlYTStBRWJTcWI1UDdGL3VaVGhFOVZHR3k3REs3NS93c2oyMXRHMHFkS3ZwOHdPT3MxaUF1QjR5dGNlTXdHZUV5MlU0VWl4ZUJSZE4rWHJ1Nk9IeFpIdytQS2dIVGkzMkdLWExZekhjT0VYejdadFh5Y3RNcG5VWVd5RE5rcHpIWEM5enIrK3FpMUZqc2p4dHAxU1B5a2lqQlhta1dyUVhqVkowUmJFMjY1Wk1pMkpiQ2ZnVmtQa0RLendwZEFhNk81eUE5YU9oY1U2c2J6MDFRcU1zNVpkZmhuZkEwblRMUDJuV0tVU0tHQms3RGRrYnRVancvbUQ2c1FxMllBSTBESjR6L0Y0YXBwZHZ1RFJTNjU3REU4Vy9qdzB0T3ZaM0poYzJWUSs4b0E5L2V3aTRuc0FHNTNoZnZXZG5GSnVmbjIvU2M0bHZkWjVhR01CY3pzR1B6OGxIdDNJK0VMemlqK2hmOUd5WHVvQnJXQlVIYTAyQmx5VmsxcEMwSnJybFBya3JIa0wzeWxXbUtwVkx2NnpXMDlNaU1VaWJ5bHpmd3pYTGZaamh6dlBYdEZDeDhsUkc1eU85d0ZoZWl0cFhacnhGRTBGaE5rMmxMZEp0dStTN1JjWlpMTGlBQkxNWG84Zm92VWNNTDhjQjkwSG5CSDkrSnhrWGZIR2N6WVBZa3ZJNlB6VXU5SmlrT044dlRBWnlBNWM5YjYvZkhFT240WDhyZURnYWIyR0c1WGFCVVFlcnphci9teERUb09xVzdEZ0x2TE1xYXNnYnJaYktXY3I2SHh0NnJrY2Npb2I1V25ERWR0UkJaWklyT29xZ290L1k3UXdVZDV1ODAzSHplOWVSQ3IxNHY0V2twZHBpYXdqOFkvaVBuQXZaVVpZS1lFcXgySHcvWE9aQy9RL0M5MklBcysyMjlhTytuWVhsZEZIQmlCbG5pN0hWbjB1Nk5SVVVEOVlRSG5yMnlTV3huSnYwRWNDckNZWVByYnN4SWZZNU83S3B0bk50TTZIZWs5SFRROUpnaUpCODFXTGtnWEhCT1hJcTAxMmNkNTBmN2VTenRFajRnZ21tTlB1K0g5YmhqUk55MXphbUJLQU85UmJrQTdyanNFTkFrOVhpeWtCU1VLc0JmRUl0ZnpnSjBDcXVNb2JuM0ZtZjF1V2VQZW4xYk1Md0hydDB0RDMzcDMwcEkyTGp2R3Z5Q1RsMldzcGdBbFFyTExtS0lNYlFsQjFiZWhoZzJ2c0VDNkNpSE9kekxmazBwNEJjRmU0ZzBDUG4ySkZ6K3J3emZvM3RaWEZNclRjc05xaGx1ZUl0QU1kbkVLeEdDOERrTmJEZjl5NERtWVBYNnJqZENEaVdETFJrTlNtam93R2wzNFZEeVVJU1gxYkhVT3pTNlZpN1NxdktzaVJVQVBuKzN0c2dsTlJuRm94Qm8rQUNJbnNwR0xyd0hNdUpOVkJhMDR5WHlvdk4wV1cvZndsZXNFQmZwT1BsWXgva3JpMXN0S2d1QXNONTloQnJZaWtsZzJWNFREbE1GTXlWczJXUkRCNmUrZG9CS1M5V3FFeU5wbm1tUStWcmU3UmNjK0l1OFdoWUJTMTNDTEZGTEl1SnVDWHR3cHZub3pqa2ZtSkI1K0pwbncyRDVxV3drUUdOUitYSVdkaFA5V2R4RlVvK3hzM3hlcHM3OU9DVFhKdmFxdGtUdm43Si82N3hRNmROd0NXZURIaUp6eFBtSTJsNEVyYXRHRk95eDQ3Z2Y5ZU1xTUxiWXdnNE1xOEIrM282ZlV4T1grSGxHYkp6RXJObUNFdjg1Q0NFbmlaRHd3b3pCaUhwS2o2Q1VXLzBIemJnYmR1OXZYbFJUZVNqTWdwd3lYaXdZTXdiN2tzZnJBNkQ1ZVlWQlE0cWVNbElHbDhJOTROdk9ZNSs0MzBOR001UzY0VzhyT3RrT2NjRmFvSWhvenVJTkY3RHJZdWhqcWhrMXB0N1VuMDgvTXBFaE1Kc2tmdTcyOVlRRk1MMGxTOE1FSGpreHpJYlB3cW52c3Vid09qbVFRUmdMaDNRc3dtRWdBUzBaOWR6ajFrYnAzeExnbmx6TEZqZitiL0RNUGJyby9JNHl6NlJkZU1xakk4NlRqK1gvcEtlQml5ZTdHQzJjZzJVYVhPeEpJSGxnY2pZRTI2M1lJanZ4YjkxM1JVYXhaYUR2MEYydjd5aGdDMkRVcmd1bExNcGY5ZG1JZzBtdmFnd0NEc3k3aXBKZkVLa29HcWN2N3pUelVKQnMxZ2FwTng3akZURU5oanJjZzVnQkJId3NlRzAvTHlkb0JTdTAwTENlczlXZmtxbzdaN3owZFRuZ2Q3OFJoMUZmZGZXS2JaQ0Ixc1M1WE9XR0xZQXZWYTBIbGYwZFMvaFBPUmRNbFdaZjdtZnB2MzZuUVRCUmdDQ1RKT1N1UmQzQVNQTEdXWkVaZW5YMWhTMGRPa3YzTFZERnlnYXU3OXM1a3l5cE5lOFltRVRoQzVlSVRoVnJSckE4b0t5M3VWZlA1ZitxOGVUd1k5clRFcnlwUGZCb3I4MC91SWExeExxQ0RxdXNRMFNuTWlKdXI4dStOTWhMV3k1MXdRdUt5R3BIVUlrNzR6bW1FZ0V1YVh1WUphMkt4K1dxbzdVMG55T2pXdmdJdUJZRGVHYlRvRVAwSnBmN2ROUml2MFpXbkZ3dXhUTHB6UWVBK3FMbnNxcjhEazQrdU84anBGUmc2dWl5T2tiVitaUGtqN1I5b1lqMnI0U2dINUNDU3RWcFlFZEZiL1hBWWNkMHg0eEJJYTVLTVAzdzRQSW4yaW16b3FNQTBncnZBOC9kSE4xWWlQT3Y3ZVRSeHo3Z3BET25oM042NFJtNERoYjFNc24yZktqaEZiWjV2N3h6SlphVDl6RlV4WEpXVDFkVU4wOFRlUmJJWnI2Z1JPV2NvWURqUGU3TkJEZkhWWWtrZ0JlUXJpcUEzVkx4Y2R6d3pLTEtaL1U2Q1BiSCthRllrZzJoZ1QwRnk1cVlVSHJGMHphVlU3c1VMU29PSEk0bnJMVjlHTFRlZy9rTjFDMzhrUGtBaGRBaERCSUpqeVMrajJKVHNqZ05GakhoSHIrSkRFbExPMVNHdlQ4NWloWS9zeng3OFkzNVQ5dlgxQ2huVUlEcmhTUVFJZjdONU9WVDhWVHVaQW4wMklrYXZnWXJBSVlvS3YvYkVzc09rY1BMV2Y0WnpwUmJZT1dPVFZWank0dE9PVHJLb3Znb1hwVnB6SzdnRkhYWm1vTld2K2svOFNGRzB1UVg5djNwKzkzWHNKWTB2OG1yTFJPMWhDcWdjSmhuMGE4WGZNRXhNNGYvb2NrbDdlTThjaERGMXFjTTRISzVuMGxVT0JFa2t2Sk5OUnh0eFV4TVZPeTJ5K0hyd21ZR0VQVWxwazRlRERvOTZ6dVA0NEl0bmFYdkV4Q2lOYVlhNEdlOEZNSlFza0FmTy9ZTkMvMWxHRVVqNmJYa3hjd21uakxZUWppTDVhVlBwS2VkQ0pnMzJKYnpxaTB3OU0ya0RZaUdlQ1c3cXo2R0ZnYS9JYmNWOGxhU1NxbEpOMDE0cDVjNGJsYk05cDlFOWpEbk5Hakp2dWFVRGpBcVNhcUYzUFZQbnk4am00aUV3WE5zdDVVVkZKMDF3Tjl0QUViNFAvWE8xQXN6MHhTZnVwd0M5ZldjN0M2c0VTRk9CQW9ReHZZVlV5YTRTbkljMDIxb0xNMHprZEszM0lQenVkNHp0S1hlbEErcG0wajY2MVR4d01yYVVsREM1N0twZFdUUVNHVTc3eWpiNGFUaTYxNUJpcjBSVDJDSkZWaS9aUXRHVDVnVzNiSnM5d25uRDFDVDFySUdIZDE2YzBxS1MvOTQreG1wM3E3VTVpWUxCVnhJQzFqRWw4UWlxMXQwSEo3TkppbzlydUlEOGZsUHJOWlVvZDFDZHFPaEtXd2xhWUNPWXc0Wnp5ZGFlR0R6VmM1NkczOXV2cUtuNG5RdVlXQ3ZkOTBhSVJOdUFtVnpLTWtrZENnU3lJTy9UendMOXpmWVVYVlNiay9lRWhjaGZsOTJZYUVXS2JiWTc1VXg5ZFV5T1NBa1psZm9CREtMZUZVM3ZWV1F4UVBLdDFIVDhCNHNHOXNtOUo1WmFVMGF3TnN2OFcvZG9tRHR5Mzd0RmtqR3JKRklmRmZ5NDlkRVFaUmhHdDc1T0xYQmRCQmN0RmZCM09PR3lubjg4ZEpPZmk4aUZLaVNnNDRERm5EaVNMdXNNMThkRkNObk9nYnl4MUIrSUZRbmR5bndONWd4WDU0bFlxYmkzRDk0eG90bUxuWksvOFFyVGVoMlp4elE1VUZWL21lck5sME9GcmR1MnE3SGVETEpNWDh5ckdqWG9aeXRmS3dmeGxlM1U5U2JFTW5pa29YM3lIaElqMmsvd1BTenNRcGI5VlRkYXhYM1UwcnQ0U2Q4N3hGYjBUQUZFanI0ek9oWnpmUURQZHN1bmhoTzVJZnlLSDNoVzgvMHpDYkRwRzRRQ1NnT3RGMi8rR3RKd2RRT20vQVh4WGI4MGVhVXBxeHlaNzgxcEx6cnAwL1NwV2lJWWNSNktCU2ttcFNPTHFBcmhpdDNlanRxSWJ2YTQ3QVU2dlNqOXVldU04Rk4wQVM4UWxha1VtTk85K2xKdWNPa3p1M2NwSTc3MzNtbHNtTVdVbnVmNUNaWXN3cmhTQ0x5TWJPUnlKaFErVkhld2l3bDh0MDY1bzlDNldjWGZhWmZmdXVLTkRkYnY5K1RHVCtueFVqazRKYTRMeWZEYU94OXRQZU9lSzQ2Z01OMzBJY2M0TVJFWXdpRkRRelJVdDlJVzg3eHBwWkNwRncveGVKU3o5L1RsR0E2MUw3MWxNZW15UElKNHR6emFEWWx1RXZJWHlsMEpURC9MakMvZHJiemdvb25KRkkvOXpHSnIydktITGNtVUFCbXlPNmQvUitYL0NLWVh0cUl0TkpMV050dW1zWjVKdmJab0hFdDI1TGgrcXcwa082eUhkdXFaNUx6cWpNSWV6bVRCYUZoZEJkNXkyT2F0TE9GQ2xoSVJHMHFhNDNIYUFqMnFSK3l0RzRwanVBTDByNWZXTEVZV20zYUpTQ1JWTkZvQXJnb0NpWkVGRXpCS0VhV1dLZndDWHhSQjFsM3VsbEJIcVJrbFBzb3dxSUx5TlVMek5rTlNYd3FYNzhLa3Rsc1Z0STZFZEVyTFVHNDdhckkrZmk1bzcyRnlETkJvNVBEMkthditCWjgyYTlMdG1ybU5YbXFHMTA3VFBkRHAyQkVCbmUzdTVLbzlQdjNLcVBLYkVPT0NOU1VBN05kb1dXQ1ZwY0lHYitqdTVQaXNvT0w4YXJzYzBJSWRjMmtydmoyTlpQVGtHbTJDUmRVUWNQTTVhR0FvaE9nYlRXZ3ZPenZCU0ZFeHk2VGlXSU45ZlJVbnFKdzMwdElIWFFaa3lEVHh5M1ltSzc3U1dVMzdyODhQUE9oWVBNUjA0cXNSQmsrQUJ0WHB2QStuNGM5YU1oWEQvT1M3NDVUaUhwa1gyUmUyNGhPa2ZYTTBrMHVjLzhJdXR0RGVHNm1SVGY4QlBIcmRhenRTT3FSL1pudk02QWxFZDBjaUtUY3dHSWx5d2tmd0ZUSG5ITFB4ZUVndkZ5QmFHelRBMHRCU0Iva3RsNE5kb0lnQWlDRjhaV1Y1T0FkalRCM1E1ZXJQaDNjTlVld3lhcFAycU9LOGdOTmQrZzRlRWt1WW9IaCtNaE5zdkVEQ3duZFFuTWZpenowMi9mVDQyaldQaThydnZFeGNkMmRBbkphNUQxL2lneHZQOGR6TDUrdGNxSytTS2U0VE9EK3ZTUWdBZFhQcDhMYWJrd29BendVc0s3SDVMWGd3Q1Q4S3FCZVQxcUpxc21yS21ERURnN1REYXBNZ1hVNTBCVEFtZlBnSlNaSjAxKzRtZlo0c1ZGVDFXVnJqeXcvZ0VGZFNLMnovRjhJc05DcHAxN3d0WlllVEtQdlZZUm1KS0lNbDI5T0lBcHNqZGNwWW95eGYrbmdDMDRibFBhTUlnU3ZmRVNBMjJUcHJoY3VmNWdnMy9PRXMvdEhzUWNBQzBuMWdqVzR2L0xsbUJ3VmM3K3Q2bXNsVVFHcncrS0xtRHcyVy9lQjUxUXZyU3pwVUdkK0o3Wm1ES00yaVROc1hRVE15TUNWRWh0VGJLZmZLb3Y1UGxBYmRVQXdxdGZIR3U1R3ZiblNuYmlNMGx6azdTSjhZWTFQMzRKL3NsbWVJdkM0MVhlSjVZMko2YTY1V2NCdFV3RzZibmJaZktSdlF3SnpVYkdFQ1liZHN0VFNPYmRKaE5FaExDZEFKbi8yVjJ4ZkxxMTBMRHJGR2hMQi9PVk0wQ2UzMm44VnRoVS90dVArWkNhYWh4UEtLNVJiZHltVE4vOWQzVDgrS1NSdy9qRS9BWXl6UjZpUTE5dm1OZXB5ZWJKQWtjU3N3WFhjWFhkc1Q0RHhtTHQrZ1Q1UWpOd3ZvekpPa1Q1eTBFbC9VVkpITkFzTnpVYnFoRDJNck9FZ0tlY2RjMktPMnJ0amdDa2ZzQnl2NVlVS25PZFZmdVk5MmhWR1AvTUhrcklxRXc0UGdoT2NvYkhzZ2I3OHFhejhSN2M5eUdrakxVVWR1SHUvYXAxM0ZrY3NKOHlkQ1FEZUw5U0YxY1FCVjMxUDBUZHlaNXdNWHd2R0x3TEdRNVlndGNLQWlmZkVFOEtJRW5QeWNhdFJLcldnOVEySEY1RlBOeE1wbDZBNGxvbXR4SmFaUGpyV0hVdTVmMTljcVBIQWxNbjdiK24wSllTd1gzUzc5V3lwQ2pybUQ4Y0FYWm9SR3dHSWFEK1hrV3hXV0NyQ3U3dDkvRHpMMWRLRHpZZlMvZTlsdGdyRkk1eDNhcnphTHVoVlAvWGs1SWJ6S3ZDN1dHU1hPYndiUEJ6VW0rWEQzUll4TzhQQXZBZUxyQkRHd0FRS3VIZnF3ZFowZVlYSkNUZG85Nzl5SHVVM3pVNFhhZExNUE1IMEcvS0czaU1mR3ZUQ1FENmxJVGovdFcvQWMvcFRKRFpBOEk1TEdCYlIvNWRFMnVPMVl5a0E5QmRVQTIzZjFvQ1FoQ0tIYWlERlVLdG55R0p1T1V2dTdaR3NYVDNoQVM0M2ZFcTJqU1hhaVpjNTl2SFlDSmRrMDdaUnZLRlFFTjYwR2JXQnhabjNpYWRaQWRwaUxRWHUrRmJtQlRBdENlVUJYTzI1bGQyWlB0NjVma1c5anZBYURhRklTMS9NR0NGSFBHT0Z2eGt1c3hpNWhGalpWUW1jd3dnTkJrdnh1UUl0am9vV1dJT1Q2MnlLUFRJLzhGNERwTDlNL0sxTy9RTVAwaFhHSCtjRmc5RmoydHNXUkRSVGNDZVE1MGdrc1FlU0d5R3prZ1BFTGVpMWtJQVBLUVlkUHM2KzJvaHcxaVJUNmNOZ0dRaWZjWDJKbVV4SW5iaWRzQnZEQXJoa2tlSVJ2dTl3ZjNSODJ0bzBWQ2ZvNUxnS040UmtqaUtOQ01lTkozd1BEWEwyR0UyRDMvTnZsbTVoRkdQTzFRSm5iUWtpcmdMMy85QzJuT0lsTlUwWTI1RVJaNlFqZDh4bTVTK3g1N1lwSDdJeG9tR1hBVnN6UDZKRW5EUkRRRmxOS0Vqei9lVnBJQ0pDcC9PQUJqeVRPeVpaU2FaZlpoSngvQmJUbEdyakNBTzJjOStPeEwyb0NRamhlWW92bnp1eCtIUXBrWWxnUFJselRzRHg5eVhhSXFpekwxNi9UUjNQNlNNRjdyQXpkQ0NXTXRRTWNqSXM0ME9nbTNveVpIOG9NUHU2NEw1VmdMU3UrQ1BMZ2t5UUFqSGVjaEhsUTNCcmwwUkx2MHdjSjZ2SFlCQkxBWExHMFczT3NDNy9ZcVB1b0kySElGZkhrUlNtMmM3bDVQRGRROGRNYUV4ZmMwSzA1N0F4eGdEM05MZUxmM290OUZCeFlnYWdjQ1BwWTluU2tQQnNDNXJxMWJaVHc1dk4vV0wxZDR3RWJlZ1dHTTAwbTQzQnlUZUNJVlZnRmNtVVpNZ3ltNzlsdXp0dFQ3VkxFVzFiTjZJNjRmRU1IdjRXcG9qQ2t2TmRmckV0ZGE2bkxjbzVOWk5WK21GRjlDYnhwTDJpUXpGNWxuVWVmUWNRT2ZXc3gzSkRkMFZhM3VRTHFkUmVKeCt2V1Z6SHJab0o4MGtsVzczb0FHZG9Cdld2MSt4ZGw0WEU0RWNCYWMwZUZ0QUw4c0l1R1A2eGhWWTJkVExyZzFJR3BUY0hNb0I5TG1NTkh0VGY5UEpWMnhIeUpUUDl5TzV1eVl3bjdSSDFxdFVxczlGSXVGOTBEZDZYaTkrenEwNUhVcC9qNVlZalllRWkwaTJramFOS0FkSlExeVpReEpKaC90WnAxdEd0NnZaQTVIRVQ4d3ZhVFpiSU8zN0NYNW8vYW5hdkpkaDVBSkQ3TFloLzVqUUZLbG9XQ3JEMnUzYis0ZDdkd2ZaU0ppZFY4WDdOTmIrcm5hQlpMTnJtN29xUUVPSGFLdlFheENaTDlnRUloUE9OVmZEenAvWnIwMVZzQnFiN1BDblRvTzlGeWI2aEdPRFhIeVpNTnJONkpaUURxMVdqK2dlQXhEejJDekhVV203dzkwUnB3b2JsWUVPMkdWbGRIR29rS040S1loeTZWMTE0UFRPdFRkbEJFWFVkVllTZnkzbEVKSWVzVk52NHg1cFY3RG9BOXAyNlc3MzVqcktMNzNxbjA5dTYvNDllaVFMc1M1dXcxMlBhZSs1SE1rdjJRRGpRY1l5NzNpeGFwakQ5ZGVJTlk4TXpFOE5iTlFKaU5PcnBkQTdaaWc0UldaY2t5T0NjQk5rNjlwWWpacUpwSFI0b2E0OU1wRExHUGtqZ1JlSm9YOWV0UXBqTzBuU2ZwNGpFbmxqVnlSMTlrdFRMWEV5WXpubERwTjBScGJXMlJ2SUhCR3JVUHpZTU9maHVqeklualkwT0hwSGpUQmF5YmJOeUFiWHJBeWxVcU9Cd3pCaG9KTFlOWXBtalBrdkt4OVRqY0l5QVo0alBHQkJSNnJBNGxCN09oTlE1dkJpZ0xCbVRWdmxXVmt3YVRmNHJKeXlDd0pRUVAzazZYeU9qZnVCZjE4clk4U0ZMMmxHMEg3LzFCb2R0dGNIbHZTYmRqU0pBd2tTWXFTQVUzMU1tQk92Q0NpQS9TMWt0NFptMXlWanZOOFJQOWdKK0pLcnY5NEtpMDh3RXNpV1kxOVNXN1cvQ3QvUTJCbFNOaFZvV0pJU0xuVHZmMmpGN2p0MVNhVlZuaXNRRldjazRIa0M4U2tDanRxSlpvZ3VnNXVkbm92bHJ2cW4xRFhrN0gra2tSc2lycXN2KytmYXlia3hiQUVONFVQZnYySWpMRXRwOXFxZDZnbTRlSnR0RGRrdmJEMzkwUmE2cFFlNXNVZnd0anF1SmxaanpxaDhjRHkvQmRhTEtNa1YwcEFyWDltK3U0MFIvOEJjcHJxVUQ0Y2NaZ2ZOc2hLUUY2UTFwbWw4UjRUS01xWEk4WTBENGpKcTZERmgwQ3dxVjNpWU54VmpFUDJuLzIyRnJSQlNNRVYvMlpMY3BVdkUwMFBaTWtHNUEzNDNsU0JkMzFwT0I4enJxdzRBZjQ2bGpBRzZXUzRYelNCN1pKWXIwZXZ2bVNKbFMyK3ZmcmI0bWdFN1lFazFobEdKYXZLcVQ1WnFNdDhFODNubzhWTU94cm95ODF2azl0Z2g2VS9KVkhlZjhnMExHWXQyYXpCbGxXZ00vNWJjQitrRUhNT0tlQ3I2OWd1aW9qS2hKbEo0N28xQmVlWHgvTWUrY2trdDdxRXR6aVlZcGxZSXJYbGVxL0lnOTY4ZEpnTk5Jb1g3aU1aM2tYaDNhVzVTbUlXZ29QTDhENmx6U3g0ejFLMG95b3dQOGlWUmtPZkNpck13UXFvV2ZvWjNJd3hIYzlaNTBxa0pHT05ySjduQWx3cnRTZWF2dGh2cEV5NGdDS2ZIeXZyNGlQOS9PYmtheGptWDkrdGowekZNTDdzWWZNRWpjQno0bmRhcEptSm1xV1prMXg3M0c1MVpiWlZtOWVDMVQvYjVlbEt2RFZrN2NYY1ZrVjlBWmZHSFZBV3BsNnBub3NtcTIwbmNCTWk5Mk01SCtxZ3g4dEVNcDhWVDZ3aDJmMWFDbXA5NzlYVE1Tdkt5aFB4bytzNGdVaHMxKzJwTnhEL1JoWG04emNJdjNaZTQwSkZjSDB0M2NHRWJUSTRGc3ZJRU82dCtQOFFmeW9TUHNjU2lHRkNVMjEvelM4b3UyYkZSOWlidXRuV094M3VoNS92N3FzSGZ5TkxsODk3d2kzRW1Nc2pHZjhBbm42L0s4U3VJaENFT3FQZ1ByY09xc3p1RFJmZjdjc3VLWVJzNDVsT2dVeWVOeWVnR0licHNRT2VUNDk1bjVzUEFhQ2RLQURuK0tsRDZRWXJLNVRKQjB2NEFhM3o3WDJkRlpVNjNab3VTUGhvN0h1dVk2UlZ6QktPQy9mSFpUUERTeW43a1FzT2IwMUNrWGUrUlM1ZzhYQ3NqbS82aGtEaDdCRnFCczRkRys0alpNN0EzWFVLbk5VL25KMHlRV1BSdnZVNkhuT0dNYkRJT3ZaOEg5S1R4THJkRitaaXhra1BySHJSaTAwMVBnQzFJbzNLWW1lL21hcUN1TEs1aytWMWR6TXhaWU9UN3dIbDdzVVRwTzFhdW9mNkhqMlllNGVDQVMyQ0xDR0VHVkRFdnVtU3hQNnlIYTJpdkFyYStMeVpPLzg1cVJ4cUhNNm05Zld1T3V1bEgxUVM0QUwvQ2V0bnFENWFNYlhJWlgwZXEvQkx2R2d5NVFTd0hOa0JTT3NqRXVkZXhXTTB2MW5GbG1hRlBHaFNpRWZTUUtjVmpGUTIwOW12NVRqREVGNkJFWlJsSjlNVktTdWxMVFBOTllseEN6NVcyR1AyNFRHZDNRa1V2N2M0VGZYR3UxWWFLSlVWMUhpa01vb0gxNnFwVXN5aUlwK0JxWndhbW9kakwxSGJGNjk2QmJqUDJUNndlYlNEUzZJWmVsR09KY096ZmJwZ2NQblNkYUZJa0xHVnBvRjFaeWtRcGRQdnFIUnVmTm9QQjZzYi9OVGRaUGswUXJhdDZ0aWg2bjc4UXhWZUYybXRFYUdsK1lBdkFOZ0ZiNjVsRStjSHJYMUgxbEdXWHp1SnRjT1hiN21EMHk5OGp3OWJiOEVzQ05PcExvWGVKNFBoaWJ1bkVVUmZVVjN5WWNKN0tqMGZlRjMvS2pISVJKa2JvdXFRK2FEM1YxR3dTenpZWTNFTE1VQ0haTENVREU4R2hoaWx1Uy8zd2g2VEg4M08rTVRYUGZJSG85M2lBUkQxRVMwNGJUOExYQmdRN1V1VzNjckJxb2twc2haSzdNMXRoTjVkeHFNeUl1bURvQ2Q5V1YrbS8xTy9HQ2RuWHhOYURyVGhIeG90VURSaVo4dlpndk5pVjBLbVQ4TEY3LzFJM2VSWXoyVFd6SzJQekxOcUVXZitnTmp6aDd5UlpMR1VKcTNEVldHbFBqcm80cGZ5d3BJL2pFZ3F6UGxDMHFuaUxjRHlkSWJmQ3d1NUVsTUpnb0hDWnAwZkI3OE9xdUdXNnNmRkgzZmNEV082WlJyamYrMGF0bkNXcG1SN3VOYkIzQnZMSldxMExFNGdzdTdROXNzQjZRWkl5VUxDWDZnbEdFZVpXNVJtNzhma3pMSlRCeENBVTBhV1IzaDhNcVJXRUtLR2Q4SCszSGJ0L0V6VUFvM1RRdHdDSWw0ZE0zNDUvVGxCWDFzN0pScC9RSUNDRG5UdHAyNGxUbzdmQS9vREc3dkxETjlsK2ZjdkFhSGllcGtUT20yeUdyZTBxcUdlYzhaMjlqeDgyTzIyWDhrSXA4a3l1c29zSk9RUEx1cEd0aU11aTdTZnpXSndxYThBMFNLZllQbWl0VUdoWFA1VFRjYVVDRXp2eXB6VWVNY1pUUFdJZnd6RGd6NExIQ0Z6T00weFNZQnZwVkNvVHRPRXIrYy8vSDhRT1BEMW1CL1d6TkczbkVlQTNZN1J4UHc4c3JsTGMzL1B0UmUxTXNvSk1XZmpkbnFndTd3RkFOZXB5YkFneEpzUVkzVHNmQnRZNmdvRTlmMmNMQnI4T1dOTFpJU0hGMVM1TGRJeFpMUFlKaHprN2QwazljTW0xdWxURm5icmpyMmtpa2VQVDVSRlV6VHpGRlpVcmh4eVNQaklWMkhqbVZkZVRtdDgvMVQ5ZTZ6Mm5tSFd6Zng5RC85MzNkSDNUd2J0bHk1K2oxQ1RnblIyTldQMHZJVjdCYzFVN0J1Z0x1a1diVzg4TEFQSzFhUzBLL0R5WSsreHlLZFIzUlV1Qml4MXNsTzFmUlNBdGxua00rM0tHMFNqR3lDV21rVkxCcDEwWnR5OUhMQ1o3aFcvdXU5QkM0KzV1RUE3RVFaeE5zbDQ5WWE1U2xjWVQwcHBDZUN5enZzTTlLKzFITmE4bFdVSERDSG1xM0FtbXFvN1gwZElWbGkzUTg5Qi9uSnVVKytWb3U4dnZ4bTI0bS9jM1k5UHNPWW1OL0Qyc2xpd2hLanhLcS8xUjRGK2V1cmovM1ovTFlESHdFZ09ucTZIRGllSlNnVy95bWNHYU50dlB6MmtTU1VHQ1IwclRGZVdhRkFYQXhtSHNLcFdxbmVKVllyckpGRjc5N2lWendVeHVhQTVVejBiYUxURk9qYUlhNEZMNHJlbHl1VWMxb21EVW1oc1lkemdHbVQwUnlLNE5KWHQxRTVtZ09laWJUd2RiQ0lsRE5DSW5uRzJQWk5ZSUU0bktFd3l0aWVabHhZYnBBbVpyaHhUZ2ZTallnU3NoWE1BSmVFdnltMm1wTjNlTzlyL0xsOVpRRTJPS1lmeHM3c0UxK213aDFPaFJaeEF5VnhOZHV3NEIwZW1KT0dLV0RBVnlTdUZBcGUvZERlWlVKNjE4bHBISDBqam1vazJHTXRiN09wNlU5MnFDUll2Y0pkUUttdENDK2VkeUwvYzQ5QzVaWU92dWIyclYySGlxL0xNNlBtV2dkdUxHbVJJTmZWVHo4dVExcFJLNHptVkc2cmI1V0t4ZlM0bnAwSHJ5Qmg3V092YlF3d0lGcGs0Ty9HdjlDejhwb1dRRmZLVE04STVKWkdFdnJGdkdIOTA0RGJUcVI2UVJ5dGZNV2hwdk5abjlGVnNqNTQvSUdBYVdCVExkMDdjTExSNVpqam5LaFZEd0tTMnZMcXV1Q24vU21rdm1QNnJ2TGV4TytCSE5EV0NaNElsdXhuVjErc0lPN1VDcG0rcVNpakN4Y2RDYTFYRUZFR0pKbzI1QzhMTk5zU3R3OGg1RFo5bXY3aWNGT3ZvZGVMR0dPR095RGJNUDF5cFE4TWtqVXZGUktZV0NhandSeFZsaG13dHpLeDdxam1PdDBTMVJqaFJzUWp2R2pZa3dlQTIxS0Y3c3NtMUZnYktKeHJKV2lVczlqM20ySHcyd0d4OUMyVGNDbE8vUnZRTm9iTDVudSt0bFRvaUluaXh5WGdWMlMydDFtamRSSjhVNjVxMWNBbUFkblJZZVhkVHZJcXhESnhzMGczRTlXeGpMNmlkSytsMmQ4YzJodlpUSkxLTFpOYzVyNWZnUGZlbUxhUER5bkFGMTlHMnRPWFlOdWJPeFN6R0l2b0hQTHM3elFlamh1ZngvSDRKMVA0RVlLNE9HOHhQRkVrdkcvbEM0UHRBV1U2S2hRSlROaWI1ZTNHTktZTWY2d2orNGNITjJuQjRiYThENnlpamp3T1NTRWlGYlh6YmFGZzRxbDljYkdUMmFGOXN5Yjhaa1hpRkxYTzRqMjN4YVhnT0JyeFBxSDlsVGpldVpnNEppNGc0Vm1rTGZsdHgzK1Q1SCs1SlJXMmRSU1FuQm91M2ZibUFzU1JWN0lubUliTXN2SVlLczFTZUllOUNRZWVwdit2a0FTWUZvV2s5N29NRWxESzRLbUVteHpCRzBJanJFS2VzWVB6czROWHBqQnh0M08ra0F5Tlgvd2tzSlZSMlhTdHlYUTRDM0VQWnV0Z2FjL0NML1RNQWhhWDVnQXhTVmNYcm1mZXZvSFNLTVRKdE9mSHgrcHRXdmlKWjhXYUFjMFNTa29QdFRTMjlzTFJ0Z1U4RVYrcW5EWlFibk5iTmFrTjVRaG1nS0h1SitEbkwzK3RZbHhiTVo1OEpGVVZyVVVtRDFMc0lPV2lHOGwrVDM4L0xHb1ZsZXBCSUVTckpldjd0c1V2TWFTSWJnRWZPVlh3TEI5WjRQQXQyMzZwMDBaV0w4d2JScklJU3MraUFiSnF0a0NzMi95aWIxUnNTZy9sY1BTUnphdjlXMXJLeUgwbzVrdFdyYUtiaUxiU1NUZmc3TTRDb0xDRGszejBXc1U2MkhUd2NHOFdqTXk5RWUrZEJiR1FkRXJ1WTlCZkN1Tm9kM3JWUm93bXZubDlhazQxTlMvVGhLRk44UEpSSzNWTUlrK05HZlBLazRnaDBvc0xNb3pPVlhNeEM1R0NLdXRBWHBobms4SnVpWjdDUDBBSHpDTjBtUlNMeVdLMkQvcXBWb01sUU1qSFZOWHR2NTRjZEpKQzA4Si9JemRwcUVob2ZXaE56U3hIQWdLOWpyYm5Bby85d3g4QUhzRmMwWk1YL1lET3RCamRDV0VmYWc5ZWZyVDZtd2xFckw4TjhuVmNuclJMWjB3SlVvbEtzWmhIR1ZlZ1VBa29DUTNvQ2RuMCtYSGRSK1FvSURNL1hmdGIyRDJsTm9nTFJkb0lHUUkyMk5CcVhxR2o0bm1heGU2Q2lrWmlwVWlCODNNMFhJaFFhVm9PeFhoRTdwS3Y1b0VtQTJYY3g5NFlKYnFMSG1Wc3BjRjRQQW54cEJsZTBKV3N4OVViUUp3NFRWb0pwdWtkL1RwdlM4MnVHWEFOWUJKc3BRL2FPMjNCc24yaktFMmU0N3kyT0I5ZG9QeVlWWndnaVZTdmZKMm42Zmw0RlpveGpzQTRlb1pyRGdQb2FQSUdwb0lJWnBtcnFkS3BONUVKZFhWeUYvTjhkZitKTkJrdGdNSUthRXdnN0xhRlJkMHdJbGV6VE9lRTUyclFRQ01jTlh0NTZtNUxYeDVJUWZqa0MrMVFuNmdmOUVqbW9MUEtCQWdsQkFLKzNwbmxTMnRQbnBJOGpSL2hxNm8rM01vcjhDaXlaWGJ0c05kaGVpZkR4L3JuS0dpb0JZRmdZbXFnRWNIRmZyTXR4elN3Z2VFRFozd0VuMHFEMnF4R0RXK3BLbEZnV3IrMVpoT2s5c1VxTDBHWGVMeXI1anpjL2ZEVlZmVnVGUkYzS2pycjdLUGJGMTRYNU4zWU5XZHRVWXE5eE9CcFhhemlSNnZrZGZoSFZ5SWdPaXg5QWpnTW1GN2V3RkJHZmhjMzhsVDBrZGpVcUsyQm5qdERqZUNheXl0bFdTVXFFTWVZTUl3Mk5xM0FKbENEVUZDNmdVSktsN045MGpqQ2FiQnp4dGdxMzZnT0hUemVmek10eHpHckRXV05sS2Jvc1R5UHcxK2pmUFQxTndPUSs0bjA1K3lmdUU2OU8vRWJmNXkvVEFBbFNPSGZmYXpUeTZteFJ5K2RJZHRxc1ZJa3ZWV1poYkRzSnlpbjEwZzN0bWlKaDRqMUlaaElUWlNRQk0zQmF0YmJuMGR5SDA1YlpOdnJxQVAxNEFpTndSZ3VjbzZKbmpqY1l3OWxZc1NaS3dEcVVzOWxPRFlvNC9TZ2FzYUNEVmVqYm1aK3UxNGVEZ05pb1BwaXg2Qkt4NC91eG5yOVJkdnBNQTdZUDdpOHZxVzhNaDFEdXJtN1hMdjJtNnRTY2hONXZZOHdsNDVNUms1NnE2Qk1hdjQ1d05EWlMvMi9rRFVpWVkya0Q4b2g3eVpVU2tobTY0ODZoYWJXUXVPWC9ZNVVxaXRQckt4RDJDMm53WnlCY2ZsS25aNkxOL210RUprUjRpSHppQ1JtekJieTFva2ZmNDdOZk9yR21pbG9xQzVzRmRlQnRMaGJqOHBIT1k1MUtrTlFvY0JjcElHR2NERVFMOUtxbERrOHlPVkVIUUdWb2E4K2xYMTJQTjk0R0gyRnRBMVBFZFB3SFVGZ3U4a1U3S2lCcEtCdUFlYUJPN2lWSHFBckEweXEwaDZ6MU5MK24vdmVzVW85U3V2TmorcmoyaVJ3TFdUV2NBaE1YZFBSU0htUnA1Zmk1VXlnelpvMkFCTjdYQ3JGWVJieXllK2FpbWJXcmJ3YSszeENiUEZMNmZFS1dGbHV4VTlzOUE0eS9ZcVBnL1JuMFlKQU9PQXlkSDhoRDI0aWxkLzR2c28wVzFINng3U0l4YUNBUUZVRVVmSWdTRGpvK0lVdkNVcWRvSlU5eFhJdG9TS0pxanJ1WWJ6L0hRc1BjdVRpVk9uNjFsNWhDbjBxTUVuSjhVSG5JSFNyT0txY1d2Nzh1S2t3TjN4S25qL3ovUUlJMmRVdlMxY3NKQjVXMnlsRnh3cTRoa0Q2eVAraGJVckJrSTlXekdBVUFEMVdKWkZtbWZwK0RIUU5QZU56VEdmWC9IYnBrTHVZRG1QS2FsTUZ2eFFMeUZTK29oalh5ZmFkbklzbm5ZNS95NzJkQUZHa0hvYnFjU0ZxcDJGRDZibVFOSEN2dUNrZXJLSUY3VFJnUi9pb0VJUTczRDB0azJpOXB4M0djMEVCb0dxamRPbXN4cFpSNXdMSnZvU1RSTzUzUnB6NEdaVGREbGRoSTFlZWpRTStlQzlYQnBkS1JHZ2tCMElja1VDcDhVYTFqK1ZGV0VEMW1IUkdnUjIrcVRmWnF4b3g1bm5ncE1mMVJMSTBIWFpRRXJkZEhPRFk1bS9RQ3VCT0ttU3Yza05CZWRRYURXMWRMVFZVVnNweHV0NXJhdzRXaXh6WS9VMFZwVUY1Q0UzblVVbmI1d1VqRUNqNTdQajIzY21GdUVBaHZYQXhHQjVRc0ZhWEhzQStROTFSNlpzRUZVVlJpdWh5YlVjNWlJcHp5UHVCZ0U3WExtUGdkbzBYc3BTQ2FJLzlJV1VnUzMvbml2MjZDYlJ5UWw2RExQOTM1QjZrblh5dFI0bk92cTVjTnM1bFdJMXJib29SVC9TWTZKK3ZWeUlDRS9QWUlmdVZqamFrSnk4ZFZXUHhXUEtRZGJTS1pxTmtjMUhqcE1DL2xYMXNWNlZWMDE1SGk0S1hLMWJ4Z2VaQ3daSkpFLzM2cFo0WVgvRWxwVTNjU1E0a1QxTGlDSjNvRUpJY1VyaXl2YUJpdE52a1hpUTdLNWxpeDdnL0dITCtTNzRIOEhwbVZVeWJVcElPbit2amdIWG9Eemhtckw4Z0JLZ3Z4c05pVjE3aUtpdzZTUSt4aWRpZlRaMDJYK2toaVZhMGd1RVVYa0pFTDU0QW1FYVhXcTI4amFIeC9taWVzNXR0UFB3YllDeHRRdjNpOTY3cjNiT2dUOUFEUDUxTTlMc2NMQS9NZGd0SW40TzZtODl5Ri9pSGJvLzFKMlBHZDdiRVVZZ0hhSk9EcEpLYjlYWEE4bXJKeFRhZ0tIR1hzU0FxMlloYlV2QmpGdmcvcGhHR1JuRVllTlA4V2RCdzU2MDRvaXVnYk5tVGllYWhVYkV6NUVUcHFLUk1QVW5iTmYwOVA4b2h6dFBSRnkzZllpUHBob0IvYmdsRk5oZmNwV09ocUl3Nm1BcjRyVU1IL0FyRFRIL3FleHpqQVJ4dDdveHY4ak42bHM4NEdha1lVMjhnSVBjWjZaRVNFWFQwQUNWckVSb1YwT00vbU1SU3NnRGpwL1BTb2ptM1U0bXE5d0pJVWlPYnRhcUZGaUJHbm1GQXJnRVhvajVnUmZaVG91M0dJMUlpU1B1SldYeHhnVnBXMkw1ODZwejl5aC85UnhlTWJKVkc4cW1CMWlkSXFYRnVKdHhMMHBwcVNDKzYxVXZKNjRpeHFLN29BYm1DTndubWZVVUxFNDV6Z2VvbWQ5RU5jVTZRUTBDRU1OQldMQ1U5cW16NmpsRCtydzQwRVVZczVqUENoMW9icllZdTVCTW1ydktYclU4VjgrcDkrdEo2VGtuTjdFcVRhMjdrckY5VS9jTjNPSzFYTmY1eUxQblF1OUFZQlJITUplWnRhV0xzajdCYzdTR0xDcnJ2L2Q1ZEluUkZpWXE4RnB3MHh5dG9mU1M3SW1KTVBFOFh6MWVHY2pONVBtU2EwUlcvOTZNWnluUjh2WG5rN0dubTJlSWVYYWlEWS9NOEFiZWlZUnZxY1FyN3dYQStIbDNtMXBhbjFla3JmNFJ4WE5oUU15OUZrWVVpY3FSRUl0eW53bkU1ak8xMXBxMll6TkZFalNpOVlycCttRFREejA1ZnBLZXg1dEMrV3g1L21xdzFqcWs5TFhsMS9maEpyQjJhSmtIc09iRGptcEQ3d3ZLd2ZieWxkRWtvRlpUQUdQRVl2Y3pjb0l1aTZuU3NNVW5scDRwSWpPYXViaCsyMm9GQk43RkxNb2N2OEtBZjZlVUxGelBKc0xVMHpCUEVTemJDNmY4U1Q2cFMzSmo0SExsTHo5OEJnTVhUelRjejBKSjJOZmI5UXVna2pLRUR0ODF0RnZqRVhRQnR6VWt4bmZUeVE0c0o4Y3RqQzhTcnZDNDNURDl5Tms4U3hOSlJDeHpUNDdBTkxJZWkrVFFVVFJybXZocjdWR3g5bXJvMWVCUnBDbXd5cWNOTG93Z2NBVStFMUdpTklpNE1YcENkSlJGQnV5cFhXRlh1OEZTYUZSLzVtYURUTlJwSWZVcjlQcjFhTzhOZFlud3VLOU9sZVBYRTNkcW8yWVdKWmtBZkcrM21aMFRYaUhUMzBXcGpWc1hGWWJhSm0rZ2V5ZnNhVWNsOWdLVVRlRGhnby9mVDNObXUyK0VsVEVrelUyaGhvU2RnN0EyaUM1UWN6ZkROM1NCK1Uza002Y2YxeEZqeDlsSnhETitwN1haNFZ5K2djRGV6czNXWnYrZzJVa1ZjbTMxd0ovdjhpYnNRRkVCNDR5M1NFVzVoaThIa2tlU2Y3akZmUG5zdnlubXV1WktDbzRBZGZQOGZHZ0RxU0hsWityR09sdXNEcDlTS1JhemdGQmJxOHgwL2hLQWozZ2ZMTmZEOE11Y2lmZjNpNVE3UVcwYmtKNG1LRHUyN0tCNWJDRWdYSVVpU09rR05lT0k1aHF5MDFJRUxOUjA4NHAwSkV4UjgxSTkybDNnY243VUZiN3M4bWF4ckFuaDhWWnI1RjltVnhSTm1zNER0MStJaS8rMlEwMDFoeHBHR1hrOXJnM2lSaEs1N2UveUx1cVpyNEZtZTFEaDJaUjRxZ3RVMklyTzlKN0J4c2F0czlBT0xkS21uQXMwWnJSbGgvVFlaK3FyS2tCV01ia2VDZUp4N1JqR1loYWY1WVdiS0taVGJwK09BbVM3b2FEWlNuYVFSTmd0bkgvQTFtcVo4SDBWUHc0aURna3RxWjRrMlBDWS9pMmNONkRINmhXSHVrWFdIL0tZd3QxVXYwdFVPbVhQZGdodUJyM3FpWDZXUGwvRmRXdTNqdm9DSTR4WGNDTUVRNkYxbkh5bXlVSE5JSzJ1akNHdDhlYUJQd0lCNEtqZjlUOWF1ZHdxQ2VBalpndjdhQVBOTTZpUW1RVU85WDBTc2E4L011VTZVN08va0pxTlZMSmUzY0Z2anpRSVBUY0VTTWpYOFNyeUdPQzJnL1BGbTJ6clBLMzJHTXBZaTZLVmJXQkF2Vk00RlpEbFB4OENON0lsTk9KTVFHR3V2VFhGUVkxc2dkdUMveE9YR3dLWkUwNmxqR0ZMbS9zbnR4UmxrVlNpUVpwcnVkdlMxalZVeWpXTkNTalloYVFVSjEyTm1IWWVLSHJTWXlsekpadEFyZTNOam1kOVJsRjgxeGErc2VRLzhoMkxLNFFPODFEQXlVQ3I3cGRQeFFWWDdYbnU1S1VOQXJwVWxtd2J6QU9GSS9od2tKb3BYMDgrWGVOcG16eVNORE1VWjA0QkVBSSttYmFjZFFhbWR0RXJTZFJnaGwrUzNSNGgrSzU5T3Z6OXVMNlljRlBXL3hlLzlIZkxPZmc5Zk96a3VZVDRITGVHQi9mdzd4dVJCZVg0djMyT1dlV1ZKSjhTdUNFTHJhcC9ma3lkTWNLUHhqcExKcG1uNFlzNlYrN0owUlUzd3FHSVhSNU1McGxCUE9mMXQ2NHdUeUVES0Z2VEl1dk42ZThHc3VJcG5RaHowUmFKcFdaaTgycmNvRGNHdU5RWXc3dlRySkdiK0dGK0wrZ2IvcFhOTGh1YkZGR2NJV2dHUWJobENwTGsxVU9kYU1GZnJ2ZVZjbjJaMXg0Tk5YN1dSZFhTZ2xsMzN0ekdRUm8rREFldEV0aHZ6L1IwbnFOcjJ4Mjh4d2tsRTNXYlpBZk9oUktwVHJCeXE2SDBCc0phcGtIZytMdFN1bkVuNlBaajRicnVvYVB5bUlYVTBKSmpVenVHNWRsRlQxV0pFOUNpQlI4QzlpYjVYbHhrTGtERWd0WFREL1lvcnE4aUtqRUk4WkNDVXo4MVF4N3FaSktKU2swcFhCVjROeGdDZDY0a2EyVEFJazFTMzhuWll5bnFsRVpVeFQrNCtaUjlFQ3RMc0RkTFVHVjdrdHR5cndURkE2MFZudm5idDBYWE9kK2F6Q051VTZtU1VBdStWMWI3ZGF6MDJkQTdJd3dqZVJ3TSt6eURYK2FUT093M0hlWSs1NWFKR3RZaUNPUUNUTHlkcWVTSHp0aDFucjNqN244L2pFbCtQeG1GcVA5bGpNWUp6QTZPTGtkZ1BvKzJwUk9WKzlHVEhqTkgwSEJud0M2VFkvZWtkbGs3cFNteUZTVEI1ZmZnV2hjWWNtVVlPQWhqVWgwUmUrbG0vSEszT0xiNCtPYnh3cXhXSEFMSkVKRGdaVDM3NElkenU5bHBwdXB1djBOWkc3cHNLT0U5ekZHU1VxTWdmN0JyckZ5b1AyRExlZG9CRjhtWlpmRStwRHNDdHRoR2wvdzdseVljUnVndVJ4RTVoZUNjOVdPMlBXVkczc0YwcjluVmtDRVQycDZYQzQybEsrVldqOTdkNXdjYVJBZ1cyNlhTRnByZ2NNUTUyVVkrR2w5UTJXTXo0Zzg5YWVKdGo2TnIrOCt6ajMwUEhwYkZYZDZRWmh4UnE5YlJZV3ZySUEyMGsxL1k0cisxSWNnVUl6UHFNcHgvUC9BSUprNWhwcEN1UnB2cHplTEY0R1dFSUIvMHd0WGNpSU04c1FLamZ6TDRHcWh5RXZjTXVid3FFZzRnRURIblp4NlNVVkt1YUhGUThtK3k4YWlxenVjZ3BNZGFzeGhYUGdjSHZaRWhDRHUyUllXZUI0NHhEcjl0TlVCMjdybHRpRHdjUnZ6ZERhZWZwaDJpMnowMWIzbVprUENBRlRWVk5GdkFUSVFualZpR0YzeFVETGZFclVSRVh2UkYwU2hrRllMVDVYanJBditINDNVRkg5U1dCUDZaVEt1UVUzRWdjVXN0VGE5elBWUlVyeWIveGtnYlhOL21XS0ZoMlNqL3V1RDRIcC93cHFyNVNCVnRBenQvY21pWEQwd2VjcCtUaFJENkR4R1VoeXp1cGM5TDQ3cSsxVFhiNG9Rb1lwb0JNRTR2OWlmTVlwc3JXaTFCdVRGVGtDamRUWFZ5U0U0SVZ2N3FkRjI1MkFTZGcrS0hyb2pqWENwRzJ3NmxPSWRYWlRLL05PdHBZc0JkRW9FdHAveWxURGI4MFBPT2xhOUhPbWQvdEkyaW54UGRPUDU5OFZNTjZSbzIrOStQNTI3NjhPU1FhSlJqa1FtVlNZVExNTWV2WEI2TGpLd3BOcWFOT1VHLzIxZjN3cXpqNW1HNzBJajBkNUg5TzUxWExBVmdxRDhsQnVwbkV0ZDZZREpTK1FxUHBwL3NWb0lZSm9IdmlGd01LSHpLNUxZWUNjK1V3RitjRTdFalFROE1LbXE2RFVkeXRrVnFmOXZxbU9PRStMb3RKRGNmR1JJYXh1ZmVSeUpvYzVWMTI3RWZpZTNpem4ydlN1eFF6OWlpVXRFczBsRHRGRVd5ZDBmbHNsSEkrWjQwOEpWOUtuUWZYNTY1eFVxRitNdHpLb3dqc1NwaFlOYmFWVENJYWhweVN5SW1MdzVudzN0NVBCOFdTZXNKVmZKVW5nRnVQdytGMloxMm94L2NYUmNLQUQvRFg5QVdvR2lNL3FrbUo3OUhKNHVDTWJ1dEN1bU5XMmVlYzRpcU9DUEVOOXpIOElvKzZLeUQ1SkFrR2JTYldaRGR2TEk3NWZ3RnlCZUNXb2sxVnVnUlNsdHErcnl0ZXQveHI1azJjTnlZcHhhTVpYL000c3VtRFA0bUdMUVJCMGhlQTF1Q2dFWjJtb2tXSmpnY1p4SHdrNmVWZlQ4QzFVN0l2RUJLRWoxVjAwQnBBa2N4MlgvQ3MvZTdUTEFQeUdJRk5vV3lvVXo5Yis3ZTZZUzM1YmZtRm9TOXBBNDRCVzJJeCtMT2kyTzA5ZHVDOVpmSVl2Zkg5UUgzU2xTanZYcFlKWWRzRzJ4ekp5WkZ1TGNHNWNodk1udGNSUlhEV3lHNlN3QmpzVkdMVFR2QTcrK216T3RmNnlXY3pkT2I5cDRQUWF6YVo2SGNQbG5JMm9sczcrMTcvbTB3ZDFyUDVFMFduOEhtNW5mb3kwdXJNei8zaDRBRFdxTk9hN0YxNXVOZVhUSmdiaXVXbk5YVHg0YnkxRE1PZkhOZEtRNHhubHUwYkIrM0FINis0dmQ3dmhyVWU3WnJOSXAzcUM1TDhOdkMvSGlrdWJ0R2s5N3JuZVBDc0Fvd3dJdjVhK0N6c1NZRWpqdTdMSEFVNUp6U1dQQUJWb2JwOUtOa2NYdytxT3ZENzd0YjUvcTZNdHlLYXVtYVpVcm5paGh2SHh5STZOU2dqTHBpQXM1MEZDUHJvVW9yVWdRaUs0SFNDb0pxYUFsMXg2QVE0TWFSSGhVNzJzRFN4djNhRGwwZy9NSElIM3Ixc0cvVU1aMkFmb1FWQTRYdWxoOTZxcGxFdk03UnlzdDEwVVJ3YWdEcytsZ0xmTUJ3TDBLUjNkSlRzQ0RCSXY5UzlaNEdNa2g2OG9SbGovYmgvSSt5RGx5ZXlCdVhtbXNreG9CNzl2S2pPU085MFVKTkV1ZzVyVWlpSldvbHVMeHVKM0piT2MrWEZYeEJ5WGx6KzFxWHZFZEl6c0V6QVl1RVErbDFCQ0FmY0tOZWt3dTNkVys1YzJWRDRhT3p4eHRCQ3dPTUtQZnIyT2lXYTJXd0VXMXJBRXgzaFJtbHhpSndwTlJ2U0JZTHdIYlZkNWpYeEppbk1PT204L0ZNQmdrUVV0NFNTaGV2a0JXTCtMVFVmZERtZGw1dlpxcE4xcVZ3TlRaSjdWbWVwRitKREVSNHlXYk5jT3gyaFVpMVUzaUhTa05yZ1psZzJIaDhHcTZiL1RiRkIrSllZQTl3N3Fta0pYeHdTcVdya21TYkcvYnJNRmJxU1k2V2xub2JnanpWSGZ2RkN5NHJOUTllVzJmSDh4UDhmYVRsZENjSXhEYnUvMmFMV0R2bnkyYjdNcHNYbWh0SGdGcUIxUXBOM3JhRGovVlhTbkMyZWE3bHlIc1dKVzF2WmxScll0THl3QWIyQjYyRHF6djU5SG9hMlZJZzErOEZqbFdObHFqcFMvSWdwVXptNktOcUgyb1l1SGkvZDFBcTd3eXBNdU54cGdLZ2g5WnZNNFR0aWdtWkt2aVlseW4rWVhtNVBjYURkdVJPU1pzL0h6VDlKSE5icmxQRU1YZ3paalBlSHpVUEg0YnBvTkMyMjNsWW1oRysyckFaYnJXWkJ1SW1HeW5xeC9lZDlPdnNHU1FnTU9idlBnSDJ4VWdVeUw2b1VkTHVJUnVVcFBxUUkzVjlSNXJmVzR1RlJWeDd6Zmtzb2ZKMU4rT3ZFQUg1dlRjaERqQTlOa3AvVDAvZTlwUDJCYVBjK2p2amZUdzdrVU5TbE1RdklZMG9BMDVlOU9WdUk0cnR1ZElVY1NKWFhwQkNmQ2pDeVpIRHdYMm9McWFZQzd4d0EzOXI4bUYxOXZFcHd4WmxNUUdqS0lDbzM2ODNxVkhHTW8rRUE2ZndYcGcxU1doQ2xjdW5qMjJCd1NHdnBBV2pPZFordktqSEkvdEpBUE9QN3J2Z3I0Wk4vWlg1WHR2NUJPc2hWbDRBUHNENTNxMWQwbExtWWl6cXlxMkpyQXBpZEg4enk0MFdrYXBSdnY0TStuRlNIUUxMaWpHVVNQNkRTRnZ5YlJLS2Q4WjFqMCt0eGRmY0NsZGRqTzcrem5LS0VVZkd2UW8wVDJOeHR6OVNyZXQvMmNmS1BlMXlUY2xYWCtUeUlHZklEYm5GYkRlbjM0Q2szRldORTQ3dm5OWUVwMDBWYkNhQUUrYnpINlI1YkZtR0JXSTR0bTBCUDBEK3MrMnB2REprbmRIa2Z3UGhZc0RSOVhSZmNJbWExM3B1eEhUMWFhWlNEdEFIWlFCcDJsNDZGK05TWXZHeFJhQjU1VUFYdlZqc1JZUkpuSEJEaXZsblliYzBnWVdEd1FOcG1oTmI5MlRIdVQzUnloSFR2a255d0N1WStTUGIyNTNvRmRYL1RYNldzMzJSSzhFaVZ1YXI5ZmdJQ0FnSUNBZ0lEemZiOVlKL0Q2TkRGOGhQOC83a3UrMzdITDg2M2Z0K3pKL2I5V0JyNmk3OXYxMGY3ZnNKdjIzRHovQjlWcmZiOUlYajg1ZSt6N1hxKzM3RzM4N0x2dCt6a3Z0K3RoMGZJdy9oOWNSZmI5aUgrMjcrSDl2MDhYN2Zmd3lmQ24rejdGajl2MWQzNTFYKzM2MDYrbjlORnI1MVg3ZnFNYjZ2cXBQMVdPeURZejlFbzFKRElOQ0pVOXdLS3FGUlZxQlN4NWVkdEJoYzhMZTV3ajNhOSsvR2xOR3VIdWFFVGkyeEh5MHdmdUF4NVE5N2tBdHFKRU5Dd0ZQb3ZLWTZWUS9ibnN2RjFvdzVsRUg0QWlSeTc4bGsvdmJGWFRjT1J4WVVHbXBIejhnbDR6OTNGTXdLaEx3UFZ3WndhOFpyVlU5dk5WQ0lEcjRRSDB2YjZNamRvb0IrWUY1djBkOE5qbWtCaU1rV0dZR3ZSaUZtRGZEeENNOWV0NURjeWgxWnM2V0NjNDNRRUxMeFNxRExRUGgzcHUrQWxYOUFlYnVDbjZld3BBOGJma2Npek53d3Y4Ui9tTGFrbUwyd3JVelRBbU9aQ242TU4ySDc5MnM5eDlXMk1yUUlkSFJOUnpYVk5yTHl5bmtDZXZVZkVuckI2S1RZd0hCa003U2JUMmREdGY3K3NhVjlSMkh3OHZuUDhzL3RvSkJFaEVmYkFkSzVBTWJMUnB6NzM1bzhDQVpaUzROU3h0b09zWUZFQnFoZ2RpTTVmdk9JTTdQMTQ0bEpxRGtQd0RxYWlBUmlITmJVR3J5K21qVi9mYnZCU05CL2RscUpGbXUrRDltR2Y3L3Z2dFpmam5UaDkwY0I5MzhKelhNcjMyS0RhS29XRjZacUl1RzBPVzBkcy9xZDhKWDh0SDlCQ3VPa1BPN0RwRDFlU1cxaFovVmlITjNQQ3pJMGROTGRLVzc3ckl5c1BsK08xNWl6V0JIRXlaL2t5d2pVWUV3WVhnc2dDMDVCNTQ2MHpLUVh2dUZ1aExzSVd6Rmd5bldiVHE5VWJPWWU3QjlxVy9IVzYyZGc4RFZ1ODRsaFZ1c25SVXlWMVlsRGU4SVJIZGxSenBTdGRMN0tZdjV5dk8zamNMdEhhK0NzSDJHUkg3Mk9EaEgzbHA1Qm5qaHFYbk5jb09ZU2Z3N3Bsa0lMT2dmeHYwN3RuOVEzdGVGWURYb3crRUZvd3NqbnBGYmdSSnpFQmdnVlF6dlA3R2F1QUxBcVBSOGdjKzhVYXJYejMyL2t0YllGbjlWUEJhenlvaUpjeHQ2NEZUbTUwL3N3NkZ2OXJqQkYvVFdNcDUxaEkvL2tUbWJmRndLcVZHV1hENzdtbFVSWU9TN1N6R2MxQTB0OTJzc1VhRGptdThlQVRXZEhPcCs1Y2tmWXdWOWJEV01UVjlnWHQvN2d6THlqRDkrdS9HUElIWVdhVVBSRlBYc1p2UW41WmJjd2cwbEdwVE5YS0pKMkRLcGJneWFsZWRGUXhxRHVtbml2eUw5akgvRGlBZnpZRXdqVThyN1JkeDJleEdVYnllZ2JPaVg4T2diUUlUV2FCbTNNbjcwQTVzSy9wNzZ0MEF4bDJwb1A2dDY5a3htSkRmb2Y4azM3ZnJUbTRoS1JwZ1NCaGx2TkRLTVlOWmFUZzdmOGlKYnVxaWNQcHRMaWRGQUo3cC9qTm5abVBsL3JLUU0wL2hFTTFrbTFQWVRvWUtyc3Q0OVNDYWc3K1dzckMwd1I1TEg0WEk0TVh1YUw2cXBuRUNuQU83MTBNUzVoWEdkeG4rNDB4VmV4MUVhOVNNc3NONXFIY240MG54aDdoaTJHbFYrVG82dUdKaUkyTnh6R1Q3VWpUY3JuWllxOVNjS1ZiNWcreEdJazhNU0daSGZSeTQvVlowZGI1YXZPaGROM2F4dnNyNXJmZ0U1TnJDVVE4WUFqUDJGYU92SFFTQmZIaVN4M29wMWZPT1g4UEpjSDlaZFFoT3BjeFF2V2ZzV3V0SThrTEl3RWx0UzViaDNJN1Y0alBJYVM5Uk5qb0o4bVBGWWtpdGIzMEhYeGN2OUVjZ0NaVXBkdXdORzFzOW1qbnJyL3F1UHp2ZGxYWkZTZHJRdmQ3SFZtTG5VbUVsR0RrVk1FWjBBSmwxZlR3ZENqaTIyUW16Y0l4T3AzQzhBaVhOOTdkR2JzclBYWWY0cW1BUU9melJ3dllqT1lKN0FGcmIxY2FiNE16cEd6VlIvUzgvM3J3TkRjZFZrUWszcDJGWEpDWUZEcEJxUXBoVGJ3TWt0NzRuUkxoL2hUSHJuOFZxN3lRUEdLYlZoOEROZi9xdjRpQ29yenNXS2JQT2d4bTFpRDIvTFlvTVl5dDdIc3RSREwvOWlpT1FzbjJrSkFvbU9OWXhIYjZ3VkF6N09CVmw2UzRZUUZTVC9rT24zcnl1QUdkT2lJakhoS2ExMkR4YlRHQ3I4TVdaRW5MdklyVndOeFkzbC9ybFJGam4vblVPdkoyRU5sTFprYzU1OHVEM2gvYXc2L2x4YnYxTUhkOEVLQ0pZS0J4Q2R5TTBoSks4dnF6SC9OdlFKMnVkem5NSW1saWNILzZFb01NeklxTGNZMUZuSm9CY3hKc0d5d3JMeW1BblN4OGI3UEVzYVVBdXdXa0hsdVV1aTdVRFIwK05RMnk1NGdoS1lYRHA1TXFYQ1BYUGVLblRqK2NjMldiNW1zdVM5RHdkOTJ4b3F5bi9KYW02NEsrT3NXY2RPbU1TWWhNSjNXUlpSdnFtcFFHcFhVMy9NbVg5cFcxcmVzY1lObFJuTGNsaTZWNjlXeUZKVy83Zkh0SU9sYmZGY3BHMW5sUE5kZkdYZnkrSS9mNFppSHBmOGFBdXdKbXVYVXdFRDR6ZXZKMlNZVitucnZpS3RDTE44MzY3cEFQd093VkE2MmFsVjdHWDFjNFI0WHBjbUNydlhlM3N2VGg5L0FNcVdwUGdpMVpUbzlyZ2RmYnFOeVZkWWs0UzUraVNYbkxPZjNjUGFwVTkrNHBQdjBrekIrcHdDTkpKekErMUorZDd3NWt2d2szY3dSbHh1YXlpK3oyWlF5QUt3RUZ2T3prZllreVo1OXFOTFdyMEw5RmZoVmxQNnFDOGM5WHY5OU14N0k4SDB0Mkh5TDJJdU5KYUNaaWQvUk0vbmZpVGhpaCs0ZnFQbnBXcElDYk5VK2dMa1Q0R1lFK3oyc2hGMFBQa2JuOW1RTndqNk1TTkhkcEkyWkhOOTNhcE9JdEZuMTVYdzk0ZlMzeGpkNTY0bFZvZkpIOFJKMzVjOW5RK01aS3Y2K2VSR2pvUmo2NGc1TVRrUEpoNHFPL2RMZjFIdzVSYmRIQUh6MU9TQXRialdaOHJYaXdmT1UxU1c0RnROTHlyVjd4N29tZytwd3R6b2d6S0hnZFplTVI1anpHcTEvQ3JTQ3hDVFJaa1F5TU5MeHAwU0VSdnBCd2FUbldVTEJPeVltSW85dFZKNG5KUlFFUkFPelNGMTdGWTBHUVVLVDZacllvNFJSdzhqYk9KWklpV3AyZVl0VGxoRjZaczU0WTVONmhMM05FbmNTTFJNcTlOa2lBK1pQRHJqL05qL25ESVZLNm9kNzVwYThNTjYyNFl3UzI2Zjk3NHhBUU1BWWpTbkowUFNGMDJTMmpyU1dlYzAyWUN4aGJkV0tVRkp5b3Jzd1VlT2lRc0MxQUpqQ240SHVnQUYxbDhEQ0VHWDE4OHo4a2JGTWYvZ3B0RVo1TTRnbkZrR2xoTkhUQ0JhNGlSQlZ0WjhQek4veGVEcEtBSHcyWXFGaEdSM3IvczdocGwxaHllSnlYQkpmb0lTWE1JNGpFNVFNcE5xR3pQZ3dBaHcyMFJwSHk4OUxtZE9SODlXbGNQRmRPZEwreFgwc0NhS3duanBUREJWZTdzOXd0cHRJNStaTjlRVHdaNW9zVjhmdHArMURMR0dQK0dYT2dpMkRUUFdCSVpLbC9mNi9FUEprZVNyOTdyNUUyeEpFeXNGNUhtWjJlMGIxRXRUM1hTWVlxZ29LNVhFY1F2OHlvajBrZzZOckRxMWt2ZHBOL05MQS9WVGdadjB1L2dSbmJLcXA5dHZjcUJDcVJPYU5xMkxDaUIvS2ZLVVJ4ZEE2ZGdBU05ES3c5RTNUVnVIa1pvSjBCeXJVZk5TUXBnalpIcTFSU09jcHplWWlQTVFIbXd0MVJnaU50c2VncGJaUE5wb3FVWmxxdjZvQ2J5VE9VZEpqL21MYnNNZ0Y3Rysxbmsvdys1SzZ5c1c1VXBiWVd5UDEwZldRMkV5YklnUWZpTC8waTFhV2VBV2V3V3Y0VDhUYjNvN2N0MnFtRFFXVDZKVHF1MEVQOFNEcktFMXNEbXV2U2IvRDdUYW9LYXF6eVBLQ1o1bkVqNHN4Tlh0OUtKUnRHT1d6QXNkOWJMTUxRZWF2RTJ1UVk2eGpFQ3ppellzakdodndkMHBXelo2Q1dhYmxxT01VWUxKV2JHbkFrYXQ1dGZoaHYxR3JYQVZNSHROVzNaWjFRenQ0M1hXVG8zR2p6YTFFSXJZVVFNcDBSOWJzTUgwVjIrN2pYOEdjYlZUSXNZL0k4Tnd5NWhlZURLTnFaNTQvbkpDaDFwYkIvVUkvR01ycmVTS3pnUG15MnBsWkJTUjgrL24wOE0zK3AvdEp0eDBqUUVvU0xDanordTkyTGEvUDh4MW5ERGZpb2c2OFVqZnNQYXVOaGh1a0FGNTM5eE1WVk9IVDNMTEhWNUs0bzFySW5xMTM3c0tNN3ZDZ2NRdmY5bjNydVZPSm9NNjIwRUhNWkxEdUlKQ0RCc1IrYTZXd0NzVWN3MjJTdnlUMExWZlV6bmFLb0tIbmZXbTVjTjArUC9FY3JwYkZ2Z2NWb3RKQ1R4cDlsc0ovVkVUZFZOWFhYcHZuYTlraTJEUFNaTHVHN04zcE9uOTA4V1pKcWhTaGQzSS9NQUVTenF1YmJUZi9CTStCRjNNTjVzazM4UHVHSDF6SFdTbWkyZjNwOWNBY0w2cDRNK1NhYU5yeUpkdm9oWm9ZK2JpczdDbWJuYjV5aXIxR2JxRjBPelFaQ0NGYUIxdEtveHRDKzRxVTU2NFJ6YU84QTdIMVhuaGl5VUtwOGhUTUY2UlRpQ0diN0lUVTY3b2lCcDBJZGxJeVZQTi9heEV0VmV3dDZ0QTE0Q0tBejl4TVc2emZ6MTJvYXR4RWVPUGZRbitHZU9acGlrRHI0TVVKOHZUeDk5UC9nMHVibEp4aWZMZkM2NENmMCtOY3AzWmNlNTB5QzE3UG1jaG01c2dsNUFBb2lUZTJFeHppdE80cTZFQWEwWXpPUkxyaWZkQS9xMzNWVGp5WWkvVStXdFNDZGt3Ym1XR0NZMTA4TDhyQ1ZaVTlZTmdYbzN5MkxtL1VIbkZIVlI1QXVpQ1V2MVdWbmMyalNoNVpxV0hldlFwTGlBSXNqaTJwTVhmZnExWFZqWXNLY1VQUHFPRFk3YVJteHFuRkZWUjM5M1pvSi9jbmdYWm9oa1ZxZUhkRW5yN3F4THV2N3FGaU5aYXh3YjBzMkpXSlU2YXRzYlpRQmlrYUprS1pqSzR6Um9xUzY3dTE1Wnp1TEpNYmNOamZsNDIvdk4wVklQNlBQVUJzTzA2TlRKTVNPMzQ2MjN3M3ZHSlVONzluK2pRUTM0N3k3NVgvcXNpSWtWQnRVbEp4czF3RnprM0ZOMVdMaXlhUlplN0JrL0hValhpdHhPWGE4QzRjTUUzMlpNUk5XZEhrMFNmR0JXUElrZmlDS0lka2ZVRmJwemNrU2xSMUhtUUl2L0N5cFdBSEFjT3ppMWVCQXBvVGdGQ0pRZzAyZ2cwRlZScU9RekN5U3BxSmdLcEVBSHBOdnVEc2hGcVNWY3I0RkRzdjlyL3Zob2NIMExFbVlnSWlzYm4vT3NOZktGQUFDZ2NtYlRwZCtobDdFdlVta1VpSTBDcGRkY0xQZjlEdEl5ZE5CRjg2UlVILzBmSkJmMUE3UUhOVDJZUDI4dmtpckxDNi9oK0hlS1U5WXgxckU4WVhGRUYrbGFjbFFIVTBVUXR2d01XOVJEZUxkT1BaTVlmaDlPRHk0eG5DdkdicjY1bjN1VE1IeEZycThhSWNMeDNvdXl5aGwzTFpJSGRHNk8xRTR6amxra0FzT1NBKzdNUGhyN3ZVV1VhYkpLRlZqZXJZT05DUUREK1NWNjNOa1FUOWV4S1M2STdOWEFWYkVBSDNnUHRWTExFRFRPZHllNnRyekdBbFdIM05wRjZnTDRySm1sUWpmWmxXTGZLeThReURBRHBmOFppT1k5WjBnTDF4N1NZSDkxcUFPZ1ZuQysvT3YrMWNNQmF4dFRHbzFmVDFuVzJaYWdHdEJoTE9HVmlSMkJmdWw3cmJNNzdwNkE3MlZOZHBSeW1yYVA5aDJHUHhSRVlyTHVtcmVBeEo5QlVoMjNNcjNKMGFWQk9EZUpSY1UxYXQ4NldyS0RMeVFSWjdaZ3hMTDNwMW5zTE9vWXZDemRvQmhHbFJiWHdKUVZDUHlxTVhxK0hhOCtSVUw2WWJEdFVwQmJERHdVcUVZSTFrcy9kZFY5MTBBN29GRktKdXZZM0JLWEVBLzFRV2ljR0grQjJKZjhoS2NDTm5mVDJ6OExDZkgxRHZFZzdqNFlKV29LV00vakZqUHdWeDRUMHQzaEdPYXhBcXpLL2M0MlF2bURXVlVRTHA1WTBZY2drWWc1TFg1cDV4R1lkbGlXM21KL3UyUDVxbys4aTlpa0xMSmsycGdieFRMMEF1d25XRE1rKzZLWlowb0xXNlZzdld1RWlmYnJLaFcvRm5BRmlYSXl6djk2bkU5cXlxelZvUkl3SDgxREFEaG85MXNwRnVuQzFrMzludHdidTM3NkgxUzZWampXcEdid3RYMllFTkp6ZEJNRno1VXZEUGFsajBzZDhVMWxSNzRDL3VMeEdkY1F0NEs5RlQ1TGxnZ2ZuaVg2V0tnMG5QTER2UzhRMFdnTnRzRHZRdFMrS2lEMjI2UTg4TmZETHk1aHhNeDRwSWZWd252bjVoVjZDS1AzYkN6YXBRLzE1R0pPRXBCR3MvdWF0dzZXTDcyamJhaFQ4dFhocTJvK29yMWdTZnpFdlRyODIxaTBNdDBUYXBuRlpxM0l0YURTUUxEMC8yMlRkbVNUcm1QVkRRK3lyMnBLZkxLRFFZd2lidDE3eFBPZ29aR0V6N29jTTVZZGQ5Q0hwZ0h3SDM5UnQ4NnU1bm96OTEyWDdhaGt5VGM2bUVBVzIxUGVLcWtVNTlIVmVBMHNYM0ZFQmJoSnlJd0oySkpmUUs1aDQycFVuUzhNaVBFSk9yUUJLbnZ5OEhhRjRDaGpXOUlXRXpORDI4RHJEUmR2eHN4YmNUc1lCSnNVbXpmVmY2eC9uWWhIUGZiVlFJUi9ZcWFPSTVLaG1UM0cwUmFpSllxek8vOEs3S21MVVBlWFZJLytVUDdPUGVhNk9YajNNdXQvR1JreUZkM0Y5TzBBTDc3SHl5SWJpWW9nZENvd2lIdm1pYmRKWVhUZWFXZ0F0SDVZZ29wQzZHYklMTGovVE5UVnNDbjhvandoS0o0SnBGVDJyN0VNTmI1N1FReWhNS1VZK29Oa2Zuc0FxRURFN1NFdEsvcXljenZYK1p5aGtPelJ6ZUtXMHk1YVB6MDE2UjMwVTB1WXl3V292QkZ6SzE2Sk5NcU1HVzdEbXF6a0V2ME9hNS9wU3BJZzhRTUFYeDZscC9pd0Z2Mm9HVEUySmk4V2VEQTRLTzNvL0FOd0V4Nm04dG9lTGVONmFnSHEvZXV5a2tZeVI4b3UwclJXZjhpb00wZXU2MFUxcU02U2t3aFBUcll4VjNESisrWWY5TXIraDdaWmV1alRNWU1oYXl2bFNRSU9aMkJFU2JDTWtvMUM0a0FXZjdZRElRRzBvUE9MTXRjU1NsYkZLUlVQYzYva2t0ZjJheStyRGVkZE9ZbnBCanQrczBjMjlLNDZERXozVlFCRk1TektaaHBEalV4MTdZVFN0MExSNk1UcnlCUzkyMXVFc0hYeFc0YmYvVzhrQjZmUkYvcThTc2psZ2NLWE5tQzQyNHhnRjVPMUVxL0J6aG5EZFdHOTd6R0VRVDh0T3VoTHMrWEN0Q0lJV05Jd1VPeWtzdk4yOXRlaVpsVjVrZCtDR3BUTzFhM2FydHVCamluQWlEeFgxaVEwbDB0dE0vV2J1aFdHc2RrQ3FMZGxkamt6SVJVL3c2cndHdGNEblYwQy9DNTQvTFdyekYwQTNRTXFNYzBuR1kwVWQzQlA3REdRakY2T1hXeFZWREF5YU1HRFdrRTNNcXNZWHZZd1NHVDRWMmhXOHQ2aVR0UFU5OXlEdEdvOXVYd0dXVmpUazg3SkVuaDFDNGJkZ2JVTUxtd2VGQjJobGRvNTFFSU5zK3Nia25GTHFOMW9RcFJsSk52VlNJTzdIWm1GWEdXdVZTelpMQTNXUDIyWWhlVTNDMGlsaUozUE5oaWN6dndFTWNUKzRzUmhNQzc2c0VzL1RZSDVWcFVwRVVpUnZmWWZraWFaWGp0d2dYV3F6VDZtYnIxNFJ6UEd1RTdTc2svazJyTUNkaGozRGxBNDFaM2pCMFF0M1lyTlZJdWgwN2g0NHZvWDNUWG9Tb1NjWEZYTXhqRFZwMnFmZmxzR2Jib3Y2WXNldnZWY25BcnhYQTFqcHdMZzMxeGtXbmhMT0xKejlsR1M2WUpzaGx5SHhSOTNINlNWRDFiYng1TGlOZDVwMnppL2diWmN5bFhKcitOM1Y5UU8xU0krVjkvaFJHUWczZFl2a0ZCU1gzR1dha0YxTGViRzFvMXRra05nemhIQTU0SVNmWU9LeVhGTkFLcldxZXFEWjNSem91ZnJjK1FQbXh5NGwyMzBaemhoM3Vnd3dxVThueXowMlJVdW9wVjkzYzlxWXlIZU1DeGUyaWlVdWozaHUyd2I5cW9icnRkSUZzUm01aXBSc2RZS0d3d1htZUg3KzZPSEJ4V3FKVHFDR3lyOXQ4VWNURXNmOW5pdGs2eUtiY242aUpqWldyTnlzYktrRkFCM3FObWFiY0ZXb05sTEV3WUxFUm5Hd0oxMk1PaG5VbjVYTjlBODBEU2MzTlZNWjRKbkhFTkgyR0owZE1JVVpDQng3aGhLUjlUS1ljaDAvc1NPUGJsNHYyd1kxajJrUG1xOXRoMmVNNUxYZzVzaE0zWmkzQWJZY3UycHd4NHlwZ1daYyttNXgzNmlBUlhDcnczbWo3aHNMTDJub3ZjcWJZS1pjaG12S1dsd1dZN3JIMHUrWURMb2JPYkZFLzBqTGVXbythMitzTWVrNDFBcVZXT0I1MHhqelJsVG9SMFh0YnJMMHp1SHhYelNwc0FWb0tNeEpJVHM1MDY1Q3JJUERIeW4rRG5zM1NkN2tKUGRJL2dmV1NmMWFEZUVGUm1WUVhCRDNYQ3VFQ3Y0Ny9WQ3MzZUhxeE1ob3Q0QUhlTUpTTVFUOHNxRmprb3J3bEczY21aU1FVYnhCazJJUVFHWHpNSkxjNHMvRWJ5TlZLWFBCb2VEVERnbjFlVVVKVEE1T3E4K2NoZjBqZExuTHh4SGRtSTRJa3lQUDVwQ1UzN2htUk5reG0zNHJ0K1BZdExFMCtScHhiamxtM1FQQndNa1k4NHJzWVhWZGdISFR5QVh4cm1aWHhiN0JERXF3S1pCOVBLQld1MWlqZExDa3ZwNWozSHFOelRjMmd5Q01uV1ZSOUc1ZlNXNEJtdjNuSG1TYmdEZFgwS3Zlc0hIRlVveWJUTys5NTdOZEJwakJvem5DUUJKOUxLeFp0ak9rMUpJTGNtMkxXUE4vYlpqUzRCYjdpSVgveExHOWtIaWlpcEtQRWY0Nzd0YW1FdVVpblpNeGZGV013SjExeDBRMzBUUVcvZEZlU2Q4cmpmRWFQYytldTRZSFRwcUlwMmMzSG9HT29YT1NlYWQzc1c1K2oySXNjYXNhSXJhaGN5TjBHbjBDUzVHK1NsdjFKN1hpVkNmcE1jcUd1ZXExS252b0lSYWgzNlIxdmxpVDRDdjNNSDI3SXFqZi9MRDU5b1JBRGxGZ1dRM21tSlEzVGtvcktPaEROZUh3V0hiQTR4VkVaRThWT2p4OXI3YXJ0czluc3lIZEdlWTlQa3Z5bExHVjV2Y2Z4TEkyMDZnT1hCTGs5em9pUGRwQ0c5aHIrQ1NLeDl2ZE5FbGxIR05GNVRGUlZTL1JBQzIvMDVuaUdUM0FZN1JCRUw5Mzk1Y1lWaGtXckZyRVVwazRkdWNoanNjZE1KU2FvUjhvNmMxWHNUaVV0NGNodmRrdlYyWGlteTNlSzhQL0wyOFJycCs3NnphekdTQmRiZzRBUmlIQUpyVVpCNkNTWVJYQllOMVMvRTJneFVLSlJkSzJTTUE4N1VBc1FaSnEwd0VpRThzeGlnaWtzNSt3QjZLUlRBYnZjTktIQllCWSt3UTJmYkI5dmtsMXZYNHBEamFpRkVGQUlBSngreGsyNUx3N1I3cjNyWHJZR0lXZGluYitVSnNlMFZ2b3AxazJhd0NtbXFsa25RUWpUMUxmS0VsZURwenZsRDZteDFBaHp6NStMa1VHb3BBb2h1WTJOcUVTbitEdTFQWHJ4VDEvWXVMb2ZmN2hLdExuZmhEZ2hjQ0RhOGE3RktUUmhrVXhxZFBuS28vMXRzRm9EUWJIclJtMS9ya2d3cnk2ekFZaVdqZmdCRnRFaXVsL3hKbjA1SDBPWC9yN0NGTXZ0bFg0ZGYzdFNnM2xLazRlY09RVzI0RDRhVTRFa090NXBPTDFXaDcwQU5JZVA0ZnpvOWhFK0RkYVpYVG9MZEhQSVdCY1VNSVJOQU9HbzdIN2FEUzJGNjh2NVNBdk8vcEY1ZGNPdytoQTVzL3RJdS9IQm9Wb0JlWERzNGxjQ1VucVgrY2NlTGpOdUkrS3VXLzJXYUEyZ0pzZEtpRnNqVHN4K0kxMEE5ZFJ4ekwwaCtCSGFxY3lMZjdFUkdTNFJvTVM1cEJyeW15TEFZWXVkKytOUDAxTytHZUxFVXFiSmcvd25OYnVROEJrVERDc01tNllYVzluYnIzSEV3eHc3NjcvMXpTK3M2RUZVYVVnWGJwM2RTTVRpOTVqRS9GSDd3SC9RMXp3cTlyeWRMN21Ed01LUE9SSjF3c1Bwa09TK2FJWHB1OU1VcERsSUY5UmVxekRuazk3N05YUXphdUNKV05QQ3FtbXYzZTRlTnBjTlM0dmtOUkhoM2VGN3pReHlXRE1xM0JmaFo1WEVjeDMwRjVmKzFCKzh2SVN4MFkxWFRGSEZwbXFqYXo0dlgrTisrZHAzY3BWdkFQMi9RdHBtaWhHTGtWK1JaTXZQeFBkbktORkJqWHlxSnJtV0xyN1Qwd09kS1l3bEtTVTVlbUNRcWdTSmVRSW41UTh6T3hCWFJhanhYZTdlOUxEUTVlOGpqUGl2S1AzV1NYRVNlNXlSNDZNT0o2bWZGdmI2NktSZEU1T3pjcmZUOWZLWXhLOWZWdzhhMkFXUklFK2I1WnZ4QlpIRVlVS3owdWlTdndFTHVicDE1L0NyRzZtZlJEek1NZUx6ZDhxNVZpWmFlTXNCRmNUTzdUMmg5OTI0TXZPdng4anVOZWJVNjZEeVhnUzdmWkY0UDg2cEVaY2VWRGt6YXhURmJmRjQ0TmhSQWhWdytSaG1KMUErejEwSGxpN09vS0RweWNaWVY4M0hDNDBuVUZPZGFJcHBtRTJxM2NobkEweHVjY1pCd0hxQkQvV2I1ZlR1N005SWtvMTRtajhvZDVSUmE2Q2o1TWxRSXR2K0poVlZxRHFORGo4b3JRM1lVYjVTUzhIMWgvRStwM3kxY0I1TGhIQjRSL2Y1TDR3UDMydUtzVW1uUVRnb0J2ZysrSTRqV3NPdWx5dnhjRjFuRDNaSWUzbTM2c1ZMMnZNS2JOL2J5WEo0TmdZZGJwdjZYVmxYbDE4VmdLdUVVa2tuRUFkbWROOUNQUzlOMjBlU09mS0N6NkpIN3JVa0pya1JjdEZ2aWpReGtoejdkNHpWV1hwTVlrTEllM3hsK2Y3emtKbGJqczBPVE1iR0JJdllMdkg1eUlKczhscEJpWEtkb2VHZmRBQVJ4SVNtWFRwbXFXYm5GT2RBd1ZSQ0U0TDFhNFFWZk1ERElXVjhXK1AzMi9rSkJhWVNvNXl1WXBEOUExMnpsV25UL1lzanBDSVJ6bTZFWUd5Smo3WWVJTThpQm1YMmJqZFBmeVlnRFFsOWhtVWFjM0VQeGp2WlQ3VFRFRHJWWloyZ3pkaWwvVDVzbkJjY2tiQktCRWIzYWdkdzI5TGwvVVdaMEN4WmRMWlNaNnRMall6WERZeWczOEM3T2d5MHhtVElKTlp0ak8xTmQ2UWJMSnF2dUhkaUFGem03L1FiaG5oUUJrTnJnRXZRTVVkYnNvKzlaakpKSTUxQUh4cUk3UGhQN3BMZE1QeHFOaHpwdEZOZmx1RW1rcEFaL2FINGFLTjBzeUEvOEI3Z2FwOUtzZ3llVzJnNHFMUThmQmRyU0ZzVUxOdXJJdmNoSWtkTnZuMHFlZGJNb0JuaTlxRXdjT053dzYrV3BOd0NhQUhOR09nSkRINkxmZWlpcW5zdjVGQXZzbWRUU29uWSt0TWtHNEo2M2JaVXoxSEE2Q1BOSDFrUEhHNXN2elBoRnZIN0NJS1ZydW9ZakVUTFZuWDJkRU4yVzBkUGIvZm0wcEtSQk5hTS9tN2IzRUpVRVJkMTBWMm5MS3NGeWZUME9WWlNPNDlSNzltRVRWaEVUalJ6Y1FkSVdSdVRtTmk0TmpOYjV2QmhkZTJmWXNMb0V2OXhrTjFsTDNsY1FaR2hFOWN4d0VDc2MzNU1SeEhuWDU2a2ZiR2ZoTHlCQWJrL1JaSW9QSHFmTU5Ya1dENXJPSHN0V1RxM2NZUm9yeUZaL2FEbFhVcjJJeHA4aEJYSGRXdUZ5NzQ1NjV1K0YvRGxzaVpxTmR5NE81SnpEZFdJdGY3VDZCNGFzaXZ2OHllR2lQdGpuYnY5dVVlMUUyTDRjY0Z0VTF0dmRyeE1MSkVaOFhKNmlVV0hDYnhmUXc5dDNTS1dIb1diV1l1bGZWQ0NKeUhhSGplSGR4QWdkUC9GZm42OW5BbThZRFp4K3JQWWVrU3VPZWxJMTVWWFJ3NWhvQ0kyb2VpYjhiQjlwWDZYL1BqOWRKTWJudldTTGtRdDhEREdwaHhrcyt3YjNOeG8yT3NHTVJ1Tjc3QThHMm52K0FNVnU2ODlTMy9FdTRDbmUzN0d2WWN6WDE3VmEzdndxSlRJcWNzdzZYVGtRZnp0Sms5ZnpjRy9DZE1id2tXdmVESTI5c2tJelByVFFDVmQ3T2RGbm0zYkxYd20vSnNscCt1Tkp4b09NQjJhak4zQVJhNHQvYW1aeXk1RytNL1o0a0FCSE1XSmQ5T1ZHLy95bStQWWxFbTN6Q0FyaGovZHgzeEpoMXlRck5WUTErY0dCbzh4WkVKQTlRSkZraERwOXFXMmwyNnBDMDBrc0t2bnVpd3BOTmdnVjVxNzBtREp4MmltMUFXUGVrU1ZNci90MHNsdmxHQTN3Z2o1b1JWS0NIeHNySTFmcWtKd0lmczhJUy9tUFM5NHNVcTRmNURoSWZBRVR3cDhqb2JLRm9rRkJNUXhjZndwVzh4c1VzM1M3ZStkMHJVV1oyQ3h5aHlkeVo0MU9IVGJjcHIvMEx3L0ZXRUZKTG5zQVduUFcrMXFCT0tUaEt0SFhXNzZGYXZnYnJQcTM1WUtrUjVyRm5lcG4zN0NqZStnb1NBcVdOMmh5aElNNVNqb2tSblRXTVJYN1hFc2FtbE5UU1laTEJ0THlBYnpBVFd0WExicFB4NVJFZEc2amxOSk1tZE5DRFJTR0tvMVVCdjY5V2pzdEVPUktKMWZGWVhSaVlNM1NwZWxzN3JROHRDdEsxQ2FTblhxQzR5SG8zeTZJNm1wZW84QjJXcGtRNVpmcVR1YmdnYmg4WVdRcmp6eG4rUGoyRkRDNVFIa2tGbHc2ZGVzZk5xZGZ5VEJ0R0VFTlkyWTUvZjFPMXk1T0wyWU9QWFpNU24zTExBc2lObTR6RU1oR1MzOEp0aUhKZ25vNW1TeUhtNEJJa29oMU9vREF3ZlVMTktsZFd2cnJlMjc4ZmREM2U0R3lHWlRycXBFblFreEEzSmFqNWVrR2wwWGlmVVdCRnVsNFFJY2p3YlpIM1g5ZlJqdHFKYVFpNmJCTHhBUXRVa2l4M21waDBsSEZxTXhlN0xaNlZZd0hFTDFIaVhGOFJQdEY5SXZ3dlNmWnJ4NFpDQkZENXRMV1Q0WWh0ZGhNc3pjSzVWZXVkSjN3RldrMnd2MktNdHFVaEE3N0VOcGtiRWhnWUt5SXVWTDRadlR6N2lCSVBoRGdwVzIwYUlSVGpDc0ROSWlacDB0VWc2QVVqUkVYMUdZNU0zVlFaNUhTUnV2ZDJzL0pPSmZ3bjdmSW05VXZMV2hNR2RBWWFsbUxBSWd4cW03My9IY1piV0NacS9kN0YxdGk3WmVxenNya2tWK3JnajV2Mm5MODc3UE5RVVp3bTN4dDhKMW1pWWlxSEpJVzRRdE5JcTA0TVdPOUZWOWZyNEhFMFF6ZTd2U0NiajdZNHozb3ZqNHBabkQyUlVFY2FpWU55ZXhZUXcyd0taMG54c2t5OTNZNTlZTElERWJDV2R6eXFjcVdaVjRic0luV1pjU1RuTTEra2tUb1dCYk1ndzNoU2kvbHFYeVpVQktkb1cyMkdTSjFCNWo1QU5SdGkya0pNNlliVWxBbU9wdkdoTXNNT0VwUitLcWhEWWpPQzhUV01tOS9PT1VEYnZidzBmTDdGRHN1NzRTVzhlYXFad0QxMHJKZnV3Y0JmWEd6WUZOUUZaY0hmYnFoeDM0enltM3ZKYVRTdTFuZEc3dVRYMHdUNXVBTWtXRDN3Zlhsb0FROXo4anpWa1ZiaFVGS1BXc3NnWGVyQndUNDRjMUlmWmQ2N2h2N0g1ckYwaTNSU0RkcENMRldPSHZTOStuQTIzalQ2c0dBMkFnTTFJQVd3NkVzWXlEbVladHpuOXJXK3l3aXViMW53bFB5RlA1M3Z5SjhsSXdFdS8wSWcxb1BFeGdxblU1OUwzTEpOSmRoNnl2TGF3NU5UU3NQN0dVeFJPMkc5ejhOZlJEdlB2VXM2clRSVisrNDVpK1l4aUlHWUpVOGNpeEl4ZVF3SjBOQ1J3cGEveXAwdytwekcwZ2ZGbnZwRzduY2JwRWJPNi9NOEJsaCt2cjJUSHROek5zMnBBNjBDUTZxaHZoTDBxZTNWS0VmVFpNODNsd2JpWE9mMGptcEpYcU5YNDZ6VFZvRTJGbTdjUEgrdDFqV2ttTDJSWEIzTWtkdWtVeks3Y09na1p6OE1xZVQwSVN3K3RjNno5UHRibzV3VXVYbGJwZ3hxaHFaV0pjNHF6YWI4bmpVRzFDNUNiZ1dWRCtobHNVVlpRaVVEWjlRWHlKbUE5SmlMZzNWMEtuNGY2WVdESGZEWE5EdnlSbVB4UXgvZ21qU2pHc2RNb0VSMFM1OENxS01FTExyandnNHhHTzVGU2Q4ck04ank1RDlpWDJnYWZoOG1yNDVIRGJZc2xHZEY2d3UxMS9oRTJLRDBDbzRmbTdCMis5Q3dtc1daMXg2UlFmT21LYzZzOG5CQ1dxeWRPb2VIRFU0cCtRWERBVDVwTVBVOU1JRFJlVlVxT0JGS2o0WHRpRGJYQ0VGc05rV0NUc0FDbFRjTUQra0crUWkra3h3Mnl3bEplOGVQZ1NpdS8wdVZqaENJUElSNGFwbGR6bDJ1dENJT1BiYjREUUd6NndBZHVQa0FzbC9pSjJmUXlFZ2lFR05CYm5FWk9tZHVDVkppeHNEWlRtZkQ4bnVjTUpkNGg5b3VoaEtBZlFYMks2TCtWVTdsQktCYkE4TjF5dTZ3WlJuZm50VWw0aE9jc0NGOTlCUllWdG9NTjY3dFRUWVg0ZkpNUTFNbVhnbmI4NXB4ZnlwMHRrRGJRQTZDdUc5N0ZlZXkzWWRMRlBhUDFBNzJXWEE5bitVLzQzZnZoaDRXNWlkM29iSUppaFNBMUFvUFA2Wk9Qd3B4RGQzSUhlL2c4ZzUwSWxXOWsyZ3ByTjQ0VCtjREp2bkJENlhQNEx2SEJ3NEhPNlVHcnc5U3R3dmFYdVVmTkdTNk9nemZ1NTRjVVhNazZRQitBKzRrbFBTVS8wQ1dWYmNxWm9xc0FWQ0hOeFlRQ0d5c2tTY3hGRTNUbTNqT3pGWVNueWlZSTBza1oyb1E3bHEvZ3YyV09MZ0VVNzY0dzlCMXR4aDJnSTdhSDQ2Und4S1E2c0pBVzI2aERnZzF4YjRMenNqeENYMXVrdGZDeVVSdmMwTEw4UnE4OG5RZ21FNnc0YzU5Z1V0c1ROWkRQWGZiUHZqdU4zTi9FOTNrbWUzSEp1Rm9GNFRRWmdwNjMzOUdxbTNtdkN1aXdUb2hTM0NBOUxtUW1vS1RKdzVDQ1E4Zit6Tm5pYlRvZmQ4dDhHZGJzNEwxL3kwNHdadTJ6SGNCQWN0dzBYU0lsaU1BOVJiTm82b25ocDllM2gwZEN5NlJQOSt1WFhtYXROck9qN0kvVGZMVldnaG5lcmJYdVN0UjlndU1ReWttUWJnRkF1ZmJhZjFiUVhjWkFEckQxOWpOZFVJMTREWms3MGx1TDVvWkxPajFTQ1NtTEt0S3AzUGM1VThiVXlQNUswNTRaaEFSbjhPQ1ZmQzJsSjBYWHZQS1hESXhZZUlMbzU5SVJ6aXRwMjY0K2lnOE1VN2NqVmFZVWYyN05oRG55SlhpYWNDQzJrSUphYSt4Q2p1dFpUeXRwMGVob2FYbGhpTDFEUHpLWmgzSS90UmZ5aDVtQkw3dzd5NzdReXN4SFlyL0Q5N1o2UlRUQ29EZ0hZR2RVM3dLYmI0VERVcUY1Nis4NzA1eEVGSldxcGNjUzZ3R05yVVJnSHVDanlvVjFXMmtHK2psbGZMZXllZFFsbDM3UmFsQkg0Mzc4VWd3eDZYUmRldTMxa1hsSFQ0VXB5R0ovMjRrVVNHT011S1IyUTNlOUdmOHNySXEwN2lZSEg0VTlZUFh0a0Z5YnkrTi9IQXJXdHpYeFZwc1I2VVc2TW5GNHJSdnJaSTBXbUtjRlBxRUdWaW8yNG9QVitnS1UyY2hTSnAyRUlvdkZXRTUxM2haVTIvaU1vaFlCbEhqRDFnRCtyeDlvbjNYSlUyVnBMYTJmK3pTUjhnbW5VM2xTblFIUElXMWFnVnEyTENPdnlRNlI0TkpGWERoL3hEWWpnVjlsL1BxODczc3NRVXQrOUJSWWtXYmpJYmJuWE5qVTl2eW1TVVZzeVQvRHk2NmVVcjlBRDBTb0RZVkpVVzJLYzJadml5WlhVWm5YV1BHSXNmbnNoK3JYaDUyYnp2M0NFNjlDTkJDSW52T01zQzhjUmZ6eU90M1EyQ2d0Qm93R2d3QmVFYXJwUXRPTWo3SE9qRkMzeXo2Sk1TUHJDaUFwaDlNVXdCWXdrbDNGemx1V3hQaUxyd1ZYUVFmUm9vVWEzWkM1cjZpSXpOWWxlZnN3SkRHaUlNMW01ejJNdmJYRVdieWE2RXRBVi9ET2dKa21ZNk9QbFJsbVZOUENBeFJnRnRFelVoTGQydS8waEM1eGh6WVZ0WFV2ZTNFbU95NE1WOElXR09sRXgwS1luMjY5NmtuUVg4K2ZJV3VUUlZmaVQvQ3RXZDEyUW1USE5Cd0svdzVkdlIrWmV5WjZTWHBRbGlQaTkrRFFJQlM4Ry9iK1YwYVlZZW5tRytQNEhEN2hOZ3lZOEZ0WmZLb3ppeU5CazhjbnJzNDdXNWNBRnhheUZrMlZzcEJwV1lSVSthRWljTWJDNE1hcVNleG9YT2RBd2x4dGZqWVNkTVFxbndZS000L0tlbWFDVHBSWkgyWGdCNFpBOFVLb1d6bE9icEVoQUMySlpldjBRRUxKc2NkWGZSbndBcVNPYW8vSEYzVXNGam1XTlJqa05XemQ2dU9ETGRxTzYxeTJYSTFndVI1QjhoeWNBc3JhWVlBdWkySWdHQUNoaVp2U094NmtLekNNSXhTUXdFb0YvRXYrSEpOMXF3NXdpMzZ3bW1lWVhUeVF2MHduODBzMFdNYlp2K0ZFNnhyTHRUbmpaNHhVMnJGdUlzOS9SRlhFUTZXYWJiZk1Qak9MZ1c3UlFTdDI3WTY3dHJBRHFVREJyM2ZzZnJKa2N6bWZmdVJPcTkxd0JLVXVQTThoc0FNeGZxUVZkN0pNaDlpZGx0VFRtdGlXOGhNMGtyZ1JDdnhPdjN4UW9xa2IvaEF0ekNOdDVnM1ZHdGVqSmNuYlZHeUJjdm1tVEQyV1RKT3F5b1NLQjl5VGl2Y2Q5ck1aOXRsWWhjcWpzOXBrUnFPTUx3L1dLWklUWCtHeTZWVGo5WTVhL1NpUndaSEM5ellVdjBmWWpzZDkvb3FaWlF3T05FeUtzMTc5clUyM3pNZmcrVEtQem9jMlZuNDVOSndyMlFHUUpabm5QbUJIdUFSZjBlTXR0UmNFbkhkT0VpMW9YM3BFdFUrMGhhMmliRW9tSzJyN0h5UnVmY0w0MmRLbURUaDY2cjlwbWs5ME1idEpjVkx3NlI4WHR0cHFhMzl3SCtER3hET28va1hpNTlZQzVMMGdtQ3Bja1FGMUFNV2R0Y0VRZHp0am5tQmhPMUFUc3ZPTVoyNzIyN25OK3VnSFk1ejE0ZnQ3NXoxdFlrdXJJc1FqbXh2VjJIdHpiekVJSmxXdTZOdG9QUUZMRmhtZE5lRDc5UUtaMGE1ekNFcDA0WEMzZ0VPR25XMEQveGpoaFYwV0NiaE95MTNhRlpmampjQ3ZFaWtBbEJGV1oyWE9yM3NNRkZESEZtbEUvbVFNN2k4VTFrb242TThNOTBRMGZYdlEwRE9KejZkTkQ2WXBtWVJ0N0NXUlNWSmFoK1ovaTJvaUN1L21vSTkzZVBxT1c2dzZsUCtBakMvUW15TTA2WFFuZU9QbVFTdFFjOEdxTWJSd21PeUlLSk5NNmZzbnNCd0FjOU0xNlNVTFNWRnR2SzJkdGVTaDVEbmtSaXdKRDlaNjJBMG5WN21kUDNhT1BURkhWQWMwajl6YXJxUkpFRnpKRDdoK1ZmaUs0RCs4cnRkUGNrcHlWbWJiTFQ5YWNuVitHOFdsNXhtNkUwTmtWeTZJTHhhUzRKbUx5ank1TFpZSk42c1dYODF2Z3hnYUZqOHdrZzU2RHRyM0JlaC9IZnpSVGZBczU4eWp4dkVIYWNNTjMvODZ0SWpCMHROZWVadDFxN1krT2xGbFV4bC9NZi9PSHVuL1lMSnQzeUMwNzlZYW5EUnlGWWdsdnVQK3VCQ3Q1OHlPNnU0WldRaDhzcUpFMEhjaUZIdFR1Qzk2anA4TzR0YTR1bU55dUJMamcwTkF3QVpjZ3lqbEVUc0NZemU0Q0JMbTFzdVJObkY5eURFQkNkdXZJdEE2RzZEemI2R2hzZmliZ0x0WXAvemwvcVhtUXJmQUh2NnB4ZzNHOHZtYXFkQ0pSdDRnY1JrVmF5UGpJSmtQS2d3Uzh6enlLQUd4WHNORm1vRUxWd0xjQ3I2YUpIdkVZNTJqaVlvWis4azl6YlVqRGVFQ3o0ZkMvdkhIQXRBeWFMTVlzN0lHbDZqQll0ZDZUbGs3eTdscitwTi93OWRsVE5OdFJmWjc0OUJqd2dBUmd1bk0yN3BZUDlUS0k5VlZWc3dISVRaWTVNc0VLYmNIdGNqSW5PNng0djZETG53Mmh2eGFjRFExRldBUnJUMG9qcjVNR0VvYUt6MFA4SXd4WkdIQzdWZHZZTDBHVnF1c3FLcFdET2E2cUZjaVl2cHNnMVk3VG96YVNmZmYvWVdxK1R2b3ZKRFJXWWMxek1WcHlZbjM5QWZzNTcvS0xWcTVsVHFESVRvKzRoNElKSkhyRWExeUxmaHF2dzNNYWdNaWZoOWU0SVRldnc2OWNxM0Q2UE9MelN0MHU5cmZaL0tjMlRiMjYvZzFOMzhjcFVWUU1aZEhvL1FLalJtZk1ZNC9ucTBNRlQrU0g1VUdzOHpMUHVrT21UaHZnMVZQTHcyWFNFV0dMUVpyT2RIYlZzZWVwcm1VZEtTL3pLS0hOejB5Y3Yxa0dWUzNneEN1a1p2OVRVUlJQS0RXSGpLNGFxYlM5REVUc2w0UFA4bkMrUDZRY2thUENGME1qNld0TnpRdDM1WGIvalRIRVN2ano3c0RHWGY2V01YZExRRUxNdC9Rd2xUOUc1dGZoWjk2SldPK2Judk5OUTFER29LZjZwRllOWGZDRGR5cnIzS2NyQ1pRVWlGK0lWNS9PYi9PSGxMdjBjZmhldG9BeVBtOHlGeklGUFcyQXpkbDE4ZlV6VzVrZCttYUZKWURKSEpTd0ZRZWw3aERpcHlxMjg0YmE3eWw0Nk55NWI5ZDVDOGRmQ1pnYjhxNVgxNUhyWTFOOStvQ2JUdXhEdkJnelo4UU9kNmU5QWpvSExWdHdTUDRmOVExaVNCY3FtWXJJM083S293ekcwK0g1ZXVsSXE3djNuU0hoMWVwYzBVMFVBOWw1b3k1RGFoWDdCYlJZUURtUTY1aC9VUUszUGROTUN0ejI3MytwZGt3bmEwTXgvd3R4OW9hSjFQR29NeEluSGRYR3lCMlVrMytLdjVsMWdaYWY0OWVRc1BENGFIME5WYU11eDd0RmNFcVR2bUFBdExqdERlTVJvdzdJd3RsWUZXSUtENUdvNmdKamF0bWRTRVlwV0oxRHE5ekJoRHNZMTFmVW93Umw4QzZMdm0zeDNCWm53TlBTSUhQUy9Jb2xtdGNnaFU1VmRDZWQ0Wjd5dVFrQ25KcWJCQXVJd01oV1J0L1pNa0JtWDVDVk9naWtiT2FBbWFnZWxscUJVdVp3VzVNQWFyclFqTHRTQWRSVGwxam9zL09iV2VVL0ZwZWQvOWd2Z1pobmlzcWt3YnpsZ1hGY2RBV1lBeCtiS1dvbWo5SEkzUFROZTExYzYvRWp6cU1VWHpPTVlxWHlRZWxWdWRjMzhpeUtOa09wTFZMM1lTcTMrNy9scHgzaTdqVVRYZ1JDWEhjTXM0dk56dFBzSTlzRG5xSWpaS1pIM25hM0tEU084Qm0yUk9JNXZ6aGJnZUlhVDlrZE5ndjdTME5TQTZab2xmcUg5NjF5LzB0L3p4OHZxMGIySHJ2T3JsWXFjajdPRFk0cnNLUVVya1MrUXRXYTJRSmhkcFdlWDA0dWlUWW1OYStJaHU4T1plMkdVL3Vsa0E0eks3enc5MmdKU3kwMjZMSVpvcUpaVWZTVGV5Y3lqelpOMjFtNCtZTnNub3BmNlVCNnc3Rk1xUkxoa0VQdC9zaDFrQ21OK3VnU1psd3dvUmRFMitwVnFOZ0RMdi9lay9GMDg4TGpWQ0xzc3duT1E2U0JPdDU4aHlVakdwbHVlRTNNMUVsZU9CWUU0ZlRxcm5UVnA1aVBGeGxEU3RWMjJtaDJoSVk5RmlSSWxvZFl2M2E3VERqZ2VGYlAxVlZ1dlg5SE1RdkRJNVU4ZWVOUWkzNGlNd1VmOHUvMHdnYVQ3b1pyY3ZIbXVsQ05ybTFkRWVHUXhwVjFPMUhZTko2VGFMN0JpS1BUblBtNW5NekxiV3RBZmVvWm8xRXlhZU5lM1BsY24zb0xlclJlUExWbzFKaDQvVFpYM3hESWhPdjIzQTgwcVpVMDlLTS96K00vNzI4TzdsT3NtR3IwSlF1Ky9zYlBnM1pLcXl5dWlWam5qaE5uWFBDcW0xVUZkbjE2WUF0S252UllxVlFLSk1DdlRPWXFNeWdmVW53TlVzaXN5STJiNGRCUWd1cjZ4WG1HbTRrQ2VodlhqeWlvc2lBUmVVdnZEQ0pkc01UeTVjaytXa24ydVRhcGRsWU1CQVVlRkd6c0ZkejJoSjJiZVEvZzAwZWsrdFRsV2JHM0N5R2VDL1p2RlBXdjkzRGNMbmtSL3pvc0xvb2lkR3EwcmhBd1ZwbThnbTNoZmh6VURFNzRSVzRWa1dsMlUzRyszUU5lMEdySlRFVnlFVEhuRmhJMitRRzF4UDdqOHFkdW5FS1YzcFJGZVZZVnlHNFUwd2w1di9YMUVPbGpLOEtWcVpQQTFIWmkwbWdqYlpJUlFUdHY5OGdhdSs4TGplNisvRi9zcHorTTMzTWdDLzhnK3UrQkxuSmZQUGhSNk9RWkN6bytJSEd1STNURmx6REpMMUpHcmU4SmlTWW9lemczaXhiZFRHSkUrWk03UkJYVkNSd253UmE4LzN1b3dVSnk2RlhBdkxqK0UzYWQ4RWc3ZjJaeXd3RG9VbkJ6UExhNUVOMHEvemtLdjRwUVoremhtZG9TSTlTQTFNdVNaL0J1eHpmcWhaL3Y2TjlkelptdzMzRHczVWgxd08zNC9aNWs2WHE1NWNibEZWVFlNdm1xQWYyU0hpNXFmZDdGZmtEczY0RWFJQmU5TlduOU1aZGY3RmdLY3lRYzNKSGtuRnFEUjd6QlRPMnBIbFRzMzJ5WFQyOUZiZWFQWjJSRGovRUNTZXdwTmJUYWVuQUhyMS93dWRVSzFKM1lDMXZxVzY4ZE54cU4weDEzZmthVXE3THkvUVRLRkZoa1g2cm5VSzdEOTBQa2xwYmZFWTlRTjVBNTVRYk1jaXlvTFpmbUlBSnNkY2hTVjkrSXEzU2ZVdytaRmJkd2VOUGYyRUVPcXErcmNSSklxZ3FtbjY3WTNLWlF5MWZvRHhLQkpsbFhWWGpucE5tWFlqQy9sMktYTm9yQ1AxSEU2U1hlZzFIYVpYRHFOZ00zQWp6dVJPSDNTM05xRVFzREdDVHV2Vlk1akpSZ2wwVWJIaEx5eE9pVFNFaTY1OEplakxlTGZ5QWU2WTZCK3NUTk5ZQ1ZKT01mbVBxR2cyTitOc2RxTHJPTERraVBobEpvbkY3Y1Nxa1BQRTVhK3RXQS9CdmdmYjlJdGxva2xRWTdKTVZWd25IUTBjUFNoZlk4R3o4bHpqMkZnazZ3bFBLVzg1Vjk2R2FqcGx4bkovckQwTlVFZk8rL0lmNkZCcXNBZnhNT1hGWm1acCtwS3lvV1Y5RjZKMTQ4V1Y2U2pXR1g2Vnh4WVFxK0VRc0xQbDJWMGNGdkorK2QyRmE3WG5VaVFPeGlJT3A5aGVQOGVOUytFWlgzS1JPU0p4blJ3bGd4VGRIMWYxNHlPYUF6RDFPUVIrYnJqTC9vMEQ1bU9KQndmTnlRNVpTMzlvV0RhcytBUzhacmtrSVlnWVpHUHlMMGF4T0RENnVYZHhWTTlJWUhQc2lpaTZ6SFJhYTk5NWdqdXBKeEgvSGE4M01ob01UWTdScFpaVEN3NGxDQklCQnJKWW9GNnRWVzROL1dETVlOak54QXA5SVJaR0FKUUZ6Z0NRcnhVckFQSnBwZWxnT05hSUVhN29WVU5JQmtlYmE1NWtEaUJXbWJZR21QaE45cithZjRsbGZ2RGxmNVh3dDZOOHJLTmg5YjViRkRuczhGc203N05zbEI2dCt4RzVkQjVzeFE4RW9JKzVxZ1FqM1lwaTRqMG0vSmwvQklqaDEzRlN1enM0YmY4M0hDdUVyalp0VWxiWENCZlVaV21OQTFhQ0hscmRsSGN3WHUwOCthTjhwcUlGelVScUpycDVySktmak1WYTI0RVoyNnYxSjNOa1V6VHM5TFh0dm9pUzhSTk0vdDh6UHRSRmd3YkpDMWJLWmRtWkNCL1k1U1dFaFpMUGZMZFkxVHlrM2NkeENLZWRkUHZxZGc5MDZWb3NkT2gvMFowcGVSL3JMa3hTL2FSaGpZMTc5b3Ywa2s3a0UvQVAvQ0pYc1cyWnpES2NoM1dEck8vS29kU0t2STFFeFZhblBualR0aThqZDRyeW8xSEZVczJLN2pNT2dUVDEvTU9XWm8vbVBCeFQyVnpoaSt1d0RRUGsyd0tuK0tZQTRCSFhFU1VRQXpraVQxV0tIVW1RMTdENHIrYndZWVVOcWVZNk1xVFlXYWhoNlA4V3FKaThyOStUQTdIMWF2VUNHSHoyM3o5SnEvYThZOHVwK0FHNUkzckIwN0l0dTdKUjYvZ0R6dStaTDBlV0p3QjJuZUhBRG8wb2JWQ3BRNkZ0N09TWSt6UzltK1YrVDM3bW1CdVFSTExSVGZlNFIvQlVKbWdxa2dvWmdOK3BFV3R2QmdncHBUN1IyTVJYMEN1OUszb0JXNDFDalAzMzhmWlJvaEFLY2JubmJJWEVBVmNpbzBGdmlySENKc1ZLNTZNU0UrSHJ3Uk1PcG5ndzMxS2ErZHowdFR0OVQxaFRjRytVdFIrV2NZWWVadW5uSi9WSVUzUUdRM1hnQlY4dEliaE9LQXFZZForVlg2U0Z0cHNsUG10YjhaMW12NHRJS3JPYm5zcFVJajQ1SWtxQ3V0U0doL2lJcC9LbkVZeWE4S1NrN29BZ25pZFV6SmJHVi9qOGtRRWNxWWNwWGZXWm1IVEpMZ2g5R3orWm1NR0owQ3B2VkJBY1lXbmlqcit2WXdZUCt3MXYrKzJZOFA1SjV3YXFoMDBIV3JRbHdQRlRKVnFhd1FlZEFObUxRZjd0azkxTDVielZxNjRvMXhqdjVPcnF6MWlIVHhpQWUvRVo3RFNaVHRldmdYSWFXcHZCS0tSeWNQM0hTeS9jUjdHcjhrbTlRaXllNkMrYlZDcTM4Qis1ekxPYjZpOGdNK3JYWkdDRnc0MkVNTTZLRnRicFZnV29uRGVxclpaeU9aeTZXYWZaUyswSy9rZXdWN3BpV3hudzN5MEhTbVFtOFA3enEwVnM3cUpjT0J4Lzg4VWdUTnJwbE9QeWZaUXJFd3EwaFZ4L25UdUU1eUd2ZTc4SFd0aFhrRWlSeHhKQ1hDS1gvcXZvV3p4eVNYZEVQMWl5WWJHa2JtbmJibE8rWDl6N0poNFZPOWJJSlVUcHJWOTJab2Qrdi9Uc2hsQmZhREpncEVyVm16N2RKVXlhVTNuK0pXNmxpS2RWWGlOVG1iMWZkdDZYQ3liZTYyWi9MNkxVQlhPcURQR01SVk15bkw4YzVWT0tOOFhzQkFqQTI2MHAyeEhQOHJzSlU0QlQxc3RVL0VTTVlYdUZxdXFpYWtUT3Vab2ZqSytUbWlMekdMZFVCcUZaOEZIYzJGZldqc1BNR2NTbWFWNzhYK3pKNG9yTDB1MnhFdkZIUGxzWjVhbFpjaW9KTGZyWjA5SlMvUTExZFpjdkVTbUVxd2FnMDRVOGc5clRodjlCUUNER1BhQmVDR1NPd0c5RWN6SGVocmVPZUdHWVE1bG9iL3lqV3JPWS9uT2wyMUg3cnBkd05FZzQ2Y1hpc0pVbGdkSlpBWEhlcEZMSUw4bnpLRTNGY3grQTh0ODdFZzNzVzdVcmFlalRTOWtjQW05YVliL2xlTUJqNE5nQXRXK1pEbzMzS29mdGRUcEpuUWtUaXpBKzRPNHBPMUJYVjNpZENXRHg3YkdvaGhMV3Y0OWovenNtQXVVWmdiOWN5VkozV0M5UDEyVURsaVJtSEJwaEtZM1Zoa1VLK0htWE0xMitLdEY4NytPWDc3VFBXdU5RTFZYWkNvWWtnUGlKVEZnRE95ZmY4ejVGNUtFVUdkMXdEMHYxZkhEK3lYWWxvU0tCellHUGNQS3NTQ2hiakFQN1RTa2ZmMzlOSStWalZzaWZGQkVvQ1ZIT2lBQ0c2REZOOGIyRlFkMUd6V1phdUJnRTgxRHVFYjExamtTbHFnQlVZMGhuekxTQjh2VmxUQTRmZjQ1U0NtUXNtU0JlUUNVY0ZCaVhpWmV6bGdINjVzNzhFbHY1S2g2cHY5S3ljTUNacFlESS9yZXQwN0N6ekxuWS9GODRmT1puVzJGVWNkSG1PcWhxR1pVczZrWUxObjFKaTVmU3hoWjRpSG93RjJjTDgzZFk1R3BGWG5ySS9GUDF5M0NxL2QwdU56MWRJZ1FFczBxdEZrWjk2Wk9XWWZzNTE2UExzVjcwYk5nYWVOSVB6ZytsQkMvemVMTFFZWWFsWVZJQ1piUmxSQTlqZk5IQUZqekVDZkVRTXlYNVh2NWMzSWx1MmhvaHNZQjJMbHlSa3czVURMcHZuUnpRckUyZFVmRW9DcVFpcUV2c0M5UjdYaUhNaVRMM0tOanNNRjlCY1dJVlNnL2ZKS0x4UTg2RTdCbnBHVm4rY1ZNRXpMZ0xHZjg2cms4Y0RhdVNkR3N0c0F1ei9WcG41U2Zqdi84UUZqK2FqaU9icXZpZkRkUTNPZUdYa1JBTGhOZTRRSkdMa1V1SmNOeDF0S2Erb1hXem1TaUVOaUJoQUs3TFBlYnMwaExvSGdmUXdKdUloazJmb2tVQUE2eHdVaCtIT3JGdDd2Y3JFUElmNEJtaXNkNzhTdkRRWTN1T0lqamxLNlh5TUdxN3V6K2lqQTB4YWNWeDZHTFczZnJKSVZRQWZvWExnUDJ5bTllSXZDci9hVG5SQ3BqTW1LNGQ3VkhDMHV6K0dBc1l1SElLaVY2ME05d0hla2VGMFVhRk1HZ3BzNlNrUkg4UURJallyMmljN1o1c1lvUkRiQUpmZDROaEd4ZzZzbTc3Mk1sZlQrdEh5eEtMTjB6SjAyb0cwSEh6UjF6WnJkaVEvMFVjNUlkeWlvbURwZjA5M0IrUmRSdzBUdHNOenRyT2p3d2hHeTEzNDFvblVQa2x0TFRPQXlYTEt0L3IyVFJtYnVraHRGWFBCM0NiazBZUlhlWWUycW10UTBpQ1N0OFZ3RkdwQ3FwbUNyTlVXaWh0WGdncWtKMnVDNmQwOFdmUzR2UWxaSDRySnBOb3Y4NE8rWStSTnZJbFFkSjBCTk14b1dUdGt0S1EvbS80bUwyNFQ2STZSWnVPTTBYTTY1RmhSaXdDdXRVeUhZbVU4bkVmSFM3a1JkSk5tUENBU0d6UUd1WTlVbm1ZWVpqV3cySVFnY2FmQ3RITytiOHZzNjNiVDNKWlQ3SXVaVmJJMG5aTUo0QlFmVVVyY3V5eVU4eWw1TUVTOUdwQ2RTdXk3Y09XUnIzelpRTzQweVl1WFdEeWVJRkI1SnlJWVlBNjdQM2NLQ28rcVF6VVhuby83eklNTU1vdzdrZW1GYm5aM2xEWlk4bEZ6OGlPUEkySGVkUElPNVRlV24rSmwvN1RHN2dwOTR2bElMUmNMUkI3QTIyWTM0dWZKM2NOZzgyZ0dzOUYwTXMxMlVvZmlNcG9nanZ2d0F2bjRoQ0RyN1Q3OUlaemlxMGtZRitkUHRQVnRVZ3dFU3dBSFIwY2JJMER1M1VzUFBYeTFGdzNIMHBDNU40U2U0ZU5KYkhzVTFJMEFrazJnM29WZm4rUkZZemVPSWpYMEh3aU5SQmpDSThGUWtZZ0ZJUC9aWjdDMDdjU1VFVjBOajhicFJrL1Z4VGVzRTcrR0JwNmQwRy81WHU0R3hNa3FtSU9UcnRNVmlLSmFnOTdpZEVoUldzS1BJL0k2UVVQb0dnQWZRZXVVVkkwQXlaTGpEL2xkc0t2NUNVQmc5UlJQc2RLNk1Nb1l3aFNHaWJndTljdWhZK2FKcXB1MEtMc0YzSWFRWlE5NG4wczY0VmRtVWQ3dmRYSHB3cG0zY0dueVhGeWFaaHE1QUw2QmRiRmp1UzIvMkJGOEVNVXd6aW5wOW83aFdOdE1mNHlCNmZudjlqSnQ0d3hZS0p1REc1WnN1Rk03SXlvSDgvVTNhWm5uNWUrbVdKM2dqTk1Rdk92V0lmWVMwcXJSQlZVNWx1YUMwZFc5NFlRVlNuYVZHVU5VY2VJckRpUURQSUlRRGxzcFk3YnVBcXdaWk5iTnNDMnhFQjVrM0dlZEhzczZqekNnT1dlajFIbmdoQ1JlV1dvYzZpYkpyV010TW1FMDVuL1pHNzgwU0NsYjZIZWd3aVBSSmJMYlpaMCswMXFJOHhFS0E3VU1nZE96Q3I0eTArZVk4aEJmRmhZWUphOWJxWVMyd2RoZkVFVjZDWlV2Vyt3SGIwc05CYlQybFBRY1BPQ3hWUHFFKzg2d3RRNElTOXZybmdadzdiYkExLzZmVEVpMFQ5elI4NkhWcDkwd3F1d2p0cmJZOWRxZ1MwSFkyM0l1dFJLUFB2RG9leWtZSlNMQ29wVVpoWlJhRExMajhoTlV6bHFUMkcvWnNxWDN5ZEZDQ3lxbG1heVBWWjRlWGx3RHdPVFUvT3JJN0lsSWFSaFRPZDJTVGhDRTQwRGs5RDVrdlcvMnB0MHYwWXhLYlF3cUJMc1JxeW8xelpjemNaV2phNUNxYWNjUUZ6N3F1eERuTGFZL1owSEJwVngxSnlVYlJFUkljK0tvYzRxanAycUNuWTRGWUhoaUVPTHZZUVBtT1QrZGJ1QzJDcG5Wd2JDQ3ZLVWh1RjB4MWZRbm44ek5yek1GM09rY2xickd1OGRwYUZpRzdhTUk1bmVPUWdmTnZVOFIyYllDaVpJci83VURId3ZkQys2VXFPWDRha3pIaWpYekVWNFFWZVgrTEJJcnhKZzBqOG8xZnFjRFgzQTF6Qkp5U1llRjR3VWlJSWFhNDNXVy9HbnM5cVNMRENVYmxyZG9RVjNNOXJlSzlBV3dYbjhlK3B5OEVXYVFoTUxUaVFieXY5SDhLd0ZsU2FSRVhNdjlmcXVMUDk1OUtDME5TTkhiOVQ3djA1V3RxMUtNZWhaZWdpcGR1eHU5eGtpYkVQOUtsK3hVbUlpWXlyTlVyWTVqbHlKdFBTMWR3VDc5MEhydjgvblM4bDVWWjZxVnRHMnJCLzBxdHVRWjd6OHFlV2NLelhDRjRObXBnNEN1K1dzSU1ZYy9pYkVkK0NHbUVHQklpZ0k4Z1V5L3JxWFY0dkVnaEJQaTI1eUZWb1ZTdFVLdFcybFZFZFNUaDROSS85R2czM2NWRFBxWmxqZUdtYWtRU1RNMXBqdFFValZYdXZCUmFjRitVMEpyemtodzR4QjlzaWZZUWNXeG0wOXViWXc3SVVwVEk0aDNHZmhtNkRoc2w0YmFyUlUxRm5oQUtDZjNpSkIrWFFPZTR4YVVnVTRGT1VaU0JUTzVsb29zeUdQOTNQdlNaTVAraEhZUTh0aTNSdkhmWVVqVDFNZDM5NDJvZTRIdXNpTDcxRE03dG84dWVSRjFJci9CQXpIRkJNOHc5VzJTeVFUemQyc1JwTml1ZlFIeGhycW5aMGxPWTl2NnZBd00zWW5jUUd5V3ZJTkRmOXBEQVpqUFZuNThOU0Q0NVVBUU1MVmNHc3NaNDllQU1YelpaZGwwY0xVeW5MdXJqQ0F0TlpEWWRpbHU4TS9OQVFkSjJXZmllTFY2S3k5Z3NUaXQ3bGNRS0RFeUhFOGlXNnkxbjYzaUlhODFucXJwM2dhc1ViOEFJZDJma1hHWkNUWUg2MGo0ZFVaRnFia1ZFMmd0azZoOWkyc2NvOEpJUkhJNVc1a3lxaEVqUmZuZEg2ZEJRU2F3MzYxQTJ0VGd4VG00WjhOdy9wVldVdHU1VHh4VkZPZ21UZWJLQmZkZEFKY0JXelkrZEd2NXhRSlRtVUUwc2xIQUpQRXVaRGM5QnpSVXh2bjRiR3gzblN0TW9BSTUyWVdzQ3hCRzFjS1FiaGtQWWtTSFN3ODdHcTRwbktOZFRwUGZqKzhHbkNPVUtnd3JGSXMzS2NqM1RWTmtKbnhFVFg2a0xoaDNpcmJtdnZZeWJwdHdRM0ZxMUZ1cXRiZWFlZ2Q0ZGFESWo4NHhlVUg5R1NsRXV4S1pvWm10eDhMT3N0YjFZMDZFdG41SDNFRTJZR1BKV1gyQXRMcVFjNWJHenJnV1lwQ3BNd1U1K2d4azBYZk5TWDVTbWwyTmxlQWZjQ3AwZGwyZytFVnA4dGhIbHZXbVA4dFBqSjJIY2xhME9CcW01dTlIcUgwcDhNem5vODRsNzBlZW01QThxUzRVYTRjWmxiMFk1TFBLd1RCb3Z5VmUrUWo3MFdmTlF1SXVBMjhFSzJQZ0JJbjVURzlFUTk4WTFscXY5OHpMVFUwNEsvQ3NHdVVmVk1tajZibmhEVTVuby9Od2crbmRKSngwc0ZMS1NEL05QU1FvaStodW1MRnVqYUIreEVJWTlDa2ZXMDAvZWROSHQ3WklvNUd3c2dOMjVKMUhPTVYvaDBzbzZ6UVM5VjFVSFVPdzkvZmlLWE5Wd3VoUmhxRlZHeUx0RDh6NFdDVHhjbHJ3U1lNMU96b2p6cTA3SGs1eVcrc3IyRUgyRDYyWW4zeHloWXVNTHIyTjlEOTJQdUkyb29jMzhkSVZtTnBybkNTb1c2VitpZTNZbTY4bTB0UUdoblNnbW03T1ZZN09Fc1RWSGx0WmFJWm83cHdRV2t0cWJvUGxuYUR3Z3Z1R0ZCb0pWMmVZb1hQOHRiQWswT1FKNFFLRzFVZE5NcHI2ZHhRbTErQmdGTnZQdGIxSm9keUFkdjRITU9TbGRYRW81dS9OTmllNWlZYjFWQlFibEE1QTFWN2xoZUQ3bXBuZVdxOTB2cFRydHBDYUU2MFE1NFEzcFZPTFRVU0FrR2hOYzVDVlpFREZwWjNVSG5NNTB1U0QyWDErdklJQ3YyU2N5ZUx4c1RTNTZkVGJBcmxHdk5heWhCL2tpNXc1WGtaWXBaTWdDWDY1NmVpL2Rhb01hV0wyTmVaUDNCWk1vMUlYVWxPNVAzb1RSOEMraDNSTmN1WnR4SVVKVW9lT3J3aXdtZlZKWGtFeEFBaWRFNU8rNUF1MHJyQ250R2pFY0hZYmovT01ETDFRYnUrV2FYVWZKbUsrTzhxRWZMb0NQZ1pFaXoxTDNDQk1sZWZ6Q2VPYmVTbGkzN3E2ZWsrQXZYcWZseElOWWVmOHV3M25UUjZDRXI2SCtsTGU1N2JsZXNxK2p6M0FkbGVvNlBCcVVQNU5LRVp0RjJKTkY4cUZxcHlXWVhacWtuaHlIVVJTOW5PMEE0c0FGTjVhWThOYXRMMWZDS01OMEdjZ2JxRnpuNW5uWnlZT1psdmZ5RFVGUmplandEaytVQUhPTEdTZDRXWk03d3FHN2RwTmxVbE1kQ2RMN2xYWi9MSGVuWitMN29WbUhWRGJ2eTEyZW02VkhsWTFvZHNDRlRDeExMTlhGR01HS3oyYWxlV1A2UlUyZkVnYnJRM0RKSEZHNjZQQnRuQkhmQ2o3M3ZJOHQ4OFJNV1E0YTJhU1JoS00rZng5WGRsRHpXQXRNbmY5SGNpVkpleGdiTFNUK24zR0dFVnQ3V0FNdGRrN3hUOGNFUGRxRDl0SjdGYkgyNDZEeEl2V2VCVjRVeU94T2FuSUwybmNPano1cVNTcnQ2NGJUdE1sVEtHMjJHU3duT2VKNVpNMlJDeXA3dmY2QUhzU3VHc0NrL3pINUhGUWlnNW9CS1dKajY2N0dPdW4yVy9RRGpyeUoyRmZnaVJNOEFpTFJ0TlE3WkJZbHM0UXROUjFyTXFBZENGc2M0TG5MTk9xRlcxZGVwRU5GZ2xDZW5nTVI2MlFpUStMQ3ZaQXcwUUNQcERwcS80UGVQc0llMUhkc25sbzBKcTlITEcwbFRMT0M5SE1pOUhiNGRmdkRlSVZiUmpUVUFKa3dTeFNtUEJqKzRYMW9GczRqRUpKdnQ1RHptbG1JajVWSW9velFuK0RpZGpkaURiR2dZRjZIUitPSkdKWTJ6Q1JmQ3YxTlBjU3EvQXRpSUZkd0hQRWp1ZDV6aGYvVUJCU3VTZmp4OEZxYTdQT2FkWlpjR3RXMW9SRUtYUzFseXVZSGVWRWt5MkQydjdkcmNTK1ZDbHZjdnNNNnZVRUxJUjNaKzhRNTVCdFA1UCtuWlNnL1EyMENWRVJrZFkzQStHbktZNWtBWEFaZm1ML0ZxSzNKUGNBdGZ5QkswVGE0MDlXRlRlZGFBdHI1OTZ5cC9oK3o3NDVCVHp2dlRhWUl2eVlTd1pMbHVwa2pCMU0wUEdKRUp0RkdrNklYOFNpY2tMZmlYQ2I0QkRvakhlVktzakE5dTB5bzk3d3hzek5zWkNaNFd3eTBLeFAvU3ZycFNwSTc3NTV4OVMvREpOY05NLzJsY1Z3QUhOQUNZR0lHM1MrWlpWSm84Ym9QRVZ3eUVsSVV0QXhuODdGV29nUDhObGNzTGFLbThsaERLb2RlMndjQ083dW5LS0o1TVBRZWpKNUplaUdkTmswM3RrL21DeS9USXRpMi9jb1QrN0piY2hwL05udU5ucG9NOEdzZkxydlBBbk1JU2g3aVRnamVybm00dE9EdkgvRDBrdkdXWWRWUWFuRG1vMkFhaXF2bHg0ZlphU1ZXVkwxODZxRUdqdXIvekdENkpLQlUrWVRXelA3Vmh3eUJlbVpZTTM3Qy9IVnY3WktML29MNjRLd2JzY2hqWjlvblJENHBXK0RjN3BHaTRNSWc5VVN2azB1Z282bEltOTY1Ukdnako1bCs1SGV5OWpMSlJSdXBKS1ZtdUxMVWZub1lTR3crbFV2RU1ReCtkVDF3emc4Q2VzVEw4NjF4YmVNcS9NeE1qUGJIS1hOdXdEb2V3OWEreVg0dUJSdlc3bEhGcmkxaFFKUW5Ra0lXeElBZHRjbmtyRGV3WmliTldLbW9mclFiTmV6d09PRkpmQjh4ZTA5amRUNitlQnNpV1Y0MytCZTVYL01raDdDR0lJUXQva3Z6K0VwSGhWS2IzcDQ4c2pic1ZBcFZBbWtiLzZTN0V0NVRmZTdoN25wZkxaR24rM1M5T0JhWnhYWjhvMXY5SW1TK1NWQy9jWnh0R0RPMVN4OHhXazVJOUpiS24yZEZqY1JkNkhGc21wRnZpMnd1bit0c0NWSStGMUg3OEdYQW9ScDlVU3dIL1hXU0w1S1dXNnJxWENGMmVHZEFPMXM0d05FYTR3RHh3T3IwRDNGWlQzZytoU2p1eWZjZU9WYUgzZUV3S1czendvZE82TjU0Sk1GaXp2ekhxN2FMM1RZY1BoQ2dsZG0vQThCU2RyNjFRd0Vtc0swZnBINGtDb29VYmZsZUh2ZGZMTFkzbmVxYWFsWVBoajdOMmRad1FyZTVBT1g5dHMrMk1JN0I1YVZ2SXBiTFRKOEEyVTVMWjFqcHFWbkhQeFRVbkJ5QVF6SzRzYWthOWxZQmRlNlFGTnFmM01qcWR0SHlWQjBKbUwvUWVjeFA5SkZKYXZocHNhbHNSc1NJVWVFanlVNUQ3aW5lUXFGY2FKclUrdmZnamJ5L0x5R0tzdFFRNUdpTWlSZXZUUDNHd2xmUi9xU3NaWVJzMkFzOEdrVkYyUk1kQzRNbzRLeGxDczEvYklTTWRWQUEzTm1hUFdUOU40eTFuMkJGK0dMcHYya0Q1bVc5SUpFQkp0dFJXRlR2Tktabmg0VWlVNEZkenl1K3p5MUFGY29HYnE0QTNzQk5qODNnTGhEV2hZTVNxRHZTdXBFeUdJR3VvU210WVA4b05GKzZtOEJHdDByaWttckUwTGdBc2tTMFFYQlJWbDhpUnRPVDRnZ1lmaFR0SjBVMmRSME44UG1INm51NUJ1STVPNCtjRnBRVFBOZlhKWGZJSU1lR0paT3JNa3N1R0N2bVBEWDhhckUvYi9Dc2NRTUhLTnNBc2Fxdjk1RGNBbWhRZERJYVM4TVd6cG5RSG56bG84MFphTmhRb1ZxY3ZmbmFkVEFxNW9pK0RGQmJadmxZbm9QMENhcVYwRDNvdUg1V1hsSHpKMVpSRUg3TUpJQjA4LzEvc1FPOXRMRUhDUnN0Z3pMd2JQcXRYN05adlNRME9sMUxFdkdsVFZhUHZUL0VMT3lNdVp3SXdqd01Cd2o5Qi9JZmNkaWNZN0NxQ3Q0YjNrNXpubDVGTUsvUFF5MktIN2xudGRWVWQxNmRZcDBDNkgzMkx2d0NFRXhzcFgxWmh6dnpPSExzRDZ4cXg3ZEx3S2d2ODd3b1BEeHVKL3kyUlJCSTJ2TXdsNklTcnQ3VFBwTVFJeGMwbjBHQ21RUTJacjBobXRFdEljczB5S3FmNCtXM3llU1hFOStPcXYvM0FmTllHS0VVOHVCVVpLM0toa1hCSk9kNVRFbXY3OXBkS3JhTFV1TURtWTNIS2R4eHhEb01YRHFzY1JkLzRFd0NSY3BrREZuRTEwdGpmbS9pZE84Sm9HSmVkU2JWRC9LNVViM1Q1c2hubXhFdjgxZStTaDhGMHhoK1dDS2RrUithRUxxa1dnTGMvR081ZEpkcU10YzRGT21lZnE5RGR4MTVSN3VrcC9FOGxweDdzczgzR0VBa05MR0NTOC9hSEVnbkt4T2ZGZUQzKzliV0NqbDV2Rm5uWmlGSDQrQ1JpY2tJTDZVTEM5UFpnVzlVWm5RLzNRR2Q5czF6UndTQVBPTlpQQytCU0YxNjY0RU5QM3VRTlBpakF6UER4cm5iMFd6bm9tR1hITVdiL21DVUFybTY2Um8xUVV4T21iR1RHMXBWZjhGQ2p0Tm1WY1pvZS9hOXhIMm9rQkozOGhJdTNhcVJhakRSNzl1dnBwRTl6OG5MTURKbWlGUVBnRUhVT0taZzljcWltUk9zQjVaeENFNkxrcTdmaWFKaW9naVhWM1ZybWVuNkFuMVlnUEc3QVp0bUtDai9zT0FYNVViVWZqbTY0ajArS0pWM0I3QkV3dDUyYVBSQmJUc2g4ODJQOTFLemNyWWlJOU5ZejJFSlpQbXJDYzFScUxGVnRoNDhkTVZ6eENHb0pYOHkwd21ycDJDTGlmR1JQUnBCYmtsdGx0WHFOUnlOVTl2TEJLZFpkQXkvU2hvQkViRHJMRkN4eFpPczc5SGgwZWhYYW9HMUNIWFBlYVVTK1V1RG9WVGtLTEozcU9KdnJFWEFxQlE1cEx3TEliQ2w3MnVnYWVkYWNmM2ZibjJJWXFFclRwTnlzOUR1UU9jUXlFZVQzeExRMURrYmRkRnUrWUQ3enREejBVb2UvVERreFllQmRibWdrdEpKVXphblNHbHhZT3JpVWFhb0g5aDRzcXhjZHB0cER1c3VnRVVJMEN5UjFacmk5ZUhnYmxONHdkZW5XRWllMThCQTd4Tko0aGwwalhlWEJLQ3I2YkFVbWlFNk5BT2FlZG5ndng3MElmdjB3Wlh2UmVRWHZsdEJUNW8zZ3dWMVYxWEp4ZlZnd21KNXJ0WDUwVkc3RWEyMkFaWGpZdjMwR1FKanhyNXVueVdIWkdKVlU5TVNRbm5FNVB6SkFXS1hSU0EwaHdQZFgrWmxiNU0vWmpiV2xkemdvZ3lvRnFya09zQ1piZDgvNTYzNjJDdGJFNTJLem42MUJxMFpacTJoZXNSdWgwK1NRNE5mT2ZwTTYxOEpWTW5hNHlzaTdPa3JuVkYxWitnc0RReVZ1ZVEyRGVXRVdnYXl1ZzYzd21NVkxiWmxsU0JrSTJIZjJocUJLRVRKc3RNSDNnVGJyV1N5MHM2V3kxdW9PTVlDQ3dSUXJCQXhoWGRROEVuSVhSbHlCeHVZbTkxZzVSRkRLS1FOMzVLWmxZSXNKVmVOcFNHVmtUNWNWV2IzL2pjaEs1bmUvUHhwSVhPNlNzRjRjaFBleEZZakdjQmp0QU5VbHdONll1bDRDc2VnMnhoNkFGWXhpekN3RHRSa2xGTWlRekhoTEtUUkp1T212UFY3Y3MxMWhZakxXUDR3WHdCQjhXYnQ4eStHSVVueHRPeUJXT3daM1BoSXUzNzdPbU8vSjJKSXBZM0JnaHFYQm1zdkdscHFoZ2lTL1ByZHpBYTM5QnJDZThiamxyb0FqT2JETVJGQ0piaUdXRUZ5QmhDK3BuUUo5V0RraU5YMGpiL1U4ZTgzREdRYnFNLzNHZ1l5NjJOWlM1VnQzeDE4OUNJOUFUYzFXbUU3cHphUmlqL3Z0Mm13cENmN0RNTko2OEl4NFFVRUd4dXFvelZDc2FBZyt5TjJPTk1UdWNuMkFKR2lVdnBjRVo0RnlPZ01XNk4yTkgvQlpueFA5WHE3VnFWaU5WWkFKcjBoclFRTTU0SXRTY3RrWFJ3c2JQRkVzb25RcmhmVVIwdGwwRWlMU0N6YVRVWldZUnFOSktRbmpwWlg5UWRZV28wS3dNdmhpbEprRllIZmxDenFWNmErV25jdFN6YkZubG5IbzE2SklhOHc2cjRFcDNITm1zTHF1QlU0NVgrRUZCS0hJQXUwZjBpY29kTW5GeFUvOTJHZFNERDhyU2FoR216NnV1TkJCdWFUems0cFFSM1hEcjhvd2ljNG52Z1VtM1FxaFc1MjZHTjgvYTFDL2g3M1BQZERMSytlKzU0TngxU1g3RGVTZzhjcUlHVmJaWE1EMWhOdXBBU3RwSWJGWDkwL0V6bDUvSHlBYnBRV1lMQTRqTkNyRXc0YzBIQlp1MUVGQmNrZGwwZ1VtUHU1LzU0L1FBa2J5N0VkUFNzK2IvTXIrWUE0U1drT3lsTzBONHlLeUtPbGFnZVB2SThhOTJQSkNQb2RLdGRSRklpY0c0R1Q2N2c4UGh1VEpmK3JzME44QzNlWXJwK3daaVJzbURza0RWVkFPdU5kakFIWDB2UU0weTBIVmlWSjQxZU9neVRTTzhzaEdWVENuY3FtQkZScm5pZWxTemNtSnpUQkxQZHNJOWpNU3hyangwS2dWd2hrZE05V2U3NmxLQk53TW1CeDlXU2x5L1VtYXM3NjJuTG8rcUtXSWFHZUFCUEFXTHNkODc4dEN5OTVuOGgzNVdRWEpCbkZaQ3dQbkRUZzJmNjRkaFkwSGVHOWtXbjkxU3NYNEswVkRBbEJTR2JleWd2VXRvVlVVZDFSQ2JwVnZXTkhTaDYzTmp3TzJQdGdveUdqMTFvVmJPR01HMVVITEhPSFMwZDE5RmtuYlU2MEg4UWRtNFhONFJycVV3aXM1Q3U5NXZQM2RIbEthRWVHK2xBQkpJTWxnMGdIY0l6Z3FUQmJjeFRKd3hGdDJ1d2dmdWx0Z09UQ3o5bHBuRllYMG1hdDJoUVlUbXg2T0NyK25KZ3R2ZGpzMURsOGJBUEdtUjE0OG44Rkg5SEhCN2d1bjcxbll5VmlYanZBeXhKMGJaY29HOEpubi9YVnlyVnh6V1dQazVwU0hUWERYamNoLythY050SEpxSFFlKzBlajl4dXBJY3pRNVovZUpkRVM3eGlKS0gxL0hocHJCMFNGY21aeThoT3pxR0R0NjczSnVzNHNDOXRQQ1N2Ri9ja0p0MnZFTml1bFcwUCtwdEF1MVN2NkRZdWk4c21VZFlvdjNjZzBTZmRDSXNRZUpZdk92OUNxcGNueElSYVdiWjhEZzVBcWxzUzY5MFQ0cW5nMDhkNlhrOWliMC9OR0hrR1Z3VU5CSnU2K0dmbmMwdnFkTXdQRVhVeHp0em5NUjNjb3VQYUFyREVIeUpRVEU1YjZJbTRXaExqSmFWMUpBUWYrNFhna09YK2hYT0doRTExY1FtdE5TNHJNZk84a2NDU3IxUDNCL1VCcUlhUWp0elRsWlVNazRXZTloZGRGMXlhNGVocUZ1RzFVdXl1a0l3U0RwWk0vS3dyRE5KcmNra0xYYkl2Nm4yMmZ3NXdUSWhtd2VKTVdXak9vWUFTZ2xOSitPK3hJdU4wVE9mQXc2Y2dSNW5zSytVd3dSbUtTOGxNZmdOSmMwZG53bk03K3ZzUVpaeFYxQ3VYMnl5YW1ERGlySnArSFRjdElIOHBaZ3BrZkpTV0FuSHZ3U3ZLU0hrYkxLaGtOOFVVZGN2dWgyblgwWE16UVFac1NkSFFVYy93N0YvZ2xGRUdXSHdGM0ZYeHc3MFc5Z29pVWdoM050L2lGSGYyOWJRNSt1Sm82S3FxQ1AwWTdRTjg1NDA3cGs3blg5bC9YUEFQaXVOc3J4TmVtcGt3THFxUEp3MXpYYVpYcDF5ejVMbDlZeE50Qjg4MCt0RjNaekMvRmp3WjRSWTdEOCtoQlcyQWxWSGpBeWFGVkpueFBWOU42c3hXa3BXYUp6a3JXb1Bjd25hdTNrc3pTcHk0MDR6cHFLeldYTzBOdEFSc2FzcDA0T2Z0UTRtaDA3S2cvWS8zVmJiNUwyN05WaXI2Z0lUdkU5dk9CYmZFSzNBcFBVWFRsbjRlTUFrMmNsR2xJY1JLdUE1YjBJZkdPUC9SM0xTWVhvZ1ExZlQ4bnphRUdSNDgvOGlka1Q5NG1wK1oxT2VyRkdqQ1dWMUxQYXZHMHlQaXhEK0F5cDlSUWlmMTNxcTZobGFNS3pZMlRzOWpiNkhDQlVhWmJMVzdXcHVqNWhHemU1c2k3OGc0Uk12SVlPdVRaczZ0VEE1TDI3V3p6Ym5wL25ucHlOVzBic2J5N2l6UE5WaTFqUnZWZEQxVXZkbjhUbXdXU1lud3B6ZkloLzdhUEVrcjBrcURSSnJTWXNKM2I2M1B3a2xWekowT2RlWEdCTEkvcHQyajI2Y3VVZG5DZTZpR0hlLzZad3Z0MU8vRWxmUDJ1VWlDMS9XbnhtdTRoME16RStXNDFWMW1rMDFaQmc2R3UzNWpwRndWS3JJZ1Z3L1lJR0hsNUJscHRlNWEvYnVmN3VaZjRpcmNTNVMvdm1zTE9pRkJuM1V6eGMrVElrUVNPUDlOY0U4RzNuTHVLZHRWUlFZYUJLWnJoQTNCT1dPZnc5eS94RjRXMUJxRnhZQjl6Z1ZVeW51d3hkRHMrT2NkQlI0VjEwdTNEdUc4L2g4SzFBTTM5V1NnRTdoSWp4NktrSTAwbE9NanZMN1RFT2ZzSUhESWlJZGtTaUVsMWdkRVNweWs4bEVLbStxSmVCYWEwNHU1VU13RG5uYWVYVktQRzFXbVlPanBKeWRad1Q2QVIvUFRUT2M3eE5kTXJiSlNjbHdiWXN6RklxK3Z1bmRXVWNoa1N6VzdqcCtNbERMRDNrMjlsSFh6N3RHWVFvMEtLc1ZOVGVzdllyd3NqT09FeklVVEpJdmlPMjhja29OaDNJdjcxa3Y1dGUxRUViNjFiS3lsMzYrUjZVZlVHT3ZLY1BnOS9QeGdlaWljbC9zdWZCeHlQVkVTbUN6RnhDUmtlRFoxL0Nhem55WEhmOXE0TWVudURrcW1BNU1RaUZteTVyalFKazJrcExleEhhTEl0c0ZReE16NXZURU0xQVR2aUFrbkdFSmltV0JHL0U2cUlTVEE4cUNwK05zQUw3SUZpSWtVNXJRNEVlVC8yWFdjQzFCdnZJUHFydFZWN3lNaDN1cXhvVi9ZamEwSk1SQnVRR2E5S1o4cHhaRG1qa1pubmlDZkc5QjNybE9ISXMxcEFGaWxyRWcweDZTM1dpREZZODFDcHZJMTI3NDBVWW9wYXZtWmg3NDN3MUFGenRWN2pzU0prRExEVTdGTk8zeHhaWjBSTjZ3ODhxMmlsdlJjOW11ODdtOU8vOUlhS0VVN1d2UXFBUXArTkU0T0hPZGxmU2grUVZKQm4rY1crUW1HOWlodkFnYlo5b2xCcXhqSWUycWwvTFhySVJOdTRua25tdW1FTExaTUd0aG9QSmFSNkhLdmUrL0lQSlNDc2V6eEQwcHNvbzJjT1BsNmxVNUhsby9oeWxyazFnU1QwR0JSbitqb0FLSTFhaVErTzFaRHphN21aK1R6ZnAvZUtBQWcrRW16UnZCM083TGJPZ0hEbDQ3cHZoTVJJblQ4NEJ6VTJhVFpFV2pMWDQ3UlVmUldPdEU4Y1pwN05hd1lRUVRKT05WVEt6Y3ZJWVU2RTRubkVML09IMmlBejA3RkZWRmkxYnlCQkpveG1GcERkOHZxZDJueVk0NXhMWEN5UmZQZU00akl5c3N2cUovdDV0ZlJyV0VKZEphQUtHd0F0N1BYdUxqdkFWTHY2VUpLTnAzOHhrd24wdys0bW1BQW51Ly9NMm5NMFRweU51TnE5c20xNDRCa1lOKzlvTkpHMXRjOGVTNFg4Q2c3V2IxK0tzaWlidXNSemM1azFXUlU5Q2R2YTFldEhiYVYyOS9IMDEzQUw0MngyOUVvR1U2NWZoeWNLR3FOUGk1VGNTTzJNWEF1QmVwdWZRZTRIVHZqWVhpYXdPK093cDFWSXpIcHpuTk9HRytyQ3RvVFNjajNiTExib0UrTEdQZWs4U1ZuVVdWSmdyaXhiVHpTYm0rQXlIT1BHMHdiV29QU1A4N0d2ZWlIK3ZJK2NOdnU2clZFa2srSjJqSHd2VTJUSTRUb204SzFRRUFpUkEyZFFOZkZ5QlZpMGNhY0FEUUIxQmVveGVVUjRNd1hqYnQyRjBKQ1g4R2ptYnRQeDBFOXhHK21ZNlVHZGRZSzFzTnIzUHJuOTUwUTNFU2w0aldqcU5YbG54VWVTS0szQm9kdEZacTE5TDBDQXlkVVVXMDl5SzdNSW1RK3RSU0lWM3lkNUxJY0pZTWRvYjhvTTFQY0Q4TStwSXgvZmM3QXVQcG5mbnZkMWtRai81dUthYmJjTFNVcUdubXNNT3pqeW5Ga0JaekhoSEVSNnNKV0FjTGRWRWdSSGMwanErUHNFaENQdDJ2VXdkeVA0OVZnTENJc2p2RzF5TkF1cVdTeHk2R0kvOGVXOGxCVXB5UGNIUlFJcXlZcjZzcmdVQ0RqeS9LdHpZRlA4MEFNRkZXb1dTVzBITUJuZ0ZSeFByNmFkSUVEUWxHc0wvK2F3ODQ1cnQ3WFovTGlxWFZYUWt2VHQ3dVY1VEJPMUJ3clpXWEJobEU4ZEpnaXh1NW1VMERYWSt6clhyMlladzVZVm9NTGlFM05XblNHMTJlM214OU8vUUg2NUdIUmY3VHp6WW52dHgxeU0xU1cvdVQ4bmo4RUZKanN1NnloSlR6SEkzb21CclFqcjhQemxpR1dDQXVhVzJvTWpHZnp2bDhJbDdaTEFqTkwzZ3hiWUVoSy9uc2VZTWcyZ2QwMmR3ejA2R0YrN1JCSlJWM1VCUjJvN2tsWDJqaTA4eXNrNkNueUZqNEt6MWgrSWxJS3lDN0JmV25FUmQyUDAyY0YyZE5KNmJFTEhyeHRVb3Q3TVRkNFJZSVhnNGNXUmlUMzk1Ym5nYnpZZnY4WnpkZWR3MExLYXRtL2oyQkkrL3k3TzRaS1NDSkt0dFplZndmbTM1MERWd0w1QUJtcnFWdjh2enp1T3VmSWpSNXlURm9nV1Y4OHRVdytsYzBsdlpSRnBGTnBuekd3UFMwZ052eG8xVE9Kd1ZRei9PVzYyV2Y4ajhUbFRjdzRqR1Y3c0R2d2V5MjdNWDFobzRmdGkzME00dENQT0IrV1NsT3FoVHhDd1dtT2xVazZvQVpVQVBsc2tEeHh4Z3YyZUhFR3g0b05sTWZSd2VRdlVRRDJtejY3aVFIeE9oVUd4QjZ4SFpFb2RqSERldHM2UnhoSThJaEYxS3dSajFnTzNBZms5S0FmcHN1ajE4M1YwenRrSEQxekgvU1dLYzcvM2daZStyTEZOMmdoaGxoL2IvUEtiK21abGswM0tjUHB6Y1FxWWlONTlYSFlaUE14Q2RTWDVoV0loRHZIbUd4UlhBcDhNQ0t5bDZxd1Q4bEQ1eWdSbzkveEM0bkh4eFJtK3pEc3lEdG1pK0djaGR3NWNSQWY2NjlUMGJmVHYxMU85ZkVkUWhBRzB0RGJvT1VXUjRxdVhEdGZDVGxhNXZ6Z0RrRnAybFdEMWlJNnRzUW5FbnNFcExhaXFtcEh0eWVqTnB0ajRqUWJHNXBaZ2tnUkNFcGozaEZiS0h4UGVubWl2MzFVdmlEbklGcjdOTjhoeWpkQyt3TzZXbGkxcGpkdXY2TFc4M3paSkZBdXVtY0s3TlVtTVNRUDNlWlZ5Q1V0SHJFdDlkNUlCSmY0eWpGaUE3ZTZtdnB5UnBSbCtMYW5BY0hLTWp0RXl2Q1BBVEh2UmtxcllmRnNra3RVYmVtUzd2aE5TOXBxZy9yMEpxMUNSZ1hialRmV3ltdXJNSHZldEhNbjFYWm9EclZQNGRWYllVNXdGSExXMmhGM2JzQi9GTFg1V2NnTXZzZnpDRmZVaVhoN2d0YVJ0TlpaV01iNTkyeTVCMXpsRmY4STlWVVNCSWpFcDZCejBFTmpxSWMyN0lKdmtOZklLR25yaGR1VTFOcVdHd1JLUDNTR3djMWRYTlRRekZpOHRzSnRLTnNvR2pNVXFzM3Ewb29hZ2RtdUlIVFdBNjVPbWxMQWRFK0E3TjhLN3FsVlB0eE1tWmIzVE4xc0hQSU1DS1hndy9iTnhOZzFCTGxzditHT3BFKzhzUlFaaWE4czdqZmR0SkpubU1aNlFweGlqSTdsM2I0QUhFaGJiRTBRWDBpVXhIYWZuNDUwVUlxT0xFYTd4eTd1M3o2VG5XaEUrYUhWZXRRVS9nMG1OKzMzZTlqdi9DUnpBUEczbVVGOWJ0a0Q2aHB1KzQxdVd4YkYvcGNSajR0NXgxdjVvbkUyeVJHc1JGWFhZZko5MVo5dlg0Ly9SWk9lcEtydWN0NlY4MVJUa1B4eS8zNGFLcXBsVVAzT1Y5UnFzYXpUYW9hZGNtZ0RvaDFEZUt5dEdPanlwSGhNS0Y2SGt5NDNUdVR1cGdMUXR0VnFtRU1Pd2VhR3ZxcEdCalBWS00rQXJndDNWN1RWU3VhY1JRbnh0ZHdmQm9tMjBkeFVwcnJHZml5Uk5ZZEIrTFVRSXQxNmgxQ0l2NzdUaFBudkpwQzhDQUlaV3ZveEZ0aGJIWkRFVEV2YUlEcEQ2b0JpaUtjT29ZU0RwbmJhemY3c1NZcGQ2MlVJaHYzazh1VVAycW8xOFhLdXBKdCtDNXdQMXM0MU4yVFRmOXVyWDFZVGFOSjFJNWRNellKNEJlUnQwY2xkQnV0MTM1dkVxWlFHZ1ZxdU1OQWdUU1RtUlJlM1puZ1k4ZWJXN25PcFg2emJtaUtXK1dIQWhLVTZxYXVnZFQ3a295VEJvWjRLZlpHSnZONnhabUtmbE9XakVOZ2ZWRU9iU1JMeldWUUpjQTF2QlZnaEM0c254K2l2NGNzdzRPSmlKYWhOME9YU1VrUUUwYzd5Z0dXU2dqWVNDTW5EUHJiMTk2R0dTd0M5c0Z5dXRMMDIwc1F4c0trSnM4Z2JoMlNXcVZqWnY0V0FtdEZ1b0JNQ2Q2eGNaMFZaT1RDRlNXVnZWRmVkR3I4cUtCR3JRT1lIWXhlVDc5bUE3YlRNdTZ2SWZNYVloYkJCWWF6RkhSWERsODBiVjVvc2d2ejhTVitpMHpNODJ2RUhJcE9BaUY1Q3VNZ2ZyWnhUTm9iLzRCc3lCZVZKSG1LREVqcFFaNkZBNFdiRFhVUUFzTzg3bjAvNGg5ajVPSzRlUXNBMlFac09BZjhnd3d5blRPUWN1RGxieVREb21WdEVnL3VuQTQ4WCt6ZW8wVmpzQnl1ZjBTWnRDUksxcDVRYjAyRUROek5QZFFndVp3elk3Nm5yVE9TdnEvbUY1V2dIcG9jZmpOMU9DdmdRYXVJeDJ0THI2Z1NQOG02N054cjFJR2ZGNTUvK0tDM0lCL2drSmQxbTVqUFh5SWIxWjB1aGtNUjhkeXFReWg5VXN1SjF6OFhTeE1EbWVkZytXdFhCR0pWMitwZGdlbDkwTWdIWXlLTnh5aHFBbkQvUjdialZEVHZ4K3prQ29BdENqYlR5ZEpGallnellmU1BFUVNhVzVkRnpZbkYvU0NSRXk0VlhOVEJZVWZGNTJyZW1wMjZqYVZkZ2lwWk5KVEdKOE91WUlNOXZlc2VraUoxQnMxV1lBMUgxSDZva1puMkN0UjJ1bWdoMzFiakF1N0hvTmY4MDNTWW1ILzZPRVFMMG9tb0tRb0xPeHJIZ0VoMjRNY0h4Y0p4eFI3eUJoZXRnNHBSTEJ1OGQrYVdNQkUxQ1RoeFkvTmwydUx5SFdxQ3QwWEE2dzczWDVUeUV2OWdKOE4yZysyOVNITmZlaEI2T1lPcWx1YW5wd2thYWFOR0xmbDZQb0ZKWGhWOUxLVG02Q2syZ1RrZ0gzZ0M1Y0duRGVtNFhFR2t6STl0YzlQenlPalJTRG1mZ0d4N1B1ZldCeEJ0dlc4MkJ1ZmwrMHNwTDRnelRKU3ZrcGNUOU12Q3FjbGdleW9CVm43L0xZYkNGRExKWDZ3U01LdXZObWNPRE9MVkxzUXE2akZPbkQ1a1Q3Rlo5TlpOOGJySXZibHMzU1A1QXN6Zko3cHdnSjZpL2dBSm1zcmY3ZGxLWmNFKzBOby9pMDVwQ2R2Qk9QWFVzNzJubTNyaFI5Z2xNRlFoMitqU2pnQm9tWGNLWWdlMnpzYzc4bS9aM2dWRWFWdUM5YnpvbTRzLzZQdUFwaG5sYy9wanZkeDh5aTJERUh5UWVORlVVRXVjTlFpNmV5dkVnVlFyeXI0V1FDeWNzQnhGYlg0V000N2pGVHJBRGpnL0MxWHY2VzBGTjhHNE5ORVFYNEVJSEd5aWR1UDBDSm1wVFliMzlUbGx2SnptSTFFelVScFVheUNNM1VhNEdqeDBqbnd4QzBaSDkyalZHd203YmNHRm5LbjNiQ1BkSUY0TzdKeHp5dWwxV2ZXMHZlNXQxb1JPRE1DS2dxTlY3empyUy9QZzRHMTNEN1M1T2xhQkJoNXhrRElEcDRSVG9yRmxiUnAvSXBmS3hGRE95WXp0czgvdmN2RCtnc2M5RUFCSlJGK0tRWTJOd1FrZS9KMEdRREtMVDVaOVc4UHprY3d0cnN3dmRESlR1c01DTVZWbzNjcDltemNydFJtZmFiZjhVNEplTituNDdEelA1a1hYL2sxYXNkKzJJR0gxWURPa0FQR3Qzb3ZaRjBKYnJWK1RPeUE3VGVHeE90ekp0K1FXSXNFdS93Qk16YzFKTzAvNitiZXVUTnRBVU5PVlNpWSsvb2ZlK2RIZlIrS2RxTTROZmJodFF3clNteWtYUXg4KytrSCs3amoyMWZXSC9XUW83bFlSbTNQYzR2T1RSU216TExkVEJxTU1NY21UbmdiZFhTZSszelU2L3hNa2ZQUnNkTHk0WUFzalZ1WDhOdWhPWjJKS29pRzR4VjZqbkdLT3BGbXhnUjI2ZEhleTdyeUR2Skk1Zy9Td3NvVElVRkdOTDY4TkcxVkVSYXF5OEU4d0pBc0t0dkp1ekM0dW1RNkdYblVBaGEzdXNjeEV2cndpSmdOejRIeFpJQnRFNTJBRVpCR0J0YitPY1FoMkRLVDZMWTk3dVJuVEVPOEpiczJzaGMxQ3djQXZ0bFZQY2lNSWF6SSsxanExbHQ2Y2lmdUVldFVpbmJhL05YZ3daR1ZzLzFmb0g3ckZvS0R3eU1RRGdxT0ZEMk9pUHZGR0QrYXh0Nzgvc09sNE5TWTdqZnlQTkU1VDd3ZFhWSEZHZFBDa0hUbTNKNlVjcFZST293M3lLbjFDZDRUWUFGR3pFaU5pTW5OS2t0VG9VM3cvcXpud3FtaTVVaEkxS1FLQzBGZlQwN096RlVkbkF6cnhkcVdOZUs0dlZIVXptU09zUXV2NjFsaTArWjhlcEFXc3VaL1NaU1hVVWR5dnZaT3hqamowVkduWFZsQ3E4MFNlbkxPTTh5dU81OXNZd080d2laWW91aVRlZ0lZbTdiTis4Y3NISW4ycVJmZTFQODNVNjExTTUzK2VSbEEyeFVQOTJaaG0vMmEzV1JVV1ppRU5GSHNjVnluNEppNnVPWEpFcE9EaU9MekVoVFd2dy9rN2NwYkxIUFlXbDV1Wi9ibGUreExFVk82bDdBUlVDSDY1cDJnOVNha3NHM3RRTTAzWHAzdG9LSFFlUTk4NWh6ZVJWTG9Wck0vTThhOHNuazkzMmloeWY2UWhzV0RhOXhzRFpyajdObHNwSWp1U1VzbFZWcjFDN01kMFFTaitXTW5ML3lnOTV4Wmd5SFFhbGZEK2ltSlhybHVEUDY4V1ZkRnA0Q0ROTDdWZk9WRG1NNEMyL0hoTDQwV1gvRTBvNDZDQ200cHU3c2VKblJadGlBTU9Ma1hJTUQ1L2pxT2pSY2I2WFZCRHQ1U1dVK1lvUXdKYTR2czk4UTdUbWxQRC9WYVR4UVhQTlBKdSttMnNob2ZDTzVIYlZxZEVOUGkxRXlRQ1kxcktZSjlSZ3VGM1VWbjdlYXNDNFoyenlsdkVaR0pVSHVTenNMdU9GL3JYUExXUFd0QjR5cGFCNkx5VU5pZHV1Ujc5MTBhQWhxdDAzUitJWkJzMUhHUEtIUzlLeEhMQ0R2cDY4L0NjQzdXVXZzYmpwUXpwL2hBODhuMENhSTJJektlWnl1RHZOcm9hU2ErZmtISS9XN2N4elF4dFV3STU5YU11MnhQeW9mOWoxRnp4clJnZ0lBWTZRbTB5NWFXU1FGNDBVUG55Z2R3ajQvU3dyZGtqcVBoL3VEbk03dDZlRU9SbkRkbi9DVTBUQ0U4RFZKbTV0K1RzaUEwTmhuZVJjTmM1WDFoTW1HS25pdlh3bUlXQVdNZk1FczZVa28xTDBiV3loWUoxNHlycmpvbGRSVlh5TG5VVFBpeHdrUzFTVmxNV0hvd2tVTnFrUFU4Ymh6VzN0VDQvY3d3YVk5dEkwdHZORVhXMitTWkdHeGRZd0Y3TjN1ZElQcFhjczBWclp2R2lUaS83UlBVd2hGcmRRdm5rZ3JtQytUUkhoN2k5eVpXOTl3aDlSZ1FuOEF3NEY4UmJNNWtvd0J0VW5NaGYxYkpjQ2hTNjFrR1BDZUZOU2FGSG9SSVBFUlJ3c0NxTmlpQ1lGOW1DbW9sQzg2THVVN3VOc09tR1k1OFozaU5OajN5UzRydGlCMU92dVNrMC92VDViTmsyYnhWVytMMHBZWldaMUM2L1NhZ0RFNWJnSnFEVlJhYmNtMEVHaTVqRlV3TmNRNlREQ1pKVDc3L3BudFMwb0JEczkrd3EwbUJTeENYOVgrQzhNdDcvZXgzd1RxMlBHUjAzdXlqdmMvNmV6a0lYR0gwMUlhRDR2V2JRci9iQzhhd3VMQTdRVG5VcXBjaWFOWVRvdnhDOGZYdCtsWFdlVllkR2JiVlcvNEtmSFpHK2dJL3Z3aDJ4bmNwN2Rxby96aVBVekVNT3VoeXBZOUNwMElSNkpMalVETW9KdHdKZTBGa1ZHV3hiM010NFdPL1pDQXZSc21HdDk5a0tJdVB0cnUzTU9abmQzQVUzcVJTb3JoVlV0Y05nL0s1MVVxSWgyZjI4QTk1d05Tb05lRUZIZ20zNXZ1Vjg1UStUejEzR0JRbm9sUVU2dDFubHRxMHU1S085YWR4TnA1Lzg1Z1NMZ2FBLzdnS1BnckRCdjNvK2k1a1U5RmU0MGdLWGlycEozZ1NkMHBjTm5MTUp2ZmQzdXlqUmtRQjNWUGJ5SmtyWVpaVU81OG9EVGZuU1g2VDJBVE9pam9JTWNyMXRMdjh1NmVEcFhNbGhoM2FwQVE1QmF2RjZGRmw3bnBXRDZVQkRCemYyYXhxZnRRTGdHWS8ycWk3aDdFUmZjWm5CZkxZU3phL2JjZXVPcmt0b0tONTFhODYxa2VZQlRvczJUY1hHdVdWNEtoMEtYUW1HVG4ydWp3ajlwSXRYWjg2RUp0c1N0aWNGenh5MXRKY244cDUwQTZHYVNSYW9ZTklOdEJ4Z0kwdE00TFpNc2RiWi9xb3h3YXJIbVhQai8wb1loTU5ESEltQ2VHL1QycEQ2MUJVbENXYVdmYjc4aW93eVAxYVdaNlZXbWtlb1B0VEdtb1I0MW1WNGJnT01oU2JVRlkrZkdDbUFYVEVuSzRic0FEUXN6N2Y2TDZ5SUNmYjFDUUJra0pKd21LTnJ2bkdTblpJRUUwNTRhTEo2OXN4dElEL24xZlFkQWg3SUJKZmlvWWZCUjlER21sc0dCYktTaDNTQ2g2WUVvb3lmOTlYWUNDTW9oeDlwanRTWXMzSkI2S3hLSWlvUTgxWm4ybXFjQ1puc25YamJjR0ZPdWRXcC9KOUMzZ0l5TjVmbW5zMWNsemhUUlU1MHhGdVVnbzdUeVc4UDRFb2l2OXhlL1gwZFRGZE52WDJHL0JXbUo2NnE2WkV2YnJKR1ZyWkkxcnAyNHh3Q3R0Ri9MbHZ3VkJkdUtTV0ZDSzNJUUMrL2ZRU3pzd2FITURuRjRvcllmVFpBM1BUZTRtTG8wVWluN0lFV0JoODYwRE5kKzVtR2M2WXNGbllaaG5iT25TV2VYUEZDbEVvUzFBTVc1K0ZKTWdSbmt5d2padkhWVmlUWDhuaHdpanVZd0R5bjdQeW5kVUVDUWFpL0FjY3cvb2w5OC9zeHA4bGZQQ291MkdGS2JpVVFQZVRhUVA4bU1kTHdjYXVlaGJ1Tng3RlJPRkRQNVp4NmlGWmZ4bkIvUDZNMTFBYkMxNDdEeHhGL3JmbFQ5Ylk3eFp3VWE3MVVNNXgxSnZ3ZTFkT3BMU25pUTRZSjNrSW5VUXNwQ0hVQm84bGNXdThNbTRMZU1lMk44OFZNU1B2Qy9PYk1oaFpwUjdIMnBqM280UTZGUGVPbEdWelpJelFSYzNNaDBOM3Rkdy9rdXhRQjBGRG5OZUlIQTZ3czFmVVIxZU9LWmR5QXh3MENxTFNIb0YrejJjbFU1UlJ1OFYzMUdOdEhGQWNmdUZ0YUF3TFdYeWVlZHQ3UmE5ZnVST05hMFZ2Y1NRSUc3bi9QMDNxWitUMDUwelUyazBLQnY4SXBJRndTWHg0Q2tVbU53TmZ3QlBIbmJMckkrNzVWQTR3WDZYcFBiVTFjQWcrUGUvNTE2VHRwZnI1Y3hlOWlmZkFVaG90bjdWQTNPcVhpdGk2TXJXVE54ZWNPNlhVUWRBa29sWEpBSlNBTnhYMnNiUDgwZVZsa0lIZERESmxVdGg2KzhKdVhuTXJsM2ZnZnhOWUdnU1diMDkxYk1NUDRwMVN6WHBNaEVpVy9mZTdQS0JvMEpaczJNUHlBdzRkU1dFYWVzQ2lMd2MyWG9FNS9CdG5MMmpFUXJuTDhzNXBrdmk0K3V6QlJEcXZDNG1ZSmgyeDI5b2FQRzlobDREbThqVlBsaWtuOUNPMzI0TU90ME1aUTNlWjZpcC85SHJFWFNxL0MvZmNJT1U0Y2ROUFhHdWVxbVJzS2pkdjFzM2JkTzFZWFFqcmcxUjZDb3k1V2tlM2Fuc1o5bWlBRHU1Y214MWU4TWliTHorOTBBOW8xbSt1ZUpTNGpnQWd6blRBQkpqOTlaZGRJb2F2Z002UkYxblJxZC9CVVNMWFVVK0c5UGc3SUJ3ZzBVbmxXdDZOZHlJNmdqVHgrYWlNM3p1UHFvVll5cEs5SjcwYmdhL3Z3NmNCUURoekFnaVFNOVV1RU1wN3Mzd0xCRWlPeFAxVFgyUWNtNklYNXBudHAyZmF1MEtvcWVPY1VsSG8vWXRtMEZNcFlJSURGL29jOHptUjE5NVg4Mk1IWEtCMnoxWEEzUzVCZGVpQWdJNG5UODBkQk0yTnVwY3B5OUhOT2Z5LzdDUTlDanF1ZE1yUjZmcW4rbklld2EydTNWWnZqbUF2cUJkVlJOT3RabUk2bGpBMmljd2F1SXhBZWlFNDJDYjdSTWpXdE1RR0JUUDN4dE8yamdyT0RpU1E3aDZQMFpZTmJvSlhnbFo4Y2hWK3oveTkybUJOQkNycGxqUVYzVGhwZjJ2RDJLQk5UamgweGgrWnoxSFdYZnNEdU1GaEJ6RHBrS21IZ2hGemVPb1JBRk4vbDFJR0V2SExPYW5RUE8rd29yV2R5NFVYRGtUelpOdGtpOUtmblNoNjhqZWJHTHZlTzl1K3pQK0wxUDd1djk5OVlzUXFKbEZYTWFsY0pmdzROeE9YT0FRdk9jYjFjcHBEMVFhOHM1T3AxMHdUbjZsdmpWY1YveW9XT3B3c3BqVDZ0UmxtbTRsUDFjbzErcURXV09kRU5QekpnMFhmaXZrUUhybG9TQ1I0MmY4TzdSWTRRa01oNmJBaktvVFEraVVBRmtxb3Zvc0JkRDJrZmF5QzJ3TWZPSGNJWnM5WWNKSE9Ib2E4T1RwZlgrZUFpUE9EZFZ4QjZKRFRHUFNyaXZmT1JjdUt2M3dUNzdBZDNxeTl2bytabGpvcWVKNTE4NHZ5cFR6SVE2dXRZTCtvRm1wWnRpN3VZMVM2Q1VLMmVyOHN3ME9DYWF0TE5FVXBzREQyZy8xSmUrZlNOdHl0eWhsVndweWpGVTByVFNVZ0Y5a2ZuL0NQNnVFclNvQTR5SGxaVlpIeWJPQS9QYmw0Vkt0SGpVcW95aGxyQmMzbWhBNHVSandJT0RHLzlFZnVFTzd0OXRUb1VnT0hZODEzVEI2b0F2NDVQaUhlbWU5L0FUOVIxelAxN3g5VVpzZEpxNlBKQnQrYVpXNnpnc1IvNVpWNXRQL1dWK3ZJZzBOTTIxZ0dnb01URlFYZGFJQmJ6MmZJNkxsY0gvdjBGUzZGODBNM1Q2Y2dQQ2NON0RTcFhWMjM1Z1Q0Z0tTNHdwdFU3S0dWVzFRRnZDQ2pZZWcxYVBrSzFwa0c1SnpSb3V1WWR1aWtRZzFzUWxlSDVsVkdoMVQ2bytWWVZVVDRIcm05RTFNYUxYajlweHYxZEdHaEs4OTRMUk1aVm9vdzBTeEdDdVNNaGhvN1RST3puUmNGT2FBRFQ5RzNwTE1oc1JGeml6c20vQkxHTnkxbHRoeklEbmRSTFY2TmZTajRKYlZLc2RkZDM4L1ZDL0hQVkpaTklBcUM1SGh0U1V0Q2pWSnlISno4elBBTnVkWDNWU2FQcmp4ZjhuU0VVNHJISm9TVjZuTlBaSDFvZ2MwTVBGbmVreVFlVmhic2FicGw3c0VqR2FUdWZyUHM4UEVGVzFQc2N1OVJGR1NzaE1JR1pjRXdRMVlMcENCUVByN1hUME9vZE1ZTFZZek5XdmtFd3RHM0UzbmZncDFRNG1zS0src2I5aHc5UUJPUGNGYnhEUWpzUGRVRitFVnpaUUpiRWxYeGZudGNMaklSSllKMkl2WFNMZWdVWXRnNmtETVBqRkpzalZzUERibVlzL3hkSUcra1BmNWU3Tk83QjNoaUZObXhoSkh3KzAyMUE4U0x5aEoxTEtXSWlTVjM1L0s2VGxRUStyT2MwcDgxcXpjTCt2ZUw5WmZsYVNLeW1yMW5IeEZoZTFHaHA4Q2FVNFg3dTEzS2UzdC9yK1UxQmM5NzlETFIrRjNROS91SGM2VHZ1bld3UXNXZUtEMkt2QXMzVW82ZUpVcndOSTFBUXhBVy82L3lFNHRXT1gwMW5hcm1iSXFjSGU3YzY2dGh0TWloV3Z6a1djNytGUThIVjdHNGw3K1RGbXVQSHRCYTVBQmt3QW5ac1p0S2Y3NEtPUnpvSEgzWlFnZjJqSGVPaXQxMUNzbTJOUzBVMlZjbUlVSmJJaEJZdGQ2S3Y4ZDdOeDRUeUNvakwrcWFIWGpId3JIeU9MeDErdFA0RWxXbDRLdzQraXBiRzdUVk1rd2RJQnVhSldiYVVNNDZWQ2Y5ZzBvNVFiMVhwVWFTbFhyRUxnRVQwQU5mMFVJeEF3b1JhQVdTS1pidklKdkxkQjlaOGxRanh3UjEzcUorOEpDeWpSV1orS3JzTU5UT0pnN0E2QWY0clQ1akJTK0hnSE9zdW1ydENJcko1Q0I1K1JKMlMwMUtZVjNkdmFLc21UZ0hvQkdoMERpTkZIUkhmZll5bGVqN3lPTDdXdThyR1A2WW9ac2FNU2R1V043UHJzdUpQSGdUSitRclNwNXEzMTVZMHBDUVlsNGRlOWJ0VkxjQTBESWMySytuWDEvZWg0d1ZnZHlkWU9JZVE3eVRlbUtENVpRTmhySHUrbFlNNDZDTmhSVWw3Slllb2lFKzRsRWRPOG1HcEwxVEdjR3pKMThMWG8wbzJJb2hGS0wrUHlKbFJkNC9hSXgzUGtSUDYwVDVLVUoxdXlVMXZXbzR4aGRZWFZhcEFMbEJJWWt1WUpEaU1yS1d5eWJRZHFKMTl5YkR5MitlZS9mVzBPYTRZYkdLT3Exa0NFODVCYm5VVmluNlAydGw3VHgxSHBRbW9iNi91Ymw4aFE1dVYxK3gyeGpHeVB4b0ErSnMxWGhJS0M5SFZTRTAwMTlmU0xRUzV1Zmo5OFJVWVlxQUN2Y0N2azRyZVNObTdYNWwxTW55ZVNEdG4vSFhHdWU1Nnhta3A5SXo2U295RDI1Zm5pR0xEL0ZZa1dCa1JvZkc2dU41dHFWbHpRWjgwR29Qck5JODJLT0s0aXoya3hQR2kyM2pvZUxqVUdnVGZlenFkRWttS1hFY3pjaURBYmRtUGVxTnNaenZxbWZJZlhiUWxTK1h5Qk1rR0N2TWU5WWNHNG1LRnlSQnlXNUYvbHF1cDNyMGZob3dXSzZYR3p2YmlDUzJNYW1wZmpJdjV2SmpTK3dHd2FaMDExeFpxZE5sbFVMUGd4QmtCT085Q0Q2b1M0NVJmcFV1cmp4UnhINzhsSHBvTk5ZLytUMVZlQlNvMDZuSHJ1WENPUktJdE1YNkg1YkpaYlhXWjl5T0VWYkc1V0hXK2d5SGtwdEk0QlRsTThmYk94SkRYTGxRTm4wd1lReEJvbThHcGlXS0NWNVU0VmNMWitFb0c3YjJzRFd5dG1vQnFIT0NEWVNKd2svWWR0cDBYd2liUVVOMXpTeTRZWGdmRHRwN0JIcFNXb1I1THpDY1pabzlLVlFFTTlvTEFvR0krU3EwaHZhMGJ5V0xWWmpBOWdpa1pHa0gwMjVOZkw1Z1c3N0RiWTZpSGRvMk8vZzlCSVk4L296bVZyeHJMSnVaSnBvNnlIUzJreVlMY1o5WG5hcnpNcE8zWkFZelFBanlEdTFUeis0czJaR1VWekJaRjZTQm1RSnhaNjRMdTJibUZNMnNlNlE5eklScDBLNG1iNUJLWXFKZHFlSEhhYWhRMFRyWnFyNXpiTVR3T2VvbUZRTWg2R2VhQlF6bjVFck1PUEpYL1B0WDhvVWhGQXZQNU9abHdab3d4b296U2d4OGp3NFZSbFJSWkRISjBTdUdVeEFGZlI0cjdZekM1emdwaVUra2E3UFd6L1JyRmEyWi9zWGRRZTBZZWVVMFgvTVNBVHo3dlJ6MEtGaDNLdG5HM1JKaDUrbFpsTldBSlNWOGo5SExQc053RzZrdUNVTjNwUCtISThQWVFKWjArVWVoV2dzeTI2S3UrTVBuV0tZRjF6YWd1dTM3SE50SWFEd1RSUUowdnNLcTNPRVRNSTluWmZSUUptbjBKcDhBWEE4d0IwOHhuV3FxMFgwKytFdjBiWlRPZjBXVFZ2aFJpZERkbEVzclM1V2ZxakF6TUd0U2h6VWd3c3NPQ0E0L0RsNUlPM2VlczNnTU1aUHgxZU9aVWpNQWJXZ3NGRHR5amNlVk9mL0VyNE9iWkpjNWsxRDNaUmMrS3lJZFp2bCtVOWx4OHpBMmlYTUZjWExMaTlYdVVuY1h3MHRVNU85RStUMHlxaWtHcEp3RlRUTW1qUUJuc3pJL1BMSHNhM3FPSWVCSExzWUJlZVkxTlNuZmI4cTd3cVFNUFF3NDBmdHJEV3pnUTZpV1lPRjMrU0k3L1pmUFRXOEdXVDlxWTl0V2R5aVRkMDRnRmJQemtwWDdQN0VSdU9Vczdpb1FRZ3lpTDcyeXBlb0E2MWZvN1R6c1FDd1E4eHVWT1o1bXFtWnIvYjBhbVNEVkdNTmFZK0gvTjZ2dWF0SnhCbXNOVkFKaTVDMm9OMTNoTWE1MFlNVlg4ZnFoajlKRTZUcFp4SGF1U0p0ZU16aHVmbXNlU0tzbDJ5cjlOZVJGRFJXcDlPRnhkalkrRU5jSUtNTXorTWViMnF2RFJYbmxtS3NFcHdFUDZmdUdnV0ZxWWhwbVp5LzRvbXdPQU5kQktabWVkN09HRTZvUGE1UG8xZVhyWmZ5UFpjWVpna1dsZW51UnJpamp5U0d4bjl3bGRrRnJRcFphWjdOejc0S25SQ2pETm5yTGo2ZEdvL1dtUE5KeFVwcFBDV3FrNFBIejFmN0JLMUlxZlZPRGFPWEdvT2xkbmFlV2NwSEczYkRvaDlDbVY3c1NOclRaN2gvaEN4bVBObmRpT3hhWTdVSDRqYUl4ckM1R3dQQ0ZRZnpEcVE2dnVkbTN0TDQ0Q1dhTGt4QjJtMTl1bnRLTzEyZHBISkxtc0FicEZNZ0I1L0xSYUN2ODh6SlI1WktCZXZZRXQzSjZiOHprZVVUdWRpRGtUOUpnK3hZMk1PWnE4ajBZVGthbWQxMmpMWktYYkYydkIrUHVCZVJCOWlJeFQ0NDcwRENpQTlSUzExeENxNDF0eVQ5aFAxZUw3aGE4MXU5TzgveS9Fai9KeThrU3phN205R1dVREVDbmxCejJhcy9MNGxnYWQvWlZvTEtVdUpWTURjY2piUlZKVHliM3BhWHRKN0cxYjRKd0liZUhqOERPRnlvekRjL0h0RVp1eDJWWmhYbzVXOW93TXl4UFpsSFFOOE9DZGVBRXdOQ3VGOURUWE9CVzhnVzU5elNZcU1uZnFPcEpwcHVMeWNQRzVTSE9aTEIrOVpwRlVnMk9YVjRnNVZUaUlqT25BakFpSHM4UzEzS1RJUFNHMS9NOFZkRDBhME5zR0hGYmhGKzNoVUtHL1EwN1VOM3p5WWdlM2FWU0Z0U21nODBWeW5pRldSUXhqSXBDUWtta1MrNUIzT3dheldaRTJoYTdmVldZNEtkb3RLMXVjNTZ5RlFnVG5BdTc0dC9qMkxjdW9ZeW9JblBOaElZdVNEV1B4aVg1ZjE1ZmlJYVhQL2hEUGxpUlhhSGJ6QmhFT3V1eVpmV0M4OTNseSttaTYyc2h0aEUzQjZJUWhTbFZiS2tsUDMvNzJycXRRY2dZcEZoZHpnK1NsbVZCVjBObExiclQ2WXo1bzczeGtkdkg4K283eURac0R2TkJyWWhxblAyOVIzNnhQLzEway80VFFBcEZDOHppOFhFS21LQ2RnNjlSR2lpeEhIVEFJYmh1bmpXYmVPdTlPUTZIQk43dXVZSGV0WWhJRFhRK1hqZnUrd1lraENmUllaOUVoQ0hoVTAyU05yL2h0MEI0OW9VZFkzR0RsTG5pQzJxR2N2K3VYQmZRMEhDbnI1Mi8ydk0vSWJCR3hCVWVzMTBLc2VtRnFiRnRhR2JUa01hUzE3Q0k2ZEhHVkU1dm9XMUNSQjB0L1p0eEFxNUtwZCswVGRLTTdhYWE2WE80S0VhM0pwbVE5R1RyZmpjZXd5K09XbkR5NlBqM2lTMndUYVlNeWJEQlYrMVVCR2J2bzJRU0R0blVkdjN1ZHc4WENpNjVmT3lORGswZWtGQkxZTlZScXhwbjBRNEsrVE9oUGZCQ3J1ZjhZUVZoRm5yNmZ4NnBJYmJkNUFuNDc2NEVGNEpINWF3VmIyK1V3TWJDSXNKRUt5MGExQm53eXRpdC80TmpXQ2Q5MDAyQXpFeG5na3ZmMWJVWXZFcFFabG5taFNoQzBuZmpWd0Vuai9TRmF0ZG5qK2JXZDRjM05PdWhkRk4wR0E5STYrVXJJakhTZFcwUUF1MnREV0tmQVhIZk9qaFUyWkxaTGlQZFUwb3htR0l2ckdrQ0NOTjk4bEhQeXpRYjJZK2syQjFOTGp1VGlpOGIrajhhYy93K0grMVNHN2Q3b3EzRG9QYXViSVFZSFczQTI0K3dRM1hjdmt0WERadXIrUGRoUDlYUE5zdFlLTkJLMHRxdVZPNTdjcnBzUmNTNTFSRUVkYVpDSTRwLzFLdk1pcXgxNTdGMVNGNlpNeDJsUldmOURHTUk0TzByamdWMzVoeFlxNk1vVXd4TEsrenBhMnhLMnZuYjNrcVNtVXIrdGdsSENOL1dTNHpKMUxwc2Z0dGttMWIyR1RFbDl6ZGtTYjJJeXNsVGVFQ21EYVA0MGozV2pvNmszZVNjNUVXWmZkOWN5MzgvR3p1WVovTmtISFJndFIzLzhSWnp6N1lkYktUNzJoOW1icVpaNVE3aXQxVDdya2haNkRlN3JiS2pPaUQzMUZqUmhPRENPTE0xN0RVQ3ErWm5QS1p2RzNYZ0ZCUjZXV3ZpRVlxd3pOVWtwMnhIN2hyRzBCU0FXZWM2SW9MOTBxRS9jQ2Ryd0syWlZoT3crMFR6VFFSZkpoVzh2bjRCK2poN0NGZk5mVHEzSGk5RmhWZ3VKcjJkeGlya3U2QWZpbWlWM1ovRFdpMnJXb08zek82WnNRU3pja1gwZ1JWZ2F2eUlhdFpmeHg4OEk3WmVtRDBtNllkUmo4YitqQkV6N1RNb1c4Y291NWRVbStjeTNNYVowSC9WRXR6SHExTCtQdHdIRjhvOG1RQmFnMGwzSzhJWmtXSS84NlgwU0ZBcmdnTlRUV0x3RTFZL0d3Q3I4dzM0VFZpL2VPRUJhVGlVR3pUVldCUkVnNHV3OVRCMENHZkhvRXg0Mk9PdFJ3WW1oMVdDU210V1pkNWV3TW9FMWxjcVJqRERLNlBaeFQ5Y1FCRGI1WlFPeUFhQ3ZXNUV3NGxnS25uZFJmWnJ5MGFtVzE4RzJkaVJYZHZJdUhEbk1ScSt0VTNjQXZBa0E2cVBrUDZGbXZneGgyVEhTWDdhdlFtRDVZYnJ2VnRCOEcrWEVWSjNrWVpXbU81YXRBSzRmdWVVUEZLalZRdjlkNnlaeXk5cVVIS1JhOWVRUE1tZWJIeDVkOTNWMGZYZ0xZQm1uTWdoVEJYOTd3MXZFSnQwTjUzQW1Sd2tCWXgzS21raTFoeExhY2NnckhWd0RtdEcrQ3Z6MnVCTDkrMnp4UDRtTDhPQ1YxWDRDYnhUQmVKSk54Wm9tbXdYQkM4NEFQYVJ4SEFxZ0MyU0dqQVdaSXdHLzVlbHUvemF2a2xhVEJqcXptZk1JNSt3VkZ1b2U2UDBORFFrQmVWQVM4MVJRQXlMS0luTmI4ZlozMWZ2V09WN3VaNm5SWHdJVnRuL1JISFRHbDhSNlFld0tCKzd0RXliTUY1Vmg4bzlidDdKSmpOSFkzbXI3ZGhzd1VNNllxL0I2Q2NHdHYrdU1MY0UwelJlSHlYaURiZ3VoelFOajIydlN4SzU5OEMwVjBQcjJrdUhjVFJ3U1FMQk0xRXFqcmNVdGM0ZXRUa0UvMllsa3hLZlFSUmhYRHRDMFQ4L0diNzdoWUdRbzRNa0phbndJbXZoNVlTb1hZYWZCeWFrQ1JhN0RvM25HR3NteSs5T0tkcldDZWZXdzF5eXBXQ0FieW9KQUhZOFpNTXh5ZEtOaG5DV2E1NStDSW1UcHErRzAydXlMa1hueEpGNlRLUE4wYUFOUEE1ZXZMaFZFQ09la3UvME9PK3NER0FKcXZFbzFvQlh4endqbytTNGJHTzRLZU5LQVFlV1oxaml1aGY4YmMxank1aFJzWFU1LzNxdzd3OXdMcjV6L09GMWxhcDMvSGtWckRYOXJVZWxnem95WGloeVZOVVJqeHNyNkYrZXBNaGpUb3RHRHo3ZjlHck9nckxSSWEzL0Iyd1Y1blZFQW1PMDlRQ2g5emxzWXB4Zm5LQUc3NGJwVm1jSklLNXcrbk1kTUpLSnFaM0RLa25EUGVBcWVnV2NaclBzTW1EdHEzQ3QzUmptK2hqNk5TVDVyKzZ5Y3pmaXBkMVBlZVBSbXlqVEdISE81VVRWcmV5MGk2NWpKbnphNzFBelBod292aEFUV21vUWVROTRuM3ZGNDBRYVJVdS96YnM1YnJ0L3R5RURBeUlJQlFkTG5Mbzl4S1BJT1VvMzNqajlZV1lqNE5INjA4RHhjQUpsbVYwUzMrRmo2b0hYeldPWFlYWXJuaGVtQjB6WkJUaUw2UExhSW9UYnRwNzVEa3dWK1M2QmZ3dHFEM3JVR2dYekZoNTNudVpqRlQ2S2xRT3dhRVlBQ0M5bTNzNGU3MGtSdk1aQWRud2FVYVcxT1RQcnliTWpOaWhrSUlGVk5TdHRPdmlaaDlHS01PWFRVdWJjMnJXSzVQOUFGM2FkUEJ4RGhRTXZad3NSakZTV3cwYzIvaHVKRTdxOGNUcEFkaDRrZEtaZDhVbHljT0J6TWd2bUpEMmFpUXZUenBCbSs1MnNuMUNMQXRGYVZEWk9vWGl0eHk0Szg4b0hKWFBqUmZNemRCdUliT2kyUThrTkN0TjlGenFCM283WjgzVGUwemFrcFpxQVpmNEhTdXJJVDVyL2tjS1hhNXhCK1FPd3NBeFkwbkJyTGY5dG9xRnBFR2c0OTJxUXNUaktwRGFTUTJPS2J6YjRHYUJqVjFWcC9oaVNsdGFqNFFCcitTVGlqV01YdzJaellrd0RFOEFqa1JIb2hpV2tPV1c4dTczNzlFYmlpUGJkSnBqMGdZZkRNOWJSZ0dyTlkrY2JZMDE0eEY3Nlc2WEU2am00Q2NuVVNWQVdqSUxCUEJmV2xVekV3NU9qSG9DdXdkbGZVWUc0dEx4WGVhMzVYakdBUFVHSzNhYjNDYnBFcmIzMStidkwySDJaWUp2R0c3OWdJazlobUhKSWRaS1JjTkdJanJVSzY4YkxGSXAvaHQ3N2dia2pZZ2JBRTFEQlI1VWpvSnB5QjQ3RjBwTXBCb3BHN0hEcnQvRzVLSHZncGo5c2gzbk9za0JZMDNqbDJHWTBqRXc4WDRPUUd0N3Vld2kvWGRka3BudlV6WmJ1MDVMVGNjWTI1VGRRMEhuSEkzamhVOWh5aVg1UXJWT0hnaEJ0dTVSYVhvb0VFTnlCSVNZakZYcWtMd1lVaVdqMWFMMTY2M1VqVnNXTldMbXdHVDg2cmZDQzJ2L2RqbjRGYk54OVhiK21JNEU3cFF4OE1YVzA4WUUzeVpWS3VWVDk1S0t2L0pRQWREc2dud0FSekxTNFVvUTFxTkVWU2ppdDIvS3gvbzNqVmpRRkVKcUFINUNwZC9zZU9wbTFHT0g0QWJhenVGam94MlY2S2YrQXRlditCTkZuZ3VNVS8rUjdaNFhpaUxWT0NOQVBXaEV5L0l0VWVZQmZqOU9GRXRlZ0QzQVVmR0x3Yk1HN0VTSWlrZlpXOUZrTEtMaWpaVlIyMmFONGZzVHQvckUwQitXYlVzSlhleCs1V2ZrMm5EakhqYSszMHltczAvdDNUZG14WTlGMmIyS3JFWU05a2oyVkZzUEloeWVSaUd1K2thalhzMCtYVlhVT2M1aFdlYmRLT3hFdFdaM1E3Yk9ER1gxT1NocUZTUEtOYTZHU0F2ZXJVS2NMUXYvVUMrb0JtNDJhNkVaRnYzZ2lpU2JiVThkS3YwMkk4cnpDcmxGa0ozQlFXdENZN25icWFOSWFpcXNVWU5ScWo3NElwK0VxZXdvelB6K2NjMFdvZDlPU29aOWFpa2VjdlAvMjFOY0NOeUhTM3NBN21yT0Q1dlhuVm1EU1dOVU9lMGFhbTNrWGFaOW1yVGovSlQ1WGtEdXM0Q2FZb3F0QUxETkl4SHZYZEpicWxodkhLZnpBczNEbGsxVUlTN0l6bGFjYitFazJWd01WSnR5dlNFQnpxS0phSjRnTlpOS3ZyL2xhWWVlcVNZbStKNXhUTEhBa1lyVUU4NGFPRnlZUGkyNUdzWGNsOUwrVndvYlQvZ25GNktHOTFsVmJReEE1MXBzVVllRmpvYnRabzF3dElPcUxPdjFpNGpqT3FHbzlHbUpudW0zNnljZzNOMlVBWnlRdUE1dG9tRENxVVI4K2FnOU1PRVBIcDlOR3M3bE1pcGZXa3grVENJZFBFcHBYRElZMk5VelBDL2hMY3I5ZkJ0WENMQnN0aWVuaTNWVnVNZnZmTXdXaUNUVld3TTg3R0lhRjhWV2kxc0E2Mk1nem1OWWl2NDgxb05SV2xOdGdacU8rejZsQ2l4cG5tWVhTMGREMk05Y0ZseHFZa2lDb0lpV21qY1JLclpyVnA4OXI3THJHaWVrSUdDS216T2VzOEpPV1pmRDl0Y0xSSGJyQzBEeGZReTA1Um5SNjFOV0dpOWZVdlcvaHFhM1VlbE00Rml2OXZ3RFVvb2UyN1JUcUs1cDd2dmFSYTcyWGhTTzhEU1FieHVXVyszbGJWMWdXVWpZUWRvMDNpeVl4RytENVFZWWVFL0JmaVh2UHozZytQcmFaMU5pSko0VnlIZEFUbFRXQ2lJems5OWh5QkVmM1VOeVF2OGV4L2k2OXRkMmNaeDdlL0g0ZEhmYWpuVHEvRThFek9vQTUyUit2ODVuY0pzTUcwV1NPblZ6azdGZ2tqdlFPM093d244Q1IwS3RqbUVpcCtwNzBQQWhnWGRySmVYdnhwdHNrOUlPaGp1aE9ZREIzL0lNTzV6enlraVVESUszYURIZzNMMUtma3NkM3ROd0tWVkhCUDNuZStEMnFWNWdzbTBCUUY5QzlBSnlOSkRBbERlU21MSEI1eFVXbVdkaThydC9TUENJNlZ0UUZMNGZod201YnRkS0l3a3cveEk2Wit3SmNQRUx5NXk1bU9zQjh3WTJURG0zd1Rvcm0rZXZ0WHJEQ21uWTMvUmlwZkxJeG9wditCU1RlcUlsQ3pzaTJtYWdibndGQmN1dXJ6ZTFpL3ViS0g4SlBBVldjSU55QjNna3RnZS9mb3ZIMC81U3oyd2h0THo2U0lIQkNHa2xmeGxwZkcyZ1RPdnY0d2hVcEVlUlkzdVpzSVNxcVlYTXZXWWI2b05LQXNIYlJ3dUgxWFByOFdiMDA3YVhtUVBqOVZYKzJ3YnVDQ21hcDMwVDBTMys0Z1B3OFRNOFR1SUs4N3lFRTZ6S2twVllQZDZtbkUwMEFPbm0rVnZtNVNneUJXdlZIL01yRHZMMGFVMmoxanRyY3R0R1lDWFNVbHhyTnVSZU9pVlowTWxrOVpvd2ZhamV3WlRtWGVFanFGZWFnTzhzSi9tZXM1eUI5QndZUkF2MHVYZ2VTTXdDb3dycjczVmcxME5kV3RIdlZMNlNyVm1XVjhiRFhmam5iT0VjYzB4c1Mrd0V5SGdkRDdwdTlHT3Vod1UvM043RVZxekxwM1Z5V0d2aXJOTGsvTS9VTEVESnFCLzB2SllaZzkxMWhYcGppWGZVZWNoTEl0R1dMdkYrK0ViYUtEZ255Y1pZUGpaekJ4M1hGYXRRYjNGSDhjbGtwQmtSNTdQUWQweFhrQjRNd3grNEQxamhWd1Bhc2FYTGxhNlRyZUt1UmVXa1R1bnU1TlZtUktzV2t5RXEwSS94QVdFMWcyWWI4ekNSNmI3clJUSUt6alVzVndaTXZ5WnFZMXNpWG1FOEh1S0V4bjNLMWdqK1hLaVplN0VadEJOTVJwTEhadGFvUTgzaFlGZVJBZFd4U1RERGlBdWEwcm8wakdXUUZHUkhmcnNqZkFSbkNGb3lyT1VTUGVSNzc3YTk4RXVQdm8wSDhMcXc0UEtRWHlNZzNEdDRTendaYjd1K2wrOFkwOEZ5Y3krcTFyWGRsbndkN2I3QVVINGtPV2xBNEhFYk5uZUhabFJBNWdxcHpCMllKcGFFbUdnTE1rZ2xVdDkxN3M2Rzl4MVlheGZ1WHpzSlUxWmpnRWJSRVB0U3RTbTA1aDdhVDJBQ2J5NVpmUUdEVGRqekRWZ2FNelpZcFJFdVE5aGd5OU4ycVFMMmVoSWljT0hsMTl6b1NoYzVlOUFKR3BQRFpCOGRhdzJkWlBQd2pDcjdaalN3Q2pSTWQ0bWlNYU9iZXQrTGFLSDdYWXJrNXc3RVJBdmJSZjM0eXBoTlFFYURCNnpqVWdadlFya05DRldoWHZiS3pNRFJzN2dHVzJEN0J4Z3o0enNiTUp2cVlLNmg1ayttR20rWHV1L24vZTBBSDdweUFVdzN6bmh1alVWVlFjNFFkNWc0bk1xVVhUV2RkTWRjL3JrUitQN0lzZ3FWZnVWd1Q0d1VGR0hGL3ZMQngyL0Y0RUdFZGlJWGxSd1Z4TFNxWExCUEhGakFxbzlmOUtkMXBQYUI5QldoN2FDQ3loTWpBVmtsenBmWVNzQTdkQ3I1T2dwbUJROW9MdWtaSVlFc3NXN3o2TFpaWHN5OFRsdXFSWXFpVGhDdnRSZEZlczNYbFlWTjJEN2Y4cEVnclVESlVpa0d3dzBhUVJtaldhZ1pPNU1Hbm1CaE81WGJQRjhtWURBN2pTSU5QSXZWNUd6WlRTL0R0VkJndDhhckR0UHdMQ25ZZnJxRldLS1lnZmMwbVBPUVF1WmkrUWl4TVZIQTlmS3UyTm9WNCt2Q3Yrck9SVnhSNzVpQmw3YXcrRkJWZ0RGNHdpTERrNCttMFVNSUlqbkZiMm8vZ3lFSVdUcWdlMUc2TTlsMGZHUGxnM1ZvOUV5NSsvZ0JOV3cvRGtoL1lYNTBYSGRJU1BGQklETEpENCs0KzJLejJ3R2JCaExmRm15N2tjRmtpTjJGZm1VTGVDTHkvVllZazRvOGFOT1dXSGVSd1c2dWFoUkpNSUtnRW1wWEVJdk13ZllJWDlidEdwTS9kM1pJU1hqMEhJL3EwT3pSc2FWRnZTU09CVG0yR01MZStUbVNSTHFLbVF5UEpBRXZzQ2ttZFBteE8wNi9aK2hnZFZsWFBXVlhCNUlwYWtaUHFxbnAzcHV4aEJjTCsxblJzeVBOZHFvdnlLNUZVU1VTeHVVY1JJOExSQ0xqbGZPcFdCRkpjS3JoVTRnSnRjMkV1bmpYWWhtTkt0eFlvbktSQ1l3cWdJdXNHSWN3V3NyZ2ZwdjA4VTBjeGE5Uyt2N1NERlJTMm9zUGdLaEVKQ3RBQ2hjZHhQRGo0bk5ycUpzMHl3L2swN0oyL01xR0JsOXBCc1FhcnVKU3VFbzd2NURiT09taVNzTmlWRVh2bVd5d1hzSytaYXhzRFpuUVArbTlGejlpdVBXV1JnQmluYTdqSUNVNmhWZnJqNVVhOFN0R0hUV1N3OFJkZDJrcUE2MlE1U2NmaEVtbnZHT1Z1amJOenJMcmdBY0lzZlNQa2kzU2xGS1p3bjBEdFZWVmZkKy9KSVZYdUVYNVJOZFJBQjhXekpna3ZkSG5scjRpWnBQQ1R2SS9HaFpXQTN1ek5XVFNkSzdtWTBscCt0alRnemhQc2tRbEpQWEtnMHFtNGdsQWxyT3BrWmhCNjhFS3F3UnBkQ1hET2dtemxGYjNqeGhRcU5tN2ZzZkN6NXhSQkdtL0cxWDFDdkZKWTBJQXp1eVVWcjhxdXZrYkx2T2FISHdlRzdPWFZJTHhBS1dYZXVvVEd1VDhvQTMwWS9jQ3RHNjR6aytnbHJRTXV5SWFWcWtvNXRkVjRBZ3JJak94a09vbEFjQkZGRU9MdHh5M3pHMjdPUXB0VXFPaVRHSXl5NXQ3Y0JkdmxoWS84OTBESHllMWd5VDAxbXErbUEvYW1XZmxBOFg4bmlFSmV3NStNSWNMbGFiejJ6NWQ3MC9uMFZzdXdGc3U4SGhwV1d3cVpwRG9ucWl4ZGxiVUpONUljL01UdzhnNlh0ZzUyRGV6UUFQa0JMNFp3cHJkMzJLYlhrc1JCY2NHS0pPNzYxRTRqUnpEN0l6UWZKb0NBT3RzUmVDRWIxS3JmN0NqSDVqVWViWDJNNytzcXVZWG1WMWQwc0o2OXNMQUNzRUFKZ0JObHB2SW9qVWtXeHdvTEhjWEVmdUY5Y3I1MWNpNFJlVnUvWm43aGdnbXJSTXlRM2E2azRyN0xqL1lTQ2dham9RTHI4VldxRjE5TTlLVVREcWZqa3kzMWFsUERxMDV0R2JRbk9SbmYwdnJJVXp1alVFR3lPamU0aWhGOThEcGNjdWRlN1YvNDlxQzJJR3NWb0M0WVpXeHBlRVpJclEzNVVvZEE1WlNyM00vQ2dXQ1BKdUt0WmdFQmZMbDhmWjhlWGo0ZEkzZGg1bjBETnAxV3NLQ1FXdkVZeDdSdEYyVnJXamxWMC9pcDVNRDFndzM0TExycnFZaVA5d0ZlaEpzSGtPZFVnZlNJd1RjekdvaU1OMzBaZ0l3WW5iQjlOZFJhbWUxOWZtcktnYVNxTjFHR25ZWFEwb2pwMWdNQjY2VXJuSzEwM1B0VUJPMkphUWg3dWdGS0w1RFZ0Y3pHRUVYSE5pQ1JEWGd1OXJjdE1DYmxzeWo4YzdENTF5ckR6dklzaHdMeHY2RnlNcXZVQXBzekFvaGtjWTh2UTMxOVM1VDZHa2dWcWlKQ2ZwNmZFTVFsR0JaZGgxN29wU0ZtSjh0aHBaaE1sUFNmMlFOQUxqRFFKbFh3ay9ZYzQ3dUMwVHpLOEMyd2lTTjRJblJjK2RpV0lqMTNucUxoS281QW1KM1dZZTd3ZTUzcUg3ZlRsL0FXY0ViZFUzUGYxZmp0NXFBQmFoYUp2b1dLWGNwUlFtZGhQYXEydFNGVnBKSFZoSklURG0xMEsrZW02clMyempHdDcvRTlhUE8vd0pUL3VoRU5BYTZqNHdPaS8ySm5JYjhYeHA4bHlXL25Tb3hqT24xZG4xeWhRNmRpTWVKV1JmN08xVDJTV1VqTmRBUlZUV2htSEdpMFBaak90OXo0dUZzdytUNVRrWWFrK1pJTFpCam1vamRMQ0RHT0NCVnZJcXRhMTZqaVNJdE4yM2g5TFVQc0dkZnJSNW1tTFpWR29DZFUvcm9WV2tkRHl0blNGZzhtbkwwbnEyM0ZRY1pTTjJ5Ym9KWE4xT3o3dmFRWkRUNHAreEtWSm1LZFJicGx2MHdCK0E0SmNYaUV4c3BNTlhONUpsV0JMQzNwTmR3L2RNNU1lVGRaU0FpdlJIUVlUVm1XL0JWWCtpUDdaYnNjNUFDL3ZnR29PaVYrTkQzTVozc094aktUU3ZEdmpQRVNSWUFnUkM0SXRFSTFQRmliV01tcERnenBtdFRkR1dOMmNSNFJKeXJyRG85bmJxRGsyOXR2cHR3QmhkS2RoRTN2eHo3U05WT2x6SXJtaWdVbTlRdC9IZkNNb2JBdU9waWNzbGE2UFk1T2JjV3o0cVZuVHd2V2hKcUErQmUxUkFGVG8zV3FTazdnem5ZWFlhQ2dzdE1aTVducHlKajA1cmUyaHovcVdPOEZacS9XbWVMQmpSRmVKT2hFRDhHWXpiazFKSHVvaFQ3UlN5ZXdSeUc0MkNTMG9rRDdDUTlwdmxUZzJxWDU3OG95VXR2aVFUQWpYZVFiaFVaa0JPZWw2L0EwdzZyR1A1clA3R3ZRZ2JJZ0c1a0tLYjNnMjc0QjdpWHRqVkRzcE9CVHdCTnBNYStOeXBtYXdsSGdmY0Q4K0hVTjlBSGlKeWpGYkVkOGVlcUFXWjlmZmRibkVoczBFUnB3Uk8zUUlRL2hEejJweDVJdXBTUStlSEVIRUI4bVJRb2tFaERXL0N3R3doTmhuNE5FMmhXNDFLbjMrQmM5NE5XaDJ5ZE9HYjFZQzNpRDJiQkxJNzVxSHMzMDZQZnNEamtqTXpaU3lXQzNDdzY0QkhPUWtYNVlLTmN6ZHc3MVN3ZzM0VFB5RzBVSm80TWdkcGk4cGE5dVVVajJHOXp2VDhvNDJLNC9vVUZ5N3NjOUpFdWNYNlY3Z1dmWGMzY1pLenFJZURpdC9EOVI5UnZTUklvQWVvVXM4UjRZcER5K3JRR1lHR01YSkNmU0JlbllINm0wVDhGNnQ4TWpOTmxoV0c5Zi9aUGZZdVd2WE8vQVM5eXh2eExUYUxUdC9OSnU1OUcyNGhZWk5uUThYWllGWGFvOGROcTNrTVdwanBTYmVnTzU1VXplVXVNcUxXRzNtc0prSWR5SS9lNXNMVWt0K0VJeVBnVm02SVQ2MEhPb1ZhL0Fsb1Q3THQ5VW1SZTVoenp1ZHdrVjZVelQwSURnOCtpSExybkQ3bDcrYmFSRVlZZVVVRWZKek0yQWQ5aXBTNnRaVVlkZGN1bGE5MGRGYWRMTGZTdVdOSE9EL1BkbE8zRWVKcGdPblBjRE9wY3hPSndBZ1YySTB6YmRIRzFCVVRzbkdvRFNnQW16N25SeGJ4SU5Gb0VNOU1ETU1qem1NRmNzMjNXdmpBRUhydW5zckVobFJlRDFEaVpCcDJPMHJPeVhIZlFSRzU4VWhRemU1TUp1bVpLQ3F4djk3aVQwL2FJUElrTU1CeDA1UWlZSlpLRnQ1WkdEY2RSMjBia1pZMmVTRm02M2NtZGZWZmdyVEVRTFpnZk5tUnRJZllVeEFNT003MUlRRHNsaXZSdklqYWg0RnJiYWZrM1FwWEJCaDY2ZEhZODVDeXNWZzV4ZURwdXVybmRjVU9QSUhDaTl0S1lMaktCYjArSkZsQXBIT1M1NVJBb0tWdVV5ZXNwdEp5QU1SeWNMOWUxNTgrSVZXaUZPWWF3OENtQ2tWTzlHdTVBMm01bEdjRE9Bd0E5M091Z01KTzlNcHhVNG5rTlBrNG91UEM1WkV6czdrMmZYNms3dVhrNGxOTWZmbUl2ZC9GZ3dNUzRkVFRoZW1DOExhbDlzeXRhUG1YanQ3TWFENzYrUEM0VzlDTXFwTytZL1kzOWZyRXJjM2JFdVNPYmY3eWdaUm5aWnBCMlJPSnJpaStzSEk0ZFlqSitSWU9GZ3ozQ01YSnlFWll2ckZMdzd4emI4V1VqNDVRTC8yVTJ0YmlVbUo0Y2ZRdXd0N1ZJK05tWXd5bEQ2aFJOOXZuYWFwTFhXSUQxOEFNZlg0OVZJZ3p6Lzd3a3dDMUkwbXZheG5PMEtpVDRYdXgzaVNTZjhabGdCMURBTXprd1hYYVVZam8vNWVqY3F1Y3U2clJQQ2tKNlppTmU0QTZrb1hIaGh5ckVhOEMzUTlJT0NldzVadmNWUmxLWkNienh5VS8yRWhBYmRvUThuQWxQZjhNMGMzMDJ4THhsSXVuODlMQ0JyTHI4bUtaS01JbGw1SzZhMFMyRkhGVDJKblI2WWFacFFTL2hYWG5vU3JqclZZY3JYbkI0N3F0Q3NUVzk5bkpLK3MvQ1AwM3h0N09XQVA3NXJ1WE1MUy8wSzk1TnNMUFVTckpKRktDUmFybUJHMktTQjV1Q3FheHkzcHJoMWVDTEZyT2NpUWZNdk04V0trVm5aT1krSytwVC9PZUdGRHIwZ3pla0hGdER1TUxsQ2VWbHVJMTR4YyswZWVXalNNd1M3RzdIMzVqRUJacW8xSy8wTVErbUx1RHdVOUZMbXgrZ2lLdmUrd2JYVE1jMUJ6SUJqOXNhZXo3WU8zMnlTby9uRTdWM3Y4YUh5NDVRRGJHVVI3dG82Uld6MWRPR2VSb29QNVUrRFlDWnB3ekd0UTlDWkVWMmxaSWZSS1pncDRYME1QL0F0RHBhRDdHS2ZGYzFlc1ZSV0RqbFlROW8wMitwT05lZDQxRVhvdjVYNEtlNmJ5UEdXV3BXNXAyQnk3ODBYRHd6ekc5ODJvM25mN0ZEclVHMjZZWklaajNxWExKQ2pFcWliekxXMDRtcFFZZi9oUGpiOFpFdGZNeXdvaEdWYzlxT3R4RHVtcEtnaVYvUEkxRWgzaVRaOXNzWlNINmFLckpGbEpLalBVNkY5Y3dYYnlTOFFydjNFdTgzYmJhTm9GZGI5Ym82VllSL3FUL1ZaUjRpZjVSVUxBM0RJcWc4RDNUZGY3Q0hvTHBNUmVUSy9vcVZ1N0QyalY5NUphMi9zRVlUbHpsdVMwWkRpdHdZaU96VE02N2Mxa0Q3ZURqMndnUVh0Wmh2aUVJNGlqb290UGVEbXhwcERCZCtVemQ5UXdSczhDUHdhbUxvaWo3UndCR09GT2JJUmdZdUhhcFNoZDR5eWtibXRIemJDRjB6emx5UU5JblZkOGV0aFdmd3JQSEJRYXBhYy9STmQxbUYyaEpQQU9FNVZxNytUS3gxYnBmRmpMcFY1OXEyenE2eE5nUVdyTWFwclN1VHF1MUdxWmFhSWdNOS9jOGZjUi9RZ3R4dUQ1TnliWjNUWjJoR0UwV3I0M3ZqV0U0aXlPaGt0OUJTQXc2QzBpbnl6cVY1UEs3RVIwMlNSb1c1MDNBNUt2ZXVVSTJPaE1OVHFWL1lMNWhUNndCZVNaOHlJTkhRYm1sR2dmaFMyK1ZRNDZMSjRJOTdQUjNSeVZ0Z3dtZUVZTGlqZmM5RkQ1UE56YTBDL0VtbTZTVEVWc3NjNUNkQis5dHptWFBQWXltRE1HaktBQURpT1Juc0pDcHBkZzRsYUJjcS9GMVc4Yy8zckkxK1VaVG9CQ2U0M3NObWZQOVBnY2NaOGdwRytVYkJ6ZVRVUlhjSXB4emc5alJia056REkyTXV3aitmSm82dUNUL0xhNEd5eVNveUFxK1BjYTJ1ZFRXZ1R5QzJnbW1wY3B6Qi9qR1dyWlhXOFN0M1pRY3VXN0lYcVFCcE5hTDV4TXlETytuUzNyMEVuZmM5MzFYUjBHdTRGaG5tQlVMV0djK21MZ2tCQnlEelpvQXhSa3FRQ3VQZ1pQUDg1Q3BHZm1lclFRby81U3luZnEyZHExZ21xb2o3U2w2bGsvNTd3UG5PWXJrZjR3Q1NVN0tsdzVlQkZrMFBOaGNGRXBkRjVXblRNME9vMHZOVnF5UHhMOTU3eUdHZmxlM0h4d3E1YXZxcHB1d2tLZDBCc3EzUjdhdlZPVTBJZENkSC9HVVBRVXJiWFVwM3BkTXhnMmROeXhmMlRXWlJaVlBEeG9BTDZhL0hDOWxUVXNJRzlFQ0Y5TXRnRDlybnFGU0hBdE5wbXJMczZTdU8zTXdjZWFHeWM2YTdJbGVNOXBPM2ZOdjJXTU9Cb0h6WHdZbU5KRzdRMUdXUFlGaFdPdkV2QjFUNmF1RGxVNU50NGFiTkRWeG5nYURQZzRyWDlYMUtIYWk4ZkpreVdZQlI2WXRGNmxsM2J3SEtsWnRBMklNT1hLV2krc3JkajJTWFdRclhqRWRRclFRd1FONlBQSk5OSWUrK1B3TGpaaVlzb01mQmpLTVlvelR3dS9xMDVXMVRncE9UU24wWTFIbEpzOG1JeUdBSUdSZUgzT0x2bWd0SFRtQTBsVkF5WVpwRlRRZFVDWlNzRHJaaTd4TkFmbGhLa3RhdGlxdXUyMkFZTkFRWjRGSExXb1N6Q0NRdHBWenM4cFBWb0wvT0ZkZk5pQzdsUitVMVpMUTg3dGpJUStaZ1NHbEhvcmtENEk3dGdPL3RFRWVYOWlTNzNJenJkNjJ2eGFsYnBGcWZoZW9mYlNVa3dscDNvbDVsOUVGaE1DY2pXSTgwa1YzMG83MERXRjZoVUp6SXRkZkJackUvZEF2L3ZmS2VvOGlQazdxR0hLSVIvNUJkUU1EZnpPZkdZTGVteGVqUGx6Qk1GWExyQ2JUSTBTRkJTWDFZKyszWW9xZEtxL25tSXpXZjhnY0VGd1hpMzM5L01mcWFZVFhNNDQyMlBzbGQxd0NMY1ArV29LbTdQYlY3cGRHVjZhQ3llUW1wWG1ocGg0SEN1MFArWVVCWWZ3bW9udmRoQmRjWHd0M1YwSnRrSlFPbXNnNU9zNGVOb2IxL2FJZzdxcXh4UmQyMHRiUG9ZdWQvUWdnUUFmRmN1d014U0ExeGh0Q2ZLUXNmUjJ6UFlicFRuaUtyMmF3SG5yZHhJZUZrbjJnbnBLTHA5VVVMRzlNWHRXMEtVWW1FeGJCazJ2MUZVNHRBeExkR1R6Rk5aQmYrRkl1amFuZEZyZXdZcGMzWHhDbUFQNkxESi9jRTNwNUYwWW91YXU5NnJGclgrcStUYWp5Z001NGNnVlc1aXlTMitZcXdvWk00QkVlNE01TXJBejdUYzdlMExpUldJOTZFeFRpQXh3QnY5cnBlVWMvekl3NTNlMmFyUE1Ob054WkpOQ0ZueVJwbmN2a3RtU2loUHRCdGVEZ2JSM0UxYzUyUElWd3kzZlJRT241ODBCT1ZJRndzb3NEaWNPaXQxK0h3bjNzVWlFTi81UVRyVlg2Wlh6bmUrb05IOVhrOXQwNnJhREp0Nklmd0RmcGZOOVRHQzNWcENNRXltTE9FcEdaTnZtS2hLWGMzbXpCamYxTW9tWGJFQWNFUS9kSXJUWFFaYVQzZGdFdXp0TmNzcU5paGlZUnc3ZVpDVnVGc3lKUGRpaFZ0NGpqOWg0NE5JbSt2bEhZRjdCRExyb1NsYkRqQWM3a1hWS05WaGFpSmw4TUtFTDdIbkoyM0E3SE9PelUrQ2ZFcEx4QkdYQ2c4Qi9aWUZ0U0NrRVp1NnNTNzk3WUNnbHVHT3dzSTlSamViQTFqTFpiVHBVWnNrZUJERXA5aHZzNGtCSTRQWGV3eHZSblJNZVl5WkthVkIzQjBEd2x3OHhLOCtiWGRQV0Zha2Q1WVZxYVhDRTdTeVRUS3lDcVllaEhlTkxPQmw5Z3lxNXFZRkJXcWd3WVErWGt3Z010Wit3eXFjRWdjclJvcUpOcVpoejFsdzRGZWN6cG43dngxNUNtTEpXY0NsM0liT2xzOHppZDdIQ0UyVVJZUWMvNTlEWHBWQ1hLWEI1NjgzZGQza1QrNVAxbjdzdytOT0hjOXlRN01POFR0TzNMYzJEdjN6UWtDalRza1dJa1RIbGNwdDBWMEpmSVZQWitPWXFwK0FQUWpQNlVCOGFGUFhiUXUyd0toZnlKWkozcklwMUZkTmVzYk1oMGlYZktvME1ZeDZBeUlYQjhRWng4K3Z3U1RZOEtKOE5hNythTTJxZEc5VlA1TWp6STRkU2huWUx5enhxeWp2dFh3SVpXUnFYakd1MXVCc2pzNHVmSldiaWhhUGdEQVlTYnNZeGtTMWpzUWtHbHp5YjZZc0JhSy91emRMaWEvRXJNL3dXN29qZFlpSFU3amVlbWx4ZFIyNGtzcFdEN2NodlhQVTgvM1RCZzM5NUMrVjV3SjdqVlVSV1poTE1ySzNidUJGN2hWb2lyZ0lFemNJRkxNQ1B1TVNNSXZuaTIwU0FjNmdFWU1KN2dUTndhN0svSlJPNU9zNWpIRnAvd2N0ZHVUSmF1WE16M3craDd4S2lhSmM2Yi9LNXU4bkh4S3NvSDNDK0c4M1NnTVdSUW0zSGk1TXd6Vk9HTnpQSGo1YUVLTENRdTY3SXNlRnBMd1hMT2Qwa1JnMmZNNkozNjRWL0lWT2drYXpzWnI1V05NSmhaQVE1L0U2T0ZPOVpneW5FaG5PbnhhbzB3OEhXZkcvcTFQYWhkeEZ3bGZuMHVDT0RzYjFueENlMUpidWtFVUl1aXQ0RXRyZ3JzUE84dXdaMkRtWGZlUUhSZUE0QzRhb3puYm1YWmZqTVZxMklqdE1MV3VhbTJEWGk3cnhZamJhU2xpbWhGaVVMc1RKUkpxZE5IdW55aHVpSDdHZktnS0FQaXZVVkcvamVmZVQ5cVN3Wko1d1Z3eDlRWVJkc1dLR2lMUlVjWFNZSHJHYUZ1Q0dHb2FVOStsTGYyQ0RjV3dlcTZmSURhU0RMbUU4VVcyMkh3L2QrYmxoVlBvdTF4bTZUMVZmaXhHQWR5Tkp3cVBqY2ZWV2xOSitVUnNjR0pHMngwcGI2dG4vQ2Y2K0RLNjlzakw4Wm9DSlJYay9xUTc1WmtLSjZvTmVxZzVnZWxyNG5vRFpVZE02MnlnampkSFlSd0FiKzdmY3BxK1pHa0VDcWh1VWVUNjJUUXIxYUhGM2NjdDF5T3pDc1BMUlBpbi80VEtrOTVkVCtGa2xPbDdqdERnNS84dk52OUFjcEpKWkF0SDY2ZmE4MzA0S0p5ZlpKaU5Nd1NTOHp2R0hFcGZjVjRibmhGSmFvRjRmNHJ4aXJGNUY4M3JvODV0UWl0MDhudDhvMjYxeG9wdG1qbjA5d0h0OHB3aHovU1R5cXZHU1hkYmxYNlgwVVh5UUI0WXVLaUhPNUZhbUNDYjhibWhKWFFQMWxqaW5QcURqNUZ5NHovcE9Ed3VEcjZzNW0zTk5PcEJQYjJLZkZVUE9MNitRVTNkYThwUGhqY1ArQ3F1NGhZVG1ySyt2ellkbU5tbWt0OHVzZitZbElHYWlYZ0o5OTJ2VGczbFE4WmVJdnNLUEhRWUVvVHJmTHNNNm43N1BmdFBPeUF3YmhvOTV4ejRNcEhtVFJyWkZxaC9VSDhsNk5yTDNTNXNzcTl6ZGc1STN6RllFYVMrclBtVm84ZEZiZnljVW02UEtpMjhOTG5IdWNEbVZ0QjlSOFpSbVFSTE1jc1YzcW9KbUora21mbVpmU2k2S3lqS2FoblA4eWYrMEpIYU1tSzJIcnJROU85WE5vU2phdWxSUmFKRktiZFJlbkZjM0xzRm9ZaUhTYTZHUEtUTTZHQ1RCbjN1VkpCRXNzQTdRTTJBcDE1K3dxUFNRdUV5OGNROG9YMzIyZzUwL1orTkgxRGwycXd4K05hK3BOYUhQNU1yb3ZqS0NvK0FZeFpYbnpDemVnblZ0STVpU0VkZnVYR0lMNzhGQ1ZaNmp3eWRrcGpSRVUvWVVCNzQvY0lSa0tmYVlhUzYzV21QSTRqSFNucjJuT2FVNUNobDIzQXdhRGpMT1NOYTdBN0FIa3FnYkZpbk9teCtYaTZBeGtXY3YrZjVyT1dHUGVjYnJBL2xDdHI2R3lXOWRuMTVOYmFKMUtLNnNSZ1RTMk93aGFzU21CSEJTNVhrUjBDang1NnBEUXVNSSsxem81Qjhkc283eGtKMDEvVUM1dWRQTnBkZmdaaU1vYUlqTmhzMFVuNGpRTDhTaXlWbzZMd3J3WkRPbHRCeXJmQStUczdFaytMbmJqQWJGeFlrQ2QwbkdSWDdTTWlKTUpER1hGUzFlSkZFd3BPSFdub2ZDM2J6SERobmFpb3llYXpxbTdaOE5OeFNnUWlUWTRPaENkK0VDMWZmMHcwSW5mMWlSUjRmaGNoV1gvUHllbVh3bW90Rlc0OHhHd3ZVREo5Vit4dWU5TytEa1luVFc0Qkc1TmxISTlUYjZnTDNNRUJ1UlRCREZ2bDBxbGVzVHlpWHlGZHN4bmdkaUZ5LzRveGZwZXdlNWZmalRUaTVFQUR0eXM4bEVsT0lrTUhrem15WG5SRll4T0FsZWt3V3B3VStBT01FOFlacWRZcFdvYlNqWkt2ODNRTk4xbGVHajYyNmw1YmI2RWxXcGRsUlcrcVdwQXpuaFJYcEt0a1hKaUdHUTVJWVRwSkYxN3l5Sk9SeEgxejRmei93a3pScUxVTFljV0lwd0RMNkVqU2gvblZYQ0VqWDJ3bk1DcE93dksyRGhDRy9kL0hNTTVjYk43OGxocDZzWG5pV3FoT2Zrc3YxRzRsTmRrVDRUcnpmSHpXMStHVDFYNjhRUjVZNFJPZnVzcFZlak9Ick9vSG5WUkRQVmROeUNOa005UER5eHhUOHZGTXV5SVB5Q0MvbDRQR0RxL3FKKzVlS0JlZFREUzlJRlVYVDVHdTVka01GYi9WR1RkcEYwTmZQZ2VCN3JLRC9yU3J4QmlCUnBUeXFzM0hucGl1M0xUS0cySzA1VEwrUTd6S3BkSUc3NGNreFp6NEwwNWdXdlMzOCtiSFk3bGFzMllVZ1pEeXpSbkhDRVZ2QW5hL1QrelNlYys4aWVlU1dpVU1SZjNNSTltM2xpMm1jUjRWaUtqYllMSDNpdkhsQUYyUUtITEo0a1RMeEVGVTZiU2ZnZGJveFBjc2tBUmZWbml3aGk0N0h2Um1RcjNOTGtsdzBpaHU0WGc3ZENCb2kzcStjSFVRS3dhbjUrUkV1SFhiZFovSzdBKzltYU9wR3Z2bU45Unpad3I2eERhQU1sYTNlSlBNd3c1and5cHA3SHhndWpOb2hvNnRsZ1RoQjJRSUVPV0hyYTJKck1sNHpOV3B4S3dIb203RE5wNElZVFpyQnh0dHpCTG1udjJ5RzBHYWI4UGhFTWFBZzk4dDZBelhveWpqL1QzMnRUZTAzSDFIWHlWMlVOUk1KWjhya2UxQ3JKM1hsRTJUQVBUaXVsZi9lMFpkMWRiQ0xhd3dsbXZDd2NmajU1Vi9jQk45NzBpMERHdFordXExbjZjbFVzMTZFR1Y5RG5nUDgrQm4vcVdZa2M4SXhyNDdwR2VtSTVLWFRCMWZ6RFphTWhWV1RsZVFnalV4ek56YTFrQVBCcHQremZ5Wi8wa3p6c09jMTY3SUV6STV1SUNRVk1rMmZ1dEVNUTFWSDBjQk1SNDBtUjdjRzR2SmdWY1N3Z0V4U3RySHpXYjlacDlxTWVoMWJBWkhTRnB6WjliY3ZBNmdKV215cVREVXdocTA4d0pvZkZsc0dNK3ZjazNNaDRGeU1JczNHbFg3aWtjdVNNWmhWdGdWSW5LdHRpWVlteHFSeXd4U0pNdklaamwwelZMdUhRMzN3VHZldU5LZ3l3NU9BUHdNMnljK2FzaDJ6UzFjdG1hSDNmaU1ZMVExT2wrdXgzcVpFMmQya3BvU1NLTjNlWGNCUzhTZGhKUjgzSmlIOGVTNmpZdjUyV0FURXEyeUFVNFF1WVovTjVSd3E2dnIrUmtoSytHY0lYaXNtb2pRdlAzY3pnbUNWUGkzSVZ2YU5kcHBOY3hHNk9LV3RvM1ArTDh0ZE5wMWU5VjIrT2YvRDM5b0NuNWFBUG1iQWdOd05jL0tCZkxPa2NZaHI2MVRNR1htS2FMRVpEN2ZJdUxsNC9NOGxBYk44dzNvWVg2NHk3Yy9lSVl1NlAzUzVUbURIU0lnRDQzbURNWmMrR3dqc0ZwS2U3Tm5OdCtFMldGTkxlRzhWYlFTSHBKZWNvcTZLbkcvMzdMOENINHUxU1ZQcXRQcjZOVkhuTzFGR0o5ZnZaMnpSZm9YQ1kwUWpRejhDVitjUzJxczJPcnZ6amdaZEtpbUdYMEdVL1psUFVzQ2MrTWxjb3lTRzBmNnk0NktiT0Y1NGNobW15RXFwbWF4TXdYaW9LSVd0YVdRYTFnMVhHVURuU3JiLzE4SjVJZFhOaHAzdHA0VzBBYmRuTjNqQXpWcThFTWRLSjh6YWUwQlBDV3Rpemllc1RwWWg5dlhrUXFKcW44TDBlZFlKengxSkY2UzVla0FsTld1OFZCQUJrYVNlbDdNRVo3T1ZRSmZZQkVXaEZZMnhPc3NiK2x0TXdManhPMmt3M0VDcWJITDJDNXNwQUhLb04xQTJZdy9abDJDRHRzN3FGTGd1dW9LMEtheG5BS21lMUJYdSthcWFjZlpHN2VPZ1pKRW5rT2VRWWR5QWpRcDV2UnpTSnh2MzhPRmZwWm83bk1Rak1uOUdjNC96L21YamliTE5KL2lTVDE4VDdZblJrUy8zMXQwUmh6SjZnMWwyNnNicVBQVVgyTlBCb1J3VFR5Ym1hVll6RnRWOWdod29jWGxwVVdacEUzZ1dkcEFsU0h0d3BjVXpuL1JLbSsrNVpYbm1qaVY3Z2dqbWV2UzR2alYzRlF0MU5EejJsNWFNVTRnMzhKa2dVbUZicnppQ0wyblJndGl2NUxpbG1mS3NsRTdZdXNDc0VVeUN2QzdYZGVJUlc1WG9vbEh4YWprTGZmaS9tVTlWQVhNbDJocFVneC9ObEU4OHQ1UWo0dUNTcE5SRk5rZDY3R3FiZzFWaWE4S2tQc2pRcnJCc1prRzI1MXF5U0dpSlJsOHlla1ppSEU2Mjd0S2FDUFVNbzRlOHN6d3FzNnBnYmJBa2YvTU1wNUw0eVJvMUlFUC9OZ0FuTlUrNWpQOGtMWDFtdEFQYjBiSW42eTRyckV1a0h0NmVmd2RSMnZlSW8rMDRpdGN3RWRGZDJxamM0TXdjcTB4Z1MzR2tPazhScHdrbnFubkdLQnN4YUk0M2pkYUlMb3haempBMU02a3Q0cWNoK1d3VXExd0pWT0RxVzNRNVdDYitkWVVoYXB1YnZDNndqSGt2eHF4cU5Bd1NrbExSVXpINXZzeHQwN09CdUVkSHFzVVYyZ0RPb1V5YWMwVVdld3RDNDhPaGlvTW55Q1ZKOWlUVkFpbzF3UUU2VXRvYVZaUHhzcVVFd01Hbjg5WXlIQ2VPMHR3cHRYeUNyVTQ4UkNPUlgxWGs5M05RUmRoVTZRWm1DSnZjK1pzd0NOcDlXVG4xUG9nYzAvNDRWSm9qaiszYXZmZGZuUnhsZlhLaHZkaFo2T3pRYVJ0aFR2UlkyM3VFWEhja01HWTNVUmpjS2pzMFRNeFloR2d5NjdWSWliMWRoYXNkbGRVU0cwZmxiaThKMUdDTElxOWFNeEZMK09zMjYreGsrWnJyVURyYUZXN2kzREZvN1N5d2VsSDMrcjhUNExPbGM4anh3K1FLYnN5dFY2ZVRWTEFUaFE1cFZUa01mQVVnZ1F3YTBLQVNaVlVhekdTZEcraUJaQTNwOHFhM0tIS3I5aklma3BuVE9HN2lXNmw5OVJZek1MdSsvVE5WcU1iSVA0NHVqTGJDUXRXb0h0RUV4b3ZBY0RHdFBmODI2Y2wwdHFFMldERUZqazZuS09YcjRoYkdXR3YwY1lYVjc1b0hocXhwb2dwMzg5dnZaVEZCUGpBT0U5aWx6TnhPNWZyV0tTMW1zTlJDUDhjcXhia29rZjFIVlNHeDlKM1VOdE1ZV1IxUTNZMWtZeXdmMllLRWpaN1lISGtWYm1Yc3RGdWNKblZRUys2eURDNU1hTjh3ZUVNWjVyNEdPclNBd2pWZ3FJMnU1eVdvWk5scHM2TXJSRFJUbElOTFZpRjJOazlKcUptbTJtb00xdVZHb1pMZ2gxcEFNZ0dBS1YxaFliWTAyUzhPWTlhcnpPOVVuS0sxa2VJdnZKQkxJNHpyd1pBZkxjM2IyQjFJcHNxS25hMkFTSnl3a3QybFhJTUh0MnNCL0lmVGZDWHVIenhBYitkOURsQWRPOHkwUHdnRlFtbUFVRGhJWTFkL3h0Qmh4bVpDdlNmYkxrcExNaElSeDRlYWRBN3dtV2k0MkdDTDFRclpDQUdJRmxmUjRpRk5ZUE5QRUtvMy9xK0U5SFhhb0dJSnFQOGpLUDZXVFJtdzB2b0poMHlJTTdCSENXSHpEUGwra3FnUHRRY2pObDdCenJQQVRJSTRBTTJ5RGxHWDJueW5XYzRWanFnbHVOT0pWanpVSmc3SVhzV3NUckJ6aU1zanYwc3Nrb3RDWks1MVlmV2daNU9jeEhTM2hEUi9uejFvdCsxMGxzeEhsVldtTFNsYWVoR1Q5cGg5LzZzeHdiQWp3bE96ZjlVRXhEYklBOWg2UmhzSFIwZVp0Qk5lWHpWTCs5ZTlYY21EV0lSNDhhbHJJY0daN0gwNW5JdFNMMHpxcjIyWWZmdVA5VnJXeC9NQlZFOUpSOW0rV1lxNDNvNUkyNGhrUkViTzNtSWhpa1Ayd3BBR00wRmNGKzRiekRLNUh4dUxXS0w1bDY3QzBUYUp3LzZPRVRtL0VyK2RMQjJQM0FqMVJudkVMalJPaGI2K25ZUHlzbXppZ0NwcHJqMTE2TW9UbHlwMGRNUWZPclNsSXgzOGtTTzMyRFFHbTNkdVQxSC8zMDM1YzFlOEh0a3BOUHJFZSt0UjJ1ZXdLc0M4T0NwUFJEZGZuR3B0RkhCYk56QU5SWFBsT2FhdHFuSUtRMVJ3cytKWXFkQVducjhkUkdQcjEyMUY4aEJKQmo2Z0pIVnZ0TTZxV0QxbDczTStkYTEyam1CQWpVMHhaU2RqNGRVNXFFR1hsMTYrTFFOOGQ1K0VTSFVXNWgySmE1azdsU3p3OG55WjZrWkN5Z1RKVWFoR1dQdyt1Y29sSm9xclZCbDZpdnZmYlVaams2aUZNY1k5RExtSFh6NTNlNDhvWWdTOTNuelQvL0RGRUVwcUUyOHhHM2xISWY5OHpBa0huRWxNRmNiQ2F0WEhKdGNDTDA3UE5mNElON0RGekxJWGRDb1poUWxReEovVU5jNlczVEVVbGpqelNwWldZclZWQnR2OFpRNnZyV2FkZW5TT3ZGdkJNL1RHUktZeUdoWmNaUXkxSGtjQ3BVLzBIWEh3aCtuNzBzbUpCclNGeVU0UU9OWmV3SmJla29VM1VETTV5MWZ6QVg0bGlZeDBRSG5FOCtta2hLaUpmb2UwV3c3bjBhbU96RDRxZWJkRlVOcXp1cWlPMWdCcDhNdHBFbWVzZ0VCa1huZEgyRlRmNmJYWm5OU2IxWWlKWDFjUFBoWU9NbmNpK3VSQlNKYUVZMnplTWI3dnhyemVmdGlYVTRTZjZlMWtzNENVeitkNFBtTzNuMWZVakxtbm1hUXZJaE9jRnZlSEdSZi9NZUk4K05yMWxnL3JPQkJvVEtmdnVSZElpT29pRmJwMlM4c3hZVmRiSzVMbzA2WnB1Z0dGMThwY1psM2MwZGFpTHdCR1hSbk5VbGs0QUpBNitlY0JaNWxQTW1MU1lDRTNmMUZaS1loOERneFN5akRQSmZGb3lBTjJuTFF0UDZJSkFJK3hpakN2MTBFQXRONXlLTkFTSlg1Yk95WTNIL1BxL3ZoSEk4VzRvNjNiVFZ5SVdZRTd5RlVnTkVBcHFWVVNyT1ZpUllXbkc2c0hUMDFsaElKQnZvOTJJZHlVSXhPcGo4UTU4TFVOby8xT1VKUEQvSTIzTGZCV2QxdVBMUGtBNGJFNUpEeXY5a3VIRWYxYlBDeWFDeC93TitidzVxb0hhZU5IeldhbVo2NUJzcnd0bkxTMGNPemZvYkUrUEZHdHlLSTIwODBnMjRjcERrUDJ4c0xRT2tIMHVVNzBPdkN4VGsvbVAyWGFDV3RtVXhzZG0zcXkyenoxckxUS1VSbXZFME4yRUZUbnFkU3hxbHh5K1JPUXkwOUhVUG8xWnlGeERTSDZFR3dzdUJFU0hVN3IwbmhoMjNwalp3UGN5aDY4Mmp5SnZIaGE0S1R2RWp5ZDdUYkRUcWdqYnplT1MvVmtHTzQ0Z091K3Qzd2N3YUZsTWRYMkRtMEppcEQ0dHE2K0FyS0xROFlsY2V0OC9zaEZVVlZCWlIyVHFPeHVQYlBlT2hrNVBZMnhsdDVvK0doZnVNNm42UmdmSGxqQXlyUTl5RGFVWkpVRGM0TDJ0VEZEMTJzaTU4UW13Q2NUd1c5K04yTmwzVENlaTk3VmVTdW9IY3lCY2w4ekJWOEQybGhpa3JwY3lURUpuYVV3dmtWdDhVTG13aUx0RWtJU1d0Mk5qTlNuSTV5c01QYm5Ha2pmenJ1Y1VnMjlDbDJtTHRPaTc5OXl0M3dpaE14cGFRNDUzY2JZMlR4cWpidjQ4eUFiSWtqRmRqekNBSHl0bGtyWFVEcWlaZnFGRTdsUVZjdm1SNWd5bzdiQUVlWUdRNWVSNWRDMUROQXNqL1lPQlMrSmd6VTg4VzB5QWhCME05UEhLRVcyU085c2RWZklKTklBaHZ1SWE1VWxuQmxDVnZPSWhaSkxaWXVFaHJCK1htNnlkd29DME54OGlGcERLeEY5dnlQeUx5V1BFcXJHY0FidjlzSUMzWWs3cWI2YnlCVC9xYU1mSHJDOCtvNFExb2FUY1J1QmNsUTdtbXROVnQ0V1loSk1OLzFnNGpOR3d6UDdQR3NKUU83MFNwdGhkNHIzbm5aaDhKeXRBLzlyc2RPUDMreHF4cFJMRDUvR096MkhZanMyMWRJUUlHZzMvbUhqakF4aDQ2RVp2bXR0SW9jUUlaUzB0V2JUaTM0SCtqQ1IvV0hBOHRkUWk1WDZuVXd5K01TYkVFbEVBK29qOEtIVmU5ejRiSlQ5a0xBVUExaWhXZmNoeURzUlBOOXp4Y1QzaFRaNWVaY3E3QTRwUW94ZzFOUHE2a3NDcFZ1bDVldnZJZjNnMVIrVVZlNndGSHdUUURWMzVWM2p0Yyt0dW9sb1JFb284MmNrU0h3WDVkN053blBaOHVlSzBKdHRKOUx3cTJsdDNKT3U4OUQ5ZFFFWTF5UGFsWXl3VGZQdFRIakJwMGZSdUlwcDR0V2VQRkNrcDBZNjgzK3dVVE9yNHAxd2g5RGlPTDNFRnNFWXRKS3BTalpGdklST3JnYVFCMHUxZW03Qzlmd2xTd3pLZVZJTzR3SlBTZXk5T2lpeWFyUittc0laL0pjTWVlL1FVZTh0bmNNOEtnT3NjQTZ2TzMxMStBSmVqcHI4bkRNZnArcWprc1R0WXhqUkhhRWc0RkwwbHJ3TnlrM3FUTjdUa0JKNytFWXVhRm5BWU95N0xib2VhcVV2UzNRRGcwU09aM0Q0Y2JjV0FTb0JMV05MVyswaVFTdFREL2JwMHVRdU1rbzltaHQ4OWR6dWRUNG9HN093b1Roa0s1TkFiM1Z1K2NUS0YwYUgvc0xmbm45ODlFK3NmRVp2RVRTV3Q1a3UwRk5RWGFOY1pJOXVwbWp2YURDNWdUNGlaVlh0UzF4SzFRRWc2U08vTmVMeWNpeXhVR1M2ZTBrM2FzMTJNdFFtdk9mSFFGSGdCenZMY1FGNEVxTkxadTZwU3V0cWsvMGFtaXJSMjdyNlliZmEwcTJTamRybi9GZU05NXVEb2ZyYWZQUWY3c3V5WURmNzh4bzNycVNudHhPUW5nWFRCNFpDbW9RVlltdnR3OUZqaFlSRkhzSGl3TVdydlB2Sm9MUWNzamlTRzNMK1h2bWg4MVdRNnZENEhjRGtzcWV4Y0FmeXRxYTRZcVFSbFVCZ2JTaDZVWm1QaXdMdlVRMENqTGtRSjBnVXlyVVNwQ3Uya1RxczE3ZFZJeTFIL2JXQWRDRUpkems1dnd3cmNkNndDeTAyQTNDZWpDdnd4R09LZDFWZ3RHd1phK1RkQTJTSGVmbjQvb3YwaU1aRm16TnRJWFJFQTNmdnlocEZrS2gvNmJuUlZsQzB3eTlTUkhXMm1pRWs2YXY0eFFaMzNMWUZTNDJWbzM4QkxGTHJEUWZUcWtpTzJ4STdUbmt4cmUwd0hMMXNjeEpQSEhpQ1NVRzBhSEVVNXlxbEp5cEZTR0VOb0puSm9SNTZBMHBxWjJuVjVidml5NEkvSmZWTmw2WVZ3UFVXcS9sMmZ5QTY1ZUNkVW5LL1JJUEdjNDRpeGdqdHN6djZZZFdpYy9kcFZlc1FFVlkzM3orUzJ2S1UzL04xUmVGdG1GRE4vWGtnakpWV1pwTzVpeFpBK2ZHT2h2R0ZkUVUrb0R5aEJzRXljS1RmcU8wanZMVzMvMmk2RGk5MFErQXB6VjJ4WGVUUW1veDR1RndsQnh2N1NocFJSWlYwZFVpYUVxdkI5ckRCa2d6OGIzMmh2bk50UnY1dUY4SUhDNVBSdDVtUzRBK29Mc3d1K0Z6WUtNT0MwdnFtMmt1dG1UYkZSY1Z0Wm4vbUN2Z3U3WEJSQlJSeWV6aUZnbnloYmJpNmE2WDRmYWdWYjV3Q0FqQWFOeDZZVEdMdEFpMnBURnZSOERVYmtHV240Z0l0MWxIb0VFZ21jMU9uaFkxU0lxZ2g0QUZXMHB4NmxvazBMSnUvdUI1VllmeHVuRWVsamltcHJoUkFqSGp6Z0pWQkRpdzV2d0x1VVY5OTZPRmw2OC93QmVyREhDWkU1VnY5MXovVEtqc0I4M1N1am5TalhXTWFnbERFMzNNK0lYQ2thWmJ1S2p0L2xvWUl3YzdrWnQ1N0xQSTd4Um9sbm0wWHJUOHlOdlBqRlhXQkRKV2tYc3E3R0FSbFMwcVRIdFk1VFZvQVkyZCs4Uk85YlFzb2hnRFZ1dHI3QmFPcTMrMVcwNzFNem05RVBPM1FjTUNEWjNhQzJkaXppSytIQTEwdjQyYkxGT0daNnd6WDE1TWN4UjFtM3FrdFA2SDJnZDBmcVBSNWkxYnRhMC9uaWhsTEh1alFNSGdxWWlYSVBzd2ZVemRuRFVPYVFwRURPeUxpdGN6bFVUOHpnNmp6dUx2RzlhUzExZGxmc1NCZmp3M1MxMTRGb1EwbENuYkh3QWx3Sm95MmY0ZXpsY3Y4eVJqMWdqSVk4ZEx4cEVNTDBiYWFkd1R5TEJwOXkrNHAySDY5a1JNcy9LQnZyU3ZYZ0RPMWFldGIvVm1ldXF4cXpjVVB1OXk4RXhobXpqWTNBejBiMTMrRU82QVpDNnFpbTZhK0J0TXk0cmwwN1NyUzlrazlza3hociswTEttamVrRlc1VmRkZW1mZ1Rpcno3MnIxSFRRdnY4NnhtSmpVU3NVa0NVdk92Z3dkQ2JBRFVIQVMxbzR6UllNK2EzblU3Vit4VzVHTEpQRlg0c05Eak14czdlODlOMzBSS3RiaitWQ0NCekY2dDJSOFlHei9CcldwSDN0VkxGbkpXSmRsdnpGQUlOa0dDc0Fhb1R2SlVjVWxJZlZaaCtQbWQ1OWNnbmkxbHhEY0xLb1Nva2NienBEY1hLclk4SURMcWZxYkNrSnRxRmkwdmxobTVtc2dLSVZSQWJrOXQ1T3BURXk5QTR3dHc3MWtUTE0wdW0ybXM4dVJHL3VuRitvRnFXUk9NTU5IVGtnVVdUNTdpNnpvcjFWSEtYZFFaemNSWFQrMjY4NDFFRzZ3bkMzOEE2SVZDS1FWdjNpelJlSlpKdVNGR3Y4TnhXYVlOYmFNaUc2QzJWRXZSMmEzTjlUR1YwK0puQ1E5dmxtLzNvVHhaQ0J4ME9Yc09vOElxM1J0bXFFYWxFL2RmRWt3dVIzT2JqRU1ySmtuaWtZbGsxeWlJeU1LVERNS2U0WXc4N29FMnpqcmo2RndqNjhseG5MN1laaEZFMktUK0JlZWxnRWg0SmNzWXVqOGpEb0ZhZEw2c3ZQb3E3NktVcVIrQlZVaEdia2ExK2cxd0JFdFM3R29KN0Z1d2tuS2luZnB3UVQ2UWJCL3VSNlgvQmN6QkhudmFwaWdMQ1h4N0hCZDE0Y2szNTN5RTdBaFlXZ1dHQjBINGRZYW9NVVFFNGRXU3ZxYWE4d3hRZkdsMVRVdlBYKzN1TFJQcVRNODJLV04zWVRXNzc0QTlUaGY2Nzk4MGc1YlZnRE1EdG9SOGs0V1JvaGsrR1dCZGdmZ1hoaCtjR2xXUlpPK3ZnNGp3SVNKcGZmNWNvY1N6U1p3N0xkTDQrRE90SXJBUjA1R1o4SkF1YjRjUjdvNDE1dzk4ajJvVDc5eVFIM2RPdDdiOUdhQTFyMnpiRlRWSWJSL3N6K3JHaHd5WmxlTjRyMlltTE9iYVExcDl0N1NxUkpuR1plWFZFRVQ3Z0ZpdlNsMU55RnA5ZUJEc2xlSFVmMis5eXNZeTVPWDdiMW5ta3FpejZpdzFWOHFjbnVabS9CaVA4SDVTYm9taVArazJMdGc5aHpFTEY2N1JUNDdtT0ZxZnFaazNNanovTTBBOWx3dVNVZlN3Qlh3M1d4aFVUK3dPaTF1TFIwZTBzejV5dmordWFDOXRHemR0a2ozTVlVZE1kZkdUTG0va2lSb2w0NkRSelpydGVna1lSOVB6TWxIUjBNOFdQMndudnpNYXV6alpNRmxybm5hd1REaVVQN2FSa0svWno3NW5NQkt1T0FWMlpBY2JpaGtQZnNTU2FHRDNabmE0U2orUVFRUTdPZzNzK3Vpenp1L2lnY1lUclJmaS9nWHRBZWdRbjlXaFBtVFA1aFo4MzBiWmxLTk5RUXZPbzhOcFZHbnJZTFJteUhuWmFCMytvOHNWeDF4bER5dzBZbTBQOXJmOUhJdGtDTEl1bEs4UzJCUmRnTDRVOFhHaVJCSFFlK1h6QmdtTDVOcFB0TGkxZWdFaDdacjVRNlg3Z3dXUUNsOW85ajFFRzFWUHpEekd2djh0QmVLOGx1ZXJScjRzUHU1aG91NitBei9EVjNJRkFtSDlTeDk5K2hZYjJtTmhnZlFYdGsvQjF6NU5PTk00bnBmWXdHR09ReTRpVUVSNW9MMlFSMGJSRmJXQ2lpVVhnWWxLOGM5SnAxZ0g5RmltNVlRQmFCVmFyVnYwdmduRHNqbnh1Y2pVMmRhVWtFQlBjZHkyc2NBTDNFb3cxSENMeW5BQzYwQUlmdCtkMGpvMEV2ZTUzSms4dnY1Q3dWZ2ZVSmlBcHBIMzN2aUpVNFVURGNaU0ozcnNlVkpENk9pd3VtVFZ6aThiTElNRGpLZ2hxTlpDN2F2MjVYQkh0R0VPNUFOcWUyR0JGeGNLYzlUZ0NKajF4T2pic210Zk8vcE5VLzFpNWZZZitFT1dQSk1sZmRHVjkrelZwL3hiN1haMEtxWld4L25DRUJPZkQ3VnlYSGxvVnUrRFNTcVVtNFFKbFkrMk9oSG1tUlI5cytHMEhPd2IwSTRVZkRCZGFtb0NiM2pGTlVtdHgyajhISktESWNJV3pBWGo5ODczbWpjeHI0eHZVcnVoYUZXZFpiS0QvL2dEVjNFd29aenkzVUNucUEwTVhsaXpEU0V1NG82bzVUU3hJQjIwQjhPdnA4L25KUCtnNjBhbCtoU2RpMnFMaE12aUNpNFhhWjRCUGZJMkd3ZGRwdnFUc1lIcTRVbDJPZDlMUllheUo3M2ZKend6ODlDMWhqVGkzaGdSTTFwNmNJTHNWQ3RMS3U5N1lRL29MYklJRGVrTm4vWXhPUUx6QjBnZU1hYWR0aER4dm9kazFkWDdrd1hKVHd0Z1VxQ081c0FjTERGQjlBSjNycldpMmZ4ZDBJL0NKK2RXM0ovY01GN3ZsSTJURkQwaGtuUUVnOEJ5dW02bGgvaEJBd3VlaEc1bDZ2c0M2YTlrQVVIanQyUEhOMjgzK3c1YkZyZDd0VGFtaVNHbk1KaFBVT21lYzhtK0pvaHBzK1RQbzdEQXRETGxiN1JRL2FNVVBEeHlqUmVTVlBEaUovbU1USWxHbk5icUZHYVZZT0hQRnl1bWh1Y3A3dVpkS2hIL2NJM1MzdGh0T2ljTGlYaWNhdkFZY3h6blZTTDhvYkt4ZEMwcFJKNUFEdENUNnBGNG9LRnU4TSs2Q1ByZHpZYnl2WGtsb2h1NWxpaUNpY2NvbzFNN0lKSGsvczZlZVJrRWhMYW9lbTJLL1VUdWF6eEpXR3JJZGpVN3dLcStZZGd1dlpkRDZDQ0JzMnE4TG5vbmxzRTFEOUpnZzJ4SmtGTUxCRFFpR0QrVXh5VE0wamZORkhBWWljaGtXSCtKL3hMQjgrR0R0dm00cTdtNFBDLzFKMDJJMVU4TWhoVU9xcXg0NFNBald3SWhWUVNKMjI5dG4xNkJuUTFFM2owakI0aFhVczFmV1Ivc3MwTDh1QzdBSlBqU1ZCcWJsRFJLV2pMZDJhK1VKdisvODUxTkpUZldUT1FuT0xIdmR1aTBWdGFGb1ZNbXpGOGt5ekFESHBnRHA4aU01MEpFbm95RU1VTFJTdFp3QTdiTk1KUkxJelRBWTZqamVXNEM1Mi9ieWVOOTVTdWtLSGtaTVh2OTFCYlhZQWliTm9IQmFaaFRFeTVibkRrdm1VSk1UUS91WW5YMUtDWkhZUTdyMjdRWDNCNVovNjFzVThDVTVTeGFzQ2pib0ltV3IreXFjZ3RidnlKRFQ3VjU0QzNWMUJmbTQ3TmIxRC9zZEpxamJ2cmtrSjgxNUs2TEZhdmlmSklwbDBFaXp6UzNEV21UUVFDVkdTSU5ncWMwdHlGKzg3SkxvS3lrYk9Od0pybGEyYk5RRDN1ajI1Y2NBVHQ3S1Nra0Q2QXRxd3Q3OTBmOFlLdW9rWlNqYmdhTGF2N1FCWnJiSkhveE9CUSt0d3pTRVp1akVYcHZhUThNbWI3dXQwTEMyckp2dmpiSW1LZmNHaTNEazJCWWgxaXUrWFJ3SGV1aHJacEhVOUlzVGtlUmZlcFdmS29ORUx4T0loR1Q4cldDNDNVZ0hMOXJGMllpcENSR0tqamFTSTlBc3BtZlc5SDY5UHAxTEswSHJRVDBwQ2RsQmwyZHByV3hyaE12Y2gwTUFCd0pocGRKelBWc1NCVXgvTFJaTVZhSmtzMGhReFZMOFVFdUZDcmx3NkdRajhHNnpjMjJLV1RST3J4S3FDV3o5dVAzSHZiQ280QTA2NFJpY1NVdEduelpOYjN4L0xzdCs2Wk5ja3FEMWJwb2xnMXp4TkhzcW4rK3dmWnd3Q2VzZDA3aS8xYkRNSzUxRnJrSFJXelJTQi9aS3B1T1dMREc2TTdwRVdoaFRrYXNGYXRoZFpFU1Nnck1xVExoWTArUmlkT0FzZHNLcmp2MHhVZkNPdUJYRFUrd0lVeDREUTFITHdoaTllRkhFNUJ6UGlyVVVYUDV1ZTc2VGlCUHBMbWRvQm1qb2g0STd5MkpnZWRxVERTSDBQbFo1ZzdWZzdsR3o4RHVybkl5bXFsVkQyRndPNFRNQVlGU0pJZDI2WExUNUpqUFpsZHNjWktKY0JaVWp5VXRQZTkrVlVKQTNzVGo0K3Fwa0srTkUweThmSEM2Y2o5SEpIOVhCRDROMXdmTzE2MEtQR2cvQ0hGNElvNFlaVEdXMUdhVll3WEJJR2kzaHR1Y1h0VzBEUlhRWFM4d3l1Q1pFMitVZi9XTVl0ckt6Z0kvZEtVRzBtMXZ4cVQ3ZTAxc09mTGdvODlmRVljUDZRR1hkb21OWHF5SHJqdzA5RjRUUk9KY0J5ZUx3dnF4TlZISml1dUMrV09mSURTTENVY3JLc1ZuSi91NnpSdHFHNjVPcy9obkNwVDBWYno0cGRMQllIMlVJby8yalhJYnFjM0dnOWhlaHV4VjF2ZGNtTlBJeUVxWVYxT0kxVjRrQTRhYjRUbWdWNUtPR3N1Uy9mNXh4dHl4NVQwQzQ1Q3AydGJXbkRENEZ3cDU4YjRTR1o1UEVuMHNFemlKYi9CT3VjNzFaQ3cveExzWjU1VGlRWDFRRmNjK0lBSFlwempWaDBNZzA1NFRLVzgwaHEveGZIVENPaFRGTTBhYUJibWRnTTB4OWU0bVk5UXR0Nk5aaVQxRGVIaXEzT09lbGJsc3BSY3JPSnl6Z3pEajlPbjZ1WXNWZTVpUndxZW16RjdTYmJodHpEbzlieG5iQUVueHJobERzSUJXZ3BQbUF1WU5wY1Q4bDNneGRtQ3IrRnNQVWZJZVVZZHV2MlBYcWZxNE5FdU9iZEVWMytQeEpFWTQxNWdSMHYyYXhOSWlqZjl2OTJ4Q0FWV2tPcjdGZDUvWW04b3ptZ2pSblJ3RVF0bkVYY2EzdnRnWlQybXI3MzI2bU5EYlkyZS9vaVlvOFp2dU8zOHIxMjFra3laVWwzbWxsNVVGOXhKN1hhNmNrWFJoK0tyYUZUZ0svN0crVnZvSHA0cE9lcUhFSG56dnpTN3ZkcnBWSHNuY1ptQVlINU5CYzlCT2JJRis2QW1aY2hZUjN4NHRndW5RRzMveTFrc24wOXIyaU9idGJqSjdWTGhWTUIrdEV4WlRmRE9IbFhKVHNDYVJhbnUwUzhvQ3Y4ZUFqeFcxeE80K21ndDVMajBWSHp1QTBqazJrM0hmVFpud1dnSEFQbVYweFlaK2p6K2ZqTWtJbFBHOWFmMkxqdm1OOVJFZjlLNWRwZ2V2S3ZpNUJRWUpIS2JWaWZRYTBjRHVRaDRML1N5QTZjTU9rNGZleUhNYktBeFdsb2ZxTEU0aVpCTW5HL3h4RWVnVFppRUw2Zm9zMkVNQTliSkFYT25WdWRLaHR0RWxsNlkzb0x1Y0V4eVpZQ3VyVXVqQ3VmL2crSUxiQWlpdkkwVWVSbTZvSDJUcnVBRm1paXFOMVV1Wml5KzhmTUd5Mi9vRi9vYVJSOGtiK01ORWZ6UVFVbmZTWG9JQkh0Ylh6UXRXR1BVZzFPTCtXVVY2UTBTN0RSK1pkdXBTYUNkQVowWG52Y1ErYWM1alBKYWE2UzI5d244U2M4TmwrakJJTHQwRk5hSG41MHROL2lDRFpxcVgxVk5lWjViVjdySDR0WEtNN2FHTjJScThvaXJiVTdvMzdNTmpDdlQxenlRZXpRU1ZDTlFGOXo1a08wdXZNd3lCaWJTVGVMVHlVeEVJdFJmamI5dll3eHJIZ3ZrK0gyWnhDN0F5dVFYMlJ1TllqWXVtYjJLbTM2TUpCaXFOTGxkZTNGMDNYMjQ5anovdHE0UlJEazNIbmh6dkpOUHNJMitPSDgrbnVuMjRBQ3lQTWVEN2c4UzBUbmIrbVdPK2xHaC9wR3ZiTmI1aWdxcVA0Z1Z2SGdKSFRFSGpSZzM5QmxPS3AyTGthUlpLaHhmUU1WRkY5Q1pTNTM2aVhicFRibCtFOFdzZFlQZ1ZkQjdkZkw3cGwycEhucVFHd1hxeCtQZzllYU1hcFBKMncxcFA0c3NlRHE5RjFPVHZ1QnN6Smdya0RFUHRQQytjUGloYVNGRnVSUDBKaENIQkoxeEZrZHVaSHZGd2x4NC9ndllPa3djSU13NjliL0FZRDZlRnhkN1F4NDRTVUJVOVVnT0JCTUV1d2ZKcG9kS1NsU2JoOGNCQVBKZ0R6RWYyYjBqcldVd3B5cW1ubWg2UVZXM05TOUI2WE9QdldLUXhRc09ZMll1cHNwdjI2ekwvRE4vM3JxNzJ6Wjl1VVhHSGlwMHM5ZnlqN2VZSm8zZ0htSGs1OTQ0Q25WaEJuWHRIWFYreUttQ1RYQmxJQlZqUWVaelhzTlRwQnFsQlMwMTI3a2YyTHFlT2VTYmxyaHJLMHExUzRBNHFEWlgvMXNrR0tkWDNiRCtsamtNUGt1SVUwNVVobTlyaHRQSGdtTmdFeGtocmlIOHd2UkFzOGFzOGFlQWdESU1VM2dYWGxnemFJeXNLamRJbXFOTUFUdUIrZWNsWUdqam5DWCtLTmVrK2V5VUpvallUN0p4ZVVoMDUxMjh0Q1IyQnVRK0h5bThVaW5SZ3A4V2hBSDZsaEVJTm9FUjFpbStIeUIza3dPMkdnNklwRXZ2RHBhL24rRCtuM1M0SXdURUIzdFNxWXVWUmNadFdiY1ZpbytHakxjNnVIb1hTRTEvbDBSekFlUnplOWNlZml3c1BWSUUwV2RvUjExSnltWERudlFqM0R0QVNrQ2E1QjQ1RklrUUQ3NHBHRjJGMU9HOUxValdTS2I1ZG10cE1uNU5CWE9jMDVKSSthS1dLMHpHTHBsVXVJR0hlQUJUellFMC9VQmFyV1pPWjJJTWs0OVM0aUkrZmtjQW1zTE5DVXMvQ2RRSWxvblIvdmlKYkRqM2oyQUJRR3ZURk10YzF5MytNa096RUtJNy9vTG93MHp6VTV1Y3ppVnoxOVdvMVpETXBRUjNFM0tXQmpGZUlpWUFyQk00V1hXWVpPOEUrc3U0NXBKUXdRc3NjcFlNdjBRenk3U1FVeHdFdzlhcHZyMTV4RXFwem5PbTFRY3FHcXB0dVdBRUFodDhzRnZQL04yblVNM0tpSC9VMFJ4OHhPaTA2a0ZMbURLcnppN3pOVndyOEtaUEQ4K2lsVlZ1Zm5OL3NWUzdsVkVJeUNJOTBxL0xEVmNOZHpCdU4xNitDRnB2blBjNllCTk45KzdWcWREd3ZWZ2dFWnk2ZmZSU2t1VWZhcUhYZ3FJWWVYQUNTZHVKWmJMRkRrSDRoNi9iL1NNUDJmaTFIM2h5eXYwVk1jWHBzcXRDanVlQy9qcTlGTmdyYmJLSXFIK255c3NwclJwNkRlaDdnRktGOXVodUFveWdqVWg0ZkhMQnBndTJvMjl2SWZIUTV1OEV0YWRWTVVveWMrNGFia1hiTmNwaFBOY05SeWk2RVZqMjZYUStEZmY3OFI0Nm1QREpubWFRSVk5UVZyQVZqS0xaR21RVDRHR3RGY1MvMnhqS05ocGU4Qmg5QVpBdHV3d1dTTnJIUEZhdHFHLzV5K3JkWXFvekhzcVo5enFkbTJXN0tIaDV0eUpneE1waEI4MDd5MXEveWNyZVhDSVNieGdLbEphbkxGUVc4UzlqLzdUS3pRekRLR21uVHpuYUFYMDFGdW9GMGhjVGZ1YTRsRnIrTDlQQkdneVVFNGdSblF3M3RJeTcwQUVoRHpkVndWSWR0d082RUN6ZXBySlIrcmlZeEg2VTdOY3h5OThzMFJWRWdpanl4T1oveDJhVTlxaE0yMENHWUtTK25rbXkvUVV3Wng2bjFwMVJ6L2pnRzZ2WTlsTk5rMGlGR212RTB6MU56NVI0amRZVUhrT3dEdHhHMEMvQWNnL085aUVkci9qQXJjMTc0UUhqdHFYeVp6YkR5bjlQVnlDbENWYWNtVjdISitUdzdiL0s3cDdHcGxHR28xbnFzNEhzQjN6TndKTW53NUhFRkUyV2lwczdiVFVCQ1R0TGJvVjZZL0xUS0ZrY3dZNU0xeDEvR0lFbU5SS2pVQVVnVTRZYStzeUxQN2RpL0ExcUpCSFMwNlZRMVQ2aW82dzVyQWY3VVVZWFBzWjFOQ3VMdGxLazlqR1ZCNXhpRTlCNGwrL0g5dDRVVG1YWHNlQ1BxRVoveXZ1dVhYYnBndjM0MWZndUxVTDVCeXdwUytrMkVyaVVZenUzb0NZNUV2WXNXZDhqMVlrVXNNWXF3TGs4eDZMbG1VRGxiWnN1Q1d5NWhmbkE1TmhWNDFRMnRNdlk4d1ExNHZDV2VoaEVNaDlzYWxWWUsrVjZwQUlzdUF3Nmd2YTRKdll1N3hMdFFFaTB3OGpnMDAvREVMZVFWeDV1T2p6cGhFWUE3S1BNV3Bjak5VU0lBUWVJWWpEY29MNTFndFVOZFJtNlVIMWNTOFVKSmZhVmZwOSttVE9GTUVyeldQWFZNdC85MVpwSzM3U1JneXdMc3VoeUtMbk5YendGb1llemZMc3BnQmwyZ3A1L0dZNWRLenN5U2VvNzRzQVNXbDlMS2RyT2M5UExGUmMyaklNTXJtR3gzNjFvV2ZYYW9jdnkxajVWQ25OR2o1dDkrZDBPd3E0SVB4dHhpVlE2U1k3Slg1dUhvVUdodzRLZGR5WGt6dU1hbCtlZHk3V1hmN2w2TGtubis2cDZ6MCtic0pkM3ZzcHNjV3dXUEZpVGMvcU45Z2U1U1FVdDBKeVBLdjErS2NDbHQ4dEozU243MytpcmRNT2lhaGM0UUN4Y3ZDN0ZFZGlQVU1LWGFWVzdJNStLNmI4eGtFL2l0bk1GSDBzZ0loSzRQYXZ2dmFtbDFkTlNMTUNndTZ5R0lNVG5wNW9vNkQwS3I2Z3BVMlUwenA0ODVzWCtrK0Y4QklrMy9wczZCUFJ0YW9ZVGVUQVR2ZlR5RXRsOGxGbGFXUTNzdm5vY2l3MElBVzhQV2FjT0lUejRuUmhucDBhSlI0V1duNVR0MitwaXZXMUZ5OE5sNWNSTElSalFMNWtVOW1ha056Wk9BYjJRUDl0UVRZaWpvMzBid1VDczdXWWo3NXdLUmVFY1BYWW90YjY5QjBUQWtSVEt3bloyazZ2UWRiKzJmZzJHZVJqMjBvU203eXllNy8vRVp1YTVodDRjc3Q0UG8xMUxtb1MxYm5RaVM1VU96Q2NoSDJYandMcklIbHI3YldBeTcwMW1qcE1xZ1JZOXVzcURSUGJSZjF5WVB1RkFHOCtDSzlmUjUzTkNIUVRpMWt4OFhHL1JXSGdxRVZXOGUyQ2ZGY3ViRngySWRHM2FVejgxK1U3dHM3VGpVVUhESWx1TW1HNkxhb1FaN1ZhYlFGUlkwVXFDK0ZINVpmWjNYM1AyM2lSUHFMdnYwTDhxUmMrM0JRVE52eXlXRmh0c2FQazMvTlJzQkFaZjRLS1pwbGZKc2c4R3FKdlMzemw5VStDVXo1QVY5ejdNNzhvemF1dFlTcGlFS0dlMlJ4SEV3b1pGS1lrRkVsak1OMHQ3NWxpNFFqYUg5Nk53T2NEa25rVjduU0kwaGxhNEpDK1dLL2ZmcjY1ait2UmdQSkxRbWxQTytrSzBxVHR0cVNCUTM5L2V0TzhNckhPTFlCeGgxT1JPdmZobzhOMVFYNllnOUtkVERVQlFkSldmcmhNMGYzdjhhaGQ5NDFCdWlZT2tuZVdTN0Jici9CZktXSXlZdnBKaEk0VXJnNVhHaVR5Y0VJZzMvbWNCSUt0RDlxbEx1Uko4UGlSQnYzN1I5ZnJOREt1bkR5YXpLVnhaUW9JMmZxeElCRFg2Zk4vVG01T2FyeElnY1NFWGpVVFZjU3dqNWs2MThLQ2dYM3R3Und2eUtFK05ucW1TRnZTNHZVdC9Vemlnc2Z4QkhxQVovenAyZ1hTUllyRDMwTTYxTUdLeklWM1YxZDgxN0h2YVlyVEVCb21TTVoybHp3M2llWlVyZVVmSmsxdG9iZENEK3pubG9ZNFJJaVJ5Z1dVQUVKbkJGMVdVRm5QbnJEYzY1eUV1K0R3cUZpS2ovSk8zZXBMUWd0ZzZzVFpKamgxclMwRGN6TllYcy91Mks0aDVCdkN3eDJ4OEZWbEtjcEF6SXFKSzVUR2d1R2Q5TVFIZlBIWGdhVDYvY2xVZ29JN2JiNHJLUFA5NERKL0tPK01oaS9ySlQ3SnhNMTZGNWRobzBwTHZadkxHUkdaSGtRRVB2OU4yWTVxTVdtYkR0UW1YYmFlMFVqd1ozT2Riak0yakZadTdnRHpISTVPaGxSd1lTT2VZZXpLUXdrd3IzTEhpN2xVQlhUMlp4VUN4ZmxNN3NxSzVPTjZQSGdFTnZLNVNLbkE1K0U1WktEVDBXUlpFMjA0RmJXTnBYYnNTMGNublJMV0ZsRmZkek5BTk1VQzVrSDJSRWRTaHhEMWpXTTI0ODRJS2RoVndIUFV2a2QxT1QyTGlKQldYaFpmUVRSZHlaM1BmUEZmRWxlK21sU3VpUTRFZVQ3SElEdzhTNmxhSm0yZTcwc2psMjNhYUlobk9NbU1OemJubVpyRzNMVXpsWUtlbHpySUtVN3l2QW9xbTFuYzVuSStyR0NsejVRakF0aFhucmtqbEN5NGkxZnR4SFVQMjU1bE1lbFF5Yk8vZEhtam94USs5YTNaZGpSQzI4ZGxNOGZDTmpLVmJCOHU0dlRwTy82ektqb2tVYTNCdkxwdktTMStNN2dnU3R3YURHZXRGcG9LUnRPMDhnYVBkQTZXME54K1RIaUhCT2FPbzd6V0E2c1d5d1YreVRTbi9PUU5ReGM5N1p4a2RDanYyTDJTVjUzYmlEMnhPZDhoU0FDQ0o0ZUlWZnJkK2k5d2JLcGcxNHJZdFZHcFZmdW9SdDBGek84QmdBQkZ3QnRlRVl1ZUJRQWF2OUJFaFJzLzJ3aGhQSG5kWGxxSzRlOFp3emFnY3pNdzRVUVVXb3o5MklxaFQwbjhCalBQTWFrMExjS2lYUjV5Vkw4SUZtVi95Rkx2SHlvSlBSZjdlSmJEV1FEc3oxMVdxQ25ZdkJEUUhIRmQ4WUlITmFXeWhtbzl3UkFGNjRRWHpxdkwvZzM0cGxnZlpqOUZkYWI4YW5UMkdicEZSVmtuUnljVzZFMFdQVlpoL2MyZS9hRjVrSzUyVzgrWlQ2UWNOWGtFTnBNcDJzYTJ3a1lDYzF0dDhpSFhEMldnOXF1RTRHcTZucmlId0ZFeE5STlVXREtiamc5N29lSk9RNHVXcmwvN3ZPaGNTOXRIQS9RMEljaXZjTTBrNXBSaWxaUG5JWkRld1JsNzRTZ1NMc3dkMDFUQWU5bFhnVFBncGFOWjdpampKdkg4c3ljVEYxQngrOVVmZ1k3Z2hPS0svSnplMDU0NFppalorZ3BmSGNtUkJBdE5hZW9jNXNFT1ZNeHV4SWI5WGx5bUVwQXVQNXdZZjFkV21oRG9SblpyRUNEaSs5U3ArR0R6cHFxYVkzMGgrZUVSRWNjY1Z4SFVSWXRhcUs3MHFtQktNbUEzVDRDVUF6WndvMXJaeGZHekprdXlkNXAzV09yTndHVnA4bE1rUVVpQWQ4R1hhTTRpbGRKa1J4VVB0TVQrSU5mWXJjL2c5WWV4S21IY09Ic0FTQ1RIUE8rcGVMbnc1N0Y0WVd3TjZVZ1FaMWhNVnlmY0FwL3pnUVBiSEJrY0hoV3AweVhtNEhNdTJmYkJ5VmQzak9HMUgvZU41QVdNYjFacDA5ZjI3aHZINTU3Uy9YdnF4eWdWWnF3RGRKMlV0Ymk4TFYwMXZKRHVnWGt6OUQva2FYWmtYeEtxOVBDa3ZlWkZlOThVVjJPeGNxUmYva1VMbkpLODMrMEpOSlVBTkZWck9Wb3k5QTl6VjEzVXErbjNSTWtFZ2VhWEUreC9MRDB4WXZvVUQ5VVpuM1dIbFhjaWJwVkdzZWdtdVZyRzZvOUd2cjlNNDE3WG5tYWxaTFExWVpZL1JiV1h1OHhjRlRNR3ZDNktRVk1peXhLVDF2Q1ZDRHlqL1JCSTBMS0xEVjM0Y3gxamRiUTRkMFZYcjhJLzVRaUhUakVlNE82ZDVCZkV3MHVLQzVTQ2tDRmtoM2xyQjI4ako3K3VUT2N6ZUZXblR0MjJVSGYrcEhBS2xicm1YaUhEUTBCa1pLYUZlWDkwVXhnVFRFVU1FMFVNbTNxSzBCUDdjZENTVUtIUTl4bWdoZG1xamlIcDFlZFV3K0hrYjJueVpCL1dNUzdTaW8xUFNzZ21HaWU2S2Y5M2V4ZDhtdnhTckJEOWl4ektZK0tiTUNVRFFQMVMvdXdhT0pubWYxZGNESkFESDlrVGE1WHhpa2JZY1hvcUpEbGYyUE1CUG1ub0ZXaEcwa2VpbmVkMkxiNHNnbFBtZEF4eE9tS2pqUDVVTkN2T0xiQWVMLzFKYk0xMlpZeTF0OGxCZGNMSlZSeWIxeW5yQUlDSTdnNGFYTHQ3QWR2Z1MzOG8wMmg2d3p6WnV2Ylg4d0ZYY210UnRQa3VGNTdQR2F1QmlaOUgyUEJxUjI4eEJSamF3aWsyQkYwU1dEdUhodDFRMVJoZXFRNnJHM3FvMkIwN0lFaEdMQ3NmeFR2Y01VbStNRFlkOE5BK1ZJOUc0M0VuZlh5Vi8yUE03R0JtZU9FYWMwN3dhN1p4WHRuTWdzOU9MTXNhWUk0Qzd6ZTBCUzFucXRRSWZRS2VYbE11dUpJNVdJRGxDaVJuZGNjSktpVkhISWJEWVlocTJOdHZJQUJLV0hJVCtPL2YrRGNkaklMREh3bW1mM3lIUmJsR0pscThVNUNWald3ZWkrMWJCbm91M3NQVWU2R25XOW52ZVpoaWRFVE1BT1ZwTllMYlUwZWMrOHpKdnNFUWdoTDlvMmVhaEtacmc3amJSaExvMnFQeWUxaklUZUZEVGUxQUgvQlZMYlliY0I3a3BUbVh1bmdEclRIVHI2djluNXdyZk5OSjlmOEZHWmJsYVZKRG5XTExxSklRTnZzRzRSL3M3WTd4bk9ZOVg0UXpkUmRzZ1JhS3JBVHY3TnZYZWFIYnJKS1FGUFRHUHBzcU8rTTZvU3R5WUFWWVNEemhkczd2dElyckJGNTh6V1o0WmVQR20xTTcxT3ZVeFdBR011OXVqaG1jdmNXa1FtbFhqZmVBQW90TmwvOGdYNUdQT2h5SmN6dlMvc0J5QU9MaWJRTlVObHpjNExraCtoN3NYck9WWm12bGlaU2hEMFF6UGNKU0NDRmN5M29scklqQWU0QkRadHlrM1hLOWlPelFxYzk3bmNqYzB4SXJkYzUrN2tKZElDd0wwcThRNnNveFpScDhaOTREbEEwTkFBdS9waCtJT3dkYUg0WVlmUFJSYVBTN2V0QTRxdjBhSGNTWUtRVkpsZExrRDBmRS8yV0ZpZUd3T0pPcHNwNWRZRGlGZE5oQ0pnMERUdC9Bc1p2NkZTNlUyTGN0SWJmTnBCU0xhanJ0c0JpUTFtUEhlYnplTlg1TjEwTEVSTnJSd2VSOU5FQk55aWlTckJ3QjBvaVRFM3QrZ1MrcHZ4a0FwczI5M3pYTmNpSGJMWlRhcFRldURXdldmcUhzYlVGL21wQVl5WlVhV3NkdFhQbk53Zy84aFJIL2ZkNTN4WDV6Z2pWK3ZwbVpQYk5pSjJJYWk2dU1jRlMxQXhTLzFBd2h5cW5TWUVKZVFrV1JGb0FUNEJENHN6WU1VS1lCU04xbDlZVjYxcVoyVXlvQlJHemtBa3o0aDdIWHZQdm0zNTdoNDRUTEpnY2toM2ZTVGc5S25PUExNSm5XV1diQUoxODREcThKRTQzQlNndmp6NElJVFlmQ1U2Rmg4QytVVGlzbFhLVXdHUE5CcDgzSzVzZmRRZEpEMXAwbUp1SVBIUnBwQm9TZTNJcm9acUhBbWxFREdOSVBFTm55NjFQV01HZUs2U2dQL2tHbUtXcWE4RzI0eEx2VG52eFZTeEhtQmFXWDVNUzZSMTc5ZTFiN1dLMm13VTNEcGZMMzgwNGZ5amNxT1FhVXBReUFjS0xqTUwyaDlWeHJxVG5LdUp6WXdNRlU5YXJqNlZyV1ZjSHVQV0VUUTlkaEg1bU0yMFkzMUM1N29kQVhuNm4raHo5NUw3V2cvd3dzNzE2OUpXZDJ3QzNlSHdPeGtTamI5b3hMQ2swMHBTTCtLOVF4V0tuQkkzazZJN2g0VGpEN1dTb1JDQzc4R2pTdmQ3aXZTbTQ0bkhjMXpDMFp4MFpjSEc3ekQvNGFxQ21KaW5aa3liRTlvNlVHRFR4VlF3cGRTcWtEL1F6SW5lVlV5dXB5c1JLNWVKRVdBdGFtOXY5MUg4NDk0bFIwT0hNU2xOSE5QcUpoTGs2ZEVuMVhUWjJYRU1PaUdEZng3eVpLN1hBZ3Ntelg2K1JBSFFuMUxKQUsrYkQ4NVlCdVI1Q1ZpdWYzRml3Z3RoZ0RyMTZ1ME5ZUFRGNVN5dkVXY2p3Rlp1c2ltNEc2TllERVhUd2ZQQjRrL1RFdkpBWTN5M2l1d0djOXk0VjJOdExRbUlSVC9qNk01WDlYWkc3M3ErM2t3ZHVoazVlK3ZGc1NReUsvcVRobDVkVk9DWi95em55TEpUQUt3RWhRdWdVTWVCc1NBVmNEbU04aG1JRkoraFEvdVdRc0gvZEJIT3hHVGlRcWpYZytSNEwwdmZYYkRuR0JLZFM2UlU0Ly9KMjM4dFR4NTBxa0grU08wMmtRUUs1T3ZhcUNzNTBXVy80WjdrSEtTVERMYU9xeXVEaGVPL2FBWm5JZktUQ1M4VzhFVWpDUUc3OW1INFhzY0JzRlNsbWl2ZExwalVFaEhxWC9CSHRNK2FXdzhwbEZGRE9wdmtSU1BWaUREVlZleDV6aXJnakRIRUt6ZDZjb3JHdmhBQTl3VjFkVEcwRlE5NFJheFZNZFJiSm1LeGlpRy95cnd6THdYWkVVZlkwVWJiWkovaU1jeW5ucFRZNWpkSUsyeVpscWtOaWhtS2N3L0w2MkJvWHFYbHFQUFdmVHJTd0lRaHE0Wmk4eVM0bGxDM1NjSGorQVhxSzZEeVBQQzlRR1ROOTlFSXp4dGdpSkNOZkt1NUppQkVWMnoyYkhMQTFVVVlabkVaRzhKYjFEZjlUclFOaEV2aUIzUlVRcmVFYXJmazJUdFNBZ1RGVU5pL2NNRjQyVzMraUU5ZVQ3Z3o4Wnpmbk9IMjJLSlBxUjFuOHFCb1dFQThUT0dweGFZOGFvcmV1Z2YxcHhNL2hVNURuMnNlZzNCLzZTTGx2RUlUMnJocy9kbmJhdElYdC9ibmwvSWRTVUZFeWd4MUV1bnJGZ01XcWQrRS9BT1A5VUc4VEQ3N092UnRMUHVMaWthaGFZVFJ1djhUb2dKaGlBa204N2pILzA5VnFUS2lsSW1RVHFub2NTZUVMV1pLSkZEbEt5UHFzNXJMY1pOTmZhRjJQS0hpTWIvUGx0Zi95V3UySUJtbUUzUUdsVXhTU1NTQkdWdkt2Q0EyNGFmNUcwemE2Ump3RTdaOEVqWk85OUQ2TEkwKzBBYnlxMjFsdktrYVh6b3RCUnVtdURDUUU2WWlNUXprVmwxakE0c2F5eldGQWJ3aWNiY0lMM0RmRzU5NHo2eUViQjBXcFZZZ0xlbGJ1QWIrOWRGNlRpT1h2enp2RnZoOEZVSlR0azI4QWtzZlIwaGZuMlp6Vm5KT0xHbUdOejAwZHV6Z25wR1RXeFZDQ2JwS3JaeC9RcHJzS1NMOGRMVlhnT3RsK0lXWDlmR3V0NVlnR1diSWc2Nlpyc2pDS3dHVEhreE44QVdiaUpjblIzNTRuOWlqRjJkMUF2cGVpeUM0R0NRRlA5S0VYWHlPVng5bVV3VHY3dTY5RWVsa0pzQ21wNGVXWmg3cVZZeU1OaDlKVnlYWEtWMjJUdnNqbkx3NkFJcGd3eC9kZEFONUM3L1dpTCtZRkhkMHR6TFhNbHF2MlRiSXIxU0k3VFVROURTdHI5M2dHWDZVSWpzalN6L29jY2Q5QXluamxmVUk3TzZTNTFsd2xaV3hVcGlqZ1FER1ZzRktYK2VIZWYvUDR2VE5NY1oxQXkvQnVRRmpzY3hhVjNYQkhTbkdhQ2VLaGlpcDh0UnFBcUpGYytYYkZCWmozSnQvN1NYcDVkd3FyaXg5U2QyVVZKL0FvT2ZwY3djY1g1WGVZcm5oVlRQbFBZZUxIS2ovRlVUOXplTzZGSUthaHdJdFNRS2RXRmhMU2NLWVBxbERnaDhUcHpERkxGWVg0cFo2dFpUVU96TjFTWXI4MDB0ZEZLTDVKU2pJOEtueGhSTjRsLzM5SGNPdHhYc3ErV2EyQ0w4eS9Xb1gzUSsxSStldjZxWEsrYnZmaGhUVzFmM1hIcWE2ejBGWDBJRTRTK0FWa1BYSlYxWVg2VFpuVlppa0JGMFZTVWJGTEhVbUxtYTBOZmxqU1lWUW9PUkw0NHdDV0hKY0YzNHN6Tkp1RnZvc013bGMva01hQmtaU3EyWkJzWHhERFExcndsbmJUTFliaWZiaVpUOVcwcHJ5ckNrRFovSWFqS2JhUVlHZkpqZjdiSk91WWR1VW9aeEZOVE80Qk5pdFlkRzJPREc0bEduWWROVmFPV1lCWjJMek5McTEvOUN6MFVXYlFpYlRXcE9JUGcyZkQzREVwMFN3ZEkveWdBUy9SZGltYWgxbG5tZ0ZKRzcybnova0ErQkdHeVJrRzN3aS9HL2NFcHQyMGNYZ3NXaTBPMmVIMDdmWlc4eThHU09rZkJ6QTJaRTJENTE5VmZYOVJQYzRYNTA3cm03VUlaNG9xa2FUTVd0U21WVXJja3VuMC8yc1JCMUVFbk5DckdqU2d2K2tvei8waUFTWVRMcmxvdGpJbmlkSTk0amUvS0lsY1lpMUMrQlZOWjUvUXVwNjNnQ1JFWFBSZzd2UGxhV2Z2WDl0TklvWFVSY1Erb1lzbmdOdVEybWRpZXQwUmp5enloVWtuNUlSYWZHU0hNelE1NmEyMUNYZ1BmYzByT21pOC8zNnFGbC9uaUlmV0NPR3N5YSt4UHRtL0FQTFo2UG1qVkduOFBibzRFQVNmSGFtM3BjM1FsSDZXMDQ2WE9jSGFDNUJSb09ONEhyWkx6UENkKzFrNEx5T0FyZy9LY3paWG1yMGFQWldkU3U5WklRQit6RXREZVFFSHc1eVVzd3lsVmRYenZsdEJWYlJ6M3FTWU9sWUxYUUV1cWwwdTVUZzZjMXo0WTVhenZvdzcvWm9TTjYydDRvU21wcXpodXRPMU1rN1ZuZjRGbHBiMWNEbzZOQWhPeUVUNmxZVjFkUVNVVW1QbHRCakJZYStadFFRLzBYOERUNmY1cC9CME0rK0RrY3dBbmo2VVFiZjhyVCtrWG1nR1M0RHlwbDFyQy94UU1JRDRBZWl1enYxREZUMHVUTTNpbXpHSEhTS1JRRWRDekR3aWNYR3lZR3hvQ1ZHVUk4cDU4K0JLbXhCWE55QWdwdG42cGxVc1lSQkV1SnZROUYyeVhQUkt1VXRxQk8zU1Qvek5zSGp2Q0tVQ0VrMHdHT2NIVnpFMGJvd3pxVzNoNHBxTTl2OUZrV0lpRFdMSklsSVNvbmpOcFhkbTIvZmFjd0F3TzNMTjBKc0QwN0NwWFFTSVNqVlkxTitUNHE2dExuSXNxMlVwVkpkZWFST3oyZDRNczU2MDUwZGlHTDRIL2ZwMFMzR3cyaHVTb05NN2lHYmFCbStzRFFiWDIzd0JSN1hIaGlNVWpJbFJyaHRHUzFJRi9wNFgvR0xSZXVQRFVGTklDeVRUOGwyb2FoenNQMWVoaFNsaWlpRG1YeHpWZnkyNkt2ci9kWHFqc0JYamZBWmZCSlVxOEp0dkFJcFcyQlppVlZLVzJWbkVpYXZBc3BBZ0cwcmdYQmNVK0Fjdkt1TmJ4REhQa1IrVWUrQTNhRkh4UGpyUEl0b3pvaFFNbW5vN3NXTCt0aHhQdFEyUDlXYWlYS0dKRHlUUG9LWmwrS0JWam5uNi83d3NBSmVIUWdQUVpQNmtXU3hUNWRxaFJXcDB4aHJvQStoendUdENFZzNaZFdFZi9oU01wc2xMM2VjdzJQQWJDM1J3RGg4bklqdnVUOWNDbXhEcEQvWG14OWhrN3o4eHE4Z1lQWHl3YjRwMDI0M0pISXdVcWs2Z3RZbXozSzRoejNkK0xXdlhYK0tqSWE4VkpXR1g3Q2pvc1dCcGNUdE5kQlJCeFhoMUhRRDdESXljbnI5NjM4NzlzUEhaMTR1WHAvM0VSWnMzZlltVTlqakEwWG9MeGpkOHhCRGJjaDUyek93bGdSTDN2YUtWZ1ZpY3lyMTNSenZWZUtaZ0Jqb1JGRmtOL05RcDFsQ09VTU9EOG1VRUVuQjBWcEx5N3ZlRCsrcDZKU3F5SzMzNHQyeVFJWEhhSHI4MlErZTdiSEh1NUFPVCtNMkd3UWRaUVpVVTZsa0w5d09RYlhPSnUzdEpPeXRLUFh4UWR2ZFB0Nml5bUw1SFkrTDMwNWtESlBYNG51ZUtsa3lLQXZwM201RVRaaklTV1NSdytoTHhHdFRBT0E3VjVGbE9zMnE2MXMrMmZkN2lHTUU5RGhpK1Z3aGFIU0hTZ1hzMXJjOGppQm5udzVkdFlzL0pobENFSy9pbk53cFF5c3M5NEJFQ2pqM09lQkJCblZnYVJUaGI1MHR4YjVDbFJFaDFDU2ZNWVFKMTk2NnlETzhDMkZsQzc4dm5Gb3g0d0hndktEZ3Q4MnhsUVpHbERYRTVsSDZKMVpRVVl2UjAwNUEvNGtWSFh1c3ZoRDNsQ0txUHZEZjJtUWZiUHprR0xRTXh4bVdLOUptNlU3WXpMdzUxY3RFaloxdCs5Q3dVQUsxa3BXZEZxRXZaa0Z2MVpXbm1XVnVMN09FazRDZHFvNm5lemZtN2M5R3VRUms0Ri91aExMSE5jQXhHaFplUVZ5b1VndUxKeElJUzFlVHRSWG1QNTRaV3FrV2JZMWw5RTc2NFRHbGxUK1BTempjTUh4Y3d0Y2JGWHZvYlFhZjNhTnZ2NHd2V0RGMG41U0ZwT1NxZVhRMjNBV3hNRDlSRDU4RUFFak10dzZVOFFLNkcvWG5aZkI5UDBoQWdlQTQ0VXU4QTJlMnNuMmtoSHozUUxmVk9iQXF1UkMrREkzekg2SlNZK2Y4Y3lCbk93ZnZOd2FDTVBaaUhGUTVWR1VvS01hRHk0MU16TWpZdzk1aG1NOEd1M1VVVEFFTXZZNUxxQmtNTkdUa0xHZWhQYTdKcExGMVJMaWd6ZzkwQ0NybGNDMGwwZ0NWd3dSaWU3ZEpaeUhVUXdGak1zUk9aR0xMUVo3eDU1OEJYeFJaUlVyUGNnbUgvcThwVHNWU2dDWU50TUxrMmpWV0p4RVZCNDRMUG41dVZkQ0ExQTlYaWdCSlZrR3BBQk9sd0swbkZGNWZxbUltN1NsSmpFejIrbktEa3pmMlhjVlUvTGlQVEJvZXZ2Q0EzcXV2ZVVDV0NBd1UwQTNYZHY0YVVRQ2oxVVJUaEc0TnNSWGVvNHZYL0sreTZ4RzIwMFJNeUk4VW5GZCt5bEwrY0RtU0xyTHRyL1BKaXN4ZEs2RDFQYXB1d1R0TEJScmdiMkEwZDdHTmhKYkZ5K28xTjcxNVN2Z0hGV0ZNa3U2ZC9oWG41V0RMRzBRZW0zMGVncnhjUGQ0aEJDRXlNYjZaSzh6dDBXRlVZaDNVSnpyaklXWEtoTlJCRTBpZk1MQXhjZE1QQUlIUmlrYlkyeFZ5YnFuNVh2TEp6V1k1N3N0UVA4TzVGOGNET2Z6cjd4NFBoaThjVnp5c1V1b0RmbUs5YWxqYUFUaTg2R0tIb08wZXpFSWt0MWR1V2c4M1p2dzVvV0xmWXIzanFNZms5U2F0bFl6MTIrTnE4WGdYWTRMelVBWWJPNWdkdHdraHdmWnQ2WDU5dTVhSzFZRWVRM1Z4K1ArQU1aNUJtTHFNc2pqQnZZTHVnQVJpTUhCdnI2Y3hnYkdQa3B2OExBVkhDZDVVY0sySE5jSTYvaXprTXVoY2dmR3pDeFNIKzNpZ3dpOHlGMnBoOTJzN2pWYi8ycFc3bFVjTVZyeXEvRkU4bHlUYWxCV0xIWmYrOERNc1hpdVc1cGtYSXRWTzBDTVZnT3g5NldraTBGK0k4M2JXMGJnRDhoR0dBMXRyYVRPcEJnY1g4eGxCVG91QWUzNzVPMStiVDlvTWFURTFZQnB4dHgvQm5EZEk3bTJ4ekI0V1B6Nm54VFZZRmZ0YWM2WE94QllyTFFNNTRNMXVEMU9QRzBpK3lpU0tENkE1cldMcjYwTWtYSGdBQ1Y2WlduMU9FQVF2N1dxRzB3WGl2NzBEMUQrMTk3c01MUS9MNGxUY3dGaTBBRG45NlVnY2ZVR0xGQjVKemlBblZjeEJ2am52OUpGT2pIQVMrbVBxQXBIdGFvblZjcjlqZktGaHlGNkVlYWFIbFVGWU9IVGIyRnpVZjhtN0dwYm1admN0SWRCazQreG9KaUY2NmNhTDdhb2kxNWc4RWlaUXNReG12T3k0V1JXU1NoK3c0djVtS2w1T3BkaXhKNUU3QjJsMnZ1UlY1bHYwVWJ2U0Zkdk12c20xUUJ5WS9pZEI0R29tS3VDVnBFM2VWZXFUT3Z2UE4wWWVPcjhzT0RNQVJvdmhvYng5a2tpdElLdVhWZmpWQXkrdkI4c2xvcWFCanJSMWhnUzdXU1dFZDU3N0lpTThlM2J6bDNmL3hNYnBjZkx3cEpBZ1VQRlZZMTBKMWRSMjZkeHFXRS8yMDNpQm1KSHFtS29tcmhNYzh4Y2kvSFY2NjI3bzlmcG1XcTJTc2F4YmZiTy9MZUs4bWF2enpYaHN3TEh3TnlXMDhhVCsrc3VIcWhRbTI2VVA5WGE3YkVaVktvb0NJS3BsWDY4RUdLOHFhUUZYSFhuMDhzQ3VSMyt4OHE0bjc3RS9yL1FTZ2I0dGJXKy85c2lGWitIQmtQZ29MMkVwaVdpV1Z1UmsxbTUyelQ4R00wS1JHU2JQOXJqODhnd2xlQmRHTG4vV2JOSDVBTUxma2lIczlmYmY1RTZQVDJJcTZXY1hEem1oV2VRNkpNdTlNMG94OHVxMWZtaDVvSTVnSlhuQUtjaFIxclY5dDUxUVNHQjJFcHlJemkydFFwTGhpclRqSVFCSG9ycGExMlBRZHBZdDhGVDM5QTF2eWFOSjN4a2VrM3BEV3g5ZWF0QnFWRDZBZzVscWhXdERBS2N1L09JbU9CRVZHb0laZVlEQmQxSGtsSGFDOG05VWpqbFdDZlFMbXlnTVhkbUVJRjhCZ3ZRbXBkTGd3NlRmelBGOVpWc3ZSaVpzUWhqZG8rRzhqeERnTzF4Ymk5SUg0ZEVWTVhWVG50dzhZQ1J0ZDk1cEduL2RrS0h6NnowZG1PTmJnQzhXdW4yVzlMN3BSeVJMTWc1M2RwU1NNTC9aR0tXMVgwNmJPUFR4SHBOYVVIQWNmK0hSUW1KTHJocUI3QTZ4U25ucHBLNlowQnlEM2QyVzMxWUVPbWtQN3lKVVUrRmczTGpkMlNFbjZKQ3Nmbk1qZzV4Vk0yL0NkcC9Wamc4RWJTa1orNGhqT0Z3dkR0U3pRNzMrU2oyZDR1VDk0cWQ0ME1uRzVDNTI1RnBnd2dlNDBiTGtlY3RmU0t6ZVk1Z1JESEFFWkVzRkVkWkpDYTM3WWJqZnJxSW5wWXNJYzVRNXRvK2NRL2Q0a040OGNrVTExQzBUYjN4MzhtNk5sbE1pUHJjWnhnTE1acmZJMCsyQ0ZiYXMyajUrY0NQS1BEMHZabDVld2RTMnVIUFkyM24xRFg2QzltZDlsaWFmVkh0eWp0Z3JsQVpYcTNnZ3BIY1AxZCs2NDZZSFpJQWJSSGdqNzVwYXNUYzVaY1pPWEliQkdiWit0T1VlL3EyU0svYmx2aVdjaEVjbG9kU2RYZUVsQmt3a1B2MFdTbHVMM3hwTGhXVFFuZ1VyVGVMUTRqNTRDMm41cytPQ05MN2JTNVNKbVNoZzFIUzFqenZXSEtRaTVqMnlndVI5QlE2RTRMSzd1eGNyZnF2RSthT3J3S0gyMWhNTkJCWFlXdXhMbElsSDhLU3QwbEd0akowQ0IrUForcko2UklDa3RDeU5YcVREME82UkhyOWFiclBwS285K0Qzbk1tTk03aXYvQmoySkdsbGNtcVZGQmZraDFudzlNUTZRS2l3dkdYWnl5YTZ6WVNMczZxelc4VGVnc0lMcTNTYUUzNmxBdXdzR29CamFmdFg1Q1Y0QTNJVVdGdGwvTTE1STVLK3lpMVJUYS9jaHBMVUdDMExtSk1sZ2pCK3BQaGhLbS9GblRtaTRMOS84NERnL1RsRGFvMitIeE1SSzF2K3pCaDdhdnk4STFXN1ZmdmczM01FNThwOHZTeE9nRER2RmY5cHl6NFRueUUyNkcvdEU2RDlDTWZKSmRKMDhleDQyajBTbHlNMXdQbWRxWG4wOUZvVmxSdmpOZFRIMUFDSjg5ZEw5NFhxRXN3d1lZZE54Z0pKREEwV3BjblNkNTFpSWY3SlA0bFNOeU1PVEx6dlYwZWtyek5XdE1WbWVJS3JTZlBSMVUwVnBzSVdMV3RPK0NhM2hmaXBmUGxJcTRka0tTcll2clFmV3VJTzFUdVdCNWRRRDRTeFhHam91SDFNRVA2dGwxNEpMWDloUFpYOTROWXp3OEE1TzZrTkpiUEZCOGVQbkpSbW1tSXYyeUhkc2x1MFdTOFh4emVqZlVQbEVjVkFTNFRSSys5QWlRTUkrVHFSYmhsNno5MHZtK2FmVzNPbWhjdFlVQldCQW95SzB3eVF4THVNdjZZRnJIRW5ZeWZLZk9UVVowZnFEOTQxcHphMGxoc1kvVE11RndoRWtzU095SitYK0J6VWpLZDFNRWExSVA5RnRYaGtEckJmRHlGMDhvaFR3VjBUQmYzR2RrUWQ0Um10OWwxY3NMU2hpOWdwQ29BRTZDcGVPbUtIV0loNlllNm5qYlBUaC9STGFEYituL2RmQllkUDJsRzlaVVhQeUpQK1dUMCthVzFQYVJ6MXpZQWNWUExtaitnU0VZaFNvQldhNy9heE41RDg5bldRWXN6d1VXenljSzdld1FEK0FoSEJQZEtOeVExRFFZdlVNaWVwRDcwcFBMY1R5NlYrSnBLai9xcWxSenVlRS84b09EMjhQNmRZR3pkTkthYXBweWRNTzBSNURyY1RFVFBHQ0M2aERCTk1kZ3FzeDd0Y0hzRUhlc0QwblA0WDFIajJhaWkzb0l1R01oemxNVWNQQ1Z3RVB2ZDNWL3hjalYxRnM0aW13Z3l5RVUwcE94SWthSDd0UmFnQWJNSjZyNkxRWUYxcS9tQnZyWFhoVEczUytYdk1PVnl2elhXWittRXdNZ1RZRDJRbWhpYjF3MktmNnpuVEV5UFg5dTF6dHFsMDBWNGp3ZjhNaEIwdHc3b3BoQldWWTJBcTlnNGFyYXlFNXJLQWY3cE1QMFdkYkZSWDA1UXorNjN6SUIzMldQRDVXRVBCR2k1TVNjbWZIUjZlTFd1RTFMQ2ZnR1I0Zi9YZGFBcmZ0cXcxSWFGWkFEdy9tWkwxU29zbWFZNFYxZDdtdmhCdE1RZCtuMVducnJRQzZxdW81SXhuY3pGRVZlbTJCckdTemlGV3ZhNmhtOEg1QjUwaWpraEdBUVNBTmN3cms4VHZWWWhJZmhueExyenIzNGlMVmxodFFnVENyekZzeFhUUzBrY2JseWNqM1Znd0djVHpwYUZUOTNGY3ljelI4MmZiZi9pRERSQzZxL3JqZDNDbmkxemRmbE8ya29OelNlQXA3aHlZczR3R1pkc0d4cUhmdEtPSkQ5SHRJQlphS2ZnMkp2TmxOcjNZTE5Kalh2WHMwMG12ejVzRkF2OUZjT2xlcGdEa0xSdlZCKy96cnp0WGJybFJuV1oxcUF2YUY1QmVPUUJBeEk5Z3RzWmVhUDFSc0doQVJXMkNGWnpzeG4yLy9rTGdvVG91cEFRRUFWZFpBUjdRTVpKUGVEcGVLazNFOW5TOFVORHZlc3N6S3BoNVhlUHFHK3UxQUZwS2FVMEo3RWZPR1I4TWNGYmQ3aHdZaVlJZnViS0JDaGx4QmhiUUlHenhvdDNWUDV4a3ZHMm9nVDB3amlRWUpmNVYxZDJWa2JGQzJhVlZQUmM0WGt0bG9xVG8yeG5leGlwQmZCK2FhZkFaZjZxNUErZ3U1MGZ6Ti8wdmZrckpGZUp0T1NEeG9wUDRpK29XUGY4ODI0TEo4ZHZNZitBTytxMmVxMjhGS3V5YWFobjBoRHRXUTJ2eXdyUWh6SStiSnZHR1RyRFZWbXMvTmw5akc5ci9KL2tBS3BYbnBkSTBxMEUwVk02RDYreHB3VFUyakVQaUx6OTNUNW1RQ1AyWnhtc0FnY0pFb1Jzd01YVkV5SGJxaFlPUTErRUc2OW5KRzJZOVhQVFJQL1YzYjZTV0o0dTg4cTJIUm5PZUw3QnE1Z0hwQ1NZOXZleHhXckl3YkNEWXpMT3J2Y3M5b1pMQnZZamtYMCtTY3kyT043aGVXUFR4dVVYS0lZdVhkRDE4MlFXSEM1Y1g5SjRsL1h0RTZ2YUNmU0ZEWW5hTUlrZGhoUGpic3E5dVFYWjZQYm5RYzJkdWlwbWlBQytzcWJnU3JNdEhUd05JVmx4T2FvYXdaenk5aURCVHNFTy9PWjcraWEvSkFtSGpXL1hjREJGTUhmZFJvakxXTi9CTU1yc3ljRXZOdWNCRGo4QWlVbWIxZjhobHJSVjczeEt0OW5ESkNwbXNGalpibDk5ZTZYd2RNejhPMEFiU2xseTNKL2h2alk2Sk1ORGk3SC9YaTZjUTg1TzlnTWNCTDlsRkNmcStNZUZUeEl5a3plTnhGcktjeUQ2MUs4V0Z5M0tONDB1K3VsTnNzTTZEWmRRWW1Ba09LeVh3Ym1sYzBHbXpCSVFqNnhtRVcxOXhuTnJXN2dGU05LZWowSmtxZWFXcW5hZ0E5T2s4QUd3SGR6emNZanBFQ1M3aWtwVnRteXN4VzNpVURVNXFzUEFsMWxaVld6U2ZaWVpMUEcwSFJKemoyYkRrQjh1YVIycFF4VXIrUFpRcHZYaHBzREFQT0xWT0dKYk9HbTlHWU9VYjJKNkNOSi8vTnlKM0ZQZ0xGa0ZWeEVWZGFqWE42eTNpc3JkbXhKWjRxNlNNY1BFdW5HNUkwM3RMRktpZFF2Ymt4NVBEYmNMeERBQTZ5M0JUMFpWL0lVdkorUy9sUXc5bDQ3djhzeFNSSG0yQnJxNURQa1B5L1hmYWRheis1V0pwalFVbXhIeXljUEpjUHBUdkVFY3ZrNXFIMjJSdHQ2aEdVSE9XcVlLY3B3OTFINDZsWFJIUkI2WUlxQjhhM3R2ZzhsUHdzaHY1S1hYZ1kzQ2poVjNvNjduL0dOSVAvMFZScHVYMytGTzBVNU9ZcjRXd1BQYStTZHhjdFlIN05RQjR0SjJDU2Zuck9ZM2piSHU1NlYwZDBKcVcvc0YwMlh3S3dXRlZudmxmbmNKVnJxSThzVUVyenhWcC9pMjVGRE5GSlYyOWtHMCtkcEFEQnpCdENKcGtsVDFLaExIZ0F3dXdMRXowRlRTaXc0M0RZSGpWMllQN3hzOWQxR0RTU0JLK0VDaTZtU2FPWnZiUDlVenhQN1hKY1F6WXFzei9nNm9nK0RDVDlybUJmbW5MUmJNUWFxdTRsY0lQZ0hPZTNUMVYwcmJZUG5zd2xvOTNsa2tlZSsybkswdEJ4c3NYTk1sbzRQVE0wbnJVRlo4eXowZ3hyT2hqVWgrc0hMVFdXT1pvRlVTVWdCYVJqMWJFRnJEbDVROEYwRGQyWDlDZnpVVFl3YUc4WWFPVU1OSWlBVXVyeFFKMGRGbit2ejhPTzdEYzRHT0VtcVo4cHFiT0dLT0RiSURJR2Z6MEIxdExKemFLNEY4eVEyRmFnUmF6a2ZrVmtkZXI2N2QycHladnhJekE0TjdFMVRyQUh6RmdUQndqdUY1SGVCbnBrTEhtbkczVEhsS1B5K1V2eVpZRVA4U3NLZy9pTS96cjB6UnFaT29WWWFIb2lZalAxbEZ5VTB3K3dpRk1UeXFKNmtvQWMwY0lVbnhpL1lkRW5icGwvNE1qQ3BGTENXRXJRdTlCODhlZktQSkhhZHo2OWlrODZQbDFzL0NqTDQ2TVYyL3orb1psMGlIZC9OVXpLRW85MklKbUZvQkpxWnA4aTJoanVVYmZIM204Qi9TWnRvOUY4QkNwb1Z5WDNtZ0MrdGlDRGRUTFN6TEJXUE5BUEU1TjRkYlBlKy95LzBOaDN2ZGRXVjd6U2lzTlBiSHE4dVoxR3hicXAveldMNGsxTDdsTU5pUFJuODdrbUJhOHV3cU90bFp5dVYxTldSdTVIa2RpWHRIanUyajR5SzJ1MkZINnJRT3EzaG5tZ0dFNkQzTzluK0xhNVVTNTRDZklUZDdnSDFVZlBtU3c3T3l6V0NzTlpqYlo1Z05yTVludE5BYVpHZWdBNVFxY3A4M1F1ZE9oT1hqdHFiUUFKclRUMFUrN2FRNk1WY08vZE03T3pUSTJzN1ErWHpnZnVHdUhwd3ZVWEhXT1kwYVNSclB4NVdMaHVSV05tenVmUHJuekU5SlIxMXFtOGMwWUhuRkRReThJZ3Y5MHN4U2czOHFJWnB6aE41VHhuQ0c4S2JZRUxENEMvTU1Va292TGc4b1ZqZnhZUURFVm9YcER6clhUNkdNczJrUnBnWVh1a1pBeStzNlN5TmZwQm5jQ3JCVW5BU2lRR2t4NmlVcWQzd2FPNmNXNGFNUjc0L3grSnROcjNaQmJXL3k3cUQxME01dXQ3YmYrcThyZW95blZ0UDhFdDN6Smp1em5hMW9lZWMzTnRsWWk4MlN6TnppdmxQWGR2YnlrcFZDMFJDS2VmSkVzTHlKTDZmOG5Ja1pqb3ErSUJFTHlQazdEK2NmZnFmbG1STS9aRDhEdmsraXpMWkFkVFZGbDljSzJQNE1PVXhKNkF2VHRkZHhHNmNhVlpSWE5SWkRiNUZPOWlNZXhTTmRKeiswMVN4eXF4WUh4bzNLc0Z4WHVwYUdLaWdZQ0M0MHowam50WGUrVVhRNUZtSlluZHE1ZHhTUTZueXRYQjhPU2Q4VjVCOGNPSFh6bFZDanozQ2ZnSEpJdUJ6cmlPRFhqMURhRnM1TGNSSkhFenBVRmpKR1BwOUFLVkhVcGJPRDV3dkFRbmNUdE1mdzlXTDk0azh6T0RTNDFqK3lSRlhpZlVWY0hzY1NwdmhJNzVKSGE3bUg2Y2tRZTJ6bEN3UUJtZDBjMnJLQkN2ZUcrWDJqUXN3WWtSUmFVREZjL25KYU8zZlYrWlYrRFBxYnh1bDA3OE1JRFdvVk5HUXh1R1I1VnhVOERwd1pnUTVaV1lHSUd5ZEpZOHJKTHRZdlBmTDJSQXB3cGUzNC9KbUJKZlN2RlBjUUYwaXVrYnl6eklud2Jwb3FSUDN6RDlvU2lvWWRPVGdsVmppczJtQmt6YUxmWDFtSmRlbzVFd0hYMmR6dEtoRzZTOC9vYkdUVzhlN2tETm9Hd0Z5UWVKNnpaNzQrcHNadG5nZHhxRE9ITm5acDd1UDVvZ05BajBheGc5NkN1MEhYallCNHBRTzB4MHNqaE50c0NLMUdOUU41ZTJCN2F2dlhqOUNBZ3NaOG9HZ0UrWFFwa0RZK2J0QzhzR08xeUFuazRNWmVSTHNOblV2NmlrMEszTnR4TVJ1UlpnYSs2YTdINExoaStwdUh4bUYxd0w0UVJ4UE12UnZCbEwxNlFEU3BHVzRuSWJyeW5acmkyZjAxTDRwV0NlNkpHRjc2SnQ1aFBBcnlvSVNzQjczTkkxT1huSXdaL1Q1VG16MEF6T1d2ZHNzZzlVUFNQUWR2aGUvOHBGYmVyb3RURnV2enRuM2ZYaVM5ZWpKNVRqWmFiVHdQRUVBeWNiU0xYdWRNUXRtcTYwV0Y1blI1YjR5bVRSRjQ1NlplM0RVRlBoRzRuN1NqbWFrVk9VczRLSjg0YzkxSTd2Y0NYT3ZVZ2NVMDJIaG9NOFpRd2ROQzIrYThnUEV3dm5XZ1ptcWsyMXhzalRoMDdlNmhPZloyck5iZHM1VHIxdWZmN0cwTVdaRlFic2M3VktKUmk1NTlzZFI3R2ZTVDRuWWZaWExmaDE1UnVyRGRlZUVNWURmUVg5OS9oUWh5Z2JrU0lFampoNW1jc2dzbW41eTJnNXkwU25md0ZrM0Y1eE5PQ1BzWk9sM0NVbTcwRGROKzdER1VGbFpVMEgyYTJWMm0rbG16YysyOEJkcFNZcGxGeDdzR3BXNllOYkFZMFBvVTlFMnFhS0hrdVZjM0NUTndxSUlRNnJWengxdFU5UFdUVnRMVGZWZG5kN0pwa0xONkppMHhIU1FkM1NrbjZFYlh0T3JQT3pjWHdoSnNnOE5qQkl4MTVqVjVZMCs1MEdDU1JoZUpZbnpWdXhReUJQcVJtb1RSekN2S0V4aW5ybDVaeWF0VjlpTHpySXE1NXplN1FJOUdTVktmZVJoV1RiRk03dk5MOGJYRGdSQWVSNm5sRW9KUkd0Z1NzK0Z0Z3VHRUpIS0lzdGIySllHN0RQei8renFCT0hJZ05Ubm12MkZra1o5b3VxSlNhUG5ZSnNWVkZVdjJmS2pJcmRITS9oQ0dsQ1R2U3BoSkI4d0RncjdzRVJ2VkFTZFM4SVoxZzhDYm45V00xdHdnOE9DR0ZUUHkyaS9kNWVYYzhIOFVOQndheHg0MmlUdzhORGg2Q2VpNkZSNCtjSHRXVS9zS2d0TzJJTmdWU1RrQjJscHFsak12OFBXUzEyTE9ZcE85QnRiaVRwRFBLckhmRFFtYWkrREZLREgvSlJNU2xJdktuSmJXOGU0TCtlQTB4SVFmVDREMzJERER6aUZ5M0FDT0ptTGtEbGF3dUxZanQrdmJPaDl4UXhxMWJ2TXdmQ0xHREhwaVVJT1Z3VHJIUk5nZE1nazZKN2JHM3FlamlSVGlEa3dTeEx3Tnp6ZTNJZFlhQXlSWE1OL3hZeHc5YlNDSTRpOVc3b1oxcHJGOHQwN3FtSDhTZGpMVm84OXBlTWFIZnZlTEUzcitLdDVTeDlYTnBXeFhPeHJleTI2eDRWZmhMcys4WnJvQ2VTMHZwR24vaXM0ZEZsbVhzS3VJWm9qcmI3enJpQVZDMnd2QUJYbDJmK050NHl5RkVzSnNCNjQ5MU11NERyakJtWTRUSlYyN0VVMWFMYUF5Y3VYZCt6dmZDQnEvNGs1bnNLZXlRNCtFLzh4bmJ0MlZFcDJScmNHVi8rMmU4QTVjOUlGblY3bHltelYrejU2TThnNE1NOFpCVVoxY2EvRkM1S2d5djVic3hwWk1XRlNLTDNhYnNxaUZ0YVVCckVLRCtNcGUwWnc0LytscDNnYjN4MVlYaGt5bHhYTTl0b2dtdGFQUUlQeEt5RDFGTHBiL3FzSVFHclRpTDdyNkZsWk9xdGRES1NKM1V6TVRZK2Y4cmJEMDV4VHkvaURyeW1aV1NlWnpFVmMzOGJ0cHQ5K3Q1NVVOWFZuOHNpSEVxV0dndS9nL21QcHJJcWc3NGtlZ2JwVklGTDdDdnBvMitVRExqTlFMVlJQT3dvNDRvNjRWeU8zaGRqOGFBNEQvMnRiSWswMHJBOGpsQW5BdzRoYnlwWWdveElhVUQ0RU1GNnJTZit5dVBpRExJVEtyS281VVg4OWpJUys0bFBTVUJJK0lxdEk4MWlxL1RSc0FpMWNXWndqQlBIWFRqZG1YUFVESDZ5djlyY0RaM0pBR202aGlYUmZQMXBRMDg5R01qVzQ1ZTFaL2VmeW1WbGhIVm9ZY0hRamxLUWtwM1kyNU92d1pVMGVKM2VybFdMQXQ1WmFlcEZCMmZKOFlaMzZFL2NDaFh5N0IrTTBzYzV1V2R3U1kzZHdad01qWmgvMS9iaDdydGNvbFIvRmNpTCtXOEtiLzhFRTVHR3grOTJvdVkxeU03eHo0bzhrOHNlTzhUNGVGQk5KNDh6SVRHb3M4OFVpalFYL0NyQnk4T3JKbVR6Ykx0QmNBUDZqY1R0UVBkcURLYWcvaHppbFY2Ykl6cThvOGErN3dLMjFlMU16ckhsVk5RNlYxVVJkZGZDUWx1clV5MVlkeVlRUmcwVTZ4b2k1TU10SVc1cHQ2bnpjMTdKdTBrNEJkblNVNVdwc0MrK2oyQjBIUUFFZ1F0OGRtaTdpaW82TzY3NGtza29wdTVCSGNqU3dOcUY5NTU0aTBhVGZ5MnVkOHozZU9TaGlZdmdGNTN2ZGwweHB5cUNBcU9tN3FZN1JHZVF4YUdSaW4vVjVtUnJJNXZmbC9ZWHN0T2lmWi9PZWQ5anY4bnhuRXhOWnNxTUVzUStnamdxdWhhZGR5ZUdlNGhzcTJGSmtUdy9pT2w1elU1NnRMWDlZMmRkQWJwd1FBL0xESzNaTVJrZC83WUQvOVd3ajJqTUMxWEhNczV6RTN0a3l5OFdqK0hHQ1JXTURXdjdvaXpad1BHSDRSSDFBNFdqVXQ4ZCtMK2hWT1p4NFN0NENMeEZ1ajZmWVBpeUxLVGMyelljSW1GeDdwWExBekxCSndiOGoxUVp4NkZZSGpJUWFtVDFEVlN0OWNyUlU2T2wybm8reExUNndwdGhxQ3o5cVNUWTlBNWRocFRqL3c3aW1BNDEyWmRzbStLcXlNTXNmZ0w4eFFJcDZ5SVdNQkNTMFN2T2l4RTIrZUpwalBnNm9wNTV2UzZKeGd0SmpPKzhJb1EzaE9pVmtlV2h2SUI4c1djTU5zNmpjSmJuQ2tOVE85V3BIdzZpWEhDdTBwTGhRQ0NQY1JwZTZzM1gzd3FTL3I3cUhLWW12OGFwQ1VRTDI3Skd6VEhoYXJnallBSDRDM1luZnlLTkZzc3dtVmxxZzE3VUR6TGJrRlFsRGJVNmdaRFcxTXdNeDRwQ29wcGswbUIyMTgveW44RkN6TTJ5VjlXenByTS9DdmpCRXBUdTBwd25VaDJ4b1kzZnJjcGtyUDl0VFVUdjdzM1JSU01Jdk0zaGI2c05EUzZHcjVFSDhmK3VmUjB5dkFUMVA4blczVER5Y2xlby9OSXFuU280TkN3Nnh3ZFFXK0NHemRuYzZSeENpcVJrTjEvUXl2aER4d1NhV1gwQm54M1pmZlNBdGNpaThhRlNoSThsU3ZuU0tOcHlHK0EySTJXbzNJVVJwdFlKUnQ3ZmhFdmI5cGdCQ21ob3JsWUlWcmNOVVJZTHg3RFAxRVM0cTdKRE1JQmQ1cjNGWEJ2cXNIWXJJWHhaa0JsWkxEV0xKRUlITWFuaFF3N0ZEUThIZHNrdkFOQXNwM29OamFYdVB3NWcyY1djNFF1M3c2WWhuTEhyeUJ1SmRvc29XVjMzNGVqckRMV3NSLzFrMmRqMnJ3aDIwYWc2N0xvNkcxSkRsYythS25FUmlVaHRLWG93TVFNWkJZOTF2ckZ4c2xGWjVOaWhrV0dnKzN0dzYyd1pYUE9FaFlxNVpEdmZZRHhOeFBIb0ZOc2E1U2UvME42SUFJR0gyN0IzTktGWFV4d2xsdEtwK1FUMUlUSEFYdnpQbVFnY0FNWWw4bkpENlh4SWlFbVpNejhEYVlISG5ZVXNJTzZ0eHcyWUxzWGVJM3NqWUgyR0FxSGVRUHNzNG1OUlZlckxEQTdZRytDYzU3MmtHdEJCdWtxek5EMVRxa29IcHRsVGozdjZ6Q2dQZ0V2MjNWQVZmSVVVOWViTGpIMVlsSkFkVnRGellEVkpETTdPT2NiOEdNU2pycDNTSkVsaDFHeHY2bU1iM0VKT0VYUlZmckphaE1CS1QyMkhWdTV0NFZsL2JEN1N0NDNkK3NnNXo2dUNyb2RxVTVnV2txWmxVQXRTdXptbzN5MFp1QXVlQjdubXVZb3Z5bllpQ2xiWmQ3L1NUVE5neks2U1BXZ1pRWGdYK21jMktiY3Q2QUZZdTE5bWxUdGUza0Q2T1JUZ1JtYUVVZUxPanFlWHdRa0U3aFNneFRIdFgrejUrODJRQWZKSEVwOFY3bFkzbnUwMjFURHlBMllmc21NaFM3ckdHRTl2b05ERi9GbldTSWZFQXloVVF5RUlORDR4K3AzWTFhMCsyN29sZHgvUXZBUmZhSUh6UHQyRXRvdGZITWJ2b29jWE83SDRRMHhPZ3VJTVJJbGVFRU93MFVJQ0pSVUllakJmR2tYaE80MllscVNKRUxVOVEvUDFBblY2YS9nUnRLRUxmN2g3VVNqK3VvNENIVGtOSHZWR1U3dUtYT2FEQXZ1TjQ3OFFDaVFnaVQrU2NlVzFEZ2w4d0w5cTNOUFg2TjgxdDNHaGVTSWh0QjlVSjIwclNtTWtqUFlNTG4xem5PcTRkbFd3bUFFNG13NGs4QlZzVmxJNXNrbTczNlhKZlhyUE9aS3lRcjFGMjRhV1ZXOGhuclpveHlpd1JYNmZGU1RDalhuYmU4MkY3cEZzaW9HNXE5Z1pSNmt6ZzROSDNsMlFlZXBXS1dsb1ZPM3BpdUdVa1dqaUZsVzRUcUVDMytseTV5NEtTcitQcStrUmQrd0VncHkwMkdLL001ZlJ3eHU2TjdPbmV0NUQ4UzNMbTlrc1VUNm5TZ1duWTBEcFZpRjF3Q3lpTC93cDExOEJTcHArdHNpRFoyWDVwbU93aTBJckMrZzYvSHdrTCs1OXdJZjJLTmlsTk5rSHRpd1hCcm51cXhVZmlHdGVFZWVkZExBbTJvdkxaVDZTZEY0SFVKYTZId2s3M1hJcFBVR3I0alliaWwwNmZhTFRHK3dERXQrUGdzTnhrZGU5WWFSRWZRT2ErdjluWUNaQTh0NFF0WU4xaDNWMXEwbENZSFBraHY1Q2hUUG43d0EvQ0lNc3dlQ3VXYmZjejNpK3JFSzVOZlJrTWs0aEVCbE9LcEZkZys2VTRadkFzMGIySTNGakIwSittZFNWOWxIVzZ6dEgwZ1I2eGZoMEFkSDBnZi9WOVlXRTNkSGlaaGk0SzNaMkdoTU5WVFQvVGFmQTl4cEhHSEN3M2laUG9XNzhqT3F1WWVjU0R6Z0NXeXppdjVNNThEdEQ1eXVCYWIzWkdIcWU1MkpIYUlDS2pIejg5TmxCcDBjVUVMN3YwMUNIMENsYUkra1R5dWZmcWtQWmNTYjJRTlRTamVqWUYvOUJFZi9jUkY4ajNlTHBTV2RVRW1hZTZ1d3hWVGU1clExbDBCRDZlWjgrOERqdGVYVVRDSW9BdjBUdVYvUEs2NTJoUG9SL2pjOHV2dFdVUnVFK2FsaGdMbnR4T3V3V3pPSVhWV2Z4N2hDQ3BZUHR3TVpMZjBaQmRQVE9FZjd4QzFBbnVxejJtWUkxTEt2b2V4dG9kWHhkaThWM3BCVjJoN2JnTEFhYlRiY3hpZ3ltVVk0Y3M4NmJYTXE0ZW9RWG1rMTlOVllOUFpBTjBXbG02bXp4SGQ2UHhPNS9GcEl6NFpjL0s5eWFreTcrQkh6T0FVeHlJL2ptYjJGUXRGN3VqK2F3d3A2ME9MaUJ2ZTBhaFlvRGJzdWVsNDN3SmZhWHN6cC9ubDJKQlNQbDlkSmFWckpTOEw2L1A4MWxlSGVqbjZpTU5vWDlhK2c5K0pSWGRpeTVNeCtZTzR6NkVzdy9lRkdkRzNLQTZUazBBdmRHSFNpdG9oSVZZSnRxNTZ3R014bnduNWRBWVBoT2xqL0xheFVwMGpqRkx2NERkVkhzSEZqc0VWcDNpVFY4RTdqUHAvQ3FlZFFuMENwOVQrUjhOdG83OEg2cmw2bDFJV0R0bktSUlpBeGdvQXYrZjRjQ0RneDdLNlE0ZkR4MHRyTEN1ZFVSaGVWZW5UT0pKbTJvcWRSK0RmSGhpeWphUm1udmZma1NXWncxQnhaUlhFaFI0NUF5QkpJSDhkaXpBUHpkRS9kdkUxSWc0SDN3NmFHdm03K1VOOFZ1dStUNDdwU0ZJUm51dFRHRnp1MllMd3h4VkhjQUV6b2d1OGxzVmpWcnU3VGE5OHdUdFpTWHR6RGVIZUNMMlp4WlgyM0Y2NW5CZzg3d0NSejNxdnYzMk1WajF3Zk80VytYRVlmZ1VKTGZvbGpuNzBZMWZINHpZTnBCLzBldHgwdXdVaEJBb3FJUm1DSDlCb015RDdDZVFBOEx5TzVpQlNmNW5hMkxBaTR6dlVwVzBxVUgxUWM5SE5XU1BVS1cwdGVLVXBINWV1Mk0xMlJSM0hhYlBKZnBUV1l6WnJHNEFneVQ4OC9mNVE2R1NSSFQ2U3lSUUg4OStxaGl1OGhYNGh2bXhacTNaRWIwRVY4NkwwRUxYV1Y1VUU1NE1wdXJhY3R4TStEbEVmV3NjTUZoaHN4ZnMwZzdmcWtDbko2UVdrRHhqa3hBa3h5RERhL0xUVUQwcDB1eFFWSXkwRzBRdG1VbUpIbklXRVFjSkZoM1hXcmMxaXgyclphY2lxbXhXOHRLTEUvRXBmY29wdzViTE52am5rd1lETVJ4Nk8xcnVIZFdSd0l3TVE4Vmk2SGkrajJaa3lCUjBIWWpTR0pRdktKb2JNTU90c2hRSElvc1pQcWgyV01oaGpUVUZjYitzejVwK09FWGhFZGVHdXB1eVRmRGdieE9JZWVNUWZKRVE1S2dLdzdHZUU5SmMzdVJ1a0d3MEZwRk1qNmFnaExBKy9hMStFU1pEZWlYdGQxVGlVaGNvU2dTR0I2SlZPUjd6QUpMczUrT0JWdVZvcWVQSEoyQ1lKUmpKeGN4V0EvYUdJak8zMGNEekQ5WHJubmlqQjF0TjN5UEgwWGtjNCtSS1ptQlBTWTE1dVMvVjdVVVd1N2dsSjI4NEFIbVJxTTVTSFJ3VkdCaHJUTjIvVGlnM0tVTVNqRE5JVkY1SXVhUHFaRVFpNTlEY0dlenlEd3pBenM5QjFFQi9pRG43R2d0cVZscmxZbU90Q2xheG1DSStwazJQaXh6WU1yWkhleEVxUndZMVNYb3FBTFhOemthVFRac2JXb1gxV1JjVHN1bFhpaC9JWEZwUFl2eEVhNkFGWmZ4NHhsTk16Zk9JdVVSY2J1KzZxdmhhU2hmaCtYdTZTa3ErVmFER05hb3VLcHhZT2I2QitBKzFUZUlJRzdMM01SKzVIdFVURFIwZ2JjTTB1S1o1NFBia3hBRzViaHNINm5IbVErMUc3RWZwZG8xbDVjSjdJSWNIaDNuR0pXc1lsM1F2dlhaYWhKdlB4NVU2Sm1MUXZvUURKY0ViclFaNTIrQzNSRnIxMXBaZC9NVVVSdjN0UWgxMi90UEIraHdyMXNtTm9CVWY5bE1TYjhBQmh1MDZ5dU5mdWIrUzdNN0RiSUhyQlJtL2ZFQmZNZWZtVllVbmdnSnAzeXVZYnFIZ2xRYjZDUVZtSHNlanFhWjlNVHowYXJDRXJBdXF5R2srVWYycmo4UUFSWmk1cUN3bnRDUDBmajBLM1FveEpsZ2ZwYnRrWkdIRlRTdENBR0JLS1kzOG5sK0pLOU9RRkZ6UUxnU0toUExORG1ySGkvWnNIR2JJZ2RTendDL1pXOXU2aW5vN3NuNElVUnUyQUNUOGlGVjhDanBHNnQ5dHlDdk5TNTFjdTlTY1FzaW45K1ZSa2pLZlcwQ09pblhOVWpuNXQ5eG8zOFhRZURjcnZqampMUEFrRUlhU1RRazkrSUVIN2NSRXdFNkhsYi9qdjlTT2ZkaWtmclFsSlpxQTkxeDJEWDNjWjU5cnhZbUJiUGVHS3NaTkZJT3ExU3psSnJCU1Jid3BHYm5UT0lxM2pZemhwNERjSklibDVremRqcFprQ0lIVDh2VnhYZ1lFYnBwYUVjSmJzY1BucVZGWUNNd20xUDRzbGI1MkxTN2JUN1I4REFDVUptYi81bG9xUVBUVVZwWkNrQ2lOalVCcEpNeE50NFpxZDQ0eWwvMWxibllDcnpZR1JPc0RmZS9OcnU5QTJ6TjN0eXhCZmhvZDNRNzlTcytMOG5MWnFaZ3MwSzBxNUh0dUZqQVUyWVArdkFMRmt3RytpYXV1bndBTjR6cjI3U1owakE3dm4xclIwM28vVHU2Y1FvTDFPWHFwVld5dHFtN08wMEZrNFhvYi9zdzZtQ0lYUzRNMHBTc2NaWWw1MDFOR0ZibDJtM1VGZlhzUHdncVRiWkhGNlhCMEdqdVJUMElmTDFWZ2I0ZWVLOENnM3JPVnNtd3JoUnYzVlp4c3lHaVp0eFlYRFZxYWY0VGZEb1JSR1RnZkk3eFIxUGQ3aG0wYmRUdXlVUWZ1Y2hlbHlLdlpIY1ZHS2NMVDUvNW56NVVIMlh4L0ppdU5KOE5SMUxUZ1FxWXlnaDFsMTVEUVE3eStDcG1BZ0EzWGVIS29Tc1Z0R1J3YWh4SEJ1VVAvd0FrNHVHYVhYRGI2SzMyUk50K3BJbVV1S0ZVWVlyQkMySXc0eXFHTm9JZDJxQmdTWGpXWko0TVhOVFI0dk85NUlWbkMvYWdLRkNVdjlvMGFmbno4WlFuQ2ZscUlRa1VBcFRNb0VBOElwVnBUNHlhbS9aRy9rWHJ2VGNxMWt4TTFGUHZ2VVEzaFdLYzQ1TzQwUVozRlpXZ2NzVzFUdi9BK0cvTDZqZ2FmWGVCcVIyaEFoZ1RpbE9kWUx0VFB3ZWtvaWNwTFo3aWZjZ1FpL2ZjZEFmN1kxQjEvaE1lSXM4UG9YTi9zNS9zVkJUc1U4QmNiVzgwemg1MkpTOVA5LzVCNnAyaCsybm5qWU9zNlZVeUpPSlFwRmN3Q2wwVFVsUEo1bzJmNEZjRHpQQXFqYkF3Y3AxakUxR21uZVkxSW5VbnFBWEJjOTZsQUZqSFB0a0hSeW1HeWdsakZoMjFZblMzY0V0MFlEOUtzdFhVYm1kTGZGSk5ZUHM0VS80cVlueHRIUzR3ajJRWSsvSzVXbzN6Uzh3bEU4Ky93bXduT3lMdk5ISS96aXJxK0l6RitSK1A5RmtPSmFEZk9qVDhzTlFBeGhVbVZsS0R2SU5KMTMvRk13OERzci9NOFB2cFFQemRRNldvWkxyVDJyRE9UcFY3b3dtYUladEg2UGtJTXZZa3lXV1hObzFMc0hCaEh0dzVjaUthSXFZYXlKcUY3ZTdPRDB2N2pvaW52bTYvcHoxdVI0ZFNKcCtXeDZzZk5sNk1TcTk4VmlBek9oTFpNY2RBOWNldmlRTWNkMDdnT1IrSDVYVmZaZjZyYWU1dGRBaVUvVkN3MXYvWUs1amF4VHdpa2o2OTlZa1BzZXpSMVdtNUM1c3NmNmhXSktUTDBiWW1yM3BHZ1Z4SnBLd0IycUIrcTVxd2VaRVB5K2J5YW9JWkVKNDBocXdlYkZObkRMS3M5bzk1dkpwL3F0TU5aSFdiaHVhWTVjdEREd3ZZZjVVNVptY3UvaFdmS1AvQ3UxbkIrelRLRHhWVUNRWGZ5b3g0R0YvQmVvVDlaWXNncU5tVzBkQmtyUTUrVXYyTEozc09Pd1pmV0xuclB5Q0l0OUszOGE3V05QclRpcnFwbkRIeUYxWmE4RmRUN1lJc0FQU3U4YVl1VU1vOWszY05xWWRPRVh0djlHc1pacVhKZTBJK2Z3UmpjL1FVTVp0N3lhOW9DTzdFcmVMUjdDWEhRemdqOUlGWEFJZDNNeTJjL3pLUWdDUDhkSTZubnNGN3NNYkI3Z09BT295bDFVSUR6VGFXZHp2aHIxU2Nma09JZEpSQTRzdU9Vc1k5N1B4NW1sdEdxcEsrSEN2UDQwVjJPRGxMUWFrU240MFByZVVmaUFDa1loQUlXaXBqZGZxUGJpOFRUL0VxNEtkRUo5RkNKMnRxRTR5dENWMXFmZVdUVzZEbERFbUNaY1FtUVJiclBGUlVaYzRTakhKYmw5N3hKait0dUI1Y1FhbEdNTWpBT3BQeFozdjMyK1pCZEN5UVQxMXpYWDg1aTZYQk9kY1d6UDZoWWVRazhTQWI3U1dqUVFMbVVXeG9nQytHOFNNTHZKTjNJUWdlUFkxY2R5dG03Q1Rib05hWGxZL1N3NTRKeE1rTDZhVzZIQkduYTd3UGJyN2xRVEl3cmNURDg0NzdsR0Uya2l6Z2hEOVo3bVlySk1DdDFWckRXK3JKdDlvMEJkd3EwNTJ2L3BqT3J0b3NwR3poVGl4aTY0RFRqd0FRdjZjYnROKzF6NENDekVBSjdJdHlMVWRtL2pPbi9BaWVtTTVqRWdHRCtzbjF6M0JEUTZnbmxsSldNYVhnT3oxSmFNTHIwUHk4a0E3T0FNK3k4L3ZOdWRFcm1xcStCenNqalRRNzlud0VXSGVtQVZsSmx2c1p3a09IZnlWZExDbU1MUFN4elBXZWs3amNvWWVINnhvY2N5Wm9yNThTUjRZVlo0ZG45ZEdqeWw0VkhPT0xHcFhjRFRxbGlWcnptQWY4RWJnUThNL0tZem16MFFhOU1uWjJ1TWtoNU1JQksrNWFqMmlPd090TjZvc3FiUGlTVkxudkNONG9wUjRWR3VTTjRPMEFxY1J6RCtqaWVveGlyOHE4YXhTbUhOU1JDVjJnZEoxRzJRU2ZkWDJ6dE9uQ0p3L3BXZkFLWGVzN2JSVk5ZNmt0MnpmUzA0cjFXU2FDSkhvRjd3YThwODd0YnJySjdGdGx6dFVodGlWYUNCTlc2SDl3Y2hCNnE5M1dHZlpqdU1zRWhlV09MMHdUM1pEOXpmM1YrWGVyYmJOdCtLVHdqRU5MUW1sUVlWNnpiK2dBM3NtczdxWEtidS9IWjZwVW5ManNHNmkyQy9LQklQNWsxblpoWCs3cXlra2tPTkRSKzFXRFZmcW52OWZLNjFaaGYxRElnQ2ZON0o1S2JLUGJkLytVK3kyQkpHQWZIZEZ3NEg3aXA1eUJncDVsU0xTMWlQU1RFamdMMURTNEE2eHliMU9jYXhCRWxJOHJBb1NvVlNEWW04QTUzQWE0K1JZK1lIU1NaaEtLdFJNOCtXTVNYa2RyZHVFbjhGT0pZVFQ0bXFpYlJWdjZnVVhXV3VleXdQWXdzbnEweWJUY1lwbmdxaGJ1RDFuVWNzSEUxT2s2alEzeWswSHdjbmJNMVFwT0lIbkkxQkxKc2ZpdERkNEdIcDZJdTMwZW8rbVM0MGZQc0wvZHo1SnliZ1dRaFoyT2pzUUdJRklFSVNXcCtXZXBuVEl2clBqdzYxeDdHcVp0V3hvYWI2MUw5OHVxUGFUalBzTGxmSFNXaFBUQ2dkUnFWVE1va2MxYVJCdXkvYml6L3kyVFRXUWlwOUZMd1NxOVRYcXBseDhPbFBPRkU0aDJSbDNYSjdRRVY5Q2dSWDAwSjlzcXVVNUJqckRSckQvVzV1eFNpanFTQ0tlVzlzdmxjbnM1VEdJLzJJVWhXU21oWkxGN3M1TmpxWTJHYlYrYzltSFZ2UXAxWWl4dENCLzl1R0x2cThFYW5xbnJQTlo0SmVJSmNTZC94eVlBSDl5VTU3VTlZdFNOeUF2RnU1ejhZckZiZVdJVE1LSi9kK3M2UkxrTXRkR0I3MHF1R0t6TkpGKzlCOXZMcmRHMHE0NGNnYlBsdmhQWXZTVHlMMEl5a1IyUloySEpyVXlybldic1F2VDdHLzBmM0xCUzgzcyt0R3ZPM2VJQlNRQ3crMTQ2YnF3eE5PT21OejY5bzFQTk55bThzRDZWaHl2RlJNcjBHQXJWUDJZZEo1eDlyWnhPOURJcnR3SlJ6RmNraFgxY3RiUno1MEh2UllPdkppQXpoUHRFaGhlTlJXOUREakRPTUVuaWJtVENtVmwwVUo5UUFxendpUTM1eWVUTk9VenpJakNsZ1NKUDBaTDFwODBJVFVkSUdXVDI0WkVrc2JqR2hiL1BPT3J6a1QvTHp1cG4rSE5ydnFSZXFaUUt1V0I1eXMzcTVieGFSMDIxODlTeEMveEpkR3U3djl5OXdpdzV3T3ZJVHpEbE9NQ1hxOGk5N3A4SktEQjVCejFYTTFZU3U2WWlxcEtqRURMZndCSHZUM3o3NjYwanJDazV1dnlJNW5GV05McjA4ZDhSYzIxOWdXMDdsZ254VlFHSVhHTXFjZGdmMEM4cHRZTXcxMEVBblJ6ME9IVzh2Z1lveHBBVFd3L29CT085Nm5yYUpNS040R01adStiNlM5c2QvZ0d5S0Y0aUtRS0oweGxRdy9idDVId296dW45V0FXeHZUNU0xS01GMXViY1R2N1JvelZHMWhabFNtblAvVzluRDFNRlpwSi9xdDFrMlNLT1ZWRFVLbi9UeWhCaFBseFJERmVDYWhJSjRXaEUwYmFFMzJxN1dPZTZTYVpYU20rbXpZbzY0K3Y0WWtuU1MrMXN2aXhaUGVlRWxDODQ4bzZpOU5PYlNZVlpaZUxKTG1rRmNGWDdCTWJGSzMvSGhMb2FBY1Z0UzZwZ2xVVU5YMjRrSE9hcHg0RURFYjd6eXlJQjBQWUtjU3liWDY3VDBEdnc3VnJ2WlZNM0RtcnZhd3Z2OU1ROVJka2xGRytTR1dIRm45c0pjN1Rpb0UzZnVrVFVyaUtWM2RaSTljazRiNW5MU0VhY1ZSQ2dMeU9xdlRjckJDeHdBcjBISXJ5aVl1NTVjT2tZckI4LzJFSFpGRHRhQUxxYUloWkh0NXQvQVVpQnM5QkZld2hmc1lTU2lkUHJXbHZRbmdKSlVrVnNQNnJCcTFRM2ovU3ZjMjVmTTkxLzBFbzgrME42c2VlVTFjZmE2Qk0yWDJBWHdIQmtkS1paRFpSK1lDaElYZHJtKzdLazVLTGtUUGtTcjArOTZTZS92SmtHdVFTWjNlN01pZWFOYXdueGF0VGRlSXZhWHZkcy9GSzRsNWhuckZCdWVEYm53TVpCV2loY0tHdGcwQVlHSUx1czNrUU8xWDJoemxpSFl4ZUFlT1Uzc0FuUWdkeDYwVnZmL0I2ZnFLcW4rUEZqYXVPVnNXWGNyWFVaT1JYTjNFSVJLOEs4M1BEVC9IaHdnS0RESjRmYVYxSkorclhxTmZJQ2FvQW9FbHBqdzhHbFpHK2phS2xIb24vZHUrSmRhcC9pQmRhbisyZ3BwSFJDSE1qK1dhQ1p0dlYyQVVjZjZsUTVVVGNvQ1djb2lLN0VrT2ZHdHFOR1Y4emhlaGM1L3dEQitmZDgydWVZNHJjc01id2phWTR0YnhoaHlSRlFsd2VhU1BjNUZQam9kTzNTcUloa0w2OUw4RVBNWHMyS1ZocmRsRktFZlRSRlk0eHBJcS9PVURsYm9kZDUrT1VVcTRjbElkV21YYklHSktIN0RUdHF5T1JSRXByUStyWDVSZjU3WWFrcURobS9sdy9xZ0ZNaDk5dWMvNDFlMEpldklvalJBSy9uMUYwOHpCOTlkYjFjaXpYQU5tdnFseGxsV2xsMGFJTmFGN2VzVUlZVlZCQTJiSFo2MG14OEtCYTVrNERkNXpxRUdSaVNoN2VDZlRtQTYrNHArV1BtZlBOZWNZQnFSZHRabExDSEc5WVpEWjQ3dDhGUlJlOEQ5STM5S3hRVjlUMU5rZGtaeFhROWp1U0hiR25vdC9IVHpPcitzYkZVRFN5TjBmT1FDS2pBOTZUOThJUHVHdXNMRHZsM1V1TUhRK2tPdjh1YSsvKzBMYWJsbkRKcTF3SGpOa0ZnTUlSblJQUzJScU15TklRZ2NKTlk2S1lzS2dobkVTVjFMQzRSQkJNb2xBY1dYODU3QzMxb2FUUHhxczVDTkIrZktiK2NnTUJTRXNEYVJjUjFsRURDRVZ3RFBSUlJpeVhMcUN6MW1vT0VncjRhVzlhd2VCOU1mSW03dms3WTd3NjJSTkYzY1QxTDF2TEZKSFlnQmtKb092QzA3NGI0OGpncUJqMmtqVGd0bDN3c05LOGlpUXFzYUM2MUV0M2JwazRBOEozcFcxT054TTd0d0kydnFya1lQcTdXZ0M1RGU1d251aVVTTDkyT1ZkbTZ3R2RsVDRIMjdGZytISjZuK00yNkhuQlF4S2FOOXdFSG9yYmdZd0hxcUxzM3g2SjBRbEhGWk9CR1hyRE1kUHJURTlxdVA3ZzRhRHRvTmltWllUMkpQM2pyRzJXZHhRdWNGWThpckpkR3ZRRW95MjJKdmtqeGpLZkJYamRQOUFuZkkrNTNWb1ZKWjNZb1FEZ0pVQk15RjM1dHZqZW1qWkhIWEhkV3RSMWU1allHakZsNDQ2WDZVWC9JL2FidFRjNVp4emhSeXRlRzVkYkQ2dmcyc0FWeTZ1YkN0NWxKc2NNM0o3WnJsVUx4QkdnMG01NW16bFhHRE5iOStocWN4Mm1xb0FQRlpjK3Z5Z0dFeTI4UjRiYnJBTzFvNjNqTHVxMjJESjcxZ0RRbnV6TUNhQi9xbjhFZW1tUU55L2ZXTTRGdWpqMzI5S2FzQmozamFyY0gxeTJCaGFIeFg5L0RwcHZQKzVrRGJ4dmVCamV0WmZ1MmRVMW9DSnIwbGppVy9QUGNCbkR3YkdSZVFxUGRQTjE3TlJaRXVMd0ZwcFJkZWNhUkEvQ1VkRlRCVnV4M04vSERLRWdRaEozVUxnSUtQNHFkVjNLZVlsY0tJV0l0WXpYNExqYnBJcnQ2RWtFSjJVODl0K3lQa0c2eEdKT3BwWS8vRC9DRDNWTHVHT3RGdFZYZnVQeURjV2NtOFpmbDFkcmoydHh3TUdJelJPMjBWK05COVQ3dVN6WVRuWWFvSUhLV3MwY0dRckJaY2ZWWXBmWVVIQ1hJRm4rUXF4eWZnd24yRldxVWkxWm5JaDlNN1NkRE5pREl1bnFZcmEycE5LdGh2WjBBSUpJdFFzR2cyRmZRU1BnUTdtNU1mbmtyM0NTeEZOVHFQQzdnWlhTUEVjN0ZVLzhsdzh1UGNIRFRjSW05Zm9jeVpzMEFlak1LNnVWRm45ZUYwaXZNbS83NWNDbjdJQ0JnVE1ITC9oWFV2RTh6ejNXOGo0ektOdHJ1Ni9BaEFqbktxaDdWRjVZLzlrQUFRQWFBRUFBQVNNQVFBQVBBUVFqQWdBQUFBQUJFUUg0UUFBQ0FBa0NBUUVLQWdBREFCbFVhR2x6SUdseklHOW1JRVpwYm1kbGNpQW9OQ2s9PC9CREI-CiAgICA8L0JJUj4KICAgIDxCSVI-CiAgICAgICAgPFZlcnNpb24-CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvVmVyc2lvbj4KICAgICAgICA8Q0JFRkZWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L0NCRUZGVmVyc2lvbj4KICAgICAgICA8QklSSW5mbz4KICAgICAgICAgICAgPEludGVncml0eT5mYWxzZTwvSW50ZWdyaXR5PgogICAgICAgIDwvQklSSW5mbz4KICAgICAgICA8QkRCSW5mbz4KICAgICAgICAgICAgPEZvcm1hdD4KICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24-TW9zaXA8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgIDxUeXBlPjc8L1R5cGU-CiAgICAgICAgICAgIDwvRm9ybWF0PgogICAgICAgICAgICA8Q3JlYXRpb25EYXRlPjIwMjAtMDEtMDdUMDI6Mzg6NTIuNjcxWjwvQ3JlYXRpb25EYXRlPgogICAgICAgICAgICA8VHlwZT5GaW5nZXI8L1R5cGU-CiAgICAgICAgICAgIDxTdWJ0eXBlPlJpZ2h0IE1pZGRsZUZpbmdlcjwvU3VidHlwZT4KICAgICAgICAgICAgPExldmVsPlJhdzwvTGV2ZWw-CiAgICAgICAgICAgIDxQdXJwb3NlPkVucm9sbDwvUHVycG9zZT4KICAgICAgICAgICAgPFF1YWxpdHk-CiAgICAgICAgICAgICAgICA8QWxnb3JpdGhtPgogICAgICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24-SE1BQzwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPlNIQS0yNTY8L1R5cGU-CiAgICAgICAgICAgICAgICA8L0FsZ29yaXRobT4KICAgICAgICAgICAgICAgIDxTY29yZT43ODwvU2NvcmU-CiAgICAgICAgICAgIDwvUXVhbGl0eT4KICAgICAgICA8L0JEQkluZm8-CiAgICAgICAgPEJEQj5Sa2xTQURBeU1BQUFBUG5GQUFFQkFRQUErYlVINWd3Y0RDQXNBQ1FBQUFBQUFBRXdBRUFBRHdJQVFBSUFRQUlEQUFFQjlBSDBBZlFCOUFnRkhRRHVBV1VBQVBsRUFBQUFER3BRSUNBTkNvY0tBQUFBRkdaMGVYQnFjRElnQUFBQUFHcHdNaUFBQUFCSGFuQXlhQUFBQUJacGFHUnlBQUFCWlFBQUFPNEFBUWNIQUFBQUFBQVBZMjlzY2dFQUFBQUFBQkVBQUFBYWNtVnpJQUFBQUJKeVpYTmptY29BQVpuS0FBRUFBQUFBQUFCcWNESmovMC8vVVFBcEFBQUFBQUR1QUFBQlpRQUFBQUFBQUFBQUFBQUE3Z0FBQVdVQUFBQUFBQUFBQUFBQkJ3RUIvMlFBSXdBQlEzSmxZWFJ2Y2pvZ1NtRnpVR1Z5SUZabGNuTnBiMjRnTVM0NU1EQXVNZjlrQUJBQUFVVnVZMGxFT2tkU1FsUXdNZjlTQUF3QUFnQUpBQVVFQkFBQi8xd0FFMEJBU0VoUVNFaFFTRWhRU0VoUVNFaFEvNUFBQ2dBQUFBRDRUQUFCLzVQZkd4QUpWT2QzeHpjWWp1MXc2NVZGaEtwbnZQRGYwMVYxVmdOWitSUG1ZOEYzSS9wT3hrbjlLK0dyTXF6VWRCUGZKb0JvZ0lDQThZQkhIK1FEdzhHRWI3UmJQeXFBOGFCcnpZSlpSN01hS3lIZ3djNU1nUHdKZ0QyckgwaWU4c0lpVlFOSFZoMDFTdFI2MUUraFVpaysxUkVFM1lrRVdKRExUa1ZYbVA5MVNhT3lnWGFBdzFDT1FiQ0lvRm12bUs1VWFSWlJBRVcraUc5S2pBdytYMjN3N0U4ZVZJVXJPcHlRTVVEOFNxL1pKdVM5dU9VNGNhNnVNYXErbEZwcGFLNlFoa0cxT3c3emJFdWpBSEhrSXFZYTM4U0lrQlZzWThzYVZGMnhNb0Q5c0J2NTRFeDV1QzNUK3BQMUJ2eGt2d25mbVVDK1JqbG9SdDJ6Z1Znbmx1Sy9mUFdlZUI1S2JUV0JQQXdWQjNzTFMrRUZ3RlYxakU3UHNBSmUvYmwxTFBiSUhPc3hBSHgySnl2S2dsZGdJc3djczNUL1JqLzZpMkQreXBFMTJISWZyaTJ1Sk9DdVBLNlRVc1I4eHRLdllJUGh2RzFDQUxUYlFiQURYRTZQa1dnQVNMQklyNWVUYnI3TjFpK0VwV3ZPVklERm96elVpSC9zOENsL1BMaS95LzI5V2lxRitML2RyN1Fwb3pscDFMYW9oZmYvRGxIbi94ZmplamlwcnVqak1SeEtMdGlubjFESmtNam8vSDVXaFBqeDB2RXV0WXFBL0VXTkFMa1RuU2dCakxKdlMxQ2prYjZjb3B4blZ3RG0vVTVVQWVDN090WEdUSzhyZUhGemV1V2dSUFRjczFHQ2NiNExyS28wRllERmR5NG1qR1lWMldSVGQrS2tFRzhJdFBYNWlQM1RqZGdwaEcwRWdOUTJwcVFIV2lSVkRBVVhIVTFUclY5MXA1dUhXQjF2aW1DQzVhZUpiZ1BCWXYzY1VrMXdpV1NHL01DTHVieGFTTUpQbjN0YzNHWWpnNVNpdlB1RUtWdnNROVZMTVlOMUFTT09JTEFJMW10a25uYk5jaDBIYlBOSzI3UDd0OXJCdjF2MEdoc1EzYlB5ejN2N2VqMnplZWVvbytFOEc0TkFVM2Q2MEtlUGdmR3p3eVNsVXk0NjBMaWtjQzV6Y0NneG9JV0RBRWkrdlgzbTBCOHFscS9iamNUQ1RBZ2FveEhROEErcGlCZ0h4MzFwV2RGbnB5ZWFmOXBhTmtZV29ZcVRpMzV6Sko2Qno2c1J6d1RnWnlFOFVIcllYeXBRa201RWo5QTJmNG44cGZmSVRYem1NTGRjb2ViMFo3UzJ5NnRmNllsaTMxSnpnMFN4MWpSRkVSdkNJT0ZWTnROY21EaWFqTGczTG1TcndXOHJXMUxsOEp6WXkwbHlsSzg5a0swQWluVGtxaG5ud2Fyb0lyZzVpY2Z2VWQzQmFtZVJ6ZjRRWDhNaHM1bW56d2xnc0xlWVZjbjRUWTJDNzgyVHRpanZySXVoT1NXK1FlcXpkQUJTdjQwZGVXZ3FFQmVJTk0vaHJhZ2RXM1VteXc4dmNsVkZDOGlkWnZaSGM5VDluNFBLdDJOTURBamxFZldRS1pTbENZNWRTN242VkgxdExUc0hZRGFQUW5PUzVhclRJOUo1czk3WDdWaFhSeWZwY3hHOUc5ODZiTVdrcHdkVTdSN1N4YVI2YnJ0eHliMmdsSk1qNkNHeWo1S3R5dTRyVGdoQzB1UlRwQ0NreGY1RkZSNVdQa1VTbHB2aTVJZ0pKaUFrQllZYk1DZkJhWW51VENmM0k5SExZNUtVV1I4cTlHeTY4dTJVMzZVdW4zaUczNzRMU3ZvNlR6Q2UyMmp5aTV2Rm1HRVN2ajFsNDFhc3lra2NTaVNjcTdqZ1FMSjdlK0ZtekFoL05ENnpiSzdKd3UrSEVGZVE1aGxyUnBxUVEzLzhwN0Jhc2tFeG5Dc28reWI0SitwMnVmdVJVVlRjdE84cVhjc1o4ZUdFblZjVE11TmpCOHh3aFlGQ0h4aTlWcjdxL29vdndOdDRmVlZLYVk0VExkbUl2UXRHbXZqMlB4SXdRc2c3bElvdlMzRnpqMVl4bERQNmhOcXBBSUE3b3VmME1kc0ppR2l3UzJ3Qk9xRTAxT2VDS3lGSHVpS1gva3l2RFlsNVVjQXM0N2xsT0ZHRXBZNm9iWlN2QVQ5WnNTRCtRS20zekEwUVhqdUU0S3liWVhUVmZYQUVRdEF2Uk1pQ2dJRStZaWtFVEh1U2NDZUYrREpQeTdZQW9od2JIcDc1eEFBU3lkVTE5YmtqbW56bG9DTGgxZzI1Rk9lTSt2VW5Jb3ZyNWwwS1Y1UDdRQ3M1cGJ6ZmFBek9TaXlFRUEvNTVMRFY3VHpBMmRLOE5EVXFQd1BGSVBxTVNTblAvdUJRY04zRTF4K3JqemtyaTNxVTIxYThhQ0o3SWdCaFpaZkFWaEZhdDBoMWZ5cVZHbE9lMGhpUlYrakRPLzlnWnZqVmxzUWUvejZuT3RDYVpVMXZ0OFdpWWtoMDNLYjZ5cVdwemhvOStMb2E3NXJTY3JuN0Q2SDNnR2hBbGhxb2xDWkRpSThjVFl4ajB3MTlUVWd5ekJWeEJQS25VcFQyQ2daU3Yxc1RDZlRvNHpNYmp2MVFzeC9nRUJuTUE1ajVDWDFiRktPcWtJODJZSjIvelF4cEVSL1NaRVN5V3pJUHhOYlo2VnhDSmN3UjBMV29WbVEzWmhQcmNHMUY2bkM1MEV1WVVaeHVZWHQvbEdzOW1tbkxSU2EyWVhXaXJNeGVUV3JsTDhUTVJiNUJlME13azNZVGd0SE5rN3FBSGo5aHFQdkNJMHRtYXlsQndlYThtWGo1bE5vd3VMMXdBVkQvQVlhblVhN0k4cHFPTWNBdFJjaUpPMGxlczcrRER2Y0RNMDFZdGxkU2VOdnVaM1lYbnZlOExObWdlR2J1WUhIQWlWTlBEZFVwY3JVTWp2YXhYWU1BR2d4TkV5bjFidkVqMTFld0U2WnYxQSttblZsR1hBclh3Rk4rTndpT0ZJdERvYm5tTVYvZGNxUzJCTlBYMmUrYW9OalFLeisyR1ZXOEorNGtqRGZob2RFTEMwNHdGelVGbWY4MXlybnZ4bE53cEVuVlllZ2ZMcjBZVHkyb2RkRGJnQ2dsVnRBZmg1S1BnRy9PVmRQNmVVT1FpMVA5c1VOSzllK1MvZ3FUSnRBOUZVbFEwb0hGTXdPWW84dW5YcWlqRDRvTXR4TlBqNmRBVzdVZkI4Wk93d2wwNEhXbEl5c0lWUmlQYk1iTWh4Y3dNUiswbGNzcWwvanR3eUF2NkVjWUpGU2pXZHIvY2JqaktFNTdXbldQSi9yV2V5emFtWnhIeGpsSFgxTHQxSFNnOWQzTEhWbWpMWnlRVFBWNnNHZzF2blJSeHc4ejMwdzJEOFFpOVJodndhUTY2d0E3ekNlZ1RnYmJzeTVqYWhmWDI2LzJaZTF1Qm53L3FLUFFaZm9qV0hYN3RtWnU3Nm1TMU93VUl5dms0QmJzOTVtR25qdFNUZVlMUkU1d3pkODQwRkRzUExNR0o2all2ZTcydEROUmQzU2JBb3U2akI5ZEwzVDhXdEkzTHdhUXdSVUppS01scm81eldsSWJ4RjRFVCtZM3BnUlJ0VHN6YUtmZUxpeUtOOW5USWNLSXk0cmFNVXhRNnNGZFNjRk9LenlweW1FdEI4TDNQRFpsMzgvQzdUM2F4a3JZVzBxKzdTVkVZenlIMFFDdHNCNHN6aFowbm9DeFlNdG9QdFhXc2ZZeWliRWV4TkgvTkNWb0RYSkU0YllmVkdDK3VMbVRwQnhCejZYaE8rU284djlaeS9VRTFnN3Q4cmJjL3pROFY1WlIyR3dKRUlHMFQxMXlFUlRkZVFEWnJnWkxkeUdHaW0vS2RYQ3ppdlAxZDZkQU5Mcnh3eGd4TW5SSmkxSWIxQlhmWFA5Mk1ud3paVmVPakF3Qk4zQytQQytrR0hkeDRqQlhxcVg3bkRnNTd3b3p2K1hBSEJkbk4vbks5alBNTlVMbGJlNk1vMy9Ra3hZdWVKV0J4akRPV0NLOXI1bk40alBMK1JRdStyM3lKcENSTUY4RVlqQW5NUmxIU3ZQR3kwSGFtNm5DRXMvZHVteUErb3ZzT0tBTkp6eGcySEVoenU2VEQxY2N3cVk5MFdhbmp5V2hQSmtTRGtRRkFqeFh2Qm14YVJrYWFqOUtLZDRXcGNTU3YrT3M4RTE0Vko3UmlvM3NnZGxjOVh1TFoxckd6Sk53UGFTRFFsZSt1K0pZUFc5eG5Pb2Q3RzlzSkFZY3l5dHc0dVJDNFVLVWo0TkN2dDJpek5HS0VqVXp6Q3NoSURxTjN6WVlaZXJNd3ZiNjBGNWFKQ1dsMVdCQ2QrUVovekFTdE80SFRqNlRkRWJyY0dhMmFrMzhIQ0d3OHNLbTJvZjZXM1d1ZCtXOWI2VThHTUlReitZT3Y1YUZZdEZQbU9MU2VvMk1HcHZZaU1pUjBsZS92dE5rdmlxLzZZNERFWHF4MDNnM0RpbWlrSU83NnJBd0VYWENGeTJ2RUJaTVE3Z0x6cGdUSmxvMy9JUkcrQlZScHhXRWhvSXJ6cTl0V2JtOUNNZVpaQkc3VjIvVXd6TzRCNXNFakxHaC9Rd3Y2R0kvV09vQS9QblBiWFhwRXZlakROYkx3UnVtdUJ5aGZ6WU1JQ0RISHdVN0EzejFSQW5FT0trTjBvcFFTa3FZVGVGOTFtMXpWWEdFTC8zYmdhU2I2QWp1L3ZpekhwV3c1QytUTWdNQzBXaERqREV1ZkY5RVVnYVNMd3VpdW9kYVlEZHdGMWNMNVNFSTh3WVBQNXJxMHR3NDN0bmtkelNwTnlCNWJIWElPODNIc2prYXp4UDc5NWpqbHU0MjF4TkpJNUlXUTJIcnBhN09URXlheDdqcDNySVRoRHQ2YTRBNCtiTWp2NXFGeGZRSFJRYzF6NzM5WjdyblRnT2tSVVlJQ3JYdlNtWG8rQmsyQU54UnUvVENOaVU0dzBrQm9qSS9MYTQ1SnRwQzBxcTBoc3JpRmkvNmtUZ2ZBVVFlK05pbXlPeW1PWWIwTnhxdzhYQ3J3aTU2dG52OFZBSDVxUEw1RlRSVlB6eldnWk9hYUdmNDhJT0kxR0R5OGJ6dUFnazBNaGhyL0hSTW9HemNzZ3czU2dsNUpuYzBLV2V2NDBFWUF2a2g4RHlRb3hlZ3EvUFVYdktMZVlmN0dPN2FUMStRRGVtREQ1ZSsybFMzdVVwT0kwTisyaXVjaHlIdFRUL2NBWEcxRWlxQkRwc2lpb1RmQThkRkpHK2xkRitFUUkwQnVXMVB5Um42STlBUHhsRU4wcmFTdWRxaUQzWXphakNLOEp2UGNpTkFyQmt2VVFWS0wvbTRRbXpzeGlza0R6bjZxT1NrTjg1NjB6UFh4OFh5NzNHMS90WFplRjIyamhrTm00U0ZQT0QxU3p0ZFFBelVqK3Q3Wlo2cFMvRUtJNURUSm95UFN5KzdQdHNwWnNxZFRmb0d4eGFucXNRY3JkYnlnSE1OcCtpenV5Tlc3L2ptMUdVOHZ1VVNxcWlxVVhOazJyQ1IzaFArRmw5UGw5a2RNV2pEZ2pvK3VUYnFEbCtiS2NYdVh2OHZ6MkdnUFhRVFZiVUFnNDlka2FqQ3YzUVJ2d3EyNW9zZ04rby9ETUN5M0R5dnYxVEo2c0FheGVrTGVhd1RPMk52SnFmMFBpNHg1dFlMZWtRck92eTVYTy9tcUVyQWIzVmtlMlVkRUtJZENpMjdZRXVITHcyMjlUR3VaRmdQWVQvTkxMR2ZVUmJZeG43TWVRVXQ1eFplVjBYOUtIVm8zaFB2dHBOeEorelZWUU5FdG5EREVGNk0rUUtGTElHS1dMUFJHZmh6ZEFhTlduQ0JIcmtqTlV6djlETzJwUUhXdFRoTERmWVIwU0Nid2l2STZUUHRlOGdUWFlseUxWL25CcG5wWi8yZHhiem80VFVqNUZtZngrQUtmRnJjZDMvNUVxYjJudmlwVHdlVW1EVFBTYjZwQ0VvZHNHaVE3cW1mQStDOFJjNEpGT09veUNISXJycEE4QXpDWFFMSGJ1Qm9wdTNud1dUTFJhRGwzREdoNG50ZHJTcmtpMnRWZEtlNmR3UkQwN2RWUUkxdnNEZytXQWdXY2RQQVg0bFllNXA3L21wRjlzaldnc0VQLzBHeE1rYzc0SVpOcXV3ci9tUmV3dllQWVE0K3NOVXVxRGxORmU2T2paM3BGQ2RNdFRSamdmcE8wMExnVm5RWHI4SWZFbHQzL0dXdVRwMW8wMVVxMjQ2Zi9pQ01ienZmL3ZRdktSNEZKQWg2VVJpbngxMDJoeEhDYndtRVN4WkVhcWkySDJPZWJwdlI3WWxrSlRvbkJSZC9lOFFTNk9ORldiUnZTa080TlF1OGI0VEE0NzVwZmJHQlg1dHArOEptb2FJRnFHTUExdjFra1JzK042bzUweGxiUFhoRldPOEdGSUE5bStTazdWeVBJOThqODBOZ0xJenhQNEY1bVlOMHdlUHRJY3VzeTk5SmNMZzVCbkFNY2RaN05VaS9jYTRqbUdMM2JXb1YvcGIrcmJhRVlRa24zeE1Yb2JZTnB4ak9oc25GS3VSbng5cnJuczEwNTh0cVZhQWZkOEdZSVFNdXpLdzdhSnpld3crOVJxNGEwUzlhUE9hZWtYbzRzR2s4cU5qWWswSTI0T0xQdmRoazRqWTQ3SDRJZUl6WEFFSnlxWWRsZkY3SmxibnlxUVVlUSsvWWdUSEpMemlrc2dNV1ZjL0FPQWtTMHFiNlRlR2pSTVhZUGxMUGFHQ01NNldJeU12UEt5cXRKMFNTWXdtOHQ1RkZDUzNmZXNROFhKSmtIWkZkZkVIM1plTXdMQUdDWjNZVDBzWHRhbjFtSGtZWDBHN1gwdFlJVzdYdzQzcm0vay9uWDlBZThFelNlcHVaQlJzYm44VG1rVUNiZ28xWHNjYjJsRXgvaDVDamVrSTRXOG8xbExaNysyMmFsQm1WOCtHcjNVditramVkUWNWMG5KU1duNmNkS2pqRys0YnhjcGtGR0NzRzR1dE5FQ0hwWnVjMVhNWE02Q2JnN1pDN2RVLzFPU2UyelNRUWdTNTVQVzFqMnRUR3hLTXNZZGpHbENpSU1GNndleWszZ055cG5ZUUlQWTZ4V3IyRXVNRlcvcGhzajA0ak9VRElReEc1OWkvMHBVVTVyUk9JekxWNzFDeEh0V2RENnRvNldxVFUzMERKZzNtNTNscWZlS3BOaEdTRVNOb29SSTQ1UlkvRDdvbmM1VEFOR2hNeVRoZElRenVLeDQyMUUyeXhnWGlRU05LQjRsSXFHVlMyL2FPMDNjZ2NsOWEzSUJhT3dNazYxYzdIcStnMXRFWUI5Q3ErK1ZmTlJvOXplVm5FZjVPdnpjbGJPeVlDM1drbXRHS0o5UDVtVldzb3dWVTZ1SE9hSWl4Y1dtQkFnMU5GQms3U09KaUsxdENFK0JZMmlhV1AyOEJzWXhZSWpxc1hyR0hFdzRwV2J1YzFSQ2lHcnJzM3BySTBqOWhGeUxna0t6SWpHT0dlc1o5dCtpQzVQaGFORDlmdFAwY1ViM1BQT3ZXWkpZTTRXRlAvYko4OVFhajdWU1NKdFg3UEkwby9heklBTS9CQWNVdzlFYnNkcVFkUDRqSFBUY2FrVEF5WTEzazRKTlloVURFc3dhdVdwcm5LYlIwUjErVEpidXA4d2VyWG10M21nSHFpcFU5SjZubVg1bEVuRjlwSFJQTWd5RmcyaWU2TVpWK09uQ0FJVHRVRE54cXJoc0dtSEdRTlF6OE1JSUlYeGFXNWVjYVBkTGlFVWZVbktKUzdzZjlRR291Z1dTcS8wd2F0RXdkN28vai9PU1Q0U29aUWV3ZFlFc3IzcWZLVGxVOTdTSzNDcmIxN21zYVdRc2p3Ynd0a2lHWjVLSkp0Rk8rbmxoVS9jMUtSZ0VOUFgxZnR5M1VtNkZidnhBWXlsc2JUdXJ3eVRHb2I1a0p2NWw2OEx0blhIUmNtRTVJZGhkZThCYmxZMDB0R2Z2QmU2RmJNaWtuZzltS01lRjl6N2d6T1hkSzVMTmNiTkEvOXNrNXl3SzZIbW04MTRwbU5qTzlWbVBocmU1VDJiTFR5ZWZFYmRQNVhUbXBNek5MSk4yMXNvdmtaR3AydUVFNUpyTjJDVWNGWDE5eHdXaldic3oxWWdZRXdCK2tOYk0vdTlzNWcyNjQyMzFKeDhaQms2b0cwSmpzQVIrVVVnMC9kNzZJeU1kTkxxb0FIeXFwWklwMS9TRXdPelQ3Rko4ODdPMU9qNDFRcE0zVDZJTURad2NteE4rRk5JN0tqYXloaHJNL1NFaGFycm0wcllobFNrQWpnZk9sNU9kei9ab3ZXN0FyNitTdlE2bVV0T2pMWlo0S2d6eWRYZnFLRVZmTktjeEJGQm9uMEF5bTZGZ1hVeHE5VEhqSE1lTDVvU1VuOEpWMXNCSTVraEZQZE1YeU55cmpMZzNQM2N6TFBCWDhzcU1hb044akErOTlDTlI5amFRVkFXOXE2L2JlYmxtd1VrOTJjTy91UmhvZXliRmd5TmM5Y0dlenFBc2l6VHNJYWRWWnZ0cU03azBVNStLdkt0L1lpOWFwcFhhSnlTb3R4THI3WXBLOUVBcnU4YWl0U2NCZlVUbXU0WStlak9IemZTWHBvd1diTGdVbHdzNktuemV1NEpHVTd6TEQwaEtpQld2emNBTGVycmhKS2ZPOEF3bDN4UkhpK1BsMXgrU1FLakJrTzBqRnpSY20wd0lrRWpGQWlsOGs2WmlQNWp2NkoyMzJTYzgvdXVjUVVhN0tKUjVQZ1Rwa3cvVW16NW5oSDVxYjZ0dVFaaklKS0pGRVRHcm8vZnRyRVNYWnRkMmdWZDdZN09HeVNDS211WVRzMG5IamxaSy9qUTJxVjZmcHV3Yk5rRTZPRWx0ZFRmNUxOV0tqT2crUDRPSGVpZjFIaGM3TDF6MUczSjN4TmRDZkQwY1Z2VGdZVjd4cFU1MnRpYjJOQitxUnVDU0Jyc085M01HNDdTKy9EWDRDQWdJRG5uc29BNVdKOE1zNGpZMlByVlRYQzQzR2luUStNbzZWSElxdTFmSlR6d0x1SEk2YkNNQ1ZVM2N3ZlJXK1FPa3F6U2VPTlZScFpCdEMveCtkeHpiZnQ2SEdubFA0eVdGS2l3dHNWN3EyeVBFRkY3MHU4WERXdU41bVAreWt5VkhkZk9FTzE1TGdPVS9Kd0hpOStpNnBjSVFrK1ltU2xIdFVvc0JHeTRkdGE4T1JaK1hUUTRYYzhyd1luZnBRaVhFczB1eG1jQ0VzZ0p2T3pnOXBZaU1XL2U1SW9sV3F2MzluTW5Fd09lUDFJUEtjRldEb1FiaXE2MUdLMDViRnN4VjRyQy8yNEcwZ0RlTnd4eXRDQ2dwbTFnSkhseXpLK3hmb0sweEQwQnhuZFRoSm51NHV2TkkzV2I3b3ZPam52UmdCTzNNZ203NHU3ZzlaOHJFWEJJSFJHSWxjU0lhWG1pRTUzY2g3cHBwUEZtTEJSNklDOHA1S2UvMGVGdUozNStGM1pYM29FMmRwWVhFNVU0U0JsenMrWElneGY3c0Y0UG9NTW1JT0cwZjVCcktMRjB2bEU0aEt2MDZUQnZpSTBoaEkxakxDNnV2TmZSNkdxcUZvZFJXcDdrQWtHd05lMUQvWUNNT01Vb1lkYXE4ZzA2U0dObEF1YUloT3RHNFR0bzNOZHExOGh0b3BYS0orSy9jNGN5MlR5WFcyZlBIK2huOE9rTis2OGI1MzlwL2diZk9CWkJYNkRFTWRtZDJ5WFBhQy9qWGZ3ZWdUbSt1N3ljaUVudVhoeWVjQTlNbTZMMWptYnFsSTZpem9QNEltKzN6S09CSTJlZGUyUWE4alBaL25Ic1ZSNFU5V2xwT3pWRUN3TzRkcncyZjJQekZVZkFDcjB3OEVsY1U2ME8vS2dTQk5yRmhxamFVVGtWREtrVXFOV3FPTUkyQTJWNC9MdU9waTZGdGVGL3hWNS9BUm02VDkxZEZGbTFYaFVpeWVNaG9WV01yRHhUbHdGZ1FJU3FWMXcwTzRTaUhyem11TVAxdWVTT0VZVTRuSk04MGdPZVd1QlV2VmFFRnF3MmViclpHNXhYM1pmTW5JN01KcENJSmtzZTJZOEJtTHlYbHE4bzRiSU9BNTd1MWUrV21nRzNHWURVTzFwTCtPcXBIekdIc2NESlVseUNyVG9XYlpJV3ZiTnpDbnRTcVRTLzJlMEFUd2sxZGFCN01DVGRGM2RYa21mZ3cwREhsT1VhN2ZvZ2FsZ29KVCtJb1B1VnFkaHpqUWdEY0cra3ladjQrQVA4SkkzQjRQbC9YazdzNmhZdlZBM2NBU2d5L0huejA1UndUWUgzaEk3MThSeUg1VFZuYnZlZ1VSa1hVcEZ6bDU4MFBtR0pyUWhoRnJudkNFRTYvVlZobTNvMFc5UkJvNHRUL2g1eVZaRUZ5NWtqS0U4V1RQbnhubW1wVmRjcDg3VEEzMktuY1pVVlA5WUl1WTBoVkdtdmJpRzg5cGp0R3NKQXdpNVgvWnpyekNpQ3NVbXRXeFdUSWVIbDFidVUyMUp4MDcyQ2dZeG91YVRrNkpHRDV2Q01obEhldDJtdEUyODFBYk1IWXFxM2UyRkpZVWdsVVl0TDFwb1R1VTJDaVhreHhSM0t6TkVyY3RVaG56MEtrSEhETlU0dEpZM1RrQ0Nud2xqZEhsVVlpSnVJeTB1ZExsQ3VVS2ZKZXo0aCtqbVpCNnJ0Ty9qbjh5a2JyazJ5eDQ3Zll5ZzFNdTh4UXBtd0t1ck4zUFh3LzJ3ajZJU2lZWVlqRTFHVm0xSysxbWREejFsMm5GZWxwSW1mTG5NRnVjRjJmVFZMRmNUSUFxemFsOU5yVFFoc3REd0x2OXhXQVJNQ0JCcllodDBNMmdQNyt3NVNuVVN1RXFXamxIaklnSzl2OVk1NXcycWoxVW9uNVk4OTh6ZDZXNS9MQ1Jrc0xUMWVOdTBGRmF0bTFxTWl6bDRZaVlxMFQwSWpXcC9LOHFIZUR2dVM2OXFWUXhHUUx6WW94aW85WXl2MW9RdlcxTTZoYUN1bVkxU2htdjk4bERzeU5VMGVJTHhKb2Rwd0o4K1QxSWplQ0pUVlJic0hybFpUcTFlb0VzWTd4S0Q0NTRTcXVRc3hsbTROYndqZHltcGgzMy9PS2ZvL0xmcFVJa0ZCSTg1QzN6bDREcVNoTkxucm45YmJyaHh3Y2xnRjZTQmpTZG1vZTc0eFp2VnpleXI1WHRjdDBlZXh6akJVM0l6Q0dJUkFocnBYV3JyTTQvTHZseTJkbGkyY1ZWdXFpNnFMRk1WUjAwSTNIcjVJOS9mdTNnYXZvVUd5cjRYK0dIMEg1cXdSUUhxT1VEaXk1VnBuWDlxcDk2MnlsaTVLL2lSbEtINVFBVnk1UUVCd2hUdHhva1BiQWZoZXZtb3VQNThNbDhhdk5CSGhwTG1xY2czV2pKV3RxN0tEbHYydUVOc0pSRlljZnhIY3lBM2dyRlAwbVNyMitWVGVrV0VwblBPMTg4b1cvdTR5YzV4WHJOUk5RYnI5b1FxNTJTV2Q3bWRNaE1aM29uMTNzRXFWaW01U3FweitvNWdGcmUzN2YxazlYMTZhZjJMZnZySVRmZnN6ZjMrb21ESWtldlpQd0c5c2VFbUtYZnhGRXE5RkFSU2k0MjZLYmVzb3c5a0MxTDhUWTdSNWJNNFRUWFYrZHhIWEtXVlgzNGNBV2twQmlmVU96akFScmtEbmlVOGpXQ2VKd2VxV2VleC9mSU1ua2pORjNmSTBqTUc2b0JsdGcrK3dJbmNHWUhJalk2cS9HdWJqZzZEWjRCb2lYck1Bald4N0VsYm82bW0xSnVvL1BxMmRHSjRSUFhoUXRIdUFHdDY0c3lkeURkQ3c4bVNBS0Zpb3Vmdk8zZHF0ekUwWWJFRGtKK1VPRjYxZEttaFphZmgwbXhSekdWdnJsU2RuUnBMb1Y1TTluUVBKekg0djZqZ1RMcnJqaGJSVUpMZTBzQlgrb2FwY1RlYXl1ZVA0YnZHZTNTZHdvY3dTREExSWp2cEl5bUdaa2Urb3NMdmhqLy9JZjlKS2ZxSmxJRXNJRnE4MmlmRjE3ZjR4bk5MNjlKanpxcU4yaFZYeXlxVFRCeG95a2R5eGdmSDJsbkU2RXd6bkJiVHNZcWw2dmJrSEJuN0tCWU9IWWdzZVBydkozZHovMWVKd2JweVJ3bEdZcS84RFJKdEYvcTBlOHdCcVJOVkxvRzVWSi9ZMXE5bjB0anRwU053N0hqZkp3OCtNakdxd3N4OXlidlY3b1FRV0NZNk45Q0RpMjVNOHZENUZucjJpUjZGNTNMMi8wTVc5WWtZOUIxbENxaU1Dd2diSW8xZTZRVW5UZXlpRjlFTG1JZWRCUDdoK28xRFRxNjVNYXJqQVBkeTJKYnBKNjNTc2ozT3gzcjYvVmVBMk1nNnBmRDdXcG1VUzQzenl0YXc5cEJ1Z3dTZ3hyK203QXVkVElwZ2N1d2FLUFZKN1NEMFlpbHBpK0NZS0oxdVBKemZNN1ZRcXFYbmpKU2VNTmRQVVB6NWdCcC9pT0M0Kzl6WklaNmhMZUNWN1ZGS0Fjc0hrWk82NFh4Tm5LOFRPVTFJZStYRGtNK3JtVHNRcE9wYWMzY0ljL3pYSWYyRjRsQkZaTlB4dWUwMnQrSDMyZGIrVXkxblFJb00yU2E1TU1hM3pXdGNqZmRVakZHR3BoQ2U4ekxTS2RlU1l5Z1RUMkxrdmsxRHE0Y3FLeFFZekpIOUtVbUJJSzduaDY4YXJrZWVoYzBRRytZUlF1REo5UGQ2eWl5NDVpRTQyaFZvdjE2eU5rWThzUmQ0MHgxU1RvblhFV0MrRk9oR1NqVTlGRVNablRLeVdmU3doNEpTb3VodWVPMEV2enBRZFdFZGRTOUcwVFlyb09rUzMzTG53NHl3UG40Z200Y0RSTnJ3UmU0RWJRYTFwNUo3MFJNSnljWEY0V2Fwb0NCa3hESVdQcXJCbU9zRHZyUFN0QVdSREw4RjhuSXNUWjlPbUhwSmdPd1ZHTzRPclgyQ3Nla292dEpUSjN6RjlXSlV4dkVLZVlRQmhqZVdwdllrY3AxVUJVNVBEWTRrN3prYUdDT3VlT3VibDhucm03VGRkejF4ckZqRno5MmVqb0VDSStZMkpXSWxrdkNrVUROQ1BPVUJQODdWNCtrbzdIWi9ZTnFZZ1NoNWYwUEpkZEk4eGJrMDliSFFJbU5uR0oyZDJGSWQ1bTdaeno3dXJYSFpWbHdMSWMveFF2bHhQOFIzRDNWZnk1RGdUZXFSYXFrcnBvUlU0dkdldFNPWlhhaXl1N2RmYjMyVWJrcGJHVHRoMFA0S3ZXeVc2Znp2OG5ocEZUQ2NNaktlbUxrUmllMGxqNDMzYmxmbDhOK0RxY2lBNEVIT25hTS90Y0RQNEVSVlZ1WWhjOHlMQmV2cDdCR0tuU01pV0xZc0RacU8rUEMzT1ZFNndnSjFXWDBudW1OOERXOWwvQ3lPSEdhL3F0UlFVNTJYdW9ucWVlL1RSM2hkdXczSUNMVmRQdEtRNmlZV0dhUVNwSHY3N2podFNMa25QaGFxU2F0ank2MkJtUDhTclpQY2wxaVh5dmNONUtFd1pid1g4clhZeGtJY0ZlSDVVK0JHaVRzR3g1OWhOY0R0a3JaREg0eEo4Qk5RR210MXZZR05rbmY3ZU5MS0xWWXBlaWExMSszUXpQVzJxSjZOQ3Y0d1FCdEExWFdQa1RwQVVWbjhoK3dwUExlcnh2OWVmN08rNFBveW9JRk9BN1RCUkNRTzViYU9TdXN2eTlOaVlVOVA1ajhLZzNWLytnUlpzT2pxMVRzbUYwdUxNSjhKai9EdUFiN2tBVmxZeUZXTit1cjVicE5RVG5ZV1dLL1dpMWNSdFRDU0ZRNm9vOElDYnFDYmZhSDZVTkU3WlFYYzFrUUJTVTRycmNUTHRFc0NIcUZRT0NEME5LbC9GdXE4OXF0SDBWMTJvM2ZJT0RYUWppR2Vrck9VdXpkVURra0ZVRkwxUCszeVc1N0tzQ2FMaVFQQW5JdnVENi9CVm40elVyRFdSSDJJbEM3YXdSUlJBQ2M1Y21rL3lienRkZm84aWVpTXdYWUhHZC9ZSlpBZEJ4dWlJNnhlTWxjTzhhYWJEb2FwWFFIc3Rsc3VlY1FyV1o3c3IvT2JRMEJ3OG5keTlya0d1VlIxWXlxR1J0MGk0Q2RZZ2xMdzNwalhEWDZLUXpKUCtwcUJwemhNK09MdTBaOEMvR0xpQzZkSWJ1MDZnQlhIcFlueFVZbnFMd2liR25rVkJ1L2puVWFNckNtd0c1RmlDM2t0UHJOTXRSOVZmWXpkV01IYktoMDhQUjRYYUhCRG9Qd0N0eUsxQ1cxQkR3YVZjTlpYTmo5Y0VhTGhXbVZ6WVFmZ245TVNSWGRNVHY1YUErcEQwUGF4cGkzQkZuKzAwQUpOZ2hKYXI5QUJwd3J1MC9HeG9JWjRMVW1oWWJzZUNWOUdwL1FIKzV5c25NTHNFeEFWYjM4aUF0T2NjcU5td09yOTFCblFET3NJdFZqSmhyYkZLSjcrRm56Q2h1NGlKOEtNeks0TlliRGJMaVBpMG8rc2dpdzlMNzNYM0RCSVN3MGNqaXRuRWNCdDlEdjZZcFVmNkRvQThtangxU05MTDN6d2pBbitJTVhQWFFqRTkrcVFLNkpyUEJpTk1qNnZXYUdjakNGRzJMV09XdFFrZDR2dkhoNUhpZVVqVGtxZ2FlS1J5eDhURzNtd3pSMnN2ZytMK0pVaUFXRVJyTWFlOGJ3dmtkYzd3RFdBS3VZNFBRRkNaVmhSOTNGOUtjQzc2RkVZaWZyN1F6YW4rMk0vT1Q1dEVpLzFPZE82cUxKVGhMNmh2YWt0eGNJTk16OTYwdFdjZGdxNGZRK3hmQmdxOHJDRjFBY0ZZSDZCbFowWjlpK0J0K3ROQktFWWhnb1ZQV1ZuajFLaWJCZHdmZkkydjBuRGRmaFg3dW45SXFyUG5ueDE0MzZneWQ3UHE2QU5VWHoxL0NybFdrNmdOeHB4ckZZMzJPT25VSk5UMDJOSWRFVmpHbmNtbFlvYzE2bE9oczZKdkVvT3RlQVNYaVNmQkgvUWxMZExITUF4eWdNcHp6SndPKzkvS1hHSXp3TGdGSThTdlhBZXF5Rk5kZ2VxWmhnZmFiL3cxbDVwRERMY1E5dkFlUEZOeG9YRDNNU2ZWUy9IWURQa2JFV1VNTmsxTjZWOXVnc3kya3MwNjRxcS8zaFAxSzVnYkZyR25rM25RT3R4Qnc3MWtsTWhJcmNXdXdHbWwyVElUdWJpNDBFVERWNDBiRDZsVWpYTjJLU0k3Y2ZNS0hNWEtYWUtWT2dJZU1SYVRHTHg5RHM4cXQ0dVhucVNwYy9RS204cUY1VjF1TDFNNFBBWjZvVW42TVdKTUpZUEhPaUdieWtJbnptY2dLUkUrSWp0OWJ3cHpmQnh6MkdGVzF6RW4zM3NFT3BQV1RCNHdadm9kT0pwYStmekxoR01aYUZJNTNZR2hweGpTajZIMDZ2cExCbHU3U2ErSVp5U2NuYU1RWHF4bENrdUxYODdIbldnd3RkTDF4R3d3RG9BRE9NRUFPZU5oc0VlTzFFaCttcUVMVVNDbUdMWkFOUjJwNCswdTM4bUszaTNwTmVLVzhlMUdqbUhDMmpOODU1cElXQ2FIcGo0N1JBWjV0SUgzZ3NrUTJ2VmlCeTdYampMRmRKU1N1VEFmVG51aXJ2RnJrNWpWVXA5RUl4RjZrNXo0TWdwWEZYY0NxY0Rubm9IdHpnckRBS0pTeGoyMVppSFVxRHBWTmV5eFAwNFUwRUV5VFV1Ym5IR3hGejVsUndCL0JzeVpDMTN0eSs4MW9HYlBtNlc4c0RUVG91azBUUG9yTWVqYTZDaUVLNUlCaDllUEpvbzVLY2tua2p3ZUI1dStOa3pja1A2cHczWXI4eC9xc0QzQTNicXYxa05qSkdGeVJOL0JwWmNtK0VOclZyZEIrb21hYjdKZndmOXpBUFhWRTZ0UnIrSUhrcmRCUXVienlab3dzVTR3ZGFlTnpDb05BYzBvQ092bEdUOEN3UzNoaU9rNkJNekVMVUk0bFNIanE5VEhQSDB6WERHdmdJdGlrdXo5WHQyR3FxVWtoelNRQ1JOaitGREllbVlOYnZDcklJSW5KYWVoQktSWXcrdFQ4WiswejhJNjhCNHdXMnNvb0VSVTNYWlVndFJBa0pUS2tHb2NKUytuOENYVFVFNng4WFdmVGZLS1R1NEFwTHRtM2N6cDNZdlVZRGc4VjAxWHhiUTRxNzZudFRiR2VoSEIzcnZEdzYxcXVzVVV2T1dIbmZ3Wkl3aUtaQkpxb05jdXdSY29LTG5rTmxGcXhCYkJtdGZtbVpVcjdvZW8vM2RuZDZNd1hIUWswYkdhN0FjUEJrR1lnbkhQMlVaWkd6QVh5eE1uMS9FeTMzbjEyTGlXbVg0SXRWMU0yU1Y0QlRERkpieCs1eG5mN0VvdFpoWW80U1hTNFJHN00wemFsbzh0QzFMMTVEenFheCtxOGtoQWQwQk1ldnZhUWIxQStTWXE3ZXREZ0R6bXgyekdOVHJGMzVkVy9kNVFsTGZnV3kwQmZwMnppdVp5OVJ4dnRBamhMSkFKUEZOWXQ2ZVBZRmVvbEpiUW1pdWpCZmNRUDdLSHNZWHFFdVBRU00vU2I0UEJBRUh4Z0xlaXE1SE50T3RFNCs4dFdaSFJ5aFFtbEFrb2ErQkxKbW9FSFZRSUc4TGF2ZC92NVEvQWViVktrZFo5WnpGb21tbXoxMVNaY3VVc2FPakxDVEhwTWp4NytRazVMZitkeUVkN2tNOGprclJ0SjZkdDBvL3ZrQ2hCNm9EclZTeUNWdk9vaDZJeDRLVEphbUM4K3BuaUtSdzZab0prWWNhZlFmdndlaTA5UHJ3YWlBSGRLeUQ0czdGY1RTdjh2MWFlQjRMc3VJRXo4RnpBaEZLRC9FbzZBOTZSTFowRHgwbmF5ME5Lam5pSVVtUEpGaFhFVE1yaGtPaFVDZGFsMWkzRnM2dDhQcy9lcVhNN3Z1V01zYlowM2s2Ny9tVzhZR0czTmZ3ekxLMHB5UVR3SUdiV1VwU2FYQWh2UDdEa1JueE5JVDVTSUhSNCtvOVVsNkxPV2tiUDJXVlJGcDZ2L0pvZmttU0hiN2F2ZjJJSWNzMTIvQjl4Ym0rd3FOUFlubEorWURJT2JVbXo3NjluaWtYMVorSThSSVdiYXRoMnhVTGg3aHp5YmJnNzRJTDQvbGdNVmxQVUdCcW1UMmExS2JpVjM3dk1BN1R6SXNYZ2NDVVJaSThlazhHbXpCYTgyRDVTVmRZeEI5dDNmT0I5bld2MGo0bGE4YjhORXQxdFhCM3Z1R2hQaVgzWGFsU3BpcEh6YUs5ZUtEUFFxc0o5Q3FoMmhtS1k3QmprVTVScG94cHpQZHNCbU5ab243bVZPWkJhN2srVzRwaUhQUjUyTFJKME0rOTdoMGkza2xnZnVjZWRvOXNicUFabzB4Qmh6bFZlR1QrenlCRkhLTk5PZXJFVzlEYUczbmdLdFNvdTJGKzJZa0xNNWloZ2tyUTJPc3BZa0tZNUdnb1BVZGtwdFkxMGVhMjZyVlR0Z1pZYUJFYVRDZDZneDNQclFGOTd3TG5tWFRCWGxGL2pTVWlwWkt2NU9CWTdNLzZsUXJyVURKTWh5QmtlcytYend4bGJLbDIrVktpZDZLZUo4Rm8yUlFlUVlUbkRkc0JWRVY1RmdKRjlrZWtaS1k2djZ0bjg4UTNiektjOHp2MUlwOXpzSnZMN2FPdXViNER2dU1uSXpNM2NjNFlhV0MrNzlPdUdTdS9NNzRYTXowM1laOTdiT3BsYWZXQ1V6cXBEWXlxV0s1ei8zYW5NcHhlNWc0NWlCbWhYWFkvUkJKV3ExaHpwL2dGdDYxSW9neUhLeUhWWlJqekZhZjgxQ09wZlp3bmtvdktFRE91MzlRSGhXOVoveVF5SHlTY1JRYUpkbHZZcUFsNXRUdXRYSGZZK1QwcnlCWUZBdU9rMGNobFhEVHBFZ0ZjbDlCUFdaUFBleGNxdHlKSW9ybHhhT0Y5a1FQanJDU08xODU2eVJ5Y0NETzhSTGl2a0dVQjRZYVBCZ2Q4R1ZyL0RoUXZxcjZtTDBYODNKODZldjdDUHkzS2hnR2JjQlV3VDczald3Wk1qalE0MmZpcWM3QXFON0NETDRzMU4zUHhzRDNyUklQbVdvUFdqODFtQlJHYmtlekRrNS9aUzk2bGpvbm9MN1E3WFF5OHY5d1VsSWkyaGhNNW5jVElJN1NMQTRmZ0IrMlNmWDlsdkI2cXdvY0JxMGx2OTZITFJhWERIN1IxYzYvOW1RdU84K0FIYU9rWk9QcHRtbC8zZGMyOThTSHNhSVBFd1dYRTVOU202K29TajdwYzF1eVRXRVhsZGlqYVZsSTA2dys0cWVnbmJybE9iOFZyMm5Cdkl1RXU0djYwbEZ3bUd2YzQ1WHlycHNuV2xGL1JrcWdaK05rMGZGZE42RHp3Qk1uM1h1S294ejROWFJhamwxbHhSNHpuVkd3MU1WdkxGa01XU0FIL2FWWFN5dmZ4VEw2YjJTR0pvc2JrUHRsdzhOVWpzdXJVNEFraXErWGNxaHJoOXY0STR4emh6RG1KWkVxN1NhWUJ5NmlIeFNBYmZXZ2FkRmtXS3ZIWG5ZaGxzMmFxTEZMVkRNNWRyTWZsM093MW5NYjFGN2VqTmdTY2pxdFNTZVExSlk3cDJoMlR3YXFBNmEvMEVIckIvUGxkZ1ZZZ2ZIeTFpNldYMUVSV080RmpFOVFLcUpVeG8ydHFXekZoT01MNnh2OVpFOVFFaUU0dURWUVdrWi9KcVVnRWsva0YwV3hLTExVUkFWOFcxekJXSTd2VlYvdThzd0J0UU8rZENTejhObytQVXNERklhTFlrSEhQd3A4TlZxd25DQTFPcWxaYTR5Y1ZwbkF1MXNUV2lMNWxNNnZiM3VkQmVqaHQ3SGkwZ0I2UGhqdDJyb2huYUdYcWRpQndmK2dCMW5PeU1rRStSbWZhYzY4T2lGemdyeG5DZ09SUVpCRkVIdFN6d0VVWW5lMDJyZ2wweCt3VndaZUcvRGE0WC9SZWJBSzBCU21jOG1ZWUxIN2lUYzAxWjh2ZjQvRFc5MUs4c3EzTkNlNG9SSHVuUHZJcUwwSGE5NllrNVkrS3VhT1hMek5GLzNJcXFsTWFxSG9MOWh1Y2R6Q2JDZC9lUnJFZDhycGZ6S0N3cml4dytKd3FndzJKNURoK1MvNVBzU0RHekl1WkZBbURSbW00S2ZjVXVxQTlpUVF0M2dxZ2pwTFd3OGRxS0xOTjZoR244cmN6N2NHTndrd2U3UmdYUmtKQWhZWHI4ZVlkSnJsSVpLWExFWTVXMGMzc0E2ekpxWENrbW5GcTAyVk1yRVkzZVhkcFdHLzJVQndtVUVYNlh5SjVtWnVOM0lmZ0o1eEZRN2FneXBmYkRDNHhrUlpqK1ROS3N3Z29LSURsN1l1NFE2VWc5aGVBS1NiclZLMzU4QXlKTnloZDlGN2M3YTBKL1RzRnNobXdoai9hekkrV3FXM1FmeG5Gd3BQWjg1clVPM1JpeXBkNjl4RDdHbHhrUVVzdWRLZ3MrQkExVmtxYlY4WW5NbkJnUkRtT2w3eWN4U1dSTWdvT28wYmV3RG1pM1ZMaS8xZG14TkxURnB1cTF2ZHNvRys5aHhSUTdvQVk4bDlkaktYN2VsRjZHdGRZSUdya2tvUGlaRkpPTFlRb29EaEk3dk1PTllyT2tIOWZqd0VXY1RKaWg4QjJqUVk5YXFIRm4vNWx5aVpPektNaFZaWFFtZ1U2VFV2bzVWa1Zac2NzMTlLcmEwR1JhalVkVlgxOCtOZjlpVVZqNXpxUmFENjhKZW5ESndMb1l3MHVtRXBRdTd1NWppV2x2enFZZ0F6WWx3elhXZXZONUIxZEJEUDZkY0NGeWRlUGNvNjdxYmhqTU9NdDdrSWdlZlIxMVROZHFNaFJyT3dXYkZISGZEVVNXNmE2KytZamdMWjlGWGVBMzZTWFNPaGhoNjcycGg0VWFNQzZXZlpJcHRHTkxzR1F6Z0dDVXp5N3JZSXU1T2JqcjMrcUhQTHFxTGsxb0hHZFJZbVdMdjF2RmNpTXY5Tnc0VjdIZHJwaitRK1QvaEpvd1VLTXFHK2U3c3JSOXRRMXZ1QThPUm9GZ3BrV0I4N0J0NHlxVmh5NU9GQ2gyNXlGRFVxZVVnY01XaE1BYXZVcWFuRWFNdW83VjNwUnY5L0pPNjBMS3U3M05LUllEZ3E5Qm1iTkh1dEZqRUtiNDVBdmV2Z1FTazNHUXpIdUVWSW1rZEt3Uk0yMFhuc1dKQVgrdzNtakN6RVk5eHl1NTlzVHNWc00zMTZoVU40ZE5FNVNUWjF1d21neFVWazI5TkFQZzc5Z1FrWXVSSGt1M3hJWGFBVTZSVDROYnFIYy9rQ3BGTjhYQk9YazAzdkc3S2plZ2ozYnNTb2RZZTVMbHZPem42d2phSFBYdmNaNFNxaW5rcGN6dHV0a1lHSnlESmpKZVZDYUcrZzhRZWkrb0MzTWt6cm5VU1R2RTBzcGtlQVlnbnI4UkJLdDIvaDh5a2dQODFiOHY2Nko3elFPRzFIUHFkVHJjaHJTNEtlakhjYVVFMzBFQWt5eTVlSkMvMGp6N0Vkc1pseHJNSWhDNURDSE95MmRrdHRGakNIaEJ6cytqNmhDRFlhMnNWVjBUMFhFUEw3K1JWRjJDOVFEalFLZElBV1J2bjRhcjNYQUNuU1JZYVkzL0Urd3duTHNKWlo4ZENWaTBUOFVZdEpvTTBDK0pvVld0TmljdVNJWEZOeWxoREVYY05oSC9MOFJBOWN4TXBRa2lzbHIwT3ZEWVMrQmlYMWRXM21TcjVHNjhTN25aa05MR1Y5RElWNHhYZ0lkMFFybUxRLzJxeWhtVXFlQkZOek9TK0VWR0lOeVFzU3lYVmUvSWd3L016NFdvTkdxS0IrQ3FyOTA0UWRROU0yVHZDVVBmaFRQTmF0bHczVkFGWnBjcU0xaVJkTDJRMXkvSlRDMTJOUlpkVE9ncWsvTG9aUUljaldZT1RzQTltdG1udGlqQ3dld3NTUFJzVWJuUzVYdUJpT1FSeGZaQWdXY0ZnQ0VLWit0Y2dnK1B4NXpkMlFra3ZxWnVobmZjRHVHSWFqdEN3RlVscHY1cDJjUmtKQXRMUGtTR09VWnl4OG1BU2I5YnREdDExMFF0WStFMXJNZzFMeVpya2g1YWdzMjNFVWVHU0ZSd1huK3dpTHFxcTU3aHk3NUtsMVhQS0hMNWprU0s1S2JBbTIvSWloSnd0dW5lSVZ5TkxDRE1MQzArM2tmZi9LSlVNcTV1eFFjdXIzbC91eWJuOGwveVc5YXB0OHk4WjJRcTBNVlBPMW40NW5BTk4wL0RjUDBUQm5UdFhjVEJxQlUwTGIwOWQ1WngzR3A4MmdmbW5tWHpwRVpQRWdNZDJTcEY2WFlsNXp2S0pGNU5qVi9XbTBjY1JCellaMWtDdjRVSjZpeW93dDA5UG13RnhKcG45QS82aWdiaTJzcDNYQ2dCajJ2aTVEeU51YnhIMk1Yb0VkU2JQN2xKSmxFNlBUd3F2VnBrT3d3c1c3a1VnVUtYVUx4NjJISFE3N0RxOXJmOFlzN0FUSnNVcWZZYXFRam9xaU5BdlhCSnJ1ekx6S0RTbU9wanV3aDVDQjZOWU1FenJiUkFWZTl0cksvSXdlOTJ6MmgzQXhsSFJRWVZ2RTRJT2cvbVBDaEMzNDVnTDVsb2JmaVpiVmxraFozcDdVMnZJaFpKMm9NRGJxbzBzT1U2cjI4bjNkdFZ3ZTlUZEFrZ1VISWNuNEFZejEwdXZZZGh4NGZZVS90UmpmNjc3NzVDZ0t2dDdwVnE5aGl0cXFKYmc4NEUzdWJBemd2OTVXZHUydUd3eEJRT3RpLzdaVTVqajlZNHlldnVWWitKWWRGUWYzZHREdlNSam5kYjduSUt4NlU2K1FacGZFU1QyUWhOVXhPakIrekYvSENLeS93dVFLNTgvdHRsbjVGNmVsSGRGU3p1clNWL2VqWUxZNWFjenJZNkc0cXVnT3dTOWlTVHFab0M3WFhVUTFtWWQrT2d0bmdaTmtGQUsxNUhYR1oyckJNNTBHdy8ySkN4dUt6cTdNK0FCNFdaM0plQy9vMy9SWlNsUzZOQU9VektQVmhkQmhJMjgwS09Xb0VpNU83dUZWb04vSEJhVk02dlNWQTgyTDJPWmpNOTdTZC9RVllIUmFMRkVkUnZkU005dEV2MS8rRWtMRnA5UjRKU1Uvb1d1SVF3YUFlRytGelMyd0N3dU9vSVZKamFhUU1aUGtuWmFGVDBoYWVVSWgxS3B1WXZ5YjVUaE92YWpSWG5pS2dRS2cxWXRHcE4vQWVRSGo5UTc3NXdFd2NDR0ZrUkFMT1Nta2hnMjBtV0JLZTZjZUJHRFh0TmlaakE5NmZ3WVkxQ3k5WEJGOXRoMHdoQldzaGNiYUZaY0xsdmlGZjA4Mkx1TVVud0hxZHdJUGtBS2NkWVdYdEpzMjFmQWFKOTBjaWgvQ3JwaXpUdkMxQlZJWkdKbzNDWjY4UEpTSWpIL1FrWW4vUklIYzhkL3NTMVNvbzVKVCtkb3ZqdXV1ZzFiSWpKTzh0N1lidUVBanowVFl1V1FZelRPV2VhZmZJSHYxc1JySGNBSENWYkQ1bjl5a0dGTHEyZnFCQ3RIckl0cHBmaGUzNFVrLy9BRFZ0Y0ZTSU1jMlh4amQzUnVCTzdTc0xTYnpZeXFwOEFNTzc5RFZZWnlEOHZhQ0tOdEYwcWZYdGhyNWp4NFZ1aEt1VGI0YlhKNUR3K3BCajBmV2l6ejlvUlhZYnp5bjc2VElaaEtBSmFtOGVsWE5qWnY5UU5hMXdydlM1cWZZQXZjQ3pEbEdMZFp0ODhrZXRiUnlWcmxpRWJoU1BvNGZDUkNmNUxONGQ2Y09vZGM2a3Q1L3JORElZV0Q4eE5FQnhOQ2wzbU9hZ3FKYU1TY3lrOXIyTTN1ZWdHRjJwU3htSWRtcEtYb0NZdE81NjdBc3ViTkEvYS80dklzQWJOSFIvRWxwTDUxMFJDbVp6N0RaV3ZhWnZTYUpreGdjRXcyb2tIcWV5NU9Xanh3RG0yd1cxNW80NGFpeTJEaUpUbjJETmpkdUx6Q3lHNHI0bXF0SXAwZ1E2L2lrYndMVnVMUHlzTzFUYjYxekRyNTlnQUovK2R0am9oMFhsUDNtQkNvZHAycGlJWTVpWUQzWEZLV3Q3T0YvS3VnYWVhdDAzYTltYlg3TitNZjRxZEV2Rlg3Tlg3UkpMcWp5SFltWHA5cll3Y1dkdUVLQyt2M3prS1pnWGFqVkFqZXVEenFMSTNFOHdSMmZIczByZ01ydkkxUWR3M0dvWjRlN0l4SUZxdWVGSDFSTWVuMStEYlpsZzgyR3puWnMwL21zZnVQYm9KSVRJZUhnbWduUkZOOStWdjFRRUdRdURhbEpab0xXWlFMVytlbTBvNXdWN0Z1N0g3a0ladktmVUxkeXVvUDh3RktEejE2QnZOWkEvZG9oa2xXNHBRRlFHRlhSTkJXWUZtb0NyVGNKS3lkUkYwYVVPSWRVelBuUS9HanlEbEZ3cGNvOTc5TEdYdWU3NTBENWxhaDl6OTU3K04rcVdlZjgzUGRhSGZ1aTFZTXg2OXN6N2J4bFdDVmc3VjU1SVovbUdrV0hkWmhsNU9MMmZBVHRLMGpaamZyQVNKTUlKb1ZBdTlVeWJQZWtmNXg4ZXdrMW93azVXVGJhbkR2V044Q1FnVnFFRjZXblZ2dURMaThEazIwdkhCeXFGQ0VZeHNpZHo2Uk9EKzBPdVFVaDJHbjNNbWoreGhuZTcydGpFU1FvNitzcGFhTitydTRQWkp6V09WbG5wNXRYSnM4dmpzVUdETzFaL1lUZzkvcTFLaDlaSkphUEM2REdEbE9rbEo3RjdGWUhDOWpUTFpMSGthMUtRTms5TmpxZlBablZOUG56cDlyYkM5TTFFNEFzTW9CYldEWGw0bS9aN095bmFkWW9HWTNibGVpNFpWWm56RWZVcThEMWY5TUpZRVRtV3AxWFp1YmZjTFV0L2Y0VUh6dDMrMFFOaVFSTnk1Vmw1bEVoQXpZVWJBSGkzMFZXOER2S3g3dlU1ejJmRTBKSU9UdjZlZXJHek1vK3Z6WnFaUjlXMG5jbytEMmJ2RWxoMVVSbmt3cjVMbFp3T0JqMUQ3RncvRlRwNFFyR0ErdHFMYmcwY0JVeHlPSS9tYWQ0ZkpqT0R4Ni8xV3hVR1JZQUtYcENBSFlDZTBvaEFWREIrQm11QlRoSEF6eFdqZ3JGS1pCb1l3Yk9udUkzY1BrMXZ1RHRYQlVZV3BjMmFtMmwyVEVvcTlva0lXekMyM1NZZzA4YkN5ZG5iZ0NWcWMrdTVPTU1NTjZWVGJiYkFRNnBIclpJMExCeVNpNmFrVmVCUUE0NFZpSXpFOFFwNzk2OUlDR1hUdUs4SmNPN2F2RGlCMmJtRGFJa2tvRWJUbk9vOEYwcUN5dlZ4bUN3UGxpR2Z1WHlqYjUrM0VXY0xJWDZiR1RodjRKZ0lMSHhOVmEzQWozTDVLY0FYcWpubHVVSDBhZlprbXJPbHlyN3NWTktINWxFUkNjVmFWSERRQXFyQVRuUjBmR1dRTDRsSk9scWJMc0lTY2hoK3liNEFlclVvT08zYnYxR213eHIxc01qTFdzVWtNNXdLTklZRE4yUVdBcDRlT05SZUhqMzhuL1VvZEF5V0hjR0JnQms5WkdJdkd0VmlRN0tHZ0Z1ZWFVWW5MT2JsMFZUbEt5NUM5OVRZNlM0VFI3U2NCdkpxYmhRdW1EQXQwRGRZRUJKY1RpUnpGTXlLQ1hEeHgwTEgyRnFpRE1uSk9VT3NmeDZqWG9iUWhSZFZPLzR5aWx1MWx2c1ducEUvdnpNWXRmcS90RVFlR1Rsb2w0b1puVnJQQ2VROVdiUXVoOHZTeDB6L1FJdktJakVuMElNYmhWcDlldDFWd2h0amNmZ0NxOGs2RzNmY2JVMzhmalpFS09hNlRUam82dXNpc3RCUktJRHkxODg4Um1ld3VMNTJWZUQxSWFjRWIzbnJmSGloYjJJYlpITHNjamZ4Zjl4UVg1LzlZY3llRFA3Q0dQTWlCemViN2FwV3hYUnJsbWNNQjdmcWUxY3lUTTRaSmJYeXlmRVNkcm5zUjM1cXM0aGtoZGJUZk9KM2s1bm93cDF3VFEyZUxobDFWNUdGK1BUVHN4K0ZJUWo2NlJ4UVV3TXJ0VzcvY1VNcEwxVm5zUDJ5SXhiWkR1ejAyc1VNQjRBYlBkZHR4NnlLL3pYR1ZPeE5iVDZsS3BFaHFacSt3Y2hvaU1ZbDBGZDFFSUZhVm0zTmdXUURQRVh5clA0ZWQ1dzRqMy82OUtGYjEvQTh1YnhHci8wVzdEZzRjMjN5MkozSXIrOVVmeithRU5SUit3NGkwTnNzMy9rZGtHOUFBZkJxMW1GcnBBUjlsL1pQQmk3VWhxYlBkUEJNODE1WmYvaDNZUWlrdE81US8yRWw1Q3ViSkorMjZhSzltblhFMEJydlNHcEtwVW1pNWhEN0R5YXRwbnphZ09uc0orbXBSMUN4L29SZnpyNTJvbUFZN05MT1U5ZGlVTTN2T2FUb1lQVWp1UjJxb0Ezd1c4ZkRSVjVndTdtNUtrd2phUEJ3OUJvejY4TlpwZ213TzkyQk5GcGR0em82YkZJSlR0cWt2SkczblBHV2NEMklMQ2dCeDllYmkyemJGcUhJR3RWK1RqUEwydDZpLzNBSWJ4Y2Q3b2g1aW1vNjA5eVBRMTczK2g5dzJ3Q3poYll3R3ZqVDJwQTBSVzRrQXk1TmVHeTFZNllnNHgrMjdndU9oNXMzM2poMHBwcHBtYVowRXhvYSsyNWM5S3JZc29oaTYzSHdmVFhaNHVaMG1BazRqOHhJQ1RJeVcyR09QMXNrVzlWSU0wdkZoK3pmSVV3QmtONVdOQjh3dlozczJOZHFpb2VZbFlNc05keXYyaHQ4ZVZUZHhJZWFzYTM4ejlpOFhHZW1vTjloSXR1WTU0WU5BQW51R3B3T3VyLzBHeXBlUm9VcDlKVHNJNXpEaTQvaHZYenlkaUpRYjRxMlRmWW5ZWUI0YWFrZFVqZ1EwQjhtVFN6eVh5UEo5UEl6MENSOFBjZjF3V3ZmeEMxM2NNQU5sU0lUU0s3TzFOMHNHbUNqUWJseWRpVVVqZmZuNzlRZDBnQXdJZ0dQUkFLaFJURG5zOXQ4ZVVBa2hPWXpLQXhaSkYxSTF6TXFFRUJyZEhKZEhlUm5uQWVCODRha2RsTTU3K0NFU3ZDczB0aVlKL0FSdmZGdUJwc3UyZEJyTTBabXhvaS9RU1BjbThxVy9YT3RsVFYyUjFxV3MwVkZROU5aOEdtMy9Yc2ViK2YyZkF5ZTZNeDFVTzIxTEdRWFhLMWYxZFpFUTlCcnUrcDMrb0tPUzMvemFhZjE2U28yd0hNczdOeVI0UUhJYVVFdVhXN2EyM0c4Y3RZdjJRL0prb2sxdFNZK2NVbDgrT29ZZkg2WDNmNmFQb2NJcGw3VHE5MWFnd1o5T0RORkV2WU5sWTJGU2tzTW8yb1oxNnNPSXQ5aDNaRUorQ3o4dXJmWi9lQUlkQ2RLUnl6M1BxWXk0d3UreXR3QU1qWk9wRndMSklwR3FEcTRvQTVhYUVsWmVhclVhRVprVnZGa3VzK1lxYnB4L0lJajBIelRRM1owaWZlcXRCeDE3Z0pSbEtsbTZKWU85YlJ3NUdPTG5ISkY1VkQybFpPZFRGOHplM3d2L01wRXdpb1BrczNtcUo1ZnRuaCt2aktVWXlOSVIyaGdHdFBHV1JkaUxMRzFTbUJJUjZFbkZxMGVBU1FPeUhXbmp4YjFoRWowS05HUTcreWNnK3Y4VkxZdUpCU2Rsc1JsN25wcW1HcEd4SmRQVjFzZ2pYb0pIOEUyakU0NlFqTVNwL2l4ZklEN3NtZGhPRjVQUUNnTDdJdnREZmN0RUtqalY4UzlPV0U2VXVnMWE2aXlOTnZvbENFYWtOL1pBWHVNWUR0eDlDSWJDNkJtbmwzUVd1VDd6ZUJabDVKa1dGS1NhNDg1d082elpMN2hBRDYrc2lPYTAvWjNqMldiZ2dETjFsT3lRQjkvZVVsRmFvcEpvYXNudXBUdE1QOGdKUWNOZENWVXliMVJxbUpSRE1sM0lHZE0xdk1sam42eU5mODJ4cWhzdHRFQUhGSE5XNk1Eci9CYTllbDFOZDE2WXVQU3FDcXhjMWdyUGp4SUxLdTVxMkM4TWJRdzF2cFd1eDBFMlJiNThLOGVYVGxUUjEyaVJPNkI1cUFLTDlvUVRsQXE0UksyVXFpRmtGU1V0azhlUGovZVpYczF5ZkxSbUpzMUl0akZRbnAvQ2NzQzRVY0I5NGg5MVBIeFdXTEVCbHFZNXkyZ0N1YzFDK1dDQ0M2ZDc0RXFEUzc3TDlpdnRDc0hRY1JENVI1bVlJTWhXWTdqS3dUS3FFTTh5UXJseGo0VFhSODVCN1Z5REpRTm9DdkFNQ3BaTW9jUzZOODV5c3Q1OEdtS2N0ZG5qOUhlSTRHOFZvTm1oZXEzc3U1aTluRFd6VTVnVkhmdjlScjFIQWVVUU9sTGgxYzljOUh1c2pDaUtUcS9aUkNkd2V0K0VHWFl1eVJMYmdsYWxmUEQ1aVpTc1dCbE81WFJvNXZabGpWdHNOdGsva01pem1hRHAwa3ZReEwyN3BFcHNjTUY0RERoRFk3cmtZSTRVMk0vMmZFTjlCdmZxY1ZZZlc5aWR6cDZ3NzI4RkFWYXVLTHM0VGV1NWdLNExLbjE1Sk51OTlRN2pMWE9rT3hKdS9uc0ZEei9Nd2NpYUJhb3FHK3l0bnVPbUxDRFlwNFdYRTc1Z2FHQTkwZzBBQjRtNGh6OEJDeGU3NjljblR4bTkzVlkxWWZaSVFNeGJiZElCeXp2ay9mSVE1QThuenl0aEpka2ZINXNMM01GRnVUUUlzMjlObkdreVFHei9IVDh4NXR0WFBnRDJmbFVXR2IyaXVxaC8zajBydjVrTkpxRVJVZXArMmZUTWVScTZGMWFWSmgyZ2c5d2xTYmhhUUNXVGVvQmhVRFhQeVVtTmVmTTVQQk1sMXAwUFFWL3JEcEpxeThnNWEyaDJvb0xBaW9iN1V4OEpKU25nTTlibE9uWW41cTRjQ09OZTM2a2tUTklZSGNjaWdVdnplVTU3TXcrMHprM2R1QmFNRzBMZzMxM2UweE4wVFVoN2NaamM5TnhkemgwRm9uWUF5UUgva2YrNWNGY1I0SGdGd0Z1azVYQm5mNVVKRHI2dW1STVF2NVZvUnVDNHJ5SVYyay9xdkRHbkVrc2NVLzFudUE5aWdpZEJWSDZWZkhzMXJmN0h5TTFPc1NYSzZIemNLQlNPK3NWSHU4R1UvSEJnaStLTmp4L0I2UkxtdWZZTExvcHB3d05kT25TZGh5MmpONDhIcjFLd3hla2N3Z0wxUzB6RzRIS25tMGFadHBEKzVXQi9QTzIvVnUvNk90SzcwclkySCtUTElXV1BreTF4MVdGOVN5T1lzeWJ4a2FBeFNiZFZLcEZrQ3UwYWtIUllYR1pHQTJHSTNyamp4cEdCc0tWVEw4Zmt1ZWVkWjBHWTVyaFp3VXVhYWU3MHhDQ3FmN1k3YWxFSFhEeSs0Qnp1R2hTbHR6eGFpZFBXUnd3VjJNM3hxMWtKWlRmWFZEbHJnZkQ1eERhZSsrZmNiL0F0YVdHdURhT1pIR3JnQy93Y0tlUHJLSUZPeE9rSmhyVXN1aEVWNEpNK082RHkzc1dFcFdhRWdieS9IK2lsQzdtbmdtakxpd2JhZ1I0Y2tIYzltWFN6a21rajJVcm1jMUxuU01zTkNOem9aYTdHVEQyRC85SmJNMVdmQ0VXcTZrdDZTaGhwcmhpZnovTHhZcHE1VWRBa3I4cnRNZnlRWVFrcVF2MTlBZmJMdUliY3hna0lweHU4aG02ZC90T2RDSFpmb3pRRU14d0kyczkrS2VIS29rNEJoaHdMa0VwdU5uUGQwNmdiMUc5RjVuVUo5MStuYnRkczVVbENEQjF0RWU0TGU1VmpqTXdIS05waHQ1UHlEQ1VqNnB6YTY5ZzRKcjBBaURwanFkR3NpbFNiOE1FMll2bGdNZEwwV1BPZGcybGlVZTQ2YWQzR3BYVEIxTFVmQnYxU0llMklOOVNLQ1I3MTZVMzN1T3NPNDE0bGxVVGViK0xKQUthSUVFNUcxc2RPN0tJeHRIUEZUZ0VBL1BvUnAzSjRZUHRQSWhQaUpqOG1SVHB1a2czb2JSQ1gzbnFyRlo3bTBBcFhSTmZhZjY0ZVhQb29KblZCemlrYVVlMkttM1FWYVVmd0NMczVYWDl2Uk9yZVQrQ2hBTm9lQ1NnM0haaFN4TUFZTmVraFl5UGhlWW03c3J2NTlxR0Q2NVdoV25yZXpQb0VvUUQ4WnAzZ1U0UExEcGJ2MHVHek5aZDl4ZFB4VVYvbEc1Q05YYXN2MExZYUhFZTQvajI1c0YxS29oQVFHeTllTjBORTUvMXFmWW5ZeHRCVVRPcmMrMHNQcml3VzZiNnY1dFpSK3R2V3phTTJPQ0tvMkF5TnZ4bkNneGMxWUFvTlFRRDZrTUFuSG03Vm9qb3dTeEw1b0hzVXY1QURVbjRtOE1ZS3lsZzAwRlRWdHlGbFV5VFF1dmRXWk9VNHhiVyttWHdVRTVQTzRXYld2SHFaRFNZazI1Tm40eDhqYy9mOS9KbE52cjJkUzdiVlpTOFlvQXZYcjVWTmZSTXFDSUU4ZFRIc3RaVjBxQUYrdEZUUUZ4VjFGQjhuWTRNK3BubkR4MUZqNGZQSGl3M3cvR3VmanRDQ0x3THZqZ1podVVKeGpsT0tOR1pRVGl3ZVFqNDBuM0JHSUdTdHp6TFhUdUpQQWpJdTJQMmRBblFrRUYrL1U1OTA2QldqeWVHTHJYVG9WSzVVSjlEUU0wUnBqdVVjZEdSZ2F5TDl0Yjdza3hoWFJjekpXYUFyNTVNZEE4clQwSUh5R0lLWmhJTXg4NTd3SHc3aG1xdy92eTM1VTVLek9IZFk0SWozdVFtSnhQcFpyYi9TdEhoUkQyYSt0b0ZZUnJpSExJMzF1bmpwN3R5TjBMSzdDK2h3VVg0KzBTMHZyR2szTTRVQU9SajVLU050OWtRUnNPWEhlUUJHVTd6Nng3UWdUTUFEYWMwY0tHVnpuR2pFQ0ZWSEVGNzNJUWNQZktHempiak81U1FuUlpMRm1KWlNjQVRpUjZYRnBZWHRSb3UwVzBJVEVaRXFzTi9yTm5sM1QrcWpiR1I2MGttdlhHaGdjMEFMRW1hTThGMXh2VXJQd2xjVk5xZ0djWWZXbktnUUhuTjBwdUlzZS8rQnhVemVlQlhmcWJrUGpMYytYenVpNjYzMEQyMlZMaE9EM21YY0NJdTMwcmdBVG5LSlo0bXZ6MHZvT1FtWjFGTWJUOCsvMFowWnV6UTUwU3JNUW45Znc1T1lIai9EQU0zRFIvd2wzOEZNcXkxY2FGc1hwdm14cTVsUnZRU0ZSWno3U1NpMG1TSUZCb294VEVaV2tWZ2k0dlRIQnBpY3B1WWF0U0tYYTZTckJCbTBacXkvTCs4R01GQkhlZTJadGNiZGl1WmxEYXRQTW4wM0J3UzhyQ1hXb3Vqem5tNUZWQUpuOW5DM2ZqdU1jYWNMZDE3NVlvaDVkM3c0SXFkU0lhQnVsbEdyTjZuYjRBQXRGdHFDa3JyZGR2b1IyUjZpT3ZoR2ZkWWxxbDgyTzluVXJ2MWJiSTMxMHNCZU9TV3czdE5vSXRjQ0szaDJZNjdQVEZndzROZmRTSmpLTHg5T21zcXNDRk42cXRBM3FjUjRwUXJqOVh5b3hPNTliVU04amZWdmVMUFJLSDAya3RrKzNYR2dKcjJOMlFGM0N5V3BtcStvN01nSVFoVzFPMHFwZTRsVCtmdit0N01HN09Id00vcHpmemhTK0lPRG8zdTZsempFd0h6bnlFZkFWWlNzaTF1Uml6VXRNS1BTMTk4M3A3cFI1TlNadXNvRHRobmFIVjc0OUZFMDFjdElQOCs3Zkk2c0JOUFgrYWdGYUtHNWg1VGUyQVBlbGlCODVEMjY1RUJWV3duWnBTZ1ZmSXFsUExSYlJ2bTBXcW5ZdUNUdDRBcFcxUVpBMHRIKzc2cC9jd09NOXYyR2V2V0pvMGxOMTJLQXBWN0FXTGpqUlhHSmhSR2VualJpK3JtcjVtVUJmajZqK0VHWVIybVNJTHlEN25rL3hsYXdweFFZMzEyeG5BWEJKRjUyQ0k2RHQyVWo0N3cyQWVkU0h3aFUxRjdJbHNpSW9seklmOFRzZ0dNbjhZdXR1T3UvdG5oVGlMY2JnT2k2bHJFY3JwSFFueW1xaEdWOU5GcVN2OXZVSEQ4R0prUWNmbVp0MW1YVnJVTXlFZzNlL0pyVVNTNHI1c2FCTkVPWXE2dmwxbjljbEZVZ1U3OGYyYkp0RGhGc3lGSEhvSXZjM1dEWlNNUHBLRzkrUlE4cDZSMzB3ZjQyVjJTYW1lOEpuWnM4Sm54UXVCanVmd1lyRFRPTlJ2WDdWeXVCODdkdFh3Vmw1R1JOMWg4L0ttSnYxWDZQNms4bnJwdTBlbitkSzNGbFEzdkRyT3JRQ0hTOW9DSTZDNzAyYzAxTFdFTkVNVzE1SEVzeUN5eVF6RlBmRTdIMkt2cXUxdWc4WU9jY1g1RjBjem4venRnTjZ3ZG9lb05BVWc1T2JPbjFJNit5YnM5V0ljc1ZUL2xUOEMzLzJvMTJkUmdrL25YUHlwOThya3Q0VVhVVm1UalVpUG9oQnY1MkZzM1RCVjNFVm1yZStsZ1MvdERGektYcUxmaVhkNzBXaTBkU1libDJnMkxudFAydDFBeHErTm5WOXU5WUlYTVBDbFJReDVmQ1JqMFFyYWt3VmhLMnoraCt6S2k0Z2lGZlhNNEw4NHFUaXJpNzVmOUZzb0V3K0ZPMFZFQXNTM2dlZzFXM1VwTUVwcWFsWmtSbW54UEhSZWwxOHJDY1RiQXpQdWRRTE5OK1p4d0VLSGhvakVEeDVjSDNyK2s5WDNzYnBTdkQ5RC9aZWhVVFhwU0NMQjc2MVVYWENSU1hxa2JBZHhlOFJOUGZvWjRsMFhnQlZ6NzcrcHI1TUZ5Zy93a20yVnFKTmFpUERjdUFYVXpwMTVRQlQ1Wk1jRys4eXJ1Y3RiSVM2K2xFb0NaSElFRjc0aGxMWGtremY5Uyt5VEwxMVZXZlFVc1lrK0xHQS9SWExiVzZBR012YmJiYmExU0luTS8yWTd3WG96cnRzM1FRMEI3WXJqYkVZR3M1YzR2cFhjQ0RsaCttMFk2S3VVVEhFb29ad1VNa1RzeENFbjV1SjJFUFppZHN6d1htMlVBNzlXNklMNHFuL09JNDNYakZGYS80akcyYmFnaTk4K2NLSGtLbTFHK0YyTHJxNjlXTWtPZ0hRQ0ZPY0NPQmFoY3h0RnN4ck5wQzNMTzZqZENrWWtOd21OZjhKOTFTQTZvSm1Pam9RTzhvVC90TTV5YVpkTCt4QjBTdXpRUmorZklLZzdoOWVCRlBmbWtjYkpza0FSdHFrYW40dWd1K2Roa0lUTXQzdzJyQnBVWjVwdXpzM2grWkpERVhqenBnVDRXYnpZMzAxdHBmNjI3ZHBjdWkveUMzRmVGVUczY3p4Wk9wazExWEdjWTFPcWZiUnh3NHR5OVYzS3psaVNiNTdaRFBjZEdxNGJkS1BMaEVicGNCSmlqUm4rUWVmVXl5ZHlEdnVYMXlMb210cWNRa1lZMDZyS0s2Ky9BMzRXMFpHZjk2ZGF5V2RJSTI4Y2J2QksxYlVmN1FjUjgwSVRSbFJKOHM4N2xPUUxxM1I3UEprTmxyRkFYMDhQeDBrU2xiRk13OWx0SEFhWG45SXNIR1Z4VWc1OWFTN2JJajgyMWJrWGp0KzMrT2RwK3JadnhVVXk4dE1INUFySnJZSW1zM0FQOWZaNHFwaWlPczE2OUdGa3FyVmRIM2V1WFpIWkdyZWh0NzJkMDNlZ1JpU21ZcE5iUHI2VzJGR0NFSmZMVzFPdjRuRjhTUDYzNGZQNzlUbXZHWldrQlhiMEpVcXJhaUdrVVREZmdLaDRXMVlNcXFqNnJqc3VDZFVkcWNlQUUwUTFXbmlLb0MxR3lsTnlsM2VwcFYra3c1TncxaUlMWVVBV0ZVbHpHa1BsT2FjTzAvZllac1FDSVZoQ0JDbVlBZnR5R2JzZENZVll5YXcvT1RzMUcyWCs4UG9yUEdPVHc4a0hqeFVUUnlPNTRBZUFlQUM4Q2xSdWNEWndodXl5VmRqQnZNb2NqNVpqd1I3ZTI3WFNqWjdJVlJ3djEzRWtXTU4vbno3UjZMNENBZ0lDQWdJQ0E4ZjIvU0IvdCtpcy9aOXViK3o2OTcvYjlNSCt6M0IrYjdmcE4vMFBvM3I3ZnRHcjdQcnE5KzM2YUQ5dnUrY1A3UG9aLzIrLzUrMzdDWDl2MU9mZlY5RWYrMzJZdzZiNExxaCtwcGw1cUVzRmcxZ0xwR3NTRWxWMkNTMVZpR1pjUEVlVUtDdjlaaE9TRE9KUDZUaWJEeUlvcmdMNW4wcU1Yb0NWQ1VvU3AraUZOeEphSUphaVZLZE1vUWRRWEIxblFUT2lMcHZMTmltTjVoTVd4SklVWDdkeGc4T25Ib2dnOU1zYVQ2TFU1bXhaWWxGZElVZHJUZmRzQjhjTVYxK1pWWGg0TUN6a2x0d3F5VWhUZjJjZjd3dERPQU1Kc2IxUHFkMkNESWhxNzByZmpqb2lCcE91YjAwNWFEZzRuZGV2Q2pQbCtvK2JPU3QvY2xhTHg1RWVCYW1SME15b3NBTDdUY08wUUZFY2RaR1N3RXNUN0lmZk5zUnZMYncyOEFsV2tGSEZ3VXRWejVQSktDQ2tKQzhtL2JMS3c3YTRrM2plZ2JQVVRUa1FzazF0VUZCdDZYVGtINElNajdpSlBGYkh0aXhzb1Z5NC9TM2RMVkMzSHFXM0I5TnVXWWJ1ckVZV2lSOUFpUWZieGVEZEZ3R0xHNW5QQm1FcnpveDZJc3FMNm4zUExNZDhxZ2pFM1Jxc2ZVTlpPUWdsYXNVNmZta2t2U2pmOEUzTS9UWlRFVTQ1cENEK056TEJlY3pPWG9rdExtQXd2L0Rqa0lDMUVOWHBEcHNhbkhaQ1BYbU1vTFNheENXRCtpNFpjcWhIZmttaXZ0UXEvdks5a3RVdFIxSDlyd25tM1hPNyt4a0pHNkpob1AzbzVHS05pemkrVXFmTXJEN05BeXQwNzVOUWdOU1l1c2RYcjloZDVmQ0o2QVV4QWx1bU1tczk0eG5LMnFjUWoxTFkyUUNmeHpLRnhrd1FsN2Y4WVpIQzZ1RVI0b1ZOTDR4aUZIUWc1OGpSdlVnVzVjTnpkeVFsRVZ6RU9RTGRtVnhvaGNhZnJCMURoU0RkcFpWMW9UM3hUTjlBYWloRFBBcVNwWmpZUkZCbXl2SDluM0xwZGdEQVg1ZzRsckFsYzlOeUk1d0JiQlpYSzBjOCtCWksza3BpV2kwZ2VBNmg4cDYvUUVXaUs4QVhXRzFSUlR0d1dXZmxSczdxOFRCWGlwKzRRc21uL1NPekt4MlI4SWdERlRhdWloQW9Wak9GUy8xR05jaWhKd1UvVlk1NHd0akw1aEtJMDFuWndHYXhGemd1WXVsa2hvUUlrYVlIa0tNZTJDR3dWREFlTFZwNVhOWlpLNFFzcStrSHRJcHRoRGhhd3pRcm4xYnVyeTI4ZkJUcmhNWWZNWWhBS1BQaUJhaDJYc3NvbTczaVBTVzRZQTRKaDBYNkY3S1pLRHZ5YkpzdHJzNGl4eGJkQS9WRlRKRzlRVzFRK2JVdEJGclF3anNmaUoycU1lT3NpVjl6NFk5WCt2ckE1SHQzZzdCUDlBcVMxclFGZFJYMzNRVElvdTJ6SzBtR3BXWG5zVUl0aDZkS3BCZGNUQUZoS1NsQWEraTdnbE9xRUJxTDV3cHJwZys4MnBvVEpPR0FwYUlrNDFqbVJ3VC9XdERiYzVMM2xsTVcyMk5jSTZTWHVhWm1tY2VYWWkxZHVpdVUxRUJPZVJWQTR2MXZaQTNBbDdXMVB4QUlwSW1hLzZQMW51aUp3UklkbnJ3bGFuUjJGNnNXWGVhMmdOK0gyTWk3SC9PUDZ0Y2RBSitFeTY2dXJNenhKQWplNTVNRTQ0UURDeTUvaUxZUHZhMmd6eHRZRkc3Tmt2SFNydHduWDBpaEZyaUhJR2FvUGdzblg4NWM4SU5Cd0ZTSzlyWUQxWmZOeEdiR2hIc2kvaDZUcnJrL0lNS09wNGlCM2ZKQmRBUUt5cG0wNytVbWkwdVNsMmlCOGJ2U29zcXBNajAyMVR5N0NkNVJnTW1YOWNGcFBqY3VHQTZwQXBqOVdSQTRsSXF3R1AxRjZFdEJ4dnFHOFFYQzE2TU1IUk5IZE54N0pHbkFqa3BENklkT01mWHdEay9wbm93Sm5DRFBsbGExQURES2FMeURxSk1JNmFEOWtkQmdEN2JhNWNBbVpFeEtsMVE1SzhicnhQaW9xK2VyaUh0WGt1WCthQ3JxZjFIUU92MDdqcThFd0RLblBOQThVOGhPaHN3K3hoYzR6OVRMVHJLclNGUzBOc1RidGQ0Rlc2NFpxa2prMmtraEZ4a0kwN1hCV2NEUWs0RUtLYmFzOE1WcVgrTGV5ME9JSWpocmhpOWdtSVBwUnhOVEJGZE9FOWxkQkptL014Z3FtYXFRRWs1SG5hMFhuREw5ODJQa2xkSnFwMWVXQ2lLcnAvVUtpV1EzUC8xSExmUU5vRmxzZkd6Z1BUd0JKSEoxMVpxbWNuRk9FRThGaVByL3BUb3lwa3lTaTdad1pwY1Ztakg1K0s4cXJWMmR3UEFKWEphN3BpbHhEQVMvY21PS2EvM0pkWXJsdG43TVZ2MVRpRGoyZWhCSXRGbytZaTRBMS9aUkxkOEkrMHJqQ2U2SVY2Mk1rRlYrMXNKdWI1ZUQ3R2VnTTJFRVZRTzFHUzRCSW9MeCtjYldxS2xaRlVwUTNOV3dRNFhOUy8xdzQrdFB1THpVbVdLTVFoS25rN244cVVzcFc3VEZNZGxLbWF2RzRpWDZqcDc1d2xoamE1c2lYSERVajZ6VWR2U2ZSM2JGcFVoZzRIVDBZd0drWUExZ21nRHVGYWdvWitYazFHQmQ1UmhhZURrSEtiOHdLU0NXR3RtQlFLWlhnY3F0Zk1lQ2JOZ3VBZGpTcUpZbG9aalVnTFVVQlRQWWVobUVkaDdBV3NQdzlRbWtxNzdBbUNucXdGV3BTZmJMWHN3NzREVzRoZGtKTHhYTFVFQ0VveXhHZDdBR0UzZWhhMFhKZ0FLeDFXOEJBS3NTYlVad1hPMU00eGZzWFZ1TVM0OW9JY2habnQ1R3BoZUZ4UGxJcXZIZEFUQnJVam5uR3RJQUFKWG53Yzd4VGhMdGdDTEdnT054d3QvdFBaWDNWamZMaldYSWNDUmk1SXI1cXZtRjdyOUdlb2owdktsVllBUXFxZlB3RE1sVVNIc05EcDdERW01amw1c0pqakRBTWJYWFhqclByRzcrYkFxRHFyR3c3dEJiMVZGeHdCcDU2YUwwaFp6L2xudHd3T3p2NVk2Rm9Cc2p1Vm00UXcxOUY3SEcxdUI3V04zTzBvV0tsMGdSNFJPTHdSaVk4TlJZdEpxbkdJN2NpS2ZrYXJFTU1GRnpqOXpiR2xuSktpK2wrclluZGRqUmw1WUlsWGN2Vk5MSnVJWkw5Nkphb3dNdmwzanpVa1JQUUtuNE90TTFibUpnKzB2TTZ4QWxJNFZKZnkzRjBFSFZvaHQ4WXJVc3o1QTNLZDFLOXZXN2FqNW1nV0pQdGJtOEtncjc0NjFOcjhkbXBNQ0ZmYlJDbVNCOTlLZ3BEQUQ0SjdLd2FicnRMQk5hM2Z4NDFuT0FtallHMG81SitkMGRvMEJpYlpaR1Mrd0t2MGVlQlBQdkxEYjNXZmIrOUtSK01GdlNJd0NqN2RRT3lZSUJ5L1JsWGp2dVJhVkN6cG1XcVNZaFRXN21DTmZJZEJtZTRXdUpaUW1ISWNCTEVoN1RHTXdYb2ExMXRad1ZOYnptTmlpc3BacGlTa3gvWWtsYmhCTWg1czBTdmJBS0tKMHp3U2ZyRFZqZ0o4Qks2WGZuemZTTXRXRzRldTRxOXAwSlUzSUp4YURrYTk2MC9YMWJGTmRzazlVZ1pDUjEwYit3NXB4cS8xZG93ekhLOFlGbU5qZmxoOUtwb3RFcVZ0dkdkdE43VUorTUd6QXhxUkxjaTFjQ3VUUDZON3QrKzR2a2tjS0hQZkVORGN2MzNCRFlQNWJQc0RNOHRMUWUzTFF2RHpyNmUvY3YvZkQ5Y1pkR1c5RUh6SmZMeHZHS2NtRmM1U3R2dDAvaURRY3RCaUQwQ3NmSVc0dXZIRUt0WjdJV1pBRjJLaDlLWEVFVCt0dlZGZld2MnBwQ1RPd2dlQnJJQ2hKL1gySm1wb0RuNFZ1WTJHKzc2SHdudThFbC9QSjB3Kzhpb2lzS2hINFVjTFMyWnppbHdYeW5sOTJrL0RZa01JblFwM05LcmFnZkh5ZGJtcHJtZk1ONlNaTmplSzQxTnp5MnJjSHo3WXgwSVJOczVROS9HczVybjZuZ1dBVGN1cC8ySTFxQzBIK2RSWlJKRzhxQVorVll0ZWxHRlhmMXd3dlRVWUtVdG95VE90NFBWWkw3d3RNT2RDWE9mNjdkOTRUdEJhU0d3azdMTW1sTDlhOWVFTVhHb2FkcmpSZVI4NTc5NmlFcUQ2bHlQWmpvbkRWdklyWlI5ZkQ0R0swUmlHRWNNR0ZwbTlzOE1pWHNaMGx2dUpCQVA1QjBKeWZvc09XU0NGS1FzVXY2amNxV01oRG9QVy9IMmpPOE9RT0txYzZRME5FNVN4c3JMT2ViT1F4eUlyU2JUTVZoamZWa0p3L1BvMWFLUU9XMEw4TExicmM3aHBJajkwMlNHYlBBTk5xaE5td1EyZEsyaEZQekJjYjdvZVdsUkV2ay9JQjMrR2FqYjdGVEJYQnJSVDdCV2NVMDNIYjdrTk51TmFzVDd4Ni9zVHdKWHV0emxadEkyZWxkbWNGVTBGaEFxdytyQlVCa1BmR243dVovZ1d1TDRFWmxEN2dhQzRELzNiUnJpNTFrUnBEdnh0ZlBtTUxMVDFTci9LUjZNM0xxU3F2MWQvclJSWXJ0bFhNSi9TTzNQM01udUhtUVlNWGJBbW5sTnkwZ0xXTEFxRzNKTlV3OHlURkFPSzNqVk1PVUdtWUlHMG5JM3V3ZDhWQTBtTzh3VXliZWJTS2dYajlFZ2VsMk5RVjY2bnVROEZ3N2E2UkIzT0xndUl0N25qbHZVSTZ1ODFVTGNqTitVVkZBZEFiQ2xqbjR3Zk0wRWtvLzFOVW4xckdvZ2pVTGFZbDFzV1dTR2g5T1Rhc1ZKTHRISDc1SzZMNk5YVCtqcnlVZFIzZnMxK2VtZzZtS2pBRStzb1hMcGVrMkZIUjRIemdqQzBsazhTTTR2b1BWUlNVcWRKanpzM3ZkdGZhRmtLa2FYc3dFQTI0bm1FVkNwQzRPbUtNd2lJZWtwV1BPTjNPYUk1ei9CTnlrMm5aYVFUSkhzeDcydkx1aW9NRDVrQityKy9Qc1RsUHNRWm0zSjgrNjhsL3hDVm95MGJwWG8zMWVvS2Y5N01ldHBreVpaeTdVWEdVdXc0ZDhtRWxPY0hyTFVBcENjMHJPWWl5WkUyUUMyd1FvYmo0cFNXcXF1Z0VGNFBjWmlBd3dBY1lON0xVNmN6bngvUktaRE1XSVRhT3dVNm8wV2VhenVjcHBpckJsU3RraStzeGp6cjFzcVNtSUUvU3p1RHBwd1VacUJJd2VaV0NNSmk2dTFHYW0rVForRVlMMit4ZDA5dzZIMUM2L3NxbmEzeVYwV24yRWxPek1xYjRaVFp2OE1VR0NrQ3dzUHprVjI3REdxc2NDV2QwSVNFR3F1M1lRSGI4eDBxZWRFYXZpMDBJWWErV0JlNjE4Y0hOdXk1eThoWjE2ZExGSlZpd1hrUGZ6cFFyQUNHaEJ0QVhiMmhoTVd5UnRHZ0NYaUFrUUpQSGJoYlM0aVF6VG1kL0pLaXpBWnB1aXMvMWdMakw0QjZhVnhQd1BmMDJkVDhtd2NpalMzNlI0Yzd6a3Fxbnk3bHZYWFp3MTZTQ21ZU2ltcmdza29Wckd4MlQzSGlWTWU3WWlGOGp1NTJUWjhlR2VTcmVoTUlMS1FBK1ZscXpwRGxNT1l1VDZxcXFKZVJBcWRUUmtSb2FOQStGS0xuTUw2Wkh1V21GTUM5cExicDRCdmZvY3oxNVpKSDQ1UWtiM2E2c05FSUxCUWxwbHdwd2c5MDVnUkxoYUxNK0x0MDVsVWgrVkFKZjBla0FiNXVWaURoU3lpZGs3Ni9EdmEzODJQaWhMSEovcUMrN1FWVVFSaU5EQW1kRjhYTVBGUVZmbHdWMEdUdnVHUlozNTdiakVya2dPVTYya1orWWVXT1ZScFFNY0hRN1hsQWpFeENDZHFYVUNtbnBuTjc4dE9RemdRdjVQVjFPZGJHbjlNV2tqTmpaZHhWdTdCek5iZFRhOHBmK3gwczg1SVFLWmNyUEhxTFcyMGVNZ0hEZFRPSnl2YTR3RnRmR1A5Yzl1cE40ZGFMd3dtUEN0dHRXR1NZR05WSGN1b0JPWVhxRFdKc3NSRTVQMWJ0b3hqNTdjNjREZnQvMDNxb3BzNmY4SWhOMTlOazZJNnZRTmhlakpaK0hWMmJJLyttcFdVdmJXazgyVXIwa2lnTFd5cm1QQVU3blU3dzJBSG5zcFVRdGxJTXBSNHZPb2twSElNVmZBN2s5VUd0dkZKWHdlb2c0VzJ1YkU2bGpueDVEVDJ4TmlidHlUNllZK3QwOFl3OFpTd3UzczRzTWhDVFdVaU1heDNJcWRtczZoM2gwc0xEc2wvVjZ3V2pRZ1BkRTgwWkFoRU4zdnRjZkZHV2dNbW9xbGp2eGxxNUVib1oxYjlPWjV0bVRub1dvQTlHOFV4NGJRbnE0NFc0aFEzT1RmNlJ3emZCMnM4REhmQUhYY1M2bmgrcTF2OWlYWFpxZ1FWU0paZFJCeWJqK2xVK0g5RUNQU21ZUlNYRk5hVUJrS25Qa0ZNZGxGSzZnWC9ENm5zK0hHWVhHNktvWmRLRllGSzU1QzdLRHM3djNDdFBXMTdxUWkycTlHVzdLZEpqd2UyK1VpNUk3ZC9XODJFSHR3ZGJSV01jZFVLZGdhMzlzdW8vRTR1ZnQ3NS9qRTVKQzZzRWJPYWIzZ0ZpWmpESnR1UGNtdDBTMHNPSUNRdzNhekJ1Z0tFWDNteXcrRmxkZjlJUGx1a2JETFVEbWg4QjdqeWVxVEczWnhuR1QxVTNFeHh0Uk9Ca2dDOFdUbWMzb2VSNEFvY2ZLTGdzMkJzaUpFWDVoa0grNkVzWk40MGF6ZXpUaFBOTWZEOVcxYnBrUFNyQnB2cStEa3V5QXJENlUwdldRTXE3MzNnOE5RdXFoN0FOY2xZRGRSVjkrSTNjajBYSElBc2R1d0w4cWNXY09aTG1ySUtUb1IyMFpMQmo2NlpRa2krUGRXVWMxTUpvYU9OM0lnNm56MVRWZTV3UnNPQzhhVWlUSnc4elNqZUZJbVNmS0E5UW5SM2pmWHlnaUlEN044QWpxeTVVNm5GUU1uQkN6MU9jMVpNcTFmaGNKdzBLQm9oendlUkxpcVkyLzRaNUlnZE5ia2NhS3lCRmFQaHd6ajJMb1EveXR6SHZISlEvcWdwcTNvWkFiU056RERPSkN1cUpxZmkvTzJvY2tFcGYrcktJQlBGMXduQVRKdU9lczBORzhVdGpQVDM4R3hEckpxelo3QnQ0eS9keXI2dXB6Vzdic0dUdVpTWkgwcTVMUThpMHVXOVloQ3lncXQyMkkyMGxDNFVoQ2d1Z3NGclRibTZWYXJrdGZRSWJ0dTBlWDhQc1ovcVZiV3ZNQzZldHppV3hKMWkvbTVNdXdqSkRyS0JzZkNIVVJJQTB3UzR4aHFjdEI1ZytZWWhVcUxuRGpQSUx2VWEwYjVtQ0FEMXFPSi9LdjU1SUF4R1pMOGd1Z0xyK2Naek1sZlFJMGdrTmtuRGE0cXZmS2lPQnNsMHYxTEh2Z2NoU1FiNG5sdFc3b3FYNFJZdzN0MllCczdlVzlMOE5TK3hhT0VGMG1CNmxBZUIwZ1Q5alJEWmplRzBWU2RGdFRNMUdpS3JKZ3VKY0xnQmlxRDFnVlRvbDRFbFkrTlFtLzdHQUo5NDYzY054VUZQeW5LYlVrUnpDM1Ntek1nVFdadURCWWlWRnlqclZWZXZma1hFMXpBaEtwKytwRllNTUVpRWt0bW5UWFJuL2VpV1FOOFBiTWFnZHhZUFN5U1dMWDFla2RnNDBCKzNvRHRxbnVxMjIwV29peFZ2RTB0UWlMbVM1Nm5IOXAveUZCMWd4c0kxRDM4WUp6dzI2elJ6NEJGVnlGRUhhZ2toWmZjL05oSUx3VEFMb0FBVStjaHZrQUsxcEQ2Y0JzZ2o0VlZML21DT2VOaTNHNHR3SE5ITis3OE5XS2pFY0VVcSt2ZEcyN0w5OGpCcXJkeG5iR1Jkc2FuNVJDcHBsL3hyeEtpeFJyWDhibElob2FkQ3QxcFZMZDduaS9rR0FjTDNGMFFtSXFucWV3RDM5dXoxK0h3c3NlTTkramd1c0I5UTFuZCtHNHlIVXBzTzNtKy9kSEk0RFc2RnhDUUIvbmlHbHZhL0MvaDB5bUpkOWdTR0VsM2dkNU9LK3lKa3F1QnlNSlNFQURvaG1weGVGWmQ0ci93TWZMNlFBc1dQUExmZHI4S0ZuUS9JZkNzMHBiMUg4QmkwM0pGdEpXTGhQc1BuZkVVL1JPKzMvelZzeVZESkg2SVNLc3kwM21WOWpyRFQ1YjYxS0dkRE4zZFM2bG1rZjM4K2RFbGUvSURvVzZOSW42YVJFalpsdjdsZUJ0S0xsN2NPelpGN3hWOEd0cGg1MWZWU3hRR1ovUFBTL1NYcnBsUzM3dnowYmI3eHRSY2pUeE42T0ZvWlZwTlN4MEJvSmlOcVAyWW1JUkY1L3lsK21FcWFUaWorSUxWTHBYcU5seHdlZS83eFlaQzhqa1FzR1NFZEw3aHJVaGNzejN5clpwb1d3ODhGSzJOem9YTUd4elBwSjNzUVVJOXlmK0hEU3lQMzhzU3dnemJ3eWhZc3RYMU8rWEV5MmhNemMxVUZvNTJNUDhMZVJHdy9EeXRNbUhSNml3V1Y1dVRKNE9SWGE1bEU4MysxY0JpWFVFTEU4bmlPY08xSlBJZFNnRmdPYzdodExuVHFGYW93UXBGeFhrU1ozUGExUytlR1NyMEhxWkszVEhaUU5EaE9zaHNXTFQ1aE1WVlZkOUdwcWIwUUlqalpiemhoc2lQWW9RNVpGQWpLcDBqU29PN1VmTW91Q2orVWJNdFR6c1VYcXc2bmRNMFpjL3VHNURJZm1HdHpvaW5kQ3EzNHIrOFpFcGNiMC9CUU9UUnJIeUVhMkJMdk9odGs4ZTg1OUVlcmxpYzRybjJRTEUxRVNwQ21QeUhNZU5adHBtTWQxeHNyc1VhTFFFekxweU1XdlJkNDVLRnZqN21jdWJ5Q0x5cWZ2MlExemdmdXNpclROREQ4Yld1ME9reFhuZTk3ZVU5Vmt6U2IwM0RCUWZEYWluUldGZWtUenMzQXJGdEduYVFabUdvQ2FWMUtYdFUrVUhjQzBMcTgwLzhtNWtpQlE4N3RnL1R2VitLbDNxSmk3R2swUmtydFZRRkV3b3l4TW5iSzhKNW11RjBQY1lkdWsvYmFSS0VjenY5TklFL2NwOUlSR0NiNlpVdXJab0FjeG1Hbkt0YTdIN1ZXbE5WalBDV2ZocEZoRHFJRzI4TFdpRlR4RjFxcHlrekgvM29JbHhhWUdUaHVIYWx0ZFVBVEN1N2w3NHhnWmdWbDlJQk1RRDFuWFhHNkpUbUk3V29Ec3NyY2VwblcvZjVRM0htSDVUcHF6RzgybktYazBnMjBzdFRacG80cWlkVDRvaW0zSUF5eWFTazVock9HNEZFS2pvcm5kcWNWbUdjUUR6OERSdXpNdWMvdzZMYUlvVGdtUElENGJsbU84bHFvRS9aZW5mNmxoMkJFMXZQL0d2c3VYWDVwZlRJeFUvdmRlSzdBTVI1Zjl2RkJQTU1iWnRWUis4NWJEQmpnY3JHQ3ZFMEg5eUs2bGUvZ2UvMHphRUpjTlNmZUw5VGlFTVJlNlFQQ2ZnKzNEaFhNdEVQOE1rUUVaZEV3RkZkK3BRSmFDMHhaWFFHRlUzcjl1dEpMYmpCTGp6ZDVlK0Z2S1BNZXFaYXNTd0J0anBEcU4yY0VCNEwxdm5QMTdIQWphY3FiNnp3SFVIL2NxbHYyQWg1MXZ2SkFpeWpSNGR4ZUE1Y2NaVis0VDFNbGIrSjVBWVQxY3VNaFl5QlFQanJxTm9TMXpSUmhzU04vc0l3dGVDUXNmZEZtaFZkSTZ3WjhJVk9CUDRiV2FkdTFETHdCU0wwL0ZacTU3NDBNUlM5eXB1UFdmbE40aHBqWjhzK05ZR0RwVk5Yd1BPSXpPdVd0cmlLaTF0akU4Z29rNEVQNFBoVkIydldMTldDWmZSQ1RPaGtoMXhuSGY0S0M1QWNXMm51cnpqazlhbWRkYndGZ1FiT2FEamZpc1pSQ3Q3a0NHTTdBYXpXSjFIOGJYYkNKTmhVc3VMQVF4Tmx2OEsyT2ZrUkxUb2dQdDMzdTM3cUVxNHROc25nWENwMUVlR0ZRMFE2LzFPWXg5Zk1aWWI3d0pJS2pKSGRYTXIzR3JVNEFPbHhpTFNuTVBjWTdyc0JWZWY4a2hsQ2hYN0FPbXMvTm5Wb2xid2MxNHdMZDQ2SzZENG9FN2JVcjlhUldPeXNQcDZZbTlPeElEb01UelUrc1pnd3E0RUEwbUpvTm54MWJuOE1rb1lqSmlJKy9hNmtmN1dzVkN5TGhiTWwrYjVCb3VETVBCM09WV1JDRjJKdVd5bVorVU40SjdqcXB0NG9mOXJmWGtmdUpuMk42cThnbmFQQXgvUW53WGlya0lza2xVZTEwTmZiWWdZaU5PVW9iK0F6QmZTcHRURDYwckMrRmllSGFuMTBPK3hQYzBNNTJUZ1BiS0VEelRNWEl5U1d3MkJqTldSWjMyL3BLdW1FK09vM2VCMHJQNGRDV1lEWWZlMVJCQzlnZzE1ZENDTDJjOThVQllXbGJYN1I5ZmtLWit2aEVabXc5Q24xcVpuZmFoUzdEcWRyNDlUa2Q0cXlmNjNUMnhNTVRvVGR1UitLYjdBY2Z0dzVqOC9LanJhMXAwM29OaTZLRVlnZVNoY0lxeTBrN1p5bkRvK1kxSzd2clh6UmRmUWN3YlFTUHU0ajJBMU93S3ZjblRSdFVrbEhvRGpSelM0Y1VpRXk1a2Z3NS9GWGRWVXRWdG8ycjhVQlRoNEREdnFHekVmMzlWUE9NOHl6WFJOU3dtL0hsWDdlZ1JvYnhJWS91UlVvZm04am14YjF3ZktpRnNWUDhsVGduSlM0TkQzYlZkV0Voc25Ud3U0eUZEUGFGQmJrVFBIR3FBVVBteU92WjVsRkxvQTRYSHZYQlRWdUVDaHRDMnVkT1hvbEMvazRYWDZQMk1vUTV6K2cvVDZWZEJ4TWQ1TlNIaUpTVnRubHd5YVAwd1lPaWtMUlJCM3dFRHRZZ2tGYU0wbHlvaU9QZ2FrSWV0a0tQWmMyQXd2cUlxZFY5ZjNHSUNOeG9vd3lvbVlDWXZUSXErNWdJbXdvbm9JLzhRelhsMU0wa1Q3dmxHZjlhL0RQU2FhajJKSy9lb2lEZFpOeE1WZklKNHlGY1JiN3dnMUZ2a1VVaEpISHNQVWdFUEg0RExZWnhJaUlUSWRCczB0SEQyelFvT2crekRrQTl0OGF6WFlQS24wOG91TVQ1b0QzVG54b2V1NUxKRWJtbTVYYzJ5NUM4UXp0S1hVOUVxck1CNitRWUNJZ0lrMjF2L1FLdkdVeXovallpYlVXTFMxMmJlNWpVdzFEdFZXSUZOQmNBbFNOUjZtNlpzOEp3Z0pzSnJHUEFEL0h5M2tTSEFJRnRhR21ldDU3bC9QbnRqa2NEbis4SzFDWjRhWlBmU09lQk4vMitVSzRCM29MbzlNcXlqRTA0WmJ2aXJoNE5zdW4rOURsUklNS3RxSUJ2VW9lQUFlZi9TNUNuQnlvWld2czZueGVGUi9adGFWbFFleFhDM2pRNHNrK3krREsxZVFpbVBDbmRycmJpZmluVGxOTkRBc3lCbVRBRHNpT3lia2pycU5ZbTJ4emFMZnNXVWJVZzFkUytqaStIdnhaQnVqN3c5ZHVsMTlxU2JLQmRjakVJMUFzbk1vYndxQ05lM21DcktROS9UTkdzd3A5Z0xaYkNlend5emtLSFN0VnRLdENTNzc1b04yZU5SQVhnWkJaYVdaNkVaUWw0c1NGc3dWbUJBd0Q4OWZQZkxVUE1RY2kxbVFRN0dZQ21XelVKSTVYQmpJUHB6TzJpUCtXWVRGUTFjb3g0NG5PSUpyMmR1WTBXVHp6Z1RBQnFZOG9EZm5GaU1BbC8zNXg3a05SdmF3SXNGYU85L0J6cDFYdmJZc2Voc2hXVkFpcFhERFV1RUFvMGdteUNzSW9aZFFWZ3BaWEwwL3EyekpyUmFVNGtpQVNWMHN6TzNXcEFwQzFhZnBoLzNCY29KNGJhbE1Dd3pKaWR2ZjltZnhZYmZJTWFmQitSNmtLVEdIeTFTVFNZaTFmRVAvUDdYQ0x3VEdtVEdBckNhUVg1eHQ1R3MxdnRjcy9QcUlFeEdwVGdCblVLMDRLaVBvUTRhWXdBaU9kMlJjSlZ4a1FLeXNYcjBrY0g5TWxzR013L1NnWmVVWG9tcnNhZ3RhR2xkcjdWOEkvbkVwUWV1M2xYL09OWnlWdDEzaFRkR2dBdWpHNWx6NVhVb05NcHZqM2hXdkJkbEtmY1h2aDZHWXF3dTJoeEdFV1dSdGc2b1h2SnlRSWtWR2FFaHd3dTFjM3JuOEE0eW42emRVTDhHVmdtU0JBVE5DZWhjMGRRTXlKcktrT0tYQmhaMWprcHkrN2g2UW4zbEpTbWlzSjJrRmh1Q1NIbFhQVlBwalB6ZWg0TGRrTlBjNktZdHNGeTRhMFlIUWtXVXR6b0Y1V1NiSndsTnlMdGJJM0RVd1NLM2xSNlRaSXg2NlBaS2ZlRi9QdWxXS0RVUVErMEJhYWNqV1dienQ4OFJCanRJRWhGY1lzKzgvZWdxTjFrTFE4TTBmakdQZ3dqQzVEWFA4RWRiQ3FFYXRjb3ViZ0s3R21GVFowUDdZWHU2RS9MZCs5Um1ZaDJCMkpZWG5EV2g4WEtTdTdrWlJhdjJPTFJ1TnJHM0E3MEFwWGJsVXprNDZSd0R3em1LSnlZUDdVU2tQNjFsZ25rdmRKQ3JqcVdXWnNwRjRJVzBFQURmaUJKL0dJSkhVNWprY1ZrUjIvcTh1ekVLSlRHRHNyYklIcjBoVG1RZzFveHR2QmlieHhBMGxQMUJrWXYxc0xFZTFhZWFQeFhEQ2lRbXozaGIxaUwwTVloNE1WNmRBcHJ1TnFXTFdUY241ZGp4d3A1bU1nQldhMDVsWWFERWd0alRlU0F1TmJ6dXlNZGFlcW1SVUFKVmtDYVI3MWNxU25FYnc0aWNVaTFDS3c3VWN4K2x2Vkp2aHlZRXJzZW1OV1crS1RWMy9GWkNHV1FsdXcwaVZUM0liU1Y3aExvaDNqcXVnTEtCR1NQWkhIS0tyMWRCTUZhSkVpUk9pVmVZTGxTVjNVOTFxMGlVQ3hIYmNTVFZ4VG5GU3krWlhtTXV2OFQvZksrdnV5cmo1R2cyQWU1NVVySG9tY1BVQzdNNmgydmwxeWx1bHhYQWo1WCtlVW4yN3BtTDRJWERCVjNtcmJGd1Z4enRwZmdQNHpobkNhMGxFUzd0ck55VmJjcUlrb0crUEtwdDdVcnk5VllqQ2NtTjFiYVFnaFF4L1RrSXA2a3pDZzBsVlplMFppUlpvWW95UlFtWFdZbjBrbHloOU1QOHMzOW5OaGxsdmZqMnJTMkc5UDJVSjhkM0V1TldmWHliQlVGVnBIa3BtQ0diOFVYRjc4RndBS1BFM2dHRm8wbFJTYTkrTjF1cXJDZkRpOFd5SktxSFhXd09CdWRDRGdmRVhTSStBeFArZTZ6aEVhVzhaeXdQTHdHR3dndXdpN29QSWg4clBlcHlQb0twTUdGN1JmUE1vSE9ib1FpcnE1RjNmNUFsTWllc0lhZ2Qra3RKMWpmM2xuMDdlOWtRdTFZK0tOOFJudXBiRUs3NndiWU9BUDVNWlhOTklZMWFRdlFuNDhHUEtVckFtaHFXNnExWVNZWGNrMDN5c2VReTdxR05VSHByTjlyZ1l4azhLYnZOcDJNV0wrM0dVaWJCcVYvL2NWZFdGaEtMQm5PUDBQZ1RRTFBIbHJISUF4bStuY016TTFKRGF1V0w4RWJrNFVZcjZGK1gweE9oYjRncVBNQ1FyV2JTNG5TeVFWZU9wbkQzSXZlUHc3eWJFRXRNVTJTUm9waENOaXI3ZUIwS2ZJNEZrMU4yd082OXBrNnVJQXg5Q2pFcXZ2WVVOa3ROeFRZU3gzWVpHdWM1elBhZVVGa1o1YkVNWk1TOXlSOWMrUmtlNTgvdk9PMG1rMHJYa3JlNFpTaVRwNWhwejNVU0JFUzRPUDFHQll2eitndWhTaUJSaXNrRUo4MGNzSUM1UkU2cXgyRThVQnc5SEJqOWRSV2FlN0JzTHVqdllzK1pqUlVuMU53bVkrV3k5VVhBSUVLN2NXb01GNDBJcDdKMFlkaGRPU29sakNLVlJLam10ZEhtaWQ5SERWV2l0eHpVakxJUU5UM1lIRWpoQ3o4Y3FtdEUweXFtT09MakZaUjlGYmpFTWpzSmlFZFFKUkEwOUs3UnMzWjBpNkZOTnlrUmpYeVRzYXgxVE1yZEwvaURjUFRoNlBtNnJiVDlJTVBRbThyeE50Q1FMc3A5QkEwQ1dkR0xzQjFwQkFibjdqblJzZEoyYmNjblI4V3Yzc002RHZuSkR4Z1JUUDhKV3JFR0xJNkJucklsbnZoL0MyT2EzOTJDemEzaU1SVXJ6K2FIOHd3czRHUlpxQzlMbFZYWWJaUW40Ly9WODdjckF5YXNsMWoxZHAxVUYvSkVQa0tTQ2MrWlRJQzM0VWdZdm80bVowaGl0RCtaUkx2SUdqd01QM2JBMmZNZzN3d0h0QTR1SW81cXliYXVtVURCTUlWV0N3V1FtVlNZa3RIMnM4eTl5dWdRMW5lWDVLdDRNbGZvODNvZmhxcG9Nb3AyeEdTdi9XNHZtRTF1TVA5T1ZLMlVJRjJCS3pSZllBUnNBanoxa09lUVUvT1B6bC9hS2cwdWVoR0Z4WTM1VHpMOEdNVGgxMXZWODBpVG1MOG1UbGZHYmwyMGIzZEUzTkJMYzRYbS85dnJpUnlQMW4yTC8wM0hvb1plcXlERjRPYmw0blZLU1FqYWdhSkwyWkpLdDd1UEFLV2tyM3kxRnZFT1RnaVN4bit2T0k2NkVVS2FGSmhFN25acmV1WVlId1RRaityU3VCTFppRnpxWkR4Slc4WnN3K0hIcmVLbldlVjlKeU9KNVJENnpBUlF3RHpNRjZlTmdDOUtFRjMrSzIzWHlZU1NaTEI1S3FXRGJKYmM5cWt1SnQyTDhHZllkOFo5dmdPVzBZbzd6TGIvV0dJZ3hFOWFQMHpaU0tyU0lpTDlYZG85NllPVjExV1BMVGJKWGJ2NzZocEJyZ3BxZ1pReTJqK0ZDc2IrRUFONW9BNThtb042d0k3aFFYUURvRWZrNVgwbS9kNE1TOXc4NkpoVnFnbDY0Rkt2eWgzSkk5SW0wY2QyK0hXbFNQL1czR25xRzJ3eS9IL1ZBYzdpVFpSbXlLc0pNd3d5aXJIY1UyNEJ1eVF0b0xzV0VIdmIzYURuNDFXQUJON2l2Y0NDTUFqdFdMbWFkSTlyOGlpcCs5NHpBMm96b0JBeFBFSUZhUnc3b0tqbXkrbUYzUTRJZlN6VTZaODZVWFlOd0lJbUJrcVI1aG0vcW9hWTlVT2h2WDNEV2YxM0VsWUtCNWxFemlkRXUySjdDVERiaUliSkE5eVNZbjlkaXg0U0diaWFWNk16SFlKa0RCcjNNN25NVk5PTXlZWFlWQVQ5ZHZxdlpLN2hjTU1UdXBsbitQS21GdGhNR1EzRmZURnA3OWRyaEkxcUJDQ2F1WnM0RG1MVy9nTjNnNjlTbytYTDN2cjhuSkIxVk1GNXp5SmRCb1JHZkdmS1FDUGV6SVE3aHJ1d2JwOC9NV09leSt2bWVzbTVRdFJWNm1YMjBPbEtiYkp6cFlMb3kzRHhBR3Nyb3NkK1dlQ2VobE5ockFvZEFSQ2JIeUlieXpFTzdmdlhpMm9qdTVNb3FPTGFiU2VkOEN4MEFMNG1aUnRPR0ZkcVBINTRlL2NtUEVCMHFpSUxJZG90enN2OGFKL1k0RTM1ZjJ6Y1hUb1hPbnNSWTEvVm11dWNPcnB5UnpNWkJLMWFVdWlIVU15cEVBVXRzdWVaZXJ0WlhNaE5KOE5FNllkZXFESDV5WE9CMittbytVUGx3TFRBbWlwMWRQS0pRTGdWRzZnbm13N2ErdTlaeHdYWERYZVlIYzk4NUhBVkVmb0RqNHJza1ZxUGova1hqUDlISHYvYkNkZW42M05sWjVram91V0FzN2VrNE9mQkUvN0hZdzFTaFYwYVFyOFM1b2JwUVA0SWk4UDltclA4MXBpOUVSSTF0RTZwV09LY3NhRzZEM3BWcC91b0ZiREV1Ym9GR05CUm9FWXp1QzloWm5hR292dXYwVHRIR0xFRVNWdHQ5NVNnbFVrTHNCK21uVmZRMG5IZkxxRnZ6UWM5a05iZzl6Ym8rSlIwU0lGSkk1bndRSUh5NEdQalhnQVJZR0p5eDJRTm81Sm9GWWpZcHRHZDRnMy9SQ3RQSXZiTUZINVJFSlQwYkhLMUZYOGpxVjIwTjljMW8zRkxoWjJuZjNFSEc5YUptSzdSOWNjNzJhbVlyMnZnYkp5SitwTUNQWmRhQkJLbDNRWkVwQWtjQTZXNElhV1dSNWVPTGoyeXUxdTc4cGNjcnNnOXRwZEh2aURHUHZTS09tM2lkZmdMQVRZOHNyTXZmdWx1cmpzd05KK1lOV3prVjhFb3NLMG1BMzU1aVJmaUUrZmplK1hqVUYzZDk0UlNnV1pqT3c0TjJJc3hjeDNQeWozL0JaR2VNL1NtQkJXMmFVTExlTEgrelFjaTRMREsvRkloTWltWWp5RWJYNHhnTjg2Y3FqZnBqZEl6WG9oZWl5M094cmpkS1RMSTRDc0pNanNGclRCcTdHWnNta3VDQXBLRG1OVDFzK0Z3TUdhMDdBM0MvRm4ybkRUNjY1Zm9ZT3JRMEFKWVJiVC9ZVFNMdHJrMVBXWDZjdHdHWFAxWmROaDVObFNIcGFUQmlVNTBVck1vVHB0NmJReDR3U3hSemI2SElQUFZIR3RGMjJwSDEvMTJhSFdWeFhLOW9hbVBoamVFek5NdHNQRk1qMnBxSmEwYWV3d3ZyRXpTdTQ2eDhPNFNrZ3ZYUW5YUnVndWxNVzc3aGdZQzJjejBrdUgwMTJaUy9LOTZFeTlYUzV6QXlGV0V1YkRjK29aMmhnb1lFTDZlWkNPVzZJRFFsR05Wak5KeTFGQkFPV3RuNksrbTNUVDRWZ0dwdTJkL2FQTmY4RjFmcUhDNGlWVTc5K2lhYkw3T2NKK0ptWlp2a1YrSVFQWi9ndFRHRW1IRUxuOVR1MW5NVkhKR0tHOEN3ekkrQUZFbDE3bnhQTmVmTWFsMUs5WkkwdllKRVVmcDYzbXEyMGVIcXVldmd4Qm9mcG9hc01NMVY4Z0FKMzRPaWFpRU9seGFUV1VuTVM1TFNma1ZrY2w0UnRrOEhTSlc4ZWk4dE1ENlUwOFBLNnlLRWpIWFhab3JmdWh3cDc5SndpWlhkZFMwc3R0VlNrZzRQOVlidE9VVm9qT04yNGdRN1JoYVNMZzZ2QVNaR010QmtEdkhlZ2FXRTRRZTJhNE9IOXZNamVlN3hxU293N3hhZmNTQUV6SnJkNVFYRnBPUzYxV25UUlVmUHhXVHlRYmpXMzZRQkNDUnBsSnhxci9LeUg3NjNEalYxTXQxN2JXTWpjWWZicVFFV0VwZzNVc3lzMWJQL1cyYUs3OWdVNG5VN0ZaYjMvV1p1SHlXV2tqWXhYYzFUY2crOWxUZ08wMGpWcHQxcXJSVjRTamlBTmxjeDF3Sks0RTdLTVpLd1ZzbXpFRWtmY3pXdHhxOTk0aXE2a3dMNUFXdDVKZ0NRK01jdEJadllPajdKMGJvaW1WUVJNS0tYLzRHR1ZFUVUwemJCQ1FyQkFSb05wYmVMVmZtRnR4RThmaHc5eUZVdUh0QVJEdVVodmViV2RXM3gzazFwdlQzdXpnd1BsY1JoYjlrdkNua3UrclJhOFlxaGUxRUZlZzVGVG1ubTZNV1FFcUpYbjZ0ME9jWlZNZ3VrWFMvelp0dGVVOG91dTEyYWhyMFMrTDNRMjVaVzJNeklVZWZZZGZxY3dqTHJxd1kvbk8xdWdHemFFeG5ENW5tNXZqREd1R3FqWWNobW9XSElzWXpFS2JhWEZlZGl2bUR2OGU4WGxicWRoM3o1eWdKRDlYL29qeTh1NHFYMVgwdHNRdGNSRVF6VW55Q2NXOWhLUWVkR1ZkUTZ1UkFiekRNL0g3MUowRzd2T2RucmMvMTdOOVAxNnJXQXBvTDY4OUhSOEh5Tm5kZ3FnckE3UTNhaDNHcGpBbkZkQm4vWjFLRUZoSzRTVXRjSW8vQXdoRmlIQ1ZuNkFxNFUwZFlhTkRMUDZ4ZUdjVzcxQzdyWXJIdERYc3dDOGxwNW15RG53VGdCRW8ybTUzMXlSOU1pWkpDYmI1M1lVK0gzL1lHbG1WOVlpWmJ5SXJWOC9JbEppRGk1bjFWaVFURFJxaWFTdFF4QllkQk9sQUxGNEk1V1N5UWwvZ1lHT2FZYW16empiWU10N09OaW03UStpNWhHS3VRNFpoOFVndW9yR3pMWnNnRzI0TU1EQXpJYVhHVjJ3MG9QQnJmWWwyT29NR3ROQm04NG9GVW0xam9RR3FvcXNWOG5ieDBabGsyUzU0OHk1ODJrNThCVnd3T3ZvMEJ3NGNKSXJ3UlpTTFFjS2hWM1RoV1dLS04ySUhoMjgwbS9hYVJ2WEdWWHNrV2dEcmY0a3hJaDB0ZktnWkJZUmpYS0tZY2xydGRWd1pENHVNR2tCWHVXR241c29VVG9xa2ZvQ2hVbnlUdXcwemNKR1orUENPaW9yMGp6c2x4MktvaG9UM2F5RnVtdmswazdtcXF3YldNUEFWVlFQU0dYNk4vdzZEYSsvVE50RUg1SkpueXFnUUdTLzI1QzdtYTJXbXB1aHNQRDh5YUZNTWZMNnB1N3JPVERjYjFNeTdVcUk5bHNnRndEU0owTHRjR0ZnK3ZDRUNjRG5mOHRydTRzYk8zTEFUTFcwZ2xLOWFVWVV6U2Z6Qjl1VWxDNERMMENjQWV6akpnb3NQaGd6VDZtamJQaUZlaHgzMzJzcGVJd3NDVjN0UGdMaVlkMW54WklWbGthalNvWlZZVXpXVWJzRUxGYU5jWWxMZ1ZJTnZkMzcxVjd2clRQSzNremdWcHltT1Rqa2lqQ3ZaMS9CVDYzeTBJNVZ6S29aSS9sK3gxaDVUTG4rT3RobXU2aE9aVldIaEErRkE3S0wvYmRveWE1UlkrK0I1ZWwxU0NkNjZoQ0duYWpXbnhJbHZHRThraE14Y241ck5DWnZybktqRVNPTTdQYzU3bzExVTlRZFl4ZFJ6eFFSczhPZTRrb1dYZUk3TU9tQ0l3S2FxY0cyWVY4YVEyZVZsMXFMUzIrQmdkRzBPU3lnNG1SR2ZlaGxFUEZxRHc4OEM1YUhzVkpsbTRreFJ1WEJOTmRTNnBkeG1wOURWYzlTNkxiSVFqVTFxWGh5bCsxeHR5Y01Wd3daQzkwdS9ZYVg3TWowc2lYczBtZlZ2TmJBdGdHbWVwb3VYRGYzRC96MldPbVRiR09mbzU0cHhSYU9tb3pDNWhsSDRaeEJFVHVRTHpiSnpYelduRkdnV1Q5d2Z6UmhNRzRHNDBSaVZvTmQyL1liYlVRYXR1eHIwV0ZUUzNuWmFOamlWaW5rUTgxUnhOeURoUzdBR0lOOWVmSm5aQWMwRTNZS3pNMUF0a3FzeUJDSlhZZGRJNkJoKzUzRkpKbUNNcVlEdjBwK2NTUGtuU1ZzekEvRzljVFRNd0RrWXlTUEZXOWNNY1NXL09Vc0RMSUNxUGprd285b1E4ZFBsK3ZJc2hlQUdmQU0wb2duay9HT3JxRXBxZkwvZGhvVnNxUGV6TkZGbkRXUlArNFF4bDZaUXFRSkJBa3BWRmtlUHh1SE9PV3hXSDYySFVJMlZESUR0YzNydDJUU1JDNGVZb3I2TnFhYjVhbUZSYnl5ZCtIQzhsOGZVd2VJT3pqYmpIRFJUYW9DR2ZBVzlHMm51Z3QwVTMvbDJpbURCdW42dDRhZCtTdUk4bmFiaUpBeENhbFA4QnMwdWgzTnFtSFpPY2VnbDQxTFpCQytkTTEzRUFRWTNKMW9CRjBSZTBZc3haVUlBMldOV3dMTnZIQnpOLzEwdjB1eVhyRzUyVjBvZ2dCYVRDQTNsWnhTZHJEM0xaL3c1L25zMTB6NmMycTRRb0FvWkZzb0Z5SGtFaFJHTGd0T1YyRFUyZHRSRTNFb0tEMWo4WDRxUkVyWWRjaFU0aXhJd0NsS2QyZGY5cTRob1BaNEFaRG9RM3VMT2h6NkJFTG5yZ0RLQ2JFbVVUbVZMNll3aXBYMmlEN2ttTEFLeW14b0tabUZNdm81a1hpdnR0TDVzOE4rYTRoWWZXMUJiUUVRc2FkT0FEYzYrZTB0Qkh3L09jM2w1aEJBcEo3UDMvVnlpSjlmdHpqd0J0OXcyTTRvMTN6UGdubVI4eDJkNHUwdHMxelVHREF5Z3h6MFUvVzA0MG04dE9Ldktpdnk0UkwvdHZ2ODRXSlpJUVZEWlhBemJ0ZlJOMzNpdnk5eGRYakRmT1RYQUo1NC9XMGlCL3RNbzNZakFLYktKWHlIMTNiK3BIdWE1ZzZpMXlyZVJHZjgwMytXMVZYS1hQaWNHTytwLy93V1BQbTZHc0NLWW45d293bFJKK0FzVXkwWjdRdmxSaVJWcnh1cTNNa1hyYi92NDA5NDdpKyszNjRPY0loTkdEeU5XRk9pSGhlUGdVZ09yQVdyTzdCWmc3SUc3TnRhVU5TUWFkV003bGI3R05Ic1JxTTB2MHBRZG1PdHc3OTBydmNqaGRhWWVua2M4V21CVXFYSHl0UFRmTTR0QWhCL3VpMndBMXVVVHU1YW5EWVJYTUI2bHFEVWdlaWR4U2FxZC96UnBqYVhDMER6UU1RTWtwYkZrU29XMmRhR1lzSGdHd2tiSkRCUGI5UWV1cFhzVjY4OGNadkR1eG83SmtwQXZMa0dqYVhJNW5XV2VZZjBSS0M2WkVDSVAxZHpsOVo2WHl2WWxiVGJPK2h0dnQ3WWtDNzJTaC8zcVZIQnlzQmZzYVdEeVVzN2lFTHpwWmlEVmdKRUgzaHhVRVJQeDA2U2FkVWh1aHFXTE5Ec2Qxamp0Wkx2NXVTOUhKTnVCWEhSRDJrRU5MclJYWWVoMGVSY1VHVmsxQVFSd2FVSXRISzRBY2tVUkM5dDVmcW9sT1lHV3RvZmx3ckVJcnhRdkdsNnEveVZKY0N5Z3hCb1BTYnFMVnl1bjJzV1Y5cUFua1h5cnhJRGtxQmpxSFUvUnNTOWl5cmJ4M3N3eG9GYk9leHl4a1pWMnJINWtsTGJYTU56R3ptMlFuVkxCZFRqaWZRMUlJWkRrb3hESEJkbE1OYUdvTkthbysvWlVBeVZOMkgrcVc5di9WS3hCa3VXeWJObTBJSnBnTUEyVVcrY0cxYmNpQ2FVK0VYVjNmMWM1Vko5RXZmODllajdsVElCS2lKbDFJWDJoWHNuWndibDlOYjAwekE2RndtTFBWbjVmZEZLMEg4RG5JVXFCczJjTW53ZmQ2b3o2TU9mWklER3JLY0ZqUWhHSDl1c3hiTkdVVUNYb24zdXk2YVZHZU1BTFBhSUt0dy9kcmpTUmlIUlNxZXFUZkNGUVhwQnlNSlVxbFBCWlJiaFlzdEI1am1IbHBTN05ab0F3R2VoNDZPOE1EeTBQYzNyRW01L21ta1VJZXdtTjNwbGRqS2FqL3pKeXg0NW5oa2FrUmFZZmpSYjNsQm5vUDk1dW1TdldLVFhrazl2RHp0TkRpZnFKYnNET0VqajV6MHl2UWZMK3N4NngzV2JNYk1IaWd4WjFDL0FpaEhvRkN6Z00vUzZRQUpkMHNFV3UydUxkWmM1Z1NTU1hYdEhrNjlFYTc3d0pRbldMSlIwUUI3dS94YUlXaGdFRWp3WTMvak5rZ3A4MmU0U2U2NERaeU1yb3dzWFpGOVJtVGFlWFFTZFBrQ1Rmd2dsU3UzWHF1TW9UOGoxdkdYMUhtYUVzR2sxNURIUkd3VE9aaVRBZVBIdDRUTUovWk9DaXNVRUpaVnBteXk3S3E5RHdSWmtJcExBelhhbDc4ckFWWjlDQzdLd1ZDVjNnS3NvbGVaTmJ3RTVjMk00YzVVV2lpV21jNWE1YWNqOFYwWnViTHovSm9ldmZaSXE2cVJRNmtsSTFPN0NRd3lrRGZEdjRYZ3VVald5WjhtNGdFeDVhY1hkVzZFd0hxQ0xkazlIaHlwb3Y0ZHNQdjhuZlJWSy92cDJZYTZQOWNYY3VqZWh2MjBramZnQ1poQnpyd0dXck0ycEYyOFRHaEdHMXRZanN4bzIrdGl3aHNXeWg2ckpMU3ZCeko2ZEpObUZvd0hhS3YxbFZtNkxZdzZNVGxOSnhmazc5WDRXTVY0ZmkyeXVKSEVoVzRQejArL3dEODIySGNHeUE1R20xVTRZby9CYU5iNy9waThjMmV0VTNXTTR0b1VpQWNIU2N4T0c4aXhYdnBtWi9Ka1BLWGxiTEs2YUtrcld1ZitwckxsYXBDWHF2aDgxczMxWmphZU1xVmNKdG53Mi9rVi85NkZVRnlCbHg2YVFkNUE0cXFlQUdZdFlvUkxJVDE4RFRUaEdTa09uZVVpODNaeVBZbFB3d2c4SG90dXFQY2lQWlJuYkZoOWtOTlZ3c1V4anhCMzM1VWI2amZXcHF1czZXOXFMMDQyTGswL3B3WEtHL0djc0hZdWk5QWdCUzdKSnIrSzVlRUlvK2RBNllHWFlNdDM5YkFIclVJKy9ibVNwTitzS1dVREFoR3MwdkJjU0N4NEZzcWR0VTJ4djdjZkQrUFpsR3JZKzNNeTF0Q1lvTDU4ei9BYzRCREptWFo3U0l4SGRIZytGNnNNZ0ZoV095WEVockd2R3NDT0lNUFpnaURHMU1CZzFVOVVsSUpKNFVoWkZBaUJibXN0YmZhRlpQbzVpN1B2VFNaUXZFN3Y5Mnl6L2kwWFRycG54VVZyNVNHam5UOW1leWd0OVFKWDllTUhOempiR3J6U3dTczdZUFZyakZNSHhpTTNLZDJoVzZlRTlUcGNNRTAxTTdKT21HT05HR2xMRHkxTW9vUmFselYyKzU4Q25oSktjR3h3Kzk3SFpxZHduU3gxcHNYK2lFVVRVd2wwY1hiRkdWUko3YXlJWmZ5TXl6RFpuZlJqT2MxM0lXZTdTYXFFdWlNenAvaUR0d25PaTFoL25mY0VvbXAxMFc4N2tMenNaS0JyNldsQWwvWjV6Ui9Wc3ZSZkhVaFJjYmg3bDR1NUdCWnBCM2drNzl2WjI0b3dlSFNzeExhWEl1N25JRldKMWJtZGhuTnNRNUFWVzZncDY2Wm5PWjVOcHN6NkR1MlM5Yms4K2lSMDRtYzIyVjNPbiswbThNUVQrSmNkaUhTYlBZZldOTEM2d1JHdFF5RVYxczVHYlBBc2lHNDQzTDRROE93LzhQaHJnZWF0UVRJOTNvcGoyZk5uaGlkdkxMTlVWOEJWWm4wQnNEbWZTUHhuTncrMUx6bkNpZnJvTEN1ajR0aWN5amg1WmxXckNzdGh2NVF4ZDdBN1h4MHgxWUpWVUgwTDNZZkRQVU5nTVkrTEsrWTkvUEl2anZObC84b0pxRVdWS3VvRU1sUmhaK1o0Y1UvUXlGdklUTFJSdVZQZXlabHV5K3h3empSMnJsenhZWFdncVhkZ3BKMU9LbjRselR5RkZxZHl1T0FnOFJwbzFldlVSNk9iY0kvdVQrNzNoNmVLK3MwV3BHZitSUUJCWklFNWRvbmFiNVhYdGhDMHNISENNS0MrdFM1Q3lNcnJhVUZHQTFPYTBIUWFXY2pEeGN2NHQvbFFDOFhTU3dYQVZhWFVuZ2lHTXlzNDVsTEUvMU5kK3hhQjN5cXdWZmFpcHd5TnBOdEN3bmZtd3ExWTZ1a3BhcmZ2ZzBaMUt1S0JWNmE1V2tGWlRNVDdjekFyc0xOdFdFQkQrNXJHVmU2RWxiM05CaEZaTlRrWjlEc1BuY3kvdnhBWmsxOXlrYW40SlMvZE1jNU1WRkZpZW9mUDk2cTZkbStzeTFUclRtUFdxSm5ZbXdVRDNzZzU3czIrbnkxNEEzbzlzSGgzbnplczFOcFVLempiL1QrcUVya3NtMWg1ckJpK1J1TTJuaUZvZHh1M0tRWGZoZXRORUhqQWE5SFk1WTVjQ0ZDaVBJZ3dacmdnbWpKSlFvM1J3K2RId1ZiVjdSUWR6WjNpN1c4UEl2YVErZFVJUGxhU1NJUnBkNG9jdTM0VWgzdDNmR3NKTUI0cEdWTTFQNnlGOVJuYzJEQ3hsaWx2SCsrQTdyR1hlUzdoaXZEWWVjbFNWWFh3Yk0rSnRuSnBCRXRocm9BZHl1SDdWNVRObU1hUERMYmoxZFdtdnZGd2hvNG5scVhUa0dNTnRrbFJINjlleVMvUTVtZmhqc1RVRUFNcEFFMW5CVUJtMXRXbGZrVUFkWFFMQlZ5a3pqNWQyM2N6aUxFbG85TE8vYWdXSkg0RWFtaFZXTC9CRjBGQVRha0lOUWt4UnR5M1ZGL3VtbDJXQTBVT0VHMjM4MUhYeHZFNXViYTQ5eTlKdUgyMENqRkxjc2YzWXoxN1o4Tm9GNStLeVZ0R2lLK3owcXppek5uUjJvZkd2M0czMTNYSUFRNHUyY1JKSVhaY2tRcmVqb291Nlc0T2Fnb3paNlhyQXkyTllJOEZ6bGpCaFBwS3NwUWRMQTU2d3dSbkxkWDdYc3hyZjVTdXlwTkVNVWQyQVA3NnJvT1R0bGRJOXkwa3RtMWp5Y05sak8xNFRNbVZ1S3ZYZ3ZUTXdNaVJ0WDNFU3YxazJqQVpsbHREMUN6UkU1Qmp6b0QvQ2UrSW1Xc0ZRVXU1TUV5VHNBU3g3dTk5akZUYlVSc0FvZndRYnIrSk9EMFU3MHF1dzhpMWpUVjVIZlQ5cGNqbFQvSnV4SFJ2NDRJaGZlY3dKeHhVOGh2bUFaSFhTaE50eUkyZGVwdllId0ZCNG9sRkdYU1VyTmswdExrV1NaaGVrZzI2TElyZkF5ZVRnaTV1L2VYMEFBM3dmaU5qUmZtMkRyQktMZkRHUHZudFRtUkE4VUhsVnJiUGV1NGNpcmgxV2NGTGo3M3MrNUF3Wi81VUxKMUdQc25EcFhkTkZGSHhNdWdkTDNpWHdUYlpadFd5em5GY1Q4U2pLL3dUZHU1RVk0OEgrVHltL0RtUHRkdmVzc2d3bks5Rmx0NFZ2YWtaQk1ES3FSSmswcjFzcGV0KzIzdER5RjhhcmtCTTBoamVRL2dwUWtBcGhEdTQ4eVZTZUhtZFRtQk81L25kRFQzcFl0RGxCKzJFNDIvTlNTK0lmN2FsY3dGL29PSmhDd3VGcnRUUE1FUEdqWitwOEN0ZlNRc1pkbitWWCtiM0FxWGhCMkhiVC9PTmtzaHlDRE83dEdDcDFmRHdIMHFvc1hNYmNuN0xzOCtId0lRaWwyWUVMOHF3cDFwSU5lRzZ2ZGpDbmNMb3hBUFAyVVNuZVROVmVDMFBsRm0vTXJsbDI3MTZpU0hoWkthb3k3OUlPQmFab0k2Z0FnblhZZlhQamZMN2czdmkxS0Q4WTVqMWdCZUQ3aUMxZkF6NnlLK0hiQm9RZ2l3Y0lOVUFFeEV6VWYxT04xK1BzRGpobUJuV0h0YlM2elJtd016QW43TVd6OGdzcUtoMUcxNEI4K001SWp1Um1ieitNcjFFNC9wZDBBdFJGZisvV2h3cDBZc1g1UU43QWcxQnRpdkY5NDRrZGkrdVEwWmNKLzBsdlhwZ0ZZRldmemxUT29JelNKckx3aGRWQ3VLSWcvSUpZaktMb1NMSGxSbDhjT1hUK25TNjgrTXBXb2lQOVNrRHMzTnJlSkdwQ0dlZE13ZDRXQS9IMXE5aDE0MExpR1oxM3NrTU9hZDV1endnK1FiSlhoKytRdHN1VUhoc1RqRDhjckJBR2huWGk2ZzhrZUI1cGQrbVlxcHRKYmowOTlkbjRLd2d6bDduUmtjR2Z4WHhkTFUvQXJmVm5TUFRpUmFsMGNDQTdCTFRTeHZlQ2txUmZHcFYxR01sb3N3N05yVmp5SEpLOEl1b21VeXpGbEpFY3pQOXAzTGFCRmZtV0J3WitMRUVZR2krYXlHVUJ0dFNoWVZFaHVidHh4QXJNNjlDUTlLNDZzMloxbHBlanVYbkZ6RFZjQ3pwUWhqcjY2T000TWVVbWM0cW5FTnQxYnczUldMS3Y5RkJKNGZVL3Y5UE16TExZT1drb2JmY1BXM0VoNG4wWjRGZ2JWT1hmMkQ2QkV3WVNGVmJua3puVkMyMFBRMkxZcTdBNFJyWVo1VnBuTGliV0VLM1JEUjZUcWRSR2tGWU5tcXJHYkJNQ3d3bjBBbnEyRVljSy9MdzNIaHJ1eEZZUVE4R2Z4MkJQSkpDTWUvM3V1azBOY0UxZzR3SU01NEpodkszTE9QeG5aY09BZnFZQm1WYm13SGJ6Sm82Rkl0aTBUbVV5ZTljazRHbythZ0x4SFU5bittTzZ1bUdkeE9aN1BOT1psS0syWE1SRFhGbXBaVndXOHk4Z3UrckErUUh0Rnk4cmFQZEZGV0RVTHVocXJFZ0VodUhZMW1PRTJ3bGcwS2JmRGxaOHV5ZXBsSDNQVjZJYncvU3FLTFlyYjN5U0R0cEFTREVja3dPRDZWK2FPdERsZzZPU3JTVWwvaUJiTElIYlhMOWpDbG9ZQ0pEWGZjdXhvNkNhTTU5bVVJVGt0ZGltNmc3d1Y0cndxWmkyUk1ua0UvMDBTeDV6UkRyWE5ZckExY3hpWnVvZzBSZnZ4bjByWGJ1NWZqb2dUd0MvV3FZTzNiQlJjNzRia0xCVEJJTFgrcHRGTWlBVzVod3gxY0JOTnkrTG1Jdmt2V0pmNEk0c3hWZUtNUjVkbjdyM2tGY25NV2RDd2xqcHY1eDZVc1huc1Z4NHhEc3ExUUZ1YmZndXMvTEx2SkxXV0lrRFlQSUZjTG9IN1ZVL3daYUtLNURGYlA5ejdDV0UwZXNSTW42dEg4OWlsQ3hlYjdXTWNsTTZ1Rlh3S1ZsWnB4V3pYREZDQm9IVUtmOTQxelc3S2ZjUnVJUUhhcmdVTWtLNU15elB1aWZMNTZQSXgwTFBtZGFkVFUyV0ZsMzRxZm1sNHN1UFhIVDczUkNJM1VXQmxlWWd0TEwySi9MS2VIR3JVR2dXL2ZvUDIvMCsvWEMvTzM3d0pwbXVLWWlyalhpUEpPRnRRU25CWE5yUllIR0VxOHdsQlNacllQOU1zYnFVZTNlbkhabmVkYjdEYSs5UzZSUmFUZmE2WWRRYURFZTBreGQ2KzJtLzIzSkc1TGEra3gvTXpRdVBoUE1xYXRaejBtVm96djBIU2dBbHV2OVJHN3N4OWdjTVlBZ0U2TDZ1YzZ1MlRPak02WkFueUlkTjc5VWtJaHowVkpuakNUQzFYdW5mb3ZwUjg1Y01zU2RLMUp5ZWtxTmdDcHo2YnpJbUhvWkdLRGgrWG5yVnBldVpQVysvS3gxY1RZYi9MLzNRTnJvaGNMRmlUMUl5K2NZK0xuSEtYZ0I3cDdCM21qT3JGRVI0Q1JhUkpFRDlkYlREUWswdGRpaGljTno5US8xNjB6Z2ZGN0pTNHdxaUJ2R3NjWDVGL3VkTXNPVUhsSmY4VTg4VE1QNnNhM2VDYjRNZndMd04ycnBOdXpwbmJGRDR5RndLSVh0RExlZjg3RUM1WC9vbnJWL2MzL09wdCsrTER2NkpRNm9XeEE5SEZqcE1qVlU2ZDFXUWxsYXVJN2xrbkZIRGczL0RXNDhXVm1xK3ZTQXJsenIvOGs5WEJLR1hTWEdnUlVUeW1ESHV0MGxGMS9teGpzd05qMk5GK3MvekVkV2k2MFJSWHhtc21TRnFxODkySEdVckRMbG94b0dWWHVUM3N5VWVPZ3NRQ3RQc2lVU0hxWHBycXBuVXZkaEZyakN1N2NHMkw2WVVscmxqL0Irc3pKWFJXamczZEZvWERFMzhKdGpEaDJJTzdLR1FkL0FKT3p6WDI3TnlKcjJMclpTaDMrWVZmNkdsUWdManhTbXNLNDNrMHRNN3pKSzBDL1QvYzBNNTJSY2NXVlpJeG1OZGlXNWUzWEhWelRGSEl6YThRVlV6eCtXZ29ZUTZXVTVhVTlaSzhXL015ZHlkc1BTaHBBREhEL002K3NwMnNCUHBLckgxcS9IdU1GWHJBdG40bkJoZzM0NDFjdnd1bzdCdTFTTlpRU2FySG9pVnFNRVhEQ2JJZi8zakxCWjZNS3k2M2VtejhHaWFJbnlCSGZYSU1sdU1XNlpTSnBvVnc2RzRYZHdEZ1o2TEVLZ0Fqbm91dzRLeVJ6SXNhYTJqMFJJSVFFVm1mNWplR2ZYS1NUL1VJMElQMy9Vc2E1WE1pVEpOQVMxYTJuUXd1RXM4T0dvTFREMFRSN1Z6ZG5UbGkzRnNGNTNaOCsrSHhuL0JSeWg4VUNLL0hYREFNQXB6djJFbHlxNlhyN2o1SXlMQ1g5aVhwOXZBbTZlcTQ0WlZRRUpaUUdaQU45ekNYSDNOWnJNL2FySXBtNW9TaE5PdzRMNnhBK2NtWkdHVWRpOGRodDI1Y05iRmRQSnp0TlNiV21FMEVKLzZHM1BiWEpVMEtzdEdLbXJXRmxSSDVjRDRGd1lwWmV2WFBjc3UzUk9nSC9KRDRpVDgzb3FTK09ocUFBOC8vT0poYnFuYytlRXlCaU43TFdtREJqVGRqbHA0bTFHcUtzOFNTYVVLL2JIdzJGVVFxcEdac2JLQ24xTHJGWXl0MTM1SjZjdjhZdDg5S1dhVGdDa1hVWm1JeEdhcVdEay9aQ0V5bU9LdUpaM3BZandGY290T2owb1pBMVJvR2FDaSs4MHlGaUtBNHpVK21kQ2ZDaGxjK3g1YWRET1FTZlM1SnBCdFpnTW1mTlhrYmJYb3hlR1hpRjV0SjRXSXNCRDRWUXorM2VSUjdvanJ0aXFwNzdsbjRzeFRqQTdwazVSajg4bVhSSE9mb1J0NFBmSktiOWNkM1REYnpjcjd4U1JNUmQ3YVlsbld1WUF1TTFlbVptdGd2VUdjZ1JtNUdNck5XOTdXTENhd1VvcnZ6UEgxeGxET1pKWDBZV0VzUURhZFJOYUs0dERrRnhVZWo0aHpTMW8xc3M1VkJNUm45TElyWkVjcDRIaVdOU0JGUFhudEVPaWNRK3M0ck5RLzVmYUI4bTgwOU13TzZiVkhrRm9va2xzbmZzY2ZxRGtPTHplamFGNkQwSjdQOHV1aVc5Ry9vU2ZJeStudVZVdkpFMFRuVExSWnMvQ28rWTcrckphOSt5SUgzMDloV3NvMmFmRjc2Z3cya1cwTjlkeXJDcHdoV2syaWJUZzVrZDVpcjNZeUhUcGpicWNPM2xIL2gzRDdSL25qamkraHNPTE84bm1kbmNRTEdhWWFUUUo4dmdNU3h4M1FaMHhkZUZYemQwREFucVNvNE1jcWp3bW5mMWp5a0hvMXNDWU03OWlMRFNCbEZjcG0yOFlKb1RQaFFtYmp0c2lVaTI2c25DYVU5NnNFbVpaLzYzaEN4cmJiUlc5U0duZzhLZUxwSDRJWCtqVTdxODBMSUpvRHVpWWpzUy9ObC9nMVdwK3hVemtISkV0TTRaRDlOTG9ISTdNVEIxTVFianJOd3B5VndNMXcxOUx0a2FNUUtzUWNZOWZmdWdzZTBHMkk4c014MW9QbmpFY2FMTFVDbWZnZTRFRGNlWU9PSEQ4Wm50UU5rSUpoaHp5L1dEa205K2VHNVlneDBtK2hnSCtEY3pNNDM5Yld0RE1ObC9mWnRnNXhRRis1WjBPZlRBd1NDOEFwMHpWSExOMHpYbTVjbnpZOUZaUG5XY0pCNGNvNk5BWUFIM0lpZk1HU2gyWnFkNCtWVk4wSjcxNmpQRVpId0FKbCtCdDZDdXhjRERlTkExVEo5N2J0ZUFFMGdOS1REN05pQWhtZlFkK2w1MzJPcTkrWnBhbWNmR1NWVVhVNnlQbUNGaTY0Y1loVDhyanN5blZNMGNWR25MYWlvV0NTZHBqSFVrQ0hNMHk5bEkzczEyZ3lEdC9xcmthUkIrYkhLWlo3TFRicXpLWGJ5Rm1KUlRybU10MVZpZE5iQk5Da3A3ejdqY1BWY2s2dDZoK210aHBEc0MwcG1GS1k5cWxZLzMzbGNTQ3pEbXo2Ny9raWt1UTkzRThoT0xMeW5ObVlRT3FWYUdmZ0V4UW5tYmxVOHh4aExUMDRqVk1UYjMvcVB5RE8yTW9RYXE4dUNTdWdRVW1IeHQyUFRLN08vQ1ZTbWh6UHNOb1pqYmgwdmFKdjBoVDVXbEYyMlZjSzl3K1g2a290YVpUNVpsQkJuckJGM0hvQld0M09mYUtxQUkyZ29vbG1ZczFpanFIK0NvalpQOFBNcWNlOHNvcWVVenBnQWQwdXNUMlRXRTJTRitOQjNuZUMxRWZzQUQ4cDE5Q2k4aVFmOEliQkQ1eUN6NmFkdXlHc3lkRWVQMUdQeGpQTUtickdRbnJQb1dBSUZxMSt0VTM4Y3l1clh2cWJTYlJUMndlM1lmcGE4UFlpMTJ0R3g5S2daSFVJcFZDNnJyZ2VyTnd3RzBBVkQzSlNjTk02VnZ3Z2s1OGozRzlhNmJaNk15V3lKRkwzRGd4V1ZzQkRVUXRWdnB2RWtxZnlPWDFRL1dMOFo0VFNDOEpjWFIxSkRpWkVodkU2by9XWUlmcTlFMy8wKzRLY2d5UkljS0UxbUd0a243ZnE4cjROSndKOGh2dU5rTXJ0YVIrU3JyaWt4SU5LQ0Q4RE53YUo4dS9QVThabHozWFB6RlFpYmF5dTlrdFBXeUpqNDY0aE54Z2FiYThzOXRXbGgrNEQzZVgrdm16eXlnNnFUTTkyRml4L2VsckFuQmV3N0dvSkFVcGx4STMyMlQ3RUVBck9QRlF6QmJSR3V3eHo5NnI2TUtBaEF5VG5LNUhabDVUeVp3elU4NURJZHk0ZEQ4MFVTQUVscTBaQUc5eDlMR2JKQXBSVFJiNEZ6d3l2b0h2UXhVdEl6N21QTC9Ta1R4WndreEVCN3FkcjQ4RkpqYXJyVWloOGVIUVVKUHZUYzhuUVlZOHJSdXBxQ1ByT213NkIrTUtWWVdvMk52ZUdIN3poci9mT1dPbVZJNmdEMkdxVi9pTklVZ2dlNll2OEd4bzYvR0o5SHhQTzNMKzFNNmI0V3BNVHNDZnlCemg5OG9HcXByY2Jhai9ybjNUakNwRWYyMmRCcHpwZ01lK1JJMFRSa2ZJbWtPaXUvVVRKMU9tZXZ5UUdDRUQ5QjRVNkJzSE1GdVo4Y3lIMUIyWmFSbWlRdkZ4VklzeHJEQ2xTVkdCMDlBbXlzQUdXVzlIenZ1YlBTL1RMN1daVTl0UVR5Y0VhdVRZRE5PTVB5NXhWTFRicTNFYm54TGJ5RGpDQkl2UWR3WWY4dzRaMmhzcCtCRnUwck5tVDA5TlA4SmpwaXlXaWpncHQxWHpreVZyZ1NsbWUyWTg1TkVCVWc4MzRwaXl4YmYwNmNEdWs5L2RFVlJvRXJuTUxTZW5pZFFETUhuemQxRzZMclJDNmxTaFkwSkNLNVlrRm1mK040MmcySVlSN0dkWUQvQm9OVHFEZHFySGRka200eTlqRC9DVHF1cFRFQzlENXc2eXQvdlY0QWpLNGtsTU9TRHBCUjhzVlBHS3hxdm9SWUZGRlM5b1ZDUXhuWU16NmZFSFlRMTJhUHVmdEFwSlc5azg1cURKZHE2eU5tNm9STEhXNDhKNEQ2aERoWDJUWEdOUml6ZFpKMm9vSXVoNjFvMnpyVGd4T2NpbWdMejljSlNzMHREMnMrcEc1bUV5UVJrSEowL3dFT3p4TytBYjFSaWhEM0ZQT3lKSHV4TTRjY2ZiZUwyaFVIeEU3NUJOQmt3WlNwYWlNM3plaEgwTVF6MjBnSmNOYlhTNGl0QnZXeUhJV1BrRzdVT0xJRjJTVnZEVkZUQ1YzVzRUT0w2R1pUUXdhSEt0RVdxSmRwKy9xWTNFWkJtb1Y3K2Z0dG4ybHYzWG9GeFphZy9iazNjaXNUUmpmRC91b1JveVIzcjFTNzVKUnh5TXRCMWI3L0ZwaHVDOWp5N2JyYi9sYm9sZEhrSUxSK3d3L0tCWGJjOVpyMlVxWkJDQ3lQbHFreWtBM2FGdjhucWQ4TEM2WXZxZ1NJaGdDNHdLaFlCMTdOd2NBS2pXSndyRTVYWGc5TnFZVDErWDBUVktHTEJEQmhBVHA0cVJWU3RibTUreHhDcnhTUEtMODNwVEMzNXV6ZEZwa0lUaUFnZ0pIM3ZOQVdYaFE1Tk5UKzVhSm8xdjluVTRpUEpzQ3ZuRDhZN2tOMU9nRXg0MDFwanQ1Nkk0OFUvbmszSmV5dHRSKzE2NDNQYWt1ZlZBWXFqbmxkRmF3WjVMUVRmbFIxZEdSNURMb2szdGhhaGdyczVMd29oZDRRVkZ5d25IMENValJFYU1RQjZZOTR4S3pKRmJqL1dXUVFKY0hkMDRydVRqVlEvZEdaQ1llRjhSV2JEQXV5R2RhZkdEMHY1ejJHRGJiWXk0M3dtWlNlSERweXBnWGt4OFhIOHVOR3BMZ2F6K2ZSckREOTVSU1FtUGk1WUE2eHN3OHdYdlBybG5SSi80TEt5Q2NkVlNjQWpPK0NhNGE1RGtLMFdxQW4rcTJENTZ4VmVwZ08vRFJ3U0Fyck1STGlNZWxWenZxVGJoaWkxVHVCNkZJK01vVFE5YnpzMGxiTE9QeERTOWxxbnhPUDNjaUtXd2h0OUE3YWdiampxdVlrNGxCaE1MbmdON2J2Rmp6Y0ZOcHBaVytGZUFvQXVwWFhJaVUzVXFVTTY3aG1hVGNPWXhydzRGc0NGeEg4T0gzM0ZRVGdUaDBmS0xJeXpobFpLaFZnbTZwdldnNWlUM2V1VmFxcmw0bEw1eDNjOTZKVXUzeEh0blcwdnJGVUF6c29RWFI0cjZId1M4Vk1FRGZXOXJYU1FnUkNFbThZMWN1TGxGVUZ2MHY5Q3FUeFZmMDVWazA1eG5XRlpaeW4rZ0tSZVF6czV1d2JubC9OM0V3VmJRckFZeTVpdGJWQVdFeG4rNDNsd3BxT2taazJMUjAwWFpKTDBuT0lScUJvMTltWlBhd25ldlgyeC82VlNYajU4MGM4Y0tGWXNjVDl2RUZmZnRTZDBpUVBOSEhucjlEaWhiRVlHVWFJdksyWnFlWWFacEhWcDdsOGxHTVBldlUzMnJjS2w3ejA2SUk4SGNBSkEzYkJlSVJ6a0g3SXdURG5GWTNIVXhxN2FWOVlQRXA4MnQ0RXIrSGpUNWk1alBIQSs4QVUvRFNueTF5Qzc1RjlZaTlseXYyV3hKMlIvWGY1dlJyZGhDeVY5QVRVcGRWQTEwTTBHV3YyZ0FVZzhJS1hZVUk5eFlQc0hXMWxHUXR1NUF4cHpsUkswaUxYVmV2OGVHRE02VTZhWDQxQlJZTDZIOEtTNmtncWJNdlVtTk5IK3grWnMxTGlpdUxTN01jQ043Ui94ZnFxNGUzbWNCdGNqTXd3OThHTEVsZXV5dDdwa2R5bEV2aXJvY1NDcmlQSnJBK0NBc1l0Y0N2UGtLWU5uNmVENkRZaVNpZGlyWVJ2dW5qejUrWUk4RFU4ODlaZS9rZ0s2N0NjZW1valVHOXdpVkw3S0xqQmgrcjFCQ1RSaDUwOVVsTVJKNDIzVm9CeGVSczRGVnJOS0hnWm9DZG9ZV25IYUc3Z3FuRldEVlUvQWFvWFhRblJiQXl1SXNCMWkzSlhvbDFvSHREdnFnL0pFWEQ4aFRYcjJnOG1TSjM3SUgzY0x5b3hmR0lPOFdHMEJXZTQxMlBhcy80OE1SY205Z0N6R1NmcVVLNnNXZ1A0Nk9FTjU4eDBUb1NOVW83S2hLT2FITjRvbTNpQU9lRGx2MmhyVnBGM01qalNJMWhiRTZpUjlnejd5YTU0N0NvZkFjL2JJYnoycHNmbisvSXdONC9RTmtNMGNOL0lxL3UyZVlVQXJtN0N0WnBXZmxtUTlKdlZaeTJiUWg1MkVrNzIremRHREV6c1JJaFdHZUt5SStmeDFtdS9jYnhyWGY4YUNyVDd0OWNwYVpCVXdqZkE2ZnpWVWtpZXVML3ZIR0FFdkhEckxPemdNYTB1T3FiY01McUNMQzJZdkRJcU1uS0w5ZDJKbitwYkYxbGR4T0pqOG1nejNsSkE4d2pHMDN4TVZxU1VkaEFEOCsySWFqVy94K1p1b2dzc3E4M2RQQXREa1VLYWpwTFZ0TTI0cko1bUNLVVBHeVhRc2RuOGdOVDJFRG9qckhQdXF1aGJISmZteTVzTnhuYy9iK2VCY01zcTV0N0tsWWpZQXgrUzd6UkJUOHFodDk3UEQ3Tm15QzA2bi9sblU4aHJzK0VSdHRmYXdaZ3VqcFhzdHB1SUhOV1p2c29RajJTZGVja2d4aXZHTUNpaVg0cEVmaXRmNFZLWVdlaHd5NnVzdFF0am5ZN2FDaGh6a24ycitSSFBrb0lBNGhsSTFmcE9yRUtlYVJ3ckNNYjBiR29JYWxPWFZvOXZPWTZRbWNnTTR6NmlvdzNyL2x5SWtOdnE4RWhKWi9QVlJtVmxDVXBRSTc5VHYyV0tLVFV6alRaRmduWEJZaUt0cEhPcURxTjBLRUxwUXNZSTlhMkFPZ0tyVlBPS2VJREFLU0hWTlFnYlNBVjdNREtTTlZ5ZGtNUjNId2c0TWFrMDJVK3J2RFJ0UUJQbUx3OUJEdTEvVUpPaERQVkhmU09nemY2Y0x6U3lkSjRJRk1DM0w4VDBiZ1h0SE9jSXBkWXBwaksxbEViZDFMZHJ5RU9PL3cxRTBxY3BldkNBUHJyQ1NTdEFwTDE4bzBmd2tobUwxckNRVThPbE4wUVA4eGw4YWxQRGw2WmRETVBvZGZwUkp1ZXlsaVRKSDY1TnlOT0ZyeXorQXBqYXRXNmRJTzVFakh2K2V4TnBOY1I5d2JlTFJwQWJaSWVvRGVxRk55RWYzVldaOHA4SWNiaGF0U0xlMlpGRlJNeUd1RlhBMzFIWHhGbDdraGRVRkdnK0VGWmVPVnpLZWFpSVdPOGtib05SenZsTGp1WnpqT0JidEdmcm42cnQ5b1EzR0wyL2o1N3dKZXArYXVxLzlFV1F5QVRRL2N0WmhWdUlyWUtZVFQvZVlRTURwZkpIUjJ0OVV5UVFLVFNjSVcwazJhNDF2cVNjaTE4L1FFakx1dVhvQVNmZlRVdTg0L2MzMkh5elhhUEhYL0crUnBrUS9VNEcvVUpNVUJEWkRhdE00QXNmT2dXbkpNTStHTDAvMUp2OXl1aEVaZGpoY0hVeG10OHhzSGVhT1RZdEVyNTU0OUZ6WVM2aE1obW84em9ZL2QrbkVFWjdLNVpXY1Q0VFYzelNxdUhjaG5rNFZuOFMvcWh2OVl1L2NZMS9xbFRvTDJ1ZHFockhsNkhyVFJ3cnFJcXVjODJFaXJISEhzRGdiZGlNWVlTQnJNdldwNGlaRW5UZmQvNTJpeVdzYVVFWkJxazRoeS9VRXV6VnpTV0dXNllTc0FmU0pFOUNPLzBKMGhuRTBWVXBBSTBxNXladU9UdU5vR0RQQTAwejRHZUp2akw4RDJ3MmFIRlRvY1lKTWJhZHd1UFpud3pEQUEwdm85SWQvRVAwQmQ1WlNlazZaZFkyeFQxUURkSHd4YmphT3RxUXZ6Ly9mdlM0eEpDREZybkYzbzdaQXF3cWFUcCttS1I2M2NSZWxzWklJOGRLbjJQL2drOVV2SEU4bEt1cHJZckpOeWpZRFgwdm9za0gxYURyL3RMOHhpbkV2Uk5ycXp4ZVFyN2IrcTNjRENkbjRmVnFtN2oyV3VEZ3Z0aGcwbko0ckl3ajNOZDdSY2FYbXE4Y2dXc2FmWFJkNXl2d3JaODBSOStUWW9adndwcS9WVFRZUHdHVGNnUnRtWlFBSmRnbUNTakVCQ2diTDA1cFZHOVNtM2JUYlN6dkdpaVZ1VDlzTmZEM2xrb05TMHgrbW0zUTlRaWNJRHFMVEp1VVhsaUNTdGRkOWRuK0l0emVFRkVTZWJTL21idW5EQ08zUkNua0ErbjFxL3dVTkJNOXBOL1JCVncrWkxWbDF2SUVKWkZCeWxhOE54TkxaSlBGT1pTS3JPNU51WTErWnMvUXhTaWE0bWhSSHEzNkplTXljVHpFL1dSbzgydjF0UktvK0lIYTRrUzlvQ0c0V1Fab29vM215L0hzTU9UVHUvQTloZnc4ZG5yVjV2TkRNQzRBck5hYWNTbTJVd005ZE5pKzNyTnFtaEczcDVMTHlwc0p4Qm1VbldldW8xeVVNb2JqVEcwOXhGTVNlNkMzZlZIYTJ4dnRvMDltTU1IUzZoTkIrTllpaHlhTWRQcW9jT3grTEpLVkRrakxCSk9tQjVlbDZ3SHpVNzJyb0xvaW94bUFram5Ia1k1cnk4MkxiYlVTUjJLOHpzTE1VYkxnNTFIRitzNmxwNDdJNmdrb2wvQy9BY2lidVV2RXRKTHJCRXEvak85TzlWb2pOdGJsMjhkZi8wVWJzZ1RDeXpHcitJZzRQd0JtdFBVKzVXRVM4Q2pxRFZMUHhxc1c0UVNzaHpESk1TOG4wVTYxVXNhd2MvVGIvVm13SktuZXJONFY1a0RTT3JndmpzdS8rWTZLSWFVM01zN05DRWpBcUxHNU4wNEZPbktjaDRKeXpOZGlZK0t3L3dwdmRMUHhCVkJ3RGNZZmJtRUVlTEtUa2x6dTNyajk5aUFKakdWTUFmRE5TclhVSlRVNnI0VnhGU1lvY3ptQThwWE96QlNvanZaOVNwVlZiTmxEZzJTYm10SzNJNy9vZ3VUb1Q0cGVCYXBMQ0JtM3haTXpMODdidG5TVWwzMG1NNlRGSW4zYmdYaWxjQ051aDBLcHNyOEhTYmN1RUpOa3Njc2dPeC9VZEdySWxpRmtYMUlRYmxmQ05RVlZKbm9SM095SDJkK21SNVZhOFJGKzFYTXBIbG93QkR6anNBY0dtL2dXSXVwd2VZY3Z1V0QyNDRreFVoUXRQaVJmOUtjd0lSSmdzRXNaSVUvV1VFa1lnUTkwMEtaWnp2REl2emJZNHFtcWIzU250ZldrblZaMXJXdVBLTzY1ZTlmNHlYZTZCL3ZvbUw1RDVyQ0xiZ1V6SEhVVXlKQ2xiVXpON0VGRC9XVW9vMXRKY1VqdHdKVkwxZmYvR2pvb1p1RWd3Ylo2eEozdFlJQ2hsUHRDb1doNUFSekI5ZUN1dTEzOEkrd0hDMWY3TnBVMjZLYzRlb0k1YzBuL1k3WlRTdlBGSVNxZ1FxUVhGL3I4WEtuV3BlUThFQ21nOGFFakZOenFvSkVtZ0JWRE5Gc3BPN1FsOFAxcHFGVGt4empzSEFaMURraHVlQUNzTUJCTmg5R2VPMXJNMjR3aGw1Tld5OENHRU44M2d6WE1rU3VDeFZ5Y3JTNW5tUjM2WlYzcEY5aGswOG91MDV3b1VyWnVLeFVTMzMvUVEyaHpBRmtlT3VMN1RMSUQ4K2FnVjFVdmlmQlIwTEwwWEtzUzdaRXFJU3BwWjlTWjFJY3R1MllKSThEVzJMWmdCSHM0U3ZSd2k4dXI3YVdmWVM5RnVQSW9LZXd6UWxSbnpKT2RqTlZoRWt6dS8wOXk2cUVCZ09VcmRkRmlVL005dW1RM1lFR0xodnpWeU1kMUlWWk9lSk5BdE1MdVFsY2E5ZHJFVTlpRFRwdXYxUkNXRkZITEJkZ3NVck9PRVU2Z09vakFvZEJOc3hmSWVKSWNrdGtNS280S282Y3F3NTkwYVJVL0VOclMrbXVLRmg1Zms2c0wzbXNTZ3ZwYTcwdmxsZ1NIU1BZRzBnZUVBVW91c1V3MFRKaWpsVmhidlpSVkRtK0cxMDlIaTFFamJaM2RaSWNDSnk1OFFIUWNnQU5xRXUvRWlIN0RYTEtOcnVXNklqeDJac0c0RkxxNWVXSVlNTmdSR3hpZUZvdWtWZHMwUklNRGVGUjFSamgxR2ppOHdINHYvYWtGTnVBaVlOaENqSE9wblBtRjc5a2N5dzMxVjErQnM2TnQwWFdQT2tCS1gwWUdtR3lmTzFKYWE0SXRJU3RiTXJZZi9OZlJsb3RhUlBUcnI2R3FaLzByT0NjMjRPaDA1NGNHei9BU1pyV0grdTZhcTBXWllQbTNma2FjTUtJVlRVL3pNdW1KMmJqcytyZ0o4OWVDcFRxUzdURFk4MnA1d29EbmZKcEJ2ZGxnZE9LTksrQkcydDl5cEszM1dzVWVIRC9DSlc1M2lueG83bEVJNUV1ZEVLMUR0bXl2RUk3N2pOUWZ2Z0RRMWd2Y2NoamtVWGpPY0taeVpEbFhXVzdiWEQvMkdCam9tNTNOWk9vWkRFZFdBT3Q2QzMzMmIzU2tUMWpvMjRMRjVHZWZLY1d4a3FZcjByUFpyaTJ4NlJtUEFQc0RIVlNXSS92ZkZYV2ovZndJYkNxQ21qQ3JXajlIeXlvaFdmMVFCTWV5dGhkVlVZUythNFlQUy94NExzeFRlK2tmVUNvdlhhMG4rT1ZicDh1MktOTDM1dmFmbHg1QUF0L1NFV2lqYmU1QklLM0UyeGZKVDNhL0IyMWF3R1VSYjlzSUZ0Si9ydUg1L0U3b2hCUk9BL3Y4MHloeUtQSmtDYlVRRzZaNTE1TnplMmZ5OCtYampSdFZEYW94dWRXeHQ0N2hyY3lzODFOZkhRTWxoaU9HYzVjaXBHMTZMUW04amJNN09jY1YvVEpGdmN5UTg2R1JPM1lEalZiUS8xOXVrWVBEcUE4YzYwZnZVMDBBWUJJWk94UWZuODlmbE1vb2hIbDlhdW0xaXJ1MmlYbFh6aGVqWC9KR3B2aldpOXRJY0VzVVhVVWdJU3N4WTQ4ei9Hd3pNRUZMT1B1cmtzTEU4bEFaVS8yRmJYekt1cWZoTHVYK1Irc2hOWS9qQUhPajFjaHg4SFd4dENQeXBpVllDOFhNdmtGMmI3MXZzSjhRZXBTbzArclR0bG1vcmY2dVVYR3FiRW8xeEpKMTlZYmtBYjAwaE9uYkFjRkJaMmdweUdDYVN1OFJabEpMNVZQcFN4UEgvbTVSK243STlTV3c4WGowYU9kYWMyTncwOW5YaHNMWjI1K2V6R29CL1VaYWNYdDV2cll4cUZGbnhqdXBRMTlJcU16Qnl6RktweVN6aFVkSjI4VU9NZTFGbk1hZzNka3V6TG5Yc1REQXdsM3FmcjdyQWdlMnBnZkhhOTdlRnIrOHRrOHBOSU9ocVlFZzZtNEl0N2dHRml6NDJQa2dJYWFMaHJQS0YvRFNUT29VTkJld1QyUFdyOWFqL043MUU1eXZJUmszQ2pNMXhaT0NRbGk4cU9nVUgvczgwQytTditYNlp2aHJhaGhuK2VSTndGNjJNQ0oyUmd3Z1pzSzdsVVlpK3FlZk51YjdZMzlGVVdOY3NwczVMeHRWZTNLYjZBOGZDeVVyQkpEZi9TaVNsZEsyS0pKL0ZlQkMrYzkvUi9MTytNdGl3dWt4NEtmcHoxb1IxR3FkVU1tOWVaTzJqS0hvb2lUYzBoKzMzcFB1aGppUEZGUGhlWmhXMGlpdkE2NDROZ2gwa04vZzBjR0J0VHpORHdhdGY2R0p4ZTVPdUxJQnJhS083UjcxUE5sRzJUTUtmRDB4QWdPR0xaTjRLcHIweGRsMnBTVjF1TjVsbmFFWW9hemFIMnVTUmRZcWNjV3VodDVxOEJVYlVPemt4KzJib2pjVDZTR0h4eFo3b0dVZlZoYmNkenVEOUoyUGlPbkdQK1Y3bklMamhBb2VtLzhVOWRzeGx1RjFtVWxaS0p5Z2x1dWVNS2h2ZHIxcEllQ0ZEYlJSbzB5Y3NIZjl0Nm5hbWN0QysvSzhMcnlEaDFScUhMYXVCNHNrOU1oWEl4Si8xUjQxdExVcXVoZm1SRjRENngyQU91VjBBUE8yWVRjMTYrSjJCLzhmdDVQK0pRSWhhN1R0bUNTUlR5OVhWRGs5NHdOZS9QcTVQQ0RrRk9kdzROM1hBdUNhbEtKSFlDQWs2b1FUYVYzVmR3dmxlWkFqTkpNdkc5czI4TlpyTDZmK3FxRmt2Qjg0RldEREFldjNoc1FZU0FaRytIbUhWVDA3a29oMjB4R3NyQUtGMU9kVEF5MFVESnRKekpnejcyaXVudWNPS1FUY2lnTExoUG4weXY3WmVXeDl0dVFlWWtiUGJkS3ZydlNJV0d5UDNod3BHN1RlOVFBSWpXM0s0YnZkZGdBdm1zVzhTbGo1KzN6WHFTcHJ3R0wvUDdwVzR0dmtvM3hvR3RXVDNPWjR1dkR3QzcwWTc0ZHhlUDh1bHE5Tkx2SFBuVFZiVW5ORW5HTS9NMm5JeEtBOENWMi9NeG9vNmE3VGJ1UXIyc1EzNUtKMlV3MFZFVU1JVHlDRmdOVjF2NTczZkQ0SWk0bUpLdXdvY0k5a0tPR2dBelRqQ2VVakp4N0dtR1BSR1UzVkR3WWFBNzdYdEtvZ080VmRTd2x0Y3djVHN1QTlsVXhac3RSMDVqd3Z4VXRHbjUrMHN5TmhUK2ZhZFJpUUNoVFEvMWt1VzVzcDNoVnI0RW56NlJSS3l6SnhYWXJCZ0pWMEluaVJVU0E0NUhjZTJiMFpZV0FlV1dsZTdpVWY3KzFzMC9EdXQyeklEZFVVZFZLVitLZm4xalZFbjRNWTA3ellPTE9JU3gzUEMzbi9CUEo5eFRwMC9RbEZzUS9jQmQ2dE45QTV3K1RTVTZvaXNaQUhGRWc1eUZiKzJrN0hzUjJkTThPVkxQOTYrZzFaTVBhTDZvYzFkTXdLZFl5STR4bVUvaE5EdWRGVEhCS3dnanU5dW9CK052WnZrLzV2eXZoZkNGYnB3TlVJS1YwSUxnQ0YzV2dxWjB0Q01yaUNnODJ1UlA4dFBaY3hybjlpUERmaDZMcHhLNm5DR0J0QmUxVXI3c2VpU2lXaDluTUo3aElrZTJOQWRndXZxRUE1VVFTZE90MUhRdkRYM0pjdkFIQWRGSEVKd1RobFAyUVhGSkpLSXpBcHQ4ZUVnbTFsblVoeWJzMlN3MlBKYTJMdmJaei9kN0F1TEUySUdiMDB1bDVHZjBubHdGM3dlS0UxZEhHclpIRFRSdGVpQzhTNkhSWllaWTRwSHBVKzJOMUlyM1dIS0pqOFZOUXhCZDgvYXNJYlQ5TFMwK3BxdURUanVmNTBCRTI3TzJRcURLL0tJVW10aUs1Znk0aWhVTEdVdjYyTDJnemlFZUkyODF6QVc3OWo1Rnhwd0VYZ0hxTnJkNFdjR2N5NkJSUGFhVUVKL0NJbnZQTWk1Z0Z4WXBJYWFMQmtQL3BzOVFuQWhQNFptTXNYVVV6aklaY291Wis3bHRuUDd1OHY1aGpDNzVRU1FnWHVBeHV2ekRiblRPYVhRWDFrL204a2RXVzRWUFFYL1R5Y29nZjh2VG9kQzBPUnBCZU1YUDc3UHVZRFNsWDJVcGF2R0NMTmc3d0kvM25ZU3FCaGFOaGt6UHNwV2w1Q0JBSjhIY01rT2NXdEdPTGthOFVUWXRiV2JZbzFtZkh5VmhNV2h2TlpEOTB2amR4SjVKdVhCZ3lmMjZwNm5IcmlsbTBJaHBFeFdrb1BmaFZHSUoyN1FuYmkvTGszaWpKWHlKRnZXLzhzcGh1dmpQMmZzVXQxY0piWVdleCtSZkNNektRcE5TTE93ZzIyME9mY3Z6Y05VRGNvaWRROXpXUkk3cnZtY1JNbW0yMFR5MEpxQzd1U09Rd0Z3L0k1L0QwejBsYm9wK2x4STJFR3ZpL2VVWE82SGg4UEdEMzgxRVdobUVmOGEvaWZEYmNSamZuY0pLTGVKdmZNeVRIT1AyNGZnM2xGVEl4SENDL0RwN3Jic2VrUGJEQUl5b2Y4L1FmQTVjZGJic1FlV2ljZkRPSEJZWmRjVTdNWHlVRG1sRWtTdmYzdlYvUWV1R1MrbkVKcFdZWGtLRUN4MGFaNjE1T0ZYTFJET2FFYXNsL1dXdnl3NWUvTW1PeTIwKzdZSmFtdFJCSzBFZkxVQk5saHlDRzFZUTAvd2hjd05Kb01WZ0dlTFhjMFY3ckdXakx0OFNMS2hJVEw3RHJLNU1mcDNzM0tKenNrL1hCNmtOZEE2OVB2NzRPYUJiclpLaVVGMlloNkt2OFhKcTB0d255Qkk2RlNRMUlZNGxKZkptQXNibDl3bWJhUWg5dHpXWUtEaDJWT0lkQmFNQm1RMHBya3dQNUFiREdpbWJrTU8vZDVaQ3Y5SHNSdGdTb0JMUENLSGhKbnVLZzgrUDllR2VKVVdkMzg2NmxOZ3NjWXo2b2R0MlFxdjVWcENWNitEaVhLM2J3QzE5Zy9DVW1FOElLN251WThkd0FIc3BNQjBnZExaOWFnWG5YQ29kOXZVSDZJRjZmSVU5d0w2SWhTdVNnaHFveEtycWxwbSs5M2FMME1YNEp6d3k5amNyK0lWY1ZnRU5OM1VGS0UvbElESjJCZHB5NG41cTJVOU4zdlk2dlYrSkdpd1ZrOG9VelZkQVZDeDhTYVVwcUNVL2oybXpvRnZMQTc1MGFLL0I0elhka1hRN0tJRDlZbFZHSm4vWmcwcmVrM0pKcHNJQk5vM01yUXM0bXZCYmhmbUJjb2M5dDRpNCtlRFFnV2ZvbGsrazNiUVJ5YWFXTG9oWm9MYWN4ZTY1ZVJZOWMwOWZnaGZyeVdxcnZzR3FyOVBUWUV2NERjN1BNQTU1aVN0WnNyc0wxeE5nOVNFM1MrZzg0VzZjQWJuU0hobnhnaHNMN0NEVU5nM2x6MWJPL0h5OHcxL3BTNUp6bkhaR3hOQ1NiNW9lR3RaN3dCSEdHU3dXNjFhOXVLZHhETE1hZGNkcUlEV21EejFXZ0dJR1VWRG1MTTlXSUd0MTgzUmJHUHQ2V3IxVUxJRXV5YnBUTEZaVVJYZnJnRERCdXZESUJNTW5TOWxZNVRnREVNZFIxZWZSaHRFazZoWVhHY0ZUdURpUnFnMmI1Vm9jcm5YTlpOTWxidmdWNWpXeEhFT1Q3S3VkQXhRY0JDMWVKbUxaS3lFazc1Z0Zva0k5OWtnZVlLTzN4Sk5GeUEycXhvaVhFQWpnOTJGUzVQNEU3QTdtLzNwVmIyQThTUHZxUFVHbzJZK2poZ0lWNnptQjBvT0QvWFoyM3BjQU9RVjN3M3h3Tmo1bVgyUEllTmlkRFRSZXhDc3UvVGVFT2VKZXJvNVpVL1lwQmQ0S0M3Tm0yMDdIZW1wU1dpTTFEUy9nSWZXWXJuWWZ6RFZnWjhSb015WWVMdXN1eUNyd2hCOXhSUCtiM0VFbTBDNXBNZXc2WVZ3NjdaWTIwYy9TL2l2MDdqSGc2Qzd5Ujh4eS9wT0lZeERscFNmR09QVXVrK05tMmtkNTBLeTBBRkM1WC9jbTZMVHVOQmM4ZmkwSDJ4TGhlMjl3Rm5wTHZtZ210UlkveFNRcnNrcG1JK0s5dnltWlBmMSttRDByT1o2ZGIyM3BOb0dRaW5tM2hjNFhxS3NnS2hrTVU0cDVqM1I1YnNYclduNFNndjM5SllmWmZTWjBGOG5OenlROFJXNnJycm9idUpDT2piZHJJVi9pUU5uVTFlemdqQlVlTllpU0pKVDBKMDNPSCtNVTd5LzE0TFcreUhYZFBEK3pLMDdieFN3TEVGWnRncEM5L2toekp3dUIrMzdKK2tSakQzRlQ5Y291VmJFV080bDg3QllXcWJPKzZwVXl2WlFlM1kyZVlSY0hwc3pzRnY4QXlhVGtNQzhzOVo1M3dmeGRZa0JWZ1RKOFhjNFFhK0tEV2psWjBGK240T25DR3M0cmFnT2E4ODhDcE5tRFBDR2F0dEFJUVhBWk1ybFJ0emZZWmt5aDFSQmY4TjBVZEg4cXNCaU9GQ0JzcVlieEFRWk9LM29uK1lhQXA2OVpQRmxlTE9EVDVNZjVpZm5ZWUJSZHVEbUlkVTlIMVdOekZHVFZzcDNKOXNiZzB3M0I4R3djczRtM1h4T2QyNWxXMkRBckNDY0VOK2ZRV3VYUE0rMUU2cFdDbmhSVGRwVWE3ajFWZ1MyT3pDWkoyZjdPR1A4MzZielZkK2Q4bTIyOUVEYWZEWHRkUFBQd2FEQVUrTmR4RnY2aHhZS2FsdEJJVElhZXdPYmpzYVE1cGlxN3p2UnYrQTZ1anF1dW9vUEltWStESG1jVy9venVua2xXOEo3NGFWKytCUGxoa1VTR3VKRFRCYnZ0NHlWcy9ITmYyaVhGTVdGRGJlL1hwRW1OaExobDl6OHRKeFR2TDJnZXU1Q3ZMR0FQQklyN3RMS3VIcnlqc3NVcnZOSUplVXMrWFNiMDIyZnJ4WHN5ZmZsbkdQaTNIS2pRZU1icFJyeDFwaEEzcWEveERRa1VOODdjYjJ5R0I4RHh3NzdOMXNqZndpdGtYbHJpMGVVMHBVWXVHWDNCZlphNCt5TmtnOUV4UDI0OTVCcndHVjZQUDRiUDJ4Zys1dHpnWEs2c21XcW1uY3p6Tm5kSm5OK0JVa0IzOVg2WVZVWDF2dm9MUVl0WUJXaTduRDJ5SWY4TlVHM1Vidmg2amFpN2lGWXlPak5RU3RIZHdoNnVXR05FVFZJNjJSTXgwTUJzNnN1WGxuTUZYTlc1NUVsYS9CZUM4d0plZmhpd2JSNnpZMkdZMzZaVHhRRXFlNGd1czFNc2x4azEzQnFpNHNHUEJoekM4Zml2TEJvcmtkY3V2bXErMGdSVDdyYnhKZnpudFRmc1VseWoyZUY0Vlo3TC8rcE91RlZzUUdRZm1nU0RLZXRtY0ovNE16SjJjV1YrNGFoYUVxY2cvSER2emdjcGxINDJIc2EyUitNZ2treXRSNGhTWFRuZ0xMVXVFallHUEs3b0ZBRGhYRHJhT0xFYmJNSDJXV0dhRHgvMWk3NXJBeFBGYjBkbEg0OVNZNjVGZmIxU2JUT3dSSkd6Nmc2SmN0bTJCTXRQVlJvMlh6WlUxM1dxeVRBYnBkd3JiWXIyTjRVZ2RSdzV6ZGc1b3JybS9qVlBHbGpwZzNWM2N5eUU0QTRrQnZGaDZvK0IrVm9vRk9nWjVyMld5WkVkR3RtbENpdXFIQWlJdnhMVDBSZ1JxeDh5M1hxWVNRTVFwK1VkbCsrTkZ0OG5ZR2tTclBmcVFaS3JiNzJlRy8rUUNuVkJZSnRnV2g3Wjc0c3c1dm02RXNxR1FmZFZIdXRDMW1FN2NCUUUxZXFCb1N1U2tLSDlQS2VuQStId3hrWDl0dnFQMWdyOENRZWMvN0NjQmxCeWV1T2k0c1BTRDIza1A1dlZaZ1dVMDgxTk4rUEJ5bWVmSjB5VlM3bjNKNkt3UmUvQWJzNGVWTHo2dkFZbUdVSmRCYmRwTDB4UDlRTkVQZk5oWldTSzVVcjF0ZXo5cklUcWJtcWF3bVJjMWxzTXMxaHY4NUpwdUVrcEJuSXVERndKWjM5OFgreU82YnBsM1l0YlV0QXRJSmthbnhGZjJ2ckhkWDJWUFZoWmN1N2h5V01sK2RmOEczaDZOeDBmR3NuQTBwL1BQMXA3WlhCL0w5MS85ZkF4ZzhhaE9aQU9NTytTemwwT0xkdVhvazFLYitnd041NEMvOUluMSsxSk5Xb3JZQllPSEZ3OTVGaXhTbFM2dWwvVkRxWUZXc1ExQXpSZEdXRkthOTUrbTdTVGNZblQyeFhyaXAxckN3cDcrRyt0MXZna1NDekxRUjFNVDUxTHdJRnYxb3hvSGt2UGJXUmU1TkNjRURvaGg3R1FSSVhTOHM0L3pycGtoSHhzcmNHaVB1dm9DYWdJck14dlZyeG44aEMwdFpSbnVtYjljNGV1azM5YytqdFJpa3BmemQyb1gxWDlSaURHOWY5UkoyMGZ1d1BPRVFsVjk2aC9TVGNmVEVPRzRrQ0ZxczRMTmpDR3hPOERzbzIwLy9NL0FOWENaNHZGeVViSXFYTC8wZkI4cTkrdmxnaDB2Z3VXcUxNNWo3Tks2Yy91Z0pYUHpoZEM1am4wOTJmYnZuQXU1eTNlTUhDeHRhUmhITHVWODdnbWtaQURma2RIWlIxWnhLampLUUhFS3VWOHFRR0ViVUswVW1DbnltTW81cnFnR2tKOUc4em1oQXhyYWtVN0hURTRiWnFnbjRDRThXZjhaTS9NOTZ0MUMvTTZXN1I4UWRmMGUyOFA4WHdDT1B4Mm1wYWIzZmNlK0hWRFZZNDI0SDBaVndCMGwrYWFIVGdnMVBGWmMzNVlsYlpkWXpOT0hUMnlpMzZBUVZsS3c0Nkdad2hLQVFsWDhRY3lRT21vMm45NTdOVEdwa1BWb1ZVMWkvNC9jdnY5bUJTZmtxbXdtTGVRS0EzMnNxb21vNTVrcXRnNCs3R0FZd3NDOXA1UE9FYmZZYkZMbTBNOEQvVTk2UjJiYndjMnJWQmZJQytMZ3JRMW44QlhuM3FkUlZ2U3Jqb0gwZ2l0NlR0em5TNHpuUUNTd0dNa25BUWVjY1NoK1VEcjNwYkRTQi9yT2FpN1lRWGMyRGVuOEt0VjQwbGgzMysyMDh0Nmw4TkhSYUNLdzdQYjNEMFQwdzhaWnEvSjc0MjBtempQYXpEWktaT0VZSDB3ZjZsWHBnUWxDdExDVGh2QWZpa2xxc0UzYms5aHRFbUtMN0hpMGsyUmhCdHRLbXphUUxaUGZGVjFCWE00ME5QZ3FxVkQwSU8xWURlUkJrV3AyMjhlZC8yYmJJOEVjWER3KzFpUGdWZW1WTGh0aXpKRHpIamdOaXA1RTlTYnlRUFJ6d3V2amg5R2x2ZVNrS2FLZk12L2MzZ3luakZSck1vZHdTcUlSZGs5R2xjRldZZWlUdDQ4VzNMaGkzQWp3MnpvMVFvODZQVEZRdTViT1ZxTWpiTUg1QXU3T29tSkd1amExdE9CWTNFZ1A5QzU4VjN6ZFlUN2NiWUZBdmE0Kzk4RFkrUDBIRThSSStwT2VkYUswdEdsVXR3NDNjWk1zTTRFb0pzRTBRby84YVUxS1p4YlJKV3gzeXk2bUhod0NqUDFyOUxiOFlzamVGRTB3SmdQR3lldjFBUW5HMG9HSGRLQVl6RjV5ZEdjWDVnQUR0ZDNBYjVadkdvZ3NOWHNiZXVLQU1oSEtlZmRmSkxZMndQRlViUjk0cDgzVThhN3J5TWp1Z1hCaE5hRVp2WWNrQkR3TWYvVCtaaGFVNEpJSGFOeXN5a1F0amhjUU9DMG0zV1Q5RFNVby9TN0NmelVnMUFhdUhYeVUrWlhjTnQ1QlBlRXZGSDBKOWpqR2luNFhoa3VNSUx1RjNhZHB5VHc1WjZrd2FsLzZWZVB1STBaNy9Qemg0ekU4a0lzTGhlYU4rU2t1U1NwWVBzcHMxYjhGc01TeEFWTWhIY0V4RytlTXVOZU83bSs5WW5qckx5U05wclcwNDRBZ0FQRURMeFJEYkdZVDRFTUdHWGZlMitiR0ZCaE1PazhpQk0reldIWTBwTUhoeDRXOXhFWm5aOW1vb3VnQnphdCtMQUJnUWhzZmZPbmcrMjM3WHB6Y3RlRWJsT1JzSFBHdk9UYlJiZFl0TzdUTUVlY3kxRXFEUWtPZzZVU21PRkxpV09rbEdSam9MTnA3MW9lRkc1YjBjN0RubDlsTWI3NXpNSGRXZlJtYnhMUWVMbkJGaWFMVGlHUXBjN3l2UVR1WXEwUmNQeTVIditPNGhRSXV3MElFZnUyUU9pdTA1cTNjUCtlMHEvTTBQZ21UR1JCWlJlWTFSdnMrdm1LMW1RZngrbUo4czZodklnUGNReTd0LytocVJUaFBMT1EwcUtmOXFqWFNpRVA4ZVN1TFFZYWgxUVpsOEhuVTBhNlJleFlNZW1vR1QzdmhOVHdTT3ljNzRhdjhQdE91R1dzYkMraTZQZjR2VVo1c3Z1ZjhkVUpDY0V6V2ExVXJDL1RaL29HU3l6bXhyYnpwNzF1aFdhRWg0VTZlMjZkendYNFhhODJnWnAwdDlvekhlUmVDZEZhbUM4Rkg2ak1kSXhFcy92THc1QlZBd1BCTFQ0MVFTL0ZiaXZ3YXpGV1BCY25VZE0rWVNNZS9JTVFCR2trRFBTWUtSNXgzOXRuMnRlWE1KdGMzZ2tKOXZEa3IzeVBxdXplNXNsZTFOUVF0bldNS1JrOTM0UTZ5Zm41dVdzbEF1aW1JMXhlckx1d3JzMS83bXZYUDMwcnJkemxJNU5iWm1uUUhReFNLVTgrTFFuYzlTd2U5eTZpM1dkQ2pvbUFRdExKdHRrcS9kLzF6Sjd4L0VoZk1Yb3hVUkJaa1AzNkpjMnhVV0pCbXJqS2pNRGNCei9Bc1l2endUeEFzT2tVT2YxWTNXbXFYSG9NbG9BcDNVSkY4QzdtcCtvaVB6dURoNUwxQTlDMlhGeE5PblVsTVhhOFBWTWVPazlIYU1YMHEySTV4UTBGeFJCaFJ0NWZrMWF6ZFh3WFcrdWJJWGMxdDgxb2lNQUY4N2FzbHNPakJVRDJHZFBHREF4MkhENVRjTjc2TElzR0dmL2lNeHNoSHpvdFhUQmJnYSt2YW5aazlYc21nZGt4NFZMeGs4UmoyMUlKR2dIQUdDUEJOOFZtczgwUk9iUWpXWUh5RXRGVVpVaUZFZGw4eGJ5djhIQW1SM2ZjV2dqK3JwTW9LdlFhd1Y2SXcxNllRYjdweHJWWmFzYnJBSWg0V3hPa1dDWm81dVpGZ1JvMmg3R1hSSklocWdKVkxpK0ZjbnZIRmtYR0lvcXR2QVB2dGpiVldYMXhmdVNTVFRGSitJTElQVVJOM3U2QkJZVURvdW54R3NEMys5VHE1QVpMTytZV3N4elJoUVVHSERsZnByV2c1VUM0QldmTlpsWHZYTkpSaU8xSWZBemg2VkpmQWppYUNSMmhvUnpwSkN3dlVVSWtKUkt0Q0hvb1NuSnBvWXEzTFZRMm1DTlZMKytlck1EZzQ5N0d4K0ptK2lUR3VpWmx5bDNSdnV1bUw2SndUWXI1OGRncy8rWWhtWXNkYVFOU0FmRUVHQXdPMmN0SmRaeUJ4Ly96RHgvSDlBWGRyNm1sQ2lSWlJVNFQraWlqdE1PWFdIbzVKTDRDRW5ocVFVZExKOEZka2RtRlR1SVJaREg2c2Z5eEFEenNLUW1hamV3VWloOHpUOE9pSW41OFQvSjFTdmhGZ3lYOXBBQU5RY2VIU0dQKzd2YTFmSFY3NzVvL1lZeW9kWEZvT21CUWZ2ZE1YZkF4aEI0Nm9xK1g0bmJzVzNtOVUyZ3ZlVXV3TEVLblE5L1QxY3RaQzAyVFJVa1l0SkpSYmIzY3l1S3lWcUtDLytmYXBDeFR4WkMxcjVXcGY4ZVltRVhKSC9LRmdGSm4rUjJIUnA5YktKZHR3SkViL1JXZktKR1FKSlQ5U1dnY3NrTTJsaUJkeXN5SngrTm9mUHFNVXVRNTRldHM4R0xmZk53TEIvM2ZFSzE0N1FpSEh3TlJCdURORVdPaEpFaFJvN29BVytCd1JUSlo3dUs4MEtuWVhPL1hTbjA5akltUW1yWDZVSVhDODFNdGxvclprMkNSRXJxZkxrMTZiSU0vSlBqcmhaeGFtZTBZNDMrNDZCS1l3ZWdNT1RJQWh3YWVQSWExRlRMbVBocWoweHFQbFpEVGpQcHZ6R3JQUkZ0UmwxYU93ckpXcFJ2L3VvN0pRWmZlTlZCSVErZUdwaW0xVlhOUnpTVTh0dmo3SVNGL1FmZE1paExxNm9NU1pFYkJXMWtERmoyeURSRjR1NzFKQ1NuY2N3M3BZNXlzNE9rZXF4VzgxTWxMamcrczFXNC8wR1c5Ym5vZ09vaU1ZM1J6cGtDaUVMSG1BaUczeXJVb2VLL1VER3hNc0ZTY1VkT3ZJMENGTTU0Q2J6Um9TRityMU0reFM5dnVMWTQvQ0pybDB1Q2YyRlNERUZQaDNMbzlrUUZMdTE2aEF2L1l2L0FzSTV4VHUrYWtxTVZWdDVkT1BhOEZCOHVEcHpSeEJlVFBSb2VFMmsrb2tSbnhYSnhxLy9WSHBldEtuU0JZSWlWWnhtUHQ4bFFMa25jaUl1WUNQMFhFc2FIdTJDcXQ4SGVDMlprREJyQ0RvRnZMU3g0SmNHNVlSQkhCU2NwNTFEeVN1c29HL01tMGE3SUpEczljYlIwakR0SXM2MHFsRTk2bnNrbHdsa2pCSXc5bTdJOUVIMmlacjBsRWt2S051NTNaUlZDaVdsUDZjVmFZb2RUclRSVllWL29rdDY3SmNJZGUyUURjWHlDWTllUHliZHNUWnRadWpLRklqUFM5RU5nTG5EekJmSmdpOWJWU3JaYjZzOUNlUjd4dytWdG0wQ0dEUkVlSkw2UzQyZGtydHU2TGlYbXI1UDE1MGFSOWVPK3RPNnh0MzhTeGViU2lEUS9wRWJweWVwTnhKalFYOEpPbFh5QmRtakJnSnltWjE0dDliaXBxTll6dUZKUE8wcUJLOVFodHNDbzFsaWM3WDhMS3BCbjUxeTdBVDF0bnZ2QTh4VFd3MnpQcEFKSC9sOGVaV3paaWtReFlZMUdxSzNUMjkwOWRWci94dkp2SDNVSXgxSlZWNEdNOGFnYjkwUDRmVzV3M3dRY1ZvSlJLMnBsQlV0OUdTbkEweGlJWVQ3V0tmend2MU1SVnFpbmh1cEFYRVFleE9COHlZSzFYVDRacVRDaFIwSEVLQnljN3daRXFxd2hoMUtHN0FSdUszWUpCQnZ3NGwyakhCWWdLVFJEOVpmUCtIWVI3NVBTUkY5Nzd5SzNWaitDYkF0TkhFdWZ6M1AvQUhCK2ZYdTdmN1VsZVIwdXNSRjROWGYrS3JZK1VKeVo2L3ljZmt5TmNmeXhqOUVBYU5CVHlIQ1kyMkxFajNwanp1bHVhVFVzLzVibnJXZnlaWUhlMXprSWhCamEvVGdKK0F0WmcyTWRmM0NhbU5xd2xiV0I4QnNkM3V2SmtHanpxT2hVcTIrdkd5NG9pd0pNUUJEL1pBVnd1UlhFTGpjRVhpb2RyVng0MmVZd3ZHYXJCUHNBbGZCU1B0SVJ0MlZGcGdBMTVlVW5oeGJYdjc5ZW1SVXVUZVlKSXhQYzc3Z1lDTDZQTEtoQzZzWklycmZpbEp3KzRGSnUrbXlMWWtPNnJLR2x2VUsvV1N0d1ZVc3F0UVNLbHZRajhWV3BuOEpORVZJNHRjNzJIRXRTYjZERzdOM0JiemV0bEpKeGptTEEwc2dHU01OWnZiTEszNFVYWDZFSllpNEJ3ZzFwNzNxNmY3cHNldDdQWXJ4bnZnZVhidm5qTkc3UUErYnAzeldxL3dRQkRLbDFCeVEzM3NsWTdwSlVwVHJvd1dFVnlscG9sRURzb2pmWitxYzFuRGE2VmxwVVVrZ0U4Y1U5djkvejQ5TVVleTdMRFQwYlJIY2IwZzlsajh1TmltR0lpb09oMm10SzEzNEhFTmZSU0Q2RVpPQUpwc2tXcEhXZEllQVkvZzhYUHc1RDByVndkeUN2RnAxQlNQbGx1TUt1RlBKOGZ1a2xaL0RJc1NqbW0zczl2dTJaM0x3UVlDeWdQdG15T2ZqN1NKVVpZS1dKTGMxcXo2NEJ4R1Y0RmdvcGtDV2RDTVA4WEZoWXhYcjR5eitJOGhYcW8xbnVrZzJSWFdqVytGR2w5Y1lQUlhBS01JVi95WGRiczRPSVlGQ3B6d0NIZHFuQWhKRWpUcUJUV3hXWitQQWRkQ29LSnFXc3VtVmc1R2QyYk10OVNKNnk2KzVFRHY2RzNhbzNKSkRoTk9zR09LbU9HTFV3bXhxUjM0b3lEQjE5L1FuTDNvcGVxZ1k2eWZFUUx4L3U3cG1ZSmd3U24xejJMRlhKOEQ5M1pFdEw5RDBPWGIwNFZSYlpxUlJjN3lkN3ZsK1JjUnZPM1QyYjREaTI2ck1ZK1Jzcm1rYnBxNVNYZ1lrdU15MGFrVlMwMzIrK1kxa1kxdHc4eFhTRFEyS21LZ2RMVVRhSU9TVXRLVnBlL01DdkE1UTlQcmpLa1ZnMkZXYllpRWVGaHBZOGF0QmtxSnp0LzhQSi9UL0k5OUlMbUNYQWtlOEJxUkNaZTdOdndMUXBaaUhJSHJjVzA1VmQ3OXRTQ0FqRlgwYVBPdnpoV1BsK2xWVTFEZSszQ2RCcmR4dlFHS2d6bFh0QzdFL1NvZG9oeTRaWVJkUVlUOEdoaWE3ekY4SUlJa1Z6NnN5YWhtUUltRlc1cFl1OTZFRGhLVzZ4dTk3REIybXpNTnpmT3JFZkZTcENtRXBZV2JncUZMdWJXZCs5R0RYOWtYRXdvTEhuTDBudURUZmJGSGZGZGx1UXZBd1lYUzRwdmN4MzBQUXl1MmxkNkM0NmZhOTR0OHdJdTVSWVVzTDllUkl5YmdLbktXdHR2Y3BtZGhSRFB2S25XMGo4TE5YNVJTVGR4SFNyQ0crajBoT1VjTitwOUZXaXhteEdSVXNnSHp2MzFSNW1JRHVYUkZpMVZWTXFmRTFCWkU4ZkpMZXFqNUQ1MUpORGNRKzZVVU1XUllDOU1ScG9MOG1OelRaTERrc2J3cGlpZVNPMWpUTkMvVUdIdmdjS1ZPQUhZcXE3WnRFSStmc1RhaU9JQmdGYnA0UVJLOEZUbys4K0ViaGNZai9STGtqNjkyV0h0NmM4NGcvMTNlamtycGhrT0FsdDJnN1RSSE1JYVlXSEgxc05nUTVzVHJodUVEeGhSOTRUN1U0MkZLK3ErYzFxRzdTODJ1SGN1b203Ymd1c2ZCS3RLa2JIMWloanAwdWxMZC9GK1VRcXNoY3lFa0xuVDBPT1ZqMnhjSVFPaEJRUjh2SllVeE9NZFhkaXY5cmczZjk3YlAxSVNDZGtSZXRmRVBJcEZoQ2RMOUUyMzU2NGpwc01uUjhPQ2ZENGNsNzFQcGlsYStqR0Z3VCtERlZ3OURZazZiMFNiRmtyVjJlaWpYUEtFcURKd0NOa0lDc1FFQ0I5QnJqR1ZidVJBT003R1BxcjMyNWFxZmQ5TXU3VmxGZUxoazJKMmVPT0xabWV3MFR6MjFPazBybEtnNlNUVEFENEJJVzUvSFJkUUtWV0N1YUxMZUpXRlF1dEE1QXZvVERrZnN6SlVMeDNFV1A0QVR6UGxUV3JUT3ROYVFuWjFFY3lDVGVsendoV1cwVUVFZk5wQllGTHlISjBzSVN6Q0pWVzZZSVdWa0dYdVNzN2RnZWlUQldEN2FZU2ZvWXo0RC9BTHovUHhVTFEvTHdEMnYzNCt6dGxVaHd1SUk0bWNQQzhHRVZYWlNpa1JjVHFQb2lHRzVZYll1NHJYNXM0T1NDbUFyejRWdTI5VXR2TCtXWFNCNXQvaWVIVHBQWmROS0ZTRFJmMjJEWFBGMENtcFJmQnZjeWFJRU96WXBKYmRDZzAvOWRNeVlHWS9IZUdocU82SGs5Nm9QNmVEQ2tvbk1tQkRFcXlQZGIzalJiQlhhdkF0VnIvQmRyVmJPYmhoOFVZWWRET0g3WnNGTXlzRW5RSnU5U3RwQmZvMU55L0VoaHpRVGhkREFRb0YzS05JcE8weDlPc1ZyaFlxL0VONWRBbVB5VjgvQnlqbWI1UG9xQ3FsQjdkNVNseHY0TkRVM01adjFtY3l6c1dSMjA4L2VTdmEyQXlGVlYyZTNGR3lkd2xkSHo0cUhRMllReGZPcHdxRGZxZG02bGtTcG9NMGNmb1RQOUVCTGw2U3d0MS9oOGx3bDF4eUFsR2ZlMmorVHhTcWsvRHFSdlZVTm05c3EwN1ZqQ3N0bGpnSzFNcFRnL3lhN1JIZ1lnVnlJQklYVy9YTnN4cUhIU2dtSHhEMWtlNm5tbTM2V2xpVmE5TmNqdGJ4ckFSb2Vqd3RqZHVlYjRzbU5qbkU2MnFsOHJFb1NzQVJUM2QwcmtvSTRxTCtrREdiN2dYQ2Nkb0NyeVhZd2kxNURvQWtHVC8wL3lhNGkrdDF0L0xGY0hsc0kyMUpSTXpCNHZyT3J4TmZReVJpVFJiYkhlVHY0WWpVMVJ4dFpPNTNhQ0IxTVZjMzZiOFQ2NHBiTkVoeUtQUFdpMmdvYjZHSzlKdVRQczlXWUdCRFE0a1o5MWFISFI4QUhVOTlzcm1TdkNVUVd6TGpWYVdmdHF5VXBsMWF6dUljRGxqNHpycExKMllSZ1Rza2JpckdpRVRpK3JxUzIrUnlSWkRIY2dSL1pIU0VFWnV0UFRKVUIrVEx2aEdWODdTRm9VSHNIWmZtVTBhMFNHK3oxbWZwZFFwWUZDZUUvOWY4aUdHYnliZUZSYlduaW50Q0NyTmFvRG1XdXdMeUxvS3hVdzVTSWovdTVLemc4bzBaWXFMbFA3RGQ0bnpTWUZYT0RVTTh2blhiYldUWU5zNnJrQ0NHTHVzekUvWWtydlkrY0MycXl4SkRkSFdpOWlyUVBNem5ySVFjU0ZuUmFGZDJPaldRcXBna2FManJKZkZqeEVNTTZ1YXNiU1NSNjR0V0pjam1ncmUrWVo1WlJtMEt3dVNVVGlWVGxTb0NWQlRKcUMveG00d3RESkFxZXk0T0hGYTMyVmhuMlQzWnJVUnFIRC95QUhPQzh6NXlRUkN2ZnRCbUNnRmkvRFMvUFhvUk9KTDhGQnpSa1FTbENKd1dvK3BRR2xxVEViWmQxQnl4QWpVYmNGUWUwTkV1TUVvbktraDdUbG1INFNxV1BVTFJVUm9lRGNyS0tBSjF0VWFkb1gwdmxTKzJxbm9tOUM1VHNpRjJpZ1U0THRvMFEwZWsySVhuUElFZjJ2SUdWbkoycGxNQ0ZyQzA2MnR4WGpUUG5YeFNab0MySHI1dktBYlJzRXFjNGlqQm9kM1lzVkVsV0luTDhHUk5wekFQeW5rbzRyS0QvWWFIdDQ4MFFrcUtycEJ3ZU1hTXVxYUtzR0lVaysxc3FOaWtQaWZxWjczaS9KODB6RTJPRVl1KzZpV0NaVEdFWHB1cnUyTkJTWlFORUpMREpicWNxaXcxMnVaU010M1EyQ1ZSY1lGNGRzR3lPSWh2Vk1vbUVPeGNMeVphcnFSNVJUck1sdTZSck9xeCtIOURSWHZsck44OTVZbm1xT3RHT202dDZoUEc2RDJVQWRNUUxDM25PWktISkJ4ZmZTZ1pZQmk1akVza2p0b2dmbDBTY0xpamtqZTFnTno0SmJ2ZXhObTRiTXg1Y0VFbGNNNFdURGo3TU8veUtTR1hiRnBpbytNTE1PZ2laNmpxbG5YMUN6Q3RNOWxVRWZiMldHa2VBc2pYQ3pzK1EyTkdvd0JJK2hpdjhQUVY2QU1QV3IrU05QV251LzNHZG1qTDJGVnp4OE9sbE5VbytqcHdIcEYxUWpydXF4eE5kZzhlRC9SVDZ5YmJQVS9OMHpEcm1QN0lqOVlIbVViZGNhaHYzUEYrcWF4TEZjanNNS1E1SUFmTG94dUo3enJ2RmgzNXF1UHpxZGdwNXdDMWp0dkNjalJBbEIzdXF3cFpZOFYrSThRUExQWHM5UkFqZy9keWFmMzNlM2lxRVlrN2pURzB4Qm1JWUI4SEFmbFBXbEhIVjVwM1IxTnJIbUFycTVNYzErMEEycWZsNFVkWkZwUDlOYm00MW01LzkrWlMzU3ZrZE5ua3VsOHFVaGRCUkhZRkwrQ051WXNhSWh5bmd4a2VDRE1jVVZmbWxnSUI0SUYxbmo3em9HTWhPSHAvUFZLZU13bVU0aU9tc2lUYjhrYXArblFRUERmajczc0pzZEQxQmFlWmFhc0hWN3pNcmlVQTFlTEpRcFlMU08wUzZXbnR5QkRzOUFKTTg3REprUDZYUy94R2UrcWU5QU1sZ0g1S3lVay9tSjNIVjJKZHBFa1BpUGRBOUVmVkMrMk5JN1g5TW4yL2hENlorUThuODZ0Ui9CazhMVlYwSjMzekF3V3NGUCtxUnBUaEVyYjdTQVY1K0Zya2h3Z0phVTkzdVJwc3Y1cE4zYkRQUG9USGNhMFB3d1NLaTFlZ1FwYzBXMzVlS0tRVWhFVGJFa0hLSFlyZGx1LzJsTEVPT3FVZVoyUjNnd1RVTjNPREdVeTcza2ZPdklZVWh6dEdQL0lNbFNWT0x1djFqNnNDd3NoT01DalZjeWR1S3FGY2x2RHNmQmFyRytReUVxQXhKdTdJTWpETnZaSTJVdE44MGdVTjlUN1NiVnRyQjlibWNFU1VDV01VZ3JJNzFKc3kyclR4TCtKdE9IQVZQamN5bTdybURxelJlVDcxS3o5OFI0aFg5WnVsbjM0STMyTkxCRmpaUlN4bENVZ1NSaTgyMzZTZ3ovQm1WZFhMN2ZaYVdYcXFpV3BwZ1hIbGNvckVQaEVmMFlSYTJEN0Zxb0h5RTRWclBVTDNoK2ZCVVA0WmtTOEdFYzdzMzljMWtBNUtyMzl0MlRXaFI2OERhbEc0UVc1OTNtNjdWTzgxbmNXZk00Wngyak5iRDBlY1BudUVWWGMrR3grYXVwb2tqT2padTBtRVlCeHl4ZGo4L2hRT0kxRVVoSkJGQit2aHFEVFhESkRRbWlVdXdnMWdtRG5wSnk4enB1UDNJNjNNcGVReW5CRk01TFVmUDdYN0lybWJJWU5MdWdXU3hLL25jQ1UzTHdIQlpySkFvVStrcC9lVUlnT0RnN243VXpnOXY0Q0ZOUEFHM1ptRU1jSmQ1M1VhUUg1Nk9hRVBkUTRrZ1ZYcEZZSWtVeEh2WE1aYUZxaUMxRldPcWozSjc2THFKRjRhaGg5S08xdTViNjRuV044MXlXcUpKcmVqZ1RlMDJjS0hhcjBlcFMvU0ZJbldYODJNUmMxT3VOTDJlV2xZaTI0alJYNGtiOFpaZjB0ZkhOcHY5SXAreTN3Mm9vM1JQakVVNFJBaUJab0x0R2taZS9Na0VQa1Nvb2ZjSUVoYU93NGJXdXRHR1JxRlhGYUhvRjhxb3l0VVAxeFZiT051RkpwSDBrK2k5MzUzQXljaXMwQ3lXL0RxUkUwazVqc3RMNmlZTzE5dXFHMlpQc3c3Um40TXExMUxrMWN0dm8velZMaEVGNUZ0dWJobm82RzlOTUk4YlVCb3d2SmZsUWxUN2cxcURueUU5T0JJbk1kdGVqQ3hEWkVSRTM4L25HM1NLd1VvTTZEakZYMk5INUtxeUZmbVlrZHJQQkFJejVuV2FOODN5REJzMWFPM2gvbGRZYTV1ODg1VXQwZWdmZCtKVTJkazdxMzg3UUpPTldKRkovWjFaaEtSK1FzeGdBdmYwYkdCZUZVdVp2NGk5ZjZqQUhpYnhteXBlZTl0cG5zVGhWZ1hLaGp0aERyanJHeUdtRXJmVmMvd25xK3ZkZTNza1lsVDNTNHJoNUZrRnRSRE83SjlrRWpjenh2dDN3VFo5OThDbWhzeGNKbFM1Zkg4TkVJUDNxM0JmVnduNDNOM3h0aFV3Nkw5Zk50TUFEbWJTVkJHMTk0VEFQRFRleXk1YWtWeGJrVU1CR0hMMHpwS2dULzFWb3JrSWVOSHZIc2szeCtrNE9pYjR4Y1k5akJ4d1NlSjJwc0dzT2tZSStTQmFrSlBPUWo4OG5INUx5Mmx0aHAzeVZSc2ZIQlZNU3FUZzVMaVZSd3BhZ3NKWStKUG1wVFlFbkR3VjhMY3RnU0hQdDRCUk9WS2g5RURVQ0VRUmNGalZJY0gwZ0dRNGh6c0xKdE5SWGllcEhDRmxvcm04MGV6RXAyVzZCcFgzL1VCa0ppK0k4TERjOFN3eVVPV01jak5FbDA3VDkwUmdvaVhOM1Z1SjRFRHJ3cEVsRS9IakNmZnlDcHUyQ0xDTTc4VU1jMWdGaHVKYnEwa08wY2J3RURYVERGS0IzRUxlek9tQzF0S0FBTk1Pcnk1bUM2QlFOOVVUUGwzRW8rUmxmNEtJNFFsMFRkc2ZLVG5OZ3o2MVhoTkszWVdCZmdNZVE2UWtEeC84NjJSTkI4eWo3TUZLUkQ5aDlHYm5tL1R1OE4wbU1kQk9XV1VnVUR4VGM4Rmx1VmphT3BHcGMzaWFRenB0QlNPaUs3R1d4aWpQbmdxUWczcmVFZEorcWJjSHlxUGF3YlFsNmUvRm0wYTI5V0lsUVhWZTRmYWxNc2dsUDBPSjMrREVvbDJWKzdUL3pMYUVPeXFHbHBHL2VBTVpsNWt6TWs2SnJqbmJ4TDBXcGpuWDIwS0ROVUh5citaYzRqZzlqNnA0UUR2UmZEaXllOXJRSURBTzlPanlhbmRyQlZIS2RkRzVKU1ZmNEU1M29Rc3lyc1RLcjdzUE83d1huZlBDVnVOczBub2RySUpadlFHZlNuVUV3WXFYMnBiU3RlckJEU3RPUkhEcXFDaERjcWVZYTdJVUVsRjJQeWlHRnR1czhLaWZmQ3JRbUVkMFhWZ3d1cy84czBFSG5BOEhOUzlwdjJmNWYzNUl6K3dJc1d0TC9ZQk9UdTRFZzdLWmJITlRDNnE4SVlKaVNnRDI3WDFLL0FYNVU0YVhaQVZZQWZxZFphbG5TYWFFVHFGUGRCODQ0K1N0cGFiRkk1WWRyQXZwUG41b1dMSXdiUThham04aitGWmRsMHl2NmJNbjBpTWovRXhJektYVlNTZkZQdy85Wk1LVUl0UFJ4aVE4cjE3VHZUWVhQR1JNRGVZT05BUjY2YWJGT1JFMXJZMnlZbWRRRjNjakZrdVdzUHQ1UXVaUmNxMDN1L1RySER4ZnBnRi9BaGpOTUdGNDl2cUhZcHlCdzFaVXJReUdKWDVFSUZUU2hDYkUyWmRUS1MyNzJuSW5GL3dMbm5od0lFOWtnZUVEcUIra3AvVzZSMkl2clBwOXA1bW4wVDhyTHB3SCtlRSsyVkQrbkVGOHRtK0E0WDVXRE9OK2p5NnNDa3Z4NEdlMU5TOUQ5MUJkSG9BYkZYcWh3N3pVaDRRWW52WWl3UUNZNDdaTm1vWDM0elAxMFFtNVNET0RSY0xNd0FZbXhQR3dCcy9ZUFNnMUVSOVNDeTRCTkl6UVEvd1J5N3Jzc1NkS0kxWVlSVmlIM1ozUVRJaG82bFpqbEJlM1ppb2NucGQ1UVFjSzJkWGQ4cHo1eCtEUGl6YmZoNUhKVS9CUjQzbGRSUkFvdE9RS2hDTlUwc2xFc3huNXFZUnl6NmR6amo0OTNRVU9yUGl0SmNicDF5SVRUcCtxeWhpa0w2T0Z4Ri9jSkZsN0JoRHdRZ01DcDgxVzk2YkMxczhTSDdCUkIzS3NCUXhLWWNnZVlYVGpUMmFsSDVILzFLeHVYVk4rK2hRL0FZb04xMWorN3diWEhPZ2ltdmdyT3liUHVyakpWR0xucHE0d3NTcWFBRDZlaU1CK2IzUVhZRGsxTEQybHJQZHVjQ3dFTGgvTGZaRk5iTzdsUDBKSTBTb2ZQUWdjTkhzdkpPakl3M3hZVkVSRDZTZjFPa3NnSlVhT3EwOXZzdHZpanV5YmxsNUxzSjFlYml0Z3N5VWFZZ2hreDAzVkRnM2R3bVhiTXhuRCtjK1JQcnBMbCs2ZDQwcHB3UHEwUUZvbWVTbU1DcmtYQVkyWnJZcm9XYU5GY25QeXp1Q0FMOHJldVRoSzl4TndnSHpvWGl5T3VTRUN5QUtlMkR0Wi85YVVwODlTaU9OaEF5YkErcjd0YngyQlpLdUhyUDNCSENFM2hJVHR3RGFrc0ZqenJhSlZKR3djL3VaTW55MWtiSHNwZDlFOHBxWDgybmdOeUh3UWJ6T1V1VmVTeElHTm9oS0NkTWMybkFDRStGbEJwTnVzelNKTHlUaTFqTVZlcTkwTDJVVTFPemRpSjZKUWx5b0hrc0JJVFFRZENOMHZDZStFRGZIb0pLNkZKWXhvUHlKYkV0bGdDQmlvTFkySWxqTVlPYzdpQ3FMZGY1SDgyV0UrWGhJcUYzK1h4bnM3ZWRGbE9aRno3MkhDYUtSWTlWaEFvOEJKdU9SZGZwM1h0WnJsWFkzTDlYRUJjckdIM0tjeStadjdsaUg1REE5Nyt4dHlKVnd3cGVmTWdzZEpMQ0JlNWprQ0JFS3k4Mjl3TXdxSkdBdllPTHlveXVxcXpraUtmOXNtbXdWdGJIbWhFU09EZEk4T0pjRUFrZURqNGtCQ3p6QUNJSExKQ0VDNjFoSG5rWUxtN1piM2JQei9QdGZlQmwwQmhDZTJ3a2NQTUdXOThhZDU3dXpUa2ZPY2dxcnc5Z3BqVW1NcDRTTklEOGhpSVNMTytucjQwaGptbzd3ZTlidVE5VTNyS29CVHBhZVdDNUxLK1ZKQXBMekpWR3lOWExaeXRjSG9rMWhoY01Wd3VvakhMU1F6NkYzeFlVcnJtRUJ6ajJBRkE3Mkt2UmU4WVp6TlROQVpBYjgwaDNzU1A1aVg0eHQ3L1dzd0tlczBNR2tZSnJhZWNhN2U5OFpoUHpOMExYQjJsK3ltOUdXTEI2dTYzdnEya0NmbzVBbzRXdXRsVWhrbXVzeEpTbHUrVVIrbXpGVGJZRjZwcW0xaVBxSHZ6Z1RrM1dsU01DRW1Pa2w1UGEwVy9YcjlqZDA3MXhZM0xEMFp4RzYwcnJ4VTJNT05SbUlBN0Q4dTdGeklUR3Q4QTE0ODU4MmJ4cTVyRVF4cDZVZW8vbGZHWTJjUGxZSmJxMTZlTEwrVG5Md050SzlsVTlXaUdUMXRjZVZSL1lhdFptaHJtUDk0cFdsQ0E1YmIvRWhCcTVyeFVRUXV5ZzIycHpRaWNHbHR5RXVVelBrQjlZbzV5OUpvdlRrRTA1NGoya3VlK2NEYUUrOXg0K1RMN3ZTU3QyNkxlTVdRd2FCZThTa1lUVTZhR2R4ZmFZZDROaUx1ZmY5Z29lYkRUd096bXBCSU9LTTYxK2RSa2toY0tZR1hPRFI2TWlXSlp0bTU4SlpHb2E5OGt5NS8rYWI0ZWNkSWhRQnVuVlhJdW4wNW5PZnZ1bTJMVS9Oc290c3RwOVVjNEZucjZFVVdoSmNXeDJyUjVxaS9WY2NBWjZJS0RrR3pucGMvR3hQSlMwcEQ2bmxoc253Y0prZDl6b043bUhPRTdmcUExUDNIWFVLYUNSc3JmVXdqS1A0ckI0Q215WlRCOW0vUTlVYVFlNTdjWnNqd3JKLzlhVVVyd2kxTWd1c1QySDNTd2E0NmxvM2ZoVXlyTHk0WW92TnNtbHhIZkR4ZkcrMWIzc0JKOFpKYU5Db0dVb0NTMjBRd2RHMU9KeHhDZVhSL3pnQktwK3lYZnpFZk42SU9zUXdFenE1dXNqOUpPZitYUit4dmNHNVBneEE5KyttOTh1Tm5oTnErdnhUajVQTDA3Wlo4bTVmNzdwVWNhYlpubURwa0VhU3gzMlFnOERDZVFTWmRzSXVpTmMwcGROZU1laFpSL01yb3lBNzZwRVIxdFhSMjYyU2I4c0VhY1VrRng1aUphWGtEbVB5Mkk0UkpNQzRuMlFWU2JXMjJhamFQeTNrTjE0K3dwbm5pbHNtZ1dwdElkamhCWGRNa21CQktuNVdLRjN5OEdsaTZwS1hxRWxvcEpGOUtMekVwc29UcEZDRy9oUGVETHBCd056V3pwb1lzdGEzYkxCdEpLQ1RCbHZ1NUhHMVlCTjM0TXhGTkYrMTZyNWJ3L052NytnL2NyNzB2N2N4a3dVZ01zWS9HT3M3Z2JQN3diUjZNVTBQemFCSnZNOFcrall3eDE2Y1paRVduTGQvNDhNOWswRzUxUmI5WE5mcVB5eWNuZ2xaaUNaTlBYb3VjdVYzWDM4bittcFpzUHdIbkFVUEZlNGpSQm9TNWdscTgrZmg2am42aXpHR1hSWWFHeGpzMWx4OEpQcjIyYnhadzdrL2dGdTk1V2V6MVpjVXdueitYWlJzNG1icjU0a2xTMnQ4bEVKdmhiMEgwVnkvV2xTT3dHekl6M0JXRXlkKzFuZTZZRGxabGdUVTdZNjFxUWJEMmVDOGdHK1NFL0U1bittaUdTUkJ3L08yTlFnaXVORmM0cmh2YVYrRXdTd1pINXR6a0JNMGF6SVFOb0N2eVR2Y2RRVHowd2pwQmZ4dDlxWGhRaXBQa1M5L1FrbHB1RWt6eDBPMmFUblJuMnZIazFzTEl2R1FsRXVOWXA3V0hMbzVjaUdUSXFZcitkcC92TUlTSzZITERyRnhrUlVmWFlTRUx2WElwT29XcVB5c1g3L1VMQS9tYWxBdlVHRDhDaXMybVM2a052amFtODdUYUJZSFhuRk93TU9uSFlybTJxYURiaFFYTk1YY1RaWWc0S2xhY0dGdTlIWUVjbW41d1ZyeGRTWjczZkN3Uzg1SVlXRklLaUVpZVNHSk5ydittaTZmNHdjbVpmZ3lzaEZUWnB2VlRJR3pOUDFIV1VaM2EzTHo5T2FlT25aeXQ1ZzFWei9RT0d5ai9QbWtseDY0SC9CSHBYeGlrZStjV3FSRTBGd1F4QjVubGRZclpyWVVobDZhSUJKOEVmbWZjV0ZRRGpBanFySjhqU3RaMVVlc2xJRnNzaWx0a3VtTHc3K3ZiVkpsV0VsNVh4a1M1d1FZdDFwZzZobHd1cjdJS1pseThhRGQyK2lKTW5vVmhGcHd4MzM4L1FFUEZtVldzSUhpb0IzSGw2a3Y5UmJzYnQ1T0RkVjVwSDRjbXhDZ1l4UTNtLzAzUVdxNGZCMWtSQXAyZ3F1OUI2ZVZ1SU5TNjFmUVo1WUhyQ21XOVh2aXo4R2tLcEhhRHhwNHYvUndUelJhMklDU1gzWFRhTFJwbHFxaFE1MzdWQmVwb1VsbmRNRlVrWUNSeVBHTjNuVVF4eEJHaE8zdGRrRGZxanVFdXpDNGtDam0wbmN4cEM1STFQRTNVZVlUT3RqTHp5S1dtMElWWFBtUyszOE1KbnRVMy9CK3ZRcEdta0lRMkErc3hoU3RTdkpaaE91S0IzR3ZMVDNOYlk2QkhNeGhYbVk4RFZhT1J1MHVMeUtOb1lDc2RUUVl0WW0zRGJqeEFQWXpsMlR6NzNUSm5odUlBQlQ1SGZ4N013QmxabnpVaS8xRmRvWnd3TC95VTAwRGNKd2lvZENTT1F6L0tqTE9WU3pVeVk3Qyt3c0ZsRVQ3NzFUeGdCNkc0NFNIamRRaitnVDNKeFJkUkpaUUc3T1JReWFjS1FpRkZRZmtBTFBHSDAyRFZROGNIZGY5S0M0aDUyN1FuTDVUbFFxTzJHTU50WEdTcDdXR2NSY3FQa3VSSmRWT0x6QThnajF6dzgvMnAxdEhheVRVVkwvWkJCYXhham9vRS9qc0ptTnFxajVZVUM3R3Y3cVRRVDFiYU5rekt2YTZLeGxLcFZnaXdJaUJGMUVRUmxZbk5hb0k3QzZ1cUlieDl5cXRHT2h3UmxVRFY5dHlNVURiRjhOZ1hnRmQ4UTgycnhPeFVCeGk2aVV3RWdyellzOGlxMzFlS2NzMlhHZkF6WUc0eVdoNWF4NFVCeGVvNlN1M2VWb2daTlVwekxmTEhaS211RFRqTWxRU29tcFhkbVc4RDQvbjZpcHJ2YVlKcTZhZ3RRUDdIcENvd0xkUERzeU5NdnZ0bkpaOFNsc2pTdno3cmFrbHRIZFJmZFMvNkM4dGoyOGNEOVBqNFBkalloZzZMUVBnbkJLblZ3YTRuSFYyODlsUXlLbk1QenlYaW05bjRjM2NvOW1mOWNsdnB3amNrT1dqekhSZjNwWjhUWDBNSE1NSzNRNGpvT05Sai9XaytYeGZEWlE3SWpXcEQ5SUVKVVV0ME04UkMvZUQ5VlFqRVNKN0xyV285R2VKSUFnU2VYWHVDK0hQb213UHFWTEZhM0duT1E0akNpYWx1MndsY2t3MUZmWkFRWWJqMEpvVTJKK1N4c1g0ZVNRU2V4eCt1MGRoRjNaR0QxZnZ6bk5wSVNSMitTTlRWVjcrWmRvV1BydnZ5dWlHV0laVlBXRHljSldjK1FuUnI4eEtZQkxYZGxwR1FGUUF5bkplK2pDc2xrbzhnZEo0UWl2L2lsR1NVOE9wNXJDNm5VN1djckc0UHZxb05NQ0JHdnNBWnYreDViZURvVCtPTTgzMFpndHBpZjNQUUU5UmVSOVlxOEcrdDhoanVGWWJQUTJUckZFS3JzZGhCVjNOSFREMSs3b1dLZVdTL1lrL05qaC8zaTNkTTdCaEFFWFBQMkRIN2JvWFo3TlgyNWZKQVZYVzh5aWMvVi9wRFcrb2QyWEYvSXZ1R1ZIWisyeHVZMitFbXQwbnNVVlhKSVZLSnhGN2xNY2dsQlFHSk9LZzZMS010OUZkbzQrdVpjVGlCblJTR0RFWS9MemJwUFlnVkpZVTJmejJTN0xGUDVEcTlvWHE3QkdsaXB0cWhwZ25mMmxnTktybTZKSGplSE92SXZKOWI1a29DbC92SlJ3elRSNWJwM0hRNTBkcFU5QmdMZ3NmUjlCMm5aUDYwZmhFaWVGQlBHaGVYaEZGZWRXOHR2eldIdGJXME9tQm5vQlkyWXNzYjZqN2JTSFRoU1ltdVdKaEduVkNDbXVySkNhMmpUQXAxdjZwTHBHZytjSDdmQ3Q4eWovblBjMkVjemdFQUZJdGpOYTlnNzMwMVhCRHJhNnBhVVduZW5NMzRZZnFyYWdxOW5seCtpSlluZFZ3VEVHbkR2OVJrU2JGdkxyejdKOU1tYXJmT2ZBT0lmcitEQlUzSXpiQXU2K1dmVHZTTGFYdjcrSmplNWZobzFvdkNNZXBoaWdURjQxODM4Qmwvd1FOQ3pvRm1VSjJPc2FZMUJsSjdPT0RCTTA1eUpGdHJHdjFQUDNZWkhicHlIclloMjFNQ0tBUmw3c0daWllmcEdBbU9Ga3BjODRJWkk1UmxnR05KM3U0N0loclh5Qkh1b3FneTRMaWJTaHEvOXJzVkh6SnpCQ2dMZTZPWC9SZFo5WlJNbzZFb3hPVHlIK2hJUWgvUDJ6NDAvS2dZOURuS0pKV1dDM0ZsTUFkeE1JWGhjTEYzYWtYVDVzaUxxbEhTaTdVN1BnUkdsQkZ6dlM0RjVaYWZwNkNNajhXWWw4ZmlKVThjMU45TytyS0VqQWpjY1JCZ3V6amszY000djJLZ3JQcENaNk9Xa1JMM0tUc2I5cDNMQk85TjI4RlJsWjlCNzZ2aXlFbVBHcEEyQkNrUWtVckdwRzQ3RWtHV252SjVJSHBvWjYyV0toRVpRQmh0MXhMdHV2S09FdE11RG9CL1pQM0MvbU14TWcvNUIzWE5ETjl1aUZERmkxZ3hiWE9QaVIxU0xyZXVjb2N2b3dFTDAwV2F3dzE5eG5NcWg3SG1jZVFPck9jdHhyYXJrQ0NhcHlOUkRUbTc3dTJLaW1DRWlGUHI1MDB1VHdCdzZmdVExZUs4U1dySFJMdnMxVVVaMVpyZDJFT3VscFJXOWZocER6R2RiaHNZNk9JUTVvVnl6TFNRaXByWFEyUlltVlQzK0dWS0ZDOWhob0tPNXNrczlERngyc0VNeFY4ekdPYzlXa3JHbVJLRnlwZTY4SkxLR1BreDdRZ1YrTFUvQ3R0OWl1enZ0YzE4WlJHSWgxT1VtNTNCdlM1bWczZm9hRXNFeTl3K1MxZ0NqVThLSE15akZwSmYxSnBNam5EbzhYc2J5bjNGSjFuWHlpVGhONTVUa0pMWmpaby90WEdGRWU3TWtqTnNsa1JMUVl6SVYxZWlTOWJIMDVMRENZU0hYOXZiNzN2ZVIzcVVLWTBkalJEUFhmbG1RRlQ5dzVSWU5oYzZ6S2dOUlFWeDY1emJTbHd4dzhUTEUzK3dZZTBVb2tldlNvZ3YyeFRBN25EbXVqS3d5ZWhBV2RXK2owWUltVUl3SGt1enY4Z29KRjNhUStQdzR4eFVYakYyM1RHZndHSzZha09xZEhFOEdBcEFISTN3WFpGQThxQ01LZ09uK0lZS2xzSmNIK0JrZWVGekdZb3JLelFwZEdKS1JqbGcrSGd1VHZMVmVHSXoxVUtpUXNlNEVnTFIyRU53YUh6bzBPdFIxalRvdVJvVXRLaUlCRUhuUTdxTWF2RjZob0RFejBEUDdKbnFXK0dSY3VqN2VpTFBZck5sVnV3dXdmdEdJenUvOWt3SWNmcmhaREFXUEZ6d0FMUTRNVFpSOUk5VmhQSFJ1bWlzTlgxS00wdzdCZ2IydWtUT09hUW9qbUJoS28rRStmYzkvVWZJWG5nWHhZK1hIbW45OVIvYmI1cUM2MXQrV1BGbU1KNnQwY083SkZSVDVURWZJV1E1c2w5U1hNMnJ0MGxpT3g5UVFkNEozZzZzMEN0eW5PMmMvTzZ0bXBiakhaL080R3VhZXB5SmZlWlBKL3JLSnY1Zis1VXNVb1FUS01YNVM5MGExdlhxNkFUM3llSlcxRTJLbXU1eHdEaWx0bWEvMWM2b1JtRDlWenBLVVVRazBDcFc5bFVvQ1BXRk9uSzU1RnBxLzJZaVR0RGd4V3c4cFlNb29pOXJyTWsvZ1ZhOXhxVForQVpWV3lFV1FjSmFKRUVtN2dBSjdIcFBOU25EVXpqRTZrUGNEVlNvWDExTUdBY2pLU0YwUVcwTU9pbDMrRGJuV1k2d1BNbGxUL0JybDZBMmhYakVuWW42OWtiV2ZZY0lIam0yOVl5T2V1VW5VR3ArTVprb2JacXlOWGdJVTdxMEY0VDVtb1JYcUp6QWVnN3RkVDN6QXgveGsweDhTWmtoSnM4Q0k2cmpvVDEzYW1SV3F6NEJTMXNjM3I4Z21pUUFIT1dyQU1iZmZQV3FwZ0NJWHhrUXRMTHFXMFZ2S20vMVl2M1BCYXJXUHd4U2kzZ2xjUytISGNzVkFtazIrT0NFVEhYaUsvcERqMmZ6L0RPcjhGUm1nT0wraVBlRkhEL2RrSkgvM3hxV29kRU4zd3YyNjhYZEhWaDlDYitEUlBrd1pUeTREVGpJKzRKQ1dMYTNPQ2lOTGNmOFc1aTVQM2ltWWdDVHJURU5URmFvY095MHR2ckN2TmhidzhiVHkveWJjY0RsZW5xU3JMdHhUTWtMcC9FUFJHS2g5QlFkSnRtYUNhbDBuZFUvenFQZUNGQ1FiS3ZObGJFQ0hmRjFJd0FlcmRxL0J6Uk5SYUQzaXFLdTByTVd4ZkgrcGEydEZoeU1RY0NOOVVweStIWVFUbHBOZ2dkZEpYQTNrK0p3Q3VCS0lWS3ppOFNvODQ3STVRVDVuektIMm9naGd2QUErQkVsQm1qUkxyeHk1QjVHMkllSXJadTJSbmZKOVFNZHBBb0ZxaVpwQ3p5aWZZaGFuRjdiRVllOXhmZGxmSTR1VE9SeXd1cVRiTGgrM2VNTFdycmRmeDdaUlBRMVhINjFCTE5vZ21hNlpra01OME1hK3JLUDlrM0NEcnBkcVFOako0TCt1UXQ3eXM1ZEFabDBkekoySEM3R0RQUWhsUzEwOFVmNDJpRDJ5WVBzVXY2Z2dPQ0pVMFNURkNkdVlvMGVHeDJ1cjZCT3Q4c0V6ZlBqMFZGUHF4RG1Sci9pMWRzYTlIeUVQbEkzb1dRRUc3ZDNkbVRTWUZtMW43aXNGbDhqOHhzMWRrQTQ4ZlFGekR0cDQ5TzJUWWVBcDI1UGZoUDRFQkM0STVHdFFiSkluWThDYzRyQ1RvT1hvL0RZazQ2R0prbkE0eG14WGFWSk5KRnhpd0JGdUJ6aHFVaDVMWkc3S0oxa0sxZCtHSGRXcnlDL0h4Y01SQkdKdGtjL2tWVFZrLzBZb0s3a0lydUlLekxxZ1R3NTVoT2NoNlpTOGpHdzlUOWtKbWVZbC9ITHowYkQ4TVBtbk0zT1pQTytUdmhYazM3NjJFL0JUTFZQaERQN0VIbmFIVU9MclJHZHdsVVhkV0VwMHNKdWRud1RzeVIvTnE3SHUrUTlST3B1V29UZWI5OGtWR1hSdVRwU0FNb29saWF1dENZYlhFeGM5ejM4NmNJNGVvVVlTWDY1TC94Znpjemt4dFJvM1VYRi9PS1czMjRORzExd2lDWFRxcjRtdmlVNDh0TlhFWTNsSGx6YnBSckN0TzhqYmwxMDJwSmFTY3l2ZFRGSEhCZGIxSXMzVVdIU3lqUVRoSXp5YlkrVGlUdmNXaDg5ZGxUV2dDZTNYR056UCtrb2ZJb0Y2Qk1qT0dJL3g0dWswMUhhaDZJdE41OUhJTUFNclN0MWY0ektuTEw3YzBVYURDNEwzaDJ0WnJhMXEvTmVZRUdXbE1QU3F4K1ZSMHB4RlN0THlZdlhtMDhzM3dadzFWaitScC9pL2FYZUVTU3ZzZjBOVDg2cnV4d1g2a2h4TTcvVnhxR1EzbFJPL1VETDJwUVM0V1RUdG9Cd05ralowTFJ4WmhndkpRcnFEVFlRS0pZU0NMZmpVY0RvRGRyRlIvS0o1RG0rdWE2a2RsRkVCMTg3a0dYMnVFTVRVU3MyWWV2YUdkQkdaNU1DRWZBQXUxc1Q3bjBCNDRLWmFXWDlDWEE0blZnOHRqSlZuNktzZGFtMFM2NjJTSnIzTmhZdk11aDdyK3lwWVhUaGFQa1FROHR3MW5EWTNJVWJkMHFoSWE1UFEvU1R0M3AxVlBaZCs1NFlPZUhOcVFIR0plM0pPbmM3Tnp3dms3NzN1YkRHWS9oWlNTRUIxQzFkUHZJZTB6RjlFR2p2STA5VGhZcVZ5SG5BNTNqVitNcnNQVWhnU0tLVnlPSWluYldVaElwTU1Felh2MlFqUFAyZ1lQd0dkWDBvRXVvN0JmazBxSmNlcU04MGpGY1dFNEhScmtJNmk3d3pQMVBaVERMK295dEVUaTNVV25WMG5HOU1SakFVcGlRaFJuY21xUzBYeDhWL0VGaE5mdGxJRmNaRkZVZVBJeXZLa2lzNS81QTRSWUdod1RrWGtrd3VtMi9aVjRneFRUTEJHdVBPdkE2ZTJYNzVwZGR4RVZsaW03c0V3M3oxY0EwZEk0aDhYTUhlTTZsUXZkeHpsOEtSTVFmUEo2bHRXUjlLSlViWkpjcWR6NzFxL0pXVUVoVytMWm9lMFQ2bTcyWjZTd0g2Nkl4SDJ0YUZ1YjBNTzFqYlYyZFlCaUphbERIcTVVYjdJZXJPOW04Nm5laldwK2ppSFJNb256ZmFiekppRmRJbU9sNXE1WHk3d1FVeDA3ZkFpQkJMZEdzanBYZlFKcDdpYWxGek5kYzdDUDJYWFd5WnVxUWpvbzh4RU9wUlUydGdwRzJwbUJqVkhzZFIwVEpuYlhmTFFHSk1VSi9idDYweCs0cG5VbnYwTnRqMVRaZWl5V1JoaTVmWmxBUXRLemRFUjBDNWVTcXNTTHd3YkplS3N2KzVTNzRnS1dRVlFmU2YvSnk2Z0p2bDJmQStYeDlwNGJjM3d1Y0dYVG83ZXIvODkzeGF6QUpFKzJZMUJlS1VlQzMwMFNzZXd4RXgzTlR4YW9CaG95UGJuR1ozai8zWjNnNUpiYmdsYk5ZR1J1elFQWGV4L2tlYjB5d2ZBYzFYY3UzNS9pNVV6NXB4S0lJZW1yK0R6SHVKREdBT0VOdUlVUENtSmR5S2xhb3BCQUxPemxZMjJlbEk2UEZQM3hiaGdhRzd2enFFb2tHbVppVnB6QTVjdjhINkRwdExNaTc0Slg5emZFRm5tRFA5MTRSaFJ5ckx6cTlocEM4WWVkSEVmdWs3VUNLVG8wZWdpUGFuMFMzcjNZRkJhdDRBM0RaKzZtdzRsc2RzR3FpWWhGTHVNaSswTFlRY3E5YlhRcVlpL1RzRk1HaWJoS3BkZVpMWW1VNVFpR1M1QzVWSU4wUVNwMGtuNS9nYWpBSjRxWUZKNnNRTENWVUd2ZlJCUmFyRVMwVFlxQU1xNlI1ZXFZKzYyRi9icXpab1BIdmZzRGEzQ1ZmZFhVcmlzZ3JsbEY3cGZzZC9EVTB1NThienFjR3EweWRGaGZZaWhHZ3ZCaUlmRHJzSEdkekU5UkJGSWplQ0l0d291TU1GclF2NVZNNlpIKzMrMm5tNno2dGRCZUtzTmh0YUpqU1hpbi9IUUoyOVJaSk1uOWNqWEo3YU83N0k1UUZTOEZOeHI5RmNIV0lhR0hsdDRaQmJtcDRSRGpyVFcvejRaRkx4OEp5S2lsU3RxTVNsMG5TMUhSVldKaU5ITVh3eDRVVkhuWk1IOTRHQXVEaHc5emV6UFhUQ05FRnhJSE0xSlJyTE0xWHlvaWxSN1YwS1JxcGNJZWgyaDVOaGpka0RObzl3bkVBclVTSTJVeXpsRHlVN3RWVGRkVHk1TnhuV2UzeEtuQ3NyNUhkRzI1a3NLVTBvRUFWeHNaVVNCS29TRU5TbUs5K011UC9zdXFtSUkrVkxoNmRWTERtNSsveWMwR00wcSs4eWZJTmFXRlNtRHpFZ3JmV2RZNzFMYjFjbXlUZ2UxUHAvL0hlMmFmdWlSbHhrSGd1MWp0aEp5bHBUeFJlQkxBYkI1VldLbnZnMmVZN3libXhRYW8vV094bWpqTGhWb2F2SlgvUWErbEl6K0pSQVVVbkJqTTJ1UFRyNlRCeWZvcCt6T1dKWWJQSmRYUkQxUHhhNzVCRnhDRDhPSDliS2JYT0I3SXBqVnVMSHhQd1NOVkFzR2JtanZJT1I0N3ZWblZpTllhdnFsTzNJSHFSUnFSaGYvSWdWUi9ISlVNRW01UTkyekZ5YVlvcFE0alpNSFBvK2QyTjdLdENTcHBXelVWRk5OVXZiL0x0azNVbVBreGt0OGRJSkZyNGJWclpVTGRDNTYvQWJLSUNRQ3FLUGhDVy9GSXRWUCtYTk1RdU1wbXpDc2ZTdzUrdVZNVVpFQTUxNWVSWHhtN1dFZVNxNnZDOTc4clpwM0lZVGtmREVKR0dYY3g4b3h4MWJwVTJPbTRYYk5qYysrZFA3bm1TcFdobEhZbzJvT3pQRmVlT0w0cTAveHEvWVBaU2pFK0grRzZMUUZlaDdVMTllR2ZzWUxWN0JkUjY2RktTeVBIRW5rZCt6TmwzcXBnZmxRMHd6N0o0UmNkVTNZcDQ5NDVCL0JlU3dPaTZlK0kvWDM2aUs2bTVGUjdIMDUwRDN3a0RGNCt2SldJVnhYbmw5RW9wYzhETEdyZHMydDI0Mm5ySkJ5Y3VJSjBCcGFmVUgyYjZOMlBHZGJMdzFYVkZzUk5jbkZISXQybzdjdWc2enduZlI2UUFKekFFaFcrbnd2VmhhNk1zSHl2ZVBhMmQ2dkljdU04eFZ2WisvVzl0aUN2NzZtY3dnZTJhRkx3TnBIVnp4ZlpyN3ZHVlc3ZGFZMUt1SHZ4MExDeGVwK0laNi95MnpkcFo5c0RVL0dHbWRYSDdTNU9xckFlOFdpczRNYjFMMkpsaU03YTVqSnF6MlUvc1RiMHl5eGl4aHZVUlRtZnhETWNHcFNsTS95blNVcXNWZ0JSM0xRUFVhNUZBZG5YdDVIZkJTdUJxSUp5Ti9Nb0JxMnM5dFdaYllHMzdXR0xKODBMczRWVm44VVIrQTh2c1ZtMmwvazRZbXZHdHYvRllqYkNHMmMvcStlZ0JTcUhNUTBuV2JCZmliWTlRK1VsQU1YYTMvZVBJSE5jMFk0SUt2RDRJNnR4b1p0dXFra0cvOHBvMUFIZC9aVlVydFcwOUZGVEs4Wk1MdXdKSXZTZDZkalRXYzhEZ3dkb241THM0b2E3c3ZOTWFNZVhQRURUYU1Ba0s0dnNERHlxbmEzMzF5QTJoTVhUdTRaVG9PNHpYdkdyYSt1VXR1cHhmM1lJNGtHV29sKytkRnhmeEJvRjN3cU5HNERkVlM1NnRYbGxOcVlxeXZJVUxaQWFwVkFHMHFSd1B3blcrdmxhQlJqNkRLWHN2eVh3bDNuRklZYjNDMnBCeDRyNllJdWNlSUs3RzgrdXI1dlh6QlFpcTBmblRFMDRDT0pDREN0THc5UkFtdVdhZDU5dUN0QkFFWXVRZ3hndy91TXpFNS80WmVvTDdvOVIrcTkxbEpadVNmRTY0bUVzQTllNzg4WCt3ODdhZDlCWm1tZitTWFd5UVVjRHZYT2g0QW1GTkRPcWdEeEIxY0VUMXJXU0xOQUwwbHVXa0l2NC9jUDcycVpWVFZySUhlK1VSUVJsZk05cXFrbTA2cy9QcmlKZmU3dUdDUS83MkpWazdWSkVaRWlLdnp6SDdDZSthaFdVc3ZJb0FVUzZpUVBGdDJTTWE4cE1kT2MzU2FpeTI3akNOUDRCQVVLaTMvU1h1V3RocjhQMURGbFJQN09HM0FvU1ZEcXlITVZGNGtOVUhTbGJaU3N5KzAzR1BDTTZNMmZ5bUZqZk1sR3pjRXowdW00Sjk4M3dtVktzRE1DbS9EVWl1SkFybmdobVRrbjB1dThmTno0a0JWbFAyRTJCdStpRi9VNUpsdVBSN2hFaHp2Wk4xMzNhUmhMaHZtbnJUcUxUcGljYWR6eHlsUzltM09uWjRTSk1pcFR6SmY0bmJIK0RkdWoxTHA0eEswMEcvTW9iUjBDUm45Vmx0U3d6L0dXaWNwTGdmMWNBbmE0b09kSkR0WHlwbFFxWURkRGhBcWVLNlBwTmhlT2FjYmdPblA4QUl3QzBIVVdpK1ZVUDFOSGt2azdFdWtmNVV0d2FBZGVYWG9CV3I1MVUrU3VQWHNIYVhrNzlFN3ZhK2psbXUrSDV6SHRDNW1vRFB4Tm9HMWFuQVpHRFNWVm95ZGJFSXZGcEJwMTBhUnU3SFlzTTVnY1RRcng3eUtrL1FnNUlWZmgxcXl6NFJPMnlJR2FONStoTDFsTkplcmhKOVRQTmlsR0FRVTBYM2hjdFlFenExaXlsbFArOEZDbXRSaEdqQngvWlZ2V0t2NDdLcVVCUGNYQ1pFU0dObWN5VHBrWlB3SWdrTWVFdmVGN29hUFFPbVZ3OVFObW1mYTN0U0tsZ3JVQkRQcFVDTUNWYVA4amRlQ0ZhWFhiSTd2RWJJUnZhc2ZVTjNFY1RsV3k5c3d4eEdMM25vZjUvRjgzbWN4L3I5OXM5SUV3VEF5bjNGMWdJY1pyeHFSYkY4MVRTQ1NQT1ZPaTRPTjF5Z1RucG1lRVllQ1p6amZyUkN5WWNNVUF1V3haV3FQcVNRbVlEYndXY1NIUzFpM3ZQNHN6dGMyNS95aUIwMGdlSmtUcno5Um9jTW5IQzRYVmNhN0l2ZDF2WW9VaTBwS2Z3a1c5RUhmaFpYb3JUb2hYQnhPUitSMjh3VnRDL2J3Q2VMa21jQTNHbmlpRXRSL1lZaUpoVTdEZDMxOEJTdW8rdXdFSGd3dnIxOHRyN0c5SVlwbjRlREpsOG1CelpuQm1zTzNJR1NVZjJUWG5ET1o1MWdqT24vcTZmS2tTdCtmbTk2TVZIaDlmZENCUXloOG42dVMrdGFXdlpsMnBodWxHSUg3M01WamhVejE5YWM3Rllkd2RKVDJOeTFBQVIzb1U1U04yVnJ6Snl2bjh2c1FkVGx6RHFBK0JFQzcxTEpSQk04Y0NvR3JoY1lOR21tN2FNRlMzYU1SdlgrTDFZaHNqRDhBYTFtalJzUFM5VTlvei94a3BtakNLL3k2QTFBcDZTcFdiZVpnTlBzcWxtcG1KNzMzd1RzSTJaR0NmeEVicjFNcS9vRWRPbWhTVC9oTFdCb1NsVkUrbmhyWUhMV0syWEMxQ3hnd25tbDF6b3EwekU0d1ZPZnRiejl5R0VZZDRvWHFzcmZxQzU4MU5JdGZuNVNzRnJUNjJ0ZDlLMktLbGpQb0JpUXJlSFgweTM2dU1IdU12N3U4Vk9uaUFOMXBpS1E2STZYcGgxUHFqTC96aE0rWm1BMC9HNTZmR2RqS1ZKQ25JaC9Nalh5Nys2bE9hZEp4cDRLcGxhNnRURU1WemU3SnV3Mk1GeExwTk1XSk1KV3BZaCtqQldVSUp4MkRTZUpFaDBjTWtiY1FvRE83UndTbXg0MjBIOE5DSmxUSG53NmVIUkdZakg1RExaMlJPK1JyUFoxYzV3MGIzbTN6V3RDSU1wR0cvNEIzVUV4QVplZlVHN0tVYThxWW1OL2hDRWN2ZDd3dTBOM1dZMG1WWGI2blVYUWIvSytrOWVLSFFSR2YwSnR2VXorL2g0dUVaRUJyYzFHeExqemg2YklhcFpGaTFVbklkYnZ3eGxESEtiS2czcGVVcE9TWmpjdWFZWlB5cG9QOGkvdTJyWFhrVEs5dVdwd3FmRlBaTXA0Tm13ZDhrT01aMTd5MUZvN0FQcVZFbU9KNGMxUm1jcGF4cjd1QnU4a1BYdVpOVkM4Y0Y3TjR4MWVhZlZNVE5sdjU0a084dkk2dis3NHRvdTUxbjNtR1NZWFBvZnRZczc3OXVTZlgvY0pxRFRaUk9tMWFFV0Q0V2IxY1ZCa3hhN0g1TGx5Z3Rhc0dXS2pKR29WWHJsVHRiM085RGJERFFrblcyQVZNSWgrWXVvbFhNcHlxSit4dVJOVWRXZ2lVNERzeW10d1dOaFIxVXB6Yy9WQ29wc0NvcHRJV0hYcSthdkl5NHh1T2R2ck1hc2t1dEVCRytlMmVYTW1TU1p1OWZwYjlDT2RkRTdXK3M2bTh3b0ZwaGNUT0JqYmxQZ3BZSjVycFAycFc2V1ZNa1pCRXhXaVpibWRxcmlkenMzdkFObWxxTGVQUGRqRnJvMm9QaWRCODVsa1pxK1Evc0FIWVBkVmszQnM2bjFHTFozRkFKYjdnL0s0T2EvVjhYRTlwTVRway9JVmFyS2dPYlJkWWZseU95TS95a0dCYWRubjUyUG90MTVqSlJIUm9WYkhPZEloK2dacUJXN2QrYXBNcUJTZXl3RGlraWsxZFBSaEhqTnRPb21vTHdxSGM0d2tRNlFDeUJiSkh1L0YvcXc0a0Q1NHZ4SUZBM1NyWWZMZkJoTEVrMzdFTDczQTVjeU9kdDhDQ2dZeG5RL3hBSXYvR2FEcnIza2xoUzNVWDRQNGxaOVNWeGNGWW1VVGpRaWh1QUxLc3lhcytKSTlkdW9rNFNGWDZPekxKc21HbDZBMU4zek40aEFsZXk4cVlNSGFCZHpLb1BZeFFPSGI1NHNnZGs4c2pTRzdzblA4a0NVTm1sNjFPdVE2ZkJUTmFOOTlkMVM0Z0prRVdpWEFoTWxTRUNtWnV5MzJGVWxrRmNwNDhCZTdQK2pZbTRkUmNwU25YdG9sUEQ4NWRvUTZNL2t4MGJzREUwRTdkWTJLdmhWZjZDM2NiMXloZWlMeHN4SG1RV1d3Uk10T0xwNkNZS2M5a0szenE5c1hyMG16SExxSnBFczRobEpqcXFrS0kwczA2dCtIaTV3K1RtMmY5b200bDJ0NGlESGNXci9tcVRZVjc5VEJndGcxMUFBaUloVHYwZGdraHA3SHZMaUl6M3U3MDZBOC9xdjhNV3NXMEFwcjVKMnBtK1VvcEFzUm5Ga1dtK0dWUWRRSHp2dXJuYTBRbnNmbEgvVXo2dUxWV2Fmb01IRkUwT21BQ2I5QStvWStaMWdsQWFHZHR2TDFDUzNUL2xoZnZPSWNvdGEwTy8wZlB2TFVYbVNMVUdzKzNZa3gyb1FZUTdQSmFyZUFFeVhOUUYzVm1XV01pdTZ3VFNBanNtclR2NWxTdDRLSlpabFlUamlVNWZRazB6aGpYUHV2Q0Z6UlA4SDBMMm9CRlh0MkJFYVc1TDE1RW4yTWFmaGxodjFPaEthQzJERk1yaDNiLzFVMVlQL3RuWUtRWG1hNVllcDlGQ3BJT2p3emsxOTh6Wk1TK2RIT0lMdHA0RVo0ekkyL0czelUxUHhkbHhlTTlaL0tMT0U5SEZRaFQxUkQ4aVc3dXZySUVRSzlyMVhmc2hvL1JTY0k0cGxKWnZPSEhDdXc4dFB0ODJPZjViTU83Q0VkbEcvTjVQM0RyOU44VHBCa0R5dEJOcEg3NTZlSDB0QVprblhuL280QW43c3lQQk1ITngydURKSHBFanlhVnVHMUlIdmNiRkdPS0F2UzNyVXdpUmtpMFZSZU1aOEhyVFlQQ3pyRW9HejlpUGp0T1J1Nm5tRVJQeExmZkovUW4waU14MkNlb2V3VnZnRC9kaUtXZ3RaUVdYakFPRGplaFVpWExmaHphZ2c5Vko1VnNLNDIrNVZiRXYwcTN3RUluZlZ3bWl3ZWVRelpTUUwrallGQ0ladTBSUlJ6SFBJcUdQdEliODg0WHJzRUttdWJoNFFzL1dzamhDbDNkUDRGdzk2U01TRVZBanBtMnUrK2lhcmdvZm1LNVB2aTV1Y1llWHpwN1p0cUFaVW4wVHkrZmsyY2hwb2lsaEdtMWRKYkcrdVNYVVZJSTRRQytIb3RCNFRaWHdKSzVpVklnV0ZBOVFYRFdTRDIrSDdGd2I5NWFnSzJ1ZW1vMEtxaEV6SllWdjhnYkRsSC93MURCYkZ1Z2Zod24vZ2RnMnZBUndRUUNUMDFPcThPWlpHeG0rWWhiMHFJQVczUWJ6UUVENThPRVZNeXE0NmRJQ1FxVm8vejNiK1NnKzQzaEdUZnBIWUJhWHY3YU01dWZvenowL2N3WEEzdTRnRWV3bVAzdGhZU2ppVytoQy9lR1Bia0dSdEdRVkhydE1JN2dkbXlCR2J3UVppbXN2R2R6VUpuekdtNTk1SW5DaXhiMWtvRnRUeDhDeXZ2V0dhY211MjBUYUVDbXV2a2FTRXRPUytwTFdDRjh2Sk55Wk9TOGV5SDA2S0hlazhzUTRXQW1rTGNCTFBaTUVteHJ5OWFlRmRSaVgySjRpbEYrOExRUGhPdTc5S2I0QWlNT0dlQ1EwR2Q3aGM4RHdNV004SkNuZm1wSzZuNEJSTnJOM21IUC9aNGVJbUlsK1B4QVErUm5YWERNeExiUm1TcDVXcHUxSURBQlBDWnhmMVorTHhQOHBkQ2swQTJZM3lWbVYyNWlyMDFwcWNhNXVEVlpiUTdKNHdSMVdLOHo0UmFPeVg5UHBnQkNmdGVPSjkxZS9TK3VzaDFtbFdXL09XNmhIUEFXZVg4elc4THkzdTN3bW1ubGg5MExPZUM1MCtlQ0NPU1JjMTk5T3NWblpMQ3RIVWpYOGFyNWdlRDdYcWJMVXVNWGM4c0ZlYk9GOXR4WUxPQytVMVMwUlEyd21JdStJL0VNc0ZSOGdjNi9tQXNVMDR3SU00dFgrM1A0NUpFZE1ib2J6c0dXK2lWNlZNeklaTUZ0OGcxNzlUcGkrSU94RzZoSTBKV2pUOFRvMjRBOTlCMHZudzVnNStqM1EyWmx1TXFqMzNVd1hONnFOZW1zbEFlajhKUTJnaWEyM3FxaGcrSDduNU90ZjcycCtKYXJmdk9YaWtaMXJxN0E0SzlJRTBNcFNOVmE4WmlpNkxWL1VrOGVHYzdYQUtEcmNNRVhTOEhuZjlvZzJFNWprOUcrQ1ZtN09oc2tEQWN4OE1Uakt2bDZMeUEwYzV1VVNORDZNUlJTOE91dmcxSzZsZmVuL2VBYlVlQ2ZtTnJNbUtjc2hURG9QK1ZadTVwc3VKUTR2eE5xMmRnSnFtSlZHVHA0Mjh2NVRYYlZRcGw2TEJycThvbXh5cmg3RGRxdlkzZEtSNWxMSnY0c2plU1FCQUMrTkMzVUZDVnNQZFJwZThIT0JIajNVaGFaZXRscndYU0o4ODBpZW1OazRaVVlCNU95NzkveXlQRFlVdVpuTm5mNmtBS0V3bTFvUkZXZzdWTkdabTJTcXg2V2kvek9NbHVudFprT2x1ZTRtMjlYd3FoM2N3UVFMQnByTEw4VjNPTGpOaVVRcFpGcWw2aUxPQ2JEOGxyNUxhMVBVL0Z0Tkl3clZHaUJETnB2bGFVekl1UnhsWG5GNEJTVG1DUUVqNG8yelRwVTlkUnJ5cFR3cmxITlRxRUhMU0RqdEdadmlHWklPV2RqS1pGUTJTMGpRcjB5RjcxKzA2cmJKT1UwYldrV29Ub0F4MGxqS0dNc3VzNUY0RWx3OUV0TnRZNXZPVzN2TUFyamUvdWlaTDRobkFYT3JabHVsVHBTYmtDdUpMZ0VXUUV0dHNTYlNLRTVsaHZmK1ZoczZML3FRZ0xzTFpNNVIxa1ZacTdaZFFqYkhwUEFWNFV1emdkVExteHlPdnFvVHlDeFJvNUM2VWVsbTRxWXJ4anZtS1hyamFmeEdyZjdFbFNLelBBcmJuM2I2L0pha3dPdXAwT3hQdWZMRm44NkJxODkwUE5Sb0xZb25WVDVIZGd0YzMxTFZiQjRtak5DcTQvMWpETE9Ib0pjdHl5a2N5R3YrMEtzbmRTZ1pkVW15cVV6REJMbCs2Z0MwUU43UTI0c01PSnk5SU9DV2g3Yi9WazA4MWFhc1dVS1RRaVNqYzdpUTBETTJId3pyOUVKc0VYUC9hbDVZT0hIbjBIYlBUaU9JcFh3TnoyVCtNMldGdkc0UEpGTC9YWjN3SDJLdUs4a01zRnRvSzFxYkpBaFRZbmJibllZRFZUdGl3d1Q5RHZXWG4vMEtPcit4aTZwOCtVTFh4aUJWWGx6TGpOL3lkcHRoamRNUmpxd21ZdnV6UWFKTWs1TXJqY2tCQnpvdHcySmEvTnNUYml5L0JON21UZE40c0gzaWptRzZ4Y2dxRHNNdDZNSVpjVDJrU0NYVnlxUWZiUkVKYnFjSzV4dUJ6Ykw3QzFqUUUxRDZKbklYaGt0SzJ1ajlaSXRNUDFhRlR3YktrclZ2eGhxUkp5TVRwOHQyT21DTDRLTmY0R08zajFYV1l3RHdHNFpzb0wwMmpNOGU2RVBRaVZ3U0UrSkpRcXJDaHZLUzZGbEVzYi9QUVo0SnFnOWE3TmczUVB0eTZjVFllbm90RGV4KzJ6cG1ON0g5VDhSYnMzeTF0MllOVXhqZWwrOVIzRVVlUk4yMG5XeGx1MkJYOTgvSWhoSEhZa3grMUJFOUVncWJHYXZlb3BKUjRGQUdEWitaY2wvUC85a0FBUUFhQUVBQUFUQUFRQUFQQVFNd0FnQUFBQUFBN2dGbFFBQUNBQWtDQVFFS0FnQURBQmxVYUdseklHbHpJRzltSUVacGJtZGxjaUFvTXlrPTwvQkRCPgogICAgPC9CSVI-CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24-CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I-MTwvTWlub3I-CiAgICAgICAgPC9DQkVGRlZlcnNpb24-CiAgICAgICAgPEJJUkluZm8-CiAgICAgICAgICAgIDxJbnRlZ3JpdHk-ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8-CiAgICAgICAgPEJEQkluZm8-CiAgICAgICAgICAgIDxGb3JtYXQ-CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24-CiAgICAgICAgICAgICAgICA8VHlwZT43PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MVo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU-RmluZ2VyPC9UeXBlPgogICAgICAgICAgICA8U3VidHlwZT5SaWdodCBMaXR0bGVGaW5nZXI8L1N1YnR5cGU-CiAgICAgICAgICAgIDxMZXZlbD5SYXc8L0xldmVsPgogICAgICAgICAgICA8UHVycG9zZT5FbnJvbGw8L1B1cnBvc2U-CiAgICAgICAgICAgIDxRdWFsaXR5PgogICAgICAgICAgICAgICAgPEFsZ29yaXRobT4KICAgICAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPkhNQUM8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5TSEEtMjU2PC9UeXBlPgogICAgICAgICAgICAgICAgPC9BbGdvcml0aG0-CiAgICAgICAgICAgICAgICA8U2NvcmU-NDc8L1Njb3JlPgogICAgICAgICAgICA8L1F1YWxpdHk-CiAgICAgICAgPC9CREJJbmZvPgogICAgICAgIDxCREI-UmtsU0FEQXlNQUFBQVQvY0FBRUJBUUFCUDh3SDVnd2NEQ0FyQXo4QUFBQUFBQUVpQUVBQUR3SUFRQUlBUUFJRkFBRUI5QUgwQWZRQjlBZ0ZIUUVSQVk4QUFUOWJBQUFBREdwUUlDQU5Db2NLQUFBQUZHWjBlWEJxY0RJZ0FBQUFBR3B3TWlBQUFBQkhhbkF5YUFBQUFCWnBhR1J5QUFBQmp3QUFBUkVBQVFjSEFBQUFBQUFQWTI5c2NnRUFBQUFBQUJFQUFBQWFjbVZ6SUFBQUFCSnlaWE5qbWNvQUFabktBQUVBQUFBQUFBQnFjREpqLzAvL1VRQXBBQUFBQUFFUkFBQUJqd0FBQUFBQUFBQUFBQUFCRVFBQUFZOEFBQUFBQUFBQUFBQUJCd0VCLzJRQUl3QUJRM0psWVhSdmNqb2dTbUZ6VUdWeUlGWmxjbk5wYjI0Z01TNDVNREF1TWY5a0FCQUFBVVZ1WTBsRU9rZFNRbFF3TWY5U0FBd0FBZ0FKQUFVRUJBQUIvMXdBRTBCQVNFaFFTRWhRU0VoUVNFaFFTRWhRLzVBQUNnQUFBQUUrWXdBQi81UGZHMkFVTFBjTHM0eXpxMENpVU93aGRLWXU3QTBvN1dZcnhjc2NVc1dwNkpLYWh2Z2JraUlveFN3MHpZbzlGZllFTFpmaEJNNnJwZk9BZ0lEeWlJZHhOaUo5Y2FSZTlCS21jSzRkbWZ6QWdJRHhBR2JyS3B5bWFZUUwrUzRBbzZqSjdNajhCNEQ5WWhCZE5UMXBLSG53QzRRQ0xBeE5UUk54MVFEM2cyNUIrU2lOQXQvSFdBQVlyWGh4eDQxL3FpVFZrS3VtTjhMTnFEVjlsSFR3U1crQW85UVI1Z0FxZ25CUGJ4UlYrRmg5YkNHVEZMMnVMQWFLYTYxcS9LVEF1ZCttcW84TDkyZ2lSaGdDT3dtWml3cW5wRnE5ZFN3WlFtQmpZYkxLb3RZQXN1a0Y0OUZCc2kzQURBWnZ4SEhncmxuc2tuMXFFQ1dNTFlGVDJmdHovdkZBeGVMaWdMcks4ZjFHc0RReEx1Rzk2NWc5eDRHNGRNQUFjSVJxemh2c1lVb0U0MU9jRzVJMGN0Ny9QOGdBM0VDL2U2ZkVVdmo4WmY4TXMrWnd2Y0VuMHQvcEw1c2wzZ0ZHczB5N0IwaTRIUElmU1plTlFYUlBjbHQrR3I4aS9PNHBaMlpxbEFObnhCRHduejl5QmlDczYxTEt4Yk9aN0ZxMElDZzJRRjJrMVBGbE8zRlpQcDM4NUpLTlFCUkN6RGlFT3BMcjBFZHFINTY0UjZlM0w3WHRBZUtIZ3VwUkxPZDlZRGtIRFdFb2IyYWUzQktMc29jRFFENUJuNUY3bklOU1ZlUXVKUHRPOEVzWWRHYWJwM0I3eVVDTzVHMGErS2RvcDFuQlV4SjVPSGlKbloxblpQNGFROHpNeFNBU0xySlFIakV6aU5temNSM2EycEk2dFFiRyt0ZnYwWFJ1NkZLK2gyTFoyKzZaQTBVOTBJYUQxUExRRlN5QW02TmpCWi9RYnlXTnhGdjZXZFNxSG1yd0xOa0pWbHl0UHpYZ2ozRjY2c2Q1VjZ5eE5UV1dTcXBGNWx0em9IaFVhN0JDenRIQlZGamxpemcvZjFOUXNPay82SnJRbXgrRVNEeVEzdlNWSVd0SkpVa1RBUFhvbzdLcG53UnRhME1vMitMKzZDOENCNlJxS1g2dGcwY0FLeFh5OXdxQWhvS1ArRFFNaEx3K1BpeHZFRE9vOXpLRXk4ZEFvNlBvTzljdS9QVDRud0FJbnBreWU1bGZjckJMWHh4bEVhQjJzTGQ3QU1lai96WXJTakNFUXhBSUZ0YnhTS2lXVW5HTHUrTTJmM1J5MUtvbXZvRG5VdHJJMDV0YjRyb0Q2bGQyWnUzOG10S0VUeHdVNW8zMUl5N0VGQ0xvamtORzV6U2RhcUV6SktaN1JwcXc0bVRLeitUSXFvMjhRUWZ1N3BVQTFFY1JFbVRrWVBsbFZjY2V1KytOVFFzU2VrMy9BRTBsRHRROHJjWGExdU1vVGE3TjBjWHBNVmxmRWhtWFNkbks3ZllhbGcwM3JUN2VIa0Jya2tsZStIY0taR2N0NktBSjJFa25nOFllK3lMSjdnMjZLRDE3TG5uNGdFUzdaRS9Ib25oQWR4UkcvSG9tZlFuT0NiVmVYcmFsOFdoWkRIWWFnSHd1RE9lWlBOUGhFdmo2MUJ2ODdxK1k5L29SNE9VZEoxNUV4WlFYYXVQSU5heHdlWFE1dUJPOVg2ZmJxeVpzVmhQeU1uUnVsVXRVbUtQa1N5R2VMaGdRWEdpZmlpTDdubWcxUE9DNFV5cXpndllidmJDL2M2VDhJVm82TDUwNGhQdXJ3UDRhRHBXODRHRTRhMVJVN1h5WXhjaEtRYTRBbzJSM09QOFNFWEIyaVBNZ3Ruei9OWHBJYW85bUMvdU44WW9SY1QyRUYyZXFPYkZyMFFDdDZFcVVkMVkxNGFoQ0JHaUpCTWF3bmtVS0VOa3djQ3BsRWtqMytuWFMvZ2Vuam5DS2I5WDhuTlBuTGVQU0NObERISjZjUm0rQjdkVEdLQ2lkVWU3QUV5bkZUQm5VekVzVUxpb0YvcTRSRTlVcWtqdlh4SEM1SUFTU0VRamFjN0ZINzZ0R3RiMlVpS0NVMTUrbEpBejVLeGJYRzFzUlBJZnZER3U2NnBEbkZNYitGcjlPcnkvOURvU2FTT0VwakhQTmlxS1hKVHJTQ3JTRFRMTm9acTN1L29mdmdCZ28xak1OMmRuc1RTcHBNMmJhN0Z1Z2hnU3pJWm1DU2pCNDBjRnFkT2RabSsrUVRuSnhESTlmK0hLS3JEakNoMVVBYUN6Qm1HdFVUQnFDMkhCbG1PdFBDMnd4NXg4WXlOT05ZUGhQa2t2TUlDd1VnbnBmc0JaUCtDb1BkbEJ1dnRQTHIwWkthV1ljK1JZYXNmSC9hL3Vjc0RTR1Bna3Vpbk5UWHRBSWpEVDlESUVJOFlkMVIxb2t2OHltOEVjckh4a21HL0hIQTNjZFlMTzg2MStVOGRLTEhHbVlPZE9PdlhtdTJwUGhFMjlKOFhhQjRqK0RlYkk5ZEs1Rmx3OXN5RVQrd0Y2VlBnc1h1L0VKNG0yVHFMWjlOOVBNK0t5UE5rR1Z0N281MDFBMWJCU0JHdmNGSGZ0RGhORnhDWmltWVY5RjhvYW9jMnRQVlJYeFZvOHJic2w3MHhycWhXN055MDhEU054VmxXeGltTXFSbFZzQTlPS3F2UU1LWjZHWUl6bDNKQithYzJFM2RaeHVsTWc1YlZjVzJHTlQ0RjVBbUpYWFplVTgxY04vVXBjWjh4bk1UWEtpK0E2YzBqOCtUMVRzaXhOU05QWlNOajRLVTZobHBmbjc4cFluUDlwdXJwY3ljZ1REZ1BFNW1kcHlYTEVhcjNJQk51MTBqMWVDK2wrcGZBSEtOaDBGRVNFcmJRdlc4eWg1R3BraHJ2Y2lIbWNGWU9DbTg0YzBOemNFY3ZjLzBzWFlpMURFL20yVTkzbVlybXJobnNhdFdUbVorYVpmUENQa0Z4ZCsydW5uMkgwNStzUUNreWtJTUJ3UHJ1Z0FtbFVBeXJaTzlPc085TTJMdTRUVlliaE1odFpUcWhYN3h0Q2lSc25zUi9pMUs3TXVIMlRtY05VdmFCdnhZdStmcWpjbTdvQmNzQm1XbFIrYko0RG5lZDNWUU1ZUUFhQ3ZkcVhvTnBtbDArM1drSThKd0QwaXlJVTlXYVdaa3JsUWo5TU1RdWtBT0R4TEJyYS85MXFjSWRyUUhrZVZwekR1dVQyakUxd2U3RVhKVTNiRlFsTGxLOVo1Ykx6WVQvT0NNNzBLb1FPU1p2dnJPS04rTTFIdjRzd2NaSnU3ajdVQmh1TTlXN0Ztc3l0ZDhjUFZmZk9iRGJVWSt6dEpoQ0FsZ0hMUVNOM3RGbU9BMjlkNXFVUFVWOXhsOU5yNHk5UEsxN1E1Yzd4OGczT2tXcmxmUFdiUkpOckRBNjVTcVhDN2VSdFhMTUZDaVZpRjRNbSt1cHFUV3VTMWttMUFmcVBKSjRBeFhEU284VjhROEg4UllUSXBIYjZTZnlJL0MyQk9xN1k0SlpidDI5aXEyUmJBU0xiVnBCeFFLTnlGRzVlR2ZCc1NWVHd5L09vWC93cWVWMGFoSFFnR3RiSWMxcGtwQU5DZ0pMU3pEaTQvUlYybnV6SzVGVlJRb21KWld2TlNTVUxyaUlGMUg1akJIS2g1ZUFFUGFXalNoS213bWRWTHc1c0RreHQrem9KaEVHbmEyek52Q0s3VkdxT3FvQ0l1YWhKNGJRQkNYTXkyZlQ2U2dud0I0RlQxN0MvQ3lqb0NWTnFyUVoydXIvY3d1L0xMMGtwUkdwbHBuTjREd2JzU0xCUllFOGVFNTJVeUpxajVxSTQyOERLZ2FpeFFBZVlISGdCU2FkUXFsMzl6VkRvakhqRnBINUsxcXZZWHo2WjdmUjNUQXhMbkgyMnlUZ3czZWlIYUl2Z1poNisyK2xaZFJsQ2k2b1RoamVWTm5uSWZRTkV0bkpxdXJrblUrTTl3YzZRNFBQQk5CeDB5MzFENHJZZXA1eURHNXhhV2VIMzV1c3Q3TnN0Yk55OUpwdXIzclhyRjVTUEc4bi9Sd1Buby9WUEE2c05lRGtQclJzd0JFY1ArRU1xWWV6V0tHY0Y1VGFselR6TW1OdUdIeGZ1S2V5MEJ0OXI0VU14a0tDUDRSR1ZHYVBXV2grWlhpUWFPWnNQd21LN3VxSEowQWs3VWcwbVQ0dTdBRzcxY2taMXEzbHVQOTZWdGhaNWR2WTZMOU5zR0lUdGptQ2xLUWNWdEJ5MGU0ZmVJVEpBUGpsUVBLOWJPb2RNZW1pY2ppRkJnVWF6dTV1NndiZjlad2Y1UTRSMjhnODZUT0ZVa1RreGlKWnB4b1F3bVBmTmZ0Q1BHQ3duYlQ1VVYrWkdNQXQ2ZnRRWFRVRnU1clR3VVdmRy9VeGhNQmtMRFZYNCtlQVlFYzZ5NGJLZVF3ait0d01scnI3MzVZbWRIcWhKeUloR2RMd3lSUDJlZkE1ZXBpVVFVZ2hSd1N3Uk1YU2lMc3JxemNRWS9wRTFROHh2M3V0VFZWYmM4dnpKelFRWkFUWEFMeXpKc0xxc216VWFMNlZWWmNtbjNXQ2xQNjA3U3drSGR6SGtCejE3OEZNcWdJTWk5c1dGQ2Z1Y1ZJTWdMcndQd01PY21CUEExMFQxOVJldE5qWkNuc0FHSGg1YytZRE1WUk1NWnNzYUNWcFNtNHpXVUQ0K0xuS0VhU1dvbGpUM3ZqMkY0bTZaeUM1RnM2RXhZbEtqT3B2Z3lYNnorRUtiOGEvU2VnNm5CN212R1R5N2FvRVJ5NzkwQllKcjZMQ0UyUllPa3hsaTB3MEZ2UUpmV0c5aExXTlZTdmdldkxVTjV2Zkw4MGpKbGNjL25IYWZkZVRIUS9uTXNCSTlKVHpKVklsR0hkcE9FdDFZSEpCcTFrd2ZNS0JKRlREYUZhV1ZHZlRGY0gwYis0N0pZNVpOOWszUk1scTdoazZvOGh5anhVUmluZlBFK1YyVnlhbHFUbFI1Mmt6c0pnMU91VTJuY0U1bHZONTd3V0VVSDNqejRaYnErQkNjV3ZFOWRMeWpSblRVMDRNbkxlczhqbE4vREg3YzNPUklpY0pqR3oyajhNNTdXS0VvYWpXOVBmOHpFQjRTc3NuclZ5TUZadjZlQi8ySHBpekM5WDZ6N1JYSUZibk5qWFNxdXRZdVM2b1B4VjdpV09KQzZrUThvZ001WVM1TGdOQ2lOYmtLT1FxUWNhcUt3WW9rcVR2QllnRnY1cGlHQlIwVE5nbW5wRXlvNVo3akZPbWQzNGNYTnZDckRoR3VURG5KNDE5Tk1pSjd5MmRrTFBmTnZYSW1kZGV1OExiRlBKVEZWTStXcG9jM0V5OVJMR1VZWTlvUEhYdXZmOGdkSkpQSWh5VHU3ZU5yMUtqSk1qSjZzTVQvbDlDTU1lbEhZS3ZkY0dtR3J6ZkZ1WkFEb3pYb01XYVpwUEl5ZWZDWVdLaExTNXVXcnE0OFFyU0dNZlA3M0YrRDRGb2FHV0loNWIvYjN2Q3BQM25MMHZlUkY0TW1XTDVxY0xCbUt2OVBqbVVzOWRuZEVjazRsNDRRK1NtWExPZFNkdkFYbk9NdjFFcDZYTVdzWDhveTkxWWQvU0NEa3p2dm96dTZRdzJTeFRhditjQmlXS1JXakY0OVUrZ3FTZWw2dEhVOTdwdCtReHNaK1Y5L09La1lnSFhlV0hKZ201REdmTVRVcGg0Nmt4ZFZ5MERHRGxoMmRxNHNtb0plQUN1aERsNlc1Y2prK29Jdk45OWVvbFBBVTEzNk9vYjhwc2VpOWpNV21aSEkzMUt0eTdQMFBpK2xIcjZpVXdNRjFMNmt4SEt2d0JrRDRWMjlIeTd1MlBTaFBhTm1HYURxM1haZ3BLbTBxeTJ5eXhjcjMxKzdDbTZQQmx2ZkFHOE14Szk2NUx0eHpCUlc2RjZsRE9UbXJ3dTVnMmVuREtrTlVSRjQyMGNxWVJzakNrL29KN1I4REFyaHdOY0NITExsZkIrWExkbFhhSU14WllvbldSbWhReFdPREtmajYxR0I0V1lYZkhPUkxwdUU1bFN2R3JJdEt2eHJhYmR6Qi96RHoyWThpUWRXVWFlNXlPMThrNE1xSkdhc1h2UWRaK1g2dCswbDQ1elpXY1czNlU1WE42NldMMEMxWVVMeW1ZSjQzbS9OZkNVZmkzN0VlWCs3VG04dTBTcFk4N3BhS1VZdm5OWVA1anZadTB6anZBZlVjRGJJZEpUMldjOGV5U0g2NUp4anRPWDIwaVNmR2p0QkQ1blc3dmplNE5NbzBvSC9ieVRHUUxLdTVyRGtrcmxDS01wSjFjTXphQWo1TnVRVzlidjY2RWNVTHdNeXV5aU9Ta214dWtHZEVURm9VSktLZ29zbmNGOVVOU045NnNLek16S1NkZWh5OEdCUC9mWlRlTjVZa1J6OTIySkxLdW5iNmxqZVV2ZXpFZmc1a1hSYU5xbVNsZzFCa0hlSFNnMGVFMTAvbW9UeHYyVDlwZURkSUVCZHRKK1ArSkptcWtIeTlZc1hGREU4bzdTSmUySjhDR0I0UG0vZWRwTlVjOXZVMmRUdHJXYUlOWk1jNHNkNlRJVjltblhJSEJGM2xtd00xdjFVUmY5WVN5WmNKL0dOeEVVek9qc28raXNDdW5tVUliUk5UZFFUVlZ6MDdwOHVaSlE1bFFHR0FPelFlRGtFeHNQc1ZwbjN1dFh1dktqZTQ1MDdsNTlXZks3MVIzU1FROFJHeEtoOCswZEUybnF4V1ZiYTF0SzJHSjZidGVPK3hlYVVoUFM0Z2NaWFljSFhpRWlTMHptMGk0Y3FzaGszZG15a21TTEdhcy9BYUFwTDV2TS9WblBIc3hjME9DUlRmM05FZWgrWHpZd2NheU5tdlBYcm9VN2d4VkIwSEo4bG54bUUvTnc3TFFWcStWQmYyV0JyT0dxbVBseURNOXMxM1k2R01sMUtWcU94SUhhT2wxbnlsbTJxYnI3cGx5bFptRGpOVHQ5ZnRXekU2UjBFZVc4QnV4WWZISGxlMUJlNGhQRVkySDZybTRZdS9zRzAzR1VYRGJCeVVPQ2tnUHJiRVJQVS9kUE9MbnZ4eWFHOVZpbEppL3lhc0FCZ2lIVHU0SlBNUE1pdmxRUGw1QUNoRlVSclBsZlVIK0RHQnQ1MnNaNDlHcFp6TWpzMHFiZ1NnL09vdDNjcFpiZGh4NDQxQVo3bG8yVWNhcVlxM01JV0RrRzVtejNuNzdNZU1JVWtocUNlL3BZVU8zR3djNEYrUGJHVXMvalBWL2RMS1pqcnZFRmVWUmg0SlZMSmN5endDeERMcDRHL2NFMXpzeVRHR25tYkhuK0hFVTd5eWN3amw2NkU0eFdSWjhIRHN3QVlmcnRONXFWVWpoandCNE1Lb0hoZ0NFenpmeGp1TDJqWjdEdytTZE5nSVIxRUcraFcyMkdvdHVZemx1RU9ocVR3alExeXVCTENIeHVJcldNM0YrTmMyN2cwYmd4WTNGQjFwUzBBc1QyZEhyUEQ3dHdpM0g4TVJvRThwTjhWdmJEdjBwNVpiRGkrRUhFc3VrZEp3Q2pIQjkvMkxvejdXWHFMSmp4d0xjNGdyeG1ZZmk1Kyt1RUlJek9BU2krMUpwRFpsZ09sbWNZZG5PS0JlYkU3TEU4QWtrRU9yMVJja3FvZ0htZFJ5ckl1OGJmRGt5eTBqekxLanNkVEh4MnNrdGZtZjZBYWtOMXpQUGlvVXprbVpJSVRIaHJFZEpzY2xYU0NlamZKcWdMMDNRMVlPaTNZSHc5L1F2R3o5MGhFUktsRDBCTk5pK0dRejIwTU5iNHFMdVA5MVQyZitNbnZoTWJJOUYxVDF3NHI0SkdxcTdnc1JtVEtOYUJabkxham95cXdXbnp0bjcrVnBkRjArV2oyM0tUa0xmTmFnQ09OenVad0gwa2hXSldUbDBuVmNtNG56cG1qcVpCOVlKcWlDSE5Eb2xjRDMzYVFhUkl0RTlqQ05mdXovUlFYTHZuTzlqL0kwbS9mVVRpWTNvUjhmSjYvU1ZQdVRBUjErK2YxMlAyU1J5aXJvZXlpaStWUGMyWllRM3NCR1F0Wk9SSzQ0Tzc0M0hzVUwyWDN1bU9nT3pFcjFFei9XdVNHUGNTME9Odkp3Y3V3VndhVXJ5cFZZTDU3VENoOTB6ekg3K2RHdDlwNTVHb2Z1bUdYWHpmWFM3eGp5T0tHbGFsZzU2TVVwdmNsWTRvSlczOUxzc0JsZ3dkUkoyRnBlWWdRUU5QbmtFUFdrNjl3WXM5YitxUUdPYXA5dDBWcjBKcStLdmJaOXZtS2FOc01kaEpOL3pPM0NaRWIvUDBrUTF3anloaFovSHBvcTBVTjUrN3lpSDVQSHFKTHRIcTNrTHZoZGJoZUpjZWEwUVlzQUhxTjdSUHJoSnlJNUk5VlhJT1BOVDJiNDlBTDJUTXpzT3Zid01zeWUwQ0swdlZLWFdoS0dsVzd2WGQvMzlPRXBVN3FzMjNKYzVBRWZic1FoMUdwU2dsUlNIazlGTzBkM3JjRndtTVRzNXExZkZ5UUk2RXFKS1J3cGdHcDJzdGI3ejF6UzFibUFrSHJZbTF3NlRVOWJ4R2hiaWJMRkhNZ052UTkzdm5lZFpTWng3YTJBODMybk5NeS9KMFdnMEg4V3FXc3d1WEZZOVd1ZnVwbk85dGhzK1d2OU5UQm1qMytFV3cvOFBNc2NSQ0w5NE1vUDNLMS8vbmM3ZXZCa2hnWkFLMThTUUhHZ3RTNnFNdXFxUDMzR3hOOFlOM0tlTElINkNhcnV3ZUU5NWU4SmFrNGtiS25UcndwUWlZbjk4Z0RDeTRQSFpaMGloYjEyb0lpeklESkdMSjRmWkdHbWdOeVRhUVI0c2xqcndGdTBsUDU3NWdqb1RkNWZPRkFjWUpsdmNBVzZkdTJuZHZCQ0hXMDd5ZGpQbUNJWXpBdVFFVHF1azNhZDhNaXlJei9nZFYxQzUvT3o5clE4TTdTZjlHZWRlRWNPYkZSTXJpQzNnNG9ZWnBnNWs1NDlMZFNmQmRJTGo0S0ZlclhmYk90MUs3UFRtc25UNkJhTVRVRkU1bm9LS2hCUHBwd0Rka1BzeFBGa0F3b0ZKZnRlZ0lQNHhiK25mTGxsNWQ5TmpFcng2UHk2ZDdJZWtJUStwQThob3dzd00wSjF4KzI0SFA5YytTMFBGMy9YN1NpNzdxb3pleG53WHdvZFBaMEFJVkFPaHlsMnZudlZRNUNiOHFBbmh3VUFqRFJhOVBoTXowV3JWOUNaaEJtTTFpUWxQTW1vbTg0Y3hUeHZ4bVlmS2UweTQzN3FxSzIvS3N4SzA3WlljdFdSdXRsUEpjNGROUHlIRHN5T3BWdXQzY0ZQRzVobVBZQWNYa2NzeElJeUloeHE0L21rNXU1aHNWR1I5WExhaDFRSWE4dE5EYU5UTTl2M0V1OWM1SXJUUmtGNUpCT053ODVuaEdYQmZOUHd6YS9ia250WmwyWEtEYVVoSTdrem5JVnVobTd1RDZSQVlKVzRRTGJrOGNLNkVXQUZOWStKL0FrZHZaRXFyWHJaSE5vMk9EeEE0M3hHOTB0SHdIZmE3bk5vUjNYMHErcUF3RXFqd0JYdkxadUtIZWNtOVF4ODJSL29IZUJycm5Oa0ZCNk93TS81UUhacVNFakZXZndrSEZOazAzLzlqTHJxYUtyRGF4bHFVUnJ0ZWxaTko0VXlQVU4yNURkNFd1ankzVzRvRkhZbUZnUG0yVE1oTkIwSitheHVlVk50Y0tCeVZRRHZyN3E4cHVPSVdYeE44V3pLNW1JMmlLUGNIcEFwd2pSaUdESlpQS0ZEdjBQUEg1M0lTVUpPSUN5cyszZ0kzWU5CaDRnM2J1RHU2WUJxamtQaTgrenloTVd4anBVQnRGVitUcHFYcUpNNUhUOXloS0kyYVVWVkppZ0VOaG8vZVFFSXpoeFNlOU9EQ0hSVVRBTkpJZFU5NGdIdnVCeWowNytTR0x0NzlGaUhGVFhvMFVnRGNLeHYvenFIMk5BZjA4RGs0Qmt5VW40STFCbXBwZzBPNkVjVEN5a2JnZnpBMG1Db1FoV2RlZHJPQytncmpXaUt1UEllUjhQZHhZQlBEL3JxZ0h0aCtmMEcwbWRTRTZvenNEZzJ1c2NtTmRpVDhBV1A1cnlCd1ZNci9QR0RjbFFIMCszdUpBZ1hLS1VCb2ZpRGp3YU5PUDFMYzhHODZIVVdBQjhlZ1dNdnpPbGlFam5qblBhRzVhd1kreUpSaStNekJyZW5CZ1Jmek5KSTlmY2xiOS9YbTdOcDRiSTg5Ynl4Rm1OWmJQRjVkaVdVVENJT3VVcCs1K3lZb3BlWUsrUzVtY0tGand5LzNReVNEY1NDREtjL2tTL1VQYndzMDZGRmtuYXNsV1ZzUjdtNjVRNE5mZ2owalNyMy9zVk1qMnBzL3hSOWpFdE0yOG9Zem1CQlNVOVErN1hGMVlHSVVNdXU2ZXBMbmY2SzUrL0FwZjBqT0YwNXhHdEUybU9XZzBwM2FxL1pNOUZBVlpSbDk2MVFYZlg2Unk1NlhaeENVLzdrekNEVndtQmhOcllvUEN1TTIxOW9pK2NxK21wWndGS1czQmExalppTEJPaHYwZEd1Z053WjFIOC9OY3ZBZml1ZFdiNWsvMWhkUW4zOGhhZ3g5UmdYNmxDZFIzeHBJZ0Y4RWRYMU1oOTB0S0ZRSko1aTZYamNOY1VjeTM3M3YrNlAwTVF2YmdjVmtYK0h5Y245VDRlWHZQOFhoaUNIQncwaC91aGMrbzRZNUE5UDRCZ2Z4NUUybUFhVFZhWmZRRURESE1ZVzdKbW1xZmxUQ3JVVTRVOGFqQXFzY1RUZGtoTXhrVWRHMWExUHlEMUlUclZGZm5NMWxiTFphMjRRTFI5MWFta1kvQkJnWExZYU9PcWJsdndibTBpU0NPV3lKVVhQejFQVjltK2Y4NldxbmZuM1dHSmROQTBjbFRkQkE2K09vaWdQTnAwV1ZITlE3QitsN1V5UEV1U2VrTWVVOU5kTEViUi8ydHNCZjR5N3MyV25uOFZoeGxiazlUZ2FQaXQ5MDlVMU5NamVrNGxKU2pobWhQS3c5WG5MQldXYkM5ZUtPYnMxLzFqWjhobWgvbEZOSFovb2JFM0ViTWpxWjErcUNmYVVMTjltaDZmZmpDN2dCbHlkZnV6eHpHc3RVaTBHNldRck13MDVMbXVuMXdHRllJT2hPV1oxeVNUOXJuMEltT2thVzFkekUrYWhFQnA2TTYyM3V6VTlONGhHWUoyanFTZk90VC9RTzRJREl3N0UzTElnWkd2U215cEVJcUpzd3FHU0ZWbkdFRmI1eVIrblVZYUtWeUJyNis0TmtMV2hiMzdsemJ1UUVRMk91TnZYZXJoeUwrQk9EZTZ0aE5lcG9CWTYxSllXYUFDbHdQc3M4UFl0elBYNTVZYTRnYVlzSWtwcC9GZmpPNVR2RXNWWDJPcFNvTmdPY01scDlFSXdvcUl0SlVYNnM5RmNHM3U0U0dHWC91TDl4NDgyZEZyUWxrakF4TTdBMC9JdVZxOTk1QVRGaW8vUzZFMUlzT3hLdmRhNVdWVmZNOTMyL3RjT1BsQ2QxV250UVdrZDB2UTd1VW82WU9lVktGdTM5eTJwSjRJU1RFOGxIQ0E1dDNFeG1EQkwvVWFlbFI3S1FYeEUvT2VManZPYVlNUFd3L3RMcGtsMVg0Q0FnSURtK21nQXdNYTB5SG9pNk1HZVkxQ2NraTFZSzJsNllsVnlnV0pvblFJVXRVNHNOM3RaNk4rNmRrZXdqMU1PQzhaYU5SUVhQRnpUTFZmOTZVZkJNelp0VkZXQW9GT2pxUllOeVdSclRHdHJwWEo5RnJDVzlaZEUxU2hwUXJkalpieXA0U2RaajNrUlQxVWYwU0NLdS93UnBWTkhHeXY1ZG1QbzBnSS9zbXhiTDdBajFPaVdJVkFUd2FqRStHYjRrNHFNRXhzOGN2RG0xRnVlVUt3Zk11UG9aNTZ2QVBsaldoZFVMbnk1aWJXMW1hQ05nMFVieUEvRHg1QlJ6c3cwQzBEbXQ1bWROenZrK3J5bU1MVFZkU0FkaTFOWEFaVDJXL3g1SzhxdHg2WDNaZnpLWTRmUldCbDMxbWh1SmJSK3V6QU5paTVzZmw3ZzhRbXJQczJjUTJabExWYXpoc2pKVzBzSWdrZ1RBZGdyZ0loTndrOEd6ZGRuV094MEZQOWFkSlVZeFZxZno1WEowdkV6NS9oY0UzMXpWbTJWWUZTZEdheTZ6eUQzYnA5eFdvYWRwVUJUOHVPYkFML1dCOGdsZ0sxWjFSWk9QZmliUHJPSUtWQmsxUUY0SEs4bjFTcFdFYytGZmVjQWxzbitWVytYclFLNnRHRys0aTdRSUVzMVhYbEJVWk5aMGZ3dGtsRzZOR292UnVQYnFsd3pMd0tCQWR3Q0k2YjFadzdBQzlJZG9WVnNvV3hGVndMOFZmVHhKbHpmSkc0eFp6YU4zd3NLU2k5Vyt6OUJFL05PeFBJYWswZXI1eDBRck9VQnhFbld1YXM0Q2VOQ1ZIVWZCWmN2R0ViRHNCWmpaQ1JpU0V2aXVrM3IzOXRXdDkrMlpCYWpUb0IxQU9rMFJucnQ0Z2xCRzFnMTlIQ1BoU1ZISlV4eXk4aWduUGh4VzAxK1pMcXdkMHE5L0xBdk9PaFE0b1piOEx6Z29nVlVKSDVPRkdlNWVCa0YxK1dVdWRyeGNQTUxiOW43c2o2Q3hPVXZzVXN4QmRqanl0ZTlicXgzdmVmcVlEY1NGWW5sUnpHSENXQjl2NUFjVlRZWURRR3VUUjZkVmFlSm1JVjBIQkFTWmkxeVUrMjB1UHNSa3dOeURPd2xTMC81SmUxSzlZdFN1dGUwOENRclkzSE9TV2llZG0vdWRpTEpZQVBJeGRXa3k5VDBaRGhwcXlCUFRBOHhkR25nVFoyZlo1VkdqMjVBOHN5TXZHMUQ1M2ZqcFhtN3M5T2oxR2ZGOUJsMnRCbDFyakVBeFg3bkt1UDRpLzF4M2RBN3ZtNG9xcXRtSHArWkUvREhFcXIrUjVZUjkrN0hES3AyUVJXeDFVdmdWMUdDcjJuenJtMHRYdnNvU1J4VS9iVFJZSkhkai9FNzhCQUo0a3NWeG5oYW1WK3hkZTJCOEVDQW9UNGprcW1RdnBtU3JaSzg0Q2pLMnJlVXAxamtNaWU4a2lFaVMxdU4wNzJXeWtQU2F5N3dseWpPQkR5VWg5VU51TjhEVXYwRFNIak5rRmRyUTZkdGdSbGVMVzhRYjJBSlRlSDAxbjRHeSsvUlY3K09mcGpwUC9DT24zRFM2N1dCd0gwa0Z4TmY1dTU4RU5nMWF4eGdwUm9rUE9vb3Y0MmhyNVpXQkgrTGRURC9HMHJsdnVGM2FobFlYSHJNWGtESUNMaWNyTmxqdVdiR04vOW1tQU1Zc0FSb2tTdC9WaFNSUFcvMUQxa2llYi80dFRKUVhsYVdUay9JMVVVQ2hXWXJndEtGZGxMZnZQQ0tFVkU3L0owaklyaEtudDB0L0xJSGJRbSthek9TYUZ4WUlHc3lpc1g0L001UjVWeld4bE0vTE14ampSQXVCOEhrWTRHNjBXR3RBTTFXem1TREdwMld3eEM2a3BqYXQ1WDRKdjNXRWFnQSs3QXNpNjZUS1pDVklCdTlGelROY0FHQlhBZ0ltZWVlbHhtaDMwVktqTjBWL0wySU8rOWY4K2VHdktGYmU0Q2R2ZTh1NGxMd0VXTmRvTEhjV0kvYXRTVjhQaEUrMXBrVlh4NTVDSm9wNWNscXhVOFlXdVZ6bWxRTjkvV3dIMEp5N2dWRzhUa01NYk5CQ0VRdEYxaXFiZGd2aVZzY2o3T2o1UmhDaW41TXZJekEzTmtZdEVlSlRNMUNGWDlFZ3BZU0xoVG52UjNtbE9zbkNVc2FKQW85dVFDUWs5YWV3TUxsK0k5ek5WWnVqQ2hLRlVSc3BaRmNZS0J6aFlucWpBUUxITEVST3JNTm9GQlpheVg5dEIweG1TZzB3WXhtcWlMblB4Tk5BZ1laRVlaUHk4cnNmQTdZSlJHSW9NWWljeWljTGxVTXdQUTFLelNQSHlqYkJBaGdVa1FtSGFFQzV0TmxsUVE2VmdVMjRJazVlcHJ3d3p1YWZVNmM5NVU4RmtVVVByZVVzMUdGWDI1ZTlqTjJJWC83SVlJZHhpeUJ1SGgxdUlEREpBUU9sSTFlL3RUVncrYVZlK2F0elZtUFBhb0FwckQvVlI1V2pPYk1NdEwybWZQa05HRjh4WTU0cUZuK2VNWjFuTExTa3lKN1lFaXZ3SmhWSWJUWnJnNHpqYkFZcnJUOUI0cTFuZFZuUnhyVHF6ZG9ZY3ZZZVBQdVVFdDFUWFNiUFI0U3lmRXRJeGpmY2tHRUc4aFVxZnNKbTlPdVVkNlZNRlZFY2JiaE5QazNnMEE5NnFSU0FDM1gxUHBjNkZwanNvcDFqSFpFcnhaV2wzeVhJVzBsa2VNR3V2bXcrNmNwTU5SN0VJTCs3Z0lUenVhQkFkUmlELzFmOVRsRk5jd2N4NGZCTlNsYlJ2Zy9XK0pCU29lSDRVOFR0QXVib2xRWXU0SXN2bEtWbkZITHFyMnVib252TXRXOUl1QnR4OHR2a25ybnJYOWhncGJMRDVPdUNxUUlpdlUvb2ZWTnBYU2lsMjF3b0RHSjBxNXY5cmRVRExLQ1ZPcTRKbFB0QlhsaVRHN25NSnZJekRTTUNQNVZMaFB5Sjc3aUttNzh1SGpaNkJjQXM0SGFOdFhzZ1o1SFIxb0svZHBtdVJyUk41Rks0T2ZHR2ZZQjhGNk1HS1lVV0lrOXh6UURWOGg2L1EySm40ZzZ2Q1RiaGZlVVJhcWF3MERKT0xDcnA3ZWFOOEN5QkV4RUFObVUwcHQxMGw1ZXQ2RDlPNTlheWY3eEM2cXpHQXlXZTl2eThScFhDOTRBWk1uMHhkZis5ZWs0d0tjd1RsUnBMeCtCVy9yakErdXhvVTRYK016L0ZGazBldnA0TjFLZ2V1V2VCSTdiMlg3K1NpaVlRZFBjb3lnY1paMi9Pd3hka2RBWnRhRTVRNzdpNmJkWDNIVnFER2hGMEcwTWQ5alN6dmg5WDM4NklGRkF3bmpzRVpiSy9qeWNvbTh0N0hVV0g1K25GYW9oMFpTUGoydDVTMGNFNFhRUnhVNHl0S3NpZW11L2I0d1FVVmZWUk1sa2F6YjZrZmtQM0pUL0ZSQ0RoVUYraXVDbUVyYW9GK2NrMVB4dE5mb0tMSU5BVWxMdk4rRkx6UUtOMlJvZmttOWdBa2RuVTZKdmFoQURLL1htMmNTWTZTM2hFMm9STHlQQjFiSHZHZHU5VGd2NGUxVlBIb242SEJNMm9Edmd3Sy9XejU3ZjJWN2VTUm5kV3NYMkdtcGM1VnNmTk5ua3lXWjVScU85VW5jQ0UrakFMRWE5aGRFQmpwRCtiZnAzUjRDck10RThTZ0g4aTRxWk1rcEIvendTTStNL2FISzI1TFNPSVNHQmIrUmlOME9hVVBJKzJxVjQySURvakNJMzhTN1orQ2JlZk1DMGdQUHZrMjRQKy9PWGpRM1o4YW9ua0FWNENzUmsvdVBNMmZ5Z1Jyc2I1Q25lcUYwbXd4TEVFUUFJTEVLN2l1Y1BhT3RlYXV4S0FzaWNsc053WnQwbFdteW5uZHNpVzluWStnMHlUUnJlOVF2NXFtdU9wY216cE5VRnhGeTAzdG5uNFpwWXJqRUsxRWNRNjRNaEIreTVkL0xNZkJCaHE2RndxenBNZDIwVXdYYTdMYjhkS252TWlhMm42dmx1L3FNbE5tYjlaV1I5Ymo5bHl6NnkvMnhpYjlkSC9XWkQrbzBmYmEwWDIwYi9COUFGKzl2QXhaUWthL2Vaa1JlaWo3QTZsVEVueWRxZnBBdVB4enlRNTN1UTlvVFIxOW5ESUdrYXU1UUhKSWhnWDZuV0hPamtxMVlMUTZ6ZjBIZFl3SW12Q1B3aDJqQlpxdklYanRudzN0SlRHTHFwNFhyRzlUV3ZMMXFqT3pXWllxdzRvQlF5UVdUNnBNNlcrbWJJN05IM0t2VkR2Y0JCL2swUmlOYTlpakNGZzMrTm14OGszekhHd1BUYmp3UFFWb3Zpb1NyUm80MGVJVUl5WDhIcVhyWC9PSzJhQmNPN2FYa0c1NTJFeG9hVVExUGNDSjJTcnZwN3VFL1ZiS3J2dmk1c3B0WExwVldiNkZZa0l4dk01ekxPSnVRNnJWNVg5R1FwV01VZDRXWjJUWkR0aWNyeHg0c1U5R2NCenhJaGJ2SnNIellWMmxoVlNsMDJLdnhwMThGWEN6QzR4U0V6dXdiNUFzT016YStxUnQ4dlRWaVNQbEtUbFAyMFJsOThQU3FjR1FkMlY2aGtuQ09CamM5enpBanVnb210UU5IRHJXbGlTc3djdmFIRDZPT0RBNDBYR2RQUzhIdEg3SUhaSXIwSmtPQURsRjFtbGxMK0R3Q3h4SGkwM3l5R2cxN3FnQWd5MkFKU1JYVHA3eDJtZUczdXFnajBDOEtCeUpoT2tSaENFaFV1OTFYUGdLdFRub1FRVFZtTTVvSGsxM0c0bTJJVTJ0SGl3OGtxT3A0UXRIZVpRaThIN29LTjRPVXVSa1hOZ0xONFNsdDd1QUkzdGNDRm54U2hKSlhHa3h4TnBxQmd6eGd3dHZZZEdOQ1JpZGtQMnpURm5BTzFtZUJrYjlTTVlveFg2MzhyTUlieC8zMzBuMGpsdXVzZDY4OExEdHZ4Y01MR1B0MmRLdGpMb2JZM0I2R0RFVFFkMlEwZ2tRMmdHb0tnMnJEK3diZkxTa2NSditZb3dTMXBrbVdkWi9EZXhkWVhnUWtZY2RudEFKM25hdElwUzk5emJpZFJsbVYyL3FKemtVLzVzQXdHV2FCMEVLbkU1TkIrb1Zibm1CbVQyaEx6QTBjejFxU2JnWXdGRTREZEsyRzZ3ZWlEc1VsNXVsVGlRTTVmdmRuRmVXdkcyZmZIRmIrTkVrZnFJV083VllQVkJXQ3JxdDFZUWNIMUZMZjRhOUVJY1JONG9VV3Z2aTQrMWJjMVRMQ0V6cDVHUzRXcFJjTWdSSHhGYVNZdllDRXVPU2xnS1dpS0ROR3dRdW0zTGlCNEJKdGlTNVhwVEpaM3JtY2JBL1BjUGRoU3FqbElHWWRKaGJWeDIrZVNNRUxqaC9hREROK3g0cU8yVWlXMkVZVm1aUTljdm84c0xDSlBjVGhsamxBWUFPT0JRQzJYU2FlQ25mOWFOZzF1SDZMVlZFSUtxSEgzNVlLRzg2OUpmd2R2SkdzK3RoMUkyT2Q5K1BnZTlDS1lybXpzWnJ6RksxamFSaUYwYStJTFZLWkFUekJoOFhEeCtrbkxuNHdKb2NWMk9RNG5SZ0tLanZXQzNaRWpZOWY5YVBLLzV6WDIvRUNDQTlqb0ZlampaOUc4NW1VanJ0cEZCUnpEcDVOMTBWU21sRHYrUkhXdzlkWGZ3QldJcjdNNmdsdWVkT09SOGVGL3RUbEt3R25qWk5NZjRHRmNOS0JueEFLRlNtQ292eStQTnc5TTVWcDZ1YlQrWThTTmM5ZFB4SVoxNEd4TjJ5cVc3bXY5SHFVcHRFRWVoYXdnWFBLTXFubzdlQm4vWTd5RGdRYWZpQkpyczB4eFUrZ05KL24yQnlRb2N3VjFneDRPR2NRd3RvaGNxRmhFaEF6bFdhbU0xTncrT3RhVjJQek1PeCtOTU9ZcFdqSjR1bEZHaXBWRG9JWFVYNkxwNjdSL3FVdDdYdjV0azhpck4yUTFBVVdsVEVKcGhON1dOQ3ArTEljd09yZHNOQ0xsb1hBZjVtNmY1K2h1NUlicElvVlljOXNZblhuK1N3aURZYmpwN1dmc3EyK0kxQUhnNXJwc1BRK0h5L2hqdmMzVHcrbFp5WmlTcGtMN1pNVitsY3hBUlNwc210bmN1L01zVmtEckdraG56TFVwcGpweERxY2VtZDc0ZmtiaEd2dFd6OUdMeUhYNitnQ3JaZ2tZOVhvSXNNc1FQRXlMVEdxZXBOWHNVdmU1MWszS3RyTU5kZHQ4UU8xWlhvL29pb2xHbzhQMTgwcjl1MFBvT1RreXA2QVE4V1ZPYzVobTR0aTlrMU9ZQnQzc0h5RnVRanZtd0V3ZFRtd0IzVFlCcUJJajdma1NSZVRvMUhVYjJMNGFDa21EMWZ3RzVCamZNNGI4dXdTNWphOEYzT25idmU0akx3aUZiOWNYR1d3bDEyZUdoL0pOdDczeDdPeFEyZGtIM0F1b2VUNXlRdG1wVGFnaGxhWUZiU3ZEUkdVd3VkUzh4aVlsd1VicEpzOXlGUjFjVmRiMXlBVE9SNVlON1BHV0pMNDBUKzhCTGlnODhHYmZTZzFTZFp1aXkveFJvdlBwN1E1TDJ2Zk9NSFRzOTBnbXUwb2NBbUhqenQySzVzY3JoSGJSQkV6VVYzOWExL3FPWk5yNlhlMFdSbVNzZlI2cHRaRXRKbW5tWkVjOWF2WmI3bWlsTTFQTmZPMitNRUJ3VW1KN2FuNGdwNVFvMUFEaXA0VGVJakRZR3hzaWxzMWhuaDgxR3pJY1hjVlpUek90SnY0bzg0ajd2a0Y4ZVpkT01pWkJsWFBDd3dxbVlHdVZzeDRJMmt2YUQyMUczVWQ4aVJaZmk0Z2M0VjZDUWVmZGZXdWhheDdac21HeitNMSt6aGFGd2xSei93UG9UWWlrUXN3Z2hYR2Z6Ni9CVzZZZkRyWjNmWG1RWFBrVTc3c3BrZVM4dzlmT1VFTWdFeXdzVWliQXBVWUJQa1EvOWw0OS9UODNtNnZkdVVReSsyYTZSbm1ZbElFSXlOMkxXRktBTkZrWFExREJBYWgveEVoSHpRNCtGKyt0dUU0MjVvRFRCaXRiWklDMlpPbXdLZEVsZ3FaWmtDYllyOVdOd1hONklTaDUvZWF1M0IrQ3BCd1lKdUpLVCtNOHhGQUdQc2R3ckRnd1lVWHVzVzFXcWQvcEViVER5T0ZidjQ1OWYxU2pHMzRncHBVQS9YOFBZbS96NVpvUDN4R3hhTUJnK2FvR3JTYXVyMHV5eDA4Mm1iMHBYbFpneXgvTEF4ZUZxUlcrVml2YmM2Z2VJcG5mbjQ2aUlKRzdnUXpjc0lRRzQ1MnFvMWpDVnBzYlgxaXoyVWU1MW91YlVnaGtpaUhReDgxbVNJR2hkU1hlN1NORWlpQVoyUFlKblIrZ05mWlJaT0g3b05rVEg2b1Q5ZkxEeG5LUTBsemY5aHZmbUNWQmlLcXJTUWxKcGsrdUNReFIzWHRFcUpjYWlRa0tqM0dzUHJSWnFVMnd4U0o1RGRycUc5bnFMdkQwb1d3MDM3OEdtaXR6M3FId01BVDk5dnpnSXhWVUlqLy9NRkNxR0pxSzBLOU0zZGJGTUF0UGVjMWlQRzJxUGEvd2F2a0NEVEV4c1RoSVVqQktycTJwN1k5NVFRejkvWjNWcG9kaU1xZkxPVGIrcDFjblRkNmxXZDlPSS82aXpqeGJjVG05cVJrY2NWenZERFZNQk83SDY1ak55Zko0RUp6cHQ5aDlNWEtvZy93dHJneUJGa2w4WlBqV2pWbXl0Y09iZ01MV1I3KzNhZkx2MDYzMVhLVFMrUHJ0SWJDdGw3RHhtWS9WSTlFN2ZlT2NMZ0oyeXRuN1Q3WjYxUE5xUnRGLzJrR0I0NHhyYlQxL1FoSTMxeVVDcWY3RUtkcjgxaCtoTDd2a3BGZFdOZ0tvRDJmWHlMOFJ2MER1RGZvREtkZkpkV2oyZzE0RW44WUVhS0lNQld0OVhqVEZnai9kMENVUDFJK3lkRlk1OWpHMGMxZzEzek5ZZ1FQWU9ldUFmT0Y1ZGw2ZVdLTm14ajN6UU8vWmNsVGJmQ2hmSUdsSVhjQW4zSHhTZWFUbWVJdnBTZWNnZ25LS0RCbTFDTkRtRmVKeVhQTmlyYnE1MHM5Z0l5bzlVWEttM1lVaEpDZC82a1hjMGMyR1o4QXFmaFkzTGVSUGVIQ3F4d1N0NWFwRDM5TUFqbmxkczh2SG9UdjM1Y004ZUU5U0ZucUI4eUM3TmlJalRWTzY5SkxoQWdKaHhocnc0cTlWSDZNM204c2tRRVRJYUhpckhzQk8zcVRJQ2RsaklIZ0FhR0pxQ2UvYlhpWDJFYmZtUFpFMmlOcm1PVisycUlsdlZMbXI0ZlpLdnljVkhoOEJwK3IyZXdGbnRYeks3ZTFvU0RVejVRZEpxQkI1QnpxZlBrUFJYQ2lsSmdSVFZoaW5mK2lKSEhWTS9hNFZkTUkxbFBQSEViejVBeTlKRlkxeFhjQjRTMWhBd2dXUGhRRzVXc0dOSzRtMjJqQVNRMmhRMnRkbmNvUHYrNDE4RGNiSU5abVl2a0FHZURvQ2lzbXUwK2w4NEtMaXdzaFJEdjBqYUE0eGo3NEhGZC82dXBPY0xKMEpUaHFRcTRBd2FGKys5bVhVck9OS3FvbUdBcVFPR1ZiK0FMUFo4ZHdIU2w0MWhMZlJQQ1FDajFSWGY5amRhV0dIb0VjMStmVDRuYjd6MDhVU2dnVkZDZWZNUlo3Tlh0aGcvWHg0NDA0eURsNDFsd0E4Z1F2RlE3SFk2ZTAyZFhPbDFURDg2NUliN21nNnJ3dzh0WDgra3ZKU2F4MWoxM1QxNEI3U1pDY1RpcGl3NzFCdFh0TjRseExkQWQyQk5hWk5VOVVFWDl2TDhjZ2RkQlJ1RW5PL0Y0MVZHZC8wQkZET2ZLWW9IbEhndTRyZ3pRVHFzYmZyaGo4UEhKNWxEZWpuSWlKc3owM0p2eFlud3NCOTh1bGtVZElQTGhuc1I3VUVEb0NXYVd0N0IwNUk3cU9tZ3VOSllpa0tISHA2dmVMcVgzNXR5bzhCemFXVk9hTWdScE1CSFFkU3BGc0owWVU5cUlNK3FkdjVXWEQwVkw0MW51YURtNXRnUStIWWFOUmVwTHlVdWZTNGZIMGl1dCt4ZkYrcDZoZmh3eTdGZ3BXSkZqOCtKemZ6NzVBb0NibDRuUmZ4T1YybENmRDA4VXVDREZoSHpJTlU0VXZlSGRqNWRNTkNnelFwRmptVDRaNjZSMUlGWk1UaEhhMzV1dWEvclVCUG90Ums0VG5RSGtuVVRVTzJ1U3BySEZRdEZHL24zVHV0eFBYeDgwZjhucmszSE1vU2hWWDc2d2QwMEc2Qlo1U1RrQkYxTWJxdGgyNUNvakpyaDA3Zko0NE9JNlVyT092dGZaVFFYYVlMNmI3K1hVTmNaWGRjS0Yyd0NJOXRuQjJ3WStQOTRuOVlMdWtIVUZNZEVnbmx5QUJ1QWlKcGNhNzEwR0RnUFN1R0lpdktUWFhITk1IQ0kzUGM5ZS9tZGNaSGZ3SHJ6cEZUek5FWFB6NHVyMmdiN0tVQ0N6bW1BRnpTSjdsSm5xcnhJZHAzSXg0TjM3QlYrZVZRbnBoT2l2eDNGSDkveTlDNHhtTmFkYjBmK2Z4RjlucFg0N0dNRVNSck1Vd3NkM2pLb0xDZEw5TElDSUpJeUFoK21tU3o2V3JSYm5mWkRnanpKMk54bENHc21oR0hNUkJNVkk2QVREeXZycy93QzBtZFowZVpYSEs0bWxtWVMrZHRXOWtya3p1dEhTZTgrNlV0REpYcS8zVkxydmVDNGxKWG1TbTVGc1JmK25Db0ZDNWdtc2JVMDYzcVNEUktyY0xaVjFDODJiM2x0TEcyUE5oSVJ1cnFIUzdZQkgxNGQwaXJIdFNVeUl3R2NmUEIvMVdZZkpYb3FHam5kMW1tZXJGOGN0ZWYyNHRvRTdpRml5RlRuTVFyZmhONFlTcHpkQ3VBZEZicnpiWUs0U01DNXNmMGl3TzFsS1NyK1FhZVFneEFQS0czaUVnck1GeTZIQlRQLzJRbUVKbzFyYTc5cWoxTnMzeGFaTUp4RlYveU9pOFNwNFlKWURJOHVGWWQrMFFqNnF2YjRxSHVSZytHMnlNUGpnZGJwdVdUQmg2NEVTYlppMEUvZkNaMDQ5K2xINEJOallmc014ZWVRUlZucXhqY3EvbmxxUHZjZTJ0MlVDb2xwUjFaOFRpdk55SmN6WkF5ZjVVUjRlUkkzN0lsV2xzcWtXdW9HZVFWekhzZlNKQU16TWVFOVFMT2ljRVpreWV2RHhDM1NEc3JlZ2xFR05ZMGhPcCs5VW0yQjlWQVVYRWt1UkpDSnduR2I1Nk9KSWYrQ05kZHpmSFhrZWptTy9SbVhxSXNrVk5hVlA4NWpVa0NPOHF1Sm5Cc3JRSFRmTTNzc1hPUmErYnFjK0hiYnRZMnhlSTRpYm1JQVd0QTBFNEZCQm1SbDNvOXp1ekZqT1c5VmFVeE1mT0VUWnZ2SW5yM2dUSnBPNHhSNTBnTWdNUmY4dmtZTHpvaW03MHRUZnFwaFJhV2Z4bjhNcVNGQ1czcGRscU1sS0FLd3dRT2NYOVhzNXdPSTlvTWtJUlFEelNjd1pBTUd0TTgydytTTDF6WkZKUWkxUHN3c0ZWVzVvbTVZY1dxNzEzUGIyR0RZd3cxT2FGNU5CSmwwd3JESnp6OFp6U1VIVjhzRE45K0s5Y3FZenVYSGpjNHM3YnV6UlNOWlhUZXNaL2U0MldLNysvT1VUby9taWMvc2JqdDlBTzNYNmhrWHUxOXFYZFJHNVFjQ2lHaG00dmtXMFN4MGhIWjJVbE5jeEtrZmdFcU5DQitoaW9rVVJwbnA5U3Q3NWtmbnY4RVkyNTlSVUw3UnNqMGJTMkN0MVFqVFRFWHRacHhkN2JGVUxsRXRWeU1HMGxoR3hpM3hyVXNFUVhVQ283eDIrR3pyVmtFSS9yNG0yRElEcVVnUTR6dWxjQ1Bldjczc0VPOVV2UGhPTU5wN2FmQzlkN25lc0o5RVBYempPWFlsWHo1TXNuMmhGZnp2S0NLQUJSc085WDUvT1JOSk9EM00wM3Z6NkxxbkRKMCtiVXMyVDBycklHOHFEeCszdlR3b0R3QThBWW1DMlVzdUtrUGVhS0hqSVIrOFhrMHE3cXNRNXZkekdEN0g2U3JUMUg1dHkzL0VPQVl2cTJVMnlhbWJ0R0xCdm1OaVNERG8vUldwbS84UFlSbEJhNTdwOHBtajdUV2ZjMk1HdE96aGtrZHk4Tk9PemhROFVBN2RqQmh3TUJMa2I1T05BeTBZWGd6dmowWElqLzFpcmR0SkhRc29HNHloaSt3cEJrUWlEdkdmZEJsY1FldTBoRzVDcUFVdmtNSTlsYm5sVktYTXJ5U1NTUHNsd2xnKysySmlzZnNuV3prc1hvbDVDKzZTUHZRVXdrTjRqTTV0NVZwT3FMa1VLNFZUOUl6V2x5ZHBMOUpBNUQrRTI0cC9JQklsaXEvV2ZNR2tuUzBZM1VhMFAyZS9aU2VwVDJ6LzFYQllmZk4rUUY0QzZCRTNuZFlnVGRMWU1ibDBVbmluSml2RkgxZmpXSFhQdk44N1VmV3hjOVBPcSsydTQ1UHYxS2NMeVp3aGd3d2JiYllMR1RRbE5WNVdFemJtWGI2bXlXd1pZRkk1WExZTEEwSTdyRFdLbVAvZDJNNFJzcm9pYkFqQmZ4ZHVwMGdUS0pjTWEvMFY2MUIyLzhyckFCeWVkb0piZFVPdTZUT0UrWklja0pzU2w1UkJ6R1Zxa3FDU25Fc0JibGpSZklDb0ZtaGFwMWo3dUZPYkxXdkxWQmxZK0dYdWxjNUw3TGRvUFRIMVRoeFZ1QTRVb01BaHkzbWxodmlyRzd3ZGhsVkVGYnRJK3dpcFNNdUhyTFh0RkFxdSsyVjdUVFd5RXdtaUNJRzlha1ExbzJ6QmsyV2R4MytVcmlXM1o5UTVRaDJJUjd2cWEySUw2TUVpbXBrYW5XYVpWZHNadWRZTXJRSGRielVjRU9CRDFDRTBYN0FnVWRYckEwazVQeGduSjFES0h0MTBxVGZSeVdwNjBMSGJmZ09IWUx4ZGkvMFgySG5QbkdnbEZoeFNFZ1BGRkRvckNrTTdSSFpISUdWNnJJMFNWU3lZN2t5WDZNc2Nac0s5ei9NV29BR3lkMU0wYnd5ME5GQkV5d3B1aW5MdjFBZ0hjK2wvYml5VTV6YkV2MVh5Vy9lREloTmZFb1Z6YXVvUjA4TXI1MnZ2VzdzeGh0MllURk03RUZJSzZNODhaeEc4UU40dEVIVmJOQ1dFV1ZKYXFWeTF3UmZhQmNNRW1vNGFoQ3A0dXA0bnhOdndXbElQOWZneW81WDNJWThQTElzcVIwV1hucytobFhPVmNQSVRSN0lBcUZ1dmthc3hQRVRPR21kdHpCZ0U1dWdSWTVjdmwzTUpNell3MnFoYVN5eTdlYmNJVTNmbjAxRmZSSGx0NGtad0d2Y2FrQmJZQmw3WFJqRGZJSjNodjRXMmkzTTJNbDd4VDhUQXpORGJ3Snd3dUM3bERFcm1NWHF5VmlkRC96SDVlWkdwQ0VpWm13SmNxNC9xY0dGMHg1cUxQVU9NTko5dUlJUms1eFFVU2RRaVdFNXgwdFZRa24weEw3aVp1WHhPU21INkdzaDVWaUJUcG42WjhoQUpkZlA2cC91YkhTSGhqOHNnODBUTXFSOGJ5b01XcWJPclR3QXlHTkhjV2dTUnBvSlhCUnRrQzVza3BaejFDeHhUckNUalRsYUtFaEgrc2M5ZTdUZ1M5SDFEY3RCMGJDTmVUVUpYMVN4bGU0bGcrNmxIVTJRQWlKdTVCd2xTZFNCT0JXa2IyL0pzZWRxUnNXYzdQOG9YZWkrZjg2eHVHcFd4aUVCenV2aGp0MlUrek5FTmR4WW5YSnB5dS9BTlN2MDIydm9EdkJ1V0QxNkZ3bGhZcWoxeHFxNFN0NlNOQWxXVWY5c3lBamdVcDNta0J4RllPZ3Nvd3duOTJSdGgzeUZkZVIwR1NKVHd0QldGMkltNXZrSWw2VjZrTVgzd3hBZ1lMeVZ0M2QrYW9Halhhd1JCNFQwbDNPcFAyOTBaSW1QbEVFa290aGpnTnVFSFQvZ3BlajR6Ui9hODhLei9wUnFuZnpsbzkrWE93TnMrbE5pVm9iek81Mkd2eDJ3QURJQk5Kc3cyb1krVXV0SjNmZFZnMEVsdnE5bitjY1B2TENmLzNJdEtFd1RlMFhoWXRySFNEVjRnalduVjUyaGViUnF0LzlxckQ2TXgwZG53bGdqYUZvcVlYcnNMNnd3R0RTOTNpMEJ3M3JhK3JJYUpTSG40UDVYMUo4QnNtYUxCR2U0NHJ4UHBYM21QZkhmakFNRVUvWW1EOWZxU2FWWEJXaFNOTkRyMnk4UHNOUXRKaFlzT3Y1ZWFQclU5VWNvUzhJL2pHcDdhdEFxeGxtVVJQNmRYNlRISVBDbVJqSWdUOGJFemlaY1lkNy9XL0lKNjZNenJnV2RFclYxa1JFTm9abzAxQUh5bUV0SFpiay81NmtLZ2V5cTZaVDVVQVlPaUFqWkhudEdhaFR5OXI5b2NvZnNadkUxNDQ2WWFRME5oeFdQNFIxM1RHM0JITzhJaWNDb3lrcE1nNHEyR1BmSVc3K1F0YUhMYTNlWGxoWEx5Uk1NYVd6aG5WOVV3dU5uUkZvV3ZQNEYyZy9PQ1RDY003WUtpMHZoaFhVbEdzUWtTSy9yaTRyNGw2UmxGZ21sRTdkc2pnb2F4QVVBVC9XOWNHTkJoM1BwNkRmUE1WS2xxQXNBQ2k1dDFSMGx1b0puaFFuM2l1enVvTytHWkhRbDVwTFpHMTFlenl0V0NZV3pYSVJVb0ZxaThZVmFLa041ZTRuVzR2M0VKbnJEcVRCYkpYMi90MU1aOElpelVkU0xKRitlUUdJTlRJdkxxRXdvM1pMTEl1cWp4eWV1b0hPREw1eGVZTFoyZWtGam9DUkxqRXNDbzR6bFl5Y3EwMC9WRW5XRFE5MTdkOFdFbkZOT1ZWUWs5ZlZSUTQveVhmeEYxNkdtUHhqYm1jZVh0ZU5oWE9kVlMzdHdvSERBVWJ1SDM1L1dEY3BVdDJsRytqS25DMVdOQ21uc0lzR2ZZZzJubEN3R0JGc214MTN2bjN3TnVycDNGR2g5T1hWYzVHSGJZcldXZG5Nem9xSWxDY2pSYTBERmFqYWd5bTRTZm93NFpjc0wveGhMTTlGbkJmMlYzWWxrOTlod1lRdzhTdXRIZ0lLOGFQUi9ZZU9oRERCMnVDUjkyWkY0ZmxLNXJnYjhTbS92SGVLZGhkT1lOYVB2STBGQndjYnZvd25USm9qc2NUeVdBL2tua2hsdy9QdUsrRXdDVWxWV1FKUW9Wem9rY0c3T1RjUk1hS1pkYm1zMmNmYnlrTXptRzI1bzE2cjVKNmpQdlBiWjZhUHc1MmF6OUFma3BGUGxYQUhJa3BNN3Fra1BiMGRWTEdxSVZMNHcydm5vOTZVSUZjWEFNdkhuUXBkUjB6Y2tVNEhoYi9kVjEwUEZqNTEyQ2g2QVEyZlc5dkRkK2syY1JXaXVIaGpvYXNLdmRKdEhoMEI1V0VSYTFab0FmdjZCM0Q0SGVDQktOcnQrZnBiNzZEMDFqMUM0MXRzRDFlWVlPcHlwUlc5aXhtenJZdXBFcnhrVUpTTEFUTnN5VXBVV01Pak5vZjBDc3o4MzB4bktyUlUyMkRXNFlXK2tGcyt3WU8xdTBwSmpWbDR1d3gxSUtYWkgxYmtkcjZzZ2hZelV6M2NFeXVXcTV3bHlET3ZSbmh3MXMwZ3I4ZXpoTTc0eVpKcThPK1ZETE1Ua3lobW5UcEQ3RTZMWC96MWQ4TDk0c2g0QVlyV1craG5PTG9meEl5VzNscnEzK1JlUnRGeXFLR3Zya25PdC93ZElaQmFYZWgyK2dmNXZJaUQzTFJYMnNkbnRZZ2xFN0pRMDlEK2RVSTY2TDhCakpzVGMzbjhQb2hvb3dLMUdLVThDdUpRQmhIWnhBSTBCOW5tNTIvcm1PME9DQTJtenI2ZEFPbUVyckRVa2QveFpiaUQwV081aXd0SnRidnI1T3lmOGZraUN5cm5ScUJNZ21SNnNaK1BIYm4zUzRHMjkvS2xiWXR6bC93NWVQN0U1ejNhUXN0YkdHbFJLQXpVRUtnWSt1T2Y2RlpiL0ZUREhqSmd5eFBLZnN2V281TE1zbmNjQWlNMCs0R0J6eHEvMVpUbTBRLzNYenpLMStDNGpPZFY1WXp5Sy9nTmZaNWYrZkFISWM5KzBxSDRSMUNKZEhhVWtlZ2sreTlJd09TUVNqazFsNDhCL1pTaEJlL2lJQThobDJabVRlc0NYY0NWYWladSt3MjhDdHVBV28rNWZHT3Z0VWlNUkwweFJBb3M5RUkvZzlJRENxcndrMmlCamJzbnFWNkRKWVZCaW9FS0F0K1NzV1Roa2lqVytyMUtGQ21sN3FzTkZxSlY1V0M4My9FV3JONWZrMWR2Qitqb0psMzdZUmZqY0xkbEpYa1RrQWM0ZVQwVHNseVhHNWFRamhkWHAvdk9yejZyUzdHOVRvb1NYQ3hJeWwrOS9OTmxnSVNNSExET1p3VFNHQnk4YzI5OHdmVnNuWW5YVjByQXN0bGxvajBOQThYcXFGYXpvdUtnSEl0eCtNQVh2ZmszRFdHNmFXQnVpR1FwS04vNWo2SHVhU1ZLSTF3QXVpeGtRSFJDaXQ2bzZtbE5nanJiWW9ySDN5RC9DSkpXZFlHd2RuU2FUTVFWY2NpVDNxZ2FXeC9UaTU1U1I3MjV0RFpXcm96NVZaRHUvZ0h3ZUZKb0ZPY0FzMDFCclNiTDNodHkwTDQ1KzZOaWI4NmJBL0ZVUUZZQlBlYVBLTURTMWJCdzRxOTllMnl3UUJkc2dVKzM4bnNGdDY4aVVkdWh6cEYwU0dNSVcvUGNkUDkyZC9kNzVsSXg1amR4Q2xYUEVwdkw2dlZUYnpQaDVleGpScGNIeHZ3MDdFamFQanRIQSt4ZVg2RmVpb25IUzNSUWN4NWd3SGcvVWFuUjRsTnJ4M2lheFNERi9ISTZzQ1hudStlSm5oc3lZK21CZmhpS2xvaG15U29POG40UVU2VFRSTXFxcW5mcmFDdWxqOWgzejQwaklRT2lHNm9Nb2lHN3Z4UHg0RlppbkRxWHpWbWlsaTc2OWNabVV5bHZXMTB6Qm5hSFpOYkdjQW5xVlkzK0wyOWRFcmFVOU0yVmFOUDJsUGJCUnQ2U2NLNHhLdmZZTmVOQzZWY1dlSHRpcjhyQi9FSytZV0lveWJZVDZZMTNKZmxKYTJCcUY3OGxoRjNoUWxlaFhjSXpvVkNieXZLSFkyUVpaUWwyditTTHdoZ2hJNThtL2dQNFhXNUhOay85NGVPZ21ncEtyQm9sbjFlRWg2Ym10R0FoTkFya09aTFdEWXZoTFdTWjArZjdsT3llZm5GMm01dVlQaEhtTkRWMFBKZ3BFOFRHTHB3L0FrUmZuSXhjd3V5WkN6ZEhseWY2aERaQWVRalZKSUdGTWpXenBKM1Y0R0dqQWZ2c3VzLzFoaE9BOE5VRkR0WFhjOTIzZlhiY2NaZHNMb2N4RDV0YW5Daml3cjlqREpIYmVmZEtJUUplc2JGZkxZNGJJYnk0Q0d1SWV3aVZQNzdtWkNoQ3ZMMy9LRU1LbUcvTXB2Yk5oVWRuRmdJVkZVMmRsSmRTdVZwMS91VzhnTFJ2aWJ2bGtZTHAvQmtLSjFQeDVpNVR3cjAxeDc1M3NMdTB1c2x5dnZ5eEJneVBocmd1N3NERW9uTHlZVjJtWk12TVFhQ0gyN25wYmo1ZU9jTW1WVmo0T2pnSmNFZ3JKMVN2NURQY0hrODdNZWFSRlNQZDdBejQ0SC8zZS9QT09Qbjk1bU9UVnZGd09kd2NOZStWUjZ5cmZLRkcyZ2ExV3VTSXYxcTZtdWs3aCtFb2p1dk41VVhzZEQzN3E4UXNxTG1rQ0hUNlduaUJNeUcvM28yTmZQVkkwTmh2ZVk3cFpKTnIrVnU3SGtvNHFKa2VEbmhVTDNhTnNTUTBpRVAxM1E4UHlUQnZ3VHJkbDQvSTVYSUY1cW5qRnVTeHBaNkZFc1BoMFJ5NFJFMVJxbE5GMS9IVTQxbWJkU1AzVnpyKzNhMzg2cmFOUzgzUFpGN3hObGdZMzBYNTlwZ1JVRVVhcEVYdlpaYkZqL1orYXcvQmJlNm9qaCtJNWhZU0VwQnVGM3BRclB4QXEraUFsQldEQm1mVUx6MG1VT0tSNHpPRm1QK3BKNzFicjB4anFyL0hKckVsNWE0Z2FKUE5MQVV0S0loU09rbk9GT2U4M0hHOE5oTmw5cXphVzZQSnVmYzcwanlXR25FSnRQeVBla3o2RG5zTHRtcnl1Tm1lK21ock5WZ2hBa0tvK1ZseHFDcUlTSnVBdDVrRGxmZUQwSGUyOVlIL1RiUGcvL2hNanVTODlNV01IVHFYZC9oZk1Ubkp5ZUhwcWh5TmU0VzBUQW43TjhUQVd1UnpWdUNzaGNjMlpZYXFZMXgxdkFHc1BHZDdYN3R0S3U3WmpLTnQ1a051YXdsT0kzVnFJN1VkTkhnczZqVzl1Z1U5VjhYN2dLYnBTN2NvTWMwaGZneXhGUHZpT0FSbVJrMzBrVUFCclZ0MWdhbXZWUFJzRUZUWWRBaGQva0dnQWl3RndzcjJma0hZNlUzRTg5aDdtT1M0c3c1eVRTSmF2eWRmQ0pnTGJjdlg1dDI0eEd0R2FzNnNLZkFaMjhpZUUxT25ZTXp3OU5CaVZOZjF2aGZ4b0NjWDRnOGgyTkRYMWhqREx4WnNRK29wazd2c2U2ZVNPbDhLalM1Vy9GbzBtNi9OMkcvZHBhQXRpUVBHTGFNcGlYZFVoZENQSmxXREk3aFptM2JYUW8zek1udnd0djlGNkViVTBvaXdudVQ1MFF3aFB5VWpGOXFnUzBUSU9hL2pRYWNZSFNzdWlETisvSFdXRmFaUGVHUTJvR2FpaHZSRnBOWU5WdU50OUxYeWhOWTBmMFFwaExXeDZXSzZWRUh2cytMRkRIYkk5ck9VQXBjM0ZEU3prSmVPVEgrZlA1bGlOM09zcTM1cU4vY0l0NVJ6UTJoVTNaNy9odHp6Q2hPM2RucU1wOVZDRGw4cmN6OTFhbXpJZVpkR3BDdUxKZ0UvVWZqTVp4NnBxSi9hL1dkM1BMRkpwd3RUUWFuV2VoUlJRUFoyZzhvNWVJN1U0VVFQeGFKY1ZOa3NvSDlHL09hcGRxOWwvTHNsQjJqQ0xWODU2bloxbVlNR2xBSmtVK2dac2RxWU1LbjRpdHBIWWlVb25JdUVIdWRRYitVY2xITDgzSXk0d3creVFSazFic0szSFVlK0h0NmJOOXZtQmhrWXRnTmVUYlJobE9kRHRNYmQ5bitodzFoVXdnNFFLbldjWXFmbWhCeGp0YnFSRmVvQUJMVnpwV2E0dkRzd3pEK1krMXVtQVVKN29vZ1VvU0x6WlAxdWhGYThnVkROUXJWYVZ4aHM3TTUzNGpzR2VkaEhkK3gwdzNqY3poWTd6NVVvRjZBVGgxZjl6NmxiSWd1c3VVWCt1ZXp5Mlh6N0VHR0tYM2szRzY2S3Y4MEJ4L0c2bUJxZXI5QVBjbFk0aU1ieFVJUVFjSXZrL0plc1libFJlMWFKTGhUZTF5OGZ5QXZBQ2VvYXowdlk1YjdQaEFuZ0ZGSHFRQ3F4MWNpbHJRM0FWTDAydUF0VG02QXdmZTl3UlM2VXVzTVpycjFBU0NudjBYMUc1b3B5WkYrVWpLTXVqcWNSZkptaFFpb0VVTzdZay9uVlFwNkdyZTduWDhOT0tTVlNJeE8ydmFJcHU3cXFHNlJ3TDJycXVxalU0czJUTGU1ZzByOTJIZENyaDlEeG5sUkNvdmJQc2lsOFRDN2xKQkpBcThYLzBLVkJFck5CSFVNMDZsRFFaaXJ4enVPb0hWMDVINDMvakNOR1lWd2srNGI5MTZqeFM2Zk9pemNGM1NYd1RrdUwzQisxSWE0a2ExM1NEQlcranBGeDl4UlFvYmt4NnM1aGhwSm5TZ2lPVnhKSEJtNHhTb2MyVjNtUHpIL1M0S3hUdzdxVENESE8zdm9COHBvOWFXSUp6VjQ5S0o1VlVwaG9sLzJMNEVZdlNxOU1EczlnZWVPQ2VBZThhbHJWbSsvOUFTT0ZOMFBwRmJBRkFaY3ZUOUl5eGRUSXRPMzNkME4yNVJ4VHJ0dWl5b1JjNWh4dnVHbXhBRCtQaE1sVXRBOXp0V1JDazVGTCs5Z1NQUy9MOWkwUHRHbUxCOXBaTEg1TGtWT3UwcFpObEtYZzhGNHB4dk5wU1lEQUMwNllBd1hvUDMzQ1g1aW5abC9oRWlEdVl3V3Q2Rk5EN2wyK0g2SUZmSHJta3VmZTRPdWZnZFI3a2lud1B0Yjlyd2NMREt6YTBMN2tDbFh5K0lzK0pBK29oNEQ2T2lnR2E4eWRxKy92MWZDb2hOUy91STFHMEhKN0V2aFdhVGw5Y2wzY3hwS1NLUS9NUWJ6cWJUN21SWmhpZlVhU0ZhT1BhOEFLaE1xUlFVMHgzTGZmVy9EV0hFUUJheENkV3RGSTNqYlBxRUtncTFsZGFuM0VKdUFTK2pMUWlVR2ppdTlXTElvMVo0ZlYzTHd3TzdjMlpnRW9YenlXcVNJZDI4ZXlsV1FLWG1pN1J0S1FzSEszbFhqOGppZ015VEExOFVvaG1aMStzd3Q0YU1uRS80S0Jyam5HSTZTdkFoTEw0WGFjT3cvcVBrSmFXS2xXZVdsREszRVlMS0ZaMVN5NkI3czVwcWJuNlpWK3h4ZU84VlgrV1UybjJOQldMeDg0R1FYTUVGbnJrOTlWRE5sb0paZFhLRC90Vm83Zko2SU11SExxNGgraVVTb09rc2ZuMjNZSkZybWZTbFNZbnFOaGI5MmNyYW5nMHY4N2p2R3ZWT2l1UWN3WlQ3TXBtU2N3TDdnVDRwdjZRLzJmMXFwMGRaSzFJNFNrNFVvM1VpVjh5R3VIZ1ZFS1JCRFZ2V3NQbVNUWnFRRFFCejYxaVlGU05TR0FvYnU3Uys3SWVJcWNaTWhMVkg4eldHL25LL3FDVFNlRU4ydU03YUVzbEpuUTQzMWJPVDRGdGc2ZXFUWExRSnNuMmJhcXAzYlc4SFlSMzhHVGJidW9ia0NQcUFWWU5OZ3R6Ymk1dDZLL3laM0dXcHd1cWpxTGNtbWE2NTNBbWJEMlM1dmhTSVZ1TlI2NFZzSXFrWEI2a3JmcVdRYW9GeFVIdkJzdytZUDJmb2RNZVl6Zmc0SEtOMVNaTFBMeEV1VWZNV2I4SmVqcXJxWjNIVkgzZVFLUFFaYTE2SXQ0V3hHVTNhSTc0VDErQmVTQlp2TFQxd2tDN2Z5eCs4RFVRVXArNFBEaEdjYU1lVExHMWNhbGJ3b3Mxd2JybmVSUUh0MEljc1BRL0tZL3IwRkJCYnBHbU9KaFM2cGVWTG44bmZDNDEyc0d4RTFtOVFHTmt6TDdRamZKbkc0NDNyZG9FYm9yRzZaNmc5dzVoNTRBVUhSemJGNmVLSWxvYmFDSzhORFJKMFZxbXVRc0I0eE9mM2pHaUtrZ0w0YUxNeE1lM0dnR1lQQi8wVDZWQmtuUlNDUThBaENzUlFBbG9PR25MNnRyOFR6UEVwemZhZ294aUYxZFB5NGpUVExpeU9WZ2NXUHNTNWIvK0Z4ZC9rVVkxWkxveGwzOERodUJyanhGRVBYZnFXUk5XQ1VvMm5kWlBRalBRYmRaMHZVZ1IzbFBFaWJERHdzb2NWaWU3a1lKcXVWbWl4UzQ2UzhHSFgvWkI0bWlYZGM4TGROdFliY3BDWm1mZkdtOEZjT2FheDd2RXY0cS84cEpIclNXVWgrK1NHV3hBMWF3TVhIYkNVL3dyY1p2Sll4d1QwZXAwMXJZR256R05iT3RHYjRhMjJYMGpmVk1jbmM0TGU1OXpENWFoWXVvdGRUWk5MQTFkMk9yRFpRUy9pWEpsY3J6cTRFT0FMcS9yQ2E0d0JHL2ZtK1FzMGxyVnAvbEVUWEVWenJjZmwxUUUwYWcxZVFQY25mYUd4c2pnb2hSUElqSDErc0c5c1YvQTkwN0tDMGw4NFg2bG9JNjF1WTNPekJxMDRwb2J6ZHV1TWtwUTlDVnEzb1J4aHdQR1h2UUgzV0tEU0NoNVZpajRrRTlpWFlleTRkSzlKZTVMTExaVUFrYUNEOERwWkJiWE8vY2hpZkMrK1JSZ2xPQ1NhMGIxUnJKNzNzbys2UDlMQmxmdzNnaW1pUitqNHhZaC9QeUZLNC91dzU0UndwMVAyaHpKMjB3MDlwNGVEV0wvV0c5UENYbHh6YjNWNGErUE11ZGVUNTEwRGRySWY0VmdXbGlzQTVlSDBhcmswbWpXWmZpU1l6NVpGVnNvNEFRUXEveTNmWFg4UjExQnhKcm8rK1FjSkJuQ05maWZSRW8xeWRlb01sdnI0SVJ5VjZIU045S3AxazJkamlwL1h1QU1zQkJNTXh6bWkxSHFrcGJYdU1TN2swMFpMNWdMb2ljemhZc1RjRCtOZmFFTTFka3FLNHBDa3ltRldCNEJEN2lVeXJRWURNam9mL2wvcFVhZG1FWVdKS1FMaG1pZlE3RnAvQkFlSzJtQWJVRHBYQzFMWUFIb016RWxCenFYZjR5czVna2QvQnNraHRSN3JST1FDQ3UzWFNXaU1qRGM0bWVZVGN6c0w5UEk5WlpLR3dVWTRVVTR6c2E4aVNrWDFHdXQwSVZvOFRGU3BZS2haTlNnQTVmT3MxY2VzV09UNjZRRzJWbGthOXY3R0d3T2hKaWlkcmdXZHM2a1NMZHpwSnlseFQvVkVMVTZRUUhVeEl1K01lN0RBVnVTQ3YweFhKV3ZHeUNCekI2ektzVHJYV0xwVWkvRzJjZGRDQUoraC9Gb08vZlYxT3ErYnI4ZnhUTEhrUHBPcVc4U3BzTmp5eEo5MzFNV3VpYkdhSmhJWVorWjcyQ1Vmd0l0ajJKdmxmWDJMT0tDR1pEYXY0b3VTQ1d0VWl2VE1ZeFR2ZWZhY0N1NzYrcjdPVmdIdi85YXh6eUlWRFNwSnpiVjlySkYzRmhUUU56a3lOQWpzamJSMGdXQ3pSNkNNN1czeUpWUHpiLzM4SmJQcEg3elVDMW9oNWJjRW0zdUptMkt1d251VmI3eGl4R1ZqeW1SY0drQ3htWk5LTElJaTMzZDlIRzllZDIwbFIxWHB2ZEd2cWN5RkRwME51TTBodG9vMHplRkx0ZnRkd0lpLzJmS3k1SnlwbW1FV1c1RUI1Slg1K3lOQXRMSHdkTWhOQ0FDSUlFNGoxSUlRRGJaMXp6VDdUNnUycWJOQ01SalRucnZpaWlmN0tCMDJuSFVLdUJFcWNsWHlIcXhqNDZYbkhIQ3hYaTRHWENaeEQ3MTFuM2JGaUJyMm1uQXVyVHovdFBsSUxvbVpTYWF6bEZTbmRrOWJ1aFRBOVRnZzR5TnF0YVpwdVVVWnBTV09iRE1HejZDRjNqY3dQdkY0TEUvN2I3MXpWU255bElLUVpkQXJEc3ZjenAxSFZrSW1IMGk2aTdJRk5PdENMTE5lTWdrbnFMTitJR2hmQnpzRmxEVHljTE5TSG83NEI0YlFwTXNUamxVRUI5UW5WRnJXYkJYYzNnZW9BOGRrK2RRajFISDRraFM2c28rd3FuSkUxT0I1WmhpWGoyRkphZXJTY3BmNG5oWERIcW8zSDVzVkQ0ZHp2OFcwV203TTRGeDNKaXNQU01URGs3eG1iMjlhQVBpdU9mc2xHUTBPdzlJZTlKTFcyWTR2clhoS3JuY1JBakZRNXhjd2pib3cweGpJVXJYVkFIRXFST1lEVGZGekZjL01DTktWK3hidnpQU0dtYmdQdEdSVmdtaVpjdlNiZXVRUUduWkV5RGltZWZLRWViMjhZZG5NMldKSVBGRytJQWpkYmJydjM3SUdPMjd4OUdvMFJVVlQyZTh0SXpSR1QxejBvdmlLWnJhNHhaRDRJSDArUWpXMVBkbCtrZkpUYVVhaUgxSmtnMFlQRVpsY0V1OStxOWx2R2hkK2VMK0xRam1RRVR4T0tpdGd4M2V2WWVtMGU2bk54ZkQrM3VvTEdRS1hEb2JCMUsrMlpGODluMVg3SWhjUkJsbXRCRDRObEFOZFVDOVVHNkM0SVZWa2dpbmVsMzMyYnFQSlV4cjJiRjljNTF0a2E2S2dCRVpPNWkxSkJ0Z2dTczRpZ1JJOE01WnpjbWRwbWt6ZnN4N0U5UWlWRnpud1F2S1M1UzM3QWpzK1FOc0hoaVgzdG1jdXhWYndESE9KRDdoT1NGdTA5Qk5HMUFTaEhrK2xacmhqRWJhS1JQNUZiOW5WZkE4UjFYbjJ3SzRaSUt5UGRaRnRvbmxxVTd3dlVIcWtlY2ZNK01TYlphRnVOT0FWRzJKK2xOanZuaGFLUG1jdHk3M09yWGFxTFR1WXM0a3VHeHJIeTBueDFtVVhEemNSd0N2T3JjLzlUdDJwOGloYzk1UTFyQzFmOE44cWNBVmo3RGVSam8xUXEzaHJ4Ulk2RFNXWm9ZYTZ4OWsyaTUyaU0wMVFZcFhTdUlYSEtYYWtOR3FhVkFYUmpvNjVuRC9DbWsyaExhUHZKSFc5dXZGM1RRbm92MzloYlIzbXVJVzF0bVcxU2hkS3l0blQzS0JaM3pySTJpWjZwNUlFbzhBeStpNFhQYjIwWE9HdU1QMnBKbWlhblVoLzMvSGFoQm1IdmZiVzlUb3h2cjhKNlVCUVhDZUoxaXVLVVppejZobzNmVDJ6VG5yNmE3S3BHNmFtcGJlQlJFSzBJKzl0OHR1SmwzV1VXWkJYbWdhc1U3ak5yS2ZuTXcrK1BEcmxDbXFGYWU0Rm1FS1ZtVCs2TjVMQUx0Rk1zMGIxWVFKMGMweUI0UDhIQkJLNlBGNFRTL1ZrSjgwZWF6NzgraDB6NFZQeHZGMksxeEdNcDR3WXRUdDY3MGtVdFVMcjMzam9LanB4V1V3cTN6K0ZjT3ZWWVNTdE01RUQvb3JuYTBSMDdJL21UbldsaDZQMHR0RkN2c2FWMjBKVWVNRDMzeHl0Y3QrdGJWaWpTWWZ5TUFBU29ZTzYzTTNZY1NPRHgxMmtxOWtpVjY3a053Z1l2dW9GZzgydUF0bUNNVFhCNDIxcDlOaDZGYjQvR0luaVh0R0hLc2ZyRlFDajlpdkpveEZERkdPejBRNk1hZjhBNTRqVlpwME1zSktNM0l4VUxCVHJIcGdtT2JLWnc1R3Q2U1Y0MlI5RUdTZFMrTzRlYTY5OFJFMFppYXN3R1JBV1I0d1IveldYc3c3UTFXUFgvRmg2MEVERHFtYlQ4VmVWQkhFQUdzNzZSUlQyNE42b09RcG0zaExkc29iNU4xTTBJa0lYRDZGbGhhREE5aUMrN1dORE9JQnBrL0tSRHBKeDR0Tjc4VVFrTW9lc1owczBuaTdKR1I4eWozY2poWDZreWllMEN4VWtLSUE5U2FLd3cxWUV6ODNvUG1zRk5ka29DQlRkK0VEc05jem02UmI5bi9FRXF1MTBYWGY3Z1NSNzZaemVEUlNWWHdzUERmOUtveDZVVjhFWEpMc3lZRTdCSWw0R3pZcmkzVnN4clU4UER2U3UyWHVWVGVUMXNCSHNpSmJzTjZwSEIyM0hvNFRLSnJOMkxRV21nMGFLeDdZdzc0VjZodHVEbTJ5WHJDWllUL24zcmRYU2xQalJrdW42b2hYM0l3Y3NIRHpIaStQdHdKaXZabzl6R0NaUktDZFdiMHRtaWt2WDZmZFhLMDB6WHlUazRVaGRlRkJ1YUxkU3pwbzUrMGN6WEZrVjZtV3l5UWhXOWdMbTVjUWs1RjdzZldHSVc3N3FvZ3VrMzFUZ3o2c29JbCtCSjVEMnhmNmwrYmtIWERUL3lLOGZPYmhMT1dPSHpyTHE2dXlCTXByMGZsYW5sRkxuRTZ5R3lyUGR5UVZLcjdRcmJZRE42US9YMFhZMFgzUEZQeHZrWHRxSnFIS05LT01nejZReUNoMHlDdk9NdHlpVDRXZUhhSG4vaHozNjJrM1I3dFlIaFZaeTlpTVoyMTVaOXdvTjQxNXYyOEJwVjZORVJteEpRVyswYmFRZXVXbmVybm5wbkJET3JETUpMYVVLY3dFbytPNFR0ckI0MmJxelNHdWNaQnU2OVhka1JPRFFZVnQrOERWNDJpMVA5WjZpMVR4R25xcWFmRlFzaWhKeHNRN0Frd3d1dDkwREtneDgrUDNoV0Y4NlYzYncxRFlaSk00M2xxNkZIbE5ldWNCbkFhR25jbHV3Smc0UVNpYmdNeFRlTGl4SElsNS9VaEFXdzZ0TEZPSWpKZjUzSTRrdXl4NmsrK2p5bDdmc3RTWm1MZWxySVJIZ243RmtpRjZ3YjdERnBNQVBlN2lxTzRzcis3elRsb1R0SzY0K0xqN21jMHpsZjlRZGJTZ0M0V1E2aDhtVnNmVXoyb3AzdmlQYmphZ0pSbVJDNCt6UGRZeEhwSUloWGdtdnpTR3RUU0JXbEZxdWZucTVXbklIdVpXTUY2aDlIWjZVbXRmMnhHT0xiVCtKOFBWSXhTbHNDVm9JVUhnZ1EvOExsdkgxY0d4SkZHc1FmaXV1Vit4VzM0U2xRcFloWXdmckhWdWdqMHdtQjFnSlVPVmdPb1FYNEQxNlBRWlpLc01CekNoR2JYWFlDTW9GeVNIU1loRzA2UzJaaU5IcTBSVFlBN1ZSU0U3aWtyYjQwdUFlNjRNNmlsL2Y0aWdXQXVnaHV6aGxuY2JPbHNvK29ER1Vub3lSOCtlNEtPZFlqY1c0VkV2VXR0S0h2TDhtWmdzWTFqZGdpNjZncmFzamE1aE51TEpDb2ZScHlXUDB5cTV2enlOY1lVTWNCeW85OVc2aWlHa3MxdUJWTWRlK0NHVVVabUNPVm4xdzhhMnBRcnBjWkJWNTEzNFVhVDhyazU0K040M2pQeEU0blpOT3dwRlc3NVZkUXZCcnFFZUd3amMxNTdsNmtXQkNQWTB1L3M4c1pDZWJJT0UzOUQzemFQUlV5SlFweXJNMGNZcUM1bC9EQWdQV3RiYmovbElxQVJoMXhiZXZWWlhjZ2JTNGsrVk1rUTJQN01RWUVpek9XTmFDYWpBanB6M1ZGUEJTUllBVzc1UVRlOE4vRzR3YmpwQjltcG5HZmpiTlNGdGxvbUxmQWp4RzQ4S1IzdlVpOVMvbXdiR3dyR1cxVE8zNkJHRk5rMW5DbHhMTk54b0V3bTBnR2tNeWdmeWkrU3hCV1NFZkVjb3ZKcm5yaWJ6d3QwcjNibERUWXVFdU9xaE5yZmZCdHhyMVhMSUVxcW1CaDVITy9WMlRWYlljUUU0TVpCNkRPUFlibm5ibWl5eEdMcFV3TGRYRE5JNHVUYVpubllUNXR4VHNDc1EyVVo0clYzNEY4RE9UUk9aRVFMeHM0MHlGMXczSUsyNlpoT29JNGtnVUJSc3pWQ2c2NTZRTXZ0T0lVdysxeU1wYWM0VmpCTFBxb0FnQXNiOUdrR1oyRDZhRUkxRWRBZ010TU05dkVDeXV6RHJnTlNFeUdBcS9wbEZXWFIxbGdGVkdFcGZRZkU5WWNIK0pWRTFwRnNjVFNBSE1LL0ZOSDFHZnhPbkJDZ21MNE5TSERaa3JFbWc0eG41MXB3TzZWSkUzWkNCb293MXJBZHliN0ZjdS9Dd3U1dkF6SnBEZXBWcUlacHloTjl0eXJ3cHNzL05UYjhaNkp2V0NJNmQ1UnZuMlBJV1dOMkFmb3BWTXJDeWRGbjZUUHdaZ2ZWUytQQzNRY2dYSTVWeUlRUEpEaE5QQVhsWWR5YzFIY28vTU1rT0R5ZTVacUdlbll3c091RDZoMVF1NWtvOU9LU1RKK3FOOEgvaE56S0NCVUc3RFFwMVdCWng1bkppTmU4bWdKZDNiblhYak5qcDEvenBKNTZVbFlvRXdSTzdENjU1S283OXdDYlVHWlBacWdZcU8xK2lkSEN3ZVgrNjVtVkYrNE5uRzc0NjVIQXcwcWFjZjU0dUJHa2tZcEpHRTI3WHhMVE8vcHBNVFU0ZnFvUUdUTVZLcFkxbGtucmhmREFTdUxNS2ppTjA1RTE0bVhvOCtlZHBVeDlPUUh5Ni9ycUxmK0Y5WGlRWEFHMjJ2cnBsM0k0b1M0UmQwckd2WGxuWmJTODltellMeUtITXZweGRpMFFpUm5aaHhOV0lPbUxDVk9sbU5jbGY3eEhnbmd5cVV6eXI0dCt6cmJEQ2NmS3Q5bWY5VVdVOE5pVHN4MTFtbG5OS0ZscWlIa3BIZEJnR3BTQ0RsZFdHVHNuTzBvWVNvZ1NteTIvOXNzVlorR0lUbDF1aHR3MGFvV1RHMHo4SkVSZ2JRRHU0WnNWNkRDTXBJb1k1YXJPUEMvdlRrVjlDUUxBUEhlVWNvYUdNcHF1dnU5NkRUZ2ZlYmFiN3RNbFN1WjFucXdCRy8xcGp4NkthSnVWUDAvbUVsRmt6eDdxQ3lTaEpGRVZHMUZvWm9nd0E4cmgvM1hkd0w1VXplS3VqYmRmNDJ4MFI2bzRSOUlZU3pnUjh1bk9xWWhiK1UzK2MyUG5xUG8rSVBVNDNwelZNOEgzOHZUaWxDVVpycUtBZ3NVMTR2ekp2ZWlKalBWREI1MHFub2ZnVjVCNUtuQXV5MjRhVW1UV0xqaVlibFVobHdvT0RvR1NTOUljTlcyYno1d21wQUF1K3ZWa0NSMFUxaHhuYjVRRHNSZTM5cVpaZVp0VjZRdEE0NVVUTk1nZE5hckRQajlLYjNkdEd4Um1kc1VzZlc4ZFJwdkRld1hnRkZnU052bUQ0RkU4S0lpMVFndnhSYUJMNVlRcHNtSXhTNXNadE91VE4yYkxsdWZ4ODFqQ0Q0SlhjNGpJVEozaDZYaEludnhQUy92bkM0NGlrdjVMVzVKKzd3T3l5bHVCZGwxQ013N1VVMG9sWXhnbUkzVEpwWUpidVA4dmxWdktmS2dZaGtIRVVxaDE4Zlp1N0thRHFxWTBuLzJCeTJjUTBtQ0cwV3BKaVFwYmozVkNHTlhZdUo0QVBMbHVJYXFmbTJLOGg3YkNDWE1FamhWV25yQmNaWXFVRUtYUXBYYmlsd0JZK01Ha1FnQVQyeTJWUjNtSVVtT2loVUxwckY0T2o0NFIxUEhLekxTcGdqL0w2aFV4bW1kYlJ6M3lyNDY0aXZhRjRBOTJKczZEWEhCZk9GR1JPbzZPcHlsVi82ajd5VVRmVWlBbjBCdXhHbTR2bnQycC9zYk5iTjBZQXl5YjMxTzFISFcyOWEzNWhVVWpCWSs0bEpwWnIwVk5PV0pLYkx2QnMySzJiSVZKVFMyL3JKdk83akhCbEQ0TFNmSWo5R25yaGxFbURqcFRGT2Zvdzk2WWV3aDYwc2FmOHdpeTBvY0hMYy92QWNSUzM4dWJqK08yN09tNzVBMmRRKy9uaU9JTkhjQmhaUG1ZSXAxdk0rQWx1U1RVc3RFWUNXcHRIZWdpTk1lQ0dJR1hERmdlZVViMXovcGFHYU8zWkdzMnlzL3RCL3FPNmxNM25zenNDOGFjRzB2N2NLbStGZDNiYkNhUVB4eVcxZFJEZHNKY0UxSldmbkM5OUxaRUNGYnhVbTg5ZmJaMCsvU09ObXhjSXRta2kyL0VJMjd1ZXU5S2l3cE5kR3pQZjZic2pzak9Fc2FjeE9BVUZCdjd5ZHMyN1JVYmJpeGdkQWI4L2FQZVhyK1lKWlEyaFNDUk0yVGkzcmw2a2VRVjFtUlM5WlhyakVpTHB4aWc2bDdvN0hlTlU2cEVDU0FKdDcyOVh6Zmx4ZlBBZ2Rlb0NoSzdvbW15eUdNUTRqZVVZRndzYmcvQkhaY2FLUEZGV29DZkp6eTRVZXV6TCszb2lJcUVXaFVkZ3RGM1JTS1pMVDI2K2RKVDBQMnp2RXhDbzQ3MU91bUhqWXdnV3lpUll3R3NmQ0ZxbE5WU1RIaHQ1NFEzNjUwYWFNb0l0d1NHWlpTOFJwRUVybmFiOXN1bnZlRFJreWdST2toMWIxdWt4ekdkY1Q4OFdVUTZ2NnRycmc2WXBmcFJZSHVNK2tlV3QzNnRMQXJadGdBZkpSNzFxVVpIWjVISTFENHBURktUdlhlNmlWb1Q4SFI0YVhhWE92bEN1YXAxQ3N1NkZrNXI2bm5iYkVaUXlXYUZoeEVISFF0QnJXUEhTcjZVQWE1SzUzM1FLa1hDMlNmbnNnZUUzM2V6Vmp2T28wM2daYkRMR2ZkeGxldUh2RlRwV0V3dWpDMHI1d1dpYlgzZUZWOHIxS0NMRG45eU5QRmU0ZWkvQVNNUjJ4TG5JbUkxSzhRRUcxR2RNc2RyZm9UU3plZFJlOGIxTWpSN1Vzc1BSQXFnTG5OS3VpcW5FUG5kVm9FTGwwaGVqVmtLUE9xYUlseEFleFZrOWMvU0huQTFtQTVXbnJxUFBvTFAzdng3QUprYlhyS3N1UmZCeW1tZ0NFZ0VsejgxRU9mRTViMnU3ek9Hdk5sakN6YytBWFJ4Q1Yzc0dTU0dpb0VTeEM1UExaazN0T2F5Z0ZJaUh4MkU5TnpVbVdtSlR6VWIwQ20wUkk1dW9hVzlOUWJhNTkwdWdoNTFQenBydmNoMGRXQ1lJcTBBT3Q0WHQ0ZkRJektmRkdzQUFxeEtyMUY4OEhuWWc4M0s2bEZ0WjBZaEdaR3lXNnRYdUluWmlOcTYycWV0SW9mdWU4Z0JSdXZQdnRDYkFrQWFpbkJ2VTZkaUtiTm9DeHNzTUcwWEJtNXgvdGpJd1RGWkNNayttcmZUc3NDbXk5emV3MHlicDhTNWFkalh4d3NDNzdOU1VHUHVoVjJ5VXJFRVlyZUYyMHJTVjFwVUNnVmE0Wkp0bE5MQm1BeEJvWVNBejh4UzJXaDRZZDUxVUFOWGQ0SEJOdjJ3Nk1ZTkFnMzlWSUJBRTNudzN3dTgrTStDOXR0YVBEUFgwT2lBSFg4cEhwbEpIY0g1ZzFFa3FTbUx4NStCM3BQanVpY1JBcGRiZHVZV0tVbnNjV1NWRVNNeHNpVmNVRlYvQTRiRXFkVituNnEzWUQ5anFLTkxFc0I2bHI4VCtWUU94UW9pbEUzRVN4ZWpVWkFQa296QlpxWFkyRWN3aEVVc2dTYjVpSzVQUEF3YjlPOC9HRm5xbGN2MnU4emFDN1J6SmhqeTJQcG94TGtFVURMNU1XSUtBaDRYeVpKb1gwT2kzd3RxQms0NVRiZWJvT2NlT1VHM3k4R1JoNGQ5TDZoSGdjWTZRWjV6ZWxDVlRmNnlOUEplYTBOT0xvY29yeENUcEtUNEJlcDVGUTlTS0Q1RG12NDZsNk5qelk2OW1XZTNBWm1NUm5iam9pajQwZkFXZkViNUFHakdqYnpzRm9iNFNWNm1rMGpOQ2FyWGd4M0dSQnY5cTZHR3V4emVrZ2twZUtIclJ2Q3hiNkNiRi9SRE4yM0luTFM3ZGRZQk1ZUHRjRjhkSGk2bHRkTWtnVHZUa1pNbStCUS9zVzVad0hhZUJLOXFjWGhjdXMwTk12RlVTZWhtcm1aK3JXSGkrTEFyVEtRM3JBTU44N2M3RzUvWmZVVmYwTFg1UnlmT1JmL0dFVnRLalVZbWZPRDY0U3ZSWTE1dDYyc1VCVi91UE90WUNHR0cxMk9ycjVwVkZTS3drak9SV3RXMndCRnVtL01HRlhwYkdmYjIzYUVIM1ZtRVNJL013ZDNheVR1WlhTc1lYc3JtalU3K2tPc29aL1AyT2hmZ0pHaDNQVVBnSXpYOVluYnVnSFNaeTYxMXh2MEVYclVUVG5nZkNnUkVpaWpHSHVNL291WHVHQ3B5RFdmUmdqWUJwM25URUludGdXU0M2RWsrUVJySlNBclJzWmJDNXh1QkZXWitlSjQxc1c2azN2ZWxCQTQ5U3ZidkI2VkprRWZldzJITTBRVGt0N3JsQzhpcWdZSnU0eGFVNWJxMWRCL0xXRDJmRVVnbUFSZS9JNzdoUXFrSU1qOU1YNzRiL1MzSDlwSS85aWVsWnRSTGlrOVZEbXdwYnFyZklJQ1pFNnl3NTZaOGN5Nk9GcXdHTGMrTkhlOXZudE41OWVpai9SclZEU29QSy9zaWpESjRpSENpbkJ3clNDU3RyNjlxblgvdmNRaVFkNU04S25wQWE3dkJGVDgwcHAwcW1DaEZDN01mWEh1RFdjSHpwdzByMW0vQmlwSnBOeHlRd20va2h4aWh4TFJsY281ay9yYjJ4NkZ0YlJQclJoYS9TYUk4ZUtrNFdRZEszMDUrNlpOQ2docFh3bjh4YzM2dEN2MWMxQzIzaU9FSzVHRGpUVUE5bHNlRTBTQk04QXpmUW1EeGhqNSs1aEpNWUtiQUEyRmNUQ3pQTEsxWWFZRUJ0aGU5Vmd1UFZtOTlyajVqN0VXejJncGhZMmRBWWFyKy9HYk5uRkRxTUh3eGxpRW4wTW9UUEZSTjVnUjdkQjNZOEZKTThveGhqcmV6dDFuc2lCSFpYV0NRK3RrOEFnSUNBZ0lDQWdPSjdSQURCOU5FaGFPeGVTQm5aR2t1cnJuMm1ROVR6UVhUaWNqWWlXQno0R3NHMEUxWmMzMi9XRjMyL1JmNmZPays3dUY3N1B1RFAyYThiOXYxY1g3UHRVZCszVWI5dWlmN05iblA4UHJLNzdmcGw5UG5WL3dmWnEzMmZhWi90MkgzN2ZxM3YyZmE4Nzl1dUg3YnEvWnFHNGYyL1VFL3M5L3pYenBQMi9ZTGZzK3dQL1QxTDM2dnBsZjAvcnFkK3JTTDlWdGZwNk5EYlhjZVh0SENUWlI3VWZnOXBMU3dXc3E4WVBLY2xnd0JRdHhSMHYvNUROY0RYalA5S1lLV2MrdVNKYWNNOTlCUDhObllkVENnSDU0U01DSTVJM0ZjSUtCemdVV3pWZXZMcVBHTzFEMWFseXo0VStGcElaVnFDLzIrQzY5QlBERGhCdFpvbVNrZnBXZXdyVFFZSmYwNlEwNStsQ0UzWWFUMTlLQnBadzB5cHN2SHBOL21HNW1PblRyTzBaM2J0SDRaQzB1R05rZVRLQTA1RHl0WTJSb1ZxVm9xYmZIcEU5b2RHYUJsWEw1dmNMeWlIUlpNNFNGZVRhN3hZcm1BVllhZkVVd2Vtc2JxbWx0bnN0Q0JyQ0gwZ3BvWGRjN3BHcjNtNFVkc2ZlNzJYeis2MS91dmZFVGxIVEVvR2JzY2J4TktPdmsvTUowV1ArSFZBNDdGM0JVL0tVWHo4eWJJSDh2MHYvM1c3a1NTaWRBdC94Wm1IU0ZXS1JRNWpwT2R4SmVIVDZzVVI4R1k0c3dZUzVENDEvTjZhaXM0aG9ITkxsN2VETHJFenMweHgwdGpaL3dmTHZkazBZR21BSXpQOFdMNlpFOXQvanRKeWxVVGROVksvbUFIdE5RN09xTEsxNXI1NXhPV1pFYWwrOXFJTzZaSDBRSHNQWXdBd2JwaHozUzBoTDU4L2E0TnZ6Wmk2OFBxdmNlNFFETWFtdmQwc2R2WFNXMVpZOUpMN3ZzaGkzWW1SWEdKais2dnNGMGRicWcrTXFsTEhPRmU4TXNzc0sxMkpqWkVIaytaalBUekFnWGY0UUs0cUY3T044T2xIRGw3eXpFVzdMc1BhRWVnYmZkM0NadEJnbHVQN053YXROQWs1eFM5NnJObFlRQzlYd1dkRmQ5K1hBdk9RUFVzQnBPanFTanpINDR6RjFUWkovdTdIL0Z3OHdiTWo1ZWdoN2dXckFoTWJPN0l2L1BDRjJYN3pnWjJxOVVsZldMMW81cTdJdVVHR2VrbHd6WTM5bDdqUXhmRUlSem9KcnVkaDhlVVpaaDR4TURZdmt5RnRlVUZjZkhibkNNZExSRFdOQVB4aXBqS0tqZ21TZWFmL1pOMFFDaXFoVFBKRSt4UVB1aDIwcmJzR2xJYWUrak9RY1p2dXlvc2wxajduRXNJVXhaQnRHZU9QM0pqb3k0NVFEWnFhRG8vK2VHeWt5MU1lZE1tUnNpZEkydE5xWHAwZVFpbU5aM1hpV2ZUSk9XTW9WRmJScWhSbTJwVUdKcUQ4UjJObElPTml6MExsdVBhWW5lTWc3S1VUVkFFVXdDV1psck5hcC9ZSlRlUUFsT2dtalpOTlFLSC9TckE0ODY1M1d1SURGbEpvVkZtZXRRSDFOMTBmM2pKSkR5VzN6d2hoNHUrSHNnd2thdDdRWm5EVGxMTFM1eHZYR0ZpcTlidys3c1ZDbkl0OGk3UThrUy9WWm1jRmRIem9WZFo0Qmw2S1pObUV5UGNNMlF0d2RLUDNESmpBUGhGZTNJODBjZTBtM2Q2aVBXbUQ0VEJjUDI1bk9VcEJOTHRuNmcyTndxM2tyd0RIRnc4KzU5SEE5Yk93cStrQm9UbjZORCtoYjE3NThidDBUbVZyMlhSYmppUFJTaHZnbG9RT3owMk1haSswYUl3VXZJOThvWHVIRGRpVlZCQ1g4OXp0ZjRabEduWUJMVUU4SlZHUmV3SXdNbVpjTGZTQlZPV1BzV0ZiQzZ6SGFBNUFHSXdrckpWclpGODJjT0NDYTluUjhvc0hUUU16NjdRcVVJMVZNVnJZZ1VoTHZUOWErWVVQR1ZEaWQrMjVpaU9SUS9CdUVpY2VGWUhzSTVqSEIxbzhnWDdGd0VZaXluRXZ2ZFZUcVVlbUIyQ3FjS1lIU3FPbUwvRzhjVU1mdHBmNTNJWk5tUUZuSld6aWdiK3doaThjTXFoSVVxWHZ1SHY0dEJkb1h4ZW9MbWpsUHVWMmdhdHBkdENTNkFIVSs4S1VlT2dKbXdaRlhoT1RsTzEyNzQ0WGpwZ0h0TnV4ZlNjNWtuUHJBb3NuVGY3ZFhXcTdTVDFtRXVkRXJ1TFdhQkN0aFZNV1g0c3RUOFRaVlNHMSswZ1lUaHp4VjY0WTBIMG9ibng0TkVtY3pxenJHSFpISUw0V0lIL1c4emlBdmxkaE91SHlHUHBVcG1VUFZndG9ZcDZUR0J6d0ZOQ2ZNLzY4L2tuR2xQZWNtcmpMcXpZNTlJNE5lVytpdXdPR1RQZ3l6cTBya0hHcktmeFFTQ1M5eUl1eld5dUhCM0E2dW85U3VvZXNqWTcwZlJabXNZZFBPVHk4RWJPUVJCRXRlTEJXZktJeHBGekFjaGs3QzJSb2NGbVRNTDVidHUxVmhoN0lsS0pka2FmTE00R2IzY1E2QnpCVkpaRW12dyt5bm1pZGkxV2RNaTdVS3RkZHFZTVJGalA2TGhrZUJPaDZtUWg1aS82dWFWYjBqWmIzRmRJSU53MEJIKzZhdHdrVDIvT1NybXRSREV3UVFmS1VoMjVzaEpEUFdCSVdxV0JiKzR0MG5Mb2FYRUN3VUFhL2xSelhyWUE4N1BQTWNYdy9paUVLUkszWW9DMUJvYkRENUZVTTQybUlTVGJCUnZqK1dTQ3ZaaldYNVpvTGRIMDB1TFQ1QkY0bFVEakRYZ3dMR2xTSnM2NFR0OXBQWnJpRS9YSDNuUUR5T2pWNjEyNmFDV1ZEQUR1dDh6UjVYR0VMMXVhRnNxUENnajk4c05hbFpkSWxFbGIrQnpwbit2YlNXWS9KdnFxbWIxZTljaWhOZFpmMDlqS3h3ZmVmSm1saEhJa25oYWd0ZTAyMjlrY0ltcXBoMFZMTFE1akNGR1JiTTNvT3RYR1ZSV21aQzBQamtJY1NESTJ4NHdJOTZ4SktwUHU3NHpDcEZmWFJsNzZTNjBoU0ZXWGF1NkJPNkxWTTcyODhEa0JWVFE0dzB0UWo0Y0ptcUYybnN0ZGpmeURJaGE4eENvOGdHWDBYTWVMT1d6Y01OUDQ0TmJKbkFIT3FYMWpOeGNhRG1UMnFiZ0Rrck1JQTFpNlJmN2JKMGFEVTgxempZeWdEOGVaQnlCaGhHcHBPS01oc3pHaURrRTdabFdyWHpFTGV2UTZTMHlCcTVaWEQ1SFNyWGI2OWQ5TkEvM3kvQlUvVWRsUWxxTzBoM256Qzc5d1UzNFJSWnR6NUhtTGhnM2ZiREdpMnVJQnlDMmdyTUtWeHFNaHRsS3NqdWhuM2g4WHQ2dlliei9lb1B5eFVNTzM4ancwOEVDS3JWVkN5S21lZklFdVQxbzlFMngvdjFBd2Vvb2lVKzZ4dHROeHozbHFaUHBrM1BmRnlEMVR3RCs1aFZycE9wWUFrK3NUbkU3bG9uMjJoNmo1bTFoK0tNNUsxNFhpMm1WaCtlMGdvWFpEeTBoV0ZPZnh2OTIrS09oZEF1b210L3VBNkJpR1daVFAwY2RjUE5WREhyQWFkVmNteTdlYlo1NWZLOUhCWFRZOWlDWWVodVI0SUhmSko5bTU3TTIzdkJxRVI0dGNxZUhCL1UvUUFUVUs1T3JmY29oM01LZ2R4aTlTVkJWMjd4b295RzFJMFQzN3pzUVlFVm9PRTZ5KzBlcEQ1QUNNNHhTblNDZlVRc3JWRiswaGN2Z05EYmRaSld3OVVXVkFrS01XOGtiT2xEYjU2Snkxam14eGF3OSs2Q2wzaWRHNjJtUnJsUmZ6NlozRlBYSkNyRlhqYy9iMHdvMXBQMitjbDVTWGpnWWxWOFRuUTVFTVNKelgzSFdhRnF0bmpBM3h0cU5CZnRtMXlSbStQWjVFbHFVZ1g2Nys0djI4ZXIzMGRrWjBsTkVxWHBwL2FjM0ZkQUNDZUVSMG9LdmhRSXdyQU11UTIyZ296MS9ORHFPQi9semxUSlRHSWN0TUNlR3hxNkloMTdMemZJZ25CNjRuWVBwbVltTUVpamFwSlFvcy8zK0VBL1J4NUREeG55clB0UXY2d2FRWkw3Q0hvQkFOanN2TkNraTRHd0tEZkNHclZNcDJBdmFqUFg1Qmp5M0dITHIyLzJCMkRCODJjMXczTXgrUU04akdlYi90WnJncjM1TklXZnBXbG9zSkFLOHN6VjVHb3JuRjdPWXJFTGVPeGJuL3FwejgraWVoOFhPNFRmcWMzdDVGczhaZ05oMjdUUCtLNVRQOGNFaksxVHBwS2E2Q091NCtCQ1NYVlJXd0dTVDliV2RlRG1CdGNyVjdlSFVwdnhWUXp1NzdUemVUajRMd2toOElJRDFoamE1Z0drUmhnb2NUTVE2MllsYW9KS0srN25xYVpubWIza1pVTjBMb1gvUXFmRTkyaWZBWUtRbzkvd1AzSHh3VFN6dWNxMTIzSSthSFpYZ280UlljdlVvcW5xOUVsMzRNdTh2M3FmejdlbXVxVkNqL1Z2dy9QSWY5QlFLNEtRaVd6WlUwbENKOTNLUXZvVEpHak43M0hFaXNkVTJvOXVJTFl4QlEva3pCdEM1TVJudUFrNkZwR1F0WllyTUtVWXJKZ3ljc0RrTVg3SlNhVFdvbmFaRE1CenRFWElueC9hSXZNaGVVZU5WOE5wdUl5ZkVjYmxvemZSTjRST0pCcmFLbk05WEljeWZVN1BGeXJiTTdwNXFnRHBtNUtyRG1XQS83NjNYK1Q5UDR4Qk9jQi9hTW1OdmdpM3ZxOFJwU0Z4c1hybXpUUEZQNjdId3dEd1FWRWF0Z3dwNVRRb0s4WkhuUEM3OVhhWW9nc0QzVzlraW1aOVdVcFBkTzhDV01zNDNpZ1ZZNk1rcTRGcmt3NXBsWmh0NFF0cjBoNlNoMll6eUVIemZqMFVZZEd0dkNxdndDOThsUVNnSkF1dGt4a0RVZ05MaTJ0dGhiaGxoUk1TazNyM2NCekZnNGFKV1Ztbm5lSmhVV1V0UmF0cWJCL0dQbnZiR2drS1JzNHpZL09Pd3ZNWitYME5nc05tckpPV2xlZ29neUYzM2NIUWNaZnpNb2VldHFWaTJBZ1VnUFlUeTZkMGFWYXE5a013V3NPd3hxeks4QWVPVjJWNGhOWWF2OGNIS3VPVW4rbUlrakpXekNjM1A5d3AzekFCbmF3WjhKK1Rob1FCV2dOU2tsK25UQ2pRVHdTcVlCL0svRzJLS0xhY05ZSlFVTXZhWkREUjJyM05oT1l6cktZYVkybEdVZi9PVjJidFdQbERMYnhORnlUYmE5Z0VCc1M0d3ZNdzh3cWxZK0ViM082VUFNbG0zR1ZjdUhjN3drMjgvd0lvdW1hR0JpWjcvR3hSOUJ4Z2ZjQnhjbXlKR3kyaXRralJMSnh6NHdOeURIczVQMUFpSWRFSHJ6ZWZ5Y1Nqc1QzVUxDS1N6M3M5d2RzT05hNlVvRmZtNHpYajZrdCtORmFoNU1ocXM0VGwxY09vNFhMdi93UFkxbUIva21XYThjODI4UVgrbFpEODNHcis0S2lZVWFiaE5KaE9UeHRnNXRwVllxdHQzQkZxeEF6Wkd1Qjh1REdzNTkya25ydjN0UG81RzNkTjJuS1hETTM5TllQcXMrVHQrUGNqM3N1aGU4anl3b3dVUDh0M0pLYUZpYjZnNUxaclg5UGx1ZGgzZUlYVlAzQzlIeVNGRjhTZmJOL25KSk1Hd0dCNnlFaUVkalJUd2E5MC9oUCs1TGtuRGYzRW1Tejh1ZUh0bXc3L2VpZW45VitCTllHZFNjZWlsVU1rVzRRaVZrNUc1TGhZd2xEVHpKZkdtWk16cFQvRXRUWXZiUU1KSTU5ZTMzSU5xcDhISUdZMkFrdWZFQUJHK2k4V3BvSVJmOGFYMG9FVTMrUWpYQjZCRVZEMHcvcWNySzkwMHQxQmxEbldGWFprU0pERXFDYjIrSFZRZGxoZkh5VUg4RTBXNVBGdnUxM1NQenFLSHY2R2d2S1ZLS1F6b0ZJVENLZUdFa1RzbkFIa3FKaEx2QUk5UHFVdXdkeS96eGw0L25TVTloY2YxM2k4OHkvK05rZXh0cVc5WmR0ZHBNbmZVQy9rNnhscUt5em81MC8rQzYyNXNqUXhyL2RBSS93YzFURzF6SkNHd25WMjBkNU9FVytyRkJiQlRndFROZWdGOXlCTUZwOFdGaFVCd0NLZ2Q3NHJDWUVuUndUTkYrY1dvWW5qdUpoQ0Q5U1d6Rlc5UngzRlhtU0dWUlNUQkdBSEZKZTAyd1JMQzRNL1hRUWlzWmFodjFxWWt2NHlUK3o3Q0hWSzJwNU96SnhsbnRQNnJmTkFqcDZtNHNGWkR3dzBXNTdGSUxLL3hucVIra0t1S1lPSXNWNktuSG5mNjdiUVFrSFR1THpCYzFOOUlIRXd0UXFBY1hGN3BOVGIzUTNXMk53YkZhVEttSmNmV1BvZlEvbHZ0VXYzbjM5cVdWbEtFZExyd1luc1pUdW4xT3pEUzFTciswRXFDTTZrTklndDlla0dOMWtEVEhQL1pBRjZYVmJqd2FRdzFTcnF5U0ExK1ppRExnYVRva0JuM0ovbnVKSXJFbjhSKzFVWjF3YXUzaGcybVBuWUV1cHd5Y1R2N2VqSVk4Y2ZVTmljaXh2cWpwUlNBVlR5RXNNZ0xRWHczb1JuOVIvZ1NHcENQTnMvR0ZBNlg5Zmw2Nk5PWHFtWEY1b0Rib3l1MTA3T1VMR3R2bCtyL205RC9TNytCOW13aVRLOEpVQ1V3WEttK2V5aTdpVUtKb3BMODFWMHRja09ocEQ2cjZxc1JoR3VRV2JzZzVKTFZ3WDZiU2xyUFlHcmRMN1ExS21mSEFYaXVuTjZZMkpUTSt2MERBMVJoaUw5Qm9jRVJoM0NnVEdZM2VWdmhmK0dONnN5emtkMDc2bGZEdTMyQld0dHpPVDkwRG9tTWVGR2JTUzJBNnV0K2t6dWdIc1VuSU5YSXdVZ095eFhjNHFKNEcwUnFWMWNjNlZ0ZXJTck15Z3gzTXBsT1FXbW5OUnduWG02TG1JRkZnZUVUVEhyNmE5NUpRWXREekdFdDVCVWxNdEx1bytNelNjcFhhUmNkWG0zTEVJRnJoeDlVTzd5SGtHUU1ZNXB0VUhDMU42WXJkRW54Z081Ykc4YWRXVnhsRDVYN0czaGNuKzBSWC9RRTZodW9YZ1BQaTFXT2xmcStvRnZtWjBwZ3QxM1lKb2FtNlF6ZXpyRTNmTk5yc3JyN0hHTUtSejlCRjg2ZHhkVEpDd1FUeVN4ZU83S0ZleDRLL2dzL2MwblEwNlp4di9SYjRkeGJZMXNQUUJqY2wrV29tZXdrSTFQSkFKYTl2YmhNV0QybUZ5dnRGUG5XZ2podUh5ZXBxcS9xNFZZV09hek0vQnl3amRQNEZUYW13UHR2VXpxT1AzOHNtVHF3NW1ubVovTUt4T25LMDhEQUJWd3lyRFNRUDM0bExEZmdmMjQvb0JOM3NnNjBEMVVBb0E2LzFIMytUOGlxOW4rUjRaQmNzVlhmcWJCai8xUW43bjdqdUVtSjF3UEQ4V0lZOVllUFRTdVNGL0dBZVhuM0dGa2V0Y2VOblBBdXE3L0h5dzlGZ2lvMndzS1hmRXRaRzRxSVh3bDFhNVBIVFhMZUkyendiNExMSlJuMU9mZjNiSXdFRU1XSkhFQmdnaVJLQTV6eDBTa3I1aElWU2h4L2doQmprVkMzbnpXcHNwZURpbVBHWE1OZWl2SGI4SkM3MlhLOUxRNDU4VUFCdGp2TTJmeHppUVp4SFZvLytFZ1JVM1g3RWlGazhMdS9Ud0JrTVo3em1Sb1N3ay9tV2dacGVueis0UlFRS2NoZ2V6QjdhbnN4QVZxaFJyS0VSQ3NFQm96aXEvOWpzRFlkY2VxcUxvMzNKczdBcUtMb0lJR2xXWWkyNThpcTI0VThCZjkrSGVlbGc1RDNSM1pwc09UaTBKZnlpcU53ZVljdGZTdEU0Yzk1emhkdGJNZ2VtcVdLOG94WVZHcU5QRW5aRHpFQmVSUU9WZzlGRjJJTWpZVjVLZWYzaGNDUFVnclY1L0Z0MnVWcVo0U3ZnazBsSWY5ZTdVcFA0QTg1K2NnQlByUHBKUEpWK3YwWHZ3SWhEejJEWmpnbG1xOGZWNkwzWXdpUjBRbXBiQlRMZVZjSVdEUEJzenNUa3kxcy81cW5tbnl2N3NhNzV4cVhOcE95dEtSc2hJY2g0RkpOeUx1S1h5b09lWlRMemdzZE0wc2pnUnVETyt3bmMrMWQ5U2JYc3lsZWZUcithOXkyTlFmdUR2Y003cmJDRXBSRnQ3UGVhYk1xRGxVcU44YVo2OGJ4dHJnaXdzaERIMWFOaUlXQ0VSbHpYVjNXNXpkeEdvWDVTNm15ZEpQNmRLMjE4TkZlc1lVc3lXVkNKMW8wY2pjNDFLM2V3dFFaQ080Q2Rxd1lBSFpnUmtvMFdha3ljNDhNUlY4N0Ivc2ptOU5HQ0h2UEVHUTBRUDJGMXRoY2JrOS9raFNmdEljQzZoNnErTEVyai9hanYvSW5kblpoMm5EbzY4bTcvbkUrSW54Ky9VVWxMY1ptQkFBYjk0SjJvNmhQa1B6NXZmT2RObm5jM3RoSDhnMVFOUE4xZlJXb2E5cWs3RmdjMEEwcEM5ZEJZQjBuNzFZUkw4b2pUL0NUODNXWStwc1c3RVZmQUNyRVlHOVhqWnpJdS8rRXRFQlI0L1llZHpXT0FpNXcrMDJaS0Vhd042WURwM0RFRWlYNTluVWFONllTNEcwbEpVYW8rOEw3N0xYbHdtaGw0Q2oxREkxWFlzWDJyRGlXdjR1a1JZZnA5SXZ4QUdZbzBOMFRqUWNwZW5NeTZMaFdKaUJqSE5hdE5kVmxJUFQxVmFIb2hBQjRPQnRiVk95VHJreG1JdVpMdW1XUkdhQ29YYTFSOThlNkJLNzk1cld4QWFJQ3Iyb2hYdlVLVVJCWUJYL0dISjFFZS9wMEYxeXc1RTJqaWVCd3crL3hRTDBZMTdpUXBtK285QWNXMGlKRFQ5ZkxVRzVZUTltYnJlZU1vcFQ2ZzRUS1UvbEtpWE00M3J3aTRoL1hzblFJcmE2WWNaRTBaczA4WDBTaUx4YmhjNGs3NGhJOFk2MnJwNE4yODFrdCtneXAzMzRhL3RyS2hCQ1BmSTljUGViNDVRVWtDZDJyWEY3WVhQcE5UdkFvMVY2bjI4MXRPVjhkVVdmL0tSekZuN1Y5YzhISzh0Umk5YkJxSVhzZEJNUFloQmhnZk01TDJpWXM4YzFEK25PaFA2d3ljcWNwZGE5T1Q5U0NKVFhmOXEwZEVENWtwdkhKdHQxU3dxYVlUS3Y4MHdCeWxYVm4velFzQzNlZGJlcWxCVWFGZVV4aEpVbFhRbzUvTTNYUFdYdUYyenVORlZyWUhiOVcwUzBDR0YyM1h6QmRGYnNIb0pLWUNkNzE5ZVQrRWVKSERIUi9SQm1NRDBRZmphTkU3VlMvMnYzUXFNTWRrMnJyWVIyN3dWcmlJcnVpbXZHSzl4NjliVmE0T1dsR3o5aWlWMjNUQWsxd3lDZy9UT0d3RWFXcWM5T3F5OTVrUmFlM1M2ZkQ1S2R0b1VIYXp4UUtkTGI5WjErMldLRDhTNGR6Z1NiaytIR0d6ME5YNHFRUmJmTzNCcVVXdjVBTVpDVU5icVVkWk5pRFN5NzdNWUdaakJWWlZnNjQzNlN1dUpCVFk4anMzQ2ZlNDlUWkg1RWRORXhMUm1ST0pwU0liUCtJelJuckR0RWtoelJBMS82bk1IMnoyS0VQN3FUS1VibXAyRWZRSE5MbTNkeEhUK1JMTitLeDV6Qk5XckdpclJkclBtKzJUTEUxK0J2MU91bWcyc2ZwRzBpZ01oKzVmdjh1RG9pQ2U3eVZoRGRJOFVaVFhqVExZQ0RLcGRURjV1RlhIU25FTUl1aGREQk5ISjJueVpsMCtVdldtUi9YY2RZNC9oQ2JEbGtOMzhXd2IzZTVyTTBTN2s4NXh4a1c2WWNsa3UxUmQwdjVoanprUEdSbmt6WlZlbTRPM1Y0Um4yMVB3bW1VUUw1eVVQUSt6bnJLZlJieFBCb2pqbFlBRENsN2xxVEpqQlAvVWdaT2ZBZ3lHaU5wS05QOWxBWlVjckN2UE1rUGNhUXIxcHFCQlp0WXNreVZQNis2T3N3VjNtZDZjcDNOaFZuU0hFVldJc2tsRUVpeU1PWWcxcGp4NjE5ZGtlT1VZTHBoL003VUlvWEk3SVNYelFyRmRuTkVybWVyM2tDWU5OTUtFOUlMQk5yU1dkRXUyaEYvRHpFQWdveDJXSFE5MXkrSHMwbDFURU54bFNpVk9BTmZJRjdZWjcwRGVLOGtrNDZudElnc2RQK0JSMDdscUcveXFuLzJKdmpLNURhUm8rZk9nb3hjQmlxOWVmZ05DdXVnRGRubjJIR0k1NG9Gd1o1Q2NYN0h5SURncVdZQWNrL2dhRGNhVFZrNzhjU2k1dnRuaXlRc3NjcThFUVowZ3VIS1NLOFJQZFBTcjNuM3hHWXI5WDVYWjhwZkpkVFhOYlI3TFU3WThjYWRKMmVwSlFkRXZScStZc0d6ZmNnTVQrV0V3d2o5Mm1TY2tzbkY5MGE0UEUwZm5CT0puTHdYVWtvd1JIVHlESDA0UlpwVGxQcjhPenVLQk1UT0hldHNtdkJ2OVR5dmszelZITjlBZ0N5bHBaVmd3RW9lMmJEVzFxNk9DYU92T3lnSHVKU29uVTNxZmZidkxyK2V0SGlkMnNZOUZuVjFJUEJqTTRPSVYrNDNRdmk1TXY1d3dTL2VuNU4wQm5SNmlydG1tRm9zMXEvZ0x5TnB6T3ExT2JtOThGOUhGTXNkTjRQOW9ZTERhcE5YVkhWY1hwL3pWMXdSbGJSL1cxR3MwWWZOeTk2eUVzZnFLcFMyZ0tPN2Z2UVFoN24zUkRIQUx2Ukg3akJWeWQzbjJjMFRtbkZQeUtMSVRDc2JJVFZUT3FjM1FRTVl5cXVIYUpFUTBYanczTG45YWpjeGVSbk0wZUNvRGZFbGVxbFNIcGJnM1dDR1MvRUJNNGhOQ1lNVXFHVmJob2FiSVY4dGI2OUNwUVk4SUEyVHBKUzdlanRUZUZlSGRiZzJtZVF0bVBIb2FjT3k2VUxGbkp5T0cyR1c1VFQzL3V5NnpFVmJRbExMRmhSS3VtVWV5TDVVZXQwZXFTeTFnQTdDS2ZmVG8yNXJ6Mm1iQ2lyNzhHa3pTTERudkVIZTlaWTFhY3hWQjBHdWZpc3RVaXJRK1pEL2JJdFpLakw3Uit1OVJiMzNGQmlWTmpLR1B0ZlRsYnlacE1iUnB4Vmo2M0hIZnhVN1V2WTFGTjBQNFZOckVRWXZhVkhjUU9rZnpONmYwQy9rdjJabHh5NElJQjdIM3YzRkJVNlBBTGI5Wmh5Q1MxUVVaOHNzcUdlTFdzQWp6WVkxTHk4Wjd1dVJFUDNpcEk3M2JDdm5oS1ozNjVhQVFKaXJ2THBGRUhydUZYbkswQW02Z053ZUxmUWRaMFBmRFArNnJRUVQvSDJrc2RLMHQvcDR5TXVhd1FnZzM1bjNNRVBqWjlYaERJSlFER2dyb2lhb1IxY0svb3gvTm5OSk5WZmR4OG9Wc09uZ1VVMEUvWGlPZ1M3dGsyWnR2VVkyN1FDQkNUQVBkdS9JKzN1NTZIbVdZdFdINnhlMDdFK0YzS013ZVNJREVpM3hxcTByV1FqZkZQMkdVOTliNXk1eU5KWGpXMTNqbncwRURvY1NEQU5sT0RucnRad3oxL2pCVHBSN3NoRHU5VGVFcVhNSFR1bzRPQ3VIM2hPVkdmaE5Uc0UxUGVFQjcwVUwwZTJUUTNlN1RzdnpNZjUvRm11Q2VMdWo3aEJCS3FobXdnWklXV3c0aUpHTkVUem9IanJtL2xpWHJ6N3ozQ1NELzRZb3p3dFM3YjBjR1Y3em5SZjhDSGh2dDVQcGRsU3JIS2huMlJ5aTc4YTcrY1c2c1dlTUZFNDJzdDBkcW1teU5JVVAwQzdvRVNjWVNXelJoelcrbVpBWExmNmF2NERlYVdudkNkRVdHdkpPeGNITVMxcXdjdHFaVm82emxibDNYZWVyM01xRjMxTXlmSlFtV05IaGtVWmlZMU5kWDc5ZGlYWFoyMnArOU1CSFFFM09GT3JveGNMR1AxaTN2bEt6MGJLYmovZm5NTWkrMk5LYXJFaEkzQURQM0sxSUdNS3FuZHRCalVKT3dCWm1jK0dhU1g0YVV2ZWdDbE1VWElUV0JtT3hvUEFUMmhHTFVIbzRKWFBTZitJMm1LME5FbXhSUXhZdGJ4SXF1V0tnZ0FvVmVGcG9zbEFvMmxuNnZGSEliaDVOYi9SNmpRTVZXN1hTQ3VtSDNsU3BkcTh2ZXpVS0VTRHN4NE4xNFp0emxXSkY0aVRQeUxBZGw1RkpLT2o2Z3U0K24vZWxQQTdidXZPcU92anB3Wi8yd3VLNTFPVkk3RDliSTJvRCsxbUNycEhua3plUHV4NU5NT1RBNkxIY0FZM0F3MUdWbmJ2eWRoZUFaN3FuSjdSQm1pT1BIR2FKcGpPSlF6ajY2TEM2Mlc5a0ZSaWk0VnErN3BYYmpGSnZkUyswVjc5UGlGaTN3b1AyNTcwS2owL21tRVhQdVRxZzNVZUR3RWtiTVFJb21hYk9yT1FCVURnNHhBK0I4cjdtNzlUL2pPZG92ME53SDR6dy9iUE5PQlBESmpoWldFNHllb25xODdaVDgvaVA0N0NYVHVIUnQwWFY3Ym9QTlJ2ayt3NU45NG1aRXIvYlZEVVVpVy9yRDdGQ0xDYytnL3dzN016TEhuejhkS1I1M25pMEJOUWNGOCt3aWMySUlUY3VmZnJ0NnIvZTBSUFdXZm9RVkxjS1FZUU1VZ0taMHdMNmE3dlpVNHQ5TWNTU1BOc1h0RmpqYXl4c2I0a1NJNm5TM3A0Q1JHZzdVQnk0N3YxQml6NkI2TEh1UnhwdkNHVytpS2NiRGJ0dFowK29QdUpUZnFzR0lyRWRLdUR1aVZPOHNpYS9HZ1VCcGZsb2V0bW42b0F4dHdsQ09wZExUSG8veWM2WnE3dFJmT2RYcFlDbTdXU1p4MG8xU3ZvMlorSCt1TGFuWE9TUmIzbXJOckVoaUhJSWVPZ2pJdzdLL0lDUktwUHhYc2hFenBjWTd5b3Zaa2FVNW5FbEtSR1ViTEtOSUQ4Vk5jODdCLzJBemNxVE9uaHpXQ01HMXhWT0FyZEo3bGtKMkY4MVpWdzFidWlYcHY4TGdGUWxHVGZtTTJ2Q3Mrem1PRmhUbVNCMkVKNk1lZUU3Y1pjSjQrZ20vUkFtejB3QmZwL1UwTVFhdmZxZGNJSFQ0ZTJOMUd3MEFMa0lmaFlKSVA1YzlFeE5oL1pOYmtSR2hPTmFwdkJyOER2dGp3bHJNVmJ4V1JiNm5veHNrQU5WSkNvVlo5YmQzTjJsWkxXb05LZDhySU10NlB4K0phNllZOUVNeVloa245QnpVcHJvSzkyeHBnOTlzVXhoY2RuSnZzL2JYcEdacW50VTdkV0U4VElEUlZ2dWdOZi9MbUptUUxPTFFmTXZFYjFYcVBHWWR4N2NqcDBHRU0yWmlqSFVyTUdHdDlPOUVZb2pPYkE0UTVidkFoYnUwSS94Sk9LeVBJK3d4SkFqd3UyV2w3c0FCYXBBYVFZaW9yWEdYRjhORndWL2dpOUg5Tmx0aW9teFhJQTNpTkJsMmJZNDN2eG5MZDhmZHY4K0FCbXgyUWt2SEdPOVNZS3BhL3dUSUtrNVJ2dUptMXlzM3lzVThGUFZaZklLY3hIUzhwTDIwQ3RrVTUvcmlEMmYxT254QUQwczZiL2s0MHZibTdScm1ZRjRxb3gxdEpESURtMHFNbVoxREVUaEFRSUdiR3Z3YlhpdWo3aHo1TEpHMW1sUWlCajB3NXViZmlzUXFJK04rY2pZN09iQXJQSk9PU1Q5WVlRN28yS1JPMlFTZXZxWjVEbS9zQTY0V1RyRFQvVkNpVVREZDlpbU5sUnNRSG1aRlpOTTJmUnJOb1REenpzekpJWldtVGlhNFp6OVpKVWJwbitYZXpPL3ZKaXBsdjJRWEw0bWU3MGIySFNqSmRiZkZDWHNMUkc5elZkWVlWYmQ5RVhDd3h5ZW1RZjRQZUxoOHJJZzljK0dZU2F5dm9VenJEYk1TL0ZmaDdQZTNvNDlDd3lNUWJ2UlhrL3ZmRndqbVV5L3BUOE9YZVZwNVk5VTNjSzYwbm9WWmhPWVV5NlFZaE43UlBxRDVmWFFpUitlMmNKeE5PaGVEL2ZPTEFZZ0dmcUNLbXpvUlF3YTFqdXFteHJCL2RoQ0Z5c1Jhem1HM3N2dmp3aGJGMGZVVFloc1UxS2FLK3hwb2Z1YzFhSU1ndGNDUlVqQmMwYU1sR3V3Z2dGd2xtUXB0a1RLY3FxS3pHU0ZkUnhtNzJ0NzNRNmpUdmZTUmo5Y01yUHFyTEhYTHFKMGdpMGsyYVVPeVYxMlpOcU9LN2FFZ0ZyUllTVS9KQmpVYmFIY2pjNDJJR2ovZmlOYUprck83ckFNZ3lvekZDdlUzVVoyU0twL3dSZHVCWEt4eWZRdFAwcHNUWDJiMnQwY0lNbmEzNjJqSVBlOEJ2TXo4ZGFiU25wOFFGakpxTUhJaEFlSjJ2M24xaXovNlk3SHI4a1ZNamJNMHNUVmxsRFdiRmZSRUNZTkVRVldlTUZYUVlKU3YvVEFFUkkzeElNY3MwN0M5T2E4TnVqK1ZxQ1NoQk5ZWWhGcUtPQ0FFTGZZb1pYd3Z6OWUvaGI1VVRLS212a3RSK0lncHdjd1BXT0o0Y1FKVW9zeTEweUUvSmVIaFYrUHF5YS9RMEtoRmpMS3poVm10bEIyYWg4eEVLdStjc1Y2N2RyVHVSUWJzSU1pZEdhT0owbG9mdHMva01GbkVCNkhKeWcxV3VFOGVzTUZsckZNa3g3UEtLdzRyakpwTkIxTG1ZOUtWWnk4STNkK0o0NWQrNWVhZVRFTmVJTE1peVdibEdvL0FJWGt3QTVwRGtsQ3B2R0JBWWttNWpMdmF5UFhGU0plZVZTVFY5N2tGNHZDMDJCcGZwanRCM0cyY1Q4SjBKQVlCTW9uV3RBekFvWTZKNXU1anZWaENpcVhGQzJLdzE2cmdLZTQyZ1VJMG8vdURFN0UrNU0vZ0psQ0FtY2cxa003ZUJ2emRxVWFTdVE5d1hpZlJaYVA3cEVPRlBmSi9UdGNXVHdLVGZOdWUrWXFsVWFYSjBkWllaVjJUdXpKaDZueTFrMFNGb2oyUG0yaU9mZ1dnTWEwUkNjK25wd0tmeU9jL0tPaU9MaEFUM1ZzbksrdWNqaW42bDVWOWE3L2c2WXpEdmphWW55ZmV1VFFkbUtsK1BUSE93eVhpQm9vbzZGamF4OGVQV1lHaWEwbmV0SXNIYnB1ZHVpSHJDRTQwMDkzeG03dFFXc2NFcUVWL2dxWHQvZDVFMm9Cay9TVzhVdTJKbi8wNjdTLzVoWG5RM1pZaituaExtZjcyN1N0MHZKdjduak1nV1dxQU5ZL29ZQUo0VGdJak41TDgrVnZaS1kyYkhwYzlpMW90ZUYzK1B0UU5aMmdCU3FkVEVwMHZqYnlJVFZ5QnRFM0ZpYjVoWUlHOWpjVjJmNkprRDc2d0I3ZldyREtiZWM0MlBRelIvRU5RQjFoVmZuRFIvSlBBdUlWam4rNS9yV1h5TTFoL1JDOThaWXhFWWU2YjY5R3lCK0JsMXJSUExmNitxYzFHdy9hZnE2blc2ZCtmN2NTdFYvWVZQclNEN1JHemdKY1lFQk9EQkZ1REcwd1VrS0pnTmpLRzQ0WXZ5dnRLOVk3aUNkMzU3QzZLYlJFTzE1a1NuOHdsTHc2RmwxRnVhRUtJRzZMa3V2K0plVEtsaTdPMm43L1FxYXc0VHVSeDJDWjM2WElLaEJFYlo5YmxQVlYvTHkvS2hWWEE1MElub3FJaHQ4a1RNQmtKa2JjZkRveE5PODJoRzNJRXVXRjh2OVdNaCtBOHlMUnlRelVCZ096bndicU80M0hVT29GRFFXUmZiSFZiemhKUkpLbUttd0RpaDJBMmxoSmFIUlE1MHh2bUtqY0FrTjZGTkp0RUVZRG9HVEhTbzhhMklBTjQrQ2lrRXhNOXVITWpWNEVPMVowREl2L0pDcGpJbW1tbHlvRnhZMTZUb3JpL2hUZ3puN0FiSG14Z3Zud01jSkxrOWhjNUhjME1IZVpUNlhBbFVQZEtvYlRxSE5UTFdVVjdYRHgzR3dxOHo2TU5zRG9SakE3dzlKRk9reUhRMkFEbHNCUkRhSkRqUjF3UGk3aUdqK1lCUyttVncyeFZ3SU5jaWMzVnVQdk41eTF4RnRtemVlV2RPRGF6K0t1Z2hYbVZROEhHemw4QXNNZWVDc0FqTGtDcFFGL2pTS3hheG1OYXZDOUoxNVViQjRFWlBhRkNlbVJQWEZFMTI1eTl3MVc1TmMzKzZoSzhnTjl5aEhHOWRDWHEzRzVSQUpPVXVVVE1mZUJiTmgzWGd0TWFadnhBenl5WGFZYnU4aXRWcWpwTGFJMVhyaUNGYWJJZ0h2M3B5S3c0MU5abFhkN1pxNjNCUWNHMUNNb25pODJ1UjJwTzFINGV1UG12L0xRak1NMUk0d2ZpVHN5MjhaOTQ4aXFmSFMxejEwSTFWRWNod0t4K3pxTzdBQ0w3OXE5SHFmMGdpd0ZnRzA5ejlIRHhUY0M2SnhPUmlzcDU3ZTVkSFU4cklrSlBWMXNucm9sWXByalFuQmZ1bEFOc3paU1N3QUxra0haOFowUUZhQzRNbCtmMDEzM3NqbXZqeStQMTRyYmFwU21JZTl4S2cxcHdKWmZqcW9ETVVuTVVxK2lORkQ3N0NzMWgxOW5MS2FhTEZIMHFWWXFlalVoRDJVcUxnTHVVOXRnVkRhb201eFI2RFpGTmpTaTNNWmpnZTNuZlJFYW1EZXBUaE1ZYit0V3VodFpteEV4R1BNdVpJclJDYnhxS3F1SlhnNlUzZVFiZmFLeVJHOE1jdHNVdHl2RWxYVm4yNUZFNy9ZRnFyaWFoQzF1SGVwTkhablZMenJpaWxyWmlhQWhhQm54M0NLNXZCWWRnVUtGY0FJdnhoUVlhOEZhMjI0TE00aWxXNnh5V3hmcHd4dmM5ZUxwRlN4VStlOTVaTmVhOWZIOUhUUUU0NHMwbFpsR3diTHdnSjlpSDlsdllDMWtscDRDeE15dFJTbExjOVpJdng3ZDZVK3RvQWt1T1ZXYnhObFlUS1hqbDM3UnhsczRobUxJYzUrdEZKQWQwZFVtVjMxakRnZHUyNmlHR0pxYzBhb2dBTUtkTGNEY3lyR2loTXI4MVFZYkgyQXFjaFpBZnBKOG5jL2tjVkxEaEZpaVpOS045S3BBdlZhcDVBQWJEWTVabnYwS1A5WC8wUlJJcW8wOEhmR1dHNDZjUEI2VlN2RUZvdUQzdi9ZUEF3eEI1SDl5Mk5XeCtLZ1ZMS25xM2oydlhBUkRmbHc4RDBBQVA4YVhRM1dZK1B1VnE0blhXYnBkSGVCWnR1S1l4VGtUaWRwOG5GL0IwaDQ2MmpxZHlJczJndHhEbkdhTUg1T1IvYUhaNW9CbTV2RUxjbUg2YUw2RFBhTk1wMXBHQU84em85N3loamZKVGpzU0RPVzdXaXpsSVZDVG9xMlhIQVhpalBnVzBxNThoRkZFUEFVUDNJNy9KejcwM3dZR0ZVU3VzS2VRWnh5TVJOYkc0Y2dDSnBYeWJ2aEtPTHRkcWZtbjQxK0kxa2dUUGt3SjVJRStoKy8xeTJRdFdLdnVua1FmdnpDMy82MU9WeGwxN3N5WVkxRmVCNUZpRDhRREdmWmpEWloya1psWlgvZmVIN2kwL08wNHNmeFVFNDZjRlBrZUwvSU5GV1JiOXlDVlRzOWhWSExiK2k2a0M3ZWxLc3FtaThBOTRrYnQwK3hIVjZxc2k2RzNwL0pJTGl1ZTA4UVBwRVU3dHE4OHNuSVNxZ2tRKzlzY2V6c1VzOHkrd0JScUN4aVZSRHFnd3RsVmlTbFVmcE8zKzZoTDF6ckhlMGgxaUhRZmhnaVlDNE5XNWdWb1NGYURGV0lpS25aMWlxK0s0VHM0Y1pPcnlDMWhMZmMvcGl4d24rc0tkeXpaTFEzWCtjWDN4MmhFdFlBdHZncXhneksvbzdUSVBLSW1rNlA2eHVvRUsvYk50VVQ2ZTdSOXFEOUJWenNQQzhtNlhKSkZOcmkwSnhOVm9vQ2ZjMXRPQmhvVnA5YmRHMzljdGpmYkpQRVNLT200UWlUWmFrYXlzQkFqZ3ExbHBKM1Q3bVJJYnd3bnBuWXhsRVZYdFdTQ3ZqenZmYmRYcXd0SVUxc1FzdG9NaHVFQ0pHRUtKYlN2OUZBZDVqRjV2Y2ZGTHZMd05icnp0WnBqNEEwRE9EUC9NWno4UXgzU0ZSUDk0Z3lSOFV5SU43ZFdYVFV2dEw3b05wNG1hZDdWbFcyZlRJRkpkRkxPM2YrMXR3aDJ6emtxYWlZSGY0UFp5SVdrUFh6UVJIYlptZ09RcXpxa01ReGM4WE5KeVNic2ZDdzhFNzNXMUtvVndPbW1SbGdTTnJlc2VkU3NwMmRHOG80UnphcC9QTHdmRThteDd5azV6YVl2N2k4c2pRWlBFdVB1SWU1NFpxRXdlS2tWNE16dXRGcS93NFlzc256U2gvQjNPL1JOMWlGcWFPc01KMFVYRDFjSjBaYm8rdWFHVXVRcWY0SnhTZTVQdjdzelRvdWFNUlhsR2JoYnR6YWp4ekg2dWJiR2JpbXlZanRJVk5BZzNxNlJ4TS9BQjEvNEpoamt1d2ZPM0xEeW0zZWMxeklCRWlYTTM0bTc3Vm1EYjg1bDRWTkgzdUJ2T1R3MXZFZGRBVjVjelhxOHEzMHh4Qk1DKzdPNnIxWjZPZGtYUVZEWk1JY052Uk5ucENLN01MWHJBQzMwTlpKU0N6V21qaXgza2lEMVcwa2hyTERGd3dwVnNzWmdzZ1dKc1lBYXFOY25MNE16WWUvc1lCczk1NG82ZmlUTmZmTmp4dll4aThVRHBRY1BLd2RQTi8zSFVTZ2J3cXhhajhTMjhsUk5lS0hORGl3c0hqUmFHQ3htai9mSm04RVlhS09Oc3grY3lSbVJIUmhuWE9YT0lJOXRSa3FLRTdTUHAxU3lqY0R4VFlXZzlXVmF3eGFjc0FkWnJVK25NdzY1WjdVcll4VmprT295VzYzdWorbDJ0N1FvWFVCZ1pycjVlM1dFNDNyWjdJRE5FMlcxS1Fya1YvdFB1UWtDVXYwcDhXS1N1VUROQnBWZ1VMa1pTMzhGUkZMdy9vOWpZL3N3OHAxZFZmMkxtNGVqNHlqZ1JjcVY3aGo0NTBBeVpLNGZwMzRQOU43UzREaXBOTncxa2JiK3h2ekVhRGdFc1hGU29MYVdibXJ3RkIvMHpBaXRqejlxZDhYWUxURlVZUG93dGs3cFdhQWsxalRsTG9GSDE5NEhCS25yR2RTK3JNa3licHZVWDcycUwzblI4RWp3a05vK0oyYU1yVUhKNU4zUDZJbTVReFdDdkhISllyZTAwMVIvbFVVQ2FRazdYQmJESGNnQ3VnVTFra08zQUl1Q3RVN3p0NDYwQm5YVGRKNXNUdmhPZUFkN3NxR2crbW1RdnJmYlIySFE1N3V1ZnNiNURPL250YnBLbTJGZGcrMzA4SlFUWWFON1U2Q0FvNzYvWmNwVXRibFdBUlFheDRrRDhIUnVYSTF6NDIxWHgzcHpLQXJIdVNwR3FBYlZnaFd0anRXUUUrYzgyZE5xRFR1MHA5cGNEWGRCMEFPR1dGZHhNYVNncnI5ZDFoTUdUY2dLdnNMZjhidkJDN2lSMEEvbDJ1aXNEYktvR3F6OVQyaHFWMUh4L25JanJhTHZMaE84eWVPRmlvRC8xb3MxSjdNQ1EzVVRJQTVabHZucVZxdEZJRkkweERXNUZnWHZUam10cDl3WnMxbFZoYWljbWFsNWwrUURQZk0ydy95K0FRUUlCQUhjRnpMVVVFenU5Wkl3ZnpMK25tZHEzVWsvQkdNdVd3ckpHQ3F5MGEvRk1abEhDeXlYRFFMSThHd1M2emNIaDBLVU5IaEF3K3Flb1FPOGpFU09kVVNlRzBDQWtrVmtHSVhraWRsT1RyaGNXY2dMZmF5SStGN1V0K0JKdGFwS2xQZUR0RTRFOTVITnpnS0hEK2E1TG5BVXRFMGc0ZDdEdElobTJvKzZac3RmaVRHd2YwUU1CcGQrRFhkT1Y1dUd2MGdzdnBzL0x5Z2dzOUtqdkJFUW1xWFlnRENXd0Z5U1FUaGlxMDNOYmcrYVdIcGxqQTl4aUZnbGlmZENuNEdQQ1VkMXRRb2Qwek1RL0VuWmZQNUcrSVorLzduMUJlYWZac1ZhejNubDh6eTY3aG9ueUxaM0N4dkxpSzE2eXZ1ZzBOUG10ZG1CVFdTVStPUHV5b0d0OWRtcUtlNlF3NVlCaHVVMFJNU2VzKzJpVGFCcXFQcDZlaGdDeHBnUmExY3djcmJwcHhPL0I5MDdCUGkxbW9RaGtwU1c3dEdjbi9XVWl5QkJsQUFHU0FReHBNQkFqUllhM0hzQlptUU16c0VScHZQS2N6dlQwbHB3Mkp2bDZDQ3BvcWRocjl1ekNseXZXSGtmbXp4V1pNNEh0WlVFUWR0bHR5UjV2eXRmaFl4WjFlZGtGSFVJUlV5dElMVUFSd1pDU1ZRaG9lNE0wWGxKSTNNTGljMFY1eE12VDN3RUhnSS9lMFc4VlBGYlduZlg1QVEyOWJ4UXdDVmdUK3VKbjdYWml5MEVPY3M3bFVxTzVTeHZ6alJtV3U3YTdEdklIeGxTNjV5U1dHdGRFaTErR1lRSGJ3bW4rbjNJN1g1NUZpY2R1TlBTMUVBWVB4ODZ6MWZiREh2Z0FlUER1VnRnYWpsWFg2NklnODF2eWRIRkN5UHNjbGh5TCtkb0pJc0JuYTVDNkVhdEp2alF3Z1B5S1E3VzFhZHR3ZjdLSTM2VFFPUUNOMUZKclVGTkNKQTMzc3NnQmVBaWppalR3WVIyTzd2QnBnekZ5OU4zT3RSOU1nTjBSNEk0aVF1QUpDZDVYM1dVTzhOYStyQ0xjWkpBSElNVTg0VUZ1cXlDQXRSNko1Wm1tNk1iTFdDWjQzVzlmS2RxTUF3bk1YMDVodXFiUW5OV0owYU9Obmt2UmJqdEErUytGTllDek5YcXlML0VyODlnYlJ3dy94UU9Jc2hpOE11N0FNUm5VME5hVlRSbCswa1A2NTNUZi9haVY2SlhiZEdqY2pOUU9MQ3R6NVBkblBQZW1zQzBMeGpUNXNKcUJ0SC9kUXoxbEJpYTNVUmxFWlArS3VlS21mWHh2bXp0V2RBOGdtK2ZnSEk2VFBPTURCOS9NMGFNMGg1emdCcDFxRkZ0WllaeVlTWjdMY0M0dWtBd1czZDFJbjZ1TTIzODdBSVp6dHVhNWw1N1hRQ3ZvSnJ1N1V4WFcyYy91VG0ya3lSQTVXRG0zdDBjajFxV05UaHpUWlhxc01KWldFTUtLeUFzUWJaZVJIQ1hWcHpTQjlZQnlTaEhwNU13cUtEZlJjNkRVcFM2T1BYSi9sSWxSZXMwc0FWcloxUWFMOHlmc1RaOFRSQm11R2FDeDFRdXcvenc4cFNuNG9oMG0wdmZoRWdLZm1DdUoxYXpQc0tFN2JoQU9pNFI5ZlBvTmtYamhjQXJSejRTdzcvenhOSVFGSHZUeks2OERDbEdOYmRnTTZRcVlKcmdtN3RNUVFiZHJYNHUxRUYrem5UUGxLQkdDSk5sUDFpOEJNWU5EQ2xhaVVlVFMvQm8vUG40eE9ma29vL3prNTdVNjdzdkJnY0tBb01PVVVKRHp2MndEOUttL1UvbWdPeS9meVhaa3l0OHl2RnREdVdOSHltbnFqa2FZWmh3UTNPUEU4MWVsdjlET3lzZjEvNCswWUJNa0ZZQnExV2VvOHN5MHpNdmpnZmxTWDNIS1JvWGFZRTVQN1duTHB5Nm1BUVRSSkw3MkU4bjVZWE11RTRuRElZRHEwUW40bEpjOTAxUElwK0s5S0Jkd3MrdXIzNW9tZEhHVGpObnZRRHFSUFpIRk5nTjErcGt4SkNrdEhXNTg1c3dwRklqL0dQMUlGUXFMWkJHM1VZYjBvbGErQWRoYXZqNkRxK1BTWmdPWnV2UjE0TEdFcmhsTDJIb2NES0lXUUxkNFprQ3hkYmpxbjU5MlAxdHM4bUtBWThMajE0MDlMU3ArQ2lhendVemxVLzM3OG01andLM09ENXhTazFWWkVSbFNORHE0Y25MLzh5OEx5eTBtSmtYQ2s4WVlOU05wZ0ZDd1dHYVdMOWg5MzVMRXVnb1R3azFWcjhDOVJISDgrcGxYMk9yUmZ4eWFFZSsra0RuZUM0U3I1TTBXUFJYSkdwQW1ucERWTG1VRUt4K29qem16OS9iMjlSMGRoM2hJRHBUU3hpd09sNFFVSHFzWk5Mc001OE45cjQ5VVdZUXRTOHJrTVg0SHJ3a1NTZnVZM084bjVpaFBUbDNRSEdudHpGTjdyQ2RmUkt3aDFXbFJTS0NaMzA1cDMxZUdQbzhkdUZ6V3NFRC9DT0FkK1JrVXQxY3NPK3JsdjdVMU8zTzd6Uk5EUmo0Y2krWG5TSUFFY1p4RVI3aXVzTDhUVDhFQm4rbUo3aTl1WCtad2RqaU94MmFUVUQxTmdxcWNMS0ZYWGI3OVVXZ2lEUUFHWnozZm9mdGFTTWlCdXcvanJtbVYyOXlKdWZOWWI3ZC9sOURxRkJzTjF3eUZaUEVWSlZ1WEo0L3FKSWNkdVo3ajVORGdNbjl1dEo3aFJMQW9DbFJsMU1idDgvUTV0bE1NTDA1T08rR1puaDJ1REN4Q25FQkpLdVdMWjVxSnBwbHo5STZtVHpON0hIQUhWdlZuOHExU1VEVHE1akowQnZsdHFyOHowTjRvVHA4ZGRDSERJZzZwS0R0VFI3ZDl0SHhEMHF1MnBiM3ZDZXZLdG5WL0NoMUV4ZjJteDB5Z2lNZCt0YStHSWw5Y2M2SHBzSk5MczVWUlNBWEd1V0RLbnFjSnA0Z3NFZkk3YUgxbEJoSXRrY2NYYlN4WklNTTVNK3Q4RmV5dUkwbHAyK2pqQkhXVDRWbituT2ZkRVd2K0M4YWRFaUdhdWtoVFJzVi9KNU9uZjdWWFV1L1I4UUxwZkZBYWFhNnpkOHFVNVBkeXFSR3lmaDhVdWI2cUVBWHdxaEFiZkZHdEZsZGdTZ2pZTW1UUDFnL0RrUWVqRitXK3hPVGszT3hXclhzbnE2VkJnRXhkM3l1UHZlcUpsOEVPUDZqMWhwODJuTXBmREw4UExDaEt5OTJEUE4yVUJuTzh6dlRYU3BURGFoRVk2UFZ6M1dmblRPUXA4U1RJdWt2bkZoa1o5Y25QaTRKSXBreHNWT0U3QlZtV0tvbWpHRTUxOXk0RVMzbnJJN3lyTSs3L00vdE9xa3IvZmJSdmRkNmdtaklBREJSYzhjRTMvSmQ2QnR1Y2FnaGtzNE1iQmJDSzBCYWFWanRKdGQyOCtNeGM3bWRIbUV1Tmw2bmZ1L2Z5U20welluTFlXWUMzelI0OG8zNTdiNDhHSWlkU3JpT1dMazJIcUJzRHYyRUJFY3B2SWptRWM5cmhxekxPVE0vd3VIZ2FVWHF1RlVrOTV4eTNVR2NSZlFCL0lDM0hVY0Q5cTYvaDIyUkdtVFlnb0ZjQ1E3R1ZlajhEeUgvQkJJUENPam9WT1NHVHUvSEdoalpBWDBja0xtVXV5UG1LQUJzMHk4OXViL2ZOT1RaTXNpTXhMMlFvbVZPdndkYmhXR0R4N2VmQVFsclArUzNVY1pldWhpRW4vUzBxZ3ZUZGJ1MWRaS3huU0F0cFhiM3U2QmJ0STZQdU1EKy9SQTVvcXNqRWYyRVFFenQ2a1pUOWdyMDJVeWRncTY5MG9rWkkwMG9xd3JxOWNXWERZVjE2TjJRelBiWUlGNWR0RHFWUlgrQ3VEdllRUmZBMVFmRVRaSW8xSkJxSnNHT1RtMjVkcTY4bFB6bXBaQ2lmTmVEb3R1UThQY2kyREtFVkJ6VkdSOE9RNHRjYW1xRVI3bWx4dnR1a0Z5RlVLbFVwNW9LcUlkN2REcUtmSlBHWFNaMXY4RlhuU2FSdCtsajA2WHd0bEl4Q0lldXF3bGE0dHNlWlR0R3pST1haeWpTdTFjMEJoZlNzSnl4UU8va3UxQnNKU1dZays5ZW01SUNsRHRaQ2cvU3VxWWdrTWxpbEhidzY3R2JrOUpJUHhGVDgxdytub2hGbHRTL0R1QnVqQnRNdDFUMCszMy9GRjdReVFJTmZHaGg4OG5LbHRlOTc1N3NTaFYxMklhRWY3Y1FlYWRWOSswTWJHU2VtSlhUczdOVkh1aTJKc3haNlBMVnpQNitJWXZ5T3NmcENZeDE2dU9ra3lvTU5GK2lUL0wwSysrMUs5NEtDdE9KU3lJWTZ6TTQyWWFNOVpDZXhVb0lPNVFXVTA1RTZFU3crYkJpS2prenVkWUdiQlNvNGZSa1VXZWN5QkpjZHo2Tnp6ckNsaWpSZDBtcG1pbUZqOXo2TlBSRUY2UHhqRzllNUdkRW5XYWtDTzVyWUY2RUJtMHR2SDczMk5NU3RLc1JDN3pLV1FCVWNlSHFrRERMUjd5ZjhlbmRQV1A5aFRBSG44Uy9uN1E3UGxrMFY5N0h0YXJUampES2lDR1V5a0gwbWVYK1ZVK0JkVWNkcnlpQ1FXZFh4Z3E5SXZZYW9qaDZpU0Noa0VsUU9hYmwyR2xIMTdCWmIrd2tSYW85T0pkYStEOFA0Zkp5UjluMndTajg1Sk9lelhMem5MYjl6b0t5RGQvTVZJaEhpZHY0amNFaW5tdExNamg3Rm5NeFFNNkRUdmFZdlduaG1reSsyall3R1VCbFIweFBnZWNyUGJHTjM4NkdnSGR3bi9CcE9raFE1MjFwcEordFlVK09QM2UvOVVSdnI2SS9MRHhPbDVscG5MQ0U0MzZFUS9CdTIwY2poSlRpSXNiZnN5VHU4RUdZM3UxQnZlYTFYbTZjanZZTVFOOFpTVG1ONVUxU0ZhbjE4YzIyMkVnblZHNitGVWUySHlBNk1kZ1dnSi9Tb090MHBHTnVpVXBSdXlnWjQ0TGlDVWs5L1FQNVhqU09lbG1Hc1VScGJ1RWZZOXEzWldhelNoZExjVEtIYit3cldKNTl6MGxGMEZ4bmxlVjlEWjJSNWlWNUo3OEpEaDFXWWRCY29lZTVvMTMrbmpjV3JvUnVzQmdqQ1FZMHFIRUJoSnphZkQ3c05OTVU4OTVNbDdlSGQ4djZuN2VnbVhQNVg1UysxN3ZWeGFrTzVET09XdEpXMXpPcC90Nkg3WU1QbWZNUWNOTENUSThKTkwveTNyWnBCZjF2aS90ZW5jVjVOWUZReEZwUXI1c1p0YXloMVU4NkVpSm96Y09pNFk4MFJQL0NjMXZDUjhxOTNuZ2dRWWNBRVBCVytjNnhMa2FySmgyQ2N4N2h4c3E4c09NZ0JYdHREL1hQcis4NUFHeHZZOElzUzlReVNxVDczZExab0F0dlFhYU5TS0hFUEdxL2ZNYXd2RkM3OVVHNVpiUGJaOVhNRnl0bklwS3ptOEdMdVNXNHVNQkh2aHVmSy9LWkpnYW1idVBteGQwa3ExUmxQUXBnUStPTDkvZ3Rad0c4bTk4VEhmamUvcHcrZ1JveCtHU2h0L2RxdFFxMjFybE5kOG10QTlqb3dmWGlXTG5idmV1VHQ4M3RrOElhRzNVNGZrOWRyTGJ0Z0tvVUZseklxb0JQZWpUaWVhdmdFcWdtOHBwaFFISytEYW9rQXNNcTNSSGMzZGFoa0pPSCtlWjZaTHlUMVJlQStta3FUeXBuVE80VWU5VmoyMHBWYlRQOXpVdVhlNTBDa1Z2dWhoYTM5dFcwY2hXbXVFNGZXc3F2NkZoa2R0aG1YU1lxYXFMaHlXNlJwc1E1aGZKUmNGaTFwVXhZcGJ6cVljM3BKbE9SR1F1RTdjZ2hLUzZRdEt3SG5kZlhjNk1yU0Z4anluaXZHTWhtcWswSmNkOWtVZlFvMEErZTBiMnBlN0hOZ252Tm1Ob3Zad3dPVUJkbEJ0bWpvelZHOE9UUTJZWWF5YnRPK242ZlRiUTVUWWxja0hyUmYycnAvb1ZiSEJhbHUxTGdIb1FrMXBMNWhGSWhYaVhnbEJ5NXRPczR1MExHWkhFcFNUUEllUWZPNWI5OHNJNWlHa1VKSEJXbTB1alRBVi9IRE92b1IwdTRXVERvVUx5OFk1WG9yb3ZaQlVaMTVLTnpoa2VjL2R2VllkUFc3Y1ZoNVRmV0N6ZkZvU0ZLNk52SS9aSUZLVHg2bzFTWlc4ZFUwZHFsbmVKTVVMcU5tSkxjVkVQTjBPL3AzMmhKV1E1TVFqaVFTalJZN1lLRytYdFFRNzNHMmF4ZmxmZWpZdFhGMFh4L2d2YjVpRnRIdmdpczRUQXBEQkdmM2ZzdDQ2TURiRUVYYUR6VnNOenFGaDVZZExsdXpUVk85U2Q1S0s1VU1vYm9ubi9uL2VPVzI2Tnc5VUJJVGR4TkE5NDF1Y21vYXhwb1QxRkhpOE9IODBpK2gwS2tSNFVqSTZpdjlvR0xNMTIzaVIwNW8xb2JhSXlVU3g5K3R5OVpWbm5jdVdmWWgrc2gyU25NeGZWaEVJZEd5OXo2b0FYSlBLOFlHVS9UU3BEb2dtSk9mZi9QSnFJQWtwNmlqZC9Xc2NnRW9vZXNPbmFMOVZXUUxOZklJN1Y5L1BLSG1GMXdwN0RRMGJFSk1qaVRGZ1lBZy9QZUNNQWxwZlVNeGZzRFNQdkYxRk9tZjkwTnRvczBlcmRVTWdnMHUwV2dVK1NvUkM3Q2dIcE5iRVluM2hqWE1SQmJMVXJ0d1huQzBOQk9CdncxQzdmSCtVV1NGT0oyamNhUGVHVEFJeE96WFFjcDFuNTFsT1JuTTlLUm9hbm5hWUpFcXFnYmtBdGNZdUZCbTd4OWZRL3VycHJMbHZ2b0Q2Q01ES2toVkN3TlRRbTNFdXdaY2RGV2ZXQ0o2djQ1RUVaTWZ5MFpUTHpxcVU5cUc3TnBLM1JPbGtmRUVxOG1wYWh5S0VLdVBrUEJTaExsMndac0d2WklHYWU5ampneFZZdnU4SUt1bWo0N29kRWNVUFpJeldTa2V6UWF4b2huSGNoWVpCczNpQlRXOWZQZE1wTHQxSmhzOFVpbkRzWjRqL1BIVUdGZE9NejJMaGExdENqRG9QTzV6b3htR3dIbVZiaTdnWCt0Q3hJYU5CU0xBelNpNHpPVXlTeE9lY09qc1pUT1pSM3RvU1FQZ1A5WUpsT2xiWlZCc0NFaEJJb1QzR1J2OGh3bHNYbDVqWG0xQmlIK3IvTDZwcFNTOElMeFZVTEdFU3lGKzVEQ2tvdmhld3N0cjQ3dDRQR25BS0tRVTJMK25DbTQ4cUdybGhaVXdJcmNXUWZsemZkREZaamhZclFBVzJiWmc0WWhoQ3hnUjBNY2d2a2dqQU5ZTjZQWjdNdnVRRm5aNElZWm5IZkF4Y09CODFCUmJoUDhaTVZibXA1QkE5NUx6enRwWTlMTjFUTkNGV2pFK1lUU1hhV25UU0pjUHorZm1wUGVGU004VFNUQ3lYRzl2dDl5K0l4eUVjUW9QWmpnZFpOY0hKN05RY3o4UmE1SWgvV1NhblhKYTZxOXYxRkwyVVJIRXZwUVJvVElwQlNPelMwSzRwTlNUaFg0THU1SzJXZjVJcUtjSkEyRGkzVnNVdmVwK0M0VWxsckFpZlZHOXdSUWZ6STg1aTZyYnBQbFQ0M0lIZFFiWFNJcmZvQ0JBenkrL0w1Y1JSa2ZDTWpRWW9NSnZBbU1TK0tMNzJTdDl1LzNZZWdDZUZnOWpPVFJHeDN6ODFGcUxhTWlqSHVOeWxwaUN0aWZNaXFHcm8vQUdQWFhueU9NRnZqSkFCTHRTK01sUkJtRWtISUtUeEV0Q0RPL2MvTDBRbmNxOGtlMzlCUXlBeU5XSUpzbW14cGliaURXL0dKOHdRQndIRTN3UTZVVkcvY2VXVUNELzVoWEcyMHN4SW5oN2pzK3d1K2xwMW5VekM5bm0raTVCMVNhdzg3TDAyUTM5c09iRE80dHlKVTlNTHQ4U2tDU3RQMGNZVmtIT1JaSUxOWW1GWVlNcFdxUEFETVg0WTRHODlFdFN2VW9mN0ZmOEVxUExYMThHYlNpVmJiUmhGQkZPMWNTWGxYSk82c0NyVHppYndCRG1OK05YQ1VDVFp0bE9XYmpmcUQ2SmNnM0M4aXhHTjluR3prcDAzbHhuWGI4anFtcVRTYTJRMnYvbkkzNE1JWkhsVmhyaEcrNmd1QVNZN0twZTJPMGdGVzhZNzVTVFB1OE12Y1RNM2xBSHV0WVFMdG5vN2FyOFlNZFJHeTVzd1l2cklHNmtxbjBudmdEdmM4QkFXclVaTzVOOTYwQlMxUFBmeUprZHRxUDNiemNyOUpNaUpoYk1Uc25OYUZZUXluQk5mNDNhMlRwTjh1bVdEaVZwbU1TdzhXRkl6NHBFTXJSbFhaTEFPU3ZldzBQemd0STJjVDV6dFA4NUViUFNvOUF1cGZyUUF6REFLVWJhWUNlTEQ4aG4yWWhQcGJXaXE2ZTBuR2pheVl0SDRROUNkNUZRY2oyRXRRcUxEMU5HTDZtN0tnS2hJOHNMZjU3T1QxQkV0c3gyK0NLMmlZY3FyNkJXYUVNMTkzTWE5V3JrNS9JUkhORExFK0E4MDJqTE8wQUZMUmVBU1ZZV0d5aytuYldoSlEvRFJpdWtUWXFCdllZdzEzUWxuOWtYUVgyczBxWllwU09xTm1ZNy9WaVRPbnluRXZ4NFhLYkMxbTllQk5GejliamdtSTVyNlhac3hoWHFxSk1JTzhhUEJNNzd2MERUVUFyQzBjalVINnBIc29kczlENlhFZ203OW9VY1ZPbEdMclppR3pRbXhEcUQzeTVMVW9Ec1NyOFlxV2V3ZmZpOWxFVDZsWDBhSFRWRGZXbjNnSThLeUJWRW5TU0x3SHQ2WWp5Z0twM3F4blBmNGZjb2hoR1dBL0FPcFJudEJidWJhcWxodjJ5SE5QdEE3OUdlR05INHBKYmtxc1VFeWdhdTd3Yk93UjBPTFV4TlZiZmdYOXVDV2xVa0EvY1ZQcmxVOHR0TTBzaDBuVFFvMENaR2FwcDZXQlErcjh4d1N3VkdHVTRXQVJoSE5pZWg5K25WUjNWL0tKS2lsQ3p0aGUrd0dzNjR5dDMxS3ZTK0pyd2JBbEt0VVM4WG94M09jeVJUZGI2MXM3a0ppYjJZVzI5MEJUelk5cCtxQmZFUk1iU2drT2JHS3BkTUduUmVmMWsrMCswNENpcVgrbGNIZlYvZEU2a09EUXZGL1JyQXpnVzVPUWJmTTB1WDZFdUc3YzFvT2M1UDJFMlUyOTJvN1cwb3FQTUpjTWE2S296cFdDZWxjVE9NM0dnVkF1NDNpVGpOS1RTNkRtOHdIbGJwdjRNY1gvckJsdFltVVprNlhNanRnYWpRQXcvMWgrZjRYazYwQ2N5c29ZaW5ZQ3M0c0xjT1p0VlFwRUY1RWdHeXVvZk8rN2locmR3YWVDR2FjTmpid2NNQzAyTm5lVDhNOW05cVd0WWhjKzNReEY1RThGbm8zcGJ5WHg5UmF0MmZ5eFpWaWM2aTZEczdXVGFIYnZ2VWZ0bW5oR0lIam1IUnRMYk9wYlo2TDM1cVlucU9STGhFbEg5Rk5JL1VOcVZqeUJsNWltSmQ0WXpvcW5PNzFkaGQvaWJKRy8wQTBRK3cyNTVyNitXeW1rVDByb3ZkeVhvTTF3ckRnVVR4NVZYSGVGK3MvcjNiY29SK3k5d3pOOUxQZ3VCa2dvV3d5S2FXcXJaVit1MVNLcEliVDFoWkRlcEU0SmZrbWFrMHBYVVhURnpwWjRZYzh0VGFXMlhVcXZraFFzQktYYTBBZmlJTHlCQ0c0ZGo2ZHNOdEw0RmtxQy9YZ3pBNTRESlFhelNlNE9UTnpCNGhJWVhwcS9KMVJsSjFmSW1yY3JLMWNUMWR6azFldVVoOU80ZVFEU1BIZWtzRkpkRGYzRUpDeEpzSmZIYUdOMWZTU2VOcEpvQlFra05GODVBRUs5WlJaWDFqUVBOeENyWFgyZW41aklhVlRpekY3bEJwSk1oQUVvTHZRbllnNXNPdFVtbzVUZm1wTkdXaUFDdmFwWmJ2c1ZDaWFWWTlWaWM4OGpPMzd1c1dCeTRaRnRwQzVrWnlac2l5QWxkRi9QL0J2bWtMdmRITWZHYksxMHpHZ2Fna2lJUWxlQ0lvVXhDYm9tbGZkU3ZTMERCRU81N0NvcVlhc3Bzam5xT0tFbmNOc2VjdzRtRU92WkpJOU5VbitRblVJVWxGcUFBNml1UlVxSEc1eEpZdlF6M3liT0w1eGxRTFdBYU9hV0N1YjE2TVRDUlBhOW5KcGxtbnhiVmxEMGpRMGozSFc2dmFGQ3Y4RmhaOERKd3E4MTZFckJ4THBaVDZIZ25PSWl5ZTlwU3NsbmpZbXdhdVlVdDlrNGRMZ1ZLSjhqRE8vSGMxcE1lMW1ocFZMeUNPZ2FwZ01oRzN1ZkcveXZoM0RYbVkzWU5sK3VmUHNmZkdXUVB5a0d4alNNcGJXaGQ0dXh4d095RWcvOE53bzVwMzlZWjUva3lXV0NPNFJ0Z21IdVg4bGlaRjcvR2FJK0VqWW9OOEpjRjJYSjI5Ym9nem52ZDU5aERpRmx5OHhJZUFEVG5DTkdkajBydUxKcGVuQ1d5R0hwY0E3SEhET0dHUFZ1bXVQSEEyVzg2VHhVYWtmdWtDYmxiUUpzUjl0OFduZzBmK0ExTzc1VWp4TitGSjZ3K1FndEdBd05zK3NhVzdKemNwdit2ckhSY3NYRUVHUDZkMEoyZ1FhS0g2T2hEcGU3QVF6bHJUUkxMWTZ2eEs4S0FXR21EL0VDNktYd3Jod0M5Szg5am9pZVJkTFduN2xaTUcxbm5oQTNtWWMveEt0eThqdytzdk1sMTFNdkdQaFd6T0lldEFuanV2aE00OTlOKzZxcWIyUUJBVWtUbjluZ1loUVE4cjhtS3dya0VBb3l5eXk4N1VYcHpKalZJUFVkelhkM0lUQ1BKOXU4c1RWajgvcDNhQXlNaEVXL3lsU1c5R2tOREdMc1JPQ2lOT3FvUjUwaEVncWtpbTl4Y3V5ZmNDRUpMak1mRkV1QkJCcGs3bW1IRXVHbW9mWXBaOFdSRVRNNXkvOWRsM1VTdjdKWDVYNWdXLzNJTmkrYmRReW1jWWtNVkN1SGU3QzBUeU0wdTVPcmRFeC8zQjF4cHEzVXk1NTBoVGJsMHl3cnI5RmVDTllTUnlMemZxR2pBNUpmQmh3dENTMnpOWnltS2ZURHpQcktPRk5aREJTVXo0bWpYNlVIWE5Weit4UitKMEw2Q1hnVFpTYjBwcUNDL2RXd2IwUVIrSU4rSUJOV0I1TjBML3JLZzZTU3JJR21zalI3TEozU3N1cmsvUFlDSmo2U0ZjZ0RmYm1hRW1Ld2tITE9wRU5VQ2x3aVpNSzdsUXZYWTdsNmpnNWFNNVhoR0FwWWZ0ZWFkUHhVMW50cmtpQmdTS1ZaTUJqTjArdWpVUisvWVZ0YTlsUWdINktPMm9YaUREb241THhjNHIyMGZTWk1wVmExekJETlJpNTFmZm5GTEhidXBWLy94Y0hUZjlrRHhLd2o3VUM0OXRPUFdHSlB4NEtsRGdNdFduSGpsWm95L1JMVGVNWXp5L0IySnJUWDBOb1pTZDJoenFGQVlzZzFRV1dDcERoQVo0UXhXS1JxdUdLRVdlby9NUGduQnA3UmxIVm1ZOXBiU2dkNlBTR3o5Vml1dkc2K3dSYTVDUllCWEdBVWoxVHAyOHBrSTl1QXhmZmszTVVUYkx4TW9TSk4xeUI1dFZuUkZwVzd2TVU4OUFTTFU1SWJVaVVjczhNOE1sOGVaTG5QdE1qSTRSWW1ZWmlYN1duN0hmWGN6aDF1RnNrbTdZTmpjOFExcGRMTGtoSThjSVpzUnZTVUtEeFVvMHhieDdoOXBMRlVvSkFqY3dsQllpNFBxNmVYb2ZTOE5sS21LbkNqNk0wbktVaElBTks5MUVoUWdJNUppRVhtcUl4aDdvaENjWEIveGp1OTZESEdrV3JiRHd1US9WeG80L3hZb0JoVjc0U1ZaMUFhblZFTEJIYkc3ZEZoNDBGSGJ4Ym9BUS9wYU5sb0tSWHcydUVhQWhKYktFWlVNSzR0b240a2ZkMWpWTVlHYklEc0ZtS1ZhQ2VwM3IzZUlXdXhiMG1ncHJtUVZNT1c4WE51eUE4Qk5pbEhKTGNjTnZDcmtocGVSU2t1dDA1NWlIcmhUSkV3RXMxbndtRG84K054MG9FK21UQlBHaVJuUlJiazhqNHZJQTNUWGs0cXJ6QTg3M3BoMHR3bk5UUU5ha1k1bWhFVkVuSEdiT3FtZm9qRm9JSEZNdHA4eUxROE5US2N5MDNWRU42c1h5aFh1TTlsTExMSTNreklJRmpmU2N2UW5TeldqOS9yZFB4ZnY2Z3ptblFTalJJNCtxYnBieE53c1lSMFFTRFFZc3liMUp1ZUt5MEFEQVBkRG5MWWQxbzFWcDBrVGFGWFFBZ1RYd0YxMnlhdjBwRjNBTmQ0YVFCL21KNE9FWWdMQ1ZiZC9EM1paT285U050TkNBa3gydzFWTWJCL09PbllzRmJsWnlBNUtqZ3I0eUtITVhaS1VmOGttZjNBK1l4NGxERDh0OWxnYmh4bUFWZ2xvbFFkTzFPWldqTEJWYko3alRIVFVpY2hFYTc1SHlhWXRjNDJqQlZiWTNwSW41akxPMTBEWGoyUUJwRWJkK1dDVjNGVmtuTFVpSUVMZVFGV1hoQWJNMHVUL2srZGt6bS93REkra05xVlZPVDAyd3dUT0lURnhLTWNUMDA2em5WOEdlTTViNndaQnVwcldXQm9yQ0gwRU96eEdYN0dRczc4NDNJRm0ySjJ6amZOZVZoNkhKVk5vZmM5TTdCeTRMUXBncVdSUE92d2h5dkNob21lSmZYNU5PdURqVkJjVWRTQ3AzMFJVVU1oTjZUeTVWRmloYkEzU1V1ZzBmVDVkNnM2TVdLMjZyMVVYeHl0T0tUV2oxNDdxeU0yOVNmT21HNEtDWHlVdWdFMU5Hd0tJNEtib09mRVJHTm5TUnkyNDVEdS84Y2xTVTBvbG1vMjFhT3NLWjg3L1kvK2MxUDR4bnQ5TWVQSUpIZUFkTU1PblhkNnNST1FXZmpyZE9NaXRPVzdMdkxjK1hYNXA5VDVYQm9DQ1o5Zlp5aFZUcHUrbmZaakpNbHlrY0Nid2N6N1g3ZklpL2l3K044SVl6TjJvUXFvdFdXek5mWGNaclZYV0paRTlXT2Nqc0t2YW9ReFg1cDdZY0t4dGpVVDVXdnJ1K0pkenJYbVBYZWppcDhTd2svVDVnS0RkSDBNMlJ1YnZ5MHZDWFFLLzQ5WDI4US9KTHZobGwrQURzUFNzUWVXMHVXamNHUXFzZXd5TXBZbnVKQ2lsSkFtL2NySGN1c1JKa3Urak1DU3dxeUJHQk9aL1BBQmk4R0FlbEVUK1VpMG4vaXc0aTF2WWFrNzR5SDc1eVVGUWNXci85MGFVK0tiMWZyY3o4Z1pjRjFlUkhwaWRkdlAwTDlkNVowc25BVVdMZHcyckRqT2VEMHM4MGxrN1h6Rm5WeG42UEh1Y0lwcWphQTdSa2h3cXFMUTVYajRaWUxHYzRLWGZEU2w5WVdRRHZOb0pXWHcxS2VNUlZsbHJ5dWJSbUdqcHVHSm5ncU0zdGYvVHluczdoUVpkSkIwMlZmNUJibTRqMHVzUHVSZVp2azFwNDJsSGVHQ1RJUmxVWnBEV08xanBEb2lRRWtteDkxT2VXNCt4M2t5VjcweTVhTTE1Wmp1RS9FbmRyVnZnZmtML3cvbVBlU2JVQ3B0UnpuQWhRdFVVRWtYaG8xMjNNbmNyalA2OEk1aXF6STFqQkNmNWZjZ1diUVpISktKZnQ1Q01DQlpCbFNFZDc1SVl4bktGRG9HWW92a2tLZFlHQ0Jlc3VmNkQ5NlhJRXd2cTFlR3BjMVRWRTAvaWp4UDdTZUlWemhTSUdVcXUrbWFkb0pJd0FKMmFydEQzR2FEN0Y4aGY5YzVxOFljWVpER3g5aXBGMnJTRXE2WTltbVdYRlRsRm14cVAyT0xmbk5odkdjQVlJUDk5WTlwVVRjeUp5cTRvdU91akVtS2hZWHQ2SnE0WlFRRk9meWU4YWlTUUhIMDJPMkRJanVzQ2RTRG1uM1JWUVVFNndPeDJRaFdSK25ycW45d2NRUm1seXM2YUtBKy85cFQxU2l0QlRXVkROUmNRdEkxM1ZQUmNvZVYySWVYWFhSZkVmTjdFay9HT0VYblAyMVV3MjNNWEQ5ZmkyVDVydXl0UnloNGVRc1V4T051MVc0dkVydnJ0ckRZQXREVzhpRmxOMGxVZllTdU51dmk3RktscGVOR2tlTTBpOFprQTRITnhUVGlZRHFPTEFhaGhMYTh1MVk5STEyUCtmNjBYWWhpaVZBcFJwNDMvOWpRN0FlcWNBd1lHY0x5cFBMcGYyOXE2SjR1REVEOHI3V2JvTkgxOGtkVGZiemtDa3loK1I0U3VrajRvb3k2eUdLN0Ztckg3NXNzQlI4STNzeDFkZUpXUnQvT25jSmFmOHBpK3lBZXVFdXQwVUN6VXk2YWZQM2pmemUzbUJDMDIzdDA1NFI2NG54S1ZYTXVLd01UUTNld2RXUGdtRU9SWHFmRVNVWFZwcnJFK0pMOWZQdStSMlBFamtBL2ZEbDRSOGI2enpZc3h3ZU5nQThmd3JEaS80YTNCQis2UnFCWkFYM0MzMXJYWnQ2cExESjROODI1bkg3dUI2VUJQZHQ0TzhwbEhYanorN1liR2tJSHBaUjRRZi9FR3ZMVVBjVHR5TDYyUnJwdkRaTEpsZmllWXJMM25pTFZTOTFUWCs2bHZ0VHlaR2ZJN0gzaGtCNlBzaldNeEZhcGk2NXFxYzJMVW5DemN2WFJCOXhjZTV0em5qZGRhM0hXTHA4bEFyblpucWl3bUp4Y0VXSytqd3Ywc2VLcWRCWXpvZVcvYmMzOW9LQkwydXB3MTYveTNEUjRZak5Td2s5MkRQU1Yxcmo1Y0RMcjRRb1dlNG1OVXRIbW5WdXFwOC9JcE52RjVYbk5DSGFFZndHOEE3OXJnMlJNdnhpYXRzMDJ5Vi90S21hTEVIclhMcFc4WnFTUGU3S0tNQ01OUmFHSmVqS0lERG5jOWFkNWlmRDc2N0czTWRXQVBCVzhxb2lPd2d0NVRiUlVLQnhmMUhVcTFtekdLc0V1Mk1NNGV3WmI4MzZvRU5yaHozRnlRWEJvYzJxc0tveDhERDBweFdVZHh0RHk5QVV3dE1ETDBSWDRtdnVDVlMvV2NUQmJ6Y3Fxd1orMjlWV3ZmaGRvVXFXWUpSSVNGQ3RJSG9aV0RKczFrYTV5dnZBVUJiRE4wdVVySkdUdmlvVkJxbjFVWkxDSFBKa1l0RkxQVklIU1lxcDQ4OGo5RC9JU1pDUzRRM241VXpaYXk2S3NKNjIvZ3I1WDhIcHcwSkFYd3lsclZkVGVvM0ZQUmd0eWtnWlpucGIyNGlMSkRndkxhQ1BMYXhXdXBPeHVqT0htNnhQSlhiL1hvazRqeWZtL05aekErRXJwK3FXVjlFRmdkSWdOVFp1S0NqVUd6UGc1Q0pmVmtvbDZjSkRoU200QUhidlVkVmtkRmcxVm5WNUJ3TlRmY1NhZEJxZVBMZlVUcXRoOEpRRmtoWTZ5VDh0ekZoTU12eUJWRndsYmlXQTJ5V21mTjlCanhYTHBTRmQ4Szg2THdUR1Eyd3JUUW1jUDRzRGZncHM5ZHNRUXh5ekpPWVk3UmV0SW5VZjExM3NkcktpZlBMY2xSRGZvY3RKUVpPMGZBWm1JME5tVm1SQjJYT0ZKU1pFQzhETC9GbXR6SHhXdis1dWpIcDBlVlovbGpGZHBobkxEOWpDWUFzVjZINWQyeVhVd2hsNkE5QzhhRWZGaDJmTC9kKzEwQ2RCWUNBSVNTZlloc0FrdU5GaHJwZ3p2cktFK0ZDVlRyVldSVGR2akdoeGd5RnhuUllNbnc0S2pPUGJUTlhJQmZ5aGNoWFRVR0xqc0dtY1QyY3dVSHdjVGNyVkR2WElLeG5oRFVSUHU4S2cveXE1d2x4ZHBjODVBR2tRWHJqazREZHozYlpkZG1DY2NNckJvUm83c3ZybmpiS0h2UnNLM2REVDhtSTNDTEJsL3h2YzFWcU5BTFBhbEVNN2htWmJIRXdMUDNGMXpKbUh3WkpYdXdWKzdxdXNzSGkxcUxHNXZ4VGgwQ3R5ZEh1aU1HaThIcldOK05hWWplM0ZaVDhZUjFuQ0pXL1BQMkgwTGt2THZvZjdqeU1kUllxUFNOQmp1WG5GZkRvZWJlRFFlL2NkckdiY1ZXZHFFd20rQ3Z0NzUvME53eTRSMDhYZnhFUkNpMS80ckUrZExnZkgzM0lvOFlIQjVKMXJXVlhmdkV3TFhzUXJCMm5NTGllYkc1Kzd1Y3VyZkZoR1UrSGpOUW10UmF1ejZXYTMzbGptRVQ3aW01VXJFeGxtVkxuNUZJdE9TNmttcGJiZDBZN3hWUXFqNnhkRFNYN2dEVjkxMEV1cXY0Z1Z4L1k0cDNZY0lJTjFIdkNmbTJYY3hMeGVLTnZ0NDVBc0tWRjZSTFdIT3lnNyttbVVzalVtZUlweHFySGdOcG9QblZ2bGFIcHlWU2k4VGR2M1Y2KzQ1SmZjanJUanFDUC9DcnJBMXdkMXdBNVhFYlc5cElRVGt3SjJQMWlSdHJYTlFyMG5hUHZhM20yZTlNdGpXOHpmdHllMkUrbWRxOTV1VU1QOHJreGQ4SkNlRVVzVjRCak5mVFcwaFRrRG01OE5RV3duUm41U0lTcEErOGZMK2JWcWNYWm8yaEhQbEdPREpGQ2dYZGhFUXJRL0pZTkI2MS84NFdTYWo5djIyYjJXTzBvK1pwMU51eWpHbUZoUklxTzJteXJFdUdLUGZJOVpYRDJ5SVc1Q283WWVYYXZycnFaTXRvaERSMjNLME1QWFNLaGZaNnFMY1FqM25yUm15VUt2aWZIcTFWdSs0RnI1TllYTXdHMjhQc3ZVMEpyamxMNE11ZmQ2MUpQQXVEOU9WQjBza3lzSGpHeE1sZ0pmaUtPcjdBYWNEOVc1a1NrU0g1cGZJcjYvTVNXb2V0MFY1b0FGNG4yWjdrMWlHU3ZsalBKTHJPV2FiVWx5ckJKZmhkSXNtNmFUUlA3dWE1eEpKS1NScWdUSTQzaE9yN1BmanY0dElpWUU3VTlxSVA3bzNhK25KaEZyOHhEUXpkeSt0OVg1Z3J1MkdGYldnb0Y5Qk0zZG5hRTdQSFhjVVBwTGNpZU9NVStvT21GbExubHZ6Vzd2Q2Z5NTlvYVRCcTJMN2w2Y29RT29mUXA3ZCs2L1JYWmowUXpDaUFhb1ZlVnV6NUdVdWUzaG52U1Bhblozd2NhUVJCejdSdjJJMVRMVjRKeWVoWHlWSEZoMFM5YVF5My9XUHpFblp4dm1mM1BqNm9uTHJuRDVuL3lmdGpCZ24raXJBSVQxY1o1MTdweXFaRzVrNUpXMzMwaXJpMzlGYUN5TGdMZ2FBanVacGdsYU9CN0wvUitoN3pyWWt6OUZRSVRzRXY4d0s5TkswMm9IZlpiRTF1cmxwbEl3VSs3QmkrRkRaMmVnbWp3anNNZ05VQUlQVU9xeTFISGozTkovWWVybldDd3lkVGJjWFFQdWtBWTFMaXhUV3BaNmNzdVBMajR2ajNHU2p5c3VLNHQxRUlvQ3NjRUE5bjlzYkp6UXhlcSttR0tyT05LQ3UzcE9Ta2VUK2l4TTd2bUxjR0JaQTYyZVd0T0xRWVNpa3lpcVJKcXVJK3RrWEc3eHdPbVJIN0FzQzF3ZW00K3B6anFGaDd4bzZpK0hiWDlDN0xWa0kvQmJNby93M2ZnamtVbmJIaWVjOW9MNk9lSHVEbHhaQ1ZPTVpOYzdBOG1SeFVnLytjWGpMdkVzeTBtVEpmNnczeEhFUlRVL0EvdnN3a3ZCTlIyQ29XK09Va3h3eUtRZUV3RzFhMkRjWXVnU0VRck5hUFRMSjZSMmF3b1NBNkZmTjh3OTcwQVVBMTZxOGZkemVqaWZqYXlqeWx4TjFHTWZvcUNvVzBvK0tEaXpZRStnVUF4a2dEWVNvaktreThneUtUNVF2ZzlsYjNtS3I2V1p2b1ZhSTNxY1NlamhXWjAyVXF3UlJKNGVNZXY1KzR2dk9VQ1Bqb3NTM1pRTE50VW9EWjlrd2xuODJDMkdqTjJwSS8xblcwSXcrd2pLbytvUnRRSFFiZlhmTExCQURLcUFnbXZUL3ZRN1FtZmFLYWpyL3ppZ3NXV0NWSE1WS3kxMVcrVkdyNlUzM3IwNFBGSktaUVJxMUhjUW8yZk9uTndNdks4eW5kSVJBTFdyMDFPa0p6Y05ic1lVamlvcjlUbzAyV2d0aktKQWxsQzk3UHRaN0ZleTFoS0l4MnZNZmJ1ZU1zTDQ3N0NaVzVzSzFVUlc5a1J0VjEwL1FNTzY3SEJQWDJ6bXJxcEVjc1o1eGE4SE9WcXprblFYSlJ5ZHFMNXIycmYrS00raGlldVNCeHVObW9OZE5ocWV4TStOK25xOE9PL3pQVWFPd1RaNURXNDhyY2s2M1pEQkNUZ0dtcUJDSGsvelZKYVl2YVp1Ukd0czU0U0ZlU2Q5cEppRCtCQXUyVUpYOURESFlUTXBsTkxuVmQzVXZvU2JBN0xLVWRPUVU1OGV5WVF1N0ZsNkJwK1dkV0VvNUtjU2RNQU14Y24xbi9MUTdPc2lEdjRUZzU5OEdmVGx1Z3JtRUdsQVRoTEpteEFlcVFQVnl5ajVRVE12L1JkWXc4RWJTTW83WXhUYkYwamI5WEg1S2FZclVUNkNodFQ2dytpSG02dDNnS2NGQXM3czRIYmhVQXZjb3lxWk5jRGpDWDNsRmFHc3ZGeFFZY3N0eEFhaldLNjlzTzFIYXNRYnNXV3NMTmxWUEM2S0tUM2k5bU00T1ZRNVpwWFQ3SWdnSTlGakZwbENoNHZNUzJMUmcxV24vRFRsMFBIUVExeXFxSTZkSWVmR2x0TGhoeGVFRnFlM1RFV3FZSW9wdWJTVUdnMXZxOVljWngvSDBmMUE0aTZjcXBJUmZTYWxBSzE4bE1VQ2pickR2aC9lWFFVZ0hoa2dOZTc5SjA4c0lkTENsSElkOFhQalpEL1ZkcXdlRVByZDhvcWc3dGtkZElROVBMN3pMNlVKOUlIRDU4NHZHY2ZDWU1HSHZPekp1MW01NWYweDFCL01FVHFDdnNIQnMvTy9rRXhPQVgzRHBMMGhYQm80YW8yQVNuNURtbXlSQ3VWR01QUEFjZEx0SldwdTc5MkVlTjJqcTZPSlB5K0g1MVFKZjgxd0REcjBQQ1BTeG5sam5qNld5NTVNUGR3MWdLc1E1S0VUZXI4NzBzV0htY1BwSUVmYUJlNUgrdzhrbGZTUVFwYmZjRFVObDI0c295bmRZaVpZRUMwK1hTVmJvNExoK0FCelpzSGVSNXpuN3FRM2pEZlpGQkJxTjNwTDMreFlPV3AxZEN5QkgyUEh0MXNBMzZWSnVvTC9oa1lLRm5qaG5UdjBlY2lyK3hrK2pTelg2REtLVmNxT01ZN1VrZ3Y0NjVmNWcvT0RlOFlkT1djaW5qUVBJMkJMRk1DblJQNWxpVGRvUGxZODlueUh0Vi8wQnhjZS9OWEJ6dVB6M2UyRUs1TDJmNHh4a2ZsSmticzdjTHMzS2xicy9MbGRGYkxQeWVnM2NmRE01eWhKSHA5c052VVIxWVRaUjJLaFJFV042MElQdEQ0a3Jid3B1QXVTYkxwZlpJdEZmK25ndGRrNzRhR0F1Z2Z4eU9uK0dubWF1bXZnTCtNYXZCSXBmYllHUUJuTnlGV3lUV1E4dFU2ektTZ1F6cTViUDN3bXFvMmFkendabUxiMEFtSEMySHpycmwrZGFEbDFsNTlCSE5iSUNRRm8rQmVVQ1ZrYllOcTg0Y3diZGZUdktPTCs5YU4yMW5qYUUyekY4YXlqb0ZRVkd5YXh2RmJ1dUdRUXJnUGI0bUZPZGVsUjdON3FIQmRnUjV1MTJ1eHJ6TDJrUTdJdU1tT0pjL2U4Y29kdXoyWmJzMTBTQXVLSC9ad3pRdGR2eitvYkJ4b0tmbDgrTGtHcFJscmczL2tFTkpKcXZIMnF1eFo1TGtDMnE2aDBqZ2R5RE1NMktxQVV2dnQ0ZE45a09sTVFvRUdPV3d4MG1JOWtOL21mRCtwY0JORTJWUGM3ejI1Y2dMMGl1OENhUldTMkQycmppWm10eGlhc0d0bC9HbnQxK0cvNlNvcFhSRWExL0FUbVRVTVVGTEI0TGhKMTl5bFRJZFhCaHhacFdFVjdqVHRMSEk3Q003K0VUTUc0cXc1NUZOSlJuWHVyZzJOeFlWTDFteFVBUkpCMnpobHl4UWg2Q1RLZU9wdVkxWkVVUjFSKzl3TWRFWFowZjk1UU9QOXZkZDVkb1JFa3NKODJNTUdaSTFRWnNjRjhCSFBqYkFGVmRQcDhQZmFjRUM4aTYrcUZDa2dVS1pNWTJRenpvbU11MnlzVFJENmhmUXFTNzBtWDd1Z1BBUnNIRjc2UVczR0kveDhnUGcycFQvVk9UN1hXbjZEdlpMS21qK2k1OW0wam4wUjRBcGluTlp6ZEMzRnhvME9lTWJXNE1kRXdLY1pqYVRUaEVuOTFyRmpZVllnUk1OV3JUQ0dLTkNyWWkxNEZvcDJBbU55Wk1xT3lqM2ZnMGZEdStEa3B4STl4Q3BPdjlmUnRaUFRCeEN2WEJkZnp5S0wxY3IrOEc0eGNtOW9tYitBSnRLeDFXaXZacnVTNERWdU8rb0ZVaE1Xbklxank0RlhyNTJnV2ZIMFNWVytoK2JHNW5FQkJxRFc0V0tTVWVFWVladmtEb1FJM0I2ZEplYWlqampEUlBROWIxNzBTSGlYVzMwa1pLN0dja1JTa0h5KzB3WHpudkN5QmF1TFNzVzNOTGk5UnJYMUtoUFVLVXBuSEUxelBCbmNiNDJzN016VUxiZlpSMmtOSFRMM0R3cTNWT3J4andWUStsNnYzOHVjR2tOT09UNjZYaFdhNHFrblBoUnFNc1k2M1dNanJYMG9xOVdKV0Z5NVNlRk8yOWU0RjVsMkc4amkzVkwvak8vOWpXNEQ3QmtTK2tTa0p5RWRkaE9wZm1hNXpiZGtUSTlYZTRkYTRucGQvSlZQZXVPZTlsSHpjdnVFZFQ1cU5ISTZabmZSbURYK1MvbWFWV3BaYW5OR2lrRC9Wb0Z6dW1xRFJZcXhRMXRMYWxLVHZoa25vT1U0d1RLOThQNXc4bUZGOXNJekVTMjBMR2NuWVFSSDJsY0picHpISGtZeVRFUFo2dlFqTXloeUg0TmVhQU9Sem9kSkV5QkdNS0VUWnhXemFZYlR4TW9GSElCQ25sa3N5RmtnYmZJNjB0anRuZXRHc3NKQWlDRUFYL1pwd1ZGOFFnZjZNMzRjSHdLYTRFWUd4ZCtJazdRbWtRdXkxd3VkRXMyMW81QXBveGRwbVJVQ253RFl1OHBOaWZBMExvV0o5ek1FWVRzU0JBdDQzWVFtOGRPVkNzazc3cEFSN2pCeVZiVmFvS3NRZnlpbHIyS2hIRFNvaS9aRUlyRXlEMDllRml3eEVDYzFieEpNdnlHaXh1d2l4azQ3SGxTK3d6Zk5tQnA1UGVrUHNXWmltUXRzVVR1RGZHYy93eUt3ODYyMEg1L1c5SzZ6SFFtRU1xd0U4REMvejFpOENPcmZDM2tyMUFJTFh1eHM5bGZSa2piUDZMOGZNMEVpbk1uOWw3aHYwek1lNFBiVSttcFpocGdFU1ZRc2xxZmg2NTE1c2MwQkUwOFhxS0pQeTJYc2MyZW1FdENENzczcmw4SVhrWm1QcklsWThiZ0ZqeXNxMXZ2OUtGUUZ2a1VXUmdFc1NzNVBDdTBsRWZvR1lNTGNyU0h1MitCdE52cmQ2YmpSVm9uTURJWXpVTVhOT3RmYjdMRWMwWk5PWStVY0JCeVBjQllYMHZjaDlIV3RCMWdTYzNvQjNIYXY0OE5sY2Q2ZlpBa01YVjVhWnd1WWwweERLeElhL3ZzSzM5RS9OQzFydGVML0VselAyaDNpZTJ2alFsV1psUGJSZEVnLzl0VjdFNVB0OXlYOHVqaHNJTzJSam9MNUh4OFF6cE40cEdXczY4cUMwR1VoaElrQUx6QzlLN3JNa3I0enFYUDlCdG90Y1RzWDM2emtWNlNUbG1NQ3cxeThOYks5a1MwY0lYcjZEREVDU2RFMXBFOElqSG1McTFVUno1bGZ4WEVSejhzSzBzeGo4SURFMnBpUmR3MlFVWWhSS2JybEhMT29TM2ZMbVFhVkhsUFl4eDZQaUNaQTBjWDBKa3dCZWcxMGpiNFc1VW80ZzlpdERiVmpjZis3dWtKbW93ejM0Z1lrMEszbjB2YmI2amg1dHdtVWl0bWVlVElXM3N4RjZyYktqcTVrVVR6NVpESHB5dzZzM3dKcGtscmJCVkRPOTVmV0lWWWRiWVRtMEVuUGV1N1ZacmtiS05kKzVsTklhUStsaHZKd0xCdWdIMldCSjY1dld0bTBOM242cGZVUkt0T2s2OGlmSlZCT3Zod0ZxWGNIRjVid25HeC95bzBBSlIvMzMvYWFEY3NzMGdwWVRUazEyd0JLT2wzV2VVZDc2dFJ3UlJQRGx6KytJcjVzTm5BUm5DUnJXQmpLVEx1c1N0Ny9ITDZXNGtJNmxHaFJjSzFqTGtPUXlVR2U5VnhVeFlwVkdTWDlCTVkyUnIrTWUwR3JpTXFxVXlsbUxUTmViY1dVZ0lhWXJsQmpHa05vUkJYUmQyNk5MV1BiYTk4NlFYaHFyVmNreTRPcm1IcW9DTjgzMlhnSnYrb1JTakc3bHYreHA0aE1hU3AxL0loaUgreU5Cb3pQaW1wVHlUMGJwcW9Oc2wyMy9MU215bTZINDloMzlHM0wyeWFoUDduMGl2dDhpN096Qnhhd09jV2lmcVVmWVdjZG4zUkdNV1kweWsvcmNBdFhQUWZYMEVlbHk1bitrNEFkMnBiWGFESldubENTQkZwaXIxVUt4V2RhbVlsdjQxR3RTZUF0Qk8rdGRmSzFNOUtpWHFEWVorVnVYU3RSaG1QeDV0dU4wQTZDYllkQlhyM2puL3ZXbUVWT1VPTitzU1hJVWVoMXZiWUwzWlQwNlZiQ2drdGQ0K1ZMMkZFV1g4RnhoZkVzZmpKRjk4enhhNW9GaEc3RUF5OWF1ZDJabEU0bU5vc1c4UlIycjhHam9ZVnFxdnZIOUxBeWJwQndodEJDRXRrTDFKd2o0SzRwbEo4bkhHcm12MzVXZVRRTU4rNXJsYTVvNGtBRVpDeXRoL2NBaThWMlk5WTJKWWpVVTNnbXV5bUdlcUFnUk4wbzJDMDFCME9YeDlRUm5lSk8wNG1VM2x0TDU5aFIwTzB6aHhxeUgrNkhnb3picXhwZGtZRFAyUXFtVGNncXNWQ0FsSXI2K0w3THZ5MEVkdW1hdDR3L045YmQzTi8wOVNyY1hMajVjWEpOMFRrT2JpVXp3QzJwYkZORFc2aVJSVnFkRndmb2xVWi9OdGo1NWR2Mld6VXlOQ2RqQTQ4M0NNdEtzMFNFNnZ4MndIRU9LZnVRNmt2aEFBU1E5S0ZqcTBnTHc3WCtkV0tGUXhmUlIvcnlSQnhpUmJrRzVndGNuUnpnRFF0bDBkb1JGOHFObzVHS3FXMnZhcFFMWmRkaGZxUHFEQkFUSlJwejVINnRvbHNzVEpuM0gvUHUxWEdIY1JQZEVuSUpZK2c2VjN2SmZKb0VkYW8zWWp2b0t4MUptWGNJWm9FZCtEM2dqUTJGTDN5VjgxeXIwQzA1Mms4ZGtNT1ZaOVF1RXI4Y1lNSm5YSmZCSDhpUmVYZFphRlhzRERVVmdsUkNYRk15bTVWVkRMQjZTOUdIMDRlTHhsOExqeFpkZkdNSjkyZy9KM0Raa1p6akRaS3ROK0lRUk4ycW1TcllLdlV0MDQ4L3RmU3NqR2ZYZ3N3OExjUXhqSzNjSHBsUExHT0xpTXJxRTQ5b0xJMTU4b29rWG0vVWh3c1VqaUZWQVNVRG9PUkpnWnUwc25lYXU5Z2I3bWJteFA5bE9LaVp2RkxFSVV2bjNraW5YbjJrOUxIVmdqNnBiRnlLYm1CbWZLRkViZlhUMDBRcG9YbzYxcHJEcUkrVEFuYVIzQjc1YnU5S3c4cyt6RDg3Q0JsY0Y3Nk90WXBvMU5mNWR3UzNXMlAxQyswdGlwaENnU0dwaWFSTVFZenk3OUpYL1k5SnY4bkhCNEt1SEs3MHN3MThNL00rVE5UQlhKbUNGL012ZlBIN05jS0hKSU5ER2krZ1cwSnMzOGc3TEJDSW1QUEpJTnFlMkVpak5IN2VsV05FZFRjMVIwanFVQVV4Tm5GakhDQ2hrTVFPalNtRGZJNWZieVpWcjlPeW1CeHp0RTlmazVBL1lSZ0VMaHhEa3E2WU56aVlLVnEvY1dSaGUyd2ZKY25HZjdQeEVMOXJyVkhiRXhBMnhjTmx1RDJheElqbng4TWR6c0poeUZTbXBtdDA4SGJZV2tTa0hWaWxiY0hqa3VQNnZLUlY4VDJJTG1iRVQ5KzdrZ3ltMUV0Q1B4T1ZSNWt4dmlJcHJJaTAxYlZLRStBSVU2dkFpKzcvbVZWOGhZWC8wRWdLdjQ3RWJzVHFBT0w1M3I3S2xoWlBLMzBlNndBLzFmOFowVlFDODJlWExnczVRdlJxMWRNMHJyS3lIczdiVGw0QmV2UkY3OURyMVBhUjI2dURxelk4Z0xBaGZjcUY5VHliek8wV2NSbHg2d01qY0MxekFld0MyZHliRHpWN1E4SE1DV3g1Y3l4MEdBWXEyWVM4Z3ZPRFdaajFrWkZPdGxNT1VGMXA4UWVqcERaUjFHL2pHNXB5cHltNXpoaDhYWDRKbjlEK0dKaUhWMk1sWUJNL1Z3Q0NoZGpVQ1g0a0NtNS9TeWpFWHJyRFVPWnVEMGo2eVNEb0ZUa1FscG1KNXpOL0lQQkFCekZseXJMWmxpdG5WQTJNd2NzaVUyVzNzOHRPb3hTZ1grcjdGL0srbXEvalgzMndwbTE1eFlEeXpyUG9wTWx2QXVJWk1hbk1QTlUwWFhmamRrUjlYeDVsUkFJWDF3eVpzTno4bGpEVm1YUExOeEJUaU9hMXB2MWJiSXl6OXB6c3QyVnB1cjY1NHZ3MCtRSVFxRDFPWjdjSWpmdVBON3ZSd3MvN3hXcUVNMmVibE9sNGVHK2Jnci9nVTE1NVJrdUgzNjZpdE5Zd0laV2QrYVhzR2VXamszRng3U0IyWXROa09NbjBMNGNtNkVGTFlDQUVEWm5SSFFCdWhxUGxKdXh1cXI5UkYydERRTjg1NGpEMERvdWN0MTlCSVMzWi9lc2pOWE9mY0d0MzhkaGNjcU1Ccmt5WDZNbmJiS1RzdDhYajhjbTQ5OTRnSzNzOU1HVWErNlk4VzhzSWRkOVk2MVRXTklXbTNIZFM3dmEwTG1TZWFLRDFMNGMxZWJGNklzVzZlSHVNekdEM2diYW41Um9NaCtkSHZ1bVpySFdCeVVuVXdNTmZPV0pOaGk1bnJHclpFalEvSjFReFZoUTNsdE9DME9rTm1tZnN4d3lidXRRdjVlMTBMa2poN1RTZEw3TlJBZ0VqSWJOV2xaYklIVk5CTk4wSzlEOVpnbzc5T21HMzlOUlQ4NVhpSCt5eGlCOWcwcHBlVkRIblVtVFV6WEk0SjU2L3BIN0VqWW1jUGJzNmxqTmVHQ3crc3JTRWgrWER6RHhIb3dRUUtncjFVeWlnaGhWYitqWHZCMGlDNDJPalJDOEJpRzdSdE9CZWp2RjFUWDJEaE93RktLWDFZMy9iZ3JiVWpaeXBBeFcvRFBuRmNGODdWMzB4TlgxbkREWjc4VlRrOTFQTFIzMnM3TU50dVY2YWl3U05WYTdqWDNxNlgyNnFpejhBbUlteVVJK0xMeURod0JlS3IvelYzMUROb3FEVDMxaVllV05WOWVmMDUvcHNOK2xiUEpZd1FjWlRxWHFueG5Nd3didjN4Z0tZVnJJcGdkRlY2MVVhZ2psWjJicjFtMFpKOWpFaW9paDhHZkovRDBjZFRqd1ZhVmhmUnhVMnkxK2duMmZPajNMQmVUdGw4SXpldnpWRGdGNUNJeGdidThVWlREa3VDdjk2aVZQUzdRNm10NysycWo5ekhzOE5YR2plVXZlS25KWHg2VEd1VjVycmM3SEdOZ2dGYVVDNUFUT3NrOU5xaE1zMzNiU2xTWE9YOWRDMm1ZRlRCMkkxQnJRYk5mUityQzM0cDVQSjZjc204RVZCcmptMThUTkpvbmw3aEVGdUhnM2JDMG1XZlRIZmlwaTh5aWJiajdIdEdaR01ZVmpFWlJQazNOZkc0S2R1ZDlEalIxRjRlUWsxL0NFci9oU0tTcyt4TE13SndVZGRKRjI3d1p1cnBvcmpkQmpvaUxBTzl5NzVZdWxZSFIvNU5mb2REV01RVnNPeUwrZU5JNUtvYys1dFMvUDlWcEpLbStpMm5saVg2NEpYQWVrM0thanM2R2hKdmdpdENNaHc5cmw5NVNjU2g4WDJ2cXZPMWlwUmx3RlgyM2laUTRnZjY0ZGEvQnY2NTI2MmVNdVU1MmVHMnQvdXlsREFKd3RzN2pCWHUxWjhCb0w1SHlTNHgyQlBMNHptSDJpelBuWTMwQ3RSbi9BSFY4alJScFAwbXBKdkJvNmg3Uy9sWWJoZDBESGh3a09wQVVmUFlFOWlPK1lra1R6Tk5UZGVYQ1Y4TW9Zdmc1bkpIQnNPS0tiVFJucDVnUk5DeGp0YXQ0UGRvcHlUeDJwbDdCU0V0d0pkWXUzUlFjc0p2L2phUngySEEzKzBCbDJxK1lKSkkyRlVwWU9kcFNHNExYalpsejUzSkh3WVJVUHhFY3hFdmRNaUh0THBuYyt2VFFIek5pdkFNNWhlSS9ueE9MejZJTWcxUVU3d3Riajk3U1M3QWZxdmlKL2MvZEpMRmVPa2tFQ1BLZmdZWWFmelhtTHQwdXBlVGVwZUVsNkFXcDAvOHlidXFXVXdUVlV4bHNaNGZ1Ym94MjJpOS9KbXhMQndEa1ZlVE9wOThNdG9sbm1HMXhYNjE0UFRZYTRtVlozbEZ3bWRaeDU1MjNJeXZmdldiQlFjbzR4NVIvVmozcHpGeDMrcGJHWEl3MmsrUC9jYk5qNTg5VjI4am9ISlVxZ2hyemYxbUQvVmtuTFBNSGFnbzM2TXZldXlzdFUzMkIzZGkwcFRGTEYzK2Z6V1FvQ3gycFFsbWVSSmVNSy9aalVCOEFHQnFYOEcrRWt3MnM4dFQxUFNSVWoybVJnYnd4QUNNc0Fkd2JHTjRyWVVqMTNXVDlmdEgxbkhxT2NUTitZTHZibVZaSTZhTUhtNWVyQjNpMXpISDU4ZDRPLzZhaU9sUFUvVGRaVSswc0I4K3E5d1lZTm5nRThwQW9xYXhmZ3B4TUxJZWovY1QyODFqbzlXMlcrd25LT1N6Mkhsa205TTFoR1Nyck81MXo2TnJnNHYrank5b0UxeDZLWURuU3RmeWZnUXo1cFdud1I1bDdIRlM0Y3VaSkplLzBMVklnNFVkdGt2dEtuUmhsaWVVYmw4eGVYRlJwWmlQK0RNK3NrNFFmem9oaVJ2RVhqS1VwQzVjVCtPV2tRYmlQbVk4UkkxV3RHaDdJYjFTRWsxNk5SOTdVU0tSQ21sd1JHcUdWazRFWFVXMVRmWkl2VkVacG5EZUdYUm1YQVp3Y2p2OTdzaU9QNHlvMnd6bTZGdXhpb3pZRGV5NTdPT0pvK0xQOTdzenpyaTlaK3ZibnhENEczbWpDNEdwcWVET1d5WXJDd0NVVzhod2M3RDAwOStqNXYyR3BQR244UytoUjZqL2ROK1h3SzBKR1hJMmtlcmdEdzJBSU9STURBOXpCTVRtbFQrd1oxVWNLZFNsR0l6anJiY3dFZEI3eDQ2QkdPbUg5ejJOKyttL1hka2JHV2hVS2xFUUgwa1R4OEpKei9hNWpBMjlZZjJwS0l5a09EVVBEekUrRUViTkdkNitLTndsM3B5cTVjWFRhZTR1cHc5Q1ljMzNCckVjVSs0YUVrczVWdEowbEJCQTcrZTVEMzdHeHdoVkR6UnliaXpwYW5wVWIyeDdLQ3A1SnhESnZzSjZ5RGdlT2Q5dzlVVHY3WnJ2Sm9GdTBOMlA3VUhvZlRBb2NCNVJaSnU0MXA2NzUrSWl6S3ZoeDdVMStaUHZ2dmtJS3ZFVjBGa3JzQ3RLZnJpa0ZkZzdYK3JKYWlFN2I3ZXBpb1JneGZtY3lDcktnNytRckxJdFRyckRvMlM3bUpKRVZUdGVsSkVQWUJyUmVCVytSdlRmWEF2WGVUWmlwY3NuNjJTUlJITStrTXN3MWhFbktVdkNyZ0tRSWN6VU9qYzI3UGZMc1R4amNVTTVFS2NzYzRkYnZpSWM5dnMrWUk1V00yN1hIa0ZZODZXYWluR1BCcGJrMjlnaEdlKy9vRlNGNk1FWTVXTXlFemtGMWJSb1RyTFBHcFpyc3EwZkI1MDlEeGMveFA4QkpVSDZkZXROOTVhQVFjSXh3RW9aTmRyRmNTV1ZmSWk1R0dTU245RHR2V3ozVlZGaVVBUFZYMU1TcnNpUXBMK3lpWWtFZlRFMDFNYk9Hb3RSVUhuYUxhQzZxdnAxTXBtNzhMalJmTmQyN1ZreFY5cVIxdkdTSGZ2RFNUVE5QVEhOb2p5Z09ZOVdUUUJIbEZ6ZUxWZEIwZ3B3THMwU0dyMEU1Wm1zbWZqMHVxR1U1T0xLMDYyT2JSR1I5anFzY0Rjd2x2TEVRVFE5a0tBOFJuSU5Ocm9RRkQxbS9Da3FoZWo5cXc1T0lkOUY5QVlzamRYWXdPWTJQV0trYS85OWk5YUJQVlZZdHM2aUxzajhkUWVSUDVxY3BXRmF4WFN2ZDJBRGtyMFVHRkxzTzBJaTltaytkQ2ozdExoRWJ2WTNqelM4emsrL1ppSjVha3IwTlFsVTB5UFprdUFlOXZtYUlTRkd2VmhyTU5mdFIyUnAzK3VEQkdqZHVDMXE3OGJXMGU5VWZ4aUk4TVRwWWdlbnBIdFJsOXBFTEg2WnFwM0xDQmg2Q29hcmlpbHJSblNuY1Fld1QzbFgwa2l4QzJlNDN3dlV5YVA0c0hqV2VHS0NTekxKNlgveEduOTIwT294MTh5RTY1NERTRDl1TFVoQUltaU9CZVNxaWpKQXhBZ0I2UXRZRndqVGxCV1hVUG9xbXVyNjd6aEdKZm1Pb3pyWC9YVnpvaXBtZHRFQzlPMXVRRGdFRFFnZ0VPNkppanhXWXI2NHpyV05yV1VGUHBVeXVIRThKSFpMS2JBL0h5VGdaOU0xdG9zS3BQczRndjhpeDgxT2RUV2hCRGRiWUZFbnREd0pGZnNxbUtDU3lnd2JpSDNEdlVlYm9WOW16dTh4WDdQa3ZOb1psTEJWWlRLcnR0bVUzQjF1aVE5V3VuMnMrUU1lRDV6TkdMVmRQZDV6RGVUSjVEekZabkQ5Q0ozVXpiRklSMDg4Y2d4OEF3b0FMdTh2UHRMRmNaOE5WNk41WktLRFlKaEhHMlV4ODQyK203VzZnTWp0QzludXBsODRHTnZueVlHWVNzdG1YNkduSGJyNVRjakx0N2swaVRSeUJRRWwyNkRhdzY2TmZVYTFxbmJqVVdUNkthRUkyUzlrcG52dVBDLzBpYUxqWTJqY1NyQTF1RjU1WjFaTWpyRE80dHBMdjh2VHo2WHRlWmpSUzlLbXhKMjdpdEFMOGZOb0dSdmI0N0FjdnByV0Z5MllkTnNPdVl3eUU5V25hSHJ4Q3NvVlFoUGFCY1pCcHpiL2dpdSs3UUdBcy9BdUkvTFVpY2Z1cjFkRFVlUFBTdHJTb09ybFVFcXRqM1c4QnZaZDNBZ29iTTl3d1ZTY3BXRCt2UFdZaFgrMTFLYjhtYTRZQ3BOMjVJc2Y0a3hoaVZMYVNqTVlQYjlxRHgvczFZbU9JMjJNc0tlVlo2T2N0cTd4TFdwWmoweDhsK2V3MFRPeHd2bml2czk3L0VBR1VKTmZRUytFVFU2a05VMkwzVURwZENDT0JCWGdnMkZyL2t6TUZ6TytBbmw5L1VGUkRzb3Jyc3hxS0JQUWR0WGVZNUpCbnlMaWFBekVKTUpiVTZGd0dJR0ZuUkVtRFAxZVgyand4dTdQS0pJbXBRMWF1ZFFCTnVPNXhkYlhuK0xDV3ExSXV4Ui8rc05rRXJFTEE3ajkvQ0pYZVE4ZEljRVVPL1ZVTC9TOGdYeDdnS0pwQlRnZVFTcW8waGJxM01Wc1cxVFhrRzFiWC9wRjk3d3B6SjBrUytibUhKYWlRcDZyQzg2S0Npa2RtdWlPRDdGU1l1NUdPS0p1YmY4VXltNEpMK0QrY0FJRjduWk81OG5hQ0VUL1hqdk5PRkdWdk9VUjZaZlVvbjlaUzczdDVPRFlsVGRNRnRkWkVDNmd6UlJkRTc4UTZXWGFCQktNOTFoOEx6blU2S0tnWk9hc2tuR1NFc0F2ZjFpUy9YMGcxZ1dOcndPMm1tRTJnRkN0cHAvVnZxYm1WdTFzdVhSR1UwUXhKN3p5WlZtQ1cyNnIxY01XeFk3SXJISzlUZVl2WTg5ek1iY1hUVzNVbEFtajlkRTBPVytuMDhvMklPdTlKNmYzYXFIdlBzRHpSSmhIekdPWFdUS0RZOWpwS3pOVDd4aHhDODdoU2I3MnNJT2s0bGVERTIyY0lUQUlMMGlMMnhDUENaRlgzbitCSEwrZHoxWnhkekF0N1Jkby9Ea2JnaUxiVnM4WnhiczlTdEpReUIxUG45ZHA4aE9rVGxXeG02cTlGUHZmSkthTk9zbHVFSGdTbjZLcnhEbnNsUmVyRmNkWFRzQmdwSFpUTjJ3anBIbzAzNk1wRVFkbUQ4N3drc1B4dVBqN3VKR1VKM1N0WVNOUk1FdERpOElITkp4aVRucGlSb0Z1Slh5d2c2WW1Ga2VsMTNIOGcvVTFBS2VGYTBoV3hPUFhhWi85WTBBN3JhaUdSWTd2dXFlaWhVTkZmbDB2OCsxODBtLzdvS09uM2VSZm1kdVlwVnlpL3FkUkJKZzI4Y2RpWlBrZFMyQmRtRUl4QWtGWUdWdVlpUUJhcDl5c2ZjZ3JsbUFrRTVHVzg5VDJ0d0hzM3ZVdjljNW8vMHk5NTJCZnlDa2hKeERLeSt6Z01wMjN6UHkrUE1yamlFZ2U4UTFGcmtBbm1naEUraFJ2UDRZSm1XbjRqdCt3MUdicklWQzNFYUxHaHhZOVVVWEh5elplUC9QTkdzYzV0WHBhelpSaVdWM0NoV0hxVEp3akU2bmxBYXkzTkRSRG5PcWQ5Z2RVRWtiQWcwREtoTWVMS21BSWhWM3A3M3F2S2pxWGlUdFVBZFpBVEpEOHNNeDJuN0xNTGY2WFc3VVl4WXA4ZEJPMG9BYXM5d1NJVW5SMEJnWmp3bWVxa1dhQ0I0Z2FYRkxCZEwvbGo1Wk0yQ3dja29xRUo4c1RwRlVTVkEyVm9rYklMeE1tMFVxc0lpUzNKNmEzWEM1OHdSajVnZWF3bS9Ka3Q0UTl6T2ViSlRMdmFsYjJJNFY0NUhxbVZnK2txMVhGTjltMEl5TFk1eVV1NG1TbjBhUlFXKzZ3YTJ5eCtacjVpN1VhMG9UNXZRR0NsODQrcXFHamFCZW5ZMUhTNi9ROGtGWmdjMEJ6NUhzVkVjM1ZHRm4wVDM3ZHBOWFNmaFg0MjkxRDhnZ2NxWkdDaEJkYURCZW94cDBqTFE2bHB4ZVpJY1psaXF6VmJZc0NVaDEzMGdmL09EblJsYnJDbFZKb1FNeklqcVA3SnliQXVQV091QU1KNXVpVmM2ektDdHk4WGZVbW5DMklNUkJsM3p0Rjg2cGRGWm02SGF4QzRNMjFrVXR2NDVNRHA3TFhMOXZHMkZlZ0VGUGtzSXJ2SjJ3dVJxTG1BVFYxTWdlOFdEY0NrRS85Wjl2L2Fna3prSzJBMGtLRHN3bFhqUDdUbWJwUndHS0lGY0o3MFVEMm0reTgwQXJiY1Nyd0NjaHJjeDVXcUFSTUU2UGJvS0pmSXBhOUdjaE9kWWJMbVp6MGdUZHVQbUFKemYxYVJsdUVRU3RzemFyQU0rdTN1Z1duQW1zVWtkdnZVY2dHZWNXZ3JqNUE0T3Q5bFl1Ymp2M2pFc0RBTi9Qb3lvc1V6cm9xYitPT3UyWlF6YzlvRHMvZVlDdGF1aldjZFV4SzU0L3JBQmd3cExBTnZmOG52bzFTUTRUZGhnZ3BvYUJMUE96WENaREl0c2cxSkQwWmR1cjdzRFJmeWJKdkVGWlFUa1ZsK0t3SWZtMk5wOHJMOEdMM2t6ekw0KzdENjBZUVYyZ2c5Y0sydklDaGQxRzMrSDB2TXZpRUZBbDc2b0pzd0FkektzbzFmWTNWV3JScEM4STF1djNBUjRjQWhMZUUxcUYwTEszUXpWOE95RFlBK0ZjMHRKTHRIdFFmb25NMHFnYzJ0UzN2aCtIb0w1TXpwSVRiMGVuSlhKdS9rMkhxaGZJbzlKOWQvak95MHcwWUFRTUtYQ3FRNGNscnhEWlFuRi9sMWlzZkhTT3F2VjRCc1JVTGpmZElxUElONFJPZTZZT2JYekdiSTZEUzZVbmVSM0s5c09xSHJaM21VVCtTUWhFN1o3UFBYbUNkemY4d0pDMUhZY0YwUlY0T1JJUThSODFDSjIyRm1Oc25WdkVpQjBDSVEycEVaeVZnZ25BaC9VOWZEaTNRTXZqSmJLbzZqT0QxTnI3NVZsREViK1RkRVdNdUlhNElydUt0V2ZZV05ka25McS9zVFZQSjgyOWNVcXlvNjNBWDhESkdEdFZmNjNKL3hsZHFXZ0dmRnNKd1F0NDJFWTQwdkhqd3JIdHlrajZFc1RzVkkzWGREVkhnSDlFRXJQa0VmakszMnNsZ1dETXV1dnR0OGhDWHYyUDBLczhqdnFHbGNJUTlwOVlnYU5CdzlmQXYydkkrNFBwTmRVZkgyTm9YdDhTaUozazBnb0IwQ3QyelNsSldnZkEvcjJJa1JXdWFlQlJXWnljaGVvemJpckdFQllFZGYvODVxbE1tMG45S3hYY1hqaVpWM1RpZmo0VkFRdjBXc3kvTkpKUzloeGZ6bmJHVFVCenB2c0s2QmlYRUR0Tmdsc2c3Z0ZwcTNObCtRVlZheVdjVG04Qm9xMWtUcGdmS0MyWHhRUDBIaTdlNkp6Z2d1WE1KaS9LajB6QXU5OFlVQW5mNXhTd0Z4Y1d0OUc0bnE2YjFUZE01UVNGc1pneVVJaEtlR3ZXTCtQVFFjYXlNcllFZ1VCWXFtdEp5a0pIc1ZUNWN4b3BIMk9kSEMraE9pY2pvYXJBYkxXckhyWXF3emhuNHpEMlo1TDlzdWZxblhoKzJtZUd4RmlGSkE4ZFkzN2NlSS81dnlMMWNwSHRhWTdzZzZPb3d4MTFNVWcvM3NBdDFPR05WMzhYbHdSWlR5Uk9YcURxZC9TK0NHN1Bqdnd5VnRsRGNZUzYxT29MdGJEUjJZWkpjZXZtanNzVFNLcDErclhUbE5XRWJWZHRvblorYStqOVlnVWxLMTgvWmh5dWZxb2U1Qk9QZnM4d3J2bnN0QWpoNmx4QkpYMUc4a09lM2RNcjVZdmNORC9EYkpWVXVzYk9JM1FsK3RibGdnL2RHNmdYdjROSEV1L0h1MUJoREpYUWNWV2RoYjlpNzNFMzhQcjNCVHdsYXJVbzBOaGhZWTJsVjl6WEFsSGVGRGtBOFZuMkhHNGZCSk9lQ2NZNDExVzJnSUFYTlFnbHBUNnEvZ0Q4akVlVndicTRTWVZEaGpKUTR1azJVeW1vUHBNUmg4L1cwRzhqaWxiaHhoN1h6L1dmVnoxU3Mycm5sWWdkcVpwTFJ5Q0Z1UVQ3eXhod1kvR0JhQWZjR3h4Y1MzVlRuZWJBcENJVFIvM2NTNnIxS0Y2VUhXdU92NEZIbHYwNks1eFl6U2xSU2hxN3l5KzhGYU0wMHBGWFhCbUxQU05RTTNvVmNLQjBYVEl4cmdkM3BSYU5yM2xkUStqVUVaYzE1dFozV2srajduOFRXV0pRK0VNaE9WNHppSmxyK1Vhc1AvZUV6amt6RThqTVl0bW04dWV1b0ZLNDZKYk5wd1VuVXVqaEhwSEgwd1VkeERCdEhwYTVOUTNJODh5cDJNc0pmUjI5UFR0ME9YdG1zUE5mUE1XYUJXV0V6ZjlpNjJqTmNRRkQ1RUttRitORURmM256bmlTT2dtZTFZOXlVN0tQVnFOTmpxQmg1VlNhdG8wdnY0MVY4TSt6ZE5kaERKcjJsdjVSMGJwNkhnSElwaDR4UWhjcm1FekREZWsxTWVST1hDOEY4bGQ1TFNSb0dtVW5RdG9scEtMMmtoc3dERDY3SzMvRzJ4WWIrTklaWVd5YWhrd1JGVXQwYnFJZ1pIbFcyNXFsOVVxMDg0Mk9JRVNGWFJvNkQxcjBlRkQvY21ZNi9MVlQ0UUxpVFJQYi9NRjIxaVJiVldHM3pTNmpXclhQMjllV0h6OHVERXRPRGNvd1ovdmJ4ZUUxdHlqVEZ5MUYzRlMrWXhSRk9aREhMZEVNajBuNGNSOENLUWdsMFVGaVV2YXdJTWUrbW94UCt5VXpnZUdMNGNjYUVhQVpHRnV2dHk2L0V4bEhacXV1ZFJLUzF1K1BHZWhqSXFZWTcrMllscVdYcTRTME9YczJhTXIzWDlqQ2Z0SUl0Q3p2ZEtrVHBWZk9GeWV5RC9VOHp0Sm5xcGFlS0Nzd3QwbWdwNWp2b294dll1a3J2dWozcStMbEtnT2FQY3RMM1dMYzB1U1l2cC80bElCQXNWbEhlWC82WjBuamlCT1NXRUR2WmM4cWVPS3pOa2d4V2c3bXhvWEpINmN2NS9VMjhBUWZtZFFjayt1MUJkTGZJSkN1TVJBcHZlODNGUHhGSWdmZEJmVVdMU0VWRDkrMmdvcmFjWllLS1NRWHJvY3gzNG1rWXhNMWFob0lPWEN1b1ZZck9tYnFGYkJ4R05relFQc1BHblBmTk0zMFJPQytXSk9zemM5cWsvR0NzY3FYUGIrSE1iR29WRERaMmdLTDNNcFIzZnQ1MTFNeFR2dWUyczVzU3lmWDk2VGRWUHFQOHA0VkdRV1FjOFdDWjYrNFlMWUdGdVJ3QmRYQStzS2g3dlZ4RWNzVU1UM2FXNS8wMXM4d3QrZXl4cFB0a0RFSTJITnNXemRCOGc5bGIrOWNTNHZpbGRIQ2JiSkhheVJmVm9QMTMxV3JOVDNnZkJ1U0lKaFFJU0h0VGVWeldrbDlLT0hEYjBXRUJHYU1veFFnWEJTYTZtaFhHYnhxcHFFSDlYOUJQbUlMTk04YmRqUTNoczdvYm1PTmdrVVEwT1dsUWc4U0lJMXFlTjJ1K24vamJwQ2dEV2JFYTVJbEZES1dmTGZZL1hIRVloME5Dc2owcFRidi9HRTlJN2xsMjFTL01LN0xoa0g5UGJlRlBJZTVrempFeGtodnhhaGNYRjFFRWhCbzhlU0N4c0tNQ3pvWHg5MzFCb1pPNW9HOU84T293TVJoTzZ0ZXM4ZjFpVDRiYzF2NGF0UUF5SXRGVFNYYkJiY0l4OGhQODVPVitLZGpONXBLUlJBZTlRcW9kcG82WDdhRSt0WEM5V1hTMll0SzZoLzdDSE9TQjJxOUVLeStwVHBBdlJ1Lyt5dHJOeEdvQ001Y2ZXaEhwVnRDWnQ1ZUNKSkJRMFRrdWkzeVl2ZGF1L1ovS09VWXpSTWhlWVZ1UFNPc2l3MWl5VERDRUgrWWplTW5udlFmRFUveU11QnlsN3VLNXp6K0xrV1JYMDdvZUR3dmFwMDFCNUFMZW1Jei9TNm1RSzFIY2pJc2lURERybTRqOWlKQzZPa2tGbHVGcGduRDIveDIzSFhVMGNHbE9pNk0xaHBMK1JDSmtxeVVpclcrT3hLVENyTUpjM3gvRERoZ3hXaFBoRzFpNjd0NWo3Uy81akprcWUzbVNyNVBJMGZBYnJvQkJTWk1Ca1BWN3VCendCazBBZy92WDJOWTNmcDJrVDJkMHIyRGFYREZia2pTMTVBak1JaXhaRkppT0prVGlZdU1Qbno1d2FRd0d3N2xwKzl1OUZDUFlMdU4xNTdoRnlvbi9JOUZZeFhUVTVrZnNKajVIbHdDbEtpOUUyMjBhVDNKbUNYQkxKQXM0dEFvNzFVOGpST05Ma1JBTDFKS1czcm5rVGVOOVJ6anRSdHdDd25wd29UeTRsZHZNbTlOM0RBNHhlNS9ZdUFQTmZoaHl1akhYdVFVOG94dTVoVkJHZUdNZXA3b3V5d2VkRDhqWk44R1lqYnJHK2dROW0zZVZXTHZXdktoNEJuMXZ1RnVxVDRIWlpaS0VGeVF2U1F6NmlmS1FhNmFmd2ZxUXlIKzFOZDhCajRveU0xSGJsanRPbEhQdmIyOWMxYjZ5MkNUOVJsaE9IdlRqK1ZpSXJVN0FlWHBzSWdqR1ZKT2JrY09BYWNWQktoMnpWTkVYTkRzL2ZCbVZsUEwwL1RLeGNUcXZySS82S3FCYUQ3dGp3bkdud2FuUU5wY1UxQ1JjbTZWelF4NHRvSSswNjVHL0Z6WXA4YXpUSE9GK01VUGVqcVp0YUwyekd6ODNDcHQ3S3Nuc1FENUFHa05LcXRMa2RxcFZWM2xhM2Q5VzBGU2JObVpqYW9RK0NzNHpLRWhDcHI5czVEWGhkZW9na0RER1ZsT1RiUjhkTkN0YUpieHhTMUtyaGxIdUFOcXhUTUtqV3NUTmowRzNCSEk0Rnl2T3ZtY3hDYUdZQ2txSTNSMUcyWkcvNWRRMStOcGlZTFByamIxRlhqWCtkdGxiQlB5RzZHRTJJdzMyd2hoeDFtK2lQV3JqNVFOcU1NWmxYZjk1enBBbmFxSXRPR2hCN2U4RThURWkrREt6b1lZWmNNMUFMUGJ1M2hNdXhCUnRCYThMZUpNRUZGaXBjOVc3cjlmSGZSbkZlZy9EOWdFS2xtdkNNMEJDd3lROHdJeEphN0RZTEtTY2YyWHk4ZkY3cEVOLzdpKzZXcDFLUzN6VC9xVWI2eDlGNHZBTWpLaDNkbm45TSs2VXQzazNKNDNNekdLMzhDODRlVUluY2g0VWFWdFErK0tQb0g5SFE2S1VraEg4alk5Z0NseWI1Zy9ZTnk5R29HZ2lRd24ybXJydURXS2NvU1YycTNNWURhdWtQYXhJM3hwOWtRdHM3c1prcmlwNGIwU1gvMktEOGZZN2ZpZ1NMR0g4U0lQNkwvbHdFaFlXbW0rOWRJbmNQYnhJdENlYUxCU2h6SVpJOHFGcU1MK29SaThpKzZaUnFpbzc0ZUI1cDFtV3hONWVMYlV6K2ttUDBIbDBwZG45Y0ZWeUcvckJMakRUYjF0dUFma3JENlRXRWFhSDFFcWtiWXZwTzdWR0JoMUlSRVZMclZleXc3T25UcisrVk1ENUM5bmVndTdlUWdwMkhRUVZ4Z3h1ckRLeDcrVnV0cFlDMEsrRGNFRVpQWllJWmVVemRneHRRMVVpdjRRd1A2b09qT3VFOXV3RCtpWGdWMGI0NDZ0TnczTHRMWGVlNWhRZkd3ZjQyT01uSTNndjFSS0tvMEhsWTNPNTdiejlDbWZnRmFsNFY4ZENEOUZkNlE3VWx2RWhlUzJZVlBmN2E2aG5OY0tQRU5oNEs5dzFHVjcwazIySmt5ZGhRV0pXNE9LU0VCNUdrTEtDWnpoSEJuLzllNWdjTGZHZlJDVGwvamhmMlFqUFdkNkh5QTcwd0w4bW1NL0RVelBFTTI2bG5oWXhjSm1mZXV5SmVWZEhOditBVHdBZXJFNjRTcXMydVZTK0RvMEhWVWlTT2dWSjMyV0ZwallJMlFyeExsL3JKR2JtNkd1dFZDU0YvaGxVUkhZK2p0NGUyT0VCY0ZTYnlyZ3JITWJZZ3ZMdXdUKzR6U1NrcTAwZHhNdFFUVlJJTnJDOXFFcmlxMFlQT3pKUzVtWU0rVnBsaWRrYjlwWDFJOGw1bVJYVkc3YXd5V1FZVWcyQW1BV1AzSUpTcENCYTZmTW45bmxxdHJ0NjZLd0sxQkdXTE93c0VnZ0hYZ1EyeFdvOXNlMWxkekI3MlJQakhJYnBXbzlsNWsvcjlIdEpyQk45YVM4cGVlU0piRUhGS1R2RHdNR3NhZ3lTdVVBNnppWTMzUk8wY2dSdVIzR3BMakNueXZOU2sxU2UyaGdISVhORWZlUXI2UDdHd3dqcm14RS9nQ2kvV1MvVVJqenNTakxmWkRRVnQ1QnZNbFVScng4enFKWUJSbElKdkN2WXI4NkxxeWxveFp6aWQ4YUUxNDdZVWdma1F6YjNvVk9sSlJLNjhHT050SXk0TFgvcEhOUmUrKzZOR3IzSTRjdHdIeXg3R3l5OXdGT0k3MmUvU3B0K1dUUFZibE9YVmJ3OFZ5cUpGRWpXMnA0OEVWTEtPQ05BNW14NTZta21xNVUveDdIQmJoalQ1WDVBNllKekNpdjAzTlI5clk5RGFyUWpKLzlNTm1WbmhhVWlQTTNxQktsQWdwYk5McGJPTktYeUo5K2Y5Nmo0S1JUY0NKSVRuYzE2SHpFWXliMTM5L1UwNjB5RFVINnJNZVNrNzJWdmc4NkFJQTJRWVFtUXpleldxVWlDaUZTUmROQU45cWlEcTFHNkFWNnNDM01RRU9WV0lGVGxLeDBlNkhrSXJ2UHF6alNCbm5uR1ZoVzUyOHFpVVk4SG0yVmdDaXZFRWlBcnpmNXVVRFBUWEFGSDFKYWszM3h2NlVyeUUwdi9LOEJKMHp6ZElzZXhWeE1jL2lBNTJqUDVzQ2RFb0xxemtQb2FadmkxTmpVSFNHbGZ3OGs1UTIxY3dCeGJ5MDN6YU9DMkNaaUt6aXR2alZ6TnlSbmxnbnM5bjJQbWpLUWgva0JoOHlGUThlRm5UelBCbTlQR3pCN3p4NWYyVVZieFJ5anpJUGdwMnppSkdYSFFNZmhtMmtoMVpKd0FwY3doSkJ1VEhrSjNLenp4bHVPOG5NZStNUVArYytrOXljSFZ4cEhkTXBnbjVJVVAwSHNCV3BtTnNJdHcrLzFrZlR1eEg5WU1hWXpNOGUyZHp4TlkrK3IzZ0tHb29sZ09pWlVLSk15MzNMOGJXYXpLZkRDa2dYKzVWc2dTNzdpcVhNVFNhL3licFlHSmdCdjFJWFcyOVRiOTlSVjdPcjFlVjJhcEFHZlAvc1Z1Mks1dVQ1aGZvSnNEVi9COVlRTnhuM2FCTncrRVozSlBrbEE5WGRGU2pVdzlGb1pyait1Um80MXVKNXdJbVVOaUcybUdGSDJZdVA4WVFJY2hKYytlUHBRS01YVWNoUHZhdHlETTdaNWpCOFRybGM5UzlMZEIveG9mTk9MTmxLdXZkVGt6djBzcVkvOFpZQy9jR3Z2dVNydWVXTnB4UmlkKzNDZnlKUEZNc0k1Y09hdnJGMnRTSlJGOFJUZC9WM2RtaU96RW84V1ZRRDV0TEpKUVZ2RjdnenZlL0oyVXNBLzNuUlhvdTRWNjdOV21vMVRjbEtEMWowNThsMXRvOGxsT1F6a1B2SXRvc2RwazdQN2cxSXp0OTBwOHhVM2RqVGtra05QZGRKaVhCT1FoanI4cVF2NXNJSmlhbTVtV3B0QzBDejd3Wm1QckRIVy9kOVAwbG0wb2xNRHhOc08yUHdUaGp1R3ZKSTY1Z2FwVUIyZThKTlNrTFFqSXlsRUEvYzFld21tUWRnZXJ0RHJhQjBFZU9mK0QyeHFwVTFydTdoa09FQmF2YlFneVZpQUtwMUdXdEk5UXgreXdQVHZlN3Z4aTlrenhhU2cveFZPV0hyVitYbS9lK093NFJIY1VzeWgybTQ1T25jNHRwa3FWYWhsVm96NmtLV3F4SWRPdlBqVmJDQThkRUx0OW9kdkNUN3g0Y0lSaGlOVHZ3eDJ2cVQwRU9jRmRLeHpFN3RWWGt5SVNpd2kweXBhaFRYb3pDM0Jac0FuNThvSWMwSTJzUVNpSVFpNVhhYkg5OGVickpITmhmQjBVeU5vSzczd0lMelhyUytJK1cxM2oySy9EdEc1eVZudXY0Mnh4R0JUTGhUczBoWDFqSytHUWtOU1NZcytmSE5ybE1oUW91MDlzYVpIWUh4V2tjQ0xEUGxza3YvemcwazFKeVBwZ2ZuQ2Q4R0ZUSjRMc1FmeEFYcm5meFdaMTQrbHBoV2phRDZGbCtJN3JBWVg1d1pCS0FibjhXSFNPc3cxVFI1ckFwSUR1cHo0OEI4UFpCNloyMVMzMkg3RHJGY1IvWXMzNW1JY1didEFJcjI1cDhLK041ZWFtcnlES3ZDZmNRQUJ0bUhwaVlzZ1RtSWlOanBoVW9McUNOOGdQamgza1ZQOG1yem1vZEFkZ3pUUm41ZWlES0xDaW9SUitubFNhWXhGeXNMY3VaODBhb21ZejA3dzNTbzJDWjk1bHFFQmIwSDB3OFNnUjZPUzVtelBrY2k0eWp4V1E5eXhJM3ZNbmpYYjV0ZmxiQngxWUJNYXo3cXVjdUdGMnpKa3BWQWhhRGcyb1lxbkNHUW40emRmWFcyRS9DbWdOQTRQOUxyQms2NFVvdnlhU3VpVkxxN1BMc3ZOZmd6U0hXNTE4Uld4TWtjbzYxdlFQb1djMHlTZHJWd3diemMvT1krWlBXVFdXa2p5NEF2Y1lqa0Q5by9CSDA3RjhJY1JjalRKKzlqYml2STRIYnRNN25veEFPYms4VzB2SDg2MVF1RVJUNnJkWVBrQ01mY2JrRTJxSlFhcGVFT01zbmF0RXFZOHlCTlVpc3UxTzZLQU84RlQ2WG9sM3NOeXMrY3ZSeEozT2d4cEFtY0Z4Nzl3RFh6UXEyc3F2Nkx5cVZsQithWi9tTjAxSnVhL3pQZmpDOURhZ1ZDQ0Y2dFF5NkFpWWJjS2FhY1VYU1dZRVFLMFhhV1hyU2NHVnBveENLTzVEMzUyYXlrMXd6ay9Mdmk5eEt0amwrM3JUbXdxbno3NWtGaVc4TmlsQzNnVHNGYU5KZStpMXppUlIxNkFyeEo5OUV0elVUUys0MDVvZktndFdtR1Q0RGtYeTNpMEZWRWI3SzB0K0ZkL1NvNDh0K1RCODNCZXdBbTFMSEsxbTBoZzFFcHZML2J3OFlsQ1BrNTJZTDh3ak1HYjdPc1pxdXpMWVBSQlhlZXRMWGFha0xJcDllVm54VmY0enp1Vlo0MEIzd09XQm1zY0k5aWdjeXF1dEN6a1ZrS2xNdC9VQXFXSm1OUGpYOVNjaTJwdldpSWhHc2M5TXBBM1VLOFExbzcxaE9aNlpBRVlmVmMxMi92Z3NEbzd6YUZXZ1hMVGg0VFJvUFVHRWdPYm9uY0pocTFDdmZXa2xEU1JsU2FrZW9tcitUMi81Tm5RdTRKYjFTZGRWN3daUU9GT0ZyU0dqcnJER0lIT0hTbE4zSmRNdjMvMFBVUXhXcFJXVWpwTjhudWh5eHhuSzkvOGpLd3psME1xeS9zekZ4ZnBibG4xSkJpa1YwcENIV1Ixd3d1REV3TEIxSkpRNndxRmhWMXBPMXVSb3BHcjgvSmpWL3RWcyt1ZURNTHcvQkNNblJ4enF4M3QyeUlIckxoWmhGclNWNnQwK0hXekdTWmZ6bWQyN3ZzVWhHbjJGbU8wTkRVQWJCSUF0a1RROUpxYXkvd2tremNOM2tROUFTQzY4VG40VTlNRDBDWTFJR3BNU0F1dXQvQlpscXhLaHZSZU9GVUUrbm9YMU1OMlNDNC9ZcGpmMk9oa0R5a2xMT04rTDQreXFWYkpVOGRodmM0UW8zYzF5MzFidU9rT3F0a25INEFseEZJK2RvcnJjcmpTYVRvd1ZNNlF1SXZNNEpyZGtxK0pDNFlxMWFZSWM0ZGlLRHFnSVVHa0QxVEMrOU5jN0pJa0g2S1VVZVlicjREWkpHTzVQSFcyL0M0c2VFTGRGNHp0R0U2SGIrSWV4TE8wb2Z4S1ZUL0xPRitXMldvN09MSFFPMkZ0MCt5MWlNYXRjZ1k0ZHMzVm5vNDg3cFUzb3BCU3czWVg4aE9BWUp6YjM4cEs2M2pNVmlkZVJnV2NtbmZ4RWZ4eWl2NmxzcmNoQXAxaHR4a2dqMUFyUkNidGRNeEtneWhLRVYyYWFaSURhWEE5ZkMxdGdFamJJbnJIdE94aGk2dHNGWVhOelhGR2tkS2VUMWdDYkRPTXF2S1VKc3UrWGlnTWEwdHFOMXVlZW5RaTdXZXBLV2tSUUcwcFUvb3JxTFZVTDFHWUlITERzYmRWZUtnTmNqdEpUZGljZkY4RlM1WW81SVRzNkV2MUtyeEJSc3lvUDZZUGo1MDFUN01CMHJNQS8vS0hxcjlNaWpEcXhOZjRzYTI5UGprVlhWQXU3eW02SS9KRWErb1lOYmRiM0lLS2ROSi9tVWdPVGxrV0EreS9xSVd2Z3JvOUZCdDZKc3RReS9VMkt0N1daQTFlMGRJckttRkVJdzNTN2ZmZ2JJZHRvT29GUlhkdFFncmpiYU1BNE9jR2xlRVl1QkZpOUloZHo1Z3NQYm4waGsyYlhmRnBBS1F1U2pJNGo0VjcrRE5YdXVUV1pnV0VDV0c5b2VyTEdSbXozNW1zS3dRdC9idVlNd0dRNEZac0tDZHNkaG53Q091QzNmcnVHRHI4eHJLcUxDRHFDYmdvVHNZWHJQdjNRVGZQZU5uMTByb0NQWnRYU2RFQVJFQ2xyRldQdVlKUWdXcUdYVzM0Y2FxTVQxVk1tcEY1MXFWeFNISi9wZ1kydkhoVlRPa3g2Q3lNTHl1VXIwaHJMNmdOMG9XeXJYdlp5S0JJb2NQZ25obXNXaEgrVitITFp4dHM2czRNWDBXOG1odkpLWjR2ZGtrSXpTZVE3bTUxaVpjdzlUMzFhQ0hJYU93dWxPd1h5QWVwZ0Z3VGw0MzFSb3c5UHFnR2tPREJDdk9SaFhMSlM2T3VLMVlJRXRQampSMVNEVzFGWjVzNGJvUFlWWnRIUWdEYWlSN09BeSt0N29YUTZPaFg5OGVRTWk0akpLSUVIcXdTbWxaVDdiU3I3QXBWZEhkcExRNEx3dXFKQjBSMTdrRmR5OFJMVktvdjJuUGhEYU1nMGxBNDRpYVJjZHpSbEJOTXVBei9RMjVtMTdNM0pyQzNRRmRvcGdBTC9CR1k0cndOb1duRDBvZFEycU11amdEQVdieHFZQitUTU80d2QzVjl3SWpyYkhSdGZQRVVwOVkvUGtyc0JydjF3Mjh0YWtOUlF0OWszMTV5SVZJTDBZNEpmVkx2SE5Dek55ZHdHbGNvcytSVjZwVlFPZU9LSWlnUG9STU5ER2NEZHVJK2Nnay9pN21McUtNdmcxS3hzNUtoRjRaS3ZBVDdZTklFZHZxY3BNS0ltbVdFZXg4YUIyV2I2cGxKbmVFd3N5ek5jWnBqS2VDdS83RGxUSmRNZHB1SGRNZ3V5cFg5dERqTXR5bGhEcEZnSnRRSk0wM3VSV29DMCtIb08yWWZzdGZQeUw5a1FhMFp4TVVRREdCSEJQK3NhQ1FlblR2cS9MRXBycFBRaUJIMVV3ZGt2OXZ5R3FndW9aMUx3Z2J1WlBBRmlOaDJpSm5lcVZsS21JcVIxYmhsaFlsYmVuSVRJVWEvMmZxNXN4T05CN0JLZ0ZQQW9ldHo0SVdDREYxVjN2ZWRIVUUvWkN5V25SNEdZK0RPWkhCQkxwa3JlUTc0QkNjeWVkRlROQ1ptdkZmUUV4R2pvR3F1cUsvTVFaNUpZSGlQdHA2MTNLN2hJcWhnQ3c5TGx1dzlXYXBHS2pwYW12YksvdVU2RFZzVTUrUTNKWTRUSCtDbW1hOWdLWjNnNVlmUWVnZmYxQUlaZHFNQXZEbWlqeElNY2daL3F2NmU1NDRJd2pZS2NkUitlUXRiWFdCQXZxdzhIQjJnR0VsZyt6L2MzVmNCY3pBd1pQSG4vUXh2SFBOVXUrN0xKdE9VYmwvcXFINWViTVVuK2pWVHVJbFMxc2IvR0xXOEpzOUt4ODM5WmxRc09lMkgwNEZUNEptUVNMOFcxSzByNXpiblpHVEJ1MXdmVzhOVUUzWmpLa1NoelpPSmgyNDJJYUhudmp2T3ZrWUZYL0duZ0FSZjlJUzk1WWhaamkyeWk4TkVRdDNxTjg0YzVqL0VXemJUYktobE1XRDFXQndKUGNCalB5aWFzUG9uQXpGTmhGT0V5MC9PQ2Fzb1orek1nR0ZBc1JPWVpBSDVmM3lZRytNa0dUWThSOFRNcnlaRjNyYWJNOUE5QlkxOUNnMDg2SFIxa1BTaVlJSkZXWTRkVHBxTGhKM0RLemNDQUw4d2xxYldHcVRoOUFkZ3VyTFhLOUxHR2U5Uk40YXYvRW5TRjVjeWg0aENZYXh1dWNMK3NaSGhPVXIydGRjMk1yWEhoWW1pbEJQZjhiWW9iTXpZRUVZZTJJSDJlcWVubUY0Q3puMnpTZEU1WG9Cbis1TGIxZEFkQXpRaTFWMTdwTzF3NmI3WHVrZnN0N2o3REJoUnp3eDNmZkRYUzUzc21nMU9kbjJhN016cHErbVJxUkhJR2lvVTNCWHR0akJ0M0VDT29hdzh5NE5oSnEvVDhUTVR2SklGRThWemFhVzdoQ3dJV05UV1JKY0R3dFNpalFlV3dXb2EzU1pqQkxkbVRTbmh5RVJJTE5KcXFlQ0FTMGsrQzBqUHk0U0lBYnRwMEFJNU05YlZZczd0d3NIejdCQ2hLdUZTVVFlaVdZK3JiRWxrQzZ0ZzYrWWJLN1h1bnU5K1BRRkVLMUdSMUtTeU43ZmFjbWtJbTBMZ2RLSXhpc2J3MDRjS2x5QWNJZ0swTldTTG1WdU1iSEVSd2V4anRWYkJvemJRcnhNanBCVjV0ZlZDcjBnREZobSt0bUhXbkwrbElsVjZXajJ3TWFSaXBjZ3ZCdDBmekNsS1hSc2V6TkxPL3RYVFJnWEVxVnFNRmdYWHAzVnczaFlVSEoyTThhejdMblYrSDVIdm5sdVpUbW40dDdmcmJoZDNYMjBUbU1YYm9vSGFRdUE5dDQyQmJiZ2xaRDVwcndGSEdRZlZJbGQ2WkxvSCtrWmltWFlsRStRWTdCdVVkejRkTW1IZGJ1Q09RejdXb3d4L3ZQRC9tRFMwcGFkalNjTmpIVjBRUXpIbUtEa0t6VzJiVDRLamo5NkErOFhpcm5CRmJDWU1vMWhuSzBqK2JaVngzWk9qdEs5ejBJeTFwcUZvYXBBZlE5WHFIS0VJZDd3NjVwbVBPSENKaHJaNW5odWh3OHZCWjBrb0FIVE9xcXRIcElmOXBneTE4NnVUdldTQU83aUg1U2ZiMnFzMmExUk1rSkg5Mll0NGdRaTI0WXZ6S0g2Z1ZITVlqbEQzSGh3dC9BNnZpUVlaSjhOMi9zTFRkZ3o2QVd6QkpVbGl1UmdScWxaU042WVFraThsMUl0ejRqTFZTMlBPMW92TlltbzJZNGE5UzlVRmFCTVkzNUdBZDIxN014L252a3Y1c1NiamhRcVJ0TlI0a0Z2UWo0MWo5cy85WlQ2dzdjZWJ6cEljTDFpbk4rc01aWW91cy9tSXBMSEhQVmVEREJHTVl3bmJXa0lSSEw0enhQT0Q5bUxENGhMN0dmSWxOUEpQRFcvcnp2YSs4M29rSXBYTjZxN1JuQkdra0taR1hHQkZTbDAydTN1cFVwRzkzOG5hMm1Ub3JEWldibWt1ZXRUK0l1WXJTVWdWWEdMaG5LcDk2clVWRXplNE53RFFDQmJVbVRwTlFiMHJQQkVDS1J4bGprZ3doQ1NjcVl6MmUzZ2dRMnF1VnRwZzhHVDlmdDJqMnRXNTNzcmlDR1ZoSkdnOXNrS2lxTFlUY085YUVNVzJTT240SVlmelhJNVlRdGJ5Q2l0RXRZemNydzBMeW9GaUhsbDRJVzc2VUJ0Q001U3IzSnN0RmRjNlUrVGtYT3hEU2V1Mno2dmZoS0F0OStJR0dLREdnOTlBWm9TNXFyRm5LdThRK2JpeFVtdjNjKzFJZjk3cDJzOWN5TG9Ob2l3eGVabU8zUmFNUUM3RmxRSXJENzJteHhrVFZ4NldDNVlhRW1sQWNrSm1jd2EvWko1bStWZ0RGSjFod3RFejF3YzArZjdONEtlRng3eEl1N3BLc2NVRVUwSWQ1SmdpelhWTUF4eUFHbmtNUnRSVFNmcjFpMlo3L1k0RlV3M3l0Zy91ZFF5UTR5ZTQ5Z200YWU0OTB2YXNjSWtwQ014WUVzdWIvV0NhOHZqTkh2OHlyOG96Q1BxNDU3cmpIOEl3NVFSUlVzNGZialBSVk56TTFRU3RRamo2bmtZaDgwRm5XcHVaR2VETzl0Ym5kbEhhYXlJZExlT1ZyM2tFSFQxYW1vZkh2SUdLUSs1cmdiTlR4K01xenpaRHRMTkYvWU5vUkp1bm5YUUhkc2gvbDI3WTdIcnFzR1Z1S0lCK1Jnek5VYnVaM0dnMUlpU0dXcDhlUGtqeFJGWElMdlRwVnBkRGtlWlpjVFc4T2FwQjY0L211Rjd3Z0Y5NWRXOXhJRWtURlY4bFlxK3JpcFhFc1N6bFRqNkxIdTdVaG5WZ2pEbkFmMTN5bm5UM0FsK0NWUHpDYVpMNEVFZmc1Tm9lSkdxM3doaDRnbSs0Z3FLVVplVjBDOU9tbFh5YWVJU2JIeHRiN0RoR2t4Rm5KN0Q5SUo5RWF1cUFvdXg4T3B1cGlyY0dpOFF2TDFocTBRSURaR1NtcmFyaWJjNlNVbFJ2VkRhMU43Vzl1cVIybUNKT0tlN1NOdmRaaHUwakxrY25jajhOWkIxV2RqQ1dxeFZBQWJOcmo3VGFsWFZISjl4WldoNVhrRjBET29qNW1HVlhhZmd0c01mV015cnlwT0VKVXYwa2Q4UzRaT1ErNHd0aXdNYUswc0ZaVk1zbjlmYXd4WDFuVTFGYTJyMENqcDBrN1FXK282OUZpZ3VqM2t3UmNjeVNKdVV6dFRZcGpad0U1ZVNMc1g2VS94S1BNMWlyMjY1S1g0QVRjY1AwVXJEY241RXhBL25wYndvTzRVb05jWWZaTHg3UkR3N0FvT1VpcDFUdjh4TzFFY0lIOStiWGhwdEdWbGJ4bTNsUTl2cWdpRnhaYkJWbThyd0RUNXl6MU9Ka21EbGthTkRUL0Z4bnQxMU1QdlRpK1B3eWVXWFVtNjVNTEtndk1JUHBsYzZaNWJaNFlIQ05YNEpiRzlVQjNJY0MwTEE0YTljT0doNzN4MEIwdU54MWRORkVTeVI5M2NuUDNtbVNJaWdpV0hUSm03ZERVWUJXVVJ2Z2JWSCtpTS81ekI5ZDQxNXlQSyswSU9QMU4rejZ4d3g5SU95Y3pwMVYza1lRbUxNY0t5VVJYZzNwSjVDRG5leDgvWUlYWWNsamR3T1VzbUNLcCtRdDRtcGFRNitJQUdHb1haQmc3b0VhdFU5RHhqRmxBSlJWSmdWZm9WTlZaM1o3Y0VNSnE2ZG1MT2ZOclJuTTVzbGJWYnpaRVFtczZTdGpDQmM2RUl3QU96aDZVdHdHbHFQRUZNU0tTU2VsMXRTUzFqc3lNUWFhQkRpWjdhR2JMbVRHeDBMeFhnUEV1dWNXTVZ3eS8wVERMdW9FcGo5Rkk3dG5RM1BnbW9FcHBqMzhXUFZ3a3hpU01WREdkcFFXWFhsajhQVXNaanJNOFJuWmpuaVM5NE9TZ0w3akx1SDE0dGFCVWR4TjJSMjBrb1pjSFRFWDFGSjJETFBnZ2V5NkVTUTltUmhsMGpzSVpOOGYvV3JoY2tseXFOUitFRUdyeVNjcFE3M3dTNGp4SlpaRFVKZ1R6NFJ5NmV2VGFkaXRGaU10WXpXSUQ5VCt0K2UvbzVacFdLeWhNd3c3T0NOV1BsbkprbHM1NG5qcm1aa20vZTl1SWVuNGlhSjBLSEdtNXNVd09vUnk5ZG94ZWhtN1BEamhTODhKNHIvb0g3ZTF2MWFTMklPaDdJNm5ZcmNGL3JhTGxNSEtETTVmV1pGNm80czZodiswSUdOTi9BRmdWd3lMZm9WUWkzNWcyMWxDRGJnZ3RhY29CTTJIM0w5T0FJaU9ZdTc4c3d5aSt1YWlTbktPdmhPOTFSS2lyNmlJZ0t1TzMwVFpUV3R6cVJYVTVxcEtRRXRGT011Zko0QzdScGFXck9MRmpVUDNPdGhPN21GUVl2NnJ2L2sxUFcxT0g2TFNsU1hraHlvU3NseW8vaWNLckdrWFlkWFkwV0RGaGVmaGFVZVpEc21ib3hudEsyaFdaenl4YnlNNDRDdU1taVZtSWtyQldiQ21GTEgwbzUxbGZpM3d5Y3VvRHNQViszWkEvNkFhb3VqZmdEZk5vQ3ZyTlZnS3VQVnNkdTNjNG9TaHZaVnNCMUxPN1FadUJOeUFpYWhLMHJVQXhFQ0NwOUVnRUFmeTZRUXRRb251amI2allrcWg1UUYrVlBkTTJxSHRDaGdwK1lpRVpMbVYxQmFYeDZ2SVBJSGZtR2dSZFVoYW5GbGNLQXQ1ZFRDQzk2VFE0N0lRc0lwYUgvdVhFQVNwWU9ZTHh2dTNMTHRRcVlDbDBhd3RQbE5ZcGJESEpFQ0dtOVpnc0ZMTGxDR3Q4TUgrSytJVVdoUDdEMUNtZ2IraDJnSVZURXdKdmt1VjVGY281aXhYS2VQNDl3bktReUwwc0ZBWTdLZC9ISVJqbXhPTG5tMDIzQTdmcUdZejBuZ2hhNWloK0xyZ3ZLdWh1d3lGcnR1bzZodmx2NnJ0Q2I0TXYyTitJRUlvZ2ZxMitPVGRVb1BCY0M4d0hIRVcxWG5BNm1aK3l1SW1wSjlrN1ZWOTh5YzZoZWlxMzd5MHNaQmJBaExGdi9LYkJ2Z3JUMy92TzAxd2MzZ09mRkRuZkZrbWQ5eUZGcXFodEU1bU5PY0RFdVdUcUlmTWxjQU1Xc1BPTSt6Zzh1c0dPOTgxZ1I3Y3A4aGJ3RC9OWGVaZVh3aW5rVmRSdDdDaXJ0UzlTVkNXK0RnNGZyTjNDU1E1cGpOSjVmdWFybDRkMXFpeTdML2x0S2s0alU5a001UU5YKzYwbjRTckw0UGM5L2JtdHRXbi9ScmpTenh3ZFl6SjlnWjc3ZytsVmk0R2RnN0R5MStSK2V2enBnSFRkSDNITm1tWmtlaTBsd3N5bXVCK3pxWkluMFcxRHhLSGs4Zy9CUSttS1ppcWlLQ2R0TDVzbXJxd21vYXJHZEdhSkREaDBnZGYzdkJEVGdKbUMwaHM2OUJ1Rlg4M1d3Zy92NlJvS0hiTEM1SkhQVnRCakx4d2VHR0dENFRzOEpFN1N1MldKcXk4TGgwM3BGRFBRRDZCdGwzMmpsVzVza3FOVjMySThweTJNYWFEMjFqYi9SUVRDR1BlNWxxRFVtMytGaEQzNlZQTERZWjZYNmxwcCsvZitjMHRPWGZiRk9jUThOUmFHZTB2VUZ5MzRVTjlTR3Qzck9LcmkrNzRzUE9mVGtEYzNEVHhMWStGS2NNYnkzYWh6blhnYVB2eDlpOTVtNnlwSWQ0VDkwUnA5TWpOTEptWU5tV1BsYmNxSHZ6WUQrbk5kS2NxUTNuMnZBTkZTNXExZnh6a1NoUUdVazV5T1ArNUlHWDJHRXMwNXZseHkwSG5SZnFISHJzVEQ5eC9LdnpNQ1NuYWZEaXFXYW5Gc0k1ZmpPeFpsVmFzZGdoeWtTRUh2b2EvMEJzYTJVV3BBNnIyMTZzYVBlWTlGWWYyb3o5bjRWa2lrRXYwUFZldkZkYk5melRteXcra0xpN1RPSEoxbmhmZGdISXVxWUxHSjRsaEh2QjRUcmVLM3cyelF0ell3OTRFNTNvMEw0Si9iTWRtMzVaUHdUVkJOeGp2b2pKakFOYTJxemFoMWxjdFVEc0t3RnhjYlBsTTJmbTlRL3lTY2xqRDlpL0N2Nllab0pmUEQ2ZWdoeHp3bkpjOW5GUlRXelVMcDkyeTRBNVJlRk16bzZtSnBqVk51ekVlb1FIZjFCVG1WZnJkTVVjbk1pNGlXZTZrbGF1MWhtZFhFVDdla05EOEE3ckFReSsxc2IxMHE1eklsbGxsYWdIa3JIRDBzZVp5L0FiYzJvN05pS1FhdlBFbEhjY3FuRzlLS0I3a0NhTTN2VWJvNWpzRk9tOTJRWU51UmZLWjBOdVZ2dHZrMWVldUhlN2JKT3hPT2ZIMkFncFpla2QrRCt5Si84VHgwTjFiWGplcGhpaHlSSFZ1QXdJcHMveDNJMlVwU0hYejlBOEdPQ1VPU1d4cnJlUEVoT0grczc4Q2RidmlaWHhYOEJtK1lwQkNPQmpVaFhycFBnNUYxU0ptRDNqUk55TU8rQmtyNk5sSUVidng3cDRieGZ2bWJQQ1NCaUNYQm5DTFhCcTdNd1I1Q2ZQNlhoNnl0NWQvSUlHbHlsaDVXT1JTckNJVGwydnB5cTR0c3ZFNm1Ec2Q4TWFsaFdUWVJlRVdRNHVHWGdPdkJtbkU1U2t4M2NZbEJWMzdrRVVDdlRPb05pVHFDMGF4R2JMS3dzVUxncnJhOGxGcS83WGlpM1lhc1BpaUswZElqNjN1NkNISG1NdWhSWUorUUt1SHJmMUFjTGd2U1ovNGo4U3ROaFNFbTZrYzRMMWN4Umk0QmhmYjh5bnA2SVRIUlZtUG5wUnBKNld3NGRSWGRxeC9DRjFDQ2UwYkxLOWFXaWxpWTdWbUVRdzBqNS85cTJ5RnBZVlg1VnBjcUtOZkJRVlR0ZTh5U1VrMlZhZGd1eStBYXBmUHBtVndTaWV0UGliWjVWNkliSmpvMUlmbWl6eVhpY2poN2FDdzVGT21XZFpCdUhIVlVFdkMrV3Z1a0UxRXZiUFJTcTNZVHdGOUFROUZQTVJsUk5zbDFjQWt0TmV5NExMbWIwNjBhQjdjZ3lzRnQzOEJqZEZIVkFQbGZRVjhnYWlEQ3hvY2lRdXBoalBzdDNzdzRYVURVbllKN296VWVQWThyMG9UQ3dRVVdpS3QwVkZ6bkhQSWd2WjZ6MEpwQTY3YytZeDV4VUFnRWZxRWFNSmdHYzVvaXE3WWhaZUhWNjh3N3VVb3plTWJRSlZmZTBlWStOLzZxWmlPK2RDc2Q2WGNQSEVNOUxtbWVScklzR0pHK1IzQUQwQzRzRHBGbmZ5OS9VZ2htc21acER0dXcwbmxJWDU0czJBTEVlQlFMV3JPU3FaTk1vM2k4QW9TWVRtKzJQbGNFOStSQnRSZWlHaGhBc0RLY0VzUkl5YjViOVo5bjQ3bHJYZ3FlV0IrTXlTNnVpVGN5QnhUWE44OEJiUy9VL2dLQ0pwZUhkdVVSMHc2c1h0cFE1dm1WVStSbnh1VVdOWGliUi9DT0NPeWlHSU56QkRIYlpTWkpMNVF4U0M0ZkQzVDY5T3ZlYlhlcTJOdTBZcnAyOUFSVFRhUmNVYVc5d2xhRDluZ1FwVWlvRFM1KzdmZk9aa3JSa0MraHBoTERna3BteE94RmtmSWtTQU5tYUl3R2x2aUVxaEFSR2JRRHRYaTZFckhtV2h5VjExWTd4MUtCaU1CR0R3QllpaVpBMFVyOHM0cnFIMXM0a2xpRGVKaEZqd3dBUXBPSjNUaWhNeDBnUGRzWGFvTGlVY3Rid1hEV3ZsR0RWMWRtU0tuZUZ2TndmZzlMbkhqeG5tcUlJVDhDNnNEdlFyclZVNmhvY2pxeTVlVzMyWC84cHVLMkdwdEVEakpVWG8rcVRkdVp2SnBoeTBEWG41YUwwUUdFMnJEazI3MXpDaTVkNTVEck52MS9HY1NKVU1ScStsKzVRL2FVMnlJcUdZOGNNR29qdUFxc0c4bk5ORDdnUW04b2FNWGtaM3JTck9udnlMc3lGK2FYRGpOc0xRNVk3L0N4TTdZUVk1NDB2amxVajJ5QzJRbkFIRGtZNEVFaForTjAzMG1jWXdMU2xIMVZMTTc4Q3VXNjNuMUVJbGpmVVlaT2J2VW1XcWlIVEpDQVZzOGlCK1lRYU1XaEIwZmlyLzQvVndNOU8xNDVLYkdEeExVS3RwYnQ0ZDllVzcxUDBGSjNoV1ZHSlRudHY3dnlOcytJQlh5WU43RlJ6VkhQbkh3b3JuOWV5c1BpSmg0d0NSOGV4ZXR1c0U4ZnRjU20vMnpIN053cFoyTnBiU2lDblRrK1VzVHFUa1gwd1UyRXF5UW0vMGNwK0tPVk85MkJFRjlkSnBNNmpaWWlpMUsvUm9yMHpsZXlsYjdRa0pWUVJCTlpOblg3emVSMVNCcVlZbUtZWWtNYmgzeHJwK2dSa3gydm1Pa1RoUGxoVFNOcFMzbmN4c1h5UWhGdW8yUjZUZEtRRzJaOXd1bTFHMnc3MktXQk9UbnZBc2dwc2pCSlc4ZU9VSzA1WEtoR3g0dzFGV29DdEtneVk3Vk1PUjRRWW9oNDRHc05kMC96Z1U3dWRZVFdISHFjZnhWNGxEWjV0ZGdYSi9JenppSUxweEZ5Nnk3ZkpUSTRzanV0MDlRWG5kbElCK1IyWFUrU1paVjBmWVJMQWg0UVdiTlBmMGQxQ0FBYnJIMG5McHEwdm0raXRHYWpMbmVMZTRMc2NWYWM5MWRlb3RvbTd4MXdBZFI0QU0xR202Z29mTURHMFhYb0xFTHpNQjNOVWpzYitnK1RGMmQxVHJLeWlRTUZnUGU4bVNTUXN1a3EyOXYyUGZRV3liU2xIdlJsb3B4OUdTUnNzdjU1TTZ4NGF0RFJWdzhLUldYYXNvWk5LY2ljWTZxcXJsaHhROXJwQ1J0WUhQTFpuMlpMVjlIUG9oS0crT25ySDl4SGJKZ3c2eGd0VmFvNEpOejFIWDRIZnJGRFJhZnU1T3plMnY3OVNUVWxwK2h2OFJtdlpvWWxQMFk3OWErcXVwOHJkVDdPeXdrN200c3luMUM1QkdKUEZLMDczTEhuRnNiWVJ2V0JNTE5mQ1lDa1hJVG1qN2dySXdCNkFpOVpZbEExVXNueHF3Y3VQOEYyV1FGRzJYSHFzaDkxdmlRUWVhTTZGVzNOT1R0UkIxeXFkV0RVakRjWU5hSHhnNmJnVzM2QmFGMm14NFlkbFc4clFZSTExeWNlQmNuVDNhdGNsZHkxU0VNU1NaVS9vTm9VeEd4U0xzNm1NY0lVVVV4bERyeHpOcXo0WjR6NlhuZm9qUURXZUdZTkJrOU1oaDkvNmN5VFRLNXZLOUFPaVJleUc0L2JUcnNwaC9YU1lyeDRGQmRVSUpzK3M5Q3FqUW9kY0NsR3prRzR5SDIwNUc0NkFPSE41dFdDa1RHVThVMU15endQMnRrcmFhajE0bkZpNUcyS21BdFB4dE0xSUhQeUN6OStNTlBHRTBkalQ4RkFmUDZyUGllVG5iaWpQK0dLVEJ1NmhHL0l6dHhZWFU0Y3ZHT2VEVnB4dDNTN3hleDZVczZSMTRwK1FuaXdyK2x5RWc4cmFwWE5OOHNqUGpKeUhlTW9QS3RoTUNJS0pJR0NGRm5RR1BlcTgwQWFnZlY1MG8yWlh3MmNkNitaZy9oN29uc3BIS0Vzd3ZMR1pCd0tCRmRySzc1WWV3c0xQUTNmUlJ5ay8zTk9IY0tuMWZzVkorRmJYZjRVWlRYbWZVQkxWS0h2UVR2d01LejhBVVJsVGQrNmxxWmxpd3pQMkFaUlpTeGZIY0hDRzVXN0N2MVVtQTZ5dUc5T1RWL2VqcVV6bmJKZHkvbXdXd1ZkdXozZkp1SmY2b1RsRyszNWZORWRLY2poVzc5ZXNPOW9wcEVVSm1TODJPQWt4azNaZ2lWbVBKZWVIbHlsNUhGcGpLdStVVXhwRjNHT3IrOW1uMmxlU0dMOG45Smt5cEdRazRVUlQ1bS9Yc281bFBUR0l2MGs1NENQeFJVaEhsVllVRlR3OWtxbjR5SENOK1pIYkNKT0dnUVZua25XaldGamw1S3M4Y2FGTk12dGthNGFuVm43bFRrT0ZKcllFT1hjWFJNRnJQOEZjbjZiaGlRVGd5ZVlXY2V3NVUrVnZGckxDQmkxN3A0TjBodWpGRzlSQU12OU1XWEhCZXlhM1U1WWlmU1cyczNraVBmaEVEcG9zcEZlSWFLSm5rV3RkeUtDZC9RbitiQlRPOVA0QTNTTmZucDBKMTVETVFHMVhRV0ZidGM1Q1M1R1VqWGg4cU9xNjVQeHpEMUdHNEF2cm1GYUZQRW9WbEZWQmxpc1BUTmdNK3ByK1BMTXcwd0Y1SXB3emhlc2V6cXhmSDQrVkNLYWlKazRJeDNSQjNtc2t0VWZ1cEZBVi9VeWhsRWlQaUczT0R5Q2tKbUJuODN2Rks2OWhDNDJMZFFURzEvSlpiZW9QSzdOM3NKOEwvNmp6TVlsUTBPT1J3bUpSQVZGVUdwTE1QZmVGbTVuTVUvRk9LUHRHVzJoOFRlNXVzbGFta3NKMU8rNWk2MEF2ZjlIZ2lZSXdIbVpQTnBJcFRsOS9TT2dwZXY5cEs1ckVWeWx0SGJDTFdla0dEaU53b1RLRFZMN3NGSThGd2VzS29kRk4veExYb0xFRmNyTFM4cTlVZUJVMmlZSzdQeEQ2QWw5MjYxY0lUT25pR1JmQmdkby9pVWlBcCtvRmZJc2wrb1NDbStOSU5DY0xwdldGYXIrV0ZBTHZpa2RuVUV4MzNiSHh6cWxGUFMyWmNPTHhmV3poZGFYWEpsL3NTUzNXYlY1OWtLV0NKcTBtQmt3dGt4YkZkSS9TU2JIdkJGcmtNcGIwTWRzYWNaL0ZGRWdRd0UzYUdOREF4STJIaFJkYS90Z0FxNjV0c0VjQWxYR1ZJb1l4dS83cFJvVXdZeG5reE1ocEpwVFYwSVVCZDhNSVNENnhkRGphTE95M0VNWWF4VURFamY3NndJS0l2S0dpUzVMQUxJTCtCRSt3S0FnSWo5TVM2cGdnUVdLcXpjWDJSWW51SUJzaUt0Zm0wMVJaTDlnUHFBT0xrMkg2QklQbTFqWm9vSUhtVERzZmlPZFJPa3pDNXVkenN2NHh5b0hTYXRuOHdUZXB6Z0VqaGlwaTFhQzkvaUw3Vi82aG51OUhFOFBMOVgxYTNkaFY3Q1htOW5vRjhjZ2ZJOUUvMTJndTE0cGUxakNhR0wrYkt4eERIRHdncXBYbU1oNzB5QS9taVd4WWV4cExTdGR3Nm9UQXBzZWVkNWtsRXhzRHBvOGEzS2NvdThDcGd5QURNdTByUTg1Vm1ScGpudGxXTnBYQUhOYnp2aVpWRGQ0OXZvU1FMbG53cVgxdEhOZlNPaUJxVEFobDRVZFRHMTJIU3NPUWRDU0psOWF3UzVDYWhXUU5uejVWeC8vVi9DWDFYWWhNNWxuWGdRMkxxRUN3UlV3YmNTbmZMaTJ2cS9rZ1pGYi9wSVBTL0VaeFlUQ2Jwa0VHRkc3VXZyREd0M0FrTENEQ2VURlhmS2htSUoxNXBZSkNzZnVWeS8rZnNQVnlTekhnMTRXeXFXR09ZSS9WQS84ZmozSGttcFc3Z2JZb3ZwaW5jR2dPSlpNY0VrcDY0UXF1UnlTVkhUR2pDUm10MDJwVUh4NS9BS2pMbEFCcWFLZ2hKZXpXYWxlektSekhFS0VnV3UvNTNmZVQ2NWdQMFQyUlR5d2J5ZFd2WkRDK0Rzc1VsYWRPSkVSekY2ZFlMbDBwRUFDVEtVNGFWN3FPV0ZLN3BrTFVBSXRXTXNHcnFTRnVoaGF3U0IvOUk3UlhmdUYwNzBxRzJnV3F5b2JpMy9iYy83RHQwNEtBR2xlSlpCRjk4WVRrbEJkY3RzeUFwelM4b1pIcXBKSXFPTWhtcDZYMTlYaEVqb3F0TS9mN0hHSkV3NUZUSFRJQm9IVXR5RXBhYjJNMTNHdDBaRkQ0SEJSQXdsRmlNQzR1U1h2L05LWjJLdjVsaWhYZnZwVGU4clpzcERkQTJRRmRMUElLWWRpZXhjYm40UUFtZWRmZlpTRmhDRGxlMmZ5My84aU5VeUdaSWkyYUo4L1dmYk9rVXhRb0ZlYzdQa210eERvYkMvbmt6VlRjZXV5Y3RNdzZ1d1pjTzZCWUE0Q2ZYZlBpZ0VLR2lROXZBOUgvdTJoUmRySzdPMnNENUR0Uko2OFZYaGFWR2ZnVGdKY2V1OHlielBnRTZHVmpIRjkxaUIwK1NiRHRPMzkzTWk0MTR5UHlFRTNTMmUxMlVhakVqNHpaMVo4K3FrQmQ1ZkZwVGR4Tmc2MEIxSXM3VVpDRFlQa3dETVVuVmp2V2VKVThrSTd5SWQ5clVzbTNCWmJLaHl6bU5zWHl4RlJ4VzVzRzhHdG5FSGNlODFsNEE3YVhheENjem82c2F2VTA1NE0yTzZ4cUpTL2JBUWo3aGVvdFRRbWoxVG1LVWJQTVFjNldSVXlIVTVna0pvK3p0NjlsNTd3bVVubW5waVZhNlkzME1CWnJ0VE11MmRNa2hOWEkyVm5hRklra2JaKzZMekRBQ2hpV3ZENnc0bVMzUUVSK3lzajNncnVEMnJQODVHZVRqZG5TbUNhVG1NODVjbnZPY0gxVEp6Tng2OFhFd0tSRHF3MHFzZGdkK2hkaVk0OHY0dUpoMjUzR0tMUEpyRVFpUVZaVEFOb01lSEt1RUl2aFZVQjJBWkY2RG84RkJPUUE4cE5zN0dySFcxcWsvQmZ1aDZtampQV3hVT0tWVURYek5sTUNtVHBVTmloZzhXSWllSFp0ejJibjRtaUpLLzQ5UEs1Z3RMcjBYMGJ0d1Aya2UwamZCSlJreWJuaXBieTI2WEFSN2hGSWM2a1paTGtreHJ0dmRRWDNWaWFCZWg4QWxVTEFwY0QvcW1oUEJmQ2NiL0JCOGRYcCtuUkRuM2xPLzkrd3Y5RDRya2NpM2I5M3kyNk1TT09SbVQ5ODNZM1Z0b09jaXlVbVJWaThoTkloa2lPOGZ3djczYmFxUEFScUJDZGNnZ0lFMks5YVh5S09GdWg5N3lFbzQ4a09aYVJMTkhQM2NDYi9PZ2sydmNQQkRFdE1DTFRNck1JNEZxelV0cEl5eUVFRjdKTnVYOTBNNnkyZjhXcEtFdHpwM21ObTg3K0lGUkttSmhYbjFaVmZWd0VVREFmVlY0RTRvZXMrdmlEdGZPVGVaczIvdk1jSTZYbVJ5QitZMzFSUGk1R0hHeDJVZUhzRDdvblJpVnZIdUZRSXdKN1NtQllCd3JhU05Hdyt3ZC9rcERFazh5WFowVFNoUUZlNldaVEhSTy9jQWdOK2hiQWdNYVc5QWxmZk10VzBUWjBjU3k2RjdtbWpxYmRSNFpyWTNucjZjWllFaUsyRFdVWFI1L201K0pQQUlwdTRvSjFVV3YzVnl4QllZcWtJWnFxbUluUVY2ejAwWWVOV3Q0NHVVdWpmUjN4eEV5TU1EdUp1aVlHTlZwc25QS2sybC82b3pKUGJ0SVEzR2w4NmRFTEZjNnQ5VE4yT2IyYUZGbTBLb3BnR1Y5YTFrdXdWZ1dETE9ldVY3YklYM1pUT1lScXl0NmM3dlpmQjR3bGU2ZXc2Tko4UHpUL2dVZnhYd3g5RFpMcGo4cWlGSDBxNTI5Snh3VE93Q2g1cFBqclh6ZUp2VFpwbUVsSzgyYVJ0QmFJNFB4MGc3b2srbi96djIrYjE4UzQ4WjRtM3gzWmVnSzJsMHNDZTR0SWhPZXJXM3BHUk5qWUVRd2E1dUhVdVJGMnR1NkJrclhZSEYzcDMzSXNFOVN6c2VBcVBCWjNsc2NMSHk3dDJ6NUEzSGs1UCtuQmFzNUJTVjZBVjdJQ1l4WU95LzE4YTU1NEgrQ1d3MGxGdHpwL3FlSnZGL0NEL0VjblVKQUhmaHdOUkRFM1k3cFJXcUFxMURDajF1cGhMQzZkOFBucHgrcE00TWxJUHBQV1dFMkJHeEZVT0xaZEpJVlFsTlZQOWRBNUFCd0Ivc09nZlQwT1NFNkhVK1NyZDFscnpVUGdNVGF0bmFQQjlmTWhEWWVPWFRabVp2SDlET1pKcmNWZm5zNGM3eFliT3IweW8xYlN0YmhsN3VRYU5JRDQ2T1kzQUhraW9mbHhRM3ZNME5vR3V5dmpkd0VCdjVLNm1PR0hhaGRHdWtTWTJ3TmZmUDJtcjcxU0U3RVJaSlpVZFZNWERaTUZaWGx2SDFURWI2b3AwN0pURDNOc3pPaEtNYW1FWlhSem9BVWV3RUpGYjhEb3U0VEt1bTBjYVZvTzR4bHE0Y1c2aDZjQW5pRUtYNDNKM0RqRE1VUUxOQUlmaGplVUFWNUw3eDE4em5tc2NhTHdzY2p5aXp1WW1hSVdpV1J3OUtYVm52VWJyMEJ5dXRCcUZNdDgrcStLTndxV2s3ZmdIbm53eTQ2UXFKalp1dU5NdFliWkNWRkduTGRSZkt6UFcvRXQzVEFlMDVjV0dxY0krZ1JSeU5IR1k2Z2dQRC8vWFVUUktNL1NUWUhNUWlEVW9tYmxDNDNWV2w1VVFIMnZrMUEvSHFWRk9zakhQeUthOFpWVzJlS2xSOVVFcGJYVWQ0eGc0bDFrTmFNUDlTT0ZTcVZKaWcvTjVhcTRqQ3krQ1R1TTNxMVNpOHlraTBoa0RJR1hKOE9YSkVFdndyY0VBUFovS0dYRXB0VThBQnFlYmNRbDE3bzFITnVBQ1dTcFRBd2w5MU5XWHV6RVFrOUt2bHMrdG5JWC9WK2ZiYllKWHk5M2VwNWZSQXdtMTBhbnk5K1hhSDE3VTBVNEs3MnZMSTJIVDhnSGx1VTd2S0c1ZGtSdHF5amxZWVh0bU5PRURWUitnRUZLcTFZbVkxUEdYRjl4ckVNcm55OTYvcGdiWTlaQ2lSdkkyTG04ZHpYUDhrMEV0djB2d0xNZVVtalY3ckxHKy9yZWRLUWg3T3ZuSGgzOXU2NCtEVzk1akdJTXlXUXVuRmM4TWcxSTJRMEwra1BPemN5R2VCS3FVSmhrWG16SHFNaXFGaXRpNS9TTmNQNVRrWm5xcWdqeVBTV1ZOM2hnTXhNNVFtNnJVMkhLeVJqYjJiRm9mcFNLWEg4ZW13QW1mbFFMS2Ivbkl1WXVqZW5DbHdDTEk0L2JKL0loTkVPQ096SG5SZkJNNFpTeXgrZmVsTzliVkU4TXZmTEtKeHRQVkUxRysweDYrRjcxeEF0Q1BYcGlpZW9la0ZnelZjc2RjMENqTkFuUS9aTnIzM1ZtcVVBdmFTUEJuUGxvaEs3NmwwWmx0OVJUODFONk01UWVnTE03WnJRczZMaE1TQ3pDcmJvZ0FRaTVIb24yMENOUzZ5RUptQnhySTR4Mlh4a1VUOXA0czZob3V3YkozcVNDVkFWTmUvbGFRa0FjaEszdjUvOTlRK3RiNVJEbGRrMlpGazdVOU4yai9DTWZXY3NJa2tPZm9MRUhLdUNUMDUrNXQybEdSMmpOV0JZVXpxQ2xiZnIyU2Y5WkpvbE9nbGlSQjBqY3B5WmkvcDZqT2lKM01JU3drNGRCVFRBN210emhzdjloZzMvekgwdzN0ZEptU0M0RjZxTzNCbFhjVit6TVF3OWF2bnZvaFJaRitDM2FxWTZXcWZ5MzcrQkc0aVFIb2p1VTMxNzVJWWI3NUR3ZC9ucVdtWVc1aDlXSG90aXR6MXBBS2U0K3BhSHp0bnZwRHVqVWRHdnFvalhZdm1ENERyQ3dRVGNPZzJVWUxZMDAvbk5kZGRTK040YWYwYVpCYUo0aHR5Y1RxZloyWHNXV2E2L2lhSkwvWFB4WTMrYm5CVjI2YmtndFBubldwY1VhSk1UNGVNNFRzSTRkRkJwb2YvYW92eDQ5RjlPcEJWSEEraktUYTBWSmZrMEl4WlZ2T3ViaXNBeW1SVXE2bk40QjlFK0NJcFZHVGd2U3BJK2pRWFUxck1ZbE5UeXBsUmtJRGQvS1dMZWZhcVFmUlRwSERDa0Mwbi9KU0k1VTFlVmxZNkdhVG9Nc0pyS3lkV0crNHRlUmJELzU5ZGRvNDdxd0hXaDZMN1hFRzV1dVg1N3BkM0xWSU5tRjg2Wko4QzFPRWZSK2MyUG9WM2NMWXFpbkJKQkZhVUlGZUtIU3FveWl4RkNzMnlhRGRQb3N1T0EwQzkyL3ZJNXFKZUZPWHJ3QVY3NG9FaVRab3Y1cWMzRWhTd2xEdFpoR3pPQXh2REpKdnMrUndmMkFHRzJuWVpPdnB6ekhHY21ReFBROUtMTi9RTENDZzljRzdnSEVSZlJKdXU3U3RiYnFTWWlkTkhBcEVoTDUyWW9LRlo4K0tDSjlWTExnbzIxanJraG1kME9CZEFUVC8zSXplTWhVZWYyenkrNXNnbVk2Qmw1bjBoOHR0bkR1VkpyQjZNTkQ5UEtmTFBKeGVwU0Q5ZHpEZ2NxN1hKcVhqTktNcFd2MXBCTjkwQnJkVmNNamdjVC9QUm5TR1BIbTdrUFFDbkRaVHR0aEpVM1FQamdlUW15SXVGeThoODhvU2IxMDlNSG5UOGVQNVpTZUwzSzNrTzlKK1VNOW5RWjVwRG0wVVdRelVvQUdSUGh1N0tlWkFpYjFmcTJuNkY2TDk4SjZLZVVsVWJWRWJSQml2N1hVZWtweENjdkdEZXNRYlJIdXlkV2xxdER5NVk5OFZvWTZOTmlvbHA3WHk0bUtzSVg5andvLzZRc3gxNjVTYzN2QnJHREtnbUZPL09yRE5GM1ZjR1hhU25qWE5OblA4b2JEY091eTZKNVEwUGdPZ0hrampCSVNPMk5oNXVQdHpTYlc0VWYrb2lianNFOTZCSHNjcXlNOWdReGludzN1eTJQakxSQzYzRjRPYlB3N1J3NDBwN21lNlRVekZ0bGFVRUUrWE9TT21nNDNXbDBWNmlFVkJqRWhpVWhWeENiUWFWRW1VV1pPR3FUREVSdmJGbUhwWDZjeDJZcUIySFhnNGdadWVrc0ZaRmlLck0wclVmaTQrQUZpRmV0SHMyb3FDZXVlTFJ0aGU3aWdrOGxqSEpaZnU4bWJvNk01RysxNU9tSnQzVHJLaHo1enFnMk1RTnE0VWcyTW8yZEJYRVcrRWVQNHcwS1NzOWdsS295Z1BFVnl6aUJaMmwzNHQyY3c1aVVJQWhaSEdCcENuK05DaWYwSFBKMmh0eGhSTVhyS3c0WkI5VXEvVkQ5aVE4M2JYYU1uTmhYUmdyWnFGdHpzWTkwM0x2WGppSWhlc2pCTXV1ZWh6aGJ4cE1EMjdqWEk3dGhyVXBwemhXQllMWlZ0L1dNRmlISmFxTXZrcXZieFFBSXEyeldDUGF3SGQ2U0pKVWZ5SDVhSjhaUHRGbmNkNnROSEhTOHFmenkzQkJwTGtNMUxRdWVMQXZRSVlvd1lsOUtWNXBRWEF2eUlZa3JlU1ZYMEUyTnpTdDNhTllFT0p1Sm9vb2xUcjBsbGZLMmgxZU8rQjhoVW1mbEVzRFhlaG0vYVFvd2JPZnA5TEtvd0lZZUJsZGhtakR3V0tZL2t2UDVwd2VlTFNEaG51VWgyWmIzbjJxMSs3RWk4ejI3L1ZHTW5rY2d1alBnVVp3dzVMNmZPaUhWaGVPZnRhWFFiTnZsMXplbWduSDlrSkNzeWZkZkY1UlR6eEI2dzlyS3k2VlhEM3p6enRaU2VqMjVQYkpTelpSV2lYQksrMlVvQzVaUXFtR2R3aEViL1FFcHk0ZWdqNW5lTXB2UFpXNTF1c3R3Y2VvMEtyOWlMUlczMFdVdFpqamcyQXNkMlpHclB6TzBqY3Mwa2t3Wmlyb002aU1mOXovRTNlaXFBaERMeWJDNlBEd2pCc3AvalV5N0tpZHN0bGtIbkloN05ucmkwdk5XdnR5RmtEVnd5S0FFT2grRHFteFc5dHJDUi93c1o1cjd3eUwrVWdNcEZRWlZORkNTYUtoaFVoU28wWUxpbjB1SXBSNkRqaEdJZEFLQVlTc0pBb3VPd3k5S3FRYVRHeU9JcDhySkxBNXVjaTlydzZmVktzNFJhN2dZVDljakJnQWs4ZXozV0czRUlvbkFVeThRVkNtS0FlT0N6eDA1MXZVNm9XQ1VIU094VUUxVW0zc2lFWkVvSmNnWXl5eDlMcXpsZVV5YnY1Wk0xWnJFUHZXaXNtUWFiaS96T0pTR1lTa2lodHFqSkxEekRqNDhOdVFoeXprM0owZVZsTEg4bzJsTzd0RU1nNmMwZTRJWHdscjRBaW45UEx1VDFpODM0UWQ0dXdwT2dJQ00ySXFOZ3B2TjBRaHNocVJYVWkxRXBGcFJWUzlCNHVsTXdrSSt0cllteGxpVGp1Z1Ntc2RNVEpiRVpSQXNBNzFWWTd3NGtacUZIYWwyTlhJajQ1c1dyd1M1YlBJdEdJcFVBWlpwUkhrallGOVNXMTdNTUppcVV1NW9Dc3h3VUNmTlc2SFJEK1BreSsyTE5rTW9SYzdtajkwczlGNWhTMUF2UjErdndIUkwwblVLOFVEN3NLUTNxaThNSVVVRm1MUXIrWEFVRDNralZtZ1FWbk50ZDY3UVR2TkFxR3V6VnpXVFlsL0FSa3RiamR2ZTUxTHErRWlFYmFIYzJVdWY3V1dJclZKTG56aUpkMVNLYm1JeFlKS0JXN1AzTG1QSm9LcGpxYnF5R0xXOWcyQU4vTnlESWp1cVNUN2RUazBveVk4WkhaaXJDYmM0YXZrWnp6TENldFBHK1c2UTJZdkdPSWk2V2JBbm9FUFA2eVJxbjNvSUo4MitvUU1hUnlYOEtXMGVHQjNzMGZNelBIckltRGRCaTFDWWxSL3hKNVlyQmpGQ1l5YTlOSngrU0IzbXExaGtIN2NUYUg1S2I0VGpRQW1RVmJDR0d2NEtvekZ2WnZBN0Yra2JxOE9mNzRhMHhZUW5PbVExbWRkWlJXSkMzWGtKZ0hOWGl2czB6Z3Vhc0RVQURMRVlBc2V0Q09wczIzVGg2cXdIQ0R2V0dRdDRpNFFvTnRJbTBIVzNJalZKdFR2UHdhWndRcXdrYXZzdFBwNzd5YWdmaDcrMW1STERmRXJHWlpwM0NsUi9mQmpOL1c4V21YelZQM2NBYlg2OGsrOC9EWUlGUWFZaFpYZGh5UXVoVzZHTVFkMTFEZHdtZUpjNE1wV2FZczk5V1lrNUYwQ1VWWUhrZWdhbTE4dXpibldNK05CSEVuTnRGZ05kRzFSNmc4aGtVVldKU1FjSjlDK1BHb0ZwRHVQU1Q4R3RpMGpWbkpkL3ZXbFpJTXhWVXhwWExtRXJKNkxrbGU1TlI2SGJjRTB1ZHk3ci9TdGY2QzBLR294OHJMazJ1RDBIYUdxSVo5S0V6bGx3bEZMNlc2U2tJKzVScEk2bzNHQjNSc3pEQldoR3YrMW0xaHVQeUdINGdjMmJxeFZiSXdsRGx0b3BCUSs1MUhjTmFhTWRqLzB5T2dhQkVlc3Q4TmpIeFRXUUZBWldVWDBOK0JIS0JFUGgwTk1Wc205aVNsUkVLS2tGbTEwc0NpM2YrM05qY1g3Zmp1cU5YVlVIdTloOTF4MHczUERzb1dIdHFHVmV4M3ZQajNRcGR3dWd4TE56SDJFVHphUGxsRlRnbXc3QUFweXZ6Z2lKbFpGS2pFZ2dIUVZCUnN5Q0JBL082RXJ2MW5EM05YUkNLaForMjZyRjVORElIOUlrNnM0Z2pBU05wMjNZSVR5UHd3ZzZDQ1hsaG9QQ3RRTVo4Wk5Bb09JZ3JmaUQvVTJSdExEUzVlVTBRa0krWDd1aGRwdDdtMitjNkhNcU9uVXZjQU9mRzBQTjZhTVBKZmdRcVJxbU5WZXR6c1IrdEpoZ3YvWkZjaGtlU2Vkemp5a25ScFZLek5VbGRVQVdMbFBLTHBKRnNOWmVxYkJPemFmWVZ5QnVLYmFtQkhybi9DbUFiZkw2QVJkRHIrTUJiTjR2THgwaDYrNEI5eG1vUFpMSUpSOTl6SFE1b1FaSnljU3RLeTQ1TkgrQzdLdE1sanhVSTlIM3UrTHFhNVhsTTA1VmlmeEpnUGhUancwLytoM0c0dHI2UG9BWGN6Rm5pTFNKWjV4ano4T1FPKzFjcWoyUml4QTdVRzgveXd3aDdwamJXM21KNXlpOFFpV1gzODg5UW1iRndKV0NUU1pYdSt2ZmxWcXJXblJTMmtyY0tKYkdna1lhamMxUzlvVy9IeTFSb2tvNGpqMzIrL0VXSlQySDRqZFVrZGs0M0QwdFVIdk5vWnhJS0dvZlpQOFJPVFZtbnN5S3huUTg1OWxTUFVlVTJKenAwbnM5eWM0c3g2MlM3U1VDMCtaazlPdnp4RGJNZW45WWVYbkNNL2pHYmw3K3NmbTE3aGx4VFcxZmJiY2lVdDhLeXJSSFZHSXFZQThMZmV4a0pwTHN0TDRDWVVxNFdidll6RUlnQnFEU0hmdnJEbGRDWGJZM0w3ZUhCOHZ5UE16alVLT0x4Yy9xNWF1OUxyYmx5RWlkOHkwOUV1dU85KzN3YkswQ2R5RWh3d2FRa3lFbU5zNU0raERrVjBZcWRJTUZiZWxoTkFnREN0VjF5Q2djUmF2NUVhOUpUbHBnZDM0c3NxZXRnaEpLY011MFp2YStXWWhtaUtXNVoxNXFpMDRoT1ZqK2JuNGFUR3dzUlFhc0t1T1ZaSWVHZnpmVzc2eSt5d1pFKytadGFFbVdGT3RvYWo4SUhTOHJtVzRUNXZwSjllMnRsSFkzM1R6aG9MRG9YVk0xWklaZ0d5dHFqM0EvelR1Z1BCUnZlNEJ1dnJETndub2FrUjg5c1UyckF4Y2JOTnlpMmpRb0JDZzhhSENnRmd2Sk9aNkpWQzZXMFptcHZkaGdpKzcvOE1pRVNFTXVwUkZ3NWlnQmdCT1Ara0JKK29IenpqZ1FZYUx5S1VVV25xMTVZMzUxU1o1cUxuZEtKNUloWE8reko0Nkh1MW9oU3NVRUV0Y3VVQjRUYXAvZDhPWjBVKzhOZFlaWUJrUlhXR0tnV3NEdzNuN2F5VjVqQXVmWU43clIrSDNySVRtazVkN1FZVkJuNC94QkY2ZnR2Zkk3bkI1S3Y4a1VYMmQ2TDVOdG1WZVQxSDNpUlI3akZOeWhKb3pJYUNYQ2wySEhTWk5zNWtXNEFrV3pQU1padTAvYnQ3Ui9vNE9hSDNSTG93MG5uY1IrcGREckdTQ3NvTU9zc2NwbG1SaldCZ09vMjdXajdDK0xnTTJWaUtReDFBWEFsNFdoQnNiOTJaUFJXcEJpdDBZS1R2b24vZWtCYXJ1c0hsdXlmeE9JUHNhK1VkYWpSRmxWRWRvL001dXUwZ1FwRm9zbGp2YmxQVXBxSzNYaVl1cnIyNWx5SW4xREVUdUlsUlgxUEx5VzhwVy9FT3hNdkVlOWVuRVA4bk1BMWJkZ3gzc052RkZOTzNBZDZoYnYzMlBMc0V6eWJUSjdjWVBncm1YMktEUE9Kazl3aDlQZUdUakdiRFBteXlVQWdLbTFMWHJ3RWQ1L2x1NkFjeEVqbWVVNElZUWdpZUlJa1JkVDBteENyWDQ3QmYrSGJlYXZMNHZPWVRlTGdBTmlSclo4eXhYWmNOVlIxNFMxOEE3NXRLMnRUTndFMGRBVXM1ajlZRXZROVA5eExxbUlTR3RnS0d5M2I1WkhTTllBSWdNRFRoc3lGWjFaa3FJeTc4RTFUV2xudkNvTHQ4TEpmWlcvOEFrOURINE1FSXpRY2dnSEs1MmF4NXdyNkVQQWtJcDVqNy9HVmYwZlJOT1hSMEJ6aXVYZHhaV3dHVE83OXNSVnBxMzJtUnNwS1ZWRXRiZ29LVnJKc2JRc3dQd0E1eG9CbE53U0FrenQ4eGRSOW4wOVZoSVV6cGNGMjBockUveERTODdONHdrRHZpU1VuanFiclJqbU9KR1M1Y0dMbjNjU283Y1ZsaHQxQ243L1VudGh3dFVRNUlQbmFwRE95bXBFTUhXYVdUTTQ3L1RXaWx2UUVIeW5iZXdqR3kxblRQZ0EwV0dmYVc5aGVOcXdWakR6TC9Eb3l0SHVLTHNkUkdITUNybU54K2dGcVJKNjFmMis2bkdLMy9xeExScUtVbCtWL3A5dStmMk8wWmJ4d0wzWk1XdDA4dXZvMXlWTzJaM0ZLaTA4N3BTYjlIWFRZQXQ1MmwxZSsveXJNRit4N0FBOHRudGFvS0ltbll5dW9HMVk2NmJ6WTZzczlQRWVteWZBc3VXdmlGM2hQWm9sTWxzTitiOThNT2pMNXU4V1AwMVNVRThiZjhyeCtSR09mZTZmaUVMODNLcUhkRU9kN2NKRDhZSm45Nk8yK05kS3MxUnZ3NURiM3A1aGxiTjNJZDNNV25QUDhML05Tb1J4d0tSQVh0WTVSSW5CQ3hKWTdzakN2c2MyY01TeENPZ1ROa2hJUnlsVFpaa05PS1dTOVdaK1RrS0FaS3RWNjhvdXdHck90Qm5PR2s4SzhHNW9RbGxEUXhUNHZObDJBSzNPT3cwVitFMFE5SHFhc3IxclAzTEMyZmpsV2ZVYXNrZzhVSWZ0cTRHNm5iSEtkUjNlNWM5a0JqRkc0aXRlY3dkWUlnMFppNmo4dkdoYkY3R2lZbWV6aWlyMXptRFhJOVV6Q0hKRmc4RVByUXA0Y3l3QU85c3FkaVJ5R3Q4RVJ5WGY3ampFaEUyU0NZVTJUSzYyeS93UjFEcG1yek00dVF1TXhwNS9CbkVWQnNCUHVTVWIza0k3T1BZWHE2c25hSys3ZUNEeTFzUjBERmsxSWdIbWlmeUorZ3VLT3lVWFNhcDJjRmRyVnRHOENvTDdzaENnckMxRUh1RzR6TWh4aUgrdmErb3pyWGdvMktLcTBqLzhwcXgrdWQ0L1o5S1lsdm1hR2l1OURSSnZ5UTBhNlNNZUl6cHcvTGllWG1NVnNlbmd0bkdZRnFCYUt3YnU1cmFPZGgyeVEzTDM3TUcrYm1CbVpvZmlJL1A1bnIrY0FEdzdrcmdSUHVrdHVka3QrUitJWHl5b29OUkhFcGFyR1J5STBXZ29uWWlSV2dqSkNzVzZjL1d3VDRhNVM1aHdYY0JremRLT3RUTHVxOXBhOUdFcDdieVBJckVaUEsyZi9TcENxcDhMQVcxRTRMNU5CYXNCWkhnWFhWemRQQUYwR0E1YW9LUjVER2xTUTA1L1hDWHZPc2p6SjVSUm9qQ1Q3dmJIVFA0YWIrcUE4VE5ZbEIyZThkZnR2OEtETzV0WFEwL2UyZlJEUGJ3YStaUGtYc0p1SnltQzh2Mno2cElkZUVIaU9pWmJEbzN3cUtxQ29ZZm5ZR2xpVFR6UGZwL3h1dCtzSllQaGdrN3p5ZVhsV1Vsb3A4WnhET3VMUC9DYWZaU1NJRU05M0E4OFJDc0V4OVk2WTlaRkdKUzFvbVlMN2taOWpNR2VmR0pBTmJqbTlGV1dCaFN4UG5QNUhVSHZDV2ZGb3RwWklBajl6aXVFL255ckRVTmg1RCtXcEc2VkJhaUdPanVzU1N4a1p3QkFnZU0rdUNZamU0dGdOcys3RHRwZjZTZGIxS2ZuMER3S0ZkZDN1K3hlU2lkcUlDT0lJUlRRaEpISENQK3VrSjJ2b0hrbWZ3WXZGWG54VjllRGczMGRTT0VSdVNhb29WMWc5UDc1aVdWVUtFc0s2dHAwSDRzWG1WUEJPeUQ0VkQvTGtZTE8xYTdLUXdnMTZEMUNnVmdrZ0E0ZjNsYng5SmZaOHhvU0NzSVdxT2w4ei9MTHN0MGE2UUlpZDY3Q2tPdmlBeVlvOW5rRFV1WHZlZGRuVWwwcDlTMG5uaEg3M1RudTBGU1ZtT0ozcCtBdHRYOGRFSWZxMG9TMUFLQUMydFZBa2RqUkc1Nm1jc09xa2J4VzVJNEhhdnZtK1BORW9CcmExMFZBRnFkOHRCZEFXbnpGa0Y3TFZpY2svOVFOMlRacVlXVi9OaDR6ai9MZ3VRbzFIczVITVVld0Nzc3h3cTNiNlJsRUNNN1RpaWM0WnN0YWp4UFBqSHRmSEZzcHJKZWhwaEJudnRwMlpVQitJTWZsRnY5Ry9GdHIwMU5XNnZsN3J3RmptUDVNMVdHQ3J5U05MTVZZR0lndW1mdm1EOFQ4Yjg4dkpsY0FsOW9ZV3Yrd1B3NnhCckhCTmx1ZExiZEVWRU5jQzRzYVBMK3huaitWQXJOL1hoOEZ6N3RnL0NaSFlFV05ZT2ZPS0FPTndCNngxQU9IUHF6Z3JDZFQ0emFlWjlzTGhDdlh2M2NUQ241Z2J4bDhWc1RBOExhLythdmJadWdJMVRYazFVK2wvY2s1UERrd2lkQ3FJa1N0c3B0bFNaUStsY3JsclI2SmVOZkNiL0JncjlLTURaL01Na3FFejI5VXZ6RHJ4VHBmUlZqMm02TGVnODdIcm5UaHAxZE4rYXR6N1RhNkpiUkxxUUFHZUdrRWJpQWtGbmlaTlFud2xOc0ovbUlxRzU1SXVBY3ZDazJRWkN4N1IxRzNQOVErMDZVV25Rd29TMklObmtGOW9oL1Z5Z25UVGVHalFYTlhHaWVNZk5QenFmb3F6eTlJaU9YVHM2MmF5VEllMDVKNDNvWUR0SkFJVDNvRS9EVjF5NWVPcTBKaHZZSlR5MW5BZGxKOEJId0g5dVRCelBYZ0hpNVB3dUNuZ3duRjljbzB5N0FMbHF0U3RSWExTeHlTSVVhUjZ1dnI4M1BSd01XMXFBZUZ6bE5VMFB3T3NETkNoWTI3VnQ2cmdodUk3bU9sU1VxR3hrRSszMXBVWGNKcjlYd0VBbHJJaDNYNW1FTHdJTVMxZGdUNXEwUGl6ZVlXdmtmTWwvVkVJeGtKbGlLOXk4UUVMQXFTVkl1M01ocmdqK2dqa3BuRlE0QUlwOFJHN2NEOFprRW1pbFhrMDE4TTZ4TjB2WW0vVVZyU3ZWK3I3QlNBVnhVY2ZqUVhnSDdsMlJCQ0pmcHRNUmRGMUZrYkwxUjc2OXhueUt2VVdvZlhVZ2VXaGxidy9pTHNjRTZFL2V3MEl5T0RHVlVFcXdUK0ZXM0o0YW55b2pVUnBwTnZIczZWL2xMN29qbUVrYlpnOU5uVnJSd0MvR1JZMjd5QUl0WUx6MHRUa0ppSU9ZbjdxeEF3QXBuckRjWGlHZ0g5eEdpbkIzWGhYZU03T3A4aWdNZ1pwOXFZY0lRTzhLWHpnNVpTOGVtUVJvZUcyU3g2Z3I2Z2d5SUhqRll3YTlEMzJNd0E0SnhJRkRiYmVaZUhkd1JLaFovaWFHVzZ0RjQvZE96bzd0dTFaQ0I3T1EzVVlQZnhaMFh0bjU5ZkZBR1h6d0pWUkZ5ZnlTV3I0ZUR4WVR2emJFdkNTaXhjcUlteE0yZ0lNaDB2b2ZET1owamNsNmdtUmFYZVVWQkdZbHZwRmJFV2lDRklmTjFoRk04MDRmdHN5UUtPQUJITVBjVWNxSVhRa0FmTkNlSjRIc0IyMHZ1YjBZeVg5TUdnK1FpTkpVckU3Y3dXa3I2SlY2eTlCbms1MS9xemJLNU41SXgxZ2xKTThvN1VsN3daOHR6THhsMmRxTm4zV3MwYll1dC9NTlA0anI5RjJtRE9Za2dmZ2NWcWJsN0FRRW5STlBxOS9MR1V1WUpaL1FQejZXZGthY3VjKzFNMlhHNFpvZEp1VDJLTFExZ2VsNXErU1E0bFFMTHpraHBkcVptVk16ZlhyOThhVjMrNWZ6YkpKSTBQN2trQzU5MWJjSzJSZkNlcHNXTloxM3p2Z2M3NTV1ZUVOd0VJNk0wWGk4cEJaZCtrOVF4K2JnTXI4RmpWcEoyN0srTkd4ZHlkb0o2cXB6VEZzQTZVckEvaW9mdHBqc0ZsZ0ZCdmtnWkZLNGIzVXE3VUJVSkY4LzJTeldTNnYzUXVsOGFTZGdFVk1reC8rQzE1QUNseHY2YmJEM0d3b1FwZFNFRWxiNlRoeWgyQjVuV2I3bzBSOEJiZGRqbWlhVk81N3BXZXpXa25TRm9wZzVEdGMwSjVYU2tuOG9OWE9LbDZoYUwvR2psVVBRUmxpY1FYUi9vb2pXeGtWZkVCR0FVVDJDZmNEQUFyNGhhQWJBOGxlRGdmUkhBMnNJMEkrOXV1SUVxN1dVZ1lmRG0rbDlmbmZBVE9oWndQOER6TXNwVlN5cnJsanhERjE5NUc3Y3NnaEZwWUZRODBCRWpaajNvdTJ5TVJHbjlLN2NyQU5uUUZGQ2IxemxZSFpobmRNMUVRTnpCaXV3U1ExV3JuemZiZE1jSzFhNHNaV1IrWGtab1JQaEZVZzdSN1d0WFFYckJwbTJCRjAwMDVJREpTS3J3ODRCZVFUc01BR1lVYkVVREJtNGg1L1F3MklXU0IzTW1tSWYyamI4SENHYjFhS3EwalVrTHhNcmx5akJGbjJ6aWpMYjkyeVFtUGt4TVpnei9QakJicnFYNTZQdG5pMGFVVjk0b2FCRU9ZVngwLzVyY1NXNHBSeDJ6QU1ZNjJPTTdXRVZ0WE1tU1JsUkhRRWhlNzY4V3BRTjJGTnhMV0FUK0c0UFhmTG5qMjNhd3I3OEtxUTFwSVQ0OENKcHVOZStESnFyeCs4WjhQM1hVdTIrem9XZHBoa0x6eUhia3Z2RkN0dmowbVNIUFhscWlIT3BLSTc2bVpMRWNoMWVSc1JucEk1N3NDeDA0Uk5hOFpiZm13bVhvR3RkdEJQUDFQcUM1azNvT0tlYWExenR2OThiM0wxZnZLMm0zMW5oUTA1WlF0MStxK1grMDF0Vk9CYlVUbjQvaTZTcEZxbURDKy9NU1dzeHRJRzRSZEVHYytCemdoUVo0ZjBZWXhQVmlRWEtqZ0Zvd2dXSWMvcWUwajJIMy9YTWJRR0ZRSFNSalp2d0lqTmxSVkRUNVluQXc3dWhnWnN1NXZXUi95NUkwQnBScXV0U0pvUWZOdDhuSTQ2ZkhhV2Q5S0JXZE40aEZRK3RrMUFlU1RkdU13cEIwUmZXTDlQOWZoZlQ1c1RYdXJwMVJjOW5WZ3N6RFQ5bE1yM1MydVYvSlh3RU95MWxBemJOQUk2eXB3Y2tCQVJ4UFZJTXN4MFNXSmZISmowMldhRnhNRDZBMjByNFNCcFpWelNxbDZRU1FiaXp1MG5rT0RlZ09RYjNnVGZTQXZCbW9uUkJSMjNqeGlIbzNabUVYQmhhZG5QWDNiaVltWkZ5NHdIMnRvRWpiZ1Rmckswd1ZkNGdQUHVhTllMLzNWS2FjUzJYWmpuZExyYlRoZkVVaEVPa2paNHlsZUgrVWlQMkhoZlFsVUlBZXp6dGdXT0g2b0ZLMGkyTTZUeko2NkZaeGs4STU2cHpKNVcxV3pBbG83SDNLNkJrVGZHSTVuNGlibTB0Wm9BdzJnY3VLSUE1RTFQdDZkc2tiTTI5TkFXODROUlVmUFlGWlNNT0VnbGtBTGkvMTVtNGFSZXpuQUJPTk16SWhGbTlSUG5VMlRva2cwL3QxcHh0dm12dXBMQlFWL0FMeWNsNUhQK2tQaTg2OVJIWFUrR2RBRnBUczZ1VVpBUTRIbmF1RGZmSTdrOUY4OThsQVExWUVmcER2aENMM1VkaHlBZWtENW5ST2UwaEJpazFuV2MyQW1Pb3BNaG1HVkpVR1BtUjZNU0FtRFZTaERQRzlSRHg1MGRrODhTdFIxN0lUTUJZTDA3NUpnUUVRdHNEZGJYSW5yTGZEYXBrUEpGcFRWd2d3NVFxMVFMOUV3dFhLZEZINS9hdTlQRld6cmt4SURwQTJzb1NjODhxTDBPci85QnF3YVJjZUhERVBwOS9iVU5NWmpuQVVKbjA2eTg0VWpUU3gzbmNUanJDWnFHbXRPTDRid2w2U0RydnZkMHF6aDlzUHBmNlZzRnVSd0tCZFU3ZDVybXVCYW01ZjllU0RVQkRQZk1YYW1lSzNBdUdOVkFCTUptVDlremU4NEdUTU5sNk1tby8wWnRlU2xSWk5OT1NpYVdhZldZeUI1NXZmQmVKQm5uRVl6dTZ5VDdOVmQ4cmRwMnBpNk5JWFl3aldZRzhwVDMrdmxVRlorMmJPZE5GeE9tSHlwSzQ5WkNtMjN5dzhZbVo5QVM5eXFObkdPaEVObTByR0JZUWlKYWlHWDYwY1FOMjA2UUtaU3Q5SFBmcHRTUERTU0dYMnNCR2NZaGVrb1NENVpsTHhBdjhmaDRBK0xXZmlINFhndWtVbzVoaE1ja01rMStSYS8zQWlnSTNBQkNsZHpoWFh6cXlGcmViOWZZaFd5UUpibTVvejNNazU3SjdxeUErL20zdnMwYjZnRzJrMmtINSszOUtpMlFuaVBKcDkwcjVHeXZWSnUxclFqL1ZLNjdDMm43VmJYQkN1YzJ6OVBJWTVwNlBUUWtTbVZ6TGdKNjhRR2psTVZnRmNJcHg1MEZoSGZ0SnZCYkttU2pKdFppNVExVytaWnpOa0dnays5Mzh0NW15VGZTR3laUkhmZ1VmZ2pqYVZyVnhoQ21NaGFsYWExUXlDZWczNWZuZjBrVDV0OHEvdzlSdEdoUHh2eENqelE5TDVRSnVncDZYME04QUxGOTZzNzBQYksybnFTRnJnQWQ2eWlqbmZLTzBxNFJrcGM5RWFxRUpNUTZlUlpDSHllc1QwaDZrNnhlNVdQYjE1Q2lpY28rRWwvNUFLS1UwU1lMTWZwWmdKaVFpK1hHaUhSZDBTUVVkREdPR0hrUUtoeTJTT0o3OEdGMzJESzZCQ0wraElFRDJOQ1pyMk1oa0VDVDhSa3JGaVc4WVQxVHJheGEyTUQxQ3dITHVmOWdwbVhSY0xDRzQ1L0tpeXNOVVExRGd2SUNBUUROK0NNWkZZRktIa24rUnZzTnpZZHFHbU5zOE1rcThLeXI1SnEyd3ZFVy9SakJqK01tdmw4L2Zmb0VRTDFITUJZZlZaNHpqY3BoaWZjeDR2dzl6QkcrSjhkcjM1blVKRzZlWmI4Rmk0Q1lFNi8vUzNsWmFqSjc5MXZGL2FMSHRtUllCT3llaWwyMmVjeGJpNkJ0elFOZFhtcjNmS2dUS2dVRWpzbTdZMzNhd3RMK0FjcUxOTW5xRDEwbnFPS2J0Y0RHK3N4MFp3RmkxSTRuazRjTDVWbFZ1NktFQzdBaXVxMGJPbmcrM1Mrek9IelNLNVp6R3drOWdhdEhiaW5IVDd2NEdlc1U1UUJzcTg4V1RzWTA5YVFQZWpzYkhWWXV5b1R6M04xeUs4eldmbVorcVB1VU9JMUVyeFJoOUxHamxFdC9heFBuY3JaNDN2RC9FTC9BbGYzeG01c29tU2NXRjF0blEyUm9COGUrWEVRaGIycTJvbkRDeEtmZWlEclcrQXgxckJROFNESm4vek1jQko1VWtuWUxFNW9SdXNoS1pNQm5aTEdib2V2ZUMrZk9nOWtnMzJuYS9nQmcxMndSSXUyeXlXelpNMElvUUZXVHYxV3pKdWgwNUZmc0Y5bmIxQmNHc0Fuc2VmdEFzajRYQkdlcStjdTJONmsyNkt2NCt5Wm5xR3EvamhOQi9VYnZOTnVHM0dXMmh5M1NUVk80YjJCSmVONjJTK0FndjVvM2t5ZG5keWwxbFhueExVSEhDdHpSeld0UTh0Tm1hRFpRWG9WUjh4NjNXVEh4aEJ2M3JHZTJtcjY1K1pMR3hQeDB0Z2k1UmhoVzhrN1lNaHpBWE5QMHFxMkN1bWVacW9JZ2RYekNaQ1VFU3k3VWRDbjJmYVpjQ2pPYklRMEJudjBaTnlpUXBlUFFvbzg3T1FMMjdjK3Jhbkx5MnlRNEhDM1JuQUpzSk43aVN2U3B6UnZzQ0pCZm1SUVVWUW1YeEQrZ0NNWmxnSlhiZTZGbnF0NVFOb3h1d2lXU0hhTlJzODVMWHFBb2p3NGI5TTVSVk9OZDZNa1lsREw2bXR1K2FBZUZ1VmtuK1A4MFY0RS80ZGx3L1VZN0hDOTZ3QXUzMnZlaWQ2Sk9TKzBaUkp6WXV1dW9HWjBpczEyNm9UQ2hmbjgyUlRlckdXUENNUlFmMEFUUTdtdExZclpFNEhNWEpyRWdrR0VTSmx6ejlha2xHRXVSWlo5Wi9CbmtWRWFDS2hSR2h3b0gyUmdSOWlBdW9kK3owczBRdWNUaUltN0xyc2VRWEF6RzFiQ2M3anZCVCtCMExzY0ZLeTJIRnRRcXltcStwMWdpK04wdVA2MVdLcGY0MUNZaXRQRGxnNDZWWDJYSEZRaUtSaUpKYTQ0eENNZ2pvdFljamtzSkE2MXExR0krNjJKa2VwNVB3OHhickRzaW5uL2pYYlU3NnF2cXY4Mm5hcTczR2NiMU1yd1hadUhiNzR6ZTN4d2I2NFczMWZhQ3RuWEZaaXlwT3ViUnJZdmlreFhHci9NVHZaNmRoZ0JLZTBUcWhONU04S1VKM2JVYkkrZXZhVTVwTDg4Z1V6VmFVN0gwK1l5a3ZHNDVYQ21vdFg3RU5obC9wSHkzOUE0d0JscFZyZDlOQVA2dDU5SkQrZWNWb1VVY3RKNTlQejRzZVJYMlMxb0IzNFlIakdhbTZ4UGwvVThmM2czSzQwUU1YejhaV3pkRzBKOUV0L2g2dE13SmFzcStaVTlORjJ2cjVMNVNKTzJ2cGRRQkRvOGdoaXk2K1pHQk1NOTR5aGNlN0hBWW8wamFjL3U2QjNKdXYwcWIxYklTYlpibUFrS0QvMElqOXpUQUtCd0U0a0ZoNHZkVUd1U3huRnV4b0dmMVMwVEJMc0FaK3Z4bW0raW1oV2ZXK2k2cHJKNmM2bkZtL1hjN0FGVzFmZ3hlVlBaNkxrdVhtNnFPeDR3S3YvT0FNL2RnRFlQSVV1ang3eCtrUU10QlpLNmkxeXc5UVQvTE5sQXR3bnVLdWo4WVRvVG9zY2N1RnZxd3dQS2VxTmVmQitsR2pMdHlXTVR3M0RMeVQySWo0YmhmS2dSVllRV2tOQkJWUXJCYU1YaHc4V3A4d2ZiVXIxZGNGd054TDJHZ3dXVEljK3BIQ0dxbjQyZ2ZtOUpVTncvbjhiMFpVSG1ucEpOdjJDTkI1MjB1Zy8zUlpIL2NmbHpjTENjVU9vU0tQL3NSRC92SXNxRS9JQWJzTWdRRlpVWlVjOThadERQQmo3WFBHTHdvckFib0dycWdONnlDb0hKYTFRMEFZeWZ4dHl3eE9Tek5idWg2Q29zZHl6SlFudERsSDNkQWFFVXNBSWFXR2RkNllDeWlVR2FwSysxbU1XSEFCaU5LSkxodDRkbFlKOTZ5bTdxRnR1NUNWWnVUSnpNZzlaQ0hMb1IrVHJJaTJPUTl2TUFuWFhsck5XWXdDUEhPcFpXN1VoQ28yMFJIUHFWQmU1UDRMOUE0UDI4amV6UEgzRlFJb1VoWjFOUUxFdDRoM3BpV0Y3a05mbUdlSzZRR05ZK1NFOW9UYTFNdnc3cFk4NjNFbUhNNlFaSkU5Q3FMdGY5aUlJdHZXSXRYb1VFZEg0ZHVtWUJFZFloa3J4ZTVIcW9RUkladXpUNmxyNkhieVFGblRjaGdDUk9EeTVMTGhLNktycUhGd0g2RXVDY1JaUTczc2hDVkFOM0k5ZnMrWVoycXVtdW1oak5jMXJ3cWkyekt3UDV0MzljV0p5UGJyeW8vQTNoaDhaQ3oxS29pZVlGNTB2Vi9nRUFqcnVrK2dDeG9uYnNtRnA1QTBtNVZWRTllNC9UT0ZWR3JBcG1TL012a1N2UzIxejhFdXgwK3F6d29VdFBGaWRhR1BHVHY5REU2d0NFRWxOTUNZY3BHYXFBNFlzZTBDNzI2d1g1OXFtQ3I3dTcrbUtLSUxnWU1zTzdMQmJKSW1FRDhyNDh3ZGtZUVBBdnlqdm04YWtaS1FsM3AyYzRrb3VYTTVFeVJjS25BNTAwUDFIOHM0QzdUVThQMmN3QVlrYTBhK1VRTm9DUkxzZ1Q0L1dwT0pWUUQwV1g4a2h3cEJlMFJURHprUWFlVGNyZ2JzTUhiZWpzY0x1Rm5UYVF3U2tKNUZHajNJaFZrWXYrQUkrNHVyVTAybjhPdlNQMFZsZmxvYm44VkZQb1JlZG9tcXB4L3dRbWFFZXZaQUtjMGR6MjVUcEFYTDZkV1BwZ0ZMamQzWTdaNXd0eFU4aFJYZ3ZvZEsrUnVQRmZib0x3KzhZL205SFNWSGdmdXF4M3lQUDlCVWlBcHFLWDI4bVdrSWtuczN5Zis3SnBxYzB3MG4xclZISzgwNVlLTHk5cWlMZDQ1djZUVVNhTXR3VzlKOEVuN1U1Zlhnc0x6c0tqUEpvWFd5NmJnUVlyMGxXMU8vMW1XOEwxeENYbXVxb2ZEYXFmNkFzdGhWYll5ZmNRNjVYdXV1YS9HZnFqci8xS3lMTFJHMUI2RVBJeENkS2RSeTN0R1c4bS8wT0psMlU0aElvVHFIOVJ2VEs5ZkVMRnM4R0pCWm16M0J4d2Vobm15b0FhTXVzL0tDdFUwUzJXSVpXbzdrbnVuMitTTWJzTWNES0E5dUVqUkRxVUUrNVkxZG9UQzQ2Zy9vM3p0aGVkVFZWK1pubno5T05vVlU5cUhqRXBrR2Q5SGxad3lML2NFSng2ODJibEdlem9ISGtUVUMwRkt2MjhEVUNTQ0ViQlBIb0dsTVhFUkU0SXQzd0hTaExBblB4VHBMQWF1R1ZsU2t0KzRwSS9UMnE1YzJoeXZCeGVOVHR5eDRsWGRhK3hyS0lNcDkxakZpSUZ0WHFIb2luQTZyVmtnZGZsQ2F4aUlESWx0YjIyMGN0bjM1ZzVVZVFHa2FJbUJyZS9Vd1NGeHVOcS9ZQUFQQmV1ekZ5a00zQlY5NVNpVDdrL2cza0p3VjVRREdSRFp3eFFsTTZ1WExvUlZuT2R6STFGODRiQ3l4MVlaY090em8zWDR6REFKRVdib085TmdCbWVGQVpuMEhVRTRuTVU3YnR1TytVaGovYjhZQU52UVBZRG9EelRBZzUvZG42VDZwRGJBRW5rLzBrNDNkOFNiTHpQamRibDM0VlMwVTBzTlpNUGpuZlk5ejRwY2FOQU51aTRnaDRINU4rTTloeWRVUWNleUU2V2ZGT1ZpbkdVdWFJSlJ2ZGpqQ3YwYlJLVkpjQ3hHbE1CeTI1cUExK2lYOEpmQ25pNEY4TG1SV1dKYkdUaG9xZGRqeHJiS255SWc4aklxYXY2SlVSVndON1B4c2tlTWRqcVZVcng5bnlhMWV1Q2puSDA1ZlR5dXhMakdIOUJuSWR3RXpOVmtQWW5BMTBMMjFnTHEyQVBMeEVKVHNvY2FiZC8yNDRQVS9ockhPTjZBZm5VL3IzNUE1U1o4c0dFZytCUTgrd0RXT0JPcnVZZ3ZtQVZkdXZxRzlnQmZSWHlpcURFclVXeWxVWTBkRElyTGp6WjR1cXpQOXNzL1FMQ0k2emNvajQ0N3FwK2gweHlMbGlHRUNMTDNXdnlnM1l3WTZTZVZITnREOUtqMll3S3pFY3o4ZWxJdmx6azJnNkZtOVNhcFlBNWxjY3k3UXlrQ0E0eVB3MWZwa2JJYlVxemd1cVQzV2VmUTFOdFR4TldSSmlnQTMyYURnRlh0NDIzVjRFQ3FDc1ZJZkdlMW5YVzM4WGpGcEN5TU5BR29ZQWhVS0gyc1dQdDlva21KMVc5alhXWnBHZmgwcWhVTjZhMGw2SjZYalhRR3h6N0xuMEQ2Z2o2eUlnZ3RNRFJtN2hSTHRKYW1hQndwUWg0cFh1NFY4ZDNxdkJseXFjblJHNkpTdGlwTGZ2M0YyQmo3NjkxeHMwYVp1SVgzWXNjc21tVHBOZWVUNmEzelZMZmVuY1pOSXRMbnRWditSUlhnaVBKT0EyVFV2MXVjb1VYanlnM25aN2dza3lEZ3BUTHZJSm1WRVdWVXdSVWNZa2paemQzNU9RcVhkai9aSjRxc0VuTzlta1piOWZ4bFB0VDM0cFpZQnRKclhjb0g3cm9mWWxkb2VXZkUrOVloN2tsNFkyOHRJU3Z6bkIrYnZYUTlpWnZ0NE9uL0tLcHF0UTM0ajBSZVc5b3NEeTNpK0IwNGpmbEE1YklNYnhEZnpCS2RreittL2hQOVFsOUNyN3poVWFjK0l6Z2pqVlpxa0ZlTjBTRzM4dTloZktRRC90bHh5Njh3T25DRzJNbzZFdFRZcWFhNGRCeXVmSWt0cENyTFpzQ3c5UitzV2NEbzlQRForVGkrdjZOM3hHVDVFL0x0K1E2c0lCcDU5RjZEYTZuOVFRUkxYWEMweVA5VGxQRVAvTm5POVlUNGEyQnZENkl1Z1JpMmR1RTlhSnkwM29Nam1CMWVHZW9QcjR3cU13dGNGdVE4Y090bE9KZVNvSHU1dy93VjhpNS84TE01d1dTWWF5d1c0OStpUm16Y2JzMUNTSDJtUDFVdWtVZW9pM0hFQncxVEV1S1FMWW8rdDlhczZjTmZHZndtUjFabjFJK05WTVRLSXZoOE5mT2pKTm01VSt3R3N3MGJQRDRKUW8wZWNUcDNOc3VBenhBMTg3cjdsTUp6c3VEdXNtVzAza0p1QmZIT2xhY1h5cHhyRW1PNG13alVtMlhxUEZTTVdpellBUy92d0JlSEhFSm1vczU1by9uMjlQaDE2b1k1dHRUSTRkdk9tRXdDVmdZYnptZGc0M2xGdVlpaWhHazRveXZpWmE3clZWUmF5ZU92aHpqMnhHTUZUMFo2akUvUXgxUjZTUlRXL3oyZGl4QUQzcjdZSE9ROUg2TnBvc3U5dHM5bUN4Y2pETXI2c205cG1lYkpTcXB4SEYvbTNqMi9OUVRLdVU3TFIvdFQwdnhWbHl0VXkxdGh4VXdKSC9OZ0NFSlNkM084OUhGaUI3eTZHMjNFQ2IrTll3VzRDYm9WS2dlZ3lic3BZSkZMem1uNllaWUNjVWhFTWJnZG9XYllNaTVkenRZa0RTY1BiL3FLZWVuc1BPNFdVNDRENWxZR2d2c1Y2VjltYm5PNFhpREEySW1VeTFtTEdhWVh6TTdqcHg1TG9Ya3R2RG9OdlRwUWp3MFBRWDdOcmY4aDJIWU5vK1h0MzdSVTMzUStZQWNRMCswMUNyc0NjTlVTUUxnQUwzNXhsbjR3dHg0SlVsNFRZamF3dEZpcDB3ZklCZzRLbjJSRmlUYWVvUDhkdWNKbGVyYmpKVHVtVWdiemxjQnVySW5rMnNMMEZvVGYxV1RkMERLNkxZanFyNWtMaVlaTFFsU0xYY3d1aldiNU5FcXlVcmdMbVM0WXZNTDlVdDJmS043QktsQnB2SHI0czdQbzZPQm8wd1Z5aEpTRGF6aXJLbWs4Tlh2YnhpVDZyUjJLMXVHclFiOUwrSEM0THVkc05HVW1FZWxZTzFKdDZGdkNLRXVJRCtwc0FGbHFteHlwcC9lYmQ0OFJibnozdnk2UkV4QWRIbi9xaFd5MzRpbUVVaTZ4OVpYNFVYKzJxWkNQWWhMdS93SjNlSHM2SkF1SWdtdWs5R1Zid0R0cE85OVN0M1BtelFvRDNLZk5rWVBvUG1VNUd3eHlkOVFLamRONk11TWYxMVp5bkFUSUZzSDcyMUJVRjdtSCtkRWdxVE55T04wL0RoTlp4M0ZYMndiWDFLWElmQ2NnbzlydXNtcTV4d3RUbXB0NWlNbE5HQ291bkR0SEtORHdHWnorSnZPY3NPTE01QlE0TjF4VEU3Q2lTRlhUSVk4RlFMVWNERUVqazlmRi9ObGp3aENsTEhWYXNlbEF4L2ZrYndJcGRnWDZqT3dnaHZaa1hHSWRLNWxuSnphekhuMzMraWY5NlZlQkwwc0Z3WW03a3lURk13L1Q2VEdTMElVNm1vRkhkdnlhWWVNcFEwc2ozNDFzSlhYN29jeHcxK1RDYjFsTjh2SjE2NEI0MWJETnpXSnh6aWZwNVlBZ00wUXFqUU5iYmVjYk83aEFFbDkrVGMyU0Q0clp4d2tzZ09Gc3dOSkphdG5aQUF3dGF4emtLNyt3eXAzSzBMd25ocVc4bEsreE9NSXNRT0ZsTTZOYUdxUkl4WDJDcEZDeVZUZUtvRTJmZHRHd09Memd3dHhVUXMyeVpNRHdQMlRhSlhETmVEZHJjY2l2NlVKbE5IUG03ZGs5K0VRbllkYjdEa3JBTk56NXQzS2krb21SVkYxaDA2U25ON3dybFFScWJZQVl4aWxDNnp1eGc1QTVndm9uWEY0ZnBNbzFNVkNPUHJmQ0VHT1N5ZEs1eXlxVG52b0dLM3BQa3JsUTIrSVZQam5rOHZpWHFYcURhaU9JREF1NS9IQWlMVFBrT1dDZU1iSWNxeUtIWHM4SDlrRTFQU21sVkNoRkgvVGp3VXVEUi9tMkFOb28wN20wamY2TVNtVlZhUUtPa05QekY5bG85a0pwdlVHR1J2d2lINE1TaVpHTUYvQysrUG9MbFZkS2tvVkRpSXUwUVByVHlSOE1PZkxhVUZkOFozM0Y1MFA2dHVwZWZSd2I4WkE4UGp6S0ROWE1PYVYxU1ZHR0p5TzZrZGQ1SWs0SWQzL2wvRHhiOWg1RGt4MFlzY05WdURtOG5Qdi9UK0J1K0QzOTJoNHJ3Tm5RcWNvQkxTMlQxc0lha1J3YnIvWUkwNHRTVUlYNVFxaTlNS3YrNWhmUFFBQVZ3RjRKdWthbTFJdWVqckwyU01jcUdWY1hMMGRMU3N2ckp2VExkRUhHR2JUVDVrYXZ1eld3OTlFZHp0TGgyZ05xKy9JUXFIbzFWSmV4cFA5Ly85a0FBUUFhQUVBQUFTSUFRQUFQQVFVaUFnQUFBQUFCRVFHUFFBQUNBQWtDQVFFS0FnQURBQmxVYUdseklHbHpJRzltSUVacGJtZGxjaUFvTlNrPTwvQkRCPgogICAgPC9CSVI-CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24-CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I-MTwvTWlub3I-CiAgICAgICAgPC9DQkVGRlZlcnNpb24-CiAgICAgICAgPEJJUkluZm8-CiAgICAgICAgICAgIDxJbnRlZ3JpdHk-ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8-CiAgICAgICAgPEJEQkluZm8-CiAgICAgICAgICAgIDxGb3JtYXQ-CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24-CiAgICAgICAgICAgICAgICA8VHlwZT43PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MVo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU-RmluZ2VyPC9UeXBlPgogICAgICAgICAgICA8U3VidHlwZT5MZWZ0IFRodW1iPC9TdWJ0eXBlPgogICAgICAgICAgICA8TGV2ZWw-UmF3PC9MZXZlbD4KICAgICAgICAgICAgPFB1cnBvc2U-RW5yb2xsPC9QdXJwb3NlPgogICAgICAgICAgICA8UXVhbGl0eT4KICAgICAgICAgICAgICAgIDxBbGdvcml0aG0-CiAgICAgICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5ITUFDPC9Pcmdhbml6YXRpb24-CiAgICAgICAgICAgICAgICAgICAgPFR5cGU-U0hBLTI1NjwvVHlwZT4KICAgICAgICAgICAgICAgIDwvQWxnb3JpdGhtPgogICAgICAgICAgICAgICAgPFNjb3JlPjc5PC9TY29yZT4KICAgICAgICAgICAgPC9RdWFsaXR5PgogICAgICAgIDwvQkRCSW5mbz4KICAgICAgICA8QkRCPlJrbFNBREF5TUFBQUFhK25BQUVCQVFBQnI1Y0g1Z3djREI4VUFJSUFBQUFBQUFGUEFFQUFEd0lBUUFJQVFBSUdBQUVCOUFIMEFmUUI5QWdGSFFGZUFhc0FBYThtQUFBQURHcFFJQ0FOQ29jS0FBQUFGR1owZVhCcWNESWdBQUFBQUdwd01pQUFBQUJIYW5BeWFBQUFBQlpwYUdSeUFBQUJxd0FBQVY0QUFRY0hBQUFBQUFBUFkyOXNjZ0VBQUFBQUFCRUFBQUFhY21WeklBQUFBQkp5WlhOam1jb0FBWm5LQUFFQUFBQUFBQUJxY0RKai8wLy9VUUFwQUFBQUFBRmVBQUFCcXdBQUFBQUFBQUFBQUFBQlhnQUFBYXNBQUFBQUFBQUFBQUFCQndFQi8yUUFJd0FCUTNKbFlYUnZjam9nU21GelVHVnlJRlpsY25OcGIyNGdNUzQ1TURBdU1mOWtBQkFBQVVWdVkwbEVPa2RTUWxRd01mOVNBQXdBQWdBSkFBVUVCQUFCLzF3QUUwQkFTRWhRU0VoUVNFaFFTRWhRU0VoUS81QUFDZ0FBQUFHdUxnQUIvNVBmRXpBWkx5T3RIQ2pYR0ZmenZ6WlorZjF4dkU5cXc1Z01zVWtnSTc5WDB1LzByVFVDY2RNYXZwZ2xtdDExMUlXd2V2VUpYOUNBZ05lQVUyK21XRFVBMkNXK2FHUS85S0F0Z1BGdzk0UGFiTUlzZldNdU8xTkNrcVpyNXc1SFBwNUJZeUtBOFZDdWVTQmkzNEkzT0hHQjMxNVZaQ0UzNXhlL0xlNzhDZ0FCVCtsWmFIMjh4RXN2d3BRWVc4ajdhWGxYWFJ2UitpdzVzSis3SVVBM0U1bXZmSTFjWFNOSHhVaFlIM3dZVzdZSHlldnc4R1g0NnowNVJrOTBZQlMyUHVwdVFhRnJSMWtlc1lqWlBheDNra3VwNENKYmhkT2ZxZGFxY2UvK2ZCVlNXbFNBSitwdzRRM1RjZzY3clAzSzRiSHBvaGI2aEphQWZxaFpSVkJPeW9XZElxTXU1TFNhMjlUazRRQzVrTHdRYllJRnFYZXJKOGpwU1ZvK0dSZTZDV1RkSEp1NTA0dXFMamdKV2ZSK3Vua2RpSitMdHEvQ2NJWWFrSjFMN2pxMUNmNHM5K1hKeno2Y25hTDhpTkNacEl3YU5NQ2VaZjV1SElhTzRjREpqMTZIMUZaS1lXWXdpdHErMmNURVJRQ0Q1cEtxc2t1SjFYbjZxSjVtbnlTWjUvUHd2dllBR3VsanpKcjhZNytNZGZNVEFQWmdvcU0rODhSWFQrcE9WVTZjMHVKUlV2WmdKMEhLQjRzR0QxWVUwRkQvY3BoZm01TEx2ZVRQcHVNYUN0ZmtUeUpyZDRja0orZnhsdXdJZ0N6cFRPVTdaYlJwQjJXS0hFWjRFQWtIMHh6QzF6aElDYzhCYkRlTDhIZG00Y24vQ3IvQ1RRdm90dStYSjJTZSswYWphUExMU3ZDZG4vMHVXQnR5b3M2emNSd3FFYnBCcWsyR2JVcHlsMFFMT2Z0RE1aMERqUEs5MHR6TURXQmd5VWNvTjhrc2hkU1RjSVZOSm04ZWE3TCtHK0Rzc2xNSGZsOXlnU0Rxd2lvOElOM0FEbitsWk5UQXRoWXdrZVRzTWFiaDVmMlpoY01LY3BFVEk5OThVNFVKNHdvdXlFOWIzS1pxWUdTbm11STd2ajlWUE5ZbjZzeHZRS0ZxQjVhM0F5UVBSeGpaTkFpbm5BODU4OW8xckJDWC9pVVlHaFQ3QU5vSjArYkd6SjFBaU1WUi9XVThPTUE3RVphQTRnRGM2L3FuVDU4VmRTa0NrbE9yOUpEclpRZzkzRGtlYXZ1aDY5enJZS2NlekY0Q2MyT2daQ3NtRTBhaE0yY3M2ZVkybDkwaHZnN2hiL05LNVZ1VXdMcGJTZVpGU0pGWEF5aFVWbm9XQ213QjI4bkJWdXN3bWs3b1ZNdDVWWG4vYjA3ZzBrdlViRGl4cW54NDVJZ3FQWG1rR0F2M3V3MCtSVnloM1VtOFJiM2pPNDNKa0UvRThoWXdiR1l4VXREZzIzb0RYVmVhNGkzOXhmVnlReGd6YmczSUJqckd5SlZoYjU4Y2NEdzZzVXBCbXZRMmx0UXk4S2IzY2Q5ZldHNkpQcFk5Z0tPZ3B2M1pwaWgrZG1jTDRrTkEzNUVxOWpBc0NnUkM3TGVtaExYTERzL0hyb2R6dC84dldXUXIyR3JaUk9YR05rWCtGN0lyQkk3eWg1OG1weGU3NEFvenNIdjhNdWJEM2lBcU5qc1FsL2NDemlUZ2pEdW0yK1hYWmU5dExHZW5mR2xGOGhaVjUvSkNrN0JVT0RCMEduOUtpampQcEFweUlXdGtvT3QrZ3RNWi93WVpOa21paE45b2docEt2UDQrOENPbUV1clN0cHNLWUU5ejVuYmtlQ29wMTM3L1NzOW00TTRBTXVMSVpkRGhvNWdNM1BkQkd1YUpUQTVkTDNCVEsxeXJ0MHo3RTlnNVNtNWxOM0VqQVI1SVF5eTNqZGJBN2lzN0gxVVNjVkwvR2I0NkE1bmRnY1N2MmNBYkYyWlpreXN0TzFjYXRIZEdCV043Sk9mUmZmODB1VVd1ZzFNdFNtbW8vdjZhcGRHakI3b2NlTWREd3Q1MDZJeVo0WWpjV0FQeFFENHhobk1GUHZGdlhrR29wY2hXVi9VSE1tQWN2VVY3bjBwbGZlMU5FQVhjMSszZEMzak1xa0NML3hWVG5yVjFhWTltNERwQitvbVZMcXdvb3JzbnhXT3lPSm96ekd6OHFhL01uWDBzS0tKaUxVcHRDS05IMjg3RmRBdjhkY1lxcENMTmo4Y0VJWUZFUjFNdU1NbnlRaEx3MXhYNnZKdStTcjcwSUE5citrcnBDeUdYL3FRMUI4bkhhdE5Jd21vaXhWaitOc2dhQkpxV045a1AxUEdVYis5ODVpNU5JdVRIdm1wckVuSGRQQnFQeEd6c3FFcDNaUWc4STR3UmtQRmxMN0drc1Bkcy9IUE0zUTlUT2FQVi9VenFvUEdvZi94bVNoRlZVRFgyc3FBYXIybFU1bkdpcnN2MWMzR3lseXFvd1UwRVVLeGw3emxMSTY1UUUvU3VsVkxhTlEwSWY5UGgzZWtaZnltVTFwbWIyZURqZFliUmMwTGkzbVhsdjgrTnFWUWdlZVozaUowcFJpbm5XVGN2VkNjMFI3cHhTUFFMdGRTZEVEYjZZeDlMT2NXR2lZSnF6V21sMzRZdE5XYThnK1UyKzBsTTJ1dFdMT0ExNnFSc1RKTGpGZGYxWUhteTVTMCs5SnV6eHhGRjZXYnZmaTE3QkRFK2ZDU0dqU1lLaGtwSGtubUVGUjRJM0pFbzlMWWtDYWY2SUtUTjFGWHdxYW9URHNuN0JCbE4zSGZsc0pZUDVGY0pQYkk0UUVvVnhONzBtU0xvU3hsVEZ2Wjk1ZUpEQ1VzbHRDQXQza0FEblM4dXZCSDZ3UHJCQ2lYUEN4V3o4SnpVVkpFeTZtanhweFFjZlA2Ym10dDRQSTVJaXVGeUwvRDJndVFyVEdBbTZScWRTUUdjd3Z5WUdPUWVDVnBURStDd0FiVmx3ZUpXTEVpOG0zMUlhejA0OW1wSmVTUFFMQzhEMktlS3d3a0t1Wmkwa0FzVjVZeFlCazRaN1JlUkllaGhRangxWXNvQ0lLOGExQmsrS3BoQ1lGWjNXdUZFMXBVU2NWaVJIdEZXWHdWVlR2dUZPM29rR3ovMnk3RW1kRlZEOEs2RDZpTnpYTFRMZ2lPMFkxamJEdGN6SlVWV3hUVkhHS3I1eTh3MVNXNjFTdDhIWUUzSkl5OCs1ZGUydkdsMGJTMit3b3ZhOXJ1aitaaHJoSDNvRHhLS0dzdFEwR0ZldS9zVTZHMUt0ZkVqZXpLLzJwOGZHM3drRzVHazVKZlFSenoyaFRGVGVEdjQ0b3lHMGlpcmVlRmRkTnk5RnFmeTRHSnpUWUxFczAxdFhNa2FtZ2UzL1liUlhyMEZmOGpVS01kU21HUDkvamV2NldVMWQ3aklSS3lkZmNrTWM3WnFnU1FPZWtTWDV1SUs3a3VSRGxiTTE5U1ZzRzBOOExEVEJmZTRLY2x4T0EvWnhrdFRmcWNqV3dvRU5ZUTVKK1BpcHdXV2h3UE5pRXlhbkVaVW5tNVFReGgzMVFocDBoZkVTcWorN1BsZW1YS1htQ2lvUHgvMnRQdlJqaCtrUUp3SUVOdmswVkdacDJ2Q2ZYS2N5NnhTdEpDWENMejRpL1VKQ1dTTkxOSnZJQkVJNFJSc2hIOGpjQjM3T3JFVjhaNWFEZUZTT3NXSkdCMFNORG5ycEp1aFFoMnZHUk10bEh0VGM4ZHBnNVNucFJwa1kxSUpJUTlEUnQ4bWhTY0FHSzFBSmpZOW5iMHY3N2ZmZm8wRHBHR24zbmF3c0Q5Z3ozNWFuQ2F1VXR4alVuRVJpVWJtOXAxeHJRY1Y3Wkc5N0xqUEpPRU1XK25vL2tFbzlsbDVIa2ovUUZJY2doNlFldTNqRjlmbWVrY3p0NGhqN0JrZjZSb29VcER2cTNwZFhrM2svRWVOYUhuV2pWRDhiT05CK1VCREdyL2JmM09pQU5vVWhpQWttMndiaUN1VGE5bEY4c0ZZbHJzM1pwTEZMdWl3M0NjWUpRQ1N0MCtYVUdQNzZSdTUzTlR0RUxremxPT2VUc1ZhZjdGaUxkWXhua3pYamFhVjNta2hjNVV6elZ1U3d1ZTZkU2ZjV3lYSkZpMzFyb2g0Tk1GZ1VOTEdkb3B4d2g1bXlWYzNZa3ZCNC9XM2VHYjV3WDlWeTRIZ0lkN2YxRXI2ZHJEWGQ4UlU2NkNQZkRsei9mMUVPL25DUno4bm4xcVNMSHBCMkNPOE4yc09UcFIxQXJsVEpEcjViYkorQmlhTUNtYmVieDFOS0owY25sKzYyT3dqa2RtRlBzL2ZQbGpBR2dEcm1kWnJKUkhZVjVIMmFYd3pzdGkrUS9FNkZ4bzhia2R5OTdndXIzNXRSclFDdElUc2Naa3dKUlpVTFpPVDFIWWVWcXRrdTVEdWlJT29ZVGtyNFFVQTNCR2VaTnFseUlRbkw4UDhoZEVrVy9qN3lWc1JTYUlzcG90OThrS0ltZmpLNmVhU2RneGNUditBQkRUNWl0RUVpNkQ2UzhIZkhNOHRMeHh0ZWN3ekdHNWtidEFqMFA4QTA0Y0pGdjdpNGR3Smt1NDBjb1cybmxlZkdHWWFhS0ZyeGZhbFBldnN3cE4yeTFjemVQMFdVZ1UxQnpEY3JwSENSR3Rncm1pamlmT0tlcUJ3UTFBeFhQajZBVW5OSHhlbTZMZ0FkcVhzNVFLd3o4M2FGWllBVkpqY0JrZUxDVWxPSzFZb2pZYWZNYUc1YmFOYTh6eWMxQWZiN1NlVHpqTUEyeDg5Y05CV3VXenhtYVdXSDFZVzkzRG00blk5eUJwczhGR3ovdk1Mdmt6UjlCV3ZhMTFpbVV3a3c2SVJzMmhJeG10ZjFjUk14bTNIcGNPQlE0TlBDeUlUdmgvMFpSbkFyaHVjNFZGMHMwdVRTU2FTTXViUXJGWFFsQm1sc2VvcXp4WFNab2QrNWUzWkVxNEJpTVFUeWNtc09DNHVKU21ZVGJxdG9lcGFJMWErVXQyUG0wRDRrczk4Y0F0U01PcVFwQ3JjUTcrS1pTMmxONXFBMjdhazZFSU9JM2EwaXJ2V1EzbEZJUndGbVRCcFpGcnY5U2JwQnpZWFVnM0NIbEU2N0JraXVpVzlMUTVqd3hqb2hkT0lZUFYyVkx1NmFaY1E4c3MxZ1ZtaVJNNEJFaGpFVk9mcjFIYkxJeklTcGxmdUo1dXE2R0Rzc3hhNGtYUHNBYldnYmRVdllXNVBaU29ydVc4cE9rZDd1am9MQ2NUQTlSZVY4Z1gwTlNub0RZLzh0NDlVZkxYWkF5VmRCbzlld1RDZkw5aEluYWxZd05peHFNdXZoWTdiU1RTcEtIWEVDOEdDU290ODUrUFJPaytlRllXUCtYR1JHVS9oelVrS0hUR0RkcWlQMHEzdTNsaEk5d0dTUDVJT01nNU0vMzBOM2hjTzkxY2k4UVdWNS9hald2b1hjWm9La1psMFhUSGFONjk2ZnpXVk1jOUp6bGtZZTBRemtveGRiTVcvSEdUS2RuRGZSYTRIaGpxV1dyYUVETEtIZ3JXMlVZYmZEcTZkenRNcGlZWWRKZXd5S1VnclBTeDQzaG11SXR3SGZvTVVwbWVzR3l2ZFhtYnBwMEdMankwUHpkZVdLNURseTdVOVNWTXVmNzg1VHUyNXkrdk5mamVxbURMaklaNmw0UUNaT0dTbGFrWUpRdWdUNTZadUI3OERnc0ZlVnZ1NEFTNlFmVjRnWU1URkRBMFNjUjlJSGlLdUtrVUYrdVZ4KzJ0T0J5SStCTFFseVlpc2w1ZUc3T1V0YkpCbGFHekJBYVBXVmc4dTIyMmhZZ1BwZlNPc0k1VkNHUUNQSkxodVQySCtwN2dTdlEwbElNVHdMYzFMMkZwbWtCQjgvRWNyN2NZSHgrQjUzYXU4ZXZtTGJZUFh3Ulp5UlJab3BIUXBjR3dIcmw0cDNBb3gxZkJwUGcvckZFRTVIcEtHTWM4R2IvelBXYzBINGxMZExDbzUrTkFMeTRPYzZNc0pqOHBZSjQrTCtOY1pQQ3pFTzZsMDZDWlRTOFF0Uzk3d1FDa1BoNWxUYm5WeEFNMHBsS0ltUFFtYWNlWFQyNk9OSjYxT1RQUEticEM2c0cvME52WXlEQ3BoT1RyMjE1TzZVL04vQnhIQit4bEpONTV6TTJBZnQ5ZXpFbWFYb0czUXN4QnEwd3k5Ny9IVXhYaVJJWGdVaWFEOGNqUXFYcmJOZWlkeFV4N2tDeVBrazlxUkM2dGRvWnVNZGpwOGMvMXA1YVU5RWpUdW9hcFZSa1hPSHMwUjRLRkZmZjJEYnJibXNtLzVIUklqbDZZdzljZzRyUWhFY20vRnhsSUYwWWc1RE5wQ2pYcTQ5ZEF5Tk54UllRc2xBOW5NWHlnN0FVajgwbFA3YjBHRTBvenBPSUUvOGRRMlFRVGpCZng1RXJHMUdOK21QZVRKa3hNcFdlaGtDdlVieEdxZnZRNWRaQXVHREU4RTFoei9jNVI5aGZWUkU1SVRNbm5Edi9wb2lla0lVMU9uWDBqMjNvNXcwWVVVblBmazdyMW1DamVRd3dCZ1hSK0U4WkkxK2Z2Sk9NdkU2R3JYNGlLVkVUdEs4ZS9PTURkRTJ2V2xVdjhGZUxiTGdFN2U1bG0yNXpBc09NVFlkcEVZTU9nL3p0OXFpMG9zWHdrVGlyQ2cveDFnRmg5QWZKc3BGUmZESFZ1RWtPdkFRM203MXZLU0FZVWVKTHVodHUyOS9iVDlOUmhyeHhSZTZIUjlMQ2FjcUY0U3BaOEZpTzV2VHVaeGFBVFYwalRaaHpRSXVYSDB6VEJKUEk5V01XZzRTSDJtWitwTXMzb29FU3IwTnd3eGl6bU9PeVV2bXZraU94K054NnppaXNlVjVwV3VJMCtJK3lnaUVTZHYyM2ViZXFuNVBPU3l1UzdMSEE0NlRPbnJxcWllbjB3UW9MUG5YeWR0TVV6Y1BlbGdJaEZWL3B6QTNKSGNQRWpjSGQrbHBITDhZMTVBazRnczZzV293MjdZQTd3b1N4YTFIaUlQZDdZQnJzbVZtNmJwYlNxTVl5UnRzVlpsOTRIYlgrTE05OFZUa1BDMThmT0VZOThOTTBHdDVwWHZUUllhSHB1b0RMNTNXYnFSRGhSZlVya1ZuSTlRT2VnOHFDOTJabFNYdnAvRnRDZEx2ZElRRmVVZHRwZkFQR3A1U1VhZ3NQSld1clpGNGU4T29OVkZXMi9VTzBzMU5hK3dJb2w3THVLZXFQd0RkL2lLVnBlUTdHZnNYMjJUNWg2MWw4emRuQllJRGhvWlpDeUt0U0ZJQzFodVdkTm1lam96WWtDT0plUUpzc01MRHJUZFZhamZzcmovREF6V2NqVE55VjlnZm1ySG1NWHdwbVFscXV4enNpV0pDcks5N1Zjb2phM1RhRE5ZTmFBdmZmbUFWbEJYWm5ubmsrWVhFSmZ1ZHNxc2dzRm9WeC85WjRzc29uZmVDTEpmQkhNR1o4Vm11OEd5dWRsK01SRjA3emV3WjZqZjhwUFlaUHZRR2MvbVd0NnY5ZE5nelZvTUpDTUF4bnZ2TXNpQXp5ZzRSYWZCTExTeExubFBhbkU0UFRQQ2F3T096L3hQQ0pnRGNDVHFxTERndXBud3Rja2E2YUU3cGYwcmovU3QxOWh0b1BYMGpLNUxQdGNvNFpnUWZVZ05ZSTRiTmlORk0vSjJwUHpXWmZEWUZWOFNzbk5wVGhBbDh3RWpWS2FnMFlpeGljS0RXalAyOE83VlhFMDFudG0zdzR0eW82WHVvb2dHWjhnZW80SWVrYVNFejZWUE1rR05UeUtXMzJyS000czRLMUF3UVNUSUUwWTV6eWVYWno4Vml6My9mN1VxUTdveHlBQ0xabEZRWXB1VGkxQTQwZjhrVjBMSTNRSkI3WnNnenIwZFlxL0RzREt1TXdNT3JUNmFrRE50TmhCQWJXT0k0OHZhZk44SHg3Rmw0ZjlMNFNEdzljQzJ4clZsdTdmd3ZkL05nMmtoN2x2eGp2M1RDYUU3YjRwcms5YzRYalNUTFBCSFY3WkNSSWxJZmpES0JTeG9KVnhEdk55SG5HT2hCZlJZQUZReXRMeHowVjIzUmJNWEk5Nm9raGN0b3Z5SVRzRVA4WlhnWHRiVkpnaVo5Um5YQndpOTlOaDFtMmgvSVMrUS9lWWpURWpyZUxtaUIrNW8yTnFTMWJQUy9JV2NpdGtzUzg1aUpmd1dxUk42SUJFc2hsT2twRjd0L3BZaW0zQXR3Wko1Yk5NcW8vREkvdy9BcUNDcmRjdDdhalRtSDlZV3lwTC9aY0VHU25qNEJPK0dvb00ybVpaajJCT2FSa1FDTUtQU0QwV0NVMUQ1MFVkM1lBWkEvdGNzQkxOSVp3ZnMyUFV3OEtaRTB5WWxwd2FJaUx0UHpwK0pVbkpHTVhtT0NTK1I4SnNNZ2R2K09zTmZRSXB0WmxNUWhLKzZYRzM3Uk5yeEd6MGdvcWxRS29ma3FHS1dGUXJSRjlFL0VpaGtFRlMzS0ZueFBNTkRRNDUrL0hFUWFBOVJ4UlNJcVpoVUVyRmFYMmFyVHJXS2h3QldEWUlVa1N5SnlaRVZ3TWhoNVp3Z1FtV3BvTVYrVmpQd2NuS2V1ZmJSemhSUmplMElRYStsTDRFbm5HQXF1ZmlyTWtzbkdDeURHTVNzYUJIelVXVWVvN0JGa1Z0QTlwNGk0eXJqTG04THQ4Qk9RQ0hHYzhsd3IxVTZCb1BCRFhrV1hJUFVkRVFLenZUc3p6L1d6a3J4bnBxNjl0SiswUU5wOHRTYU1MTUoxTVl6M09iZ3YyOFQxRUFOUVFaL2Z1bFd2dGJsTW04S2x3MExHQXlpcHByb0Z6T016c0Y4aG9rdTg2akpseTJRMGZwOEhYSVQ2UHRoRmwvZXVRNTZoSEpUUU9lV0h2ZjFIdWNTTTRYVmhLQ21GTmQvK1BESDdrL1V3TmZYcDB1LzYzcDlXRDFQVmlvM0VlVElKY0NUeEdCM2RKa3g4Wmh5YldZcjhtZE5NQ0docktoNDdscWNlOUdFcm4yU1E4YmNMK2lTL1V6bFVEKzhlR2FQMzNJanlUVzBWRVVySi9ZMFQyRFFTNlQ4N3Btc0R5UWNaUTFMRHJCS0NmWWlFZndHSk5NdldLQ3k4b2Y5OGd6dUFNNldkY0srbFN4alJrc1ZuQlIwZVQ5SzUzbVlReU8vRm03ekRmYnlSNjVZTWZkVkRiUnRjdTdVRm5aWWdrTU9yQVNCVnFZUzRnUWNjOUt3bENGTkRvdytpMkZFSTcvTjdicXFwcVdUclMyeHJWNGFpNmpwM0hKMWhmSEJlSnQ3MXgzNjIxempBUVlsVVFPMGpZdkhaSGYvRmhuUUtsa2o5dHlRVGRLMW90TEVNTTZVWVB3Y2c1cjRacnBuNmp0Z3RyQWhPdmN4N3lvM3MwVzk4eCt1R21RS3RiYWxXSEZUVnJJMlY1NXVyb1dFMURHVkozc1o5MDVDUEFPWVpVYXhQRUZUOElRVC95NUozSm9samxuL1JiVEZSK0l1VnY2NE9WOVZoaE5weG12YmF2bStZbHI0TDJHY0dvYTVSWTBYTlpjUlZmdkZaZVhIa1VTNWVUU2x4N216UEUrVjlZeFp3TEQ1Q2NWTjdwMGlzbU1LWmpVVjR2YmQyYzJNbkNGTExnQmp0Ui92VHRlQUlrTWxZb3MxWldrUjhXbXFmR0RsbHRPVityOFltbzNXQkNsL3lmTmpjTkFSOWJTTGs3eStsZWhBOERzVURWVTJ2c0Y2cmNaMzVzZFR4b2ovZi85YmFIVVRNK29MOStHZXJ2ODdQQjhIeGZvUEkxTHpTYkZ3Qk5CcWtRb2RyOS9UNHFTWG5ubE9KODFzOXVhanNYOVRIWHVuNUFWZFFaeVF3Q3o5cFVlYTNlcDF1SzRFeHloRVo3T1JpWXMyYmo0USs5aDhKM3ZQY2RrL1ZDTG9hMkJGVVk2eHlwZFZsR25wOGNWQ3Jac1phS01IMnY3clBuSlZualNlaTZHSzVSNUFNc3dSWnltSFp0QXJOb0xSODBIL0VyR0M2T2lTYS9aZFMrb1QzRDd0Z2U3ODJRZ2MxeFEzNlEreXZLSHFGNDI0SW9oRHc2SnJVNDlzYXQ0ZkkyM1I4UjJVTzNPV3U4aGdtOUZjemxTVHNqWU5vbW8wd21TWTlpZVlGNURzcEsvZ2JyZ3l2Y08zTXc3Z29maFJROUxMWkF0dHdCcU1VZDU2dFZCQ1k2aWpnQlVBVklVK1VwU1RsY2RBNVVqUmYzaWZsMjZHM1l3Y3M1dFpNQjROV2ttWitiWWVLS1JNZTZOUG1BM0VhS3N6WEVJUWpVam94cm5pS2YybHk4WlN2QSs3MkFTdmlZSnBWR29WbDVhb2g3bnA3RHI4UnduS0lidkFQY1FEWTBGOGR1VzlVMnd0VUY3bmJGVGhFZGdkSTBvb0pkSWxtbG9mMGV1UURYMFBXWW5uWjk5RXRrSVdQemZQM1E1S1lVZjN0M081aWJPc2VFbGQ1NHBEU1lOY3RsSm5HV1d3Mk53UWQ1eXA5SHRyUmNOOFlpOENGamJPY2JRMUlyMCtuamVsOExJY3RnWHRrSENXSXZkRDBWU2k1ZGpkdG14UzdOYk4zTUdZZTdUZ0MrQWlyMFdhay9UcTJjaUxnTk1yaGxYVFdVOEVzVnlBM3NzK1F4REdTNVhqWUNlRkdLOWpSWVE4QU5PdVpOZHFJMmg1WlVTa0ttcm95UDAwRlF1V0szRVU0NE5uWjRjVmZyNVBiUEkvWDlDVG0wRkZBd2NnWVo1ZUE0OGlhYm5PZzN4eWFCUEgzU25LaE53ZTQ4Sm1CSWFHYnpWdVBXNkxWNjgyQWxBY3BlKyt0UnE2Vk80eWdTUVRRU2I3Q1BLWHdFMVdCKzI2ZnNuejVnR1huQ0dDZXR0NDlKMHhwYlI3R0J2Z1F2TFN6TndBckF1elZJbWxKNm1rTXY2Mm1yOWZad2dTVVdnQ0pHTkZRSDFPakxlcFdSNUFkSUlRak1zNjJXank5WXdsdDVWNDE0R0l3c2lGL2JuWmFzeGc2eHpiZ2lKdmxjTzJwS1plUDZHRnRMcXE0cGFPM0NEYVdsZTRwUjEwOU84UjN6Q3BOUTdLbi9YMUtqY1BjTEU1Tm94NXNqT1c4Zm5FVXlpZTVwK3dPZzJVR1RCL3kzZ05QVnBMQkxRMGhuejdHdUp3L0NjK1VJTlBnb256UGFVazBmY2VRQzZkMFZrdFV1SVozYzVnS2Nmb1VFUXk5MjZSN0NjUVlndTA1bnhZT3BZanhjUzB4MkFDb0sxcG9hcCtIQkdzOWxRWEN0aC8zZTg0SzZma0gzeS9zSXVvQ1IyMFRySGN1TmxMaGlnV0o2K1Y4LzNUMnlaYkxHbFhFRnQyN2tDVnV3YXBvb3plYTRuNGgvY1JrZUxFZ1RhWnB5cW44UmtaODQwN29xM3VPZ1p4enFTRGRVYXgrd29QbnA2dk42VmxXckI3b0hEQWU2VWlldnduRnR6WFJia1pveml5dFZSajFrVTI2U1p3RHZzQ3NmdndFbUNuK0tFL2toNklBUDg0UVhab0pXcUN6RldyRG40YkxFMzRRUDVHREtseWRsT1NaTUtsb2FCS0JkR2pvZUZPNTFocEVWVnluMlVNMXMvQ1BoRUJmVGRSN0wzVk1PNGtlYlEyeXo3a2NvRTN0bGRsSnNBdG84U3h1dnlrWjBYRXg4RDBSWmZyUGprc0hMZG03anZDVjRDd2tqZVhQamd1SnI3NG9KaEo1ZGh0dTF6QU9nb2lVN1pFTmZLQkVDOHNoaXJaOUtDMHRBNEsrSWFVd2E2ZHNuamh5WGQwbW42YjZhU0FyR2liZmZvL1lTa1lHalNPd0w1M1poNWliTGhtTjlHTHhNQnRISmZwVWZSdzdiRUpERnJCK2pJVXpESituRFp2RnE1aS9KcVRwS0tjazJuL0g5RHNXVGZ4REJFbmZROGtQZHN1NzF4ZDFRRy9Ua1AyM0lIOXZlMUFoRFRHRkhFbElkTWxBbmtkZU15S2t6MTRyYUQ2dzdlc0RMT1BSd1JhQmlXS3ZFTXVxNkovbGtKSGxhQ2dPZFU3WEg2eEYvYXlKaTBJWUh6bllVYVU5eVF0UzExMU01eHVKMkt5VjRuUDdScUw0VUVYWWZMVHRhRE1yUUdpbzVMRDR2Zk02c0p6aWFJV1hqVENzS2dkRlF5V3F2dTc2YkhJSldDcEZnOHVIUjFWZU82MHhYKzI1QU8xSnZwT0tzdkhWMDdCV0syRDlONnpMNHM4ZW1QZks2Z2FweGVYeWtVMng4d29QeWNGcElZNkFkMUpZVGx0UzJmNHltWk5pNFV0Ull3Y1FobEVZQ0VBbzR2bEF2Y1VBS1ZjQXAzVFdzUU9mYzN1UkM5L0h5NjI4dUFHWTljY1h4OUdHampBU0hYSEk2cWk5RlZGSEpxQ240WFhubjFDNW4yalpGNWkxbjV3c09SaXVnSDZINTJVeHUxOTZhSTFNOExrNkNvckZPZXB3TGVkeG4wQ0l0KzEzWk9INTVsOWVqeHVCYjU3Z0FkbHhEZ0xUV04yR2pFcFRMdlNHMjNVQk8ydjZiS1hYRy9UQTJBWitKZm5HYWtEck1Zb09ud3lVSGNLeHA4VGhJYlYwVkQvQ3ZXZ0xiMkRpQUxEOHpSSm05ZFVqLzVyUVV0b24zekI2ajcxTk9YT1BlRjhSNitZZ3g1ZkZtVG94bExjbzdUamxyckd4OUVjRXAva2pYTE9qellRUUkrZ3hMK0FPUHRseGRjM3c3OGYzTU54eU5EWVI4QnZLQzE3bjNLN2hOajFzTllUd0dBUkgySExMT2NUMXlDMnhQb0hRT2U2ajB4L3BCN0sxTmRWSS9yaTVtVlpMUmE0a0tGMzh5YVNTSXBzdkhvTWlZQm9aZytqTUJmVjBsYnoveWVSMmgvMXVmTFpJNERONXFHT3REcUVNNUZzdC94Y3BOYnFNSmNDOXk1RXRqSk1kOTRmSXVRMTRYT0UxcWN0d0JKSFVORzJiVzhMRWhIMXJ2bjhlM1lzM2lseDI1ZlRQRTd5OWN1T1VKOXVXRkhvUEZoYWl2Ujhoa1RWek5YUi92dnNDVEJaelZZY3lTZ3dXeGw4Rk45K2pTR3ptUDlKcEdnVXNFaThXTytwQ0JDNzhMTm5KMmdVZWVSVGhJL1cxd1pNN1Q2Sm9Ea0FYT2lDZnJIa1U4QWxHZUJoTEZTQ3JsYjRMSWc2dDRDclh1cTZ4NHdlU3dhTXpzMjRKRE1UUjUyTi9xNndGNHNRcEgvU1B1NGFKcUZRRU91OFMxMUYrY2ZVaEt2TnplTjNjQy9VVll6RWZDMndueEdHV3BnZmhBTVVuUHVDcituUlBMZ3NTekZFUnNWQVRZOXFyMHkyckt2U1ljVW9PVEdrTk9Fb3hLWmZiSnZzd2FYclZNYlNjZVMxNS9ZWnVJNnhTM0gwZUw1QS90YTFycS93bUxPL0wwK0VTSTVoVENkVGx6a3kxNk4wbEZSdVJjVTBPUzBJYWNLcWFTazVnV2ZaeFRzcEE0Z2NiTkRLY01zTTQyNFpSN1hNT1JTdGc1UVV5c2JXUGh0alZ5Zk1tM0QxMG01LytyYjVicko0ejNYRVVoTXFpUElmUEtTZjJKdVEzQ2lPWjVJcFpVK2t4eEJoMmZQL0ZORDlnSlk5T2J0SFUyQjZUaG1tU1MzVXI0YjRpYU82NXhEekVlYUJKTW5iMlpBOXdHTDZlNGtyQlVQRzFuaEFmWEJEZnFpVkdDejc4cjdQL1JDd2JFVU5QaEFFZEFzWmsrd0RkcDNWUmtYNzNBNXhsNGxkQ3pFeGhXOTRpYldTYUdRNEh5Y2Rhb0hpVEV3Rk93K0JzaWJjU0wraXAxMG9vYUlPb2cxQ3VnWGNNREFXVXV3ZkJ4RFV6bG1IWTQ2bHpaWlhYUkhoQzB5OTU3anUwWGNlRG85QnFsTWZqYlhBUHE5cXJBTFk2eGxDOFJOcUt4VkQvWUFGSWhXNXQ5WVU4cE81dHFMWnE4T1JQRHhUN2hSZHJvZm9JZ2pQNDdsQmVsSkY5WVhBS0I4VXRsTDIvQW5OS1p2bVlmOXZvWW4wOTB6Z0Urck9SRGtMSnN6ZUwrWXVxZE5lY0loeEx2Uldic2s0TFBTLzN1VmF3WnY2dHM3ZmpjcnMvZVRlalpHdE9LbWJRQXZIMThrSlpZL3I5cHYzOVg3UEVyV3JpSVV1YU1scVhzNTNJbTVjR243dnBwMFlJQ3huSHVkUW9IWTdpbk1SM0Q5YlBuL2NwNU9oa1ZsamtjMHhsTW9NcW5mUjVEYXpuNXE1VmwrVlVoajAzN1VOZm02clYxZDJDNnlKQ2ZkeHBUS3JJSFVGTi9hd2J1bGZzK09seUpIdHByY1htVHU0d0FNVnplZUxGUFZSaU9sSUN5WmRaVDVpZVJwTzlacXdCa0JpZzhkdlRIZFp4NC8wRGxKaGJKcURGUXNBRlgyOGlyOGtWNHVFU09kOE5WVGJRcE0xUTdrKzJnL1gweDdRUURPRUJVQVovQlVha3kxNGhZV0xCaHVNZk1nc0t1aGdzNlpqMVRDSUZsSU9GeldIYXh1L0RmbjhVdkhCZjBvcDRyRXV4NHpDOXlKUmdTY24zdS9ncmxGWHpSY2tiOHlhVTNaYkZsRWlYY3hIMGlFWkxqNDBvRVlCSTJtZDJQU3g5dG5wb2FFdmRjRnpPb2g1dytURzhyOUVMUGI5RHRuUEdCUmJKbTBieDJsNkVjZ3Z6QTh2YzJ1enBYWDlOMk0xd05EOFpSdXJmUitUVFR3STFKU25iNG9idlMxSlVDRnNkcGF1NHpFRDZvT1IyUlIzRlZxalBicTVKRjZlVTYrYlRBNDNDekhzaUw2UW9UdXpKRExiSGZIRVdlRENzTitibHdPWXRCWUZ4S1VIRFc1VUdlRWMyT0RJL2p5ZmFhQ2VGeXBzVDZxWW41QmQ0Vll0bTBxc082eGl4MkkwTy8yMWZSdnhyWkk1MFNXMGdlZTRDdVFqWW1TNDVMMXRGK2NqM1NyeUFQcWxDZ3VNSWR3OFhPalBiTFlyUUVJZ0dEak5jWW56NzkxdUtTaWp3bkxWVjNSaGt3WmtJdEZyVVNFelNQcGFKWWJBb1ZscVJueGpFanVZUHNVL3hNemFxUWx6YnBoYkVwelhYVVJ4VXEyaVZDMjdWS1VkT0h0Z29OdU9JNlgrQWJsZ2VJY0dQTU0zam1VOTQrZFlKazNIZzk0NmRWNUpJUFB3RHppSEo1endBMS9hREdJQUx6ZEF5Y2xsQXh0TDlIMkw1eGxXYnlHUU1kUFladHBaQmpVMFhDcnJFM2FqVHhOUVJKcGY1MVV0ZU9EUHBTZU15c05uWmVtTmR5SnE3OUV6Mm1FRko5djF5WkRXL2w2bUJmRlQwYTFvMjFKc3djcFZoZ2F4WWZJZUY2WlVsRWg1TzVabmJ6TVJmbUs5TEljSnlNcmtIRW95ZlBuTnJvOExBY3ladUt3ci9HOUhpOXBUUyt3bXlsS2lmdDc3LzBtZm1sNFdwY2wwMmZiWkxRZ0ZlbGczYTN6WHlPTklUMDlmbG9NbjUwdlVHQTB3M1ZqcU5pRFMyaGY4RlQ1VW96RnFkY2V0OXc1UTBlZVNTMi9pbVluVDVrY21YalNDbElObysxanhScHZwTUlEWWM2UStiSHM5QkthOThGSkp0ZkMzZGhjNlVmRE5ZRFlBdFkvVWhsSWZ2WmpWZW44dnhEVTRxa1BrZjIzTTR3WFFuTmo4VUVHbml2aVlUZEFPU0xTR2l2M0J4cUtjWTdpWTZpR1RoOTBoUHpOYzlWais2NXpqMHg0aUF2NmwyRjZwbnRaaGUwSjRCQ1VvUTVFdmJIZzhvSjVRSmFza3FCNTB5bStQdjlMT0tFemJoeWg0TGNnZHhNVU92SXIxY2hOMFpuNE53a2l4dms2cUorcE9qWGdnSm0rQWdJQ0FnT2VmWVRkTVozMXNBSmdJUnJvVWh6VjI4cUdxRU1ROUFnVSttRnBTUEl1Mzk3ODU4cXpNR1hnTkFlaEtLa2lvekFNdUh1N0Q0eFVNYk5obFI4YjlHa2MrcE5vUmZvd0M3UDFJaTVtT0VZRmtYby93Zlp0VW9MUThqTTU1QVI0Kzd3eDZPWEpOOEQyb3REaisxYXo3Z09KdkNxMXJOMWtQbmM0NGwxdWozVk0zWnJEZ0s2YWRuKzNhL3RwSUpLWUthVUpLbTVtYlZTRjZWYUxjY0RURW5Tc1JWWGFJWEZoWU9iVVRSWERrVStwVUFRUVl2RFhmeWtkVGh0M2NYQ0RwOU1kRi8wdGFnYkxQTFZlVTltdWo3NXhGTk9qOGVnL3hDeHJkclh2QlQrdEFiTW5jSG5VempUQm1nc3pqN3ZlSElUZ1NqTE9UL0ZHQllLa0pOL1dCczc4ekFuVEVPS2pxSFF5Rm5YclpSemVMQlVUMXFFYVRZTGVEbTNkZXpYMGNlT3dpYmpGbEpvY3pVWXEvK0FUNUtqQXI0cGU2VmhvbnJmU2lUWWgyRFVodk9aeWZaNVh4K0hCbXg3dHlFZngvOXU1TVRsSWNIUld4ZnpORzlwMHk3WVNaRERrdmVqbUpZUDlEVVRjSnJraXNudU96THZ0eFpJT1ZZZHdaSkZ6L05LbTFZV3RzRVoyd2g4TEJjUFcyRm1HMEFKbVQ0SmRqRHordGNkN1Qya2VEOUJ3L0tPajRSSFJjdWFNNDZzNWdzcEd2aUpSOVlOQk1iS1lHWjU4VzJZaWpsMGxuSXdjbXBnQW5lOEVXKzdiMWNNSWpCNUN4SG5nQkp2M0haNXJNZm1mMHc3MXRVLzRMRzI2bWthWjZMdTNDT29nVWkxREdUS2o4bkVpNEt2d0xtWlFNMThnakZ0YWVCd2dXei8xWm5YZ3lNRDZCa2drTGJMNElCQUJVamNnTlZxU0svbVB5c2NnTGhXYkNsR2xWbGdqazkzcUpZYSt6cVJlaFZYSE4ySGo2eGZuOVVnckpnY3ljc2dMSitpdEExdkZTM1dXVUd5OU96VWc3U2xnbE1xc0VWeEhDei9lYmloK2hxbSt1T3h5QUQzWSt6TjlYSGRPZDgwU0NtUE04bGZqM3lrOFJSMktCdFBsVXd5alZTK3pKODc5NTNrZXNSYjZJUHN6QVdCRWdYeW4vQWl6aEUyL0ttTU1PUDNQR3Q0WGRkekNIaDcyT0dSWU41d0dFc2d0eFphNEJwV0EvMXlNcldxem9wMkxZYndlRTJRUjFkNi9RN0lPY0M2YWdqSFBkeFBwa2MzUGVjVTVUQjBKSzFZUWUwek5CU0lUNFlabFZUOFkyMnFndUVDK3M5TzlHbXdiUFVmWlord0t0UFBhZGNOWnE5am1DeVdHNXFlTE1ybEMrZGQ3WVl1dmVndTNmdlNCZ3BMYWRETHNaR2FtRzZ1N0lsTkFIc1JaanFjbnJEZFpJS0Mxdzg3Q1YrR3JmdTBCUXlyZzJqWFBSaGZBVmVIYVJzVFY5WEpsWTR4VmZhSHdNM1ZQSmpLMjBYTy9TS2JSMWJYbU5QTkxXK0trbUw1ZFZvbk5QdDVFWk1iR3JqcDdzNE8yM29KckFsZ25nSjBFWHZZMENSY0l3bkN4QTZtbjc5TVFxZ3EvRHlrUFQ3bHVLKy9qYWtvclc0NVkweFZJTVdobGQ1QU02VjRhTDZCYVd4N2Y2dTMrdDFFMDhkOVVlc2h3cENTdWQxZm5mNkVFcjJGcFp3UTI4cHZtVTVBYi9QdmhuUzBpUnNLY0RhWFpoZUJnbmRLRVBpNnBJRFBPSExHcjRhNlA2Tk12b3hLa25GbkZES1RkTXY5djRza3MvaDZESlMrbDZhSHlHdFVvc0Q1bWR5WXBvbU9IWHVpT0RyUy9sMUxadFhDUXJSZmtFckhqL0NJMnZkcmt5V3JvOGZpYzlCekVGdWVZVEF1WFg2WlMxTThhYW1LMVNSOUNuaFM2TlJtb3U1cGJiVjgvOEwzWWxuSy92Nks0SE5SNUZQUGdIaFFzcnNaVHUxTy9kZVJ4Zk1uc1VLZTdlYVdaN2I2NXBvL0FNZTNJcnk5KzV6cTEwNmxITUtLL05JVUdWdFg2UDh0Yi9lcVVNaUVheDcyY3o5b05yTTV6VW1BaE9DNkxRWkVxbGJnSFJNWk1XUk9HZzZuczJTalM5OTdoSDBhT0FkdUZONXJUMnN4S1gyUEh2LzA2azZnRlZySkIzTElINzZ3b0pwa2lMTC93alFhd0dJM1dsUG02UEZLS3B0blVLNDVEL09udzRpeEpoU05jQ1NoZjhvVDZuVG5ITUhWRjVlN0lDTnBJWUxLVmhIZjYvTGRRNWRJcWZzZ3JLTEZYVmkvTnoxb0RBR2FPK2FEVFVuUkZ3a0VLQ2lVbXhuTHBoVi9Ga3ZsMzRJYTNpenN5WE9kbmRYUjBIbTdFM2VuK3FxbnAyYTlQNHlOaFl0L3BTc3J0cWF4U0dDWHZKY0tmdTZ6RHVORExpdUU0Q0NWeWkyZVBPbGhqUG1zNmhLMkZVTHg1THB6emNlbjVTSTdpa3Rra24veGtrVW5BZW9SbFoyR1N6cGU5d1IyMUVwYmFPOVZWUWsva3I2L0pIN2JUbEtqNnI4d2dWR1p0NmVUSWY5VXBYV1htSzFTVmtoQXBhUExTY3RXVjBocXU3L1JvWTZzcGVtZEpreFhMN3FNbkpNT0tKOERGTThLNkRPcnJFajloNW9XbkE0YUpRYVo4cEwva0hnbjRSeTB0cTM3T241TVg3OC9EZG5FalU0RGk5VVZlam9XY0dzMkVrUmMrQjA3T3phdCtaZEhXRG9HWjJzaUJzbVRrOE9VVW43dVFrbk8yVmlQM0lBUjVNM2NpU3ZPV0pkU05uT1pSUjdYNEJFSUVOd29hbzZtenJqeG9yWWN5czdXVHViTU9EVGJVUDduN1FzNHQ2eHhtNzgzalJxQ2xocVBUc1h4TFIzcG9KZGZwenc0eUJCa2N4TnhpMk5PcVU0bmN5dW1YZStmcWc2R1BsYXl3ZVZ1dVpyelBEWjRjZ0F2b3R4THNNZ01VMEs2NDdOTERpUC83NHAxVElWRnZRd0ZkdHhMMXJ3UjN2Y1dQR2JWZXFnWVhXZGliYlErVGFFL3M0YnFSRGdJK1JTMXVMeFRLMFVXMU9UdFd5aCtZeE5WUTFaTlYyWmJSdXFGVWR0dE1lZTNnQVo2N3BxTFYwb2RLa1g4Y0Vla0dMSVZCS1VXQnJUbXdyZjc1TVl6TjBYL0FVYzJNbzVwTmZTSnRGOW45aG16a3BTMnZ4bDVDZVdXMGdLb1lPKzk1dUN4N3BhOFRNazhiTmY3bjJzeUNkTU41UVJ5NTlJS3Ryc0JxZUhDaWtmUUVrd1RPZmIwZkdEbmVxcExKVTUxSlIxcFpXL1B4VkUra3hncHMwczliUzJ0NENXZ085YnV2NFo5NE5DODRZVXJUc2pXbWhGUHk0YzdhalNLVjN6WEJSV25CWFZSb29WU2owV0VDdmsyZUFKTFhZaFgwU29oTXF0c3JDNVhwVzFzQ0YwWUVoTVZFZXFBZ1FvdnhtSjRvdklqcnZSWkJVVXVmL2h6ODlsNmphWmNQN0RCdERlN3oxcFdsMzNDSWV1RjE2NTh2c0t0UFJzVEt4emM4d1VTbndhMkZoRmpRVGE5L3oya3VXUnhQWXV1STdteFVsUms4SUl4K3RBMm9qbUVMK0ZwMC8wdmZHUjlESU5PQS9UUXpWbXMzbkxQRWNlRExYVVlFZ2VvTXFRNU9ST0lQNnBKVlU4bEllV0FiRGt5aWY3THpPUUliU1NTUlNOQ0twSVNIdUxocHJzdFYwWDdtUy9la1hTbmV0eWpRdFBod1RuYUxMRVdQeW1LUmhSdnZkWlFyZEpJMUU4cEI5czVLR0dXT2cweTd4RS81QjlCMDhWTDVCNTUwa01ROC8zb2pjdUtoNjhzMjhMSjhJZE1sWHNBZVZHdndtci96bGJZYUsreE9Icmp6cmFTcHdaT1Q2SzdqZmZ3cG5PYURxcUZlNDdaMjJjUi9zR3lrcU1HL1Jzb3J2NEJRYzZHYTlpRlJKRGVYQmJ1QlFNUVczZW1OVWpVRFlrZWNpamhXNnAvS0xxMFNYbDBpWTZWblpySUpJdGVvcXh2MVgybWxKZlNJRzlZZEN4cWx1U2dtNzZ2eXQraEdySk9zenBsWjFKc1BaMU1HcCt5cVUrZExCY1hyMmd4bndNY1VzV3UzNG02b1RQVE9oZm5ZQ2F4ZEkyOEphNFdaRk8za2xpakY1ZTJkbzZFSG51UkY5NXJFUTd1ajd0U2p1cDFyYXJ1RVY5NGkvUFBPN0s2NSt3K3FmTkp3WVhmc2dGQVhRSEY4cG9tbWovaUpNNzV5YStCZWVpUmRKbUpBdE1CQW5CNXNwUEFEM2Z2OEI3T1kxbGpnSTVBVFhCMHRpRFZMMU1rUWowZHR4RlY5WkNCUk5lWXY3UGNZdkQ4ZytWTGxrRmpNNEdjZ3hITG5ySHFYOTVQZCtJLzlMdll6aGo0OC93bTdrU2doaUJqN2o4eEhhQmJaSkFnS1NXaldrU2RDcjdaZkxEekt3UlRtNFUzZ0JMRmpjQWdGbS9GVEZwc1JCZzNIdWFDR3MxMnBDdGxLRk55d0hPOHk4RVVjdmphQytTU0ZhZFlkbElnWFVqNFBja3dhbWNHU1VFdGtwdXBoNFVCOW9YeDhRL2hNTmp0M1pydnZsUlhSWU9pSkZZd0lqT2ZGaXlhQ2hrM3Z6R0xGdWZxRFkrZFFxNU5QYTJBMG1XQlE5TVhRT1ljQWxkeXh6cXhBK2xjaFZWWmFhY0NTL01QWUdVSHNGZkVWY2pwWXJBQmt6dEsxVXcxOXdkNDZXNDEwMnovSDV2QU9XUDlWVVNNL1Bud1ZvYm1jT0RQNWltM25JMVRiYXlIWjdRU3JBSnBCRXFzZm5acWpreVhlRnBDY2NrOVRyZmJldnh0UnE4dHlJbTB2NnozYVFoUnRRL2ZhdVRzekpDem1zQ21xbDZYcHFnL0FZSXMwSTBhaGk3TGhOYzVtWUxNU2h1TnBhckpGN2hjQk9DNDEyaVVPTGllcWhod1ZzaW5ncTVJWmxBYXh4STNMS0IvWVRSTlFOU1dmMmVabjQ1eWZHVnhVZWMzYWZXYTA4R0l3QVEySkZtSHZTcTNWOHh4M1psRlhGMHpOODFpeE45YVJSVFo0NUl4Qno3aXBIMXNGR1pQRUkyM2s3YlBPcENRQlJ0bGQxM3ovR1E3dEU5YnNlSEM0aVBMd2RPRDlwZjhvaURtSS9qTjhxQjNrdkVkbHhZdE11dVRadW9keVB6WENZTVNOdFdibWgrbGJVMGgzN1BOSmVwTFFHamJHY2FpbnRZdFZZdXR4Zit3Z3BabklTVEd5Qkp6d3pZdklkODZpd3JuTktJNk1udCtOK2dSTTdnWU5QZFZwcXY2OHRHbmNpaFFPY3FvNkVaMXVnd01iU0RGNGNJV0N5MnkxOUFKYXFiTkw3SEdWVXZzc09uRktjeURIQlpRU0l2VmJGeDZZNVJLRnhHd0kxQndxd1ZPWmFzQmwxcjZ0V2xaNnhmaGhFc1JnTTJXcWhkV0tlYUtoREJWKzFXN1kxck5iek9RQ0RkMXZJZE8vSVd6MEdFc1F0SjgrbEFDL1VJODBlV3JDRUE4ZFdBN0ZCZnIzVEw4VU1IZ1BpUFpGcWhwUGJMWWZmQkMwV0FEcmpOdlliNXM5c3FubGdBK1BjeGYxbEQzMWxlL1drcSt4am4xbE1YMk5aK3Vreit4bjMyMmNuOE85ZjkvMUNuOE82QU9nTlM0cktVQ1NQMXlHVGxyNktqTUtyZWhUT2NkU3ZMUDJ2ZkVianZvY0xIUVQ4djhEMzJDSnJvdWdpKzZTOHJoclIzbVZ0bTBUNTVKc3IxNVh2akFFWXJWdnB2TWhkVUF0VHNoclFMbjYvL205WHdKV0hSamF1eVp2L09FTG5xWnhSbWIybE1qN2pmVDlEZnlic0VrWUJVRStPdy9Cb0E2K014L2VaZ2dqTnNXYkVzWDRTV0NYNitZN3hTUmpoRzZDM1B5YmMrN01PU3BpQzdLNkdHdFBmT3BXOGlFcm02SHNkWkhEaFBBMGFIdEYvRi9NWFNFS0Y5TFRJZTE0TzBlVm1qL1RuTU5qYVlXYzFXcVpPZGRuS294cVFaT2dvLzJZcFlsYVplMTRjZDlLRUg3MzZJL3VQeUFER2ZKU3R6N0lwaEJwaWtPZjlvdURNVytYc1hqM3BqSHBKUjNCMGNhQWw4cnY1T0xSR3doWG5paG1uTGF3T1ZEZXFZWjlCNXJ0a3FVb1g0a2MyU2JhSDhjaWZQakFpQjF5Q0xYMzA4TE96aWI3MTd6TXA5N1N2em5LVVl5YytFT2dDVzV2Z3dld2JESzA3VG1US1BPYnVyeGFONFZYcDdkaEZiSTFyQ1hCOG5OWW9rSHR0ZVBaZUtwY0tpS3RzT252dnh4ajNManJ5MXVGK2VuUVJ2TElmS0hkekl5ODcweG56YUhBdUkxR0JRWjF5d1JESUh4WVFxM2xlTTZyV2pId01EdVNReHpMZTVYeVN5K0dLUWQwcENiWHJqK1F5VmU1YThxQTJ6Z0VTRkpkZm1ubkU3L0FHdE9pUzZsek1nVmRId2F3c0t5SmJWell2Z0JnWFhYSFFvN3Q3Z2VYcnBsdzNHc3pOUDZQOGgyR1NhT1dRN3hBQnZXTDVtQmdxd0pXeFNuNk1HMzcyMFR1d0R3OXRhZUZzS0ljMFBJNWdKaG4zZ1U1Y2RJYVJuYW12Q1hXejdJRi9oRXhWQktZbGFWK1JxRGdvcXMvUDJJa2FHSjdPMGxkQVFnT2hKL0pSb0RYVHhNVnlpZ0RzWE9BYzhBV25PcVJCMzMvSUhucXZrblpyNWdZNmZoRTZCSWJpL3BDWHVmV3p6TysvcXFPVXFsYmQ3UmFmOG1seUZLdEsyQ3hueU4yN1BETDhrNVpwV2NqQXJKcGU5YkxCQkQzWDJ4aGtXMTRIdVR4QXFhK3hubURSTTRvZTdjVDVRZXk2M2tRUnhlb0lPdFA0TEFwcTd2Z0xmRTVtYUM3Tm1sQkNnT3N6czM4L3d6bTZ2SzJvYnlQRFE3cUpDK3dUZ0RmL1pHb0l3MTdoUG4rSnZ4dlJQSGlUOTZUMXl1VzZhT0lqNVdUck56cEYzN1pXYTdVczZrWVJWTDhKUEd6Ti93L2FkNjV1VUJlLzFPOHdNcWpjTEJQdVpHRXp6cXBvdSswb2NYRVRiOU5jU09vcWxWNXdDZjdzMWF3blpwRzNnQWVPSFpTMXNCZWRHRWQrK1hlbVNuck8wUHhwZTNTMjUzV3V0eGZ3QWRHZkl1V2R5R0liNEl2ODBjUGl4NWtxLzB4eTlucVdCRG1HeDlVOGFGTGdOWkFUbHJ2MmJTcGxXWHJDaVQ4N0grbVZzemM3M3d0QXN6VWdMTUFXT3JoRGZYL1FFYWdZd3V3M28xaFJSMXV0d090bHVQTjZaMVVtMzBjbFBrNU05RFlQb0l3Zm1LWDhqK2FOVzhtZUp5Mm82T2NFdEJMelgxbk43M0tJWWFqSkNBWnRrL1pQSCtUQTN1UUZuZGIvR3dVaXlMUzdBVWR1L2pBMkcwcSt1NjRvSmVvczdxRWEwT1h4eXAvOHJCL0JrTWxBYS85WFJrWGFWQnd4cnBlQkxqaVJrUmc4NzZoc3lSLzdUdjZWeEx1Z3ZJSVFqUlYxSjFCTHlkMzNjVzN4M2JVYWU3VjVXOHJYRlRjR0RaTmFNWUtDRS9PNnFSVzRsQXZnNVg4cEU1ZDdSVkpId1kyekZnWlVkbkRUcFJjZkdjMHJraVR0c250R0tkZWF4V0tqaDJZMGl5dlBtQklsejUvZHBNV0MwTXVpRndGeFA4V0xwK2s0NnJYa09qZ1NrazJHbDNJeWtnK0hqUGNLTDZxZGNqc0Z4eGh1dUtvMldPUWdMckRxZG1reEt1bXBvMzA3VVdkcExoVmE3ZWpzcml4dmdIS2Y3THh2WnoxZnB3TnViL1UwdVY2VlRNYXVrS2RCY3B3M1I0L0Y2Y2ZPOHN5VnF0MXQ1RGszdmNXNlZ6c3RId3BGT0ZnMkhtNUNuTkUrZzNZMkxaT05hZWFoRmtsT2RwZEhGQ0RaVitUbnBTMVZzUFpZY0wwdEE0SVljWVJyM0FRajYxWFJTSEFPUlY5eTJXZ09iZm1rOXk0V29lWkdGQ0R0MkNkOG1oTFpoR1pOWjZqRkVULzEyYlZqUFR0UjY0NWEvZTVSWVQ1NkxBc1pHakxIdnhpS2hmUHV2Y1F1Skk5RmcxamN4aUk5TTdSZzZGcDg3eFA2T2NzYjJjZjBlOXlwSmZNMnpVRjEvZHhZRkpsSnh3WFBBRUM2bHh0YU5qMDlxUXFXbUNBZ1dKRDE3aVkxNXpQZC93aE94K0M4a0JEaC9DTjl6b3NFYVRnTzF5Q2xHSkw0TVdnSlNKcFRBcGpqYnBMeUpJWWoxK2NyVDhWU3JlMUFzRGZYL2RxVXZkV3VHd1l4K3lEeEFDVnZxZk9DdXloSEdSaFRycjdvRkpQZm5GYmkxS25NdmFMZVlFUGlESVlqa3c2OStvdEVNLzlndmJPRktmWjVCNndJRlNiaHVvbFlzb0JFNTB6MDRQeUVpeFNNWm94eVVwa1ZxVmJvMW5jK3hGdUNHa1hBQVlSNVpxbHNJenRLQjBic0w1cUcxdE1hanpaaGk1QlhUZUxKaTRZc0Z0K1hPOGJvdEU2MHl3WDd6cUhJSkwrRVFaWmVtT3JUZ05ZUmFIR0kvZWJFTllYTjdPbnUweUVuWHFBcW9jdmxnUy81VVE5aWpDNS9xQmdPcmJPUWd4a1FPR3YydkNJU1A0ME9iYjNWVi91d21rTVk4eEE2Q3VkQ015SFR5c0FPK1BpZlpFSXZuWmVFN0xtdlRlRzY5UlQ0alNocVlNa25lZk93KzFCeURMUlpTNGJ0VUtHdVBBUG9rVXZWZkRoOUxNMGhNM0FUWEJLNHNKSDRmd0g2NWlTbmVYYkI3VWlkUVg2Uko0NTZjZXA2aWV6U3g1MExsMEZKS3pxM083S1JvS20rUDJKd284c01uVkRyaGhLMG81dVJBTU01STFTcXU2amZrbFB0OGUvNkhtVktISGtvTmdwVFliTmpwTG9LZGlVdERVN0JiZ0xYQ0MwSXl5ak1VTHk1NlhqYjZXZitVaTl5K00wY0MxZ1hxeTZ2elJld3hPUkx1b1dEdFlWNUNHSktxeW56dmNPNlhjVDR2OFpHU0dleElmZE5xUTRsSFFRMzhBOE1SQUdzazhWd2gyVFJrc2dVbENVaWJleitYRmV5YjVJRGYyWE1IaHpuUUxMaXhLMHl4eVBVVld1SGlOTkZFbGp2N2ZydDgzbElZcHpPQUp0UWVXRkdOTW1aMnJRVG5XYmszQndUbVJ0M3BLU1NDdjRJc1U4VGVSNDl2djZ0Wm92NGd6U3JIVStaVVFvQ2xZSXY4ZUtraWlSNUlNeXgvYzJiSnMzZ05QMFBpV0ErWmVnMjI2azFMY1htRUVkWkxZY3ZuaE5lb1h2YzlOckdsVjFDOFgyQkU2N29DTlpOaEFFTUVVcVhFdGlZWG92N3lwRHlVU2xaaE80N0JYQlZ1Z3FEUzRIVjhrSHZzblQ2QnQydTcweVlValc3SGk5TDB4VnVOS0NGMlAwNUlOZ3FVL3I0MmFuaG5ZMmllSG9lTUdGWW5KdlNaRUVFYStNVklyWlZETFprMzFzZG9SWjllVTBpQlZ0Mk4vemlJZU5STWJJRlRBem1HQ1ZNRkFDNDQrV0RxUXFxakZIKy9wV1creFhJQy8yV0NmT0JiKzczNzZScXR0QTk4VWFicmNBdmFWUlp1NWVubTdLMlpaWEV6dVo5WFY2ZmFxN0hkQUNnNlRqZlFsdG5UZ3BBK09aS1pHQnQ5aWRHNjBUUTdNbHBHaGhDSnAvVEQ4Sm1LOTZXSUdQMGVrazdXWllSM3MyZFpNZDQ5bWNYdFcvN1RJckNRVDdTZmk5TTBuVGV5K3MwS2FUdUk3L3hibmk1QVJlV3lheHdHMW9MN1NobEJ3cW8rSTlFd3dqUjdUcjZuOTRWaUJRQVUyVnZFM1JvalkwQllzaHhiemNaejBjUnppZXhGNm83Q1VRdHpPNE5LN29aQ3pKWVptZm9ZblVwYm85c3h1NmlLTk0xaEhsbHZ5Y2g1ZzJwckFERThvWVlHc0gyZkRrRHJWMk5OQzNodHdsQi9OTDVRdjdHL3U3b0M4Y3RwSUNwbDNKNUpYY3RwYyttNnAwaVA3M2J4U1lIK3Ywb3A0Nkhuajl2UTNFU08xZXJLK0x3RFVZNWorKzQ0ckQ5dE1jR2pnTlBwYzE0Z3FDS0ZnUmpEWE54cVBtRmRacWNEQm5tOWo2YzNqWE5XM1lWUFpIRmFpdUx1TU4zeGxxd1VKRERkQnNscTJ2a2ZNdDRlZkdmUk5EN1dJQkJKOWFaZjRsbTJSMGhDMXRqUDk3Mll4eWhPSCtRdU9BQzdLWjhZZHNnVWQxS08vSWNWKzB3Z29MSFpNdlJOcSt4dXpqUHlkM1ZWWWlmQU9QeVowREdCUDNIRzJtQkNxQzRLQzJDaXR5dmpWeU1zbjF5NktLR0NXV3dueTdMc2RYcFQ5T2VHdm90Qmk3Q0Q4cG1XbHlQVlM2dWdxczcrOEdPdXBvK3BDSFp4QmhjdWlwZ3YxU2RIc0tCZURpOXIxSFowa0xEa01meXBuM0d3MXNlYUwxbGVXb2p2K0dYeWcxS0VrV0NIeGMzU1R6T2pwVmF3WHpuZW5IMXlPZ1NpRGZDSEZNeU5YdnkyK0FmcmxjMXNoekJ1WjMzSFp0Qm03SXRzbENtZzlqc0syTHBpaHVmYUdoMmxqcms4OXJLT3lHWElMbzl0V3NMcXZJUTBKbzhhOWtUWDkyblZuNHZQZHppNGlrN1BKQ1pVOTd2SUdXOXdhM3JUNnNpRzZGK1NRbWVOVnpwQXZBZ0NqLy9QZU9KVVNzbHlUZEZxK29EYkQ5MVQyL2ZJNkhVNkt5cmtYQnR6Ky9ERU4zY01QUHZTeTN1M2xaaklDU3JkdFFvOFl3b1B3V3RMRHZ3RExRZ2lxM3h4UkJTR2dTbHZBSHB2bnFXSUNEWHYyQ0lPSFphZU11UWNKY0xvQnVRNU8yMUhvZmxzTGFtbnlPcXNlcDkzc3ZURElNYlFkSzdhQjhqNFdCRlFNa1VkRUt3ekdlWnEza29IcFoyajRxazdxUlB0eHhsYXZUN2xYYUF1U2p2ZnJScHp2Y3UrMkV2YmJQRmdYU1BlWHNrZU1QWWRQWUpEZ2tmKzhIMXdQSmtBSGV6NGNVaG4rZHd5b29qcVp0T1BOZ2I3YkIvNVdCSjcyVUFIMUVvU0Rqc3NjZFYxYWFqYS9FanhNRFFTWElIOFZzZ3VyZjUxbFl2MGZTUFpURGt0ek5jVjZreU4rVk5UbWFaQTZQWnFKbUViUWlWL25FemVnVnlZcUNNbGtqNHVhdmdaUnlhOXFyTjNUNjJLaHFMN24vTmZKUXVscDZ4UUlQc0o3MFlrMSsxRVZDSVVCTDM2ZEZETDZmSm5TSHQ4eHNVTjRlczQwbGpxUms0TzhBek5xOTdmd1o0dzR4c2VrYi9NcUgvSy93YlE5czF0NmJEbHdneExOeDhmY2U2b25wOFdjdTJnMXl5NDZISVF3ZU5vY0JKWEtXZW50OTROLzE3L3hjM0JqS2JuMTdSMlJWMytzYzBjSVRaQUtkTS9yNHc5N0NpMkRYWW1oeFV4K05VMG9DNk4zbjgxcDJPd29jTyt0NHk1UE1NOUFBa0R6VVNFNFBHSC9ZY3ZUN0xIaC9tR2FIWkdiYWtHTFR5K0dBN1FaUmZMbVc1OXRYdnRzcGlQS1cvK2N4ZjhxNWEvREpIMUlTL0NQQmhTeWQ5d1JvZVlzWEcwckVRejN4T3RjekRJVUkvMXcvSEFOK3g4eVFsMzlEcVg2R3N0R2tlU3VZaUtpNHRXRFdmRk9uTDZrNm9ZSldXK3prRWtuRkY0TzRzc0I4Y2ZZNmtwdXJQOU93cy9UR2UrREhUS0d0MXMyUlVKaVVFb3d0aW1wWlZLMGRISGlmS2hyL0YyQ2tvbU1TTkhQT28yQWpUdlVNTXBKK1h0ZkJ3S0xkT0x5cVNYVjRQZWNNZUE2aW9nWlR0R05tMVp2d1JJaUorTnBDdWxFcEd2eFNzNWdXVHRCR0ZNRDd2K1B5WjQrdGEvRzVQN0w0MkZvSndwRWJhV2M0eEpDQ1M5dytJREtYb1IxZ3EwRFFCTmFNRlJUdEgvSFRPWjVaOVJrWVl1em9UbFJ3bjIzeDd1V2k5WlFybGwvenczMEpzU3VHdVFqVVcyVjhjS0ttbUVlRVdvVXNJbEdrK0hpNktka2ZWNHZodURiQXJZbjBPSWlRZC9IVXdvYVl2Qm1VNFpoT0lnMHVvQ2VEcjNKWndCUHdTeEk0V09YRFZaSE1VSGs2SlF0YmlWcnRaOTZDSW9lb2MyR01JOXFxb3ZkRVpFZzRGc3l6cmdGK2JETmtzMzQ4OVlIN2R2Q1c0eHp5NUtFamROVHpKWDRTdzgza1l3TDJ0ckJwVUYzYk1oeE82Q0l5aFg2dWNtazJUQ1QxRStYRmtyaGszZ0dCUllsOE5tUlNEckhVRFh5N1lxMGRKSlpyblQ5Mm5rQkt5RHpQM2pXMWl4VURZTnN0NUNsSno0K3hHbW9HbHBKV3VjMGNQbXFNK01sZzF4SXRFOFRqZWZyZk1sRGFTWis2RzljZWlsUmxjeWJmWlBDR2VTdXRua21oQU1SRUgrWTljeUI5ZkhOVVZJSzkvT1lTRjVDQzFzUXlhbDVoOWtETVBzL3FxTlZvckVCWWk4MlJCQ0JWeDVaTGdHM3F1MDBFakxFWXFSUFZ0R05rMHBFazR3WnU2enliUStlTmZQQU10a2Y0WHZIbDVMSmZhVmh2STJCYXdRQS8yQ3o0NkFOYnhIa3RRc1pNZXNVSFRPZVkwK1RiT3czSlp0YlY0ZzdiUXlIMnRqbFlreG81WVdzVTMzOEhzQzlQbDY0YXJGcUUvK2xtL0dOOHp6ZHFYRzB0eDVYMUZKZTVYU3V2SlRRbXNuTVV4eFlPbmxnMGxpOHBHcTUwS3dScUN5cUp0VDRuTmJrUEN4dTBEU1Rud0ZFaVVEUU16OEZ5UWRESXdTNkk4NUR2V2xPOXdGNFlKNytvSXVvN1BKR3VHL1N5bFY4MEFmNVp6S3VQTXRKVnFFRE5Vd1pJZXJ2TUR5dFIwdnl2MzBGcmsyblVuOC9RcnNzeElJNDhaOVVTZWQvSUpxODd6bi9nZHMrYUhad1h1TjluMTRVS0Y5RUlzYlBNU0tkbkRWVi9UU3NNeE1jL0lwWHFYOWtOdjIrcm5Ndks4R3VZTHNqQXJHeFUyRXJMNFpNU3hiaDZLNFVUSTl5REJGTHBrOW4zVG90WmRhc1BVVFV3Zytud0xDdWIxQlh2WWtWay9BOGFBV29RSUk1NzhPa0pGSTF5OW1lWUdxbnFUZU01Nk9nOEdVQm1WZkMxaVNTamFWbUtRTFNHQi9xZmRZNFZMTU96NUVSZ0Q3Y0YrVFlaNjlma3NRaGFUczBDWnVnbnBhTU0raGNFemNLak5JZndZRlQxY0Z2SWZjM05FUFc3UGc2VTJoMi9OU1d4bVhhS2Q4OWVlQlNIL1U2RDc0MjJSMkFrQkV6akhzR2FOY2hxNDl1Y0lBSUdjS3AvQm5ubXRTZ0Exd3JIaDlnYlRvaHUyUndROFdSQ3g5ZjRTQ0htcXFBT2RBV2t4N0tDWEVqc1p0QkFJOERaRDBJSGM3ak1HZ2ZLcXZ6cnhXeVE5UjJTUnNWNUQ2R0xwLzNXRFY1NWdKa1U3cDZPVkF5ZFpJMG5NNUtQTVNKMGhob25ZbzY1MVVnNk9FcDFjWUZVRVMvSlVNWFVFMXA3NFRENy9mOUg1VnE4RDMxeUlWaUczcEtQdVJMby96K2ZseXlSdFIwZmRBbFlqRnI0QnlnTkpiRlA2WFJQYVdxZXJ1dVkwM3M0T0lhMlpDdGI4dk0yanNqUnZLR3hvTWt5UndGMmZJYjJvZW92SEFuMWUyUVI4TkxMdnBhNCtLMWVsZ2ZLTUE4S2VCcG1MelZwUkdKVlFaY1ZTci9NUWRhUTlYYzE0M1FrNGEycWtlQXZWYWxZWmoxTDN1YnRMN2RoR1M4c3IzcnVlRGU5aEI5N2ZxaDBoK3Z1LzlaRGh3R2FwT3BpcWtQSVI1dE5xanRzYVR5enRvMnRhcWVSUzZOTEtaTWFCZ0YxeERRQ00wWFJpdnZLd2lpOC9zYXFJNnNiWnJaTU1sRi9iaXlIcGUvQzQ4SUxMWlc1QkdqYzd5dk1EbkxLTDR1bEJFYmc4NzR2TG9KV0xqRVhQZWtIS1hrUXUrc3hHOHhBSU5qa2s0b290Y2JwWUtQMDNSZFVQblBVYVBsN3ZMb3pRVTJqdWFLMUdXWTN5UWFMd3l3eWJTRTRLbnFnbDVVV0JpRmJWMm9iNWkzN2FEbnpKRXdraVlCNURDQWNVQld1TVgzNkxVUGtWczFaejJ2TGlpeUhZeXNLYjUyVHFrNjdEaEdZK3dzaEJoZ1RNSStvRTVZeXhQNXl5YlgwVlpwbkpENmpQWDh4Y1R2SzduSEdlcmd0TUMwVEg5anVhRHhzNFRHU2tnQW90bTN3QVM5M2NObGpUNHlvaGtLZ21TazBrNXQ3Vm5yRHdDakNQbEE3ZzVJb0tPYVdRdEhtSk1rbldlOTBSTFI2d3d2cEJBUmh5cjl2d1Z4N3d3bWJLYThnWWZiY09Ldmp4VWRNT2NmYW5ORDBNcGw3U3luZkVJYll4SXdoM1AxeUd0WjJnYXQ3c0d3d283aXJHcWd6N1dsWGY5ajN6bXRwYmhpZHo2ZXFZYzNGRFZoVWpQY3kvREhzbitDMjFvZENJQVNGR3VOdW0zQUFOdzVKckVaMGdqcWxMeWNSNm0wVG5HOFpIdkFXR0M2OE1ZOW1rYVhKdERSTnZmaDhSWWtySy94cFZpQ0ZQeVM0czdFenBlYkJud0xmblpsdC9aUlBrZGt0QngwQUR3SmplV3g2NHo4OUpvTlVhUFZYR3ZYcjlzWXNqcWhLdm1GbmJ6V2ZjUUdOUzA2dVhNSlgzeUtSbWVVQmZwQkNBaDBVa2pZLzZNK3NOcmQ0MnFZR0lHeHlUdlRKeFJaU1RraUtsM0RacEErREVoM2trTXpXcUZSOHZoblNnR2cwUUtuUUpCQmVYLzNjbU5KOGpZWW1Sb21aUS8zaHdwaDhPdGNUU1pRSExzTmFwOWtJb2k4ZFhqOVh2alZlcjdmaVM0d1NoTVNMcmljbFJIWHdlSFhsWE9sczNubi8xbWtSWkFKS1FlQkIxN1hxbzVUa3RIZDVidUJvcUNselNoc0pMdlR0a1I5U2ZSY0UyZktEeEJBM2YrMnozNm9jdGVsQjNJcXZMVFErUk1WdWdJd2pDYTExQmpxWkFPeWNRSWkxeU1qUlU4M3F3WVo4UFF5T0syTVpzSUk2cmdhaThyZWxUZkRDT0VlekZlMVRvNkNvTUl4YmtwMnV2SEhSUlhlS3ozS2Exb0lBRVFqdVpPM29GbXJUTXdLOXpIM01TNVBjWlRKMzFPSEpldFdDSG1GWGZrbFpRcXY4Tk9qVklUaThRREN2bXZKR0lDYUhxRTE0UlRaQk1MYkxlQ0dLYzgwVEp3c2xlaC9iRW8wY3lEVjdDN1pNMFlNbXVFcEJrU1V2T3Z4SWV4NVFiMVNMZGM5WXBIM1FWc3hjUGlqdi9mdlJocnUvL2NNdm5xMlpRdEc4N09TdThoZy8xTzhoZGliV3cxSjdFM1lhR21kWGE3bVVlUmFjaWdjRGxZYVlPUWJDOGVqSCs5ZkdIdGxNWEhPeW9kbEhsblV5OHpZS295SDdYZmluWXJZUjcweFBTNFZBWUppZWhtUU5pUzhCN1NNRzhMcnpFazhTUnUrU0ZVY2ViRzJ0S3lrSXltUUE0RjRCYjh1S0VxY3FacGcwNXRUM0o0S3RtMU1sL1l6blQxOElpY1IxaTNnWEIzMjlKTEpycFZIWFljTk9GM1BKcHp0bEZFUmVwUzZPdmF5ZnlCNHFuVDREdDkzMGxmVXRPVEtZR1VGdnhmMlFqRlF2T0tpY3RPS3dhOHJlMGg5YU9nY0t1SDM2YlJqRUVGQVNYMC9GcDUyWm9MZEpmaS9PNVNGL0NRTkZ4QUwvOUtTTmRVeWpYaGxhNjMrMVlUZGIxNGxOZkVIUnQvS1pQUlV5WGlFM2NxWC9VcWtna2dSOEJnclNvQldESE5rYlZKZjluTEVPVlJQNjBrSDlMYkNIY3ZXNjB5RUVoNUY3L0tJeGRQaFY5K1dhY2RvR0l3ODVTYUhrWnMyc3hLQjhSYkk1L1RPZng3RzMwN29YbDAvVDhicEhiazRwblExeWNjWDlWMEtkSGFwbGZZMmlqZHd4RWNCZWRPaTdmVytPbVRyNmtaQmRRVk54azNBL2NKU1NFMmVqb1p3eGZ0NjNmQXd5UWNRQkd3WjJMY1VRbDJ4K3B6a2p6OGxmSTJ6VFc1SHZWVzdwVDQrYmxjUTVTY2NoZStqOTNoZzlFRThURmxxOGhxSW1FRmcyWlF1MVFOT3lCSW10WFpodFIyWDVkditaUTdvd01jV3pFVVFBekxBVVIveFlkZjg1SE9abDdaUGR6a2VSSXVkcHptVlp5Z0hWZnZvV3UzVHpOQVI5czVQNWtGMHhKMmdtNXJvcDNYOEtQTlNtK3NCNll2dER1QXFHcGtqQTQ0aVdZSXRsNW50b1dYcHpWRkh4THlkNmxPVGVKV2tpMlpybDZOOHUzcUsrY3pGajFRSG12Q0V5cFZsdnlmZmZkNFIrU3l5eklnMnhZUFNKaFlVWVVhTGN0cXAwUDgyWFk0enBSRzZma210b2VBZnZPa3p5US9jWVJIVlZPUmhPem94SUtrd3Ayckg2cE8zaDlzai8xUVJtTld3Q1JRWmZxeXY3NTIwQlVKMGJtd01YZG1CcFJraThMWEVqRm90UFg0RnFicHZkWEVLakp6aDZsMW5sKzIvUGZ5MDhkVEh3OFI4OEs0NG9rVlBLRFl0NU5GUnptVVExOTNiaFU3dUlIQXBVN1BoODIwR05OU1llVXVlR1pkYTltNDY2dFltK1FKOTJQWkhjbFh0WnZiYTlKM2VjVDdqUXFJZ3VDWFh3K3pSbFVhbzNidnZFMUVqV3NuRktYQ0VBdi9GeGx6bzVFNU5kdXlmaDIzWWZSK2NhaTJiSGtBd1ZPNGRBZmtiR3pjYXExa01xYzNXYm1hSU9NV21VUm15Z054OE1nTXVQYk9uckgveXplWHpSZFBYZUhXL3ZTYzF6SFNiWEZ4R2xoeHlhSVB0emVEVSt3WG5NeWc4RitDSzNwUG5FVU8xaVdkemlsUTYzZk96RzhrYmtFNHBlaTc0blM3WEZhVTVoL1VQRHpJeXRzMWlscDZWVDJtQi9zeFVqa3MzS1N6SEpNaUVsY0ZjVFZwdEJoYXpwUDM0c0M5NEFZSzdnQW5aeHVjT0FuZkNsR0RKdTIvdXI3bUZDR3ZTMUkvaHBxc0NDRDRUNVMzcXYxSVdsRllTNWE1cDJCU25KM3k5anpLcTUyODNtekFncUlxZkJMZ3FaTy9rWUVubk0rTnVXUU1xZzQxMDVFb2JSaGo4T0VCRUJHd3B2L0pzNkloc0REUEFld3RJZ0RVK24vS0ZHL3VreC9XWlZWaTQ2RDZ4Rm9pZHZhdGVyYzBXOW9lY1lXOTk3aDg2Wk5DSDBsY3NHRUl6YnBVbkdDdHl1ekZhR2JHS3NhYXJKRVB5M0RGOEF6UldxNllTdWRFbHdZVDBtZml0MGd4Y0h2OFhJWGJuWlN5R1lYZmROejNkTExiNHZBZU9IY1VoQkw5MUx6MWNCUU1ML0JYWENKY1pYb1hyS2h6N3Q2bUR6ODlaVkxubXJqbWNuL0ZPTjZiVURrSmFHVDZJbGRWcmVsUktvNmtRaUVqZ20zY1RpWFk4dEJNS01rSWhNMERxOUNyQllkNjZtZXZ1SjFjRUl5Qk05L2VXK0g3N2xaL243ZEZuUzNMWFFZd0pkUUZBZFRWSEdFNkNRNlFpOWFHWWRaSVJFVHV2OVVYZ29JUEM0VFVCQ0dPVzBUR1JhdUErZ28rOHVWVFpLMzM1Y1FGYXY2N0ZIaEVRUEZsWG5pMlFtUFl1VHJrT2NVcmRCWTEwa1BPekRkNjFidThEbWdZWUhpVVBEaTNQSTZnQ2NIYXUxdk55UW5aR3BWdEQ5VG1JUXZQelpxWkxLaVI5TGcrY1pqclV2Y2xTbmcxdEdrcjJleHliQlBXb1lVdVpDVnJJT2FtaWZReGRLVDlNKyttL0FLMXQ2VE9OYzFEdTBReUdMUysvdzJZUU9rNExrUUIxTHovMWhkbWhvYXd0UXYwLzdVZ1pvbFZvVjVkaXFqUzBVY25iQitmUUpXd2t0NC9DckFldmZiNERHMmU1SEt6VlFrQVU1cE9pd0o2TWV6b1k4cHJlb29zbGZrUS9zY2pjN3ZBUWJuM1JkMjM1NnZEQVl4UnRpWEp6aSswZ01CWW1QSk5SbWlzK0pUYUltdFpBMWpPZk1sVmd3VXRmNllYUUdKZ0ZPVktXSWhnUTN3cWxMeDR4TnBlU0tpSTd0S1dhQm1CYVhjRkxrM3YwbVA0WEdudUhCK3M0NUYxTnAxYWtueG9wTGEvVzgwT2lNbS9OZ3ZkdFJCK1JINS9odHBJTjJnQS9pajI3NVNzSG5DOHZZN2k1dHJueDR1Qm9qMndSdFVQVERTK0xQNzJPZ3VyUDN1aEtmbHVZYnI4N25VUTA5TnFyNjQ0UVV5ZlpieU54cUlYc21OTy9WeUs3ajgvZUpLWjVMTVhzdDN4OFhyT250dkRPbE5ZTUc4YldhWlowYzkzbEFnMG9PMCt6VkZHRmNQcEVLVUZnMjZ5VkhvZ0tWRDdZZnVxTEJPeVozc1doYXlxeVdIank5WlorL2tVbC9HN1Q1S1YvWFJ2Tkw0ZzBvNWJkdGVseE9saHZIemhxL284aFVzbWhMTVcweUlZbnVHaWduYmI4TGYveUd4M29VV2hjbStod2JydXVsazRPc1JKNytQZ041TytGeWJJMXhnRnZRUU12UXVET0xRWUh5Ui9XT21RN205cmQ2MmpKQWJFdkJTelErYnJmZW03Rnhvamh2aWs3SzlvM0tKcmloWjhhTXNkeEpuTWcyTDFhSmszNEpTN3F0ajBaUE5sT01NMUtiTHhQVEJvM2MweUdTRFF5UytMWk55cWpRNTY3d3VMSmxUakhvUTMzTkhqSlVUV0pVdk5STDc5ekNSdUNnNnJTcXpUZGZPRmVOZ0V3ODMvQjJaaFR5aDFUajNjNFVESEtrZkQrTE16ODdLSTd2UmlJSnNRWmFxcmFCY2RZZm1uUkhNdERSSzlIaVFHOEsvUUlPRExObWt4aVYrcXQwbjhYMWpQQU5UWUNQUDhGRmJQbmRsbzlLVXhsQWIrWkhFYVNkbHF3cFdxczA4K0gyZFI5Y3FDMzVkakZWUFhibmhGdUx3Q3NJckpUcndiK1hTSnNzdXNwUk9LUXBhckk0Y1dtU0JRalpwalltb1lYamdWYWV0QUNFd2lTMDVTOGUzSVhQa05DUWlacG5tdzF0a0hKS3RWSkg4NWVUbW1mdkxJL0V5V2RScm9ZeWZ4cE55Rm1BT2t0RTJnWUpBNzBGSVN6QytqMEZZSTBxTFg5RGRjbTBERy8zZVZnUmFBVnp4RkFmMkhYRk5pZEwvSzRieVltR3BHOEZUY3gzWGRrdHhoSU9pakVHOHdLKzZ0TVBjbVJqK0FEZkpxZFpJYkdkQmRIZ0JTMlpMd1lIbGQ3OFJpc1JYTkNpZ0FYemFtanFuRmt1NWgzb3VQN3JadkwxTlJYcmNBejdkVnYzcWd1YUxxSUpEVjNrR3RQMy9lcXFhWE14L1p4blNubGdpeUxTcjlvWHVUblZZK2ppQmhhSGoxSXVLTHg3bVFrOVphdStKNm8wb1pUSFViS1ZBNHFtQzJhWHlPVDlUUG5LZ3kzQXgvbUoxQTRDcGxIWS80c01pdThMcW1vKzdXTUtyYU4yWUdlYmFCNzgwMWNaWjd6aUsrcmtHSzlTU0w0Yzd3bGVmNnJVMGpodkw3aXRkUDMrUUltbVB1NG83OXNZclNQWG5YN0s5TWtGTXp5V3Jpb2ZXVDBNVmhKMHlDemlZbUhrcG90N291NCtFUmdZWFdSaGUyWmxySjhWdWJlNDExZmJGR2hVTE9hR0xMTjdXOGlvanJCblpXU0RGMmhSWnNGcHliMWUrMklUMS96NXlZUjJtYW5OdFp1MEEyUlJiWmthTkxMd3JGR0ZaZk1iSC95WGlSUk5WbytGdGhPT3BRMlJmaExxV3lCMVc5R0pQcU1BMzJXZnJsY1Z2eWdKeFBuSTJxUDR4ZFJWajBXV3IwR2hxZUlweHJ6ZWNnTzhxU3FLSjBNd3c3c2Z3a3NGSGV5MEMzdlpqQldFTUpsbnozeXV1bmZoS1FMVDJZV3paTVZWQk51TmVFa0JjZDUvQllxcHcyZTFZNjNaU2NVK1E4WXpndWw3ZVREVGxyQlBaeHVxemIwRUYxNG1pR2dEbGovUzlGZktVM1NiODRNUTNmNm40TGUzN0tEK0VmZXR6c0oyR0hCMlNId21CRUxQSlM0Nzd2Y1A0U3BCVFMvS1c3RHRHRTlYZk5TWEhlMUJ3c2NIWTM0ZTJ1UzlZRHFUVVVaMEJvdGdmUFhLelMvcmM5bWhDWFNBUmhOZ0ZJV3F3T1FrUUtYc3NqNGFtclFFN3lTK2xsRWdXV3hoZ2lNQk9KU0NDeXhzSXUwSGpJc2pVc2dXbFJBQlRTSitXemw1WWlMek9aVDArdzFqL1lNSmgwd2l5eHYxbmtrU3I2RDVtNEhSYXhrV2ZRS2E0TEl1Z3hEU1NIdWM0aTE4djlSTitJamgwaVNsWW5FRjNzOVloVkdnVnNvVEQ0NFNlNVJwNTFwUGFqM1J5b1dFVnZlVGxkS0RXQklRTEFNRDQyUE9TZmFvbHhjWGpuanl6R3ovQ2ZLc3hVWTUyY1J3bnlUa25PbTlPbStpTXBnU3Yra2JkYTlTTUJoWnVKaFMyU1lKODd3SEpUVDNVZDFnRFo3L1pROERMQ3ljalRzSWtqbWo0eWU4ZlZ0cVdER2VOZjNLYXhibjV2YkhXTm5tVWY2ZzBaczJRcm43RDNwSHp1bklnOHcxS1VYV0Fxd0pIYWpXTW84aVJmVVNoNE9ReUJGY2JWZlpsY3NHbnBpZk51R0FtY1Fvc202NVhNS0x5SS8xaS9JY3ZDZWd1eGRMZVlHR0kvUWtzWTZnRGdackRSMnBuNkFNbTQrdHNDdkV1WEQrMTZXMnh0azBHVUplV0w5ZTZvck5QY2pWRXdyUHRhTFZNWlA1Snl6VzJzeTVoZXdUa2tFRkVjaWNPa09kb0xRZFNCZjBYYU5rZlJscmtwWWIyYWhWbEVBTS9sQVlyQnlGRENTR3N4WitRUnRzWE40SE4yTld0M1A3REd6UG96MGExOHozdmtsNkE2NDV2eW9EcVBPSlBnMEgvZk95UUtmUW83WnBIOThFb2xpL1ZjWmpxTEUvaVhCOExpOGY1OVZkdTJqdkJERFduRy9IR0piWitSNVBUMWJDUzQ1UmF5azYwU2tLcHZhTWVWbmhOWUdvY0JTREFvcldjR1hpdnZpaGtVQXUybGs0QU9OWTIrUG0rRms0SFU4SUYrUDVwOHBtcFFUcG8yeUFjU1lON0U2ck1ZL1I0ZmkwL0MrdUZDaVp6UTVJS2ZlZkl6TFNIc2krN0pEcmk3OU42VWJFQTI0M20veEErTkRpT2N2Qk80UmpWRG1vaTd1bEJrYXNaMFBJOWk5a0VBRjdWdm0wY2FuNFQxcWFCVlk2S0FSK2xHWXFJWmgwTjllU3V3UVduV2ZNZmJacGE5YmY2cEtFcWVqZ0tDRlRHTzVUQ29kdFZLVG5DODJNSzNUemNDZXJ2TjBvRERaTTJYK1QraE02UUhEV2ZxdDQ2RlYzSHMxcE43M2F4QVNqU0hjUGF4a3dvNE9tbktHdUw5L2JEd1NDVy9VUUloTWdWcTRHOVNMUWZxZnc3L2pFK1NSNXJVWWtOMjRCYWsraHJrdFVjdUJESGRJT3d3ZGd2UUlXdVNDZnNtZGloT0p0T0ZYaXJsdXV2QzNMV2NSc291SmlTNjZ2RzQ3dlQxdXc2Y0Jja1QwRmJqZnRXSDF0NkZ5eEtBZjBFRDVFbHBiRHVzdU43OVFQM0NZeTVkQlRDNFFYNys2cVJnRTFnZi9kcnh0MU55L2JtTGFrclEyVUZtYjJTcDQ4TnZodjJtelppdmxHTEtuOURXOFZqWmljMXJKaGxlbGt0SHFnTmpqYTQrYzZLUVp3Nm1YL3EzRDN1UWJaR0NXQ1dLSHF5M3JYZUJMR0wvMk1Ca3E1U2lhVUhYN0FVWWtrcC9wMVJ5Q2ZYV25xVzNEWkI4ejNqQVFMSTJ4L1B3eXNvUU5nYVF1UWtuUGw4cnhrQzVjVVVwSmV3Vm5Dd2V1R1BkOUtETHZCNUozemVRUFhaVytjYURHWkVqNUcxdjR6UVJpK2hZMnhaNzZkT0pleWJCZHU4L0JQdS8wT3lHTWNVK2ovT1FLRnduQjBZM1h4RkcwNDMxNzdKazJDOTFVbEcrZnhHL3ptYmd6WDZDUEhzeGFWL1pmNm9ESHp2OCsvYkE4eENuL3I1SlI4SXMyanNOUkJ4ZzdrRlYyM2JlWEtVNHl2MjFHN0tpQkJWN3A1cmgrY2ZzV1NsaGNEUkJMdXJNYkx4WUNKTTlQOGN2ZzJwQlJpZXhSRllmeWthVzhwV2VsVEFIVkZ4VUZubWtJZ0xMV2ZDRTg1OGVhcmZXNUswaGZxY1EvZmxOSzB4Y21XdXNwMnN5NDducXNvbDhZMHBoU1hwMkhSWHZVSGNlY25veFhiYlY0ZkNaQWFpdUE0a2h2NzB4MGlpRXQvZVJHZUR0K0srZ2FZMHoydU1RaUJPbko5Q0N3bW9TeEtXQmlHQndJU2V3MVpXWmpDdjJCdDFVc1ZudmFRaDU0bzQ0bEpRZFJRZmhVSEdUY0ZTTE5IeENFUitiaE9vUk1jNTE2b2NYRkxzL0NsSUZyeXhkd0tYbWtYTC9Cd2tzTyt0czBaQzE3M0JSVThBcldxSnJ5ZVIvM0VEUTkyVGdrWUpjQi80dUw0ZFlCMGJDZkxRYkcvUWRXaC81cVZWTGZiUGdPSkNIN3hHbzNjSGpNeE5WOWh0M3I5cWd4ZzNDb096WDYycGE4T1lTZDJaMTZ3QWNiYkRoNnBBOXZaMmx6VXBOVitDSW01TVNkbGgwZ2ZNWnpxd1FwMkh3YVd3SWJaOVJjKzFLekZTSnAvS3RGNE12d3lmdGVMU1J4R29nbmJhelhUMWVXc0tmdXNWT2ZOY1lNUTlEaEhIZmhUT1VSVmZFVHE2WDhQZjhFUlExa21JMVRLbDZZWE5ueElLQ3p1aTVZUXFJd2sxV09LcWlZZnBVNlNwQVZTa2s1RFBMMkNSUS9EaW02RDJkamJMNWlTRXlhTDRyVXVDeFVIckJQWEpPNm55VkpjS0dFa2h4MTlxdnk1QmdhZ0hXam9tT3RlbEtPaXcyeFZnM284VWxueEIzOVNrNGw3YVhtbENuTzhHeFJSZ09DRk5iUTlZWDFUOHFpc0ZVUXNQRUttalJ5N0diN0o5RnZzRnBtNHU4MlpDN0o0RE16S3czR1BTS3lTcFluSURMNFVwUEhFWkdVazl6N3Q0M2xFY1NzeCtFalVSeFNjSS92c1paeGJvb3JjR1d2NGRsZ1UvQ2Y4R21rRUtHZDRLUmZEOWFndTZUQ2s3YjljcUdlbVdoVjNtWUVqL0NrWFFtRzY2MXNlcjlUTThRaitjODZIVE4rT3MyeWxORFVrUWRrZEhCeUdNOUYwS0lZZldPSGNmeXRmdUpUSWVqV2VEQnBCcWU1OVZMUFVmRy84TjhYVDhCTEJ1NldZYjZPclp3bWdnSkd0Q2I1Wmh5QW9oMDZRQW11dzd5SVkzVFNRYjlUQyt5WnZFNmFMOVJIdlhlTGhXaVhzZmF6VlhHS3pKQStMV1VndGV3MkV0ZTk5d3dpWUc5UTQ5cWhnNkc1VWhyVkxNTk84aThqYTAzOUxzNlhEWDFPNU5ISEFUOWFVNStXaW9VT0k0aFRJSWMyS2FCS3ZCZXpyUm1yaXdPY1V4RjFxWE9aNVVoWmRuNzUxUWUybHNCWHBjYzd5SWplQ2JkOFhlUnE3cHhOTUx4VFVWYzZoajFuc1hGa0UvV3NWYjVJNmFNZDc5ZC9LWVZWQVdGZXNWRStPVHo5dkQ2QVp6QWY5TnFXS2l3WUorSGlqQUlZYlhmL1c4UXFFeUdhNkVKM1NiL1V3ckVFdDVUeXBMbkdaM3BZdXYvbldyY3RGMldveFh2V2J0NTU1aU5yTTZoakYvK3d2TDZFYW92ZzRHMHErWHB4a3k0dFJ1NnN2aTZvaExYZ3FYWDYvVzV1NHBNdWtPaFM3VDRvd1lVM3VTNytaYTUrdC9GaSs4WFpiVXdDOFdGakpkQW1BVXpGRlFvdGRnWWFsWlg2NXpRcnB6aWpETDlnSXlmcUZzK3U5azNyaVA0Rk5QZE5wZ3NRMEhmQTBieXQzaytoRmRRV0JnK3dUemNmOUUxdTFZRTNkNWtHTmpwVU9oVXQxa1IzQ21sTWZEUHBUejdsVnp6MVFRUzNrY2YzZ1czQndHTzhEdnJrZFU0OEQwYVJyS0RaNVdscG9ZU2tkZk84L2xpK2lYOVlieEQ5VHJENUdKK2hZdWJvUlV6YkdEMkV5NS9tblZnZlVhREs3dG5uVVMwcGhBa3Z5bmc5c1FkdEpkMERub3h0UHJEUVBWdkhGY1VyMTRMajhOYmh6YXlZbXFTejl1aWl3NnVOc2pBTUFNVURCTFNFYWlldllYTmY5TG9hQzY5ZW1uNk52ei9STm12WnFGOXVyZEhKcTI5bDl4Z2JhWGJxdkYyQnZtY1V0VHphako3cmt4UEdLQlpBVTdPcnpLdlloSFZwWVJRN1BaWlQ1OWxRSHVUdzhwSGk3aExodnBFVFMrRWlHZmRheWREcEZIYWxrUzIrdENCOXFGcFFnRXZMM2QzeWZNZGNJYzYzMHNGNjV1YmREMzF3UUZVS21EeG40K2FFVHoyRDcyaTFWWStBUERCdjlvbXhIQVBoMWUzbk1vcXN2STRWM21yT0Z1a3ZzUVprbGdkcjRNOENocnhMdlpIVDJFa25ib0hEY0xzRjNIVTV5MUcwbXdCZE84SkIyZU5DK0YxUloyNHpjQjl6UU43YTg1NnRUa2RiWnI3cEsxNEE2bWtEUkdqdE9UQlZMdlRVa3Z2NDVGcGtMS1pWMWJhSlM3VTUzL0ZOaXU5ZzZRdDNFeGY2ZjZRQitUU2gveExXSERuRjAzN2FwZU5KK3l2cldmTXVlMCtNSjF2dnB5a2I2QXlTSmM2d25jOTVGR2syaFZlM29jTTU1T250bzJwdDl5RzRDU091Ym85bzF6akdZUFE4MnF6bVNwY1NXMitVcTJxeFhYREpaeFJoSyt4dUxtS2ZNU2Vyd3owbkF0Yk9KQTdVZWl1UENTVTBZakdRTzFJWHJwd044RXRkRjdpWFNVdHdEcUgrQTFTdXRmSGdoaVVFTVJqclkyNFlxTWFPZzRXTm1sU2pQN25NYTRVU2lsdmpYQUVXOEJwbTRPMkY4Z1VIU1haaTh0VHJveHgzYW44SFBoYmhhTmdUZHc4RFBBbVZPMWxyOFJDSWd2QjFIelZrbnhQOXU5WnZnRVBhdkkya2tVL2R5YTFzUWZnWm52M3BPVXV3dmJTNTZkVFA4Qi9xOWNsbmZHdjZhL0pWOXQ2TTVPQ3dBRE95YmtzdGNYaGk5TEp6Mmd5UWQ2TWx1NHhOSlpGOXVMRnVFbmtibnNyYnFjU2kza25seHBMck9tR3lidVlmNzVvT3ZRY21aaTlVbHdPUnJxWFVUQmsyNDdvZmhZK1R5OWd0S3hiK3NZWlQvNmVoak10Q3A3aHI5SlMwTmlGNUZHNm9pQkF0ajhxVXkwSnhERFZrSGwyUlFoeE5OMGQyTTV0SmNsM1BpN1JXcEFZUXErQ29XSGY4WlJuSTB4SVRIemxnOEc3VUtGb1Y5SzV6VFBPSmppN0crQ1ZoZ0luNVhpY29Qakk2NForenhLUjlmajVQUnEwd1NBVWVXN0ltcVpDcXRvY21adzljQWV3cTJXVVBGTVVSTnBHWFB2ak5BNXU0Ui9oa0QrcjRzalpHKzIxdkw1em5sOS90V3VvUFdDOEFjcjFOZXR2ZC9rL3FSV2kzWHp0dElud290VC9Wand1cVV6MkVRSXFzWFFGbXp3bVRnOTgzTS9VbXlEYXRxMXgyVFhwZ1FYN2tqOUxxZEtDemUvVEpIczl3YW9SS01wMERnbmtJN2F0Skw2cm5MckFRcjVsazlYYnV2UnMrTXI0aUQvZ01GVG9yREVHQlR5Tm85TDlhTW5hdTMrNGtLQVM4aEpOUm1WeVhGWS9qL3dXOWp5a1RmdmNKblFqVXhOU0tLUjFFNWR3citFdjBQaVY0SkYxd2xUVFpWdGlTQS9SWnlBKzFFQlVjQkM2dU5jMzhiWXFMemJEeUE3V3k1Sk91Q3BWREpEcjZYblowa2Fmd01oMytpNmpmcVJ2bWJJcm9SMUVaTmtEYm4wdUNvM1dXMy9EMnVjZ2UvWjUvNGJNSE01TDBCMUNFdnBZRXl6bmhQQnhjdjk2M2lUcVZ0M1VKR1FOc3hJYTFESkpyNUtuN0ltRGZlZ3FSTVJ5bk9yNjFGYjhNYUdBeVg0bWhWOFhEM2JkbmF6cDFJY3BqQUpwS3VCR0FHNkdvUXcyWGs4MFVzS2dRM0hxS00yWmZnakxmaDhjQm01Smtzd2thSzVEWlU1cmtVQkJiR3RhM1BqZ1V6cHlkK016eTB0a0Nwd0VvNkxRN09URFlJWkhmeDRyQmFFWS9BMjBMRzNrenYyZndwV0ZML2VrL1A2ejU5Y29UemRLbTdpS2dFOEhkaUc5VXZ3RDFucnNNZ2pXUkhoNzRDWGNpeExXbk1EckJMRlV5MHZrY21WanIzVFBkUm9HekYvZE4wcDR3dnNZWktCWC9hQkhxSTlyOUVwVldYS1NKWEpJclR0V05sRFdCZTlPbXFnbmtwY1YrSGZuWmVGUlpSMEtzOXZsQ3JSNVNOOHkwNDllQzlyTklvT1hSS0JQSUcyQlliMk90ZldvNFJ2OFp1NXU4YXVvbmVZb1BucEpQYlJjLzh6c3NYUnZteTRDSUNVSTREeGtoVkdWelRIZ3FNaWxud0lWbzlDZm5aZGgrbHFPd3JhNTM2bUdScEJuS055Uko1RTFjQUhxdzA4Qkx6Q24xUmNJSUt0S3VzV3VRR1pudS9GK2JtWW9BZlhCZldQaU5wWk1rNDlwblozeTNieDJYYXIrSXpoT1d3b0pCb2xyTWZyNVVlZU1GSDc3ZmxnTzQzL1VTdHZRVEQyQWxBOUUrVDJsRU1pQ3p1MzRmTFd4ZmI0TWZ5eVh5ZlVIUUhCZ3ZZLzV2aklCb2RWYmFweDlCM2ZXN3JRek42ei9ONUxwQWZ4NTB1UTN6aWd4ZG4rS0YvaFh5NkRQbXBJZGRvSW1TUTlBRnFKcU1jVHA3Mi94amlpNVdKY0VUZnNUNFlDeXpoUDU4U01OcUFHSFpHaE1EYnIrc0VpT2pYTTJqKzc3ZCtYNUlJMG5xUUFwUkdQWG5sQjFvWG13RGVhYk9TZytZbnBwM3djenBGQjZqaUFiNEZucDk4d0cydlJiNDIrTmVPbEN6aXJFTHlrT1FTUEVramh1a0ZHVW05aEY5K2lPUUpUTE1IUmVWakpodW5EUGdtZTRBUStQN3l3Qy9TVXZHRHlOd2pwWXRoL3Z6Vyt1K1UvVUFNZkliMGF3M0FYOXA1NzJ1aHRIVUR0T215OUlYbGlYcDdTK1J5cC8xNHpkcHdEM21vWUU3c0xFZWFaVGJhRTBsMFRYYmJkQ0JYNnVDRnJGU2E3eVpSSTd6dEdNbHZGby95MU9xaHMydGQ5eXdvdmU1a1pPV0VHdG1JRUIzRDBjcHBJL0wwMHgzS043MUJGcHIwQ2QyVXI0bmdLendoKzE3Sm80b09DYk14d3pacjhVR3FyL2U3V1V1UW9rajJIVXVRUHhEZlRZaks0WkVpRVhsa1MwVjlTbHhhejEzRWpVOC9yZld6dGZ6YmlhTUhxRmRITGF4VDFYYVM2NFZqNTUxMEdRbVg2UHhzcTN5WlVGaU5pSzNLczBROThjakJuaFc2dzhCNXkza0NaN2p4MEJZUVFOUE1jejQ5NVYwMi9oMmxvTS9FdW9JQ0NZd1V6VWpQd1VVRE1EcFJvb0Y3K3I2VlVieVcvNk5JYkgyWEJlTXNRNHI5aEM0R1V3UkdOSUdORTVPbGJzWS9rTko4Z3U3MG1BRWswT3MwQ3lmSm1Kb2p6S3lndVUzL1VTOFJNMDlvQWxFRE5aSm9aNXc5ajRaVDloVXNKV2p1QU5NOXhQZWxSWFB5TkZtRXZZVnoyak9PaVFPVXlMdjdLMkF3UUhRdVRPSkVQNUE0MS9sREJEQ0ZscklzTnBGL3F6N25rNVEvd1g1YW5nOFlhbzZwdkdOY1NpODFvNzYyUVpMbk0rSk9RbVZNbmxPMzZYUkZZZmhseU5sZVk2NXQraGNRa1h2cktiSkw5M011bzJFb09JeDczQWpJVHdmdFV2WlY3VUFleVQxeW9rdGZ4L1lpWnM2OWJ5L1RHeWNYWTBuZFFjeUxrNzZ5K0dXLytBZS9maTZ5OXpqVGFtMXdpZ29maWdyOUlzRlZjK1ZmZHMyUkJxcCt3VXZjeWdmanVldUJJeWZEbHFhUUt0dTBMbzZ6cmNXeGhlK1JieEwzSjZrV0E5TmQzTktBcUViQ2gyOU4xTm5GcUZKU2Z1eXd0dVRUN3cwUDZRT2RQNHNVSWlIRjdLR0dQT2JvOG9xSG9zNlFBV3N4YWNrVzJYQUJ3bXhJUytseDlVSnNoc1RNL3lTT2lhZURoUllQUi9oNWx2RU5vZ0pFTUxTWk1yOXVpckg1b2VKNTcvdWdsbWhQZUZ4Z01paTJOMi9tWTcyaGltWjRyV2xoTVlYTEYwWlhWVWZFaUVubW1XZXhKcFQ1eTd0NXY4dHowVnd3UmVMNzlScUduOU8zUDlEb3dyZU5XRFpYZXZJSzQzbTh0aXJ5dElaSlkxRzZtZCsvQnRPcGJrNmlQbElFUTM2cTNqaHZyekMrcGNCWDNqdDBTZVFvNjNjazkwWVJzakZrNmMwN1lLOFRHY1gwVVNna0xXQzNzTW8xUGN1NFBJTjhmWFVZRENQOVYveVZJOU1EZ0JYQ0h3MkdLUFdVMFA4djJBUWltQUxUYnJ2V0tjbStnRHRObGlPSjMxZEVwMTZNSjNNOXE5Tksyd1JCUmdkZjlBTEs5RHR1R1RQSTdIcHZqYTVFQVUzT280ZytSNlJmSzV4N1Y5WlY2Z1daSWFFWldyZFJKM2NkaTROR092Q011ak9hVkVtUCtvVjlqSFM2c3ZtZEl6OFplcEhidENldlZ4N3RDbWNUcmtyeitDb3UzUTZjWXdHSEJuZUpESjd5RXk5K0g5cWduSlo2ckNzbERjNmhKYkp2N2QwQ1BzVWMxdzYyUjg0OG1BR3dDU1paMUdEbEpJcnNST2FUZkZCVHpVVUJmYTNZdGh0UTdkNWhCKzMwU2NySzdYVlVOSTJaRUpBRk0xZFFHNWF0bCtvZ0t5N3ZRMWJlRjN1cmI1MTRqd1BlMmFhaTBteEVQNHQwL0N1WVpvaEQxTzcwZVZWRFBNNjhDT1pzaUhyT08zajR6M1krSm45UFVaWlNFRmkwV2ZSQmpCaVZaT3lybXpGVzU1WWpXNlJ3RktLMVZEVG91M1REUXc4MEhFSzRTZWJEaFh2UWNBMlorMjZHRWQzWU8wQldpMXR1RFhSQ2hjL1oxWnN3RGRrckVlNkNicDVqS24vWkdNQTdGUGRTUmJCSDcyd0xhQXJYQm9OYjBWZG9HblBWaTB4NUNXTXJnYVl1OVpvdmtUdFU5cDZMR2N0YjJIQzlrWndoeHJYRnpLN0VTK1BXYXdQNUxuOXMrQVQvYWNrdG9lOEVqaFRBMExiakJKVlBnSnIyZWZIUERzZFNidGtVQVFNVkxQZFlidHpsQXVPcEJzZks1YjBjNUtYWlgyZy9kaFkvaHUwRUNvUjZlSnVveXJ4c1NKKzlZNUYybEpDVUpaUGlubnU5K2lyUTV4c1BpUGFzeDRIaEhlMWdlZ3VjUm1QMHVXb1F0VkhOZHdqaXV1VVJFOS9WS3ZKazE3QXVlRFY0TGNrZm56VUNDMWdtU1dJZ25WWWh6L0FkMllPNFFCYVN3S3JNb2xlODI3ODV2NUpsaHJLQU10azJ6OCttWEtzZG9BMG0zVVBwMmEvVTA1eTRjbThRUFpQenFTK2lZM0N2UEdqWVRHc1U2NlZncnNMa3JqckEwVDNCMGdFNFRTUnR1aE9wOVB2b0lUWGp2L1lMK0pOZ0c1N1hEYThXNThsb3NiTTA0M0NvZ0RBcE5tNjRML3cxRWRDMi9GMHFPZVhtblpuQlBrQ1NWY3BhUVpPZExFMkU1cXp6R2xZYWZWZmJDMlhLUGg2cURUOHJ3R2JQY1NUWlpKaERWWTdZUTFZOWdtOXJ3N0ZPNDJVbHhrYVU0bGpQR3ZaamNrUmh3dVRLbndoYWZDbXNBYyt3Rm1YVldqVWpIYmd1Qi9vdVBKaVhwWEFJOTJHelNtb21VbFFpU1JhOGpoWGV4Tzk4MUM5bVVib0ZhSFJNK2gyallnZ20rMmZEVHRkczA1d1NoM3lmRHUrc0tXSFRhSk1QaXBLYi9UeHhyR1ZjMTY0WmpUUW1MSVFrMVFZa1VnSTBuVnVGZXp0aCtrQTZOdlZyRjFGZmJjVmFxZGVIWTdNZ2F2clpWYmU5clhaS1g5K0g2SHJidmVjWW03VGhDWk9RWUxpU0JZb3ZQMXNuZmhKbTBzSWYvZC9kRFdVYjV0ZWVXdnFvTHRPaDF1ZDF2WDhwQ2cwM3YxWEcxRTdlWUpJdStITXRyQjZGcDBGZEpvazV3SUN4TzVIa3dRNEFML2t2RTVBOGlkcUdRRThTVWtLRVBnNDAzNjdXNE0xWjQ4RnoxZkc0aHA4RE5Yd2lzc1k1d2ZSaWdMNmdLZ0hPYmhEQjBDTTNKeEliaXZQUVQxTTU2Yk5ZeURTYUJNRk1kUUVXa3ozUVloaUtCdWVuakYvYmpramM3ZzF4L0pNSmlsUE1xVjEyczZldEltajlNeXo0cXlWRnJsUUMvYzNKYW1WdzVKcHBRZkk2SVlmanRmVWlON1B3N1lIVFppUkgvVSttenJBSHFzdWRqOUd0L1RCaExzM2dPWm53UXI5UDZEaUlrM1p6WDFMR3RHQWpGSUh1eVUxdEJyTGdDYWZBcHEraXNTQ1FqWDhyaC8zNGRvdFR1ZjZsTTVMQ2NwT0pwTFhMb1JBSS8rZG9BMXF6bDh5d1B4NGVXOWwvejV6TVM2b2tyeU92d3A4ZEIxM01WNlRIMmxLWFpQM0ZxU1VXTVdnN2dPR1cxejlyN3ZyOTdIOHA4bjl6SGtRdnE5YnVTZHp0ZEJTcEpMcFlobThLdytMRkgyK3FhQmJOSXZnMjh1MVlKcU9peFRyd1o4cm1IOGdPcm1xM1plSXZnUXVPeVpWNnAyc1pXWlM0MVh3d2ZGMHdwQmZrOEhaL3dEWmUrVnFObmZuMGNXNy9pSERGQTRVL3M2bE5mcm5CbGR6TzhsdXp1TWsyZ0lWQVRGTkQzZ3lrWG1oZmZwS0hiRWFNQnNxbGhhR2M5b1l0c0U2UlpmeWMxQmpCMFFYazNwTEpXZ3FpNjcvOVUvMlpVT0NkNUxzeXRTVm9ZZWNZbVhRaHRSQ2dib2txZEU4dE5BdmtFU3FWM2tHV0lSNFlBdVNPZUQ4UUQ5RlNZa2J2clppTDZubGVyR1UwZDlZZWdMNFdLemZLQTg5clEwQWR5c2FzUTh2ZU1SMEZRMDRrUGNodVNjdlJ1Z0hOSStxTFVxMU5tdHN1WnpoVlFHUDB5V0lWTWsxZ1hzYktjZjl5c0RzVEltdGZWaCtmdXFUNTh2eE5BSHJRdkVrNFpMc3M3Y1lWWjJmOCt3NENEZTNHYkhkNnMwTXJxSHh4Z2wzNklCMUtBa1BjRm5tV2hHTXNrU1BRa0RBaVJ4WW1maGVoanltMWthWW9TcmRsL1ZXV1RtYlNCYkNEamZIbEFpVE5BU09YdEFUdmpYNkJ1VkZYMzJKZE45Y0tQQWJ0MkdMOHNIZlhhNHYydCtkbHZFcWhic1NXT21tTzZBb2R5K25INytVbnBJWHBrSU9XeDY2VnA1ZUJYdHB2dEZwNk1NcTdMdWRiM1BmT3IrQUppTTA3SGw4SEtLbW9OcThvK21rK2JQblFHNGQxRElNTW1OaEQ4SzBhc2RieWgrWFdXYXIyeXpsWE5XL3IyQXRQQ3RkMzY2bXoxbVFYNU1KVGR3eEs5QU05Nm5BbEIwM2gvQ1RleWtQTXl6cndtdmhmTDFnVlJZZzE3dzVwOStDc1ZFOWRGZk0veVA1bDNvWGNrWGhkcjBjYXhza05WSGpxWkNTaXI4ZHZUb095MmlTNWgyN1lLRWtXU2lLRCtGYVh5WkNxZDBoY1JTbEwxWmZ4Z05SVjI2Q0FCbnJzZUt6UURvQXE5bGpaUHI0ZmQ1NFlwTjAzdHJZMFprUkRDcXZOdk4zY2tOYVg5UWc5Y01HTEQrTmppdzl2UjNWT1hhTy9mKytEbmlEeWhSaG13OS9JM2RTdmluZGthYzA1dlFCSjJFUm5GWUhoRDd1Q1NRVzQ3dEd0VU8rcUNneVhzQzcwUTlhTUJQZ3NScmFWR0tzeDZIRGtYUm1wM2REVlk5bzh3M21pTVdObHgyU0wzb1ppS0g4WmI0Zkl1ZzZjblVnQmI0THErWCtSNE5mMFpMR0o1cmpJcXVYY2VUQ0dkVk5PMmh0ckZkSUtnM2JIRXpRZHdWd2Z2SGJ5MkljY0doMnpRSW95endVTHdWc21kMy9pbFRDNkdPVlFlYkpEK01pZnJKRDVHbDEvMktrVGFVODlFMXhwRkJqZkdPUUQ5OW52eWl2OVhUOVBYODJZS0pxUFdpQ2hwL1EyRUtMd3pUdkNsdFpKSTR1L3F6aGx5cWZRUnNyUWJNVnluaWw5Tk1Id3lQSmdYMDkvYUtRbnRmMGVVM0FROTRmUEk5MG9uUHAyYWdyK2FKbG42VnV3MWFBSWN3VXAvZEVSdTBSalFlaDdPSUcwYmYzcC9XcEVUbDFFa2RDSDN4c2VjY3MrT1V6RjB0SCtsTjI4SjFrNU9Uc2tJd3QxT0xGUDVGdVJzZEdTWmZSQnRob1QybFc5UEV2RXA2WHdnUlcva0FZeEVoSVIvL0NvNDh2RXdrNHZjQ3NmZTZha1dJQ2UyQ1h2ZE5WWDhoU0IxVFZCK0ZvR2FRWllZZ0ZVZi9DenZ4a2tFbVpFbXQ2aUxhVHJsdDdaZmxzcjRvdnpwVFFwdldTK0dGRHNuanlCc0tna3IyOE9PanNUT1JpWkdReXdPTkJ4a3M4ZjVxcmNDOWl3M20raVgrR3lTUWpyc2lpdDQyeGlVNjh0MGdQR3BEWGRna1NDVVpMV0U1djZjcmk5QysrTXNzTGt0eHc0UWFtbnQ3NlppZUplUVdtYWt0N0dLTFJFUW11R1l4bmNOR01rTG8wVTVNWGFlMklpZ2ozRkxhUTBpZXZhT3ExTEZsZUpIUElGc1hYOG1ITDlFNjVCNmI1bWljN3dMdjdCZVRRY3M0QWNRdzh6bllkWmw2cTZRbk9VSmxlblRXRWhOOTFob2czY1JIREc5NzQvQVNDMTVHYUhJa0dyZjhKRGxDZGt2bElWTnRRUTFnajgwTjVQUkN2SUdLMkZsZlZKejV1V1JLTUg3S3N1WldkQ3BUWXVMSnhXMDcxd2R2ZmYwUk85eEovc0QzZmgrVW1wYzBGY1JPOURzSUdSUlRjeVkxSnp1RVNEcWlteDhjMzgzTEJvTkxDbUd0U3RtTjlRQm1NMGJHUDZ4dVp5am1oRktFYVA4YjJybmVmbmJyZDA0bGJ5enQ5amwzenhWRUU5Tk9LYk5kMVlaNG91S1dGT3U3OVg2ejR6bGgyY2RvWWFMYTVIRzg5ZGZabzNqTC9RWlpGVU9PeXcxUi9IdTZtUkdicGxFZDlBdXFETUZMKyttVlBYSU9mV1A3akhDdTN5cm5CbEFnMmt6ZXgyZVZIS1hyNE52OUFOZVc2M05hR0pUcDNoeisvd2FETmZJVFR0SUhzQ212SllXL0JVSHZTOS9lcVlrcWJSaGJ3MFZoeGo2ZVJQcmg3MGsxMTBDb25ISnRVdEFFLzF4MURTV0RWa1k4cWoyMjF5anZ3TEFEZDl6bUtFQm5nUy9EdWlMbnBSYS9yMzFQbm9kcFRRMVNkem9EUGdlTVdwNzBEOGpGNkZkRzJJZkNVcWZmUUJtMXMweC9WOXNPa2EwcFV1eWxjd0RZYW1MaFcwM0VSWXkveW9YL1FBNW9hR1A1djh3MXFMUXM4SXh2YWJ4UUt6bXpVcnRDNStUc3lwZXBwOGxYUVNZblpmeHU3NGJnRXpsZGZ3UFp5ZTlpWU1HZm1oTVhuTGIrNDUrVm4rVEhGUXp6YzZpM0dOZUsvR05OKytJTVBEeUF4Vkt6Zm5Iamw1TnBBaUdMVTgzdzdVWGw4VTl5NDg4eTZEN1RuMExQMEw1QTF2dmZEODNkNW9SaHZRaUxIVWZlVm0xZHFhb3g5TU5kME9OeTZ3dE1LWmZmS2FOZWZQMUNqZ2h4ekhRdmo2N2JtU0tjWTNZQ3dVOUlEUW5CUWlXYWlRenRvS2tYQVlodWF3VjYxd3ZrUWxSS3JKcnlsRWhvY0owdGMvMDMzRUFKZVRzaGMzdUJFQi9WYnFDTDUvTXZndUNIb0JmMlNDRDRZTlhHQ1YyWlQxVHpCNkNyZjlETTZEajAxQnY5ZkRBZWk0T25CS2hkUHNFTHRzVi9HZWZHNXliYUhmaU1JQk9iS2RoN1ZvQ092bERHbXhGUCtOaDhSOGFHdE1jT0dIVGVpTEE4M3pSNEp2MDlsT2FybEphMUhPQXJ1VmF1TzJpS25odnJIT2E1cWszYWNWRnlSNnVqa2MwNmZRVE42K2lUM09Wb1U4alIzWERjRFVzOVNwSEZ0cUprRHU5SmUzMXkxa1cyMXVUSUlXNUN1SG9vY2RnU1RJSWx0VUpSa3F3L21Ld0xMbXFORUZvaFBvOEFtL08xZ3c2b1dtMHJ4R2NOcmJ0RUtSTDNtMURIc3NuQytvMGx4LzVhNlVTSk1idDA5R2E4eXBIV2tqbXZDUjNqYWsxVERXbXlYSmE4YzhQL1czaFo0SlZQbFhTTUxtQkNhbmIycnp6WHJVUkovTDh3NnhJa1FWQ3FocVNqRUhKT1VQNm15am9MSzdPMzBldzZqcTlFbGM0VXRXdUc1cW9aNThUbUNrSHdCODFSNjhJZjU3U0VuQnYycTkwa2hQNjMwZEs1REg5NXdQdkJPb09jZEdBVzRxb0o5eUVLWHIrR1FCa2pxKzZZMW1wVlJxRUZZRkZOaHhhZFgwK3VvVWtUYWdRd080R1NHVm0zYWJ6MHU4YWJmRVhQaUVlNUc5VTR3V3dweit3L01LdXBrR0duMFlFWlk2SUtuWldjaFZuaGY3NFRNa0l1a0dHalhPVkRyNG5ubmNSUExGWWltY054N0JlM2NlWnRuUDNwOStkazFuaDZpc3k2L3FDWjRzUG8veXRwMHI4dU1jL0NYNXJFNFNjVEhpaTBVTGhvRFRaMzJabGExL3VOcWZWdHczQTNVSW9yc1d3czZPTHVBTmpBMVVqM1RyOTFYOGRSNlliR2xuWXUyNHV1N1FIaHlnNW91RC9mUTg3ZnhXTUVwdG8wV3MrVFFaZXRXZzJubHFYOWJUaEt4bEM5UUk4VjVGMUM1MC8wZGthWUkzWEVZM0VXLzRZc2Q4ZnNEbHNUT01VMXI5Q1hNelJ3MXU5WWVGdHFTeVY2QWs0UjNNcnB6SXBvNjN1Vm1pTmplTGREYVM1bGtKZ1dBZFJtNUdFQlVMT2p1TWRUYUFJS1JrMFUxb1JjWTRlZjZmbWFnNjZkVXJLM0dwRnFmUS82SkFjaE5ESm9LTjhpcGUzaUxEMkIyRlNicUJhT3gwSmJweGlDUWdUU0F1VU5TUmswZ05DU2toWlVacmNLbHNQcGpsbmljM1VkMFJVMzg2YUFYN2hwTmZZckZvbmF5aU5ld0lydmdNbWI2a09nWTQ3RVAyVUljZUs3cFdLTDBxQU91NFJycmltd1ZML2ZaYXdRZzVYaU1hZWtXaU02d01ML0Y4UWdsM01hNFJNVGVMcjVaZWV2UTZwaEQvbVNXM3o0ZFFsQnliazZocE1KRUE2YlRGaUV2akpsQStSaGlTTjA1TWN1OUZ5V05FejU3MCtERXBML2tvcVVORU0rTjBVcGlVZWJINTBuRzcxb2lJTGM0YmFIenVZZHBWWVpyUW5TMkNnajRlbXhBQ1I3VnVTMWJZTGgraWY4clY2eEFPcFpRK3R2K1RRVTNPbSsyd01pMnp5Y3I0SlZhS1N0bXpBWi9hdlhsbXdqM080cUdZS3RTeEpWSFAvQWF1cElOWDlBRzFPZWNUWkI5eVpaR2VUcjh3ZDZzcTN5OWgrQ2JKdGxnVnZteDh4L1pMNjNSNDFEUUM3RUE0blB0YjByZUdpLzRCUktCaVgxalU2QXVFVmxaMFB6YTI4L3pXWnlub01KNUhKL1pla0pRSlRyeUlYVVgzRWhibDR2aTJZMy9NaWtMcjZRVHBWV1NIZVBsWTVLMGxYR1BhZTFpWlI1OW8vWmVzWW56NjhqM2dVUjBydUxScjQwTVFKbzZkQzRuS3I1c0xIWmlXZXNLbWNDTThTTUZoWWY3YnhsNkxMcWcvS1hPcFRwV2pkUHlXZkNiODhNWW5IMEZSbXZ6ZXlFUE1Xa2dDR1hMdU9uMks2MHNZeWVlN24zczZOK2Q5YjhlaTQ0bFFIbHdOVHhMZ044WUg5RXErM0dqcUt5NDE0Zzd4WlN1dkdLdmh4c2NiZm5sWmVuaEUvOTNQN291ZUxXM2ZOQWY4dE9vcHlMTGt0SWxqYm5JRVl4cUtsOUJLWDc5UVAwOVZrbW1FM1Q0dzlzTE9uVnZFVklPSVBXNFFNQWZDSlh4bVlIVm93ODcrR0VKWGZEMk95VlpyOW40MGdlaURuZkdUcnhES2pZbDc2ZjhJUkJ3azYrMVphbmh1MzVzNEdweUR1Nk5hTUp4WHBrd3BUQVFqcWhreFJxNys5UlJFZk82V2JiUVQ0YWIzaWoxNkgwZWR1MCtvZHNOL2F5TUxiV2k0WHhhYnZvY0tIclB5RlhrNkw5QVBiT3Q2SXlhZTBWN0JSQ3Zzbll3Q3MrOVk1Y09TUjJDVVo2amNDZVZCcElta1JkT3RHQXVWcEdWQTRsQkY5bHhOWTJuVlU4NmVqWVhQMm9XS2ZTKzZFeURZMS9ya3RUZk9HcStsUXZNWm9HM2g4Wk84TWV3eTNpUGNZODZFMTZycUJMMWQ0Y1FEdlpOSWJsaEllaXlnSFQrSzY5YmhrMDdndlhxQnczMlJYQlVLbGN4cUFEQUl6Rm0ydW5iNE44YjBlZ1VoQXdHYkM3emgzRVpZVitEM3YxL3ZBRWxRWFV5QXF2QVVMSVhGQVJkK3RHdFRaU2o2N3FFczNDWVJWYTk1Wk9PZXp1SVNQOUN5NG5mUHVWU2IyNG5uRzZQeW1DV3F6TlJKMHFDUkE1aUtxTGNMcE92NHdWY2QzNXppMUdJbmJJUVVNQ2h3bHdxUXc5TS8yYXhYcEpOR2dNMngrZjIvdlFwbGlrdDF4U0lVeThxRDNjTGdrSjJGMzJ0S2xoYW9jbFNPVVpYNmNFY1hCb0dvRjU2cEprSmdFTDM2QjJrdWNzTVNXTmgvZHFoOHpLZ0lSZ2dLN1Z5ZUJ2NHNJZzNJczVvTG90UUJhT2dPeG9JaW9BYnJPN25qZzN6T2UxT3A1RnpIRjJOYWltVUc5c3NWeUpWTXBEMUpzTTVpSlEvRngvdGRONFlpMzNRWTVPTUo3WitVM2FvdDBOM2xUbGxJYmhXUlplT0o1Ym1leWlvN1FtbHlYZ0N0SmJ6STVwY2R6QSttZlgrTHFXZ1pJUjFYNFJyZUFFQ2tRd1V5MzhMZ29oVE1HUVJSSG5XRDI1dGFRcVRkK0htNURxK3FuN0RmU0UyZVpoMmxDRnk2Sk1iWFBybDFaUStDZloyYmxkbWF5NlRvNDVZK3ljOVFMamFmT1F3K2F3YSt1bkNETUd1Tk5JYUVFWTdjK0daWHVtNWQrTGFBWlJmQ1VaRWsxaUNnZ1FBQ21pWmwxcFE1RVJ0WmtKYlQ0UkpRbmd2V0kybDFudldiTUpNT1A2MFlpNHpad2FLcGE4UFZ0SmVpRjNWUXY4MSsrWTBSbjg2T25QK0VRVC9WM0xPZWxqUFAxR0hQS3VBamU2cS9DdGNieWhOTThEdy9zSmdXc2czNndhT3RVOWN4cnBTQ1N2QTg4aTd5TURpTXVzUTN2K3BLbllBZGdubFlrRUFYYjJUOTR2blE2TXNrKzd0T1ErdXhxS0c5WDN6MXc1bURTNWdNS2xGVnhTM0tBdGR4NEpoeERPT0JwZWV6QlI5ZG5QZG8vUDhGeTJ3STZNaDVKZ3JHdlN6NzY1WnVpTjM5dkNoc3B6ZDRMR0NzQkZvOEloM1IwUytQcUdrNXljWk5lRjVyeHl3OGZtMVNyUjZBSTZCeW02VmN1UjByRExLTHRBSGc4VWRndUxmOEJQWTZ3dFoxVVliblRFYk5qY3JOTmVqUDNMb29EN0wyL0lpMjFqM05hUG9PVm00LzZueVFMVUZ6MW5IL2VQVW9Sb0NVV09HUndvVVVrUFlUS0RuaEpDVkFFRFFYazZaSlluNFVObllLYllYbDVXV1REakRhOG1GWEY4T1A4OGRTa3ZrZkVMZk5qTGoybjg4djdGWndzc1M1bXl3WS9NMVZELzJoaU10ODZMYnRVRG5HYU1mQmtSdlArMFdNUjFwcUx6dzh3U2xoVFJjeC96WUJBdkRtRG8wTjRNVjhoU3RXTDBsVGRLQ001MlNtNUN0Sk5CQWliRWFXWGYvbE9zbXl5SVVSUUVZcHJDU0x5OFRreVRRYUlJaUtRVCtJc3l6MzN1cHJDcUJsaFBVaVhXVVFKT3ViSVhWdG9ZNHJPOUpOUmVHU2hVVzdlV2lML1JBcGU1b2VuQXF1RHJON21xV016dUo0TXRNb20wTnNlYVJLYTkwdUxYRlpTemtnUmpqYzAxTk1kTWtUL1JQNjc5cXBWL2JMSk5HcTJHU0t6RkRacndxbUg5SVhZMVNuMlVKY1pFTEd0QlRkMUhTaU4xSnNVQzBDMUxmYjdEQ0F3ODFyRlpIc1ozb1J6UGdSb2Rxa2x5WHBTbHpFTWExOTVKUnFuc0hxVVJSdlBKeWxQWUtmSzNQSSthWlRidXJHV2kxV1dHMWhtRmVTcTBuR3hxb1lLNXJwdWdOSjJrSkRSV1NEWERHNC9oL2pJeFdEcG4zZGxTTHQ5QVJxUE91bG1TU29XUVBjMk9yYkxZV1h5dER5V2J5dy9OclRKQ294WW4rcFVhWnUreGtxM3pGdW5rcHU2Q2ZsNHEvcWtNa1NVaG4wUXc5T2l4bi91Z2NxWlJYaEVvT05DTU1ZaTVGSVpUQnZ1NWwxNWcxdHJqcjZuOUVGQ2VWREh3SjNLYzVyRnNxVFRLN09yUEJmR3NDUFYxREhnMk5XRUpPaXMrVXRndG9iU21rbEplYXFiYmJwWnZ4SFBCNDZjR0JFRCtpZUZRZ2pNSTVacWFuUUliOTkwWjhzQmVBTkFESllWd0FsRjF0MHV1T2c1aWo5QVhML3JVYVpxaTgvek8xcEVFWmNkbCt5MGJrR2ZieThTTVZmcklsRmd1VjNCUU54akVmaEtDSTZKemtHdHJyWXRsVDNybmZ4cWJMUmNESXZPS3k0bUFHZW1JbU9vZm9xNDd4QXRuK0lYQnZ6T2owYnErekV3Z1lRZmxYSk9KQ3BTaG5UbkdVNjcxR0w2RzJRR2t0KzhrekpvSmhyNDJDS2Irb2daWDJ2SGRFelgyNkprRXhPenVxRXlnWHU3aWFxS3lidXgvS1d4YVp5bWErbUtWckVLdGlvZ1VrWUZ4K1MyWjFTY0VtWWNXaFNzL1RTdzU1QXI2Z3dUMmFNUmhJOU5yenRHblBzNWFIWDhvb2hvV0JZN1FpVStqUzViUjlsME9YUDhiU2hQQkp0YUt0bmxKNThZTlc0TzQwVGtEOFRrZkd0STdtZEt4QU9CL3BQemU4cFl3SlA4Sy9SbXk2dFZXRjIwd1pjWTcyRysrcUtJRkh6SEJZbDVxNFdoYk14ZEM5eHZpZjAxY0wrNlZBM1h6cWlzcnZTOWhSb2lhMVorbDlSYU1IcXdjSHVUNzllMkg1Zk43RDEvVENNcEFyS2xsMWZuejhtWVZoNXdSZ25SNVpQcnViRi9RaTZ1K0IvcThud1c5MzNjRlFEU2tJQWpqRDFUcEpqT3JMcGZya2FBWkZNeGNoNFRpMnp6dnEzeTFUT0dHS1d5ZjlUOGpXRzF6SVNZNFRkZFFJb0FZeHhyZ203Z1Jaek92TTBFUHAvaHljb2oyS0pYeXI2VjJJNWRDbHF2Rjl5UXU1WDdIellZK0tDKzhpdkVjV0diUTQ5U08rNU0wTTdtQlFHQ0FyeDZlVTh2dkVWZGptY1dwbXdYc2dzU1lTcWVQeUwyK2lQam5LY08wN3FiTG5WdGt2YWVFdVM2ZHZTUjgxZ0NjN2lSUWVieWVWT1Fybko3VktXd0FyUmFMYWp4bTgwUmJiUkEyVXR6NVBNL3Y1QXk5RXJWdjBTT01ReVFueWg1VU1JcDNxdW03S3RrQXdyTkpVMGZQVk4yK0w1U3VwSmVFTFpvdTVOR1NpcWlZaXVOb1EwTWVqeWRsSXE3ZlZrNjlRd296bEU3czlhTlRJVlZPU3pBL01LU0w0bXJXWUtVRmhoNkhUR2VxVUExNi9QU3ZWQVhCaVhxMlFQSEhmVjMrQWpGRERtRXpVUTlGSjNZQ2MzalAxQS9hd3VBclR2RDZ4eFpRWjhSZkZrUStQblJpTXgwb21mSHlCdHIvWGxPbytWOU5DZ2NWMURFRW9hYTZmTjhpYkw1bXRSZ1N3bW1SekZBYUp0VzJubkRSZ3dheHZpMlBodTZrME1TL3pkNUxUYW8vYlpGUytWU24zTmh6YWYvS3lVOWFTM2tIY2FOUSt6aUg0dlRGWmlqbmorYm9XVk1relRnZmlwOEFScnprVXBadlorMlRPWDhCT3l1eWthNjVUUkd2NURmQWRPZEhiUkQ0SjhkMitsMUVraEZ0MDBzYkllWmNCcHUwaDRyenVXZytZZCtJYXM1WTJ6cWhKeHVuaGhTdUFSNEFIei9HSGR3Qmw4Z1dSUnJScWMwRDJEV3hoOFYvdEV4VzUvR3EyODB1U0RKaWx5RURxQmMyZldNdXE5V0kxdmVBakpPTGNydU9tUTdTUmR3a2NtK0huSjgwb2Q3NWZDSHhubTE3N3l0ZS9kUkZrajFpY0U3NE9tcU44VTJzM09sSzZLemFZLzJSTWhlaERvOXdGdjF3Y1M2Yy9Za3hNN0laK1VKTFhIUVcyZEpkMENDYkNPY3c2c3dlR0tnT1MzVGk3Unp0Vk1uTG0vZEN4S3NIUFY5V0hhdTBqZktnK1hJcE9qVksrQlNEZ0t1eCs0UU1yN1RtVU5ZWWhRQzRsZTdKbzA4K3YwRXFqTld0RXRZbGVmZm5oQWMyWE9ZZ1dNeDVLWEs3WkJmTm9LRjB0WWNrTUcrV3gyVWZBakZXZng4Y2VEaG96TzJOYXNYUkloRHhTQnh3Q2pObE0zK1FlYVhlY2Yza1FMVjl4Nm4zdm9lQ0pmdTV2SDZJcW5TZlhGQ1B2OGlZZWZ4ZEdhOGttdm9DVm1aazJuUHJOUFFIVG5lT2RYNGc5eGhMbDFJcHZhL3cvSFA5QjF4N3VkUTEweXFxdmtwb0JYbXJsSHBOSG9pU01FQVlMempJeVRhVWlnODlWQ0JHYmJxdENocFpjRVhEaDlQNVMzaE1adXNHdVJhR0ErT1N5M0IwT0RnWXdPcWhob0RkZkRUcmh4WEQxU2hCajdUWS9EUzJHaVprc3BGSkM1aFl6QUxFYlpxdGFRUlpKNHZRbStuT1Zha0l0WXRvOWZDZ1BnT1k5di9TQ0w1eUhIL0gvOXZ3TDBDVjlNb0dUU2RSODRqRVVVL0poSEZKeXdkNFl5Y09XVEZ0RVNSRkcxcThnMGlCTlRKNmQ1ZjVrNmNMLzA5enMyYmRPNFV5cjR3ODBWRVVIUUdvWmhMMzdGTHpBck9GcXJZM0Q5M0lKTEVBbFZOTXNocU5VYngyaWRobGEyUDNHZGZleXJRRG0zYmxXTDJtVEordGV6UTRBRk1pVHJBdXlDb3BhMWVLTi9LN2FKcGpNTU1RY0I3RUdYMWdGZEZDNTZGUlE4bGVHN0pTeEh0VXZ0Z2VWT2xEbWxYYk9VaUE0TE1qTkluQkJkaGNQYUlCWnRtM21CWklYSDEyOE4vZ0lDQWdJQ0FnSUR4L2I3R1A3ZnJndjgzcmQvWjl0VCt6N2hUOXYwdFArMzdHYjluMnBYKzM2WXo5dmROK3owUi96ZW4vbSszMlUvNGZhcDc5dlpIZlo5a3YrLzdaYjluMGt1L2I5b1grejdVei9oOU1iZlYyOGZzOUJ5KzNxWTRmMit1MyszNnpUL1oxYmZzK3V2L00rd1kvYjlERi90K3NJdnAvWEVmN2ZvZzc2dXpPK24zSVgxZEhZRG5WdUNEUUpXV3Q0b1VCS1NJd3pqYy94MnJEdGs4eGVZNEFNVlBGbjRMRHpEWThLVG94dFluaWRLV2crQ1VSbmluZ2tod28xNG5vaVFkVUdUQkk1WDJaRTJhVkFTVzZuZjJ0dFFVSk1MQWNjdDlidmRBeThKd2MwRUgyTU84Wm9kQVZsOXJZUzJwa3pJb2ptVXJPL0lQVjZhOTM2Y0RKTGlFT0ViVXZJTm4wQytlUEl0dnJmVWZ6MlBjVzIxMkVuM29qTGdNV2ZLbVhjcWZtY29LalpZMHdURC9KeDA5SWdVYkhabUpmMy9ZMG1USjFBOFN6dnpxZHIxc3VFNlZaaTNVVnJxTmJOUUhpYjFTaytpc0NRYmNYcGV0eWpUVHo2b2lBYnRsMU83VExBaStTRzVTZm1JWDZOM0J6KzlQYVFSOVVnbzc1L3FrcmlheVlDbVpmNktoWmcvRU5XRmJVWVhtYUJVL1QxRWJiZDRLa3NYQ0ZXd1BmMHE1WjBJb291VENZaUhwcTVVOFVUVXVWejd6YkkzdDFiYWd3ZlFubUI3WEhXRU92N0kwM2pPTzJhWk56cVdhQ2U2emNIRWFLc2x2OTFyZ1JZYlp3YTJaWkt4YlFJUjE2eXkzWnYxWW55ZHhOdjlRZDhrSW93enkwZmlodUdqSEJ4bzVLbndGeEJEOEtQcUlkOUYwWlVJUlFoaXBSODNseUdZc0pTM3h2cDFNTThxSWpRb3IxRk1YdTQrekpsQ2ZsRmM0dEFmZEEzMjZkc0hIRy9IeTRvSmdhY2ttNlFaZzZ1dHFWVkprL1hUL09BWGpKNzJRRmZRNDZjVGNFRU1pOXdVYnBNTVhZK003dVdyZWdLV00vamR1K2xhT1JjZS9CRTNnZEVIUDRJcmhFQVFiK3ptcHduL2VudENjUXZCVWJnMnVvVWw1b0ZtOVpmbGFkMm1OME93NHVQcXIrN015TWljSXJzakpORHVBV0swVGF3QXk2RDVuekZFblhraUhteFZZSUU3NmhxV0ZCTHZKMHNKUTdCc2JQTkJJMjJySlBPNnkrdFo0Nks5MFEyMStZM0tvektWUTFNTm54RmdSN1Qwc0gxOTNEajBDa25TWEZhaHVmalp2WEl2aEhjY05UTHJwMTlQdTBiOGNFVk5xZU9ka3JwSlR2THJ1T1U2R0Fxbk42V0ZlYnI0dk40VGllVVp5K3YyYzhrSVhrTGYwYUd5ZXVyRktORVBINnFiZGNybldYeFAxNkJ0N2pnWURHSkdFSUZiSyt3aEtJcXltcGttWjlFQ0htWjJBNk81amdFcEpDQzkvYjJ6Mms5VUNXWktPYlpsZWYwN0ZrRUM0MlFMUEdkd2h4bnBRc0VDMk5BL2U1R1VtdTF0eGN4L1FwVndKNklpSEF1TUdzUkNxSDl4VllSa0RsakVnSXBqMTYrQk9aN3VEZmFvOUlTajUxUWN4UjZUZ0dveGR3QlVHV21Ld3lOTnVnd1Z1bVBVd3J3MUh1TzVjRkdVTnE5cTE0TWM2a3FZZ0ZBVG1reEpJNWZ3STZkOW1lMnc3cVNxblJTUXE3TTIxemEybEszZWs1MTZQeldPcWpUWlFkRHRSYmNnbkRGMUQzL0FPcEZ2bG1mbENNS1NMSUE0cGFkRzRFczdQRU13Nno4RGRLZm1KMU5tczhlZE9LMmVHWUp4NXY2dlNhdEd6UXZXL3Qrb3RjV0JKK0dLdjFnU2doVWNVUldhbERRNFhiNERvUmFjK3dFM0phNTdja3kyaW1TMzVpNXNZV0J1RFBiMTRSWDhUM01SNDBqKzRYbnVZZXNHUU1KNnhFSjRudmZ5S2xBeEFJeVRmWS82VE8zM3VFNm5pQnVyYnFzMzYyNHQzVEVxbHFIak5GWkZlUEM5U2hZdlk2ODBlc01VeDJpUk9UQlAwWnRzcGhVaWtMd2ExbFJYbUNrS0VWcVdXcm1sT1RpZWtUcllpb29iT09jOURwKzU5STJ3N2pOd3Rpc0tpcTVrTnRHM1JtSjNqbG5mQmEraTZ3bnNvandiYkRCa2xUUFpISU51M094aExyTDRkR3g5QU5OUWNkVjlSaWo0N3EvdGZtZVhCS01IYlp6S0hJUUF2YjlhaUJiTDl0ZG81NCtZY3BWNUF6V0l0cnNkTnhTN0k5eU1abmVzTENSTDZ5dVBNRHBsZjlVVGhqNkJXUXVWdERGTnFHMG1VNGp0YW5nSm9EeDBSNzMvRUNSbFlnbXk3T2U4elZwSlhNbU9yUmVCTy9MMFdoUUt4b3l4QWYxNDZGdFFDcWRNbWYwY21oSGJ5Uk9hb3NvVUpmY1lNekV2Y0xjY1hveUh4SWZORWt2aE9lcngvVWszL1pOaWoyWFNRM01rajArRlMrYkgxbThOR1FDSTZvejNJcTRsUHlNZ1dyL2t2bS9hRkNCWm80MFNOaTJOUEdMTE5OTHVwZEpnNVJvWDR2QU8wZlNmUm56UHEyMkNpbGtRekZIV0ZySXlXWkxuOEIxQ284ZGUyMTRSZUJqVTV3eXFoQ0w5WnFlSlFISzEwbkRzWlpYdWNXYkhleExzS3RqcE0wY1pBKzlOSmEycTAzRUo1cmJZTkxRRE1jMC9leW9MeFFWTnpWcndicVRwT3gvQi9yWUpwV1psa1lqSlpKQzJySzdHWVh3ekt1eGhTZ2JKdFlsbWtTajFPdGM0YldFaFZ5anVkekhFUTZkUXZ0NFhodFVpL1drREh6OXIybTBJUXo2L0lGc0hxRmlPYlFqaVltYkt1NHM1cEliUFgxc01Ta0FjN0cwUXJiZ2lNYWVMRDBqUG50UUh5L1pEUnorZDdFanRtU2tGTXBHR1pjRTBMNnNzSEdSdHF6SCtuSmNsQk1kcTVOa0wvZXJ0bUFZb3FCOUlMNXZFL0Y5SnczakRVamV2akVZK0puTlhXQjVtMXp2Ry9tdk9lOVpRekJublREM0sxTjJUNHNBaU5LMUdVQ3hOcFRLaHJDVXlUYTJzRStUSHhoem5FVjRCajhSZFhpM0pqUFJ1SS9jVDNVbmFVT1p1UHRNbEUzYlJpcWdzNHdmRG93eVgzb0tZeXNiUmowYzVCOGVHYXBCNlRFNFFZR2lUT2NweFZaM2MxVTZnNnhrMmxDV1NhcWplNmhCWEZJWXNqSWl4M1pHZTFwN2hvaFhNYTllNStObXBobmk3TGVWdFhESk45OE45a1FiekV3M0RpK2RTZHBLS0ovd1NUOFZPTldtVVdPVzcyWE5vN3UrTlZHUDgwbmQ3RVhtbHI0bzVjbmErQU1mOUs2Skd1bEpyTEdwWUVIODA3dDdiNC9PeDBMaHlGcjhJYTI3eFRxTGN4QXViL2dVMzBmbjlWV205bW1EbHR2ZXdlREMyanJ5OWZvOWtGZmJvbEdIZGxiQzJnaDV1dnVkRjNFWW4rTEI4dUIvdm50ODV6SGtHMFFsdW84Q0hLaThVeGxiS2dqWVlqellWWGJrbW55YXVVeEhRcGtxYTFjZ1pWQXRwbXl1a21FdUJjekg1TnpJSjRiMjZDdGVPRTFWaGQwUXJ0cUdFWEZpT3NFKzd5STR5bG1JdDY3ZG81SXphRGttYWtXZ3cwTGVCNVd6YXhkb0pmV3RLNGZocFF6c2FueUZqTjVzWmIrTVN2aUJRQ1Q5ck56TzJ3UGg5T1ljZkx0YWhGd25mYTFPREdvc1IvNUlCbHZlY0E5dzR1SHgzTk9vRG1sU1lDRkdHWjIzbEd1SHpONVl1eWNHcXczSEFrQUVpR0JsS2ZwNjJYeTNJSFZKM3BOWW5uMzMxTnhuNHdJMmZubmxaRWVpVFVCVGxxSFdINHh2R1pleW5QTEZEK0NXdmJYZXd5RHBBWHJja1Y4a0hKRkJCc3JuY242U2JZejZFMTNFOHFzcUtJditVVjVFU3hZVEpWNVN5SEhTT1RLNWkwWDNQMDVJMTFZM05iOVhVU214UXBEZjVIcUQyMkJaejIvS3JHVzR0NWROS0RSb2V3K2g1KzBSYnhvOElCSk5lMkJ6SW5sSXpyaVc0Y1pEU2s1Vkdiait2V0xYWEluclY4aE9ZNzZYd1lWUFh1MC92eThWUzJqVnUrNHNqUEJxMUlwMERuZlBIem56SlgvMVdJdndXLzh1bmdBQTcxcWRySFV0NmFHZThCL2ZwanZmZC9PWUtpaHRuR3UwbXRUQkpnZEZnWE9KdzJidWF0UDBXekc4bk5CeE9VUHdZMGRQd0J4VTQ2OHlBQjhKS3k1Y25zeW84YUFvTXk5T2duQjdLUmpJQWovblVuSWloMVVGY2NQTWVucG9pWXZsZU04WGI4RnJWMlBPRXVKN0lKYW1sVVN6eDhkcmR2Ri9QbjU3alNNQk52dW1kMFhaLzR4alE2K2RkYnVFa0xkVUdSc1N4SEFIQlpiVjQycUdvMTJvMFE0em9Cekc4WmhJTHpDVEg0ZnIzejBTeTJpM1V4N2NqUEx0THZJbU9xR01WVzIvTm5wQWpCODBRZnIrOFdkZUNmMVJKaEFvWTlpWVNVemNxNTdiczd2RFFxQm1PMC95aWNIRkYrV1M5T1FNQzJVR3N6aERPQ1ljU1lxcXNTd3NwbmhROE10SWNRaXkvRWdHY1BlcTdkandOTjV6dStzc2MyMU92NkZ2bVliQ3dIY1dielNwdk9GRU83SVRoY0NMV1dXSU1RT3orTVFPM3k3WndpempPSVpDK2FHcEkyRUZEWEIrV3BZOWRvdnFTajV6dHpiMEZheFVJS3puMkEzNGNNR2FsQ1NsMklubTNrK3RpQXowNmFVK0drZHJEWFQ5eVRKd1RGODh3QjY2citqVDUyaHZOVFVibFRRYWE0WDZXQmNDbmZNbEE2c2JrWFVQMXRRVDd0THg4SVNha1g3T09GME01YkR6aGtRajlHL3hNUCtQMVgzRG5iK1YwdWtZTy85R2pwdVhrbG4xNjRka2FuTWNSR2VPYyt1NTBnMUxDVVZlV1B1SldKY0FOSUowcVhua2s1NkNydmUwejFSVnhHUVhmQjJGemZFZVAxNjhSQ2JZb3l6c24xd0dVMWxTSE5GT3pIQytCcXByMFpFSDhKMmFDWjNudEdyUUh4U2dQemtIaExsTFZCWkx6NVFtY05PUSsyZ1hEYlBGQzZZWC8vUk5pUzIwQmg2RE5POW9aQk1sRWh5U09kM0ZSazRHS0hXUVZsZXhHVGFUeFpKRlJFVnR6S2g1c0xTWWVHclhLY3RETTIzYTlIZGZ0VnpKaS9UcEFLSm4zRXhTeStHMTFJV2RjejdDcXRzZXpUUng0c0Y0b2YzcFA1YW1DcGVxZVlrWlBONTJUdVhwTEgyZlhsTzBmeUkzd3RGSDlOOHhudTFkSy90b2F5RXljcGY5TTlxanYwU0lLSHA5ck5sOXVpdVJ0NzJBOFFkSnpqOGNJMHNlZDgybkJFVnE3UEpIQytHZ3plbmk3Q2EwalBwS3pVK1F2NTZSaGRrY3R3VUtzQzhNTWpQakpqMDVUQ21wak5YL3YwZUEwZkRkMU5KTjlIVk82RWFkbFVyTllKL3JibjFRV0JXRHFRUU5HUjhNNWsydFRzRjdRdnFKa1IyNU1JYkZJeWJObXpJc2V4Z0I4eFpVaGdVWWlHNlU1ZXlEVmZqOHo2NGFSN0lqMVYxaHBRVkNPZ0YrUVYzM0RUQ0hrUG9RTzI3d0I5UE1RcFpzdFp1Q2RTUkpRelZQaUpneHFrd3pzNnk2NVVpVWlMVDUyZ1lNRDJDTjlqWU1rTXo3VGhLU2diU3ZjVDZGay9NVVh0ZVYwMGFhSi9pbm5kb1VzNjlRTFNaTFBtb0h6ZEhRdHlDZUpwMHgybWgrK3p0QUpxbUFJeEQ0YU9oMFlaa0YvYUpvbnR4T1V3RWVYc1FLM3Q0ejFRdHFqdVdjUENSb0I3bG5VWjhNLzBMRDlSalp6ZEg2YWU1ZUpKUy9TdFVXQktwNWFQTmdMQk5Ta1pWWUJtckgvaUVOTkUwaDhXYzNhWXc2aWlkSkNnWWJrUzd4d0FhNkVuMDZUSitUd0E2R0RwN2VUU1lyUzFidjNtM1Uwanhyb1pRUENwMmFBeGRoNWN2SjY4SlhoZWRsMndvdDhpT0hRZFRWMkZRck1OeHJFTUgyWkU1engyZFo3RWZNbzBNeDNSUHpna1h4VjU3NS92cnA3dTIyV2hMVTkrRXhlN2FZOFNYRnY5T0pndHRENVgxSDJXQmhZSFNodFlSU2dEc3pvT01hdFhRTlUzbHZ1OTYzUXdpRGZMY1FIYmNuOHYzS2pKNDBBMkdoRm1RaHo1UnVhM1NraWJMWWlXOGJPbDl3dlNqbnVBU3UvZzZZV3RYQlBjM3BNK05rU2FJY0lwSU00RFhnNzdLSjJSSm4vcVgyVFpKakJoOWxwZXRNU0dLM3ZsNWFZS0NsQm1EaGMrUm8xK2Z1cjRWa2l5Zm1Gdno5elNVNTdlaVAzTkdwUit6VWRpZ1lNUVJpZEN3KzF2bkVvdEZPb2padGNGTzQ5VU9UbkFuQjN2c3Y1YnY5eU41QjVubHUxVkdjVUsvbmgwcDBSL3llcEpvOGFPQzh5YitEU29IL3p2aDMrdnN5V3h3VFJOMmtoR1JESGNVVW9odmgzUkpFY2VJTk53SUZmeEhPQkZpb3BjeXVONGlPUTBONjJpK2JncVc1dDMyQWZjaCsrNy96TGJVd1JldnpxVjNIUVNpdTNOL3lvV2hSMUFSODdtOEFtcHEyakFyRzN2U0g1SFFLcGduT1BjdmV2RTQrb3FMdUtUUkpvclB5cGx6bmRiSkFXd2Q3ZTI1dDNRVjRTZWZPa3kvc0E5US9CdHpaYkdZeDNydklYRVJGYXJvT2FhYVg5ZTk5Uk5xYmY4ZGtMbHpTQ0hsNFNJeDhFUEUxc2xoQ3JZL1Vsb216SndLNTRRU0hKdG9UN1VZRnlaZzlrTzV6MHQvcENCNHl4QWtFaTZrSlp6b0t3aHdQWmpEUTdxRVdEVzBrVVZZNHE3NGU4VHhmZDhpWHVETHlzVkVjLzBhcEFtTzE4RW1rd1NRWDdQaUJoQ2N3Zkg3eFhZMlljdmNoRzdjMHowaWh6V1FMcjIwaTdRVDI4c2o5dTEzS0JKNXF3NEtDRG5TTkU3WXhRRkJ3U1MrR095MTQ4eUVsM3JHSFpOaHo0bHA4RHdmUXJrUGJWNFZHWDcrOE5sZDBKUHI4OExrMEFsNC8xWEdPNmVBN2Q0MXBxNHVHR2VxbDc3NGRnS1FrcnZHVlJEWUZ4YmRMWGdqMlJsOUNFUlhKRXJkRC9qVlhmcklYa2xPZzNUSFh2WVZhYzIvMXViblQwTmNRMysvbGprMFlVVkVjWWpoTmRqWkNoSS9aMHpndFJxdzlYTXh1L0c3Y3czcmZLdzQ2bmFDaHNIZzNtWUVSayt4SG92NVVLWHRDY0RRNmdiaFdsaGRhMi9vT09IR0IzUDZBZ1IvaDBTUXpONy9MV2lMcndLUjBDUlk0alBZU2E3cktqVVVERlRvenN2YjZuTUMya3RjMmVLcVZieU9rOFd4MGxKVmw3NC80T1NSY2VHU0JyVnVReTNWSzlZMjJmWXh6WXViV0N2bHBBOXNYZmtkZlpkb3VPVDZDdUdKSUhVNldWZC9KSFJhdTVsWldpc0wxam94Y3NuempnNm1Md3BVR3NOZS9IWGZuZkZOUVJ1VTY5VHFPL1pLWmRLK2phdmU1N0FjZkpPRkRKNGhNV2tZbFE0d2FFTEpKZUthUGE4VVRZUkxVOFlqaWhXVlk2d2VhSmlaZS9oK2Y4VW1CQjlWTEhhL2gzdWhLTi8wV2V6Qko4aFVuVGxma3VRcVVoNGJyeEtvL0lBcHJvRVFkQlJNMWJDZGxtRUF2R0c2WlFVYmpjaWJyRlBQc1IySE9XemFWR2pJQURKVlBjNzd0NXJOTTRKNVc0ZXh0SkF2clZ6TWhBajMyaXpSUmIyOHRFSUxGaGZzVG1CT2FneHpsK2JEUHpPcXhtSGdvWFRHM2hGMXJuMFBJMnZKdjVHYTdBSzhIdVVJcS9GNzVOVlRyRWxHelN4V2RlaVJ6T3FQY1lyQ3BzNDA2Nm1iLzZnSHNpSWdnbzgwZVF6OTQrQXpXaXNMdkxwcHd5MThiNkVhMTFRc3FZZndIQUxscUl1UHpPeUF3NFprT0RoNE02RGtLRTA2VFB6Y0Rud1gvaDRpTElJcjdyVzJEK1RzekZ3QURvSUZmT1NYRzZDTUJmaEM1K3JmMC9Hdm9NZFphaHNiUFdVM3orWU14aHFGaVU1di8yQXZhRFVUU2JSTlIzY0c1eEd2RlA2RVRPSmVxQ3hxQ1piK2xZczNIY0ZnL0N5WHVERkdZSTVuSk1wWFltQ0lTMENSL1kyc2dsbHgybUtzaW9VOWYzeHhrb1BVV0J0a2l2L1EyUXd4cWRqaFZ1UWRXZ2N6RlFTOG01S1YzZHpTUGwyVkZWOGpIdTFESzJMYlA0TkZOUkZFaEJrUTdONEh1b1FNWDhiV1Q2RUlEc0tIazVtbjNmTGwxUTdoNEdmK3pidWljZTVOUDErNWw3bnl6MEU3T2MzTWJQK1JXazQ5b1dyR0FvZmZPd0ZING0wSGhQZUVpY2lZdE9BU1BYQ0tsakRWZkloaHNlMkwzV1NycC90WlFrTmtrNkcrMytPTlBTZ3BnNEF0WWU0bXloUHRaai9GSzJOZEVaZmVzRjhKT25iQ2xmdStoK1VKNml0YlkrSVliRnpVckZGQnZ5cnRUdmhhdG45S0V0ZWxxZVBqVG91cWJNTlVnNmNFWGlhbzB5SmVpa3p6V1FWdDQ2cmlwcmRHWitLNkNSbmx1ZVNVd2ZxcG1UMjYrN3VoREJsUkF2NEJjYndBWEMxdkx2RlBHUi90bysxamZCa2FzQ3FwT1lvZjZob0VLZlpETDlRcXdQZUhOMytPTXlVeUVKWXpKUi9HUTYwSGJCY2FQMGtrRGpucjFsNmxvbFNtTk0vd3ZqVWg3NEhoMjA1TFJnenk5UFc4WW5nZDgyZUhnWDEwZk96R05GTHBhc2xSUWtHZ25DdnBOK3l4UTROaTZwZGYrcU9OMVRPdWJJWkpwcS9ScEFyNVlUd25SZ1NCRVd2ZTgvb2N6YmYvMHNySkM1NnUwYmJKNHlZWDlFSk5MRnUxZzhnNXpieGowRTFlVk1FdHh6OTNZaEJhdFhFaHRjK3JsQ2RFNE45QVkyRTNSczhMSkVtd2pIN05xQVJNdTZ0YjF5UWNOWHpCKzVBY3NXTExYamdhNkQ0SmZGeFlLT1QrQStmNUNGL0dUTFNGYW1iQ0ltWlFuR2JING81WmZadEozaW9JZW85dThwTHYxTHg0N2M2L3JrY1d6RnVWU09NT2l1ZDdzLy9KSVYvS3dMR0p2VnpTTEJXY0pRemQydmtHd1AyQW1oVm1BOEwxaUgyYlVFQ0E2elFLTTVJVUYwcGFqbGgxT0o0cXVHRjErVDg4L1oyYW4yK0E3OFlmK20yc3ZoOW9lN0VtNHpUSitrRUl5aG8xaGE0M2liUGd2dVFuTG91SmpHcmk5Q3NpQi9iOG5UaGZSMDNOWjh6eHEyNVFacXVMTGFCVXVJWTAzZlZPRlhoc2FLOHNPNzRVSVd6bUlTdUJvamhyTHJ2Wjc5MHpldW8vaW1pYWM3V3RpNVNyZVkrYVc3WlU2ODc5OHRBM3dVcW5abEJGNlhndndDOFB3WnNHM1VGMC9lSy8zYXZTcC92MTNIRUY4RFNvOUt2YVZBR1ExbUZYVUlKRTRZbzBFUnZKc3VCemthdmxhY25yY1VNRlhKYjR3YVVNTDcvRHdnZWo1cWhDdHVtU1daM2dNRnFaRVFLMHVPdHI3bFhndlZGcThSa3oxMnNGU215Zm9RbmxuZWlicFNLYWNma1ZsWXpMMXRDdXdxdDI0RGNGdmlKV1MwQzlRQ2FzZmNvdkhyaXU1M2YvSGhSUG15bEsrZU1FREg0d0RKdURvakoveHpoUk00bXNBeHpxYjNLVjRlZEpGSnZqcU4zMGVWdGIrQmY5ODRaeXFrV3oyZERUMjdHL3o3Tk5Tc1ZKQVV1aUprWVF6VWFCck1HL0FoTDcyNnFZbUlJLzJlQWVwbTNZdTFQV3pDMVBoZWFjVkVXc3p0VFlMd1hlbkNPRXdCMDhTTGlRSnUxdnY4MkJNTUFFcVpyajBSVExpZ203OVpDZXJWWFhWbHFyMGNRdWJJTm9HY0lySWIwUncrY1kyRTE4TmNPd1pwNWRndTJ4VndiaE5sY3YxaU95TTJmWlFVVEVWQzBmampFNlZDZHlyeTRLVTV0eXVkNnF0cXp6bXViNHNXZUFKMGxoZkd2dUFvMW9yL3NuTjJRbmtveE4zTC9PYlpRU2s5cGhEWVAybFU2KzE1UUQrVkZSekpsbE00N1FHNVRTRGVmYVV1VnBsb2RrQ3hEa0toRy9HSWlCSmYxMUlZL1d5YkloMEptT2ZyVjBaZ3R6ZE92cHowNFBaYUk5Y1JJeEVWNlY4OGUveEhKbzlDdnNjd29aa3VmRHNSOWd3SHdhajg1MGE5SExxMmZvOWRxeHoyZmFtTjRkUVNqMXZuOGdzQWpjdFB2bzVjaE1CQUgzQmE4ejdlMFd3R2xkWmhOcEdlN0ZkVnJDWmtlUzNYMEJoUkNKYlJZaTF5UExEZnB1aWQ1dW5vUWE5blg4Z3R1VXRaVlcxS2NpWmd4Rkw4VWptKzFheHRhdHJaU2R3U01rWFN5ZDhSdjBZaGhxWjQ3US80V1JORVBZbUREV0FCT3JZRVc0SDJzQWR0VXlCdEVxcUdvVFgwODhOQVVlcC9BTUJGUVVpQ2oxV2tLVzluYmtCbURvUHhSQ00zN0lmNUY2djdwc0hBK0l6WVF0Ymp2c3U5NENYaU9XNVZiYmpoT0xDOVgrdWVET1Z3QUlkUlNXK0NTQmJPTjBSK0MvRENhZlIyS3I0QnlrK0VZQXRRZ3p5bW5Sd01sVnpOTGMzYytRUnd6eHlpT0JwZmZlT0tJNlBGNUp5Yi9NaGhXN1h0UGkvODhYMVZCdlFlaWc5ODdOdlRtR3BtRVJmTm5sbTJLUDdVdlUvczZKeTFET1hVZWNyT3d4WkNoTzlCcFBLZXVrbVVHV3BOSnQ1akZNcFprYlVqQU9FU3VxUG00c0F6SklYSmdrNmlLWTN4S1lmWlhkMjRSdjR2Z0lLMWZyaGl6NVl6eVc1bXdOMjlGMlR1a2psbFljZE1ka3BQM0lSbXlqTG9qbGtxMDJwK242TStCMzZvSStOa1JkTUZHZXBZUTVHYmQwWjFjUGc1c0E1Qzh4cjFmOEhkenJRZnhrWHNQZmlJVjVuL3Vmemx3WW9ENTVCSkhSTUYxUS9BcWxDWm4rZWlTRDdpTTMyanp0ZVVSQktRK3pFWnRseHhqbkJ6ajBydVRxVHZXUDJBaTN4TlpqU3ZUMkZzenhEa0Q2Uy9ETXUzSHE3WUF0R3FFS2ZUakR2T1E3VE0xL0xBY1lqYW5qNlMxRHoxQnF6dFlKRkM5SUt3eXJrTUo0VmZUK2o2aWk0WTdDZGY2b3diN25KTVd1TEdsS2U0MCtjbWs1bG1oSjJ3T1JtaDNqQjV1S3krSVhlUXpTUlVrMGZLakNjWGNCMUl5MFVhS3lPK29jU2ZlcytBTFRaNTdKY1NzVDB1bU1RVy9VVUZ2UDBvODFwYzFQTnN4YXVHWFBzN3Y2bHpSRVRNS3Q3WTVmZ1Ryb0NacUc4NFZjUHMwbzgyNDdQVisxOWlTU0FqaEIyWm56aWZOS0hyY0UxQ29VM092UzBJalJtM3lLcFZ3RnRPWVY2V0swMEo0cDMzT0JISmN4V3JiK3o4OGFMRWlVS252b3ZHQ3BXdFNGYzAzUkdZRE15bFlmUXpsK25QMk5pbDMxdHRvekFBOE5YOVBVdEN1ekdDMlhtYmNXam9pMjRDb2liMVJkMG1maFROWm9rWFlKajlnclJRV3lqRXhiejl1eG1nekc0RER3OXNZcVI0MjBaVGR1Y3Y3VGUrcnBEUU1HMFoxODRsTWg5Rjc5RkpKZy9DcTdscVJ4aXp3SXg3b2FEK0dpV3Uyai9aTGU5c3NaWW44eDJMT29MY2pOOGxNWUE5b0lCOVBKOTJ0OFFiZVA4ZWtJRzRvZWgxZXU2SDRBZmRXc0RQUmM2dnhqcEwwUTJIRDFVN1VZTGl6QTNTQmVJOGRMTU1BWXhwRDZQb1k3akFWU1hWdmFOYjRMRkN6eXhUNUczZFkzWjR6QkZpK0NYTm1hZ1BtM2g3d2pRRDZhMVpYSVM4WnpBM0ppU2pzcjdnYkxXd0dlRkNmenh3WGE1OFpXVDM1bmE0S29ldk5kLzZCem5uZzIreGxOc1FOVUJWc3hwdDRkVlJNcFAyaUYxSkM5QjhtMzBHbkZBN3RnbE5BZExUcEt3SjUzemt0N2hJNUxabTRKd0hiL2Z3QlZRZzJ4SXNDclJydW1QZE1mVVpPdkFZYWxIbDVUeW1vUHI0Q3lRTEYzRS8zcEhyOEdSbnNmY21Md3diVDZwTDJoVWlwVHBZZ05RcVhtVkZXV0NyclpjNFJpOHRkeGtnQVBOeVI2c25SRDcvL2VMMlRHNU8zUUoxK09RSzJaVGxrS0xUR05UWDR3b0EzaXpJQnhNcjNVYXNVVkxyZ1AxQVh0Ylc4NzdJZDhrb1pTYnB5UFgzbXJWQkU1YmZ2b29WUW1KVWZLSWdKUHpwVWM1VDFDbk0zelhLajV0UWNLMDF1bmNTK2xTRDB0S2hBYWRwQWlSV2xEMkdGUEhBVElwM1lHdHVybjk0cDNCNlV6VW5mZEVMMEprWFZTVG1vNGNuYTdMTFF3NFY0NFJCbWFlbkRaZ09GYTlGUkNhdktJRFg4U2tuS3hzSkNKMGd0OEFYQ29hK0RYRTVrZmltTkJLRlh0ZSthSHoxM1RBUEV2RzY1N1ZRU3hNUXhKSlhBOWN0enBIemZjWXBQdmRhZWozMUFOTGdZdmsyQVRRWnRLZTBWYjg2UWoxQUduRzViZDZMdFVFZzVOMTFZeVRLZTlDaGwrTmI5WU8zcFdiU2RsRXJLMG9HTUdtTkNQZFg5RXRpcmU2dmNVTEs3VFlnK1NIcHpNcFlaUUdzWUdmVzE4eUQyNDBBa3FLbWYvUGJVVzJxejJJbWN4b0UvNjFuTWVuQ3l5SmZmMGlxdDN3L3NjQ1lUWjM1RTE3TU1xOW42Y2dic0d2VFQ0S3cyNXFqMEwwUE5jd1hQcUQzZ2QvTThNNGpBY1RhUEgwWGpsK1JFQVZxcDdMd0M4ZzVrYTFnWHovQ29KeExveGpQd3ZVR1p6aTl2bmF2MFl0RUpxSjdHMktLanpyTkpDM25vNnJNRVpBT3hjcXJkRVpxSEJNZFNZSGJPM2s4U2h4NlFFRklVWks5ZGM3MllrQ3ZDdEV2TWlhMXlKY3NMMkVacTE2Q2ZvRnREcDBxbXVrZE9uOVI3OGN4R3k3SXhIb25CT1E0T0tuYXV2YXJmeGVpUHpXcm92M2VHRlFmenVTQkUyU3pQbFVlQTJ4dVpxelJ2VS9uNVZ5QUdweE9WcUtIQ2JNS3I0RXM3ZlI3OUhoeFVlYkxUVE1pa3FyL3FHVXZmZ3BjLzluMHpyTTI3bkpvcFhRS2xDa0hpZGY0QnZLaUdsaGVqTDc1SHJLZHhkOXRMU1VzdmczWHk4QlR1bEFkQnU1K0ZxRmlZR1o2UjQ2R3R6ekl4djRES0x2M242MFYyQVN1L3gvaE9tU29IeHFQTC9NOEg3Q1VUYk9jMjdsd1JjSng3eGsrNFFyQURtM0cxUCtjVThmOElOL1dhc05tNXlDNVVUQjBKSE1uMWovK0hkMldBRU9HT1lUL2RWY0tJVmJpdlRMZXFYak5sQjFpSnJheUNvWDZ0TU1oOWRzUWNRQVpieXdWWjArQ3lQalU3NVBFSXAvTnN0NUNyZWhKMTV6U0dwanZqczBvbGxNNytIcUIzTjIzYVJORWtIZXRsdFlkbmhibGNFY2FZUjY1cFd0bTM1b2U3dk1Qd0s4VWZDWk1FRmE4c1hjbUZ1MDU2d0x6eXE0WnhWVGRrSGc0Z3FBS0N3U1pERDZzSEhlcEc5SHAzeTV6aEl5UWxpZkJ0dEpOQnlzL2tmNzltdTRsb01pdzhpUVFCY1hxUDlQbXZTbTVRTDJ0UzMwK2pYNzhPc3Q0RW5XaEN3MWxZTXdBY0VhQW5wM1lMY3lJL09nejVWSDdwd1hFOTRDQlNNaElXYzY0a05GUHZXL2o3WktCUklBTlB2WERaQ2Fpd09hNStsUmprclZNd1ExbGJjYmZWQlFwbE9EQjMrSDB6SkZuVi8yZkJreEFNNWprYm1UV0pkY0JPYTFoanVrQUxzdVlmNDB0NzlheGlUN2hDUm5kaExzUHUrN0VPemt4MlU2WG4zWWFxUE8vclVkdFZMSld5STZOVmVsMU9XNWZVWVRXdTNBa3pVVkZTQ1RoV3N3NGwzaFpUalkyakdVamEreFRuQlNNYXVpWVJvZTJ5YU1LRTNmSTBNTUM4Q015NnFVNHBTUHloaTlhNnl1Z2MvTmdHV0FST0VnSWRJak9MRmhBVEU5aEJPTkVJTDRNVHNEczBsdHN1dVJ0cENzVGRHTVVRbkUyQzhpNWFrNWt4cERKK2llSEVVVGp2Z3RnaXJjMUMxY0x5VVNNMnlTaFYwQThIa2djZVFyUXQ2ZHNNSWs4eWJCRVhsL2hCYjZuZDY4N2dhWXVRNWtlTkpmS0ZkbjdXTUIwQy9aYUl3TkVVRi9IVlBoSTh6bWIybCtPQVJkM09oUWY2Uk5DdWJwY0ZZaWY4MzVpSnA3RUxhTE45ZktHTHdzTk9jWGFWaVQ4Q0V3NUlxbitnK1orc3E2b3BtK3RzNU1jcDE1Z1ZqaHRmTThVS1hLVEt6djQzTUN3clB6djBGWmNzYWdST2dNdlI2YzJqRTlyL2U3anYwVFkydnlTSWZvbUlzVG9wd1NoSTAvTE9jQUs5dk1ReUl2bkNEcGFIblQ2czFOaXcxd2QxM2FJdmszcEpncmpPUjNNSFBpcmJVSjM3akkwMGRhOWkzOERPWVV3S2VXUXZQT2hucHpwL1JUT2RSY1Qrbi84QkxRVU9FNUNKeDNSOVdWVTNpbkxkWCt3U0ozbEczTE5wanNkY0pvSzU3YWpIZE9DYTNnMGNTZGF3V3AwSXlzRHZoVWsrVlZnMW5pRVpqVUZyZjNtWnNtVTJvMmdsMFZORDVHKzNNR1QvV0NZYWZtdW5abldwTEMrcEtxUjRneWpQTTYrNm5XOVNkZ1JvODFEL2JjS0JRUVVGSnZZd1hWb1g4VUttNzRWMTdaNmlEc0M1dVRzZGIwQ1dlUHNkbXAvNEptSWVROHRvSjFrRE5rZEQ0QVNucUVrM2twaG5OZEhaWkJLOGo0WjU4RnRqem1UclZmZ1hxUjlUNnNHSWI3V3BTdkdYK0FJMmJPVzQxMGZRVWNjUnRUcFFOVzl2VU1WblhISXFZT2EwWnBvUlN6T25UM0VlRnZtaWxOanhjb1kva0FMT0F4aEk1QmV0NVRncXkyTHRCUGlVYnQwNHhweXU2MjZ6Q3VhbWlQQngzREljMjlocVZITFVYZHZ1U3hLeERNWjRyd3hIWEkrTlc5TlJabUNvelozenFUK2VBYXRvRGM0ak5WTzZWdmdSYzcwdi9xUVBpU20rZE1kY3VzNzVrSzBKOUt1V2d6aTBtODZycVZHekYvcXpXTU1iVDB3TGVqa1U2U2ZoZ3p3ZTB2d3JaMmNyTXMvRlR5NVFjNFlDbysvdTZmdVVpbWZmQ2d6NlRmNExrYTFJdGhkeDJ2REpxeGJja2dWQnhydnRvM0c3dWsvdVh2ZVVKM2V1OWZGa3ZMQ2xNUkJ5ZEU2Y2NhaVVPc01DaE9EUlFhQnAvMHVDVG80TXZwMFY2YnN2a0hKNGZhS1RUKzhXbXpOL29mMGk0RGlVUi9uSENPODdMR0Q2VmpmdmtIcUx2LzdiV2ZYZHo5OUY4djIrQXFiQkhPNnhwNWhwYXRkZFZVek1DTlRBMHl1VmZQcFNwL0E1S0FlRGh4N3NxdTBQNFVnVVF4bmxGQmlxZWZkS0drNkdza0RsMXk5STc0cUdKYmdMS3VWVGI5L2NyTlVqMDZCMWgzcTlqaDhyU21xcU02a3dTVW00RkEySHAzdldNbzg1RE5TS1NUbDcwY2wreUpsM2NVZS83bDh4Z1lLWmN1eG5paTRDUGc1Y3B3NTdKVFAvRXRCSW9mbG5QVGc5V3ZBdnQ1c2VzSkhYeFlxM0gyQ1owUWw0eFh3WEM1RDJVaXcrR3YyTGtveERCTzVrNlNTNHAvdTFtNWhFZzJpUEo4TFRxb21pVDlUYlpINTJ4eVhFdGpBRVVab3dlQ0VuMTBXZ094Z05nUDAvdUpaM3BWWUxOdWFkMU9jQW12NUtKQTQ0ajFIWDFHQkd0dEYzN1BTRnFPYzc4ejkvYVI1bFJrNUhTdSsvbTVUY3V1VXo2NXRFbkFaeTA0TW5DTjAwd3d3eVFoY2gxcURzYjdJYXpUa01xWDdNa0lPN3gzTGJiQldrOVQzS0JId05xR2pKSTJkU1kxNFhBcFhXMDlTc00zTmhSV3RybWVRR1dOMHJGL0RmWEdVQnpPM1ZQcmlLVEVlb3FUVU15U1doQUhPaEF0SkVWZ1dVR2NpckpPMnl4dkU4UXliMEx3a0ZhMEJlaFp1RHdlMTBUTVlPRHZuckdMcC9uUFhpZ3FzUmQ1QWNlUWVieXF3MXFkQ0ZlcFdSWDhkZDl2dXBueUs5dFo4UDRmQmlldjdyZXFHTG9MZFRwekk1YXJwb1ArREFWalZSWGhiN3NrbENjUStaZUdsQXlBWnFQMEU0bUNkc2NxYitUa1RZVm8wVWZscG9UbmZNNXhHNjgxWXVqMTdlNnBHUU1CTHN6SC9Ub1RLVlAyWEZqOUFvcy83aDZSeUpjcUFjd3FsYWFxSGwyc0VTc1JSQkcrOUhUUVRkRGEyR1lFWkVQSmwrY2NGaUxnQ25aclNMQ095WVBDaTAvRWovVWR0cVVVczZUcFhPYW1nbjBoWjB5SkQ4NHh3RzMrZFJkaEV5NmVuNTlvU0c0SGlKczV6UUd2ZTNRNVNsbEdlNU8zdUFZcmlxdExoV21VZFM5dkEzNU0wNlpTcG5WTGVMeG54aTVpMzY0ay95eTVGc2hLbkxhVGM2TEYwWXowL0xib2NDZWhWSkxOYndiSk1jVEtSOWxlVzF3SHVhdWFkMUp2NHUwOGlUKzFDckY1MGRQNjVVVEVuTWxzYmdvYnpobWEyVFRWazM5SStreWpTWWtzZ1JPM0JCUDdDY3JKTGhmYjEydDE4ZmdRYkY3cVFIYmZSMzZhVHBVQ2NQSkh5OTZ0S1lwM1J3YUhCNk5ma0pseG1tNUk5dEoxb2ZTZU9sK1VLMm9HYnFuODMzR1R6L1FPNVQyRjBmd0JjSjdvWWhoc0VwNHp2OHMzU1BacSsxZFo3OFc4RzRiL0JnRkdMSUVQZWo1UVNDOHBQdEQ2NnR1ZDZxRzVERVhYbmlaY25KRVlWR3B5elVQMDFUdFN4SzVNKzdmaFYzQUtrdmg1Lys0SEtVMXNkQlVsZzAyTVNTdDUvNU1HQ2lucElZMERXendpYVdYOU1wTUQyT3VTdXk3clZYZUh6ZWVmRzNsdWl3Y2ErcTJyM0xFTE43USt6NkVOcTZLMDg3K0hzZm10WEJUcVIyNFBwbEVGTmFPMVh3VW42c2Z3aDU4L2RKbCtnbmkwaVBRS1JwazU3dW8vR2tRUGhLb0hEU09wMm1KUjZOT0Jzc0tIcmxHT05aQVV1cTZzb0p4TjFhSlRsYk5uZkN4SGhlRGI0S29jL1ZXTGhocEJLY1gxMmpTaHlZU1VMMzRSTTVxa1pGWWpBdUViUmluc20rR1VoOFhHM0NRTks1OVVNTEJiNEVhY1Y4bXJSaG1Hb1RFTzV1RWxLVzFMd2tJQUczZ0VPSFdGdXgxTm1YenRxelhuYTZ6K3FtdlhqeWk3N21wL1c5YzQ4ZDYwRlR4UjFKTlRQNjNaSTNDV21zWGZVUTlJdlF3VE1jWkEzbG8rQkJTQkFVeUthYmdxc1Z6amNOd2MyZnNXa1ZlVHFNTVRrTUdDcUF5L1c5bmlkOCt3eTFBd0QxS0Z5UXFuSkJQUWd3OWMzRmZRUkR5d0ZLTjl6bDdaeFhSaDlxVmVuSTNwUkpoSWI0Nm8vVDRubkwxcnE3d2F5U3RDYm9tem8xa0krdFJ3dWZBUTQvdDFJamlidEhaeFlBWWYzcXMxVURBNXR6U3VxRUFWUGx3QlRGckE3WGFyNWhIT3N5dlRXVU0yczI2a2xZeUpEaFZZdTR5Qk15Tkk1ZXZpUVk1VC9EZkpWRkFwMUZHc3l3anhIN2x2VHd6T1o3R0hUbnRyajJXTlNjRnJIV0RFM2M5K3o3WXNTbWwxcEtMS1pBVitQL2ZxdnNGT2IrUEpGVU90S2VVcktUUEFqczdKakVmWlIvK3pxNDNoSi9WdDN4SlBMbHduZXMxUm1MdXpQdXJZSHE4dmlaMzVPbDNEZnIwd0xENTA1RWdZV0hPM3gxenlJcjJmaXU2REVHR3RXTHZoK01jMFhxbTNOQVo1QmczamdlSHNKSTUxV0pzZEhPRUhNc2piYzZneEZXVWdFZGthVzZjMy9Ldk1OdWlPOU4yV3FVYzE2aDRvQVMzRy9YRlJEVC9lY1NFUHplOEVMSkVsQVFvVWMzemtlMFZaMGVyZFExY1NpZFFUUnl5aUdBM1JoTkRyaVVkZXdRU3BiUGIvc2VYUHBnL0E3SGNxTnBSdkxOZ3Q1RnZBVzR5R0pHTzNjZHQxVEtUNXBOQ2VGUno5aWJPQm5yaHFCREpNOXVLTVpGL3hTNEljbUZnR2JTcE51NjhFYnRFeTFqRmJVWCtjS1hxdEcyZ0hkUjkzaEpOcDRXWC9OR0diWWJrM3lXYTFRNURsbC9DUnl5anUyLzJXdEJjTm5yaXQ0K3AwOGlQcFQyckRaSllJT056Q2Zva0dTOUp4bHpic1d3VFJlQVBvaDhjWGV5VGRyRmhNK3Mvb3c4RHJib0lzVjRyektvSW04SXFqbm1pMlcwT2tyaVIwVEhwRDZoZXlMcG9rMzB2ajJRNmdETHA3UVArVDlTM3FUbXVaUWxmRFlaWTU4VUdOaDBGZjVtdk9FbXFta2hpNThMdE1rOEFCWjhDdWsrMVdYNkhOWmJvU0FSellkUktWRWxOT2RIVk1OMm5vS0dTREp2cHJkTEtSMGp4aVBHb2tXV2V1SUtmNko1VXFTWTlVSXNzU0swUFJ0eXBTRjVYeXlsWVQzWGQxQ1FQbUFOOHRoaGNtODUxeFRLbnRVbUx0NXd2WGE5VzlEdzUxVHM0L0tKVSthM3RoUFBrTnkwTjcvUFJDYTcvM1kxWmZyMktBalRXR1pxVXdsQjcxRlZBajdURFlXMjIyL1pKTytKcGVYdWs3TmpKSDJXOUZLWnhrTHhoL3NES2Z0WFRuK2Q3a0tIeDlyMUtoOFk3UUwyMDB1MklKTmJxcnpycE5xS3BCR1NXcW1SZDUzcjlMYlo2ekU4N05oMGlsd2NQaUovbGprdzk2VzdybkNNWTNnWEJveWZJeEYyMzFpRGJweEp2VW13RjhMalR1WFlyVVQ0WjhzTzljaUQ5aXMxVzlaNTRBYkczd1BtWVZ4RkEzcWE3a0ZNQS9TVlB0dDFUMWc2d3BTRmQyRndxc3BoYWxWdlpteFJwVjJsZEpwdTdCTXR3TTMwUGoveU94Mkh3SUg3YVBLUW1jMEZNTWMzYkVxVW1DWWp4d0EzT2MwY0NaZTRlSmE2VDlaaTdtbmhRWUU2QlV5YnYvZnRoZW1makhjcUJUTzlrQUthVlVabjBINnFQNHRZQWhRQVhJRUVMaGwxUlF1ekFaMFVSY3FUMUgzYXl1d05TQkN5clBYWnBneU5EdW9RbVJ6MC9DV1ZTSkxaWnVnOTVZNGRzRC9ucHZuY1B0V05GaWxEZnhXQnJXSHFVbUlCcS9RUTFmUE1qRWpsSDV0UjJORUpmMXdnbXpBZ042Smp3eU5aelJuT0p2aU0reHUyL3p3YVpIdThUazRCaXJmOU9WclRCanVyU1d5WlVJY1J1TTlEM0FuTGdBaFArMXhVRjJMSWhmazZGUkZzd0xOQk5Mb05VQ3ZNbUgrWkF0cVF4Y3VoOWZQQ2pDMXAwdW9HaUdrT0N6d2Z2SE5OaHRsSkh6VGMxZ2hhZkpIVklBMlo3U1YrQVhrUWtEbkpBajBXbXdmRzVINDFNTS9WN2RqTUEydWl6TXlYaUJ4cFFBazhVTFMrbm9CQWdxVkIwVmNRQ3pDWG1FRk1kYWpST0tiOFNHV0p5QnErdWc3RGJKekpZUXRwc1E3Ujd3aEtxaVdBM09YTDJXYTBGWFBHV2Fxa1VTbGRHTlJsMmZiTGdFVlU0V2xRaHRxcG4wVzZ2RDgrdVVkdEpHMCt6cVpYWFpDRnZpcHE3SGlpRHNNYVJzVE1XTTZNc0ZMUnpFSjFqbjZKTzhWWjhYQzJFcFpOSDRDVjYwclRLZlRMOTNuQzYxNFRKZUVBNnNjSkw1TzBZODBweVVHeitWYm50N1VnTVV1WnZJcDRWWnp0RWFIZ3RBYUNyQ0JWalFJY2F5ZzlaZkd4SmpaWUtYekJQTkczVmlWZDlEcjRRZ1NwTnVQOEkzc3J1YWdKT2hkS3RxcXhtSEpiZEZYRCtlUmNwanZCdlZ0UHB2ZEVjOXV3Q0E5V2FWRSt6bHNzR1RiYkYwK2FSZnY5WlA3WW14RGQ1SGZyVHlnbVg3M1FUTnpNeDBIWE1XVGtyZHQ1RDhlUjBhUytMUkdMMEtvQ1FFcit3QlNTUlNYczB1cytYYWtCK0pydkhmVmVORWpxaEw4U2FKMVZXYTM0MWQrUmtYc2FNVE82ZXd3QjVYNVdGR2lRTWlSZjBkVHd1eWpYclhCZ2xKL1FxczBiUjhWMzA0MWN0YWtaeGMyOXNrd2ZUaGhqem1QbjRDaEgyNHRqVjZBbEkyaGcxVm1WMitSUFg4cGVXZkRaNCtRYUlIc1ppT2hKZnNNbHp6QkMwY3lmRXBFa0N3U2xHQVFXUXQrSldLYXJKVmhtcHZnS1Btd0ZTK0hpNzBtRmQ5eFVXSUtrZFoyM1VCWkJIZTVsd1N1Q0NodFI4aVgyV2FHTUFWYitKMERmcUQwZC8zdjROSXg0THQ5N3NvTGZNbkpLTDlqbExCRzlWczBGTEJvREpSU0tWN3hDK1NSOWVvQ29HK0libmVuQ2ZaUllrdlI4bmZTMW5aQmI2VnBUelZVb2pQcmljZUpiUHQ0NHB1RXdTdUsyL3J0MTV0MGZZdG9zVFIvZU5LNTI2RFNKVjFyaFRHR3ZuWDFqTUM5WVNHNi9DblI2elRRK3lyd25sTTBjeE9RRnRUR3VraFRDR2R6MGJTclNCNXFJR2V4Y3hRRGhrMytRcytLQWN5THBIWEMwSGlBSnZSZGlTSjJMd2I3dDdlMDhzREdyQ2I1MFN2UVNQNTBtK3VFeEJVNjF4L3A0bVFFc2JHK0ZDZEt5REtrOU8vYWRLMnZIVXI5WWdxajRuMHh5b1RzNHBJdUtVOHhMYm1uUjQ0M2Vwa212a1ZwaWV2SGdDaWtHSUVHZHU4WGd6NXBmN1F3UzZIeENzRFlwM2xPeGsxYUZUa3J0RzJkUmI2dHhHUVpqUlljT2YrYlQ5VG5ET1drcldhVmM3UnJLMDNHaW5UQlJENGN6ZjRuQkFjbHRNa0JHV2NzanZPa3I3SEZ5VHI1QVhhbVpJMTRtVG5naVhJakdHbTN5T3oyZHZ3aTRrVHg0a2E3Rmw4VVV2SThrU1RNNUJEeDJIMHBrM05BdEMvZk9mdTVia1M1Mkh3ZGlBR0VKM1ErOTV6Q1VLNDJGeTUreXloRDUrek4ySDQ3UDhkdnloU2VHREx5cTI4QWxPbHI2b3lrQmZwTWZVejg3L3JlcGtaV0hWY0xoaTNYQmRSOXJmUlA3WWVRVlBtU2FiMUFyWHhoL2VTbVR5YVZEZkQ1U01VdGlPeVpVTDRCVCtEbmorT2pNL3oxTmFUUjM0eXBNZWo1VUMwaEZ3L2xlTEZFK3pBdVBocGRNQkhSQzFOa1M4V21rbnBYSmptUkV1Q0JtNlppWDdqOVhwSURlZUk0OCtRNHhuZmRqalQ2K2k5Sm1IVUtwOHgxN1JMS0Q4dDAwcHl3d1BRZUplbXYzZk5PZ2Q4K3NxNVVsdFJvMHJxYzliVlVKeUNyUUNOSnJUUXQ0RG9RVXEzbnQ4WXhkaGZyK3VXcDJRbkUxM1lFdnUxa2FVREcwN096WERjVzBkcno2OEt6dVNTeU1sN0ZKWUpCSXY5eW1XS2lpWFNsZFNSazgvZUczaGoyVEVSUkRnSS9aMUxLc0RxSS8yYVR6Sk9HWUFTamxqZUpENXdDeFB4N2IrVmx5dUp0cFN3c2l6eTROZlp5bFZIRkk3R3oyUVZFUC9YVE9TNGx0S1RFZzZuMVMwZUJZY3NWSmVUUEk5WEpMcEZSeFhKNmhhNGNWa1hLOG5taW9WM054V2FJc0wySVJsVTdTRGE5MFhwOEhnam1FZmZHOFo4RFEveW8wbm1JT25kcXRCMk5ZVjBTTXZPSWRyZHdWWjBxS2QyaEZqNHhVWGpYTUduN2RpYVhHVlJ3VUVtRU96dXN4eHZISUtBZzFWRFliRGV5dStlbnBRdGgrU0ZmRXFPVDlnM0Y2Z0NUUHVTUlF3bi9lYmlYc09sK2V4aDF6VllvYlVrMGxBWGxUZDJOK0RTSFdzemxuakNlRE5IV3hqNXY4c250WE1SY3Y1SmxpbHBuUU1ib3hyUnRnWFhlc2tTSTlrN3pvTW9VU0R6TnFrTmMzTUlHU0k2WXRuV0RFby9LeFZlSjJrN05lTmh3K203eGkwTlJxbDdVWWo1TUg3RFgwbkRuTzVtSzlwNGlFRERoamNhRzNqWmxEOWR5VkhTRXA3SnpUNWorV0hONVZwSGovRzBEa0RLUlF0Nm92YVlXTGtxVzhIVzM1T0QwSm5PaUR5Vm9lbWZZcGtBVEdDTEZPWnRKWXhJUWJ5Nnk3OEZ1aFhGQ21nY1BaczZCdUZOOEUrVXVLUnhqK0c0bGlINkhodkhtREEvWXNOeEZsdktvUDhqazdvdFpUbStjckoxK2VsdVpsU3RuQW8vTUN0dE5HMkNZVkZjMHdEQW1MMVVvcjNiQ3dhS2VLbDVFU2R2V1NYTlJUKy9VOUFUeGdEWlBxMjJPQ1Q2emtDYXpyeVAyZnBLcmlaWDMvZHJiNFY3THlQYzRWODVVeFZ4MHhlMTRURDRlMkZkS1h6TW9PeGZwK3FGcituanZqWnVvQ2d6K3BoSXByYlovWXlsNHg5WkwzR0JkMFZmYThhUzg5NU04Z2NOU2hKNTN1N3RMdGRqejBGNGFFUjRFTnBKd1plSEtGYktnZThUSmgzTit2RmE3eWdaaTVCbll6MnIrV0IyUmV6SmUvTzcyRi95TWJmL3RuenN0ZExGNHdtOWFxcm5iNGZkZU1vNUhEVDNtZEhmVnUzK3h5aTZtUmIwUHVYUzUyQU1hSndSZTM5RFNZK3JTYklvcmQ1Nzcrdk5xMEE5VHZJUVMxME1VbjF3ZHl3bVU1QVZpZmIwR0pHdC9ZaUNPZEN4QjBZSE8zUzlHMnkvU2kxcjVha2JmdjRWbjl0b1FvcFh6Z213ZWZMeFE1QXFVazZpRFNtckhsMWN0MWFMQVRPdXIwVXcwQ2pxL1ppRDlhdHVXNFd6Qk9DWGpONHp4eS8zSFNsMzZaTmpla202QzFXWGVtNHlWenI3M3QwM3NIakpTRW9xMG1sUU5VcWRiZ1VXTWtUb1FwVG5HSzh0MFdEK0NCSGc5UmFDc25UcGxsdC9wWHRlMDZYQ3h6M0VZa3UyWlcwUlRpa0t4U1RWLzI4eFY3S1VRYkhEVnR5WWllT0wvcktLTUNkYkRxTStSUHo5V29palEzMUI2aE1vTlJ3bG8reFBudnpRWGdLUmc5bUQ0R2tpamc2RVRIT2Y0c1hDVGk2ZFhsb0phTXJIaW5ld0d4VXM4eEJaT1lMRCtETXBCNXB4MXpyV1huQ3VTS2lPNHhzdS9YSkx3SWtoUEhYcFUraDYwdjFWUnFNZFdtcFNGcEVtb2xWd0xaRHlhV1RUVFVwd0ZBS0Y0WGd6bHpiM3RmOVl3RGRhSjFTZzk0VEZkcVRKem5nT2VjY1JadFlyUkpxai9Yc3ZMN3J6Q0c5aG5nVmJWK2o0MHEvdWZVRVZ6VGtGVjduT1RLWmU0elh5QVE0bFprS0dmTDNTeTR3QTNNTGt2L0xqVkRXWmE5NkxRSmRhZ1FVNFQ0NGtqMnEzaGdsa0RubDBKejRjR3dNejlkQ1hPRzk1cVRNM1VjZDl6ZnVUS094M3VDMlJZYldDcTdQcjMzZ1ltQVNDSW0yelhJQ09UQ1o3Zk1PTGU4Q293aGRIMWRIYnNIMGpveCtJZXpxTnQ4YWUrdGVkdFBqdDR3bWhUSHl0TE12NXc3bW4reWNacmVFS3dGRExyZS9JMWZ4R2UrUm4wbUNiMnFsVnBaaWpyS0dncmswaEd3RzRGOGRvWmFjbWZMSUdlYXlnQnhtQzJpMmlHRDYvNDE0STF0cjB2Nmc4ZWlCa3U2VDhWUHBkTWhEbkhmUWZYU0t3R2dieDlIOC95S3dWUGdpNDJkanpiRi9lUmcwR2NURTlJTWttQUR3OUJFWTN5RXc0cHVGMWJYRFhsVjRQVHpjdndadlBMSTRiRGUrR3B5WXQvcFZ6TDc4S1BxM2g0MVRRSS9kamxid1hEVzF5R0pNeWcxZ1RlMTgrd0Zxei8ydG0xWXY1Tk1TZ2pwTmR1UlozN1J2NFhvSDM5WnBHTk5ML1lTMmp1eE9vdCtDMDF3cTNxb04wWUdXb25CQ3dndmVDOHNjOVhqNkUycnB2WGxORVFoT3hKVU5HY1lTR2s0RnZSZW5wQmZ6UlRBcDZlTDExZHFDenprTFZoQkRxM1pjZXBubGZvMFRWbDJERXhOZFRMTDhrSm5NNHhtUldyQWlWekYyUnFnQmhhMCtwaVViUGhsd2c4VzcwaVhZd3BzbVFlRzEwNVhpam1EaDllVW44b3RzdmpJbDJNQVpUZ2x0bDlDbzRLVnIvM01CYXd4MzI4UU9peGwreE9EWEFiZG9NUVAvY0cxNzBGNWFINjRqZUpSVFQ3Sm9qaEhjV0IrTFRqQVN4aTB6S0pqR1hXNCsvZmVsaEIwZ2syQVVBQ3pjUlpXMVg4b2ZqRURTVEhtUWRWdEx3MDRZMFVSZDdCSUp1WU5ENERCRjAwZ3BWcWJ2cnFwSzNsM3MrWHVOTUNtV2RJMFVJN0RTb3VOT2l2TmF4Y3ppZWExM1RmRDMxZFN3VVpHQU9lZkdTbnFlTE1lSjRORmFkb2dtcDgvZXpBMVRLeHU1ZGF3OVUwd2pHb1o2RTJRdW5ybWsyQXJzNHc0QkExR0FnMUtlSi9qZUh1dWZ2ODdWMUpmQ2JkTzlVQ21MU0hlNjVQMmNuMDN6dE1ycVZ1MG5GbGxiWm50VjB0bXhyaDlQN1NYckRiN1YxYlYxdXR3Tm1rSEFKa2p5Y1lQc0I0K1FJNjB6dkZLMXFSNjZubXVZMHNpYWtXK040ZjRDY3dHNEVaYTZyaG9aS1VvQ29uTmJFWWQ3eEN4cTZ2WTVqNkcxZ2lyZ3J4Y1Zua0U2Z3NRQ2pTemczSG15UHNhUG1KalQ5bnl2dExvMExLcEJwSU5LNU1NbUhMclpwN1M3cDhjK3JiTi9jaEViNTJ4eUpjckI2bFp4Q1BvR0FhSjQxa0t2UVphZE1BZWNtbk9HeTJWNHBodys1NnA2WkdUMVp0NFk1bUF1NXNZUk4vcTZWZ2JqV0MzdUwrRE13ek84dXlTMkJUdVZTNFY1eG9Fb3NLNmVBV0xwcXRCU0Q5OGd5Q3ZjUVJnbU12ZG1vWG5LeXlNYmRESHJVdGFwVjV4M1R4K2t1K3A1bXhXT0dyTWExeG5KVzFhMzlMM0ZBQ0hZRzY3WUtiRkx1bW5GS1NjWEdDVzNYMmNRbVk2L3ZBTEd2YUdlcGR4TG5weDBwZmVVTG42R2NiMnJaMHpkUHdnY1dnb0JXNnNJUEFZSHluTmVPdmIxYUNzTVVLc3A3aVpha3lIQ2ZOenNKWkhHM3VFVmNYWWcvRGVWTUhWRnpxU05QZmx6UjRCU3NoeXdBaGhGaGtxajBhYjhuN1htc1Y0UThkWVBaa015UFZRNFlaQmNMekdBTmtXakFKQ1BmaWZnZHdGUEVvN0RGY3l1b29Fb3QvSmN0Qytla2VGbTVFOVRjZC9oNnY3d0JtMGRaemlkZ2V0MFZvNlZRaGxUSUN2NXJOR3RJcnE2bEd2b0drRlRTU0IrMVBOSlQ3WGFjRFVJM29qK2dOQW40TlRmc2h2VEdQVWpBenorMlpDeDJjSlIzeGxkNGk4eHU3eTlVK3pidkV1RmRVdlV3RHBtamRMWmNoLzdwMFg0amNzVzRpZVZTVU5DeHJscjliZmorNnpVUG1QQWZOYkJTdHRIQ3VGUVhTUTF3dHVoRFhZaEswdEcrbXpmSUlCZXZkcTFLaUlKdU5HdlVtVEJ0ODlXUzJ4TWE1akRodWZwc21RdlJ3dG1WQmNPTU5WRnlpVnJMQWhnRXRSLzJmb29kUGl4bVFzczJUaDlVdEZ3aWFQK3ZnRzBGSnlZY3FwMVplL2N0K1R1U2xDQVd5TFc2dHl3QjM0UEgvcExsbmZ0L3oxV2pxTHluUTdkb3V2TE1PZnlEYW1KQkh0SVpzNFBHU2ZtZURFbDVyR01laU54ZmFqL2IvdzEvQklma3JJajVoZFZFNFhGdG5pSjJPVlBWRjYyQzNLNFdWZUlueUt1blladjMveWtxWjh0V0RQM0svTmhOWnFRcUV2STduVHJVVTEvSmFBMWV4c2RLZDdtODFCY2pIeW8zU3F5T0NUVWZqNXBTQnhLV0h2OHR5aEJmeUpNV1Z3aXd4T0Fjeitmc3FqN1dpS2hnMjBXV05YWFFKSzlsTGtlN0tYcHE4RkNoaFc1SS9PaGVZeXphNFZrTEpTRjA1NmdjTlFCVlY2dmNaMUFNaDdtME5FOCtlNVBON3VDTXVreituTFdhcWgzbkc3U2x4Q0QvZFpmY0tZaGRMc3g4YXZCb1NPOUcyUEtKVVkzalBXVnp5Y0tEVWluRWpmMHNtcDRybmd1MUpkSDBPaGE4QVF1a2RvU0hjVFBiSm5tMFZJVkd3eEkvOE0wL0RmQnkvSXdvTUwxY01SSWlsUFBNR2lmQUNuQ3hTNTZQNHlYcWREYThZRmZMVVloM2cwemF3bXcyY1d4WjhlZmRkVE5FRXp2MGM4Vm9oNEo1RnJaT1Jkdml0NVZYZ0J6SzRJa1BpRlg2Vjl1bnBPMFB3aEFsL2JCbENkL01QN3hwRWVnODhzOC9NOW4zWmhYeFZxaUgvbGNEdEFaSnR1S0V2enlaMmhwVi9mT2dkN3cyRHJzSUFnVDJvcGR2ZDB1dVk3ekpLYkUyMTA0YWNrQ1RvL3dHbW1KWkdPOGR2R0prNWN1amplRW10aExxT1hwdWNhRE9mVXZBWEcwME95VVkrRnZWVnNVa0w4WTdvUmtHK2ticXFhOFRkQkZDa3BkSTl5WTN3WkkvQ3ludER1MmpYUU5sQTJDWmlnckFhMVpQWTFqZTlhYUtMZ2lMdGZjdXZrYTU5bVI2SHlMOGhOY1BhYlJhVENYR3BQZDhDL0NjYzlVRDJCWDhjMHFyRGRDZEQ4N1JCWFRrRmplejRRM25BYVBUQjZXRkF2dDNIc20vRjBJU2krV0pZQU5pSXFvbEd4OW1qRjlKQWpxVm9rMGh5WVUvcGZPblkxU1FMdy9WUGlWS2w3cWlTUk9LWXZESEllbDdvMndRczlqTys2N2cyc2FyYkxUUDlUa2NzRUFsSGxYNU13TGZES2MyY1huZjVjY0c3TTZ6SWJHZk1uTWxPWjJ4Uk5uYy91WnpXYlFHb1B4KzdwQ0oySG5oV09mYTVKaDhvMG9HTFdyM3lXK2tFTnVEM1NiTDhla0hnM3lWY0wveFQ3K3RLcmh6NHk1VnJTQzdOdWNVL3lWeUk3VzhHQTBUdEYxYi9WUnNtYjc2Q1dlTFBNYi9WQi9kYTFsaVJTOThnbFlIdFdwZ1B0QldsdWZNTzhjd2d4ZW1YaThWZFZzeHJTNnM1VUU4T293SVpnSUNwYW9HT01KamttVllrMEFsMFRSd2RrVmxsc2JkVnFkR1RQd2xOUXNZczdSaHhQOHVOdHlzZUQwTE1pUU9xU01IZUhnN2g0VlphaWpGalJXQUJNTVZPYldGNTRGa1JWMlBrUzczNUhXTlJaZmZEclNXNEVzWmpMN3FBVHhFanpTOG5XR1YzUGhJYjdxYkpHT3I1WE56d1Z3QU5uK3Fhc1krdHloNWh5WUpBZ1VQeFA1ajc3c2lXeUFRRzNSd3NuN0Zvd0FpUHR5VVBkWENUUVR6WHIydHU2REtnYkJvWURzNXlObXFrMW1qbnY5ZFFXOTVnNmp0ZHg0QmZjTEx0YTFsTDlJOVAxa1pTNXJvbTgvbExTSFBxTVp2aWJCRi9SWWsxa3dFYlE1WkZBcUxFN0lwVmx2TDVYR3FkL216ZnFOc01DMlZqWmh6cjIwYWNIZ1hYd2ZJN3ZYa1B4YzJvbjhSTXRmSkVCenN0WVNpclFxOVlrK253T0VjK0JPTFJVOTJlYzJCdDNyZUxzNUNlenJiOXFpbHdjRk5YOE1CRit0d1V4b2hVQkxrY3VIWnlLWnFqNkJMeVJzeXBBVXBTQ1VYRXAvRVE2WlVJdDNBOXRld00xbTc1K0NmSUZ6WVI5VDZDMnc3a3BzcVg2ZWJuNThtS2UvVDF4SCtQcE5ERklnRXZzS05UcDJLL21BZFMxTmk0OExYWXd5cC9yREZhMUFtYTBrOTFIRkk4Q3JWVjVOVURzQW1DR3k1cGpoTWpZNGRZdGdwa3VMMXhHRjVjZnNSR1BaM2psakkyTUNrTHF4QU9XWjU5dm8yRmhJK0RINXRDT1I0NmhJeGF3ZmdIamROTXJTMml6aTN2Y2x1WEN5dmR0QUpHVFc1SGVKc09BUHNrVk5yd3UxeHgyM0VnOHJFeHFqZWRzUHR1VzdTRFk4bG1sT3RBQVdpSDUvT1RSdG9TMS9vM3BTc09VQW1rc3VZbnUwL3E4TGtZWXdIWHBIeXdYQXJCU3lqMmNnRTRkNG5Damswc2NhNzZkOUxzekJMZ01jZHh1cHZTV3ZYVm5mL3RvcklqR3Vpb1VmL0gxMFFoaE8wakVKdUJvc05MSmNVOFMzdVUzUmNYN3BTS3BFR05HVkJlV21zOS9lazF5Y3VXVmlpbDdYN1p6emJMWnk3M3pUSzJkdi9xc0s1eWgrSU9zc29Zb1ZzTnhrZTdPRmtQbWRSdXhWNDFFbUM2OGZjYStNaDZZQzZxMjExOTZ3c2J3dFJ5Z24xTXRtK2VvTFEvUlRzUFpPeE5zZjljV2pBL3B2THhsdXd5V05QUFF3UnBRSHowanZvelpoNzhZZDZ3QzNRNEx5ZC8zMDV3Ymtpb1FzUEVQSUtvVy9FQ1VuV0VIMkNPQ094YzRWWThpZ1FkN2NMMUlySHA3OC9uSDMxTjFDeG5BOTV0TmN0WTB5N2NWdFVXMW1JcW1TV09iNC94KzBhcUNuREVaZVZ0TWN4RzBHbGczeWZrejd5aFkvemtwUnZzVXc2cVNkSmdXdTNmV1c2aUpoQmNmSkFXd1FJY29RVXFKTHZzQUlacTRkUWZYWExqUmhTRm9IR1BTek9CWFljVFpmTGxNU3RvT2NXbWdnVjhRNVJ0UFNVdXdPNzdiREZTcTFqNm5OOWl1OEE1N2RjemdOS254NTRRWlhzUFByTkI5RzFaT25WZ1RmRzZTU0pVMXorU1VwQnFvWTFFL1h6WFQ0Y3V4TnB5eVNvWERlMzFmZWFCZTdKRndaa1dHcmcycytOREdMSW9ESjI1UDN6d1puYkpIWERxSmdMNVRsRXovRlhkRUhxK014SWdYa2tLd1dnQTBEK3RzTmJBdUlDdDRFdTN5R0NlWHZIbnF4K3FFR2dsVUtoMEQ2VTdpdnFNYXF4RW1zSjIyYkl3TGY3cEwwVEd0aWQwd2JtV21vamdQRWtVNFFUdnA2a2V1bmF2RldDVnNhMVpHakg2K1J6dDRIbVQ1NUJCdFFCYzRURy9scHpNUTIrdDVsUHA2WFpBMnhJa1JHVWV0L3UycVk2RWtOS2RxVVZZS1pZVVIxSHVPUkord214Y2taK1BvS2ZKcUNZMS9ON0xhdDVJSmhPWFdvTTJZWGVTbGFwekVrNUFXRXZnTjRsS1FvdWZqV0N0eVQrNmtVYkpXcGttUCtmNGw5VGo4NGd4NGV5N3lHMVR0SXNMd3hjVTVwcTdYdGJjQTNqcVB0K2dPaFA5MDlEaU8rbTcwSTZ4Q29wK0VRY0ZLWHBEdCs0bUg4UjZNZWMyN240NDR4Y0YyYlYxTUlKWUNKWVZDNThiOTIyUnFsU1RzM1Jsb3Z1NUxsTU5TMmxrdmZENktPOXp1b1R2NnBKQ2RtdG4rR0F4elJjUHhDTmhIL3hzYWNlK3hPY2tTSHpoS01ycXJMbytzUEtxL1I0Q1RlaEd6UlVVMHVCTjZBeFEvVVdqQ3liMzZwcUN6aVVyZTU1KzRVZkRhQjdiZUoxN0UzOTlGT25UTVRzNnlqOUorbDZZT0d3VXQwRHd4MjNKbnJ2T3V5WllQK0tjQ2tta3VkMnpXZFlzRGFNUXlZUFNHbm94NEhvQ3JseXlndTVyUW1TcWRXRG1UTHd0Z1Z2a21pQ2tZMm5SZjFjZGxYcnVxSXRPV04rdHA4T2c4aHF0NU1xT0t0VkJ3UjR1RXFLcVRwZm80WkFFREE4eXNmR01WbnkwWWtOVUEwMnpHRkZNMWV0ZCs1dmVqUVhodmhBbzhQaHBVUGFjWHZJSFBOTTArRTkxWTlUbXJHZkphc1FyNnpseHc1bDJLaWkzenpRa1dtRyt4SE14Y3dVSFZrRWJRU0JQWlpaMHJHdDJ2M25WOGNteUpEZ0M4V0lOQjNoNFFHcmlPNi8xNC9aclNHUTJCdVpidDJKTVNMZWJlS0FERHRYcVFNZUxWOS9tem5oUHZPZXAxWnRYaVRoR01oLzhReDA4NlNpdVByT1NybFpKalMzNG02MFBMU2VINnJDYWwxTFMzNzRWUWVmZjZrZ1FqaktBWFREM2tBRDYyZi9nMGU0YXZSZjlma09GbUtqT3FpL0Z3QnlNNXdpZVhjaWwxL3c1S0lLUHNWZHFCc1FJNHdLams2ck4zUUFUUk9VNG9wNFcrTVJnMVkxcnZuZGhwZWFleGtXWkF0eXduM0t0b0ZlanNYdzR0dHF3djc2Z1pieVpQWDhFc1V4WXNuYmQ0UXY3SVVuUUlPekJKTk5aVlhENm1JZ1UxeFZkUGU5ZEg4dUs5dndPRnRsTElXSXlOcFdZQVVJSThRNnE2TXhGQ0hTdFcwNGlUQXJwb1dZc05KVUpnQVF0UnF0bjJUdkIzSE0zamNMTTdJMDk4Q1lNenB1SWFsd1JlemRIWUw0ZXBtV0RPVkdzU1FzNitKemhCemJ2YjVmY3RncnhFRlQ0VExLbE0wb3A5YXVVd0F4czgvcVFxSE41Vmk4K2o3YnhNUGs5dVB0b3FJY2c4L3Q4dk1JaG1QbVlmRlVmeVpOOHVPSWMrcDJrdE9Ib0t5T3RjY1VXRGtmbGI4NWZPa2NKcmZIblhKT0hPb0E0eHRnaVZNRG5IT0JOQ0o5bG4wVlZFTWFhY2xmZTcvQXhUWHdTSDBzQk45K2hvdFJYeU9IVWlUbWJpTSs3RGhxNkNOd3h3a3gvY1hUODZKOWZFU0Zxa0xXemlvRHp5VnE1OWsxcXZCamVGS1JQU3BJRDdFQm1rYjczRHBZSWhXUW5rdEpjc2pUZy9tYWs1Y1RSSXc1WHVTMFh6NmdSZXBBWDQ1ckNzM2NaUUQ0THZ2T0hNNkl0UllqU00zMDNyWSs5Yy9UOU0zYXNaeGl4dVZPdWJBS04wM1R4ZEQrcVNEOHQ5ajNLMWxocldoUGgzL3VNRkNxekRDZ0RsOUFNRWRuTS80alRZQlREWFp5UFpNemtpcXN3OG9PN05GOWZLR2JuN2FqZTNKcitmc1lZeW5YSElkc0JkV0NBK3k4RENxY3NnUktjaWZGSXg4OVhodms2Y0xJNWY5UzdOOFVkU2VkSXZuMFhMUksrNjc5T0ZQQzZmbzhzMVpNS1dreVo0em5jdWFSS0V1dEtOc0lEMWszS0xCRncvczdqZklwV2VBQ3FuWkFnZVBUS0dDMW5RZzN6WEtXZTZEV0hkWTlBTUM1dkRZSm9xR0Z2SHBBRTJYUVRMMVloVndnbXVEVHhzNFkwS1dkYSsxV24vT2tORFhoQXdxS282NDhHa2lXRG5nYkpBRU40NlEybHYyZXdQclhMRlRtazlLbFNVQXNKMDZ0MkN2WlFzcnl3dFRRUkZ5QXVYeTNSOG83R2UraVRJTERNNkFOV1BRVUtTWEtZalVKZ0RNbnBuVTd6NnpteXRoL2lIckIvbzZ2T0VVcmxuWkNNc01abXF2VE1GVUFrNmdIM3ZtdlFjUVlsR3lhYld4bGhLbWF1QkdtcG5ZNDJaL3lMTlZLTS90bys4emd5WjNMZDlTU1d1ZW5yeXIreWJ2dGUxdlBsK1l1QmxKMGZrdEtkNTJTNVF2bXhxK0FIRmVUdnBKTTlFS2ZMbkVxUzFEZlU4MFl0cnZPNk5RcS82aHBtNXhUTVcwUW9NRTJKaE5EdmhKa0dHMHdvTDB2czdYOVFKemNlWUxnWmtxRy8xN1NmWHR4VGkxQXVmME5hNGc5dWx6eFNMZGZqdTJPcTdKalMrWGVCWHpTSEtUbGJ6NzdJcEV0UVYwTHA3Z0s3NW02NEVYdUxTbW41M2dXOTNlSngxZm15S0tjdm5nU2NXMXczdytld2hodmJSR2NiNi9SWE50RkFLS0NoVlNrRE4vR1lrQjBObFljYzFYRkR1MTRXVGE4RUppRmVCeVcxV0JhQ3N1RjR5UlZ3RmUybGdYR2NLRmR6RnBINDExVEdyNzZTbVYxSUVBeENNK2lSK1QrMUo2UGFwbXloWDJDVldwaVhFb2FDSENhNnpIaUhQUEFnY1oyUmFOaFZEcFA4Y1hReUhUUHRaNGNEOUVtanJFY1RyRUxyNkttK1ZjYjRoOTQvOWhBNmJMT1k3N1FxNDRSZzJHL3g0WGprcWxsT3lXSG1raytwR2R2ZmljczkxSE1yU0pIQWRrd0ZLZjBYZVFLREJxcFQ2YkduTlZ5RFRmK0NUY2Z5VGNrTjMzRExxcUQ0dU5SczFJV0dUUllxSkxjbjIrMkJrVUhiQ3pueHNtYUNVQVA2MVdvenFyOWs2VDBPdVhFMUZuVUtwS2JPSHBjWTUxZm52Ty96OGdUZ0FWSVpjZXBhS2xKaFl1dGp1NmhrbVA2TEM0a09uSmxvTFlUKytzenFoYVF1Sk1rcHhkcldOcnFzaSswTFQ4bXlhKzRmTXM3N1c3alY2RzEzbEY1aXlzL1VIQTlQTllScS9CMFJBL2lDVU5MNTlZQkxINjhoOXVjSzlJaWlVQkkxZmdzTGJVaTQxUmRmYU9jZnppYWZNRk5FVjBTNE9taXVoZ2RnZjVJU2txK1JEbFRqVURDQ0wyc2V1N1BHcWVYNzQyTjc5NHpqeHBaK1poR1JxUmhvYXJPSWRXMDFTbmR1QVZINzVGcUdXVXBXWEFwa2tQcXNLeXA0Ymh2MUtQWGE5djJxSjdIaHFiRTdCM3NpS0EvVjhKMkRnQUpsZXVmNDhxZDRsTjYrRnJBME5qOGVNdHJKTG81REJYOUVxYVhCTWNQODRBL0xzTkZ6eU9pb0RWN3FTMk5KWlUwekhIakVQZWFOSVp3U3hSdDMyclNCbGNtM1pIdjhHWGdZNUZSVFFua1ppcWd3enI0WUxlQmFEeTNQbHZlR1RnT1gzMUN5OVJYVmZlSEdYN21HTTJxeHBhcGFBN3Q4SXB2NVZMMFJTdThuNUJmQ29ESDlDdUZad2twQnpoaHVMQ2NZUGpCeVdOWUc3bHJUV1cyVmlBemxwcVFMRjFkaHUyUnN4MFFmL2gvZHVaNVZMQ2Qxb2dhM0dNM0ZIRUNiYjIrT3NzYmw5V21aZGJvdTROV2orbG5KRHNHNkg0MGNtdjZxUk56bTI3azVQVElWZ2kxU1VZTWdBbE5CNFViR1FybEJnb0Z1enREV1lYcWNWVVQ1Q3puY0RQcmF0OE1Dd0lsMk1Ec0ZERmJsZzA5NHo0U1VRTXppdVJYMGgwOHpIcmp2TGdmbkd6NHJQTUREYmlUekU2Q3dXQTJLeGEzZEZyMTRXNXNjOWo1OW5UNUdhWUZIeVIzMWtNQlV5TVBCVldhV0NuWEVlZytLOThQM3hiSmpTcVNzM1lsbFJSaFVmOEhmMVVvNTVoQ3E3cmJURWI0ZERzRmI4Sy9pRmFpdXRPclZMZDErOU96R0xvNm4wN1l0NTFPcmo1ZUFldEVGOEtqZGlTRThySk9HRkh0TDgvUEhxeXdRNUtNR0RwRmJvMjNXUDY2WkVISXdabmc0c2F5ME1NelRmcm1ma09IYkRsb1JhVHRZdGdxankxNG4yNGtTaXhYZmtHd2VSWDJiWTV4VFZPWUw0VlV3c05GanhZTVRvZEcvdGdIMU9UQjFTd2szRFNYam9weHRmV0dqei8xZkF2WW9DOU10ZWZqZC9sTDVsdXNVaHJ2MS9WbGpoWTdpMlFPdzdZdVhDd1ExRms1cW4xNERZcG8xYjFUa0l2STBsTGNiVzZKV00rRkxFUGtyaGZVZjlxRkhkS3JtdWRCMFBZNGVpUFYrMk5ka0x1dDdNciswMlBvcVB3SUdTQVpncFlpZXBVWHhzdkhSU0RkZEdveW5hUDFhR2JUZSs3MWt0RTN3d2xkREZ5SWtXQlpFQldCUmhMTzJ4THJTNDZmZG4xTzFBdWd3dGlJMXdGTG1ibVlTb3VxZWkreUo3bmFxREtnNnlFMFpxWEppYUpaaDg0S1ZqZ21yYUE5SERzem9UQndiNGloNFBXeTVyV0o3eUl3a3UvSHJxYTR0cG5BWjVscUdrMW5FSWtkQXJGVGk3TFJnTC9GK2M1VVp4dS9ldm5uNFVSdGtZY2tsVmRaM2ZMS1owekVnVi94SzFCajhYcjB5a1dwdkhOcC9PWHk5RnV3ZHhtb2t4c3Y5ZTkwNHZFeWtQUU1FT0R6T2J0a2tETGx3Y2ZiU0VlcXFmb1crbUZVSElhdG5STFVBSkQvc0NCSTN2ZithWXY1WGpsVWsvUG5qN0ZhY1FSNUNMZFlsc1loL1YyVjUwejBSV3d1SW9nakY4ekxVWk5EOUpRUThXSmtodXpQY005bWEvTUtiUzZvTll2WDBzU0ZIL0llYnN1a1MyaGVaSE14SGlDNkZ0UmlRUy9tYURVUkNMMGpMQjc5WXF4dm5NTGYzcHFIeXpVa3o0Sll6blhOb0w3ZjVRdkFvYjJVbVY3ZTlyMWFmNlgyMndMNmFINkJGT3ZOUFpIUWFBdWVVYzdSdDlWeEIyalcwakI5TmZQakdqR3owSEFCdklpc0t0cThNSllmQWNsSUJLTjVpeDFINGJibGR4NnFodC9Dc2hJdUlGWEZsWnRxZnMwOHduVWRkMzVZbHNoQ3ZUNktBcVRzWEpncEkwdVQ1azFkY0J4a0Z6TWlhbGJVWWFJU28yZzVEWTVPN2tkTUpkWXVQaXVtSzRpR2VsMUMxU0dxeFRtaVNIdGh5bjdJc0o1YVZOMjdZNE44SkRiN0NDVCtVQ0c2RW5iWmswVXh6aWhwaVZiV25KbU9mMnNMVGxIUTM5VWVyekhrKzFheDgyUXYwUUlOKzIza2JxSVdXWXY4SmpGRkprcndaT3IwWGhFWENUM3I2RnNDWUhVOTFwdVZIbkpCNFhBUXZPZlljdU4weXUzREpBODRJUDRqRFh2MnV6RjY3WVF1aHVFYUlvVlYrRWtCaHRHazVzZlZWN0pZNGdQWE8zSkY5c3JSMFdtVTdGMkxoTjQyVG5sRkRkVGNrR29YSlN4RXV2SEdKRkN5QmkzK1YxYWVBQmhQRS9Wbzc2VVpsZ2lhaUd5ampQSTcyM0xYWlc2QkU1NmcvcUFlZ3NESFM2RmlRQjdrdXRVM0FpNVlISElTV0I5QlBiUUUwYXNVZEd3QkJ0MDlXbS9KZEY2dnp6dTJwUlpPbXVIRGczYUZXQXR4TThUN1pLaWlpc1NSdlpSYlR4T0N4TmYwZTdHUEpRU2pQT0RtU3BzYmhSbE5IdjQzNEVHcUc0M1VGSWpabExVUi92TjIrbUk5RVF0K0NRaTgvQ2xBMnZrdzZjUzJPc3FxTlJ5ejB4OHJCOGdrY3ZuOTg4WGIzaENUVGZwSmI5bGFTVzJNby9JOHJTOWJaVTdOa2NZL1htaWkzcFUyb0xuUFdYWmhKa25CMzR0cWtSUS9QeFdTVzdXU21hQWVKN0o2VnBxbmxhdWpyUlZSemRLOXcyL1ZuZGo2M3huZlhFZWIyZ3Nwb3lHWVZaV2wzTTh2OUVCS2ZZUGRuY3BNTlUvd1BMc25yUzE1VWNlRGZ2TzU1bFI4NmNHVUQxZVRhSEZCSXhPYmlNeWU2dmtqd3NISXl6bVovZlBxNldwT2pZZk5Ec0VDeWFsMTk2dWxQUVM5RXMwSmw3b25LSDZRdm1maUhpWkNWZDl5b0xHa3JiODE5SnIzVEhzOUV5UDZhdTZYbXZlRm10SkgvUEwxM0hwNURkTlgwdFJ6aTNZTXJmVzJ2TUVRYnBhYm1WUVdvRkdBeUYxZWdGMFJrRitqNGtzdWNGL0dHQ0JNb2NVTm5ldVdNY1ViYytGWnM3Rm9OUXN4VzNYVDEyMUJoOURtMkNwdHBSU1lmWlF4WWN4MFJIREx2VEhiMWZCU2NVZE03TGJLU0ZUMkpiZVMzZGtPNlBnQ1B4MEJ4RG1EcXZmZTVNbTVjKzlqV2pZOXpSWS8xOW1OUkY2SmRDSFlKd2lNL2UwU1NoZCtQdDhYWVRqZXhRSGVrd1hzcXhKaENxdG9Fand4cWVLRFN0RHAvbjI3VThVeEErQkhZeGRFejE2bEloVXZCeHNYU0JDT0lLLzJqaVFOdHFQcjZTaW4yWitramh1OGo2aW9UaUNGOVdhaWVxMk9WUWM1cHlMRWovRUFCZDdrQWRJWFZzRVdybVhEeEJNOVZTaEYrZ2JiNGh0Nm1lVUJ5d2I3STRMQzNOSFQ0MXZKb1VKRElaSUxRMFdBTTJTaVJ5WDZId3NzZDc2U1V3c0dIMmgzbzdhMUhEWk4xdE1pb2NzTmRtYnVHK1NocUVLWkRYNGcxMzRicEpUYUlaY0l4c1FjQnlvbGdNc3k3TzcwWmZZQU1RQkpicGU2aEJJOHJFcjJLOXp0bm1SeDBVVUNCWmdKdmFVSXgzWFdJL0pNRWlWdXF2UUNlSU5EeFFtN1B5SVQzZzZ6SnJST3ljVWlzUjFxRXgyeVpFNktmNENOaWpRZHNHVis1VjZRclRVWTRLNlNIMmc5VDdqTTlYUW5qU1Z6VDRFdFB4M292N1UvZmg0allOend1VU5zTHBBRnBmMVZlT2lEUTlPQTM1VWh3T0JPdGFtVFpuZHAxWWZXaERzMmxoRk1NUmVXZGU3UFZrU2w4dk1vcnNQcDBOYTJhdEVielV1a0d4bUlVd0FGU0pVUTVFYy9na1pHUG9FQTByV2RMS1NRb0p3OXBneFowd1MrU3AxQ21wOUkzbzU5aWJ3Yzl5amJueGVJenFhV0REU0x4TU9UU2ltbThaR25vcUpiWk80U241ZzZJVEwrbVNidlE4NkxkMUZkZWVvZlhYa29tNlNGcEEycmd1WDdRQVlXNzdITU1WTWtGMGZ0L1hKRVdqNmk1NWw2MDBTNGpjOXdsZmlaTkFCU014NkhtbjdsSU5tZDBvNDhXUWNBcFkxRmNLU21tQ2FHZ3RxN0toRlpSYkJGN1MzVzNsQzRTcEF5blVqUFBnaFY1U0ZjUW9KTGk0NllMRnlud01RckpNVGNmNEVSWFEvMFVTalJ5ZDNQR3RmYzdGNFI1azM0dGxsMUlmM1BNeFA0Yy9zTXN5SVFHZkduWmtOTFJ3ZjBxQzdsV0t0SnpmNzFlWWJ5dHBSaUpaK1BVL1pEdG1ETlZQTy9qeEZEbDZXVm9ZMC9ad2I2NnMwQzF5RHBzODA3dGR4dnZYYnZuYmhxa3VBZkFOa0c4K2RmeHdBNitYV2VaSWZzODdIbHJkM0MycktJN05lRTErQWZldkRQVVhBMERJQjBuZktwWER5WkM3YThSUVNFcUxqZjhvQ3FQUzJpalhBVHEzaUI5OUNGanhVcCs1cUh0ZjJnTUdCanFiN2pLQ1hCT2VVY2N6TlIrUzBPdXVpU3NaYWowS1VUZ2dGdjdLZFRoRUxyWHRZZldGV2lwNTJ6Ly9GazU3dXUrOVRITDBKWmRReEx0alZpaXZESi9hYUIvNnZKZTV5Qzc0NUZoc2xJS0V5MEVBUjdHL2Q2N2F0bU5KWUlHRGVzSXZhNFhFellpazhBL2MyVGVFbTRwQTBsdUdPelpuTjFaL0pzU0x5SDZvYlZobkdjTmVtMUFUVlgwd0V6SytDektlcHlPZkNHcFdDV0FIWkRuRkh3MzZObUFnZGFwYncybTVscFR2MmQ4SWpPVDZYczVNZk5LK3pyajR5NG03TWk5ditiTVo0NUJIRFJubHNKaHRjUlZFVEZRbUhFRmhMdlhOTllhTWs0anZITGowUFNDWUNVTVZpWkEweUJMS2hnVEhxa3F3N2JOWi9DdHErWjlGMDBGbUlacjBmTk5pa1BiSURrZUNEYVRTL2JETXFLWVFnUG9uUWczQm9lSFpyNHNGamZTN1VHSUN0cXVhd3ArMTg0US8rNEJKWkJpTSttVFkwdkNlbFYrOXdrY1NJTnNCMUdDNmlXUWM2Wm5Ra0o4SWlIZDY3UDcvZGY0bVVmeXkvWnNyS1ZSNThlNjZGandmUFViVWRiWjFJaWVsUnhpZGRFYjFHazdhcXVMZEJLNzV0RTRJSzczaWZtbXRsc3RxUElKcmZtcnVvSk5mRndqS2dhOFRqd2liT1V3cjJIUk5uVlZ2S0dpb3Rldnhhc3JZU0QwSVM0NExzWThWK0JCckNYZDM2UkpwQzNGZkpEWjVPNE5Bd0k3U2NtQ0M0ejlJck0vZWN0RTBHdkRsK08vRW1OYU4yOWF1bVJZdXdZQVF3VlFPc1AzemNPMFFpVGFadFROUUJHdjRYQUNaREhMZFJibnZRb0RCdHpOVmhsdlBuSWZ3ek5UMGFXbmJ5Mi9uQ2d0ODZMeGMxR3VaUVZWa2pyWFFKdm4vV3lvTGdjd3hWeXRGNVovSWtjcnEwbXdzRUMvTGxINFpsTlBqVWpuaFMwL0xnNnZzRW4xbWg5azRENnRlN0lFVnY4eVJONWF4bSs3SlJLK1BGRDZrR1prWFdBcEhYN0tFb0t4cHlGOGY0czZxajhnT08raUhpcEExTU9aL2NYblk1VEJCYTYxL09rQXlXNTJYQXd4Tml3ODJub2twVWFGTDlEd241T2JBZW1SQzM5NWVmZlh6NVBjeGdySlVsL29rbE45ZlhIdEd6RFVMRVJta3NhZXNnWW9yazZCbkVpNHlCMW5GTXFGeDlBVnQ3dHhvbnVLNFN1NEVnYTJaZkEvOVZvY2JLL0JLTlJYRjAzdzlXaVpheFJtZ3pXbE5xSWhLNXh6QVcxWFdLdXpzUXVucDYvVitCUzZRQ3pJMjlGN3Y2SDdzWFJyVy9PK2dpcmlHUGdSK01OQldDZFNSVThuUFIzK1hFdjR3dENEVjBmVEdweHVIWjF0N2hKelNKSWdiblNQTzhXWmx6YzlsMXBpRnl2UlI1SFpMek5GOXdzWXRENDJucDF2SlNnakh3U3hTZy9VK1BxR21qSlh3cFM1Y2dGUE5PT253YTl2OUhxbU01V3RwUWphSnVVYkZ3dmVQSnB2WFRtQjIrMW81aWpPd0djLzhWSko5cjZyRVpoNHJzRkxpaGxNY04zOTZuTXphcEZib3padnUvektQK0VzMlVhcmNRVG1EbjNEM2FTS01HWGVXcTBkZU9OMUoxa1d0MWFXRis0R3VFbFduWHV4Y3NOOWI1QmhaWkV0ekVDakVWZ0ZMdm9Hc1hqUnNpTXNxNlBGZVJVY0Y4aWRTOHU5WWRaUnJMSnhLaWRUV21SUVk4NWgxZXNzdS9UYmVxTUQ3anpLL2tzTHNNS3JRRXRBeWthNVB4YlR3RllBb1o1RWRXZVdEN25tVUFveG92VFlweWRYYmZxUWJGM0ExdnRCYkkvelY1VU4vdHRtTjM4dlBIb3ZkdlEwYjl5NzJEWDRiS3VMMHN2TllPbXhraW1mcGdIeEJlRGV6bC84aFMvZEZkcVN1cUdNTGhEYVE5T29Ob3djdWVBVGd2Q0lBRjlRbkNTbWE0UVFEWkRiY2U5TGdMVE40ZW1USmlKOGtEQ3hxQjZrM3k5NHhvUGxmSlJ6SFNCWitVeFhkT3lkbUdZZGV6RytXZGkvUlBVdTJibEN2TUp6ZUs3WFJCcW9JbGVQTmcxeGFkTDJGSWlHSnp4anFJdmtKdGlFbVpwU2tPdWtPZkF2ZUM0WTZQQ0VacmFpSE1WL1RSZ1JsRGMycm5UenZtWEJabC9LZ0NBNFhYN2xBS3NVWVI4bVc4UzNScFB5V3RFSU1QRGZNWjlXU2dkZFA3RUFGME93YUdjZ2ZvSVJ1bEU0OHdKdlhSZkY0Y0dwUHhXcS9hQ25HdmxzeTAzMUpLQTdYb2IyMDNLMmFlVWlrbXFOZUo4QThOUjdhTEtnc2VkSENZQm5CUEFFR0IwQUN1TGtxKzdRUUNvNER0RkRlNVJBeVdoOUcyeW44eEZ5dzk1RXBDcDR6RmMvbStlYUE5QkU3OGVYbzB2UTlhZ0hSbjN0OE1iRmZCUVpXT1RNNWpJdmw2bUZIUHIydEQ3c0Q5OSttTjhoS2NKVGViTlF3eTYvYWRMcnRCREswV01aV2ZZdUp2SmFDOWRLNmRGdWVMV2pjTU1FTWYyV1o1OHZqRU5xRFNLc01wYWVnYWNSVGQ4dHNXc001T1hLUkZIR3NwWXdWTjlKaEpIOFV1bzkrODVGeEZDV01oVGdaTG9KaG8yU2ZZczhlQ3ovemNWRnBKNFNDdUlGZXh2NlBlT29MVjIrdHh6bjNYWDgyR3hzZmovODdMbU9iZmNZOVFKa0tXcisxS3dBZ3diTHMxTmVLNFk0eEVIb3BXS2wrT0VOUFB3czBpdWdwSmNSaHVjZ2pzV25WV2tYQUJhNWZxUHFtT0xMNi9sZVpVSHRNNmx6SGk1TnI2d01pU292S3pkS3l0cFNnWTVHdmFLeDR6UnpUMStqdnZ6SVBiZCtMVW84WUdDR0dHUGhqYXJFdkZONU9GK2taSHEvd2Q5MHl1Z3hOdmdMNFVDK29XdjhOQVRrZW9qem96czVMRHZFWWNuZlhlZ2JmVzNCRUt3NjJmUHhjcGVRZ1MrY3ZLMDdmQ3hDanh2a3VoRXB2SGVkZnFOZ3RpR1hnTFVhandhUmhvbkh2RDdMbDF0TVlqUUdPdGcwdzQ2blJHbVJhRE15bFNTRmdsQ2VZUytZTkV1ejNac0x2dlRNczVNdHNvaFJvNGlscE9GSkh2cTlkY2pYbXZ3c2RPek5ZUlJJVndJcUNVN1AwRnNyaVp0SzF2c1YySWRhSmpNNnRheDFkc0ZUenY1cG5HWk1WNnpLSTg1WVR3K1lYOGVMRWxFSnhRM0k5YVplTmxqdGc0dmpJcmFYOWdEa3RKTXVnY1dkZUl0RXQ3alNRMFl2YUswQVBGSGZvbVhhNWlJRUQvRFpUKzluMzR3RGhTS3J2eUhERFhiVmVLTkdVcEdUb1EyTk1qTmxnZ3BjcDExRWsxWXg2Qzk2MTdyODcvcEpadG5SZzBTTmZZeG9LZU1JWjQxa0pPakFxOXBvWEc5am5WdEJveGY5LzRYSkx0VVR2TEhQdnhHT3Zwc0dkdVZuMEFNQWdVMXg2aTlmWHN1em9CWjRleEozcFd3MktmWU4zcVpqYk80M1ljN1RnN1Nvalh1TWJrYjRabkJIdFZVNjU5YnZDdFVqZ0xPRkFZbWtHTExidnVBZzBJNWo1ZjdyRU1odnZ4cWpkRkhZeUtwdHk5djFyeXpIbklLRjVsUmJsTTRkNjA5RTNNUWJ5Q2tiK2ZiWkxvN3pxYU5lWVBGWW9PT3N1dGhvaEJETEFwRUI5ZmJhZGQxNWgrK0hER2c3aVE5RlFFMGlmRlYxZVNQNUV6TUpVTWlzdndnR3ZMOTVuZUdiTDdxWDd3Uk94VzVtM3djSzNwdE5OZGZHZmpUTHpUN21JQ3RYcHFBMjF5eTAwcm10Yjh3blgvUWhTYk1BeEEra3VqOTFveHNpdU5rV0l1OFJscHk0bDZCSjFYVGlSdndHdms4aUZpRHIxd1l4MDVTQTlES3MzeXB3OXprYi9jOURVUnFvcGN1dTZUMmNTYTVqbEcxQW9iNFQwMi9XQm5uYWRML0JVc2hOTWNBZHhxNGhiWktRRXNEaDV0a3hURldUWkZKYnpYazVkZi85U05lOWsvVkhPQWFEM2E1UmFqcjJ4bkpHUmtoZnBEZW1pRnZ5SDJmRHJPT3J6eUU3T3YzUTZobTRJS3VKcHdVckxuMVF3cWQ3Q0FSdk1ySnA5QldMZHZhSGYvVkN5OTZxUlNhUTkxL3dUQ1ZzNkR5bFpJUXN1NkI0U2RwbGMyTjVUc3NxRGtGa1hONVFkUWZiZTN6R1Z1MnR1Q0h1T1FXeHhhMVpxNTNnWWI5VDJ0ck8zdWFuZEhmUE5oYlN0VlVjUlRwQnNTcXpnTGRrdjJEZUVyTjhBQzRiK1VDSkJmQVB0Sk5GV2M1YXNQMVk3NVZjVXBqcTZoMVlFc0ZhSHZZZGFoQ2Vnd1VYS05VR1NUUmRPb2NhRVhwdDA0b2xJZnRYVG0rYjFsRHU3SENrOWU1clhqVHY0LzA1MWJ5V3NISkxoOE9NcWxoL0QyZzVxUWxLemJIc0wrRmJhUElsczVlLzJLb2pFY1lNb1pDKzA1eHN0cUtjd0hLYlRQOWN4NjJHZTN1VURaT3o2Q0tUYmM0RWJqVU10bkRCUnIvUXVIM3pyb3JWWUdVckN3WnhsMnlDdFE1enpTOEpROTNZUkZCT0FpOXZTaHJpVGJQODlRUS9jRUd2QmtGL1h3ZkNuNitDNnRnRzdWTzJIQmphaDZaVEJaTSs1L2RuUTk1QUZ2NEs2cHN5OVFwMFgwQkF1amkvNjV4bGdWWEZ4QVFxUlNaNjdONlBBVmdpdUJDU2RxamlwVnpRaTVVcmUyZnpEcklMQlYvNDhFOTYvaFNZOWp2UVQxdmxZY0ZvUkQxTUJSRmJJRm55M1M2S3Fic3kyVFZTb29jMEZtT1lOSkU5SzEzNmwxdUYzQnhoamFJOS9paUF0NFdEMWlFZHhDa1Z6cEdlYVp0UmNLNFhmcEdCYldhNkNKRHYxVWp1TmhUTy9TWTlSd25FTTVaK0JyZy8xeVRaOHpMN09Oc1dheGEvbUVpVC9VbkVlNmloQmpBVEZFYmY3Qzl3SjhnSjZSb3F2ektnTFA3MHIyd1FDdUE3cGo4NnhpNTYxTitNekJxN0ZmeDdpUWhHcmJnTXdrbzVROTdCOGl4eVJkbnBiYmY4NW5JWkZTM3dQRzFBU1pPYlhFcmJwWC9uRVNmNjZwZGRhdFhmU0RqMjRCSm8xRmNSazcySjlEK0lnK0dsemNkcEozSytmVkxLUnZLaUgyZnA5ZG5ZU3laQUN3U3RtUzhXNXJJWnptWlJUb29nZkYydUtjbzgyS1pZTjZFUVB0QkY3OXZGR01NT3FOSEhUSjNqSVBEeUpLM2VqVDRXcnF3Y1FoZjVxTEFlanh5cFJNdU96emcrUi8zVWpaTUxsWU5idUZwQW9DWFVvdUJOVlA0bm1RVlpTUkJzN0JyTXNLTXp0cWFaYUVNM1dVSTE5MjRqMG1NN0tzaWNaaVBMVzBmazF4cTFlU0sxbHF3RHpGN3RtT2V1K2VrTVFwTFhiWXlpc29JdHpLSXBybG0zTy94N0JTL01xQXRDZnV4cWJpVlQ5aXdUTFcxUlE4SGFiWFgrTkoraWp5T21pb1Rqb09JbExZZ2U2MFhPM21KNVRibTFTdGRRdFN3Qk1rclpJOHFGeERZRXRGSlAzR05SeDZlK0haOFI4d3QzYm0xYUlIR0xOanFzamtKemZyOW9ObktkWnZxdkRaTWRaZEQwR1dSM2NOeE1oM0pBNzdnQWQ1Vmw5NmhlbXFiTHBiSHNlM1RRenZuOVZRUHdsYldDZGxKdTJacFZxSFl3QTY2TjlEZE1KelBGbE1TdTFQVmxTRVpTT0VST0hRcmgrZWo2U2pCeGpDbW1oL2lEbjdjSFMwekNJK0NDUlhnWURIMkEreHJvNXFWQVZyMW1iRWM1S2d0ci9VcHBXSDVsM0R4cm5NbEhsc2l6SUtZcmg3eWZsL3BZWGU0dCtGQUpLMHNSNzNHUEdseHRNaDRpTUFnTHBFcFVmeDNtZFNVQjRqNjJlTDVUV0E3VUhkOStUck5tQWxNTGI4ZE4wSjN6ZmU4NDY2S0psc05veFBsdDg3MlBRU1hQM1phQUtDcHNpZzRYRXNJdHRkMStrNEY1RW44ZTZBUnVVVU1DUmFFY3pNOThVNmRGeWVvQmZFWnBOY0VTOEJrQ0l6b3FNRDdwL1lpcGFkdXJGaEcxNEh4eG1VbE1rOFJrUlB1TkVwWitMMjZTK1hRd2ZBNEoyVTBweXN3M3htOG5IZDJ4L25JZUNMNTFwakplVDltNUFnMTlESytpOTZXTy9LbXNxMnh1WWV0K01RSmRuN1ZRUm11Qjl4T0Uvcll3Rkp1V3RUUkVnYmJjdnlXVXBXNlo1UlNxZC9PR1o3V1IrbUkyVTV4SlZlSDJKYk84RU9iTnB0UkYyNHRqWVV3eVBpck41OHVQZWZZa2ZUN2ZJWStIZko0anRGNE9Ec2hmTEwxelM2elBSUHdoZzZrNFNLQy9VbmdINXVjWXpjTE8waDNpUlFJNzJjRGRsd0dNckZ3QjhUTk55akpERkVtbmw5WFJkbnVXT2kwYTc1b2dRSUlGN1hleDN0U0tUZWNtR2owVERNaGpXQkJIOUdPazh6UzZ6K3JCUlFRMVh1NlJ6SW5heWdmckI5TlEzd01FdUNsVWFpTi9ralFraVJEeGducEN6a1hpdHVFL2lXVVR5QmJEdUhTdm5JSElybG8wT2NFVVB4UWtON05HMWY3dGFZMEJ0bnpTNy9DaXIzd0ZQUkNPR0NiMzg2bWlqcGsxcG4wRzk5b0N0eFAxUGpsa2RTNnh4NDhJWVRQSm84OXppV2k0VTQxU3lUQlNDTTc3L2RRd0NwdDAwaEVQOFQ1Nmw3aURjK3QzRWRSMndUUFpUdmRCWEpJeXJwbDVCNW0xcm5qRktEeTFQaTdIcEczTndueGRhcWhISlpyK0NweTJlM0tERVJ1ci9lQ0dQdkFYSHZ5QW83Tyt5OHlsYTRZeklleWNaUG9HWG9TeGdQNkZ3dWtGN1NacmUxYlM1VjdnOEt1aWNwRTNzSWZhZ2JZSi9CcmxQMStkNEJJdlZ6N2QxdmErOWRhU1BFY2VvTWpUT01Da09Xd0NISURYUlpXL1dkOEV3cGR6cTk1cG5KaGR6MFpoWnlGcmlaU0VzVUxKUFduV3hQM2NlaGk2RDFnQ1R6RkpvdlBpRHBsbVZ6L2Rna2lEVmlXV1k0WHovRnFLdGNnQ3BtTnp5bStweHRzTWcrSUNvTm9UMjFjWVR2YXROZ2VmZkMvMGhPY1l1SWFyMzRZYUZ5V2lJTG1PSGFIVDNwcHpjTVhHcEp6Y1JNQzkySmZHcHJoSmgxbGM4dXRUNjkrYmtYRDFtc0Z3VDdtRmQvUSsyZ2ZpZldTbGNXTkxlbyt3eVN1cFV4dDZpNHIyTlNEWVdHWDNxVnQ3eStJRXRQWExiblZjTXBhdUZGMW9YTXZ2Qmg1S1NHUUdab3Z0QmRzUGNab3VnZm5VOFBWdi9QSUcwUnRscXZ2TXZQYm9PcXBEZlJZUGZLTjh1S3VOek5UUERkZmdwbVhsaW1NTEpkcUtERDVrOWF1Z2VxUGlld2QxTG40dlE1VmIvWXNsQ2VvSmp5M2VCT2tNSDRHcEhVc2dmTElZTjIycUM1VVlRNjhtanIyK1RBam5FamFUbzhYaTBYMnJnTHlEUFhKNkYrUHhxWDRnUDVUaDYrS1NSa1RqdDNpaUVXUm81YVBocm1EcWJHUis5Z1M4Z3RubHVVeUZZczBZeTUrYmUvbCtoQTZOWm5sY3djWWFDeWxXY21LMTBmQ3lzNEVlN2Z6M3lIelVQYzNzUm1MNVc4MzRTdnI2dUU4aDZZWkljZE5DQTdiY3N3YndFcmpib09abzRoZXByQjkvZ3p1bXZrMTJacVd5VGE4Y05IZVlodVdXNUdSNVFqM25DbFAxMEJNeTFOV214RUhOOC9JTUVOMkhBeHVHOThiOHFmbTNabnBsL0JuZUlaeDdYYUxPTndwMmF3TTNtUUNPdXlQZVArZEdmUWZvcGZmazkvTlZHQ0F2NXBJU3pXZ0hpYVRyNEduVXVTTmR6Y1d5SCtOUE5DYlI0dkcwRDVHNDZxSzhPWEc1dGZiUFVmcElHS0sxRksxK3ZiOXlHWkRmRUl6azNLVlpOWVJPaWEvb0JMT05RREsyNC8wVGZlMHU0dy9sMGw1V2lpTlVyUGxpL2U3SmYwQXhKUjJNQk1YckZNcDg1bnEzRUFnRlo1MzlCWEdVTGtMYTFRc3RjRDc4YnBsQ1NkQm1SeXJEL1N4UVZKTUpxMGJvRjVSbUVCck1GN0RHUmNiTzhacDlMbDNSQmlIeTg4S0VnVDkvdDAyM1c5TzBMNk5NMXBNeFd3VVN3MnN2ZGdjbVUrQW10R1B4S3ZkVnRjeDFHMlIwS2JVaHprbGNIZnZTSXZia1ltcTlYZFFWMVdOT2ZDRVU1Vmx1N0gvTjFxREo4SXRhL3NOSlgvcFNUenhvSWtMMHdIV3VmYUIxZFRUbnNCalFva0JjVlUyT3MwU3NnbW9GVnlJZUlxckpYVWxYL0d0UWIxdHBNVVE5ajVobmJVS0Q4bThCQ2M4akREcS9VM1hpSTk5VFkxMWxFYXErUjJwMit0OFVDRTZTZktkWUZhbjhvd3RndlJzOWtjRkdIbXJXVi9Xd3RxaEQxY3lxTW1DS2hTNmZtT3VCbkNFeS9ZRkI5RUVFcDZuZmpuM3Z3OXNPVTREUEJsRUNSWlNWZkFqV0lUK04wQmNpZ29renNKc21DdVB0MExZUFVwWWRmV3dJcENoU2ZvbFZEYm0yTDVRa1cyMmYxRFYwMklvT3R6cHViTFpHLzBPT0xENmxJT2pwWG1qLzZpV0xTeDFQeWdCNUNFS285aSsvU0lia2F6VGhOeDZaNWQ1b2d2UTFjUlZPZFlIMmI4RXRJM2R2WXpXSEdyM0Zpb3FjdE4rUTVUWkZicDh2TnN4eko1UURUeDVzUXFOMVlOOW9XUjlYV3VXUTRXMk9XaFI0UEtjblVuZkM2NXZtY3h5SmdMRXRXYjZrUXhOK0xYZTZ2SXBxdUVLVVpJR1ZRdVRuSk8ycWxNaXFoZXliN2RZNDduTlBUVzFRUTBTTGVwRnZGN0g4ZlBsSzhYQ21DVFdlQk01ZUREbi9MMXZwVVNhbWRFLzhVRVVhV2lzdHZYZExxSXR3Y3QrS09YY2NyWkZUL0hYZExNWnJBN1gyMmRmOXk3czB3QlpORnBOcEVabEh0VUxnUUV1b05reTh4YkNLT0Y5Z0lSdTRVbGw5RlVmRDduc3lTT2RxYUpQT1U2VGN6SVpTT0NlOHpWSjVwbldGbWk5MVp1b2k3VmRzZXFoOXVaNjZ6b0xuNmdCVUgrYTRXS0dHaVZYZ25CUVRwUHhiWjB1WElxTWtGS2lkTERqcktZMm1HL0NXV1hrT21BUDQ5dWcrYnd4OUtBdjhsTi83NzRUUmlYMWZDUFpzcXZPUVhuaDNxMVFnWmhIbVNBN3AzanpNU2d6ZnhkZDFKTURFRlJyZVh0V1AxeEYvUCtObXl5Tm1oc1hsSE5TMVBWV3RuZzhLam1TazNiWG5yZGthR0tqa3FUMUVSL2FBb05IWjlQb2RxSE5yem5jdkVOK2s0MGtOWnY4WTVjRmo0Q3ArK2NVYzdLQTRYbTZGWmp2RlBTemJDVlNlcDU2M3pwOG9iQ3Y2cklscnp2eEZVNWFXbVZKaER6RnBXUlM1aURoSUhVa1oxL3dRM2JrSnVDR2kzZkF3UHh6UnBXS3dQd2ZneW93VTJyaGFXRE9sSmF2SHZkT0pibUw3L05UbXo2blpzN0tOalNJR1dEQUI5TXUwTExpblYxYmJWRlhBQnJxQmtreU10TVZ3SDRKZHhDdU9lT2ZFL2pZc1RPRzRaRktZNFl4SmdnNjlaeTMzNzNxTm1kQzRORm9PQlJ2OXRMREtKUlZaMFVQNElGb3FaeUxrZ2FaOElUNWk2dzVuSXdVMXJGdmNTaEhlWktLTk9Cc3JIbW1ad0lTUktXV1FzWXFMVytmdkRZVEFEQ0I3N0gvb001a0h0ZVlUTzE4cnY1c21pSkZPZnAyUWhubG9LOXV5RVpuem9TZ0JZZjRNRXRUK1h6VmkwWU9uZ2ovYSt0VzdDU1c4TUhBVCtrTmRxRVJOK1JiWFNENkk2SzI4K1l2TWRmZUJFVFFuMmJwaEZrL0NrMDZUd1QrQ0l2ZjhRa2poTEZaZkZESG1GOTE5U2d2VHdONnhzdDlEUDBMTk9WZFE1VzJLcUxNb296MUNjU0c5d2xVdUoxcWJUTkhZRmtHTGVYQkRQZUIzanNhS2NDMW12Z1RqamcyTTNZNUlObkwrUzMvZE1QSXVmeGhScUVMRTZpVENYZ2xKTVpUdnpaYy96cVpwenZnU3JGUWcvR1Bka1V4c3dpeGk1OTc3bjRyK3dZWlBPeGVDSEI5VENnalk4SkxUbXBXaEx4ZHRmcFdCYTVLOWRTejZjOTJNVVRod0QvQTNpVjd4VW5xTDBlaWF3eEExVzdIZVJGWngzUzZ0V3MyZnFoUEgrdmFEanJzZ285c2Z5WGhLZnpsdmlBb1BoK1lqWFpTbTJKZU0rTUFJVS9VdGcwSitMZHhoZnhTZ2tvSjNKUEI5d2RlN3k3K2hKY2xnN2hKNjVLOVVhdzRPcEVET3lWWkF5OUdXVm1ITi9qVVh1K2ZRU3hhdVpVOGQrN2Zxd0RhTlFHNzZiZzNhVEdVTGI1Nnd6QTIzUllvYjZoNlRGYU5aK0JtVEFtK1RjWk9BMVNVNEgzU1dvMkcwbk10SGtGaXZWYStxdThVUU9FV1o4RDdHQ0t5emNZTG9ueUpTYk5BbWRrK0REN0RXTURYNzA4WE8zQlhsM2Y4R084aVhxd29Mci9Da01MMml1MFpVZUhzQ2hOSWZJUndYRlluRlRGSzU0Z3NZWC9kR2lIbzRsTHVNeGVDdTNZTkdvOFdpYUhOV3l2aFZjaVdvanVxYVowNmg2M1Foam13c3lkZmhFRGxkdWtKOFZnYXA3VmVVdjJBSVI3NjlseVFVQ2hkMnZ3WElreTYvTDArTU5GQWdydml2QlV6TWYyUE9pU01mdHV4TG93dndPLzFBcFo0bGx6c0s5dzRqMmRDWUZWRmkxVzFKMHBUYUJHNDdLK0lGTUZ5TTkremd1dVhHK0JBempVRFBsV29NejlDYTF0blY5RjFRVjVhd1B5ZEluSEdZNDdSbEFzSDlZT1haeEl5Mk5qdUFmZnI4Y2RHWFlkNGFJVFJqSXpSMEFxRjB3TUVxYmNSMDg5bXExSGVMYVhyT3ROREJkYlFFZ3FXTnpoV3JSNkxzRW1UTXlJN3orbkMyTFFFV3l0NzhTbVRsZ1A2VjFEOGYzbUJxcHJOYis0d004S01RV2U1aDV2NnJxS2JFai8wN21nZkhWNnI4NnpoOUYrRmE0aXZ2QllvdFY0STVsZktNTzgwQlJUN2dCb3FRbEU0T3RYOG54dXNyQlUxcGFDZms3SEowc2xlZ2V1UmtoNW0xckduL2FvSmlVelNKU3lzcjY3MFNJUWY0VWdKdEl6L0JOK0pkVWdYODExcTVtTUdRUlM3Wk45M1V4c0dEMUZ4bXJDSFNNYW11bUh6WGROVmViNzh2RU5UazhQN3dSZjV5Q0ZZclNRQ0NVQWZnNGJGMWFIWGJLeWFPdHZ2VDFLdmNBYUtHM0pzVjM4dEFMelYyRlRWOTRFS0c5YmcwU1Z1bGFvcHhFWmxKamN2VjdqK0U0YUxFSUtacVJRMG1CNGs0SVU2b2NhbDd1VVJnMi9oWDRpY2J5U3lVNjU1RUtjdmFubHN5Q3hCSVc0NWczZ2FFaUsxL21wSjdnb0gycC9nUFpMQUlVSVlQMGk0Ym5Rb2h6bUQ5a2VKK04zSExqblU5WDMzQ2d4ZnRhVmtRVjFXNVZHTEtOSVQvUk5rUXlwb0FOUFJvN1NnWjBDdkJraDA5S295MzNxVm1yV0UrWEFHSGtrYzZVNzdnL085bEhKZjJpZ2pjYjVjb3pyYVgvUlMwTlNwaHhWWFh0M0dJdmpvNjhaQmZlYWVuNjFHMDA4Yk9xY1cvZFJKZ0c5S01hMzcwS2JhenA3SDYwTHloMGorVWllVitHbklwQkVPcEJqVVhucDNsK1kvOWN5U3JLYVpOckdtTVR4dVZCSDh5T1ZSZCtXSnFJTWNFWjVXckEvYVB0SFFQaVppanFqWFNMQXF4Y3JDZTFDcFZoZVZGZWdKeGVBK29Yek1iN0IxdHJwS2RDVHpZNTZxNVlIeGRpcWQyVHZqbWZEYzV1dkhtK2gyK1JqeC9lNzhuVEV4YmY4RHhwRGFhMElwQWJmRnlnTjZhSDVvaDZxQ2R4MWpMRWsybEF0WnF4d3dyRk9lUG1La2ZTWGNUdnJyMjhKKys3bkRFd1drVUljTkUzYVVaRHNWbW1Cb1JlYis0WEprcVdFR1NmMThJSDJob1BVazJ5WnA1RUUrUXltV2drTEpBaXJZRlgyTmwrcjd4NEVXMytOTmpybFI5RVlqbEk0d0RTMlA1OXBuZDA4eFdlczBoZlc0NndMN28wdXMxQzlrZ3VqMFM4SklWenoydVlIRnV1cnFaRnd2ZG40dndJanVXUG9YNGMyWHZlRG5qWFp6VkxSZmpGb0xSZjRSYlJEcXRON01yOE1hSUxBOCt0QVZ4UHl2SXVpMnZ4eVJ4UWZXSUprQmhMZWdiWUxtS1IwcUV4dDdVcUVJcldxN0c2Kzk3L0FoYWpHeEdlejlGSkVtSkdJeG5UQTZkcmZkMkg3RHZ1cmg5bWdGdHRXYWN1VW5MWHhGVkhOdVpaMHRoaHV0NDcyRU9hSzFFUm5RYjV3ZUdvNjA1MksrQVJzbkRYOVNUVzRyOWtuY0dlbUxIQ01DNjlPYStsY1JLTm0vMUJhWXFaWFVzaDJTM011dzFMeXlYdU1PVGpnd3hmMHQ5UVM2TEFlRXJJaEpEN2pidXIyeU94Q1NYME9NOHpxOEgvVThEWS9LekhMd3ZxREZMYlBicUNoLzlJd0hJRnlOVk0rRDNnc0p0M1JNbnZleHkrWGp6Y2YyNDc2Mlp1MnJqZnczaE0rRys0ZEdWNVhwbmlpM25iWkZkUTJvUXBIQXpoN0lBOGM2VmF5MXZWY09IOTh1MzV4TlNDRGRoT3JFNFNwS05iOXAwK2NDY0FTaDMxNGtPeFNDQ2FrdHB1SlhETk5Sems1VGZtK1pUeU9yN2lpc2h4c0Q3eVdaRFl5ZTQwRjdsNWV1SU5kY0NhOTRFWnBkVU1jbDBrNlozay9VKzlQOTh4S2VRTVRPeVVVUHZKZjRpcy9WMVE0NDhkZ0tWbTJuM0NJVlF2L2ZYbzBUcUVtTmk4akRtRTdxZ0ZoMzdPaUtLMFpBTFBZaXZNVnJucThLNlVtZGdhb3MrSVJHS1ByMk9Gby84clkvOS8xTVRxdXAzTkF0V2Z2Z1k5S2RZSXlrbXVLTXVUL3RqVFZsVnZERWM2bC9vN2Z1a0VMNVFsOUFmRlBsb2YwWk5oRXBTcUZEZGs1akszRGZnUGpnQXlMVFNvR0lNMm5uajVpb0M2RXV3OXNvSU9iNkVrcTd1ZW51a2dpclFiZ3hZcU1XKzB4L2Rnc1cxamNLQUJvaTRzV2VlbUhOc0ZMcFdvZENTKzJqbE5jbWJTV3pXUzJsK1JhU2RJdS90VmhOenV2R3JzS0RROVRUTzRTSXkveXRjYzhYb25UUk9ZMnNHdzV1Wmp2eitZN0lKL1NoRk9ZVTBYd1MxR2NSMlQrQm9zc3MwN2NUd1ZDUjJLOTNkbVVnTlIybm13NkFNaG1Kc2Q3ZDFaelZmeEsxUEZwamVSTW9sTjdLSC9HaEtHajVpVW54aEREenVuSjlZblovYW9QK2ZBNDR4WWRPYTlzeVZSMGRGQ1IrZ2pFcXBRbDg5c3U4WFJtcS9DYnZaMk5HbzROYUp0U015dnFQY1lQdVNjc0RIZU9nOTZZRGFOMUpqSGtkK0prR1dUamR0WWE2azlYMjdLV1BZWDNnSEJaVFkzWWU5RWFNRWlna1lLZTZ6K2lMSlpOdXNWWlA5VVNBVWpac3JJNDhDUkhjUCs1UUcxZVNzSmowYWtFMnpZMFRkRHJ6MGFxSnZDeGRuTExQUWNUdkJVaU02eXdzMW9GRld0OU9ucjQ5ZDRBZFJpdlJGYnAwVGhIdURzTUlVV0pkQkczTEZpTjFXWE1kQVp0dmluRjNraC8zd1F4TWk3TEtDblVhNjNaM2cxWVRRWTluY0JLRFIyTGxodVNBQWxORHF5d2tQRmZ4OEtTM1Rmem1Tc1VkR0h3T1B6dktRWXp1Qlk4SEdBd2NWNEdLaEVqNWFYS0tTZ0pjZ21WRU1KM1pUbmthbkNXN3VpR2lpd0wrZklEZkpKZEZBYWM5TTJ1Qlk3WnJjbjJkK2k1ZHN3YkZlRFhFN0hOMHQ3TUxLNXNBOG5UNzZHUkZIbnpaY2MxWDlnVGNWdExyUEtlRC82Vk8xbVdhNGhjQ3o1OEMyV2lNQ09zU3pSSlN6S2FJaVVCdmlubG00dXZ4ejNwUmpnUElkNC8yVzQrZ2NuNWtJRC9mYnVETFQ0WG9XTDFXck55bTZjcS94ZjZ0TG41d3poR2xzTGp2UHpieDh5WmJlOW0vM2o2UHB0cDNLbGhoZVNVaEVhNzdRejlCT00ydGovZzJaNktqVSsrWm44WW9WcXNwVnVxcmgvbEx0NmdoSkpZMHI4dkZwbTVzb09uL29vS0pLU1pWcS81ZE9nNGhQSkttSnpiTThNOHhRbENGWVBSTldYdENiVVR5TzBHVmxONkFLQk9FaFVuS1ByempVMU9PbUtxVFpaNXgzTnNoRFI2YkhFNFpSck9ITkkzWDhYOGtOWndVSFR0bnkzMU92dkp5U2pCZ0Q2SXVBdThiejdEcWUyTG5ub1lBMC96dG0za29Wd0ZFZEZ6V0VOMEtSSE1yTkt4SWMweXNRNGgxRDVreTNPSFlCbE5rYWltMHFjbTh4UTdOZE8vdThEK2FSK01aenFyQVhnTUZ1WHJzZTBPSkNnZFJFSTIwY3gwbzZPUXA1WDJsM2pZZG5ybnlYbFQyWkJMR2lCVnB2b0pQMzFkNEhsMXN1NDB3L3R6a0tyZ1RsYXRPcXdXaVA2Wm0wRzgvQnRKWG44WFMvSUs2TUdtQnBhSzdRREpqNG41emlyMFU5aW1lTXNvNi9ZVjk4MldGaHY2a3JGQmpiMzFjR1pSZWRQVUJ0TVZqREdwQ3NveGFEcjZXeGtKcWJCY1BpL0dWTnhPVEhRV3BiNm5VWHR5UzA2emhtZmFDQXc2NUIrNjVlL2lkd0ltWkZJWkYzV0tQRjdzQ240dXoyL0NWVzNHZnVjZWtCVHFWVEJoUmVDSldaMG5SNzNJTkJCZjRsRmFFVEpVYkZFTkVtOS8zUFJESTNLc3E5dks0bk0rMm1HcHUxUk5nWTEzamFhQzJvU2J2SEhJSnN4ekFxcUdBR0dGT21IVUEwTjNaVWJjcCttTUJrZTZqRFZ4NzhDb3dPMngzR2kwWUM2YzdZVVhPYzBwNEhreG1WanBOSmhqUVcvVkpwZElPMjdVYVJkeTZKZG5hRklTT1QyRll4NVYzc3FGaU5YRENQUXRvNGhSV1UrQmVIenVHZVVYd29qZVRCa0lycTMwVHVjcXl4bE15TXhwZlBuYnhNL2IyUnVTK2dxdHMyOXJHWjdCV0FUNGV4bzJza3FKVGlZTEpVckdnVmtoU2JMaXRIK25HVmVwMU1kRlFlNzg2a296andFSTlENTZhUFUyZHJtcnB1d2tWRHhFbm9OL2JZWXA2ejRUeTlJT2VpNEFHSDg0YmIzNXJ3TEtmaWRQQ0kvUTM3aWxabXQwRHI0QkdzTlJiTmRDWDdSU1hEYTdkU0o5UFB0NmZyNFJWaGh5SzJQTU9wbEZtanVzd2lUMWJmMm5ieGFQUU5FTkk2dmVXMW5nNGZKZ3QwcElSc05PUGNQZ0dkQTBML2x4TTRqQldYWTBkc0p2WUdYd0thdDNmOGhraHIzM3NWM0M4dEVxUnVnY0ZrZ1NiR1ZrRlJhWjhIb3p0VUpNNWFqVzk4cHIwU21Eb1ZMTWs0MXhYOUhvbWQ2UGZaTnZhRzBpTE9JYVlrdVJpS2ZSbnFxaUpITllyd2ttUk9IZENnTll3STBXcURQRVl3Tmo5YndRTXhQREpUM21ZQ3o0Nm5FbmNOQ2d1T1JlSWMvWkJLekNKT1h5Y0t6c1c1S3VHbnZnZ2NzcG9jREdLRHRKQTZVYVhHaFZxUnN4Z3NadnRZRlA2bUtiVStTcExaQnN1eWtEVEVYNVNqclBOeGdKN0JUNUVkTUNyWFBqYllEa1ZteE95cWtNSEl5TkJGY1BSYXVjZGV4VDR2QWp0bHpscGlZdmJacmQxMHhlRkVoU0UrQlJOeXN4WFB5Z2wvMkViUjdSaEtxT0N0UWxxQVd3dEJGeml6d2xRdmM3bkgzVjZKdld4NnpDaDB0M0lBeW14R3lXdVovZ3lFeVRxWjVmVE9KRjZVZWtjYnI3SWJseVVYSkhEbFJmT3F1c3haWVgvSzViM0FLRmFBUGRaQ0dJSFBSZGd4TURYMGEzUmt3Z1B1VHFzZFlKOWd4U1E5aVJqSlE4UkFwVnJRSGRFUW9KUWtCYitJUlZ0MVhXRDV6bjlwOG5xc1dVd0RLZ1JIVXJyS2g3MHBVU1M2S0FDNnF5VHRIVEV0aVZwY2dmNU40ZFZnWXZzbDlhWkVVUURjcmNSV0V0bGgzaFI3YXhTM1prd1p5eUl1MWpQNHc4YktzdHdJM3ZuNkI5N0dTOUxHa1M2UWJXdkNRZkhYVFpxZWRhY0VTN1p1S05Va1BxekFRYnA0dzlzSzBTS21vYnQ4S1hFSGJHVVJ5Z3VzajF2eXYyZDFWTk1aWlNhemEyWUhyNi9wdSthclYwSG5pU3FObVRJb1hFd1RSajErclBCUjRVYUZDcVVWUFVHNmdESERsVVY4YWRmbVVVSGdoVE8vOXlnUTE2R3BKZ05ZSWd6UDI1WGJ5UFpLc09KQ2VvRGEwbU1tcjVIVW1kZERnMVJONENzb0hsQTJUby94emRmSXF6eE5obXg5Q1NQNk0veGdiMHJWUTRjSHJZbmFiSFdiWVpNcEF0NDhmN2JubUNnTDBXQmhjOElCRFlHZ3ZUVVM2d1FMYmhSOUY1cStsU3ZZZkQyY2ViMjZZS09HbUtTWTgxOTNNa1AzYTFuT2NqcityZTNBQ1MxekMydzYxNXNUT0Z5ZWhQMDQ0alVBMEt6Y1EwTmZkVTNraFhELzVHQkdyU1NsRmRpcjNteVFBbU1SSnY0V0dUWG1vMWpSbVdTWk9hNUNyRzl5Ynk1Mnptc2czOGJNczhCREx6cE8vOVhIWlh6akpQbFNTYTdlYk95TVZqMDhpK1FzTU5TZ1p3SmtnSGdJQ0VTTmJpRjlTeUdWZ2FCbEIvYlhseXZUSStJVjgxcUVUdDdCQWdPcHA3TFRXRkN3UkVZdlJDS2V5N0NGalMwMjRiRmU4WHp0QnBVMVNXSWVXN3FOa2dDNEZCdHB3ZG1iaE5kVVlMZlpVRy9TWUI5LzBnYTZjTkdTMGJoV3IwWDhOWDdqZTJwK0ZhYmhScVpVQkZnVnY1anI1Sk1WQ202bjhnajY2anVUcXBHcUtGdnFudnhpQ0JOdG1vbVMveUJDOGFUMTJFWW83bjF3cmdvalNnYXlKY1M4eS90MU52dm5BYUtOTXdaZFk1ZUJuc29JRU4xN21JTVJsZXo3YWIzTHdtV3RObmJrbmVPc0E0V3AyMmpHdUF6eFB5dzdSVmd0b0NBQTlDekdNaGNISFRDUXBEa3NjaEthVHRjeWcyUTJoT2VvYmEvODRNTFNnRldIYldHc0MvT202RFRQWTNBRHpiOElJM0xZN3FVYk9Hc0kwaktML2lIckswVzVoN1FzMCtuYnNFbmVXUWorSHVPTEZqSHF1YjJxSG1hMHJoNGU2SWwwZCtCNGNvV1dTNkIzbEpzOFArVVBRWFNrRHVXS3labGw5eEFlODhTY3lwS0FwaVUyRFpWT2VhLzhUd2l1NFNYZmxDOXJVL20wN21mUy95MTN2dzBxQzVUTVpKMzFmTDhWQnBkWUczU0JXR0VBUUNUVGhORkRnTEhSaFNsbzFVWnNSU0VjSG1IU2U3MmZkei8xaGs0UTNISGwwcWppK3FGWGFBLzdTR2w5OHhpbnhQcG5RT2JldUViU3VycjlRczdISU9lL0hiWWhrMGMraE9Cc3cxVk1RMTRzclJnRzVETTRRbWtJS1g2enRhbnlYbEp4aUs2SnJwdWI0d0JwUEZBdDFxWE1UanF5aE5wZjVVK05ocy83K0FUeGhvbTNrWjlxa2JRZzUzMnZ4MmRUUW9sMlZMbTcyL3ZuSC9vRTZLdlZWcWttcjRSYVZkVCtndERsVXdILzNoRkI4dGxzem02RG1Oa1ZsNE1aa3lJZXhZandxbk5wMVQ3WTJpdGUralBXWkJuN1lmaFowT3F4K3pONndENkl5ZVF1b1Nvb3ZreXBIOXNDRlR6REZjSytMWHFGL1MzMGV4NlkrY1pEMXRSWEZNSWplajVDTmR4dEdhL1d2OHRYVU55bWhxemltWmpTQ0N4Uy9NZDExYUJZdDRVblhDSEFSb1NqTFREUXJTTnQvcWpwbkpqVGZkQklsMk1FNzZBT0VQL29zQ0dTMG5RVGRhWTNKTXp0OUo2M3VYbnVMOVRkdHVtNTdvUDhESzRKcW8yQkxxOHIrOWVLeUJVR0dvaHg4NzJicXJ1c2VnSThONjIyTWdSbStyYWlEQ3ZpbTRzait0MG05eW1aaVZwMnI3Tk5xZGdiYmU4ZU1pS29UQVcrajhJbVF0bnV5a0hucThTZDVrV2wvWHExVjRnOXhSR1N5SEJGa1dYU3oxblNsRVJsSGhIbXZTV1hiemhxZm93SVhHU2ljMEI1cUt0aHdKZ3BwUEhuYlZvQVhoNDcyY0FmTXEraXZKMGk4TythNFZZUW1sbSs4dFloUGsxc1pDU3BuayswRDN3aDA4QkZHRFEyUHY5eUZQb0w5bDdKU3VSZjgrTkFGT2lrNmZxMmRTZTFHcGJKWU51YkdTTTJjcVo5T2V5WUUzSDF5VFBrdkRzRzRjNWtqMms4cHM5UmtCRHptUjliMnN4UFpmbzVYVlZ0ZWNtQjdvME9UdzByUDdNNElxN1pXQnZ4YnlEOWJueHY1Z2tFQys2emJWeVlQMGFVUlRyL1lQWmE1KzdEQSt1YUVleWtrQU85dzJMVjFCQ3BhMWcyVEQ1TENkOEl2VmQrOXA0c3VkanVwdE1EZGZvYVBsdTB2Z0xNUkpkYmd3K0ZYNTAwczFKMWFTU0FQQ01QYTJtL3RwUW5xeHNvbk9wSnQyM3I3cXdFcEt2eFJaL3BBa1NMbGZKZUExdFhiSi93a0hFU3R4MWE1NUFpL0NNbHBGZkQrR2NvQWFxSkx2WVU4bStwVThyQ1ZPcjUzNzVlUVN1ZFc0S3NZOEVYdlRWaUdoOE9QL3Q1YThRRmZLelZZaUYwcVUyaDNCTGZTUEd2Wk9HcUpLNzRSSlI1MmRRRXoxdCswNnp0OU9EcVpVNnZKWWFjMW1sdzE5Tms0dDFpZlBnc1B0Ylg2M3FUbzNYMzJublh3cEY2WFFqRHppMUJUOExGSWRvd0ZGVDBsTGdyOGxBZjNzZWtmTi9UQ1dteWJUWHBVcm5CY09SOEhWOENlVDZYdSs5ME9GMDVLYkRDdXAvQVBKL3BMaGl0aEFDeldjckVlL3RENmQxbWtsclI2b2NkK1dBaG9UNm9FV3BkcFJHOVYybGtMSVhPMXdTOVhJWDVPTHVmclY5bFRwWXA4NG15cjc4OFBFeHdCWjZBalNvVTJXaDFTczltUm1ob0N3b0RSYS9hRXFRVDhTTDVaRysxUFk4OU9BR1U3bWxiaGtuejJ1dG5sZ1MwWFM0ek5BRS9kdEtXOHJuRHRWaHRSOGNFSkdnbUJUNTFwcGx4blhnbS8rdzJiTW4vaEsrOWhWS0N0d0Q4SmwxcFdQV3pnSDl6MkQ3ME5iQ2ZEaTVvK0dxaUpzd3VjazdXQXFrY1Vub1FTbmZPNm1WSnIxeFdZOFpzNnE4MFFDSzJoT0JqN2VUeWtnVGcyd1VyOWhaSHE2QW9KZ3NSNFNDYk94ZFlMVi9DcjdKRWtpRGd1ZUIxdjQ5UGJQcU1yUWpKaytzK24wMjA4Ti9LbTFUN1pDbzBTK09kUlY3bDNSb2ZYM3puandyQmFtSkIxUnM1RGxvblp1WDk5aEMxcVNpdnFHV1h3c1oyOEhmTmhVOVdpRk1RajhieExRd1ptRk91UkRmQk5yWnpyUzdZWkttREVoOVVXUjNiWFBmUm5zYnptZlNrQldYWElGMkwwRmZjN1RvdkVQYXJVbEFYZlViaE4vamFZYldzOXNjV3B4MUtPb1Mvd3NBUFRDeHlIbEU0OXQ2YmVhcXBJbHB6Rkdqa1pETFo5SnZtSlJWUnBQbmxHS1VWMm8zZzNDNXJYdFFzRG9iYTVSSit2QTlMZW8rUy9sUG9YTHJBdDBLM0dBRmwxZHJxay91NmdBVUQ2WGRZMVFzeFZUSjJSNjRGRXF1bXJEQVA2Q1kxS3NCd09IRnUxMkZOKzdSMEY5d3gzK202aVNCODdVd1Rwekk1OE5JbzhrRHRkRFRHdWNwTDZGSjZQb0xyMkdvR3lHOFFrbnp0elRJSUFHVjNiL01FLzFDaUZqcXVsbm1ScytRczdLTTE3d3h1YUxNUkJIL1hBV2k3blBuSlNkMjFNNkhyVzE3QmlKME0xMWFlcXRFN1FJYk9jUW1QRUs3MEdYNW5OOWRSRFg2WVF4bzZwUHZKc29IdXc4OUNHY1FMSFUrdHlvQWFpNFpVTFR1Qm5Ic2tWOVo2ZDFPQ3c1Nkg0YjZuMng5enJUTTJLUm9ETlZtY0JNSUY5dVFFQWEvemJtcnJwQUtncU1LS0lxWnpKK2dlendKRmJxaC9jUWg3REk3dG05UG5wRmZqMXMvcEt4VEtKbjVDcU9RbTFsSkhDaDI0bFpONHFOcFFmSUh2aTlmYy9TSXp3d2dUcTVVMnJOa0ViYUVyOG9DMUprQ0hkWWhMYjAwQ2dpamlUYjRKaUdLVVZmQm5HRmRmZFlobzZFdDZiQUpwMWRDQlZLaGpSNVRVMnBBWldoZkk1VkZta05UQm1TN2ZBeGtwSXpYMm5UdDRDS2dHd241T09aVDcrbzAxbGRBREhSQ2xFQUlETGgraS92cUlJa1N4ZGt3eFozRlZRK1NUNkIwRldlaVk0bzhocWRVZW5NdWVKV29ROThvZFVLQmJUSlF3aWxjeDM2L0krUjJrbTRKNDYvZE9GVjkrYXZUdUVIaVRSSVdvZjJJNWdLSDBXVEh4YTNuVFNvMndCclRqeDJpc1NsS0FyYnJFT3p5VlhNL003RkJhemhWalRURlFibkxtbXlUQk1tQVFxTXhaRk9NUnpKOGtyMG9EM0FteGMrRzVmREplVXBMZGtkQnhSVXdPZ29tbmhIcVgxVlNtVU1ZZ0d0dGVDY2RqNk5lTWFGOThHOFIzdVYwRWlWcnBMaEt6SE5jdmJNV2Nmd2pFQWx4WG03ZjZ4RG04ZGZ3RCtZL3JVUVlBN2wyNmxNYzFEVmNSeGtvRXorVHN2SXNORUNzQzZXMTVadGprMEZ0cHpmVW4rNXBMa0JBeDI4N3ZXdzkzV0FiUVNyK1pSeXIyVlJnYlJwMnc5dnNFMGoyWDYxTWZjV1lUSmptVlVhWFVYOEhpR0R3K2VrQWNEcUhucStleXVHUU05RmNPUjl3aHdOVXFEbm00U0s5UHhzYWkxcXVjQk9LUFFSRVJaVTBPbzNFTStqdWlUMVFtakxIUUs3TGdxaGhlQWZrVkovWjhzbldib3g2aE9WWjg4Kyt2Qmo1SVdHWUZKOHZKL0tjdEFmSnRNWmJEdVVZbDkyZHJ0VXUxekZndVdMMms4Y0oxd0x1WVBKSk01Z2pLRXJDcmRxUzFJTmRxSHhqRmhLOVc0NE55Z3QyRG5Zek5IZExZYWlJSzNvQ1JxbThaeXZMcnV6MVFHRGZhT1dSN0IzTWFzcEYwR0ZiNHFncmxBSHZhQ2xNeEpINWR1TE4yUEtPN1RwTnNPTmRsRHNUSkErRGJobUluR2hjQnlzdmtLd3U2ZXA1ME9BWUY3QVZUZE91N0xUaStCc0x5VVdtVlczWjgzY3U5SnJEMlptNHhwTzQyTm41UmRVTzdWcHN0T3h3dWZxUVNRUXRHMktpTVN0bXhpN1JLUnpGald2V3FGNmpXMVFMNEk1Ti9vamI4eENWd0VPc3lzV1NqdUdxVU1oZlZtdVdCNE5iTHBpNFYxYytIQTJBdHBnMXlZcmgxeHUrbGhDQVJnN0hBMFBtczY1T09TUTl2QjdySVZNWlFlZmNSTjhjTk5FM3JyTVl5OVc4VmdKQklPU2hBc3hpQmxReEhkMElHL0t4SzNzeEFsUVpnOHNmNXZKbVU1aFJQZVVFV0dSbkJQM1ZRLzdHWU05NVV5NnlnblJNNlpoVE1IQ29aWW9LTUVlWHFPaVVUQzR6cVZvRFB3OW5qSUZ1aGh3cXpqMXV4TE5LeUc0WEdtMGgxSkhjWnFVM1FSRlR1U0Y4cmR6NDU2NG9WWWRNcmRtNU5HOUg5RFFRUzlEMVVuQWJHWnArT0NEL05IQUdlSzl1ZFF3UVAxSFgveFpsMVpHQkczbTNKY2VMeVUvWjFQS0p0SkdDMzdVazlkblFHNnBaMU5SSWRMV3drK0p3cDZvcm9xVUtUc0EzN0VveWtsWG15QWVJQmFiYTNsc2g5cFROUlEyQUxkZWJiUjJ1bDBLUVk4LzJ3RlhOTXAvZHdhcHd6WFJPSzBGYWJKSTJ2OUhXZXZ5ZmgzNFBaTWYyNEpweUQ1SE1mVUFaOTZlMThmdzlVVnpHV21qdzU0R3V1QmtVOXdncG5DQkpHMDFkbzJlZ2pjYUlhS2JyM2FDV3V6RlF4Q3VZYVR4Rm1oRTlOb1czbkUvRUx1K3NWTVkvS3ZWdG55NnZFUmtUOTRqUkd6TUZHdWpCZXNDeWRrdTBXMmhhQk1tTm90TEJSODhGMllGN1lEaFYzVEpVRTQveW1vbkhhWEhKSnlrU1hMbzk3VHpabm8xRmVOOXkvSWkyT0I0ZS9DVW9tSjE0a0xsa09jeUNOL05temdxL21EdGhlQi9iM256THpqSWd5akZycFpkb2hhYStlcVU2NjAvRjBrOTJNRnRxS0w5c0M1S0hKM1A5ZWhDeUpIUHJJTW8rVGk3cGw1WkZYT1gwcmNoU3NzY3JnR1lkM2ZtaVl0VlVWY205UXR4QkYvRkRFd3drL2lGTFYvRk9odTF6M2NJeFJuSWQ2MHA5RCt1dGthTHJaejBzaTZxQkFwMmFiTmhhSytzVnI2cjIxQ3RLUFgyUk5wcnJGd05nUHROemNmbzBLenlyV05ZQWlkNit2VDVscExxQjdLbmMvOXpid1lJVFZOVkI0TThvRnA5QW9oWWE1UkJpUGcwMENRRWR0UDQ1TlREM0lwR3k1V2JjK3V3Q0grMWE1SFl3b204K1hBU05DZEt3bG4ydkROenduWTNiTmJpL3M0MXp6c0ROZy9sRVVGaVRtOWtnWWpTQXhXaVpEZnBGSzNkUWJZMUF1eTB2V3NOWTZ1cWxJdk9YditXUzh0UXRUS1BPQmZxWTNnTlRmelNiYVZVSDJqRm9rOUdpUzN5Um1pZFdidHRlOHFMaGY4T0pnd2JiS05sbUc4aFhyc04zSFlVK3E1a3RObHl5ZVB2aFlRU1d3Wks4Uk5GZXo3eWJjdTVCUVFXVjNoQVJDT0pGbm1PVFRkY05sMDlqS3dWREhIdmlyRExUK01nMkg1dEZDRGMwTjBNd3VCWDBEU3NMeDl3Y0NjdWZBZzJyUDhrejdPSGVqUGlKSTlJNmw0VW53VFY1VEI4aE9ybmlsY1NEMm1LTGVRMDczWFNvalpUa1ZtcDVMdncvRSt4bDlIMEc0WS8yUmp1Vnd0T0txWjBpeE1OMHQ0UWE4SUF1SG85Z05QV0hDdkpSVnl4Q2tJSkozc1pQZ0cwUWlTb0srQVF4dHI4R1Q5ODFibjRQTnlCN0tjTTR2WFM3bDFOY0ZIUUFrLzBESVplci80Q2FFNUVqU3FlNkdPOHhpdDBBdEVOTWNUd3NocmpRbUNYM1l6SzFEa2NZNk9sclkxa1l0YlEwUGo4cVZYSE9ITVJFVnZ3R3V3SytvbHZ5ZWJqaHMzN3JJTmFwZWRSOEUyS0NyTkNwOWFDbXVaQmUwQSt5cVl2clY4ekVuUTJCVkpvb2lrWFNmN3NONmxEdkxONE5jZHN5NEp6aUZ3K3VLYm1NL2RkYUFEMm10OUpBOVpqM0E1ajBLY0Jpck15SGs0Y2NwWHU0a1ZLTVFiamJMR1U1b3hVdU9ZYkdhTmtIY3Y0NUo4b3R2U1B5MzFhN0Q1RDFYa3B6TURDUUUzREFzNkZHOFBiMVVXZ2JQZ0grS3o5ZVFZM0Ira1dnMW5mOE8rWFRZNkVRQjAxMmhwdnFFWE41TFRGTzdxc0Qrb1IwanU5OWJOczdQc3VwWGRRNzQxbVpPOVZJQ2h3YzNXdDI3QkgvRHNTcXpLY1hTTUhDM0p6QjloeWxyS2oxZFBuZzhOQTlBQ2tsZVlzSXlTYVVvaCtydFp5YmVoSXVLYy9aamFKWEUvTXVUN3ZRcE5VbXU4cm4yc0VpbVZyVGorS1RhY0hmcG1vRUFvaGpIVUx4cEZCWFZUcDRRc1hkZmptM2pKays5V0gyWEt1cU54ckhjc1l3ckE4UTVMd2UvL0R4Rmp4TWx2U2JGcEx5c29TSjlTU1hhcUVLRkZRUXg3SDNrbnNmOWlLSXhhTmNJc0o0T3JRR2NPUWFEVTBpQ0lqLzR0RlpleWRhdEdZbUw4eGMvdUZIMkcwR3cwNHl5T2tvRVQ0NVlLYUlEVVZjTDFubVF0L0VCa0dneThQeGZ1bjQ5ZlgwbytCTE1WamtaaXdGZzNmRVBHUFJzYUt6Q1ZuZkpST3FtQjhRa0UrWE1oVzFuOURGVUxvSW9zVC9peVkvWFhFUi9WVEhBVFVEMFF3eTBXRHlJWWxzcWJCY0VuTlBZUTBIMUM0UE5lVGNZRzFRbHRrd0JTSnMxTEdOSWFLS2RsV2hOc1NsY2FUcWZsWU1yQkc2SHFnUHFkSFA1RUNMNTdYU2YrUUlaai9pVHB0a0tKa1F6Q1hRZEQ2VWFlV1NOWmk4VmlmbXN2elk2OEM4VDRVNUJZa2tGeUdURUtxc29vTDdTeVdESGIxd3ZhZVA4MDFPTy9WTEhXNDREcGpYMmpJSnRPYlp4eDJPT3RXWWh2azVRRDFOTnFkcTBQQUdPZlhnQXhOK205QmpFK29hNWljSkc1K1NnMC93RTBJRHRwNWlRR0tkd0N6aWJDMGx2TDEyUWpXZkJhM04wVkp2dUZKM205dUE5eTRValJYSVJ4UGdGNElzRzkwalRRRUg4VHZzd0lhNzFqRVpGSzdHcjlSblQxN3FNTVQ1aTFDSHg1Vk81Q3ZSWXhIYzloLzExMVVYcnV2R3JwZjlvd3pKaTFRMCt1Ui9uVHRSeTJ0M3crdWVWWG5uTUVvZVpwakFOV2RjZGZDMEhqRzVWTXpxMVJXQXpFTGRGVjNDYk1MTktseW8yNzMzdWxMQmlEejBMbE10aXBVVUNSU1U5YlhiMVlOblA3WDd6aVFnZ09OVXhuRk1pc3g2M1JiUGNLU3U4d1JLRTJ1akZBMXNlR3NjMkhvMDhsTmFRL0ZsUC9IRXN6Nm9JeHBOb3VhNUhmSXhrM0FuZ2Y4MkVIbVphQWpheHZPR0xRMFlDeFdVZ1ZsTVphZ3lFT2Fqck9ucDlieFRocEFxMXl6M21HLzBpaE9yOEpFRDBEeFhHMHNtMEc1SGhyN2VYTDF3YUs3a3gzYkg2L3ZhckJsZmRSVFBKNlJwNVlxL3pqcE9UYmhPVzJwQTlkS1dsZExHMUJOTS9mUHVuemN1VzlncUlxUWtnQWt6RlloSDFmV0Z6MTFJL01nUUtRUklpRTBUODJRU3VmdzlUSVhIZnRwbEkxWFlwUTJ6RitsUm9WanF1VHFycHV3MUlJQ1ZuV0trS0xFMHRoOWdqWTFEZ0JSd1AwdEFpcC9LamNBSmI2UG5lVUpoRUt1OEFFU2REd0dLUmhUbEV1K0wyMDNyZ0dUTlZoYys2Y2ZPeXlMRi9FVTd0b1J5bmdOYnpHOWlSQVBiNXp2d0tGMFhlY2pvTm51OEVsRlhRamc1R2hjb0Y3VVBMcElETzhxdXlGNEtGNG9uOGNHejVreHRhY0l5aWRZNnppbURhRlNLRTJoVFRhT2sxRmU2VDVGWEFmc2JOTGFaaDFodkRheWNBMTdCNjVTellHRC9FZ2w0aFVkWGlGdENla2VYTTBxN1ZROTNlUmIxY1VrVGcrSzZ1dEVRRUdaWnFRWWdKeTduK3ZYWElxbmhPVWNIa05CaFBGMDlXVndXVW83NVEyZ21uc0NobTB5Q1RWZVhpcC93bENzY1JRSE53RlhaWHdUcU1wckZFTnZrYUVoblJRYjJDbkpza3R1TXc0dkJuRFdFcm1UVWlQSm5HZk1EblYvbkdYakRwdnhTbDFSQ2h0VkJCOHA1YjhWUm9vOUtoSUtmZW8xQzFUWmFNd1lKTVhDTndoakRtaldYMkxCSVFpWGlsQVZWVFptdTEydVJtUlZJWm1JTDJib3RXUHJxWDIrbGQxRjVZdlk1OHRJZzBSaUNFUk1LendXOS9wYWlNK1hBamh4cS9WMVJ0dVlYZFNXTng0SzdxcWlvSE8zZGxDdGxkUGduTkpwY2lYSldrdGxHUEl5OXFjeUpCQUptVmRNMVV5aTYrdENKc0xSTUx6RWFuMlhabWxlN1RYT0dManhwb21uWURDYU44UHlLZ2VISVpxdGd3ZFIwMklXYVl3cXUvcVZTZWFXSFRtbXZMMVhodHFCT2FpaUd6b3dpTkhhT1RXR0d2T3g4YzJ1bmYvYlF0MlhRKzk5Zy84N3R3L0Nkc1Z5UFRDa3hEaVFrNkkzTGpJZlpaeGtvczh1cEk0NS93ZVNCTHNMOU45OUdNTHZ6UVZJUDlIQTVkdG9nQzg5M1BEZHB6VFpkSUFYbUtkSnBVUFBSYkFPM2o3WE9meVdwaVV5Qmc4clVLSTJNWjIvRXp0UVF4Qm5rVCtGZVBMREkva1dRcFBqd3B4dVlmMDk2Z0h6QWRvTFZqUE5PZHV0ZE9FSmxMSWdBQ3VlR2V4cThlQU0vK0J1OVFDWUdlU01BU0xLMUpFbVhndzZpOTlzVVJlZEkxUGFadmoxejgrNU5EcUsrejRISkhQNkwxWURScCtoR1crWTY4UHI4dlBzZXI4TkROTGZLcG9mcVl2SnRNVThGNFZURkppK0FocG9MdGQxT3N4aXJYWXQzMVpCbXRtL2UxWVNDVG9SbHE5UHJDV3RaMnI2L1FHcWFiNkNKYnErTThvRi9KK3MwQitIdkpYU1RSUm5YTEZ4c01WZUkyRWl6NFFFbDNaNnc2d2FuRVNUUmtYZ3RHNHhZN01MY0VoRno3Ky8zSnJtd2tNSmZpdHk2QkdIQmZiZ1d3SE1zWGpiaDR4T0ppcURyZ1EwaU5ubUlGcUZkRjd3SGUwSG92SGYwZ1ZPVVFTQWQrcTRxalZ0NzNQK2UrcDZ6bEdSVkpJM3M3MWU5aVpYZTZYc3ovckFGQ2F6L0V4ZHFQZWFhTVpGRHF3RDI1dTRKNmwwNzMzd1lXc3BFWHRpd0hrNjZ1MVZ6enpudFRORStRSDRPd1NhL1dkL0Q5dTh1WDVDanhyN2wvVTZna0haWHRmczVKL01KeXgrQjkxMnY2V05IMEdUeVRtL1VVcFRFVmFzVTdibC82YVRsWVlRQ1NrMm1kS0RIcytHdHpmdnVVcVlEL1BHOXdhSW4zMy9YTlBxWVJJM204eW9OTnhjMzh6enVnZVo3SkM2QVY1aTgzRkZadU1yaXdsYmxIQTZpeW92bjJqZ1VwYk13YVdINkJBenBIMm5UZFVOS2FDZUtLMEZxVG8reEMyWmtSTVdXb1Ntdk5mQjc2eHM0YTJqaW80djY0ZWN0NGUzVmdLdHNrcEV0OVkyNkFMWDQ3UWloN2ZyOWN3ayt2V3VQSFJaTlBxTERxVDZORXVCYzZ5VldjUm5HbTJtMVhtVSs0VUtrdnBvQ0syUlFKVmc1S2J3QVpMUGpSN3lucC9zN0Q2WGI1K1kwLytZS0tpZUtQaWVodlpDVjhFZzQ4TVM1aG1WN3pacEg2bjVJWWtnaGk3akNNUDZ4MlVqTnVCZWNkcDB1WGIvRnhxWDlMVDd3NElaY1l2OUhOZ1YrUVB0UEZyVXlQbUloQWZxZ0k2cHRvOEd5NnNWNnlKN2dBdHJtSlQyV2xMWlZ3a1hLTlo0a21reW1XNnZ4SGdPUFRUd3Jnd1AyME5RTmROVG4yeVFKWi9ibkhEcmNBMHoyREpLNW5LeENWWjF6RE9DcXVYWTZMZTFDTm0yYVJkWFJOZzZscTdJYkFwcmlldVJ6cGI0SzREdnRtZDBtR1R1RXpFcDF2c0p5TFliWDNjZWJaZ2NPNzdXSjB4QWtiT1FxOWVEbGhscWFEZ2pVSDhmRHl4aHUzVEZwa1JlQUtrbGNscEk4emlBalBGejRKTGpHcVF2cktnUDNOSW92SFhUeXAxcVgwZ2lYWTBWVWNFSncrdFB4VUc2UU9WKzhUYUdvRDVtTVJZYjdBQVMycWxPVUpYcFNKa3Z5Rm8rdXB5M2FqYktyaWI0b2xJaDJTZ2pNNVF0QnBwVUxaRGl1NUVsTmxGVktmajJOYVlDZG5aRG9IbStGaXN1Q1VpWE5CWERweXBFNHg0ZUlFMi93ZjdFNHY0N0krelZ3S2t1V0Y2TE81ZWFFWjRsU0dFU2QxbmRTSEh1RHdGcjVMVkkwVmdWbDRnaWRmcytueENqNzRBOXdrTjh3S3lDem03VnJWOHBtcU5WQTRlOVJ4V0VscU1jcTBGejM4YVpSdWtnbDZhOFY3dWZHT1FFbXZnMmp2YVhsSStqRkNjYzNUOTdxM21yYUwybUNJWFY0LzAxL1hpbStuNkl5YW9kd3lNbXZ5b1NUTGZrRGliOGpMT3krbE5oZk05amoxUnVLd1pUWVJMa2Y0bXJlN2dRbkpOVUpvekN2bzRveTN1bmtRYVYwUUtrb20vSXJ5ejhBRVc5MXc3NFFjeVVkbEpFWnNnVk1PZGtnK1luV1hEUjJEQWpaM0RsS09tbDk3c1pLVjhKMlgrTXI5TWdZYzNFcjBRTHllZm9tbHhiKythL1hZblZVcFdBMGxrQmVEK1hDeUdmaWlGSjdoK2xKRkdnQ0IzaXFmUlAyQ09IZ05XOE5XRHAzU2QrTXpBRHk0WWZrcmp2YXpaT1JlU1VIRlY1L3JwVlpYL0ltN3hkQ2hMNlRwRkFhNTh5eDl2VTVHWVBpZ2JHMitXbFNQOHJySzZEYWMxNU1mRVhzVW5rWTViS0s3SjVQalhUMm9uY3VOdXkxUy91VG4wa3hwVUpRaUsvSzVxM2lMa3ordEVoUXNRVThDekg1UFBncFQ1aE95aTl4RnRaSjVMWTZrelJCOWNlWWV0aGRUeXV3eHdqZHdaVEQ4Y29tcEo0SU0zSXdQL1hMWUFRYUk4KzRiNlNGRWFka0ltZEtlQkhuSERmelRiWHQrM2xtR2dZUHkxZmh5L3d1YTlGTG5VTmJVNkxaK3o0OTllZ21HRDFNUUtaS1NERjhCVi8ydDYyZ1I5bG9tbEFPZ3htV2FhQWxxYXhmNlZXY1g0R3prM0ltbjNTd21LYjJpYnM5NTRzZzl3NmpNQVlBNjJpMlh0VUEzREU4YUJNQnBVdDBIQmQ1Zk5jV0Y1L3FSQWRyODVqSlVYWEJsRkROenN4YkFOcUdwajk1QjZWUncrSnlYeGw2WlNScnZ2dnNwNGsxMlpaRkNEMmFJRklsOXBvSFUra0Q2UGJMVk9FZE5xMTlmdGtRVCswUHRqbHlZVmF2TkhEOXhvVlBzcHc1NkJPNGI3M2sybGtuOEg0VHR6enJzYmROVDNudlY0bkpkQmhBaEhoQXZkQXJKemdwS3hEdjhPV0pnL0dnOW1sbytuUC9ENHY2Mmw1Z3NFYTBEV012OVVGMXVHMW8reGNRQzJIcTJXb1dGdUUvd3FUNjU2eG5kQlpWbEdsUmp0UnRoRUd1aTcxVG5HalEvZ2tZUWdwSXNmYmFuam5MdnBHeXpJczhzR1huVDdkSEZrbVMwN0hqM2F5UFUySFV6cklHSFBxczVsOXFxcHpzMlluU000YXJObGdoR0VsNXhicC9KY0N1cTNRSk1KNUxnazFpYjRNbUhiMytEWEtjWTlsNFZQaElKSGVEZjZWdVJwNUNIWk9qTVpmRW9qVm01aElBOHdYT1JYMWtqOEl5VHc2VkxJVXFtQ0hIQ1FKSFNYK2hkSUo5WkZCMEtZbWtwOHBob1FIak5MQlNYWW9lczlFeXJnUnNhdkxyU00ySlRRMHp3cVF4RFNXZW9OMUVicm81MDZIdDgzbEdjd2U5UDBvaDdTTUFHdUJsVEpsMWFuNXRDbnZpcVNMeXBqWjFyOWx0aVU1SjBVNFpRYlc0WCtGZ3RzMitiUTVUNVJ3RHdKRlA5eWNpbUFwNFFnQ3I2czBJRlkvZ1dSM2NYNTRISlN0eS9lUzB0blFGMXFJc1NiQ0UzeWlCMU9rbkcvODJiTDhTWTlyREZnUm5MM3gwdjlvT094NXRwS0N2SWxXaERkN25RaWx5OTF1YzhYQ0dpS1Y3Sk5OMm85ekhWK1BnL1J4bzl3S0wydVdCM212VE80dTQ4RmZjNmtKV3grcGlXRnczdWJ3dHhvTnNwYVlQSVB5Z3hCc29YVTE3SkZwMjRVMUw3M3Exc05uaG9wc3JMT1o4RTNEdUd2MTNwWlRBdFY0ck5lRi94dlJnV1ArMGF5Sy9wR0NPSDVFSmN4ZHZueFZkZVVINUc1ZHQyb0hvbkpYMlVKT3BRVzBibFFPUmVPV1lCSzR1bnIrQW84dkRhMityZU5kT3dHMmtZNytRczNyb20rY1pUUy9zZ0RRTjBTWE5waE9kSVo0WUh6ajlxTHRXUmV0WGQ5eHpzaVB6dWgzTmN2ejUxTVJRc2d3TEFZS0xpYWlVRDlFOG9jZ0tQTFJUYUpBTTBWQmlOVEs5SDlZODE0NkE3Z3JCUjZWYUpJZUt3dXp0dmtzbG5oVWJvUjE3NnB0aWZNOU1UWkhYdDZQSWxhbG4ybStnS0h4RXAzdkZJS3BBallPNmthVG82dDNmYkIwVFBrUWduMEhSWFlDR01YSk9aOVV3dTM0UVdqWVNnS0pGMlRURzZHSW94ZjhFRlBFbDNoQ1c2aFoxM3hCalRkZnlrM3JXR0NQMVp6QXBzNUJCaHg2aEkyblZSNnZSU1gvdURDR1lHczJhU3J1OEVrVVYzMEhMMm92bFBNV3VZWHJkNWFQdjRKdEFvNmlFMVNRR0lQdjZLdjBEeFNZWVZvWENIWjNnRkQwTUhxZngxVDBHK25JN2kvWkdhUWdSNGpxMlhrc096SXgrWXF1akZMNWkxTnZVeDU0bExLSmNWdGxyZlNkT3U2c2hZdVBWMTZnN1hrZ0ExaFN0ZSs5UTEyS2xqSXgxVGllYlZ0YnJ0TVlFOGl5WVBDQjMvUzBXWjN1WGJsVVA4N0VEYktuVmRpNmxYd3ZTbHZoa000SlBEL1RTNlh2VHBmODZ1dWkxaWNSZnhHaU9id0dmQWhzakhieWpQUk5Xek1QZFU4dXppM1ZkM29aOE5vL0hJRmpad2dWVHhrNm5CaGw4anUrQVg3VVduRFptZldmZFpyUXkybXFrOTdKSDdtVkxESVEwam9sYXhTMHB2TGxpWGJCSC9VQi81TUlPOUYzaWdhamZFVnZNaGh0R21BUGcyUStsQXJ2MzlDbGJGSnNMSmxwK3oyMVU0LzdFeFZYMFlVSndiNjFmYTBURDFqYnZlNExNTGpydlZJMUhLVmEzaFBacktmNHNpanlDL0YrWnhPaDFRR0NEZXVaQmRnaXNZd1FlTzNTdkszSnFjNU9ibDRQVWR0TDQxTVVTc25iTkRqTVhjd0xydStxQkxXMUdUYXNIdUF3Zm5KQlZkd3pseXhyejlHbHBTLzZUdVdxQkxuUkdWNVByOWJZa2hvUUdyaEpXUVlySW9sMDlpL2FVNmpoWkVic0hWT1NicjJ1M0ZzcUlVU29HaVdMOUMwL1FMUmhwTFpGTGZVUWErT3E5V3VLY0ZSUkRnMkdBUGlxU25Pd3IrcExtaEl0a3dRdW5rS3VYUGppeHlJdDl2dmlMbGJtdFhBWkNCTGFuNFFwR0hISjFXLzFlZWFlZTFCZzFEVGtiR09rL0dnSFJsWG4zMUU3S2R6bUQxQVV4SmR6bWh2R29IYUJpUEo2U1RSM0xodEpydTgzL0pYWDBJTFlXOUxUWmY1dERCd05VUUhYVjJqZXB1RTFDZHBFRm9jRm9QTUhleEVQaGJLc3hOWVA1RmtDM24zK0hLa211YVdMU01XeTZhSnA0YkFRWlBsRCtUSVlHM2N2aDVHWndjeVR3UzhmSnpHbGZDVFhmcklDU1BIa3NuQm1qZ1V2MVFjaGc0OGR5cFhKR0NLYmI4am9SOTA3RHVaazAvWkFiSzIyQ0dtczhjZWFwdzlsdDcwUjREQTN5UnlJSkU1N2ErQWhRM0J2ZFlTN01jL1d0aGsrNlA2dDJhU2U1Wi8wcjd4RG04dnZUUXA5UVFTNFRGWXdSNnFOY2ZydllRQjRhSGc1Vk9DVXAvSWdwWjFVVkhxcEpLc1NPSEZyVThrV01rVUwyYVJPQkhXcjZkWGpYZlQ0RWQ1b0RWTXkrS2Uvek04ZS9udE9WdEFaUmJNR2dGRG9ONUkwWkZxQ21mdEx1MFdRcytuOWxjQnRrUjh6NFBaUU92NVp4OFBPR3RTanhxb29ydGFsOWpsMjEwaVFUNWpzOE1YVGVQeGRhMi94Yk92d1ZPYjFyTkRKWDhHOVNMTldFeTd1c0NuZlJVSFlDeVo4WlBVc3dBc05IeEYveEZ2ZTJ4dGRYWUxtRmJNVUZVRytsUlZjLzBhandaMHIzTTFVZlZqSzRWQXZOY1IvejBTdGZKMXFzTWRaZzd6ZS8zVjJlTjBlNGtZL3RKNnFjZ2IyeENYNUNZOXZYOVJHNERVV0REaDVIcmhQanFadW1xdXgra2JCcGU3TUtwSkkzMzErWXZKTEkwcXlaTC9MUVpZYzhERXUydmNidmlIVUFyTUQ5cnl5QUtXaHp6MFJDek1tOUkvWEhMZTdLdUVNbkVzUFF0c252SXNJZ0EwR3ZXU25ZYXA0YldCZDlzU01Cb1Q4UjhTdCs1S25VSUFkZzQ2NlplbnovV1cwSmNiQWUwWXRHY3ZlaXVGblpQQmtmWDZTcWp0UU9haXplcDh3cDF0c2t5NThZQjVJb3JlaWVDNU9rcEcra0d4UkdIT2s3bHlmZXBDRkNQNkltS0I1WG5qcThPUXBHWk1kaHFVaXZIWEs4Y2pFc0JqK013Mm9vR2l4YlZXM2srSURiQzRjVXJCMDdrdy9OZUVNMnc1YWIrK2k3emloMTFIQklvUXUzck44OU5NRlJkc1JDM3RQd1ZUWEd6cHVJQ1VYZHRTZ1lUcnFGaEhMVU1aY2tuazNnRXNUaEhYeHhFdHhLekR1eWt4TEZFTFY3OXRpam45Q2s3eTF3RGwyQS9mNVBSYTBRYmV0THNqczBoVWVhdW9qQ20zR1VTUDVPUlNtQnRzakV6SE1UbkIxRTMyMys4THdLTXJVSVFGOEFHWkcvZjJUTWZ0WHVOazlNRHdhenpBNytJWkh6bkg0U0xVQSt0Rjd3cGtDc1B0SmpxTkE5Wi9xZkJ3VDdsQUpldC8vV0F3TXgrYWM3UjNwT0JVUG9YZlZsNFhQK1VjU3pFdWNva1BSUGFldm9WdnptS3JBSVhVdXRtbW1GNFFuVmhhUVhIaWVLcWJGVjlWL0RaZUJvbUxOaGtscHdRK0djbzBuR2E3WWQyTE4yem9tN2pYVUpoOTZBZFQ2OTlYenFtSFNFZEJQbG5CQkZjbVhkU1pHN25DUG53UzJlMURvaXR5eXJ2MVI1QkF1RFBOdDIrNFVhRlJPK3lhc1FtTTQ3WmxJRVl5eHZTbVRDZFlNMW05WHJ0U09nQWhBQzBIWE5yeWlwUjdrdkk4SVp5dE12bmltaG43eVhUaWN0UER1eEdZTDJBYndsV1I5TC9nQ09BQ3dXNDlndWQzbWJzcDlITHZDOXk5b0o3NFhHOGZLZExtT1Yyc2NjTlI5L2F0Q2FUb2piZFpmd2VCY2pYbXk0V25Rcjl0RlR5K3l0TU5Ralo2RFl2clkySVFJWDY2c0RyN3FDRHFwMVdXd25tSVprUGMyNjBlNHhpUmlodkhjUldVd0NrTTRvRy9sb3p1U0xRV0U3c0VPOEZhTnVCa25ZNWtuWFBCMzlkLzFKY0UrdVNIWERxSElrd3p0eDVqbDliaDBZZzl0OS9ySUwyWSt1ZzRQelhxWmFCWEhROWF4M2dmZkFpWTMwWjkyY1lVN1N3L3p4ZXhhWWVLQ1JTUmVwQ0Y3UDc5WWRDYlhDbWZoN2FvMXFLUFdNZEhmSEoyc0hkVUswTVhsRXJCQ1E4T1d0WUxScThYSG5vUTV1NURNRlhyZ0habzduTjNXdG9MV01UZTRETHlhRjVISGZqT2plakF2R1JTZ29BeVFMUmNtN3dPeTA5V2NBblV0QUZUbGhENUdldVh6ZXYxL3UwNjB2NitTakNBK3JlZ2pQaWl5SDlVSTNtSnViYnc1eFhYR2FwM3YrUHlKOCtYSlVMWFlHTU02dCtPdUdwZ3FpQUFPOXJMQ3pYTXBlVnhDMzdLSlZsaFlMNlhrYmFQWWhVMWEwS2YrZHRoNXl5VlJ0bEJGa0ovNXJVOWV3YXlzczVQc3pReXV3VXRCYkloeXBibVpFaVNrRDRiTkJDSEpnZmtHTDVUNmdmNERKaVA5ZUxqL1cxUmFhQlZFa1RBcEpMa1YzaHBpeFpLZlhWZGNlT0pFVFFwUzlSOUY5bzdaak0rVy9mSmE3d0Z0eVRmMEMvSi8xOC9JTTlZWnlwaDJqRFZEelhjYlJOTS9PWk5JaGZGT21uTHNoTVlBeEpZTEN2Rk03akt0SStrTmNBZTBsOVBlZCtScHBiSUFmQkZXeGd1a2FTTExTOEVybmdGeUwyYTFSaG41TTdDMlRMQjY3Um4rNEswcEY2cEtRdjNVNk51eGF0NHNWZGFiUXhWeGFub2VpY1Z5Zk5SNFBKYTZLc25VZTErdVBjMVYvOGJwY3EwMlRiZEh6WWJwekJIaUtjOUQ3ald3eDVBVk56eUp0WXNpK1BOZWFyL2Q5dUEyaDVWMS9mc2JROWtTZFBjTjdIdlNrNnFhWFJWTk4rbjZwVVpwbFozR1hUUkZyTXpUYUh6K0lhcW1wdGtNN2FmZlZzZXRBVlNkWXRPV3V5d1o5ZG02bkg5N3FucTV3TXE5OGUzWG1LTml0SUowTHJWK1c4TG52QzE0K3hkZGdEZGJGM2s4TjJoVEx0eXcwZTFlc1JGZjRrblBuSXBtSFV1bTNNc1FlNzZVei9EeDlUWTdWdnFBVXJQbTlyUTFrT0VlZDNrQUdjUTJpcUhsTUgzdmdDK2hqU2dWUkExZFpXU2d1SkFxQkpGZU1GNXVuZzlZSU5WVFhSK1c5OGFLWVdWRUxGay9HT0QybDJXZk9IVSthZzdGeTVDS1N0ZXF0NFc4Qlczb0NhK2FmOW5wdWpCMlZYYlQ4NUFwQmZYVm0zNU5MYVYyMzVmRVVGbVF4cWZha3dadFQ2R3cxL0JQLytGdVdaSWg2RGhMUDh6ZU43NkVDVmM4Mys0cnJveVBPN28ySlJvUmoxcXpqUXdPT25sVmg5QVBwTzc2TnRKNlQwQjZiMEdZY2E4K0NMWnQ0aUp6QXJUNmk3dTV6bmFtL3RxeTI1TXhIMkQ5Y0JrMU9FUFlGQVB5d3dMMmsxUDZQSy8rbHBFeDFOSHF3Q0R5MHFjQWNUWUpZZGQ2OG5DNk1KY0IrT2Rtblo3QnAwK1FZSHh6MHBGZlFhM3RHUWx1cS9HSGFldlpBd1RpMCtMYVh5NEtNTHBGZkRPbjN2TVRWbFZ1YTJHQklYSHJjcnVnSyt6MmFROHlCRWFuRzRXOVYvMjU5WUVuR0E5UnNvdUZTK3FBQkpsRlJ6YUQxZEJEaklXZkVWMXR6QTZBZjA1Q0N2ZHlMSTd5eXM4RFlGY01rbis0NHNaL09ISFE2c0hpUHI1UlNweDRtUkkwemNyQmRlYkIwemNIWVlnOVVsb2JyM0g3d2F3UlVXdk80NEF4U0JlSTQ2djlWaFBIcDQ1eExLR3BzZGszb1pPWHhFSW9OVmVYRlJIU3BzLzhaSS9jb3l4Rk1xeG9HVXRqL29PeURzRVMvT2JyWTBuSE9LUGVpVGlWa1NvN2RvZ0lxQkJ2WktLcXdjL3hUaEtHVU41WEJKY0FCdlVuS1pHWWxRNnN6VHJVVGV3cnFrcSt1S2tNbllXRFhDSCtEa0JlYVpLcmduTGMxd284dXAvUXRSVVZjUVZnS0xMNGV1elZSdGRXTmM5OEpPTDJiOHhKaHB2MXc1TDYzN2FTaExYRkFmSWVOQVdsTW1EUnUxczAzaXRnOUVaekhsck5PazcvamFPRHNjNlFWc0xWODNNeURnVzIrSHBUNkRSTUNKMy9odVJUVG82c3cxV3RhMU9LL0RvMlo1VDBncHRIeFlyem4xSHJ2S014Y1BTNVZCUVNKS0NXT2dxNmg0aDJYTC9aZjc1VFQ4SFg3SU10Y2V0b2s0SlFDWHBwUVlqelpnMDZZTEZYSXVVM05KMnlSQ2U5cHZuZ24vd0NyWVhIa25wcmpjY3JmY0ErYU1PV3EwVnhHa1RrcytLak0rdEwwcUtaUUEvVkdsN1dRbFV5Mk1UajYrQlJEdkNiaUE4MG5xRFJxMmhsVWw4azM3V055K084UHd5QjcwLzZyd25GMFN3dW9HTWxPYWFqbHlucTRSbXliWWNMNDZTb284NGY2a1NoOHpnNW9ZV21iSEZpQU5Ud0dxUW9Ja1VVeUxBZkMzQmNZcm10cFdXSnBUSmFEWUFLbnhLRk1icW1qaXNpL0dod1VvKysyczJNeXYvR1ErVlowa25uc3ZvQWdDZjhtaDZ4cDkxbHI2M2h5RFhhN2Y0VUROSytGaWFYSjJQWDR4VmRmS0tLa08xd09pS0hKeHFFZ2pjSlJMenpaSDI2Nmg0b0NoejhhenlBejUzQ29uQzlRWlNBMWhzbEZYY2p1QWdYRDRPRUxoT3IrWFZCalBhQ092djRueDRtQnVtcFYrZ0RXYlFuMlRLZnlmWWQ1QTFOclcxbEFpMnczT2dEblJyMXBnZ0VqZHZ2WkhqL3EzT040emF5MU4vVXdNallVVng1eTNHZ1J5VWdvMnhXdDJsMDNyTDBYc2dWL3BhZmZ1bjg1M1ZsREZMVjBoeXZGVGUvVGp1ZFM0aHJRL0pVaDJPKzZZK2xzclk4VFUzVlJ6WlErLzg3bWF3UDBMUVpEZ3RSSE5pK3BvejlwM0dnYy9jN1htdkxBVUJlYXVMOTFHWlR4bE0vTUpqN1hmRWZhYlhWeXNTSnBMNUQ5c1NzM1NuM1RDck1qWHV0a05na0FOMVlBMThYV0FDTjlHc28vTTNnZlR1NVdBaC9uWklkRSsydGxKTEVoVFZCRVk0TEtKb0wzQ3hxbThvWlRTZUt0Wi9EK2F4K05YV044VEpGZzJFc1NMa3pDRGhQcEhjaDl1RHpJVFNaWVhWZGVCajZjRloxTnQvUmJFcXZFeUhuSFhPSTd0RkdhbFlTVVRQQ1hjVUg3aTJlUW9oeWxERnFiU0FKWjBGdmE1eFk2Z3NLUzNNMmFXbFR4NldUeU5tZDAxeEFTSUw1Snc1ZDRCSHloNDZwZXgxaklXQis2b21qMjdDdG90bXZxMCsvbVltRno5RU13UWVZd1h4cm5jMCtWdzRsTWNXSDBtVTFXQTUrck5Hc2M3MStkTkcxd0k5Smxqd3VhaEZXU05ZdWVDWFlXdFUxTG85cThmbTY4RS9vQWJxMHY3N0xKN0RZb2tRWWp4RTAvZ2dQZ200K2haOXduMHBMLzRkR3V4VS9pdGwwY0k0SlNBUTQ4TUZ0c1pKYmxKN0NrbEhqQXBqUzU4QWJBajJYS1Y4VWN2QmFaV0Qwc3Y4SGZSaXFYMjNDTWNMNU1GSkM4RVIwWm5CVHo3VnJiVFE3K3IvVHBDNFhycHJEeHY4clF1alpZQVJNWDhFcWsyaXhpZTI5TW41UnFBbTk5R0VycEJ6NGptL1Z2a3UwU09xa29NU2IwVFN5M1hPdlVFZ3p6ZmE1VXBydmloeUFMWnh6Z2RFeHF1d2xRYzY1NEJFaXYyRlNSZGJwT1ZQc1J0dGtnMlFxYVRSb254Wm5aNy9naGJYS3JtMVVYVHA4R2FWR3Evc0M0clc5TllHMWt3bHZIMlMzaXlRKzc1bkp3SGgvd2xhVE5PRmFOMWZLMEFnd1VYQUtnUkR3dzFGbDRabmdCaHVGZ1dKa2NSUHRiazQ0T0xhNlBFZThlMHhQSE5SUlJSYWVSTndlRm94ajNVSG5Vbnd6YzB5WHNKVTI0ZWxxU2lhVjJta1l6RlJqbGFPZ1ExUDF2eGQ2M2QzMW1WbTRTVkI1ZWlHTEUxZ1B6MzBhRldGbXR0VFdHR2orSHRoM0NDNUFIbWt2RE9FeWRRbjNscm9HMUdKZ2MwZjVzbnYwSHNSU2J1RVhjVHRYbnJNSlpPb1JBdWxOeGFTWVhPY0JRRDNSeHB2L1V1MUE4YlM4YUlCTVZjcklEamo3dERoM3YwQ2lQSVFEL2ZUN1hTelpnZzI5NjZJRXNJZVBNdTBSWVdmaUhuaFB1SWk0MTA4MTdnc3A2YVAvc2pmZi9YRlJ6Q3kxdzQzVEt0ZEg3VjNOS2R5V3hSS3JtakxKNHhvRm1nY290SlVJYkV2dytCamxwNzREL1dSVGl5eFlMeUlmRnZiT0djV09yeFF5TFcyT3NsYTZFeE1nL210eXVQeHd4NGwzSXh4a1dSUmltbHdnZzlHa2hhV3NzdHFyR1paQzVGa0ZDM0d6ODFVKzlPN3Yvelo0YUNJTTdUaUNHMlFxdFJwWWpZdklqMXg5Y2V0ejg5TXY0SkNKRFNCeU1rRUZ1azQ2VkwreWNMbEd1WGhwbXhxb0ZjU0NqV0p0RW5BS2RXV09nWVhienJTUFVPZ1pnd3FTZnVNQ0RJTjljQ0dKc2pnc3dpSlhNaHdTUWFYbGV0KzBVM0RnY2JQbjZodkM2YnZEVXdqRFpsYzBnTVVuSFp2RXN0SXBXTFhJLzMzbENQckpzQ3pra2twcy81OThIb3dMdUttMkVRSlFXQlYvU2FhZDlyRVR1NEVkbEtZd040UTE2aW1PRkdHYVlvcjBicExxeTZ4RVBEUytKZndMaHdaakJPbTdwaWlMazVhT1JYcU9pazVuTlJVa2VuNVFhSnEwckozQlRrRUIvd0JxREhyY2N2VHpCekx0RkpsUzZUTm9VZlZJTmdVc2tUNlNoMkh4U1p1TzM0aXhtb3kvelpibmJCSzdVbmhsKzY5UnlPeEwrOWJBZ3NpNE84ZUtpc3FmclBwejBIR09oTzdYTWNSaUNHL2M0OVoxbXdrRzRpcDc1NmIvd3VLd2wrUk9pdXVsS2UwQWlFQjRXWHo4SlR4Rng1QzhRV1NkM25yMUI4Qzc2QXhnK3NQSjNEQUpEL1ZFblJIWmlsQVVHb3BKYjN0b1RucGhUUEdNdnpaQ0Y4bDRYZlVtZFo2bkh2TGtDV29hdWsxd1RpNDhrQUNnRUxyMjVnN2xtWmJJZTYzWHdjb0tQek9mbzZrakhnd1IrWFEvc0FmNTNzL1ZwQ25TaXNlWFB2WGdteW1ETkNRa3ZNZitCQlhRaWVFc1JRaHExYXAwWmRmVml1bEpYTjdTWTB3NEJkUDVyNFlxc25LWjRVcEFRV1pUNzlOYVVwbTh6eTBQeE12UlpBeGJMMCtvVlJWSzZlWElEaldnRmlkTHgvS2ZiQ0ZHdSthYmcxa0ZVd3AvMVd4V3VKcEttalpqK0VnTTZCMVExdFN3c0tMaWpaWXRHejZ3VU1nWHZPOWE4VFNsZTRVWkxuY0xVTDNnZHUrMDlGeDRjT05QWTZISENpUHBHV1BkSnpCWUVDTUlFUEp1dTdRVUYwMStzUThZRHZYV0NPekxvZHZwRm55dXlCeVJ2a0JrT3F2VGFSbWZhVnBzSng4cFBacWlMS0dqa2c4MFdpN3FaRmJJYVJKRHRlcVN5dFJYeDc3bFg4dVRMc0ptU0ZoOTl3TjVyL1lyQWJIcDRmVDF2bzJZSEdzZnFkSkwycXE3cGMvaHZBQjJNaXRncHBhWDZ6NmVIb0NiQlFMS0VHeEtiaVVtVElyaEF3cmxTZ2ZUeDFYbWVXUEV3b1E5WVNDT2xSeVFkZUtSMTUxQ29PdkVuV05CQmNxdVJURU5zQXFUQWxHUjNLeEE4ZjhIVEkrYld0MytEY0VHcWdrampRdDZOT1YxcDhzWG5FVWpGU254S2pMaFJLbUJpeEtvaHk5NVF6Z0c0eGJjVlJhOFpsUm9NUkc5NVpKOEdZak4vVmtyR0lRMEgwM2hBWXk2ZUd4ZEVQWFpWYTAxc014b3g3dUhjNkFDQm41eTdIbTRCZklkcW9NSzdqNTZ5RUVOVlUrVmFtakN2NEtxRlArWlk2TlhaUThGVVZaOHpSaUdoQU1TaWRJbDN2R0YvUW0rcHhTbkVsS3lyY0hCU1hESHJXeXFSUjA5dFBzQ0hXOFkrZ29HQUtrSU8xbzgyVXpmYmNlR3h6M0JTZzhPQjhtdzlqT2JqZE9mNW1lVEhqYjhUNFhyMmNyYUZBZE5qcHBNaWNzamlSVXRjendPaVdKbzVMWkRCYXpCV1FBUjk5T1V0eXhldmVDVDh5YmlwVlBMeWFaNTE5akV6bU1PRGdzUFZ2U3hpbDBJQnVmUGhIc2VMMHNvNEpRZk1mTWNnNjVOYWdPdVNhNlBMMSswQndWQUNrR1BnRlZBa2l4NlZNajJVMXBGYjRBMFpmQ1FMRlV6MkhZSFRsM2o2N0hMazQzV1pTT29WL0x1b1UvRVJRUk5yNjdNWC92SEE0M29uOWVlUzNMbnFURjZWTkFKU25xYXZteW9JV3c2WXZwYkpkYXhNYlVVUmhpOG5mMHVOaU0yT3NXODk0UUdqdm1sK0twcGI1VXJLeS9VYnJTOGRtN2ZYQUNGK0FiZTBzanZTSGNsMC9WWHUwbmsxWTZ4RmpTeTdRSi8yaW1wdExxZDdRMjJjK2VQZXJ1VURkc3Q5eXBQWVQwbnFiK0tZcHRxQi9pNDBITU9mR05Jd1ZDcUdiaDV6ekEvVzBjMllJcmV5empMV3dwNndPSVNId083MFBQNjRBNkFNd3U3NE9GNTlud0RzSmJaeXpPcitmcFJ4ekE3Y2s1Tys4OTBaYmV0TEk3OEY5V0hmYnN6TWl3M2JsTUhSdUlyWE1MYjJPeHFvQmxlYUJta0RkZ2doMjE4SU96cFUxY1E3Ni9MTjJDRW1oRlNtbTZPUlNib28yWkk2cGt3a1lXUjdXNElQNzcyTklEcW5XZXBhSjRRY01obUdyY2Y0ZzRZc1JwRnVwdnAwUzUzS1BUWmQ4TnNRdUloOU1XV2VFMXlwRXpMRVVPbzBPU1I5WjJtY2NWVjEwOHRxS2lkQjdHVUdRRW1iR1ZMdTV0RGJJQUszZWVJUktOd2RyajVQUEtvdlhqUThWWmZ2ZWNSRUtoMHBXZ3lqT2xlcXRkYlRVLzc4UnVlOFU3bm9xckRoWXZwbUlEeldzT0FiTklPQk0zN1I5T3lJYXg4K0t5d2FEOWRCeXRlc3VyaXJXS2lzQ01zQ3dHOTBwYXBVQm8yV2V6TFB4WFFkbW1lZnNuUHIwMjhBcWdVdVRSUFpURjZQdzducWZJazZSSmVPZktLMmpCVCtITVh0WVp6NmJxSE92UWhZVjBSQmFENDVZQUo0QTZwWEMwSXJuazRha2FncDFOR1NNYjlkcEkyUHZDSFRENDhzSnYxK2NpTlAydlFpVkdtN0gvZ0NCOUIxdzg5MFRXMWFXM0ZhS1NjTTlac3lRdnFmYlhYemZQUFlqcGJiYUwrdUJWS2N2ZkhGUmhWbW1EVHkzQ2tzQ2U5dEY5MDdtNHEwWjBTa0dsVm5sb0RvV0NZWFZ6VUdWbTZuWS84M1BsbkM1OWRzbGlxSklsQndFTUw4bmlJUm1CbFJiQXpUd1J6L0hwU2I0Qmtsa28zd2lnam5hc0srUWVLbGhlU2J0WW1lMFFBNFZJV2FIVkhMbWZnd1cxVk16WWIvMHRiSDFFZSsrZ0JtRHVrV0xsRWM5OGVXMmlPR0xhSkQ4L0NNNWl3N0RoZmFvZEVLNFM2MEt5Yk9yTzltMTc3T2RkYXgwQ0ozVDJsb3Frcm9tQmdXcGsvYXQwSmlTVldDK1pCK0ExdGVRYU5OL2tic2FQS2cxRE5SZFBNNEN6Mmlma2xmcjR1elpmTVRWZC9MWGNYSUxqSis4ZXNuL0xtSjNhaGY5alRJcWthSE5ISXBkeWZrN3JEZTdZcFAzR0dOUE9aSkRvQjFZb2lWckhOUmdka3UzY3NXamtyaVFGSUNJaGZzT1M1WkwzZ3VkcmZjMXhDc2pBTW0zczh5L0EwTk9BZ1JCZFpaMmVLeFJ6WUVBUVpOeUlMbzR4NjRvd0ZwRTNrcWNWY09XWFVuTHZDRXZFZlVNTEg0UitNcXZMc2FMVXcwa3docTNDUjBsQm0rK2hIVkdJVTQzbE42d0lZMFR5VkQrdzhGQ0drVVkzV01LN0tUU2t3eGNmSFBZeWlEN1RQNUswUzZHUTF4L0VSZFo5a29vLzRPMDFNZTdCV2tqaFMxWjYzUVBHbHI5dlY5WHVPNFpqcVZJRWJBaEZFVFdJWGRoa3JyWG5BdmRlVmp1R1VhOEozZHcvb0ppeGVUc0szeGpQeXYzRzFlK1NDV2Y4YytKRjY4KzB0VlY4TWhyTVU1bGc2SGFXKzlPSjJOZTFieGpFb1lPamdqamFVM1dUdElvQW1SR2lDUTdhZ1RFRHNtUzVrUGdjdVAwcnlWak4rK2t1SVpCYlgzUXRybVBvYTlUcGkxcmpNbVorNUtBNU9ZYUcrY1NES1NRQ2gwNjZIbzNXSkpZM05XRjZ5NElSS29nWmJkanRwOE9nYmVURUtDaVlGcU9jRDJtTWxyTXp2cTcwUFZqUklKc1BXYmc0dnpPeU9nRWJGaWFTSFpIaCsxWmlrTVFONko4Mm95N3BFczVjR1FodEhCSHRjOXVNWWQ1c2FWbS9mdUl3RFg5L01OSUd6LzNrcGxiMmc1V2p0T2JSWXo4TG13RFFVMjFhaFh4V0k4b2Q2OUo4MjFnMmw4SmRtWERiaEtlN1lqOUprWHdYV0hNdGxHWTFueE91WjdpaGFlWUlYbHRNd0hPMHljZi9WTlRZcytzNmREMFRteXVURC8wckRJRHJoWFBHRHNxUTk0U09ENUREMngzNUJlaE9LUk9JbVg0QjR2MEQwVDQ2WDVSWHZGNGUxSjNtRHlaMnVVcWhKVkFFY05zeW5mOG82M2F6bWJkVlN6L3RZcUZHdDhDMFVRT2tlTTV0SWJEb0p5TmpHR1FjR05LMWRBZTZWekk3R2sxRnplVjhydnc1VkJtVXFhUHpXNkxKRHhLRjR6WjRKZ3JoaExqZ2RjTmhyTEhYRjVBWXVzcTg5QTdMTzNyZlc0V3RpM3Y4TkM5a0pkTWVUSXZnNEtJamtCM2Y3TjQ1ODNtV25oNXRoOFhzZmhGWHA1OG1ObWJXc3pLZTB3cG9hd3pmYnhZMnl1S21oUkFEU1VPVGUxdENZUzNqWUVQbDZ4Z0VjZUplTUx0OHY2dTVvRnhodVBWR3NpZ0FySGxhUlhoYWFsczM3cVU2cFRhMWRrOVBIOXV5eERKUlM1djFCd2Vncmp0bGMyM2hGSS8rRnppY05iUEtFWVFoMDljaDd4SDhvcW1xc3VEWTVTczRtNTVpeE16MVFKeTRYN1FKZVlDcFU2TktxS0NMcDh4YUd2UlM5SzZYdUpYUExrWVFrbnhzV2xqV3E0VVRvKzNYcXFpQ1laNFNCcFBQT1MzRkVPV3o3Vk5rR21mbkRFNWhiTjUzTlJON2s2bDNIZW02NUVsSjNxcjhuSWNJQUtLbElPV0RUWnJxS21ZV3BxL1NEVk53OU1xT0NIV3cyTHFtcVZPelBoV1RmaHZYV2p3WjltN3VMUjdGOE1PSzRnOEdqU2ZxVUc1VVlqM3hiMGtuZEVXTGNjQ3pCZGIzTmRHektONkhRTUhTRFROSmRiRzZILzd4UFFsbGcvaUNNVVZJUFBTcGp2aHJSVzYyWVFSdU9Pd2c0Q3p5M0Y2d0U3L3B2MEZXTFM4QWJsSGVZckNEQnMzWmRYNVRGek15ajJjRCtwbHBGak9EdENLY3MvVDg5TFlQT0tHeWF1VVMyS3hMK09MbGl2VDRNeUVRYk0rcFJMSXF4K1g0dlhBT2N1MnJReWllVmcvendIOFRIRlBZZEVzL1A3djQ5MkVqdGU4KzIzd1lMdzM3Nm50MUdrYkZNdVlBbzVkSmVaSmZZbHpEL3ZlZGhiaUJRNno4SG93ZFFVYWxaUUxYSkdZd3RocjZJZGNmYURZZmc3WGxROURuQU9BRysyUlF6YW5JVHJYYUw3dDFRTkJNN1U4aW5GcTlZeGFRT3lzRUYyN2tjTnByVzBreTk3Zys2ckszUTI4OFMzZzRSU3pZejZMNVRvZjFFQmsxYXZwdGM2emJQUHJ0S1BPQmxpQzZiTDEreGt1TVl0TFFDWFhsVDdubUdJWDNSZ3gzQkFxWnNRR1dSUkZ4UWlFVis5bU9oeVNMWVJ3SWQvNUloYThHN3RiaWhTRzkvbnlYSFVrSUVYcHZhMDAyK0xSU2tpdEJIQzY2WFNnUk1xQWhHR2NpOUNVWUREV1BOYTVxbm9kZVBKQm9sUmthSkhsR1BvQ3QyUTlRaWJTS2wyT3d5b3JLQ0JiRGcvbzVzQWJXZmFyYnVGclF0ejNQOTVpUjVOV0NTNHBEOUludVFCd2xjMlFoSVBUUmUzKytYWngwc0ErcStUMTdWZnNYV3pVZWx4eHl2b1E4emVMUFMwYm51MjhtT0NLQWJFeUZhbUFCSSszRUpJOThndGR4RUpKRlN5ZGRHdHhPYzEzaXArK1Zyc3hmbzVlZldqYU1Jdjh3QjU0WVBZR3FHTXdBdTV0RFFuQTUrRXU3b0NaK1JCMVBhcjludVdhT0F4L2FVZHprc1hHc2o5dksySHVWUlZ6UWhsUjc3K2lhSTZtZ3NOMTluYWJ5dkd2U0hFbWhBREQvWWtmL0NGMnZHU3MzL3JNQk51NHVuVHNYcXQ1WTlyaEtROEdYeFdDY1U0Z3NrNlJFMXBhM1FSWmRvbS9SQXl3Qk9vbEFZSHBOVjdiUTNid1NTS1NjeWVodUlyMmRuMUo2YkhjZ0NrbHVZMVNHUk1BeVJUWTNNYit4emk0a1BaSVNIdkhDVWo3T3lGSVQ5aTRKTDR5Nm1FaW1MWVFsQU5OMGwwR0k1aGt6UXJkYSt6elozU01tV1VhM1gzWTBoQnMvcDVOc1RLUXFDdXhod0xVWFA3OTZXbGpabnlLRHlRenVOc2RFckpIbHB5M2dvT3BlQ0EzOTJkQWNBTnBqZTlyanR3R2gzUzNGQnhMN1RvZTEvZUZrNVdmOTNRVzVpSmh0TGJucGllVGFtaEdqdzhSajEwRGVSSFFDR2lXZHJreE53WDR1ZW9YYnpsSi9RZmxVZ0hTMXJLczYyeUs5RXdKWm1NbS8rTUFYVSs0dm1IcjN4MnBjcncwUUZHOHJhVWZmdEdGZnA0SG5tMXNKaWh5RDFZQ0FsbkErSzF0U3dIbUtoOHVIUU92M1BUbldJc2NDZEFQTjB2RG5jSVJ5aFZhWFBxVTA4c3JEcmpIdllZamFsOXIrU1JkVkJpcGVkZHpxZ09MR3VFZXhVWXlralllaytqZUMyQ3Z0K2oyZCtidit1citqVjM0ZHM5THZGUisrbVJyd1BVTXpHWmU3U0JyN09iYUFwTTNVSWJmbTVmWFZxSHVKd1hkdzRuRWhoVEtwZ0hKQ3k2dzI3akxTOUpnZDBlcTV3d04ra1lBOG5RbkQyTUIwMXU4czg4dFhUL1QwdUo1WjRlZEhrdVo5eXo2VFAvR2ZoR1FIWW04UTZVU0hFQUFwcjVRVHVUQnh1bDFNTm9jUDQwaWpERDgrYzRLZWN0ZDhMREtET3RxNStFVTV2ZXVhTSt0TzhyTS8rU0dNV1RrTUJtNEpBYU5ORFhZUmlDNnk5MXBVYzEwdUJ3dnlCTFduMDFLTXJjNm9xYzNYS3hLc2Y1Q216T2NqKzVZSlRBN1hqbjlRTnRrZThFRjJKU1RVcFhLV3VYbVR3TEFSaXRoTzZzYWovNFBEYnVwTUZ4clpBWUVyWU1saW1RbnRWanlBTzR6NGlVUzhhYThacS9kY3Z6QWkvSnBPSlBBZVJtWnN0RzdOVVBhUFZOVlQ4dUNpaFY3N1dZa2dmUWFRcU4zOFhERnR2T3FmQ2ZmVm81UkJEazZPL2RYeHRjVkhBaU90VGs0NVBCdEIvVXJLSDY3YWhwM0pYNTdCdFdXd2pWVmZlMzB6VFIwUTJ0UXpOUHpLdlVxLzhXVEFYQnZ5dnZvc0RsS2d5QnIrQW5ESVl3T2pCVGJOb013OHN3R1ArUllQSmFXOGY2QldmT2hxOWM0RW1POEl1TUFVMU9IVC9PWStWVThLYjI1cWg3R2VBTExGU2l6YXNpU21tY2JNRTFGY0dQcVNjQkJlU1E1d05kU3NXa0RXZXRYendDTGV2OE1JL3RPTHo4WkFMSm4xYmhkckczTkNvV2c4UC9nM1lORklvdG9ZbzJhUGdneHdjV2pRZUsxK0hNKzVueGhHaGdOcGNpeVIwd1BnNTdRYjgvWkd3MXFWWmtQRE1TM3hpK1JzR3lnSzlkWEpNK3NXMm5IaUwrT0NDODVZUkpVWjAxcXVXSXBjZHkxWnRGbktsaVlEeHNFc1RBK05yQ2JFNDI1ZmF0YXpLek04WGtZcnEwbXFvY3dPbHVPN3hicXUydzZ1OFNpdkpOSmMvYy93QStWZUJoMzlvLzV4UE1zZEgrS0NOam9CSmh2SUpSYlNOUXRBVUFmcXZkNjJKWVRTVUtodkxRdUE3TTRPalpFSzBQV2FPdU1YTjM5NmlYd0NoM0tzUGdocTJLSkhBdTh6QThGQlhxMHVGamN1citWVklhU3FtVGhTQmxkY0xCWjVXVzBOSERQYWZYUk5ZdXg5bHAxYTFsTitON09oNWRmWUxWaCtQb3c4T0cya0lQWUQ5R3h4bVcrQjM0YjNMeThva0JOOElkVURHelBiNCtVQmNFS0lWaHFKcWNMTURtSFYxWG9yUDYxZ1o2ak1TdXBXY1JHcDBsMXNqbFpETGZKTWx3ZCt5MmpjQTkxeTBvY1YxWW5IZ2R6eUhFcGtBa1ljazh5Vy96VXZlT2NVWE50Y3UvOHI3clMrSmpHbGpzS2JZZXhpQW5xTEs2dGJXa2NpRC96Rmk5dENrS2c0RWw4Y1lKMmVnRVZmQVQyd0xneDFsWkpxZURDV3lwcS9mQUx3RU0yakoyV3ZwaGNuYlFtdjZKUEFiVHRzenM0V3FJWUY5MHVmaUZjc1UyWmg3d011Vkx3UVJzeEJ5MzdXSzR3VTA5MzNjWDVjc3BoK3poM1ZGNkdFeGJhbUptTmZqU0pyTGlhNS9Jcmo4OU92YWtjT1ZTcmdNVWtpWnprQWhTZCtTK3MrZzgzS2NpNXA4QXhKa3JtMTBGRFhkczNkQmNiaTdWY1NtYnlWNDcwYnd3Y2E3bHdQMURZMmluZzhLNkZ4dVBkbzUxbGFtUDlrZFRPUlV6Ylc4cFhtYXgwdE5OV1ZGejVuejM0MXJGWnVpRHlYSFpycW9wUGVBMDRPYnA2REp4NDFwWWZtcUd2cmUyd1lKa2RBbjdWL2dWM3Qwc1BMeUNESUVPTlB2cmVPaTIvNXZyNlRrbVYxcUJMaGgyNGFnUDdqclN0and6Rnl2YkpNUkw4cU9YK1pBMERYUG5yQ2U1NWVuNks2c2JaTnd3aGQ5NktlKy83VVI2M1VKM0xyc2pBSVJpMUs3aFZtV1dxVGV4UzVQdnR2b3hJaHN5OUpTNmtmNnpJM3NuTzlOOEJsaXlYL1hmU1JBdmJYanZZQnQ5UDBST3NGa2VJMS8wcGxkOW4rdWVkWVZuVFZwcEpoTEx3b2h1UHVGS2hlUWp0dnBjaWpKZ2FXSUM0bEtpaXJsRk9tcDVJaFRaUGVmTGRKbHJBQm82bHZUcDRRSmR1YmNoaVpSMGpOUTBhMWVENTRzcTAwQzdnVk1HSndPcW1Zc3NPQ3J4TXVISjBscHZxQWNqeHFTZ1Jzamh1d1VLbmRoUGxnUFFPOGwvbFIxa1dFZGl3d1JZMFB6ZXE0UGdrQkVhY2ZQT0lQS2NwZnA0Znc0WUtyOUxDVHBCb25SZVlWL2ZDRnNvRHFEY0Jhb1FRNU5KOHlxa2Q4czF6K2FMRjJvZ0l0c1Axa3QyL0F6bTgyb1czNzVMV1RYZkdIaThzaWxIcFdQSk91STZ2ZEdWQlJIMXNwUGdPeDh4NEV0L1d2ck84S0pwOWZNVVpqY3AwcnhTRXpmUW52WGpxTSs4Z0Nid3Q1YlZLUVlMcDMzbHJ3b29NVDZxR2VjZzJ2MkVEaEhOZ0E0VU8rNk9oaVRhZ3c5NFpOaGdSNG5HYVYwUFdkc29WeG1EUEg0TlViSHhMQU5pT2FnRmpPTmJibVU2ekswOTJwR1ZSd1oxSWVkdmc5eVJyemdlT0J6WVRuRGpGZXQwNk5MRU5VVlBXTzlQMCtDQkdYQnF0M1ZoSm5oOHBuWUx4YzBoZjUrVllDa2tTTkFqV1RwZGFqblkwNnNxcW5pQ3FwNzhmK0NqUkFBUDZWTVVpU1RvWmhBTU5DSEo4VC9KRFpRVWQxemVJdlBOeVArVEswNnY4U3FQMEZpeFA1ek44NWlaK2JRSU9hbDVhTGg2NDFWRWNYVlFlUnIzOEhUSDRDc2VSTFZlN0NDK2pMSFRQYTlKY1ZXY3MvSUNjMWRNVlJoQndxK0dNYmdmNWlCbFNvUXpMOUNkMHBHQ3dVTlduaS9pcHRlUzR1L3NrV3pVSW9BRXlIUXZlUFR0SkRBQ3VzUVJhdDR6eFU3Vk85eDFxQ3lFR1pZNVdDTjZTY0NhRHd1eSs0NG5IMExqcG1HVkVrUXJoeExzMmhiUU92R3pZZlIxZGxVU3NaKzg1ejlReno2dkxIZmYxaTZDWkZIUmFnOXRMOWxhZmt6VDhHZTBQRnNxV3cwWFdodlBJd0FTc1A0VnFTVHRSWFQrYTdkdXRHY290dGcyS2lrUWp0UjFJaXBzWGRYenViSm81cGIwcjBwWU4rM3FDSlJOYzh6ZWJqZm9xTzQ3VHdSODRKRGtKZHYwRHFXNEhseW03dW0yaDcydDBsMzJ3WmdPR1d3eXRJRXkrbzFMdXlrNzFhQ0syQkRuS0lnNjRNQStYWWJ1cUM5VzduSUIvcG5MQlozMXBBY3ZoR0o1YUpQQzJyd3lVOFNOaWhMS1pBT1ltdnR1S2hTZ01lemZHY0EvUHhEMVByYnFIa3UvTmpJTmZxUVJlR1ZWSzNURyszYzg5WUo4dmJhdmRMNHprdnMxRmFyTEZLNDQ4dG1jZkpMREFUNmNqSEJibnMvTTlkNUhrZWYxZ09JNFh0QmE1UFpuM0N5akkwODlIeGJhVCtIRXRUNnlwWGtSNlZ3L0ZFcEx6YnNuUXFLdzZCMG52dHU4RHcwOXlmVFVxVWhCU1JYM2ZHUzd3US9rKzFlbDhJajBpVUNadUVLVi9ZV014cXN2RFJqT09TVmNiek5YZzlJZUFoeEdFVy9kS1hta0RLRHdVNnB1Mmw3SkpDK2tGYWdZOVFjT2hZZDkvRXFFa3UwSEdSWDlJZGRUZzI3bThROFUxSVZEM0RYQnBXWVd5K3lVZmRJMFNVYlcwQWZsMTg5dlJUd253Q2NnMy9XV0FDZ2d4TlJyZElFY1ZmS2tKbDhOM2l5bnlyVWZWQUl1RFJjOUJtR2YwVjlKMk5WcmRUcjhPaFRuOElxeFQxZExHUnlFZXE0TGR2cnVmcHdsekEzTjA2QThZOU9mY2Y2M1NxSjVuMEQ0b093U3RZSytrN3IzSlZ2NVJFK1grejAwY1pyMTk1RjNDNklGWDNmRWtCUmpRb3lvc0ZPa2RudTlIeVhyRyt3bVRKUWI5dEdlcVdWT0plVU1RMnRqYzl3c05RbEM5VSs1a1g2UDNXSnUxWVRGNjdRODdHNzVIVkZ1T0N0azZadk9xUE5yMkR0Z3hndUFBMnVGblRrTVRlaE96ZG1YYVpXOE8zemp5OVd4RCt2QnJXRHFVdUhIVklzcE5ZS2hQWGVnUllTcUxBY1l6QlkrYklzWUFSMFcyemdHZFpILzVEamdsckczZzVoRm1FaVR1bGh3Y1RuUDlCS01laVVFVy81bis2L1RsbGFqOEQ1Y2ZoNndXRTVQa3VRaHRPbXZXbkhoR1RuT1cxYzh1Ym9yalcwQXpVb3dVc1NlR2l4bDdwYm9TOEJvQjZ1bG9tdDVzWWFwbldrV1lZWDJUWDUwUXFCM3JVSndiSlpwUEt6VC9kaTVUOW14Z3pJR3RZK3kxTG1ZRjF4SVJ5ZEZRbTRtaFR6VGNmMXBaWWl1WUtWKzBqNGZTbG1XQUlhSlpiY3dpVTZiNnFNb3ZVVjR0SmdwYWlyakxVYnkzSVRST1RuUklBRjBCRkprTThkTzdtS0Q0OHJiMk9jL0ZCU2V0RE5zUzhHaGZUa2k2VVVZOU8vMTh0ZzBIN2FmS2tYb3NvYlh4Q1c1RDFXamJDK0xiRnpOQWYzVXU1TnFlcGtGWUNwQ1NjQ2dyYTNMSENVUDQrNW5qbkxaREJyUmx1eVAzY1AwUC9lVFFwMFJpWm1lODhtSTYzVTluVTNTUUV3RE9MVXVEamMyOXNSMGFrWjNGeDR6cUZJM0cySVpDUVM0eXhBNEhkWXVNU3hlN2QyNnBqS0NZUGlBNnpGVnpEL05NaUwveXVEdDd6QlpmaGt5Q2pOMjJRVjEyV01jZTJOenB3UzZjTVl3dTZjN09PZFAzM3oxaFk3YUgvTk1Pem1nVUdNQjVGQk5jdXp0ZDN0YlhuR0VZY01TR3FoMWpCL3pzR05OOG5KSEQ2M2N5dzRFK2xqdmV6WWpuMTFCOWNGTWNTcjFja21IYmdDUmgxNXVla0VkcWRjMUNZbk02NDV0UEg4cWFDY3kxdVBYdE5KUkRMSGJ6Y2dMRnBSV3RobHVnU1J5ZThhanFlZGNHTEFnS0hpVkVYQUdrVzRPeWxPbmNHSXhQL1BrKzhkb25ZbWp6bWcyN2Z3V0hmbWZMSWVSY2ZoMXFic2pzZ3hpOHk1WlB2OE4zOVpmOWx3Vm1mNjhVc2J3aVQwcUZXVEF0cmE0RXVrTnhtQWU3NUMwVS82dHk5dENhbGhFdWFNNlg1Q093K2lKaXlHQ3cyY1VGM3dRemliQ1NJYjVDeDBWZ0p1R01GVWk2K2gwcFVFVWlVK1RnYWxmajdraStoVGZEWXZvdTV0SUNTYjM4UlNSOEdsMU1PNThtRWQ5eUtwOWFYdE5DRHNUQmdrUGltSTNUMVluNi9lZ3NZZTE4ekVCYkhtdXpDTzk3ZG9aT013U1FTUThNVXhoK1p1Q0xxK3BkdHBMYUlUNis5ZEFiTU93bnllMWxjU2NpTEkvUFdObEJnTFIxYUQ4akhZR3EzYTJsOW9MT2NBTlpDa2h0ZVljSzBkMy9ESDFxS0pycm14a3VaWkxBcFNEdFVETVhjRGJnRG5WRS9tYzBnYjV2SFFUZmRTc3JvWjRNN3F1Si9memJXajREa3JaSDJqdFlNU0RxdGppU29xc2NXb2thYWZGTCtFOGhFVVVnY0FlcFJNZUdVNmRiVzhKTWJpb3Z5aFRnNXRQVGtGZ1N2MUkvWk1NZTNiZEp6RE9zWHdFV2hwUEpHYTUrN2I4SWNtdStwY2VMY1ZTSDQwZzRjT2Z0NjNmVmo3dGQzdmFOUmdQWjlwUWljZlFVR0lQMWRwdnpWVnhBdDNTeklkRUM0V2hrNGwvUUVNelNkSUxaNzZ1NHFsNGExUnorMVFHZFo3bkFJalErakxoN2NjeFFqcnZRUFV5ajBqcmI2R0syMzBEck5DMnkvV25xSUNKdExGVVJBS2syQ1crUlIrWW13MUdjVDRNeWVKMFVab1J4K05SclFYT0Q3SWE0L3BpMUxyaVA3YkdVK1U3NkdVR0JlcG1KZGdVdXpBNkJZSFZRb3d0MEtGdVd6R2RjTmdvTUR2QlNtUTFEbVJ3MHJkTFpZVlIrSmJMRGFuWjlBMTF0SlNPUmdUWVd4R0RUU1luVGx3SnFJSXJxRGpGRFgvdjVmelBnNlZWYlpkTE1yaVNwVU9TVWVabFJ3Ujg5aFdMOVR4SnV6d0xYa2dQTEcrc2pCZnM2YUVuVGRxM1FDN2ZYdiswV1kwVzE0RHNkb1pSWFNCdzQzNkR2VVcvd2k3WE5PZzR5Vk9vVEJQTlJrNmk3eUJCZWhxN21lQ0tUeUVCSWgzZE9BMzZBaDFyeUtFcHpuNUJHRVpNNENzZzd6bmZCQkdjZkQyOHBGeks3U01ieStuVHJlVlMrcnR6ekdBSGNCd3d4aE4zcXNHODV1WkxkRWMvcWNXTnBhZ09pT0d0blVqMEQyeTNJSXdOY1JwUmVYUlVXVFl2YUYxZjlleVhQN0JPV3BWcGU4TjRxazF4OWtaTm03VVlhNlA3ZlRiU2NCWTdWczFRVU1qRE1yTXdFcXJDK042TXNGWGZNZlgxc2pJOWNEU0tYazVLazdjQVJRWUFuQ2Z3ZGJSckJpNWtjY1VlNS92SG9EZUM4Q2M3N2hqb0t5Y28wdEJ4cis3R0JMRWVLNEFtcjBTSndET2ZCR1IzUVlwM005YjZPaGJiL09hbG9JRXJlNWI0dFV4N0d1aERUSFhjTERaM3FyS1dRN3NnaVlTTVc0ekdlcjRNOUFVVXpRMSs4Vm5FL1ViMHV3Ty9kU2J6MitNZzZqMlo1c3lESS9Oa1Y5YVIyMDdsSnYwZXJpelpMTzZHa0FYNW1kTWZNT00xdUNpVStSbkZuTElsQ2l6a1Y4MjdLWmFqZ040L09meWhjNXIrZWZjQXcvZUxGUi9ER0s5MGFwRTM4TTM1WUR1Z2U4cnRhWDRmSDV4N1lpUnhMK2ZGaXBKTUxnTVVPYmFxNVFPeGJZOG91TDUvTTZmNUFENE1hcVdGOHA4YklGRnRESkFuR1JJNzdONk1kY2VScmVFNWNSY1B1Ly9EeWI1ZjFlWmFxOE1YUDhyazlabFRCNlZoSDVrK2NHY2M0THJJVkpxODNKaVA1Rkx0TGdzNTE4NE5McEpNRVdNR3J4OFJ1RFgxVHYwSW9GblplQVYxRDJldUF4a0YwVTVyby8yWm9vanNwN0tKeklwVklxSWJPSkhGR1c1ZHlKTXRPb2puTSt2OUIxdWkrWXpML05rdHpmaXFlM0UzN1hFNFp1YmZXcnJ5L2VDdTZwV0J5MS90RWdMOVRJeGZzMW51VVZwUGpzanQ0dXZRM3Q1aU0zeTJ1ejJyQm1MR295ZGNMOWt0UHZWRU0yM3NTbTMwNGw1RkZLRG00RVJvLzZKWmIyZVh3UU9LZEdqOXpJU2dPNk1DNGM4M0I3SFJ6bFpVd1lPTkhmamRza0dSK3V5OW9rNEd4V0FLQTVhN1JwREZ1dGUyWHRnQzVPNklleUxiT2czVDZneWJIcnkwdE05dkk2czQwSDdXOTVUVVh0NjFNdTl0WEVxNmZSa0gxMEJSWU9rK1AxUVIwVDk4cm1hbXNySXU2ZzhHS0lxendPRUI2MzRhWGpFSTlkdytRazNTV2FYNTExT1N6NmZLOTlFRDdmUXFwRTNybHcrUFh3YkNoSXdVMXVZa2JxWUErWGRsNlUzc1lIdjNzTzZwZVNaREZscURjaTFTUUZ0MHZXVXRFdE1oVHdLdzVLWDRDd0hINitpUUVhazc1MXhheFE4d29ZczhQU2tOVnNsN3hrdkNSM1Q1QVI4anZ6OFA3dnZ1Ny9NdldpL29HdGZreGwrbzVxeUhHWVFReWg3VFUzSzM4MTBDUEhZOW5ocEhyeXBNTWM1dzIrczVTRVE5SGdhWDA2RkVvQjBId1U3eVVoNXVlcy93MTVNekhiS0VuS0Myd3NDTVpWN3lyVUtjdFlJVC9EdXdLTmlnRUNqTlNDdzJwbnJsOEJicUFOaEtjc0VkaVR6c3haZWlWT2Job0ZnZVVQL3FOMjdLWDRKcDN4OU8xNFBvVTQ5SSt2TEhidytudkNWanV3K21NQ3R4Z20zUnl1c2QwdXloeTVkelJQYjEvMmtSN2lNd2llZzAzcHBURG5NZjdHOHFzeTNocU1kTW41cEwwcHpQT21DOXlBT1l0VUdLNlAybDZBTFVNUWhVV29HM3NrZ0VEMW9vT1k0bDNaS3Y0aC9tdkk3d1l3aTRNWk5va3IvSitYWGZHQlplTkxISUd5WGVXUk9vZGx1OS90UThyNVFiVndxdVozMEdRcklSVXVxOVhHWHh5blcyQ0pZT1hTME9TcnBYa2ZmbU9xZ1c2eVF3YUdoVGZvbHRCTEdweUZoeFBPbm9saGdyeFJidkJtRHRjT0UrMyttTDk4Q0IvS2tFWnFiK25oTmp6WWh3OGhmSXg5TCtjazlKcFd0MER2MHZsTFVhZ3dGdzdIb3pTclpjWE0welFtb2J2aUFqTnAxWWVxZ2s0S1FzTmNrbFZxZjVvQjh5NUM5d1plbUxNYUFESThpaEd4dkIxeERvaTR6VmJJWllVY0F0L0h6bzRKbnFlTXhsRm1mcEhHL2tXMUxwZlNZTHpNQzY0T1FBR01QejRvUllMODczZ2tSbXdJYU91LzduQndMTXhZZWZuUHJ0eWdvaFJTaHU4ME56VjlNRFFZMTFuUloxbVdmclRYR3IvRzZ5TW9IN0pidXU0UjNTRVp1RjdxVUhtUFhRdDhYKzhkOFNwZzN4Y2RWZ2pudEZ5UVhIMWt3RmRzWmdWajY5WDEwUkx3cHIzbEM2aVAzUjBQOVhKM2lSazBUNjYzSEZHdUVLaXNxcmhmWmoveTloeDYra20xM0NLa2orMkZKeFFPeXF1WE9EWFNsbVYvSlVsSytuQVJ1WkpJeWxPeXp1My9ZUXVZcmFCOXBVY3d3RWtlUFRaQUk3VjdBeHl6WHRkK3ZnWlpVZ1VnbUFjQXd3RkRUWmRHUlJVbE56NTZlc1RzNm5IOUFDWk40eERjbkdIZ0t1dk5zZE9oVDR0Vnd6MllzbW5wTy9waThhOUtHbkkzTldJQlNlSXVWYlhPZEN6VVdzSTJGQlFSSlhjVTh4Umc2UTFCampQVGxrQmJ2cDV5eFFRLzRCM3htZUE5Y2lGYm1uQ2ZlS0E2bFFNQlVSV2t5amkvcGJrM0dmREhTQmw3R29KMFZPOCtpdlZEbVJNRGdhbkRveFJ1OE9abXpsSmd3MmtlY1Jtb2VNa1NBRVgxTThjRGs2Zi9ISHJrSkFPbTFtZ2VUZWFhYWpJWEd5aWtOaG9vNm8wblFRTTU3UzNLcjNlaC9ncFp4MVhGZmVyejFUWDdWUEowUWljNG95REpnTzZObFNMUXhodzdwMGtpb25qMFQveUxjN25RNkRZVk92Vk16a3ozUGt4NUZsMEJFd1FtM3NJVkxjcDFuWExrczJiMjI1ZnVjVll1aERSNkZ1Zm8xUVlQQWw2ejhocDFmaExGdUwxRjRBWkhaVG1YRWNiemhxRVNEZkFKcGd1N00xVEV3ZHJxTkc2My9vS0UwWUtyTEZqdDB2NXEyM1FsRTkvdkhFb284MHhHNTdObnFsWTcwNTFDeEtmSHkzSGY4L2VVV1NRUEVoRy9wYTh4NUk3SnErSm1zQWovVFFxaklocWk5YjczMG5jZU1tMTExbTQ5QmRXRWtjSTRqaEpoa1VPc0pRUjg3VnFXWlV6cElaODlUNitPSVNMT0RzUlk4ZysxVWh4eGsxM1l2SzJSb3BuYnhxRDlSbTJ0a3ZnSXJvTVErRHAxTnlCNDdHYzZmZXhqcUVPVTAyYkQ4WWEySGVocFVhTTZqY2JyQXRnVC93aExhVnpQRHd0YmdaNHE2ZjlrUnVwM2lNREl2bUZiRktmYVdPMlYwZURkbVBWM0k2S09UVzIzOGoyRmVLb1lKWFRBVGFaUUo5UDl5VXVnV2wwQW5qLzQzNDI1QlBraXNrLzJnK0tPNk9kQ2o5WFdRUmIzWGM3YytxV1FsV3NDbjQ5WlJsTUJ3U1lhS0FZQy9BWVVXOExBcGh5c2hLWVNOVmhqNGJwRWR2dGN3c1BuallmbS9ielJCc3FWeG1YMHlVYnRPazZDeTdOZElVMEg1ODZtdEhOdmhLcHljQ1I3Ylk4OWtPaTREU3UvQUExSzIxYkF2NElpbkdYUkFkVExudGpyTjFvbWJsYU5OenRtWjk5Sjk3bmxQN0FzeVpUNkJFaW55Q2gzb2V5ejduRmh0M2d0TVNpMUw3NEpqZjRNcStNMVNyNmh2U0luZmhWRm5hSHZWK043cTA1WFVycFFpSU1UZlFXTElDRVZXMVJZWHZXUWZPUlBUbWt1aWl0bHlaRFFWS0ZhK3l1S2QxSVVyNXl6bXBtZnRsbFRKSHMwMEZnY04vSEU3TEU4UkRPeFpkcEs3SlYyclRqQ0Zzd241OU5UeXR3dzdaT1hoR0dvVWtSQWE5QkYvSktJS0tlVGUwRnY4bE9lSkU2ZW5RQjRlbHdTempMQmpObFREZGhlcWE4dkZlbklXZ3diSWNBbUNIVUVhWXZkUkNVK2hwMng3NkR1YzY0N0NndHRmanFzZjdmT1FleGRRSm9ub3V4MEZpOFV6SEtUZTZJTzJBcXNnc0J3R1JsejRhQVUvbEtMbnRIMHN2MWtETE5LckZkTEErQTJ1NjA4UFo4U3l2VVh6bXVXWHZIVDVjWVFheUhmVm1keHJwa05MMzBNNEF1dlNOUTV5V1djaTJ3SnlOWDBaRXpJSm5wQnZYd1NIMGZzcisvdmpiaWRuam0xNzNuWWFaSkFLUkY3cDBoQlgzSUlKeVpDSFJYZUp3SWVrZ2h4R3ZXMWI1OEw1QmdaSmRPMDBiYnlhZlI3RUxyOWZITVl1Z2xNS2lVZXU1anFseWRqNXIvWjJpNkhnWE40bDJyOWx2ZDdrOEJPVWFkRVh1SkVFazFOVU1zN2g2bm0vTnplQWhLWUhLejZoNmJybk00OXdLOWU1SndMYWlWdGFUZS8vRFNxSmx5YkVTeU1LL1pYMHcxNFpWMVRCcG1VRGlFNFo4UzZpcGQ5MTg1OURicWVhZEo0cHJwcitFbWswUGwyaXhTUTJGTTYzT0MrOXppWjVmdlN5a2hYVWx2VitHdDN4bFFkZGpWVjVSZFlFZ3B0cmY4cVJrcnk5ZVN0Z0hLdWVsUmZST1NRSjV0a0E2ejFFSmwxSVRBcU1Ma2xBN1lzMnpqNmN4S2lpcWFBN2swWHNnbjlFNjIxMFhsZU41SG9JZ1BBOHhUbVZHQkt1Q0dTNTl2K25lMjNmSytZTE56RmkrT1JqNVVjYTJndnVac3BzMjJSTnRmR0diekl0US9VSEhwSFR5c1pzUmQ2emlEQW5XTXJybGpkV0cwZTRXeHl0YjNab3J1NTZ5UEhNZEdHNEc3R0ZuWGVudUF6MjVEeDdXZFhKT1pEK29abHlhS2VqVThBRzdhYVRNajEwZHJTY2lxWU1GMjFTNFdIak1MSWtPei9hS1JST2pnL3NoSHRaeEFPQ1pnak5wUnBHNEZDWnBUdEhLTWdrYXIwSVVqdEs1ZDVUYi9UOWVFZzBCcFd4WklzTmRCdWFRNFRXQXBkWktESCt2WWc0b05Ud1Ewb21GWkltVmNkN3VURFN4UmNncFRlR1pTcEJPSXhlU2VOZzBmd0hBMUQ2U1huTXhDT3JLNkg2bm9EMXhCOWVtbjcxbDJyVWwyZ3BMcUovdDRBbmFpbm03eFhQb0h2VHNjNE9uTDkzTU04SVNXSnRvTlIvUkNWK2Qzb1diamh4dGY3T1Q1c24yZmR5bXRDUVcySDVPN2tjNlBWQU5Hc0M5cUNkVmV1ajgvVWVNZEk4NWJpUm5heUl5UXJzZ3lRQlZtbGJNYW9ZK2YxYzErZVgxS1RRUk9aZFVwc3BNZkQ4L050WmNKZzZjcmlEY0NZUzZQVFhkUHZwTEJIalFUd3lQWUFXZFFPQzZIMGhDeWlmcGF1ZmNRN1RjUDZDSzU5UGZ5SE9XV1pxODlscDlIYVZZTTNKdEdsQ21OM2pGMzFzWG5Ydk5iVlZmTGJWRndzanhvQjkvRktPRWhlNWtHK2wxRDMrQlYrdEVYUm1ncVR3LzkzeEgvcGllckVkWURFQUtrSlh1SGo4Q21yUVU2U09ZK1ltV1NIVHh6THZ5bndST0g4d2pIaWIrL1RXbTdtZVVPR29yd05NWFpvQWd3VERLMHhpZUg3ZEcwUmxuMmFPcGwrWmx3RGszZ01NQlJ1YWtscVVUS04vSW5HR1BHSWJFNm9zV0NQTUNzRVJWUTJtZ3pRMHlIOEl5c2hvQnNLL2NRa1BnYXQ3cEdjQmZXbm5GV29TekJlOXJ2ZUl0NCtmcU1rWldEZHZ6UkZxZ2hoaEJIL0RQeEhvbC94MDRSenVUTm1yMGUxcmtTbHJzeXdkbnU3cThlVmVBVDc5YVlGdWtoV05EOHQ5UTFRNXJQa0MwK0VrQjFXTnlrSGVtL29qdGw1Z3d4elV5czJuZUUzbkRmWU00cHgzMnI0M3BpRzU5QUc2RW1mQkpndllvYWZ2aFJHbkVlQ05GRFIvTzliT0IycWZ5VnltTVZzenNJSnZwcHAzR1oyOWJmKzR1TDFRaitxcUZ4VGxhNXloaDlvYVMvMFcxOFVMQkhrK2NTOGJTRlUvazZwbFg0d1NTTjlMQ2IwTFZ2Z3Nya2syQXdVQW9WK2VCcWliNnI1NThPbnNmQmNWMzNPVlMyazlnNzRHOE1uWTBzaVlESVBoeW11bzJvZkRoUmdjd1BTZFJPTVpIdGtFbXNZcDhKaTA2VUVKNjc4SkJFWXJFNHVDOEJtc0ZDdm1RV2doWjFQSm9sSGw3eU5HeTBmbHRkeFNSWUtMUjh0YTRmQTNDNUd0S0xra01VNDlFWjJGWjRXekhuUWdqWlJ6SjhVVnFFRElOZXlCcGh1bFo5OS95N0pRN3gxYnp2ZTlqdWNla3I1RjJmdkJwWmZNa0YwVXFUZTdDblg4RXJBK1dXRlRFK252VlM0YWhGc0cyb1BNUE91V0NEQW44Q2VVVGd2MUFxcUE0ZGpieWgzTFRiY2J3c05YSUQrVmVuOEpLVEQ2MmN4VmhieEdZZ1ozMi9rcDk0cUlwVUdtdHdLUFc1c0F4YXdYa1VMVlozSVBZMkp3SzhOeUVsL3pxVS8yZTByUndhNTl4TDFWRW13NHZxZFBORi8wTHdOZnd2VU54bXQ0dm5oQmk3OEJGbFZXUmdPcTRacUJwcjZRWFVCYkRZSVJ0UFk3enVaQTl1eTdMZjRKWUliS2V2WEFkZzIvM0JHTzR3dUdpR2lqTGpzNklKTUpDL3hwazd2ZjN2ZTJLbGhjeE5NSzBzdi9GaHlqK3A3L1VqcStGUjVLbThGY0VxSloydFpKMm5vek9Mc0hWZWs1MStKSjQxS3loQ29yaUYvTmszMnI1Wkp0aG94NWNVamhXTTBQWG9qRXZBcHB5VldGM056Mm52ZkcrcWFQYldoWEowL2dYcXk2eHFRaDhYNDk5VDBNbzQ5TUpQM0xyRkNqalFaMkppazZ6MzdSdStpY3pOTTdlSHRVTWkrbzVURjlNeDBUNS9LZUNQTGVZK0tRMHhRc05IdmJHWFRpM3dmU2ZhR3RTU2VrSm4xV0FoTVo4Y05NRXdUUXdlK3BrSUF1MVJSbS9selNFbTdxdjhzazhxeVQrRW9WTC93dVd4T21pQk5xZTV3MVRFSEdtK2p0Nzc5bTJJRXQ1ak9YMHNINmJSYUZZVVZkZUpjZjhrc21pS3VCMjV4Q0FlaW5XaUtlMlZUeXdKcVF1QktJeS8wT2JPVFdtTGlMcXh2VlF1dE1vOTAwKzEvR2VBOUl6cUUrbG5YVkdWR1kxYWEvM2Mrak8vZjU4Sjk0ZFk3RU50Y1dLWklYSHdybU1KYVZvbDhzZEhNeGpYRm1MdWtnREErNVJ6NTlnZmNicW9QYjJaQ1RlZkU2UStGZkVQWlkwaDVjeW1kODIzN01ycnVnVXdmUTNrNnp2NytlS1A1UVZyZmtIVmU2MkhNeTcyUEV0RXVpQ2ZLUGZiT0VBcy92ZnRJS0xwYVJlZzluOU50TTFHcFEydXNkU1dodVNlMDRXcnY2UjFEV3VWU2NkellENnFQeGFYUlIwWXJMLzlPU2tBRDRIcnVJL1JDSXVFVFBlZ0ZnU0hNUFlkclhUK1RZWjhBSWdhY0Z5NHR0dTYxWUpud202SGJVbE4zKzFOZGJTbnhoUitwZUNFY3YrRHFiSW1TM2o3RTk0TGhBeWgrU1EzV01Ndnh2bmJDbUM0dXJpcWRKWmkxNnVlbFVocEhqNVpoWi9qdHA0VW9vRnZ6UXp3R3JTeTFSc2d1MHdkcGp1T29iQ0orWENneFVjWmdDOTZVY09yQUpkcmMxMkpDekRqUXdza0plMS9XcjJvTTEyYlRzLzl3YXFsZ1dUcVlUa1I0dHgydmU2dHA4Rk5URXNVeGp5QVlpVHRvZzB0SXJXNU1OQnhFNGZPNXY3OGh6dFd1d3hLamkzU3BuQTBVWkRvYVpzQU9ocDlSNWkxSUlrUUF3UjNTVlg5Q1lVdkdCYzJqSDJ4Z2xYQ3RjM3F6cVVwbFAvRVRudFYzamlBOENhYWlJQ2h2enpma2R3MVZsNkFoYVk3Qm1TclNSQlIvMlJWb1lYSmd1czBxRXlQa3V5OXJtcWdYWGNoS05VS2cyaDQ3cU9kZm1ad3N0c0lMRlNNN2NTaVc2ak5aMXlUNUFpNVpra0dhWDZDYXJpckx6WElEcyt0aUtpMW9NS3BEYnhmTC8zWnFFR3luZDVUZDhueUZQM1dFd0wzQWFubGVzUm9nSnB0V1pZc0xRekNFS1B1djVxNDcrcjNJQWRvTmszV2EwWmpKRnd6amJjR3hsTDFpdEdweTRDRS82aHppWW9mVkZNUkdLSlNuRHdHeG1RMm41VlNRY2RHNUE5YUdWZVhGK0ROZmhMa29hUW9IQURUUE5JcFZ0WXVMNzRRUldPVDZwSFV0QTY5U200N1BUaXd4TEdTOVN6RGJoVVJWWVBHaUo0VDZGdy9pUkFPNXdlV3QrTjM3c0VGWjZQY0RhcHA5NmNLWjcyd0JxTWJVZXRMQWRGeEUwNjhOYWQxNERKUFdCTXNPYWVzOHhvK21ybXFKV0pTcU1BcUhVT21qc2JwRXgzODNwN25kK0NqcHlGNDhpamFDNmJNaFhqTGNKL0pYQllMYmhJQWpiREpwb0JtbzV6SnQxUk81Q3FBYWhVbzB2VkJxdlA0N1NZaWZJZEdjZG8ycFlaQXdqczUzL243bDNzTnY5WHVOUElZWlY1bWYvU3p0NldndkNXNlBFM1ZHVDNJYnh4ZTQrYVNLSDYxRnRqQ3RPSjBycUlJUHVpUkF0U1QyWlZoMm1GTmMxWTZ4bmo1NjV1NGlYUkw2L0ZTQzBXc3krY3VWYWJhVkNyMHVaTldybVdja1hHUFgyTEpuZWJBaGM4K25aaFdnTzZjcTVTS1dhZktUVXAyT3QxTTFHTHgxUnpLYVdUbmxhMkFiZ01kL2FVTFdXbmpKL3duOE5WdDVEMnZoK2wzQmRIMEVTNjJZWkthVmJvWlBSZ3R1QTVrV29nWWtEanJ1RUFjNElLSXpRYWt2M1l0YnF0Z2QvMVBoT0lsRGdDUEp2ZG16UkNPU1lzV2FTQ3J4bDQvZHRZZ0ErUFFPQ3BmSWpzbWptR01Uc2pCU1hvczhBT2ZlQUsrc0RrdUNRR09KOXE2M2dtb09ENjNDbEZYMXozaExyaS84dkRjRFdQaStYQ292aUk3cEFMR3dzM1dCd0FtdE1FcHZDdzg0aytTRkpPb2hGa25rUExwMm9pRnZ3Y0FkeTkvOGl3eWEvS1ZnZEcvc1A2ejFIbWc1eDB2SmRkcndhVXVtcDg2NEJhWFMxcHpvTE4vYytLUGwyRWtoeFh0ZnBYWCt2RzkzNG9TVmhBMEN0RzBDY2pvdGJEWjhuclM5RWJUdHdZRGdZQWFGUG5mbTZPQU1EUSt3NTdEeUt5UXI0RkJkMWxJV1RjYkhleitiL29WRisxNHRHSmxocjREbE9VOW5uUjdTZ3pxV1FnclhuNGdKdllEdzBRNjczOHRCY0plUk1qQ1pBOHJhUlJHWmFJSCtNKzFlcllKcFprVDY5YVJzWXltK3dWRm5zdUtPem9xcGRJaGFPR250ZlM3aTM3anNCS2E5WEtkRjVoTmpINmp2eHZWdG1EU0tKbDdrMWhHd0hQa0VTNExVV2Zic1B6K09HU1VwWWx3aGdiSmZnc0N4OEpKeGtkaUVVZzRYbmlZL290MkpxQWxGWTVoYk04RUxZalFjL0IxdVVNNlNaWlJ3cThEYUk4VkZVNlQ1YzVhNUdIYlQyZ3JSZnBZNXJ6MUlxTmVJVmxyaGh2dWxaeldaVjZQR3l5MFAzaTczMzhobWNqQkp0ODRlbEQ2UDRXL1lIUFIvOHdyMWYybkdHaS82ejBCczZwZlFwOStsZW11Q0R1c3dHNmNCZU50UGczbDNaZTl0b2tMSkE4c2R4NXZqelJrMEkzRU5lTWs4Und3YVVQRkxkWE9tSVcvak1nVVorMCtUUGV2bTZXcGM1WCthWU11QkpnVzRQcDRBbmZYZmwzN3h0TXhRWkhUeituRFJKZEx4VG16UytCclE2aUxCRTRaelh5NHlqN3l5SThVY0JNRFhkYjY4OGtoOXVORm4rRGYyWXN2OFBuclR2ekFXdno0dHBEcjJtdGIxVmlpTmNGTlFKdmoybFBCNXJQd3VQendsVVNnem1GNjVoT2t6UHk3bmlNb1p1SXorMWtJRjI2dG1nb2ZuZ1V5ek4vbVRDNUIzNXlqeThFS1MzWG9jZW9Vc0pvQTNqQWt2ZVB2T1FZc25qakdYdys4TndKTGM0QzVtZTRZa0lzRU9kbFVpd1l1WmtaN0hnU1QvVmJvMEhGTnBrL0UxZi9CRW42Mmh3NUUrZ0h0eFpjMWhZSURWSmlHRGhrdjQyenkxUStKT2tCa1g2UzBiZk5UZUR1dDkwNCtVOVl4Y2x4TzZmR09SRGxacEVZR2pQUXU1QUhQZDNEU0pNVnhyUmkwbHNtZm0zTEJuM3h1RmZZc2NjZUxIZ2R2SE1PZWRLRW9HMU9HVjRjd0JlVmJtUnk4MndxbkFmdWhYUGxYM05lZ29mYkhac0VQeHpnT1dFYThldlZFSkdGZmpaVW9LNWU1Q0dwSlJEN3NZdTk4TTFIOG4rN1huUktGSHltamdTaFU2enBkcmQwb2dYZmtyd0p1QU5uUlBWSHNjTG9yNE9jcmVvdDlGTFh3QmljTmU3dmtCQjZibmNnZmlJaHliWDA4K3ptS2xIYUtUU1FjN1Jjb0VZcXc3UG81cjEySmZmTndoRUQ3L0JKNzhVZXZtWmpwYTBiS3hETEwxanFqRk9lRE55VXlRNE5nOXRWMVdCMldKYU5lRkhaaGU3dUU1YlNsUUtxazgvaTBLSlY2d3Jpd1hWeDBsdDBYY1hSMnpXRVlQNSt2QkJIMkVic2FNMTZGWmlOelprOCszMVJCODJrZFdYQ0prbzlRa3JPUitjNjV1Uzc4NDNkL2RFVkRoYitXS29wMk5MUFBzUmJXcGZMczBCTkwxMWJnNTduaTB4bEo1blM5QTd0eUNKNlB1N0VsSkVPbXFQZkt2Q1RGeGFLK1RjV0pwZHNXRWQ3U1VDWVZSZzQxdE14RjF4MzZjcmR4bWcyUFlCenlVQkF1UHpDWDR3SjdzN3ZYMDhiV3RNdDVMMEpMQWp6Z0t6a1Y1NFBSdjNib3ZsaEZqR1VFRE81MHNrWmxtYkR3czB4UURaWWk3Wlo2YytISDEwVVQ5NVQzcHp5eTdVc0dSOXJ2VEszSlVOeU1ZMVMvZHpZcDVmRkJPR3BKUVl1TmlwWXhHL1hkNlZkaHBuMzZ6WENFZlNDb2ZJeVNuU3FDODUxRGd3MnlKOENhVGM2Sk4yWEtjTkdTcUlLcFdTc1hZNGhqdmZ1REpxQmFKdUZuVzEvQjFBZVFuVEYzbU8za0VpT09aYUU5RkRpZGozaDB3RXgvYXJ1L1MzV3dBS2Rtb096SWdMWWVqVWlocW9jL1AzWEZONnJCUkV0RlA0cXk4RGVBcWVUNVRPaitOM29Ed0pwQTNsV2dwQ0V5SHNnaW5MdEVpM3JpOVVNYTVKNCtTSktPd29DU09ISjJFRFJBNlFMR0g1RGgraWI4VDdEWGlrTUZmcHMzOHFlSThTREZVV1dsU0lJa1lnaWMwemJkU1l1Q3FxRjVTTWZJU2U2UU9wZnlTOEdYWG5sYU05cEEwMkYrV2JBMGJJYUZheVVqZDF0M25LODk1Uis0ZmZTYzUvdmF3dFREVzcxdlZxQnY3S2hWMi9qNlRSR0NMMkYrNTRWT0c5bjBIUkpNVlFoK3dwOUhmZ1FvSy9PbEFSUTlmUHlPa1ZnNWV0TE0wMWZMWk5KeGFmOGl5dGZwT294aXlSOE90RDROaFFNM2EwaUhlc1BaQXhsMEdIbzg1S3pYeUtrZ2FMOGM1SlBWRHZrWFMxVHpMVG9tTVBRRkl0a25PWGovYUxkTGIxeDAxdjRaekp1SWlMR2MyejlsWnZHczJGRmdBVDluWG9zVzVBNWptd2VIclpQaHVBUVphWTNtaC9kaDZoaU0vSFE2cHpHcE03RHdKdU5GbVRaQUFEdVpBS3ovYmpCVm8xR2IraTBkVFpYY0E3OEkrVWVkc3dvRGhIMmhXeHVqZVNkZHNYVVprR214L3dIQ1VieUcybFp4Tmp4STAyVVM3bGZ3eEUrekJaOFc3UXVBb094dkVWSm9BYlY0dllEb0trRG9yWDBHYk9zOVhxZUNIYXhIclN6SGQzeEVlbEtDZ1FDNkZoWjIxR0dQZ2tWUEtxd2pnYjNmNHFUN3ZxejFiRFNIbDY2dUgrQVBaT3lxRTUxenhtSzR3dGVaTWQ4Rk1jZTZ2eUowYTZmeWg5LzBLQW1iNHMyZitkVWVmQ3VKbnhwZ0ZML1RnY2tkT0FxaStGeUNGS3BmU2lJalQ4MFVpdGI0ejlKdXpaQnFMYlRtd05XZUcrelFzelA1S1FPTldhN1NtQjhkV3pobEl5bVp5VGFEdUpta0k5MTFFUmF1TnMzdHdvYkFrd0p3WkJ1Mys3SFV1MzUyNzBGeDZ1cU15clNITVV6SmNNcEl5Nm5oMmszb3RHNEN2RVEyeVNyYXN4RGExS3RqZWUweEc1bUE5bnBzRlJXajR3dTNMRFE5RkYrR3RxSWZVVUFaNGdRVDZRTm82cG00Wi93dit1UGZ3VlUrVk1zYytSYWZabkpNdkpTeWpGQjFRUXFzSFRWT3BYdkRvYlZkbVZSenFGOVZENGhWL3cwcWIvZFh4ZUkwWDVaNE1WTUNqRlp2am53VnNyOGl4SWFiaEIwZVp4RUk2QTdST09zVXZYMUNUeHc4Q1ZVVXJzN2QwOURGb1J6aldhT2VOZU9FVC9PeC9yKzdqZzFJTVVSRWlsT2hyQVZYMkhqWWUyVlp0YVZGaDdUM3VlMVRLQmRVdFFKMm1wZlZEdHg2UGcvSGpuL3J0Q0NsbzRhNHVJSXhJYjBFWDdqOXB2QWhydU96MWJ3Z0Foem1pV3pWTWViVUhaamU5c0QzMFg2Qk14RUhvbG5qdnA2eFBJSS9QaDVEekxydmYrOFJ1M3JPa3NpdDBoeGY4UzBhVzVxc3I3U3pMd2FiR25YTWpEc2JCeVJ1REgxd1NoQXVOT1pTUk1RM2NVS1FOemExT2h1WEMxUE9QR1RjaWs0NTBGTmZ6STloY042R3RzTERSQWFoVGFvK3JLRm1XUERQcDdvM0d6SUhGNVU3NHhzMGJoYThWUjhBVXR5Mkozdm10dkdHVUoyYTIrSWgreUpoRzFYaHJHd2RaaXRPMFNJVWcxL2krRTBvR2dXdG9lUUJIL2FHeXdQY0pBZWkvY0R0TkZST3hyMlNzM3dXUVIxZUlQV1BjTXFlMDBobEM2bEFtWjZnZldQVmpQSzVLdXAxVElCV1hWeHpQYXBwZmdDSlQrdWdiN283SUVCRy92ajFtb1JpSUdmYytRaURRMElab21zZHExdFVIYXg5eVIvV3Z6YlNhQlhVendNRSt5N0Jpdk5KTFE2NWZlWlNwMXFyY2Y0N01JSlUvN2RCY0Zib3FWQUpYZjNBNHJ1enA2aWFoV3BHd3g4MWhpUm9rN0s4c3UwK2hFNnBWaTJ3TGo2d09SNDdoM2FObENpUm9IcmZlUmltbHVQOWhNNktkWGdkUStqVmF4anlRK2VwN0c5b3hNSG5VcVltV3E5a2YzVDQ0SnN1aVNReTQxYUZGSVYzVUptMDZOTTZsTFoxdDhMRWtINU5KK1pUS2JVa0lrZG9TNk8yWVB0Y2N4YXZoelFrS1B6N3VGcFdwd3hFMTJPMmcrUkpZcnJXTWZTU1hrOHpFZjBEMmlDNFJvRWh1cmY1TURPd2ZndlJwZUFtYk5rZUZQR0M4SmVPRng4bkx1U0VqaTRYWGcvMFFrdHV1Q21IT0pNZVh6RTlrejQraWxGVkl4bWZWbm9GZWpOV1JZcnBPYThWZHhBWjFKanBpRHhCWnBVODdDeXUxNzNJWURUTFQranhSUHpTY2l2STltVVIrbmV5TUNhcWhEd3c0QlJtU2N1M2dFUVd1TXQ4eVBhbFV4ZVJwQ2k3N2pBaUJ4L2ZNVjFYdUxUMlBaSHhJbDkxMUdQV29QeHhIVFVHTXRVN2NyamlwZTJrMHR2bWpHUm96L1UrVDV0N293L1h5OVE0dEg5U2Q2ajhkVDZ2OThWVmVsaEhkejNZdGtHVjk3bE1YOEtPSzF2Mk92NSszak16RmZqTWRyaXdLbTFWbWdTYmhLUkl5anBjOUlUZXdMWG01bkk3dXVrOExneUF4SEZScGxHOGN4NDFrRUh3c1BqTHlhUXRlcjVGOTBEbzF5Mi9wblRWMGxNd3V2eFphV0tTdFpCNEYvWUNZYTljS1dQdHdqNERqQ2J4eExkeFplWjZ2SUx4WGZhSjV1WmhBMndUdjQzVUpKQUU3eG1teEM0dzhSUkNSb3UxaFVaeHJsUHVFYk4zS2JMbEZvZW1ZU0hFTmhySUhyeFhZRjIzcjcvOWxhcDNCMndNeFdadTM3cEFDMTRSYWo1aEYzN3NOVjF3M25MLzRPNURJUXlHRDJUN2ZROGZmN2dDTmlYY2ZySm11V2Z2aGhCVXNmbFU1UXBIaXR5WGE1c24zK3l0aGJGbGxuYjZSYWw4V3RSSDFFSEpSbGpjTHdDazl3ZEpFVnBxM0VLVDNhNDFyR1phNHE2ZTV4MFRMNW96V3lFRU9QTmpWL3RieFh3ak5Rb1B4MmxqRFRTNXlORktqVUZycW8zQVJqd3dzaUdzcEpVWmIzTnh4dlkyODVwQzhMaGpDUWRTeElYV1RRdmRVU256NENUNllWRkdFVFNLWC9VYVA1S0RQczVLR3lIcnpsb0dhY1dJd0FzYU5jMGhUaGR2WWx1OWd6QjY4TENIUU82b3h0S3JrYW5ZOUVoK1RKbk5ybDJBVnVWUEVlczAzNnpXN2EvUGFUcU5zdy9IakY0THdtS0dSMTFYR3dReEs2cU1aVmJpTDgvVTd5RVFYbXZCMjc5aENERmJZdkM0ZGRlTjQxd1dTL0xIb1Qwai9NRjNFR01VN0pCeE4xajZLMS9wL3JtU3c2VjloTDBOeG56MCtmaFlXQlhyVHR5QjhSMGZEMU4wTlBjU3lFNGpaVjk0NS9YUVZSTGQyOHR1Vms2eEUxSG0xd1pVUHkzWUtZOWtRRDJKdTdId0lZK0NpYWkrdTJaRzNiWFZ4WWw0Vnk0K1VYUFdaVE1XTFpGK3NRYXUrem9WaUJIM0xuVFJoK2dGUUxBNUdObmhrYnNxbU03OGNKeXQyTWdaS3JsUXVOMkRMeXFuT3FVU1JnMnJIOUFDMG5OR3FLWDhERHc2b1g4UWd1a2orSVdBMk84dytBeWxQNmNjbjkzWU4zeVczUWJxSTZGbmZzVjBOME43ZXJlaGRaU2xNdnZDVkY0LzlObGJCaG9xMzc4bjdINEtaS1ZWTkdQZWY3SDhHcEFCa2VXbmFCNmVrYTBjUUZvK1JTZ01yKytYQWhkdzJWZnZQZlA2a3BDSlpReGZYRW4xS2dMK0dEbEkxK2xxTGQ5bGVsaHU2cXQ5NHhzUXRDQmw3UkFkdGVrM2hHbjNHWUtkc3lWVXRreDVFaFJGWFYwQ2E3VlBTU0pVWEhlUG84Z1BjMFVTaC9RZmJHS3BCY29aTmRLMGNaN2s5bjU4Ukg5KzJTWUZVMWRrVmx0eUVxLzJ1T21zZHFRdEMrVE03UWxFcW00KzhzSWMxdkExamppdkpBNlVFMUF4TnlGVWVDa3hYOWZvQlhHWDJEYktQUWdIaXZCVXFJTWRSSUh1dUpwVlFSTlpnY01BM1pLaHFlNnQ3NWxvZHM5YTJRc2U1SFVrSmNmWTJvSE9xYnlkeTg4MHdERFlncXNlRWpHVVBHRXlyQzF6K1pxMTl1ZnhsSFlLRnZZRjZSMHlKeFovUjZ3U3JIYyt5bUlxMzZQUkFYNnVNbEZQZDVxM3lReEhVVlBnNFJMSFN4anR5RG96UlM3bXRUWkRMN1pjampvdGhHUVJ0bUZkbjFUamMwV0JjN0o0ZUFQbDN4cVZ5RG9zUTR1bGx3M050bWhPVHV1d044RjBpbnl0dFpvMEx5Um9tRzhEZU1WR2hlQlV4dVZKYUhBS1ZwKzc0eXg1SnBZT09kaENMb3Nac0JaRzVhS2E4VEwwNE1GRDF6ZEhPak9zMXlpZU5HWkpXV1RWcXRtMmpSTTFXeGZpbWdEejRTcHRMQ1hxemxhWityRHBZeWtPTmZhbTdNMi84S0U4c3NxWEkrWklZNy9QZGQ4WHVhcnhOMEExaTRrZWRLZnhUSy9MMjRXOWNBd3pIWWxUS2ZJWVlleFRUNmFyUkFtQzF1Y1lDWWtxczkrb3cxWmNKYzhMU1VBQXJiMEFpYjZRRWdyWWlSbE5zR0lTMXBpbzhwdnhaTVZoZDRQSy9wOWpjY3pIUVpQWUpzTkdrclVwTWdybWZvcjRZaTE0OEd4OE40SkptRTE2K0k4ZWxHU0lFQ3FjckRMZmNGWlUvWlY1VDRyU0FHQ0lKd3VDK29iVDBBbUpUaW5yd2p3Y1ZDK2NpaEhpYzMvc1ZLZFY0SUY2ZUNDTEsycG9ZNWJDLzYyR2IyTlpDbDNnQ1ZnUUN6MlNPL2x0ZCs3aUFGV2VlL216dmI0R1luRnFrTkNrOFlMOHc4L2Rqck1nMkZab3llYWwzb25lK1M4MWUwY0VnQmZlV3dIY28yMHFhSE1RYmNPS3JEbTI5TGZNVGJvSDUzUDBhRW03aEhpazR5bmJ5UEhIdys1WnJkMGEyZEtvSUhKZmkrbis4eFErblNxNGJRb2krUjZ0b2pHWlFqY29GVXhTeFFPendRVEpIM1dOZWZ2aTJwdEdOajYwUHFaS3BGMHhRQ0I3VUhFeVFrb0lYM2VZbXRUc09uRUVPQWRONmYrdEszMDg4TVZ6TGFkdkJTbFZtdFVENzJKbnY1VWNVR0dMQThQaDBtMlo4T1NEdjU0RUEvMUpqbGorZnBacVl2ZnI4Wms3RUE2alMrR0R0bDN4MHZBNzBJQTAva2hib0ZLUlNWMUo1ZllmMTV2NGFEV1VjWTN0VHRudkF1dDJQbmJUWVU3azFvazYwU3hoaC9pMzdJUnR2aEd0bzdsQ09aeDM4eHc4N2FCOEJ5b1hlcEV1dEdlNkcxcDhvdHZPZFZ2WGZibTdacG5QcUFxbXIrS3UrRW5mSW9vaGtMOGdGQmlIcmxUOGZvMGo4M1gyOU9TSmV2bnBYNXFXQjEydDhWbmFNaHJzRVIzZTJLaytXelU2SVYrcGxka0c0RW1obEdzY1d2QW9FQXYyZStUeHEvRm5tUzZ6UmIxMndrUXBMblRhZlhsM0d4YnQyS0xFRzdmUGRrOExxalNYS09nZU84TmxpenhIdzdsSXg4ZXJDd0dYbGhoS1BPUVIreHpyM09tRVQwNFo4TWdUT0xHbHN3QVRCYkp6WmZQZTM5TXRLQUFnaVFUbzNmMUZHd3RURzlTc0loVlIycnBsK0dxZWVCWHBJbUR1V0pSZGFUU1A1aXdQekIzSXFwN2tVbWtTWjNvOXA0TkpzN2pUako5Q3lSYkNSL2NSTXdVd1RMbFNvcUNGVzVLc05oS2tzVzhGQ3ZhZTNadXZDMmtES09uL3FNMnBqVmFBVWRBVXljT0sxWnlXdTBEdERNa0pBKzJRZ1hwckNXRFpGOWZqRThGRU02T25SODJrZXRBUHdmWkNvakNpQWk4SUFPSmZYTnl4STlWc1NGZERySmVzcDVWTG5hN1hJS05FQ2tqaCtNMkl1VGZRdWUzTmgveUFCNTJwVllHVkcxaU1UdGE0eFVzVXBJMFNnYmtDVHJ2Ykhjd3U4bWVmekRFWXJaaEZJelhna0dnYUprM0NRYTFncjNmOW9Fa2lHVnM1THdRODNhK0d0TUFzNUhVSm9QdDdNQmd3RmFiUDdaOHRZRlcvU25Eb3F3b3pRNWYxdStoN1JNbzBpNXppT2hmYmg4YlpZWVc5cm9Wc1ZQakxNbFZoekQrUjl1VDh1M1hFZUhHUGpCai9Lejk1eEh0b0Z1WDcvWU5VeDNrVElLM2htVkgwcUJaT2pZbWpaKzhadmFmQnBGUTBkdnJqOVdOa3p0YUo5QVNoMWJjM0w3Q2xWTEs3R0RPSDJlaGNMZ3pDaE5sRTZNeUJZZStCbXJPY2hBTEY2RVVlTGlsM1dRUUsrdVZ1elJWdEZ5RnhZNlBDTGxYdHBqVXNUU1Awa3pmQ0VjN09raGxrdWFkOGlkMnB3OTNURjdvMHl3aTZ0RGtQUlhKVS96TWhHWXdhVkFYNHdQMUVkbHdCRHM5S1ZsVnVmWHZkSkIxYk94akdGL0RTQktjd3pxUTdVSkZadVFYUFZEOVMwelg2eUF2ZDNxbnNvNDFUMmUwU0tuVEd2RzlJeVlyckN2T3huTXN2U0NSemN4TEM1TGRlakpwK2Vja0I3aG9ldzZ0SXJqUERLZ205bkM3ZitBSVc4OEFWVkcrSVlEUXJIbkhBeWZDRVBLVllMa1F6L05QY0NJK0dYQ2IvUmtnMkppU2V3QzlCcklGclgzdFlOWTl5Szlzai9HTnV2OUN2dUh6TXJDWWNrdjY5MXhKMzV6Ri91bEl5VGJmSFhsTWZWb05tNjJZa1JYNTFkOGg0dFBYRWFZV2JBVEJJTWxtcFJDSDhFSW1Ca1ZkNUlmNDhiNVM4V2pDT0RXcjdaS3d2RXJOaGI1YU8zOHViMUZkVEFHNFFYZE1lNURkUXZoVnc1NGwyak1zbEtsbEk3bFBGT05lY24xV1FZT3BsQkx3SkI2dGN5NENMaEhCTDBicGhLM3RCZWFDSFZNeWNyeDViUjAycEJWdlRlU3RFMkxCWWxRRzIxcUU1a05nK1RyQ2U4OGhpVTY3dWZFY1E0enpraWRPN2gvZnRYQTlsWm5QcC8vTldoUkdaS0VnTU0xa1BwY3Y5UktYZnBJcGF5RjV5bmUyNVV1MHZYd3oxZ05zcjZOVUFNNVRIL01oT3hJRmtEa1QzUGpIUGpVeDRHMnVkOEVCOENFczJSSEY5R3BvT0pMZjBzSXJVdks3cithQlNBUndtekl3cVhRUmNVM2VVbHkrRDlOczZIQVkvb0tEUW5ZeVdzTi9URzg0U1M0UXJYQWt4bzRYQUNFVksvQ1NpRkVZeUE5Z0d0NDAyUFN4RVhiNXVCVUo5cllpT2tRMmNtWWxOWUpGYjRrZGxhU0dHeHhNYWFTZm9KelFTa2VqcmpLV2V4MGJhVVhsS3NzNzBzK0l5a0MxV3Z6KzNTNEhUQUVWazUzMW9QazFuamxHWEp0QUJWOTB2SVFjSDErVU5CZmhXY2dIUmhCR21vSVRJR0hYRlcvMTNPaTlVZkhyZnpwVzNxUzJZRStuVFlrOXU3MWFKTnNTb1NNcy9KZDBweThDb283MUN1Y1dUNnd3N2Q2SUhiS0l6RnE2K01mek01YWJIYWlQY2NXTDk3RmJjRzFWWmJsa2xValI2am5DZFJMMHkwTEZ1TWoydWdkOXFmeDdNV1NwSlRuWlZHVm5JakZla1lhMmFjd3Q0QU1MMnhCdU9ncXh5OTZ6bjN5WmxsNnZ3RUtRcXVwTXQyNXY4WURKc2l3bkRvQm9sWEpyb0MwY01oYVdnaFhqdlBGNytRdWxpdHpKN1BFTEFNMDgvQkdZOHBEY1llWkdTZVZTNVNicUhqVTErVTkzb1BLcW52aUJkWUZjSVR3b1F3RmlTNkVTYm81MVBXMVhhcmJzdnRUWUs3RjdRT0R0RndGZW92QWhqTVZjN3BKMnVGNmV4aHRLakVqcXMvWmYzZnlLT0VUT1V0MWZhelluQnZPdWc4Q3RtQ0xUUXpyNVNLZmhZQzdwRTVTNTNyY1I1WVdtaWVkeVYwdmRGVEdpcDE3aU5DUDVtSEZoNkwwYVJlRGszdi93cnhObUpqQ2g2K2J6T0NXZWYxRk9NM0FwQlFtNDRjRi9nVDNnUDUydjdRZEp4U2RYUG9Sa1k3YU1pZDduelVuL3ppblk2LzNocEdzaWx2eGpDcnE1MzUzZVF6YUMrSHQxRDBHNWhYdElSZlFEOEhTYjZLWDVZdGVhdVlhUEtxYVo5b3JnbTNlN3l5Vmo0a3VhK3UyRGdwenhwVEEwZGs2cHFsMDZhVlpERWtQUlluTnNVc1V0OXRya1RDZkdWcWFGbU1IMXU1M21rYTdUTC9EdWg0dEZzWmlaSU1jbE9OQVJ0YkN6cG5URkovUGxIZmhIcExzOCtlaHR1WGJKcmN6QStjcUpFMENwSTR2NGtNa3FJclB5UFJvZmVBVE1uTE9NQnQxL2Q2am5nclJTb0NSWGFWQngwb25YckJCNC9WejY3S0ZtaDNWelhNT216NzJmSHF4TnZ3Uy82Y09KUnJtdnVmdnZFUFpzR3BBc01hQ2dCM21aSnJKTGh2bWxYSTI5S3lGUUVMbjlpYVBNY3AyMWhUeHVXRkthN0FmcWZ1anFpU0ZxQ0UxakF3eGdqQVU0ZVIyMi9uNVV2Zk1INC96WVpIWFlzdXc0UGpLdm9vSXpPRGxvQ09jTVIxSHFVVG9yZHVMVUZRdS9yYjgvTkdPY1p6d1R2QnV2S2xNaUtFamFqTnp5VStNbGpTbmlON21WUDVaVTQ3QXk0bGJEbGR4Vm42QUdsMmZHaThzeTliZmZvNG01bzY1eFY2YWw2a3dvUitQdWFwYVl4K2FldXNYNjJoUDNTaWNaUXdPYzJSb2x5eHpkSG43Kyt1VXJ2YnQ1a1c3M09yMkZDNWIvdWo5NVQrbWc1V25MZXFRVkppMmt4OWl1UkMwTzdaMlRQUkpNbkFLcEVLSDdmSTkwNlNpNjNZMU5Bckh1OWxiMmtiQVhSMUphY1VqL3AzQnE0K0JJSGNlWjhnY3M5SXVBOE1nTmkvaFFsS0lWeUhna0NBeGw4K0tqL3F1SGpUTkp5OEpVZ1hBTFU5VkUyQmFaWmU5SkdpY3JRSjYxd2VtYjZqMURKSzYxRm0rZXkra0JqTWU3VXZhbm9sZjFYdmlKcTh3MVFCWTZkTkZPSnJ4RS9EYnNGbjhxb1FjNlYvYm4zSi94SGxrcDIzcXNaMTQ3emIyTUlUTWZ3UjhTclEzOUhLVjdjUFJ0UHdZWTRXMEhHUjhhdWlHUlJEek9QZDRvOFZyTHFGUVpJMjJ0bmp2R2k1eklhU2NvNXUyL09lSFhYRnMrSVAwL245R3BMYUpVL1VBc0Nhb1RRdkVwVzQ0RGM4aGhWQnFaZjZmbWdrcjYybnVFRjRLTVVqenJraU5nRXJmc1lQZHViUVZ3Z1lvZVJ2bWw1WHNlTzU3VzBmRlBOWXVRSkY3YXVTaDBqMXZpR1Z0TEJnRVFYZzR2OW5NTmxBN2J6N0ROdlZXNlN3TEl3OERuUFRxWlYrUllJQjEyYkE4Q1ZpT3YwN3Bya3J0RnlRdGNDK1FTV1Y5RWgyQ2NPZ0FTa1RBWjF0MWI0b3RBK3lKMjQxTDV6bmh1TjNiOWpJTC9TRE5QZFdNb3llV2dyZ09JMzQzSmhkRktMWUt0RTRlNlUyaHJGd3g5eEZwbEl6bDRxNEI1RHFocnBwc0JQSnNCTGt6WlRkZ3MwNlpIQVJVZUZKWXZUN256Q2xPS1Y5R283OFJJVkV3b0piV2lJeGRYSXEzZktJQnRZSGxZMVJXd3NlOXBtYzQ2THVjSDlWRDE2b1lpcy9QSXNOUndQWEpYYUlPanpzYlltL0tCS3ZmQmk1R1JqRkxjSXliWFc3aDdBYmxQUVdQWm9tT0YzRTAvQ283emV6cDFLOXRadGVKUURJbUM2UTZlQlZLa0hURWpGWmd6REhUMWhHbExsUmwrbFlzUDJnVDBtOWZzYml3VlkyQzZQOHhwNHlzR25GYmhLa1BFd2FXNUUrTUI0MFRDY29ra2RUL0JxemtVaTVoUUdKVHpXcjg2UDltTkVhNkE0NS8yS2tndEV2aDJaQkI2MVhPR3RFeS9EU244Wng3YitSZ2FOS3orQlRaaTRPRVloNUFEd0YwVW5mdTJRcEpwQzYzUGxIS3lpcWlsTGhTM1d2aS9ENjNxVTZEeEJ5YXIvQmdXS2daWE9qQTI2aHljMERTcit4aFFnb0lkSkRKaWFSS2NDaFVFTVNqUTNPV1ZXb0k0QUU4NWFHQnlPOVNtcUZxbTJWYU9GeElXM0o5VEcvVTNVNExzNEV2M2dyWkRVaXlMVXpacjhCQkUzbW4xZGJYYVAyYXlIb0NwU0k0S09BVVd1YVF5Z1FOcS9hTmVZVlNzM2dnb2IvUXlQYVg3aWJKZy9rYUJXS2hPbStEMFBMaGFoaW13L2dKSmFLcDlMS0pqQjJGQ3d6MW1KUHVYdS9VaW9obHcrRUk4TG9HYXRGemxFQmxDNjN4dStPZXBrbXJMNGk5OXlTTkVBZ1VuY29NMm0zSUF3cTViWWhLdjZMajNVMjBQcm9yalFYU3lVcXBVYnFzNWpXY29Lc2t2dTdyQVJXZ2hlVzZBM09MSTZIb3ZoNHpOd2ZaQmh3b0ZISHhsT3ZMN2xXVmdOaHhlV3F5ekpRREl5ZGhkdHUxcXR6Q01SZG9GY3QrQmNvZ1o5T3pwL1FEUVRHNFZVUWlZNGRuQllyT3FIOWZyVGk3STBiK3AvZ1VGMjNGR1NodUlheDZMRVFhNnlVOTlsV0d4ekRUeE95b3lnaUtjUEpobXVCTmZJKzdKeGoxYWlZaEpuOCtaNGRzbEJtTzU3akk4V3F0Ti9aVlQzYVBIb3RMSFVaZFBkQysrSWFNUWxEUzdsRXRaektlOVJqOE5meCtlS25wWDFMZjVXTkNZWjRwTGU1K3FDZG04eC9KSldMNzVNbGxUdmJIMkF6eWdmcmdmSEtmMWhCZ3F6Wm1EeU1EWU1oVFNvQU5uU2ZwQ0pqeHo3SDBqZjBjL0haRmMyM3Y3SVl6VUg4Q1Q3NGNuL0ZPd20zQlB5V2dCbWp4SmNEYnlycVRDYVc2U3UvN2N0RmszY2NOZ1hDUS9CQkw3Wm9oYlFHSUV3QjRYM2xNc2ltL2dCbHNzK3RkcG1ZamthdG83VUx0VUhxUU5NNWNpMDloa0gzVU8ra0VwMDRiL3VCd1NwOEoxa3k3WllBbjA4ZEdwMHd6ZGNEMmxHVHQweE9icEpKOGRRbXJZeWJRaEZSRkNJVmFlZ2RWUmIwdzd5c3A0UUZMdWI4YlVsWHpwQ3BoM0VobWViMUg4Z0o5QmZweWpPL1lVUFRUb01SQ2RTeCs3Q3BwZWlpZzhWN3gxeGY0V3BwYWRGRTZHU1NkQVFLMkRxZkNtVlFwa1JPMGIydXlGZlpBcjdOaDdHRWY1b3RMcE9BbmJ5em1aUDNKSTFPMHdnSmRxcDZ3NHIvUTlySmNnOXMwUlorVmF0aEYrYTJvQVQxcitkSEJIRVRucGVOMnZob3ZlQWQ1c3dQNTd0T0ZtT3dzWlVDSEU4UHlWRU53MzVWb3I2VWpCdnZmVnk0SEprU3E3dU41aWJzcmZibWltQk56eXQvSUtBdVpFQnd1aHZXdm01SVRORzZ4UTRRQzhScnlNUlp0L2VWQWhUVUMwemZUVkZqbUdySTFXdkNibzROdy9icGQ4QUV2a29YeElwWUdYcFRIbFdSRXIwMkkyVU9JVUF3clU4aGdrcVhLTjdqQlVTUUtyTG5kUElqZkdDclN4S2RXTy90Y1JiRm1KdGt1NkREd2tZYTNjZk96SXNicG10NStXSGJudkJ2Y3lyMWY2RHBTMVQ1Vlg3Rll4L1g1RzJnM0NKWW04NzdaVG1SdEpmVi93MVVqNzJSSXBsMWpoU2FJU0NxVG1BS0pKWnhlUjdXTUk3Wm1zQUhYUDNzLzNuMmN5UTlMSDRGVjJ4NTFpVzluRkxsQUxrOGFKVG4zTWZMY1ozeFVKYU95YVdGVlFCdnc2K0hUclM5bEVYTGNYSlNheUlQUGdlZTVIVDQ0V0hRb21uVjNielVLYW5ubE9nQW9IU01BYnRCQjF3UmV4L29jMzJtMHlFaDVOdTlaTmQrWmpKREFEWHlrdGdFcEpsYk05Ni9RSmdPYWRzaE9NVWdmNEN3NXdraG1wTmgycmZoTnpvNFlnVExyTldXcXNoTE9ZOFZqTS81VTlaeXcxZm5WNWdoZ1lKdFBaWk9LNFJ1Z3VUK05kekpyd1B4RTdpeGphZEdsRWYvUVUvVFpvRXZXSXE1T01Ndnp0dnpIQ1duZmFDMit4c3FMM3JKQ0g1VzB3ZkEyQjREaWpxbGJUTGNSdW16VTlrOXRRS1AwNkF1dm5yakJFamdTQVhheXhKbE1pU1o4QmRwYk95L1lhYStwM1BBNGtIZFR4cUh3S0JVNXJnNkRhcDVXelVmVWgxeU9jZU1PQUl5QlN1QnVPVTNSU1phaWZZajJoNVNSd0ZaZTFrQlhOQlZLaTFncTJSTytZZWVuSXhtSmcrSklzL3VqWElFaE1nTktxbVNjaGlVbnhCbHZsdmliK2tNM1BBNWVIWktCL29lcFhmTHNBSXlSV3krN2pBdlBKRmhEcEJPM2tlSTFoK1lROVJJcUZNdXBGT01GcGVaelUyMzVTZlM4Ym12NGVxZy90SXV6QVFYTnE5b29VZWRaTGxSakJKc2dDaVZieHBvSWRBZytDM0tEK0YrK0JieXh5VEpHRXJDYWtncXlmYUJlUnVIaUlzVzFoTUJ6U3YrMmo2M2dtY1dWeHhpWEtXZXNiMWRtbzh3MTlvOUFuMFpHdlJMakhHcDVBUzlyTzI0QXFwRDhGeVA2ejVlNjdOOHhONjE3MTVaK0RnQ2E0c0xoSFRmZUJoSFdwalRhS3JROGdrakdPOHJ1SDV4TU03TThKUEJRcDlMQ08wVWh4YllpNkRSQVpITXdNNlg5eWNBa005bUdoVWdRN1c0L2w0S1NFTmtEZm50K2l1T2FJK0ZXdXFIMmQySkVRVUpZNnBrZkZibjJERnM0aTVhdEFXU1h4a2gyZXJhbzBsekRCN1Bpejd1TXhGZUxGeWRhb0RyeXd1Mjlla2x5bytCa1J0aXhXS2RYY1BtOFpEUDV0dk5IblpoWmdWYmo5Z3krRkNtQVRTL2NRSy9MZmN4S1NVTU5pL0FWN3lxQWJLVDdqZGF5YVdBTDh5OGRMam8zQU1HSTlDUGxVM3dSSVA0UnlnYlB6cnI3V1hDVHNlZXordEtkM2d4RVVnWWNIUWhHVVMyT0pyeFRqTCtGbnprNTd3TWhtQlBTc1JERFBHK1RIYmVNSXRZWDdyZjhZRHQxU2wySzh1QlJwQ0tpbksxQ0FJbmhLMkE1d0tWamdjT1hRR3pscWFQUnFGK1VPSW5DaThPcnZWTUlHUGcwanNRN3hnZkF4WFVCQm9IMlV2U25ET0Vya1IyYlI0Nno1WDlvc2o2WGUzZkkrUGFSZ1lsY1YvUVh5SVE3UFpSWWFKRkIzWDhYTHBYMVFIMXZPM1BoLzg3MnBmUUZEQ2RTdFV1VjFKcS90bjQ1VlBHZkcwaHN6WGlHOGxrQjB4amJ1OVdtd1hsQnBWdWJyZSt0eVFxVGZQWit2S3hVMXVYUVo1bVozZnZyREJ4ZHZPK2RDckpiNW9WZktsQktSU1I2UUdEbGh3d0t3TkRpL3kzZW05ME1RWS9kaS9ZOGNXM0RaYkI2Si80WmJuQlhsdERGeHJleFp5ZnlXUi85bFpUeEZodEloeTdhU0V4QzgrL2RnR2VzVE1UUkpzNTArMFBNVFUyOGoxL2hvaTBDOVFGNjdKNEpRazN2VDBVZEN4R0VWM2l2cEZHaUEreVlyZHlQSXFuRjJHc1lsVmJsV2Z6d0o2a0UzNkkvcEtTWWY4K0lEZ1VtMkZzajF4RElSMVdaTWhIcmNTc2ZMWkhCeHAwbndmMG00c2ZTanFHelVxR1BSVmZPaEw3Y1pLMkFDSzBISmV2VUpZVmNNTzlqUTgrSFBwdFlrQ1JKQ0ZHQjcwbWMxd3NtNFRIaHZGYmh5Rm5LZzJzWUxpZG5jVW55QWREMjBza0wxampsSzBJK1NlVXVqS2FEWFU4cjdyMm8vbjNlaGJ5dWJLcDJFTW1TSENKYTdyWS9oZlZUbmRCb2xmTnZzWHl6WnBybmQ0N1NrQU5ZZmMvdzZvOXBxRW8wZU5VYk5kZjZiYlY1aWd1dkUrdytYS3BucXp0Qm9jU2g2eTYxQWNmL0oxaVVCWUgyNGNtYUJrc0xZSWszL2IvTEZ2blFaTzllSzYyemJSR0NaU3Zxc3I5dkgzS2taN1p2MUR3VDlReDUrZUppZ2s4RDJCOVc2b1FDY2hYSFEvbmVIT0czSlJ2WlcvMTRTcVk3TEl0R2tFZmxoL0tZa09NOXJ6QW9OOUNnV1RoY3N4aEhvaGMxK1ZuRXZraXVobXZrM3JaT2h2S2RtTXEyY3BEZmFjVFRwYTRRQkhuRGZEOXZmMjR6N1dvaXlKM0tpVEZkcTBUQnljcEJSeFozS0JLWHlWeGwzRVk2SktrbDdDVDJQb2JyRjVJazhWcWlxa2RZUU1Nb1l2WWUrWW45Wk1PU0Q3L0tJOXdPSWNTeHRramU2SDZqc3NGTC84MlZZWmVTc21sdDluR0cvWWQ3MUR3dHRlL2F6Qjk2cFc3ZHREZ1loTmZLalR5ZWpra01TSnVlL21BU3V1a0lidm1hRGxVRWZSZ3prdTQ4blErZHdZZ09TVyttY1Z2NGdISVRPalA5SGE0T3dDb2RuRFlUT0lad1lkNjh1NzlsSTFsSkwxeEdmZWRyU0ZzRUllYzNPZXdrYkxiSFpaRDdsVUNObDg1cnY2a3JiaWlGTDdiVnNWWTlQN3V1bFE2NlJqQWwrT0Qzam5JWG40MXNRQ0RDTmU2THBwSFlnTTNMNS9UNkFudldzVUY4VFZxKy9UNHhxN3NQOWNKQlovM3E4WDhUL1dENkNZSlNYanFqVjFLRStUVytOdzVaZXNQblZzTGY4b2pDQVZKMlVBdlV0U1I3UzNVZHd1T3lEUTQvaGlwNFJvb0k1eFpsQVRTM3d0Qjk1UzhPWUR4R3RBMHdCR3V6UG1XV0w2UWNXd3V3MWFZR2grS3ZQcEFXTFYvaWp3TnQyQjlzYkNMdngrb1hFN3RaM1VjcWxDcDJibFJJdmI1VzhBOUpRTW5iMFYwWWpjSlJ4a09ic25OUmpEcUZHbFlmWHlXTlc3M2xLR2JjL1FnelBiTlpsU3E5U3g4LzJWNVIyc1k0dGsveDVTaE1WZGh3Zm11K2UrWERiRlZqRzhGZUtMbUpvZGJweE1LSlVlWjc3cXR1SmF6MC9ncGY4UlZ5cGxEdlVlZ3hrZys3UDIvN3RlOE5QcW5lTS9iQlN5VXhvWEJhdU9oWExpYUNPV3hiNzlCWWxnbHRicGZhd3hRMUNsSndsa0E4MDNXa1pvRWhCZS9EMEpwL0tuQ1NaMWlQekowekkwZEJRU0U3YkpLMnVQblk5YXRWUEh5cXJWRlVsWS9mQy96WVNqMVArZjMvYi9jTkY5TXlUZURyQXc0WnJjYmNZRjhxY0pJeU9SMElGWDRoamZVUGpxT2NTUjVMRTNCeXVmVmlpMmlBanM1dXp0SUNnQlV3Y0NSbURnRUlRZVJUUm83dG9kcnJqNVpSYnEyeXI1QkhuSjFUZm5BM1JkaGtRWGtzNDhXTlZUSzdMNVJYWDVVaExmSkdlcDNGRUtRUlcrQVpRaTRoTHdtR2NCTENrV0tkZFFCZ2gyOW16Q0FHeUVpQjdSSVVqWTZsVmRFTC9ueU1nR0FITlBrS29TT2lGMEtNemI0Y3VySXdNRnJvZ1U2NmJLcHNxYWpsTFp5d2VmQ2x0N0c4aDY0ZVN3R1p6RWNxN3dUemdsbGRYN0ZySmdwQXI5WC9IMVNFMU5nQjVvQUdRTWtseGVsQ1VkcnFvQmlDMmtHWHQ5SkwwM29KSElUYmJZTmdBaWZpdmdJV01ENy8yZDJ2cDc1Ri9OWkFSTGpLWWNGQ2VOQ1hNUzRtRVY0RFRBSVkrSmN0Nmg4WXdpQnhVZFZROVRSYmtIRzN0UlowaDlhbks2VldicS83eTZxN1J3NG1aYlYxeVd0U0Z4WFlkZDcwakxTUVQyMzdjbGJidGEwVkt5SW1RTnF3ZmpaaFB5MDRvcmVzakFJMm8xMjg2YmowOUZjdVVpTGZpalI2enVvMnFIRjBnL0NacGMrZGZBZWZ2V2J2SGpDakNPdjJaSHQ0NEU3bUFDbWtXV0ZqcUUvK2FpM0E3R2N3ei9iWlFVZjdEaXlWZjBPSjlVdU94TmErU2lJUE5sdjl6cGFXQW1sS3AvUkI2dWc5WGF4SGU3bjRNVjcxbjk3b3NCa0lTU0M2WW1ZUzRTWCs1VlkxaGhGSlBMRXFodHlaL0pLaG41OEY2YXFBdjhkbXNrWkRJVzBONVVhcFQ0Sk9CNFoyMnZ1NDQ0RmpSVmwzOXNxMUxnanlCcHVnNGVwd2sySWpnd0RKWTRqenlpaFc0WGV6Yk4zMUlYV3JUR3JoMEtkendteTROTEwzUGo4b0lRSFQ2YmR4YVdxSXZ5NHk0ZklseUNac0RkZEpGeUtFNGw2eW9qYmY0ZkVOYzIxWWM0TFp2Y0dIOWNLZDhCS0s2ZTZTVzdLWHZ5bTEwckhOR3hJTmhXMndWb1NyVjFZSmR2Q0JHWGl5b3ZERUNoWWI1cDZ6UWxsa1BlZmRucWI3V3RnWlFtWlg0djNrSm1LN3cwNVBGdi9YV0JFUkJubEkxeG9zMnh1RUNlaG1UY3JIbEQzUGVjeWhMWW1uVjV2UDRRVEtHR2NNbXRTVVFaT0JCc3Vza3FmK2NJMTVyL2wwL0tDSWlKWWVxNVBiVmJEelF1bnFIT1AxMmtLZTJ0VEZtbldtdGZXZVo3MnhxaUM0S3RMT2h3eWhWWlg2OHpGcWZ0cFFjSzR4NWFEakhFbll4V1Rlbllja0dOLyt3Z1JTcG5nZXZoa0xEdGhXQXJjc2luOEhMYk1BdG83cE5odGpEempFK2w4c0hobzJrL3QyZVMveVZLeTl1ZHZGeXVMaE1iY3dHMFhDZ2dXNDhkL2lDYWdSRzI1b3dDRHRkdTBpbVJ3dGx4b1NTMU5GQWgrbFFramRGb2loVjdPaXNyVTBIWHMvejd6am1jQUlnU2pueXc3ZGVxVlVqTk9Fdmw4dnNjMXdSM0liOU43bEFWNzA5eUxtMkJFcHh5djNxNnJXbm5Od0QzNk5EKzdJNlFMVkt4TnYxdzhZa3JIcTQ4bzdEYkFOaFJWQWt4a0RLTnNEdFh5cFNIMWJwaVZJUjBObTJEeG9KMitsQ2ZJbU5UVFA4U0FzQklTelRVR09aZWhuOTU2MjJGRlh5d0RCdVlEZ3BBQnZqRHFVelZkRWoxL2kwVEdVeTdaN1VnVmRGUjk2c1A1b0pjb1lNY3hpTmk2dkhOeC95VjB3UzFlRFpPQjJoTzhzc0M2TWMxaEMrTVVSYVVFTHZrVW9nSFM2emZncnQvRXlOVHlmZ3BwZWQ0Y08yNjlQcTdKWDFJL09Pck4zWVZkU0lZbzZPZFVJUW1ZTXUvM3A4dU5xdDdyYjVaR2hlK243TE9ROHJBamp0SkxXVVBMVDBGc1dBUWpXSDNsWFJWbDRyb1BOZXBLV1VvTmp5bDMwL3J3Q2FhMWFtOVVNc3ZqRVVSaVU3WWVBb1RNTm9IMGZZU0UzK3BjQ0hJb2l2OVdwSTZoWHF5K25Ibk1wNThHZnd3R2lkNEMxdkcxcndtS0Q0TXJyZktURlNPYitYSlpDclZYblp1ZlRyTnAzZ3h1cEN2b210aG9BcTJZekhiTjA5UTRuNUs0N0VUZ25IQjNZWGFXT2ZrQ0taZDVLN1F1Q1RlY2NCby9QWW9UY3BmaWFLMkkwTitEcVh0S3ZhS2hJcldZWDRkTjVFSnZlcjNobklwcTRmRGdpYUhWcW5hVnpsdC96VlpnRzdzTE9acWdHZ3lOS25VekdyTFN6WVRkRFI2eWVENlV0RVlqRnFNdzFFcVoyZlVmdGhGOGhKeC9ZL0crWWRibDh6ZEs3S1NUTnNWc1U2K3NIcUFGb0RXQThscEVCK1lkZHdmRXBTUHAydDlVL3ltUmtYS0RaYzJoZHFhczEvQVhoVkwvSjdweXFTdkNuQnMrajlSRlVkUlpxaHNFMWJuZ3FlQldKSDZhRW1JTzFidTk4UDVHWUZiKy8ya3d2SUs1T0JxMk9hb0pIcGRTSitFenhkVEg2Qmw5UXpFd0pvZXVpN29CK3BlV2UyaExHc09qSEk4bk5Yc0svU2haNDFNVklQdEJKczdjNTI5S3QrREFqRCtsVy84Ums2RnBvQitVNXhZcVZGSDBlekUxaHdKSGZJVmVURFp6TXlBMnY2SjB3eU9DK1hROUVUYkl2Z0h6b3l3Ym5BRk5za2RJSUZGaDNjMlBzNXgvMjErQW5ZSTYzbkFoMlp0ZHBQczVMV1RJNGppWE1Qc1JxSU5hQyt6SkxISzFKekEzeU9QOG9qbStld0w5WDRESFdUVVQzVW92YU5aemxpanpaOWVQZGg1d1VLd2xYQWxLdUxZNzFIQzZNNG4rdUd1VXovUDVBVVBUQVhzZW9xMVN2NHJ2RStzcFYxNDZVa1BvQjNBaGpkM0pzMjkvaTExVlVneXVmalFsdUdFOFVzTnE0ajR4emJWOVpCbHZnVk4wbHFoK0xOeG1MSit2RGFVbEJuaW1JWlU2VWVpSExxalN5TWQ3WWtpb3VYRVp5TGxtdGovV0g3elpkemxZT0JMajU4elJlK3B2YVlycE5zU3dYT1NUZUVRV0JNMmRWRmI3a3VOK1VEc1YranRuODltQlYrSDR3dUg1MnhpN0hiTWxkc1VqbnE2Y0lWMVY0Um84R3F3SlEvSlhSY3BBanloTTVsRFcwTWxnSlJIMStUZS9WOEtRQ29RQUpjWlYySlFNZXVrWTd2WGFhWFVBZkNRR2dLcGdsWW8vcVJyZ2xBdE5YcXhlOURDR0tWMStrZ29YWWpDYitLTVRrZ1Z4M0Y5UkUzeEM2UEtHdzExNmtzMFhUOFl3b0phMHMzNm0xVEhqOFpaUzlKd3lRZkxBeFR6WGhtcktmdWMvSVJROEFmSHF4K0FsdlA0eDl2T0hMMFgzT0JSUDhJdW81UjhSQXFVNzVpM3MxU3RiNUV2VWtER0JFaVRWMXByY2VGTDRQbFRGM01KY0s3bDE1bGF6dFRQV3JjU1phL1YwQVlCZVR1dWY1U3N6d2o3NzdTVVp5eGU4YUFDVEZ2QXRJT3U0Vjg0ZFRsQ0UrQTBLSEpxMkxWVFlVdURidzR1dFNJSFNHUVRQUDdWc1F3aDZESW1CWVV5d01mYXpqM3kzMXJBRWVPUitlN2prRGtSWU5Ib3hVTTFYUis0T25WZ0RWaUZCbnpuQXA0TTM5eVkwRTdhc0pmdzNBTkVZU2lkUGovV0RMU1Bkc3lDU2JpWGlDeDFCYzdWTUxYSHZNY3lVakhvc0FvQ2VKMVh5c1BHREVNRmtVTU01djEyeWQ1M2tWWEQxQTZwM0dUN1ppdHdGNlFIZlp2RFU5TnJKSGU0NTVlaDRqRWU3ZVRncW01LzdKNHlpREo4Rng0Z05PS3pGa1NHSUxNbytCUnFxcyswR0VLWDZLeHM5RXRHMjVEL2g1aW1yUWk3VlIwRk40am5JRTZ2YWt2ak9hYyttdjQxZ2RJb0hMckZCbHNhT09maHRXR1dQN2Q3ZzVzNkQzVXB6ZWx0YVpnOG51eHJmZGs5V2hCODFCaGpMejRBd2Y4SkNEQnA5NUxmWEFvM2JYQWk2Mll3dkk0dW5UdGcxRDluYzF6UWtuSjZlNUNUSmwxTlVjMzljSDVCZmo2L2RxU3lMZVNnWGdNc3FRTmVKUzlQeWVuWHZGQ0M2dFB3dUZkdFF3K0lPcS9JeFV3dzFBekM5ZFd4bWt1bjlIeW1rVTBOQUFSOTE1VnhLNDJydktrWFBFbllubHBYcXhMSkNyeUNGK0xvRFFWZkt2anZyM3FxMXRNa2s0YzJFazQ0MkEvbnpnMHZ2ajlwektlRGVWVzNLNFlSanI5dk1HTzJIZ2JvbWd4NjRQbU1ITGFTSHFTekxyUjQvQ2d4Sk5STzJDelJlU2lMRUZPb2wvdmtDU1dINW9rRDEvMWt5blJrLytBTjhVazYvTjFkWE1JaFh5Q2xPbWtFMDBTMmxBNmZpWXpXUDhOVnVwNHFOeS9TQk9UQjhVVHZCUVB3TzZDYzg2Q0hna0JOaWhPQlMyRWZNaWEybThsVkh5bmNCVGtXL25VUGNUblUwanNIK3ZRRmx1V2VkSWZDYUIxTHA4cGEwbnZQTEZxZEx2VE1kK3lzUmgwMFJUYlN4OFkxdUU5ekZSVzRyMDdzRXZtNzZqNE04WUNMdElaQ3BvekhaRERMMnhJelliQXZQNTlQVXpvN1VTUCtJSlMxcGxuVzRhMDd5N3o1TTdHUjVCT2Z2dW93MUFmZk1vOWltS2VvQmVzNzVvMjNwN2JHcjV0ZUd3MC9wL1c2VnFNK09aSG1mWUJzQnhJMG1iWEVySTRFUUxVUWFkTXJTVUdNRDF6VEtmRldDZVlUQTlETm1OM25ZckhpSnIxWnFwTXZ3Q3RzNHdZT1hwUmdlL1E3bEFpYmpYK3ZLZFRLVElvRG0zb25VeEVRd3A0bVBsWnR6YmdhbldvbXFaaS9kUDVkcFJWT2g1SGROaDIxWW1hMUpNOHZhM1RMR0hLV1crWVhBQ3Q0NlpMS2pTNFBuM3Vrd3FFb0Y1RXNsRFc5LzJrdnBkZEtpOFZzaVVLK1JFL05qeVZlalBtSE9Gc1AxckFTNmNOQnYwOW5UZWFNdEZDVEJEZE1xdGhXOU5ZR3NibjFjOEh1V25wdTIrR051RGZNWWl0Q0IrZjk3YnpXRk1zTi82UEgzWXkyNm94Y0J4RWdWVXZZWUFzeWdvb1N1enZpTTZqWURySXhpVEhOa1gvVUoxanVYZHpxbnZNeWVXREJEOUltKzE4MnNsamJyZnFOMnlqbC90RjV1TkdsYWlFaUhCUEZyejEwTjJsQlc4K2owK0hkem1mSXg5SEFETkhwdmt1MnJSRnNkZXZxdUpNTFN0Mkg4NHhNaHFKVlpZbStuQ09rRmw5T3llejFSNm9uQjR4OXZxL0Y1WldYOUVnVTU5WVJCZ0ppT0J1R3JGZkQxeHl5NmFoTjl2SWJwc1M0SkFSaWp2RldZYXp0emZoU0ZTZzRQQnpHdHIyOTJKWFVHb2pXYzdDSHVhVWF6MngwMmY4eVJZaGtlenF2UjNSMmt4N2hWWFpNcGJMbkoxZ3ZQcjQ1Ni8wZkM3NGNDVmZtQ0lyWjA3WGx1dkJuYkpONDJvazNiNmVlVCtXbG11QlU5WDF0OFV4MnEzclhzTXRKVzRNUWR3WjJSN2xaMTVKcGVYdG9PcmhVTEowU003eWJ3WlBmWStQT2dhS0x4SjlzVDJCbS8vSFF6bmtvbmVNalJ5TU5PS1hWVnhZa0xDWmNuYTF4dHl3eUhJNVduT3paczUzOS9qNU5xdVpRaFRiaFBYdUFwU2RHREt6cFFsOWtya2ZSbW5hdFRHVzRTc0xuUWQvc3QwL2xUV0FSUnFCMDgvZ3lRTnZ5NVBLZkJrU0VyZmZZbHRlRDBka2VoVTZOWGVHZ05sdml5aWhkenlZQWFjZ0c3YWovdElLSGVYa0hKZmxhU1htckllUzBYMVNhUW1HNU1YZHlXMG9BOHRpZE9XWmNKcGdQMjltRGFwOHlnZDh1bmJIQVdvWkg4WHY4VE5tRkJaRU5UVFVIWlE1MlAzNnhYR1B2UVNZZjFqR2xHd1ZaaVZibm1pSEpIcGtTYkE5cW5mdGtIaVh3Uy80Q3dIM3l3R3QxZnNuaExONWhZYjB5VWpFd3MvaXZtOXIwVFJCdEs5OUdxaUJkSnR3Vys5eXY3K21xTXc0YTdVRlNIYjZLZFJWZ0VUS3NQaElIeTZBbWhxcVpWc3RUTkpMZHd1MEo2SXdha3lMRHNxUy9XSnlmdXhDLzVNdHc0OXgwS09aUXFuTXJtdHRIWFA1ZG9YYnRxdHNVbTREeTBMUERPYTNLSXNnOUpIeVo2NGVBcDdzSkZkU0ZNemx0OS9sODNUMVNwbko0T3I0SW1va3pHUlZEbUhKN1JKRWU4RTc0QjkxMGplcXlHTmFPaUo5OFZrYWFOSkVaYUxHOHpveE52eXRvL01KbGhQNFE0eUc1VDRuendFZUF3dVYvZlBiQmtNbk81dnpzYWxMa1pIa3ZwSjRieHJRTE5MY3Fpb3VBU2x5eE9Mbit2a0ZySU84bUVjdHZkajlTaTdrdDZmaHZmdDcremhFUXkrK2VoKzFETmFHelFGalpQWVc4V090aS8vVVFPZ0FDUk1Va1RuMHZHaHZOckhCZE5WR1ZtbThmYnpVUzdoMFpPOWwrczcwMnBhcTZ6aTJHWmlRbHRJdzlKd29RcUdRcTczTldEYWdLNmQrMlNjbG9ZR0pwZGo2VTZWOXFLeFBTeC8zcEpWWktidTJPZE92MVUveGR6RDBJekFtQ3NKVXdKRXBtcFl0cTMybWUxUnlxLzZZZ250YnFZdk1YRjh3K0luTmdZSFRtYXhoaFVHVWloVWxhcnVYRlp5QU1ETWxjangrUnhxZU9MNlkrdnFJL2VwZkM0Nm1TRmljaGlBY1dROWlQN1N6THovbG5qSUtnMnN6YU1yNkViaHg4Qk8wQmVoV3huZ2ZnZDdCR01rQ1M3aG9XVkMxQmNCbDJIQm0zb3JUVWJpbFBsa2JHK083ZHIrOG1zRXNxbHhGNCtlNDQ5d2UyWFJOWTZkZXdjd2NGd0VkWVNSa1RXVERoV3UwM25jcFNiWEdOWThTakRJOUMySkxsNjNnOVUrVEV0OERmRHJ5TUNyOFl3a1p3UC9zWU44WFBpanNhalFlR3VxYXYvYlZnUjB4L0d2UGxkOFp5RldNbE96WkxyRks2RUw4QXVsaVFLTUp6V0dQdCtoRDRqYjFWV1lTWjloOXgxbGJLMmFkQUE2dkxXL21rNCtGckVCeXRRUEVBamJIWkNDbXErWnh1Q2ZDYUVQNWZieC83TDNPZFdqTDcrNVpUZEtDSVM4RkRqN1VKUzJ4TkZRLzlIMmNhRE9qYzgwVnFhVmQ5M2krd291MWl6K3p2ekF4NFVxZXdabHVENWFZekswOEF1RDE1dVZPbk9hV3FqaTl3VUx4M1ZFTllWWWhoVGdXSWVhL2RNcVVoeWM5WFBTUTRESFJTWU42cy9DQk02ZGtCMXpyc2w1cURjTWRNbnIzRHVRL3Q2U0VtTGVIazVmeldkMkJLbkRaQjdsZ3FnOVRRV2E5SEZLTnhpbEE4UVJEYTg5ZzlGVHFRejFDRE94bmdwT2hHQldUdmhUR3VuT3lFOVc5T1Y5RFVqNWpmNmR6ckJGelNOVStNWGR2ZG1HR1JFMWY1MEhVRlNaODYvL3FGSHdSOXdBblhCcmRUbHdXQ0Z1clFzMTgrT3dxR2JmbFdEY005N1R5R21PR0xHTTNKQWk0WXN6aGpDN3JoVTkweUVxdkpNa1JJZmxldGJ6c29XMWJCaytLY2lHdmxIRnBXbzZIWXZybHpPYXZrcy96ODZ0V3o0bnpzbTBzTHE1MnRlbnF0RVI1emdMdFpIaDBvM2hrSzZJQS9Nd2VMaHRYY1U5R3BrODhLckdDWVpCY1Nsb0hTNTlWTzJ2ZzAxY3pPbUhYZEVFeEoyc3g0b0FJaktNTUdrLzJhdE11YnF1c2k5MVhXWk5Sb0RuZEFjSGQvdzlKeGVtSTBIV0Z4WWxGaGNaQnRIaDRMWVhaZjlpN0FzUzY1MWZxaVJlQVhSRW5LQTI5Uks2Sk1yUWZ5WTdjM0M0Wk9XRkpGbCtmc0RTSXE1Z3NuaWNUWHY4T0Z0U3A0dzU5a2VseHFCNno1MmdJRzRWcmVqZHFYeTdFYTFMLzJxaHJSNEd5ZEkvMFIzWkpLWFQyRnczejV6V05lODNuQ04xMGl1WFlHdi9mVjRkdXRRbVlRL0JQYXprNjNZZW5RYUV5MXhXRWt0R0RBVU01RitQUEh5VWFPWldhUGtsai8vQyswaDM5VURUVTYxUnBjdDE0U0pRSWdqT3MwZ3pTTzBPT1F0RXhtTDcwUUFtenNNL0ovVmQyb3FKeGVsVktWTkVaZzJuTmgxQzRlSGE1V1oxOG9QRDU5amxJeVdnbjZBQ05tL0dPdWtPSFBHdmVtTkxpa3ZvNGR4UnpBVWZtMHM2bDJYQmNTN09KMWxMWlVYc0lldEFUNWgwT1ZhaW1RR1R2eDdueVV6VC9iZDVPcXd0N3N3S2ZTekxkV3MyV0VyUExVblBkckRPUHFwM3VjMllDMzFIVElRRW05bG52MjRiM0hHN0dnMEFMYVJrbTVVR2d4bE9Bako0Y2d6QmdZZDBOVnlPdjh2QWFBdFV1STdMSEsrb2IzaDN5OUE3c2xONnJPR3NNc3hCM21jTmgwZjl2S1F3c1l3VlBGL2ZmMkZ4djR2Yk9RVm9mNkJ4dlhMZ2Y5ZlFZV3doZUlTYWJQWHJrZGQ5Y2I4UWZLRm80VkFkQXhLOE9ESXNNVzB6QXNWcTJaR0k3TllxWTRiTHFwQkNxVG9oU1d5MTMxcVU4QjdGd29wMjlBNi9QMlpvWTVtMTFZamRqeng1VE5XOGZJdkthcVIycCtoMHhKVzBubTRBTURSTndWT1NTK3QrSHBXaEMydHYzZDVlclVDQ3ZHNzVUN0xzREFDV2dUKzVVOVAzZDFVYmRid1pXZm0vZ2xoU0tFR082d2QxamVjci85VVdyWmNSWGpVakJNcFNseTJoUlVyQlVDRlQvSnIwdFRzNVBjREtIbzlSamNaYllZMTh2ZnNLY0dOV2prdWtsK3Vud3BLQzZPRDFxd1JXNzZabklJQkU5bGtFMlZRbzIrbTQxN283MlgvTkc5RWRsM0VEWmpKV3VNOFlucXE1RlV0TndWWDRQMlBkTU1SNE04dDhicGYwWWlreEY2Y0ZVRFlCcU9kT25Id0x1RkpWQ3c3L2VDang5WlVNUjdEdGxyU3RmTXN4QkorVDhFZExMR0dQVEw1a3l2SFRMaGNDRW5aWEFpSWZnaEYzQnF4a3FYN0xaWllvem9ySjQxdkdWdmdiNE5PUkVRVFlORGRDRy9Zb1Y5eXVHdnhzNE02aXVBMmYvbFFPUm82WlpPY0FxdVViblFxaXJRRG5NcTZKb05xajFrYkI5ZDNNK3BMYmE2anFZV2U3aWxPWHpvN3lBbVVhcStRQ1ZiWHpMRmxzK21qMTd6YXFUZ0VQUTRhaUl1VUV5d0tlbGV0WXhaNnMwWGprRzJSM0tld29WaTdOWDR6bnlLTXgrSWwxcTMrMy9UTGJ1L0lMaTNNaVZiUjZBRjZ5M0FTOFVBaE5yL1JZcWx6Y1VzcXpScy9nVllNdng2OTc2d1R6SVZsWmhKSWROb0NYR3Joa3lBekNpMklLV0g5cUNWRkM4eTQwZTFCcnlBWUpvamxGY0Z4OGdwdlhxekRDNFExT0JuRnVZdW1BWmNUajh0ZGs3RnJDZkFva2tTSzUwQ0pjbjJsWmNtRUgxaHhEOGk2UjRMKzBTQ0xwL01qTHlnSXg5ZEhMdGRaaW1kUm5PMzVYM2h3bkNpb25WT3duVEMxL2Y0OTFXenJZMXdkRGx3dG9rdnpETFhCWmVuQlBGb2o5bmhwU2lBWHpWQTkxdm1OYjdKVGNqcnpmU1lwR2lCTDBjdks1QjZuU29SU2tGd2tWdzZZWWFUbEVkZlp0SHhQWkZUbFJlU1NaVmRGT0FzUkVFdW45UGtaZXpnRnNzN1Fsek5nKy85LzJpQ1E4SzlBcnRpK0tkUGtmcTh6YVVMVldHNmcvU0RwUlpLUGJJcVNSSlZ5ZU9NZHRwSHBsL0JuZlZWRmFZUHl3bzQyd2lpZFovd0svU3EwaExFMnhCZHZEQU4zQ2E1Qy9JVndja1VuckovbzVBUCsrc1VLS0ltUHU1MjV2cER2UWtJeDBxb1RJbW9xRHFSd2MrUWRHTUkzWHZoZlY3RVFIUTdIT0ZjaXhwaUl4RWdOc3hBMDAwa25LTVFVSk1VYWxaZFFvSThFMXBWU3JjSm5VcFcramhTUzRWTFBiOXhKa3dIbnZpcW82WStMb213NDcyYUcrY2hQNzdwQVZTRkIwbEo2cklNeGdTb2taMTk3YzducThoRlUxeGpHcUo4elNwTVJNYzE2cXFuUWk0RlQ3Nzc3cDVsMzFzQzYyUHNjSmpnMDFsUDZZOENuV2JQWXpCWVFscWQ2K3FNUGlUY1B2UjVvcEZERnFnakxYLzgvYkhBSTVDdkY4OWtVRUhoZDBLNU9CaitGMWlyWjlSSWxrYkplZ3ZuVFN3N3NWQW5WQjBUeTc1SlY5T2tHQU10eVFIMXo2eUNiNlp4NEtWcmtRNE1jaEhmRUNsdFdOL1dESHNwVEpCb0R3ZzdjZFc2NWZUTUM5VlJHRDRYTkdnd0xCMTl4SGxLRUZPZ0R4bXJjY1VBY3RJTE1SQWxwY3JzREdQckFZNEUrMXd3VU45dHlXVmtETHh1N0Q0dGkzOFJMSHZtNFNOaWVlcExrVElnS1pzV1BvQmVEaU4rWWNDR28zb0Z1ek14Q2lyUzl3TUcyQ2NBUE9CQ2NiUDMrdDNVTlZySWhPWWRVTVB5K0l1a2t3a29NS2lvV3RHQlpaTkZ6VVpoaG95eGZqUm1Id0dVNXR1Qi9qRUlxL0JsVW0wWjZjWlVmakZ1RDljNXBpeFhBU2NxNGdreU91SEFLc2ZWZ0UxYTdvMUw3SkVKcVR0Y2RORWtkbUZPN3VTMUE5UnpTRnJGRzAwQVE1RVcxTXJrOVl4SGg0WGxNNVRudlpkZnRXK3ZxWmRNeXpMS1JQVGZBUEJwWm9Vb09meE80eStUQlpNS25zYTkrVENscmdDVHdiN2V6eldWU2dYMER5QkVYdy9zQ0tEeXVtcDVlSllyUjQrVkJaaW9ETjdpRzhBZi9iREVVdUUybkpkZEVKTC9yMmxONFZJdzBGajVGMHp0Y3praWZaaGpTcDFwcWl1amdsVmRFQ2xuc2tkZG02Z3VYTnJ0cENQZ0JUWUtoMUVtQXFhNkM3UGRqSUROdWRudE9kUVVmd1NVcE9KN0Y4ZkdlcFU3cjJnQ2FGaVliVC9MVUpSTW5vSWpXZlJBdUtaTDlnaVVZbHpOYi9IK3R2cUp6SWoxdG05N2V6bEN6aXUycnVPaEw1M3Vsc01Nb1lwUG9mYWpwSVZrSTRxQ0NWU0xNU2U4SXdXa0VWMUU4QkFUR1JKZVo1eGN0RWd1TWlPdGtXUThwSUtnaTZFMW5ETWVIcmNXbWRoVllDZEh0T3VIR2dmdU1JNkQ2SlNWbjE3YVNZM3h3QzFOUHY3SEdmdXl1WXlVMGtrQmNNU1JVN2VxRTlYK1hlTFl0MnIycTFKZmtTdXZ5ZWxWWm5XYXg0YXFpSjU1MmVPRk8vVkQyTWY5Rnc5RDFpSm5Ya2I2U1RYS0V1SGVmeW51Q0hXOHpHODdta0FhTjVEZHZIcFRyOU42ZXlDdjhNSmFnMDkwbUxONWFxa0F4LzBra1FpdU1TVkNsbVA0V0ZEMDJqZHl2ZlNtcDkvOFMyRzc3VjBsd2YyU1piTFZzcmRPd1BORG40am5sZ3pnRW4rbWphZms5NmJCMS96c0tYVmZDZ3VBR0l2VmpYNnZtMTBRWS9rVjBjVmx4UTh4UTdwdW1KNXRtTlYyOGhiSkpxMVlrZmNJUkZXdXU4OXQxWFgxQXdybUFDcWpQZ3dLRWpUd0xLWEpkemllRU1QZituNjZZRlY1akNoenRPdCtjKzE1dEJmcDRHNkFpRU1UMFFQVWVjU21RbXY4TjhKQmwzZ3dZdXEvbHoySFJaazQydzdaTk1janR4MHhJZWFSY3o4aHkxUmx1MGwzN1dsWEdTMFlySU03b0w3cngya2NGOTlBTG1YRXAwODZVeGp4dGxmTmJsZVVnQ0M3Sk8xa05mVVh6R3FKT00zWk5LREJjMzkrSXJJRXRwWkdtdUlIMXltNUM1U2VxSFljckd3clJROVlndkV5V29KQ0pzdXFwd245Um1vNnVCV2VoMG94RTFkQUQxcVl6eGdFRWhnS1RFNlM5enlCSGFmaGs3QUlidlJocXFOYWNUYW5DcDExeXBxS3ZseVV6YWRYTUxVcmhEZWkwZkgvOW1NalJKbFc0V2RCZ3VuT0dsM2lxWFVaeTRLRXpsMDMrVEZBOVVZaExqa2w1cU5FYkp4b3VLZ0oyYkpkTG9xMHZ0VmxUWS9PdEFOczRnTXdZRVhNNW0yR1NOdGhocVFabkpuUlowVEJqbUt3Wm1ET3FPc1h2NnE4TDN6U0ZuSFZkcUk4UmpWL3NhRTNQa1dLaUp3TmJuNkVxVjE2NzVJYnIrT0UrUkNXY29mUVMwMlU0YUNQWUs1T21EVDNkOTVDS3JBUEk2Wmc0OGJadmdIaUptV0libm5rbmRzN3ViNXVBdGhBaHZlZmlLeHgyYnVJb1M0d3M1RUh1ZGMrSmQ2ZG5QVDFUT1htdmR5NXNpRm1RSlNWd0hQcVA0NlFnVGp1M2lBbW53c09Cb09IdkZiazB1TDl1TGV5WHRXNEFjdEJkTEdacm0vaUpXU0UrZXA5NTVEMy9ZeUpFTXhVL2xPVFd4bTZVQmk2U0h4dnFYRDJlY040a1RUSk9SOFFoeEdFTWcrRGtpSndzbHBoeHY3TUVmUllzejNZVTZPRGpaaGdHZmlZc1QyZHRiTGVOTjRNYTVOcndnZVU1ckVHRjR0dXR4Y3BJR05pcFBaOXBVdE5xUzVWVW8zY0lQVndqbm1zdjl2OWg1OGIxSWlqZUNOQUo1M3JkLzF6K2hwN2t3Q3ZVVXVDaDJ5UU9RTGhZQjBjbDNQS0hjTWR5aGJzOTZnbEtrMTU1UXZOTk5ZWklTM0JLcnlBWmtLaDcyVlMxa2tnN1VLUjV2cWUxc21pMms4M2ZkaVplVitWN2lMYnJGMkUwdkJtejNKazNNRVBKOXlUL0F0YzFocFdNY09ySzNVMzFDMSs2Vk1HQzlRKzYybGtEY3l5ZldSL1MxNTlrSU5qSkFVNUphMmc5TSsxZWJoQU9LcmV2Z0tTa2hYcVdPTXpWVzArMzM5eTZSemF3bXlKRE01M2pMM0d3U3pFV0Z1b3dnMDc2UTdQZnFaS1puMzlFWVg0cUx2RlB0UVB4SmE2SnZYSzM5dXd0NHVuOVBvSjk2QTYvcTJTUzFHZWs0ZjBxWXpmbHo0SDUwYTBkK2t0bjRnZmVkV0dIdWVuTDRPK1NKSUVGNUR4ZVE1VVY4WjRoaE03NldMK2gwdnNYeGptYlZsRm0xTnltcHBjMHhQNFRuTFA2QnY1T0RNTzBEeGk5bkM3Zk45Z21kclp2QkFSZXJZN3g4SEg0SUIyWWttL2lUQTkxaFdMOEpVYlhLMnhTWXZxMnhWcWg1RXhKYmU5UzU4RUxla0NFaEFkeGt3NXNNR25JY1BOM1IyTFhoWi84RlF1WEd1ek9PcUtDY001UDNKOS9XSWFtZ3VlOUQ1Q3V2dlVybEhPRUUreWhVaW94L2xqaXIxZUpJWkJjNXovS2RwR1ZJVm52SGFyNVhTdzhOdnNlaEJvZXh3ZGw1ZThjZWdwc1NHZE5JUS9SK1M1am5NY3hTa0tGOUt2bS9CNVZ5elBDYmNtZ1NvRGRNMTU0TExCNDhGVG8rd05BcGVlTDNlcm12WjI3SGxmVHVqVVdEU3BtekhOWkpSaVRodCtFZDZiUjNScm42L2Z0WGRUTXl5YzhINWx0S1MwVkMvTkswaVFuRm5EcFBjWjhoMmNlZU1GMG9Tc2MraEc4ZmdrVFhxdkFaK2NJTE9TbnJXYktlbnFuZW1BSHU5MzgyajdPSWpDUmJtb3p4MFZqTW8way95eFp1YThGeTlHWHBSQms4SU81TEUzQml1Wmppc1BtNWVBdUh4T0F4VC9qN3BQS1V0eWljNkltdFlwRFVTR0xqQ0htVGdTaUxSRE5oN3JtZDdHSjBHOGI2U0VRWG9vRm5uY0F5SjE2bVlpVm1yS0xod2JGK2d4T0FTc0VLNFJhc3JJeFFaL21aTTNqVWtLR25jODkzS0VZNnBSMDhSRGc1OXpPMkx1M0Y5Rlh3Q3pZcHhVamx6NU03RXFiSXlieURxemlNRGc0TWltMlFybDhwOVRydDdxQVNkMG94T083d1BlVkpHdFAwR3FwdzVvMDEvMDZoajZJeGdhOTEwZzQveTdRczVpczZ0dTZZaHN3eGhqeVpTV0F5aUUzc1ZoNk02bitWQTltTlp0dkNpLzVYaHk4U3NKUnd1cUkwWGg3bUVnU0dNN0xLMjZSNkZNWVptTnFiUWY5OWZDc0t6aVhCZ2VHdi9HQUNJQVo4Tzl1WTI0a2llbXBldVk3Q2ZkbDZpc201cXVaNDBoRkorblNwQ0N2bEQ1MUphK0dKbEpQQ0VOL3FpU0tJVlJaNjh0aWhvcmgrS0pLaE9lSTNqNU9Ya285Z3hRYy8xMmFieXVBOG9BNFZBMDlFcS9FTHMvVUI5bWVtS3lHY1J5cTVmZGlNaytVSGJtZlRkVVJQajM4cWxTdWtOLytralRpV2x3UmpheEsyb3ZWcm1VeG5RK1FpUFlCODQ3dHhQZWJUMzRaU05YekJaM3FOTTBqdUdkUGErUWxsOGZsWHRLZEdLZlhGQnphMEZZV2pORVE4RFdJK3pTU1ExV1VaaU1QejYraktaT2M5aVI5bDBBREpzZ21KUDNiemxwaGxpTXlpM0d2SjNKTUlibHdnM2VTOXhwcXM2MFBhRTJzMWhNWG03NlhFZDZuVFY0enIyMkdabitydjRtZ0dBVGREQmtuNkxic3Y5NzNUaGJ5R2lqMXlySHFjOFA5TlRCbWJkN3dmYUNCUFF0K2w3VzU0NUtsNDFSc3E0MXR3RTYvYUsreHh4a09FUTZON0N6QndYT3ZZUjR1ZnVMNkVNeEZBR2ZZWGV1Z2k1WnptMXc1NUZLZzQvdnpSZE5EZE56WEhZaFI4STh2cUZTUWc4RGUwSnhsbkU5WEcvd2FoaDdLQk00ZTBxL2xKa3lPa05odFREcWJJYnd1Y0JkV1BGQVlPZ0Z4UEtTM2Fmem5FaGp0SStQR2JVKzhpYjdVZW9pc2g5VE5WQkluTkQvY3VwdTcyUFk5SlpZenkzcjZTS1lJbC8rQjVtTzllYzZVSTk5QVlBQ3VjQWdJcjRRQzRaMHFiU1BIOTVkS3BQS2tHemVBYmxkV0x5RmwwcVllUmVqdlZhS3Ewc1NCRmZMUy9jQzhZRlVzRmtaZDU3NTZkZTAzS0FDekdvNmpiTWFhaXJzR2FOYnUyRzVhV0NkZmhzT2h5NWpCanFDaXZiNCt5Q1lmVmFySEFVRnNPZ0t2WVlIcEJnbStJanJqRFZROU80bGUwU0VnaFFQdHdudEpZdmZPeHJkM3dKSm41dXlkbEVwTkZRVzhudFVJTndsWjdkT1ZjcUh2ZnZ0S2hOZmZqTEUwaE9WRHZJT2dZcEpCZi9SY01FVlN1M1RuTnVJVGRiSko3NEtiM1NzQ1JlMFlQVWt0bTVnZUF0ZjJKaUZhNUZiSDJ6M1dqYmZLV2NKbEZmMU9IOXhxa3BHbjdBUm51VjNGd1ZEd3JzZTR0citNQzN6Y1hvUlBiRDdBZGEyVE9jekI3UVZFZGJ0ZC95Vlh1M3M3RDk5N0FzTGwvZmxZSGZnRnhkVnQ2V0ZBY0tDQlFrVmNveUNYWHNSNE05MXdSc01wTTY4Vnp3VFVHS2VSM1FBZEgrUXhoNGdrV2d0VGhzLy8yUUFCQUJvQVFBQUJUd0JBQUE4QkJrOENBQUFBQUFGZUFhdEFBQUlBQ1FJQkFRb0NBQU1BR1ZSb2FYTWdhWE1nYjJZZ1JtbHVaMlZ5SUNnMktRPT08L0JEQj4KICAgIDwvQklSPgogICAgPEJJUj4KICAgICAgICA8VmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I-MTwvTWlub3I-CiAgICAgICAgPC9WZXJzaW9uPgogICAgICAgIDxDQkVGRlZlcnNpb24-CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvQ0JFRkZWZXJzaW9uPgogICAgICAgIDxCSVJJbmZvPgogICAgICAgICAgICA8SW50ZWdyaXR5PmZhbHNlPC9JbnRlZ3JpdHk-CiAgICAgICAgPC9CSVJJbmZvPgogICAgICAgIDxCREJJbmZvPgogICAgICAgICAgICA8Rm9ybWF0PgogICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5Nb3NpcDwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgPFR5cGU-NzwvVHlwZT4KICAgICAgICAgICAgPC9Gb3JtYXQ-CiAgICAgICAgICAgIDxDcmVhdGlvbkRhdGU-MjAyMC0wMS0wN1QwMjozODo1Mi42NzFaPC9DcmVhdGlvbkRhdGU-CiAgICAgICAgICAgIDxUeXBlPkZpbmdlcjwvVHlwZT4KICAgICAgICAgICAgPFN1YnR5cGU-UmlnaHQgVGh1bWI8L1N1YnR5cGU-CiAgICAgICAgICAgIDxMZXZlbD5SYXc8L0xldmVsPgogICAgICAgICAgICA8UHVycG9zZT5FbnJvbGw8L1B1cnBvc2U-CiAgICAgICAgICAgIDxRdWFsaXR5PgogICAgICAgICAgICAgICAgPEFsZ29yaXRobT4KICAgICAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPkhNQUM8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5TSEEtMjU2PC9UeXBlPgogICAgICAgICAgICAgICAgPC9BbGdvcml0aG0-CiAgICAgICAgICAgICAgICA8U2NvcmU-Njk8L1Njb3JlPgogICAgICAgICAgICA8L1F1YWxpdHk-CiAgICAgICAgPC9CREJJbmZvPgogICAgICAgIDxCREI-UmtsU0FEQXlNQUFBQWd2TUFBRUJBUUFDQzd3SDVnd2NEQjhUQXg4QUFBQUFBQUZEQUVBQUR3SUFRQUlBUUFJQkFBRUI5QUgwQWZRQjlBZ0ZIUUZsQWZnQUFndExBQUFBREdwUUlDQU5Db2NLQUFBQUZHWjBlWEJxY0RJZ0FBQUFBR3B3TWlBQUFBQkhhbkF5YUFBQUFCWnBhR1J5QUFBQitBQUFBV1VBQVFjSEFBQUFBQUFQWTI5c2NnRUFBQUFBQUJFQUFBQWFjbVZ6SUFBQUFCSnlaWE5qbWNvQUFabktBQUVBQUFBQUFBQnFjREpqLzAvL1VRQXBBQUFBQUFGbEFBQUIrQUFBQUFBQUFBQUFBQUFCWlFBQUFmZ0FBQUFBQUFBQUFBQUJCd0VCLzJRQUl3QUJRM0psWVhSdmNqb2dTbUZ6VUdWeUlGWmxjbk5wYjI0Z01TNDVNREF1TWY5a0FCQUFBVVZ1WTBsRU9rZFNRbFF3TWY5U0FBd0FBZ0FKQUFVRUJBQUIvMXdBRTBCQVNFaFFTRWhRU0VoUVNFaFFTRWhRLzVBQUNnQUFBQUlLVXdBQi81UGZFK0FKUVRSZWxQQkUvcXRaTVMyM2dkK3NhK01nSlJ0MnhsbExOckhpRHJwTVYxMkNRM01scDVWTTdvbFpTejBOSm9KRTBDbWVzQXA1NGFOdDVneFZWNERhWUFJd1A2TmZ0QjVPZmRORXoyUWpJbm1BRDRLQWdQRGcvck9tdXZPT3BPZkdUTFdVOXZKcnp1djluYmVOSVVmamtrQ3lVb0R3MEVtVzI2SFhROVZqTmJGVkJQOEVlK0ZNbGx2U1gwQTRId2R1L0FaQVZkdUZhcFRYVHZJeldvYXlGLzdGcHkyNURCOXZ6aEhDbktDcFZhREVuWWhOVjh5UEV1WkRMZm9OMEdpOC9sZ0hEeWVSMXNDT29WRHVyRjdSNXp2Qm9vczA5USsrUEc5VjIrNWNEck1xdUJPQXgxcU9zRE9LQ1Y4NVpYMzZER1RwMFlnTmo4aWwxWlZHUnM1R25TVjFoZTMxbDM2WXkybXNrdmNuT0UyenZhd2RUQWJqaEt1eGxwQUFwcGt5U3R6SHA0VmRURU5zblNpajljamE5c0FxY2VUWG9FSzZSZkdOVVZjM0ZvY3dtWm9Kc1NDdnVra3Uyc3AvZ0dUb0VuSlQ2bzlMZ2V4YWlUTTBwQ3hyRDhKQ2NNang0Q1ZvOU1SbGwycWpPbUpGcGtIVElUNjNraHYxNE5wcGhhQ3NqVm5jVThuaVdKZ1dTZ2NiKzVNSlkzTFIzOWJQWTNSaW8zdUM2SVpoVitKakRZZGVLZm8ybGU4WlAxYlp4VVVBd2g2SmF3KzhPa3VxNHp5VnRlbEJpL1h6dXZQOFpLK01vZk9hZ0lQOERVZThSblZXS0s3ejBvNE5oK1M0QUdXdndyTzJndk5sbVdadlJtUW1UaEJSKzZGdWdWQStNYmsySisyQzVhMGJlNjZCeGZueENGNlJtNXh3bnUrQy90SHYvRjIxSFV1L1lRbHd1cElHTzhMNWVtSWZFT2hnT2hydm1SZGt4bzVGRXI4NnduMTNRRkJzV3g0cVg2Qzl6K2ZXMW53c3pMRlRzQmVwRkFhaXJwdmxCUUZ6UUdUcFEwaXY3eVRFSDVFNGRpSEc0UFgxQ1pqaG1vSS8zVjRCbDhpalJ6UE1ucmxvd3Zzc0tkcFhkT1RVUThtcVpJVE44OGl4QThtREJOL1E1d2ZZaHMzdXZ5UEZUK2h0RVJBOERhc1VKVXVDRklaSHZxNHhtZ2VQcG1TMFpsa1dsUW5NbE1HZTVhUUFqdDBpbU02NlVpM3RhbjEwV3dhVDNrbzMrL1MvcHI4emdEK2sySFdxOERzQnJIS3hsM0lnYm5GdlhTRUFUMzdzQTZwTjNUVWhGOWFGTWgwSUxjSHZsVHF0aHd0Q1FJRE8yZW9kbzVOdFBzc0NhdGNPSG03ZDZzRWp2RTBlc2Jib1VMT3NZOVNIYVVEUjNBbG5abjZodEdPeTNZalk5aVpGLzFLTGx5aDVCVm8xQlRqY09iY3VpWnZVaUIxRG80clBrYjhQUXR5VGVCc3NLM2p1SzhZNWh6Zm41eWpIRzcybUpsSHpnRUoxb2d2T0Nzd3cvUk95UkhhWDVMdEZyN0JOUHVtTGxjRG9CaElCSXhXZEU5MytoTjFzaFlYdGFzSDdPcVlnTUlTbjRPamF0a0xSeEdYakZveWVCcmdGWXdjd3dORDUyZmdxdm5yZnNOZ2FRL05TNVlNUUFGZmg2RlptT1pEMDVIWWl3OVZrd3Ixa2NrYVBQeTJTZnUzUDdDc2dCdGErQ2FTTWI1VW1Tand5SUEwTXJNa1QyQ0kxMXNYdjZjVEpHNmhZUk1jRXFkUXFsNkp4RTgwN2NPcmZiMDFJWHhnV1FsUGo2V3pkR2FZbEcxYjVGRUxENGV5aW9VNjFENmVDTGE3MVZHNENqb0k3VXNZMFRXQTl6YjNNRlF5dmVnS0cyR0N2R3A0ZTVCQ2k1Vkl5UlJzaUNuSGo2eUYwMDZlUmZDNDJUcTNEdnBXbTk4RmREbzV2eWVxMGh0OCtqTER3RGZOeFJCREg3ZG13SUU4SWNYMno5K29QbHFqS3hrVURPOVY1M3labGZWRDc2WlBBZnNQc0JlL2VsaFAwOWZyVXRqZjF2N01seC9pcTlhWWE0a0RnMTh5d05EZnc1Q1FOcEMyY2g3NDVCRE5nMStINFRKb2FyRk9rMmt3dEM4c3UxR3FHNHVJVEg4WXNCNUVBZ0VkcUluY0Y2V2ptUVJTY1ptQXQrMmpIcEwzN1NvajNNcG9sYWxMMTRsQXNyQnpUY0p6TUMrOTQ0bjltQVhPc3pLZTRBWW1pUDRONzBYazlQTkdUUUNnUDRIZm03SktDT1pFaEpxaFoyU0RXdkdRN0R5TmlEV3plS1JsQWUyOTdPQ0NWc2x3dGlDZnY1SzBoSFlxMUp3cHZsN25zcjVkbmZYTjQvalZYUGIvRFdFV0lBQnpMSzVGSU54bktDZ2hPa0ZxNDBiZEpTeEVWNW56T3F2SnFTeTNiaXEvcnJHWC9aL2pRUy8wYXpxYkRnSEwwcUVSVkxuM3hlTFk0ZCsvZ3pMWmtEdm5JOVZOZEFiQ2l5cExBWlc2STNDNm80c25Ybk1qUytURUVxN2M2L01ZcjVUQi9RNlJBWUdHM2ZUUnBSUjVZcFBjRjdGK1h0c0k1QmQvWEVCNzUxdjdlYjFkeTJ2ckF5dE8yZXJHdmFjcTRvY2xMZnI0QmhLdmRwRDlEYUdtS0p2SWFrREV1ZUErVnR1QmpGNTNHSm5YejBrdHUyYnJsbkowOWZNb2tLSmZzY2hrZHE0M0xWajNFU2RxUE96cFpORWM1TGlweTErVTBsWG9YVnRGMkJVdm9temlUZEZzTVVBR3NnK3owRkpIWi9zU1BRRXU1YXk2MVV0Y0I4SGptNnFuMFR1RWxKb29KNzRvK1JaZkJjbXRzY05wSkJoMFdndzVQbHhiYVFPdWhYSEFiUHNZWEpVbnY2UU5JOERFbnpGZ0RNaDBYRTA0WnZSbHpKV2JUTnVocktIeGhLTnBZUzFNaEdyc3FUbUxZN1FSRmEzOFpKQlpsd29pWTZlQllRQ1lzVGlBbEVlbTV3em1ncDV3V0ZaS1BuOG9ZNDBRT3B2SzBITlJxcjdMMXBuTkp4U3VIZEhqVDBFK1VZR1BlUUUyYm0vNFFGQzlXSFVIN21NR2ErQmhIeHlXakJjdUtteUNTU2FjdEFQQWdrQ1U0Z25LbDFTNjlXSk9JMkgxUkozTGxHNlN6Y0FFN284Q2pEYXRSWGhDSElhY3BSUVRHeXRFdFl5NzBydmVqWWVFSnNuS0JEcnR6dnF2bmlRWS80ZVUwSU5pY1FEc05vUEtwYUVka3BULzlROGFJaTFuT0hxd3pjTVhOaCtsb21BQzNIcnpVSGhobUNlRWY4R3Fsd0IrRkZ3YmdvS1dXTklGZWZLaUZIVnFWUzFRWmRnQXU3cHNpQWs0Nmg3em9aQnQrdXU4R3F1T2ZERFMvazFPZkVtbHdzL2xTRTJmYVd2MmpENTVFazZ6ZzJ0MXNPRlVRQWFJWVdlL01xOUJuakhqa2taa0l5VnZuZWZrOTFvK1FVUm40cEt0azFNMk5CejRGcHRGN1ZJRkFVRDRVRjJCU25zb0tFeElZQVIwRU1LNjQvSEc4OW5OeW9mWTlBazJsUEthU1NubGlkWis2ZVR5OVhlUWhqUDl6QVJzWGExNVkzSzUwcnlzZ0d2WjlwQTZod3Q3SGFxNGwycFVrNmswaXhLVm1qR1NQTkhkT2dMVE9GdStPV091azhST25CcUNFRmw5amlCUHBaZWF6eXpPQ2lLU0pXUjBleUJzbHRWcDgwNndFWkhOTUUxUWxlWWNRckc0V0JmZ3FjSUhMWHE2ZG9vRWljYkhiVjllTTJFcVFDYXBmT2FzK1BJWWczTmllRno3clNDOE5pRkxJUnhaMVE1UDNWR1N6d3BsTjRITDZJNVBjelVCTEh5OXJqV0pZWnB4TzdxdWlKMEVwK1FGNVNMOS9rK2Y4ZzJINWNTYVNPS01heFYzZi9oN1owZHl3dWR1SmpXOEdNRW5sL29GUXY5bmJKbzRkNm91SEFZK3JRVXFyK3VjbUppWlZlYzdWLzI0WDVPWS91N3FTbVFuQStJUnJES09sRnBtclRCTEhvYTdaM3Z4MklSc1R1MW5LZ1J5OEV6bVhWd1JjZXpUQ1IwdUlNbG9hOUMxOVphWG1QUzJjZkpzbGVjNG9VS2lmemhTWnlqOFN2Q3FtcktGK0RQWlI0T0VvWGRsMC9rK3IyTktNck1oMGJuV05uQVgzQVVCdGdTNnZJU2w1WjNLYU1wL2ZiWm9sOHRrMyt2OXdYeG0yVVpuYVJkQ2RleFBjQS9GN2U4cGlVajRvMmtqN2dJMVhQY2RRZGJGZ01raXBPTE9SUUVQbnRRNGFzYnJqN2lKR09NcmQwQ1lVdnYyZm0ycURaU0lyNmw4aVVQV1NYM3phcERpMmJ4ODFZaEFDbDZwTFVsYUY3QWIrNHI2SklMeVFzYUJzdkFtbUszRXVEeUJiSEwyZVB3eFozZFFTTzZpR3B1VUp3bERlVXM0TGMxR3BENEZ3U3JZWFZBSnZsaXZYeVlBcVM1YTRyWnZSaTVuQnI0TmRVMnRkZmJ3cjlBUWhrMkRvektReXJtYzlSb1dVblcyKzdQSnRITWorbk5JK2lERjJ0Q1ZZM0VWaXEyOTlTaXlFQ3ljeXdMU0VQUWwwTVpiTUN5STdIWWoybzVIZEtab05GZzlLWmVQQkVWWVplV0VmVkh3TWJGTlp1dWRQOWJURmF4RU11Z1VDS0FKdnkzcmtqa3NSNzRkRDc5cTF1aERxRi9VWUtPRStzYUY0Q3R4SkdsWU55eVIzWWZQTHJYcExtRjY4eTc2ZERVb0U2aENPRnQ3WU96bGZHRkVxNkRqNmkrWnphRDNoN1FJT3lUYlJ3Si92RTdHV1Z6V0lVWExvZC9Ta2wvVHNXWjBJM1RzaHVkaFc3b1hVMks3QjlqaEtrNmVVd1ZSUFBFTkxiV1VaclBrWnZmYUZHclVsVHNtaEs2Sks2U1cxUmpxTlY4MUprVXZLbU9MZHQ3bFlrTDF3OC9zUGt1a2tmVGZVa28rVUJCKy8vbGpRR1NhaEtkR3hUUHBDK3E2NXppWFl0dWttOXZCM3RCWHhHWXEyOWo2ekl1WGErTHUxTk1YR0ErR3Z1L0Y5cTR4QWhoZzlQVU1uRnMrcWJLTUU2WHR4MFp4bElBek5nYVlmbSszbERIY2xTaXR4OEpBaTdMUk1YM04vbVJqcmlOSUp2OUFGOXQzMFU4MTFVWC9PQTJPd090Q24vdXVUd3RJOWdSRU4rcVdYRStYUjdaeXBSbkNTUWlXY0FKbWNMWmgveVp1cGhJNDA0TE94SGdQWnZWYVdXNkxPSXZHeThzYnkwRVdUZ2V0WlMzdkhvc3AyYndsSWtsQktMZGQzNGhLMDFpRHlPSDJ0WGlIVjlTa3ZqTlEzaTFpVVpuMlJQYzJsOXBMMElLeStRRlI2MjVtTTZ3MjBWajZOQ3VoZGNnbzI3NUxBTU9WSmlzNE90OWt6WUxFc2NScncvYUJ5LzJTTERydlVHK2RGbjZGcG9SczhyR1h6MnYzZ3EvNnl2ZFRkV1dMQVNDMStjMUVuZDFBMGtqc2dZTEcyZUo2Uit5WVNGVUFBZDV3bi93VmdCayt6M3g0ZXZQOGE3bUx5bU9NL3NleWJtbzlKZDkvRnRWQnN1aEZ0RzhVclVUOFU2eTVXVEVENW1sLy9aeEVqY0NNUGxnb0lWdkh3NWNlVGthTEFhdmpocERmOWJabUFxMFdab0luZFB5SnB2Z09TeC83UC9scGVNZ3FlT0Jmemg3ZEgyYkU1TFh3Q1h2YUllR0ZjdXB6d2tRaklaOG1lbXRHdU1BRmJzYmV0SlRpQVNCZHpHZk1kRUlQeUc5YlFqR2xjck9rYk5kVHlMRW4zQWRoQnRGWDVmY3M4a2FYU1BGeWpCMHRyK05rbjZkZCtoeU5VS2ZCZk9WOFZsRWM4enBKaW0yTUcvSVNjc1BPTmZKTTFDaFZVYkRUZXY0bHRSYU9sMEJNU25mODdKWGZ5cGRhbk1rWUtZdFdNVGpQMThxL3NQbFVBam1nc1pqZzk4bCt3VUI0eFZObzVOaDBXUy9wTGp5VjNSYzFyUGcrOFdENzd5bGxJNCt2S0xONjdDQlJQdDdUcGpRZ2JwYXdEZVZVK0NvNVk5cXVpZGpwZ1UrcXk5L0V3Tk9XT2E2YkZLMW5uc2QvSjhMSEpYRXlpWXlRa0U4L1Fmb3l1QVpuM09iMTd6N0VUTmNBc3U4aExGd29mdEVVOGdqZThlSEQ2NlBHbE9DZnI2NUNtdENSc1VNVlBjOTg4UWVJWEVmVW8rc2YwT2JhQjRNQXNlby8rRHQ1OGpXWUYrTEpBMUlvSHRXZWgyR0d0K3JydVdiQTNGRTdLOE13eldvVFVMckZnWXJwRWs0UmdOeWJiekpxQnpudzAxOStTU3ZQQ1o5aDFpRmxJdkc0ZXJnZFoxY0ZTRm94TlRocVVCa2Mxd2h5M2liK0FZV2R0UW1ueWp4MkNQMEFyYi9KMkJqWHlTNzVYbko5TVh1V2pyZnV4RzhwVlUwQVVQM1g4dG1EWmtsMlIvdzRmZHRmN1lQUHhJdGtCVmExOFBCY1VaaGYzOXl1M25oR2hzN2RVMFNPZm50ak91RXVjVjhCM2praDhEUEpWQk4veFlGbFVGMm1mbllpZWtLT3JMNkN5VndDYlhnU3pYMXVKWjdSVGxjb3RHSjVkK2xaZ3RQVkd6ZmhlSWtEekEyako5RmxPSXVocE1TcGgvd24rTkwyWS9FTFk2TXR6M3VwQzV3U2RrVVFwdDl0SCtNQ0pOeGowNVMxVFBHWXhtcSt0czVKUnBxZVZBdDAzTUt4ZUhyOWZrdG03UitRVU5idGtSbVpXeXg1QWtyZUN4S2lGb0o3ZDNqK0g5eDQvUVIrL2NyQTlEcXRySUpJZ0NsNEJ4bk1BODhxY2VpRmxvWThWZFBzSGVzTExmVUwzWWYzNUlVK25EQSt6UmxWZGhMblRtQ1dySkRoejVTS2F1SEtldzFVdnFFOGp2NVl0b25LUlppU0ZoQ1RDUzNtMGhqdWxyWk80VGxYMk1idTZEUDExZnBZSmhUSDlnOUFFeFVOUkJlaGwwWmNuaTFWd1RDd2cvdDRwa3ZsSUxnbmNwWk5UMy84aWtJV1FiR2xraWZibzZwcXRGdzNnNGV1Q3FBS2NjUlA0VXlDK29DVEV0NFE3RXpYT0NyaGlFZXVKUlhkSzl6SnBCTzl6WFRFcHNreXJibFBQc053aTN5MjIvWVN1Q0c3UEZvN01RcllKS1JicGRXSWl1SGYvTkRwSGRVbjZrV0hROG5PbTNxb1lTdGFNb290YTZ2Y01LNjFLNzBlKzFWT0pjaFlWMjNkSTNaUGdRT2llVWVWZThmcUJJd3lhWnM3TXRvdGwwbGt6Z0NGUk5DODQ1VzZqaWtCaFoyOWliQXg3RlVXSnpxZzVCS2JrSDNkcG9vU3JhMFZ6Z2dKMlc4N1p4UXpBVUVsRkxRZllPcmw0NkJnWUxPR0E4RTB1L3prbWRrcGplZyt1MnIwL091QzM4MGY4d1hSYXBZNVVqcWNrUDJPRW9uTGoyaGFkZXRRYlNDaC94ZzhrOWhlcU5aZmFyTUFwY2dIVnpCK0JxK1BVa1l1VUhDdTB0a0s4bjRVdzVrNGhlRFU1RG9Sa3RiQ3B0aURIMGhSa1pBdXpueThZclFKd09PUk44aGNYQnIwQUtIUVRpNytOdS9KMUc5N2hEWk0wbk9WT0JXVmN0OFNYUkQ1SHJMektGTjFxbm5OOEZwZHBxN3BxMXZ4NnRVUEFJdVkwbXZ6UUFyRU1oUUI3aVd6K1N1TmlTTTN4SGxKUkV3UDlYOU95U2pVaTB4Z2h6Unl4SDAwRmtvT08vd1h2UHNnbWRMNmJpRXBYYzl1Z0hvSFhRS1JQMjVYditzZjEvRzNtd1FkUHFPejV6eUJ4YVltZkZhUFhaYVRNMW9xcGt4cFRuZnhNbWk1OEtidzI3Rk1RQ09aSjZPVEJ3alR2Z2lnWStTM2NEb0hvUmdjSy9hTVhzN2tCQVo1MXl0aG12bFdwbjc5VDhVOHdrenVGUS9mS25vUkhrd05waHp1RVA2Y0lXWVlZYnRiUlNpR0d1SlpFd1J3Z0xqTzdTVGJ2b2xDbUpDdTNNZUhjOVRTYnpMS2JhY3h0UC9MaEVlZU5VTWVzQnpDNGlzYkUyR2JUajRzVzZRZ05UNEMvdGIxc2FLTkdWa0w0QnhYeitFYWpTVktHY3NvT1RyNld4bTFOcVlEbWpMRVZwV1ZTVTZyTEVndFR6amZCbnh6aUcwd1lpWWErN0NmYkFEUnlmUDhlNUVEMU1EdnZTMWEyTHArQkwyV0lDbXA3Z25FZllnZzBPWFYzMGF3cEs3MVYzUUx3a09IbkVaa1VVRER3VXlrc24xVEExemo0dXNhaDYydzhWT1JFU1Jqb0J2MWxZZnI1RUd2MlVNV0JaWHh4SW50bVV6NENXQmUyTi9BbWRtdVQ5NllHSk52b2NDM1o5aE13WjFRcnhMWUlqUEdSWHdEaTRybW5nSExjUzAvL1l0Tys2MjNMWEZSQzRQZWRYNnhnU2ZUTjRUUjF6aUhlbmFMcGlmRFlSZHJrZTVQNm85bmttV3dzRUV3YVh0SmE2R0lEZ08yZWdkK2cxblpmcnFKK3liaStxY3JEUHFUS25ZRUJQMGZLRU9wLzB6UjM4WC96eVB1bldaVC9kcW0rRjRmcGJVbUt5cUFvU1pCVlJGVTRGSFpReVZJYnM5UXhVQnp4dElkWE1zdThDdUpkbERTbTBqdStrUmZqTXhzZHM4eE9nd2tTOTdZWHdUV2x5OVhBVk8reXlqR3JRanJ1QitqS2N2VlVxakE2bXJ0a1VvSE5uN25zTjViTjJERW0wMm5LeG9PQkJHT0lGeDRsbTc5eTJxOUxKamxTOXhaQWwvNC9pZjhiRk9UMm1DOGNFeHRrOWh4S2xaNG1Bd3pGejJzZTdvc0dGbjFLSUtjd3pKaDRUaUduaU5XQ2NBSllIMlA0VVhHRUZxVTlYVldLN2liV3N5enZ6YmtIZzlpaE9KazlEejB5Qm5iWVNabXJESm80MWVlSnV6d3lUeFRIYnlGQUY4M0FVU0ZuclFHcjJCTHNydVREbk5zeUZOVnZOR3pRRmFyOTBEbDVJZXNuSzY5S0d5dHM1RHdqWGtOMm1ybUZ3SDBBNndGUkhoWVM3WUtUQjdlMzJMQzZ1eEJrWW5peUNyTS9UeWgyQlpFOXl4RERBZk1Uc2FqS3NkQnZHMDNlTHQzbk5nZnd5YjhNTnl1VXR4TXFrKzdxQ2hWa0I2cWQwem9ISG9PYnIxb0pTZGVPWFZPTy9TNDE5TGpIMUh2Z1Rwd21SWlZmYVhyV3NNbVVBN1pydTBockpVcFNCVUM4ZFFGbUlCdXhNbjRONkJKOGR4cStZUUxHd3lFOG5lNHVML01OOXUzMUo4T0xhZUpLd0V0Ri94Tm5VNStoNzU0NGRQekdZZGpBNzlsaU55ZDU0cnFjTk85MG5lZWNZMXJwK25iR2oybjFQcXFDSGRJamtZU1k1MkMzSW5DdUd5dmFyNTZZdU5XWXRqVXZTV2k0Rmlqd2JMR2VmeDM5WlFmQURrZ3Jpb1BGa29VVEtVZ3Z0YjR1ZFd2QkJKNjJ4NmJ5VGJ4UzRxaEJzdlVPZ01WWHMzbjJKT1RDVlFxZ1hpK21RTys4TkVBV0tOVnQ3OXUrODViUjVlcXBuYlRwYk11V1M0bDAyT2hITmdEck8zZlltTnhQRXBiUUFkZTR0YzhNdGpHSm1NMHMrb3J1Tkd4VHQwUDhSYk1tOHo5M1BEakVKR3RQeVFJZXB6N0k0ZkFnNW1mc0lEbGRHelRqQUl2T2E1eGxBR2NaRzkvdUFqbVppWVBKb3Rmd1lRaVdtMi8rTGJTT0tBZVNaZDIxRUVCQ2VUUnRNaTJuQ0Y3aTQ1bDJEWjkyWDNJdjd0bWM3UUV2YnAwMTlONnNuK25KODNqaUE2akdqYTFSQlRFeEREYWpMQmpDUDJEY21SaTBrVWdNQjVnOGlDNEpEQmprR3J2SEJxS0k5OWsrVmZuekh3R3M0VVZHdWVUU2NISDZwSFZMb1djZzA5d1J5NkxaaGg1dm5tWU1KWThGcEtmTXVNVm5vVW0rOE11VlY2YWxUWC9ibFA0djkwN1VvVjY3dzdpU0pJZElNdURHdlNNMXNKbENIeDlWS2xaL28ybDhsRk1wSWR3YVdRbEViUXZna1plazFjTTdwL2NyM1BLNHBRcjhOcDRVWDhLaDZrcVQvanpqRmRQWHVPOUFKa1YxVTJSNmU5M1VjaklKaFUrT3FKdUpRSFkzUUdvRXFWUVlUaUU1WVhhVjF2a3JSVjRWK2VWTzN0ZWJ4dHlqQVA2Mm90WkdJSllOdWtzcUJ3SWlnQUlUTWIvM1RVVGUzUjVkUXMxeTNoWkdDZ292cnNxblZpVzRXM0RzZFFUL2dQbUM0K0xFZHJzZk1DNzBmOFhNOGdSVUpENXdPVmIxMlkreStSVzgrclQ3NnZleVdUR254U0tvbVF6MVE0NFBVTDF5V3ZlZ0ZDUGh4eVpZMmVxZE1ocUZVZUp5WE9rSjV2cnFrRUk3Y3kwS0JBY3VTRDFQNHJKeGhaY0RGYmlEYmRxMUZMeUdMWWZPTTJMcU50ejVBalJ4U3RwTE9EM3JBODBLYjVNV2VLY25zS2VjdnJlZXg2VGFDTGhxYmk1Z1kwWDEzcEpscUZBbTdvVHlHRndyRGFPV3VLRnhqcHFkMVkwVkh6YVpnWW9xNWo3OGwxYy9BWi9PWnVvem8vQUxWTzl1cGFEL0EzZzdTNzRHREV0UDBoWGhOUHNyVTdla0hSTW5ycmRjcys5WklDcm9DWkNZSE5IaktJWnlRd1gvQ2V0ZVM0a3hGTk8yOXFna05OUFB5Z3lEck5BSXZPeHlQVVdjQjJ5RVppbVkrTUdiS2xEVmRFZXVBb3hZTkFXdjFVaDRZZUNYY1Rnb21ER0t3WW12RzI3YXZVVVkvMlFjU2c5WkgveEpHNUs4eHg4cEcwZFMwWlZsNFJIbmVlVXJGOWo1SEZaTkd3NDNoOUNmZ2QzQ1hYT2ZxTTFOU0h0dmZkNnM2dk5pSEdCVkVCUUI2cTJGYWhaanVmakpJaC93Mi85Y2JWSlpYSXlVa1QvbEpWS1NNeG0vSkFlbVR0by9ib2ljdWlpSW9ld0ZudHN4OEZ3Z1FJcTBPTU83b0o5VmdQeVc5THRvNCtueEJRcmtBNUJNekNmOWJtUW1xc1FHRWdKOVBDeFFqa3JVQW1xUGJiTGg1d2E2Mk14N3hDc1ZnZGtVMVFaUlJXa2g2NmNtWGgrLzRHS2RSdDVlQkZMT0luL1N4S01YeWxidzBCRjFpaVVUaE42ZnRuT1NNeDRPQ1doRVVjMlpWSFYzWUU1TlBaL1ZnWFpQaytGNXcyN2lreVpoVG41RlhVaTgwMHBNRFVIS2pGZTFwNVhUVU5pRkUxQktxUEh5ZG8wR2dqK2haU01jTHBwcWxYMldXUDVzelZyMlFBcktyTm1oMjJ5U3ZPMFNkRWdQdERFbU5PRzRKQ2VmSUJUM0gybVVKTnM0NWZlVTdib2U0OHVNRTMzdzE3blRZWWFONkV3Q1NjbWNBMFBUUHQ2eTVPOFdZRnJvRnVHRlFndC9pYmFwS2VDSXc5OHorS2JkZW5XNEYwTjQ5eVljeXNlVkxOUHZiN2xzZ293dU5CcVJvaHJKNjMzdEswQUl6a2RQR1JWU0hMVUdWZlB2clhpRm5TbnN1QmlCUmhWQnRDR3lCckwyNmE2N09QV2ZZZVl4ZzdXanl3aFlzZWN3ejF6NFlOT1NyTE15cXAzc0lBU2ZodVdLei9wb3ROdC92MWxSeWNYMkx2c2Iva2Y4MUVxamU1d3VVVVhLMnVsb2hyZUJMZkF6Q2F3eFdKWkU1N1BMVGFZV0JSb2FEM2t5aFc4ZUZ6TTVzclFOSlRYYVd1RW1zTXUyMTJLajV3eFFrS081QWgyYlIzZFhEaW1CNS9sQTBrTUxNQUhIWnRvYnFPU1RYNWM3ZjJQam05Z0s3T0FwS2IyS2V3azkySDBjOXN4YktxSjhvMmUwTTZjKzRDQnVsR3d0ZkJVUXZOMHpzNkNMZjZ0Z0k1cmFLTkd0Z2YzekxoRm1iK1owKzlJWmtKSWJtVzk0Z3ZNWE56NFVRWVh6OXBRMEJwbWRNcmVDUkIxRjdOT29Yb2JPdW9ORGo5MStlY1JCWElGR2ZIelRQS1dSeE14dEc4R0c0VHdxUXBubFpENlc0TUNKc0NISVExa2w2SGd6YS9wOUlCOXZUdkFoQXhGbGRHNHJKQnVkMmFNQlJUUGYvcVZ5Zm9yUTcxWVA5UnZGNXZqK2JQbVlLaERlTXlIRXhZSkZLRjhFYm9kczBzWHZoTU94dzFVcndnZmlDR3VIVkxaV243RE04VXMzSGVaYUVOeGJKM3hrQ0lZbS9aR2FBL01kR01scVVYcGlvai9POU80czJ4VDc0SG4zQXdlaEE2UG0rMFlpcDhxd0FOT3lDUno3RjdTNEVPK3JiUkxXOHM2dkR6emlxbjBCYjFkbkVraWFsRGxBMXdOWmxZaDA4U3JSMzJPdFhhMUZHZUNUZVI5Y2x2RU9MNCs1RkFDdEdNbERsNUJIUlpDWXBhRzIyWUoyMEVJWlVrSDdmTkxmcldMK2hZdWJxTzU5Z0x4SythR1dzN1FrVEFOblllYUd3eWhJN0xZc0hYcVNTSlRpSnVFd0pHVHRHSDRiZDJ2YWlyKzdIei9MSXhyTVNpTElXdXZxYVNDc25GNnBIY1MyQTVKZitiTWt3dXJ5blBiVTlNMElpWmY0KzZQYmgzQThMNVgxbFBjSW1GbWFTdjczVGxTVEpTNzV3YzJNazlFcDdNaTdIQlQ5c2tNU1pKWVhya3VQTjR1bVQrWEhXU0tBT2MrZjFKMVdmTjZIVGlqTFN2dGFWbVFxWllIQWZtQ3RrTHkxVUxlblRUbHE1Nm1TK296OXc2bHBxaUFIenl0QnNpais0UzNHSVdGaGhGWittZEJJSmYwb3hFYUVyaCtyTnI4YjQ0Z2ZVK3ErMVRjWGhWSDczeTlkakw3b0JNUHRDRjUwblVmZkduSGpxNC9NQnl2eW9hYk1lZzdrdW9BUEhpV3o0RE1IQWdHSWIvVmRza2lXVTdWcWNpTnowM2tjWkFQQXMxK1Z0dFFQVTlTNXVDMldDb3RiUHJGV2dLRjhsU3lVbzMzZXRsbXVEWjF3MWp5MURKdmNhQW9TY3ZSbUN2NkZ4MENISHgvY1g3VlNqTWJnN1ovODFxbXZSeWpnTzQ4a3c2VW5zb0o2MDdubGUwYnBqV0FwM0F2ZmtMZVpraXJlQ05KdnVmcTJxaWZ2Smxmanl2dWhoajhDZ2UvcGhwSjBVMEYwR004ZmcwVG5td2FMVTZmaVJlcXZiZkdjWlhRNXI0TzRzeHBPK2hHbDFwOEdOeUNLWFoxbndqcVBIRGNSTWM5UUhWVDZTa1k2UEgzMld3ZVFvbnhadVFsUzF4aXY5UEVEd3dvc1pueFZXK3JUd3NNS1VPbEV0Z1QxVUdHM3d5cDloR2pXcUpkQzlRQ3pQYm9oNmY0RlU1bzZCZ1pnR05SS296cnI3YzU0K1ZBRDNkaGczZ3ZBTTdldUl5cXJsS1U0akpuUEVSSkVVNlQzcHNSR0NBSlRYcUk1L2NWNXpjVTNVdkJjN25xc3hWVk9XdFMrNXFqK1U4NXVSVTZ6NlhsaHBIdXpnYVRHbkJ6L1BScFR4RFNjS0ozV041eEdVbklqT1g0RXNjREwwMGVXdkUwVmZDUmFJeG1ZL2NLeTBTZzZFdDZ6ei83MnhFN29MWFdoR1dJVDVJcEg4ZllqRDd0YlFOTlE2ZTNJUHR1cHNUTDZpWlJuYllhOEVDZUxRUE5xM1dlNGg4dk1mMTQzZHcxaEd6Z0t0NHcwNlhpOHhVMENwRUI3YVhyNm80TGVYcy9WRjJMVDliWE53OHNEKzc5QXZWQWRSWldJYkF5eENVZXdCcjlrK2J6NlZvSmpHSzZoOGdLT2NMelJQajErRC9XODZiOU4wMTRpZ0lIMEg5SE9veGVmVXBwWlNGQXJld1pTdjYzM3cxbmx3M2NQZy84eU5QdGMxdzdNNDFEMzVqWUdLNFRwZ0gyUnZNc0VNc3YvYnZLYXlyTFZKcUR4NHdnSXAyOWRjekRqaGpYUHZLamE5QXVYS3kxYVFENzdUeW92ck1qTW9mSDNVa2IxWFlSZVpST3BmSDZpakhLc0ZGTGlrL1FPWkZqbVNHZnF4Y0JWM0Yxb2drVi9wb1luMEFuWi9tV3dPMFNLdkxYeEpySlhocUN0VVVnSWNpZnNRaHhTUjRBVlBwUWJDMVU4T0ZueHlTTHIrSDFYZDBuT09Bc055SklnUnVJaWNsWktnMjRTTXJEd1V4a0NmVW1YWnUwVDdVNHVZM1NBWXZlYXJUN09GeFVqWkdCTEs4cndERWw2WmF0RUc0by9mSDhkR1JBTDVGSnkzT0c2cjFFcHAvejRBT0ZNc1hNOGhsd1ozdHhrYVJnTEFGN1VzMWVhZENJN2NqU1JPRVVWcmIxUm1aTERPTjd2QmFDNlRCVWtwNUR0b241dkNrcjlsYlZGVENKRWd2RzViNmtrN1h5UHlqc29zcHhVNlZTeDRXVEZKdG0zNzdSYmdBS2k0aDFKZzYyOWJvMHZhVXlLWHcwdHVabkllS1F4bXN2elBtV2RJQUFyNmpYTTFWRFQ3WWpIdGM2QzhFMmdPK2VmVnBtWVdBMWFIZnZCTnVtdEtkYlFuUUVYNkh0bE45cHRwWmJkaHJKeFVRN2Y3bldXeWozZ0ZmN0FhLzlwckxSVTI0RE1TTWkycGlNVVlFKzkydFhHTDV6Vm55K1NEUzZ2OXF4azJOUGxSOVhLSzAvV3dqKzVSMWV0UXcvUHh1dkhPd0lWWmV1T0ppTEFrREp5dll0d1ArVXcyTnZQSzNDcUlnQk9XT2IwTUZvMkh0dWJ4OFlCZG9tM2N5ajg3RmJnTXp0VHdoc2NETWxxdWNrZVJrWjJqUXdYcFA0QS9ZV2lNV0xpZkgyb2IyUUdFTVB2ZGJQRnJpbm5wK1Zaa3hLN0dBSWFhOExHYUZaWENDU1V4bWg1WDR5a2VhSVBVSG55WjI2TlZxOW5BOHlGNWNsdWNnN2UyMEd2N1hUVE54QXQrMjBYc2o3Vi94YVhlTGVWK21DckVDaHc3TGliNjM0MWkzcTd4Szhlbmk2ZEVNZmVtWHRMVHl5NENyWnF5dm5GM3haQnlROFdMbVNiN2xaY0FlTGRZcmZwbWhTY3ExWFFTcDQ4YnEveFNPZG8rTTFpRVY3MFJmMnEwTHl1eGZ6ZU9KVzlJVEU3QnF2WTEyVFdYckdtdmNNU0piRWkrS3ZPQVVORXEyQlZZT2R1ejZFaExVY2c2N0RIK21GWFBKbVNEMXErZXBQOCtKdmxWWHo5cXBBb1A1SUNOQkk3ZWxFcDJ5bkFqWDhPdlVZTEwxekc2eFpOUVF3RXlrbitYVmRlTmViNEtBM3lKNXhodTA2WVVUM0pOTmdoZEl5TlM0NW9vVXhUUXU0L2x6RmpzQTAvWDFHV002MG9TMW5kZ0Urb2ttVXQyRGFHdE4xcEFIVVg1QWhkR3ZYZWRwdEMzTlZhUUtBb2RHMjVSTXBTaVlORkhWZEN3ZEptM21yR3lUbkJEZFNwM3lTVGFkMXZPQUdyV1hGZ09ZSndZNUNjei92MllYcVRHKzMvZjBuTjdDUDVyaGNpNnJNUzNFOTJWajZIWXRNdmpHbVYvaTRHUUttaXcrUWF3L1kxcVRXcWJTUGdZdjJHejJOajMva2IrSHIvZlhhVVVqZ0VuSjBOdEdrdE1nVktYSWRVNVJOVnNQNzY1K3E3V1pDNjVBWFdnbGFMUjZlV3Z5NUhqejlHU2pJUFFTbWowNm9ES0dqOExNVHNDZ0JidW5Pei94U0lzMVFtU3F3cWpScGY2b0Q3cnA0V3hlSzNUOW1PU2JGRnpXMktndE0zTW9oWTVMMXFPTmNpTVUrRXRLK3Q1aExvSjNCd0RVK1VoaWEvWTNjTXJHRjNFdWJRY25TV0ZvR0dlRlRBdnNQcktVaGVzbjExbkxER0hJdUJ0bi85bkJKZmxiTk1jeDVxbXJKMzdyS2lnWWJpTVZvWk8wUXpKNG1BSUVOemt6MFVuUERsZi9zZEFwajJwdGdhTWZuckM2Q2hhOEVrUUtxWHpMazFkWUdFc1F0T0hYUEZMYjNFUnNsd3ZWNmhFU0lDTE1RRmlQYUJXS3BnY2ZmSmJxZUh6ZHh0cHlKNEVtYWJZb2djUGxydHJHWndSL0RZemtvU3VWbmlYcXdaN1k1d081Sk1HRWx0V2xVTUFNdFpOMGxuaHh5Z0lzVmZQdktxVDBxKzBsdHJSK3lCY1VVdWo3ZFhERkdFeDZwQ1JxSmV4YTh3NEV0WElxdldOT25WRHVBaitoUVBZZTBEU0hoZ1FLUTNIaENLYUtUWis2MlZVOEVOZ2ZYdENDeDVTdm1CdlU0Rm4vNXhqd3BCR3VBQ0tMbkUrdWszdUpZaVZTd3doemV1NVZyaWNUR0NtcERhUVVLL2p4TklnT3EzSEJLQjIwUWxNZHN4bUY4eTUyaytWVFQzU1pZZDNYaEZBUDgzd1dycmFicnVqa2xFV01qMUZUYkVxb2dMd05HTmNYRm9sajJtR1FOS0ZTdklZYlBPZVNVTzcrY2d6Qk9UWnJaUDdLQmhWUGM1c0Mra1BVMHlqVXpzamNHaWxkNEE3bER6TkFzOEFDZnROK28yckNkaU9zN2lpZUlLbGNqMmY1WWVrNzFBaDBWTjY5RG9rN2htZEFBcE41OGlaRUNtMll5MTJ6NjdnZXIwMlZyck00R01JQm1kd0hZN1A2VkZvOWdVU21hckFQUkVEQWk2aHNtaFlMTWdCR3JsTkNWbFNCZWY2bnhxUzViZHE5U1puak9FNW5YWE9nN3ZaUExPOVY4Zk1LbUVDNDFpTlErNEVSc3V5eml5YzJIS3A1UDVnOEQ5M2tRMGw0YXBFNkJSWDdYM0lsdXFBVnpSaVN0U05DUHhtTkR3b09Hc1ZJdkJRU3orS05sbEtOVFc0WDVidEZUZFJ2OE5uN3ZZQ1diWUtyd082dkRCVk5oaEZjT2FSZWNHVGFQRFdhYUdlaGN1TGhHVmEycDlxamtMNm8vR2d0Nkg0aWVoNGRTc0txWUxOOVQya1V0NmJ6NEhBejJmTXpXUW02djE1NXNmVlo5My9LYWxla21KNEZtVGN3MHNGN2phOVltZTFYWHRnN0VmVHZtQVJESEpXb1JBK05kUnZOWDljU3pUM0tyVkg1bDVMN0dGRmUzRGVRL0kyeVdWZjc4bmF3VXpNdlE4Y3JCYk9CcjVLdlNwZnM0ajhQVWxHVW1PVENQQ1c0a1FWcVpvWmcyN3NaVWN2U2lDMnpQdWhiYWttck8wMkk5cmQ1Qndmc1h1MTRGNXJyMnZnZnhscnF2R200bTVJYURWamhZYzJSTmNtMm01UzNxS0Z1eHZHNzFnd1BCckh5T2x1L1ZuaUJiZ0k1dDBOMUpHU3U5V0d0b2cvQlp1YW5NS2dCeHZUV2tkYW9nd2pIK2hTMGY1NU53U0NQaU43eHUra2V4bEpqZVMzUWxQSk01djh5eUx5Ti9pbGUvWFkwNUxrWlBrTU1NaFFYSUNzZXhwVXE4MDdsRDdZZ1o0dG1CVU5kQjBRTXBTbXA3L0JLRVAvMlpOcGI4Z2ZTMUNBdkZpUklLSThlT0hQVGFhenFXeUZKVjNWZVM1ZHk3bTZpSUZydkpOeTNmSkJMRHFzZ2F0YTVzcU50a3BZUFhoVXJPU1ZoWjg2cUJXTHVFajJYUWRyNXRZM0NhTWhjTmtMZ1FhcERGL1FpWDlucldVRm9zNHAxSVRtbFZIUTQ4MUlaVlhlYzBmWkszcWV4OUVCUkJ2QzhrV3pHaUxoYXc4dTh6UHpiU2E3QklTZHdxMFhIMEEybUJKYkQ3d2QrT2swSlNEcSt5SjU0V3ZpbzhvdFo5b0pqOTVhTDZPb3pYYzBEU1NnL1Uxa2s4LzVRR2sreThpcU15Z0RNOGpXNmJ1NUM5TFpLOXB6bU16d1RSeTRYZ0N3aE12VDZjblZqRWMvWkIvanJBbkZMQUlRaDBaQlZyU0U2L0ZBeWRXZ3FaNStoaW5xU0hlUXhaZW5iM0FhUWZwODdkMDlDTVI5OTNiOXlFTitSNnV3SjJEWFFhR0RmOXZFdHRrdGFJM2wwU29BaUxyWG9XTVo3c05WaGtlYXZpaUFLVUViM3V0Tm9UeWROcFhsMk0rNXY2V21aVXI2bzlJNEpxNk40VmJWenkwbjZNdVNPdmlWQ1N0OWtRTmRKdFhGTE82WGlacUVQbXd3bkVpS0NCd1AxZHE0WUNOeEVrMnh2Y0hUc3JUeWZlL2xObGd0dFlBWWduSHcvQXI5ODduSHVTeE03d21LRWdYcGQxTEdmYTA1elVEUm1BK21WQzFKM0tNN281a0o3WW1za21uTHNMWFZnSXNuaXFuVmFLNXRjZzcveVJVVy84VWpxWUErTlJBN1A3cnhYWkErU3h1dVIySGszS1JFbEFLTjdnRXlhV0JkZjhNd1dMOE9lQXo4RjJUNmJKU1JTVmhnc0ErRUVsQS9JQVRBZGpuWU1kTDZxWStpWDBBM1dhWEJlR2FQY0FUUGpsSkx2R21vUEFCdmluOEtXRDRGQzNFNVRISHF3VGhlUTYzSlRjSjVnbXpQWG5uNXBhSzAzSTNtb0cyMDYycWlQaWhQMmxxS2w1Y2lpNXhmRzhOVkl0QTVxamxSc0RNUGlralpqNjJCSXYxNU10RWNRZW44bnV1RXhJRmQzWXZkR2ZpRzg2dTk1MXRQSjRxdGM0STkrbzdZeU01Q21IOTJOQjlGc2lXNFpBN25scldFN3MvdlVJRjB3eDFmQ2dnOVhqU0dOYWI2eWNmalhyMHVmMnNiTkxJZEIyOERlMFdNU1NQa0M4QWJOVXJHV2VHNlhnR21lWVF2eC8yazdpNVNwbXBZRWk4bFROQThIbHB0bk8ycS9ZZGJlMGp0bkpPSGg2b0gyc2NmMXRScUF4YVZENDUvMTFDUlAxRzkySmo3d0xISzFKbnJqZWM1WG9MUU9hVHpvWnpxVkNZc3BiWUc4Tk5WOWM5cnJHQy9ZVThMc3Rzbks2dUlyV0x5UndGMzQ1WWV5cFI4dWQrU3Z4R0hTVUFyZW1lWmVNL2dJQ0FnSURtOWEzVitldWQxMi9COUlBQXd1aHcxcEIyZ2IwakFWTEhmVlcxaDdoSy96UEM5c3krYmxraE5YOWF3ZUNWeDlwRFFWcngxSFNFNlRWM2U5ejltUU9KYTkyb0ZlUndHT01JdHhXRm9ud0cvcldUTDdIUzQyQWdrMFQra0VTLzRiNzZTRVN0SnhxVXhwMnFKRTJSeEZiUmpSaEJtNlVtZVAxMWxwQk16c3VqWmgrcjVVVFkvWCsxa2tvWGpnZklWaVRMMUIrSFBnWmd1VFFRMkF6aGZBNzRyUFNLOEY2N2xYc1F5aUp1QXg4Vm44anVadXc4NXhwakZUOXQ5Z1Z3UU9vOTN3NE1RQkUwNmJKNHFWMXhnYkFKOGVidDZyaS92dGsreDNVY2FZRzRRTVdjVllXOEZHTjNtVVBWZTEvYWplK01qSmREWkJISU53dTkrdWdRdm04Z0g2N2d3YmdtVFVQQWJjOGpoSjdRbTNmMEZvWVZHSVZPeERJRndFN1hhTmg1NURxRk42RGhFaFc5NVBOWVl2Ri9OUnBSQXJraGNqcW1VT2ZzTW5kQWpzb2FWWGdLQjA5VW9KSmtGQ3kzdkdOdCsxUFBkZFVjWkVwKzJLQmp6NWUvZEx1Y3BCbWFmWlozL3gzbDZpY0tZZFhpc0NHQVEwejBHUER4Z2o5ZkpVcDZGMnBmQW9xdWIwM2ZrUzJGMXJBWUdPUzlxSTk0ZTVEL2RWQzQ3T1ptSDd6bEx0c1hjbGphc0FoWW1jSlNqOWw1bE9GN2VoVThPRnFJTDhkK1cxYjlqSVkxZWdmQ04zeGNFL2xJRHV6L1dXMjNIMlY3cWZLZk9IQmpVUjQ3SzBpN3B5bGxaU0cwRjY4ZlkyVzg5bHgrSnc4dU9YeFBBV1VhdzF0S2tTOXlrcHU1bWNXQlNJV3RWa015eXlrODFCRmdjelB5Ui9pUmM5aEcwUm9tTUNsNWZ4SjdLWm1WeVJodlJLUVB0RlpFZDdXZW84VjVUa0E2WUxlTDVYK3dUbUg1QzNCQjVsWmtLOWpZNXJVb1VKdTJ1aTBLbE8vcVFrUjhBVlVUa3NHV3hwN0djbUo1YUhvdnErZkkzWFBGZWpRK1JYZDYvdG5xY2JqR3FLcFkzcVdaVXFsSzlIcjFnOHowRWhhRjZEdnpnUXUxVTNQNkhGanlUMS9OSWZReEhEcjdiS0tNSWlld2hHY0J5ZUlUUmxUZ0NtN3FTd3pSRlV3VVovN1RpOWJiNmlnd1BNc3RGTFNCaE9HNytDUExSdkNvKzZDaWhxeDMrTk1tNE1QZmRPWmRBZFNscUJZWFovekxpcTRMcis0QmhuUHlKL2pMbWVBOW1waVVmcEh1UXZrU1ZNT2tEcUx1TmlXbkFURTZZelFlbVZYY040aGpjTEdkTTZ2dWxYMkFIOEtNWFVra1VBZnlta204OEpES0FJUGZrangrWGM4NFpCbmFMNVhFcFRNY0h1NjdCV1NzTnhxUUoySHRnNjJPWlhHRG9rZ29wYy8zWWtIa2pFcVdsUHNIZ2JNcWJPMkdndXY1STNJdE9lRHhnUWxqQ1hPS1BIOGp4Q3o5OVFKeFMrTllac20vRksyeTdtZksrVzgzT3FoaUl1U25KS3AwK1ZjZlNSbGZhVTEwZ1liVDFGUjFjZ0Fja2Jha1UvNTl2WGlaVEZmYWRZaGo4L0xBY2RuS1JramJmM2ZkME5XdGlEZU5GeVBSbXY4dVJQOWR5clo3RjJjQ05hVlVnekE5SGdxc2RKRmU0MW1wT01tbWtBUGhOdzdEeGpCZUFQc0p6SWxkUUdVeEtPbmxiNXNtcHdnSWFabVRVcmtMQ2tnRmZaMkNZVEVHWmdTUkhLa2Z3UEYxYnhLQzN0YU8wNWNrM1lEaTZLNTVHQjNYT3ZRYU5wcFJmTEtwMWRmdk44bXRwQVZvMnV4VFhIZk1UbEJJam82MWk4ZUtzVlplc3BOTE1WR3NXekR6YzkxUVVQaFdCamo0V0JRUEVWMjB0Zk9XMFZTS1ZNYWNwUGhmYXpQM0UyK3NGNGh0WFdZaG8yZjR4VDdobjJYUXJEU0NWOHVrUktMa0I1eXAxQ0NYWS9ZREY2K3FzVXYrOEhRcFZiV0dKaDRWWmh0TmdPZEduSlJvZCs3dFNkUDhyNUErRzhDWUMrME5mNURLZ1hUYXZsVGVobkQvUmZ3bzE2NHdsK2toSENydWxtclRpcVFEbjZDMjZlUlFMcFp4aUROY3dNYTI0Y05hN2dDRlg3ektGOEFyaWV6MFkrdjJMOTQ5RWN6emU2aVNyMEo1ZkpOWUdOY3habGF0bWpWNU44ODVlSllSM1VDcG45Y0J5ZFRlVmFDTEVEUHduUFRJQkk3MHptNmUvSzdVOHQ2cWxuU0kvUk9oL1RJNWZWdXhIZ3RQd2F1RkIwdGZyY1RYdVFyOTdNQmFsT3NBaTNpT3RZcERsTEg3TmtvQ01rdlp2NWgwaDNmRjExZDBNQk4yUkRSNlQ0VjJqNUhlaC9IM0lDOURVSWZNRVBGV0lyTlRHa1A0RzYzc0oxVEdwVEplYWZSbFZxZnowMHVDMGdobzFQMUFjWmwzbzlIVzl5NUFsbWcvMytmb25pRzZqS3gyZ3oycHRGNyt4NTQ3Q21qTENLOUhZb0JVckttM0ZDbkdkSXg1aTBURmJKWndXNVBvVlJWWjEzMUJjYVhCeWdzNTFTZjdaYytraUVLL0tBYUNUbmxGQVRwU0FkVGVVM2tFQ3JmOVNXU0M3VStrKy84d3o4eEpNdWt0c052ZC9rcERTN3Vtam9uYStHT0VmMDZJQWs3b015K0N2R29KQitacWttZVphcGNzalA4RlRWclRDbXdpeFVNZ3BPVTY4bkVhWkRMUWJ6cUhRc1dqWFgxQmVIV2N6NE5qTFFHY25SQ1lPbkhwdDA0aVZ6dGNWbW0wNlRJa1hPYmhVdDhFN1lHWExSYjBJd1NFQnpvMGlZQTRsbm1lM2M5aXA1djVGb3BjQU9zZldpL2s3OUplN3cyWFI4NEQ2eEZhUUM0U0Qwb3kvQy9DSFNvV0l3a3JBSnY5b3NSZHBwRzJoTHJkZWVWRmVjYzVxZ3h2Q3NCWTlKVStraElUMnJ6d2Nlc0NRNnBRWlZSbnpqbzY4QW43bE52Sit4UHpWV2Z4Qi9qMk1veERtcHFYL3cxN1VkZ3MyREk1NmRUR1pHeE1HcWZ3eDZDckhBR3lsU01MY0k5V2ZFMm9xWVlaYTZaSVlHd0U1dFV4UlByV3F6NFJQNmtoT0ZnTDR1eDBiSEg0d3F2dEVUMnZMWm1IUWlsUXhUQ2pGVHdnbXkrWW9qNlJuUmp6a2xhWXMwcE5PMkQ4aU1MN3ZaZ0doZkY2UjFMVG5Wd0N1eFdKN1NGem1HVUhXVWNQZTRpbzBHbG9JUVhFNmp6RW1uNHpDTW9va09VaU5BaEs1NWJoaXpZN3BaY2FGUmFYRjJqV0xFMlFqZGRDZzhuMHRWQSt2cDc3OTBOazI1QWZOUEVyLzFJc2ZGbEdPV2l4SWxCM0NKVXgzSjh1ZFNkR2JycUJGd2Faa29xMnVteXNWd3o1bW9IaTRBcWlQcHRMM1FiN1JNc2ZkK1FwSUoydUxDY1pPNUNDeUY3NHBrTm91S2daTU1uaXdOdTRnRFhMZ05aSS91Wnc3bmpkdUo5YjhqcVlvSktaTFRQMUtNMU04UjhyS1NkUUM4Qk9FLzV3a3h1RXJKWUpUa0lmejJsVUI0alM4SXBzY3FtRVVqMjhPWjlDVldiNVJGUVJRY1lHTHk5YUtML1BoRXl3TCtZMDB1a2g1UDlPc0J2NUxrVnRpSGxRN2t6UnhSQ1VWbjNldW8wVW0xVUJXbTFqOFJsem5UNmFHK3VlcDZvSTAxOWRGRVdyNnNBRjYwZFVvK0hGS3loSUlDVU5zWlg5bnBtKzJIQkJoN0FVQ0pCejBvU0J0ZjQ4NW12R2FMeG53YlUwNHNLbTNRSmNqaUFQbU1BSXgwRE82ZUEzalNibVYybEQrekkzTjMxbjRDWXl2VGtpRTdpMEFwT01LMnJDZlpQQ1JKbHN1Tm5UdEtzRzBuS3F1cEs3ck9mZzlSYm5mN25lQUt2T01id3FCRkcvRExLRnBFMUlBakN2M0JaYUxodlgxQm5tQ0p1WnIzdjBZZFo3dDR6eE9oNERvZzhtQUJuL1I3bnM1eVlLNkJpRGRzWFJSeG80dnIrL21LVWs0dmJhWmRLK3lNaWwyaGVSWHBSUkV0N1pxRnZUN0lZQU9md0R0RTAyb3dWUnprRWZyWEx0OWMzQUg2eWdrU3hRYzA1T3g2RDZkWTRRaU1zYVRvaVJKenNZdEs4UlVLMXBldU1wWFBMUSs1dFhTRjNUZjl4YjlPdTFKS1p3SmMyOTVKdVc5VC9ML0hweDY3VENpTkZVdzBrd1VjN0tSRExLT0ZxcXk2aFNDaTIzUk9ka1dsWnF2eWJUcTRVTmxFeDRaZW9HUnlTVmMyS3M4QmVZTytTRUE4Yk9uVFliOFVIVmZDa0wxTUNyVTJxS2s4S2dNVHBqZTc1QlBlVDB6M3dlWm0wSjRVdXFZVW9ieG1QWFI4QVdjTWQ5Qkh3djVSNFhxWkFYVXVQcmF1R2k5SEo5NDF6M0xMN2Q2c3NDMUZ6QlZjaWxlUGxoNU0zZGEySnFCQzBleXE2YW1aaGYrUzF1alhGbFBBb0hXNS9mSFVmZTU4RTkxekxSRkwrUUNKeVlpem5pVi9UMGhqclN2eGZqeFZ1a2lFck5Bc1JPbGhTNFJISE9Bc3c1QXA4emxjeWdtUnIvZlhFN1pxLzROL3lOV2l0NDZCWmlrZzZkdlFIUnd5d1VhbHVNajRXMUZPMDBzYVgzZzBkVHNBLzVFdzMyN2xjZi9yTWdGRXZ2Z0VXQWduY2d1YTMrb2Jhdmp0QnZpc3MyV3dRL0NKZ0kxQnV3VkN1ZEFGeldBekJFSjE1T2hscHpzNVpjQXlBZVNVVnA1dWVKZ2N0RjhSN3MxMW10QXU1TWQwczVhNy9qWHl5UURIREhYandUV3MrZFRJWm9yRDJ4bDkxZWdORFN0bVhUd3BYTzB3M0ZGdytEeUprQUlUWFpKU1dxL3JSOHFISlhWUmdsdmhONWtiK0ZjRGIydW4zTk13bk5VQityektYc1I2R2FqRzIxVG9SWmw3TTE3RVNYWCtuL0RWWklLREZMa0RDekRCelFJOHpIUmEyVHNjczZ5SmE0MTRreGRsSXZ2TjJsQkhGRC9ubmlpZDNTN3BPQVdtNzltdzFyWE1yOXJIbFZna05zSDAxOURFczdBcjlpTEpjZkFZWWRjdzFxOHlQWldlTGFGRUJaNkJoVG9MZmpueGhtUmYzeS9QSFdsRnNnMVZMNTdBV21UYkdBdUdmTGxtUTZ1ZHpHRm1US1FLZER4S1N4SlV5MU1mTllycC9DNVdTMmQ2Vm1wUkxGekNKV0hUMmFZMUFRWi9RS2d0azhvVXN4Qk9PMWFUTmZlTEhnc1UvaGorNjJVeW5Ya2tJcTFvQU9sdkJTZmNJd0VEeEc1ZFhXVTlNZzRhbW5BOHlXN1c2NnNjZDZNc2Rwd01PbEoxM0ZBTDlJQ0xtZ095RnIxNDhLdlJiNDRnUGpWZHRFbzF6M0FOSTIveDFpdzBUSVJmTVB1d05tM1NjSXFyZmZ6TXRrWE5GVzBpODRpdnJoSFNsYkhQR3BjT2x3TEd0elRCblpWTzdlYThvYkd5N0NXM1MrZXJsVVVBOUlkcVcvV2l5UnR3U0JrdWx2ckY1aitaMVJoNDBlOWROUkR3TmM1TTJacXgwRUFwWktBTE1laEZwdi9IVFlJck1RWkkzK1JaWGR1aWsrVFU2TzJ4QjZZMjJ0TWJjMVZBSEZMbGlGTUMvcVAwZ1VUY2t1b2FCUDg2eEN6NEdDMURTbGlPcXlZcG9BcFl6K2VVNXdUamRyNWdpOWM2clVBZDczRGZZMjZRZ09QUk5xM0QxQ2NCcXVraVcyNTNUL00rU2RvYzlTZ3JOOWg3aVRldUhGZW9FNE91NW1GRkRXbVNqTDR3cHZYRklieEY0dTRubm9IZWxadHJhR04yTnAwaFR3eTRnbWl2RHpEc1lPWjVkYzlpVVNkRGY5NnowQXdudktoQU9Zb0xxRjlONmY0anRmWUIrVEJhTmhreGRXeUxMbXFwdVNJOXVzazBocGVJQ1pCK05xZGNuZ3kvOWdPUTBWR3B0d240bERtSUNEb0pQQVJyZnpERHRybjVvQUR6Zm5OMURjOGRkRHA4czlHN25YK3JEVmh0OGgySEtNajVDbVhrSXJQTjZqNlA2VlRLOWNvRVE2cStoNjRxWDNzNFZnNjVhc1dZQ2pEZmF5VHVrbWc0Ui9GTytIbi9ONW9CVjVPVkROWkxuTWZMcElhYitoVVlNRzdZMXgwbXkrSFVxRWRKYWt2WUhuUXcxeUxHbU80R3VSSlB1c0oyZDFwOWNYNnVkYi9Jc2I5Vk9QWWgybVVGNmt4eC9uQ0kwRncvOGJMVFVIMFZDWEJkT2E4c3pTbUwrVjhVVGlnWkx2TXBkeUY4L1FVUXFQeEhWdTQyM0QxZTg2em5IRlpDYTRtS3FsRXhHOWpHOXQvTEpaNGtHOFZxZXNGT05iVmVlNko3TjU0NmRnYzA5S1YyVnVhNFl2SnlBbXpDRHZaU2VSZ0owTVhwdVZtdXdDL2xhejk4WFo5Y0JkcFZESTN5a241TnJIZE9yZlFhSU5nWGZtMm9DdGcvU08xK2ZXVHJzckpJTFc5dzQwRFl1WnUrQWwvdk5sbGR3L1EzQVRidGV0SXpHWnAxSzVrVzY3ZEhDc3kvVGpLMUFLbDZTY2tKQUpXb0pVbTJLd2swenovdGdCSDBsaW1nSUh4dzlqNTZQZ0lDQ0EwZkhWOENGa2pMVCtPWXl4R2lxRlBKeVdKVXpaYmtmemJCVHdtTXBvTTRqRlhZUXA1UHBZZ3dHRFVJM1htT29uU3ZLd2hneUxRMmxSMTQ1OVdwTnJJcVpNcWFjQ29EczQwT0d5Zk9jSkJRWDgwQlBWWHBhRVM3M1lvTUgwaEViRm96a0QveTlyejFzVDgvVDIybVlKRlJ3dXR0WWxPcjNHTmx6cnFWWlRFSDF1SGx2MXhjM0p1cmxDbWZwT0J6K2dHMEJjWlArSEpRYktIYkdKdGNhUXFxbEtUR0w1WmUyMnY1Z3FrMDN4cFU0SitZK2p0ZjJMNi9yTWorc3N2K3hMLzFaVHI5anZmc3NjUHIwNmZ0dEcvdGVmOXUzbXZ2OHEwT1RlU1RsaDBQeUlCV1BxZ2YweWRwUDIyOWd1NkluS2Nzc25mT0dkcnQvSE1DMUtZdjRnRmxTTUd4eFdCYlZqOEE1b1Y3MVdUM21Zb0dBYXBpTUJUMkVJYnVuc2RScXdYVEk5aHFpWkhVK3FYUk5WbGtkTkhwejRUdjNNREUxWmlBbFVsbnJ2NzNOS1QxQ0RYZVpRbWdoOUhwYU1GWmFEbURxV1cxeVdIczh1MVVkTmFkc25xOWdNQW10aVBZRVU5eldZQ3pZVVc3NGpwTnF2Qk9DTXA2Tnh2WFVFU3k2YlhZQys3eG9DaEY5ZHkrNURIWlVKcG91YThxT2hJTnVaRE5wbG5PUExGT0hQQmpBSFE3TlJEbVhPek15blNBQjhtY0dBM0Q2WFhKOW1MNXoyZS9KSVZVanVEOTB5K3pEWTA3WVVSaHp6UitwcFQycHMwN0U5ditzWndZMHR1MWF1UkZuUE5NWHlKQWZRU1ZmZXVNOWRJd3dwVTRRL3dXUUIrbEhRWHVrUlFXQ0MxQ3VjaDJZZitldkc1a2RnN0tVS09ySDdRWU85VG5hSHoyQTgwQVBZNVhvTllKb25xNlc3eHc1bFFOWUM2aWFZS3ZMYU0rR0YwVExCa2NBQURVeVNlS2hwZm0xY0VROTY4MkZqRHV0cGNDZWVUTGVKZHpwYjA0US8rVHBKVlpwenU4aVRUTWdjdFF0WGMwdmJSaDhCSytOa1RuUVMrZ1RwMW9UVlZDT1lmaXdEU1kwZlV1UW9CcDgrMmowMzVQQmFsRjZVRlJSdjdpV0hvME1pbEYxSjZlZmY0VEtOOWhYWWd6WGJlMXdjRkZnMUM3WUtqby9DRGVEL2dna3l5dm51Z1ZXQWlSM2lCa083cWlXVzJ3SVMyNCt6a1NoWVBPZGl1ZUlQMThZK0FoeXNXZVgzTVlNRXBHVTlVS2Q5YitEb0FwNFNtQ09janUvQjBpN2NFTWhFSUh5QXc1VTcydVEzV3N3cktVSkRRYisyTnE1WXlOWVd6OWlDUGsyVG95Tkg4U2hSM09TeVd4VTJEL1NMblA5c0FtMktKeDZzTy85c1B3MHp3MVc1cXhES3NxbXlwRERObDhCcUY1UUNKSUdhM2tYNVJRbzVabVJqQzlaL2VPK2t6TVNGZEZQYStwVGE5eE1valRiUVU2Rll5eHZDSHFTbWsxQ3J1MmE0RTI0dkZBd243bS9lSTNBRjVmRDZxUllQeW9DRDc2aXhDUnlNNTZZYU0xdU00RTdNU2Z0QXZZM1dPWU9NcHVZajkwYlNUMFpja0Y4MCtFOTcxVDFVTGlrK2s1VTdGV2I2V3J6TTlyOFd5czRIZXlLbk9uMmV5eklWcWlFb250d3RFaUZJWWtiWkJhcWgwOC8yMEZXUTVzd2N5SlBxMitycVZkYjlZdzBlUTVRZlQ0Z2ZacG9OTUN4N3NKR1F6Z0N5cTBnUUhsdDhmdkwxRVNiY3RIeFFKSlFhT3AzdGRtayt2Ty9MVFpuT0xoSkY2L0RCWDU0QWRRdzhPN2dmR2lhUklIWVZSUExZN00xekxlTUZNWGlSVExiWWZBcVkvblJkQ2QrYjloZ2VKUWpLanBOcU4wY1p4alhia0JHYlJNMjNLWUc4cHo1NStlOWhWUVhiRm90QWZzZzF0emR0SnE5Sk9lV0lsVWhBMUx3R3JJQ3BiUjJtZ2huR1FqcmpUUGFQNEErcXlJR3NyWVB5VnFGYXdZUURnWGpvOU5EMVpIK0xNYXR1dEhUL1VrVFlUcGpvNWhSSy9ZNUhGTk1EaDBsRmFhdU9JMUxtS3hwcGNnbTdSQ2sreEdUM0FISkJhZTkrcXd4aTl6R2k2djQyc2FmSlBKckNFSmQvQ3FqcFpHb2hRR0U0VE15clBzczMxOG0ycnRHS3I1RVJLWTNrbENBNFhQYXFZYWhZRFExWTk4YStWSFFZK3hESEdWSm5PRkE0eDhKWlRVZ2ZkYWJtblY2Y0Y1cDF0VWVKYktRRlViQ3R6WmZiVlJUbzhjZmkrdGNQWGNsbXhmQlpua05BdFBDa2M0aWN2UWRQdytxTVlqQUkvWjFocjB4a3hhbW5MOXQwcGt3U0dWeWRsVVJvZlZneUF1YkdHUXdSYmYyemdBZFhWZDlQdG8yTGlXdnZkWWo5OHVLcmd0dzZkTERuZU5zWitUaWs1a08yTVJRNlgwV2FWYzJVYk9kSnhiTDVMWmJzeHVSa1VHbnQraWtJOWhmVFR2UEFoVjZCdFNPMTlOL3FXNGpNbjc1SzBJbjJSVG1HaUtxb05aSG1kNzAzVVArQzRLbG5NKzlQYm5HejhvY3loSUtCS21HTlJqQUVUa0dUWEluYW9sNXdlb3F3U3AxTThGdnpHNEs0NDRSRjkyaUxramlBdW5VZGxveGNxci9RU25nZ1VPTlBrTFZMRU5nR2NXY1ZkTjhSS3BraElMVDd3WVZ6M1lMRFVZUVNRcnNWRmtFMVd2NTFFbjJmU1BSS2dqUWtwMkxsSTVHT3B6WUNhUDZUeWp6ZmxtcFQrNGppVEh2eDY1WFpCS0FmOTZtUDZtSGdVclNQcVIvQzdWYWZIK2NxVlRLQUhCNUZiWTlpMUJzMGN1UG1uS3o2NVBUSzRhbVpROE03RFVKVURSTUl6K0JUWTcrMzVMbDRLZ3FtQTZITXBBejBsM2NrQUlmcVBINGYwRnViWHRIMnVCek1pYkFqWnM2cXZzTno1dUc0V0UzWitUQm1QR3lRekdlSTcyRysreWkvYzI2bHNsRExmRWYzQlZrckNvQSsyMlBRZ2pZNjk5SHRxamxYZlZXa0lhbng5Rms5cEFGaE0yZmVoZkkxZGFla08xWXIvaXZzbWlNTW8vMU5jMUJqMVFud0Fwa0NSbTF1NUtUNTFWa2RSSm5Sd2lidHZ6VzZkcmx6M2k5YUJHNFJKdk9abzM2am9GUXEwUlNFLzFCSkE2WWwxeTZPelVwMmtMZ3JNcGxoQUIyN3BsOXlsU0hZejY4RkZZTlI1cUFGR25ja2VVM2FIKzJ1U1FNaE5qbDdDMFU3RUJjMnBoL2JsVkEydXpRWElXTzlzWFl2c2toa2FMbUs2dXp6eDRTa3ZQeFdPRUR0dnNnZU9wZVpuU3RoMXRvZ2xVOTlqR2JydEQyaStuakUrK2FucVRRVjNQZGZzRkpmeU5UZjhLVWUwQUd6Tm9EWnJxeGdVTHNINUNyZVNIdFJpc1QwbW5VVWEyeHJiQlh5QVE4LzA0R0htOGZ5S3E3Tnl1OW1ySm1mQ1NTUWtST3kyZXdQYVR4STlZbVNBeHpiZGJ4WnpTN3BmWWRvcG8vUTd3LzkwcWwwWjJhVGZOZTYzU1BsV1loNFBidnJkcVo2aUkvNFdlbXcybVBCZjZBNXVKMWZCbFd0RUhLUk9wR0VwT0dFcGE1NW9OL2pFTnM1UXlzU01UZTRwKzZVakRHMjU2YjduTWV2cEg3V1M5Wi9XMzFzYzM2RzhjalVEUjJ4QnNNaCtJbHE2WmdENEE5ODR2OW9kenRkQ0Q5MkFFSXpxdDF1SUN3UU52YkoxczAwSm1ZUzJJT2xzckd0NTN6amhvMmF3eE1FL0RzWVJHMGpYVWcvVGNCaDZROHEyOU9RRWlTcFU1SUtkVmxubWJtSGNid2xFbFRxa0wydVN3d2UyTDNuOU4wT2xDNVhibjg4aGpNdWUyODd2Rmh3L2MzL2VwdzlFZkl4Q2kxa3RlOXBvQlpBZG9MRFJGdW5OajdXWE5rTHZhdFVKV0xWNkxpR3Q4bFJxZjhyTDNCbm1LNS9Fb2RwS3NOOVg4cXFUSUtGVWtDMXhoVmlZUDl4OVR4OHo3Z25tSWtzcDJyVnNWNkxrT2cxaUJFNVdUT1Z5aEhsM3hMKzFpVG5jWXJ2d0xyQXBjclVPLzljYXFyMWIwME9aTm9nOWpWRGs1MG80TDNBNi85dmV1c2h3TlorMWo0RzZPQll6WUZRMU52U2pOWVltNk81OGNZQWluV2crZkJKRm80N1NDcTJyT0hRVGphZTJTSTUwYXBNQkNuZGd6bm1mZGE3ZWdOMzdBUWRqL0RYaFQwakRrYnNkRlBYcm9Md2xCaGRYQlpDeGl1UHdSaDJqT1lJdUtlc3ZNR24xZ3pCUmdzL0VZUWxSVm5pRHhUdnowM3ZvMStzK0V5dCs5cWdUS25kME5Yd25MME1JRGVONUh4QlJVYkhaNExUdFZnTmg1bTIvZUtTZmJEbXhVQjRtUDcxM0dyTFlTL2tQVGVhTndUQ1IzbFpPQXhvSGp2YVRZZjBjSjVUVHpHTi8xZEVONTJjcFJtemkrMHpEME5ZZkFNZzdhYXM2ZnR3aXJKMytuYXJaTEJtSTBjdEJUamsxMDBmR052SmFKVGVtZmx4QVZsOUptdUpzZjNVL2h5UStXekY0UjFmczFDb0lkc1o1QnkwNGlyOUNXbEVsYlBuSERkRGJTTnZ5YXBTUnM5ZWVRMHFDMGM5QjIrazJTbmhEMDVzS2tiYTlsM1pLcWxuNWZYb3djWVFPL0JmVDZxUE4xbjREWkdvMHFabzFWM01GRXVZM0g4cXpJNmJwNTFnZ0JXSVJNYzdDbmRxb2tVVDgyUkxrL3YxOEVYakR2Rkp5N1h2NGVLS0I2MndvQUdYY0wzRzdhTnpIMTh1L3lGaVVKd1NUWGwrWXplbitQdDNXKzRHNWV0ZVd1NldrUXNaUGpXVDhVVFA5aDJkSGMvWVY4bldHRko2TWhvTytnKzJlREgrMmRzcWhCelY4UmZ1M1A3R3pEWnNia0tjNXBhaGFWWGVhTWRiYWJLS2dWZUNMNWxWWDVpWnJGRm4rZ1RQOVVsSm5lTi96eUJ5cHl0UE1MbmY5ajEreWl4ZXN0R2tvaVB0cUhWRm9TanRjNU5mZjRwR2JKQU5IUGo5akNlYTNkQ0FJMG10OHl2WXM3OFUzZEFteWphQmFldmhOb0tod0ZCRVovcklocjk2cktuVHUzYjZoeVJPR2ZqOHkzK3pQOXE0M25TSmhYR3RVRmoyOElvOVB2Rlk3SHIwVFo1SHRaUlpzY0paMEZ1RW1FQ2V0NGpiZENCUGhUd1ZMZjBFRUN3RGgvRlZ5TnNoNUxnclRZa0xINHBkT1NycHVEdmYzZTZqSkYxQjFSb3BUdlFoOHB3ci9qOElHa1lOQXUrYTlrbEw0cCtacmxZeEZjQURCWmZIOHFDVDVhNWZTOVJvZHdvUktwYlJXaDZrTGUwZWtGYytjakRmWUhRSEhJOEpaWGtvN053VmJ1M0RxN1Y3WXFLWnJ5Yk9BWjIwcUNpMFJlMVJBRkQ0UUU0VmJpSlhyNnRUVkRQY2UxdWwzbHErZHdsbEFnV0krVFZJTnNpOENtTzh1M2djTHNGOTZiYVJEVHpvVkgrM05MYXFCeUZrNk1LMFJRcHBFQUMwSmM2QjEvenEzamg4MmZrcU5Obm53NlFuSERVMUpYTGtzVmxwNUgyME8xN0RHUXlwWFRUaWQ2dWVEM01vQUJmaXJIMVlzNzA2VmFzUTNwNlNJemthbVcyU1hiN2J3MGIzTCs4YmJaV3EwUEJYZ1VyeWJ0c0VCMnlUZnZFK2lVclREK1hienN6L1lvODBtRDIrY2luMEJDSU8vWStERjU2QUlSSk5EUG5NSWNXQ3NvdTRkMWhYekVad3J2aVdzbXUvcjdkRVBWcWpwcnoxQVd1R2M1WGdqdmcxVnZLdVZ0cUtsMWlvdnZtcEREL25NajdCb2JHbTNXUmpHR1VORkF4UEJkM3BuY0hwbWdHaGVuWHQ5STg5aUxtZm5hTEhHdUJsT0lWK05RSHZQMXYzcDdGY3lNUkNnMW1Nb1NpbDRYQ3d0VU5zSmxoa0pTR202L0xZeFBCT3VaQkdOYTRDUXZDUUIwVmhGZVorK1NSQXBLUlRwMGxYT0dwU0NIeUsyNXB1RUxrUzhweURuWmlIeVlLL2x2MzR3MFhzeUgzc0xUVENsRTZLOUxOa3I1anoyRjRNRUJuRTVkZDBKMDhBUkxaU1l4VXZqRXpCUmFuaEFHQXMyckp1dndBWkdzRkNJaXNsU3U2eWp5Uks1WmNuVWxHakR1MG1nMHlTYVRwYTYwaWJBbDlkYmFVci9wbGNMUUFxYTJkUXlnWndaSXZ1bGp6MmptTnV2Wm9paXYxMXRDL09xY3RyWTkrT3FURDVPakNQbGxSUy8xNkZzQXRhTHp4ZXhnMXdheU91U1ptdFQ1VlVYM05Rb3hwTEdoem5CL1plYk1QbXd4eVltS0dLZVRnc1U3cnNWY3RaU2JDNHVTUWJVdXIreG5tT2ZvcFpDK1BpY3c3UFBUOE9xdk4yaGJ6dWUyU2VNZTJZclJNdXZlcHVtck4rMXVTcU1xdU5qb1VWWW1NUTE2cGR2bEdKS05XNHArSnUwYTVLNGtsbzJJVDFCL0VqQ0hIQUpkZUZQUUsrUUtIZHhORkt4ZVNzZ2o5bDJwOWg4YTlybXRFckRTOGs4bFlnQ0lPRVk1a3N5Tld0dTlxZHR0U1BFM1ArZ0I3cGt4VlpkclhWUWkxYlpLOHhMbmNsSUd6WXMwU1h1U1M4YnNWd1FzVGwrZk95QU1sdnhvaURxN1JpTXkvVmJBejRWSU9sclpqSTgvdjhhaGNIdGVVL0cxTDM2bDNoVEFJV1U4N0ZKdnd5bitWSDRJWkZRaGtYeDhiKzdleW52enpNNmZWWHRFVkVNVHBWdVloZlhIR3kyY2RxWXpRZm9Ca0ZwdjJ3a0JvaXl5SDBCbFJaNFkrNVJSakY1K1V5dk8xWGJLVFFwTVFRV095ckFTQmxZUEx6cHUzVHl6VForT2NCelN6SUllRGV3YWthRW1BVVVlRktvUk9HeTkxWE5uVkgvc1ROWWFBazZhcHlhdEdMeE9uSlNBQXBkcDk5V0RhNWhNV2JIMVMxaEY1RXVUcXBUSmR4dmY2c09BU0QyWnAwWlUxV0N1OE9XV3JxajZDOHBybUtlSjdtMHlzYzhtRCtsL01PRjRiUDVBYXFkV2pRL3d2VnZtczlySXBkalpkSTJQaThQTW9ERitmdUNkTnBZTXdCT3pwcHcrVXU3bE9nWXhoYnFZdWVDTHFvMHMwQ0pKZlEzTmRpWmxqRVBzNStJSnZ6WWxKaExCWHh0RTJpeFI1V2o2KzBuWWkyZnA1Njlzc1NJVGtkYnJlMjdLVXAxZjhWMkhRU1BhOFhvdkF6NWZJL3FpVHUwNXNRNWVGeHRUY3JHY2NFcFpMdWNRc2kxN1BlL3lXUE5pQktFZG05R25LMlRjbGRVWnBUM2VBZTkvSXUwNVJ6eHJab2NuV0J2a3NIQWNWTGZUalB4Y3c3TGp2YjNIaXJxNk90YURUTkhGaHZRdS9RWHBVNUhXcnM2eWhGdklPbTdCYjZ6dXdUNHpsNlZBNk0xcGxJTkNiU0hxT0lVTHNaKzNHWVFDbmdCWDYyLzFiS2xGVmJyY2ZHNlcvRlZ5cnMrOG1FbExQa2VsdnJTaGYvSHJSejVzbS80aU9SMi9wWm9ic0F2aGRHL0JtZnVPcUd2LzNHVVdSR3lOMURSb2VKbHR4NzFaWWplVnBycUhvcm02ZzJjeG5hT2lyZWkrZDVpLzRzaHhja1ZDc2RIbHF6OW5ScEgrck5jNFJ2RUIxSXZnbHE3MTRCMmZ0YmFzOGdFNjF6c2tGL0MwL3YzRFZyNWVFYXZudGhxdDZxUnIvRlE0M3FXOTRTMUttMzRUZ0hBSm1YZCthZmFISWdqbmRvNFA2S3h2SjhxWlVGeUJ1ZUM0MlNQalNScnlKVGZpS2NOZG80bXhYVS94WWxFSlBodXB5YUhmdDdFQXI2eXR6WEw2Q3Erd21qaXNlZVJnK3dWWW5UN1Y5Y0QrRld6ZmU5VkpHNk00djd5a01TeUZGanRVT3ZZYysxTEc4YUMzbkNyeUxrYnprUyt6a0JnVEoyUEtMaklIb1JrVkhtWVlBSzIxUTkyTkpORHZ5SXUzWGQybzM0bVpjKzgwRHNBdVBwOVkwNGI3TkFWSkg1OGt1TkJja1FZaVBKLzRCNE1YMm9RMlRGT3RHMnVYd2t2Vko3ai94dis1RnJMd0ZTZE4rU1Q0OGlodE9yTzgweHVBUDJpc2pJUkwyZUg5VFZoTGYyZnVIVHIrb3ZKV3BHOGphc0ltbWFQZXpnUzAxVUMzUGJQOXlPNnFqNXBKc2hwTFFUUjE3ckNmNEtrOVNmSTRUckYwcWVKN2hxaUJKaDhUTWRlOVUzQnc4bFhVU2JBOWN0SlhhbVR6bFpxL01aQWRta1pXRTd6MHVzNFNWenhXTHJPd0h4Yk5kbXBhYncxVTBQYThLVzRtV1N4MUJCd2pONE5rRXhvSGhlRzJxeGJ6R0FaU3J2QTlrM1dCTWNKZWxTemc4dUV6UE1ocGRhWTBRQnpoMGE0UG1JZncvYnpOTWhTWEdZNk1oSndkdmFOQWgydzdwL2hEenpoU0JudTd1aVJHWkF0dFZRWjNNbUZzVmN3NFQwMG1lTGNBbzl3NnN2Tzl6b01nNnQwSVVsY09oZGlwOVE5T0w3bEFlUXhZZml1cDVQSUI3YW0ycWc2KytYL2MvZElVUzMvYWxxSUpHZjJVUlE2dDdjayt5NjJ4eXRCQ0kycDRibmlGMkp5a3RnQ3h2WGtMTHRPaThwSnpzdldZZzNSSDJvM213S08xUWF3d29kSjZiL2ZiRW9ieTJpOXZzTlUyVFZmYlBDM1k0TS9EUzkySWx3M2VtUHdmUlpYQ2NGeXN5cEZtdU1mRVJKSmdNS3F5KzVLNjBrZWl5QmdPZkx1ZXAxOFM0bFNHY3VOZDk5VjQxTkFGeW43SXQzYzloUXhNTWxvOXBLdzN6MmZEVURTMU5xeWR3WU9aWGxJN1hIUTUrNDlwYTAyOTVGSUtDYi9rbDRJSERmMkpBWFFQMUxaWmtmdWdLTStYVmhNd2FwWVRjM2dtdzJ6OCt4RU11SytpcXdKZkdBUUxPYmZaQ0VTamI4Y3JpVTBmMUhHQlRneGVuL1g3aWFFcFRKNWVPUWF4NWo3Z2FKZUIrREdzTFNzNWhRalo4cWZKRXd0dE94d281aTdmVG1rbUxETEFiR1R4dkJlbWxUUENSR0Y4VzZybDJ4aE90YVhocmRWTGFrdHR5NVJ4UTc0SVpHd1dQSDBpTnRBQlNFNVF5R3JZZzZ4QjYyQ1JOeWtXTSt3RndPclo2UExaOHA4YkYydk5NRzV1TGZuT2p2ejhoTENvditOaUhVUFlGTkpzeWV3YmoxOHNpaUNnbC9uTmlHaXAxZUtqN1BtOW8xTGw3MEsxaU00Y28yS0JSWVdZOXpmSzcwYks4WGkzTlJlMEt0WXpaNlU4YUw5L2R3T2phY2c4M2VGdFFHZUJLYXc1d21UcjBUR0Y2Nzdma0c0L3hzMi9zRklrZy91QkUrbE15aWUyejdkZnpBdzF5Nyt6Vm0vQVpTRkNzTUh4dUVTbjdudFNXMzg0L093Z1FsdVVyVzlkVEJuWGMzN3oySnpTRk1FZzdVaW9uakx5TmVtRFhQRnI2RkdHOHd6SUx4NUlpVEozQ3dXUHM5cW1hYzNrblcxYkZSbzlyNlRwY2syeXp5QTZnQUpQc0dMMGpGc3dkS0U3bzlQdHBJTklhUW16MXlKLzB6b3NobFBYUUEzS2crWVNuVzlzQTdzNUdhQ0l4MDRjdGxKY2diU28rVDl6SUdqcWRQMXdOTFdvOVh1T2tMN1ZScjFBWStCWkx1L25UcEZ2MGtlZ2hkaVlYNUs1UHAwSy9NMlRIRGVoNjNBZXM4NWxYc3ZtdGJBUkxtMmYyWmVHNzlSamdPRHhacFVNOEJCVVVLTU1PR0ZRTnJtQUVIM2N2N0xQa25uS0ZLTGtMY04vYjd0OWRRUU1VMFBJTzFWdWVHYkY0WENMUGRsaFVNWEtQL0NhZFVBMElnMVlLWWtCWUlacitOSE1mUUpPWkl3K05FYjl1ZTUrTVdjbTF6dnNTODRMMTRKcFdSQVE3M1ZVSWIxcm90NVlHdmFPNm1acTBwMVVHWUVXZmk0Y3lLanY4SW54UHRiOVFYVUg2WFVjcDdUbmVEeWVJNmRDUnduUytReElCN25jS0xpT2VVNHc3ZmxTOGVpdGxEVTNmMkM2YXNWUS92MzgxUnZWR0xwTzNVV2lQYjJ5TithQ2RMQnV2SytSMXpCSGNxZEZXRnMyRjFTdjV5MDNWRWpNUlJzcUJUY29ldjVTaDZjVE9DMFVQRkRkTXZVKzRXNi9vZy9UQ1hmYjUwTFVFQjAxYkRVbUc1bGwzTERjZ2cvQXp0TTFpQTl2Qit3c2tYSWE5SVZiMkhQaGFGazZvK3BnQ05Kbm1Vc0tlTU5NcVB2VFVTa3ZYYzdNeDlNc2VUNitSc1ZWOGRiT1lSMzBUd0w3anRkMkEwNlk1MUlJWmx6KzVoaER2aGk5ZTBub1RkZjh1aHdxamVSazR3NlVqV29FdWIyVEdJbVkyNGJBNUFHbFU3bmZQUTBidStGRzQrM1A5T2V1dlUwSmxMOURSRXc4Qi9LYm54R3FDV0hFR3g0eC8xLzFSbkt3MjFsTjRySkFuRVFISGZXZ0IrWFpjb09jS1h6V3MrTUQ4cjJEQTBOUGFrTG91L1Y2OWlhaTVhV0hMZ2JHNXBtMkxUaWN1cjlNSFgyZVcvZUh4aFFKcXFZUWJOZG5UKzFjaGdhSVVGNlA0UFQyYWhzazJ4SXVmbmlCUXRVTExpOWJWaHA3YkpBVVBSL2tETWZzOFVwRkxJU2hFeVVQRGo1UnlYc25nV1VyOGpQRklGdDcrOHRVcDhYelhRTDUwYnl2OHgzSU1HWVdsZTlpTnkvMU8ydlJnTGRKTHNsWXpnNFp1RWNrbk5qOUdlY1NyTndEeml3LzA0Q0NobVVJWVdFbFc1V3dPbkYyanN0dHJrZ2pDVGs4ZDhJMlJqRDluTTl0ak0vTzZMWWZwcTJja2xxeTNPaW0vazIxOEwwS2FRbXJZS2ZweVVGQnRvSnhxNjBHcGx6ZWJhYjJzRkc2b0lQY2hrOUdoV1Z6MlMvMDhoZEMvcmVmaUpJS0plY0ltNS96VllvZDl1a2ErazZWRE1LMnFZdmlmNFA3RnJLWmVFYmZqc2VOS0VZTWRSQ2l5endpRG9uL0pSYiswUkZXMFZGV244VmVNQ1B1MStma2ZSbWcxbDJNUFRNT3BiRWZmNFZkRkYxMmpHOXBzL0IzVmlIQVhiS1pYbEhHUzBhWkVzRkphZFJjK2FHV0tQQmtmTFNvTUdWVHgxeHAvTk1SR0k0WkNSTU05cnBtdmNHSVpqS2E5aEF3RldwOGhCQjl2WjIyU1k5RFNTUGQwc1lCUWFPWUd5WWdWdWlEaVZUQlBBdlRKNnJOSm53cFYxSGMrWjVKQXN6S0s1eWRuK3BENjQ0L0daUUpxYndEMkF6REFxY2pXdU5XZHljUkVLSm13aXBBVGpiU09UWmdCelUyOHZXdHhxSm10VXFYT0FuVzhOQVVVQytGaVRYQUFNbVlselFJaGJ6RnpPMW53Y2hUNXM2QU50WE9kcE9nSi9RY2NZM0RrMVNuTFNYVUN6dUJpVE5FZEpMMkVmVUpYVlBIcjF2TlRtOW1KdEo0R0NkZGQzeHFkQ1p0a1pMbFdnVTBoY0NwdUVtbjAyM0hEVjdYZmRGYTdpTXI5S283dFgzWU1RVkM3RDMzNjF6SmcrR2p4OHBXdk0vc3BCaUgySk04ejY5aE5XTmFlVVYrdmFNancyRWFseVFUSW5jMWpUcXNwN29QZ2FwdGNTa3FqNjZNdDg4SS9EY0xwcyt3MkpaZmw1RTI2bWY5a2pGd0FWRmtML1pOV0Z6NjdkSjZ2bFdhTHRRQ1pjRG15ZEEvOCtFVmNmL1duOWFPVG84NG8xZjlmV0JINGg5c0xBSVZHVSt1VUZRaHJMeXpBeEFGUHE0dWQyUDdjZE91cFF5TDN5K0hIMFVrbkZrUENZVmJUY0s3ZXV5cFFaSVNoNDRSemhVc3UyTlBmNXZQV0tSdWZwbG5pM2VVdTZKK05NWGRmdjNpWTdQVWZ6Y2Rrek0rVEJKeE4xK0lRSGxGWkdqSXhzUEdBckJ3Y1A1NnN4Zk5WZHZzcWV5QSs0MTJpZjBGbHdWbnQrNzRndmtWeFVMcWVnME5tbWUxNndVU2dLRUcrSGx1SEdLYnlBQmt6NXZudWJ3N2hVMmpMSkhmWHo0bzFpa1J3NzRGZlFVRlpOajY2NkNQcnhiTitkSXFTRXpCdWk0Q0FYbVA0VVJBVGoxa29QbzlvRi96SkxlcHlyN1FMK2VISTEyT2VkS1MyWnFHcitDajJCdWlrRlBwRDR1L21GWG41V0svSUN2ZDlEc3htZWFyWVU3L3pXRDNkbHdFTVRMZ1dqWEluSGIvU3F1Y0JHNHg4bEN4MUFoQTFpaWRKbWhXeGMwcktlVWdMb2s4MG1qYWs4L3RkbWc5K2ZiMjFVNmNLZm93T0xaUkdjQndLUGwvS0FxUENqdFRqZWw0dTh1djlxeS9leUZKSUVGZGU2VFlMWWZ4NVNRSndKNFVjOU4xTDJ4b0tyMGRPWFlsTTR3bDdtQ3lGWk5aNzFkcGZBQkY2TXBXaWwzeUZmQU9tbkJoNkU1ekRzUGl6RDZLNzBOWUN6L1VpcEpNUlVHek1ZOFVxQzRFUm9sTlZrWUhsS1g0ZEJsTGVJQ0c5N085eUQ4TER2QkZRSUdaNUhYTnlxR0xackR5T2ExVFY1YVJTWGliWUZUdHBoeTFIS0ttUWxBT3RTVmpacWhRSDBOdm5maU1MazM5QW53eGJMTzF5ejUzY09QWklrZHB6SkhhQjMyNXRZZkVoYUZLSmExMXpRS3hpMEREZzVybU92QVh6M0R6b2I4b1ZsMFFqSGlHK1lJSnprdWllQVQ0OGI2Z0VqRlpYazA3d0MwTFNOMG8waHNuclNMQ25XMXd4eVVycnJTSGtRQklmSDlxQjlDeEdrUHdqVVUxUVBMYVRkRFp5SUo2eUEyWDhVTzVNUzVLT2FYV0JlY20xVnZ4aGRYa1cvL3p5Sm9pZWkyT1VSbUdzSmQ0NzdBTkNuQWFyT21COWdQS25PWTRPRzYzUGp2NGw1RUkrUGFIbXdFTGNEWXc5RjZ5dHYyaTMrakY2YXJFbHpPTk1ES1U0SnpiaEdDUUdEa0poNXFNcXBjWGFTR3Rvem9FOUZYOXZxWitsUnBqeXhyOVU4cUJUdmZkMlltOGJTd2MzczMycnVxNzBrYS9vNi9sME0yejRkWGttNmQzMHVJTVNXc0o5MkNoTG1kUnVsQVM2VHJscjZHNm03Z1ZyUjVpZ0I3bE42ZmxZbW5HZGEvRDI2MTNYczMzNjFld084ci9DSzB2UjE1VE51ejdqUzY3aW1CMWVnRm9SdEExdi9IQUEvZHpUWks5WDgrY0JQeVpZSjRzMTFlZ2o2SzlUamdTcEZoVlFHUTBFZDMrblRJNW9NWm5ON1p2bGFwTUowYndUNG1yb01lRk1kQ2tJczRBYVlVcm9BMHhScmNNVHV3a0xuYlpWOXFuamVnM2U1V2gxS0tSRTFrajdUUXFNUnlWdWR0WTJyU1E5eFBiU25QeDZUQVNuS1BJa05kN2t1OUFmZFVPZFExRDI0Y0RycVlCNEZnT1EwZmZpRVc1cEVXbDdsQU44MVY2eloxS3JzWG5HL3ZPM3B0QmtpeXkrSFhjNXluRUpkRHRVNkYvSTRWSFpQbjhEbXhKNjdYYndwU0RhWEUrOXI4aTNaVlJHK2N1bU5jNmg0VEQzb1BMTWd5TzFvZnhtUCswN2g3d05ENE5CRC92MllXSzRLUkkreHBNdDByR0NkS1hoS3owRWtCajNkOUg5b1gvMTdZMDNvZDV4bzBaR2JOSTI4WFB4OGRUUlcxbHM4bmZLd21jbUw1aFcxbWgydXpEWnJkVU9HUUhyWVZ6TEYrWTZKYjNad0RPRjVQbUlLM3BlNEtscmcrMDhNeFpFVlptazVVczkvb3FWNFA1NzNWNlkxZEdsbzlmWVNnMEdsTU1pc01oZzNlVzZVdS9semZscUUzSmRzaHEyazRrUzdoWU5ZaEMxZUlEUVB1Uk9XSEk0eDZ6NHRNUVJwYnFUTEhmdTZyeWg3TnBESFFjYVM4RitlU3lmKzFwQjBQTS8wU0ZLRGZSQ25uWE95c2tCQXZGWVcyeWxyV2ljQkFERENqTDlkemZDcHYzeStBWngzTVpnYzM0THNPNS9pOTVRVzQ3VkVOK1ZjSk5menZld25WdU1XNnF5MDRZNUxwMFZIR093aE5JQmViZkZFM2FOU1g0L2pKTUVBNDB3REJVWU9mbWRrTmpJdTRoelVnYjZzMkM1a014OUdUa25meHVGcTZwRDNaR0pOeGZ2VlVuL1JFQy9ablpzdEZLOVJaWjlxZE9rbDBRWUg2ZDYyMlR6S3JJeUllZlpTOC90SlV4a1pyTzdtc3RNbXdwMUpDSjRERFBGeStnRmVGUGhEcG9hSjlZc3M0TEd4bFd0Y04yYWVYemJ4VURNZ240TzRYVjk3QmFUZFpkYUgyN2xjZHZ1Z3dnNnRIaEZWbUJnUVFPajZQLzl5eWJPcjdiTjI1Njd2dEVVbHNKeXVvZEV3YXJyY3Y5YXU4UTYvdUZxa3gwK1czWlk2NVhTZlh3blBnQk5wOG56N3FzYXdNYW1sQXNVQ2NwdDF4TzdFbTUwekhiaHV6c2lRYkVOdmcwSEpaNzF4Q2dFcnZLQjZtNmtRczZ0RFJQZ1c4dk9SdTlMbTdsY0VKQUlEbXJrZzdjMWNHengwUkZMYjVVczVnNmJscEkxbWdzdWEwY0k1RG10Nlh1Q2M0L0hlOXZYU1lZb2doZ3hqckRZYWNYN3N4enVySlFZeldSd1ZQV2JZYTBraTRsQTNkSHFwZ2tXYTFjVU5NN0lKL3N5VGUzMG1Ickt3NndRci9TMVMvd0dpZ3dyN0o1U21INEZNekpJT0w0SUl2VWdhWXprOXlKd0l5amgvMDlkQVovYzFHZFN0b0RTMXFPRlZ6YzJ6b1FqYXp2UE5CMmx4cE8vb2x0M2lUaElaViswTnBIYlIvQ1NGL2VxT1lvWXN0cDY2YjBOcnRHcEYyQUs4MHAzZCsvbi9WNmZpeENXZjhDSFo2UjVQTlhzakgyQjcwSmpXODFsK2RFd25hMWJrN0lLRE5IV0VKd2lmaHp5V3RIZHRRTG1ZMm15ZGgwY3kvTm1RVlpodFJrNkFzWU1kUGdMMnRLeStzNHkrOHp5Qk5KTFFsQmhvcGE4Nk9pUDlrcFdZZmNiTHRKTURYdFcvamtEQ2JYVGJoa1l6Ty94WmlxQU15TEMvaytIY252MjI1SVYzcEIwTmZoeVp1QmVNZUtVb1pwQ3VRcFZnL3JPREowL3FJU1NrTGJwU0p1aVowSFVId3JRWEJPWUx3RnFNOHdUaWVGQUxLNmN1OG5XcnVBZ3hmSWlQdkdBUHF1TnQ2d29JQWdCNHpET1ovTjljWERSeHRHTnpKckx5bStqUmFsUjZPVnUyMTRZOE9wRTdQZzh4L1JVcm5uQ282aGdyM0hOa1p1SHMrcVduMFVZWXc5K3FhVE0xdXMyK3lFTGdYd29ReFdlMDlGV240ZG1UNTJ2eDgxU0lCN3BGbHNaQ2xkNkVHWXlUSytaQzhaOHAzVDVnVmZEQUY2NFhUNjI2MTNGUTVicVIyOGlkZEFMa29TaHd4Y2ZadFkvZzB0b3V2b2x5cEtEQnlqRmREMFFUNG95YzUrdjBzalJPQ3NSbnB0T0NWNk96SzU3bWdqY2VPVFFjV29hSzgyakMrempmVzhZd1puK3dvRU5UVDBDRTlGSDVlTjB6VEk2U2w4TERqeHE0aHlTdDY0SXNyclBHRU5HNlpRcFF2RW1TMkN4M0Q4NGdWYldJSTVpWjZGZE9jOE1xbXI3UnZkbnBGYm11UFFRbTJuRDlhZlN0aS9HQTBIb1ZVVjRudGh5WXgzKzd0OHpNdFp2K0hXSWZtNmlrVlJmOWFObGIzajErS2VCUWRoSEFMLzF4eUIrRHBHRTlkVXFUSmZpVXp1b1Vjd3NMZHFqY1A5ZDVrbVl0UHFveTJ6MlBKNnVsZ29yMXMvVWloVUhGM1ZrVkNCa3MyNGRZRDlXbzRDbXhiVVkyTzB6WDZMODI5TmNRclc1L1hidXhVd0R4dGlxdDROamQ3dEtrbGhmV25NSXdMWlN1bXMyNGlCa2R4NU5yMnh5NjlWQVhmbld5N0NJbzVuN1NNdlNMN0xjdkk4Q09XTFJGY1dYMjIvOFdwSDJ3R0hTT1dKMUUwbUk3NXgrY1dJVlppdUZqYVd2V1BNdW1uZ0wxd0NpN29yUngzWTdaSVZVZHR0UDNzTVFWZzZDVCtUMGtHcFIwZFF6UzY1bFgrbVpCUWlPL2JIckdHL0hBTHJHVlhZeDNoQWpwZkwzV21BUWcxdU52TTJGRVFoOTkwRHBmZE4vc2VzRDhQbVExTXU1Um45RUdyNFJkMlk3SWJXVk12NWxsQW1Sb21KYklOVXo1Sk84TC9ZUG5aSGdiVndGWWRxZ1VwOUNZQXRrakxRV3ZOckFOSmxHd2ZOKyt5aVExeGd3bzYrQ2pYMVpOSkkrc1NtazJGTzdiNjlhbFNkdS9ER0J1M1loSVorSnJUbFpHU2RwYXp3YSsrajdQRXF3NzFsRU03Zkw1ckZGejl5T2l0NEp2bFNnNHlqSWRjY01MNWJWL2pWSDQrTVZBN1lOdFNNUWRHT1dNZVdFOTJPRGRyRnJSMk84RGhlZzMrVXBwNVJTYmNPNWJTeFVpcDNCUllmY0ltM0FyUDl6eThEdThxek43QzVJREd4TlZyR0xnU3I2SXVsWkpiSyszeGtVcFpyM3M2eXFnUGtQQTY5ckgxZzgyM2NFd3U1Q091MnJ6eldseGtrS0RYVVFyZDVyODgyOXIzOStGSnBOSWpGT2s3dGM0NFl1dVZXWTFmWUFIQnFzQllabzhlMFF2c1lFS29PNHRhNmNPT201MVM5U2lTV1JaWXpFWExyUzNQSURFZEw1VENCNXF5c1lNSXZqSzF3eTlIWFYxUXBNclY0SW8zWklSQWNRcktoakE3NldjQjRQSEFaRDhjTlZGWHBWUVpIRWRVN0NEN0ltQXFZYWIvT0VRcVdUYkVna3hjMzYxdTlhVGVTaVlEQlBOc3RiUU91UEJkWVhRbnRxWnlhN1NNcDM2MTA1blZvK01tdzh6RytycWRUMXBFdWE1dFBPc2ZaSjFaYUtHdFNQRUF1eDJWMlNwWjRKdU94WEszbWtiSWVjSE1kUlhuazFaYzNDQ2FsUk5vR1RjelBpbHNmOUNsRDBRbHJGVlJpZHltbkRLVjlGQjBqVXdnZGlCNEcyY24ra0ErVm9NV01nL3pSSENmR1lrYVlMQys5OVRsSnJGdEJiY1kxKytwZWd2VHk4bWNCRXNONC9xVm1jSkNFc3ZWMjNSc3ZaR21iZUNDM1I1TTdvS20yaFg5TTM1Ynk0Vld5Qy9ER2hGSXJQMllYVk9VaE54STk4WmFVVXA4ZEdMbDJYM2JlYnZqL0hMLzB1WHFhYmVGMnRsYm5DSWllUFVaQlhsekluZnlCakhQMUE2OW5WTVNDSE9GeXBEUjdjeXlOcmdZWndVUXJ6MEs0eCtqRmQ3WE5wclBWbDRMaXVJUVU0Uk15d09TMnNISWpZazZBUGRFRE9acjZBVi9MVVdoTTF2ajFKSjF0QitScFNEVGpGMHEyY3FmMkQ0dEEyaGZ4ejRobEtrRFZaeG5jSHFLSml0MXVHM3RYbGEweUtMMXpzTENHS0FQMW92aGdKYW5weTFUMUQyQkZ0ZHpiWWlYenlaT2pEQUxrS2ExTzZtcVJJVWRLSkJZY0lvUDhpWGxOUm53Ni9QMGpYVmNicVhXbWZKRkJsU3hmOXRFS29MQzJhOU55WFdYSWpOU0t0elBGTXNHMXlXMlRLK0owWVo3anVsZDIxSk9PbHFEVktaMjR5M3Y1aWlaS0IzOWJIMlluVVlmdktXZVZzcDZSRElobW1hTkdFdER3SHJtbWo0bjM2dzNUR0hzVmJpRmJFb2JQSktWRm5USTFUWUFMUm94RGkvWVA3dFhXbkNuKzV1TUVoZE9sUXdLNG5pS2JvU2RUSWxyL3NHaytFempyMHlmU3hkbEZrMHhxY0xWb0s1ZU84emZ4dngxeEtlcjd0M2xYeUdqcU5aUVB3Z25KNTkrbDJPSDFnRjgzS0VqTUp4all3Yjlsa2h6RkdrNGUrSHNPWU83UkdwZzhJcTFGYnVBT05xWEZMUEx1SVVnL2hlRzNHVHIyZk02MEVGbGNoR0ROclBqaTRKNWhXRlFzTUFCSDNCVHZYWkFIRlF5NjRxODVoaE81dzQvM2dkZlhDSEh3WnFqMSs5OWx1RUFoU0hDOXVDVUxmUW1aSGcrMDA5aEhRalkwZ0NuRlJnazJWRzdaRDI4Y2VLelI5a0NxaFpURURaaHlOcVdUcHZMWDVmSzRuTlIwQ2NhaE16cDhhWkNIamhQUnFYYU10dnJ0RmNKdjd6S1pOTjlFS1gzcjVERktvNHZxenAxUnBXOWE1TXlrdGtia01HY2ZtdWZJSEJkbDdTZFVUSFk1R25EMi90cWFqRGVXNlk5SHV5YmE3N0xUbkdpdXNnUnc0RUxTTzhhVTdzTy9kSVZjSTdmUmhGcHplcmptcEZhcnRHck9xWi9kTEp4a3hJRFpKbmhpblM0Z3NkMzdsbVpuNDlmR1pGdGQzelA2T1Z6TUE5MnFLeFlSLzRYbUlpMDdwL3hTeWtMRnFpdEtxdGV4YmN3SFpGTVhCUlRZblVIY0JFam50YkxCMngydkRoMXRyVWtuR2xnV0J4cXIrbWtmUVNoVGZDcU5ESWdobldXRlpTTnM4OHZ5WmhzYW9mcTJlalQ0VWVKL0xxL2dIeDdxZjVKYTVwRkU5SmZTYUlPSXA2ZGFhVExFUUF5TE5FVXd3Z0FHUVdlN0JVRS9wd1RkMXo2RWkrazR3b3pFb3pYZDFMRVFnTFFXSDFzNjk3WG1hRUhrM3dTUkxKTzI2TzM5YXBvbGI4M2dYNDZ6NWROZTlMRFBod2lTQXpRRFdBVEZXMGRhZUJCS3pRT3J3T09pWHgvV0h2N1A1NUlmSmtYbGkxUU52Z3E4dTBKRkg3RDA4M3B2TzdvSm52Y3FXdm1ucGQ2cHp5NnRINGF6WlRZQWtxanJmb0RMWmdxb3I2UjNWVzh2OG5MRzlQVFpvRGxCMUFWZW1KMitFV2RFWksyaVdxcjVuMDZJOVdtUFdFZFJKUG9PWEJaOWF6RHl1bXpVaURmOVVCL0VlSlJvekVnQzV6RktvMzBpQ0RmU0NpQmdLME5oNXlVZlI5VHFZdzNnRHh6TWJpNFRsdGZadHdMeUJTNmJVbi93RTJwams2Q2h4OU9PMTJqWlFFeFhRNi9NMnh5UWxHcWwvS0pBeHJhS0YzQWdlRWMycmsrS3B1NHBYV3dFOHBXTFFNZUhxSW8zRVlaWW5xdmpUS2ZhejhzT1R6c3VQQ1B1ZTdHTEo1ZXJxRnlpeUtXMktqem0xUnNTVDBIWHF4akRQZStyUDhyYzQrZWdObHpRVUtqTENNUWVVWXk0ZzJwTzZKaHllUWt2M2J3Y3crd1duQmVYVGZXaG9seDd4TEtxVGg0TDdFbXdTcmFENXZpOVVPeDY1TUdMditaYU1tL1lMTkI3SUlMVXZrNlVESDZhVDNZVXlWZDNnQ3YwbjlDVFgxd1MyNCtZbTZqRlduNlo5RXRtQWN0aERlLzNsYUI0K2tkU3Y5SFdvdlRBUGhVSXVYcFdOeGlJMWZoMHVreXo5b3lkbGU0bzFlN1NXSWl4RkJvdE9jUVY3NEtCTG9qbDE1Y2RxR1hSRGZWQ205VVFWSndia0g5ZXZGdW83bzVHOFJmdmZoWUJaR0VVNzdxaUtQMVpOUXlnSktPQlNrZVBLSjh4bGx5eHNOMVJ1Wkc0WHF5NUx2MXV4dFFqRjJqZWwrTTJiVmF2VWVDMU5xQzhTTHdLN1NvSCtwRTEwMHVVQmxUd3NOUERmWlJvUkV4UTRjRTRnTld1TTdvYllxUGlHRVZQenpOL0xXekdhODczeWdUTzEyb2hiUGRZMHU2cUJaNnZIQWNVbHIzWUV3aVlFNHl4WmlZTFZieFNpSjRDMGdTbXBreG5nanYzYUxaRjIvR0pqclo0dml2SzJrZmxpWkdmaFk2TDdqY1lhZnlIQzh3SC9rNmp0TXBkb0w2SU14TlA1Z0xncUhRdTFQVm9vcE5QVjRDQ3VYdTlTNTVtMXVxbXpUS2VDUkZhTUtaZ1VYQUUwWURmZTdwd2VIamJhM2ZUbENLTU13ek5jNjEwMnI0S2pMU3JPUlBOUmVLcy9TNDEvSGpjV0NlTldoYlVERHVSU1pNRFdZeFdaR2RYTU1TT0ZOaGZMTHlmbyt5YnB2bC85ZXpKazhBdDhBMXRJTkFZTHFwRSs0Z09jQjRPSWVHZVM3Qis5a204YlJMVzJHTUFRazlSaTdVOGc3UGxkWDIzdjVSOW02WE55eXl0ZTdCTjhNcy9BRGZ1am5nR3Mreko5RWxlUXRESHY1dnYrSlVSZUpIZU4ydHBzSnJyVW5DVFVZTGIyR0YvWTlQcDNwK2FVWm1ZV0NNOEhwZFRiT2pVcTVsNGdIdFUxSVh0YkxZaCt2Vk5oYldzdzFjUDVjNUh1M0g3eUxMbC90Uzl4TFZxd1dKdkE5VERxUWZTSnJSU3VzVDFvMCsrbmRVRDFrRHo3blhYaFNPN1pCWURsY3lKOGJJZ2RxQWM3UGQrZWNlUkN6eWFsSkJvOWM1SVZrNXhEd09zeEJKTmtLdkJidTNtdUE3ZU1zTDVpQXNJY2Y2UTFXWHVLMS9KWWdaU2tKMTllc3dveERyYXA1dTliV09Td0dRb0dzeThhRUhwL0t1SnBUSHIrZVJPa2JoQ0hEQ2piS25EY1BGVWdmZEtxc2dEdVQxejFucWFSZTRuTWEwVXhteFFZSFNiUHBNNVJxdmtuQ2FEaW92RS9NdFo2ZGlqS09uYWwra3J2WEhXZVVoQnZMMGxPWHZNMVE3L3U5NXA3RjFCZFBGMUtGVk83OExjbGloQXdtWTRBaW8zN0o0b3BhaWNSYWJwek94NXdmSTROL0RnaW95OUNKTjhzVEphUE1nOGJjM0NaaE8xNDR0RW5YaEZRTlpjL1QydFhMdUY1ZmQ5WXM3dG8rYmxYSm0vTEhManpnTUY5blY4ZVM1WEs0aUlDVGtMWTFXcGpETmVUems1aWlFekFtaGlRc2VOditoTEgxRGhiUG9BY05BQktkV2dFemlCektCam9rWVpxM2Jaa21Edm1yelVtajZ1aVZqVmp6V1NSZmZmMFlQWWtVL1FKWVVJM3dHUFc3VlBBdnBzNzh3UmY3QmF6Vk9pcjVpMnFVcWFhQ0luQlkyVW9kWkpVWFVWcmRBSXhTbk9IZ0xETmxVZzAzNFBoVmlXeFp1MThvZ0ZOREx4d3N3cDlQWitWYWlOVXErLzNvRGVRRS9VaGJSL2NVc3dhb0dmTWVzb2NkcmtqVzYvbmZLTFlCUlNiVjJ4Mmw3dGUrWkszR2dNSGQwRHY5eTE1bzlDQkZuRXJzYmpTNkdRWlJmeFY2Z0ttVnRlTnZ2bmN6Y3Vac2JNbmZLYiswUEhEb1ZkdmZwcUdnN3V3MHRVK0NlYlRqdmNJNWdhOC9aUWVFbG93STVLUHRGTTkxZ1c4MWxHZEVwTmlrRi9FR0VndjBSbUZwNXhNYzFqK1B1MDY2eXZLeTI1N1hDcXp5eW54RUJyRzVpekJxNHl3K041MklZM2tRcmpFSmx0RHFHWlEwQXdzRzJFK1hpNk9IMWp4RXViTUs3cHBGQ2FEL0hGamxmbk01TjIrUGl5Mk1zTGJtU3F4blRScWJjMFdWNDh4US8xMUNXcG4weHBhVTM5bXkxK0txS0lMbHFhNDVGT1lqeGNsRVloalZucGJCb2hhaTFlMmkrUUhnUkJOUzRYQnEwbU0yajFDRlN6cjFRc2RxcFNTdmxXYzgrbXhwcWtaWGRlZ2JsS2o2UHRjdlh4UEFPalFndENML2RpUjdRRmJ2YVY1TUVVZXV2VThIYXNHSStDcDBNV0FCVEZiT3Y4L3ZOaDRZckNFZ0pyRzlna1JGQ096TG10Tm9GWStTcXZPNVpEN1N5ZGJnSmNzclBkSjM5eFNsYWpDeE9nbEs3dkExMGwzL2EwbDZNSXJlc0FQZFRWZEV4SEtTZmI5RWkzSGJ3VkZPT1NsdXNmSklSc3FHd3pkM0RBWEk4a3RyaThiVVFMUDBvWnRVMCtaTFlZS3g1WG0yak9IbFJ2aGZ2TXJiNUxoSUhPSWxNZHdzbUErVnV6VUc3Q3NWY3E5UXpFNEN6Tk40QzJLTktmNXZKWCthYXpsVGFzWHVpMDNyMW1tYXFHRWhYOTJSYkErRHlVaG9MbzRXK2UxUEg3VzI3Zk5OWE9tcGxoT29KZFNRSld3RXM0c3lGTHFBNy83L1RKdHhOK0NlTWZtMHVhM3ZBNnpmYzVNY2szVVNXaGxTakhsTjNyY2t1cEdHZzB0Y1h1dndxZE9yQm45UmFGQUR5TWg1Vkp4TVJEWGxkMk9VNXJ1dHBrVzlmRzhDYTYrc1lOL001cVFIcDhBclNrMWdLc1NnVnJQQi91cXA0UWRxVWxHWmxYaE5uOHI0MTdPdy9rWUw4azJrNkVJVm9sc3YvMnoxSnV3L2ZadHJDMW1Xa05haWVBWEV4cC9qRS9HYjhjWjdNTVhZTWRtYTE4dFc2dmRWYy9qWUhBTmlMblFiNFRpTU1QYTJiSmd5dHlZNUtVb2FvdFlUM0oyLzMzbXg0SDl2RUo1dm1RSW05anZYait0WndtOU5leVZIc21mU2N4Uk03SHdZQkxtTTFucEhtTTNBa3A5UEFnNGJDTDhTVDYxVHl1QVllQVJMS1R6R2pkYzFjZWFqUWE3bGNENTJLUFhCbHMrd25pT1l3Y0ZENGx4SkF4dUFLRjFvR09pN25YZFVUb2hDa2pVd0VZMFZzdldzRWRza01vdEpzUHNIUzRabUdtb3VQaXdxMmxrcHZKcU5iaGhha2hEM0dXMTV3Y2hOZEhsblhYNHkzRzBZYW1MRStENnQ1bzN5UERXQUNvS3JCdmYvVmg1bnJMbENNMXJRSDdYUjB4bm95SjVWaDVweWJLeUNKR09aaHRPRTZKZTcvbjd6bElUaElUcXlnSnk4em1TZHRwSXB1Rm9ZREdaaTdwQUhnSnhReWl6SHRKVWROMSt2a2FYbW1XaUthcHhiMzVDQ2pKL1ExeHJ2Y2Nzem56MGpLa2pUSTVsWWNYVktTQWpEOXRZWml2ZU15c3llKzdXSTAvUmdZZmtaR3pITm5IdkgrRlg5TUtRR0JBdFNrYmQ1Ymw1dUpYUS9oeGRiYjJnNWJNOEF2emgrc3A1Z1ZqYjZkcXU5cDRENmhBckNrU0hVak0yRS9qV0ppMzlkeTl1dU9YbnZrc0FubVJhZlU5cFh4ODd5SERvVFN4eDBqS0U5d0t6RDdxejFkYnR5MlhINEhub1BDNjV6cFUyMXFtanZrVXlIZjRvcW15ZFM0eGs4R1JLT3JqN0dSVExLUCtydG5uZWV5Q1N5SFBxaTlnUkxXb0RXNWhhNEJyOGNUaDYxTFlBaU1Hak1IOFpRRnZPRm5hZjY1WUNaL0JsRXcwQzhIb2M3UXBkNHhCdEZNTjdNTVhYNVZiY3VndEJYOVdRbXIvYmQ3eTd5alRNaTg4YThETENCWExkWEVjdW9DTFNabTdqRElmbGZNaU5FdGpCQnFzTVlhQjcweGxtZmF6eFNFVWwxV3BxcEJvWGN6MHlYL1RTUEFybXBLc3ZKZkNzVjdjRFBtY2ZmcklDN2NVczVKVkw2YmsvR0R1OW9mNFFBU0pqYkdyYlppcFA3MUxaWXRjZUU4RWJCRXB1ckVsbWViYi9BL1ZmZk93cTFxb3ZhTHkrUWtjcTBBZ1lWS1B2QmhlOERsY21BZUgzVXljc2pIeHFicmEwbmJPYm4wL0FBeXBleHlHdWg2YThHRXJ6aHNCY0VhL2Y2L3F6TUlCUXRYZ25MbTZWZGFrYUZQMlEwQmpVRDBxVGxzbS9jc2k2RWswKzFublZtRXlzcWdpbkVxR0pQYmQ4MDZLOHJ4SmVObkd0MXIyUS94Mi9hcUdPcGlNcUxLVU9SQnlqQVVaQWdibEJTNjhsd2lEODZWNjhCd3gyalRKODlwUUF2am9aQ2hhTXk5NmRlbTI1Slg1VVhpUzZPVHVEeWc5QU1mZ3dWR0JTeDk1VEYvMzFPMWZpVFVsU2o0M1FGQXhzeWZEOWEwWlNNRWFrSGtjUnU3SW83ZHIrZzBCK0hlcXd2N3hBQWhRRkhnWlpVQUZMTCtmSkM5N1k0emhkZVdMTkdJZnMxUFhaYisrNERQRFJzdStFb0NxbTlCcFRKeHM2TWpPN1JyZFJORTRtbndQN2pHUThZbDRNRFZ5N05oUTVJWUozVUllNTN5SmlGeFQyc2VVYVl0dXNiM1o1RHBCSlpwV3FseUdEN3hQOUZtbUZGdVJ2TGNGZXR2QlF2RGViSUEvYXo3L2RXb0VHZHY1RlJtYzcxdmJTMjc5WTByNjVpWHAreEM2cVFJVFRONzVTeG9UajU1N0lFNCtGdjRBd1RVUDJabTR3UkRhekt0RXhFcXNVaUx3MlZDeDExamUxR1FRVFRaNjYyd2p6RjV1akJKZm0vcFpaV0VGUktpcVAwQXA0cVpHdmFEY204Z2NHcmUwQW5hd0tEd1lBNGM0VHFZK1FLeFlqbkE4alJCekpJOS9vRXZsalJyZjFWcFRleHZVODV3WVEvVHp3K2VuZmR5eGQ1Yi9qK3lxVitFbnZZVll3RWlBeDViMlFKcHdob1dyWVV5d0tkRkFneHZrWFJGVFZkYm1QQm5GRDhjazdvNHBZaUtQa1d6VklmSGxpUmFXcEN2bVhrb3VaY2JKNTdYVXRWMFR3eWsxSDc3eWRNeVYxR1p6M2JmdGlKaEN1VnFtYTdacCtKYUZKS3A5VlJUaWtJbkVYZURoYm1rRXN0cGFuY3V6M25iUWtxUWhHZk0zWENJcGluVnFmWWNnUDlacE91YVRqbEdUV1EvMDJTazRnMERHcXlhbUxBVm0xdTZRdWFudUV3MWFvaDR4a1I3c0hpQkFMZEZsZ1VhZ3NwUUJZQk9jTnc5WlpwTEt6S2VPMEpaTGhzNUdyMmRvdHNJdTFiODBMeVZRa251czh2ekwyMCtIWXBSaXJLOFFETDNrMUpuYWpyVUw1QzJvNzFhT3dEMHpBZWpiL2I4SDNvdEtVRXBzTzk0YkxjR2xXL3BVeFpxWVZWSE5WbHV6WXFMeTlvSkU2WEg4bWphZEswYldURnFMZjNUS005R1hHUnEyZk5jazQxZTlHWEdMQWdIZGNDOUZQVlgrbVEzaG44RW1nakdyR1NZalNndjRkLytZdVVIcWxoRDZ1bjhiRmhvNTdwSGhTQndPWC9Tck5rM3JyTmJKZ1dDL2pxeDRrVHh3SmRqaldjSzRyZkI4bGk0MkgzYUtmQ0FFQ084ZktSZ2luYjhKMHlrVlg5bE5TakpGTlF4dU5FMCtaSVdlZUFlWGZldXowQ3d5MGxHVWxBVzFQTXdYd2lMdHZIZ1BhRzkvdWUxZURtK05jNzQ5SUlidHlORkNJTVJJdGxRdzlvamtTQlc1cVlGbjN1bVVBSVlwRlhvNDNYd0pLTVpibVBQVDNLR3JpbXRCam9FREp6T1EzcHlsemoxWS9iNS85MTFqNkFzMFEzYzBxbjd2UEhvbEovRlo3Sjc0UjlmcFZxaGMzQ2tHb2lxSGFVRXBXSjRMSkdKVDhSQ09GMHV6ZU5lQm1UYjkrTjQ2YUV6cndpMFE3MXJDWGVmUmNrSTRlM1ljZncwKzd0Tnh0Q1Qva1hUSWZmbG12OU0xVEVpL0wyQ1lqbDVYczNmVXhNQi9nTm9ja1ArMzQ5akMrUnpSby9wSUNDWit1ZFhrTEJNTDNUbVY2bW5OM0tsUGRZQlR2ZzdsMk40QWRUalROaklTTHNJNmtRbXFteFJ6YVVSRUxrZGR1RVJYZlNqQTJNYmlWL3ptYWdaMW55anFtdjdnYW83MEtHdldsTG1QNjhIVm5EVFhOQXFndUlobSt1UTczVUZNdjVGeEloT2w2Q1dzcW5COUoyeDVCRmEzbVIvSEVWbzNrTUJIU1EzK1JHbEZoR052eTQrc0hFK0JacStPbVpya01rOFdHSUQ2bStQUjhyNXo2d2ZPcjBwQllsN0lOS2Y3dUF6bmYxTm8xcGZOaXdwZkZGWmxBTFZTZGdJeHk3QlZ1RC8zWTlOMktnTE5EUHE2VHV3YzNLZEdPd3dMdmsvcmJxdEtpK1NJa1NjNHRJQ2FPcU54cWZhY2xGU3hZR3NyaUZsQ3FzODFhUU55T3NWUko0dTdvbE1OU201bGdxcC9nRHR4b2ZiY01zK3p1RUhPa2lJZjkvNk1OSWlSMEdUc2lQUGZvUVFpZXhOL2R2RG1jbGYxV05RcFdXNlYyUmVGc0hsUWk3Y2xSR2JscUlSWXY3QTBOWDF0Nm5wc1JCY2N3RUtBelJVOWZTV1ZEQyttNENmL20yNDNpNmc1akNiS2M1WENXOVErOVRBTFZwTThRdW9oT0ViME5mMCsvMy9NWS9tL3RMK1ZGNUhBWklmaWhNamdmNjVjS1FBb1VGd0VFQWdnTU5kNm50RTNXM1pCUHoraGVvTUVTQnIvZmE4bkxab0tDOWlzeG5jbDB0a0xzeG9vZ0pKZnB3UFM2VVgyeXdYSE85WE5WWksxbng1UTZWcXcwMmJEUzhzZnFnMVhqVDExaXpiRGd1aWlZWkErOHpzTHZ6OW91VUJBbFM1S3pSRFBkcTNpZ3h3UWxJVWttOWNLWVRQbkI4M0FUdWRXV0gvMmErek9UaWdGSXhBRlZJWlQwUnFOc2hyTDR4cCtaclpVSkFib3ViUm9ubDlkbWF5NXZpYTVKR2s3U200V0M0QzEyL3FzM3pZakdFSEJXSVdrcmw3cTBmV0dPemNpdzF6UG9pSG94a1NGdGhZZVRKdXlTZUIyb1hZWmdSdFVWVkZ3Z3BMeVlzWEhQREtiSCswSm45U2UzdnkyYXdRWE05WUpvcnhzSkQ5MkVYa05qL1Z0dFByck96Q2w5ZHg2NU1NRDhwUDdjeEFSb01EZU9Db1FOVW9iNzNEQWp3WmVmZW8rV2NsNFY0UCtPcXN4VnlJSTQ4TEE4bUV3RUIxRGd0RlVxeFVydnRib0d5dGZndWE0azM1T1R1VFlMdEN0bDBFeUVGOXpBU1FGRG5jc0pmRmhpSkVkcG53bVA4OHB5NjBJdktWd0h2eHNkOW5XeEZDaW5qQTRrbkl3Q3B2K0R5T1pOTlJmZDBYQVN3MG1VMzAwQWI3NUNxMVlWcWFLZXpXMnlzS3NHc0hscHQ4dUlZempIZzY4bElPaGJ5VkM5MXVoaEF4aHFZb2RjdE05UlFaQXR5MjZVT2Z3ZXQ2L1RuRm13WFhDd01ub0xTMzZKMzMxUUZLMmIzR08yZDJNNUY0TkNnNWVWNmY3WVFtMko0ZVlpdTB1R3E1b0VlM1JrYmFmdTNjTHkxN3pxL3VFb1d4aVhtQ3M3dW9LVUY2VjRlaWVLY2hIUlBOakdzd292Q29xdkZFa1hCUmNXTjdQa1NYN1NOVkNBVHdKaHhnTlV1cUhVNXlFUGJZY25SVEs3eWJIOHlSTURZa2p0L1FkZnErWmVTZzJxcnUyblJMMnpGTWNISTFnYTVmYXFpQTZWd08yem9MZUYrTmF4T1J3S05HdXlUWEFKR2lWa1hFUDUzMnZHRUVGdzBJazdJNW5VZVJDeHlwRUlpcW5rTGd2QjdMKytETjJuWS9hSllQdEhRRFdUdkhuK3pRbldEZS9CbUlvMTRmajlZRlRZWE4wdGlLZnFsenczNzVEUFlWSXZjdEtvUS93ZXo4bmE1aWU3ZnNoazRrazVuWXhYWThCT01XZnlDS1RiZk5VVmNCMTd0YXpHcDM5WEkyY2E2aHU3OFQ2dVNiKzZPbENqbFNiQjdyVlNhWExDT3YzZFZEMiswbUYxRmx0WUpQWkh3djZZMnhqajRzbWpmMFVjMm12aDNqS01EV3hwUVdodXIvc1BqdVFmMDN5dkRsZ2QyV1l0bk1TdTAzWk5LVUw1ZnFld2oxaVdEN0RTMFpRbGJkcm9RMkNyM3BSeG5GZ0pYVG1CK3ZNZnMyeHRzY2ZIQmhaSzhsRnZIVzVBd1N1RWFVMzVmV2w0NFBCS3Z5anduc1NWUVBwWWNMRldTRlpRY0JicmVKcXZrWEhsNk1XT042WVRJYXFyUXQ5Vy9ORS9JWjRxZDd3eG1sVk5SRmhiY0V4cUordXEzeEVlR2ZCU25uUjQ1QURmS1htWGlMdW5UNkpFbUYrSnFyS04wR0tvQ2s3QWNtdnJWYWFKMU5BeHRldUp3anZKQ3hQTWxhclBKMVA5NnZqOGhLY0NsekxBK0xJMWNIbkplT2dhQ2RIUkJPMStLU2toWFVabFA4OXhZQk9xRldYakxIL1oyemczSlNmdnRUUkJoTDlKYmZvNGlUS1IyelA4azVVL1Vxd3RIem9YOFdVOGZDejRHWWpVSmZXeVJ0OVhRUXZ6NHpIM0w5S09QYVBOdW00eEE5SGdsRnF5elhBSDhNZEVyUFhac1RwNTliRVNlUXQ4akNweWgzNmxjR0JRR1UxbVZMRVNyN3JzRnZjRDhxaElMMGhNVS9HS3pyRldIWE1rQ1UvS0Nuc0pzTUJ4OXlPQVJ5WHVqZXlkem5ra3dRY01pQ3EwZkdBTGJVNGNnRnRuOVU2MU9HbzNwZlA3MmtManFmV2hscGZEVVI3U0p2ZHM2ZzBKWU5GcXFzL2tkdk5maFBwckJFbHBTajJGYURrLzBJZmRFcXNmNGlVMWo1TWIxcFNtK2lTTkZ4dEhmTXIrVE1ENVdOKzhsb0dFNE83cUNmVnAzMWw2KzBIV1g1YTQ0R004U3ZsR3FoWlNxclhDS21reXFhVDF5L0p0M0pxUzk5NGZkVG5TcW1qWmhQTWdxR3FBNnRhWitDSmQxR0JXR1pzTVgzaDNZeDhOTE94Sjc4WVVuM0hpTGxPd3F4U1NCUXJka2g1Um1vYjBOZG5ncWd0K1lxaDQ4bkpDWWM1anF1UmNDdHFUdElXaEoyV3VnN1VybFREd0FweDhDb0Y4MzFqQ1g4SGFsTmN5Wm1wZlBwVmo2ODFyenAwcFZ6elV2a1Byb3M0aEZTWGhWeU53c2hqMXJMUXpTVHNhVlFUTWxyTE5sYlZZSTdiakZac3FMS2VXNHdQREtoSGpsNTdrcHBvU0VERGlENW9RVDdWMHJEbUtoL3hlOHBwNUxabEs3TVR5NXAwbzNFOVU5TUFrWU1jYmIzclF0OUNOdlFZUDRBTHBCaDdvNm1RUDZVNEsybC9TVWFPdDVQVnJYYnROZkVYUlhOVHpkeGxGVGVVY1djL2FER0lzdDV2R05FZGsvdnJCeFFEV3lER1JQbVVnU3MxbjEwakRwK3pvTmhqa3VqM2dUcWhzcEkrbUsraFRUNXExcTB4K2hla1R2WkRiL01qbXhlTndPTXpBTzh5UkExdjlzOVlmNHRNS3VkTUxlVVVuNXR4WUdLd0syYzZ4Vjh5cWpQZW9mK0dOZ0FOSEcwTkNpVWw2d0hmT0MzNlU0R2xaQk51cmo1TlN6clUxMUtVMDJxS0NkdVkxc3lmaUdaWkphVk9zUXJBTHozQ1FaWE1hNlAvREJCOXVwTkZndFROeDZ0ZTcvQnlSVVN6bXIxYXNoOU8yVWdpUFpIUHB3aHZQR3B0aTNwMks5dUZ5UWVGTVEwRmlWcW9kb3FlWmxqTGFuUkNFLzNIV2RyOW4rMU5ET3FUc042cHBTUFUza2JSL0w2c0VpK21HTnFHMml1SG1wK0V6Y3hya2Y3Rm1tdFQ0bFB6WDc1eU9nYi84OGtuOFRrZW1kSU5RcTB6cHVqakpZS093cVVSWTE4bU1uL2dXVVNhemJQZDI3Rnd2b0d2VjhlK2Y5aW9rSmtQQ0JPOGlBMW5yMitYR2NTVEFOVFo5TlRPeUhXbkpncTUwbjJTc0NEelpYOXJ3QnV0TXFNRi80ZjY4azVTbEtBYUhPZ3Z5cktHaG1xNU4vbUsyYTVhM29LT1IreUI4cXF6V2VvSEdUaHJFdUdiOW16MmlrRXlmelJhbGtNdjFHUDlUWWhZRDZkb0tkeEtudGpkTHpmZVp2WXorN3c1cjJzZ0R6SHZ1dUFMSHhhUWEvS2t0TmpaU1VCUFZ1QmdDV25Sc2QrZG5ZbUt5ajdrdjVIRDlERnNwUGt0WkFNM3JqRE5QWXNQanBPNitMYXFjU1VTUEgrTEMxMk5oWUY4ZFRjU09LVjlKeVdSV3FzWU9UaGpFU1BYSGNiUHRxcEdCUEY3YWZLelMwR1hnd2N5TDdLT0UvRk5jK0xGdStoQUQzLzBEWHpKSCttM2UvMkMvYXgvTW42VzN2UVZlUWJzVkQ0Sk9PQXA3OGlybjNvdGNRV2dvL1J3MUNDNDRIOXY5WEFCc3FxdkUzaDJJYWJOZEVzVU9JVjNYRDZpaWUraGlkQkEydy9xNHJxQkJQbDlwRk9ybzk1ZnVoWVRVUC9nLzRxSWJVSnh6ZWZIWGVDQ0dWRnNsQVg4WlkvYzF3TERnR1JFK2tPWENzeCtpQWd0K0FOVSt0b05VcWpkZ2xCWTM3N0wvdU5zTjhZSVpPMDdUUWVkNFp6WVNlUXhoT0lIY3JRdFV6clZ4Mk5zQndDQUZ4NE1FVmFYci9jYm43MHZkYWFYNEU3MUtjNUpFYlNTUnJLcjA5VUwvUExucW03VE50bXVMWCtQZ2tqaVBtQjdNT3NHSGszcFhoRkVkNzV2NGlPWm9zVkJ4bXZBNGhhbTlESmdHM01XRHk1NE1jUTdJcU1SM3NTVm0xM251dER6YkZlajNJRWNkMUxQV2NEcUM0c2xaVEs5emlORkpHaWhTbUxVakN0aUVNVjBQZUc3WHBlQlAwSmZUTW0rK2IxVjA5Q0ltaENlaVBGK0xBaVVJL1NacmptNjJnb2NWWnpSQzFrWmhIU0V6YWlOTWtPUlFVc3J4R1ZaOUR2OVpVUVZQUlM3UlNacFVYNURYZ2VrYWlpZjNRVDJWOWZLRGpZSEdtY3dTekYzK2VSZnhreTN3RitoT1JIMlQyMkpFaHZkQWFxQkUxMUJNTmlJM1BkV2NMN3J0bVNDNklqenpRUVNkdFlsSVBlei9aRE9BWEErTWFSbzRVZFZVVnlWUXE5VVc0V3JsUXByRytxdVcveTh6d2JEMTFBc0xRT3VaOXFRMzdXT3g2WWR6K3dvUzJPS3pjMU1mS0Q4QW9tQUlmVklPMnBZeHp3ZnBSanRLL3p6bXlVdmg1YktiamhQc3l0ZkFBMDZqSk1QU0kwM2tVSDhDNlBrOGhqM0h5MFE4bHEraVFGaEh6UFl6QTg4eWhtTGN1d3BacjZuSXUraVliVjhwa2c5c0JxL3FEcjZCYUlUYlZnVmYxR2trRUFuN3Y3c0VSNXI0dTFSb1Rhd1Z5SW1uVm1HWDdmV3Qzc1VaVVdlbFlBZ3pDdXRuWmU3SnFiNTBoQjNpZE9FZGlNeU41OTJENmRRSngyTkZESCtkdFNJa0NFTnNiODArMDZvd2QzMGlDS2VCR01CcXN4dFU2a3VycUZXWWsvVUdkeUY5UlF1R1pWZW5uejhFK1ArN2cvcWc2UnJFTUwrdnI0QnBsY0FCdDZkcmVOaW5rQzd6SWExc1JBdjVSRkNVMGIwbU9PczB2bG1hSUhreEI4RlRQV1IrWEVpeDVVTVRvd1BsSW81ellIL0hIQmNwL0lKWXk0UTVaU1FTcmEweWJzeDRGcWZvRTdWdHhCc3VLY0VmZG9ZeHhvcXlQUFhCMHhhemhQb0s1MmFIV0NQcDMvWkVBN2hlZEJCNTZPb21jakg3c0dua205YmJHZWFnRi9nUElUVEJlYjhNZlQwdC9qNUZ0Y0xSZC95NmlHNXkwWVFPelpteFdQRUFLZ2ZMN1BjZmUzV3hjOCs2TjBvMzIzK3dyMlAxZjNHMTVaWE1hMzhJa2tBU2JCWndpQXlHSUtnZmEwdmtiNjBNNjJlclBBbGlnRjRyUmNXZWtNWno2TU1wQy9rdGc2Kzk1eTkxcmMwbk1wTlFPS2x0aVhsS2tnMmNFazN2L0N0ZVhmM3hscDRyMStYSEowQkVLRmdRZFErRUxkVlg1MnhjVkFhd21UejdVSGZaQUI0ZHh1OExxcE1XVDQvOSsvdVlnQTJONS8xbGNxd2wveU1zRXQzY0kwMis0V0VwUDdGdmFyUGhReUY3elBUTm9CeEdScWQ2QVQwSDhqV1k2ZWxxU3F5T2JWVEVpYkN3WndMVHQvWlZjYzdMMGMxL1dqTjZtSkJTZDJUZG1nQndtS0NkVTNYL3lYVGpCakovUmthV1BxOTlTRmlsWjc2T0RodzY1bkp6ck5jMEs0ak5sblFFQXE0UlhvWURldkJnNDE2SzhHVmtObGZUTzFpcHd4dmV0VHl1dmd5TkNKRC9Tam9Ubk94b0NPbDRYZ1RkWktMYmw5MUptYUJhUElMQUQ5REFVMFY1OHZQeEJPSHZ6bmdudFBsN0hubVYyYjdOYjVpNDJLY2hHSzlHVEJsYXNxbWRFMHVkeUlTVUF6Ny92ZktOR3oyRk50a2lMaG5VMXN1Vm43emRFZW0yVklFN0xMSnIzUHRJbWw4OFBaY2E1T3dRYkhKbHB3ZkxtRERCUHRmNzdkUHdIRGxwYjJ5SzErR1lRbkVXbk1XbmxvNUJTOVpVbGN5UGxtMndCaC8wdGlLMjVlNVVoMkl2ZDhvRTlFNWYydWFWbThHVWRxdG1FSGpKbWZqbzFzd1BPWFA4WkdkaDNLYTZyaG9TdVZUSjlvajd6L1FaMG81RUQvZmJNUHBFWnZnVGdUWXRkQ2NtT3dtN2dTTWh4RjJsUXlNNTFoRGNNa21FMWROMmN4ZW5nOHdvS2xOWUVuZG5nL1h0WW5xN01tR1FNYzFPby9qWDBlcDg1eFNSbkVOcUpzRm5LMTlLZ3huRVZwWDZ1Qjd6MTZ4VUxqa3RkcWNFZ0xBbVhwVCt1RDFKWVlyN2dxNm1LMDdocndldjM0VUFGYTJXODJZejZOd3l4bEE4MFFIbjRoZ3BUd0tQWDZ2N3BVSjBDNjV1dmJldEhlTmhNbXlqeldPcmRpWHFLL0dXM3lkQzI5SzVRU2J5ZmFZRVNXNm5lZ0N1Sld5TS9KZ0huNkprek5LWjY0Ung2bFFpSWZickRyaVRJcUovME1INUhQck9pOFpDbmptNkp1KytVOEZZRlp3dFNQVmZMSkJmQS9mRzFwK1FoMmxGeVp0cENQVGJnYzl1OXRaSC9kNVlvU05ZZjUxRTBUSzVjMjVmakVnNTFIWDlGT0Q0a0xpSmVGb3VBdGprU0F6SjZsMU45cXo0OHZPb09JaDhyT3pHc3JSWlh4RWlmektqcS91ZFEzQUtGbTZkemxOanVjVkcwbkZGYlBBWXhOb3p2VWJKYmxEYUdxRmVrU1FTbmVEcHhWaHZxYjhSRWxXMDJNQkF4RFg2V3N2UWZHVUI3NUZyZFJ4cVZjZDFZOU14c0szbWU3WDVpcHlBRG9MVkNySm0yTW5PTkovcGdOMnNEb1F1U1gvNkpRSGdBc0FDZ0V4WlViQUZEbUF6TVZwdVpRcHRUNW5ZZFMrbG8wRnlUb2pubkg1aFhHOG9za0tFMkYvTnl0Z0ljRkJNSEhBMzNoUWRWTXZhNmpMODVtbW82UzBrQktEUWF1WlVHeU5RUklSQ1dlSmV0dXdaQ3htWXpMd3NMUVdHcmMzeTFNZVVpMjJyT0VZNHpxK0xmWCtrYURac0Fvd2ZvUW5nMzU1WVVpSGJiUmJaWWk1amFUS3ZJN2VibG9uVnJlVURMOUdaMUgxQ1pkVHlrL1ZSVCtoZjZ5eTZUZ1RUMmpkWWZBbUdLN3hML044MkltaW4wNmkvdUJJWHJYVGtST2psakxGUmRQRHJHYnIxbnBKTjBtYk50MEpiSFk5RmIzek1HUVF6d29MazVESS9LR29oSWxQNWZJMmZzWVhZUTFldkJpZHpJL3hNVFZQVmZIWTRkU0hQNDQzVWxIUjRhMGVPWFMvYU1MRlhnWjJxNjU1L3pGdG9qQTNyL1hLUWxoOS83SWlscEE0QWVYS1lDRzhBYlMzekloNmZYalp2bGQ3RzFEVXFNcXZjMzROZnlCdkFNdTZ1ckIvSEY3cDNwTHY3bkFkdFhsQU5yb2VxanN0Ukt1dFg5WGJ0UHVzemhjcUp3VHFSUGphcS9sUkJpOE5NdFd4TFJ2VDVwWEpWQkg0WkpIYmVLTUphbXZWK0ZpOEVkN05KTFlndjd5OWpHOGY4Yk5kdE5yOGRFNnR1QXkzZ0tZallaMEhQSjQ3UnEzbHZWdU00Y2NBNUpNYTVFejRsR3ZhekxVZk1JNkt5RS8zTmRHakRIYi94LzZ4a3h0TjZwSzVPWHVQOXBDbHhheXU0Y2ZNTWM5R2NwMmNYUUg2eVViVkkzRStNdkdLcmJZUFNJcmV2QlM4ZEI3THVSRlFqVkxYS1h4RDlGZ3FITUx1eDhDenNXenZuL1NqcUVnenBJZDkxUVVETEdSeWhEY1BQT3ZLOXVSZGVUM1V6VGRPc2ZTWWZGYkR2QUhBVkxSSXhQeWVHdUNkUEtETWxHcWJQN2FPQVBSUlFtRTFycFIvZWMrT0t0aUYyVmpYVmVKV0ZiY0syOGZhNS9VSVE2alpSNTlEZ2ZoY1R4YlBXSlBJMUFhSkNmSTBwaVZaVFlXcmRlVi95RWJKR3p0U2dyU3d6cld5NkdaWG52WEl3S2tpMzJSRmMydmRjQ254Z1U2YTRPelJIU0RBNEZrS3hvUVNGNEwvZUJpYTlLMlUzQkhPMmkrTktDTmY1WE81QVR5NEdkYUdzZTFPQ0YwbXU1YTE2bHJCYm03NXRubDBmOGRNbTQ1ZmtMS3IwTjVBTnJ4b3NSUVZQMHpUWHlkSktPWUo0dEY1NlMxc3ZZSkE3UzlkbHhoNWpxV0o4ZVFPVXFQd1F4bkdOenFHdHNOR0Yxa3ZveTFCK1d5RmxpNVJQR3haeE1NSEs0RmNKRlQ5UFF4Q24rK2dEcDUySmFNdkdhZGt6dkUwR05lcHdFNW8wb0hNVGtWZE9QdnA4NDVTdTNGdk5KQXBlMFdqZks0V0pONzlTTjM4QUg5Q0M0SzhXbFlSQTB6Y25MdW1XQmRjY2c3UjZudWlIYTM3T09nbDZ0alFkaUVaQ1R4NWJUYkd0TkkrSGZQVVRQQldZWUpzb3lZc0Zxczc4OHZYV3ZHa210dEtQZ2FKQmppdUZBcnUwLzRqc3ZYRlh6RG51ZkRoQmsxS05OS1ZQaWc2UHRFMTMvYnZxZmR6anEzRDdiNnlON1llMGFwK2pOQ3pTY00waFVjMlRFbEZqWnowS3hNQS84L3JmeHlVeUV6bUpoVHVRMlRpazkydXR1ZTZNcnVVb0t0Yi8rS2w5NHdsQ1hPd1d0UWVJYVpFSGVnQ0hNMk9qWHFrQXFCeEVUcFVzbk1zZGdWMVJaalZKd0huSkN2U2tHemVVWklQd0dhbU96Ky8wNDdOOUEzTkpRK1kwUGxLakdGK3RKYXlSNisraGp1am9oaTlsTDl3bndrS1QzMWNoWUtZNmgvaDJSQnVjSFFBNXVqTzd0YnArQlVuMm5HQXJsZHB6Uk5xMjBOM0JmV2ZJMHkxaXJodGZ1eWtMY2laMFBMdmhsRHU1WFdyd3FubXc1MGJaY2tpSDJ3Y2pUbVVERmQxLzNVMDJrS244aWZPTzNxRXcwbllZMC9VYnZqVU9KRk5ROWttMjF4R2JpWUNqL2YrZGhLMGFDVDlkOU5vSTlaUWlPR1JlWDFzWnJMWWo5ckhGTE5HY29FUHQ1K0htQlY2dy8vTWhYcHFoUmZmUDBSbEYxdWlrNEdCWisvcEovZ2ZTcHg0b1RDR2VDQUtkVktaZDF3TkxYaEhMd3k0eE5MMUNyS2pLNFBPTWdQVUozSi9ucm5SNWE1bVRsWkdqYlh6S042VVF2ek1yV0wzYWRVcXZoVytpVC94WE9vNU12RU1BeUhBdk1EVDJ1eUg4a0FWS3paazFsV0MvRkpSdDlKekU1Y2RjcWlkcjNPbVYrV0o5S0s3Sjk1L2hzT3Z3Z2NRWUY0YzZ1OFNpMzFzLzIwZXRlZUJkaEpCRnNaNUxLb0dmOUVHWUp0TVkyNUpiZTlaa1UxOVJkaVlJMVV4Q05hcHlFMzFRa1NPZ3hFOEdmbmZSQ1liWXd6NE5HdlVzamFRN3Bqdml2cFFIT2ZpazhaK3NOQ3VKMDR5eFA5bXFkdWVhektKREpuOWJFdUljenRsYlNTSjlOQ09KWS9FUFEzNWcvaW9La1Fsd3AzMlg2U2ZTeE53SUJJd0RsKzVOWW4vRlA1WjREN1JKK21vNmJtaUVEZFRldUJOdUdXZDN4R1kyaHEycnpWVmptM1A2NGRVYWJ1WDhHSXkrcFJnSnUrbnlBdDdjWG16cjlQb08wZzR5RnpuRzJ4Nkd4NGhrZXltaGZrQWFyRTdYWEkrRTR0UnMva2EwbXRKNFdab3I1Rk1GSGFZZVgxbGFNbzJzTEhheGlTM3RkanorTkJiU0dnOE9OTXJlcVNVRDNzU2Z5RmowOVBHNlhnTU02S29Hd1lyQy9WNlhKK0tnbUlNdk15RWpyY1dZeEhuSlYvUGJpVDNrRTZhbFpTUk1XcnZVNFhIeHMzYVUwUFJ4KzFIVkZrQXgzWDNDU2ZUWXNQUU1wbHJZclBEcVRTMlRYeCtpc1RITjNrK0VySm9BYUhnMm5UQ0RqdnkrRTJEanpkMERBVktOMzA1Ylc5ODRDS2pZcmRiYmlwK1NPelREM2lHdUlHSXVlTVZRM3pVS05LbmhxTkpjSUZkMzViVVMwc201b2dXWG1NL2J4emxmVEc3dzFwN2dneUtqa3RveUpaRUFZcTV5UWtsc1h3WExmZkFKbTVwTkR2emZhaVZRYldrTC9IaitPSzVwUzRJQ3dxNnMxV2NLSEc4cENDMVNyWm41SEIvQWxUTWlMTTVxZm1uV0c5c0FiY0VsREt0bWxKU3d5RFpENEV3a0wzdzhWdzVCWi95TCtxUzI5WnluU3FlV2JJa1U4bTIwd20yWVg0R0lPOGtMYXM3UW9UWUZ4a0p2U1d1OUd2U21uUUE2dmhLVW9IbHpWOE5USkhXME9SL2h2NXV2cEovZzZpcU5iYVZ5YnZiRVhxNEtOT28vK1pVYVc0TWI5Z1lhdE8rYWlMRVhaSUxWTFUrQWx0V0pjcStwVFVYWmxRY0JXRnZzN1VocmpRd21ZZ24xaFlIK3Y1Q3d0TmNkVWpnME52NlBEb3g0dDZCT1BSUm5vdlhtNGNFNm1XUndBNEpxZFdNaUtNTm82MW8xYVlmT2Q2Q2JvSEFRTmhUb3ZNN1h3VHFPZ3VWUUkzK3JQZStwWXlwWkE4Y3UrcEpkVHl1YWVLeXh6emZOT0MyQzF0a0pBU1ZJTVJhOHVBekE3a0FFbGNpbHYvd2QzSEcvSUVsa3ZwUE1XeGdQTXZ6dmxZb09HWGx1UHVaOTVJbVpkR3ZTSE04MUNVQ1lSdnlmTjByckhoWmtmbmZRV3Y0ZnEydllLT3dkWDIvblZWMVhXWGhYUDk0eXNEeE1yVXpwSkxRTE9VT0NxN3pvTE1kQXdvVE1ybFVKUWVlZXZqdG1PeUU5V0xBaTBpZGgzZWlLeU84V0c1Q2NlcmFSbnRya1ZHL2dkSFNUTzFCRUVVYThVVjRLeERCSTBVamNUbnRiVWFrK1p5cTVuZ3FmV2VjSXcrOGE2bWEyNTlPRDNhUDM0L1UzbCtNaWFrWW1oYjllREY4NGdQYVhOY1d5MDlyUUdPaHlvcEtDUEJxWFBCYlVOcU9ISlNZUWRGaW9QL3hGcWFzUjJ0Vk9hMk0rQ1Bwd3Rnalk5SnpvTVBpY0orT3JnWTVYb0hGU1hoajRDYTg3WEtkWTA5VXE5SXk4My9GYmVnYy81dWk3NzIyZktFa01jdFhLMzRhWHVvck53YU54NEh2d1JQZXdYQkI3bU1EUXA5SjIyS2d5YlNudUtaQjFISFIyRVRTbTVXV2F3WUhLcHB4bTkvQzloNmlOT0lMVFVQTllGR3g3cm16dllRL3FWc3VsZnFCN0d3TmVwWlpqUHNlU1h0WmdSZ2dyb3ZHMHpaTUwybW9WOVA2UUZQNFlzT0J4ZzVkY2ZrbTNlMENVWDBIZGJkdXJTbUdsTHd0UEpYVERSTkkxSnArY0pHQjVmNXlodVhrN0lzc1JmaEsyc0tKR25SM0hlUUpYZDVjUUt6QmsrbjFHUlhSR2prZjJOajU3clFqK2ZoT2RNZlE0MEVyMWZQNUVMVzFtQzRmTTRpMk11NnRLWHRPSHNtMDhGSUFMU29KWnN6aDVOL0dyMzZJSkVXWGZtam1WSXpZR1JWd2pjbjRxWFFvZDZudUIxZjE5Um85cnJrUUd0SUFYU0ozZUp1SDlqYlU4eEFrNFRKRitsZVV2SDYvSkk2WFU4NUNSZWs1WVRkeTBwME5TWUxVWFErV0RVdVRwYjl0eHhtdUFNVHN6cjVuTnRPQXc3bGNjTlZ6L0ZVOC9DZkxWcTdHVitaQjhOOXUwTzZmZ293cTFRRnVkWWVhQnRhRFN2S0lhOUlwaUpyNC82VTVTSmRYWlVGbDlGQW13MzgzNjZmbXZEOFh2bWV5bUN0MnJWTVFvUDBSWTVjWFJ0dWdLbkJtWjE3bVlNUkxQRC9neDRDQzBNRzlmTzhYVk02NFlpTzkxVStPcThSRUpHYS9XTFdUa0RPTUVrTmJMT2l5UG11bytMdE5wU2lYRFVpb093NHI2ZVcyK0R6N0xSU1REcEZEaG5EQU8rUm1sU0ljaUQ2MjY4eFlVQkdmcXJPU0lyNEFPbHJIRnhoTE5yMTQvWVVrM25UQVBQVnFYWTdvU2R6QmxKdGVkdnVoSmw1c1o0Sm1DYldnUDZQNS8yL2M5NzBDU2czQTBPQzZ2OWhEUzJNQ2xzWmg2eVRmdkozNnJuamxjQXJzZDUvMm8wTlRQbVVSZ2RtWDVuOFJLRDliLzBVL1RBa3NkSUsrZStORlN4T0NEZ1BTN2t1aWl5YlZvZ2w1bTIrM1JRQWZtZDRRWlBYbW1VSnhpNEl0OU1tMGRkTXBHaWhOUm5FcXNjbDNoaFVEbHU1MVB3N0hvVVhhZCtScnNNUlBta2FEREpQbjFpODNYYXludkt0WERiQm5aR2diOFF2YWhFQkxDdm5wZStqTHFCK1RleGVWQU85b0cwdnlSN3BETEg3THdGLzJjT2c5WU83b1h1NDlzVzNPdVhwSHRtSG1BQ3ROOFNKU2JHb3dXblRjK2xqUkFrc2pMMUZQUldubDZ2MHF6L1oyc1oxcXg5LzJMc3dYaFNXRlVuTHczckVUeWVVZUtKcktsdkt0TzZyMUo4M1hpdEVHbk9rQm9rcHVFN0orME1nRkdNekxZZHFrdXZVbjY1eC85bHVrT3ZzL0U3cEtlOXZmZTJQVitkZ2tpRVhrZUY2RVhUakFQOFBqZUVNc3dhY3F4cmpBcjdKVlRhQWtndXRRYlIzSjd0cyt5YVhjVlA4b1RYWEJCamVTM0pvU3ZGMlhweTdtRU0vUXpscGtBQ3dyYlBEYjVaaXhxTGI3NDQ2VHprTHV5NndKbUdIeUYrL3JtaktiditkOVVDL3luSzV0NnFiYW9VdWp4Z0FCNmtRNGVCeVpkRFZHNUZmSmtRdHhlNTQ2SWFDTENTcEZaUERYVUJGMDNseVBTOEcyME03R08vOUdkeFo1OGY3K0Z2c1psYk9oNkhzeFBHL1I5dUFmNWxWRzR0aUN3aHRxWUlSZkJHbjJnZWtLNFRLTjk3NUxuNVdiZjhZT1Y2TTJBQ2lMTkZINzFoQytVaXIyNzkvMVA2M0NNTnIzYjY1YmxJWmVkamUwUmp1WDBUVzRUKzhtQUhZSWdCbzNOVXYvTS82NUVjY3JXdXpMVjlZc2NjdVFSekNaRUJZV2VHQ2dkQjBOd2UwbkRROVp2dGRSRjNxSHlKZ09SbTJlYW5lbm9ZK2h3WlpZZ3hpUmpFbkZMbm9QdEg5VmxjeTIvMDhoc0U3aVpuOWY3MkM5Z0pCQ3Jqdy95WTZnRDNsM2J5SXJXWTZmRStTSjQxekdYcHpZMGVBeE5nRlFFL3QrWjVnaU5BMStxVHVmc2pLa2JSTFkvb2pqWmxPUEtIN0RPNDQvVTJYdml3Y3JLMTlqVklHaklHZEtEdnVEZWM3eDlWU2RMTW41R0RMZURNdmZIQXFRTVg5NXRyd1doeis0ZlNmMkIySm51SXdJK295dVcwNVZZK1RFWjVSWlM5d3FaOWF4YlpXMXNjcHVzSHpuanllcngrRHFBMCtrSnZUWkF3RktuRmo1ODVMc1pSY05wV1FzRHlZb0JvTEVGMkVCNXB4Vlg1YWI1bDljQzF2RGVLWTlTZmpxdUMzUHFiTklCeEFqYzFGTlJ5Q1JWQWhTalJLWmkxbHk0UzJ4L0Zpa2F6M1QwZlBPbUdzalRUVGxkVWEwdURkemVyS3dtOERJNFY1WTdTWnBIRk1GOGpjdUdMaDNLOXMvdFZEcmJrRTB6dDVqSCt3MG9MMUk1ZUJjMXhkYzlhUFB0SHhWUUM3dU1jLzFLU3N3ZEZFU2YxS3VCYmJRZ2REU0dPaEhKMTQ4RFdTQWlZS3hJZEp3d29odlZPdVE5OGpoRnpPb0MyNlkrRlFpejU5MzhKN2hNa3JYWk5zcG84V2R5d3FEY01ab3pXc29uYzFVZFhxNzdMbnFkMHBSMTlYOVRlcnFGTzRSdCtoZWllUVA5a05nRVhDSmVoUmdvRXVXL1lHUHJtb3pkMjJtdDExTW0rM1AyekI0WkZXWEd3TStna2d3aDBIMHJKTFQzaWhsc0hTUjNsSU9PeHdCWGN1dzdDWUtkVFVjUTE3cXdoVExqbUNpdWlENXRqdGZLZ0MveDF0cXFhc0RhWXNBc2gySHNnSUlOajJ6bG9uSG8zQ3FzYlFMdC9ENitxL2RpRFVyeTZHRnRCQTVFV01ya0lwU0M3dW9OZGg3eWl6ZlhiMkFBV29DRnlCU2dZQjlsYjdwcWRyL2E0eitkWlY5d28wM3pRZHdiVm1sWWZwb2lHRlhWT2R2NmNDY01lWU1PdmVSVkphZjErWDhlUzRESkJ4TVMveHZaci9kV0M2em4vRTRNMFVEKzNjSk9qazVlT3FRdnZ0c1dmZ0JIM3B2Zk5pYnhRRDNQMlFqQ1M2WVNhQXhpVFowaVlnWlZhTElkemsxZjRXNnNPZTdwZzJqemNKak9VSEJwS2FvZTgzTUc5OTFwWkR1WFhUYjlLekhZOFhJUzZseVFwZk10NDJHNi9RM1o5TmI1T0drWWJUWHN0Skl6emlQT0RsSjZuejArZWtZbnd6a3E4d2FhTUpCdUJTZGNLQkZqYnF1R2RCRzdxRXBXRk42eEd3VXJkRDQzWHc3WlZxQ01yQ1ovM2xCV0h3aUNqUlRGQnJhMXJxNUVJdnVSaFN1Mkcvdk5QaVo1ZUMyUDdJazhSczVRbmNGaVNOQzFaNHpYOXVnM2lsVVhVSVMzcloyejNMM1RFVXUxdCtXdkJMY2pvZ0NES1lPUTFJWjluZnh4S2dzbzFNQ2RoaTBUaGpmQkRJcWNqR2cvVkQ1SW8rTllmeVFmRFZPbnNabkw1cDB4TGg1Rm0yUnA1VWhEOG9haW5yc1BuQzRucmgvN3gxWDRsTWRyTDRpK3dYeE5KcXdLWmh1MzA1aVRlVEYwTGV4bzVBVnJQcjJhRDBoK25SbDFkN3p0V0p4SFRIdHFEdkFNRDdiMVZHa3hxZk1QSmZmdlNXeU42eS9SZWxwUDZ5UmthWCtzOEplQksza0tQNHQzejExb0pjMmhwZGxhZ1NqQis0MDJ5cTMwUEh0WDEyOHZBRDJXKzhTdlUzZk9aU1BVcVZlenlVWGlKT3dQUW1WcHBUOUc4STZkSUZFYWRxS0RFcHNwVWR5TEE0UW5jcmdsRnlBTWtQZnFQSEdhMUdKQ1plZkw2UnlDZm5SR0tiZWk4ei9INmxkQVRzOHBidSs5MVpadW9mVXgwS3pMaVVzNE1CVy9aSFcyaGM2OFRnUGxVQTFFTU9GZk9ieXIwaXc4ZGpmcElVN3JNKzN5K3puUmZlTnNmUEdJdW5pcXFsWVJqQ1NWRUtUT2RScG5nMHp0dUFNa1pMMTlOOWVvVXU5WGd1eE9pYjBLMWMxOFBNMTg5ZUZTOEVXU2EzQlpBeXE4Z0k4ZEhEdnFJNld5ZUNaaVB4TnVmUWhoYUdHQUhublVIU1VCdld5dHRTWlFmN283ODJNZEI3VXNmMFYzM2p4WlAxMU1qeFBSc0R2bVpJRVlPaWhpbGkza1FjK2l1aEZpUWdsTjFlN0JCdnJRRnlUby85RlVnZGhuT0VoV1NOVnhpN3NiTi8yWTVKd2VtTjh5b1BDYXNTVmJQbEtuc3V2Uk1YQUhRbGMxdndJcVFhNGhLWmx1Z2EyUVBXc0pOdkJMcjU2TWVWTUQ5MkIrWmQ5SUsyUjRJMG1waUU1Y2hrSGdYbzNLWHRZeU55T0I5L3pRWTBaMUExY1d3UXlLS1lha3VhUThCVkNLeFRPQlRyU1AzakwrVXF0V0lpZ2xRU0JjRWVUZERsSWtJQ2NQOU02NFV2SGRDVjNEYjFmMEZVNDBDWVBhcXFJVThjQ29mb3gyKzAvekZSM0N0QmFuVS9xeGtYc3ZSV1JvMHF6YjgyY0ZCbVRQS3pCdk91b3c2Mm9RS3VSV2kraUNqUnNOT3ZNRjJIL3FIK0twekphNEFmcEpMbGVEdmpMY0ZvNkRuaWZZaGhjQS9PUFFhbmQyN3NkUTR4cFdOcHpnRlFCUWllejJKRWVENVpBRnI1TzJ5Zk9PNDNmWUlubmp2Q0lBdndOSDFmVUEzNWFWVzZBcDdUWGNBRnJUdDNrRHpJcGhrSTB1YjJDbUFzbnNJUVRSck1PVnBkZ21BdGsrcHpseVFtUE1XTU1PQSttcDNoem1sVWF4Q0QvYS9yV0tYMllkM2RGWTJLc1VmOTE1ZlFNYi9SM05lczJUMy9kN2ZnZjlaZkoxVEZpMTM5dWFKaXRCNVZGMkljUDNQUktXdWFCY2JHYUl4OEV1aXJIVjY2MDJjRTFYUkNvb3ptUTZzUlk2aU1vOFFOK2xqR1lxOHcvdGlLdWxhT2NEYTBZaktab1puOEFCNHJ6TEpWSDgzSVVJNWZSMEc5dGZabXJIY1UzcWZLbFY3VVBaQ3NGV0J2YS9jc1VFdFlzYlkxd3ZnclNEVFZScU9ERFhCTXRzVG41eUtNRW9JQ05VcnBxb2hDWm5DeEpKdU9NdnVVSnp3NHlueWR1TXVCYWlDNnJhOE9jUjZ3VzkzNlp4WnpscVlZaXNLeEU2Nzc3a2dyT00vSndtcXgrd2FWU1JvYmZwc0QxTzg0Y2N5L0M0ZlkxcUt1cVFaMk1nVCtBK0pRUVZlS0I1UnNsQ09LKzlRdGVNZVBYM2FnS1FzckhuU2tUbmt1VnJHQUhMRUtVZ1dxa1Nrb3FCMFh3SzlMMC82ZHJ0YlhWMnE4WUxWVGNNQWlWQWxyUkhxM0VnaUREK0RBWmZVaEIxNHZDZ09XbGNDdXlUbWpYTHdsc3FXbDJiS21PcVFpbUhqbjhQVE9uQVBIZkd4TnpqMnpIZ0U3WDg2QmpxTjBJVkxKdnJ6aUhVdTg0YlZoTzl2eGRuNzU5V2RsOFBHd2dnSEdVc1BIYlE5c2RwR1lmYyt4alhDc2R5cXBxM1ZwQ1kyeE16MjNtbWZXNFdKcTQ1ZG9Bd2pzYllLcEdxRC9lRzV6eWh1S2RVV2RDZ0tSaHU4MjljeGZlcFVyakpuS21qcmlBYXZDQ0FkS0pNMlZGUW9nYjdRaDI1eUlBNHhWMTllNkhwcDV4WC9XT1FsY0hZRXcxM1RqWnRsTk45T01GMUJONlNCc2I4cFFLbzdrOVcyRE8rblJpZGlxTWY4UTVHdEFsNFh1bHgrMFkyU3ZnamtiOXBsM05qamJmc0ZLNmx0VFpwZDFHdExJR2FRQ0Qza3BJcmk1Y3VtckpiVXV5a1NFdUFPQVhrUXFyamEvZ0k0QVp5djhTajcxUHhHeThMNnJtTEd4UTZaalRpaFFjTnVRSlBNUU9RdEdOMXZHRkorY0pHeC96cXRJenRrMVNraDRBUERuMitZZnc4RjdheG9sUjFBcXRnVjJkMHJFYkgrcXk1Q09Cb1VCZDEzcW11emowNkRUZDZJZWg3Mk1aejB0SnlNcFlrS204RnZJVGtjNnJoUWtId2tjRFpXZzFsN3RFVTB5cStyMTZBZk84Wkd2eUhxa1A1UE85Uk4wb0JuVmhEaXkvdHFPZjhaR2ozZmNZRm9ReHJTTE95TUNlWHVoeko4cTNxQndGV3MxdXlyK0hQY3lTZ0xNNldwTkxXUm9abTdQVXRpcng3eEx2bVRVNlZ6Yk5mRE9aS0w0SXVyRTB0c0ZKTThxSTFCb2pPTXc0SWxCRDFMZ0lDQWdJQ0FnSUR6L0QzQTc3ZnNZZSszdFp2dCt4K3ZzKzQ2L2g5Tnp2Mi9ieWZzKzREL2NQcTZmMi9TWi90K3JqdnQ5blBuK0h2VC93ZmJhYjl2Y2QvRDdLZjkvenM3OXYwMC8zaDlwNWZaOXd0djJmVTAvd2ZUUVgyL1dVL3Q5bVRoL2I3WDM3ZnJxZjh6c1A5dCt0bC9aOW5sKzM2TkQvYjlpVit6N0Z6ZnErbGcvYjlEMSszNmNQOHIxekR4d1MveXdyVzJpUktHOWt4K3N5MXFldnhUOVV3R2lZc0FuWlgxSzROQmQyU3VWSWNDclBWelY0VllJbEhBSUowYWdnckozNTUrbTB4UFZsRDZFaUpDVVhDcFUzSWZrek85bVhPc2hGUXhrcGxHRnNQRCtwZCt5ZUhCbWRtNWpZRlMzTXVkdE5CQmx4c1VNZzhHclRBRTYyaElHS3UzY25UYVZCTC9lOG12WURvd0IxQU9tS0hxZTc1ZGxHN3VZU2psWUF0eVpBR3YxRWNLNXByaU1iNG0rQysrY3lBQitDMjZpVHJqVjZCZk5CTTlzY2hOdnNrTG12N0Zyb0gxMW53dmUrU1JtRWpkcVFyYWlHak5JbE9CRXpmZU1WK1JETCs4b0dwdVA4UGxMekk0ZVlwRzQ1b25TTXV2ZzFWSzVxTnhEUmFCS1JLSnlkMlBMaVphSTFqN0FTZ3B3SGxlVXh1RjNBZVFDZVBYNWtoSHJPQkxUeThIYnhUaDFZU2VRQ1I4Y2haaFdwTHRUYURVM29MS0tNbFhwbFpiSHMvRjIxZEJucHJoMFN0ZVBIMFZIVyt5Q2ViVWJEMXFJMmgwQTY0UkZhT0hzWXZpS1ZDK1JVSjZZLzlhcEhFWEwzbllNTm95OVVPWXZQanFzTnNyaCtPSGVBVGNvSFBXRzNIWE1ySnk5aUhaSSt0eURNd0tySHUxZEZHSnptM0dJVkIxZHlZZHZEOGVUZVJlU0x1OE9YMEFNaitmaUgyNWptRjc1TFRMdjFZNlNGdlIwNW0zTitpbGhESUxsblRNZ1FJQlFUNGd3Q2VDOXU4TG83SWU0NGlSazk3UHJ3S1lSMHBxRHBmakxjY3pNSkdLQzhwY3VjcTVFc1ljVG5laTNjc0V2R2ZYbUN1eElEWkJyUWVMMkN1M3ZsRVRCczBxMXkyT2FxeWp4dzJyOTVJTEpEeTFIN3JEQmlsSFQxNjh6TVNodHZobjNBdlpkK0dvSGpRL2wzbnBSUkRkekJ1VzJ3TlVlaW4rT1NHZk5nYVJyYW0xQzhzSS9VbUVEcmNIRkVTaVhpaCtIeXRSbWJDOXlNR0NKdW1oaGlwY0Z2TU5hTnFQMWFGWnEvTmwxSmMvdW92d25obHo4RmcxckNCVjg3eGpZVkQxOXlPb3NrRmNhOFBBRlQyYnpFNEJLV0I0Qmp2YkFzVnRkaDJUeE5tT2gyUGRwdXlDOElIa3RWWm9rVmt0OFVWdkQwaTN1Sjd0bmhGMW9ibFJOSXdpWXVWZFlDU1pSTmg1V1lKdTNUZTlzQVl0dnNKYktsVE9EMGlvOEZybG9NSHdEcVZMZ29KeWppOU96N2JXSkFXM05VZGhlL1NhaGZlL1Vrb1JSc0JRKy9PMkNNYzVSTHpGYkVTd1EvbXNrZkFNaDk2S000OVRKdVhycnE5TS95aWZvT3FsOWZ3ZFVZYWwyV0RVTjBYVWdzanBoRU91OWFmalJQMnU4UEx3aXcvd0JjQzJkVU5rNENPRmVWZlBJaGlSRHhmNEE1Ump2dkpaQ2dhaEFmTXFxVzZZaGt2aDR3eEw5SCtEcTdSV2tzMmtYRW5DQVVpTWRCK3Z4aVBzVDd1U1Eyc05vRmlzU3g4aTRaRXJZaHZlaXI1M3NZMTVLRW1EQklPeGh4NkcrQnBKOGNwMlVLTjV3enY3cGpWb0ZVUUxLU3RsdDAybUVHMGYvdFgwbEJSTU9YNDFJZkpsaWVtL0RKVXVVdk1hY05aL3QwYmJKUnhhS3pCd1Zja0tGclhYelhOUFJhaGVsMWFmWEZHaHhCaFNoT2RJOGFXWVN2dERyZVdYbVNnTHdrT1R2SkppdmNrWXMrem05T3BqNCt3YXc3WC9CbzJ3V084Y2t1Y2h3U0VmQ2dpMGtnbDdOVFZlWlR3Tlo5N0hrRWo1T1lLcnBEU3NXaDNxMXZOb0FnTDVGYkdFbUlhei9TV1FMWW5hdjl0T1VJQmlITHVhczhVREduTVdNQ24yYkRCVzRzOFMzYzVOaHRNaXdyMnNkVEVvTjVzUnIvM3hEOTNFRTVoclFxSHJMRjR1WjFTNTVWYTljQW1xbjFQWW1VN2tBek80MndnUGd1WjNRSG5QOExxVWdyUDIrK0YrMG82Y24xZ000S3JBMXovZ2VkTmxNSGZiQnpMd2w1WVhYc0ZVTENIYXVEc1FyNFBMWjRRUVJ2b2ljclh5aEJSS2x2bzJ6Nkh5S01kUlNBM3AyVi9abFBFUkxpRVVDeGdqR1hyNC9PODJ4by9MZURLS2NZZGZMdXcwWGFHWDJSS01HQk5Yam9UYVI5K1hReEtpSzlLQWNVUmRVUXk5UjFWaXJaTGNDR0VRVXgydkhKUFNVWEhEMDdFQTBua0dTUE1EVDNHNmJPTjV6cEY5T2lDc2tUUDJGbml3ekljaFVUanRtbW1zUFdSV3JEemhxOHRYb0wzTWJIU2w0TUxTVm93YnVESnRDNnd3Vzcyb1hMQVNkUDJ6L053VTZxU2JaSnJYUDJ6a1IxaE1QNk80RW5qaVdWRUJ5aFpEb3VyQlMwemczNS85WEJsTkh6d09EV3dtb09ocXNlNGcwQmtORE5rQkdQZmhGSGl0WXlMZFI0MWQvMDR1Tnlsd0xnU2p1blB1RFJPTDBxSVlxaUNlNXJyMjBNd3pVbGVqNkhrK1FVVXlRSXJFbmNhMi9nM3hjRU9Ed0RQT2FjaEd2VEtERGdyNDFFODJ5RHdRQkk5aElCV25hVkVKQzNUS0ZwOXBOd1d5aUhxOEgxSm50OWNibGtqMEFwSXRXbUZkSkpHYXFMMDVSb2hUcTdPT1Bka1kwZ094bU81cDRxWTA4TmhxTVFIMmRMbVhTQ2h3VlpLRUMrcW5GVEJ0U0p3L1N3Y2V0K3Fvam5BS1BGRnJ6L09ZeVYyRis3YjhOOXlzOHdQWGZ6Z3g5aGlZZ0sxc05UZnlmcVp2YTcvV3FDajdIdWRqM3RUK2pOamlJQ0xTR0ZKMnJkN3Jabk1HcU9aNE9vaVdzN3p5RW1TNVgrSS9BMEdreThiZXhmNCtyTEwzZmNMdUtZOXdGdDNwc1dGQWsyUjhYZjc5RlFBZ2dZT2RSRWhFR3pIWXRiNXh0Q05DSzB6YW1VMlhXNVNIMnRJem1RemR6VDBybm15ek5sdk4yTGlHTkZzbGNuYUxHOXpWQjE5L09WdGFqY01VWlU4MWJZTitlcTloeDFoVTV2SzQ4ZWdzbUZNL01jUzJZSnR5K1lrV2F4Ymk4dWVsOTJ4c1pjL1NlbTdHaG1jdHdVT3VZcVpaVGFDT25WUVJoU3lGakVBNnNDRi9BVitkZGFBK2E2YVdnZDB1MEF0TE5kdFdYdlBPSmROa1Uva3hwNHJGMGp4TzYwcnQvUTBsaDYyc283TDMwS3JBeXM2RnYzUnF2SlFObFhaeHhYOHpaQUVnODg2RzFnbXF5cTg5YStveWNtMFZFczc2eHFENDMraEhiaVQxM3ZnWitob01pTVV3b0M5MDZFWTR5YlBhdkhabDhwa3p1L0t5VndSOWk2NXhHTGY1RXQ1TnVTbHMzektRdUd6MHBscnk2OFZSbWxhRE81MVUzL3FQNkUzbnhISjFvTERvZnhMczVYcGhCR3N5ZTgrVXFpRFpETVZZSmdBaFArNU0xVTA4QmdWZTdJWE9lNEI3MjZoWFBrR0FnaEQ2dFRaWkZtZHlMKzBMelpFRVpLNmVGQXkyeHF5cExIOGcvMmZsajFYZ0k5ZlVsblU2Tnc3eTByaHpMYTFGTzMyM1NINytJOG9PeVhxOXV6amVSeDByZ0h6Z3p4bGhSQzAzcE9hU1M3Zy9WWGphUHZnM0cvUzlRam42QTVyZmd5TnpZY3NUcGFqd2FoZlJXR0RqMDAwTTU3andyZjRNYnpuZnFMNENSeDdOcWVwalQ2d0trSUVRM2N3Z3ZPZ0VtRkJjZnMrQ0RxZEdYanZGRlJnemYvRnBXa1k4RDU3aUZxTWR4QitNUmEvVGtJZTRrclRmNm9sdEtyNkxtMzgvK0syV3hmQ0xNLzZqQUZjZWUxUEI0WHF0dGE5Rm9ZVDlScDBZRnhESnVwM041VU9sVnF3Tm13cHVFRDhERHVmRzU1R3haa2lHUms5Q2VPbVFXUE1Qc0RKemhsQ202MTNEVTQ5UndqRUp3YW5Na0N0VlBYTVlGdG1IMzdMR2QzQmYwRW1XSStXY2tvSmZqNWFsQ0VOK0xMYTRJQlN5U2h1b1M0MTl4Ykc3UVRYSml2TjhpelFqTmJPaXZ5NitjSzVOSzFqUEJvWVBUQmwyb2xIMVJKekJwQTc3MG5yUEdNY1RpRmMwTGRYcDlXcll4djlncitabGJpVElSa05JakY0aThrZ081Y0J6ZEdqaFRqaHdCMmVBUVNKc1Z6L0p6NG4wZlFIc0xWaGZyNUh4ZkpXalArMHVxQ3BGU3JScVByeFRaenBDSGN3SzdndVFENnlWWFZpQlpyV0VmMVpHdTJ4eDlRaUo3NlNFbnltZUNqU2VkV0xWWm8zQ2Zzb09uQmhPL1NGeUovVzVFZG1UMnhVd1RtZkRFSmNSNFdOREhTTHRaeHRJcng1U0ZqbEFZQnZscU56OU54Uzk0NkhYbE9UcVI2Q1pSZ2ttczlkcTNDRFQ5alA1NFBrRW9XeERsd0ZDbDlHaU13WElWWXEzR08rajNxRHFCLzUxb3NaaGVLcDZOMmFUNnRUdHVxWGRkT3ptR2gzRmdta01SdEx3Q2FSVmFDYWlrVUlxVzBTcDBlbnNDcmYwbEhMa3lscU5hcnV4b1p0QjJ1bzV5TkxPa1lvQklBR1lUdERrK3lqL2g4ZW9nQVo4SzUvdXdXczc4M2grL2hDeUdHajVIUkxQNmorVDFkOTVuU2NyZERnQk5jdStrenBZRzhGMnJBWHFzSFkycVpIY05MMEtDcU55Z0IvQ3RjV0ozL0VLaWFic3FQOStzZURyRUVJU1NOSVBidS9NZk42VFFuS08xbFpkZEZDbXhQZXgxVW5mMGpGd1huZXJsRzhUUllTZ21FWHR0LzdNbUVjY2ZuNmtZNkdKaWtMTzRsSzBqRWY2UWIwaUd6SkVaZEF6YWZETG5NeXB0dkhBMG9rUlhyRmk3WStkU25KU1N4V29RZzRYWHZ0eVcvTUFvUTUvZjQyZWh3dGtZQmVlOGtUdnh0R3lOckFMR3laK3ZMREYzRm95VzhFMnhldWRrb3ZXSld6WldMck9KVzM5TStiWW9GTHlQamVTSzJNbUwzaXZmekJodEVSdHFsNVdXMnJYWWhOQlNWS1dxZVBVdThhazZaYkdKdmxqNmVHeHBseUpDVXRtOG1LTzJmZG9KZnMyUzdDbHhQVGQzL28yaHhEak8vbmFZTWN6L3JZeDJQMk9DK0txWURUNGw4MTg2c0ZxWWdoSDNxZFltaVpzU0V6aGliOXcvSDJjSWsyUHJEY21OdUJxV0xiUVgzem56a2ZHdXk4cXg2TkcyU3BkdUxMdGdkeUc1WXI2NUZLZ3lINE5weDVhejJ6MkN4RWp1ZVlndDQ0UStOTDBnK0s2Z2Vkc0ppYUZWYWRYd2RST0JvRHlwc0dPRFNIaHhxc2R2WVVnL3BDcWlPMm12RnMzUks4azlmRHpiRWgvZThBd0dqTm5RTG53ZlhZZFRQRWVNZDU2ZXZzZGREb3hkR0YwUExKNXNBR2R0QlBSQVFBVFVjNlZPV0NBTENHa0JQYzlFTnlTbGxVbmNJMCszZjhzK05hdlJSVTRtOUpUbVVKQlF3bnBaaDZsa2w2TVVEL2k1aFdYWHBndUxBaXNzUmUxM2ltSzJPZkx5Rmh6WGgyKzFjb1Ezd3BMWnRzaGh1dGpEd2cvS1JNNkNnUDVsUkxQcUpIT3ZSOGFnRGJFcU0vNmRFVTU2cVk1V2h5ZXNwMUdWYnZOTVlmM25TOFUzSGg5T2o5THNqNDhKNmpMRnk0QXAveXhncXkwSHhtL2VHMXNFRllFRk5nakM2b0JWbXJKU0ZCSjBVM1dOand5UmdTUEx4R3V4enZPeG1rditiV2lZK0xGb3JRQkF2cUg3ZFFsVlFiQzQyM0Y2eUhzSDJ5VmpoRFdNMWxjUEY0VkFuanJKd0d1QWhHZGh5d2JXN1dHQTVoWm9zZG4wMjVzV3VtbmIrQlBMbE5mNk53OHFnbGNaYVlUeTd2NWlUejlNVDl5RUNoVDAwYlFiSkpHVDg5emp0cG1odU1MT2dzUU1QalVURkJSdTgrWk5QVENGd05IdVROc2VVdFhYWHhWZmc1V3VqL3pEMFpzYzJJb2xuTS9VaGJuUm1vaHRaZnJjUVJNUkt1MmJHckFFTWJYcmx4SWppMk16YktncGxvMUJjeTB3ZE1qZkY1UFNRTGgwQjVlb1FPYzk4dUZoWWJXcm9vM3Vkd0RONGt0WkoxakJDSW4vMW1GSm1tdFhyNEtFaG9SQktJUk9hdHgxOExmVEppaFBzWHRzSTd2aEZqOWFMYW1PSzByb2ZXbXlrYmM3ME5ESTBjcFpFeUlVMENxT2pnQ1JTNmp0eGNrcWlCVkxzTEU5b3RlYzltcE5EZTJlL0R0Y2hrVzdyWXZFangybUVxWXJ3OXN1Y2lWdmUrbStGWVZxaTBJZEdZa3k4VVpnWHVXUXAyd2ExNldjeW1IVUxjTXRaSG9nSnM4YzRyZFN2TzhNajJIZHNuQ2JvcG0rSCtyN3hoMnVGakNiVWtENXd0L2RlZWQyaG5NZlQ0ZHo3NXRXS3RSUUMwSzJxWlBMUFhCSU5SOWlLdVRTbGZCbEJZaE85bGFTK0E4S1hKOGNIRFhGKzlzem1ER0ROalY2VllLRUpEalJ3b0xhTFlGM1Bsd1VXRUVYNmtBVEg4aHBEZ3RLcVR5VFpmQ2RmcnFOYjVoc2lLLzBuMkxJMVN1MncyTGhkTG5zcVpJcTVYZUxGTzhXMTMxUnkyR0RPWFlUcnhZS2UrU1hDSzBPRzVsbTNDUEIrcWhoeDhmbFgweXl4cDQ5TDU5Tm12SXU1enJEZ2ZNek1VcUliUEpiZjQrd2ZHOTRZcGpYTi8wK1AwdEErMWlDQ042Z2xTSWJleWRrTnhZc0pvMFpxWjFuSVFSYjNIZURvU204S21FZGNkemt2cWdyTnVVUzlhb000TWliVk9Eek9KVmJsdUZ4TThRS1RiSDY4Y1hMR1NXM1ZpOUxrTjZXcW1BaWsvSy80S1M5bC8yVHpsbmJMa3hodWtUcUZXRDM2Wm4wQ0dyRHJNSzlidTc5M1VreUk0dHhKWVZBUVM3S1pmSWIwZ3dnbzYwWWtQZ0RyV0ZCWktPdW44U1VUMDJ2RmtGcVdlSTRjMW81M0RDenBWemcrS1BUNUhnMEZ4T1diZGVQNmc4Vll2K0VSNkF4L1JreG4zblBnaEFkUGtHeExDTUx6aytGdjlLc1dFZlhPb3djcFZKUHIrVUd4dHFNb2hGaXpEMmNac3FpYkZjTVdyQWp2WjE0bjNsOEUzQk5ZKzN2UVovWStZem5kRFVNckpxOTJhOWRWMkZLb2J5UEl6Yk1VUDZBR25zYVYwWlRxMTVNUmd5NVFtSHhjSmIwQ0R2RFg4OU1mcFBpMVFDK3RBRnRmdFVZdkVKd21TM29MYWY0dnVoVVYrai9SQm9aZnF4QU9KYWpGRWlSdGk1dW5pS0NpcUJoRHI4QktPd2hTVWwvd3N1S2ZZaVdQdkY5UTNCRkIxY1Y3cTI2dVlPWVcxUjhta3lNb0dMUGY4MUE2RlNJR0VTU3QrbTdTQVRsemlwNndGd0c0RzgydTFmUkxRNnBIcjFISnFKTkpKbFN3ZGxKeHNrckwvL1VZcmVwK0hnWThTYXVocGNBZlJQeFNmZkRLM2JTQjlaaXJubDYwUFY5VGZyMVFDRzA5TnFqWjJKR0gxckt5c2lEVE1oc2Z2S0VCRGRtaWIwOHJEekdoQktIR1NEQnI1NFlMM2cvQkdXcUVBRlo5UGd2TTJQUzdsbmJDcVdYQnh3blo4S1ZaN3lyT05lMUZPeWQ2R0h4ekRJMGc3SnlKcjdCMlN3dXVDeXh6dkJSMWU5aENGTm00dGU3bWY1WmFlZWJmNzFma0VpOUtnK2NkU1JaaHk0eWhsRFd6dGcycG1mMW02b1JEL3pKNytobndxU2prOXlUQitZTDJDbDBFNjRIUTRVZ1c4YkNiNzBJNWpWVi9Denk3SHNRUndFOHJSNGhlNisxZnIyNE9DdFhXMkFXNnJKZnE0NGpEVnFlL2x6cjdzZFFGNENLaVRuT1lvMjd2RGpFUXNWUUs3bGtocUM2b2s2cFd1TzlYWEV5VXZ2NWFLa1ZLME9tTTkzMEhyUExKWWdVbnJQZkFZMnJWRkRkeFZDaDcwa3JYcW1SeTFYLzMycStuN2dZb1VvMVlRVGtHSlNPZ1pXbXFjZllqTE42dXhwYVI3VU9zQ3dkRkVmVnZNNzZ1aG9DS0VPL3dBMUE3YjJZZlFTTkJWYkpFeWltSDd3V3NySkVES0FDZ3N4ci9mTHNMVWJkM1BrQmZ1TGIxMFBPUDlnR1QxWUtNR2ZjdDFJbFR4a0NLUDR1RzBwamxyTTNsUDlxcjE1UUR5THlnTXlVOFBlY1lmTmExVU5OZXp0REduSUZMRFJremZLbVlramFkZzRpbklPUTRSdThCYWJRZTVPQzQvVUtOcGlheEhsSW82S29FeFRDcEtyNkUrZEJtczdlZ3dWNmErQ3lCanFvMmFuMlRyekJBSExMMUtjc05HMzRHWDB3OFQ5c014RFhNZUFnTkdsbG4zOXByYUhlNllvVWhLVFArb0hZRXEwdmV3WWZRZVhLdmRlMFBHd0xNa3RFbkVab2lxcmg0SVF2VDRxRnNaL0RicTVub1lNeUNSeDMwdm1kbm40andWRmplbklOY21yNFY3U0Jtb3ZNZm5haGJSZU1qekUyUFMrd2lIa1BGUGhQdjg4ODJkNlBwUWkvZ2gzK3Fid1c3am10YTlrYVo0TXB6eEUweDFMdnNvdDlTRjl6VTIwSCtySGpIcDljdEcrZ2MxaFdwWFloSDNGWGthUmhRdXpxV201RWQ5YitodmtXUFBUeFh3YjF5U1dlSGptZytqRytSRzhTNzVTM0h0SGJSczFwMmRONlF4Zy9qU3B3RUdvb2Qwd3hKREFONy9adkxUSm4rdXRmUGV1RzNza29YVFFCd1R0ODhJWnpDVTVTMkZnMTMxMmJCbUt5Ui9uMkhLK2QrREljdzlCMjQxcmh0TG1wNE10aWhCcVhSQ010VWtNV1hiaFg5bUxvcUhSY1dNN1ZrRkthQ2VrRVEvYWZJcFFtK0dxQ3hSeUwrQVBENUZMWUxEWjF1bkN2bzhnMlYzbHBwRWdNdjVza2N3VVJRbCtXcXpteUpWV0d5d29GVFEyUzkwWjMxd0pSK2orR29uU3NseTV4Q2FSTk1saU9VcDJPU0RXaXpyd1pUVXpRNE4zWjVhTmFsVkdkQi90Y0NjZi9mbytabkVZZzlQcFFRbm1nUlRpZEtEbVZOU3cxSGJwOWx4MmNaY01Jako3b0srRk8vS1p0OXZpRW1oTHdEeGtNR1d4a05xOS93OEhadm1OblpNZS9WSm9KWWFaM3I1TjJUdDY2Z1g4QXJWNXhxTzdyYTBINFhrQWYzZ2ptbHdKbzUxajZoM1BIZVl4ZTBiNUt5K2hvYWpCSVBYaFdjelhnc2tBZmtGQ0NIVi8yYWJ1OE1BSUdrdmFnMU9kd3hVazgzUTVGd2FLZVlka0ljdUJZSTNtRDZoWXhsaGNFYUJDcXBkL2FCdDFzNnlhQ3plckV3dVVvc2FaR2Q2ekdvZ0dseW9XWDZqK0dUd2xTK2E2alFwanZvNFZyeEJmTVpRL2RMdzhXSmgyRjE2Q3J5YWMwK3RBdGNZNEorTVlPY3o0ME51emVOeVhDZUVuSC9aaUdlTzE1NVk5V3RrSExsZHUzamc0TmpkclRoaHpXZUJMRWdZbVJTNFlSanhjZ0EvRVZtUUc4ZFRvSmhDaldjTExQTEdJcTZHN2Q5M055azg4VE5NV1BhSmlpK2NaNHVYamVPVmUzRXJQMEJvL3N5bmZ2UnZkaXFNNEhBVGxrSTFGZWpXVkNNeVJQSm9TaUp0Rjk1QzhGQWR2UXNWazB1U3R5MFNvSU5RRHVtYkxoTUFsZTVNbHdQaVIxNkdCOXJXelk5Y01lWlNkT0VZdHNQVzJFa3VoVkxqU2g1ZmRTajAveGNSVTdjTEw4cmRyeEpZZHYvWTEwVWYxYWZxNXBHUkQyb2I3TSt2ZmtHU2JweitVVEp6ZGp6OUNLTktYY3hHaTFjOHFneEVXTXQyY0dNcVVtUnZQYUxiK3NlTlVXMVpzalFxRHFocXlBMW9QRFBmcWQ5SDVQQkZPdnR5Y0dHckVsUkxQUFp0VGRDYWZpSHc0VXlnZlFpS21HcTJTem8vNnhRejFvVDkvb0NRWFZzenVsWDd5SE92bWtLd251RG5WcVExV2dEeFV4Q2puRHJkMnVSdUpmVTc3dlJXQTQwa24rWXRPOWhhb3BWKzc5TDNoV09MbUszYmJrTmRwZHQxTFhNQkxYczRFWG4wSXdwNVNGZWNtRnAwWFhRa2lzSUFPKzZEZzB1VFRXbDFySE1EL2NFSW81WEsxdlI0amRRNExrc1lOeFhVaDd4Z21wQVpJYXhHODNqUkFSbHRsa3VhK1ZjdStaQ3Z1Q3NTZ2g4YUZQSDB4RFJaTFp3b0UxbmJSVFFBbEZvN01mdTJZV2V5d1hEd3E2dlpBZno3bXZqVmdQNGdhVlRjU3Z0Y0xQZFRHWFUzQkJ5SS9Ibi9nVFpUKzN3M0ZPVmw5WWtzamVXYmlCSmp4QncrS1hMaXBjNllwbC9GbGl5KzlML0hKVUpZOHRrNlJqZjRhaE80b3BPMktsWFNBd3hSWTNLTGloRnQ4NFp4Wml2RVlOT2hHTzI0UTJnR1ZPeWl1alNCTE9GM05hQ2xMYVZvOGQ0aUVGVjh4WE5PZ3YxYlFxS2hFcjZZdmdpRG1WcUlkUU96QVlCSTloZ0VKM3czV0RrNnBmVXlKTDJqSEt0NHhaMHBTbGFxeDFteVN5OWI5Q2hydFZuMlQ1U3pXa3Z5MXh3YmErTjV2Y3llK1ZSWG42bk14dUVYd2tOMk9kcll3QWtna0RiNEFhdHZMMUQrOU1yQWFWNUsyeVd4ek9xZ0Yza0tpandBbms1M1hrWGNuT3pzMW1zZndvemF6MzJteHhlRkwrOGlxL1dkSzV6ZGE5RTZxR0xBL0ZadnJ6ZzUwcUxYRmU5bW9wRys4N3J4ZnpLOEMzMktqbkg1OG5acUxObGUxMThJTHM3bGpKU3JYZGZVK2RHN1hnWlE3YUVoRm5kZmJ0K1VjeGpneXFKcGpENzM2KzY2T1pTOU5Rd1I1VDJqdi9KNDVocnZWRGl0YzNnWXJhVldaeXZzeDV1NHR4aHVUZzFiU1oyN21QYlppakNUSWhIWGp5T3p0NFZRc1hXVzNrSEdPb09hajI0cWZjTmRGdE03VVNGeUNUNGdFcjE2UG5DWTdhZ290cGdvWXdIVXN5VDFWWXA2KzJma25kRmMxdlg5Q2d1TU1zNzVzN2JneUoxbkcxRFZ3Tk1sNk1DZC93NFdxRVM1czRTelBrb1pXN2g4RVNMeDEwZWF1TG1zMGJYTURYZFZ4SEhZLzZ5MWxzcDVJVEZGTnBuRlV2OGJLVVBUNGhtclhlaWdaQVRmc1YyL0kvUVd5OTFudkZvKzdHRk9Oc2c5ZVd2eHoxNlUvRG1lNjJ1MEhudURuRWpwTjNhbDJMNlpuclV0VElsRkIxRUoyV0tIcmFXQUdLZTYrb2VJa0VWeDE4NWhBZHV1VnNya053MUY3TXEzdmtSVTB0VXE1SjZ6MUdaQ2RVaHNSUkNBbEM3UEc3UHU0K0prUnNCZDhLTDJKK1pDc0FqTGN2eVVnTjJiS3dYeUpFOE1BYmN6WVpKVC9mOEpTRGFHM3R4YThualAvU25aRWxNNFptd3dGSkhneEhaMkszSHo2R2RCeEIxYzl1QkczOGJwdFRHblBjRnN4L09kdDdIU01QTVhOL01OWG5PRStaNnhzdTg0QjM1ZVBiOWhYc3pZMjhvZ3puVmJoL296Q2tUWDIzeHJCQitob0wrektPVGZrV1BoMG1qbUhKbTF2R3JyZmFoaTQveGk0Q2JzL0NTSEdTYlh4ZTM3NVlKZmFZOUpOS2NCSURPRmhxWjdzR2hNS2taR3dIRXk5UUZuT0dpVjU0c2V4U3NRUyttTWVFWWZEWmtIL1l0eG9mTzFub3p2T0h0c2ZvOEdDaTdLb200TDNmYTBwTjJGTzl6dlRYVDMyakZCZDdNWTJkK2l1dWVGdldFMTg0bEJFSURSOVd4RnNxbVpqc1hNV3JEQ0NZcmtwUVluQXprRzEyZWdBV3UwdGh0czRkZVA3MCtJQjEyQ1ZkYjIweUx3bkppbHY4bUhwcVVBa2pGUWsxdnc0QlFJS2QyRkdKUHlsVXMxM21KK2p5aFZ5LzJDVERGUS9ieHBHelFTektDTGhmclpUVUpPRDd6dnhBaklHZnZqMmpvRFB0ZTFyVkVTZ2dkVmlFK2l3NDVCT0NTMDVuYnkyell1VTFvZ1pwdHFZbXlMaVgzVUpKR0NkNFdtcFJoNzRWNSt3ekF3Q3FsTHZhZ2x6T1ZXSXh3Z3FENmFlNk4xMnpzQ0JyMkVHckltVUtJbmJCdUhueEFlcklIcTRLS2F0M080UkZWN1ZFVFZTQjhzQm9qNXBtN3FPQ1VQaVJueUJUeHNSM1BpWXV6OXE0bVFkeWUvTEVrU0VQNC96blVrR2kyNnlNNzdIdW5oSk1OQmpwdlRjbUMwcXN2bVJzejRmQU5oMU9qYldNQ1l3Yzh5US9DWDJIZDNtSFRPcTBBam1UN1JkRHo2TURXVDJ3c0gybGRuTEl4emxTZU04ODdVZ3VJL2ZVTHg5TUl3dEkvWmpvUmZLSVJLbHJGaG1wOU5PUnQ4SXowYVJBYmxhNTRyaVNzTGx1TnkzcTc4dFFvSDYvWjlFR0lOdExZQm1KYUl2M0Viak1waG1ETld6RjRLUHFCNlFqOCtkcHVTTXVOd0VabnVwdFU3RHR2dkhRaVRuY0lzMyt2cUFIbjljY3BpWGRjTnVjRGc3dktLS3pPSUFlM0FHVFhVbS8wMVluTVhXZHNVMzZaYno4eU9TOXJMNEhEK0FzNk5BWXZHYUN2WnJ2akZPczFXZzRSVWsvMEFjWjhMWlV0TXN1cHI2djdWbk9icURmOERMbG1QdS90SDYxTlpKWXlVT2hrRlpycmNRSm5sOU5LL09UeDdmZkZvRFhSeE5FakVYSXlVUXYxcUtRSXRMUm1RK0VvTjRacHhUb1pFTmV0ZS9NU1RYOENMU3JRQ1JUQ2xPakVNMzF6NUw2V2RGa0tLV3lMeVplWHhKOUVySnRjZlQwSHNIZ3BpTnRoRFNySjB2dU9hZEJGd2xjWTNyS0VYOUk1ZHlkT3g4VFNxc0hRQ1dPYitjZVFzMlczMDUwQnNDbFBTU3R1Q2hTaXVDVXM0emZkaHgvMnRVWWZUVUtSNnlUTHNrcmgxaFYvQ1RxaVBraVh1aW5KS0MwTE1tWTlxS01KaXo1TjBPSHNVZGdkVXNuekhwWXFUaVVwd09rQTJNb3Eza1RnYjNDQnhhSGVJNXVQYm1ZVzVDTkx4VExxckFHOW5qaEkwTTh3ZTlZZ3VXQUFUeDBhSFBMb3BVaHdMczcxZHVxYzl4MmdpMUJVMzBzOHQ3NG9aSjFSNHNlOStLRUNhWllBR1ZkZXBUNTlVSGRwREoyaHNLVkNQZEFNYjRCTEJFRFlXakVwT0k3QWUwWEoydDZ3TGh0aGN0MWUrSG5GSHlQSjZIMVY5VTBkb09UL3BEQ1htajV4OFVZaExTMTVzWjM1YUFZZWtTdDAwK0hUMzdNL1Y2aFdpZ1A3M1EvVTVWbGZpYUhzQUxlSmtyQXJKbXdSMTlWNklVNWdtVzI4SmhDVzBPeEtBVnJ3Z2dIa09JSHVIWnRjcSt4NWM0VU1uNFBYQXhsL0h4WXowY3ZLTGtlRGZNeWQySUlVS1k1MkdEYTBLa1BxN1JwQ0NEQlJJbDVrdSs0azl0UEZCSER6UzdHQjFKUEVtMmZWcnpRejczd3hwRVAyY3BSQ0lyYjZOYVdsZUtzMkg5M2FyWTdNMTBUU1JwMVhXMDVtZU4xM3pLaHlNbzY0K0trWUdHNVN0OWxPbHkrcUJoQUtkK2s4VTM3TlVzZnRYcENDU2UyNVVyMFF3ZHk2TDBuNFZOMXI4M2FZU244dzFrSEszL0pDSDZFaWdGbjFlVjRuc0FVWDZoQkJJd3Myc0l1SjJMTE9tWkFjTUU4eVBvdFpqSWIyWXJRalhva1djMXgwSTVYVWRQMGNXVTdXUnN6WnZLQnVUVTF0Smc0alBhZHUxYkRIMTJhdHZwd3BnUTY1SUpHRkxwMHhLbW9sSVRzZGs0TUZ3dUZIRXJMNmN0SE5GaFBrcmZHMzhoakk4Tkd3YmQrV1NiLzBqMGp5VVczR2htKzJXdTVDWVFaN3BhSkI0Y3FoaVEwK1BoM3VncDcrbStZKzFjUTd4aGlrS2p3SlY4TGVDYXdYQ2p2RjZrYVYrNzlXQ21uWVZjSG5SZXlzU3VkQTM4RkdZWFpvT055NTZueTVzcUNxbktRN1VnbGFXUjAweUk2VmY4MTBhVW50RHhJbll3dU5RQUpNbXczd1hYeVprTWMybjdpR1lTUDZxc2Rzak1PdkpJa2RXZHlvUURoa294UWRLazZMWUp5clo3ZkNEQk12RFlVc1FjdjhOT0l1bWRNaEdFVlVHUmptb3ZqMG5FQWdjbHJaa3ZrMldIQ1g3OTErd2Zrc0h4NUJnYjlPYWgzMkk4ZnUxd1BmT3FWNU4xRkkvUU1KSWFhbWMrbHJla2RMelF5RUFEYW5jczBOZXFQc2pLMmx2aFhMdktlTzJLN2JQQzFlb3dxTW1mSmFNcTNoZWhmOG5TWjI4Vm1FbklQN1BFNldqRUhxWEYxaU01SnhFaThlc0VmVEdLQ3RmdjJ3SnhPNEdYT3k4WVJDTjFqcXg1dDkvRXNzV1gzZWpMS2tqU1JFZDg2c0xyR0RiSXlIM0Q5b2NzN2Q0eVB5c0lodXc2Y0xrWjFFd1VMdjhveWpJbHJCSFo2b2YwazlPMjdsKzlsMjR5aThwUFdwRzl0QTRQb2tYSWRuc1VnL1JqWDU3dncveFNHdXRET1dWUVQyY0M5VWp1SW5Sd3RKcjhhNGJhTG8xVDNTL28vaFdHcUVTOWxpbXVVWERjQ3JtU2FIL2EwZy8zM3FhMW5HdG1EUzExb2lsM2MxNUFQTU9pVkExeXY2S2hrQjhSU2hxZkRnMUhTUi9lRldWcVFMRldwMDhYNjlIQjRQUFlhQjI4bGFpMkJabU9sUUtrWVYrZVZsOUEzSVIvNWw2SUtmNHBvdVVudGxjd0FGQ1l0VHMwMzduVnIxeUh6R2E2N2Zaci9Qa0FmekMvY3k3VjVCaXpzbVhMVHQ5K0hTRWc4ZWk2aUNpVVVFKzdyWWg2b1hOL0ZyWERpS0FGK0pXNFFWN21NT0NSOUt3QVZYeHNBZ0ZJcERLdGRhV3l3VXFvQ3RJMWh5ZStiZWVhU0ZsNzVtbUxONDNaTWI3QWpvaW5DZ05GUkppRVZxRG54ZmREWUlCU2VXb2Fpek52d0JGQVRCeEhRV1MzUmNmTHhFdGpVd3FHNTNQL2R6KzJCbEVBaDhSVWhmYkNvakxtS1k1dFQ2ejV1blZrbUdjMWlNWUdnMHRRQk03Y00wai9Bcm4vQzh6M3NmaGFYazlOcTlvSVVvVUFRelJVTDdSQjJBek9Zb25CbWtDYTdhdFdab28zanc2cWhtdXNPZk1RTGx2eG9sbkttN2plMGNtOVoyNXlTV0oweGh1N3dzMjA3eElpNlVta014NEd0NVRmTkRhV21xUzErNXJyRlpCSmYvTjhydjY5anZDYmNwMTZXL1dVeTVRK2ZoelNSUnpiOTNIa1NiNkdCVmVCd0ZkU25jZy84SEVKTTQ4VXdFdDJMMWIrS1VQemxCb3hlL0RENThtY3crTkpMRFJNRGE1aWJqMjNQY2tMN0NyTVdOK0x0ZThaUTM3aE5LU1NPMGl5Yjl3eW8vdEpudkRCRjgzbWJnUFVkbXF3SUtLemg3WjE3QmdyTU90QjA3MHB0cjVsQm5nNlB3cE42WTZWcmN0OWxPV2wyRGlTZDBMT2lsRGgwTkdlYjRWZXIrQ24yeHU0WCt6aEs0VDRuMUlSVk92R2Jxa0tUZ3JaL1ZUWlFob0NMMUNINDJyUE03TWFVUmxRdG41L09HY0J4SHdFOXczQVUzOGRrYTZpc2tqMUlQeFFIMjR3Rkp4U0NyQ3BrY1JQaDlpVXlBREZJV2RIVWZwMjEzMjNsSjkvdnF0Mm5pMmEvVGhRU3VZU1dmZy9SMUgxc3JGeC8wcmtqS09zYnN1RlM0bFRRZ3cwODErNlc3eTlWMWpDcUx6dTIwcHAwS0hiQ2d4M2JZcFlCOTBYMWZDSG03cytrTEEwTk9SQlNTaWNQRk43QWJIcURISnBhTmtWSWtDTjUrYzlQZGhyWDF0VmxlQjFOUmI2ZC9hcTBnaGh1TnVwRlpSQ3ZjaUZyc1l3V3hVeVJLWVRIWDBtUnUrdXlHZmxtVXllYjBRbklreXJuRUNHbTlOVlAxdkxESHVmY1FtL2VPY29BRGJyMkg0R1JrNDRZbU4wRThSWjBsbGlDTk85dURaclNIbHRTM3RRU2FDV3JQc2hyczlsYnU2M0lKb09xT00xK05uTytEYXpqYVRNVkhhanpCdHg3eGdrVjMyMThBcjRkQXkzZUZhRk4wNVd5YU5mNEZTd0l6Y3VaRlhFd3NhVjg2ZmpVeDA3K2QvTThFZW5lKzFQa2pxMjQvdm1EVVVlOUpKTEhsMmoydVNEbjhITjdHYzZ5UWlEOERpVlo3RmNtSmw1RFFObk80RVlDVmpEM0F6bytCdXJpM3hxKy9RL0NPYkdGVG5YNjFrOFIvY09QeElVd2FkalFrVUFGY0pqSDNna1Njekg4eDV6OHdkak10bGdyYnJ1c0o4UXZhY3B3cVloQ1Vhb0RzNGtjakFScjI3RUR2THNjYzMzMzQ3L2E2SktMc2xKa05ueG9UUElqQTg1Y1V3Z0hXMW9DaWtlQmFiRHZyOGtNZnZjcEJKRXF5bWRtdFkvUzRkaXUvYkVjKzRBbHVCdFJlZGdxaXlTTU1JWVVwdVBuS3BFcTRmWkxLU0IrdkozWkRNN0p5ckZiMHVtTTBpUWpPRnhzOEpnY2VseWJFeENoMEh1NHIranBmZjZsSCsybkhWdmVHRFFSUUN5bjBwQS9uVWhSOHhuTXpBWGdKRE9VT3c5TnRCVldVb2JQSlFmOWNUcE9kRW5hL1ZOMHJtZDV5Yy9nZlBUZlFJTjlNNXBIQTF3RDlGcFBuUGJTb0hhVjZrOTRmdlNqMTUxaXdlVERpTE1lQXQySS9iNkMvZElXdkVUemVGNWIxaU41c01acFNxOVJxRVhaQ21wMXd1L3lNYzU2M0piak5yOWVBVDBuR0lvWEZERUZPT2lwajNaM3d0Ukg5UEd6dHBVWG9iempvbmFSWGc0RjQzT0hwWWxGQTdLU0NPbTJpYjNKdWxMK1lMeTEvOHZKYkNvSXZIY3NsNWtrZkFqa0lzNkJ3aUZUSXdpMlYwMU5TWFRCWDJRbyt3UDBKRkQ1cTFYQ0ZWYUwyaUFGUS9FWkpSS2RwcnhNb1M5cFJXeUFHeVVHQlJxOHhsTXZ5WFA0ZTRXZXFYVTFESDUzTld4NmNiYm1MelVxUDVpbVZSU20wc3VPRmRlZ2ZnQnVORWJWYXNkMUl5ZDJvVXBXOXNBWlprbWt1NTRhUmZxQkNRUTlDZ0RyVE5FYUJ2WDlUYUk0WTNsdW42NlJMQnpvWnZhVzJWRzNDdlRqZGVOSDlmUjYwc25BcWc0YnRZSHpJcy84QmlKaEdJa3JmV0ZTdHZOUHlKNEhFbVRFeWNlSUlrQXVaOWlsZkJvL1dleDVHRFFkL0FGTXY4VjdTcUt3MjdnQWNYTmhpRzZ0ejhOK0Y3TG1CS24rM3BuTThKdy93TUxJQ1FCaWJ0Uk1KZ3gybXFpTlRWY0FPK3FSa3kxTUllNmlmQzljR2NXOWhncGtsOGduMHVGNjNKU01iUEJ1ZS9QZEdoN0VzaHAyOC9XTHRPUVFjOTdUUHh3L3ZiL0pVZmdDQ3JtS3ZMOTc5RVlrR1hoSW03RVAwaWtxS0UrZkRITTUxLzNkc0t5NndKdTFTdU9ubVRQK3hTOERPUTliRmlTN1J0aytpSWowRDh2dE1lZmYvajRUY1k2VUNtOGFOa1pVRFNtZ2NNTW9ldWI1VWM4T1V2ZGd2eFp2RGRIb1Y3aGY0V3VjVEY2V1pEZGUxMnhkc3FaUjE2WXdYcUEvRFAydzJJdXhaVE8zMExDV3N0QlhDQjdCUnVjZ0krZmd3YkpoRFZnV2F2cUxHTDZSUno4S3kvUlVrb1cxYWc4alplVW9WcVhLSUp3ZWRFb2I5VlNHR3RSTTc0aHFTaHRKT3dyUkRabVNlU2cwTTdoVUh6VlhHWTduVHlkZmdKaFI4eHozNHNMaVFLczEwc3E0Y1RsQVA2T1JtR1N1ZlF1N2g2a2dUYnF4aDU5YnptdmZsYmY2NHpkR1JjR1FrcVdVdnFLZUd6anYyYXVXRlRZRFFJSFFaWFlPRTJFeE9QUExZemZ6SCtnMlNMV3JCL2paQlA4SEN0ZWRUU0xjeDBqdkJsWU4xS0cwS25ndTN3eTE5QnRtSU5HOG1zaUV1QU9kVk9LZmkxV2dqRkpPekhaYUQ3eFZPS3Q4R3Z1YjZHN2U1bzZOeExpRVczT2hUQzFRQytZVGhWUGE1bGQ1SjhRNEVuRzF4YlNhL3RpYzZlR2p2cjk1aFZxNzRCZ3R1TFgvT3daQnJVeURITVhlWWlhL2ZJUDVyYWpmQSsrVm5BL3ZaeHl0VHU1WmIwaEtXQlorcE9NZkYvT25rdGs1eHoyL3pwYXAza1QrN0g3Q1dnMmxsa1ByRTBtRnhEZXJpUzNZekF3SWJsOFVjaFBnYVdGWWIzaFpUOVBTdnoreDRrb0hpTllGdWNTbk8yTHJZemFSRTd5c1NzWC9aTzJIMHVhcXI1eVdHcEdCUVIwckNkdTlSMXBtejhsNy95Z1FwRGFNeUU0b1hkL0hRZmhQaGVkcHJMSzYvbjNydWVtVnFNbm5mdkxrWHppNStDN3hnd0lKRVVSWkdKSGVxbWkzVFQrMnBaYkhLRjFqRlQ4ZjNiREhra2J4aWJ2WkdZd2VYVzNTZGVweG1hV2k0NGNlbFRHMzdGZWpSbCt4MzFZYnluOTZKY3R0cUdlZmdRejlVeHdlR0JtcGJvMXhSVExlejIxYWtCM3BIYjBSQVpOTWpsOUJid3laUU1YNklyL1psWnNaOVBQWnFuUTNvZGJmRFU4V3l4OTJQR2tHMno2Uk92NjVOWXF5bll6d25MSCtYZ1RNVHlKNllGS0FWakphczVxZmtJMDhZRVJCZHZUdkFkVmJUVDBkT2Vtb0lJR0xobXMxdTFCVXd2amwySEZ3ZlVjdmNtT0R1S3J5VzVrM2l3eEV5Z0d2QVNoc0psYmRxcXpxaWZCVW5TNmJqNGlFbVQ4Q2ovL0d1Sms1N1FuSnpxazE1L0V2Z1d4Ymt3TmlpSXFiWEdQa2RaOGlIQVlpYTJDUGtheDNYNy9TamdSenFNOFpxN1ByT3BkeEpWMjVzRzdKRXUrNExSUGRrbE9TaU95OS9saDZSc21sb0FHQnFpM21HTHY0QTlWcXRMUXVnWlpNa09aNExNZWhIbmVpYm8xZXZRZVRsY2w4T2J3ZVBrQ3R0bU1ZNC8wb1ZQUTc4dW9SblgzYnJhN3JObFRaUDhKakM2bHAzZFg3VGpDQVdKU3pXdGhndGx4MDQxRVphcGtkL3hleXpLK2YrWk8vVFJaQkhSVXkwR2QwZ05lMVN2Y1paSkI4aUJIdFNjVlRVckFKaXlSSC9uNmFyQzZsN21BSWc5REc4V0l4NnhMQ01vdGsyeldiNW1PNFNNUFlsYU80Qjh3Q3RzNjdJRVlMUnQxRGNCYTJzL3p3NEVDcm8zM1htRXB0T0dmTU5QRFNEUnZzRW91TzBuQXowdXNya3ZUd090Tm1aSHRYZmg2WmtWM3NVK0VFdTBZYklEQmNha0owMDJWQkVYRFpXM3FLSWRDZGJaQllLRHR3Y1dPWEVzMHIxYURERUJtdHExM1NtUjJYdUxsRWJETFdhR2NOVTFjNjZtQU4zOVBZRm1mZFphbzN0N3JmZ2c0TGVGRi9OTEd5blkrbU1FMEtydmlKT1dVY2ZnaFNLMVR0VE5XS3kvTEVqd0hTYVE4bVYxdmozRjhtQ29aRVJFNXd6Z241bnhkTXNJOVdoMlJYUmhpaTNCRjNTZEQxdUFueUJLTXJabTBJS2RhbzlqSHdtanJHdmM2QXR0TStBZmRLaDAvdEFRT3plM2p3eVBUMVJtMDhoQmRCbFpvMnhKQjNUZWdlV1IwUFVUSTJpZ1BIRTVCNVpKNUVKeDM5VFR2dXV5b3ZrelhGY1htajJDNVRrcU9VRmVCdEFncXVFcS90WWdUblZaZmtFSkMyM21wb2hEdkV0RmM4M3lCYmRlRzd5MHI4MTVVMjc4bG5ReDAwQkxWc2pEak1kc3U3UGZsRjQxek9NczVnVkVoUUp0KzZDTTc4U1hQbTM5ckhoTVdQM2RxVVBmT1FtNnFKaEN0S2Z2SGpKZzZxeWlodE9adHhIeGhGdk1Wa3Y3WFhsVTR5aXAyMnBNRE42clBOZzJxNDhsa0dGV1ZlM3RmeXlFR0RkM0p1MmZwaWJySFVSSE9FZ3BzVFoyZGdxWFh5U1RacVZHdXZ1c04xWm5ZUlZpSXQ1OEVJa0RLREZER0JhZElHR3I2MGd2OFVKeVpVTThvVFBPU3grNitRYkM3ZHJMU054cjRKVlRFNjNmVzVqY3F2N2d3VjZISkk0dEd5QUdBb3kzSm1vUVk5NkZlczdUdVNxdHlwR2FDMThPcm1EZDY4MVJ4U1JyK1A4d2UrQytKMlZLdnd3QmsrbVpkazJPM1BTMk04NkpYY3FzbDJBWHEySFlZOHc4dW1JL3FkOWZIcHRicVI5Qk0zN3VrWXB4NVRIcEMwZDBaaG9MN0J2eW5jUnAvNktoMlV4YlJXU1NacVlHUVdtUGZwL25kckJSSFRlbnZsbWRqdUZzamErY0RWSlprVDhxR1FReW9zNUs0MW1uN1dobllrL28rSVliTjFTbE9ObjJKaWJLZTdWOE5taldBaCt6YlNPRm5LQXNyMVEvUEJmWkxsdUhzanVvL2dWdldLV0M0N05wQUttYS9YS2NsSjQ0U2twbDhuVUJTcXVveTVQMTRjOFpkbmc4Wm1yZVVNRk1xclJXWXJKYlh6VlJISy9qTU01UjdwbWpRYkZCa0c2UDBrK2hqd0JHOUlNZzExNkFmb0p3Skgxdkc3MXBsYWcrekZnZXl0d2tEWW5kd29MeERyZE5KejV5R2hYZ0hwU2o2THF3RUllbVUrNlJkT09iOTh5RHhUZkZJajZ4WUdsZk9aeU83ZlZnU3BDWnVYczFCRUh1bXpqY3ZmcW1wQnBENmRVMUF4eUkzbDdXNVVhQXd0cmFHSWU0V0QwTm5uNk9IYlUwV3Nmcm5pdlZzeEVIUk9wMTJPbSt1OUIra3kzcXg4WVNkbUZFYTlPc3Nkemx3cjlGTTQ4dkM1WjdSRCtqNmVsczJuS1N1UVpWbjNldWNvUDNSV0V3R3piVHc0Z056aVdmRWM5cGZkL3c5aUdsQm1VZWlRSGhONGJSdklQNWx1c2lpTmVveW9ldjhoU1FFSmNHcFpEeFBPOWFyM3lKNXQva0NXeGNLbDl2N2Q4MDA1WnpNR09uT3UvR1o2YTR4d3R3Y1l4WlkvMmRGbkRuVThVSGU3UHJjQ3VGYm84YmZuUWRaQVdEV3BmV3Y4dU1saWpVaEplSkd6OWpwd25FWVJ0a2J5VWJjbTJqaVFOOHVWc3J1bGpKK29zRXdiVEVQTkZ1cXo0Yk1VYXYzdW10QXZSa3JMMG02WDViemdXMng1bUpiYWEzZTBHbHpNNUFMa1kxcm1EM0dFdlNYUllBVXl2YzNiVW0yOU5SSGl5N0VuZCtncDNOYnVNNzBINjFKSEhYeWR1NitzYVFUN0FHVEVWTWpJdGg0M0NiSXJDQThpYWx4eHhkVUdpUkRMZWJmNnM2U3V4Z25ieEw0RlM2cThnZm45WisxTnk5TDd3S0FmTFpMcDJScXFVZEpTSVVlRDhxMzR4QWNNeHREYTZHRlNQOS84VzlXWWJUNnIrcCtSbVVJaU05azVpYUJSRHRVVGdiVjJwejIwakJqYk9jd0lVWVllZzh2TTBRTEw3OTdFU0hxZXdQVUhtL0taR0xJenhLdHNKSXZjM29GWmNWcnRkVyt5WlQ1eEtOd3JnWUMzUnlBU2hyV2tRVFdIbWU5U1AwQlFkRkExdDREdHExVkdVcGVma2dvUzlxSi9ZNm1TbzJvakFvWFhncG9nZUw2K2N3OHJ2cEM3Q2Y2YklNSkl0UTAwUExZVEd5VjExWGRCZDQ0ajlMcTR3SEUyVVB1eUlqb2JMK1NjY1JZZk9DWElZTjVQelQ0UERuZGoxQ2x1SkRGeno2TklXdE95Ry9udHpQUEZnam1CYmZaR0pPQnVEb04vMlM4Ym9hZ3hadHZwWXdwRm5yb011eGJQL0lEdVJBVDNiUmtvY2puVTExWVR2OFAvM3hNL3piazZ6K294Y05EQ2pCdzJ1MEdoTjJ5N2FJSDExa2IxSzBLZU9sVXNCb2tzMHlrK2dTUmxYa2lTTVBrZzlkSlNPNHFzWmtTVnRUTnhCRWxQc09GbW5qRGxXTUJKMUUrSE9jR1JqY0ZWQ3VBQnVjSFV4bFB4aVJsQzR0UjVNZ3h4UndVVFdvNTFySFJxZ2ZmUG85ZGFITTlPU0s5U2ZBbDZLWWYrbVY0QWdQMkxQamJ5OXZWWHFYQ0oreUpkR29VaGJlN1FiM3V6Z3FOcS9jUjRXcE9jb0ZBZGI2VVArUFhmaDhpRUFSY1FIUCthV3VmaktibXRnMGNSR0tUL3dVcEZJUW5NcDNMZDNyNWsyTGQ5Z2UxN2RIb3IyZ1ltRlRTRm4rb0dFYVMwQ0Q4c0pUbWVjZzFNeTltN056WDB6SFpmWkFQV0VYemVVM1kzZzBDeWt0c0lYeXowT1Fua3MxQTFSbmJUUXRTajIzb3BWWkZ2MndvRkR1d21XeExMdmtWWmtXeEpYRFUwWUZUMHBMTGZqR25TMW00a2xxakdMdUpOendpUnpVNGFTajhwcUx3TGtSNDIvdFlHbEk5ZHdVZkplNDI1Z09wVUQ0VW9EaVR3TTFSVmFvMmREV242OVNEZm80VFdlY3NZSk5IMnFNUGYyRmNqNTQ4bkdFd2cyeUxBcXBRd1M2SkE4dXliVjlNMWtRMlVHb3JaVU1FMldEYlY1ckFZUTkzWFJNNDZqTWJCQWhaTG1nR2RFZENibHRNTjFSQ1JTQ2o1YkhuanVudXhTOUVCU0ttd3B0bkd2d1V6TlgxcnBoc1VMVkIyWUZGZ0g4SGQxUVFBdkVBdEFndUZFL201N3R5Tnh3dUZZdGdmck1Yek9RTU5TdTNFaWlJRkUzclNYbGd5VHZjTHFDY2t5WGt0UjZvZGxtdEhrNW5ocjVzVXI1bHU0ZGdFYTVGbk9kcVFPVGt0TlFhUWhUaWRLRHg5M1lndTY5Y0NBRlYwQStMK1dSV1pWVjkxczRhRTd4Z1ZVTGhmY2VPeUsrbWhGajlUbkV5aE5hSHRhaTBNVVd2SEd5dWNlR0tCMVI3M2dOUHpUMXVtVmhQR2pwUmZUR3drUVZXSHpPQ0FiQjk1ekhwT0ZlR1pOWEp4djJjT203eVRZY3dnL1VnaXZnaGduMVNzNlQzZVI3Nlo2a1ZmUTh3bGNqYllHVGErckZTY2FQallGYTJBejdZMXFFb1ErWmRxaURIMVVXZUVuWUlOS0h4K1AzZm9lTU9iRUs2emkxUGJiM1dRRXpsR2Q4eXBlV2lpV3Q4RVRiMkFoc29CSHZvQmc0Wm5zMks5Q0NTZllJR25iTDFTNUU3Q3EzWFE3NXZ4b3Y0SW94T1h1Wk41dzRSOVRqaVh2OEZlT1RzWmltM2pxTmttblZ3TXk4WUVPcHJKS28rdHRrVlRNT3ErUVRFTXpESUpYTzFDQUF0aGYzZlQ1dUtKWk00RmZPZmFMQVBhOXIxNjRZRzAxOU1VKzhwaHZqdVM1di9BQUt0ZWU3QXBoRkZGZHJEMnRoR2U0UlB0TVFTOEVLbzBYTW5QSG9idVVLTnJUbFg3M2tlYmg0Qy9icGRVZDEvSjdERWFDRWFkeEVZdmlacEsrOGJiK2xyQWhVMVFTNWlPYS9LRGlndlR0Z25xUkFwRUVnU29DRWNtbE5aelIvN01VaEI0bnlpeGN0TVVmWVptWGZ0Wit2TXZZR0tiVkFrNUtMZW5nVlRsb0U5RnBieVVia0poa0Uxd25PSzBtVmxWMHM1WkRJbWU0UnBQK1NyOXRVejF5QUhZU2YyQnk1Yk9ZRFZqZ3NrNllmSmRiSU91V3h1SGdsdHk0RkVMZzhnN2Z2Y1VEdUNFdWtlMWJYcUlxYW1JbitGMEFsTzNQUTN2TGc5UFhkQTJpNXJNcjVEdHhLM01RYzNSU25rYkJ3R29iUldjdlovZDJNOEZDWTJydW54SFRmT3ZrY3hHdm9PcTIyUFdySnNYVnRsYUhTcjk2a1Rvczl0NC95N0tGb2U2cVQxTW4zYjdlUWVHRjZGNUxrYjMra0ZTNGlDN2tqUlB4aW5jTnZqZXM1YlQwNGIrdk9ORzBJZVk5UE9kelVGSThpaXZEVWMwblc0TnVVeDdNbGpqOXREN1Z1N1pKanJjY2grYlVuUFlMSVpkTWN1RXJNVnI5ZVdZVTZSS0d2azM4UURxY1RvOHRLWnRqZE1DMDlGNS85QU5jWDBhQy9KZGVCNHVwbVo1eWxvWVdydjZDZG5LY2JHNzJoc3lCS0xXNHVKOWt4WnA4WVZzZWVIR2g5eFppTVE3VzlCdS9hU1pEbHBzaGRGbXZkVks1cVVoUGo1T1Y4MDNKZklTcTdTaUZGZTZrbkxtMUlOTUlnbVhiSnJLZEhmSjc2Wk10a1A0V1BjZ3pOYkFwV1hoT0ppTmRYMm1UMzBIeTh1RTBEWXlDV3F5M2lkQ1hTSkZHV2hRMUNSN0pXdllaeXdiaXh4aWFRVEw2NEQya0VBdFNGTlpMYWZxUkY5WXpmS1R1TlVFMmxMNk9yNGhQTEZwTldPRzJXQk40bGpDYmNDUkZLM2RINmNta1pnajJoY0cwZVlMdXo5L2tlV0xzNjJUb3VrazJOTlJ3blpBNkYzRjR1UDYzWm5yZDdEWEdsZXhHV3F5VnBoQmdoM0Z0b09NemVYdjdPd1ZEeUh6YW1aQmxmQ0tSdGZzeWJyRXJlVE1EcXpzVjFWODVhOW9kNGtEUTlqTU9OaVIvNEdtM3EzdVhOek9lTUsyMGJxTUlqTE9UbWJDYUM4YjdJU05wYWtyV1pFcnkyajZ5QVo4RVNQVWFxYzU3U3pHRFNvZk9KRXBwdklqdm9FMnNCTjhUNGpqNituTTJDd1Yxb1VjS3NhRTBQWHBpVmhTRy8wL1lDQWNMQThYaE5aT3lpQlBPc2NzVk5uWUlNejJwWTYrcmROUm44amEwSEdNZWo5UXM0V3lrcGZxRkFKaGIzbDN3NzZTeGc0d1kydmtXaktQYkozSERqWisxaDlCeFdGTTZIdXNqZDJPYmhteDBQNzFZeVd6R2FBK25WRElKYzEzOFRmMUpUR3FqbVpIK3BFMTcxVmRUSVVaMjJaVlZSc1lHdkEzS0YxeVVhT09pRm1SSDZnSVZTeWdPcUdiV21DYmtlOVJrOUJaMnJud0FKNWRSNzlIU2x4bUVqcG1PaFM2Q2dtQlJoVXNCMXNIQjZDT2JTdjZQeDl0eWtZZ1ZkRTl3aXBINU5HcDEzNjNrOGtqM0o4WEI2NERNV1RRb3l0QXM3VmVidU9Gckw5Y2VvQW81cldNWkhST3Q3ZjJYOUcxdzEyd0dtemFMWEpUSE9lTExKMncwQ1FuQ0htcW5mNmdLVUVVbjkzV0ZRRVk3Vy9teGs4NEVkVWgwcE5IS21uMnZObnlEZm5uQUJuYm5Ib3JQOTRFNmRrMXlCRWJHMW5JdEFwaWt6WkxtZStyaVprYWdjVVExelhvTWZZdVdHbUlLdzlhNFp1K0xQWjJydGRuZWFsNHRjUmJoUjBBTDI2TUczVVlaaWhvYXNscGpCVVF2cWFHakFvMkY5b3RqSnVkMlNleVpBWTRtbzR4WFFrZlFKdlRWd2hBQlV3RVlPMUlWQld1b0VjNVpYem4zV3RkRVBzUVRUQVpTdEF5VW84a1pQZURkeGNpcHJhR01YRCtPYmFjdEhsZ1JKcGdvODhwL2FmMm9PbUtJcEFPTUZmRkxUbnFQczZTYlhRdkFmMnZJMmlMMWUrR2U5WnYraXVUa0xrRkRDZ3FOQXA1ZG9GWkxTMzh0OHVoR0J5MlREY1dSTnJmcCszNHJYTFVZUElTTVUxRkcvdmVXdys0aVY4ZDhkK2lsTlBIU0RDR0l5M2FkTmZyU3N1VXZ1Y08ra3l6V1lhdmpuL2QzbnZlUXFCV0FnQW9ITHlyS0JZUXdrVjlzNnRlWlN0Z0ZLS1FqZEtHUitkbndMSTNhRTZrYk9OMG9URUR1S1ZibXFSNXNVcWdXMzZnQ2VWdXBsMW5LRkIzd2V0VHkwN3NnTytNKytHSTVaclYyYSt6TmRHaUI2alhpckxOWDZsKzlqZFlhdFdkQU8yRnhBLzlTMHBYbngyOVJTWlBoUHdOL2hiYk1KTHFiMEZrc2NYWlEveVFlVlhXZWxGTFBYVGl1TnlFUkRuWDF5R21zajAyK0lRejlJa0Z1b3JyTkVVUitDZ0JmNHFSODlpbnpuODV3c1NhYUVSTlkwUmFnUy9MTHYrNmlWTll1cGh0d2R4UExIanh4U1BlS0dCd3RjMFY3UkVjUENQb2ZvYzM0encyRW1oZlZvNXFQcW5oa2FNTE96UTltc1dLM09GY21Ndm1kZEI5NDVvbkZXeVFKWkp2aDRKZ1ZOL3FOeHBxZGNNbWk5ZlhxaGMxQUkrNTI5c3JxeHFWV3NuVVRacFlMbXRsOTRVU0RHRm5GQ0hEQkk3TVB5QlBHNE1uWWQ5Qm9GTGlsdTlFSG82UDVIZ0NQWlNsTXlDb25meTVZRVd6dnp3LzNJRVV1WTRDZ1RRMUcyM0VteGNHNXNJT21mSllCTURPYVd5S3RDNTFobzBja1FBdjAxaUl1STZMdjhtNWhuRFdwREJnQ200K0pRckdHaWdtWjhFT1ozWDg5a2FmSTZSQ3NTZ05adWtDUi9oSUllZG1ldVh3WVMxR2lDWEpqZTN2a2gyTXFJRjc3ZWg0Rkg5dlFLM0VkY1g2VGNDMnc1dGVuR1E3WWtIWGZxdEplVk1JbHlwK0hLMENVNFJGalNvYkk1K0NpSDVJZklGMTlTVUR0L0hQSm40VjR4UjVpZ2hFb3ZGQkZ2NVNkYTM1SUJCcU9xRmorcjd5cVFxWUhKK3NiUm9Ba1FwSkpDcE1TcHk2eHVURXp0NGViRk9iT055bmlNdURLYmtQZmxXaTBvVlVnM1MycEl5aXVZUk5MenE5UGQ2Y1g4Q2N4TzRMZTNEb3RXQURCdEVYemlkY0hKZDNPRG5KWkRBYzZ2cW5MWXpyUEp2LzMrbkF1SlM0TExNNnNUYU13cG81U0tXTGhGYjFiSzNOOTBUR1VEZmxKS3hGSThSZVprNlUrUFJxRm1PVVZjWGNGK1liU1Vwb0JxaUNsd0R3VzRuaURLNjV1LytXMTBaVkJvR0RaVGVrcnZvWFVsYk1RQzM5OXdtaisxQ0ZSNHFiWE5hNEcwWS9nOTc0WVpZZXVRN2ZsZ3E3Y3JmcVhPajR3RGo3UEF2UWdNakJiRGxhOEsyU3VEUk1xR05LM1dwT2ExV3NBWGlhYWtKV0NWbWM5OXZrM1ROMGxFUWJTVUtNd3ovQmV1QXFLU3Y0STBpdSs1VkpsWDJkRENOVFl6UVFNTU1tV0VtOHJ4bEQ4R2hVaW9GT2plZTBERzI0YS9ocnFKeUVrNkdXSWMyc0JUTGZ5b2xiMkFwUmd2dzc3Y3hoQ2FQSHBLeElvek9lOW0yQUxXZDluRW5xbXpKVENFeUUwTHMveGN6cVhBenArRER3WWZ2V1d1ZUwxL3EzTHU1NWlJWGs2dGgycUhUUm9rQWtPeGZRRXVyL3VRME1tSGMyK0IyeXBVK1dBVlc1eCsxQURyR0U4Uko5c3R0YUdNSHVZVFV3aSt0TmxVVzRUTzZWSzFGc2xnM0Y2ZzdCcEF5NjRVM0tIS2xkYUtMUVphWlNUQTRvc3pyZWRiMHNlS0ZwUGpnVXhJTGo4RmwydDJLZEl1SW5BK25vYmdKYXB3dFRINlF6cUUwMVdvRkpIQ3ZVUVdkT0ZyK1M5MVZOOTRzNHYxc3NtUjBlb29NQkNZWGNSNVBIQWZmbXdFdHNYcUZwQXpuRFVrT1liQW9kYzVYUk5CK0tOdGxZbTl4SW5YdlBpWTlMVHZGNmxUbmJpZEUwN1Uwa2tJcTZBRy9FMmJjKzJtZkliZXE5N0VFSTAvWklMU1lCMnhwSlQwcUxUeGlBd213cTJqbW8xQW9pTnVqRzNCd2FIWjl3SGNVVzN0ZFF5ZkRXNzdFcUU4WVFpMUUrTnR3WHUrNTNNOXArSU4yMy9SVDJJVGZyVG84UFd5Um1uNGtzVTZXWEdoVWwwY296ZlVJSUhSNUtPTmI0NzBxRENOb1k3K2tvcE1kSm1RSTRtSGRTc2xlN0lISkxVVlNRN1JNa2JyVlAzcHJmQ3dhWEV5UUgycWtJVE4xWllUbU4yM1ZGZmNOaUJtRlh3eEpXMWFDTlQ2Wjc2ajFTTmM2U3RrV2dyeWtIMTgrSDN3TFdqUmN1cllFR25SbE5jSzZMV1gvWHJSeVNpYTQxV2JRT1NMKzEyUndCTll4dXRQSkRBalQrOVFOanVhVmRxc2I4NTZ3b2VuMXdlS1JkcDkyR1Q2VkJqK3JZM1VEanpVVldKelhXcFQxaWE5MmFPMDUwQ200OUtPYWlTUWhGUVVjVkdsTWVzQncyYWJyQVM5Z24zWDBzNG5BVzNVTklqT080Y2NKR09lby90WEZvaXZSUGdNbktjdmdyOWFqeFNNaEplNkhWdGpKNXVEWmpmSGw5U2hCQXdaUGk2aU5sbW5NSVlFbEJLdDNmQVZpZnlnYkgybFd0Vy9tYUt2a0hQbUtZMTVFUE5ZejdIUTVRSnh1WnNUT0xnSndiMm05MDI0ZVFkbGJJajBWQWR6dDJ3MzcyUmZNNmgyL0t4ZFAzWlRFNzNXMFh5NWRyRy9YTzhQNWRrQVVhbHhLTk5zbGxmclBiZERCMmozVE9tWW8rYk1NVU5wYnhqMVdFWUY1MXBEUWZQVG5LVXkxU3JrMHJmOHZDV1JsYzdtYncwUkJvV3JJa2Qya0txK0hBVlBSUlhlNllNNTArNUNGbmhZTVFiQ3pxK3pST2NpK050VVVvMXozV0tRRHJGQU9weC82NU5IQ2loRGova2ZCM1hYOGdlK3RHa2Z2VnZVTGtpblBneWRJc0szVW9IL0hQL05HTzl1azkyNzFjVjhEMmN4VnBKZFZsdlZPRDR2a1FHRnpmVmxWQlY3WDRzZCtmUGEvQU8xbG9LTXRXaE9jRXFGNWtaSjlsUHltT1k5WTJmRGV4bHJDZWxWZXVJTFhsVFF2N0pkSGw0WnlaYWV1QmJVUkYvb2ZJMktBNkFiZEFFcEdoVGtlbFQvQmlNUmhrdnkra0RWcXFGWUE4Z00vblJQdmlnSHJjSVR0V3Y1VkRRbllzMFVjT1dRVHBhMUZ2VHlHNWl6aUM5NDlsZm9wU2k4WkpUUlhsQUJxMVZBSWhBenRLNlpnV2dzcGtmeUZwL1dwbGptd210SVU1S2lsOWJWWlZkWTBNK1QyTm5SUFJQZ004bm1hdG1GR0JxdGE4UUNTbmt5V0xDL2hRV1hCd3pIdDVuc1JROEdKNkdBNW9QcW84SGlmSE9XVnJ3VWJHSkRDTFBqRHlicU5ob05vUHpjN3hMa1ZqbENLVWE3QzROcFVoNUFTTDBYcFRSaWRKbzV6eWNUYWE4NWRsYTcvTlVwaDhOcVpnNytvMkdqNEhUVVk5cHl1ajU3QlYxMHNBalRreEZ2Z2JZam1VOXpnU2RjRDBPSS9BMWdsZXk1NndJT3NoS2YxcFlDYkdTRWQrUU11Zm1ESnE3NENtb1ZOZzlhcTV2eGNKNVlKQksyTlF4dU9qc0RRRHByYzZFVTFuaVdJNDBPck93cTViTllIenB0NG5UVVRRNXdPc2NqcGJmVzN2ZHRwYk9TeXlaT2FTWXFYR1BBVEdUU1hRSjFnNG1GSHhDOVZrTkdxUy9paU01Yy9WR1U5RUtxWEdTQmxJbnIzSUdKLytYR2lUMmdqU0RCTnNXdnBPMkdjdXFyVzZJRWRoanpyM2wvVnVET0Z3UmFGUy94VDRIUE1adXBEdFdHM05wYmJwQ1NiZjZvUkhkQXpTNnl6TGlkbWkxa1k0WHAvRjZFMklUc3JreUhibnQrV1N0dmtWb3FYZnR1S3lnN3V6SVNHd253VGtlNDQrNVNsM1RraWwzcmVGaW16Z1plTEY3UWR6VWdoZXoyVERWWTJmYVBERG45TklZZHE4VWFIN0VnMnVvMURyL1dycThkaEJscW5nL2NzYk5JQU93TnJpYnhRWi9FZzFUYWs2Mm9leEVOdDNpMnRjL3JKVG9OQkFsTkR5bWpJakVZK1ptT0JIT0x2VGRCb29tQnpYSWNOS1lNYTBQV0JKODlrMEJ1VGdKdUtaclZqY0s3Z25Ca3pMOUxTZDRNNWRlbWVWNkJtV0tEeGxmeDRQVC9CT2g0clIrbUtKZ09HRVZGVW1aZno5QTdTSTc0SFQxV2NyYnlIUWVhT01iaWFBT1hneUo0UXJKbTJ4MjJ0T3dHcmUzaVNPNytMcnJqL0JkVmVuYTlvNXdvRExueSs3WjFZZ0dURldvYWFTWWJTUWJNRzg3YVpnSnNqRmdEeW9QTnBObldUWVZ3eXByYjlIMmRJRTA5bFozMmpKQnNVUnFDWEJ4SmhXNWtBZGlHTGgxenBhSGs1SUpVSWVEcll2ZlUrMXBtZUxXUlFtc2dwZUNNUysyMHBick10d3ptalVFZG1WcXRFZkpDWjdqajVQOFlGU3VabEw0Q2lxRWtkZlI3ZHRTZUU1YnpyOTM2VnUwUStCbnV4T1QvNVVXRXZWdjdud2NWRURwR2l3R09jVnZ1MW53ekluZlFkUmsyOVI0S1JyNk9ucFo5cGI5dFh6MkpPVE1rMEd5YkFIU1JKYkg1eXlobitYTG53ZGZLbENyREpYdDhVMkhnNW42M0gxZnIvTXJ1UUd2MFZNVkJ5cTNBNUg0RzZ4SlQrOWpQcWlvNVkxZkU1ZkdBSXRDWEoyeURPOXhwby9tT3lrcm83NDZGQ0tFbktIVklhQzBwT2RTaHViSFZQVVFmZFQzUCtkeHBWR3IxT2cwbUxrY09jeTJFaFFGUGNyeEY3QWFSaVpBYWp3a0tQVEtHS2UxTFhBWFpkalpiNjhCVnMwVFQ0Tlp0bzNuZkQ1MWZVWW10OWVSUmdyemhmQmg0SFM2OGZ6enlVcDVhOTNvS0t0ZUdzWm9RakxlWG1rZWxNQ3hVdDJMR0xHcklVZGpidTlVWU9ndnE1Z3FNblo1N0hzNE05Vmo1YjJDTWl1eDB0MFE4ejZvanVhN3pTbmVKM0FxMys5OURmTU4xQS9KTUVsNWdMWnZRQ1VRRm5ZSmhYLzBWWHlZbFcxYmJ3ODNiWmNkYXdQVXdpK1hQN1ZyamVOc2lKQmVKbWlGVnEwYlozbzUrSVcrbDVRdWo4elZWYW9FWjA3RUdMUTcxcllDWHZpakZVMlZRZXZvR0ZKdjJZbnJrN0NGQWZ1N2Q1VS9kc1RXdDJZOVZuTm45OTVyN1ZuS0wvRTB3S0ZWRTdRY3NDeEdXb1ByUjZsZko1YW1CcS95Z3lLSm5uOEQ3RzdtS3BhWWtFNG5BTnorcjBPYWU5RXA4OFRZTmpXcGErU0czZzJXcmtndzFrMkZnOTVCaEYyN3BXNkkwOHVxT0J2WjZENEh2R3MrOENhR3JYM1FLV3FzUG9ucjNobHdRT3h2bWhXN2FvdWNveUdqOVE4M28reXFKTFBxbVVhTnNCRmJYSEhnQUNhRlcvdkFiWXNJajN3QWN6VGxpOUcxUER5azRpQWlWNUNLalJmM2pPZ2NkYTRYaXpwS2pQTWJ2d0xNTHRvSzhXY3VwZFhnc0pPV3YxRmlVc1RvcCtUOTN1emI1b0UwZ2VGN1hPZ21LcEphQ05yYlRQMTdPc0d6VUFZWlZTSVhzbEJnc1h3K0dkR3RkZE1xKzFpeHBaNVVGbmlHMkpXNyttUUpYMzBQaFlmZTJmdkRDOG1KVnI5c1lHYlkraVI4UzU3L1hZOEhFcDdEWVdBblBkd1JwcklRYXFoT0VneUFzSDJJUFArb1RWTzhIRHQwQ0ZjTGl5RXhpc2xGRU85OUw3dWZnVVJ4amVFZXFoWW1vWHB1bDNFYXJkOEpqbEZSWDJFb3pLVnN1S2FzNWVSbzVqL0I5OCtrQ202K1JMdnl0OU9aaUppMEJPaGxCeWdpV2FuZVprdWs2QUtKWGZHdzFZYTYrekxTOUFMaVBML2s0dTlVbk5uU3hGL1pUNGJSQ2toUjg5cCsyRkRrQmVtZ0JWRDdLbHZMVmNKWHFxZEkvMEdWN25ZRnB3VDFYV0FQZHFrYzcyeE1HRmx3dTFTMS9SQXhKdkN3TEhPZnNQaU5EbU5mVitKMW9kQlFQOUNsMHlWV1ltOVVKMmd4cVlkNHozZnpaWEYvOEszN1p4VlovdzdmRzVxYVpqTjVEYjZVUkZZOEUyekxoRVN4TEZuY0F0NGhxMFBGZ0ZyT0JPUEFkbE5GWlRIeDU1dWNNNkhVUHh4YmRQZ1dhYzRHYnBwd3BQcWVJZjhINlFxSnJOYytiWm9TY2VCcVIxUTArVkFjemw5TDlLZkVLTnd1U2REdFhYV2crSGpTQkxOOSt4bDBJU2lxRjNwS3puTk9RRU9jWXJEd3p6SzdUQlJjTTJ2VlVzS0RRMXRnRGp4ZTdaZVhMci9IZHZ5RFBHS3FzSEFEWnIwOHhUdXF5ZHNGTjd3ZGNXMGc3UEQvT1RnenljeWZzOWN0YWFlNzhON2ZBSVNWM0lvNHNGdDk0dmdnWVloaUN6UENqcXVCbVA4ZjQ1eVhieUUxdnc1L3RBWTVGWFdZV2lCY1RmVEpZbk52QWtPYXhna2o0TjFSVXBHcTQrSXVHb0NVRCt3NVhHYjJ5aHlnUHg5djcrZ1NsRmdNKzlUTGFGbEFDUG5PRGtHS3IvT0xBMDhpcC9nQ255bE5DSVYrL3pSUktOTjlpV2kxZk5QY1dQWnlQVmVLQTh4ZTRUWDRGRGVpeDBsV2JkcWV2cStlQVN4NGNWS05MTVhLSEFqYWZwSUlqM1FINWFKQ0VPaUQxNGg1L0VoN2g1U0hUQ3hLNFA1anIyemI5d3FDZVl6T0xqTm81ajlnVGVCV3NPekNXMjN0Uk9BZzc2Y2lCV3BuODZKcXlwSnQzTXhKYUJXdXJvdVgzSFlOQVN5ZHFvdEQrWXlZQWtkbS80b3puMlpxZkVZcm5rbVZ3UFB2b0E2VFpGK2k2d2FWdlgzSU15akZETzF0TzA0U3hBM09ZUU9UQkRpTHhEQnRkY09Ic2dNYXFKR2tYN2NNWGJQdkMyRmJJL2ZYcjZ6Sjhrai9OZmdsQVIzcC9PcGRQWU9UVXJqK1RLSldrWEZlWGJQSlBRWlVFbWg3RXlPYWU2cXdOeVU2c3pjdzRFcFo0dnI5OEt6aSt6WE9nUjN1bzBWU3hqWjR2N0c3ZWtDTGtEZ3VyM0JRUmI2akovUGJyY3l3MUczNFpURlZMRDJjQndYTUozSlBKZmdtK0g2M1gvVmlMSVM4THFIUmRMNmJmSDJoK1dsR3VTVWlsVzhsYldPTERnV0FoS1Y0dGJDNThxZEpVbmd3enJUT3owVU1sT0xMOWxVSUxjTWc3dy9HWHFERmhEc1JwVnNtRFZucExZMXQ0MU9KQmhiMkMyMnFpcEZXQWg3by90STVoeXRadXpUcnhwdVdoUWJhTXFBcFFOZkdrZ0ZLbXUxSldWSkVCY3YySFlRM2toUkdyVitKK0t1SVBBYk9mKzJ3aG5kcDZXMXJzWXZYVWIvZ3FOdi9CVkZLTFlnTHlhdGM5SStCUWlSTlVuWkFWbU5FcmlFb0F6bHMyY2lkbFFtK2k2Y2wrMHpxcXdwZXdXN0ZxYVhQbGZYWG1DRFQva1U3T285cG1wTG9UL2dBN1hmU216WmNrNUZYTWRhNFVRNlRkaEZNdXhLYUFvK1BEVXpEYlJ3NmtMdHZRWXNuY3YvQkYvdk5Xb0lvamFZNVBOUUNTb1pRcUU2UFk1Zy9SSlo5cVJiQnBvWkpJTEJWSmN4dEpKeGRYVzFtdFMwZUNuSlVuL1JmZzZ3MFRWUWpxbjVoQWlNeW1wcTR2SkhrNUxVOStIUm80TnMrc1R2RC9vYVEwN2NWV3VwYUxsMDQ0VnZuaXFSOFg3dUNDaURoQkU4YVRpVlFqSk5uWEtjbmhRc3ZMZjhBV2p5WktyaXBsajhBRERiQWRlemsyV0tFVDVaL0tPZnpId2paT3JvLzhMTUd0ZisxMFp1QUxEK2w0YVE1N1VPcFRBTjFzb0NXUE9BWDI5Kzd1MHVwdFhvWWo0VVI5UjRuYTFpNC9ZbENZeTQyWkRxSlB6a3Z6OVptMFVRc3VvVVppZzB4aUhqVW1WRng3WCtoT25NVUxuYyswSk0ybmJNQmNVbm9uSTM1OUVGV2tjTGdhQXlJRXVTUnN3eWY5YTVMMFMyYWNPalQzSG9wK2hHL0d5aGdZdzlqVWdSN0JQcENDZU5sS05ZV1FHL3JIL01Ic1d1UFRnaURTZ3orallpQi9yQ1BlNjQzVFRlSlN0Y2Q3VyszeG1vVHFscitMMHlFdFVrZk9jUVd0L3hyZWJLWWg0ZXIxZEJjNzhHN2NIRUYvU1dGRzdmTHJBbHhDb0lGekFpLzVuT0lNZlBIeUxMUHF1RWZWVzZERndqVmJ0ano1R1FFYzU4WGZZRVdVNnhpTkFNSHQ2N0FodWVuUnhhV2tGejE1VzhaQmFVTU8zM1ZGSE1JZHJDb0Vjd2ZhZlU0bTh3VVlQRHFaVzlFUmNsZzBRTzVnK0t4dWd4UUxBeGV4V2FSWFp5UXVkRzUvWngyV25TU3lHRjdNYk5uam5rK2lkOWxDZzlDMXZMUHdHNmhZQSt4OXQ1ZzZ0MkIwbmpYaC8xMHZkWDM0Z1Exdlk0NXlCWHRnV084dFFNZ0lEVW1oN2VPRnBBSUx6RjBPUUpZR2ZtYnA4aUNtcjhqK1p4cDlUYzNWNC9xYzRuNk1mZHVuMnVmaEhkNGNjMTcycFIwY3hPRDh0TzE4U1RwdTJqTk5zUFpvYkdrNEc3NkpYMDhXL3lVUC9LNVV1N3VUUUozeXdCK2lxeCsxQ25rWExZZmtNdHN1a0xvY3BXS0MzclkzUTUzNkRDeWkxM0tiWTAwTjZmTlpWekhwZ0VFbWVhQjJiQ3BzR3JuWHdqM1pVZHFUSUJLQkNHVUx4YzkrbmdhelJiWCthVjJCcDZwdDJ0ZHpTV0FnbFJhb0lmZ0t4cjd4UjBRUldsaHZqVk9GRE1YNUxaaE95cVNVTHVYSUhWT0lER3FOcWc4d05CWlVjRWIvSE9xR0I5YW1QNmNJeEFJRGNEZUtqeVhvOTVWbWFDWjdEOHZSaTdRRGJWYmdVbkdIS2RTNE50ME9NOEx4bUs0RWVjS1E5UklraURqUXk1MnhWL2dqNWhWZkJpYWhQa1BRRUsvRGN0S2NBVUdKOVhPMVdSNFdkQjErU1Bya2VtVWEzRUZ0TG5sQUZKTjBYMFhkTUJTSHhUQXdKMXlnYnB2TTRnQnFrVmhYdE9nbEFESDU2eU1tMGZiWmNEZzJyd2l3WmpnNjZ5S2ZDaDl4cWZaeHJSWUxOWnRsUnlxS2tQM2hCRVUwT2F4bmtrck1aVVVHYlJsQTliNXZJcnE5d25GYUt2Vy9XVXFzcUxxWHExZExTN0dKOG8yRkMrMExBZWtCaEtEY1EveW1ka3NvREpKTTB4VEFQVWlIaFhXdUpZYlg3eVFmN2NoVHZhOFc1UU54WFc5eGdreFBrTHFjUS9CamlaUWozRE5DdEo2V1hiN1JkaXI2bWN3SkMvYmFCRjhVZURVU1ZpY3VxbUxUY2hTa1hqMTc1ak02T0wreFNma2paZE9YMGVMSUk0YzdVNGljUUtGSjR4NnUyb3VybmFXL3Zac3F5SFNVWDdwdUx4dVFyd3RHY1lYTUMwemd2NGNQc0pVMk9neDhGRDFxUzY5R1hXcEZHV3FSQ2NCUUsrOWtoL1RKd08xaXZDbG5veFFvUFhzTXlFTDF1czAyTWNhbit3SXFCL2ZLSkZkbVhrWWtKM1A0bnovTitFMkorK1JsejcwNXpZcVdDNXRJWHdtNko1aFVaSUVadi9ZS01uemFSdzlRM29zSDVMa1FpcE53Mkp6WC9kK09EcURUaUE4ZG1WdzdiZmg0ZnVsVWFFSnJyWWFFdTFOTE9nL2sxWXJwb3htUG5VUnRoQ1lOZXJBdzZldnBZM3RoM2ZMQ3puaHUwb1ZEWTZFbTJhb1NsMHVFT2tXSXVoOG83Uk9kellkTFdSaVRtQ3FIZzVveDhLWjJJMWh2ak5pY0kzRCtXaFVPMW9wK2VZeE91OUpOZnIyQnRxOHJEd1pWcFV0amhQcDQrS1ppMkJNV2dlOG5uN0xLRkRvcFZERWlBUUdOUU96YnBVMFhxNHRXaWswSFVhNXRTaXpMQjlqb043ZWZudmdUMU9nTGg2SElieW1rRDVVYUhlMU5MTDk1d1A4NEVlME83R1RFVklFSVY1MldBcktKaUlQNEtKZHgwTE1YZ1Z0UU9ibldNV3dUeGlPYzl4N1RHT1ZTOHRFOGwrbW5OMm9ZVzYzZ1pBdFJRbDd2UjBHUUNEY296Ym8ydVFXU09Gd2R5NFlib2thcDhRMENua2l2Tjkvbjd4emk2OGxFTmVyLzYxVnRSdTU3ZnlOTk5PbWJaTmN3SDFCRlZPWFhKSWxzbzNWcEZhanVvNnJrWnhzSUpDL3p4YnRTWVZrVWdsakQwZ2R3eVRxTlFxUlhFcm5LVWVUTEs0YUNCcGtIK3UySXVEMlRxNmt0S1JRMW1JTDJhNno2ODdIRG9YbXBTaUNEN3lYdDlIMjJEZ3NqWVZvSW5XUEF6R1hZZjlrZTFKVGpSY3BJelRHaTFCT0JTSkNyRS9xVWNEYk5aYUJWSU1HNVNIdWtLYWRYdEMvMk5NeDA3RDZDMzA1d2Q2Zk9vazlCUjhPYmk4OEF0aW4vSVBmMHY4djZkdWI3VklwTnZlLzJJdnR6RFhrS1RMK2YraFZ6NGxXZDRYa2trUFc2RlpNNVhBRE1SeDY2V1pXN1UySk1TclljWmJPeWNmWjJKb0ZnYnhUTGR6YlJtKzd0Vk9RbDIvZUdhemkvNnRDaXNxZDFsUHZBVWhacG8yaHFVcHJtQmhYMWNleUFRZmdpZjZOQTB2akpUbHVyUisrT1RnMTF4aC9odzkvK0NWYThuQnhvL2JoSzMyQXhOdTR6YUtwWHFxTW40NXlyZDJwTDh3UEdBeVl1dEhYWWN3cmJ2c1QrcUJCc0FMVHpVQW5YNHhXajBsMmFUYVFWRnBQR3FYY1dBZUNkVlplL29tT1Y4cnFrRnBCSVRkbTZGaXoveU9DcVBLRDhVOHVGQ21zeWs3VjZORUJ0R3FoQXcycC9nQ1dyWXh5bWFBOUxIaHZxVi9GNWR3RXpwRUQ2Ly9aNndscGl1SU8vcUZRY3ZLck0yYVFEZHdxaDBCbVVGbU9jYnh6ZmhwNVJMdXZlTk1odzh3cjlxb2Y3Wm4vK0Nid21qbkNwWXFPZ3RFSkt3d3pQNDA5ZlJScjREcXlCRlBuWGdSbEh4UDdFYVFpb1RScGVTQWxzQXNXOWRpM3Rld1J0SC9oZ1VuL0tkcnNxMUl2M2pyaWo4OW9yazFqYW5UNmJ0QmU1cCtMR3pUU3hOcklrdFNzajhZT3Y0djQvem5uWGQ2QTZhRGwzZVp4RVN5TENFNmsxVVNSZmdlUkdaWUNtcHJkSUhoeGNMaEUrZXZ1MjNQRXJJYVdpZEp2YVNUNk1SQVJDWC9BdVVlOWxhQTJLeGNCL0FKcXpTN0NCcEZHcnpRN25ZSm0xK1VxVnRDKzc5ZTBFM0VsbGVhS1lUbWdOSU8wa3J3TXhtelZPUUJCbFY0d3kwME9rTmV4Snl2Y3k2ZmplZElPS0xIQ05TZ2FUTFNzTkI3bW1IcVF0OUhJaTREOWZackpyTjhpN01BMjdnSndTeUFLMmk2dUFJODNVOWNMNU15SmljejE5WkREdGpNVFRybDhMK0M2SWNJaWZQNGZXNmN5eC9qY0ZXUzlYVUhXa0J1U1lSZmErRzRMU2JwbHhwRjhjL1ZBbExhK2VhQWRKbExBanNMLzJMTXQ3bU9HZnhzeTdYRGg2UFVKdkpiMGozeGhjN3BtT2ZHdVZwMkdQWVZybzRybVh3Q3ZzTG5La0FudG85NUtpRHc2SU0zZFhsaU9CSUY0NUhldE03a3J0c21Cdlc0VitYQVhuYTRrd2IveTJ4azNqTEl6UllSdGRaV3l4MFk2b2x1RjgwU2V1WFozV3N4TXVNQ0g0SDB6NXVrZWZyQ0NQajc1ZEJWOHNlOXVrN09QNWVSZnI2SXJkVkYyWkFMakZzZE9IRThJV0UzTFk0VE93a3VKblhCeWZxSEdtTlFGOHdwZFg4SFdkK2FpNXAwTlNKSlAyVnF5MTZZTjdGV0RpdjJhMytOZGFRRm9nQndIeXRJdFVRbUpWc3ZNR3Mwc2lKdlNoczdwTVRaSmtTVE1KdWRyK3JXdngwd28weUwwaW9MYWFTOW9Pdm1BR0lBTTEwR2F6QnhUUWpTRkJKendCVkU1K24xSDI4M2FUdzAybDNqKzQrS00xNGRIMU5YZFJPYlRvN1hzc3NFcS9LMDJ2OGQ1NFRKT0NQdDRPRVV5Y3d5Z0haMzdkd1YzclpaZzFrQVliTmZJbkFpSWo3NEY5c0MvcU1Vd2IvRngvbjhaUmFzMzl3a29ZK0tMUmI0SC8wM2ExWndQbGJ1aUltZ3AzVW12SlJ0eEc1d1BZWmlPR2dETW5rbnlqY0VSV3ZrTnJKam9lV0VTSlRZbXEvUkxlQ3FIUWowT0Z2bUR5clpSTFVpVkFsUGZLU1oza1l4ZFJGTW5Hc2FjNjZHaEh3VVNENXpoQnhxNEJvNmNHSDFDeERlTnlJdk0wRDlGalBXMnRrWld3NlhTK2ZKZUdRM0tLS3VPTy91RUJROXlXcDNrbjVMMUdubitHK1JwVzViTGdiRTFyN3cvM0JhemVSWEZnSDZEV0J5OTEwNnAwakZlVFFNalJTZWdGdnY5Y0hiTEp4VGNROW9YWFpFOU8rcUxHNnd2VkpiMXAweURXblJnaTR6Z2ZPSm5IS3pMVDJZb1hMc2dQMDlwMXEyU2lFdVdJcVplcjVncHgzeGdxNEtPVWRlYjBuSVh4NGZzQVd0ZWwvSVovbDRRZVM2SHE3dG1vUkFuUG9nTk1FeHdwSTVSb0tvbzdVMi8xc2RyRFJ3dGNDZ2RHYlZhUWJCSTk1MnB5UnhUMkRnRU44VEJ1VUdNeU9peVFaR1V3eFd5SGh5dHUzY3B2SFVrREQ4b3NKREl5Vm95SEYwQkYxblVWZnd1ZTJDS0FhemdxUmxUbDRMdFh4dmhKbWZQNkFObjE0OTNIc1RtemZ5K1N0K0NlKzQxTUtBTVA3L0gwR2RzVVhidDNXYXRPdGRXNUZKMnZoUWpjTlR0RThpeGlLa1p6Z2MvWnc3STczbUhKTFNKTUhlMzR5Ukpxb1EyaDBZV3RMYkhDcjNTVkIraks3anpxV011eVhLWDllcDE1bi9WbWpaQkQzWTZaWTYyOE5iZmlYSUsra1ZnSnRFc2hJSGJnc3hOU0VteTFDU3h0OXk4dGdsMlJvYmNIaldxYXY4aTYxU0pCZm9XSHpwVHhHZkNVKzMyWEJSNEtZNWhSajFRajBvM3lyZGNkek5OOHNPSHk1OWgvbnl0K0Zjb2pxQWJzK1FQRDRXQ1MzWmJGYTIvVDFKZGs3YnFmVzZpTUtUTFFyeThSQzlId3pvZzRNWXVmVWxXYmxzakw3Q3kweW5hdU04Y3o3MzE3VkhmaGtYMlE0N3U2TUZtNGFMcnVuSHZuRTlNRXN5dE02OWxvY1dCMHppT3BReGhmWWs4Uy9HL1I1ZHlPeE9hR0F5cHkyeGJYK2Q2VHFDM0UvcHUzbjR0Z0lRNTdrSkd0Lyt4MVUzQ2F4b0dOU2hMZGZvQjR3V2xOR2YrRWlGdmgwanRJZEhGRWVzdmwxelV3VkplbUJ4N2pIdVhNSGc1RTE5TGFCY29JQXQwMzVoUGxld1dqb1p0Q2RKUzNzYlkvZ2doN0Uxb3diNG9KcVNtMS80clJvcnNZVStlVER2dWZSTFFjMUlnc1RVWnljOWh2d1dYRVRSNHZTWitIQTZBTElidG9NZjQ3djFVODNBeUhIOUg0TDIzajlNeURWN3dETE9hSmw0MFN3WTg5L3RkZlh1UnNmSWpYUldaT0kzTVN1VXl3R0JBdVhUd3lvV2p6blNQOWs5NTY4cTBWTVBPTjRZQ2pWVTg3eERIajl2MWo1Q0I0UHloTnhwdStXanFMNEVsbW1kTHRZSU9jMlgrM09kVkxzSnIyREYyakp3cmt6RzZ0MWJPSXlwZXZ4azUwaUd0Zjk5Y1k5enBMTjFKci9kRUkyODRUamwyczNCM1JEZHhhM1lvTGRSV2FnSmUrVHArbmM1dTAxU2x5QXV6Q29RN3NWcG1HRkN5MWRlMkI1c05LRUZ6Y1Nsbmw0VGlncWJmcms4THdMQzQ0VzdVTlA5elk4dFRKaEtPaldoV2szanpieEJZTG1WbEtRS0dsbkVRL3NhT3haaXFicVozTEozTmRrZWdMclRvaXNGdTQxYlVjdDJrak1uK1JWL2FqaC9UL2dqNEpzUlFWMlJNREQvRTVDM2xoTDY5dEdMR1l3Rlh1M0VJM0lYdm5FT0RydmU0L2RYZHBPM2VlbzgvMkxoTFRRSEFqTDlET01CYm1OaTZwQVpuSmI2L3VOQllnSDhHeTJVY0VTQVU2ZG1Xamd3TWpkbWRyeWRUN2Y2bTBBeG5WV3ZjbVM4eWhrTEdJSHZQSDlybkhqK1pXbVY4aVM1WGlLYnBWT2V1YjFNd1ZZVk1VQzk0SnZlUXgrWk1UcDJhclZVektnZzhIZ2ViSVZlRTVQS1ZmN1Y4U1NQeHY1cXpqUGkxQXo0OTBjNkFYd1lwRjFnQ0MremhrU0VZSitJd0I1QWJWaTZ5L2k1bnN6OVZDRVBaVGdYZHVFbEdzVyt0Z0NVSTI0am42ZEF3UG1SWnhUNWZnVHZxdUVJWTRpRUZsQzBsbVBhMFlLYmF2RGw4dnJWUTNDelE0QWtEUUlSdnpXWm9uckJmYm1oZEVvc3hqN0t5L0lyektRUGoydVNGbXgzRENqZDdmUmFEaG1GOGJ2RVVpVGJaOHBjR2lQRUYzNXl6ai9CKzZNZ0NwNXZKYVF1cjg2SWgxWEYzYmZETTZLWEEyL0pQdDR3bytSRkF0L0w5KzJIWTRDTWhaREFTTll0dVc4cE1EclduL0RxS2paeWkyZjVpRkRsQ0VXZjN6STRocVJtY2RydDE4ekZtMEZjWVRUdjB3c1J0RlplRm5ZVUQ1MnhkaFpoanZiVmJvc05FU2lWY0h4ek1DSnl0d1NFdTBZdzF0M202eTRtdTNpOGt5OStWbTFqZFVERjQrb3VncGlESXNST1Jsd1plUHdXcEtRVGEwYWJXM2s3dXRVdFk4Q3QwQWFWMnZHd1o0ZkxWV3p4RDk3ZVR2dHU3blVMVUNDc2dkSU45UktzRmJnQTlUY0c3bE9tSzVrNW1TWHNaVExWYVI1WnhpTmpLMGYwT0xETXI5SVYzYzlKUVV2K0IwaFZsYTBkSFI1Ykxab3NMNnpUOTcvQVpLTjhYb292eUFtY2ZQb2k5bG1hTXh6eXE1NTJaeWFmbWIvRkEvTmZVSnVQbXZaUWhYSFRtVVBSM2RaTWd4dVc0NFBOMFZ4SkJheFF0bWJiUkZGRDVsU09oNnlLSk5rOTYvSTNGQnlJYk1rZEI4Qit6VU02RWZoaVF0eEtVdS9qTStIYW9GMHRIS0RSbFVZbnFhR2pqc01IcFBrekpxeEUyYXFtYVdiMTVoZHZNSERkZzMzaEtDcUhZSTNIWkZ2NFNVcy9DZkFyV21OblByQ3pMT2lHZEF2a0UyZk1iZUx0dGQyTlluSXU4K3BPWnhpdHRPL25ycTdnUzFWV2FMWDZzeEszSFhwb285b01YN1V2dDNJRHNnQXRpbys5eEpNVDA0WFg2SlJFVjV5YnpIZS8zcXlxMVM5bWtyZGpodVNaNmxqUHBoUW5DYmszZkFLa0grMkVYd0pYZ1E5ME1qWXdHOGl0aVg3dGVka2JjT2ZGa2E5eUxHU0dzbTIzM2p4aGRHSlE2Q29aaDlBRkQrZzh6QTE1eXc5YkpCdFUvUjRZZ3hlc09YZG1tM0NYR2Z5cjRhYlV4NnJWQWlHU0hJKzBEa1dMODBIcVhsRXNnTVd4RlNaQ3Frdm82R0l5UDQ4NE4vSDJ2OFhFVEoxcHdXZzVKNmtjdGdPTlZYVUdtR1N6SVhGeDkyZW1wN29ncDVRNm1URitaTmFUSndrbml2ZTJSeUVicFZVcTB6cHdNaGF1dTFqbVp1S3dSclE0b0gyOFIxa0hZYzloU1VyMzJNU3NUNGExK21Ca3gzcXBmendjSWM0b3FEektOd2ZaZzd3L2hpQlZ0MzZKci9qaTdndHZ2YVo4SG1DZ3F6andpRzNqNFY1d1FGT1lJVDh6RjkvWmY5VlNzWWl5MDZPQ05nN0dRSDJqZE9hUXpmaFl4b3d2MExNNXVxK015dnBRN09vbFJkd29ESlZ2ZUN5Qm1WalpMa0pNUm9ZYzAxRVNSbTd5VTMwZmNBdUtaQ2l0WjlTOHdvK1Nveis3Q1AvZkV3VzRDdUU3UFZ6RGE0bmwzMDBkRW1zY0t5Nm8wR0xlRytYOExLSkRva0hmMW9OUUNpQVBsdzg4Y3E5WDg3RnJnV3JIYVNGdmxnV2RTWDJyN0tKVTFGNXZ4a25uK1dDK0ZVZ3loUkYyWnp3OVdzMUVNVWU5TkVmUmE4Wm5JZFUxYjl6WWFqU3Y4eWpzWktCTEdEbUJYMkd0Qm5WY1BCUzhiU2tzUzZDWWFTWGRGQmdWOWxxZ28wMHUyQmtIbmFIR3ZKYjhsVzFtRko5NGtRamVLbXdlcVJTdWVIOXp0WjAzMnZkNHBtVURDbFZBcms2aURtaWpyUitacTlITVBHWDdWelRhanVhSW5QUkVNc2ZvREhJb0xOekVCSUMxMjJWRkpPWllWUWlpSTlTN0dHNUJpNHF0NkJrMXcwaS9DOER3R2JlOEZrRWhjTHQ4c2lqU2sxU0hMbzh0d0l1TUZCdVJzV2ZKalA0STh2aitCeHBCRUFMekFDVm9FUkZUWllJRncyZ29qZ2pyOVlTOGlsMk5vNG4rTHJsYXkyUDViYU4zc3EzQjNJU1UrOHhPMGFaVmpzSVJ2Vk5DTDNnN09ySG1xWXAzS3UrQ0hnTkVXNnlWL1ZRbVB0ZzJWenZRRUNYRFlNN3A1SnVnekhrMjZxSFBTQ3FyNm1vWG82L0owa0srUzFMdEVOYmlyaHA5TElaVXdiTWlaV25jbUp1VU1jTURhaEY5SjlDdHdsK09yRTVPU2hpOUovUTdmOUM0dXY3SS9qdURlNU9FTTVMTXVnclAycFdnYUI4bWdidVl4bU1SZGlLUUNESzI3cWNaQU1IczVnTkxkcjZQQU15dnBVdEhqWkdHaGl1cVBMQlJXWTg1MVZ6K01TUDJZdTVaV2J5WGdLVWJhQ1BueVJ6OER6MDRDN1c1cWdjazBjZVVnQWZJQkY1QkYwWTRCUnNiNjh0dVd4bXc0MS93b0NIUFNGTGM0cDdnNlVqRWVTR2NDVDBFVjJjZ09URzhWaTFCdlVOR0tNeHczVE1xVU5tTU11NG5OYnRxeE1IRHJwRGVpZ3NFeU1kNG5CMDFHSkRYc1EvTm1tcHd6SDZiQm1XY2ZZZ2h5U1RxUXlVUWxOWm9Bd2VzcVJCbnM5TTlDYUJONHlCc2lyRlZsVElMTW56UXQxeHVzbUFkRW1jSVVEclVWRFZtUGZabzQ4ODZ1YXBTQUQrLzNBVTZzOEUvSGNlTm82Mk0rcU5BcmEzZ3k4WDZwZjlRU2kxMFQxNXQ2UENSV2hIcEI1Qi94Z0ttOXNmTWd6d3FrTnFqRzl3Rjg4YU1VbUNQaFBTNWw3b0RGdkNPb3BnWjhoNEZvWmgxZTBOV3JRbU90Nk14dDl3K2doWWV4RkJLY2FlNEN0SFhHdW9zYk9kZm5sK0tzZE1FUGxacUpDSXYxYjdqQy9WNjBEUVVzdlBMYXRRUSt0ME1Hak1TdVVaY081dHZSbjJQdGFadG9TNjMvQWZBRitmSnRBdzBtdGp4WHJwV0x6b0RjRkVPS1NVRkRZOEFyR21EQ2NjU0Q4SHUrVDgwclBlMTd6RUFQaWN2TlhxL1N1ODZCZ2RVcHVzcGUrd1RqSnpLOWoydkNLNTFINjRVU1d6bFBCcThsYzlISGRaSVkwa2wwZDhURjFxaWVnZlZRL1B6SjdBQnJZbVgzMGhzRS9kcUQzQmdMMU9FVWEzQk13eFpJTWJSR1hKOEgrckVlS0pYT2J6cTdqTzdUcEFBOGo0UjNOdHJXSDZJT0drUnlMNklZd3F0Y0tSK3p2aFdUY2ltVkx5UGcxRjdUYTZwVmhTR1ZsU2I4bElXaFRnOWdzeVJQSVMybi83ZFhiTjdXV1hGQ1hWUlJMTWVKM1h0cTQ4V2U3NlVoSGNLbVpZRXhqSkZnRDNxRE1uK3NpOEt4UUxLY2tvcjhseUlEQUpSNDJPWDZmR3VsQ2wxK0Uya3lFM1lKd3owQnVwRzFJV1pGaGxIVE91VWZadzRFTWNCeEgrWE1TMUZIdjRib0VEU2pvV3IzTGNtRlJHd0FTMW02T1VUQlJucWVpYTcwM1AyTjRuSk9rb0lwbEcwWEhzSTNGTk5oZWh2c2REU21ZM3YrMENjTDlWRWtqV2kwOFY5ZUkzYTJxb0R0b2pPbkI3UHJ4aHR0UmIxRTVmMmIvSWhBZ29ybVlaOUdkKzNlNGtja3J5YnR0NTNzM2xRSjdKcVNWOUFnblZRMjlDRUdFaEh4VEppeEhOcFU0UmNvRDBxUW95cFRGNXlPM1dtSWFUcGlqbGxvNS9zbXM1OWdTTU5mZ0xDNitVWFdibEhDVjhPR3FJcUQweXRvN3ZONEhiMXRnMENIOUlZZDk5OGZxNUdxRXkyc0l6NWxZT2VjTlRJNmJSWDVBTHZLWHliUkRZNFBUN1ZET3p0K2tEMlIza1JCYjhEampPZzlISitlNDhXRXRJYktKb1EvZlA2Y2sxZmY1aGl0M0k1b0dMczZLNFhtTzJNeUVZYVNCMkdsdnRhWU9NdzBBdGlSOXEwcm5uZE85RWJKdnhCcnV2T3Z6OHpBNmZlc0hiVzk3UkJ1OU53TWh4WlpuUEhaR0NCalU0bjFwNWNxcW04SzJ0a1ZHWkFHU0phTHBtTGtINWtJV1hkZWZOL1U3WG44OWdKZnRRZnhPRUs3SllwamQvRkVuMnlCSnlqSi8rMnQxVE1ENmZVeFo2a3o3SUtkbVdmbE5OL3l4MEZHRTk2M2lOZTFPQVEwaTRHL20zUEttd1dQNnMyQkkvR1lJdTZVSTU5bjJyeS9wSHRORmNkd0o1VmNOb2V5SmlxemVxU1doaFZrVDdLTUFITjRTR2RaZzIyNlpuYWtsUWxHUE1NbkxoZGJMU1E3WTIzTTh6ZnhVNEZySDNJdnZhdTFaTFRhdEo1TmVWT3I2cU84ZHNNRzd0OHA4MzJiU0dqSUpEaEdKWjc4OUIzbjdzQWdrc2E2b1ZxTFQ3OHdTMjBCQm85TmRqT2hSRzF4SWpGa0svOXNRMU9NVkJFNkN5aDExeUlXMGdTY2pOOTcxZUhEU1RTRDlWN25nYzNjVTB1T3U0bEpQUDBtQXZoNi93N2tZSTZ3WHFLZjhITUs0Mjk5OS9OWjN2Y3BFV2FTeGhicHdYQlBKOExMWm53RWI3eGM5TXZKME5RK0lKcnhJMHhpNVdXN21KdUZLRC8zeHlBb2Q1Rmg2VUpIZ09NdFJzNmZhNzdXNkZ6Q29GQjdmNUZlZ2UzZHhQS2RUMEIvZ2lxS2cwMmU2QzBTTkRJdkpybnNOTmZVOUR5OWp1ZzBIOUFlSWx1ekdvY0R4cVRENlQxT2tPL3dyaXltTS9oemFKeGpuaTNlUUViRjlhczZYVGtKdkRGL0prRnFwQzlIeG54WnBDWGNHODJsYkpsZ01kYXY0R3NiRDRQd3RkUVhiL1h5d283bHBqTUZJVFh5NUpvU3djZFJRalR5VVJ5Mys3czJkS3B2WFFZQnZwbUQ5VGgvazM1elFUakQ1ZmNnU1V3Smc2MzdDNzBQbE5weTh6WUdwc2c4WXNNdmNJNXA5L05RcUFlZWxYMi9lL1pERWlZQ0psVVNqTjQ4WXdoRkpQWmhoWVp4RGJOMndRTHBJU2t3OTZDVWh2eWQ3WmVRV3RITXJaRVhrZVlzRFJPc1k5QWxQNUlKR3drNE80ekVoVWYwVElDYWdtQnNSdHBrN1JZcjBJZ0h5bHRPejk3KzZtdmZkQnBsRHY1NmtVdmtiMlB0SVRLVS9yeDRZalRHaWJwek1nMloxaFNKZWdYcmpMZ3BJWit5bVhLNFFVMGdKVWs3bDBvVXU4NWdUeFBrVjVjdVlodms5amR6dHQ2QXhvejBRcFhvQzNMdDVkaEhHSE16WWlUM1E5OGRYWWdxaVlHYlBDQVMwQVB6K1JDdWlTTU5FVW5VLzhrOHJUZnA4TnJ0R2dENUtSdkduOVo3TVV0V0JjeUlPQVBEWW1WeklOemdlSlVuMTNoQjFFMTR0dk9FeS83R1loaVcycGEzVTZDTzdXVXA4RGk1azY4bnJrcVQ0TVBGWjFDMjIrYk41VTBxVldIY2gxVndWZlZ1akVvN3pURFFTNEVtYmpHT2FBRjF5Q29xLzhlYktZWEhNL2Fyb25YSWlncHhqYUE0TFFKUE1DVzJKN05VemNCQmhUTEF5ZUNjejMyb1k5TXQyVHlVYjBoNkpFQXd0VlZ4MUVWTGpqNDdITU5UWlVobGVvcXZMTk5rK2Yxb3JFL0p0TnE4YlFETnNPZDJiZGhVRldtbXJGcjkvaE92eWhudDFPcWpnYTdVeGFYSUszUHJwS3gyNDhBekYxZXh6blZtd0hqTnVqd3BQZ29oalVIOEhKaldFTndLTk9jVXFKOUZ0VjdzN2xkWm54TUZqQmVSZDAvVG5mQ1BSdGtHOFc0U0xOREdETlRCYUkzQ29KZDdKZjFyZXpEYzlmM0pBRkVnMjk5cHBMWitaTWZiK3N2TlI3WnJPUTR5eVIrQ25ySkpvcTVmQkxJc29aVjZtRDFRY09hVWc5cnRRL1lqUnZnN3ZBdklsOEJFMVBEQllZeHhLK0J1bVhiNXdsQmJOMWg4Q3ozOEZxcXMvSzd0MFp0U2dkZFZxVW9KZmt2RG8ySzU1c0xNTzkwYXBqZ0p4KzEvSjM4dGlhTFAyN3BvNXg0amJnVW9mU2svOUFrdVNNaXoyekVIRSswMWJFTHc1RHFteTJOVWQ0R3Mrb1Fqa0ZCNG1JZ3RONVZCRGw2dEV4KzRzNU0wMWdDeFk0MVpsRVNyakYwdjlPMUhuM0VteXc3ZEM1eVprQmNoK0I5Ynp0WDRqWGVDSFljbFZsSEhkb0luSTRKbXNXRnM0S2g0dzhUUkFlTG8rY0J2TkZKelZEMi9zN0VHWkMxaEthblpVN2xnMXNFZ1pVcEo0L01Ba2lSeTI5eGVpUUkzdnpCb3FQR3hrVEpqZzcxbDVOL3JTQnQvZWMwTWRuV240dVE1VnpXRndhUVU1RWhJaHR1Y3V0SDAyZVJoNFJEQXpZVkxhUDFMbWViOWNnLzIzU0RLMWZ6Wlhqa0wvY2VkV1dtL1l6TlBNd3pwc01hSzVtQk01Q1FVanJaelJYdStWTU45anBuTU9ISzFRQ3NsRE5mejNGWHhJalRlSE9BZDB1dkVnQzdZb2oySlo1b1BFaHZNSmZuWXgyMWVIWWRaTVZQUU1nK0RHSXpZR3dSZStTbTN1bGJVS2JLakF0MFM5WGg4SHJGSTUxWWZ6Rno0WUNCamRjY1ExS2hOaDFGMG1DZHdXL1ZlSmxZQVRTUkZKS0pKQXN4L2RkVmo3VjU5OXhCQ1lmdUZRcEtLdzdmVmFUWmZVeE5VV3k1ZUZXMkN4bFl2SmNUNTNlTk0zY1hOdGZBbUR6MmZ5cEc2SHAvWmVSYjNJNTNNOEtWUndhdUYrUlhid05YNFllSS82bWxmNEFHT01QUDZJZmhxSUk1WFEwaXhlU001MWt1NlJEK1ZZRU95S1JWemN4dkR3Z0xMRDhBbWpYV2JSenVzRVlDYlJWOVRsYVd0YVk0T2IvU05LSGREVjYzSEs5cXJxekFPaEdkY3JOTkZGci9XbWdRWTBwVUlVd050UUNsL3FMWk9vZmpMdWNVSEJxSzNYRmgwcG9QMHZkN05OdGtqdTVZSU9TZWtVc2hJVGNiZ2w0TEkydys1ZHlSTXhtS1lqVXR0SzNicDZZZ29PeHJrNjFnVXE4MFRUK3BkRFhFWjgrWEZZb3pPMjFVbVRadzNIdmZmQ2VXZjRzWk5SL0t4NUx1aUZHQTdiY2xJUXVWcFpYOVVEbTFXazdSVFJUVXdLa1lhYVYyY3pleGxxcStkVDh1S3FnSjhoeTFwbURMSDRiZzE1dVdhQWpVcXJJNGNHL1NERkgzUHdKeEozUlJweVhqODJPcVM3VlRHaTIvSkgvVW5rU1hOM09GR2lMTVk4aWJxOVJ0bHUxYThxRW5nZHZEbGRCU0EvUUJibk84RkY2a3YwQzNUM2tVMEFsM3ZqNW5hZjFtOURTT2F3eUZDM1JLTG1KZUI1VUo0QzhzV2VOdmdlQmo2dWN2MmtXL0Z6RG9MbEVSUVlIQVREdHJScndTSzdSbzA0SUoyWlg4S0Z0bjUxUzlrN3pZbW5SZWVrekFFK3l0N1c0VCt6MFlEMDgxWE45Z3J5VXZDNzhjQnBJZ3pDSFFadjA5Mm9iRTRMSEFxdVdQMmx4bENycDJ0NXpjTll5dWVjOEdGUEJhRjV1elk2c29IVnQ5RFNIYXl3S1NGTS9uL0c0TGo4UUlHNExTY3p1aFJDRUR1akRuVVpqWW1yMVNCSURkMzU2RWFabG5YaFZ5cE1SZDBZWUNaWTc1TW1wVzBIdmZtYUs4eERWUytscVhvSkhwa0hicy9TWXhQdFh3TWV6SWJodzhyOGIyd3JBUXpjd3h0eWl2UkhzVzVVOWx5SGJkSVBsOUEyWlZuLzE3OVV3V3FLYlRSbFRYT2laSlZLYTQ0bUVidERYa05Idm1XdnE2bndnU1FCTTBpeDhuQVkxMUoycVJYKzduSFlkK1pNN3l2VktVditBOWI0czNpaGcvTFhWZXd4alNDM3owb0dmY2tkVDRyZ0Q0Nm1QbTk1dXdRWkdmREMwV0JyUjVmYzJQbmxkTzFNQmdEOTBSQmhUdHFBUDg4dGViT0Raa1g5NzVxa21OeUR5TVY3NE5yeU1RT29OVW92SFdWd0lDZk1takR4Z0RrZGtDMUxMUjlBWUxNeGZQMXVRUC84QzNUbEx1RnZ2emNYMDhETzBmRVJIaVdNUkJ6TUZvdW45UHVzNXlQTU9DVkRSRVJsS2ljOHZKWnFpb3JyaXcweGx4RTEySm9XeUJHU2dyZWtId1J6UE5STVVlVTRaaCsxWXA4b2lQTjRGbnRmeWhhN3FLU0xnK08wTGh1eXNOV01zZnErcmlvZjFvNHl1REpXZ3J0L2JZYTduTnVjaGQ2dnppcktReS9oVGZ3eCsyaDY4U0Q1VDd0R2htS1I0QUVFRVV6Z3dxeUJGYXY4dHNTTGQ2WlZTTXR5V0wzRm5wSGEvMElsdzRFWXd2ekFZVmJHenJkQ2pqTHdaY3p1Yzk4K1ZjT1NqaGd6YnB4UDBQTUp4TUIyV0xnUjRWWTl4UmRVblpaVEV5bVpsWit3WjVvdHNMZHBmRVMrWlBYSzRiKzQ0dkxIVk9NK28wNWFzZHVZd2RGR1JYdy9RandsT2dYc1d6b1U0b3RyZ0dBVk9ZVkRrSGZ0bEsra1FheEJwd2swVXU5UUpEdWZkWml2RHphcFBUS2IrcnJsc056WTNJZjhBT3hYRWovUTJiQitMUXRUL0c2OURLV3ZjVndlN1JtVWZOZFRPUGg2M3h0dmZ3SzVoUXg0WVgvUDhQc3Q1RzVab0pqQnZlazFwRzE0a2JsR3hUY0Nzb2xBWExPbVp3aTNjd25YM0R3alFGV1B4cEphdGRETFU0bFBCNnRlN1pCTmZFOWtXUktSaHJKSFZCdWNtaDArTmdWRDZHdzlveG9jOExNV1RIY3ZSTXJPNXRyVEtGb0VFa2gzZzNkOCt1M25tTHplSmlpVWFMMG1nSjFlSkZCMGJ1aHJKZDJnTGNwV3dDM2FVQU54ZFp4SW1LdWNMNTV1K2ZWai9IUjBud3ZIbnd1ckljMEdJVEFjcG42N1hXak1xK0k0bDlEbllHOUdzTlpsdlcyaWZnVFRZNHFpN0dGYjdQdyt1akNnRnE0Tmg3YzNuQlI4V2cyeXdPVDJTeWZvYkQyR2dhRnI2VFZBS3QrWkRncjdlT1dHVFhtT2NJa29xZGs2cjE2T0tLWXJUSHUyM1g1SE0zY04rRFBESjVlSFJlRmQ0ZVJDVm1mZHBvdlpaTUNJL25uWS85VWpoUnV0T1VZTWtJRFBmMFZpc1lnd3Q4cnpRa1dGd2wzZTV3UnJoL3gwMExCT1F0MWV0QjlPR01PKzJmZXdLRDA4WGpYMkc0ck4rWWg0aWhpU2txZ0dYQ3A0S0UvUVd1MlZxSWs5MklMY05veUcxRGNFSlFjZ2RRVVMzc3VsR2s1RG5DTXBObkM2Snl6QUtrRUY3ZHZCanVGTGdWM1F1dE9jOGptTzZIcVNsditpWDdTLzNQMEZLc1NaU09lRGx0TVhXUWRneW91elZ1cSt2cUxUOFBOK2RqZ2JBVzl1ZXRCTnBYVll3ajByTzVoREFveEIxdW1abkdEMkVwcjloY2p5YVpodVVuMWVYaTZDZHY2Z1JnazFFRzJFdENnV094T3VoN2UrQ3R2VlUybVp5T1FPQm1uNjhmMmo4WklSTlRyNGY0OGxJNFpxUkp5Y2VIbXl6amp4TmphV2FPWGFQZVAxZ1dqVzRvRUpZcnJESFV3SGFMWkU1NVNnV3VsKzZ5cU40Y2NKV2ZoOXVsT25Nb3Y3UHU0UmwxL01KUUF3OTBWcnp4cWRTdjl4ZW0wUUZ0Z0dzNVBRSDFCRmNIMEVSZ1dzN25HVVVLQlZXYkx5OG94cUtIY21DUm9WcDlYcUl5U2prV1VrM3hTUnkwS3JOZ0s1dDZsR1U2RGFvRUM5WFRjcDZnQ1ljd1RJcVZ4Y0E3aTRzQXRocGMxYkkvejBlWEVVc1B2TCsvUVI5cVhmRG5EOFdINTl0b09FTmJoSGl2TUI2b1J1VFI2eEcySEFiSUQwOXFkV0xRUmRCUi80a01UUXFlejArN3hSenVLaWpGZ3pBZHg2dUhDdGNKQmM1ZlRBZXdaU3pEZDl1YmU5RURkRWR5QitGMm5kUnJBaC9nVVVxdjlrNWhtSzZpWFp2dzZQb3V1NnFpM3RqdHR0NkRzZS9hazdjb2M5bFlWM1R3dkVsNGxCcFhSSERxN1pKWkZpa0tBcDFxWGV2L09QVkVxL2sremlLZVR3TGgvQWdDYzFhR3NsQ1B6eVc0SWs1aEJodXNjejN5ZUNPS2dsRTNrZnB3NkhEQmlLbnY1anhoTmd3cngrR3lYM1ZrQ00yUTZVeU1FUldJUW92d2F6OW80dktOWG5TV2lRREdEaVVGVHFseUpRUUdURzdLU1N5b01wRytQekpHZWFDN1hqSnh5QjZVZ1MvcThRSTYvSjdVa0FzU1RzenhXeURGbzV5OVVoN0xzTDh2VnJNSFpESXBVdFRrUVkyRmZEQ3Z1eXNGZWs4ZS9zdFlhLysxUTdEazAwenVqNlBQU0M2aGxJM2J0QWpqUnhFbFFuQVkwMU9RMWNJV2ROR2RpQU9QMUVRdDJBYWthcmtLbHdNSnlBUW5CelNGaFp6eGpxemxhY2sxRnpiZ2VOcDUvakxsU0JYZDBJZFg4M0NsbG5XWndRcThuYnVncldQVUJBLzVLclF2L21RalcycFlSdkN6ZWtKb0FTbk1IWUlFUGdBUGpVVFQ1NlBkMlFZdUttOWRsVDlEVUN4TStQWWc0anh6dXVpK2FWWmRwVjhiSnp4cmx3cmtLOVBQWklwL0k0eHcwTkZleWpMTHpYR2dOVjZsQjBPcWZhSHNUWENDOFp6Qi84ZzBhQTZURnRBS2JTZ0RiUnJ1cWd2Yy9aVUdkbjdjMVQ5RG85cGpWc3RvQllIeFpqQXVzYUxvWU1wY3UwRXdyN0x3N0FURlZPd2wxRVVrQ2lydEVBYXRXRC9hNHJvRXdnM29MM0xrWFI5akZ1bFc4czBlcW1tNUR0QnkwQmpFZHk3UnU3bE9PbDJqWjA1cWNzWFJyYVp0OVBKSnZkRjhHYjZPM3dOV2F4Snh1b3dqNkM5M1ZYYkNKcWlNTUswbUUrQWJOTVZhS29iNjlBNi9VRERDMWNZYzhHaWNYUDQ1aVh6dW10Y3lhSVpHbFJEY2ZLVE5yYzJpeExQazB2Y0daSlFZL1FYR2xYTnFIeGZudWRqY1hUczByWlZtQjMzeUtnalhreDZ5aFhpVzBzVm4xUHZlbU9KRnk4WXI1c0cyNXRybXZldWxWOXlQcGdicXNwZi8zTGxVeXIrY05taWJjaG5rVXR1WXgrNHE5OHpzellrVjdHelFWZllqVVFOcW94TlZCbHJyTExab0syU3RpbTFBdkovREpXNEUrOVIwUllEMnplS3hVWlY5MHFQOTVWcHlacTN2eldiQjBlRFQyZUpheTlmSi9OamxXcWtJdUZRK004RStxYVhEek9JVnY1QXhuWnRyR1ZERHZubXVFUFRUMFphZjZ2Zy93ajN4R1hQUVVkNjM0UkgxV2VZU21senRnZVN2VHNzcjRSWVZIdkgxMjBWQWxaQ1U0L0h6bDRyVkpGaU14RGxlYUhJWnRISUNwUXhXQWJqZzVqdUFNejVYVmlkWm5DZG9VM2dYM3Fxb0Y3Vkd1cjJnWmk3UDFjaWFZZlJKaktBcERTM2xFQVF5WWtQUkNvMU01aCtUMDVNYWt6UjhQTHM2MTY2dUJCWVNoWlEwaFpmV3RFZ2xHak1KTkU0U3BnejluZ0hjcVd6d3lIMEtPN3I0WEJKSE9RVGUydExFdWEydFJYY0hTMXBHdWRsVjYrQ1FIVGNJVDZ4dkp0dWNPRlJ3U3BGYkcwbWE1K1dKNXEvVzdHbnFvUWhGR0tMaXRteDhYaWtxd2luVmd3Skp6U3dBNnkyUk95SVFRV1dVU1l5bmJSdW5JUVZ4RlBJTTFHWWprUzRPTkVka0MrVHpWT3dZT05lSHpHSkFtOGMwK2tFZ3MvaXBvM3BXcTVyVzljMEV1amtWR1RpWVI3ZDhEWktnNjJZU3hjL0wrRWF1cDVKWFJuN2J6ZDMxSXA4WmpzcTZMNzlYa0lMQ1U4aUI0NkV3NzhPekQ2UzJ0TitiRUV4RlF5UE42K2FoTWFFenFJd1IyUDZtbzdZYlVnbWk4M25jUmMxbjNQQXNVYkE3Z0g5U3ZPVG9LaHJWUDhob2FRa0I4NFZTN3N1azRSNm9ETHpXSFdVc0JXY0hvR3BhVUdTRmpucGdrbkxEd0hFcDRQcjBLemZtK3lRVEMwMllLRkxnaWVmVjdRM2lwMHRja0xJRHhDVUZoVGUwY2FiU3h3cXlWMHBHZWdNQStDSGpoQis0M2hUeDh4dElEUVNEeGdiTmJYMVFnd0xZclVtNDhRdFkvM29LV1Z1d0dsMDRqVDV5bDFiRVlzWFRvZ0FaZWtjRGJPYkpQb28zbEFNOUhtWXdSaVRCbXpsVzFxcjVNSy9lM3h0WVQ0ZHQ2Y3BFbDFxR0lBR3QrVVVsek1lczVqcDVnV1lzMkdYZW5HZnJQaE1ub2V5OFRDeTM4alYvWGFqWWc4SytER0tXUFJMbjZYRmt0d2VicG45NkxheXpvU09yODNLdGpiL0lWQmtRQTRYMk84c016S2VJcFRLNkNuajhiU1ROMUIyZWY1cC93M3ZYVjliaG4vOFN1RVMwWUwvRDdqT1dxUXVSRk9hakVFc01rUWNnWnFFVGtDd3FPME1OMFBjT2I1Q2hsd1c2Sm5KMGU0cEpzTzFLM0NsSUk1VC9ramlPeUQrdkRqUEFjR1NCckZPbk1Ob2tmNWMyaHVPZmozRlBkbXJVS0Mybnd1NmFrN2dCL1pnRE9zekhKeWRBa3NiSGkrVWVadFd1NFFVU09qVmRhL0Q4UG1vNVBwdkxiUnJIdTN2U2R6cVUwcGRsZ2NYcGtVQzM5WGUzQlhlMlovMUo0R1ZtbDFUaGtIUUlmVTZqYjF4RlF1RzIxZHpDUWQvQ3p5Uk9na3dWbVlKdE9ZWWk3Q2xMUFZNTmpjcUsvOFZISFZ4MGNZa0dQaTdlMmwxeE03L0dpSlJWeHM4WlU3enNNZkpwajFpNUwwZXgyeEZzRHNUNU96UmRWNU9MNkdmaVdlSzg5WWswMjl1M05XQWxPNWQyT2d2eWZNa1prenRLV0txMUZ2QTY3M3BNa2V0eXMwYjQyb3FYazJhdUYyWE9Va0NmV01Sb0N5YVF4NmJuMmdKOWo1RFBabzNnME1sTzVtYTV3RTZBVnZrekF6U1RQUmlMTTdnTTYzVVVYYkt0T3VoZEZmWVJDbWYxVnFKZUY5WHhYTkJPSUlwOVdaMUdmT0pmbyttZ3A0MTNFVi8rM3BJajVGSUErOS9PRFB2MkxtUTRvSkxvakYwOHFNVGh5cjk3SUQvU1B4S2FMa1AvSXl0eEYxVlNFYkhUOUV1RmxKZ0paVzRIMEZvY1ZtTHdmd2JkN2Q1YW95K0Z2bU5kUklkSUs0aU1Dbjh1U1lFNEVMSitNekRFc05VMzI3eFFuL3BCdjQ5bXk2ZytuWVY1aGg3VkxwVGprWUxXTks2My9seHdNWW1Xc1AxQmVGMno0d0lMM3RIQ3hmTkl4MHJCeVdFTFMxOXhRMkl6V25mTE1POXFSZ1l2b1g4b0NoaUVCME5IeC9xMjFCZGFvbFFMc0o1YjRWemNoV1BHeU5sTFErQzlkdUl4Y2NFQm1yR2kwSEJHNStrNEVOanZ6aS9ja0tCaXp5NGNCdFJpV2p3elBmTnBtamZ3SlNDd1E0c1BJNy9PSjFGTitEY3ovZStteUlZeWx5VVp3SDJvQys0VEdxVk5tMzUzYWpBWjRDcGxCUzN6aHJtdStyWjFlU0g4SUszUXlqWmNZS3BoOC9GVzd1eEYxZjg4YXhmS1pvUUZFTzI5RWxRNmx0TnlrNnVYWlgraTVwbEx6MVdoZXhZdCtIWkhzRnVNclFXWUJBNkxlaldramVGMHJWdFRQRHN6VTcvRnVBRDFEVGNxUkNSTHladDVwbWZKTDFLVlJwUzYvYzZsQnp6eGFSSU9iMDVhSlpvU0JqSVZ1N0U0REQ2UlpyZWtDcGpFZkl4YlNuVUVHMFdKdWZEV3duajNhUUhCMzNvaTFoMkZHZ2Q3Sjkvb3dwR2l3RXhGTVRsTmJLdHFpNHlnazRqMzQvUmEyVitlZHUyL1pKUmVWSWpuWHpRMXdSUEFKYWxTTmN1UFRZRkhqZ3lYdjhMK21naTVnRXJXcFRIV0hScSs0b2dwSm82K2NENjJKSjQwSmkvNnlURERpTUlpd3dmUTFzMHlvTlRlbklIYVRob3dqazBrbThLQW1mVnB4T01iMXdDdHhCTmRjU3J4dnNhWjRJSG96WWxLUEs4Tit1Nm5KeXYwNFpTY3RSRUF1bGYvS1JZUFFNZVowRDFGamZmUjhUTzNHVkhtMnd5WlBEdFNvOHlaL1ZKZU1JeVRrNlludXE2Zm9sRmpHLzZ0cXl0c1FWTU9kY0pFR0tpTVhTNjZacFhDR2xTdnM1aTl6eG9zSGZib1BNNngwbzlwcTlDdlh0VkV2UHlrUUc0S2REWHdJd3dxTEtFdCttbC96aWZTSlhwN1g4Y0YydGVWVGN4T3VmSFg1eFpNMXpJcm5ZVWtzRm44cXR4b1Ywa2lmZEdINEIwNEVGaEtyQ1RmejgveVo2TnZKZkVDd0V5UHJpb3lQbnZ3L0w0VHRCK3ZXckhlaUdnNGZSYkJSaFk5UDh3Nzl4V0pqdEZWUHVFZWI5OG44bWg0STR6d2JIS25pNU9TbmVxaFRrOVk4TFYwbEVKWHBhbXczVGplb0NFRDYyTFZtdEFkTFpWMlBjT2tZS0VReG12RHZ1RGVuWDBKbW5nV3p1S0t3M1RKS1ZsNmFpbU5WL2xjbjR1d2dla2xzdnE4NXRFUmJzc0NMRFIvajFLRXZNdlZkUXNDTGJaemRzOXhFY0tLLzlEdlNnTWpMYkF3U3RVM1dlazVpY3R6SThoNFpXWDJRS1FlWElRWHN4QVdsUVBUVE1BdEVJN1MrTTBoREEyMWdZWHp2VUY5Zk9pbG5lL0QxQnRJenVqemEwUUl6TS9IaGVZYXZDTnFHaGtNa3NmYXVPZXZnRlk1WVo1WHA2bjIwVDl5N1NaYklKMk9Hbnd2ZzhwNTBmTElCR2t5ZnpVbG9MdFNEdUpZbGVtcEkrYTEvZThSeklobWI5Y05udzNIREVYaHlEbXpDRDh5VlQ5Rk9CRUtrY2V5MjdPelFab0hFakRRUDZrajdpakxRQjhZMFp4Nmk3N2YrbkE3WWNKcnBUNWZzTVhvWXphRjVZeE0zZ1c0cmRGV21VaEU4bTF5dXZSYStJaE5SS3lYZUQ1b3BwUkRBNE5IWnZOc2ZCMG9yV1pLbjd3a2tvTnI0Z3JPUWZoK3RQd21YMFRBaVJGY0tWNUl5QnFnZm1JZm05N29FSW9KREpyOXRBRndKSCtVWlJuL2s5L1Q4cloxYmdwUGtWU3NxOWtmK2g5aEpINFVlMENGeEFiWTRPZU9NV3RrVjVRaEJpTnNscnZPYWxZTit5WWxzbGx2U3pUc3VEOXpvRUhwczA0UjBJdm9XVjVqYndlQ3pETjdjbGJFdkVKK1JzR2pxOGQ5TDlWY3dUdzVmS2NIVEJnekhjak4xWjFvclAyRUlZTHdHTGIvWkJjQW1kZ25tVnVnQW5Sa0tWWS9VRlhKZ2dzZG1YSUozV2NON05ld1YzMmh5TFczS21KeWJOZTF5WkNSWXhSS2FXb2dVWElJVHhpeFhGU3hEQXE3Q3N0b2RweEJCYnlVRUVYSTBYVTRVRGx3ZzIxekcrUnlybWFuczVJWXRIN2JpNXNIQnlDYXZIT3d5YiszTUZSazFSUGplT0VYQjAwUUUvREtpcWxoWURScE85end5TmZ4OWN6SlZkTmNEbGJ5MTF6dVk3akJMMTRUVFIvZnJXVUhwMnJXczZyNXpNeFhWMlJiYVlQOC84Q0ZHd0hQTHljKy9SUS9ET2lhVnJkMFAyOXVTSGJOZ2JvQkMxTHFJZkpCQzFqa3IyeWNoYXUyam4vVVl0NlZKNlNMUDZoSDlidlFlUFBodGhaT3owNVFHTU9yU1lkOXByNE8zaXFYeUs5Nm1GU3ZibjkwZXkzNUtndVloYzh6VDdqd2tFNVJSRUNmSm1OME43NnZpNHNiZXJiMHhFUUpXQVVmb1IwQ3pUaHh0SklvYjFuRUkwWXhuN0xqNmlTV0QzakhobGxtemlNVTJOMm1rY3hVdzRHR2dYY0JKSzhiaDY0cFp6S0hMTVhzV2diYlRNRjFjekxQWkxDR1B2V3o0ZWxwQzVDUEtVMVA3d2VLRy9rT2F6U2szSUY0RVowc2gzWGdFbStJTXJtNXhnY3hsM1Y0T3d4QmoraXluQzRxQWpxMy9EWHpmZjF6RE1nS2Jydmk2MURvaitnVGFPNENncGZ5VHZwVGxKai9SMkdCWStqYlJGRlZhVjlIN2hMclZFNHJPLzl2VHZsRDY5dmxDZXBsYUFZbkluTjFUS0tpOC9YZTYvdDBvZ0VkMG5PNE9pQjBMR3YxT1BMRDhOWGdpMWRhSERSSGtwNU5XNDZmNytKWUJFNjBxbmVFZzJnS0hNV1lIamk2R0pWVGcxekVTckVYVkJjaDVWRVpJaVd3WjlxY2VSNVVkSTQyOTdGT09yOEZUaEZVZmVJM2JHVG85THYxOVJXZEZ3UXg5UHRTTkpkUk8rWnNOV3M0bEUydGY4NkRPRnJlT3FYVU0vNEk0UWtFYytyNVo5dFFVSWJEVXp2elNnSSs0anJ0KzNpS1pGRVZWWVRnWkhsZVp0SWI3a2pDd2FwU09MNno0RS9PRUQ0N1MvTWlmamwvMy9URGdqODZseERrYnVESHFPT1A5cFFzVkI3S0ZJemllUGJKUnVWRzRJc0x0eTh5TzZDL3B3bHpTaWRrV2RWc3Z0Q2NNMnFsOTRVSUxMeWxxTTNtOHNDQmozL1ZjSEZHYnVIVzRid1V3NW02c2UwdkR2MjdtMW11OThCMzIwRUpnU1h1WU5wVDJMR2NuVnRKcEZjYmtJRElWS1o1QmVhYktEdU51VXpnSWJ2b2NWVHNDWk1RQ0JNNWFVdEVSUDIvVloybHFvbXg5NTFtZHZ4NWtIK1ZiMEprUVdIVEtsbVBRS2lMbnJvb25MSmQvbWdqWVFYSlJTRHJ5ZGhQaDlXazdHMkJrb2ZoRlBYQmY0a2VzQWdhRlBET0Qwc1d3MnVGRVpwNzB2ekp6dnBIbGVuZ0doOWZVUkEySCs2NXVDVU04SDF2c1NZeW15Q2NjS0pKcm9pMm5ZYTI2UmZTbk8rS0lMZGYxVzhsbFJJMlgvOWJRMkE5ZDNuUGJTUVpDeFlpOStGVkpWbUFtOHZMdEpaWjRyZkYraHNsYW1zRGVRWi9OeExXQS9Da3VQa0xucXFZaWJPQzFJalNsRENkNldJUHl2elNqaUQ1dWtrSTFjNnJpYlpCbHppdUVRS01iWXpjTCtEdWl4VE1iZXBKLzQ4SDZxbndEQW9pV2dIYllQUm9Pb2s0M1diaUlLUUpTY0F1NVV1UC83M0Y1NWFXWU1MZTF6Vk5RWm9rTEYwYnBaZ0g3Z2huYkxIeERhcWVFSGdWSkpaZWl4ZE9XYXBmY2lrL2VzZkNiTEF6VTM0Qk1lcTQyYWVkOXYwWE53Znk4VmVBWkEvTlJ6TFBwOTYrMFIvd3BZYXppb2Y4VUEzZFVwZTRyWkUzN2VnZ3hja3BZblM3bWhrWEZBOUJXL0RZN1dONU92c1VIamJ0VC9Rb0dKL1RCUmFRRFVlcXZPa05yek5yUmJ4VVV6eUpEZlRpUmQzc00yUVR6ajRSSWxvVWo5VDVzeTdIZkIzcldOUHBjSFJZSVVpYTZVczIvMWlwOXFoSSs1RUZiMVFhbm8veS85ZzlmbExnTGhBN2x0cnV5a0NtWHlJcWJEWi9DY1pjb1hDdkVPNFJsRDYyWENZZ3V1d1J5a3lJUEU0TVhtQmlCT0NidTZkamFBVzJIN3dtbVRab0VyYmZaWndrWEdJM1FNQWV2eHllc01QNk9nUjhHWW1oeEE0SjJnWkN6amNEY0VmMXU1aVFoQmd6em9wYlc3MmRhQUgyWUtUTEtmdnJmaGluaGM5L0oySGprRENWM0Y5RGtodFQ4MjBrQ29OVFR2RGRkVHVWNktqSGNKUUxEdVlqejRUaUZjQmR4bEdEdTVPdGJ5aDMwdXR6QWQvU2VzRExNbkR5UkxmaDliZDdHdWR2TTY3YmFjcVVnU01RVENUQUdhcE9pWFJUUmVlY3RCUFhJQWlreFJ3T3V1ZzJTa2pNV0VRNGtHTVlQSi9ZSm41MHNHMW5GZXpEVUFzemh6dHMwczJpaXdLZWFtaTFpODExaWpWWjdVanJEdjEyRCthTk9FbzhBdGIrMXdXUElZODJvTXZYTENWTm5Id0U2VkRKM2pIYytsMGtvUGZqUWZEaVhrbFZGeVo4L2dBYTE5VmFTOEJJUHgxcjF4RGNuNUxYL0lvdUgrTlNNK004YkFuZlVncE8xUVA2d0dKK2pJNlFFQkg0YjVFTTNEREo4ak5rK2ZBTzd4aStvMmJsdWlWL2psaUdmcE9hRWNSZFFoR3RuUTFNRmxyaGlVK01kcjhYdG00TzN4UHV6ZTg4TWExelRFYW41dEx3UFhaK3plamRXMG9YUzdiTTFmTHNEcTFtTGRCWGlBNm1SemxwbzQ1YkxWQVdRaDkwZUFMQzB4bHZqSlkyQmNoRHdhcUlyUjRjRXRObXhxZ1pSdlIxcWNUbFZ0SlRMaTNxdjlsMmswNC8zbDd0ZmwrUk9INm5IUy9HalgwVE5qc3RveXNDdEZLWnNFamU5T0VuYjZScEN0YTl1NUVoSVlGU205K2hiK0hRalFTV1IvSkphcTBkRGtIOTRpbmQzUitDK2xTYTdnSWtzZ25FRFpZcWZ0WWk0eHVqM0wzTy9sVmtCRnhoK1JMMTZZTDRYSE9wM3BUTU4xckYvcHRZeTBnT2FIZitlYUw2Z1RqbkgrRU5GSzFIbVBzR2dWRGQvWDRISXFHbFozaDczREdrMWlUWXJyUDJQWSszc0Jwa2pHUXhYSEtFeWkxVWsrWkVGVG9TUEcraVNFV2VMVnJEWE92UjFyV2NtcjJ2OG1qd0RnK1lySEtBaVNEdFE1VkFjRkl0TnExQlpJVnRTQldGbVFEMkVoYVN5V3Yrb0VyV0Vpb3FGUnMzQjhubW9RS3d2RTlzYXlrdkZyaXk1NzE3ZFVlMlI4SmVxK1A0ZXdGNW9zcGpzVjRvazM2VWQweEE5dURaSVBFNGI4U0NkUThZNW51NEQvWm41VmF3OEdMa3U2MG1qUkExMkFhTzlyZm1MNUxQTzlQTTRLOG1UUjhBK1lWb2V4d2g5c2xFcExnTG44OHMzVXB1WThnbFpnNjV6cVVCRFRoQ3M3WDZoR2M2Zk14dDBpYi9kejhKY0wzQXJncGxzM1NHV21pOGFLNU96RWozOENjcEFXWVVjYVFCWTczVW16bTJPb1BiM0ZZMFAzWHZheWtOREYrcHNQaFlYMTdJdGs4WlRwU21aeFBqOUJsbWNScmJpQTJyWkZ1YmU4Vk9HK2FSS2xtTU1RUzdjTE94SVZrWFhYTUNMM24wQktsa3Z1THh0Um1lcFk3TFJ4aEc5VU1LQWwxRjN4L0FuQzM5aTloVllZaXk3ZUZqWGc0UkZzYnhwM1B0Zlc4eFFHaUFoYWhscVJncGd0VGtIR0lSWjY5ZGsrWnA2WDZtU3pEMmRuUkcvQXU0RXIxUmU1OXB4WkI2WThZUXF3RC9mVnZTcUUwcnoxUUk3TEg4M0ttbTg5eFFSTE9xSTRNSGNDeEVQQnVJZVorVXVOMEtjaWYxaUZ5cEhxdFdzVXdnTlYrekN6SnVOamNwN0VuU1lGcjk5UDI3d2dqd2pxYTFyS3VJMHVpWmJSUDRrMkhndWduSXUxYkoxY2FiTEVkRWhNRGVlSWRRWUdrUlJHV0VzMm9vZDZ2QTU2citpSVNQbS9sRnFheUFxeDQzaWs2emk1ZGU2TjhhR3djZmFKU3g4aFVtb0phTVlHQUVnYk9pclFERmI3NXpiYVBZZ28rcUxBc2MzdDhQMlFndE03RWE2MCtkYVdzMTlXMzhBem03cCtzdDkwUEVlcEhNNlJJdGZsYmRIdzVacE83OC95WEtMOGQ1SlZyd3o1TjhxRjQrVlVld2JSS1ZSendFZE5wTExHaHpjR1N0RFJnbWROdW00cVE5TGFmVGhhT0NmOXl3QWdvTVpnTjRTTU5haEUwWnlITTBhVDROS1N2OUJ2NkprYkU2ZFBTcy8rQUdZRXVZc25GTHFQMzh5V2p2eWRkQmY1cEpxOEhkYXZXbUpEWmY2UlJBTGlkRTNQYncvY3V6TUpYTGZWbVhpVHpUQUNGYWYzNitPUHgyWG5DZ3RYR3dHV0ZQRzlwMHErVU5FeHR6eHRONFU5QmRDdzJ4ZG94dzhmS21CMWo2Sk1ESW9YOGZqMWljWWFiemhwTkV6T3grQzFzL3dDZHZlQ2N4SWgvOTI5V0tRUFJNZ0VVNGhVZlBPTUs0YTlyZWFhVGNDMnZFckNkZnJiVExmVXFPeGQyUWdSYTIyVitwemFUbW55L1liNnVTUUlVbFB2YlBVZUM2UE1DTzAwMmhrZG5tcEhpTDNzYVpBdkdzUUZBb3VzMXQveGJuY0VXRnJrR1A1Z1FvenpSUFRGZlgrejJJakdRc1dCZ1F4VURhNzVkVmpiQmJvVW1OWGhxNlNGaFJiNjRqU1dTc21DT3llMDNvV25UQ28zK3FvSkZLdW9YMk1DUWJLb0o5YTNid01lZnJlM3AxWW9LWTVmckgxaFBkem9TSVlEc2NTc0Z2QnoycC9UU0FYQmhyN2FXMUtyakZzTDlRZjJvSUZhdE5YQ09YOUpvQ01aL2V1M1BlVTFhTjlzRThFMk85ZXVPejBFS0VwSnhtY3Z0eVJHVWRLNzl5YWwwNkZ0bm9jWWFzTzlrN2tSZjZFNDFlS2dnazJpbE9vaXZRWWt4MWZ6UjdWT1hkZk1yeThOaUgrM2NVaFVoOUlPVC9VZk1YY29YbG9LV2VzdkllSVE0YkFWcDF4bHd5QjB3VmMvckF1UTYrb0Rsd3VKaG5HSjJrMWhJOGw4T1g0bnFGdVJxSjJReW54MGgwSXd5dHZjZnQvUVdBRzRpOTIxSmU4Yk9wZ2VnRk5RcGVRWGJ3aENmTG5reTVrOXpRTVBPTENLWEpWd2NvZFRwSW1EQXh0L25WN0o2TTMrMXR5NGVIc2RwN2M2VFdpOUtLOXlvUGpHSzU1SXZqRGpTUXFuN3pNRmU1WEo3cEtTN1IvZkFwOHRSL2swU1BweThld0tmZ0E2NVFsaVJ1ak0rRW5wZXczZnZwUUYwM2FJbS9LdFE2aXhSbUdSUklQMjBBY1hqSTd2ZmdtQ0cxN21rTmZXV1lvaW1XQnM2V3R1MGpxQyszODZ1KzkySU5zTGFNaFJCQ0hmZXJsdGY0WkJYKy85NGRIM3dPOTR4M2dDVmM5bExkN3lmWC9VcTNGTHVhOW9RNHpjRnhSNzZSRUx5bW5jTVdDSFk0WUY2Q3lSaDhoZ2dTeDRWcnpQc0pWNUtaelBIOGZUOGxsc3FCRGpwN2NNdGk5emJ5UFdVbXN0MUx4UWRRdCtoNE1nbHplc3ZtbGhkc3BsTDdtdjB3RGFubmM4WFZmRzR5UEFRaXZpVkhkK0lHbTc2TFVsL3VjTnV0UTBkYkZWbCtONTl2bzA0YXY5SlpqR2RqR21XaGJjblZ2THNYTWkvTUxWaHoyemJFaVd5c2NPS0ZPOGVrejd4TmdSak82NUJYcFdJZTB3Sm1pRjNKMGpWN0RLNDE2aWZxZjg1L2hTQlNNSTVFZ2UyN21ZVXNlazZrbEMxeEgxN1ZkdGwyRFFLOXBwbEtDZkk2N0FlczlHYW1nbng1bS9ueFNid0pJSk1jcmdUU1lMNERvelFNelhwcW5uNkdKaUpvQWtVMm5tc0hoMnVkQzlrdnNvTmhqczM5bDRINjlVN1J5VXlNc3FDOURFWjhOR0FCTFJYQ3Q1aVZpTm4yZ0g1U096K0VtVG1UZXFmQWtEb0VWUExsQ2dMVjVRNVJmbEdZSndJWmd5OXFOa3NVeFgvTU5zVEZ0dUxwbytDbDB1Q09wZ01QZUFxS2tyQVhiNWpGLzg5ZTRVeTZLNDdCQzVCQmZXdjJSWGxaN2ZiNEZKTG9EMndzNzBNOUl2L0g4TFBRRFFtWnhWcS8wOUk3aDJWL3NzaWdzcndkblhIc3JHUStYcXhmYTlzdks3WWNBS0lYcEtGbk82UHhVM0hEUUxZTlE5OE4wczgvYnFtbm9McUJPTGdER0h3WGhHYmVLSnk4S2xjNVd2SnNFekFrV256c3JPWlJLNWZKMGl5OUxNWGo2MUlJczV1V0tzTDNaekdRcnFUV0NmQVNzL3p1VEpiZmNoNGo2Y0VBOENvS1RjVHJvTHlEQ0l0UTl3V1crVFdYU0ZJMmo3WU4zZlR0bVArYndGTDFkcU5zTzZZWDNVbHhJeWd5RUhkTTd4MFBSRDRkSmppVmZzUnZQd1hxYi9xYXJxMzNIZ0h4SzJweDZ5TDVFR2hNL1dsSXZiRXZsc0wxUERxelVLeVVrZmRjSEsvV092amN0QVFwblRRUVNGbU9CTmxpMFZocy9obUt6cjVyRkdYZEpmendiOFgyd01JNGRtQ0FaZmxSK05UbkVudFR2eUdpS0lGNmNJZUs2QzhFdTREbUVDUU0xMnZHSDAzU1VLM2pBbzZDaFFZbUlrMkFVRDR2QTBXS0pBelk3ME1GeGZJa3VBQ0Y5UmNYbUlaZG9ocGtiVzlHbCttVUZyRDZkdVcyakdDeFNVWStNUDAyeHpacTRSRjlQSURGUlNWcEplUDdCQzl0czlLTjFadXpIMVZ3SitUaEt1WVFoWEFIa1RVeUFZcGsrdktvNFVPZkNycDJzaTQrcEt5WGFQdUJ1Wkpib2c2YmlCL3dsMGUzZ0RTa0w1ZFBZb0RvdVpTSUdFbk5XZVJtN3ZYSmQyUldIRFE2Q0dDbjNOdTFCeEJ6YS9yVWh4VStkVTFabGozbXJiTEJsQ3NibWRVd09INStNUlUvVE5pU1oxbnBmQ1lvY0NRQ0xUbkxkUi9RVFlpdDBqRFNja2xLUmNvWUxmSm1Na05MeHFTNWdIOS9NVndKalhWN1MwM3dkZXJTcUQzUHdYMTI4UGhFakRIN2pVQ0VIem1XZEFvbzBWTE1sWnVYZnREUmViVFYwUzVNNk5yelZSdHRvMXRXa2YrUWcxQVB3b216bXdWUlAwell6YTA0eEpWbVFQN2Z4bEhtSitHZXBFY3lrYVFxVk9uUUZWQVduekpTYVA3S0FxNjlLMDZLc3hZVmJqRVY3ekd4NVp0OWVWWUJ3R3pHVjhydklvRUpxejBxMmNoY0lyTFZhMHA1Mjk0RnVtK2lHWHIxMXR1UFdvQVVCbzlhcFowQVRZTnBUcGQyQmN4ZTIzM05wamQ3MVY0N2tUdTVscWlBZ0QrWm9tWHBNNzNyTWhCaEJxTHg1ZUJna2VQaEZiM01BTFM3VC9IanJ0VnJsUkRaMU5EQmtpTWp5eGx6Nkd2ZHNCQytwVFFXTWVkNzZxMmJsMnVHMmVUV2VRMm1aZDE5YzVWUnpzQ3pZd0x3WFBPblN1R2N5MTRaUmUrdVdtSy9ZcS81dDNVaVpmMERkdHp0SW9uTVlYUHlZUURIZEMzT2h2ZXp1emZQQnJVSG1IUEdXc3g3YktWNklVaEl4Q08wRmNEbE0wbkVWOW9pQi9TYlFGZFN0eDJIK3h0Z0RmV1BMWW5hcTdIZ05VckhIeCs2MkROY2d3a0k0TkwvQnZuUGVrcTJ1SFRFWGR3NTQ2WDI0MnR6d0dMVkl2d2YrYzFvTEdpVExqakVYV0dRSkRnSFVFamxWdUhIWFRqVFdkTjVRYzdGNy9kZi9URXV0a1B0S0VzcE1xZ1BrTmNyb2lQc0FkUkZPeisxUXU1MzJ0eU5EazVFUUpIV2Y3Z1ozZVBnclNKUXBSN3hHQ1hWdUxyU2hLZTVXWHpJZ2pCdUM4Q2diM3BoY3NqWmQ3SEs5TCtGZHFZL3FxeGdyWkVnaGxzTXNKU0k1T1puRzlOSEVzOEtzWE92QWY3dUY5bk9UM0FUM1hHMW5GS3ZaV0pBOGYrRWUyb0tjdCtYZTdQTSsrUkFhdE1CSHphMmJPYTZrRzFiMXdrZFh6SjQvVG8wZDBpdGhoTTJBbEZxWWlkZFB4WkdDeitXVUF1dTFibUZOcmZ6RmxzOCtPeW1GKzFFTlVBaFNEcUUwOXlHTlpINGp5ZFN6MUFJZlhTM1pwZzZnYjFvTVdGd25sSDZ4dGRMc2NLVWMrc1JsYmtub0xHZEJ0M3FCdHo0b01PVEl5VHpHckVOK2N6YiswdGYvTGNPQ0syQWVZVDNHNEtvVGN1RzErRFRYUG1KVXcvMVBiYndyaUZ1eXJYNm53MWhWYU1idVFSWTRUNUVuTnJXRWd2TUVQZk44UDZuSHUyaG9aWmpsR1dSb2ZvUVJIR2VWTFhBb2dSZmhaSm9ocmpJQ2NkMVZwY1NnQWNpaVV0Rno0Y09kL0IvMHhzZVlEcVlMU01lcjRvRUdoUis0ZWVGRWNYSjg4b0ZUMHpxTE1DNVhPTk1vb2hhdCtNZ0FGaHlLaFlmMjZHMlBmcGx6VFRmVktONG0ySmUrUjFNOG91NnZRSmhncHUweGVjMWQyUTcwNVhPVFh2RTdyenl4Y3NVclR3M1dENHBvRlh1M3lzN3BUeTQxVzJBb09wZTJFYmpJVTg2RE9CUGhGaXExZzFDMTBDVm9Uc3JuQnBOWkVleFowNjV3ZmNxdWZxbDB2N2k0N1lVUzBIRXVLUFREVlArK2dqTExVRkVvNm1leHM5aTRWMWJRR1loeDNETUhiUG5jYzAxNVZFTFlxdWxqYUpQS0d4c2xvSlBpanV1ZXNmZ1g3WVZKY2tTbWJnZEJ4OWdwM0pEc05BZkpqSHVrS2xuTG5SbVhWMXZ4Z2o2RVQxanBKbHJ1TlpkZ2MzZTJ1clVkWXRyZ1VkM21lWmk4VFNSR1ZtM0VNdFhvTFFMckx3MXpqUmZUbUo0Q3pUTU94SEZtc2RvMHRwWVdMalVtQ2ErSi9EaGpSU0pVRWU0Y2twQkwvaU1TOVhFMlNaaVlpUG11dExBS3FmeVRtSXNlcGVzVk1kb3ozTUI4MTBXL01ZUTZsUFNzc3N2MHc3NjlacDZERGtiUnQzci9JL3BOY2tQR3lhTmt4cWZMQktuNHVQUGdQemNjM0hyMGNuQ1NqdXJScG1iODU0MmcyQ3RKSE5vS3pLMDI1TkVlb1hITkk2S2dLaWRJc3hWcllzS3kveGxEYmJSQjhaREs3L1lMY051VTNMV0s3Y2Y1M3Q4T05qWWJwQW9yaEo1c0g0QmliZTdiMDBpK1ZCdVZZRW1ndjNUS1Job1lraHlTL3kwZlNLKzMvNFNFWkN3OUtCbnl2QU9IL0pBdjI1d3U1UFA1WGlpbFZFZ01YTmhIOXlHQzhGSG1wSFpoaU55eitSN2sxOGN2NXhCRDdQeDVKWDN6bG9VWU5EV1VGV3V0SzVnUmJ3YUhRdi9KWll2K3F2Wnk5MVhieXdzcm12dXBvSU1EYnhySmhFbXNnRzBxMWlXTjFZaHErcnd3S0lZTG9qSy9TaXZZMkdsSm9NVnk2c01XbXo1RmhXdjRvb2VVTSthL00weVVZN0hCaWZRQkpOaDcxRW92bk5sU1ROTEtBa3ZiUWo0czYzNk5DK0NLckovR04xcDMyWjh0cUNpaTlGNDAveUQ3UGRHK0pOWDlvL25yVGdiUTZQUlZJMEFMN0RRUDdweTVMZ05NUk5jRFdlaUgvQ25HQ2JYSVA5RlhPVWdzOEJxKyswWEtnNGJPeVE5bjIwR1krZ2hycFE4VkxnUDFORG5wQjRkajAwVkdIZnNjTU5OblNwbnpGbkI1ZHFKdjg3QllkQVhNWVZoN0ZQRysyN09oMUplUk5GOXFkVmRlWVVaNXRHL3dyNHBFa3JIVy9lN0s3enNmdVFGL3lCNU8zVjhLb0RERHdWYkJ5a3RuT1A5ekRXSFYzbmRTcXEwdUtRcWk1MHUwa1V6QkdVTUhETzdueHM5OTM4ZkJiTFZqVmJRWEJwWVpTL2w5U3RiUG1CcXVSM2xScGZLSzgweGJSUDQ2dkk4eTRSc2xxRGFEZHpWNDVWZTRFeVpWQi9odWo0alFwdENac0hxMXdpbVNNUUtzWWFKQ2Y1WXBLNThUQ2RqRy9uTXdnbVdRcnFic0N6QTZ0ajJoN2hNQUJTaXRZZWJQTXZyQWtDTFR2cU1QNEZHNXRFdG92aHBtSFh2UzZjTjlJNlJFQnB5eXI5K05KRFVRc2djbUJ4OWFYeEdEUkMvVU85RWoveXlmaDJsayt6dDRhVndacW53N2RQMUVvcXdueS9GNTQwbm5tWjdTYWtDVmorVEhPYWhGYXF0Q0E4UEZRblBQV2l1RkxxcitocWhWaWx4aGIxNG84TTZNYTJEVFBaQ2l3emVYckdwb202M2pRaHVYUzIwdTd6Z1gyTDdLWTVEVC9iTUVubkdLQjhMaC9UOW50ZVpGWCtocEtJbERQNWRVRVRkbTlTVlFoVEliMkNmb0ZjVEoxb1B1NjF2U3lDUXhDQW1xYjVxMEpLWmtqTjhaOWx4SWFGNzVZbXZ5aG5rZWNGZm1VcEVYY2FUdWYvQ0pMdmprQUdYU3Q0S0NNelNZeDdLYnJnK2cvSFdQUDQvMnJjRzVVR2hKVkp5czZYcFJ0VTcwRzdBUXd3SnBCTmVSRGo3RUxyektqendpd05TWGVqbE0yUHpsdHNvR0xUZGRJeVMrUndIdTdVOVJVaDdOZng0YXJkdE1aeEx0YzhrcytncHhhckhzRkw1SjBJTFhURFY2UzJuWm5pVS9YUTUwNGplc0NFVHo1M1hxdUlmNnZuNWthMzlKTDJIbStRcGhhM2diMUZoTVFvY29FaDJLaE9ERFdKK0hqeDk5M0M4eTVlbHlyL2E4NXRXSlUyZi85QlowOXRqa2E2OEVvM2d6dHVCUTYxTGJHOTlwS2JWdDlFQVg5aUNoNE5EN2I4S2kvampmNDk1V1M3YVBGRDgrSFVRT3ZNL0ZTMytLdlZIeXlhKy9TQ01meVhIOThsd09pUHgrb2hvWE9RTnNvaXBZSi9ZVmNSZFVnWjF3V2l6RFJkR28vYXJkdFNQcFhXYzRubmlIY004eEVvUVZoS3labmhUY0VEQVVHRDZ0SVBPMmpOWlJ5USsxZkNaWTREL0lxcldOZ0UxWmJ2eDB1Y2FuUlhkM3lYeE1Fc0tXN05ucnlqWmZldGFGZ0NpMUwxUGdUSWpKcHRSVWJHdGVDY0hFQ3dwaWFMMU1menpQSWFrU2NIcUxLZnFSQjdWZnZnSU1YTDhsaGxLdmNtWGhwQmRQS2VqTlVHb3dZUEs5WWNTcGpRekFwSGhhWXc3K1lrYzJuYXRXOEp1U3kvZDVVN00vQjRMZTRFQ2I0SmhjV2pxcFVWY1Zqbzk4STNNeDUxallzeDJRZkdydkVLNDhkTm56MlhtTy9DYmNLYy9HKzd4UzJEUE5wOFpuMU9CeFJDT21jSjIzQW9WUk1KSW5iSWU4eTJCbHRKemViOWhMZ1J3VGlsR0lubWg3bThmM20xSHdWN1dSK1oyWndMUjNQbXp5andIVFArSTQzTDFIOElwSndiNnE2YU1zRjl6U3JQQXFQcU1kVDRzWnA5Y3hjWHc4VGp1QndnOEtNdHRmSXhpSmppeG5BdHN0TERXMkRVVm9PNEVPT3daT2FXOHkwRjJwWE02OXFESklDMGNhSFFoREh3cCs4ZzZMcWJ2aE5XYW0xM0p5OGE0aVBvN1RGMUVveVNwM2plQnRZWWxlcFJSYlV4UHJ6d3NjeGVQUlIxalp5a3QwY2I4RU1wR2hnWmRJU3dBa2I5UTFNZ0ltV1VSc0tselJaSXdKeDN2ckVwZFJhb3pPWk1iaUtteUlBK21oMERSalFvc1RGYkxpUFFySEdpZEhwZXJDVWJva0ZxSDA3UDZlSndrYnYrZnJoVVRNdzZSOFM0Tlp0NUkyRHArRnBUVWJpb1YyUmZwVFFYU2lLSDFXaXl1N2FlQkFDaGFSaUxid1lhL3YzcklDZ1BtZXhhN2oyd1hkK3B6U2lYNFpacjUrUk52c3pjYjFVWlFnQkZqSmhGWmtxNmFJODdYekVsTDk1RlFsdlpRVmhYWEMzem1jU0NlRmloWUc3WTFpV0ZoTkZRWjQ2SS9pNVhDbjVMbnZCRUpjUi9PWDRwZ0dBL1V2cTJaaEFGNGJWSzZEdHJ0cWhOdFRXMGRNTXFQY0M2MnMrM0diOStNaUFVeDZ2dFJyTWcxVTlxNFdtMjdueFVDWGd2aC9nV09qZk5xZ0grU3FYV0ZxSEJwT3MxUFZISWtSTFdvcEs1a3J5dDQ2Y3RnbE8zNVFOUElnQ2N5cUNtRWFmd0ZNMXhwK1hPWlczRGhzV0JZekVqVFp1Wm9MV2x4QnBBVmhJUmh2dG84UXRsazV6UWxqdy91ZUhlMVJJaXBBR2FJa0Y5aHpEUzhIbHlsTXRuNW1wUGl0SlJWVlB1Zmp2WjZ4RWdNREd0OE54WW9KWWhUZnIwMlRyUVNrU0hhUkdQT3FkallPOGJjanYwVDJSNGRrRGJyWjk0Qnp5ZkRLc0U1ZkJHQ2FMQjAvMHBKY1Bxc0tJVVVUTldCK1dVTUt4VnFBcVRoK0MrQ3lMYWYrR1ZSaXNiMU55a3dLN2JxaDJwQ09mc2tTUnc5cFRNbFlyVkNGT21MR0dQTFBEb241TzZYWWZxMjBQVC9TUGRHNkZ3YzU5UllMbWlHeXpxQ0drNC9nRUkyVk9EektZZk9iNmY0RDVjTVRQWDNZNmdZeEVFL21OSjhTWk5LOTV6ZUU4OVBFN1RBV0FEYm9DUnZHVFRFY0dKYXR1YmFpVHk3b1pGMlFCNUtISDdnNTVrclpUREY3eTRqZ2pnZElGc2lJSFBvM08yaktveXR0cUluZlE0VWxVVGxiN0VPTllZNE9RaUIzWFQrZUxXUnNvUUREM1hadEJYdXo4ZXpNQVl4a1k0U0FSM3lZbUVXV2tObGNySWIvZWV1Z1ZqVC9mUTdidGxaeENPcFlQWnJhQ3dadTY2TkpwSzF0bjIxaFN2Y1haM2tnSExPTXZrY1hucUJDTmVUdHgzZDBGZERMWlI3WmZYaVJkK1lpQ2ZrVEJtWGdPZnR2V1JlMGNyOUlWWTk1dlVKWHhBdzAvcm9EUlJzZkpYcysrR1djQUNHOStIb29NRTg0MDZZMWpDdk5ZZDFKU21WMG1IaVA3RHJMNmhGODNXdlBTcklMM3VORXk0SWZXT3dMTjNUTzVkUG1GdFRkVnUvQ01uMTZoeERoS2h3Ykw3cUxWVzMyUUVXeHV3cGtCKzNjT25iaStiREZ2TVVuSkZGQzRIUS85RENadFdGYW40NUZuQzc0NmU2cHdpZWczZ3MzRGNIcmxUQUorN2gwUGJVUDlxZ2hoUTZNeCtJYmhPVHR1Z2xqdnBJdmtrandsSWJkdmllNUVUVExPU3FIQnVJdGI4U2NMalp4bXhMTW5pbVkrTkF4MXlCbGk1NnZwRk9mVHhsaTZnZzd0UStxY3dGQUNUenkxa3F6Tkg0STlOSjRlcis5aGJQK3VpT2owSi9SZ1dpZjh0ZjZpcU5oQkxpOVkrdmJhNHprbjZtTFhrdlZPTnFDanhXMnFsQ3N6SXdXMXZTemFrS1RocUxYQ1lvTDNyMVl5QlBycDYvdFptSXR4UkdEZ2ExZm9TOWMxa1B3R01OMVd6MUtYYThnR0tvYnVqZ3NtZXQvOFpBTmtJN2gyZVJzN1VocEZiVjh6Sk5GUWFSNitwWDE0K04wN1FtRThXUkl3Skk2Wkc4QjdyS1l6d2NvMUlDZStobmpkQVJYSjdDSGltN2FDamhxeU9XQS8wUlhNWVdvYktrSmR2bGZYVGdVSHo5bkVPQ0VjeGNXcFhKUlpaTzZ3R1g5U3VOb3p4N3BBMXRPcFpIWmwvTFFnQWZUemhpWDJLMXNKcUgyZW1MWnFxRC84M2pxVXdnbUgyMDM0N2QzZlRjc08vNXA0czgrNlorOWRoM1A2czUyT2ZhWGJoYlJDcTlDdCs2QXZTWHNvczdJTkFSbUVHSVB0SGVMaVd5aTZNRWZ4bDkzd3o4VjJISElrOVVJeEU1MnFEOUxVZ3JNQmZQV3Nic0tWNmRMTS9EekJrejZnMXY0azBMcGVXeU9KWVc2UHd0UUdNT2JpQnl0YlBTL3dGZVQ0bmI3RU9hZGRzMDR4SHdUU3NYNHRBSUdwQVgydjZoY0U2eGI1WGlzenhXbWIxczBpUXc1VTNFSVd2MUhBRFFZZ2hQSDA5OEM2c2k2aTZaZjF2WmFNT1pxYUlrTGNXQk1VTGY2ZFZJM21pSFNCUnNvNDZVZmo0cmR6WW0wcFlDSkhGTlkyQjdXM2VraUFyb3dFVXM1eE9tU2pDUXNKazhVYmpkVVZ2YXlIQlp6cUQ4NlE3QkVJa0RHbVdPL2I4dHl3ZDJENEVraHRMY3FodzAyeTRkeFBrRTI1dUltNW5EVzlheTFwSEVTZk9yOStTSE5TZG9jNVdtdysyMzZRdHVLTHFnNStjeVcvOXhaSCtNZjFtMi92TWN1VEQ2YnoyTHdHUFlQeHZiWFg5N0Rjc0hlcHhCeVlOeDhiaW9SRTF3U3pTNi9nZ0J4UVBCcFREa1ZqdlhtNTBjNStvRWYwcHJCOVQ1TTdlS3NCaUJsekd6dUJIM3BDbE9YMFh0UjBiZFRFNFFjeXFkSC9RRU1LaERYRnpPemZGdmplM0xlTVVvWkZSc3dkaGdXS3FRenJVSElJM0Z6ZE56bFZrNlJFQVF6d25qTlhBQTllVkVrZ2xSbGJwaVlNdkdId1dpQTZrM2h3bTdxS0tPQW5PZG1jSjR6cDNLZjlpSXBVc3BYMnloZjRzUi91bXo5Q3Z5K2JIT0s4WE8vUFNWLzlvYjhTSEdyOC9tZ3gvVjk2cFdlS1MrSWlhOWN0YWpTaE4xR3dmcnJSbnJIa0ZDVUdJYjJ6M1VmNEFhRGV4aGQrR05zN01TeUlITUhQcDJSV0FsMDBZYXVSeE9ySDZNOEh4S2I3UE0yUDJCZXduTEFSc2NLZEtBMnE0VXIvcll3N0FxcmNyWkJRa2w2SU5WYS8zenRxT2o1ejZET25TbmIvRENHK0h0UncwZDRWMW1Pa2g1SDhhUFdERXAzZzMvVTVuV3gvL2VGaTA2bXV5WWx5a2VqR1djOWtiSlMrZktzaUhyOGs0bU50SDUvQWF6dzdoK1dCZ1NIUHliZTk5ZjlObDY0cDVXbDNUYS9ScE9EdDlmVDJTa3d3OHhxeXg1YW9ncis5WElYczJWVTh3ZmNlMEozY2c5dUVWYVprR2dWckNZTy9hZWNydXdPeThocGJldW1PbG9YSFlBVGFoeGZMdk5JL3FJYlR6M0FQMmxac0tnY3JSMFpXT3ZGVS94VGxpUVJKYk82dEdYendDcDVDS0hmdnkySS90Y09SS1FYelNPYmdZamNuSXJacHQ2ZjhMQVowZ1I2cFYyQmJTTTNxdHpuL3A3ZEh6dTNLTEpSVVc1SnRMRG82bHlVQytGenN6VUl1T1VYcmo2SHVlZkdVNHhNMlNob3gzUnQ3blV5M1krTEU2dGEyWUxITzNrZlhrUjlGZFpoZWlaS1NHNENldEVhU0JjaFVBc0lvWW5BZ0pvSUZMQWhWaFB1TFIwUE5iYUg4RjBtYzdhNDFkU0psSGUwZ3UzZ2ZrQXpMZDdKWWk0U0YvREZKbUhOQnN5L0hGakxUNDA1NE1DS016Yzd2OHZpWWsrZ3FiUnMzT2hTakI3dTFxa3E3b0RSd0NhUUtocUwvc3dUREJXVEp6dW9GZXNkWEd0NThmM3JQUGpabi9NNVBkR2Z0RFJTWEducUpIeVluOFpZeUd3MGlwcHdQUnZVOXh6RnZXNEIwV1hsZUk1TXVHOVBXSmphQmovMHJQV0IwYmxsTDBKdDJWdnkxajFxK2t6ckxsWEYxZHArSWFjNm1ZQ0pjRDVQZXlFU1d3ellQcXh5UVpad1h1MGNIMko0NFhmR1Y5TDVwQ3ZNOEVHUlg3TE9CRHJyZnBlY25ESE9KWGhaN0VnS2doVkY0cXN6bmRPYUhGRDd6cFJzeFcvWm5yL0pNdWEzclZHc1YweWFJVXFYVHpJUE5YZFVsYWZvOUtVQmh5QnJhTnZnNHFqV2lJS1dZZ2tkVHlxZ0cxVEFwZ2tvYXV0MWIvU2lzKzRxV1MzR2Y0MEJ3WjU5d2xHeDZDdVdMSWppRTFPTzRHUUMwZFlMWFRFOTBJTStFYWRydVBYMUtDL2pHK2dzMWI1R3pVeUVrNlBhOU52Vm1Ud2tndmFFRG1rWDlSRStJcmNWKzN3S1QvWGI1czFyVGJSYWlKZ3NoblVUTmlzcmFXYi95bUZTNnVjeDJFMUM2SGZ6MEFjYVNvK1Y2Zm1ObjRMbEpvVnNpYnJKS28rczk3dVk3cVE4RVl6K3N4YUN4QU9LcWpUUW1ZYU90NitUL3ZNMFlkWkxWb2hJRDcySm0wcGw3WnpYUW1JSGNQMFhSZlNGdURlT1hzVm9xT2hEWjlzNS9zbjRLMmUvbWZUdXcxR2gwbzlYdVZBQ3FpaEhVRHFidURuMktLdzVwbXVjRU83c0RtMUNvWjJkd1Y2NGJoY3NVTGx4Zk1QTEh1UEtwZnE0c2RsaGpzemY5MGlpQUVtcEFXRWpFTVA1eDFhUDFuSzRQNG9tWUREeUlsR2NlVHZDZFpPS2V5a2dHOUdwM0ZyNTRuRVZaKzVqSC9ZUGxwak9NTzdLOGNVY0M2V1cxVDEvTTRMNFZhQUFSdVY5Z01BbVJVd2NhRzE1WmoyN3YvVmxKUldINmVBc1pkU3Y5dTN3QmxRamMzOHlTZEswTTAraXlJYXZwaW9CemZmaStQT0kzYnVIVnRIa3JVWUV5d09zbktzUmNsbWF1NFdkQ1U5Y1IvK2kvakVuQVZpY3dmRS8xb2ROOVlCRE1jRjRzcmpIZ3oxWHQ3TERnSEx1cG9LdjVLUmxWWHY0VGZHVjVpcS85ZU5Ia1F2blVVVkNLVzIxNkdHZm5mMENnQml2S1VNVVl2Szd4SmRoNm1WUEx6eEJqT1FQUFJzZk53K0VuQkJmOTJzdzk2L0dDQ0lpY2gzWG5PQmZyaXNldkdLRlcxczRLYk5SK3p6eVB1eHkzWms3VXhFa0s1enBWNys3Z0RCNkpNVExPSDl1UDRtVDB2dVdIRjBPR0xMWm0wS2V3dE00MlF1SkhVelZGU0wzVlJ6YUVmUm9xZzJVTHB2RENjWjl2WTRueUxDaEtKYm83Ui9BckV3R29FZldSWU9sQ3FSNThrYnJmNHY3VUUvazdpamovWW8zaVRuSjJmTWZaVmtMUG1RSTNDODI1OGdQMWtPS2tuaHRhU1Yrbi9CbktScWhpdyttTWFMTDhkMGRVeXNIa0JNYjhtVHJwNmloaXJDaWFWWlJ5Y2tSVXJ4dFF0Um9TakRiNnBpeUZ6V3BRMzlkQzlYV3F2cDJhQ1ZnQzJtT3RoUXNLNm5QWUFrd01oMFVwbVN3Ukt5UlVRSjZQT0VKazU3UlN5OThhSEJxYndieGFQTlkyOU1XRXpxTXk2cW53aXlSc2FIdC9qTEY5RGFLOGlodXhsa1VRbllOeno2RlozWUFCWWtpeHpPOTd1ZTV1Q0lvMk1CVXArWWlseDJZR1ZvUzBoRzJMQWRydmp1Um9OVzkrWnhtZUJOcTI2TU5lSVFmbEFuQ2tuWGMxZnZpVWVaOTJLNkFzT1NVT08vbWRjWENRT3d0ays0QTQybE5OSjE4clYxUTQrc0g4SW45VlVWL1lFNlhzbUZGZ0ZQNG1OSTRGdDN2aG5lYzFFblJzVFhGRFJyL3UwMHZ1VmF2ZDM1aUwzZHQ1MHp0RFg0OFk0NjN5YS9hSFNPQUl1a1o5SG0xR3l2akEyQW0zN2lEZW9XeDJXckNvMDJGSUhYd1g2b2xlY2thOVBkdDNCamRnV3ErYUduTlFPVmVYWFluQjhsQSt6by9mMm1uOWhCOHlXV3FycVk4WFlHOURycUZHSExKTkRjdE9aeEpoZ0IvdmRob2V1amNuUXh4NHlKM2duQllrbSt0VkJNbWNVZlVCRzE3YVQ3MUdMbmlvYmRZcGI3K2tiSThSZW00Zm1tTVQvYVA5SHNsQWxVTjdrY0tVQmVkYmxwV0NQY2FUMFZiejBESUxZMStjQ1R6VmFoS0FFbGpPWWd5WEl3QTR5ZzVZb3hRWFdJa3VoNjBFdHRzR2ViZDJDQWUrVnNXVG02L2xHdEc0aUw5Q3h5TmE0M0R4WHVpdEtaQ2ZRV05MV0cyZE1TZHlxak9iQnJObXRjMTc5MUhvVXhVRFRzNEV3NHIyZ1RZYUVxSTRMYVVSTUdFRjdJOTFXNmlTMFhzNERFZ0s0QVA4ZjVQYlhVb2Q2WXVuL2FwN21pRzFrZ0s0SFlVOTJWOE9WejhXRkRwSTBqNTlLYW1QK3FpaVphaytCeUNFYWRNV010OGZDM2VKclcxbGZ3QW5GT3FFODFMZmJiSjdqMmFrMnNzV3Bjc25MY0RtWWkrTitDVmdkb1VLRGRQOHU0TTllaDBxUjVzMk4vM29RTkkwZlhRL3FIbTdBVS9FYTVoSzF2TUhxOStZTlFwdzdOcjBCeTBIZWU2eWp4dkZuUVJBbG1jS0h5em9Yc0oyTllCTnNXZHpiT2xlWkhQRUFkTnhpcS9vMkJXMXFHeG05TWRmZGFMbnp0TUZoMFA1TVE5SG9UcTlRelpRQkRxa0tncUpsbUJnUEdPQTFQOHhKNU9lZEJXd2hUTFJKLzBJY0sxNUNBUHVTamUwTWRPRHpMckVudDF4QTVPM0J4K3pYUHJBL0JZeEczR3g1a2ZFZnBXN2NJL0VtSGtYaXJVTHB4T3h0NWkweVFnWG5wc0RXZmFZMVk5OXhWdHZQK2pOOGxPbWRXcEU4S1hJS1BSS3hvQmxwTk9FeXpSVkh0VXRRdHl4YjNyUDZFVERPOWdXWFRjbk12UUtUWGJwM1BqOHNoRU9CRE5WbTNzTFRoMEJ5VU11eG0ybzNEdWl5U0x1NHJuakk0c1lNSFhQZGZtQWJVV1oxdHZvS09XZW02RnZxOEI4Zys1elpJalE3UG41NG1lZnp5M3pSWE1VTld4Y2Zid1kwVEhxVVpsOTc4UVM3SVlkSTc4LzhCUnBxRWp6Z3QyeDFVSC9JbWU3L08yTUlKN0IybjhKLzJsTXNDclpIWVpmMktIZEJ6Nmo3S0tVS1dqbEdYT0grWDNNenFyemYxdXA0dXAvN2VwMkZoKzlzQ2pvMVVRL2NFNm1CeW83RTVOQ2U1MTl1cmE2MFRGdmRJYlowUGJ4ZUhXajl1cytpS2RaaldKTzRGdXNITmxscXNnaEJhSGhPaFlqeUl5RHZ6QUFUTWowL2VPSStDdE9UajFQYXBZMldhVXlPWFhhbnpHVXo1Nnc1RmovUkhEU2w0N1VnaElJWUUwQURTV0RGMFdoZDRMcG9BUWpQR2c2L3BHK0lPT08yZkM1dGxOVis2SGp1dnljRnhxMVljMStKVklUNHdkUGcxTjlRY0Y4U3VyQkpLRjZoSkJGeW5ZQUhNMyt0c3U0Ri9RM2djYVNjR1FGWVVVNm90QXRJYUIvMGl3WU1DTWRhYXZGSUZSS1FTNmxNb0t2Q25CODh3MTkrNnd3T3BzTzdpVHg4V2RIWXZVN0xsUi9SMWNaUXZXRnI0dnJtQkJzdzhWRk9UcGdhRHprU2IrRzdFeXF1cmVQclRIRTc5RTdadVIxbnFWR25FanViU3pabXMzQmlKdkRTNGRHOWpwbUJvbVluNHVncFp2aHlBT3QySlR1VFZraEtMcG9QdVpXYjhRdFR5K3BYakNnVHcvelY2MzNsWTduc3IrT0lsbHlTVW1vOFU0Z294VHJLOXBoYW1Tb1plQ0gzeHpUTTc3dmpEU2lESHFuSHcrOW9yM1Z2cXFuTXV4M0Q2bTFXc0xQamFyaGRMY2lyN0t1VW5xeEYydGwyQnF3eUtCeGJvV0tPcHU0d29Mdml1MjU4K2ZsNVE1UWF3eE90M0NvZHFaTHJpbnd4M293c1FObFRqQUM3QlViUUFhQmVZa0JJdE42a2tPcmVaTjRsU3U5a05xdk9GY3E3WmlGbzFoUkxiSHpac1RqTWJsd1VUN3VJUnBuNDBjUzlDdVo2bEtFSnpNOGkyNmVDTU9pa3dNak5yUkhHM0g3R1N5WUxZUWthRitzWmEvVm1PdWp4MjFHRkQ2b1E0MHA4SXlnMlJJY3h1TW9mOWhYdHNOZERDdzhvN2luSVhTTGlTbGZDOFJvenJwc2J3NlpIdDQ5VHFrVzBQblZvSVlFVHNRa1l5ZUJnSmo1dWEvbGkybGdvT3RlUHBmRFlRU0lMbnc2blNhUWpTbWsrc3ZDbzE0TUsvczB1YlRCdjNUSUFkamlPWDBicGMvbnFQQjdOcGJmM2hQbmI3WTYvTWVGRks4RTB0ME5BaGpBTUpQdVpHK3hSa1p0bUpFYmVYZUlZQXJtUXFiRkZXUlFYUlRmVzJyN250Qlc3WE9lc2F6ZGdrS05ET3R4b2NrZlNCbnIrNDg4SE9VTE8rVXlaVTBLZHpGSHByY2Mvc3QyMWdQTkoxL0ozeEsrM3NxaEx0V0Y4ck51MEkzRmNmdHE2UXF1N3AzYk5yc0VjY2poMGFRa1lXZ3NZdldEalFWYWRmRE1RVU1CZDhzZkMzNEdwc3pqV0VFNHYvbU1ueTNZRUJuT0V6Zzg1T1crREtuYk9KR3h3R0dUamMvVDh0UFRjY3BJVXNOb3V2Qm1pb0FlVGttOE9LRGxoT2lFWTdwMkdDWmNxUUhZSmxZWDAzakZjc3pLUjdRSWZxNGpaVjRscmlpQ1NDYjBTSFI2YklkdElxdngvZ2lkUE5IWFZGUVI1NlFoVDE4NkIyWWYvUlc0ZXhhQ3YrcFhxMStYbmdjN3pudHN4a1RwUytJVmVuUVdEUytxdDhwYnpScWtRVFljakNPSStmZW84eEJFY1M5OUg4U1NoOHVOSEJic24yYkxxWFZLMnZxS09MMWhFZkhuYzMra0VhQUcyRUY5NjNXUElXaDhtMnJPTm14ME5yV1lIeWlDZ3V5ZmI2RTFkYmFNSlk1a1BpN3laSzNQdkp3V1ZmM3JleHpKcGFTYUUxQkcxN3V6YmlzR21IWFAxZVBPU1BPd3ptOG5hNnNkeHdqWTlVYXhNUjk4eERjbEJTeG9nQk1zMnlzbVo2K25RTWZ5NkRpVDBIa0w0VlAweHl5TmFPVURpT1E5akZZWUVTd1FLMVp2V1NSY1R1dXNmWnAwRStrQ3V0dUpXQll0ODJTS3MyVVplTi9yRHFFZHFwSXpveFozZThjTlZIMTM3ckV4bDA4TW1FNktWb3ZYanlxa0lrNU9SNWFUNDJ3OEd0b2lJTkF5dFFsT0RBTGF2L2VqZFB2SENteThlWmREQ3JtRCtSSnF3ZXVsZ3FGcFAyZjU0UVd4b1JicnRydkE2czREWks3eWdBbklIWTVoV1BhNm82dDgycGYwQXl4Q3lzenRIZXRPQytxVmJFZUtSaWFKNnMrNmhsWDBTV3NycDNwTk5Xc2FHMkhIY1l5a2tBb0xJRnhCYS92UzdUTWdQSElOQzFnT3RybStMZDFFR1grS0d5RDhERmhROHVDcFhFTWxyZTBObWhoT2FyQXpmd2tZUlRqMThzNEpQMzZIWUdwRjZLVy8zTUd5L3lOTXQ5ZjBOWjhuc2hCM2h6dXJ2MWd4QnFCNFV0WS9EL2NONWFMakc3cnl2dnN4RGw1OGFpTytEQnhGYzBzV2V2c2E4SEM4Z2oyYzBJei9jc2ZOSVhFL1ZCOHE3QUJVamRrbUxId2RrWDNCbVpEem5QbHRhc2ZSTGJTNWMzT3pFWlZ4VEdNaWhNUWtscGh1OEZjNjBObUxmOVdGTGh5QTFVTzh1QVZ3THZETVRJV0tsTTMrTGYrdVdkdFRUL296U1RBVHI4MHhUeFBkVjhNTmVEbWtTeWd5MWtDdzdld25rcUpHTFhRU0hRYkQzTUs2MG92dFZsUlNWNWg3ZkJOOS81bnBUdW5HemdWODFkU3R6RUdDdHBoV3QydS9aM0x1d0p5YXFtWThQNGlucTBSTjBiMWJkMVJQek9ZYXBkdDgyc0haSnArZ3lDWGR6SkhIVGhOM3hoWTN3MlQrQWkwMXVQZTk4YS9VOFBocituWlVKcHhtOXVpMzJQR2tvbG5jejdWTkhpRzZmYXVaQi9MQU02c1JTcjRWYmt3K0h2ZkxuRjhydVZKUTV4bmJyclRWdUhEa05RY2ljV2NyRFRrZVU2UnZ4SG9yS3ZyVTVqZkE4UEx3ZlNaZVowdC9DME82UStNT0pTZWxUdXgvZXlhbjJEU3c3emFJRGs1TW9UdzAwaUhzZzdmY3ErRnJSTVRDZDlHNFBDQVhpcU5NSUhFUlFlekMyVlpmL1lKdG1CMGphZ2xycTRZb3cyV2FucVovaE5POTJVRnVxbll1blMyMFN6bmVPa1hFcFpnOWJ5MStyaGliWjhndE1FQXpMbkoyTWhqcXpNbEJXaE14bmxTQ3pJQ21QNXhBckFNMkhqT2J3S2FQOFVwYlphMTJvdVY2Vlkrc3BtWnk5bm9WQTMyaS9sbmNJYVNrNGZUVThJbmFuSFlGeXR2K0gvc3Qvc2c2U0JIUWEweGhIZkxxamQ0V2JpOUJMOFl6ZzJJWDFqN21xQksxMlRaQlB0VXJEMkhLYWlRcVNvV2VlZ01FU3ZySVBnaTMyVXhNa3B4cFV6OUVMaVRXZjRqTTJWU1ErYTZrVnpuNFZDOEY2UUNpa3Rmdk1aQkdSYjlpVmlNSWZCMHVmQklBcHFZTjByYlJLVDEzbUZYanJsbFFwcG5ONkEzZ0tFNVpIWG9CZFFvcUhJbmZPVWhneG1yU0ZHM3RHaW1kTUY0THkwVXQ4RjFQeXJlT3RHQ2JLMGxCeVo0bi9PYjJ2cS9GeG9zcklVNjFIT1dDckI0NWkxeGNTOEtpNWFGNW1SYWpJN0FHSUtzb0VucUtQeGNDVjh1dG45YWlUWjEvOUN3WFdtdURLMGl1UStORnJualVxZUJUY2tMYVBTYVF4NGh5d0ppNG9PNktGUDNXNzNxVkp5TTNQenI0MmRCdHIvUlorRkdZTVJtbEpQVWdxQkhkRXRBeC9LR3phZzJOeVFBbHI4d09nL0FjYUxVQ2M2bGJzWUk4aFpERnp4OC9jTWhHN291UDIvUXhCUzd3U3MyZHpHZkZ3OFNtZkNQUjRDMzhOMTFWTmpqb0ZQRXdxSFoxWDBUZ1N1K2xPbDJUTFhPUUNsTzdZQjBJcksrSkMvb0l4MkdscDV3UmJOQ0NMTkc3Sng5RVRsZFFzRE1uZ25CY2I4eG1kNlVYZkpCNlJsbjFLZHd3cU9PWHF5L2RxZ2RudEljMzEzMzlnNVB0U2RGTENkWmdET3JTMGJSM0JVcWFsdlpna2FwaEpCNE5kcnlyWUtPWmYzbmI4TVorbmFYdHNZa3N0bHFOV1NMdHlwaEdlN2xwRUFFQkgrdTl2Q3ZGUEluNWlHVzcxRHllRkVVM1B2dERJd0xBRFgza3hlem55RUpwYW9aTExhNklybStubGdheUdrUFIxRHo4MSs4UzlzV1RDalJEemdxMUVHNktUcWdWVnErN2o4RkppSE9FS1U1bWtPRFV3alBya0JaTXAvTW9NV3RiWENQUFlmd1RJTWpmQzNydGhTOWVkanl0b3VGMnN6M3owVVVsVGtRR1hEVlZXUExLalNXc1pOZzVwdlFFNUQvSi9ZQmZNRkQyOENuOG1zR0tHa1FuTURDcWVQbGtrSTF1d3Rtb01JVVhYNkl4VU9VaFA4Y2lGUFhoMXVJdUFHa0RpcjA0QkUrRGFiLzhHc2lqNHg2RzBTaEVWSkNYVHpBelo1eTR3ZlZTQkd2cVEzQmR4MnpqdnRxUEYyc2I4WUV2QWRITHRiTWRjODFRZVNlbngyR3IvVERSUm9xeW1HSGRYUWVEellITUdlUGhyMjZHMGpVbDA3ZlZETDhta3h5S3kreTNUMFlKekM4TzRlWEpOS3liWTBLYVZ1cFYzOVNQV3I5MHlnVjNCN3ZFR0VSVys4MWthVzNzRGJOb05kalo1YytxeXl2QkRRMkhQYm1ROTY4eVZuMk1MK1NPaFZURUNkNjMyNWJmUFV3Vjdld0Erb3VVSHl3RUFTMFBYNExhTGF5MkRlSDFHanNiWVU5RVlJVVM0L09CNEJER1dreWZQTGs2SXY3b2ZVclpwYnlDSkRrSTFoQkpNbGFZM0cwalVCQXlqVkNFVUViZVBrZjRENGhvMWxvYjJOVzd3UUpSM0x3b3Z2c0lRWTVnMnczWlJBWUN3VE5QNzBRK1ZETzJKOWxEbC9BYis1VWR4YjkyODNFMG9PYzQrRS9CSHJxekJIc1Y2b1N0bk1OczlsSzdUVThsRzhheDNoU3hrR2tSQmdZM1FZaXQ3ZUdkYVQ4UGdjUGhqTjZMTDFTb2pBN013RmNhdCs0T3cvMlNXWGFpK25JMEgvWU40b0NqN1FVOUUwczIzZ2lqTTJaOGRiUHptdmpNU00xb1QyT3V2WllpQjdPM3lrSVUxVkVlUWhpQ3V1eWxjVEFQS1RzWTM1VkhnbzFKUEVZaHM3d1NrZzVLRXpDc2k3SmdWa0dFdWhMeEU4Lzc4aFhTYk9FUk9PTVA2VnltNzVrc2NxRjQ2S25NOThLVVgrVWJSTUN6SG9BVXdOU3E3MmpjTCtTam0rQmtVYnlZZ3Y3WXEraUVtTnp0U1Z3VEV6NytBcFhzK1kzQzlxWHNRUW9qTi9tWFFBR1VTcWFlR1VMTTBZaFpwVks2UU1jNGQ0Y3BpeFIySjB5R2E3Nmczdi85QW1FQUVQVUpwcFIvYU1BOERLUDdUVC9KS05Qd01LMlBFTjF2dzNIU2tDVmhCNVRYWk40QVlqd1NTV2JlckJVM0ZoeUlsenBUMmFHUjE4WFZITTY0WDYzVW1SbVpLc1dYMHFaaEsvQmtUaGRyUEtOUVZUd0tzQkpRVG93UERsQnJPZ2pST2dJVUo2OUtkOTlzSTI2Ym1xbEN3VEorTU94ZDMvVEd4Ti9OVjBnYmVNRnpBZDRVVUd6dmUrcWxlU2hMSW5henRjM3ZyQ0FqbWp2MlNRaXN6Q3Y5SGM1ajRqaGxPWWpSTndsdHYrY1FIZWczckdxNUJVcXdCbDR0ZGh0S1VuaTMrNE5aZDFPbUxHdndvd2dnR0VORXJsTTNjdk9MeVJRbDYwUFVOYm85VFJ0RDE5M2liVUZ6V1paUXNKM1Q0bmdjcEl2bFJRcll4aXNoUFlieUYyVENzQ3JJSEpua3R3b3EvaDNra3k2WFRYcnp0M2J1cE8rVnZ6ZGJ3UUNXWWhiRjQwam9HVFdTUC9rYTd6MlNwcXBrWlhJV2xBS2kzZUovMnNkU0xZL0hxV1VjUjBZeEZLN0ROQWR0VENkbVRhMkFVVkMvRGF0dlViNHBCSW9UU3AxMEdISVdwUXRqTVMyRkhuaDg2QXQ4dGtJTTBIL21kVVFYSzJKaG5tZWRzdkRza0tSR0tkVXNFb2xWVW9mWGtYblZGR2ZLbEpXSFBiRS9xdjNUTFlyQmt4TG1VZCtJQWp1Rk9QQUprMytBVUNodEpLOS9nUTlyL05ZR21IVHNFS083RU9OU1VXaU9EODZhL25CZUdLeGV1ZFE0QitOSzFtYVAxeXI3cDMwTHBLWjBzRVRtOURwcWhnNUxrcy9RYjN1U3lEQ3hIWEh4NzlRUDBsRjJJcUpjVy9qNE53N0VLTkNvOExKRDBydllETGdSdUhrbWU4aUtIK2NGTmh0cm55ZlMycDIrZEVMM1NRaXdlU2lRSHdHRkY1WVFOSW5TVG5WeVU4Sk43bDhnQk55elgrSXJFTzZFZFBkZjJZbk9qc1JBNmRuWkcvaHN5TlNxak9VblEvSjVodTQrbVo5SFNFZGRGWDJPZTc0aTkwVVdWOFJXLzFmUTNMSlNEVWU1Y0RBbzJaVHBVMTBTaFRqYi9HeEZUWFUxQnVtN1kydE9KeVZ2aTNzYmRPRDNNS1hrNXM1MHVMVGgxd1VYVXpKL0xMMWpOMzRMclJmVTBpcmNoUS9tMzBjNEpUOC9KY3F4RVdBUWFJOVplSThrRDRxcUtVVnpTSWowa1dGSzhLOU43QWNWVWkzeGxlZ0NuYjBCbC9VTzllN011eDU4TzNxdDVjQmZ0VXB1WXh0bnJWdXk0cXUzTmp2bW9xRXlENXRTcFRFZ2hEdWFnbGlEcVB5SUJHWmJrdExSbTBoSkdvSy9MNjZWTTM4Tk9EMmVyRTN2VHBBVjVicVI2Z3VIcUgzeTJXclpCQUQzVEJNa2ZYVXZ1MUYwSzNrK3U3UVZHeWFxaSt3MktOOWtYVEpoZFhVWXF1dG1NMzRGeCtESnUxbWlEQ0RRZW9JK21DWUNpYTZCRStsY0JiOHV6ZkpHa2pvdEt6eEVmcWZLRkFCUEVFaVYwRlcvYk4rSk5jM3V3SkpielhwRlJRaWlXb2RORTlEcVA2VGwxcDNnYTUxN2d0a3lRVHloZk16MkZicW1JbnQ4Rk4wVGd2ZlJlR1dSdm1CWlB3bnFLaldkWnpraWtUdDhLRkFlTHRndE5oc3pHSm5LWXRGUVpjeEpGd0RLL3dTWTl6Tkk5QWpiL2JheVpML2d6em9vVVRUVGJWTkp0TEF6bmhUVzdHZ04xUm1LQit0RjhCYmNhT3FITmJaUnhRdjZYWHBTcjdINEZrTUREdWVWelV6aEp6a29hNGdSMm13WHIremFTb0hRVFVYTlJ2Vm5ib0VpOWo4SEx5U2NJVFV5QWxjd0hBUkladkNqMk1TMEVqWGtZMkNRV2RaYkxYdVNKRUpNZEI2bUNsOVJ6b3lCdG9XUk1GNEsvUUZEWGQzeUNPdS9DRktkcFRmbEtCWXhVZkZUeTJSb0dQYy9PQTArV3FTcS9ja0IwdE81VTZPV1NYS3BJZjhuZXhXK2tsdXFMU0JWcGs3MnAyQmF1MURLZGlUQU81QXZJVEJNUmRYRmVCY2ZhODIvSkRyRGVvTUx4Y2VTdm16RnBuN044dUdwaVVNbXgvaWs3UWQ3YVhBL1p4U0h3NUttb3lqS3FRckFyUDBFQlY1U2tYT0FFK0lmZ0RORHF0cC83YnZUc21ZYW1GRjRkUTRhcHRka1d6V2VlcThIbUREVnR6UGhLV0VtQ200TWFsY2Fqcm1IZ2ZzUzF5WFdGaVNnS2xPeFhIN1IxazZGQy93QkhpK3l2eUloYk53Mk9jeGVObmIzSk1ueTdBWWhnUjJKaFpsTXJpUkh0dkFkcjFHa0VkN25SS2lyUHhxMjFudWxIUDRFTnBTTFdNT1ZTQUlWd3JFN2tBRitEWEl6RDQ4UnJtT3NkTklsVXdaZndGUmY2aUk5Wm1CYjdNNEpNUHJHTEpKQkJVR3Y2QW9aOXBSRmpRY05FSC8yNzZOOUg2MTJRZGM4MjA3bFJZZFVPMFJKN2dQanA4U2tncTFPWUJTcUVkaVR5ZnNScGVOanJaUHJ6c3p0YXNaQUp6QWJkN3VwaWRXZ0xkTVlMbU85VUtBVWR0WmpuS2toYktxeC80UnJHTXJLM0dwMXlGQ3dsSVBYTTk0RTJrYVM0eFZsaU9hb0llNDJncUY3dEdKUWw1UzJJS0tjM2pyS0w5dWYxSzI0blN6OGRUTDVKbFp1QUluVjZzbkVCM040ZE9TaEJQTjBaVi81WWpraHFzV1dkM2xyQXRRVEhHSnR1amovbkREb2J0ckh0MU90TFROdkFHNmVFTkJKV3lqVTBtWlRaZW5JYklDNDVBVlFHckhMRWZFRGJxOFhLck9YYS9OcW5mYlFUc2kwbVNuM1R0VURVNlR2RFA1QVlZVnUvMWh0YVY4Z25GaiszWGhxUituYmo4dm56dlZpOWNlT1JyRjBBVXdUSFZRRE1pVW40WmVRaWxHRWFPeW1TUTZseHE0cm9MbS9GZEhNS01naHNoZTNLYjlyVzhhT0k1SWVnMWM0cCs0Nk15NExaZHZnNWhhU0ROeEVQMVB2dEEyNWI1T0EvYUVBV2xGcVU2NmUwSXM2YnJCbnhUeWRacmoyWDQ0eVd6ZGd6eDBjQ21yTjk5aEVKUXBoQ2V6cUU1SXpDcFpoMXlNRTdYQTRmSGV1SzJ5OEpKckIweHYzcm54WHdxRzRzN2diL1dFVFZYdUxGaGtIRzYvaTRKREV2VSt6NHFvSnErVUxPSnE2ZVlzSlNvUW53QUhrejhRMndQeVpOVG9KTWtXYjZKdVFIT3hGTlgwRElyTWdGZ1NhaVZzai9CS2JRV3U2TEVneEVwZzJIZm0xRmVPVzZ6K3E5TitzZ0MzR1ExSjhkN1ZWelRORFo4L25CQjJYYno1Z21FVEZzSUllWlR5QXNzMXBuSVJrWm50WHMrWnBBMHRSN0pFYVNCSVprR1EydGhBRC9OaDVyRnNpZE9LREM5dHBUd3FDNEtXRUNieXNNc3JhcGh1QStqOHd0UERYUTRmSEU5YWhvZkRSUEQ1a2toRTVjczRqY1NSakpMWjBUZE1JMUtPTUtQQ0VzRHoyL2VpUXhGNVJubU9KTTRNT3M5K0d6QWViR3FUc2tzU1pxbDhGWHJaWFU2K1hMUnNlc3E0c0tldmFHY2dBK1FRbzFEWWRzbVVhMlJ6ZWs4ZGxaeVRqUklvZjlZNmg5SGtNeUtJczQ2VGl6NW5hdDFTV0NONUpxL0dJMmZkRGtodU0zYzV1c29SZElEUkVRTlNvWHFtWjZpeEMzTGlUNm0zN1p5dkc0a01GSW0wRG1SUDR6cnpSV2ZBT0VFU0dPcXdva3dwMW9DV3Z0ajY3L2JTTHF0cHcrZThlV25WNTNXdTl0ZVpIa210eUp6QVdONHl5eWJPZHgwaDNoSGhZTTB6ZVpMaHRXR0ZoSE9QRnI4NmZhL2g0NWxCeitQbFRUbzFYN1VyRCtGV2VTN3l2L2VraU1EbXFxWTcvU25zN0JYcUd2UXhkU0dYWVU4OHBHNUNoLzFpRWtwOXcycjZySERGbTEydjI2YkZNalBaODZVbGdaZjFoRWJtL01mc1JHTEpUTjRta2VSWEhDRFVteTMyV1dmQngwL2tBeDJmR2pVUTZucVRGQ1hjaU5zb2ZiUVRlTW1KNFhqVTh2WERlanRiZ0ltRFZnbllsRGdUb2hiZFdhY0VYbkpNNTV0OTI0OWUvKzl4SDl0bCt5aVRtUzcwMnRQUWYxYVlqaUpoZlp0aFNMUzJrODRmZXJWc3FINlVTUmIrM25vL3lHQTQ4TkowdjU0ZjBFaFdFd0ZTaVZwbzAyc1IzSmNzZldCRFdwQStKSklzOWNNaEtwU3U4V21DbW50WHJDT3l4eWR6dE1FV2JGSGVBdGtiMWV5d1BOeDV6RndvajFWKzBacEpDaDU4TWU5NW03cURwNVRTVDlxVmc1M2ZjS09WVTRWYmZZMnQyZVBRTC9KbWRQU0RQVnZEZTYvWURyMUVORjluM2tkam4zNEFDL2t5dEdzbDViSFVYUmY4eTNKeXgrcGF6MHZoZ21pSVpqSElSZE5OS1hudHVoaVNWNVUwa3BWRjQxeERMQjQ0R3VMQTV4QiszZWExb1ZVQTJMQjJySktKdDg5dHg1eHJlN3RudEpTaDZGZUI2bWt4UUExaHlpZGtxeFo3QmRiWldvNVVBUW9nRlpkdW0yQUQ5RzB6RFMxUFVvTTFTQUtVK3Y2T1oyekkwS0dUYm96elA1Q09qSFVyR2xTRWFSS1lWdHAybWhSYWFYN0FUOStVREpSN2x3TTRVYU4yZHd4MnNUMnZQaE5oNVF1ZzNUM2JsYzlseGsyaVJheERHM3RVREI5Ri80QUVmcll0THlkTllPd044Qm85U2x5eHFtRjNEZWQrcWxPbFNSKzhUd1hQWkVKcnlJc0IvQ2hJbEovQURyZTVpQWFFZ2UzSUhIRHEzQ1FkdGNqbm1teW5wOE5JNWk5bXFLdnl0WE9pcmRCYWlmNHdVUThyVWxYVDJWUFJxSnh6Wno1SURFd2FXMkxEZmthNDJtbEdibWxSbTBvaEt3RUttZDFuaFJDTzl0N3JwMi9QcGpxRDV4amVPam0ySjVETGdkaWcyL0lxNlNJVjBJeDM5SEZzTGtzK3BETHpORTEyTzJvRVdVZXkva1ZkeEZpdDNCdHY4cExRaFVyOWs0OGsrcjFmWmxBOWF0Q0haTysrSEUyTUdxQ2IwcG1uY3F3SFUxRGswL21aUlN1S3BFQkwzbFdjTkJuN0ZzdHJvNlh6NHpIcFFjQTQrM2xhemV0MThuQ2s5YnMyd1d4blViTnZCRFBkcUNJanFjbGNvZnBReTNUZVltWlhMYmtnUjlQVjg3QWJraGNpbjdhK1Q1NTBRQ0JoWXEzKzhLR29rbzNlTThITTIvencvVVFSQlBkN1RsRk9NWVJzWFBxWmxubUhEaWdnOGNRRnorNkh6anlzbUFseEhDc3U2V2lyTm84WlVJU1NsVWdZZXJYM3YxaVJ3QllUbU1BRkpuVXR2U1YrbElNMkFvandvSDdnbmF3aTBYUFl4QWxLZ2tTcG9rNjVicTNrUGpIbk9Oa3l4c09seWY5bnliVllVRVJDOXB0MGNEUjhZSUZSbmRxcDBzVWh6NnFnSDNRTjYyZUluUU4zWHNvMTRzdmdzSXQ1d3htSnBUTjNURFBFU2orV3BsSzc5OFM5bkVXWHRJdjBXSWlINkxrbHVISmJybnkzY2RiT2U4dExyQncrNXRiWlNTY1hnZG1Ub3pQeWNHV1doQytPTWJ0WXU4anRnTFplL0U3bDNvWjJhUzYweEJMTFF1QjN4OUlIdCtpSDZURitrR0Y5MkdQaGh0VGJoWXRnaWlFYllScktXa0RDTlgwSllVUU5ZZC9FMzZvb0tYbkFUT1MrUGl0cHgvOG40ZFloS1Nhamx2KzBuMWZaVlA2TWZzSFBvMlF4U0tFd0luTDloa3RnRTB1QjNoRGk1UEptaUh4YWNkU1pmQ1BydmRRdTFwclBWMWdibDUvek1FZWphcllYdU9qUmo5a3NrWmJFRHpObHFRVHU3VGxkb25zQ1FtMUdySmE5ZEt1ZHJOOGxSbmhrVStOd0srVXJjVTdzWGRFNmhWV0lBb2doU3lCYlNELzE0andpcjZ0YVNQL3dpZTVuR1pramhpaTNIekpETkppTXhNY1Z2a3BmWGYvRHViU3ZRVzVvU3dCdy91ZzR6SWRCZzBVY1NBS21peXZ5RkZSVlhvMlFmWlFwL25PR3pZZTNzRlJ4anR3b3oxc1FIaGFleVRVZ1UrZFllR3NnY2daaDVHZWw3VVYxRjJJYitKWWZsbHl0NnE1VEEzY2FXSktxQ2lNVW5wT0RvaWRoNnRRMEE1TlNsM3VPcnVkMmgyVE1sb3VjVWJGTVlhcitIVzVWUFk3amUwOFFFNUhsVllDeDF4Vi9TNHpPejNqZHZGVnBHUlNqb2xxUms4Z3hGaWJ0TC9KTXpTOWNvTUdMMWRZRVVmdDIydzF2Z2FjTVZVZkFrVW1DaUhEYmNBMytjcEhnTGZHNFRuZUxNMmZCV2hjbUZhczVOb2ZBZ0Y4bnN0MjRBKzJ0ckVWRWM0aGVLTW1FSHBNbXlrcmFvYWswSGhDSVcrVHBRVXZ5dWFhaE9mRFZBNmMyYnN6UlY5SXpiNXRYUDVydlBUSHZ5L05LWGNOenZTaWYwcElPcEZhQjlFbGpaeERrNXZCS0dXSGVxSU81TVhOd0hnUnZORG9XQ2lRZUNwZzh6ME1GMnVKR3haMFc4OThYWWdNQVk5SFVZMjZZNnRZZGJYTDV5S2dmb1I2NXdobVJuNGh4Y0VnNWZlU0gwdU9XUzE4a0VBa3JDTDdtS1JPcEZxc2tSTVJwYjJhaXZSaDlLT0ZXRHV6WVZvVGVUMnlxaUlQK0tIN2YyQXFsV09KVnpPMnBxR1ZrMHlQbm5RM3RkQU9jL2V5YW1kMDdpSDlJUkUvcE1mdFVOOXduKzdxcnBiSFdxQll0SWtydFVaUDJ6Q28ySjhhM2F6d3k4UmRtbUFQaDdPejROeHl0dVREK3FCc243OC9Gdkp2M3NrUGJyL0pVb1QrcGtVOTFGb2hlaFpxOVdzVzNrdTRGY1BjRDdmTGVyZURmTm1ZRU5pNXI1ZENOZHpmNmpZUFlPeHBGNUMzYlpMZEViY1FzdUFmWXZEWlpOUHlLVWtoemRQRGUzMGNFcFJEL3N6Y3p0NFlGWlBEWjA1Z01OUzZ6cFgrY2FXVU42dWtzZEUwY1FaQ1hmQWkxT3hYUlhJT2VXcTJwd2plaG02Q0VJcXdhWWRwTy95ZGNVclArQ3FwckpVOUVZQVNsdWxLZEFVL1Y5ZTQwbjdLV09uZWtCRDJDZDNmSVhZUjBQekkxNG5GQ3ROeUF3dWZzdDI4d2cvTUNIWThWMFQ1b1djeE9HcGZ4T1hHK1NSMXlkV2grRnhtNG9PaEpvTWFPWWx4dFFNSE03ZmRHTWVlakh3YytyZm9KQlhsLzBtbkVkZ2ovbzk4NWxzZFVSK3cyakVKNzRjWHQvdXdTbEhKUy9ZRkl5WWRva0JVUW80dzhObUtSZ1BJYXZ2UG1Eb2JvRnJUZ1NZQ2tiVDgvV2Z4TG9NTHdobjkwTGhGRUg5WUlNZGRUb1dBclRnYVJPRHFacjNlbUUrUmcyZXZFcmQzVkV2YzhjUUUrTGQwYmJSTVdzanJ1VlZPMGhUVmdlcHM3a2pmcXVmVnFDc1FyRDlSMWtGb1RTVzJZMndQeWtEanhZMUNsekRnWGhsejJ0TldTNXR3VFA3cWxrM0tjMWE4d0lkOVZiTFFUL3pqY2RxM3dxNDA4SHQ0L2N2aUVEMGpGQ2pqa0xwdjNZM1RTSnlxOXF0TFR6b201c2dtZTMra1ZUeTdqU3VoTG5pQXF3QmJPVXJxRmhjM2VHbGx5Q25jdU0ycE5kd2Yza3FTc1c4a0ZGSHpPN0d3eEJJcjRiVzZuZVFYL2xwa0NGaWlOQW8zb1JLSGFWMVFmRXNHSGpMUDZSYkhPUXRkUWppcXpINzdnUm5XRlVwcVNjdWdDeSs1QzVTYVJBWGV3UFlzZjd1emZCWGFsNlFPNGI4NDREK3lVcGI0RGhlUFRseHZhVUYyUGJQRTR2Z0NjaU5MUUhmQTNuc2pKUkNWSjF6dkJ1ZHR2Y2ZaTFYvMmpIV0s2Z0VIM1BhZjhCVk0xNHlWT2xQQzNqYjczeVRaRkIySDdya0lsaUg0U1FvdCtheUlsS2JHS3VhamJCdXhUOTMxaklpaHRlVUZseTVpd2k5bndxaVUyR1hJSkEzVXdmd1BZRjlqaFhnVjRpMFVDTzEwS1VQUndGQWJuTW1nVHZkcUpyTkFEUGpwUjVhMHdFSVNoYjErTmNZOE90NXlMYlIzQ2RTa3dOQ2lSVmVKNUFTQXgxOEg5TkpVR2NKRENZQjc2SWZ1MEovZVJqSENxUnNmcW9nWEMvNEZWdDZhcE5zd3BaQnVHaXg0eUF0ODBYMVF1a3MrZnMwVkNHVEtNaGtwbTJ1L2JDQmNSQXdpUFNkTFJJV0VYQnNER2c0ZVpGenI0U2lyZGJNdEt0US93V3FyU0dIRldlaVE5bk5RMzFQN0dvQlRNdHFrd0xWV25HNEVtMEx1QXhyK3ZTTlZqczVlVDJ1dFNwTjFDeGx0L1FuQ3IxQVBvS2s0Y1NmS1VGMEFDajg0dnQ3elpqL2pJZmFsaGlrUEN5SllDaDl4Uy9YR2ppNndFVjc2UHVkcXUvaU90UGV1ZjFreERNbm1CNlJjWVNtUnNyMk1aVElzd0JVTmNRT093dUR0WHdRWFNjazJHTlU1dVVadDdsQkJDUjhCMzBseUlEbGtBNVl4cDRLbEZQeFhVallnMHdCU1FRR3hQQlM3UktSZ3gyREg2ajlPNkpiQWNWS0JUcWt1NlIvWUllYndVV0VYK2JEY1NtbmJxNWRROVFrVFBJVlI4NG5kUlRIS0xIUXJSQXhmU3JpTXJYNlJwY1prQVZqVFNqbVVmRVUwQVBHVm9YV2FYNjRibTAvNDdTdXNRelQ3bHROTHBzckVYZ2JSdzdtb1FYOGJYdUJWWktMUis3R052S0JKYWRSOGNDZGZnTm1hRjRMNWlyc2pNckdySS9OQjZuNzMrZ25VZmpLMnJJMURMN3lPU2Y3ZDFIaFlJNHFjRGVVVkhlcXNONXo2TTBwNnJqaWYyS0RQMkdiSTU5d0xRY3JzMjNTSlJERk5OWXhpKzJMTmRwQ3FTektqK2pEQmFtR0JVandTMnBBNmErYmtkQjliNVoxUGVzaG0rMjhKRnpMWEtFYkk0T0dOUlZuRDFGcXMyd0hBWEcvSGNvbllzbmNWbE1UM1cwOGZzOWk0dVlXek5xZE8wZ2pzOGNsMHN4czhLWEprM1VYTGszWHhUeGQ2UGdZMjBLakpmQjhlSldRaTFuV0ZNOEc1cUkyVkF3RCtDK1kzUFFCOUIrNSs1RXdVdDRSYmdzYXNWTXBVY0JORW5WSERQdmQrVDBjYnlFdEJiQ01DU2pndnZmUUZFRFk4MUhDWFYxV0R4eGttTGxZTll0Umt3RnhsQ3BEZUUvWHIxQnBoZUFFWFVUY3U0NHBBZm5xb2dsVUs0S2h5ajc0WW5tZUppQmF2b3oyekxlcWlJdXlwcVAyZ0I3My9vNlJ1QUhBbnRXQjJTWU5BSGJWK1dQdXQrTEkyODlYTm5rbUFITGpMNWNURFNhY213MS90MzJ1Sm50WDhOWHloVFFGaFpZSGJvSWFXaUd5bHgweTlFNm43VjZQNGovTGEyN3VHNTQ3YnhMYVUzSU5rWlBvT3I4RW5aRnpBVzFZdnUrOEwzaW1DQWNYdDhDeWx5bG9RTlpSTXZsRFZCKzdXYSs5M3FLcTRlbkNNQ202Wkt5MDg1K0FXSVl5QXNpcDgwNXRadmdPNkdWbWlxNTRmelNTY1JFZmdHRWZ6RDNYK3B4d2JOallvZ0d4cDBuOS9FOFJCc2ZmUkNZUWhtbi9HSjZKKzRpalRyL3FwRUYrT0g5TFd5bTJkNXZrUjdWNCt2VngxVVBHa1JVV2taY3FHK3hsUkNJZ0Uvd0JxaUdaT3k1Q3hEUkx4ZEE3MDd2NkNydDN6MTYwaUpEV09Hc0QzVitIS0VHSi95c08yMmp1Y2t5OXp2RVk1NnZza28xbi9TTGlER09PSGRJeTRIS2p4L0FESnRqNmNLYXBXd2xkc2JoVDlWa2lTeVdiU2FKMXZNNnpOYXUwQWRabjVEU21oWkEzUER6L1lBdksrZ25FRnExTDVqWnlldEl0b29helVoaFEzelhTcWwyRXN5N3dGZzE4L1p3UXh2cGlmWkdUekJ2SXVsYWdtUDhpNWFNYzNmY1Q4Rmw0OE9hMVdTaTFHM0JwR0lpVEZUeVNhSjMwem1DWG1IWnBRQmYzTEdPcnpEZ0ZkTHNCb2tOdTR1aTZLY3BEaHFXdnFrVk5DWWJFalhmZW12N3ZWbXRjY25XVFJtOWhGTG9MM0UvcnIvbGNFbFRpQ1ZEcVNDRHZxZlJqcG9qbGZzcHNFYkRzTEhEcndiMStPcnJwRC9mVjBlRzNTQ1M2czBGUysrcWNkZ3VPT3lEUENoTGdRRVRqQTA3UDNDeS9KWm1wRG5pVTU3VENhVVZwbnJjMWFPQmVhcngwc2JmVWQ5cHNJNytIZGszMnNiYWFBUk5vbG0yaituMjFUNFV3SHRnRHN6U1JCOUtxN29aWEJRaU1rckMyU0JRUU13QXVPM0w3WVFIZGJ5bTBrVUxoQmxSa2FLZE9OdEM0bXZSL3RBd294U0dtRnNzdWprZnNERk94M24zenBBZmtGY1dRVzcyRWJYdjhNZEE3UGN3QjJteS9XL3l0cjlaVDVKdEZPWG40SGl0NjhwNzNONllJR3kzWUhjWXlsUVJQUTdVcmV1cDFPcERSUWZ3STV2M1BhZWRjNGlRNFViZ2QwVDRZdkR3VEc2Sk13M2dZSGJYSXB1MXdacmdnNXJ2RzIwL1hPWUlMQWZCYUxjS1VheWUzT3l2TGp0MHZYQkg2VlpNWThQN0U3K0hDNWcxclZPVC9VM0VBZ3NoUEdZZjRIeER5ejBuZnp5MlVnTGpFazhiNjhzTjkxRko3ckN2YXJTeDdBcFVBL3pJTWFlbWpoSjRpbEFLSkdzNUZhTDRSZFZQQytpU0FlNWFwbDR6Y0RZMVR3dVlzM0tCMnZSWXdseFhkNE1uT0trMDRxTE9LSC9nOVRkbSsvMmNqUnEyWDNYRmZzcHlXNXU2bTJmVVd2YnJJVzNRSVlKbC9RaHp5VUxsWVMyTUE5d2IzZWdWc2kxS1hvV0tOUWpDbnRFaGxhTU9PQ3k5OWFjalZ3S21qUVVOUDFuNFgzUDk2R1V6OXJ6YU5BZjNHM2hVU2hGYUhjOXpGNHZtZ0RsTVYreERhTjdqZk1kWHZXOElocnh2M00zMHBpK0YzeHZvV01kWlB3NVdDWTVtaSt4Y1JyNUErbHRvQXBPL1pydFRJaFR2U3RKWjB5bnlBcjBHVFNFcWovcVRpWkJXYTl0aTh3ME0wc2gxOGdjL09GVSs4YUQzQTRNajJMY2FoYzNPRWZ4bUwwbUp2WU05bktrVzRuMTVQYXRBR2VQRGs1YlkzNG1PRjZkdXNKTlNXWmlHNVZkKzR5eGdGdmFicjZOcUxEMEx0TVhxQzV1WGVVTUNsdGtRVUgxRjFKVGNUU1RzZlEwTjdpMkROVWxXTGI1eXNQQlQ4RTRqQ1IzZXRlZmJINnJnVi8zTUt1bHlMOURySzF2UkJKTjlsUGt1VCs3dkovWi9VbGwwSGcvWTZIWjd0MVJEdkllNjByVmNFaDNMdkIvSVBkaHBTRjloa1BEdFpKQmY3YWlvNjY0bFVVQVNpemtsZldXTXZUcmNDQVRncUxhTS9pc0JLcVRSa0xMUEdDeWpZUUZ0eWxSR3htT0JUZWJwZ2dYZ3ZheG5SeGpzR3pKZkhKS2JLUmVTUGZVdEV1UjFJNk04MURnM09ta2dtN0FVZm15cnVtSzltWEV0eUJvR1NiNmpxcW82ZGdRUTdzTjRTS3Bxd0FJR0JBcGNNNTQvTmdjU2h1dHRIVENuNTdnbmllYWVobmxMc2hkTk4rZy8zVmt1L2dVUWh5aUduRmxpVVFaV1NYelRlRlNvSy94UHNyZmhLeWl3WFVzbHNLUyt1bkwzWWZqV2dGdVNpT3RyYW5JN0lDbk9HV1hYays1VSsxVU9GbnR3QTI3SExrUmdoUmdYSFNsRFJpYmZ0N0haTFpoczZsMzJFM1RKYlNWNjFhNDJxeHZUVDdjV2VaWi9HdldUcDJNOEd0RjlFL0J5R2RTRjJQY2RQbVpub0ZwTzdMWVJlZnNuaTVVMmR1MFl1YnpiSEVQdFAyNUFsREFsZTVwVUptSkRsQUkyd2E5RFFEbW1vQlBablNFSUYvcjVVT29WOXBob2tVTzJUVHpsVGkrWHJyT2lOYmVKMHd2eXRkY0RadGRRNC9CRzVGVFZVRUtDZU51N2VQZnh1NFVicENnM21xWXE5VHJFUGVreGFycEd4NW1kcVFsYU5VaWFabGo5eURZSDhicy9HKytkMzl1UmxnTlJMWDd1UllmY2tYNHNUWDBiNWJuWFRHMkhOR1dpZ0liVEVEUTd5bFk1WnlOV0VwZmNuZUFML1l6bCtpOHk5VFdoQzg2dDZwRXJML2FOTWFEQ1ViWjYzZlVoVWZYNy9hOWdHVUVRcm8rYWdScWdudi85cXY0N2tDdFBMc2ZEWVBuTWRZYzZ5TUdBMllvTTZ5Y1Rlc0RGekxxOUtPRkhsT292c1hwclhuaityakpKdGF6RG5rYWFLQVZYdTVUczcveStwU3hDenREcVZYYTBPSUk3YS8wbGFPemp3WDAxZ3hZNkxDKzZnSWsyVThjbTA5ZTdBSWRxOG9lYU1xUEFOY2pId0Q5WmwydjI2MU1RNVJib2VZejI5SmJaUXBiQWgya21CcHlvWHQwS002Yk9OTWROSmU3Z2I3cmpycVFxNzF0Qmkza0JSSFIzb0VPT21MNmhpRzJ4UE8vSXl4eVBBQUlzK3lrUHg0M3laS2FjV0tjUy9LRUtOVXlDakt6QTlRMHhZUlFqZmd3S0Z1dHhKMHVPWmZ3VXZwY3prTHhPTlYxRDZSK250ZmtKOXFOc1JwckhsdGVuTmxDMCtUdnBDZXA4NmlQaW15VGpzSk0ydWlGMG9QbitaZDhtbTdjdllRQVNMdkFRUTZqT0VjYm13UGFBaDFqVHgxQ3JadUFZTG1Tck45T1JkOWVDMElZTXhNWDd1NnczZE15SjVBcUJVWitDU0I5THlJN2NiYUx2NTZyNUV6eHIvQXU3ZGp0OWdRMWJvZzZMeFREMWlXbXdwbHhnVUZRaEFWclVaS3NqRmc1RDNEejZJMndUT3RxcnA1QnFmbzE1Z281RUZPQTlyMVVBS0x5aUdBaEN2YVl5UjlWNHRXSnJjcHY3M2NRQ2NOUmQwZjQ4UmVpWGtLcW53elIxMzRraVh4aWpwMm90dU9sdWtKZlhEeEcwSlAxT04vMEdyWVllYWtKVlVsY0k3cWgrUW9VaXJoTHpSaGpXTG5ZczRSVHNrZy83L1VITWd0RmpJRE5MZmxxVWVDbXJZbVFkVkM3MTdqQjZrRkpUY3lUK1BvOFQzcWw1VW1IMmQrUXo0Q1JUQSthUEpvSWhQRVRSa3pVVHVDOE9PUmxxOUZlREtDaDVDcEVSRkhVckYzV2U5TmxlWHRMYWlhM0xQaW5CdE1ONWgvTXdYQ21tMFp2OUZFaHQ1Rlpua0lBRzE1elRCL0o1eUQzMXZtc0srL2dwUjliWEhWcWlMMEZVQnlYTnBxQm9OcUdXL0Z0T1Qzd2NtOFN1amVrc3psSmtSb1pMTDhrUkF1MGJBOFhDRVFhaDdUcVhGL0ZOUCtjLzdaWmhQQVMrckxIRWFzS2M4RGVsQVgyM1FWWHlQL2R1WmJsZ3hrWjd3ZXdXNmZXejhNV1NXbmowbUp5Y21GdXBMbzFobWR3T1lEMmd2RnpiRWtoZEtRS044T3ZkSDU0ZUwrNGZ2cU1tTHpHOHl0N09VNlM2RHd3OXN2enNHZDhQb2RETHlQN1FESHdSTk42S2FhQ2ZYVXhzdVd6RzdRdXpCSjRiL0IxYkc4aWF2bWtxWGRwN0JlZVBKWHVFQWI5U0dyM240NmZVZ3pGQVEzTHRjWTB3V3g3bEtrM3JsL0RJbngrS1FvbUlQeHZMeE9YcEU3L2QzYW9UMVd0cDJRY29naSsvTVZYNkUwOWpLc1diQ1hUQkpGV2NkOUo4T3FJcUUyMnVRM2tramZGUUo1SmhiNCtERXZWcy9QUEVzZjVuNERLY2R0TlFDY0xQQTAvbXlBbFFMQUVUUUdlZXdURmhHK2JHRlFkT2UrbG9mV3g5eXpNSDFoUWVXQStZb0hqZGpJN3FPNm1iMnhubFZ6SFFzQkc2R2VGbk1pV3NtVzlVQzl3TkNCS3dlSlhSamEwbFRCZk9OWU1GV3NsODE4ZVY0Q21ubzkzVHNudXJPQ0todCsxczUzN2RVeGdhbUx1b0dKeVQxRGlpSXN1cXRxdUpGV2E1amhTeVZpZlBVZHFoWWpBMnJPUjRaWkxKcy9RN1FuT1hPNE1LdmxrSmhsWHFPVzdnWkVJbVljQzBTNGdxYnBIcEl0bDAvbXo0UEk2RnREdE1vd1VadWtmZW1HVzFLcXlLYVd3b1FtZTl2VHJ6SkVMUmRNMDFMZlFwRWFuNEd6bVZRdXhmL080dlAyd0tYUjhjSy9YelB4bk9rV01QbnVtUHo4RmF2cGVVK3lRSW9JZ25LL05LS0wrKzRIZnBLZURwMG1JMXhqWEIremlBSDFKbWNYeGl2UUNGcUswRjNETTJ0SHFlS3Z1VWNzcXcvVGgxQVlZVmtmM1BWd2J6ZWFpRjFXNjc5VysxaC9OSHZOM245VEtjcFZZbGtqSE43SHZnaXpRUFQ2cTJ0dWFSVENITG9zaFB0RkVmYnJLOGxFSEZNRnhBVEs4eEZ2eVJUWGlxV0ZkbHVod2NlOEpIeUs0REhhNkVvQysvNWw1OHlJaVpUMjI5cjdhbnhSY08yOXpFVmtCZG1JbXdHSFBBUmtXYnhXMUVrSXA2UkJ4NnBrM1BWUGNidzcrdHBTNHNlK1htd2ZFSjlUUXFKUjdvSm55bTRjbU1HUXhtRjIyWlk0WUE4aWlQTFlNa1hDYzdLN2FNdjBZRENMd0U2eG04Q05ROW4rMGlzQVdqWGtsblV3Z0d2UGRWd3dVRFRveHdxeWo5amsxYXpuT0NmR0V4ZThPUGN2WmRXQU8xaU5zYlUvSVVPRHJYU2l5c3NWdzROSVBESUlTY1hqTE5jbEpjSjBjM1gzb2lXQjl1Ry95Vk9sZ2lvT2hmMHVqbHlRK3lXaHpDZzd2UXh2Rk5OS1JsNEpIZmtrL0NtY09ySkFtOWp0R1FwK25CbXA0UmlldVFnRUZEeFNvQTJJOEVZM0tlOVNRaWEvWE9VQWY5d1dTcmx4SVRTVDI4SUdKNFlVMnlVSkNsYldhT1RocWsxYnB4T3E1ZFdOd3VyTytFQk9qWXJwQW83bkJ6U2ZCcmgzdWlzTFBNWmt4K3dESUcrcFdERnVialIrQzlBODFJdkJiWmI1MjJndTdhSWhFcGI0Nm5GcWFZZlJFeUNObzBzem9IVE1KMi9lSmMzV1JOaVAzZGVaQ2xQNFYzU1gyK3d2SFJ3cXVBQnZjdlhsTHE0enU3Y2hyZXhmTGZHemNjVmV2cVlhZ1BvQ0oxNnRScmVDSW4vRVQrYzRPeGJuM2xmQWZxWndCUmFyQmwwUXRrdXBpRFptZWdZQWZIbmJCWUpnZzMxVTNRMVRXcjNBbW8zT1JhVEJmaGFNUnVBVzkzUEd1TU8wZy9VMTFKTzZLSFBKRlduZUhYMHRRbmNTcUZOSDBYZUZHSGpmdUM1djQ0Mnk4ZmFNODBybWVRN2NnWENWVlJFTWxxZlJtV3BNZ2E4cU5NRFhzOEIyRzRCWXhQNG9Kend2YW5PQ2ZVTXVjOHhodDBKOU96VG5Kd2thUm9nalBiTHhkb1RzQm9UMzdmZDJOemJHNTk0c3EzNTNoNXdhcHIyb0NuNTllTEFrTEdXeE5KWTk3aXNzNmw1ekZNM0FjK2R5MDRuZlZucG9ZMnMrbExuTEhySmdDZ2pJZlRzTjA5YUcyUXBZOFdtd0hFanJQcHFmZW9Qa0VQcStDSFhRR0srcWV5cmlyZFhGamZsSG1xNlNaUEJXMTR3bjJGU0ZlNlNMcWJNc3VpQm1GRk0vaUh6Y0d2VGJ0N1VuMm00ZUFpNVhGZzBHbmVLeSsyTHdZQlE4MjFweldDUlNadytZNkFNbkk4bXV4SmFLZkY4SkxLQ1p3dlBnQllObTIrWWRxaWZqbnVtNFZYM1l2V1N3bS9BWXFqUEo3c1VkRnJ4OWsyc3lzd0RNbU5qR0NpMVFpMmdaZDdoMWFNZ3lEbStqT01YY0pzNUxlUHFNK2hHNUtkeWxoVmJvdmJURS9MSHZ2dlI2QXRHa0hZaDBkR0hCQ2g1M1hyYkxCeUxHRXVnclN6Ri9OUHprMExIRkF0S0VWR0JYOTluaHAxR3c2OUo5RE50bzBaWHpSOHd4WHdNSDZxTnZXMDBtVis5RDVTRlc3OXI5Rm16YWtXY2llajdzY3Y0cmxiZTNGVStwN2FxSUg1aytiREdqZ3lJR3ZtUitNVWdoL3EyZDFxa1dZODdXSFNHVFdNOC9ZTlBOYjhUMGduQ2ZKalRVeWsvOFVRUFU0MkFRekMxSlhXR21oNG9hTTZMVmRCVzBjQm41QVI3bHpsWEM2Ukkyd2Q2WW8vUHU4YmdNZmpKbDYzRGcvb05RaGtlbDZFSnNVb2dCVnE4NHBjUndadTRyVFFIRjMyU3NXdVdlM2drYko3QTJTdzc5TXhnd0FWQXpFRjhlT0RQWWJtYWk5NkIyVEdleWVJc0pLYVZUNWt3UlRJUS9XYjhOWkNPTk5VWWdWVEhHaVJSMUVldG9WazRMUmxXQTBuZ1NLd1VneDRnR2tlZ3VpR1N5dlZVR2tpQ1FVdEFIVlhMOVEwNHloVHNENnpmOHBpdGhSQU9JcWxEN2pkYjRXSUpaQ1BrVDRYMnduV1ZMSGVQTjh4eEpjWGpQNHdCZ0JmTGVhTW9PcFdyZTRPMk9OOXBaZ1ZhL0tQVEpyUjN5NFp5L2FFSENmRkRQRUVTZ1kzOGpoV1ZiS013M05rWlhFUVFHbFNhSFcvOGlzZ3dvRkd4SmxjYmpwNDhHMGlXaFl0ei92aEJuenkyNlpOT1c5UUhnSndWSUFKSWxCbUdqL0tIcC9HTnlJSXBnWXN4V0tpMEp3V3czQ2l3cHhBSGh2OG9aYWZIOTR6dDlSNFFCTTFSRzZBUkFxVVR1bmhtTXZRUk5HZG1BelJLLzAxNitBZ1ovcVNWUFFpaGl5a21kdG05TFYwWGtNNVdoWXJudXFWTjVDbjdpSk1IdUdLWWk2eE9TbFJpY0VucSs5R0kvbjBCaWd0N3RENEJKQU53SFVlTjlpM2RzcnVDUVlDczFUcWwyci90WnhKRjFiSGxncno5bkJFTnhPckFRQkVMQTd1dlB5OEtTeTJTaHpTUW9JWHQwQjIwdE4xTlRoK0lNR082UWdmRmFWMGc3eWtFVCtPN21mSmlMeW0za0w5ZzZwTDdYbDVYaWNoN3ZuWTdXTm82RW9RUmdTcTVCa0M4WEhIeWRFYUxhTld0OWVET1cwRy9RSE5Uc3FNbno2NXd0WUpjU2d5N2JuZGRYczFGZkpGVFJ6NGU1b2ZNRGpKZ3A3eDh3UFpDd3RKd2wzcHk2L05BVkNoaXhGSFZPcDN1czNYMUYyY3BzZEtTOThvVFQrQWg5SHRNMk9NUXIwLzc1YlN6L01Fa2JXdE5YSm1YbDZ1M3BuMlo0RnU4ZEZFRkJCL1dmWWJQdUJyZWhkYm1OV0Zta1Vwc3RwS1h6N3UzNkc3ZTZYTmNiTjhTTFoyTTI2bVlsRXREL2hWMEJPSjBYN0dKRjQ4RDJ3NE1xdlFJMVlCdHkvSHBHYmhNSS9uN3dHT2x3c0llR2xWaHNKZGE5cU05SFlaVjlSLytka3pvRzB2KzloWWpUbEtxQVJwajVpZ1N5ZlkyNFN4TGZwWTFpSEJkMndzVGpZdmJlb3BBYnlTUFE3aDdtZ2ZHdXVOL3lsa3FoTnhoKzdabXFWQjNEaHlveFFMZ3lBU1ljWFdiYzl4a3FhMnk0bWRITXl0N0Ewdm5rTFBOTWVGSzlCT25sMktYSjNvcVpoZ0dqS29BcmdFemVsTkRvYUZNL0thNmZzOUhUa2xHVFhRYkF1ZEhjUnVyMmpXSkxwTXpNUlhDcEpjaDFBbnVSLzdmck9YRncwbzJsUDArRUw4bjBkTSt6QkZPcExCcDlmcDdpdlV6RlU1Snp2Q2Q2T200U2hzREVRRGh0akxiSnZOYUpGTGRYVTU4aklWY2lnaVIxMFl5S3g2QnY3Y210N3lWMFlrNy93TFZXTEo3ZXJWWlNCdC9ZaFJwSUtOcUw1ZzNNRjZINklHU1l2bUVwMzM4N1pRdWhzaWlXQ3Y0Y3NwTWwwOGNBTzI1TnRweFVoVytiQVpmVENUVmZ1aHJhSU1Cd3lES0JhcmluRlFYNWFVeUp2SEpIZnVVcXAwWTZnSjVOTUdubTc3R1BTVytZdXpwRGFjOGxGb2IyeVROWThtK2NQcXhNWGk1M3FzNzFhRkRTclVTU2JYWUo0TUFRSHhRM1ZnU3BONm5sV2I2bHY4VG9VcGNuYVpOVnhoaVV5M1RDWXc2ck42SHlqRWFaU0pNRGVkaVFtK3ROYkhQUlZvTDhlM3J0c1dtY0doZTRlVXVBVllIajNyL0VPM2xoSUZ0Y2pxWG93d0VoUWM4dW9HM1gxWFNtZk81andnditMaVBOYlBaV1pjMEhqdG9KSUN4Vld0dHFZU0lPRmdQdk9oTitaZGxrVVE3aWhSSFZ6L0t2UTIveTRKSU9TaCt1N1BoRVl0S3hFZXlUNC9XL0gzd21Na1R2eWZUSWh5YS96VFA0YXBjcFlYNFhBL2ZUbFRWTEV6WWd0WW01MHE3TG1tc2JPR1ZLRXM4Y2ZpMkM3ejJ3MEkxKzJENzlaWmVrbStLaHpoQ2w2bHRSNlAzTlkrajFGV3VxOXk3c21yOGRha0xjc2h0WlpYZDhLejRsWmcvN0F6dlcydnhrVnhNY1hUL0lCc3dwb1hUcFZPVzZTWHcrZkJJbWt6MWVSWHZEOFRBSXZsSXpJcVFweU83RldNekpaZi9JZlpSWjlJMGh1c3NXeVZ3dE5VOVBCRnBHajJuQUZjb1A1Vkg2aVVJZ1l5UkozTDFDMUtGQVhuN0dhYW1sazdVVHY5cmVqS1hRVFRnV0VPaUJlTHZzek1uMGtTeW1EVTFtOGZWRzNiWE5pMVhkMVdiVzdoQjFkMWJDcGNhQk5GaXlnOUNjM3RJVHNYWWwzcUlkTmhqTTR1dXBrOWpIK0NNaFF1ZzNVUnE2MG8rUy9XYlM4NjZzem1uWmcrTVdPSDRRZXBjbVNPVUFuWVIyaExzTnRDVlA2ZEtob1RjcnZKdzM1QlBONi9YcDduTFFlaEZ4MGpQTi9aOW5vVVgzS3M3aG1sbHV0aVJsZjl0aTRvaDltK2N2c3pJbTdDd1RZdVQxbjl6NGFDSWUzNWFjRFQ4RmNkVFNhNVp2L3psWi8xR2Z3RzRrdFMzTkdxcHlOcjJmcXBvdC9vYkUwajYvamhyR3dvLzVLV2xLM0VDNmtpd0hza0tBa3M1a0p3akNmcVB0M3c0Q3BGVEJrTjlvQS9iU0E2VzdPV2FTdzVOT1RSREw3V2V6MmQ4WVJDVnlCb0lXZjlETEVtVFpKL2RUOHVTVFBaRis3SHRhUXFyOEdqTHJpczdyTXFQS3E3djd4WHIySWpHYVNod25kYk05WWhzb3BHdnFMS2tJdjlWM1phTWVqYTl4SmlGOUdUU1NLQ3NoNkZwdTdFa1pPeTRtbHUvRkdSUytZQ0tJMWJFMWFqQXQ3RE9OUzJKTExhaXRhc3RFQmdpN3JWYVJ0c3BRTHhDZUJOUzlMcFBpSnJBYlRiK24zU2dIMG1Yd1J4aVZBMjVKRUUzb2YxeVRXdm5udXFYZ0FEUXZOTUVqWUY3bE44OTlMRFFxbGdFNzJZTkF5T0VVK1d0eWVJV3NpdWRUcVk2cDk2NVh3MXh4QVVKRUNWaHBDTHVNQWtjRm44ZHJwVWF3TTRHNEhkd1BhNG1lNjM2WTg2aDd0emU5eCtFT0lPaUNjdS9ualVFN2M2eEFzTTg2Mi91RHZLaHhYQ3BidmlWQkk2cHJ5NW4xYnBkdFJBdUY3UlZHTEpTUkZDU3NlYlZxQXVkTjhSTUxpcmxQa0kzV1RXbWQ1eVJaekdxd0R1Tk8yNVp2alFMYVh5Z1lleWJmajBQZzFZRWdXMjFzbzR0K2VvKzNRdDh2SGEvaGV0dzY2bktkZUp3ZWlENHkxZ3M0TVRxOVBzY0h2SGl3d2hVamMzZk5ibWJ3dW5nT2d1dnprbzE5dnMwVTF1SGNSMTltT25qU1N3U2tvaWlLeno1N0RyemJPODN5a2NvcGFSNDE2bmN6eEdrL3ZQVTdNVUpra1RLTDdxYWI1MVJlQ3Rac0xFdHc1OVVJVHZZU1hRUzl5eWZzNWY5eEZ0c25PRHpTbG8rV1ljSnQ5VUx4RGdkU1ZSbXpCL2UyYkRMVTg1RGVkRWlPb3NYTEY1TGF5WVdlVlIrcVUza08vT1lTdDRubVhxQkdXMklzNWVncFBMMEUyRlRURDZUN0tRTmhPSGNWOXM5SEMxWlBTL1d0RnJRak1sMGpjdDdsamkwbEZqd1BjUzZic25ielVHdVJrQkFGbWljUXltTjlNMVNSaTFqTkZSVk9VVmRzWjBhNE1KSVNISFc2MkNmM0tHanlpQW12cGZzM0lNYWhqWk52Z002Y20xQWsxS0dydHFLdm40TDg2N1MzUFl2Q3EyNFBvbGZNSXBZMkx1anloZW52VHBDL0k4TUtpRDEzUmUwQmNuR1RDWWU2SjYwMDB2Z21ZdTQyM0dTSnllTHVKZ3cwR3dZdGtsazc5MVEwcXpibkNIR0UyU1BseFVrdGJUbDNIVUg0YzF5ME5CY1paaDVoek9Gd2dzaXdtZUFvemF1TDNIUjR5WEkxRTZtdHI3R1gvbERGMXg0dkFwSU5FaXFWR2crbUYrdmkrR2huYVprMzkwYTdHTjRrVjVNSE9aOE1waE5VSTdoelJ2UkpHNUZBcGZHTThYa0RzTEc5Qldtc0pJRHZ6NEZXQTZUd3I3U3NOQjlkL3ZKak5RbDl3bDM5RWQzcXkxN2FhQkVVc3dXWVhQNi9pTVh5VFRGNWY4NmpXaTk3dCtDdzV0dHIwWjNyMzdaWGQ3emJlcGhTcEJiaGhMbHRoN3Q0d3oreHhDY2pqM3NKdXF4NWVmWjFQZDNxRWRKK3ljcVNvWTBPUVZNNHBUdndEZGYrQm5TWjJVZHVpNlUzVGt4OXdPamZpZWEvSUtBOGxPSERUVmF0ektCWW5JTWF3NWJUMGhMVmVvZER1a3pPUFBDdXJtVjhQNG9PUXZqczhZVGxxbTZkZytETExDRFgzUllpRlhod2hYRllTRnFCZ0VqN1FxRkFFeVh5ZXBmT1VyVmlIY1ROWW1mUDlTVTN1Yng0YlBWM0s3SzhrNTdJQytnaStWN2NJUTE5a0dBdEZ2aEs0Y1NZdDBYSzJWY3oyNDMyNFBoVEF0UGtQWS9VbkwvaERzWDRpY2prc3JtKy9ZK2RlTE8rK0hkSXpPSGpXUVBsTWVZUTBtdWFNQVBDK3pxK2VQd0Y4ODdCYkJKN2lnb1dBMHlZVysyQlF1cVVnZTdWMmRXS2ZWNnAzb0dadkowRGlEcjNKL3JuNHNJWnZpVHNiOXRBSUZBUklWYmxBejNESzFnR1Z3bWswZjRhU1hmaWhWUEIwemhZS3NQb1BtRDZQOWJvWXcraFVaM3FueWdDdmlRTlAxSWdMbnk3RDNZWVFaUWhTbVlta3FLVmhUV1RlQk16TXFMbENVcUlicUN5MnpGZDhYcSsrN3ZQWmVzTy9QY2N0emZ0MWxyZlBxS01IV2pndko3TTIwT2JnVDFyc2wrQUJEVkVVOWdweW9BMEVaUjZpTnZRSWdqT24wVmhZYURZdG5hTjVIZWhLQjZMUDk0MHJINitiMHZPSVBWYnVza25DYkFkNXlodDgyMHMwT2E5VUNwbG1YT2libm15T0N4bVBYam9xS1NYWDBsZWFWWGZ4bVh4S0loaGxIY3dzZU9DYmthRzBwY0lyOFZrOSs2VzNmdDNKM0ozcEhRV2JINXpVblJqSVVXTjY5VzMySVByQzQwZHpjejVOMzJPQ1paMExOM0FUWEVtUjIyZVJpQnpzaEsvNEVDNm1oZzFLdnVHMzlzUDFGZzJBZmN1UVBnd0w0VTRXcmNiVHNSdVIvamZneUdmTlc5eTZCbmJsV2JIMDFWUU15UC9NaDZrckRISUgxR01PM1lyLzl4WXhUQllkRWZXUUhZbG9CLytWUTBmWjFJVEd5eDd3UjY0cnV0VkxuTURNUTBPRlV6TXh0VUNra2l2emQxYUMzRUdCTllPQWVuMU1UbStQczVLSjJmU21wRkZUSHZWQ05wKzhwT203dDZQT0NaY2p1QVRCdWxwWkNaMGw2cTJ0NDJEaEF0VnN6aGVLbGR6eXRldkRJcGpUYm9Da3BEMDVuaW1XdHR3UUFYUzNhQldiSEppTUFvdXNnZHNBYXpGL1pBMWNOaGswaGxvaHVTVXBYalpGUXErWDlPZW1nSWVUQmowcHgyaFBDTVdQUGwxdkFOaGJ0YWp4NzBnd2xWdGVLUlEzVnlmVFdveWFoWWlFUE15MFR6Sk9hMVBFN0dmekl0ZjJ6bmxZdUg5akFFdGtPR2Z1SWp3Y0I4a3BPMmdZb28rVUVIa20wbW9mdGQraHBHWG5VZmJNRVZvYWZndUZ0YWhEU2xqdGVHOUNQVmtsMHRxaGxKTlBqcUR6S01XakVlR1cxQStMbytjcnJNSlNqWmFGUjRLYWZuTEhoL1pEb2kyK2p4eHNTdkxGdGRaazRsaEhvNlp1ZHh0azFLMmlUeGRXZHJBMDlndlhscW9yM3ZzY2FieWV1YVdDTXM4M3l6TWtTYjlsQXAwSWVkaHNDUU1HVjQ1V2JjZnNVSzJKalhwOERLNVNZYWFsbjQvTkNMekpHV0c5OFlLSFhLYnJoUjJjVkNwbmEzSGdwZ3FFci9TVzhETHdPWEhQVUhBRHRBQTBQMGV1Z1k3M1A5Skp1ZEo1dHBCaCt6UnVQU1B1d2dqYU1oWG92MUw0d2J2TCtlNDNFU1p6eFAwN0hqU0lCbWVsaUtWS3g2c0ROb2JtWVhydEszY1lZeUU2TlhtTnlkZEZ4eDdLZnNTYXIzU3RLMEFyRENxK3B2QjlhV0VnZ08rYlBCTlNpVnZ5RVQvZDJZaVczS1haWHkzNDM2Tzc0ZWRqazJPaVIyek5lM09GbmlrSTNpLzJaTHJKeXc4RVlGOFFoUG0vTndhZ0ZXK2lESXE3dEZGODlEMjRUUlNNZzNMTmFPaUZxL1V6d2Fiek1hVWhYcmRTaDh1YnNNQjhmcDZERTVyOG9YREFPNUtNajFSSHVoOU96UjV2c2h6NmV4KzVGYUhlYlZZaDNXVkVEZHF1RU84WmRZWUdMeWFFVmwzZHJ5TWhXNEpMYjgxcWo4NEx3ZTRIRWptUzdaZVA5R0g2Q2ZHeFQvTC9peHVtZExjeGJxVzA4Z0JRRkdPTzJYQTNaSE1ZMURId3NkdUxTcUdiV0V0NXIzSm40ckZqMlI3QXcya0w5M3VaN2c4dG1MRWNtSWk1YmNMaTRuekhzSFBoeG1oWnlXN2ZZSkp5NE84aThlUDJzeVZlUjM4QWNGZjJSQVNHc2NaQzlEYnJpWnJERjI0bXo3VlRjRks5d3VVMUx0WGZReUFva0dSU1hqN3JBdmZhRk1TSDBBR2l0cklmVWNKUTZaK1ltRFRSdnA0d3JmaUFYQ2sxRXdIaGlOc001SUxXbFlqV2pJSHFIa2lPVzdhb1puK3VHUUEzVEdUeGQrZUdOV1JyWDdLazh6WW05Tnh6TkdFMVFkMkxvRVcyMXRwdkw0TVJ2YlVWK1o5TC9ubWIxYUxFbW5GL1M4RWx6WXlXcWkxWHZYZjZoNUhvbmxRWVZib2FhdW4vVDFjV1ZKb3cwMk5td3Vlc2o5TWNoM2lMR3hGcTZadEFHQkRRT0Fva0RmbVJENTJNNmgwMG5POTZub2RJVlM1ZERmeDBodUsrVmI5cGdTd0lMUWgycjdPbVV3QUVYL0ZMbHFZc3Y0ekVNTjlJb3VEV0VkdEMzM0JSWU1aUytLVkoybE41eERJSlpreEhNTURnMktMZWRNNlJmeEdncy94T0pJWktadFJFWEI5aUZtNHZRR0t4eWV6bzlHSGlXM2JpOFVNMURhVHZTTUNHN1BtdWdyaCtYRjZjeUlRbHNEenF5cFg5SjF5bmNVZzRGMFRKQ3JqVStWSDJsTDNiWjdENjNBdHBTMU82NEZOb1dFRXFHczFwNVVuY0x5aFFkRlE5ZE12bXNnOE85ZlAvOWpUM2cwQ0ZybCtEVm1QK09waHVZLzRVVW9KMFR5OGx4SnpVOUlJUUJ1QnVrR1FIVGJzbnhoN1F4TzY2b2FsNW9xSStlUUtnT0hYcTVJQUwzeGU4RFhEdE05U01jc0h3TU1KZmxQdDZJc0dFUVUzbjMreDFoZ3lHQkJEcXRiRVlSTUFFU2lVSjJuNVBjRGh3RnhvRWU5aFJJOGd2ZlpOaXlva1ZsUWpqaFlCNzNvOG9zaURFSDJNQlc2QjVDbmNuOE10WFc5QkNRVkNBaVIvbVI0TnRFS2EvdnRyM1FnazBuVzhsRG5SeUE5MUZFZitiY3NiQ3BqRW11RnNKL1JCcHFwVnc1eWlNZjFXZlhicjVEU21lR0lSejg1dU5VWnhEcERsNTFRbEMzNGswbVYvZXJSUkJYTEYrWmF6bGRIVG1lODIrUlhLUmlrT2JxOC9aMFc3K0twb2QyNzFsQXRlK1Y4czhwUW14SE1ZWHQwK2pzei9GT08waEtjWXJpeHMwaGJhR0JlMVF4WkpBbmRDYmZOODNuZTg5TlpDQ0gzNy9nQUcvcVk5UTZCZlNab0hwdmJPSjdwdGtBS2VOM0p1KzdpcEExMHN4TzZzVko0d2dLa0VoQmU1czBpTExVdHB0cU1NRmtscGUwUDBiRGJoZy9OdGV0OTFzMlF4aStjSFNkR3lqcmpOTEp3a3M4cGgrd0RFdjBkMGRKUG41VTF4L0pUWXZTQjEzRzFCUGxHV1grL1Vnbm1nYmsvb01HTnJtVWx1TmU1ZnlCV3NsaSsrSVNYOHduV0ZuYlUyd3dsRHhPZXIvNkFJU3FYcDMweGVlempRcG14V3g4Sm93RXlpTEI4Tnl5MTd6WmI1Z0JZQTlDb3l3bmlGeGtrdVZ5UkRadlo1VVN3NUZ0K29ESGxiTTBSY0J1Mi9NcXFsQkZTcHE3ZGFMUVVJeG4zcjFNUXJSdnBiR3FrbHJzbElVVm0zci9WTTVKa3l4QTdjb01CMkRadWZ0dS9QUFgxU3BYSTF1dlVqcmtiUGFUR3RLZkNkYUJlRTU2RmFRTUxBVkI0b2Z4b1ExcHduYXB5elBNTmJGQmJvSTAwRnpuQTJtOTlxVGV1MDh2b3YvWlpQRFdpTnlOeXFpMjBpbUNKWGZtVm44bStPMWxrQkFrOEMrb0VzbmUzRjMrMzJOZ2l2dDM4MUVmMHM3bGNXaDV3OGMrY3FDeUlFNEU1bEN0bmpJL2x1cDdOdWVPUnFCMnRycnRNRWgzTGNMOVR4MFJ3RmNiMGUvOW0zRnlqU3NJRTkvWWE4NzNkbUVmYkoyZVhIaW5VdHdaZDd1eEN1VzhtYzFuMlJBbjNEZTExVWl2VG0vSnZYU2RCQzRaMWVrSkNGS3JCNW9MYU5mWlUra2ovUzg4eVhHcWI3N0ZncVlXNUJ2OXZsVmVGTjMrQ0NKQkc4S0pVSzEwVTlNUDZKVkM0VG9RaERPekRLVWpQcmxRbzBQZmRITXkweFRGZlJoVUFkM2VnMUtvdmVSd1IwZEprM1VPbEdVVFNpdWEzeFdmN1NWR0FpeU9aNnBzcUx5cExhcHlQbXBGU2ZQVmIxR20wNjRSY1hnUWxxYm9mUVNGOHE2ZlAvT0VGdHNDTllOU0hnSFI2QnlMV1NaSXM0eGE2UUFPN3h3OCtoTVhNYzVJU20zYUMrU0lUZlA4ZEhPaXlVaTY2aVFPelEyZVhUNXFsclJJdjQrWXhFdlRnV2t6bk5CNWYyVEZvbTdmWW1LUE1zQUhiWDBGTDVLcE1uVGF0bDRRc2l3WHpoVCswOVI1UzlmZHlaN3VRR0pTZ0t6VWpPVDRBcnVnajRSd1BEQkdWeTdSZmJwUmk3bjJ0ekdIazZTZk5VbmFLVEk4OFlETm4wZGVRVUEwRWNBbFBnVk1SVnYyN1RWcWZDZ0FXUGo2MC93ZFNGTStzZEt1UnhlNXQ2WkRGVXQ5V0pmanN1NFM1cWRWNUlDL2VrR09mN0NIZ1ZQOE1CZ3oraThTM2ZQQy8xN05hMFUvYzYzTUp3Qm9HYnRPVitwcklScUs3Q2s5d3lMVG1jelh1QnFOdDVFcVFyejNGVk9ITWJySFh1RlZ0K2JEcnJZbGJwN0VwZTBjdTNiSE96UG9iVDZ3UUI1WW1CNGpGSXBCUldJQ0s5YXpsdnhHaGNwU3Z5WithaUhSQTYwZGRENTlPdTI3VjlEWFh6V2FONnZXS0RHbE5VMzZ5ektpOEdxN1JJMXRiZkY2Q2xna05uU2dUZ0dsYWlWZlphTW9GUkNmU25aR2ZkR01tUXNEQ1ZVWHJ5TklnQk92ck81WDNMeC8yN1pOTjJ2Rkt5QVQxVlI4OFB5YzJyZ2lFVUJqR3JxVXk3WjFoZVgyanc0WEU2eDJQVmdhNWk0Uk51c1JHZkpBbURPa1pEbTAzVXpBaEhPNjZuZWExSkhwOVZDTDB3a2JheUVPWTdDQlc0Q01sbGZuMml0ZFV4T3NZNkhjTEppRnFLS1BDSUJvaFZ2dzdGMlFvTkJ6WFN4TlhJSEc0OXNlSVloak9ZOFJ1d3hjWHJ0eDVmUUJOVERFdG00UENrWmE0bEs0T3JBYnV3Y1VXNnp5RklqNHFnbFNsWnlUT01XdFlSYzR2U2NINTRvMnNDbG9ZZVJtZVV6cFR2NlhISlZZMTV1dFdNOHlaSkQ0Q2tuQTBmcGlCUmVSeGtSa3RIeXpDeVlSSVRLeUdhVHRGb1hmYVNWYjYzbHd6RHgxZzJKR3B4dXpIYWV0M2RUWjYrWWdJbWJMN2NSNGhnS1FpWDBiU2tUYVFtQVRuejNNSUZWZmNuYjJBbHZUZnE0VmpaODluMnkzU09zbEVPR0E3UWtvV3V3ak5pZC92empRRUh2akpNUDJBQTBQdFBlSW9PL0xtZ2s2UXhVRVZ3aWpQU210b0dyaHFrWVJTdUg4TytYWXJSY3laNmc3WDUrVWVScDdVdDI1dTBjOGIwanRLSnczcWc2bXh1U0loL1g3MDVIaVNlMitWcTlJK0t6clpWTFJMdVRIQzI2cHIySU1mMEVCRE1YNERsa3hlRE16K1R5ZjFVZ256NFRHMHdmUEt3dWVCbkI4VENQWFB5RjFuZmtBZWY0elNSYXY5aGhxMDRpamVvcjh0bU9nOG1GTGhjSFpnTEN4OW1MOHZ3RWdaNjZudDBGM1ZMaGhWS29OdSt2MFJtK2JLenhGSkREUlBPNW5DRFB4d0FrQ0czNTJvQ054VGk0eW5jYS9oWXVnMkZvUHF3eDl2RThlQjQzdVJNTVo5RUZvVjNrUEwyOTJId0ZsanVMUVF4bVE5ME5FNmJzcUw4ekQwb0xzTWV0bnZPdVVsdWRmditZUHRmcG5PQkljckRMbkdFMDl2UWh5dnhlUmI3VVBiNFZYZnpIMG5tdXRuaSsvYmZsSk1yS0pMOEhhbTZldk9QU0pUdTMyS2ZHWUhEMGdhWUVuQ2FjQkVHdlRSbW5mNDNOaEg5ZHJLU0lvQXgrUXJNVG1CSGVQQ3RyTU5rdDlXOHlsbFM5ZmMxTU81TXVweWgzYVU3amZNVldOR2t3dmdHR1VJSExWaFdEMGN4bzIrWEJwYnRFNURzajBQZVd4ZlVLa2x6d3h5OGdPMVdhSjZlaFJOc1VqN24zdk1Edlg4KzYxMDJtVUdxd1FYSU1ISjMrWWJ3UTc3M29mTXBTNk1MVHZRUll1SWd6RDRuWUJQaEpmL0dwV2x3bURXRlppbUJYNmdKY3oxQ3VKczJhNWZDaVRyZ0E5eU1teUlyV3R2NVpBOEF4SlJ1cERaeDY5ckxINXVSWll2bDdVcEl1N3pYUE1iL2drbmtkdjRqaFpkanBnSnNMVXNDNFBEa2VzaHhyMW4zZ04xQUx4QUtFTkNHdzdlNVozVlcyd2hjWXFFS3RGYVd6cXEwTWh6MHB0Qy9VcWphUkxGWXM2M2NWc0RsOXlDdUxQM1MvMUU1SkhqK2JmOVdGczZzcUVLQysxN1ZDZlNNOXkzN3pPRU4vQ3ZvUkFxYit3TjBGeVlrMXg4VXZkd3I1VGpVTS9wRzlMZ3NMMVkzTjExQkhwQ1dteXVuT0thWVJ0V2ZILzJoblNGdi9uR3RmZEVONUZQb21FNG9iRTFSOVlPK0d6QXUyR3NVcjNHdEVMeEpHT3NZOHlIMXc3WnlTaktPOHJZR3c5ZDlEQjlhKy9zbmZ3TzdiK25kV2J1MFZRaHVKclVnNC9YNkhQSFpjemd1TVZndmJkblBuMk5WcWltMDRwTUNpQXp5aXUwa3JldERSMWM4SXNIenNlclBFZ0ZaT3NLcTVZUFcyWkJGRkd6Z1VwS0NOQ3A1MERPZDdUZVFPb2dER3JRQU5INGp4UlZobmp2YWZ1dHI4b1I2MUhLaWh0bFNJOEkwUGZreGFVTXVrWVA5N1hVMWRNTnZmbXZpQ3ZEOFpOdjRvNnFZcTF1b3J5eEZRbFRDdnBTeXJrTG9MWDV1V2lzKzljMFJsYTBBNVMvd3EyaUV6STB3ZVA1YUFsVmZPMEZDcFJ2ZEdTdnJjN2VBQzlVQTQ5QVhyZjFzeU1SWFZ5RHJBUnI2SUNOdE5lSTdUMW9iaFhNZllRa1NsQXdMK1ZWcWZKMGV5Rk1mL3dOZ1dwWEFQajQ0SGMvNWNtMnIzT0Zqb29yUXJnU0RCdUlFUXVaMnVpajBtY2lXSVpiUWNPT25xcWhKUjFKTG5TTm5nN0FWY1Y5K2prc3ROcUhES0kxVmZ5ZXlqQXZ4QmhBMXBBVlpsWGhYcHV1N1FWSnROcElDci9aRTA3bXFUWGNuNk9BOEN5K0FhR0xkR3FyeWR4N0oyV1grdU9uS25JV3F6WUhIK2lYL25MUmFBOWZtZjhRTnRicDFLRTlEYXU1aHZUMlNPKzFJeXR0bTRuNk03c2FDbllhaTdtUG1PVUFtVEhIWmx6Zm5EUlFIck1oRFFFTFV6cVA4UkM2eWNvNU4xa29HZzMwdDBFN2tJZ2RlU1hsRDYxampNNnBHTld4a2tBWmlKaHA1MWduN1dtVEdnY0txV2M3T0Q0TGtkWW9xMk56MGFZTm90em50U0wzSGNRd0tMRzkyU0d6MW1GTm5TWHpBZGFjLzI4UzJDdXNSbjV5OVA5VlVGNDR1bm5zOTB1TE00UnFOSGpiWDQ4ZkdYTVRCdmpjWGwvd0hNYWxHQ25OWDF4QU5SVjZoWUdxTGxFRGpxQlBIMVloYURYbVB3M2lqUm9SaDlWS25yRWtXZ0Y1TEJRMGZiSzlHd2FQYXJnaDNNUnZFSkw2cWpuVzcrbG1MdHNqZEpPMEc4N0ZSNzFYd1NTVEVGOXNTWXhURG9WMk0wdC85cEZwWjIxQ3VYNHdER2d2ZDM1YWRodGZSNEcyb2VQSW0rN01iSEVQdHdHRUJMVzIrNFYveHN2TDNEVzR5c1ZlNUNHNHp1YjV5OG4wK2hnZTJ6WmpUMWZuS200MFdlUzZONCt5a0FnYWFjQVJkZmZub0hLaFRXZWwyMUNRZ0Jld24vNUNRR0EwSVlzbHEydlZhVXJ0OWd1N2JzZnhnVEI5YnpRbXJrazRIY29KZU1iRnVXN1Z6TTZJamNzSCtNcDhHcXVaVmRGZG9vMEtHOWplSkQ3Um4rV0hGcEVYaEtRb3pIaG1tZzRBZTFVcStiTGNhUGR6S1RKRkZOUTNxYnBQQUZWSWVzbEVPRnRiMHZ1MFJJRnJVRG9OOHVvUzhXc1JLNG02K2N5dWVoeXNyY3Q5VWZTZVFjMkQ1Nzh3Qzh6T2hHNis5ZkVHaDZ3UFQ4UlpJUlJrUGRBSkV6YWdZS250SmFibzRzMEFyK01hRTRkdzZxdzZVZEZIa0dZQkRDUmhmeWdVNUtmS1lrOFNXOVVnZllMbjk0QjMwTFZ0M0ZObHIvNk96MGFBd0o1eEQ4RGE0dFZvYWtQL0hqemZPYjN4UTVqSk1rc015bDNXdjdCS2Y0ek0yVkJLRXFoeUJFdkt4OC9yaGp3aGVKOFhtQTBYcEhtVy9Fckw3N2tyemhRN0VyaGExeWdmbUw4dWtFMm5GNTJVcEF1MHV0cUMrMTRBaXJrUlYvVlV6eElHLzA1ems3R1lIZXF2MVdDQlljQlk5VTFQQk9YVWJjTlVnT3FwZHdJUHBSMHNabDZFZ003K3hhRExMd0xBVVBwN0RodjluVmJpYWM5aTdoKzFjUUhaZytNVGYwYWhPdVVSdkZyTEV0R1BKUWV2UTBKSjJsaHg0U21PK0huazBxSGRVdlJaenU2eXNPc2JzWWFweUE2a1JyOTBYN2FROUxsdGZ3MVI2N1ZrclRwQTVrV0oyc0U4dXpuVkVEb2lpQzdkayt6WmJRTW5lRVpMTE16SmNyWGRmbDN6OEkwM3FKQU03bENuaTdISDdzWUR2ZlNMU1pFSTlrTmJWc21iSkZHOEh5SWFyK0d3d3FBVE80V28vaVJ5N01IN1VPYTY5cmxSMUxEUjFNRTBnc0NBSmpTcll1eWI5TzRPLzBQaTlFWEhtSHJhZGZhbEJpRDl5VlVESTljVEhDOHV4RHp6ajFtQlNRT1JjWG1HYWZJU0w2dVNUbWM0WjNONGZSQVIwaFFHR21hUVdzNGF6QkQzK0dtVmh2SFFRYzIyc3hCZHNmSk05U1JlRTFzZTcvVWUxY0tUTUl2SjZkMStlL2xsZGRkVzFiUDQ3RTlHNnY3Rzdtc2c4dGczUlJrSm9tRzRKNVR3K3U1K2ZyMnpJV2Z4bjVsYzl5ZmpqbVpOcGtVMUdTamhKSWxkbUdkbjVMRUFnd2Q3MVZzckZ4c3Jld2NxRnVkOVlROEVJVThlRjZ1bDk2YTl4dzNDditRKytWVzhwdzJ4TlNxQzNmMVB6bFd5Y281Qk9TM0ZxeU0vaWpyRkw1RFpMMk5BbHZhSzZIUCtqWWJHR2RsZDZPc1JORldKaVhGS0tjZE54QXpNeWRidkJzVmlvdnZTcjZBT0l6YndSdHZzM1h3V3hOUlZWcncvQTIwOS9WeG5URGRPNjdFREw1M2lnbWNZSlY3bW1odlJZMXRNTzkzendIUWU2ZDBqL0c3Z3FFNzU3Wi9OWHAzNit6bzcxd2dydTIzRXVnL1pFanZFU3NrUmd3S0RxSDdkMklwZlRVODFVWmhjWmw4TFIvdUVBMThWSWtJL1Q3SzlEd212UmJkNnM4M1dVZU41ZFhBYnZScUExYVd0TFZocnNHUXg5RXd3cU83V2ZCOUVmcDNUb1EvZklzcW03QXJrekI1NjZBOVpCODRwV0V0OXFnbzFVVXdLMG9mM1pXZ0lMT3lVc0lDeElCYlJXSllOTVRsRWYyVmQzTnNmVnZ0MWFJR3J5TUJBeDl1d3V3OEQydnRpMlQ1cnB3N0s4Tm0wOGhrUWxLbmgxelpJN0RTSU1RRVU1S283eTVSNmpYQXB0bitVTkNZV3pPZXNXMHdEc0dPdGowZWdwTm9Ha2w3S0pWdlluM3ZiTkJieHZCTEJBT3VYYzlwdGxxTnEvVTJyZnI5T09saWIwVnUzaGVQRVlmWHFCUkJsMGM3NWtPZ0E3M1BKOE1JZEc5N1A1VUp0bkRNbGJudUltSEE4YVVITUFHNzNEU2xjSnhHbEw5Q011YXJqV0ZWQ3lXKzh0UTlqeFRKUWZndE1YTCtjRCtoK210d3ljTjgvNFFvYUIrT2J5ZjJSbjhuTmpFRTVyT08xZjRCcWRpQkE2UE16dmRid1lJOUFRQVZwNEVHTTNCTVB4VFlNV0FwQVM3REhKZmZWcVg4eDUxd3ZFRXVSaHQ0c2h5OUxEQTQveFBOTW0wbzBxN2hBRmd0Z1lieE03OVZqK3NyOFRhSlMrMlNXMGpyZExhLzArZlgyS3gvK2M1dFFMREFzMDhJVHUzbTBGSDNZSXJiWDhUKzcvRmZUZ2xXd2lmNGxvaWpyaGw2TWljQk9xNmMzV1llYUcxc2VHblB4MmMwK2puS2VLU2FWMUdhKzcvMXNHOXBralpxbGFLUmxGWjZvc2pJMlhnTjJzNzcwbmxNSmN1RXBIQ1FHeG02YnRTeEVkbllNZ1RlVGcwRCtnUUZsMjdFRVA2VjNSeU5FYzhmell4ZmRyRkhyaUFoY1RtMm8zVUdHL3NMWWg3MWtlYlk0VDBzKzMxTnA2VUNzU0IrNU5JbFdDOUhyWHpCRFY2UlROK3dQSzNJVkU3RDR1dmNKSHBKaDl3eS9vRG1NcndwNzB5Um8xK3M3RmlveHRGb3l2Y05DVm9hTTBNbjI1ODB1dFI2Ni9xcENKMjByZEhsaU0vMzJaQmpyU0toUnZOb21rVFVVR3lNdndmUEJsck13RmdlM1FWeUcrQXhVZHdianFBMjBYZ3RMTGtNV2RCSmphNWtDdytYc3EzK05YVERJTTJCL0NrNlk0bzN5Q3laazNRd1B1ZVh4eCtGN3VsSVFhaFgwK0RZK2JPTkErQnpScGJvWlJIbnRiVTV3dzR6ckFwdlVSeVl4MmhkMEtxOVFCS3JsM2dxZ3M0Z3M0K01vRTdmaW1aR0pHMTFHbXFEYk5XUzdLeDRML1pVMTc3bDBJQWlDWFVjRllueGRYSnpPUVBzWEI1OEVweXY2WnhoMmlkQjJRczYxdUx6RVpFeUNIb1lYaU5Na291NVA3TGtJNGo1VXJMdElienoyZDJtSlVOeXlGcDJDY0RBamxnRFB4MmYyK2pXcnRsWDE5aC9QTnJxRlFZQjVPWENRYmZhU0psazF0S0QzUFJwYXM0Nm5iVlBOaFBDWVdzMkMwRC94Qm01UGc0T3lZeVNEb0JIaGZhS2hXYlNpa04zV1BGczBhNW9YN3BwTmN4cGNxRjlvMWZWeStlak1WOUVKK3RGeDJFVnpnK0RZTjdET3FGalhHQWZRVHFLMURNY2pkbzJTQkxvNGZRZVZsVSt6cFVHSXdhTE12WDZWYlcyenByd1VScXlwQUlRL1hjS2dFUzJ3bDFVY0VQWUswUEw5S3NacUhuTGxmRzhzdWhzU3gzc0d2MFZESnFGMmM0aG9xcG55TDNPWXI3d1hNWFVONFVaWDJqZlMveElTNCt0TXNidkpiRnFwWUY3MDdPeDlsZnZyVjQ3bEJHZE5qNzR3bHlVNXBJd2YxdExWME8xN2xKVk9lUE5INnltZzBTdDBPNVBMdm5JMjBQRnhSTVUxV1Boa2huMzI3WEdNL09oSVIvTmg1U2lPcjJiVkhhSis0RzZ6cWY5aVg3Vk1WOVhzdUh5a3R4amVxcnpVOE5kN3lHcnZPNWN3RmdlNVVCcVF5K2ZOSnBRU0NiZytyeFFuVlpobzdxSmowR2JoaFhIenB4cHFrMnJrdVZqTXhGUktnNWEwNXI5ME5jdkpEN1BmQzhGT1hCNDFlbGxjWHJxSHRRQ1kyV2FOdzBEQ1lUbTZnYUJjMmRHL3Zodlp1YmJzTTl2S3JNRlltajhqdlVQc1RzaWJvM3ZQdUppbFIxV1IvZ2VteDA3RWE0R3ZwRHVnalVhbWFmRjNEaXZSYmlqUWtNaENzYXpacFVsMDk4eEs4SWNYdlpZVWNEYWdITk9iNWJvWk5nalI5RjMzdmtmNU1YRXlzM1hsNmJrRFZmZlRUWk1FNTVrRmROTmt1VkZLRUlEdE1PSWZjY01wb1J2dWxTTDJ3Z3hzekVlUFBqMDNUVm0rNVlzTEp2M2FvUm9FUHVVUEZ3RFl3ZXNkS0JSZ0FXZnp6T01lbUJYWlBiVGdkMzdhdlpjM05KZjNKWGEzK0FpbkFiZjl6eVhvbmt0UkxGZU9hYlUxT3dnZlJ3ZjJnN09wOHlPSVZVVXFXWFI3RkNWaFBWZ1RQN2UzUXJtMUIzd3NxZGJBTzE5bHFyb3Z5dkxVYndGVkJnbHhZeXFObHlVNlFQT3VnTm5MUHg0dFA3bUtnN1RJVjZFd293MS85UHZFVjhTSlkwREZBWVJ3cnhMdDVYSUZmYVZQQ01GWFMyZDI5SkVGbWhhdFgyOFpjZjRGSWErTk1HRkQydGk1c0J0aGExYjFJVlBmN3ZDYkZ5c2hWcWpuTElRMmwzUERMVmI1WFpadkpyQ0h4TmVFODZuWkhCSTZFS2EvTEFPS1VkWkRCZnU0ZHJpM0lBQWo4a0ZBak9kZkdPWHNZZkxybk5qSE9SeGVzcnpDekplRUxnUGhOSURvSkZSSkJHWkRoRmdJT2VtVnNma2QycENhR0xJUThQT1NpMnczZFprazlLallIZytDbTVxMFRwZUIrZUorU3EwbTYya01JekgyTXVTLzhvZ1NtRmdTMUdSSHdqNHhabkJYNnZUdG92eXVDbEpRNXV5c1hHVGQxWFBJSHoyZ3dnK2s1TTRCTVVLYWc5ekNtUWdhYkU5TTFxVExZM0w0Ym9MY0U2K1JXWmpXbnZDR2Y5aFpmRmlZSmRDTTRGMGZUNlUvQitHbHRWaDE2NHhWTlZLRDFCUEpmRWM1SGRsY2xPNzFEZnM5aXJKSTRQdCtaNnpaU1NpY053L1dXRTlScWJ5Z2o3MXdqWnkzVldoOURVS1ZwMnZnQWt5K0FhRjR6NUNiWmxwbGZXRUhoUkhsQmFCWkQ5Q2lBYWFzVW00ZUVUa1U0QUdiYXhwYlBlc1FRV0RKT3VCdVN1S0Fuck1tUU9Ga1YycUVsNm1KYngrSHZpSzRXaTcyZDQ4L1ZJMFdHamlGM1FieEQyTVcydDlYc1BlTlFqbW50cnhhcVJEdStVb3ZGS0tWRm1rTHdpZy9McXhOanMvaVB0T21ZbkpSY0ZHREV2aUpYK2dYQXE4bVVCVFhReXhleDRrcHdGMFoyMlhxSFJQSUhXWWZvbXQ1aVBGUnE0aVlRMjZwOFBVeFJPM21XOU9ZaWY4R0lSQ296aFhOMjFRTDUwWHI1UkRadVFRTW9tMnhsS0R4OFFhYWd1NmoxUjZQbk1Vd0owZ2lydWZvTDk3SHhRZ1ZkTGU4d1lkamVmdjIveTN3d0NDU2o2Q0E1aEljalJZTnNvd1AxRXZUbTBQS21BZit4amtlTXVYcG9sVzRKUXNDcFVWRW1tZnJXSlc4OTB1cnh6YW5jYU1PbWxPRlJRZmNuSXlrUDh4NkpINlRqYWM0NUg5SEdJbHpWUzcybDlZUVRRSnZQcWltTERMUXZkYzdmNUQ4VFBrS2J4bWlsNGtwRGt0QnMwSyt1WHNMcWdaU29QbWsyUWp4ZUJXb2tqcnVDdXQ0WDVIUTRYVXlseHZ3WHN2R2k3TG4zZ3pib0g2NEJoQVVPbXNoZTNmc2VSWGdlM0t2K3dzcE4xN21zWVVDdlBXYUo5cVF6bSttN3MxdjNRMmwrUzlnMXcvL0lSSnozNkJyZ1JjenZONkpXNE8yeXAxcDJxQVZ3c1doNG43d3R3SlBWdnAvRjJsSlNNOWVzOFlxRFlXMFNGRU9mTmZJNjBoVDZoWVg4TnlvVUZOSjZoY1k1R3VGNDZPMGFBMnNieTF4VmtVbmRhUGFhUE9rUjVZb21RWXVCNzUxSXdZY2tEd3FQcmoyRDhYSndBM3AvbVBIR2luN1FJdHIwakFybUJuVXplQllNcS9NRlJwQVMyM0hJakZCeWdMQUF6dU1HNnlWTVcxeXJPZ216dk5zdi9oejMwM3hjb0MrTXNxa3dGWFB5a3ZIOVZUMVVBMGVXNk1LK1lkQmNvYXZndTJnYmMwZlRIZ0dmTmx3MC9MNXMyWVZmZGdaZExNT2dlZnk3cTFRbEVCeDdYN2JrMnFTenhNRjlrMWtDbzA1eStYNXc1eXFob0xoTHhvWjRuZnExRm13TlZUOVA4VkhBS3c2c1J4TlpYUklKVlk4czdMc0J4Mk80UW9SKzRkV1h0cmdiUzNlZnVxQ09zcE8wTlFZVUtHL1dsVXRtdU05WUp2VzhpOFhWTENYc0dUSk54OWl2VG5pYWl5UW5jemlSSmpxRS80aTI3bjFvdDh0aXV0VmJNNXhVODZFNzlmVFZabHQxUmFjNWRiakl2N0p5RU9xOENaVHlpaWJEdEJBWVQzOExucTZHQ2lPcDd6OHpxTmFCeWphYUhzaVp2dUZXb0tVMG9kTDJVVGY1Zk5TaEpSaU1BQlJTUENjcmxnK1N4WlFNR0h6NS9GbEJ5VlFqNFArR3RvckMySjFQUVV0NGwvY2FoQ2RNQTVuR3YxcUNEd2tLTUNCWU5qejN3WTlBbEU3TS84OUJUZDF1R3ZqUlM4WlJSNDN0NjZOWnQ1Q0t5dFc1T29pMkhOZHpPN0JCM1VCWmI3cG0ydGpUbGZMemM1TDE0M21LZlE2S1h3b3RYU25BWnhuYnJLeWVGc2JqNU1yQ3NkZHBSWEpHVjl4bndiL1V3T0JxU0QwZDJ3VHZna3o5V3VGZDRQcmJPcGluVDlJSFBjMjh2S3NLejhHS3M2cEF2SHhaMTdvSW1ld1hjT1NobU1uYVliaHJuZ1haYlk4bUlZa3g2ZVA3bGZ3Z215WmVvYlJVUVVlWkZuc2o0TysrK3plelRVVFd4TkZqWFhUczZmRm85NHBhT3BuQUJOUkxUK3RKKzFkQkltTXhUUW5LSVBwUnRQK1NIcDZDSXZOdDBSQkRzYWdtZFhJRFM1RHU1L2FNMU1ITVNLNDBtdklKTDVQb0RUZlAvU3hYOXp3Z29uajhyQWsyU3ZzWVdXMjZiZnp0VzVWL1FycXhySG1kcUJNSVlObi9FY0U4WjU3OTJTbG5mcFlQREFWelVxVDlxYmNZcXJXaGt3YURKbGp6enl2TUZ3eWJUSVJzVmRzbUdtS2ZKZW9xUmtVMWRzWDRSYlUrd2lsRjBRS01rRWdLdldZR2VGc0lTcjhGYnA2WkhiVTBTRXBITlMrVGIxOUV2MWNBWndpeC9Dc3p3L1BaMjhwVmd6SzQwSHYrb3NVbEJGTFhUT2Ira1ZXalZVUDM4UHZvZGdUUjg3REpmZzArOHJtd0JOMUxhak05TVpvRmZlZGp1djJ4cm5rZUtHbWExMTQ4WWpTSW1BWi9mRmdvZmEwb3pLM0xnaE1yRkl4VGxuNzJ5MEZMczNxV052VHdyZ2xIcFM5Ylp1RGlzZExuY2lYTW1zSFNtdjFmanhzdWxnc1VjVTdLUDVxVFBCZHJmSW41TmNldUlDcWxCMzNYTU1lVmNWYWVyVkFTZ3lZNHpIaVpMc2loVlVEQ0wxeTA0Z1htSi9XMVlJWVZnUUlIQkxpdUMrdnlRUkh3TkVwMGV3OHd6M0tPV3pBMmhrM2pzdTdDcTdrSXVRSjF3MEpvRVdqdnJmT2pEcDVyK0Z1eno4eUlQTWZ5eXlrV1RIR0pZY2JuM1M2eWtYek8remdVd0hQN0dBKzBMVWlKUlVsWWwwUUxKOXZmNlFYcU1DRi8wdU5GTFNNOFliTWxScUxrWS91QjkveEd5bEUzWjhJZGxtMUFoRlVuK0M0WDRmMmV2OGY2SXBjVGIwQ2l2bXlFVXBFVVNRdHRSVzNHdWN2a2pVMm56NXROa0ZVa0lhcktvaHpZVXJneFptZTdZTjNFUDlZWE1GbHY5SERKWldzRjFEK1Vzemo0SHM4T3M5WjdDNHlXWVFKdUtCZjRwL3hCMEdFNUU0UndUOFJNMktxYzdtYkgvc2VKNU1kQlMvek9XWGcvQ1N3R09zSi8zbVFXR3Y1cVphSktTdDZmdlBMdG9RNUZkMDJCNnpJdkszYVdDRW9ZelRYdzZqeGUxbzhzNFUrWEtsTFJzblYzaktaeVh0N1dFTHFEbWFnYzJyY3NGTldJVXZ2MVBoVSt6OVFKdzZDS3lmRGJ2bm5vTW1Xa3F5V2lhcVUrcWU1VkplckFOUnBlekdZd2RtRVAvNzJ1TWJkZkV2VGNSMGpwcCtuUXFzSWxFc05Ga1oxZStZUmx3MGg0TW93a1BVY2Q2aTdEV3B2cHhmUXRRY3AzNm5raStaNjltaVYwK09vektseDJ3K2F6eUZ6V1pxY1NKM3BRNnB2eUtJanFVN3JOM0VVbGdPbnZUOFZEbG5hZk85MWg5S0hET1AzSmE2cU8vNEZwcmttbFU0cVFHaDVNRGVkUGYwL2o3Z0lQTFNzQlFCVG1XMDJLZkUvYXBrMU1GaW9sKzAvS1BCZTNDdGwrMWxqWk1YVWtGaTJ6QklLTzBCUVpsdXp5REdvY2lhS3M5Z2FCUGkxUktyMzVZZlZZazlWT0Z5RnozVVd2Vis3dmt3U3J3dEx6M1p1emFZY3p0UTNUL1dlTW8wcjFlMFRMMG9relEwS2JGRzZ5Y202eHlrb1drSGJHL0Q3UDlxeXpsRXpaQ0RkUFdROWVyaXlNdXpzbHZVOXNRektZOUZjR2RoMVBOWkowOEZmZm5MN2VIYlc5RjBwM0MvZEVreDNZdUh1TXMrM002UllwbjJzOGFQUFFjZ2YvQkV6QkJIRWJUMWdPRCtDalNzVWU1em5tU2w0WCtxRGdMa3pxSytDTzhvUWpGVGw0UWpTeStCbnVVb0F5ZEFFbHRQQkovQ1JsQ1NYZkp1NlVOV1RLRHhsVlZoUGMwKzdXZ0h5RWZpc2hpcGNqbXFpeEJUQzVyWTV0M2I2RlpqK3hsL2ZHRkVWeFYrZFRlcWViNkE4bFVveGlnaXR5QWk2KzNzZ2pJUHNha0VDS1A5RDVkeTVmd0xkVEJiZ3hrazVzNHJCVVhRekNRSWl4SjcxdE9YVjc0ejU0Q096clUzaVloK2lxYllGOFZ0eStDYzlDOWJ4OGgxTEY0Yy9RYTNLN0J4YXczMU02aVFjbTY0N0xSUUpnUVMvejFuM2dBWGQ0OFNQa3dSaEhjVHJiMkVTN3lFWXRTZWhpekN4blFCRHp3aTdiSHp2bFpaVXFiOWFYbk5UeC94VVdyRW15K09yN1JmVWRMcjV5RUxyTkE3KzVKNW8wTFZUS0xtZTFRR1E1K24yM0MxS2ZZM3dDTS96VFlhQUdGV0ptOCtZU0hPaEFWVksxOW1EUTNCT1hCVWpTTHJDNFVVODRkRW1ZVTRXRm5WTE5oRFExL2dWUDl4YjJXa0ViS1NnM0xmNnpqTDFoRlhaSU5vclNZN1EvbUp2Mmh1R3AzQlFack1WazJPbFphSWRqTVdEMnRBY0F2TW44Qmt6MHZ2N2VJeG5iVEV4ZksxUjRYRTJVVm9UdTd1b1dvRTdpRjVvMXJydThnV3NyZVo5dVN0WndURGxnSTFRcWVuZEFOU3lPb05BMzF1SitpelZWOTVpZEQ2YTE5TCtYeExiTmw5dnVtWklGekVHb1U1MXdkRVZmdWJOYUw4aTJUUlJ0SDZwUEJra3lhdkJZZFdMQkFPSmdtVDZodjc4QTlrMmVBWkN6S3VPOVNqSFA1bGhNTElkZWNyN2x3WUhHcUMxS3dzaUxydlFPN0srWmdIVytEejZzRjY0bER2VlZIR0cvMkVYY0ZRRmQzRDM0RXpURDFSbGVCaUxlMnFzVlJueGZSLzhmS0lLNVVRVTlENGUreE1oYllsR3l0TDFBbmZmWXE2TFh6aWdGY3ZqalZ6S0h2QUxObVQwY0RabXdkcm00R0xEQzJ5eVphMlI5RTd6TW00M2Q3Tzk2Njl1V2RDZmhTWDZGSFh2bElvZEVvOStmOWM1NDdqVFFaNEtQc1d1VGppV20yUHFXRE9DT2RVK0VxS1V5Z01jVU9oOWNrT296K0xpWnZVZ1pxWXpLdHV5MnE2OGM2Q3MxeW01NjFIaGZWMHBXYkM2Rm42bnZOaVpTS0NCOUFCUHo4SHJiSHdwWldWR1hUNXh6UjhxUDNFNFBVZWF2UElVU0VSdVloNHg0a3BkTEttSGduL2pNWm90TXRiejRMWDgvVWJibDNaODFxMjZhb1NMaEFsVGJUckxHQUJ0UHBVckxHRkN1Yk5pMHFQc1hZQS8rWXZVUXFCRG9DU1FWU0JjWDVNeGNXeld0V013NEhnTkZadGMxSG1mZkdsU1BpaHgyNUJmQXpocVBJM1NieFd0bTRuQ21kZC8vQzZFTEI0MXI2VXNCK2YycVNFSDYwT2lTSFZ1eFhXZTMxZGRlZUR2eFkzQSttbmkzUzYwSTM2NmQxMTRsUW1aaytFS3Bra2FCTXhyL09ERzF5MVpMekU1YWF4ZVJleTI5cVBuVzNHWHEvaXlnWDFxbzVXbkVuNUJZcDJFdWdkM0UxU0NBZDVIK203S3VmSFRLdnkyZW1QVTdTR3RjYWVLc1NPTmxCc2h3ZHpTaFhUTDluUnpFcFMwRVRyZlZhY0l4RUc3TUhPV2FkY2RSai92SWlJSFJMeEJzTnlFejluekRqQzdqa3FPc3NudlVQeUVWRVFBNXR5eTBlcEE2T21VTTB1NlVrRHFBVHF6WVl6SHEwSmt2cXhjYVhiYUQ0cHRBUk1ubndjazg4ajY5NWJOUE0va0RQRkFKSXdjYWpubWtzTmVDS25iQ3d0MG5wck0vUGtaZStxb0cwekxoaW5zT0RYcUs3dVBxcS9LMXkzeUxJdVhCLzh2SUZZWTJlelJDZ1JoS3IzZy9ZQitoWHJqQlNwVjJTUGUxYmZjd0o0WnpzenphaWtoZFluVTVEVitxZlFqR1paYVdIY1grYkJmMVlQeVI2RkEzbStRUjF2N243TjYzNjlVNDVoMnlDSmhyay9Dbzd1WGdkcERpWE9DTzZnd0wwYmlLUk1mejZnWWxDaFVPQS9jZDM4T2ZIOWRzbkNITkV6aFR6ZDYyeGkrNWJKd1AvS0ErWStSTVNUR3pmR0ZjWmRtR1B6dXkwM055S3ByK0hndmdXbmFvRFdCQjVUck1zYk9HRUtxaVd1MVFZSi9ZcGlRUWNHTE1vekpQdVFxTzJMNWE3Y1FOWWQwTHVUbFBGM1BMaGFVNTBhMFhUV2ZVTDFCOHIwbjczRHpmT2NmUW9ZR25YczNYTEhEK1crcjI1M0ttLzE1MnVTeTFjZlF1MUs3a0M5RUZ4OTNUbkZweEhUdzZWNHQydmxENlZ2WHIvYjJqSCtXRytjRVQwUVVjeTg2dHNoZk5naXdsZ2xGQThTUU9HRXRyTklvbDc2VTFVVmRhWFFNMXJiemM4YVVpbFVKd3dhN0tZRCtCWDVablMrUm1CQ1UzQlVyTTVhQzdGcXFWbjZtYlNGVDAwU2U4NEkreG5zUGFwNWlYY1RuSWVEYTB3NzhLQUtMcDNOZzhTemkzeXFUdlZiVEc1ZU1FcG5OZHhOQnlqSk1iZmsweWEyOERaQ3BmV3BaUVlZN0JJRDNXN3ZDS20wZWV3ZXJkVG1Ha2EzR21wQnA2WHJxVGNCWVY3YVpVb1ZyMytzOXdKeGUvcXJHcldxVEJHZ0xtRFQ0anhpWTdvUWloWmV0VkJsVER5cmpQR0hCQUJFQWh5S1B5YmNRcXM3OHhjRm0wMGVnZ1BUMndLdENrME9QZFlFd1JLVE5ZdENRbG9UL2Zzaiswcm42RkpGTGFEZGFCV0Erck43Qk81RVZwWUpDN2lvdWxxcjRvWWNDK3hmdGRQQTdzcWxjWmpxMXY2cy9Zcm94ekgvK3QraTVOUVVvd2l3UlFjWU9zaXIwbmdlU3FVemEvcXk3ZWV3UjdSNDF2UGNpV3BZcEdsN1Z2V1ZoUmJqd3RmOVRzTGhvNTQzYWdTT0JRWjN1MFdXQXNoQ3YvclV6QWwvckl3VElteGhvVDRicktPQUtMVGhTdUd2a0ljMkdTY2NRMFZOd1pRSytXNFdHUlpGTC9UVE91UEVrRXFDdlYySkh4aGhtR3o4SmtyRUk4dEZSVlBqeHZjTW9Qc3I3aWZPWGZKc2tVYlB3bFpvMDA1RnBLOWxZWVdYTlUvTSt6b0V5bmNaT3VkN2ZubG1KMnp6cit0ejNwVWFqcUg5cS92SUpGYTVCb3I4N0poM1JybnBVRHFRaGZNRGtWZlA3TDlvNjExcG43YklvZXBYVDMwT1huZTVQNDRsT1p6Z2VCb3Y4Um1tYldPaTdQczN4MFpzZ05QU0VsVzU5Nk13MVFVMEtXTWhtSXo3SmNqc0NGTWpHWjYydGhBWTRJQWRlK1gvN093TEl4U2lsNERES084SVlUQlVOTm1NR0JFdXdhblFKQWJQb2RkSTlFTHA5NGtIVldYLzExem92MWZvT3pTa29yZFAyb0dLMTBaL29DOThJTjQvWi9rWk1aaWlpMXVGNXh3T21GMDdOR1ZxUkxNT1YvUTVJNFlaT0wwSGNuMXpmSWRFWDdSMTZqeERENGZwUEU4Q2t0UVVDNzB6UE45L3k0MzNmdXpHb1phQnFvSW9SWVpWa1JrTlJvNm9aUFhyL2hLTVRlMUptL2g3Q1lyVk5NWWY5bU0rcjl2T1BnVEc3ZjZvTU5FUVUxbzJ4YzR4R0dpWW1sVXZDRzJyU2dBYm1JMVF0U2I0OXpPdGZoU1N0NEJFbWFxbWo2ZStaY0ZsbjZjK1FFd01rYU5OdFlldnFVVURXYjA3aU5GeDhsTFpQS2lNYmhrMElqYm1YSTlQejlXZTJaN1ZUQzN0QlU2cVg2RU9IWmxZQnJsWlViNDZaUHAvRnZ5VzlXTmVkUGkwdlcxSEVPbi9VN0JSMWZ2NFhlcnZjWVg5akdONDk4TThKZ3MyTVIwYUtsY3ByanlCZm5lWmU1RWh1UmZnSC93ejZ1VnBMZFpwSUpRYVpNRkxnR1A3Y211aVgzUkFmTGFCRTJTdEFydWxZdkxjUDI3RWFRdWNWQ2NqckxZTzdhbGtiTVZVTEVGWW1qZUlDdFRRWnc1S2hCVkJQdlo4N1NVZjhoNjNmRHlZcHJ6K25OaERadk8wcmlLU2MvM2RLYlhOTmQzZG90MXdxdEFldjhyNmVDZnh5VDJHU0pmOGUySjNHL1BLYzFqRUhWRHpDT2E2b0h2UVBZZmdxelBseFkwTEMxODhPVEFvU0pDRmUzejN5amJreXp1SFZaQUtseTltODJWVWU3QXVuMlhydmUzYkFXY0dxNTBIZzBEeklpemZzSHNvYWYxZHpsYVJGNGdjbFA4b1BpeldNNkJQYXp4MTIvcjlIR2JpdFVoSnp0WldEVEpDcUZRWjhPWEVadUhXWlN0MU95aGNhdmg3bFZqb2tyblBqcVFURUczeTFSWW54QWlqeUF6dWdYN09hV1NDRXZNRTRSK0toVVdFTnNSc2FWK1N1ZVoyVHhqSGRVakJrYmdaVXNsNWFoV1JLdmtiVEFtMjhoMTVyUFBwTVEwZTdZVHFIN2JvcUNMVFRtb1dpWi9aYk9mUlF2azlDQ29ZM3BIM0NDRFFEakE5L0pwbWNML0h3MXI5cmpQQitNYmJkdlU2Y2s5T1k4TVZCM0FvNk1iSmRvNjhybkEzTWo2UHhzNXBUYkpYRjZPUmFMWDhrQ1FmU3FicEcycm9MUm9RNmF1eEdONHdjWnRlNmdEUFpyVHRXengvL1AxWVdpUG0yTWdVUlA4akQxaHc2S0hhR2pNc1JjTGVYOGV3ckFWZmxGS2F1azl5QXFuQ28vZU5Cem1Sc00xdUNqYkJlZVhmaUNyaHpLdjJ5SHRtR05aRlhzMGxCZU5pb1Q5Wkw3SzQ1a0tmOXlDNzQ0bnJ6U28wWk01czExVUt0S240aFhRZ0hUZlpNZmhLN1JiV1lqYVRVdk9LT3VwakxOdlhsWW1QTDFUNjNENjJJakh3bHUyOUdUWHVBUkxYak1jbU5TQjNoQXovOTRzMExicjdhcHNrYnBUdzlwTFl5TEFKOWNOcFJKY2Jwak9kUlJUaHMzd204VndadmZUNXkyRnJLVkNvZTdleWJZamVkc3krL3NJa2F2ZG55SVQwUTh4V0xnNTdvUUV5VDRvS2NnUEVLc3RXenJTMWpoNjdEUlplR2VmSjJiQTFkNHNmeUVmU2dOTHMxaWRTZ1Q3UWJSZDEveVY5WXVieWlhUDVNRVNaaW4xVlk3cTh5eFhQWjBtNGxXNTdMWWZxUnVRZmZId3YvTFBQVTRkd2JlTlIxbFNKYjRkVjh2YTI1ZHlqYmFJTmp2bHFWQys0bTVVaVpZT0VlWDVjMko1VjROd1VOS1RxUFJqU2tod2IwQWpaMjNHYmd6bk5yTVRDeE15K2Y4UnZ0TDU4TzNLdXZDNW0rUkNtU040UVVtZVN4bld0dkRLb0ViaVFxWHZsN1g0b09wb3UrNFFKRDFjekpKakI4SUNpQjRIUjRVaXM1b2d1NlozSmo1eDNMM2E0eGZNY1hwM1Jldm5hOWRXdGdKM2ozL3p4dlM0M1B6OUFYa3ZCYnJReno0RUloT1AzZXZtU2Iyb0o3RVYraXE0SStBbzIwQW1JdXdWbDlxSnl4a0tkYzg5dXZydjcvVTRKR0VmK0J2R25WOXlEelRjaFZMK3cyVE9GSzVlbkowRGZmZDMwUm1WV0tmY0pCR2NEelY0RnlSeGMyVFpubWZRS2FXRStpbkExR2ZEUFVyVEZWMllhUFN3b3V0UmF6dkdsMXg4ZHlVblNxT3hibTJYNXFEWk1LaGpVelhKb2RiTTNya2taR0ZQcVNURlY2RVhsUnlTdFZJbHR2R2xINytwY2ZDZ05JMTBvbXlyWFFNL3NhWnJpUWNKTEs3TXJEVnVlc0FFQjE4UXZnenArVlBxYkh0ZGZwY1JDZEE1cDUxa1hyVWFsN1dpSzAzTVphV1R3SitqYjc4RnZhWkR4VW5FVkJVNE96QVJxVzlwUi9SYjZ1eGlhL1NvZzRtSm82a0RleFdiVFV1TFcxV0NwcTQ2T2hyeTBiWTNORWVZTFlscDRrK0U0YWtUcmg5VjBlRG9zamJ6N2dUa3NYZnlFMHhrRCtiWjdIcTJvc0R1TzRocGdNZWwxTlQ5S1QyYlF2d05jVW55eDEwWkhyemdIOXNHSXZsSCtDTG02aXFUdUFEVStuRlNZa2docnNvVXZqNVgrUFhHQnZvOFUwYlFvNEpkTkhERk1RNWx4QmpWVTMzV01waXU1aDlGSnJzWTErU0pKRUlwejM0K0pxNCtMVnJGVUtEdjgxbkY4V1ByR1gxcjNjWU05eUVHbWx2NHBUN3NEcFFuVHFoc2dEOHlxWDJHRmRQTzZPWCtBS3paYk5BNTlwVlRVMzkrRlNLS0dNdENmaVRVYjJpdkovMFkwVzVBQ3poSFNFMjQxMGU0cVI1RXorZ0RxVEhZamJaZG1nc2c3ek9uclgzUlAxVDhhdEtUWnBCWXVoYkZSUXZUTGpzOHhZR2psRkg2WjdmNS9SeXlFbUk4akRkUXlCNzJNc2NaRTU5c0tuZWtVTVdqWnE4azd1ZlNSdlo2aHFVcGlBTk03ZlR4SmZWRHhvRG4vWVdtTWViZm03dTJUaEdWV0x0SjR6SjhHdk1nU0d4Tkt4NlRBQUdyaFBrSU40bC9SYkl6bzJZQ2ZMQ1J0TTBKU0Vob3JKSC83Z0V0eGxEeDdyRDNRSFZ1dzAvT2VCRVRrNnhKOUxWUUQzc3Vob3BQOTMzSURMZEJxckQ2TWJ2Vkk0bXJzb1gxZUtoOVpuR3F2anVJN0duTUR6Q2ViZFB2TVRIS3VocEVibVZUWmM1RDJoL3FVd09VM1A4eU81R2JkSk9zNWcxdUtadkRlUEcyZWNGTTZqZ0xDYUxJQU5zSG5yRis3QXdCakpXNEZ4NjhwZVorNVBVNUFqRloyaVE0NkVwd2dSTkpMams2bnp4d3VIVE1lR1FYYmxHU00xYXdITmJIcXpHQkpyaFRZejdIa3hQWExSSW1GMjlZMnM4c2pxWWlHbTRKWlh2UUR4QXpZdkJJODBMV0xIanlGQWw1SUNxOHRGQTUvM3VHRDJvMGhTUFA4azJHL0FsTnpFQXE0QXhHbGVzdC9KaUh2SWJNc09mR0w0NnZhUHBBa0gwb2w0TERCb1JKL0hNbUlhTU9kUmVPREFlaWZBeSt2QzBNWERtbnN5NGtvYXdEeStxYy9RdWtrY0t2VHd3MnMyUDBPVkxEU3N4REMrYk1TV1BsUnI2OWZNQmdSN3hRdzlocDZvMXZVRmRnQ0pSRXd4b09HbWFyc2dweUZiL3cwWGE4QTRQWCtoOEw0Zy9WbFJlZnVXSDc5Qm04UEFjWmhlZmRjSU1zNmRZeno2b1J3cXRqZWM2cW11WG9FMGMxcDVjNE91UnpXNVNwQTVVempnK0RhZG93bTBtbnpld041VWx5K1JHZjdHTFhYOTdRSlhsc2o1Qmp3cTNFc1pCR1huTU96OXFvYnU2SHZmRENHaEYzT2NyTHBtTFV2SXRyN0lTNXBhUkxrKzl3bko3MkVSamIvMVZvaFdPS1phdk5uR01YbkZTV1phK1VYc0JZWHBQWThZL2FsRE1aNkxDdVlPQWVnRXNFc1g1ZCtCb2FCbzBKUlEyTitCMXNxZHRob2RaZHc5bXZKKzRiOHZyY2dTYjRCNzgvS3pJZEl4LzBKZy9Qd3JSVlZvby91anhNb1RFcnp2eVVJVmo2b1d0UzlWS2JlZFpIbExsRnZXYXh2UzBoMmRreVZNM1BLRmQ5ellHeWpXbGxydGFtMTU2andkMmRnOEtDSk5OaHRQOWt6c3hITi9FY3NXbHZMYlpRUFlhWDIrSG8vWkFJS3N6aEJIbHh5dmFKRnpnWlkrNE1nVEZKa2JwODlrSG9FWjM5Y3N2OG1zZVJENmFFTVJQWTc5VTBjNk1OODgybWVubzdjYk8zMTM5TWExeWNNYnBpWWMrenhpazJOaXpEVU02QUpRNnVuRDliZ0lqMTIzMUM2YysxNzg3ZEJFc2NIanU1c2hhUVpIUEt3L1UwanV4dGFoZis2K2JJT2V1SmRCV2tZcG9kbFJTTm4wamEvUGNWLzBlK2pFZ01DNFZYRTVFM2VHRG91L0lHY3hYOEY2OEQyOVJBUEN5VEF2R05hNkV6SXNqaXZHa1JpU25SZldGOGZmT0c3QXhPL0tUaG9oWnE1ZW44bS9XUHpFT1ZOcEl5MFBhNDFYcXdidGtKeHhBdkk5OGpMMGQ3R0dLVWJ0UzB4THF3Zm1Ybzh4SFM5dUxncjNkaG9USk1zU2k5L1p4UmlEekhwaWRnK0tmeUJSMHNRbXFRb3FsQlp0bFZ4cHpOa0ZkUWhaSkl6bXlZQThQSmh5dW05ZzlRYTJ1TTBnRXJkNlBoeU9HUHYvUkFZTEpxS3FSRU05K2NKR1YvS2pNN01ncGJGV1pCQ0pUdWFsZm82Q2E5TVd2TG55Wkk5R1IzWkNJdTJLbDJoaUhhMDZRUFN0TnJrUTBSTVpXRjYvT3pSSlZIZ2pMa2g2RStxTzk2OUFyQ0p2OGhrNUlLdmhXY3BVcHF6M2pMRXBxblQ1UUNyZHVvUVNWNmpYSHpBc1FIN2gyOGZtL1FVcXVQckxoeVJwZUpMaXNUSlRlNDBwRG1KVUREWE5lSG1RRC93U3p4ditWNGNWQ3BFbyswWmpQMUo0SW8vekdwbVpiaXFXb1JkT210NnNCdGJmYWptZWVZeEd4NURwSzZxOGVQeDdqdWQ0dCtaYm4rWjF5b28yeXFBck5TRkNLakZkOVhIenB2Q25Zc2dYNUNrQk5RamluWndlNm9wbGdGWjJra0ZFc1pQOFBYdW9nZnRxYUtHYzc1R093MzM5UXZpT0NjZ2dnZXRmSEJmcnpzU2JiVk5qbTU5OHdPMHA4K2FkelhzOWMxNTh1OGszQ1ovcXhCanVReDN4ZC9MaVVQVFFlRFpyWm1BUXNjRUhoWE5BVHh6eDdFT2dQRHdGWlZ1dys2b0txdVBOb3AvTHNGMFh4NFBQTzlmdGRBSjhvOHNpeHMvZk1kRE95WVlub2FTUzVoeXd3SUIzZDZTS1ZtL0FzWDYyNnVwOTJ4WENlWUhUb0F3M1NDeHg3aFhjVXNyYjY4Z3dHMlliVmY5V3ZJZnFhTXpuQXBma0FZUkZ1YlJXRnNHV1R6RG1UUkZGNVkvWHZDVnVpWVZyRGNaTElRYS93eFlJS1J3eXB1dktxMWprcW9ZNTFTNlV6cnE4d2dMdTlFTnRzWG1iVXNIZ1AwYzJzMFVrWlg3cS9uSW1QT2RsUHVEczJwelVpdFRJZzdVcTZQY2Z3SHlYTCs5a0xKWTNoejhCeTlGSnBuV3VGbG14cDZoQ2d3amRrcnR5LzFDUmx6TWZYY1dJRFNzSWRYSTl3KzZkVGhrV2VmWDRITVJHTGs3NTJGWlJFckd4dkN0aE1wREZKYTQyYjE2YWVvc1A5TTUxNzkyZ2kxdFB4dTRjTXVucDljYWN1WGJqYnROeFpIS0MxOUREcU9CVm10QVVvSUFNcjJEeUZDN3Z4cVBaMVNMSUxPVU9TajU0ajJOcHhybitiUGJlTHo2RWFmZlRVQjJPcy82WStWN0JaTG5NcEtkK0M0VEFjVnVhNlJCaUZpQWJTV2RQTW55bnMwOWJTcEVCNDdUYTZkTytCTkVFMEhOell5eXowc1B2b0JyQ2w2cFhFajVjQ3V2dlJxcFpZT1BmZmpCT2o3cHF6dWd5cDUzTUJZYjZSb2xkdTdQaEt4SnQyRlkwYWVMM3hqTE1GVTR4QXVMSFJyMm1uUnl0SGJoTW1QQ2tsWFU3ajM2YlBLOHFKQTNXbSszVjIrdVdUVDlDUjVLL3VnWEYzMG1NNHVKTURLL1I3Y3dWNG5XbmtHUVFLMFJyN3hxaUEyTmF1bWlWcVFJMzAwZFdld01QbFpwdEdnRnpXRFVLa0RLcGh4Y21NdGFISVRDbXRNeDZjSlZDaFRVdW95ZDNGUml3TWRQYkhpTVJCRUg3TldkTmVuSkozQ2hpaXhLRFdIeG5xVjVUYXNnbmJNdVZVc2x6bHZseFdaeHhtS0ZyLzNQVE9Za1JEL2MyRnZDT1FoWElYVG0xT2VDbjZnT0NvR0h4NGxDVlFuc01SV1BDZ05DMytuSFZLTFRmSVhYTHEzMEF1ZE1LTUx2VTNoRU1EaHA4czNBaHdUWHlNUElyWG9sWTFac2g4ZnJVc1Jrd0J2bUZQTFdsMUxGaFVJblVsU2hxdllZK1drdUZMVjc2VVd1cW8rK0pkbzF3VlUrZ0s2QU03QmtNVzMzcitqT1NaUGE0eGo0MDdZK2dnZ2xTNmEyd2REWERKQzhmNU9DN29DakJsa3lPZlFqUEVqR2JPRXVubnIxQ2ZBT3l5bDJHSkR5RlU3cFpFbHdWVTAzKzc1eEpYVlZTYkhPVldIQmtSd0cwZWZGZXZYUTRtcnA3RC9UVlgzbGRnaFB6R2lLZ29LbjhiS04rWm1WdFFtYm1TaTlMb3gzRTRxNm5YUlE5bkhLR2J5WklQdXZBdFJmSjU4eHB0SUxrZmJvYXZnSDI2YVhURnZySmRMYkVTZ1czdHBlYzA5OWI0NjdlYjRLUk1mOG9OS3JUT2Vid05WbHExKzBycG1RVWI4ckRKbnVhTU1QSldDTy8xTWN5bUpFOUJYUEdQNHRiMHhoeEE1MTFycHdwNDFnMHVibGx0c1FucHBlU1YxbVdBekFiSm9Fd1dCamU2TnRlOFcrTVlldWczdVM4eGNnVlQrUVpSY1NzblRkZXpXZFptN1FYUXVLdjc5RVBacHdpRUNscGM3WG9xT0JTY0pielVTVnE3Y2NRek94aUFqR2RFd1gxNzhybkJuY0tlendRMldnSjR3VGU3cVUvVDFGQ21ZWEtFa2tyK2pldUQvZ255THpWeXh3V1cydDB6K2hTZ1N6MExRYTdBVjRyd2l0Njl4NStXTjdteVNCY0xqYmJSKzZTK0JIZTZWK3ZjYkRVWVpiQUlGWXZ5S1VFUDJPTVR4T2VTajRKZ0UyMy9RQ1N2eDhVMXlKQmZEbnBUZytJOVBHY2lZY2cxNDc4WTh5Y2pUU1N0WGZlTFdzaFNpQU9zUUYyU0dQTG9ERXIzRXMyQjkyWGVIWFRBckdtOCtkS29VdjFZNENLSFBDOFUrWFpSMGkxVnRFTlRQckwwd0VOM3JLMnNUN1ZYSG9TaHpKNGtjSkdOWFk4ejc5YUtzZTNJY3pybjFmSkNFRFBMdEdjUEFURzB2UmR6VG4wTEVpdmlHQXg5NmE4Wk1pdDQ0QlUwS1BMRlM2OUxjQlllNEdOQWdvcGpFTU95Tk1uMXovOU4yalVyRUNQSmx1ZVo3UTBRWGJBV1FMcXZHZG9CVnllVGk5QVlEdURqMXJaT3RNN1BoZ0puTnROWjJnZWZRV01KOFpBczNCckkrVUZWT2t2RjNoaXVhQk5PVGdla2N5eUN1VStMRDV4djBGNjBCM1RMVXYxUzJRem1KUmsxYng0MXc4YXZjVFo0cWorY3VEb2QvWm1xY29wa0pvQ3ExK1QxY0t4T3g0c0RCOWR1SnJMWWhZSDh0UC9kbjcrUXpHUVd0dUtRVThKOWpPWTlCOXpXcUJCWlRzU0V0SmlDTURDVDBFTFlaUzRob2themZjaHBseUIzN05PWHBVdHcxaGs0WmVpMVdDSlZRcERmNVp0ajB0WTZVVXhMQmo2Q0lXZVlQcVVqbndZOE5YY05ldHhKMGpmUzgybFc1QmZyYnVHWUtaTnBoY0F3Y2lnNkRTYk1KWUJlVVo2WWpRMHVUWXc0a3lCWDN2L1cyc1VLMzV0SnM0ZnlxaVdnTWhkbFVrNUw0aVovWE90STB4ZXkydHpid1pvSlIrTHArK21nQmRHaml2clNKeUhkN01uMGZGaFFuaURMdEdWUUM0NkorbFBLYXMvcVlVZGNKZGNQWElCR1VKbE1QSnozT2EzRmRzM0pEUmVzRVdXdXFuc0VWSTNZZmRKcEY0Qy8yQU1tQ3laZDlPdDlmdlpIMzY0K0pkWDlCUXo2VU1LZjgyWXZodGljRTJEU1ZEY25nbUwwV3RjamhCa1BkMzg2VnNHQ1h5UTNBTjIrK1J1VWpOdG5qUzNBeDcrc0Jnazc3VmJPdnNZbGVlR3lLZkdtOG9USWlvSytPN2t2eWFOVTExOFRPalpJa0dadlF6RTJUS1kyQWZKT2s3Y2tFeHlBZGNlVU1mQnZqbFZRVmVzK3QzWjFMSXE3Tld5Qzk5V000eTBqRzUwZ3JRZEFuUDNOL25oZGpyMGtkUzJ1cjN2YTFQaW9wZ2h4clJiVTN4Y2ZTQllLRDIyTWxTS1JuTFhpN202MHp3UEdqcSs1dEhSdFRyVTFMYmpQVUxaYnpPNHVzeU5UNVBBQUMwTXU4NWVTM08weVpnVGJLZmF3UHNyb1JqeHMvbDNmUGY5d2l3dXllbUg4TlRxMUVJZGtrY0paNkRrMnBuVmVwVEE1Z2U3ZDZ4cEdQakIxUldLcUx5ZzB1SDVyd1dYZzY0UjkyTmtQY3JNTkt5QXoxd1IrMW5sQ3JwV05SRkFxcmhpeHVNNk1DUk9FTW9zNmM2VkdsbWRZQlBJWDF2cEUyaXViZkdVVzd1TUp6dVVNdjdxOUdZdGtta2EzZThIUlVsY2J5Q3FDQnpyR0ZPZzlSaFRpT25KbWFZNmdDVlV6dm5najhZUzhkaEJxdDlReCtBOGkwYXFNT2kyZHRpYy90Sng3SUx2VFJ0dXZTNGZzaituMzR3ZjZOL1p1citKZ2dHL2h6Tkk0Sko3eTNJRVhGRlJXT0xmTnlVZ2kzeHZuNkd3MTZoRjNiVlMxK09uM2dGZkpTTUJLRjlpc1pLU2RCaTNsS3hRQUdkYUhEMXdaemo5ZEZWb2Z3ZTIrbVlVRVQ2UDQ5dENXS3JOWGVhMDZFSnh5Z3ZTaTh2Tm5kQ044My8xL2dFMEFPMHlocHRSOVZ0Ti9OVUJTQTUwemk0WWF5TXpTNkcyN1h6Q2VzRUNTRTVXbi9BUEZXQ3ZXVm5rQUx2UWlMeVJNblRGbDk0UEFWMThxMlJwaHNvU2ZVa21tbWZNaHVzQytEVG1KMnlac1M2czZGL3FjN2k2VXlOQW9GVXN4NmQ2THJjS1llVVF1REJTek5pN1FMbXRtWTZuaDFkWFNsNjRRZjloN2lsVFdQMWZ2OGFjM1BwSHpCbmVoSnd6OXprSmN0eUh4dXZCWkRyR2hOOE5jWUU4eUpJWHZOUjJ0bVVraGdQanQwNVdKRnBLcUlqcHNTeDMyQzkxaiswMy9zZGUwNDRNeWM4V2tCRTdPLzlBdmxHSVRDZEZQaVNaOVhaZ2FuM0pnSVlOWk1pNDZObngwd3I1SGxDWEhrczBCaGFsTytaM3FFWXp6MGREWjlPR0ErWXU5alBFNE1Ib0paQm5JVXFtNUEvYWEvMjIrSEpjVEF4eldiaWVBbWluRlp6djlqM2puVjBaa2VpWW54aEJsTThuZ1FucWlVM3ZZSTVtV1haaFJ5ZElLTVNuRmVlTUIwTXRwSUpzUUE0V3J3VnB2RFZ3b2VXOU5DWndWSUtvUTVzUWYwOS8zQ0dKQk5LMUsxRnRab3E0WmczeGpFdFRHcloxZk9vZk1MMktvay8ySjBYQ3dkKzVEMFNFWmVSUjd3Q1A0ZVpUcEhsT2VtVit3RkZDSU9lay9UZVMxK0lPQkdUVm1TQWh4aC9FNDQwVmZCeE44eHZBVEgreWhEZ1B4QkFXK1MvemhVM0VGdEl1SEZ3akRCem9Cc1I4Y0FmOVF4TVFiU1FNMDdRMVh4UVMreDBVVXUvY01NN2N0eXpGaXNTc2YrK256MHpvUHRDcDNiaVZSTThXUU1Celh3RXFNd01saVpsTHd5WTh0UE9DeUlzOTN5cW0yODh2d0FLZnUrL01oa3JCT2hXV0FuWVV3YTJzamlIZ3MvRDNBMU8vVzU2UXQvQzBDcTFCR2E4VGRKY3BRSWZxTFZjNERhVTZ6WC9EVURMZ3EyL0lKRDNkV1pjcjFiOFM2OTE4aFdoUG8xdzNwVHpCV2p4b2ZNS0xsNU4vOE1lb05uNXZzRGlCKytMZW11OXJCRExJS2pwenMrTDUwVTJ1Z21ubHpLT2RoQ0xDanUxYytIR2Vmd00rYnJ6b1NsMGNCVHZjeFg4ODhLS3NZT0VNWHJXMHQyb2pXaTRvVUY0YUg4UUFNcnZGN3NqMEh5K09tNWVvd1J1NU1jSHp3OWt2L2czYVU1K3BXTW40NmZoUk9XSk53SDVDbnljc1A5ZEVzZmN4QTArSEs3ZlViQzl5Y294RkErck1WYVlIajNIWWNXa1dFdHlXaFB3VnlMREk1YWpvNWNOZ3E4bTdXQWp4S1dVaXRKV3pra1JSWlcxSk41VUFmQVdWUmtCUk9ReStHd3Z1UXR1eVc1b3FlRTRSS2lIeC91WU8ybUhJYVFvR2Foelk5RlplTHVpUlRYMEtha3EyQUdldVpvWERNcXc2MU1tUDBjQ0VSMUJJdzlFd25FVDBrZDA5Um1rMERqcjlnU3ZzUmxLU0F0bmdVZjkwdWlkSFlEZmxIMnBiTDdNamYyeHBuSjhNMERmM0w5UWhZSmZQY0JKbnFWbmQvcWc2eWI0YTd6RTZISzMvWHJUSzFlcndNUklaV1kyc0JtWkVtUWNwR0ZhUTlXLzJ4RHFBZVI4QS8xTEJTbmMyYldjOHVwT3oxNEhKcFQ0eGVWcmNaM0dWN3JyMHU1ZGpjOC8rbUczRyt1QysrZkFpakNuSDVrRnhRQjRTTmFCemk2WVA1enpoS1hyeVpTdmZuMHpqUnRpclNlY3dOcW95U1drbnQzc2dxVktEVm8rWCtSMzFrWGRuR253cVNvUXliNS9JYllBTW55Mm1DYWVhT2NGZXA4dmNLSEw1NVVKQmxaMXUzVlVLY3BJSmo1a0Q2UjFMSVhuZFFXYnphaGtNTDl3dTI2SWYrYjhWSm9FcmxTZlJBN2JOWHdicFNKcUJFcTV2bTVRcy90dWg5eFk4SGF0Zy9xUzkzam1TdlR4WC9PMjNsMXVydUlabFBPYlF1T1dyVTRxYVFOK1ltREFIUllOL1l2aTVDUXpHSzZGQVpQUS9BK1A4Zmc5bVoxZm80Uyt2cWIrN3dLSTI0NjJnRzcwdVRuTXk3UEN3cXJScGU4ckpwZlFIT1RGRHlGSGgwZHF1RVBZMHRaSGNLVXpkdmRlMUhXdWZydFg1eU1VdHl5Zk8zck9FS28yZjBYL3YwM1BZMkViSkJpUXdiRjA5REFycGY0WFR4b2s3NklDNEY4TnRxK0hmWXkxY2FXMkNoWExkN3RFbk1HUXU4VzZ2Zm5XcE9pYVF0YmlKQStOUXBaSDEzMlhjZWhBa0tqNjFDRXoxWTd3YldUOFhvNkc1S3Ava0w4dDYxRndYNkF6YWpRU0NrWDBkT2p6R3M3MWI5L2djcDl4c2RsanFVU1kvbEhkWXNYYlRiUW1ieExYcUtNRGpCeWVNV3RCakxDcHZRdlprYjJrOVJXakdxbkQxaGZVbjY3aTBHazdLV3hzVVhTL0IyczNzZThIOEZtY3V4d2E3ZElpTTErZ2JhZWNLMlAybkZxQWdMUGtQdHJ5YWZ3TUI3aEtDMkZUZUE4NWNtall6a091V0UxNlcxSGFDUnRRRFpUenl5MXJaMHZiMTJodXA3TkdyYVMrbGhmeUcxSXFzV1l5UUQ0cm5NN3ZxU2xRRTNCeklKL3hSWmNWQXNHVldlaDI3NkVJYUsxQjJ3ZFdFbFNjaHd1QTdZTDJnTkR0VzBLZWljNDhwZGpGVWcvalI2UDJuRlBpcTBhM2txMWZCVCtzbFY1ajFFVTgvY2c5cGtUZ0JNN2hZejRpNmpRYjZmRCs1ZTlaNGoyZDVQWmNzRHc0VjVWYmxXcm1Md2xMOC9sUTVvc0x0aDROUnNSUFh2MWxEbzN3R2pLbjFVWHpWK09LMjJybnZOc09OK1loYzdwajVXTXJPNnBwT0N2N0Z6OHFjaDQrSGtVbjVOdXZsTjF6bXoxRlJGSDlseDVUVVZmUVRuUlJDN21WMUZtaFoxWWVwbnJxNVo0Nm50c1JhRGhnQ3pRbGRNMVExb00xSld2TUk3WFhrRmh1Z01vT1RmWTl0VzdrVUFzMmViQ0lhWWdxdnJLNmhVTmxNNnRqN3Ura2RPSUtsd2x6RllrN0dvOVJYZlZrbHdvWExzbFUySnhlU2p5dFhUNlh0Vm1TaXlQOXZCcHRDODBvQnBlak1nV2NXSkVFSjA0eHY4aVFMZzRVUHhzdGNQY2ZqOXBGLzVWWGR5a2ZxY0J5azJrUXhRZnNDaFo3QURqZWdQRjhTM0c4OXNaKzJlVjU2QVBOZ0s2YWxnQTRoR09HbENGRDFiWjBsRGh1SFhaOWlMRWUxWDBCSDJMVkZFQUlGUmlQbHJBUDcySitRZ2FXTkorYUZQK2E1TnpFRGhucWxLQzJKejh6cXZ1eUhQdDJmUit1MnA4ZEl6aTNUb2JrVWJLUmRiQXhtWXNVbDUxUEp4NEN1d3paQkhiWXpBTG56bFlGb1lCRTZrQlJROTRHZnpzTXdCV2JyeGVBWVp0MFRWd0hHRDgrMVhjODlKUnVUSGFvSzlMU204SWd6MWtSa3hWOU5kT2hzRzhRdlFtTUdjNEpZMDN4dE5LZmxDS0VzMm9pR0pUOVZrMzBWaGF4Yk1mVVNIRGJGSjZKQURybHVrNkV6cUpnY1ZjYXRFdUlIeEVsaTd5elVZUzRJSVFzTktCTXNiUXZPNmVCbXpiT3haQjJQMkxhNHZRREN6L3ZZbUlYTVI4NGFSSStvUWZhNmgvOVFLeHdqMWtTa3YrMjBXNXJtZzE1aHFiQXhoMGpzbTJEWEtiTTVTb2pnTmlmdTJ5dkxjVlNoOXk2TVp2aTFvbXRBT1NDa3hBdjVLYXNkQWduczNKZFJ5QlZDUmN3dEtqV0VxczVpVVR3bExmcERuK0E1eHN2aXIzdFVaQjRrdmZJTFFWcE5mSDFFOGpETXAyNk5sVDNrTHRIZ1lLemtrZEMzK2tBVVRacWdocnR3dDc3elZTQnE1blovUWpLWGgxOFNLeHV4aHdHeFJlVEFjRGZiVXE4bFRZNFpKdEF0QzNXSTJkcWRHdmJyODdDYjFlcVhCaUlTb3QzOStvKzVaQlFWcWczY0huNTl3OStRQUladUZ4ZVZZUFhIOTl3Z1pnV3pxd29kck9rYnB4YlNKQ3F6U2Y2dzVPVHkwV1FRaVVUZlJ1T200RTJhNTZZM0lNdHI0S1QyYVJNNGx6ZGE1Sytldi9uTUJKYlJleDVOcTFLMUpEUm1GQzRNRjFWNkFFUVdvMkp4UTR2L2FWaytCT3VFSXo2WFh5Z0lEaXl0MHJvcGN6c3NNSmNoTkp3T0NHME1tbXdEYVltZ1RkMHA2M2k1SHZTNzBzSkl0cVY0Wkh6TUY3bEdDclN3d2ViU3gvMmlaVUlnd0RuSStxa3QrYkF0US9HK2pKZGN5M2dYa0M0eGtCRVhDa2lTU3l6aHlPb1JOSm9DbFBRRFVhakF3L2hVM2tVQzdKdHJhK2QxSThkWDFTdWdDbHhEam45NkIwcEZPQVEyV1ByaG0vaUYzU0x1T1lZZ0hBM3lHVHk0MkRVMWFpZUsrWVpaTXVjNEF1dXR2cVZqZ3E5a1hzaXRIKzF2NVluZWpwK2xRUDhKOExyREd0aE9SMnhNOURDajd5WXc0R2JucmNROWs1OEYyMWF1cmdYMVVkUURzaVFNV0l3TFRMTGtEeitTbG1mRXpYOUJBeUJ3SE9LWnZQQm53bXNaOVRUMU5rQkFUVFJSR0lXMVlmRlNMNU9Xd2hSa0VrY0ZOa0pEeXgwb3JJRmloSVNVMGtYOGJNRG9UYzJDNCtsUC9KdHpZUFhkSDk2Z2NnbFdIWGpNVE5Eai8zUERkczV4Q1FIaGRiT1ZFNmZJbjZxUE9BQ2ZxVnhFLzMvSVNBMDAwUVRsbWpOeGI2TEFOM2laOWhBblZpbTFENDNqcVoxN2pCQlpsdFFhVVRkalJBdSt2cmxrY2pBMit3OVBjNWdiaGRXM2ZGRHkzSEhxaWpEc3JPaUNCdGVzd1FjRXV6RmNOeTB5N085VG5RNGl1Umo0M3RLK0ZTV0NEanZVenVJdU1JZCt0WW5zd2Z1OFd1dUMxY0lRRmlkanBZelRUWFRGVGxNMHFGVGNWTTFyQ2w3Q0h0TEVwdlpQRlcrcVhlVUJZdDhiOTNPWWI2YzZoSEdLSFZVNXd3WkVTQ2dFMkc1RHNETkFBc0FQb2VmcVNrTXd1amRFemRuWHJyVDBSU3A1S3VQRm1TKy80dDhDWlV3RDFSL2VsRjdVQ1I2Wlo3MmxuUW83WDh3Y0tjaVhid2RzS0Y0Wng3QUVocFVRMHRIWUJsdTRHbmJGQktFWmp2NzJDanpZNkNrV3VlNUZtQ1hWbE1aeGl3Njk1U05pZE5XaVNlSjJKWFdNckJMd0JjV2c3T3dLTnhYaGh4RVhhTzhIRHBPQ1N2ckI2T0ovRDFmbktKUEFjNGMrTmg0MUJrWVE4YnZhUFJZbkNoUnhUNTFMT1dTelh3UlZkbGEzMWdrdGp3WXNiR2FKam1IRU5LblZ2MEdSSjdBblc1REJwNUJqelZUYzcwWDRtWlA2dW9pUFpqYno0bEcvb3FGbHlXdDlnWTJ6WHg2d1pTbmxkWHEyVUQ0ZEZPdWkyV1dZRXdxZlhkM1NKN1A2eGVGVjlYZytPQmREQUNnRWs1Qk9vYndFUUNOMlFIUmNOOGd1dUh4UkJtOFQrYWc0YnRZeUJ2bzRWMkdnYUxaRWdHdjlOU3JUVWR4OEEzWHJBelgrOXUxdE5nL0RjQ0hFU0tkSmpmQ25aSDZyQldGMGpQVkZyZ0VtQW5UYytQQnVTYUtnUDc5dCtZdzFXVldDVE14UXcxZWIxZWRHU0xwNTFncDdWZnVVRVc1emdqbHB5dzFkdlEwOXpySkZtRGtXekZBQjByVEpnTmNEc2pPL2g3Sm9VTVhrRTBZajNMNzhpMmFGZi9US25FUW9ibVVzVEdmRURnaEtSeExpTjZub3h4eHBDckMvV1M4ejFmRXQxTW84SXZCODVsa21OSE5CKy9XTXMvd1JVUnZFTnRDaFdYZmp3VmJGU01qWjRvUE9mNVdmYmR5S25LNWRmNHZSZWhGOHowN3lRK01TNnJVV0NLdmwvZFhHbmY4UFQ5WWtGWm1ybWQyS3NBanprdUQ0QWN4UlZkLzZ3M1Q2akMzWDFLWTNhQXlkSnhlbFFjb1lqcXEvS0VGV1ppZHN5VERWeWt1WTFMdndRajhHdllFVDh2Yks2UUpBWHRoaFc4N3pEMWFQOTB5QmVLdFlXemI4R1M3V0xYWDczb2VZNEUwTG1sSDJrWkswWG10ak5FbWV4dHlmUUg3SmxaaEd5eTNWazhQZkRaT3BDdEZkejBSRWJ3NkUwWC9vVXl1ZktvblJOQnRkM1VQQXB0REFHaExON1NSMG9LUWFvWlkzVGRPS2dIN2tybHphbnJ1Q05udnNWaEovWDFtbTl2eUpPYmhYajJSb0JKNmxhVld1NjBZNlA3QmV2RmZOYS9TdXNQeTVtRUduZVEvV0RJZ0tiV0JMM0dIVkJIMWI0RG1aNUlSV0Jnd0duQjYvS0xla1FNK2l1Y3d2bGttbjFNNDJ2MkxOcFk2UGppeUc5VnBUaDhQU3BoZ3Vsc2I1K2hRakxycElnS2JSV2d3L2xRR1pWZnd3bWpMREFrYjBmdk5hTnFEVktxTmdSeUlJOXVwckFuVjIxTHN2TjNUMVhyWTZGQVQxYlFHbmQwa3RWNkVkT2lpbGZUS1ZJc1B3aEw5Tkg3TlE0RFlLTnVaVWg0R2FkTEY4RUVyUHZQNldyb0dZQjhBU0RjL04xWjdBSGdZRVdNdTI2akNab3VBck9qQ3U0K2hNeWRRR1pvUUtoRjFQaGVQcU8wSU16Y3VRV1dPWHJCRDF4TjVQajdRS243a2hsWm1PeW91V3h6ck92TjJUbkdGZ3cxYmkzQS9uY3JNRG9sODNmNVVVK0lPdHliekc1M3hTK3FQNFlYYmpUcC9xc0ZsVSsxNXZPSHJ3dHc0Z3JaZnNoNXcwR1owbjlqaGMxVzk2VzRJNDR3ckdZbHdPbkVuK2Y4c2hPMHh3SDZBNSt3d0xnU2I0aWNWS0h0QUhnWEZFdzBoV2tmOEw4b0dDaFVwNXVaVVYxYjlvb3F2ZGQ1SkdTWjZNanRhYW1QdUpxVjVkemw0cnZ2RmdpbjhlZnllN3JaaFJpSTR0R3d3cHcxd0tRM0R2TnR2RDRiZHF6VHRycjRsTkZDL05PZTVaSFJrNy9XL3dpZzJscjRnbUxMdnJkd1RuYnpoWG1rK3Y4ekFubWh1R3VhTHBzeEFJN25YeEZUZjFOSDRkK3dtZWdEWElscTZaVys5aVM4TjlSS0FlQWdhckVYSjRuVUN2OWpHUVdPTWpOZWFOaUZ4Uk5LRE5PZ1BkRkxkcC9HZGVxOUhRSGpEaVd1b2t0dFAvSUxleHh2OVIrbU1raXZ0UXNJcVN0MzBPa3dqSDNiZHB0UXQ1bjJ6M01wZkxsc1FMYTFWQ0toUFpqbndERzBWWWJMQXBzaUNSTGRjTFRhS0VzcUlPbzZ0R3hVY0NyNmE2SlUvR29vckRtOWJ5VFZnVGU3OUtzdnFpUmQyQzU3d21OTmVVK0puOHdEeGhFeDcyUE1JaE82MjB1VUFLL2VDQTFJL2NNUnBvbTdyaStPWmxsb3Buc2FlUEp3NWJHbXNIV1NsNkpqVXc4Mm9QMDFFcUtTY1RyOHFXby9uV0V6TmtzcGhwQjZ1N05PNkFnRTAxVGtwRnlIRWZYZmNEVDdITWcrSmZ3SHo4dGNOWk9keEJ3aUpWT3g4V1RPbmdWTlBHWUp3U1Zrd0ZxVHZJYWtnbExQaXY5d3g2TlRqRkVkcFEzYjNqUVE4NFRJeU45a2JqUmJ4WEFJMkx1UnY1T3F2RHNmZW1UVU1TbFdDUkZxeUlDNHdJWDRRUTNwVnNZUEtjYjgwalhGNDcyRktYYTNlMmxTeWt0VkN3NFQyVFNYbExwdkplczkwUmkrUTBCMlZPNEQraTd0aWFad0JXR1dsTC9ERlF2UGNZVk02emVrQ2hJVjJjbG5KYWc2SlZZaEJ4WmZvbWFhUHR1bk1zckRaWjIybEhiMU9veFNIVlRhUTNweGdhS1JKUXRlck9DNGU5a3IrbzY5Q2tBWmE4SkFzRXRWUVNIN3JuenFMUkorb29OTjRzWlNuOVJPeEVTSHBpTzJWVEtMK2NVYnk4TnFFN0FwT2tPdHlxejVXMmMwanBvTGRlOTBWQzlmY3NXczBkbXovT2ViSU1rMXpUMmxyYlRhaU9tSzY4T2tiY21DSkJIQ3BvckhsN0x5cGJLZ09CSU5Va1Y5NFVNYm5sUEdENVFzeElvR2tBNVdFRlk0SDRiZ2NpaDFOd3F2cmRsZjBDdVNySzRTT0JhZ3N1UGhscXpEZ3lpc2Zodm1BOS9lak5ZN2cxbGlEYW9nY3ZNT0tST0RLVUp0cE9ZUHR0aXVzZjB3TGRIK2RCTHhZSkxzbGpUWmRjdmJTVGtVcTJNL2xLeTR2VnI4ckFMQ1dFWTJ0eDVTUnd0VkNpeEcwcFJTYzI5S0V0RlF0NmoxdktBWTIwQWF0M0w1RlprMW5sekhYNmFzT3dqRnl0WnkxNWhFQWpFVFBFYVpoSGNINU55YWw4QWlCZFBqODlTRWVCRWx3N28zTmJuZFFaRWhWdFJPOHVVeWV3cWtaK3lvUkFkVk1WYmdXM2NMM0JkdEdoQlpXS2xVem1Ud0ZLaDVtQWhZakZiZTRxVE1mNE1yNG5QalhBaGlOczNsQ1pCZU5ybnVocnkwdEV3OHJzOTZhTkY2Q2R1QlN2U1FzcDdYb2RQbU43Rko2RlVmdi9LdSt4dU1JWUJScVd1Z3BsRllhQmx2d29XaHBDZ2trWC9RWWxIbkxESDhpd0RIdFZxcEpSZzE4M0xxcWFhV00yeERCb05paWxFck5XcUVoNlBjQUR5REZrM1hjYzhZMU5YaFNXNGY4VHpyOUpmY0ZkRE1GcUNWOFgyT3V0TEpwMFlHbzV2d25ESlJ4Znp3dHQrT09SWXBaS28ydEc1OU9XTEtadzk1VkVHeHZhRU1uUm9pYlUrQU5MeityQ0RnNEMybjhOTHBHU2lYZm9GMHZ5aEU3RmRjbjVWQmorSEp3VjJZNTRQSjRiLzBVeUc2UldvaTdkR3FmU2FhQlBFbUR0a2RYcE5YZTV3UVhFdXV0NGRrSFh2cHI1bS9JK1FGU0tPaTRtS05oNkNGcG5TMWFMbEVteTh6dXpaUXVObk04aW9Fb0JWY3dPQnVONHZ0MU4yY0NYTmxCdUxKY29xTEVRZ0pDNEFLOHdPTTY4eWx2MWIzbllFMEp5UjB0RC9yMjNoVVpWSE0wTWdQSEo3N0hZRWpES1VLYTh4SFRiV05KUU9Xby9OeWg3QTE2WXhMQ1ZudVdKS2NDZ2ZjeTl3alpEbXlEWThDNjZYazQ0cW05QU1PWjQrQmViSVJDNjhKYytFa1hyN3V4YmRjczB0YmliVmlWODdTU3h6QnpwR1hRU1AxbXdUZWMrUkZCalMvZTkvcm5sSU5xelZTd0R4RVdDQWhWemcza2sxR0ZITkFiQXAxbXlsaGxvK1V2SlpDOWVHTVBnQmFaVXBDT1F6RFg1Vk5oK0NObnUzRTByTE9IOXZsYU1VZFZqTUdTREZvZ2tKZmZtcjIxZ1BFcHl2SGpVdVplWHZ1Skl5MXdmZmNLUGpBVFgvcDVNU3pWSFBHOWFXeERyY2x2YXZNc2UrSzllM0FhYTljc3FlcFYyRTJMUFIyU1JtcjN0aVJFQys5alliSnVqZm9wRlBzTTdaWkdxSmIvN3U3T1hJQ2NRYVRMc3pDTW82ejdFWHlxcDVnK2g1L1FuOG9BNXNtRVM0d1B3OFhMZS9VWitQeU1zSHAwL2FqaVRvZnpKejkrcWRDRENpci9MRnd2UEZlcWtnT1RqamN1OXo0bzZyV3QxN3I0OU5VNGRnM0owS1dvb0dvQzRQQjYrTVowaHJMOEphaDlTODJxZGxkMVZmMWVoSEpnYWNGT2xaZzN0M1hpSHZPcE5Sblk1dXhvQzU0UGt3SmlKdUR5SUpnSjRUallFSEZtaHZYYVNYL1puY25SVGNxMXFqZ0VJY3M4V1BrenE4allheUR3cHJCQjFaVlY5eVRrTTBZaDRFeUxRZ0tFOUFZY2pVSU5lYVhMcmVRdk9XZ0ZkNUJjWWI1dGRMTklJM2JHYnFKc1ExRTVQdU9kUG10N2plMnhmaW9aNDQ0bExramVsaGZrNnUrWFFXVXYvVUJLV0VJemhtY2l3TU43SkJDdkd2L2ozdnpqOS8xZUg1QlRSQjNib0N6OXgxZXdPTFV2RE52cmJUa0ZmK1IwMDJpeXRPRjJ4NnVCcy9IM1JzeVVhd29PMFJ2TjF3US9LVEJrVThaT3ZxL01qbEI2d1Z1RHErS3VnWlZDQkx5Lzh3RGtidXgxZHkrSUVUOVZaV1BmWlBiNThuVGNQOCtJOHA4MHhRWW53TWpEWit3SGRzREsraVdhUnhKd2VVL0p0NlRINmZtSGZ2OXNrKzZpbE5ONkVuY3hPeEFyeTU1bFlFK1lwRmpHblRxd1hvSCtYMk5uZzFlS2xOeDFtcjlIajd0bWZNcnJLMzE4SGQ3K0JPdFRENVZQbG5MRDRtNWw4QW1LNkYycHJuVUNVYmgzbG84MTAyVmdQN2VTcDlkNmYzdkhqakQvQWliaTlCVFlQWVcrMDlieVd1OVJBY3I2bk4wVzlRZkhpdk4vWmV1cUZ6ZXVuczR5ekVtQ2JZNHR4WDNWZTRQQVJibWtyMW10WEhpUXhURUxRdVB0ekk3SWl3enkyTVVRakI0S1FXODQrM3l4cDJ3Y0w0bEo0ZjRZYkFiWWpzcHJXTDlYWWpsZjgxOEFCYlh0dCtiUWlxU1dMZjNaM3RlSHZNZzN3YkZXbVRzRzZkUHExZ0p5Rlc1OVNOdjgvWk1pUmVaYW5JUWVGUys1MVUxekk4K0N4WE5uOGp1M1ZxRFJyY0dXN3g5NXM5K2FScElvWTBucTZmaXVnd2dwZEJ2aCt5cFZndWhYVGc5VEdNQTRVcWpCR0tFTFpMbXZYS0ZIWTZVUnhuWGduUWFycnhibTV5amtOMTh2R3lWRUxIdGpnMEVyV0ZmSndOVXFacXlxOXRIUHhKbWkwYlJEV2FMWElqUE1zU0hwbW1EUGRiY3VyTFhzNU1hV1VyVjhNdHdLWTZZb01jQnNaQTUzeFExb0cxSWU5TWx2Sm5RdS9aYjF3Rit0dWJOUDJ5Q2dhYUtHUGFoL0J3cGlEN1JOK3pHaVRZYk5UeFZTcnJCWXpubllTUEtvM3IvUkRrZzVIUkwxZUsrUzh3WmRGbzlHT1pNdTB0YnpSOHNiRTBQcVVvZFFKbi9wc0V4bnM5V29UTU5RaEpmNHMrc1k0UjNWUWUxa2ZHS2xlTXQwTU40aVFqcG9weVVoTUJzcEdUMlJFSm8zOVArRlltR0p5N21vWEZ1SjBYbllxcjZuT3pnVlE1ZURMZzY4QW5FVWFDa1o0Smh2YjdiZTB3L3N4b0VOYkVhZ1EzNGloeW82anQvcEdoTFAxNFJpdno0YXh5NDI1UjJwa09xcmlxMFZSSjgxSGtMWWN6c2dOR3VuUUZxVDVtaTdsTGdQRlQvNjZ4SHFhdDM4MG8rZUp3SnF4eDJMcWVVcmtUM05IYVIvL2Fhek9qVExpQUVTZjZuZ2J6Tm56UDJ4YjZWWVZaMjNjMXFzSC9FZ0c4TmNlYmJCWGFZR2ZrdFlQOXY3dDdlUkFIb0FBaFVrYTR6VVpEN2F6R3k4UWVYYUcrRXl6NUlFNC9XUnhXNko2Y3lDQmUyaUZWOCtzNllKcjRHL0R6RnJKT1V2WHNkVW4xUEpYU2dqQTJrNUN6N0twdXN5bHdvcDNVMnFLN0RTN3JNWEpjT3o5b2xjYXFLclh6ZHllS2NPeGJTSGVCbVN0a0c3ZnlmbWMyU1kwek05WS9xd3NoWkJtc2UxYjJJb21yWGhoaC9kdGhpTm9hNDdnc2QzOUxDWm10WUM1OG0yUVF0NG1TYkdCQnNXaDhJY09rS0ZVeWtqQXpJZlcxcnlvOStOMVZsbnN3V3V5S0ZsUXJoTWFrNnhCdWRaWnZVSTNiWFhJQWFXVXdxRkI0V2cwS3FVTmdkN2poc2ZyS3hqZ0lUV2dXbUNJdlZHWUh1WmNxTVNLNWd6ZXhDbFU4Yi9iTFlZVFV5TStQbEFmVlZESzl0bGZ4dnI3NHNBZUxjRmR6NERVa0hyaEJUazZ1Rm5hanFsblY0R1VUTVlZNWhHclVJVkEyZ0xRV0g5SlZBYzNBdjBFNUExZ2Z3ZmVtL0g0UEZnY1hucDRRRkorN1UrY2J6VXhGZDh6a3oyV3VxNVdUVS9hSEVXVXRPY2lIWTY3REZNYWZNdGk5aUR2MXFMSC9LSlREU0FVaGhDYkkzWndPQ0dESk45ZVlsMnB2NFJKV2FxNXpqQ0Q2aEJab0RZbnRrQUNkM3d3RlcvblYxa1MxR29oMjhZbzBSM0x3VlVGSjAxcDU3UnpBd2NIMlY2ZFdpVnBJWGh3WXRBd0dyMVdxcSt1SkVUdllUci9PNnZsbDNjZ3NTK3RtQTN6RFUraWk4T1NvWUp2Nkc2d0xiay9ZRDVic2FGSmxqcW5EM0V0MlozRkk0Tis5c3dsbWRkUkVEYThHWlJzNEczbDM0T3c3RVZlditnZGNuZjJITVlTYlJFUlM1R0tFYlJkQVZKcENrRnFick5nNEFZSkY0ZjVselhQcENIQ1VLOHFqS044ZGVFMUUrNE82RzdWVzJweGJrenpPVUlUUXlxeGN1ZDZNWjhld1ZtT1dwVHZ1MjU5VkRlaUZNd3hBNUJVaE5TczJkWHY5QUZyZUpMS29NV0tua3BVYjlncW9tVnlvQlBwczZUc3k3V0FFQlp2bzJ1Q1gzam1ZS0NhMk91NDg2cDNiNGovZStjdXlqRW9YRzkzelZ4R0w2QktydjQ4L3lva1RtS1J6VEhFZDdvbXVFMFRMTFVLMkRTTllaWCtwWkw3b1EzZG5iUnk2c0hPRVdZdHY3dHdmZXZ3VUNVS0xsUlMwY21XNElZMmFFMG0xdGR2azQzeE81cFVsSHRSdEZKNE9LUmI4dUVONnNsTURxTVZCK3pMUWpNU2FhbWlQazQrSG9WM05OUXNkYkEyZnhsL0VmRDUrYVBYTG9oQVdzNDhsek5hODhQbEM4aTF0UnA5TkVzQUE3YVgzei9LN0p6MTdIN2FwZ3cySU1oMXRyTVEvZW01aHBmS21WdEljVGYxUmhHeUJCS3ZLc3B4YjltQzJrbG1abmlFZ1lIR2JjYXJRSkVJWU9GdGQwZmtwUkx5YjlvNVptYXFSTWxrQ3hWaFRFa3l1a0w2cTliQytRRHd1RVQwQVBMQ2UxNlJjNGc0b0UyajF5RGwyOVFPUnlMZkdhKzJHZzNsUGVBMzF1Ykl4aDdKandua2d0cnp1L1UxbTIxNkdWcERWK0R1TFIyWWNHVk5yYkNiWjN5NE5yaldxUkg1M2FweGU2SExLRjY1MkI1R3NPOXQ0bW5FS3pFRDF6ZUp2Tmk4R25tRHZLK2tTK2hDaDU5S1lJV0x2aEdzTXg5bWJEanFjUG9WMzN6V2hGSzF1NUR3UzNhbU5oNnE3NDNQMkx0YWtkT3BiZnZ4a1hZdVpISm9LNFNodGo5cnNEcUxuV3dHTnA1N0dXQytIRFZoeXpCZVU4b2Zhd2JDS25DUnliRWZmWTA1T0tPdXRzOFNmdEgwWjJYeWI1VUNkL0hlNU1ZQ3lYWmJzL1poSmErZTJ3TCtGYkMwOHY5akdCeEl5NlNuTTd4YzN0YyswR1pRTFdDaGpzMW12NXgwdkpjUDkrMWhlZVhvOTZSNFp2U3NUNHFxZloycHhTb3gyeHZHbm9YZnhVOHAzL28rTzhzdlZiSjlsUFo1bGY5NytNbExpZEttQzhtNjBGdlh6VzcwK3ZkWFg5VmdZeUUyR0pxS0NOYzkrOG1EQ3J3bTJraHhWdjBPOUNuWVZHN0wvMDZScUtLdDREekhoWDhIUHJxNW11OHhUREt4OFhUT3VBRHZtQkxrb3JrWUdZbmlJZGRUS0lWT2xORzVQeHZuYTZqL0IzU05yc3dVQkpnVy9BcjJQN2FJQ01OblhRRWJYYnBpNmZ1cWtXdjc3NFFLekpSQlpEb3ZyalRwL2lyc2hCTXNpVVRmQ3YzRmtxa3BIM0NuMStyY01ENENFTkxvQkpIalE0OVpaS3V4U3h3Ry9BYjdmamFTdTkrVisrZEdYWVp0b0NoNCtRUTA3TW5tRWpZVEJnN2lVZjIzOVRZelhwK3pheldpd1RvQlFjTXhKL0QrYUg0RzVhZ0I4SjhDUkQzMmNDUTlKUHhxSTZwU1dqL1k2WW9XWTlqb2Q4REV3ZWwxbUIycUZyVXF3Qk5EWXZrQnJMdlBjRTNBZU1uemNzbEV1aFAzYkZUWmtwZmVFVzJoVHdKTTJxL0RTNDg4ZFVBKzFsNjdlRHhLMkNxWTBOZnU0cWRqNVB1eCtITGNZRGw0SzU4Tlh2dlZ1TmFDMGZRUjRRT3pqSitDbSt1UmZiMi84aEVMdDhqbXV2VitSa0M3aVp6dWdVc0VBTHZhTXZjNHQvRXZVbjZCYU5hUGxubldtRDBick5PcjY2ekNyTUlvZ0dPRXRud1M1cHFpUDZ4c1pKNGI1aWJDb3pybHRKL1VkQWJUcU1lRld5dWs4SkVqSERtVEo3VjJCUFB1ck4ySzltTkwwSVlibk5HQ3VWQVcvcnVyZjZZdzhSa3ZVUHBzYW1hNElobzB2bHRXeWNGU2pSMHMxS2E5UjN4RDMxWldhOWZtN2pVK1M4L3NuU1M3L1ZwUWNrK2RGV2t1RjlQR2xlL05VMnRzVTJXNXVBaGZJZldkeVdjZHI0S1JLT1hMK3VEa2RXVTAwV3RHMGg3eTFYWWpzbDkyMTZzWnBnU0xubGhmNmZMVklGVVRjek5ldmRxS1Fib3FqY3RxS2laNDhVYytvVDM1U1hYM2xYc0gvTXNxMVZhSkVlOTVwWDBJeHI4L0ZvQUF4cFdkV0dsUWlSTE93T2tmN3pOMlJZVW9pR004M3doSDdMck9jUEtYVkFEVUc5Z3V2ajE5ZW1ZTHRJK0h1SG9NYlV3VEc2SFo4b2NyQ1hOMHF4S3dWT3prZmpnWGdSZEhTQUhKV2pKQnA5RW54QjJObFNoZmVaVk9lVXRTdVEwSFAycm5aTStCRTFrM0FUcmVtbDRlODUzbGRkNG1BM3d1TTNER29WOVdocGlaTmtDMWhpa2g3R0JkQmQ3dWhSVXNoU3FPT0JmcHZqTllveVdCc0VtbHBSRnhzc1NZbTZhakMwdXJ0ZlU1Wmg3bU8yQnQ5R2xKVGg3SUJKNW5DRlJxYzdHTTFHMnhyMTJYaXZsbC9jRGdTNEFKRDMvK0RTUnlMSittY1E5QkcrNFNTMVJDenliS3NtK2N2Q2tCZENwK3FYTVE0ZVg5L2VtQldSTDMxL0ZwZXJaSzQvaDdic3l5bllxMEJHUnlIMWxsbktSc0lSa2szK1h4NkE5MkNHVUNET1psOGZaUTVSVDZLSjlOWGdsWmJoR3Y0UklrNjFqTkxkM0ZseEJnOHU1d0N5WjZPS3k0LzJNams2bDVFL3JhcFBsOGNiQjFkRGwxL2NHQ1ZRdXY1TVVOcllBMkpIbDBoSEVyekp1OEZLNFNab2pBMWtWVXZTK3JRaDhjWGo4bHdxSk9QY1c5SDJscms5OGhwTmJ1ZmEvUnE5VVhSOXlRS2k0UVp5QWEwWGQ3eUxjUVFEMWNBZ2JvTm5YbjNoNytrRmkvdituMzYrdnBIQUIrbVJRc2lJeS94cFBKMkpCR3RjWUxXNExGVXo1Z0pVdXR0akNDNlZBZE1MU3BWZFFLdDdYTFZYNWxnYmcvSWFIM0RlbDM0SmRvUk16akxxY3VvSGRUKzZEV3ZFamNhMVhjWWRicDJwdzdPMTlPNm9FaVdBRStvOTVjYVNDWG9ydm5SWHZDQmxibzBFenJhUTR2czNlOGhySGdOL0UweDExS1RFY3B1RDU1N3Q1QjNieHlma3Z5ZkJzekJ2dU5qenNsWldpUWVrTVRRVGY2T20yVnVMbW05TVJKWUV1bURsR1M2eXVjL29CNTZVbW55ZW92MGpFRXJvcDdnSXIrdW50VkE1Q2RCZzZmWjMyQXFWb2VNK2hObGtYV3p1aUZ3M0FzcjNFVXh3TVdQRjVQaDNnVGVwams5amJjdmhLNjl5eHVueWY1MU9rcnQ1OFR1dTBOL0pTODNJZDNBN3NvL3paUngwYW5pbzUwZmVSbzZ2aVdsamtmb3dmUERRSTVGSURIL3hWQ042QjRPUjlFY1VqellkaE1uVTk0aHgwME9ubXB2c2oxbUltdXJhdlFCQ2JpQTZCMEkvQ2lTbWtEa0NoRW8xam0xNEpJQTBxbzBwK1NOdzZROUtLRTZJTHMzRm1LZGZTeUpYeCtTand6aitwZFA3Wnd4alpCTFg4ZkpxSkJlU0VTTExGTTQ2Mkk0alh5Ykl2T205cGpaVkVmdVEzSm9VQ3RINnVnbFFMWmhVNERLU0gxSFNtY083US9VKzFKS0g4eERTeStaMW9EaVhyUnliNnVoNlQzOFNveThMckc3eDI2ZEFVTkkvRzVHKzdmYkNHTU5XdFZFU2tzOE41SlcrQlU4U01xdy9USkxNbXo3MjB2MHdZbVlySUpzMXJVeTlURm9namRoUlJIUmhHUWc2cE4zUnhaT0JWQUVrRG41ZzJCSjZWM1BSNWFMSTFrOVVSTElvbkhLR0RrSTZ3UEw4NFQ2OVBabE83ZWo2L1cvNEJ1WGhFcllGTjVXZktRTFAwZng5S0ZTRDZkNVJxWkFKR3VkQ0NSRmZnNy9kYWQyRjdBNFdBZ1QrOFg3TkVJa3lLRjVOWFBmZ3FHeWkwa21ENGJXQTZhdVNFU2M5STdWaEpCSTFmeWFEU0RZN29hNlR3Mkh4dW52U1pBdU5EeUlNZmkrOTAwMGFIWFQxUkhHQndZUEl1elM0OFNIWnVFbWFZc3lLZkpyMWE5TWpXZGRVUytlekFxVDZMZUdia05ibm9PMktvUXBTL1Jib2RpQ29NM3F6eTdDQWxvSUpqNEpZb0JLM01mbTlKRUsveFQ1azU1U3RiQWtyWEZmV0QzY09rWjN3UUZHelFwWHRQT0NtdjIxYWN4UzVMdGMydHZOZ1VwWUtiNmhOYzQ0S1NCWUtoNExxbWdsQm9YWDNBN3NuT0pzeHBlQlloZ3V1TnhxR2VoOUE3SytwWHVqOXRQdHgzVEE5RmgrZHpMeVMwbHQ5ZXVXbldYdGg4bWRVbWJ0VzdkK2FCV0ZUUTh0NjQ3NUpya2kwWkIzSlpWUFpuK1htcENoWkxQOWtHajVJRDk4aW9sK1h6aW81TGpRTUVjZGtLUXZFYWpidC9qK3JybXFycXYxdXdCc2FFTkJQOUlINnpyNjV1c2ZJc1MxbHdRTGVaaERtZWF4b0dRdmZWWVRIcU8yQnpoVjZRWVdDTUc5SlpTMWZmYzMwalFkMzR1YS9hazBLZVp4ZlFEN2hpZFNXWTRKWUdSdWZlY1FzNHdrYmNqZzhVWGZweHBEdnJZU1pTOFdOYlVFU2ZIejd4aDBNREhOemwvVVJMNHFYWXc4T1cxZWFGak5MRFhqcTI5UEh6OWg2SVc0bWU3eGs5Q0dVazROVGRHc0tJNWRVdnBKQ3JlZU1mSHF5Y2ZrVG9VNnBScUxTSTUzaDU0bFpIM1hLSHM1SmZqUi9nV2pDWEIvMGk2Nk1OY3RsUXpGS2pzZ1RtMVV4cTh2Mnl1eVhjcWFVZFBONGorL0FkY2x6c2c0d1dMS2pocXdvalhkY2psR05vbEl5elltbyt0bUJKdkFXZ3RZbzVucGk1ZTFuNDFham1LYlFNMk92RndvTTNaU0lJOXBmeXA0NGMya1JhL2s1dmI4Mmp0WmxvWWdrS0VTVjBoL2E0VnRUa1VrWC9uV3BxNWVyL2JHYWFKNWdtN1Bod1hobTBJUjNSOHJsUXpNSUhUSXVPVGJpdUdScmpOaG9lekJNc2RYZ3FsbzU2Y3FmQ0VmVldoMncySG5LdHU5aXhLcHRRYndmb0NrMVEvekpDV2p6WElLOFp6Q0U0TU1sNk1VUmJ4MkFhZTI3VVgrVXpuRTZSU0NtVjVKOTFJUG1VNUZ4WTBheU5ORXA5NlRuZkdoVjdUT3JUY0RGQmk5ZE0vVEVKNXhrb0NINUZIczVYNDZYVnRiMHNSNmpvUzRaZlJQMDc0dHYyNDhPL1VpOFBnOXhaY2xMb2xMbnJUWTBwVDVPYU1kMGhZcDFLYWFiNkp0MzQ1WjNEamNzZDRYTHJkQyszMDhPYko5Q05FZ2VqRHM2UUlrdzAremxMM21XaXlMazdyaThzM0pLcVBnMG5IYUdHZXgwNDhjQWpreUZnR2JHQndFakZYeldkTUdkSTFEalNpSnhtZ3ZOWXNURHhkUDg5WlM5Q1VzSzRJZ2hDZm1yVU1KQXVpT3lmYjg2aEp2U3IyN2FsM1FZeno0cVFQTCs4bWRHVVhRTGlmMXptbWRpUWtnNVB6M0doU0pEOEVGRmlSOGhueXlXbGVSQ05ZV08zS3VCZmdLekJxNm9oZUxtQkJ5RXlnNzUyVllPTTNyOUNHNElaeWVvVTRtb0FxWkxEWVZJbStoZ3N5bDlxVkRNWE96b0tlWG4ycXRTdmtYeGdkKzgxL2N5VGRBUTUrTmttWXlYV3ZJUk81WnBTVnIxbFRpU05RaVlOWFNqTitveWtGaE9ieFA4ZkI1QXlhcnF1aHZwWkttcmxvT1lJcFpxLzY3TldjYTg0aHQxOE5JNUtIZllkeWxGMlhvR0NhcFFLWWk5VERDQ1M3MUo1MFBLMzd2ZVlCNThZYnVHdVRRcXJua1FVWXYvOEFzMTR5QkZweit6V1pOYjdYV1l2UG1EcCtBQnRTN2pMcTdkaXFzSmVxdHlQdHY0Wi9DNW1lWjFBTDh2NjZaZkZPRXozRXdOaGZid21kSGR2RDlhRjdrY21ydGtuUllWSXhwV1ZDV0dTb0RKcVBFYmZoMzNVTmFzamwyV2hTQWR3Q0JrcGxBUDJVV25lVURSRDQ0MmowVmVIWE0rL1F2Qkc4K2c4OWxlMDkvdTRWRXZLWkRKSHFrQXJHRXJ3ckdqRkFLaXFpbExlU3NERGNHL1d4bFU1d0xSaHZTUXZLdmhBOGQxYm1nOU9iTnEwejJKVFhHdFlaZmlBOUwrRk1TTlY0d0dHc0pqUnVWbTNSM3BDeURYSTB0VFZZNytKbjVoSnYxakt5NWtOdElRU2hBK1RpMElreHBXNFRiV0tWVk5UNDY4eEJXZVhMekhSSW5DSTJPL1l4ODR3YkpTV1dXOFAwa0xYbVpSNlZNOVVLSkVpdUQ3R2taOWxwUFN2SWF6ZEFZalhWUWxtRUYvWjhrNVhWai9EdUpmbTVXZUdjVDc1S3F6clhQSXlvTEdzUjA5SGlqdmhtV3BteGRXN29yU1VYb1o5Y1lPM2pGeTM5YXcrTkp6Nm1NK3V6K0FGbmFNYUdEQ0tuV3RrUlNORFpXSFp2T214ZHBWWTM4ZWhNM0FBVGZaQkxiZThJNC9ReUtneG9KVi9JUzJQNWpkTkgzTTZGZkFLNDc2YWlDSFM5TTNBeHo3czFjS285bStXMTZRWkI3U0hYbTZVL012U3ZQeWptTFE1M0VaR0ExWUNsSEFLYlVTcTF4VDMyQytBUW1Zdk5qOFd2eU82MnRUbWhiMW5HbmxqZEN3QzR0Qy9GZ3A2SXRKZDh4bzBUVHZ5Ylg1ZTZXRXhNYmUrTlIwbHIxZGdMakRrODBISkV2SHRCMFVlTys4WTF1VEFlL09TVlBDU3Ryc203dWZ5MFU4NkRnYVJiNi9MQVRGeTVJdnNXUVFEdzA3ejJzY2Z3NjIvYjc3L0RYWmJQNzVjalBadEtNMEY2NkhHY2NJNThobUlaU0FTVDAxZ0xFQS8xTjNJUkhZRWk5RG83S1hUdXZRK0twenRydmVqMC9nVEJmV3ZDdHFQTkFDbWlMeFV0M3BKVVAxdjdBOVUwa3d4anhxRzJBa2UzUXVTeTNlS0FuNjdQZ09paE1ZMFRweFdEUVdEQWZ2UlpNZldhd1A5V0FrS2VLOEhuZStvZnVzOS9JcVduTHFxNTBiVCtnYmRyVnlZODVKREJYOVpqc1FkT05kWFg1M1p3NXpBK1pnS0VScjFwOEZUZy9Nd01OZmxWb2xucjZHMG94MFIvOGZ3WG9MdXp6a0owSExXNzRIWXRkdjF4NEIrdThUNHQ5S1VvRFFYTWkxcmpsdEkwSm1UbHM4U0JPY2E1KzNWSlBNYzhRdlhrZUR1ZU1qOWJKT3JVZVNrS1F0aXdHelRRMmpPUmFXTXBIaTRFTWJENVFKNUdKd252clpYY2lTOXhkRkQ4WFdZZlNSUk15U1VxT3VrMWZmdU1ta3RrSS85dFdrRDFtblVBY3Nud2dDc2RBL09IYm9VMDNCaVVTR1FjNE5COVdXMmFMTDJPdUxVWW1OS2hON2lNZ2ZCbUtVZ1crM0k3UlNCV3lTK0ZNQmk4bzhja3g0N2J6bVFjRXRlUGYvOUMrTzg1T2ZaM3RsYjZJcTBBaFhOV3Zlc3c0OGN2TUhUU0M2ZS9VaHowclIweTN4eXp3UXhzS3pGcCthS2RTMzJVcHd2aDFIaCtWUE5FdmtpT041a1BPQ0pkanhsUDlQTmtPRzJqMHBib2o3cDNremxQZzJBalB4bEtCalYyakhBU2lFcERKUGU2S0JyL01wUTRZZWFnbDB3RXMxcTN3Nlp2THpaUTk4YkFnTDU4Y2N3TDJ0N3NIYWpsWVZCVkRTa3JxWXBMWGRTZzJYZDVHWjduWHpjbDVkdllnTUIwWkFZV0p6M2cxK1pkcVIxa0lMcHB4a2YxKzgxWUt4NFpEVXBqMjZWOVl4OTNWK2Q1Z1Y1TFdLdnFjRXRtM1hGdzVTaXVMTVMrakxabmhzakZKV3pqVklySkZmUFpwVVo5OXhSQXVCOE8zQUh1Z3Y3UVM4OWx1U1JxWU1ScFdEdVJZT0NvVGJsd2tlZ1BTRlFxWjUxUHl0SjIxQmttb0pWdXIxQllEazErUDB2b201UmI3RzU5a3dpYmNJSHpXN0tpc0lTMkcvWWh4WjFETFlReFRUalZ2VExoRVJIWmY2V0Rla29nSUxmSzVmUWhvSzJ4YmI2Z1JEajZlTEF6MWMzTlBjUFR4bDhQVk1QekNVL3I3VUltaHNYdjFad2xhSGtiZ3MzRnpURlBGbyt1TlFOYXAwd1pOREtWWmlVSEVrQnI2RmpLMEhQMlM0Uk1ZUkZIL1JhWklMcGV6YTRpcnNTK1lDVkxZOEd6REdrbXR3cStIWUZYY1BsTDB3TGlsTlFzNlZmZm1KZVZtcHFMcm5SUUI4aFBqaGJBdklxL1JLcEpSTGJjdko5V2pJYkxySFF5azIzamJzb0FIR0ZmOG5SSHI1N21mUnNZdGVUSHRaU0JoV0pTbFYwdFdITksvWVpsME1uSUVmOXBBZVhMT1JUYnBjRXd4WllkMkR0K1BpSk9xUlJiNm1temJyVGxmUUNuRDl2eUNQTHZNRkdhVzdzVFJTblFPWFRacVA4TDBpWjJvWFQxQ1ZNTXZmVUdHWndnZHgrRnV3SERjUDcxUzlSdm1LN2pPSzFDeFFIT0kzaWFKQVdybEY3QnNGcE5QMkdBdnFaY0hpeHh3Y2xMU0tFeHVqa3FjQXF3UlBHcTlWWDl3Z1p1RkhGRzdQOUp4eU1mZ1BvWVhJMDIzWGkvTE9NdG9xaHhFQ0xHeXpsclhNQUltZHJYZjFCT3hGcUZ5STlqQWhxQ0FXWHAra00zMHVNbHhJQ0w3YmVkK2ROaHBjRWZ4YXJmVmcrQkZ3VXc5MkwxWkpDVWkyWnQveU5xN2pGYzBmRUhweDkzc3l6bjIzQlRndDJqcUEwa0kvRmUvTXJ4aEcrTUI3dGo1MjljUGx6MjUxQU1QanI5Smk0ekFXOWhVWkVXa3BDU040RUxadmVLdU9YL05jSWY2ZlJXaG44N2pPMmdvOWVLQmNYRG1Ca2taa2lwS2k3Q1ZsdWYwdGllZkgxbjhWNjBTeGFhUmZJdjllcElaenloNC9KODIvSzVFRXZ3azdiTFI2dndEYU40UWxqR0U3bFJvUXU0dzRpQUh4bVFYVUR6WU8rTlRVemtIT3BvOGxiSDFveG41RFZnVFJkaUdSRGhwWUdHY25CQUtYU25aZ0RzWDlXb0JSR2VHZlBRU0VaYmtCTzZqeWpFMU4wcDdJNTg3YkRlV2hSb0YvcnBIRDBLalBmK0cvQ0lIcmlCVFlnSU02dzZBMVJXTng4cER3VUVlbWtFcTd6OFFzT3QrOEppSVdlME5YdDRPaTMwaG52cHhZTENsNVpWclFSYkkySlQ5clNLeTVsRGNJajdpeUl2cEZBNHJ3OS9qZFd5VHNzUTJkRVdaLzEzMFlib1BwUWdJc1pYRWpBMXZIZ3FselpjYXNJZzhsMXRaSUZjNGVmMnBGRlVmOFVaY2tRMDFoMmQ1Q0QzZzJwUHpGSGprLzloU2JJSDJScmduYmdhdCtuQ2Nnd1RsRXdGck51MG40VkVkd3QzS1dla2FPcHRZL3VreU1kcEdSdUVHWVZ5RFBLaGFvTlh4a3A5Nzd3S3dnZGVUOFI2NXNZZG1YaEZDbkFzYlV3bDM2dDM2ak1YMWRZTVJPQU9XM2VFRUJnYjNEcE9Vendld3NaNDlIaWdVbGxka0Jya0ZoTUY5d3dXTzBHb3hveGhHc1lueDZmL05VSVpFa25ielo2UkVwLzFTQVVyOEEwN2ttT0tvdHlCZVllQXZLT2ljUU5tYitZOWJPZjFpb0ZTOTFjeGVuWXpsVGpWd1gxQURyZ2J2WnNZWVREVkY4MCtXU2JzZkd2RTdYZ3pSS0lUaUFzOFpoOE9WUnNtb0dQWHJTYmxka1lqSFhwN0RDWjd5UFl5NTFGaFowZjZpRk9ndyt6NytFYlhuYy9TQmx0TEo0NE5DUVlVT1pkeWxzODZUczZhWUNlTWNJZmZhcDNhenhoVnZMckl5YjgrTjdtb0lwU0dBZnovRjBybUowWFF6SlNhOFF5d1g4TFdqZnphMnBrei8yUVVNTFh2cVhLUStpa3Z4RHRCNEVzNGpWVjM0K2dmMys0N2tJemhYOHk2dGVhZUI1Nld6cERTVFAza2FBVEk5VDNmQlQ0ZXZHUzVOSnhaSVpBWmNRWjlaOWJLaTdOSmlqcHdYdE9ucXlCWEFCNzhpRTF4QWZOeHgvNnYzOWFCbU9aYVBKVDcxL3k4bUhjUmUybWhJcXV1alhNRlh4V1V6MDlXWk55a0V4WFlUeTdDd3RyRkw1K0tCN256MHRqeW5CQkJzbGtXZ1h4eGR6MXo3c3pQOGVGdWczaHZrWUNGV282RFArdmlYQlRDQTkzTEcyUjBHVHFRdll6S2FobE1FWDZlTFhJcERWR1FvMFlhdWZ1REkyalVld1pQN0tRdHVhNGlNbGpzYWxGZnhqYXpoNTVHM3BiK1hqa2JlWHdPZ1NWejVHWDNtbDdyd3puRWtsdXY4VlJHOVpzaDRWL0NZK25XZzRpZzY3YjA5cDRkMHFGTkpSYkptWmVuVXF6bnhYOUtMdkg0aW5ON2FzZS9Mem04TldQaWw5YUs5bDdLM1ZLVHVGQVpCcWsvWUFqL011NkEyZVdtM2I3MTU1QklNRW5iL1JUYzY3dGNQTUhKV3krWUIrc1VMMVdhUG1wdEIrRzJGTjYzVnNhOW9yOWp5ejZnVEpNZEtVNThUYXFjTEMvVWp4RjBUbEpQa3NENUl6Uy9lWXNHdWVYSnZtUFVwUGxVQWh2WXZvN2hFc0dVZm05ZnRFMDlGV2cvMk9Gblc3cFpDa08xdUVqNnh5c0xpblUzcCtjVTg0cmNjZHNrYmc4S2RLNFlYdkRBdk9YM01ZS3ZkZVRVeHlPY29KNW0wL3BrWGVwSjVPM2xqM3ZMYVRGRk5EVlltb1Jmc2tiZDgrVnVoVW5EVjZTNS9pZ3FjNzNrdUZEclpDYU8zdktTZFd2M2JTT1FydWZOOTNKY3pXYzNhTkEvS2JYTS8yRnJiUkVSYURKUnNRdTNRS242Z3NRa3JZeldCbC9SazVyUVpxSktIMmZzN0VDUEIraDhTMTRuYWQxRk1RWFNPU1djRnU0NWRNRUViY1pYTjBkU2xDZU5TWGhKcSszczJpMkMveVZlYkUxV1dIYlgzeVRmTzRVNnU0V0t3eiszUGZ0d1BNY0JTNzZXYXk0bkM1NGFySTdIMXhXbU5CTDB1cTJvYVVQOCs2TmIzWStKNEZLbFpUZG5HNlVnT0pua0RFZ0M3TkdmWFVUeGxNZHBVZzBvY29IL2JCYUFodHZ5NGtwNFRoK0JRZEJLT2Iwd0tPUFRBTCtoUWtNQlowUkZmRGtoVXQ5dzdEOFNQbDV0R015cDhpbTRzb0ZkODFvZTNhNW1TQmpIM1JUbUlNVUhWT2hzNjVTMHcrdFU2N1FSbGRxSTY5YXVCc0taa1NQdmlRWG8zdjh2emFDRzFSb2ZEdTBPMzdPMjA1N1gydnhqZm5YRWRFczJaYW43dDBWVDQ0NDhML0pWSi9tTzN0T3Q3MFhlOXVXa3Y5VVZSd0JOaXVBci9DNHExSjY0MFN6T2lObmJodFFjMTFhNlI3WHUwUWpQTzZTWVlvT0FNeExMbmMrcUtvZ25oWTN4cmhaZVVJSENuVS93bVhoSG5McmtwSlduSWEvcnBQQlNMQVE2ZEVuRDJhMlVUUk9taTYrOG5QUWxZd2dDQURXTllxbjMzN3VacDVzNVFmRm8xSnZwb0NxVEpVellsbGt2OFhJeUpXRm83c3J6ZjhFdmZYVWlQenh4bCtVVTJJNmVhZzUxQ1dIR01UVC9QWmlnK0RvQlF0bmVhZHFwRTNsVHpFK2ZsK1ZBNWtMYXFXWi9Sb25VUyt1eTlZdm1BMm8xS1o4dmZDLzloQXhyVjFhZ1JpeStWUzJ3bjhOMGh0aDNQUDE5VFZwcHdsbUd4SUhWWXU1SWJ3UkVyQlZPVGQ2QUhnT1R1YitCbzMwbktESGU1d21kc08wbmlpTGxkRGFnNy9iQXVJaTltZksxS21qbng0aEFTNjJyTjd0V2QrR2pmYURYVVY1V003RDZJSTIreDI5RHF3dHdPY1hLUDBKczdCTzUxdmlsbWxFSUl1VEJXbHhDblU1aElSejU2bFlFK0F6ek44Tmg1T0E2ZXRuS3psWmNTR0NHaUFnaDIxN0UyTCtHK2liOXZFVjlrbHVWZ3UxeDJqUkpoNlFrd2pOSFFwTDdzY1lSbnJ0V2FQc3BXUDQ1SUVOTTlqeTZuOHE5SkM0OWdyMXlkRjMrc3EwOHlkUURhRTdKV1ZiV1MxQUpkZ2JhRGYyUytYVDBLZ1djSjBkSkRrZGIxdk4xWXBJKzIzMEFRTHJDcEFtREsxQVJxeVVXMm9zZXdRMFpiaXlzbEZsQUR5dG5aS1FQRDNkeHFXYU9Ka0tFaFNyK0IvR1IwQXA2YWZPeS9qeE9GdmJoRy9ja2llTUVnQ3I4RW5teFB2cyt0QXFMRlhxZVBlS0NzaHkycFkrVTFYS0dYSHlLS3cwWXJJTHBNYnRXRkFnOFg2Q2JzcS9xNHlRaGlWNUNDVmdBU2NCWDVwTTFjUGdvWldNS3RhamNWRzhaT01LbTUyRDhsd013aFJ0d0NsQ1crMUFIOURQOVZvVlhndzlXaEdCb3FEdmtRQVo0cGFGUlhNbzNGd3ZnV0RScXIyVkc4SmNIN01GakRnS09oUXlSL2pVYmdrSDdJbGFLTDJGZ3Nxd1RCdVR2NFhFT0UvZXRJR0lyakYvOHR5bGprRDVpTXFJMURQWHA5WGtiM0w1SDRBQjEwSXhYSjNoY3RFWVFIMkVIMitlbm5uU00xUHo2LzN4NTJiNVZ5RFpIeFFQaktFYTlNY0ppNTJsVG5zdmQycnNBbnh4dCtrLzJscnZuRmFUZDI2RW1DTFFsQm1vNCtGQ3FtMGRHZkxTeFhxZHdESWZDcTBGUjF0YWNwVEI1a0ptK1FsUFBqMEQrMWkrTWc4ZWgyYURBU28wNDhLMG4zYXJMOHZWS3BSeTcvTnU4YXhXaE1PWnkyUVd2YWhtb2I1dG5YSWMzNSs2RlNUQlB6aUdXZS9Fd1huYnVxaXJXNk5RbWYvYitvZnBWRTZPa3pudm1LVXE2NW4wZzMrMGp1WXBIa2dyRWg0V1pUVDdFMEQzcWZQQjlla1hHQUJVRDh5Y09qTnNpYmgwZm1hOHBDYmhlU3Nuc2hkM3owYkZwR2JZdjc0MFhCdVV4eUx1Ylo0cUU1N1d4RGkvZ1cvVTJWUjRZclJRQTFWSFZEVWpKNEdoKzF5RGdSSFpiQ2FiZ3NhcVg5OHRqTUtaSDZJZjRDQlBkTzRZTnRNK2ExdzNQK0MxcjBYWEFvUFVEY3dwZHhCeG9JRXkrWTc5ZE1UMTc0NHBjK2hGQ0tCQ3J6anQ0U0JCb3pZNW41S0c2YXEzQzAwdzdjcmwvM3B4QlNnbWJuVmRxMXRhTGgwWHV5VW9kdU53T0lFWXpEeXBpN3FwZEY3US9CSHRiM0l6cWhUalEza3Z1SG00N2ZNUk9JSko3RW5WVGRHWW9QQWNvQnh1dlJVWFFvRmpsWHRwc0VMaWhYUEdhVTBwUi9UTWp2eFVsL1ZRcE9hbXN5WGZIdzJnQjI0b1pqc0pnZ0UvV1libUVEYjFZeGRPKzN1Vk5xdy96TlI1OVc5MVlua0pCWU5MYndFVTI0cTJlYUYxd2M1VjJQRGhFMk5od1dqM1d5ay9qMXM3YStxQ2U3TEhxNUZGSTBCS3JTdXFzUFdLbnMybE94VDFPcnNkS0ZENG5Va2ZGSUI1SlVqeFh3RkZNOER6UCtmS0h2a3VJMUpibzhpZTZET1N6UE1NQ3Y3Q3FqYlZadUNxV3FBMDJGc3VNRFVMOFdnaklnRWRLTENpME9FZXQ0TmpYb1UvK0c5U0MrNXNiYjZJMXF0L2lkSkhETTRtU0V3TE5KbXh2UHNPS2lFYXllT1J5Q0ZxcGFrcTVhcVQ5VXg0a0hvbWd3dlZZSXczODVGT2tubVI3ZFZmamdOV1F5dVQrVTF5eGpQeFdFUytFMXQ4NHhqanZiUklVKzlEdDdPMVllLzlXZFd5RnNnYit3U25xaUJWZkJ2SUhRb3NtNytFQ2gwQ0FhVXB4cEZMdHNKWVJtTzBRMU1oSmVSNUlkbWpXK0g4SllTQVMwYStPRG1aVW43S09vOFBIb09CRmhRS2NJMWMrV1k4dnV1eE9UL0JUeFFDQllycSs5cldGS3lsSDBjZjcrb0VvdW91Y0xEeEo2R2RmcGJPZnFRbWRxcjhlWG1SS0NtWFdmRGllOFRNK0dJa3c2NEVYVGxxdEVucjFGSDBYU2x0MjFDNHR3RGF6cDhBTkJrN084R1o5Z3N3STBRcmVLYWlwTDVnRzlGcEp3b3FqSE5DVHJ4Mm51L2JJVkgzTTRZZTAwVGdZRVFTbW4vbTd1bDRMWkZSOFBRS090TGMzZDJha0JpN3RrMkxPZTRBeTlVOHhVVG9PcFV5NDkwQUNyS05DSFQ4SDNSOEk2NnRJRHByNWtpelladCt2TllTRzdJWStTSDZEY0V5bXRuejBmWXJYTGNzdkE4WTNNK1RIMFdVTlViL2VIWERHaHpQZnhCM00ybi9LY0pLM3VUNjdERGpPNDl5TWJmUERPalFFVy84OTlqdEkyVE96K1ljWFdxemIyeTRtQWp1UEhFYnFxME9CTlRpMlJSelF0SzFnWm9oMUJ6Z3NqbWdXNEpEZGtvVTFnVW4yOU03VmVVLzNFQXBSUlFBYlBIcFFUYmRmQ2UwaWdNZnJKWHU1M3dTNDAxbVd0VitYUlFiYVVuS2ZzUEtycFo2cmZmcG15b0YyeURQaDY3eVhGYklrS3ZVUWlia0J1QnBhclRRZnZ4UFVtdnNLd3JPR0F1SFloU0RmM0pJOXFOWStDbHl1VmhWTHk2Q1BVSnlkUDhEOG5wdEU2b0psWUNTamlVWXlaVE9PMVN1SVc5R2hRMDFCSDRpN2pUaFhzWnd1VUY1YmQ2VmRrYkdEakcyTS9IYzVBTE5qeHdKVHc2YUlEdGthS3JRRTBJL2xvZUVWZ3FuRVZHSVYzMUlEK0tocDRxckkvZGlRa1lUWlJTWnltR0ErdmZSMGJwZU9BMDNJQmVYQlhORDl6U29oNkFISEc2c1VpK1NWR291WkZicDlrekJoa0M1MlNCVGpnVzRselNEeGV5NStkVkR0NWNIRUhhcGpEVFZIcWQ0aFZ0YjI2c0o3UngzK2U4MDU0Mzc4Y2hhNE9zVkdPZU5WZnlVU2JFSGJLbGhmTkgxcnEwM0JWOVYxc2p2UUVBOHR2SWQ5dm80Y1ppNUkvSmhtbld6ZWszWjVCc3VpL0ZLZDJRaTZYRWFjeU9SSHRvWHZqeklPbHc2ZTB0YVNlYzkrSG53TDRuU0F0SkF3TEN1MmQwczJMSEovMDNKS2VuckxCbzJsOEhaSW1Db05KYi9rYmM3THhpbkpLV0hWQThUNW8wNlIrQlhXMjQyQjlRU0Y0VnVvbkZUZnc4WjQvVmZEWnFocGpMcmtTdjRNbzNwRlpHQ3RMeWdRclJTaFVXeUw3M3h3ZWFnSFcyN3IySzE0dG85Y1gxSnh1elhJUXkwUG1DSWFST2ZxN1U3TmZZTzZTeEtHRndxcXBoVWl2QWV0VGVYR2ZlOXVFdzhnVlFVaWgvYk1MdVFJYVQ2SkFKdFdacGZtOTUvMk9wRFNGQkpXSzlFZG9sRytZSUxYSUxENGJURnlZRTRrMFQ5U3J1QXl6d0NwZ1FzK0ZWb1BWS2R4TjJ3SUcyVGZWUHBtQW40NFBIdENaSlQ2Q05VZHpwckc4akZOOEJWZFI3TzVGdENjYnIxMHZ0OTZtZkcwZWY5WHRRQ0c1Mks5MW1VQlFCQmJOaTZWT0xHQ1h1dnNUQVAxTm1pVW1zemJvNTJsU2R6U01KK2Y3YnpxR2tqSUtlaWp6Vm5Ed3QzYU1FSVJpUEpWdFBUSEhCRUtoWTRJa0VNUVcvZTV6SVRhRzJPVnBmZ1RNQk1kVEJmLzJRQUJBQm9BUUFBQlF3QkFBQThCQVVNQ0FBQUFBQUZsQWZoQUFBSUFDUUlCQVFvQ0FBTUFHVlJvYVhNZ2FYTWdiMllnUm1sdVoyVnlJQ2d4S1E9PTwvQkRCPgogICAgPC9CSVI-CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24-CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I-MTwvTWlub3I-CiAgICAgICAgPC9DQkVGRlZlcnNpb24-CiAgICAgICAgPEJJUkluZm8-CiAgICAgICAgICAgIDxJbnRlZ3JpdHk-ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8-CiAgICAgICAgPEJEQkluZm8-CiAgICAgICAgICAgIDxGb3JtYXQ-CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24-CiAgICAgICAgICAgICAgICA8VHlwZT45PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MVo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU-SXJpczwvVHlwZT4KICAgICAgICAgICAgPFN1YnR5cGU-UmlnaHQ8L1N1YnR5cGU-CiAgICAgICAgICAgIDxMZXZlbD5SYXc8L0xldmVsPgogICAgICAgICAgICA8UHVycG9zZT5FbnJvbGw8L1B1cnBvc2U-CiAgICAgICAgICAgIDxRdWFsaXR5PgogICAgICAgICAgICAgICAgPEFsZ29yaXRobT4KICAgICAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPkhNQUM8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5TSEEtMjU2PC9UeXBlPgogICAgICAgICAgICAgICAgPC9BbGdvcml0aG0-CiAgICAgICAgICAgICAgICA8U2NvcmU-MTAwPC9TY29yZT4KICAgICAgICAgICAgPC9RdWFsaXR5PgogICAgICAgIDwvQkRCSW5mbz4KCQk8QkRCPlNVbFNBREF5TUFBQUFNcnNBQUVBQVFBQXl0d0g1Z3dXRGlZWEFIMEJjMTh3QmdGaEFBQUFBQUFCQVFNS1FBR25BVDBJQUFELy8vLy9BQUFBQUFBQUFBQUFBQUFBQUFES293QUFBQXhxVUNBZ0RRcUhDZ0FBQUJSbWRIbHdhbkF5SUFBQUFBQnFjRElnQUFBQUxXcHdNbWdBQUFBV2FXaGtjZ0FBQVQwQUFBR25BQUVIQndBQUFBQUFEMk52YkhJQkFBQUFBQUFSQUFBQUFHcHdNbVAvVC85UkFDa0FBQUFBQWFjQUFBRTlBQUFBQUFBQUFBQUFBQUduQUFBQlBRQUFBQUFBQUFBQUFBRUhBUUgvWkFBakFBRkRjbVZoZEc5eU9pQktZWE5RWlhJZ1ZtVnljMmx2YmlBeExqa3dNQzR4LzFJQURBQUFBQUVBQlFRRUFBSC9YQUFUUUVCSVNGQklTRkJJU0ZCSVNGQklTRkQva0FBS0FBQUFBTW5YQUFIL2s5OTlIR0dBZWRISWFDdWZJMVdCMEFrdmZqZzVKaUJOY2FIdk4xb29PVHM5Qnh2NXZ0b01tbkNWRnVFdEtiRjhJNjlqeEs4RDFmTElLajZkSGlXb3pOUU1uK2RuMlpYZ2wvamF4SjBLRGdIdUJoRmg4Q3cyK0tCRzBnYkNxd3F5WUROREsyY08wRXVnNDZWWXZ3ak1qSythdElZV0R5ak5RWFlLYTMzQmxxUkM4NEg1a2ZBd1VYeVY5azNLdWJET0VsZkgyTnNmWTd3K3h1QTdPN0pFVWhvMzV2TmpKcm9rUzV6TTRHT2R4Yk1IanNXcVVrSWZKa3IzQmphRERTMGtmbWs2aVk5RjczUENKUkhBVkE2R0swUVR3M3ZlVStYandyL0ZkMXYraXVFMVdjcGVLVVlOZC9CUGd5ay9ScWlsNS9aQVRwQXBMbHVGWTZwNmNEV3hGZlQyaCtqbWhScy9KclBUTFoxa2trMTdEZXpwSUc1OVltdGY2aE4xU1VVV3V2cUdQWEVNUnFJQ3dWV3p2ZjVhR3RRM1o1b2hvZWxBV0w4cWIxWkhidUxIQXJIZ2xXcnFoV3BPbXZtWUYvSFJ1T2JuTEtramptVXlNVEZ5WFpZUitseHZhVXYzeTNvZHE3WThUTjZrcTBYVnIzU2JIb0lFSkFXWTlaSk9yRThyOTNwODNSUmsyZUFzbTlCeE1DMms1aWFkZTF3OGppaHZYTThjZ1hWM0RTNXE4cHE3Vm91dFlJTFlUeVY2bVBFMnlYaWhZYWUrTngzSmxmV1M3RUMyYXVNUnY5dThMd1lZWUM3QzJaaERsallMV3pMaXpjdjYrRTlMdUNLZnYvZkMwZ1F5YTErVEpJQU9XUHlIMzhmWnJMSDJhNFErelcrdGt5aGVkTVRKZkhic0VkZWlic0c5Y2RSTDZsaHlKcnY2MkpFa0dGMDFjL2Z6VWN3eEVzNFNFK1hKN09wNWdRelBYYXVQWnVoMUV1K24vT1lBMEZXMTY0T1JiSUVoNm5kY3Z3bXVBSy82czhKazBFUCtsdXNjMVBRQnpueUJwTWtLaFJhcDkzdXlCWm1VTjVXakZYK3F5SkJGelAzS2tWNC83dUhGdVR4Y2l5K29iS01MdGdtTzRSNXNyTHk4U0NVVlZ2Wmd6YkVnem5xOExSQjFVWXhYb0ppVUlQWmJoZExsMnlobHptQWE0eWlaUXQwVE5lajh3MjMrOTYya3JXOURtY3FLZnlRRnZsU0NxeUU1eFMwQnNpcy9ZNVkvZGF1NDIySzMvR3k1VVR1UHNlRExnOGFRNzloYlRXTmhJWHl4UHhtdlkyYUtjQ2NkSWNZQ2U0bWVBU3YzVnV5LzlHUE5acFlHcWlDQUJZUHl4Yk9UTFJnOEJtbmY5TmZyK1Z6aGJJbHp3ZXluZ3hHUHUzR091d1FOdVNWd2kybGRMM2lSKzE5NWNiSHV4OG9LRFpncVBpdGtlZ3hGL09YdmZsQStwRC9xUnBpNjN6QjBHaGlYVlFDZnkyZVQxNnhKOG90eUdxdUxtS0IzRksyeUJtdFJoc0wvZ0RDRmN0VlJYYlZVWEt4Um91SHpSK2Rjb3hWTCtRK21PTTAwRHBKYzloM3hyK2FEdkg3V0dxOC9GOWgvd0x4cFU5TDk3SzdnbW5RVUFOaFo2bjRUbm8xVkhwVTNOZUtiMGhWN3VXS3J1cFozRGVNa3E0cnh0OXNvN2RZdmEvZytBZ1hCdHpFMkdIZG94VW5VQWZwTXhoRjliR2dHQkJCM2IwVmhDU0U5eUJOM3NIdHhEU1dsdkV0dm03NWdHSjZ2VVUrb1lhNXFCTkYxd2loaEc4RnVVOERXeitqUm1oV2NtcWhGYU5pWFNCSmRGV2lYdFZnNGVRWHFHVi9zK3B6Misxcm1XMTVzMnM5Vk1yMzMxdUxSUlFRa0lUWXJvRzJyd3FMVkxVMzRwRklHV2JqQkh0TzhRVDV6WThabWZNakFRdUlyU3N6cGZsTzNqRjR0S3ZFT3g4b2ZpcE5EaDBkMCtsYzNPOGVGNFpubnZxR2JIMXJKK0dTYS9EZUpENVhYVTdTelpLZmJuc0JWZzY5RlpzYlRWZEhqckJONHJMRW5aS2JoMnoybW02OUZXWEpuWUVOY2lLQXJwakRNZTVuVWJOaklVSlF1QjJaY28xUXhSQXlBM1B5SGxHNmFqWGRVamV6blFLdGpDNTBoZkJnT3BEK3hYQkhnTnYzNUQzRThxSzFCcEpQdkVDTEtyQ1dMdkdJUkJ5VEkzYXF3d2hoVG5ZK3gzZ2owZGU5WkxGV0JFc1RaWHR3WmY2bHcyejNZaXluVHVKcXNaNlZjbjh6THZZWFBUT1o4dWRLajgyL3d1SEpubzg5cEhJenVvS1M0ZWFGcG1IYzFNN0ZFSnRXTlp1eXUzTG1rMk44L0wwNUFsT3VjTVhpNkgxcDdyaVNQR3NWN2VYaTRCMnZtRnBaRDZ5Zm9UTXdJNFR5Q1R1K1lHblRxOFRUOGNHU2liSk0vNVBUcnhQa0ZIS1Y1VTZldmlKYStTaVhCclRQdzNuSjJYUDVqRENERmdOSWI0eEdYU0pWZDdMYkIwcFhiSWRJeS8xTG44UXFDMi9LZE5wOENzSTJNRElBMExJdm5OZjFldjB5TTUvb0pPd0I3NFl5eFB0d0Z3eU54akYwbXpxYkxkZXJSUnRZTnd5Wnd6Nk94ZFBXTnFTOTlqWlBhN0tlWHVxTksrMmF2c1p6OStPTVJKZFQybDdNL254NWhCT013cnYwWnJqcXhQT2hGaUVjN2FzUDhrWktFSFJqWTgzUnBmR1hScjVmTklYL0gyK2xmSDJlbG5INGVtY0NGVE5xQm0yMktiSG9ZQWgzcEZOWVBRZkwvRVNiNVdqY1VEWmlGNWVIVlNOZnp2TEdQZzNIQ3JMWkxmOGVqRzI0ODhuUXJoakM1VklKTkxMR3ducndZQmtiM2RBaTBOOE1LV01MTXVRZVBrQTVCaFc1NFJXTGZPWlB4RlNLLzJaMlhTSG1odTBWTGc4RkpYRlZ0OXBuL01MZkk3aVRXTUdpaWN4c0RjdjhPMVRsalE1YUtuVTVpTVNNWVlwWVdoZnhxazA2VGhDWHVnMVE4WDhCTnBZeFdEUUUweUdqQkw1a2lYTUFINzBJeVpQWUloVlZ2MzhlYXBneXJpb013QXNxWG9mVzd0V2tyNFMvMGh6b2ptN0E3NmNIdzBLZGxPcENoL3pWOGxSZ1RpdEhlclVhdFVUVGlWMlVudnp5b2Q1MHVwbmI3R29uU0ZLOEFoKzFib2RoZ1hMSWdFLzBrd3pTaThkZFc3NXZZeUtiQ3p4TGVUU250OHB2UXFaeDRUZ2NvTm1TM05pRys2K2JmRkdMcnJDRTY1ZDhzV24ra1E4Wmp4RndjZktjN1BqeXBLNTBIM004YWV6ZjdYdVhzend0ZEFZNm5TQ1gzQkh5M0thME1VWHdUckh0cjlzTU5WOU9mTXhSVEU0WCtFWlRSTGhWbi93L1Qwc0t4aEE1RU91V0xxeE9manhMQnJTRlo5WmZENnZEVGEzT051Y3ByMTBGRnM2QXRPdW9SRWpPOHpFS1NjbWJCeE1IM213NXlGR2xhYmRBQStyaFF1RENYNmQ1d0p5dFozS1NrOEM4M21zZXJoL3hJU1FVMFdZRExWbC9jdXpXNTk2SE1QMUFSWHJSbWlNMlRhTGlmenh1anpRWFliNEVMeTF2THdaK3lzZ05oY1FRVjNzS0JtUGtjTXpwcDBEbGprNE9zemthVVV0Yk5vSzNlNFNNeW9iZ3BpaDlWdW5laGpLQldCWmNyVHVSdGRKbCtVT1ZkSHdma2J1a0xaLzRNMVViZWpUcjVReFIxTVRNaHlZZGdmT2xMZDJWL0FrOEhaK3o4YXZqNElFUWV1V1M4UkdmQkpjOFUwTFpETlBrSG5sc0dtNkJCY2k5eWNjejBacExHcCtiQm94eUdOMVB0OUdlUmYvWHk5a2VLQ0E5Vm5pcWFVK0xCZzJwMzlHSjdFSGpoVllENDdKMVJpU0hFblE2MXhvS0cwZlFQRzVrb3VVUllaZ1loZkxTdTV3czlPTUJEamFrL2ZPajZkUTBYdXR5WTRuQ2tXL3hYdFZjcnNSY20xenkyUFVSMUMxZVhJN1NnZ2tSQUZIV25SSVdPYjdxQ2dQbWpiZFBLc3QvWG5nTHcyc0RlK3ZzSVJjcGF0bGRlWGVFVGhwMmVocDRIODdIM1dDa1BoNGdZUnROWXM5N2lSWXBQMGtlaXF0dzVmOG1iS0M3V2x2SHJsaTlXZGlhaUNLRXA5RlJ5ajNCM0tzNmFSdzZLMUZIc3ZSVGx6ODIzN2F3YkhTSzc4cGFqY3FyUnY2dzN2ajdkamdLTkJ3aFNNb1pxcDBJL1BZdFNrQWhLVFFvS1g3SHVqK1hqWGh6TURUUjVNN3BMODNGYXRVbzQ0YW1vSC9qdGJaZlVCMWRlcDRMOFNZWGVuTUpEbit6L1hqQmhTTTd3MVI2czlIV2ppZzlhY2NaRVllUUZvMk41cVBadm9EcmdocTZjdWxra1ZjemRVdnZWdzZhWTU3WVpMRWlZcDNNaVdiWHNkUFFJaWFPQmYxTWcyaGQzOUpqcGt2VUsxRlVhSVkwUFZMaCtoVi9lYlBNa0hDYUVQUGkzcTN0ZURyYUczTldQaTJML0ZHbDZQOWpOek9oeU04SFg2MDEydGxkM0ZrakNYREVGNmllTFFnOXducDMybW9rVExVV1cwOGRuNXZuUGgyTDhvSExyclc1WVVDM1ZGZEdWWjFVODUxMG01cWRVK3ZYRUsvM25aZXhEd2c4b0VEL056Ny91Q2RHSUxqOHkrdjNXL3dBTWRNeVlEWU1OcklkZG8yR1dJK1Rpc010TDlqbHpTWGZQZkdOUi9YWURza1lHT284UjZJbmx1UE9kOWxrSnhPRFBzT2FkcDdDM1RnRnN0bDU3VCtYRGpvSm84eVdLQzBIUVByZG9PRm4wd1ZmY0czS05NK0g3UXlJWGw4WC9jMS82YndJVnRoZ3BpeXdTaWpLYVIyM1RVZSs1TEw1R21UWU5SVXBReWVkcCtrVmhGQkxNVUFxY0wzV1lTQ0dtYWVpOTl4cHlITWdhaGoydHR3dDdLTnA5OG5wL0ZQdUI5ZTBDaktRclNIdG9LNWxkV3ZnVUQyTEw0c0djQmNtQTVSUzJFcXpHUTc5L2RWL3UyOHZPM001L2M5Qk0wc1ExQ21tU1ZZamtpYmJiQUpoWUVNQnpzVlc4bTNnd0J3dnJwa3N1a3JPK09Vbzk4QUxDMXhwTWVJVllTTFphWDZWd01lV0o5ODJqNXhaV1ZiUS8xQVV1T2dRdkRVRWhJamZldllBRjBvZ2s2Q3FXTkx1V2Q5cGp4Ui94V25nQUcwaFFaSmpFVEJaNHBMV042RE1heTYvYlo3Y3YvcXlReU5CM1JSbkw5Q0hGY3BUd1F2ZmF0Ky9LaFRwanU2aFUvckM5M0RicjRGelBMQnZhVzVzQnZTMVduaGF5VVQ3VE9sSlhYektHZDZjdlhMWHRzSU9nTm9GRm92Y0V5TW0waDBwc1hiTGlzOFhObzdVRjJWeDZ0V25rY29aMVJacFk4YldwWVJHNnhDNWpndjhhdWVrSzBrWmRaWjEvMzROUGNvc1FSRkN5R1ZSakJkU3JScWZobFNqM05rYVJKYlVUTXRLTGpwS1BGMzRhaWtuN01VbVFHWFM3Q2JrNEZDcEliWVpyTmFKN3F1ZGdFTzY0SHA3S0RoMWNiS1czb2dUSmNWeUZTU2lnc2RvMVp0bGFBUWw4eUtHMVM4THJYaVI3aEZYbjBLSGdhYTN1UHZodGF1Y0ZEYU1Mc2xhTjNGcVNQb0JFSFcwQlB4WTh1dUcyQUw3VUVHbllMOXlqdG5TK0V5RC9jck40b3NSYnNJMkZWdXQ1bFFoN25WSEN6cHFyZmhON0UxMFJybWYrUkhDK216d1BlTWtOVUl3bjlSUThLRkxMTko2K3ZaNEtwSzlsdnQ5L01WNlVFZjk2SE9RRFBjNHI0eGpPVFVwRWtPWkRMSGhlUC85M25sZ2hmOFB3Ry9EUTBoWnBOZnJRaEhaUUZqYjVBNDdHZnVLVTlIOElqUndkRStwckRCMkc0b0FZZTRyL2NlU0NTamxGMHk2R0REVk04bjRJZWxSZENKRFNuK0IyNmxlRE13REVkSjVSMXM0UTJFcVdKaWV1VnpSODJTUUZObkhNMkUvTUtDSXNoL0VwNklZR3FMTm1STEJOOE1JRHpGYk9GTFZXMVZTbnV3TUZyTkZZaHRrdkZCdnQ5VzVjUmJqUHRmSTJjdXhLSnprbExwRnpwTFlITnZjSlA2WlpGMzgxb2lhYmxNOSttVjlzaXZiOWZXZDlmL3doMGVuTlI2Z015LzhiVkQrdHIzbDlPL0FXQmZDS0JDaHFLOGVoWnhzNG9LOFRPYVh6a1lHVTlNMGYzZW1zZUNSL09TZm11dHZsSU4rMkF2UGpNaFRncTdiSUU3THpMQTNMeGdkYVZVcEE2SVY0MkNQMUtlai9RMDJKRS85SnhKUkxodDRPaGJmU2lDaGk4bERSeFJrK1hCMENMeXpaclJzS0NNbnR6bG5Xa2FjOEt5cE51S2gyQUhTaUMvelRRWXV0UmdaUVN2VmpjcGp1OW9RNk5XTzBoUWIvVmZaZTRpd2NYUWRFbEJHSmtWTmNVK2tFWTJwejZrNE96Zm5jNy9UbDhHZHZZdEVJOXMvdk5XVXZ5UDlDem9rL3p3b1hvUDkrTWlScGNpS25HYUQxNFNKNlYzMCs0cy8wUEdRREw1Z0xUdHk5KzhRcnRuR0hjSGxzeU9FeVhndDJKVi90RDI3MnBXSVdPeEwyV2RFcWJVNzNpUTdnWG92VERHcTVRSklIT2Q0MmJKYVNrS05kUmZJV1NuYk5VZkYycDYvVmJUUEdENm9UNUhoa2ZHUTQ5bjJ4MmVwaVVqSmpPNENRZ0grdGtuQUQyK0o2WHRPSExtN0d2WTlqdGtQMmpPOUNYZGdNLzJYSC9mSWVMUzVwQTZiUlJpRXNWMWh1ak50WE0yTjFiZHVUaWpoNUpBVVdaZE5wMnZrcU41RVhLenE3VG5pM2MvWDZ1TWpqbXErVDJvdFNzQnR4Yk91Zkk5MDhwMEhzTXNDV1p2UVpxSnA4RnE1bHBRSDk2ZXdqbWZPbTFKaFBoeVU4VzIzNEQ4NElhZkxqNTFjRVZjOXc4MXl5QitDTUxvVHdBS1BGV3FHSWFKVkFVelpqSTh1UXRFOS9YQlZSK1cvYUVsc0xDV2w0VzRmTW9tdzdkZDFXVDJvWG1Ca1VsMkdkRk9vWXBNc280T3Q0VEhxcDBSS0VXR2RQSUFKaERad2tYUS82d3JDM1hPQUQwdjczeDN3YnZVSGxpM1J0L0Y2WFlNaG0wL0FSdkJmQkF6ekkzdnNLVVMxZmdRYi9OZENjblRrUi9tdEc4MDBYblpUSkl4eU1pTkVUU2lOQWJPMGxoaW4zVU5SZEdXMjFMVmRidWpPU01HL2E1OWFlQW1keExaV3BNRkJoM3h1a0l0Qnh6ckJzOWVnY0Rkblk4bzBvM05OVTBab0NMSStGci9PREZaT0FDb0QvZ2NPak91L1VPamZFaEhqeGdodnlwbnJOL2R2U2FnM0pBa1YvcGQ3ZHRYeWlUK0JjV3lvZC8xdk53SzQxbFF4aXlESWFLbVphYVR4WGdEUk85RTVUZjk2aEpZaG1zWi9WMjRVR0ltYldWMzd3WWhlM0t2UzVFRVpsT0xST3VmWmZGYzlXSVJ0WGNSdU5yOUNkMXpBeHlLRlRQK0VHSm8xdnlwV2RWL1FOcmc2S05QUFcweFEyWURRRnFqREFJY2VXcXE1cEM3STdEMC9mTitNVHE0cXN4WUduczNhWmI5NlR6WUUzL0FSM1hVaDhDNkdUbW0zSHY4cERKUXdRa1BUb3NSNTYrVzd5RmpDaDBOcVhudFl0NFk4QXhoMGFoRTZ3OUZhZ3J2NnVnT1lFQzBNa0U5aERwQ2VpMnBSaTM5MjZVOFFzSjVXR1FuT0V6NzVQOFlaamh4enVUbHAzcWNVcVRDNDJ1TGx6MTBZUEZJSHl5bys2RGhxUndReFMrZWptK1dST1JtN3dxWm1RWXZkZHY3a0xrVVVZYXZ4Rm5kNHk4Vm00ODRmZnZYRU4vZk0rMENtQmdhS2Y4VEhxVjNBUkQ5UUtkaVJHMG5GTzZiZVVNRXM3RFRpZndjZUJ3R1FCZXpuOCtRSHRhcWp2VU9qSXRndG0wTGRVbC80NndHSk1kUDNNL2FMbEhhd0Z2TGhxcDRoNkNibWZoMmRVUDRmTDFsbTdVSzFNaGY3aXJramtRblBXYW84R3l2WndNVGtZclRTTjBxcWxxR0VHMy92UGJEbHRCcXBlVTVZU2NTUzc1M2I3dnNON2svM2tBa3dlczBjS0NVS2NJZkFpYzFqZ0FaZm5OR01IVERjdmI0MGNseEc0eFEzL0phbkJ3MExHQmVDcFpFNTd1OCtadkQ0MGhhRFBBTU9PbFU1Z0pHb2xZUVVnRkJzM1R3ZGNFa2FXb29tRlZQa1hjYU9xUjAybm9OTk9yd2ZnUldRVk96alA1Tk5IclR4RVNzWnpQczZ2MXJNMjFUaCt0SFN3YlRpVUthWm5UaHdxOGhaaWZYUHFLMVlDUU5YMWk4RzJGKzFTVHkrU0o1cHJNbGJHYTZ0enN6U0J3Y1hJL3pKTEVLK2VTVStVbmp1bmtheFpHLzArY05TSWNJVWlXTlhCK2RmYUxPRC9oN242UjByYW4xWTlsRDFGc0labS95WXZqODhkR1RlR09HS1FVRFFuWC9ydWNVUWJuRzJIYmN5aGc0YzduQllSNFdIcUxDa0tWV25aZ3hmUGF2SGY4R1hISXlJaHRweHRDSURhWDNSbjZBbFN2NG1uSjdZL0NvUXFxVWVOMElveWJyQytVYm5jR1NHQm1iNFovYTM5ekJ1ZXAzUzV6amZNWWJaMGNEQ2VWek41QVd2OERZaU5XWXZ2dnpQSzdEVVR2VFJjWGVxVHZmRzh1SUNjUWYwZ0hzcEtER1VYOE5EekVuZElKWm1EYkhHRG82NWNqdlJwRWp4bTdBRnhjaFUzbWFJSGViNkhrVDNGSkMvU013a212TDJxbmhBSmsvelplbFBaTHNRYmZQQStDMDN4blQzWW1SUVFSalhzY2IrV2FzYnZqT0orZXR4UVF4TWFFdlhWQjk4NmRGU3AzTmkwc2x4RjBPUDIvUW0vdDlkQ1BrNkFUNTl5WS9iOUJuZlQ5WmVQazZIWDFYN2grMzZHVDl2cndSOG5RK2ZQdk1EMFRwRm9pdW13QXBVNzViMFpCb2ROenVITk1KNkhEWmt1YmpLd2htRWV0cGYvWGNzTm5adk00UENpaloxaTFOL0pnV3IzVmRuSVhNUk1CVVF5QVN1WGdyVHZINlZacWRMMzdyeUR0LzE3cXVFelY1Wlg4VFM2YzVSanl4cW90UWhLcm96dTVGbEN2QzZYZFhQV3VoR2dWRHlOVW5nMkNtb0tVM0FLN2lOWkhwaXVTaHdSQVRkMU1LQXFBV082TTloM0ppWFNNNXJ2b2tjbG03bmlwTE0wKytxdlVsa1VScGJYNEFnNUpQOU1tZUk2WWU3ak80MFdLaXorN0tDYS9MK2JjblhOMFZWd2hyMUZOL3hscFFiYmJWb3BEUDlvYTVaZmxTeVlnOWVheWZWRDVnQXlib0RLeGovTUVKTC9SaFZidWMwOFg3S0dsWUVod3ZadllhQlZ6T1VpQ3o4cndsQU56b0lGK1lpMG9YQ1RsSnlmNXpqV1BLZjd6ZEo4bm5aTjcxQU5DVEYxOVFyQ3FkdGI3RlFLMGNEaTRYZVozb1FKMU4rY3kzUHdGbllkNEFGRjFpb3lLd1l3MEk0SUZtYVJhQXQxeW1BNlFaemg3NTRjVUlQRnRDOFA2ZXhPa1pNUnowZjdMeVZYdW9OQmxrdHZlMUMwM29iQUl6R2VNM3FBMFZCS1ZMOGRoWjVmQjZNdEFGSDZPenUrK0J0WWFSSzdhQk8rNGdpTVJjVi81VXBURFZzeXFnSkZrdWNCYXZrUXF4QnBXRnR0VDFubytBQlI4NnVpVi9XMFk5R3J0NVVMbUFpMjJZU3VZNXo0bnNicUFZUVB2SElMV3lMeUY2RHkyZ0N5MXVMSENKaGlpSENjcC9WMTV1TjBpZXJ3eno3Z3hsQThOWlFkRnF3anVYdWo5cGlzdjlaalF0Zys3dHJZa3pVeWtkeCtkWHNydE9TWHF1RGNMN0VoMGVxa3ljRmNXT1YvU1FzcnFZZVN6SEY2bFEzMHFCMXZUbUc1Wmw1M0NVVkVUc2l6d2NYSGxoOW8rZUlzMFRJQWhsbzcvaC9TZCs1NHF5d2ZpZnlkSU1SdjB5Y09VSlFLeWJqMGc1WURRb3Z3a0FRRFdBeG9nSk5uTW5BZ2ZzT051THA3cVR4TTNMc0diT205RWhuRnh3WmVpWnBHaWdJbHFOUkxNNHRtQXdFaEp5V3RFaWhMNEFyWEFFOXBWTms1VmhkdUljZExLbktGOXFYdnRML1pibk9mbVJ6dGNFM0I2WlB4bWV4dVNZdmtMS0pmU3BJTzJKaUY0ayt2UWxFV2hsRzZ3dHJTbWZwNEhsR1lveXdWV01oakpLb2p4R3N4c2pObmo2WGpUWDVkY0g5SE9LTTdReDdxMkJ3amVFakU2QXlBYWUwSzRSQUdkZll4cC9JbVMycVA1YUZsbTFvZE9LSHRoU2ZtU1Jqb3dmOC8zY21KRlpZSDMvTVBRTE1ybk9obGJVOTNRaHJ6ekRYNmRkcWxSbWZJNlpQdE9RSkQyR0llM3hPNFhjcDJ3ZmdDNDh0emZrNmg1YkNtUk01c0FTREZ1UVNiSHBmVXNGV1VwY2NRUWVDYi9OWDB6T1h1ZURIZjRaVUFUS0IweWxEcXg4aURMOHJZNCtnWUk3M2VrTnlRUHJnRHBVNEZLYmpMM1o0WVQyV1dHclltbC9SN3BCTEZqcytWNU4vdG9ENk5JclZnMVpzcDNJdm00dklaRzZYOWtwNUc5SWI1d2daclJRbVZRTDcvYlV5WFFCVWNkMmhNU2ZZcXRGY2xtTzcwZmY4SWx4bGw4a3R6c1NEcTR5R0g0ZXZJdjQ3L0pBb0hpWlI1VU9nMjlxK1NzcjdGdkFZMU9ockxnSkc5VzhrRWFRekVheEtWdnNHaXd5TFpzLzhNU2JvUkxTQWNSa28rTVgxTXptamE5ZnowSU5icnRpVHo4RTh0aVRFK0VSa3R0dlRDYk9scjl4Wkw1MHRoYllrOGhza05Md05Majk4VEFMUElSRmQ1WFRmanViZDNvL2xoOHpxSlVGeEVHVzdsTVZwdHEySFFxcGorcGhLOENMSmk2bERmZVpPNmdiRXJmdXRsNW5nWURGZ0E1eTk0TFFoZ2hQVmFTVXpscVdHenFneVFQcVYyakc0bGlFNy9SZWx1R0FON0dUOWxsNXlzd1RDVDBkNzN4NDVId3JWbDRwQUhLb25hazZjNDZ2Qkd4WlppaW5wcndaYm53bStSeXl5TDJSZmhUN2VOR3FrYk03OGRvSDBSMzg4dVVEeUluRTZ6TkluWlUvZGNENTI5RTdxREEzRzhwcEJtek5MSGFhajdlVFRVeTFtdmlhYWxSSFpYbjcwdmFVcDhWU1lmZXQ0UitHR3JaSUNtaTVZYTlHbmkyajFjYkN2cGxzT3hlZDdoRTFZM2l2YWl0ZlZFcm4xL1o1a2VGUytEYTk4VkRPNzdsR2ZQZWhpWWZhemlsb2lDNmlNdmMvQ2VkTUszS04wYklUalBqdmlIUitqSnYxL1ZvNU1iVUhPM1JIZmRnWXhvUUpQMjdQZitQdGYwZDhlVldYdHhYbmY3N01Ubmw3Nm93cnUxOEFPYitaQWN2eGZ6NWFCQWQ0VHhqMjVoVVgxbFFXT2g4cklSdlRCaXpPeTFDVU1mUkk0eExpeG5NL2VQZUpPRUlVQUFyZ3ZmbnlSaFA1a2NNMWJ6NU5aZnkrdzdTRDZVV21LcG9xZ1dBUWdvV3pSZzF1VGlOWWRaeUVhdFhQZTBORTQ4c2xweDJLZW9iSGZmakNKOTBuTWZ1NVliVkZic3BVemlsY2RhNlZZcE5QQTJYcC9IL0t2SUQ2UkplaVNEQi9iU05xT0dVeWZvWDFHVU9DNnFWMTNya3JmSWx2RUIyTzJwbDczbW9vSkZHYjRjbnN2ckRwZ0xNMzJKYlNsSkxVQlFWa2dhbURDdXZneGgrZFFSM080d0c3MkdiWUxlM2VKWS8xSzlUWGU0L05UM2h1Q1ZhUG1ZOVJhV213NzZpUFhRbkJEOHlXSDhLSTh1SzMwd2Nxa2tEaVhaQnZZYzJIZWtHSEFaSUxQbWZ2eml1UjVjZzZWNmw0ZGl5MkJBMXZVdFp5R1B5eTB6QWVqMjdoWFVNeG5jS3hRYXZyK0ZBSVVzSDNOalY1WUZGc3BZTFhXSDdhL2YxclhyYkEvRWUyc3dnVnBsaGFkeVFoQ09PMEJKN3E4T0hoc01NWXJhVjNpRFdmNWthSWZteFZ3UUpQOXVCKzJFQXg2TUlEbFZUdGhiZk5KRlJBWmgwVVdwOUk1M0U2Q3dwcXoyay8zK2tHUHh5YVhKV2hjbU5IamNMU2t2SVFGbmlhVkUvWlZOcFdGS1JBSXQrZlBGMWU3YVJyQzdlaGUwT2lkQ2ZjWEt3U3NPTGhsOUl1VnNTQlBJVFRQQzdkZDNIaFpLai95ZEhmby9USjJoSlp4VGt2blJSMTJEbmtVUURMRE94ZUtsajVNMVVWQWpPbGF3SUVqMGRmUlhEZXR1dlBvSlVBY0JCRXhPMTh3VUdJaUg2Y091V1FCZDVNSkFDbzN3cG9qZzdsL0JrTGNWUGtJVGoyZjJHZU05c1I5QkdtQUI4SnJIT0xIVXRRZkVmRnBHaVNkQ3VKb0lETTVlSE94cFhVYUI3MFF6bDU3VHJab2JYTnZ1OGsrOEdXOFE0U1hTNklGa0t4UnpSZkZzS05mbUdWZVRYSWdEZ25DL1lSYVNIQW5wZ0hURWdjb3MxL1Jxck5BUG4veXhDYU9mOXFYakluOGNlZHU0Umd5Tmx1Nkd2enNoMllaZUkwWmk2bDZIVXNJN0JwYW4yZ0t2SmFNYnRIS0pwamtzYk0za2xyUzJ2ZHFhdUgvaHB6dGhQTnFpaU91SXdmUUVqTDZheW5EMDRLOWdDWnlqK2RrMk4wN3FOVGFneml1UkhkWHVFS3dyOHRoRUhOUlNmTTZZM2Y4R09PeXNoMzZhUjQvdVdoTzFSTUt4RCtKcDVIdFREVnZzRHNDZGRCSlZZWE5RekpGVGVzdG80S0xQRGRQUVRZUW1UaFcrN3Z6b29UNStPWlJVRmhtM2U1TjJRN01taHh4WUkzNTdiUUFmRzErUFFhbGVXbitSbmE5MUxSWEkrMExiRlUxTzEwODRhdEJJS0t5STZja0ZUVlRLZisvVGx5TXhxL290ZVMrZGtGVHkvMGhHZVJHc0xYYUpSTGpNb29XOC80MXZmT0xFQ1ErUGNhenlpWnhWTzRFQVprUklaUUthU2syUnJLaG5NS0ZNK1UySks4R0tOWVhtczVidVFidmdCbnRTcytYZlhNMWZMeENhVG5YQnYyYVBvaTlwQ21KTGswZzlDUE9YQ3JmYXB3NFQxUEtzZTZBelZrSXI0aEI5THdkU1pWbFdMdEQ4ZHJuM1ZsSHNJeTB3dk9WOHhVamZrOTlxK1JqVWtNa1RiaVZTNVRuVTZNVlhPUEVCeVZCM29WbW9GdHBUMDJWbVdOQlNGbit3aGxnMHFkSnU5QTF3cWZ3VHovRG5acmZEN0xNdEo0M0RzQlJHOXppN0ZoTVJtVjNJdEluSm9NYzcxc1c1ZGx3S3BTZlJ0VlBhWThsdjJPV0xNdS9yTmVGN3lybVM4KzZZZnUvWXZjcHplVUJnb2xaL0hSTi9UdnVXdWJuQys4cGdITEpiR0pBcURwOHVWOWNlMXVwRHR4UVVoUmdCRW4vcmMvNXI1ZEZEaUdBMzdwSEd2T0ZXbk9NazRPMG4yaXlIVnZGRTBjdzJGQXdZUEpGQ2ZnQXRzb1hpdUcyZ3lkNDcxRS84YWVMazJlN1NxcVVRNGc0ZUxHQ2ZmN285RWRwWk52cUJrQmV6N2R0bWo4aC9MNzYvdS9ZQktYNUhaZ05GOWM1cGxYNUJBUkhSUk9GVTQwaTA5RXZpMVhUaXNsWEpwb1h1TnNpK0pxWWVFZTZhNjUxNFNxZFBoTjRFQ0tLY21yRTl0UytTVnlFampNYTVWbmRPYWp2d0o2RSt1b0FqZ2FCejVocWFHbFJ2SnlsODhWMjhIdy9lYVJPWk1GejB3UWt0RFZra2NZdXd6cHpWdDlESGZVeDZmZXBzUkJvNTYrajhET3g1a1lrbHhvY05hWFlSRjVucUVpcUMwYXA5U0RKSXdlNElneWo3TGJFandhMy9lQldZSDNVN1VkcXFMMnM5dFN3eFRoSXVJTzhjTElQZEFuM3BBNEt6TFdDZTcxbEhDVjRGSXVFR2I3aExXcmpQWGdONCtKRmJ2Rk1wUTFmc2ZuWlVnYjcxSEhnaVVvUW8yOXR5WTcxeFFsZ1Brc2dNeFZsV1RjbjREUzZOQVQzK3RlV2laVEVZRllIU1l1em1lVFZLaHBSbFJnUUpKS3NyaGhlSEZUTXRaemZCbVE0dVNYVmhMbG5VUlJWSW1XeHdzWVlpZW1YSE1DbkV5UE8xcEtCbmRZV2c1UU9qMjBuc1o4SHRuVEx4Y1N0SkZPQnM4M0prb2dmUm13SWlZZElmTkFQNWp3RVZ1ZUorVkpiaTlXam1CQWgrLzJNNkZNT0J5aW83N2VYTFdzNFZReWRjZXYyR1dYWlduWVJsWEhLaHZlMjM0QlJDQ1JZL0MzYmdWWFNiL2VaSUxiQk1NTTFBeHduQjl4bzYxZERjRExNRCs4NnZrbXI0T1pnVXIvOThlQUFOdkU3Vy9oTHBrblRoSWprRDNDb3BVdWV6V0tHcWduaXpSQ21SbEZsZXE5NTlza0ROWG04Y2t0Sk1DTlBtemJCWGczVUplNm11QXFHRTZjWXpjWFREVlYydnAxRzZsQ0lnK012WllrdmFlR0pIV3RYWFI3V2dFMUFzbWZFRCtNUXJTQzZzZTVPc2hGRmlBU0l3cXhGdE43VHNkSmFWU2ptcXZXUUdSSWZjd1A1cFJqQnhBSWZ4aGZTbnorSGdhbWF1WDVrM3VrSHZSdTVORU5Fcjh0czVWSjhuRElCTWFxdDBlWXFMemU5MThOZkc2SkYyZzRDZzdNZnhleDdSL2h1bEEwWjN0V1UrbUM1ZzZNMzdsWEhxTmNKVys2TzloalBLck1FTU1NeWRyM1I0RnZueGNGUlJyNXpGZmNrK2hKaFY1SXVScFJOVEdORHMrL0FmK2REaXBVR25aejY0MGZmQ2xGYVBwZVFaMmh1UmJoRDMxZTJhQkZ1NDRBRzYwZnAwMXV2Wk5FakhtZHg5dmViWjhBb040ZDdVKzVGQzVVWDhXWm9zVmo1b3ZuaythcUpmei9RTjFoc2NVUjFuLzJHOHhZa0VaeUN0dnBIbkFlb3NYVmhDUXUyWFpHVDBKa2Z5Q0pyMXh5OCtVTGFVRVRCQVFIU0M2d21QRHEyV1RLaHhrYUVCUEdxWTN0WEI2cFVtWlI4RkFOSy9RYnNsSG5vTjFjM1NCSXI4aTZyVm83dldxZUZRNzM3NjQ4WkpadTNOSndORWFoSTdtRjBJL0JBcFBranh2czFMQ2NFd3RkWEFFbjdjdk54bExROW5rS3lpRjE1WU1vbDVCbTg3eFJaY2ZlaSsydGJrVEtJZ2xNdUlMb0RwUVpxNWVqekFBd0ttQXhSV0dsSG83WWhwT3FORDBHOFR5OEVqczRkTEdscmxBUUQ0NWZjUnJoUWs5N0ZqU2tHQ0dqVy9yZnpJWTd0QURnNjRXSlBzSm9GRFQvSVc3eUlHTzN5Y1VNSzVTL3hoa0pJbk9UYXQxUnM5NVVCaHRxQU1rdlV5S3Z0RE9oUmY4NUI3TkJla3lYN2lEWDFMdk9KV0xiSGtlcXFvNG5zQ0M2WjhITE9TdUppOHpCaXVwTXZLWkMwZWpXeEwvV2kzeUplQkMyVFZkMmRJQTlUOW90Z2d3TWNVNjROTHJxUnp1WFRGdXR3UlB3azhmM0xJUmo2T3I1djYralgzTlRhSC9mckxGU0NIUGlBMGhFc3g4dGYxNTJYejFwUW5ER1hWUnRvZ3dER09aYy8waUEzOWJBNnA4aXFNeEloaTcwaUhuTG5zdURPMStETno4WC9pb3ZxRTc2c2xQMS9VWHd4My9rVDlOOWtibEhhcm5QcmhJazZSbEdtdTYxd01kSlNBenQ3WWRGaDU4YkZZZkg4eGF5V0xZUlFpQk5SUFlJMFQyOEUrN3dlLzZPR28xRExhQ2J4cHRWNlhIcWJaK3ZmaDRxL0hES1FLa2t0U3B1bGxrbmdDclpJWkg3akFnOENUUUpYMGtIanhXR0RnRDRCM1lrZjhxWGREbWdaWmYvUldhUS9INDlFcEk1OURxMkJyZ01lUjdpSDNKdExVb1FGRmdldnhDRkgxeUcwTCs0SWVPRENpUk1GamhlQnZtZHZwSXNZNnZ5ZWdUWVhNVEpxTWU0QWIxNEcvYTAzQUIvTUlJWWl0UWM5ajVWTGxLUlc0SkMxWWpQc29idVNqVUQ2ZVBZY3NVK2pZZXdkQTVkZmxjd2VpdmtHOFUyM2hhN1paaGNOSmE3K2dHODFSTjRYeDNlQ3NQcmpHdEJXOHMwNWZSSStYbFplWVREellGUXJkT1cwd1hISzNTNXpQTjRjVUhjZmx2N0h5ZGlaTW8rTTlUK05IMC9ZVHJQUUhiRVV4cFBlM2JQU2h1TGZGMWdURlMwcGk0QXg0QThHWVFFeDRiSUdkTzNCcDBFWmRYNFpUajVxOGx5YUk4eXo5NWsrbW55LzhNYUlpV29PbFdiRHBMT3lmZEhnTG9HUWI1dTFmS1VZME5CNC9YK2N5TnNBeTY5OENiMjJDL0ZvYUZyOTg4bll3b2xTcXkvT3VHSzZrcThnbnVRWEZ2RDBSRWZYWWZSQ0QrN1N0UTJDR1QxQzBHdjFMVml4eUd1aElKZmNvTTNKNUM4SVkyL1ZkNGRJMGtqTlgxS25Lbi9BR0liVVlPTHVlak95TzdkanhWU0YwRTdKQjkzVURXSXdrTUZ6amM5N0JteUpwczlaRmJ6MmFROC9oMG8wYUJ2NTF6TEh1WmVCZUdYQXdIcEh6OW9reDNXRm1VN1JoelJadVNJUWxYR1hjajVJcER2MVRDazluc29USkl6QnlSNnhidXJURW9DZEpudG1idkEzL1FxVGhicWhaL3hXL3JZNnhFWkNFNnZRL0pGeVN3SmlFZUU0VTdyUFFrNFo4U2ZtdzdGOE5mL2c2SlZ2WlRmTW4vY21SZTBwNnRVL3c0Mk5ZMURhaDdjN2RWQTZpSHRkWk9BbXF4T2tBYUJabVNSVi91bU5HTVlld3V0NXBta212QkNzMjhHRzMrL2FwQ3NUaDVXUVdOelozUzM4SG05bnhFd0M2anFKUkVsUy8vQTNEUHF1enhHSmRMcmFidHF2b1F2cFJYMlIwNlZKSHplMlZSVzJnNzJhRDYwcU9GcXVTZ1F1cG1sL3FiUU1kSkUvSEx3RXlpZjlZSHpYako4c0grT3VkeDFYajlsMGNLV2ZFNE43SFlPSFQ5V0dXbHI1aEp0alVXUHN4L3dRcnFyc2w3LzRKQUpMaWdsb3llUFhleUlXTVNCUnZGVkpnU0NnOHNZd2krbzNoR0hZTFpKMDZ5OXJkRFB2MVNjYWZhVHlQUGFnTnJybmJ4aURSazR2TjlTRmorNjNBMkx1TmJ2R1VyTUNRQk40QzVUSGlLTGVYaDNhUzhhbHFTTlFKRzJQSTB2U25FcDIvcEFvTU1CVkpaRTRBYldpZ3BjcnpQVEpUVHhpREVlTGE3QVozWXQydEI4aHMvMlAyTDJDZkdEaWJKUnV6WEZUbFpEUmxQT3FqTTB6OWtXeWZxT1VTeFhlYUNZUW9zMlV0TEFTc05hWDRKMW1hcFBKR1RlNlZzcFRBbVVpTytOTFRBcTdzWmJmYjNMWTZBZGtkek55UWo2QzdKR0JXV1k0TmhyOXJTVFlHZURkWU1vQWpqQVdmVXM2Z0ZmTHVnUnJtYnhua2RESVM4V0svSzZWandWVGZjaERpdHRLdlBkdXVWN2VUZS9JZllORlYwQXV5NW5vSytjeFQyV2VRaEpVV0ZOWS9mUXZyZjluUWRSQjVuZUsvb3ZNbTR4TmI5cXNpN3FvMDN0a0J3cmQ5WGN3VkZmYmo1S08rUC8xU29vL3JwdjdLYkJLcTFOZmQ4aHNqYkZrY1hPZ3FRTkwvSElFdno5NzNQWTZZaGxHd1hoa3M4TWdNRXZNWGpySWVxN1FYaFkrbXlGNTE5K0dZVlpTZVUxL09yckpYaXdlbnRnenVKcEF3Y04zQnZPbGl4TUxObEJaNEYwUmU0OWt1SGUwSmFEVVFpdm9KWEJXVTc2RHVmNU9nREZDakNwdTd2dm9XdHZ6YUpORWhyckcrajFGYnRKSlJ0WGJnOVNEbHVadXNEM3pPWFNEU3J3MnEzdTNMc3JCRGwrSkdSb0RzU05oZEFmeVpuZXZYYTFuYzg4SVNMeHRGOE54SzVyT1gwTnJGTnNHVVBVVldodzNQQjRmdk5hN0x4OHh1eWVuVCtFbGFyMEZ3VFJaNEJHc1M2NFV5SzZ3aE9rTTdja2lxS3o1eG9VNUMvdjkwZzdnRWIvbkhrVEdWU2JZSjNMYjVWdUY5cklGY21NRHN0dVF5TGh0TFNaaGxIY3NlUTZlaENpM3pXMHIwVjUvMnZkVG81NHBDMmNDYVVINk5GZUFWc0dTZW52RkxaOE5TemRUdkE2TTNwalVWTWU4dlVVbTBqMFpoV3ZHak82RjhkSktNRVk0QlVXM3pqV2Y4ekloNWdRUXJiUVJNdDg1YmN6cXZ4QUh3L3B0dFRUYVlYRG9VQzRkL0dMZWdkY0ZaSXE5VzhqK1lsSmN6UlZQOEFZVTNBd0pHOEFYV0Z2MUE2bHNyeDFhc1pYZk5BV01EUmdES25Fd0tWMzIrdjFKVGVmbS95b096YlJKWkVWbDlrZ000T2M1UGM1bE54VmdkQ3VXUjFRaG12QjBaV0xmMEZFODUvT1NxVG5rY2laeW1EcFlYVHYzNElEMExmSXdPaHBUL1lISjZmWjdQMExaVTlqbGdKdlVJNXRaYzFmbU9TMVZ1amhNeU84R2F3SnYrQU5pME1oK1g0ZUVDU1hnNzRSZDFHWTM4dEV1SlZNSzhhbWUrc0NPVDgwTisveDB4cncwdmwxdk1oZElPNGRac2FRc1ZtVWxjQ3I5VVVIZTcySllDVW9rWWZmdXdZUndSVkJxVnpCbWJhOTROTU53TER3OVRiM1loczN3QXRGLzQ5U3FjMXdzQ3ptNDIxd0dLT0pTSEZ0MnRSV3dXeDk4dDc3V3FWY0NHTG43c3VoQzNZeWtxSURITEh0NEoxZ1pOYm1BeTRKYk01QS9TbWoreEZ5MGNmZVlZVWNxT3pFbXRIUDUrdW90cmVNdTJwd1pRWU11QmEvcDF2bjAwYnhlanVhYTYxeE1KNW1tQy9aQ1Fyc3p5QjcxcDVUMWNTUzRHUTdmMXVqcmUveUhDdXB5MnYxNDZuRFptSldCSTEycHhZNmw0cDhMUVZ6Q1pmS2lHWkhsQ2pxN2FaRUczZ2xxcEVFZWh5Wmh5azhuVDlXTzdSc0c5bkVPWGVucTY5TldQZzUwZ2pCMVFhQjdQT2JSUmxvZDVCcGQ5anRqSTUzSDlzOHFqaEF5L3lvMGZXWkVtVWlJbVBWZTRZcDE3d0szWG52U2lmVC9nU1NNcWNkR3RPeUdNYkthSTA0WGpJMVAzVlU1cFdib2pBVjV5M25Va1FvcTZFRVh6bXA3c3BXWVlkNXFzcDBjSVJwaTRENzdFdFViNzAzczJkaDg2MzZwaU5sYjUzRmdCSWJGZFZ5a1hOQTRNN09sQWdkZWRuQlZGZzZxaC9rem5PU1I1MWFlbE5vbTZVdXRSQ0w4VU16MTFXTFNVV2hqdGx4bEdSb0s5ZHMrVEFUVE0wc2FUak5VOXJDeXdxQksvWmNIRzhiZEpwUEdhQXYzYy9XbjdkdTUrN2p6VlQ3c3lxMHE2dW9TMUxGWjRPNjFKRDFJZjFraC9uekdwcW4rVVhWYlZFTlZMUVllMGRvMXZBYVBabmVZa2wxUW5MMmk3WHl6RkxWQUhZcnYvSkRBUFFLYnRqbWdsdG9Kd3c5QW1vSHdjeGc0U2dHemJaNlEvZm5Ud3Z1UGszcHdoTHNkb2EvSENGbUMwQlNoK25mOHd5OXppUGJvRWRiajdCZTVQblNIQU5NaHRiNHdFSm1RUUw1QTdwTThtZ1J4NjROM0RzSlFlcURVZlNrOExiZFY4dEMvZmlHTFdWclZDN1EvQUp2WkhoSnZiNHZRa3FyM3lUVjlIeFU1K3pJZGt6eW9CbHNkZ1FLNUh2ZXl0YmFsOSt6VUs3aVMxS1AzeDBiSHJTaDh5TXFYdjRtSWxFQ04rSGNlK1FoZFo0QlQ1MlEvamUwZHc0NlRCa3dkU2Z6S3o0QVNya1lFN1ovYXR5RWEyaTlXeVJkSmI5dllab1R0d3BsRnFCNWxnZGpLOEZhZE5ySzA3cWNad3ZkUjhjMnAzWDJEWjEvRXRtSEE3ai94dFd2RmRzQXM2L01vWTZleDlGbFd4U2FnRWM1WTVGYm1aQ1IybmhGa2NlQ2w1N0txWXF6L3BDaHdpYTd1amM5WFBlY0FmemM3cC9nYVpLeGZlV0xPYmdXdHJJT1QrZnc4MEpXaTVDVFd1Zk84SkFKWU0yb2t0RDN1d0Y3RHB5Q0JOU01Ed2JCN2dWUUpOamxyUFZ0MENyaS9USFdZSUdoczFTUEhjaEhkOEhyRWYzSDczYWFVRElSeURqcjVvNC9Vc3pWbWppUWZhTk4vK1pkbVExbHJVelh5M2VocmdHTzJiWmFXZUw0UTgyaHh2anRFRFZiL2c0djdHdC8wUlZ6aW5kU1FTRUNNUjFYSkppbGRXVXlKMjFZaVJ3LzdBV0ZwOTJ4THU4Z2ZuNG5ZQVFFc3A3TGJVeG0rdUczNjMrY1d3OXVydW00QzFWWHlDTVdVRTloS1hPODcrQnpZRWdJbXlydVhoYjBXK2htYmIvdjlabFlnUXI5MXc2U2ZNdVJoN3c4Z3QvVFVTRElZKzhFVE43RDg0ekNsbkdIaEhucXZSc3lKaFdPbG9lR0ZxR0IreUg3NnRpclJtUTdmbFZLYXp3R2xzbWNZVFJrMkV0SWx4QTRNQng1MnJGQzNJUHFrWWhOZTJ0a0J1VmZYTllURU1JcS9UZWRVay9QUlNpcWZ1T1dBM3ZyV1dEeWtTaGlsVnNXM2thclZYYUgxV1Y4K2U2c2FRd2Y4SUpycVowMWMrQTd2VVNJRGY5NjFRUUlRcEtYMUdJOE91dmtNeUkrUzJFN2RGV3FJWVVJUkw2aDVjTUtEL2JLSEhpYUxGUFV0S3U5RGo1ZmZXT3A4NGNBaVgrRzBneW91Ym1JSHpaTE9PWStkWE1GVklHdm92VEJTaWtFTXhDSlhZQ2ZqVGVIRnlCckFsRjUvVkE2dUlwS3V0SGlZSjBqRE9YQjB3TkJ5c3NFNmJZZXZUN0JKZHFyRndCV0EvTjVXS1BlVk5pdXZ0cTdzTG1OQ2c4aUF6amtXZUk2R0hOZ3BnSzY4Ym43eWRFa3dqU2U0SkpCdDBiRGc2STk0cUR1Q25PYmVsMndQbVlCQnlEY2c2Z1dhWEhwUnlVRHNjbitpV1FRb2lmZTlOa3B2bUhrbjBUZ21QUStVZFV0T3J6UEx5MDJkTThUMEZodU9aQlQwb0xGTkxTMUQ1YlJZYlExWEdZOVdDRHI1bkU0a1hDV3FFWWd0a2xDa0NmQnc5dWxLNWk3ZzhXU2VUcUlYRy9XazlHNlpiRWtGdVZxYjFaeW9zOXlvM0l1ZlRxRG9YMk0rNWlpaEhyTWFpYVpCdWJKUFlIdWFONjBYd0wxcUV0aElrOW45S295UDVNMWtzZWJOdnd3ZHZ3enlUYW92Z0hJNzZpSks2OEpjaFBrMDB4a3hjOENWUE1Feks4Wm5sT05CUmlJQ3dMMG9wcUJsVEJ3aFoyOVFYTWdNNTh5NnVRYkp6OHNENERMVUhwWFNBbWU1NGJwQ1hCSmlUZldsb2srNE9FejJTWndDQnIvN0JGU3p6U3pXNThuQTBNRUwwbVZxQk0wRTVWUUxJRDFoUGZOUHRQSEpKM0RBN3RSZVhYWFlqdk9uR2ZMQ29RWWk2elo3TmNSTUx3c2IrZGc4c2ltdUNjZHY2eUFzUkZkL2h2ZW1mK2N4N0xISEhOTFJyMXpLZXNXaUFPQmxFQjhIbXVsWFk0RDJWOXBGVVgrY0pwbE12aHBFbkZIMUdubUZ2WGRaR2NXQzE2dGk2NzVPQVV4VzA3RnByUEJmMzJscE16WjRra0JzeEUxU1dTQ0IxVUFJT0xINDVTOWZNUkV2MzFjRUdlK0NkTi9sNEdMMUdRTDZsNFdvVTdoaTc3WEcvZUN0R1hWT0daNUJwNE9zdmpMTnN2ZFBHQjRJOCtrYWw3WmsvSUtSTm9hVk5wc2hBbzhzVDVQdmlQSnNiL0pmRGVyVHZMN0p4bWtQa2ZyNWxHdS95OUwwK0xjVUZsQW4xYUFWRmpSdC9BT01JcDBTSFN4bFJ0T0g4Mjlsb0Mwb3B1dysrS0VtSzEzYVM1NEttTWp1Vy9SQ01uSTB0dUsvVWd4R0JFcnlnS09VNlUyWlhERXg3eStwa3daOEgwMXZGemhXbjcxRU5VK0h6V3g2TnJSaVVWZDVoYi9Db2x0R0dFK0Z3S3VQbjFSOXJXYXVYcmxsSzVyaTFpekV1NUdLdWZIcmNoM011aUdBYXRGeGEvMVlTanNzZzVoTmlxaml4bEtHb0FGczRIVFhvTEw1MDZlUnEvVE5POXJyZDBBazlQQTFNVjlJQ0F0R1gvMW9pNll1TUlRa2o5ZTA3MUhCWlhFZWJISGRlZk5weHJOVjBYQ2pXSnh4ZWZmNjlvMEM4ckk4TFk2WndiRlFhV1p2b1B4alRQRWVzZmU0OTFNMlZGRjA1NUw1WVovcnB1emQyZ1RudURjOE9kRHNsTG1nUmFla2FwWWxuT0VkVE9XcVI4dlZ3WHJOZVRYNS9oQVlEMFJuNUx1M1llL1hWQkVoYVpoMGtrQ0QzWEhxalBVSXJ0UytPanZJcEsyYStRNE9sWG0vN0crWENzZTVycGY5UHJCbnhTQnprd3J6SmJEeTNpLzFJRTdSTEkyTmVBbEd6S1FqbXFlQmthM0I5TEFJUzJMdFYwU1pxRlp3MjJoQVBLWEp0TUI4N05lOEhTc2dHbUF2dnc1U216UEk3MDRkMVdQY1c4WWRLZkQ3aVc0cEVWbUh2WGJ5allxMW9uRFhTbXNPUGR6WTh3S1BaNjl1emtidVIweDdlYldTRnJxNEU2WWR6ZTF2c3lMSi8ycVBRZ1NIblY4UVRRd0tWSksydUxQNm9SKzNLT2VBRlcwNWVMalI4WldLSnpWRzhzcmV4S1VPZSt6bVVDdVc0Y092Unh0eFgycDhkNXc4MENmV3NwY2NtWDNyRldSTWR3VFNBMmlYcXFsM083UXV4R0plVUNwMzdEaHUzZjIxL2FxQVZIeHdHNnJ3MnlUUmtvWGc3Z0NGMGtJYnRaL2V2dkJGd0ZFaGd2YjJJejVKWXdsTWRJTnI0VUNGS2NNcnBxc3I3am9leEUrU1I4TjlrK3l3WjRvSCtEdnNmMko0ZTE4cmNzTWdxOE5IcnkxdVdySmREWGgxUktLSEpRWTdSRzZMWXl6N0JYeG1NbzI5dDVtNWdyOVNQcm1IbGZDM245Y1lqaWQ2QmFScTNXQmdHSWlzOEpOTEZPbk1HaUFmN0p3ckxSc1I3eG5pc1FlVStGYTJWSzJIWERKMGxrOEpNQ2FLUE9FNVRUcWtCbkRpTjlWOGhnanp3RmlqTjQvUU83ZFVaNlYvSkR2QWRmc1NNY3paMyttZEl6NDRFMlRLQzBsVGNTWUpZTTR1THBFNFNVcXhDV254SFQ3Y3h0WWo2amJCVlprK1NUMXFiYUY2WXlPRmJzdWY3c2hiOGs0NkVWZUpid3JyUUg0azZ5K1RJTEZqbHZIMVRGME5pU00vL1RFVWMyR3B1cDY1aExhSVNpeTBnRFhMb256SExaNk1uelBlcDd1UklBeDFTTHBvb0xDaEk0b1F4cTBjdFBTcndNRzVRYjBZQldYSzRXc3VjVmhqRzY1bWtmKzA5bGI1ODM2M3RENzhxNjg3OEtrUytycUhSaWMyRGRET0ZOMUdFYk9vOFdTVDhhWU5kWmFkaHJjNWtTOXFQd1BpWXphckplWmRycWx6bEV5TE91dVpUeCtEcTkrZFkvRUROL2dtZjdqU1VqM29NZnkxQkpRTFRxL3JHMDVKL20xT3JURHcyVDdoTGlsZUx0QVJPL3hhTk4xZ2VvM2owb0djRUhZNmo4bnZwMlh3ZjhkeitxUkdJUWNJNlp1YTRBMGpnK3Juc2JDSVg2MEJML2FOeVh0S0tvTUl6b3dVNFlyczRlWFNlV3VhSjE0eXFLM1FLL3h6dDVha1lVZmZrM3ZNRjNYZ1NteEcvZ3RFUk05YVJ4S05TNjZSblNJM2ZuYWFNUFZoR0J1Y0s2dTRrTG9tOXl2TnhNUVJJdy9IVGF3Vmt3NDRxTGhROTQyaDUveFRWQUw0dXVKdkV4ZjhXRTZQeWd2d3E4WFVVUnptaEp2UGY0MCsvY2JOOG1nY2M4aFJ0L3lJU3ltckhleWwxV01sM0IzcXZSbHQwb0dvL2tvdFRzaVQrRGhvR21FVnZVQW81anhobEhmYWFidlNzRWlWQkNScVVFN015QTZMN3dFNHhnT0haNFp1N28zQndzdWIwNFBXVFM0MmNScGR4d1VuWWd5K3o0Q053ZGVGNmpUcmpGMXpuQi8zRVIrdU93d01yQkcrVVF6Q29oUmw3bDZmcVQyTzVmRlBXTXhVdzV4SzZIT0hxMEdFc245c0FFa1JzVkpVWXRZYTI4VWEzcjhYdHBOcFd6bTY5ZGY1aEdvUWZ5QXZCanlUVjlBTzN0dUNKYlUzcWNiMC8rU2t2bTdpb0U2TkhVTmNYd0hmVFRiU0JWZHArM0RpdWNzVE56cGxScks2WHBmSEM4Qml1NHRaK3dHSHdOZXdScUxORkJUZHR0bC9LVkpoSUVJeEJhcFgxTnFOMU4yNHVvbG1HYmVIN09LOEpwMi82OWVDWDJtNGhVemZTK3RtZnJhUTF3ZEJKSm83VUtPU1piQ0FIcG9Qdnk1Y09oa1VKUFM1K21MVzBxNlJSTXRqRkRQbE84cktFRGpwUUtRbktkQ3dKRVViS21qcVUvaTZPM0I5eDZGUTJjQXYwRitwRnQ3aHRYV0gxcFVhNStXc0lsRzYrY0w0K0lJbzhJNFUwN1I2S25WajhyeVBUejNJMlJ0anB0Tk5LNjRuUHVMUEdjZnpGU1pzUHEyRHdnR0M1SUNJU1d6aVczSllHYVVLSHJ1eldFbFp2MSs3Rm1WOXN0N0tHZzlNRmR6YXRFS2NnSUJsdHBwenhGcVFaY3VjSjBhbHNvNjVlbWo2eXVUQXJZQ2VDQjBBcGt5d0diOG5VdkNFNUFjSEdVZWZvSFMzcHBNZnVHYXhIejlUNGVhZWlMVXFWRjdKZ0FGSU5SamRJU21ZWWdDSUUzeGM1WCtyN1I3aStsNjhLZ1pudk1YY3hsZ0ROWWdPUUEwUHEyejBOT1U1ZGlWUVJXdGtRbUV2OWVQbi9COFZ6SUw3cGdQSmtuQlkxVTJsNWNtVHlGNDRyY21UU1dLVGNUNGxUc2tnd25aeTRVMFFQSmZHdjl1REhzdVVqcHVwM0lRd0JWeEQxY3pucWJ0NWhEbXk0MXJ3WXRtanJjTE1wcEhYKy9WZlpJUGxyY3k4bEFZaW14RzNON0J0cCtBcnQ1WkhKWTUrcmZJZmRuajlJT3NBRGlJbUdud1QvR0FKQ2xYQk4wd0M2ZnVjYnlQN3BQUnNRcFpZYXZ5SnY5OGFPRDU1RElqSXZSbVlVdU9MSHlDZU8yMVJLOFB4cVB5YlhJZ3NqMld3R1M4NUpPZXpTWlVCUVRhVC9RTXcweWhTMjVvbTJkcEtRb0J0TCt6MmJQdXVzTHAyaFU1Z3g2ZUhUN0g5c1JjWEErT2Y5OUc0M2x6WGZ0c05weVlYcTNzYVFxWkw2dUtqdko4SVp0M1VKV1B5R3ZXWEc3SWJGbUFVSmlkOFc5R0RBNlJMajZRWUd2anp3ZHdKTEo3bUZsOFhjUXdPSDFpNHFJSEx2RSsxWEpUNEEvd04rUGVEb1RtMzJsVmE0d09aNHVrL2E4Rzl1bDVsSkd6UnlQQkJxWmg2Zmc4NjY4dXJ6VzRGekNoSFFhaUtnWlFoZGNvRFdWUnZSRWpHVE9wamdlQ2UzVlcxMVYzSEdEeDdhc3NnS05qalpFME51NlJKa2RLNzViZ1FKRXZONTVkZWhsem9hQzBSRnhjR0xQc0pOR0VuRnBRUW85cVROS2RCYjZFWkxxZjY4NXdhbFMzak9iLzVNS1RDYnhkV1FDd0JhM0ZUQ0NhbXpNK2Y3RUNYRXlTWFIrZkQrS3BaNS9sMDc3Tk5EVXd3Y094Nnl3UmRCQWwzZ1RINUNUeXQ0YXhsRStvOGVNb3pyeVNZcTZ1dVQ5MFNJd1NwcGJyc2l6Q255V2ZCSSs5OXBhUzR4SG5ESXVFR1lHUHFPNmIxRWlULzErekhMUFoyVktHQWxUWFdQOWVFMDE5anNpbmV0ZHV1bnE3RW0velhjMVV2NWk0czVrZVRiZDREaUVUTW5DRkpyTUs3QUQ2RnJHZjhMVmtpZk5JQU9oVzVVTTMwdU41cE1XcStqMDZGTHlWZlZCckZPNmZXY0RkemFJSFgyZVU2Z0JYNFY3WW1za1Irc1hxK3k1ZmdvNjZtL2ZaUFpIQWxOUXZrNFlzNXBueHBLbFFxOFVsbXA5SE15dndHZVdETTQwK2hxMEF2Mm5YMTJFRkFEOHRsSTBPQTB2N1lpUkZ6R3I0ZUtoaklRVUx5dEF6NnVVbzFzYTVXeUFJeFJyNWs0Qlh2NXZRcHkyRUtQUVdzKzZCeXNVd0F6VVJhdk9PNk55Q2x1RmVYSG0zeUpKc0dvQzRUWWRUL2JKOWh4aVlybmMvRTB3RXN5bFlWS1grQ015ZDlWNjMxTlNERlh5SnlpTzVrRkRoSCtWOTd5QUd4c2Q1ZTYzRnU1aWIwc3lla1I3VkhGTVZjc1U2MkxPd2ZEakh5YVVneDRyOE85dVg5cVcxZ3hic1R5WVNNdzduWW5neEpaV1ZKVjJoL2lrZUpCTjB5Zk9TTENoNzlKeHp6a3c1OVArOEFrSy80U2NMeVVPZEMvc25Jb2tKeU90cHYxckFkblBVUFN6eGtEL3VlSlFMR3prYUl2NUpCemo3aGxUZWdPRkR1N21yVGhmNVlUNlFQcDFyRTNubmd4Mnk2eDFvd1BKaEhyMjRJZXZobDZEMXhzbDY5NU5XOFNNYnRTdkVZZUFKNnBpQjdOcUtqa2dYS05KMW9mZjN5UnVDTktkSVVYSEZ0Nm92Y0RZcklNSHBKWHJNenBzSVRaOGorTDBkZFlxWGs4L2xZMUFXT1h3WUNDeURHbFpGVlBpRlFmaGlITFg3dWlRa2pYTUhkeCt6L0xpT0dMbDJ6YmZUY0VZNHJiTTVuNFd6bjdTNU5YcCtJeW9BV282Y3FtTFlENUs5bW9KWEdPNXFLRnIwd1E1anRuSUhtMldtYzZXM0JxNUp6d1UxbE5weEpvekF1SEVWcXR0dk1oMTNVZE1qRzBzaWFwYWJlZjlJeUpWV3F6OE1BTTRtZkQ0ZnFBY1Y4Y3BLOVZWM0xlL21lMDA2YVJ0SFg3d0g2YUxhWVFBSTBKWkR2M25VS09icEZSNGczK2l6MXN4YzNtWWdPOGJuMURJenFLUzFkZmVqVmNlWkdqQlpmWmdmeDBNS0ZTOFo0Z2hVYXYwc0hyS21KN1JOOE5MK09CR1h3d2VDQ2V4U2xKcUo0VzZBcnY1eHhqY3JpQ2FrR2tZUWdkeXpVK3VobXlmOWZTUGR1Zjd3UktEOUxHT1J1VGZZazZBUTErRitzMk14aUkxV29DOCtsRDB5Rm5hbXVzVlprM1lqb0lEN2plYmRIYTZmOG1GcXhva0hibS96TWYxSWhFTmFqZzc1MEN2eDRCQnlNR05JQzFURHV5VVVLdisxbFBEY3dCZWhmdU1YUDBmNVlnY0xhbjZKdXFJeTBabFpTWTlGMzJ2MnRJaWo1YnVjSjNKN2dKOTVFTFZDKzhrbmt4UnVuQkVIZTBaeENEY25yellMOFhsdzI3L3o2VkpWNWp2TUZIVHk0S3NvWTFnQ3BXM0IvL2FWY3BJelhsNTYzNVV2VGhVRHhEWFZteWQ1SG9NcHZDM3pZL3RWWVRoYk9IZWI1a0lhM2RkaDcwWUkxRWUvVW11Sy9JclBTc2RSVnFJK3pnZmpRemJCU1ZtZmpxTDVrOUpyL2ovMDBCRXB2VE9QOXN0Q0xtRFgvT3FZbkx4ZHd2QWtYYnYwSUFYdVF4d0NvSjZqQnN3eVAwS2ZycFVTT1BVSnNzYkFiSW50R2xwUEd2TXdTRWpWeGFmSUZVa21wSnp6QTFwbGN5aXBMTGF0TWdHNzYxaUJtaGJ0Y3czWXFidWRnY1RzcnR2NndPcjV2MEZ2TDdNTFBvbXNGaVhlbytrYTF2cDltcUJROW5MWEN1MXNScUVhdzJCZUxUL2hwVjNTUm0xVnZCUTQwV1JPU3dXY2xlS1dpSy9jOFBabngxbkw3T05ObE1TWlo1cGl1MXRJa2NFbGh5Q0xKRy94WTgzNzFFQ3dqRzBmQTAwT2dkMzJrRmpUTnZVQ3BKcjR2TUZyVW5mM3pIRG5SWE1wMm5nTU52Tk9MUTN3TVpDSEJ6clcvYWdnc0xTc0s0VlZlOWpoTWJoRDFpQVFBYnI1ZTBDTUU1Q1dJcS9Gb25HWlpLem9uaVZRYUZGRDVKeVhFblRDMXpNczBBZCtJdmJRSFNyYURseWUxMzFpTitnU0lKemxFZU84UEgzR3F6VzVBcTJTYVkybEZ4RlhnUnpwcUt6S09OYTVYOGZPSTRxSmVCWnB5QXlvZVJLWXphTktRUjc1aHBTYXJnRXozb0U0WWJNcWV2YUxnV0hMVmtNRlhVSXE4S3R5bkcrZVpsYkRBcnpPekkvdzlENjVIZDN3TmpmUUJhbEY2NmtRRDEvZndJWDBmVFd5cWhFSnhPR0hmb1BXSWdTdDVzZDJMRW1aWnIrcDVndlptM1NOdTR3VmpCUHl0OWp3MnFpcW9wRE85SXk1SHFRMUU1ZHJvOG9jSG9XTjV6c0FVcDA5MldVZXRHZ3h6OHhHTFhOanZWSUtwSEs0eCt0TTZyczVrMm96U05oTXJhL3hBdjlhZ1FaWjRtN1RjMzBMbXFrcFZZNW1kOG1idFJ6dDFTazdpNjF3WVdnYnoxSHJyNGZPcTh1QSsvR2JPQU9xZEJ1dGRUS1hQczFDTHgxc3lEd09wL25FY3EweUdkMjVUMnpJRzZTbXAwdCsvcHJJVForbzhpUXVsWVdya0tGeTg2TzBkUUtWNFBadG56RjlIUDRXZ1M1dkZqWDJBcWhLSS9hOUhlQVE5NGRiT0F5Q09YT0JQWDhkS0RJL0NzcTJlMVJLZkJTUkViWFcxZHBUd0s2dE9KaWxjOW1Xd1BZQ054V2Z4K0RYeXNjcE9MTmxFWEowNUhMcmJJUmtQWVJXVVBUR205R0V5ZlV0SkxWdTRZNVFYNDFreUxGU2s3bzl2ZFNIWmpWMEdMMS85ZC8weWFSd1NwTGlBb2tRVnRXY1ZMcTZPbXdvZlgwOGp0WCtlZUhZbU1OWkwxU29vUFE2NkNDckNUb3pvTExSdkJJQWxENWhRR2pibWVwdEZiNmY4T3ErOXFXQ0NodHViR05QRmpNRmJmcEVGUlpQd3dFNkYyZG5LeXhCSERSZE4vVUtYMmNOOFY4R3BVWEJxYnIyQ1ZQdndZRDE4NXllTnhSQ2UzcDgxOExieE9icTkyaC9FTVFHWW0zT0pmUFQvYTdqWkk5SkpkYWhpOXJoTDB3WmR4dEtLQ0drdHMvY1VPaGZ5MyttbHdpRTd3TzBhaTV5ZlJGOEtNbXZLOGU4cGxncGw0V1k1V29QQzFVbE9pZ3BkR1VmUTJyRHIzK0l4OUtUaFc1c0l6cW9FcGhtREk1TUYvZWZpcEpRRVRpbzBLcFdjSkt6L0wyeG42WEtFcFJqODhkaksrUCtmZG1hWXQ0Y3MwWXpLSXJleW1mRStLVEdzcVV4TnJDaTB0Tlp1VWdUbEQ4S0tYMys3YjJUMFBveHRsK1VoVkUvMlVucEl4RWRzRHVsWjhDakhDU2JMSEZrcVFiVERJOEFWKzExQjVYNFJyZUE3dUFNWHFLYlBUbVAybGR4OUV6OUt2S0k0bkJzbnVUbWpkZWlLRUYyWUk4eU0rZFp5bTNkaW8xb25kNS82bjBJUFBuZmhST2VNSWZwVk5CQ1IrTkRjK24yemJnSzRncUVWMUVPZjBOM2FLNVYrb1E5NVB3dzU4bk8vVTJKNTFjU0NZbzFoU3ZYWWxtdzd6djdnWUZhMGplTTRsT2llOHBKdFk4WGNzSEJYUmkyRVJ3REpuRTdMZHhFYTVMOWIwcnZaRUloOXZYbVV2MXRuV2tTNVpwbmFFTzFDZmtlNnIvRzNLY1laSEFHcnJOaWVWcGJPVlVHZGpjd3duR2t3SHhFR2xHYmJHRFliVnJmSGQ2cmNEWDVpRU5rNnlZNVhOYTVSd0UyUU1GQTlXWDBNSFNkdHY1NW9MYldtdHQzUjFrbndrVTBIUytuUFBNeURnY2NwRFl3ZTVlVWpQcFdqTXN1Q3pmcEdNdSt5bzV3RGY4TjgvMnNmMWV2My9WZTMxK3JwYnZuK3NSK3IyRnA4bjFjYjUvUVRuNU5zWHcrL212azdUZm4zUnd6NVB0ZjN6L1pBLzFlMlRmTjZqSjhuMXN2MWV6RFBrK3RYZlA2WE0vSnVEOG5wOTE4bmZMOC9TRGdiNVBxVi9uK21IL24rcmwrZnUvZko5R3o4LzAzTDVQbzkzeWRyTmZCMGQrVHVCdnlkYi94TmxBSXhTZ2ZMVVRpYm1wMmZyOVVIQVBtT3J2WFlCZEE4WU5DWmpVYWFEdjcvU28xalJxdHJBbUJqK1hzQjJuRFNnRFdieWxwQm9vMW9qTURNQmdvM2o1UVFoaERyMnBweldQTHdlUTVIRnd0WVl3UHFpSHh3ejFxQ2JBMXB1OEMxMHAyeHFTOVZoalBxY0NPSmRObUoxTnNGL1JoODd1MFhTc1BjbkRVRGc1OFR6OE9nR29CMDJQdDJTTndpL2hhcG11UFB1bnQrVml0alpBeHlVOHJPNVdDYWxTb1VibXNiRERjN2VzSlhoMkVDeTF0VmRGYjVEZWdHRitEc2RZalNIWGhPeWdFbkdzYTNlaERocm41VWhmSmkva2svKysrZ2l6cnZWVDJiQVlpeC9CNzhZSnV0bXJCK050MTBrQTV2VDR4TmNnQWVWNytaTEZVUUhkbWQvZS8zYUM3QVA2NEFjb1hreHpHWGdPUHpEYkM1d3oycHdoZDRhZGs3UUx4R2hNQ1A3dzAyK2I3ZElGM2pOZzcxeU80dWZnYkFtZFNRWGl6bS8xbEcxa3FjNi9NSlhvRFYyem1XVGxSNE1TWHh1YW83TVlwY0xCVkxGeW42ZVgzTWR0ZThnT29Sc0Y3QzA4UHZ4YVJxVE5mamhyZlZOaXYwemlqL0RGOWZIN0lnTDFLL0tZUnlXSzlBOGIwdXZ1R0FDdjNWWmFwUWtlTTJ4WFdOakZmaEtDdkZ3SEg3ajA1RTdUaFE2Z3J6UEhrSWRaR09LVUlMeXdnU094Q1hpRFBBRStHcmVvQlhodWJPT1F5ZjJ1ZlcwRUovb2RvY3BablZRZFNTTUhJOGZLTkpmQXI1WS9Ka281R0NYZ0E2OUxVVTZaMUFuL3NBS0JLZDZYSGE2ZTRCTm02NGFYazNEaS80U3hkNVR4TnBEeWswTGovU0VpeXA2MjB3MGZqTmZYdVhuU0d0bUgycDMyVWRzV0VUclR0bkJ4SnNYSTFLWXdaWmNubWRMRERKVERWZWdXY0psaHkydHAyblNnUFdnVmt3R0hQVTFJK29YR0orNGlEbHk2NWNYQkZUTHE0K3dCK3FSdXRSd0J0YnJEZkZVSkdsY3pySWY4RDU3YWtBMFRxempKNHNFWGFsRks2RnhUTVdHVkRsSHczVDNyanVEdHZzbTFRWGY1aWZsWitwL1YyOCt4N3dZVDVBT1BtTE1SU1ZiT296ZmdES2pzMXFHNWo3TkM5UUo5U0Z6UXhKTlFpcGVtMHVNWHdKVmFvR2Jrd05QT1RldmZlSTk0SEtaOTBJa096UnZEanZCd0ZXcDZIaW1wWkczbWh4NzRlS05nSW1ETWtnYlVOcFgvbHFGbGlYcys5K29VdDQzM3hsUGd1dFVRbjJrWXNUeXVvOXgvQmNBbGtpOGtPV0lOclpzMjIwTXVwS0xWUTRVdytGdjJjM3RWa0Z6QXhpSlhXL3ZXbDd5VFhqQXVDK3o5dFhSdUk1dEgwZk1LVThiVmVXU1h1ck5TQjcwVGt5NHI3bW1VYUxtVTJvQjRpQnlmOGs4ZmpHcW5oMXkvM2F0RDYzd0F3Y3hxZkVEUjZLS1U2Y0Y5N0wzWDdUSnBRbnRrSXNaZEVPeWl0SXZYK2F6MEcxcGVOUldQOVR3N0tZZXlPL1dldTh3SExoWEhjeHNiajk2SlFManp0K3VpVFB0K3pvQy9zbmZGaEQ0NGJzR3ZaQjFhS2pMQklxb0c1QzZpaDVzS1NtQW1uOCtvOHBrNzJsMndsdW5mZ0VXSlpaeW10aWxjYlJZejVRUkZkN2VYRjAybkdDeFYwWEpOVG1lUU1zZERnKzMvSG5XL2NGYW0wTVhqa3NUTTFpczhoYXZUT0VQbldwZ1IvdTZVTU1pZ0ZzS0pwM1hPSW1kOXBzZFBxQjloS3Q1d2UwaStMWlBhakFpUGh1cVB1UE9kNlExV1Q0c3ZqWEhqcGxYTlNxcEVVMHdsblpZVHJ5cDdzUURGbnV4dHl6eG5kNGFXbi8vQVkxcHRKZndtc2YvSWhGRkZXQVM1dUoyZlNRdmhvcGQwM2VvVVZxSjB5aUdaWlU3TWdHTndnWGtDYStMTmtFeUJxUkZSZ1JRS1phWElhYnNUOGw0dlUyM1I1dlkwbkJVeC84Tkw1ZzdLZjlhMGVNem85aWZXNjNPc1R1N2hTR0FLekNaaE9odDhNeWVFMzQxc1U4bUF6Sm54WDgxLzNuWEw0N1dxeXNJZXZQeEtuWm00Wi9JSm5hZEVaUkt3MkxSSXErT1dicDVIYnJFeHdhbmpuMTBjRFZVUnVtc3BURVhvcHQxREdsVDgvTFFuVXFDcitvMkFNNTNmb2lyRTNjUjRIa2lSa0JTQVFzUzQ5QklyaVZTdkpiK1JHcEc5K1MvdW5FWnVDVHRUZnBrdEFkRmhnemlic1FQdDhSZjExVDlmOUZWcVM0NlFFc3V6NjY4WVNvYmtqOXI0YkNXMmw1Qjc0alUwS1lQaEIxelJtSCtobU5GR1V6elVLNjRpSzgwdUZjeldWemxmWkU5d2s3Q2x3dFE0d3NjSkVKUVQwSklIbHNnMHVDN2VhdGE1RWp4WEt1cWNISHhZQjJ1OWRvWk9VOVY3ZVBXT3lWMWg0VllyUUg0RU4rQXdxa1JTSWxNRDV6bzZOVmIwa0QyZTg4RzR5aGM4Rklzb2RiOHNsWnlaOFVGekpwY2NmQ1FDaHFYbFJGb1pEWHBHZXBRSXdqQXFVWkZuc1h3WWp4NTB5M0V4Q2kvUERhK1g1a2Q3ODkyUG43YWVmbUtzbThwdkRaN1lPTjdHbjVTc0MrMnlHcDB5dlFZKzZpSkl4QTBJZ2tqZElqVi9wdmpmQXQvRCtncjQ0d1RKQmp6ZUQ1WDBiM2taZGZTSnFGTHlVRnhKRSs2WTVla01qWVVvczdnN2czMitPN1FoejNwUm8vMlRWTnhIVnVwSFBObkVmRGNNRFN2dmRpcVBHZS9SbnFHM2RyYnZ3YmRkY2ZXRE1Oc3NNUllod08yY2hiZVIzSVF5SFMxWStEcXh1UVc3c3NBdldUUmdEOTlUSEVDdkd0RVVPWUYyNmU4MHNhcW4zT0oxNEt6eDhjc0RGTkNlNU1xOFFQV1E0K1pQSDYxZkM1ZDZxdmg1QWNPQWJrMTlQUnJiaW9qbVlodW04aG40VHRBTEVzdk9NSWJsMHhYeitpMVNvSmF4QzA5anVRR0xFNjY4ZTlidGorb2hub0wvMWlaaDBYN3orU1RacGZFbFhjWnY0aldDd1V1SzJGakVTMkhPUDhIZkdqaGpycUVNeWwxaDUvRk5CQk1HNmYxZFhjN2Y2Y2tHQ0ZINVA5ZWRCTnFnd2MrWGpzVXVKWlFqc1Y0cFQwcVhYVm1HSFl0OEgreG5qQVU2WDIxSEVPeTBNUFJCVms5bmJOMW5OMFJzZHFqM2ZiWmczN1BCclFpQzA3MUxjd245QzI2TVdxOElVWjQxV2UxVG9JdDd3YkZlTDJIMVNNRk5OdHJmcnNuaWQybVd3bWUxQTNOUzBtMHRrajl6ckVtaWhGZlhEWEpNQnVYV01XQ2ZlK0U2cVVDVGlieEZIMTB5N3VSNWs3QW9FSnhlTzl2eS85UFpTS0M3QWdUc3JNKzQzMktwWFBiOFkwcndqR1FXaUVUUEFCbXU3YXV5aEZDd0dkRWpEcmNiOW5ReHRzaTI3MlJlRTN4SzZsMitxRFhDcWNzeDV3a2h1V1FEMU9HTkg4cmNwY1hpbEkyUzREVE5CMEc4dFg3T3RRR3ZMQXZsd3BXcmsvSHAzY05JUWYvWE5TS3NpWSsvd1E1MDludGRNRnNXVjcyTWdIMUlHUC9Wa0txeXZjejdhcVFXRUYwV0FQTlVqSHJGam56ZndRaXVEZWlkSTlIeTRKbWYwSHZ5MG5INGJQMjRqblRERTlKbWMzYmp0NGFuNkRTWWtXZ29ZVDZuV2tKQVV3eXQxT0tkQWtra09XTmZhZGh6VStZNWU3dCt1K0huQXRGMVdINS9CdGVDL2VKREtLYytYWmNSQVhlcGUrQlcwVkpPMjNrQ3lmZGYxM2lRNWRkR21jSk9hcXUzSGhLcXF4cjdHcGNOMmZGeE1hTjljMG9aQVg3ZXdpWi96SkRMOWtBWXppUDNtazV5d3dPWjQyZ3hJMlBMRUVxUE5aVFBheGI2MU83QkkrYlA3WlREeDdZZzliOHFDc0RkdEhoR2k4bDNkL3AyTVZuQmpTUkg5a0IvZDRCY0dNYldJbVhSSGc5WG1DNHNKQ2pjMllBMGpXTG4rNGJnbndHc1JOVnZDaXd4WWk1UUR1MnIrSmQweDZEd0NiU1J1S3Jyc2k1N0pSYi95M2J6ZFdteDJ6Zzk0L05kQVI2enZuaGFqNVk5Wit6clVFNDRENW1SMnJoV05xKzkyYUZVR1FReXR5NmZvN3NKNWJTNGZkdUljUEtaM2hsb0pqeHhFamk2M0JpZmV2bHpJaERpaUJ1U3c4aWwxRkNRYkhlRWJiODRMbGdEWTdnNUxqNlFXOUp2eGVETWNoNy9XZWN3NFovVndkNzc2cExiVm55Y253NUVtQTY0MDN5K2NHeHdsazVVUGRmZk80VTdGcXkrU1puOWd4MDVCR3BYdDR1K0tmMXdka2U2eWhLcENDaVZVS3cydzYwcTFkWDhRa3NvWnAxNW9SY0NFSVRTMjhDU20xMGQzZHB5YmRFalR6MWdnK2tlUTA0VXBoenZneWUvQ05JbDQ3UlZyMUh3WExnSzh2bW1QUXBwTHIrSFBUUnVXU1M0UmdDSERQcFk0WXZUQW91S1FmbkZJVHBCRyt5Ni92YWU3SGhFOTIzMlUxZysyNGNnNG5BbitTOVlJWXY2elVDOElZZzlleXR1WENEa3loRFJYWC9hV1Fac0UvMmlGVEJvUjdid0NHNnBzRkRjMENoKzUwVFk1dkpjVitvZ1dKVmZKdzk5bzRUWFh1dHM5TEpSZkVuNDFING5YL09jN2JiTG9TT2p6WFVDZHlSSmt1M0F5UWRpblNjMEwrdzFmUCtWcW8rVzQ3RncvV052REFPUjZ0Y3ZEZzh3R0ZEUlJqRitBcjVNWGJydjcvN0VxQmppMUYvb3FPaTlycFlmcXZ0eEJ5NlFhdnNoalhVb0hzRTc1Qk9mei92VERnTThXeUVCRkZEZUtWZ0lKVXBEdnd3dXRFeFpXSkVsTmZ5N2Fsbmw0a05mMTJmVkZucDRFRmdkdnZYUFpMZzdxbVRxdlF5Qi9McnAwMWtRNWlUSWY4QlVaWk1WK3hsRkU1VzVnQmduOGhubDJ0SVpnVjhhYTE0SmpyOEFhRDV5VGRMRXdhdll1NG0zNTViOExsVXprQ1c2QU52U2prMTJpb0pUUnk3S3dtd0Jod3FCM0VPQllXUWVsS1cwdFN5dy9udFU2aHFXNzZMcXR3YTNRbjc2eGU3VEptOTVIbDlXTEJUTU9yOFhuWmVNWmpoWG14eEg1OE14dWF4MDNJZGd5bWtlRFg5bnVORHk0RG9DejlnbEZETnIrYVZ4R2NaNTROd3NaYlpnblhibzd4S0kzaEZoVmtzaWNNck1wTHdPZm1DMDJVT1JNV1paaXJaYkxVUUVNMVl2cVZyMVg3SFBtdy9xdHBPdnE1c3E1NkRTRStKakdQZTR5S2JmOWtSREJXZ011R0k5WEl2ZGV0cTEwS2lrOGJyb0JzRlkvdkFuTTZORGE0NFpCM3didUxncENCRjNMejlRSGFYWVYvUXQ2Y0VqUHcwRDZ6N05yRzV6ak0zbXkrbWFWVjJWaTdCbk1lNEFkQTkvckZZUnJyakRzMURpM3hkYm5QaFJCbnM0MVczSjVlbjZaNHY1S2JVT1BiL1JmS05iVHBqQURSRk1sWjEwczZSbWxMTE5lN09KbTc1QVoxb1djSGQxcjNoSVRtYU90cHJqYkFsVWtkb1B0eVFrVUc2TVpZT0ozZ3EyYkZWTXdYQzNhN3ZxeHNrQWhuS0RERzBDZVp6MGJrbCttR3RMeFdRQW9lNmgybUp4TmduSk12M2s3UzRvYUMzOG5Ga0ZTUGZNQTdKNGcrc0NnUzJkaXFRSWNPNUFVYlE3T1hsc0N5MTRXbFBKZmV1N2JJZ01vZElia2R4UmdEM3o2bngycUo5UjJpWWtTTU0xM0VRbkN0b2dZUVcwWW5CL0t4NnhrVzBxUEIxTWducWl2dDlrTzgyM0FEUUlhTXlSVzNha3didkNNMkNjZUNFQXVCV0RPdWVCalY4aExSS09PbjdwcGM3Z1BPMDhZcmVTYVIrRGg3RFY4ZXFodThsZm8zVWs5SW1FUUw1bmtxWFJjcTBUZXZzR0pFNms5RmxDaDRoVjgzTlJiWjE1dEFsL0hVSTlKdG1tQnVLMDlnSXk0cUZBczlDdUNNTFJsZC8zcjBnTitrMWlkRFpHMy9uSzd3VHpvRSszbnY5WEpnb1pWU1J5WW0rbi9zNE9ESTRScEdZcVRPOFBGNEE5YXdUOXExOFE3dXFKSjg2cncwNXZqaXQ1Mk5TNHJnZmxIREI2Nm1mdnlzVlFaUktoYTdHNStRbDdMSUZta3FxUEJwVUZPWGg3NkxHNDNJUER2UzhJRC8yVjFjRFZBQ2VJRWlaWmIvQkRJcTg0Q1c3MjVreTcrY21yL2xkUStwbk5BdTk3ZHdtdHFxaHdOYkh3SDhQZEhTMnZmQ3ZhbzhmT1ZLWUtqQk42SjhmMFRIb0dvTUdlakRYQ2hPS2N2ZHVMWFBmWk9VT1VnRFM5MURRUXNaVlhCTDlDdHFJZC85bStrRnVtVEMvMndSUUdXTGNpdU53eWUxZmlZQm5vN0doa1ozdW9hak1qTkJUVVVpRVNKb1lhSmJjSk13RHNXaURwZTdlT3gybTdBaW5TY3N1Y2hEa3ZCSnQzOCtMdkdYRWJnNVRzQ3F0RFVaTTk4RFlJTEUvZXgxSFRxMGFpeCtFUzkwUDI0VEpCaXE3ekl4QnJXYmtoWFNoSWd5d3VPdCs4NWdEZXl3Mk1CblkyUXJhWDV6cmY5OXUxSzB5bnh4djJsbnp4L3Y4NGh0UTZ6TkhHc2UvWUtDTE1XVTQzcUJMRGZmU3NYSm84bU05Nm9QUWp5SVlQckpkYW9VZVJDNFIyMS9GTmQ1UWdMajZieE01UWZOcFlyY1BiUmpNUDdJMW9BNW9nUWxCMktJVGdISm9OcU9pbzVCTldxVjRxMUhTMy9nczJRYzBYeXdJZWZQcVFyRlE2ODY5bkJTQm5yRkJlbWt1bTN4RFUzczdRWG9URTQzUHJ2MGhJSE5LM2FiQUhKZnAza3VlZ1JoRFAwcXVROHZmdEcyT0V3OXV0RFlDODUyUGQvQ3k0T0RRVWg4SXBwbWcwdS9URXd0V2FWQys3NEVMU09jS0ZHQXJqNWJNQ01ETFNQanBYVk5YVmZXWVNjYzNEY2xLeGhFM1hubzhRMnVjRzNzY1ppcUNxbDFGWjBnTGVFWm41azRKY0NwWVZVQkRrcnY3WmJjbzQ0VGlSZE9kR3NQOVFZU1ZOcVEzMVB0aDhPTnBzb05aNmxoOXVqcXV2ZlJYbmxDb1hQU2VXWFhPUHUvNnFxQmd6cXJoc0VRcGk0cDl4QVNHT21NVFVsQ2xYZHN0ZlVxcVhSdDRlc2xBcWxtSW1vc0I3NEQxVzlQaHpDamwrckszVFpKbXZQTzZlUERPMVh1Ujk5V3FvRWdEOHFJYkFkamdTZ0c4cEM4WG9uWm1XZlZvSjdaZEhGUlBKdk9Bd0hwS0t4Znc0Tmdjd3hxMmY2VHZ5bHJXN2pTVGxab29JT3M4eXF3UjhUSVdPNGVlYTZMck53a1FMdmkweFRMRFpHa242cmw2Ry9FNjdwR0JwSEkzODgrQ3BKdmZxSWFOZm9sWW9SVTJFczZYYnlhVTNxUzltOFdmd2QvUjRneDR3M3prc2xySngrY1M0ZkJ3emt1MzZkUXpJUG1JOW8vYWJmYWpTSmlodzdvc2s5QmdhTEl2SVpyV3daSjIwZlhsajA5U2lDWFdqTnlYM2J0Z2FYMzlCbG1HRGVZMWtLMWNoQ1BObVNITjhxekh6b1V2YTZyc280cHQyT3czMjU3VFNxZzI5MVJVSDNFMGsxL0x4VkJESnhrUklCVEk2QUlwVzlGeUZaOHp5bVBZajNZZ1loRkdReExWRTR5SHZpMmlLbkNXODVWMGduYmpDMytGRDF5REJKeHFQZVhKVHpPa0ZyMk1XL0xaT2luN255d01yQUhmaVpGbGVjNld4QytHRjV4dzVLWUJ5R2cxWWsrN1VENVhUWnZkZ1cwZ3R2UmR5OXBZTEE3ZytURjVmbW5raXVRV0dVMFoySUdCaGt2cjc2OWo4L3dxSXFjbnJ6UC9LdG5MT3NnZHRJRlgrQWlJN0VKR284dmlPSkZSRnR3QjIxQldNYmFINzRtVDhsS0NlSnBWTno3RktLZXFzcTR0eWFJODRoRlczSUkxQjlWZVJwSWtjaDNUQUFvWURrdlNXSTI0NGNoUFRMNlh2RytaZG1BYzQ5ZDYvbldrdGJ6L1FYVFhESGJPeFhZSDJIMENrbnU5SG1VVU1Xd0pOUWhIbERKbkZTbnBvTDhYNC81ZmZlWTBwT0FIbXBaSmlWTGU0WUFEQ0RyMHVNeUhGaWZnbzd2K3ZYeU93Rk9rM1Azbmt4MzJ3ZEZvNU9kSFIzekNZazMyeDdNU1JRZ2VMOVNaMk5FS3NsM0tMNlhpc0NCaGNXV0NJbDhCdUkxYWdhZUVmRjk0MTJxRVByc3M0bmJhYjMxM3NtMSt4RG5MbGdkbEdROEwrY05Sb2QyUHNxbTNJRnNzQWE0c2h3V0h3TTFUQ1ZkUkgwNmFNSjNaR2tEMHdzUnBpWjA0SWVpeGxGZkhZRDg1cjJCUXFHMUg3QllNeVdET0oyaWYzYmxXZjhGb0NRNTdycURZU0RKalBhZVdCL2FkdHYyMG9OWEsyNkc3YWJFY0xHWWM3c0JOc05DMEt6R2JzTVBzNmJyckFkd0ZRVzM3VFM4UzZrb1FFNjd4TGcra3dHRUkzVVZDOW9TakpFZHdxY21reWVhdjFRVHJKa1lkN0Zudjc5T0Z4M0xwUUVlQWF2VWZaaEIxVm45OXdxL2J0TjFhVlhCaDhMS0pNYXd1K0lDSkszRDNXV0dDQmttVVRURzJzSzJVT3NyN1psOUxoNk1VSWxrWjdQczA5TExNWFJZZk1VdFRiUWVjU3pFT0JTTGsxVHQ2cnhlSEVuRzlwQWgrNzZRVDZxV2piZjI2VnRtWjM1eHRtd2p0TWZUZm9qRHIyNXFKdmFHL3RZRHpqWEhsZUlPWE9uUEllN1E0aGp3UDRtVkhadDdmOUg2WDVXZHBmVUxSZkxzWk1IT2ZTL0kwTGxRVjlIUXIyR2NuVFZBRG14WmhwZ1NyOXcvbVV6dldjQ241dGxzV2dJNVNXQWNkL1hjUE1nR1Rwd24rMk45MWhwS25UY1dMZG9MSzdwMlVMdGhOZTFCYS9WR2NJZjJmbWxLaFN2cytGR3pjWHRYaFlmT0dJK3RBMlBZTkFRcEFVZkhHZ0x3cE05UGthZTBaN0tDVmhuZUZLV3o3KzVzcGJBSVpZZFJuZ0R2SEZJT3FPZXNzRXVBQTNlN290b1BpaG82N2l1Q2srYVc1MUtJMlVka0o2TGxoRVpKME01cWdJWHcxWXM3VnA4NkdsZEptaGlNMjBWc2w4c2dTdGZNZENsMXhnMXlrRUdFRXFEMktnSnBhOHBKU3BQc1gza2U4bUxCRXdoZ1JPOHVUejQzUTdGdkV5UGJSV0ErTWlEbFNDbjhqcW1nUE5ZR29iU1FOVWs1bmRIOUdrdTJwVW1hbndvR1VkT1NyaG5YMlo0dSt6dnJzTzhEYkczYThuOElGNEkzRkUyWDAzU0c0MTV3clFmelhDTXQ5TWJNZlJNSEJnSzd3UWpUeit6QjVZM3dXV2xISnJsTk14RERZQnpXSTdEcS9WM1hBM1puMVFhRnM2Vk4vWTgrYytOYzFkTENQaXA3MnIrU2xoQjQ4OUVJRWoxVG9TYWhKSGJ4NmVPb25aRXUwY3JZcnpWUXhSK1U0NDE5ZXFmMXJmcmNxT3pNdjJ3SW1EWmo1anFQR0Y4TU8xTWp5SkxaZmhYOWk2Ni9LRkdwbU1SbUFkSWJtMERwSTNOVVNod2Y2endNNnNRVkFQRkh6K0pwMmJtSi95Z3c4Z2pXOG9UdXNxUWM1VzVTTHFFeG04UWxNQTI3cncrMzlFYjg0N0RGUE5hMzd0enJzRHNJWHB1R3RxQUFmaGo0OFBUZCtwVVlkQmw1a3hYekpwdzc2YXdwT2EwL2d6b2lpNENZN1FPZjdzZ2o5dU1qN3FLMmxHa1RYMWIyWjlaNXhoanVlaFlldVVzVkJ6eHdVSlloUHBsZmFSUDlkOEE3M1BEOXEwSW13MGY5c3h6OU5yYlFIbnlWdjc1SGRhRklIdytHeGdidWdHOUp2V1FWN3g0ckx2aEczVjdiaGQrSWJZcVJuTDFDWEdIdGY5d0N6RWRYUlZIZStuZGIwWTh4Q2xzOWxNU1F3elpscFVkWEZ5L3ZGQVY3ZllHMnc2NStBbll5WHpiWnNzUnFiNzRlT2xxYWFHaVhzY285c1g3aWFqU1pDZFg3OXBmQnc4QUhsL1RkN0ZJbXUwSGx3MytqNWhkVXppTk5lOFQ0cFRWemEwdW5RMEZsdXRGa3owTlU4elFwZFNBSkNHVERHbmlnbndOQTI5TElXcTdiL0lpZ292U0M4Qk8wcWxjUWoyNVNQaGwrbGpFc3NsZ3VGbkkxM3c4VkdwMW1aRTZPZ1hJRmxva01nMzJ0N0o4Y0pjUXpCSE1UaXRkWE9UY3d5WE81SVF6d05nb0FMbXNWUU02NGhQTzd3b1A0NG01QzJMdEFUNU1sOUpWZkF0UThBVmFKd203VkppbHVEbmhkZGFtbU1vaXlyR1k0YkI2NElENUpRejVNYXp6Nm5nejFibVc0TCtPYzlWdjE5N2VqQnNFY3FmRHg4MzVOZEk2QmpkbU1KK1V3NURKWjgxK1RoQUQ3TnlnSGxMVTVXRTJ6bnhPcGU3bVRaYVl5UWlnL3ZRNjNmTituelV5MldzQkNjUTUrMWp1dDhoSnVjc0Y2a1ZrQkZrSjVqWi8weS9mWTZwWkJUYmQzNjZzaXRaSHZkcHV0KzBsSzBROE5SYWtzd041Zmd1ZkQ5Sk41QldUUmFQSkNDVWpjeU84RnZOTG10UDAyWGhWM3FhVVd2V28xajF2cXBaQm1tSFkyQk1FSFIwU2F3Z2luMzJlcEJpbVppeW41aXpseTJBUUxTczFUbFYvUnhUbmlmT3hyVUtGcVpFRjVXWXZHcjFGWFlCb1VwNmV1aElaazkyVnhNU3JvQlMrZ253Zng5aGpIV3RJcUlXSTNLbkxWRUY1WXQ3SjhmblhxOXlOd0ZqdE0rN3NFcjg1K3lYTjhyWXBpSHp4YVZrNDVHUWxrKytzZkhYZktzRk9BUXplZ2hUQjZFM0R5dHZVQ3NxS0xZTGtweWRueEpqVitIUFhPQXRzWmFTRjVCRWtxcFNSbmxxZDRjanJuaGI3QWRLa1crYXpScGcwcVM5eHgxdU9BL0Z3bVE2ZjF1UFNHWXR2eWw5Q0ViSUdweHp4YVV2ZDY5MDdmT0Frek1QeTc5cmFwMkEwNWFobkMxU2FvT2FKWGY2Tm9hallsVyt6NFZQWmpwVXJKMEYycDlNV24zTVNpSS9VUW5GMjBJNjh0RXFoY2RqUDJldXZIVjVKWXNsdmRIUVprSEZEalpaVzY2aTFoUHQxL0RabjkrR1lHMStEcXM0OWFRSEZIZ2MzUW5mWjA0d3FMOTJGMWwwSkp6bFVtaGxtN3NvL1pTMkQzSmJYQ2t1TXVSeEZTSUxPNjlRRWJJdEUwUHN2MnFkeXVqOGNWaWplRmFJU2l1KzA1em10TDIwckhVL0xvNm5ZeWhoaWJhMjlqeEZ2dVlxZ2xzMkV2VzlBQkFWcUlYNTBqZGVGcDJUY0plakEzOVMrNloyQy9FNlQyaXN4cTNmNG1NUFV0c0ltNDJZblA4YlFKMlFSM1loWE9vSjJNMk4weUp0Z3pYcnc4SzBBNmxHV2RmUDdyeFF3SCtBSVBzUHdIakZQUld5eGY2ZnZCczV2djFoVmZmcmVNb2tqSUhmZFhGL0RMMUpwc29BNGdPcjN2T25uWS84a0prc2ZlRm5nTmFMYXY2aHpaT3F5WENMMU1tYWRIa0lEdU9LcHlPU3paZGRmRVZTajNHY2JjaENuVWxkek8zTWpKZ1VlVXNzc3ZlSzc5M1RyU2dLYTd2VmFFMmdDTTgxRlVUZDlYb2R1VVY1WEFiS1FOVkZLTmtJbzlNUDdaRGZldnZZdUV1RnhUTE1BaTdoN21zVmdjRFJVWld0NWdJYVZpWHNUNkpnL1IvMUM0ZG82UlI5eDJFMmlFeFBsaWxhK0hyQVFCK1FwZHNHVEZUeURjWE55TTFxU2l6TWltWmFJTUd2OGwwSVIyK21RQW5uZnlkWFdlRktLNEZpcmdtVjVJQU9sT1cxcXoyR3ZQSjFISFkxL2lpWnRMeFUzQ1lwem9VLzExTzAwL1prOTRCOE1vV1Rmd0VWakFXUkE2cVdQOHByYkQ0K3dFa3pvVXJTRWZ5K1A4L0tnYWU3L09LL3VmOVJVZVFjeFY5NklMdXIrTVRxVS9vbTJLNCtKcVJPeWtDdXZvTytWeTZGdDNYelJlVXdGamtJR0pwSXRJYmJTYWpjK3dVZm8rSVBjWnhzQUQzLzBFemlNK2IrWWxndEM4eEdIU1NLQ0hRUUVyQTUzVEdKQjl3clZWUE1RbnczVGhYN2JBNEp6UGV3NUJvMGJ4SHQwK3RUV2c1QkpjeFFJUTJhQTJWSW1ldUFJZWxTSFlTQ0ZqM05VY2hCd1gvTkJPYy9YY2wvdzhEQnR0QWQrTzVNY0ZRN1VCTGFmcVFXYzNQekhjNWNkZW5vN3NUQWFiKy91VlRmb25jUEVwYlRlR3lPWkdpN2lIbGwwUStXKzBoY0t2ZHVzQWwwdzMxeDhDVnJEZzQ1bVlzRzJFVUhuL1k1TWl0WW5hWWFPQkFhSlZPUEwxQ0JCNHFpMWpkeklrV0g5RFVoSkJ4L0ZyeFNwSWM5UXdBSmZCT0hYamhOd0FWKzlYbzJiMjJmZXhkeUpsa0duMS8xZ1lwR0oyZWhuRkxZMzREMk16dFNNSzJycVZ2dU1UOWV2N1JvOTZvcUZneWEyUHQrVTZ2M3NJbm5QSVM4dFBmUmE5N2NLZGtUUWl5Y0RIMkRBVUVnMzRROERZRzlrREJwWTVibGhyZEN3TGF2SmV4TDlsczJtcWdOZVJYTkQ4cURlWGt1NFpVemhOS1BCMHZ6SnhzNEhYRmdaalArRW1HL2NGUm5teDZFODExRStzdWpkQ09JcUxBNGJ3QnR5bk1lU09uRWRncElMQTVCT0ZLMjBoZEdWK2JyZkNhY1BwTXB5VkZyV0xZNlpGeGM4ckhvcEhPRVlBQ3hNY0xzeDFMTmVCU2RzTzUwVmlYMjNyZ2NlWUwyajhJN1Fna2NobmxKOTNTZ1dhNS9VbzhWTjBvSTlSeERUdmVFUTlURCthN1o1OVQ2NEl3NVZyQXpLNStJdWJHT3pENm5Cbnk3NWtBZS9YVy9WdVhWU2t6NERReW1vbk1ZQVRQL0VmbVNHdEgxR0ZwbE9KVkgzYkRkUkJhcTM5WGZpNVZQUnFLQzVTQ1ZTVHNKVXZPcEFvRWM1WFBuQnpCY1lIM1FDd1dhdXU4a1ZHQzNlZys0eDYyVVJ5c1hKRnFRajEvS1Y2dWgxdlFiVExLVnNXVzJCY0dWSVM1WVY4Vy90eHlWTmhnV3NkZTNpdWlJeDBWOFVOU3crV0lmK2ZhYUxlcElRQlBzQmtMakJGaTJoNXFDanBBNHU4bFFheUNYTXJiR2dwUkExSE5adEVYZk95R0dSM3Rrb2FCZll3bEM0V21xdEJSQklpcDBTdXhTZDZHUTJQUmw5WXBuU1ROMVNYSDRVYS9vcDRPQ3UvSyttaERQczNCdzVMQ1VkL0I0VU5meWkwMVBCUEQ5K2VNTEIxNU9ZSVBRdy9jbHBzcGRLcEdRNUtUZFZvNzJHNEVTdzBDK2VDNlFHdlVBRis5UCs1TmlKYnJVMloxK1NMSWJpb2VIZE1DT0Z6R3dFL1dMZVFOc010RE5uREhLanBseGFZcHQ3L2wyM2ZEMzJZY0dTVVJwa1EyZGFkeWRxdnJ5VkppMWFQSG1rWWhlUWl4bnZ3VHQ2REdHUUg3emdHVjVUak9rRlZQUzFwTyt0QUd1RUV2WllERFZ6SThpSFA5TjNxVmRyemY2Zm9nTVhyL1BPMllhMlNyUzBwVVZqMkpTK08yNS9pV0NIOGVwTUhwRVI5Q3kvbHN0M2FqOHh0UUhSc2JQZEs5TmdBbk52TUtqdzFRNkRuaEdQVXVSWDkwbjViVmh1SDE5elFGSGhBNjl2cjFDRnJiN1ZCenp1ZDBNMXBDRGtONThYZEpXSUhiN205ckVtaWVUK0JVWVJxNWdnSkR3N1ZWWUI1U1pOL2pNZHEwUUZza0J0Z2lpZVNkUGxrT3NGRHQzdUhOV3NKdXNrSFM5bkQxZWZJNURJZ29BMnVFTGZKRmtpMFIvczhURitNZFRveUo1dkdFQ3VrNzYrOTdvN2FkOWdjeVJYNTF6MGR4RUVwMzhFYzJvRVhYYS9wQ1BPQ0xwNFZTVncwdUEvTXd3N0E0ZjR0aVFYRGhaTC9iZnFIVjdRT0JsK3RzV1RHOE1aODRtSWdsRGg2K2kzOGxwcVljNFd4bzZUanZkUnlnY3hhVzBOVklzL0RzRENSQTROenUrUVVYK3g4N1hUb2ZXZlcxSncyckE3OFRaaFZIMUh5NDdYQyt4OUdYK2VRTlRpRXZkS0lORUhCVU9tcDFNUVhqWjZCR2J5SUhaVjc0cFloSGFzb1NwU2Q2N1JUdmkxNHBaTGNvYSsrYnZacjFvdzZwZ2kyWmM1UmxvbHdFMTNJdE1PWVBudk8yNTN5dGQrS1ZuOVBDb0h3STRHY3hqNHJGVUV3MVZ6WDNYVkJtK29GLytBOWc5N0p2Q3k5WVNXQmFueGkwMHFPY3lsaGpDT1ZyMkJTZkZmQUdXVVJNcEVSTkFINWVMQXMvVGRJM3ZCOWdQSGJDbHFHTmF5ZlY1TVRqMlh2RU5KbzY3ZVJ3cEVGdWJZUHlPdTZDMEtTaC9qYXV3SEJkYkg3ay9DMWFoODg5aEdJcnkvbjRFRkdNZXA5ZmYzRmdZV2loUFFvWkV1UjROeXk5L3JzL0hMNi8xeFNJOUpZdFd0NnZNN3NIV2xNN2xsYTRTTzJIN3FqSTRBZkdFL3NONTZrNC9LZmkrWVNXbXpvUERrQ0huZzRoZ2dUR3JoUDQ3V1RiVVFIdnQwTzJTNVg2WGN3UXJJU1l0UlVrZXZwSTJjTFhoUDRLekc3aDQrT3Bab2x1OHZqa1Qvd3JtTEk2ZDA0ZXkrbjlZWEhaZTUreDB2UmFFYTNoY0lWZ1dZTFVnVkRRMHRVMVRvUVdJOC93dnlrbFpWcE81anBlSk9XSUpUN040T3AvREJWdlJUandvV2szU1VRaDA5RG1SdTRoeGlSQncwRU9JNXJJdUE4ODlMM3BYZ09FaTFiblJOWlVBcFJJN2g3Qm8zYWVPODhYZDM5TDNMREtJclc0b0V2aU00d3ZvM1d6R1p6UlBXYXdnQlFhNGFTSlJHeEZyRENuOFhsUjZFQk9zcC8wNFpsVnBKTC9nYThaNGJrNTF6ZStCbWJKUTNWMVR5WHVKUGZwTTFQZkw1aFpqc01MU3UvVmlkU1E4VW5nTUhtQ2R6Z21HYnJPaUVZcnd4NjZCUEZVUHF4VmFIWkNRVFR3UVZDNnNldE9udjcrY0MwTUswdGFNUGxuZEFMZXRSU2VzV2UxQVRVNWJrbmw2S3FFUWc0eGt0Qk5BYTdZNDloTUExSzZ0QjVkWWIvS0hPdHJoOVJHcFFWOFFRWlVFbzY4b3h5YTk3WjNNWWtUQTd6Sm0zbmNkTXhzazNrV2FJUXJOdURoOWFUcnppZzJEb3ZKZUt0RTBwUWtOSTdFZVBBQ09xWWZqbDhVYWF5Rks2LzFZSG15MDhiU0MxSUFMclp0Q2g2L0VrUktiMndScWtIOTlSL0toUUtlSzRGZzFkWlYwb3dmOUZYU3BzTVY1b1pQUnBhbVFzbWwzOHNSZmlCTGc0WTFCQy9sREh2ekFSdmxMRStuSkt3eUZPRDdpcHhKaG03SGRrald4eXlwSnV4d1hPdWFlK2VaR200NWV3SGc0TFI1M043ZGdmbUUyWUJXQ3hielRTSE1YKzVkWW16Y1hMVTZIVUkyaDY4SGlvNmhUMy8xZVN6b2JIYzZZU0ZYRk05SEtKTmtra0ltM3IrVGdLckVHSlB0bjZ6NDhSckF0bmFId3lEOTR3alNKK3RBQTZHa29hWXFZaFY5WTZDNno4YzEzNDdRZkYxZkZBQmU4WjNCaHJwak5wYmlPQmRrb1A4UjVmS2RGcDNJSzBTUzNEU2JnTDIwYVpya1doS1dVYnZramRHUTNvL0RTelZuM0lBd0NNY2xjenFrRmVEejd4SzZGOGk2V0tETVhhSW12VUwxcUZzdkN5RW5PVFJHNHRPdjJRWlZyMDZYL09SUEZqUWdkV25oVnI5SkRldVVMS2tYc1JVaHZTK2xpeTBMYURxR3A0Wjk0WnZtOGtreFpQWnB0MTlEK2I5c3ArazBLenUzaVJyUDBvMnZnNDQzeWw4NytEbTM1QzF2MTNhakhaUjhFRXkrLzArSkRoQWpFdVdMbW03ZFhQQWgrcDJmd2FHaTF0NmhEeFp2TTJ1WFVieG0ydzVUUjY3VTdGSitmUFZHYTRleFhsenhQRDdsc0RHc01WczFuMFhsV1RpTi9sRUJLdlpUSHJmMCtzU05uN3F1SUZJeXRXZVFaRERQQWlKK0ZWTi9ySmFUSnRRQ0o2VlJvOXg3YmhlekRKMWNQT1MzZVlnRnJmcWttTjBhVUQwNHFRZUtNelptT24wdmNTY0tNYVM2Q3ZlQm50OHI5MTFQWkMxTEpZOW54emNONUg1eWhPSGI0eXRYQ1dndE1hbUFvd0huK1UvOEtqMVBOSHBjWjh3QVZEMnJnRlM4bWZVUmduRStQcjMvaE5Rd0hPVm91cG5qRmlPSGVCWjVWd2pjSmFnYkkwRU4rUVM4QUx4VWpESS9EMC9GMW9ENWF6WmNVN25CdTNORU9DeTFQZkl2UUpyK2NzTnlsN05lVW1CRUtaVHJQYUJZU28rK21taEdUYjZxdVhUV1pUdC9paEh1bEEyVFd0ZmxYRDZBR1NmaVpIekgxdUFMMTBTV2FJajdxS0pQSUdVQkRWM084dTV2aEtUQkl5Z3V5V0hLdEkwSFZHTHp2cXNiZ2FIdlZqdWdFRHdUdWRPNTBmN05GTWJqN0FTZkVUSGNicTNuY1V6UFpvWTZEdjA0ZklnNmhmcnFreUxxS0hWbE9DS3cyeGlRZDcvWGhqNTVBTkFzOWQ2NE5wblV1K2Z0a1pXVEYxWVhMUlVVcHdIMkZMUkxWZW1BMWYyZlRFWUdrVTRySnkvbmtxaVg3cnp2NmJnV0pUaDg2dHAyL3hCZ3ZvYS9mM2c0UWdlbmQ3R0RDVVBNYmQwcmRnT1NqZzlQb2hNNEYrT2RxamdST3lSNjZydkMrazlZbkV3YVFZeWVJU01DczZVYkdZR0VQMWE1RlF3cmhTWGQwdk4xejlvWTkrZ24vSDlwVzMzZDd4NEl2Mk5ZbThCdHhxWTd4anRjRHZTUGJLMlFHSjBnRmlqZzVYanE3TDltbEoyZGtqTTdmMGVFaVQ1L3RILzNlaWN6MXlzb0hTc1NuRCs1dWN5WHdPYmp6c1RIeE5zWXB6WXNBbXZlVVV4WVNKaWJtRjNjZ3RrV3drMUtzT0VRZllhc1RMMlNpT2pWNnhvWTBvcDRXOW1zYy9HOERWaWZ2SHAwN0dEWElDMWFVOWMwRjRPR2NLZlFvLzQ3MEs5T2ZmWWdQK2Zhb3lTK2s2ZjJERDUyQUxURUQzNTBlajZsTHQ2NGpkdmtOaENsUWtoZ0JZK2F6U1pQa1RlNXozYXplK2IxcVhaUmRUaXEveWFPTEl1N1JpWk5zUGlYUVlzalpHTWJnSUFOZ1FuVjZpOExHQmc0TTIzQm1DbkN2S0ozeHpycUxhV3BmVERYaFJuL1RLSlR1ZlBMWmc5OVIzZnBGSmtPN2kyZzZXS1BWd0RkOU5YWktSVkNLblU0ZzVPeVBodzByWGdqUVdLOUNCcUVvMEtxYmlhdUYrNktHWXVuTUdTTUNHWng2a2Z5L3B5eW02aUFQZjJtZXBGYXlZZXdBNHVnZGNGaDlzZktMVk05UUFYRHBrc3lmdzQzM3orWGExWFpoRnNOV3F2Zk1NcGh6NnFlR3FYUWpPZ3BpM0NIQ3lUZkh6eHRzaDNnSkVGZXN5T1dNWWNkdHVoM1R6YkxlQ0RRNThncFpXZWFTS1h2eDZsTENzUjJqNFAxRjl0ZVBDc0M2N1lqdEtRQnNhRGZ3U0pSUExPN1pNTnNmRzFlbHdjUVJXKzgrMW0rM2Q1Qy80OUJDWGhtQi9vaGYzUmFrY0FRVnVkSG9jTWpEUitPTHhkeDlJbU9tUVRMTHhNWkRwVkxabG9OakhBdnIycTFIZHNkVGFBbzZ3NHZhUDFveDFXRVpSWW8vci9YRWkzSWNIVEpGVXdQcCtLby9WdHhHczN5ZnpDWGduRm0yUE1DZHpvUWVtcUtMSmVWbnRqZWhRM2VFT2xtM0EyYU1kbjluZXVEVmVPb283UEJTQXlWakVHZWpQdWY0WVNGckx3dVhubEVDU04walVqeDBRT24ya3Z4dXFzZWVmV0Z2UHQ1VGNBMGZMVjluL3ZvZmxwQWpBUk1yOGxTdWZrT0RPT3BJcWZaUmhtUFY5YTcwYUxEQlFneHhHai9mMDBTSXNnUjJLWjM1ZUZJNDVFOHc4K0tBOHh4cGE1ODZpM25VZGJ5c2c3eThFZENlUW9sZVo2QnFDV05TYzRFY0h2QVIxUks5eGxRYjRBM3dxZW50cEVDVUE4UTBycHRPY3NMU1d1V29jUHZFRlJmR0ZDWFMvaFczRXV6dktQanFnUlZhMDVxby90VVdmczJwa2FsM085SnpiWmx0TmI0WXFUNHg0RHBSUmZRcnJXYlI1Z0VsWDBxd2huZUl6TTFPTVplT3VBKzBOc3ZNYUFYNmJacUdzU2xBNHpQSWh5R2FvQS9PYk9UUmNaV0JzOU5JQlNCbWlFTHRBNWhIS2ZDZVdJYlo2bWxIRUswN1BCUGhxd3R0VTVmWXNmUUtmYWNmQ3d6NXFzZC9PUWV4U1pkVXZRWWJ6S2VkZmhNUTJPNEtNSk80aVJ6M2IrbFo4ZzlzK2dpb2VJMEdNWWtKQjJ5Q3QydnBlRkJrbEpuY3h3STJ4bkc0VHFCNGltMEo4YS90SGxMQ2xWYkdyTGdKWkg2aDhpSFV3R0V0cFJ5VlhyUWo3MTlKUWZvRFl3Y1YzWjFMRUZrKzhkakJWa2lqSFNQUHlQVTcxUHRKVHQ2RFlJZDA5UGdoeGZURjkrMVpqelVOTEU4aHNwU3duaGN6YXZSUHFaQkJZSk02ZHVpMytaaCtYc2RjY0pBTy9iVE1pOVZ4TkNLc1dVVWQrSmZ0ZTJmV00vbDFRR1h3ajRyQWRjSmIwb0V5TmpaN2YxN2paN3B2bTg2cDlZVnNZL01EVlFPZHBSOVFLZWFVSUFuQW1EaFQ1cm9tVnBqWDZWbmt3S0NOVFdFQlZIaGxLSHptZXhUbXY5dmZXaE9sQ3FWVmRQTTFZVjRVVlJ0RW1tZ3BvVU9seDFxWGpYQUNjTDR1SURLV3pScmtVcFJDMkZtUW9FWW91YUpyeFhURHZ0bWNZTmVralZkTTA5N09UclIxWlZTVXlady9aRkhXeDgxR2xuN090SlN0NVFPN2NvZzREeE5FRksyMm5oYldZWlRvcjh4dTJycmk4aExpMGtuZmJRMkI2ZFdLWndpQlZ2VWhNZ1dCakRzQUw4STZNOVpGbmw4Y1BZMk52dnMvUVphUWlZN3N6NTNlM1dod2xVblR0Z2JaZ01LZEVCeUtsUUVGYjZFM1JZQVhlb3BCU2wwNG9oMW9yOVB6QjJCR1RsekUvdUY2ZktndGlzeVY4WERobFRQUk14bEwwVmZhTlNreW1JYVcrK3hzME94Ym1mci9jTExCaEw1OEo3Q0hhcTdIa0V4cnNEN0swRVBHL2JGc0prYVA1ejArS0ZZeE1KbzY2eC80WVJNeStRWjBJWkxjTlpwc2gvNEgzRlIyWW4wWjJ6a2ZXcVYrcHl4ZnRlOURHaHBGSXBGL2lGOTV1TW1kNFk2c1Vlc3cvcU5zcjl6TmZQYTBicXNMRWZnSlJ1ZUUwd3ZOYkVDMzlUbUpvM1NhczhmWEhwVzZudjBVS25sSnFSOS9aNWNRbXp6ditzWFlNVnpxRzVXeWJRQkdzcmdzVjlhbXBsQVFFSmtORGFlWlVyMnN4cmxKc00renJZeUUwMVdZL0ppZjJUa1hyTmN5THYra3c0SGlGNEt1REpBd2gvQlp1cnNZeVVPZnlMM2xrMDg3cFIzVFJZN045MHBoa1VGdnBWVFVkVlN5ekZUcFVDUUM1TU5TZWpMQ09qMW42NkVyOEF4YUJJWWdLNjlPZ1FxVC84ZVo0NWJkS3dCcm9sRXNzaUZNWktscGVxV0VkSk82T2RxUzd6ZTNqSndxZmYraHFwQ0E0MTV6ZnZ4cmpMdUR2aVcveVIzV3FnZXUvVU94U0hZWmY4dXBodTJwUE1wZWRkK3p3bVdpMlB6V201MndON0FubXZldHFoZEdIMFp1MlQ5clY0ZXIzTkZqMG5qQXBOVElxZnpveG03dkFDcURNa2FwcExYblpsdUltMURkK3hTRVNZU0N3YzFHalhLNHB4UDgyaUt6cFYrb3V1dlZJSXpvWjZRbmhhb3VTRkFIMlVHNzZYUkhLM0JsMytLV0RLMmNUTHR5WnFIQXZxaWtDVzJOUDhPMkF6L1MrSlE4NE95L0pjVXk1UG9OK0o1NmpMS1gzaVJtVjhiT3BZNHZKN0lPbitBWkcvNjNTV3puazU2KzBmNkpEeHJDT2thUlNVck1GT2hleVJaR1Y5STlZaXZ4d2xma0d1ek9yZW9YUUhiNDROMWFNNWVBNjNsK1RqQWxWNUcvdGRFTHhlMWdobDhPMzRWTnE1bmdJTHQ5ekJWVHJMSFBjL1pZSWJlcEFmaWdjamFFRllDcmdBNDlpOUlDZHFGUFg1dCt2S0lWbHBDTUpBUkl6K0NwcFlLWG9KOWovOFhFVXAzKzNWVG5Na0E3S25IcW94MjdCbEptNlVhbStFYm00aTRDQWpqMlZTRE1kV3lxa0p3dTlURDRUUDU5VzR0L1ZUZFJjVWltSEtzbnE4TmEvZ0FkejVmWHNoYUx3dUxJSTdZOTZHMWdwWnBMU2FFdTZrZTFBTGxEM1ZOMjlPNUV5MWxSOWswR2ZlZWtkWWtXd1BULzRoanJtSjN4Ri9pNlR4d2RoSkJaUDRYaUhBelBOMEZ3Mm4vR2dtTTd6cjJCTVZQNVVKcTJHSlptZUExUmlXZi9wektUdCtPOVpZNnRwNmg2TU04Z05SZ3hRZGFKaGtKTmZYNHV0MUc1dlVJVFV4OTNkSzZ5M0FZcSs0bkJwV01tVHlxQldGSUlxQzd6dEF1OW54OEJ4US9hVyszTVFIR2RyR3QyRUNsOW5BZ1ZVWVRrSXdXWGxEQXR5ZVpweFcrTkwyOEtBNWpTY3JLbUdBRUZ4UXRqdGViUVZwQmlQcVcwYitOaFBGdUZJdzJZQkFsWEdXZFNJN3ZVOFZySWw0MUo3eUU5bFNTK2dDaS9GMHFQaWVXK29jSngrUGtGWE0vT3JCOTFOQUE5YmpqNjBlcHBweVRRRzQya2FJTlViL1lsZmptdSt2TC94RVdtSXlRWTFKdHlzZkUwdnAyV285WEl0eWFBZDhKZkNpS1JOOFlFRWdxUlhEblNhMmJ5YXF6Nlk2SlNDc2luRHdwMVJYbGFnekpoOTY5ZFNYb3h1aCszNXlvTlpQeEdodFp3Q2Mzd3dWZE43MXYra0pCL0twYm1BUTZxOHBqVXQwOUUremhWWU9OZWZwNnl5aUdXUzVJVTc1WStvT00wUWM5SCtNc1EwaEFVNTVaOUs0VUdRTzd6NDJyUjJpemYrZFFkb2JDc3FjRWhhcXZwemprNG1HQ1ZrN3daM3UyM3RrUXFhTzlVY042WSs1N3Y0ME1wZDliTk50N0JNMDNkM2ZtWTJCSTRCdTM0SDkxcWxlQi9aeVVIVWxoRWpubU9SZFVtaWpvNmh1a3JsY0djUWNDN1FzLzllcmVRZzNtWSs2YXpzcU15aXcrTTJJL200aHBGMU55R1Y2VGM1dUlwVkcvczN6OFNxSWJseGVKclNjOTI0NkhUcGFPMEVFRGdRSnFPZFpEUmt2VUZnVTgwdzVRdVRCSWFGeW1SNS8vZUVCSkIvME82MHJmcXBCclZLSHlYY3VGWk8ydXFTMnYrTHFOYThaZ2ZxYnRWOWJ1SlJXSnlrTzczWGFYbHU3L1Byek14V0d5bE5PR3YxN2RleUc0dUwrbG53M3NNazZPS0JYR3VUY2hCcWFIL2NIcXE1NkZaY3hheVJDVjJQOEl6cVJUUGtuTSttYXBmTTRsU1lsRUlRMk5pNmYwQisrQkY0bzhlQnB4VXExSXZaaXRJclZMZnZNaVdIL3R1dVBoRlFlOFNIYlM4c2hlMmQ2cTFXRUtpYk9MSllzUjE2eTR0eVNJQUNNQmJJRU5Yb0t4R1lFWnpIZEtOeVFUS1BrdHJqRE05Yk9vWUw4RVlOYUdiMzFocEtZc1FzQ2pUY2crbThRVEpueWJsUG9rT05Wc3hzcEpNMDZJZ3VZcHJQbDhYdWdScW9SREdGeE4rSGJiODN1YmtIYmNVWjhuRmtTNUpvcDBYY1BqRDFJaTB2VDUrakI3Q2pIQTBOc0NxL0pyN0ZrNlRaTUhreUY3N3dxVS9BOFlkbjBHTFcxWWc4WUVPUEFFdGR5a0xpSWJKQjZ0UGVlVVZrU3dTQ3N3QnZTY0dkYk1tSW1lbnE1MHE2M3BkK2ZTc2lidlgyd1ZKUU1neDhSYUZpYWoxcGlHYUxDS0Yyb3BiR2FTbmkzQnlVaFlnNncyV0U1cWZVaUJ6OHpBeXlMTjJJbWs4L2xZZzNWK1JxY2YxL0p1UHZWL0tsd2g1a0JBbUxUWjBycFVEZExKNlNDS3JvTEJOQ2VmQzJXdW9CSCtFSDVhOEExREdxZERsaDZEdG01dHhTQkZvUkNCdElLRUJIY29zN3lWNzVoSEE1dzBpUXIrNFdiejl4NHhwQkZQNFlmWERvV2FRQTdrQk1oaWtFckxCVVR5UTFlTVZNQzVJNnV0aWNPUHVYVW0waWlJUzJRaVU0WGlSVXFxRmJaR1JybU1iWnBXSDhXQWQyZldmdWVWRDRzcWxkMFRoa096SWtoc3QreS83S1owaWVzWkJrN0ZhNVA2dk5jSnkydDVpK2N3cXlKUXpVYTMzRUlnMEVzSDRQRXIycVdqNHk1MTRWRlVqQnlJSVpWZWc0SE9qS1N0VUNsWlhmakppZTFDSUZPN0ljbDFEcWcrNEhjT3BZbDdMSUt0OGtuazJLeHM5ZFdReDJSS0lpWTlxQlpkN3BoQklrNnBGb3VoekZBeXpPbkZsSEErblR4ZElKeUZlZW5ETDgvVmtjS1JhWlgvQnpMMDI2eU94dStEdHJmVjQ1bG1zTG9ob3VHS0tia3FyYXRDWmk4NlpFa3BpYkQ5TVU3Znh5Nk9ucllxVlVxTDg0dkVQM1FXU1ArSUtRbjc4alcvRzJjNTduTnFUVVZ3WHNWY3YzcXYvWitKY1dHTmE4SW93K3Vpc1BTSEdDTGI4cGQ4ZDlFa2VzLzJqanJqYlA0WmVnc0RLazU0SE95QzhvaDBpdG42L2xpKys3WmNkOVpVRGpxZ0dwUGVDRnNlT3c0cjV6SVFMbWxqSndpenVpQmpuK0RnVTVwYjBOYWdPSDFVdW1pL3dKbWJqZjVzaFM4OTluUkNsOFF2OUhjZjNWbEJJSHFNVUo0OHFGcVBDcW1leGkwQWdJTVFEeWlFSGN2ajZWUWJqRG0zeUJ6dU9nV0hUZUhLQVdTSVo4ZTFPdkNIdmRhVnpPbFBIR2dnNE5KTGVKRjY0MkNtL3p5RWVwZ2VERVIyeDZRQXQ0WWZOdTh5djF4bjdVcDBSczZBaitnRXJHeFVldy9scy9EaGpmWExqcTVJOHZ0cXo0UTdWbW5VVVJaOVU5cElPWnZNMW5DQ3luaC9MdU9nNVlMTldabVBtajZvSEpUZVpiZjhyN01OWVJyMzJYY3JFUHFUNjVOMlVBVnZkRFRwSjBySGV2b1hqYVozcWgweXhMTVB3MG54RVFqV2dvS1Fla0pzdDI0TFRpZzg3TGFDZHEyUzVadzFqQmxnOHgzcDFOVld3V0lLa01mbEFvQ3Vib3hEdHdSWENkaThwNUc4SURKTzRObTJxc3RnUGZjMG52T3plNlNCakZRUllxMGpuaTR5TVlNMmJOaHgvT0FOY0FZYmplWkxVek1QQk9Pby9NdkNjN0JuTUVDZ0FXbjR0SVJGdEY4MHVncENvdDl6b3BVSVpCU2VPNWFvalBrMnJDd0JLdW01cWZFZFhNekI5TU5zTUU1MWJDS0x6U3lEWjVpRHIzTGxTc3hUenAzZWNZcW4venNzUlBGVnBsYmVDU05YR29CZGRvOCszVUxJQS85Mm9Mdm4vbEhUdk5uYzlaaTVrM1JMWmo2empGUG9jNkdLZkxWRHo4VFJyY3JDUWM0SWQxRThyOUVxTzRMaWRwdEg4L29ubnQ3L0JzM3pIZ2lyMGptNkZWUkMzWTVFcFhqYUF4YkhkUlFuYTZrVTJpTmVTNWd5U0Y3QXF0OENjU1dNanRqL0xmSk1QTHBCZ2FoSGRIUmw0c1Q0L2JMK2w5YTlGUmxEc0pnS3VIeVZ2b1VldUEyaWQ3bmt1STBCT1JwTStlN1IybExLUnU2ZEkxTnFLT3FVUUZYQmFsb2NkRHBNOXhaaVB0eVBJd0RZa2E4M01FcFNsajhLWDllS2llMmlWMHBUd2RGNVhOT04xWVVJc091dkIydEN3UVNtengwUFFuMGlQSG04UjJKSHd0KzYxL1U2dUQxRktucXhxdGttN3g1ajAxZkJibTIwUTZCSFQxZC9LMWl3dWR5N1JBd1NENHIzd1BDR0FCZW8rTnQ1dGRLcis5cGEyVk5GZmZLV0lidGZhRnJtQzNGVDZMb05DSzJDbFFLbmlYRzZTMUFDUUh4dWlza3RhSUcycEIzUjhkZWVNL09mM01GYlpDeHAxa2p5Zzd1Zm9PUnh1ZEJIS3krNlZQc1VsQzljdE5mdEJEaFJnOEQ1TTVKS0tHWXFURjJRVFhDZ3FBY3AxTTM1ZXdKaFIxanNTWXBPQjk5ZjZwa1A5TUs0K1pKSEp1T3NZNW5PUTBQVi9DVkFORFR6Yy9vZk11ajVIQllOVk5aOXRPL0txRCtwNXMzL01nOUJnTEJQTVlGNWNxTkVSMFpxOUlSbE5QTUk3bUNLcXowWFMySWlNVjBsY3JCVlpyWnhqZXhSSEtZQmxxOUZYeGh2b1J3TnN2UXJJV0FuV1I3akQzQTZBSklOY1BIM05FY2NEQTY3SnVnY2ZCM2tYdGU2aDFsc3lON2ROKzVCRGZhbVNuMVBJM0FWeFc2c0JnVWdJNG0xb2hRNFVrV1ArSUJURWh6NXR4WS9jeFZjVW84WVErT05welQyUzk3VDgwYUZvWnpqV2pDL2Vld3NxbzExMkE2K1l2QldYdGc4UnVTUEZ4SUNXa2ZmMXFTeFArb2FnWEVpWTVreDJBWDlENVAzMGpRMHNocGJKc2xyNUIrRkRPQmJxcm9JdTY3MTQ0WkpZdXpaN1dveE53Vi95UGRsaWJ4ejZHTzNkektVVnVDTDVCbFVJUmoyQ0RmNzZyUWNkOUVsWUtvWmJmOVJ6UWg3bC9KM1hDRVNWaE1iMW83V1BTakNKYzVNbldzdlhTbGNuZ0VCakZ3MFAzbVNsNnNHYnFWcmFnWHczOXVtbkxOblYzTWU1UG1GOW8wWWNsL0VTSjFucHdHM3Vka20zcHl6d3BjNFkwaWZva2NBc0xGTTdrUXppRTFNNHVNMFhjSTVheTVCekorUDRRRGJlOUMrTm5vTVZiZldFc2tDaUJnNlpUdi9aWHBIeElMZElZMjdSV080T0xYWU1lWXB1Nmt4RGJ3dEZiWUNJRWJlUFgvTkZpV0o1VmJKbTlRa24zY0tKRUpqb0RmNEcwaUE5YlNPcWdTaEl1WUgrZzhDSnRReGRtUGJnaEdmOUJIeVRDTWUwa2d3T1JVMy9JYVJDZGRPMlFocDNMV2RFT2VWY05tdzFZOXhQOFZlUGVMK1RXSS9zL1JmN3hrTW8yNjJYWVNGUFJkQmU0UlNFLzZiUStXV24vcnU1K2t6Q21hNjR3VlJhSEYxN1FCelJocEMwK3dnRmZLcFZHaXBWMTFoQmRSZ2xMdnBFdnlMOVBvN0tuRDlWaUdxSk9sdWh5enhDNkgxeEhDYVlWbzMzNFhyRnlXQzNXcnJYdVQ5OHZTUGNiNjhrM1l3SnB1YTlLODg2bDhiN2JPcEpuM3N5aWE4VnVwQldycXZDa2NrcDcvYVRlUVhQK1lNQjNWbFdmTEVRV2EyekIwZFdVUVRydDlCODZucjE0ZStEcUI2bEJmL2FFeExhTmZlQVlYaE9UWk9QWGlXYzdvVW5Rck14RTR0Y28xa3AwNW8wemI1SUdJK2w3SG1xbTYwNFZpYkJSL2dva094NWt0dkZPMG5PUXYxMXI3MGxyS3prOXVxUlFRSDBGLzI1NEZyVUxRUWpXbHBVa3RjaEdGbkZsVmtONVZsQ0pDMzJFSEUyOXBjQVc0T01ncHZoWHlKQ1BRYm9XL1B0ZUNYNmpIT09mOUIxL1M0M202d1ZZUGFlNzM2QUlxS1dCbU13blBSaUhrOG5Ed1NvV0krVDVMaHN2TkRCRnJpTkJOUFJISVRmQm5QZ2ozMXRrSVNTTldWOGFjN3A0V2R2VmxlYVU5Nm5zN1dXVHNoSktjYWZpakZMcEt2TURuSjM0UE9qWDR3NEhwV0tCZDJvdWxkL2J1Z001dFVxaE03djRmdVJtbzBVcjRyNEc0eUVKQkV4bmNHTDU0VGlJQTJxOFRUbEI2dEMyM2RjZUtramp4RmdZdjNKcE1lTUdRUHV3NzE2T1NxNVFYZG1HUWxuU0pqVXhGVks3ZzFyLzFEbjMxTG5pVkZHMEhBTEgrL0tQU1NiSWRtenY3Wktvb29SK0xtSGRSRGlBdzNFc3RNdXd4VVpnSDlRRnF5bW5oelFsRVM0L00zT3JGanVvd2hrRXdqVENvd0NvY1ZEa0FCQit6MjVqSUdROUpQZkZoTEkwNmhLQWNvMFc3MUZLRlZDaS9pOGpnRDU0aE04a2tycTg3L0trRzJCQUNjb01CUEpHSngwL3c2ell2eS9MeE9MNHJlOFl3N2Y5YmhvUk5YR3kyMnM2QXZEZUMxZTJ6SDczb05XMUQzUTdaODJWVlFwWjdHM2pLQWRjL1ByVVFGNmtVYVB2Sm9RejBoWmRNTDU3aWxtVWordmN4UUkwOHZFblZ3U3B5Wjl5SjBFTkhwMWN3SmFxN2hCRTJRN0NIQVlqQkd0b3dkVFd4dEl5N0RjTlMzVFNJdnBLc1JGV2NtYnovOUdLQ1pWY3NMTGNEUXM3WEp1Y2V5bnR4WW95YUNIN0IrYS8yVjB1RlAzTm9lQ2RVNFFsWDFmYmZ2SDVyRlJiV0k2STFGRERDNWFjalFIUURmUnV4VnF1WFlIN2dWUWpVVVBITUxRYVUrUVplSjBXcHAzOERtV3JscXVOQ1NoT05YTEl4bjRIRjNXTTA2NWJoMkpQTFoxbC9oMzg1T1A2MXRwb1FRd0tFOHltZW5mVE9YMWtJM1Y4d2xEZVMzU21sTWoxaXNQblowaldZS3F3Tnh5bGYxdUFUcmZtUjl0L3hUaVNNdlRSUWhQcnZkY01zYVFGQkdKbmJ6eHdYcFVibnQ3WUNrWVNXWkczM0R2SEs1WExIOVNhYW50NlJacTc0c2owN2xER1grb2ZuVEpJMTZNalVxbjhNSVFmRXNMTEs4YmF6RTBvZTA0WnVITHVDcDFzempTaTZHWEZpTStRTGNMWnZhTkc3eit4VHBOM21sOGIxOHRwZ0c5aVphT1pBeEF4UFRuVHpHbzc5aVNhMjkxdHFyaEd3c2tBNGt5cGUvOG1kdUNHS2JwdGhYR2dSOUpuS0tpeDVCWDNZU2FsdEFhWW1Kc04yMmFOVDFBOEVZL1YzeFp2MXVNc2cyN2RJa0NJb25rTEg2K0JYSEtPYVMvU2JZZW9rUG1va2JHZythcXBHcnBSaDN1R1dUREJ6ejBJOTR3NHovV1RiN1RMN3ZpZXVpVER3YjZwbEUzRVBvc0lMZ3ZmNXJSd09senNycXJRa0F4UW9lbDdzbmJKWnl6NjR3dW0zZXZmS0xEc3VnTWpjV01NOTIySGZ2d0VKOGRTZTZTVnArRlphZjhDSHZTYzNTUTFacGlEN2kyUHJjVFNjZUwxYTdpaVZvUmJ5YVNnMUFoV2lqaG1sYkNONzJRYnB2b3BLdERzUUZZWW56V1psR3dPckQ4WVZCekNtcHNuYjBHVjE5NzBTTHR5aXpCdUo0Y09yYjJRdWw5WTMvS0RFL1B4OWk0ZW1vbmZZTGtDMEF5YlZxT3dROS9KL2ZFQTBjTmZLQ2xiSFVOTTRNdktmalBpcWxMTERIOE1wcm9nMGY5WTV4dndsVHlUR2liZ1BLSUt4TlkvcFd2bC9wUXp4VlpYMjFEalNwd2RtaU1TaEt0bWFHVm1IdUxGVndRcGFzcDQveWd6OUhrUUMxZGNsTVdlUU13Y0FwU2Y5c3JXRUdPMzgzMmczb1c1bHNnVUhvaFlzMUpsSjJRYmJZWkpuRnV5K3Q2WTU4djNEbDNNRU9CazVkSmplSjdZYlRNVTZXcjQ1a0hIS3lSSnRQZ1VWUk8xRkwyREdTR2kvSkRXTUYyMERWNlYrY2pQWTVsMVErZStHRjh4dUorbVRGMEVKaTJCYit2Z1UwdEtmaGFaMHNZQmFaR1NFMS8ySEl1YnJEVE9ZeDN4TEwvUVdKNVhjdUY3VGtud2UwVE4zV3BRK2h3cXpvZUlFNCs0aUd4WWMxK2tXYWlCTzE5VEF5WkUxV28yRm1OMHZ0NFJhUTh4bWYvT01mZ1c2SGowZmNLa1RWQUgvWWo5WGdMM3RRcHlFUXg5OU81TVI4WHM4KzB5UDF5Yko3TStxalBRbElpRUh2V3BQaHBYRG44TDlvQXlrZ1ZCMkNOUU1taSsycUY3UUgwUzVRRWZLT2t6MWorM1FkeFVLc01MN0F0WjVtdzNnRnpMVWVPQ0J2TEhEWUd1UGhuc1FnTlhoZmJhcTF4Q3RScWNjSlE4aURsN2ZqWjYyaFlpVVg2bXB5VWdndCtNUXF0K2tYNk1BQTE5SnhBNVBRQjcxeG1DMEpRMTFRZGV3ODRzSlROTUZtcnJhZnJwaTlQU0pnYjgxU3Y0WVZQSU5JRkNaYXY2elo5TU1lUXgrUi9QdkNpVHoyeVZLZmpoYjRvOUxFSEJvZ2RaSlkyenp4VTV6b1YyeTRmNkM2ampkLzdYN2VpeERwR01vKzR4MDFIUGZWQ2hRLy90RXNIUEZxbXhua2FEZGpQVnFnZG5xdUpWTGVWbXBSYzBXcVg0M09XZU5zZVlmaDlxdVZveHVLTFY5V2NxOE15TjB3VmRmUy8zQ24rM1Bid1VobFlYdVprSUJqd1RZeVZjdlBCdkxwQ1ZXd1F4TEYyTzVqU3ZqWEtQdlVQT0pkVldlZWhzL1BWRERTbTVZVmtRMUVGbGVvWDZDanF3YVZ3bFo3ZlY3Y2ZNb3NleHVNSWloNkhwZm4yb0FRK2h5TCtaWVFOYXI2WmgxRGpjY0RNVHFoUlkxZFl2eW1Ndjg5dWs3a0tFNDRqVllST2U0VDVrWU5CSEFPbldBaTF0OGw2OXBFUnZHcVJzVmd2blU0N2UzQ2lqSEdRTUhSRFRqbERZS0NCbFZVajR0TDM4aEE0T05yUE10UXdYc2htTzI1QmhtQ3BZUWE2UlZRS0s2OGdRaVk5bmd5NlJNSzB0elk0Vys2UWYwK1orTkpNSnZRSmMyQjltNE50ZUNwc1RDWkZKVi9aRW9INlhDbFZ4RmVINlJaRzNGOGh2cDJycytNa0lFOHJ1KzE3UXU0R2p6dTYySFlCcFhTMkYvNWZreHZVWG5WZlF5ZnRjVlAzL21iV1B5ejF0QTNyb1dzdmJUWmpoZXg5NTBZd0NtUUVrVUx6U24zUDhnR2haVnZyRm0rYzAzTWhXUmw0YUptbGNHSVlPUnduSWlXOHZIcEFuTVFUWTdub0RIZ3g4Tk02VW1FR1Z0dDdnWS90bTZORzNOQ1Nna00wSUNGQjJxYk9BWURNbGdSSGNCNnIySWdKSTRXbVhrRERmdE1UM0s4M3VVQThtNjVOakoxUktLYy9MK290RndvL1lPakxReHNYc1RxeGFkT3BDTkVhZW5ZVE9jRDNUNDkyUTU3bG16Z24wUVYwcXJPRTh1ZWRWdE9ZOTBENUYyRlp6bTZDVXVkWVIwdWlPdFp2czNHcVkvQ0xFcjdsUWJRMDJJTWNwRXhnc0oxQ25ybnk0TlhJM2pYUWc4aFhhS2dHTm1BMVpRNFdsaFNBT3A1bkc3QkppN0l0ZUxjb0w0eGZKY0trRjJ5aTRJRmFKK2Ftb3ZSYTNNdXVMUzljN09xd2pEQWs1V29hMTBGR0xmNi9uWTVsZ01Gd1pieVB3ZTdnVXFEOWViMEtyWXcrdEhtOGIwMlJFNGlUYS9rU21EU0l0alVJcVlDanNZUkI0b2xMR09mWFFWS2xhQndhYWxuTkIyZ1ZRMFozc0R5d3A3UWpGMmpuZVBoUENXRTV1Rmx2dTJMTC9CaEJlRzI2a0JlWEljMW94djlRRnV2TjJHaG9WM2xmd1VQQkszRTY1Yld2Y0hFZk1taEFxZzhDVkJjT0g5UEkxOEtnUjBkRFFqZUp3b2E2QllMWjhRc1VSOEJ4eXZwb3hpSnYxaFJjWlgyU2FNK0FpYVNKekg5UnhXMi94NUxvVGpYSGlUZm1EVnZvZFM3dXhlWjRldXdzQ1BQNGdQN01HdDkxZ1hvd0x1dy9PYzh6SmhXOE1CUlBFNkZnS1Uzbk5XdFBIdmY3NTdwM2grRDJiK3FVWmtvdm1uQ3RNRDRzMXgyMWs4clhjaVFwbFBMT3hHOGdINTIyRVN1cVZyMkYyZWlPcGM1Ui9IVjIyMmVzM1dsa1pMZmJJTlZFMnYwYXQyeExad1FYWWZKTURlRDBwV1FwQ045U2F5Y0ZVSWQ3bWNSaE8wekNnWkVGOXNDZUgvSEl1RkI2SmtDcUUwT3NpL2lock51b3RBZmY4cmhWVWs5L2xnTzRzSlpjbnljaHpiQUZLT1VZbUozZ2lXalpuRmhJUEdud0d4ckhaeHRyeHR2NlNHeEtJY01hMzE4RXMxVnFqTDZ1cnZ6RkU2a2N0L3phcU5zUnc2YVNzdS8rSWtTOG1jbk9xTzFobHNDYlVINStFcXNDRXJZYlorbTFxdHF2SlVTRWUxWVYrUCtuaEdlNVdxamlXWWwvUmNXQ3d4V3pwOGkya0tQam5Sb2hueFROaFJiQ1YzOGVSczJSeGJUb2JRekt2N2xubGlCUFZGNStSODNKSFh1S1JlbElqQThCeE80TzRGVjhta2QxMjRiSUZyZnBBaXRDWXk3QkQ0Z0pNNjdYY2luN1VIcnlwMm5tb0VaRDlVV1B5elFyM0RpMC9zaUdaenhXMWZObkR1RjhIb3JvMnVvTWhxQVVHMHJKT09YQTVyL2F1eWpvMzcwbWhkWnVnT1RTQ3dZSm1tRVVJMFhpNy8zem9WVGpFUW12MGx3djBXNHFOdnYwa0ozSmxHMmVFZy9wZTk1MllvVjNZb2JaMnRwUGxibGZXekVKYXd0VTNCY1NrUlZlOGJrcGthWVRMUmRSa3RreFM2UVlSUmNNa3ZQWDhHd0R1Ujhjb0gvV2cwdmhpNkh0SmpjTVBzbUVaVFdZU3BzTWxEY1VSOWJLU3ZubDN4Mnh6NUpBZ3ZCVXBNb05vaE51SzNtTys5d0dYY0VkT3hzVmFrRFBhb0RrTC9JTkhjN3JLQmVTdFlHc0w4RnpkMUkybXdQNFdaTk9XQktFNUJiUXVpS3BpYUdIZXhJbjludFI5R3BZaDBuTWMrNHlPaTllSElWQUJ3eTZGVE5TS0RvTVdSZTFXTTNrUWhrTStpb0JXWC9Bd2pUR0srUXBPM0wxUkdUakVkOUdLU1JPWUpUb0UwWGliczE0amJEMTM2dFlJbGdEcWtGUlI1TlZqSHovMHpUelZvRFU4ODlyaTlIeUNRWmpTV3lRRm9CSXdxc212eXdGR2c3cW1penpNTG1TTmVrb3FSNlM0dTFia3F2M1pLZVpRK1VaNHFleGhPaW9xTXlGS1dBRkNGSjA0c0dzbHJqbzNXN1FyUGdreEZldDNhenp0U1JOTkxHejQ4c0hpOE5ZR3kxei9XbEtoMFpMdnhvNmNOVHMybStFV2tVc1FWb0JCNFpoU0NxcTNJZEhHYjJPTjZtSzZwWmsrd1F6cWRNRG9FVjZjdlJiVThoMkdTVUp2N3VpSW1uU3hFdlltVmM3NFd1S3dPY0dYYXNkZ2RBMzFoTkxPdkNKOG5Wam9vTTVXODUyYkV0dHVEckwrWERaNVJnby9QZmN0bDdXS1Z3SktNZUt3SW5pYTFjRDhaRU01YXdRWjlBQjUvNzBrS3MyRW5yYTJSUlJmOVpiT2RNMmdjTjVmWlJSNzJnMjI0SzlCYTBUcEtyL1doWDd3QVRQM3Uvd3FDamJzZkhHWkZ6NWg5cWxhdy9OWjA0bnJrZDJhUGJlbFhVeEdrbGttamQ1QXNGRVJRYkI3a0dhemJKSEZ6VW1rcXZMK3VNRy9Yb2RpaElwaWFnUngxWmIvMnZaQlBudzh0bVIwU2RTekdTTDF0eWdVYWF5ZGV5NEZrYWVDYjl1c2s1QklVSkQrOEhIdU5taXlpK3ExRnFqUnJKcGRmRU9vWmhQTEVMcHRKa3VuWnYxL3JJREdzNzhMVnZCR3d4TDJVL0NsaE90dE5HOGxJOVk2cDdDMzdPdW03TE9GU1oyVitpN0t5L2JHUWYvMjNvclJqQ1hqK1ZtRk80WG4vV2JGSjZDOUZRNVRUcXQvTWZ0SGpOQm9uTEdOVXliOEdhSkJEaXJTaHFRN0NtODBEekxiaVo3em9VYXQ1K2lzeGhPRW8weFkxdlFpTW1PMkJHTHFkM1BLd3Z6RkF5eUYvSzEwWFdKMUZnS3BjVEFFbHYzSCs0TkUvMWZFQ0lmTkUyNUgrQkw4MHRtODYzbDRKZ0Z4azA5TlN4RXlzYVpKT1lkY2lKMUFPK2xQcnRWZzFvckhTdjg3U3N0VHBzN0ljcHpsbXhqQmJvMjdUUGtXZ0UxVWM2b3VPMHVYcFFwSFgybEptQWlvQ2k3b1JEaGZXbXpPWHlxTFFuNXpRRHplbW0zcXl0ZWg2WXB2MGtWSTRBaGROV0t6QlhNQU9kb3pwUnhtTmJMV3lnb0xVSStvMmtNTUJ3djJ6eE5taHdTZTZjaFRxalhjOWpVKzVnZSsvT2o3bDlTTUYvVS81bm9tdmdqNkovWWVGRXhud3hzQTZ6L1ZmR1dIeTlIYWRTZkpLalhGVkorUFFXVUxJTS9pcDM3bElpckJYckdnVDhMSTk2M2xaUE9DT2YxNytQdWF2VzZPY0srWlBPY29zRktRTmMvZ2V1NkFiL2ZaZzRNMzcrZFVuUFBNT09ETEVJcWFSZHNITnVWVnQvTFk3TTVYMlAzU2J5aGpJb3RlZjFnUjJNREZaZGJmVEdEM2JoSmdxekFJWDlPWnZiVmU2MkltWk40SXhsaHAyYTJNNCsveFl1aVpBdktDbXlYeHBpOWY5RDcyYm93bCs4a2prdTgxSG5iZWhMa3dmVFJlbVY4MENQM0FnWktVMklOdzJmT0lnNG14VDIra0cyNzlLK1IrSlZMSG5wc2U5MnVtSVdzWVpvM0d6TENkMXo4SisvY296R3d0U0hwYnluM1ZXL3V0OWlNMndLL1dyWkVBMDgzdGpzVmV5Rm1SUjl1T0tFTzRldkhuREZqaEt6M3Zidm5vUVg4dEMvNmR3cnBqWUQ3OXpRNGJyREJ2U0JSYlVFK3FsWDEzcjVZTVVzcCs4U0JpaGp6SWNPNXpucXgyMTAycVJnQ2pPcDlvb1piWGI1eGUvQmYvMnpiMTNVS21tSEZodHBtSEsrejBEVy9tbnFUMmFsMUhxM0tmVzN4RnVrT0tJcG5HVC9lSGdld2EzWEhScnUwQi9mNG9XMDFzaHJKZXhjcDdzbG1LQTdvWWI0ZTM3dldUVGUvays1bDRSS3p1YVdWZnN0M0JpM3EvOGZTTUxhdWZMWnVFSEZ2R00zWUhBVElWZzVzZ1hpeVhrUVBGbllaejRFekJyT2xzWjRCUTk4MVRKNHc2cHpaTSswcUt5aFpPYW5jUUhZL2grcEcvODlXaWtzZ0ZpR0ZQY0hZTnRaT2dpcUNDSVJSVEdEUXYwWVJaeVp0cmkxYkxyOGRaYXBpVFV3SkNXZFEvb2FsY09NaVdoRC9wbWdkVnMySjhrWFhvT3IrUUR5VnhDVkwwcHlUZnZTdmdvSUxnR1lEQk9yanNSZGs0MWN4TXpuSVNtTCtHR1VvNGQ5TUdURDBPVmZpaUo4c0hNYzh3MDJmUGpWcitFdURoQndHMzZJWHJxYUZWMElKaDV3YloxOXQ1OFlmUkJKVkRrRDZxT1ArU25HSWxSSUFtTzVYMHo2SnRkM084Y28xYysrdHVObUtFS0dvY2lNMlZxdWZDRlNMcE9UMzEvTkg4NjJlNEw5ZG5iYUs4ZG9RbHVEajZaYUhjbkZHYUsvckozM25paVFJdFhXRGE3TmhhcHlVdFYveHhCNXZnVTVWUk10TkFUN2hBM0RtVDlIME9rMU1LdDQrck9qdVk0R0dxaXFWeDIxVXQwT0RhZkNWTHp6T0trckRscW9OdjZsbWJNd3pyVGFvbEI5TzNLOG5YdU5PcHZZaHBnb1QvQy83bHhUNDBVSDk0ZG0vT1IrZzdhSFpwM0g2MFg1MTlTbFpFdFduWnEzVXlsamI0c0N6TE5xbmlXcWxLTEhIemRsLzNFRDAvS3krV0VkUmFmNHFVSlJaMU1NVzN4RUR2Um05RG0rL0N3YTc4bkNsdUtCR1k4cUhXY2VOUTdEME9rZ00xZm1uOVVjV05SSEpaT1dUVUwvR01qbVRjY2d5a0p5THVVdlQ2QTlwNFhaUDRsajRtdFU1a2JpSjlVZzFMS3BpZDVHVjhzeGlkK0wvT2tYRlFIRlVtaXdBY1VteS9SQXo4THVrbWFFdDVTTko5Ym9BUlM5aGZyL1VDRlZRREpMSUhhREFGb1Eva3pHVWpJUUgzSTdpV1ZlSHB6Q3dGdFIvVWlJY2hsSTJSek4rQm1za0hVcm1qS2UxQ0c1bngrYXNndG51T0tTVjVoOE4xMTZZZlc2NENLdk5CanptSkMrM0NydHRGbEZ4NWg1RjdRd21zQjZyRTNGeTBra3hVdmtqR0owZDlPd082SGNHU1VPQklwQXV3UjRHd3l1U2dOK0RqNDZBN0xOa0tQcjNaTzluZFYxak5LU3JRSndBalF1NmlIL0JyVTJoeGcvdnV0SlRkQXpGcGVXUmdGVjEvQ1BsdHFja2xhMkx2SWtFYk9IbGNKWlFLRXI0VWxYOUNOMzNlS0JQTEV5V3haN2Y0THNnT0ZKa0xVT1NubkFpRXVoN2ZBN0lqaVdac1I1aWxVYTNzcWovangzejB6WVM4SEh2d1pmUXVXVmV6anNmRitXUVlXVnM0YWpYeDR0L21BQ2hDRXRwM0RNeVlPeHlJRmlWaW83NWFENzNyVWR2L1pQajJOQm1CZDhVR29NVDhXV0xOQmVSQzNMOXVZTnFrdDZpa0hlSnlRZkJxMlkrVTNCZU40Y2E5cDQ2bVllbVFZKzlQdTJlQVlPcUZGdFc3a256REFwRHlWVHFtTnJwSGErUFUvTWJybDVPU05RTWJNV0hxZ3pTQ1dzMFhNSU5IWUdEVk1kSEVDSVZGa2txK3YrTDBmRlVVNks5eGNnNmRzN0EvOXp2TlBKUEMxNDhKRFNXWWMwLzF0Z0MrRnhtZVlKRERqWmlFN0t6R0kxWmI5V3lWYkEyNCtFRVdVV1FORnNIbTN4RUdWQTd6ajRmNG54ZkQ2SmNhN1dsTE9JOEJtOTc4SzcvdHRabXRhY01wT1FjL2RGUzNrRllEbGhhVEpZTGZBWE5CeHJuZVRUdDVJckRYVGhHWkQvVHErWWJMNm14NzZhRWNaNTU0ZkhFdURna0YzaDBxSUx5M0pLQWtTdExTTEtSTno5Ylg4Uzh3U1ZMRk1ES0NoOXJNeTh0RlI1ZmxhQnpQR1pLL1FNdEZUTFV4WSsrZXpFQUNjUm02Y2pEUmd5TTc3SGZabXpEK2FEQjlSRDJFSStsSDNOZnJRc3l1QzJScFFieWhOdzJ6eWV5MWZzRUxKcTJiZWJzcmo5V2c5bjBiOGtUU2YwNWtGdWtBY0xucVRxOTdEc0QzeHlnRzBKNDdvOXp5TmR0ckxkZSsybmtSRWE5QXRqQWxNTjBUSnBhbDVrNkhUZHhObzZJY2lwRTNXSzl0QjZoVWR0Rk5DZkhPOFVlQS91NCt0N05LNmxacUxrRE5hczR4Mnh5TnRBQklTdkozZHpVbUlDa2xWbVZPWnZCUXhXWHFSSnV6K2Y1ZGU2cjdLY2llOVQ4VEg4U1ZoSE9KcWNNN2k4RDJuMW9FRWFPOHBkK2h0REw2YW5PWVBhcFgrRGpaMzA2M00ySDkwaDF6aStyQXY5RXh6OU0xWEcvMWxKaVZPb0dFUDdKemx1NXMrb3Fsa0cwRklqOE90Zk5DdFZ4M2Z3T05vNFZXaUh6blRUTFZjaGdPRzVLai9TdWN4YU9iRnkxaUVyV3Y5dUJJZnp3L1AwY1VITlJhRE9RUTkrd01DTjltdjJVZ2ZZQ1NLejFXQU1Kb3Y2bE1CQ2xBc1RDQWY5UlV3WUdIRS80dk85eTNtRnlvTkR1c29yL3VQVVVLM2RKSEVEUDZWR2s5bStUVTRzdkV5dnU2c0hndjQ0Y3AvcWlTeFVCZFl4NGYzTnhQT2ZuUnMra1Uxd2ZFYTJXdWUyQVZCNU0ydy9IcTVmTCtZRXNUU0Evc2hYWGlSMUY3bUlpZXR3YXBRRUlqY09XQXV4RlZJcUNqN0hTa1FrdS8wbkNMZlEwVWJMVmJ1eUZPcjV5bzNOUWVOcHE0d1hYMEhpS3F5b3JLRHBsR3FQK0VyTHpseXRjTy9SQjVnY0RqM2ZXQzNRdUdPRERNd1RVVmRBQkswZklkV0RrcDlrUk9nUTFJVnJnbHlYQTRQVzRxUXZLdHNqOUtOSHdvTWM3emNhUmhxRHVIRUNoSlZZQVY3Uno2dWQyRndsemkxMXR5b2ZBd3IvVWpCOVI3NjcxaGdtNGZsSGo2b29EaXpsZnorQXVWSjAwempVbWI0bFRwY0RXOFpRUkRVNEdDTzJCWEdSL3d6NU8rdFRkNDJTdDc5VzZESVRWaWVUMXNpbFNWNk5oRU9RUXdBU1pWSldTSW0zQjR6U3A4WU4xYTZBcXVCZ0pzcXNha0hVOFZFdVZGWUtKaVNOUjFkYlF2TjN6ZmJUVENibDNudkYveUNua3hrR0VpencrMWdESXdGZ3lrcnV5bzJhdzBtb3R1TjhTeEFaNVppUWVRMGp1dXlqbHBmdW5CNEpOSVpqNWtaMkV5L1lLa0F5YUF1T20zNi9vUXkrV2YzempNZVIzZXI3NS9GYytTTnk4aE9ybmpES2M3RGxJMTMreitLYWRYNXZzeDh4NEdXTXNVY0Z4SjFwV1ltS0tPRlRTdkI4N1hLSmkzZUhsS20xZUVkSXVDVGJ0K0JlKy9qZTBTcFQ1UElEWDI5SU9FaW04MmgwUlR0Z3A0SENTcExMZFZTU2ZZZUUrN1Vub1UwSG9iOENkb3lRTjF0cTJsaEJMa2xKcGVTN1ROTkM4TW5OcmlNand3RmJFbUdBK2R1V3diOTIrZTJ5WEczb1l1dzE3b2tyZlY3QldYSHZwYnZpY2NZNWFNbTFYUzRhaDJBVGcveWt3aW9iUkJLL2dsQ0g1UEpOMjl3cVJYSWdOamhLWHlCMklRSEEzWFV2bWVtSFp2bWM3bkxRQkk3d0lJeDFkUVMzRXQ5aHhiaDBBcFBlRWZ5WXdqWE4xdmtJdTAvNWJZa3dhRjI2WVBoblhiZ3I3UXlMV2lzK1RMcng1K2UwLzJybHVkenJ0cDdRQmdENHNUbUhtQWVBTFE4ejVwcWI1a1ZrV2NpMWNOK012bFh0Z1BWRHhMMTdseTlNWGJLOThiL2l4WnRWVjZqR3Rud3NVcmRESFJXMVpnOE1GTXlPUW9TZmhaSW9ScytTeWw3QVRpQ0RWbVBUSGhacS9zWE5mNTZpYlNiYVBmaGs3dUsxZVpxaGdDSExTeDJoVVlNWWJJeGV1SXJmRXdYK3lKUmx1Y0huNHdaVlZySVNwUlFXaWI3V01TbjVXazZ6WnEyN2JLSXlnSDNURURRQTlreW9QUVB1Qzd5MlV6eVNtK1B5NFRFL1Q0cHROMGlpdENMMUt6UklSRGtFb0JOQ1R2S29tY2lOcDdic01ZeU1jZWo2dVBVMHJWVUhJYjVFUFZVWk9JUVhMdHJZSkV5Z3FRcmdWbFB4YVcydEZydldnNVl6cU45blFPM2YyOTJheFBST0haRjc4NHNjaVNhekdzQlcwZFVyUTFSdnJ0QnpTL2hScmFvbk91ditoMldBQW1ZTVF1UmF2T0dqRXFPdWhzcm5weVR1bVhqSklxVHNDdVJTQnRYVDFkR3pSMGdkQWt4M3NyMnJ4cFNvNmxZVmxuVXJYOW9MZm9tUEdzYWx3dzVyZ2V0VEtxeUZEZ0I3V3daSmlOdXBWK3N5T2FHUEFWV29xZzdJL2VRamt4SzU4NjNVM1duU2xUMUVJblRxWTBmZEhYY0xyalVIb0RodUl5TXJ3d2QzWEQzUDNZdm9HNXhPN2grMlpVRC9Bc1dycm9aU2xQYlp3TFpUUkU4OHdDdEdmWStkWUs5ZjVXL1AzQ3lOYVFUZVdsWDRNZmQ2bU9oTm5HYVVCRnM0WWRwdDR3RTFlUHdEUW8wZk9NRWpWUk02NmZVZjJiMGp2amthelJEYVFYai9WRDNuZk5iMGVpK0ZZQlVKYU1rSnlmMGtUMFJQNXd4ZXd2emVCanArWG5oZElJTEZjTzNxeGhoOHpGZDI0dTRZRk9OTXM0dU9Tak4rUXczYUswb0p2S3plT3V5bmZIdEtTK3NPTVJMZEQ1aW91NTRNWDd6U1RNQXVaeTBnTEd3d3hXbHVDWVB2RlBaaEx5NDlRMWw0M1Z5Q0ZubWs5enZqUlZldVBnT3B0M1NNcjJQcUxqRkpLRjZGZWRXRkRGTzZYN1VmRDlxL1REcFB4V1lYVExaRytCN0gxS0lzanMzcXlKWEdQanlBYjJrQ0ljbG1sQVN5a25zSlJLUit1SWVvdzFGWnNuRGxOVnNGa0xlOEFYcXM0Ujdjb0dScm9IaWhFcU1ONVMwelc0dVBDNGxoVm1Ed2JPUXRSdnFySzh1RklFQURvT2RGL3pkMGFCZDduSDB6WkZkeGdDU3plRTF4d3ZBa2hPSVFqTEsxcFNBc2VKNytZNWtod1EyZGZYMTV4bjFhaTU2dlhZYVNRUVNoakxuT1FaYk5NdUxiY3ZYeUlxZ0NzZEpaWHBIN1d6bnZYTHovVzFyR0xUT3NVdkZWUlNORmxvdCs4Tk1PNmZRdkVLWGZPdnNzUzdrSHloMlZCaDR0Ry9tekNQMXZhTG42Y3RncGxXd3hLdFA3Mmo3VDBOQTkrMGQ5bVRXckJ0eUQrT3huTklkRGZQRnVULzhUZVEzQUJIMEtrVHFocDFFKy93akY5VThVOWdZSjZodlVIMEx5SXoxUXBrUXBMLzZia1QxL2l3Mi96QWlZY0hMSXhzUVlzd2cyN0g2TzdHY1poY0NJTFBaUE1zVjNaVmduVXJad3JkNU1obDFrbFNpTm9BYWhQemp0cGVsSGJyUGZmYTZsUHdyZS91bXpzU1VmNmxJaVJibkdGOWNGNVNHaTdYRVdpUWdOc280VE5sUGtRMHJZVC94SWRSUnUxMy9IbVM0TG04N2E0WVdRVi9iZS8xdktZK3U4cUFXQlVDTnhvZzZ4OUdwQThScnZVN1BFTWNOSE8xZUduclBaQmJoajZCY200RTF1akhlMERKczhwL2NoSGlmUFJsdHljYzR3eHQ2TFMvWmJQODlJTWZxbUFXTi9XSE9TTTFHbWZKa0tkZ1A5cVBGSVlzSS9qTS8xSFIxSk8vck1XeE5VejNhS29EdjF1QmZ5ZFZ1aDZteE1KbkRQWlVVSEhrZ2pXbVZCbGNKeWdBZGlZckd0SlRnUEdHSjR5cmQ1eGsxbXBEQ0pyVGpkS1laeG5jSzBSeFF0eC9zcXhNcUltU3RMc2VOTmhLUWR3SkF5aGk3Y1doUFd4ajlzTGNmRHBoYTRnTUZoQ2kzeVJldWc3bWNwNGNJNmxXTzBMT1FGeWlMU2h4TGlOTlNabWYzZVN3YUtRejF1VlN0TG1yRXVKREI1OHBWL2Y3R2lHeFNQejR4ek9GM3BxV3NreUQ2TG9ZMHkxempBWWFUZWJKcERPN0pXNXhUUmJjVDRBd1ZGY1dCVWZaVWo1NjM5L25aV2lyajJWS0x1WEVTc01iWmZGcmROd1VxcWE4NHJqVW0xUUswTUJON1NxaEN6OUYrY2R6elhrZ3JjODZaRFcxN2pTclo0WDJ2OFI5U0lzOUlJVFoxR1ZOSGh0ZU5VRmsrK3JubUdLMlozTHJCWnl1MUhSZnE4YkJqS0NVUW1td1k0ZEtNTWNnRGtrN3VqN1RvUTdtdU5vSzlhbUNDVExINWdiSy93Mk5lZ09Cd1hZNFdjWXVPVzVlMkZ6bitwU0hRMEk0YlhaOWtzN2hLK1RIV29FZUt6dXBqaTR6a2RqR25ydXY4bkM1RUNwS1hweXZ5dkV4eGdnRlprMSsrZ01XNTBoWURZMGRUWXJrL1pVTFArU085dzZsUXZFSk9VYWtLUkxnOWtHcUU4aGxkbi8yekNjdE9Tb2kxRFlLa0txYVRNRFJIb3JxWWFMbmc2c1hsejRVYkx2cDRwRzU2R09kVUZVYzVaRVVPYkxuekF5K2ErZWZUbERkSVBnZ0tTVk9xTUxFK0V6THNwc3kwTG9tU0xFdlQxVS8xcXQ3Y2liaFdCdDVwNzFVcW8vUngvZzFkTXNyYlVRcTdTd0FmeTY5TFhZcENYd0xKRUlzYWVlRmx4UGpJZkZOM1BNa3lIaXpCMkROcnRQeEJ5UFpGRzdxWkZNWjVqUTdST1d2cElaSGw3T0JKZzRZVHJORDBqcC93NE96bGdaTFd5RHpMN0hFZXlqNTkzdVJvSVFvbTV4OGdpdGhabFMzdVJXV3FZcnV0bFVIOHJJblI5OHlPNEJ5R1FMbzJTUTBncmJvR3pqUTF1bndqU1FpajYyUE5zNXVqdTgrL2dIU0hodGFTWkRkNm9kOWVoYks0dmE3ZFJWL3JuWC9YYUJRS3lQbzVEbG9wN0MvZTZ1aDF6U0xmbGRTMlZJTGdXK1NRdWdlTEJXdURvZ2hKMnJiZHRPdHpTei96N1RkRFY1Sm9TVE42ZFU1Vld4UEFkT0c3V1hFQTV4U09ZQVFXZGZJaGtTZ1dDOHZZWlRTY0RYbFExUnNuRW1GdEdlT0tiSjl1YlRYOFlnYVQ2cGUvZWhySWZGZlBCSzlSOEZqa25OVFovYTRaL0RBY1BnNklIMGNiL2F5M0RVV3JzNzMzTGp5Q2szVEV3T1ZRYTd0QWI1VzZYL0c0N0JLenNxV2lITE4yVTBXZG5adWFqMGluUFNlaE0rVCtVOE9sdXVzNFVScFJQNDM3alFlTHRBV2dVZ2ZCdkowUWM1WXhPTTZ0QnNyWWUxa3NMMEttS2UwSzFHbVltNVM5Q04zOW0vUXhkYUZxZ2dzRHZwYkh4ZlByQVVxZjZOMTRUbXZWOFhDSSt6endpNURZbTVGVXdNYUF6YlUwTFZpVTQ1VGFLa2xxTG5lN3hJQjFiUnd2VXVhR2xXTjIrdTF3UlZTeTBxcGJjWmM1ZWZuWlVzMHFGUEFPa1dHNG9ESUl0d25MMHlpZDZkSm02aU1XZE0wVnNDOTlvM0wzQXRHcUltdlpqLzBGaFAzdEFXS21BNUJmZ0hPVENLWExYdGkzbkxXQm1HVERCU3NjdUp1aHhFTDJUMlM3bVhEcExFc1J4ZXJ6NGtqUnhUYXBDbFd4SG96SU5YaUcxY3d1WmsrR2ZydURza2Eyd29rdGtONFdEcmpGb3BWaGQ5YmwwWWlKWHNuL1B6YjhUNzd5WjJXdGpma25wTHdpd2tndnU5TVJHb0k1UGNwNmZHNG9zcVJVakJOTzdMS1hiK2NFcDJ6eFJKNloxQUVMZlB3NUpmcmd3dkdBNFdOelF5TFE2eEJiWmMyT2psdmxPeWMwRVNZUEp1ZVZNK2dHbU8xVnJmSzRvS1ZOQzNndmVXbWtIb1dNMlZCTENNWTFjQUVJVGxNQzQvY25PbFJtT0EzTENFbmZXd2tWNUVQNGR2U1h1NTNyZzAxMm54TU52R0tVVkNtdkZsOWhkVUc1SDllUmVIbmJHUk1jUFp0MUxvd05FR1M5Wjl5Z0l0ZFJEQWtEZ1JsSUJLZ3Q5UkVMN2ttRDJVT05GOTN2S0cvWFFNOFdzSjdua295UGZRN0hMQjk5Q1RsZW1DZjhGZzRzUS9wNXo3ZHBhcFZydWNxVm81RWRCVkZHMGk3WUVxNS8wbG0rQVVGb09SOTl5eFlpMitHQVBCS014QWQySlIwQTFJemNnREhqRnVFZ0RpZHJGWjNQQ3k0YTQxMll1U3dtTnNHWUM1OU93SnZYVkJZZUlTTEdLUlQ4ZVloenA0c2lCbGNwZkRmeHhQUnVkcHB2dUlCVTVOZ1Q0YkY5NU9tWU1ZR3FGam9obHRhUTNlY1ZWTXhmZ0lTVjc1elBWUmRKWGR5cExKSExtZm9mNm9SeUE3OE44R20ySWY0MXNUWE85WjRsOWtNeURXUUxFdllGNHhKa05aSG5KYjRtWTczdzdXUjVub3hYczRmdmNhSHpMOVhGbUk1RDJSWW1EQVNJYUdFTTVJNklCWndFVi9La3IweUgzZDNhUWR3Q1RET1kzQkVCbFV0TjZDZ2V4d1hEL1pmWW5jSHpQZEZ0b1RtaXY4NFdLUW9QL0FpYmR3NDBpamVQQnAzV3hYUTdRSFNOc1M2RkZ4NmY2ZzBsUk1FWnVJaEhJZDlpeW1BTlVaMG5zTXl4N1hMRXQxczVXU0RtSWp3QkdrK0VZR1Y3ajhoRVhUUXZLV3hqbTl2U1FaLzBqejd1cStKUzIzRmJhbFZCcjBMbjEveEQ5OTMvdWpaS3pvUlNJRXdtcHZtTm5zMFdBVmUxZUw0VnRnQXpwQnJSU2RscnBPc0NZWHpOaFdTMXFvUU9jVjNOSlkySGdUdmtvaXBlWXc3WWltTzR2bzBNOXo2NXRENS9WVExIUWN1NUw0ZVRiTGdCRk51NFVvSTFDYjlMaGNHSnNySDRDYWNpTFVwR2pZUzdxa2RpclBCUklvaWZIOFNkS1J4bzBvMTdVNmo2VFJpMXY4QkR2by9rN25QcjVnWkR2L3hKaDAwWlpGc2tSZ3dXeS9valBwQmppaEUxZkVMOEUzTFRaTGh1SG1ZSVN5d2ZveVF0Z3d3MTh5NHlKTmhRZzc4eUZFbjNWMmgyNnV6SXNnb2VESGgyNldBVTFQVkxsRFNtaFdaRjUvcEZlZkNvTWV3eU5maERsYktMU2oybmhNNHN4VU9IUVdjWkJBbVBsSndmNWF2ZlhQNkpUb0FxYTEyMFY1VFpEcyttYnFxcjR2RllwUDFNazBHR2F3a2Zub3lTU0szQ29QaUZEaGFaRU8zS1djYnR6N1VSOUdiaXdnKzFVZHJUWjZMbTlwaDFIa3dmWnNZTk9QMlFsTkNhalMxdjlvYU5IYkE4TnZiZzZUVkViN2FDT2pGazAydW5VTWhnelhXSnBlcVMvdVF2YzNWUGY2Q0V5b25FYW1Ub3V6dTFiOHNDMFZHbVh3WWMyL28zMllQVWM4bVR4K2F0MjZJR0lDL1JjNXlja2xPRmtVcU95WnVUQmlIY1JueG0zVDBvandHa1QwQzlIL0xUWXh0aDZURUxoaEJSQndVUWd0djQzWnMrUlF1cng2Z3ZmdC91N1FUV3krN1lIbXdIb3YzWGRSS1QwTDJmeEhqaE1HakpzMXNQSlNrcVNDM1Jod2MyZVA2K3JRN2U2RG01QTdPZU1QSUxOb2tVTGpNTW4ralJybmJSWVI3R1lQMmMwMkZZK0ZtZStaTkd1ZFQ3NHJVN0JkRHlOaTJLYUdQQ1N0Y29zZ3NhNWdZaWk4NEZydFlqRWpyZmxqSDVNTEluM0l5b2U0ME1oOXlFZjZXZW8rVUtaNnlMQ2o2Y2l6eFhMNS85RG9GYm96TjNvekdqemc2bk0zYmZRVDFlK0Zqczdwa1psYkVWdTU1UFVHZGs3ZjNxaDZkZUZDbUNyK1pxZXZ2NzVIQllGalhWbTd5S0o0eDZRQ0VuU3NKRGVKdHBCODN4Rlh4TEVycmtUTCs0TUdwa3Y1b0E4UWtXU3RmTDl2ZFo1TmNTZkhjdTN0S3pFbE4ydWp0SlVSWmp4TkFxSmRDUmRpYVFxbDZyUHNzbzdSSU1QUTJsUjl3b25XMko3Y3E4NmdmVjc5OExDQ0ZwQ0FJNkUyRm9ueFk1bGdDbmJUNDExMHRKRFpxWGptSnJMRVIrU21pTU5CY0xFNUlvV3M5bzdGZjBTbFFZUlgxbkhjZTZPUzZlTVo1V25MSjlFTzI3QmtIZGk4LzhsNGZmM1pxSzZCdTY5amhTZitlVitka2hGcU9VUUo5aVJiVmJDL0xzdlZJQm1VWWFWN2UxRk9OMTc4aEZ5ZEFiSC9HUUpibWcvZzdZZytsbUhWNnRsbmlRdXM4WEowYmNXeGhjVmNkUmUxVDhQa3p0MzNjWnFYTS9EN2pUdGZGb0JCVyt3c2QxNHhuWitxRmFRdWFQV0FmUmg2RjRyNllqUEFPbjBSODB3Y0x3YmVXVXdRcGYvUGl0MHh0YVFHUHQrcmthd1hPM0Z2OERLZTVxVFlHOGtyYkx5RGdyanI1N0R6Vmo1UmloWUZkT3NwNFdVL210Ui8xY0hOdm5kRHl3R2poNkRQRFJOSGhjVjI0YmZ5Ukd4bDF1QXV0cDBvL0hhMStuOW9XSHpPZkxsL3ZxUklrQ0tzQzh3ZVFueHkrSkplREFqRTNsQzBJSXVwYlRJd1A5SERxNFFzc3l6bWFIMmtuMlJyUXcvYzUvL0hHY2hzb1dBYkc5bHd3WEtNQ3YyNjcxVmZlRTJmb2h3ak5NN2pMMGJ5c1pJUXltMlBvTFFRdm13ank5bmQ1N2Q4dVRXNy80ZUpzRlZnZEdyRUNXdzVPWTdRRlVZSHlSTGU3TDJwRUkyTDFMM1FUeXVPK1JYSHlORHdGQkRrL0grNFdKOFpuR2dwWVlNOTdmT25BYlZrS3ZwOUFvNnk2NWdJRWNERGdZZkhtNEhnYng2VmMwcTMvbVNUWjY0Q25TUWN0bTlUMUQ3bGVqc0lvUVJ6dXVpTExmNERkdWJKOGNYMithOVFWcWl3NEs1SHRzY291SU83NFlCRU5OMGVsbXE0RzZMbDR0NVdMWWUwQmVHZGxJL3dyaitPb0MvNlJJbkMrYkxFblg3YWlFU3lDbVRGWXJBdDhlSTlvY1RoWmR3SXY5VVlrWWU0ZXhraGpQZkQwODU0Qkk0MmtCWDFQcnZQNTNMMFMxOEl5VWcveWhxT1F1Mm5FNjRuYjlRS0lqV1BNcWx4a0RwVDU5aytLTmVSQ0p1MVVWVzc3VEJKSWtrTFIzMUE1YTlEekVNU3NHTjNQZUVQWXozYjNLVGlVeVB3SWo4d2RVeXppTDE1cHpIWjE2K20vOEdZenh3NG1SQ3ZmTWlrZkcxS3U0bmNEaDVEZDlNdmxjREROZzh3cHNKYTBpOUJKVHdzZHBxTXlwcjVQQUdMOEtGY0ZlWUFuUUk1NVFhRzU2aVpSTllKRk0yZjUzV1lTQ3VKZ3IwKy94R3lnVjdCeHFMTDZibDZoN1lOWDZadWFqSHdNUjZQOG8vZkhwMHVEenVRbzdYQU9RQ3VuS0pyNkZjVUl0VDF1MWErSGNxUHkvSVRRS3JhZzIzbXpaSTR4UUxadnhPWXlHdm9vOVloOTl1bkdEQ2dFN1JqSGwyU3VyWkRnSjRPYzNmeEZpQkRVcENyV0h4ckxJcEVuczcwcUZxODB4M2N2cDRnL2I4VUNvQ20xZDBnU2E3eFhUVmdwejliTnpGZWVJdzhlZ3hjZFZxMU1kYXMxSHFHNUNOTVVib3dldVpLWVdjdU5LMFM0UXlwWkpnWXFudFo3VXIrUlRHSlZITTVUYzVUU3A3N2J6VisxaEdhd3hPRHM4UVNScWdyUmovSWFCVEJ1SVJFLzJ5d2tuQ3N2ajhyUE9yN0FKTUxQSW9aakN0RFJOWURhZmQ1SEsrNWMxYW0rN1hYK0c5eVBOWDZFVmhzMXgyczBVNjF0cVlSS0lVNU9ONjZzcG8vb3RXSEttT2hUN1lYT2hRWG45TmNhTVk0ZlRyemVSM0NjNDRTNXRpMEloVVJLdElKV0hDb2svb21KVUhVQW1oeTkzUWgrYVc4ZFNEakI3cGVhYTlXcFBjYU1PU21QeWp5bzE2UndSQS8yNmtodHhVZHI5R0xQMUZscVY0d0hPbUxHTFBhTkJOQU90QzBOeDFPVDRYVHIxUzBtczhPVVVrMUZETmZMbkRyWEdoV254RHNybFM3aXYwYVk2R05CU1NTaFNxL3dHNHMreHdNTnFSOWQyK2VLdlo5NGttVExuZ29xelNvRHRZTDB6d0JnS05HQWxOMmE1cFI0N1BNOWVpUHptVTNyU2ZWVGRIUHN5WEV2aG9HMUEvckNQUm1Pck5EMDJaTmF3TDZmSzRHNkV4RER0VkJNei9RMllwckgzZDFsN05ST0M0WnVFZy9qUWtiMU9pOElMUS92T3BIMk5MZVhsYnBFNWtMQmNRd1JLQlRtMVFxNVNKdkFHT0FQdUY5elkxTkU1Z1N6dFZvNzQ1ZmExK1EvSzZWY3RMaUdXc2ZZbE1PN1ROS3ZNMzBJZGpmbVJnellMbXpRekhyVVRGUXh5V2x3UnUzQmVOVjF4bHFrOUZwcWpqU3haUllhZkxwOHAwUi9GL3JCa2E3Yi9DeGZPaU5aNXgrZytCa2tqUXhiRk14UmljSmdZUXRaV1RIaTZwOVZjY2NvVHlyd0EydWVWQnZMVVEvbTU4OWk1K2ZMbElwdUJzQTFxS0YvUmdGWk1iNkloY1NiNExIdHF0a1VuK1VGYmhEU3FWdnB3Si9MbUlQUjB3LzMxR3RrbXN4K2duL0VJekZyM1FBK2lmaDJXaiswbXkxZ3NGWXdJZmZFOXZlc2QxTjl6YzNCMDhKTXpZWXBXaHQvaEhVcEZYdWJnOW96bVVOU2h4VU5VNkVDbURCK0FjQVlaRjhrT1JlcUFaRjBkV1BsSmgreGNLb2VtdDNkaVNmaTRSKzExY2Q1RXZlQy9wcVF6ZlhDZ0NiMkorbWdQTEVlYmN5QXZjOC85bExMTnRXRWdtOHVwU3drZXBkTlRXaUJFWmNmb0xhY3duRWZIbEtRNFRWZFhLNTJ1N1FkZmx6bmpuaTRaZlB6MDhMZThNL3JrWW9sZjJKclpRM0dzRmZUcHNSWWhxM1JIaXY4SHJ1YTMrK2k3SEJQakx4RW1ISVFTQmU1WU1vNVhib0x0bXBkNWdYdEhCZnpnR2V5VEhqU21BZDJqTGxxYXFFamR0VkVmbUorQTA4c0d0alpqR1pnbkF3WWVteERYclpROFFCMnM2MGtiZWl6ajE0YUVjakdQckNFRVkycGlHRmtYZU9IbkVjODBVb0o1NWdqVXZUTTJFQlA1UUdYa1pTc3FpQkhhTGFnVHRCS1k4MUcyb3pqWFM5WHA0a1NZc3BEMTluWjZsVENObG0rQmk1bHd5T2dxL2h4VkttZXJ4c3BycWhaUHo4T3pZb2d2UnJvWHRqM3ZiNmc2Q0pRbTVHdHo5RE9aSE5MN0hXS2V4bzF6VEYvQ2s1Z0t6MWxnREkyNjVBS1I5QnRzOXh2WW9jbms4U29YMmJVQU1OREJUZ3l6SVdTcmVhZGZvbnRJOFdKSW8yMnhISXVPWUtzYUpJcU9aclNSRXhya2FqVEYwWnBvUEI2WlA4UlBuUGxnTnJiR1JwUDIrR1g4WGpTdVNKYisxRlRQaUtVMEVQTkNBV1RLOVh1alRkc2g0WVBENlRDRE0xTjVMYjVidm95U0I5dnZWaUhxeWp5aEc0aWd0ZWVVN3ZHSDlKaUkyaFBoTGJXNkpPOEVjRUloWlRRUXhKWkpPSzNqSUhDa3g0QkE5cElsazY3WkFpeXRtMUNvdmVIY3RLTUh1WFJuOWx2elZ5NUdCQVJWZ3B2c0Y2Q0pidnN2VjVqMGdqWVZEcGFGWVVnQ3FoQzZrekpxbXI0V0xtUzFpUWMrY3BZaTR2bmxBckowZW92QWdZSGFHZ1pwWHN6TTFSb2tLRXFqRW5TQWRubVppcGl5NVhPRXBVRnJyTTZuOTh5M2Rrd1Y1dk5QU2hwUWZpTzNaSGErdXQrUHNJa2ptaTlFMi92Wms3NnBnTlBOTTJxUEFzaHl3U29VSEtSSERPYUJJMUprWStEYnJJcWJRL05YenRjVVpzY3BYMzRkTkhpaTVncFdxSnA0bzFsVXpQWEJ1alEzNFB6Z2JmRHZXOGptdnhBSjJJbEF5WTR1cktDeGZNOTFNNVBkY3BHVE9HNW1ZcCtTbmdMRTQ2MEdzTklpelpDK1RidWVNZmN5dmZoN2JwMGd0Q29KUDk0MGZYWFlGZlE0NUZPY21EYzdjbFZxc25DdWxmcCtIakI4eXJrYVF2TEM4c05ta3VqcTVqTkpFbTRMdnBQRWV6ZHl2MVdPZmVyWitRWXlEYkUvM1RWS04wY0dmdFFTbG1kNE45NWZHZmlMRE9PdWtpVm1sQlVXVjFwdVJ1bUZ2ZVpBQmFvV1ArWDMrangzOU9QRmt1M3dhcGZTOThrUFN2K3hXa013b0p6MnFNM2s5aWZLMkUzZDE5WkdWc2Zaay80RWZEUWNJQjY0UXNuRGlRK2pSMEFteDkwcWhaNWdDNXFnSXJFOGU1cUt6enJDY1I4aXloUURubDZIREhIQUlCWW5zaUFXdDdnQW41eDlzTWR6OERhUzBjUlNDWEhveSsyaGZiTkc5SEtIY3YwNkxqcGFoMTdZQ2dxelBqRDJiY1cvSk01emNsYnU4RkJqQXZidFREWHdWdVpDWjhLZzNRTXU2OUc2cjJickhYV2V5ajdqclhXM2RBVmI0anFFdXlVR3VTR2pFQXNJa0FzM0E5akJueUNVSmtNSE1qT1FJanRxekFXWmxyejI0cEJLdTdSMkpqMVBqbXQrSFBObWR6MHlRS2IwdkNPYUplNFk5Y2VyOElCTDEzZFhQME9iWjFpM2k4L3B6ZWhjTUxGemhMdEN2UWk2c21DeGxXOHBoNTBSWXZ0c2traUFFaWhNMWNadk5VNWFYbFNTWlVmVkM2WXpMM010YTlGMldSLzk3d2sxc1cwWHkxTDRPQUMyYmtMOG5sWG9OSzgzc3FsZzBXd0N0ck95eDZmN1hSWWlxbksvU2cxL0dtaVRrS09GT1c0Y0dqWXhzYkNRZmwwaUtqQzAvY1lrRExrb2J3cEZ0bmtGejNPWU1pYzNjZnlYdHluQVJhOG5YbTZBYStEZktsbFhlKzlwUG5NOFdBQWhlUEI3TngwWUpvakRvcG1wWmR4N0IwT3FlL2hJc2wwVmJQVFdyZlB2S2pUUk1Na21CMkVEMEFqemxQSFJoTUpCTllzeTVnV2hObElPSHlHalZ4Y1doaURPclFHUW5XZjg1R2dmWXpyZ0M1UlBkYjh1MnhnOTl3VzR4L1pld2p2aFQ2NnVNZzQ2d29RaXVKenBSb2RIcHZQblhXeUdIZXhONzdVWXNIemgyb2lOWnFaRHpvQTRlZzhNb3FMdmZhRWNocldrWHNiTjI2clk0MEZlQTdrWVZpeWtQRjV5MTVnY01QY2Jrd3lQcHNZTUR4akFjY0I1a3dob01VdEFmTjJ5MXhpMVp6YzNjb2RIdHNycWFmMDJicUgwdVdJNmxXZjh3dWFRVXM3VTNHT0l2VkxaanZMODRGNVdWVXhzY2NPMzVqMjBoNXI1eVZjVU53b3hmYnMvbitucW40d2lSbUFubmlseklPUm1QWmNEVHJkUHoxZXVWL08rRVVDRHJnQzJEZ1k0RlI0U0lWOHB0UGFqTCtaUzc5YzNOaURDeit6c0ltQ3ZIVUNISUVaUWxqdUxvckJnUmdLSW0zV01GeGFEZlI5aDRyU1VzL2N6eU4rRmo2cldGWjlHajdKUTFnVEZzeDNFTnRoUWVPSjNGRE1lSDZ4aVhxMEcxVmFXQktuL1d5Q1lZWUhvWm42WEo4aW5YOVZsOUJEdGduTmkyUGJsTFl1TkV6Ryt1Z2M0eFZ1empsN2dDWHdIWDFmTzFNcENSNHA1Y3FTWlNqYkFJcEw0bktTMGFDUW8rOUpKREJUQjRpQ3FqVE0xL254ejAzREhtYWtsRXl2VmhFTXRRM3l6R3pkSnM3SWRnRHl2RjN1TFlobFc4cHJsVHdGVWxXQVc3c0dGWjYrVVhRcGFhck8wc29LTEwyRVVoNitvSDVPMUttSnFTVVRIQkw3Zld6UGY3Tlp2ODdNOUJZSDJCM1pWN0NIQ2cyYUhtajVtVFR6eXE2NGtjMjNFcWhVeWFzWFNFNGZGWFhUQjY3cHhIaENXVDBmckZ3OU1PS1o4NjgrN2JMWWMrYjdFSXduYzAvYUQxZW1VWTZSbkhzVzdjWmhwbmJxRiszSlhrekFHSm9ncnJOSEFVanN6QzBNMVBaYlBTcnBlZGxrS3FjWEh3R292aWl3S3FONGdwSlNVbkFtc3VFR0hRa0RRY1YzaElCdytZMVJ2THZ0bktCRmNmNE1XVkRnL1pWbmFKazh5S0N1aTZGUTdwclRZMDMvTEFsbmZNZ0VTRmFYMDlNNHBCbnhYUGxwM0ljeityclJVTkxPZUZRdkVtamNDWDNTNlV5MHU1aDZVN3lESWpQSzNldjBTZ0crcTN1TWZzSld2VTc2aUI0Um1TNUplSkx3dU5VMlBlZUI0N2M1eTZsWmxmcXZlWElJQzdkZnVWRUJ5QTBueCtFMk94R2drUUxiRFhSL0ZRWE5JbWp1Nmp4UmMvUzduTXUzT3hkOG9TU3JBa2hmTXZCTkI1NjdQMXFkZkxrRXM0eFk5QTNOSW5RTjI4V25RSXpnbHV1WmVoeTRobEFNMk1EWEpRYWEyMHJWcGV3bm05aUpPTjFRM1l2SVdvNmxmZUEvMTRNZzZkTTA5SjdmRTR2dXA4YTBCek56VUxBdkg4MXQ5WkpCeFoweEUrSm5TUzZrSVkrK0JiVGVkU3Z1MHBRTXdHV0pIWTdMS3lULzlvVGxXNSs3b3RseU5QcXY5NmNmT3VkbnFyaERDOHltN1FhY2ZEc3F0RVFQaTFOd0lqU0twRk5oTVZmdjE4ZXBnN3RObU1Uc1owVlBIMEY0Z2FOU2ZzQWpxbXpWSzhtMG1ISHVKM3ZLM2FMTGNESWh3SzdBbUl2REZMb0RRN2lNaHVuQURwNzJGM1FBdjFzaW5MRlVseVEraXR5cVlOQkdJa0lxR2F5SFRDbXh6ZHpZMkVwN2RjeHErRkliWUhWNlFTcDV6c0NkeXdTbGJOYng1V2RDTGNZU1VULzJ5alRldVYrclNnQW55YnhPcVJMUzNHeEorbHdrT2pRUG9Md3FUNGR1UU04WERqVmJ2dDZpaDNOQ3ByWjhGRWFESjgreDh5cEV5SEVWakx1bEZidXphRUF4Vks4cEZDdWFJNTIvczAxdWFNWjdRdGtBMUExM0VvRk5IUDMxQmw1aDFpNFN4VUo0WmVSeDhGc0FPUGxUYkJhRjZ4SWVkQVJyNytKOEZzb2RlWmQ5enJFak1ibmZqVEExWHR6TG9HQmxTd1dOcmx3WWhtdEU0OCszTkllNndLcEdzYVFybjVNaEZpdSs1Qmd5TzNqbjduaUZSSVZQRWZMUmhqYURSVnZnWHJTbEkzUlQ2ZXp6SlV2ci9mQzgxSEVwcys1K3NQQm1jWTF0QnhmZEZKZ0MybDNhVi9NZS9WWGF4M3M0MXhlWnVFd1dKVzNOOGlzZngxRmQwcVgxckdRMWxJSmhDdkxwSGRMdTRlQ0t6a3FoTUpVYW16SEQxQnFNT1lSNWhEQW01MWE2aXlicGViTHdyMml6YlVWMlRkSEVYR1ppSnNXMmlBZGlBMTRnNi82OVhWU3dUTWdkQlZUemYrVm56S1daUW95S2laUWRlVjVUdG9jbm9CUGdmOFhqRjJmOXpYN0ZwQVZtd3pxVEE5UEhqQ0pIOWRGUEIwK1ZTYkd4NWFhbDd0NWVOTFZPWTVKbnVBUkwvYVhSUzdTbmpWTXNobkszbTFaemhHNGVXTVd1TUE3aXQ2WTU2c3VmNWZwejhNZ21idDZiMWM3RzloQnJ5eUhTU3FzWGZkOVBsRm5XeFp3Rm8xOXo1MG5LRk02M1g3VmRGV2FDYmhyUllRTVlwemYya3hVaVQ3dGx1RXBsV2pNTHBoVWJRdk4vdTgrbGxTcmdFelZlL3hZNnpnSGJRMW5Rby96a2RBeFRSc3dpd2JRNG51VXBIQlhrc2xZeEJ4Y1ZxYzNOcVpNUGZPWGNGNXFvVy81T21LajlPS1N1YUtRVFB4TDh1d0RyWUJMR3ZwRlJjQ1NlSFp3N0ZoY2cwT0VERzZEUFpUMFZYZ0MrVVJSRXhkb25kRktpUk4vRXFvL3B6VEtEVVNDYld4ckFkazJrVWxYMnlKaW5OZXNSZGJiTzZHcmVaeFN2NUpEUFFoN2xlcXlUVjRERHlneWdnUHhPUFI4QW55U0g3L0ZXNWtoaWV2cW1QeHY2VkNWbExjaDhrWjgrcHhZMFd0eUNxa3hrOGRQcitlcjRhaW10ZGJLTFdzVVVZMm5aNU4yckdScUVsMU5KeFljdFVPejRXamVmZk1hWDNrVmRUbUlKeE1MS1pDWWFQelFhenEwSWNSOGhCaERKd2cxbVI4SUdoR0N3UVpnaHc4dzQrb25aY1VWM0tOeDNoOGdHMjhmR2hzR3hsRDZ1bDY2eWJXS2EyMGhSQ3h6UXdiVGNaYjBoMW05NW1qUWRUMEpJcWpZLzhpcURNVE9XKzY5TnJ1UjFibEJia1k5WnRaeTBLdEpmR1lnaVI5OHE1bDlOSlBUSEpOMzhVamdlSGNZMXYvSFVwTk84cDVHSWxHRERIS3RVb1FqTWExYTI5RkFpQ1BWS0k4N1VqSUNsKyttcUlHd3JxMm5QNXg0SlRqL0cxRUxWVXo2Y0RmbUd4R1dxVGh5V2pGbUsrL3pZdHlRc3lHckNycm1MUUI4NVNiTysvdXhkb3V5d1Vlci8rQ2pXcnNReTg2SjVRWXA0em02WXErSFA5eUcra0QvMzNObmY0NXFFd3FJb1ROUGs1ckJIdnJGd056dTN5WHB3NzFINjFSYzN6RmluUlQ1MndrZHdVb1YyU0QrOFRnZXFJYXdmWGlreWlTQmVKeWh6RGhxWndHN1FJdWswSHdxUllZSTlpYy9QQTZwSE8xR0ROUXpCK3E5VXNBYkFjck5FUW55MlZRMGVmclluVnFpL2tsaDY3dDd0dkNCVkw0TTVCRTFsMit0a2IyZzdLM1R4MHZZQXUwVmt2TVJ5UHpiMmh3c2MzQno2WG1kTnBlNittSjZjZnJrWmFqOUNXUCtRdEhodDlwcXNEbnV3MFp6UDVrcHI2NytMeTQ5bURWaS9jQ3crc2FkNG8vNVhlT011alVReVROanZzR0RleldqY2pGSnlUbXZ4REwyN2c1dTMrMDZvYnFZT0NRUzZ4My9iTnk1UzRGa3NSbHU2V0pBbkFQbGNqTlJtMnc4bEJjS250VHp0d29tUEdXelNGTnJRUXlhTHZXK0VnYVlCLzVEdTJlNzFyWFlUV2NDU0J5Yk0wSlNDZThzWkJMa2tvbzlCVDBMTmREeUczVVhSOTlDdURmRUZobFM4R2JFdVhQNDAzbUFQZ29sNkFRVG9lNXptRVpEMUZLajc1Q05ZWWlmT2NXN2FzL3dBOFFueEJRYkllSUxYS3FGZC9GMmJ3dWNmOTFXY25MbXBMbGVvNmdUQXNkRXZTMzJmR1Uxd1p2WVVJUmYycGE3NzNpQWJyaWk3dFNjVDd5T3dOa2dpb01XNlAwSzZTOENJYWlnaTg1NGZKWGFHbkxCSVdINVVzNDIrV3d5dXpBQjVMeGdzcXdaeWVzQ1FFaDR4dGNiYm5WZFBJMGlKa2U0dXhDM2k5Nk8vejhPV3dJRkM3QXpxVFFoU3hWSTRVeVZxVmh6ekdDZDgwU0s0eFlXcmNmeEdXTlI4LzZ5Z0d1MU5PRkt6UGFxdU9ZUEVtcm00dDFFdGZRdUY1R2ZKNUVNWFJ0cnhHaUZLUmxLaFpSeXVCaU5xNXBBLzBReTIrNVNYTFh4dWdpTVpaNmFZZ3c1Vnc2N2FhWXFaZ0YzMkxURjhHSHcwWTNDaTRsQzlzN2FZUWdqeW80WHU3TEJGTU9NVTVoallqSDV2a2RHcEk0cUwwMVJ3WGtzbWM2RWJGZ2FCNjYyWnlYeFJFbjA5cUhyVjVDZ1daL29RMHVTZVFlZm45UVgvZXRmcVdyWmY5UEw1dWdOV0NQNGJpVUt1cnpPbk9kU2k0VC8wVFp5VlpMc1IrYXFlcFVHWngyUjhNQlhkRGs2N0I4cmlHRHNVQU4vY1N6MmJWaTdqdnduMG5LMkpMMVhKbGxJbkZzTEJhSzN6UkUyWWhZUXBKT2VWZ01KY2Z3VFltSThOQVoraHd2aXA4eStoNEdScFZhVUxHWUlOeEtMTnBWa3FTaEFSRjJhdWlKbU1BSXMyamZxQ2hwdkR2VVNweTd6VGhXb1dKeCtSak9ZUGo3dDZiSEJUUWx5UGl3ZWowckhMQjlZYnZyWmpidWtEbEVHYzN4UmRBM04vbVdTVmRFbTJhY2JlL1hFMU9sZFBaeTZOd0xoaGVyVzNzM1pIM0RPNzZvSERVVG01dEg5YkU5WURMMWRXK0JqeUJ5SkQydTBZM3VCVUZpL2ZzWUxFNGQ1dGhEckRGbW5BVmJ6Njk1U0VUYVBHUERMbUlHR0xvT2xDOHl5cFZLSG4xdS9uckxuZ3pOR21QVXRpOEozSVRxRXp6V2NiakkvY0RIc0c1bWZIV3FocW9zbHRVS08xLzVteFFnSFJCaDRyQTRzR1FETmN2TVRoelkvRFhMSFZIakdremhRZDFLQjVUSm81NThGRzJQaThSVEp4dHpPNWtQeTJaRkYwOGF3Z2tnamQ3RUd3N21SMGU5RFZUbm0vYU01UHBsTlc2NGZzVDRSVG9XYnBseFlFTERRZ29qVkpneGJjeGRWSy9pYUZjSEdpS2ZpMDVsSTRjL2tHN242djV1VUdpMHIraGtsaUdRbEswVzdTcHQ2dE5ZeFVmNFg3V3I0TUY0Y056WG1TUTdBZkpuWlF6SW96UHAydlVPclE3RUtneXRWVXNBNWJ4amVkakJGUVQwKytnbXNpMEJIM0l1Tmd1QjcyZE05VDVTazY0aE5BWExuYVp1c0ZmUlhnSjg5UnF1ZTRpMjNyZVJadVBwTVZLQ2pjVGk4VnR6enBNejFGTTV1Z0JNV1JsM256MmJJNzNsUUFGRUhjY1JvcGhhWW1aelpuMlZYSUw5ZXNyOWVpTU9Yb3hnSXdUNnQza1AxTkpaMzdROFQyU0MyaHZiT29SZ0lvLzNXVDBjVDgyblJYMWhpSUN6Yi90dHMwS1MzY3hSZlBTclBxNzdEREdncEFKNHMvbklobHRqaklzeTUvUCtMR2NFTnZ4ZG9XUEk4LzhMOHg4SHNncXNSYW5ncUFEajFoTU9ZWEN5RGQrTFVUZUNWU21sUDY0S2UyVDhOaWVBWlhybjJxY1VqaGsveWMyUjZFSFpPcW1GZDNBeGU5T2RMZGs1bXVmVlJLQXNnRmxFbUdHK3dDNDRqY3dVNUtoVmZDTHJJb1BTMk8vaFhENkhwOFVZM1FXbnovNTEvVWpvRTZ4c0NJQ2J6Mi9ob1ZYWHh1bEZ6b2NIYmVmMytvQmVPVkdCQ3NoRmFBTFlqc0lEVGprVVIxL0ovV2xLaUxFZi9Za284Z0cvTHFqdUVVbnl6THU1V09ySjQvOTFOd1BtS1laQVdCbjB1L056eXFoOC93QXdaNHptTGxUNHJwSzRqTHYxSGlxcUtlNFdZM3NRTVhqWWdEZjhxc2E3YlZrTTZBSzBoRGlTVkZKWmQraUFEZ0NadzQ4N2pwUHIrSVB0VkhBaU5sdm4wN1NmajZFbVpOc2pmREQ5dUZJM1pmY2FRK2NDK241aVNtRjZ4aHlOSnZHM081YTFadlV3bGd1NmtHTDNZblJjMTRxMXE1UkJ2Uzh1YTRGV1lRLzdUSjF3VXd6czlxUzlDZ1EzbGRpZ2pwMEdCcjRhSmZBdGU1WVNYb2UvMnNTMUJidk43Zm5uWWdvSHpBV081Vml5Z0lBRTgyay9Ea1ViSG9QVGdpYXRsRk1CeW1DTStNUXhRSDFhV1c1TjlRS2EzVmFaQnk5VWh3R2I4LzhxNFdIUzBSWFpJUnFTVFFGNGt0eEJHL084WnFZcklJZkdURDBPZDZPSmRlek5YMkFWM2FFNzBPVnduWFloZXJiNFlXQkMxcXVXZ1hTNzZ6MEF4YVdsanRPRVg0Z09sNmZjdjZYZ3lVT2ZoUTRhUnFKZmd0RXhZTnkxemNuQ3hoL0ZmQlBhQnZ4U3BKS1VGQkh6MmgxSHZ2a2JMWnZNcnpsVXdWTzZId2JHZHlPamJvZHk4QWZBVUdEYzFDTDBzY0JlTjZGWDhHbENzYURuYkgwTjgwbVo5ZDVVOTc3Q0FLTW9PdU5MWHVoaVppMDhNOHlYVXI1WUF0aGgwbGk2anpzaEc2aUhqaytQZ2Q2Y1NwNWk5MUgvTm11cE9uN0RUWFhZSHA0YWR0OU8rWkJNTVhQeWpvOGgya01YbFpuZ3VVSThnVEpYS2kxRzdFWU1EVkY4REwrTlRRWEVidkRuNWVrV0FtUXFmV0hHNEtKR21EUS9aYXNyNisrODVOUVFOVDM2Y1NNODZDcENKVGM2TW8vbyt4eXIxZTBuSmxabmxIaFhTVktvREV5cjRsL1lZUGFmODluT1BKQVdobjArTy9IMDhoNllDc0t6R2hWSzdwSjNUV1lOM1hyclZId1crMWJGMzhJZFd2V2l5QUZWbWhQQ0lzRjIrMEFRVGJiVDYxSjNSS3NuSUJZZ09NV0J5aG44T2cyZHdDUXNhdFZsbTJRODFLTUViMnRqditaM2pScTgvWi9sVytkSzliSEs5KzE0eG12c3B0eVFGVHRsWE9IUHEzYndzakJNbDRMOFk5cmNaRVA1cStlUEk1RjVLaENTVURBanhQOFFFUkpVK2wwcElrYWJidXVlVkNHSlNwOW12OVhkMEJieG0vNjNIeW5jejc2L05MV2VQUzl0ZlFEV3p5eDVpcURsd1A2eStqei9MSGcyWmEwbXpFYnNmU1JLZ1czb3VRbEhTZWNmMVcrUTlsQjkxZzZSbmdqSTZkcndTNUR0ZHRMeTNpSVQ2dzExbmVlNGgrU2creDR4emZ4MlB3ZHljYkczNWxGcDIrQnFneGpyUWFtQXJuUlBybU05Rm4zL0ZFSXR3dzBJVi9mTTB0UE9SWFZUcXR6UzlkaHpWcWNnaHNyMDRwWU1xOEFWQVJPa2tVMXFpa3YvRmkzMUNGN1p5a0FBY0lCSnVzSFBtMXZ5RlFpcFNKVG5XRjV3WVpLeTZaR3ZUYnYrTnZ4eG5lb1UwOTJkQmV3aHg4K3MrdVU5VTlaOVJFWUdpQzBtUFlpdnMzem5pZzJOb1dXcWdZOHBJYnBJOUpXbTNXWkQ2eEU1RnJ4SEZxMkV0bWZFbHV2bHJFTTUwRlN6S2JCSVQ3V280TytmSGlaSE1ZK2xEUGRUckxBbjduL2V3NURZWWhyKzJaZVJmdmJuMmkrSG92dEZRS3RjR0ZWK0RXbXZHaWNWdXR1enNuUnVXLzBscnc4R3QwZ2QrL1BPTitiZW5xMCttbzFpWENQdVdkeGNqT1ExZFlhZml4RExYUVJ6TkVVYWlnK0p1K1l2b0hhZEJMNFFlRHJFenFJWTNxSjlzZ1VkWVJBZWFrVkgvQVU4QjVsYU03UWFNbE5TMWhtTFNPNjU1bjJvdGFFYmlGN3RjWm02SzlBaTVrc081UFAvZHZYT0dmd0hMRXowWFg1aFErcUo3VVlpc0toR2Z6ZnRxaCtWSFl6Q3Z6Q2RhdUdydEJ2d1R5N29qTHAvUWV5bk5ndlo3UithWW1WdSt1RHVRaE5HNnF3NHdzbDAwTVBFU0RHa0llVVhyTjZNYzloV2ZsSkxMdndYMFhwZ3ZZYjg4V1BzU2RKMXcxRzk5NzhPVGhFQWRNVys5V1BtcnQ5QjNSUUc5aXVYaHhXcTNRbUorTmtCK3FubzBtMUlKZGw0M3IydWxaeTQ3ZUR0Q3NZY1ZlTmdOV1l2d2lkVm4rR3VZWVpULzM4Mmc1T0xxQWFiWCtUSFhuVFRzeklXRVV3MGliZ0RNVkkyZVJBY0MxdFJzVlJ6MEJWR3E1aEJTdEFXTXdSdGVjYmdPMnozaG9RZE9xTnJJRS9kVUVNM3BpblVlWlczSlI1c24yMHI2enNJVGhiUmN4RGUydXpiK2JxUnM4QXBLTHNxTEZXN253OHVNYklubzlLaFVLU0syRzMzWldVczkwTDNhNGgxQm5FaHkwMjg3SFd4TnNhNWZwMmJUdGNOSVp0N3pqN2Vxcy9HVldlY3BXSzZXaS9BYjNtQU1hWU5mN3MxZmxFVENUR0pSLzlDcUljTkE1N2NwcnlVWXpzZkFnYmNpdUVPOEpOYVVaUUdPMWpPZ2kzWjM5WDZnWTZaVnI1OWxTekFDT293ejhrRzUyY0tJY2wvcThQSzBFSUI3bS9kUVFSRythUDlkNCtjZUxxN3I2ODJubEFheWJhUTlPd3ZZVDBhL1BUY3NwMDk2dUNTZXZYQWVpTlpXWVJzRGFHaG5kMmVJYVVsTkYxcllpTGRpV3JwbmN6bU1ZL3pNdm5MZi9tcUxtVHJjdCtLNkRUVEVPSi9ha2dFc0dFaWpzakpWQUFybndvdVphOEJDV0xqdmRLNjlERzRsYUpINUNkaC9FeSt6TGRGMXdIb0ZqQk1SZUZPRkhyVzNNcDFObTlJUWZ3TTVrK1hrK1p3WE5JaFRkY2xZZ2hkaHVxM21MQ2RHUk42WUw2NVBrcVdoU00rMk5OY2pFWFN5U1c2R2RDWFhOUTJkU3hjSGFVaGhaRUNNa1hoU0NhNmFvOWk5bVlxVGVBSFRqWUpsYytIT1c1cnZoK1F6V2ZGb2FHL2NPUUtsbkdselVxSk1RcjE3T09kNnVUNXJ3ckltcXZ0RG9XUVlDMTZLZFVhMy8vWjwvQkRCPgogICAgPC9CSVI-CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24-CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I-MTwvTWlub3I-CiAgICAgICAgPC9DQkVGRlZlcnNpb24-CiAgICAgICAgPEJJUkluZm8-CiAgICAgICAgICAgIDxJbnRlZ3JpdHk-ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8-CiAgICAgICAgPEJEQkluZm8-CiAgICAgICAgICAgIDxGb3JtYXQ-CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24-CiAgICAgICAgICAgICAgICA8VHlwZT45PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MVo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU-SXJpczwvVHlwZT4KICAgICAgICAgICAgPFN1YnR5cGU-TGVmdDwvU3VidHlwZT4KICAgICAgICAgICAgPExldmVsPlJhdzwvTGV2ZWw-CiAgICAgICAgICAgIDxQdXJwb3NlPkVucm9sbDwvUHVycG9zZT4KICAgICAgICAgICAgPFF1YWxpdHk-CiAgICAgICAgICAgICAgICA8QWxnb3JpdGhtPgogICAgICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24-SE1BQzwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPlNIQS0yNTY8L1R5cGU-CiAgICAgICAgICAgICAgICA8L0FsZ29yaXRobT4KICAgICAgICAgICAgICAgIDxTY29yZT4xMDA8L1Njb3JlPgogICAgICAgICAgICA8L1F1YWxpdHk-CiAgICAgICAgPC9CREJJbmZvPgoJCTxCREI-U1VsU0FEQXlNQUFBQU5pTEFBRUFBUUFBMkhzSDVnd1dEaVlXQStJQmMxOHdCZ0ZnQUFBQUFBQUJBZ01LUUFHaEFUa0lBQUQvLy8vL0FBQUFBQUFBQUFBQUFBQUFBQURZUWdBQUFBeHFVQ0FnRFFxSENnQUFBQlJtZEhsd2FuQXlJQUFBQUFCcWNESWdBQUFBTFdwd01tZ0FBQUFXYVdoa2NnQUFBVGtBQUFHaEFBRUhCd0FBQUFBQUQyTnZiSElCQUFBQUFBQVJBQUFBQUdwd01tUC9ULzlSQUNrQUFBQUFBYUVBQUFFNUFBQUFBQUFBQUFBQUFBR2hBQUFCT1FBQUFBQUFBQUFBQUFFSEFRSC9aQUFqQUFGRGNtVmhkRzl5T2lCS1lYTlFaWElnVm1WeWMybHZiaUF4TGprd01DNHgvMUlBREFBQUFBRUFCUVFFQUFIL1hBQVRRRUJJU0ZCSVNGQklTRkJJU0ZCSVNGRC9rQUFLQUFBQUFOZDJBQUgvazk5OUhHRVNMQzBiL1pZWllxVjNuUVZ4TUFXbXpYeHFEVWhlNFhZaDk3V0RISCtoR2RMV2c0bGI0elVrSlIxMFkrUjYzaTBSenl1cFc5N0VXb3RHNnRpUy9TN0JQTW9qMEFKWVpRUzQyOHU5VlJodkJHQ3p4dTIxWVhUYnpqcWpzcVhpSGhBeXBjRTkyRDRrUmxpd3FuSXE2M2l4OU9VNGE1Mm5INVEzVHZKbXVQYk9BTGkxMktTdXFNTXlGZHlqbGIvSDJOOGZZN3creHVCdEU0Ry9lblRvelg2d215SlVBSlltNWZ6SE5OcERmSTdkNWo5NFB6SEJ5eUFqQzBvRCtDeHhtRXhwL3diMENRWktMOFZiMnZyNlhXeERmaHB4ZnpYK0JBMVhUeGJBZjFzdytvOXFkWEdBVkpKRDBwQ3FqSlpSKzhXV09sYmdZSWRzbk1jSS8yaGUweTZwNUhzVVdkb0hUdUxvY1V5YlFBNUU1WUJramlvVXFHckJQVkpmcDVoREdOR3VTUGtVNGc3dlZWa0JEMlgwQWpzZU9IYWFjME1CRHR1bUhobTVMSmZ2NXZUZm1SMzdQRFBGQ3Q5VXdGUDV2VGJhQlNPcG9oUWg4SnBpRmlPSm1aQU56L21uSFoxQUJ2Y29kblArR2tKdzRhNkhENzdOaDJmSk9TRkNKMCs3WStGTGhuVndDQUE3SWlqcFkwWDZWYXhOeHQxbmxyWWJmaWIzSjBJMU1uS0FpZFhNQTBaempBNHN1U0Zkb3g4N3pQNEJqRVA3Q2xGVndlOUt6NnNzSDY3dkpGdk81Z2tBQ3RKQXdTOC9wdlJaUkFKOUJQWDhXbFlsTVNnVkxTc2ZVWU5YNDhxTVpBODZtdW8veDltdEVmWnNaRDdOY3EyK2tYdFRZQnU2MmtEOHozU3NXRTcvZk9SMC8zNVJjQVEwSlRVWXFHSTBNeWhncHlPN2xhblJjcXBpRUxLU2tqbSsveDNZR3kxRXp0a3BDT0FLNGZ6MVJOTWFYdWpoTldhcjVsb2xGSXQxRS9DdUZrbUpPM3IxSWtlOGNQOVFXb1JlT2I1OHJkQnZJRUZBVk9vZzlWWGw0czRPck9wSStPN1NLTU9HNkxkYnFQMGZvVlhPODRtUUNmUUxvdHcrYjcwaUkySm12cUNPRW14aG50dlc3WU8vRGVlOUpPbXFMV0oyVTFya0lZdGgrV25CNGZ2YXJWSmVKY24vUkVDTmtlODJnWUhUZlRWcmdpbTQyT2VBNlFRT3lHZmFtbW9rcmtya2kxUFZiMmdKYkxYdE4zOTVlWTQ3ek1zMU5NUlk2TG5YQ3k0QzVYVlhONDlvU0FFWlZOT01rdlpuR0ZjQk1BUWQrSzlzWFdWV2JNOWZ0MGtNWXJZZHZNRXdqTFpqbzNwT3BnVmZaRWg4YklOdW5jQ2UrQzlqQ0I3TytyT1J5RUpMc2g1UWlVLy9LOFFsZ2Via3VoRjRmSVJrWHBnbXdrSXZzMVBkeVgwWTR4RkFCTWpvMDl0N29iRDVMSVhUQlRhK0hldkFJZWdReWltZWIrSlRWOHhDSUdieVV1b20zOEFsQXJXWkNLTitoWk8yREo5YXNlMWVGcFk4enlUTjJ0UTJCYWxKaU9LK3JmZ09WUDhBOC9Mam5HcTZiakYvTEhTTlhEd2RwNUUvVENUT21aNTFwNHRFdEhScGk2aEFSa1d2NURzSFlzbFRLdk93dG9zdDZJZVEzZzZ4K1VyS0lwNVlmT25SdERjaW9FUDRyLzJ2RUtMaXlFMUJ2TmdsUXZsb05BSXhyVWNpV0g4UFZGOFplb1hHbEhhaEhwclZoSVlvTzRJbFVSZ0RBVkwzeWY1QTNJY2xaemFoS0Ridms1emI4YllpV0hGeEhYMHFsTGFpZGYwNzY2b29VcEVudTdCeDFESW1lTTd0TGdTVGxyNDhGTWN2Yk5YV1ZJeFo0R0lwTWI5d3lKZnlUSzV4WXlNM1NyRXpKdWpLN2o4ajEyaTVvckdtbXAwL3ZNdWQ0NmNzTG1yQkJRRlV0Yk1SOGgweXhmdG1mUFQ0aTdBUW1wSFNrZnprcytWdFJHdkMwbWIvTHIxdjAzRXN1bCtIQk9zMHRIOEo2L1poTUNKOGRhekJvSHpleFpvcWhzWXFqYUticzhJdFJDeDV1UkVaVzFyNm5nVnlhNG1qQlM2R1E2YmRnSVN5UXN3dEJSS0VHUmQyaEdONzliWUpUaU9zVkNpem9id21CSGFORlprUmtGdGRuWXdhKy9YOVRRQ1BFeXJhS1Z3YmNBbk1mVlFUdmlDMzVqWmRXSFM1dklHdWdaRVhJQndOMkptYTU3Smg3dnhXTUJ5M0wxSDVsN21qLzIyTWZCMTh2YXQycGZCdk14YzV0YVJ4TGhkOERyZ2tnNXllVUd0dHF4bXhSS2pIRUVmM0pjVEV4czM3NHMvdVMrd1R5N2ZBL3YxcHhBT2dSOHphem9CdXl2MnlQZGVVZWFQbllacE5JNVJVQXpnWEptY1RLYmRaN3kyMjRscDFjVzg2Vy90RzRTSmhkVmFnUk9va2tnVmQzNU1YYWRBbUkwTUs2eEhYSnNQVkk0ZnlWRExNMzBETkZDdEJjUkFlNThaWDM4dHBxOVMwK1Rya1prdUVVRyttZkhYRGtQWlM2L1lGeXY3c1UxWlJaa204cTNwWWNQNStjSWxZa1VzL29FdXQvM3VLaHBLR01jblVvTG0wUXArdS9sV040SGJIZ2ZwUFZ6YkNmRzNoQ2JmMWRxaGZwZ05ZMDlqdElxbWRNUUxNNC82QlBVdzdaWk5aVk5LQy9IN0U0NkJaTHFuSW1OL0hhOEdNaHNpZ3VsMngwbmhuRzY0WjlHNzNMYU56UUhkRnptZFhvS1JxOVQvUHc5TDJQdDlQdUgyZW5tQjdYSk9kYi9mc2lsWml1TFp2aVYwUUczM0I3dTc3QTM3YVU4Z29ZQklzM2tKUERyODY1Syt4bTJibHZJRTc0YzIwZ1UzZVN1QVhMMzlrYWpBU1Z5cUxzdk0vM2JXS1pmMFlldFZvQUZEQ3F1b212ZHZZRUpmQ2J1VGt3dVB4YzJsT1oycXdONmZtcWVnVjNwNytOZW5pclBodXR6aHpIOEJ2UEV2dmMrak1yOUp0MkJWVGtwbDM4NTJEYnBBL09sQkVMT0h2c0NkMFlUVEExWW5SLzNwTVpHYXJzYjM1WWtSb09PRFJmQjM1dExQU0ZUTm9lQnZEdTRtdXV4RXVEOGhQQkVhdXlXcDZNYUZVMnlFMnJjdnZHeHhZd2Z0Rm03ZEZyWHAwOGlFbDl4dXBsWkhGTDQ5ZDNkbmVxMXc0NDBFWWJVQ25XSCtXVTdlN1lRU292UmNsd2xqTW1OSDhkWExrY0Y4RExWbWJqeDljdUhMRmY2Nk1rTk1lVnhyL1VIVXd2a212TGt1bjBncXd5YlhCcXl0ZGRBN3Z1VXgyRkx6T2krZEhGK2F1OVNKQlg5YU5TaFVZYXJmb2hmREM0Vjk5S3J3K3VySW02alczdUcremRmQUJXWXVadE1FcHYrOUJHRTEyU0sxZytjbnBRV0ZUdHZJbG5yKzQvT0FGTWRJY3J2eXhyd2JDTjlDMXVSV3QyWnl2YXFaSWFVelFxTWhGTlhkdis3d25uMjBEaG1jazY4VTZZZy9CSkxHM0Ywb3JaSGV4QXdvNHdMOG1OSGhMdStybzlVZTM2MUNjdE5lekRVTlVsWDN2dGI1YnUrN0F0VnNLZkVvKzRwbXBjOGszb0VYNlQ3bGI0NEx5TjRyNjN2QkFKcEtpbUIzTndHcTU2c1BiSnR6WnVoSGttMEM0UVF0VjdtajBvR01vSGdXcjI4a0hOb2Y0MVVuUUxRbElMNEtxcS8xZit3YmdrL1prL3M2encxWXZVY08yK0pwaGdYQXNRNTliMytydzdUWlhYbG8wSG9EWGtycmJ0T0xzbXBVR3J3SjdpVzZTNWN3S1FERGRpbmgxcFFQbENwRkFmMDcxRElTcXZFMXdaUmF4ZEFiRWFQVHo1WXE3MFpwd3lFWFBONmg2OHJ6UmZwRDRPTnJsREpqV3FSVVR2KzBuSUEyYjYzQmM2T2JVRWVGUktUUmg1RWt2NThUa0hjL3l2WVFKMklQRGZCS1hVVm9qdk5UVk9ZNER0MHZhWi82d0RLQk80dUc0c2ZFMW9UeFhyN3BteStFUWJXejh2Nk1Ld2RQS0NMZXVEOU12dUNVbWl0ZG9VbkVEMklCTlpKVzdqTTg4YkxQNW0weFV1ejY1NW1Ba2ExeFFMTkJLUU5ZRFhjQmwwSTlwTnpNUm9hMEY2RnZHR29YYmhvTldrTzFrbXJNbTBvZVVyekx3MFBFYnBTRDlMSHo1Z3RNZmdPMFg0bEUxeHJ5MG1BTmhaL0F4YzhMRXJ1SFRESnk1Sjh2YXQ3Vy84OTIveGorMFdtaEwxNDZYRjRkbUZQb2h0VzRVTmV4NVN0bVdxbUdVNGc0YXo0UTUwbjljL0ZQRnBzekoraVNKaTRKR1M5dEF5K09HRGduL0lTQ3VzeXdRZDRPSTNDRHV0VmRHZ2dvZmxNS3ZjY2x2aldlUVZWaHJteFNnU3FqMFQ3T1RsdndvUEEvUXVtUEFvdEFMMTg5Y2J3ZHh2TUhLZTlhWFozM2t4RkhTUUlodVdheWtHeHR0MGRqL1ZYT1NpeE5EVUN3QStRb1Nhb0p5WXBLS2dNTEgwRUd5VjdPM28rQ2licUZ2RExsTWF6VUdZd3FIQWRDOVlSVG14QTdLREhNdFRGeDJXNXF3N29JSkxQSW82ZXdPMnhZQ0pSWFVudzUvdDdPeHZxZWdWT2NyVkgvdmw1WlRzN2JDRU9pdzI0REwrYWpQUkVqVEd3UXFySlhQSEVqUVZIcy81bndpYkcxK3NIVnpuQmEzSW9KTVJ2VG9xT041c3JDSW5RVXU2MTBVTUx1Uk5UYkxqbzRTMDhSKzlGVnFnZzZjQ1ZDQTAxKy9qWUNPODNmQlBWTWxkTHBOUGZTbnRTOHE5V21sMGdFeGNsYkh0R3BOdzZpSUNUemhSVUV5MVd4a2U4bjdBajJDbkpBN1ZCRXJPTlQ4UHE0bEx6K3R4LzVwdmZKcVE5K1FXT3BBQUVZZUdiYkpTMFpEcWg3NFpQOXdOMTlGMmN0ZDY3cDg3bzBLZitzYzJPMTRPeHBoaTVucjRDRHoyaVIwL3dqRllJVHd6enpDM0dEb2QwM1RFU1F5akdvbkZhQlh4V09xVk1Xck11Ty9EM05iSnpqSHhSQnlLcnl5a1lLTVYyeHBIK1Bwbi90OHJMa0lYSEJsS2k1QnhTRXZIdDN5d3NtQ09aL3E4c2E2TWlZeDgrWUduZEJJTmZVS1A3eWJSYkp1U2lCTDVTTzlUaG5OV21hNG8wVHpTMzZMajNPWEltcHZSQVFtNTFnSXp2UmlvQUIwU08ySExpbnhRUUtTa3N1cXMzUjBqT2xZbG1nd3JBQml2endqQzgyQ2M0NmhtNTVqYjl3QXdCY3hUekdCUWdKWG13OUFtZm5WY0tPUzExRXdCdFhXRWxBVmtHQ0JaTm1JVXpzTkVEUlo0aE9xZk1ZamxDY0tsTHB5aVl6UWVJUzlYMkVjM1dEbmNENlNuMzlROXAzQ05rSUhYNkNEL0RwZTRpdDdNYk1YWC9qVVN6ZDBOSFJyZlRIMU1HWUJzM1V3ckkvSWkrc0Y0aEgzS2xKajRseTlzTVpmOUhHcGVMNzZFZ0RhdlBVS1Fuakh3eFdxOGVNRTRvMDhZL05nTnFGdXpqbGRzTmdDbE1IcUVWYUJxa0xlUys1UXgrUjIyVkpwVUEySUxoNmozS054ZEp5Qjh1MFpsdkNXUGw3bVRYcktQYUJlZjRoNU9uWFA3SWpnaG9LZnRyRTB6NklBU01vQjhmQlR2T3hXWmg4UEU2TWlQWFFLcHNDemI0V1V3Y0pWMnBTQ3h6ZWlzeVlSYU1zbWFiWkkraCtYVTFNMFdjZ3lqY0t0TkhjbWFtSjdMMHpaU2ordG9zczU3d0xXVHNwRlIzL3hmY2lDcHBRZ3diZzZ3NTVzRU1EMjNwL3luRXNJUzVhbDdld0RuZWhOSFp5YlBCUjZRcXprb3ViTWZ0S3UrMU95YnE3M2toc244OUdPRm9tbldCSGxiNFpQWFg1emRwbm92aW0wWDNrY3NaZm1tcTA5VE5keFJicEJjS0ZiTjFjUVRIU0YzM3hLeDR1ZHZ6VTBtQzRRNjNCT0w5UUg1eXpVR1VHcVI5V2EyOXJySEpjaENjS3VMV3JZbmx2STcyZ2ZYQjV3K2MwRHpWNzE0NzRCVDZySHJrYXlIcDVpcVJxRFpha3VUVVlVbmRxTDl4WnN0VVlLTXJKelVLcWxmS0xTVmlxKzhHQTlLNTRxYlhMRHlBZW1YMGhNakRsbm5qQXRFdGEvUklkWXRSNnVnL215U25qOEd3UTNHS2VJazFVS256bnBTcE00NnF6UXZOY0hLVGZDV0xBMVNDNkFmNjBRdElDbXBnUVFCM3cyR08xUGgwL0JHZzFvMDVwdzVLMnJocVBoMThqajZYc0ZHQVJudC9kWU56RDRROE5ESkRldWw0OG9FRUNwdXN5Z2tiSWFnSjk3ZVo0L0Y4Q2xtb3drM1o3TXNDU09FV3FuVFZscTJ5Q2IvMkROWGoyMFg5d0tmYUdwYmRuamF5VEJSWC9wc1J5RmpJdndoeWlycFJKdlNJV25DTzZYcTZEUFBsVVJQbW9SbW1tOWl2eVdDQkh2U2JlWWcvNFczNGN3Ylkwak5EUHpOWXVRZDVYYmVFYnZmUU5hMTVwb0Ezb01Yd3RXUUZmMmEwV29YdnNmR0lrZ2xIcU44NEZqd0NWM2xXa3dhUERpVGhTbTh3S0tWRHR3eDVndzh3QzNob2lmNTVtT1dhU1AyMWw2aUdwZ2IzUGhVUkIxaTR3Y1RlNmxGS09XVHJoRUVmREVVTU9abTE5YzJDanBJYS9nUlkvWVJJUm5HdGFDMmNDMXBMQnFOc1lYakVOQ1lydG5mNHZIY2ltaEhjRXhLN1Noa2RUdUJrc3pMU1hCckUrcFFDVHFxcFQwR0gycGdXZ1drNVRFK2cvbE1WWHpUMHRYNW41WU9Sa3FlMGVqMjlVNy9BZUZhRGs0Mjg0ZE9VRUNHd3JZd0tVczAxenlmRWtyNmdlN2g5ZjZWT0lvQW9mNjRlci9QNGQ3TTNnTDVFSFFEVEVRMzl3L0NaWHFvdUpvUkRlbGJXczVpbEF4c2MzWDdmUnRsaURiQ0gwdkVsdFh4NXplaWVwa3JvOVVNczhyMW40WmhwL0c1UldmUWFoYm9GNDZ5ancxeGg0ZG1RWTYva1dlT1o1bnRKaHZBL2wrRWgyNVorSzVHQVJ5SDlRSTVMYWl5cUwrbVViVFZRaW5XNVQ2NjhjRFBOTVlKbUVCMUNmUzlGY3AwYlJUbkVkQ3VUNUVUbnZHVkRMam9XTGdZZDhwWnBtQTNCWCtTa1hTd3dCc1ZLZFhRalpjU3ZEQ2lSL0VyZWlya3EzREFvME5LdzZRZ3ovVU51T29RUDdkM05EZk1VQjlTNWFHUWoxRFhDdEpnVzFuZ3NZbXY3L2V3N2FNdC8yVG1UQXZwME5ZTENXNVNMeVZkVmhBbm12VnBHMEh0S09lYXlOVmtIMzY4OU9KanNRS09CN0FBeU52Tm9CZ2JTaGlkaUZ0b3NwM0dNZXk0QWRjeDBYUDZyY1RBcXB5d2xpVzNmNmMzdmZxeGRmdXdTUG5ic05oTDloalp0emwzRldmYUxJMm03b2dlclRHazhlKzU2ODFLcUJHcDlPSURNZTJFS0w4Z1NUR3dtV2JCZjlnekNCNzJvWnBtelB4Nlc2dTBETnFLa1VjZjVtcExsVXliS3RKZHVMSXNKSzN2b3NYM01uTEYxMEI4UFl5V2ozZ2JGZVM3VEw2enJOZSsvTHZYdjdBa2hUWFdlSkN0Sm1hUHV0MGhLeEtCckdXTE5KYjVXcXRTd2pVZ3J5VngyNTFUSU9OOUJmb05pamZ2THBmWnkyeDZzelJYY1oxZlQ5S0JhZCtmNnhlTTNoU0dBRGVBT1dVMHVhM2ZROGQxZk1GREo5V3g5d3hYN1NYRmRPNTREbHpiY1dEWDBDdlhPZjI5eGQ0d3c0Z2V2WUF2RXBVQzVMcTU0azQveXltUzFWYjFLa1RXN2NXZTJkWkZ0Z1lLUFQvSFNqbVJTL0JHVFZrdGp6bGE3V1A0OXU4MGE1MG5nTkduUFc0TFphZU1OVk84a0t0dGI3OEhscWk2RWU4Q05aMVBkZ0tBM0pYKzZOMDBheVVPVkF3ZWpaZ0NnUWRKaXNHZ0FKcG5LL1pWRWtWV2hVNEdxUThvYlhhK2hGZlFPZCsrRVhUbmt5bnNRVURtVzF0TkFyVUdvZE1GWGwwNWlqRkVmaHdiUFhjcThWdllLUm5GYksycDFob1V2SkxPYTFERnJnN1VGY2pTOWh2SWdkaVNyTlVnak9QbG9yZGhCRXQ5NWgxZW00SFRwcHBCM0pobVpDME5yLzRvZHE3cWwxQnByMEhZdmFPZGdYZE9FaHkzZGtoUFpLMVhjNjB6RDFqQmhlN1kvODYvTE8xb0toemw5S2FMczd2eW5taWVwZkxIYjVDdXJ1VEthS2ZreS9aOTF5UTNwMk5nM2NTeVRrZU5WUHJQbnRZME1hZWdKcnk5RXZPZXIwcUpLYXRtQUNnOHVpWjVXUjRnWmtOQkUyeGtyR08xNm5LN0hjYXRQeUhnRFZDaTFPc2hBOFdCNGE3SkppcEs5SFhKeVlJcHkxcTBObE1MNC9BcGdFUkJCeDVWYkVPVGpMQ2VVT21lQ1dPT2s5djJFU2YrVWtxTTczQnMzQWljdHFyZHd5U2dVV3EzdXFwYlRmZ2JpRU9BMjRSd1pROWFOWXFORlk4Zmh0V2o0TDhjNWlzUUEvU3REbW02dll1QzNXVzZxTCtLREhhVjVyZ2F1M3hWUGE1ZWlZOW5GbllTOWlHUGsweXI3VFdDZUFpQ0l5VUowZU5jVzNEdnhoV0FyK2xYUTM2cFBDYVg0Sm5aM1NDbTJ6SEprMW5mTm5ibEdYWE9MMmM1b2xLYWJvb0hUM2JqM2djNmpjbzZDTWNYdEFJU2w0VzlIWHdPbzIycXV3WmN1eGVKYzhDYXNNQmczc0wycXB5bnN2RHpHMU9GY2ZsQkdiOFJVNGlxSmJERStaT0RpZHA1NUgwT09vRnlCT2lGQjB4OTgraCtBYzV3TFM4UjJYN3MybHNlUmgzeGgrMVRUUDJWOE9uWHlqcHkwOFJFaUt6ZWo5VThWdkp3SU9jQlk1RURMRjVLWldQazkvbFBHYVlBWG1vMFh6aFZQOXR2R1pxNEgrdjBkeGNlVytkZjJINlVBNWF2VGs4VitGRWwwekpoeDRDV1BRSzVJaUFGR1I1Mld1VEp2eHlpTUZKekRPWXJBMmNCd1dVTXVBUktpUWU0N1hBdEIyMjAyMzB5ODBSazdlMEREaE5IbWxXcWlaemhPMUkyVWVUODFVeEpkM0d0SHJNa1dyeWVFSGMwK1AyZlIzWDAvVkpuejlXNCtUWHVQMi9TUmZzOWRQOXV2bDlWbVlmdCtrTC9aNjUwK2ZybGZWWUFNYW9kbEVuaVcvNHFBbkxTSHRoVmg5alZQQ1htRVFGaUZNTVpxZjRDNTZmZS80WkJESzQ1VFdmdzVMVTN2UjVJaHJQQ0w4RGNGeWZlWnVNcEhVc2FRMkFoaXRVbVllNVYvNXJ5c0NvYXdDOEU2ZURZMFl0RmhqT1pWUUE5MFA0TGRuZWJWeFlwZmIxN2NkUkVuN3pnays0cTJUQnJlb2hhVWY0R0RYQnRZeEpzaURCdEJ1cVF3Q1o4TSt1RVl1SGJzUXQ5eFdYdWlwNGNIVFkvQVVNMFlrZlhyNGlwbG5pSUpNSnp3d1lrSDBXVTk4RFlhOThSaUtxNjdoMUpnVUlaUWpRRU13UUZpbTIxS1VzSG91anRlQXYzODdaZzhVT1NDekt4MHI2RDhOcXdveFVXblFubGFNYTNUMk5pQXl4R3JRaTJ0d1pJbnFTaGhWb3NFZXdSaW8reHlwV2EvM0NzL0FiVmg5LysveWc3Rm9nYlhFMmJrNjFKZnAzOVVjbzFiMXRWdWUvN0JnR2V5ZVdnaFlsWGdKS0pOMXMwTDRCRzd4WE9FcSs5eGdjSy9wMlB3ZXFoSTBub3JKZGhRVHU0Q1VibEErZkgwSlRWU2dpdUZ5UXVEZGRDUkxEZ0J1V0lxaXQ0b2NRN3RxNWxnQXVySnQyMlI3UE9WRDNDZ1FuQS9kYW1DVHpGd1hkR0RvakVmOFp5dFhNblBLQTZlV3RKck5VRVg2bzlEam5VNzVNS2grb0J3WkxOQUlEQ1pGQ20vaGJqZ0gya05LRlV2TGIrWE9pbWVZTzRRcVNiVzNZdVBxb0ZiamJ3cGNqMjBzWGNmcTA1Nkx6a3lHUGVnVDNTbDhCSDhkR1IybXFkWldpSmFPaCtqUkI1MjhpSWl0VEpkTlhjRktjcFo0ZHpKV2NrcWpOV1pNWXlRYmcrL3lJVi9uc29wWEgxbE9RQ3ArNVo4N2o3RjEzM0E0YVZHK2kvWWVlMEp3UGVXbVVhbUx0SWdKa0liVEpvTFhoaVBOb1VRWnVMT2VqRXB6eTZTZWdwWWc5eThGZ0huaCt2L2JKVm8xamUvM2Z4UXdEbVRMSGJIdlNpa1BZUGZTQnpxVkU3b2M0c3BqRExleTZya1Y4b2FCbHhETk1EOE9mRkg5bktWc2l0YXJOSzQrczlBNVRGaW9Zdmdxd2NTeUxrbjF0SUlTT0srTXZaaFN0M09UTnF2YkpFck5aM3N1YVp6Q0JmMkpTR0JtdTV0L0psdUovNm56UFJqRnY4aUlTcEI1Z2pWRnRwa0RQa2VGMUkzT0J3K1RjbjZQR21BVHJTcXBNN1JGZzBYOUNGajlBcjhkTzNxMVlOZDAyblJBRlR1TThUclNiOXJzNlRUd09nL21ITU15cVQydVkzMmtUeXFhMU4xK0dmbjRxYXBQYlFJZ012WTVXWkh0YndzOHlac0t4eUtRL2JiYjJncDVlUGxpNWVJTGU4RHNQUXNBdWlZQTgyVU1iekt0TVZZZTk4cU9hL3lObUdTcFRWYXVNbTAyM1IxR3p1eU1YNURlcjZnQzFDcTJLWWRGcko2Z24vUnRDT0N3Rmt3N0FQcmxpV202VDRBWVZ4TUpycXNndVRqYjFKanZtb3Qxdm5NL0YzZ2tFOXo3TEVXMkkyZy81R3gyd29JWFp0dVoyT2FsOU04dVI2OVJTZVNBaENIMEFhNjRhWWVwNlhSV0czdUtFTGt6bSsyTmY0NUxoOUoyempScVZqNXFjZk9NcXl2bFlTVzByMk8rbkhNSTQza1RWVmd5RVFWRHIrWUc1MFhDTERVc2cxV0p5Slo4S2wvY1c5bzM2aTVYYWZwdDF6bWw5VU91UzZxQzZzL2hFQkdPY2dkU21pTE9oNUJIYjFjYS9RUFpnNElITS9Mcy9CZ0NMUTlQL1gveEU1SmQ1a3M0K1FoUDlGdFF4UThCT09oL1VJTDNpd2RucXFXVDZoNUI0dTkrR2tWUnpUYlNCYmpRRVhhRFBUb1pRRS9oM042UHo2ZVp5NzRIaXpRWWt4M1NsZEE1NmJ2bkVyWHNkRk1GWnZNQlc5ZUFnM3pSbnBaTnRFang2cll5dTNYeC81UG56VzVaZzdJd2VtMzV0a2UrZ0pwRG1HQW40Yjl4QS9Jd1ZFUlBYaFJSUmRNVUxHdW96YXhoczlsaWVudGRhWmpDaWphaFlWb21rMGZJNEIrVHNZdFdQdGhIeFJvaWE1ejJsNXN4MnRNRGVCbGl5NWF1Q2VlbTFySC9qWGdxSE9LNzIrVzlrUVYwdjd5b21WYVIrbHBFVGs3VWtaRjQwd3kxcEJaYkVvUnNUd3ZqellvQkh2TFExZnpDeG1HWjJ4R0p1Wm1VVHpCZWFUSVJ6TUhNdlBVVkhvMGJwVG1mMUZKclNuUTQ5QVdFY1R3U2oxTG4xckNHcHF0SEw2REpha3RseC93ZGUrTlFtbFc1Wkwvb1FObjk3cXhLT0ZERGRWYWJZbDFXTjJtR2JNWWhJb1dUMHZ0K3c0YzFnZmlZeDhhVFJSNTFQUDc4aUQvckpicTNuVVdzVHJBNjdESy85RG5rZzl0OFhMOVNyTzJSU2h0R0F3WkxRTS85Sm1EMDVCeWoxT1lBM0tSV2F1QXRpMWxDZmVXSDRHQk1DakxIOURJVDFIZlF6aDhBdGdVMEZjanhRb1ptNHdTR1plU0hudlIwM05SOFZYS3B2WUdpS3JzV0gybXhoL2pqcGpJUmdicC9BSHp3V0Uyc2x4ajBMckZuL0ZYbyt2KzVEZE52aDA5YzA4eC9LZFNIbVZwVlY4L0M1Zk1lczE2aS9oZXl6Rk5za0s5VDVnRXkya0Mvc1FBby95QzZnSkd3eFFObU9oVzZiYzZiVFpJaWl1UGR6bHZVK1Nnb3BEZFJ6RDBLT0lob3JNbkhoeHY4UFZSNG1LWCtWNlY4aXRSQmx6b3Z6WW0rcDJhSWZ3VG9pUmMwenZWZjFPWC83bFUzaXRsZTV2eE1GajRTMlM1ZHg0OW1pbW0veXN6cWozWUN4WUllL1NGRkMzdFNXdHBKVTUxV0hPdEhYa3RSSjBQdklwL1Z0SUVhbkd0b3RvcTh2U2lzbzJkQjFKajF4ZEk3RElCRVNGNlQ0SjIrR0FMZENUMlhIc0hVb2kvek1MZ2tFczd1RE8xeDlRMzk0ZlJPV3lGeXJXY3dwWWlQSHlvbTFET2czZ2tBWXhJM1lYTmlhSFVhUzF4VjFhaEZuUkl4U1NnUjAraGxSMWcrL0ZMUGE2cWZvS3lyVVE2MG1Ob1A1Uy9xbldJeXR3Y2gwZUY0blV5SFkwNG9VRldyaXlaN0J4SVFGcm1XMUt2eWM2d1NZekh0Z3hQN054cW5ab09Ddnhwby8xVGk5bE9BWHgvYTI2cUc1OXVhUEdsVnZWalgyRHRqTTRVZmJyRTFWRzBzWVJwYVFnVythRzZkMnJCMWw2emNocmUwaHliYm1yUDBmMlhCK1FmUlVRZHkwTUhVSlpjYTMxTGN0VFcxdXp6Q1p6WWRxYmVJWU9IOTFpbGFlNDVadGh6VEhuMmtORG1neThWNmtRaDB0KzFHdng0UzNYSlp6UDhCbG93cjFGY0FnL25oblFWb1Z1YjJpTDNuVzF0T3YwRG02THBnamFzd245TUgza0kza09mWlNicHhmZmVJbURLdHYwaFVmL0tvcmJsbkZoYkpkbDRXTnBoRWt4b3Jlcm9YK0ZpYSthU01hTFpsWHFjcU5PSkpGK29ydnFrZVIvbG51Sk05T2NmRnB5cDNHMTJiMlJ3THN5dEFTVllWb3kySGlSc0MrZFJLQU42YkttOVJxd1cydzB1bG1SZjNhWnlaZWhBbndqdk5kbXNqdHVJYXhHN1VzVUI0UWJEUUFZM0pyMEhHbWRKQmxwMVZxWkcvQmplQjlVREZsaGRMRkNMODBjZG5adzdHNEQvZWgyV2haaFlsb1ltQ2d0NmpBemc0d0NRc0FzZ2E2OEtHeXR5dEdmMnNBOVAxVnFRYWxsZEtmOHpvVVhqR1BCaGtwK3hobWEwRDdjK1VYeVZhSGl3RlpUVk5DbkcvbkZiZ2grVEJjYldFN1pqRHNUaDVpM3AwMmxIOXZWTmw3YkJsZllXM09qbE0vRG9iUnBSb1lncGYwZW9TUWFIZFo4NjN3N29RNEF1d1RBUzdXK0tNeFRVUGdvbEpyVk8rcjR5bjMwTEd6bkhXZ2k3S2xrOFU1aStWU2I3ZjNJbXlCZERXdVVOM2xMTkdQNVJaRWdQOGdQaWRZNS9GOEtXRTNHdXBDMGhmcnU2akdwYWUvUnpWVEdnTVo0a3pldmpjaTBLTFNXcFMrUGN2OHZhaU8rVFNaVlI2MU5ralkzellxRFZGemdhN0pXSXVOYytuQjFlNDNlTmxPZHBaY2pHRk5aQnF2dWl3YjB4d0YwQUQ3TzZjd2xqdzZXUCtCYlFaY0QzajJvQ09sMUVNUWxwTGFHL0wxOEkyd1dPYVJtNEFheHlGUnBDQm84T3R1WXBWYTJOM1ZPMnhFa3dyR3ZlUGxmSzVTNDNtbzNMdmtBc0haQ0ViWHptQk1KdzJJSWc3QXNSb2dacHJIUkhtUGc0ZklMY1F3MjRNVm5sem81SXh4b3pQUEZyQUpWbHhmK3Rvdk5oOElMTW1SWHNteGx6cWNYblY0c2FnUFRJTmQxNXZhYUR5OFp6R0dqUUtlbmJ3ekdjUzVySCsvL2M0TVc2M2x1VFZsTWQzZktucFp5SG43M3N4TGlPQVdQYzJWdmRjSHF4SldlR0JwZ0xFSnU0TS9kVURzMEwxTERDYlVsT0E5SWt5d2R6akp5WmU2OFhTN0dsWGZRK3pVODYxQTdrcHFoMjYvWWhHSlF5RWt6ZFZJSHFnWng1WjNPcDR5NHRxZmxFbFlRUVlQM0hCaGZJTTZISDJkc2pQYzMwSGdFZGdCN3ZRM3NvNjlweFFjSWlwYVBRRFVtOUdyeGVNSjg1MFl3QnFvaSsxU1dhYzZ6VVF0NkZFU1JYN2JaUUQzNWswckFTN09SWVdaQ3I0RXUzTEZUV0QrRGNYVmlOZ0lXb1ZTTlpHOWhLQ3JLRDh1bUZSMkNpaDViRkJGUjVsSXJETDgzVWV6RW1OMisvZE9SdzBkNTVoL0EwdUJ5NGV2cUdGcGcrbE8vclhhc3EwRUdJSlBjY3NKMndWN05FNk1WdWcrQU1HditDV04zVFlSUm11emFjdkw5WkVqMGhSYktsTzlpSCtweXhlWEduVkpuZExxUzlHN3JNaGRPWi8vUEt2dGlOMUZNYnVRcGkzaTBqTUV0eTZTQ3M4Mkt5NCt6aWVoVUtpdHZNSGVEVkxYdUs0NFJmQnRrQk9TSHpYbEZKdmpLZHRwWHZqSk1yTkZiQkszN01pT3J4ZFluOEVJYlBSMitPaFhVTTFLQTlUYzlNNitud01lYnBQMCt6YmpyOGpBYVBmVVZVdW1PYzVRb1AyNEI4ZFBIUmlGbTFmRy9zekNHclNycU0vWjJ2NUtJOGVFTWNlRmpySkZhaGJNdmZvc05pSEE4SDZrYkVwMkxZL045c04zYm9hU0hRa1lvT3doUnU3R0NtejBMSkRXNVh1U2tNOTJJdEhlRjRDRmFzQlE4d0hwdEt5bEEzOFU4a3Vjc0ROQytQVHNhN2tKdXprQlR4U1FBK0ErOUNjVkpaWFNhOCtYVndsRjNnZ2YrejMybnpBdlRhdWxuTU5LQTM2TkNIdkRVd2tsOURsQi8wV2luY21wc1RyVExodnY0TExPWWZDamlMc3YxSUhZOTZMR0pGdEFhMXREWnIvbnFMcUhFWERkVDdkWlIwZnJWK2NFQVRGbGw5ck9INmp2VWZRN2VwQ29mcHdibFQ3M25HT3A5ZnRONlBEQzViU0dsSUVQc3IvWlBDRkpEWVRzMDYzOW0xSmdwV3EvVGZCMnlTdkhMdEtRc0lsUFZGQklQTC9vdWNIRWY3VHVnczg1Z1JGTi9LWnVwOEFSZzdaVmNGOE10c2dzbC9pRU9pa2ZJVnl6azhSTWkza3FZeFp2T3h1VFBtWEp5Rzl4TjAyY1RSZ3JFTkNIWXdIa1Rxcm56aUhRT1NxNC9yc2xQNFN3MW0zVVpndkhjdEJtUzBKU3poUnByRDJBdU9KYUVHNmkvbDZ0alZjK0RlcGViU1krckI0NC9PdHFzL3kzMTFYOHZuQTNzenkvNmhOVEpIK1J2d3dGRzNEUzBmRit2eWRJOVFINGlrOCtVVW9KUXQwYi9ZREUvZkoyemxRekg5aWIrdW9GbkN1VFR4Yko4RDZmQ2gzN0xORW5QSHFVVGVBSDk1THY5YWJKWDNEQTlhK0IySkRJUE1KZTJnL3B0VkhYclBjN0FrWVRZajBvdVZ6SkZPUjJlODRSVlpoMVExb0VQbStnNFk0d1VPMWV4RDRYRlhpNWo2WndOdWF0ZEFxTDZzcUZmK09pQ3NJeERnSThCeWRjeStPK0I0S202aldaYWphbmloZjNtajJ4UVk3K2ljbndGa1JWZW02QTRUbmpBbmxzczRzMGExSjRRZVYweFRCaGo1RlZCM20xOUlDdzFtSm11YjRNUEVDVkpHRTIySzFMRmZWcEFzeXExQWpMMHZ0MXFLb2JrSXlMNUx5RFZLYm1VKzl3MVRXYWJOcTh1V0xlblhVaiszYnBTcXF6a1VYOW01dk55ZWJQZHMvRXpraHdjSmNQREhrdnMyTjFGck84VUorckJmZDlldndPRGVPZFM0SElDT1ZSYU9GazdnYUVrdWk5V1JEL1dYbXZJRlBNcUIzdys0VUYrSjZBckJRUmZXMW1ZQU54c3I4SGN2a3k1WGpFTVkxZHN3MjBTclBDODVmOXE3cUhCUHA5U3p1em94RmZlaVpHVmFWOVVONG0zcm8ycU9TVDJxeHdZdlQ5M2hOUk1WMCs3YUVpejVzRXZDQnl4ZURoR1FNYkNrZVN1VTBGZ1RDZnY0Yi9US1EvQ3pya3d5VkIveHhGT2p0Y09IU1lLQXpRYVR4K1ltRDN4ek0xYWFZMzl1dWtqTHA3M25teCtOSFBjeW04MU1tL09VWlVjNEVGa1I5NVFwM290b2M2VkZleHZzcWdlQzB5V05sS1dsU3RRUDJsdHN6M3l5THdabXVNazEwMlNQcWxjTFhBWTJObXJXT1ZEL3paTEhQU3hkQXpVTmdmWmNZVmpBdlRuWElkRVNyYWdxeDdDNGRPamxhNldBOU9Tbk16V1Z1blBPZ2trbXBHeFFJRzA1NnVieFo5akVpQk0rWFhsOVpuZmQ3Vms0cDA0QWxWZXhsVEFwa3AwelRxTURlaTR3TFU1cHo0eFIvRnlwclgxNGxEUGNCSDlsMG0yYUdPMDJlR1ZzOUZFLzhneVgwdFFvcC8xbDNQZjltWGlKRWJON1NDQmFGTEVDVStiZTZ5RS9VdGY1OEl2TWowY3hjWUs4Y242Q012VWtDeHJxMHMvSDJDVjJsOEIwMlFYMWVqcWhtV0NlS3pvN1hkL0QyMVV0Tk9IMjA4UHk3T1ZuOXNKT01aeTFPa2JqeE5lMER0OXdqaDhMVzNjdzR1TllWRi96ZkMzcG14MDdMaWIvaW5pd2lHdEd6MEJDd0dRb1RXcmM0NXdJcnFva2hiNFJXaDNTcHQ5aHpDUVd4WHk1MGQyTWxXU3UrMHUwbWtDeCt6ZXZML1pOaTZ6SGVWdTVKRHQ2Q0RHaUtOa2dCcDN3empTYkJ1a21sazgwb3IzbXNmMlBNZlF1MzhtTU9mdGlwY1hqb3B3Wlp5UVl4RVMrL2pCaTN1R0lpQzdId3B1bWVmZW9Eb2dic0xTbXNSYkg0ckxZYWl3VkJvczVUNUxuSUNpK3prdkFXeWg0UEVKTnM3RG02UXlqWDNXOEtYNUVNajFNNVlqbjRrSzl3Nmk5Y0phOEpGQ3BuL1doM0gxQ2U1RDlhdXhEaVF6eXlxa1UzNHhhZXRxMThSNEp4TWJ2UEFpQ09jS0wxNktlSzBvUTd6ak1VaWRZWDFqU2srWEg1SVFFMFNoRzdoZ0wwS0pYSmlyQ0pNbVJtZE95MDJwaUQvUkY4aWlhRkcwcW91b0RJQkRCcSttSWxTV3hSaHFBZjNHcUQweS9jU3lGMys0ZDd6UzFlT3poRkg0SGpIY3VmNzVrUGtCYURXNWZUWUpvMjVkZ1N3NWI1RU9UQkZ3eURYS3kwMnlPS1U0U1BWSVoyOFk4YmFZeWFBOENHeFlTT3AzMUNRZGJTUVAyQldaSkZ0akRkZWcyKzRVSzNUaFRnVXJqYmN2SVRyZjdlSVQ3RDFjNnpuVDFuK3l5dHl6L3JPcVdhcndQOXpvL3lOVTRlQ0NLZWMxMmNGZlVYNlRvZDJaREU5WDBodzVPcDZoTHArTkR1SktQbGVxVlR3N09ML1ovT0N4Y2QvRmxFUDk0TXk2cHY4elNaWnBhQ242OHk0cEU4WlY3UWVhVyt4YWMweU4vOTJOOXFmajNOTzJDYVE0K3Z4V1hhM0E5WjBqRVpTdjRKOWh5Z3VhYkpUdDRaTmticjVDank5aXpRckkvNUhpN3ZDbzMzVjVJNVlPSW5jTXZCWkZVZXZkV1hkVnZTaXYvOWJOa0hjWjR2UUlaWWloNkY1TktTY3RUV1hBSm1ZaGs3QUR4c21Uc2UyQjhwZkxMQ1A1clVqa2h2TmJZWFJkWlRlV3B6K3plQnl3SGR2TElzVFRJekc1bEhNcDkxN3lwTWFnSnA2UVlpMTNrbEg0emN6aHdRdmRHK1NtNmQ5RXJQd1lvK3IyV2pyMGdkNW9lc0U0VVRFYTN4SVFvemJqVFptaHljQ1JiVDBCNE5Ga2ZGZ3F2V3BucW13dUZ1QXArNXI5eWl4NzBzSFllN1JvZHlHSlU0V0R3TnBEeHJaZy85dm1sNU1uY1kvaDhBZG52OWdwamt3bWRwbkhFRU1OejFqc01SQ2tlS0RPZmtBSDdZRkpveElzajJ3UVZoU0QwY1RKWkVMaytIWGtyL1VodXdGUCtoSHZJQzJtci9Eam5hR1BYOWNVNEdsZExTQ21sdldORXpVZnFMd2lHWHFUU0MraTdYbVg2ckMyM0ZvQnllRGJjRkpzY0llN1BmVFdPQk05ZnQ5SVgyY3hmWDM4UWgxNnJJYjMzNVZlUDdhK2xKNE5UamV4cHNUdmJrVlIvdGF5aFVyekFIc3NnQ3c1cHF6Smg4WFN2dmVGUlNqV1d3QjlVQlRYZjdtaDViTkgwTEI1TlBydlZFdmc1L3J5UkxXVzhzeTRSa0JXZnR0TnhReWxzR3N4SnZzOGxPNEUwQWJZeVIwSVRidm0wODJvRjdaQmxROTNIUlZPZFRMUzRzck50Y3U4V0JySFQ4TWxhakdWRzRsaHNaK3BnbU9mWnhuNTZTQ0hjR1haOVZwd0M2Vzh5bi9HenBhY2MxdUl0NUFCWjJWclRhS0dsUWpJYWgxRGZkWFQxMmg4eUc5Y1p5OXU0MkU2TEtLTWVvWVZsd1NPL01jVkZRVkREM1JuYlFJMHBWT2l4L2Fjbld2dWVOOE9ScGI5VS85eEpoVDhmdDVqNXFyVHA4VG5nalNHZEt4aGEyU3FOK3hHZzcwdXgyTEQyNEFRMUZlck9taHRlNnU0WHk1czBYQ3gvRHoybTN1V25VL3pRWmJkR3RwS2xETnpKZ2NZODNGUWpFck1PRzN0SVFOYTJuWFJnNldZQ0NNMjA4UE5hVnh2VFhPOS9nckVJd3FNZFNSZWRZVUpzK2t5YzVhM3d0a2s5VTJwSk4vSlUvSkI5MDMzYi9qT050T3NwVVRzaVJrOXZIVjB1bVdRVzVXVUtjS0VweU5FSy9BWDhrdlpoL2JkRzh3eEphM29NRytOV2dneENEWC94TURmcHl6ekNTbUFmNkR0Ym93MjNUcFQyQS9WbG1pRVBuM0RWZmt5OFA1WlIvbldpKzdmYW4wVlRiM0RXdCtvWWdtYkFFbnpWOGVRYnduQ1VlZk5sZ24zN3dnUnkwNUZhV3FONlcwV05BMGk1d05ZdFJ4SVIvcnlOQlVaYWFhVk1hbzBmZnUyS1J3ZUxkRHdwbVJqWGVqN0lHb00vU3JQLzAyaHZuRG0zNzBNYlBCcnFBTGFoNHZBcFZCak5lN3RqYTNlWmlqeUZMUnZYeHBtcEhMM1ZOMzFUcFowa25tSy9KS1Qwc09QZEJPLzBUU1NCWHYvRG9KUlJaQ3RteHhDUk9pYzhWdlM1c3V4V3JFc2hmdEtxQ3pCSGhCZ3Z2T1Z3VWJWakt1SUR6UFozSFVHU0psaG5UbHlJSnE4WWZvTjF4ZGtrMzloaEYzcExHT2JIekh5b2FhRFpWQjdmbVpGWFFZemlHNTdFLzF3aEU5MkdKeHNCWUY1eU9mQTZXOE5ERHBHU0xmNC9IRisyN2VYcmpNMWhXd05iNllONVN6VkxBSWJFamFoNm80Yko0eW9OcXlFd3NOeml2MDgyUXJwMUkxWjFrc3lGaFhia1Q1bzYrUVNSd2xjRHRnbWxhY1JzaHhTREs5OEZvazEvbGhGbWtoaEliT29Rdk5tWFdjRVFvNzQrL2JieTFLOGp1TEFmY0JYM25yWVVCWDJ6VzA1bkRZcldTSnZCVDlkUi9vSHVBUmJqbEN5R2x3aHBPTzAxWDltczlFRGJCbUtvYStBMEN4SWhMRTAvOFBaRlBkN3NUb1kweTVwem5PSDhzUklIbTYxdU1ER0N2VDljT1F0VTBnUDAwcy91eno4QWN5eXpnOHFvSkFmcnplZGJnOVh2bzljQW5lMnFNaDFsVU5GeUNtUmNkQW1ndEF3TzhIdkFnWmZQR2pvU1IyTHB2a2MvMlVQYzh4MTRxNVdlQnI2aFRDTFhwaTdaSEZVc1NNWkM3alJ5OFdjSDQwUDFWWlNkR3RrTHdUOWtGelFyVi83WjRUZ3BQcTEyVGZqdFZEZWQ1TXo3TDhIQktwSGQ2NnFkZnRRd3hIbUMzSFJ6SUZpUjN3U3JqVXQ3ZkU3MTlHRklldHV4WXhmZFVmODhIQldvYVpVRVpLakE0M1ZQakRpTkVGM09CTTFsSVQzR21Sa0lXRHJWQ3VvM0x4Wk1FYjY1ZWtHR0N6YzdZRktpTVIrRjE5SUVSenpBRzI5THFpYWZXc2x4TzhaUGtYWjVxWXZqL0krNCtNQnFma3RhSWYrRVczUDZhNEI1NTNSVlNKM29Gbmd0eE9UNEo2Z0pIUWh3QWJRYld0QThnR1BiTUtObW5laEtwUCt1RkMvdERHTGpxRE12UGZOZHg4TDBhaGNFYTVoWmt5eGhSSldTRVNTNWRxZW4zdGRVeFNZUnNPRVY0WlZOc2VoRlIwbzVBTkx0RHM3SnpRc3RrL0dYazAwaXE4MWNsbFZ0YTI5MU9PVkRkSkRvUUQwNEZmTmdhcWhXMjQxTURUVGRFOG4zZjBhMjlHVENKSEV4eGtyclMzNzEzRlA4ZmtTaGI4UnZuT253d0tqSElPNXdObnMwUkQvNEJwQW9nNTU3YVBnUnc5bng3Tm9NK2lHdCs0MXNJRS9tRzNsL1pqZjF5V25aMGYzQ2ZuWElkZ2Z0UzJiNkcwS2t3MEJNQ2lMdElIUHkwVWFOTGtDZXVmYW14bmNXVXZCR2lvVk13bGFKdlVCVHdNc3hYaktXTFFjSnIrSGJEVm45WUxmY29HSnFhWVJBS1FLMHB6U2phYmkxSXN4ekcyQWtza25Vc0tvK2JPaFh5TFZuTWt1TjBqSXNpdDRFN2M0Nnp1WnJBVFM3QlFFOGg5d1hrNnY5ak81TUwwcFN6djYvMU1GUVFpQ1I5cTFxVU96OFo0UXRQQjR3MVhCOS9mRDZvellnNXhUU0RnNTYwMmk0V1NpYlNWenlHcnhZbjlNN1RlekVWM0xwcnplYllCQm5Lc2lHZ1J2OGpZUmMwVWRKU0pTNWRBOE43ajFoOTlDTXRZczF1aVFRNEkvME44OVV0SGk3Mjc5MGk1Tk9ML0dGM0JKbXlSdGc3cXQyVm1pTGpRMDNDZ2xaVW1UeHl1V2FvMmZZZ3RhM0NJM2FTajU4eFBwRFVWOGNta3lJNFZPWTUxQ3BmODdsaTFDYlhlT2RKZ2FEbFN0UGtXR3NIN2t6Y2dZL0pzNHZBV0doajRtYVgrQVdma3Jldk91MU12bnJ5a25OQXErd1R5VkNWRDhTSFNiTXh5a2g5UWtpdUNxY25sTlltS0F6YUYxcUR6bmxHR0tpbGswaVR1bjNuR2hhRUxhbVVEWGRDNW5kTmRSRy96U0dSQTZuY21Zd0JSZTErb0FyZ3ZtUWc5Umpxc2hvMFYwSnllRjZ5eFNQNkdhdDc4a3JFeTY5RHB1WFAvRzZKYVFXUnFyMDJXbjdKaThWbmcxRmtBNzZUNUNuam94REVFMFZIWWEzU0NROXRyUU1WdkV0UFNib0wwc1BwRjI2bmZaRVhLS0lmOHQ1NXFhdFZFTXNjTzRlT1RzNTQ1U012dFlRZENYN3hJK0l4UnlLTUtTa2FGTkFCQURNWEs4eXorUi9sT0owU3h0em13QmtUako0aS8yU0FLUjRLT3Z4aUpkUVRRNzR5ODh3ZFNhWDlaSk1zL3VuSnc2SHg5SlVKNzllNVZ2TS9EeS82Vkh0a2FKaXU5djVweUpCLzFMZ1VKbit1Y241WTVXN21wQ3RneFRXNzBGWWQ4NHdJSTREYUdOZXRiQ1dlOFF1dWFDcit4bXliek13bVBmaHVJL2hpb1RiQUNULzBkUktuSkhIMzJGVjUvellsNVpOd1o3bnlCTGp6dWQvcTlHVkUrbWtkdXovajhiWGdXdjlBL2tuTHZPaS9UQlRjUE9RYUEzNER0dkJhbDY5RXZrVmRaWGw3a2Jac2Rlbjd6YVQ4ZEM2UE9PWkdDamRnWkVhZWNoM2ZDeEFFU3RnSXpuS0tOTmlwOFZGYVFsdE00N0RIaC9PK2RPYVdrK21ZOGo1WGZvWFA5bkxldCtIVnNsRE90dGRhc001MVFEN2hldkRJTU5UWU1uaC83RjZrbGpEeW96d2dLajl3OFNvSVlyRkFVS2VnRE9EcXFndUllc1lIVWN0S2NKOXlyeEQrbFF1bWJHdER1OUZmSmQzenhydGJIaVJmUnNtdGZidytjcHg4aXZQM2JUekt0Q3o1NzJ6KzM5d09aMjJGaG5EcStQeWsyZEdWeHlnYm05WGxrbnZNeExGOUVmWW1SVDNIa29Zc055VWtPZHk1RlphUjF4d3BDZXkvODIwR2p5UENhRHBoV0pGM0FxVmF5czJzQXFUam1zKzBqbjFQdnZ6c2pmODQ4UTlVVnViclJTMkVocWpTdE9Id0FyczNKWHY1OUpwVGhlT0NlM2xQVytVWHlUdTdIS2UzRWdHakQ1bllwME14QW9zdEFlbjZtcXNRZGptWDJxbVJmdEJVWVpFTlFCS2dmeDlBNXlsQS8vQlhWTzRteWhxdnFzSVhtRmpteC9kUDQyL09pSkppTXUxUVhQWDg2UlA5MGtuaFhibHpkNExobUw3T1doNGRyN0NvTDJ2TlVrWUFEUjFrNGFlelcvYnJOdld2L0FFNmxsMG5mSGJ3ZVFLTnBLMXpzNmpURFg2VUlDcmVSRktRdkxRenNjZ3pQWThnLzRvcVY3akFLTituOUpsT3BhM0NtSFZYeFF4SVpucDNWK1poRERWWUtxM2tTNzNxTDBha3EyZ3V1UkFoWHJhTUgrd0ZaNVovRjNmamxuMEJSbFBxTmpjMEhSblpXbnptd1R2bmZJOTg0K3F2STFQd1RCYU45WlVoZlRpd0hjOEZQRU1uSmlkUTBaQnhSTEhzRTNGejVjZnRxeGhCRDBlN1pEZjdRVElBQjdRMzRmMnRxSUliNFZ1ZFpNZnJ0eVNMZ0ErUkdudG5DUE9zQ01zZTZHRWU3SG14TEZ1cit4V09vWEUvc212TTRaSFBqT2NlbDVHcnRRSFhDNE4waXJraEFNbDV6NjFwdFMyazJITEUveWE4ZTg2MFhFcUxFREhxb0RhRG9ZdzEvYkhSbmsvNklwL1ZVV21McWwwejFheW1LU1pVSWQvMG5tMTlYVW5PbkU3dDNqd0tScFF4UXpvZ0Q4elZLSkl5MXhRNERsdStUdTJRQjVzMitZZDRWaWs5dk5OQU54bHBMMDFLNGU4WUNvZHZCREpXWndpQ0lEY3FGNE15NHUwYzlmK0MwYXhwODZ4WmQva3NmeGxlallCWnltMXIrZkdKWllBbERkSVhJM0R0V3UzYnphTlpzNTNSajBCeHAwOFVIQnNsdlFveWgyS1VRdXFNbktrK1dqZGhpOGphd0FxZXVJQTdPQ3FFdFBOYWp1YmpqMU5SalUrSE5NZGQ2bzRyNHZZTEZHdFU2bG5pK3dEbzQvQ0dsVFhtRXJTbmxrMFVWWk9ocDNUczJnVGdZVEJuSk0veFZjV3hRckt3Syt5V3NtWU5FZjVIQSs1Q3NGWUV5MXhmZlN1UmpMeE1ld042V25kNDd1NkhGR1dLajRhZVZhVlQrSGhMOEh3b3Z3MXlNY0RkejVOelYzb0RWb3F1VkVrOU9HaWhWdFM3R2ZlbThkZDVxRmhXYkdJZ0NzSmJoaW1MeC9GQ0ZYVWIrMm1jQnMxaG5NWWMwbmxWbWRtVFJZa292R3Q5Q3VKM0NXMzNTUmMxckliZFRRRjUzT0RKZGxwQU1KM3hKWWFJZUpqWW55clJQYUhpaGFiL2xxUjlHYllScVpCVUJlSGFnTEdWM1FXR1Q4TXdMY2hyZWJqODNrclgwUldlT0dEYnBIT0NnMmkwZjR5dVEvc25hYkhuci9FSk9DUGF6M0JMOEFxVnpVYVNGSGd0TU04VFVmcm1zZ2QydzA4aFFES3czeXlFMktsY2JqczkwR2V0b3lhTkJCak1ZR01XWTZQRUxWNTI5eUFkQmVqTEJjZ1RRTC9SZmdvSVh2QitZL3k2bER5Zy9oWWYrSFFEL1lzak5aS2twT3VEcFIvWUY3MHBYenNGU0lpQkg1QjdpdFZKOEMxT3hSUDhWNmh1NkZpNERPNGx6U2p5QUpRVFNzS1dPSkxoYzVib3c5a3FLRU5XM1BwQU96R2oxQytBanRLUmRTai95ZDNZdW5kT3FZOERPeWhkdGIyWFZQMUQ5U0R4dDNIa0pqRUZyRnJLeFIySU5melc2TjY0UkV5SEl6S2Jrd0RBSHJrUjhIeXRlV1NCS05odTRtbWdyeldYVE1JSWZ4TmZjREl1ajU2cmdnSE01V01aaUNobGc3WHU3RG53T3FUb3FMT3FiWm1FOGxwa0JNc3htNlA1eG9UeWhiRHp0eVR5N1pYT0RsbTRiQkhkUmhQYWZ4dVRLU3BycG9RS0FLMFFScjBvZ0lPdDdkZU13K0ppT2lheE1wbTk3MjVOdExQYzBsSzFKYkxPcmNCT1FBZEtrdUNMbGJlZDBOUXpPUE1ET1Bra1Jhb3FTYU1GUG5jSXBMa3hiQUQ3Ky9DR3J3KzNpTWM1T1MrcGlPUzZqam5ydVNkRHFxNTNXWVF2dE1ZUEh6NFg1QitFM1poVzl1N0hDdzMwb3NzZkhSekNYYkxKUzZJSzVCaXFMVjE0UkRVckdKVEsrVGV0azFrcDdCcWoybXdXNk5QUlJQL2V2cElRMFgwUUZaNzB6akU4VXVoclFNUmtSdllVRUdIZ1FlZ2VnYlFsRFNxUWxyR1Jqclk0cEJqRTFzZDBmSk1zczBBYkhFb1ovckNOU3Vldm9WMWFoU1RJcUdwS0d1YlMvM0N4RXVQTUhYelVBY2s2K2ZTUXVlZkUrdGh0OWpnQ2pxc0JTVmRlQ0pOMmdJVnEwOXZjOEthWitDSWVkMkx0WXMwN2d2TytVOFgvSlIwNU4rTUFvYk5tTHZBOStwcnZ6RVZtSmhUQTRhYW1rSGRYYTIzT3loQmVZeXFrc21ZK1NjUms3Q1hjVFg3bS9leXZZZlZrNHErVVVKT1gvZ1ppWEwrbittOW5jdzFPY21WVEVuUEhMTDUvOG9CeHlvd2Nod0NRdGE4dllwVk1YWkVtcGRiTmZSYUd4ckFjMGZwK0RyUGlNTVFhU0JTUGZJL1JDeFh2aXkzdE84MG9xOFBNbjVWMk1ob3ppTmhsdHZjZ1ZHb09qaGtXd05LczV1bXAyaUFhTjM2RUh0bVJIdVVPZUIxd24rekx5c0tEeDNEZTdYMHlINHdqaHJzRkFFSXAxZHY5TzJScnhDZHllSktpRGlhZDE3ZEsyMWFKdFJFRktVQktDSjFHQk02RjdWWHFIZ3hiTFJLR1RuRDlTWk1HRkI2OWxJVnJWdjdQT2lZd2NpRUk1WXQ3blNWMHBxTkFVR3RCYUdLb2JiYUtMYlJZWDQ1c3hHRlNRY2NIbDZibGV6MXFUSGhBaklyUjRiMjd2dTM0ZHRTcTZSRzNLL2xyRlJnOHhJMGM5d3c0Vk1uZjI0UVRoeFpDU2VkWkR4NzlXcXY4SnVLQ3lWNDlCb0Q5YU9pSktCWmFHTWdFQTFFUm16QlBOdUZsZGZjRkRKNitib0VaQ2JkWGhGNWxQWVZwOHltOThzZ1NleTBFbjRraXRZelZibXBndVVlRWo2VVd2U2ZkdDBLWXlyV0NucWcvVEI0aEV2LzluOElLRk9Ibm5CQnJLdEo2bUVnYWdDWWVpT0I4eGk1czI2VEl3YnU5dVRwQ1BmNXVqYTRKRllaUGdJODJUeTVkcWxiakZxR0FlSjd3VFVWbTRpTkF1ZWVzRFh3WCtiUlR1UmxSV2ZJY2grVGNhWEdkK1RtblJuZklQUEMxUzNhRVQyenVTUXlHY2Z5Q29PRlJCcVhJRHhBdnJxcVJUbWQ4MitTRFFBcWIzTGlISVEvdWVjV3BTTjczVWRGYkhkVjNqakQ2N2VXc2pjQW9xNzBIeDBsSmFFMFVRNitSQ3hTOHFQUkZReWszbWgrWUFEdG5tK3NBSW4ydnJ5SkZWenpYOEJyRVlLUHp5SElYSHlGZlcwUUdPUGJiVWJEMEFGYTIvSURTYlBvR2EzY3p4czdQeEN5STBWU3lwdFdQcTlFWXJwTmhxbWQxWXJtSVBFR1BXZnByd0hXSUFFRWtNVTljY1hhZkJ5SENRQjNDNkRrTVh6bTNJZFE0SVNrK3NLVzNLbktSV3E2UFNoY210UWxUTVh5TmRFQ0duTlNTWktYcXZwa1lKb2dQZDl3NVZVcVdsb0g5YXM2bG0xZDhBSlYwaWtacHlFK2ZFaTFsOUwrWjM3R0R3YkxMY0lGMnlvZ29aU2Y3Y2EyUTRSekdhTXlOZlQ2Sm5lSGNKcWFGVFpKeHMxdUludGVsSEwrOG1VY0hCZ0NUek5pWFZ4eDRWRWdvdC9mZmNwR25WdzVCWFpvc1RDOHFweDB3UEh2S0RVWnRGbU9OM294cEhHOUhTbTVXdWFudWxveExLVGVKTm9mZDdnM0hlb0VTZEZINWtDdWszWS9PYm1tYW5kdjZYUGFGeGUvSEJtUXdSbkZqL0gvbnU0SVJvRk91TjltMWQ0alVhcWVpWXpYdVgvZXlRWnl1Vm9yd0ptSUVzcitXN083VVdhcUJCYUd3dU81ZFRXQ2N6NEtzcDk4dEQ5NzVFbS9BOUdDNXRWYWl4UHBGTmNLMWVKdEk3RzVkby96U1A1TCt0aFRuN1ZTMjFxd2lSK3Ird2d4UzVnVWpnbi9jL0hXRURaQVI0Sm42ZXhDaHlySUxIcTBHVStiOTBZSHBUOFBmclMwMTJPMVJwU3JqTHNBVTN6Y0VWeFhwWTJNLzJwTmYrOUhWckZTMnNFdkxrNlIyMFJhR0VXMzE4REtLNmtIdlFzcjJwV1B4eXFhbUNxUkdTcVVJSlpRSUtxSFhtT3pNdHdLL3FicmliRjIrcTZWZzZOaGhGTDMrSmt6aDFITFhmWWlraW5qM0pwUURRWnVncGIyREl4OFRRYXlGZWxQT2VOcDhyajREUU5ISmxkUEhmQVhGRDRNeE0yOVlPT1F1L3hhRFR4ZnRnYXQwSkpCMUpDcmJXblBCeWhvcFVoTW5SYmRpU0orcVRSVGVsY3E2MEpaQTVaUFFybHdBcGZKbCtCbFdPNHZiR2xwSzRQOFRXVzV1TkFNVjVTM0c5K3gwWWNMNXpvNU9rNG1NYXpCWjFVc1U5bFkyMVZ3Q2dDQlNjOVk1SnEvV0gyZnZvTTJuNW5mTExmcHFIb3ZLL3dTWlAyaEpNdktuOXdhU0xVaHp5cVR4K3lUNmlMeDVGUFlmVlBLeFM0S3g3T090L2lxYW1vTGpHS3QzWGcxbDNrYVRqR0lCV0xlVHdFZzkzbDJiWFlmbUwyYlFNNnVPY0ViU29XUGZqMHpyZktwN2dHRzVWdXZ5MS93Q1U5WG04ME4vZmVMcTFIbmNTWGY3Y3N6UTlXanFUL1haKzNscllYYXg3TlVERnNlNHMwYk5rK0ROZWoxcUtDNVB4YURKYVdzdU1TR2crSnkzSCtsbjFCNC9SQXJyazROMzBmVnhKY1QrWDdISWd5QlZtTWdsaTlHOG0yN01nMnE5NFo2Wjh2TWxwMFEvcjBJVXAxRkNxVFA1M2dkOGx1SHUwZTduRWJqck1HR0Y3c3JYZUxNUmNlRjRqVGdJai9OSFZ4aGZocFM0V0NGZjFhZGc1WXZ2ZWttTXlwc0xPUld1UktXNU9VMVRYUWJjZVFvN1MxeGZZV2NLa2J3b1ZtZ3Z5L2dEN1JoUktDUEpZU29DVkpSZzVFTUl5ZXFDb0xhQzd2RStSNE1teHVXUSszaTB2MlBQaWJ5K0RMdld5aktJL3lZM25GRjFpVHBCVCtNazVvd1U1MVdBcERXZEl4MVN4T0twTTcyd1VhZWwyd1VHUExYZkQ5SWtLZGhvMDNwL1NVVllRY3FhamF6TUFpZWxEMVlTcGtOQWNheFN5ai92bU1PS2t2ZUxKQldEZUxDNFllNStYNUZRRVRLTzM3TWZuZ0d5em85ZE5aY2VaVElpOElmOHBrSjJ1SWxBTWdJYTVieGorT2JwL0RHcVB4b1doZzdKOERuSmI5M09oTjZsVm5xbHAvbEtiMEpqVWE1U2xIRmFQd0pqUXhLRTd6SXJZSWlqZ1loY0N5ZXJDRW1ORk16SmZQRnpDa3FWR1k3SkdzbzdnV1JlOTk5TGpDTFF0Wnhyd0F6SXVqOTNoTkJKeStKNDNrNW1rdnJ1MnVrL3Fpd1BMbm0zQWZBaXBpMUV4K25HQXFIS3JNWmYrWG9XenVSTjF6NzRSSFB1dDNnSDNFVkpnVGNUOE9OQUU3REZWcTd1eWN4dHl2Sk1Sc2RwWG5CcVQzYnlRZUpKSmQydTljM1BueThBekJOUWlCZGVsNlBXc0VMVWNGUElsS0k1ZmV5eHQ2VEdBUGZXVDBCZWZZMHA0cXdPZ0lzNkh2d1dyOUJqUFdDUnU4REtWcnNtNkp4MDhrQy9qY3pGcmhXQmVOWHMxVFNiVWxVU2J0WW5KSStmSzF3T0FtRW1IZEFOWVkxL2ZSM1dDSjh3cHFUdkdaMytuTUI3azB1bDlwODBnL1BwL1kyQ2VBNHk4OEhGeE54NmFNYlRRNmdQWmNrWUZSMWZlaVhhZGhMMFBUbzV5NG4vYmxGWlhPRW1OakZIdzlBV2JVaDdkc3c3WEJyNnlhbmg2Y1BGaVFUSnVCVTYxejlLV0FoVnpNYjhsYVlqRXA4eHgra2RTaVlTL2ZYc2E3N0l2ZWJRWTRPNW44UDl0cklyT3MxVzRXc2xoeGd3S0hLckJKNlM3V3pzb0VvRFhOVkR3azRWVW1GNkpXMjNxYjNyTnVpTVhqNVVITlJ4RWc0NFpjUElUTW45QmRhNTh5MnBoYWE1U2M4enBQd3M0WGtSZ0xRL2tRcDR6TnU2VmdITmtMTWpubjBEL1gvanVxZTlNMER5dUxXNVNLd2hBaGZkMWFFNnNUcDJydWJOT203akdsSC94dFFldnJrRDNqRWhiU01SS3FtMUxsNnVkbklJUHZoalFHRXpRRElFRVJiR210czhQWDV6SDcyN1dueVMyOStXYy8ydnloTGZBZVJrMzFLb2hEMTJHSU1XNmd4NnN3VHJ4TVZuMUNDaWI3WEVHdmpWUTRGRC9Eb1YzSlhFekNLeW83M2NLWEs3WlRJOHlXais5QmlFQitIL3dZekdUQmxNK2Z2ZDI3VTlpZ3l1ODZ1WmlNcWFwZTc2THNLZnhmb2F1aXFCU04xTXg1WlZ1WDMwYUZUTFhCRTN4T05sVk1GUFgrL0FlbWlKaUxkOUVrM1E5c3ZMUkQvV0pOMEJxOUJaMVFSTlM0aktyemQ0b0taaHJ2WTliM2IyajlFMmF2Q3pGUFRuU0tDN0pKeVFoc1hydEVSRWkrTjBmUkFNNUVDMUZMc2p0VmhyQzd1SGt3WWFjRGFXNWRPSTVwNzR5eTMxTm44L2Q5amFWVUY3OThVS1p3NGcreGVwazBMeGFPS2lMYXo1R21IRU1BQjVkb3JHQUdJMmdMS3REV0ZHbEVyUzdQTkVnMERTcldUT2JGSXYzdEd3aFVCQlg1cmZZd0tZa3pFWUtScGh1NXZSOVRzVXg0a1RmL3p4dEtzR2M2OEIvUUJha1dSZFlKN0FXckhjSU9nMVJ0WkYraGdtRE5wYnpPVzVHK2djZlRneFdEbGkxZWtzblVmV3R3OUh1TTFodm1ObGIxSGtrN3FncFFWdHVWcGxhYWNabDZmQm9nZDB6SHRNZW5vRSt6WDlQN2k0Q0hrdDBiT1VSSFZ0anI1T3ZEUDhSU1BEZlpEZkRvQzdXbUc1dWtqdy9RYURFaUJYZFJ3Vit1NkJQOWdnNUt0b0RDTThnbXhxeC8xb1J2YitmZ2I5d1liVTRKOGt4cWlZQlY3NmdMZ0RXYzFaaG9NQTNkOHdIZ0pTN3hWM3FuS3BTSHhRY3E3Yis0QlpsbUpHWUpRcXRUaVlHbnV0TjlrZUI2WXFoZEhSaFZBUzhiRXdUSE5OUDlCSUVxc1RpaUtJWGlSRDRYczgyV1I1SWN3WlR0czdGKzJPcmJLNW5HdUlOUENGTlZUSGFkK1V6dlJtR2xWN3VPNitCWHIwYlZkSDFLLzJNanN2Vnl5M09qMmtRTmxSNlRHVnd1RExXM3ZDOHAyMno3MmQ1MW1MYVBOcEJsQ0xEU3kxenhXT1RybURBelRCV3JFNHFkeGZoNUQvUXlRZlJKTUpmeTU0UVFrSmlwSUN5NmhEa0llUU1xODcyNXY3UWtvR2xIcGxwMTAxOTdzZmc0NkVVa0dCYzNsMTNIOTd2aURKSHRudUQ5QmlKUUp4dG9XZDRmT1ZoSVpnRkZJWDQ0TUt5d3VHNzVGMjNqU0x4N3VkVVh3QWE4dHczeFFMWnN4b2UyZWM3N3d1VlFSa1cvU041U1Y0aFlwaUdQc1hMZWRCQjl3ZGhidVFCUEJhZC92aXRGd3A5V2lNOU1iQmZ2YkpCRFhYdEpkR2d2TGRQZHAxK1ZFSG1mK0o2THk5Q1JsNFZLdzZjOHF5YkhVZURRWVJnV2R2ZjJkRDQ5MHVTdmM5REZHaWVMYUFDbUhMUmY3aTR4NjlwSzVXZmhVV0Vic2s1U1VmSS9zL01vanE5TVVYVEZSU2M2Z25rVE9TY2tVdnhwR0dZNDNiT1lzcjBjRHlaMUQ0N1pjVUM2dkVXYmp5dkxLcldIZG83c0MzejBPeXdtTjhuRzIraHc2eDJlU01IV2pIZnRneWg1YzJOSUcraGROditBWm93ZHV3MDgrdEJ1TkxJeHFveUtHODk2bURqU0xpVnUrRnlPd3RZMHduU3Z2djAxUWxmR1E4b2QzaXpCQWFXelM0azA5SzZmKzU5NURaMnVCdFFkbnZhVERsY3BSVkMrclZkbkhzN2N0MU9DMGFhVFdmNGgrYmtuTWprTjEraFJ3eitEVWkxVTcyOGVMM2NSQ2NXYnBMMm0wWCtkLzVDTEJTN3hxRVYrbHQvZGhrcTR1VjF2Vll2NEpKbjIyWlJyM3FINzQ4QnFBd2pyRHVWQ1VqMnQwdmpCMlFZN2VEd2ZKaXk5VStUNXQ3aGxpc3NYTVRHZHNoZE5QWTJCOVdJbWlXZUkzVDBFbm1zZWdZVCtTNDIxYnRIM045amw1ZzlGZmduNzVuWUt0cHFXRTZtVTB5ZXBldHc0S01hTFR2TWtrci9lZkRueHFSWnU3UXg2Qmc5c2tKWi9tU1Y5MEVDS1ROc3JxSDlvVVR3UE5Ra3A4TXpTdUhJYklCNWRkTWpBcldDcVZNTTJsN2hkbnlLdjhLZTF0WlJON0ErNGdGNW56TUpDVll5dmp2SXJUNTJZQnEwaUxUZUI1aG0rVEgvUEkzdmcyNHNTUGc1WVVqZFhzNUwrVGROdmRLR1NDZlp1YXVST0daaWV6ajl0RDVCNVArREhGK3lRL1dhTG9KaXRiY0JKRzFBdDg3dzBSQnpEL3ltSVpweVI5ZFphRjFLRWhldjVSMFRUY3B0dkpEYk9GRC9LK1VVU1hUUFhyWEpPVU0zRFR2WU1EOERIdHlKVFhaVW4yRndRd2gzNzV5bDZiOGlXTjlXTWFHVlFiMXhzTlJmWExhTGRPa2JxY1piWHpGTlZsZkV5a3FROHFyYjkyQ2ZQUkI2aTdRYkZhZ1RGVnltcC9CZU1tR3ZnNEhnQXhVNTVlUlN0U0QzdUF1QkNUUDB2V1d5ZGJGb2ROT2NqeVBoVlVxVm4yTTZFU3ViN0xaSVpoU3JNTlJmcjBQWDZHRzFtUUpTK3crM0JqL05QaE5FNC8ybjl4a2JZalJVREdDVXhxbnppYWtsQTYzaVVXSzU5TSsyOWJUL1FOOCt4T0xMeWh3ZEJrOURQSmFxTHd0bmFVUlNpVU1lTW0rUjZ5OTZWN0J6cjBpNEV0cDNHSVMzaURBd3VIdjFNeXpuem1kclYzZ1YrRGhqQnhMMlFrSEc3WjJiWmJIOXpWbm9FTFZEQVdHYlorNmsrZFhsR054eGYvR2ZQOXlYOXZzNDUrZjdRZjUrMnMrZjdJVjlYc2FmbisxeGZKMk54K1QwTi9rN3JZL0oyanZoMjNoL1Y3elA2dmJ4L3l2ZXAvVDZGNzUvdHhmcTl2UytiN3Q4K1R2WC9xNmhMNS9UWDN6OTF2MVVkd2I1L3JjL3E5UjNmbitzbmZKMW5ueWZVQ3ZuK292Zko5WDIrVHFKbjVPNS8wbmFMUHg5T3Z5V2dNZHBZdzFhUUtIaXk1UkxtL0U2NVZvV1A5WXFUck8ycHFqdUNHVFVpMVNkRmF3a3V3Y3hScnZLS2Z1eENCVFFQZlc3WGx5ckRWZmcrdkhRSTlOVWdHbklDZzY1RVhERmJJUDZBNlNLY3pqbjFvT1lZVEJ2WGNWam1UUTM5enJoV3pZR0pBY3cyemRNT1MwQytLWkdhNm90bVlmeFM3YjJneDAyeVk0N0pJeHUyenk1SVdkMWIvSHpRR3l1OVhURXIreDNLZUJMTklqQ2F3bXAramNCQmlWQ3RieEYyZVh4MytlNWlORWtpa21nTmFJb1Y0NVZKcDRCR3JVWGhUcUY3UGlJU1BnajhUOHo2QXhMMFJzbm1ja21RTnV1TW5CcHJoc2Fuc0JtcHhYVlVlRG5jeXBHZWQwY2Jvd2ZkMWVjVHo1eTFOSGJ5Z1FHNE81WmtpWUN4WUZ4OWh1cDdWZUFFMUJ3anhSN1ZxaDZxSE9PaW84aVhZOTI3S3g2TzMrMHFUbVdkUklIVERVdTl5T3NxaGVudWo1ZUJ4VnBHamJVOUhsRE9ldE1wT3VCZjkxcE5yUzBDM3pvdUY1TmNvL3pRSUZ3djBjMWloeGFibVM2alE3cnlIaFVDOFNmaTdpb2dWcW1QNnM0b1d6dG03a3BId0Vkdlo0YVlvb1l4WkVKYlg4dUFYaDhsano1eVdobkt4V1J5eXM4UE8rUzFmNVRQLzhuTU5HZlY2eFE0YzdSQXI5eHU3QWppcEc1NnlCVjcxdGRFRHozWmlYVlRUb0RRbGNSaCtSNVZzaW5HMUdvMk5CdnRTTVpPZFBNZEhrOVlkdGtxd0hNeTlGektTZWwva0t1aGFNQllSa2s0SEx6bzlMVERMSy9zc0J5dmxtMTZRQk9QWUZWcVhIcFJvQWdDR3FrQURtZHNuYmJ1SUpEbDA1d2RYQ3V3WmZNMmVpam5FL1B3cnFqZ0lFT2ZseGovZk5rYnR4ZEN1enJWNXhldzV1dWFsN2h3dmtxZFQ5U21GUmk4ZjZVQmY4aEVOMStmK1hFbkRkTFBkekFHeEN4NEorVytRY1g2dWhIcmtEWVpzcloySGlnRHZvSWRtcXl5clJUV2pEYTkvSFdsZ1oyT0Iycnp6ZFpUNUtnMGVxa0VlM2ZIRmFVa1VQdm1YcDJCSFZXNm9wZzJjWFpRei9jaG9YNzRVYUFNTkJQbGxrazQ0Y01uRWwzRi84ejlQQWVXTGhFSW14bDNJRHRwWWxiRURXcldST29wb0JnajRaU0lqa2JXaHVCbHdUbGlIRVhzVzROOFg0ZHl4cHBpekNvWUJ5Q2UyQ1BNV1pCSmREYUl0SEg3M3VlMldSY3NsakpmZzJQeU1US3FJUXgzMHR2TTZ3U1JkU2habTQ1SUorcTRUQVl0TDQxdXMxNzIxaXBpUzRuc3hNY3hFVHlZdmFyUkFhL3NheDVXUnBUaW9rcE93WTNoQ3lHODBLOUZmVnExenVhWWJzOWVtRXVlRFprZHZqcnlKMVQ0NVN1UHJBOUlGZG4vQms1WGVmQ0xIQS9Vc09ZOVl5N3g1bEFNUGttd2JOYjFsRm1RbzMyQ1ZmZll6RXZFdWl0VTlqTm8rcTRNQjV0RStCOFVMNXpaVUJ3SWJMV3kxMG45d2xzTHp2clh3QXRROFVEV0F0NUNzNW5nY2xxZ0crV3AyR3VrNTRJOEx4TFMzUWxUWUYwMXQ1elZZc29ZUVJ6N093M1IwRUNJZjJEVTdBL3VnWE40KzFUSXdJektySnZZb0JobjhvZk9oeEVmOTBlZ2taM2wxcGNvQWFPQmU4RnE0dlQxa1MvOU9JUnhqSWhjRWpWeGZqRzlGdGpKQmNDUEw3TXhBTitQN0RCd3l5QnZ0MmN3Tkx5YS9uZzQ2SmVSOFhIWE1EUUdENWJHWE9GWkhBTnBVdXpQcGtia2tpd1ZrUEtBcmluL0k3VWg2M2xxZmE5U21VY256SFVtZ1p1ZW11eUZHMTFaUFNHcDJIMDhrdHJ3RldCTmo5UENONWI1alAvZmFTSCtHYzNXOVNVY1R2WDBlcXp6Ym10RUNEWmVPTjRpZXVtUS9uSTcreHdpa0hwZ3FLWW5BeU0vZ3o2YzlPT1B1RDIrNGk5SmVIdTdWWTlBcU9hSjlCMVlOVXZrZCtHWkNLS2I0WmN6NE1SYkh2QmJqR0d5YXRUVlRiNjBVNGlEYStDZUlLaXArUGtOa3ExMGc2bGRGbGt1dWR2TVFQMUo1c1JlVlQwK1dqMUVlWEFtVTJMOVZkbytIV25kNy9IQzB1RHZyQjdsSitra1NPcHMzb1pLaVl3T2ZxRVZ3WFFmTWVYWlVFZ0pGMWhLQXZmRkZMSEtSYnBlbG1nVnZsNjg4Y0dXYTBmR3RWOHdCUE5MdlJsTG5RZjl3WWZKQ1hTaS90ZmpIODJQY21yRU1FbWRZRUR0c3ZKcGx0cmJXSW9uaVExNXVpMlRzWng0cFUvdnV3bFliUm5sTUdlM0hHYTdsVlk0UnIzTlo1cm5YaDdIWC8wc0VWb25CbFl4ejlQNlBuZzdIdVR4TnR4dkUzM1ZaRHRPN1JnaEQyWHIrNUdSSDBZL3FoOXhEZ2V2d2hPU2tSZmQvNjI1NTN1YXB1RDIyaFdZUVdyOGZQbWloMWFWc0ZVTUZ4aU9idHhRbytnT3UvejdHcy82VlRHdW9VVGhkQ09HVVhIUmF3M1BPMGhnd3RUUitGSWVTSmNXbFVvSXN2MUtFb25JZE5nMUk0WGtxNUQ2TFRBeTkwamtrZ0NUUldMMVRzSVFjV2lJSEhJTS9oSFlqV2k3VnR1Q3ozV0xuV0ZaTFJrUSt0WUZqOXhsUmFlaEZmSCtxN1F0aDQ3UjkyT2hoNWprRCs3cXVQejN2Z2g1SHozUkZpeXMvbllDZ3FuUjlNTS9UUjROWkFCby9sb2pYL1pEa2svL0l4SFBab0ZLVnJ1OXc3cWJLL1kxWFVnT0FvOFAxV1hDbHN1c0FXQUxLQ3oxVUlFSlZjNk4vd1doZDRIeWl5VjJXc1lMejdjU0ZMTHFGUnBXVEtvdXg3QjAvbGI0ZHRpSGtaV29sck01ZHBDa1JrL2Z4Nk9xd29LanVzTmIrQWcraTJmVlprY3pHWGhGMGdLUStqaGwyaTVvcXNnVkJwUzBDUlkrTTFDQkZwTE0zWWFlbmkzMlZCNDJwUlp6TWI4VEljM0ZzRHRDNU4vSDRsSW5DSWZqanpDcnJCYkRzTzM0SzE5M1lFNGhlMG5RWXUxaVZic25tSllZSXYyWHo3WW1IeGNybVRpblF3OHFuQXcvYkxhNEpqL0poRjU3RDhsOG9oeTdVSWNWR0wwa1RYSDNxVXNiTDRiRE5uQTJxZmlmVVI1UkZVaTR4SzNLeUVUMENHK2gxN1JKMEFwY0dXUFFDSWVaQm1Yd09ncm1rRXFPRks3OUFhWGM1RzZEakhLZXVPSXRvbkZiOWFGSkVhcXVxQXJlNk5xK3IzMFAwQWNkSTJNL1pkZUVJMS9ZcHgxQ1dlQ2dudEZjb2o0WlFnUFZpY3ZwYTFaSHNoY3habzExQ1JONXZvVzNLaUN1UnBHNFkzMGU4QzdPbGVNNGVsWlliTG14dk55R1Z1UDgybGFQQVdmeXdaVDQ4OS9ETjBzYVVpQ3ZNNENvUGsyZVp5Vkx2eWhRMk9yK2lVOHhsYlNuZzB5eW13cjJnWmp2MXZNWW1rSkliRGFQNFcxbzZYd3MyeTVaOU1HV3JyaHBrZW5EWTdHTkE0ZHcxNUE1bjZFMUV6YTJ0b0d0eW5CQWRaaEpZRVpkRnhwTk9ZaUlsUUtJSmZVcGZVTFNaU2pWaEcyZGVOYjJveDhlTVRZSlRqaVFUbEhvdUQxYUoxWHVtWkZmekNrdGlrbzBHM1YxMk5HMURFQis2S1VyQXhSRkwxbTB6bXpHMTlvcUZxSzBNTkhqY3RiZW5WOHBsTlB4QVlzZ3JpOVF6amY3WUprS1NRQW1YMDhoTlBRZGVSUEM5d2l0aFo0aDMwSEFTOStqdFF1M0g0N0tZdkNwNWJTc3pNTDdOY3VSNXdDMk5PaTEvOFpNS3B1NDRvVGJmbWx5dVBJU2tzMzY1N3gvWEZacUVuYWM1NFRqNC9jMHZQZWxaYllWNnl1WWIxRE1IODEwS1BCQXo2ZHJkNTZJaUpxRDdZVXJqMFhiLzFxbU8wNDFyRUVrYzBwYkZFc0pwa09PNXZ4a3FuR1V4K3BDOWpCQkZ6NXZTdzV5c3ZUc2MwckpyUzUvanVDc0NrV3Q1TTBWNUtqdjlhdDErTDliWVcxVzE5b2hCQm9HdVh3UkdtaERKS2pyRVhBRmpXb3VzZ3l5M21vUE9YdUlXTDViWGV4eGgzSC9acktCa2JheGJ5eUY4ZEhwSStUNDk5UG5zcWxqell2cnhpV2kzbUpnaEhYcDdndjRMeU8xZ0VNNGh5Zy9tMHBzQjJmcjd4aVV5TkhxcEQwTnQ1WnpROW5qWFVFL09YV2pHTzN6WFFoK09yN2N6RDlnUk16bkw0UVNta1RPd3ZzbzM0T3NXbmJsMGdsdXNoVVQyWUdxUjUvU0FxSnhLSDdYUHlDUytBMUdWMEJsUlpzc0tXUEtDT3k4MllIMmVVSnhZV2FVOU15ZTdHeExuYjJGbnJzQ01hOGNRRjV3SG91cU90QW16S29ZNjdaYU1aNFoxNGViQnRXMDcvWWdaVkdYekgzSEVGcndyenJFbUlHdzNoYjNUSU1FZFVYdkdqdmVSV0pnY3lNNzFKbTgxLzZlOVNKdmRMenpWWDd2ek1ubzFweUc2Y2dkcmJtNTFJbVRMV2ZxZFFacVg1cnJPdWhDdXd2MUFOcUNmV213MUcxY251dytGVVNnUkg3aDZYOFpWalVlNXA5QkVsejYzb2RUWmtTeld2WHFrUWxIemh5bzJFUklKaGhxa0lvWnNTSlpPa3kwNXgvRWdhUlVkVlRUblJMVzVqcllqdlpyaC9BTS93dGV4YnUwc0k0MXZycFZIRjRGa25UZ2xoM1lNVHJDTGFhNWdUQ05CdE12ZTJSUUFEMktIQXBMOUVFZXJOWFpSd1ROYmdkaG9abFhQYU5qdDJvZjJRNnUzVlpaUjZnWG90WjFwUWdKNHE2UlNGMm0zSFoveTd0M0xZSk96YzZhaFBBVWFYdmRwVnlNeGthS2hIU2lXZHRLU1R0N1VTNTJuT3lGTmN3Wmp3Skg1Ty9DTVdQVEF1dmdJeFVST1FGcTQ0cjFUbWttYlgwNkNvWVdUSUdVdXBNS2pKYTBxa3pkdkZ3K2xIdXJZeHl1bDNadTFMbWQ0SFpmem1xMWJUMm1Ld1FibGQ4azFRMzhsc2prUUtSOEFudDBLRlgyeXB3U1BoaU5CZTFMV1htcXlubFNYb0xiY05sUGF4UTd5TUwzM0g2UUd5M0Nkb0FTRkErSEZjMysveG1OdzRvcWE3OTc1L05sSndvT0tsNDFFWm9qSFN0UmdIMTVWaGNMTVZ6aGJKVmt1K2pDa2hKZHY0WWFWdmtzdnIwRENoMHZ2ZGRZbklLSlN1Yy9IRm05RDU2TWF6QkxYWHdVOWdRb0NLWU1lcVFkRXl6RXRIWE5zL29IZ0hrT1Z5ejU5M21vdHlTeklRUjk4a0xiN2FYb09jUnFSZTNRNU1ENkdwRk1TUjV2bGlRUGJzSGc5YlB0Ni9JUHBoOGxzazFCN284UVZHbFZnSFBHOU5LdGpzYUUvWUdCOWtHajB2OUIzb2orTmlmQSsvYVV1OVBZTFUwdkVEbnY0UjJEMi9qWHRaYXRSWWZUczlxZzM1ZDdCRDJCZ0wxVTF6YmNNTFNHVEV0eVlSeU1GT3FmaDlRd2dsTit3SUdjckRVdThWOCsxbVhCcGNxWFVGUmNDL2pzS3crazRuZGgzM3FYd3NXY0ttazZrdGp3MWMzM0VwZmFoR1lqNXNPVlVnQU5PYzh0TjRTRGRxRW1yc0RoWlNJZm5lOXZSRUtRbjBhNnlJL3FHdHJBNEFXQTNQK1J6WDBoaWpSbzJDdmZBRmdrV01xR3g3Y21WRjFmS3FJSHVadkpwOFhCWnhnRGJGNzBMZjl5bjExR3U4aU9iZm1VeE9XSDFscFEzZXNJb2Vld2NnOXdXUVFLaC85QUJQc1luckJhaHQ3QkpjWnFlbkpIMzhsWjZqaysvQmNtKy9wSENESjN5ajV3VTZVQ3IvZWJXYUYwdGFocEkzR0hTZkVSQ2VxNWJSSGN5bTRPL2Q2SGVEYXpMS0dqc3pJZEV5M2YxMXh5bi92cHZxNVdEQjdFZFVMS2F0bUdINTZGaXpaSmczRG9LYTNZUVBHK295NlF5Y2E4RVB4cEEweCt6c01hWU1CQnlsUnNTbnBCMVliMERJclhQblM2TGliaTcrZkg4dDVHWm94T0RiTVdDNmhaTXNVT1pwYTN3VFkwTnora0d4WENaL3ZERUxUVThxUUFlS0h3NlBJL0p4QjRRY25YSGxJNVV5d0w5bTZoNW8yazJDbnJoSFV2cHZiTDFPZG5tL2RVMjRxWndpam1IaUVUOWxwSk9MNGlqNXp2NTNpUDlWbldSM3dJZ0ZnM0hFb2Y4ZitMNDhodkNuS1cxN1drSForNlB1bll3Tkt0d3ZPU0w3cFcySjVGcHZTT2N2MWpLVWNNUE9lV3VhRGVzUWh0WUlwN29LREpOSzIrb3JlaVRwOXZyV3Z6UmxnM3Z0b05JenNRMnZwZUpXU3JZOFFoaUZxbmM4cjh1NDZ1UlIyODdCM2RGV0xxclN5ZWlYaEVHbnZjbTJpbUZKQlhUVjFzMExsbTUwdDYvOFE4S2gveWVtclIzN2RIMDRkZHlMbUpaZk4zNUlNRFhCVjNpMm5sN2JlSnNEVXFrMkNFYXVnemdzYi9RQ3FXNHRTTExqWWdXVWNLczJ3Ulp6ODI2S2RYY3FmYlU1SGQvQyt1SE5tTHdiOWdiUFFPeTJTMFpLcndmQWJWN2xjOUR3SmdzeW90aHhBTUJkdi9XUmJESTA4OG5WbG9rNExtRFUyd1RZdW9lckNMaXBxUlVzTVlyTnpwSFlNYTJ6ZTVOdmtpYk5TamJ5MTVFbXdNd1Fta1BBdjNHbzlLanJibTVJbktFb1JYelJrWElRdENWZ291Wk45RkN1Um5XZ2JVbi9SQTl5SVI5TWZZMXpHdEM2cElsNW5Kd3dadXlkMHJUanZQdWFRWTlFRkZML1ZIM1FCdm9jZmF2RlhuT1IrUXFYanFhS3ZqRmI2ZzBXN0drZzVTcnRvVVFnY0RxVlFFNVk5WDVtcFErZGF5djJyditiOFZLNXE3dGQ3Z2ZndFMwWm1yY0VyeHpvR3ZaWkxwd0NwWHVEVExhYVpub3dSaVBRc0pCTW5ITFVaR0NhK1N2N3BYeFpKY1NlMmU3VjhHMDlnUUdDWDRkek1wSklxblFGcTl6NHRuaGMrTVlpVWdPWE9lSTNIQW9NVkw4YmR1RThrS2dMMzlXa2M1SDhEb1JHdG5MaXl0MmJnd2hWMGJXYU1tMXdWWG90UzJ4dHVUcUg4RWpUbWRlN3pJVmR2RVREbTR1NG9PalFSdDczZks4TVo5WjFKajRZcEUrQ0FaWWgwUFh6Y1dsWTNJNzZkOUlmSDlsT2Zld2FmY2QwVnYwODlJSkhRUHZrYzIwbXFPSE5JOHdCekxOM1R1b2JBY25hdTczQTBpNUtlNEpUMGg4Y21BakphWklGdVVER1R4b2tRZXBjeVR4ZGlzSEFuZjIycVEyWmJwaTdnSUU1SHkzQXVuVEdmd1ZjMm5uT05VNjFLQWdZMnFaT3dKOXY4NXJhT2FQV0tCR29ac1Y0cUlmUFpNNGc2MG9DTkd5ZGp6SVNFUGZ3WE9KUWRNRmQzWGd1R2tIVEwzQk82Y2lDYUZkK0ZVbWhuemZ6QkJRUUQrZ21BamdBb28xMm8rUkVzVnpmYXZ1TjFMWVE2WVBGMFJhS0ZkOWs4VjRPbzNEclVUakIySVNvd1BmS0JjRlNXQ1d5WUFNM1grS1psdC9RSUtZYnpEQk5rMUo0K0ZYSXVYN0lITGQzNUp6VXJqRVdyMFRUWXJtbkY0dkxRQ205TkE1TFJhZThsaFR1ZE0rYjUrS2wxRi9QcmJWVExJOXVFRXBLRUlKc3F1N29oT2dSWWlDY241NWlCTzZLSHg2Sk4wc291dDB0SG9nWEFjT2dMdUNINmVMN1lhMnNrWk01NXhuSDRWc3hmTGFFK3YvM1lya3RNa25pakwxZ21yV1lBOThSMmg1VWNseVFtMklaMFJBODhGVXFZM0hvWHc4ZDRsMzRrdm11YTc5RWl0OXM1V0JwZndsMVdaQjFwaEd5V0g0RW05Mk9xQjdJOUhnY3pSbitvSHJUT0g2Z1BOQ2xET1oyUDlYbUNHdk1hazF6ZWhOcU5meW9lbjFjUUxIWHBLbUsxU3V3QU1Bek9seEE4WWpCUXpqbTVNVmdlTzdKUGs0UFZpNlJpYTlleFpCbkFFOHVXYmdmVlVKdjhDSUdpRWRKQXNqdXZaNWlBMklaYnF4RWI2Tkt0eDRrRVJhaEQwTXEzQ3FmKzJrOXdUSDlkL29BWXlwL1M2USs3RUFJV1laN0paYndKcW5rVHl4NUZQWjNKeGVuQ2tSQWNvZzdJVUJERC9iampFSGMwQjErdXlBTVhTOHZKM1JkWHN1QUlkV2poOHRKR05RSkFpZ3IzRkhkOVJvcGxZejgvMnNyaGZ3bHJldDkwUlRZUjBqUkh0MEFwQlNSQkFpSFppZkh4b0JYa2s3K2lPcDRwbGhGNFB5UUJaSjBQZytQVWF4SUxHV2FGaFVCUUpsWDFHSlp3U01ldG8rVlZKak1ocWJjRjN4d3djRzlVVnhFUXVRZ2xEMnZuOUpWV3pETkc0WURQckZPN2ZFb1BYajVSNHR3UkhnMlh1N0FENklIeFYzeFN1cTlLUXRoM29lNjFvRWJmWG9qOEFEWktJVjRpVHJqSGxrWXZZSW1neitkVGdnSi9UMFdMZEc3SG1ZSmxNZkFvRmExcmwrTExjWGoxQXlRcVBSZ1JmQXRFUkIrUmYybkRlM3k1d0poZXhuMzFqbDk3cWZoMUxVWmErMmVrd014eVFoVHBmWXA0djcyS29vUjcwVFBQbUE3R1lVcGlPU0t4RUdrWFRRZTlUS1dOU1IvT2g3MFhFQWZCTkRBVlBXQmFXL1BMK01SUVhqd1VpWUhMcWUyMFVlVUtqNzlFdklnaktPUEdreHdnREF6dUZHN1dvMWl5S3VOMnNSUkxjSGRpeEoyVFMxN0ZzMWZzMGdyeEo0NFpVOEkyNHJZWWpUVWRCU0lxTzVHQmZXSWJLcmhFZm9YamtJc3VtdkF3YlNkL0FlRHFnZVlRd2NBUHIzb2pjVHU3eFBEQnZHa0RXQXRZcEYxOU9GQjZpOHBaWEw3d002cHJocTBhNDFTQ2NxcktmVUFrN0N5S1hOS0hrUzAyVnV6R0ZuQ3Jyb1RhUloySFJxODY3NzF0clNWdkQ2V1M0SU5UL2w1SFJoZUhvck0wV2FSaHFrUmRZb09pd2FMb1JGMWhseVV4VitKcjNWVVZoVGRyb0p1MjJNZzEyR2xlV0paL3UyM0FvUndxdkZvSWlaNTJXRjZFZ0hrdFYxR3F3bUxJS2FOYms2TXdXMGpMeitQaGFrU2N4bEdTRmJjVWdWL3czRE5lU1RsWmJtS0ZIK3k2b0MxY1pOU3M1d2RFUk8wQ1JhK3FORU5obEJaZ0dUZUVoTDZoRW03ejYzU20rNDZJOGFNMHQrdmxOQ1paa3hEdTVnL3hjRXBYWUVHWU5MR2ZLekdmbDNkVTA5dlJCMUtEOG5jcGZmUFZGNkxseDFKaXpDUWs3azRvOXRrUStRY2F2Y2xjOEpGVGVYdGwxRFhMbU4vMXMxOVhsRUlhcGtMVFYvNmNmbzBEc3JkWFZUQVMzdnZpamxyNlZ0Um40UmtINnk4UFNKZnQrVmMvZGlkbkJFU0ZSOFpGOFJBL1RhQ2JudURKM1dwWnZYVm1qZy9IMEdDakpJT0trdjR6WHk0OXRrTDRYK1FhcG5iSGFMRnExck9iTDR6czZpTGwxbnhqRVRaaFBWM1VHNWx6b3BlanBWWXBiNmsxNFA5OUFNSjk1MitlUjN2YjcxSFpLcWJaVUtDVEg2WHFvbU1YOExIUTltVDRMU3gxY3lSVzZESXkycWJxd2ZJeEJXM3dxOUUyTVpIa3QweTFiSzhKOVlOY01wd25NNlcyQWppZm14S0JIY2FkUkI5cGd4SmY5bTR3ZjkxZ3NrSVY5dGFlM2R4Rml4RHFpelNid3BsS3NOMXhUQlR4SE41MEJvNVdTZnBCZDlxaXZpQlVWM0svODlSeEMwNWx2b1BjazZRT2RnRjVaRnFKUGpZNWc1djNPbTZpM1M0ajlCcG9sZHhqU0trbXYzWWN2MGwzN0R5QzBMRnFqOHZJcnVGWG9TM2NQOVJTRUJGelFiUXpsVXZNQlBhUUlSZndYUUx2NHBpQ1huMlltY1E0b1RQd0Z0WlJ6ZWdIL05tbHFCYi9KTksvYndaRFc5QVBXUG1lVTJMVWpwS2FuaU5GSGhyNU05d2dkTUx1T0YvU2FsOVBVUG1jRXV6Y0VtMG13Nm0vTENFb3pVdWxFUlhKOExyNVM4VWxabDExZ0tYaEFhTjRsbkdMTldROCthdTZzWFE5NUN1S3VDd0FDRnVSUGQ2djZyMHZUMXNjSEdqaWxraXEzR0JpYzJyajF5QWNWRTZCZmdQQmZBVFpXWEI4Njc1U3RFR2dhd1ZqOVk4dWdGL0JWSEJ6NHAxSjJlYWNtUWNBVXFNMHhCc2tDMW5RdGphbHN1S21PZXN2TVpCNkNFbHExeWNkMExydUJSQ2tGRk43ek5EWlE1dEhDTFFOdXp6NDZBaVlyOFhoWXltTXVYSnhYMndteTlaMTViL2h5VWRzNGZLcGo3SVdXckhUTFNSa1VHZnF1ZjYxdVpucHhtWUtxOURiUU9DeUpmd2xUaXlqYW5uYXRyUlVVeCtKdVNsU09qVW9KQzRYRDJkRkVOamZLc003ZmJSSzFhcVBWN1ZYQlVRNzQ3a1RNMlRhNEpUK2ZoemNmWGJnUmVSNVh2MERvWmVIOFZ3WmE5U05COTN5anJRa1hxUVJjZ0xjVW53Ui9WY3lSajlvQXlOWmxlU3lwMGZxaUFyWStsYUdjL3NQTW5qZ25QMHdPd1FHVUZieXNubEEzeFdDRzhLQ3BydHFTQ0ZWL2dNRTF1UlV3MiswQ1NMUlZpZXd1YVhlaEJKNVN6bm82bVhhMXgzV2tmaWQ1eVdOYlJNaXFXc3pnUEo4TWttUGwrbjJ6Tm1qbnFPSStqVGZkNEpFV3gwajFsc0NLVWdnMXgvUDZkdWxtcm8vWUVEL1MrUWRwbUVhM2plNXNDanNvdnZDRGEwS2ZxVk4wbjdCQlVQdkFnM0ExMG5tVWRWUW1MdHFPOVBrQVhrdVRyb1NyeTBQUTd0NDgzSmlsSGRGNUVHNFMyZndURzRPcVFVMjQyblhUUkYraXJSMGJIN09WbUxWdE9BQ2JQcWxwNVhRY3VhSUZqeTdqNnp5T0w1VDNvRXpWQzR4YWhHMG1JWnFLZFcvU0J0N0o2aXdhVDNWV3FpNnJIQkJhZEc3ZUtPVjZNckZpc2xzMUNzbGxsMEViaExQczU3WjhyTno1SS9wVDZkS0tkWmdkUFgwMk81cEpUM0V4SVh5SzVBZUFDZCt4RjlVb0pyL0ozNTNPZCtnNmtiR2dCNzNPV3J3eFloNWhJRzl5cjlPS2s2Qzg3YVhPZVhaQ0w3ZzlEMHVrN2l3YzBDejNOK25YcEsxb2R5TVBBd3lEWW5ka1c5T2tsei9iTjhHaHNNVWxiUmZITTVIelVYKzZaVnJ6cHJvcW42a2JuVVFMK3Bwd2dTTE9iSEk4V2NkcTlrVncvOHV4eTBMYnZER2pnUUNzT3JoNWhjUE13dGt2aGhSa053NHk2MHBZbXErYyt5U0UzdXZRT2l1T0Vxak8weXJEeDBXQ1JwMDl6RnNQcTRuQVFnT21vR24zTkV1ZUx3cFluTWxyNlZZRzRZYzhsTkg0RjdTMkxYNW9vSm1tdmFaS1BBRVNjUS9PSHliNGV2cUF0ZzJDL25jWDJxaVg0aWVyYWFlaDFiSUc1RkhTbUltekcxOE5NYkp3bmp0ZzRSVHFEcXdSR2EvZHAwNW5Ld2JXVE1URnRHSEpNNlNPb1VHZ0dnSEhuQjdSS3VCc3dsNnFDMVh2U0l3OEpmdU9QMm50Z0JpNWU3NmRaczR1WDZrbjljUlR3WkJJRE9jRTE1VWRRTVZUc3hKZ2twT0V5M3pZVThsQTJPSi9uMW4xWHZxbkdpSWtSMnhCczErd2FtNUhod2tpZGkwZUp3Uk9aSWpscmpsQW03M0VPd2RYN09Gem1WeGMva0M1KzVzWnpraERrd24remJxVGx0ZHJEWXViM2hqRVZmdlBJcVE1NDJET2ZycUNCMUFYUFZyR0FQVTdscTd3MmU1Q3NqczVLbVhSMXlsaXpVRHFudzZ0ZkpFVHpYSFFBTVUydUhqUWJ5U1B6WFhYRWFmOUE5NlAyNDBuUHNKSmJ1cWtqalEzSjhvbTh1TmFUcndCS2ZHaXY5UGNacnRWbGV5MXAyTW5Gc3ZseERyTFlabWRYcVJRWDVqVjhKTEQ1MDBYNjZkL2lMNU1wOG1VOVp1K0FaTExCS2Y0WVZsYVhsY2tWKzVTcVhwd2NXSml5cnRtcTlqdDd4YWZjSnkxd3lDTDJOSnNUdFFqWWdJaVllRmFqVEJqdlhCWWI5UEhhVEFqVWhUcWxzUmZjSldHKzBrMi9SY0hSZmVhL1dvNTRWbVA2UDVxWnUxZGdQSE9XM3YzODZtd2JOQ09EWGF1LzFZOUQyR0R5WkdMa0V5ZDdJa2FuUzY4aThXbU9pek5xKzVyZnNvNWduV0prV2dWSHBIdm5qeEhtb2tpb0Nsa0xERGRkRFV6cXZCcncyVkl6MVJjZVNzT3N1V3FzRVB5c0RQTnlLTHM2STB5bXgrT05wblM5UW1ybUZTOURySkNjZXlGcmFZTDJ0MlREa3lsbHVXUXZyRWZDNkh6UHBCc1ZDTm41N2loRjRuMmNkdFBGSzVqanVqWktHR2s2Z2ZIMmlLSWlFY2dxZUh6NlhDOHI3VTZkUEp3VWFYRTNna2g5YWp4dWltbzhmc2RQZWZ3aXBaRTkzZjVHVnBoN1hqVStSZ1VWbGxZNVREby8wVitBaTRPckx5Vi85T3ducEVEL3VqbWhBM0daRnY1K0R4ODJZVmtpZ240WjFjemtkRXFnUk5QbVAwUDBOYmU0U1VJU3J6WWxCaVBNT2lYK3VoeE1OOE12YVFrZ2hjSTN4ZVM5Wk95NjZuODZJZ2dnZ2xKOHZUeTNiZWMvUXMrem1UVDNrY1QzUWZQWG5BdlRCemxaaEFOUHVOK0paamlXQm9jMnAxbmw3RXNiSUZuZnMvVlBQL0hXTzhEdFBzN0JoSFo1VjJ1eXBGdy9hVUhab21vdkUxckd2L1RyZU5DRDFIdG5xK3NQVlZUdGs1QUNyWnZNK3pNY1lhUmFSTTBYZ2hVNlpkdHdMaWtqWGlXNlEyY2VNMTA1U0ZSN044ZmxPaWNLQWhkZllRTFdTUk1hcUJXYVNEVG9GdUhKL1NHQjFXVGQvaUNZVjNyaVU4cHNHKzE3a2lNRlQ0VXNhQkNjQjRSQzVuQi9ubysyemhXMVVkTnpFZU93R1Nyc2YvZnRKdVA1eGVSWEcxQXpBbk83dDJhVEZaS3pWQ0Y1OWpXS0piUkJjNUEwdVo2K3FBV0NkTXN3M25WT0xTVkpVcmY5WWd5QS8yNHU3R1UrbkNZbG9IL0hHenhCYXlRcnpRamxzU1pZdUNua0U1V2NvMndsMHc2bG1ZYXEycHd3ZzRWMk5XYkJFcWRKSWJVSmxIUlJmZ1V6NGNycVFGa2hFdUh1cDdjSXRJK3d2NDhjSGJZRGx0QWpxalZqVVpNLzRiV3c4c2N3Q2RtMU10WGNQOHM3YWhrUkJ4MWY1QzlvWU1UUS9BV2lPSk8xekgvQ1pOOWdSYktSUlYwd2xRNnp6Yk9talozWkEwTUo5ZzBvNkFHNDNZNHU1K2F0N25SZDdtRjExWFFXQlFlRnh6UE8zU0ZLcE9maE4yUkJXMmRIaW80V3pPeU9TdGE0eEc0TUVaQU1ZYmFLMWZLSGZSenptYm1oeEh0SWVsTkNIUitPZk80SCtYVzlFZndkRk5QM3ozY3VQdFVPVytoWTVMQk9RcWNQOGs4ZnJzWnh0WHJaaGJYVlFyNHY0WWdvejZIa0c5WkxzejRwN1Y4bVIwUVgrV2ZwOGhvT3Vwcnl3VUtNU1ZiVnpIOXFLZmJ0d2h4elZOK3o1NU9peDBuR254b2xKZ3ZYQTNRZmxGa2VidXN3L0VLQkJjOXN5aDl1dkxIVjBMaGd2Yjh2MEtrNlN1NndESkdPSVF0eFBsSm91ZjhWRlJoTGZvdFJzRmQxbEhDWXdFM1VkdW1kenF3eUJxU0kwcDQzbkFXRjhieGZNSDN4YjNTLzRPSGtiRjZTamZaNDhuanNkcVUzd1NhdkR1OHRIdnprQSt1MlZSZGd4ZXRsa3lEMkZVL3V5TjdOaGxvSW1ITythVVluRVhPdXk3eFM0alVQM1VlTGVnb3NuVU03WGlpYnNqS09qamhCVFJBcVVSL0g5VGt6RHRRL1IwbnFsZjRaWGFuNldDVFdvTU1YbC9JUXBNcmpsZlFjVm80c1ViWnRFT2RwRS8vbXovREFsblcxZjNaeHVVN05nSjFkYkdFbU1zbDR1YnpBN1o3T1BHcUh5SGJka29VTDVTYUVJVDNlLzNNcFMxejhzdVlXRGxzZTlrWDVhYTFGSW1sUm5tNjIvOEpQT1Qvei9uNG5sblVTaVAydHJ3eDZPdGg0MWlLNHN6NmJRUWwzdkM5Z0lBYWNRMGFuMWNKcGQwSC9HVHZLU2JFSmlQMmZvYlZYbXphODJsR3BxcVdPY3crU1l3T0ZKc3RYbk0yekFBTkx0aUU4MVFyTUkwZ1VWYTBhRWJqT09oam5yT0h0ZXFjS2MzMDAzbFprYTRVN3k2RDgwMlRBZ2hKbmVjR2tpUHJ0elIrTzhWYjA1TCtnRE9VN2J4ZjU3SG13WGp2S0t6ZHkzS1grOEx2WmloZ1V3eGFBYlMyZnlFQUxrUGNBRm00U05ONGpSTU9TdG51Q0lmWk83RHNIbVNXZjdiaXczbDlCSlVpb2RUdEhGTXpVSElnd2g5eUR5R3FXUE4vWVJuR1hqSHdDMTd6UnR4YzR4NWo0cTkvMjBNSTFmVjZFSkNlZzlCTkRWMk1xWk54dGwvWnJRcXlpaXpSSm85NGEvZk9hUjJHUE1RRDBLYzF2MGM4RkR5Zzh5eVByWXNvLzZDNm9wUk50YW9ab2p1S3ljMVkwSUtpMW9mbzMzVzhTUldTeFNVUU5nWmsxTi8zaDg3MDcrMW9jMFNBOWl1bjVvSDlvaG8xbTYrdi9aZWdOd3ZXL3RNdm5QVHlNVFh2dDJRaThlek5WSVFUcThOdzAvVjdoVVR0U0t3VWZ4ZklUamIrQUVweFY4Si9nMEYrWnJ6ZHBacW9aelFhWUFWdUUyMmU5dmRpY09IM21HOFFOYkR5M2N2c0RrWjRQc0JvMDR0bzFleTJiUXFCY290R3orSmQzd1U4T0JJL2tLY1lPZEtYSXZDU1RIS3VuZHZRSDUweUg1b1Ryc09Cd1JLSXZNVlA5V2Q5YkZ1WGZXWTA5ajRnYndXemh6cmxFK3lmbjhKOTBRMVFRVTMzVHEzYUE5bW54bGE5Y3Y0VklTemhqSEFpcjdLSEdZaEdxNllWWDRJY01sQmxTNm1oUGhid0xuYlVwdURaMHlBcWttZEs4WitxTGR0ZERTb1hDRmxyeHo1MkFGQVE3MWVQL1VaMENaWjlGM01tTFZkWTBxeHEyYm85dGtiNGZkaExOc2xMbGNUcFcxL0ZVQlRwSUJCMVhSQ0tXL2xZS0l1MmUySi9RTFFtWW9VanRBMDJQZ2JrTFNscEZQeStsNEFxaE81MUlPQ0ZZL1pNNXRENTErN3gxNDNqcVVUaDJPR0hUOTdvdjV3ZXVkUVBjTGY2RC9lNXZlbkxTT00ybnM4WVFkbjYzZmhFb1V2ckhKWC9VWWl3QXZQb0RlbkdZcm9GVkxGakdWY0dIeEVSMTA2bURFZDZnVnNTK3BlYm04bEVybHZFWVpkSXAweFlBUFRoQjNuRGZocXpuc0RtN3JGTThMUCtZbmFpeUxvVlNNRnVrVEZOT3B0bXBaZ21pOG9kR0ZQY1pyT2VDWnlpdnFOLzBKektPNEdiL3YyM21xeVIyOW1sNm5PVDdMRkFrY1ZzL0NtYWlVeDNsZ2RhZmRiUExlOUVVYmxnMDFWSEtyd3NtZEZveFhGUFNVcE1GTmxVMDl6amZOYUpjL3NJcVhSczM3aXRJMGh6Z2piU2g1WUZEMGRNcjNZczdBQ1p0bUFMeVFUa1BWVEZscTZidDU3ZnFzMkFBTHN3TGsweld6YnRneVNKWnFEblVzbzRyZTlSQm5VUnFUc2hPQjdTV2RqK3JyM3RhSUdjdU9pc2JDVkxRTFFOdFpFV0N3dFZJaTdYbTVocXllb1o0N3Qrd0paU0NGYVN6bStnS1VLc2RrNWI3V0dxelV3UGVmYlRDbks1OGVDREFodWU5bE5rb0xMT094SkRLbUY3c211bSsxNFJ1K2hmMlZyWUh0UXJ6TWVuVGZQZ2tsOENtQ3E4TmlVNU9xeG15ZTdHeG1icHVPKy9DRDMrL0lRQ3Nud1lhYVdSM3lNQjFHVlFqMU9mTHdtcTVFMm5LN1Z4VUREdU9LeGtMQWlSK2RVN2VOcjZVa3dDM2I3Wit0ZnpFNGd6VFBYZS9DZGVWbzJHSE5DS281WmRuejdoTWMxL3hkUWZ4T3BicGR1Z0EvMUlLdW4wSlVvRU9uc0Z6dmdia0NHZFlDUExaYlBpcDlRSmZVUldSNFJIOXhBaE1NT3NDbVlvM3orRVFYNHltbVFCdEJzdWJDdm0vOGJ2c2MzSmZ6R2hBQlFRSm1DVXE5NHpIYUFicnJyWExYNzQ1RTExU21IMk1WT2xPbVpPWTVGSi8xSkhIRTd5M3J3N09TVmtETFc3L1RuYVlwOVVQS0hvVVFDdjNoY0tzZE5VRUxVRlI1c1dLZUxOYTVSOENxWS9xYlBPeHNINDQ3Y3p6cElSQ0dRVzgxaVdjLzZTcXF6ZHpHUUVjNWpQOGNIekUrV2xOMlYrSlA5dFYwSzJIR2VHSlEwR1YySUxRRCt4M2VJSnE3czVET1FEdnByM1VNTzNacmNzQmVoNWV5OGs2ZkMrVmJ6UzR1K0ZIbElDNGpqbmFTS1lZT2tQSkFqTkVJV3BsNXhJWU1jS09FUy9oZmFVc3c4RjE1M2VydUdhN1I2a2FwektGL21QT0NtSXVMb3o1L2pmdk1qMUZpQkgyU2RnTlZtampzRjg2d0UxcEdWaWkyUGZBUmZDYXhvNURBamZ2QlNnSkJoS3pVZjVLUlpMa3RJMlhaTTUxMWJwSXI5MmV6K2JJTkpBZkhyL0d6ejNkb1NnRE9sQk5WaGd5QmI5SzFlQW9lb1FmMmw0Uk5JT3huMVdmb3VYcmxoYUJoT0lLNkliYktCZWdQS1JXZ0pxc0NBMHdhalZsMEwvdnBzMEo5UTRYMlMzdjkwNWFDeGdHR1EyL3FVZXZTMWQ0d1l5S0VZUzZsYnVzODlCNFozWC9KZTRDcS91ejVsU0FLTHFSdWtOYmxVSjV1MnIxdUdwcVpKcGxrZDRmejU0eURxOVFWSDUwTWFKQnNjdUVqV1BiQkVUN3pBNzZ6bkVvUXB2THJwQ21VTXB6bkl1bzJHYnJISlVyNDlsbWo4ejlLOEVicldicXh6c3Z1ejNYZHFBYm5UUURyOWorbXB4WUpXRXlVbUdOUCt4RUlyMVVlcjRuSlhKckZNNDlhTGFJUHJvbllWcHJoempJMWVKbGJnczAyZWVFaWY1azNCdVI0NG5nQmhHOUFiZFcxRUxXeDlIekZPd1gwSGJEZm9nSXpBRk1DZlB4MkVjL2tFT0ZxdktIdFlDeVlETWVWb1JnOTZseEVveHVTeU5odWtaQ0VHL3dNa1dMMTB6R3lLYnU1ZG5ZeXY1Tk5PNlZzTVdvRnRHV1dFVjVva0NaTmsxbXNSc0srYXA0ODBYcTFPK0ZmUzRpcURGVlhzVytVaTB4OGU0cmEyZzZUUnpycWw1TW9zRTd1OXdiOFpyM09sT0FjanlsUjRxNmJkS1hQSUl1cVBkMy80SEYxbk9BQ2lSMGFlKzNjaUdaaDArUGg3aTVtSmdQRytVU004bGFwd24yaVVhaHpPTzkzSFRnV1pXNy9HY0NZNXNPOS9SeG9iaWMrY1ZTRTRKcUhrNWRHM1VRdlE4dlFGQm5XUEJ0Wkw0azVuQlRLNExRVmpYaWY2eVcvQlJ6Mk9LdGFpbHBrbG04ZTVXeVQvZ0NWZ1Y3WmljYXVQL0dwMWZ3N0NJbXE1MVVlekpKcElVS3MxQmE0MXNvTmxxMjZFZG5GL1NWQlZuS1V2OVA5OU40NkN4OFc0OStHNVQrNkIzR3ZlUWdPeHZ1QUxnbElYdVhWRFpwcEJ5VVdWVkZtVE1xSEN4L0JrWVFDMHQ0QUhQK1paVWxLN0g1em9iRS9mcmpWNWl0Vmczd3JPbUxCTXorTEE3enQ4VEorcFRMb0RleDB2SjBLbERWaFRxVUVscFNXZU96NHpYaG5CTHhYTGtpU0hpNHRUYmovY0ZRb2hVai93TCtIMlRZV1dpS25lL0Q5K3ora2ExVXlsUUhWeW1zWHdLSFFTL2NLWTNOV0s3NDRoOEFNNUhzR2xGMDVBR3d4dGg0amFCRldWOUFrZG1lMmlaMmExVzB3TTFNSVRFTjRINndsM3V0QkNDekp2azllbU1zOGFBM0tJQVJZNDBLVVczeWwybHl2RWE1clp0R3g1c3pZNWZSK3FOZjU4NHRuTHR6OHV2dGNkSTcwRGpPeE5aRDNidzhlMXhZeksrS3pVZ2s2UGswR2cwWk0rNGE0M1dVUnhnUGVocktSUHVDcmFwY0RjSTRJL25wVWxUQ1RHeFVhSjFvckFKOCtEaTVzanl2aDVaRWEwYTUzWEkxaVNjRHJpL0loK3dxOUdoR0wrVzFBYmpJNWVQWDkwb0ZTWnRab1JxQllkK3hJS2tkUnBkTjkyN3podkNlWEtNS2duYWVDNmMzSWVWN3laM3k0RDFIL3BMQnhUeGNobC92VWFkODZBRzZvZ3ZXMkd5UTBLNGxkOWJiY0V6TnBnY1FqTXRzTXdLMEVnRzNuZXliZE8xSWtBUCtXdTU2QVJ4RTE2VGVIQWNXenFueU9ybklsb2dCVHIvMnJxWGp4byt2VlJEYTJjYW15dVpLbnRzbXRDYlpBbHpmdGdmRjU0U1lna3ZhN1BZVWlndVBGdEx1Mkx1YnhMMlJHSE1MWU9PUkg5Mm9icTFYaXRuaWh3ZWkzZG5ER0diMUZHdjNyWk1LWnczdW9iVWVjV0MwQWUwTy9oQ3MxcDh2RWpFYlE1QkRLMkhLclRZMGE0N3RFRi9oVzFIZlJyZVMyR2tQb2U3WS91d3YzSXlyNS9FUXR4dGQrSXBmUXJmZ0tFb3B0L1FOUjVpcllxMGtxRHpvdW14V2FEc09zbW0zQVVKZUlOS2xYME1IaTdTR09taHlBTUhYZEpTSi92UFJRZ3lqTVc5Rk9EUXVNaTJoa2lCVndmVEdDRWh2VThCdjd2aTFGL1BKVzI5d254aTRvazEzeXNYb2tVMWQ4N3htTmd3WUdhVTAxT25qa2ZlOHVXekNGdnVaT2FUUGNIT1JXNlN5L2hHeHBVZDNFVGxnMk9jdlorK0preExKOWpXVERxdVF6eFFBWGxQdzRjQ2IrY0RWcFJWZDFqS3F1Qjl5NGFuMzNmeE5qNVQrcnBabU1ZSUMrMDFFZzhxcTZRQWZVQk1mbHpxS2JrZUFuSVc5czFKSDlIa283TVprazBaUFRaVVhMUWtWMzhCTjRBclRxbHpsb25HQW1YRUVYcUtEbDVhd010OTlEL2VReGNlL2E3RzU1cmEwY0JvY3BqbnAvcjV3Wk96UktBaTBtTkgvOWRSR1hSUnkvTkpKRnVGNURWUndWR2lLbi9ZWjV6U2gvTXROczFVakNMZ3JOK09OenRxVzVTQnhYd1Fsb2ZyQi9WMWFLa2FYbUVuYjVyL3ZOVGJCaVR6RWdQTis3ZDdqSzh6Wi9tQ1ZRY3hJcWZMUXBmRnV3bWV3SXlWQTFOL2JScHFwZXF1azVTQjlubms0NzZ5SmorYk5UTEl5RTB4akUyZU9EOGVha3Z3SlhNUXpXVXVrNDVQdlJkbTRHY2Rud28xTXdPWHJvNmgwektMRDBNQkJJOFdQczJVNWMzSlMrT21pVnZsb2gxWlByTnVBdHdHZWM2SkRWQnhnclhKRWx1MzJjNSt1Z3Q4SGVteWx4NzlpbTFpMUl5aXN2aHdLaHNFQWVpVWhzNjVUOVJKdEZVNDdiK000WTZLYnlLSmtZK29KV2k0UkJMbFJUZGpiRUZpTXJDUWl2VUJONThTWkJwRXpsYzhTbmkwaWR1NThMMUVmUjBjQ0NVSW5SZmZuaElPQnJlenJ6ejRESFkrRnVSZzNvL1d4Z1pERVR4T2hVa0FrcjVKbGJpTkhSQk9RUmloemVIZnlGM0ZLZTd0VEVLY2N0cnd6TFNSVll4Rmd3eTFndUtydDlnb0tQWTczQnRuTHREaVFSeTkydEI1ZVdBdldmZVBETHFvaVIrekxNeCtUTU1JS3FlYmVxbGEvdjNRTWdjT3VaakNqdUJXOGNEMzdySHdqVzZsYUlaYVVwdXB1N3pWNVA4SnJYeUQ2aVpzZUxkK2tyT3lXZzJxTDFIOThhTFBTL0M1V3J2WDUwY0ZEZ2JkUnJ2UWlEYUhlbXNWU3hHeGhHVEZ3NEZmbjBXZDZkaGl0Ynh3Ymo4MUJ5SDNZUWgyK3FUR0hKd2RDTzRUMTZ2TUNRRmJtQXR6SlpKMTYyb2hHTnVQajNSNGZXVmIvMEVWWisvTjlIalI5SmlmMzZJam04ZmNBSTEwNHhyblRZNjFzZjd6RWhhcDZjWUNCcmViS0tXZTJRb1Jyb3owck91OFI4ekNacEd2OUlpWlFqYVNnSXY2N1hrYzZrNU9xRExMM1QrRzh0SGhneHUwWGtvTGhVRE91aDNoODM3RVRUNjlOV2N5NC9ETkRzaGhtaWFrSFVvTUVhMXR0UnNMOW9Ib3plUW83SmxBM0xwZXN0S3NnSlYvbkU4VTUvbXRBS05sbi9IYjREZlBDbDVyaUh0eEltTWtFaE1BQ2c4Vk9sVUNKVDNwSGUreEtvZzBxdEdCWlRuMnBmQ0xPdVZ0aFpSWUI2ck5wbkZBS3Y2MGJENE9CeFZydHNuVjhtVCtwMUdySjVHQVdWMENCMmkzVEVsMnVycEhMVFFSSThjenZ4RVRQbGs5QXMxSUVLdTBhOWlSenREZldnTnRkNlIxSGVuRyt5UGV0cGVGbVZMMXduelpLOHdqQS90bFdrMS9DY0FzRkZFYkpVQVM5NVpzZHdqdHRycjV3VkZyYTdycWFROUU5V0lyTnFZdEprd1ZxdXpDWE5kUW82Y2duNzNQWjl4SWVVcWwxSXVOcHZMRkVGNEFsWElDczBZQlovRWRCREpvN3kyNm5BaC9oSi9vaW1rb3lyaGlJbTg0K2ZsRkNvWG9MaURNTDhsbXlUZFRZWTFFdHo4YmVaLzArYU5IWGRLMXRaMlBoNER5enovRzdwdVdLaGk1T0FZaUVGY2I3RGhPMUxoNm02L2hRb3YybFhtT3RnWjR4TmFBUDBScWxob2lWMmZqVllQQURlM3hhbldFRXlOQ0Z6bmN2ZjVoNEh5akQ5ZTZFbC9EZ1hsSytGNkxkV3lBRmZpaE9xYWhFZVNrNFFNUG90b1pMUDVRdGkrYk00Q2pGMEtOVmNjRHpmWFZVRTZNYkZqbzZyM1M2T2ovUUcyaEFxRnBoMlF1bmFrM3JodU5kU0QxT28vcGlPWXZIdUNjQ1V4d1JEUjJZZGxhMUpweitPa0hlTW1oblBKd0h1V1VwL2pVVk82eG9ocW5GS2dJTWszc3VUVDUvU2pWNTErOHNYcW5td2hQdGNES1FmOUEzYjRxMGdyZDhVd085aFpvRG5SVmdQRlRpM3l5Qi9UcHBJOFFZMFAwb3hybnR2QmtYZDMzbm9tV3ZyQTcwNnd5dkM1UkhPdFNKQ1dza25HR0xSeGxBb0ZOdUJIVmVQVENmbHR3WUEwbzJYZ3VMdXZyQ1dQbHU0TW9jMXVEYjVReThUKzZJUklLNGhjcTkyaGJwVWRyZjd4c1hzb2FPZ2lmT3RITytqY1ZQRWdkTldCTjZkOWNMRCtOeDMzVnhuQ25DSU02STFUTnlLczVlYnVlWGVBeEdCdFFDODJCcUlvdFJFa3RWY0tlcGtEWmtvTm5FWG9aVTVuV3dlMUF5TzdhOUkvMnE2N1JjOW9KNC9kRThUUm9kQTJpdWR1dzZoeG1YRmhwWkJVL3hINWxOZW1WMHIvQkdNU3EzK3lzSWY5MFBzYVkzVjFGeXU2SlNnZytoaGdpUXVOV3IyQnMxZUFUUHJyeE5BaWdLMU5oRjIvaGtLMnVsVXZiNEtmZkRIR1U5NmYxeGFGNXdqS0p2ZWZMdHJRT1hKK1lVWVBaejMra2tMa3ZQVU5GN3F1TlBFak53am80bldoejZpckJyamZvczVENlZUNkFlZFlXbTFoRFRGRjdMT0tGeTNVL3VWWHdwbXkwcTlEcC9CZndwU2xNNE9Wb2FwYXdiWkhTOUFHcWppVFBJaWxZQXBaeThHTjA3ejlFd2FValRQRWJXbTU0cm5WK1BMdTdHaHF0SXdxdGsrOW00QmFDVDJqanNnRVVxODM1SGdld3pNOXRldmhVUkRpOFhRaEhpRSt1TnU5anp0WTAzWGpNalFrVDZRMWtIcEZFM01uczRPQ092ZVgrcUhNVkJ5SHVCT2VBOVR4bjBPUTFJcVJqMUo4YXVhUkJIbUE3TGVsdHpLOFhQaVFvZjFzUmVIZFdPTDlzTXdCdm5NRVZNR1NuNTZJNmMrMWxhWXhCNUNJVWR0QnBqOFZMMVZvdDRUd0ZoZWxDS1crTmlKVDNueHN0aWRkVENzVHlwN0FVM3M3VjJmbEJTSk52WXV3UnFMd2xVS1NQdzBHMDg1eDFVT0Y1ZGxHNk85Ym5WUWtBbkZzNzMzcDVVQ0I1N1NJMElZV3ZrT3pZR3B3NE9zNnhxSUwyVm4rVGZHa211ZmR6ZU5CYzN3Q0w2Tm03cWxYa0FSdG9XMmw2Zmo1U0xCS2d6UUdGK1M5aXQzc29oWlZ2c2EzWExvZGloL28xODdyNE1OUGduL3dlTmZyY0Z2RFdKajVnakl3b2NlR3l0Mzl6SDJzanhYd3B1cWNjM0xxdnlZZCsxTk41WVYwa0Mxd3IrMERnc2txaW1xamdRMllmRU5SRVNlVVN1a1dEdEpCYWlDSTJxSzVhNlVpVTJWUWdnZ0J5RG1mVXZORmpSSWhUOVNDdFRNUjV4RndiVXQ2cmY2KzlKUGdoNFZGckhyU0hkY1FUaG82R1NQd21WUG12ODBXcHVKSEo0Q0l3THoyRjIyZUFHSmp5OE4xcEV5N2EvT0NURFljRkJIYWhCZFcrL2NNTmNjUS9zcE1kZnQyQ1BDS1N1NDJOd3IwaUgxTkNqSG03ekRJcWlpcjlSZGpLUlhoK0k0YjU2NTZ6S1B0ZGV1RHlnK1VJYzl1RCtpWTBSekFaVUdBZWNxR0RxaDQvVCtmM0N5OHlqZ09KZ2lDbXI4ZkdDalZZU1ArU1Q1MHQwSDU5QW9TWC9XbHEwZDhNSXFONVZnRjB4SEtkUWFKUkMxdVJ0dHBuMEdPUXIwTG9TRHpHdUhHM0J6M2gvT2NUZDZyVmkzU25FYk5RSFZjMUF4ekduV25VbjlPN0NGZHhBU09peHFMSVUvWWVZS2pSM0d5a2d0UWs3UXJucVJMZUJvZzFyU0dSVkJwTG1UNS9kSzV1cFB5dHlEVFNnQ2FML0pBNkljR01ZK2EzV0FUdUlPR1NFcEMrcHhxcUxTK3c4c1l4RWJHZCs5KzQ0MWF4akg5UUpOQ0VNNm1rWHRDaklMQ3U3OERkeUlmMVJkb3dqbUNDNjRuOVduVlAyV2I5QmVhSlhkSHRzRlI0YTh0V1dGdEE3eldUK0tVQ28zaGtiSkdJZXRRMFdkbW85QmVhcERRaitadDk3dWgwWU80b2Q0eVN2TGdlcVRNdEp4UEprc0FVZDIyUUxXemVnSHFqd2FwdVlEaVRzWU5SdThRL21kUDZ4eVBDUTBENWpZeE9XaGZwcjhuZ0dFVjE1OXM2anZsYjB3SW44Sm45REZTR0RBbnR6UHVmeGQxSXdRUG14elZJT1dIWVhQWFdnMGNoY0tqMGszbjdDQTdXUEEyQ215eFFuUmplLzBBVzBhd1cxblBsR1RHdlc5Y1J5Z1RQRXVPUEpPVnlrT0hSdWprbi9EeDZyWHNFOFJFOTlxWDBxT2w3b050VDlvK3UveEFEYjNyalVqVlB4bUFRc3JVSFFOZTdrcEV4TE5DVUVaRmlmbXdVZFc2ei9VQjhRdzA4SzVBaExCbld0S0dEMmhTNStZMmJ1TktMbXR2Z214eStRRVAvMUJqYkltb3djejFKaDBLZjJ5cytaN0RjV3hhVUllZlVYUlpDVTM5alRURDNYNkhuYkdVRS9BbElqSGtJMkEyTnp5clJEWFlha3IxSGZUbVI0c2RDcTh1aWpxdG5RV3hsUjhrV1BhdUdLVjc0aW1EZjZXY1FOVHlzYnVyUVRKUHpJeWpYSGlONjV1Z0tkVUgyTm95aldZOWpHTXVUU29VdWRsOGhRdVRKNW1UWmxNdGhYRklSUmhzV29XaHJ4Ym1lWVBGeGprdEhqQ3dCd0NpVGI4M3ZsOTZxU1VkRFExUkZwQWIxdGUwZlpKNk1WVGE4aEl5Qjd4YVMzbzg2dkNGdDErVXlNaWYwN2ZhWmRYbVNic091aVYwQU5RT0lJUGEzYVYyY1Z4eHB4blpVQ3pYaUVuWW5yUFRETFM1b09qdmlIZVVaSjljRTJWNFBLMUVpYTRMclVIajN1ajdlcDZWOVlEa2FGandEOTRvOFNpUldreUswNHNhSUQ1VUNKSHJjdFoyYkNpWWNqR2dRYmdLU21CejFKbDNyUm1tc1FBYldmRHJLRTA4R2dkd3liTGtMbllUOWxCeDJQTmplOURkVVhiRFYxNzFTS3RDdVpvWnhuYWpUMlo2UmJIQ0pmRFV4MEZmWVBnbmowMnFpSlpwSlNQZ21pbXNxSUt2ZGpvNS9TOUExMjJJMTdha2x2WGdYeWxhL2JrL3FyeXlkbTh2NVQ2SDc5SUI5dm1iY0lybjg5SlBxVUhJb0lvY21CaWhkSWJxSFE1NUlZbjZmdWRkM1hvT3hiM3pxWE5rTUp5dmVHdzdHSkVuNDlNNDdMTkVuUFNDMkh5b0ZZZEp2OTF4cmUxTEMva0xyc2RCclVIZ1crZkdoSEovdVNkUWZwaXd2blpiQzd3SVA1a2FqTzhMK2UrVUI5VjlKL3VoVGlYTDZSaUgwTWU3QVdER0lXWVRPeXFyT2cwSUdVQW5MVzRRbG5zazNXeHM5R0xxRWFYbU51QzVyUDdISlFOQytNZCtOOGlCNUhldlNPNE50V1NkR3VRTVptSFpuVkxvUWpIVXF0RGJlZ01nenhBdVlmTlZlYlFWVFJJRHBvUWVhUzYwUmovaDdicS9vcVJEOFhUMytJNGQ2UkxGOWdTVVExNTMweTd2Q1IxdlZ0ZmwwREFWZVJhcStWc3F1d29jeFB1SEJPSjhML01LcDlQUS90OHpyWDhiQjQxdXJRMHpBaVYyYWdnTXFkazBabWxneUpremNMQXBLaVZMLzB6UmhjUVVFOSsyZGVka2QwcmdKTklGcHBudnIyaklIdk9zdFo0aGVrK3pFc1F2blNEUUQ2UzRETlE1SHE2MDlXZXdaZFhzMDVHQWEwOGJ6VmJidVVzQlFHV3R3SU5aZzdNeklDUXFpWi92SmUwQmpRSGR6MDFLNXhIT2ZkQ0ZwVlJBMVhkdU1MNDNNUUxVWXdVMkJiNWtTQXZTQ0wyRHhYdUxrd052TTdwcGFPK3Q1cmZhUzZ0b2J2dW9VU3pralUvOWJnenp6amI5QkM1c0x1Z2JsUnVIT2VqNFFyeWRnWXZtTElWd3dabUoyTW1KejN2YjVOVm5ybUIySjZMeE9ienRZM2hNL21EUVdWVTJWNE5laXZFejREaG4yT3JqSElqSGZqRmNLTlZNWlU2U1d4YnlEQ3pnN29jcWR1MUdJS0doMlp2Q3BGWitkeWJCLzBYdlRBZFRvT09LMDdzbnkrRVVPdEQ2VU1kdkZaZWdnWWNERVlueHlocTAxVlhEQ2Ezd0tWQ1FJVWg4cVBEWngxcGdvV0c5eDFDd0pjQ1RHVkxtSVhKaG1WbGJMbWlJOGlXMGVqcWhnYk1oUlNLeVhNbGZiR0tUOVI3K2FtMnliL1dMQjFwL3FhVlRLNlF3blNrNGNyRGdwdWNRdEhiTDdYbFl0a0xLaWxLSDJ3ZEdTNW52b0RSWHhiZTh1RGIxRmtqcXZxSTlQR1p1MU10S3RnVHU5enp6d1ptWlJzd2Q1dG9HZUV5aWhjWEpmY2M4eWdoMGExR0dlVGhSUmg2dzJpOGJBR05iRHREKzh6a25TdlpJbFVCWUxxVGZTR1JRR3ZFbmwzUlhadnpHUG53L3FWS1paMHBvRWJEb3ZkY2E0KzZMZ1B4WThmQVhKRVN0dW9lc2F5V0dHTmd4QVlIVWhPZEdBTzcyRkpIak5LUWg4QWFyK0tZWmprbkJENllPd2RoWWdVOUh2dkFUVUtaMVUwQWMwL2RRT0krcmh5WEVXSy84ekIwdE0xb0x0ZFZPbnk0RjFHSFBzdjc4NnhwUGFlcUZ0VFdKNEdmK2VVSDlwWjBreW14VlVZcnlKQjVKT0ZIRkNWMHgycUpnZDl2RUVKWlBkVzNOajM2bTVmS1VORWliNlpXNkRRY0kyMGNPSlJLRmEzcEVGdHF3ZHlGSXl3VUhxbmdCT1NXZmxKcklCSjJNcDlaSFJia291djRyU3JGR3R3YkV4SjJDUXBCUGZLSzlyYTBhcVBDN2RhcC8xV1p2M2hYMzFmdDZhT2lEK2RCS2FFOElEZU9WOVZJTk9sNmRZRDVicHNrZFFnZ25tREVXY1B4SFdVZ2w2akdLRGZ5UlBDbXhSVkVKd1JlNUxndTVOajN6MnRJWElvZURWZTZibkpzeFNZOUtSSlpVdTBFclpvQk1VaTV6Zm8yU0hVTXczQWszZXk5VUR5d3F4YWsrTzh6SmxhWDE0ZjkyUGdadE1VTFpVYjZiZXJURTlzVXFOZVdwVCtreGZhSXNwYmJlUDdaUlE3MFNWN0VGNjI3MHpmcExXNmtRRGFLNWU4MHFmRXZUcXllckR4VGswcHQwS2V6K0dnZFdERzUwRVJJMUVKaWIwZS9OdWFzLzVHNVAvY1p6Q2VIaXBlbVVqb2FLRS8wWTNSbGpSMzNjdUo1TUtNRHQ4ZVpicVF3aElMUFNWbE85cXpyZG1aVkhzdFpTTmxVdzlDZGdwdW9MRkxtRXM0TFltb1FpN08zRjBkR2YzbkdpTkhacjJHdjk3OWcreloxaVdPTGhqL0gwLzJBc3ptd1dqWFRLdEVXSSt1QkpvTTkxZXdqQlIyUlBhUDdta2hCMlpsZ1AzUWovZkVTVUFvdG4yV0JELzNNekhSUmUvbGlUM3Vib3M0UlBURGs0NzE1blVnTncycVV6WS9jTE40VENpdXlRaitRc3h6WlMwcjNNUERJL1FVU0l5VWFRR0dxNUZZakpTTWV6Z3FhRDluM3RQYXN0SVBxVEQ0MmIvMlNTU05qbTIreFd3MklUQnVRdFk1alpidy9BTyszL2ROWWR6ZkZEQ3NrTkZBY29Ta09KMWNjVTJVTis3NHpONFJIUmZjYUwwaFNyYVJUR0lJMEJDdGNXSEt0QnNMMUMySTdzenc3cm5KUVNnSlVhdjFueFUwR3JMbCtRdVJkMk9rSVMvanVIZXk5RFBWVktHUDd6TldTSzF3OUFVb21jMnhCMFB6RTlQem16akRUbWJ1SUcyK1dOdFc0NzhFUTVEeml4VHN0TUxKMExyckhpNGFLQzBFeCtpTTVjNllIUEYrNHNuM3MwcXR2dkdGbk43OEF6aFJxNDZob3lGTVFuV05KTjhFTnJBeEZKV0EyRmVJQmdFUGp1L2t1ZTY2Smw0SFY2OS9ldGgvMFhNbHpvRUYyNy9qTGI2akNCY3NDWHlZS0xpcE9PTkc0WjNiN0tJOWc4QmNnbThoTTQ2ZDA0NkJIQ2MyMmxwNnhmdEdxT0dFdkVsc0hJSDkyU2cwRlhZYVJjbGx3b1NnY0JOWENhREl0SFVpbTdpbkVkN2RnUGlORjdSejJsM2cxeTI3ODFTMmplcmQ0dldMSVNTd2s4V1BCUFBoRGNqdyt6WmhZN0c1aVFyV05FSkVuTDI2WjNpZk9DeVNmQ0lGamxnUWVqSmVtbnhtNVJPSmNabnppbGtuc2p3aUNibmJaTERwWHEvVW4vUnNDRFFOK0xRVWp4THNraGRoQ0thcDhVVzRlaTZKek5IVStQYURNNmJXdVI2dExpZ24wcUFvbmN3MUY4RTVsbW9zbjhvaGlyVEFIbG03c1d1Sm1FSDR6dWQxbHdlNDI4UTlwV21PV3AyZ01TZ1YvRFhyZWlGTU1hNTVNa3JHU1lSWVpWeUpNbDFpMTBzZmdBbytnOFdDa2dHbkVib3JtVGQvdWlSNDVlVkVKODYyL013bGRZejhLODJLQ0dHNmdDeW0vYkFnNEFUVnlmWjMrUlFQK0RBTU1tUzVCMEhTSEkrem1WcytVU1hocnppd21HWkFLaE0zU3VBQzJWT0Y5RVpuWkluMlhaOEI2dU53enZqaStpOXBOcG1iaE96UkdoOVVsUTZuejRuaXhJOWx6MWJFbnNxZ241dTV4eGVFL3MybFhVSHFndEZHM2dwRWVjdTRBb0QwWERub2tBSEFqaFlTZzJRWlE0QVJXeGg3UU5XOGZHb1RRWElqejZmUGFwMzRSQVVzTGNxTjk0OGlGTHBORnQrS2ZPcFF3R3NhUk9EUnpJZEhVeHpwQjBaMGljclhWc3RpRk1Yd3cweTZqdG51dms3L1ZGOWNjUGE4MjBPeFJyZzJzSlM0ZGtaV2lQTVFwS0hMb2J2cEdmbnRVMisyWnNLUVErZE1xVkw0RFpkQjZTb20rYTdhZGh1QkxwTjI0R3pmVzdjY0Vrenl1ejAzN3IxcnUyL3pIOEVRWWI3V0FMME55dUlVcWQyUVhxQ2ptZmJ3V001TDVBMUNKcnNTN2pIRlZrd0FWdC9xTTl0UHc3cGFONWlnZmc3bkxaeHRBOHYrRG1VazFGNUR3WU8xaHp4NnBCbmUzREtSTUVWQlFhRjd0dU9uZDRVU2M5cTJieG5LUmhpVXFvY2FjZFNwVTNZeHlhaW4wS2RPMnVCSEQ0THFlaVg5UVlrS09lRHlYemN5WDlXbUZ0TjJvWU0xYWdEeWJjZzIzbXoyeHZ5cTh1WXh5NFRrN25kMmlZYXZsWStQcEFaSDRWVUFJYVJLRXpMT2dPOWJ4ZWVveVhnVnk4UTlaVUx2emdjTXhSNzVOOThtMDRJRUUycForYnRtUmMwclozREl1V1QyS1RsdXExano0ZW9KOVA2WVg3VFBqWHJTUjhNQzhKUTNqOTNSa1hkTFAvVWsxRTRYMkg5SURwb3F6WGZPdzE3ZW52N1g2VFB4dHB0KzhkSVVBNFJaOHI2MnIzYzNSS05kRFZLeGZRbXprMlROUS9Rc0dHeThZQldIem5aY3NNU2htSUovWkhEcjdnS0RubWExMjNYM05JMDNJdTl1VWlLUEZDd0R3SlcvWEtQYlQrWnR4VDBpUittWVV4dVRoWGVwMEU4UHorSzcvMnJJeUZ0RDNWN3FDM1p3NGgxWVo0ZzBncnQyV1ZIeGxWeG5uMDdoZThBcnNSbGNRbWh5ZVdXMnpEc1ZOQllSbEpUSlJNTmNFcDhxQ21ReERQRExMeW5mT1ljRXlRQXc2Ny9RUmlWRU11WFlYSDV1QnBmN3hpaEVXUFlKaTZ2d1YvZHAybVN0aUJkaldLSWpIZzlla2g2b2VadlY2OFF3YmU1RDVBb3RFZWJoaU9yVXlmUXMrdHZVVDZ2VGNVc1ovQThqM3VTa21Td2tlVFpGS0QwWldpQ3MrTVFUQ2oxZXdTZVlmSW5NWTZSTnVKbVZXcENzYUhYNXNlWFJSZjdVZGlCSXQ5VkNnZFhKa1E2OCtHazkvSWpRSlJBTEFJZXliMGhYOVdMQ1V1UUpsL1RXOWl2OXJ3em5GUUo0SE00Z1RmWFRPOXVVcEQyQ1NKTWZQMy94RUx2V1RwZkFlcWduM1VGemEwL3dlc1hmNVFSOXNjb0tIMndsWUNPRTg3MytmcG1JRHhrU25ySVhRd04wZlZ5Mmx4YlFnU0taM3lRR0ozUTJxUTQ5QlFjc0lQb2MxRVVUcExGUUFReHptdHd4d2pyYTJTL2xZR3Jjd0JLcmFpVWI1M1JXSm5IQWUxSXk2SkJaZThlMHpXZWc4Ylp1ODhlU000YmQydmFiWktyU0l4bWxob2NyMXFWbkd0bTdzQ2Y5c21FSEF3aDFNTnJCTlRMK2g0QjhjdVRyejlIM0lxd3dQK2VzQkEwS2lFQ2tkOG42MmFWc0dvb0x2OERFWVhUMWlTSU9ZREF6MFJxakdJMVZDVHc0c1dyUk1Ydis3ZWVoa3JHYk9oek5pa3Jta0FLTHE3VFNzMWcrcVJuNFFsZnJzV3NyNU1lSDYrRFRaVjFnNEFZaGlrYXh5VjkrNXVmSjFIMnIzeTREbm5SZEg3UHFMK3EwVmVIUHVLMndmSG9SRnZ2YjBONExjNFRlUDdQWHZTM0M4ZWphRktoeTRobDRyS3NiZjhQRzVNeE10NDB3SU5ZNTE4d0dlRUpDVlV4UGpUT1kvSWZsb0cvWXQ3UzFnZ0gxOGtVNW02Y2Q0R0lMaGoybWNtK0pCdDA3elEwdFZhQ0c4Wng4WGNMalpwdndUVGN0c3Z3K0JhMDR3T21Sa0VZY1RPT2cycmh1NlRYbmpRcEIzQkFYbmJockZxREw3MFdBV1RZWGpHcUM3akJMTWpzSndtMjBBNDM4Z3NjbnBBNDJTT1ZWQXEvby9TZHRBVUV0N3lQVWZGaWtheUo3cUZpYnptUjIzZmN4bm5PS21vT0Y4dGZ5ODZCU2oyaEN0UjMvZGdXa290eUVvV2FoMFZMdzJBbkFRdHVBdGFlRXNVZ2xtcmxuTjJ3S0ZZeFVFRFpVa0ZWTnVtbWdBT0xxcFRVUTFFeEdXZDlFa3JlYUVhN1ZKZWNQR0Zud3JvYzFMZFFOdUNtMno3RllpQjM1M21JS2dydFMxYXVkWVlTYWsrcVliUVZqUWluZjhJTG9iQ1JEU2IwZStDeTJUZ3lkdUNIaHQwSUlLTjJCRE1hK05pRXpnT2pRK0V6MVpRbG9SZ2piNVN4VkpodDA1RjV2eVlKdWlmYWpYampFczg1RnhVMjZ3OHpwcDJkK0RGZ0FlS2VCb1JDUGZGcWhiRVY3ZkVMcnFmbitKaCtaNnlHTHdaQ2dvQ2NhUGxBZFhoWXZPOTZPVVplTUp2bG9hMjFycUh5akREdEhLRUxMZU0wSG9pMStURm4xbGNnaVplUVZ5NEIydWhtT2YwT05PeVRXRi9yWVVsQ0c4MUZIRXllTTU3cU1zbVlVTWJmeDJNUm92ZVlQbXVsa2Rya1YzTVh1NlN4RFVTVEk5UkN5eVZuYnZPRU9LZUVrcElwVmhNRFZMUENsaFV3TCsyMlpXWkF1K2pBOVVQYTBPSGhSeEFTeU9hWlYzc1ltWTdtd0t0WnlpNWVtclRkYWZ6TzFWTGF0VTlva2w3VmlNMzZ1ZDlUdUlXL2FBTU1rMDhBekpPMUFoT1FDN3Z0VXUrVVhZMXJNc2JTVG9BUk4zaTM4T1R1T1U1UXBzWm1GMzZKb0VNckErU0QyaGpSdy9McUw5T3A2OEZEemJSVTZackdqZlBaS29xZlpENVM1RG9IV0dtUG9CU0JKUkZJVlhEVEVURFF0RTY1M21nU2I4aGpiWUpaOCtCb2VYL01vQzZPd3dHS1lhcVJJakJ2SDR1NEFGSnV1TXhhZE80YkdFYkNmbW1NYlJ6LzBOSVpCVXpYNnJCTEhBbGpIUFdkcFJ1dTNLMEpqbTFLRzhxTU9TYm1udS90ZHhXOXQySHQxTVpvNEVKQ0NSRHA1TTZIZThSZXVFdk1PdThtVUtKSGcxMEpBd21ROE5vYlZNVjdSem5JVS9GRThtcWlQZzhaNUR3NTFFK2JlMytDTFI4K0daeElORG1pZTAxdklWKzdJY2I5bEFjZHg1emYzTmlNZ2Z5Z1ZOK3pMaVltUldjNUlWalIraThJSTdleFdibHFraXFyTG1ydzRKWVdBanlkb2VvWmVnRkk1QXBRdGdSRjVMVkxjbUpHNXNKTk5yVTl1cERhcVNmRFRZQ2U3VldBS3MrWmlHb0pCbkhJcUZOV29TYnhHdjZYUXdVV2NLbno5TnZHakR1YnRYcVJjTkxpNzV0Wnpxb1hqMU50SlBtMDJHU1Z4R3p1SkxJRGxXeXBEenBIT0VaMDJxM2ZKbEZzZHR6QVliODFHU0YzcE93V1VLbk5vblR4QTB2R0Z6QSt1by9rb01QY2lMVG5NVHpadW5rSXFySlZTckIra1FWNXJqZmVOdTU4Y0JocW9EYXNCa0JSTTFDanlrVUY5MFluS1dINkROSUUwbWZlb25BblVQK2FGQUNZZU4rQmFWd3RsSUFuM0sybUFsamVUMnpFOEswUTBQbXBCRERIejRxcnI0dXNNYmwra3lCZjJtZjNuZ0MyOFpzMWtNZmVkYlNUSUh3T0VMdG94bDlKUG1jN21hemRVeEpjeHZSVTZpZHVDSGZnY0xuYmUwMUNPYlFVb3Jlcm1DWEtDWlFRQWNjNUlQTXdnS1lBZmFEcTEyR3h6ZnJVQnFPN0JLSVhDVU1YK0JBTnArZVAvNmlwMndyNXRWVFNXdWRISk5QS0NJR0JIQ0tnNjdnbFNIMXRxcnFzWnJvZlNkakx1NWlGUTFVcmxEZ2c5bE0wOXdBZ0kzUERiRHNKbWNQTXAzenJuYkxGbTRrYWc3WDhPQXZnZTNPdDMvem5oa2VQN2tDbzVPZE9PUFRXeEJYbDhmeWxYVnZqdjdPcEVnZ2JWWkFyWGlNM2RjNW1tV0kwZXlDR25MVlRYMmJMS3M4dU5CNy95Zm10T3A2WTBhTm5Nb1ZqakdITENTSDNTQzJJM1l2enRhVm1BUUNRQmZhTFgvNUpXb2h4aDZRLzNYUHdLODQ2cEJWeS9MbEpTMmdibVBERFdsU29aSzRZU2QvdmUzOWlkTzljM1c0V1V4NU91NHJQWjNSbEZYOVB5VnA0WXBFdVpKL1RpczZyRUNzUENQQTRKWW94Rk9nWDM3cHlaY3lOZDZQUTUrZEZ0WWgzWGdERlg4ZDhSRlV6a09ndldZNzNocFg5RUJIWFlYVWNCUXhPdzZjRUZIUGd2V3BTSzFOTjA4WkpSZm1udHNOdWw3ZlFQRVRhZnRwd0FTV00zdUcxUUFSdHE2U203TFNSV2FzMy9tODVER0VCUUhpSzV2eUppSXR5ZzgyZHpOcFZGbWVJSXJHYmhlTjNwTERweHpoU0svQ3dhRFBkZ1lYS0k2VW4wUExjdGVmSzVqMC8xN21Va05sRVo0RTlWMUlEYlpCYWw2VTl4YmIvM2pkRU45RnpqVFdIclFhZU9td2YrYXFMVHlRejFQVkdEOEVvS29TQUpWSjVKVDA1djFxdlF0aEtlSjVxSUhFZFNtazhpdVRJUW5UbGxzcFJKVWczbm0zalhOQXlIN0IxK0s0YWQwSGlOcDluY0xLNFZrV0NLMEx2dWlqSExmWW1NNDdER2xZbDIxdmJNS3AyMHdBcUt0WG1wdjNWeUJXNk1MNDZOTkdXNkU5QlhsR1pqbncwdnp3VnRXaHI4Vkw0bzZTUWZ2WlpWRjZyM0dIbnRVWGYrbjIvdExKMUFZZ3NtY1NhQ0xYWmlBZ1ZQM1M1OE1jd2g2WUJGbVhlK29LTW9uVUlUUzdLMS9zK1BYZkliZlBJSXpES2dVbXlmYThSMnZ0cnVobjUvOWJDOERrMThkZFUxeFJmc00wY1krc0kyUmhaRXlZb01PdHg1V1l4TVFUZCs2WXhGc05zSGRXSC9wbTlRLzBmVVdiQ3BLS0Z0QngvdVlNOGJUYWYrclpKdlZMTEdpM3k4UDVVb2xIWU9mcklXRDNGRUVqNno1YUVQc0lyM1VYYjNqL1dhVkFobFR0eklMQlNpZmd2M1JXcmk0K0VtNkNkcU9FWVpqc0diUDJOTTFWNmFNQnBmdHhNSnVQdnVVS09scXVJSU5nY2ZsZ2dteHRVV2Q2Tkp3K01hNVgzb0lKaEkvRDRReHRYdTRlYmdGeS9zYTdrU0ZoTlBHR2Y3VzVRQ1hoUndQaHlYNWpJRGQzMGRpQ3h5YnB4ZGpjTGFlcTAwdVdocERvMnF3RkszeTMvQVQwT3B1RzlHZ09XWC8xS090OEN3azN5MWcrRmZPaVFnaXNhVFRFbXlGT3FOVXBlcC82WTNOdE5vZ2c4ZGtJNmhpd2c3YVNDTnJXOWY0WnlSd0l4Ty9uMXdjeEV4TnB1SDgyWVl0M29iVURhbW9jZ0RWa2k1RDBGTWZMT3RWMFJjMVl3UVdMSnZidGt2VktrZ2J1R1NLaHYzQ1NhMjFKdkNFdjBjQkF1Q01tMFE2RUhlQjl2V0cvYk5lTFhTNUR4QmVqNzlaVVZibUxrUk9mK3g4T2d2b2w5TVFMeGtEcDFNUkJ3SjI3R0pickNiZk5wN3RqZlJRZWw5dFJwY2o0N2FMdmNKTVU1NUpnQVpEVXdleHc2Tk1VODRNNU4vd2RxZXYvVmFTRnRpME40MGxYbDM0b0oxNzlaZU4ySzQ5L3puZHNhRDA0TVdLNXRsZUJOMzZ3WWZMV3dmV3FSc2pGWXpwb0dDS096ZjlvcjRnWkFXM3o0TWhHd0RROXpPUXZrUHNqOWtmVkgxeDduckFWTUNSMGVMaGRYTUZnTzlOcWZIajNKcTNxb3hsaDhvbzJwWUFNWlVHUS9HcGtPZktBUjBENGp0a1pLd01WS0dGei9CSGZ1QWVQMFBhSXZzdE90VWJ2SEpoYkV3dzRYVTVYZXkrcHg2clNJdTltV2w1R1AzVHZ0R2xnMEg1d1AxMUxEODFlbHcxVnJYTGhwQzVLaTZYbWh1Z29BaFp3b0J4cHRzTXJKM2NXTjFMZ2RrTGp6UWw2WnpzYXplWkVBN2NGRDBPOU9mY3l1TzNjcUcyWmRoWEJ2enBSTGQwY0ZTME1uMHRRK0dtcnk2Zm0weFdicmhXbnNrd09FRmtZeHBUV3ptNWdyZ3VVZmhKOHJNSE40dnlrV0l3STQ2SzVQRDZybzVHNzlnTWhtakN6ZmQyT2pZMnE3TWFxbnJoYUVzRGl1NFFybGsvUnI1YXNYRDAza3p0QWZSdm9MaGN6ZWFSWWRHM2dsQ3JBZ1gzN1FjQnh0NVhxTzM3M0hwMFB6MDhnMjd0SXdnSFgzdmZyVk02aGJiQlA5bklybjJRcTVxL0lsT0w3VkpuQmE3Q2xuWmx2N2FmdlBkVzJuRmVVRmgzVHNGd3QwbUxvOUtvOWJiK2hPeDlvcnFKYVF4bk9tNitUMlQvM1k3OU1iZC9OTzk3dHhvUzdNWHN1ZDNWZ1c0NWdmSFdzUzlkRktOMmgzdFhKakJ1MWdOYUlvYTlEaThiQ3dDUjV6UGM0SlJIS0UyMUprUERZdHc5QWlpVjBHUkszVXRZc0lOc3JDZ2NaRHVyUnp6dlEzNURyaVRIR1ZxL0JXbFVyMVh6YWIvaG9vcVdnRm1pamxzUFFEaXZ1d1VzTU0zTWIrUU9rZ1NvVEtqRWk3RW8rY1ltdHF2WlBRQUYza1VqWTZldEhFTDNQR0JmVHVhY1dxaXNwdDBpd0dVdzNaVm5UVUUxY3hIZ29lczJOVkorWkM3dlkxSTkzWVlZaFpxRVNXMnk0ZlEyMXc1ekU4QzJNcGNJRzRuK0RXek9EQml0N0hqNVp1ZVR3dXZCbkhCbU5rY0lHSnluS3ZINEkxVThyVjAyVUJyL3hmODl0VFRWY1c4ZWVJMkRtQlE3T3FzWnZuK0NwTmtiRXRMclR6UWhUY0lYU3dhbEpMKytZeGl3Mjc2ZkFLRm85TVBTVmNTOXVvL2xobTVUZ2pVN2xhQllFVE5hZkJ5djZsZDczelNEakhkUFM3a2Jzd0p4OUxvSGNTMTVvQkRMZVFhYkIxYTQ0M2hWam85RUloT2Vsd09TUmdYcW93eFFPTTQ1YnRLTit3czdNUjdndmtOakVIdVRFMnhrVDJmblU2MDRjL0ozd3RSQ2QrbFJYU0p0dmp3VXdGeE1jR05mc0hRd1pRQmIvVy9heFdYeGF5cUwzMXVMa2RZU3p2cEhQY2dpc1dqYkZIdUF2Rkg2QUVrbnlJMFI5N3dadHhWWDBRWWlubXBLRFRhSlV3UUFnYXQ2OUFVUldsQ0hIaDNCWU0yekYvRU5heGJBWjA3cWJ4cmtDMjV0bHdYN2FpZUlpVGNjRDRWcjNpTkFpdkszTjJKUSt4VGpFdlRXM3JhejN3Zm9zR3I5eTZHanF3WFZJMlMwekVML2cvdjlpV2hGTWJ2Y1NaeHNKamcvWERXWWdKQnlDbXNpUGNqTi9lTW05NUpVNng4aVlqZlhRY2gvczV1OGpraHlNKzV0Y2YxWnRVekdOS2I5RHRsS3lwclBqb2xKaENwNmwwa3A3QXIvNElycERVS1VnRkpoYWdXeUpMVHJDKzFGMU8yVEpvdUk3WEtrVlc3dlpKSzdaSHNZOGM0Njk4S252d2hqM1N0OFhjeHpSSjhSeHhTUFB0SFVzQTdRaWRLKytUWExuRXdsMHdxVjROZjNaWmxSdElpdFZyYnI2cVpqTjBlSzY4VXQvaVJIUUFEU2FoOWJXZDc5MVczMmVudWhkTEU3VmRPMDV4cXA4RFB5UmhMc2VOMzVSRElnU2FrK2pIUnFoU2JDK3Jud0J4Yi9iTDRmS0x4WWlyaXBOL0ErKzljSnRQbGVWRm1jUkRjR3d0eUE0WklpbzcwdUJDWFYwZTU5OXBKb2xBSEI2Q0VpR01QSWpqdGpGandEem5rTWN4UGhRU2FnZGQweXkza2hKTEo5SnV0TUpKNURBYURTcXJxZWY5bDVvVkhMNVl4N3FiMDRjMXhPVmhrYlJRVzdOZkppeGEyc2ErWWN5OGVETXFLNzZ2eVNBZ0wwZUZHcTZkajBndk1GVHEzMTNROGJuMzUyMXlCSlRCZkhvd0dNNUNURWdGeitLWi9BNFJCN0hwV1k1TnFkNk9IbTNOTDExZjNQeDhPQnBNMldkbW5IRzBJdFJRTFFvN09acWJpdlNybXVKditYQmdiZlIwaWRqaU8xMFJUWXlNV29GK0RUbzRUb2hNWHl3NEVOK2tPc2duVzIyL2hkNi9Dem14c2Q1QTdENGR3VjBmdE5tTkh1MEJSWC9IVitjcnVBd1BZUmo0c25iSW9YK2VOeElVYXlrcE5kbDJ1dWVkSGsyVzlHdGM4TmN4WkxWdU5pTDZLNm0yQXdkWEFpL0IxQVdiWGFCUDVzcXhOSklNMU5pbEpyOFJ3SFFCRFpFVEVBcnhHVWlVa2RrZmo0WjJVNCs0ODJoQ1NzYkRWV3gyY1pad21EZlQrTThlZGJjdEpzTWxjekkxbU5jbGdZaUxDSDdYekQrayt0L2FMeUx1Z1lWaU9DWWxLUiszS0h0VUx0RjhRdVFOQ1hyYjBkTG1jWllkVyswN1BtUGVveDRna002R1dFS1JKZFlON0lkY2d4aEFwVHJCNjVhN2JUSDlzMVh4d2M3aHhpRE1IMmdaOUl1em4weWl2eWk2OVRJR1J6QlRDZDFEd2JkdjJURlM5MFJlMGVDTGFyUG1aVWwvb0hUWkxIeUw5eEZYNkx6dmh2T1V5bDZtMlFDUXFCUEFBMzB2OW9iTExTbXpwMnMrTU1FdllZdTdwZHozVndTSDdrQktQazZLL0N5K2pvM2dKUlhlMUJQeW5qU3MrZkpoYzJPL29sck5oL2JDQUNnVUFsV2xZbmNTRTJQdHJoOGIxVGV3eHhHOHdraXViQ0VYRk9NV3RJeXFzcFhaa3VpL3ZqSUR5eWx3R21wckV2dkdwM3paWit3RlNJWEpXRGpXUHlZNHBOWEdWaTdtN0xSQ1o4MWswdFRMY0ppQmVCakZvMzk5ZnFFaTRRKzg1enh5S203YXZ4VEJsVDMwUVU2Q2F1MFBvbEFXWnFVTEpCaWk3b3BDbXpVMm1yT3ZIRHFuOHJGNzFnc2NsVXkxWnduY1NvS1FsdmJZcGpzcEt4b0kyMDJHYkUzL3JlQ09HK0NvazlucFpBR2Q4cEMwL2p6U29hekU4OHJNZHRKM1BWdnUzK2FnRmx5VVdHV083V1VxSUUvWUUzNTBNQ011Q1RMNmZpU2U2Vkw1TS81V09Qckp0MEpDcGFSeW11WGo3RTVuWGZ4NUFoTWdienZWK3U5dDhhZlNNWVE3S3NSWFZKNEt1eThIYkZkamVBcWkxTnVhZm9SYmhTR21HNjlkbnFQdzhCcktVRUR4N1lTaWl4RTlpVERyc25UeHpkbXc4UEhHNGdDMXNPRnhuenZyZE8xSS9UdEN4NXhyOEd4dm5zTjI2YnhzNHdWZmxmalROYU1RYUNOT2R1THZPbWE5bnpzMEVla2lhZ25rd1FnWG9GZDZESzVzMHZnZllqYjh2RkpHRmpsUUpNSDQ3bk41eXZqWkVFUkJRcmF3bTFXMFlxamRsckR6ZE5yVm9kend3NW1ZcVRGV1FuODdZOEhvMzNwV3c4ZDFycWp5WVY0aUd5SC9peS8yVERaaXV0ekc5NDg2aDVDOVlkUTlBYmJFa2ZISW5qbTZLQ0VUdmJLRnVzL0VhY3RFT2FoczlBbmlkNjRaTFRqNmFXejVIRTFNdXFZSCs4SzloczhOYlBvNWNtWkNGOFU0d2MrVzU3Z3ArME0zZDJlbG5WUWtNYTZuN1VaM0pBMTlKeUtvL3JEL2cyK1NpZnVQSmROV0N2QXRSdHdGRjkvNzJJWkNQN0RhWFBJaG9FMXFCOUJ1NW9aOUhYdzR2U0hMNFBtVEN0NHdzZS9rTElFOFByRXdSNkxCNUVkNzdiR1NoWU9uREtjRkdBcmk3QUtYSXdpMCttdy94QXFpckdDeTJ3ZmxJMWN4V1I2cUtpdzRFcGxaSEorSFIvYTRSUW1jQmdLL1JWcC9VMEFYOFpaa2JiSGNjbk0yRkw5bWIzZ2xQbVFlOFJ4SEh4bWFYM2t1NkxDZzZyL0JGR1dxWkZpZjRIOWREZmJjcUdaVFJXUjl0SGNnQ1IzNUQzai8yWTVkcm1BWnFMR3F4Q2w3Wk8wbTZ4UWdjZHB2OEN2UEs3SW9sYXNVKzc5ZGVHUllPMEhEY211bU56S1UvQzl3Sy9LMlJJNllsY0RtdGY5YzVLTEh2YWZTNkowK2xvR0tCMFJtcnpsN1RqWXg5bnhKNmk4UUtwNE5WaXJkZnFFZnBYckdsWnF1M0RDYTY2a0RrckhZaGY0N0VIbmZnbXgwQ25GczdWUFROUUZYVVo4SUtkZnJtQzdPM25DK1l2bk1PMFFaTE9nTk9UTTNORHRoN2xsVVkrQU5Xd1BOZE84eW5zazQ2eDBxdUl0azNWcHFuT2ZiY0IvT3ZsVnNjZnc0bnZOS2EzRUlKWEloejZTYkJjSEFQMnRVR1ExSDZHUU9wdzhoSGFscVgwYUg0Y2tvRGpDZndrS0x1MDNuSTlMYU5YZ2N0VGRoT2N4WnlwQUN1U1FuekxlY1k0ZlltaXRzclZmaEwwdUY0THIrTXJYTDZocStxMjBUQmQwMUpsU05nN2RGb2lPdi85L0F0ekk0a1JuSnIxNmk4enk0Z1g3U0pwQWsxMzJkclhITE1lckZuSDBlYkpBNm80THRVbTk4ZU00TFBXS1ZmcC9maHJNS2NYRmNPQUZtV3lZL3VFcmZZcUlPYks1Zm10Z1R5NzJtNTVsZ1BSZUQ0WkRFamZUNGUwVHBRS2FYOHJVWkFtM2h0R3RJbGtlTG8xVWx6YnpjVGpyRkRuSWFrbHNIU0c4RldvUW9vSUhsV0o5cGFoZGozZHJpb1Y0UUpxUUlMdDFSQUcyZStveWdkeUp1d2dNWU1sRnhITGIwTjN2ZTFCbFVyUXBwRE5zdnBkUXgzU29McHo0UW8wZVRzeldsNjlkSjFhTEg3bG1XcnY4TElxZk5vc3NrVnQwdlUxRzNQaHg1cHlWUWRqek02VU53a3hjeG5CcXE0YWtaRmVYaVluWjFUL3FLMzAyYVFGeTRvVDJoSktaQ0xWUDRVZEkvQmVsVmNKQWwybSs1bVd5QzVPVFMyYTFjVTVvMGVxNFJyQ3JLREJjRW1rODJuQ2RhT2JPejcwMTRENi9sbGhwMytXUU1VR0pZUTBzZzhRcjI4RGFtNU9rR2lMZ0xVM3NKdVZITjZuczJmbEpIRHF1NytYcUlnMnF4UWhtRUk1a3ZlUHhqUkVRVHUrWEllK0pYdjNvVHZkd2I2R0lIYTJ0YTM3RDBzalhoUVUrV3NDLysyTDVLaGZ5NVJUNmhjVkNBaWdGa0JZa21XeWdrM0FGOXJQeWRvSFFyVWRzTmhRei9pbUE5SStTQ2RZTGxxN1g1bGp5SmhpNkpQQ2hNaHk4UWNHSnkrWUJrc3gzd0RvZGgydG9JenVjYzRwTVFMajVwSlNYaHJDZTBqQjB5WlNkL21HSEw4UXlTcm5aZ2ZJb0FQZmZCTkxXYmo4dGNHc1hDMDRGV0FJYlpVbmdaQUtwMjNERllEb3FrMjd5dXBsRzEyeWM4Tkg4T1hMQmhINWNRVWF3anpqN2cxRk9lUmNkRlY5VVh0b25yS3F2UmtiNEdveE40S0FTRHlDaUFMMzM4S3dUM2dkaUw1SDF6MEZZazZvaFlZUlU0b2R4ajJKaGxjMGF3UEh6eVpEcXdiS1lzUUR1Q3pUUHpXSURhTzdtNFZGeEYveDY2aVlLbmM4YU1xWlVkY25mTnhCTVBSZ0RDZ1NTcVlMNXlEdDVWejNTd3VDMXRONkJkNlhlWmo1a20zNm9XYVgvSEM3YWF4bGlnWU00YUZRdnVvMmZXYlNldjlydFlJb0RVMkFHU29lbHAyNzRvbkpCeXVBOUZpZnNDMlp1RytnNU9FaU1pVXEzL3ZOeHMySmlmcjJTaG9kVTllOGltcDRqYnplNEE0Qmg4SytaSWRaSC9Hb0ZUa0J0cTBXTHc4RkhhRFVaSXZXQ21HSGplVUZJaS9PWktibkR0M09OcFhVaGJmRmFuUHV3c2V6TjRUTTU4blZhQlFDRTd2Qm5ibTNHVldnUC9JdURhbU5BcmhCcEt4Z0cxZWNFM3c0cjFtajhQb05FK0M0d1NnWGZsQWwvUTQ4dWUzUXJ6OXYrRWEzbmZMSC9RUlczZ2ZoTVBqSkRQcTB2SmIvbXBWUkZyenpGaFBBaHhTcTJzOHkwV2NIenFGS1hQYnNFdE1taEl2ZENOVjFiWmh4NmVpWlI2bFBoV0lsWjhGVGcxdE9uOEROQkJwRHU3SWllNGN1ZWtJcWVQOE03dDZhVkp0STR3Nm5LSnF0RlMwSWlkMTIrelNLZ2Z1WW5UbTl3RlovbDNwckNtVklHZThmaEhsb25iWmNPU3FZQjN5M3kzejh2V0xad0tYa1dKMEJyUnM4YTBQNis3M2Nnb1JQN3hJM2tzWWsxYStoRWV3SGprZllKdlZ5ZEFkOW5NMlRWMXk0Z3F3S1czUmJzTGhSaTNTUTkrU0VGVkYxa0JZZE9kL0ZHTm5KVENEWFdENWJiMG9sVW5ob1M5K3BEODRNa2RpUjJOU3hjRWNDQmI1VUI1U0xwRDlQbC9UVENlME80OWNnVUdvSEtIY1hIR0Q4MVJnaWxaWmorZC9RcnF4UjN1cnM0MUhkTDhPTGg2SkRPVDk5UDhrTjBmeENsWjdOcUVZbkJnaDVDTWxqVVh3TWlRd21aTnJSdEpmbXloZUZrWFhla08rUmRLWlkrRHBwNUdwbW5kT1l3UklxTlFXOWU1elVjelB0ajZwTSthZnVRa0NIT1BQa0RGWVFqTloxV2FTZzFEWEdmeUxsLzBtdmtvTzVFNEJkQlJ2U2p1K3N1RWpNODJSMXhjRkRtZDF6M1R3WEhhbnRac3BpSndjUUZHYUlzbVFxOC9EWXk5d1N5KzBRcVB3SkRkcXM3TGtBNW9reExyMDUvTldLeCtXaGZwVEdhVVA2d25QS2wwdzBCbThKNTRuSUUxZGUvQTNaYUF2dzQ2clcxS084TklLZmJ2dXBRNlNGY3pmNy9IUTlWYithZm9QbWZlNUdPUlBFcDg2K2ZYR0RoQ2hOMlIxTFBsOHQ5RFJzQWpmMEd1eVRQNHZQbE1zL0FQS3Z3UVhxM3Z2dXRMVGFZUnlxdldZVkxNZm5iSW04dC95cjIyWFBsRUJsZENWc1YrL2RxSDFTN3NldjNIZGNxUnFpWTlhRUNmSWpQWXVTa01FNE9ha2VZZkR6TzdqR05RalhrbERWa1lsODlhc2J1bXdQNGlYU0tqSjFCYmVOWDJGdjMyOER1VERlYmF4OUF2NEZ6d2l4M253ek1IbVpuVUJMVmtmZDRGeVVCaUs5T1AyYlZXNldEblNCeXl3NEtSZWxTR0JyQ3V0VHJtNzlEbno5OGQyb1hQamVlVkp4ZEhqdUZZTGVFSGQwR1E5Q1NKOFk0UlJzRmt3TE0za2R5Wng0QzJGU3ZFWXJGandiR1Zjdzg0cDNiUEYrdmhzbVQybmtIczc0RU1zY0NuY3Q1VU0raFVXMHJUWnFaUkduQURwdHNNaVQ3cG9SblNodjdXYWpyMFpFMllKS21aejFmVXdzYWhxNUxodUZ4WnVqTnpRVVBJdmlnd09jcURGQmkrWTNuZDVmdlk0RDdBOXlSUFlFVXQ2ZjZ4S0t5dWp4ZDRwSUd3anp0ZERxSE9RaElJNzNZWjZEbk9XSmZWVmMvWmo3eWRCVFNPMDVJV3ZxRE5WZlRoZWRoWFZHUEd4ampVb1Rzc1BSeXVLeEYyblB6T0o3dlZoSVR0c0VzcXEyM3RjZ0ROaFBYeVFjL0FkNGExK3JlYzRpU0Z0cVAvVm42RlFWMUY1a0RHcmNqN0gxRkZtL3I3QW41QmNGdVJ4L2h6L21FaUt0UHRuWTVQbWFKeWpCbVRBYkZOVU50YnpJc05td1UwUVBvMnpRNGhKRkJSaXR4UU9EOTBhMjRERU42eUpMbzMyL1NoMTBYUjUycXVsbVpXVlp2YzgrYSt1bUNBZDQ2ZnhiRyt4RC9Scy8vTzBNSENEQU4va29JSllabHlTOXh5WSs2VlhESGlxSXUwdWtPWjEwRzhrVWZUWVFpdGozVGtrbms5TWZETzNCTU9lWWtYdFlmRzdaV0FWUXM2UGgrZWtqanREUFM5NmMvZ2Zza2xlYUpLeHgvVnBuRFhkS1NPL2o3QUszZ3l5WnA3YzhvTjIwT2h2a1NFWnVIbVBXZHZWaUZ3M1hyZ0VhSWdQb0pMSEE3UEdLYmFydUl5dkdXNFYzeVplOVZzYmZFaU5veGpEc0FVNmZCOWhiMDlUdDJwN25sM0x4Wm9SY2pKR3pPeGtQeWtjcGVhajRmSU55NVp1UVpIeDgvVDZFQTl1Z0hoL1p2VVJzR2dXLzBtLzRLYlNzSmcyRUN6UXErYkFtOWZqalozNWhRUkRXWWNkbmR6TEg1RXJWeWhiZHlNclU1WWJKUHc0MmR3MTZ6VlpDOVMyemhYSHhzR2ZnRHJiUkJGSTZBRzZNS2ZURVJjQTlPVmk0NjRyQ1ZNOThPd0M0NG5SMlk0NzhiZy9BMUh5TFNCUlowc0VYbXpYaTF0VmhVVUl4Z09QVWFGQUxTUlhvMmcrRnY0SFJsYXAxYk01a3BucHBNUlJrUmQ4eUI4UDFMak9JUEJ5N3l0NTRqRE1jMUp3Mmo4bmlmZEkwRGRVckdHNTUvTEVmRFhvcFlITXBWUUIwenhmYXZjc0RnWVhtZ3pHTUM4aW1DRnBZSUFXMHJMaldydDR5b0pMcmVkS0diY3poYVFjWjZvTDdUN2gzM0lER3EySXg1S1NURExBNGJtQm9FSFVaa0VDa05UZ2d2N3RWUGE2SWlMREVEL3ZUOWhyOFhwbHJNSWtXMUxhQ1dadmttR3Q5UkR6MEJsTEc3WFY0c1ZXQTZZSlBLK0xVQ3ozUHZKUDl6dE9DV2g3czVBYUNSTWY4cTRJeTZvbjJ5NUJ1RGI4QXIrcXVuUGRxdjNJVFBGeEV2aXRMcmZpeHhDaitERWNlVW1ZcEZLMWxOdE9wQmpXZEk5dURtSHNhWlNYZ2dCZ3ZEaEJSMW9qWnlRM0xLei9naDUvOHJGcUs4ckgvZ1hiaVdka1dmUUVtT2I4RDM5b1ZHWW9JbUNjU0NRUGI2N0x1akpJN1MzS2l3M2tPejJDbzJNU1ZaUXdoZlFMeDZWSE1RdkV5OExvdFJKbVp4N21mZ1RWeEVGSEZnMHBBQWRMbFhkSlNSZklEcUhQN2kyUEFhcWx3Z0xtVFdwTlJTTUVuSnNSVnl0TnNHZWxudFBONUNxbXhqamsrbExQTVMrcUZmcjVZK2lrcDljMTZJcnRtREcxZ20zN3FXTVNmeFMwbkZ6ZUluSmRsSGo1SytCNGM4NjFQRm1KbzNNODdnQXRQRWR4QXVrcElZdllVMHpGUTNXOHQvaGtHaklJL3NvbVA0aE1pbE9tQTIrdkRuY1Z1TDdDc1VzN0s5WG05QkcxeWlnejM2QzNuZHhPWXhlaUxxWkROZmpzZ21XSDYvRmtNWnJabVRycW5wcGdxQmNmdXpVamJzU3NXcDlaaXVMMlJOK3krWGtyd1BLUnhZNWNzRWJ0QSsxWmFEZTJrdW5haC9Dd3NsLzE3TmhSMnQ5eE4xMUJlUnR2bzd5MmRTWFhxa2hwbUw0Qm0yU1NFN3hKcDJQcC9RaHFEaFJiUGNEZCt4bXlYQVBaUFd3MmNjeWE3WjZLSWVMdEtNM21aRTdlR1Y3bTUzdkZLakJWdU94bVBSYmNMcGsvaHVHOTVIcFhWNDFUd1lmbUhNcmFhallod2Mra25JMXFWbVpVZ3YvanJXU2VoelVwMEJ2d3lyVmxSSDA3WmJueVp2N0NXcHVxTVo1b2x5M3R3aTlzWmx6TUEyMkFLeGVPeFRkNlR6Nm81MkhVZlFXaGl2SVJBQ3o1cTlLQk45S0JRWmprbnBGYzNXNzFKd3pKa0pmWm9oQlJ0UFlwWHJrWUFub1ZPVldodnBQaGhPQzlzZXB1NHNRNGhzMEtidHcyRVVTN2R2Vmt6K2l3UFFOR2dsay91RGlaQzVxS3p6SFZuSStNTE01NWFaNWxDL0FXWWh0SC9NdVhNZ01mSUlTdjlIaDFkTENSU1EyNHpZM2tXS09XNW41UUQzd051WGEybjh2aUF0Z0s4bUQzK3VKUDkwaWRRSE5La0tGVjVNR3I5UnNtcUl0NmxvMmp3eU82RS9uT0dNY2dTb2JPMWJZMVo1TFlaQm9VVnNoSlAyWDljazJ1Rlp4LzR0aFk2TEh6U0luSXlUMWxCUnRHUlNVa25FazNkSVN3RGxlM25WdzhzdWU4b0ZOSG9mQnUyWEtzVXlIMnJDc3crNlJScTh0WTh6RVV2cVNyNGIySnhMcGJEK0ZjZ0dJQXovRVRBT2d3VmUrZmRwd2RiUk04TWJBT0dKREhpd2FETXQ0QXY3Z2pFMEJYeExtM2VHaUlzVTNuQjNOaHgzUUl0U2ZXeE5HM09zdU9nRmdqQnFyQk9LL09FQ216RnNxZkN2RGRaaXVEeEQ2Wkkyd3hvMDVvOG1xdlFlY2lkZTZBYTNtSisrWnlmd05qZlhwMHVpa2dQY1h3UWpHbVY4TC9LNEFYQVlycDRMSWFaUnJ6YTFOaFNQTmgyV09zM3hWeXFMb2lBNEJ2R1VUR3N0aTU5cFUxSEdHQW03Nms2RkpTMjMrSjdBUU9WMXFFQ3hPckl1QVBFNUNGRjhIWTQ3b1BYL0tDd3I4Wk5XbHNxOHYxOGc0Y2tYbnUwb1ZXNTk3WVh1cG5yMWd5Y1k3RVBWUktUWm1BZTA0b1RJai9jbzZNY0p2Y0tMUFh0ZE9vWTNNWVVkUEFvS3prc2ovVEp0Rjl2ZzB0ditwRkdSNUhpSlB5aHc4Z3N5aUM2VlJVQy91eVVvcDB5YlRqMzdLa0szZjhlWUtMV3FsVjUrVGJEV3I2bTBLWEx5cXhDMmR6ZDZyT1ROWDZYbXRIczUybFgvWUppMk40YklNSEFaTkFIQWkvT3RITC8rMnRBVTNuY0U1Snp6VC9RZ0cvejQ3NGZiUWxJbE1WcnVFeCtDSTNOaWc0dXhwUzVQa0ExZk1mSTZia1ZQWStQMTM1RFpmMnREeVF5eXArRzZycTJxUnZqT08xN2JTSTM4aDJ4TnhWNmdIS1BCSHdJZDBBRVpqbis3cVdFK2hFL2gyclNMM2JSRTk1bDRIblQ4bmhPMTNKNmw5U04zWmhKeGZzeXptSnZSMlR1bHRRMjhROEpkYWZ5RTFGWno1dENXYzMwVUtvRDB3cFdPRyt2THZIRFdLd2p4cHZWNUtwNG5qZkx5cjZYMkM2TWxLdEYweXNyWTRBSnM1d3h2UjBiS0Q3dEFGWXd6dkpyeDJkU0tyMG9OUmU3UUhrcjJhSzNEZDh2M1N5VHFSbExmWEo4UUJ5S2J1ekxoYXJhNkt2cUsrQlFwejVkcS9pQlg5aXlHekNLRjd6ellhc3draGRZTjljMjRCZHdEcCt1WGc1WUtNSlZYa1VZbERLVDE1a2YwOUdVdnBPS2VwR1B2R2VqYTdkVFpkUzNsaHhLN0ZaUDRGS2VUc05wZ2wrTC9Rb2o3eHhJM3ZRcExlZURjSVVPdzFHNUtsdFVOODczMmtha3FWb1VlVXJhdFhPeDlGWTJHaHVBYlpKM0ZOZHdYUUpQOG9EZ1J1NHJ4RDhURFJJWEtaYWQ3MGJNR2l6Q1ozekxIUWNRWUs0Y3RrcjBEMzF3QnNKK3FML0ZqMGxGdXA2NHc5V09BdjdJaEt5bFQxejdJbEtGZFVhZXdrVlFsM3o4a2ZkWERTNGJ0TlJSdXREQWZSQktrTmtzL1JWZmhyTVBYd1lNSncwcjN3TWpJUUpHYXVqdkJqd0xONXd2dkl5b0lKSWovTjM3Wi9kLzdRWkxQVVBZOHZqTzZqbkJ0SFJyV3lEUWJOVnUxclFpVjVSbGpnOGVWc1ZqYTBFdkFiOHdIVFliUlN6ODY0UTlUVktySGlJMjhMZUt5MFJybkdZdHFIdFNPN1VKUDdZbU5aU1k1Zi9JU3loWmJ2ZWZ1SXg2dGdweWxVWTlVWW8yMHJQU2lOejI3MnJoYlptRXc4ZENkRUFBcmc1RnFvOFJBSCtmRnJDa09la2x6eEw4bnFmVDh5THNjQXNUMjlXc1FLTkx2Z0VLSTl6STN3NTJmcjZRcGk1ZHNZemZ4eHo0RmVYY1UyeUxpMk9tV3RZcFVTbEJpMUZvQ2piTGNOU0dmbWFOSGY4NE9ZZHZUdnZtWnlHK0w0eHBtcDBHOGc4VnF2aTJXcWg1MlY3OUJ4Ykc0TkcwRk5CUWN2dkZmejEvWlIxeTlpZWZ0WDZIRTdkaXFqcHVDN0ZuVWtNc3NGdzA3N04waHlIb0hJZjdIRnl4NHVjUkd0cm0wVXYwZkJMQjU4N2FBd1hTTjFRaXBUTkp3TkpmejBxTmVLK2E0MGdKTnRuTm1aNThsNURkSjdpcDdSK2VQb0REVzdpV0duSjg1ajhZaVFORTR6Umx6cUNSSW1xUXVxc20zYTUwMFlLZmdPTStjSVRqSllWaExYNTNRQ2pIenVDZTZWOTZkaEFXMk1TVGZJRE9hdzMxMUZOZU9tN1ZFSHlaUW9OOGtjWHQ4QllUaHNNUUY3ZUdhL2Jpc1REYThWbno4MUNaMXFacWUyUklNVUJOVGpyUkQ5dVpMb3dNWEF3N0c2Y1Z6OXR1OEM1bk5Od0dvRHhKcXM3N2IzQjlGVmVUZGpXRzhlME0rMlpVQWVyeE1icWtoNTh6QjRmZW4rRUUyNEk0bEZmTnlQVitKOS9HdHNvOVEzU0FjNzMwYXUxUS85RW1UekFWY0ppNWRRZzlUM0E0bEo0d1dPVW9kendBVVBPWDJ0WGtwL2hITnAxaHRHdTZOMURBNzZQcTkrNEc3c2prQWJGMCtHd0tVck9WOEVEelp0Y2ErZFZuTDZpdmJ6RElkeWxRTnZpMVQ4azFKMW1vQXhVa0RGQkVtU3hUSmp1QzZXS0J6VjZ0Ui9GdEE1RzV5NHpGR3ZUSzhPRWpwVlFJem16SHdXZHJ3SitEMXZmMHpmbEdhSXh5Wjkra3BhdDN5M1NxR0ZGUU5BMWVXVGhjSkNkSFlNWEpNaDhOclV5eWRlZy9oQS9tamJHL0tKUGx0RzhhSVZ2R1hXRFlxVFhQMHBOcHhncEh2ZGRQdXZqbm1ZdXZGL2dUa01jSWlCQTlJblRpWHJpdFYwWWllTHREZ0ZrU0svcGxyWkVxVVpjSXlvcFdlUGtMY2M5cHdwS2k3UEN5VzA3enJkcWJtV1ozK01rZFJrNEhjVG9iMjZUSFhtN3FveHBIaDB4dTV5Q3hlV0NIWUw1M2hRbW9PRk12bEFqaFdpTm1ocVYzWmVTUDlOdnhFZUdNdi9NSzRzcWdzVUFuV0w0NmF0ZjJVMWJZYWVnbFA0N2VsR0NsTXIvTUNpMGxiVlNqNk9SVjBuc1lhRTVSN0JTd1k2bUV4Yi94WmxFU1BQc2VHb1k3WnJGZHlvakFJWU0wM1kxSUFRVlNaaWpzTGF5REx6YnYxczFDbnBRcXh3RUZ1OG50dGVrYU5OU1VKbExTRW1qUmh3ZDdWd0RGNkhpWWV1VmlwaTIvZEY1M21GQUVsc0dpN1dnQTJZSXBSWnpMQ0g5UkRtRHYrbFFDN1lnTkpvR3J2dXBXSnE4R0hGSmdHNXBCV3lBMk9rSTcwem9zWlozWnU1R0dwR252OEt5ci9WVGxlclFVbHlXV01DOHFObVA2NzA1Y1kwVTMxRlgxRVlFRUdZQ29LbmgyWjRIdTRXVkFWMFNRMjdySlAvR2dRUVB5L1VlSUdLOXpvd0xhZ29vcVZNZ3I5TldwVXY3OEdhdjZEVHJ5M0VFTUNBUDZvcEkxdzYwRjkrVlhPaWN3ZEhBYkl0WUY1MlFDcGZZZ1NFV2s2TnBLVHpSSThOSVU5MUNzU2t4SjI2TWhnYmZlYlB6azN6Yk9FeThjYkl2MEkycTR4Z0pGWWYzUEY5VVBpaGRlbS9lT1pMN1ZFdVFZV05DaUJRUEMyL2dCK3QrVDEwb0ZqZm1EbWNnR3p3c25jUnRITW1MS1RhN09ic2dzWG0xY2ZBeFdLdVJBSXQ2MkpwNGg4Ym13STdwaS9EaDdQenIzMHJoS0FTdmpyS2N6R0dEZkwvbUg1a2VxbnlSK1FGdmNCUll0RXNRQnh6cXVDUWJmTnQ2anIwaDlPZUF3cFlscUtHamlVdkJGRVp1eFhFR1NSUngyUUJaUG91NEM4bnp2R0xYVnRHZ3p2K1UzaitGQnFjWDZIZGJCcmN4ZEt5bFNFWVRPSFVCVVUwOHJqTVlpek42WnFDVnhEY0tBV0ZqaUlzaGxSUWtybDRDWlpHcXkrbkFacUo3dlYyQ3YzTVdQY1FmZWhpeDZmd2piOXdCR1BDNmt6SHFWVU9CVGZrMWQwbWIrbE1MYmdsYkRlaGtOdnVCdEgyS21RVG5hcjVLR29veXRDNFFKTzQ4Z3JpcDJKNFJDZlh4UEg4MlprVm0zNnR0MEVnSy94SW10Ni8yOUYrYnJXSjlMYTg4RE5yNTJTalQ0WkJIWnRiLzJVcDBiR0p1U0Z1aXduS0JsMXY1TzJJcGJMZUFWWkZKV0ZXL0QxckZoUGNuaG5yaStpdnZsa3dpYndYMmN2WlZRR0VNc0o5aXR5d2owQUY5MmdBZGowT2ozeEVyclh1aC95cjc5aVR5N2l0dkJjWEZzdTUyRk0ydktKNzg3TlZSRlArNWxXNFFsWE81a1NFQ2Z3NnFKTTUvNzBHdUZFNnlWTmlWTVUwU2pHdEhlOUxwU3JwUi9FcDNhV1BTUTBEYVNWM2ZwL2lJS2UxRUhqclFKdzFSS3BGb2E4OE81bzVkem1BTkhQTy9YRy90SG94V1U5ZmJ5T293ZUlNRm5qWlBYc1ZtaER5NTRXbE90eFlWSU1udjR3bURVUk14NDhob3Azby9Vd2lweFIxNGtvdW5IMEhoMDJlYUFkTE5zc1BGUEZtaU5qR21aZWk3ekUyTHhpN21xZlFBMzRrVUxqckVzM0JLQ0lNNk1TMncwbWVqL0ltQ3plc2ZwcklmTU9aUkpYelU0MGgzRjA0NjJ6YmVwYk5xc2ZjMTg0cWFSSG9FYm9kRXhwK3BGaGNTWFJYSWtzQmpxTm12MUhiSllheWdBaW9lOG84d0ovRm1QUlpYcmFZSVlQejNReXY0dktzM0YzSERKSXljazFEVmhLNFRMS3cvUnZDR0Y3aTFUb1VHdnBDVXRuQktkT1VOZmlHa2hDMTNQYngyYmRabE80NGcvRlhCZzJwMW1URWR1TkEweFZWNk9jLzJKTjhzT2hwaVJVbXJGTDRjTUxPbGFCZS9Qem9xWXJtQ2lzeUgzUTBoN3Q4bzhhQmpaOVp4S1BPSHJKVzU4UmxwZHVBOFFTOGxJWUg0SnNMUDlQaFNGVXJVQys3NGRBVW5XYklvaUN1NnFHV1FGZDVhUllvaWRvWTJ6akVOSFMwdEU3WVJUaWdKSnVXQXZMZ0RtUW1jYndKd09wRlFTTTVGcGYrYUllV0dEUklUNDQ3QWZUS1BhTktuQ0tQeXBJY2xleDJLWlF0eDdFSFNVV3ErTzhxamtPM2RhN0hDTC9LSFNXVVY2ajhVY25zbFE0UG0vWlNTTXU2ZDFoTnFCVngra1BYZHJBYXlmOFN4ZEM0Q0t0Z2I0Ny8wTGZNejFnTkFDcWd4Y1ZpWHg0NHVlSWJWUzR4czNnL056QWFNaEgveDdHU3Z0Z1B1WnBYY3AwWXFsMytLeTgzY1ByMWxBU3J0YTVJaU1NRjl2NWVmMHAwQ1k3eHhFbE44UEtXOTZXOFdTUy9BRjI3RUNlMEhnT3crOWFSRTNxR244NzZWTFg4Uy9odld1eFhxU083MzFEM25sT2N1eXRISWFlV2s0NlFCT0pDNkc4eVhvN2VnZ3BFTGZNWW5VcFd4ZTVUN0tJY2R6QXBKeVRpdUc3NnJsU3BndHlFRXo2TmgxbytSbExDamlSTTJha3M0bTRGVFNYMVpaVnptTFJZTDFjT0tocjFHb01vMmFCd2dCcWhCSHJSRHVnaVl2N3R4dks1V29wKzlqdHRkRk4xd3BnNWRZK1dNWjZIUnhuRXJib1BwQ1VDQXk5QXhnZ1ZGK2dQSGV1cWhKaVE3WlZHeUx0UUVtZ0JUTktyclF5c05pYmQ1WmNwaDFRQWVmZmpxU1g4enV0WVlheG05MTZZMFV2bFFjNkxobGErTXlnWVNwNVZaOXVFUWpoTGd3SkxGQW53d0E2enJ3bXFpcnNoQWQ0dVNVK255MGlHeE9QMW5sUDJyVk5zd3dFdW1mb1Yva2gxRHQyblJxbGFOMnlDWm96aldvQ3lCS3ROdmU0NGZrYXhlcEJOQ3EyclRBRVVGWmZvUjlmdUcvK05zWlpSMng1MzNhQmdSZUJKRHo4L09sZ3FYcm9lUVZCbjlrUmZDTEhpR0VkZm50cHpkMEpHVHN6OU80eXh2VUw1ekRqTE55VGNPSnNBeWRHYjdibDd2MmVKZWlWRkdybEVvVjc5N2JrV3pTbDZyTTEzOWdUMm05YWdPa013N2oxbVZTQ1BjSmFhcVFROUVHQ2sxSy9WckRWZ3VkZHMwOE1XcnlicHRwM28rRTNtWWxjZ2w1YWIrVkJhd2Foem9IZk43U3ZpVi9mVUtXT1Q3dXBxcS9VME5JeGcrY3FLaTgxRUNicW9oMmIvNFNPcy85SDBtWmhCU0wyREI1bTJmWVRFcFJRZVk2N3puTmJKV2VsdkJYUWNrVS91dnVGZkcwaGwzamIrUGhzR3BTYUI0MTJ3NnlmbTUrS1VhQi92T1NMdTV2VXpsR1J0WGdMZzM0ODFWMlYyWi9Mam9vcVVLYVRGbE5QbXcvQUUwQklGaVVtbGdHRUtBay9ZZGdxQ3JXV2JIYW1YWGNyL09wdlFHVDNYMGt3UVVzSlZRMUdCUFdrd2sybTNOVVJ5ellQc3YwZ2g5bnZTYjBBMS9CWWJ4ZEFJT3NhMnhBaFJDQTFNK2gxWTRjZ1hDODd3Sm5qZmt6S2MxbllCTmhwSGdkV1AyOTlrUDljQjgwcW4rRkwxRElYaEl1VHlLV1FQa2kzRTNJZUl4RDlaOVZkOEdhUEFmZGhVWW14QmRJYS8wTTl4K1phTU90TlgzcUpNSjJBeDN5WU9vaWV1c0pBcmJaQ2l2djFxenRpUzNINGpUZ2xqd1ZFekxhT0FrK3Jrc1BmaDdSYjU0V1pLb0tjNXQvVDVDRjJ0TmE5WTJ3YWJFc3IrSE84UUhaOENOWGNvbHFhYTNPZ0RLN0VQWWNqN0ZJbWd6YWVHYUlmYlFuNStiQjFyTlN3WlRLTVVpR1MxZUlJSmlTcm44YXFDTjI2b2VIQlNDT0c2TWlvNGZROFlIaTV6S0RJdGovTG9TM2Q2bFVJdmZhWmZBcTY1RHQySktLNlpBMFpCMXpUTUdXV0lyNW1oZE1yak9YUUVJRjZPZ2pwb0YwSGZyNk8wUlVPM0hPMWhSSWZybGNQTG9QeTlLdTVzYWlFSHdXWElwYVB1L01yK1EzNkFpZEFyMzlWTDVjQThWSExXaWVKYzltenN6Rk8zRTVVQVJtMWVac05tclNLMlpRdUxTRFlxUXZvbHo3UkEzVExzdEZwM2ZWL2dFam0yNG9YU1diR3ZLMjBKbVhaTGNIUTF2NXJqRWUrVjc3c2FiVVNyS04xbXBFbi8xd05PUjIyOXJReDVRbVB0ZWgvamIwVkJzbjdwQ0t4bzNQeEV1TlF4bzRiQzZ4TnBCVjA0eVRNVHpLbDdkcWE3eDBWM1NXUlNqTVRqR0pYZ1cvNWliZll6Z3gwbld4M01qb1MzZ0Jyb1NSTkNvcW9kOXdRV21NTkRHV3BzalVkRGdqdkNyZ0RZcTBidmZaSjYxY3ZtK2pDaGliNk81aXVtTlEzYzlyZktZdGVDRDJxVGRpTDRwTW56Vnc1QWt1eDJFamZOQ1d6OWwyM2pTRUdBa0UydmhRK3EyK2xHRFgySmlBN1lpQWhLWEdHTWFQajJoelp0MGJMRWZ3b29XTzZBWndMWlRLa3lwUTJUamt3YTl4UVRPRGJGSlo1L3FSN2w4Y005UlY4c3BEWUhpYUN5RGhIdVZab0JKbkZoZFZLaUp0V3RuSEpiRXhYb3lDanVlN29RR2g5K2MzcjFSWm9KYVlUaFlOQTdYZ3JaRFNhSGFYVUtLbEsvMHh1N0wzR0Q3ay9vT0lyT2s3N1dOdEhGLzZOUFl5ZENURzRySGpGM2RVRXpsRjc1TnlFaDFjck1YMVRNMnNxdGpjWlpvMkIzQitGK0xURFFGUkplblNteC8wdmFoNHEweEJYSXVjc3E3d1grc1FyZW8xWUM0cWMzU3pXcnFkTkxtVHdiTEJDMGY1dGtTR3FKY29qK0pnZnFUQUJFMWhGTlNMQldYOGFQa2x2WFZ0L0dzUkJ3VHYzeDdQOFdEaHlBd1BjeDhWOTM0TnR1SDRHMkYzVkZURUtnR21MbG8xUm1yWjdxZG8wN3ZyTkpuVWhtaEtldmQ1cXBoYm84bnh3UUx1MzkzdXQrMFhJbDdpdE9jNFRVYitacEIyS2F3NlhUSjd5K1lKTzFnVmhJd2U0TFpERkFZVzlGdHc0YUhvWmQ3V1dHZWtmK2xWZFZDZGtnc3ZBemhsQWwrUUlpNmJaZWhYTkpmSno2STVCbGFLb2E4d2U1T3dCRnFxVmRVelpiL3orYi94NFluOTJGOEJLU3pJUlFjL3RIOG9lRHhVVEp1YzF1ZnBwdkZYSElqYlF6SWg5L3NpTTEwUkN5MFJJOEgydG0vMktRNUNjazI5ZUowNzdDZ0ZPQ002TndsMDZlck01UHM0NDQ2YStXWHBpQ1VTR3NROXliNVk1a1Q3QnJWQnpKc0hzSkFYd216SjJ3YWoxRnhLWHNCaFdQT0dTNGJ4T3JQUGpnM1h0djQ0Y2d0MkpyRUhYSTJzLzBYc3JmMVM3cVV3eDUwMWFncDdWcWhUUktjK0p0Q1ByMmVoK1NzY3lTdkxjeHNvZ2pwYnhaQVRwOE03RlVudTF1VzdaSVdQUldCZERUeGxRd0F3S01KVWhycUFKZkxzM29nRTlCRzRrS2gxczh4TFdHV2dVMGZJRlp4eHpNNWpQODZxaThHbFhMS0xTNVk1Kzd0M0pvVHMvZTZMVDdNZVpPL3o2QTFDN3RaOG96M0RjZGkwOU5RckQ3Nm1ZTmhLT2F0L1JETTV3Y0FtbXpxK1pFaDVFUnhYYUFqL1NaNEwyaEQ5cXVmWjZBdUVRaEExRk9FUDlFRmt1dkFFdll6Wk9oSTBoV0ZjSFhteElsU2ZsVUhPclNPV0VSbDlRcEcyYTVsZENJRkk3SVNQcEtnSjBEb3YrMldNdExJcUFsSnFYbnRSOWNmNTlGZTVOQ2N2bzFOc1R4WXFlK2NtOEZhYnBVLzNkUFN4N0tLekg0d0NqaC9SZ1pYSGY4anp2N3JCdFVtbUYvenFWRzF1SHBNV0M5by9iblRXVnpZN2ZxdjdWaEp3czNwZndBd1JpdE40R3U4c3dremhzalB0NjJvRFoxWktPTWdyVlMyblpzeWZrQ05FYzN3UzE0MHJ2TVlRalhjNkdSUlVzalRiclR3cVJDVFpETWVIcThlejlTZStiQTlIcEQ4UUFQbTJlY2RRL29CUFlHbzhkK1lqYXo2ckpsbnErV2xFMkJadHIzb3p4TGVnWVJqOXFLWWFkMmQwNW1nZGpvbitDVThmVzVWK3hHbGl6SlIvdE9HQ1ZHSnVFVjIxRlNwTEgrK2pvMjRWbE1oWG9nTnVoM3k0Z2dsYjhhUG9IWnFsWlk1ZDdTTEt3cm1HZG9PemVid3FjeFBxVzlQbG9pTG5zSVp2cjBtdGhwM0xOelQwc2Joa1hzNExIWTJ0RmpjcnJ3Q2YvR3NDVG44UkN1ZTFKSkFGR3FDUUJvRDJOUkg2RW1QOUlBMzRUMzdXU1RXMXV1dWVoMzF4NE9EaTMvSmRJM1dXa3NaQjFCRE1ZWEx3M3VhVkx5WU12T3hBc0FMMXk2cTJaVndBeVZnZHI3bEdvWUNld0g2Nkg3RXVDaWp2OXRwVXA1UzUwV0lCL3N5MGF4NGoxNUJVZ2ZBV3RnanhLYWhvYXZ4MDRjOG9sSXhTSmxUczBqVzk4c0pvT3o0UDRMQklPd3VZUlhtSzdhejlHYjhkZkJxcWhJdytTNnhBMWtkblkveWsvRkxxZ0prUVNOZWpsTXpxUlg3TTVBNm1oMFpXK25NaVNHcnBOZ3E0cU5UUUVPNkpBeElKTEsyemRmd3dOdEQ0Wm93YktFZ3VDM1lQQ05WQmJCMEhBQmxzYUF0VTNnaWI2MWVoOG1zbDBVU2ppb0ZkMFJCVm9wWGEybXRLbkJXSVRJdWJtNjdOSEVCZE4xa3Q3Qno3aWpBUDBkcmJEa21XQ3p5bExkSU9rV2pNa0U1RTBBYUJtTDJ6MVFOcVpXR0Y3UUsrbmFCQ1IzM3VXY2VxcUJaZHE2QmxNZ0hsU2ZoczduVXBBNzRlV3o0L1MwTjJNdzhKT2NrK2loSzE1UjJGTjBCTWZMY24vZVhCNUZBM2dLSlg2QlBqMTFSdmNvY3NSQ0JQR0hpOGJPcCt0ZlBacklOUTdGd1F4VG1DVmt3TXExYU5CMkxBNTRDT0R4dWl5eVZDNzNKTXhTSElQazYxVUlORnhmZ2Q2aXYwcUlxZmpPU05pWXk5UVJITVNFSlJaNHV0MG1ucExDSGhTU1Q0YVRZSUdYdzU2TktkTk5lYkMvcDFZekoycGtKcjhad2REYkx6Q2VpbUh2bm9vaEtIQXlCUkpTUm10T2w3QzZQeHh0K3ZGa3htdk5Qd1pzVWlFZE5sV0l1Q1oxVlBZWVc0QjY3ZHR0dzdIdm1rdDNzTEpTbHUrVEZjeHI4b1crNVRmQ1NkUmNmRk5hU1p6UWNaL0p2K0k4NFFkaWpnUTRSRGlwZEcvbDgybW5jUXA0MnBkRG9uMURCVWFFeGwrVjc0MzZ3dFo4dld3QURObGEraVYzclE2N0pQSElBclJrTzZMeDA0OFFtQXp1SkFRa2tYeGxVZDdxaHB2Q01abk84QVJvdGFhS2s4WFRvSVFkK0FKbW9VNk9XU0VXaFBKSzVKWG92TmZqSTdzQTZtSXMwWVY2elhBTFJCT0dNeE9lNWFMQ1BkTU5uM2ZjTzZHNVFzNWdZNFVob0xRU0tFdG9pVGZ6OWQ2YUdoQ0JEK3hIN0ExcVA3ckd2Nm41L0JCRDI2RnQybVFqeUdFSWlLWXRuU1ZtQWF3eUV6dVUrb0doSVRxeGsvZUJicW5udC9TZGQydmZUNmJZVWJreStpQXRXeWVrQ1lZaDNaUEZFb2ptakFlczV6Zzk5QlFxVVRzVXZNY3NiSmZMeFdXdDYzZEFZdnRoUXB1L1ptY2VVcWJkUFl3Zzc5cGZMOW1sb0NmbFhlZkM4L3NiNzhwQVZ0aGxBbWtlMG4vUWxQUFYyTTBuVUIvMVVEMlpoUWRteE93elBCTWRkWUcyWFNXdUlZZ2JXazFxWVM0OHc5dnU0ejRiaXc1cXFtc1JWbWJQSmczZjlaNUp0bTFFYnM1QjJoSndDT0o0aEFBTG5teEVuZzJFRkV3b2dKMzBzakpCY1k0R1FHR2wzL3c4UEJGNlpsaElZSnJudWtpUHluTmg2cEFlRjBTVzEvSFFDcFJUYmxEMUdIRDN0Rld6VDB6eThoQWs3dktPZnhQU0FOVk5tcFNsMWh4K1dzZ0pRdGgveU5jTHNOUnlxcGViRkQyckk3M2tWdVdBeS9TTk41WEI4U3BkYWZDN2FEZmpUbHJ0NDhHZy9MTStJTDlDSUNnN2dTbVlLQ1d3eDVWd3YyS2lyR09LanhtTkRncHBPb1J2QURyQXQ2S1hEVkFHSHFueHdjU2hhNUZuTXlTVGtGV2psK0Zma1VpdloxOVZGejNVeXdDaVM0dG1PbFBGa1p5aVI0SC92SGJjdjYyV1NaM1lXNFd6b25iZkthaEc1UUpUc2ZHbW9JMXN6R2UyMkJQdEUxMGpFSUwzYk1MbUpoT0RTYzF6WmN2Z3RHRjdpT2phQXVENWhtU0ZyNlR6RWJWTVdNbEliTFA5dUJnVlNjSjJTS2R0MzRrS3lvZlBScXFldjM5eHZBZlFaY2h3VXpXcXVRcExjUGNDUUVFVHpJOVpob1lZNDBBekxWNERuTkdxNklEOU91SzhiZXJIZTRtQko5YUJ6alBpa3NzdTVsSzV3MnU5V1czUVk2YUdGdEt5eVdBUExEa1lvdnlUVHppaVFCbldoOG5GWVlRcFcvUFNQeEo0anpQNVNOS3JYNUFLRDA0Smt1akt4RDFxb3lYM0p1aEhDak5YR3hZR2s4S2Y4M2V5c2p1d0t5V1BWOE05bktUMWE5cktaVkJHRUJoeTF2aVhTL2ZBc1Y5MGpPWm9OZWdRSndhS1dqcUhRaFRwVmE5bWdHaXl1UGEvZHpKb0pnMUhsRmRId0wwNlk0SjBhVnBhY1NtSFJzck5ZQnN4eGM3R3VOTER3UzNDNjRKMnk4eW1YWVhscUdJN2g4Y2JDbHNEZ3EwWTBsOHJsNENITWlyLzE1MWNML00vc0IrV3MrSVllNEJoUmt3aThTMVdYOThjL2tlMWpBaFM0N2FoaVI2UGttSWFYa0Z0bUdjVVZUa0VEc1BoRGQ1bnhGWkFXK0hqL25xQ3VrODIxS3pLWkVWUTVZNTFieENUV25DU0JIdm9LWTVyZVpReFNBYlk4SkI0Y2hXeGhPWlJTeGF5TTllaWpDYVppc2szNWRTeUdweXVod2dLZzB0ZmJzNGdJNU5sUDFSaEVuMWdpOFhTTERXd1JES3N1VzRsMk5HSExtalRoQjJvSisyQTk2M2VCa1pHN0x6WTF5anRVK0FrQ0xiRDczc3hLTkRXT2x0cXZiT25PZDZYYmlnUkxjb1lnVHlGbktxZ2dUbVlHRWNqUnMzN1NERi95VXRFQi9VbWttOVZPR1pRYlZ3dXUydkJJL3RGZjlpUWswYUlvTTBpdkpBemxTVzdtaTFYQUtZTXJkTVdrRENKRVVkNzYzK1hzZzYxN0RRUDNORjZCMTc1OHM2RytLMlk5QU0xTVlsU1JBa3VVUE9uK3crK2N4dE5yV2w2ZXNPSnpPbVZvYklhc2RJVWxhNUxvYmdlQXg1V1l4YU5reFY1LzZ5cjRYb1FkVHdUVXNNcTVOSElFdDVsZEI2K2wreDc5T25iTGtTT05SSjBPRFdDSDZpZ2VuUFNoM1hPSVNXa1k3YzlsZ28wWm4zRGdIVnFSaERVdytDTzF1eG1FMmVkL202ME1WakZoODAvMWhZTUJ1YXp4OHh3WEk5NFlNcFptaW5GdTNpZWpNT1BMZExzbUZEUHJXci92UTFHY21qdFk1QVovTkc1UFU4S2RmS1prek9Ba3JkMHNMeGJZYXRPTUNQbGkwUm9iZHI0dUNreGM4RVlRWjRROUtyK05yWXEwU3J4a0NNemxidU5OS1dZcFVoSGdWbisxejMwNEw3R0NPaG1aVlhSV1lmOER1VHNKQXc5NEJhNU41T1JlYnNkYlUyZHc5djhPbVdNN2tROGhISFdPd3A0U3NpRDZsV2F2QTlwb2ZLeVZMbTU1ZGxQU2FleFppMS9sMTVnUmJxWWFIUVV4bjlDdmU2VkhQQmpQOEtWYnVmTFIrRm1TdGlkM1lLL1g3RXJ1eGU5N3VNclA2VlV6SE5BbGRaQ2NjN2F5ckNPT0pnZ0N5dzBjTkdkWCtGRVpuZ1hVbFhqbTNJNEpzUEl3ZVZYNzhUZHF4a3d5YXA5RVJlaTRyejI0UFBxTTVsbXVoNWlRYTNCQ2Q0Q0JGY042ME0zMG01OFQvcURHVFJNdHJReVdrd0toME1QMDNNMDdnbjRHaEQ4cGZWUjdLNEdha0xIdUw3SEllM1ZVMHFpSStMTEpHdGlqd0RKWkFTRm04Uk9jWnJSdU9uenlpZklleFdNMVlmeEowcHdKSzJVZTdJRk42cnR6VmltR2Nya2cybmw4RDJPK1hzemt3MHI2bFh5aXVUNzBUZjRiU2YwZmpjQS9OMmhZdW9ITnZLbGFOWGd4VGd3VWVSMkxzdmljajFjZEJLZ0dWUityR0FWd1R6c25oU0VaMEFmekpLMG5odUIyTGhRY0ZtZnc2SExST0ZXWGdkZHBpS0hLQ1RUVmE1RjUwcytEL1hTUDdPL05UQks3YUVFaTFzMnVMSXJDRE85RzhFUjdybDN0dHZ1VGE4djVtNFBIcVJ4ek5hVlIvbDZkYlZucGhvald6c1IvWnlTK2dTZFpxK0VuNmg3NkFmUFlVczlwM2VxVk13L3ZnZ2hPN3ZqQ0FXZ25HUVFla0RIdVFPRk5DTHhuRDlJUmNPTVdudWxNUGg4eDF0Vm4wQzlVekVUTEpkR3poalhGYjZUb0toS2lzd3BrNEdPaWcvU3FpS3JDLzJ2Q2VkNUJtZFVQdDRzU1V3cWprdUY5VndCcVY0T1kyK1ptM2lFSThETE1pTmpaTFdvdUVMS0NMQlBabkxLY2xNVm9hSy95NXVuN2V6cWIzNkVrbzJ4d24wQTJNRU5DODF0cWJpNHBhdTRidU9nUzh3VnN6dU9zaUVxZnJJK3NhRXFoYlYyZmxrajhEU21ubXNNNkc4a1JibjBya3JUY1FPUVpHRUVpZWFHaXpMaDZySGdBSEV2SWJjdnNpcjVYVEtTQmdHc2ltNkY1Y2pkZUZKeitiYXJEVDNMZWFPV3hrc0VIRjBqTDAyNnE4WUlHbzBoSWdDNEwyb3lRY1MrWC9hL1B2dm5Nd3Y2SkpxWGJDZjNKMmc0UHFQbkduWVpJcVNPV1Vkcis0N29qS1h1UmNHYjZTZWFkRk9Wd3R1YnJJNWsxNHhpMkJpaVlKTVhWZ2E5cHNTcHNLTXRPZURyUUJnQWVHVUo5cTJ2dDVwelFYRWJBUUtBWTRkYlQ5M2pZRFUrb3gxTWFPL2luQWc1UFBWUzAxa0JJSXl5Nnh6UjgvOWZPc1FCbUp5NGt0QTNpRXdzV0Z6aHh4cnRLK2RmVXhkYnptWURPL25PTy96Ym5lREJBV1VYY0ZQNnlIRWhaK0pjYkFpTVR1eDNsd29za29FRzVIWGo4dTRGM1BIZXZOSlI4Q282QVJzSWczL1NhdFJ5ZXJ4eGZkR2ZRU0ZpZHJab1h1b1I3UDBOcy8vSTdvdUkyc0RJeFdqSDlqSlI4c2FPcVRDQ2p0RHg3VHdVbjIwTHVyNW9Ya2NaOEdhZk9FU2ZXdVJVeFZmaW5RVFRyTis0RXk2VnlLOHZtTTB1MjJSMnFFVmJ6bkM4aS9KUmcraWlBak9QVUpxWGtJWmE5MVU2aDN5WmhCMVFZalN4a3VMbnJtdDB3OXVlZTQ4SXBlZ0J4M2dnT0VodE0rNVJsMUhvdUNad2J4eHoxeEMxamZJREljcm51RUh0VklnbmJJN2tCazlXUzdNZmFacnNsTXB5Lzk4TkN2VENEWVRXYkNyUWFrOXVxSEpXc29lMVdJaldob3d0dStCT29pL0w2NFR4MGlITEtaL0RDeGRtRTRFcGlUYm0wYVlIT2pmZHh0RGI1KzltVXRKTjIxRVhwZFE1M3lWbE9hd0w5SThVT2d4N2RvdndHc1R5UWdCOXRTMFJZUXoyblQ2Y3RlZ2hmSmZlWko4cy9QdlJXaHJhaExxcUtWWG44czdHY3FaZXVwUjV2cjl6YkxTVEJUTHIxNlFIK0ppa0VtZC9YZS9Qalg3bSt0ZUNGUkFzOEgwRDMxOWU3ZlpGZDdud1hQbm1XK2YxN3ZkajdRMlhFZ2RnWGxyVXZLWjRWZFZZM3Bqc0pQU01zanNMajhHTjcrVWlITUFFZm16VXN5cjkrZG52RCs5a09YTU5pazdwMDJzT3FIQkpXdktQdkhTRkY3Z2NFYjlNUEFnempjbE9WKytjUTUrTVhuVnpyUElSTC8xaHFxWkVCQU01bk1Wc1kvYkFicElMUm5PWWkvZytoY2lnNk1qaDdKMFJUSm5xSVhUVTJMRFVsWWlJaXJVOXFseDFsMnJhaDlHNUhGVkZSWkZwdjM0M0hhemZuRDRrUk16ZHl0UDdEOGJOZXNoZlJjUG1ZWUVpMnBKbGtWVkhOd0ErdUI3VlNQZUFndWs5cUVhK0Qxc2xQeE01WStiNURiYkhEU0p0UjN6REZtV0ZIbzg5aVdZT0U5YVdaM0pWQ2lqc0NTN3FhN3BGKzBJZTZpazRPdXZWSjJyU0NqL1FRYzRxSEh5d1BvbEh5a2JkYTltVUdVRUxPRGJHc2llaXQ1SWFNR0NNN2NGM2lCMnNIS3V6Skx2Y29tNzJFeENjZUJTR0E0U1hXNDl5N1F3K1QxMVhBeWZWWncrUHNOTG5KcTJocGpML2dONU1wWGtRRWdIVEJqZzg3VTZsKzQ2ZmZPM01rYVlrTHF1R09nVTVIVHJlYlBxNU9IOVlTM2trNFlhczIzMjBSTzNtd2FkQk5adGp2YXFjVVZrUEk5L0VBbFJzUGtFWXdNM1JNR1d0dG1DWHU0RXpBRUw2amlDaVJpM0Qzbkoyc0hSVDM4WXljK2pROWRESUJQT29iUE5tU1BiNWNMRjZNR2hTTjRrWWlXdlM0cGE2blBGajY3ckZTcGdqYWg3SkN1c1R1TW56TWN3UzJCbHdzaE95WEg2em9yK1ZFZFRpcVdIaGNGVUZMbnFyV2RKc2Q5Y1pBUmtMZTQ4bmxtRHNyTFVVTGVsY3N3bXlvcmM2QXdNZFpxV1Z3Y1gyMnorUHo3aWNzbVRxcFB0N1J6ZmpmTytQaUdHOHBGK1pvR3RUWC9LMEVVQnk3L0VzYnhhcXMrQ25xbWs5TC9tZlNreHRBekdHL24rWThjQ0V2R0RBM0pqcEpSQnJhZFRKb0s0TVN4TFJyRzlwR2tDUTRmeVpxNDg1U1ozMmNWeGRUZ01JcG1XeXBUR1ozTjg1cnJQUlJYMU9RNllmd0w0K3dOZVZWR0hXZS9QUVdGYW5FbVJhbVdmZ0MzcmlRTVhOOCtWR01ZL0dvT3Z5MXUyZkJ4eElEMEhUTjROdkVLL0pSR0FwY1pXSVRJaWtHanRna0dYS2UxS1RHekVZUEFlT1NRdlh3YWp1cWZTMDRFN2dmYlBnQldDMllMcVZiSjNjTXNueUxLU3d6ZFJmOXc5UkFZN3UyM2tNdE1Vb0FmUEhwdVJNQ2NWSzE0bHc4SlplUWhsTlRiRExTQVNIR2dhRmljR0tWQ3o1YjlHZWlHSS8wOVBVOFRNSTFKUVR1RVVweG1rK3ZwZ3M1TWJRd2FBOTFnMm9ySVFPQWhXTDhGZVlYOTArQ2MyYTlvSzk0NSs2a29na0V2T1JubHE3Q2h6eTg0RnJxRWNwZU1HZXJidXExQ3ZlREJTRXlsLzE4U2pRNmdGZDJRUjJjaEFNeDJLOG1HUmdkbHJjUjMzejZXQWg5cnBjQnZCN1RiMUpPS3NvWXlBZGhpMzR6SVp3Z0tMVkRHZkNVZFpUYW93T3gzb3R2Q2w0Zkc2TkMwcHJydlc5RTlkVktld0EyRnBDZUVBeHY2S1RGTXorc0NIRndhK05UWjVyZmJpRjRSemE5NVZSTEpmaFIrOXVlU1R6aWVFa2hwTjE5RDBJdWpGZ0ljTzRjQUY2YjE4OFlrY1pJRzlhbzI0MlA0aDR5QUZ2eXpqK09Nd1ZBYlJpM2o5ZkJrUGkxaHdXdWVWYmJicU02QTdxUVJUYXdBc0RXTDdPWGVYTE1WZGx2YmF6VUMvS0F4UlVDOUg2L28yOGk3TTlERFJYR0dhQjBpaCtKS3JncTdlYUpFb2ZmYktyRVNZa2t2SEMwV3VIbW95bUdWUU9OWU9PbUVOK1h4bU5WMnlVVUtoRE9XU3d6WlNmdzFmaXRZYlJDRlBnLzR4QjFxQStJdFdZNUdrcnljd2Y3REMydTRHTlNsaDBkODdGV0RqSnpsdVJXSytlVFFzOEQvSzFBOUFBRkpMU3JhQUQrWmRtQzRjMHhBd2Rkb2Q0dXlPc29KL3E1RzFoUnBiSU4va0tzY2ZOeHpkOHhTY0FZSzZyQlQzV3ZHS1RaOWovTjdMRWNGQnZqOGpoM29aMzlkWENVYks1WVRLUVFmY29Pd2wybDJTR3ErK1BaK0FlUWlRbU5NZEExTkFHWjBYUVJxbmNydkQ2K29HbWY4MTMyajJ2YVlOVHpWMnV1aUxHaS9Yb3B6NWZnMFFrL0JxYnNjaDd0WS94bmErS3RxMHo4bnd5MmZBaTk1ZXhWMGFFaGZveXB1WTFQM1dUNGxjNklKSGZLZXFIODdwRW9hRjJIYVlkTWJmZC9KWWVMZk1CRW1zRytxQTM5bUtweWI4Z1dWOTYwL045bmdtM0JBY1k0aDRxNFM4TmlkYkREUkZGK2s0Y0VEWjRKZ0E5WTd6OE16b3Q0TlZpRUhtMTN6eU81c2loQ21veC9oeTJnQVhOd2xPemxJeDBVS2ZOeTlDbFpRY2kzSWVvN3N6U3VyTUJ1eWRXMnE1UGxleFQxSWFLV3YvUkNDQlh1bFlGK1FpUTQyT1lzZk5rbmNKOEM3WDFuYjdZOWNFZ0FaaDZFSzVXRVVGaDhBZ3FXNDNQcHJSUkNxeXlLK0VuVEVBYlFKbWkzZVVVeW9wbHpBclU4MVhnT3J6UkRYY3A4L0hZYnc4MjZJNGp0VU1uNk9GcUVFM3JLRmREd0JyTWkrVHV2MUVIRFE5SHFXZ3BBTUlhbmNvV1hCV2N5ZXlNSE9qYkFEUnJjcDNFdS9hbHJLa0FCSGNyVzl2RUNzanVxcmFXZWYxd0k0WllIV0pmUVJpWHE5VWdiZk54b1grRGlaay9CeHNEUm4vUTJ6K3hyUXdwa3YzbXJBUC8zNUxSSWFXUTZpMUk5SlNDclUvUGQ3Q25tMmIvaXhqa2ZTWFl6bnZOME0yY3ptRitmZHViZE5sTXgwVENuemNYOGxxUVFoLzZZVVJ4ZjJrOTY4dTB0L1ZBM3J4MGFXbGIvdVpsZmJpN3Y5eFV0cE5QMnVReTBpdk83dkcwTDF4RldsWW9MUEFWSDRtcFFUTWd1anRnV3RJcFlpNG5lR0ozM3dSZXI0T2lGUDcxVTF0bVdlNy9yMGRuU0p2aitkU0dONERrK3JMa1pVcHIyS2U3ekdhcXNmLzJRPT08L0JEQj4KICAgIDwvQklSPgogICAgPEJJUj4KICAgICAgICA8VmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I-MTwvTWlub3I-CiAgICAgICAgPC9WZXJzaW9uPgogICAgICAgIDxDQkVGRlZlcnNpb24-CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvQ0JFRkZWZXJzaW9uPgogICAgICAgIDxCSVJJbmZvPgogICAgICAgICAgICA8SW50ZWdyaXR5PmZhbHNlPC9JbnRlZ3JpdHk-CiAgICAgICAgPC9CSVJJbmZvPgogICAgICAgIDxCREJJbmZvPgogICAgICAgICAgICA8Rm9ybWF0PgogICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5Nb3NpcDwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgPFR5cGU-ODwvVHlwZT4KICAgICAgICAgICAgPC9Gb3JtYXQ-CiAgICAgICAgICAgIDxDcmVhdGlvbkRhdGU-MjAyMC0wMS0wN1QwMjozODo1Mi42NzFaPC9DcmVhdGlvbkRhdGU-CiAgICAgICAgICAgIDxUeXBlPkZhY2U8L1R5cGU-CiAgICAgICAgICAgIDxTdWJ0eXBlPjwvU3VidHlwZT4KICAgICAgICAgICAgPExldmVsPlJhdzwvTGV2ZWw-CiAgICAgICAgICAgIDxQdXJwb3NlPkVucm9sbDwvUHVycG9zZT4KICAgICAgICAgICAgPFF1YWxpdHk-CiAgICAgICAgICAgICAgICA8QWxnb3JpdGhtPgogICAgICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24-SE1BQzwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPlNIQS0yNTY8L1R5cGU-CiAgICAgICAgICAgICAgICA8L0FsZ29yaXRobT4KICAgICAgICAgICAgICAgIDxTY29yZT4wPC9TY29yZT4KICAgICAgICAgICAgPC9RdWFsaXR5PgogICAgICAgIDwvQkRCSW5mbz4KICAgICAgICA8QkRCPlJrRkRBREF6TUFBQUFRWVBBQUVBQUFBQUFRWCtCK1lNSEEwcERRSWlCUUFBQUFBQlVBQUJBQUVBQVA4QUFBQUFBQUFBQUFBQUFBQUFBQUVDQVBBQlFBQUFBUUFCQUFFRnhnQUFBQXhxVUNBZ0RRcUhDZ0FBQUJSbWRIbHdhbkF5SUFBQUFBQnFjRElnQUFBQVIycHdNbWdBQUFBV2FXaGtjZ0FBQVVBQUFBRHdBQU1IQndBQUFBQUFEMk52YkhJQkFBQUFBQUFRQUFBQUduSmxjeUFBQUFBU2NtVnpZd1BvQVA0RDZBRCtCQVFBQUFBQWFuQXlZLzlQLzFFQUx3QUFBQUFBOEFBQUFVQUFBQUFBQUFBQUFBQUFBUEFBQUFGQUFBQUFBQUFBQUFBQUF3Y0JBUWNCQVFjQkFmOWNBQTFBUUVoSVVFaElVRWhJVVA5U0FBd0FBQUFCQVFNRUJBQUIvMlFBRGdBQlRGUmZTbEF5WHpJeU52K1FBQW9BQUFBQkJQVUFBZitUMzRkKzRKdDBQTTlPY2pGMVR1K3pILzAzK01EWkxHN2ptaUQxRDZlL05YRmltZ1hnWXVsK2VZMS9rWTRHdmxzb0dBYkZ4NHBGU2x5U1JwTUU0b3RJUlk2cURiTFlSMjZIaEZjS0hPWVJ5YXE2VUtuQTBaYjZxNUgrWlFjdzlnMytMVU9JdS9mbGFzMkhoSXNYMWpCWUN4Q2kxWk5jUjBHcXhhd2FJY2VWSm9VOXA3akJaQ0hscEl1eHJrMnJiZjhqK1p0RWVndUlwVGxxU25ZYmhPS1Rhb1kwVUo5cDdTZU5pYXNOZElkSldQZCtIRG1Sem95ajR1V1R6T1ozTjFtV0VCWXdLbDhLdWRiVEJLcHJPdFd0cGE1VHR1L29vQ3p6SnNVV2t5VnFlM2xrRGhtRkcyR0VIZm1henRyV0d5TDJoRzJsOXE3YmdQYnNTUFpFc21wMlRzWDNkSHppSEZuZ2hIVy9hRmo5c2NkMXVYTXpLS3ltUkFQV0VNLysrNGhpVENuSmx0SFM5cVlPZHIvUmJURnJnZmcvWVJEVE9EdWZuVTFuRnRCVmo0SjFnaGdXQkR5VlFHMjBpOG5SQXRoZ3Q3bEx4bXhvc2MzRXM1OU1ZNmZXTHVRcXhMUkZSbmZzK1RYeC9HM056ZHlaZm9iUFBMNWNIV1hmZVFMc0RVQkhLbVdvc1BkYkMrVUNEUVJ0QWFGTEdYaHRoMkNjTkgvbDhHREo2QXhoUUlHOEZRMlIxZUlVL2pWcS96c1JyMDM4djZBNzVpR1VYSVJXYmt2Z3llWmVsMG9MNlBBZlFMY2k1OXc5T01ZVzhJWDAwRnExcHNXSEtoZWx6dUR5K1dFaVdIQXVMUE5XMlZ4R2EvOXlUYTNLL3JsNE9JalRkNjBqcFlrL2dCRFhWcVAycW01MS8yWHJKTklqY1VqallkcXJlL3hESTlodTBEVWtoWnhpdzlwOWw3NkFBZyt2UWV5OGkvQTJ5bkJwSDRXN0JyL3dZWWM0OHdiOEdtS0lCSnpDRnNFUjlFbk1yM3Rwc0VncjMrSzZjSFhFODRUMTN2bnhRSXgyQTBrQ29kMjFPRTZJZ1ljMUpCM2hiazBldnZhMVNUM1QrNGtyTjlhS0xRU1pSYkNVQWVobHpZRndoSnRlTWY3K1dqa2s4OHdZZmdyakFIa1I2NXdsNDVzZHFxeGdoQmcxR3hYa1phOXZPbTRoU1hQWWxxQ1pDTElLcGtsRE5zcitrb2x4b0JDN09kdEpPU2k5Yi9ISUF2Q09ZbnV6dTgyM2RKME5PU0NqYzFuR0tvRkVoWFJqbzAreWZCKzBuVnRwU2dHUVFLb3k5QWI0U0NqcW42SWE0ZzNMMFNKaFBQYTdpdTIrRU15ejBOMlFRdVlTVDk1Y2s5UWFIZ1EwYkcxcGRML05EcjZPaWhuZkdGUmdSZk9XdTZnaktsRVRVbHp6MUpzNGlydXFXVHUrVTFDZXVpUENPdWMzMnBKVk5iN1R2RXVMSFZOd0x5MHQ2MDErdnNpZU02d3dQejNhZkwwQzVPSU5Gb0FObGlsMHk4cEpnUXh1RzZHK1pDS3VkZmJBWVZESFp1OXliVGZrUnI2S29ZVTJLOWR4SjNjMlRseitoZWpKUEljajdXSm9yR3dwOFdoRWNReElOOHExeUN0RThUUTI0dllRZ0FaZVA4MXc4RC9hSWFOck9NRmFTVWJCRkNHTmE4K09qVWhuOFRkZHBvaWlGSHpPaXhQTURGSFZrU1h3cDBKTm0zSmM2cy84RnEyVmV0VGI2N3J6bGNOV3R1ZFNzZVdnOTZmSDFkYkFFbUdiUXU1a2pFNVpERGtjWFZ1Wno5T0hhZTJ1U1BTU1NGMGFvTGpoUnY1S255ODBmK2h0YU1XcEZ3TnBjUWhDZWRCc05HRXg2d3VQeXNiK2luQ1RidEdnMGllWXBibWJsb0hLNDR3SS9FeDVwYUoreEhrWWRkYzdCdmtGU0c3MnVxZjZZUEE0Rk8rU25nRDRkcUV6OFdlUVBVVXV5cVp4SEVtME83dllyWTEvSzcxR3dISi9ybkM1VTduK3FLNy9TdHZldjZGamxCYUhHZWJEVlZJRFJTL0k2YlYzTTYyZWtVWExTbWc0OW85M1Z2VTk4REkzcktMcDZOeDhXTFlSRWNBUEx3dUM1K2p0TW9CMnNMdm1QcDVZNXJnME44VmxPOHJCSlhWOXg4dFl5NVlpVzVpaDJXQVZMaG9ISkpiTUs0UDZhODJndVJqQnNXbWFVN1RweVdzd1RWN3Jxd1hZaUN3QnloWEltKzZ6alMrSjc5aUhPblo4NkhtMFAyRVFJNlVlekpTZFpkS2FoYldZMDJ3S0ZNd3VCa3hWeEsxOFNaTHFnM04yaFIwWENZdmo2Y04vaEJVR1NrYlJrZVpFeFp4T2l4R29YaW94aGUwSEplRzcydmdqYW9XMEIxRkVKekJ3RlRVYnUzVmlzSVYwdUk0TDEvQms5Wkl0NlRUYkdQNnZ4YmtnblQ0aml5T2VnTWlKbU1MZXZBU1RvR3VWZHNxNzcwdVZZTHMzTFErbXB0WSsva3MzZVdLblZialo1ZjBzTWRDZGtuZFhBT2dCSDJHL1NaVTRrMnFGK2VobG13MjdLdnVadU8zR2l4RnJLUFpTOFZtS2NJdk5JdlFGTFp4dU5VM0RKSUNxcG1hTzQwQ2x5YWZGVTc2aGhreTl6NDdaL0R0L24yUGx5Qnk5K2dJMVk4YTV6VjBHZm8xdmJleXV5SldDWUZIdEUyY0NReCtCY1E3NEk1SklyUmV1NjNZYWdkMzBTUHpxU2lhK0JhZ2EwZlN5c1JLdG5zaWthTnN5d3BpTCtySEpFSmFRcGlIWGl2Q3RSb2dYTzdPemJvdkNxL0E4V0MxR0w2c2d3WXYyQnNOaFROWmtRZURGQXRJbGl6MVIxckQ0ZlhWbkx2TUJob1pYNEFWaHhhRkpmY0tQZThmTmVjZnRvSUFFeTdhYXJVc1FLa1JyTmpxV2ZUQ2RybWprOHhWZERQWEdMOEQ4SkxRaWF6T0hnSkJMWG50K3dtV1BscXNXQlZmTXYwb041eko5ei9VU3pOdUp2bHFzM1VXbTRyL2ZoMWFnRk9pMzdzS0lmQWVpL3YxSkZ1bmMvcXdPTlFCVG44UmZrWHZDdWhUZHVBMmZObW56MXArM2lXalNKZGswRlRXbXlwQThsOWdMQ2tjVUY2RjkxZXFyelRDWnZvV043Y3Z5ME82c3hFWEdKeXY4ZGxVS0d5YnByRGpFMThhRUNNUU1VV2JUMlZEUXZrWnNvekdiS0FIZEdIUmZkN0xWd1hqdk9qWEx2ZGdNZXgvblRPQlRUajI3QzlXREx6YjQ0cEw1QjEySnAwdVlEa3FlWXBHZ3RTTDJLaTdKWkRUTkxzelBmUHpLQWk0eWRxQUN1c01weWhCTEJod2hDYWJnc3V1VTdvY2dhYk5tTFZKOTBHamJaMWFIam5lejlCQ0g0cVJUVFJycitWRzlnNmpETDFqTzQxa1dPTVlXSlFHRWNlODdRZjFoT3BTdVh1ZWE2WUhPcUxEdC8zc1JNZXBjSFA5SUQ1SVJCQkJnbitRaFVQUUtXNHVXUHZvR3lZc1lvcUZQUnRLNDJiVDR1NExRY1pWMXdWTlVhMVhIREdnSG5pS3ZVL25jb3Q2V3RQS1BQYXpvdTA5N0hscWRYMDhySE1oSlBvK0NVbjZVd2dqOG85d1NrYW5pMENwWVlhckJqMGthZjN4QklEbml6eURNZ1dwK21laytDYzNNZzk0ZkVIL1cyOE9WS3FYN0J1TWRoUVBoQnBENUJNV0wxMmlnQUUyL3RsTjVoMDNJMVdIN3RxRzVyN0NoZEg5OTdxZnFGOHFzVjUzN0xEVGwzSWlTbmU2WmEwcDVLbXBGOU51anowVHRkZCtOejkreXJLY3NFdDVmQnM0TjNWaG1HQjd4K2JSOUFxWWNBYnJhUWsvNGpNa3lsM1UwUUxyZ1dOdHpnRTRKa2V5SGRpNmoybWE5bWNnSGlSODVGb2JZTDhLOCs5OEdrSmt5MnVncTJEYy9zWkxaWktYRjZXRDVobFlMUm9FaDlGSGJiRVM5S2hwTnR6VmcrNnROTTdUSlNnVDNVcS8vVWw5Sm9KNWpUV0ZkSktsM0J2ZmVBbEdobSswU0ZCckY0VHFrY3pRWm5saFJJTFdpa0grZGlqaXY1SDJYMTZRejIvc2Y5MEY2VTRpV1hycVpMZStwbENXWU03Qno5UUQyM2duZlA2V2d1cU45ZjA5VTlkZHhYMU8xRnhQOVJUYmtMbmZLYTcxbnp5RW94K1pwT0JTNHJ0Q1lZb2QvejhPdEtmaDJHUitIWDREUW52QnplRGdyelMwc05EUWJ6eWRKY0t4N0xqT3lubjN5c2plbTlFaGx4UWRrT1JvMm9kNk9hSWNnYmZLQzFhRFBad0U1Mm92Qi9iN2xvbjRtQi90dEJSelFHVG9qV3FrbzRNTHNnMDRKVkIvUWxRWW9nVkw3cWlXaE8yMW9pSi9rTFBWYXh2aE1ZY2FDYXB2RHFCQ25WTURUSUN6RzUrZDJTeVJVUG93UEE3eWxza0ZhTzlhNWRyTzFSdFp0WDRYb0xDRndkK1J5UHd1LzFwVnptdHk1Z0RWSUsxYlZnQURQWmlhbHl6cktYdkpuaHZXa0VNOWdWR0g4ZGlTWXJ1akc0OTNwTzBCa2J6VjJxNnZEa1JJblVVVnFjTUxlbTcrTWc1N2ZCWkgwc1U5aStoKzgxRWoyVGpEQnVocmNrdXZkSTF6WUdzbm4wbG90YldOeVJObXNPSi9nSHQxMEhsejZON0x4N2lRNkZTOXN3ZGhLbzgxRWpacTduZCsrSit0Ym1EZHpUZUczR3czeW9zbkZwSitXRlF3a09oQUhzNVdKYkhaZTdlSHNmRHdsV2dZallUYVM5eDRndCs1RGZwSmdySGM4M212ak10US92NHhIODVnZTRTbG9DVGtJSXZYVUdvSk1PN3dmaFFOVkxZU0xkTXU0NEViU1BXaWJXZEdFNS82MkQ4RkNRU3VqekFxU2p4aVMrT0lIVnhXSThJWXhWUGVCbkVrTWpYSldmZjdFSDdSM0IvMTEyZDdFbDIyc0NtM1RZV0pBYVZvMXVwZzd5T2lCdHJuTUd1L0k2VmdJaVUyR283L2VheEo0Z3lmNGlCVTkvcldqRFRGTEVVR2pseWh5VDhPVTEyN3hacVRTNjIxVGpPU1NhV3hRWGZPZ05FZWl3Mm1MbXNGZE0waGs5SzRpM25QdnE5V0lnb0FGMFFUaFZub3dTbVFkYUFkV0NYNDh2MGNocmZTNExtL0JabmRzYS95aXpBU3FSeGVzdWpxclBTQzNuU21YVk1DNUFKQWJ1MktjS1A1MWZUN0JzbnJnM04vcFFzNGpxUTZ6ZFRnazJNcFU5djgwQXdHTWRSRk9wQW43elJyYVMvSmdpWW41QlFJR1kxaGczK1hjQm9pZVpRUjIxdGxaaDR5aEpwcmJEcURCQWRVMzZRSm9CeVRHMWtQYlJDSlZHUmVuSWFabzFjQ1RPb0FUY3lGV05QTDh0Zkx1WDJhanc5UndtL2MwVk92b3pybWk3UEdOZVBISFlXdlF4T2VvbEZLbmw1NnNkTC9iT2hnNjRXOE1VMEdwTEhaYmltT082SWpVOFdwQTJ0TEFxU005ZDVhTm9kQ2tLZW1RMVpaT1ZNVDZTcW5CNUozOFM0UUlWNlcxM2ovNTEwYytKRmZjVkMyUFhTSmYvcDRzNEMxbzVqbm1FemwyU3BFUldWN3Y5MHRGS1JxNG5Ub1Y1RzhBWDZoU0NvOTVDby9rV1lmWG5qYWtIM2I0aXRlbC9xWVFhVWF3OVg3dWJFZHBOWHM1QkhrYjBROG1WVFhCZ0p2cU5XUDdIS01TQmp5WUZEWi80cXBOSlNxa25vVndOWnNSbC9DN3IzdG9wZ05jQmJRZ1BIK0xGQzJ4V0R0WGZDVHg3TnJKR2UwTmJiKzN2b2d0Unp5dnZ3KzBqakU1SlFQeXNHcTBvUkM2dW93L0VQdlZLK0pHQkRtd3pCQ1J5TC9WWmsxM3dWY2k3UDdBNFE1ZlpLL3VsRm1COFk3T0xJZ3UxcWg0V0VFaHhoempUUFpXa2xKSXRpWjhBeVI2R2Ntek5PbWNSNjBDcmI2eTJCUFdMbFBwMXdha0t6NU5NeDkwRkhyd0h2Rk84bWs1NW03dzFZMURqQ2kxNmpKRy9xbDZnZUszenZCdGtWMko5VUE0YlIwVG5RRXk4ZjE3Sjk3Tmtxa3NDaFlIWGVKV1BWb2I1WHR3ajZVRE4vcXBHdXFzdWNMMTJiVnBlTnBEeEVqakpQaFNzK1ZESXY4SHd5aFBpQ0c0QXpvZHoxSkd0MHIwL3pZWUhWN2hoWE5nSXkvNU9tQy9kVEZLYTFhaWdWanBRTXl2VVl2MnJZekYvUXBBYWY5NFdwelMzNjV1MWRYekoraXYycEF5UThMb3VZOFJsU1B2UEJSWkJKaXdpTDFWbWpyNmMydXM2a1Z4MmxIU3NOV3pDMkx4WDFNdGhkUmcxeXQwWExldlRsTlpFb0dOQ0I1QXFoSk5BMEtPNHFjUUFYU2ROemd2QkhocGJ2ZUhOSENwU1dSdU1iNzhyL2FwaC9Qa3lmVHEveVplSjcya0RlbFJ0QitpRCs1b1lzRnFLMXg2N0dORktZY0FmYzlDOEF4aEkrUDRIaE80WVNXMm9jSEMzUE54dWorT1Q4ZDZXcVN0OW1RVUZvUVBHejFwOHkyWFFZWVJUL0dUTnJjNGdwdkRTakxzWHc1T3hZVytkWXgxc2ROWEFLZEhpSTZKUmRaa1lUNFlPdFVFWGF3RnNxTTBNVmY0eWlwWUNweE12VjVJUVc5TG5uWDFUVUIxYTFUYXEzYjBxNjR0Y0lHRzhNRys2RExuWlk3OXAwQlVqdVRMNXpLWGNYL2JTVkFvTjBaa1JRMGxxaHJMS2ZpNUNyaUZEc0xSWm5NY2taOUpOdUxidGI5MGE1YnBZWW1rZ0FSanR6TkdKcjJHNHl6L1BobXdoVklZQjl0ZytwZHF2ZFVzMS9QaXFMZ1pWQ3d4NXFmMTB0L1FPamUwNUtBc0lhbEF6RFZ3VmViV1pkcmxvVjZOMnV1MTJJTVR3c0NiNnVNelk0MW4rWEEyaG5yUHhKb2Q0bk5lcmJIdWVPQTN0d3AraWxYeUthWUhpQXNONEhNWVl2RVZ5dE1kc1NBTmtqeUFlWFhaNGRqS3kreCs1cUE2UVhRa1hDZ0Myd0UydEtkaFplYzZjbUhHLzBRWGtPS3dZeE1xYTZiVy9BbGRLWjhncmVheCt1TGNYYTEwTjZjT2R2V3lYQjYrcjl6L1NOU1JNaUhCQmFGdTVQVDloV0ZVSnpaWHcwSlN5REEwcGM0MytSSXJjT0pqVVNsaG8wZ3Zjdk03MDNmYk9KUHhuOU1EZXJSRm9pOTdsUVVhYkRBS284ckVYMXVNQ3pNZVkyaVo3d0R6bmdIeHRlRk1yTWZhbWMrNTBicWRJTDlXelMvMzhnYWhvY1g5Z1BidkJaZVJnSGxGc3FLOE56MVgzaWdYV1hGSXEzdTJMMmxnbGZNT3BPOFhITW5xTjBpM2RSYm9CeHcxOGhRSVZIeHY3dFZidGVxK2lYOGNBSk1IM05lN2hoLzVCMXRhUTgrS2wrSGlBQ2JMYnFOSWV3ODdUWE91S1lnMXEwTFVBdmZqa1ZLZ1BkYmVzUk8zd1oyeC9BQ2lUSTFVNUUwZFNhSVZJQ1ova2VlYzlBYjJ1cUxYYzZqNFhSY2h6MmRVTnBUdTA5bG1XNkxqWTZybndjZTRrQnd3eVRlVGUrdjI1TlR3Q0xETkIxMmF6RkI4dlVHOHo5ZmhtN0JsdFFIRTg3QjRrMlZsTXFoWU9xZjFLelNvWXVwamxrTkdySHNCc1R1bjFMZmRJWkxtNE42VDZkL3NSRkxKeEVRYVlkSzQ2eDZlUWJ4V0theFJXbzJ1elZJdkpONzBPZUlpaVF4NTE4WjdBVi9ZNjlyMUh1OGxDZnpLZmxLYWp5TjVrV3dNNkV5UzZSYXlNb0JtT0IzazVwSXRyOWU3VTZJbWY3YS9sejBteVppUjZHTnRxaEdNMWMvekROaGpBUk1LbGEwVGFrZG1xVUVxYVRXcG5TTHJpZUxORWZXQkNEWW5sTjVnNkRRVG92OUE0NGJweG9ucE1UeVduNXZpNSthRVJLNkg3SUJxK1R1R2hZdVM4ZUJEdWtueEw2dElxc2I5ZjlFOE5pak1MZ29MbTA2Sk5oUlFSL0JEZ2NPa3ljWEo1QTRoV2ZyY2xpTm81dk1tb2M2RmJuVVhSb0VjeXlFcGxxamg1ajUvd2ZQNlNJUG45UlVENS9VbzRRdlhqay9LTCtSeEVabEZMTmJLYklFbERLYTZlTVNsQjlXYTJmVW1WTkFZN3hxYnZKdU5HZEhVOHA5RzV0ZE5wem5xb1BzbWV3ZFpWUTZDczNMV2lUQ3h2KzYvTitSN2Z2clhIM3RxSkpuQVU2VEhZTE4zd1BxRGRmZktLTlZmQ04rNjJDOVk3WjN4bi9adWpDU0x3bW9lRnBvci96czBqTkhHQTdFZTRkeHRwWU1IYm40bUREMkszUGdZa29icHYvM1ZPM1NOWXhWanYrZ3QvUElqVzdWOTdXcEV4ZjZwUnFYMjAyUm5RNStpTFR4ejgxTjg4MUMyYUdvN2poQ291NEJoeWI0b1FsNW13T1BoWnliOXpjcGNOdTFtL05OWFN6NDN0bGVTL2RXcG1ROHNTd1pGb1A3V1ZlYWZOa2pjSkpvMlRCV0dnenpSTXk4VEcwYyt2RUptTko3aksrYW1KZWRYZStPK00vd0ExU29rWHdTS0xjUzM4VnhHWFNvaTUyZ2RkaG9vUGJ3TEI2QlBCd2ZWWExUNEorYVZhdVptSk5KQ0prRmJ0MjAxQlpGRktRUkRXUHhxdmFKcEwrL3RQRjRZNDJLREtyZWVMeWNyOFNBaWlvQVdQWnk4VkZDaDJ0c1BXaldHOW9WSUcyZytuVy9VRkdjcmhwa3dEV3dvUC96RGpEYThKbzA2ckk1VU1MQzB2SnNOOStNOVl2TE5vaU5sblIrVDVwK2hiL0N5OTVHTm1jZHBqaE1FU0ZhOUZlclFPMFcweWwwZTBpdGZvRzhGUk54ZFpwM0ZXcllqRFludWduOFlzVTJRUStoV1o1TDRXRHFtVHN3M1FaM3BlNzRUSERBVFdDMnJSaW5SUmcyN1dIcjErelNrK056N2JLRjZtMXVzeUg3bml2dmZqQW1wS0MraDJ2aHNmNkJOY1E0OG9BVGhNVDA5aTRkT2UwY21wQkhZakJYbnM4UHpWaS84d0ZoYjJDc3FTZm5hd2ZBR01GcnM4VGtLc3VyeDNrbzdqRnhicG44ZEkyZDl2RjM2dkdzVGZGZkQzYUlUcjdVTXhITjBvVWJObmV0WFpZUGNTRG1IZ0JkY2gzMzJTdFl6b3ZuZFdTRVdxNHNhUFM0c1liUk9TTjJ5M3BjeXNFUjBtalAwd0JLREtwTUpSV1BlSnFZOVp0V05CanBLc1F6Y2hoSXMvbDlmM1pJNUJnUHBjWko1eTVwK2dmNk5LelFrd09Ib0x5UDh1Q05WVk5aOWs5UjYzOEJSc3lxOGVuTTRRbUdSbjA2ZXQrS1hvRHF6SGlmSmpHeGErMWZJb1k5SlhRTklCcnJRdTk5M1lXV2dhTzBsMjRRWjI1bVdSblRRSVp0dnhOK3c2L0RZd3IxK2Q3QU9SR1FlOXFYYVUyYnN1MVJhU2d1Yk9mMmdLQ1Q3QnMzbnErZGJKdXU1dU1aVExVVDhBaVVEc3pEQUFQcVhyWjdGRTZUbjRicmVqZk1pZlVzM2NoVTdFRDZmVjlLcmU0dmZMbUNVcVFoRE05Z3Fwem9xcFp1VlV4aW5xeGd3RzY2b01UTXVGT2tBeW5rSUdoQS83ekthVDl2VGFCUzhxTFRHb2ZHVFdsajdxNEs5VnphdGF2Y1NMbFZ5YXdTbEgvS2g5dEdTTXFCWW5kK001Mm9uR3BNbitwVGk4MVZQSjh4ZkRzdWlwOFUyRkRaUWFQR0RGTUFqdm1tM0RQY2RXcEQzMllpYzZqOXMzcStmZmxPUkJNS3lzc1o0cXlmbVZkbWNZSytQcVhCMEFNZFpUK3U1NktrVG5UNjJxUmNBL0tSYUkxUjkxMnNjYmQ3UzdqcElJdEl5WFk1OGcwQW14MVpjcnd3ZTlmeitJSlVwajF4ZldGMWNodjNQb2JtQ3pvTm5tZFFZTFVxM2RVU3k2dEEzcnZ3NnlPVTVKM3p2WUNYMFpWOG1XS0U5YmVwY0NEQ0V3OUN4RDArc05uQklDL1pBb0FZb1hDeWNlK21HQ2hmR1YyeUFPQ2NORkRLNzlPOTRKamprc3dMNFVsOUlhQ1RBMVJ0cURVUzNTUnFXQ2VoblgwNjZVb2RUWVpqNFZTZkwzYVB3NWxmSXBnVnZraVBROGtEd1EzVk5HQVlYTjZnRysydFY5dlRSNGNDMzlsVmp4WEo4MytlTS9SRkI4eWFRZ25NRHg5YWNtQzJIQmtnbWFoNENKU0NqbHI0UDlub2FKRjd1TDlkUXZBalBzWllLOHJwdmFqQUNWSGNRZm9LcFE2YUROMDduNUJsQVIzRjAwaU9TRm5naXlHRnJxWkFQTk56dmNOK0JlbTU3NEp0bFNEVzNWOEJtVytnUGVHSDA0WkxIK3F6ZWtzeS9UT1IzRktReEVPUk5lZllaOGwyTk8vWGY1YzdaT3drOE1aZGhmMnBnd1hndTc5SitoWmpaUU5JczZrVlBDSHo5Ym9WL1lDVGMvS0FnUUM5Rm05VGtVZUJyUWpRV3h4RmxRbThPbDgzaVhxOVA4RlQ1QUgxMnhJdER2WlU2Q0FEc0NrSjc4UXhBdlBnUUk1RzM3bzRUYlZqOUhZMStTS25xVnNXSEUzQkVRdUxKd3VrTU42YjFheFdsb0RxQnRBRk8vTGIrTW13Wkoyb05kbzFndVFvb3pxNUV1QmJ3RWRrbjMzN2p3WXhDcDlhcmpGdksxekh6U1BtcGxFRkpQckk4b2JxVFhyRnlrd2wyUmNhUlU2RVZtQkZUdit0cGFSWkJCSllXYWxFQVVXU3hnNndueUxUdEVLSTFnSTd6WUhOaStXc0pRTnJ3SlNTemc0MGZFSXpjSmQ0US93amNzaFN5M0pKdEt3OElxQldjR0ZBZXRpUFBQK0hhcCtEbnhWNjdnNFkvSTU4ZDdPNDdmWHlGTTV2bWZDLzRsRVluODY3cUczMzkvbjhGWDgzamVIRmRidDNVUFIxeTJzUVdFV29DcXh2UFE1b2RlZnJOaTVHNUF2TEkvZnpqb090aG9vM21uK0Q4K2NCKzhFdXdQbVpNRDBmNlJBMFI4UE53R1JXVTZlYXp1VVRNS0I0Tm95SHVha3hjWS9mamVFc2w2OVUrOWFGbmU4eVBuWnk5QTVrN3NWcmMyQTRyVS9ET2F6ZXVhRE9yL1R3eVhISlFPMlZSMVVpMnZyb1V4WFZMRHcvZmxSN2FWWE5oT1pQN25IclNWY3lSZ1oySzVaRzBuMnRYeHIxKy9raWI1M1ZkUGtBVzlRMjdmV1BpYm1RNnBWMkhnbnA2TzM1K0VxOVpmT0tndVV4MmYwSVVKYXN2b3JZTlBwS0trcU1qTFUrL3Jpb3Vsc1FoRWNyM0V5ZDk3TkNJL1MxSElBSGM1OEh6K2lHSDFkTGtENS9Tc002Y0tGOEE5NURaeTVQZVp5ay9OWHNhNGlFcHlpa3NFLzY1TEU0aTkzNHBTWGwxMjBSelJxZG5Jc0J3L2FhUDBHMlVZVm1BR0loV1pkUzFmMWdEeWdjdFJzSnhsSGNYVjM3UmoyN3kwRWduSTF2ZzZMTFl2QkMyK0ovQ0JEcGszVDJlaTRBd2lyK0p6U3Q5UmhSQ1RxNzV6TkEwRmdVOXQzN0RyTXg2V1dSZnE3VHVmNE94QTluL1BRWXNWNEQvQWhmNWwwQ1MrMmV6ZHJOdUZsRFFLNmpIUlQwaWQvT3ZKT2RUVHcwQ1p1Z1J2aktqQXBtRFhVV0lGOGhtdk9XMCtXd01DMHpzcm56bmdjVDd4TXF3OVkwUVlWa3pSVW0xKzJGVkNoWm9iNGRsS09SVDVMejFVOXlUcCtkaGU2THIvT1M2MVE1NVUzWDlETnZFSWVoL3I2a2MwVytGRHQyc29mREVTSlRjZUs4OVdhcEI1cWM1Ui9wZkRVQjhFYXQ4T1lRT01aQkFaV0RHb3hVTDB4cnc4VzU3d3E4RldzelRKanVPNEplSmF6ZWFOS2tZWGVhN2xCMVp1RlArbkF6bU9TSk8vcGVsdzkzZVFQak9mS1RjOTdNU3h0dk03VDRYcWFMbkJPSVZrZ0VtYVV2TmUyRzU1YVZKZWJScWZXWXhSamJJRjQxNUtaOG4rSmZ4RWxPdlN1ZHJ5aVZxTXlXM01HdzJVMEFjcVY4VCtxQS9zdVZWbHJvZmxvT3ZhaW5CZXp5akJ0SFZrNXJMaUhWVWdremNFY2JDOXVETmxvODJmaEZxN082clRESkxVYTN4T2Zhc0NLbWFLSXVHeThNd0l3ZDkybkxWaG9pcE9xU2crQlViVFZXMzRXVXVuUWFwWTNLa1JINmQ1R0R3MU9sSDR6S2w1T0MrWHljQTN2ZU95MVFzK2U2Sm5MS1ZXUUFRYUNBVldRWi9GSjRtbC85aENrUEZXdmZiN2ZUZkFhQXY0TDFnZGhwVWZvT2ZkMkdUdktvWGxVUGZxZWxjVit2bjJlWkF3TFZ0S0hUc2w3UHd4N2p3RDR0T3d1ZUNSS1VwV3RLcXpoVEVjZVRJMm5CaExvRDhtRHkxUFo1UlhqSC9PRnRkM0QrUENveHY0LzRTbDAvTU9EdlFNZm0renlEOVAvZlNnK3NUcVZEZ2JuR1pRMUlMcDh2aE9ta2J0U1FrcE5qOVlQM1VrQlVraG1GUU1KQjNOVlNTeFAzaVRRYlhKZFhjMkxkY1lwNTdCY2RJMHZXalFpbXRyVTFQUFNvSFEvQ1E3Sm1TT2VCaUNVUWEzaTFCbUNlblBUNHFBL2ZIOVhFditHeGhtL09uM09SOVozanB6VTVPZUFXWjVpV01sNTdCMkc4cTIxamJyRnNTM0pGN3BUL0tOWEtORTNIWXA1NFRleEx4VXRHQ3NSS3E2OEpxbVlJVUsrZUl1RTh5a0w0SjJrTFU2dVM3QlRXbFRLTUhTeWpnS0hHTUxZODJyeFJMQzloa2cyMHMwc1ZZYmQzaElYcjdvOFBUMC9GYjE5T0puUkxQZ2Y5MFBFQmlkSXVQS2EyaHhFTzBzNXlkUHpkOGE5UHhpaTQwU0lYbXN5cmJMTDJLQmNzTmpSL1dlYUJHUGJKR0xIazM2ajJtMVRRNVQxY2RJc00zajJHbnRMa1NhMDJUVUFKeEQ5bUVMZUNJSUNHY24wSEM1S3QvWmNES0NxSUFUb2hhQWdmUlc2Q3FuZEJ1QWVaZnlTckZGNzAyMGs1Y2Mvd3liK2N3aFN6SExoUTJJa3BYVGQ2Y2kraGhxQVVxR0xTVms2RldTdGlxV1dMUzEraXdLNzFjSmozbFd0blBxNmYvSW5nbEczdWE2bXV5SjRFbDhPYmduM3NJZWRGREg2SjZZM0U5eXh0UFFMblB5enh6NktMbWFGZnlOdjlaYmtaeHQybnVuVm9XTWRPL1I2Y3AzZFJ5d2NRYkVndHQxTTY3M2s5andZWDYwZVJUVDF6Q2ExemUxUEt3UUZBUnM3U2JNeHltN3psMXgxTzkrYjdPdGRoTS8yVDdpYy96R1FWek13NDVHOFNpOG1JR2lBS05DYjkvdHVPM1l4bitCRG83TndpSkdaQ3VIVmhGZzV2Vis5b0hDUGJEcHIzM2YySEg0dlVnbUlRbFpTbDJGcHVpL0pYVE9uaE8vTkFUSG9tV1NrQlg0QkxxWDk4ZzZvUW1wWkdsSldrOHlqV1ltUlJ0ZmpJdnhuNUlMNG1zQ1ZkelB3b05SM2ROVDR2dUtobFJ6OXVmYVVzWXJaRVUzcW9RWjBIUWEyMHZIdDBPaHBKdml0ckJyMW4vUy85VTkyV3hzWWRVWUIvaVR5ckhvWTA1NjhHWmVtanBWN0daczd1RnpJQlo0L0N4dnZEeVQwSFZXc3ZoZnlKaEtoZ05PZUN0NlUwbnptVWNyUHpUVWFKQ2F2b1Z6UmRucXFja1A5TnZSM0tQbmVaZ1AyY1hxdEZmZVdsODN1eE1WOHdoRXQweXlLS3Q4aGYyZ2tTc1ljY2gvZmtoUFgvTmpqVC9SMXpsSFJUd2ZSVWtFL1VvL0FFS09FQ0oxcjMyZUtnRERKekk4MHNnaWwyY29xNXlrQkJ1aWJQTlkyL3pwM2xNOVgzd2o3NThkMnJncENFYWh2UTV5TmxObGZKUGJ5MUN4eVpCNEtvNldnOTdQNFhRMzFMdFJDSmVseENRZnR0N3c2VzBBYlBwUGhaT0VoNGRJRnhlWnJ0L0VZTnN2MUxDWEtkcVo1Mi94L1NyUitPR0xDOWdEN2VvWmthcWQ0Wkd0VCtiWldneXg5Y0VoZW9sQXpvelhLUk1pYWdzaUxob05ONHNjVG1wRFpNSFlubWxhYktaNkVRMlVNSXdPcSt2K0p5YjQ4RjRyWmZlZUplZS9ZRGw3TGZPbjUweG14bUszSUFVbXhaSEhrc0dHejNzUmNXQ3A2NXVzYi9HdlJwSlE0WmdMR25wUmU5dWw2WHZRY3ZyNHRUelM3bE5UbUlHOTF2eEhPTkt4RFlhNGkxbHozaHg2aW93OVR4dTJLVUVwU3A3Tk5MOTh2aTVOM2UrMm4vbDl2dFdmdzZFc3Z0OTFEK0hSdGorSHRCZnc2RXc1V1dsb0tGZ3VLN09UR2k5cENtMTZ2RzZRMnQ1QUNlcVl0SHNuODBKMFljaG9RZ2VLK1dsS0g1Q2oyRUlnOE51dmpmZHhPUXE1WUZweFBmTlVoYzEzTk1PY25aa2hKTHlqWFovZG5acXM5UklteHFGcXh1VUFPYnJQUkpXQVphRUFUcjZmOFdCZUl6aHgyVG82THFRbnBZZGFTNkxVLzhVUVBHKzJQbFV3allGODBVM29wQmJTbms1YnBpVUtSV1laNWF5QmFiRE9zTDV0MU5za0xvTDg2Qzc0c3l3UUN4dXA0RjlEWkhMTmV3RnN2YWtXeHVLSGJCYkVUZDFjZ2dMRXdHcjV2YWF2VVpXWE5wRWNPUmM3cHVQb0JhTHlGb2FKK1dtQkREemtoNWt3bTRaNWZPcWlRYnRMMjdsc0FNNjNDbXpqZjhSUk4zaERnR2tMNGQxT0RmcGZsWG9BaHVWK1lZUTdWUy9CTDNEcVpsVEdUZ0dEVFNwMXVpK1I2Rk9pd1lzMW9Rb3pENzBmTVVwbmNxRmtLSDVrL0xoS2o0UDQ2M3Y2aHE3SWdxSVhHYXZsb3hLcGl1MHBUUVMvUTVtREllbVlNY1lQZGdIaUhuNlJiQVNUWnd6VGczQ2cvS2RydmpDUkJidGN1OG4zY1VERC9McDJwWW9jNjJrOFBwMUV2TmE0MXJseFhaZFdEZHdjeWpuWGh0Q2pITVRwWE1XZ29MeFo1SGxhTjdibkhEandPL2FzRXg1Ty9yWitQT0tzYXhsVHFYWXVlY1B1ZllvVjgzbmxveDhQSlBKUGRVWW9iR0ZrSzZwdmdubU0wV3RjUURJK01aRHFGVlBBUnJSaW5SdHh5dnQ3RllUM3Rhc2FMZWpLQUtOQ2hLalFNcjhWVGo0MUJSTm5uNEtHaElQYWx4b3c1T1UwMnZqU3dsQUhIelZsbEZabzJOWlF1U2JyS3Jzb3JNekpmdVpVWTRRc0JyblM3RFQyenRscHMxS3ExMmdMZm5pZkhMaXZqREZwQjJyZFE4OXgxZHFZd0tYRFhTOTFIVFg3M2lOWFpzQi96dlQyeHd1dTJEYzgxQW9UZ3NIK0QreHhsdjRwUmJUWHRYSmNDUC9UeGl2N3dZdHZxeUM1L3pkVDlrNndsUmhKTnVyL3hTd3NQOEprU29sOXlkTmlKUnA4T2IxU0U1TFFXQXBVMVd6TlA2ZFNOV0ErUytPTWxRbjJPOTZvdU84M3pqeFIrUmgwSkZOQU1ReDg2cis2SWNOZHI5YlJ4eDRHSzFGR1kxMlF0QVM5aVZCSDZ2R3lFaVorc2pIbmpTNXZ2ZlZ3b3NYbjlvSy9mVHh2Ny9UL3pYZHdKcGxhMHRraUJlV25pWXUwQ2FIL3R4dUhlbFMvQVUxNlVxRWZDaklLb21SY1c4UjNxUGVnNGdmanI0YVNUZEh4RDhxdnJmc2pvNmhOWWpkdFpYczlSRHBvQ0FzV1c0Y0M3U0FRYlZwcyt1cHd2dXVHRXZ0MWhxbWg4dFpLeGhQZ0dyZktDQi9oRm9udDJsYlBaRTEwR2s4T09BS0gyNTBNZ2tNbjdPWktNTjdsS3dtMm50Q24xSjZUZGpDOVdmNzVCK3ExbHBoRGMxbnQ2MzBTU2VRZlMzci9VVndVdXZ5S1JDSVVnMzgyYmErZXZNUjlUVDF2MTY0blRCUTVoUENrKy9YWGVURzVQNWVUM2QwSUxOcEw3MEw2S1Z5VDFqOGFGelBZV1JNVHJqN1lkcGhoaG15TTJNL1lFTHJuc1E0ZVJVMDdGRm9PcHc4UVF0T2RaeHp3K0FMdjI3cWgrek1mTEF4WnJkQ1pvemprRU5pL3NDTGpMOURJQnRxWHBWTUNuejgzc0Frb0Y5c21VSUFVanNSRkpSSWk3T3BmM0NBV0pHUmpqaHRpWGt0N3czbFRnTXlFWk8xUU4wTlRJd2d3NTQwQjZPRHQ1eW5kN2tUdHh0NFFDWERLQlY0Q2VvQllhL0ZKOVR6M09BY3FIUkc5M1Jnb0ZKSTlyZVlYcmN1RnoxVDB4VktGZGF1Ynl6L2JFUnpBblY5cE5TYU1mblNKdVFJMFcyVU5RYW44RWpsS2ZNUVFNUU44K3RqOVFrWVFxR0tSVDY2VncvVjRZNzBOTzMyeCtNR1FuRmdOdkl0aFlzdFVIclhNaGp6NmU0ZnVuNEoxYnQvT2ltRmlnTldvNG5DNTUzQ21Ca1FnVUcwVW5lQWRKRGtaL1Y0RzJzZisvWjV0Wmh0SXRmMHZySFBweEZyNjgzUHVEWDNUTXJxbzBQbW1BcVliaDc5dTRKa2YwM0ZHMEtIb090UjlNT2JLaHpSN3d4RTFGaHp4Szg4SHlVM25LVjdyUmdRN2hWcmNreUo0VlJ3MzUzU21iQm9YZmFacUpUcWtCRE5wRlQ2Nmsvcm1CTjdhWU9mYjNmSlpoQVUyQlFuY1NuQVFlQUdqNWhPUk5ZYUxhdS9PTGFVaU56Y0FxUFZteFFtWTNDWm51Q3AzanovRVFMNVVDQ0Y2WXY2VUpNM0p0TEh0bHUwaXptVHNwOS9WcXY3RVd6enhEemk0d2lrQTJEM2kzb2hJRUxkN05IR2JGT2VBdXpjTmQxZElQeWR6bkd1TExJS3hmWXNHb3NZL3lPWE41empPcWNLMUFpRzFJcEVXUDhWL0pGdlBITEtaUmJsYjlncU5HNmtFemFlYTBpQUROYlpvcm1CMzNwUHB1MjRzRjloWXFHejIxRktiNHVFZVNaM3p6YnB6T1BWYlNIeWlQWWdnNGNaNFltdFZ5TG1CNkFiaEZLSUxXaVFhRWJuSW9nR2dUTENxRkJ0bUh1Qk5qTDdoZUxkWlN4QS96UjdhOFF0NlhRV0tpeXFSSjlVRitZakdITytxdW4zN0hsRHlVRlpSclpyT2lOdkdCZ2dqbk56UlBGOTJRbHlJeWxTQmVWM21TYjR1TmpES0lkUVVHMzBaYUdMNW96UjlteUxOTGREZGJCMUJJRFp6TEs4Q1NpTWJQWGo0MnMwMmhBQmY2bGE4TjNaQnFMblRuckJkYldoUjlFNUZmcitXOFZKTWhHSDdDbWhHS0ttSzJjMDJLVG0zeVVqZDFFbnRLNXYzb3Q5bk1DTmFzTTRhSHF4ZFYycmR6Uy9QZmhQL1lSOTVUL1Bvb3psYS9yUTZRYXAyOFgvRGluSFYvSmZTbENpNDl5NXlYUHd3T2JiZGpjdk5sRVAwYzlWNmZoTjczUVZhcU5kZnBod3ZoM0lvSHNWVlZaSmNGNFFyWmxyZGNYRUJ3dDFzVzdsMloyZCtSZXRTNkR6cnN6ekdya2dwMStXZi9jcW5TOGx1aExHeDgxWVd0VW1adkVTdlRRSS9JalVRWjVMaHowUGV4RTVpcXFEdE12MGtGQU93WXBMSkdQWFFVY3hZNGx0L2JZRWltamxPNFg3TGxhSG1ucUhzNDJjZUNPVTVETlNFOWMwTzZLZ1FEREFRZFV6T056L2VPcVkzTmw4M1VlcXZtM0Mva2Y2TzVSNklCVmZxOTRNYXkwUm5MemVIQWcycXhkbGxOdmgrdUhybC9ZK09XWEpmL1pMR0FHaTZ2WnRvVGhoR3VIS1JOMDhuQ1JZTE8rblJMTHN2a3pmalBMWjlOdXAxUjQyUVhVNmxlTkJ0YnNHcFh1YlgveUc3VVNvbk1DY2hISmtFRUpGZ0YzcEJscitDdHM5WVdCVGtmZlBpRWJ5bHNhRkVxNVdlSXVzVForc0VnNVIrN09ocTBQcTdpZnIyVjUvNTZ2RndoVlVHZzFMYkRENngrOVcyY0haSWV6TTZ3R2NXN0EwcUhtcDJoeWVQRjFodXUzWDBBczltZjhTd2VhbkhSRTFSeFZONy9TNVFoVVQ5a09DelR3VHRpelRNRVhRaXZNZ3VEdHErMGhnWnlrY2Jmb0l3RWR0SlpoWTM3YVdIeldVS2piaVdldjA4cDZaaXBxZjBweWhSMHJTM2R5SWY0dU9vQXlMV0NrK0x1WW8wNjFNU1QxODc0MnB0UG1WTFJKQndpbUoxclNvN0MzSXptL3hYcDFDQjRpaFV2OERudE5GM3FNUDZpK05mRXQrRzFDQUg4U29oTk5XREpJVmZBWEsrY3dBM0dHb01IbUFMM05obk1pV2JWZ00zeDgvMGYySTlhS2lpVkxWZnBvS2IreGczMnRubUhZTFZ2V2NFckZIM2tYc2dKdEtVTVBlSlFXRjdEclVHdTZNSEJNY3hqR2R5dE51aXpDMmpzWXlaS0ZaTXQ1MXdiSEIrVm4ycytNRHE4VnJaNWd0YXpGbHI3WDFheGhrYjlJQmwzVFRjV1NNSnNVdXpzZFU1Y1lxYXRFdklESm9IWTNnOU4zR2VmQnVka0JqazRIblNiV2ZjeGNPVUFySUpLaEI5TFIreEF4RGRBR21nanhtMWYyRUlGb1pyNURMcDNZL3kwN1lkTk9YK2dZcnZTc0JNTThqVTlndWJwNnB6eFdGbXR3UXUzZlJEU2RNMFpTTW1DL2dQMnhtUGFyVkxQWlFHeEpObTJaQVRWZ3VoNjdVbkN4RlJjUmVWN21OY2s4cXFpblBERUVyYUVydHZXem1rRktyNTB1MnduYkdld2xsd2hWVjk0Zm9xWDh6S3M1b0dlN1dEaERGYXdibnF0RGRzQ2JUaTduTWZVUUNNenM3RWFoZ1p2TTBQdnZZYUxMeFN2NTZXYkllNnJHdWhaZk91ZHhXdlVvL1FUWDJraCtXUFY0MmxHQ0lJY1JpK2VLQlgyQjU5d05GRHFOVWtYVmlSeEpoVmNXMkJlanBuV09ZRTl1RlpHQm45ektDN2V1b2lUMml4aHZDYjlCYmdraGZWV1VZdHpOeC9ISktpVW5aWFFsek5SY0VYUGVJQWdyT0JBaWNwcDcrMmRGUUdYSzliQ1VLenNlZGFKQmlMaWVPWU5RMndBSWZPTVRxYWZnaWc2U3pYVWF1M0pETmFxMVdDY2IyTkdRekNoVnlFWUlRbVp5cE53RzhGWVlURTBscWY0MTQ4NStOQ1A5MFdzaFM3dGtreTFWRXlNY1pDeVRybmhBeHVaR0dVY2ZHejIzbis3Vm5BczNPdzRVcDUrNDhkclNIL1c2Z2xDMzBiRXlndEl1S3daRjkrNFJvZUZ0elZTdTdpRjFPOEpsSVhJRlBPY25sSkU1bnp5TjJYK3FIdld2SzV3OFljcERVRUVOMnNUWTlTQXdxei9OcHdUWndBRUEzMTdOdEkzZlZ2TjF1NCtaNzNBc0VDTTlER1ZDTkN1UWdEVjdDc01DbXg1YmNlZHJhYmV2bzhnVENkdjV0STVuZm9YRTBYYkh3MzJPZ0tpLzQwSWs5OUZkVEpySzVPQS9SN1ZFYXBic25MR2hNODUzZHJIUEx2RlFCdVhZTjlOY0o0NE9lSm91ZmpsaDNpQnZlckdzVEhDb3ZIWnVRK0k5SXN1M1lMZFhnMHRjaVRJZzRoZ1Y3QXZkOXAyQVBSSWlhUldpTzlCUnY1Ujd5LzBNL0QreTg3TytjZkJXdTN3OVpsYzI1YTZmY3lyVEl1R2VjU28wN21uT3VsazVYYThucjlCVndlWWR5TmlwMzB5c3pWZ0V5RFdOSHRqOW8vU1p5Ti8xMU5NemJaVlZ6NUF6bktMcnJhcmgxZVI0bG9YcjFZSndwZGtvek1qdFdQUHZFZ3hvTXVRbnBVQjFkeWwrQ2cwc3lsV3g0V1pYN244N3dEMFB3cDhWclNJZXhwQ1g5OGl6Tlp0U2lKU1l1dGF4ZDg0RVB6WHNSWG1TZTVhbzd6MU9FaWJMRWkzT1phRmtMMGFjN2hYa0w2MGJDZTNmVG9ZN2RBVlJzOGFHa1ZlTFQycGxWcnVIcnBxK2lqZTViVzRFZWl2NXFBNzd4aFVKcXEwWnV3S0V0a016RnkwS2dLVzBNTll0bURWMG91aEw1R1YrVEtoSXlLRGVpZXhMUE81bmhocmExcHc1TnhPazl5ZUVPVnByTDU1bVhYZWhSKzdzQTBzM0dWcTdFdS8xTHZhWUx6bS9kT2VMWUhkYUNrRVJ3enFtUU9abnNYSGkxaEN5a3R5YjlGSktDS0tFT29mOENFaVB1dGIxbWVtRTlPYTRjZ1JHeG5BdWZRNGxCSmY0N09yNmdFci9aL2lCa0RDdlBRSFRLak1ta2RGeFJjSDRrRk5BVFhXTFV6amVjM21VbkhCQk10QjNaVWdEd1ZvQ3ZiRkFMMmdDbUhvUFNmUlNkdFQyQnh3Rk5JbnRJTFFVeEc3T05Ga1Azc2RxWXV1RGM5TndZWDNaZ01wMHp2TGpHa2srS1FtN2hlbDcrb3h6cHdXVDEycUdwQzFPWXZMN3Aza0x5TnU1ZXdSM0NpR2dYMThCbEE2Z3hET0RySEh5L3ZrL2YxdWtvZ3BseVNsMnJkWVpwQWwvRHUvV1FROXM5Q09WRGRRS1BPUUNDUkdnVVp6YkRUUGFNYkJoeExwTDZQNlZ6cDd0WTg1K3N0dDJ6YmFRdVdETTE1K1hTaHdlOFgrNnlNcW9SUVNhZnJFMVBrb2dtTm1la0oyUURpMGVyZThsWUFoNUVmZGNucU5WQXprVTF6enRHclFrS2MxdFFlR2tBeGNobDJ0aTlUUHVMUzFzdWVzSlpieUNFdWRrb1JXU3FRaWg2TVdtY0ZEa21TWUlBU0RIU2JIUHV0MS9mcWJSL2FFUFFENFhJbkI1WTcvQm0zbHFnUGo1Yko0Kzk0L1krbWc4TUVxZGJ4d1hUUmNEUkdTS1NSTWNRTk1YOU9Bd2VKUXlZTlFmcnVSbWhyazB4V0JyREZqeFhsMVlxeUtxc3I2dVBlVm1pWVVPNnIyU0lrbFd6MU56ZlpvV3F0OTY3akNqeDQrckhpUjNBREF5eVErUzRHemJZRmxFREpqa0xMUHhvajdSSTZLZUx4ejlwSytlM2Fla1pFcHlsQkYrZExJb3N2TEhyODl5bCtJelRBeWhiOHFEK1dCakJTNTlJVEtLbTBta3JoKy9OU0Q1WHB3MU1uNDc5UFpKdklVNEd6RW5YVEtBZDVPSEp0UEpMTWtUVk84S1lyL3VDZENpZkJMSFRMUjNPY0FVTVNiSWN3TzlPajJBenJTeDQ4M0pTeTVCQnYvR2JFYWZqYkRsbHlHaEhBWmFDbUYzZzl3cWUwSmU4dURybkVtb0NKY3ZVZS9pWDN6THlzNG83RnpkaHZoQ3FiSUVsV0RWeG5RTzRZd0R2b2ErLzJISFFTYWVrZFJlRWdQMjZNZEI0dlIrLzhmTVhrT3d6ZDE1ZnBsbDVPYlVVWVNsNlo2VE84aDhjanZzd0c1N1dZUmVDdklZMTNTVXlvdWwvV05WNXdLM1U2WjVLemYzZmw0S010WmE5UzdzRkxyZDBEa3NCM1RqWDlvdDB3RnIxRUNvMHpWS2JDWWVLaVFNSWhEOVdtWnRGMnJzSzFrdnNpWGJSeTl1Z25JUkJJbnViR2VFayt6RnpBQVhRZXpIZlZ6NWpFUWt6bXgvSjlCYmpLbG8xZlYyZlBzYlJ5aDdEaTcxT2dWWnhjaDBreXRIa1BHanhyQXJlNUsyOUEvUHd2Qjg4OENPNWRUMGlSbFR1eDZwVjNjYkt6K0FMVjFIRkoxbU13dGZkRE53dC9ZQlY1K2QyejBwVXZGOWR6eHN5RTRRdkoyWFFVU3hDYXd1bTRRY2tZTEFCVXVUbEZkYmNtTkI4VkwxUVdCQmhKK3RjSjkvUDNQblR2YkpsdTdjSjJaR0JiK3BQcjY3SnFDdFppazFpWG9DSWw5UFVSamNFWmcyNXNyYlVoWjFnMGt3aEhRMFhvWlVnZ1ltcGVkWHFwNXc3bjIvRDg5UGFQeGZoK2RaTWhhTUFsdDFMUTRtZmM3SDZGcndzTHV2U2pqMUc1T28zZGJ2MDI2MUo5ak5YL2pUTHk3KzA4ZXpYYVQxRWtxZXBXdzllb1dtL1dIQ2U5bE5mT3F3SkowM2dOT0tXK0pxVG9KeHJHT2N1Ums0S3NPTHdVRnBkRFNWVDF2NXU0REY3dWNQeDRacWtlZ0N2eFExYmk0TUV4V1hMZ0xNbE53R2VBNkJMc216OFV4TmNQZEZrVlE5SFpRUW9Bc3pORXlGZGtkL2pGcUJtc2NNU05mR0N4aStlVmhnUVVFRWlXRjEvVS9FV1F2ak9yMHlSK1pmOXVKU1d0M0RnZ1pRNjlMU1V0U0d0NXR2Ky9LcjFVbytYQVptN2c4c2I0bFRCU1JXVnFlc3ZKQmgyZjhhVE9rWC9OU3JPUU12ODkzWjUweEZpeXUzbFB6WWp0NmlCc1JoNlRJdWJBN0ZiOC9CMXBDWURDMm1FSWFlUlF0c3ZuTzUrUVBGVkVDWW10MXhjbUVxV2V5SDVUT0VjRWhhc3JwVlByUmRJaGx1bWRnNUlPM2NZcVhjdjBKRk9SZzVkUGdqTmRmZCt3UEQybjJLNGFWMVFPQ3BDRW9SeWtlMUZsNGkvaCtoeGw3MjNwaHdWZDU5N2xFeW9haW5ORnNsOEZncGlxNlRiN3NTME9PWmc3c1FRVkRIUHRpOUZkeno4R241T2p2eEZWMy9TdmFOVEF6aFJuN1hZQnhNT0NtZXNoNk5QTWs4WU9NcUhiVENtRnFXV0tJOTlFc1NwRjhrdTBMNEw1TkczTDJFcGhVRVo4SW1idW1VZ1p2YlFHOW03WFpWZC96MTFxUDNWbFM4ZDIxcG5QMzBrMnNSa3cvbktNTnFaMG15OVRFZXFYRTVWQ1dwSnl3SWgyR21wNWUyOEY4bmowVVNaSkFrZEpFRFpiWHNXditBWDMzY1hYRkNFVXVZWlJyMU14TVNKaTM2czJSeXoxc3VuVW9PN3BJbml4UHJaMHB6NjVzVlc4R0hNOG41b0tHZDBIdVR1MnY4UVo1d3F1b25ibWRIMmYwLzQ3Mno3aVF1MXJubmxGbXZzTDZidnB3Nk5KS3RiYzRPNGx4QWJ6ZlBKR20rQ0VNT1NxQW0ybXBaYm1QNGEva09nTlUxNTEzdENzK0hvODVEUnNmcWtnMUpRcFJuZnpYRXNSNENGVTZ0K1pvWithMnEwek5tbWhxNmpQWjRqTFV3Z0ZHM1B2eWhjVEh1aU1HanFGdE9yM0c2bVQzV2ZPTk5vL3JYYmlBZEc5M3UyVWxqNTR2ZFZKb0NmbC9zRWhSYWJRR0xRUDdLNlBzOFpmZzlpSlVFY1hYMDNVZ3crMllBMnFnUXNOWTJVUHNGZE0rY3ZEQnF3MFY0emJrdDBJVDhuMDA3anRtb01KODY4bjE1ZzBMVG01eEErQzVkendmNU1rTVVRRzRoRlZ4alN4bkYrdzUwK0lVMHZKaTZ5blFVNWxmcmJMYWJHNHFGaGV2Nm1Ma1ZOL24vbUhDdmhRNkJJZmF6TUVDMjJsUFNYWEU3d0FqdHZua3BUeUlDeWNSK3ZZUk83RUJrM29NY2pxaGZrRlJKOWdYRjRrZFpiaUFzSVFLcEdWUzBaRmszY0oyWXJkcnVEODFVbzBjS05nZTYrRHc5MmZsWVlsVzF0bnlTNVc4ancyZjRPQVdyYi92SUNZbTEyc2JIWk9HQ1dJZzIwUXo3dWRiWVhNeDNzbGlBanl6Mk1HSG5uNTRxa3lUdG1iZzZOU3RNek5Dd3RFL2E4c2FTemFtRlJDN1lGMHBsYm5ISkdvcm16NGdybGVTOHJxTmhSdEc5bWtJdnN5Tis4ZlJOcjVVVExXOXhLZDU0MDdqbjBZR2VmdFlneTZFR1FnclJPcWdHUTJwWGFKTmtQWGFPajlGQzM2cEt3Ujh0eUJBRjZXMC8vYW5BdU9UYzZ2YmxVdHJpMlR4VXpYY0k5RDZmRHd3eG9EdG5nV01lSklDNDhxMGFRQUp6RTBQeW8rM044cWRXM3JpZHJDUm05K3lPcHd5S29BTFlsWERWeTRkTXZSTHhDeFJrb3A1R2RwNE9mV2Fvai9wRkR1b05DT3M3MWpYWm4xcEFLWXJaeDRsM05aeGczOEdrYkdaUHJ0RXl4RUo3ckpYNGtNOS9PbU1SazRGY2dLNnlOdTliYkh5WjRsMHE3MkVQbWNVeXc1Zm00OFdPanVMWCtmdTFJeDBkYWEveVRmYnRpMFJ5NmdSQk1EVzhNMEpRcHJLSDBTejhBYXk5VHlWZXVZUlk4b2VSbDZHeVVjNW9ZU0ZYSm4vcGtoS2h2aDY1cUpCcGFSd09RUjhxeXJlZEF5MW1YZDZXd21NcmVpcnF4RGdTR3RLMm1uLzZpRDFJdm11NXlkZXRudSsyb1UvemlFc1psSUxETzlTTisyb0NaZEJJSlJVOEZNUURqWThkN3U5N2dtUjlQRnFoMklkZ1BxSEJSVWRNNGtrdmNYNWFJU2p0RjBIVkNxU1U5QWt4SWFHWG9FVVFLYktGUUxXV3A3aG05aEp4cmxDLzRpanhiQ2FjMFJDaW5kL3IvU09oWHIrK29RazduNGNsRUFTQlpES2RWdFhCZ2lxUlBWTFVCYU9wdk5OWVBBRDl2bUw4NEZCblFHYzRsdURWU2NBVElPOFgwaEdwNGo1SGJFbDhJUlAyZUpFdU5hcXltSDgvWHJjaG40QmRIY05pUE8xVkhqcUh2QWVScDV2ODFtM3RoK1JaalBDTWhWSFV0TUd6NCtGNjNnck1LRmkraktxckhDQjlIeGFUZ0p6TVdUbG5hbHdNbW9KaWoxVHVCNllDZzBEMU9RcisyVEc0aGdocHowTnhNUFkvaEJ4YnBMVXNKbS9wOVFSUlIySXRTTTU0QlZwZUhPK1JhL0NKSFdSRE9zYmYzRnJvcjVOM282T0ZUdnpFS25QeEwwYkdzMUp0Z0tORVExbCtweWdOUlZXYW5EZG5qOU1yQ1VZK2UveXIrVnhBeUFtV2tpN212RThYMjVCdFNyZGowVzc5WmNVYW10RnVIdTlZVnpqUlN0S3ZwZ244Si9kYy9rRDAxVCtiZW9xYi9kYlBJY1dsVDcwTmlXby9ZczV3RnFwcy8xd3F5UEpWV0thZ2t5aGFYVEdTWk1EYzdmSWJORnU4L1B5MG4xNk1oNlBvQ2F4T0M2VEFlL0dkZjdCZmpHNmdEYmk1WFBsLzd3dkRWRDhEZ0VUUWYycDZ6WVRPYVEva2JuQjdYWWFuV0dhVmxJRFUydXJqSzRTODFzYkl2ZmorQXl4ZUt0VHF5WDh4MzZYODVBTHNhTkFrVVVyNWxBVTJMS1FyeTlJRW5aUHBMUENEOG44aWJaaU1KTXBsYno2UmJETW9mZTZSWHMyaVdzMWI1ZzlrVEFKeVdHMXFuNUtlaUo5UzhYYUIwenk2bmk2bC9paHZtUmpLT2k2Q3ZZcEYwODJPemlkOU9LbzlMSWpxeUpXcnBaeTlQajBQMEl2NldleklWYkZoVjVMNkdXQ0s1R3FLNWF1MTB6Sm1RbG01QmxMd1lJSXBFaFNMV1crWkIrK2dldHNqb2FONEJoTUcySEdZUVpJL2MwaFROakM2bS9YYjQ0SWR5YVNJNjQ5b2d2MTMwdk50Uml3Wjg5dTJqWkZVckpRMnF2UTRTNVpMZTNHNnJadmJaMWkzdE56WG01V3JsUXJTaE5MamdqTVpoVkV2WFhNdGdwcXdCS3ZUUXU5cWRqNTB1SzBOWVMrVDZScEJqUVVxZ011R1poeWloYUt0R0lacmZCRmNRVm55alF4UU15Q3A2aDRmbU1wUTZNenlHcTB5UzZMWm1SeVc5R0Z6N1dqNjA1KzlwS3JjSitNUzhqemZiUVI1bmFoaGJETnB3RWcxMFVKblVtck1vR09ENHV6dDJIL0hlNFZ3S0FwclRDcndsT0JtdmhuWm8wcW92dW5OekVBRjJvdnprajBHVGxRSGJqQ2xlai96b3NsKzQ3QmlsdlFjZUlCZUg3K3RHbnpERXpIWndZUkNvMGJvcFZpR2wxU3orY2JldHJNZWRyQTBuZWdSU01xaUJOZ2wxL2NTM0FHMkVUK3VaeVZhWnVMNmFzZW5SdnhIeVVPcUoxZVZ6L0ZvRUZwaDhMWjYyVHhRS2l3S1pFbnJsSUNPUHJWbkplK0pxNklYUjczQXFEWUtWQ2VSVTk4STNiYW5lR0FQRnpMU0JvK0RiYUpsWjA5K0p1SGlHUnFWaE91K2FMLzk5Y2Ewa3NmMTdNcU8xYjA3TEFoTnVKZ1dPbGhYYlpXeUY5Ris5bC9WdDRMNVBxWC9uNi9ZWHovZEgvVnYzZ2gzNzB2MWFUa3lsRkhOajdRYTFtTDFUN3NRSGlsQk5mTldBbm54TUVFaE5yU2pCSDdHSlE5U1JVWmRUZHhHaFJPaVFxeXUrMVR4eXVQTlRPY0IvNWpnMUoyMnQzQkNnbHBPbXgrQkhZSkpuZnpBYjl5dXgyTEZaTlI1b0xEa0NTWGgrWFVweUZITE5rZHYxK09Ta1RwQWxYUk1FamhIOUo4N25ZeTVMT2h3YjI4UWhhSGJ5Qjd0ZEZ6UmFFSnFNU2RyRzdSQVlhNHBBdjgrYS9iMmlrajVxMzM3d2tmYkJ2bXhNd0NITWpnZGRGV2FzdURmbSt6WGpOTFFEczZJRlIrV3dHcDRZS1BqaGc0NHR6SDJLVVhTTTYvZkIrYllCS0VlWS8zR3FnTkRPOTFVV0M5bE55OXBaMjZhL29tdkpCT3p0Z0NLRVhBdWRUc0x6c3AzbWJnWTdyVVNFZ1FUaEZuNkxlbFZUYWlEU0IvTjR5V0xlYmR0V0xOem9TM1hiZHB6QjZDdHIrcHdES09kVVkrOFZ4U0M5ZVJYUHo0d0NyVndHYWZHcmswUVI2T1NjZGp1aDhqNkNGT1RpS05Pbkx6cU94TmIrWW55VHVITEJyZGJMRlU5a1lTZmJwYXFScElRL1pGcDVLZlpVM0xPME9qQ0UyNjZZZkZKL1JYQzJaZ1ZBbWIvUjUrSDFlK3NxRlRNWi8wU1QxSkZzbmg1Q2ZGekVxcFlzN3VKNzdBcTlmU2Fma3lFcVdaQlhCTWt2Tnoza1N1SWhIZ1ZkSXN4YmJ2d1V0L29KaXVrbzE1b1BIenZSNGNTVVQxcS9KZXNHcFVoK09wRlpPN01JV3l4NmJUY0pBQkthbVBaYzFpdWJueUZoa2Q4YTRVM25vWUIvWWsrY2EzVEwxcGV1VUxyNUpMZ2hocUE3d2xxWEMvUnpjUlFFeFExeHJBYmFnQUVLR3Uwa1N6cHVjeWsybitISWRGVXZCMGlVczhNS3U5OGdlYmdBbXZmT29aWTVPUEJuQjNzc2RaMlB4OS80dWs5SXlCRDdPWmNKRG1RR28vT043c3hCQVFhWUZGN2FpNkQ3SWRwOExZdjUwNWNGeDNybHc3ckhOSVN0ZDBPMitGR3NDNWkwMkIwb3B3RFp6SWJ1ankxVGRHbTBxaVcySm44bkd5ak9rWHo1bzFWeGUrelFEVVZpVVhGYk9WcjJ4cGEvUlE2MERVbXhsa1dzNFpTeFlZSHJVNWVERW80Q1R2dHBqdTQ2Yi9YRFIxd0syUWI1VVQ3UnhSQmdnbWdlczFGQTZPUmlacTBhYmVqVkZjRWhLNytnNThjRDR3RVE3Qk9rZCt6bW1qZktNZllzaGE4L2xnWlBTTUZFOGZTdGlES1poeGVxU3o3a0R5Yk9PNlNrWTRSTmRITnkzMnZPajFjNWhQUzNrS0VWa29lLzJHTGJicHY1Q1Z3RjV6dUF1N0NKSnhvM3RHa0FFR1VHb01zQ3FYUFFMZVRZNlJPS0RKWERlWkxzZGVlamFHSXNxV1NhSFBKVmJubkJPc3JCNGdyMmJiY2ZRKzNzdkNzUGY3R1JseGs0ajVSMmhGQ1k1T090a0t0MzhiS2htSmRpRGhoeUZYWTlsSkVFbWIvZnhLbm9BUHlvTFIwU1U0RjFaWnJDWmZMdnFBMzhoeVFZRUZVdXNSMFFidFh0N3hqcWVFMzROb3I4V1FicFh2MkhmNUdHOHRQSG9kQUZxbEpxb2hmaUhGME5nKzFVWEhiTXRvVGVJc2NGc0dXY0lxbXNGSTRYMjVkWWJMSThxTFFQeGM0Tm94NGhvWDZoYTE0K0o5TkxJcDIwdlBETVM0US9kbzYwZWpEWitXUGluSG9RenorU0ROYzFHV1ZHMzU4VXZXRWlpdnFqc0NSV20xaFc3OVVZbDFqODY4SWtlMGx6VmJyTTk5QTlzUVBUNURxb3VONGwycTRYNDJ1U1pqYjIzNFZNbzFSdHE0TjYrQVMvTVU3cUxQTmlLMEtBcHVlNlBVSG9SN3pwcHZDZ0tyMk44Ym9qNEZjR2htZ1UvR1JVdWducE0zazMvazdXUE9yWHNJQlhxaEt6VFBLcHhZUER1citXcEtLc255VERCUUxjcW8yZHdETE9QUHY2SmpiVk1EcjNlbE5JL3NHUE5ONzZGMWorc3lia1lDdnU1UGl2Y05UaXFVdndMUHpYMlZYUzFjWVpHZFErSnBiNDlPYW96cUUySTZqMC8wbUFNMlppQ1B5VS94U0tQS1NkbUdsaXpuMnNnLzdmVlRoQ3huK251ZDQvNzRmZHpyaUFENVBmMk83MkRqV2Z2R3dNdEIzT0dNVGJ6K01QUE83UXRTaFFCeENZeHIrcGI5eFRMWUZCWEI0SDFrbDZKWFRjUG4zbUx5U0laMDBqdUw4V1JIT3JSUnFIcHAvaVUrOWZYUTB4K1BJaWxsbnEyZm9USDd4bUJmVGk4cEF0Nm9NbkE2dmRIcytkZ3pySU9JVG1ReXVjWDh5V0taVXk2a05wVXZxaEdmRE9sUUZGRkZaWEtwMjlGY2tPN01LVHE0YW9ZY3hLN1FlaVlBc2hNeDlncElaZlRHbDdOOCs5eGVOcDNjUmptdVdxSWV4cVJuNU1Ta01Xb2VLdHByaFRSdktidlMxZXVUejB6NVdLOElwUzc5Wm9MeklNcE5GZ25QMFd0ZVhpVC9KT0FJRHpNSEVEWFBQTnBBZUxPL2Z5YzIvaEJNMDh1d1k2T1BQZlZ5RExUOFVDT2hBekZuTkZqUERJejBUbkpGQVQ5WTN0Nkl6U1RyUFFaU0R4bDlKb3VLMk5FN2dsWmNQTjNETER2bnVNUm5tZjM0YTQvV3B4eXJxREJlenNoUkNxbTdFd0F2dTgwd2p0VFlLU3RjUFRJRUNKZDJqdHlIeVZvVzdNR2JURFJZUUZkM1dFbHN4N084WkJTd3FZTTgrazdNRXNWcHFleUcvOWRDUFZmUTdqdFdjR0NVK1ZhYkU5bXVlOVRsWldGelhaNGZ0dnk0enBMOHVISHh6Uy8wVkgrQlUyMUVCTDB0alRvLzljNzdLWVNlRUxiWWdoM0Q4bjdaUFFWY25PS0lIUmdIVllGV05HRjdNdURJR29YM3ZkMXhmRkVCVGR6L1FlRlFvTllvcnZqeHdVdFEwZWx5ZEZuYjdRQjRxLzdIbDVSKzJOL0VRNGttai9NeEVQTWpNNm1jRWtkWjNQUVlGYnNwb2FSVzdNY2ZUcFYwUnBwN3h5WHluZSs3Z1o4TC9GSFZEK1h3T0ZZTk1yMUp6QzlTc1hGTDRrYjRqYlROM3V5YnlkdlRQRG5aRnpVcTV3bEZZUmkvSHF2TDY1a2kxVVBGWSt6OElTTlNJelUzMktBdGxKOTliRExZVVdxaTZ5ejdiUjN4RGRZTVp0eXFiSkE3cHQyRmFjencvZWtFdHZRNXJYdHNuSUR5a0tsZmtPSWQzNVlrbndLampwWWs4N2xIelZGOGNiTUs0Z2EzWnY0bDExbFNRN083WVV1SGhqSHkwVXM3eGlUUXZkdkZrM21LQjNYSGJtckdKVERJT214OElVcDVNWGlkRjdaZ3l4SlFhay9jSWlObU5rdGlCQS94aGp2WkJTeno3bGtSZWsxU0NLVmVvMnFFR1orSUkraFZLdkpLeld0UllldTF2b0RFMUNJTHFPb3hURStpblVLNHFUVUMyZkZobnBVOEx1Wk9FSGpmS09mUjRuaDBTMHFYSEdtTlh0SXBadVRENTRZYy9zOWdSU3duNHlpbDc4YWhUWFRqQlZsalVPV1NxeERCdXFZN01VUkNpT2sxWDY4NGVwdTUrS0xvc3o3VHdhY2V3OHUrWHFudEVaZjdtZDVIN2ZhdlpBUkN2VGlvWWVBL1M5dnNtc3kyZkdrTnRrUmJtT2ZoVTM2WWxnaW9ZTTEvVVczNkswUGJteU0xNVlxYnRCSjdaSm5iN3EvazZjWWhDUGM4Q2tVbktMT2pSelJOUFZqQUFhQmxEL0VyanlBSVB3ZnJHem1DSnV5cWRSak5zRk9zSGtOT0lQMit2dEpZTFVsc0c4LzBhSkVpSk01NXZPQUM2RXpaUmVYK3lMVkF0YnFNRlo3WlU1VENRamdkcXVVUlhKYXpBTm1xbXdoNnZCQklmbUtKOU5lbDVzdWd6WnlsKzBWT0FEKzJOczR0NUovRFVzOGcxcHBRazdEZ1BrOUJicngzZzBDeW9tT3NjSDRhWDFtNmIxZzk4aWIySWFlZUtwS2lvUkpnNkg1MTFRamFmQWlOc1hIUlVPU0JOMkcvbEtxTlVkOE1NSGowakR1NUlTUjVNaGZhUEdQUllVVGcrZkFTb21VcHNzcU9SSlVpUUh1ODM1V1kxdHRKWnl3aCtEU2szdmd6cE9YQkp1NDZsU1dJUW9pU0EycVFDL3UwamxyTGtlV1Jsa1BxVXJrZjdxdGNHZU92TTVwNVRQNGh6ZDB2eTdOYzZWUFJ4OTd2VURzUnl4L3UvL2EwVDJCZ0RRTC9VS3dkdnJ6VzJjZEUxR3Z1QW56S3piSW0vSVlrRStmM2ZOMGpvM21idTZ3anVRVSs1a0U2ajJlTFhTd3pJNUR6cjAwY0JVTjRaQjFRZTh0S2x1SWl0MHlXRy9zeVA5WUxRSHd3TUxuUUdoUUJPNEwwV0QxcGtNUHVtNG5WYld5WmdBcXRJQ0NzclVxT2hwQThaOFh6QS9xU0hWWHZVSXlXNlFyV0hRSWFxUHhUTEhZL1o4WG45VUhvQ1JpSW1DUWVZUVRPUmljT2JjM1ZiVWRsRWJENjdjbENZUXJQZXJVZ3pSVVg3Zm1ORmNOY2w0aHMvaXpVUlA3aGNMZWhMWFd0N3FZT01KVWtFOFVZZVZaclRTSFFIL2NkTGc4SVR5YnUyVUpOZ2RRcTE5d21lSkpqRVdFSDV6NGhrTG41SGh6SWJIOXo0Zjl6NmVrMGxBb05WZ2svc3RjaHJFOHlXcmR6V0ZTczloUmRLcXIwZnFvN1hZVEVJTzZpb2R2YThPTk4rbFp0T1dUazVkaGZ4VTNiVVVqdHdTQmxjbFpPckRIYlZkcERxZGFvb21zdDdMcVFDM1lpR3ByVjhLeU5hM3hwNUl0SG0vakhGby9oekdGSjBwK2NWajRiSmZRdENEYko0dkQzcHdzSFFWcDZBZjRzUW5SVTk0cTI2TUdIb25TUDZIMXI5U0RuQW40dmtLS0JLRldPUGxkeWpVUHZRaDZqbndXNUFKSHdiZ0xZcHlEZ21WdmxUY3pCMVRrSHJyY2l4RkxDQ25PbHV6OXJiQkdaK0ZEWFdVVDNOcDVMRFRvUmlkNGI3bWFKOHE4eVNUdTdiOGQ5SXhDcWNZc3F6WlZLclFITFlMVEdJT2t5Q0lrcHU5Sm5HU2JmNDlnQjN0cHN3VUFEYzcyUXk1aGR3ejhsWXFtc1ZSWXRKcVduaTAyTjNHWm1Tc1hGbW5XR0twVkxabWtEcmRETG9MRjFTbGdLTVNGNnV1T2s0L1MxeURDWkRTc3R2NFpabnVjTklOSkxBdWJURlBaMCtzM3RtTUhhQnR6djdRU2lQQy9yU3JSR0N4eFNtMGQwNUcwTWpnbWcvWjVvam1CU0hUWFRUMC9hMGluWG1kN3B1cGV3a2NXWTJiS3NWQ1QzOXNVVi9INlBOaW1WUXJHdTMxSjU1bVpQbUZLa0N4TnIwbHdtYnlrTEI1UkhjTTh2U2F6VHJzRlVYcWw0WTEzc1NyWjlpdjBpL0FkcjlPanZzcVI1bVN0US9MREloTHpUc3UrS2RwSHlHOXRzN0VpeFFsb0RWSEwxa1JZWlNYeS84OU9tcis5MnFuYVVGMWQzQzM3dk8zbzZkMFExbHM0clRvRC95TXNEb3dKRFcrY01HUWpocEdNSE1KejVUNXZXU2c0VkNLWXIxUEZLRjZ6bVVCeVVIZXlyaEVWU3ZBSWs1NVFjalNadTVrZUk1R0ZEU3ZJd1lMcy8zcGgzZzh2bVVJbHlXT0ZDb0p2bTRwalE3OUxrUmh3VDNMUnJqWGtkQ0NvWjltYldqb2psZ1cxd2I4eTMzUnMvMG4zN1hacUhnS2o4cHYvc0RQa3dRU2lTdnNCUzdzYjJIL1V4NFExVVZpZGtLRmxHNWpySVB6cDVmSXBBaVFWQ0RzZXo1NnhqeTNHdmNqYnpFMWZVaENiMFBsWnpncm82K3VvRWJGTkxpRmdCWkUxYkdsRG9rTmtOeXRKbVU3eklVbjQ2QzA5WGJ6bjZZRE02QVpvQWg3WHdUVVhyeHVHcUlZVlkyczVPUTFpSFVTbE91UUw2V210ZGZMdCtVL0c1ZVJ6bkprUGdoREpESi80QThaNkhrcDAvanZXY0xNc1k4bGNkM0NvYWNYRlBWVzdOZzdDdFV4YURlR0kwVmZFL1FGbzZLRVhuQ3YyOEJ6emJjYW56SnZxUWxWdlhwRGRyVC9WM0JCam9uRkpPTEtlSW8rTXNiWHFtd2x0WTMrSktEaGsycDZlUGs0Y0R2NEg5V2xWNk0vSnRtNVNwZkRMaUNlb3JmTjI5MVRQb2o5aXZiMUhmcUFFeUhBVXREcnhQVlhrRjdnMFdIazhZYUEyZmFOMkxmcksvd3VkQmJJbnVJYU1wbitudVF5UmVwcHNGNkV5dGJnZ2xnZW5SZ014OUpFaC9JelowM2dqVDJCSEVqeXgrREZlZEdoMC9Zams1TjVGUmdZdTRhTVFyS3FkN0ZLNm9hTlcrdEJTQkF3UUdUSml1dkNYNXNzUmt1ZzViZzdNenBnL3FXYTVVN3cyRTNzNWNYL0NBb3I5Z0Frdm0wNmxKSkVqQXFJellhVlRxNEx0a2FybFNvMitYdi9YL3ZueWZmVU1PRnM1RUxJb3JBS05lNDFsZjI5dkhKQ3NvR2Y1NUJqQUxHRTMyYVNuZWpNUHUyT2Rra0JhZUE3bWw2aWM2Z1ZRaEdJbW8yKzBZSGdxSzAyQXhjSmNVS1RkelA1V1NKaGRTSWdnZHEveGVyWjBCbmZEREF5Tlc0cmtuVTlaZ0pnRVptUzBhS1dHdzA1N0E4Z1VPd1pvUnpHUFZlUmxnb0o4d0FZaTMxWFczYXA5c0hIQmw1OE5xaklQWVRiUmQrV1pMeVJ2MVZzU1lMOTE2SGxmWGN6akNXa3VMc29XUkpFOWRqN2FHeCt2MVk3dnRlSFQwUU5RS1BLVVBBb2lFZ0hyTEFhZzVDdjFvUW1hVEdTRGlIME15ck5meXlQQXNtUGt1WUtPQ1hVcHBvL1IrYTlEbEhNSG5nMGxuYk9mSnVQdmJBT0lDU2VuTnpzN0llL0VWcHpEUHpPWjJmclMvd2l2VkFXMUluWlNxYjNnK1RGWm5GTktUQWF3Wm90QzJrYUhERUl1dklVYWhhZFZSazMrbEdmMWRIUXRxTFJJNGhVUnFXTGNWWDduZXROV05nZE52UWlIVjR1N2dNdkczbEMyZ0hmTThQMDlPNDRMN2tCSzZRYTdYUWhKL1ROV0gxamNNZUZLVm5Kd1ZXSHZDNzZqaU9nTHFGSkczS2t1eFVteW9IZ0IrUEFtRlRwZWhYdlI1UUhvZ2FKRkFCeTcySnBJZWJHWEIxRVAwWk95dGJ1VUZZaml2SHdIT21KZ1hTUktvd3YrY0RYemlOeTRGR3hBeXVVRCsxRGpJMWt5QUR3K3hEclRrKzBoYi9kZkpzai9WbGdaZWJ4T2lBWjkrL01QZmhhb3J1TFlsSVo4NFJGNDhKZnE5QllpdUlCUjVRTFFQcGdaNDRMS29yV0NxODFMMzU3b1hvOXJDMHhpLzY0T3RSbkdtbDlzbEVqWitRYkdESDJJdHl5Zi9jOTFjL0ZYRUR6TGtyV3pvNHB3V1UzcW5HVHRNRFp2bVBmQ0ZyV2FUajJDVXlaRTBHenI4T1lKQ0gxQ3Vmb2FRdkM2UlozR0ZKY0wzTlpySi9CZUI3N205N2NzYmc2WWJ2R0RiZzcwbXIzbW5LYzB1OXFiS0JPc0oxb3h1Z1c1cXRPWEhsNTZaTExRTmpJOFBxSStUL3c1N0E3NDZoMHI2d1RlYnVSQ3I0ZHpMNnh1UHJNK3BoeU5TWTNKd2puMHFUSTdxQ1cvdjV1aWdSVlVqQUpJWFpzR3M5cUMwMHgvcW1FSEd4QjlzL2M3eVFiZFY2Z1duTC9jUG5EUGM1VTkvMGZ0ckJBOTlmTG1LTm9KcW9OREV1NVdwZ2MzbnBsN2w0UmpLaWRJbXVVQXFKS2xQZGE2ZTdEZHd2SWZhVHBLTFdIRkZBYTd2aDNMUW9CcWpoQVh5cTJ1UFhQdnhrZkcwem9NK2pPL3lPU1QyREtrdGhKUUJwR3NSYjdqOFZ1YkZYanBiOFRzbGJUakR0WWIvWWlHZXVJQ0liNzJ2WW1kM0MyUmR3WnZCRDhQOG1idERtbERCSitWekRueWFqRGVtOWlxOUNsRUxmNzJrMlVySWE2UmN1dk5Gd29rdElaS2lRUTJudHNyWU83aS9FcG9tMStYWjgrZVJMVDdPcm1BUVp2T013MGphdzRtelhJa2ZUZm9hVkVvaENadVZLdkRpK2IzZTZaWFkyRVBiaUlBU2lSVWw3N0V6Sm1FcmlRTHBycTAwc0tBUlVmSlMvcWQ4SmwzODl2L3FzQ3pWNTlyY2paT3hQRmtjUllQVFBqUzNYMzVZV2J5cEVSSUI3clR1WXhTV09oZjY4WGdUejBpV0o3TXluTnVCYVk0WXhUTmRLSDFYTDgxRmdFbHI1VUlLMHNsNEZGT3ZMd3M2NEw3WlNjRU5pZVI2OXloTFdCMzRQRGdoM2lEZnBBaTMxZ3FLc3lrOHJIaTFOUkxIMlRidllERi9VQlRRWHB6c2JtUmNYNHU4aVFlcU1NZC9iSjBzMkNRMVYxRTQ2NzdTeGw5UGV3SzE5bHRNQUNla3BpL2NCNnRZeWprVkxkQ1NScDh2bmRVYWRvV3JTVFNDNFBUY05EVHBzT1lYekQzN2VUajd4U3lTWEgwbi92SVNjczdOSGE3ZEZvSHdvaG01YXUyaGF3dytkRXFUVDBEK29PcFlERzJ3WktBRERLVmhRQml4aVprcFkrSU1POEgwTW14cUJkT1ZsbW5wRENLc2tTV2s4ZS9PNmNLNVdzSnpwNXY3d2QyVmtiRlRQV1pUUjdiRTBFVGg3SHpsNG5kSXZMbWRuclRtakV3bEZDbjZYTjRYZG4wZmw3QUNlVkVDRkU4aDR2eURiSWdYcXlKQzZTcnBDcWNjZHlkT1QyczJhRlo1a1hiQUpuKzRTQnV3d2huYjNEZkZ0RkNneWpWeEd4OXUxUHFrY29oc1MybUxsZDFyVXRaanlSS0FhTWYvb29SVXkyNHY5cVNOd1ZNSFh1SEZNdldNeDFSVlcwb21FR2xjeTlvY3ZqVklBbFV2OGRBRndaa2ZMbGdsZmlnT0NSdU5pTHdBSjVVNkV4YXFkdmd0ejhPajhrM3VjQmRvdGdXZU9md01CUytzbWNDMmhKQjZITWYrQitUM3YvU2RETVAxZXk5ZlAzRHdEOFAzVS9oOUFnakh1TExjNUxrM3JOSFlQOFNocnNQMFBsYjVUWW9rTmx2OGp6UUlYQUhEYkVCSTNrQlBid2VEeE1pVldkN0kvc0FiZ3JsOGg5WExhS2x1UmNIV1U1WTRKdUtDR05jdk5MTTQ5WE8wc2JycVp1WjYwdWpGRUlwR1ZqOEMxNTZ5RlBaN2l5V1NYalJPTnRuWi9uekhTL1VTNG9JbjZPVG9VQnNJbDE1NWJ1a3VxeGhqbUpzUkZLTnM3eXhoUUYvWHlybncxdkI0S01qeW12MC9aS28wMXlETjUvTXg2SStYb25FdVBjb0thVXlGWkk0cWtNd04yeE5oTDkvMHdqN1JaajF5Wi9sMncxeFdKVGcrZUpUd2EveTdJMTZHWHJzbStDSnRJaHhFVlRpSjlrY1BkYjVrditmWjJwOVhRNVJYTDE3OUNsSkRzRlVVNHN5dnVYcWY0SldWOWMvSkRxVkFmVythMFJMNUhtdTd5Qm1HMnNxNDAzNUI3MloyYU80bTJEdk9CcGdSeEU3dzNiQkJ3dFYyQVVmcEovNStqdGJ4UENtbGQ5enlpanFJWnNXNlFZcVhwbDJqTVBPY1BKdWplRWcrUEpmWW85RmlYQ1hKb2U3YzgvY2xhcVNlQ2dyUmNDTDlFZUwxc1hpVGJtRUZDNEhPeEwrY2hTRGw0bzZWMU50QjRWQnEwcmJCNUVZdG1LMkk0cThvMFZVcmFrQUU0UFBoTWhsWis1Tk5PS2RKamxyZk9iT2ZsQ0RPTWNRM3I1ZE1Lek5OOFNlZ2trMEpOejJqaVY3d0Rwc0dSN3VUVGxnMldCdzR3cGt0eUJ1ZzZINWVBRjl3ZHlQYS9lV3V0ZkRNRFYyS2F2amNocHg5Q3lOTWpVR3paWG9ETHJwOXAxMlJPcjFHcFk3ZWxwbGY1SzF6Zmo4dVNKM29hbjJGNUE3bHRpbWNQRUtoc0hhWXdrdDArVVQ2L2JUYTNPRzhPQ1JFS0pJaGlySzdwcXVxREtldWRMWlZuSy9LWEJINXFOQUgxMjcydktJQU44alI2S0FGQ0FHSGlrK1lTUml6T3RxM3AyM2VaWWh4cHJXZTRTMmNVMUh2OW83TW1HRytBbjl3NHZuY3VwU3ZsVU9zS3RtVzBPalc0MEpSOFp6VUR4d1lqYzUxVE5SL21JdEVVQ1UvbnVWbEVhdFhHbHdjVC9YNFMwd1hKem13Z0tuZzVJR01hUUFHNE1tWjdWTHk2Q2VqRDg1TW9mRi91U3kvV3hEdzl6M2VZOWlFZ2gxT2FmMnp6VVJFVEtNSlp1ZlRWR2E5bmVCMi9pemQ3cWtJQTdCSVpQdUdQMVlTTFhqVEcxWXg1WmdaZWgydzhFeTVNVXFqZE1EOUNlc3lDTWZ4LzVhQkprc0NqUjdHK3JYcU5DRGJyNjNpWXZYUmFlaFZYc3NOb3pRNmsrN2Q3ZzRvYnlwSjB6L1VIUGJGYXdBSkNwaW1pUnJPQTNVbXRQRkpCRDVubGdNQzdiUHRYQ0t3U2JxbXducWhwYll2QTN0S1N1bzYvVXdOcU9lKzgvNzJWaGtGYU1OQWI5bkZ0citKY3RIMndpZFpYZTFmaVFzYXFlMzlpL1NFK01hNGt5ZDFVSzlRWk5UZE93OW9ITTQyVlhJcUJUQysrd2hxeDJMWDdCN3Z1dHNBcDhmU1BjY2NHYis1QzVFYTRyZ0RQQytzVmllK2d3ekw2c1RMazUrUWhPN1h4V2VxbkxPRGlIZ01TMkpHT2ZIRzIxRzJjb1NWZ3V0WllhcTNMSE9vVmVNdFgwNzRNRUZoS2R2WHRMZW9ReXVHUXlsWGgrTHlwZUE0eEtmYUVjVGdkVnFtakdlL0ZIM2ovSWhaWkJqWXNCbjRYUE9aYzBMQW0xQnhFS0YxQUZBV0Fra3VjLzBSalMrUElKRUtQbHQzUk5XZ1Zad2ZGMmRzblBHeDU5MUtKby9qOGpSUkRON2ZmY0R2ZWZBQm45ZElwMUdPQkxhOGZrQnE4bHVCbnV5d1lhRzRrcUlMMll1M090cXdoZlQvaXV4d0JPMHlyV2thMmlhL2FVdnVVQk03VDBEd2d6Tm8rUjYxSGdxT0E1M3NjV3huU0RBZkUyWStGUWJod0dzZUJtSzZEMUF3K0haUmRpeUIrV1RHTWNCR0lBdDZIYTBRREVnN1hGUmhmclRVQW4xaDc5cWxXOGhQSi8wRnBEQU5IYllXSnR0R050bGpNWHMzM2RkSDhpVGlZb2E1MnI1OVpKbW82Skg2R0NvSE9RbmRweEZmcjFITzlIUzBEaUZlaFhyc3p4Z3VsN0VyRHExMzVzcmFGem96Ym5BZnlxa3h5S3VSNzhIRE1XbWszeHJVdDNwYm9YWUJ0akRkMW5qcnpadmJNejRQVTJhUEVaNkZJUHo1R1VyanArQmQydU9sMlRhNzJTMXlNZkdWUC9WaDVJbEdCTDg2WkRMTEZ4eFZmOW1vTUIvVE9SYjNFR2dNYThjeTVrOHIvSGVaRXkyLzlyaDU0dTZGQnoyVTd1OTRndGtQUFhnQjZwOXVrYlFwaWJ5S2M0SmtjN3RwRXJUZHpSSnUyaldhMUgzNm0zRHU4WHFRaTVnZ1VLeDM0K1Q5VUVxTm1jTTcrNVd2aXFDeENwSXNBOERDRHkwcEdsdGZGQ0t1Qk1ObHNKdUkwS2k3VmZac2dWa2RpbXIydTBhbU5SM0pIYXBJZmhjTVZUV1VlcmtYVEFmSFArRFNTRzIvQkdxUitJWnhZNE9SUnlPZGxBWitRRzZSS2taTVVDQ0pwZ0UySDJDdE9QNkpHVElYNHNzdDB5NHYwL0hTVWlMeDYyMkZ6aUhBSGNwVUpRdFV6SmZ6MEVXMjF1V2lIbHlLTmk4c2ZpeWZGU29EZSt4ZThCcTloa1pBRkVCcS9RQkJUalNMZVlkdzR5eGxmWWlxWm9VK2lZN1lQUmEwdWc3RkdReTA5SlBVZ1hpQldGZlN0WFQ0RGJYK0srQ2s4RG9WQ2Q1V1FTR0lUNHVSN2xpZnZRUW5GY3pDYU9odzMweHBmUGZJNVNSUHVUUCtYOVJMbUpFMGY5d1NBVVl3TE1JdlhxWmlxclBGTEErNU1PMnVCY3QxeHA0TkVFRFlUZExqemNmUFRzeHFvMGxyaUZCMlBNVmFQYzZRRFErWTBLdDlwV0NWS3BqejVGRlA5TENWUzVsTWVSc3hZQzBOYlFGYU44bmNlMEt5QWt2Vis2cFFvNW5sOVJwb3h6ZGNXUlJtN1pnNkFDYlNia0x1REwvRnZMb0QwYWVKL1dxSEtYR000MHd0ZjgxUi9BS0ZVdGxtMkNmellVZGVKT2hqQ0NSOGRFOUlMWnU0NktFQ0ZQWHNnRUVqY1UyUEdiSjQ3cGhHbWNZOXh2cDF2Z3pOYTZlc09PcHo5Nmhxc0Rua2FGV2lqYmswSWlGWWZEVzZNTENobEhRMS9kV2hoVkRJa1pXSzNjNnc0T2dReGhvcGY4T3Ryb0xoNFNqNXBYMXIvZUFEUVZHR3dmZWNtczl2YWs3VGhJZ2RhT2lOdk1SZUQ4QkF4Yjk1UDZ3TFBYL3FoaTQ0QXFWOTBRZmtNYm1UNTNadE1GeC9MV2E1NkhWQTZqNU9sSjVGMXdKVzRhaCtZdnVxRmNsOEpodnM4VGRmakVxMmxDc2dvWmlSZkdMaFAyUHJDWEFJRnZrNENWRHVTbWJhN3F0MU5oVkhGVDY4UXBTUFhGOXd3NUJod0Q2R3ZJWHpWK1dpczhybUtOL1ZaUkVLd0tWZ21qMXRKeks0MlorbG96WG1ZZVNQcVdmblVFeVFmSy92TGRadjlLK0ZsWnZ2OHd2VWNIS1ZPdEdzeTRocjgwdmVtS2grTUFvMFAvWFhRYVo0enRGdEZFRmI0Q0dQSVBsNklLUmRMdmVvTFFvY2tMenRlV1B6UGQwclVieFhsSlZTVUdSVmRRcEhaYjNDZjJ6OFJwTU5zSXUvOVFGTnZmdndTVHFqWjNhSGl5TXFDaFBxZmtseGFyQzA5ZDBDQUxBR1VwK1lKVHdPSXd0N2lXSXVjZ2pNSlVBWDNCWFRGR1BTQWdRVmlzdWZPeEUvNXBPNU5pSW9PVnR4RUlyNXZxelE5SndEZ3pNK2wvQlZ6MUplVDhocFQ1clJSalU1RDRvZ3cySXdiUlB2bE9pV3o3dDMrbEJEUXhrT2pIYlJqZVM1anp2OG1SQkp1Zjl5anBPR2d5UkxMa25mNCtrclBuRFB6QUNPKzJKSVlkUHZCVVZnY2lHajY0cUEwKy9PRENhZmRJUzlxM0JQNnFXNGU3RkdUMGtFZ0l2TTFrWWNFcTNETkRZdDFpYUVnZHlNUG9aeU1sb3o4cGZmejVXQWs3aHN5cE1iRkZod0IyQUlvUnIvaUtJSTBoVnJ2eWRhYXY3STNmRW8yTmV5ekNKRzFIZmI1T1g5VEUyb1FyN1c2NVR1TnBuNmdkVXZNU1BvaCtUNnFmKzY4Z2RMVXd1YkdtWVg2RWFncU96RmlYeEREMkNIMmJ0VWlUOERkdndwcTcxSHlmK2M3dkcvUUdzYyt4ZUNEY2owMDdWVjhTd2t6V0ZKdDdPcm1FVjJmTEVhdmppbXl2eEtjVC96YXM1Q2V0eVV3ZjdGL2ZDUEE3MS91UkhEYnh0SGljSXh6QUQvRmhkUGFNd3F2WHVvZXRDOUtrT1publAzT1lUalZTTmo4dGtodXpqcXJFTzJ0TlBnNlR3ZEdEaU1PZzBuWlN6Y1lMemFuWTl1VC9ncldsTzZ1MXh5ckJxWFBTZkR4akR2Q0d2amZhcG5lYW1KTlJjdVZqN0g1ejJoSUM3RG16dUw5OG9qSEEzeU45Y05hRXd5cUZPdUhhOWxYS3hJM2d1blRMdjM1NEJxcjZIblZYVisrMlJWb1M0UWdNWThtenhBdkNFai9hRWNtOUZBSzdNZjNTYmg3K1NpR0FhVDdPVFdiUG1uNCtLODltdktJN3RGK1RqbVEvTzNLM05mdjI2cmJBOThpSnI4WDlUQ25vM0VEb291allFTDNrc3JFYm41N1RabTd5T3dmbUpYUnV4akhuMmY2bE1tL3hKOHVmZU41VjBMQ3ZNZHhiNXZUUVZJUmdJSGNYbW0vZStaMjFHK3lWcDJtamJlY1ZtanJ5Um1zQnFjM05ZOGRvNWcwVU1DSERTY1dyZDRRa1ViQW9DRjRlL1lNMjJ1NUxKLzJhZnlJenMyOXhETVNBNGdkSVFQRFA3Y2l5YWU5bkVqOFJyVlRLQUVDcEtEdW9BbVBxZzNpWXhXai9PRVVRekZmNXA3aExoS2dLcVpTbmZUWjd5dTNnQ2JrMUVBclBQS2RqT096WnA0Y2xTYU9uSVBqbjEvOHNLV2lBS1pORVkyaUNhdlhmR3RETUFxd2NPMUJOenRTYU9wSWNYek1nTmhZRXdReUJSY3RiRE9GcS92SjlCUmk5a3dhUU9wamFjOUFGcUpnOTgxSDIwRGZXZGIyaCtnS2lZdVFKNmpKV0UyT1VVNmdnc0FRNTZMcVc3cFNFRXZZUEhhZTNXK2lyOGp1T1BkZEhlMWcydGx4WlB6MkRIUklTS1ZMZytlT05neHgzcklMNGdJbVhTanlHRXkrT0pRM2J4UFNzSVU5VFZPLzBpSWs4emtpZ1pJTW1DcjZwU05LMGJsYysydWNVMHkrVFZkSjRMVzJ5TCtJdDFBcHhlTnFOWGtFcnY4NGJFMFBEdTBxeXdMTVg3RVdHeko4M1pYWEczYUVRMk9nWW01ZCt0bTNJRHZKcmtYWlBJdndTOXE1aDhJVXZHZFpEYlZyTWFROURIK3gvR3FCWXdyWC9ha1dpOTV0Ym1QMXh4aE0zbEYyTkwvaG1YenlDanBqQ1cwbnB1Q0tUQ0E2U0MweTFIQU1rSnVWZGtXb3FXWGgvZmRvU2U3dmJWblFpUXZnV1h3RmkxL01jV0ZFU3FyVFNuUVRaRnZQZXo5S3FFeDB1VzF2ektiT3B3Vm1wRTFveG04RHBlQ0FCeHpnTzk3cmFUN1FmR3ZEamZHMlplSTMvYkt0eitIN2V0OUNhZ2ZJd0toc3UvMWNYSWpLbmNOSzYwb0pkSjROYS94bXJRV0VEMEtnU1Z3aU4zT0NubjdFV1JEWHMvSFVZSjhEMDBheTFBN1Y4VUZFZmlBY1N5Y2t0VHBmemRNQUNiWE5YeFpiWWtDbDlmZ21obmRVZ2FmdXhzVFp5RjV1cWlCVzNqVnlxb1VXbnZpR0ZSOG9uRGtmUUdua2JqWVYzRXQ0b2t0Rk9uK2JlcUttNXFKTGxjcG1ZK1BoSXk5cVBDWUt0dktxRXRpVG53RlZmNHJoNkErQjRBYldYaE1EMzhMMkdoRk5MSzFiVnRCZU9NMUhrTXBNdE5nV1d5RjhURWxka1FxZXZkblVHRWV5L0JxSVFsNWNNWmkyTFE3WGZXWU16M0NrdUpldDkwOWJCbVp0MTArRjZ6OGtOWG5jcXZBcDQvSS9pMkkyWDFBSC9YMG5yQnh0WkJ6aG9Gb1RnZHdKV1NRWi8xN2cvMTBIeU9JTmhvQUhOUzVIOFh0OUJYZmx3WDRqR3hYbUhtMDFEem5jcXFGeTJyNWcyNHQyajJZRHEzR3o3aDlxQVdKMWllNTRLcThaeHF3cnU4SFF6Z2VSWU51TXY2eUxxTnQvdGFPeE90NG9LMExrejZKRjBwbmF4R2JrUGFuVjlwQXdxbWE5b0ExVHBsUGtybW05VkwrYy9YRHF2cU5hUVZsUldtVnFwYnpreGhEeGlCbldiSmhENU4zSk54RldGR0JQcFhmRkpVVmo5SDdVUXlhc0tkS3M0THU4VmU3Tmt2NmxuVDBFWStwamJlY2VaOTlWa1NZKzhsZHRLdFRFYmxZazU3SlJhOFQwc2dmK0Z1YmEyZTJoWHFHQnJNaGllNy9hZzlzWmMwYUhveURxUDZwV0oyRmxuNkVnQkJ5VzdFQS9uei8zN09NZi9KWnRrQTRMdVViQ1BkaldRZ3ZjZ2l0cjJBY21NczcvYVA1L21rekx2WkJXTk0wcFR0UFh4d1dOclBMb1o1V0ttQUtYOFV3a0VQdVhkblNWTWwvT2NpM1hwVnhDN2dQbVhONFpHNEdBTkx5Y1o3aUcvVkJHd210OFdtOTFacVRaUC9zd3R3djNtK0FZak81UFRmMklsVmxwR2NiVHgvVnl6d3F6QUtJSUZneWJjeHdmR3A5MW85NmFMYmozSzlwN2tReDBJSEtoTyt1b3RHSzhwSnJDNzZQVjh2Vmh3eTRJaFpSYXZjMVZSZGM2UFF4Q2E3TllRMDMvKy9rQUJnYmQ2VXFEMnZzTlN5UDFvUWV6cXEzNFRsS1F3NlpmVFh2M0VqKzRCNmZRVlBSRDNydmFKVXlYVGtBME50bmVMSG0wbzlDbDlFR0JSZlVOTEgxWi9XMU9ZTjB4cnlINTNYNXphM0R6Z2NEdG9XNEdoUXJIVXU0SDZWL3haM29nQXJ5SnlmYmNtOFkyMzBXNmt4NldBejJwMUkzL0ZGVk14WllWYmNHUnpKZCtjV3c5TVNyVVJqMXZMZ2x6Y3JwaVFGV2ZSUWY2anBJRnFZem1jemkrblJldEI3UVVxSU51YXUwajg4K1F3bXN0NmpTUkUyZnJITlZGRWxubkRtai9mRDZBZmZnMGFzK2NQeGlzeU5GK3FzSW5MSkxhVldrSVBjUjFNRitieGdwdE9BdmJ0ckpMbitVbnhiTTZITS9Reno4VUtJN1BWKzdmMjlQWk1XL05HMk1DTzA2Ti9EWDBCbUp2alVOTFR6TmlUeWJKdHpCSm11TmRDcEdnYzBSVElmRkRlc2c5N1lWUjFkN1hXY0xLOWhjN0ZkcVI5dHVFZkJpb0hXY1JXTXVGVzlpd2UzL2JibHFlenZwZGx3K0FqeTRadStTZ2VrMEJpU1JzMnZ5R0FoYWhCZkdlYzdCK3ZaTVJzVVRaRnZHenlLTG9OaFdETkxmenNlWXF1R1hCbnJLeDhiSlpzMjFGanpVTDhqYm13MnNWSSs3YW9IYVZwK200WjhWaG5jYy94dnE3MGI2dXRIOXZyRmZ0N2F2ODNzZ3ZxMzI1ZnQ5TmI5dmJiZlY2ei8xdmRCMzI5blg4T2l6aHZxN29QMjljbDlYb0dYMWRnZS9WMUJmcTNUUERYY09taTlyRTkxVTVCaG9yRUN4ckRWWExnRlUyWDhFMkJrUGFSM2xrbFZMK2VNNnhna0tGZXRpV2poWEwxcW1kdHV2VHdSNlZXSmNacHRJK2ozakxWRytHTTZPSlc4SXZ3WUZIeFZsblJvQjVBbEF6Vjl2QktjdVY3THROZUJJajJSKzQ5bVJkTWNkT0d4Z3dGNlV1b3Z4TFIwQWtFcklYb2VXcVRFZDc5UTBIYWpnZzJmUVZlMXN1bTBuSFN6ZkJNa1hUQUd0K2R2eDlPSURodWQ4M2pIR2xsRklrQUt4NlBoTEoyYmt0R2JBdmZtVWtLc3pxVE5tMjNkSTgxVldOcEZBRmJ2c3RhbjZmbk9CTDJxanFpTXgwSjBONUJ1bW85aUs2SDEyT2ZhNHBBL3JhbTZRR3hnZUVNSkhrd24xdVpGeDJaUW50eS96aVZpaUxnVHdsMCtsdUN6QldtQnJmMnhZQXcrbStTN0gvaWUyK0JSVkhuQ3p4dUhvV1ZBUDkxMGRORnY3RmV6b0xML3dKWENMRGdWcFA2QnIwQldORGJIM2U4WHc3VVU5RzZaWmpHbzdwaDZDUGgxY3JmQUNnWXBmWlNoeVNkSTdSUzZScmpFSjdQVGxFTkNjVGE2aW01SGxZYjdYcS83QlBCcVNqQWFIaDMrdXB0YXFvVDFuajh4NkwzdW52OHhOUURmUzBTMTFibThaYjF1NTNMVko2WWNmU2xTWWRaL3JPbWZ1YXU0eHF1NEM4ZWZIaysvdk02YTZCYWJQd0dydjFMOWVhdnFhWWRjbndRcHMxT2NRUlpUazJrTENMQk9GeWtUWmlSV0pxa25qSHFGK0RxOG51aHZSaHdOa1NNSGNKSC9lMUp1aG1EZnBNMEZxVHBHc3dZMEVmRjFUR0RybEZ2aEhsK1AreHVwMHZqSUxnMno0Q3gxRGl6SU5WcTU5Tms2Nk5aM0R1V3ZmaFhrM1l2Q1czU0FKeFFTVUhOM1VwbzhuNmlRZ1dOWFpDRFFyd2FxMFVxWFdFT1NSRDVqNGoxL01SZ2ZtTFJvaFhxNlVyamJyM1hyWi9rMnZyZk5UY0sxU2VGR1pKaVhWZVlhcFVNdkorUXByNGFkcVg3Mm1ZcnE5d0NYT0lQTVRJb1RqK1phcUxwV2QxM0hZeStkclBxVE9xekYvNUU0VisvZldDSzgzQ3k0M2dxZXN0eUorNElqb2h1QWR0bUVObHN5dzNoSUhQQ1dHakVlRDZ5RG5sRkR6UVQzOFJlalRDWDN3UU9sbVVJUkNVbE4ya2JPSFBXV1hDTjhVeXJaM3FIUXFvRkhvTWZJY3lRajkvOFRreFhhL1FWV1RXMDRobXVMV1Erdzh4N2hnQXBHVkJYcXlUTG5QOEtYNGRYMVlVSXdObXYrT2U4QU5JMGFoWlowd2h1VTdlcy90K0xEdjJ1RXkzdzFQbVJxZkFaUy9yeXU1eWswd1o4ak1RWnhXNVcyZncxSTJqbkFSNFFEZUNGWW1zOVp5ZXVBakhVd3ROMFFHS1cvMDFMbGRjMFYzdmx4OEtFOERpbHdlQyt0bk8vbzJHemNHMWRVcGNYbWdtcVVXbTNIci9lblZtRUlibjR1OHhTSWdZa1NxL2V2M2dDSmhBVXpOeGZOQ1drV21BU0NJRFhldVhGMFhPK2JsR0w3UHNBaGg4c1FoU3VBNm15RGw2ZzdnNGFxRHlmWWdrTTdySkdqRk9LV1pCbDhYRTA4ZmlhcmRUUXlPZmdKamNaRzFoaGY3dVhQQVczT1ZuUmF2c0NyaWNMMUUyang0TTRHRzhoelZGR1JnVHRhNjg2RXFpMUMzMUFTNCswcWZtK1lKZ0s5YWVJeUpJNGR1emY1UFFmRW5nSlZsd0E0QlZSbnltWnZwOGVaWFRTUTl4eitOVDhkeVhVbGxsTXVYbWt6Z1FTVEhXeXpQTWFTNmI0NWtISTZjV2o3ZzZ3NlBMaFJPRTdqU0hTd1o3N2tnaHlUUUtJN2xxR3ZQMWpudlJWOEtwTEtFYUh3bmFQNlptZWFJQWZlSzFRQWkyU1hNSkV0R05ITmY3dDJSSGNlU2JZUUk2T0JDbnYvWmw0SWwraGNBMmhPQW5pSDBNVmdZREhqY0MxVzNlUGY5dnNJRC8wM1E2YWwzcmJxSFMwTUF6dzl1N00xOUtDbEFPanJtdlZQU1VoYXVKVUVVMFRldEpUTGFlaDZ0aVNzcVcvSXFiSll4Y25KZFk0V2ZYckxhYXh6SjgweEJsT3lGTXZJTFFEOTBSbXRIWEFoaVJxWXRxdElXZ3VHOGF0bHk0Z3RVYVMzemFhWVp6VmM5Q29USGwvUG5zRjFtMUFnUHBJTWQvVHhyam9kaVBXR3ZVUFkyMFlLbkFNakFtVW1zZHZld0IxTmVORk81bEJXRE9mQ3lYU0FOQkN6OTUycXk3a21KbGRKVVFrcEMvdjNHTVUzaHE4OHFETW1HWVdyUjlUUk53Q0FRd0pIQkp6V3E4THlDVFljM0RYUk51Z0JtZkUxbW9BMEt2MTdLOEYrZ2l1cHRSMlFtSGpnaHRFZjRkN1JXUnhCZHpYcHBTWGNza3VzbWV2OXc1OXl0MlR4akRXV1Q5ZG5PVlpJQWNRUkdwWjUybnJKNk16KzBJcW4rVnV0T1JlRU5IUVFJdmVyUENFeDNZa2puUjVLRFUwdEQxUExjUitncENhbE81R09GcXJqcUdNRmJGbTVEMFpIUlVNek8wYzRtdUtsbEtVOEhoYkl1TytkNThFQWlYT1FHQWQrNUYvSk42MGVUV3hvaDV5cVJ1eGk1NVlHVGc2cllQQzVKYjZiOEtZRlJwemJhcVY5LzVMYW5YUFBTRXR6V0F2dnB4bm9YdEs2TWdqeDRCWitYdXVNY2ZlMkp1K2lwU2g1Q3V5a0VYbWQ0WnJ2U0M0bGdIZ0hCZFkwZStxZFZUQnZKM01COFViVmFMS0xHamtIalVGZ21od1VWbWlZZW1ORkt3aXF3UnVCbVFJcDJoM0M0ZG9uOUJ1ZktteklyU2loMVNnTFlUTEZMUmd2Z0hNdkRyc2dvRU1SUTAyWjh6TzdteG45R0h6bm9GdWJUWkVHenVJVEZpL01qNWZ4MXEyeVU2VlZuVDAyaUZEZjRWdUVLbUc1M0RycDFFMnVKNVJYL2ZQbzdhUkdiKzdGbW1oT0VzTmc1RE1HVzJZZFNYK0VlS1BKTE1CRHRCaEZsRTZkZDRXTGpRWHNQSXU2Q05xemJ1L09hdmN6aDNBMUdoem9LL0tvN2Zlc2lwRFBjenpMRnNSdTUwbTJqVUlNZzY0MGJUTm9wWVJKblVXMXA2WG9RWkd0ckVJQjlyYk9BeVJxNXR1VVpYRC9iRkxkelAyMnBDRHBjMUFwN0grSWlpTTVFK2h5Q21nNCswUmVwa1FoV3Vsd1hRYTJVa1ljREtCNDNlTXpqcHZXQ2tERzFSUzFOZHZwUGRBcmRGS1pEbXdVam5YMExXMFY4R0RCUVdSRU1zMjFQOHduNDZaTHFiSVpUNVBaWDRscmo2ZXlHY0RZbHcrRGtWSzREZk1OTUdGSEtsQjRKSFZnUEVHNVcveTVBNUt4dGlldHl2MXRBaWU5cVpzVTFVZ0NrM0Q1dTNkbmhnd0JxdlhGQjQ0Qnc4YnR2K0hwS1hVMjA3MnAxRm16N2dQK0k4Wmw3SXBRZGZUM2g2UTkvaE0yUXdIZW5XeVdERk5EamNEcitUb2xmODVTOXdSc2lzWmVUS1pmakFlNTFzekhFbDhpOEF6WmJtZkh3Z3RyUVVyVmNvb2ZiODZTZkZtWERSMWxMeTZPV1JBck85bHErRTlKUVdURHNqZ0FZdnh2emVXTGlQRGdGVm5lNlg2SUp2VCtkMDBqYlJOaGpaTGVLcmJRTFZoa1M5SVJYUm8zTEYxOE1tV2JHZW9KOGJLa0c5SVNkOCtOd2lXUXJWR0JyVjlNNG9VVVdmTlFUaHE0Zm1xbU5mbWczS2hsdkhwSTdySUN2Mzk5VWJKSENMK2FMUUxSamlDOEZvZWsvcDRuZ0w3ZUZBRGtNV0gzbVgxbmhrcXlmWXZIelRacWZueElsbXNYS2dqSm4wRzVOUmNLQmRteW9taTlQaW5qM01XWHIxRkNYbkc4WWNYWWQ1aUlqK2pQSjZVVnNzUXkraG9ad2tVdFkwWCtzTnpoL1U5WGwzb3QyeVBZYVI4bUtUbDIzSmlTd1B0YVp5UnNoZnd5c1pXTGlXNWYwdkpZWjc1UWxpcGtFMHVTU2I5QmJ6Y0Q3T1B6Qi8zTDBaaW5CaFhnWnJEUFpPdmF4MjFOTG5wbytGd3p6WlZKVUh4dzRJN1kvSUZvNWg0MFVEVmp6djRSSCt2NmZvTDNTME5xYVc5SHNvc3E2MlkyTUlqV0w2dE56T3VuQWJpNkR0Q2R4V2daenBna2RFelFBQkFMeFB4T3VBazBVL0xKRGE5SjlDVW1MMU1IaWlQOGVjcmZ0SUs0TFJnTlR0b1pVQWpCK1BMeSthMmJ3eWQwWkQrNWJIYjVtRHNnajVMVE1CSFRHajkzczgrZFFNWS9nTU5Rc0dVb2ZYQnpXN3d3N05SdHRjNUJmUStlMzNqUmtIb3AvM0J5OUpJSks2VEl1MlVLbEFOcHIraTZQam9aQVdqRnk3UkxWOGQxQnR2V1JjNm16OUZuNXZELzAweGJrYm9LaGlHR2RnMm1JNXhJbWhEZHRucGZIdGZXWnQwKzd4Q3V1eURPNXBsdFM2MENvdnMrby9CTjJVWmlvQ250TWlmVmJMODlsZXBVaVgxdUgvTkVNZWwzdldWYlc2Y2krMEVqODl5Tjhrby8ySFk2ZzhFUTc3dVg5UnhwdWZmTlpjNDAwS09kVjBsaUgvUnVUbUNNTGlTZ09xL3l6VUxVM0xvUVZ1UmZJZ1hjL2x0elJHcDlhZ3JqMk14QVRJR2V3WXl5SXduVVFlWmtMVlZ2bGhZeU5KQWhNdUdwL1hMT2tycGFWSG1pVFBEYVdSd1ZOenFQOE16c2o0ZDl2OG8rUE1TUS9qSi9KWnRETVBqRGZmQlRMSlpFYXE4VHZJSDlxejJkbkxUU080ZmNVU3VISS9XNnNWVEpZUEhiV3Y1MlZzM2czSmJ1T3grcjlCRjBzNGpuTk8zMDgrLzFhL2NLejFwcFZkTHoyV2w5Njl5MkROS01GVHl1bGV6MWRmNXJFZFlOOSs0NkNBaGcvMkhrcTdaYzkvQ0NxaGNPUm43aVFwMk9zTUZWaCtBWWhTVU80TG14ckc3S2I1YkZZNGRyQVRQclNBQ3JmYURQK2d0dDVmRUZXV2dhRi9kNzNHemN3VDcxZHZkd3RvOWlrVlNCcjRwQlpWRy93YUNKZDQya3BOeVVoOFh0VncrYWZGNEwzb2tPT2pZQi9UL2Yvb1hIRmxKTTRsd2pUVk5ITUdmVHZaLytZQkd5M1d5VlFkWGZPZk1LODMvWXhoODdxVjNjMGNXVzV6d2d2aVZzYVh0Z2hNanQ2MGpzNXN6M3M1Wjlxb3Y4ekkvd0xxdDBNQnpIWUducmVEVUVXWHRGSGNCU09ZU1JJK1E3dUg0eUR4b3pDbW5kZ3hGQitlRkF5eHBsR1dVM1VMRTBKdGJ0ZGxZR3RxbWlSTHVQVEQrVHdRbzF3RE0xS2RIQmlXLzJyV05UenRVNE1CZnI4Rzl2SFE5MGR4aHhSbXErSjFnVGxwVmZoVEpXTHdHYU5FRCs5Wm1TY1FhZWRsVVdYSGgxbGIraUxmbFJReDBRbW1namZ2NWZ3Y1ZJVVA5UGlDd2NIejNYd1ZxZEZVT3I1K0xVaEFFWGgwKzVlTEJXNWJVK2VadWdQbGg2KytZNVlpZ0hzd0FpcGlJRDhuRXpDWkxzOHBOaTZkSWg3Q0JmQ3dEU0YwZTJIVHNIYTdaN2ZwM3krcVZMSUtoL2YwN0xTNE9VVzRRL1lvZlQwSVlodEFvQWU0b0x0Z1lpV1NUQy8xdVJDZXl4ejBCdlJKRG0wL2xJRnZScVVsR2d2QzBDd3JQWGl5QzdBbjFIMDZ6OU90MWhuUi9oQ0dYeEU4QnFCb0hnbWIyc1VtbmdWT2pBZ3Racks5VncrUDIzcVQwZ3VFclRwREdraEVDUXlhMGFJakdzOHZmL05PVzF0NUtSYWc4dm5TVHFJcWVBeHVNZFFDby9wQWhTZzNOenlJTXhQSHdIdFFJWHRPWHhqREkvck9hM25SWVFieTdObEhWcmtia2JZYzdGVUFnaFZmdTgycnlvNHV1OTdpUUI1VTFZaHdMRUlTTS9rb25vVzRNR3RyY1pTemRhU1U2dkszMFNmMktXM1ZaS3ZHMGsrd0FlZUNJNThSVG9VczRzNVhFMjZXRnltYzd4eU5DSGg4SVh5SEtOZStRNVozanYrUDFlZm1IM3ozTGZocHJoK096WXM2RjM2TTIxcjFJUHNQM01vRFBkWlFleVc2UmRLNnEvSkh6MkRUUTdBT09QaWxORjRVTmlEaHEvTUlaMFQ1RWZBTlBURHpVcmdoMGZMYncxclZLQlB0dzVOd3NJaHl4cC9jN0RMOUQzR1lnQW1YNkdmbXExWGtJcmxqb0dHV1BYTW53VGw2SGdjek56clhtR2lxQVRrWTRQRG9lTXFNeUJKME96VlNxc0VuL2VaQkpXRHNHaFNXOXA5SU1QUVdxNXZneEU5MkxjNENPUHp5aHMyV0N1TldLWk0yNmt4VFNYb2lOaWszYzVINVNnMkdHdlp0YmVpOHVBMnIrcjlLZWZDVWxXL0RUVHcvMi9iK1BtcVB0TFh1SHJZbWdxaEJTNmJraWEycnFNcVFTRXp1ekIwM3ZCMEs0VzY5QWFrRUhZdVBFdjhzSGtKZW04MFBrdzJUOHNCZGQzSWlOdlprbkwvd2JTUUdKek91QXNzZGI4TWRKRFBSVnhyMjVYVEx1TkNQbXIxbzJ4dFM5NnBWQUlhL21KZFhwdFRsbUZtYkRhVFlnVFRIU24ySUdDT0ZBd0d1YThrbVBoekpoOEZtMGQrVzVzc1hXdDhvNG16cVRiem5ubklWOElYd0YyNVlZMnFTVXV6VjA5Rm45UytZdFFUM21POWx6TVZVVXg4T1FhL25ub1pTNktGRjgranlQT0ZhRVlJd3lQL25JTk5hb2h2TThXM3lNSG05c3NjcDM2UzFPNWpSQ1NybjhpTUxHZEdmTnptY3N3R3lCeDZFRTF0Ym5zallDQ2oxSGg4bUd1ZnBDelJMNk43ak9EblQxUGhsTUhXUUVMQXVrZzZzRGNOMDk3ZU5WeEpjckVzb2pVK1NOMVkwY1djUXNYRUdrSWRNdlR6VGYxZGRiajBndG1rRGtwVlBXOUUzTDRDUGUrcEI2OEhmWktNNFI4dzZSMWNIdVpqSzVMUmZBbU1SZkh4RG9xbHFHM2w5eUxnTklMVlhwTE5LclZLaURLYzlLZTE3Q2ZyL09qcitmN0d6VmdJeVpTRnd5am1nQTA2dmlxK0ZCYXY5QXJNMnJtdWNjajRmQnZHazBieHJ5dW5OWndyd2ptRzVGQWJLdU15cEN2Uy9jeVYyci9MMXlKV1kxY3VFTzJYRGptaTFWVG5TM05IMDNDWVYyaDg0Y2Z3ZTF6UnpHK01CcjNLL3I0cjI4aWJtSUZOeGFXcXlaV0JsVDNVNEFFb3VJZG5PTFdUY2xKY2tCcDlWYWUrWXhic2NHbE9sZ2tRekxvQ3cwWnNhM2dHMmtNcWxONUNTT2ZWaGNRTjEzMGZ1QXhSMmhGek4vcXFyTHhMMXR5VExqN3UwRmFOendwYjdQOFdxM1RmRk1lZFJ2Q3JVL25iTTY0SVRBMXVKT0EwdUVBcURyQmM2VmJNOXVQZGxrckt6RzJDcTRERXRBNUhNR2hZcjdMNDlXV2Fvb1R1YTJEL1ZvL0xQK3l6cUZsVG02WXU4NEhKckNHSUEzVVVFMzc4bXFNYm91NVJMaExHQjJCMVNyZVI0STd6eFIxdm1lTEhkYmg5YkhMYWFsMjk2OFR5bGhsMDFEcnNaK3ZPYkNQUjJvK0NZdU45OEVyYmErdCtnN0pBdlhYVWl0bUFsb1BFRklWVTFmVVQ1S2J6MjNCRHlMUUlzZ0JXMzhhWDdKTXd1aW9raHZ5WnBBdEpUM1dyR1ZRR1B5Y1dwVnJubFM1aWNzVkk1ZThFcG55NEZsb2JBVS9jUG00aGEyQzFaNzJtd3hvbjU2d1Q0NnJHZk5EMjFWbTd2bkFFbllSY3hhTTVlNXVoZk5LdXltazhhRjFPalcyaDdqSUNXMlA1SjBWMFhhdVpnaWc4d1dqOVR0L1FXbUZ2RGpzU3RvZDhabzYxUVBzclFzRmtXYmRoOVViTnN5cEJWVGlwY1pqMnNLTnZnSzFLWnpUb3ZMaWFDUE9CL0R1c2EwR1UrRjA0ekZIQ1I1ZXk1cTBidjFIdjh3bmpxM0JSWnhjUVJybXZFTTlyMjl0Q3dxSUY3VUZ0QUlQVDJqMk1YZjRTTHBJc01jNG9vK2ZiM24vQitncFJxU1U2RkNGZ0hmWTJKMCszVlB4WDFZbXB2ZkhLL01aZk83RGNKNHVybHpEbHRaTUVkUU1KRkZweDM5R29EaSt1bHQ0eFZaYytrK1JVUWtCcDNqUW83eFNJUlhQWVFHRmJDNlVWVnpjb2MzRXBnZDhYaUpuYjR3NmplZmVZTEVyVi9mMFlCZVZURG1KNGFKNW5ZdVVNdFhSaGowN3F4K2RvWlhJNzVnSi9aUWx2UWtlS2F0ZFBvcXlOQzNXMm9kR0c4cUt4blIxbytEanlMU09yWVUvd0w1b0lQSS8yNkQ0WldjN2FLeVhSWFRSbUd4VThueXZzQUR2ZWlVWExzc0JqU0tGTHRRQlNOcW9WYmh4em5ScDBYRlJRRlNHTjZQRElwODZ0ZTBTcWphYm82YlJhUUJubUFLcGZleVYzOXR4V0Niam9QbVRDZUhyWUljZ0g0a1JrOVJ5SjVZZ29XWUt4Y0JYT0g4VFdLOTJFYkhYam1UckF2aEkrLzExQkVLRW1NSnlWMW9DQlBHQW1wUzVPN28xbWZod1dNUWxWOFFUMkNyTjQzVzBZU2VpTkxiSnZFVCtVUVZYc21SR3NlQnpqMkM0OFFyZFQrMGVGU1FXbERsTlR1bXZWRWhabUcyZHdMRjJjRkpWa3RDMk5UVWlrT0tIVWlIb3dBcEtTWjY5QlpUZmNramUyZm1oTm1xc0ZOeUM2cEJab3R5Z0pxYnUyVm5MNTU2MnhQRGY1bG1NZU9GbkY3Vk5SWWI0S1dFL0NteHVJYTJQYnE1QUIyQU1kbjNabFBXMHV3U2xLSUIzTXVZOE0rWXpPUUVRSTIyczZ1c2RIMDBubkpKVjJ0TFE5d21DazBTMVVlY1g1d0lUK3V2SldQL0VqUEdDVXZrWDMwUk9QOWgxU2pMRXRiSExxa1NCRmU4eWVUUmZTTEdnUDF4aVV0aGQ3cUxCMjgxU0FmdDRxOUhNRlBldTVTWEVtMkYrbVhnSmNrUUxUWGJkaWNpdnVPa3lBVVBaRjJYeTJJbzJzbVRBNnAzZGdES1dvTXN2VXMvY1hxa29CeHVISWhHZWpLZ1FaZnNPS0tHYXRqMVhoZ04wVXJkT293N0I5bXVsTFNzOUpiVk05TWxRK2lENXVlcE0yRGRINnRTb3BvZmFQOSt6TEEwOERGb25wTkMxazdzbmhBSy9HZURkUjl0aklaY010SEx1OU41NE5IdHFFSERxdmJqbHIydG52YU1XeHVXemt3Ukp6Vk5LQS9xbVdwWEhxd1ZueWtzbzBBdFdCRGMyYmkvdnNsRzZ0My9IT0w3VFdjbDU3T3o4VlBrd2hRRTNHOUVSTnlXSDl5TXBJQkdoWTJ6dktsczNhZEdyRHp0NU9pVWlxVk1yMXdRTnlQMFkvcVk3RmxWTUh2S0QzYk50elRyWWk4d01Qb1lUbUt4R0lNZGZUNzc3bHRFNDZyUWltaW1uSW5FS0w5OTNSaEowVjExY1l1RTl0M1pZb2tNQmRZU0QzczlxK01uS2VGR1N2WTNiczhtbjJ4eWdzdHVLWWc1ZTdhbnpOVUNKakN0RjdwZ2pzdXF5NTFGNWRXQ2VLUllaa1RSSHgzbS9xTkN0bW1iTmhaeW4yNHJXaW5OWVFWWm0vRHpsMEp5dlozVUhsMlBqUXljQjUzOGNsZTlQcHZ6Q2o0bXRaajVGZ2cwd2hTSXlOR003RkhxdXNJbWtlMFh2b3F2S1FVMHppMWNjVGhheEZ1MzBIVnR3Q0FhWXdzYmhhU1BUOU8yWmxUb1l1MDlsdFV3SE1NMm9hTEs4b2FMTXpXMzlrT0lPQ1Y1TU1venhrcEJ2ZVlScitBSDVmUEtNdG5JcEo1Z3crSWFqRzMvS0dDMWFnd24zc1Rlckx6OTQxWWVkSW9BNk5XRGhWdnpsRmtCbGR5UlhGNVc0bUtCTHVkNUs4U3ZCWkZhTGRyd3pmOWhrWFNFa0thOFdZbDRhYVIzZEVZNEFONG1LZElPMHh4NE9POTA3RTFpWGcyNFM4TzYwUEkrWk9PQTYxNDZGbG9YREVzd0tyTDdPMVZFQjM2TTFDSlVtdmVFUFNWUWJ5RWpwZkp4NVhYS09HR1pac0ZYZEpRMnZsVmxkc0tKV0FmaHpIeEJxeUNWRWYyQTBZNmFyd2NXVnZFZEZCblhTTTd3RE9PWE5LUVV1VStCN1RzZGV5VEh2bDZzMlJSNURvUFNQb2RMVDhZaFFvQUxKdldnWWZFOGd3b2JhdjJkcWN6bExrbTNVN0U0MkxyYVlHMXFUZDlOUU84K2NKa0k4bzVrSnRyUk9sWXNxcEJ5OWtLbXBGK3lyUlN6NFJGODBybmx1MURKd3JueTcvSUdjRFgrS3hySEdGMkthbXExbkt0ejBWcGVaNFVtWTk3RWtOWGtqaGI0OVBLQXJ4QjNHZGkyM2Q5Sy9zOXVibnB1L3BzdE41R3pGbkRKU0V0emhodldFVFRyRHY5eWc3enRxd3lHdm92Rzd0WXkrVnJURDJNVHgvQXFRNGEwUmZXdUJHczFSM1NvWm1ZcVNGblg5cnllRFRTdi9qNVROeDRLVXlnY2sreTBUVVNkVFZMOHQvc25KN0NvQTlORkJKa2tVdUZHdmtpY1AwQ0N2ZS9YaTQzNlhJTWcxV1JsKy9ZZG5yVW5TMi9CSzRmb1puYmRldGtHZm9YMHN6RFZoSHlIMXUxdGhkcW5FRDRQOFJGVk5FY3l1TzdmcHVDTStZbjdwUEVkVmI5SU9qZUM0TWN3RGJzUVJET2NmeGdjbkdwelZtcWRIc284UDUrbUlubkQzb2hRK3dFTmlCZUt4K1VlQ3c5Rld3MkxVTE9yU1FEN0ZGcW93blVNam9JZlNqT09kUkErRzZvdjVqM0NVNXFIRmVSQ3daWnNtVlVnMWJSMVIyUnoxTGkvSFNlYk44RTBSQ1ozaC9WZHh0RUQwb0VLMGZ6a1ROOHQzLzVMM3pQYU1KcXZJQlpEZStwZE11VjdLQm4zeXlFSkZHZ2tZTTl6eTdESVJ4LzYwSWR5UGsyWFNYR2FNMlFqS3Rla1R5UGlpTVM0SVV5LzZOQm9Md2lTM0FWOXE5eTl6NS8xWTFrSllEL3BGMHlES053SUFEcys1UFh2L0tEQXJpMFBOYWVIRjRmbnZlU0VJL1FZZ3N0OE81UVYzVkxmWVBBaUp1dEFlc0cxMTlIWTJlZ0RaTm5RU0NpcnprSkl4Uzd5SE9BNXdZR0F2eGpORHZuSEtKSHpPUDhhRVI3czhTTE0wSkNCcXJoWm9ZY2gzcnA4RC85eWc2MFdCY213M2tzZC9USHl1RHF5UlpKUEpzOG11djVoaXJyTTNZQjY3bVRJM1ZjWktDQitKQnBYYko5MHNpcFB6NHgveVpCUVRWWDlyQ01hSWdlYzczNW5zT0JnSFdHMlliZzNqRTNib1pHR1FtOWp0cnZJbzladTAxMFFyRDJQdkpPNmg2OGI4d3E5TXkwS2FKYTREUnRTNXZTUEJOQjBRZFZMN2JaQ2hXbFBiWUtzY0d4YjNUYUFjRGtoTzVsRzFXek80L2IwbmJZS1BPV2xXdkZQTlhmREhVRURqMHlNMlhJaXhYU25YZnBhb3JGYkNReXY0MVZKUm5CaUhrbUxmTG1MSGM3OU5wVFliRWNJOEd2dlFaRlJpdjcvTmtTa2hGTTUvakdQMzYrVUZpQ1N0NmVWVmpJVkd3alBkTXZRRndVOWc4SHJvRTZMZTl4VnAweGhKclpwemEvUC8ybFRqdFU3MDViNG1HL2NmSDNFWDVIamxaMkpTSC9lWW1Tak14V1BRR0w0cFRsK3N5YW5Yb3IwQlJUVUZZV1JnZ1BmaEhqQlpoSGNoQVBkMHVsWUlzdWtKdHFOL1JRc2VGUDRTN3BTKzAzUDNNY3k3Tm4yM3A2ZVhGRHIzbm50ejZTZzVDSzFRR1d4SjZXUThQYmswdXBLMEZRdDZzTUtEUEZneFVPcWxQZ2xiM2RSMjhzbmQ5ajVIdytKd2xDZkFmVFlwUlJtWDlxZUhEN3BEblA0cHJmTmVLQm1Xb1BEMzR4L2haTzZEa1JaMEpPemtRa2FKTGFVM2p1M0RPaVNvNWpTaU42SkZzRlNvejFzakhKN25GUVdsdngyemp5QUtFWTI4elJoOTE3bDlpUkErZ0RORlJDVC96b0hTMkdXUllOU2JYdlQzd0doZXFOSWVGZUlnTGVoQ05HL2lDZHdRNis5WHU1VTNicUpVTEFINklYcVVSYVFqWnRzYXAyS0JmY0V0YzM5Tml3NUtyakdpRlllME9GYi9wenlxZE9DdUNOTTFCS3V0OWUreDJFdHR5di9TZnFKOTl1NEZzL1dhaGhoWXZnR1U0MTBWMGxwd0pCaGE1SUFFT2lIMmkvMVYwOSsyQUVzVE15YlNaZEtEN09GcWpyMmQrWHNsemk0aU00U3pGbjFKQTlPc2YwRGhxamcycDVJem9HdTYwQzFQT09pQytmNVBZVDg0dCtWNVZvV0RWNzh2U3BLQnU1UmVaVVNHQmtLWGRqWW5pVUc4SHZYYk80OTRHY2ttOVVWSGk0Y3gzNHI3ZTg0UUhWWHg5VW14aTBKZ0dySjhDcXVQajYwWHJ6aGFDNHFQOFo5WWFGazNCblNjdTJHWE5wZFdmbTRaN0FBSFpEaTE5Y0s0T0srb01PaHBoejRmVkF4YlJWRjZEcUNKcTVjZUU3c2tqYkFORC9Vclg2V2YxeS94N2VWRHJFWnEydGhuOEI4VkdQS0ZIWkgyanJMN25va1hhYWRzeWtJMUNwb1JhL3pteW5rY0MreHVoYngwZjZGdjNIa1M1R2ord3VmUWQ1VUpEQlZDZ1I3eWR6WVlZVnY3MUpiWXlXdUVmNSs1Qm9CN1Rjbm9kL2Z6RG4rS2tBcGpHbkdjZ1liTjRNWURFRURkZXdtQTIvMHBoVE56cjZUWEh1aTdCaDFLUHhGcFFseG8vNTJ2QkxvRE44TFZsWENrTzN0NFkwcWc5T0R4L2k2YW5RcVdvOEZjWDhQeWpFOXV6amFleVI3TUI0bk04UmswMHlFMUt0dEovR0QzZWMvd29KeHkyRkZiSnc0TUF4cUdFSklPRzZTOGc2ZnlSVU15a3E2bGhUekZYY0FSUDhoZlp5eHVZWVpWR2NwQjFlRytXaGNhYllYK0FETk43anlJckhXV0o4ZXNBamxUOUFjZFJxRlFCbmgrYStoai9QQ3MxMDF0cTJUem41OHA5RXh0MHp6S25vV0RLMFhpZTMvZVpZYlNuVXNKWGwwdkZJUCtCdzJ3RUtkcVRHNndJTUU2ZDU5SWRWbUJxaStWVjlNOHgwTXRJZjVmMURzSGZYRFYrRmxROHJlaU5HVDR1T1FLcTJzS1BHUTJVY2hKekswMVpCdHQ5T1dCY3JmcEpaT1J5MVdRZFFGbE5leWMrbDA0TmlQVHpvYVVuYmp6OTRaVWhJcS9aUWNNeWNyNE1JRDU4eUVnRGNoMnVCNUcraVdoc2JKb3pCeVp1Mk5Na0ZaNGZWL25mTGtrVmwvWWNLUlBna2xiR3d6ekNTaFVRdEc5QUxFYTd4TFcvR0NtV0ZSK0J1cE8yQ0QycXpSU1NKb29HMkI5Vm5HU0J6d2swRDE3SFRuV2E3OW1wRlhGb0trZ1dqTmh0a0Jrbnl0eTU5V2ZBbEw2SlU3SzFBZFc0cDduMjZraVIyRFdFK2QxTytBaDRXOWs4QjZqT0VOWXR3eVoxbWhDaHNPT2pKSnhFMEJaYzRnY3JpSW1WZnNka3FsVm9sYzFLWEVXZFo2WDhBODBtRHJIZFZ4VkxTNEljaUFMRS96ejB4Y1IvakNFMEtWK1BJSFowYnZGSmlEbU9JZ1VTaWt1QXpkdnpKRGpiazhpNjRsb3kweWlINUFHYWJsbUVOTTZSSENEVFJqZFlCS0g2TmphOFREbWNyc0hQbXltYUx2d1VNdERhTEhMby8zMDdZTjRNRG1pSlhqWE1pSG9YaDB5NDJMSzNGUStkd1ZJS2hPcUFML2FDbU1zWFNXOTVMWHdIRXJYbWtwTk0zdm9ySy85QnZQZm0vWmp6T1ZOUUVNSmtPRXVSTmltSTlGNEhFZUtxVGMvT0M3b2VOS2l3ZTA5ZEwyc3JlTUtxSGMwRmNtbUEvbjJUL05nTUN6enhhaW9hbHRoWWdYZ203Q0FlYk43YllvN2tXTXo4WFg4TkZ0c0xES3Bjd0hwekk3TzhNZzFvcEJjYklQbzNhWkZBQkd4TVFITi9rcFVxTnY1WHYxcFdFS1ZtLzk4bGxpZlRTdFZ4MWFMSlFuN1lmM0ViQzljbmYyRHg2YkREb2xtN210V3JpZU0yNVBiVUhHNU5idDd0UkZJbnVKQVhWUVZHZlpmR1FmV3Nia3J0NnJ2UWhKOTZsTmVOMzQ2RTB0bkRuWGdWN1lneUZDc2h5VndOQzR1RnFWKzRUVVlWajcvMWtVamlNQndCTlB1NklWTGwvc282WDNMbkV4MGJnWWtNSW4rZE1YMnA5YTc1TEdTd0Y2cDJBQmMzbkUrOGZYb2Y4YWMydlFmOWRVOFhBMHNoT2J1aGhldmNIK3MrT2Y5eWVFQkxMaEduMVVtWXlxUXlBbGsyUEF4STdtWEdTSDFSM1BYS0VqbXRjVTJKRFM1ekFxRnBRZTlNemFtTnRSc2VRTkxJblZISnlFQUU4ak0zY010V3BzNWEydW9Ia1Z4a3BaUWVncDZvaFZjZ3ROWWxXTy9CaUszMUk1N3dta2N3U0xxbmk0QWJtWU0xREZqOWtsMDF1NWhBRWphdVZRNmhSNjlPSDJLRktxUVJFRXNlaWRzdmJhNjkrN0tyeEF6MFpPRzQ5ZW5zRVhZQ2xwRjlPSHBaNlRzUG1hejdPOVVPa0NYUXV0TEV1NUNUc21aYkNFWmRydnpTU0g3M29OQjdWa0xxcGcxMExuWGxzdis0WmlZUmZXNFc2MUJtQzRMbzU0N3dWQmF1bHoxaFB5ZjIwc1FuTkIveTdqZ1JWK0IzK09sd2U0QkV0VkZrNGtIalRUSm1zUlUxd3QyVHBBeDAvRU5Md3ZlSjF4bmZkSyt3eXF2c3BJUnp4V1RPd1hWNFRmQmtiU2J3K09PM0NPMFRXZStZM0ovdnJTTzF6TkFsZTBPdkRlNVZKUzIrUFdsRExYejIxNEVoSi93VU0vd0RqWFl5QkEzN1pES0pGWmVKYXFmTXJJclBiaUJyQ2RxQjltZ0lWR1FTb3M3bFhOWGRoKzNITURkMWxodW4xWGhrWWZkQVdRbnBMdnI3b2s4Z1loc2J3SE8wM2IxbkcxZXVzd1lqQWpCa2E3Zm9iQ0lRMy9VSXQ0ZkNuNkt3THpYbjJ1S3RSRGgyajlGSHpOeXFZMjhFa0dCbUxUc0JNVVRYREsrSFhNaG1UQjBodzFJRlc4SmlIV0FrUDZQM1o1Z2tMUkhvRFBqdTUrMDIvK1ArcDJRZ2tDUWFjc1o3SjlpYzZTaitkSVBNbFhjUDdYN1k5M0E1NWRvNndKOTFOSlpnZ1Z4alRFaldHdUpSdDgyaDZwMnlRY0cxSFpJa3d6aVRSU1lYMFpEbVNxcG1aeUpCeW1hbnQ0RTR3cnJCSUNBcVRpYUxSR2hNVnVmdmtBaEhRSmZadUtUTGtjbVV5NlJVYUVOZVRGQ2VsS0dHRTViRlpHT2IwSS9xTERoR0FNaVh2UGc1ZzR6UTZOTXhzaGExbFhnTHFpVGlRZCtIbVN6MENmb0JrWDAybGJoSzZxOTc3VmZ5QkxhN1ZCbFRyUk1xZVJocnlFZGNnQkZxNFFBZzdnWUpRNmdESTBnMERucHh2dmVSdXEwd3BwalpDTWw1d29PZk54QXV3SFBpMnlMNkxDeU9WZkZzTDhnVzJSZEdsdHdaR3E4Rzc0bTdWVExzNklySFhadjlWOG82USs4VHZIQXR1Z1lOdnhuT0NNbXRJSWNMTmZmNWdESHM5eHRsMHdkUTVvdTA5RzFicC9zMXBZak9YSGZ4WmVQemkyNDEwb3JwRnhaTGJsL2xuRGZoam10Qlg5UU82dWNWUkFoeWFWbGpRVU9jL2c1UjN0SGVTWGMrbVA4bDdaYTJyTUVuM1IxVS9UMHRkQ3RQYTlxWUJCUDZTTHY4SG1iYmlMR1ZNWUFia0xmcTllRVJNNWdYcWRXK0M2NkhxdnVreVJGdW5DQUg2TVpxY25mK1lwMWtON0xYSGx6QWppWk45cWN3K1AydkJlS3phc2hNRytyTGs1aGw4YUhKUmZoWDZ2ejhUVGNsK1VxK1l0WkNpZk9tRjA0YTl4VjNlRmY5b3AvbDJtbXRHWU5DWEdWSGd5MllNWWxjSi9QT2xkWWxwOXZNOVAraDhVR1hCelpwaFZhcTU4dURYWXNPWWFkRWtpcHF2ZWxxOUxZSnJ3dHJORGNHMjFidHVrL3pLNTNFV2IvV3Jrb0ZBYXJqbGxMZTBPdkhWM3Y2UWtQUGNsTEpPdXdZR01lQ2c1ckFzM1BjbzVQQzM2aHVuVG45MGVGOWhidnlKVE12dk1YYUFoL1E1d1poSE81clExdUdVell2Sk0zbHloTmRsQmsvZ2NNNitwT2RsVmpNZlgyTjVqaFNQZ2NqSDlJZTVJZjBpVUQzaHUzdHdveGdjemlWR2xrdGpTR2JFWERjTmNiK2x0SG1Sa1crY1lFQ3lOeXhIT0RQdHZTV2pBZG5laEtlMFRhZUpGbFFFREFJQ042WXBvQXNjcUZzN3RuOWM3elZTTDFuQXliQmpySkNHWDIxTFNIVDNsY1d3N2ZBRTVtdmg0dDJTTHdtWlZEbmhWK0cvSlQ0ZXZpL0RjL1hnb250eW84SUxaaFZvVThYeTVYZUJOVWRSMTVuZUMzdUd2cjQrbEluSFgxSkpzaytYdDJsdFNuZ1poS3U0Q2o4WkZpT1dJUUEvODVROFVQRnlQY0ZUUUcweFFXdGVZVzY3c1JXQ21UVm51dUxuVWZOa0NvMUc4OVBrRDZicVQ2N0QwOUU0VVVYMFZlZVBCVXVVRHBvMVFLZ1dRc3VidDZaSzVpNXhJdWNwVlZOS3hyOWpqMWJEcUNFZUVLUDIycmlIVjBPUXBNdVhJZFA4cDMrMkllUDl1NnNNNlBMaFlIL2VlS0tzZ010NzVqM2h3UllZWnA0dnh0ZDA1RDZXMVZwOHBtSFhVT25qQ3R2b240TVZEdUxUZmFRSVZVYkdaWHMyaDVuNmNNcmZyMU1yU0thVkFmU2VYNVhMb01idGY1ZStGayt3V1pEejcwOXpEL1RFemlENktSNTRjNldqcExFNmRucFlXS2NNTTlYNmtVSDFyUVRaWEc5UkhsRktndndxS0hQNmZhbWw4b1VjeTF1Y0JjRi85Zmt3ekdkTFRTWWZJUDl0UEJnci9TUW94SXlKOTRPYlhPMWhmVEVPMjFTdUdndmpKdVZ4SVRjNVI3SHpiU3Y0SklIeUQ3eXpBTjhTUU1pb1doL0xIVkl3VnRydWxOYis3S1lnYTF4MUhXRFJDQS84eksyZllXOFhRZkxBT29rUTBBS2xpWDZXL0ZkNXRJY0V4bFBKZk9wMnM5RWU3cTFXV2NnRlhNYmw3dkI2OEpiQlBNMjhwYm9paFB4S0hJTjI0NkRWTW11QWRKTHhpQ3I3WW1BVWtLdjZkbmRDRU5aSGs3UStKOWRvOWdrOFVzOWVWaFJQSk9NcytrNWVKeVNSS2dzY2FCRXp0TEI3NHNrZkVyeDBteFdWSlZGQ2hRemlnSjJPSzVIT2F6SE5DLzA3TkpYbDViYzRmMGpjdHBFakROUlVWdXd1YmtFQTM5ZDl0aGZLQ2hVZzF4MmNOdEdpWUFnRUZNcWJ4Yll0Z2ZxVElpOWlkQVJpR2ZpMTlZcWsyTmFyeGVObXdlSlFHaFFnU1IwZ3RqTEc5R0JBV3N6T2NaUWZtcFlkUHZZWGxXcm05aDR6TlQ0Z3ZXdEVMZ2RqUTlUK2dqSU8xRkRsYVNKaldERjVvdWFudm5HeU9JYUNLQkVGTmxLM2RwNEROU21Kb0Mrem1GTzI3RDNTWVdVQk1nRVNCZkRGS2xTSnFaRlVPWHVGSlFpaDdmRjl4Y0lZUmROcGNlSTBsUnpsSERhc3ZUMzdvZGJBTXNlaTJLZVVvVXNMZmhZY3FHZzR5SXNpRzBYVU55dThZTStZNkJWbTdadWtEdmhDb0pSSXd3ZXZEYUhpc2k4Q3FhYW54VTIxQWk2T09SWU52Qk5KYzNhOVJLSVgwOHRkSEEvSEdXdEg3aFJCTWtDNkY2dHBWZVc1ZTR1L0dDcHdaYmtVZkUzWmF1NzFuMUQ3L0VOMnVidkN2THJPZDA4S0RWTmJjSFlWTkw4MWFkaDZTbnpuMGYrbklreGNWRTUvTmtuYWZSUGxvdEwwUGtzL2c5Z08vRXFQTzA5YVZTd0UrYjJKN3RrMkFIZTRnRmVuVHY4aVhiaERKaWdub1FSODltdS85L1UrQ3NRZmZyMGsrMFhvWXBrK0JsWUVsU2Z3cWovQ0x0Q0d2cG0rY3l0L2JpcC9Wc1RoK1pEOFZGaU9CVE5TL0EwVGg5bzZ6aCtWd1pxQWRpM2FUdHZuNlRDMkhLWTNEeUlYNjlxeEp6NW9pMXlPZHdQUkgwTU1HYjlTMGRoZFJmNzBGTDN5d3lrTWhvY1U0Vi9vQ3lSZmsvMEpkTmxtTXdCWHc1T2Z0WjNLOGZabjFLR21ydlNockhxU3J0MngvUUdnQWw4Z2laQ2kwb0JyR05US1RITEZKUkhvWmpYY2tKdXlZTzhvQWhSbHhsWjlPOTlnNXZvRkhSQXVwT3RsY1hKWGI3dDByWDh1U1BSNHNEbmxXdnBwMGg3eEYrRDJROW14Um1HSTVCWW5EYWdEZ0g5MURtcnZnaXNPOTlPUFBBRitHZksrMnQxNFpHQ0dDYlRmQ3pDbVF2UU1Pa3BLaEliZVViWDNlTjlSR2IrcDNvYlBlTnJkQy9WSUVTd2lNUXB2OTlZSXpxdEhqTTZPM1Avc1BZUERNVWx1eHNPV2U5cXlXb1ErZHlQTzFFU1BYSW5QTi9xUDZuMG5TSDhBNmllVGJacGJFVWxvUnJ2ZDhsNHljU3hhYS9nN1BPVkwrTUFGU2RxcG5PdnB3Mmx6ZXZjU0VhbFJQWW11ekpIYkpCUnBNK1ZncWZkb3V2SzhxanVFVEI1MlpLY05pT3N1T2NuelBvU3hvMlFCRDVka3Jmb005WDBFbGlzWnF1MEg2V25sWnRqaEtVVlJRYXdLVEQrWlZ5L0RpSTV3ZjhNUnBSTGl5cGF1b1ViNStVSWg5THMyQW44YWh2M3VWdXoyVEhiamNpTTJCYVpoZzRyRFVIL244MGtIYVRqU3l0RXl4UHVHMkJXOHBGdW1uVCtuMFpqQmtEMjR6RjA1Umd2WDRCV0VqRTluQ3c2V0lGdXBxVWNSb2x6WEt0QnFNNHBDVnRDaDVkc3JZS2FZQ2h1R1hmNG5TUlA4ZDIvMWIwRm44QkIxMmZXWUl0Qm0vWTN2d1FaV3ZOS2hEb2dEeHlwbUxobVZ5SGgwdWZmb3ZkR2ErSHVYM2o1dy95NU5xMTFhbmVMcFUvTFJZcVNmVXo2NlczOGNOSEtVUFVzWW5vSUZ3SjdDQk9YeXdCNmoyYVVCVG9qUWVCK3VvSlA5NVNlakFhV011dUhWaFhNMjNxNmJWOXY4ZUsyay9MYU5QekpoM0FEa3JwS1ErVEhDRFo0akt5cm9HcEMwQVV0T0tXR1hjZVFaTy9jdG00TnRyK3B4b2NieGxVTENFOGhSdkNta2xRK2pWSUhyemNNYkVHSkQ0TlFsTGlqZERjVDB5ejNOc2NRMnkxWStacTJIbjI3RXJYTjQ3NVhjUkgva0l1MkpJcEpNOU1JQ3Fzc3BqZTE2V0ZONkc0dWswOFpoWUQrRHlaVXhmbktZUDZkVG91OFlsMTF3ZmptSm44MUJWeUQ4eXNWWTRkNHhVWjJ6TGozU3Jpb1ErTmh6Q0RyTkkxOUNyZVREYmZhOXRhRzRWZUVtcFp0ZWNwdnFnN21MRGV5WjNHdVNsdzR5dkNMTDEydXZzY21BV3h0S2lGMS9oaXh1WnVWeWJ2WXhZWUUzYy9QblZUczBma2p4dHpjRW00R0s5MVFaR3dxc1loT1FNbjVMUDJJbk9mbEtTdkVPR1dlVmdHVlYvQ3pITWRCaitZMjU0Qm1SYURuSWRhTmpCT2Q5cGg5UCtxV0hDTXo4L2Zvbk0wc3JpWGtRTS9jaGo1bnNPMDRScUVTSDg5MjFJZllzYXQxRlpIc3dwbVY4d2lqZ3dUYWI4U2FPOGVUUGtNaUsySVlmbXk0YkFmWTdzYnlQTE9KMWE3T1dmY0MrazhUdGszenpSRVd3a0psSmgva0xIL3hBbVB0Rk5WekdzVzdpMUFla1VUK2wrTFpjM2FiYTBUQmZsb0xDSVZpbVE2bjM0VWNkdGpBWFhhSWpPKzJtUExWd2Erc2RMOUJ1TE5NcUlNZFJjQXJQbFVBaTlwSytYZnIrYnM1WjFwWkpFdkdONXdjSVk0QlpNYzU4Ty9wVzBPVkc5UVhOb2pMR0ExUmVMZlN0WUlzOThpTCtBWlEwZ0Q5Yi9KbDhmMTIzbS9Nem9tbitxSjUxMTUzd3Z1anRQNzBEeFJmY3FObHBhWmdQQlVobjQxc0RpclFNSEYvOVZzZXUzQU9NWFRxQmpadVE2NzZFZmZydnBsNHIwelYva1dkSmdqOG1RSFpUNUN6amhaY24vREdKQ2t4YjRrQVFxVGRReGlTWnNGQ0tjaU5kdmxMbVVXbjlWQ0xscW1DMGZjb2ZVckhJWTE4bXBId2h3NkNUR2tjY3VPVEowVDBMRVNaMnFFSTEybnNRVVBHRGJuNmlKSTNqaCt4YnZ2aEZVZDNWY2l0b2NmTU5JT21ZdHAvQmNWVHBzM25HaFR1ZTZ0V0VReldOc0NBVkY0YitZN2dkc2R3TDdNNzM0T0dWTTZ1N1JlRTdXc3ZuM3NESkIxUU9XLzJ3ZWNjT2l2WDAyQi9mSmhkTThGS1RNV0I2TkJTbEJaN1RQekREcVZEUnFxT2VxUnZ4VWQ1NkRPQXJIM2lsWjFuLzJDYzV4eUJoWGJuTGNYREtnaSs0V2R4YmZ2ZWREYjVQaWlJMENmVU5VL0c2cFk2UC9Cc2N4VTVxelRsdGRsTDVpUWlJQ0JpTU90dlVVWksrSmg5MHBsa2lDNExLMldVbjA0TTRKZW93R1JCYWw4ZnRPVTROaVlObkpJRVlXbjJOQlhLRnhYMHplaUxHcnFsc0RBVlJQMFRZR2dENi9WR1FkU0pRSVRvUyt1bURLT3ZCNmRhaDFWSGR3blE1V2tralE3eER4YUJCV0EwcEU2bTNwQzdaTjlsaE53NVloRDd5blRWUEMxTVFlQTFXaHdXd2FJRXNHYW56TSt5bi9ZWDg1ME1YL1YxdTBFQ3l0MERQMTMrUm9iOXZZRnQwTytqUFNkaUVML0d5dGQ5Tnd3b05Tc0xJTDMvQnBnaHFwc29JaFl2RCtqckJwdnpHY2YrNGVTZTB2dWU5d3QwbEJLb3ZwSjFFOGRMc2czVUtWM0VrTENCVDVGZVlvQWNiRmlFYjFaSXdyTkxick5jT1NiaGQ1Nlk5NkJucFlpeFppb3BaSy9QOENKclNqNS9XbXE3TEttVENnODRWZTVEeHRXYlQwV1BZV1NmVVpZQ0MvTnBtZDMyNmJWUWo2bG1TRXNhZDdpQ3g2bk0vRjlqQ2VUeE8zTWtoWXRLWVpUeUtPVGZUNnVpNXhCRC9Pb1JHMkwrZ2JUVis5bVErRDErYjNSejNGTVA0S3JIamhrWENTVmRxdVZKUGNtSFRJaTA5R0RaL1kyem9TSWNJMUdlSTBiTkZNcUxNeGZOMXRESGZmT3RjdDN2TjlwT2V4L3pGNU0zLzk5WkRmMHhLNUxlSDdNQUlVWTVGK2g4U1htTjNib0RYL1h0bGI1MVlMSXY4bHh0WVdwaTVhYk1vZE9PTmdlcno3N1pvc2RkOUc2a3kwYktqbGdmUXVTRWlyb0M3NFVwNXF4ZVFjcGY0eURtRUY0ME51azIwUk1lWHMwOGtYUEJ2bWJ3cTRJTUhmb2czMFoyS0hLTklsUkdyVzVUdldCd3J4czdhYnBBdkpmbUY5T3k3cjdBYzlIemhZZHBBNkM0WlNGWmNGNWdoUTZEdDlrSGFaRmFvNUZhbk01Q1l6U1FjN3Azd1A4YUlvUzhGeUw0dXoxU1hxM0wwM2RONUZsakt1dnkwdVJHMjRVWENyYkVoZzBNc2plU3JZQ1VJeGtpM29LV25ZNU1XMW1mQjE1SWRFMTk3TExBbStyb3VHT2dYWHVJdkxWR1RrYm1XVXdSaXpYajNuZ2ZVeUxrakJyZVp5RUZrVXZEV2lMeWxlRzNhalg3ZFBla2hsZDhZOWxOeFpuTDN2RGx2blA0QWhhYXdIWFNvS0Q2MWNBdHptL0I3a21Rb1N4VVRhb1ZPeklDcndjdUxDMFNHcklMeFp4aVFSUE9uck5NQnN2NFl6djNTaEhEcWJXVVU2NWF4eGp5NEloYmtZb1lQOVNjUVJDL0ZicmNPSEhqaXBtSHhzU044RWNHbHdPeDRLcm9WQUVGK0lJRTladkRjeVFTeUkzVjNUaG0vUFRQcUFaTGNkbyt1cWc3bHlpZkRjampWU0ZaclMwVTFqdDZJd0FUSzB3eGhpZTdlQThTc3lEdWQzNzlVRFk0a0pjMU9lcjJVdkpuNk5lUGUxTmNZdFlYVzYvZ0ZhT3BhNUlCYVhLSGZZaDFZN0pJOFhQbDZXbFlhbnpTWHJPN3RTNUVtQWNNVDVUQkxkZmgwVjlzeFdONkt2QzNtUnV3UTBpSytDZER5ajQzWVFzbE01ZUZobDFXdTFjcGxteXhRVDh5c2JrNVl0NEV3SjU2d3FOQzR6V0loSDI5eGJYaFgvQThsRVdlNWh6MWxmVVNMZUQwa1NqbnFiTHUrSUR1Ujk2Z0plUWhPRytLUDgzdnI5MVBJM3lIWWN1TTZjaTVoaU1yQzR2KzF1elJKYndjdVR6eTJpQ0lkbGJseFhPTkVuY0drcnpiOTNhSjJsUWRaRTd1L1VVdjg2cTIvaHpGSzdYbndYeTVSUDkrTzgxZ1kyWUlqYmlMekd0aEU5aE5oUWloQm9DemhRTXNjMzJETXpXcHNjNW9tYVp4MENZUkhkVlV6V1k1STF1M0lQUjU3dVlJZ0RocDYvdDR5WGJyTDQxWEQxUkJyQ0xHMkM2VmM1endmQnExdEpyL01rMHM3enRLNGtpKzg5TnB3dXg3ZDNtMHBTK3BEY2x5dUV3czBZYitJQUY4Z2VjNk1pdTdGQlpTZUhzdmxIaFZQZ2ZkUFhiRVdYNHYzeVl5dE9JQlpEVE1CK1JSK09IeEVQbkpnMk5CV0U5Mk9XVENEeWhNbkw2L3F0WG1pWUNHU0kvZjNoZEwrNy9hcmxCdG9NblM2VWJOVXQ0ZXN5dEw0RWViY3Z6NnJveWd4M2J6S3A4dWs0VEIvYmM3ODNja21SeE5lR2czakNLVFoyR293WFNGNFFvWE96MGNpdjJYc3FrN3czcEp4VVBZZE5PME9BZGsxQXNqZW5zYWs0eDVXeFZ0VEFiYWRCWEtFWTVGNGxTV1g0a2tSZE5WLzNqNVI4aDlLUUlKS2EzU0hlUDhrbmlVdzBWUkk0blh2bXNyQkY0dWJjd2NkSU9hSXFlM1RJNkluajZqa1RzbHJIS0NJT2NTd01pTm1sV21XMFF3dmkwRXdZZS9kc1R1WE0rLzlwUGxMeXF4aXU2cVZqajdNUVJPS2JuY3pQVEZZWmF4aW1pelR2UTZQUjdwWjRWVHJOZXhQckVIcTRUV3ZHODZBak1vRE1vUVlVVkswNDFJMGk5WkhNM0pHZmpwODlqeFIzcW1abEkzb2pBZkNTc0d1WnI3WnZXd1kzQ00xcXpmaDlhTktFWElSMWRGSDlpNGpmMzdtc2dNUmJkbGI5OWErVzFLaTZ3RGxsT3RIRWt3dXU1Y2lBOVFIRkNpckMzTWduck4yRVorajZQKzRvaXNaTUgrQ00rTEY1ZytENjJxVXNmcEZTVVMrN0ZsbnFYMW5Bczd0SUZCZG1WYkxJTmwzb0tvZG00RE9jUDREek1ES3p1dU5qVDdrUDhKMkNUOEk0Mk1TVDdpQ243TnlyL211byt3Qk9pMG1VZmlFQ2d2RG1RQzVuOHA5Mk43bVJPY2gyWWJCMkEwckJ1djVmS2EycnpsbGtIQlQ3YXVxRWxQRjJPL1pwMFlNRXpzc1J3Z042YXU0VTU0SExnQnRYVDlqakhJYWxiaHZBbUZXNC9QaXh6ekVyQzR3eVJoU1VPTmJPTlEzUWN4Z2tyTWRaZDFuZ2lROExLQ3ZSUndNelNOd2N2L2I2YnNuc05MLytBOFpnSE1QbWJmdjNTUlZxL0Rmd3YvVFB1RUJqL1NhRVNWeGZNVVNJL1FhWWYvVGlBajBidFlLVGRZZG5NRFhMOVIzRk1RSjlFdnBWS2N0Q1BJWVY5YmJtbWRpckNOazhKS2VhV09UeFg3N1h5UXNXck55SGxYb3NRbUpvUVBPUXZvMEo1Z2VyTSs3QlRTZ24xU0NDOUdKZzdwNHloSUthMXV4RXZxOE1mQXBUbUhaNTlheXdrQ2lLeURYQ0JHeDJGZGdScGZ0ZkJSNG1NMy9ySXZ6anF0OWkwWmJKM3ozOXd0dEZ3Y1dpNnVoN2FZamZ6Wk9BVW1vZ3NNTGJOK1B6Y1hDVE1PUFNBcjU2ZDVobE9WcDhKc3IrUnc3WCtpL0lhNWV6bGZITkZjdytOdnRFTlFheVZPUitjbXhoUWNQbEFJUG5VRk9aZDN0UlljWkpCcWQ1SWF3NXBSQlI3bUZHdDIzVWNoeXlLOXRTc3paRExmWWUxQjExMitwQTdVWkMzYkcwM21Ma1c1Q0JER3JJWnZmeCtTZWgrVDgrcXZSQko0anVLanNTTDlPZE1TMFF2NkpUb01wSE1wVDV0QmpYMnBMc0ZiVU5WL3IxaXRSSmxMc2FWR3VKbHM1cDk4bE5hTjNMaERyeVVvTTMzQ2dEVVk5VVp1SG1QSHMzMTJ0ZElVVSt3R29ocmZXdEh3Qm1LaGgwaHJ1YXNFOGFrNkc4ZTRRMHpWM0xOYzBhSjgxdk1hRkU0cEwyeDJ5U1lNNHFBUWdFdUpyOE40NjZpRVdCcDZHYjFSckZQOGFRSWZwUUVIWUc4Vk5pRWpuOS9MMTg4TFpQODNEYzBkOFcrTUJsMmFIdkMrZTNMMm82eHdIU1ltM3QwZ0JzMWppSWJBN3JMUDVteHpSWktxZmt3MnlYMHZUVnBXT1Z5Zk5Tc0JaeU5aRStyTlMrTXpjVVpVQTlEOTNsOS9lU0R1VzNEc0J6b2laL0oreDZiTTFmR2FOcFYrSFZXdzR5WkJwdEhuZ2tLOXRVZGRxTk11NjFiWVB3cHM3cWtFMUZ2S0dGR3EvUFZVT2oxbGs3dzMvMi9BNVB5aENOMElKUGN5Z0FuVkNMZlZMd0NWUTk2RSs4SHI1Tmc5N1ZKaEdhTkhsVDRuZzZYQ2ZhaDRRTUJtNUgwWmpNQm5kMEdLL0M4WDlyNlVoaHpzUXFVS2pkVUpDb0t1L0cyOW1mNEJvSUowWFpCU2hucDdrR3FFSWRvaE9DalNETGJDc3VFSVlYZmxuK096dllhVTc4bldjV0krbHRxYW1uaWJxUHRUdHJzWjhTUFB2TThYV2hIcmdQQUxybTliQlRXN2Qvb0swbFI4K3Rnb1MvRHBzUTNHd3N1Y1l3Z0Q3ck5HY1RlUGpRczEranM0UHdadzFCTTJCUmlSbndlWThHYzdvV21NbWUyaENqRHlLVU8zelRDZjgrd1ZjUjloK2JyZzNudTIzaUxmWDduVGZjS2RrUDlvU0lWaU4xL2Jva2tyaVBoWktWS2dsQXpySEM1cXB1K05nb3dKdFkzTDRNazkwMExtU3ZCL0U2NXBOcGZ2a3VpTjZXTXk5MkxPMHVqcXVWalZJTEZxZjhpUU5ZUUZ5dC9UQk80eVZndGZtVkE5Tks3M2JJRHdkOU9GYXdHcGl0bmxSMWg4NjVpWW83NFk0bEZIU1RwM00xTWRFUFdkK3ZkUExIaXh0TVE0bDZQUWZaUXorMFdXU3MvT1FhVjU0UHk4dDNsdjRXMzQ3cjFocklsQ0FQWG4vRXJBc3VLRUNUR0JvS2tldjZnTk11dkh3WjI1aDNCcXdRc0hwUnROV2g2MzVPZW9uNWJUOGxuVHBxS2pBOE94Y2oyb1Q2NEpMdk1vTWJWQXo5d2dRV3kyU2UzYnFTcXhKVmFpWU1sbmVPYnhGeEhRaFRwbTJwY0xjMHJ0d3BKVHF1YncvUVJ1OW1XMGRMNjIyajk5enVxcFQ4aW5CRDZhTzFlQUtIb014ZzhhSkx0OFNuei9oNUxpYzJDeW1oTnZTL2NQSUdhWWhqK2xEcGJUSHl2RzFhTFZ5Z3RPMGRmSVMrSVh5bXJHbmhLMWU5bngrZHpRNG44T1RKeXlueGJiTi9DZkhaRklxZjlpbUJ6OFhuME96YjkxSU9TNVN6K0xjVGwxS0g5ZzFyY2xVWlR2djdtUE5rbm1zaGwrY0E5dWhwb0J2dFdMNUJmbVBqVFF6L1ZzZkZMSXlmdEEvYWlQemo0N2htU1JjWVlyb1BXQnlPTUZoK2crbXM4UEN0S2V4elBMTW80QTV5RUlpVjdEcEo0M2hWM0YwMVVabHRURjkyVEpoallPTHB6ZUxiWTRkVG1OanZoQzh0OVk1ZmFYWUZVeWJRVnZsVjhoNmVpR2dpUG5nazRSWVV2QkRreXVLdzZqU2ZnQTVPb01pS1FIaTI1QlNreUp6QlJEQ05FekE4OUxkVUNmQ01uT3gwemRaMEJ6L1hQSVZVR2orekYwZ1lKVklIdHZvS3p6dDhGU1BTMjJLaFdreHVmdm5vQzFzMndoK3RXak1hU2dpUmtOcWhveWlqNC9weCtTSkF3K3h6NVlQQjNjQ29XWU9CODVDb1NrcE9nUmZrRGgwREw5Rng3U09BanZJOUFSb0x5WEtWZUZJVEF2d3VOMTd0cVc3NjZZa2JxbUU0d2ZkOW9CTlJGaERYUEtyeG5Zb0ZUbWhWR1RvS05QOTRnaTBqNTlhNk1xRFBSYmpaVm00aDdDN24vcEk1T3l1MlN3bWZxdzMwS0xtb0o2U1EweVA3WHlhT0F1WEg5c3JLMThObDYrNkZvT2RZbU5ldkZNbFFJL1I3bW1ra0tBTDMzZUhRa3N0NWZaNzg4VU43SzI0UE5WeS8wYmNUNlFMOGNGWXNMdmJuTklmR2c4blVmVnlhcVFRbXJoNHQ0VGJxZ3RyOUk2VXdwZDZ0cE5UY0hpRHY4RmZEOWpzNzlTLzVQY3pmRDlUZitmMDAzeWRkdURmSjlTUytUMmUvbitrbGZKNnZQOC9xRi9QNkhlQkh2MjllL1d2Nzl2bnYxeC81Kzl2NSt5UXQxK3N2N1hXQVVEY3QzRGt6QWlnQzkza0JTUmlVN0hjeUswamRqOW8raGRUNUZ0UFkveVRRbFZ3dGZPcmgxTzBOcGVVQjR2RzVXcmdWSTdva2tuRStmMjdQM1RsZXAxYjBZMG1LeEZGQjdySTh4WXhVdGFtQkkyL3V5Y3hKZGljUnRob0VjSjYrRmtQMWltZ1EycUxuZUN6UDVMNkVXZUZ3RjRYeit4c3VBT3JmRjVZcUZRcVBFWlFobkpuZ2xqQUhwKy82UnBJS2g2MjlsdGhnRkpnMWdYVkhKZko1MUhsQXNMRnFpY0Z2VDB6L2ZEVHhiYzg5V2IvVkRJUFFFb2ZySTFESCtYYUdrZzkrKzBma1Q4S1lRUllTdDROaDlxMStqa2pZOGlhbzZldHRqK2Y2a2FJMHdPRUJpU3lxaVdYVURGdnpkcG8xUDBFeGVnZkhSaVpMMnpGUzhvY29uK280L3dqMFJ3RmVxTEprb3BtR3d3Sjhua0hWblZ3TTZFRC9idEhmcnRSZjBuWHB2OW9UZWoxTlpCRjY0amJ6aXF0VjlNNW52SXZrc0FuOVV1ZzJDaFN6a01uWE1zZ3VQZER0bDVCay91eG1sbVZjbllMa0ZYOGE1M0RFMmRtdkk2K05zUUloOE1BU3RpU05kNGI0VGRrZ25MdlFaakkrZ3IzQ2p2UGxVQ1ZCTlhaRDlmUXRVZmZ5ZFh2ek5sQWl1dURLNWc2QmxLR0VYS1E4MXltOHh1YkVJRm1DY2RiVDVKWmxWMWtySWFhRWNGb0wyL2pVckVrVEtJV2dMbnVEY1I3SWNzWWpiWGlOYnRLYnVUcC9Pc1NCR3ZMTDJTVFZNa3V5aTQ1OUt0MDlEOXdGQkRpMEFMRmRFWG1PMVVIVGRiRUhnV3pyNExHVUpXQkZZN1dEaHgybVREYUxSaEZoRkozTVJGditpT1hFWHg3dG1VNlFpRjVnODFTb2dkQlhOTnhZdlUrbTdReDFDeXlWRUZJQkxMY2h2ZHlVU1licnZMTTEyd3cvMHN3cGVGL21yY3F3RFh3ejFNS3BrU1NlMHRJVUhPd0lhc3R1b20zcUlydnZkenhTR1JkV05ONUxiNXZSTFMwSFVjOXhja05jOEhrSDZxMGpTcHMyOXg3Ylhub01ZSXdNeGFQVEswUGtSUkhwVFRjMFN0UGxVTjhiOXVQK0JMaWpnRGphV2xQSnFiR3hFazJDTmhSSEo3N25EeFo1cVpTQmJoZE9qa1pwTXRZRkcyWGMrZDA0NGZZSXd2VUcvRnAvS1VsQnkxSEZrWnlWbksyeHE0dVM5STBsVlNjR1g3OFAxbExYa1F6d0FpbHY5a0xlSFJjbFBCNDBnYWU1NVZnTm9JR09qTEo5SXdIN2I3emQ3MmpXK0tod2lEakNRVFN3bEdvSExtdnRzNEVoWjYwaDhEUXE5ZXZzeHRGclVrMXpLdFMySDA5OGVrVzJqTExJenRoM2dZU0JKa29hd2JYSndpRnpnL3ZJWlVybmN6bjl6RmN3dlEwS2JVVW9qMk1pN2JhSktJOVJiZitGSURNZTlrekFPelI1SzVkMEJxRVFyeGpTSkJwM0dYZk9YQVVhdWgxRTZBc1ZPOHdZdkhNRUpOeUNIaWRHK1FTL2FLQ0toRjlsNW9iV2I4YkF5QTRYK1NMSklmcG9GQ1RlbDBZc0E0N1FvUXZLcTVKUzQzdk9WVndIaUhQOStMSmlSNW9GQzFNQ3FzTWpVWUp2Y1l1Ti9PdERtaFZ6c01FN2JmNTBGNU9jR3hmQUt4T0RCUnA3cUJSNFduSnU2bFc2NWtJOG85Tm1pc1N3RXphYWJQUW1zVlVzTGhZUWk1YkdxdmlwMjhmY0JVOGRtVG1BQUNaaCtnL2IyMlFCK2dRYjRxMzJYNGJ2OWVFait6MDZmSW9sSVlJM2k2eDRUOWpmTHhidUMvaXhNc1E5eCt0WDAzOTFwMVVxWC9tZVZadVNWZHNSOEdSMXIrcTh4dENYcWJBbzd3RzZNSmliMTdWVHBOMmgweThBUFNoNnRISWhOWjFvSHB0elVhMXdJb3U4RzRnUDRETkpTVStOL3kzaEc1bGpNWEdtOTVxKzF1cTVQRnRRRlBEQUpHNklVb21TM1ZYV1EveTJydzQ3cFNNZjVxOHBibHcrNTNZOVA1MjE2OVlMNGpoYjRXUmN6Q2o3T0E4MGVpUkFQZTFIUnU0YUlsRnYyaHdJWGNIcit4RW5WdVd0U3pXM0ZiM1RXSWcvc2FIaEhLcWtmaEpObForWm04VmE5MUpFdlhQQVBpMlpvVjdPc2VZTGRTT1hPRlJSL3BqNm9RUnF3ZWhBdno5REdoNUxCbnNwVkEvWkNmYXJkQkttOStIYmpEamJ3akhVYVZpRW56V2RwLzloOC9PVGJab3VSTFVaa1JMVTV3MGZwUnM0anM0WTNPZTEzR3hPM2dhSFNYZ1pQZllER3VUL1hmZ1RKclp5bWYxWWVKZzdVeDdFR3VGRmt4RFhiYW1vUFREd1Rmc1NPaWZ5U2lDcVNmZmpza0dBQjBDMnhqeTh5M05ZamdEK1dPSXJTRjBlakdCV3RZKy9mOHFqcHV3WnRlb2VtaG91OWtmU0QvVGdWMzNnNnVjamRGT294MGNMc1lqbDFJQitJZmlsYVgwaGFYNTJGb0d4SnZpR2tEcEtHWUxSQlVlYVNqOWxDSGpXTmZXRUdvTEhXMC9mVzVvTTR2aXh4YjAwczRVMTZ6cmpJZDhoM3dWNXZ3R0MxMFQ1UTVONTU1V2xVdHZVMWNLM210NXorTCt2OXROMko2YXpBRzlBQUJzNUpveVFjWWJwM01KVDhDcVRxV3JzOTlpS0hwZmQwR25hUm1qTEFBWWF5eXVCeXpKWjNDck9ZSG1HN0tIWXhvQ0tCRHZ1dGlvM0hMVzdTTWcyZ1loeTdaTERLSXpONVVwak1jbGROUExBSW1NOEtkcFlRR1ZKdkROd1E0Y3dGTkJ4SDluS0d2aXp4WjRMNy9ON3dNbjF3TllPV2NaQ3dGZlBONkhGWW9QYUxNd05vOG81UVhJdFZ2TWtIRkwxNmh4TU9yZGhLSXQ3VFhGYVhoNFdjajhPeUxobllTcnQvUUJ5RXZQRFc1R3M4QzhwMUlDUmtBSzdVU0twUFgyeERzWTczWlVWY3ZQVTBadDM1QVNmS3Y5TWpiYlZsOUZ2aWFTMCtnWEY1MG5pMVVpWXpwejY1WXhWUkRGUndJTGdkVmRjMTNlSVhQdGo3UzNOOFEyekJmMTZoQ1d5eHRYYVZLRXg5eUJWUEdvVVVZSkc5RVlKcWpmVlE5alltcUsvMkNWaUhkSXgyOXh2WEEweXh0aVg4NjZmUEFPNldxdVZneHlFcEIwTXFwMVFHZVkyK25WaTcxazFjZUs4WWpNcmVCSEVXdXhtM2xDOUU1cUowUWVFL2NVdGFjMkw2RUZSem5QZ3VreXQrK1BRc1RJdVVudUpZSGVPbVZ6YnFTY1IvTGMySjZKYkpNOXJmcjFJMVVFVzJVbzcyMzRueFNnNVRVTFNqYS9od2RNZW4xcjNOVWE1Q3IrZWtxSVRCS0ZoZDg0bFZQTjlnVm1uREtoYkVFQ2N6YXRJSWtqdmRmTCs3TzM4UDM3aGZ4TUNOeGcvSC9JajNHVHUrcy9yZ2F2eUtSRU1XNVRnaGlvNW5xNjlkWGZNTEorc3dUUnZSMkdpM1p2amh4V0VqSE5jR3BWeW8wdlh3Sy9iT3E0cVhzOW8rR0lrT0lLT2FKZjQxWXRzMTQ5SDZmU0JsWGZmSDFjOG9mRTJCZW92VmRyVnhZdlhHMFM1U2xmc3djK0FNMWNteXBnQVRPNWhiSWpkREl6czhRK0dJc29CRFpIZ1pwc2QyV2xGSVRKWjRCNXB5dEJIWEFieG4raFQ1TE9hSnk0M0ltU2RLWldvZU5ObUJGRmdqR2JWL0Z2UEpuV3ZWVDdreUtxYmZyd3lzaVVVbTFLRyt5cWJXeEl0K2cxWGVEaWRaOTdCdzhjNmhjSkFudHQxYnJnVkxSbnEyekhpWXM2QlJ5VWlybDFuWWhPZStHbVduUlhHbERGQlFzWlhzSllyT0w2c0NWdDNRbmJSbHhsSkFFRWlSbFRNWHVWUkg2cXJ6ZnQ5R3c5ZWFLd2lXRkF3dDR2U1E4Y2RRbUh6azhFY3dPMHl6NnlQckMrSlc3dkhOSkxqZU5pb3llNjcwMEJjMThDR1B4MGNvQWRXWFMreEo0Z05WamhlanNtQWNGR3FlMnZwRmVOcGZWUlRDVG5FUTlLMisyZ042bG1IUENmWWpOSHM0bHJkMHA5WkxwMHFFTTY4VmlNY1dvVC9TejJkVFQyNU9iSGViNVpqNW9MZWRVakdOWkI1QzlpM2FMVVlOZXNFMFdFenhYUWRUaU95REVsdjU2TnV6ZXVYcUJhV0V4YXpSQUx0c01NWU0wRTZMWWwxMjA3dG5HM1VOTDZIekQzdUR2RE1ncnExM1ZBSG1OWXlTVDZSdEo2dURYMm9mMmlvR0JMUHBrK3J5a21iY3pCVHpoSHpzeklpMVg2Q2dvWTVlOFFtMVdaWVJpOEdNcTIzQU50U2V4WGk2bXhGSUNnbk8zLzBwZHFkMlFXa3hFNHdoeVR4RUtuQ2h2OXRvRkFWT2xyY0o2NTBHWmZrSm1mVGtJSnpnQzFFcXZueFNiMnNRUXFvR0MrSGsrRk9vZEhnU2pCQ0JXS0hHeUc0NzZJdlE1M2xBVStJS0REaEUzaXdFNkNGUCtyQ2pVbU91cEh5eW40WTJmREJtMmV4dW1CVkJoUmlNMy9RQ1dqTkU4YjFoMFBYckRnczJCNFg3Qno4ODVuVTFpUlhXVURKZ0RtdjB6QTN0YTRsSUcyQlQ0cEp6M1o4K0lOYXdiNmpzYURjVFZLN3FZRlFLeDduZmd2MEFOQUY0d1BsYnltZGVXWENsRkNkRnM5ajlEOGVkdTJyYUVBc2RuckxZaUZOWnBqWVJEVWFhUFhndXRsQXFrUkZOa1lYbzd3bCs1dFRRQ1ZON0EwT08xZzBBa3o2WjV0M1BUcHNGVHFQUUJJNFNENm90OUdCdGRRdmdyZlNVNmdvSEFaMG90R1Nmbk9sYWlUVTA5dzY5WHlBUzI1bmxuTDN6SElib3hyZWFVcEIvR0EyeDJsVEJVRThzb0tNZVlMc085cFRCVzhPL1BBbUFYV2VZd2hOSWxabitRbWhaY2w5M1dLTHZWMEtkb1M2UHJBeE9JT2VjUzFVQlgzK25zWEYwVHZuOTFpSzVjSk1udno2UGFJVUFLbitiazJ6TC91TW1ibnRNOFpGNGFweXlnWHBPY1ZhUEltVjZkK2ZzQ2lvZzd2eUppU0JwODduNzFRcTVuMFhseWtnSlBqSFZXYTRUeHBnRWovbUs3TFFJZm1ORnQ1a2JMOTYvWG1TYTIzOHFNSkYrR3BwSHdlYmJBd3lNZGJHVUptZStKQWlUNGZ2cWw1L0NlSjZTVXIycG5ZWE9EMmxIYjJCcUVvbVhCQUVHZ2tuK3hOVEs1eXE0KzRTWUw4cndLditDS1FjMlRHbXN1aHVzRWlpaThKRlg3akFJVy9wTmtreDNqZlVNdUpDNTQ4L25tSjN1NmxkbnhDN0xML05sZVJhSDBFV3NTcHZtWGdNcWtUa2xIbUxYamYrQ2VKMTlOZDhqUnp3V2srcWQ0cDNZak1BazV6ZG9HNkUxMFBzTmMvUDNrYUV5UVdCSzNYekFvRXdQME5ia0wvWTJHUHMzSko3WFcxYmdtdlhnbnExR3crMEIwTDlWWnJWUFhWZDk1UElTb2d5Ull3b2ZRcmNLeHdyZzdLaUZhbjUzRDhQMDZ1emg1a01RSUlkNWdYRnRPWFh0cWJ0Y3p6WUxLSXJSbE1qdW9sUEhnOS9ac1AwdkNBcVdNMGo0bS9TUFpXRW9jNzM4YUE2UlZDZTVRL29QcWtKZ0dJRE9IVllhT2FZV3IwSFlJWEZPdmI3NC96M3ZuVm5TNWJIY0QwRWx6Z0JYL0hmcTg0TmZmWkdtd1ByMGk5b1d3T3E0MCthd2RvZjNFckFoQzFaUFI3bVlYdFM0S2IrRWYyajkvRG1iZGlidTdwVjNTaEkvaDdHQWlRMXp0M3l2cDVVS25tM1lJalRkUHJIMDVoRExRSjl3RER1WmlGWWRQOXFBOGthT1RUeisxWERNZHR5RDJkTWVCTkFYZk0vSWJyV05wUExKaXFDZVZaa3MzYmQweDk3Rlp3eTd1SFRTY241UlRKeGtLaEpsbkVGTC9oUFNHRWtUZU0xVUhnWU56VGpjcXVWRmtLcmZMS1JwMEpERTc4ODJjL1MwWERDSmo3SWR3SkJGWk1uc0JudW9EOHdobi96M25qaXJaUGxuYXBpTmFSWWpOa25xSFNLdFJQOVU5Z0gyLzhjNVptUjI3eXkvWW11c3FuMGpMbVgxOUdsTkJSTHlLOG9BWkRlejRiNEhrbStGSE05b0R5UTFqTExKOFgwd2xoZEVaQnZQQ09ab2RxK29jWExEelpQR0dxUzl3VnJzcEo4NjBPcHM4aUJaOXZyTnJkeUg0ZEpZUUdNeVplaFkrdzFIQVM2c2xWZUd2QWFDQWwrZ2xqWjV2Sk81WEpsMnZoQ0h0UjNoMHdhWisySmJCTVJJakQzdUZ6eVhzRmg3S29PNGZiN2MxK2tKbVZkRFcvNTRPclhvQlJLZFRVY2piSm1JYnFyRHBvSm85aGFxQnRuWVZscWRrQkxhd2FoU3EwSGlNZEhtWkc3RDI1OW9FTUdxWjJhQlRoQkVRTEJCdDBROFk1c2hWaTZtMjdDYkk4V3h1eWhVMVVYVkFBSVkxMHFMSFJEYXZUNWJpdDdPVzNtVTBSQXZEN1FvL2EzNWVKV0NOV1VPR0ZxV2U2OEZ3eWkwRlUvMDEwRzkxdHh2QUtYTCtmMTc2RFNvV25IQnRQVmNYZ0N2ZnNLY2ZENFVaQ0tmYi9CT0lzYjlIRU5pZTNhMGwyZWIvMWxNL2JaeG15SXp1eHJLUklwK1ZmWTF6enY1OHFBNG5hdWtUSjEraG5kS2YwRkMzNDNVa3FmR0pBblExQ0Q2TmxSaVIwSGFzNjBMNzhMVmNZMDcyRXM3S09zT1lvbTlRL1NOblBEeU5hVzl5Z1BJbzhIQWNrL0hicjJtdXVycGJlTE9Sc0NwSmIvWDhoNkJsdWdPODdVY3AveUFmd2FieFFaRUtYbERuK2J5VnFXNWQ3MWpoWlpnSWRCRldrd1RlWjd2T2dJblVUZ3lGS1NKZ0IrdjRUQlpjZlBmVTYxNXVmektHQmMwOFBGa1psZTh4UDBOU1MvWFBIa0g3cm5iY0pNNXp1UTRvSjhHbDBoa2Q3ODZPZ2RTSEhmZ0tnQzE5WGFsV0RrOWhwUkc3M0xsSHdNUXJzcDNXZUo0bjV2TExCZ3dQajQ4TFdPdHVPRFUrY0d4ZUFhcG1QRlgzREFGUVQyam5taWY3eFVSRmZuUSt5akZoc3RmL1VTeTIySjlzcEhKRklZSFB5Tm5NaURyV3gvcWFvMDFDaWdFL01ORXVVY2loMUh0TU9UK0IxWVN4UjBWNnBDdDB1bG1VanZtMnpQYllHNWlNa3N5dzVVZHQyZjN0a1hVVStoczNHbG9GNDJHSTJvSXZ2aEZjNWdHVkNsMkJtSW1Cb2ZEZzlCZCt6QVE2b2J5ZnlOVldZQnRQNlJjajBjQzgzQ2VlaEoyMkRZdmIyWTFiQ2R3cXh0Y3VQSXVMR0NXdXozT24xZnZwQW9hZ0V1Nm5abDkwd2g2S3Z2bEhhUHdIMmxPSk1RaGF3cGN6cXFJUnRobkVkdC95OGxYRTVwVThWZkE3aGJqY3dudTNPNVlZSEpqNWFmS09wRnJ2d2NCNVNHSzk2ZXNkL1pMNG5lTnlUSHhkUGFBWHRBTkw5L0lKSmFVZjlsMW9KK1YrampoWERObE1PbCtOaFQ2QkVLRkRMWnM1MFRYcEJCN0Qwajl3bFhkRDdlcmVWdDlTYk5GK2MxdlFGMXBCbWg5Nzl6YXl2NmZZajVIM1NZbk9FcGNqQ2cwS3JRMTlSRVBKdjV6Nml3ajZpUVp2VUJNSWlIREJyV2lhaWRmeTJ4R0xrVmppZTc0cmZDVHFrVFBndkY1eFh2L2tuT0pCNTlSNjRCcE9UTHpJcUFlM1c3SmNVRjlkNWdVUjlTZHNsQUozcmRYUVdIQTJIS1NwK0xjay9sM3Y1SUJ4bHVoenRuSVhjLzdFaGp1elp4RHh2TEpBVVU5WUtNVEFLcHBNaVdWZFhEWnhCbkxKK294dCt6bC9HR0ZDS1NQbjZuSDVML1dzQ2d4RmhvTzY4YkJJRXlzOVI4Z2pOeDR2Tmk3S2lVaHc5cHphakQvVGxqcGVHa0g2NWs2eW9YbFhYRG9xcDdUaUFJSnpTKzFUc0R5ZEpINk5WbkJvYUpreWV6Wm9YQkhPT2hSSUZCcW5tdFJ6R1hlZjdmL2NFRDFES3gwUnhUbHE4YlA4cEgvMW5lclV1ZWd4SVYyRyt3Y0dvOXhjU0R6MGE3VXhKamxoaW9NTVVVR3JXb2RORXRKTThsbXpEcmIzS1F2OWdRUXpMVzdKcTRZU0IzRXE4emxNNWMxVk9yaEVuOGJ5ZTNzQ084eERSalNIYWVPeWFvMThoVFA4YUN0ZGVQVmNsaTdacEM0NUxLa3pubGUvQU1jbmpGdW1KRXRFTHUzZk5vRTZyRXB5aXp2TVBsOW1PUTNtNDQyVG13ZWtVbGplS1M1UGNUazYrMWpzb3lCWHNNVUp0YUZjTmttWmhPMDNwU1FiSDUyYTNnQUt6ZFBLQzNpN0tpYkRsTGZITllkaXM1R0VxcWFzRGlleENDUFRLZFh5Q2hmeFptbkI0dkZvalB3bGJmNzYrYnJleFpDcTlFTXdJMXB6YmJRclhRbWQ3cG9JQXBWejZ2cVhEQVEvcjhlQ3FsNVBBTkxZdGpUMHBsSi83Y3pZeG4zT3J1S2s1OEJGbGN4cVVtdElTM0RQbHdxWWNpVDVTU25uTU5KMXMvTUlHeGRESlFwZjlWV2RGNGFzQWV3Qzh3WkNDYzBMTUVRZVQ2a0FybEl2dWZ6R0tOdnBpbFNEWERZemhyQ3JCT25USVJpY2dzT0dtV2Z3SXVCczNNWGFRSGdaZEdsWWJBTWJNKzVSK20vZjB3cUNQQW93UklINU1LZFBVV1FQeWgwNUtKVWFXM3lmMzc1WkJ1Uy9QdFlHS2hSd29mb1ZpTFkzaVF5WnpiRWlhaytnZ0JLdUF3aHExVjhKU3NvSWZWL1I1MjdVdGtwSFNGQUp6eU91emtqalNEcUFPOXRLVE0xbVhCSEd0cWdPZEp2eElnTUJYQ2pXUXFDeVZOMjZvTnNod0QzN3I5SVhCL24vNnJQajVNMFNHY2dmeitQbmNSOWwzUjU3RFBnam5nZXBBK05EK0dHMCtHMTFGWlRzMXdPbWFScHA2SzZ2b2U2cXdMcmV4WTJQUEQ4WjFZRDdmd3l4K3NxcWxaUmJ0N2tuZitnMnhhQzdRblRCNzFSOVBoUFl1NS9COFFqQjZBR1VYMjdUQ0FIZGp2MWljQXJDR1A0RVF2SUJqNEJqN25pamMyWmpxcW02bXBVNlJaU1hCRHRYTFV2MWQ5bSs1SXVWTFB5RHdYS0w1UmYyY0hlc2JmS1o5T0V0TG1xa2NoOFIrRWZ3K0E1TVF1VlRMMkRNM2ZoU2ZiRkE5NXYzWXlScXAzZlBnK25UTmFwWFJ3YVdLOXR6c3Z5bUUyakFRangwcDVLYllJOWhHVDNUUHBNb3U3aWpWRXpOUXFrQlQrOFdKcGZjZHljVlY4QjZFRDFGZ0M5WUpMUjZnT2FueEtUY1V5MlRjUUJlMjBqamYvaE1jN3ZBWE1mR3VEaWNZR3MwZGlQT0lBWkJvWjQxMWZkTUhsUm5vYVE3bW83UmlsejM1Q3N0aDhOckUvMW4yWDBtelU0Zk9wR3JtYWkyZkJEQ0txcTQ3a1NiY0pTc3ZwS1hSdFdTb0FwdC8xd2dPclRvYmwzN1ozdHRTdFYxbXVBMTRwMFYza0xScWRVbzduSnhqYmN6RUoxSzdGMDZUbkhhRzkxTCtaR2tzZ2pvSXJGbm5BUVQwZDlXd0dTRUlmdmswOFBoSzdMU2x6L21VYlpkS29JUWdnUXdGVkp6NURBTmtjaWxoYXZBam1xSUliZkw2RWhOTzlkR1ZoVWZVa3hXU1AyVEZmeHhsckN6d3NJQ1k4ZC95clRDREFPVWwyejRTUmppWTFwaGU1UzYvdmFlVi9GN3d0MDlLcndJZ2kxZ0RkZ0RHdXpaQ0VHWFl4VHp0WnZzaDBPbFYvT3RiZGFvRklpVUNlL01rTEt5ZDFmSS9PNVRQaEU1dXFLcjJaK1RjMURRSjN4bUpBOU4xdXdoOVBnMXlGUnAwME5pd1EvSmVFMVRJdUxFVUdKdW1FeW9FN3I0MEozd3ZmSXVwYWtXemZhZFE1cXRqdlhvNGZyMm4yT05HSkdqdGVlSE5ITEdrbEM4ZXFCZk82MUVRRFBnMzNLMkZIVi9rNTRpSDY3Y0NhcnRIL05jd0x6SDJ5T3ZhWVZCa0RldHhQK0VmaEUrRTJIZ0hKVURocXgyOTAzU0R6SWdkbEx5cXRYaWx5cjlVZVRhS2RWOHdob2c2ZXgxY3YveW9MZnFjbGd0OWhvUFZHMmh2R0dnYW9iVnRjSWU1dGFkYXZ2L2RZN0I1UXlZKzROb3Z5eTlhOWg4T205TGcrN1c2ME1RRTl1MUFKajdEVE5xQUx3VlJaRkNjZWxpc1V0UXcybWJPc2hlZmZrNkY3SWVaZmdrV3pPUldMUk5ZMWRnSGRaNEtTR1RIbFV4RGpZNFIwaTZSdWtERm9ieHdKcllEMUs0bHBsRnFXMmRmdHFTSU9TVHdkUi9ISndCek9SUGtxMzZTV1N3MDJsMDcrQUdQcDRxMFo4aW9GVUxqRUlMRmhWOStFZTl1RW5iSUZRdmFIU2dNT3V4NEZLeW1XdU9aWXpOOUIyUDdNbml1Z3pDNURQZE5rQnB2cEVqR0hMcXNyTTROME4wemRRMTdNS1dEUjd2aWh4WXNzWTFJZ3dLTmQ0R2ZVN3d3S1doMk5od2V6S2hLbFA1dkwrSkZnMFpFa0hNMG13OEJPRENJTC9hUWZJOEU2K2ZyNU9ZKzFORm9QNXFDZ2tuNmthUXRCY1JsU2lFM2dNc2NpNmMxdkJQZkE5akUrSVFJemg2M1lGdUoxNENkVkNTNHRZUEozekdkOFFOcHRhQXAybXB3Sy9LekUxQWdUZXE1QVNLVFNsaThtL0N1VFZ4dlBxTEpiTUFwTWc4dk5mb0NsTGl2ekdCV3hVQkJmOXd1b0VJTldNMTdTcFdhbzhKUjhPOTZyNi9uMUtzdmQ5T3UzMVNqYTRRbFRvUU8yZUhnMFloRzVNaWVYUzNVeFowNGU5eFdUWVMvOEZQdzZDRlg0N2Z5d1VSWXdybExJdjltWFN4L09JWElNUFd4bXk0cFR0K3hOREk2YnpjdWd4VGRXMlZNOXNjdit6b3ljTWtzdDQ3Yk15WjRXQjQ4MWFSQ01jSUhqdnRPSnFrWi9DODdMNWtLR1VtcktqcmZtbldHU3hNWFdWdVZ3WTN4bWZyL0podmZZNjQzMm13NldpNGtJYms0dllWRkZRUk5lclBrNngvelNGSWRQcm9TYnZIbEtrR2FSL3hjQlNKQVd2NlJkRTZubmJ4WEdOb3FnbjM2dXZXeXlDQ1kzb3FKc0dDY3daOTNmU3JlaXdLZ3MzcjRPMUNmUTBuR0RYQmNXcmpFdmZjQ2szcDRSbXBzTTBuZ3l5b2l5dnBMcW5ZTHpQcjNxUDNPTTc0RXVTNGI5ZEJFdDdxWkd4dm9uTU0xcURacm9PVDJ2ZkJvclI4ejBYRm9hWXg2c0M4Yjd5czJ6Q0JiZUQyaXFHM0JOdUFlUERjemVWcTVYRjNKT3JqZk9RME1ENlpSeDlFMVlYRUIzbkNGNTBORmtzSTY0c0xhUWJWT2dCajY2NFBiVkdQNVpIRkdvZkJBU2ZVMHlYRXY3emJHV2dFdFAzWnRxVkFXYWtOWHV1NDBxUVZrbHZRN2JwQjBUK0RpRkRrSGI0NmU1K0d4NFUzQUd2OGdBQzk3MVZwV1RRcHJBM084WURsSVRIL3J1ZlBUMlhnMjNqQ2QxbnJIdzdzb3BGU1FsSHQ0U2syK2hqK3ZFbzFwOGNMa0xVbFpURlh3TGN1MlhYZ3d2SGUzaHM4STh2OUxZUC9xV0xlenZydlBaeDZmM3dDbTYwYnlSME9MOWFWcGg0czhSWFFHQzZONjVQMFIzNlBLU3VHYjUvcEgzWUh3QlFkUytaQmNZcXVZNFZZWlNsbVNnblFDNkxLdklXckZVNWp5M01kL0lXVlZEeVRXU0Y4WC9Ucy9ZUWxTeHNucXlyS3JlNXdJQXJOWnEzeVhCbld4eSs4dEIyZTc2cUltbHJOanQxeWl0TGREQkR6akIxMW9oRElKUG9lZHhJa2E2S3drYWNWRW51ZVBJSmNmNEpoYWIzMTJISTRkNXNMMkxUOWhDNFFiY3FBQ0c3K0dsVGZZNURUM2hjM1RvVU0rUGNZdlpyNElVbVNUWHBhc1VPenJpNFJlZ3ZFZGxPMVQxK29wd014Z2hSZk03dHVqL1ZCd0I4OFN4dlgrUFVCSjhMb2tHZDFqaFE4NzhmYS9aWTZISVB5QnpIRzVCaWxZam9mUEFvTmxzRTJIVFhpWG5GU1F1dG1CQ1RpQXNvdU8yb1NMbnNnM1M4ZHBmM3VVNmlaUjN2Q3o3cjlvdWliaXlEL0lUL0ZGOFVFV2lURU9FaS96eDFZR1V1b1ZtSmtNdi9iK2dXS0JGRkljbG1IUGQvSWh6UDlrdzk0am5DT2c4NkdxNWxnV0xTQUZzU0k2UG9qa0tIN050djh5QnVEOG1Hay9OamZZZGJEd05tWlNNWTVCYWZ1Y2pneUFKdzUyb1FNVnV5UVBwSlVSaXNPa0RpT1FWRmZydjlGSGd0aWxzV2tvbWF5dHJpMmx5cDV0blBhZStDV3JaSHQrbE5Zd0NCTE03Q1ZYcFFoeGw0WVJvL3JpM1k4V2wyVTIzbHJoelVQVzMrQ1BLa2R4WlR4MUdldmhSckFYajJjTG11RkNydElTeWI3MEMrTzN1Q0UzVzY4Mk8xTFdSYlNIQzJHWmpZSkY4aGgrTmQ0MldndVhXSDNKSDEvNmI3RFY5dFpQVlo2K0ozcmVSZUNqd3hYRHRWV1UrRXhvN1EvUmkxNDJBaDNUdFpTSGx0T3ZUL05IS0ZwRHNuQmNyNEJnbmJqR0dicnRQK2hJNFgvRkxCcUVUbk1pUitpRm1OeFNGcWtad3hLMkVjNWN5ZlhCamdwR2s3R001U1pxQnY0UkpjR0hyRHd0ZUtIV2NqZzlSKzBHQXVaKyt1cDdkWENBeGp5eGlTV2FNa1pLNlg4Wm93c2JMTWd5ZitBcEhxNEYrMFN6QzFyTmJGeEdYUTBEakRXZ0FtZWQ0c2oyTnAzNHRGaU9jTms5R2ErY2IyM0dlSFp1V1EwMW1WVW1waVJWTmFmT3hBNkZ5TS84c2UwcGQwbzBaZXp0cWhRb3VZSFMxSjg1REd5a2N3QjUwdHJDZFROU0JBQ3pYc0o3bWl0NlJpNE1LR0tnNWp2djFlVUxYR29DYmQweTV6M3FDdHErOHJ1b3Nza3BLZlNSSko3MGFxYlM2ZG1aU29oR0RDYkVreXpPN2lXMDdhc3haZWs2L1czUW1jK3NZY0RFZzhlTkl4QUp4OFBnZXRKTmZVQzlNYmc5NzRLUnJEOUkrVFdhc0VqSE12TjcrWHNCQ0NOYjRBOGVqNS8xNVAvY1Z4VEx1dzhTK25RK2JPSWhnY1NmNGhNOVlxZ1k3R1cwMVYxdklqbzh5b0VIZFhHQnBIelo3VnlFaHo2eVRES3M2dk4rRVNBYXdrbVNIQ296YVhmOHozOGkxLzFXVS9CckNxNFBKbVMwZWZvNkJ3SGdKRSs1UldqWVY0NFFiMlNjb3ovd3lBKy9sSXBmbXFpQmI3bjVzbkRaWUpzdGpxdjgycHVqZEVEK1dWaVVyV1N0dWNJMlFaWHllTVhwaVpCZ2c1V1pXN3g2YThOSWdsUFpnWVpQc0VQWElmOXp1TmZ5QWozY3Nod2dLQytJb3dUQ2I5eHZXcFA4MG83NTltVUh4Zk5QcWJwQnAxNENIU2w2b2Ird1dxL0xiT2phUjdxY3dqMU1TTzN2RjEwT0gwMFo1UGlDNmFVS2J0RDE5WDhCTjVZU0dWV1JwT0p4RXFsWm1LNTNjbytYOGl4S09QTTNFMC94cTRKRHk1K0htM2l1aVRlRjVtYzhrdFFQVXhWd2pBSFFUY29qdHIyeXZTdGkvOXFYSlg0aGptbE9HRk1CSGE5VkgrbkdDVi9wS3dZS2ttdGZaZWJoTUp1V3dmZDhFVnRvR3cvelNLYXFCYnE2VVpDdXU5eEY3NTY2Z3E5WFFJR3RaczRFY0pPVzVMZ2h3UVRSS0puSUJ2RStIRk5ZbkxpK09RTzBFSWVRN2FyWHdMTzlJQ2lQK3BIMjM1RG1Ld0NzWWNEZFZWRUhlOTNKbVpLakVpVy91TjQ1OVFjUnJMR1UwT0E0WDhmVStCREdQM3pHdFgrWTRVL285cUprT05md3I2bGpMbDNsazhCZXg4QkJ1bW5QY2YzVE4wNU1RZEZFWUIrU2VkVXMrS0Z2UGJZc2V3RDZkWlF3VWp1TS9LRzlGUzJ5L0tvOEpqelUrem5ORXpWVzVXRk5JWkZRa3gyYUVNdm9NNnBxME43TzdFQSt6NC9ENlRncTEyK1QvQjNhak1rNDc5UWV2SndtaFE1SHFXR0tnQ21UQVFhNElSaTQrN0lmRmhQUXd3WUVZcWZtUHhFNkw3K0FhUkdieGlPYTJybVFmRnVhQlllV0U0a013QkdpaHJLdGFQeDI1QTkwcXRqODJPcno5dkZnS2dxV1JGNE5EaXliYW0za0lrSzZHUGVPK2xwYk9vZDJ2eXdadE9iWmUyZEU2NndFM3ZWWThmQ3F5RUlsWHFJNUZBZ1JRQ0hNdDNHZUE1eFdFUnczbmlqcTBncDdvcnJHUzJpRjFwd1VZN3M0SUJ3ZHZJS2s1bWtQWjZ1VDZ6dWFLaVpkZ01LY1JHYlUxci9BeHhvYUNNNWU0Ry80eDhxcE96WENnNGpzbkJjaElyZ3dKRWlnbUhQTzhFL2xsVVRFc3FVdWl5UXA1NzJ2RFpNL0Y3Zyt4K1NheFJBQWlyOC9TT3Y4VEFucjFWMm5nNDMyWnluYnRuQzBRT2R1aEJxb2FKRmQ4d0NMdDdVVmltMTBQVE1YU2lYRE9RdzIyVlJocVFVclgwR01uU0VLSlk4MTVBelU0ZjhZNFQ0T3ROTTJ5NWpqeWwwOERGZXcrYWZWVGpvdlA1Qm9JU1UyRTJHQWM2Nkh4YUh3cUhPeVdvRUFYMHBreTN4bjI2T3VLM3ZqcGJJRERaczBPOHpjRGc1Q0k5c0N4bmZVdG1RRXJXc05Qcjg4K3NGYVRvemxIRUE5UVAwT3ZTRm1qblk0RTFNQWl4cC9rNytZNVFYRTRwQUZNVVNtejlzTXhuU1lSVm8wSXU0ajUwVllTWG1aMGI2bDF4b01ESG9FN0J3NmwyWVl2UFoxVXNWSzBLRzhsNUZuQXlxTG81RWNlSjVQZjg5YnA1L3MybE1mSVdHNmdPMnZSNWZFTWhLM2k2RkRhUXpRRVpxOHJXK3JmS2FBQnZ6akUxbGM2eEN3NXBSZ2QzaVdXLzJmYUlaUW43NldDcEJzQjZ0bm5GQXRvOERqN0pubkNLbXdEQ05iWXJUbEFyQXJpQlpMVStNZlVqNlBOR3JVRG03VTVJV1A4QmZjYWdKcFlGaFUyOXRGK1ZWZnU5WjhkK1RnUDllOFpQL3dWSkFsZDJlSThJejFHR3p4SEVUa00vYTVwbWMvODd2SThaRnRGYjRsa1k0Y3NwNDNmNEZDZ01najJMRVJvbGJZa3RSSmQ0dmowb1ozUjRDNVdSYjZiZWZJMEV4b3lwWXliMXBxZnRNL1kwa29HZmlpMkFCSEVSV21HZ29IRGxwSGRyTkJ0cElIYWVsa1BsdUNGZS9OSThlOXFrc1JpZHY1RTNCazhjK0RGUklndUJ0VDVscnRybURmd2F6SitHNlFDektZd0Ntdzlrak9nRkdlTzNFMDlMLzl5MlZTcmdlRThPWjJlYm1wN0gwemFqdE1rQUNsWDR2eTNNZzhiUVFXeTk0SHE5QXl4dzBFMTdaa1JUbTMyblpRWVUrSFNscmdRajFBSGV5a05URlpPK0M3VnVrTjhjeWxPRzM4NGsxTXNXaXRFanBXMDA4QjZybXIwMG5MT1dnMW1NdzA4L0tsQ0hnZ1hteVd3Vmx4ajdyZ1EzMzgxS1NxaUsxNytvSDFXUDF1VEJ0U2lvdEwwbzRJdDNrMWpyaVZ2VXZmUTBiczRvWUhhWnZJd3BYVEtGOVZxY0lLOWptWHRMeU90dCs3WTdKMDd6aGJ4aHdSTnFDRHpOTGhDYlFFWVVBSkc5SXM4SW5Xa2sySmFOWkJzNEVVT0ZBUVdtQU8vNmxJV1dqNnFBaVZTVG1sU1JLWHZsNWVLYmVyeVl4ZGVuYkxSVERWL3YyK08zcmhLV1RuU0Nja0tXS0NPV0xXcHJJMGVUamJzdUxKdEFUNmtMWjRkT1F0a25rcG9vUy8rdlVmbkU5ODE5UzVhODZETEQ1WW4yenZNQ2dEY1JCSllVQTFZajBCOThlSzJXN056Q21zRTNONHNxZHJJMU91VldLY25wMUpkWStvK0FpVjJmSjBrREtaYWwyQ1dkc1BabmtvYzZLWEtQbk1lNUtqZDFXWHY1WUNwMXgvb2g2TEgxNHpLcGlFbFdybVVKTUtoQno2amM1RU1IRGRsbXEwaDQvc0JyM2V5RzdUNkx4MStZT1pVTVcyVWJCUUZGM2IxZHVja2FNcXgrY015SHVUc1I1dW12d0NGYVJLNkVKOVRqK0FlcDZyRlF4bHUyeVBxYjNHQUVvZm45S2RQelNpME8rY3k0bVpLb3IzYXpEK21kOXBYaGpOZXd4Z2lBVFNzVkR2RzByaG5KR05UYzE1RU9SZXRvVXBFZFVidmx5djJxUm9wa3ZKRURiTk9ubjFNd01ScE5WWlAwejRBREZodkcxc2NuaS9lZUlvWU52SStGdmY2cFVRcEkxRGdGaktmY3JTckdON2o4QUNwR0tUT2ZqdE9pYUpqMk5jeFUvNENTamV6ZElLZThBbk5HRjc3S1ZGRmlKQVo1bk12UmFSWXVQZzNkS1dYS1hkcTV2STdIajhIVFpSdVo0VnBVT3RUMDkrQVk2RGJqam9rUzFqQUdKcEcweGVVaTJnL3c4cXJJd0lsRjJoajVpZXdCQTVZam83N09odjk1UUhqN0l2SXlhemJBWDJkbmhHdVJwbXpsTlM4SEN4TjMwUU1EekUzVHIwSEIxVWVFTEVvQmY0dUVHd0YyZW1VN2lodW0wRU5TMEVNRGQ3U0tzS0FBSzNqMUF6YndXd0JsQnFYTmlieUFWQ3dxL2ltdmRvdzRWUWRuU3p2alhZaVozQkxHOXNoT0RDVjNDZEYyYU1md1pPcXpVV0YyT05rb21BTVpyRkRkT3duNWNQL09NcFYzSFpTd3VjeHpXY3RVczZGNzVRcExaVEtvbW1jbmVabzk0YnBhbWprMGFEbVBlL1Q3ek0ydXhPQUFrYjJyVkt6eDU1eUdYbFk5NDUyTE01T2txcSthNllFaUNUVkVTZ2N1OTB3ZGRmMVEwWTJoMVNSdFZJell1UHQ5Nmc3blhTSDZMdzVJeXg5YzJUcy9lWnNwUEhPZThZMlF4Mnd0TUNjNWQzbGNrK2ZlaTM2ZUFMUXlEcWFBdTIyRjFReEpMM0NvaSt1TEN4djd3N215QmRlck84bFdwRlUyNjRmcVJkMjNLYlhrNTBlUWw5eXlvbnBMbEwzVHZ4RTgxaGZBYjloY2pndXpNWU9oTHlqMm11cWtuSkRrRDk1RTJ2MWZUWm5WcDhmWEtyUkNsKzRhUXgzOHVWWEhrSlNjZFNwdnhuUWhqT0xydlF5MVpwZ3h5Mzg5WWlwL3pCL1BUc2o0djFpOUs1clRsQ2k1RDZqQ2pqd2lnbEphV2lISHFPQytDTVlxa3VhSjNlVHRQUXMvZVVOYWx3M002WjVlNnlFclJTSUFoVWJBeHo1WTlCMGdHdVhsVEcrNTVDWEE3cENVOUEzMnEvYlpRNjk1UlUrNE5QajFiUFAvZ00veW9FSTdvQ2M5cHJPY0Fmb3RxTEphbUFYcTNJdndRb3M0SW1HWDc5UGxkOEo5aHhvcHduV2FTa3dWc1djTkNQakdtcHpVL2F0YS9VdU91a3lyaEFqSGxURGF2cm5WeDl1d2p0Z0ZiZStIK0VYQWlDc20yRERacHJsR0xXenhwNjNWcEtxWXNBUEVIQlNHWGpmYmJVOWZSMGtjeTVCNEtpcUQ2bTFiM3I4eEw5Nkg4bzJIVS9xVHdmYU8zTUh3WjE4OE52L0J4b1hzdUpqZFVQQjVPakFnMnlsQzIyVm5vSzNYbStuaGphMlZtU25TbVN2T3hlNUl2bFhiZ0F3aTlaaGREajRJTWlueWxHTDJWZmpIWmZCL3prYWZNOTVUV0J3bmw4MCtiTFFETWphcGhqaFR4V2J1YUZ5NmRIeVIvUE1vWHlXbXhQNnl1K2RubDh3VkJ6ajIxc3JILzd2TEFhWWp6QnQ2T29OenJYcGQxTWZ3V0FYVWE0MUVkZk5kL3M3c3JnUnYvVUtkb1U4MVhjcWpCUmswRXJ2VGYwNFJLTW45MjU2TDhTWncyZnpob09NcmhTaVQvUnZtR1NzRmZrS2tYRUZRcloxRWd1eVE0Wk9zUHN6cUNQUzFoMWhGNVVhMmhqbXpRakRoNzFFRmw0d2NHK2c4citTTnZocVd4akMvSHEvWjZReHN2Qys4UkZTeUxSSGQ5aDRGeDhDRzE3Q0pCQittVXdKSEtlY2NRb2ZCYmp2L1E1NnFpMW1KSlQ2OUFwYzdrR0lNbGlXVW1jYndTWW85MVZkOERpTmE2d1E5Y3dGNUo3QUR1U3FiS3o5M2QxOFp1aC9tOXBIZnhpQUxEajQxb29GNUJrMHRBanVTQTg1ZXRqU1dDZWxENFRNUS9FakQ0Ym1lWDhzZWdQdmswUnNuN1hZR2xvWmRqNXU0eU5VYWhKLytraCtZRkduTEFQby9TdDIzeWZ1aGpiNm5VZ3BKNHNlRUNSL2ZaU3hyTWJQTzFIY09PSzlQaUJtcUVWRGl4Ukxjekw5M2RNa21nbVc5SXBQd042SEp2YXVRdEplY2JqRGNKTThOcnNuL0xPeGt4WEcvSHRYeExScXdqY3FMQjR5QXFsanU4WncrSW1oakIrVnFqK1puay9UQmdKa0xIMWlQU05WdVhBSUk5aVNRdDRPcC9KVkJKNFVRanB1OFZLa3ZWMDRQVy9Bb2Jyc25iY0Q0SnluODV0b0lDODE0b3V4cnVlOThxc0tzd2Z1eHErNXBRUXpnV21ob0I5NDBIZHhyWHlpdnVKeGt6TGdPdEhobTVIZnlGR3FnNzIwU3lOWUhvQmw5b05qcjVEcDdPa0NIaEVSY1RhK0F2Z3JNQWZSWlQ5SzBEWlp6NGlLTVhjUjN0ZklOeXpNanp6Z2RwVy9wa3RPM1Z3ZTVWd0VLUUhSSVE3cnZMZEVXbVVWM3IvNk55UWQ4cFptVm1BOHFWbjFNbU9OTGh6WHNwUE9CbXZvaHU0SGc1U2ZTbDU1dVJrM2J5UWlwMTM4end5M3E0UzVGQ2FyWEVXT3NBc3I1dW5pNCt5TVpmS3k4dWx2YVJzUUR5d2FxNDFjMXRVMTJUNm5XbUcxUHdVeHFiK29OTUFhMDFPamV6djZ4ZTZYc2h0Ym9LSHRxTEVxL2NPaFY2THJrOVB5b1NITWR2dGd1cmpCbmpMSk0rbUNBbnR5cDhEeTZUZ3ZGKzVhd3RuYWM1NjBlUmlBZzJWUU9SSWRncEp2UzVGaFJYdDdhMGp4SDhKUjNEWW1oYUhKRGFibkh5YjdJMXk4WXlCM0plWjJhb2JSUEtUdDNZT2t5Zzd1am9UWTRyUVFCSm4rWkIrbDhubGpYMmZWS0tzZitUNlRuRHF1SmVrd1FMOFBaSkc4VVVEVE5ONmVkUjh2cEkzL0dMY0srYTA2dlVTVDh6ZzJydE12bVMzb2locC95ZkRMZkozK0RRTUtmc2hjK3pPeklWeGc3SWptQ2NSUjc2Mmc2bkNrUlJWbmprdUdXS3NaL0NlZ3BYNkg0U201OWNxV0ZvSE55aytnRkFFZTAxeEk1T29JL1JnQWQyaUV0bHlCNWE5QzUwc2JhcnhlaHJQTHJPL1lMbjJKbHhGTG9NVFdGNTV4QzQrbWV1NTN3Ymc2aW5kUXlWMm9lOFRUOW85K3JUZllVWi9ic2dzSXJOc0tMaEoxZVhaTDFtQXlSd1Bvc25hSW5BMjhydFhPKzAvNzdhQUZTNklyUGt4N0psT2RwV1c1QWxING5CTHNPaGRqSUdvdUM4bjNLb1JiVUUvZ3UwT2UzVjZyVjJ6OWN0SUw1d0Y4SkcwMDVMc3E4L2l5UmJCZldEb1I3QVM4S2RZTHBOSTNtekZkRGxYeTR2WUwwSnJ4S0VKUUdBSitEOC8zUE5pbTNET0Q3V3BONXRRTFFiS0xVOERjeXdGaG02OWRHYmdYSW1wQXFDa0FXNFEvTGx1UnlZV1FNVklDSHV5NjlNMFVCK1hzaElSa0JYWTBkejBFL3lIbDNibDdJRzdVRFByOW9WbE56MVhqcjBYbDVuanVLVkNnTG1QMXVlK25kZ202dmV5cXBTTGUxZDB0T2hMZkFpeHpOMVVtaVJ4eWZMeVdTU2pDVGFKY1JmeXRCL2w2Q1h1aDYvVWdQZVVWYzc0T01Bb1RCTlllOUFSS1ZVbDhhVkRERi9IRHF0djd1V1dyd2tJWE0yVmYzNmROTFlKZ2ttRnRVeldQOFZRTXJoKzFqVHhCUk9JcXBKc1U1N0Ezbzk3NFJobVFwWHZxeFVOa0RMb2xBS01ISW5kanlEcmkvbUNYeXZkOTd4ZUJnclF3ME51MmhWbmg0Tk9QUGtPQ0UwWDJOU2lXUVFJTlYvVGxOWkRFNEc4VW9oNkFJbUd1VjlsM253YXZNTEFXZERKTjJBNGJIZ2MzNFU3VExzVGdabnpSNm9DVjBXK3MxcXpjSFBmUjhWUElEeld2dGtmQS9OOGFKd2JNcktxbjV4TDZ6czE5c04xdkZ2OUxZTzFvc08vQXZuUU9BWGNBb0Q3TzlZOHRoempLdU1tdmdyUHBiMWE3S0JkMzFyQlVia1hpNTlHQmkySkhucjhFdlFlTE9hS08vMTFtb1Izck14NTBlNHp1emN3ZFZrODlCRDJxb3dMelJiM0hPdEV2cXVvTU1FTVZ0NTBQNE5QNjFENldmVTlQaVE1NVdidEZjQXpGOXhRRVNJNGVtN292UkxKNDJ2RUxaM1JId0dDbzFSYk9aY3piNzQwZ0IyKzVURE93cmxMVnFSVmMzaloyT2xzcVNvcGNPRW5aQ1lGa2JpcVNKdmg0VVgzSVkySWpCMlcvRDhTREtJSDlCZ1Z3VEx1M0ZoU1NCSzJkcldYNE9aTDRRL0c1LzJTZ0x2UnZUMGZzSk5UdFpha1A1WU9PVmt4bm5td0Y3UlBUemd3K2JaMmVuaW1XRERMMjhSNVVyOGttYm1ubEFPK2tHS1J4NWN5RG9DSGpJR1RwL3d1R3VJdUV2ak1pS0RSWFlDS1BXVmdBZGFUcWRjQmxGSnUyblFVbFdhZFA5M0NRbzBRV3B4UndUU2FjZTFRRWJRNnZQbHN0ak9pRFA3UEZpejQrdXhxeHBucjRUNHlaT09hNVFPQVozTHJvVHRkR3NyNjhYUFVDSWovcXMrRkpQaFI2UFNvOE1YdnlkdDJXREFhaExOaGFpWk5TRW04bG50TGl0N0VtRFJiKytacm1GT3UwUFJodXY3Y3Fnb1hISkRxR1FzcmxMRjlQbmkrc0cwdkMwUVNQditIeFp6ZWNwajRwY2VUcmxyMzd3ZGRjUCswU0pxSTA4VkppWm1iZ3hUSnFMZEVEdFczcXZHd1dWT1MveGltU0VkczBpRjF4bm5QdjhhL1hIYTFzS0s1Y1E2Z1BOOUJFc2UxYzRvaHBrT3lQcGl2QXZSVmlCemM3aHByYkpCQVNXYXQzbTRrdXU5ZHBUR2VLREg1TVBBclFaRDVRdC9idUhtelRmS3dpcjZHVXNUZGRuRndIa1A4RU8zZllrWGlTT1J0UkNKMHBLNTdDR3Y4QmlRUjg5NHh5K2VnVU11dmVGK3BSN0dBbUJxNkFncmRhV0M5cGZGTjlWeXhEK09rOExpZ3NmdjFKZWdVbDgyNTYvMlhxUnlxWWs1cHh6WllGVDRTWjhZRXlmYTQ3ZFBuUXZmZjZBUUQ2U3l3WDFYSzZ4QVVYMUR2bU1hUVd1MFNaYWpGcExuOEluK2YvYU1BNGh5VnJwVW9UWWY4WGdyNkFmSm9ndHhIeEo3dFRHZDBydFJMWHJadXpaQ0R1ZmhpVCtRc0NtVlo1NWx5S2MrU1BmcHhzOUFjSkpBZE5TTEY4QTRLQUFVcWxWaGxoNWRxMVBaeklibkIxQVJnelprL1VOR2xjTGpBYUxqWlRBQmRqenJNbDIzOURjR0ltRmFLNFFSWFRpZW1UYTI2K28yQ1JMQVNnSDFlbkVZaE1nWlhXL3hTb0JsS1BMOG8xZS96WFhFZGpXS2NPVjdVWnlNMHc0MzROZkIyMXBKSVBKLzlNKy9iOWJYcG5Db2ZlWkxOQ3RFdGRBM2NSWVdJS1h5NWVFMklTdmdkVXhNMllma1dxRmwzK2Z5RDkya0dhVCtKZms4SDVWS2Y0R2pKbm9iakEzQ2ZGL3VSblhNWmtKdFNsQWtseXpGZVBsUDliZGVhK3czcVhEdkpQcWZWQ3BHUC9OTGM0VXdpSnpHYmozNDZORUJKNGZzVFZmN3dhQXZqQThxdFkxckNGOVI5bnNKb2MzUWk3RjlNbCt5UzBSaGNSYXdFQUtSdUNGVWNzWWt4SWVjbUxIYUJEb1JRYzBqb3d5UUpmb2djWlN5MGNxTWdaNmdmQ2p5UWRHU1RmS3lZaXRCMUZiTERSVUpLM1dhN2RieWRRbEszbEZFWUd1OTNiaVQ4WGMzWU1Td1Z6S2cvODZ3NStSTUtJK2t1dFRySFNXcTVZWVcrd2NEYzI4b09yb3RNK0pndEY3cHMwRVdxclNaRmN2TFpjQjRrMUpvSEZYL0xEUVo3SVlPMTV3dzlmTGJVNUpiZWt6d3VqdjVrMXJLa0NLK3E0OHVXTXhnQys1MHA0OWthMWgxVWVjdEgyS1NhQ25YVncwajRZeU14M0ZndldTT2VPNnQyUTczQjdDbW5TOVhpdWFIZk9SMUxEYzU2NWduSTRLUDJHdmI2bG1OTDVjWjZaN3pCZTJQQ2dlZlpINVlQTUxaL0c2WFNKdjhWN0FqOERiWFRjdW9tL044b04wSTdaUTBUK2lMcUo2bEdjbTZGNnNldGU0VlJQNGdHTUtPK3g5RloybWxqdCtlUzE1eFpCZ0U4ekxrZGZSTUxGajBGdGxzbndiNVBYMUhmcC8zbjlzdDhucXczNU82WDVPdEhEK3IwVnA4bnN0bnllN09mSjZwTmZKMzQvUDJzNEJlL2F2NzlidnYybWUvV3gvaDl2L3dmWXdCNXM1UDBmTUg3UC9yWWQwR1l5YUxlWTgzVGJqVmtZRUNwMTNVMStVbDIxdlRnQjVnM2hockxHbm5wK1lZKzhQbG5Kb3RaZkxYUzZEVWlFMUNqc3VZWkljS2hVVTliOHZpZWtPWnZhc3orSTJVZUtPeHhnWjd0czBoQ29Iekg1OE93SUE5L3c0T3BlS1pKTjF2a2FZY2VheHgyNUR4UTBrSW8wT1dhN3ZHbGJrTGtLazd6UDlDb3VJanFkMnVtdUF3RjkyUzhNSmVSbEdONWhIVHY0Y0xLeDZ0KzQvTmxBMFhiV2RoeXorZ2ZnWERMenZaMGEraDZISUdEdmRSKzJpeUlpYnJyYzIvYVFSNFNYRDBhdVljdmNPcE5xbUdlTmw1RGlRa3FSN05GOUhPSW0zM1ZscGcwUTRjTkQ5dWJ0eDVCbzRtaC9veEtKV0lPVlJ6NHJFZ0pMU3ZJWDYyNkFmRkx0V2hrbk5neEZlQzhoa1BNVXcrRlgvbDlmaEp5a2lZM295Sk9KNEppVjkzajFmRUZhTlQ3ZjhYTGlWOTFZcHMycktPb0Y2VEc1SEp0WklEVHZKc29vZk1ZZzg2Z2FzdkVhbWFFeCs3RGtJZjlvaE85S3k2d0Q4NjJWMkN0MzVGV2V6d1JndzdFdWlIdzczMkIrWmhYRWtYc0ZDaVBzbDhUMXJPOTUwN2loOW1KVWx6RmFIbENXYUR4Z1k3NjcyM29FYmF5bmlwZmVLakYyZFRhY3FaZmpmWlZXekg0M0srd1ZuaFdnWENhYlVYY01vT2cxYUMzR1pVS1ErbG9udGdWL1QzNi9OWW5OdGxMYVlacmVJMTRsbEhjYXZueStqaUl1RUNnUUhhK2Fpamd6bGRnckJZTGI4Sys1cGdXOVpjV2s5SFFRakx1WWZ0VExCdzl2ZGhPQ01BT3A5ZVEvYkY2cHlINmVVUkQ1bEcrc3NLMEZKVS9INm83YmZEaUlpRUJwTDlEZ0hjK2NnTE02UzFENkZsMmNnV0pGekhZMXgwaVhNazVNdGh3Tmpxa0VBVStXTTlvczhEOVFZNiswbldYWlIvUE82bFNhS1ZjRnkrTnBmM3J3Q2pDOTVQamNneWpBbFFpRWVKWWlJSVZBc2VoaG5NTEh3R3RCSGVCQ0NLOThJZ1NrU0VxcWdMekZubnVlb3Q4U1pra2g2eCsvT2xLWlpCc1NOU0FxbzZDVU90UTJlQTZCMWZ3aVdSMVJyc1pieGFDOTdHdDdQY3A3dE9rQmVWQm5zTTg0WnBxU0dKZG9KU2Z1K2QzeXFjZTFVbG5RSytnd3NhV1ZDN1EwMXBLRENjYUZEL2N4ZVdQOUwxLzZtRVdldnc5NG1yTlVoYmpLNHVIb1pqR2ZKS2svQjBVeDE0TTgxT0plbDNTcjNxMklUN25ta1lERlpLMnFZbFc3S1k0bS9Dd0Z1V2FRRUV0VEd1VDBkaDVTQnJJaURuWXNoTGdRZExYdkR3RllzTzlGY1dKTFVoUVhuM3MrVjlaVnlTRXlsV042KzdtaUZuSnQvakVqVHJacFRnSWIwSis0cjFKb25TK2k3T013aEVyWDZacE1VS05HazdmOXJjcHhMRXFvY2hqKytHeTV0YmtmdExFVDR3V2FHK2o0SDRzcCtWL2dVSlp3NDZyQTBOWVRCUlZPcmVDZFFlTWdTLzhQcm5VeFUwMVEzYmFQMzEwNlZDYnVhb0RIUFViSW5TODM4TmR3NkpHeGhyRjN5OW1HVTArdGtWSTZ3bFVQb0srbldDajk1emowMjMyMFdSYUUxNFVjL3pGMk1mRVN4WFB6M2xzSTNtZThMV3l0VU5nVmN1NE5BUTIycnFCQ095S3lTbjhIcnVxNGZ2dnFGU2w1bFZEaXJ3Z01aYWJJdHA1VlUrQitMbmJmd203ZDVJUU5lTm5QR0E2Rnd4c2tvU2hwbGhMRkhrUkFiQnN3NzJTVTdSYkY0Uy9yZFdpOCtFMHFERHYxWGdhTXVwRVJTRkcvOVUxZmhwTGN1TUxHSDQrcDZEYWpvaFIzbTFuQ3NqbVUyU3UyRUZaTWZHa2RaOVpUdVZnanpXVWFFRmpHWTcyekczbzRRUHhCaDNmRysxYjRQN0c2RWVjOWllODYzSXJsQ0tPY1VJRzA3VlNubWhOVXJhYVptekMrWjd5eGkvZGVZTGZ5R3l2OEJHNVZEZDgxTi9zUUdmcDQwNTdUd3lENExpdEdqS3R3b3p2d2xMaStEZGhwRk9FU2todW9nYTBnclo4WGRLUEdhWmQ3NDUxYXltNkNBUUFEREtxdGNuRHZ6YmYvZWtkUEgwRzFkd00wTGZ2VGtJTnZSeGZpazZyTVpMaFN2cXp1VFlnM3YyOW0xcTFsYnRmVUp6QnljTllwRjhid1NtQjFTeUFUWVc4RGdSTVVRU1Yvamk0dHJxWXN5N2UzVEtQbEh6VjEybFJWa2dzYU5wSGIrV3VEb3p5T0I5cEpjdXBLUE1GUFd3NnVDYzJOQ0dJV2NHaE1QUmVBcHF4eGFSN2VyYmdmdW1HemhYc29PMUY2aUwwVW5wM09IZFVPSFpoSE0rck9aQ3FFc3VHbEE0TWkxTFZZTC81dDc3bnJZZGdGVXliUmt6TnRPbzFUTjczK21uZ05nTEtkRmF3ZGp5YTZNRXRQWTZ5eU5MWEhMMmM5b3RLS1NGRUJCRGZIdzUwaFFadURpZXI3ZEZRQ1pJUkdsS29zMTF1Q0I3NjM0SVNBVlJ6cDRjTEh1YXFkZ2VZV3U5QzdLSm5qYVR6TVNEZTF1UXlzd09PVTdzUGJSL3NDL0JxVDJqWm94dzdVbjFJYzRoR3paYWsvMHFMTWxjY1R4MHA5ajEwc3FJbDhZNFh5V0xrcTlTdjhCekh1ZFBSeFQ5dmFCMkszOFNNQUEzb2tnUE0vUjZsb3p0a0FkendQMVRHaFc0VENHdUdKN0dxeTl5T2Fyd3lnbjBiSGpqNnhuZ0tTODVVZVVWKzBiejlCT2dVYkdvVEJRMHl3SUcrdDloSGloc05jdVZmNlp6R2pueEFJZTJ6c0tVb3k5dnFTTXFNUjd5cUN2dUhXa1BSZ2tJam5hbGpWdmNKY2JEd2k5enJPNzBlRHFaTm40bTNzWnBBbERxV1hWMVBEQkdub2Q4dkJ3bHBtTCtxVll2SUZ2N0c3bmR4bHpXYTV6STlKYndBakRRaW9xSG9ZcThYc1dSVy9mN0M1eGxVTHM2ZnJYaEhndDVweTBXaEU2dHBiY01NSEpnVzBqNkRDV0JSOEYxYjdaVmcxMjlaMnd5a1oxRktER1hYZWhmcXdyenNCOUFMSmxHK21LdTVSMVNKZDFLNlRRQzArSmxYZ2RLYXArMWpXdEs0QVVkbFR2WHBxRHhlVk5pOG9URHA2WHEyKzRmcFV4dHByQUE5ckVRNXliM2JuWkVyMG1rUUZSblAwdGFpcnMvRFBWTWdMQ3Y4aXlWZndFdmNGenMwVHVxaExlTjdndXlsMnFsOWRZNEhTVjNOWC9vajNqM0hVbk1qeFZ0bHByc1psQUszeVVwTVNSR3JocWNjNWZRY1hmenN5bDIyOVhtVW1CMjB6ZGZLTmFaR1QwdzdhVlJZN1l6YjlTVnZKY0daSVdoSGV2RTNwbUdGNE4vZXRjdlVyVkVMcjUwaWdxNExoZldQNWhJbUk5L1dWU2lIMGNRUVhMclQ3Q1lIWkVYbEI5YUZ0VVdIT2NFNTMzajRBejhTVGlzR0FWUTZOV2dFRWE1TXhUVzZ6QXZtTy9ZdzBObEFpRmRieGQ0dFNzeVg5VzY1YncrN0xndUdycWZyMWF6WVJkUHlTcld1c09rN2JtWmNDb085WUlxNzErK0JoYk5RQ2dJaWNDZUhyUHdTTWxqSGtlaGpJaUFDTzBDNHhncGk5bklKWVZiVWxnRFJKcHU5eXhxUHh2KzdjU3hnbGxDUGFnelRmSTVJcFpDWGx2VHU0OXFQeWlxZ0RyUXJpWmhCb3g1bnNXV002VlhSanRoMFkwd0JYNFYxV20xbzJ3SVhQcVpSK2QzMTI3YlFCelZDRkhrSnMzcDljek1jTllxa3RRbXNiZ1QzYTYyZ2NnblliWXY3VmVhS3l6RWZJNnhxSVRGK0g3QzAvTWhWUm1LTnIxMi91S1dWTXNBSFJqdW1RVWltQVZQb0R6cVEvQjhzR1FVaHFNcGcwSXg5S0ZxUVFLcUZxWGZvTVNaTEY4MSttS2JTOUxIWUtVRVFqV1IxTkhYRnAzai9OOTdwSndlaFhiVWhYTWRHeVdkWC9la0ZnWE1Da2hTc2x5TVhSMVgvdVhMdTRCWnNWKzVCZnM0Y1YwazVwL1k5c3VMZ3lyUGRjd2tYWWF2bHVoanVLV00xaFhFV3JEak5zSlRkRzhDN3Uyd2RiN2tCY0FObFdyUlVqSWpKWGNNeEZacDB5djVHblFKcGpLaHNkQXVxOGZIcy9FcVphRnlxaWlpWFJmZ1R5cm55UXNVVDZWRHhlRmNyRXpjZ1NkNlFoNFh5YWsrTEhXRVJiTGNYZExTUHNEN2twci9xVkRiN09jQjRmTXlMZVpHR0J5Z1RNTFZ6UDdseklCS2VWVmhrcFZMUVJWcitrYlQ1bDVnR2pMM082Qjcydno2RHZvZWFQdGh5dnVSeXlEU2k1OUVlMHcvak1RYTJNaFByY3JIakRLTGJiSld5YXRnWDkyTTFNV3FLNTVoeE84VHBwdDY3N2lWSWI1d0htMThrOTdSRVZlZldTNXJ3NXVQSGR4dXJLdmhBTG5GWmlEVmlKTXdkSmdnNlhnbnFPdW5UK0l5QVBhMFRaNnhXRGJQZXJoeGdqdUlDZzE3TlorM1hzN2ZmM3daTE1qeGVxVWxPbnNJT3UrQ3k4TDMwcFF2V0FjWThBUHFQUEhjdERIOTQ1M3Z5eFRQcWNlUGRGSHQvVVFLN3ZCUkVqWFVwL2cyVzlETVJUYVBxRE9lcUoxZTd5eXFpakNPU2lna0Rsc1NEZDhTdGU3Y3dOd0dVL2MwdTZWSU5JZEwzVVByV2pNNkRJWVhhYkZ2VTZyNWxOWGJmcFpORnZCdHlhTWhGelp2dmliQUhqSzJQaU5lU09jSk1KaGNHZ0IzaGZLdjlQcjNTc0h1SEpxMFczVjRSZnA3TEZEUXVzb0dsa3VoVGtpYXE1cHNlV3VZSGg2aGd3cThSTG44aGRSZExHZWZGZXdYM1ZyYmM0YzN1U2s1U0V3Y3ZWRlU3elBkd1BJQUlzQjlTQklVY3NUYzZMa1BUcmlZUTVMM25ZNTF2bGNuOXkwTHZ4dmNjOGl2ZmJDMHUvVGNINmVmaVFXbzZXd1ZBSk83ekJvbCtRSG9LTFR1S3pia2hYclBTaHVRSTdNbkZXeXlRbG0rNDNWM2hXQ0E4YkRNMWprMmFKUGxQd2FwUW1sUlpUWm00ZVgrODZxeThNZWhOeGx1NTd0WXJyTzN5eE9EZXN3NnBjM3FGTlpaR09NWEsvY05IdG4wM0M0dDViOThkblV5eEovVXpZbzlUWXV0K0hyeERZRHZlaE03SU5zSkVZL3hkWTd5R3BFVFh0c0JQaklEYzRka1kvdzFuY2pXdit5M1JUQm5Wb29GY2ppY0pEMlZiYnA5RFlqTmZFc1lyZFVnSzZ0OFg2L2VhWEVWdTA1VWxBMjJQeG9QOTB2R083SDdJSHJEeHJ6UFZpeGtGRVIrYjFDTE0wT0wwRE5YY3UrQ09XcDBQQVMvQ3BLcVZ4RDRuWU1XMk9yeWFYYVBNdTFoM0ZDSzMxTSt3WDBBRXhtdmtrcnRKZVY2NnMveWlhMXZBMTQySFFTY1RqWmUvQnQ0UndyVHpLb0FPNGlhWlhoYzhsaVFrQnNXZHU1czAzZlVJcW9GdEE3VDBBUGRqMXc1d1lia1VqZm9EWExHUnQvQ2VRZW5PSGdVMm90bGpkWmtkbDZWQVdvdWo5S0FMRGJUd1AvTTNqbXZ1ais0S3U4ZE5tWGtjaUJKYit5UjFrZ2ducCtZZFRDMjBlMDREVVc0dVNNNlJRRGo4WlFxSjBSZXdwcW5GUk41UDh1N1F5V2lZVlU4YSs2bnZGc0pFa2tZOWtqdStJMWpVeU9mZ09tYTdZWDJFZVJGRnVCaXpDUUtpQW1PT0E2aUN4L2NiUERyZ0p4UjlJRXB0dDBwK1VCUHp0NGZuMFJKeGdJcmJkQ3hpQ0RlY3VNcU54U0V2MnN6cFJHRWxYTWV2cFByQTNmcGptUVo4bnhlRmk1NzJnVVlDUWZMNUc4SnFwajlUUFJPdnNQV1UrNzdHZTJnSUwzRTQvOERON0lhVzBTUjV3WXhFZ1dIV1lnNi94amlpRG1tNnFnS0Z6cit0cnNteDVucHl5NVh5YWhVQk5MVjRDYmJsNnpoUjl3MFEwTGpmL2ZXb1JMMVZJNXpYSWZHZmpaY25KVjRTTnFXNFF6UlBSUDlOckR6NnVPOXQ5V1Z3WnlHa2JLZ0tuN21wNmdUUG9LMm9KUEIxdWkxOTR5MGlNOUZoMGFaTXYvU2hQMVNJWkZyUlBVUGxURG84ZWl0UFd5K2tDQlowU1ZGNHRIYmlzNC93eVpoK2lUYkk4WklOVi9JY1VUQjRlRjNSU3QvZDYrMGlvOEpKam1RME52WGV6NVlPYlVHMFlkYVZWZUtJaEJsTnJEbXAxSlBJWE5rK1FxcHpzTTlKQ0N5RFAvQk8wZVFSdnNQaUVlczhlZGZNd2RqM0k3Wmh5Mk9DS3pBaW5kUHBDcnA5empaK05DalV3V1JhMVhXR2U4R3RNMGl3RWhJbGwzMDRwdWhIUEZaQ1V3c1M5d3RhVElaOHEwTnZUbWpWU3VqeEZGQjRZMTNEWjhPR0hMQ0Y3MmFGUW51VG5iYjFlNFlXY0E0VGFoeWdCZitzc1ZiRlQwdGtFcmh5aUdlSTVRcGtpbTFvUGhFdll2VDRRNFJxUExaZ3Jwb2FhcnAzWDZlM29iQWhsaGwwZXJmV0Y3WnRJRzFqYVZQSDlxV0dnSHN4bVZRQWdkaThkOGVwQW9jM3BkaVMyajg1TGtQNUdFRlN6VGkwRTNvRHd2ZndvdlZkWGdLNmtmeUpmSGQrd2gveWQvdXJJMGYwYm9scFNGMHl5aGU5Sy9ZY1lyVit1SVB0eDBmU2gvZC9LcWlSUllPSEg3R2pTWTNiWFpxODlRUzE0UFE2dGxtanIzWVRseFJHSzdIRmxWVWNmK0tYcHh0Vko1NmU0ekdpOWFnY0llQndiZzhzdTdqaldYVjEydXpMQ0FWRXpKUlo5bFk5QklaOUs2REowaDZHNGZVTW9RaWR2cEZaMG1mT3VBaFBzTzBFb0V4bUFUb1QrMWRBSGErVzROTkJCRXdqa0lnOTQ1dHNZc2ZwOWZEWE5hay8zYVhKQ0x2dFhGcjJ3alB3OXUvZDRUZkZWMVVJU3ZKSnFmbklXVU4zc0IyV0VUaGdhbVNJZTNGS2Mzclg2amJwRm5GVExyMStGMHBjQndpOS90cUJtSUQ0SjRGSkxYdjF0MGhqMVN5cysxdlAyVDVnbVJSNHVWQjZqSzNMQ0lIYUxJU0pUS1lZTlJqZGJsY1N1UW13cVdObWRLbVlkakEveXo4NVFSNHkvUVRpdnVnakZEMmNvZUNGN216SmZwSTVlM0hSTTAwRW4yclhmNWlKVEdzODJ3UldQL0hYRU1iR016ZXNVWEdPS2gxdmw2UFBkc0ZETkVvOUtYbEpzK0UvRnBVM0ZaeTA0dW5XeS8zM1VsVHZzYnN0dEhXcHVUOG5EL3lGcGw5VE5ENTk1ZnFKR01XSmhhNEp5cEY1OG1jcmNIdUdEVnZueVRsTzYxc0pPV2RRaE1hdUNOVW5GS3J3QVZVcFZtQW1oMW01YTNPZGFxS0t6aEIyMUpXa0IyODZoS25CMHRDcXAyallFWGlmb25LYno4eDF2SzZIeHJVWGVFN1cwYUc4YS9iUE1xcW14WjZtdnh3cHZ3ejNpSnZKdUI3aFpzR1ZkN0NObCtwQ01xSVBEL2ZlR2pmMUh2OTNnOFlqUkNNUjZ3TkpUL2Y3MDZJWHVZWmRlR254OTl1QWtMeTk4TkljUitCZlcrWUFobi9rWXdERG0rQnNpNm1oSXZPV3JxWmU3azRodEhwbFI1SU9pRW4zZU5ZZUtXNWdyV3JqMGcwMW1DcEJOMFd0S2lyd3Y3V3VrWlFpMy96Q1hVcjkvMzhNT3RpUlB1Nnhrc2hmWWRaaVNwT28wY29BanBERHdhTnVJdW1QRkU4N3VkM1hsTkhGNEl5a21GY1FOMWlaaS9rVXJQYWZxaVE0UUVIUDhtUnIwMXFDOWVUY0djbEdKZ1dEVk9yUjFVMzgyUm1zZGxHZVdIaWU2bWxoL1F6SGtwc1B0QW5FYllrY210K1VNSmhWanRRQjZZZFMxM0pMRTVIeXdHWC8xSlhabXlEZTN2dXh5dDJEQUh0UmdkbEhjQStsWmk0c1UwQXdrRUFkckNvRE1FRVFBeDJVUzRxaFNmUGRoaDdCTWkwS0hmazNmUnJDYnhVcjMvcmVWUWM1WEtLR0ZSK1pNKzQ3RXVRUGhDeUNkZThaOGsrUm93SnRwVkxUQm8rVjVVRklHMmhWTTZGSG1nYUlNZnMwK054KzZhQzR0cUJzTkZxUXlsb2RKRm52Ri9YSnZUaWc2emZIRys4bDdBOXdhTDh2TmhoYUZmYXhWdmFtMnFBSFFIZmR2Vmx5TnNXNXQwaGRxc0lxK01OZ2NGd3ByN0pySDBiM0xwZGh3VWZGUGJ6MFRMNm5WYWthSlBydTVzd2hJbFRXVS9UcWM4TnNWV1RSckF4OUhvY2pYeE1rd3FndEg0bmkzMWUvZzhzQW1GLzIzd0xrVzVqT0hLSFdYb05ROFJTblBraW1JMUdnUzlFVjdvc3RMWHBNNG1wYnMwTC9JWTRmNjR4RzBRcGRIUVhVZ0Z6R3ZGMWVhZDhZQXlUejdDL24yK0FRT3dJQ3BJMlN3UTF1VlRHc2pUQnlWUkZDcDlxVHV6US9mYjZ5bVI0VEVlVWlwcFZUSDJzL0c4K0FIdHhXd25xNS9DVFRici93L0xuS1c1NnhwaDFURXQ0U0VDK2pLTUwxVkprRnE2b05wcnZ1UHBwSWMzZnBYNnhFcUdqMkZDcHpMa0RGWmFzSk1MUXR0ajlEQkw4eTZWUk1IYlY3d3ZEZnBMSFRtYkZ4VktBWmoyL2VwWUVGYmJ2QWpGVnN5K0JDNmd4WFNJbTE0OHFGNmhKblFSMlVqeFNlZldzcGoyVEV4MGpHRythZlhJdWQzNXNiSzVWZC93cVovekR3Sk5ubmR5UGJobCtmbTlHKytqYlVqeDI3MGFZdksyNDdUWWtuUzJpdGF4TEswQlFvSmxLOGZablBaVE5HUDRoaldaL25vNElmdlhMRHB1RzRKMDhaQXN6VWNuSU1PTlRRV05HRlN5WjZScFREUnJIS3JBV2pYT3B0aVJTNWJIekE2TjcvM0Y2Mmp1Rmo4clhnR01hU0pYc2FGNjlxTXBta0hsSHN2V1g4LzhyaHVmd29JVy9uRGVhQlBqek5SdURTdWkvR1VOVDlhekZvenkra0tESGQwUHErcFhTTUxxNkxReU11c29GTkpNbHFZVXpzSFdQWW5QVFhaSUpqL1VVNGFxeFoxc2EzRWdQbitqMWF0dlVIM1NuaWpUZzl0TFpqUk14MzNBR3Z5VnQ3aGY4dWtsU25NWmZ0Mm41RlhqN2hFR0xTa0pFdldiWWRUUW8vTGtWU2s4dU1jNzNnMHpmdEVBcGl6TEREOGtTdFgydU5idVoza3U2dVZ2N01JYXN6amdYTUVXMDJzZHF1MktZU0tIVmtBUUdBanluUXYwUURnZnd6Y3pLQUcvSFpwVmt6QmROMWNQYXE5TU9GY1RLK0Q2YjlTVHM4dEZCMGNJdXNMbWRBVXdVeXN6RTYzL2NCSzdhZHVEOFZCQldNeW9RSCtzNks5blR3S0Y1c21nQTFpUndPUE5NQmpFL0pVUk5xUXNteElVZDJkRWVyb3Y1Y1pRNWFhMVJFN2FyVlVCZngzTDMxazJRaWZJK21Gd21TcnM2OGdmaVU5dFZ3R202SFZrc24zenlRYUtiakMyVGFtZVQ5RERqK1d4am40cmR5ZjhuaG9VczA0aEJlSU5EU1d6U0tiZURlMHpwUTg4WmI5ZmZ3R3lBRzRsaGJuMVdFUVpjdEhROFhRbjZsRmwvbUlPcjVRa1VYcGd3T1g0RG1QU3oybVg4YmxDYkdLNmExZGhzU0V4TGwvU1VWUjFUdHlGaDk4NTBxdGdyaGVMS2NicXpaVmR3dEk4SThNbUhvSS96eHVxOWREV3dweVpnTzdWdjlVc0t4MUF0aDZ5a1pCdkhnSVFBTGNqQi95SnZudDBud1dra0hiai9LZnRhN0tXUU1yVEZOczJYNmVhMXVOMXlvVFh5eTlpTE5mN3hlTjQ4dFd6dmhLblE4MUhjVFlWY2ZyVVpZazI0bGhlUTNRcERrZFVkU3BicUxQNXZaMlVjS2h1R1lWNGEvWnc3WlAxKzA3M2MwenRpNGZKQVJhdUJ2NmRTN0F0Q1k5Vkx3NU50OFo0NW5ZY0dYMG51QkpMTVR5VEp4Qlo0dnE3cDNyWVU5cUVWcUZVWUpMOTJlUzVoNnFvQ3lyQzR3QXF5blNMTmRMTjNGTGVQVU93MnVNWUJUTWF4ZW9ITndtaEVKbFNOOFIrSE9STjRzSWxZcHdQc2h2NjZLVHRoMjE4QTVYU092VWpoV0cwM2tJUkRKZGpMc1A5TzF0YzZqRDJTWEtaZy9xL0pIQzUyRDAvZ0VCTmJjYTI3SFR3N0NFYXhGVHpqeFRENFNDN3FtbXhGbXZtWU9aenFOWW1EUGgyZDNzRmRuenhSdTB1QkdIK2tGM2hZeE5LUzh2TmtTdHBSZ1NpWFhuUDROcU1LUTlwMEh1M2d5T2xJUEUyaVJiak9VZ2owaFVyeFJCZ05KYTI5UEhCL21KRm81U1BSOXpLS1lpK0FRajYxdDZYMEZkbWZpUVRxemFybVVzVk5SaUdjd2NKZE9ycFMrV21TVmk3cXl1YzJTaFhWN3V1dk1MQmlmWFZKUnVoU1pwVER3NHpZbG5iaHFFQjB5a1U5d2w2bmgyTEwyeHNoWVpNOGVqQ0hvZWNkTnFiNVpHSjVuMnMzZ1MrWmFxNVI0Yncxa0VUcXpybndHUklTbnV4SUE1dTZuMXdZV3JvYjhNTTB3SVYyY1llL3FYcmRQN2ZuSmdlS2paTERLNXFSNXlLU2U5RUlnSjVnb1hmb0M4OGlWaldDN2lvSWpkWWVmVnI5R2V3TnZNSGdXWlIvV3puOHZuWWRlZzQvMjhLQ1kzS1ZlS09BaWRuQmxqWE02L2pyVVMxWlFGekxCSzhXd3NqcXJFYWx0NVVheU9nOUh6eDNRQjhNZXdtUWVUL2tHUWRyOUEwOU14YmtFT25ZTjN0UGx2eDREb2RsdGlwYmxtbjVESm5LUjMvMWIwcXBVd3ZJcGtEekExZmQweXFxdGFYcDg4WHgwc3hNbVREbWZtTFI2QXJTWUpwUXJ2SU1GSDRqT05tb0tBVG03NC9zQ1dzczkzdkVkQkw4alExb3Zia3FzK3pKTkNHSTBaejk1OXJ4eE9NaCszM1E5UmJYY2VFS1p1YnhWWG9SRFNpOFZZTi9SN29mMExmZHV3VkhoQ00rODBFRUxsbUluVTQ5dzI4b1czdU5nNnFzdUxLaVNGL3l5MlVIZ3dLR0duaUpDb3lLVDV6UWwwSi84amQ3MHJrOHBYRGV1NDNmelBIMGdTZ29qU0FvSCt5a1hJcTQvc3laaFQrK29xQWRHMnJlcEtQclJvZGthZVN3NStxaWlXZkFOb1Q3WTJCM0JlU2VhRmYxVVA0VHRKTXhZaVU3aFdzYjhxUkRvMEVzem9JSWZJUE54clF3dDg1a2phZTR2aWVlbkZpYTUrZGRCVkE5NVozRVQwMlNNSUZENlVOTEVCMDcxaU1yS1RkOThMa0lhc2NWb2tuTzgwUWZNNGJpK09MWUpISnNTN3REOSs1aDE2aHFkeUdwVG9WT2xQU2pzRFczdkY3Z1NNSXIzSGZKSGovU09sdXZzSWtUeEIrZ1dDVTljMzVhVWJiRlJtOTc1MHpMVTNHam92dy9YVUxaQjBQTitzMUNGVW9lYTgrZlFxL1Btd05mMW5QS1h4RFBuVzQ1bndJL3RXRE1jR2RtRnJnbnVLTzFvN1N1V1BHWHFIazF1T2NEYW9rZnBwT1FhdENqcHpQUkhGTXp6TjVwZ01aaDlMU2UwQllORFhoKzhpR0E2eGxUZFZzb2NpNWszQ3NnMVgwbWNvUVFaVEQyUU1JZzIvS3pOa2ZoTEZZQ3RFWnhPdFZqT01iam5PVmMzV0V2bC8yK05lcXhRN210TW04YkxyUXJhTWZHbVhUeVhTZ3JnanJXVERGdVloaXVOaER4NENVcnpPYk56RnVsV3NNdmo1L0RZMGh3R1ZJS2ZWTW5QK3FMYU5LbGJ0Z0dSSVdYNjdQVitOeTZLOXRla1JzWVFRem4rb3lDcGNTa05OOE45L1VqRWdoUkNTdGpiaE1CQWIvUldGOXBFdEJOaHlyTXZzQ2l3WlBPQ0c3Nm95RUJSOTBGU1QyYTgyMEZTd2FnTlNDQnpZY014cS9WQkFYV2ZWZEtDeFQxUndvOWdEK255dTZtVjEzK2dRNk83L2RMQmZweWhqYzZTc3E4ZkhhSFdKSGJLeUNrUVJ5N2JMV1dMTUQrczFIVmpKdGJpMVdwZUs3L2c0S01ja25zdXdBRnAyYmVyWFpyR0VrRFdodUFJOVVDa1lyem5YcXU4NWRYRUZzTldSVFFwdFZFeWl2RW5JL2g3YlFEYTAyM2NDSTJWODBDWWFSSTdBS3ExK2hNMkJNMzcvWis3d09JVVkxTDhxaWZMNFFqaFJDbTBZOXdvUTZGTzFzeXRIbVNkMDEzLzloVTZsanN1Rk9uTVE1QVU5bjlIbUkwVk1RY1ZKV3I0Q3lxcXpCZXJVKzlncVdQUloyMUVxeUlOSDhJRS9lUE1ySUxvNjJWNmRFcFR0U0FxUS8xZDRiZ0tFVGZUekRsZjA3ZFl4TzBXTk1JV05icjFsdlh4OUo5V2hXSzNLSnFkbzFyaWJ2cXJjam5yMGJBbzR6K01nN0tUYTVadFloL01peWJrQXZjRXpDSGV0VlpTb2psQkh6dlVJTWVJcnF5T2o1MDBYVGZtdEpGYjlHbDJ4N29QUzd2MHFlZEVidTVMV2RYQUhmNmkyN0x2Y3hrT1NMVHpVYjlSN25yRkpDVXBEb1hGeVVQeGdCUm9yYXlraW8zanZWY2dFcDJhMm1mNDFyWFpRRE5pV1BWV1FUVm44dE42OENMTG01Mi9pb1M3dk9sWURlWXI2VGxpb1dGVGdSakdoNlI4TXZzWEVHRWtGZUpncDcyWnpoaE4rbE5zN2lLVHFrK0g3RkRkU1B2TFpWL0FJNXNvSml1cGl1c2xtY2hGZ281R3I3SVpxcmpqUDNGZHFnNFRnck1OcUEzbHdWcWcxL2ltRXJGMWZEREJvemJ6NXd6UnlNc3NJakMzK3VjSmowM3YxR0EwbVduTHY0M0t5Zlo2TEtBcm5ydlpxMkZQUWJ2SUo2VzJHZ0RCbmFoWXJhZ1ladDZpVm56cHlWVXZaaW9XVnpHVXY3MjhmNGNtWlNETFFhOVgrVlBNc01PbXFKbExPcTU0WjIxdzA3ZGRTOHNPMzJQT0gwbVovdmZwczFZQ1MrajJKV2MxaFZHUzBBNFdmc05vS2ZTRFV0ajF4MWdOWllDTG1OWE9IUHNoOTFUd3E1MTZpR2tvT3JHcER1ZEZVVVN5WVRVV3JZenFYNDhBRFJSWVViWS9HTFpGY0pWc3FaTU9Ec2w5M3QwYXQzbnArMDJFRTZWZzN0TUhDYUszdVd3LytTYnliQUMyWXM2dzhmeitBNWRVT2lUSzg0end4RkhDMWk3Q0FxWXdaUmtyMEZuTzJCT3RBZHQyUy9KM1lIRWQ2V0ZpYkd1VHNEQ3NaV2F3cDFoVzZ0U3ZvWStMQ3Q1dDltV3UyaFR4TVFDckpLcFJOTnVzNEt5NEFOZjhwVThmWktVMlRscjZxWlA2TjRGanIwSEM5dUVYWmgxQ0R1Q01SZ2h4TTdBeVNhWXhkTWZSdGFaZHhSYnlrQWtCVmRYVXFKN0cwWkYwVTBYcEg2ZTNRSDZ5bUlUdVlBZUFLQitlNUhIczYxZWliOHNzU0VDcGQ1Y3IxNnozdkdrRlFUYzFHZG1uUmc4OTUwOVovQ0k0Q1VTTEpFS0J6Y3hiRkoxRlVPRUZrN09ma3NZNU10b3FUR05oVGRML2xnL3h3M2ZYVGUvWHRZODliSHFkbTgxc0hQU01DMGJsVmZwNXd3NndRRHNCRjB5algyV08ydmJkeTFtN0JQdE1EMThzaWx3VVhTT29YdW9ENE9ON3JSeUhBeEp6Ni9YNUtvY2tEeXl2ZGgxUUpBa1BzNGFpc3hSQ3BwOTR3dVNpWDVIUDl4dlViclRLUGpkaS9HMUJPMDRjd210YVZ5aGxmUDlMWGlkRHV0YkQ2SFQyZU5YWkFzWTQveUJDcDhUT0tTRjVyWUN2NStlUnAzajVITHhJd3JRVCtabEtmRy9Cc3VkekpPQ1BUTzI0WURWTUV2Y3dGbHlqeWxqMVQ2OHhqYjhTbmc1bTRDa3JnMnZnSjJ0TmM2TlZNck1wOS92ODR4WHVmcE5uWTIvQVIvS3NVNE1mYlZJMzRGVGNUV3ZzSkxERDdoMjlpTWlkNTljVldYbU14WDZXUURNR2c0eDFXbW9KN3drQWhBTE9zbTZnbE9nMDlqQ1p4Z2t6UUZIZEZvc2xtVkRSWkJwaDhORmt6UE4zY0dVVUNWK3I0ZXN2T1FFRkJ3aVJrdk93bUNveGhTT1dxNjFyQnkvczFyUDNWenF2dkJseHprNlBINy93WDVJUk55eWs4N1B2L1VXVkpSSE43dTN3Skp4NjFFcUxSVW43d1FPWUQ0aVlwRWljVmdGTC9IZmQzRFpHYXJYblZrcUNZVENhamFoYURCV2JkVUJiNW1kTTJPbkhuZUVJN3Y4RFNwdXlGN1hwYkJaM3ZjL1JycG9rVUJ5aEhTR3RmZTNYNjd4SDR2a3NMN0FTeng1OGhzcDk3UUxaMHlIOGFDRkJBMTVLbWY2S2gySVdYMnROVDBURVRxMVB2Wm1hdW02QWFwT05nN00ydWdzVkhwbzhDQlpwSndFL2plMnZJNlRZMlg0cUZ3Qk8wN0VGZnAyTVdiUjlMbkxIQVNjY3ppTTU4d2l4UWxGU2ptYThGTmRsN1QrRmxFYUhRcy9OT3F1M0NLUE1oMFhjdHpRVS8vUTRpbjdlalNYQ1hqMGhLSVhFaUJvY3VpdkNDV1lIUUJXajVyeXM5WlphbkdXNEZ3dXBJRnIyLzlzcFdKRDM4TXN4R3BXUi9jRTk1KzNzNUFiaFp2Z1hHdGk4ajlMYmptYUt0b0pyc0V1STBSNllxVXlHZXlVMFplWTRST1k2b2oxZWNKWlhpWERYSkc3cEVKQXdmVUVVOEYySFVxWkdvV1hScmRvRXhJcnpSNG85ZUc1V1NwWmhnQWpJYTIwVWZaS1NZZzRWRmUvb1Q2UFR4L3dVTlRpLzhWYkIrRVNaUEk3OTNIdHFlQU5MamtoWDZvckZYM1p2aUZLeE5FbzJZNzVSZkVHbWo5ZnJnYzFJcFhtcnpkWmV5anpWb3hmZUI5YWdra3pyZUZLeCtZY05lbzBrcTZnaU1CSTNRV2djY0R0eGZkeGM4ZW9OWU0zc3hjYjVSNE54M3QvdXNVWFZuOUpoN2tMUXdEcTM3eVluUTlxNzFuTW5tdGpBbE5kM216c05XZTRPUnNZekpncTNtQzJkWWtxNHA0WWNodTA1clljbUpxMWVLbjlCRmlmcTNPOXROVnlNcHpIVEVMYWg0UlI3Unl6K3BHdlRyaVV6azdDV1VzNTRhd3FGbWFsZ0Z0bnAvd1g2bGRJd0ZhSFl3UjlWdnpNbTVtNDRNOEYvSGhOR2RDWHovZVVOTkFRVDNKOHdCL1BYL1NsM25nZnY5NERydkJlNlBnNXJ2US9jQW1VOGlaNWZoMEFlS29zMklDaEF4YjFPMmVUQklYS0ZDQ21PdjlDNDdRWXowdXdDTmZKZEFIWVBra0xPWXJ4TkY2czdNbVhCZjlHMVdIQ1paN3YzdmpVWndaUlJiZVByU1o2TUNQMmgxT0pvU0lydzVzZzVQTWttZkhRRjQzQTNMY08wanNPWXdQcE1xWUgrR3o2TStvWVZMZWJNeEhsR0dwbERFUWRyWm9NRkUwZEZaeXNxMkJUN3ZkOU5sS3RreWxnNnVFVVhiTXN1Y3ozZHFSMXRlcktpN1ZOQ2J0N0VRUnhXWFptcXNJVEREWEdyRUNyN04zakdkN0RRSXpRYXh4K2g3eHpaQWdMcHlBOEV1enhKdjJEM1hwTmFFZkh0MnBIbEpaWW5tc3FyQ2VWSmg3UEhGMzdjZ2J4U0VidElqaEtvckVBNlY0SE81bUttZzgxTEhtcmFxSWhrVVUySHhTQllIaFVTSzdqK05aczlzUHB1b2lKMkgrY09LY2FyQTV5NGozK2QrY2ZTb1hjL0tGMHhGakZnQ1Q2VS9TdHRzMm1FMkozUU5OTTM5bDFuQmhJTStyTHJjdEdMODA5V0VxZ3BIblhTMktidE9PUVdsUm5MUU9Mc0k2cktIWVdVU3dzMlFBVEI2SVdQRUFXUzRQSTU2c1VRaHZoYWdkS2N0Z1Y3djNSWjluaWlFNWZtOGUvSU5Qeko1T1lKb3RsbnYxamNSOGZWWFU1OWltR0xJWkxQcmRLa2RJMDlXV1B2eVhjMWN6a0xXSjYzNnJrNzlOQ2NkN3FQMTc4ejdoOUR2dVk0eU9oNVIyMTRZZmFQOG1JQjBwNTlRMkVZeGhwZmQydlM2NDVrNW1mNVIxcFpkM2hWU1g3VUNxS2l0YmxhTkZPR3dVc3RjNnB2WENML2xoS0d2ZU85dTZDK3NDZmVGZWFhaE9LcHRseUZNUkx2SXBPUk1QQTdraHpmSW9ucWxLbHNmOHVhM3lFYXBIRk1qeG5LU0NtdU5seGRTaW5ibnNKOWJadnFhaDg0M1ZHMlFyZ3lwZGR3WUxpNDU5U0NsR1hQdUNGYzBRSUpTSUx3K1UzQmUrQnkvOHRrTkY0QlJ5d0tVK2pORVcvNXhaMXY5d3A0dG1adjRMeThQYm9zSkI2YXVWSk12YlU4MG9yY2lML0kxV3l2emhOdU9RZFJuNm9KMkg1REtMVTdLUFdOb0tEbmpEenprZ1pvMWprMXFuK1FvVEp1TVk3S0VLUHcyeXArb1RycE9UaTMvSUlYanJBTDFIeWF0Z3A3VUxDWXlIQ1E5SFBReThwZTBjWVdlbUpOanFObXhRNjhmUG96YzJQcFpCcW4rcHY3L2IwZFNEa3ljSk1YRGNkaGdQaU9sVWYwYTRHTDdpYkVLdnJySHlLSjZUMjBoUnY3OTR2S2k4VDEyb1BrbUdYSjM1VjA1d3U1bWEvYnRmbFRaNEpmVFhQQmFWVEQwQStiRGRyVkpMMUpJVU04Q0JKKzF5V2tvanQrd1cveGpzZ3l1YlA4YjVEMENWZkFBcU9tTWsyWVB2d3BWeDVLd3F0WGhqbkZmZHczSjZ2Y0tIK1lkZkNva2J3MjNBUzdNNUZKUTZrTjFmalBuN28yUTF6QkwxeXBmQVdoTUNUOFRxUVA0K3R5WnpHL0dRakNraWdzanBKeUNuTzVHbEpPcWtUSWtTT2ZLTDltWlpPSXRxYW5ySmRob085VUJrWEJJL1lTamlYcXpvOXNtNFRCOG9Pb00yVjU1Rk5lSFhxVk9sQ0VBQ2F6bWwrUm1GTEJxY2dJbjJkZVU3YS81MEdVUUtheU1BbXBVMHluVWx5bEEzYmJ5Nk1oMGp4YXpFWTJKMlBhVzBRUWUwRjNmVkNWS2xNYjNubC9YQk5MNHB6dkd3bUFQLzIwaDRmanRpWlVnOEE1OG5GSEZnMmJDTExITWRqdFh6TE4weGhpaXl3bHUvQkhqcEhoZEkwMjRNZHVFNHR2SkdaejYwRldMV0FoV2RtR1ZHVC9lbHl6YlNpUTJjRmx4QjB1eklLL1hWMkNmRnF6WjUrU3ZVVTBRdWJDcG5wczFtck1QV1Y2R1o1elNxbWZRdmtlQSt1Wm50VUMyWDZNYmduSFg2YjFQNHpWQXJZd3V1eVQ4aEo5M1dSNHZLaDJGOHJHWEJFdVRIZnB0dStPaFRmQ2xVaDYvektiaWRUZ1ZUSlZqM0x5ek90WkdVRHZZZ3Y5cTl5d3d0NmtzSitSWDdDTURPTUJzRTdrYks3SWdvSUpFbDB0dHR1RHphaWNTZW9hUndMUVhlTEZ1TU84c1hBSlF0ei9hQWgvNWVTL1B3dkhLOTVlMnZjNFFXVi9LbDhsRXloRGE3dTRjcUlUSG9IazRkbGM4QTBsWHV2OVBCUzRiY1VOU1lFNEpRczFGZVNOSVJxbjBXbVJvUzJINDdPWkpBVmIvYUNRVlg0Z3RpaWttT0NmRG8rQlkwQlBoeVorMjlHeVQ3N21oYlhqaEFNcENTSC9PVWxZMkIwVHdOQTdvckZlcmRtYXg3aXFzcS9yQTVFT3p2aFF3M3FyTlBXZXBpcFBoNzNQdGEySWRwaTMvZVFIS3FkTktjVGhRTHdINGZFcVgwcHVpOCs2ZHI1a0tONVFTaHo0VHFNSnhXcGRmSWRqU2M2WkVWRXE5MWt4NXBiSlh6T3lXekpKS1BYOFpMMGNrN1Z4Vy9PcTFVbDQ2dlVEV3poTXFmSWRkaUFXeU1wQ0xyZEVpMkZNU1picDRMbGd0WTlYazFEWlRkY0pBQS9QL1AwM0R3cnd5SWdpQjVoaTJTUko3Wm05T0QycURMZFFzMUFVUjY0UGoycHZHWXFrMzdTL1I0NXhCaUo3c1dqUkVnb3B5N2JJSmRldnJrZjh3R1A1amE3ZE9TTGZoREhtbDVqN3R0c0ZmeUNEWHo1N216eXEzS3JXNVRKRGkzRjh4K21pZS9DNXdWZ1E1SXQ1dkhaOHFhajJ1M1YraXdiSjc4aFhMU2Z4MW5yS1lNM1BqNFFPQklTYVFaYnltVjVBVGdUMEhCOEZGT2Z0Ull4ZW1uamxWWWF5TWVCVzVPekJQZ2NiK09tcmdjZHVGMlFDM01vTGpiaE1LTEpPakJITXFVZFFGTzUyNTZUbHdpZWhhdHdrWmRxeGNaQzlOakZCMEVodFF2MEh1K3hFR3NWSTVWcm1lOW1Mb3pZRE00Y3FFVUZ2eGZtcjA1K0pXUFFFSkVqdS9mTXVTQTdIb0pLamM0UWVYOExKcFVhSVNKRXMyZ0RQVkJPOXVIV25mU3ZsM3AxV2ZPL1krcVFDMGNDWXFXSExRUDFhN1g3c2hHRk9VUjVuSExDZ3RLdDYrT0IrQkU1bnR2cDhzajlCWE9CVVRjdWIyLzNoRXBSTkJ3c2ZWQmc0eEg3R3dvMEVMTEhZTG03aGpXQmtyYUtXZG1zTnpwM08vYklxckE1YzcvYVpDSEU4YytIQXFyZ1JGcWZRdlgzY20yeHE3Q2NCbU1iZWplTmVtY2NwUnFzemMzeUovcjczRlFkczJGSW9UK3plNEtXRHc3OWdRZkkxcUVkUDhUZThXMWNXMStTR2RxOExRUk9vNFNLd0ZVSEZaTm9NVi9KL281L0NDUDhQVjBPL1QvUkl5c1NFRTdzeDZzYTRVQ0M4dnpmN29VejE1STcxZWVXNXp2Y2s5dVZRZGpJY0Y3VlBRRjBTVTByVHdTSDg4clpVNEVJSDBrQ1U1ZXZjL3JoYkdaNy9HVXlDckFsK1hzLzlTdEFQWUl1VHovSXZIR0FtamRGWGlpZ2FXQmdQVDF0VVRGMjM5aDJ1ZmswVU9LM3NldFJJR2J0eEJ4QmVNd2oxMkVJdVJiMGRpeThJdll3cVU4dzd3Zk9XL1o2enI2MkZnb0E0VHBtTmdBR1Y4Yitob2pZQUxJRlNjZUFJOTRJcThNTHN6OGQxUGlSS3NQNlNRQjNPZ1RMbDNmUTdWaEk0TzdYNkpCekp4N3dYZGJweWZTWXlLS1F6L0tWUjBFS1R2RjFKd2k5T01Mdjg2VlR6cDdJTFU5ODJsWFNkVEk1eEQ5cVlBekxoZUdWY3RIdnBxY0FKM3hYSjBEb3FkYlkveXJaL2g4V2M4bGNWbXQ1bzVUbHVtb21rTkxFUnRMWlZ4QTBSOENvQWU1NTc3TnREazF0cmxLbUluSVd0TlBhUG05S1dpby84ano4c0hRRGdRME9QcTJYT29uazZKZnB0Mzh6Wi8ya2oyNlNyN25yMjdJRlJHeHJ5SnlzNmx2RmRTdU5YSVY3eDhkMVpyaTNtdWE5NWNpcC94VFF2aUVZWDR1OXpDZWZOcC9ieXZodkpUZnowZVBabDU2b2xUeDY5azNKT05PZjljblljY09sbUI1amFZVDFrdk5Vd1Q1QlpSaGgrSE95TzdDNFRrcElsUnRuNkN5c25VejNLWnBLOWkxbHhtUzVLcStETGQvV3I0TEU3cFlzemwycDJ0aHFXc0pUbFFrTE1vTmZYTEgxc1lUaStFcG9pM0hNWGQxRE9na1V0VzVMWDRYZWJiMWZoZTljWER0eWVCODdkWWVVQklIZnUvdFdWYklvVncvcGZGc0NnM0Jkc1RvRStVU3pLRkRhcVlpOXB5Z1VkSyt4UjVaQXhlY2N4cE9QSmVwL2pxUkhXZjRTN2p4UEJOYnY3MEhVS0pmTTgvTHhGVCs4Y0pKRy83S05EV1B2bmY2UVNieXVKamJIcERWdHp3bm1XNUFXMlorOU8xUjNTbGJjanl3dzNvck8zZ3ltK0VFMHhHbWJ3cnMrTjJmdW01QjgrZmU2Uko3S2t5MThRZDAyVzVKeC9MQ3pITzM3MnE5UW5PMjh6YzdJQytsY2toakF1WjQyQ3U3WWUweFZIcDRYV3ZMU1RxZWdMR3FGQWlXNDJobks1NFJJaFd3WTZxYmRBeVZEbFpGT0dDV3pUQXk5TG5ycUJiQWVhUjlxT2kyU25sYlByTm11elZyNDVxclI5L1duZTZ5bTZoclBEWHQ0Vm1hVGFWZVNxQjkyQmtXT1hFa1NtRkNjazlWQVljNWsreVlYNWFKUDl3NUVQV2JVWlVsTEtzRzl4eGt1Vi96ZDBrcm9VZ0hBUk84bW01ZmNGTlJRd3VOR3lDaWZkY2FNcTZkdXMwQXNzNkFjM2c1Vkg5VlVzRlFPcjJLcjQ1R1lWSUhqaFg3WnoxR2RMbG1tdlFGWjgzbHpEeklObmVhbm9LVmFGRlhJV1cwUHM2eTRHNUcvcDd0MEdWN1JncjFqS0dMQ1l4VUh0dUR0U0tscmIzdGp4Uko0dUU2UUIvRldCV3IyVXpvK3ArSVp3NXhudlNPc3Q1M1VhQ1U2MmI0QldSRDhoY1BRQVpzL0srS2thL00yY2l4QXJmdys1aXZDNzFoUlM5cGFsdFBuQkhBaldZMHhXZVlGSmRqSENUWDhONm9yRHg0UjZNY3k5NFVyQzJ2NmRObG5jdmIvOUFTTHVwUlVvZGl5OTBhUUdHQXBwZUQ5NDl3cEVZTDJDUCtuSHBGVnJrWWZORUF5NXhYVTBWTlJqUHRSRW10ZTlTRVZZZm9qQThkWDJvcVg3WnVtekN5MDJBZW4vLzJRPT08L0JEQj4KICAgIDwvQklSPgo8L0JJUj4K + +#BioValueWithoutFaceBDB +BioValueWithoutFace=PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/Pgo8QklSIHhtbG5zPSJodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLWllYy8xOTc4NS8tMy9lZC0yLyI+CiAgICA8QklSSW5mbz4KICAgICAgICA8SW50ZWdyaXR5PmZhbHNlPC9JbnRlZ3JpdHk+CiAgICA8L0JJUkluZm8+CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I+MTwvTWFqb3I+CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24+CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I+MTwvTWlub3I+CiAgICAgICAgPC9DQkVGRlZlcnNpb24+CiAgICAgICAgPEJJUkluZm8+CiAgICAgICAgICAgIDxJbnRlZ3JpdHk+ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8+CiAgICAgICAgPEJEQkluZm8+CiAgICAgICAgICAgIDxGb3JtYXQ+CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24+CiAgICAgICAgICAgICAgICA8VHlwZT43PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MFo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU+RmluZ2VyPC9UeXBlPgogICAgICAgICAgICA8U3VidHlwZT5MZWZ0IFJpbmdGaW5nZXI8L1N1YnR5cGU+CiAgICAgICAgICAgIDxMZXZlbD5SYXc8L0xldmVsPgogICAgICAgICAgICA8UHVycG9zZT5FbnJvbGw8L1B1cnBvc2U+CiAgICAgICAgICAgIDxRdWFsaXR5PgogICAgICAgICAgICAgICAgPEFsZ29yaXRobT4KICAgICAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPkhNQUM8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5TSEEtMjU2PC9UeXBlPgogICAgICAgICAgICAgICAgPC9BbGdvcml0aG0+CiAgICAgICAgICAgICAgICA8U2NvcmU+NjQ8L1Njb3JlPgogICAgICAgICAgICA8L1F1YWxpdHk+CiAgICAgICAgPC9CREJJbmZvPgogICAgICAgIDxCREI+UmtsU0FEQXlNQUFBQVdEYkFBRUJBUUFCWU1zSDVnd2NEQjRQQVZrQUFBQUFBQUV4QUVBQUR3SUFRQUlBUUFJSkFBRUI5QUgwQWZRQjlBZ0ZIUUQ4QWM0QUFXQmFBQUFBREdwUUlDQU5Db2NLQUFBQUZHWjBlWEJxY0RJZ0FBQUFBR3B3TWlBQUFBQkhhbkF5YUFBQUFCWnBhR1J5QUFBQnpnQUFBUHdBQVFjSEFBQUFBQUFQWTI5c2NnRUFBQUFBQUJFQUFBQWFjbVZ6SUFBQUFCSnlaWE5qbWNvQUFabktBQUVBQUFBQUFBQnFjREpqLzAvL1VRQXBBQUFBQUFEOEFBQUJ6Z0FBQUFBQUFBQUFBQUFBL0FBQUFjNEFBQUFBQUFBQUFBQUJCd0VCLzJRQUl3QUJRM0psWVhSdmNqb2dTbUZ6VUdWeUlGWmxjbk5wYjI0Z01TNDVNREF1TWY5a0FCQUFBVVZ1WTBsRU9rZFNRbFF3TWY5U0FBd0FBZ0FKQUFVRUJBQUIvMXdBRTBCQVNFaFFTRWhRU0VoUVNFaFFTRWhRLzVBQUNnQUFBQUZmWWdBQi81UGZHeEFPelpINllyNnU5bisrbEtwZ3ZleUxHR3piZjlocHNZSGlHTlNCK3htTWVqV09yS2d3S2dXTDJTbXc2ejZ3SU5oZGdJQ0E4b2pleEZBQ1dON0tOLzBhM2tNS3Fnd3VLNENBOFFBMVBJQldRZkE1bTN3RmxrNzZTaTg4L0FlQUwxWmFNSnlhRmt3Q05wY0xCOVJxbnBNZGw3Qld3ZGJMdXZHdGpRcS9nTWRVQURnZ3FnSWNIZEwrSGxqeXpId1hzcVZ0MzM0ZW84eENxQ2E2SG9qb29ZdnZQeDdOZXIxNnA1azFCMnN6VmovblJoNXZkeTFIU3A0Mi9BSFZKZ0M5M1huWW1yS1cwY3NZVE9sRzBVWm4wMnVZWC9vSThTeWNRSzczNVhTaTJ5ZnhuTHJNNEV0NExGNHZtOUZuZFFad2szSkxCSmdnOStyTHN3WUNxdWNBaWNrcFArcFEyUWMxWmFZRlhoNnU4ZlZLUUFncVdoT0FYc1lBNE9Yd3dyOFM0bUpHdFZ1azBXTEZUSXJ3VGlGOUJXWjlPRkp0MlB3cXZqTGZtUENRUG0xYkRZenVlNThtU0VmdWk1bU9GYXVZQmNuMnkyQ3Nac3UxdkUvdVdRMmpVa05RUmpGZHRyOExwV3RVSDlhaWpISkVtQnZxMXdReGVIcDZoSEhqaHBUaGNhcXEzU0RicVF0MUZUVzQvZUx6U1ZGQ09qRnpBclFpYTA0VlcwR0lORVBlS3BBOFJpZEZKNStnTjh4MUhpU2VYYkRqdWlJV3BPYjZuWXlYbi9IM2Q4eHBvdzhaM2pkMEVpaFQ5dlZJbWRlbXRSYlF1b2RhdkxLTG10UnladDZTYlNwWVBBQ3pSL2RLQ2t0QTBIWSthL0wrWWIvOFV4WTV2UXlvZ1QycFlwY1B2OVpqQ1pOdFNiS0F1bW1EeG5zeUUyS0d2RHVBT00wVVRObCsvdXJPMFlCdE5teG9QMWsxbERpRlBmMS9yVkIwbjdnU2hncHhnSndtQ0o0VE5sMFI4c0s5VXEwRlFtWjBLTExCdkJremZuUWVUSnhIaFFrVUdLMjBZbkMxdjZRRWpjajVUSEdMcnZjd1Q5Qlh3STZ2Nllsc29KN1lxSUxZVGR6VDhja1I4TXNtNGkzZkhINE04dmNOWWRCOTJVVmI0NHVDb2RoREIyVTYxcmpZNll3SzlaczBhcksydG1XeVVvL0FCN2tsMWpTZFZobHpEcGxGdUc4dThNQnFQb0xXdU9Cd1d5T0o4WVFOWmZya1FEaGF5c1k0YTEycjVSTmgyakF3VWJ4UU16bEhYU3kwcm05cHdHMG9OeCtJaEdQRkRHZEJLeVU1YkpJZENWeCtNYnZicWRicGlQb2hKTHRDeVBjNHpSNDJZTlVYN29qQWN3VjVUcDJ5eWlyYldoQWJDV2FjeGJBYzl3bTQ1ZEI4d0ZNK3hmakFEa25kTk91SXh3eHRnM1llTzl0ZmtTWWlQLzE1UVJXRkU1NnB1cVBST1FvZ1dpcUcvcHRMOHc4YWpGb3BzOVAzTXp3L2ZlWlJ5WllLdytWZ3RiNTBVdkVEOFl6S055Zk80ZnhLbVZWd2I2L3pzUDZCOE5ia2tobEVCd09qNUpORkRYdklWakVZNFZhUXk4YjNqc3FtcDRGSFpCamlWZUlNTmNOd0RIUUQrR0RzZi9aSXhKeC9mSHB1OTFpdkFFT1h2UTVaQUhPYmM0MXFpZ0RudUpLOGNOQjVFQ3luT2pqRnBXdDFNQjhpM0FsdFFHZHpQQnViUmViNDhNVkZGNzgvY0ZlcDR6K2FYQlhaV0xDOXo0cW1kcFNnTXFJYjQwRmNtd3k3VDFuNHJEaHc4Y29OeDU0THNNRmhuQlA4aHQvS2Yvem8yTTVpRFI2TGlJRTBTeGo1bnVlYmRkUkplbWxRbE1DbGFGbDlvN3VyZWdRZTBzMC9ieGNzaitjUFFyNWQzRnoxQ0JtNk1GVmhoejV4V1NXV2UvOVNUVFpPNkx1NVZZWi9LVTA3Q05NRTErcWxaejN1YldQRWpjWWxTL0VXdkFLOGJGYmZuQ3VVYjdhbjZPZjF0OVVKYWlRSkVBbWV6aVREVUozRnE1YXZ1TVBTZm1SKy8ycWw4QkZZRTBlek5ObmZlTEpmTytySHFkT3lqeEIvUXE5V01WQVd0T1VjRm5HYkNHdDRsWlJJRHEvZmZ1WHVWdk0xcTVKL3hPdWt2YUxuaHdkOXhBMVcrL2x4MnNFL1JnTnVzV01tMjVPdmlON0o5Tm1MTDR1UzNiem91VU9XNDVwaUx0cGxidDJIS3JKTTF0ekh5eWR6ODJ2TVRvZ01qYW1KMDBSY3RabFV6RDJ0SmRJM1hEOEdueWdIMUNTaWhSdHVvUWNOSWVrenlma2htd0Nnc1dudjRjbEZ4NzMzbVBZUVZBMEtXRFlyeHE4aHg4ZkRNZ0lvQk15V0xmU3VuOFE5T3ZBdE13NmdDS0N3RGVuRzhUZUZVK3R3MGZPNGR2dSs1TG5MU2lvYk5lbTZ1bTdhYzNLaE4rMUpONVVXV2dxNFdQOHFBYnYzQVpjMFJOSFRYcWoxYWhWekZNbG1YWEVkU3daUEFQWFRFOFVNNTlDVFVOdE91VkJyY0RSZEEvYmpRc0hJM2VOczVKSzRHVHF2a1Vud0p2b1YxSGVYcFlHdjFaSkNsaUNCWVVJOXFydGcvU2NCVlhZVDZXY1h0STRWdVYzR3g0Um9aR0JrMk91SVg2azQrcDh0UVc5L29aV2JzSUJQelA0cWo4SHhCeENUWGJocFRzb25BbjEwK0VsTlAweDhLOG9TbEcvd0dyVjFIdVRzYW0xZnRqSjZoWWwyWnhvckxmQ1d5OU13SEZ1eDNSTjI5YjBCTTYvVEwrUUUxSWpmbjdGTUlGaGQ1Q21JckJHeFZlTFFCNDllUDRnMWYvQXQxelRpRlh4MXJlVVVFVk1UcTE2VkFlMlkxWEF1NEpBZHhUUjZWc0FYZEU2Z29SYlI5N3Z6SllIbm5oQlFoQWtHYm54UlhWaWxFN1J6bStwOWoxNlRQUW1aU2F5Z0xJc0FXdy85R0kvanp2TWhzV2F0QWxvZjhjY1JOUzdteHZwcVJYMS80UkJoM1BnTXlMTVpOVXlHdFh0SkJmVnFpMElJa25uUUt6KzZyN1ZNNDg1b0QrWWNkU2pzcUlvM0x0cjYwRkF4Uzdxa1c3MGpuajcxYjIvYTNibTA3cE9BeTk0QWdldzU3c1B0SnpQT2h3QVZMdW0xTkdrdkQwenkxN3lTL0ZZSXdlVkM2VU5HM2cvYlVyVDZMVUhZL3ZpaXNPRTB3clZYTnJCNC9yQVFxakRYYVZOZENMSFY5MlVQaE4wOEZxR2dYSUFtODltNmM3Y0EwdHdmaHVxR2xDamoxQU8vWWRkRTdYNEpCaHlKRHh0bnNQY1FwVnl5RkJuZGUvOWl6ZkwwWUpnNzFoK0dlcC9ScTBZVDZjWUhjZ3QzWjRzc3NiMUtzL1pMbVZjbnkxQm5QSDNjU2JQL0tUMUIyT1Z0SGkxZG91RkJBUDhJTlBuQ21jY3pIdWVoNldmcHNHSDdYNUlWUWVKdm9lemMwL2lzbEdGZ2loRFpTQ2gyS0diNkR6M1g4R0pIcE1oWWd6K1pkT2JvK25zZERVMnhZdm5qRjhhV0Nzbnhxc2diZG81WDV6Tzc4VjNDVDhjSGI4Y2pxYzgzdUg5TTRuL3dZZmd1UXBjaEQ4c1RDeFJ5MG12bGxEMXZGUFNrWVJaelJnSS9NTGthM2x2QitOczJ0QzZ4NXA3SEorWUlDbmlBNm10YWRpY08rVzBWcldRTE56ZmtCanhIV2MxUGpyeSs1d3dQc001OExCeEdxaFNiWmdybXRtS2c1VlpUNVhxNStMSzNQNjhDYms0Sk84RFBPQUZ3aTFWbEhYdnNMMkUycUNEd3VOYTRzMDZvTzdvSVlOd0ltL1dLN2c5SWxEcmtvMkVJMnFwbUpQQ2ZNRFNXTVI0c1poVjdrUkdVblA4N2NMWXQzdlFjaXZDYy9yRFR1a3BoMVhYcVlMcDZKTUdoamxSaGxjUlMwblNHSzlGSFduaklzeDZyZ0RRa2N3NjB4dzc1QkJOSTBRSU9OUnE3THdpRkM1QzVTWHN4NGltYmNPdFFWL2lBRHlMSkxOUnF3UG0vbHJxb0NMMFVvVnNyK01MUjl6cmJyV3FmVm1NbDZvMEpyVElqaDl0TGh3ZkREQWlpVEdzUUpVZVM1TCtIZERHN1I2MlRBWHJCUVVRbXNlbVEvZGJPMXNpOTJNU1V6eEV4bm5UaStjQkpEVGlwWURvUENkeGlqaHFEOGZ2R0lJS3kvTmJ5YjdnNndBUm9WS0xJNlJ5MzJFamxjdENKZDVNejU5RDRBa2hDa1RRS2tuSjQxdTBFMUE4WUxvTVlGU1NGWldJOFUxUjlRSG5waFFhdUNQS0w2MnduK01uRlZjK1RucDNGcWVGU0Y0WkJuSWlpaXp2NTlsbTBhcytGb0dnOFZ4anY5bTNkLzNzempmaVREUWcyNHlteWc2clFjNDhSeGZZUUFURjBZV2EwTUF4dmlkMndMZTlpT1lqUjdISysyeEhvemNaRU5PUmFXMlV0VjRGZVgwc3JPaWF0Y0NpSGROd0plY1BYL3MvaTFLNlJqdCtxZmtvUnhtYURvZWdmTnhlUmZXVmEvQUNIOG52bVNEY1lUN1hKL2xMWXBkTEtNbWVJYkhvWkdacE0wZE1FT2FCam9IdVdFeWxSMjUzS0kxeDNRSXJEZEhnK0VNMHphTUNLbFgybDVZbEp6SGlpejh1bzJWQTJpS0ZsYSsrZjI1dHVidWxOVVpzaWY3R2JvZXdVMkpZUk9yWUExTHVXOE4xSjlaVk5QNnpKTDZpeVBONG14dHl2ZC80WjBWOTcya2lQdFE4NHErWHNSMk9LUFBlK0MxVzliU0RsdklmSEw1YW1lbFUvTkZjOUlEQ2Nyc0NQZDlrRFdVL1ZyYVJSTDQ0eEM3aDNIaUlWTllwMVhkejBDRnIwUW9LWFFidmhuckV1cHBXb3NHOUhFdjVTbDZkemRjNklrUXFKTGtmMjVDNGNZV0N0VDgzbnJOc1JoZDIwWXNBS2N1TTE2U0E3bVo0UTRyZ3lIeXRIRlNES3VUbnpUNG9ucGFqR0JpR1JER0QvZEd3bG5HNDY4WjBURUxCcEd2VERXbWlrOW4xTGtVaSsyOU5yTFVVUmJZNHNoNERZbGIvd1dveGhTRFNXdXQwZ0ljajZyb1Z3TTl2UjVEZGNnV0xqNjhxZE9uZWhoNmJaOGFpdFlkYUR0NGRWRG1oc2JNWEQyNkhGSnVIL1ZDSENyMHZEZHBrbDhmR1JVYzJ5ZC9QcHl5QkVnRDRpZnIwd0FLL09odFJpR1I0aGFQZVROa0p1ZXNUeU1CWFlROVJLMlIzWlB0WU9aemxOMUVFQ0FtYnRDMlIveUY3MkUvcFVSVXdKUkJITEpFcEZnaUFrNGI4YnFjbWhZRnpSTVI0R091VE1xUHg3eE82RHNYM3cyY0t0WUlBd1huSmFrSVZCWmdudHlhcTFjYUlwWTRQVzVRZEpIcG42WjRXdnRrTDhmdkxhVUltbDdPQXVEKzJERnVHTCtWalh0L0pBaHJTTVNzMXN2eG5PWkU2ZWdSVkdlQTcyTFNtOVZkL1NNNElWQlIzbUJyRDE0c0cwTTd6SjBaWjY4elpySE1qL2NwMkRNTllUT0FHL1c2NldJay9rQkdkaDE3S29SL1hBNlEwMDRPbFREcEhNNUs4OTB5ZGVscm5BbkU0U00yQ1IrT1lJdkZrL3U1WFQzTkc3UGw1aklQeVR2ZDYrZ0NJYk12WmhjSVdHZTJhQlZSMjdSR0RVQkRXQWR1YnUrRUpmcElqeEs2d2FCZjk1NHhadTAyWENTZk9oQWJSU1hVZXZMc3dpMjlHQVh0d0x5NFhHZURjYW9nVzFCd2dpMENhTHlibWJFMGdLSGZyRTNTVUhFQVI3MnpKYXFqTTdnWEg3VFdQZ3V5QWRHUWEzbm5sYThEOFJtaXEvcHZMOHZ4Nmw3eG84TjJQbUQyZkVOZDlkTGJCS0hHYkZtd2JFaGlPc1p6YS9PWi9OMFFTWklqOU8wL0luR2twQjJYMWlDYzk2bHNoYnJwRlY3UG9Kc1RjME54aEhvaUxzYXFwMXNSdUp4SUpxek1rVmlQWjBCaG16OEx3K1ZNaWhaZDBsd0t1QUFDUVFNQ2ZxeXlyNWFMVUk2WjRZak9McWNiaktwL1RwaDZ6K1c1S2RjWXhSdU5RR3UrTzR6N0Q2d2dyc3ppakpUS2t4a3N2Ymk0aktwOWpnTzh2SVdRNWdDVVpOaXo0UW92RUxZN0dyQkh5dW5hbFBhNklPWXFRaXpWMzV5M1IvNDVJRHlUZ2RueG1BYnd2OUNFZjBKbGZXVHdDandDUEEwSVM0a2JtTDgzbnJ6S0c5L0MrSTJOQkR2MjF0NGovUXc1VE01ZWhNcHA5bTFkYUNyWlMzS05wMVNObVk1Sjc2bk5ZdUVHREpEblZSOW4xY095TWtCVTNiM0RqdGtEbGtsTEVtY1lKbnpoczZzaGJWK1A3YlF3TXdVcllDdkVHdDBIbXFsY2syMDVEd2lTektCT1NwMDRwQkY2MFRXK2szOXcrRnJvbTk4U2FTMEppaHpwM2ZIMDYvTC9TSXJ3NWRMOGhvNTcxZVNkS1d4emRLRzJPemx0TXczTDFJR0RPbGFueW9pUnVmWEpwc1hncVBhRmZyWEZ1VmJFYVNlVVg3UUNNb2xOTUpTd082OFV3MHVhMkZyZEIvWFpWZ3g2UjRITEtIZTE1UnNzdUd5ekEzQjlhOUVleGJNdWFydzJiRE04Sk1ETUtjMnVmaFducys5dDlnYXdQOURHc3MrbjFCVnRYMGtKbWZneDgzWjgybGUrS2dwUXppU24zaU9YamtTSVZDdmlFTnpQZXpMWDZoZk5DbUtVaU1wUzltMG45ZExRanpDT2pOTWRZeXBDOGMreWRTVndTRThpYVBTNGpJeWRJL1ZBbGUwOTV0Vm5DTHZIVmwrN1JFanFxM1Jvb1dIKzFHRm5hazcrcDNIL0d6VlF0UEU1aFBoNk5Vb2I5WHNxdnA3LzZXNW9PMzBNY241UDVLUy9qbENiNTllQTlCSnRqcnZwaU01VWJQSVk4cEFxclE3YTNQSjY2WDRTUUVBYTYyREhYS2xBQXRSczIwRG9FejF0QlF3NVI3aVYyWjYvMlNwSU45SEQzSWZIaEhZK1hMNG1DOEdsQXByKyt4VXFkcTdRUFhBR2pJWmJKdFR4a0M5MmUrUHByTm8vbE9VSysrSUNSVS9IT3lOMnEyOUZ3OVMrUnlFM3FCa3lhR21pV2U0cjZpOHl3WktwaGdwQ1duU1AzL1h0TVR4SUtXRVFJRGNyS0xYeEUvTExmUWs5TElQTXJSZzYzNlVBcHdSK1RIZTlKSkhZZUg0QWpXQ252QWNtZHRmWnQ5TXJsNFFxRVd3TjcrZXdqeE9SZXlFcjllRjhscEtaaWQ5NmZvZ3kwaWZybHlxTmtscndCUFFzbk13RnpEbldEVHd5TWlFVHovR3lzN0NxZ3gyWldFUVhFNkdubFdHMUcrL09sVzlZeVdUbFE4QkI1eHdUdXRURHljaVlrWmxIcjdvL1FyVHpZMWg0YkY2UVNydGFqTHNDallTSHhhTDJ4T0hXY25lamJpSmRBc1orY0c0MlBNbjBybzFWZVh3NXNEYWoxOHpMS0ZYUW1ZM0tSVGxtK2xYbyt6cDRCUEJYN3pVYjZ6LzNTUDZVVlV0dExSVkR1dkNaN0MyQkZTc2V1YktuK0Nia2lUU0xUMFZray9IOVBiYXRya1JnS3pncjdjT3J4TVU2eDgxb2dsRGoyZS9wWjE4NkdlZEQzeUhiZkcxaUdtdWpqcFFvTEZXOURxWGs4eld6aFFObFBLZDBhdDN6OHh3eFBKTVNkU0VWTHl0WkdodURsbzZKdW56U21CQW5mWjNzTjN6REhjQmZiOFlyS2x4S2xNL3cveHhjRmhaa1FCaXNSSG9KRDZxN2Y4ZGtNOGJKcjAwME93MngxbTIvWUdKUDBtWTN2S3JlQitLblcveS8zTDc5WTA0UW9ybVh1NDdtSURsM1ZRUFVpNVI5NGFNZEQzK2wvSEFYQk1hT2V5QWlvNkpHTG95R1dGdDRSOEZHL0krblFwUHh2NnlWQXdzWThFWlhHYVV1S3EzTy9iUG5nSHh1TkQyNkpOTkVEN3R0UmQyNktSTVNpUkxEZlV4WHJ6bHY5YzhJMHdHV3RUTEhwbGRXMXMzWjdHdldTcGpzbUV0RjZFZGN1Y2ZLdEJZUTd4NHNlMWhPSm1vWUY0eEVyK3k4aEFSWmVIQnVNdTJmUTRaNTZTMHEzbHg4MzE3UGxDVlcxUUkzSXFDZVMzQUFpVTFDaEJ0WXZpbldoQy94S3BwZXp6eG5YRTlBWkd5eWhoZHpsVFBrcWZWbWw4RVBVUitPMVc0cEZmOUVWeDBjNmhxSEVGZ0FCN29JYldSTWpKWndxYllJRGY2TG8rVy84aEVpOUQzU1dJVmx2SXdCTWdMOEI3TlI3ZG8rY2o3V05HeWRzL0lEdjEvalZJUTVVYzAwcVJLaUpZaEpjYVU1UFd1VGhWbVJFWmhYa0I3cDU1cUNOUXNycTZ3QmNPemFlcHNkWVhFODRsL3NqZnJiOUp2dGU4QnVDaW1NOWR2LzJyOUp0eVkrRWI0Mm4yVk1ncTlKOTVCTkVZWVcxYnNtTjdLNDZjSkp3MUcwNXFXOHBhSVN2NTBkZW51Ky95NVdCZitDbjA2ZmtTaXhwdng3b2J3KzVZTjVVNzYydGNGV2x2Z1BsUGdXNVhTMUlsaWFNZU1OaVVZUkJ5YllURGxDOUNvZS85RjYyUkE3aVB2akxEQ0ZiNEVBUGhUbitVSW5HRnkybzhwbzkxUkFTK1hEa0U1QlkvSFhyWFBaRmgwcHVYMTd2NHRjNldOc090VEhSRmp1MllyZGE1SFo1c0ozNTh3cjlVL2M5eHdkMHhnSlFlS3hnSnNuOHlSRlkweUNja0lnREhxV2JWSWtVU2g5TWFlQWhlYmN1Zkc2YlRudGFNekFGOWlqMmhTeWFpU3pGQk1GMFRMT1ZXMGdYVjJIWmM0WElxemJOWVErRHVmSjRQWTR5d3RGRkJUOVV2NThVK0M3aDR5TGYxTTVFWCtPT1h5cjRhTEs5WUM5aTU4aCtCM3d3ekY2U2FRdGxPalBaK2s1WHVxV3hvcm1PK3hMRzlWbXNySHRIdlczV2lpS3RDeWJGQlNKUFJDWWlkM1BaNjJydENkeE5qNUZTem5WSG85djBENCtzWDhJbEd2cXE0T2xMV3ROdFFwZHJIL3pETGlua0ZOMHRTajBSM0I2b0FKMm0yNUNrTkFMY2xIK1Vuam9tRmgwWGdnY2thVkpwYWt6aVZhTGVJcmNLbEpsZlZITHFaeTYza3AybER4cjRRUnhMejdNMmtmYmR1eVZ2QmJLSFhLTUc0K1psT01hYXdzTnI1YWl4dnJmTEZITWV1b2xJQXpUNHQ2ZVFPckFYWWozZnFDR1ZXUTV5dEsyTmFzemJMbXZtYTFoRjVTOXJ3SGthV2pSdU5WenFic2d5MCs3b2IvMmZTQkpzU25BUHFmSmhsbUZaMzUxcjBjdEJQSWRUOGR2TUo0eS9xNnlJSkdzdlQ4aVpDcXMreDJvU0tXNm5zM1VtVzUyODVwOG13aHNENTFtZC9SSXc1QUFzTkJCL2VwQTl6MWhEU05wNjhtL3JhN0MxQ3ZsR1lNNVVXaWpkb2tUYzA2Y1ZsaGljZnhROXM1ak1JRUNXWDFCdnY0eDR4OG1oVWYrbG1SaC9rUTY3WVlmMWNOOGRPREMxbk5aSjBZM3JpQ1MrakJ2M3gveU9KUGwzVUNzb3FoVzgyeGpaK01UVU1sSHh4WmNKS1N2ejF4bmMzQ1pIMm9vYitJQkVaQ0FjRlh6bGJYQ1JtRHl2REhnbE5kM0dvbjBRamNzL3gwYlhCR0hBYVUrU2poNERHa1hPcVducisycE5rSlhrZG9UTDhaWkp0Uit5bC9ZdXBhWXhtQ3UvbGtmRVV1all6ZXBNN2FrU1FoQkVldnFRVDlYK3JVL2ltWkRxUHZ4Qy9XakZmZmVERnVVTkZuNU9IN0UybEl5RXBZVjRBelpYQmFLckhYMTVLU0h6dHBDVFpFeVdIUWtYd2VjQnFQamR1T0o1SEZaMzdsazRoOHVubVZBTERrSndyYk5vNnRtQ3hyQ2FmK2FvTVQybUthajZuQ0ZYQXFhZHo0Y1BkVkhqeTlHZENaRmppMEJYUTQ4YnoyWDZ5N3hUOEpEbU9YNVZWV2VFcUdEZ2tnMW5lNTZua09RK1JZd29KOTNsclhsODdUeVhUd3E0NWJIUHQrTWtTaDdlbVhIQmxkbmtOb3FaV0hhc0tydGpsSDRLNi9MYWduZVlHdEpsRU5BcXhxZG8yVUFMNE5kdXAxM1pmdytubnMwWmdSUFc4L3pXbW9wWVg3aG5xQXBLZ2I2ZVgzanFFaVZWZ1FUZGhJSnBRMUN3NmgvUm1MKzhwQlo0Z3drVHBWM0p3aVdNY3RjYlpaQlRkc3cydHBhdjFrUjNzQU83aDAwNDMvQ1hwL3RwVkRaZDZtT0ZJcjVmb3QxK0FndThzREFHUWljTzgwWTB6Mk1aaEZwN1RVQ3VhM1JQL0Jobk43aHhJaERGcDBhQzZ0SFJqQ0tEeEdqV3N4NnM0Rk83NHdGd09lYmF4cVdudmZ6RlRUaTk0Z2VpK3ZDZHA1bmh4N0drRzNMQ2hRVUVTM1h2TW9TZldFSTlaT1VGZEVKUzE5VmZGTzBXeE5wVmdPdjhvWWJpUVNTTTZ4N0gvUUpuQjhtalQxLzlzZWhmS3dRUGk3WnpYRFJyU01LaDRTYU1yVzc2WW9rTjhNeHkwTEVZbjVOQ0FpNktGa0VvYlBDYUhPNkVZdlY2RWVUZW15dEdTbHdEVmZicklxck51VTdNWng1ZjUwOFUwUUVlOG8vU1RsdkJjT0RpenlnQXZKK0FVQTBoY3JmZjh0TWYwU2Q4b0RNQXhqemNOZm80aVY4dU1jeFZaSUY2OEpTVXhQa1liZ3JYOVZpa084Vmcyb09rMFJpZlRPUGcvUEVmQ05OS2w2R2p3dW9zTkpwQ0tMOUhOdkRpcWtObmhGc04yK1RoZ1Y0dG1KMGhuOUpQdVJ6RWg0andPaDRzL2F5WjBiZjlaWmlocUNYVDBkd21ObzZvZDRnSjNuZXhvMWVOTWE3VUo5MHhZVFN1M2dvNHZPS04rallMNkJMMUpTbHF0RlJVUGF5bXRuRklYTEh5TU41QUxsVjByY01hTjVCc2crVjRFYTlsRUltZVcyZ3ZBT3MxT1NTYzNwcDhjeUlZbHE3MEY3WnBVTGtQbTBQQnZ2N25FUjhHai8zczdScXUzc3NFMDJRVmZITXlMZlVIZmZ3WmVhTWZqNmoxWmlYZWNtdGRFNFd2ZkFnbmhPSXVWN2h0U0Y5UkZiVlozTnhIQzk4Nkk3MWhrSlBqTW9BNE9CaXZoSU8rRGxhTHNJbWYxWUVTTnE0VVZENVd5R1pwTEcrMXhXMjgveGhjR3oyZTh0U21vOHFWTDFMbkdNRkx3V013em1hMVpNQmd3SFY4SkNKekcrVEJ6Qzg3TTNTRVl6dlBqWUsreDBkQnhBWEFBSFc2VDdva0Z5U0NRWnZ5TWlmcWxqWmVmTHVTQWRCVmFBTVV4UFBvaTlPUmoxSnVjK3l2MXVaeEpzZTFFTEtnaDJQOUV4UHlweUIvbWdCYUpGOGpXSjdSWXRSKzA0SnBqVzVmdmxYZXhEb0tXMUtmZ2JPYnlrT3NlWUwzT0kxVEF5NnFiSHdZZXUwdDk4dzVrSmUxQmw4RzlHMW0yZWpsWTgwcDl4b1JRL0dTV2lUWSsrMWFBbGNLZ21jRStkOVNlNFhQS3h0ZEV4Q1BLRCtML0s5ZVNaaEgyNTd3NURoWWFTVVg2cFJrVnYxK2VuTkQwcEJQOTd3Q2JrS0hLRUV0NU8rYy9abWRHa29OcWFhUXc2UjFnWXU1WGc1WG83Y1VlUGJlQ0tEMEhHL0loVm1HSU11Njl5UXo3Z1pyV0lyYTNiVVlCNnlGTFhtQmxJUmhTU1BYRmdaTVArUHpkczdpUFphZ3dRRmpYN3IvZy9YN25XM2lVTVRUc3Jlb3hjdzgzbmorWUJQdmFuYVQ4clF1ZUxtQVdNclI1WFJ0SlgxbFRiZzd1dm9wZnVDRWh4Q2VPSG1RNWlJTTMyTUp6cVNUZEVJaEdMU25uMVNVYlBtOWQ2MFRSbTFTM0NhR2FuTTVOSVo0YUVUd3JxaDdrSG9NS1VGNHJqOWpoWmRvbVppTXYyYUk2VzNPUThzbW5VNmFPbWcraElRbnNBZ0V1QytTQ1liWWVrYS9wQWd2Y0xzQlpsMjMrTWs2enlQMG01N1dQWTdLZHBqT0JTcDJ1S1NrQkhjZ2w5Q1Q5YWxQYTdaYkJzejc0UURleFJHS09TZE8xbk9jQVZrQVJOSEIxdVlCSFBCKzBvS1lHeDVGTFI3N01IeEdwNXVzYTFXWm9xSUtRZkNGaXhUZmUySGgyVlBlempzd2JWR3NLMnl5bVNCcEFTdXRxV1RyTkI0MWdYeURlU1lwYUVDNUtKU29aU1k2VmJhK0FnSUNBNXZlR2JzalpYOEhwZ2RhcmVqelF1akIwcHg3dVpsNmpWTklvVlFVOVdjM3FwdlFpS3NNY0dSV1ltS3d1eis4RDhxSkdML0JML0dWVlNTYUlqTlRCdmhvNVFSdDltc01rdS9yZXN0cjBoRUlxNUF2WDRmOWt6aFkyNEZTUnZXVW9wemZMZXpveWhTOGM1UnhFYytpTXh4K29jRGxoemZZekl2eksrakNIT25nOHkzQnEyOUJkWGpjMXJzL2QrTXh5dktsc2YvcGF4dVFMV295Q0RMZGtjM3NRRml1dlgwQ3pZR3VHdTlDd1Zlbyt4NkFDNkxBYzFLMTFqMzVGdytFVUVtdE5sNFpwd0ZqNlZMc2VkeVMyRytrd0IxTUpnZUhLYWoxa3lMUUFpcFFnSFNwenM5YnJkejZIQ1lHdWdTcXJtU3I1MGFURVJHQzVFSFlub3BDTlFKUnZkM2VnQStDYk5ZNVBRUnpTbDBTRDFROW1YT0pWWno2Uk9mNEJqRnBnMkhwdHJtMGdDQVdMZEQyVkJrRVpvQkdzenhZK0tWMU43MXVzMHVab05Obzg4RzlnK1JkaElGekl5aHRmZDBvZWNJam1RYTNGU0RoekFTamVEdWpRK3FLa0pQdEgvcGZXUXJsUGJsdDhQMGlRRExXNDNZSXhtRENOS0tQdmhYWWFFVkdtK1hhZ0gvNHVxWEpRTkZ0QWdQU0xKOSthRnoveVZtbzN6NVRpbDZVaWtMSlRiT29QVFdOb2kyTTllb1BRcGpFUmZ6bVNFNlVCa01KWGU2Sk5lNUIwSlI4aVRqU1Q0SEFlNDk1M0VpMHNVc1dNTFRDVXZXRDg2Mmp6TFNoRGZLUDRRMWFJYlY0MStrTTRZMWVYSXV2NnJsa0FYT3lDWEdnVkVyTVpnOCtqaDZQaWdoaTE5QWxqS09SdHlZN016MzBDZSsyUUhvdlVyWG5tMHBydnBJME5HNnFpOGE4Y0hsZEpadWpzNVdtWU5VWUozVGpKbkpoeVV6U3BrNnJ0VitqUWdWU0RtSTIxNGpkVVNSdWRpOHk0dTB2bjJkWFRmbzZxRjRFU1F5MjhCUmZkNW0veEFLNCtlQmFsbHVaSEw5c3V4b1c1NkViaWR1OEFSa21zRTU0REF2VmRXdXlEUkZpZWdQY0NzanBqZE1BQS9VQTVWU0RhYXlsSHkrbWhaTzN5MkNZMjBXT2dlNDNZbUswVTNISDBrZDJPZER6SzA0TThqNVVUV1JXZVZaWTJ4T0RFUlk1UFcvTytBbVhvTFJma1ZkZ3ZVQWhpeE9qRDFkeURmb2dqT1VxZm4xWnE2dFBHTTN6SEpBNSsxT0QrZlRveUMvSHhUaG1DRmFLcmtwVTIrTHRja1dhY1NuNm83N3RBYk0yaHZBczI1Qzk4QWMvZ3o1MExzbEhEejEvdzhqaFljQlc4U1l0OER1dW1DOHZXeVE5R0ZOeDVqR05QeW5KOGJKbGNRQkRyMzJvcEt6NnRqRndjY295NHJPdlE1ckhibkIyRjg3U2ViVzVNSUxuZFFPekRNVmpZMEpGaFlKckNaekxFR2Q0Zm12ZWRrQ3dCTG9UaUZyVlRlZ3VUUmxJL0orblNqaCtvUmlrZG9RVDhMcWlHeFVDcGZSMkdYYlpHeVd4dWRZUERPM3hyVmg5Zm03YklKSU9EY3NkS1gwRzdZVXg2UTBrS25QTE1xWlpYdnJRLzJrUHVFeWcxTjIyZjU5MVhMQkQ5QXRjSlNTdGs4Y1RpemM3TGZuYU9NUGlYY280Nk5VYkZwTnJMUEthMUh5MFlhZXlEM1BlaXRSM2pEMkFwT09hQ3cySUw3bEZNTituVjlha09rMFlZQmVTMW1TOHE0eEVFQzNSNzRQUktzaWU5U3dWV0VENWY1a2x4dnRYOHYwdmZWb0QyVHViRW1Qd0l2cWN5enMrdzY5K3Q1ZkRNYWgxemxEOUR1aDF1SjZBUkI3RlIxRTMybDBseFl2Mkd0Yk9lVDFrODVLcGxSR2FseFRRWXpncVBsaW5RNjFuaUo5L0tZUWZnenV4ckNPSVN0aXhFSkZRcjk1eC9EaWplYUNXZWVXNjlFbjdmQ2NWUEJ0TGNHYk1odmRKOUx5UGNsRVJ1S3VkMGlGbTdzMjdGZm5ROERkN21IcVdyb2xsU2NRRXdJVGpxL1FBTEVsNVJvU2s0MDdJM2tmbGQ0UnpRdnljOXhhd0RSTzhLRHJVc2ZCVWtZdjl6VGJsNld0eDhNSzNQa21Sbm9oMTJJRU1GS1o3MmY2Vk9hOWJIbkNEbk5NazRsUkRCUWFMY0N2VnorMkgzN0JnQ09yTitvVGwwN1NmakxGUlFDQTN3TzBaVjVoemxiZkZZMlJYc2NJTU1FcmRXdllSVWkxSVZVNzZNR0FabzVEN21RcUFwOEt6MXNubzJCRWZjVmIxYmhjcmVZMFZlVkFFNk9odlNhOWVGbnZ2YXlBdHgzMWg0VzQ0OFpDb1JKKzUvOFV0Tjh4WXNhWWI3YkIwdWxqVEx6akpwc0NOT0s5VnoveGJWbVd2N1lBRHhLRlFzdGdZRHU1aktaL1U1aW0wSUFPVU50UjFOQk13YUpwYmw0OE1WYXBaVXhXWlU1Sm51M0ZDVU83NjYvTE84cmVnQi9wdG5zV3c0Y3FjSmNvcFEzNFlHWHVyTkRwTG9NTEpKVk03Ri9PREh5cm9ySjBFcGNPTEdSY2xjNmRIUDNFUURSeEFjempja3hrRlJMQUF1dXNYbEsyZ25tckFDTDdwNkJTM09nTjJCWUZFbG0wS1BuckZrd3c4Y3lLeWoyZlRmdHJDeDdVQlNpdERQaDY1M3pmT0VHS1Vack4yanJmd1hNdHBwMGdLYzB2bk1wSGpaTTVIYzlTUis1VUhXcUFCZ3psU3poUHBMOUkzMEFTRUd0OWpVU1dEa2F3azk0WHZKZkhzSGRURHF3b0ZJT25Jdmx2RzcwM1lBUy9DK0NmeGtCNUFkZ2lac284UXIzSXBRdEJrY1V5aDVSRDRHbm9lRjhnZWw4RFZwSmZHL29kcDZDREVLVTlld3pYUG5XN21Hb0FOR1R0ck1PVkZXV0ROVGVaa1U1eTZwQ2krZjZseUhaZWlqNmd5REtjWGsrKzV3c1FVSDZpOXhOWk5EZVpyendOYkl6WkhEeUp2NFgzc2hYNWtpc09xK1BEc1JwUU1CYmxzTkJVRjY2Ylg3bW93U09xZFdOSm5wOVNYTFhHMWZxSC91U2orOWJiV1prMFdmTUVtdFpDZUlUOVFyTGp2TjIwcWVkT3BUR01KM05mUTNjczBUYVRtYW1pMFZZYWM0ejE0a2tBc1g2WTFvU2NNdEFxYVExd1p1bXI2QnRkWThaNklKOUhDRENFZDNGbTZhajNyY0NxczZDRitMb2hwMmFkS3FXUlcxdm9oQ1NoaElqLzhSTCt3UlJFUFlpemdzdmJxZXR4WEtXTVNKYVdVa3BWanlEc0FMVURIUWRTb3BvTStGaGFFTkRnRkZ1SlZZUGtpOGtvVEFoSlY4QmY0MzhLbHVFNDJLQ2xpTnNUQTR6aHNnTTBYQmZRaFJpMmlha01jZEsrS1hIS3Z0cWJvUEVKejFnWUZaejVIdFo0WlR0bEFTRE0wNE80WnBjSE9uWVh6NHcva1JqM0xHWWN4RWowT2hGeVcyYm5HYlZWM1ZKdXFraFJJMnBPM2pVeUxFTTdyQnVlRVYvMjhkWkM5RVhsY2d3TytZa1NQMVBhd1JNaUVmM1V4Tnd6Tll1K3E1WlV5SkxsNVlYSElQZ1FmZVNobk10NEFLcnhyeXZaT3Y5aEdNek42Zm43KzZ5WUtFVHFLS3g5UWhXbDUxY0xXOEVITXJxSGc5NWZjSEpkTHUzdWRaZERzZCtFZndoQWo3MXpxSVdpYVZ5VmZhdVlxZ2Y5TTRyOE9jUDZPbldKUjBHbE10SlF2ZlJxcUM3QlBzdzdibFZ2TlNuTlBzNFdYdXdwaXQwT0R0alpNTmc1dmZQTEhWS0RzRWdvMmVMQ05GNXA0eXpwbUxBektuWWIraEp3VHozZUJXcjk3ellBY2lCTFNjbU90K2k5ZGlpV1Uwa0tHdnJMRkNjcTNVVDI5OHl1cU85ek1tWVliVVI0WjFqWEVmWmlaRHhGUDR6Qk45d1Vlb0lvV1RaQTF6S0lXaWpGaVB1eEMvZC9MMGZPRFJsUUhOazkzOVpQcjlsVnQ5aTZUNnlPbkg4UHRTZjRmWHZpeGM5ZnpMNzJLVVBpYzltazh0b1Z0Z3RWNUNVTVg3M3g4anhSV2I1LzAwS2xSb0s5S29sQ1B4YjNDMXJzK2xoN01DS0VQZWZBT1ZlNkl3SEk5dFZLdUZVVjBhenptWFZGMWFxK1d0azY1U0NwaHlKWGRpYVMwNEwreFZrcWNGQ2VocGxFcFRlemRiTjRjbm1SNE8zYUNwVmJvYlY5V3pnZzlpWFFXMlRpd1FuaTlGd2taUE5aTTZqUS90L2owZXNpS2VxcXhnSnREWjVvSmVqeHI0YUxvTTF2M1RQTjZISXFMeStndlB1Wk5BR3hUL0w4cXVPRDBxdXlOa3NNZGlTWisrS0N4MzdrS1V5R2RiODExc1FwbzR6cTZOeVJSaklUVUJUTDRqeHlLR2JUbjFkYnZoMmF0RU5vRmMwQVVqMGlMWlo5U05NVHhOdHJ2Tkxsci9KQ2xSbHhIbTJXWTUrWlZEQXhMazlic1VtM1A0TysrY0pkdG5DWnRicVhZYitQTk5oN05xUkI3dzVFeTR5L240R3lPa0paZytEQlNPdjlYR3E5ak5tYWd3VjVaUzZVM2c2bnZsSUYyMjhGVDB5eUZucHJ0cFpoYkNGTG9PT2U1ZmR4VkIvVWRjTkRQdllFdjRVbnhkT3ZLSXYveDJNMklEZjY4YXZySmozcTJxUThFbW1uc25aVEFGaXdGSmh0N3YyMkt6Nk1mdkprR3l6eEJzRWlvc25naWNsdW9ldzB5UElvLytoSWIxbG9nenlzaFcwd2VsLzBGU0ZHQUNDb2lPMHVqL0hBSFd5ZUhqUS9xVnRNUlU3UjJJZjI0NlZCdU0wM3ZuR3ZtQTFGd2Z1NDBLd1Y3UnhjdGtQUjVFaVF5NnFRMFZ5YWwzK0tjS3NtL1JiRE9PczAyT0NIU3pjM0JOOElNTXVVQkhKZ05LTVRJbkJuWXhPOElVL011S0EzbHpmVUJsb3BaeDAzdnNnZGU3WEtEb1BKSGlSdlR4SFZGYjRkdFRscFN2dFpHQTNLcmRCblA0MTJaekNtM1o2Z3AyczhNaFFkaUU4amlMbE1sQU9LbGJ4SlNaZWJ5aEhzd2k1UDdwVlpBSEs0M2hwSzUvZjZ2b1FLUEZaa2U1M1hUQjhPU3hUTEpyVXBCVTR0cG1NcHFNWG83MkZVWkp2cEhLNzBTaTVnN2szT29IKzE4ck9iWVBuT0FGMmhhRFN0Titnb1pBcGxYbm40bEh6MGRTVjdLTE1xNlAwalV2RlIwWWlLVmRNV2tZK3NqSzdVaTJGWnprUG9RQld2TkFQWUNJZGJQRUl0OVN1Y3ozSU1EQkJIemJ2Tm1wWWQrY2Q1OExJODg4Zkg5R2FoaTNJUnhia05KYitUTzZ0WjZVQ1hvR1RsVmFhUHNFUWh0SThva0N4QWNVeXpFUlhEYXg4TDNnTEtiNURlNndubi91S2JvTUpHM1dkS2dXVXNpUzVsdHduSE9OODZkbUpCTU5EdzZRZGQ4RUV3dVhqS3FJZDU5VUs2MVoxdEgzckpSWTkyb2s5SEtmNEVlOHgrWncrMDNjY2FkMHFjeXhkaUVLQVpxYm9kR3RocDhRMmFNbFQ0THpYVjd1RWkzd2M4UkFPSldneExzRldMV1FaRG9HQkJmZ3QwQ3dZZ0U2R1pvR09YaDhFdVJFT3ZyeFJTYWNCZTBPTmNKQ2VHQjI2c1QxUjY4TmxNdTJFZEVoZzZ5U3ExME0veXNYcHA0dmJobEFBQy9kck84Sm5ROUFINjdvQ2FyOEdncTlOSm1vaDdRaW52Y2ZqS1JFK01kN0xSNVRPVFM1KzB0bVo2S2dGR0toYlJCeFp2OFVxemhvVlF2c1dWazkxR2ZIWGRUQXJRWEhIWEkxcmdCYUU0c0pRRU02MXh4Mm1qY3dEdlhTQnIvaVdYeTVnTkFJeGd0WUZjY0YwSEMycXZqMmk5T2hlVXNOeW1YZFpXSFZBMldKclFPQ04vVWFzWS9lUXQwOU9lWXYxT0YrU2ZLdmNLM3o2eDh2dEhZamduS28xYXhHMmNVS1VsWHg2aHdSMGpaenl6NWFlbmxpQW9sTFltMkgzQWtMWFZFNWU0dVdkKzRKb21QZllyRkVzamRyYlRFZm1LaStXeWJGVHorTkI0Y2hVQUV5K0xFa0pRT3lMenFHMFMydTNyMCs3Rk1kSXZDTmw1UTY3NWlDcWo0ZlVPNzZrUnVBdzNaV0J1Y1c0ZkhNRjIvaEtpM1FwZ3pST3BGOUFiU0oyOWVtd2RMNTJ1WWJIdnlyQjQ1Z2xEd0x0L1RYTEc3NEdiVlpwZVM2Nys3dDJTQnhydEIwUDBhc0RSOUdLODFyNlhsdWRETnNadEY1S0FZWnROUVpyTk9vbno4M2EzTUEyeVNDUWlCb1BVVlFRQUFNUDJLam12ZFhnRjliZEFqZTRXbmxXQ1pETzUyTTNtQ0t5eW1hSzJTdEpCWmpxdTlPYWJKTFVRRmF0VThHN1REZ2hOdndsYzJuZzVBSXdsSEEwUktXWHZtallwcHY4Zks4TVA5ZE95cWxHMWpPcmY3ZWRNTWYxaWdZdUtMaU9IZExaQjNxZHpIRFNoWWZwRDc3dzFYZFBoOWVGSUw5MkRjckJ2M0JrMDNWdnY3V0FiVXVPSzVENWM4ZEFHMWRZS1pGeEQwNjAra1V0NHgzR0dCMUlmMUtBS05xcy9Vc0JHY3FoMXYwdWdTTE01SGx3N1duUW44ZXd5OW1IZnNaZEkrOTRZSlgwZ2lwNjBrcUNEMU9CcnNBT2pJeGVwRzlZNGFjcFlLdW1POWlMY2YyL0xRenJGakVXa3pBM3g3VmZ3MkNnMGtiOXZzLzJQN0ZEUnZSV29uMTN1dDJ3cjViK1ZBaU1BcnJNWEFsdGxDWWgzalNtZUhtWHRoOXpwM2I2N0ZCc2d5aHV6YS9Ua21PbjlsN29ELzlrb3FHMTF4dVJjalVlWk5GNG5LZDQ2OVNPTTVHeFc0Y1hiOTk5dnNoV1MvdGsrcmdLM1RleElBQkZjd0ZuRzZGMktyZVRQeFgyakZEL2dRTmV6RjBFY1Z2eEtrcmJXTEJyVm9sUkFibkQzeXRkeE9ibUg0RWdJRGo1TXBMbVhSS2c0OXM3VjZnT2xLblB5UWhkRm5COFgrU3gxRzh2Ui9OdzI2ZnZQY0ZBVVVOOVZVYnBtSzh5RVpZdjNTQUNBUEdvSzMxUFMvcmRUV3ZUclROM0w4VVc5Sks3N1BSdVNCS1YrSVN6R0kzN1RJZ01tTnZGWnJlMGZaYkRIaWFiamNuTWI5Vk1uL20zOHRORkFxL3Z4R2N0Q0tyajFPRkxRd3o1MmZGMFFWL3UwUWQzdVlEWFp5NTZ6TEtIOEpDOHIrQXNQeE1QUUwxVmc1TjJRc3ZrbzFIWUk0OVFWQVZacDJhTzFhWmVkZG9jenlIK0F3RTZDNW54UlRYUGhmd1ZTbmVwZzg0OWx1K1dxMjBRdzRCb2F0dERTNWQ1NG5lenhrU3FtQllHeG5iYWF1NzdzSjZ4VlRRYThKdGFEQitrTmR1ZlVUcmkzVE95elBOWkdNUCtOTmM3MU8rbGlqK0g3eVM5MmhxTEQ4TWlRbEFqajVhM0hIT3FZZ2I3blh1N2tOdG43NmRMZENLTEZJcEpVdXdQdWJOaEU4blVIU3pjRHFhMmpwakd0V2t6eW81QmhCanFoWjc2b2FFT29IekRXbmZMbloxT2VKcDBPcytQVExiWkNoZnAyTU1hZW9RSjRIQVgvOGFlbGw5MDdpeHI1SW5xZ1dLSTVzOFEzek53TzNnNWh0VWlRejNHOGQ4ZTlPNU52YTVDekNNQXVwL1NweXI5QTRTMUNCQnZJb3dtM3o5cFkrSk4rYkdkKzZLSmFIWnJBdmt5bjByL3RlM3cwVEJtRXRyOVYzSTljcldvRWQzL1g5aUZYdXVHd3c3blNjdFFWaFNZRE1RYzMzbFp5ZlR3VjVuUWxzVWRNSmV1TjEraTR5aEFzWmN2VUtPUGxadDljNEsrN1NMSStBemRBWmZlWHBLZWl5dkEyWHFscmxJWVdnTGV3cWtwOHkzVi9pcVEwZTZMNk55N2hBSnIxZHdzSjBkUmdUNndsWVJ1WndHRjFlRURHeDhmcU5nSGVDMmc0eGlGUkwxek0wRkpQWHB0Vm9pV2Y3RU9uKzR5RlFCc2ZGdDZpNm16MnlCWU1Dd2RmeHg3cTl4aHNEL2RPRUJEWFhubS96ZUR2Y0s4azFqM1JrSlZpUlRwTUM4b0plKy90cmVtWkRKY25SckZTSzNsR0sreDRhbnZmY25aL0l0NXJNN1NncTlvenJNZ0hsREZkUGFJT2RQTU9Hc2xUd2l3TWZ5WnlaZ1Y4VXdwQ05RVUoxck5JbFBSaTJCb2ZETnh5MFJWYzl1S0ZmMlAzWVZLMzViVEdlQWlINjd6bVZXNVFEWm9ydlBXenF4bUJOZmJiTDQzc3ZpZEhib1JFa01qNUhuVWRobzVFKzdYVVM2MHlZdkxORHE5RGZqTjYyVGhTMmp4ZWZ5YWx1UnpJWFlTRHpPaHdWeXpuZUhtd0J3L0QxR1E4VUpNa1QvSWhTY2l1U202SVJ1SlU5MWdCY2lNZkVFU1hiZ0tmWk9hY1ZBUTg4SytYRjRGYW04RGluS2JhdGE2cFZNMGtmK3lCd1h1a0JQWG1rS1gyK0I5Q3kwbit0dG1QR3ZDcWE4SHhsWjNoS3k0N2ZIUHBwNjhHa3pjdURVWi9EdUUvZFdNQ2VCQVBENnZPa0g3Umk4Qy9wWVN4bnlCN1dHOFpHamZaUTJvOVMxY0VLdXNzWGlGK0VmOG1leFdmcXJ0U3JIZGdLNmlyTE9nT25PaVhUcEpQaWNrRU5US2Fla2E0V2ZIdzREVlNDOVh3Vjd4eW1KaXI5N004a3UvWUF3MUtQNTFoM2tpZmZEbWQzRTB3cUNacXNGTk91d1M0emFJS3RtZkdocjVKdzV2OVdkcUxqWnF3bzEyWkFROWZrZGdhU3pWSWtlTVRGeXNuRWpqQUEyZ3lkZSt4dkVuOVg3UkRGUDVPclFGaGNVQWdNSlBIZW5iOUk1Qytab3IwdXFSdGNiNHBUSEhsYWdVUStsbXIwNDBoWVNiL3NMOHdVS2tTOUEzeUlWNUQ3ajUzRDNDYWNyT0RiekYvZmF6Y1U0R3EzL0d4SDRIMldPZ29tZ1ZwTnhmZ1RDa1Fpc0lnb0pMYXRKUjloS1FURUxlaUFzK1JjaHROaEFTMjJoRWdFdXpQWnlWNTBtVzhGVk05ZWlKRGt1L093YklweWc1RVI2SU5WYUh6emdpN2VnZ2RabFFnSHBtdDA5WVA4OGZEZ01GVmphOHNucElLck1ZbDQ1M3g2R3NFQUZJMCswYlFCSjdUengvVkZZTE9KSDJtTUVQVmZmY0Q2clA0QW5GSzBPQ2pOcEx0UDBiSElUb1Vndjd4aU5iRXQ3R0x1UG1ScjVYRXo3ZWFVWFR2VlBIZVh0Sk0vOTd4OERnNVlzSDVSOWNCa2VVeWsyY0R2dzlOSmlQN0pXazVIcXBmUGRFV1Q5eVEwUlRaRzdaZG9adDNhRitCOFpNSnVNb3hvOHdHNkdrVDVjRFNTdlluUmpqdzVSZFFYaWYzaTVLbDF0NVc5dktWRzRHczdzaTl4aFhZbTJyZ3pmZ2hDT1RieExYelFERHdXZktIK3F6TUhZTWpRejM1ZXVCTjYyWnU1SXIrTVdGeWZ4QUQrSTB0VGFxendCakdEakYyd0tmbHhGWWRyRkxFR3FKY0lsM1pqVHRnSjRwMktoRmFFWkV6N1BCQUJhM0kyQXluR0xPQ0ZPRDRjbGdrWm43UytDVlpCaUYrODE0MTcyT3JNWVVSRHN5SVl2Y1Y3YnYwdnpFSEExcFNtdnVmY2xjQTFBU1NZcjlSOUViSFE3MEs1WFRZaHk1bWJWVmQwMHIrem1yeFByeGx3WjlITXZOS1NQU2IwREVZYldLd3AreDRQT25OdFl3dUdMQm9HcGE5S2xHTWxYVjJVaSs2QXNydjdIUWlaRnlJakIyb08zcW1sclhWbHcrQ0oyRmdiL0J4b0NmakdEbkZvUFJwUEo5QVlFdnl2SGFBTTNUb1Y5RGZnNHZ1ZEE0cnB4VGJBZm50THJsU2dUbXVVYUt6QzVVNWg5YTRacnptK21ndC9jMXUyUDJEOTYvb0tWQ0xZZ256QTRhanFFZjBMOEZRUUtsamNuaFY3WDJqWnNiVUlBVzhSM2VBRktKMDZqekY2QjFicmFRZWRZRUd2Ylo2OWk4aVJIY0xBWFNzRzI0ZWhRcm91V1ZpRTlRamU4dStrN0I3N1c0U0JJSGpmbytnQ0ViQWFJdjlTelNmU2hTNVN1VmNYRHpLZmlRV1ViT1JmTjhLZ2E4Mlo0RlVkckwxVUxNM251aEQyVXptcjdxTkJPNThEbWJuTDRQU2hFT0d6Y0NVTE9CSXg0Q255ZFIraThtcVBDUjMxUkVRWVdITldWRjA0KzFUNC9sOVd4N1p0T0EvUXZxeGhMaUE4YmptdzFKUlFuWFV6Q1pVSFRHSE0yakdLY0JlUFVIb0Q1UjNMWTJBNHNPSk02YTZNdndPM0lWOHRXbVlkSGI3RzVJb004NVRrQmdOVWRBU3U2S0VLVjRYa3JVR2ptZGVTaGRmMWF0aHhmQ1BlY1lIK1prbE5jZ1JSdkdyZG84MndWUUJSa25menNwSUEyeGE5NXJOQW91VUxibGoxeFlvYTM2Q1RIMEl5NmV4aFI1Q0xXNlkvOVdpMzdkTGt2ZitLUnllUTVDS0ZqZmx1Y1ZxL0lMNjVrb0J5N1g3RzQzakNta3phUHBra2ozNTRxU1NXV1RteCt2dDVuY1BwbEF0ZmFnb1VwRm1hK1JPU1l6a0VSdUNJdWwvSnpHZE1OcGpDT2pLWlFFUno2d2JhV2tFeHUvSVZUdTF4WXlTMS9MQ29zdUZhcmlkUWprMXZIUmJCd2V1aWtSU295RnNqQlEzOWhkMEhIeDkrSkpXckx0STI5NTVRa1BOdzU2T0RINHBuYm1NQ0J5Uis0cHc5cDVGOFlnZytGRllYUlYzVjhlb3ZURWwrWGdzSUhnbDZpQ1JrVjg4NTFzdWUxRmU0WVpLYmU0eHc3Q3lZZ0NzYjRSNzZSTitOK09wYkM5TWs5NHVRS0JSUXN5Z2JnUm9VcllLYVlhNnh5WDJ4VDZMODZURDliZS8xaFRReFdobEhqbFhOUVAzamYvY3lyb3hkbzQ1MU5DMnF0VVA3N2pOMkZPVzVQdisybG0xcDdPMTk3Tkd5eGVBd2VhVmNZL0FLSlRyWS9uVnVZY2hzS3dpZEdGNkxCVEtJcDUwSWwvd2lXTmNTSzhCREdxR3JlUTcwckV0cjRDamJmcXVEaDc3YjRRbXdoajhWQ0VKTU8vMUVEcnpTU1ZqWmgvZnBwTWtIUXJOOTc5ekp5OUY3SVdWVEdKNk9SU01rTUlTSzRKcDk2L0lVRE0xVnVrNGhZSFd2Smc5bUxuKzhndm52aGt2aFVrZGtPNkpTNVdYY0c3RWtvU3lyRjIrVDZlb3ZqMXNIM3NtUEorK3VPejlRMmRuVFlDTStDdjVLZHAvbUlmN2dvVnBlc0V4NmNETFlIelhseUdHZmNYbk4wdjBjMCtmaWE4aXl0ZGhVQjkxVkx4TlI4cjkweU90MngvQmdtWXVHVmx4MUtFWEd1MGFEaVh5bklUYk5wT0xQOVBTKzkwWGp0NktLd1B3MnpBRFZ1Y1NoR2daem84VCtpekNsNE5hWjMzU2VpM0Rxei9yOS85YTBuMlluRmJCSDNZYVluSFF0dTgyM3psYzZqOFhzSUxEK0ErdlNwWURhWXFSRGpnejNlTzM3djZzYitLQWY3ME9yZmtYalZhWk51YjEzYWZvM2N0SjZmckYxMVdtTDAyaHVpUno4SlN0RzAwNldLVGE3WmZ0Rm41UzJtQ2N0eDNHem0wUk1TUGpIY0FGVTZsZzk3UzNwaGtvRUxXQjZTeGxHalphdW5ybGZJaTFFOWl1WGd5b1dwLzM1d3prUlZWS0JBTlVHM2VsOWlWR1dVSU9vYVhYcGJlUG1nZG1FbEwzRVlkTjRTbkh5SUdZS3RzWEVCa3QxaTFuUDlzUktMMlcza3NvUVFDSllZTVpoUTZ3TGhUYmNxWlFGeDRBUkVLK3dDQ1RWNC9QSU9RQTBKL1pLU2xrVHY1S0JNOE1qRTkxRTB3ZnpyTytYMEw2cnBmUVhrWkw5ajBvRE91Nkg5UkpLQ2VNSkhLK3FIdWhkb0NPZ0JDdTFFQVV2TUkwOWxEOFhiVEcvVXdxR3Mwb3BtLzFEc0RkOHVYQjVOWkVZS1VhejNPb0ZsUzg2M2NnUlFHV2h5RE5KNFd6ZS8xYlIyV0VScnNaalpMc1JUR3BUWXV4NmRzMnpmQXpuazVxL1MyQ0dZMThYcFdESThYUDJ6OHkxSFNteVAvVU1VWjdXNVJpSFQxbkR3WDVPYnFKTXVyZzVLRVpiMHYyaFR2YU81YzRvTlN5QWN5MkdRaHVOMG1xQ3NnYVZVK3hyR0hxQjRJVGh6dkNMMEY5MWlZRngyQ0Q3Tk9ZNGFOYXlUSklDZ1FXUHJHS2xPTGxPdGVVemJhVndFYzRsM0xqdDhlbnhveTBodW5tV1VOcGZwdFlFek5oTHdmWUNxYkpKUzJlMGtRUlZmODl3a1Vscm85NS9ZYS90NkI5Y3NOcEdld1lTWUttM2ttZkhvZExaMGtNVlRCMlZaY2NIU1pKbnA1OWx2c2lldlpKZ2M0YlJrVjVDWE9sU1B1QmFCaUVjelhoREd0THZ1bkJXL2I5a0xGWWdkWVl4cnVPYTI1Ym1IWTNWYTltZVcvMnY2QWJZcWFKQXdXM2ZyRlBsbWkzUnBud3o5bzEzNTBFUmhBODZhbmFUMkFkOHdmMCtTaW9kWjRNdWNyQk1iY09ZdjZRKysxMDBDN0NKZUNSaFNCRm1QNFlQcHJ6YVlTeVlhVzMvSFFIdlZlc1lOL01ib3RvTXBRSFQzRlNhbi93dVNPT2N2clNySkg4a2tadldhclljTnZZSG1HUEV1c20rdlFtMkpmSkJrc3JROUJQMVFvY0JBZTlRcFZITFJ3U0ZDbU9HbkFpNzZiTlRaRlBzTzVzNHpEMkIzZC9IeFJGcURObnhOZG5pT2c4aUhsc0sxNVlCaWx6cmU1bDVQUld2WnA4S3ZLZXFNNHZDVnR6Z0lGTlR2ejZsblBlT3loWWhXTVVzWFNNK1k2TVNaUWxxOG83b3BIOE1wWm9lYzhzT0VEVVdHV3hheFRaL0p6ZmY1TjJLS05adXhOZlQyMHVNdzFpQnVoQ2d0enVHZ3Bjc3pqYWswdFU2RitmdVQyZVJTNG1MUG00ZlZOVzltS1FMUStNSzVQSE1UQXhRMGpBQWoybWpnUjNOSXFoMFVZNEFEb2JNbDYwOTVqSU5LRHVLRjY4WmFPQ1VRTjVqWXVuY2R2SWwyWktTQmM4ODc1OVVJOElhWXNWUk5GSDJRemg5WVNjbWt1ZkFybGhRRVcxekNIeW1rWEFaQjk0WUlMK1owelNpL2dJbEpwOGdNcXRHaXZ4bUdUSCtIRHRxOVgyNVQ5OHBzbHR4NGZtNko5M3FyWlhJcnJhTDJoRXZiTTloSWkyWGErVlhacWhtMVVJVkdDdHMrOXpsRXplQmI4WXhqaENDVlJZZUdCaGZaYjJjMHBhb2d2aE5IMGIzRVB6OWcvMnFGaXZTRXdZdDY3aGNRdTBkRkdSYmlUSnljRUZYaml4Y3dZTHYzblEyeEE2SzlFdkkyRURobUkyZGxRajN0Zm1DSE5QdlQzY2p0R2RZVWtxNVVCYVBSZ29EbWh3K1p5VWRPRjF5WmhteHA4bWJnWi9WYkRCc21tS2ErMFdxZTF5NVMxNTFMekVJNHBrL1kzNkx0RWk5WE5ZWVdMT2tmaVBxTFkrRmg5VmVaaE9CdHFTOXo2WTdKOGc4RG5aT2piK3N1eWVsR2RJc3ZzQytuMXB6Qis2bmd3MG92blRXWi9XaXBMM05nb214b0EvdWdmRnFTRS81QnBVZ0QzenhlU3ZCUjB1T2NSWExBSHAzNkZHTTVSUUVsSkFFbXlLUmt3b2pnbVVXKzlUenJIMzZWWWhSb3AvcFBsaXQxWG5uR1VERGFaKzhxdTUvNDdtUS9jSnJVSFpyenh1T1JCUmJiODV6Wmx5QVVWZDdjVGdTNUJITXY0aWRCbVdCWm8xZFdTaW9kcm02VXE2RnJKa3FGTkRQeU5Zd1lkeDMyUmErT21jcFhuLzhrVEUzdHB1VjJEd2JhRmxwbGUxZmtCQy8yZFJhT1NSaUJZUFFMQ3ovVWZjaXpoUTlXUm5JS0s1czRjV3IvZ01ld2h1aFByZ2ZGYkdKY3NpUU1BNC82NTR4UzdXYWo0aHh0UzB6cUlJYk5VZjBUbWdZdWVSUVBhSGdxRk5RWlh5SzkvdHV6MWJWUm1WMS94cUxtNFFVYkh3eEtoSVR3TlduVVNJQXVvYlBaSmkxVlNMa1c0T25kSXJUWHFaSzBXMUtLaDArckZyZjVFVW00K1RvdnFuMmYwMmJuVVp0ZEoyVkxnU1R5eFdseUJHTjN0NE9SbW43bmVjMTF5VDI5bzZTWXp2c01MUVZGN0dOQXMvYzRWMElGV3ZEMkFIOVlSS1Z0dDlLME5qcGZLWXRlYXJ0NjhiVk9VZFpvV0JXMFNHdFN6Z2U5QjgyZCtEamoycHlqcUZwSDJxQTR2QnlEdGEvcGNPaW95R09uczR2Q1VPM2dITVpQZFJZZUo0a2k2ZHVuU0xSMWhLU2Y0SzBOYlo5SXZFU05wa3hEM0pGbEhXZEoxT1hFNFJWbEt1OGZvcTVENll3Um8zWXdiNitrckM5amtmV3dyUjM1ZXo3U1EvczlHQTlHOW5McGNaaFROSFh6T2RHY0UwNlJkM1hMcS9wRStSbHBMQmZzZkxrODZuK3UzMVlhTm9mNmZqVm83cGdGb0xxbGVXRHFxei9jaUlyMmp2RVNIcUw4WGUwU0FaMG81WkxtSjhzSjRtQjloMURwVlpmaUJnTy9YcG5KMVljeHc4NEIwcU9obUY4a05kVlRKMjBMOXk0aG4yTXZFd0VoSTliOVhOeVdXZG1jQmp0ZXhDWld3Z2t0bENRcnlYcklEUWlmaUFQN042dlplYlhRY0JZcmw0a1pDTEZVZjVzK0FjQkRMUng1eG84VG9scmgzKzBwaUhxV2svazdLbmNFZnU1Kyt6Unp5WWt5WVIxTHZMRHc1S2ZpMXQyWS9EZkY4RlBEdHdXci9CT1ArOWZ3d0owV3pkSk5acUdTenN5RTZKZFNvSEZNOXpIcWJQbERETHljZTh2UmlnU0RYd1pJbjBJekU0azkxVkFUYS9pRVNQcnp2SXlTcVAzMmhHMjQ5M3dTY2hsaWl2SWhIZTh0VFVUVndJazdoTkxBRTc1QTlBNGRJYnFCcGI4QnVMNzdGcFhrUkFJRXdWR3VVdXVEcDNHVjJNQ3Bob05aWC9QaXRib0ovVHhDVngwUWVpUXA4bHVKRzgvSU4wTlA0U0RBakw3dk1MMUt6YXpzVENxV2FvUEtycFRLeHErVzlSTDBVaDBsWWFaZ0FkWHhESFNqUDlMVkVIVTgvYTB2UktxdGEyTDYxcklUQ0VCL0FwVWwzd2JxbU1hRk9xdE9kRThrYnM0UkhDS3JVNmxHQnpCd1MvS2gxbzBFRm16L1JHQktsRjR1UlZ0RW03akxXQVRZYlQ0SUlRSkxwZkVqbmIrOWRGcUNuMVc1dXpEYSt1NFRaZmsvN3VBZk5GMXJwYTBWV2ZPcVRuamxIMEtDVW5UdVhuLzlpT1FQUGZvczVweC9qL1dpdzdrSC9BK0VtVFRIemxocnRTZkxncEZOK243ZklNSStMVFB3dkNhOXphbWlhYXZNWkZiU1JFM1E4dDZhSktyb2JQZmFnVnRUcTFyczBPdkhYTjAzN1NBS0Zsc1NWSTErRVllUnR0WXNJU1hYTVVIUUNzVDYyRzcxMlRNUEMxZ21SZjhxUUFhK0dlSncwRnptM0RrUnRVVEhZTm9DRy8wWU1TMmFhMzlOVjJtS1NyTC9JVHRmbXArY3pWNG1jNDZHN0IzSmlvanBlYWI4L3dMbUpkSVNiMUFZT0kyRG1XSHBPSnJ2Z01zYnJDeUxWeTEzWm9OaHlTbWtJaWZUUTk5NlBEY1B4SUdRT2ZWOXF3QVcwOStadExxSmZ1ZWZaQW85MG9aYngrMlkwTFZ2Wmdwc1pJb2lXZUs2OW9FdnlWMTg3NDVOdXBWcjFtNkh6bWgzdGtURzNTT0EzMGtGTVJNYTljc2xoZVNuK3YzSDBtS1o3OXFkSElDblNxempHelRjY05kYm1hL3FsdU1ZcFBZMml2VWRMYTREa1hlOElnRzd6M1dvcklzVmhpS25sUGFPeHhpc0N3anhua2U0V0ZTcVQycnQ2Vy9sdEp2QzNTcElnT1VETUpyWkhoUWRReVg0SGJ0VzhWTnVTdENrZmVjQkRjRkd1WFVCb1AwdVpDZzd2UEhXZFZiNGhSVW4zQnpKckFlV2xod0FqSnFIZGhVWlM4UlJpM2xuY2w2NUZlSjQ1NytBZ2JYSC9VZTJyL3VscDlQbXdMNDM3YjdVUU5VU25LTSt5UStMd29NMnp4dTlMKzVnMlEzakNmdzR4VmNVQ01pRm91QmdHQUMxNUR6U1NmQWtSUlR1ZW1oRWgvRGM1RlUwa3RoWTl1aHI5a0N2cWhOUTJFUDFpemxVZUhONzluRmlnckdwbjF3eHIvSldoa2pONnRHS2kyaG91d1FyTnVwWSt2cW9NZnJ2b0JtU2FVSWlIZHBna0ZjN3ZEQWJGdGhyRUlqUW5FVEN0OFhZc1dQYityNVdzaGJYbFgxZUoxV2pQeXJJcXI5bm95bmpHUUFTYTJuQTZyRkdtMnJLRWxwRWhBakN2Y2Job0cxQk55NmlzY0JUdC9QZnE3dGNjNVBFQlQ0bXBLaEpmMTJuZXZBRmUzUEx0eWhyYUc2NnN5NDZzdzNkVXJlVG9qalhFc2laeXUwbEF3aXFsREtjTDRQbXhwNnV6Ym1UWTU0Z2ZoeCtBSkU2bjdhMmFEU3Zoa0JrTjUybFF0OWxlN3ZqcHE3MHptN3JteUJ6SzA4SlRJa0ZoSEZXOW1LM0JKRWcwQ0hvOVd5Rk4wVTloY3hRdGMwLy9Pc05HMmFDc3Y4ZTU3S2hkV0JOenprVUtSV0t5dWhvRjRXQ3ZKTlp6NDlrVWZOZDFZcDNxVFZBTU1ucjdXd1F0MzdDL0ZUUjN5YjMrbEJiRHZaWUE2ZzhRMDEyV2xma2JEY0M2NGxaTmdmQU50QnFab1k4VU80U2JLcnFadGg0bVNjTys4azM5cmxSVnc2Nm1FN0tMdWhHZUZZM3ZXWjJvWnBnNG5mSy9nTE16ZVJ2cFloM1Z5c29OcitYRVdURCtNdm8ycWVhN3V5Tk5YVDJiR2ZhdmwxbGRNdnllcXFMRWxldW5lZy9rbkYySTRnelpmZlZJTHA1VzAzc3BNZlBTZ3Z5MHBzbHZ3R3MvSU5lUCtBYkhKeEM1VTkvdXF5alkxbVR3bTFocjRJVEkxaUttcDNrbjQrREZMQ3hOdWYyMHNMbGdGMFgzekE1TVpUQXhDT1NacklxZVNpOHVGR1Y2VFE3WTJvOTVndnBXMy9hdzhOSHl1Q29qSUFicDJ1U2lBbEZPMXRTdk9mNmcxejVpRVJROE1odzRRb1R2Y3R5dEE5RUprVHRuUXJ5MWQwb0U0ejJUZWpBWVZ2MWtNRUgycVRZUmc3WHcwY3lHM25FNytSYjd4czBCVlhkckJibTdqb29Za2c5V29HSE1JU0VSRkFNNmhpOURiYlZMVXJ5UlRmUWdaZHlyMWxIOFI5NUlSNjNobFRKWkc4OTBzMEtiRHo0TFNIY1R6RGN5dmxzMG02M1V2YXU1MFdQT2t6MDdDNzk4MEgvSU1mVjQxMCs4Qk5HUmhHcitWVlJ1eUNBWnExVmE1bEp1ZURBYkQxNUlUa01ZNzVTcllyVktOaUZCL0pqNkNGSzFLOXZtZnk1MGV3eHAyTE4rVUNNQ2VKaUdvdWpNYjBPcmhnZFRRa1BZNU1ScmwxK3dsWm9lSkdaY09BTVhQd041ZjBjR3psRWhZWjBNMkdUY1VQcjFBYUsrcGttWkJjTTFwOHNTZTh1ZGtkSUsyS0xwQ1c3dzNlWTFaVXgrM3dQcTRMK0dOODFJbkVIcXQ3cnEzNWRlYUNRUHZDN3VpeU5aRWlzK3pVamVkQ010d0FzNVN4LzZQSjdod2RBU1NId0l4SDZseFh0MTEzVWFBWXBKNkVvMDVXaUI0R0grRFlEZUd5SzUzZmpYbTlGV3RFbjVjK0c1anV0TVdaV05MUnl1aUwvSTRCazhCZm1KY0ltWkdOK0YxajUvVW1YcmxyeWlZZzR2eUllaDREQktGUmVTS2Q3dVhubVJsTTc5eVRJYUxvNHJlSC9ldkNaTEVPaHYrcElybkJjaXVwU0JTU25pMlhOY2N5SnNrN1pXSHJvNXJNWk5HN2hIRUVEcEo3SFB3SXZJdmxycllaMkdUb1FzaUxWYjBwNFlab2duU2xCelp4MGhQTk5sUno3cEk3L2Y3TnlLTWlsTkRZSDAvMURNL0tKb1B2MWdjTWZONVFTMXEyN3Y3aUFSMTVXM0JCVWRCQXFma0lZZGxZUEl6ZXhBRUQrb3hqcUozZ2ZhUkhoUmR2eGszRys4bUg4OHlnRzdoZFNuVkFFbEhQajBmS2NnR3lIVnZLU3laYVFxckRKVndYTkZ3SWEwZDNxWlp3c0xyZGJYL3dOZDVoSjhaZHF5clo5RWZlUXl4ZWFzNjNNUm5kMm15YnBRUnlvZ1pJais2R2pZdU1ubFJnVjRQRG1CZEhsQjVaTjlMTFhlQVJZb1k3bkorMnpRY21xNXUwUm14cm0wdFJPNDV1SmdPQzh1dHZ2SUpFVXZxMjYxZWk4ZmNvUDEvaGR5UDM5eDNoM1VNWVJHTUtsYlI0MzFPZDNnZGpsUmtPOEtVWG1aREhnNVBhTC9ZVmRCNVFXOHArQXl0RU1oSW8zTzZ1Q0dRY0o5RHVyRkMwVGVMazZTaFAwTG5COG5xbkhVMkVqWUx2eW93ekhZYXMxUXVpQUZSa2ptT0ZtTEEvUWF6UnNudks2MW5qNnVvRzg4bVljeU0xNnhINjFsNEllR1d4S0NrUHVJRFF4UUl6NFZlVVJKbmhmbzBEamJqTHRTM2EvZ3F5T05QYlJrblZvaS9SZm5hSThjbU10QWZra05wQTd4QjV3VnJDUVBSNTljbGVCdUFmSEpwVnpFYzI0SkRUR3IySHphd1FnQkRjcjBqdmxwakZxcktXeGEvOVN3KzlNTndzMFN6N3Y4U1ZHOWlPem1QVjJnNldLTENIUi9UYTlRL3VqdmF4ZmZMOVpENDh2bE1DT2c4YmorK2xLbCswY2FZZDhlcFlldlZPMTB1MXFhWCtMREhSRDZJRXQxTm1vNEsxR21hTEM1NUpKdWxMZTUvM0NmZnJIZTVrVHNRd0ZiWldyYmV4cWtIRXJYeVM2NmJwZ3Z2UWdnRHZTSnl6RDdaamdLSUdsNXovVFoxYkJ5NkRqclUxQXM5L0Evem1Yc0xxdkpDZjVOY2o3TnMyMkowMk01T1BSTEs3VzAwNUtBMGFZbE1nYVkwRkVDMENTNTFFVVpnWWNaU2F5cjBBbHdHVjN0eWpockpIZkRXcks3N0hoMU1GOVd0czJtTnp3MEEzMUZTdGpHQXZpNXdQSEsraVpCNlIwY09PeTlWYlVTNFVFS21UNm5iY2J0K2hFczdPbmpKaTJmQ3dVZTZtblZBNm56Q2c5dkwyQXlHeWdrRUxIY25NQWtleG5kTFF4dkx6V2JSYWpkODY3OEdHK0lMblZOcU5uZkV3b3VCbGxCU3ZYOW9uNVdRSWVUSlpIVXd4UmtPQkkxVCtoODdVZWErRUZTWjkwL0Q5N0lTWDhyRUxrSGlaa2NrcUQvVVkyNExEVHVmWitiOUhGcXZOWUJhdnp5djhWRWJqZEg0RVhGRk1XMk52UFRFd0wyRXBOQVRtZGlvSjhMZ2ZENEtGbUFHeUJnanNpSEhRbW1jQlk5dkZTUDdHeGl6MzFDUlV1RiszSkRvaEc4bWxzKzVQVWR0OXhQRHN0MVZvYWVYTEdacGs1VVZzU3FHcmZMTnpiYjlUSXF5d1JVQUlodmxRd3VzOVRpVlkxUjBOanJFQXk4dnJCTEVLZHk2OFh2aWZudnVhVlptOGs2aHYvY3dkK1lmY2wrQ0VEL0xENUYxUjRITitoS3pYTzZPSm5UUEdFSjU0SmljeDVLRnl6dzNoL3hVYm1qZWpqVERncVN5c3FBRXJwMFhZWUd6bS9IbXJ0OXJRZlphRjUyRSsyTWI2VGJjVngzL0xXOGtsdmhsRWxhRnRJaVZkVjF0Zjh1TngrQUI4cVFVRERlTnpoeE1HRnc4ckpHVGQ5K1Q4WXRtQytqSm50TkdLK0JFNzFBNmJPVGdudUtyWjUydEt6SkZTZDVtcnNsMk5zc0RpWkdjTmFnTXlrRUhHLzY3ZEhQYUgvYjJoNkhhZzl1MW1Mc1J3MzdiUDk1dEFtZUEvTDFkdUhRU21tK3hLMWtNUUhUb2w0MHZmaDk4UmVSUFBaeEZQTmdSMStLdStIc0dMWlZPYnpKT1AzbkQ0Mjh1WkRsWGlJUDRBYk5yS0NQSE1EQ3JVOFhqKzF2L2xaQU9oeWJyMkZ3L1FqYVcrdUc1Q25Gb2Y0blJwYzM5cTNydFhTWHgyYUtvNFd5Tm1HcC9MT3VjdCt4VEIrVlY3ZjlwbXVJc3ozNDU1Q1ptOVFKbVhiYnFxRFBtWHZEazdINVFoeEQwUUIwR05uZDFDMHgzTFYyVk5pQ3YzUkRzYjZWUUdsd3FnLzZiR3A3K3gwd1E5dEh5MjFlVEZYU2VvQ0FzeVNQRmdYUEx3SjJpQnZScTZJNXNCL3M0S0RiQnJLVTh3UzN0Z3UvY3Q3VURXWThtdmpzd0F5YTFjYitVMElzMHFoMEp5NURDSSt0OFRFY0Y2UXI0Vmg1VEZNdElnVkRlOWk4Ylo4eE9GTnRHczVSZ05XWTc5amVaeUlDamN4TUM2Z0lwdWJtdExZSjA4elZLdG5CVVBFcXNhaXltL21PSi9NTk1iT1pFT2k2Zk1UTHdlMGVIK0Jta3FPMXMxdzRONmtocHpnM3lIRzBHck1NQi83TzI4Wnc0T1pJc1p3TnU4QmVCeEVCeVJObnRyR3FYc1ZZTkNDZGp4ZUhteDAyZzZJVUhYVTg4SmxlTDIwZWgyT0haTjlqbTdLTDI0ZFV1UjZIL1k3K2RPWEV0dlY0WGMvZm1ZZlNXcjBEdXV6aHppYVdHbjdHRUFRTzFZd2dQSEU0dWIxaUVab1JqODZEVDM3c1htWVd2OFc3bmhiZFpLV2xhZjQxaE1JeGRrTzl5Yk1haE9DQ3A5cU8rOHlOeldnMDkySWVBaGZ4L1Q3VVNndkhQdktUb25DTkF1K1RNZnRMZ3pCeDZzbDJiNmR3czQ0akpIRmkzSlE5aUZPMVV0MFltTWY3bVZxTzFOOHBOc0poTXZQazBvR0t1aHBTS01NbG1BSllCR2x5bmhzVDFnVnBvK1RDZzFHekFjNlBkZ2hGV3NmUnBob28vMUVHZWFqWmQvVWVYenViQmVSWW9rSnExS1l1b0F5NHpicHNsMUlXVkJTSUdVaUY1SUtpVG1veE1CQUQyc1lqU2hxcVdHK2hGODJFdTdLZ1ZJM05UeExjeHpWMmVzVVh5Sm9kWVlPK1ZRd0tyTTlFak0wVFhOc0EwOFMyekwxYm5hK3VIRlZVWmFzWW1zWVVvR2Ntc1l6cmRrQW5VQ296WWllaXdNeklQck1FOXpTSmZnZUgrR3JxVi9BNWpjM0ZjenI3RmhaNjQyc3ZSbHIwTWJic2J6OHM0cFF3cXRrMzliUmV1NHMyeDl2a1BMZkVJTEhYVlJzeTlqME9hTTM2RlA1WlVxbm5RcmJmVG4vZXA5c0N3VENYckZPU3JrTlVnek5zSldLUmJpZDdGc2RvYjdQWm1ncEZZdGx1ZGNhR3A2alZFd0FlMjBhTlBKa3U1bFpVL3Nralc4R1hJWE1hRFh1M21reVNwdHVubWNNUWEySHJTeHNaR0hZbXR4RXZqM2UvWWVnc0owRXlzNHYrcmw2ajlka0hTUXJ6SDZMVkY2NTZTZkVzQUxFN0ROeWNWUjhRN1pSNnRjbkhtc3VNeWs2d0FvQnlpUjVsOW43T21nWHBqTmphNUJpc2RMZW9DeWRuRzIzQzF5MEw3Wm5JY2lNRjJBaTNzbWQ3c1BpOXlBTWxmTlNzNllXRUhOandNK240ejE5c0VYbHA2Z1cvWVd2cE5OcWYwOWRDelE4NGZBb3ZuNWxrdUhyQjJlSGxlWlp4MU9FTERoVnN0Q1FVSC80WG9BR1hEYlJqak1PM3dYYUFxbHJvWWQwMDVXTDVxbHNKRUdQR3hDeUZPMGYyTUtQNERZcnhRZDZrdldnTDc1YUR6eXJPaElwaGJUT3NHTGZTZW1TN0h2blBHdW5xOUpEQUE0N29uNW5QQy82OUJ1cmpBbWswNjFxNE9yV29zRTlacFhPcnFwWUtPbVh2UHVKZEJUK1p1c05UZWx5TDQ0UlNEMlFySlJGeWZuNzgybEpNR245SHJnZi9ITVVsbzlkR0UzY1ZVL3dWdStxTGdZNTlEM0J5VS9ZU05JMnBHRFV5eUZ3QWFsUmJLWWRhZ3hsTWdHem1zV1ZBelc1K05IRXliVFE0S3RoUGNvd0dUUkppMmZsUE04MVA5b0c2WWVDSThxcGdpSEx6WXo3RnJ1eWNnV1pKaVpHemtHMU8zN0VnMlI2UDRQd3paRExDeUprNlhIWjRUdE5VRy9NYUh3cGIxUmRIS2dpcGg3MnNwbzFzaTFybXZWd0l1WTRqM1RSOW41RVR6a0dIR2xTcGZQTDFEVzFzWjJ2VEc4bklVbWlxME5tQmJxaUk2UDRoRHpDR3NtY2wycE1aTlRnQjFXWmszdWE3WjhyUzJEN0xaeHJnS3BFbVhNOG9hS0x5OGdJbUIyYlRDa1dBVnA3Rzdsa1kwVXo3Tkx0YU5IeWx6YUV0VXA0Z2dXdnQ2Sjl6RCtBU0E5eEZnYzJFdkZhdkl3MWxxc0lKYWUzNTA0RzFUV1BvMmkwamVPWEI5djd3cjNSalZkSnJuNTRsa05iYUltdnJsU0N3TURGSjNMNzV0ekRqWW1Cay84STdJRW1nVGgvTVZNYndRbW0zbEZJblVHNW9PVWxtSjRyc2tLSUxkd3k5ZDlVazdibjVUZENRT0IwZkg1Q0tzbzRjT1RBWUZQMEFMUzhsN2s5Y2JjZXp6TlhZU0QxNXpiVHB6aEFvMURrbnlZN0lRamNpU284amNyTU90TTFhUjF0NSttODhRVm9PZTFwd0xtUFJyanZiQ1Q3M0NDRjJScExoSnNZa1FNeUFadW9xcmhjYm43ckdPbkxEcFRWcDdqZFVjSUR1Mkx0WVZROWFocWFjUzRpNm9oRU9WVDhhM1lxYXBFOE5rZlZWMjlyMkxWOEdDcjA3dXh2QTFjYUJqY1M0eEZqazJYZEROT0J0MmNJNVRRKzZpMmgvTkZDVmdCUVRQempQeUtBNkw3NlNVMkRiem9pa3lwOWttWUdmN1UzRGJFNFk4UiswMWRhNXp4aVBPVHkzNVQ2VTlTclRsVlJ5UWhkbU1paitUcW9RWHdicTFqVEpNTEtWMjVIaXMxdDkyd1p3bDJ2dlUxQmgvYUtUT29VdlZ2eDVaK0pkVHFYNmRodWdLNWdsMWxvbG1haTNlbjZCY08wUVMwdlZ1c1ZaQXViNVU4dnltUFd5MWh5azNja3h5Q3FhSW9XSVJOK3c4ZDk0V2tLR3NmS2RSL0xnQi8wemxkSmN1VmE0MDEzVFlGNDZKS1RvUEtna3BpQmNha3hXcDQ1YVpDNUY0RXorbTZ0dVVxT0Zza2tDVUY3YW53VkNCMWxSYlc0UTd4azEzOFJ5bE12Z1NXYkFLeUdvTm1keUpoZ3BDTWlpSkhEZmU1T1RKMDJRM1BFajMrTGhrbm1rbGh3VVpIN2swZWpZejFuaDA2dTJPb1c5SHBSTFBzOXVBcjljckhYY3dQVHJ1bi9XMnJsVk1jMDdySEt6WXk1bUkyZzlFcG94SmJxWmRmSytVOHZqRHZwR2xVMnhFQ2RrRHk1cVkyMjhMenRScmhQdVNzZDkrTUY2eTdDY3F1RjhLV0VidlV0VDk3dHBPVUM1elBSRG5lRk1pMXF1dDZRbGlPMHE1My9YdUZsbmRMVGFybG85YzlWS0hEeDBNRlFldy9GZDdQaWNQVGsrWjNHUUVhUGR4VjcxY2s2enFRTDhGQU9ZS1JaRk44dFBFY3BMSjBObExWWmRkaEJobUJrRUdwcmw3TVM2bWtNYmFCbkkrbnNtRFhjUGNpalFFOHNobjFSeTJHTDNwTE5BaWdUL2lDa3crdWRKL2kvdDE2SmRnZ1BjSERFbVB1TlZZUVcvZTBVd1hkaEUzSXFET3ZyMktUMzdOeFMzRUtHdjBuekZUbGdlcmoxNzVGSkZuNkUyUUJ0NEhGTEJjdVZ3Nk1mY3FNOFhTWlp0RTQvOHlyWCtGaXFiQ053U1ljaHJXVVNtK3AxOEJsOHVDNHZzaVBkL0w2VzE3MHphRUZMMC9iUm9qVE8vdEtweVlISXd6UW5qSnQ0YWFxTjh0RGswSVVSWXJ4VzcxeCtaRHVMYzZRUFl2VVZwTDRna2U5RFNzeDZOMUVrTWoxMWxsRmlTeWhJR0NKMnROQWtMOFJwNlBwNnpML003bG5UeEtvVk12TFZ4dm9JZ2t0NWY1dit1NnJUT3N0SEtMNHZUdFpYblZTdnhic1dSSkttSHVNelpuM3gzN1VlMXJSMjZhdzRPcVd1M0xDSFNUZ3RhWWI2YzRnbXBNakR5TUVpdlE3Z3B0Y3FTelJhc0x4aDhGVGFFeEo1alBIMmNtREFFRW92VTNBc0g4VjdaS2p2WkplNjdWWTdJNkxmZ1I1NS9GRmgvRzVtVVVZM3V1dUhQVjBZYmU1SU9PTHR3Rit2VU9jNjNJS0FyMzJ6L25iMWQzdWIyMWJTNWVZd3J2Ym5QeldqRElKenVWbStsVG1yVklsTzVONHhpMnJaMDI4MW1ydTlrV3l2ZC9EWXR4TWl4cEdlZ1FCTVhyek0zN2lNVjBsOFRWVWswQ3oraElSMmVMTlV2TlRwTWhzM2RxdVBuMWZPempLbGRhNEpyTko5elpQdHdrSWkvbk8vNmlEY0VFMktkUmsxUzlnc3BUVFFLZjI1eGR5ZVlOQnNFZDdxa2RlUlNYN0pKVXNZcUNIeEdqcThhM1VnM0hvUk9XT2M4QkxtVGU0M1lNbUZoSm1sOFg1bUdkVmxrK0o1Q2Y4UWpKTGJWK0twSmRPUUE4cFZFbURhVVJEWlhObVRYZTFhdXhvUXhoQ0UvdWo4Tkl0UlVQT2RCRi9RS3hvam9UVzM4WEZBVXNFNEZITE9LQmIzbExFQTBETThtVUcrT3ZzbG5QOGtORUp3NCtqb1FhSThRZGhsTGJ3dzEyeHMxNk14dkhqTVNiYVY4eUtzRmVNUnRnMGhMczFkWER0U0dxUUt1cUtLSlZSM3NjSmVWZ1d6NmFQbDY4N1lsbmkrMUZOMWFLME14YWhoSWw3akpYd3N6dWhyRkRHbmNoR0hzYUQyR3JqbTlqai9RMmtkeVhpQWs3ZG9xYk1uanowcWxhZEtuckdyRTJrM1NGRVYxWkwrWXY3ZnpiTlFIK0dKOUxZL1dwMHNVUkY3YU4xZEZiMjRqME9vcloyblYrQUFrT002TlNnRjBIVVBqclZrY1h0Qzc3aDREQ01BTkZQTDBROWtudzIwNlNONlowV0oveVZZa2dGWm40cHJYR1dNUWxUQk9HLzFLS0p2eFBhdDJpaWM2VlZKNDVVZFVLUXNmSnFoa0hKUmRySmVmK2plUDAvNW50UElTQ1F1TVFYcnVrSFBZcUJpTnB6L016RTlUZ28vRzJ3d0tKTXpUZmI5TE9WTmVIWE10VmhWbXlqcUpZUGQzQ1JvMCtKcGp1SmdqdXNYWVRKRU9DYlZNTnhKRUF5UGMyeHBYSks3UitUdU1mNzY5OXk5eGdkajdnM3h1MUNqMVhHdTlveGd5Q3ZNYUdwZW14SmtFS21oSDdxQ0NLay9iYmRLM3E2TUFjNmVpOGNWakpqRi9RaGJwMUM3Vks4b1VpVnpiV3dQR09MSkJ3ckpYeEt5bSs0aXorZUNMUWMyTTIydVVvVCsxQS9ybkpaN3pkdWloUUZOVldFa29udVlCUUR3cjhLQk9lVTllZ2ExSnBRMVpQTnkyY1JmdjdleS8xVStDUmVOZW1sdHE3bVBIbWJpUnM2cVNNMkZzUVdGcUtoQnVWbGN6QithNE56aVNrNVRybEpqc0V6RzN4T2FSV2VSNnY1ZWZodm0rbmVZeTJ1SnRJdXRmeUt3OUVDWDBCeWJFRk12NXFyS0xPMjUwbE9jTkl2S0I4Qjh2WGZXK0FtWHZFT3dOR29BbGM5QkxKdk5VZWw4NTRubE5VM0ttbStIM0RZMXJRcnB3cTlzZnJZMEk5NklpZFBGdW1aWkZZbnd5OG43NFFjdXpWSHJORk5ROUF4Q3h0a0J5YWdsY1VBZ1hHTHI5WEwxSHh5MWlmV01aSDcrS2UrcU1tREJhcE9IN2JTTG5SRm1uV2ptNFZCc1k2S0JKOWx6cS8zb3BMVm1xdkt1VlFIeDVvL2xCQjJ6SWpnWjRDaW44M0VuZ2tESjJTMm4vTUJhbWg5ejFWcjQyU1VJRU82ZnlaQ2doSGhqSkx3NTZsZllVcE1KcmVMOHI5b2dKUU5RYno2SFdHaUp5RTNOcFZhWWF3RFNKeVdwb0p3UXVUVWpneDdJN0JpQ3lmMzhPNkhDOFV1dStKQ0xwWnhlUGk4U3REa1JqSXBMSlc5b2drU25iUERsYjcycGJUV2s0RFdobnpWUW1VaDFJU1B3VUc5ekplS3d2WTF5eFRIdWMxK1ZSdEhtTjU1T29lLzFhOVBMMzdwanJ4UlYyQUJTeW5SRXBlSU8zdjcyRkZnS2xvS0I4L2t5cjBmU2lUZDVBeUZrMkZTYXUzUGxMdmY4T0lRTnBJaVZKbk4yVkl2TzZieEpLMEFabTBqNkxLOStHaXJ2cVU3UUtZWEMzMnBYUGwrekVidzRBZ21aZ2RrVkhCUWI3OTA0K2FXekRiY3duSEVsYUNEY2JieTNtdVI3MEh0bmFuREFTSnpJVFg3UzFSZ3p2bVcvQmVPaHArb24xKzlWSlQ2NFA1UGloRVRCWExCZ2lYbkdIOTFWeTJmd1JXZ1d1NG91RTg3NWh2VFVYa1RSV0pqKzRUMVRLanI2SXdLZzc1dmUxR0FPbHBnOWxQeEZySHFhQ0E3ZVZWTTdwVlNrNCtzWDYxemdDd0VwUTA1VzRQVUo3OWgrVGdwWG54WmdQMkNjV0hRRGFwREVTTU9qK2JiN0xRZ29RaEQ3NUpMYUVxbi9aUG9kRGFFM1k3RS9xcEszQ0dqTHJkeHh4c04zSUtZY0hNcHFvd0NuK2Nsd0xNMVUxdU9udHA5ZVNhWXFzK0xHVHhxN1RHRWoxL1htdjBRVmtLWW9raElneXAzeFM2amRPYlkyNFZOM3BsZTdoSzljTDZtUE5iNFhsRm1NT2dvYkJWSnJaUWVUNGNSZCtqcjdKbjRpUkFFVnlBbit4NXRVRUpIOXUzK0srUlhDZlBKbXQwZW0vd1ZQRGQ4YXZDU0M2Ym50U0J0ckRoQU9BU2NYMEJGeURDR0NTMkNuWWp0c0dQQURIQkdqR25MYkFqRTJBQ3djUVgwckFxRE5GczdacXZxa2w1SGV1Qm1xc0pZQTA2REhZQ2VWR2g0Kyt0T3duWTZoQ0EwdDRYWlBEd2dIa09kL2hxWTNNUjBUTFJWL0dkWE9UZlc1bndUb1BLMGtQU2pzd2F6SXc4a0o2Y2V3VC9JZDRjSUNpM3pHQm9FUk54ZENEblZaNXRxUnpYWUZia0dkbis5ZGhkWVU0Q2Q0YU9vK0tiZGtUVm9jbGExUmQ3N3Qzbnl5VTFYRnVUMFZnRnBXMlREbFY5TW9sZEFzaWxaSDB0UEZjam1UUHFzQ0U2NGRpakovVW9rZG9sUkNqZ2ZmNGlVR2dsUTVUN05rbTFlTE83K2FyVWVtTFBqVWJCdEVIb05Cd2dkWk1vMHFkdS9KQUJ6ekhGUVgyamVtRnFBTTlXa2ExQTRhWHJuUlU4b00rOHhacWF0RjZMb2lFQ0VVQTdVWTVNODJyd25UZksvemRza1lJSDRsUmJTc2FqQzJZVmN2ekRaYk1pMkJUbTFncCtweW5FVzdZcDRxa1ZaTFd0NmNKM0EyaXkvNjFJUWRibXdsQlNQRStpcGRrS0dzYlpKNytBWkN2R3lkM1liSU50U1FSNzRBd3AxOWhzOHdURkRFNlJNNXV1TFpJSlh1YVBrT1dYMUd0VmpOWityZlBRdDhJeG9rYXRFNU5pelVtTTIyRlU3RndwYzFTOWZqK292RU5RR3pUMnljdG9PWk5sQWJleXpVZ3VteWNBdHFnc2FXRXY1enpvcGl6ekpEUXord3VDbEdFaC80QUpCOUJhalkzNVJ0WmlUN1ZGb0JKeEd2ZDlYVndJY0FXRVJ1UzMrK1NtQklWWWZhNDFPamRtV05qSitQUDhhQ1gzbVNrYnpMeXVkYzVzZEZDbEtHRmQ3Y3A5MC9XWWNaVUpuTkYzcy80cWxhTUFhOHNsK2FxS3lNMndHa3M4MTlQTURkZDRwaWMraElrZUlEMFVrOGVJY0YxcisvbFBna2VIc3BwUkxQaEh5VzNaOVE3SzlXTzJVSGxLSmpTeGt6Ylh4NzR6K3ZLK2djRDB3ajVzOVpPaHlQcGlpa2dCWEpuMUJ0ZFJCSW12ZmRTcGpsL0V5MFFLeWZHT3RpRjFXYy9lS21MK29CQVA3bDZ5RFhFQlhtdU5rNmhvdi9FZnorZEkydUF5QVZLcnJLSU1GZDV4OHRZcUpyTWdFeDBIcDRYd2dERG8rYWNUb00yRlFFUU1PandmU2gwS082b0kwUDhwR0pocm9wTWVMaFdwS3piRklMQjAyVEdQWkRtTGNCeGRmQjBjZ043OU9qaDR1My9TMkQ3V3R4YktOS3g5dmZLaVlwMFE2N2QzOXE1NXp4azVSUzcyODJ2ZE9jMm1QS1U0MnFuVFhyb0UxNk9vOFdaWVhEdU1DR3NXbVlHa0d3QzROaE9kU0oxUVVINkVOZjVjWkR5ZWRTOGpRUHRHMjBQTXA1OGdmQjlud3N2YTJBcTQvVkFvZlY1czlhOHJ2aGtZKzF5S2puUkJiWWY5T2NIbktrSlAxc3V1NVJvWUVNT3FOVDAwblR5RG9hSzczWloxMlFWc0JMVERvWStwWWoxSTNHQkpMeWdOQUE4KzlRZHBMdWxKeGxnQmM2SHB1TTZZV3RWdHljd3VOb0c1WERqcnU5c0RLVnRCcXh2WTlvbEJNN0hFZk10SHg0Wm1tUXRZSjBOOWUwZC9JU1ZEdlB0bCsvQWlHSEtweWNCY3MveU9SU20zTVQ3TjVBYzA2ZkN3SkV0bjkwV1RKUERNcFp5UTBwWER1ZkZZcHRyM1BBaDlKVDRyYWwxeWNVL2ZxMEJZQVJMdUNySStuTWc0bHVJdWJtU1BnYjY3N1lYOVhUNmtobTVnOC9WSHQrMEk2RVk1enBZUVhqUGdaaUFWR3ZQYzRvbEtYMzVMMDU1TlQrUjRsbHZjL0Y2WkFWVGZDbDhVSGhYTWNxbk9FcFFZVEVlTzNwMXFvWkhBYTB0eEUyWE43eTJkRk83dXU2WnNrSnNhc1JBb3YrRFFHVWh5eVFGbENEbmpYMFdqZm1xZTk1YmJvV256eFJVeDk5N2FISkEvUTQ1WUZEYTczckIvRmRhc1JpVlVJWGJzUjJEQ2FqRkJVc2Q4ZkRZcmZmRU9VTXQ5ZDd1SVRGSzNuRGVOL1RyZ3F3dVhxTUJUWlpObUZ3U0RwWkxvMVY5TnQrVUg2cWVZekx1YndOUCtabmJBZTFTZzdIOVRiL1ZBdU5ua09hR3l2NVZrMncwZDJGNjVmQlQ5dTRmclAzeWh4SmYyU1QxSUMzWjBMV3VqbU9QUmN0aTNEdDdBL21BcE5ZUk9uWjJCemFvZGxKaVZGUjhLL2VUZFlNMjFtcTQ0VXBmZTdwRFpOelk0WTVmc3QzbktpTUpiQXZES0I0SW1UczFjY1FaTXhISmRTSEJRQldEek81aWNzbG9ORk9BQlR2VHdaUm5RSzNMb2RUWmc0TTdpRWE1QWh6b1FZMnNpemM4dTFhVExxbU4vMmxqVW5KblFGY3BKMU8rVEFHNm5IaU1Xc1NaTlNZekNvNlhWV1Bpd2Q5UTZneW1xQmg4U3hGUjU2QXNVa1FncWU2eE5KZFVDT0c4ellTN0hHL1h3STNOK3ZHMEx3RGZJRW5vUHN6SkR2UjVLZnlFSTJ5SlV3azByeEliclJmaEZsTjREYm9tZFFBOTkzS3I1N1JNNTI5dXd1NWF4Zk9CeTR2cFo5QjlKMzRORVY1bGU2RXN6OGtkeHZ1RzZDc0ErVWdGdFlzNCtQUkF1eitJRFNQaEI1NGFqUTVCaitiMU92b0hvS3VBcmI4eUh5ZEtTOXozd0o5Ylp2aVN3SDhTVmNrSW5lbXoxN25WYWQ3N2dDVlJyOEJsbVBCUk5ycUQraW5LdE9WZGtGTVc2TldGak9KeVFuUjI0VUFITW5LUFEzQnhxZ3M5V0dIRnlaYmkwZWt5d2Z6M3pxVG9jQ1ZCdmJtcldBVkw1NnRCcVR5VThZYlRpdCtZZVptVTNrR0ZYK2o5bUx5Y0VNQWJ4ZThxL2txU0k5YTYwWmN0R2VBcnRxZHliaWFyZjVMeFY5NUNldjkvci9hSmlOMyt3dnJZSEJjbkc4dXRrZ3YwOEtFVmF6OVR3ekRsMWh4b3Fvc0RMZkVMbi83eEFOUGtJU0VGaEpmQ3ZtQkhJdUUwaE93eHBzNG03M3A3d2ZUK09LSXVveWpNMHlZVG9aaDMvdnczeVFxRzY0WGRQaDhjTWZyK2dlNFhBc0l4STlLaXo1UG93OTUyWVIrUDhtYjhSVjJ4eSswdDlkenl0WnhsUDloYVRFK2MwYVcxdmFjeWRWMGEwWGNYTnRJVkU2dVlvb2lQRnFBdFp2bnhVaEtYU2tJZXArRitNL2NsOHo3OVZsTHZnYkFDSzNxT0NrSi9jNVpsV1NTMHdkRVhIcGFUVzVpOHZidmJyN2hrMDlKVm9Td0NWRVplVDVVSTdSNnZmZmszSFpTVmNqdUtvUkd5UVdPNGNDMGRtdWNSRHp6MmF4cll5QnNONkxUc3A0V3ArVjY0K280VFpSbkhkNTQrR2Z4bks1TUdLdEU5Yzd2bkd4cVpoOEJ2YmdCeUxKVGFZdUR3ZVJ4RjNMc2NRNGxMRmJDV2xRV0lMcjNGOUtjaksxdisySXUrNUV3NU93ZTNzZERnMEgwZ2swcnpyNDNLT2RTK212L2NOdFNEcGtwcHV2aE5zM3dFaUlRQ05qdUhUcjNObEJIT0tpL3NLMXZZM1pwajk4WURjNGcyVU5BS3czQnFKN0lZc0E3QzVDUUFpVi9BekVSMGFVcFRjUkhzVWpSeGtGMEMyNFZyckxtMDVhQTFPMTFVTk54V1NmS0RNU2xIY1d6QjlYZkpMR01qRjNxRU1jSjFHNWZUSXRMREtSZGk1L2Fvd1BIVHczcXBLU3RiWWRZY1RRLzVWSndlWldEOFpWeVp0ai9RZ0Rra1lOckhhVHIxQW1tSHFRRThNWGNQYW1ndTRaTlo5M1FEb2tBbW03RG8yN1g2RXhJb3Y2ajVJQzZIQ2NMY0oxUWdXY1pHSDJibVRIZS92M2lNS21Cc3Uyc2xUb0dUTGU3SnNiY283Zkl0Qys1ek95a3QyTGJIOVY5QWhBNlFFTEttUmk2L3I5bGRnRU5QbEc5aHZQMzVWNmhLdDBVMTMyV1pKendjbEdsWnIrMko1cHpDaDZ4aWNBTFVFUjdxU3VOUGhCSXZ3cXVsVGdHaVJTVWFSMHpqSVFtWC9qcVFaSEpNQUx3SFh5cE5VeXVWNkgxdTZPNnV3MW1pQkM1cUh6VHZsZnBiaHBlTmJ3TGRtcmNTN09CdTJmL2Z1WVY1KzRNOTFLZ1M4M3FZdFlNd1gwY01FUG1TTlRVRGl4UHdIblZUUU5CQmxVeXF3VVhQaVFWTEhscXZpdzR4RnlBaTFVTzg2cjQwWEdaaDlIQkdXUFFwSjdmOTBleHY5TzhoaU92K05xRXFaeUlUZmRDVGkrK1RZa0RVYkcyakRseTl4TEMxaVVXU2lGUEdwQzM0S01OL0ZYWHNyRkF2amtoTWh2d29nUFYvT01vUUhUaDRIeTI0cmlNSTE4YkNveDFuUW1ab0wwRUNqOWpMUkVLTy9QeG84cnZPWVF6Y3pKdXhSQlJwRnNRZVk0U09Sa3h1WGxQTHN5TFZpb3FwcG4rTUVMV1ZqUFBaTG4wMEtRSHRSSVlhei80cmo4MVBjWGUyMCtIRnZ0K0FZei9UY2ZzbHA2U2NqQm5CMVdwTTRjcVJwNGM2Z3lvS2tvcFpqdU8xRFRzQkVxdW1uQXZSRDlQYVZNS2JqUWdTSEdFMGRqQlF1Tk5IQy9yR0o2MlBqeE9tMzdqRkNYL2hjRHdJNEtHUDJwWW13bVFkK3N4L2xBY1pvQmZXQVBXVjRCajNLNEM3dlRqOUxtdFhQV0dOczl6YktoY2ZEQWlyVXRPWkxHQm9NUWdKMU1UNGlKMy9ET3g2d0VTaERwQVlrdkR4bGszRFBXVjFWLzFwYVc1ZGpvR084N3NWQk11aHhUYms2NTdSTXRuckZtcW5PQTFzd2Z3aDFocDlQQUpWTkFaK3RrWHVFc3UvenVFS3E2WlltamNQL0tDT3M2UTRpdXhseFpzUVZZbXJzTVdNcjBVWHNLaWVxakVLQ2FKQW0vdFVxVXRQTVpISDhUTkU4MTVRZGQ5eVZIdkJISm5BeW5GbW9BR0dwbjdqRGFUNzM2bzAyRXpkTlFXb01HMmdENVlwK09pY2wwb05taC9BbVQ4Zmw2YkY2OXJjd0NXRm00V0ZXZU5xbVJNWklVY3FtaHhlTWVWNS9MRUliVzlQR1dtb09tTkZYU2hYTzdKZEpJd2V4eC8rb1gvaFROVjI0bTFyQ3R2SGx6d1JySG9HeHNFN21wcE5ZTk8wV09XQW15NzVkL2FPaUZ6M05abUc0N3ZnYlNQTURLYjNqcktCQzUydEdjdnNwU0lLZ01nVmhlTmV0RUFGWG5HYm9KS0xRcmRzQTFXY2FwT2N1ckxRZmFVTnl6NWNVUUR3V1FFRHNZVUlnYWsxSkl0YjNYeXp5NHcvTld1cGtPU1BCZVo3dWp6OHhlY1h5alRPRHFidkdPTU50L0toTk9xeHpkbktYcUxiWFVVdFZnUWlwblVzZTU2Q0tvQUorQkIxcFJ4TVdHRFUva3hNT1NXS2lldlF2SmNxV3NtUDUyTk9iRlZWOG9KdWphb3UybU93K3lrQndCV1ZvYnVCUlA4Y1JQd2dBbUFjYUorZG9JMlNzUkovYWZZQzR5c1VMRmVXdzJYV2E3Y01nR3FXdm5FNkg0MStJNitRR2szbDRITVRZS2JveGtGSFFWRmVoMlVNSkxCWmFIQi9Dc3M1T0dRTDRkWnlHdHlkOFcrRUc0ZFp3UGpJWlRNbFBtajFhZEV2TThjZDR1ck9WY05VUHkvOUk4Z3BMMHRwd1cva0VNaUpBUmVmOHR0T2piQ0h4ZSszdzlENENiaVZteGt2QTFWUXpOZXV0U0R2b0VMTkhueXZ6b0s1YUdWck9Kd2JpVWxlQThqV21FTDNpTnVKYlJ1UTNxNVlPeWRkVHNqWUpYQ1IwYzI5bUZYdms2NFNEMm5FS3V0bXBZTXZ3WFNUSXVJTEtJekg0Q0FnSUNBZ0lDQTgzMi9RNzMyL1ZTWDIvYUQvdjliOC84SDJGZDl2MlMvNy9mSC9oNzcvTjl2MFN2OFBxWHI3ZnI1YjdQc3o5KzM3RDc5bjJoSDdmZjQvWjcvVGgvWjd6WDdmcGJyNnZySnYyZlh6NzlYMVZQNnZySmYxZTNiK3IyOWdOaUF0TTZRb1BxenRkQlB5ejB1T3QwWjZRVjVLM2szTmRkS0Q1ejRvc094dkMrYjRsaWVXbkR2cGJ2cCt5RzdmUVcvTXo4R1l1djY4aE92SjJJL1JYNkk2UkczZDIrdzVoaE45MUtnR0lxNTZISFErTU13d3RhNy9HR2pQTzloNWtEdkJ3N0pUSGxrMlpCejl4TVJBaDh6MGpyMTFuL1JVR0hJL3lVV0VCVjBvbVNYM1JWQVhrZnZkYjVGMDZoNkMxSmYrcHhvVEREbjJuaS9IYUZTWVdwRmJtSDRDbWF2ZElsOVN6TmxZR2hlVkFTdDQrY3ZEdHQwMTc2NDVYNkZ2cHpYekU3UDF1N3Y0Q0ZwaHRNVVhSa0FTRzBBMVNoa3N0ZTI1bjJPZ2ZTalhQZHpVNis1RHFxdkYyNXpBaFpFWktYamc2TjZWQjJZNVlrZWt4OTVBVnRWSERudTdDUDJmTjVzZnIxcTI2RkFaVHpMdmE1bUtiTHpFMzVsYzBWcnNJaGNqVEZoeVB0cFRPYmsrS1lpZlNram1uR0lCa0xzQTM5N0Mzek1SME80ckxSVEVodGNOdHU2VnZWOE8vaGRPTWdCQmFjY2t1d3RDQmx0STE1RTBRQitPZlhaTUZ6cVIzNCt0N3pvSG1IRDZUZWViOUxpcWZrd3RtVXY5R2U2Um90czliK2d5ZFlrSzdpR2VHNVE3Sk1nTFJhZWltYlRaZkVlKzdaeXdTc28rQ1F4ZkxSL003VmtEczNHQ0tSaUpRS0hvM3ppczdFM2tPcjVMWFhBRGtBVW56UHhCVktiUDNMWDIxZnlTNU4zdXJqMXhTZElJZWxZRXRnaEl6TnBwYnBQQ0VDdnFkekFoUjE3bGVzLzZpUW1CeXlneE5wRmt1d0hhUzA5dXVJU242U1p6cDlrZ1pqbjg1R2dkTUkxV0FUWURhblZWNDFrbktRTzVodzErVndMNTM2N21sTXQzQ09UdUpaOUFjekIzbjMyWXhKbVNTZXdyNW51V2JGVGtrcWUwRXpJNk4rQTUvSSswNmwrREMrNUFxTjU4WTI3eWVBeFJJTGhlU0krVzd6Rk5Rd2FaZVlQN0RlL0RIVjFlYldPMFQvUC80UzhEV1BwQmF1M2NTeDM3elN4Mk1SZnIxNVVrQkI2U0YzaGdIQ0pFVlhFaUVabDByRzQ4ZzhKRENUczllZnFRaWgzSzVVZ29kMDY4cnJZVHJvZURwSkQ0TEo4TGpTTzBpd0tpQjh3c2lsbDkyMElkZFNPaktTUEt0TGpMTjRsNGhpYTRBVC9lNS9VNW1YN3hSa1M5WXBicTlFcjdRcE8ydWpxUVV3cXNmUGxrYXBBUEU3WWRNWjJMNldubUl0dzRCY2hQTWU0b04xQS94ZGFWbjJIbjdCT3Q0R25OZTRVN0RXV094M0tiWFJua0RrTWFuRzRXVWN3bmxka1VMMFdsNzRNSUR3NTh0MHJqOHJLRVBMdzVmK0M3VHdxcXEyYVZYSmg5YWthN0FUUXVsU1hYN0tYTnZ0R1JORGFERnpPSmxjYStkUzAvMitZeWhtV0IyL3MzQ25pYnVET2FmSjE5eCtsVnp5QUdHcUZvUVFFNzRWcTlJaFh0eUJZcmpOcXRRR0xIaGg0eTJjTmZvUXJlMzYwVnhEcHg2amJrd0FobFpzOXRjVnFhaXh1OG1zSTBKZE40VldMMjlMYi9xUnFST1ZiZ20zMWdEamdBOHArWmx3eUpBbGR0ZVh0YjhPZStyZUgwNkZNQW4rWld0dlVRb0Rpa2cyRHhTSElpMFNxMFRaUFQvcURZK3FSNFhUcHlYWkN2WEllMjZJZ0tvMUVubHZaM0doZjlhdHdQZkt6RUdWeUMvWU12QWVZSDBwbTl1TjAxeFpkYUsvWWFqTGJOL2lvcnNWRE9aazJmNHd0cmliM3YvTytoWVMvdW52U0o4LzJQbmxPNnZLRXBmb1EySWE3Y2pCcFBDckxxTzJtbTZiOE9hczdqSncxeHVkSnlrdElNZU9mQXEvdzh6TCt5Rkd1YlF3UkRtUGJuSkxqbVI5UnJqTitydHJNcGhQdVZlNWVkUzhPNEZPN0tDQ0VLbVNUSWZhUk8xT1Rob2hBT0pGUGV1SE9wTGNDVTE5UjluQWJoQWQvT0w0YmptYkZyeHp0ZDYvYnkrUDRsNWhDbWlTY3lmdUJSeUxWK01lemR3MzJsSnBMR1BodzZraUx2dUhJNFZEZW93TEJqZnZYSTRmcTBiSXY1cFJrb2VNOEtDb2tsK3pnUkYvQ3dLdXZSNjl4U3g0NGpyWDlBWSthR0lKMURJMlZDOW4yU0tWTnl5V3NzSFhPdTVLQzQvczllRGt5TXVHejFnNE9Jc2h4NmttYzFqdlRoa2EwdmxLRC9ycVFNWnJPellQVXVhWTRxZC8wQmZPU2ZlOENwVzVoVkdNM3ArTVVPdVY3OGF6Rm1PTTJnU2VqcE0rZnhSeStWMnFCMERIdkwzWEFOcnNaKzk5ZFkrY0dwU1pVR3hUNE5kK2s1dk43blcyTVZjUWhZMUFNb1Q5Zk4wV1BZaVhDZStaU1dnRGthdnNWZWd2NEVZL0VoZTdkMmpqVjV3eVNKOFVwM296YThYS3ZKVnRSd3RjeXlSNkptS0RyTDFDcCtJK2d5aWJEM2MzMGJpZVlzNDExcytkNjF6ZTZxTHVwSStMbWZTdGl4bkZoNzQ4U3RxRVorTVdvNy9WQVZSMHErNGJOTGpFd0llMEJRWGt0L3J2NC9saWdkWjhob0Z2Qzd3cDh4SVZSUEhPaTUyNHR6WVBZcTUzenpiODhYTGxBcmdlbEd6aFhtUS9KampTclhKYmFCMWFIZyt2dWNYeGs4ak1tTUVOeVBWNFFnWFpCRHhZTWxsWW0vb0pBdkk5VmFNSU1jenNTN3puMExaMzh6VkY4RWtqY3F1MUsrenhDWStEaWZ6aDVnUGdYeC9ndk1hc2tuTXVURklxaWFYbkw3L2d1WUhib09kZml4MTAwNmZ5RmJ2dzlBZWJGUGpWeWlEMnZGYkl0NU9uS0pmeXZ3djdpci9CZ3Bmai9WT1BTSTViRGw3dEFuKzEvamJWR1JNTWV2cGovTW1mTUNUY2E3RmR5R0crSWJOciswUnFHWUdlYWRucHJGNk1ZdmI4QlQ1NUVydVJwQ093d1dqK1EveThCNFFyWUorWE93VkVSZm9RMm1ZMVEzYmg4bWJmYU1ScTNqMTVKNFJ4U092OHFXQ0o3SXBvRWFaZkloRG5raXUvT1ZjcGtqOFFUcGdONTFXRmJEeFM3TmNwN2dJQ3hTQTRTUnBTeW1NYm5tSEZvWno0VlgrRnlXcFl0eGlua3BBb3VGZ3QzTlBUMUtwYWhOaEk4eFBkbDc3RFZjSFBCZVBtaVBwaVVlTXFVeFlFYW1yWC9MVi9XOXo2a3p3aTMwdVIrbzZ6TEtWa1VFMDhBODhjanNyL290YW1OaXpkY0x5cnZDS0N3QTVpd2dpVTg3WmV4WkQreDI2TUFsNG02Mmd2SjhyMHRMTzBFRjg4RXZBdTNPVGM0ajhLSzNhaUdPM0VnNEFTRTJyU3dGNkl1dllyU2VSdjVrWC9SUHorc2Vtenhhc0x2cFptZFR3RTVSVURKaXVtY054bUJzdDg2T0FTT09hOGlpOWdwSEx6MU9hQXJKbHBQbVliellEUEhEZEZna09iWWhFeXFaVVBMSzhZdksxbjljZlhveWl4OHdKbTVQdXJtWGdxeUcvb3hwWG1QNlEreVViQnI0L0pwdS9GU3FTWkczMk16MmM2VzBSZkpvZGR4WjlXOXdaZ0ZxYklSZWI5V2kwZkEzVTlhcFgvQXVpakltUFpnMHI1MmxXS1QrRlhVT0xtWnRKOW5RL05DcStYY1RVV0ZYcS9MMDhpcnlCWXA1QzRzVGFUdTE2R2dUeGpEcjRPUy9pQU1sM080N1hIaDRDODhwU0luRUlZcXQrZ29FN0lNSlFEa1pvd3pmYUxsZGZBYWkxVElSSng4SzNyVkUyanZGcTJzMFNzZmpVNTJqUldsR2ovQzNIN25ZWUlRL3cybHFWYmVyTGNOMmpiZjhzaGdvQ2tDTlB5SGJxa1MraG54QVNmb0NOOVpOUFEzRTRUa0dzV09GS0RZVDZmV2NKNkl2eUhabUF2OUlXeFFZU2NIVmZJeEZydVQ5b3RZVFZlaGtzSDFrMllqeG85RC90eU0wSkpZOXlmNzVnTkZrWi9keUo0bmh2ZE1mbW9CMnM5aGU0WmVwZk9DcHlid2ltRFdFd0ZxMVkwbEhaMmt1c2ZhdjRzbTBTTDB4NDhDa1NHRXNmZG9xTVhJTTlJUkwvUWk3SVcveEJiQ0VOSSt4eTZWdjcydXF2Nll3SXJncVU5OGl4cGJveTBwZXhseW51SEZwMklORmtBcUVCTy9pU2lPYnhQemtrTjlwUkthN0VWbmU4VUFuMVpoRHlQK2I2UUdkc1BXdkVpYUlmcWkrVHBrUnlvM09vSXljQzArVVA4aWVoR2J6SjVzM3NLejBGeit1ZGNUNDYwTFZxZnVSMVZYTEJoODExL0NHb0Z3S2pzSmNzMmltVko0NUI5OWQ1dWc2SC9iclVSdUFibWU1NGFET2N3Mld6eTBvZGlYcXlzTzIrUDhXTXBVV0RPSWZKdmpOc1pPZVk4TTFBRjFib2xtOS9md00vbnFFQ0ZEWS82TU90YVo2MGRoS2x4dllrVk5RVTg1Ti9VWmNmVzVvZUdzYmRmUmVTYzhnajNlaWVBbElYVmZ0VVZQRkc2RTlxVTczLzUrWkhoZTk4bWw1dGtrQmVpUXN1dmdyaUN4c2RnZ0tYTkRWazZFdXNmdWJMZG9UQzg4NXc2aUZXQ0JaaVB3ZWwvZ0dqVHhHd1pRN29NaXI2a3NmY1F2VERGOXNSOFZ4OFdiQlkvejBkcW9ncEhkK0RWZzlSYjRYY0NCQmhyUEF3RGFoY3lxZ0pVM0NDQUNDOFR1OGVzSElqYnZ4aXdVTUl2VzNsUU9oRDJBbGdhMG40R1kvVFFaR3ZocGZuWHgwbGNiMTEramFrOU53ZGQzQzI4K3hFYUxydFBrRDRYMzRlVE02YWQ5T1lCZStBSDVXaEp4WnpzQ0Z2bktyVCtySzM4RCsrdkdrNXl5N01raVJTUmYrUlgrbG5OWi9KV0NXNnJwbWtEVzBzTXVISGVScmVsd2NxMFV4cVZIS1h3WlJESVBWZzhHQlE5eXRSd2NsQTA5Q1FyWGtTYjQwKzVhWGI0SXpvZ3F2NTE5YUxOUHh2amNCSzRQdzFYaGxmNjhQb2RUNFpEQTFYVWRPaE1tRmY0anBWTzlCenJqT2ZsS3QwQU9GeTFIMjZXM0lVc1VQTjFJQ0NoYjdwVllzeGUxR2MySHFXSjJNSGUyUC9oRnIzaHVBUkE0cWo1dllTQ0pORGFVQm5pZTg0RHpBT28za3FzK0VoRk84L2c3b2VXcmpaSU81anB5MndxYXU0MFg1V0kvN3B2cHZMS2wyQkNWbFRNSUJ6aGJ0dzNUc3JGeUpIUUcrTWdaSXlHNWhkcmwrMG83RGl6djdsVU1XVnJkbUR0NnJVUEZhb2JWNG9RRUQzc01IMXJRMVd6MUUrWWE2NkZEWXE3UWVPcU1PeUdKSlg5UE56SlNYVTBNT2IwSHF2Mi92cEpDblB0cTI4ZCtJZUw3ZUFCbjREZENZb0pEejd0YVNpTlJXVXYvUVRKWFhVdWRXaTY5VGw5MHpzZm9Ob1RqUWg4bWtBdStiNWtibHF5MkR3MXk0aTA4TWxwY1lOeDd0LzhiWStsS3cyR1JBd3hHem5rRTdQRG5Fell3d3FicUZOQVFyRllKQ0dwYUVuS00yeS8xbWdFd0s4akN0MklWZmdWc3A3UzVMK0pyUzg1Q2lwZ0xtNVpjREtWYXNIWVRVRExRU3ZnUXFZM2Jpd0V2UTlseFhzWnZWdnpSUTNwWXFQcjcxT01iQUpGSjBhWUQ3bVhzZWMwcTZWWTQ5Yk40eHd1ZGFqcWpCSnVtd3hLdCtnS2k1OEFOalU4b2pDUy9qL004elF4TUpvdi9NamVyYXdUL0RCR1ExVUU2c0tTdTc1NDk2aG8wRmc2NDRYbVhkUU1jOVhYOEtuVEZKdlhPMG81bVQyU3NzTGNkWXJTakZLckhLM3pST2xBTDRWblE2MFBZNmZMUjF1VDNSSXcwcDVYTTF5aUJxY09MR0o2U1hBRzdTOUhsM3BiR2RBZUF3YkdCWDVrb0F2UWNqY2YyTTMrakRxZG01czZDRHpxT21OcEczWXZDWkNtbHJLZmZvYi83eEFkK0kwSE51Smt6R2ZaY3Y0cFVCQjZ3YTdoMm9kdXdBaG12S0RoY3VscER6MUhpbjFkOE9UM0psNEVKN0x2aEwrUWdCeGlpNHhxeG1MZHMrc1d1UmJjSy94NXIwaEovczJabHcvTzZZL0VJaExLVVI0TXhtYXJjMDV4Tk1XYWphNlMzbUdhTXFwaExpZnZFczkvdmNnV2VESXI3SzFYUWIyVUw0ejhBelpuU2dvb1k3cDVTMGFoaUNwd010WVk3UUJKNm5RMFltYVhhM3NLRWVNRUp6VzAzcWROazFGYXQveW5iZ2RKcnZwVk5tUGZpR2VCUEQxbEoxay94dkJxdGIzYzQ1TG1Qa3B4Q2VISjJ3ZnAvVU5PK0dNMU5oak1DQlg2aGFCV2ozMlFzdUtqREc0R2Ftb0RVOXc1c3ZFK251VVk4d3pIWnZ3QWJvSExLdVRRL0FiZlZJVitlUlNiTW5xaFdZajBqZXlaMUhsRW9EMnhvWFFVaWtMZjFJOUFuYlcwMkZYR20xYlZkb1hKZ2ZKNWZ0TnRRbDFjM005K0RMMWxDYTVMNlVkUDZRTytabDRjbG4yczUxNFIvdFJHQ05QSm05QUVjMzVrQjV0OUMxblZmL3ZlaVY0Y1g3Y0s3SFV0TUF6NThnZHUxaFZaZldvZW9VM25qbHdmbmlEUHpCR0x0QUF4eXlDUDBuYmViSkdWcXlaL29qTWpzV3l3SXE3a2Jwa0ZVd2duemtuOXpzRlZpTGkzekpZNFhUMXQvRTFna2V6Z0x3c0QwalhYUkFjUkZnZkt1R2xpNkxNa1JaVG56OG56N29UY0JiWlJEWnM3OHdITktucmhRa0htd0YwekZvVDYvRkRZSE9mcVNEbThoNkZVUjQrTzNZTnF1cVYyVzNNZHBDVC9QbnJvaWhxL25NdmVnT3FNWjJKOXFvbHF6ZnoyTjYzNGtoSjVNTnRxa2FGdFhmZnllR0toV21TT1k2MlJhbGRzRnkrNWNYeGEvQ3VFMDQ0YXA2TTUxenVuQVdDYTRNaDgwb1dQeFV0cUowTEVXWXhJOUhMdEs2cytOLzNhODBNQTZVUWRBbUg0eFZaVnJEa1VTME9aV2g0QUNoK1dpbE9BRnFkTFhGdzVrNFlyc2trY25KRTNVYmt3UHNMTXF1cnFpNTFOaWNyQytXUldRRkV0OFdaUGlwVUxQWENQK2g1Z3EzZzlwS0pBZTFvbzM1UUJjMVFwb0RQWHBWSlNjU0VqOVgvWC9IZUo4b0Jkd0pYYk1xanVSNUdUSlZaWkxBb1NuVEtJZHZQckNvbjlxTFNmcmVFR0pmM2hoaG5PZ0NvN0lya0ZpNitjV2s3RFdSbnBWK0VDVE9HS2hVSjVrQ29teUMxTTIva2hwUnlxZDlmZEs3TkxWc0F6dTVoNnlFSExyeFhPNGxLNFgxS1Z4NGtNNWhiL1Z2UFJldUg2MUxzSjlOaG83S3VDUXdjOVZOeWZxZkNjYm1tcUozWUwrWWhwWlVKSWRqdk9hWEpRQkxyMHZ1OHplZ2NDZHN0VEUrM3kzU1ZnZlp2d0hpTHk0d3kycGh1M0NQdFFsaVVDM0tDMlpUMlhacmxDV0Z4M0dTS2pKNjZNZzV3cnVkQ2pnNTQ0djhmYVFibFUwZ2NOOUZocE0xT1I0V1l1d1lDaGozMW51eFVJdXFUZzhGdytQWXNPc0xYU2kyc09XNHdnWm1XQ1FTejJaaHhxQjJLQzVJYXhTZldLMVJHaVdpNWg0QmtDUEpIaVRVb1BCaEhCeGRvT29qNEpaUEZuK1g0bXpBT0dmL2VTRUF1RXNObHNFZ2w0b05aSTNlSm5nV3FZZ3AydVdJTDYrSGNWc0t6MllmSzRWNEJVUXprLzNEQzlWSDZSK3gvV2xPQzVHT05qRUFaRUV6SnpGMmkrRFBSRkNadHAwbzQwbmRBb01mVTlPZm5jVm1qNGc2NHIreW1mWm9NSlFMMHhKOHBGcXlhc1UyNnptYUpOSUZmUUhRWkE5WTNZVkUvbGZXZWkyOGo3Q2RNc3FDR0QxeFNtQnpUVEViZWhFenliUzUyN3Vja3kzTG1Uc093d29CajN3TmRxRUJOcGQzK1dDbXNndW03b0tiR1REM0l4VEtXTWlSMTYzRkxmNzNnMEFoRTEvQUtDV1lHTDloZkRGWWUreGtFV2xiRGZHeTNlRHNhUjNiYkFNeFl1UXBKdXptbXhvM3F3eTBtdGp1Q2RCRkltVUJoeHNnRUQ1ZEI0ZlZjT1c5ZjFjVUU3OEp5dFBiUVJrYUZjMWwxSHc1Um1tVmJPZEdpNUxtSzYvUmVNMlBTRHd3YnJ3NTU2VjRFb0RNWmZBVjQ4SGh3Y3ZxVjVSSFNUQVdVRmlUVjJSeXZOd1hzV0RzMnJFYVBaaWZWUFBIVUFocEZWclRVbEJMRDgwUnk2SU9uV1hDWFlDZ1VCVmhZdUkxcHVjcm9La1dtbzI3ZVNoZk5UUkUrdXpYd0NMVTBIUFBSZ3R6YkVTVmFON2RzbXU4ZjJVeFg1TVJZTC9hdTdBUkNad045RVFXQmJQdGFER2V2ci9ZYjBOeC9acis5NTRDd0cwWVQ3Q1pHZVF4WiszeHFDVTdrcGhDOEpubXBSQ3gyRnNBOEkvUllrbHNOOTYyMnZoZEVyTEFUZUdOc3FoaWhYNXlLMmVyY2hUTEoyQmVmWGZiM0dpMUZuaU1sM0gzMngyY1lHNm9LN1IyaVFxMXFyRXhnRzJOUTZ3bnlNWXVEQ1dWVytOeThsMG5NS2NQTzVETk82Sk1hcWx4eXFUTFUvK01mSG80Um5NbldnZ2h1YXBDMDNaVkEyN2tBMGcvUjFoS091R0FWL1FadDZ0MUthRFBnVnY2eW80WnZMYngyN3FTYjN6V3FXMUNBbHlKS0wrbUZJMHp3K0NEZ3hVeElaSUdEQnhlY2dMM0NRdUE0VE5qUUdoRDc1VWxoYkFob3UyOTJMWHlwSkZYR2FoL3c0czNENzJtLzU0ZXppSmxTemNrbkJCdVV5NlhRUUpKeGxVWURRZmFZN3ZhZmd4eVAzeDZzWXpxWkdOcEMzdUpmTE9tWW5NY3NEWFRodG9KaDRSYlhFS2x5Tkl1RGZkay9iVVNteEFuZjJJMGFyS3NtNEhQam9rcjMzcVVwZW11aGxrZzVxMGtzdkU5MkhZZnBPeVgveUVQelQyR2d2K2h6TGxRZCtCTFF1U2txZHVrTTlPeFFEejhsYmUvMXp6TFFqT1dnOHZMUWJOczB2WGJsSmx2T1dDQzdncXhIbWRXaEZROGVjQ2xTUHJVVHMyblh2d3NyVTc4YTdTUHo5cnhxRXprZ3lvZ3NyN25OUGdpNTZrWSswWHJJWkwyOWV0NXVETHAzd2VOODhTQjdoVXBIcUhab0owT3FzRXBFSkc2UnJmd3d3eGNSVzBwUFFQSThLTWsxUEplRE9KNG51Sk9UYXNpMGNmZ3JRSlArak11YTZabDR5cy9YMm5VNXhHRjlLS1lrQ01CbTdzWlpWbEY1ZFdoQnZsaUdXYVl0Mms3ZG5iOHVZVHlZS0pXSlptYzhxcFZQcTFWTkhWTGVUSm1OMFlSamtmTU9RMU1JZ2wxVS9DZnhoWDZPNXBlSFQ2NS9xWmhvdVBkRTdIV09RUm53bEtYSDVJdHR3UWsxVUZoR3ZOZkNiWmY5dmFpdTVKMjhselA2Z2RxNkNqY1FrWXhjUkNsRURiZVlWYU94Sm1EOVBrcVgzQjZMblM1bStYbldvdFg4Y3hUQ1JSckpCYTArMzJYZzZMUGsxNXlYWjNtR1YrTTVENCtwOVRHNTQzSkxQQi9td2lsS0dJdkhZRFdNOXN6M3VDcEI3QUpSUmJNck96enBuZ2xIRTAzbHNIampYS1BBcjJRTkl5MExWTG5BR3FmaWFqb3JqVFRNYVRCMjJNak5rWVh0NmdTaEd5dFpZQ3o0T2MrbzRUa0ZHNkNwQkpOMU96U1dVNTFPODk2aTA1bUVDUG1zbktoQnZUQUdkck5sdnlFY1c3Qk53UVp0WWFkYmYySnArT0RMNGVNeTZrZERVUUlmcElheVNIbUx5SHNQT0FndFhsdFlWdGZyUElVOFBNaDMrK21QTEhCeUkzd1plREhQcGVSMUh3UkdSWUt3OTRwbW11a0JwRkk2YUdkSUsrNHZUekVOSDdLV2FKTmdySGpuKy9OR2ZJSkMwS2pGaG1QZEdWY2NwNVdrekZkYUFxeUg4V00zcGZMUGZpd2hNN05GUGZqVDMyUFZUaWFxTkIySFJnWEpEWFMwdTJVMk83TnpHMXVLNnI1RmFKZ1cremZwd1dBaC9IV0s0ZUI3eXlDYi9VK2g4d3R1NUNWSCs0SDQ3QWw4eldXSXZQMFFhTU4zNWRGNmJRa3V1TGM2Rng3TXJqZDQrY3JReUM0N0krUHNhSktjTXkxelNFQld4Z1pwWlM0MWlURFRBTVRqTXNUYkVUMTI4a3QxNmNnY2swY2R4eWk1WlRRZ3dGZ1dFQW1Oc1VoOHA3TllXclZoL2ZFb1ZMOHA1Z0ZBYStOYllCUWY0emI3ZGRla3ZUbFR4bWlFVlcvcmRORUhIbDBDY2ZsaDFqK2tVb090NG12NlMvVC9Gd3g4TWZSQ0llYUovbFJPei9ScE1OSkRNZXBhMGEyKy9TS2pJKzNzZ1p5T3pEWndMSDkxNnMzU2ZxU20vaGg1Njh2WVBJdlBEV25xYWZsd0hyeDN5Nm5uTVJWdDF0bjN4dDZNMGhaUFN5V3BEYm5OSzg1aUFVc2VVR1pTbEpRTTV2ZFc4WE83THV1NUxsUzdHeU8yTjBpeVk5UjlIdEMzWmszSXI5Q1lQOWdSRkhoOWFKUVVTSDh3VmZGQk80UGZzVXRrQ1ljQy94YldZSTNBYS9DSnNWSmcydGh4dGdZaEJZYSt2ZDJUSmlvQUFPb3h2SHRTakU2Zld0R2FsZ2VlckxKVHlETmdLSGZ2Y0l5NG9xZWlhR29yNWhseUhDcjRYUkdJYmhNSkh6V2V1WnFvMzBqSlByYmpMdW81ZThJQ1dFa2lxYmV4Z3ozWnpQekJ5NVpHQWE3M1cxQndpbDZXbHl5aDZpcDloWVNWRHArcFVuZHhzRUhSMWpIdlpzZmpyd1hzMVY5M2oycDlXd2pSejBVdCtobDN5b2lWanFydnZNeklTKzQ0Wk1kb2xxUXBmdnltVjFoejRKN0llcTcrcDdQelA2OVcwcWVEb2E0VWJZNStJcms2dERNMnptMGZNQ0MxV1RzN2N2SHVVd09MWlUzUHlicTZ1T3p4M1oyTGdDbDZ3SC9MZGdjdm84aUswNXJHMHNLOFlZWmd3YkhhWk1FbElicTJLUVpNd2VnczFVdTZ5TjVJRHZTL0c2d05uZ2U1K0UxZ3Y4V3dpUzRqWVAyM3BrMThDZUE1OVkzSGlFL0pHWDlDcEhNcnRiOWd4RXpVWmF2SmRjV2lQQXFFdTlHL1p4dkhWZDBPU3dBeS9ReTAyTFJaUTFIbWRNb005Wnhpa2NBd0QwdDNBbFYycXgvVVp6SHRZWXEwOFdydVY5dUVCS2FTNXFYeE9pOTRYZHZkRDVJNU5oZmdCN2srT09GanRBelRyY3d3QlRUT2djU0Qyci9YYzZZclRiRnRNU0pGcU9BZ1V1RkVXK0tDNmhVbWNpUVZXckl5RlRHcUpXcjFTN1RiTmtYZERFV1AxdDF3ME5rS1lWS3N0bldUMTJ6Q1k5L2Exc2hFeUVvOUhkaG5pdkN2R0VvY2Y0VnRQNm1rNkJKL1FwbnhLRkVzWEtRMEM5ZkZHc0sxMnVlNUtVUE9GYyt3K1BaYks5c2VoNFBSVUF4ekozMll0QXBVVENuN1hDdDU1bDRnU1V1QlYzS01qY3BwUFg2ejZ2TnJ0R2FzZjNEQ3BTUDNRZ1lsZFRSakNsWWdsK3g0azN2cFV1YVU0QVJzd1orZWU2Y2hPUE9SekRlY2ZyZUNRNnJWcjRjUjNIU3oyNkVqaDJ0OCtDTmdoRWZMc1ViQ0d6WnV5NFgzL2toMFNheWFxNFU0U1VpVE5GTTBWVzJWbkNBZDRBVFhkWWwxb1ZwQWYzbGRMd3VQV1Nmb2x6OXZRM1hNMGt4WTN6Z2tjSy9GdThCaXh4Rzc2VTVDbGdWS2FoUG5MYUVyNzk5bFpGMUwrbytCSEhGWDdSZ0NnYldiNngvaWkyM1JmR0Fra3B0L1dWWjU1MjUrU1ZjenBLYWNRZHFDdlpiQUJCbEJkdkp2aysvazlGcE5VUmZ2NmxNNzlIemdYQ2tQaE5XNzFJbGlqUXRvcDF1VHFZMU4vVkFmaWNVUlUyNEo5WDhVY1o5OEM0M0Vqc2VSZjduQ3ZtVTF6cktNek5sL0x0Q2IxbXF5RkE3VVkvRWtZbjNORTYwbzJxY0I2eVV1OTF6aUpVcVlsS3p6RE8vUnFId0Jpem1XNHpBTkhKamZ2Z001WFoxenBJRlFTdU5xaEFQSTlhQWhhUUp0TVpyOXBEc3U0eWEzLzdrQzVnRktmbkkyOGt0YTdaSVhXVHpMazFIKzdjRjZYNUxHNDNONG1hcWJkdEpnRjV3ZTQ4bitiVS9vQXUvWENEY25RV1RRQng5bUpHTHA2ZHFzNFJGT1d2U3pRalRlaEEvMHBjUnJvYXpIcFRUb05uSzhwVWdGd21SL0syTndXRTg4WitISVN1VXNhM1o4eDB5S1p6empuOGo1OHlQdVhXenorZDltdUJ5YmxJVks4cHdKN3J5MFA1dSt0Vy9WSGNDR25aR1BLOUtEbFpYNWpKdFpMRWxFbGVoS2Fsa3hlRHNMZnd1N25QMWY0YlNOcXlNcGtQQnFYMFJmYXdyTmxCTCtZZGRZS1RuYUVQYVAyVk4zbTJTZ0l1bmNmY2g4dUxGQlh0cGRaS0pESVFINUFnai8xNzFWSTdUcGh4WUhBUG96a0FlZjdmR3FKaDFESmdXWXJZMVlCNkhvWTgyQUd0TFNROFpZejd0V2FjL25mVWdUSDlFZXJIUW9hdFE4a2ZqZDlEVW9jUXhibzRKYWZCR2Rubjk1QXFHUTBFUEkzTmVKNFpyREVJS2tyQmRkV1ZkdjhJL3Z2eTA3TTVZWC9zVkVFendIZDRZanNaRU11akdPaEF1MDdtcUpYQWdSV3ZaVkNUK1hlMHNLRWhmL1dEb3pRUkFPV3NuaFdwTFBoSDl2akViQ1N3ZDNQa09YK0NkK2Zxd1RLRml5cHEvQXNuZXIzNlBKeG5JYy9QU1dKME5aeFZGdGEreTFoZU04ZUlqM1pGT0dveGN0Ty9KdFMzTUUrR2JrUnU1bmRncUYzNmhGYzIydTBmUkhXRVFyRzFGMkJ1SkZlbWN3ZDhqallwVVJzMnBSbUdBZHA5UHlvK1p2NkkrZ1dReDJoZC9kRjNLUEM5bzdERTZ6QUd3c0pETXhMQ3E0Qk9DaEhEN3lHdG5mU0pKS1loL0xkdzRjSWluL1J1TjR2VzVCaWJUdTliVXQxRWUwc1ZGeEgwdzl2UHhheHNHUmhVQmFuRTU5NTZTeS91S3JzVGpwODR4SDZheDNWakpvNG5DeGU0V1E3YWVmVW52NnpSQkhCWnIrNXlVR0traEdzb1ZUTzZYNDFDOUNXazVCa21udUF4YWhkU2psdHRzQjhxZDVLUXVqRHZkUElGS25ob0U0OG1qWDkzWGpFSXROV3Jkam5zbytoVS9mN09VcE9XZWx2alBMalBHdVRlUVFoVGRqOEtRUnlmcnlYWDAzTk5lTkZLMGVWVkNGSFJuQ3p0TytPOVlhNFVyQnVseThiUi80WE1EamE2SjNHZXBJQUp1ZjkyZE82ekR3VXo5UVpxaVkzVWdqZGljMElPNTFGNUxpY0k1RERFNUxKSkI1WWI3Wk5rNG12NFFpbjBlKzUyYUtQUkowa2Ixb3BsMkxkODI3aGVqamM1T1MwaUVBUFhlVGI1Zk1xMXcrNkV2N2NKN1VEOHduTDZKT0lMbUp6cjAvdzJQUlY3VFRjcmx5RXM3ckkxbERqRVNTbFJkNHJ5cHI3VUVJWUV1NkVCdllLQU5zU1NpbFBvQ1ZKMktIVW1oSWw3aGNTT1l3SU03QkNodTF5aXBWckRqUldUYWcrNUZSUmxQWVBQQ09ibFdERHZMdmZ1YmUvMHNpVi8yQnRBL3hEYTVNeitLYm9jRGhBZHZxVE1WVUlEeEJrRW5XMHVoYStlVHpWcTFteGowTFdha2EyRDREVTU4SEgxaUVoWUJoYkRiUlR3c05yWExxVUhHK050SlRJOTZlc1hLcHVlSm5nNXRuYjV6R0UwbnZvRlgzNVU3TjZUeC8rQllzMFZNRjgzdGl0TjRvK3VHNzg1cElJQW5xd1lmK2hkWjR2VnN1Rm9zMjFQZHRzM0tQZXBUN2t6STBtaGU5WWF1OG11bWh1a2V2eU85b244TG94dENFQU5lcmcyTmlKVDY5QTJJUHBYWmpQaHpuYWxpSnVvSkhOd3NFd1ROS08wcjNxR0ljTWM5RzI0eVdZOGI1QVczbkljb0d5NGZZdGdkRTRra0lpMG12eUlIZWRrbWJBMy8wSDVvbXJDZTZtanNWQ01TbWNmd2E0M1ozTGYvMUhQU2xCODFibG5tdzk5ZDNqWW5xSXVvN1RTaHlpaW5LRzAxMnVxdC9uWTRrSFVTMHZyM0RpdXEwUUI0YmNMMWZhS3NoSm9RNkRNdVp1QU9qZDFWSnhQbmlETmtGQkpIbVptaXpNbVZsSlFKMnI0SWxsOU9tbnMwczBKZUVhNmNINDQyNVBoRjd4dmdPTmQ1a1gxQmxVY0VLd1R4eWdUQm1vRXFCOHdFWXJOcG9UTDZKK3VpaTdmWmZBMlgyQk54a25ETGtwK09WSWFtQzZXNlNucEc2Q1hJSDJGN0dSdVFaSDUwanJES29mU00xbzZmcy96SFRyK0xOVmpLeVVnZDk0UVorQUh0MFdqdU1uaWl5SDJLcXgxbkc3QWdSNU9FenUyZTRadFVPUEw0UGt4NG4xeUxsOGY0Z3ZxbGp2SmF4amNOWFdacW80QUk4QnFoUjFWNGtTOThYUCtlQnRoQnZGdnFGTUR0a2JSemJnNzFSOGpMM1lEOHU5QWRnZVdmcGp6ZW42QzRPbkg0Vm00MDZ0ajBNcW9CaW9UUEF2UFJSREYvVTBndG15QVd3eDJ2TXAvdHJQdWhPakNibDB2MEZueExwTW1KeFZQSDBwOGYwcnZtR0lOc1hQUFZBQkw0bWxLRFlvSEhVUmN3eVUwb1dHVElGdW1VbWNoVGNOZ2hOcDBLVTRxVjZiMVBTT3ZtbWsyVEx5N2hSREhQdU9VL0VKRmRwVjdwQlZwSmN3R0VRbW54RzFLZ09LV24vTGt4VldpQlJsTTZZMXhrbXNTVWVUQ09HSXdldkh4akdHbWtHWUdUUnVSK3Myei9wZjhRS0VKVm93OElqdy9oMlR3UXY4TFJjRks0ejVueGx0NXhYMGI5WVpjZjBrMHRuazhVZEozSGFlc1dhZjNCRmMxVitUcFgrYTBORFVCdmRhWGljWk01Vm1xY1B5NUdpTE1DQm00NllQUG9obFJXd0Q1VG02dEdMT1J5aEp1d2xaWkVFQkFORnNUNzBaQ1phRldQQmFMNG05WnZSK0lNMFZNVEZaT3B1MFVYL3I3cVoyNHNuSlQycUo4UlZYSlJTMC9OSmIyczVuMTJqUlRvOUtPUE40Znc2WS91RmlER09xVkhFalRVRGZvaGpxS2JVYUNNU2QrUWdsUHZPZEFFM2Z0UlNGSGRTZGxjVnJ0Ti9haVJnZlA1VkxTeVhtSVFkZEZxcVI2RGttSThDL2o5TFkwd1lpTTNkdjJVcXBqVndDYjVRREdLY0JyR3VycDgvaWVEcFNWdzcrU24rS0p6STJocGRUenpqbmZnbHo4UWdRTWZsRnc4cmVRYkZKcldiWkNEZzcxMUU3RG1Zd3BUK2lQTWNUSnowendiSkNCVnBFRHgvZFVwRnFDNFRIRzlvMzZTbFIxTmN1VU5LUmxyWVZPZFMyb2RMeW5LU0VnZXZWbWFoUVd4ZG1BamRERUJSaVhQajFjMHZTSTA1VWVyd3NQNWN3VXdkZ2JKR2xITC9ST3RxTjJCYnN0czVYTHpvNWdWUTRHY2R6ZkNNTHlpWkNMVDhGb1JESEJJNWtlbS9nTzI4ZGQzbW5tbU45OTdOc25rWFpKalhwNjhXNFF1N0F6YjdobVdFQ3NiT2lIbmgxZHB5YmNOOVJ3U3RkV0RJOXBOTGNod3dPQVRiSFZzYnBGcnNSSmdGeWs1MzYrV0xHWWNXUm5LWk9lSDJwVktLMFV0U3E2c1hoRmtXK09RcVNHQThpbHA4clo1Nk10VVVqZng1RjZPY1lPQU90TzBRQTJhN1NJWG9qQ1lCQk1LUmJ1ZXRPTTVwWE0rUDhOM0M2eE4wSXNKanRDbUdpK3hnRVZhdHVNN0QzR3gwSHZtaHRjNzlpYWJMN0FFc3RaMitEVXNQRkk4cXBtWVkrL0FHS1A2OFN0M3d6Tm8xN2x3MHJRMXpqbmZDendTV1c3TG4rQSs4Nk9qdmlOUFJyMW96bzd6OVlYY3pjK0hVaXJNbzBMNG9kRWo0YnROakhFMDJDV1ovVU5zZjdUMVByZUxmaTRtSDNFbkhmd01mZjcxS2JNWjRaUnFGdU5DZVZTUndTZFUySFArRDRTSzd6ZG5aUkZFOGphZEJ5ZWVaZFJxazZLRUhIZDNkQm9yQnRDOGRlLyswYnZFOW5PR0VLZGJZM0hxL2ZlSUNyYzNiUHY0Q2dRaWJOQkxZdXdUcGtiWHo2TkZOaVQ2RW5CRVhSczRYNVRrTmROYzd4TjJGTjhjaWdoYVJNSjI0MFlSY0dYS0lKWVc1bWJmMkM3ckV0VXNxaSs3cG1GOVp3NVRnM2tkNHlFS3A2QStrMW5DRC9PaEVqUTFrU2ZWdW9wNXl5bGtpRXc2aDVpSUdUTVQ0dVJJSVJTZmowUW1ueGF5d2MwT0Y5dzFMYlQ4MXNtWEhjcVV6OVRweGtMVlhpblVVQW1pdFYrbGwwMWRxVEhTSmp4MjBJc3N5UkVoU0FIU3VFWlNRN1l5Z25SdzBEdklraDZObHZadWkwZHFIZHZpSFdiNVdBWW03MGxTVXRzcmNtYlpIbTc0cUs3YXRKdjBTZHZZUHBlRThzTzByWm9qRWM4WDF5QU9WVU1GNTVBZDhXSndnOUdMQWYxV2JyTUIrTUhUOTBqdUFQYnMrbHM0dDdHeENyVVl1dW4rSUJ4R1VVOVpHak1DVlFvbVhwMFo4cHNhdXFkbHJEL09tOWJPd1Vub09XQmZOQ2dQTC9tTFJyc0tHakZEb2c2ak4zcU9MVnV0YXhwL0ducVo4UEFuWGpFTldjUXEvU01QM1U0RmgrRitzeGdNK2dWWUVkeGlsYit5MnhBeVRCM25TQlYzYStwc0pqbFFGZk1TQm5pRlN1cFVPNXlkOUlrSTlTWGNHS0N0ekxGOUplM2M1d1NzOFdUeUZPaWpqTG1rOUxDdXgxV3lhT2UvclUranNwK2V5bDdFNk5BL090cjBUbjNJeVN1SlRsSE9CV2dwdnQ5bm9xcDV6bWlYazVLc1VocXhWdnhJRm1DLzE0aWNIRkNQbkp5dno0N1h4Z3hUb1phVUJTUUdqUzV6VGxzVWRBUzNPc3lzY3QvVWRkUjZGdTE1OU5aeU4wYnlkM2Q5bVRHeEI1TEhBZmxXazdPQlhxK3NjYkZyYlRxb29Dd0xITGt5eUVWWHpDaXhYT0NTak9WYlpwTENsa3hOZUpuaDdHZGJsV3BqMloyZGlqQTJYSyt1WFZQa3pKM3U4RVFYa1dCa1NXMFIxeGoyYkJWM2g1NmUzdi9IMlhzY1BVWkN6RFZ6L0J6alk5YXVWbE84dHkyKzhqNHFBYVhyVmhZdUVjdkF5eGJaY0taZnV1ZUczYTd6akJEamcyWjRwMHlVclFmZDUwY1JReVg1K3NTaXNuRE9jZnZzU0Q4UVlRUWZOSmpvcTdza1d0U2pXaVdFUmdPcjM1MmUyUG9uazFGWk9yUzhjTit1d1hycWU5bjVIS1dsRW0rRHlPUXNLcVdxc2dNVC9HdW1FeURZTnJ5eHVCSnJCb1VzbWlUVXZqSXlnNFZWWVZLSDZKRUNiL1Y0OTRuVVM4WS9FVDNDZE1FZ0dtbkpTTmI4bUdham54U25yenR5MlpwdzNaTWNmems3dmJsMmtZTmtkZDNud1hlZ0hEREU3TzZ2cVVqZ295cTIzZWJ4anB4M2ZKVDFsUUNNaWtuK2pIZmRUSGVqcWdjQWUzY0ZPSUlpR2lpMHdYL2RWM05OeTRVcFBZTjFBVXZZdklIY0s2VnZPanlMSktzS2JBZmdVVkdiNGphOUhDQXJSNDNSSzVLNGJCbEh6Q3VTY3VvclFuREVaM1JiZTJzT0l5WXdDMmRGZkN3SUJyNTR1L3c1L0pMODU0QkVKRUJHUDhhbmJZeGsyejMwMm5mbDNTR1YvUGZTelp6SXlXYXVsdW1tMml2VEgzK1ozUlMwU0lHM2o5emk4SDBsbjI0RmVXMzNFc1dvcXRaa0NOS1kzeDRMTGZsdGlUeU01VU1TdlJWY0ZJQkFGdU5pWUwxOEF1cGU2RnVLbGRsbVhQWFlDUnpqR0syOXNRaWI1N1hVVnFzK3NGamVOZVVLS1Ewb0dsaVVvSUlCbnM1SzNodWdya3hXT2czY3JadFdxbDNqUEl0ZkRpbEQxRDVyS0xZU0FjRTc1SnFhR3V5VUFidnp3TEhqcHFpbXZXaTlsMENHOVZRWFBUR0E3VHF3L0ZNaTAwYW5udnlrUzdoYkZ6eVhBWFFocXdSUVU1Qk15emtJRFhQbUZrUi9mTlVEWHhyT1JaeFczMEhoOVhUcFNBRnhuRkNITCtmdWJiUWFoK3dOMVZNNzJ6cGNFRXBQVmFLdFhmTVRJOEJCbmE0S212bm1RQ0s1TW94VDBjSjYzcXF2WHROUzgxQUJna2dkdWhEVFFuNUdRWWJBTmhHNXBLaFZtMHFXL3JRbHdoRGdVTCtWOFlDNXR6M1VvN2oyTDBoK0J1M2xpMTBoSU9aWXVCUUpLZm84NHNIUENvOTVnd0NCUnBqbGFua0FDc2ZpMGNkckp3V2h6UnBWKzdBM1ZleVBoZExvRTc4Rjh5QUFyaE1pL016U04zcU5sT2VscnRzSndieDVmOWJvL0pQeW10bUF6V05mMWhra2JlSW1JSUFGcXdlZW5xZTJ5WnZVSFZSaUs5alNobGtWbDFXUFVUL2NrQmZkMXlFS0JzZVlvbTJWMnJhck5aODVwQkNpeG9XNmtaaitmc2QrODRIbDlGMENFWnJhL0dmeEdrbTdONVZDTmY5b1RDWlE0eVpCQkZ0dER0VzhQNkowNmdDcXZuOHFvY0dodGZ5RTlFMGNRa0lGVWk0TXRSdFNmdW8reThWK3hFQlcvcHlDaGlBaUZGRFhOa3I3QTdSNWQ1SzREMWZiVmtabnZJWWRTaDZ4V21DMDk0Zll4Skdkd0g0WjJYaGI0ZEk5M1RrVHJZa3hLL3FSZytFV1N5NXhkZUJOQXlpMm5GS1JTQWV2R0x6L01UaW4rVUNyQUNQbzRqWkRkTi8wWWtlN3k4d25heWdFS0dIeXFUeWpFUlVGRnFQYTR4Vm01RVdLcDJxQ2J0ZURCSlFhMzVxaEQvSnBKaGdOazQ4NndTQjR6Ym10Z1hjYW5rUEcyQzVVN1FWYjhkdGxjMTVqQUVNREt3TVdUMTU3T3V6T0U5c3M0VUdWR0dsS1hYMktHTXcvSHZGOVZ2dG1OV282Z1E2eldVZ1JvY1dzSnpaWHh6MGZWTHB1MUxOQUI4K2tYVENSeDkyVzBGT0dvRUdGM0ZQVmxSTUdEalZjLzYxUDVIUEV3VWxBS0xreisxVjN2OWd5T2NRU09qUnRjN2w0OFU1c2RvdWY1RHRoaEJMQ1owb2xqOFJDSFlnNDVGRUs1TVRMVmZJS3JWaW5SdmZWa216aWJEaE5CZkluYm9EWWlzQ1BGbkRVclcveHY0RTY0K0RyRFR4aGhRTWFpMFdMa29rQ08wUFBJeHNBSmNZTzJCYkJDS2VnNTVCcW9nRThWdUlRMDE3dDF6VHhSMitSclk0Z0ZDMjN2NVJFTi9tcVdqUGx2UFRyNWZveGxxbWF3U2FyNW5MQnJCcHVNN2VOalkvQ296MUdrTVp0TjU3SW8xMVhDZi9COTFOclZLWWwzMWtENTI2OHRuZHRyNEpscENtU2Nsdm1pWFF2ck1yNEtwem9lS2R2d3FpWDJjSHhNOU9SRnJZblJmdFoydmJRU1lKeHdxdmpoRzJFRWYvVk5vbDU5S01LdjkwNENTSzh3NkhVaWF4cVZPRi9QaWFHdzlYdXp5Kys2ZFRtcXd2YmQzTjNwTXlGRG9NVGg1ZzVaMTFqRGVNUFUrOXB6clVBRkpuUy9yNXFwR1lBMG9uMmxFOGEvQVQySGo0ZytIUjZtUmIvRUg5TUpqay93OC9NUUxzNlc4OFo1U1RjYnN5UnV3SkplTndHYzBPQkFKRitJVW53SW5ncHdXY3RZL01xZnpFUCtMR0lncDVaTTRaNWxTWHhGQk5lbEQwMHVzaGRqbjBYbG1WZlVXUTI4VmV5b3BtRVNiRm5Idk1PSlJ3N1g0Q1V1U0lGOTg3RzhqVTRubFNRbkYwU1NLREowVmlmRTc3cXNLdklwMDVxa09RTm5TYjUwTkRRR2taQ1pkWjBoMXhoRE83ZHZ0d0F4QzRlelZYRm1jUE5YOFZwTkNkMUkzRmQzOHFVQjJMckpBWTdnWnZ4YjE1MXJ6Z3kxMjRNV3JNSEpKblo5MEYwTXNxRmVQWkZ4am5FN2FhNElPVmdVM2dqVnpNY2ltT0lLc096N3VJYWlPSHdkNDJCaEZ1L3JtRTRpNjFrV0lQZEdDUGdudjNJL1JWQjFjL3lTTDh4OTUrQzY4V3lPckwzeGRWdUVHRk9yczVzZ0R4c0tyOFl4ODgrTFR4TWQ5SGNuRjlyTm9FdlNKV1Q0UnNSckRrNVNRbU5FeDNOZjlnTmhVdlZEVlBSNFA3L3kxeFZkYXhhb21adDFhNzlBTGtYUXFhT01aWlJ4MDJzcTRlemVIMkhOL3BWeCtwbU9FSlhMNVBmczNXRU41R2ZEdHowQ2RzaWZUMkZFR1hteE5COXZqUERiVDJIaHRldHI5bDRtQXhBVHhmd1k5Wk9LNVJTU1A5aVZIMVJRZC9lT0JSUEtrSk1FTDNYaFowL216ZTRwU3F5NXR1NTU0anNRcG9TUXFEc2ZVYzh1NmZXNVhZelZWNTdyZ3lQZFhwZFUzQ2UrVzB4MVF0bWhCVnVCaHNiWUtENTVQRDExRmExb09OSUdDelBkYTJkVHgxbUxramZhZFpjdlA0OTY1RjFoNnEyNVpSRHJkc3JrR0pTckFQWEswUVFzcmQ3R24zdDBxMW1mWi93VmxzTExmaHpESkcwZTNpdEh3TFZaaDlTNlNjQmErU2JndjRsL2pYN3lYQVhaSTNNTHhFUWdPL1hzNlgvRmRpUGZiRlFzTnBYL01DbnFGWkVrTTgvQ3lYVDRxL2w5SzdKL3N5VndCdFArRG8yQ3VUVFNQYmVtVzl0OFBwaHdNMDhvNWdmU1dvSmNQV0lLcWwxUXFxWmJxK3lDUTdsK2JsenNodGhoUVNzUmUvRHlWdHNNRlg1Zlhqd052NjluSHB6NFgxY2NSV05DOEg1S212SVNMdndtaEVXZkRmYVJtSmVpZVpzR2ovVHY5VVhNMHpDQlhzcU1nZFJHWkg2OWQxRlBrdHo5cFY1aFhEUTA5V0tUZUFZdEpieFc2NTJ4S3ZOWkdpS3FNMFBaRG94U0FVZ1Y4YlZoeW9yR2FvV1lkYVROWjNZeS9PTU44NFkvNWxjcVF5WjZ3SmxPMWdjNTlOYTNLVEhDbWQwYzNCRjNrUnRvYjhHSDJPTjBKSHp0K2lSSGdTWGc5V3Q3OFk4djBCSjh1WDAxWW03UDlmVE5aZWplMUdZTmpPTGxlMFIyUDh6dG9lVG1aOUxqOXRBb2QxZjlra3NsTmxoRkRCT2Q1VVdkK2lvdkk0bG9IeStDd1k3NXlmTFZOT3JYNHJGeWFJUCszOHFYRlAwQkpDYVF6UUdTTFdvN053cTI2OE1iWGpCQmJ1dnZMUnVpZ1MrVC92SEIrSk5UU1RMUUJ3ZzBBcm56RDMyd0NhWWlLWWdhaTlUakJZcDlzTVNpaUFRUFpqdEE1ak80eDR1ZWl3d0tqVUlWelRHRFVmKzB2cHZZTUhLaFlPajFQL1BJd2d6RTIxQ0pLaDQvUjQ3SjRJMEwvdjZMaG1ha3hvcmRYcEk2WDZXekR1NlpKVWhyVVJuTGxrMVNzaXQrME5CcFBtWkJNRi9aSHZtL25lZ2xENCtwYTNnWGs2d0EzcUR0VXRtZ3lQRkREeEw3TnVqazVQRXJaV09FK3YyRGpaUU1rek9PMU02N0JST3hBYk52OWhmMTJMYzFZR0g0VHU3Uy8reGlMTFBtVGNPUE9NdUlMS0VEcktTQVZ6aE5zNFpaMktqeVoxRlFkUzhiNTdWU3FheWk4SnNhUDdzTzFINWtWMWxaVk9Ia3lGMVRxRzZwdHQ5MHdxaHlYeWF6SjJ1djhuS1FRL1lLWmJoc0NQaUJiN0k5R1ZrZlpNa0dTejFBWGRaMVZoQ1JuUlg2QlE4NnRReDFoTU5mWjVGUi9uaEpaK3FodVVOWXJtNy85Nm44Yk5UUzZ3SnlSNlRoN2svZEdWRnYwS01xMUptVmp5MmZhVTZzWjZNMnRIekg1S0tGOXdoMnNRSkorVlNwT0dma0NpdHdKZS9VUGF5enBiZkFwZmxWb1E5ak5MdjRqMGFGdVBJUmlGd010ZVdna3R6WDdrWktLSU1Ea2M1ZzFwbzlWSWZMa0U1ZWxwKzZIR3dDOWJqUDhoOW93dmwxei9iVkVFVkppM1Y0SEZQa25wRWVRVEcxaENzQzl1QXZDYXlLOVVXajhWZVE0V0ZvazlpME15SVpWN0V0VS9scENhbC9zNGMrWStycXFuVjAxVWQ3b3FjNFZjdldvTDU0QnNTdy8zaGNkZ1hvcDJxVzNSRTRKYnhLNGlOWU5FdzZLZHUxUlphdml2VEowMSsxVXgrRUU2MG13bzJpRnd3RFZWbVNnQzRuSW1KMC9McVFUemtYbU81MklISE41NDRoajlrNG5rTHhnWEkzT3NQa3p5elkyWUtOOXNtMk5tR1dHS3JNSVRuUStHVjBSNFJMSlBtRVBrRkE2a3ltTDY1QTdSL2dBaHlRdWhxRnBpVVJkcnhYSTBrbXRKNE50MXdZV1YvaTgyVmRIRGJUZWRwaFRBM2FOelZ6VkNZTjV6Nk80WGdxRHIrVE1IcmdBZllWbGlkK3BCKzZRU0xzTERuaXBMZlRXMVkwbUI1aG1Mc0pTQnFCWlNaTDFCZnpjMm0zL1JsdkIwbGlnNmdwTVdENFlIV0cwTDFNMnBFYXVxN00rSXpaMC83dmkvSzBjQmNuR3lFZlF2Q3RFZnBPWlF6MG9lNVBMWFZrekdHTTJaVS9Lc3pnMHJlcXQwWkdTYlpaM0g5R2xpdDVpbnJHaTNhdGJJa2loUFNEYllMMFRiZ1RScjVRSkNyVmlvT1lpbjJNUGNncXpiQUtmeW9VQ3JEOEZDUkhUYjEvUkx2WHFaRXpRVXpucFE0S244NGMyaXdmQjJ6ZHNTNTNBS1RZZGZLcXh0RmxhQlBRK2RaRDNzajJpaUIzOFh1Qm9aWWNDMXM5bEFlZ3ZPZlNUaC8ybmZpMzN6WTBqVkVDOFNrNTVoUFo2VGpxZnJtQlRwZjU2TmdCZnFRcDVpbERyUHJlY1B5VThNVnJCeVpGdmRuU0N5ZUROVCtIWnZ1MzJlSStqNThDd2hRNjN1aVhyOGJkY3pmcGRkOTNDMjNYaWJzU2VOQmwrdkg0QjlqWHFKL25SdlRGc1JEWGFjSVRyZ1J2S2dmaU81NlZkaVRPaHJzOGlGSW0zQkpXUCtRQ1FJYnZ0ajIwV3FjMFl5bHUxTkVNUzVpUmE1Wnk3a3ZoQVhKVVRCQktBN3dCb3Y3RlhsL1JtOHBmRmxaNXNXUUJ2U2xFaitLWmtLVVhESDRDdWVKelhVcnhlTGFiNVVFMW5WYjVNRlR2Q3dmVmdQYUVzWUpGYU1kVkQvYUFML1kvNUxmWThFNGJJRWdNYnl5MFpMSERGMHRkOHRNanFZMjNic2l0ZWhkTEJ6d0pyUzZOOXNTZDkyQUo5d29hQ0JXaXg4YjU3bFQvUVR1K05wc0k2YVMxd1BIOHRqMlhDcHFlVGdLbkhvR2srNGprUCsvR0FEZWM4bmM2WDdJK3NnQWhFM2M4bitGUkVqZUtBWmd0MldHcm1XTTl6VEZYbDNicXdaMFQwUUVKT1RLZllUWFFMc3l3NVRFZjZrRVdZVUpSaVRBWml5WkdLVVVPb1VVZjhxQm5sMFBsc1BldHhLSHVmUmgwRnVhd084NGQzQ00xN3RpWUl3MDVOM2N6NEtMNW9peExwd044aDRob3JTUHdidFBNcGRLTjBFNlg1SUVtSU5udEVRZWtHMXYwM29lWkcxV3RVcmVoaHBGdFloNlk3VFoxMDZlS1M5RFh0TlIxb2Y3dnY5eENRMHNrSitsRVdvU0ltODBFVUJMT0JoVTB3ekJqd1dRNmtZT3RsMEI0ZGVYeGFmZEF2cFRVdGRlZ2IyaUhDdzNRVzFJSnVtanJEL1pNUFY3VU4wWTBnQzJtdmRUOXhkY1FrUzEzTm83WVp1REpENi9FUi9zTGlPRCsya1lIc1g0dDFEdmlJU0VML3B4ZnlPbmV1K1E0MmYvT3V1YzlLS3lHa2o5MlZZU3BjRjhQNHZXNHF0bHJsZjFjUWxnYUwzM3NsQWVXaEc5bG5xMWJaRi9CcklOeERWM29KL0t4NUVOUkxqNFJJWjNMc0RnZGFRb2VBWDZTMTh1bS93Yy9UYU81QlcwME85Rk9sUjhWUE1ZL0ZKNXVCVDBvNTVNVW9WQU5ndTJRanJoSWV3L21KUmd2REVpb29nUVBzaXNja09JQkMwRzljZitVbjFPai9YbFRITCt0dmhiZHByQkxQd3V0VGR1MWNsMmdnL2UvaFI4UmN4WkdXWTdYTlJNSWdveng3RmthWldRL3RUemRIajVCbWFhdjhOb0JwZ011UVZXOXhkb3h5VlRuV2JpM3pIc21ZOGpSMVhMUHA4aW5QbGlZck9jQ1FDemw1NThldDhyMXpTc3ZaSzNKa2p1YjY1cXdrMUNIbGF3Z01YdzRMdTFxODFrUzBuMDNackNhRFhzN0VpVzZSNG0vYkhMaHVyQkZSY1pnVDRGNlZneEdWcWRZYUVSeTFJMTg1UGtEaitZN2dBaFU3SUpvSjNYMWp5Ti9ybnF1d1R5QjNSRFF2dk5ENzJDNWhHRHdnOW5uUUxqZ25BNEMydXFYSTB0K0g5MjZYa3FZdEcwcC9iTGZHN0dxUVV2U29QQWZNcFpabVhhTUZyZldzNGRYTEh4Q3FtcU1DNU5xcUpuc0JtNmZ0Y3dnTkhLUG1RU2dBTGRiMnEyS1J5M2V4am90RUk4Q1pYaTRaVi9wYlpERGdBb2lVbmFsNHlmVE1QSHErcE1WNjNmT2JsQnlNdjczRSt5ZkwyMkw4bmdibHlQVzZ1WW01bVBRSmZqaTh2TXZzNnBNY1pFQWp3eUZ4NlA3RmEwVnNYWkUrdk1yaWhqV3JoeWJxZUl5VHJ2dURIdnl5MUhGTWtkdHlRbXVPcUhJWDRxN0hMOElFWkxtaU9yMW1XK0tSNWlYZFJGWFdIeXNiVTFyRWtjSFNCRU8yOVo1Ni9lRnhRRFdiRVQrOGN2YURwSWRDS0h3bys4dGNPcnNpRzhOdzcyWGxsWktnZGJEZUxFMDNraHNzdG0vaWZHSzJOcFJjTnRrYUx2R1RmUHozRTRSQ203OSs4UEs2RklpSERuTDQwL2dGRXBMQ3R4ekIwbDV6ZW1hQUJ4b1VLUStxd1N3cEJSa0pRSy9sUllvME1IbmdoeFR0eGl1dG9uMTdCNENEOGhBUkhSTk5vbEtlaEZKVjcvMUt1anFnQmFBTEJtN24zaWdOSW90ZEFodjN2NitTTVM0ZWN3L1A5aHBsNUozQzFSTkZnY1F5c0gwcXBQUWYrMmxzMm1BVENoYWZrNVVrTGxnOEdZN0c0NUtXV0d6QjZ2OFdvRWFoODBQUGhaakphamhYQ0ZQbVRPaVpMMzJZYUNVeVdYdmlZVTVmdFAvQUlEWjNiRENSNUZna2hCUU1tVk1vQXprc3Voc2o4ajdGL0MrZmprWUlFVWlTa1ZHODdRaTBwTWM1S2RyUzVCczJpbTMrdFE5anBaSGNTc3VqMGRHbkM2VUtla0c3SlVQRjVKQkN2MkwzTTdaMERqMlZHdmoreklXcHY2VXBhOFRXbnY2TlpLbG9HL3dla1pGd2dKQzdjVWczNld5N3B1R3NvaWRhNmpGTmZkM1dvS0pjM3VsY1VIMVA4RmNJU3RjYjJjcUdaWTZENkxhbzlreTNTWXJUdWNQaTN1ejFoRTJKaTdJRGtKRFdsZzY4ckNrWnNiYlUweFlSbzFKdFFFN1k3b3d4NHlzcXc1WXg1eFRpNVhzUW9lRFJ0QXU2UUR4MnBqYnJBN2k1TEhwTTBOQ1dyak41V2NxMldtSnF3VFdtSk9LanpHTkRMcEJGY2F5eEhwbUVoMStLdkdFR0hCQXFnRlRIV3p4ZE5OOW91SjJNZHdGRFNjbzFzZnpVREpIZkhpMGpCRk92YUJOQjJKR0dqcVJ0WGtIU3RrUkRQQzhxRjRlbHdjSFUyRjE2ckI5ZFJjY3ErdUxyczNhK0VHazcrYzk0MGw3NzNCZDliZG03WUMzVnRxc1VDWXpHcjhmUnJQbEQzVTc2eUYxM2hkVksvbzZWNlpUdklRNGVUSlZHMExJc05tMmcwWXlOMWRGb0s4S0IrSlgxUFFxdkhBWjlrOGFNUUJvSUV5QldYdHNGNitOdXdYUHVGdHhkZndUaHVJZTBDcGZScDFNY0xrNjZiNW1CYkdUaUxNNDFtM0VwWXhpRDNyellzZHpibmRBVTRjUkI4TEg1dzF6QkZ6M2k3R0o2OEJaams0bS9kMVh5dDlMNzVNRU91a3h4dW9HWFZUWHkxaHR4dUtDU2hBRzZLOWpWSnR4d0dwL1pERzVTc0JCZXdCTC96ZnZkSFYzZ2d1STIvV29HOXBrSjhVckxyYjFDc0NrTGlXYm56a2JsVUc3YkQrbXVXaXlnMXZvWSsrdTB2NU1VMFZPNW1YNk00OEpwWGRNd3djMjY3YWdKY0RLV2ZabENCUWpkajRZWE9qRitlRTk3ZFNxTW1wNURZSk5rNDRXRGd3Z0pvK0R1SW9GZGlvaW5XdUZOamdrdGtFU0FDeFVxd2VqaCsyUkt3Qk9GaGZWRjgyN0c2Q1B5UmNPcmhyQnRJVXp2em1sOGdBUzArMjlHMS9TWDc2MDVYcHdjYnRGcXBaZ0VsWlNVb3Q1M09PNnFXMzJaRVRuQ0FCdmt4RStWUmxrZkliZzRwWTV5eU9tQ1ZFenM2ODVDT0dhVGlhMFNUTTZLbFp0RktIb2p3WjFGcEprblBZMDJlV2djTUU4NmVzUUR6ck1HNFdQcVRBa2lLOFdSRmtjSnQ3c0lmZnNWN3djNHluRW96eUsxTlNibGoyams1Zm5DdG55RXhIeFN2NGZaRWkzRm44ZndEN09vbFhjeUQ2ZjliZHpDWE5QblBXREtqOEpxZFdnZnpYTExTZ1MwOUgyb0djM0N3cEJkQ3pCUVQ4Nk1Fc01QQWpaUzlhVzdZSmtPb0JmZ09nSHJCZEs2VTRFS2lnU0F0L1V6RGFJNkRmaXk3YVVKcVluNXNHbzhwMG1OdHNtMkxORlpCSWEvUDErYU9lSG5FZkJBdlZTV2VpWk5sVEE0SlRVQTNZUGcwQlZxenFWTytYb1VTaUw1K1h6ZXV6cHdmK3orZ0FPK3VwdXNIQ29MaTJWRmx3dU42NjNka2k0eFdQa0I2UG9SYSs5UlBjTnMxN0ZlTU9hcXhhYld1QVMva3hOeDMySE15Y3dhdDZOVEZQNmladTBwWXRqbnYyQm5ONnJwYXRiVDh1cWx1NmVXSDJkUno4bWNEd25FbWVteTg4TyszK1luSEZEME5lMHhVWDhkNEFhTTlPOGc0Y2E2eWpvWUpHc2YrUFpGeUNsSVNCQ05pTGcvdWs0SWF4WG5Wd2Y4alRZYlErUFVqd1JGOG5CdEd4bW5nNzdjRkhTa2F4VWk4SVEvMmFMUitHU05GMTdxdzlPeU9JUzRyY3UxTDAweXhrSTh0emlaQk0xbGMwQUw4bkpOUGJVK2FkbnNEeHBsOGZic0o5eG9TS25TSnplUUVXcTdIWTFjNTNPMkc0c2RFMFlTWm9tb0Qwam1oYVJCL1hzVEZLd3dxc2JCbG5NdTJ1MnNlVC9xbExld1d6azhWZzF0SjdnQjROOGMxaEdpaWFGUVZkQzQ4R08xWDByd29yZW9IcmVwSFRYV3EwbzdzMVlka0JueGJwRTJWZktveCtaOHhrWkFMNHR1QWFiOE1penZiVU1IWHRVNXV2dkI0cnRZcU1zRkxkNXBSQjJleHIzaTJqc3ZxSGp0M3czZDFiSVZOdExBZ3BGNlo1bkQrcml6ZzlacVF4M05uZ3FZbGdYVERXRUVMOENqRXRhVFBnVjRoR3V5UG5ya2lERUkzNWxCTUUrbHV2d2w0eGxSZzJxeldQRlZPc3c3aUJJdTJXcUYzNCsxeXZVZHJNS3FWRTdoQk91MGN2RVU5UzVaRjVUaGdrYlRJRDdHenFiRHhvVXM1eHBRei9ONklKSElVS1BobGpKUlI5RHgyaEhXemtwL0pEelZLb0Z5bEt3YTBqRWtxaE5UaVJWeTFFaTRSTGQvL0pjVytxYUNKb253Z2lmRnFGZEZQcW9lTnJXNTFiS1h2d0xMc2hpNGNhRXQvM0xBMWViSThCWisrQWxxSGJYZlI3SUJCWXdlaXdYRk02UjMraEt2M3A0blovMGIzOG52cTQ3M3FMUlo1UXdpYS9HbUZYeThxZVRqT1Nidlcvb245REE1N25ZK25kRERsbUFnQzQzTjcwYmtTNzA3S0JGc21rMlpjUlNZdkRUVUdyZkN5SFdYSUxDSEw3M3RuTnVNNjRiTmQ4d2wxSlg2Y0tQODdycTFOM1FHcG9CeVdtRHFvbEswMSsxYTNsVGh1Y2ZFVm5HeUw5NCtnOUsrc2NFTGE2TS9LQVBYL0pWcWtRYkpOelhISjFqTDk1eUJoRm51bEdXamVLYjBKejRKakNRenNES0lmY2x6Z1YzSHlsRVc2NVRyeldFNTdPRjlsYmFhbGthZzgwa0FLaHRMbWJFaTlITWN3NWVuSSthQlArTDBLR2h4dUd6OFZMakhVVktjTU5QOHRlaURFVmFFU2pLZXUxdU9pVDE2bEdVeE9XL2xVRDRGWm5DYld3V2RlcG1GbW1xTVJQZXFQL1d6a2FLdWhOUVFYaFhyNlBUazJrYzZEWGlhNGZxTmY3dGpPWjR5L0hiZG9jNGE2aldPTEdVaXlxb3lxNlNPR05NRmZvaFBaaWlrdjhoc3VNd29SRVUxZjJlMFBOVnV4d2Q5Wko2WisrRFVRNmZhWmh6bWFwTm1IdTQrNGpZQVJIZTY3N2NuSkZ5bnozZG5IRXBwekRNNFdaZExDb0F3NVMwN3hMUk5aRjNrOHVmT2lCTnB1M1FBYmRicDV2T1huZTd4REhybkhhQU5vNDdBMFFHT1pNc2t6cHB0bE5ObTIzYVYra0UxYisrR0VITGp5QnNqZzV5QzRrS21zVGZUZlZSNUluMGlaWjZYZHNBcVZhenhCSG9zUkZhVUdXeXlGUXJSRnFTNExuaEQwTk9vZkw5b2xiVTV6blRKK2R6VU1makZzbGhnQVpIZnNLVFhlUUVPR2RkRzRmZUdtbmYxMVltRVZsbFJnY3g2NmxNOHhmblJiUU9Eb3pJSkRHU1A0SW5lS3MvVDBMSkYvOEp1b2RjUDQ5K1hLMXMxd2lMQlNMbWl2am9aZnUzMCtzNFdRcE5iSzFCZmFMRVdqNXFqY3JxMnB0V0dBMWFGK1BjTUpzK3NJY1ZJVzRaMFpHaVBVdnJKRkRxUmVWaFZQYWFQUGh2V1lUdU1OeHRWenJTWmQvZExJZnczMC9mcjJ5Mkd3dEdtVXlEUnRscHdva01UNmN4RnF3SnFuOGZNZnI4c2lMdkhFdFJsTWRNbWt4cThPVGd2WGRNT0tETnlOVnNxMUdPYUpHV1JqRGJ0Vm9UcXoySFVwUGpvNWhHOGQ4VGNkVUNLajU3NW5MaG1lU2lnQnNBcHNyTEl6ZTJEVXRCOXpPVEdrRWp3THVWQ0o2OVpoaVg5MDczQmdXcllISU5jN0J2UndXK0R4RTRNbVF2b0JXMENFN3JJdGNCeFVtYlRJZGhaUjJVMW55UDhTMC9qWVNYQ2ZUbXZZcmdRMFlROXNla0ozOXpVTDNvQ0hSbklDdzQ1d3NjckIwN2szdHpFeUpBTDR6WHBQdFZpNUlWNXNPRmpJTkQ3MzZGcTBvV2lFcUNRL2RMYkJubEZ0cW8ybGd5NkhUdWUyVjlEYjZhNytQUXFLNWdhWnB5cm1pbmlvdEpWa3N1cUhaNzJWSXlpME9MRDBYbkdjT3NzMUQ5ZEJQNGhQRVdNZE1sU3lyall1TkZKSEFDU2JDM0QxcmdPbWJBK2k4cFpNRmRQYThxT2lwckpPenZNZVpORXF3R3A3TTVJaGxaT1hGVi85Ry85RE9lVzlacktVK3pBd1dHakhwS290TlN6Y3YxcmtibVRsNnJkT3p6WFUyejBzZnR4dERpN2ZxcmlyVUhuMXA3ZWxPakhhSGk3bXlmb3cyWmlpSWlYY0tab2h2WUF4NEFxYUJaSHhrZUtwK3RZMWtRUG41MC90Z01PNVR2VmE1MlpJR0xzUkRoTlR4dUFPQU9vb1k0a0NsdzBjRGNWMTVUYTlpMmhGam9NT3FTRE1sd0w4VnpiTlJzd1RpempSWU9xaXljZ2dIZjQrKzRvNHZnUGJxT3hkZWZ2N0ZZbXdZWFNDMEwrV2RDeGxVdGJFMXpEZGVnN1VXZnM3cE9KQ2RRak5FQmorZVdhZHdpcjhYYldyTGJsUmZQbkt3cmhpUDdzNjZmaktsK05CdlMvZ3lFQmJhMlVMYndTdGZUazk5emZ5ajR4MmV0RWJ5MkFKaWlDcHFGSWtoK2lMUUkrdllsNWxiVjUyTVZwbTRyS1NhenlFM1d4VVdyOTFMbXBwa3paQXpqT2drdHQxdEVJYUZ1UHJsVHhVN0FTM3RzRnlOakdZU3ZRRjR0K2ZNdkc1NjZWaUVqZ3Y2enVZU2o5Y3RUNkhFaDRLSU95djgyYlpkUDBYN1NNa3EyZFV1WGNTYURZZ2ZaTmRWeHZ1dHFzL0w2UFlrZWUzUVZXajdTRXBlanQ3OHc4V3pEcWFyQ1VCMHJzZ0NONDFCUzcrdUZwNGR6NzVLalFwWStBK2Jzd2NlbGQvRDRxZmhxUU9OOVUxRERMcUtuSVRpNExBK1VvMEhmWGRHNnBtdkZiZmtpckZIZlFXN291eDRpMHRydzVRQ3krMG9icEJDaS9sU0dTQkllQkZwN0VQRktNVXlDeUQybkVvMEMyUnpGeWQ5SEc4WWVQaFpTUlRIZW0zMmgrd21GWEJreUdGclVJVWtIRGt5dFdKODBxQWd2dll2ZitJWkZpM0dZb0dCNDNuS0NLU0E0ZGJlV3pVZmZGSzVjekxFVlRsWEF1T3BLdHZYQ0pOSU1UV0hwbXR6eVJXME80SVBxS3hDL3hJRkZ6aWNaZ0VtVHNlQzlDUkxnYjQxczMvWitDNm9xN1I1NXhzSE5kTWN0M05OVkVuY0V6V1BmSTdoV0ZwYjRGMjgxcDd6ekhIM1FIcytTSmJadEJBRjZxVjJTeGVESE9SVTJIZjlTL1lEMnpYODArSlhiOU4zQmNyQkhOY0pETFh4UjZ5REkxN1FJbjV1emhyNE9oK1JIOHVTRUtWTHZNWksvb3U3K1poeGlKUjJiUzljR3Y3L2tJZ0ZtVEpNVHpHWUl0RjhjbnBBZkp6Wno0Tk1WMytqLzZJSlF6blZoRy9PNHRBZDBjaElieVZhVzhlQjEvK2Y2YkE5VE51N0lyZnBRWm54UzZRNVdIRGJ4emNjaU9MeDliVGFYTDFtVVJOK25LVWh5OGlydmoxOTZJQy9VcHlkRjZZU3laZWV2ZmI0aHZyeGlYb3RvTTQrNVY0bnY5SEtjN3VVNVk4cnBwV3lQdE9UU2FlRkxjTzQ0TzAwb3NYQkJrVW5SRytQUzBSK3d4UTdMTnhvUk9PVUhhRE9hZDNyK3dQY2cxM215T1VOYk9CUGRJclh4Szl5dHNGeDNpWTFGeURSMnJKenR6M1NhaGZIRmZ4dmJHMDdyTGlEcHN6RTBQUndtdERrc0lJYzVHYU5DcUhkdjU5OGEyWDZXNStMa0VQVnA3QjhMV245aFphU2ZIL1NJZEthdUkxKzY1V2R4L1dKeStyVFBSeEJaQjZDNC9FdlBSSUFQTFhlNGNSb0dsU3FhSi9pSlY1NEpucmVmaGhwUnY2Z0xkd29MVEJ2ZDBsUnc2TnYzUEZoMjFDdWtKZjBIcnZnODBGak5icE9TbmJuWVoyT2NrenVpVlZydEkxb3Q3UWlBdEl4aSsrUjNpY3pQYWxHNTlqTG5zeFFZR29DV3pZYTJuZUZFdkVBWUdQYmJaU2J2UHN3dVNBdWpidEZkalU5QnN0MDAxR0QwZE5iejN1b1ZPRkVDaVNvOGw5RGEzdDJCOWR4WDhKOHBaSXpKRDZ4WVJJaGxVcnlkVzYyYXVEMEtHZ1pCQldRV2ExRFVPbExmQ2grNmhzZkhqNnFyKzk1MGQraEEyYldYQ0toaWdQeDhZL1pER2hBTUY4NzBPQ2l6eUJXR29LU0dHaDRFUFJQRnFSU3FZZHVCOTdsWnBTQ2F6RENEOXBRRkRnaVhqR2E2RzBTYW1LU3F3RGtzZHgxUWJFMWp1T21scG5INThFNWFLOVFhaDZGdVdRWS9jNHpsSklMemZFc0ZJTzN1U2hNVUJPTWhVM01QdDhoMS9MQVBsRlpkaWN1dlFMdzdJekdORG9rc0dMREFPVXMwbWlMcTZWSGZGT2JGWkRGY3NxK0ZjaUNFRmY2ancveDFsSlV6UGUvVDBheUtXTmZxL0IxNWxYVG5mZzFRcXNOSkxtOHhQcThKdWE0akZIMnp6SGJCaEI0dGNEMUtKMjZnU0d1MEVVMDRndFRtVERWL0dCOWRIR0hzRVZUQlpoUE5MZnI1dGQvME44cmUyUmtQMDF4TGc1N2h2T1hBZXBrclpWRDJIUlcxdW94ZlAxSG5NN09ISUlKN1o1VWc1Rmw2aEs5WHpSTVd0VnBscmc3b0gwMGQ5cHQyQjZQSkhGN0tVeVZ6bFovYTRqNzlKZ3dhVkJRVmhkd1lOdDk0bFovZFQxSm02ajFncVhjK0p5NHA0aDZhWndFOFcva1lxbnBEMDAwcFZBMzFHeVJ6VDJMTjYzQS95TWQrWDd3OFBjUXJNYzhkTjFXenBPNWhMUGpENXJBbTJhSHlQUjZEWlM1Z1F3b1hmeVd6UnRnSDBoKzMzWmNOenlkLzhidWh0S014L3FZVlVMVUFIOTZIbEZTK0xiSWdnRlVXYk1SQkxLbk0xbGhGSVQ2TUEvSmVlVE5tU0U4ai9DTXQ2QlRpV3U0MEt0b1YrZUg5d2hMcE5Td2ZZWEo1dVF4NXNFWVp5cGVRWFBqR2dYb2NORnU1NVU1R1ZLTnJUcTJVQXVLNTYrMUhKRGEraHptY2tCWWFsY1Z3ckJjY3NQL2JMM2pleXU1MmYxUTNMd1l0dElWSEhJa0VXSzFLcnE2blpxVndFMDVPNFcyS1pJNnQrTSt0dG5CUW1kWksvb3kvektNakV2L3RpNFVEUzlqUXBuakRJb3FjV1MvRHAvMXBlUDFsSnhna2p2RVVTSTVidXpTeEYwRDExMGY5NnB6QzV3WUVkVjJJM3ZOK2I1dTR3UTNjUDRta1dNd2ZCSy8yYzhUZnlNQ0pvM21QemQ0Y0pibm1xUkNwV010R0krQ25jNi9CZ3lnNjdmVHZDRUNmNW5KL01xMXMxbTJxNXIrQjQ2QVI3TmRiWGM3MlpJdEp3cmVyL2JxYnpjbHp3cGVzSUFVMGlLRzFWeVBDMmZxYjZKSDd3SC9GdzdJaVNxU3YydThiaHpyWExoUGpyWDluQW56MUxLbjNEL0Q0Z2ViWTVwMFdWdEE4RDJhNC9mNWdscUZ5RkdUTms3T01BY1l1WHVsYWcrVDJzS1JvQ0F3ekk0RU8xR1BoZnUwNEMyS2xEanN5MTkyVHRQVnhmd0Q3ZlJWcXc4ZkhZWjJNWm9qcjFjL1FhRFhCaDROOHpoMitDL2dTUW9MYWdJTnVTTjVBWkRiVmdxS244dkxxdzNBcFRUTDdsMGM5LzJDYUppV2pmbGNEdmNiZ2VIVTA2VkFqWER3SXV2T0RVTFJUZHNyY1cxWExubjBXdmRpUDVON1Q5QjhVR1BGd3o0MG0xTWk0WjBXMnp3K1RMckp5NHBpTDZObGhGZ2hBZ21ob0pFU056c25DelpTdXljaG1GNlY2ekplOUNGK2FXMzM1S1lHZHFxVGdJMHJlWkoycXhUMXdWRHBoYStnbnlNd3I0TU9XR2FZM0JvdUlZUXFDYkp4RG9CSjJ0cjFVSW9hMnFEZUpaSU9kL3hjRHRhdDh5VEU4MkxQUXJ2Ykg0TGxOQWRWMHgvdWU2SVRMTlJWMzA0TFAwME5UYzFpck81NVFudk9XdnRXVWdnTE9rdWRPMDI3MGMzRjdBTERXR2RUMTFCZUJyTHJsL0lTVTE1TjNnUFVxOWNWaWRTNkhxK3NhZFVxdjl5VWxnejVOZ09KSVZQQ1hnaE5GaVIxa2ZYckl4TnZ5UnJJRU10Q3ZyY3JnVE92TDJsZW1VTGJkVERwc09EckkvSmZzS2ZKcEdhY1hFSStyMTlDaW5mYldxa0h5aXVMVFNsek0zN3dwQWpHUnFNWkR0Z0NETGVBN1JBUUI0eEUzTVN5c1FrU0wzeDVjaFp5YkFhOWRWN2IxZGtwNGZYdktyQW5FQ2JJb3Z0T3dpNEtRV1p0eG5xYVMvVzFYUkJPZUFrY3VkUDRNem9MRjNaK3lkNjdFSk1jSllBN1pMcG91M2NsZWZtQUVTMndtVnQzNDlEM3UrTEI4VnJUUXNqajRzUmVMRkVtVTE4V2tXcjhmOUJNMG5IR1A4eE9UK05mYmkwcGxwZUpCRXZkWkltYmZucjhyMzMrZDA2UHdMQXZncmJHWXVjWTNLejlUYnp3Yk9USTlib2w4RU9HbXc2NFlEd2tWczFucnZ5U0xiZ0FNdHFINUpQWXlteEx6TS9namFHczJ1d1N5NE1aaXFnUE5lczgxWGJWeWVSdlBKU3RqMVNPM21OWDlaNXJhUEFCR2hLWmJ3RlhFcTA2VnJQTnNmRVM0cDczZmhyZ203SDdtOXlXL2h4d0FWeWx6TGJBbTR3Qzg5UUxub1VJVnpoYlp3Qk1Ra1RIalNLZ1JWUEtyblNVUklNeFAyYnkrcHdtY0tXVFF0dWF4cDlOc3NiWmFMMFd5TitIdk1lZHduL1p3bXpVWUt5ZGJiUG5ZeEVTTjJCWXZUald4TWtCUDhnQ3FSVFFTdXdUbkU5WUZpOGJFcFEzRElZenJZR3lCLzBNOHN4UENKYTB6a3hud01wWXhtNjFKazVLcWF2THF4YkNrbjhHQjJlNkhJcngyZVc3V2hoZ2tlcEJ6VGlySlM5S2VLWWY3UTJTckZTZFh6aW5rVEM3VGdQdkxEL1NGUGRseGNrMkxURnFoZkVCNGVxOTJQdncxRW83dzl2NHF2TUZxeDY1TktMSHV3Z2ZUUDBmdlRtMCtHYUl1czlETEwwQmpKd2R6TTB0cUQwMGtsUE5CempHcG9DaTFRd0xka2xVWHRpRG8yM3dPaU9HNUo3eHFxbzk3anRma1kyUjFhaVRkWjd0WWhLYVlQQXlqbnVETmtRRmtFdG1IUWluSmJrNnBDS0ExTTM0SnMyenBHSzJEcnVnWEFkaVdlYXNRRDZnVHpYRGRQWFR3NzJnRjF2Uk50bWl1YUZkWlFkTjBPYy9zQ1NYNFUvRm5pUFBrd3hOenhlYmJodWhXeWkxSmRObC9lNzJNY3h2YTRqcE5qNVZZRkpRSDdPWkV1VXZ2aUR4akdLQzZlMkJpOVh0bHNaalkxSUtxMFNDM0ZwaUJhTjNnSnFPT1IrUlJGYmNROERHL3VVSitheGpyTTczVXRvOWFGRTJyNWc1Nkt4MStDNDRuTVY2cWU3ZzRNTWJwckp4TDR1Q24xdExGa2czUGpaQnBCNnlBV3FqWDByelBoMWQxSk9PQ0tYb3c0SVU0aUlRL00zM211WEhvejhFVndld01GeUhOVEF0NTRhd2xVejZ4R0MwNjBHUlhiSDEzT2puQ3VvbnVOYXRDVzduSlhxbUFlalczaWs4TTNjOUpiK3dlb1QwSklSMUxrQ3MzYlJ4eXBGSVZXNTJVajQ3clBBalpDaFVJaitMWUhaaDRSWkRaZFJDTmNLN25iVlp4NzgvbUM5QWI1OXhXaExxOVZicWV0VHFFdnEwclBXTVJneTR2QXJlN1I4Y2s2QkRSK0owTlQydnkySDNMYmZNWVd4Y212MlRYUTRDQ3I0YWdxRU9FMVBGaW8vQ1pqSjJpWkF0YTBvVE81UFJ5RTk1SnJ0UENZdUg5QlBEaWJXeG03WDEvOG5wTHhWZC9WM2JCamw3VEN2R2VIWDFtaWhKNndGOXl5bSttcU92MGlMcVM2OTM1WFpMYzJ3Ui9VWWExM1dSZHBoVm93OUh1M2g3Y1hubFVtNXB2bVY0NHRMNnN3OHR6endWNm4yZlEvTEY5bnovUDhKSnZYeEdCdzlqWk1HeGF3M2IxZUtHb1JkZTZIOEhPUmxlaFZVaEsrNHY4VnBZbXJYMXlvZ2lONGJocDgrZ2VkeVlXY1dZMGVzS2JQc2JpeDdUM2FyYy92SzhFZEZPK1FPZGRHMGxra2lQMzFFVk5Oek9oMnBPQUttNkV5QmhzLzVnc0k3c0hkVFIxY0l0SkdjN2pkUXVWR0g2aCtPRGJFdFZsWWphSUFhSDNLc0FnODE3cTlSVU5zdzhMSmxaMzY2VTFGRFBYcm8vWGJrbHZnYTF1RFZqb2RjVnBhUTlsYnlPem1MeDlLcmlaQnh4dTk3U2ptMmFiUGdHdjlJSm1PalUyOWdxTEpmbTVtaENpV3FmU2NPSldyVVE3WnUycmxndTJkc3l3Tk9TSVR3SHRYTVh0a1BYS1pJNEpBcU5veVJCUVdqVjBPWVFtVFNwemg0Sys2d0NFMjBZSFlRZUlrYWdVWE5oV2g3bG1wcUFDWmc4VUlneTYxa2UwYzROUk5JTGR1c1MwS1hrYnVvR21LUWs2bUZRUDkvUy84K1YxQmlmOXZwVVd4aktMODYyenNmR08vL2VKbERpTitEVkNxMmtaemRiUHZOTmxYRndxdmVxdnRtM21RQUxxSXpXMnR2bHNZSWEwVW5oUlpiemp4aXNMUm9sOHhzVnBUWUZsc25GbFhmQ2VsdUtMQ2tVb2lOSFM0MDdsTlliN1Z1L0tBbVRyWXZyNnNQSVhRQ0hpK0NZUVRjeU1aUXpHdW53QllEVGNNc1FheEVFSC9WM1R5cTZsUmovakhEQU5KMk5yWnp6QitzWVo3RzFNcnRJUmp0MXNRZmY3c0hxL1hrMEp1SGNUbW4yLzVVMTdCRktrdGV0ZjJ5Y1EwbHNOME0vWEJxQVB4and5OXBId2VMblJCN1hKYWJOY2lSeGRvREFiSVhSdG5Yd0VYSkpjZk1uSVNJaGt2cGZXWW45bzVpTEhWVXQ0czlqcEJJNXYwMng0VmJ2RTQxcHFPY3RaMUZhbGptc2VSLzI2cmxBbmpwNTNxNXlCaDFrQVlBYXNFL3ZsMzNjbHIycnNDSzZ6Y1F5ZmgvTE0vVmZoaVQ5UzViemV4Q2ZodUNBNDU1Mk1OZmZpVXdXOWpvOTdhcEZjU1QrdllGbGswRW9Gc0liSmp2RUpid21YU3NRWG95RXJoZzBWNTh2Y2pFUTRWL1JiMkhRR1AwNjluMlV3ZHc4TGpnSE5iUjlDbGdaY0VUdDNEK2RHN3RIRHRLLzFsaU5xeW8zdjlIU1ZxMkRnU0JTU0xwcGQrQnduQS9WczE4RWxmNUZleDVrYVNDMGF5anI1RDJiYjlzWTdUZm56bjlWSGY2WHkvU2REcnVCUjN2aENYZUU0NU1FeThDY1lGZ1NhRnhqNXE4UGZDSzlYcGFUUmNuQnd6M3pQNENGUnZTTys0ZEoyR054SDFaenh1SGNPNEhYL2ZpQnhtMHVldFh1d2sxRDlPamhnYjIwK05KaVpwbFRYeXJ6NTg4UTh2akJvaTFiOFFSZCtobUliZTkyeUJhaHhtbC96bklmSDA1VzVFZ1ZKWERPYjZUUTdROUliMnpmUWlNZmZVQmRMelBtL0dKYVVzQmsyUVFoQU41RGpKUThmWFV3R3BoUGhiUkdLVzIwYlJHL2krdGE1YWN5ZnBJZUJWRXdPMDcrRVZDc29pMGRuMVp1Rng5Z0lqMTlneWdUTEpsOUM2cGVHMlJuc1pzKzY1OHJ6Vm1nQ2dTRmNTZjBlTlgyblAyR1FOV3kzb0owbW1YZTBzS1NJYXZobnNrUmtwd3VzRkJDV2hZbGREd05RSWE3dlV3NWg1THVvZVU2dVQvT1VVMzFRQXZFYXI0bGIvaFdXVnYxcnlOK1pmSWVsR2lXV1dxZWE0dmVTV1lXUDhXL0U0YzJFS0I1Y0E4aHQ1WHFIM2NrQ2hEdnFOcEQ2S1Y3bC8zZm10STlEL0dCbDF4SVczMUNFSzZGdmhPSDg5UTYvRFNndVJ6cHczN2RXM1JqODZpYTdKakF6S1cweVA4SUQ0VGFXR3J4REhTWWd2eVZCMkhsT2ljb1NCNUFqYkh0amk3b3M5cU9MWUpTRFB3dG45cXdKTllaNzVDMnNSSHZzNUY4RGp4YnJZNHdra0JsWGNsMm5BS2gxOGJaQ1RyWDRMQ2xWUXRQK3JkSVlhQnMrd0tsSXFITHNGVll3TUV2TDJ5M1lYU0g0dndUcm1QQzRCMWNFR1NTSnlnV2RxeEZQbUo3enY3TTUvS0R5S3dlZ1ljOTJxYUl6RWlMekx2dXV1RTZCOFBqN3dDWlo0UUhyUUVDcHNIQTVQa29Va3p1ek9SODQxdjNkR0pVRXowQllxYVN1VFJQSk1WTXh3Wmc3enZpNG5SWlIvU05RMWRncFN3RjQ1QkdxU2pWekQ5dzVKT0pxSkZGTzg2dGVxMnFBUmMycUJIbXEydit6M1AxeVVQSG9rNTdNL0IraFNtMXkwby9OS0ZQa05iYlBrRVkyT05Odjd0SjI0KzhZZktZQjJ1S1JBU2o2ejBCQ3JOWWwrOFhPeS9tZzBKUWNGWGhUZm9NeU13QVA1RUtSNU81QVBxejVCVXRNbmRjTG1hN2sraExHRHM5Wm1jZWtFVGFqdkRMa3E5K2FkTHIzZ3JxeEY4MWNzcDlpMkQ5R2JlNW94QXdqREc5dXpsUmwyNkl3dXpYM28yclRKTUQ2MCtBK2JsTWtUckxpcGRMeVp3NzM5SjBtcjV6R2NzUVNsM0lwNFdueFlwdVdtSHNDaWVKekJPQjNob211MjZjQzdtK1lqQmxKblA3SVoyUmM2bTZSbFZTMzdYNTJBWi8wUmdZd1RHWlRBaEFzLy9SQ0xGb3VQQ2F1dUw3WXpocUZ6Y2JpQVA5VVNPYW4vZERpQmZNcEZ5RmxQSnh3aXJCWVppbnhLOERTMGp5cFNvRnZ2dVFOTWo2czR5eUxjSElZcEd1Z0Z2ZGlJcm9GZGExM09KZ0Z0WGVobFp6QjduS2pmbmF6RThJdFIvemNDNU9sMWpraVR2Z1Z1YzJPK0o3dlFkekFCYTIwdVh4M1piYU5LWXpLREVjejNhWWpTODNuVkhYUzhXb2lHam0rSEszNDAvZnVuVzNaKzFTNE9rV0lLbm1EczVZQ2ZpYWl5SDFqVm1POUVOejB5SXdPRldkdVd6V0RDazhjNENkVTdyS2o5WDJuYitqQWdKRHJaanlHbmY0MFdBSVNEdG1DbE5GeU9ZN09mOGc1TFozNDdhU3FFZDgzREcwZ1g4QmM3WnFDYUF3RlVvWGpFSm5ndEhoNk04UmI3MUlvaWwyU0dqcWxGMnV5dXVrbEprajBqS0FBdHJVcHE4cUJveG9WUVJ2USsyZ3pFWjlESUNPZXVGZkhrWXNkK1k2K3F4d2RVNXNXcVlta2V4LzN5VVhoc2trbEpYM0xjY0RFakZoZXRIV0tyL1pXc2Njam1ZK3c1NlBPZEdGdUhzYkdTZWN5TC9QL3ZMMFVMMWpRVFgvaCtXM3k2cnJqejRHNDlFblZ0SWdEUkJza1dXd2NOaTgzY05CVzVYaFhtR2ltTVh5WStkb010NlFmcFZCQjNNVnN0aE9CZlE0NmliV0p3WDV1WjJCcEJEZXlJZzBPWWVQeU8rY01Ka1dLdWlHWWlLMW41WFQwblQ4SW0ydGhjeUV1VjZjN2NYVXNteEpSWFg3YXppSGV5aDBGOW9KRmJOUExVZTV5bkw3bHRqV0RLMzJqSDZ5bmtGKzBPbmdsMnVQWURSbDZ5Z3BWTkFkNitKMTl0MEovTE1pNG1PMTloZHc2cTkwazBxU3BaKy9TeGxNMFE5VzY1MTJtRlhZRUZnWUNxYlRzSy8wYlBxa0hCQlBtVSs4ckRjWllaVlZiY2dHWjFyZGZId2FxYXd3V0VmeU81SUw0WVNtNXZLVmtpUXI3WnJUZmRaNTFYTndFSDlxdDZ0cEZhYzFOYjZUcHlJV1M4dXJuSDNNMzNFNHdoeWxzM0g5dVhhbkJVczJLaGhZYjFjeHdnZnIvWG8yR2swdWgwSGQyNkx1cWlYVHREcTM1LzVBRlI5OE1EVGFrUFVpVXhBZjZVaU5IVU16Si80WVpZOE1PS0tKMnY3Witqa3FDaFBqM2ZCSzdMUjRLYWNVdGFCZkhJSjdSYit5NmUrQzVKVHdvZkI1eVhlbkNSU01pTzZ2ek1DNVFIa3NXZWxYa09PTmQyeFFmVExXVHNxRkpGWFpLeDE2QXFocktWcml5Yyt2U2lyK0dhN1R3NXVMaGlVZDZqT3ZNeXBhK01CSWM5M0tvRkQyK2RpVlF3ZmFmVFRZMXcvUk82dTBiWitrTHpPSnFTTktUODhPcHd5VmpnWlcwVGVRYUNqM042Q2NueTBqUk1EcVhRWGxXU0l3SkNRS0NjUWFpMnlNM3ZoNTdObk1KSDQzMjJ3RlV5eWIzVCtKaTlZNWJxUWh4cGRUK1YxWGh2ekoxU0FoNmRzdXFLL3VHUGRSdVRaMGkxL3pHT3V1ZE1wdXFJSFBGaEV2anpJbHNUYkx0ZTJqOFk1VkgyR1hKRlpYTjhWWkxCbTA2OHBhRjVINzNTSHd3V1VQUEw1SVJ1aWZrSmhyWjJRRksybTlzRlllZ1FSMW5yR2dic2RUNllldE5hQ2VWZUdTMWN3MjMrOFhYMUR2SXVsTkFaVExnVmRybWRmQnp1azBKN1VURUtkaEk1azhFWXViVFdvV1V3dXg1WVEzejRkQzhkVDczbHE4anFwOWNNU2lFTzgrN2oxNGFFelpiN2xEZVkweXBLR2xqcG1pSmRuS0Y5bUllSW9MS215UHZBVnBDSFlZbE5jZWlrUkl0dTJZYnc1bXpVU0tjMm40b01GMzQ5N2JyWlI2L1NOR0tNT0IxSVM5RlA1VS9iNWJRNVJrOWp4bVdDODh4TnF3VHVlVmZXYS9TdWxnWm0yaW5CMUEzMjNVYzZUanB1UTZocnA2YzludGpkVEREdkZ1WXJCUjR5NlRuWkY4RVhuTE4rUk11YTdrWFhIaGpIbVVkU2N5eW13cFZ5bjRzUlFkNjJwSXRIdFRpL1B3M1VlUjdYWWNqdzh5SWdBekFlbVlITWh3d3FQSlh5MnI1MmVpbmpxWmZQNklPVVRmaENTQkxzeHNVZzdTdVJnTW8yaGR4RmhCR0xxbFBrTHgvQk9oME5UUjNWbC92STZzUGNwQ1V4VDFMTktYTUpTak9DNStFQWdQNk1BT1llbUlxeW1BazUxTlVJRlptbTdRaS9kdHh4Z3MyVThFZ1Q2d1YxMWp2Ymw3S0xXRGFYblI0OUgwenJoQ1YrNWFFekJ1UVo5M1VqdHpnQ3J6QVpvSVJMcHpKZzJpUVZ5cUM3Mkw3VDVsYndvOTRXRjQrQ1R4YTZZOStGcmJGVzBDbUVPTDF2RnhXVXNXR2JTanRHL013MXV3ckU1TUp2eTNhcUZmZ3RhcG9ydXplRnZZSkJoVTZIT2F4RUw2UlAvQjVObFliUXQ4RVIxU0Z0MTNIdmVVQkp4SUlzYnJlTDBkNTUzYTZYck1ydmI2YkQxcUdlWVN3Z2J1UHQ3N1hsb3l4Tm1vWGFucFZTVW1RV2xFa1hsb1dZVGQyV3ZsSGJDTUYxbWdwT3o2SDRBemw0WDRIa1BzR2trOG8yM25zOURKTHZNQkZ4dFNIQ1V5d1E0N3hPTGxkejJEam4xSkdGNjRKbFZwOHk1dHNlQkJXNXg0cE53OSsrWGVYYjRUU0psMXZPY3FKSWllUTJMS0dHZjNqZXVrbmZkR2wzQldBa1pHLzFYaTVHeEdKc1RZZnFGVGVIRzFsNDI3UklYWXNCWEZac2Q0aEJpd1F3RTZOQ2NqajdYY3FEK2pWNkZZNnA2WDJtYmRJdGRBcVk0MEJRcjhkUVQrMU02RFFNU3lnY3pZVEo3SVVwN1pUaXBPNklkQjdXcHRnUFFmazgxYWpINW4waGRUdXVYZ01pbVY3Z2c0Z1FkTWtLQWpDUTF0L1lLbFNCSjlUN1BzWjBmN0oyOFVlV2pMN21hSXdWdWVVUm4xWHlIdW9nYWJHdis5SVNEQnFnaldKQWJ2ZXJKemo4cjh3d014OWs2RkQwWmtaRW82bkJoNFpKUldDVUcydTJYOXFBN2RJeHQ5Mm5UWkwrZTdNd05sRnRuME4yd0U1dmJsNktDTzJFVXMzV2FLSWlHaW5TQ2Roa3k1S0RYdG12VDNRTHZDczM0dDFyM0NOVk15alNGRDE5MVBaQUdJaTBYdUhsTUd3enFTTmtZRjRTM0NNRVRVTjM1Z2xjdVdwU0pkREVzcXRUM2ROcUJnbjgrT3dFWWM2OW5qSTZPbG95N2ZhSkV0VWtWcEZrQnp0S1BLZUFhZU56OEdrei9hZXpEL3hJYmFPK0dKajZxc2g0cGUvVDJicDBtb3VVSUg3ZlhDa0dOdjZ6eGdsMFBaRlVsRHN3YWlGUytUc09aQzRhbWt3S2FITHBjQncxeC9Ncmg2ODNQc2VzQ3Y1TWw5ZFFZRHVwamJpbDZCOGRhcUJLWGI3SmVqRjZOS1prbjVoem82cmVISW14Umd5akRNVUw2QmFyNmtaZHI3K1ZZVVl6WngxZk5ZdUZybGl2VWp4dWc4K2g5eUtBVWNyUllYMXl3VzBpbzZMQjdteFJSZy8wZjdubnNjQzJkM0tFdnVFRXA4dXhOd2g2d2N1K0ZlM0wwS1E5cXNKUU82NElrUVFxU1VBTHdsT3hMdGVUeVVzY0VjdTUycEF4WndjZ0RrNVpyVG9WNHJ6TTNMVEo3aXE4Znd5LzZBTVNsSGtLaDhCYkRVM3k4bVZ1czZjRTRSQ3BzZFZZVG4vQUR0ZFhzbEo1TDVvT0R1VjFSdGliVDhSYzQ2YXZWbVBHQmgxRzVjckFlbTRqc3FJbnZ1eEt3bU56TTJSQ3VDbmxPK0JqUGRZai9VNndIek5KakRKelRHbUhtV25uTlZySkJxOXhkd3k5Q0NBRjlkazVKbFRlWkZwNmoraTB1T1RVbDJqdmJ2RzdYSE40cVhsRHNFRkh4bjY3VXlOZUYzUVFUWnU3L0g3WWloSUJzaE5wdHI5Rm81UFV3cTZJV0E5dmgwWTNSOTVOMDNadUxWdFhrTnZEditPd0xkTWc2NGp2NUtjRWxhVFdvK2tkVU1IWkd6NlkyRmxScDVWWFVqZHBhSmY5RFB5QVJxN3dNZzJBODVNRHNVZ2JtdmNHRk1tQkRQOWZKSGhqcUI3VkpqTy9NQ1FPTlBlOGhsQnRYL0lKcFRXOGhCRFJyOHlBRUtqSUcxZm9OT3JLZm5MYTFaRHltd3lMWDdwVlV4V0RaVE42RytweGRXUHlVK2dkTkN1aEpxbkppOG8yYXVrTk1lbUVPMVQxNGtiL1VRcGNrUmkxbFd1anNvaUNXcVA5TVc0amUwblpWNnhoZ0JlNkJTanU0ZW51c0g5Q1FZWlhLZ0JUVVVQZmM0TWRSdDlmOWRqaWdxVDdWUjBKR3hXVWNLcUYxZG9mL2VtUCtaZ21ibzVrUE5id29SZnpQcUIrbzczZERiU3JxTDJRU2ZwMFBFaE1EMkxmVzdOOFlIT283a2x1blZ5VlZHYzdLZnE4N2h4MlZBb1JpNW5qd3VCWE1KQkZoL0lydlh0T2pkUklWTThick9FSTVYNnI4S2lPQTRWK3NjUFA3d0toNHBPalE0YURTbWRDYUtHeUNnM2xsWm9aVVM5eUp3NHhkeWxoZXA0THNPL3p6cGpkVlJuK0lIbGR4R0JRdzB4MXpTMGdVeHVyY1pjTXFMMW54WXlYK3BaWDdkZmE0clg0c3IzZ0tTS1VTRHNoK0NxSlNxbHN4bGRjZmhTSlJNWUJjdUtZa3BVeThkbm9KZERLVDV1QXNLV0lmaEdhdnVxTXhGckYyd25ySUl0TzRDL1ZPMEtQSUpWRkI1VE1ITmlrQWFXZmd5bWxXaFVMd3JERXIra3g3YXhaZ1pCTVdzcHN5bUh2ejRnRHYvZkZJTGgzTGE0TlhwZ04xZ1dGMExwSWVXVWpvMElOVXJMTHRUbVpMU2wyanpXRUdUR0xTTVpJSjlPUW9FcXFmTjlab21tRjFQQVdFUGV2WDVIKzFiSTIzV3hacXNDY2Y3UXpTSENNZmdpNGZvcG5tRGIrd3NxVTJOT1pCdS9lUGdXMWxlTm1mYWRnK3FwK3VKUlo3WjQ0blpnRWhpQm12TjYzd1FiaE9wbGQzZHpTbGxCZDlkeFlUNlVHRktrbmNLR2hBWEJOVEZCWlJFcEhieWdRaWR5bGF2d05NaWRBdHF6U3JiNWJLRit3UG5YNVZ0Y2E0cGkrMksyZmRlbWpBUjR0dEM5K0V4K3A0aDFSV2FEc2tmbyt0YVFpOC9RK1pPbCtGdU5IbkRmMjlLM09iRlpqaTNQeEM1a3B0RnVkcytOWEg1WTU4bnJJN0JTMnFaeGR0M2NoR3FCcW93NXo4MDc4VDFHclpRbVl1VXd1NFU1Q1BrbVF2Vnk1UGtmY1NUOVJLaWZEK08wTGl2NzBTZW9pSXpJSE5qYmFvNWlwUlAvUnNGZjVQMzk1M2cxY3BWNStmMlRjQnlJcUFZc3RDM2hpdVFmbkd5TElRdHFiYXIzQ3ZYRC8rbXJEQnduZVg3UmtCTmt3L0IzejM1djJNc1E0TDNkaHpHQ0NRM1ZpeG1hM0VvWXk3dmVZdmdNRGVqNXRBdkUzMXhyclBKTG9kUlJQYUZoWVFzWUVqUml6Q3N6U3BaSkpQcFlQb29uRjFmUE54eWdBZURQeU4rQlY3bFh6dE1YVy92WW5DMHcveGhvZ3NlL3UwVE51QkdONXgwUytRbHRtcEtyUFVyWUNoZWFpbGw4TzlEMW1BWjUzTlcwa25va1ZQaUg2N24raXdIYnN1T1g3d0xTN3ZLNTVNUDdxNytUVXQ0V1JOUGpxUmI1bk05WlI5NzlYdlFjcjF4eGNyblR0YmpKTzRiRGYyRTVuZzBveGFPcmQ2VzlyQzJvOEQyd1BLMXFYRHU2UGN1dVhBd0UxeU5JUzVVU0pvSjlqSTZYVG5LSmNqVnNZMVpTK2UrTVEvNGpvdHNkdkFlT3FvUWYxUmFEa3ZnTndDUTc0RUZzY21XaC9SK1g4NWJnR1I2WitocWpGTGNRaUh0YklvRlZRdEt0ay9ESCszV0J3dEE5QWlxTC9sK09mbHRSZ0Y2SGdxU09tVjVwOG1rNkxuV2kvWWl2NUFoZ0dxSHM4ZmlhcXVuNmFGU0lINzI4dzRDczlFL0ZiK1R1Qzl1ME5Ldk91WnU3aFZtSk9lRFB6eDgzZEpnd3pTZXdsaFVnVitHLzNvMlQvRU1UcVZzNVZZK2RHVmN3cXFnZlRqMFNOUVZpZGpqYnltQUY0TjhjNWNHb2J1ck92WjArUnZveGE0RURLdCtBNEh4dXBWbGw0S1dwYndkMmdWR3Y0R3l6OGRBZnQvUVNOYWgvSE5zV29UelFrVDVQVWVQNzEyaTkxa2I1VDkrV2YvSWNGV0JsUFhUTFViU2FTU1NPZVB6YjZOQ1BxWFUzWEZPRXBjSnNlNzlaOVFPS1BYbU9kcm02eEc2cUx1TnZJeU1pVnJYRkFNOUdWbTM3VjJpczFXdytXNStIWlErc1pXM2FERmpDT0o2ZUpBNXRoTGg4bmJUZC9JRzJDWE9rTXltakhabmlvK09qMW9hVGRPNEorZGR5Rks2MCtwQm5ESFJpWExNcjlyWVE0OUVGN1J4Y1NwWURaTDFqWTBxdWkzc3YxUVV3WnlKREhGYlB1N1BpK1BhSnN5NDRJdEN2SDdsYlJnVlpBWWRyeC9PcGl0L05tQzlLL0xpQmpvekxCSnZpV0lRYmFxQUpRNWl0KzJjdVQrc3hVQjYyWXphQW10YVNpZFBmZ1c5eHQrZmJqWUhzRnhaMG50eGYzbjd5a283bUhmZmFKMm9WRUZxckRvNTY5NlpyRkkxTXZOZGNRdHBYbHplWWRJT2FQVk0wTjJ0NFZkMXJ5NzgxbjZqVGRHOW51eDhsSEM1RnpSTWhQK3c5MTNHOUYwWWNEU0cxUEEvQ21jTW4rTGtyYW1SMDRlV2NCMk1HdFhabnZHSVFPa1ZSMnFtSTh6QTRSZlY4UkluWTNCTHF3UTcrVFp4NkI0eWNqM3pOME1KVzRlS2k1M09WdWNndU1TNGdOY1RRWjZFRVVrcld3SlltR2F3SWhNaWFZZTBNaXZxaXJkV0ZCSml2Y1NWY2ZsZW1CVldudUVSa2w5UHFiY05WWWpRYjhDR0lJQjJRVVFFYUI0elVtNysrZENjUFlTcVJpM1l2cTdvczlXQjgrYVUyQ0h5L0ovNmFFTVd1ZGF1VUtFcXI0TGZwejBCVEg0dkJNU0N1NzQ3QXEyb1VvL2oxTmJaVElFdFhER2lubTVmQWE4UVpML2NoenZXNlNOMGdPTDlhWGtxdWtNV0t2VE1QWDEwajR0UzhORmVSeVpSRHo4T1BkWldrTmlBWVMrYWtQSjVER2NFMk1raGk0dVVCc1pvaVVjczFLd1ZScTZBdWFyeGZhMnFjMXV4SW80QWMxLzRGZzhmcmE2djIyOU1iZjJDcm1qRFFCcXRlRERvNnpIMTN0cnd1bFlrZ3ErU3oybFNKelFWdmZMVlF2Z01tNjA2MHlVWnlrRmprZFhJclM1SXNvZFROY2Q1bENnc0Zobit4SmxMSjV4VEVYeE8wNzlCMUFXRk1Xa0J3QWh3dDlvUEFaZUhRUW5qSmhWblJ6SFpnTmdpcll3SkhTSU9wS05wUStYdEJXZGF1Z3B0K2thWTBNbkkwMGlka3k5cnBjd0VaQVRRWkxjZHpKVHhTd09EaXhIeTZUTUhzQUhzTXQvVWJHZkE4RWtVbWR3a3g5cllOS2tJR0VEQmlIbHA4Qkp1L0puN0xCUlhMcUlTbk5uUjdWSHQzbGNwVWt6TlFGc0cxQkI5NlZodFVINFM2TytYeHZSWWRpVmhSWUNHYm9NTkdPdE82dXZsbmgyK1JBMnVCT3dNOFNUaXRKb3lodmhycnVRcmNDZjIzcXBGSzd6QklMcStvNlluL3R6bGtsUmF5c1RwTCtYNWE5RjlQNWdtSGV6RGt6bnZ5SVdRNGFSaDNHWmhzY1V6RDZlM0tkcGhLT1NnUWhiN28yWWh1YlZwL3FHcUNmalpQYXpsNzZwUXRZTExSNUdsbmUvdUo0YWsrKys3VUlra3pUejgydUtLbE1qaitnY3U1RVFPUnRtWllTV05Wa2lnUzJsckl1eHUxM0p1YW4vSm9XQzJWRWVaemU2SVBIQ2E2SUlaa214U2hWSC9vdUhVS0FXMG5VR1VSVzFNblM4eU9PSW9lOFlUSWZJSjVRU2FJaFdqSXhqOEhGVlVOb1MxZ3dzU1o5dzJySTBKUFJ5VTZLaGxHNm1YZSt0Znp5NWVjV0IrazlCa0xDYmI5TGIwMnVCU3c2OXRwUGZhVXU5MWhRd2dheHVUQ096U2h6TThsdFF4bTZQU29FNTlQNVBEdnkwZ3EwQWV0VEJCWjFZMGRSbEwxdlpXamtNc0gzWmJ3UGdiMHBOdjJPM1RJdmtkRnpDaTh5UDUyUXV0bUlxakJONDc1ZUFMMjN4OGhYSFB3dVg3MUpZajdkY0F6U0FpMC83ckFwdERHaVVQekM0YmluM0ZlUmlpTnM3RkxiTUZaZzc1QUlWSmVaVzc2UFh0Ymo1QzdlbmlwTysyRFVPNVhFSXJVWGxTK0RHSEJ3RUFYNjNkaWtzbjlsWEp1cks5aTMvYmxMVnJURVNDR2V4bGZOWmZteE01MnZUeW9va3QxZnQ2eUxqNnFWNUZnY0NYZVpsWjBsSisyS1MwcFV4Z1ltcWIyNUI5WmhYVmNHRGVkSjZxZ0psSjJncDkza1EwU1UzUUo1YzQwM1NqbXYvRld6TFNtbXI3dTkwTGhpN3hTMHVPZkhNd1QxWlNlQk53blpjWHZoYTFVV01kMmVzQy9DOUVlRHI1UmNlV3dySlFyU2hPU0pBZFU3NlZYOHlha0IxaFo5TjVicnN0cDFPdUxsZGdmeVlVT256eXNoQ0ViMGZaY1NrK3ZRZzlITk1qRHJobjZvQ0xNNUF0aU9nQ29tWGZhSXpyU1ExQjhyVXVuU1RKV0NpY0pPL0sxMjNMYkNnakZRdi9yZ21IQTAycFNZU0FhcWNrbUVhQXdWRDBWVUFKZ3J3RmRDZWxISmJUZVkvQ205WWFYblM4ZEZ6dTN1dU96UkpEQ01ZVzlrb1B5ckJCZ0R6TEFoZUxXRlFPYTljb3Z3cWt5SU1QNnR6VXJBclZlRTVLNURrblZHNDJsd21EYjBTRnFBNDQ4TjAzTmJOVU1EZGZRTXZ5WWt5OFVhVU5XTHRhdjk3REllTGl5TDJqT2NqQzlBT2Y3RU5rME4wczE1dUFuRkwySitscjZCWjk2cktESEJjd0RhSlhVc3FhU1IwZDBRS3c1N1k4QU1OYWpmdlhDMlQwYVNYQ3pYMm5iSko1VkVhQVpMWW5QaHFnNE1yeDRndFJXSWdaMDN0eElnWGU1YkJHTnR3eGpKdU40S1hkRmROd2ttS0w2eXVwSjhMRERuVlN1a3RnY1lGaVBqL1lNRENxR1ZseTJ2VmZ3NmU3UjBtbWxmdTBJN202RlFWUDJucGkwNXFCOSt2RUc2ekxhVDllbTd0M0dMK2VsVHBqZXFETCtGdmtwdVd1MUtZTnNoT3owZzJLSi9ZNWlTWEpGWnkyWWkrd1pBMVBMcEN5UnFwVDB3UGRReElkN1F5L1E4ZW1aOUlKVGRzRzZ5bHoxWXJpZnJ2ZTd3eFRqUmFsT3pvVjNDdXFMREJDWWViRFVOaXY1UW5Nam5BU2FzL1Vac05QUXZFdVg2YmZJVXJYZ0ZiV25FZzcyTWZzM0tZS1F2S0czUEVCVGJEeU5UcUxWcytmS2syeE5DS2RhcTlNcGVXWjZiYkNqblNWc2dHeXVPZXFhdURTa0hqbWxhbUhXYzhvRkF2bTVnRnVZZHY3MUhPQUx0RW90NjVJNHgrZXltSEtLVGRZTVViUzhKRncrb2h3WFdVNWNudUVkNm9nMEZ4SGpRYlpGQ00zb0VMT3hUZDFTRS9zalpXaHhQdXlwSU94SGhSQVFXdjZxWW1oZVY4TEtQc1pkOVo4QUoxTXE5bmg0ZEV1OERoZGRrTWJRb3RxeHVUUm9KV0c4NXZJMjFNVFN3Q09vN1B0MGROQ2NtdmJYUUxRajEzNzJhSEtXUGRNU0xReFAxaXFBdzlZdENiT2VOek5XR2JBOEpPWWRMQ2pqM0pPWVhLcU4xeUlGNytMMS9DOEVsTk02T0ZzSnZzYmM5VHBES3daVzdkQ1J3OUhFK1FTVElxakZmM21MdTlaK05PZlRObElUWStIK2ZJY2RCcjhlRlVUVlFMaEZxMTE0Zm9yVlVadU9DdXh3RkhDb1M1RzBvSXZ6aEpla3RLVjUwRllLQk4zLzVBVHJpczZLcVBETjRqYXFxWVZUNDNtSitqRDg4dUROZGx0VmluY24xMzRyUG9vQ1lzWnoyOHpoK1A4ZkQ2Q3ZtTk5zTmpBSE16UUJ0c05NVUo4dGxRZnhlVnVoMEFOajJOc2xjek9TejdWcFZnOERZSm85alFZdzFZNGcrS2E5K0phdUJSeHVNVlAzSnlNalZyOFAweG1XOVJETkFDQlZvWkFKblE0M0xBNmtSelh0NGNOM0orTENFVEFyZVM1T3lQVDJvendFTnMwYjgwdGNTZnQ3Wkx3bVM5elVKMXhFdWdiRmRmSUxRYXl5N1lrV0l5dm1PWExtSWRYeFpCczIwZTI2a1FsUHFzL3pScW0wMG1IdDZNeWRaOUh1LytOZncvTkt0UlFCM29FOWU2K2RkQUV1SmJLZFdWdERwMzhVaVlITWtZTW8yc1ZncDlHVVgzSFFNL2hYLzNjZy9CcjI3UndkWlE3Y1ZvRkNPQnpnTTI5MlZsM3NmcFlKb0loamF0SGc2c2cxeTFTaGNORDhtdkRRbmR6cXZNQ2xsNURuVjJpVlFVUWs4S0ZpOUVwNDJ5aE9NdUttOTNrckNqVktEUlNla0lrWTg4elNjLzNuOXRCaDNEcjJuZ205VlZCN1RHNm5TUUR6Z29TUlZtVk5LdE4rY2wxZnFCT1g4TDFNVEdOcU1zN2JObncwY2xHSzA1Z2ZCTTk4MzRnUGNTZm5qNEhqS1VMV2JTblk4TVlKNytmaFNXcFNjZXQ2Q2VVaGticmFyRDM3cVNNQzVlUXBsdE9ubEUxeVlrdk51OC9DcXlFMVZORitWbzgzRnAwaE5DWHRiVnZzYnc4SFZORFVwR0duUDh4ekYxZ1lUV1JsZkpTZk01YnYyTnRRT0JSWjlYMUZzcEdJcVVxNXM2THBucG9FYThlTE9ocWtXUkRmak9ibjhHQ3dBeW5oK1RJcmNkUUtBU2JUOXNXRU52SWFuM1RDSVViMXgxWGd0b01FVkEzU0N2SVNLZUZ3bU9HbFdpMVY4NEJ5NEJhQUkyVTU4YmdjbGNza05RVTRycUpFM0ZHUDIzUjBNMnMrSnhlQS9xQjEzc3dlNWRZbVU5bWgzQWsxQnEzczZjUFR2L0kyTXJtZGpzT1B6MVpOb2UxR2ViS2xRM1NFcVJGL1MzdE1mM2g5YiswRGw1a0FWd2cyUVBjTG1JTUdRMEhndlZ2VVlYU2RHQTJYN3ZSTHU0Zi95UitCd2t2eUdjcnRNUjcwVXlsK0pDSXBsbGN5b1FvSlZGUG9JT1Fkc0wwSmRnaU9iWUs2Q1lKT0lPYStqUFZRQXVneXkwalh0YjlKbmQvRlNQTlpRbXZicjB4ak5tRElONm1RazlXTGV3YTJGOVVaeFRqODF0b0FCRVVmd3prbUhVWGx1amQrb1lleUxMT3NlOXpIczVlR3ZWczlQNzNOMEQ1VkdxS2pJTk1uUDBsMmxFRkh2ZG96MlRYVGlFVlZVanVMWE8rRmtlaGh2QXR3RDFib3RnR0xlSTZENkxHdXNwQ2hkaTdiSGlUSDRDM0lldXZCaEFFQ1lOOXp2SllSNXVibkVnUGNVNmVMNEdNY3IwRThHY2hXYWVRbkxxTTJUUTNsZFJlOEZva2l1Z2ZyWCt4MWtiaXVhRWVHYi9GVmpPZkprd2FCcHE2U3NUSXE0VDBMY3ZJdGFmTS8zenRXT2pRZm9VSzAxNENiQTBUQlRZdlAzVkRQQjM4bXUwNUFRSGZ0M2NtQmU3M1JlenM4Y0pscFJCaEU4Qm1hY1Z1bzhmaTloQkdLNmFqYUpiUTFjT3ZjSzZqOTJVVit3cFFLYjRkQnluRFRBSnBVNVRwQlVSZzFTeVpDeTdWWi9iTGkyMHc4K1dydlFuQTlNbVZ6emR5VExxWkcyWUlLT2lBTHVOdnhTUXNWekRubjN1TGZPa0JhYnJtdUVCSWRDMGtCT0hmY3ZJQ3VycDd6MUNjTDBSTE91STdkNUlIUXI3eEtUbVcvT1ZocUJYMVpGWmNKdUwxSTl6bnlEZ1NPa24rOVVIc3JQOXp6d1daNFJxQUdtRGJ4Q3RHRzZ4WXJDdlFFMWQxK3VZYU1KQ0xpRXlUWlNxSHIzdzJrUnViaHdpN2FTd1dVQ2VJaFdBUHJEWnMvdXZoZXhxc2lONXpVbFBpYWd3T0hKenh0cmJKZ3B6NmFjWjMzK2E0S1lSeS9hNGVLNDJyWFJwUHRQTzVaK0F5MUFBYkI1dExTcVBmNE9vMk9nRnJPVWt2Qld5VVpLN2xpUEdINm4waElpY29MUFR1K1BuSjRDNmNmc1owRjlHdTJSN3N5dEt5eldFUTd4Ti93QlFoT3BHNlFBMXNQbStEejgyYVluTng4TThoSVhsNCt6Q3RWNXZ1ODhSRWdCelpaK2ZUeldHTWM3UllWeWtOc1JqVHFXeFI2UCtLVVAzWHlFL25EQ2U2ZWtYUTg4NmJiTGlQZTlUZWZxdDQ2TVUwcmszNkJRcm8zcHlyTjRCZUpaTGx4blNYYWYzWXpaT2g2R3BiMThtZlBQY1lBN24weS9sZjNIbGpBZjhCWXNLOS9kK1NOODFGelN0K1l0RkV3MnNyUHVNZXVITXQrSGRvdktsaTRobTFGeWd1L3I3NWMyQWN2TE9OT1hNL0tvaW9SYjB2dXFDREV5MXVtUnhzSmZpOU95NEVBd1hNZ2ZuYXhqa1FiMFdmejB5WFBub0tVSDArSUdPekd4ZUxITFloT3REa0pRTXEvMkZRSjRRdVBuRzBndTZIU2p2SGNKYW5lck1mREpVYlAxbjU0YkhsZ0V5U2E5ZE54bVV6TVdWMC96U3grMy9ESFVpczBzcmhNYjV2NUxIU3Erdmw4UXVhbVFQeDBrdnhYS3ByOXlwa1Z5VThWUmNwZmpBVnpCM0FNa3kzNGM5K1NrNEErVmtUNlBEYlhDSklVdkgzUkduSFB4amRqdDBJdzNvbHg2dUVOS2tsZmdNdU9OSkV2SXltRGhFcWx0SnZwQjJ1bWZzVVl5Kzh0K2Jva3hXOElQSnRSRllCdXNLMjVORktIcE5xdXRhVlF6dFFSWm5idEVhenQwYVoxbUZZMjZXNlQxQVovaytobi8ycEZjN2lrU2VzK2Zoc2dCZVhHa0ZkQVFlOEN6QnUwZnlIWXBXSWFaWXJYVlNJczN5V2lNY0dIZ0I4YVhEeU9EVlc5VTJ2YVhvY0RJa1FzUEpVeUlNU1lmWHZtd1JaUDc1Qm1Xd1hNdDA3dmlGM29xT3FPNlA3U1ZGKzFLOFU1eWNQaXAxN2ZZdW5VSHA0Z2RPNSt5RGpEZjJUcW9MRUpIWTZ2UFRZWnNOanBRR1FHTXZYTnJma0V6NmxTSnBFUGtiN1RNV1dPWFdVamIrbHhjSTF1MHJCRXFYMmE1M0kwNkcvMVdwOXN5YThtVWlyNDgwQW1iV1VUTEhqWFpOSXNMNXpMWkg3M3V3bHJsS1lMMEQ0L3RTWVhHa0psbWRZMnZ1N1d5SFl4T1dMSmt2dzFHWm5lZi9iOUJNbk1VUWlNYkQ4djdkSFNNZHVMYTM5QkdjT0tocWNwdHpUWXNjQW9XMlRtMWQza3pXN29lMW82NzM4TTh2SnBBOTMybmwzelpkZHEyVGUrM1VGaEU2R0xndGNNUnQxL1I4NEJrcDErWXQ0UlBFM0Jibml0L0t2aGVkLzJwTWNzMnlmSFN3NGNNQlNyK0dLREJCcGV2SStqTzVyeXN4TFZEckRjZ3lxTHpwTGJ5S3RCOStzcE0rK1NMY0F2RUZ6QVp3VHNNNU41QVhld1RIeG1yMXM4MWFHVHZ5bDh6Snpna1pqQlZ0NmRtWkJlMUY3d0JGcUI2aTI1cmZ3Q3g4Z056czV5Ry9FYUw4UlBVZ05GSi9Jbit0MWlVUHordENza3lKdFl6TzNvQUdJSlRXdDBZN3dJVUEzMGFoYVY5TS9zY1IwZkNSZEdOZ2JxV2xSdVlLT01nS1BQQ2hucVJUQkRUdXpVb2FWQldHTWtzcXI1bHJzU1MzSVc1K3JZYU5zTUdZdHZrUHU4MnIzY3E0WUREck1yWU4vSStJU0gxVUVudlZDQitzSWZ2NzRZU1pXbnlVdkw3b1ZOSjNWV2xBMlBCa01BeHM3cVJWNjJXTEZlaGpqazhWcFdYMHhnWWY5UTBsWE00OU55WlRtY3VTcko1bUwvejd4Z3N4cTAxdWYySVpxLzNEZkpidlpBeDlGbFNFSHlwQVlYd2dZSDJ4a1hmNVF6cDJQb205UytET0k1WHdsc0hXYVZzd1h4a3NhZVUvaURpVmt4bmRWVHNiWUdleE5vMG1yRFJyVmFWMzRCQkNxWGcrMlRxeC8xNEt6TmtsTmk1M2VJeHVhZ09UWnZleS9aVGpOZFFwNVZTeURMMU80RVR5TDNPcHc4citJWi9BNE9aNGJxdytpc3VDNzJBTUZBRmgvQkZ5ZCtVMk90K2tWV1E1ekJ6VnVnMEs5MkNMa0JzazBEbkQzWWFSeTJaclpwUm9QRTBMWjhvc1YvaUVZTmR6VytFV1BvalJReWRiOU41SXk5VGl1UnF2Nk5PNEtWazFnUm1TT2s4V3JnMWZ1eEdadVhidzl3UHpVbkZmRGtjRXg5dktxZzRuQkNUSW5TWEozZkE0ZjB3c3VsQTMvMW50a3hUYU1CTWtoWndLTmdtRlhCMTg5Z3JpZmNxNGMwZDlMenpNYjZ0dmlwNEhoRk9sM3h5RHRVT3NZL3plMlRqZDRtT0dKWmVtNktyZFZYSFhFMlRmbEYvem9EQW0vbU5tS0lnUGU3YzRzMnovZmRCK25DdWxxY2tGTDhNSUg2aHVONWh0Q1l0TlFTZzZqZE4rNS9FTGFzd2JOelo4aEYwbTZTdjVWMENkcTR1cUlUUWg0Z2dENjV6VkhFQU1JMW9XcExoZmkvOE1LOEZLbXBMdDdaMldiWFRVSVpYMGwydXA0anJ2TDRXYjZDZEMvS1VkTnJsRGtmS1N3NXVGY1ZkcUpuYWFJdTFTUjRTbzVXWEM4SERTWC9UVVlCOUw4cU85WHJKK1pvaFR3RGZiREZOaUFtdXVaVEIzV29ud2V6WkpNOHFnbm1qTG94Q1FDV29nOW1ZL0hSUFYvbzM5VTFKakNMYWZNTWJyeFRvY2NuQ2U4Nngzbml5dDA5Ti9oNjZYZWRtRDJsWTRJRHlkUjcxNDRnc1cyQ2daWHoxSlJUZjRTdGZ3ZHRwMkt0WFBwdmp6UWlFNUhQS0RVOXY2TTdJTFV1QUtxMWd4NmZBZGxnU3JSc1JFMHF6WjAvWDdzQlpaSUtpOG96TzE5K1ZmK1ZXRTd1c2IrS3lOam1BOGVJZGZVV1ZQc2dreHhsTU5MSjVxZmJFYlN1NUxYeE5RWjVEVGh4OG1ndTJTbGw4MVRaaHF2dzlQOGVLUjBqa04vUzdSdmgxN1BGNThvUk9qSHFOdEpZcDVmM3JvQU1IeVk2bG5lQ3ZZZXJBYjY4MjlEcTFlZVJzUEJJWFZJbTVaZmV4ZGJzRWpLUzNScVovZWozL2xCbzNCanZCeDR2WlB3WnJsdCtDRFRKblNpWExzVFlEbHVNL3ZrZjE1L2VxZkZIa1cyMVlMVDRzYW4zWnBkSFM1RHBzZklVTS9OV21kWWRKY1gyRng4b01ob1h0VHdHWDFLcUxNUEtQN1BETkdxaUxvWkV2MjFDK0VpRnh6aUVPQk9KZjMyT05QbmdiL01FcE1LakRFZ1hUbzNDZTBzV2lxNjVWQlRtUjY0YlB4SElHb2g5ZnYxYWQ4bGFmWkdqNHJWaGZjQkdiRVgwQzYxQ1NIdE1XbGxrTTRvOHhPS3NPQ0MwUEZVaG9YOEFwV2NpSjdoNjhPMURQamMwbWI3NVBEQnVZa2JFak1RMllvMXNqNjdOdU54TTh5NnJ5ai96eTBnT0hVMXdkN0lEY3dIdjduSUVqN0U1eGQwTzdhMm9nV3ZRRU9kamJPMDMvR25OdUpUTThJMVl5S05vcWw5T0tVQnBnUVp5OHpUaDM2aWZZZDJSRGlKRWZXKzUybnNWTXBLTkJkcllOaWRYMFgzTXpKSmxwNHVjdjJvWWRhTkZiVHNIM2w1WGxleWVEMmxyK2NCcFBIQW1VL1BVOFdTQWNET3QvZ1IzZDBhS3pFRmZIRC90c3htL2ZTSk5KdzB3bnNtWjEwU2lROWlHbG5BZklXUjBsaEZDR20rRjhuV0JoTEljZEZWMTJaZllGUWdjY2grTlNaYnVpM3lKODl2eHVaV0tXcnd3NkEvaE1vU1dsVzRHdzFOeXhFeXVKQWp1OG9TU1Vzd0hKTmxyRkFPMG1tcHg2Nmd1K1o2cDR4N3JxOTRPcUQ2Sll6SURhSVhQc2pDUDhyTjNqOE5kSkIrY0JYWjlDdlViNDZ3VEFSM1I0UVdqYjI1QUlNeTdtd0RjZEUxcDkrcmVKbjFDY0FMYk55N1B4eGk5cVJSVnBSSTNyTFRLR0VtLzlrUTdSckNWb0dmOWhKa1d1bVhNTDloTDB2bnhwTTkzbmliMlRPV3BUL1U5ZUcrUXh0ZHdOVm5NSHA3bzhrMmR0WnBsbFoxWkJTb294ZzhUSDZKZXFST2s2NGpNZzN0RDFZYVNrbXRZQ2RuaVVycGRtaStQRmk3dUpWR2dVRzZybTNYZ2xNT3ZJYmJzZ3VadmhSSnNRa1BONjlWc3VQRms3akdLanMxWlNhUnJkOThtcDFPbzJ6M0FzQjZxbW1tTCsyaGx2WGFFcXVKSWhpOXgwS0ZBMm5mdHRXL2o3QnJnN3R3MG43bUZqMm1mVE4yNzFtaUtUSCtIU0pvRkxMdnd6WXRqTEdDaXhuWTZZOFdma2VQYzZ2SEw1VUZFRkVXR1pCcHZCWE0zeXBlMkJrSVRwRlRJSFkyRjBPbnFqZ2Z6YnVOQXhIQ05OV3JkRDA1aHhOa2xGMitkZEc3cE1CYllIYThqZUdZU25sZGVPRnRqOG4xYmhidVJVYmRtckROM2VWQnoxcmpPeDZsaU51a21lYXJRN1RKeGNvUjB4dXVaSVNNUk8rK1N1SFRYYktnU1VVYUo2OUFEQThoOWFTOHg5NXVtQkl5UklRKzBJVkZHWnpyY3plMjU0Q2VqMVRYMjJKMU9rSGR5Q0szQktYZ2lSM0dqaGVYdlppdDFmOVZOcUtYUjJvcWMyRExva0ZqUXZoVjlKVFl4aUQyckZOSUp5eWdWMVBFSjFLenNBbURZcFVSUzE3ZmlPV3M0VllJb0VIVUwxbS93amRHbTFZL3hzL0hEZCtoOUVSbi92OXlsQjc1Zm01SUFwaDViRlZyWWluTkoveGQwMHgxUWVCUk5PSkwvR1RqVkpicmNJR2lWaVA1ZlpQYTVraWNPUW1XNEVLNncxUC96YjFMbDc5dlIyQ0VSdVZxTHQ0cnJOSzFNQmxRUUgwUm9VUHpUOWN6eWlHalQ3ZERxbTN5d2xSQlV0SFphdDdzWWFSTlJNRTJyZ1Z3V2pTeFJtRFlMVTJkanJ1QlMzUGlCeGE4ZlNTdmlDY2hMRWhkNGxZa3d1NFpQVkhxRnVqQVZzdmNlZXFNdDZmNysybUducHI3T0pTRTNmR2FrUkRTVGViRGIrazg1VHcyeUtWeFFocnM3eWdIeWtadEpSdEZyOFBEUFd6Y1pscXMveStIV0xiNVpCRjZoeXREd3lacWZXVVV0Z1dJamdTN0VpL0NDM29Fb3BYWGgwbDU4MElyM1BZcTNhY2Q1MkpxeGV3eXBuZVNBaVU1bisrbkpYRThFWlpKNklIUXRGSjF5cG5SdzNabmJIY3VVazVXeXRFOHQyN2xKV201bGFnMStIQStGR3l0UjMzb1NPMVN5UTVhY2dOdTFjaDlzaGJ5SnpnOHhtZ3VrSjRoTCtsRW1Ua25GbEZZS0VCSjF0MitqaThlMy9McU9sZkhvOVRRODArdUFlL2ZIcGl4aVpHZlMza291bngzMWdHeWZaYnpsOGQ5dGE1NVNjd3pWQlJ4RmNPRFNWbk8yV1NYeE9xUTJnTnIxWFFZemVSRE05aGY1S1UwWHVyNjVIdms1blF6WlFlWHV3dmRsb3B1M1l0YldZRldvYU5hUSsrbkFrYnVtMWdFOERWUWUvQXRTM2F2emRTSEdCUUh6UUZhYzc4UFkxWDdHc0hCT240d1hFbFVyUG85MzQyN01LQnNPaUhBZkFTUTVOYlJWS2l4U0lNc2wvM003dGhjQTlxRnE4SExUMVNQN2l2YWhLbXFicGl4eE5HM043NGRVWGgwRDdvZWdqS2dqNWcwbkVtT1BOOXhXNkhLQys4bnBBWmMyU01VSSs4NU5aeWpWeXNQajdNUVE5dW1nRFh2Z0NsZVVuclhMN3dCblBOZ3ZGNkJJVXBJbUZ6NGxFWi9mOUdySE9HSy84NlZldlV4bFIrVkI0aFRzQkplRFRweXVLazlRL3QwaG03djBNWlN1bHgwWERuRzBTQm51RXUrWEllTmlkRFJXV0cxU016N1JkSFYyUW90TXpYYkFqUEdRU2dpNjJ1YmVnblpYbXArYW9aRVIvRU9JRThZL2VVWWp4dE5HWHJVNURsakJZQkJocTFlRDVRamlrWWpOZHRFdFgvWFlaY0NoRHJ6MFVIV1ZEOWhFdE8vZVpvY3o2dFZ2OFppSjRUR29yZzdUWHhaTWQrYWVJamFuQ3ZGRDBSTU54eXlRSlhRZU84dktNVmJkdzBmRXpQRWk4NElxT3RpRUlMTmNZemN5OGhqUlFEakRPSXpKelFnYzlYejFTMnR5WnBSOW1TNkdibkdHQmwvVk5PTitYRmhFSFpFVzJJTXozbk1DTE9ybmdqb0RYOFg3Ty9DZkhTVHhwampJRFNxeSsrLzBvcnU3dW5JbUtmTmlWK3BQWE5xSGU2eXF1bWFOcXBjaDJhUlVyN3g5M2VkZmdDMm9XejVYaHVwN09QMnQ3b1BPU1kzVVVzdEJaUy80Q1RJeGJGTmR0V1VNRmppYmhOQUlEMDI0eEw0cEFaWWJPMXQxSkYwTHNLUmw4dGJQRldSdEhuQ1JFUmF6bzVNTEkzaTNNQ0JGNVNoN1ZCZDJ6N2ZXY3l2RzFQUFZ5MUx3OU51QUJzcDlMNmxiMnRPTExaTkUrczFBKzBXUTBGSURmZXgyK0ROQWpjS1VGSjVJT2I1UUdqUzRJcE1Uc0FHQTVvcmFpdUVlNHkxS3JaM3J5bHJQQkNNK1FvaG1sV3NPVjh3WkNlOFgzV1Q4UFNxQ0VEb3dxWEl1NTNObFZ1aE0rQnExUWVMTzI5R3FzSE5VWndEZkpuNWx6R2FLZFhVU3dNaUlCVTRYeWtOVTVoUkhRS0J4M2VXSlEyYTFxZlg1YXRKYTd0ZjhlRGpwcnR3VnJLT3FkNjZMZnpYdXBLT2U1aklrTW9lQWdCZ1RvZkRSRGlVTXBVQUhNdmtXN0JRaFZhbEh2RnpSVUI0OGhtOUNXVUIxSnIyUWI2M1REVUgyWUhyeFd3TEl1NTh6SnhmanpnVUN4Q2dZQk03ZWxjT2M2MlFhQ1djWG9CcEdPR0FScS9iVHB6eHZUOWs3MkgwU243YnZ5ZWt2aWJrUXE4U1V5U1hqamltWm9XMW5EM1RLU3pzRlFPZ0JoNWh4d3FtZkYrU1hybmJoUXFhamUvWTMyMGRpSUpaVUJyT0tWOGR0Y3FnWUJHUklOTUhSSWZyYUt3UEtQOCtLSFp3V1Z5OVBuQ2lOcFJZa0VZTm1zaUF0SDl2VTZDRzFjamdxalFxL010Mlg1VEttamU1OTB3dHhnT3pFVll5VlVKaGUzSjltNUE3TXNsK1VoTmRrMDc4UFg5VFB3aEpPaGxBV21ZOGI3ZWlIMmR0aDRxMS9xRXJRc2FFZXNGWkpBU042cmRLcnRmbWtiNFhsMDNVWHpTZlhSdmk1NXZZTzFoNk1wUjJSTDgxRm4xQkdiTVpxRkZVdmNrd21va25SN0dZWldObSt6QjU1N3JGUDFEUVZsZ0ZDbFlRNHhLaTNlUGlBMDRodDNqcVhkd1VzNmlGWnVKbGtOZG00WitFRGZ0T0lNVkFKVW03aXdTdkdLcVhXWk9HR0FjSVg5bm1NdmFWcThhRSs1SUN3ZEpJVnpGdVdHZzE4akZOQ3BSNG51WjZkaXdFQlIrd0lNOXJkenBYemJZZVdZVXFoSzMvTGQ3NWRocnFuR2dFejFCM01hNWw0VmV1ajNQeENzMkhWcUdvQzFlU21vMGI5b01LeWJXdzdtWmg0Ukg0ZnE2bk5LRXh2ZFR4QVp4VjJEbFpQWTh2bkhZL0pEV0l4RmNqL0owY3pCejgyVld3eG05REtyeW4wb1BwR250Ulh5NHd6ejV3R3hmdzRldlBCUktrL2RFQmpGK1N0RzZWMFYrZk9PWnlJeHhxWFYrSHhyQ1BVY0ppQ2Q4OURjRVVtblM2YWRrMzFqNzhXL3JRWXRBZDF6Z3RzQkpLWHBkMTV1QzQ3Ulh5SzJyWTU1MnE0VTFwVCtid1o5ZG9id3REeXBndE5QWHBQcjZSR0VJSFZiYm9taHprVjEveExVOURrWWdsdk5NdFdpZ1J1VHUxeVY1TnZIT1Vtenc2UER6UHNDalJlSmdaeTFyZ25EMFd1ZWZCSmc1Unc3TllyVjBlWnpRZWJPWHVPZFlMejFZOU95aUNkVEpMOU9pV216ZCsxeDNvcHJsRXYxbjU2RVVsWE5IcnhJSFphNW1FYlVzaVhHUmhkUzA5ZUNka2RqeHBMb1hyVlZ5UGpvL3BaRTFrQXc3TWhqVHFZUkVrZUhkYkQ1NXNzNkxpSXViWWJqeVF5WTAvaklzdmwrc3lIYXNVNGdwYXpxYi9vSGxJRUlMK0g4WFdHQUZOM1h6L2E5c0MxRkJpcTZxVzdnUTRqMlVETnVnejA4c2kxSXVFZ1VhVkR4ckljMURXQVNEVGNDblhFdXdwVG1aZjBSY3hiTVhld1ZHV3YzWVJEL1UrVy91WEpGM1M1R2pLZDNyN2ZpeTFVQ0N6NHEvTHNkaUNZT3RrK1FKNFErbHZVNEZRcVhYeFFjemZUbUVXYUE1VFlvMmQ2dWl4WktPLzB0aWtHNmkvb05ZbnNZcmhMRTd6NElrUDVxSWhRWU0wek1SQSszZ3Z1V3pHS3pwVHlhRFVPV1BYMmljQ1VTMHZock55NDBqekF0MlQzajR5aVBSUDBBNDF5a3U1bE9ycXQ5ZG4rNGNhbnJXY0RkL2FFN016YjVTY3ZzMkRKRGhmUVlvdWNHcXB4UnZrUXYwN2MyY1ZCNHUxRzNSV1l6elNBbHdSSFN0WWthemRqY3VKdUtwcFpRTEc4QTNDR0Vnay9CVmx0UGJVTys5TWpFYTRJZE1NSTZscmFFL2RjOU1NNVV6NnhTUjJuUVErdzBCWlFEWUJnUGF6cDNPeXZET1N4cyswVXdhMkt2eThWalB3eVQ5TlFNd3VWd3d2Z1RYTWY2aFIxSmw1UVdMU2EySWhHM0FKd3ZsMEVFbkZleTlyYXVleXhjZUtXZHQ1QlRVWjdIN2tsb05TL1lkTHpUUXVyTnNsclI2eWJaY2p0QVVtRDBXV0hwTmJJNEV2MmsvelQ4UzB5QSsxNGRTdWhFcnpsM1VTSTN0U0Myb0VINzZITnVWdlcvcXNxOXo4dE5wOWtwUFRPYnZKR2JxOVJPWGx1SUVocWFobStpeDg2VDY3NFJiMFpPUW1zNk5wa2ZYamZRQnRxbTdDUWhPejZ5dmpRNzdBdUx4SWJVYW5GV0VSSjBobVhEKzFqMktSVGpWby9FUVBFaEpOdFJNN1RmenVQMG81UnMyVlRRNG9QV21WWE1GQVA5QllBc25xai83Ym9pSTIxQVJkYkdwWXRRTXEvQ0RqWHc1ZEF3ZFR3ekZyRHpoME5Fb2VHanVIVWVBckpyZFp6YllmajJXRjFHbjE5UHdlL0h4YmVVTm00SlZERlVHeUtESDFJZk9FZlJGdkxVNnJCSzFCWHY3U2ZGb01ZWFJrWkRjejdKcFJGVmJ1VTZmWGhKY0hHWjhhSWxPTnJJZVhTVjhTSWVZYmNWWmVNZXlHWk5mUjVEbGI1OWFkdTdTclNKS3ZiQmVUQ1hzdlRwMTJpTjFqZUM3V2RzTmNiWHVkUWtaOEhLMG9kVVp1L0tyNEZqT3YyZUFGdkJiaXUrQTZZMlpkSEtXbTdOTGQvVkcxMXRtUGdnVS9zMUVUNGYyTTFOK3l5elprUlp2TERmaVQwSjBTWnh0MkMvRENicSt3Q2N5bTE1elR4VlZqdXR4c0RWOFY4UGdzdDhJZ1JDTEEwMnpsSm12ZEwzL2hnbmtXS29SNEd4dEMxcityQnhBQXIyc2lrblhRRHFQdzNzWWluS2hEZFVENmxlU0owMHFqV1kyWHpiallhVHhUbUQwQTBoVGlNZVEzWkpqZFZ2Q2FLTWJNRUNIZkF0MzFTeTAwVVhSbmJqQ3FZMGowNDArQWZ1Tk92c1hhREVicXR6RUVSQkowSjF3Vm1taFE1VTJzc3RKc2p1ckZaVGtvbGJNdFk4RjZiNHd6VWtKYktHYWRIazU3cnkzN1R0Zm4vYUhzaFNBS3NZekpZUElZMzJkdXNBY29ubXlJcGttNzhFWXhiOXhSOTkyZW9NRDFZRHJPMWozeVdnNElDVzdYSUdHb1l4SUo4SjJ2USsxazhmTEI2K25PVWdXRlZhU3VVRG9VSXU0a3RGR3hUeUwvd00vb3NqY25HMk81aUQ5NWlmZ1hzcS9KemtwZkFjY1ZRc2wreCs3a096SGtjaFoyUWlDazJxMld5YUkyUDh6UlMyQVN3YVBoalZjd3NGODg0dzR4Y2FNemcwTW4vZTJuL3hYUkU1SFM3aHdWZWhkcjRzV0dNT0RSbks2TjVUNW9nRjVuNFNQcGxoZ1BsU3VPR2RMK1JRdDhoZ0dRZG5wUGpYRGk1TEhOUGNJN2RsMUI0TXM0UFRUdm9YMER4OUtLRVFtTitoYUZDN1ZIYjNESlBLMWU4aHVYRmgwSnVUcDAwVFFlQnlIWko5ZzQ1S3MwZjVmczZIZUNFUnA5OXlVSjV2SWxmMEJFanZTMkZ1dWdkNTBYbzFKbjQvV2hiaUlYSmU4d2JpMzg1TnRqaU44OFYwWVRGcnloeVg0bGwzMEhsMk85YlVXUFlQZU45dzFFQmd1UGd3S0hIMGpjVjdWWjJpdG9hc1FvUEdGb2l0VzRyN1dwRTBaZWtsMGQ0aHM4Wjd6c1ZHdk1uQXJEdm83NXNqUExGcFp4ckgyZWZWTUpRTEU2MzlFbUM3YnpGdGVMNVFwWlQ1K1pua0cxNGk1QlAwQ1Q1NmFZc1U5a1AzR0FUSkFBYUxJVkM1V2lCcTdUM0cwUkpPbXEyT1EzR3puVUtMbWtXSDE2MyswOHhkdzg4ckNrazE4U3V0YjlVNHdRdXJ2S1dLdndBc1FDY2NvNDhEcnROM2xRU3JTNytwSGs0ZzBFRjJMTGoxTS8wWW5BZ0JhWGNmanI3U3JldDdoZ2s2ZnRqbUY5T3BLT0VycmIrd2FHK21kbmE1R1lROGJMTzFzSGtLajk1eHlXdm9Fc0IwUWZXaytkZERGTVAzRHBDVTBUVm9XU1U2blpVbGFmNmdIeTVQRExLRmc3OE9JUWFackJsUEFRODlDQTJZTDdlKzNzL3dib3NCcnk2Q1pyRTBWZ1ZZWldNZHQ1cXg5bVRDNDVOWFFLQUhIbHN5bDJpQWVLc0diL2Jpay9zRUVlZ29rMlJZS2tJVGpCdE9pdUd1cDR3amwxSys5WmdmbEV6WjdYa2w4bnp2OU8yZWQ1NGxjd3YzSzZVRVQ3MllSWGhrdE9LQjJrOVJIMVRDdjBPakVDSXY1UHFVbndNN3ZkUUZKRGxlazB3VXRuQ0NOdWs3QTJiOTdOWmhTU2pmZzhEeUw3M2JwRGV2OGZOeEhhY3NUTHUvWG13UmdvUXllSWRvU2cvQVByRlo0RkZWOGRJT2NxZk9EZmhKT21uY0xuTEcycUFvR005b21nVFlLKzE4SVdxUFY3ejNKeWlYM2Q0bnZDeTlsU1JrTWRDdSttYnVRa0xYNnkwMWhvTVUvbjR1WnlNN05jcHM2bEZaOWlZbytCZnE5aWwvVlZLczRZZ055TVFxK1lQNitOUlZrMGwraW9jRVREa3Z5dlJOZ0hCR251OU9jeVV6MzhSeEFuTE9qYkM0WDl6KzNZRzJQV1RsSmxKeEdyWFQxSWdzb2ptZVBDRndsY1JSVFdncWFnRTNTOU1tMGkxTzJtVVVqYUVwYVNZajI1NTlDTFN2OVFhdlRWYmVQcmJkajZqWEVLc3RVWnp1Y3JqSm1BOXQ2S0RTNFBMWUpZSFRITWt6clpncHZ2SnhuaENHbnl2QlJNVWwrZVNTOXFidDJZd0o4dHpFVGpqK0JsdmdvVCsyOHdRY3Rldm4xRk9BbVBFWFh3dlltM0tYSHl4cDhUR1ZnR2h4UFNLZk14NWNST3dJNTRuSlNYTW90dEhLTWx2VG0xU1dEdkxRa0VOQnJwUDJoZ0VmWVBMWmNJWlZDVmRVS2dLZ0xzbWVDdU1lSFlNVGZvN2FvcWhvQzJXZTN3d2lnZXdNTEp0Q1dYOHFhdzU4ZHluV3IrTlcwckhrSEIyZzBCd3JxNHZ3Wk5IVHJXa0d0Zk1DSDhrU1FwRXdpaFp4VnEzT0lSL3RRY21LTmNvL3VKYkc2Ym5IdkhpSUNPN2VhZm1zK21pcEE1K2lQalJaVkpjN3ZFZkhTZFJuOUNkSWdQZVRiaGhyMUsrQ3lGK2VreWU5M2ZSK2V0VjBBSS85T3YxazdnSHN2U3l2aG9rNmFjVFJYM2I1YkRJQlRPN1RLUys5cm5IUXNhYVBSNjVjSk9qdzNSWlo3VzBBTEUrQUNkcWxSS0lYUk10dGZ0Q05tQWRqZUQvNWMrYWFuMTBkOWplQXFaOE5WeS84eUxjUWZnQlF5UEV5M2duTmFWVk1mU3hjOENGcXlaM1JGSHlNVXk1UElQV0tPQjlVeVZIczhqK3llMkwrZ0dmclRod2Rpall3cUtkRTErMDZsbFFCRnJiQ2ZqVE85STVsQTF0NUFacVlGbENUQ2dNSSsycjFBN3ovdy8yVmRxZkY3M2RZZ3R0eUl6S2w1M3RtV2hRWkRSRXNJMnNHWFEyUDU2ZnYvWXFuektxT0MwR0lqdkFJYzU5YXc2endNQjBjN0tuT2pnd2M3K0IxUDFvcytvOG9NWDVqSmtHMWh4YmZZc1dNRjFzK01GRkduNU8yOSswcHcxZzBhbkpMdjNuUW0vVDFrbzQ0QWRicUw3eERLYzRZUUhlRldWNkVDdTBVd3BKTFRzTTRWM0pZVG8zQWNoTWhncnB4b3lsd1lLR1hmMGtTVTF4NGJEd1FVRzVxaFA3Zk1jNkFsdWZGTDFUYllhclZNSDAzZEtwQXZabDgweEpjT1I2b0Z2cXVkVEYxaExHNVc1S2RnV05mSVBpNEVwZTB6V0s0YjhRV0dGL2xHbDBqUTJpZXZ6SWtzcGhSM0ZOZFdpc1o3eUNVSEVMWHNaOHl4cXp0THpzemF4dW4xT1I4dnJXUVcwM3dQLzNmQjdwT28zK3lwdFFEdlFFNnIvajBRdXJiS2VTZTJqREJQdUYxREJYYVlEWlpUTEp6R0ZSOUI5Y3FqY0w4RklJSFNaR29vQVh2QWFTem5NMjVmQzFnY0s3aGxFYm1Jb1IzdXRDejJOOXFGemNSV0VrTnlid2dLSExzMmxhR2RkWnJhS2ZFdGJQRUVjREVVMkJrLzVCNEgyVjg5SU9vUFduMy9UK1dPdkVFT0dycDM2azQ4Zno2elpyWnJNZk4rZ3lub0dSbzNoQW1mK3BYbnh4a0Z2bjZhSDRhNzVVejNpMk5ycG9heW1BR0VuRVRrRlgxM1l4U1N1YjJPVzFmdlFyZ0ZDQjlIbjk3MUs0WnRPQXd6VVNubWtQRVdqZG0yNWVvOHg1OHhJek5wVzNpWGoraW4rVlBVUzVYajRLRUpyWCthcVZ3S015Y21yMjVPMVU1OUtEbzBMdzFTdTAzeVh6bldYN04xR2VqcUIwRmx6WjBCMWZ4QTB5ZVlmOTFTUFgvYmpNN1hOMWdMalVqWWF4eWpNWEhzbGlJNXdHak52eDVJMWdSZXRjVmxLMEtaeUVFbUozeFgrcUtiaWROUXZrdW4rU0l5c1B5c0hoSUhIWTlFZmhUaFN1OFlRR1RxNFhSZ01DL28rUmZESnVMTGZtdHJFOEFIVHE1enlFcTNYd3dqdy82TzB0bHVKSE5lUWpWeGhlSUl1U2p4MVlzbmJXZ09ScTcxODA1YStpeEZraEJ1S2ZiL1JreWtZMzlNcGdXSE5mU1NTelg2ZkRxSVlQSzlwQ2ZBRC9zMU96WG9FNkMycjhady9rdG5WcUJ1UW5OOXl1eUx1Slg0Q051dzNtcmhXRUcrbWtDWk1pZUMyTDhvc0dNWktBNGZDZFF3YVNxZDdKSk9tZncySmNMbG5QSEw5dTVCUmFoM3I2YS8xeDRRbzdnSk1Qc3A4VGFEL1YxL3d0b01OMjNDT3VJUVFadkxEUzVTWXFnWTY3UUpTMzVRQ28zbUpOdENWVGRSNDQzVHpBZnhFcm5oc2xKc0NQa3NuTUx4SjNoU1RWZG0wMkJZbG9BaVc5bC9KUTc3aGlBaVprMks0NUUvRXdycGRFaTlqY1Arak5SSkUzckYwd016ZFJ6QmpSZStPY0xOMUFXdFFQaU9hNXQyelVWUnNQTHVrSUJONzNnZERieUE3WFNrTnVleUhjM0JzZ0wza3NLOFczVVNqcDVMMFRHNThMcEEzS1VLYm05S2FmTUROR0txWWRDZnY1OHZselVCN0RWRlRJdmtGOCtkUldmalAvZWNueU9laFRRalVkNVJXT1M4eGNmNHArMmFBdDF1MFpEeTE0ZVBOWHNjYWZGVnFBekVSYnV5bjBWTS9oYnJNNmhPVGE0b1QwZk9RM3VHN2xxYXJvYzJmR1oxN2xIYUhEbjdLSXlZeDl5ZlJoQjFVbzY1QnFhb0QxcTV1K0lhZzZKQjdZb2pBV21veis5TUVKTENYMFBCN29sd1FkTTNRUHVGVnZiRmRXN2ZvVElpcEdUckI0c0UrQzcxQ2x6MXhlUmpLVnFvUTA3NnRlcmFZVkNBQi9ZcFl6QTE1dHRkMk53cWRBSmUvaXF3cngyeUlncTNnOEMvbVM2bjZhVGtCY2dMODR0bDlHby96UzQybTg3emo2bGpDM3MyQTNtdU01djZaMmNoWmp0VFBiMVppRVVLM2RoUlRhSmFaRkhPYk1ucm9QMWJaQU1jSUpqNkhmWDBxR3lLTzhtUlpGNFlRbElzVjlYVUpzSjNsNnNaK0Z2dE1maE1uSUdRNU9TNTlPVHZMUkxjbi8yYVU4MVo4QUk3ZDUybG9jaHRkem5QYkRIZExGc05zU1k3Tldka29vWi8yTG1lMjI2RWdFNHA3UWhsdnZ2U3ByT2tFbE51MU9acXo3eTNSa3lrVTg1RkNZRm5ybHgreVU0WHFyOGVnQlNxOHpySDlYQVV1R3JVcjN1VlJNWDJjMnNNZTkzVGlVSEljREFtNFlBSS9wYTArZTJHeFc4T0dHRG90N0l2ZXh6eHZOdkcwTmorTElmS0xPZ09iT2xmVjBGR0JZZlIzQzJEVXk4dlRaMlRQSVdxUG5uaHJTVk1Lak9JYVhLclhJS2pld2hHOVVXRUpNSUJPYUpCbDFYTWZSNXkvTS9ZTjY1VHJVNm1uSjRiM0tTc1FrK0tSZ2hhYVBWaUp3YzczRG5mb040M1dka2U3UjlibGY3UTBKZE41OGtoZ1c2WG1hOGUwb1NGZk5ZRy9uaC9SOVNZbGVvZzNVL3IvZTY1Y1RaNVhzOWlad3RHM2l2UExIN0wzMml0S2F1Sk5xWDBGK0t0dDdEVVE3ZkhoSGs3WExMdlRnSFNGUE9sRGRQUVFZVG9QbFdlZlJxVUEzb2V2SWZpM1BheVltV0JpTzBBd3J3dzJaSEhHQk1OdGl3eGV4RTJXYVhuVGZ4WEo5R1VGUG5kWkw0OWpEOXBXSXdJWjE1MFVIaU52YWd0WmpQL0ZHam1xZEc0Q2xLYW1OVHkrNlIxd2lEM09BL3VSdTJTUmNkdlVBWXZhUWtyTDZFeVZJM21uOEhxWm9qN1JZMWE1N1FVcmN0cXpnNVltRXI1KzRJcUtCTmZMOGhaNExMTDc5ZjcyMmU0WEd1OHdkWTI0YnpKZVFLOXpFR1ZpTzJPbG9VelRyVFV4eUM5RG9wUS9ORkVzd1hLeVNrSnBPL0RvYmlVS2pEQUVaamJWMGxydmp3KzJsdWpDL2s1S2VTTjFoTGprbG94UFVDcEkraEtaTCt4UmV6cUFhMkRXd2pHd3NrR0ZreUFydXZ2YU4rcTRFL21iMG1YdG01dHVEajFoNmkyWjYrbUJHRUZGdXFqZE5XVEJUeHhxcVpRbEdEY0d2T09qMGpuaWpOT3hMWE16V1VpUjdBbWhqcDgwQU53U3JsSEI0L3VINzFRQ0pnYjFXYTlmVjBXdWlDOEsvOFNUeTBkVVZ1RFJ4bVp5aTNxTk1pV1VvcG5xYWVqUG15emdOMlY5YktJOW9zL0JRMzVQcGxDNDFDQS96WHRqR290aEdQd1ByOEJnajkwOEdkQXUzcEs0WmhwWnlwRWMwQkJtdCt6YjMySFlIZmR4QzNBR1c4d3NFaUtwZlRyVVl6WnZ2ZTg1dUYxUlI1dWNGcXIySjZadXgrWVNxMEtaV1hiV0FzQmlDcnBQUWxnd3NKOFlhdDdvOUF2bm5jblRyTms1SXF5SzJpQWhYZkhWcmxuU0xUdS9xWXFxQjhrSC8yTWVIdGJ0OG5vWUdSaDlzSmlDUGwxdFBGMTZEelNYQ2xMWkdzdVBTWEp0ejdSMjJiN0tHUll2eXdzcTZaNFdvR3RaSTB0dXBLRU1CcUROZXZZaVdXQ1l0KzZIZ1c3UjRJNGlhSzF0dkRuTWFqaXZ0Z1Nrc3NFSnVIbGNXRi9DVlc1OTJ0d0pEL3F4UE5ya2RZdzNIYUhoaGN4WlRxVmZOdzg5ckpTdmxyenJINUlGUHM1SWQ0VHAxYS82elFzQUlHNDBuLzVCb0hCbDFlbkhBUEJ3R3NlQUorRkQzbGY3K216dUFnSy9DbG50QVpJeHo1Yi8wcHp1QkxZWW9uVUVJRXdVUGxLTHJ3VjVDNTZKVDNLQm9sUkdoUDhOSVR1UVhqaUZYNVBoSXdYS0REcnVaZWxFR3VZSUJ4ZjR4SGR4SDAvaHZ4NUI0UjRaMTUwVXRmSlMxZnFXd01Fd24yc0ZDVnB4YTQ0NngxUEUvcGh5RzVIV21Vc3V1cFd4R3diQmgrMDNEaHB6cnh0amxXdTdkalZhMGdJM0VqcGVOTHhveDhyeFdZekhnaXNFd0wrWGlvdGVSRjFySDFUQnUxcEFXNXhXMXFGcGUxWDQrbWlTT1ZSRGs5dFhCZ3d5VHh3L0kwTm9TWnFIbUl1SHh0ekVESVdwYU9YZUFIN1pkbGdVQjBJRzB2R2FWa3hJU3RpbzgvUkQ2L05WaXIyM09rVEpxSXlQbVJnYzdOTStSVExxV2htYzlxMXJYSkJUaGN2MVBucFVLQlpsYWhCNjRRV3FGY2hGSk9Xd0RCb2tXeW5pYmhjZW5nRXJrczUyY0wrUGkzVnNCdVExM3ZsejI5UW5YU1h2M1JWOTlCeDdmeHIrVlROWjJCS2d6WW9wNDczdDRnR3Zqb09hTHpONHB1Q3h1V092YUJDQkc2L1dWalBuZ3ZJM3hxeHlMYTY1bjBlcGFJajcwMUh6TG1BVUkvWXRnQ25zckswazZjL2xienBjeTV4Ym5lSHQ3NTBGRnpSdk5ZUVVBak5YSjlqS3NjQjl4bG1nbkNKZDNJeE9IMGs1dWN2b1FZRURIMzc4SytXMUQxQmM0aisySkpLaEZxNmZZNlVURENIUGIxNDJoZDBxczV4QXBhemZXYTJPRGNKN2ZJNUxYSUFUWTVSQVcweER3MTVQMTBrNXEvc3dYRmFlUHBIblRrbklCZml0Vjd3eDdxTU5jdzd5V1VXbElxQlowRkU5bllDNXdZTEorVkwxclN2K0ZLZG45NmpJaHdhWi9Gb01lWHFUNm1pOUFMSkFZTmFHNlduLzNUZk11MDR6N1FHTnF3WXU5dTdKa2xIZnpoaUhQdGdxZXNkbUYvTnZTOUtkK0JRS1NIdVRmRHUwa0lXSm4rTFBUSjZ2L2RNZWVxRTNXNFFJVjA0WFFLQUoxcWFYNTJ2Z2p4Qm5WK1BzK1Q1UVgwbEpySi9DVHBTL0FYVU9RazJLN1BKa25tUzdNSkdFOXd5TFYyRC9GUUEydFQ2dDlMamp3djlNVXZWcXZBNTh4MjhkS0QyVys3U3JEMi9VTitMTGJQbGwvbHIrY3RGVmdzSllVb0RjM1NvVS9kM2VVeTRxNkU2NkIyQ1ZObVRoWDY5TWlub0dlcFdUOXgwMWxHQmp6TlJDSUZSL29tZXcxMStQai9JeW1WWnpOU0ZsSTRjbjJxYVVNbFhqQlVhQ3RnMkk5amtIWndMNjE2SUs4M3VNQXRGR2tRd05Ob3hQK09jUyt3R2ZVUzVLWUNPRWJhRVNvUGc2VE1nMldQUTNwVDhaTXl5QUs1b3pZV1ZRN2ZwYUs0YnprZmVEV1B4TFBZcE9zdnhka05VYXdpcWxSZmxQVko3a05LZnJlVVZTVkRCSkRqaHRsL24xV0pYZ1gzVXBvOUhkWUlXbU9aeUFKcm9Pb000Z2wzNzhJcThYMjJScTNMdkRqMDR0WlJaRGtqTTN4Zk5jZ0tjT2NVY3dCaTQrMCtWWnhhZnJTbFVaK1R4TkdMZVNqRXRBV05IUTBMWkxuUWg5ZjgxMXZWckorcVhKMzBrTTNTTmNsRDk3bEtrc2FidThQS1hCUkNMZ0NSdVlOeU51dGNLM3FNUStOL3hpRlpQZk5kTkRueG1OaU5haE1mRzZmVkorQkZHWEIzQVFnMnhxQklPQXZ0REk1SmE3UVpzOVJENUFHU1FPME5JR3BNYzJRTVY5MDM3bE1XUXMxSURRQzVMTlJQbFlBdDdpU3FSRk5OdjhZWHNOYTBQT1c5QXh5NkFWcjk3aVpKVHdRVG9mQU53cHRaVzQ0eldjeEthbEtVdkN5bHNxdDY3bXpBL3A1dWlBZjg0b0hRNmkyOXFXejVVYUR2VHptRll2cDFvM2tEOHUwOWgvV29yVVB0UzZrVVRwOE05REVJaVV1YXhYN1NxYk85VVhCQlpQcG5rMkdaT0E1bUNDdEI3UGEvWGF2Y2FwYllnWjZ2VzJRcE9nekx0b0ZjUUwybE5QMC9tbUJLNnhMVzA1OURwazgwUFpCdms2TmZVeFVkemlRc0EwWkZlZTE1RVg3bjVFdjNFQkt1N1dpYnZobEdiaGhQb3ozMGZVdzFiSndwR29McmkrMlpacTM5c0R3eldESVNTOWw3R2dmU0tBSkVta2IxeHc4S2dCMXJxdG9kNldYYW1pdWx4ZzZvM25JcmdXUTV5MWUwNndjVitnbnVwTTMrTXhRd3JYVWFGUmhsQ0pCOWZhTno0ZXhjOUFZZm9OeGRMOUhxcWVQTGZDWUpOSGNDNHN1eitzR0t2bnF3ckxLc2tWRTNaV1hERjAySFhrb0xCeDlYRWZKSnBCeko2aDBNYlljQnQ5ZmRuMXNLaUxyWUV4V2g5d3dsajh5NGFDY2dxL1dLTnArTGNtSTM3YWttbG5XTk51RTFRKzNCd3FJYlRsZTU0MW0xa3lzSENxcndUSlZxZERzTFFiejlpazRYZEMzVlNZS2dUalVrdVJjY3drS3dQU2xGbGtnbm5aOGJ2bk5mNzlCajdXMSsyM2M5UFhYamtDV0VuR0ZxNXlvd1RqRU5zV0NSNFpkYnBnZnpMOVdSYTZnS3B4VGtlNVN2dE9lV0dlaVVpZGM1MldXNWFHYmNSNThBcWs3M28rc28ySnpReWQ4VDJmdHFSd3J4UjAyZHVEZ05DZXNtWitNWkpDN2ZodWlDTnVUczBqcmJMZSs3aGZ0ZmVYOEx6eG00UEdGNVFna3p3bnkzOUNoNnNRMlRhQit2cHcxUmIyTmRHTC92eURnNzJ4TzhsME9YcXVjdGczQ3VBSnZQbm55cll1eTI4Ry9KS1dkcmdOZTgzSHNrYmEzamwyUlgyby9PM2JrZDJxdTluL1dwN3ozdzF3NXBHWGdUQmhmU1h0bnFMNWthdmMySzgzSGhpRExGSDBBNmgwUjVYNm0xem1GYmZrQTlvVXdPUEt1aFBKSzArV0xqTXA5NlUyV1ArWHU4eEZ3VGNQRWlpdEMyWWxqSW1RTEI0VjlaWkQzWG0zc3JDS1dzVmtkUUQzVTd1aGRPMGZjVnI4cnJVeFplNDRSdm1TeFl3YkVKR1A0SDlpUzVMQkplSnU0VGJhMHdaM01iWStXTCtzRVcyT1lqODFMM3AwdC82SEJORmRkNEtBNzN6YjVOSll6VWU5V0RtM05vTHcyUkxtUGFud1hqYkl4TkRwdnN2bEsvdWRHbGVpZVBocklNVjQyUjVIVVJOVFRESUVGTUN2akVBUk5Rb250MjZHdVJRcGR6NXRlbTJENHFLdlVVNVBwWFo1WWtvUDRtN2doMjVQdW5malBXbmtxK1NOYmlJUHBuWDdpVnl2bGZSTTJPN2dDZ3VKYWlJRUpvMXgwNVB0TDUrUEVJQ21rTmovZjdvdTlyd3diTFN1ZlJUQldMVkI0UC9aeUw0bk56cWVacXNVSkFhdE5Ma1RqUVBUTzZreUtlSTQ4WDNNZkZDU3J0dWVRSUtxUGtzcldEREttU2RYUzVNajc0NEx2MGt1T3c1TWh0TzVyWVMyTFdBeVhnWWcwd1FIYUZaaVlHZnlMeVlxMUV6N1F1UkFsSS9sVktUcXM1cDM0SHgyWG9OOG4zdWlBREdkNU10bHNwTncrWUgzTUFVdVJyUGh0bWdWTVhkV0d4YjdPSHlTWkhRSDVhYTlha3R2NmpodUZHN3JxalcrSm9lU2tnd0plYi9mdmR1WW0yakFHYWppNjI5dmc5dDdoZzJDZkhnTFdoMXRTOGU2YzUyckNCbzdOa0tnbDJub1BIbTlXM0RJUWJYai9ta0tKWFRlRUN1a3dhYzhJZm50ZzJYODFHamx3VThHcVErdHE1OFArL1AvbGd5eTZ0dzRZa0RjaURMSkpuV3F2dmM2MUg0Y3hTb0xEaTAyTnBScEtBTklDVjNYcmhUV2Zjb0I2ck43dVNjelU3d0hidW43cVk2VVJpNnNhVTNDR1JUMUVESExacmdpQWE2dnJ6L0RGTWZZTW92WlhJU2M4VTZPWjI2bGlxTjFwTzYzRDFBODh0dXcvdlAyaDZYZldoOVZGNWR6cjdNclBNdWFrYWxaSEdEWFZQMDRzNjVHSG8zY1MzbXZOdTRUR2pZNXQ1bEswVFBuSXJjMCtCcEFrY2NaYlY5QlZJU1EzSUNDYUVVS0xJaFNXTis4YkExaTZZeU1sMW9XRXhNNS9GNjhlSDBGTDR4STBsWUZ2OUovTEU0cGFBeEVoZHFSZXJxZEVvZk1yQU9HeEY3WktMaHkrMVM0VmUxNkdTMS9DU2w1VlFTR3RWeFc3REdtVDJpRHlkQVZsSjhVNnJCMXJLMnhINGo1Vm5tWGZhK3l6elVRT1NSbUl2L1RWRUpvWHJYek9LdDZFcXFyTFp5NjFvRnZvME5YVUVudUFMa21hc2dPNlI1MlhZTWU1RGN0Z1BsSXBKSkFxZkY2cFZRSUVpM1drSEljdG45anAwVGJkaktQdkJDRXBwdWpkRGVuclA4QUI1QjFBdmN0Qm9vRlY2NmZiUkFOaTl1ZjlHY3FBb3E4L1NGRExPenJkRjM3Y3B6eXRXUHhaN2hVSGtQcGRkdytCemJBWmhTeXJ1TEhyOHBhZytIWEM0TWZGdXgxcFU3V0dVWmpBK0wxaSt3V2VkL3dXcGZOUk56T3d3Rzkrc1p0ejRGQjc5aktZWk1yd3VEbkJSeEVhc01VRnRQRE1kVW0yTGtjM0Q5MS9vTEorUU1OZldwUWt1cW9YY1AveDlrR3c0a0dRbFlnMWZ0dUVHY2x5N3dabFRRbTUwQ05oVm01Myt6Wk05QzdQcWFYWngwNmlyZmlTbmNETlRDRjQ5akRHRFlZVGNRWUh4cmR1TzJ5QW9BMWFCZk1lZnY0TlVTa3JrSjNYbkFsN1JXdDR0bGFRcURqY2duYk9Cck5qSDhWQlhrM0tJeXdBSEZwc2I4Z1k5cENxQy9OMHZURFVkZ3lZS1Fic1lmQ1E4N0F6NHQwREFEU01JNHFrWGoyQkZENzN4c01tRGtRaGFaMkVTcHhqSGdmMUF5Q0EvOU1UR1ppa0lPRjdvS1pmUENETDlQV09pNEJkU3lzcFNmZE5rSkhJREt6SWdSTEdQdGZadTlLQjRBUmo2NVNUYUlqUkhLTE1Ja05KL2VSZkFJaXlPSTh2Mk83Z1NVRDNmQ3R6dGs0amZEZ2t2a0w4Qmw5UWtvSnNLbEhOVmpnOGE1K2tMOTRQcForQis0Z3UweHFjeVFNVm1Vc3ZXMUZSdndQOEJYOUQ0STFZaDViL050WDBIRmZ0QUt0Und3MHlWRUFTcFpaeEtkc0JYQ200dFBPQkVLYnBQM2l4dUpGaDJrQ3BSRmxsajVpQzhiZHFab0Yrb3NzUWVjTUxPNk9oN2lBcGlHSEs3cS9YVkpXVHVDZW1mSjRtZmEvWU5FSE16ekFPK1AyYWhYcE9nRTNSdnZ2cExlZzJNRERyK1JVOGkveENuTU52MUFIWnBvT2wxWnlockovMmNMS1NUdU5FQTRHRCtXRitod1lLOFJPUXZIeThjNVg3cTRyejNwWE0wSmlCRjJxTGFBakpMTGI3enowK05iREcvUWpKQ1h6ZGxnZ0xnalo4L3FGSVpmUFRwTnVJQVZEaU42RlgreTBwYTBmVTdwa2dhVzlyVjJOYUdtak9wZDJZZDlTdU1BZE5MS2xBbWlwM0RVSG9mcWIyMGk2Ry9zQ1l2Y05YS2M3ajNuYmJOOVo1bGY0Z0U1NThYUjFHUFB5REF3N3BtdTRTMHhScmhvejZuUmZncndhT3FPdnhtOFFFVjFlVnJSSHlVK09JOG8wV0pDZllOWk9SS1FoK3htdjBKbkhNNWdHZzJydHg0cUpscnZEMmMwOGc2V25aQWwzWTUvZXVqMzlrN1dNTG1iT0Mrb0tLUlRlRE9OS1BiZndReEdNbjdoSC91ckEvVkdCRGFLSWRHWUQrdkw3dW1sZ21PbldnM2VPd2dUL0lNdXM5REVoaW9jRncvN0Y5a3dyaWFFK2ZEdEJSMmRQQm5Uek9OWXhkRWt3Zm1HS0QwSEpRaFFSVW5HWjZ2SUlyV3NBdUZ0dncxK1NvMmRCRW1kd2EwQTcvd0V4L0ZkMi9YOUhVaXJXWlozaHhkTEVlcndvS3Y0d2RzbmZab2hmdGtvWkptU3VlaXVHVlRjYllWejBoYkcxTUJSeFpXMzZ1b2hDSXlGenJ6K1lBZlBCa0dPRjluZm1KVUZQc2JBNWw1d0dGdVcwbjFEUS81M1JpK0x5VnBIYURvY1craUp2SGQ1a2xhSE5meDNvdlFCN3RnZ1didWUwWm8reFA5NFVqdDk0bGFIT3R4Z1FmU1JJUy9kaDBTNTZyNS9FSkZIU1NjNGN4TVVnZktFOUVvc1J1YVB3ZlFZN21uNmo3dFB5TnNQVEdUbHJNQ1h6R1pWOWhtL013SGY4QmZHd043bTY3UmoxM3FoSGFZZWpvQ1JUclFab05mRDlBbHZTS1U1RllGYzNnejVaOFEveTV2OXJxWkhnSmpMUFdkeXg4L01Ca2RLUEFsNWJiRis2cmZIS2FKS0VwS3E4S3dCMkVSTGlSTTVpa2N2OHJtREVpRlBUTVlwOWZvdGJkOGIrbTU0MnlReWNkeTZXU0hrc2xlekhVSjljT0NjWjBTNS9xWjdpSkdFWFRXbmdheFJ2cTFxdDFPZDVwTUpKU0pPdmljeXQxM2xQWVFYZG9hazUxTHdHM2YzMFAyVlQvaHdsZ2RuUVVXVkdmWHFYTGZvNk1HdWVFUTFDekZCeUVxVzAzNkoxeW1aRnEreWdzUklYRnJTRXdTckpCZHJOS3piVTlKaEo3eVZ6NmIvWFdBOGxsOFl4SUxQaUZ4SklMUlBGZGI3WGw0NWNscHJkZmh1V2FSZFozQ28zZ0dPTmFxSndOSTdSaEZ4S3Y2YVdCZjhkR2JWaGJqZ1B0cTFrS0FkTGZYMVhWZmhHcjA2bHFyK0didTJPQlFVTmN1WjdpQVl6ZldURWkyU2QxcjNxWXNLRFFYRnpXUS9pd09PZldhRlNyQUM5V0k0MDl0Tkdsb3o0ODR0ZmlhSnNRSWlTc1pqS3dzQ1NxZFpvNEl6ZXd2RjBteTFQejhFRFl2QXR4U2FCTjhwQVhacXBITlBjTURTZW1iYlZrNFNCd1lyM0hhTkRGZkZOa1FNNmZuVHNRQ2FQRDNpTitJZy9rZ1hpdGw1ZG9HWlZ5L2Zza00xTTVsWk9KeFF5ZXhvUnBSNFNDa3E1UW1EVHZLZi9jaE1OOWtmS3AxRVlmZUY5RUhoY2h5OXdQTlJyNGwzbStLR1NUTHE4aW90dFV3Ny9OaE5PSGNoS2ttUkFxWjd3QTNlNUdhYXdtaU11ZEZsdkRGNjVBZ0hNMElVSEp0M0NWbnJ4ZS9ZOGoweUJjd0dRbFpCckdnRE9wYm9ta0pZVFovMzZ3T0dXYXNaOHFkSDl3UXZxSEtCT0REcVFPa3ZNS3JpWUlCRnU0K081Y3hiRzJmUUQ4ZHA4QzdYVk50VEY2M0pnbzd1alMyNWlCRjdlSjdOYlQ4NG5uczJIQlRWM2hrZ2Z5cFhHNlYvVlNldkQwVWQ2d0U0SU5Rc0RaZkpqSnlGbGFKbDNrMitGelhLOVFTSFdHSmQrVXpJK2ZMQ0dYa2NOWnNpNXRqcTNyMElxYnQ5bTVPb05GQXRKZ3hwZnVRMC95VDdpU1J1RlFjK05PY1pKVnNxYlJiWENUbFJhNCt6bnUyN3JOUzI5R1E0RFl5VmE0Z2F2NWk0UThYdFUycyszREh6bVVWcmdZckhhSGlUVmJYYVY3dFFjNzhlMXBvU0ZSejdXN1phM3ZjbE5xZXFqbDJML1p1Sm1MOTJJZUtxb2ZtZHhYLzVmem5xZm5YRElKbFFIZEMrUkFOYnZhVjFlaVIwdkM1OHZBWVhzNEZIT1pFN1ppVXdZbVpDWmloWTdjWkgrdXMxbWlyMm1vUXk0dWdYSDRLNVdXU1I2ays5YnJFWStsZ2FNU05sdzJXSTFUSFViMS9WUnRnZWdBRjZGTWZ4T2JWeWJTOWFZM3hVcmNrV0JxUmRXU0w5aSt0cW45LzBOMmJHL1lNWTNvS29oaUx5YTJTcXFhbGNpVmdXYXEyd2NFOFdIc3dQOWlKSzFNaUtsaW43R3RqMGRTYlBHK2tMdVNQT1VkM0hObEU1Q1VWMjQvRHhPVDlyWUZXUEIxZnhnUEpvajdDbSttUTZ5dFNhRFZsZFlLL3hlQndsbVVJS3RBMEdCTHZLUkdkc2VwM2lncFNEbHlxS3Fpc2taaDJrY1BTME9nKzJFc2JqYU1XR3VTeFl1amtERGxUbXJnMDd4WGVuL3liaDFUY2N0YXhDdzNWUklqMXdxMkRlYng5MmJNYjZyODlzOTVNZ3hBYWJ1NllJT3lmNGtDeGlGbWN5c0JFMWNhY2hNZ1FsWnY5NDhsMnJwRU95Rk4xMTJpU09EWjhQNnpHb0hBbWdMYzN3SVA4ZVhUMDQ2bjdYbDIzUzRsK1NUb1N5U2lEdFRNb2xRWG1qVExlUHBobnNBMFZ6aDBZcjEwNCtMNHdIM2k5bVlQd2dvcmloak1PMFZnSnlRcHZmbFdGZmM2b0hWeGw3MTVVczJlNktPbWN6VUsvWjU1QW55TEw2RGU5NkNaeERpRE5kcnNDUUJIUU4xSWJJOWFReDMxbG1jVURQUHQ4L1JQUjVyNXFvUzdCNllwbS9XVmttU25vZ1BoWXJGSlRKaTA4bm1CTm40RVBJVWYzWlR0MWY0TnhoMDFEREJ2bkp2MHRXa1ZYNXBJdkRvTURlVTBzVExyL3MvMm1tNmYwVHJ4cDBQRWNKK0xUTHpxT0xreFlhcEdMdW9GY3d5N0JheGtGUzdYSUduNktRcDROcGswSnIzNGgzRG9Dc2VPajhuaDdiS2ErMExRQWlvbFp3RDNZbGFBRU9XRmtrcnZROW9yRm5KaXBmUm5TL2QxenllL05UZFRNS3lnK2xhTnNzTmpnTGZ3VENuMUpTeUNpeEtRbXFuVS9CNFErdVdseElUYzdPbHpMSGhqYWYvWEtWU2tqcG0yMDg1a0huK3dLOXp2QUdka3I4dkVvdkZCSmtzbFdGVkZXY0NVQWRMUmFLL2wwL2ZZT1g4Z2N2aXRKVkVRT0c0bi9DWEJtTmpqaVQvMlYvRk92QXZRcUtEVHU0RFJHT05BQTNKenNvTGdlMGJocDNDcEJZN0ZnWGpuTkl0ME10VitkVk96R2NVSjF6SU1sdDFQOHJnOVJaQW42ay9XanRDc1VOVDRIUkhvUXE3YUhqTXMwUzRxdTVXVjgvSU5aQ2tyaGdMdWtDSkxlS1pRajR6NHNwaDdJMlZHRVVvTXN3b1o5allkMERtY21LU05HOXMvcEl6N3NqamdSd2JjWVZVdHpNUGFNNmtOYUdiV1k5SjAwQis1eGxWdWQzVmtUTGtXRTdqbERPMHBqSiszYVBTbEdhaXF4ZlgrRXhBbkVOa0dpSW8xQ2lYeHJ1U0liR2FiZGpHTlo3QU9jWFcyVnNsbUFwZ2w0MnFrTHhzRzRPV203R0lkZjdrNlpEZVdibFdGdUl5TU15V3B3UHhzdUJqTDUyYmNybmthaGFrT2U3Q1cydXM3WGRHVzNOaUVzOVhYbm5yemhxem9LS0ZtK1RBTEFPbjBVK3o4bjBoWGN2M0JxVSt4RmduUW14Rk45eG5pbjBsR2RxNmpxRmhCZDRySEI0MWFnMCt6cEdhSGNnalcvOGhvZkZCS2U2SG9COFErbUVTK3drNEN6NEMrZUJDTnBjQ1JtdDlxOVlkeHFpVnZlUDIzWVo3RlZZMEtyMWNxTkhma3dLelJOYVg0UkdTL0JOb3loUVo0SzA2cllzbnJFZU5tQUlYQ1d0ZmFCT3loNnFLOERYY1NzQWxtcWt6aXpOUTFuNGJENGhyandkUDNkMi9MRjZWbHZXTTNJdHRjRmQxdkhVa1NMUzl0TkdQTkhqQzJaajNRMXpTRkloK1dJRndoM0tqVVR6eVBQVmZFK0t0cnVxdGhySmo2TkI2Q0FEcUcxdUY3dWtHQTgzS1kzODhoVFAwYmwycnZNT3dMQ2JSdXl0MlptY3Y3QW9CUVdvU0FpaWZXOEphREN4WURIZXZabCtUOGVYbDNOdkhNaUJqMURaaGZhZk11NDEzeHpMeTQ5Z3J0T01IdlRwbEQrclJXbCtrc3NWK1g0MjBxRGxqYzh2dlZ0ZlNrT1RCMEN0ME9aV0NBdHNzV0dBbWYyYy9IbXFQYmFVeUVmSGhiUk5zd3BRNTVsb2NCTmUzczRuVmcyZFdoVE9oOHZDZFJtMHF4NHcxTTlsSGZlc09WOEJmTkR1M1czUTUweUc3WGorYkFJQmdCdmNFcVVINDZ6cmE2Q3BNa3Y0K2kvSHdHMDVFNGhsNGhTK3NtdE5kdFJicHdFRFIzdTZlUG9oNUNFZUJGT1l1MnVnaFNJSjg0bjJkckl6K0FlUG5HTE1PWUJmMHhBRmpOc1g2UGZDbS85Ry9VWnBPd1d5MTkvRWdBUk5ib25YaVJaN2UvbnIzcnBFQjRZbVI2dTc2cFRJdGV0MTZvZTlmTmNnVWlpVWJYVnRwR2tJUUFKSE5DSnJqSGJxOEFPUERGZkJuLzJoNWpmaEU0VDhJVGhHZ0FPL29kaGxDQUZvK0dpVzhUNElzNlFmbEFmTGxpd3RHQXZLK3FEc05vV3ZuT2RnajVTSHRFdHhsTjNXb0VkZlNydWJ1ZW9Najc2UW9jVThKRHVTVE5ZWnU1Z2J6b1RHUTlpNVZyTzFYMHBxTE9HaG9vOExKSE11cG9KSGFZYnRYRWprZW5qZE1PbGN4OTBncUh3UEh5Qm1vWDR5bUhSZXBuZ0Z0NUk2L01xbEZKTmVYSzBYVS93Y1BwMXd6Q0FGQkNCVmJRZldSR25PZWhzSGF6SFFYSE5HK21jSUd6NmltOVI1eWdpMzBWQlRMYXg3UUxRYUZmOVhySzdnT2w2RFRkMkoxRUk5N2dxN0x1T1NyVzRySlJCM2V0cjQycGpldDMzaDk2RGNLZlMweWxwWVRmR3dZT2JidU0wMVZqZlhjbkxKZU8yT09VSEFUcERaN2c2TU5zeENnaXdPdjlRTHo0TnJTTzlhR0E4d2JkbTJVa1VvVUNlUWpVeWpqb3phbTI5RVpDQllteWNJcUNYZWJNcXNGcWhZZmhCSG9mMXdacjJPV0hCRDd6Q3daZ01URUluVVlOSURVTDlrQ0pvWUF2cTF3akhjR2dNVTlJVXFBTVdPdWxRRXlxc21SQW9oU0loREJtS1NKUm91NlFxY1Y3djBzNDBWRDNpR2J6eVZwL0VXdTRad3lpR2VWWlhxTjNqSzZodVFyN21ZRkE1S091OHdSZjR0UmRwYVhxMUxpQzJBc2ZWYUdtemt2Tlp6Z1cyWG1JMXV4V2RUTTRhMEh5ZFlJK2U5ck93RTd5ZFhlTDlRb3pralhtRllqQlJnNHdqTi9qZHVJWnBLL29HQkJkN3V1SDUydURqN2g0bTgyb2R5OGJyZWNodjRvWENaeFVZWHhObEo3dFg0cHR3RE5hVTNJQktiNWgxY01NS3EwUE1wY3JPc0gvbzNPY1p0L1RGMzY4YzhCMGlZYXgxS3NyQ0R5YXBMelRpcEszb01EbnlpOUFmT0ovYUx4TmJLblhKT0tBSHQxekh1aVh3V0VPTC9iYUd6b25QYWE3dnU1SkNBUkhxaUROLytGb25aUld1TE5KYUUrTkVHY3dyZHYvc2ZxZWZGcWFGQ3Q0L200cUFySTU1a0owZkh5R003SzFEN1RYRTJqdjdWMkgzL1pBK0RGRThDUlpZK1VPSW9RakN3N3poSnhsTzNMUE5LVERDTXM0YklVeFFSZlN5Q1pTbnEyMG5aUisyUWI3VWJpRXpnbkQvUjgzYW03bFphUzZnS0MvaXFlZlpnSnJ6WHl5OUtteEVNKzRMMFA4TDQ1K0lhaUp1OXRiaGFTOHBsNWdSTnp3NU9rYldoTmJaWDZwZlJLanp6UDB1Y1ljT3luUjh0L2EzY2wzTUh0a0NVUm00NmRXUHV0aVZDdHo2RXZHOHhZVFhVN0ozeUR4ZTIrT0xDNXd6ODErck5taEtwdDNLUEdnbTlNTVhNSnpmbVNwY01qS1h5dk5VdmlxelJOOFhEYlRnSXYwTHB0ajJQVC9YTXRiWVorTEZVTFdmR1VyL3pNcHFKSDYzQ05Ta1NQazY2NUpCd2xwOXR5ajlkOEpZS1hhaWY3NlBybmNJYVY5cENvaWhOUzBEbERRSVMxbllIVDJtQzJ2eFNNZjgwemVEOGYvbmRlczF4QURIRUNzZmlqOGtZT1NvK3A4ZFFjOHhzNDBTTXo2M1Zza00xakVkYkdjczBSbFlzbVRWeHFSUmtuR3JzVTVxZVdYNnF4ZUVqY3cxcG1LMk1lRmRrTzY3ZHZxK25samRQbysxMTczVnUxZy9QcnRvQm5wMTVFK3k1L1VlNmxpMGxSL0FYZGp1a3FxakRod0w4eUl6SVYxWkRSRnF0UzEzNWM5SnB6SWFQRE82aEJoQk16UnowaG9JMVhabjBrVUk5eUhpOWlQNG1jWkU0elZ6OE8vdWdJcVN6cVBKQWRTQWI4LzVwV0dDUHliNGY0S1dxYU9tMjBTS2w1bmFZWUNPMUR4VW0vS0Fyak1oZGk2cUVYZnYyTWJxTUE1Y1dNdHpRR2FnYnNZTmhwSEFkVHY3TUZEK0dPQnZIa3pnZHpOOVUwek56bVpUVU83TEs3MEJnc0NNQmNuZ0FKU09vWnFUaFk1STk3c0FwNXN5UUVsTHhSMWFqOXVVbXNjTU5qaVJJUnp3Y1dtdE9UREdBbGJaMy9oSERBOEVZMEdheUo5RFQ1SU1sL2ltam9oK0gwS2Z4L25YMVFOQ3E2aTNicnFVYmVyUENteE9CNkFidTQycnZQMmszOEpZWTlZUFpYSnV3MXp2Q0NIQ0V3TkZ0eUVKeTl6SklNSlVHVWNvV1RrcndSVFo2Q0VpRWJ6MlQvMjMyYTBrK2hoSkc5akhoa2RLWnVDanNrdkM1cGxTU0RuMVlHWFRjSkhneExkWHcyZDZOY1BuVlVZV3EvMm9pMGNYNCszWnVUZFZObmZybGw4a2JtRVlpTndqK3pGRENUVWNuVFBiZU9PbUx5ZWxsMDFFdktnSy96a3R3MWdXSGJRUlNoNm1TTVR2L0VMcHRaYTNwL3FmdE15c1BEdC9tak1kRkR2YTI3M050dnlNZit0NjNxM2I3VUx3ZzAxL0pobVV5VlhtQVJWU0w4bDFBUlpjTFlpSHFueWJXTzVNaWc1WnBkaitRTFRzbHMxdmdrY0tzLzB3OS9uQ3lSaUE1eGVqOFJPM3F4Tm5FVktkMDV2NUUwZEgrZ09GSjlQcG0wU0MybjJSZ1hESnhacWZBR3Z2WUZOOVVCbVJBTVZXbUFXOWNZeXh5ak15L2FCUHdqUEo5ODBYV1NaTTlTdU5HR2QweFduWFhHTXg0UEZhZXBrbTFmNEVXSG1iZEZJWmhMSzFwMklFeXYzTmhmV0oybWQxc3NTcWVNT2JjVjN1d0NkQ01qcjBVek0zMnJRRDJzU0xNZGNGeVJnV0FLbkN5MGdQNEpDbEZ1Y1FYZy9KbWlUL0s0UlBiQkFXMzlIVlhvYVVnQ3hFZjVtVk1zNzFoeWJQQzJDMTNoR2VwbktJMjllN2lvTWZCaGFMSlhKRVk5RE83MXVpT2tpWXpEN1ZIdk51aXo1SC9ORFBhZENCR2ZtUW5PMi9FU0dsVXFONXQ3VDBrZ3hCK3pDRm9McWVpT05yc3NKZHZ2Mnd4Q2VJNEw3M1ltMkkxVVV3WERCTXpidTZCV2ZCbkxtU2hQazhmR1hSV2N1dm5KdGdTcVVFMnpHTU5DMU9KL08wUlhrYnJRNElzQnI3b3IrQ2xUUU9oZm81K3B2Rkg1TStKa0oyaGxrbzMvSzF4TWVjUEthaTZSRHhKQWFaYlpyeUY1S0QvZE1GVzlPWm8rSmhKamVmYTIxc1FGUGpBb2FTWnh5WmRWWlB4QWxRUmpPRlJ0OEdUdjhEQjQ3WnJuYXpEbTJ5UjVaTVRrSWtkSXc0ZU5zYzg3YTBHVldnVVl2QnEyNG5uMTVLeTJVNlFrb3dxYlBqMVdVMXg5YlZQNDc0WkhqeXFHM3BkSUJTUGVselhtUUtRTVc4TSsyak5aZ1lrS1MycG9oa2tIbm5qVVRmUW56YmMwSlFHbFZCY1htRW8zTmo5bGlaTml1NzNVbTJXeE8zMjBBSnViL1ErY1hiV1RKekdhM3N4b0szeU9HYmM5aElnMHduMlBpOUdrVVlXWHY5aG4rR3A1Tlp0QTVrZHFDTXF2NDF4TzNFZFR4S2tlZ2MxejBNYjFFenlvNGJ2L3cvMnQvc3FwTEZOYVVUQVBQdURYa2JWYVNBUEhoY0JGeVJwSWw1NzdHREhsT2dMNEx2bXkrdzFKdVBVSmtHdUVscHE5dlVoR2k3VjNxVktpTVNuSzVQUWdYQkVySGUwR01NelNoWmtPWFpWNWZLVzZSMWR0cHVkdzFneWhQN0Y5NytKUEdyY0htbmRtVlo0R1NXSGdPUEV6WFplQjU0NW1MbStjUk81MlNSeHhIWGJJTDA4VXFoSGk3NjErbXZ6VTQrNzJWYzAvcDVCNHVnZ2hIaklmQ0tpTWlBVFdPdWZMTmV4Tjg0U2M2UDR0K2RFdmh5eTVoZGJaU0lTL0wza0V4ZUZadE9KMmtnVVk3aUZWMjdFa0diTi91MlRieHZCaUlZQjVwRnpuYyttcitPNFZKdkE3QjAwbjVib0tNMDArbUhYNDRLRlBJd1kwalFEUUlUYjhqQ082d1pDS0NOWkdPazBCSVVCbTNhM2hCdHFXS3VRS2J4UHdTbGZORTBtajhiOXo3UU9kYUw1ei83c296ZnVhT3hWN0xkRDZJL3RXbzkwemVzYnBBWkw2Q2ovQ01FSlUvSWFLb2wyN2FJNG5sSGtjbE9SYjZCTFNrV0psMkgwamJvU1dDd0h6VXBmOGtzcFBzZ3A3VFdRY2RVY1JIUXdsOFdZYlpQRzVEUnp2SVJEWHMzbklmdGZzRjBFcWt2K3dtOVhQWFd5ZzFON1ZrYjdiV2VXN1VUKzFFOEJ5UkxzMmlzRG9zeXAyUnEvRmxYaTdsaHZPRUdCenZpM1dSM3ArbVdhUlpONlJIUVFaZDVnQzc0bEx6MEtRSjRIeG1FL3JSV2MweWZvWDkrTVlxbXZYMGEwRGdFWDdacEgybUprbnkwa3k5OTF3K2VXQmlHdXhEUnEzTWFlVnhHeE0wKzRVZCszVkRYclJGZnVOVEIrdCtIVWxlNXdGWGxleUE4MUwwZW1ONzVMNjZvcEVCNlNqMkJBTXY5aEhEMGFaYXVLazJPbHcwR0YxbmRZbHJxZ2JEZmpMSWovRXNOWTFmaW5tb3E5aHI2ZGt2cGJXZGJXY1hLU0dwQS9ZVUtDeEFPWnUxaDhnWmpwQ1VJcWJEbW9iWElUM1lGcFo0enNncmtDOWtHT0hZNEVwR2dRZTBpa29IdE5XRGV5ekNIWlBWNFhsYUFCTHdEZFE0N0tscXVHYmlZUm1lMUM4Z3dvRFp2dGZnYjlINUtrQVVLR0JxZFJmSHBvVVBkbCtERWpWQTVzek51dHFlaE1qZS8zemtEM21GRGZvYTRMallPbXpGNmdzd3RlQ1JUamVOdWdKbWhiOTJ3NUJuSkZMTld6MXpSTlN0ZzhwRlNWakdHNFN4dWJOcDAwdDNXZU5kSnNUUzlpd3hrSUwyN2U1OTRWT3RwaGxTREFnS3ZHVXovSVpiRXUzcFh6NWdkeGRsNHdUWjAvQXFiVnpRbXMyeXp4bGJZNXZQdDhZOWpMa0kyaTZRNlUvMHhPc1cwKzg4b2hObmlpZXkwZ0YxTG9LSmdBM2lLUTFzS04xR3pubkJIN2FTSXp6UForbGJRaldsdUxtb0lZVndwYUcwSmVBMGc2SUV3V1VVanpaTnlRemFmWDhpZ2dPUnoxS1RGUk9LVzdtZ2hNd3Y5WVlpcldHYS8wb0hiVmFyQVloeWk3UVI4WTdTaWlIRHAwa2F5NU5LSXM2SC92aG10MU9wV252VS9kbjUyWC9ucUEyWUxmZlVmOTBHa1U2ZHRjK0VyZlVNMWtCdXVlZWRLOTBrYlF0QmpyWjZoOVVYRlpsSCtCUXIrUWtGV244QlptRnhmZzJFL1QwSE1SQi9idDdqSXl5bEJRQ1lsYVo5aXVkazV5d2tqd2JZT040WGxsNUc4RXhobU9uL0NvbHg1L2JuOURhR3lvWXpnOUd6Tmw0V243OGRWY3VDYnAyYjlMeWZFb2k4QUZTSFJCMGY5YzNQcVhmWjNSTUsvQW9lWUxGK1JTcFVCMC9DOXlCVG1rMFlBdHVRZHFmZEFZZmdIKzg0RXhWMUZLWEZONHRLRWhjTmZjSndUaWpIN29lMVVwME9vdE5QUXFTWmttZ2YwQVR3SUg3QlVnUGpWS05JbTFsdG92SEZsRVB2TVEzMnNMUnp5QkEwOVAyZTE2QXR2UmxTVGdKaDFiVUZhMmVITXlKeEEzSjFFNlo2eENrTW1rQVVYTVFRQUo4MzNxbTlNZVFKa2xUYUt5RGpBY0hUemRxcThEZWQrbGlsL2ZRYUR0N1pQMStUV0RPSnd6SDNQV2FWY3pSUXZWczBQYTJTYnhnSXoxOG51ZXc5WndDd3JQZjVZWm5QY2ExaGV0UFEvRVVYa0JFZDAwc3lPdHp2UGszMERoODNmYmRnZTMxeVVQNkpVbENQRXhEWkhTMmF1MG81U1MwRFVNT1pSNGxVa0daUVpFSjFvNTZ3WXErY2ZoWDE4ZnRvZzU5UGtad21ZNFdCWThOSTd1TmhOekl6VWIzbGtwTnRKdjVtTndOU0NBK3UyMFJNRExob3gwNk50WGt1UHZPeUFvTGZFTTdocGhyYldGSTlVemQ3ZVVIVThObEtzd21PSWxXZEdObS9HUFZjS3BzV0Nkek4rdU9Lem5SRmFmVW9UOGlDU040MnJHT0xHTDJrRWpDS1F3ZmRtNmhrVWIySzFHajFlQ2VzNmpxWjYyd1lUenkzVFlIQU1TV0REQ3BrYlNuTVdkdFhYVkpwTWx6ZVptTkhVZXhJU0JXMkVCWDdkUy9JdE5CT2N4S2ZJWGVZQlduTEh1aTduMXVnZS85VkxqdllsS09HSjkxWHJPUng1aUw1UFJza05USTBqV28zTXptdDA5V2ZBZU9wT0ZoZTREdjdNckJ3NG8ySDlWRWsyeXFGMStOc0NjbUtCL3kycEVoWndLc3cyMjZHamR2b1FBdnRPVEo2QVFHWkpVSnJkdmdRTVNzRDdpRi9mUDQ2Z2g2NWpQNGw2VzBGaUZNWkVaK0FkQmNXeExtYkpRMnlUelZtRXlwWnlKQWhGWi9VbDUva1c5ZFRBV08rYTJvUDVMRGNjSURMRndmZ3RQa0h3T0xLWVdVNHFpNStyRjIyUHAraklKZTlLOUdRQ205eEhLd1VLRU1QbHJqWU1KTTFhc0xOSkFkbHBTMm11eUR0RlpZcTRIZW9raExHTGFqK2xveFhqajdDajI3SE91TzRvY2VFZmp5b0tpeG1mRzZtSytLLzErOUxJeFhaK01Mdk9iZ1J6elJ6MjZvR3VSNWtGaGJEelVSM1FseDBUdXVJVnUrbWlYeDV2U05CRG9Pa1ZLdXhlNkNVcjFtODlGTTQvS1dPL0RqRUp0MlcwYmRGdE4wOHhWVEYxdDZtQkpFdjhxMFYyM3g3cktpck9rdkNnRFcrRnV1Tlloa1lFVkE4QnNTVFBWNjc0eEhwek5FdnJ5VWV6R2V5OTh6N0VrUGFvZkM5c20rZ3ZxL0pDaldiRVZGaWpIOGpOdkhsVlRkY2xHaW5wYjBpYUJOZ05FajBTY2dmOUxCeUNPc2ZhQkI2TGxPbldKMkxMeWRYd2J0UzNpaFlZMXg0ek80dDZNWnhSWHovUytyVUdQZmE0SFo5cHZPUGRXcGwvVVRGT2VFeGFlVE9lcUg5SitUQjFxWWdlblNPUmJweEFrQS9wN2dDS2QwNi9tT1BuYkZOUjZpQWhoWTVESUY4WVViREpZZHVoSjZlS1ZzYitFMWx1UVlLdHg3ejZEZUFPNCt5WCtkYnZjS3FpOEFZNlF6Snl4N25pbWduNCtDZnlIUVMrYlcyemNRS1ZnYkRwTDJhNzdOdkdyUldXQzJ5Rzc4bkN2N2R4OHl4alRRUWJqbVp2bXg5aisyZ1YyU2dRNWQ0MzhtSUZoOHljaXhWODFiOXZ3N1JVN3F4UUNFUjRZMkNBbWhZUHpRZGs2V1ducGtyUWRwSDZPcHVhYUhnUCtOL1dMdk5vOXpCYzZVWHNuWEJUbWJ6eEMrcW5XVStDdkJNNVVOdndnck44NTgvSkttejV2VUdnLzE3bE8zSVJ5d01lMEJ2UEdoMHJoTG9PSnBqZzR2ZVFPdmFkYXZ1Zk5QT1RROUdyRURZdHhDeXViSnljQ0dTbWVDZHludG9BSDQyZVZIZVhmYjR5a2VsWDBGSzYxTDNFTWRFMDM0RHo2cDB4cnlPSE5aazNWYTk5WkdwV2hLRXJ2UEhUYkpiNmdGTHJCRlBmNkdRUVY2bTQ1MVdpMEg1ejVaWXVtSGZtQ3hLQ0NvVjNVb2M3VExuanZBeDkwcUx2TE1UWFBIYisxYUhBMHZsMGxBaTRJR2hlT3ZMcjFTZllCSjIvZXlPTHB4V1RmNUlWY3NIOEpTb1I4RjF2eDg1bjc5Q3NXTkhoVnUySXMxeno0cmpLZHJvN0hObDZaVlpHK1prbGRSOS9lR1JQb0EwV2Jic3ZCdnA5bXdtRHZ1VmRBcWdNamdFbG1NWmg1QnNLV3hKdUVoUW52Qnk5Z0I5QjE5Y3RVc3FCbFhBMi9BcnB6T29YT1JQZ0FGZWFCWU1hc2lXazlLNnRKZ2RPdDJ4SkxyTmpNT0kybTNsL2UwbThnbXRSdFRvN1NORmI3RTRQVWFiWXhmR0trWTFiOXhkYmo0T0srT29TYnBzKzc0QjE0M2pnK3I5ektnZnBCRVI5di9tM2dTWVNwU0FTYm5iMGRubGNUSHN1QTJZZzV3K00wWE5MU2syZHdZUERZOEdSMjVzZmRQcEgzb0RPZ2F2SmxEQkZJYTZHWEFJWEs0VnVtanE2L3U2bHR6ZU4rYUtRa3hNVk9wWHRkclgvdWtBTkNLS2hWbG5PdFpsTjB1b1ZnMXhiMlU0QUZkaXEvU3o1MFVjY1BORFUwc1grREZEQ0RmN1Zpd2d2TnVub0k3T3AzQjdHaGtsbjZORFBSNE9zV1ovYWZXRTh0REJjTUVHeFdWVGQxQUM3SWJWY2c3eWdSWGtCcEVTclRybjZERVBlRmNjRU1nTHJTQ2NET1hHaGs5aEVGUE9kMlJBS3BJem1sb05VWkc5UW96b0hxTHZBdFQ1Y2ZIRzZTUWtoK1J1MElyU0V0R3ZsQVJ5WERTVlZaZURzam5yS1FXY3VSNnQ5V1VDU3JXeFdFN3NGU3ZXNk9JcUlEMXBUTk5wT25jcWIyOXd6YWhhVm1lOGlTM0toL3l3M2tSS3V3YW5aYzJlem1ST0JYcXltdDFZQnpBWnpMTnJrRDZJeDhlajBhc0I3Z2VQaE9wTDBEajUrUm1jWGJMT1grMzl4OHNpb1NmMXN0MG9pNFNnMlUwZDE1Z1c5c09ncS94R3hXb1hMbWR5c2FURm1kQU9vZ0dueXZscXJvckhMeTIvTndSc3ozUSsxeFZTa2tiUVpleTU4dWszK3JZK1RkL0pKZUdtaG1aMlZzTk1YZzFpZWdlYmg4NnY4ZXJOMm5GYmNLQUliTFN5cnpDcWNIOEdiRXY1elkxT1RmZkVmTTQ3Q2RTTWRiSkQzMGRwWEFaRThLZzY2cFhQd3ExdzlHWjZLWFE3WmN3VW5wbWFtNk9ONzlxN3ZvZmpXaEtyczZUZE5iWFBBdmNmV3hoRVJvWHpwNDNDeVJBeEJnZ0ZaMXgzdENjby9YUFFFV0ltZy9qZ3NoM1IyQlB3eEFZQ3drYytCcTQyVDB6cXdISk9pSFdWbndRSjZZYzE0SXdpdWlsUWhZcnZwVHFkNllGa3k4SFhkVHI4cHozRE90ZWE4a25xY1pEYzN5QzBBWkxlZDZ3RDUyMGd5bVpTaUMzS3c0YWdBY3owRFRTMjA4ZzRjSm9SUTZ5TTBBczhmdTVma20xRERVSWFqL0NSZjNBT2QveWJiZTNacnZKTUh4ek5IcVlQMHkwOW84bERXRWl5TkZsU2luMXVGckdKSk5ZVHNaaHNNNFg3Z1orMTZQbFZwMlRjQUZvRENBVXZYb0VTQ2IvRGVQdG9kb3AyY1Z3M3dyai9RMFo0ekhKL3BoN3RQVjBKNFU3UEsrRkd5Q2k0NFJySlQ0QUxKemduTW4vTDBwN0ErS2NRYTZBc1hKM0VFTkhvR0txVVY0cjA3dGVwc09xOUMrczhZVEgrbCtUSGtpekpNZ2gyaTVUV1gwMTlpYitCTU1YdDhPM0drYlAzV25nM3ZFRnBmREsraE9nRFRQZkxOVnJHRmx1dGlQQWJTM0w4NnBjenRXbElHdktySEwzK21jNlY3U3RCc1RjM2ZvaVQwdDhrQ0Eya2kxQXRxL1Z4bFhudzlGWTR5S3g4L3RMMUFvaEs2bUYwOC9hNVdnbUlONkZMRWRrQzJ2ejJaMVlqNERJY2x1TURIUmxoL2VXb1ozSHNwSmEvOXk5cWEzM1BJWW1sVXBQYm5sM2RsdC9BTlp2WjE2OURUZjFUUWFFem9BTCsyS1lRaUVnWWxlL0ZVRG03UXNPYjdoRGFjRWh2YUdFRFpQdWZzOVF6MUFFeUZNY0hwaTVQdFRxaXRaZUN1UzdNTmZsOWRJbmFLOGE2QmROS3R3aG9RMDlHM2tUK2pnSTJlNi90UnBUOU1tYXZKMTZXRDd6dHVVYm9nR0RGblRXblUvVWVmb0k3K2cvWGludlYya0RDaDBWUS9CbXZsQmE3VHkyZmNHaWZIVkhXU1ZCTzEyYUVrUUw2MUJwZEgweEprL1FJcjVqb3RiT0k4QnJ5VXduS1Y3U3NqTVBWcTVTZThldWJQZlJKalZOTXBPbm40MDVLMUxpVWdCODlNeERaNmFWSXkyMjBVa2RIb211L045QjFWUS9lLzdBekF6N2VHQld6cW9KbjlNUC81R3BueUY0UDhGOVgvNENBaVlIVGg3Rm9HYm80dDlmckFLMnU1THZkd0dXRk1EN1hRV3Z5QjBTVDZqQm9seWNUVUhPZG1lQzM0ZkRaZVJMUnh0YWIrdEJhUWloY24zUDhiSVd4d3NGVlM1WDBhZ0pHVWN3RlU5clBnMDZEV1QzemFUQzhMbDJrQWU3Z3k3eVB6ZmlCcEtCNE9URUk1cURVemhrV295SGtnbG9ZbnF1YSszUmwwaTVtYmZlQUovUDUvdHlHbTBsa1FySnZZcWpiUTl0TjBFbWxzdjBQejc1b2ZRMER2WXdTalc0VFRFWElFNm9hYjFlazhXYmV0WGdwMm9PamlSQk4wdm1hWGt0US9TVm9oc2NxVVVXNUFoRDBrc0xZYjlUR3JLTE84ZzNyUmNIbDFNQU1kcmdHN2dJYURCYUJCdGpUUGxyYlNEc1ZhcXN1N29SdTdldWRyYXhyRTdyUDVRU0RRYTE5aXAvSUk1K1J2dkdSSlBsWnB2azRlM0dPRnJXdDhRT3pxSzNvSjFUUDlSVWptaFludm1WNjJIODZFSTg0TU9QRXRNKzErZVV1WnFIRjF4UWd1d0FFeFdRZDBjOWM1RnJqWWJIcXZWV2JTaHNBRXpsSS9OM3BHYmFLZ2M4QVN1aHZFL3hTdlEvcmdPbUVGZHM2RWVZeWVnY1hNd2JaQ0YrellIRDNwNTB0WHp4cFFrQkpjQm5CcFR2N3N1T3dxWVNsSkRuQ3A1OFNRdGlNdVdiSUdFZFpXaU1aNHU4N2xUSXJrYTdMYm5Ib0xKT3F4VkI2SU01WjcxMVMzVmNoUndBUmp0MU05aG1KMlZJSlY3NDErRk1PY1NhSTFyUmlUMDRBTndCQ0NacEs0V0MwaGMzWTRweDh2ZzVKQ2wvWnFsU0g5VEdtR2xMR2haWmV2elpEZXJvcFhvM1REbkcvalRlRVRwVVlCMzBVWi9lejFUS01jTnkrK1F1OEZTK3NrVm9GcnFaYjhad0RGc1pqVGxNV1N3bXJMODBxbHpkK3ZnMlhITm8wTUVBS2czOTg2Q3Y1dVp4b2JzeTIvZWprMFp2RElEWVMzOS9vK2xFRUNhejNWNHpaeUdKT1A1YWl5VkVlMTNCS3ZlMWN1dW1rU2ZuV29VUzdnY3FMdVdtd0tGSzcxTG1IcGxxcyt2M3FrMjBKZGNSRXZNa0ZuaGZJU1F4SjIzYWYxak5FeTBjMjZLSUFZQXZWWUtvT0lpbmFMUnJqZkw5MURrV28xcWUwMEkyam9TWklvclBwbVgweDVJWlY5Qm1nNkFvV0orUTZWMEdHRFA2OVYxRnpZTzhaZzRUU3NYa3NMeW8raURtVnAxRk1PY3VlazNyQ0daNGY5NG40Qm1maUd1V2pnSVRIQmhZNTgwMmk4WlFrcHErS3U0NGpNOFduWWlLWmJlZmpGMjdaS3JLbE9PUFJHK1lTU1hTRjlFQ2N5cnFRS2dFYnlGNVQyeVFJczdNVUhiMG9lbGxGQ1dXanc5RmNUME50SElGbjRzY1c4cGNQOCtGVkhPcnhsby9FU1dUaDN5NSthbGphQlNyeHpBRWVUSFJBeko3bWUxYjhDbzMxSnZMTExmODJDRUJIdEwvcTM1SWQ3WlVsY1ZhU21KMXRrTVlJdnp0QjFhelpwd3RpcVlwcGhTMXRENlVobWtFS05vVXhXYVJMUGtXQjBKd2hIaVZ5MmphZmRaMEdCUVBWODY2eXpYZE1UdFd2c2srNWhJNHF6RkhjVWVJWU5JUmNMMUVtSVJQMWxFQmFuZ1l2b3VjVk5aOTNqUnM1TlVpcTNZV3hwaFdiU0JCQmU4cGpTUldpRkZLd3N0WXpFWVFxSlZpYUFGdUZKQXljaHJORE1lcnIxWG43Mzl2QWRsVzJHRmg0YklLRG1DQkFGU1B6YUFZSnhhNjRCbE54QUN3NllvbVFqZGFFSytOMHFyNW0zeFd1QUZYYUlQeGxZMHlrT2UwWW11cXdkMytBeHBXb1dtWHF3V3djNHBzYU9SVFN0YVlsdmpxS2l6YU9LQTYrSUswYi9OdWFDLzhNa0NkVHlEL3RjNlVwcWVubGxvUHZ6cyt5TTk3ek5NZEFXSFVVYVJjNUROSFhQWEVqSDdITUhWQXNtRGpQc0ErNDkrRWswa3VwS2o1TVB2b1I2TXpqMGd4WnNYOTdsWjlPazFtaEoxYW85KzNjUitycmtuL2R5cnpnWG5qUE1QVTh0Y3h0ZDFtUkJmSzFxenZJOG5uVkdyZVh6NjVObVRDQ1MwRDhkcHdrOEhwWC9UT2Y1Ym12eEMveC9UNVBiai9SS2xVYnpZMFQ2RnU0YTFWTFNJbXlZVTNKK2dDNWVvY1pKV08vZEJRTkJRRU41VHVpcDViazhidW9XbkN6WG1oQUYxc3lJMXo1d3hYd2dmQ1Baa3U0KzFoeThyZFNta0l4aTJIWXVnUWQyS3lRaXF6R09DRlFVRVhWNmN6L09mMTNDNDNJRzNLcDQzMjlPREx3OWJPZkVqbGRUeVNuRlkrU1dBSWxyUml0WXoxMVkvTzV2Zm0zRXFaNHBtekZYaU1mVzRoRUJzRksvejFidDNLY3RmV3ZMY21TKytTeUs4VThlVGZ5N1dPL0p0NVhXWUV6RDE5SDQ4cmVub091SnIyNndjcGwrMHNXbncwUlA0MW9tMDdBM0NhZ1pRSUlnN1NQSklBWkFIS1MwSjJSVmpnbm5MQ2NNQ3ZrSmtLa21RTDBvNFdaZDhIcG1LaTVmVFdHam5tb0xOdnVnREZaeFpGWEZWTUtuaDcxVHFFNHNGS1JBZXFaNWoxcm5EYlNHMWV0dkIxRUVHMDVsT2FqVVJZeTgzVmJVQW1WelM5ZjVmYzVUTUJWQnJrZ2hNc2ladXR6cVZTbzNrdDQ5TkE4cE82ckpZVTVpYm02aitFVVdBU1N4YUtGV0I0bmJYRDJiR0pzdE9ZYjJTUTNZR25ZZ3dVNTkrOEdhcUx2a0MxcVBMWjNaY2MvQWlCbXdubldKTTNqWW1PQ1RhaEdJWmZvbmt3VmlJNit1OUdsQkVGYXc0U29NeWJwekdOL25MNDgrenRoMXNXbWhHektyWGROeC9FdEFVMFIwd1N3eDVBYjV4ZUdQdDd2YXFnR01FbGc0VTIvaUc2SzQwRnlLdjlQZC82NmloMS9sekhqZ0dKbUtZWVYvcGRwcHBpN3d0NzVHSi90RnY3VXMvMEUxR1pZcHJtVFQ0dkMxMU42bnBzYWtJOHF4OUFmV1dMSmJ5TkRiUjlYb3JHZDh2Ynd6TnFia1FFVHRuTjBaamtzNGs4bTAveFNhK25zKzA4NHE2V092T1V6M0ttc0ttRjh5TUdneHFxZCtoVDVyMndldEhDZm9QSGZtNTFtd1hEV0JManBkdGNMNnJiRzN1WnJxSzBxenpCUEV2cnlyZU00TFdiREtpUzluTXpxdTRpVVNrWUpkcy94dm01TlFJaTBCN1Q3NVZzT0hpM09RWVpqMURkM3NIOS9NdDh0a0o3VWZiUUtDVEtWR3lZYjBjK0VldEkyYTFDSVFxWFlGbDVpWXp0cUJKVXZYcEk0YWNBV3BwemVNbjlzWk83VUxIZHB1NXBnQ1BOelB0aTR3OHcrNnB4MlVmZkZCSGFpY29MS2NjeHFvMXFuT2hUbVdkamw2YTRJSHpFakxzVmNuenk5ZDFiWFRabTVGUjNPL3BISkhxc2xpR2FKVUw3Q2lraWtjajVOdmRjZXpiL3ptWGpqMFE1WUxWTmI1Yk4rNnRWUHRwS3llUGVEYWt3a1J3cXU1dkU3RGFUOTZCb25UK2svQmsrM21vQVlCWUhCRnRzYU5sbmYzQXEvVHdDRjFhaU1YaVJMcG1PVC9JajAwVzNoQ0ZBbnBPWmh1cUN0enNEc2ZIOXpYU1B2MTNEWExjQ25QUnNjZjR3VjR1RTFUaENGOExHKzl1NGFRMmdTSG9ZSEhYdVg5eklCdThsV05aS0hiY1R2MVFoTWhtZFFkS090V0twL05oUzRVTWFRSHovUm1aSDhkN000a0VmM0VMeStRUGUvOVFMOFdKMnNGNWdIZTZRQmtmWUc0Mkl5WTUrazlUdmZ5N2ZPemNsMkZWZmQrS244MFlFZ0M1QTN3S1lQai9QbXllektBa3NYV2dyZTE3cndSbnNuU1dvbGRWTFFaVVRpYlBOMG95K2U4MXBmTlJSa2FUbHVJVE1ZV3g2bi9rcjFzeEh1dTRFWTNqNXhvcDQ5ZjlYVVlaWWFCbnJmOVQ0NmQyY0lRM3QyZmxsZEJmY3lnRUljdUFIVkdxTlJOQmFwZlEwOVpBcll4VlFhbktRQzBiM3hCSmJ6dkczdVZaUlU4c29YR1lxRXh2MU84Vis0ZS9zYSt6WitkVjltbUtDbDZwZmZhTDIyQWh3WGtPV0pzY0h4WnZKVzJyTDVQSzh3MUJBVUNoK21oMlovTGZvTTdrL3Q3M2haRWtIYW00ampOaW13Zkl2WHVRRGczZUVPczNyaDVRd3p1eW1MRnRUdFE1ZEFabklMTE9VamVwRytnbkhRTngrMCt4dnRsbjFrVi9UK01SdGxSUStKNVR2RktzUFYrZ1YxSkhieXJJdm5zR2g1Tlg4Si9YaFNEVHNFWGs4WWVpS3drU1dKRkFmdnFwUmkzQ1pUaHZLSkt4b2h4NmdkNE1yRUd3bUxSN2taUzJpRXdXR29VYVljQXMyWjFMOXJRbW9kMUI2bGgxNmFJSTdGZC9SUFFCNEx1R2xkT0p5WGlSdkJnRFFMbHdVY0laREtnOXVwNkJmMHdGczA5ZXZ6b0o5TFdvUTZkOXQzNUJHeDQ4alFYL1kwYktjMnlEUGFya3dMVzFUcWJnYlVWRmRtQzdjeldWd1JldXZjUXdzVlh2Vmw1VkhwZ1NLUzZISDBEMjBQczI0dFhnQUVYNmxhL2ptL3NDbW5OZ20yRmhSb2NmVy8yclAwY3FNSnVoc3EvS0pmRGFGSVVzdkdyNjd3VFAxK0hBeUhENU1wdjZkYnozMUg1dzhVUHRSRDJ4b0VnM2RVRVIrcmYvWVZ3aU14c09WNkJNUS94NXBycWhBb3pzeUpDYW43THpqNFZ0RTdIelI0SVE1Rk1SYWpsVFpaVXh1MlVNY0RUcE9VdUJUUUZoMDVhY3owekNIbldHRWZDb2g2QkJadEFFN0cyUU85ck9CTkluRG9GL1RIU21qUXhLcnZZQTdsM2llWHNIUERlYkhWWGxLTEYvcmJ6VndqNEp3aCttN3hBck1BS3RlQVRUVTBKT2ZDaEl6Q041aXpnU2RGWXc3OE5uYVROeGlCTFp4L3ZoZy9jaGpTMkk1aFJ1dE80WEV2WThHeG9FOVVtV2VqTzRDZUZjTzBPRjJsTG1FQ2QxMmNCL0hCbzkrYmVrbk93RC9Db0ZrSlZIamNvN2FFQkxvWDV3Z3cvOUZ0d1hEeFJzc2lhdHpLOEJRVXk2RGNkcGZQRmFuRUtJVGdxUWFvVWdtLzIzNEwyVVQzMVZpb3ZqVFJuK3hZMHp2Z3JJR3pvcFJhdnhILzkxRU5CY1FvK3Z4dDlZRjY3TlF4bzJuTUVmUmlWRGZmUmdxMW9yZXQwWkxTY1FuNmExVldPYTZBeEI1MHRsTHB0KzRDSHZHQnI2cTBhckVaZ3A5NzlHK2t2cG9EUDg0R2MxZXdtbitCUlg1UGtjbGp6ZzRRWWY2dHBYYms2Qkw4NThtUk1xSkJZWHlXU0FyYkpvN3dycTBlOFZOWGZFL2hHUE81aHdCa3BYbUNRaEpBNUUvTnpBMS9aZWRoT0luOGt0TGJkMHQxT0diUGQ3UDRzN3J0cEo5dlpSNS9ORlk5S3ZZeXVNNm1SWm9QeUt6OTFiN0hpTjR3ZXJPdFBlL21pdE5lYWhwQWhYcVFuWk1zREZwc0pFNFpYVGU5RGpRalo3bHhJbm4xdUs4L21RZmRMaHBlNVNTNjU4dkpucE84NFJINnlSOXA4aFA0M2VKMDJ4OUlvUmpTZ21jRUVDMjlyTnJzejF0VitWbEhsK0lySkZwdjRrbXlwTTNoWEpXbEF6ZlpRb1lBRjd2NTBKbjg3bE03eVViTkg5ajdHcS9XZlNnSFBPekJvazRzaFhkK21OdExIYWdrUE5YQ2hlRVJSVmJ6Wjdad2twL1hqTzE0TllSQm5SQ2tWaGpmUlM1RXpkOWUzWVJEMFYvRU9QdU1BZmJDMEgwRlh2V3BZMlJ1d1Nqb08yTzg5Snh5bWdwMjdRUk1KakxLck5EeG10NHV1VXJkVFYyc1llUzhja0IwM3ZobllwOSsvYUxNOGVoaE45TFpHVUszQlV3Y2ZnbE41Q0ZkcUxYWktLYnBwelJhZ0tNWHlSbUtCRk54U3JBZzVBNUtoNU91M2Y0N2tCVkRCWkRndEdBOGk5dUpGTkpQWkxXZXJwbHp2T1JTSW5VTXJScW5wRHg4NDFiZjlsa092YzBxWUx6eWQ0cWIrc1IvcHBkSGs0TGJGRkI5V2lhaE4wYkpmVkFtWDJzR283UW1UNXNIYnFnWnNBTkVxYjdPVmtUb2I0S0k2UVUzcUNUVG1zUEU1UE9mOWRvMW1zcWtjSjZyZkgwdVBSVDVwTGVVcWVkamwxZ21OY3lwam5CRldJcHNZK3VjaXVaZzZObTE1c1hhVXVFTFVxUktEcmxyeHJIZW9tZCtPOTRGbldIVGZBL21lSVE5Z2YzSVVSZXpsVFR5ekY3L3Q3a3dmOHg2RmFKanVFNHlkVEZXa3o5MXpBSExzc09CRTFaNWIvVUxqc2d1RFlKNC85YW9yUFQxUEFmN1V6T0JpTlpBeEZnZ1h1K1h6cjdqcG1MTWpvVHF0ZGNSRS9GRUMwSktKZUJoYmx6cStiN0RVdnFTY2pLZ1pGd2FRTVExRDdWN0RFM0E0cUl6a0haWDZkU1k4YnZHd2NaVjlOZTJxRFZDMVZMSEt0YkJWdWV3NFZsYTdtSE5iR3lWNmYwYzEzbXRVZE1HeDNWQ3MxeVlqd1ozYWdlcTFSK3JlWEN6T3pMNVpaZlBYam00ZEJkU05Lc0liakhFT0xjTEZ1WHBtZkx4ZzdSTVBJZUNxZkhlTWlEZE9Gbjh6UjIyRUZEeUI2QUJMcHdPOW1yNVhTd09Mb0FOa3VrQ1hYUTNWQTkxK2JmL25lcUpqZS9pTGN2SDF1Wm0yaUt1d3NwTTBBaFZZZmhrVzF4ank0YVc1S2tqcEJuWFFqWitjSUZFVWJ3R1JZMzhML0NiczJhbHBQdjJ1TjJ5bVlzTGNpRDRJZ1ZPREZqTUhUWkw4UGVHNms1TC96UnB5bVlrNE83eXF5cDUrM3pjdnlnTWVJeVp4VGtxVzVPOWV1c093Q2VMdE9DUm5EU0FpZlRtQktoUW9HdCsvMjVYMG1FcTJzR050dWZZMnRsVmtGc0hvRFdTWFlWUGZkTnBUNjEwU2pmZHYvZEZlVXhXbTFaeHRLaXZjVnE1M0hnSVhQRVBubGRVQlZBa2hPYU5PWTlkR1FxUmhlaEdEcWNzVDJnbHpHZXRYZVlBQTV2VjJ4a3Q3V0JkQkp3ZTBJT3pBSTgrNGQyUStaM0JVZlBHN2VVSk12U05BRnUxU1owUkZOWUlmbkhyY0ZCeXQ1WXNPNEV6d2dTSVlnOFBJdVJPSVltMEgxL282Nmd1eVp0SVJlYzN1MkxuSEVtZXREb1NZdlBZZnJLdDBPMndEZkxxeVBUUG95d2U5Q29jdzVZMFNHWVNnUVdxSGVJVzBYMk5oa09BemVqZDNrVzBMRWg1bE1UeUZmVWwvSml6OG5pdW9VWjFNRDlZK0F5SnVwcHVndis3UlJQSlExQ3JOZE1ueXQ0eVE1Qi9XWTFTZlR0UUhGajVjZ3Z5STg5TkVLaTlOSTA4VXRGdzZRNEZkcWZZdEV4emNFZE5lcXFSUmhzd2dOS0dWcVgyYXdSc0ZnQkxQY1ZzUXhxSWp2QVhwUGVPVXVZcENLNkc0alZjQy9zRjg3WWtjUXZZQ1l2MHFOODI0UHIvMVBTcmhvNmgvUEtycmZpSEtBTyt6RHJDVnpCYThCblpnMVY1cjVwZTJBNFY1NitKTXI3OHRlTWpZcGE0YUVEWmRqamdNaXp0VVhIL0huckFoSWljMm9uUFBtVHRLQm9vWHFLdlVnRncrWFZsWCtqeGo4VFI5bmlWcVVValVQcWN6cUd6S0o1NmQ2Sy9DV0R6M3NoRjFxYUF4YWhPaldtdHkyNE1mYjNDanhJNW1aYktDZ3BlWnI2dG5ibkE2Slg5UjNMbnZnRDJ2Q0x2QnhFNVJmUmZYR0x0U2NRMjdBdEN0QkpSQ2Z3aFhtUmdjL01mUHJWZ2FCT0UyeFlLS2tNZXlwSGx1bitzMmRLL1FtRElvTmdISzFBMUdRY1c3VGFIVndZZWRWRnJDME9oanBGa0xpUU1kUEdpZXNhVGxpTTVUL0VJUmVDQ3VBRDQxc2k5NTBSYVRMTnJqSnRFU0UrRm43UG5YRGhxd0ZJNlVXUnRzaGZZY1hTZE1TYnAwNzBpRUNFSGZ2UFNGVmV6WFUzZXR3dUVzTjNLSWVlbE5HNjBjZElBdElEUVdwaytKbFA4N0d6Lzd3cmZyeENiMUN5TmxyemFXNkhJemYvbm50NVZhRWtXa0dMcHViQXdNTmxZb2FXaE9reVcxdTl2Rjk4VXZMc3MxSkwrVWZDUlFaMm53MVFaYm95ZHo5aGlJMWZRN0lmdTM2TTJJbkkvTi9xcVg3cFdTNkNRbFFpRmtEQmxBeGQ5OEJEL3lFQzh0UTVGTy9EaDJ1bk9pZlNUeU8rdUxWZkRNUG9rdS9UYStBb3ozZ2ZnalFVTkI4NysvWGM0VHRWTXZEcTZQamRDcHJHUE44S3NuRitwaHdSMmdjWW9jM1Q3V1lIL3BKc1lsS2RMWWViUDNZN0pQYUlZeGE5Qlp1RGpaZWxZdGZMYk5uRVhuWjVnU24vRU9wbHozOFFGK0dOZWFsZDU4RHBJMTNFQSttczhkSmJEZW5jZVk5NzJ2TGhIblFaUWtDengzVnBuakNEWEJrOTgreW5EQ005cnltR09RbkE0TEp4cjQwRzJ0RWtjRyt6Z1ZMeHZBczZWSXN5Z2VmMGNvb3Q0RDhkRGNDV3V4YWEzK0czbnlUcE03d0psZFZDSWdFSzFzWUVEcy8xQzdNV3NPT2hCWnpPQXNQL1VVcjJQSDJmbzljVU5ZN0d2N1RBN2JhN0k4dk91YXdpMktEMVd3RXFYcTVpYUduNWdUbU1sVG9WeG1xd2FobXJOZnA1blQ4c2Q0NkJIN1Fsb2UwNW9qZG11c21KOUV5UXVKVmpkTW0zSll6UG4xK1cxREZaT0NRaTY0WkNNUTl0bkdOVEk3cjBKZlBvNHNqU0pPT1pvU0hzOEFxZDNoVktXUmhibitDd2RmWXRNWE53Zm1zU1k3RjRTaWkwOFpibTc0WFpld3JoQStLdzRzV2xhVk1COFI4SFY0QmR0ZHVyNEdWZFdjOFZSUmY4cUlNbzJGRW5VVHpPUDNoajBUUzNoY3JmSFI2N2xPV1Jvc0w2WHR5Tm1ZMlFzaFNZNFRSMHBzNUhIZ1JYaHcySUxYQWZtVUFqOGtVTU53MTRJVEFqY0NwazlXOUdDT0ZYVWJ6VG00aVV0NXJBaHZ0NElva08zdzJzaWdGYlNUWWVuSmU1OXV1dlNISEQxY1lROEF4ZSt0c1dxdlpCMjhjUjNZSnc5VlJOa0pnNlhuaWk1dHZUTzc1NENvcDFwVXRhUGR4S0UvY0xkMFY4bDI4V2ZCUElkRStPc1ZkNjdoTEJkMlhJelg0Mno4RUxwcFZtOU1FZllhYzhCRnExQWhRRC82dENRY1I0M2F2d2RlYytqSDRYT2Z1ak5vVCtoWU53d2Q2L1hLSHQ5YjV1OHVWaDJsMVJjUlhNT3NHVlBXYWNSSVUxcm4zWnNzcDZydUFITXZBRUNsV0c1aU0wM3I5Mk9RNGFFM2dIVjVRdlpwMUJXTDh0OUgwcjBzQkdieVc2S0QrK1Y0WUkzRGtISzZmWit2dmJsK0J5M3RpaGV0eXVwNHlSZ0dmQUtaTENHelNMVXA3bDZBbGJscU9uUTBOSkdIb1ZLNlpnL0t6ZUJ0TXNhK1cxeU84K3pFdHdSNkVBc3hJdWVkVXpzM2JSRVZaMXpOcnJFekpIQ2Q2WVhTZDZHVFVtK3VzNmtkY1A3cjhoR283UnU0eWs5NWdWa3kxYzVYZml0MmpmMzJqTk04NEI3dm5lYngwVzBjOGZHcUZPeTJ4ZExIZmJDRXk5a2NGR2x4SXJpNGFvK1p4eExhL0VGNkRBV2lVbmh6SUlMMnN1RjA3VUUrUFF0eWpvNTUxbTBnZGpwU0hkQ05zOTQrZnhlM2VnRkd1RllwMUVORVVnSjRHelU4eGtZZGdyT1ZkVDJEQiswb09icERFRjVpUWRXcjZGNWtTNXVocXVkV2lLNUlMTkhMM3hESENISUVPUDhFZnhRWkN3TGluZmdXNFZqUDdzckorTTBzb0hmQUh3M2tCSjRkRlZjZTBmYWw2RTRBa2lDREd6RHVZZnpYbHBObXk3cjBPaFdLZm9CTHRXUXhxVmliaXZOTDA1Z3dIakNsaHhXT3EydnF1Qk9nNFBNMTdLSGpzQzdWVnpPTjh4SzRmVzZNMDd6cVZOUVZPQlhIbDFkbHJCTlNVcytIVS9vZTZlQ0NLS1RVbEd0SmtmWW1QdEVxL0Z4UDJsTmRrVHhZcUY3YnQ0cTc2cjNJNWREb2NqdTVTMjhqTlZNNitIclB4N0VyajRlM25DdGVuSjc0ZWh2TUNPZkFRbkxZN0NiditSKzBTMlNQd0RqMGRUd1RMMG1ZSm5zeXdEaXloZUlqaGhDK0xWL3AvV1I3K2hlaDZ4THZrb0tUbE93bFRUS0ZJSDRoUnYwSDR3dXBlVHV6a2lGVDEwTU9EUkEwZ3JscGJEQ1pZMVdIOExYZHZYU1d4bVBvcnViMDhwL3BXaWRVZkFta25JUER2ZUcxclJ0blc1bmZLOWFTR0ZtbFdMR0RSNk1DQ2ZyMSttS29PWG81dmZSYWRHTEFLL0h5YnFDMjZ1a2Q3T2daYkNPbnU2L2ZTZkFjSWVja3REYlBzMi9teDZHVnBxb3FDOWZmV1hWVEdXK2hpam9HTzdpSWlSaXh6Z3JxbWRDakh6cDgzOFUwbjRsSGZ6L0hvZy9SZ01mcTdEbEZ2TzQvdGN3dXo4ZW5CbytvMEJvdHNNNXVqVzhjVUgxWTl0SHRoZU43NlVBdUFVcFNoVFBDN2Q0bTNwMEFPK1hIZnlYUmpyTFJHNTZXN2NqR09CVG9jUXN2cStVUm9Na284bXcwQ0tZQmxrWVRIamlJMjVpeE1xYXFrTkxPZmE3Rk82UXNENnBrM2NXQmJhT1h2UzJNdmRZVmVmK3BFT3lrTnZXclRDSUNCaDF6VFhjMmE4aDkrdUMzTXJjbFVuSC9IMlAxWUhSL2IwaHl2RklrUG1OMlZKWFNvcllNUFVRM0R6eHFGdTkzbmxVSGJKOXZNU0R2RGtZWVhQMUpEZnRvWWt3cDllUnh1SUo3SDd0VmJCUEREMjhWeERSTzBteFgrclFKLzZrVnhpQTVFU0h0Z2hJRkpnTzdpMmZ5Z1R3K1hRemRHeHZkNll5eHVJUG9hM1VXSThVbHdUcVVaRDNnUUlSUXNFUUwycm5oWGx3WVY0bWtyWTBZU3V6d25xQjhLblNoSTk2RExmYmlybFAxSXRoMFJPOEJqbExJd0pnbExpTmJhV05oNXlwL0dpTWMwc2lYWjZ0RitXY0NhN0R0WVpVRTNtZSs3aDZmT0JOVlFkNnIxZ3kvWWEzWGs3Y0VSeVZ4N0kyMnZaNWFLSWxldC9va0NyTWJ2NVN0bGgvRjBlaDc5MzNKMDBsbk5MRWo0ajNLQXV1YXoyOEd6NXc2SHVPVVhJbkhaK001WUgyMCtrZko2ajFVVnpYejhsQklIeUpXZkRzbkN1YWs5cDAreWVNSUh1NzFnOExHbk9QWlptTTg1aTFvM3JUVGE3QitreDdYWnNwUmQ5eE94azY3RE42MzdxSlVKQVNoemtUWkRtNTEwb3pSZVRjdGl2eTJHcm5rSk1xdGw1bmRpdjd6bnhOcWVTdFAxa0tnNndKYWdhTmp6amQ0QVdhTGl3ZUFlZnhwTmtESWJ6TXp3T2RNZyt0R29rZzV4cGp2b3NaZzQzbm9JYkI2YndrS3JYQVJxNm0xMEZhM0dSb2N5aFRPS29hMCtValdwSGczM0hJZ2RVaEU1SGFQaXhSUDJkL2xicEdMM0VSQ3hNRWlkMllEUXVJWVpoR1JOMjNQSUZrQ2hoY3ZIZ3B4ZzRlaU9iTEJrZ3RMU3UzdCs3STRmcXlyNDFPREkzODhpWDJLZ2hHVGhnRTNyMEk1MmxMamU5K0ZuU2NTWm0xSzRuSlBOZkQ0R3VyR2RaeGhSeXRCTVNCV2ZYL3k5YXF2UEpYSXNNVjRjOTh3TVZ6MzhJTEwwZ3NyY1lYWnppaEdFNXZBWFJvcE1XN2d5MXpoWllrVytRT2EzUmNFd2ltc0I2dmxLTFFRcVVEcmZ1TTBpSTd5VzhIZTB2aDB0RDBQV3llVWdITkpBMVQ4VmsvV2wrQ3RQb3M1ZjBKY3FudENESEpDc2h4MGcvU3V3QStUaGtlMnl3dlBLcGVRSFNXaTg2eGFzV0xHUFo5aXRSS0V1TFB5dE84NjVBZzJCYzFrcllqcHZvZ2VlK1NyWkNtVWI4T2lWQVFaa1lrUEEyWjcwRDh5Q3NHQ2M0RzRuNVFJdUZhTmI4UVdLQXFSNHh4WDFQQVQyNXVHYUE1NmxFV1JsZDQxQzcyamw1cTlCUkVUcGVROGdSTktjWTN6ck1zcE9tc09RRm1ybDhtZlh6eWNNQWU4QkhMVmNuY1F6clRITHRzTElVeHFya2QxVnpKVDF4NUJJVHF5VVZmNDBvZXRMd1hFQkltMDl1ajVHSmQzUEU5YTIxT1A4Z21BRDNOMTE2YjA4MElqeXNyWC9CZy83bzJmU29Ia0RIcjZJdC9RMnA3b1BJV0dWNWQ5WDZFTVpSdmFldUdsdXhUOEl4U09xNWRvK0dFNFAweElNSDdwR1J1b0R1eUZjZStNMXJUYTNDTFMzdnBPb0ErUzhwV0paa0t2QjI5S3M4YmdoQkgrc3J4Q3c5T1h2MERwdEFobkJUYmdESUYySkpzeVNaQ2NGcmVSbFZOOVVLcUp2Z2FKdTRWR25IemIvQlNKK2dLT3U2dnhxWmpCWkdsSitHRTVaVnZmVUtBVGtpL0wwQk5MaTZCbnk2eW1JRnNjN0owQ0gzUzFmOGZJTE9CdlFuWE1NMWtadklvRzNuSHhtS1FCUVVQODJBazZaRWhmYWtkTjRpbmsydUU1Y2lCWjZtWWFCS09udEd3QWg1UzU5V0thVlZ0VS9tZGYxaDNjTnlSZDMxN01jdXNQRjFsWDFIMFRjVkV6aldLUi84NUt0RXBOREhHVE5BbTQ5MlMwdDY1WmhtVk9oMjkyclE4THlOUnh2aWZ5TlB2TUd0S24yS3hqM1g1N0dMcVhEQXA4clRzVUFRZGg5N1p5MUFVMVZ0SDFJNGN4VVl1MEhYem5iRFBQVDhPTDBzUlNUbTBNcVp3QzF0RzM5MFRrR2NXckZUM0llS0dBQ2JQRWpwcjRMcWdKZm9oTW1CZ1BXeDJIZmtXRUtSOWp6Q1J6cjZwWkZGdjZCaFBWV0hsQTFTcG52V2hEejZ3eUVWc2JIREdnMzBVR3BYOWFOSjBpRGFtVk9sU01heHVsY2Z1ZHRjdTR6c3I3N0xRdzdHb051MnJnSjUzYTZ3QlU4VzlVckpLTVBlRENRQi9LbHMxWlBEd2h3OWJLMWM2SG52TUF2c0VGUWRlNlVUb1BVRkNmUDBIa3BRYUROY1NFYkYwU3dzcFdXRXhUUGNIVERmN1hXN2R1ckNrVm1qOERuNEVyaURZT1lxSmFibGgvckJ6eW0zVlExZ2V3dnFMS1VQOGhvUVQzUW1jODFWK2EwY3d2Z1o1Y1NTU29oaUZhdnBvazRGYjFRT3J3NmtPeVNKQVJNWXZqYktubWN5TjZMR3pHcGhkWGRDbnFoVllmUmR4ekg2NXZrR2pyR3VGVXRhL2NSL0NaS2Vkb2QyT0l0RDloTTJyZ1Z0a1dUaVpuY1FsaU9ndkZPR1didHVEcjhwSktrYTA1ZERFVWowWFFYUUd0Wi9nQjJxenVjNXhnS1FkamVsYlA3YTZEMFF6aS94ZlVVbThJRUp3ZDQzZ0dTaUZwM0ZXcGxmeTVuTU1kbnY2VkdCUDNEalNqd0lqbENITDQvRFhTZkxrMXVzWS9KZ0xWUDY3Ukx0dFpHMUJpT2xIY1Rxejc1ckZjZjVEQWF5Zjd6eHVzZmllVTVtSzh3MWRtNWRSMUF4VVAydnZ4Zm5XdHBSeXNJR3lEc0dIN3kxczl5VlJXOUFaOTZORHhPZ3JnbFVTbDhQS01YNXQrbkUyeEQyUjJ1QitxbXRJdDNHVWNEUWxyK09uR1ZiSWtOYklST0kwR2Zyemk5RjJ1RzRQdHBIT0RaNFJKd2k4SHAveWg3RzRwb1kvaUVjMi9YTTVyUXNrYVR0V3JFd2ZoTkJETG1BL0JmdGdyWSsva0xORmR3bUJzNkNnWWFDM2kxUjVqaTVkZUV5SFVWMGp4T2FQdjdPQlBXVUFmZVU2dEhFS1FwZ3RJNzVtZXVCZnZPdmNwMWxFaEZNcENacXNhakoza042dlI1TWIzZG9ZVGdHZzIxcXBnT09KMm5Fd3REUG53dFhOUkFSdlc5VmJrRGlPN25PTVFKNHQ5U2ZTa0dVQmQrRjZ4OFhGTjhwWGFCM2t0RUI1elppdlRFS0FKZnNHeFY1SWVYOVdvK2NlNVlUeHJFUHJzQWZrVEgzUW8xNFFpSnRRS1dEeGt0Rml3QkVoNndmcERwOVRDbWZwQTVKbE1ONEVaZEwyaDZ4RElqd1cybHlSK01OKzRkL1pUNHl5V3ZXci8wRTZRQzMxWFBUMHQzNGREQWVLZGVaY2EyYnNQWHE1eWFSSUhScDR3c25vbTFiWHlHSC8zbGxjTStHNlRPMWpVMmwzcHQyaktIT1RkSlBkWjd4MEZMclhMcmN5eHd5MlJXSnpHMGZWbEJaZVNZaXl2V3Mrb3J2NWxFaXBlb0YrU09pZ0x3V1FNZ3YvZlZITTNCWTFKOUZrOWg3UXd3VkZ5elZOK2w3UloxVlhCMmV2OGY3U0xJdUs2WVFkeEoyMWJZYmFFdXp0VlIxTGFmdCtSQm9DUHVkZ2l4M2xwMlhHQjdYa2pqV3JkQWZkZUJ2WnVSSHBNWXR6Unc5UUY1eGpIbTdRekRyTjhOa0xDYi9KaXFDajZEcWdkOVE3bmNiNTNEMjlBWE94OVNwTEVVZVdjS3dxdG5oL2lxQ2hiczVlbVdkc3JZY1ErSjEyM2Eydy94aGpCNlI1elBDb0tjVi9rNjQ2dng0U0UxQWRVVjZrZ1hlYURiY0ErMERWeDdrdENPazhpSkhHMTdkc09CaXRsVDRxS2tPY2ZRdEZUTVo4d2FqcTgxY1paWDBaWE9GV0luZ1lMUkViZ2ZsL05ZTmN6a05lL3Y2N1A1UXg5aUJkV0I3anZiN1U2bXpZNTNZRm02TXpOa3gwT21Rd0ZrTkZVR0ZJSjNLb0Q2RzZMbEs5VVNERWswMUx0Y1h4VWpPck5WcVJ5NzZ0eFpSbW5ia1Iyc2dZVTNmNG5DaVgrOGlqVE9SMXdzQm44YVY3UktKWVJINURiRXk4Zm9wNk04NzV3RTFYQU5RRWlaZS95bk9HK0Q2elRLSnVCZHluTDMvNEl5Q1VyNmF1czl3d1RXVElXNUZEcCs1MFAxeUFpd0tnZnpacExFcE5BU1FsbDU1U0lSY1c4UFJUdG5SZWZYLzEzUDEzZWYveERGVkI3OHJ0Nk40SmJhcGN5aGpFaFZYeWJWWjRoMktxZDVRRExIY2ZKejlpY0k1aXNjamJQdWJZanI3L1BXMnFMMmwrRzRIVUlSU3pIS1VuTWdKOW1nd2dEeklUaXVDOXkvQ3BPY0J0ZGhEMVJEU2lPeTY3Q3JDdEFSYzE0TW90OTRpZTVnZnZFOGNZUWliNXZ5cUtGRkJqa3pFSkNBaHdXVVFpYi9ZcE5KUUpxd3llbHIrSDBKcDNuaEZ3SkVnL2lBK2JCYUl5d2tYbkJmVlVrTGkvSUV2ZE80TllRNFc1REM3RVdDNzExVmJnQ1VLSFNlRXFveUVVZTJDSTZPZWp0STQvMTF0UGx1bTJ1elJSb3RId01nN1dMUmd3R3FhZ0FzLzRZWStMUmlEaDhqWjc0NVRkcDFpSGJPY0N0ZURRdE1JSUE4NkxBckxPeGJ4b1VSNDEvMFRQT2JRejJyaDhMR1g0ZkJLVXNJaXFJT2lYU0VQTVdjYUhsUUJ3Tlp5bURYYU5IS1dVNTFYa2p4TlZNTFhtaUxLVUFzbXdYdmVuNTlOL0E4WCt1WHdTZWRsclh6NFpVOE0yUTJYMmtHa2hZUTUwT0tuQ3k2YWpPUXB1bXBjZWRuY3Z3OURNRHJDL3NUOU5SNFJEMTRvU21FOGlZTnA3QjJEZVBtckQ1a0hWL2VHQzhjWmlxOUtML0hzM2svSHZIKzdoNW5yWHNPenFNZUZ2QXAvemdZSHExRUhlMkErYjkxV2E4OFZ6Tkl4UTE1VHl5TkdIV3ZFaWpJWVIzd0Ywa1ZURFhyWFZXU0tCVC9aTkNjY01jS0xkazFlRTR3V0hTNW1aS1lVYnFWcVZrdXZYbm95dGhXSlNuWGQ5aWh4Q0dRWVFGaW9abWxVMWxBaFd5L0psY0VCZ3krWlhKVm5zaVZLaXB0VUtWZU85L01RV1RUL1VVSEEyQ2x4cU82NXZQNlRGT20yb0xFMTJBTTl4QzZpRUFtTTF0aGlvdjA4VjBtZTZKVTNKM3dOL3UyR3Z1YWx2cGRlNGI3bi9yM1hjWGRZRjA1UVd6MjZUQzl4OENHRithbFEzMVoraUdSM3F5bU1Td0N0cWRvak5KY25sR2ttQ05IWGVsdzI1dkFKVmFodzRkdEp6Zk51TFVZcmhCbGp4UmVmbHBTMkxLWk1aZnpwbkFzaG1oSEVRS0c0UFBLYnZaZFdUYkhlaDRmc3lOemxOUFdXd21GTHNEdi8zRUN6Sm9aZjBzdTFqS1NhYnV0b080anFFbHJaQXhWcCsxcGhFMERWUG9veDhLRUxRTW1aQjJHVzBjbjg1ODdLNFNZbnlpTXBkSHdpUTA2VVRvcnQzb2J4UmE0cGh2emZIaGd2bGRDSU9zZllRWTJ4MVlVK2w4RlYzc3Roa2RtKzVtamVwTDJJczlhTVRyenJLanhzbW10UkpDQ1hrNnl2K2k0Z1ZyQVFYZFBCVE0remFkLzFKR1Y1c0xZaVdlS2pxM0p6LzB1aytCYnFnMzQvbXI5MnREcGE3WXpLdmdRb1NCb1hvbG04eTJqc251S3NodThFMWlqWVI5L0RGMTRoNThkVnpPTjBFeEZkdXJHK1Q2NDRqSmdMMFlYK3lkSUNzMmNoL0F0OTF3S1JVOUNQbGRsWW05c0cvR2ZJYThZTVBqYWJPRW11SEJUcytyVzZmcmhIdWt6dE5IZ1dHZnFEbmFONjhtODl4blpTMXNIYWU5NForSExYQS83N0YxVTFsR1lDK1l4ZEtacTBQTklVSmM1SjZMMlE3TWlBREhwMTJkbXhmV0J5VHAwYlBnMzUxajIyVytrd0pOZGRrQXgrV1N2ZUFWeVlocTRHUExlNlBYL0Q5K0tIbkN0Ykh5bE9BZDY5OEYzWm9ZRksvTmJORmo1SlRKbE5Hc3hWWkVWUG5QU3NzOHE5cVdpZ1FVcUpxNVBGYWJjbXBxdThKR0pDc3hmUlZCV0dZMUhMdEVTRERZeTM5WFFuZmdsY25BdEI1KzZaWEZFRkJHUk5qUWtST0NoQnFTWk9lMHAxNjlqVkJmK2xra2tnWjNHZkdkYmczQmZVb3QrMWVtOFc4SWt0dk1mZFJwOTVTWkM4L2pOdzBpTmhwTWJDV0pJSUlCNDRjSDJvRHVFbnR5N2JQaFpsV0hiZ2ovMHZ4Vm5ySlE2djIzS25LeE9SeTFzZC9sdThvZm1BeDR1L3NjcjE5MTRqb1lFVlcwaXRESmRlUzFPb3k4K1o4M0dDZVdIdGNleEk2K2N5ckRIc1ltekZlUy9GV3FyOUU0UGlkZ1NkKzVGUmdpZlU2Q1A0UG5OWFp2eFJ3Yms2cDdNNFBsRXV4RWNSRGtyRWlnR0dwOWF0aXk0S1JJSlVTdHFISzM1YitKayt5SVJWZG9KVWRUREk2S0JhVmgvbmovdWtwSXE5WVh6cGFiTG1RdUFPOVlqTTc0TSt6R3VlUk5ESkZ2bmt5WWxPWGJzbVhmNllwSE0yRk5FVnkwQVhwYWthTGE5UHpDZlJTUFlwQnBDTTV4VnE5R2FIMkdsM0ZzT0ZOM2xybiszcnREZlFoc2JxMzNpb1o2MW5hTnI4Y0JuaEJFTUdXS1JrWkZ6SnczbXBNSGlUZTlnTHhGTmtsb1M0SlpOaDlYSU9WaHJjQXMzYkhpelN3bmJqWFJvcUlEeHlBRDFHT3NkbitSU3FVTnlObFlpbGJiSWJDdGZCbk1uRkNwVjJlN1dSNU9WRmhyZXdCUGk0V2VsOTFudVZWY2F3MVpMbjhVRXpheWIwV1VucktIRU5DcjBXcFJ2LzMxemM3N2pROG5uUnJoTkZKRmtsdVZVUUl1L24vclRDL3dKTzFiSWt2WDBHY0d5SkNWVXgwaGwxbHB6aFFNZGJZc2lVbGsxVjE3QzZDT3RQeWswcENqZzAvRytNUXlYVGZYNW5xMFluejF3bzVuZVp0WkJ5MW9IcVV0Rmc5VS9tdFl0R0dTekROWWpNZVpWSko0V1ovcy83anFNMFlsTnpMamppMytyWWYzRHB5MHMydEJXRWZONXZWSFN4THJPVk5NV1NaT2x2Z09zQUNrTW04K2ExdjZPeGFRM0J2OWRrcFhRUmFjVjhnNlo0Nk1CMzcvTWl3YXY1bnZMQVl3MW1OV3BXdEJOTm92YXo1TE4rZFJGSW5TNFJxUDV6V0htN0NoU3dLT3g3dzJSYVM5eEFrbHlmZzUxMkYyQjdBNlk1amhTQ3BGQXcxakwrRnBQUHRQbnVQVTFCRnhkSUlrWkhZQ0NCY01ONDkyWmNrSUVUVlpHRnorSnRnVDUyNEpVSWM5M0Jxdktnb0xOeldkTHg1OEYrNHNldzlKUVUrdTVyeldVVSt0V1EyYWlKVldQNjQxU3ZmRFZFV2VPNXRkVG9VLy9Qb2NDd2FnbTIyMnJWWE9Db2Q1SCtCdVRoSE13d05tdXhlT1IwSXFZNGVodFF3a0VaV2hoVzlVV250WU5kb05zQmROSjErWTVQdzRCYUZBM2hOK1BxV0FFdEhWaXNIckdkZnJPQUY5eXkwUlV2TjhKeTg4MUoxWi8rZCtNMG42YnoyVmltSjBsbHQ0cDZQNFJ2WHlEZG9TVWFRNmpTc3dmdHU0WDRLN3pFb3hBa1dzZ2F6ZXl1TzFxa3BjdFNsK0FUTHNRakRpWmRJRnptZW5tTk14UmFKaFBpMmtndGxvSjFXc3krdDh1b2IvNDlmVVVXUi9sZ3FSSStkRlpTNEVxdnppQVpueWZiVlU5VlhyNkxXVU9wY3R3ZXl0K0Fsd3ZsS1phVTY2Q1RRWm1ZRDhNTmJtOWpTVnVaVWRiKzFnV1hlS1ZmRHRqS0dDSUxFajNBcVlYMDM0ZktlSElLQ04wcTA4d1ZmOGR0OGNOcDNhL3NwanR3cUxaM3U4WWJBbWNOZ1hoaEhwT3NNbFh3REowWUhxSFliLy9VQ0ZQWmJIYS95OEZyRnoyWWNPRHU5c2hXc0VUQ2RxTnE2bHYzZXgvdmRReDZPNGlOZVNocU8rNjd2ODMrYVo4OEdZNXpVcHpwQXlxKzZZV0hyaTRhdkNsV3NlMlJvUkk5UnJRaWlHM1I3UllueE85OXVxMjIyQS9KMG5vZ0k0Sk5vTHphOGxIUE1ndU1WRWdUb0t5OVB4cXI5Mjg3YVVYRC95UGJYUlBUeEdjQjZqRE50L3JyVitoU2t3MklXMWJUelhsaTlOblR0ODBLQzh1cGRUaGI0emdKaDBJa2FVcXY0WUZRVnBJY1h1bjZ4dHc3T01UOTR2TWE1alRYTTZneFBKYXJSdVBIWHBucS9wRjNzcUNwYS8zbytOaEd2Z1lVVVBtcW9jNDdCYjJoNXhmL3UzYi9DYWYzRFBxZDVhaTBCQzdoUENWRXZCaGM0c2NyVmc1SjRXaUduUjhHVWNoN0RTTUZrR2ZwTXcyOVcvbzBhMzNOdjlacThYbmR0bWsrWEVvOXliT0hvZ0I5ZHdHN212bWlReHJKUk52ODlndmNqZ095eEdmdGRPUEJ6Mmo1MWM4TkJQSXJtam5URE9XcHZHbXg5RWZZZFFrc2Q2RUZHSEFKWm1VdHkvbEVOVENjcUlYZEEyY24va0dBZkdTYk8wSHJGZnU2R3pXS1oxRHhOOTJxV0ExODVqZy90d0RvRE9reGNBRGJkbVA4dFh0eEFyR1lkV1NpYnd0YWRGRERwM1VkeDhmc2k1aS9oaDRtdjd6dUR5NmI4L2Q4NmxpbDliOHhUSmpoWWtPR2c0Y0tYUHVzdDhmVVhhWmpudU9xVC8rcXM3SkNMdm5mN2FWd0lIcHlENkpVZytCZ3JqUlV5TTUzMXYvMlFBQkFCb0FRQUFCTVFCQUFBOEJDVEVDQUFBQUFBRDhBYzVBQUFJQUNRSUJBUW9DQUFNQUdWUm9hWE1nYVhNZ2IyWWdSbWx1WjJWeUlDZzVLUT09PC9CREI+CiAgICA8L0JJUj4KICAgIDxCSVI+CiAgICAgICAgPFZlcnNpb24+CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvVmVyc2lvbj4KICAgICAgICA8Q0JFRkZWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I+MTwvTWFqb3I+CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L0NCRUZGVmVyc2lvbj4KICAgICAgICA8QklSSW5mbz4KICAgICAgICAgICAgPEludGVncml0eT5mYWxzZTwvSW50ZWdyaXR5PgogICAgICAgIDwvQklSSW5mbz4KICAgICAgICA8QkRCSW5mbz4KICAgICAgICAgICAgPEZvcm1hdD4KICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24+TW9zaXA8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgIDxUeXBlPjc8L1R5cGU+CiAgICAgICAgICAgIDwvRm9ybWF0PgogICAgICAgICAgICA8Q3JlYXRpb25EYXRlPjIwMjAtMDEtMDdUMDI6Mzg6NTIuNjcxWjwvQ3JlYXRpb25EYXRlPgogICAgICAgICAgICA8VHlwZT5GaW5nZXI8L1R5cGU+CiAgICAgICAgICAgIDxTdWJ0eXBlPkxlZnQgTWlkZGxlRmluZ2VyPC9TdWJ0eXBlPgogICAgICAgICAgICA8TGV2ZWw+UmF3PC9MZXZlbD4KICAgICAgICAgICAgPFB1cnBvc2U+RW5yb2xsPC9QdXJwb3NlPgogICAgICAgICAgICA8UXVhbGl0eT4KICAgICAgICAgICAgICAgIDxBbGdvcml0aG0+CiAgICAgICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5ITUFDPC9Pcmdhbml6YXRpb24+CiAgICAgICAgICAgICAgICAgICAgPFR5cGU+U0hBLTI1NjwvVHlwZT4KICAgICAgICAgICAgICAgIDwvQWxnb3JpdGhtPgogICAgICAgICAgICAgICAgPFNjb3JlPjY0PC9TY29yZT4KICAgICAgICAgICAgPC9RdWFsaXR5PgogICAgICAgIDwvQkRCSW5mbz4KICAgICAgICA8QkRCPlJrbFNBREF5TUFBQUFYNUVBQUVCQVFBQmZqUUg1Z3djREI0UUFQRUFBQUFBQUFFNUFFQUFEd0lBUUFJQVFBSUlBQUVCOUFIMEFmUUI5QWdGSFFFZkFiSUFBWDNEQUFBQURHcFFJQ0FOQ29jS0FBQUFGR1owZVhCcWNESWdBQUFBQUdwd01pQUFBQUJIYW5BeWFBQUFBQlpwYUdSeUFBQUJzZ0FBQVI4QUFRY0hBQUFBQUFBUFkyOXNjZ0VBQUFBQUFCRUFBQUFhY21WeklBQUFBQkp5WlhOam1jb0FBWm5LQUFFQUFBQUFBQUJxY0RKai8wLy9VUUFwQUFBQUFBRWZBQUFCc2dBQUFBQUFBQUFBQUFBQkh3QUFBYklBQUFBQUFBQUFBQUFCQndFQi8yUUFJd0FCUTNKbFlYUnZjam9nU21GelVHVnlJRlpsY25OcGIyNGdNUzQ1TURBdU1mOWtBQkFBQVVWdVkwbEVPa2RTUWxRd01mOVNBQXdBQWdBSkFBVUVCQUFCLzF3QUUwQkFTRWhRU0VoUVNFaFFTRWhRU0VoUS81QUFDZ0FBQUFGOHl3QUIvNVBmR3dBVGZON1VUZWdzTForL0RQakRqTXp0bGtmeWtvT1Zza09PNnFhR1JlSWpaZDFJc2xJZ0s5RENqTzVpQUFlRzg3MkE1SUE2RVJkLzdTcEdmaW1BZ05TQUFaZC9qOW1pekJDaDRnQjVEMVoyQ3VheEtzemJZdFdXRGx0amJ6aXFNOC84Q0lBOW4zVXBSb0hKYWg3eEYyUTlJQWYwdGV3RlV2dVdQQVNGODd2QU13TVJhZWgveFVSbGdFT1NvWWhacGtNaklqMWkxbFNLVTNZYzFEUHcwT1BFcGRoTVU5Z2Y5UzE2V29HeVk2aUE3ZHhnTjlEVHdRMzRQd25yUmh0SXNVNklJVVB5aUEybEdtR0E4VjFIbElEczJrWmJhZklnVDJqTUhTQmp6M01Tdm14cVIxMW55ZUE4SkhrZy8wSXZhMWZMTWFzak5KQm1mWEwrTURlSWxWZjFOc3JTck5BMnJzdE5teHRMWlVaNUkwSmFaYXFsRTMwVnNlV1ppekd5ZDM2Z3NnQThMUFFKSFhmWWRxMUR4VDFDeEtON3g0L0RnQ1VvQzZ0amlDelRTWmoyTXFVc0lkZjc2TDM0dmRMWWlDODN2elA4Wm44WnA4aDQyVTZWOHFxQVFRV3FaZWgvS2wySzhVNlhKYnltc05yQnJVZFJ6Y2xKc1kwbWJqekhBU3dheC9adGlJVG54MmJpSHM2NzRUc0NseGlhWlBZVUtzZk5HNDhqdW5zeFNWeWlmTWFNV3BOQUpVWS9MK3NXeXJ4NjZ0U3VlM2dDNnRMbFBKRzJ4UkxsdWl1OThYWHZOV1owVmZPekFXZXhoLzhBbjEzNkhUZHZlSklDbGNYY0EycHdEOUE4bld4Rk1McmlGeWlDRE9lQlNJUE9pN2RuVlpOQnYwNTdqNENtU09BK0pmdTlBUXBQZk03VDY1RnZBS0w0ZzRHYUMvNG5uYUwrcTNISmxDQjFMaFlzVFVtZTdUTEFVN3gyZm05ZGhtaXFzcjVtdHZscjJMNkpKaldmMGNrR1ZYTWhlODJER010U240NG9jdUcvZWZBa25hUHJ1OUJ6bUR4MXkyVE5abDVFcVZQYUwvbHZHaGRwWW5RenExYXRHSnB6cHFSSHQwUldoZjlWTnhqVUNXZXpBK285enNLNVUxcGRUSzYwcjNJL0ttdkM4djhIZU9oSmhQQlVYWUZFa21SdVRKNHZsUmdwY3JMSFZsM0N4czdjTWRlZy9nZXpqaFJjVmZPZGx6UFd0Vm1ZaW9KZVFSbzRQOTBCSHpORG9MTmhwVW5XQytuVWpENmFTTjFUcC9pVHBoSmVCNWpidHY4SERWMnVFbXlnSjJHVHo5RWVlWG82dnFGUjR0UEpjbThQMlQ3ZzJ0bDZMdWNRVUlwV0xOY29URmpuWGRyUmxuYk81aTZsTVMxVUs3eURicDZNREt6ZkpHZHdYYkdWdUpkYVUvOWViSUt6Qkh5Z3pVVTVqbjB6MGwyVHpzckljMnQxdUxxOXQ4UTBCQkJzNmMzazNuczdqRnVCQkxpakwzL2FpVlAxNU52WFUxaDQ1eVlJNUkxS05yUTNtUTFIckorZTZPNUZJOHEyUW1uVFFnUUtGVnk1NzRGTVVYbHo1V2dZMEJRUFRjVG4xaHliWTZXRGFYNTFrbmZqK3hNQzJrOVNTdFZCRmlHM0NzVStPeVpyVFVGT1JpaUczbDI1eE54d1JyRGhqWEZ5VnE2T2x6eGRrdDNYZTAzc0ZkNGQvdUg5aFZWTzg2UGNXdkwyQTduaVRnQy94U0tndUFETmtveW02dTZvYTZyY09KUWVRSG10VWs5TTcxamxTY0JhalhpQXJNUUNrMzQ0ckN1bG9Uejg2TmZPaVAwcXFGRkI3bkY1bS80M00xZWdvR1JzdFBWMFV4WndSVEp6elNSVS8xTmJoUkE4N0Q1Q3BrQlluL2xHalR5OXNPRG5vdFJGV3ZNL1k0OEgrU05UdXQ4UVA0YnM0N1dnb3dJL1EvVEd3UHJGanprSlpPYkY2QWRCQUgzc0xFdGZ0MHlqMDVPazFHemQxZDdKeTRHYXlDK3VIc25LRWJzUVJaMklvR0Q2MVgwamljUE92ZHRiSHNEeGNJVHJoQTZBTXNId0tFVnBXb3FVRmtrOTlvZmhhbm9hd2JKQVV6Y085MTlkKys3YkxUVEdEQjZqbmhKNDFYTzMwYzc3dWZRNzZSNlAwR1JLN2kzM3JBKzY3VUNYN25VWjhKN0VBem1PNnd0T2JRcDd0R1JXY3BHeGNCKzZWRHRlRit0eE9GZGlXaDFCcDhWRFM0SmVRaDNxcG5raVNSdWcyUTNBTUhOR21iTXgxdEdSUUVRaFJWS280dlYvWFJwN1JRVUJmd09CRkdMdTZaOVh3MG9SMmlrYUJVQ05RTnpNaHNOcFl2dlZkci9BblFsVjloRzdoNjJETUJFTGFNMTdiNVlLckFCTFVGL0NTMW1FMHJONjczMksvekJ1M1Foazg1UVM1Vk1hL0pJK21TbzJjM2RTbjc5NStjS1lWdDNBYjUzMjdrdVArbVk0WjB0c3lDZDBEZjdiUGdxdCtJQ2x0SDV0bmpSRzNJSnBzTitaeGh1OWFoUnF6OWlMZlMxMWhXN05ONkZoRDVacWkvYVZ3MUhDOWFhNXEza1Z6UHlmMGZhdEk3MU5lVXdWMitnL1ZpNlhYRmZpbmh6b3BmNUhuK281MDBFZ2hXcFR2T3o4eEdLdXUvS2ozL1FPQ1Q1RW1sSzJ6V0p6MFduNEhvTCtwTU1xbXg4emh4b0ZycU9JVEFkVGRnejlGbTJlcXRJZjV0TUN3L1dGMHpqUzBwak1xbElKZTdsVkF2ZjZrNS90SDArWlBGbjZJMm9NQVErak14ZEYrYUNYcTFYYTBjc2ZHQnh5UzNIYnVjTXpsQWZFK0JXVG56Mnh4bFlUdHdvVnRxeEFveFVBcVlUUlp0Qk1JWlNTbVhNN21vVk9VaGlFMlhtV05MNlpCR2w4UElHb0wydm56N0YrSG9qQXczYk5UUTY1c0psazdWZUI4c2RJSjc2VVFqanppMlJjc080S1gzUzM2TG52Sis5SWh1QUQzSnFtS3JEdUlNOWFGUTVmYXVkMEpXMjFuOHdZYjNVSnJIUHc1djAyVGsyUmFZL3NsZmcvOS9VM01PRWN3aXZmR2NucWowczNiZ1FOczRKR0JmdVk0R0p2WWpLWHVxbDh6OXZ3SVNOMDZzQkk0WDFoSlUzUWhuNXJoTlE5UVozVTlDeXdOU2dGYmVFcXZEVTJzOEFPVWdsMjFScm05SEY3TzJ4ODVhbFZyRUE2VnRVZmN1TWhZdmljQU0vMVNwc3B1L2tUazRXc0JvekVSSVZxL09Ta0lSWUVoR01TVUlpd3FncHk5ZldHL0hPV0NObnlra1U4TXFFUWdieHBxV211QTJ1TUEwYkFtTU04S0ZDNmp5Q2VlcG5QZ04zcGNOSkNvbi9rT0Z0T3FUSUZuSjVBM0FnNHBqSzRMZFRkQzdFODd5UmhvNHpRaFJqNWdiZzhPM1o3UVkyeS96MWVGVmU0NmFoVU1WcTdpYmZsWmh4NnBPNjdWd1lPNHgzUEg5bFdUL05MOVZsTlM4Qno4M2JHWE9sVlpibzNrK0E0Rklxenc3aUExamh2RWo0YTNGc0JVQWdoTTg5M2RzMk0vMXpENWorY1NHeHNvZHprSkIxWXU1cW1ydGJ5TGEreE13V3VVQUE1QzV5dTdTRHVSWDV1c1AxZTk2S1UvanpOMEZhM2pEakxyUXlYdWRNRDNHa3ptZGVIaG53VnYxMjVPU0R4M1VmVTVRTFlVemd0VlFybDFaS2ptdHNuVmp2WXdkV2t1bHFJZFlUWWRVZThiZ0h3VU04RDIyVG0rbkx5M0NvUU0yWkYrYjU5YTN5SFc1Wmxab0p3SVhyWHJhSG02R0FFMENnQWlDTlRKVmpMUiswODlocXkzQ3NEeFlrK0dLZ3NJNU4yeThzTEF0YW5lemdSQ3FhaXhKTjkzZDJZYm1OMFFtRENhUGlsb1hxRGJjYmhzTXczNVJHcHNRTjZJd3VjRHIvTFpOMm4yNjJya21tWFlqMTQzUFZwaUFsUisrandNUkdlTHIxdEl4T0ViY3JHLzNvUlFsREhwcEpoN1VrNXFXVE1CeERnak9nUVUwWTBPVDhnbk5ianhOdTkyUGZNZEVPa2VNUitodEVrN05ORUttL21tYy9tZ0dSRXRwWlQ1bEtQU0JDbkIxK0pDTks5dko4cmpKTkxsTm5ibXcvMGVMbHE1SW1hT21LQlI0SnMvUk1RME9malRqenoxMncvT25ZajJGVklsWW9seFJyaDUzL2o0SGdBQ0hjL1ZCT2tUem5rcU9uY3A5bGU5NzFPRzJlci9renBLWml5N2lidkpncmh4VVNsRWpGTmg0ak51YTF3RnZrdlZHQU9Ja29aN2ZNYzlkRVdpenR1TkQybVhudFVnUW9JSU1GcmZ3eGQ2RDFWS05aMDltNTRBR0RpWklXYWdGN1dJSkNSM0QzaHB2MEJKek9xL3Q4a1RvZjNJeHhJdWtZajVQMkxyWG9NTTJRb2xrL1NJeGpjSW1EZGZncUdkMEIrcjI5U2NPOGpxVUR3VGlyVUJKamVPWUtUMzRyTkF4K1FDaGYvQVZ4cXNSakk0cUFtYkJpWWQ5OWJpVlNwNmJQSE9EQlFSeUtjM2pCNkRvY015TUN3ZjFndmh1SlZ3bXhzcEc2VWxDNzVTQU5Tak1qWGZLS2huNGdvRzRIQnNrbG80RXJJMGJPdnBIOFFyMFh6d3lmWHhORzBPdENxTGNxZUplQndlZ2laTU9mL1Q2eGZzU0VpRUlld3RYTFkycmlkUnJVOU5UUWNoaEsxdzRKZ2JkZTVSQnp2WWw3aFhQVFowR3JKRmFtMmFVaUVjZFJMc0VpSkRIU05YMWc1STNEUjljYzB2K3BibHBVbjgwekg1S0h4OGxvRENyMEk1UnYwL3BoQzhQOHRhUVpQTk50d1I3ai9MTVh0YXd2VU0xQ1VQbnBacDM0WldJeFJGZnFzV1J4TkRjTGZxRGZ1YklZNXZSWmRjV3kvYUJ6Rndla2hJTVJ1RUQ4L1hFWjB2ZzNaNVJScXRpNzF4b3E3VU5NS1g4MHl4OG94dGs1M1VjdXJJcElWbTNaRzQrb2hSeWQ3WGpSZU0xMFpzTHRFd2ZjYkZ2NGZmOVpmSUs0cnBFMHZMdFN0VE9GNHF6YWVjcG9QNmJMK0ZPR2JrSm9GMnJsWDFwNWwzL0pSV1o0SEdmTzV2VE9RTkNvZUt6ci9MdlluNnlHWUI0endObS82U2tUM2VBVDhEdXNYL1RlZmF5bEpNcFdMR0kxMlJFZWw0dkhtOTgzYlVudFFaMGZDdGp6YTZ3QVN4ZEFhdHJFVXUrSldKdk1pTkNZNXZPUWZLMUorb1lGV0RTMXNlVEw2ckhva2p4RWpqcit4Zi9QQy8wL0E0OTN2TEJxWTFlbmVvaVZrUFNjaHNRN1pCN3h4Y01LQURGZjFBWlFpaTkxaXJnWmdseDgwazdkOCtQbjM5cWFhUGxCM3JZZWtiNGNUOVFicnNJc2pVeGxydkFkNDMwYWRkc245b01RZHlCdUhJSENCZkxwbld3STdBTDFwcWVSbFVPV05xbk5CakpnUTFYbVlGdEhVUU8yc2JqK2RWWUcwSTZOelZFdlR1cDJqRVlZTG9nQkhlS3ZWeVhJWjM4ZnB5REVmVEVuVmw5VzhFMzRBUXBHOWlzVDFSR05IYzZVVDBWd29Nb2tlakp6dkJLNGpIK0ZjQmdCU3JsZkpKekdjTU9MQkJZaDJSWkdHMEduRWNwTXVHTERualorMEhUbXhORG9WQW5hN0pWWDdzMjZDUUw2RTk4MFAyS2hNSGhDOXkxOTdQY21KVUJlUFhncWFRdDZMVVlpVDRkOE5jc2dkT2tuZDhHcC9JWDFidEc2L2xIVldNTCtwaEJNTnFWNjdIVUZUUUZZTUFrbHluUVROajgzeHU5NkI1VHh3cVNXOE1jS1BRb3lrWjRKVVZIdXNWRTJlcDFNa3hCVWFlM0h5YkNXb2RlaWtDZXpIa1A2VUYvcDF1NHd1WklOT0JValEyWkUvOGhTS3BVRllRZFlLYmE1MEVvaVcrWFpxSVhvWXFmd3JNS0RuWDhtWTV6eWlWV3dOa2lIb215U2NGU3ovSUNUV0cya2ZTbWdXSk4vb0hjdFhiMkdwQUdLdVM1Y0R1ME9zVzFSRlZKbHZVZ1lEZkhESzNCVDFwcXJNWFhjNjkwUEFHVXB1U2JyWWdlcm5DcndBUlVTMnFQYW9vTWtpL1dIaTVWVHdPaW5QQ3MvSk5pYlZjVDNyTDhOSjBSV25mbjJiTkROWE91S0pkSDhicGFUT09WcDlVbGdTY2I1TWN0Ly9BZ3dVdUlWWWVCKzBzSVh5N3htTktSNUpEcllsVHJoZ051T0JZOWk0OTZ6Wi80VkY5TDZRSVcrM0tjOXdWVi8raUtiSFcrNzBqdkR3VE54cmUxazJtb3dEdU5vc0ttUUpBSFlDZC9aUHhCYnhhOXZrOFdueFpPUCtCa2F0SXl4bTFFdUVwVW5UbnExRWlqUW02aHdVckhGSjZoZi9GOXRITDY3bWdwWVd0dXNyZTc0Q2hSaUUwdjBLWWZTcFI5UlgwSDA4dUtvZzI3VXdBSFEwYitCNFNYaUQ5ZDNveVp3Z3RTNlhKUHNScUhVNTRQY2xMbnJSRU9BUEJpbDVEZVZNU1Z2bUllWEdPUWRqVUxnUzJzWFJmSW9YNThFc0g1cUk3OElqVWNib2FyTVRnUEkxYWZ3dzdvTUh4MHFMWmZseXZzYU5STFVhb3cwY2NtKzlWaDJvMVJmS0RxUzlXdG1VS1hLSjNMMTcveXNzSmd6UCt5NEQ4OW9ZK2psbmJQS2hJb3Vlakoxb1NlS2hvYWJCWHlBSWVmWmQ5ZzFFTGpjcUdlNEN6WjBKSTJaYktSTTJDdG5RQ0Z4RmorY3pUVEw4UHBjeWtGQTFKZ0l3NnB3QVRzbi9lVUJ0K3FHWjJWeXJBZHhRems2SFlDVFEwODVPQkcvbmhmZzlUcU90U2NQRmVkUEJTV3MvNE05bVBkcmVFcjdFZ2M2SCswamNQUEQ0SXJTRE03djhYZTc3RVZWWncyaHJnMm5FUWJtaW9nbGFtUGdPTllpMFltU2UvbmR0T0RMQ01nZjF3TTZuNVNzUkQzZmhORVhYYTRaNllkMC90VmFtYTNvWk9PWWZkcDZRT012K2MxYVlsRzNtT0I0dkY2Uzh2RXE0UEFoNUtWWm44MmlzWXBEZkVnZzBkMG1iQllIa3FXbmhha3FVL0ZNN2tWaVhMdUJ4UjI4a0hwY1EwQWVUVlMwUk0rQ2lleHlnd0lPczErVUJrQWw4dDd0Y3dXb1FVK0trWTJtVkxBRDNrM0xLNXliMHc3bDFmRjZ0alM1Sm9XQlJQMlY0c293b01ZdzQ5QXdsTXNpY3FBZVZtUis3Wmc2NDZ0V0lhNmFwS3NXUDRSeFZnWklRMHpJRUgrYlZlZU9nTzEzSk1KUTVqT2lNMjRReU1aTzNlc2lVZmp1eTF4WXBzbFVpVnZ0cXp1MEVwMXFrMHdpNDZJOUxqTkFxbDgyTlMzMGUrTGhNYzl4SjdzdnBFVzY5MmFHUVRWUyt2Tm5sMHczSG85ckpzbVFPOEUzeGt2c0NIQnE0Mzh1cUo4Q1lWZnJEQm1zRStMbkZzd0NMQkhJTWswWXpGbG9wMW5tNC9SeS91OEJMaTlvd2tVT1BXS3dMUXNLZkpUODBRNEtQYnFvVnhBekpnd21rc1FxVnJiRzVnVmJIQlVlVjdNSDVUdHdsZmtYUlYrZWtmczJuSzhpeS9ISktGaTI4Y2xPZktjYUZLU1ZEQTBnbXl1Sk9zS1VQcHZDUnF2TUREZmRzeUF6dlIrVjIrd21VYlpEWkdpb2x6UlFZVnZNYkt2dnp4OVdTSTRjLzBObEFSdnFOZ0NNQnV2OXJlRDB5amx3RzAwMENwcmpXbXM5bXNtLzhHL2t5Y2NoSkE1enVsdTRjOU5VcXBtU09aOGtVMWJ4Z2pMRzl3OUtBYitRLzJZbkwzdWF0bTNNR1VWNWdnVWNRblVpQ3lGeUtkTjZleHhhdzltU1phTFdnam03ajQvZ0RZUU11UHNpL0VWQWc3M2tTcGxqSEFuL0FBS3hIcWVmb2pHN3orYTRzanlmRVo5a3A1cWdXQmtiek1BRmFXR29ZV3EwL0xqNjRNYU5rYWw1T0MrMXRmbHgvTzJHMFJvaEdqQnJ5NVVYUFdmTEhJc3ZuRXY2MStnWm5JbHN3dURSK2tpaTB2dkZuQS93UEJxbjJ6S0ZPazVmN1dNbjN5VnJROHFlY0huRUIvWUE1bFdZWnpNc3dsUzJzU2M4Z2d2ekNYc3NQOGtHcWozSzhCdmFCNWx1amJNN2hTeVhDbW85WmpHRnczWjJZZGNycGNEUTJVQURMamU0MDI4M0pRQUM1d2o3eXR2Y2QxK2RhcUxncUJhSm01bkpoM280d2lqL1p6cDBnYldjWjZiT1R0RHVyVkJKSmRubjBTQ2tQOW81YVc2ZzNlTlVzNzVzdFJ0aDBwOSttMnhZNE1Kc00wV3BJbmpaZXNzVGFVdU81c1dQaTdpRTVvc3Jzcmt2NHZqdjMvdW9ndVA0VFhsQTZrbE8ybzB2NVQ4MDVCQVVkYjdPVklNaDRrNUVXWklKMFNaTjk0NVJHVU5UeWFaS1FBY21EcDRUK0hNd1RaeXBlN0ZTUmkzTVIwNTJ0azVWRlFuVnUwdXJYalVuTC9kTEJZaHZkMkt5RW12Y0Z6ZUIrWW1SYlJ4ejIwZjNwOTFBUmw0eUJBQjBkZ0hHcjBZRDFNQy9PbWFqWnp5WjEzU01JNFRuK1YxMzZjbWJac25MTXpHNlgwVk1KSjVMdkNxaHNWVkl2eDR0R0pIeklONG5xdk8wUVRGd25xR1FNQnY5UWVqeVFHMy91TUZiOUl4ZVp5Y0Zab0J2SCtHZTFsejRnV1ZSVDNXalRVY2ppOCtYZ3VFY0h2ckx1VFc1YzlPODlEUkxlSitJaElMQmt2dE5TclE3bnpHWVdVWXdMTTNnZlhqSkdRUVRWb2VIc3F3bUJTUEtjaSt5RE9Kc1Q5aEtQMUhWZkFTcHhmVnR4dUlqbFNxZDdFK2x1R2thc3RxeE0zcHRqWmZ6aC9wSCsyRWlQOHlHS0lnbzA3K1RReEgzdHRtTUFWYUV4N0FVT1UwQXp1M2tpS1UveXh2b0Z4NXFUU3lNOWF5OFRscS9FdE5idU1lQ3M4aDFRb05rZW50RXF3YmM5dk42Tld6dUxyeEZENHYzZmluWDFtNTl6bzJOaTZ1cHBnOEpwcjY2UmMvNDlVUlJQUmpNaWZWVXlpaVo2Wkw3RElacVdYYk5pK2RoV20yVTlkY2cwcndRSnZqb3duL1hOaFE0dkNJZGt3aHVOSWpJUUVmVmlwSkNnU3dMc1N0d0RKdUJvTllvUE1ERFozSnIrc3Q1RC9PRmRTYXZnc0pKUlE0QURDdkx6V1FXMkVwOXVGMHBZamh2ckxHcWFYdHh2OTZZQllSWEZqc01ocWFXWk1VZEJUU1p2Y1dYdDQ0UjlFdnZjYThDQ21yME1STUxrbVpwazJRYWRuTjVlSTNOKzRRNE9HODAxSWZJbXFiNzFjZzFYcEtFdXR5Y1prVWJLU1ZNNk96RTBpK3BRTDBtajhGcUdIMHV6RW1oaU9FYXh4TWJlR1poRXdxYVlxdytYeVQvWWg1dThXblFWV3Z0TDRrNDdnb1ZLUTZIUVBvNGM0aWx5ejU0MHBRZCtYb3FwN0NFTHdQTVc3Ny9MUHUxaEYzYWYxaFN2MllIOVZBRDEvdnlISWUvT24yZnMwdDk5R1JUdklka3NxNFF1NzV4LzJsbDY2L2lZaGFNNEFkaE9DdC9QNGIwUHREbDF3dHY4ZzgvVVBsT3dQRm00U0pJc1NOUzVtWUI4RzM1VzZrZ0wrcFM5WGFNVUNVY1VFN1RwU0dwWGZMcnNhQ2xkRy9mUDlYakVCRE51M3dFQnZvQnllVDdhemhzUCtvcW14V2dGWWtIWWtLbUZNNG45TmR5UFV1WDN3VkFtcGcwSmFaczZVeDhxYjg5SjZrRDVzS0tKT245dFExRXBHakpIMVRKTlpTb0dQelhKZExuRUZTR2NTRG5WTnB1eThmUTJnUVFseFBjc2NiajhWbDU1emtIWlllUHdWTjA1WnQ5SkFVcWtYdXZySHN6d01kWjFib002U1MrZGsxd2tvUG1xbTNvUk50WXZTV29STmNhQzBCSzZidENqYmtZSkYvd1UydFZadGQ4NnU2SGRGZ1lrSzAwNHZBMUlkRW0zMTlHMjVkb1Erayt6RFo4WWZNbStyam1IREs2MUh6VFNneDNTNkdrakxZL1lhU1JQbDNjMVVEUjM4Vm9KMUJOd3NJZWEyRGJ1WjRWd1YzNjQvc3d2L0N6dXVFQ3pMMExucnVzOWxmcGZ4VlJ3VDJoQmwwRUdWZVNJREp1YlZEYkIrUHBjY2xqYlFSOHFYemFmdGVlZG5SbUhJSDZqcnpWSVNDdEkzNFJUOEllbUxWRFVFV2prZXBRQmNzVVNRN3lnVHBNS1dzbWNkbVBydjNvak9MZWY2Uit0SHFwVFNvU3VqRFRIZ3EyQ3BZY04wS1ZFUDdIdGFOMjI3Y1hJNHNWUFZRM2JhLzg1YmtRT2Nucm1HQjdMM3VxVjRZeDVyZDdOTUtEcm93TWdMTDZSU1VOYTFiSmsxU2kvMnBRc0dNOXVrMkNTbWZla0xIVGFBWTNJaFUrV2RQUm9QYTlqNS85eUxXdEpBQy9SMVNzUzN5K0EvZXh6UUJCaWhIMUc2Zkwza092TnA0UWJuRzZROFdiL0NHK2NSNTFnREthNVVXbnZTbjc4OUVCVERFQlBMa01BOEd4MVY2UWpjZklESmRSZnlUR3dIMXQ0NXFBRTRJZ085MER0bTdxK3BGUDNvazhiR003MkNtS0ttcVF5emhFdXV5YnZ5NDFiVVUvS3VkYjB3c0RBbm0zQXZlNFJDVUpiK3o0cTJFaVErSzMxdGdMT01SQWpsaEJURzAvYlF4eEJ0M2t1ZnQwSUFabnpTZEZzVU9NcXRmRkROSXZrVDc3ZGlVWnNKallYQlR6MWh2czNxeitCbDFwZUdOckR0SHZsL0grNStHaEdJMUd0OGJlNDhOWkFhSit3b1JXcE9FQllBVmtJK25YRExVUGpTVUkvc2s2VVM4TklmcS9iTlN2SmIxSGRYSHFvSmtDUXptcGc0MHF4dG9ET3RIelVoZG40QzVsVDQrMEZIZ3NUNGlNVUhSOFZFZENwRVNtSHlhSHdCR1pNUjRQYkVYTXVac24yTkEycFZHLzRHYmZMdzg4ZE0wQlhNQm11U0NjM3JpOUdJL3p0MEpqbkRVSDJscDlGSnFzNWVmblBqdk80WEJvRkRiMi9IT0J2R0QwWS93U0VXcno2L2xwbzZzczNRQkc1ckJWYWJnNXdMVzh5WktaYXlwZUxaK3VuR1VZVU9YRDFQWWpENXdVMk55dVM3bFRqd092b0NUOHBFOGZuVFc4VW8wUE5mRFBvU3kwQVJpWmpPVi8zN1BDNitrWG4wbzFtM1RtWUZPV2ZXYzROWUQzc3lvMVlrazU4SSt5S002TFVVRHIycmJwRE9NWElZK1NQR0JMMGVxbWIraVNqYTNwQWhXMG1icll1ZlN5Y0NWdnM1V0VqQlNRQTEvTEY3ampTUmFmQ0tiTkVpOHNyWFgzQ1VSS0lxeUhtSWptb3Mwdk8rY0licUNvTFFjKzlYMUZsZHpXQ0lJVGFZSEtaQ3hBdEV2b01OdWQrZmJzR0kramgySDY5MFNneVlkcWdJQU5HT2dxRXB0Z3V6cDNxUWJrK3paWnRTTjlVU2x1V0hUNzg3QUZEU0dXNzRyZ2NHWGlQcWI4bWdQVjlKaUttVndwKzJaWnhBZm5EbFhPNUpFRDVkYUs2WmxBVnNpVXZzaE05eDdCZ3RzZ1JGUlFVN1hrc2Nadlk3dDFvQ0RJK1NHNEpPUnpRdzZxWWhFMkI0ZXoyT1FaQ1lBMGdGczZLOEU2M1QzQWdveDN4V2k1cmJ0NlBRd2tpZEUzY0s5cjV5YmpHSnVxM01Tb2hOZWVqMlVtNWJHRmkvUW9wSDRKV21Vemk4OEFkUkl4aURLMmp5RisyNlJGZWhLNXZSNEZWbUhrbHhzR3ZURmR0WEFNU085b0tpbzBSYWVWYytaa1pmRmdDelN6dDBxNTNVQ0hPRjljWlVNdTQrckhZc1l1NEZTUDdrbitqYmF5ZzhzS3RMQnloa28wa3Y2cHhJZ2pEN1V0Z3NFT0sxVy9HV1lwbVRKeHRpa3JJbGtLUTRTSjlzbWhxMjZESXNLZjRzWkd4L2ZGMEhReUZ4TG1nb0M2Q2NycGpwZTNPMldZbk83WkZCdll1T3hRUTdkNTYrNkxCc0FtYnZWck1CamxQaWFSMERsclU5MUw2UnYwZUNqUGNtMEp2ZTl0dFVuMUdoTU14Q2VwRXJyZjN6d0gvWWRVV25HRUtCN0l1Um0yZklHVExJRG1KNjcxc2NPbkd3V2RnL3dpUlFIYkdYWkluMk96RmI5TG8rbmxHRFZaYXg4MTM4bW5MaXRHY1l3TnlWR2JzTm50b21FVFI2a1lOWHZ5cEFBaHdjU2FUNkZEWVBCTlcrMXZGRDlLbXloMktGV3A3YVJYcTV3VmhmUEdKZkZNRFo3S2hPOWNtQndwZ2w3SnpHb3Rkb0hwQnY3Z3NESUk0UjE2d3lSQzhURFk0ZTFjN1lMRi9FcWZGZk40RG1aRjAvM0hQcUQ2SnNLY3BDVmEwTUNWSHZ3eGRhUDBKaGdZYVI1RGxDQm5lenFlc0tYVzFHd3VycVQ3a2hmcHJ3NUQxMldqbW9FRklmM255d2o4Nm8yNUw2R1ZlQnQ0QUVBVk15d1k2ajNZME81NG5ISk01RmJoY3NBVXBKUkdUVThKRGIvaU1yVDFWKzg4S2s4NXg1amlTMU5qOUdpaVIzTTdBMzNuNG5VRkl2akpCMURYY3ozZHNwbTNsdXVVWjlsNVNiNGxhT2w2RXpUUElubHBiUWtZVm9UcnJUY1lyVmtpOGRVamV0R2ttYUludVRtRmR4eVQwaFZrNWY5bzRvWS84eGVlNlBEakQvUWhqeGNQQlUrY0ppMWNoZmtCaGNqYkRkQjJmd3AvUVdjVk4wNy9tdFZGWEhyK0tzUVNyVmM0ZFhOOXpSMitOZkZjK2xnTEluTW00VkdyejFvZUlmTFpXZ1VnSVI4TkF6YTVYWlBWNDQvTjNCd2dlSTNtMFBRVURicWxtSFl6ZTA5SVlURG5UVTZmQzVtd0hzRyszNi9SKzdnRkQ0dEo2ZjF0YmF3T1NSUWJQbFl3amVCSnYxVHdvOFdrT0tHODRnRjFrRTloeThraDd0NFNaYlViWkZmTG5jNjYwdGd1NTQyczNseGJaOUt6eUFsc1dPMzhrOVQzNHFrRDlXcEFxYU5KYWRibU96czNJYUFKYUJQYk16a05Gb0RibjQ2NmdUMVllZEdMcStXTy9BVU9UeTlDTmhOaUUrbUp4MkljT29FQmdjTWlkRkh3UjZvY0NGdDdvazlxRXZmSTBSRTdWbjVxRFhxbnFocUkvcXhWOG1KVUtBTVBvM0VEbTB1QnJYaXFsMFF6MWNpbjNJdzU4UVlrVlc2ZEsyUjgyK3J0U3UvT3NZRnNRM2w3ZkpQQVpBWm5yUjRUbGNrNzFzVWo1VXZEMGtJNDNRNFc1bVJURDJna2kyL3FuaElDQWdJRG0rclFBNUxGVVhzNXY2R0lNeTROYzAyZ0lEVlA4TEJKVE03M1lDMk8zUnNETzIxbFg4bzUrZ0tYUlMxU1J6SG1SREVMaG0ra3cvZkw4K3BpVW8yUEhQN2RaU3RQbldSbTBxSG1BSEZSRDZpWlNCRFBIeXQ3K0lZcVBoKzlyWkF0aUhlOVlidEhEdURNcHB1YWMxUkxBa25vYzEwTE1ZVzdlMG9NT045YlVXOVJtQ3NwU1dZckIvSDFBTUFQMExOK2h5ZDB4NDA5andlVlNFNDVMT0U4ZUJ4NnV6eXM5SVVTeDdkRVlLZE5kZWZqbEdicVdidjI5UkxmbnJNUHFyM1NmaURIQXJkTTVScHVnK04raVVpeVQ3VGpoUFV1Y1hsRmFRRE5kcHFCdkNRcXJsNHg2WGhwNzlrVkpYeXNBSGdxdGljNjhhYXFneEl4M3BDWkpVV1NVOGJCQUwyVFlEZ1IvM3BIYllIQXRTaHZGSEtWYXc1U3RTaDdMblhjTWVZZkIyYkVoSHJOckFYWEdxbzk1UGdDdER5UzdaWlo0TVNpeWlPVHdrOHFJTXUzQ1dtMGNpRmxLSisvSXlYZHJ3Q0MzTjBDeUZTVTlBdXBpaUZ6QzdIWUI4dTBUbC9pVFoyZ1pKc0JZNEtrZitiRkhHTVdSWCs5Mzg2UUF6WWdqNmhLVXkrM1FnUFlDZFlHd1QycEE4c0t4cHJyTFJWMmxrQmhZcEgvbUw3bWt4L1dvYStMcHF4enMrbDE5SCs3M0VVeGVwY0pXTUJMRFVlVHFnUzhjTkIrS1hxNzViMDZvb05ldTE0THp4d29hWVhxQzlrTWZVMTBLL01YZWJIeFczUVo3UTFtSnhuazBsamlRUWhGOG92dnZJRGpLU3lGUWVCUHRBNUQrN2pGZUpCTVI4NnM1SkQ5c2swY1RUczZPcjI4Sm5DSXhjNUU4RHQ1d0J6RkprUzBCQWY5RXNxZ3JyMmFPeFhWa01KaW5JVEQ3bjRibFRreWRwdHdFSDZvTTJYcWRjNHMweFB3RVc2eWlaTitSMkZFZ0tQaC9oOE84OS9pSkVxYUZXWFM1ay81ZlIxcUM1b2drSGYxTDQyOVVTS1RsbzFIRDl6bkZ0OXBVSHVsbWw3eE9WLzZFaG5ReU5iWkZLU2JGSXdiOUdTU29IODJYbExXUVlTMG9WNXpuRkN2ZmZteklPQVdhdXdocms5NHIxMDR0UXdxeGx3QzFvMGpLZjJ1NWR6TWpsU3ZYd0FZUEdTNHJSTXJMWms5elVNeWhNcEkvMlJTZW51SlZrWk9XekoySTNralFTTVhqbmdVRE5sRk9xbHBzOTRaT3krTWs3OEFUTWplUjdzeUJqelBuNzFUOHAzMnlrUG5rT0JjeTYrTDBrc2xPOE9VaW5jajI5ckJhRmplVmszVlBGL3I4T3ljc2ZlSXo0YjVEMFFWZnE4Ky94b0ljd2ZFY3pnSEhKcmRVNXUyRndCbE9WRG9JOUxTa3VoWmFyKzhvQ3lpUnp1eFpJZGlETzJTSlV2c2MrS0pkQTZTUnpZaDFxRUFuOTVoYml5NjVQOU5qSndVR21XQlA0aExaUGM4WGZkT0hmK29MQ0VMdWdRNXl0ZEVFZTh3UjZjU2JXT3FuUUVTUTFaeFhYcW56T0pnSzZMU1B2SGxaVVk1Q0dVc3E0dWgvS08rVUJkcFZ6Q01rRUowVGFxRHhDRXp4Y2xiTU5sK0I3WU5kUVlKbjVIZTUzbkZOVUd1dXkyTUNueENSaSsvL0pHdkRVRld4T25hN3I5c1IzYk5HaU9Tei94RE4zSnF3NnEzdlprZ1MwNEY0SVJ5dDFzV3F5eXpWcURmQjYxQlNxaWUwSGVmK0RQMnRhY1ZvOE4vRkRYcHhLR0VKcFNMS2pvU0I4SnVVNWJ2VDYzc3NqY1JSZTF0ZzU1dUtCbGNTUjUrMXEvOXo2NmF4TnlUcTdjeSt0TTFORFBtYWhqRDI5TVJseE83bVN1cERvc1dKQUI2S1I5TFoxNC9CbkUwK250MmMwcTFBMjZPZG0rVU1RblduejM2Q2hwTnJOMmd0UWROeExLMkR2dGJkYmh4aHpsTkkxdGhraldKZ1lIWkhVdjhZL052cTlIY09jQzZpaXV5UXM3SVNVekU4bk5qT3RpdmZXNnE3TTJmK1lXSXAzUFRjbk9RajB6OVVuM0ZGcWhwK0gyRDI1eURYbnR0QXVmMmgxRDVZZ2lRaWw0MDM3a01MYWZGeEk4M1k5RmNoeGlaWjlMTTBhaTc5bjhwZ1EzbGtkYUVuR0xrb2d1N3kyUkVzWCtRck1lUW1nVUl4K2c0YnZONHZjTzAvRUxvZ1dPTThpUU4wWWl4bWJrYk5kTzVjL3k1VGdkVG9YcVdMbm9PRWtxV2R6ZG5penJPOE9FY1Uwa1R0bW5sVDQrY1pNeFNPanI2S2pTNXd0WkdVUGhOZEY0eTRmQzJRWDBLQis4YVZSWG1aZ2VvYmRnU3hjeE5pQXJTWmM0eHB1OGIwRzh2Tm9iSWc3UUlIdjRZa3ZqbVo5ZWk3L3dZcFpvTko1TzJBWFlCVHBKcHlmUElRTUpaanVaQXp3OWp5STBUdWpoTWptV0N6VEJIRGh4NGtmV3daLzFmcVlRbEkrak9NT0lCUUdCYjhITmk4czRQL2JuUzdVTjFld0lycmplN2dtMm12amhHMWxLaUIwbExwZDA4SGlqZWorRG9XZFpZbitWcjZrcU5CbmVEMGZNQUZ5RmRJWndZUE1XUkdXcEFQRnE5RCtFVWgxdloydGM4UzVJazI2ZC9Sems0UlRPa3N3N2pNU2ZDNHJiNHVYa1lwTG94SzVIMllXd3hTL1hsWHowblRGaWFXa2NQcy9kWGF0SzByWGRhNjA4ZWVvVzZrZEE5ZUVyWjR5R25NSFpvbVBVNk1hYmIwVlhCaXl0bGZHT2oxK25NZm5QcXBuRmp0TjdDcnpKMnhNYkFiN0Y5S0VCTHkwaUZ4Y2hiZEZ1QUhaelcrZDJ6bGZ6S0FIL0U2UWF3bFR3ZkpKMFVoRDZuRm5ZejJ5aEtTVTdPL0FCakhZaTNwMGtvZTdGTitFeWN5cVB1aUljSTZOd3N1QlBmaXNRQzRBd3lFWEE0eGNGM3RGdUQ0RzNZZ0R1NzRmWmtqR0FOUzdrRkxGQ0E4dnVPL0FKZ3hjR0pLV3F3NUUwZ0psVDhmQWg2MkhoNzNMRDBkWXVEcVZkdTZsQTA4N082UE9MMzZTcHlDYWVaS0lKWGpvZFF0a2F3b1U0VkxrWGVrU2hKWTV0OE5naWdlSnVWVzNrVUNyMmRoamNreHE5Z0lFR3Bja05pYzhVbEFPWmJoaFhkS0ZjeGo5emxxTVNaK1RHenRnNHJQV3YyUkNjbG9iQkN4R0hGTzRWRzhudTd2eHIyYmwveXRpY3BpREYwTm5MSFJndFRZSkc0Vk00ZStVVlRRbjB2WHBMQ2JSTnlvVWJSU1BRQWZEWUJSWDk4RHp4enZJd0cvR1pXZGNuS2crRmwwV0w0QW4wWjRWNzlFV2ljd2JSQ1pBanVKUkZ4L2ExQnEvUkFFQjhsYzhHNDlnN2NuMFFNRW9ybGwyTFRzY0NaOFRSU3R0WUtST2NJQWdkbUJqTCtXUWJXRWZTVndVbFIyaVZFN2d3TDFiM0ZsbkdpRUtqTWcyTG1rR1Z4UzlzUGNabG1LeC9nNG4rSGhWSDFvRXVxR3JrRmRSSksrcnMySGdvYXJEbWJBR0ZMYVRTaHVrUWc4Z2FPY0F2ZlRBdm5yZ0k5R3RRdVdleTBySUNwdkpBYmVSRjZlMDk0MkdFVVF0MEFoQm9YQlh6cHd3emFJME5IT1IwaU1neGFUaUU2ZUt4ZGQrNXJVU2x0S3FHRTVZckMwTnlHMG9FNHpBT2xtdDY2cE93OHNPMEFsWC9ScU1lTjdzV2ZMTllQZU5FeFM0QVRUNXZjRExiQ2xpL212YlVLTVVDSVY4OVdpcmlUNTUycStBRmJSNUExcVVyczJRYW5zMTlpZ0RsOVNpeERJemF6SjIrV05pdGFNcCsvQTVxR3U0dFdabE9WMEZvZm9OanE4dFlmRnFuM2d5R2dwbGZlRy9GZTArWTlTajBPNjlJVWF2UG9ESkhJc0dEYmpEc2hSY0JRRVB3SkdBTnZSVlh6bFVXSnJqLzNYRnhXcDZQWGxlNjhqVGVPV3hDME5RRmhhTkVqWGhRZlJLVXd3WXVGcHlUYzFzWCtMMnlMOWVmNzFzblNNNjZ2WWNzMUVRTTRYVlNDSlNwSWRQbGJkeG93VjBNeC90emw0NjVFcnpvK21XWU9sUE5kWW1NS2h6VjNJTEhmbWovVGZiMVVDS1ltamxaY2l5OWxZbWVmeWl2alhTdHNPTWh0SDJCVXR5VEh1TDh2SS9XV0QvV2VYMlV3UDJHSjlqTUQ2MHY5V2xFK3NxL3R1RS80YWVmZnFmUDRXdUhoZ2pzSmZxd2pKck0rdEdoYUIvenU3ZEFoRHRoZW5vUWl2MzVJdXVZcXRmUFMybVJBdmthSkJnbmZma2dpZ3d2bG10MTJGWXMzTHpIczBFNkdMcFEzSHVrQWFQMnN5WU5NOVJ0cjhVaTB3UEFTaFE0L1dQZFNweHRiREZJT212Wkc1NlVYMnpvNmhWd0puR1VOMFBIanVIS1RoeS85dDhqRWxoRzV1T2NtWFJNOWRnSG9CRTJKTmo3QmNrOXk2Y2dLUEtPYi9Vdm9MUFhiMkRWczdSL3YxekxoWWJDNGJKWmM1WGZQbzFsQVNrUDV5ZEhXQzRrc3BZckM1c3BhRVFGeXNnSXBnVzU3K2Q1MWoxWGNUYlNybE9XSm5LYVBVUHJhNm9aV3ZkalJPREpjbTh1OTNXQytuOFF1RnptMDhmby9vcWF3WithTlRvZDMzWDlzdHQrYjRYKzk2dFhEaGdySWpobzNGR21udEFNVzVXVTIyck5lYko2SG03OHFkQm40MkhJbDFEQnVZdTllM1JOTkpWaGUwdmFFNGFTSVVFc05WV2ZwMTl0cE4wek5ybFJxaEY2R3pBOVpFUTBrQXMvaU03TEdkaUxIc3hjVElTM2IvSVRKYWp0eVR5VUJYcXVqRVprUjB1UWVsYWpscXhDd1NXaXJDeC9ueWpBK0lNNHZoZXQrUSt0S1hZdTVCSE12WWxLZ2hqRncvRFJJOXluWndqNWk2WTQ2Z1QyNklabVNHcVhleEgxMXlTNkx6QlJDNDJBaVRkUEN6WElnYUhYTDRjVkhEZzl3TlRpd1ZZLzFKQUlGaDdiTmtrdkkvUDlTQUlKNkpKWHBZS1daaTdXQlJzVmt6R0l6NEZQTVA4M1ZRYVQybXVnSjhjc2drM0s1NlUvVE00NmF0U2xvVk03YkE1dW1QTURzTEIySzZBaDF6Qy9RaDlsQUt2b1dBQk4xOEtKTTBWUTY3MjR0eUlNeEFnUGNQREthdHZ4Z1RRSEZpQkpnajk2M1h2MUlGc3lsQzlMT1UrMFNBeERQOUNsLzA0WkRHeW9UWXNQSHREZWpKNWVQaVd4QS9EQkd5VEJad05qQlpXSXFwSTFkRFpJRDdYaXlSZGQ4MU1sLzdkNHpxS2E0SDNxN2orMm9reDUrb201OEtpSTUxM0Fldm5xb201ZWliUFk0dlNVSEN4YnJ0czRDZ2NKNzExS0FkSXRWaVZIUGVEbXE2SU5uaThjYnZaU0RuOG9VSTg2bGx6K2RINDdZeHYvcmZuT2dCUFBtazZLUTUxZ2p3RU9LY1phNUl0VTNWZnJrOGZKYzBMQ2pCV2t5M0hFZ0hLTFlZdk5hWUdxOFJhbVpoRGFRSjVpN2tSS2ZveFIyRHk5S0p4Sm9EMHp5b25Bb2JlMGlVamF6T25LeE9LNzI0M2NqNDFTR3ZHUkV0djIveFF0YTNMcHFFMWNPYkUvNnhlcXh0emJid2x1MGJsK1cwRmJqNmlRUzRnUkNFdFNjVVJwK1YwbVRpelNCaEUrQlZTSTFWY2NLN0lBNjFZME9UbWZoeE9KUEk4Vm9jQXVhNmkvZWtXdE5mb2o1RlNnVlQ3d3g1T1hINWczYnYveEJGamFRQlV3eXI1SmEreW9WelduMmdNNXk5YlBHMW5QWWRVQXo5WHNuMGZLZnNQcXcyaDFQSlMzaEdwbkhoSXBsTks3emNqM1RWVUV2elFCY1FxSFhMQ2dBNDE3empTTVRzVHpzU0JibHpKRU5ISVFiVGwxU1FRelR3NFBsUnQ5MW1RZFVvNjJqdFREZUdFZkNnckVtbEIvSHBEc2ppbkt3aGJsL3lkd3paZ1htaHZmc0UvblN1SEtBcGVYTUtnRDNaSU4raWtuYmtQWmtFcTE5Qk9UMzV2bHRDcjlqK0RDcnFYYTF2a3RCaTFic254MmV6OWh2enZ4eHRvUWQ5OElwTWFJMzVJZlQwQUtYbDZYYkpOVXg5UFhvMGo1MzFDOHFWMjVBa2h6MklEOGdBcnE3YUhZVFkzcTFwd3Z5NWhkREZneS9YTzVwZGhzTnQ5UjNhcEZkOXVqa0t1UHJKQmVxaDMzSEROZW10bzhTdDgvU2Y1VWE5eHdONWRGZFJlMnQ3clNGbnJ2a1RYa1dCVlhNV3A1Qm8zMnhFa0hwRWJYeW1kcW9HVU9GWTNJdE15Qzhydm84SnplMksyQ1A4dXRmTkxaMThVUExMOWgzVXo0TW1PQVIvUENsLzZWemVqclVycnRtb0IvOEtRa1d3Qld1YVRRNWx6Y1FpQ0FwNkYrdENYbk1sdXhocHNBd0hiSXZqcjRDVXltalM5eWNvcHJIZFM5YmpZVmVVTWI2S1V2S3ZQM0hDRXFTSmZrZjh3Z1cydjdQYk9zeVVmUXJNcW53dkFlNENyTVJqY3RLNWxuUmhEK1VXbm4zUlE5V1cySkFhOUxYdWVzOHpITTFVaWJCMkJWM3VRNVMrZ2g2RDdGK3pzVnM3SXVhSDg2UHZTK3lxT0pJZzZOb0VUZGYzY3dFWVlTVWIweXBpTHo0MEpYYjNYQUZVMFNHYnBEQ25xUkRkbjFGVS9ya0k4Q04rOFhsZjJhbklPMW1BOFZTc1FibkJrdjZ0cTRMV0RISXB1dVBxNXJEN0RLYkVrbU1yYkNJa1R6bmEvMWJxN0g1K0tYOEd5dTlERDhneHJHbHBUZUhsSjhoYTJSeDBvY0lXV2tQTlE2UmFVcFVxN2QwM2hrRXJCS0c4R2h3RitmOWpLek80bUIrUG4xUCt2clVkeFp1RENCWGNSMlVIWjcydy9TdExNY2x5SFc2clBVMlp3OWJ3QlM3R0ROOGtvTDRUY2hJVHh5em5FMVRKdGlGWDdSajZJZmEyTFNJY1JBRUVuVkZsL3kyZXlSUGVzcU5OOEZFenRwQW9SSkhhU3F5VTkvRHc3bzM5M3luVGhsYUZQdktEc1YvWmpwOGdOSkNSZlF6bW9VVEFxYi84SHRrS01YVlhLQm83ak0xa2wra28xUlgzYTZiU0kxNnVoNVdOTWdwai9JMzdVam03TTlQdFhCdVNCdGNYa3FhV1FxbUQxS25ab3hwOGQ1Z0F2WDRUMVFHa254TTVFWGRGQU9FMEEzOW41bjVjOUVhTUJyMFRvYWZiNUZCVmx4eVNpTjhxQU95VXAwVUYydWVaTkFLMUZNRmhjRFN2d1dqem9hQnhDeVQ0YU5KVndTM0tWS0xFdEpWN0tRRHU3ODRPby9SaEk5Ly9mQWQ0dGZlUEJ5aTZNajdPYlcxNUkrV0xOK25iWStIRytMdkFvRW4yZmRjRlNJczQvMUg3MUphS1REbGVZMER0STM0d1grcS9OTzJlQ29uMGR1M2pRdDk2NW9HNXpTUVBSN1JZRDZqQUkvQ1ovSnYxWDkxSUlJbDZCOWJpN3Q1RGpzSjZrQ1pWQjA1aisrc1VSc3FrVFJxYWcyWnZFY0JWT2lDMGZVN1BIVys4SEJ3TzlYWFpzVFVpN3JieWErMkZ0cFRuLzM1MWNsZWFVYXI5MWl6RERJRW8vWGkvQlNNbXMvWEJJamRMeHlyV0g5UHJVc0pFc1ZzU0wvTEU2T3R1STQrdXVEMWIvQUtoMWhad2lWTm5xMnk2ZVJYVCt5SEFaVmxpN3dWcjZlSmEweG85Z1NacjhiK0FIOFJJa3Y1WVRTK3hCTzJKN3BWL0VZNUkwK3lnNEsybkdaOVc4enUxT0UvQS9Ea1diWjFHRkg1LzZqa3lwcHNrVzVmaUZyMG1mVnlaMFF4SCs4VXJVYnk4dHNlN3VkT3NoSGdkVHFMbHdyOVA0SGM0MEJCWkdwNmdpYjUyUERYcW1KU2hYa1ZTdDdpMDBEUDMwTnFEUGJkSEdvNDlaUTZmdjVOTVE0YndwTUV6OWFPQWhWaUxTbXdDV0VRUG00TGdUek9BVnQxSzM0dHlwQ054NFBXYjJ2WkNqdXJhNG52N090TVBGdUtFM1E2Mmg4T3VwdzJlTm1sUG9NYTF3ckQ3WUFCL25OUnhjcHZLczVMWHVEYnFSRmtLSmVTdTJMbFc2djh3OVY0a2VVSjMrZkdtRXQ2MGFBT0d6S1kvZm5NL0RsZU0yMmNVRDlpbmI4YUFvUGtZV1NBS0dqUGM2Q0hVQVYyR3E3ZUxYblFIRXp2MW05RktuQWk3eTUyYXFyK09pTFZ5SHI3d01SMjNscUVia0ZTeFkzVkNROEYwb2UzaThlelBDNzNmSnk2a0Y5Zk5OYlZxYmJoWjFuTTRaVmtHMTNCWFlZdVc2emJ5YUNxeU5xaHlHZWozUVlFcitEVkRvNWlUVWZpWXBhTUJQOVowdG9sNHBjNk5OZlAwWkVzbTllRllHWDVNWTFEQWxQRjRWbHpiYzBZN1RzbEx3QmswbUZUd1hSVFBLeTNYeHBMWmc0WklXTXo5dTYrcThmRExXVzMyRFBHNzdzYzJJemMxVzZqaHREdkdTWTh0bkdySWNZSktmVmFQbUxESzVJNEJYNTdpYVJqSmU2cDRQdlNVdzBwTlg1K2d4c0dMMmh3aHJaMWZRYXlDeGlYUS9PdG5FQ1V4TTBxSkQxa2poYVhEYmRTUUhNRTVOZlNpSmNjR2NGOVNBUjg3dHdSRzh0Sm9CQUI2WVFGRFRRVUpnUWZ5cUgycnQwcU4vZUtNQnJ0MDFhNFFJSDBwcjNvRmdlZzgxVndiWlE0NEJPZEhaL3dSVG1zYjFOM2plWGdhQ0dyUlMvSEw0cEpXdmovVzhEQk5FWTU4azdJS0M0SWxld1pPV1BQY3J1RmRYNDNRcERnN21xQ0dYSkZad1ptdnFaaUZ4d01YUFMrSVdtTFl0bGVHSEZWU1laVUIzNEl0TVo5REwrNy9MZGQ0S0ROalNkNTNjM1JDNElxd0xuOEswMXlxdnhab0xqYkNzenowQW1BUWxRbVVIMndnQ2VHUzM0WmpiRG9tUHhzNHNkeUlidFAvTTNXZ2F5L3BWUlNud1NTeWs5bUtvaXFkaGxhNlhPc2hyemMyMVREeTFldVUvMzBPaHlwQkhDUTZyWnZLRVg0cEtWMDkycFV5bkZadldObUNKZjgzWnNZckl4NTVBNlhkWnV6NGNDaFBTd0hlOGNxbVRlWFBWQmVSSTVaTXFHTXVuUktQV2xlbUE5bUQrM3FESHozbm5yVDFSZGFVbmNrVTBBbktnbGowNGIrakJZWUdWNDBLWkorczQvZEsxNytZRDA3N1hBcGpCRnhZMlM0WkRkZm0zOXYwRkJ6NTd3N0NrRVV6eStVRzNqMU9KaE5FL2kya1pqM0ZsQ2U1VU12MkFVSi81c0dKbnoyN3FUakp2d1ZzVU4vMzJnQnB0dUxqeFhTMVVVbFNTajMxYVhCbVQvMjZhMUc2MWRuUm92c1pRUnFlTWlQMVZuZWhKZGlkS3U5c0kyRlBGRktDVElld24yZC9rM3o3OVJ3YURhMDBJVXdyUU5KbmQ2dHZtZk92eENHZ3M4NzYrYWo5QnNlZzNtZ1ZxQ3Vwb3d6cEN0OGJuRmdUTWs0NEpicW8zQVdwams5NlcwcU5sQjMxZCt4YW1oU3B3V041Mk54ZXlySnllVnA4YVlCeG5EVkczZkE5UVNoVjloTW8xRHpwS3JURjQ4VEZtMEN2a2FuYXlISkZ2VThBLzNLalF3cEEzSXloU2hNUStLZVAzN0p2S09Rb2hQcmxhKzBQNi93S3pEUWUwanpEWTBjVVJxQVBlZms0WC9kWXRnb2VtemVrK0xxVEdob1UzRkRkODQydzYySGg1Y3dTMmlOdzV4RUw2UXdVODFwMi8ycTA1RWJJOTliaTd5dHVyYlp1VzJjS0tuUWxqU01tZUMxT0tyR29VdVhTRWQydTZQZHhTTHpWOURjV0dWK0xnd2Z1aFYzTXBySk9mTHFJODhtbGtjZE9MaHowZWdSUW9XYVhvYUZnbFJMWE5JaDdCMDFVYVcveTZ1eDNvN2pEOGpDdG85RFRuZkE4aFdvR3ByTiswYVVqV0F5cG5YVXRJWGRwbUVhanc5MkptQlBYNXliRElxOXBHZ2VBK3VTc0MxQllpQmkwTkZBSnQ4bmF2NTVKMlNVUnJvRytGdHRXYWRuQzJlMWowbzQyQ0pndEYrVnB5SkZ4OGlTRHgwNmM4VFpkSElpYlRLRTBXWXp6ampOSjBNRDRiWmtHbGZKVlN3czhUanp6ZXdmMkNaZXFXT3JxaDNzKzdEWjdCRWl4VlloeDkxWTNGR0dvODJZN09DbU5nYUZ3eU1Wd1Q4WDFtRjZqWTBua0pCWFdaVFN0cEdBMGJJdUZYZnczSmZsSWdKODlJNXFTdHpOTzBPMTV0TUxkZDlXZDlWRW11MFR3WmppNzgxRE95WkN2bG1STmNjcFowN0wxOElnY29lSlNSZ3hZcFlpZDJzNnFhNTBYQSt2K2l1YVVTQ1duZ0syOGlmQU00ekhrOVIrZDRzd2U0QnpCUWs1NkNBaEdRdDRjQjZhVi9mNloxVWtUUm9JTGV3NlhDbFJpY0YxSDJTRnhpaDl2SCs2M0dDcDZySGx5REhDZU40bFY1alNnUC8zblg1cDdXUncrTTk5MzhiWGtyMVNDZ3F1Qitxa2FZQ2wzdHNUdjRQMk93YittcDVSajNpMStmOEhVSVRRVG5MbG9WWHFEZWozRFIrMmw2TU1LNWorWnJ6WkN3SnVTYThxa1NHTlNaWlAwTHJSaEJndkxIdnR3cldVNmZBVDlSRFNuUXh3MXhJVmhTUXVSYlNJb0hHc1RGTTBFekpGZ1FRd0NLU0NPTEtUaHBEam9ZekpHQ1NUTWJsb2tsenk5THhndUxXeGRYTEpjVEJrTWJxSFA4ZzdTeXY4TGxyRzBtbUVjMjUwd1lOUmMrekxNdTIrTUpVREx2dVB6TkF3T1JnN0JDVnlMTnRLTzVXUit6d2RnZVNkU1Bja201VThIelN5eXVDTEluTlhpY1IvK0V6NmtYTGhwemREMVFCK2dBYk9YcGxCc2JKcGVTUExDNjhIeTQ4M00xZkR5Y0c2OXE2QUlHWXlaUUhRandkdE5Zak5aRGZ2RkdaUlRoZnNobFpDaFZ2YTA1Q1hWUWtXVkhjb2lrM1pIMnlhSHJQMkIvREVaUjBXNER1aCticHVqTTZnbEpxbklKVjlNZDZkdGZ2UnpiQWZ1UkF1Y1hiTWVCN0V5UWRYMlVDSkpBbnYwdll1dndnbVpvdE1RK1VORUNlc01adjJDWDNDYWZyTVRveVBiTHhxc01UcFdnc0thWEJhS3N2TmdiemhlUzVpVHBKSXdXNlczTE0vWWpxN25pMXY3cjNMNlgwR1lDWUIvNTZwaUZ5b2ZhRXl4cnd3eTFlREI2MEo2dEhmaWJZQlkvZ0w5azFoZFM2dW5RcndBM0JxTDBJNTJRRCtKRG5QQUh1Mk1hcFVBa2RsS3RJR2JtZlFxQzN4dFMvbS9JamNPVHBjY3g2a3RpeU9lQVJZRzJDRjVKUThlQmtQbVpOdm9BMmtZNmk3bVJYMUVqeVhTWEZqby9xTCtqRDdyem8wY2x6MDljQVNBdUlsNGdPWGxTaGFCbUZoRXNRcTVFcWppaFpxQ09yUitQWXpQRTBWOHVWRmw0TERGYmgrQVVIZmt1bElpRXg5QlZQdUwyTm9ScVhoYWJWNWRQMnBQcThQYUhwUTNzRm5IcS9xWU1hQjF2U1drUGVEbnpwMERhVWxnSXc1OWRiT3FKK1k1L3lNd3UzL1JMNGJpR2k3UHZuK1JNeWd4MytkMXV0VURvRGFKZU1ucW51U0puSVVjNmkxLzZOT1ZOWXAvWFF5eFZWRTZJMlZJbUlnWVJhd1ZMSHJtMmZwSU4zZkg0QUk2QSszKzZ4NmduNkFNTEZlTnNON1V1ZVFHZEJHOE9vemVaNFR2UmdmeFYvMkxJVXU3RzR4OHl6Q1ZVa2dkZ1VPV3poNXZXN1RHeXpBWTE3NzA1VzVtMDBZMWMvZFRMdFBwNW5yVDEyQmo5M0RwM3VuUjBuSmhXaWw3OGpCTWVuMlU4MFA1VCsrOTRxM3ErOVdDZVZYSnc3RXVOZjlDUTcrdzdHMnBJMU9NcWlBSUhwZEJVOVpyQlEzRkM4OWs4OVlMRmxOQkVkSWtMajc3VThOSnh4QWNKR3ZhSXlmVTJRSzJnNk1BTENqQnZuK2poYlM3RmlkRHArbGZiUXdJUENmaVBZU29yZVdnc3dHNEN2R2hTQ0p3NDh0L1JtRFJPU0hsSGE5M0pLMTgwUTkzTCtiZW1KVU51MUpOMkF6RldmNWJENFl0cll4aEJraGE3Rm8wRXRFSkt0N3Fqcm1NbWcrWW52d3FkM0Q0bFdjTzI3eUpkemNXN3Z0eHJVeEJxaFh6cklIdVo1YlhqaU5nTWJFRlZGVmxNaTFpRGo3ZE1WMEdLYkwrQnQ4VXVFSS9kNy9iMW8zUDdPbFo1MEcxZWowYXpEZ3hrV25WM1grNHFueVk1Tld5blhrM21jdTgwMjlkVlMzRFkrOWY0T1lEOUVzTXdSbjc3TkZiMVNSS2NIdEZXeVBYMURYL0FTU05vMlN1N29YYVdCdkI5TC90UmhXdm42WGQ1anAyQ1Q3YkZSdzFpY05jSVdmeWFsbWZVOWY5T1NMNTlsSkhJcm5NSHEyTjVjMU9RcCtOeTBoMmRJSTB2NHhlMEZwZlBIc1VFN0pvZmV1cmxLTG5SWktZZjlUMkcrUDU0YklncTgwbWQ0QkYwdUdZVUE4S2Z2ODdNWG5yZFV6MEora25GUU56RXNNekpCVENuZFhLaUwzbUFMTVg3WHZCZzdUVFNvMnhHeTVoTzF1ZGhINlJLcTRYRC9OcEVlTFlRVkdMRmpoL016bEFaK1BwZ2JzaDJEVXdOSW9GTHhhL1hCUlU5ZG9wUDU3d084QVhsQ2hVTjRUQTRwVXVSRzhRZm43TlNQdWUweGhuVlpPc0V1N0x2ZVpCL0txOWFFUjV1UktzeXMvTlFnOStSR2RabXdEdHlRWE9BRTFaOXZWRkU4Z25lKzNiRGppb2k2bW12RFRqMFpDblUrenhadEovMWlKbU16S1pYYm1SdmUzeW1YdklFdld3RGlMakw3VXdwbGtsczl6TUhRbFJDTFgzYzJxYk16V2J0T3pRNzF3ZlRzWE5hWEhmR1BBRkZCZ200Z2hwZXdjV2pjc2FxL0grZzhGK3ZpaXR4YTlBSjRCR1hrdWJDZlY0dlZoYmk3VmFnWHBSWUVpV3R6aFZKQTlySHVZU1VlMnBIMGNVZ0dhc3BTZDNVNGJDQVlzMkdwb0FXcFcwYzlHQWZ6YW4vandsUVQ4TmpDczExWmhpUndPN3J4SS9QNzJhRlFXd2luY1hJVzB2eG4wSkxCbytCY0c4SC91MWllSnl3ckV1RHU2bXBkMmpUTmU2QWhjelU1ZGE3d2U1T0xSdUdkUnZ2UjV6S0krWERRVU52aFhRN1ZGQ1RkcXoyd09EQ0FRSUlwL29HbFVyd1ZRKzl2ZTIrSDVOK1hNQ0tjcVhHWXVuOEdWWCs1anlIVkQrKzdlK2R5YjdkSUpROTJPM2hGT0dKZGJINzloMERBcWVVcjhJVEtaNkpqNktYVU5ONlN5UHNuNTJPb2c1bEh6dkM5RVBwOS9RKzhrUG02cHFTcHhhUEd0R1lhTDdNMEpBb3BvSFI2QmhoRWlLd1NjRnVMcTY4UDJmZjNzNitabUlXcEdpUUpEdHpJMHYvU0JUNnVMM1pTbXVtSkplVmhvRU1VeVJYS3BUQUhmenY1NS9vQXNEMFhzR212YUdKT0xLa2RzWERiWmZPWXBuR0FHdEYzMWtMUDhPUkdiQmJvOXFhdjNVNXVsbWZhOGliWGRKdmE2NHlmaFNqdG85Y1RPSlRvNUR6L3FZWFBVelJxWDQvZUlkejlHa3p5ZEVPbjBmbTRxNWhWY3pGT2N2Zm1lUUY3TFJtYzdlSDhReENralF4Nk9YdmpNbENRVGdKdXBKejR0WHA4VUZOb0NCYnVVeElOanh5N1h3MWJzVXpJeTNNcUlHWGtFcGlLNmZsa1dpQVRiWWRVb1Q2alU0TFlUcGpXd2FianpwS0dFK2o3TlVDWWFpOTM2c0JrYkJmejVJRFU5VUUzZUdaN040NFNOVUlYeFUrb01WZkUwZHMxSmZWakxtdytpMkR1aDdGYnV2NHJSdmpDSXVqTVFVb3R2TGg3QXZ6WllHR2NucVpWeStwazdZdTlVK0hnbUxyc0Zkdmx3eGcvdU5zS0k5NG1KaHYyOVpHa0xUdXRyWGsyYktoMGkwUnpCSmZyVzR0VXRBSnFkNWo3cnoyc3h1andVek83SjZRTE5oWm8vSGpRdUZoQUgyQnhsUGRJakhaL04rRlBIb2dmN1M4K0xUL1loay9wTERweGhaWUQ3QXJPYUdBdzludDJmWjAzSzlrU0FtQkQxRDF1dHF1SGg0NWtzWWZSK21CL3N1eFJXN2N1bGV4VjhDeUFXblY2VnB2alhNRWF6WGQ2NmUxNk1xZlRpQ3ZSUlVMUHBrbndONXRLU0E4VjZabnlCMGEzdUVEUHNJUXhkYlI2ZG9sdkhPRi9mU2JLQjBVUHV6eHQxbDdTUkRNOWpIbFdaQk1RMGhRQVhCWDBLRlFaczBMRGltMW14K2tnR0Nnc0lwUTh4cGM2VHZ3NHB2YjRFNVE5dklSQ0ZRNUNmbTR2MklHR2NsbzUrb1hubzhJMjZkWW9aTTRtVXU0dlV1blR0bXJNNEZMbW1PejM0dlZGNUpHOFUrVi9zcGM4SUxyUlJtazJDdVIvNEoyTHBUMU5ia2lyUUlCZWgzYWY1NGJRRkJuNVc5Z0pDaFkrTGlJbWdNS1J2dUR2M3crK1kvVE41alFBcWQ5aCtGTHNaejZ5NE1lWm5vaFhiZDBhNW4zMldNb3ZlVkh5WG5KTnZEb3VYZm91ZjJUK1JyMkp1RHQ2TGIxOS8wNEhHc2ZjQUFMODVoY3BqTGRWTmhSYTNXMlNhWjliam84aWFXU2lpYU54MnVnMGFNWnFGeE9RMEczTURweGRSblJmSU4xNG54RmowdUorWmpNRWw4Y28rVTJiVUE1bGxUT1pOa2lXRXV4MmVoTndQUys0ejlFYjhsZEN2YWJMQ2FlcmVOUkJCb1ljaEt6WmZGREtSb2lvNzY1cTV4eWNBbjA4R0pqUk8xeC84ZGFkRyt3dXBBb2tMVTNZd1RDS1pNakNHekpJSUdqOEFoR0NDTURseHhxUXl5azhuZTBFRWxlRkNxK0JYU3BzWHdoODd1MS9ydHNEVXFnV1V1S1NYenJsV3JkOTYzMS9xcVVucjlKaTBkeHNSVWxMY3lrNUJ2ZkIwa2RqRjBra2lNOEFmejF3Z21mTCtNSElndGNPazR1V1JubS9PdzRNSm1lVGtDTFJiSThWVWZWT1EyZDlPZEx0MGdZMXVKSEVNOUlDK2pwR3hERTM0aGYwaHdHbVcvWjR1YjRqNWJBMG9KakpXTklQbCtqMmo2VXBTZVNHbUZiQlorNnV4VWNxYTdKQm5lUmJQTzVSTWdZRWhGTGFzOWdaWkJsbit3VlVUdGJFRU1CVi91dVpZMHVLQ3RkZjNoWFVHeFgveDhZVm5SREQ1N2lqNFlSVTNKbFhWemVFd2J5bm41NXVuRHZ2Y1BzVkw1UXBaMWlZMXQwQmpqTzIzRnFxdy9nNmRVelNMdUc0RndkM216bDdwR0VINGkyNXZaNkI0NjlaeEdRSnNiQzdrTXA3cDlKcWpmNGNWazhBTmFsQ2RvZGFwcDV1L2gvSHZoUXVPQnNLMGZ1am84TnB3cEpvZ1U4dkdtQ0Y2cnNUMUxOSjkrUFNQOElSWTdTMnkxckhweXZlYzhrQnRNTzFyNmozYTVISmF5c0xqL2ZDVzIrVXlVbjBaRTFsUFQvbjBnL1FDSDVmZDQ3cHppYTV4bEUxNzBuek5ydFo0ZjFrbnBsU2c4WXBka2RKbkhxeUhZUlI1VUI4MkhMRFBZN2hUWjB0cDBDN2E4RHRKRm9mb1lRMCszZmhDRlpSWTMwTVRWeG5ZYXRtZ2gra2JyclZkV21adko3QWJOeHF2NWx4ckl0Vm85azZWbllEWHdGbCtTc1J5RWo2OUUwTG1hY2s3emFYVmZrNEVnWTFoTnJCMWYvd0NZbm5RdzZ1anpmVFY5NHVpeDlXUmY1M2Qxc0JFNW9qcWNNSi9xeWZVaGpLMUdiT29wdXJKdmhLNG5kNm1CVEQxTjdVdWgram11MFlobCtndHJsRHl0Q3Zkb0JXamRqbUFzU2x0cWlFanNaQld0OVRHLzJSRzlhQ25xdVB4aHc0WXBxWE5NZm03TlZ5dk82UTR4cjhDd0FuWXR4RnRidGd5TDhxQlJ1TnkrbjBxSXBDdjZidVJDRkxMaHhaT2IxUERHUlB4SXdXeWVENTdkNEtZQzN3eHlsMG5ycS9KcUU0MkdBY3dkTVBpZ0o2VDkwMW1qTVNlYW9QdUZUdjNZWCtNMXBKdnBjU3RWMXpjVVFDQytjVVkrV1FPTkxUNWREZjNMNTgxYmtMVGJKMlJDbFF2TkU5MWlvREhPbkN1dDhiUzZINGdKT0VkeUxpNi9nUUxhdU5POWgzYWpGUk4xVTQ0UlJVc21SSmEwODJMTHd3c3JkU08veTVPY0tCN2JRT3lOcGZLUHNVQlZUVE92dEF4MTVwaE9vRVhHeUNndk51K2lCNnlHeTdZczZWUW1wUGRLRDhjeGY2QmU0aUZtOWNWRmN6MHQwaGtTRVp3ZU96UVVuTFVoQTBqbGtud3hqQVprbGVvWm14VGUyTUgxVkl0U1VacExScnY1YmYydEY1VmNIVHo2UDZsQ2ZsMHM4Q2xZTjdrK2RPVGUxOGhseG1ib1lMNkRaeU43L3hNNGNlenh4Y3V6M1IyblFlRk5wMThVRmVyaEhKTW05N1lqRHEwaWY1N1Yvd2ZxaVZnaWdPTHV4OTZVL2FCNFA1aTE4RytKZldaclFqL1doRTZEa2podzhGdHRINmJKMHorQlNLY05ZYkFTZ1pjcHR4ZFMwMjN6dUZFUk5EcHkyWmZYTm1zVVZZc0FIakFVTWU3U25BcDg4UVUwYkRkaGhkRFZJNHJrWlZGV2ZEVldnZFY3dTI0NnlrVzVUSUJZVlRYWnJ1aEFaRCtWdThNRGhpS0R3Z1JUeGdYTGpjR2pLYjlNRXlmK05CNFY5aWsxSGw4VWNZTjhmbG52dTROM3JHL3U1bVpySnMxdTBoTVVlK1loc2hmTFNlWDN4Y01UZmFOMDBNS2oxMnU4aVRkY0ZlN1NBNDY1ZXo4aGNkYnBkSEx5aWNPaEdLSk4wdUQwVkNzaXVhYWdKa3RKTVFkSHJxeW5QK3g5Wmx5R0dyUVBJeW16ZHk0ZGdrZXplWU9EdWMya3ZYYlIxUUhtZ2VvamZ3Qm1JNUI4STM4cS9JVVU1RXJ1VVdiYmU3TDdmc3ZqQ3RCNkJpTVdTaTc3OHoyYmluSkdZY3FjdWd0aWhvV2JQeTdLSU50K2VWYWZkb0U4cXBIMzBmWkZEcDBRcXhuMWpDUFVLcmlpOGpNdVE4dURVejBieDJOdHVDeHY4ZGl1RFJsWDdWb1VPd0FNbTBROUdmSHBzeTZ5Qy9WSWpNSi91c1E2eGFoRWNTMW4yU3RvOGRrYUV5N05IdFBlS0drN1kyYmFjNEZkcytIUjlCTTU0WVpuZ2RTcWxJYVRIdVFwU3p5ZDRDckVoSkpxSkhhbjV3VGNwZElvZ0IwV2ZxbjJVbWQzRjdpQXJEblJFLzZNWmg1YlAxVVJ1OTJERlRHc1RmRU9YNGNyOFRqb05Tc1dGSkljUTdtOXIzY00rUEV0QjZ5MEUxTVJjK0pjc0d5OEJUSUN6a0REdmRtZ1ZXUTkzNjFrQm1Cd0RyRnRmTzlHSFJ6elR3emFQSzB1YXBnQVpVV2RUdTZwT094MGFPVThSYWh0WHhROFN6UktRUVNuYU1LZVUrTXQzRytDYVh5MzZWb3I0bE05eEVWWm5mTER1aU95RG4zSmZEc0hkWHVvTFlLeTduamNzU1IyZnlTRGNaVU92USt3cWRGODBSV1BneC9VUnZRMDhKSk9hdDNpVXlpS05USXRqaU1SeXNMK2Z4bFJBTzRpc2JaVW1TVkc5T3RPTS85a2FhZTliTDdwTjBiTGYvSkpMamhkemVnN1RSaVNuREd2U2VmSXc1T2tGSy9vTU9uR2lDeDQzcW5rTVJLZ0c4cGI4ZXVFK3dvby9ncWFTc0xVVGErY29RSlB6cUtzOTNvZDZNTzAyNndiWlV2TFhXbHE0QUJQZDBmT2pFUXdrYWZtSTA5Q3o0S2lXNDhBSURhOFpQNDBVUDkzd3JIWWZ5U1VlYTNHSkppWEFJNmdDd3Y4TUhGUUhzeXZLSjJSc29iYVFjK3hWdDJ6L0dxakpXVzFROGUySm9CbVRyd3M1UmJnOHJoT2pIa0R4V2JPamlWb0dDSitaYjlLKy91amhRNGdRWUIzWkxRMmJUK1dJdUJxOHlmVURKeVl0cDZGQkMzUW5nVFdnQU9rNnBtaHFqYVpSeTliTGJiUEw5U1FocjdqYlZEZFR1bGRUU2c5cVhzeHJHL1VwZy9WQ2pXelVuV3d3YXN1THlETnVyT3QzV05ySUY1M1EzT2k2NnJuSFVqcmYyMVE3UGNXOC9RZGc2eWtrVDhwb0VWYTBIZGRUdnQyZVZPZDdaU1BGVWx5VXZyK2NrM3VPTUg0TFdHNWwyRTdVamhtb3BVME5BMXVoT1prN0hubXZ4bHdSbTlNd1dEa2JjU0RBT3ZaaVNIZmcwcFNLY0hLeElGd2lkZ2hFWjVEa1dCOU80d3FsTDNlakZ5TGNNL3FqMitHSzVkK29XaEJGWUdwYXlaQ1dpcW1KbktRQkNBMXJoS2ROc1Fub2lPQVRHR2tQdjk0K2dlc3ZMM2JId2hNM3JJc3JaeXpGd2k1RG95WEYzU0RUSktXRGptR0hzYXFUM2s3dkNzSm4vSGRZZm1yeG14SC9Gc0hSRjBJVG40N3ZtM0Z5V0I3RTVrMXV4MXFibmpMU0x1QTQwOXFQR0kxNnNxSmRBZWdrMU13QklRSHlGb0RFMGlBY0hJRk9tc0grSklkdHE2dWtmUTdza1JCNFBuZHVsQUdIWktTQWF0akloYkZ2R29xeGUyMnhINlNVMWNmZThXY2Vac2RzaFhscTJQbnp2UXBGbExCRUdYdnJSalFOMjR6blRjWnhSQ243elByNjlseFdUUEpRaFNkbDNTNDdBdzJTdmhWbzAwK3hQT3g2MUczNUxmazlBaWdUR01IQzJuV1JtTDdESnpTbmR0cG9NKzZlMkxFUUhrbzBTUzhYTEp4VkVKb2VEWW4wT0htakdLSzNrdGtIRitHclJXQWdmNHZDbE1HQ09OaWpMM1R1ZXExaGptQWR6WlJ6cFlaeVpiODk3NGFRa05DNWI3cVJvRWM0b2puSktCblBaMVl0ODd0ZGJrb1BYUm5XaEcxRWtsWGc4MHl1L2ZNL05TbHlIY2owdzVXQWZvelU4K2NTZHduSFNNUURDQmJqMGRwc2VDUXpzYmFBTXRINWZXelo4YWNVM2xSWDZUUWljUE1uZFczUFRLWHBvTWdJYk83Znl2d2FCU0x1OTVjZkhWQWovdHptSVd2YTJKd1dYK082Sm9Bd2VJeExBZTVxOGJqYnc0eGNkdWdVZzByMFdYamRGWVFra1RQYi9jc0FHZ1p6NHVsS09Pb21vRXhBS2QvVFd1OVI4aFg0VVQ4N2tzb2VDMkFtMVVnSGZqOE00N3JXNUZEY0hMaHFqaUdydTBlOGVuQmpRTWdtOWJaYmFtYVNrRkZDMXBIais3S3ZNcHpNS1QraUV1YUZiQzd5eS9IY0NzL0QvVjRHcHUyT3FMcWtYbTR6aVJWQ3BNTFNoRVpyeklESTlVcHB4RDc5TjY3MkxKWjBURWlUZmJNYnpKRmNWTDhWRnlhVHczOTVKbFV1Y1htaTA3TnF5OVI4RzQ1ZTBwMHA2a1JZYzdJRExxSjM1OWxzcTY4U1l6aDRsbW51N2p0bFJkdCtFdTF1VWZsYVo2by9ydmE2YlRiNTBWT1JqVGtMWStCUThVSENSSEdRUDRvTDNiY3FyeG9vTEdQWFRsY2l3SXA5RXNvd3FxYUM2SHJIWjJCRXY0RGZTZ2pMNnhEZEduQ2pjWDF2eS9hRFFvSThhejYvUmJpWWpsWE9HTDVXaTR3aGwxdk4yYUErUHdqNlBqWFRZSXhyUDZIRnBxYkRob2RhM3dGQWJqOE00ZEVxakRmVzM4ckdhRitkZFN5T2FrKzJxcjdMdWYrWFE2N0taK3pOWVZnUHRUa1BKdElrdGg0ZkNqL2JVWTJqV2UrNmNpbGF1c0JkQXFES2pkMFp6eW1kRG92cjhLUUIySXlYSEQ3WE1JWlI5OW9kRlI3TFpZRWJJejRxanlGTjNRSTNvblB4SlFsa0pxSXdacG9OeStkYkhCQ0tTbWNNVU05eHpjR3kxS3ZWS0M1ditEMmQ1Q2VkRE4wbFZIV2xYM0daNGE1VmJJR1FibHdyM0ZEV3J4RG83MDB5OUNCM3pyUFRQeCs1S0JVNGJVbmJsUWY1dnBBb0ptd0dtck1QN21aeTdMRnFyRUw4c1h6ZmhGOVR0QnY0V2NubjNBN0dJVVE5cHVNRFVWLy8xdFRpRzMzbEF3bmZTVGl6UFRubUFMcEw5VzBia2lWc2d6YlB2TUhabU84d2k3ZnhKM2t3eVhZRzNlTWhUcnROUFpwSG9lUisxMmM5YVRiTVBKd3NBOFRjVms0RnQ3TUZIRDNoWHpDZVFnK20za1p0VzNRUGQza1dndmlzd2lMdmEwak1hOENVUTlqMmRFRUtUOC9MWm9WclFWeXA0N0R1SDE2T1g0MGZiQWVYYW5GTDFTUFpPUEpCS0hkNWFnNlpHM0NjZHROMVZLaDdrSWFUTVNvaDB3QVkzUWMwTU1zazdBdlVEcDgzbjMvWDNOS25nUFRoYVFldGtHRGNPekphMHFiUHNpUXdiaDY5V3RmL0luM0NpVEdSWmwzZndLYW1nOC9aRGRFQk1lUDM2em81ZGc2OWxlSFZ6U2ZLMVpTYi80T1dlanJPYjVMd1NtZXoyUW9UMmNGVHN0VW1yYmthdUY5RVQ2ODUzT0FqRzA5dVJiUzhNU0k2ZVN2d1dtcDVwKzJPbkc4UmsxdlowZnF6QVQ5RjRPdXBlRmF4cGk5bERTa0ptU1VqTkRKOXJmSnRDOXdLV1l4ZVNreEV4eCs0ajllZVpXTkw5d1VqdmdlZHBMaXQ0TndCRFVyMjBFOS9lMm9pVW9VWm5VNzBnNEhNdEFRRHFsRFI2QXN5cjZybm5Ra05odVBoTFlwSC82M1VFaTR3OFRGUHUrQVZabG0rdXFweFJzaXJCTlgzWFRNTE9hL1pVMkRLV2dYbkZaeEl5R3I2SjQ3YU5SRFQwdkR0ZVk3S1lxaFZrdzh2eCs4S2VITUIzcDd5cDkwandXanFnNjJ2NVd3eEg5TUluOGxpbkNhUEU4bTRJS3VDSE1acTUzbFI4RWV6Qmt0VWR0QlhpSTNUTXkvUVZBVjl5UjVvUzQ1MWVEUDRNVERYeWVJRGMxNTlQdUVia2E0aHBOTVRLb3lpRnY4dnhUbWRzdVB0ZUxGdlNYeXd2NXpWL3V0cjNjaGdRSjlnK29SbGpGVjlxdlA1bHRmaElrMngzNk5QNk1yUFg3enkwQ1RKaFdXMHo2RnM4anBXK1RpVGU2cWFHVU9WVC8wNENRc0F3cGtTU0FYNDl6TnROMFlVd016bTl4bUpEZDMvcjBreWdmeUZkakJOTlVla3FQam1HUEhFQ2E0aFdaYnlQTzJPTWp4eDNDN0ZNZC9sT29nKzcwcjI0UGRQSktvZWZrSm1iSWY5Mm11d2JjdktVMDlxOWlzby9lSFJRcGZ1OUlxVndFNkZWVjdCeWJnQVU3ZWpURjRXbGh2K1dBTHh5ZGd0M25xaHNidElZNCtEWTJNdlljN3FveVpqOW5wcS9MUmRod3F0clEyREhFRVBxUmdERTl6cnZYNDRvUTlwYkFsQ0V6SVNEemdXL2ttMXpyYkJpYW9pK3FMUUhKaVF0UTZrZkd4ZWFPclJVREZwcVVWdWtkcXl1WTN6V1lvUDdYeXpGZ2RRUiswV2JnVXhrZGpQMHpwWEdQbEd6dmZtais0L0ZmVjRtNWNtd0M0OXFNeGErbFpYNDJEMjE1TStaVFpzS0JBMjBkQUZIWXVWMVEzUEZ5cTZDM0JWaGhLT0RmTzNEb01mY1dWSTlrN0loZitNanlwSUhpWFk4d0t5ZnJLZCtjM00yU1piNEpEY3BFQkxyQmV4eTlFSVNweHo3STdEWHZvYlBEelNWVVEwSXQrcmRqeEpKSGUxelNSd0xIN09WWk9MZ2FIaWpyTWtlY01ZYzZ2bkhBcTU1eC9MZ2s5NzJVQWtoVnorbFJMT3plbDdodDAwZW5nUVcwanp0Njh5RU11ZGNsK1I4bHczM09taU1XMGlsSUcxRXJJTnNJUW12bjRDREdrNkdOR3k3dFA5K0F3aWVyN3B2VlNGeld6NUZBa0RVQlpOQ1E1eThVaTZKUHZjNGJvR0dMWGhybm5QZHp3SXdrYnlzblJOMnZna29BZWtERXo4UENkRjJTVUoyaGc1ZitBVEk4eWZBRnYzYWlMK0xpU29hRCtnaVVyV3JGVVdVNjRpaDlwamV5aVlIS2hnaWZwVDFSdFRESjR3bjBaSFRJQzM1QVd0eDVLb0krVmtzaVU1RHVudHJKdWtGTlQ3d1M4cDFhY29aemlkYWgyNVQ4SzRKbzN3VXhaMFprWnpYUXpoTmM4bTBhSFJSY0h1Y1B5YnZUQk1pbWZRQ1RIZngra09NVWsyQllaelVXWmkvbUtKWHBIRXB6V2wrVnZNaUZ2TERERC9tT3JqMVBjelI1WER0ZnRoM3h0eTdzbU1nWEQ5aWFVN21CUGpYYlE0aCtjUXdKZi9RUGlzak9iVVoydXlaNi9UU0R2bFJ0LzZ2S0NJQ3R6ZmlCTXFRNmtKK3dxamhuTENvSXdqa3VYdEwzTXg4QnZTSVdXeWVwOFdrZzRUdjltUjhwaE04bkNOWWhnWERiZlJFMGhaSVpZS2F1UGdlMlNNTzd5bVZBOFRoUVBPdDRwM3RqVlI1SjVIOUQxczAvU2xRTCt1ZzdFVUduRkNld0Rhc2o4eXlYbEx3WDNPNSsrcXJDU0s5alRsLzRhTEttdG4zQW9uVkh4QTl2Z25VeElWT2RqWkZNZjF2c2p4SUhKMysvZlBQWVZSVDZ6TS9Bc1lLRll5N3RFZXJ6V1BXOXpOVFVFWW42WHJUM2l0RTlkMEFkY0p4dW5HRkZSOGxGZ0NLYkZBYjlYTnlqcDVCa2xMZkdSQlVwOFYyeW85b3dhcWx3QzJhQmRjVHNJanJXTFVzdmFrOUx0YzFwc3FzOE8rY0s5YVZMcVc0OHc0T21Da0NOdDFxc3NPK0J1bWhlcW1lTW1SL2puVnhjdXF4a3oySWdoRk1uUW1OSmJtTlpuVFdyQmF5YWwzWHp0KzdhWUVHcHgrTFFUVzJkTm1GZDhOUVZYd0QwTWZUbURwYm1Xc2VKWndBMHhHRTFYODRLVzRWcGMzYmFKbkVlR2djditsWHBGZzZSMnFGS0pMQlR1bzdoTEJhUWR0TXNZemxraVU1QkJWN01sTHlMeTE0VndONWdhbW41UnBTWWRud1dGdk5YdGpQQmgyOXR6SXNtZGxZTHpFNDYwTzhCbmxHdmRsYU5uT3BKVUtLTUxTT2JaUjlsRnZFTUxZVXB6WTVnbFc4V3g5V2lYQUR1aFhFbittNVJOcklaRDNBVkF2aWVaWlFJVXhOWGduNVdTQ2ZDbDdXL3poNHRlRFZ1Q2NiREVqQWJZQ2Y4eU8rNGR1VnRrb2hsTk9XNU5JeWZnQzJPZGUrQzFpSXZnY0p2QlRiZ0hPMDF4L2pJejhROFN3alpnQ1hRUDZoMnlHRjRLN1lOWDI3aCt4c2ZUZGc2OTJ4ZENrbnRrcnEvM1VtVlY2RWNXMk1OQWhVZEcyRDhNZVZhNUwyVGVsdFphL3lXN05yQ3JmVGx3VWtDOHE0YjhzSXczeHMxN3FNd2l1aktIT25rRHFNdGhRT2V5RGRWVDNLQk95UTBZUXhLa2pRalcwOUVraFVBb0NMcFNuejBoRGtFVmVQODgxU1pWMGZHMXVKckNXb2ZZSkpvbkIxd0lsUzN0L2VZUGhsTmduQVRrelBWL05sNnRYREpSanRFNGIwckgzQUk3eGVUcHBwaHZuMFVJWmJpTDB2ZWJXVlFrSW5adGxFMHdPdGFmWUkraGMvY0ZwcGF1SjFPVTlFUnM0bTZPNUl5VUdzSEdnRmhyS1gvRGoxYytKZWVwQkxJOEdWYmxjQnVmZ2NQYXh2WW9aWFVMbTkraFQxUXVxaXo3Sk9LUUEvQXZZSk0yYytGQ1ZaN0p2NXhrc2pqMkpOMmRpa1VKNWZJY3hRZm1pNnRzMHdMTGlucFdwZndidkZGRUpjU3B2enBoSmtqQXdreGUva1U4a3FYZ2RieEVDRmdQajhjbGJOdTBUTE0wVHZQN3RTVWYxTTN1cUNUSXdkNjk4c1l5dzlxdFJqaHNyWVV1OVBqdzNHR2FVU0tOOTkwQ2cvaWRYQzhpUTNXWnZlM290ZVIzeGJmTWduMzc3bzVJNGpWNVZCVFVoUmgvUFlMbEcybWU4VTgwZ1AwTno2dWxmN3NIbU0zT1ZWQUE3M0todDBYeFQxTjFEN3hKa3NoWW9jeU9IdVNidVg1Q2xsUmhJMS8xM2NXb3BNNHFsYzlCaXl1V2dRbkszZ3VOcE9tUTRtSHJWTWRyTVJnVDdOc2dRSzhnallDcjdTc0ZKeWpoTEhpM09XejJqSUhhRTFTbUNEaVFycSs0eE13S20xd0tQQ05iVy9vRzJEOFVDSit6SnVBTG9kTHRwRG5oRmRPTWxKRktvVHJKQVNkdUZVUHpUNHVlcFI2ZEp6NjVzeTBKbFZLa3h6QnVwemw5TUdUbGZ3czNqMU5uSDhJYmpzaW5XNjhhdlQ4bXMyMTBmU0E2bGFFZjFDSjNENjR5SFh4a2t2d0swRTNvSmdRZzAxbU1YWjVxbUlNSmYzaE5lajRUUHhjSWhXZUN4Vi9NdFc3bTNNNnB1enFqYjJUT01wbll5WkxEa2lLY2hidFpNMjZVWGFObEV6emVObnZzTzFZUEIvcTZWSVFWbUpMYjUzRUNxRmRncUZWVzNUamxKSzREeTBUZkZOMnlLT1hnNFo1dytmZGN3NldYM1FqN0x5am9BcGlIdHY5Y3c5MzRoNzUzaFhFd1V6TldPNmpFSGF2U3JDMElTejd3c054alA3R1F2aGl1cmZrUHNIaHVqNmtPL0lWdmI2SUlZWnkyYS9DZUZIWnhuUEtndWxqWVNUZmRrU1U5UEdoSDdyVCtZcnJ5V2d6N0gwalE0dW5oSmNzM0VLaTYya0g4RkhpSmlZcG9qSWJtSGJjMnNSMCtPVUtmRFBXSVAra3N3eURGcVBiQXVlSUg2UVpZSy9HbGowc0VmbVIvZXVNN3NycmN4RUU4RFhjeHNDUUk5RmpobDUvOGNRRXljTEduTWI1Rk85bndaT2d2WTRRbWRlYXZVQlBLbFVDUlhWd0RYZjdrWUE3N1lyRFE1djl3N2VoVEdOMmNraWM3MTlqeW1CR1ViR2xjMDE0cHFrUjRoV2dnZmlHWVk3aVMzV0FYcU1wUERJZnkzb016cW9kclh1dEg2U0RiRkQ3NDVJb3lkd2xPcWhYc21Ka2hyRHhNcGI1a1V1N0Y1ZTdEaHZ1cWVaTVRoT1V3SnJKT2ZzMWtGSmg5QXQ1S3Q1d1lKUitaZy9TTFNpeEVWUUdnOTVQVE1kaERsWFdkK3N5eUtpbWJpK0E1SEJRVjh3YmVXOUY0MHFrM29oQmlIMVFUS0ZVaGJidmFTU2M0ckxYRnMwSDlxZ0c2elFSeTJYalhSOVI3TkJPbUxldWdOSU1lVnNkWldTZmVlUlV2bnVIcGd5T0k4TVlrNWZ5b2tlVmY3M29ybThhZngxd3o5S0hGSjc3VG9BTEhoN0VrV2tlWUlWOXF3QVcxQ0wrNWp3VllKR1hRV0xBUFVRSDhlVzdhTE1kckNqUDVUVkMxYkJpaUhLY1k5SWg1MzRWLzVtbm4vVTVET3A4THV4VmdyaWFPSGJ5aC93TGVVSkg4N2VBTElMeFdrWHI4L1ZPb3NFY2g5S3JtbmdUa2k5ZzcxQWtvdkVzdTdQMWJnaHNwdlo1bEJ4S3VIUVJLM0wyNnhaZ2UzaXNTSnJsWmpLbkhQNTNwSDRjcWJsV1dpNXE0SGhkT2YyUzB1MnVkdWhVM3hPeE5PMkhRQ1UrTkdxZlZtRTJUajh1TGJwN2Z5TGcwYzV4TTlGRXVqZnM3UUVkYVJUak5hQjZjZC9NekUwR24xRlpYOVBIdUcweFNUN2hScFhxbzExRGZsNkNrQm1LRWpsYzZNeVJxWXhSeUJuTGhJbHBjUTZMa2RMaENDd2JwNkxId01kUmNJNUo1SGVCME02VVBua0xrNDNLbG1ZZnVXQU9UbXprSy9rWFNGYjhKRC9PaGV1REQ1WlBreHhrOUI0NnNibFJYYk5RS0M0YmR2MlhXSkdrcEJ5VWFoNGhlUjZIVW9TN05wVjlGaCt2bUg4WUZPZFlQbXBTTjFHUE1Pc2xBbHdwMmZXczIxcEw1enFIUXpneHVPbnJrVWpoMXNZTzlyMFlHVUtZZElES3hPS1RUVm9vNnZIMm1oT0h0Z0NFbVhMSHlNaE51S3BTMzRRU2M4c1hwaGw2V3Yvb0h5VW43SVl2akQvYmFvdm5QTlRsV0pOK0tEZ3ByZ2Q4RVc4aVVDS1MzN2pmcERwcjUxUWMreEt5RmxOV2tCU1g4dXgyL28zQWtzWTNHOXl6cEhSVk8rTjIwTGJYRys2ODZSUzF1NDBScXJQZzczZ2JCa0hlZlBNRndmclVLdlVMOW9jMS9ZWHp6d2JVL09UeElyYUtCSkRzUGhodm9lem01dFFKaUJVVlBMUXJpS3pjZEpwQWt1Tkd5VzdBMHBQOUtmT2dId0pLR2xxK1BWZ3kzVEFTUHRUQWpjZ0xWaGRIQ3AycEtuSlpTdGdVWHJNQllZYTM5WnlEMXpIUWtLUUo2Z3dSSElldWxGbjZERW9TUUtiM0JXWnBwV0NncWMxZmNhaENrMEZWWTBrRHViNTgyQkVYUHZKTHd2dzRnbE0zUXNiYkR2SVZvMlRUVWFlZFJ6SHcyVEhpZnZRWUxydm1wZU9UVnNGYzRYcGFYSlh4NmZqOUNTU1lzcWRRNzF5aGRPSGQ0b1pGZllKZndmNHNVMysrWTIrZVdwdGhTeTVaUUxMK1BYQ0dNVGhBMm9BZHdReW8zdDRqVk41YmpuejhqUjUxZ0V0VWJ2UTltazdMSFd6dnRVLzgrZHB0b3NRMmNiV3FTOVBVMGxtV0Eya3RReWg2VmZWdTlXM00zUWdETEtNQXozQStQMkZ1am5MN3N3NjB1dnQ0R0JuV2FGSnpnZlByNXdpbk5NVk13ekQ1UGQwZXE1RTZHbUxHWGNHWEE0SUQvYTdmQUpmU0R6cUxVUktET09scVhWUmNob3VkWktYU0pNb2ZqRDkzYkxUVVdmZTVUcDdkc25DRmlYYkEzbWJ2emx4VkVEUm4wQndDZDBNTXU3WThHa3Jzek5STDR5cVR4RFBoWW14Q3BYRlRxOHhNZDhGY3dPSnZneEprNUc5eTVIM2tlbDY4UUNNY1ljWFhQUnlhTHA4cnFYK1IzZFc0RExSeENpVkF0alFrSVEwODdmenBCZnZQOXBBVS9rNzk5MlJUK3Y5T0NIMWFXYXQ4REdwOGo5SURPVFc4Z0V2SGc4RTRHbkgrY3lDeGFFOC9nTjE1cTQxcktpNzZPM2psRDZQMWpUaGljRW5UK3l0Z1l4OGRqWjA3M1dTYXVLN2t0OFR0TEJNTktvR013QWVxV3lkSHg4aUZVaXhvZFFaZ3VmOWpBMU1WS295L3Q5QUJpZzc4YjhLcFZ3YjdETlVqU3h1T0RMZ0dOalA4Tnl5dzNmeVRiQzI0K0lwNXVmUlQrQ2Znb2hYSVRWNXJzQWhvbndQWUpkZFlhcGVMNVptM3Vodyt6ZnhYTUY0eE1MbDhXcmhWM1YzWitFR3RWRDNOeVZ0SUhCa0ZJcXNBS3ZmUWs1aENDVk9XUDRTT3AzMzl0dVo0bVYyMGJieG8vOXFHRVpYbGN5VWJuOFRoN0JJdnZEaUFjejd2ZDZPOE1vU2NlNjZOdVQ0WHY2cUQ1QnBseWdzY3p6T0l6RkhzdnJkQXNKbTMvSVpKUDRWUXpmcTVMQzByM21QOHQreHVLSmtTNEpES051Z0JrSy9wK3RXbktiVGMwMnkvOFJPRDRsYU5CSElPd2J0a1BDaHdFbFRYM3EvU3RkdWtyMDdVQ0RkVmoyZTVxeGJBQkZESmNoVW1UQzJzcGdmd2I0UDlkVVNTam9vMWdkT0JVM3k3czA2bjhyMXl3WnB5MVVaWXpoYU0vcTVmMlhhU3hidzU3MnhNTmYxTjVvZy84RGpmZGpJODRyTC96SFpCODdoWjhYR2hUVThCL2QvVzVoNjZXRzhmaVlJNndlWGtncTBvWVVWamYvMyt3V0MrRTgycXlnVWwxQTVnZmlKVVdKbldNaktTSmhiY05PcUNoSUhkQlB5K0l5UVNGdWkyclJWalQwYzFGcitxRGhjVW9wQXlGK3hBaEJITVRlSDhwak5XWCt2cDN6eWpmM3dqSFpCNGdXZnNURFpMM2pGN2pubmEwOTVrd203RThUTTQ2Q2JmNDJ2RVZDcUdWKzNieU9GeVpWQ0FiSHpDVjdUSyt3QmVscGx4ai9zNFZycGpNM0VsaTVnV3JnaklTMHhDTEh6QVl3NzNDbDdOK3FYbDhyOEJlbkpXbXprc09YSkRjbGEzeU9TOVZIcVNFTjhGSm9sdC9mMmJLM09QSGt2NEg1VVpEMFRidnloaXE2T1p6bk9XYzUweDZvbVF2WHJqaXg5czdyRXhNcDEvcG1tYmxEbnM3aHAxWi8zRkovbDNmbk4xcFJSUWVrUFB6YnVIQVFDRGp1dXV1eG94R0J6L3BvZUd1R3FhWW1ST1FlQXZwZ2h1ZngzOHBQSzlFV3Y3T3dWVTR6U2ZsQ0JJVGRuWitldS9KNWNNMU9LSWxteE0zanFKTjk1TCtpTEJjcVQ5bkJaaDZUYkdRVk8xTVdzNFNuai9RTGJlY0hHYmpJZUR3WWhRdjB3dEEydmo1UkJ3MTZoK1NBYUlSc3RQVHlqTlFPaEtrc3VXQWNGdjR4eGdocElEVHk5UGJQRXBPZ0FOK1FDK0ZvTEZpR1FPUlk0S21nb2ZiSFNydVluL0FOZ0FmWEgrcjJvdmViWmZicUFZeC96VXhaMGwxczdLY3pldVhRMzR4bnIxdDNBU0lBK0I0SXNqaWcvUGUrd2pGRVlMbWVFWDNUNndYY0RHcVBnVTc5M2sweUx4TnRCRGgyMFNhcUZDNHIrN2taVGhpY3N3QmV6QXAxOGMxYXpNRU5LQWF0QkRsZnJKRkZ4NzN0Y1owUHBSdjNKYUw0ckM0bU00Yi8zK1VtbkpwMTdUTFY3clM0V1ZQSUZRejFDaTQxVDVySzlDYkRIMmdrWUhJSnFtOExkWDhJcmFjNjlLTGpVME41ODBLUWtGdW1DUlIyZURsZWJnNk5ad29VaVh5ZUZzUG1lbVJiUkw0RlMvS3UwVWlxbzNqWjZvdTYvUDNyWUp0STZBVW5BTU1pRE9xRmIwQkFQaGViY3BZRGt3dENvL1BFdWo5Tng5SmZ4MHlteTVpWWlXRW1xb04xdjhDbm9yM0lOWGRIbVk2aVdCYzJGVDYxSzNRTzU3bnNKcnVQU3FsN3lJaUZYVStlYkxaNnJMa25TeFJ5SDZ3TEwrbGd3c0NLbGRhZ2dBVWRRYlREa3BXaXBubytiRDZ3Yy9XcXBGeGU2bUI3RTFabjBDY09NNDlneGh5azlMaVRuQ1Z5SDhKREgrYTJ3VzR5SzhaSHBuaDZ0Nmo1M3ljRFdtU0JTWmtBU280OXZ5UTFVQ2NMY1NBQUk2WTlVY1IyQVJ3b083VkNLNlhkYk9pV3I3REpKV1Y3SVVISTVpeEQ2MVpaVEdqNHFHZVh5S2ltZGIrL0NWY3ZqdlNEUGoyMVV2TmozLzBETm1ieFUyMnJxYnQ2blhUdFV6REZDWWVGMDdVZWUxUmtIQXhGcXFPOThRclFEcE93RFR2b1FWdXZDNnRpN1NEMExQVjIwN3ZxZDdKcnVOYWxKa3ZZMUJxRFRmekJReXNjaVU1U05WYVNucS9aU0UvRHVKaHJkTXpKNE13eG5tWnV6UEZXL3FBRm1zbG42bElZV3FKVHV3c0dZUm1pMStkVHpLMFpVcFh5Z3FrdGpreVM1QWY3M2hzNG9paE8ybG10bjMyeFo2RWxXUmZKOHByZW5EczVvRldMSFdlbTNsV1RtM2FhWE5wNGwzSE9ITi9rUTJWWkdEV3N4UWJ5eGhpeEZqYUE0c2YrclFGL2piOU5CSW5nQTN0QlZDUzZTeVVkVDhjTHNGeHB0VjhJSzFBMERxWEdqOFBuOHdHNkJJSkc1ZHhMRXh1SU84MUw5c1FMVkRzL2hoRmdVeE1BNEd6UTVuZWFXRGg4VW5HeWxoQUNpaWxmUG0zaHdaVUNndnpFVllkeXZ4dGw1cWhZY0VnVlM3WG1PUFFBVmN4ZzV4MHRDaVM5dGtmTVRiaHZxZXRSeVFRQVZQa3FjNGMvRjdCT0ROZU5jYkorZDlrTE5VSFM5cFZoa2xybHJXb3FYT0hZSHgrakErbXRkSU9KM0hEOG53QTdWbENUM2R2SlhFZnBLZE1hTUpuR092OHNxNHVzbmpOektkbmhRV1BycjU0eVdENkl0aUo0c0VrSVkxeHdtVmtkVnFOVWtMZW1YSXNUd0lPMitRZFpOYTJlNkVQL0dxSkhzS3JrMVVnS2tITVJBWllvbVhTTnBUejRsQ2ZpSXd0cUJXYWllaGVnV1I5TE9GaG9CL1FNU3FrS0VUNUxCS0ExYTZwWlRzOTNFT0VIUmNyZE96aGVUTkVSdUFpcUVlTTdXY1BtdnY0cytGRjZobzlwSFdRci9WbDF2TzUwcjhndHIyVnEvbXNxdkRjSXQ0c3o5M1MzaFVtM2R6WjdWSWJudFZadGpva2MvWVdyYi9uNFRoYWhoUHE4djJ2d2srVCs2eUhJUU92R0FpaEN2OGNBNGZuY2hXcjNTNGU0ZVhxb3NuSkNQWGtqYVFEdVZsZnp5dTNvbldpZVhFOUNUV0pWSGM5ckt0RnFNWWl6ekhtY2hMb2s3NlJyUEprRm92bUcvT1ZHZ2NLNmJkWlE0aFl3ZUZvenZ0MllDWXB3YjJCMVg2emh2M1dOMmI3dDhNS0ZGS2dzK2V0UG1MV09NR0hxRUI0dGx1cXVyb3V4dE4wV29pekF0TytOVmw4ZHI3VXlPekVQcVZHaWxjeDNEbWZPUHdkcFVUckplMmxXcmdIempmUmxDR2xNNGpPMHVxb0ttcktUMzdhMm5ob0ltWm9DN2NuVjdyNWVCLzkrL05IdXU4WEdGZE9TcFJFU2VkQm0xUTZweG9hN2E2dEV1Q29tRkJtdEMxQ1dXWExSOVBRcVBBS20rbGxnMXRHTXBYclozbkViTGp0MmF6b2owMWxEMTR2OXpSNEpHQTdtaTc0cCtVSFJEUEpzbEZvT3lDV0pDOVU0ejNGcGdWeUlZREFieEN1djZaQ3Q5a3Z1T0oxYVhVRU1DK1lhMjZlT0JEQTlCd3ZSNVMrUEhaZzFVVFNES3FldURSOUJzdFE5REJISnhFN0x5SHRRL2tzckpicVhhUnVFR2FFTUF5Y1I3UkVOVzAvYzVHMElYSCt2Vkc3T2dyc0hlT0hDZUtycURCaEhUVGQ1RUtoWUNFejZLZjE0WTNQYmJ5SDd5a1JTa1ljVUYxMTFOYWpxaDVQdkFMcnJ6ZW5tVm9pWUgwQzB0cTdHNk1tUU5qOTVOL28rckM1ZDA0eXZkREJYcTI2aERuYW1QOGhTbTRlOWRXUEo3OW9lU2psK1pOM005RGFWREk4dEFRLzk4WjVPeVNFTk1xcUlXdm9zdWYvTThSeG55NmZMQytuTENlOU1FTUlMc24yVzhScUo0RlhCSm1IdGJIWHVkUDk0THdQMHVhSTZhUzBzcnRRQ0EzUUNKeEdFcmk5NWRaZ2ovcjZveUZCbkJtS0RURlI3b1FQZHJyOWpWUEF6TzlzZCtmWmdCYzlidldRajJLRDN6TklNalEyVmhUa1JtRUY2djBqbU1aV1piZER1dVRBWnVPUU82bk43bHc4VHRqMExyVENDTEcrMGx1MGRlY0pNRnlBbHpIM2FBazFXOVVQbEI1eGNlcGV5VEhPakFnbDhtWkJDRlpnVXJTVG1WY0tTQ1lrWXI3SzFyZVVza1d0YXZvdlAzbGdTRTE2SGRHeGl6VzI3cThZLzNjTnRHUG1HK2E1RkJJdG91YnVQeC9yME01cVQyV2trNS92QlMvSTUyRkRHSmJ0RXBmZjN6VytWWkZDZ0VEMW9EZEhrTVVlOVFqVDZBWHEwNWJGbFhLRTlaM3AvZ1pYNlRBZ0FuM29aTDJsMFA1ckQxQmQ0YmR3U2VNQ3NXNFkwK3ZscVFwbi9aNS9XWjdoQWozRDM2RWMyUURnWENTdE1Gem11VHU5WnN5M2EvcC9PbVNFUDA2TG9ESVlNVHBnaTZxQ0hycXV5RnVxM3hOaWczRzZnRlUzZ0srTTlEUk1uWXRWNWh0b1JONTZEekRkVzM5OWUydThOelpBVFA5WjVaSEROOHFrZFY2b2FZWGJXYlZ1b0V6OE1CM01RWmUrSkVRa0JXdUNPUmZsMHlRb2ZCQzd6aHpDQ2VpUUN6d0VJM3JGUU5UYlBManB2MHBySm5QYVJyOG1vRUJMbHRVK2NtTUpxeXRMZGpSaUNKL3c0SWlBL1g5WHJzUDZxK0lrWm1HQVdMN0s0S01UdjJSbzR1bUZhODRaazhlb2IveUN5Qjl1dkdvazAxTW5qUTNLK1JETEFjNkd0Q0JISkl0Wnp1bFJJd0RXd1hOVXh4Vit4RkVrZllYNDVXY0ZuV0xzY3dxVVRlN2lEWitsQzNiRlZHWUxvYllXblZQc0RFNk1USVJtdTBwRHl5R2dkcEc3QmNNbnFBTTdLbEQ4TjdQeDZITFRlRjg4WHpGeEppcGthbHN4Qkl4bWg3OGxWRVRjdlp1TzEzaTNNZTFDVjh5MDZ3b2s2RENCaFpkS3JKREFEZUdtaUgxME9EYml0Q2M2bkxxZjZGYjNBSUhWK2Fvc2hsTnFOdzdubmJmVG4rVmprd0svSURzZlliY1lCd0hFR0pVNnpnWnVTQU11TmEzSTJuRDhuUEVrZ3o3UHgwS1E5d3NFdDNUZzFDbUpINmZLRUFuODhPSk16R1E1dkV3WkhwcHFWOFEycDA2UXBUNXR3eEFBZnZtL2ZxUkp3WjhDRmxta3dQTG9RSWFzdFNEUWZ6cU0wSjNWQ2Y1bWxNUFZyRmR4RDJwVWdDeVdJVVE5UGVuSzRHL29kczJydVl0N3Y1RmFuWUpsc1hLR0s0d3d1UDhqLzJxaGpiT0creW1sTVlLbmxyNmUvV0NrQTQ2SWVTcjZXZ204dE53Q1J6ckZINUZicHFudWE3N3plRU5FSExodGJHdThqUXBJREdrRUdMNlJOQUhvQ3VGcnpCY2REMHBTYmltM0JBUnp5VjBXNHdIRG9kdXZtNERsN3NEVGNnWTNUSjVLZEx2U28wRXBBbG12TDhteDNhK1hRYUhRRUZhaVJKdUlRVHpvZjdLTDU3dTIyQ2RoZ0xkcENzcDF3M2FtVmh1bm1wYndHUTg0ZVVBWXJZdWROK3NlMmV2aGxwZkVITXFTMXRWTWRuQnJCdFUwTjdxM2k0bEFHVkN3WHpUMG5EK0N4YU93bzlIUEwweHEyWVYrc2RoM3RoZE9WTkVyMjBUR081WEtzSDhjK1JDeHBTQ01QNkt3cTI1WklSYmVNZ0tDNDNpOU9kUVVaODdwNEg3d09SL1hhczBUWWp6RVRvNTg0SGoxaURHbDJnVkJJU0RwZHlGaUtrTzllMGw4bjJ4Z0s2N2g0UUVKemwvNDFjWExvQVNOSCtLMEduYVFaeVJhODFRY0ZJWXdTUTZoMkZLZHZxUHMwTE83dStpRjl3UkhaZldOVmVVWG50Qld1Q3JENzg0NUtxKzZYK01YKzFWL2Vic2NONWpYNjdCcWh5OG1lbEovVUJwK09vVG9xUVpxUXVVVlJ1b3pHTlAvT0hNbUhrSHkxK1R0dFhzWVhyWElvR2tSOXFVQk1NV1hjRDMxcmY5MGNNUTVlekRIZkxzM2RHc2JZZ0UweWxMdDdUYU10TmhRYktlUGRWMXl5Z1VHdDF5ZFBvaXZHSm9NSjhPTG9GZnZVWHBicCs4cFZoZEhhdHNZUkhQNWN0ZTJhZFN6RkhITVR4Q0pBejROR0ZjaE5RNGJpbUhDM0R6aVdLbytKbWpPMlIyZ043RTdSdEthWEhveVBLS3FScDhVVWhrMG9xNVM5N3BHWm0ycHRKeDVET29TYXlMTUNOTkZDWTc1UGNOSURWUnFaYlJQRjBvRnVTdm95T0ltZXRvOXRTVkZLQ2QwaCtiZDlSM2VkaUYxZUFiOXdtRXRRb1pYSW1qdlpsaVJ2NElIWGt1aFcvclpIRGRtVmdwMDViQVdMNW5DK2VwOFlldWprTmdac0JteUFVRTVlMFdBTGpVT2VxOXpSVlExeEM3WnJ4Z0c0RkRvWkU3cFhCNlVieUJJZ1BLSUU5dEpVQzlKbTFtQTIveFpkS2M4T3lxcTIxRWJFeEhPbDlYODdiM0IzdVI3Ni85UGtRZ2lpVGNxMFZISTNsWXlTbHNvMFdhcHJlZjllb0dDcFV6MTdGbFJNVkEyekhiUXJLNExjSXhjcjA3Q0ZEYUduMlBOMGFyVmFKck84N3FBSEN5OHhVK0ZhMC9Ld0pYQy9rbm1Sekd0c05nbWN2QWI3dytHL2M2ZTd6YTdKdDd2Q0xOUGVrRGZLNE8yS21hMm1hK3FwWmZ5d1ozcjViSW52WkEralFJNWxUSjNQQjY2SXl6M2VDaG8vM1NPU0pLOUVwOUxpQ202RzRETWF0N1NITFBxV1dPWXdvM3lGNzFETHNnbVhUQWd1SmFIeHV3THVOQll2WW1HTllMODY5clk4WnQyR1FwK291VHdaNVJuaklsWFBYYUVoc0p4b1N0eXgva3U2UERhcXAxbWVxZjNpR21GOFNOSzUwbUFrRk1JTnZYcGdtL2tlbjlJeTRvMVI4d3p1L21xZ0ltUWJOanY5alc2UTRIL0ZCOG9ZVjNkd2c3SGFoZzRqR2dUYzVOTEpSTEFlcWFwV20rcTRUUllaQWlPb3lDWjZ6djRnY1g3SW90MGxaTXBKdTRZamN3a1FEbkVKQ3paQnlXNGY3UElObDQ3SkM3MkZBQXk2RzNJQ3NBRFR6ZVJpZXhEb0R3RDlaYjd2bUdPOHVydWEzYXBldTVoL0ppeEM3akdSS25wUHpqMUdyVkp5QzM2L0dNOXhya3JQTGRVbFlwSFFrM2RveWpjbEthYXd2RGtGbEFCYTFyM1pxL1QxUnZKZGlNbk11V1V0eXdHWi9iMmRacVVySUJUUXJINU9Vd25BYlY1TXA4VUVjWXRYMDNqd3lLS2RMaUNhM1JqVTBMaGVDYW9PTHhES2FScVphMTZKTlBDSHFKZWloYS9jOERmbkxUT2VKVDJmWFdaSnl1dnJ5UUl1YW5tejRrMDd4VHY0eXJXYUtNSXNoaVkvclJ4clo4TTNTT3haay9jN0tWQ3l2SnNhbGszQ3dQd1BBdStWMHVRYk4vNmhqbXFwYThmWjc1RllJTmU3SDNZWnVWdDcwWTNXT20xTS9BM2J6OGlTcExRaFdxZFlRTUdlRkFnbTNNUkVxY1pCZVdLWlpWN3RIcWwwNFoxak12dTJwVkVCRXBkSjUxTXArWjFIYzJ0aklEZnd6YktxMXdQWnRiNjYzUEVKeWVFd1pubHlMT05MM1ZlYTdUTk82aFVpMnE0N3huR3BZUXM2cTAyWUUvenhGOXUxbEVrMzJYcDF0Uk1WTTh5UHFITG5uWDVNaHYyRjdnZmFVK0U5VnlscFlYbUJEYVo1ckhqQzROTVI1ZWE5VlBrTTZHQlJxemNVKzM1ZTlONGJJbG05dzRVYmxDZXhSSVdjdEEzVzNZcU9YU1NwaTMrOXhwNlJIdFBGNW00ZTB3cHIyUklMWlkrZERoalh3Q1Uwek5NM1ZXSVNKa1o3alRBejJyYWxkLzdKZFlnbUdubDk4KzY2UHRka1lOOG53d0FOUW8xbHZRL3JNMEkxUzBrdUJYV1krNjByTlZ5SUx6NGc2MWpZZG1yVTJtMmpEaG5Xa2FBZ3MrVTZ6N2FncEdtZHdBaGQyMHNMb2dLRTE5VythdnZrWm9mVENOYTVyV1RpY3p6WWdmZkdLejZYV2FGelpsRm9JNHVHRFE0bThFemZtaVprbnNVeTI4THpUazBEWDJqUnJ3dFZIdzdsZDQ2UVFNY3Q1RXpDa0JXR1EvOFRJeE1QSmZOOFVkMlRmd25HZjljYzVTa1FySlhxTjRURU5EZ0tmREtTZWVPN1BUWHhZWk5Fa2c0ZmpDWUovdXpmaGZkQ0VRdTdIaU16OG9FNE5mZWtGa09YNFd4cmljSXpIVWxDSmduL0VWY1JTUGxxRmVNSitQVzdSYjQ3SkRTSzJ5a3lnMGtjbFlWQXd5NzZkdW53S2Jrek5PK2hIUGV6dzBPRFFFWHl6eDVQdjZFRTBvWlRLUnEvMm5CeSszQzk5SldlS0M0eitWb3hscExtdm8wdE0yQWdJQ0FnSUNBZ1BQOFBwcTc3ZnNjdCsyN2Y0ZmNEL3YrNnAvWjFSOTl2MldmNy91SDkrM29pdnQ5TW0rMzA4cjZpWG0rMzZZYitIMmt1L2JmVjl2MmU5OW4ybTM3ZXFIdnQrMUd2cyszbDM3ZWsvOUQwOS80ZW94UG5XY1A3Zm9mL3pmckhOK25aLzdmc0Z2MmZZLy9WZExmKzM2MUMrbjlpTHYxYjMvdDlGQytyMFo3NTBiMDhOVXFxTERvMTNwK05RNzlIVm9OM0dxR1FBc1FRR0tMMnhaODFyeHhOUFlDOEhmY1NtTDZTYlFoZDBBd0pQeElqM1RPc0tmbzZQZFBtRkJhakIvTjdkdzRTKzZyd3dGc1lWZ1pvaE5mNVZ2WEdpcDBWKzRvcDN6T3hmYnQ1amFncjBENjFyQllOK01lUkFuNGN1UncxVG5uYkRoWWx4cllDRG9sajloV1NaTGYvSG9zcE5lcW9zY2FqTTFWNG9DVGwxK1pJc3NQb0tneHVKMmZIaVlaSWRnRmllRStyeUxFMmRsbFVZVkV0dWdkcXorTGozTmFpenllZnk5MTcxSHA4QjNDaEMxblhFRS95bE9ObFo5bWpzMXlOY2wrR0lDellBUDJ2cFVhdklrdSt5UjllbTQ1bTlVdXhZcXZTYStjNjFNNHA4N0VONFpDWnVSYkZtd0JUSWsydm5VSkVvQkMxQXFWYTZYVkFyMjRSTFFuVXI4Wllpd2x6aXNZQmg1aTZPK3R2ZEJNby9ROXh6WXcreGx1TDQrWC9pVEVUd3Z5WjVlbXA0cWNIcDlkcWlaaUhHU1lOZ2x0bDg4ZTA3NEIwY0tOcCtvOVM4dVFQNFpydzgzQm9SKy8velN0cHdTLzEyc3RmTDY5SDNZTm1EYTg4a1IweDA4VEFocTR1SFZJNFN1Tmh1Z1FZYkFSUXVkc2VHWnNHRTJyTkxoOFZXV3ZkOENOWTFhNktEejZ3N2pibFBQTmVzYmJXNXZaY0cvSkswMUlzSFdlVVN3Mng3ZkVmdEd0SzlIMEl1dVkvWVlTQnVHSnhCOE1QT21DRmFUUk5KY0d2UlpoVmdLZWJUZTRQY3FyOFIzdWoxUU5URDdtMjROM21FcEJaTHJ5WEM0UjI1WnZPWWk1d2tQVjVUcXJtRTZSSlBkNllEdHFZSmRkQzhYUG5ld2c2elkxbEpLRnpzaHVrditCUFNnRnZrVTdNL2FCZllhL3lHSVg4Y0F5ZEhFYnR3QitDd1FUQzFoajRVdUR5K2REKzZWb1FFVzQwb0FVZUh3S1dHTGxxZ0FQZkh3VGxrVHhuOGJvcWV5dzN3dDZpN2dFYUNSc0xNeTkyYWxBcUs3cm5uR0w2eTM3OFdzNnlFRmc2ZU9RaU5uTHplOHVqM3F1ZkI0MVlWNkU4ZWxaQVJxY1pxNitsNGtXTWlUcEtiaExFclV3L3EwZm9Sa01TQlRIbkhtVFYzbWs5bHFGQUdWQUxZcGY5LzdhbGprc1J6TTVEVDZUSUdEcisvVGRLeDRpVWFPYUF3VXlnMWZER1pXUnh5QVA1L3FENkVOZ1VFS0NXNlZiVnpVSm5OOVNidk4vQWtjNERoTWZnR1Jnb2xucnc1ZUp3SXZKcm1tZ2hKL3dpRG5LNXo3M2JtaHdQcmNmZWw1Vjh4QzUrVldneGYxK003c09kay93clF6d2ZjeDRINnRVV2gxa09BNHVVNS9odGhMYTdFQjUwNTVHZmdkaWhCb2FxUFpFbHBvbFFQaTRDdHlvT0tpVHBDRUJGYUlpbk1qOHpSaWRaZjlCK2hIcXdSTWhoeHA0cUUwRnRDR2hBQmxBSlBtWjZLYThkVXpMdGNlN2J1STAxWmw5bmxENkwyRXErR1crOXZtanpaK3laQWhnZmVPVnkwTk1JZ3RlQ3hsMTBFR1BQZWpWVXU1bHpqSXFPdGd0cFJvSzArWGlMeDZRbVZyOHhlNDdsTndIYk4wZ1JRYTNHR0I1MjllcjlLcHIxVzk3dVY1N1JqbFRvaXZYQ05pUUxWWFpOQXIwbkxoM3QyaDl3ZGpIQlJvU0lGelY2TFNjYmY3MWZOa296eFg1OGU3enE4eTBSa3ZQV0lCTkVOcE5DUjU1dXh5K0FNd2VwSEZJTHFvYks5RW5LWmh3a1k2K2xQeWZrYXVzWk82UTN0RmRqWmZ2QUZMbVhPMnpnNWpESDVaeEFuSXFRaWxaY1RSN3RsT2V4OXBodXJ0RVhyNDZuT0phdFE5NWZOVmVuM1BqOExMSG5ZZ2htL1dFL1BZZlF3WXE0ZEZTYjh6NlR3RTJ1N2o4bW5kZm9PL2ZmMmFzSjVTeFVCRjg1b2NRVkw5MVVVRG9lV0FFNTlXc0JORjZBSjJLNzU3eGdNMXdqWGlVemFiMGFaNzZRbG9PUVpSdWN0Y1QzcnpJbkM0N2J6aVNrN3VLWW5GRllselpSNXMxWThkQjc5U2F6Ui9sUy9raHFVbkY5WTkyL0pYQU9CTWpkZE5ndDZnRGVlNndoMVFFaWtmUUN1bEs0bzQvWWJkbSt3TDYxWUF2M2tzeklrZ0pvNVkvL0xZQU05NzdxSEd4NkI2UGFIWlIxLzZFZ1NjRDdOTmg3eEljcFo1dW1sUTZQOXNrakgxa29GRDhXNEpEZzErSWdCRUlYU1hBRXNkRjBtYWJFdW0xTGVJWlJRdEFibWgraFlCaG1lZ2pmcTBHbnNmWVp3NGxZUTU0b3htUHdZK0xKUHNkU2xBcFVZMG5ZaGRuT0sxSlEwRElha3htK3BmMlk0NFlHT2p6WXVvRFFIV0lWenFXWmhiSkRQd2JMREt3NjFKVllPQm9acFF3Q1VUdE9VbDc3K2p4aVlsNnhIck14WHAwU2dTcy8yNEVJb2FOVTlwVElBRDBhRVQremRGTEtRT1hKNXQxNTdTam5COURBL0tNYlJjWlVVYWRlWC9YZ0cwSEJKYlpuTGVWc0g1T25jencwc3FhNmxTVGg5aWFoYmJ4VkJCQ1YxVG4zNGk0bytsaXhTZWsybWIwc2RzUExiQVVrWlpKTDNZVEZtSE03Q2R3VVZEczlnbHF2dXhvamVKL0R5UkplOWw5MWN3N1BjTVlwK0t4UUhqb3cyWDJRWllKTjBScCt2NDJNOFphaW1Edkl0UktsR3E2RzZXYUZtcmpXRzhNWkh1aTdSVE5vRGNaU2dhWGpFVmJ0TFlxY1J5dkJobnd2a2E5NTdGTW5ucCtlZnBvVVROZU5WMnpFVXhnNmlEMHpRdG5jQ2x3NWlqWUlndE9YYytSVVNCbWxVOWl5ZEYycXROZW50VWFWQ1NrNDNpdzRFMG53bzdKQWtMSkkwVk5TU2NPeE40ZTh6VnVUUjdNZnduZXFMcWQzN0owNktNMGZUM0dYL3Q3T2JrNEVEOTNRdHNDK3A4NHFKelJXelZOVUhIcUh1Z2hZV0JMTXo0RGMvd0w0N3Q2Ukcxb05WWURSNXIxTndQTUdmNExOWm8vL0NSVWpGZVVCVVhUTXZZcTNPYlBkamUzRFFtcGVZOU45UFZFMHpUOStONHcxejNabFE0bnJXWHd1NDNyTU11VllRUkpwMUNZSXRaZFNzWVRiZmZ5UjZqR1VVMFhSZWxyYW81V2UzTTl1TCtzOGdwNS90U3hqR2l2OE5XOE9DSWliMjYwVzZjbjJpYUVCbUk3OXBEOVhtb3FyckM4TGFVeVdlZmYwSzZ2VUFMUFk5YzlXVlRoNVcwVGF3b01aTEVhaS9rTnI4WlBPalhBMEJiNGpUakR5NW1hOFF6OFVPR2F0R0Mxdlg0Q1krS25IS1d2WmFhb056MDNIaGxQL21jbmc4RWp5TjdERDB6YVJOY1lCTnZMOEs2eG9Wdm9jOFo2SG1GcExwR0FrUFlyTm1xTTcxa1dURUNqRG1nSVY2aVRnSWl3cGcyVkhyZEw1RlJ0My9QMGdpTlR4dDdwNzRPTGpYQ0ZjeWF3c1QyUDJCRkVxdkIxZGxUZ3pJVXdFUWpMUVhJT1NZMTEvUlRFcGJ4c3V5SGRDZ2xwZ1pYa3J0V0xKRGVUVnVpSmdpOFRodHNzZjRnc0xIMEV4dmQrbWRiZ0tiWjVyclc1UUo1c1BKNVZ0N25wYktFU09VditLQTFqODhaSjl1VUFsMHgzYndGVFMxekdyTE84c3ZqTFQ1VVZ2bmRrQkZLclFVc3RKbUhyRE1UdUpqdWpmRDhuTmZ0QUZYRWFJaDh3Y2JIQUNwWXdvMmQrdXBSRGtoSGFEcDczVlFxM3d1ZFpZQlNLNERCSUJGMks2ZXJnL2NGcjBXSFBDL0JlcGxldWNNTmloVm9nSWlKckYxd05zRDhVSGNmVzFqZEYxTjhDdXNiNzBDQ2pzYWcwaVZsQWRsYlJqa0wzWDhPWko4b3BxVDlJOFR1bUorL05CNmdVMjlUTS9RcHBMQ0tHNitnNUJIMDlIWE1mNnR3QXVOVUV2a1NrTk96d1k5UjVudjlCcURVa3RNZzErT1hHTjVROWFiQVhXNFJEaFcrdzdZVkxUTFUvT2FNY1Q0K1hwclZTcUx5cWJMNGtuWGlBbWRjdEE4YXIySHhuS01nUmtkUWNGSlAxZWFTWHhZNWhrVGZJSmtqcHJlOXMzazY0enhEU0RuVlRvSkRDTHNoZlZjclZIVE4xYnd2UFhLZTFYdmd5eXdFN0E2QVBGaWRDeDQ5am9QQk9ueXU2SVNycVcyUlhDbnFEWHhsWXJ4VlgrRURRa0xHdkQ0eVJaTVNlT3VvYjZCUStiSm9pTlppMlJ3T0tlNlJadWtCNVZqdm5zMk9nb1M3Rm9ITlp0bkFyOHRLZ0hQOHdHakFpRXJMeUc2U2JDZEd4RXlmbTN1NXhxdUZ1Y2JVRUxhTkZNdURNRmFnUVVqTWpnWTlBcXpLOHdPN21BSExxUm1uVkl3b2JzdU5QVGZCSjdOU3NkL3JRUkF5N3pLSjUvcHg2cHNHdlFWbGdlYkdFQUltOERPcVJaRVJaMnhFYXVhSEt4R1hja3NTN3hmb1g0TGhwZy9uQjZLUXZuOVpnV2VJN1V3N0xqeVNqR2VEYkRaMGtaV050UFdFNENUOUZ3ZEJHcStYL0VHZlRNZ0R4Ujdla3p3Wjl3anVpczFiYjhWSnRFWkMxR3psaU1oZWN1UzZDTm1xeVM1SEthTnU0VTNIa0t1dzgwQWZOMFJZNHR0Z0xpdFFyWGpPaGV0N0lUcTc1Q0VnOWFXNytvNVFxanJCcHdpbWplcU9Dcyt4cTdPWDlCMHRiZWxheTdsd1JJNjBueGovTHRiN3NvWFJvSEJwVGtuZE12R3JlNkphZmVRNk9WV2dhWVI1Y2Erb2pXUDYyOGFrb1FMa1JVejFXamI3akZESUxERzIvMWhVSGxmVkJScUlGaThSMHlqaFJsQW03bStPVW9qSVAxSnl0dlpsNGZCa3JrQ2NyU244MjJUaEZraXN2aHBiK2VFNXNhd3hwdWs5T1ozeWpGNDNKTWJhc3BNemUxeVc3Y1FubHIrTmZHN1FaQi9maVVhTHFPU3I2SFZhMXEvd3ZEQlNGbFVhbjAxc0FsWjdBRXZ1bng1d3RqZ2M3clZ3eXVGdTA5UXNIaG5vcHJuajEyL2tpMEVUSXBkWTNtNWxtQVo4aTVObUJqNnRGNUlXVTBjSENldUlBYXBCem5WNDFTOURzemVldE42VlhEeHdqODR6QUdJNUtSVzBremRCaFhGQmw1QzloNU5JNjAwRTdNTS9sSzl0RmxkQlVqMm8zUDJZd1JsRlhXQ3pyajAwdnFla0tEUEorZUFKYkRYcU9CWmRYMlFrM2VNWklaTVJJaHJOK2UyS2hDYXBaSEdVbW9DNmFnQzNrU3J3WGNTWENOSFF0eHNZb0loZTR0UWF5b3R2UnVYWTlrb3lZbTJCb1BodUVKY1pMZTl3S09BSi9uSjNweTBGczI1dnZldEF3SG04REV0VGxNYkN5cytnM1MrZVZwOEdPY0lGb1NGNGFCUjdzWXVoQVN4RzJPaTFDY0RhazE2Y1RLenI4OUUzZ3FmZ2R0bXk5MCsrTmxvaU1wbFIzd1pVc1lQOHN5N3Zoc1QzYlZZWkFKMzNKaVRUY0NMNzNuSmlzck1TdGc0U251ODZ4OEdIT3lzYjZWM0lCbmZsSW1uQzE0OFpYNGdDUGF0TmswT3BySjJCeldRQTVwS0NORktmcHA5djVuNytIV2FoZzNzV1ltZE5yalJVQmFlYVBZSktxRXhHVFZMSmRBenFDdFNuK0U3N1JXSWprVDN5UjhVNjcxNUpYS1I2cUZRRis4UUppNXhrMGs3Ny9hMkhqcTl5N1ZmN0FqbE9jOEZIb3ZUekJpNDhFcXFsQjYxditqRkZRZFkwNitjNCtoWVEzVDFCSWRRcUltaXZnV0hYWUZhbzRzMXk1cStRTUg3NFZ2N2EzYUg2emxrcmR2QzB6UDJXeUZGN1VsSSs4Y0huRDVIUmZLZ3Fra2hZT2hNNGl0ajJKQU1EZkgrOTBXUElRWHJUOXBpVlFCajlqZXFHQ1ltMVRvSlduNWhmcjJWN0YybVpkNFZqMUhxT3FPTFlsaDUxN25qWWFwRU1PTUYrenFqOE1QRHhqSUw3SDBLcUJNcldxVVhYaGM4SFRuSnp0Y1pua3RkZXV0aFNXZkg5ZkRITlc3RklXTTdodkxpOHY3THZBaWR2K2hmTFRTZGk0TnNzZDZ4RklBZEJ5c1dMQ0xub3R2NmZpYXVUL2lSVk9OU0FSTjlwNlRXR3BKcm9KYWsvamsvVHR4ODdmbmFBSXN2M3hYT3hrUXNmY3RBckk2aUtxSDg4Z28vcEJENEJoSEY5OFJlK1doZ3ZHVUR6OGo1a0ZiTTVaWTFPUktXUktOVWpYdnlkYjVMOWJMcGRaVTVjMzROS1NqeUYySnJCM254MVpCRXM5cnNoZzVsK3pFQkZpRE04MTQ5amY3TnppaDhxTndndkkzcVFiSkZMRDBlQ2tyZUsrV2t6QW5SMG40ZzVUcWhrQ0xTK2dmcjQ4Z1F6cG1sTGhqUzJ6Njd0SktKYTZmK1crSkIyODhyK2YrSFpWRGxzeUNtNkYrS25MOExWa2VvV1k1YXFJanFHeHVzbDIwWGdINHlCczljZFlpNldDNUdxSlFaVFRVZXBndy9MR3h3anE0VEZQMzVucE5TbkdtdVE4YkpyeFJkWjBmbEhMQU93djllK0pvSU1NOW1qWHdFTEtWQTdDZkJoTXJMM1hBYTQ0dkw3RklpS095VkF4SklJelpoOFVRZGtJTlRQSm5iRmFBUTl3cnk1T3pjRUdlQTErNyt0L2E1Q1dsL3FuRGFvMzZwR0FLc3R0aC9NdkNSWXVVUG5BcWlSbG5SalF4NFNnRytwVThEa0xFQldWMHEvdDRpV0d6K3haaTFvQjdPUlluZm4zSjR3bVh4aHdwczVVTnNuYStYb0phek42WDBKOGF5MUpZbFhiVXFmY3ZUcllrWWNULzFIZkZHaitKWlRNdzZwSE5pem1hTEtLN0NXNGltTXphN2xhTktKQkFIUmh0SkxCK1BkZWpXNmc5MnpzRlhJOWZzY0gvQkZuTDdkL3FNM0tzclBPNjQyZ0xpUU8rN3lTT2JNN09uNHU4VDRmWENEMUEvYVZzS2tSOU5SUkRMelpNRitsNTdOb2xnSlIvdEw0dlhLVTlmaVlGaWl6TjhQb3BkYnRNTzAvSTRYMUJqbHlRQUxPTjdCZmxGWlNZOWp6c0lBdE5jN1hNRk1idHNaM3ljeHFEYmdZUDdoamIxSW5vK0p1WTdZb1U1REhxREI2ZjJzbjhNeHFRYytyR3Z0Q3NqelBQd3I0bjN4dTJCd2tHS0MxMkhqc0tUa1NEREQ3TGRobDFzVGFRM3NTMDVINXExYTZJTDFEbjgxblNDTTk3V1NURS9UNkgremUzYXV0eUNIMmZkNVN0U2ZUSmJNV0ZmbjhkcmRhekZUQnUzWDlGeEozRGhrTElWeG1UZ1lpcUJLd3ZuVmRYSXdBSCtJbXBnK203ZEl6YVRYMDlSeVI4OXNhRERBYzkvV2kvYmJpbVMzTG1iaGxtV0pvU291WmhZTUgzZFlMTVNmRTByemtEZktuQXVGUDhMdVhUcWpVTVZYbUx0TzlKdEp6UHdLSDI4bXBTOVRmUy9lVHN5Y2RnRzVKUlBJaG9OMHg1WHJwZFh1cXczUVh2d3FSZTgwaVJET1BBSWxOTWx2MUZDd0dSV2xwaGRhdy9yK0ZzaEc5RE10dGVPRHJ3eHdkaXVZVWxUbldpbVYvQ2FIVEpiblFCYWJKMEJUSUZuY0l0bHppL2E3Qm4reDJmRnZ1bnZWTTUrcXJTbUNvNzRVZnAvTVhOdXVmYytsbHR6TFdOZFhqUlZkdnRwUkN5K2xEdTlZV1JQOXJ4T3I1YXMzekgrd0kxWEtiWXdjckEvODI4R3kvL1BqaUF5Z1JQZjhzTEZmVGV2UUNJN2hJaEhwWW41R1dudWR1VzZMek9DNGQwNk9uMVlVVUZVM0hyOVNOM0tHMTdvaDVNclZ4N2lkQkcwWGZLcXZzc3ZkY0g0UDVZQW52YUluS1lOb0luRTUxK3Jia3NBZDBOUllvcnNYZ1JGQ1ZYT1FiajFKczlhTkxQVXFTOGkwY0ZVUGt5blRZR2Evbk9vRzlCZDB5em82Tnora3NCb3UxMHdKYUlmQUlyN0w4cjROaXpZanRxdWhPcHFMWWlkUlR0c1hBUUNkT2NqK2tCVVFsQWI2Tk90bHd2Y2RmL0JXSmlzRmZmdVNjVFdmbUgwMlF6WXJWNkgvZG9OOFpleHN1YzVYYVJXSnZYZDd2UzluQkl1RWRZbThtQkw2TUpOVnduZE8zV3dPekhOUmlPa2cvbUNOOXVveDFETFo5OTIxeUlPUWZiZTBOYVJidVRnd2ZjcFFPSlpHbnVOSjNuVDVCbzh3MG5CVXBOMGthM1NwcGZDWGNVOWZHT3FvanlqRTVTZWJENVN5UDRQenprTGtkaUxjTGx4eVhKbURtSVN0VGxuZkcrV2lYYzZINThSaFlqckc3V2U4U0lPRGZwSWsrZS9Mbkh3SW5DYjYvUVJkWmJYUmw4eG8yTjFlQVJaekpoVUplMWJYSjY3OXF3SGhpSGJjbmZqU3pLVkRsenVSaDVaZXVyOTBWT1lLcDF0bTZsdlA2QWdyMWtOK1hvSXV4aWdENlVnaTJzL0FDbG96Szc1Vk5ESjNEdDlEUFlqRE1ndnJyaEN2VlFXUXdHUGd3dC82L0pGdHdjbnI4VDJVOWhFVC9HMzFLQThHLzhkeVZ0VlZWNE9JL0hQbVV0aGpPTHM0VktYTldPNTFCUzJSV2VkTEd1cVU4S1lSWmFTaWc1TmpqWWtudE9TcDF0TkhaOU5SV3dJajBjNmtPL0p2ZW9HMXNhUlJ1RWE1Y1ljSUUzQWhsZWNxcElRR3dkWUw4SXVHd1Z1Y0xNUXVqbmMwY0hGUHE3dVRMTmUxRlh3VGhuTUg1VGFRdWpVTXhGYzc2OTdkS1ZFbUJQM1J3QlQ0WHJ3U25vajcrMUdjcWJ4VjU3dkN5cTl3cWNtRlZpdGsrUWtXZDhlSUhoTk5XQnRQeWYvTGdSek8yWjVKYi9uTjBDUEI2aGtHanBXamRQWndNTEFZQ2lQTExzSTIvcFZIRUdJcldqdzdtbGtBY3hhSTZ1VTFCWml2dUQ3a0NKRnJKWkMyWDZaR2RKM0htUk15SmhEN3dkVDVVdHpJVHBmYUFqcmc0ZEtPRnhuVHJMZnRvRFFBUjdjTUEwemdJdDZIVWNXcXZQd0pPbUY5d3FYVkZCcVhtd01pOFE3Tm54NVNIQnZJbFVtOW9WZm1LQTJMNXFEZis3RXYvZWthTEordnhaV1BtcHRZTXMxNWhHUkxlenloRmJXQU9ocENGTXlJYU5LOFBRQkNadjErQnYxVERhWFBmM0tkY1gxell2eXE4eDFhTUo0VXpIZGZZWFZaei95WXR3NG4zeC82MDNvaTAyeWRQMjdPODlRT3ZJWlY4TUJVQ01jczNxVTN5NTY5ZUsyU0djN202M1lIa04rTWxoeXR2ZGVSL0QvdUVxZnIwaGl2Y0NYMXdLaEVJR1NaWTMza1MrMC8yTWxqSnpObDZpeXJKMjEvZmtHdEZyZHZKckYrbm80ekU4U3plTzhXK2VIYzZmK0dmaWhGcU9DYStoekV6eENRbjlDMDZzNnFyMDJ3NCs3ZlkwVzBwVDBHTFVyeDdYZ3FCK2h2SG92dU5adC93U3lyUnRZSlA0S0VMV2ErUkJWTitEWWdaeHJLWEJidm5LV3VlcnFaSHpiRVUyVlNXQXN5N0xCSllCcTN5UElXSGZ0QzNRYnNQZmJqMlhzQ0YrbjMrQ282S0ZvMGJJY3NDaC9RLzRlUlUwb0pJMG1CVys2alR0SWR4STBTUnR6VkxaZEdwaXYyM3JyNTNXQUlhNUpIcFBtMmxLRWx6dTZaVlBuMHc0NHNPeDVBQXZQaWdKZ3AzN085N1RkOEZSY093T3F2WmZ5WG5vd0hKcWpFR3dyU0RVQWVkeVA1ZmFwZGEvb1drVEJJbWVIRFhlUy9DbFpFbzBSZVFYS25FbEdLVlZkTXdxTnlybVY5eFFaczJkZ1FtNlpoOWRwN0tmNWZWTmJUUEViY1lsaFdhVjNFWWE1TkxFbm5nbmdBb1U3eTZxbEszQ2lSZnpCdm0xZmpVQzRhb25XSHFyUDFDbVZTSEg5eUpVK1NQYXc5QVdPTDY2YUd0bkdqbEgyNVVnQjVpQnN3cnZhblROYlFLVU53UUdlQWcxWTZvREh5Mk1VZUJaN3ByY3NKYkZqVHBlQzNrSDVTeTQ4cjRjZk5XNHpNWkxEN0UwWEgwTmNxNGFjLzBCN2hyRFZOTzVvME5iYVd5RFhMVjczQ1hkNG5rRlhhZmtRb2FLWEIrOHVkckpHTkg0SDcyL1YwL29oVnBvb3pnM3lCWGhvRlE1dXA5WXVqWExHdHpZZkw4dWt1bFZERHJrOGVaQzFZRTJha0d6czdzYmNzMEQ4OWFCWXRYYjlPOVJtSW91bDJTajRaWTMrM0FHcVg3ZlpTczdnY0NNVjdnSE9YRGJaMjNFS21Namw1N1VqRmNSQTg4NncxZk1ZMGlBNkI2aWF0U0JmOFl4SlFWaWh4QWFsVDg0ZXhHSVROK1ZLdGUyOFB6VVRVRURPbmZZME5jN1RWWlFpVjlpemdNcHk5bmgzYURET0pFb0VyM08yRXgwRGVhVFMrdW40RW1sdVFVWk9tNTZjbG1ZM0NHeWU1ck43V3pLNXRKZHAxMm80RjMrQU96bCs2VVh4VFZHdjdOenllSmxPRkVrY0ovQTVFSXpWYnJNN3Z1SFk2L0J5WUFjcWpSWk1vcnJLNEcxOXRyQmRUTUczbnNrbWZUUnpGRmRrMCtkbDNEektLU1pyZzhQNXVHdVZJQVp4cVl2YmgwdXpUUm9GVmNVSTFzbVZId0s0VTFwSDAzK01YZWoyNitNZXRTcFQwOUZFYWgrZUJNUXdYbVVSU3l5dHJMN3RGdHFLTmQrTDVBa3cyQUN1NGVDT0Mrb0pseFVWMnlYZEdaZ1N2Qi9VaXJ2azhta1pQejhUTXJHcFBpbG5NRUxDZk9lSmdSUTBXQ2R6enFRbmViMXZwWW56UWxQaHYxa0ZXbUdsKzY1Nkp5MmlackxTVHdCZnI4Zks5eFc3QWRMY0dIS3RIVzh5YWVuc2RSQ3QzNm9vTlNwMFNzUEdLZDZaVDVNaXFkeDczVXpKMFBRNGVMNFQ4UEFZSjdhb1h5WjFxdkJZMk83eENka3VQYjNxdW9nMUNWL21oV3V5bW5Lc05FZmVJelFqeSt2c0psRlQ5STFRRlRZK0pza3dVVDJKaUMyVTN2d1RPSHgxMWN4dDd0akhIcnZydEFaYlVWa0F6eUxybWJOS0ExcjFPM3pGMWlzWWxJTEF4THdkMjZzL1h0ZllVSDMyVjNqNUY5QmR1c0ZtV3RlY0RQU2VUS3AzL1dTRnZXZUN3NU9iZEoydU5IZXJ4NllRYll3Ty9XYTd6WHFHS1Y2VGNnRisxbXhtTDJ5S2FjbTBES1pBaGpyc0dBZ2ErV3BpZGV4aGRzd2hBbys0dDlPKzFGcy9qZ2Q3b0xmUFgyVjQvNWY5MXhWbnVSYWlzaFAvTklUclo1TndTMVdWNGp3OEdmMXRndFhPQVR5VlhtVWxEeUxDRFZlbTRDelZ5SkdwUDNxRE9CY3h0N0lFQTM3ZW9GeUZKSTZqNHBVMGZtQVZ1WTVwaEhUNTJQcVNyQTdoUEZjY00zeHpCdFN2NzUrU0dRMUdBbUh0TFlSZEtIdUJHY3dlWGpXOXlDeU5sWHo1Y01pdWdETnhDN3FrVk51d21JbzN1WUtYUi8rSkhVUkZOVk1YU1BrNHZYWmE3bFZkQWwreDV2VElVenpXQ2FTYjNIWXhLdG8vbzJvM3NDQW83OGZyVDB5KzUxb1NjQmF2NTk3NjdDcVJyaTNZT0Z2U2hMcHJGOGpoMEF0aE1STXl5cUZHVE45amQ3Y21RTUVtSGxwMEtHQzk5OU9ydW1JY2tuL1NWWGFJU0liQlRiZ2pxdUdVZnhWT2hqbTZ5bno4dlI2cHRMdFowMy80TndlYmVreDk4cVhkSWlIL09udEdySXBuK0Evcmw4cEdkSHkxTGtGQitWSlhnYUk4N3hVU29od3lhUUU2b3I2OGhzd3RoMWd6VHo1aVM5d1MwM0NiQ3NwTkViSHpWSmtMeG1ia1U4SHdETUJRSDRKU2NBbTlmamFBbXh2QXpGTThBb1dScStPV1drM2FrNnhGTWlONGluVVl1OTJ3ZU1EaHg4akRZb1didUZoR3lKeHdCUE9QdnNJQWRROHZ1NHVYclB1bUpxcUxRZmtobEtKc3UrTDh4Q0tVQ1NtUFhqZkIzRkpTclRzMzFTdWV6bGFlVXRiNmF4Uy96L1lmTElsRW5UN0lTWVc4Zm9MRmJOVnYxZnVLZkEzQjh4bTM2ZXJUMG5pb3NxWFZ4SG5nUUowZzBhWk4wYkloeEZmUTB2VTN2TjJuRWtXRGsvMVdRZU8vTkI2aFQ2RFpiS3Zybmllak53Vi9xMDRrSlhlNWZjVGpZK3ViMzRuQ2FyYXVPQ1dDMmN0SUt2MFFuV3RKdWt5S1ZvYmtkT1lwMWZpM0NVN2wydHY0bDFZYTVRVlB1a0tPTnhnNVVxbklOT0poZDlsSWJlVktYOVp2TDdWczBRVk9FdXFCZ0ZMNWptNG50QURNRTBxVlBxb25ETm5pVlRMM3RrRC84SE9hM2VMRFJyUW5wNldnaUNNb0RsYU5uTW14dkFJMjJtNFc0TVd1cEljTEJpK3o2eEZWajJqRDJzaGttQS9aZDJsbEdZemg0WGpKck5vQkFHY2psa2lmRXdOQmtCM0lLVXJPbUVaOUk1REZ5SWVkb1RuSHhUK0tqdVNNaXduam5ReFllekRueE9BSStSdEZldU1PYW5VZDdOMDBEbFg3d3BJMnBDYVhyeG9mUHpPZHh1QXNIcjM4aGNObHhwTXk2L1NuL3BvenZiaHA2NXR5YTFTMGNuMXdGWjdmNjFDNE93bi8zb1p0VE8yQnNUTkR4dzY0WUtqbTJNN1pBRkRvbFdpQmRmanlHSnZjaGkxM2RQUmh4Z1haYWthYTNxQjgzYnJDS2hCNit3K0VkKzNFbkxXU0loVG5DT3NwcmVJSWJYYXpJY2NPaUp0U3pzaENGT1EwQ3FhTXJHeUYrQWV6TythbWVSc2g0UDF2OHZrOFBWVjNtcFJVNmJjcE1EMlhvZ2JFSklQamphbUQ0ZTJuZkd6NStvTWYwL2REb0ZIZEZuKzE1SzdjVG5sOXZKOTN6cTVUaG00aG1NakZpMFBmUnJjNjR2SWFOWnlSa0p6VGxMMW5DWlJkUkl0aWcyTVA4Y2hzSnM4dXVDODdXSnZ3SXlSWDZ3TlhJakhhdlBzeDZ5Yk96cTVUblduWHo1akpaK0VYa00waE1ReVdKclROZWcwSFJuQ2wxeldBNkEzZHZvMTBWUWJRMGlQYUpwaU51OVozb0RPMHd5MnVZdURncERmUjQxM0MrbWpZVWJLY2NhakVVQ0NPazZRaisrZ1VSTHRZb0N3MC9mQzJiYVg4bHRWbTF4ZnBVeVF2Y2hHcjhmc1dxYUs4eFdtbC9hbytDaTZuSlJtcGxxaSt1czhVRnhLbzlRbDBrSmdEcWt4RDhxbzFlNVRDQStNcExQV25GUUxESFJpbCsvaVNuTUZBRGVvWE9VdGYzUGFMQVVhT1lOdUdXVUhjQ3FqQU5yWkRyRCtLRHRRQW9uNFpRRFlrUTFBd0VGRk9oWTR5aXcwci92Uk1qRVBlTlMrS3RXay9wdkVRQ1VEc0dIT1Zoc3djdFcxdTU5UTd3bDd0ZHAwa2NNa0RhQ1dkZ0xKWDN0L3JCcG1VTElFeDlPaFRTYkd0Z1E2cjFKRzdoQXVvcGNRdExFRGhJZmxBU2luMklOTUxHUkh6b0xwV01qWFAydXNMdjNMSy9Xb211RFd4RWp6eGgrS1doZmVaVVYwR2ZOY21RZHZrQTc0b0NzQ2ZmQStjbTJuS1V3ME1uWEMxY0ptYlBncFhwbkR2dXRBeERwU0JHV0NCT2NScllsOVNkK25HWWZvSU9zT3Q5dUk3MkFWMG9nNVl2MnJUTVNMUUdXSWFxblMyQTZYWGpSU0tweFkxWDZWU2twVnZ2L1NBWmVIUXVCMTRvREE4Snl6VjVYTU9NUFVxZ0N1Q1lveDVEb2tIL1RUeEJiaGJrSmk2ekNsNmZvb3FETnFoQmNreVNvbWVRVE5OVjlxR2hrOUVVUXd6L1VGODZ4OW1Pd3c1dzhEYnBzeUpremVhVlhKUmRndW1sVFNLbGxwcXJObHZrSGMzZUtpWmVlNXNnMHp2YnA5a0VYUlpLVjExdzZvY0NNVGJlM1RQWExUN1FpSUtXZnZUWTU3Vnp3WC9GMEs4WlUxaW5JcDNodW5WQ3dZdlUzSzBZaERpZC9qS2xRM3BocXR2aTRpUHNERUlsZFNkQTNWSWxiMURCbDZSRW5PNHEzZFhRanRDUm42eUNhL1JjQkxTeXQ3T0gvRXpwZktzTkdsWTNuUGpqN1MyMFdHajFEV3hTRk9oNWJtS2t0ME5oY0Z0SnQ4TFJtS0RJNUhkYlZ6Q2VqYzRDL1hMUk5ZbGlJc3hKZEkvWXkydVE1cDlpa21KcFFhQ2o3bkxnUGFraFlXSEZGYnVyYWVVWlc0Uk4rcHVOM3hJSTZRMjJtdk1SNi9mRG1ReVBYNWh1WGdYYXhJWHdtaTRpbjNzUkEySXZzNlpyQ1QyOEljbDhYcnFHaC9MdjF1OFZsWWpORmxBZnRQbW5MNlNGNFNWSmp5cHpYMkR4SldvVzV5QThrUWVIVFVab3VINXR4aDFRYmV4VWpuaXI4YkJLZGlubkNWZ0VNbEpKaURRc1ZJZ3pIdkhZSG9nc0kvREZJTkc4VWthWFFXMG9nTVdTRkRFQVp2cFBKQVRTSTVXUFAwa0V4R1NwTzVJalVGdEszZEY4dnI5cHRUa3NkVnlHOG11dzd0TWUvM1BvZkFvRmJhMjExMnlyVC9xR0JQcnZaMDhDSU9OMW1DeHU2b3lKQzFucXRlcVcwSlg5c1R1RVl3R1NqQU5PT01XcEl5QmQ1eklDb3FFU2Z6WDk4bE1EUWlzaFlGRXllQ2VkNDIwRmsyVFpWUnhvdXlncWlrTHhPUEdKSHFlL0xjVlc0ZVhVbnJVUnVhN21mU0QzUVBhK0EzWlIwU2lzTEZGdzRObmlPTFBVTkRHSEcrWUk3VGZlc09Pbk5tcDFDd1pkeHpVM2RvYmlOcUl4Ny95VkEyTUJXZTN1VnZ5MXZqL2MrajVpdkxaVU5EQXBKN1RmcUFzT1phVWZOa2FGbGp0dFhvVkxNTWdRYnpJMHUySGUwaE9aUTRXMXFWa0ZWejBxeVRqbXNXUlVwSDBYZnZuODVPSEhWVmZlWmdTRm5PSDVGbit6dlZkYjF2ZzdublM1ZERWZlliWjhybXljUmlHczhzSEFxRzI0Zm1qRGxiMlVSZVdRN0Fna2RaeE5GZ3hUYnRmZ0YzdXkwUVdHSEVuWEtGQ3hsOFRhTEthTHJtYzUxWHFiS291c3lnK2E5dVozL2RPaEdJbFRyS0llSWJWT0l1aUpZd0w4N243MjM4cXh4VWhLTE5NRncxWVBPclZKcGx6YkFDTHdMSkN4RWRjb3hTY25FVjlCWFVCKzYxcHFIaTB6TTc1U1pHNVZ1YlpLWWlVR1RvbkI0SGtnbFA3VFd4aVVWRm1ySnJBalNYaXN4a3BJZUxDaUc3a05ua0ozY0dRR2JudHZ4MVlKZy9VYTZrRkJqQmJlcVdoOGJWMmFSaXBrMWFpditFK2FjMnRxK0t4ZGw1dnU3L3hOWWFwM00yc1dJZk9xRFBjaEF3NzNuSlJORzV2aVZoWExTZE5ZWUJ2UFg2Zm01N3BiUjIxbWtxMWRaMXNLZk5xYnRyT0ZjQjgvaDExSDFNdWFaTzdLR0ljM0xwajRQV2pZQWdLRTVCTHo1SmVvVUtxYVYvcExyUWdPc3lYT1QvTzV1dkMwT1VHcEdROHV3V21FNVZrQndwOFRqclJKL1VCMEd5alhXd1Z4UDcvc3NwYWl5NzA4SnZJQ0dVMFN1M202R0FPU1RxZVJabVptVUI0WjFTdFplR1Z5UzZCN2F2enhKRWhESHBrZVNEb05VNGhBTmcxcE9EUmEwdDB5c3c2TE5nVHUvWjhDU2dna0dpeHlEOW5kMzlRVkdFRHE5bWNQZ2RsMkpSOFlwbDU3ZGR0NWphYnphVHhsUWRNTVdiWUR0cWd4YmV2SStubkp0Um0yLzBPeFplSFptMk1QN3FYL29iOVRKNDA3OXZjQ0RBNUpLblNRQzBlcDdpcG9BUFNCb1dzMWxYRFZ2MkluYnJHbnpJeU5lSmd5OGlVRk1yUjZINnpBMzhMNGYzMytxSjFqb0JHdFRNRlVHcGdXaHI3ejN0Lzc1bDhIbXE1bzdkMGpMNDhyc3dDL2dvaXhhbEdsN1Y2NzZSdG15NUZQeittdy9PRXpIN1FIUkU1K0J3Q3dWVVk5TlZxVEFGcXk0cWlmVFZIdEJGSUliZUtHeDJEMmQwSFlZNmdPb1NrdUE4cmJoLzA1UnVOaXU0Nm9talNwYVZQVUM1VXZPMTBLUGpZL0JxcU91UDRTbVhEVXlkVVFDV3h5KzZyTEFsdUhxWVdaSnIvREY3aEN2Skx2N3JpKytnNzUwdEJXUjZKMEs2YURNd3o4T2g3V2hGNmIrQjlvdHBOME5vQ2h2Mk5lVEpVbXlhbGFqVDRqS3Ayc3V5SXRRMmNORXhJYUk5cGRLMW81aXo4SmFWN09hK1ZyR1FZNzdYdlU2cTdySkJ2ZktNL1p3Q1RvVXJPQ25IL215c1BNYmJ5eHdXTXhscUJuOCtQcmlCMkFZYkpxVmRPV0hHcy9NZURmMHY1VWwvVXhDQy9JRTB1bkllNkk3UklOM05WUmtiUFpGODNrK2oyanRxUkU1M3dQQ21NdFljbzczM01vVWh6UktwV01wYVVPcFIrUXZqRk9hM3M5bDhnZ2pBYTQ3alU1ZnZRbWUrMHNBKzVIN0dOamdpYkNzazZIQVVaTmhIQUZPdkdDaTlPeUNHWHA5R0J2cTRYdENJZDVuQjRwVDZFZlFmY1VIQXRjaENVUkpYcnRXWjdpcWp6ZnkwNWtPbkJMb1ZCbUxGOXJnVXRoWjU0VWcvSTBmaFJCekQ0dUNIczdxOFlmaXlVNjBvOXB4RFdVR0hOZkREcGxydHNhNk5nZlpGMkQ1RWhJb28wcWNJaUJScVFxRUhEdTZjbUE1MFpKcEZuVml3TFVSTUxxQWF6VStua1Zya3BGUUJFYzVIN0NrVVRWMlZOTXFHYlpReEVpOGlDRS93RDhZQUhUelZIRGlhQUJzYlg3YnFZdEFyYTQ4Nmo4bGlKT0Jlc015MnpOdE1MNUZXWWcrei9DVmNUakVKaU9DS0d6cTAzdzRKeXBCY1UxZ1IzNlQ1NUFmUzNic25hdmhIUFVyY29ZRGxFSks0QXkzSGFkYUdwWmlyVHJFYlFiU2krQlczQjhjUE04TWtONmhsQVVXWmp1MkdjNFc2cHpKLzFKK1dReUM3K3JSSkpRRXVLZ3MvUlRlQXZGbjZwbzFFcGN5TDVzUm1SMzRNUlZZL3o2bjZraWxUZlhqeTlwMDR1UDlVMldmVVJTMEg2Tk1wK0Fqa09GdUEvVlhHeGJrUmh1TFdrdjZyUGR5dXg3R0RwMnJ2bHpleFNJTHRIclN3R05LQ1lNc1I2QnV5aithNnd2L0wxQktVZjlsT1VNOXdGY1JsKzg4UUNRaFRTRGhndHBxdlFZaVczbmJlMmhyb1lDaHpGL3Z1Y0JJOHEyMzNuQ085T0FHbUJqclFPZ3VzbmdYY2JycXA2SGp1N2daQjRybzd2UlU2eHdWd29NUk5JWWx2a2UvaWZ6cTFKZlEwa3hLSTdXblJVVjFnejNoZkFORG1oblpDdGRUK3luTHIyRTBwbUtRcllGR0tHU3ZQNExFbkdUY05VbndvaDFOSUgzbXJKN1RRb1kzbHhBZFVNbHhaaEFFR1FIZVRrbE12dTBrd01wM3pjOHRmazVHdXgxN0ZacFZhL2thWlZzTGo1b2JrWHpMWk5Dcmg5YmNKNnhpeEk0cTgzdUgvbDFJaU95YzFhWFFyQlFWWTlmOXdWWk9wTnpqbWNXeVdZRXN3bG9ZNHV1ZmlkOUEvUFppbTBYcFRvY1JibVJLTWlKcjdYb3pjNlZZNjRQMnpOK3JRSndkc0NhRlZHRGpOVVNsenh3WjhlVDU3MVplN2RFZXRGTHR5TXNwM2s2YUZqMFlSYWI4NXlseGVGNUVTQmtqQ3VIRTZJZmo0dlBGSWNOT0phWWZqbkNkSWtMcWNndjN4azJEcmlpMTk4L3pmV1FyakJid0NpZUl6dHFWUFdDRTdsamV5OEFoSVZVN292cnZkakVZNGYwVVVtOWdPSjg5K044VXhJWWZpRXdiZFJLVUlyMXQySENGQ2o1SEZHY1BocXppZnV5U1pjZ2JhWC9ldis3TUpiSS9ZQ1hGUEFubGxSaUJ1U0trWVk2Tk5SQ2t2a282SE04QU41OUl0V0FTckxVSjFVYU9ZM0N1R1pzc0g4WFI3M2xBL0k0dnJISFJab2p4ZlR4ZXFKc1RHMGYxYlpkNUlzbzNyVElQMjlLbmNJYUNPTEduVzJYaXA5Vzl2QktoRm56am1jOTEwdGxUN3YwOXFHZ0kvR3hNMWRwUzJxSkVyS3VUbzV1dXBoeU9jTXpSbVBVVXRKbEI2VTVPRWtOK0dJQmlCeVBJVzQ2ZTNmVjl5T0RRMVZyVmtxRnFaQlpwWXd4eTlKQ0hQWGgrZmhoaE5TV2lZWnQ1YXVUT0FFUHBvanYrc09YS3VQOTF5b3gxT0pRTzBUNmJKTGhVY1pOZWYxUHA4MG10K3c1K0EyVWZvcm9XVGowbWJkaVB0OWFsSGtiT2hENGhOM3BOQ0o4WEFyUlM2S0ZKUzArR1ArNXdVaTBVL0p1WEtybGdhaWFjUklOMFJzaFo3S1U0TS9MZTNZYjRrT1pDdVFkd1hxRGh1emNpVkFDYUpYOUdlSVNubWRySVcyOVN2SHgvdTBML04vWXI1UEI4UkVYZjR4Tk5hUUx4UW0ra2lvWUVYdlZkRis3cW9pNThvcjc5TXZaS01aYmdEMk5NYmUrdXVEVlc5V3BYRTcrVWFlWWlIV2dLdW91QXhSY0ZxMFJZdVJWcGVsVEJxUFJoeCtidnFTZ0syMUFZeTRRcExDR1R2YTRUakhiYVFUUndFS2JFb1lEMjdiUU45MWcvNGl4d3FwZW9YM0F1V2NtbEFFUnBwcDcrU2hxVXRDRUlTbTREdEtNV1NMQUZDcDJmM3A3UlU4MGVrWXhSREhyc01DQlBGQWVyWmJiUnZtdnNkenZpbVF4cFcwc0RENGR2WkZzeXQyREJmbXlpVURRV0Eyam1xaG9pVU52MU15dVQ3T281VG1SaUtJZVl0RGF6c1gwUHBRK0hmYW5FY1B4eURoQ3pqaW44Q0p1dE12cHF2OWl3QVBHUmNaVXVZTHhheFRZVmZ2ZlBlNW9mdDkvNFZSbWM0MnV2RGVZYitrNjg0UXljWG4yMlo5MjBoQmw0SHFyUXA5NWpYaXJoYWxiRk14TVA5WHE5bXd0WndVTVpCdkpGTWZlMnhpUDQrMk5ReGFYcGl2ZWRHMzhSTVdUVHRZWHpFN0c2UlBjNWc0RU52N1VYbnExNjZDdll4L05ZcDBzdTNubDZzQ3ZsRTJXU3V4TVcweXhIMzlaMU5RUlZFNzdEcDI3U1VRRWo1c3FWVGpzeklBTmpROXVDN2VXQ2RGUHErdVZ5YTRjSWdRS2FyNFovRS9NSkhlTU5HR0xpUWNiNk5jdkwyNmZXTVJDZWo3UzN2WllRdk1FTHQxTHhXMytTWHZRZHpXWUE1TVBiNHgyU1EzV0tlRW4zdmxSazFXUEQ3bUltNFhrcjRrbnh5ZURyNGZIY3ZVNnZRZGsvbzIzSnFzcXFlRWRucjhGVFUxMXh2bFZGMFFJOUx1TG1pbVNDWkpvQ0xtaWFVK0YxdmoveUFNOE9ncENCTDZPT2hMa1NlZ1V0Q2ErbXk5Z2wrVnorOVBmd3lZb2diRVdSbEtlVC9QMjN1Qk5sOWxmNTV5MXVVc3JlOEFxQVdCai9KNmtzWnJVeWxWSGVnTndHbXlmbzNJZlBmdTBnQzE4cnptdVUrck9LbWJ4ZXVnYWNRNHIzb2hxdmVQOU9pT1JHQWlmMWVlWjdFeFZ4T0NjU0VWUmRWSW02WnJtY3V6d1l3TWp6dXZlY3VxTWw4UUkxdzJuY0lKcDBSTTZFdDd6N05Dd00walorMWlxdTh4ejdPS2Z5ODV4VzJBWUtOWGFGcUJRRzBEQ25tclBwSlBSM2JiTXlkUHpFZ21DSkpoSG9ScmFMcVM4UnBoYmc0bzE3THczN0VONUE1b2MraUdOeDVFRzBBdmdTM0ovNGVRd0R2Y3hPMkkzaXl1MGtpeUZ6NUk4RVJjZzRIR0wwRU9YaytDN3RkU3N2d21JTkNzZUVaaHRWMlFhSzRHODBvRVF6U09jWGIrZXU1SmZqS2V2YlFOY3U2UzIybW9vOEtWaGR6QVVscTI4dlY5OXJBMWM3N1cvaGhGK3lKdzVXZzg0dXlLS3dpZGtLSVRjYzd1NkxFVXFZQzNVdXlPN1l2Kzg3bnhUb01wSDlqY3FXNTlVU1RjeGRhYjFOK21NbUFIVS9qNG1rWDAzU2dzcUR0Y0lHeXpYY0UyVUhvQ1FLRGNWbDVVM1ZDR2NtdnFLUk43VTE1Q2ZrTVlJSjhwVUZJRXdiZ1h4aHV2YmV6bjRtMCtWVHEyeDNRU1ptekxOc2tMbUIvSzV0ckJCTUR4MmhDeWFlNmtGK0JTamRNOWUrOXhoYmJIRTIwQW5oRlJVZVpXLyt2bDEram5YT0JzcVpvL3BKV0xBSkI4bVVxaEZ0b3pQNVlzbnFCUGZWNnBkZXd6RVRaTHBkeTdWOGNHSXoxNHBtU0RRY2NrWlVqTkVHa2Z0MWlhckwwb3RxWTJBc2c2eDBrem5UcEE4OVNDbzFCMUVJM2M1Y0tLZzN3blJlanJNR0c3ZDh6SFBraWw4WFBIS0F1dHhwdW81UEZKbG1VdVN3RGwrbWtmS1Rva0ZoMXBFRmc3ZHJLLzBkRG9rYVg1RGsrZmJlSzhydGp5cnFmNWl0SDd2Z1NZZmhCcEV6eVhkaWlCY2FGWEpaYlIyWnBMekdlRzBoUWc1MW1kNTMzNVlmVVc0SVJVSklxTmVndGRhamZHMnhKTWRtN3hkbEg1dFI3ZDhnWFVtQjluQmlldmsyNWJ6K1pCcis0QndHUm9iZmtobTl2ckpQRmRPRVJPbVZVdEF1c0c1YVVJMFRyWkNnZCtzb1UyeTVib2lCeG9xVDAyK0szZ3pTcmZXaElGb2ZJVmpMbXRYbDFWc04yalYySlRTa1BQVWVPbFVCSWEvUVByTW5VLzhFeWNxdFNCc1NqN3prcG1jbko1RGNXc1VTS2g1NkorMXlSU3FXenlDclBZZG5QVllSVlZQSThlUkVmTkhqL1JtWFJzUmVoaWZKVi85dzJyTDZmWnVPYjdnNFpUemZJbHluRHBKWk9IdXg1NE5LNnlDTlBGUUZXYlBSUzBWQ3d4WmwrNXozQlNJT3dRVDM4WWluQTZidE00aFkyNjUvQi9zR014dW85K0VjUjlJdDJPL0lzSllYSWNLdU1qK3VKM3dHYzQ2SC8xR0ZqVlJQZU4rTCszS2ZmSjQzTDRkS0NiYjJMdkZxblBvNldNQnlwVWJtV1ltS3hDeFp2S3Eyd3BKQndZZEltUWZIZU51d0RSa0VaMHF0Y09samNqUUNsWGkrMXVKZWRqcGgrYzhXZlpsdUI2Q1doSzdPTU1Fb2V6VHZSZFp3ZTVYa3d4ZStmcmNSaVlRVWtXWFpwQklwcSsrbHBiNGoybXJhVkI1NTliTmUvVmgvYVY5NVJsTmNpVVZzVlN4ZDl6ZzRlT0FYQmxvN2FyaUp3dUo4ZHdJb1lnaWNFZ0FTUEdrYlFyZHNjNUM5UFVHYUs4Snkzc25ldldtd1I3djhxSnRLK3B1bEVyODRoT04zWWs4WjhuVjNFaUJZTVVKZTd1K0QrdTRYb05KOW93TVNqZFJJOUplMXB2cmdWRnBlSCt5U3cwazhOMU5JVEltWVAyaVFRblJ0NTRDci9KSDJFanNUTEUvWlRpUllIT3dUOXVkaHgwUDQ1ZHExV2hRb3IwUDhlTTZKMDNtRVcwSVo0NlVjQmZQVm5IbS9oVmtnL0hoRVZHcVEyVEN1Z003UW1hK3VkQlYyT2l1MkdVQ3VWcnhjc1J2NnRab3VRWjlheUEwR3ZoWUJFQ1NmdlVjUDI1TUttMU5idmU1ZGNzVm5IdUhjTTFHc00wQUVoUitpRUlTZnl0R0JZZGc2b2ZuL2R2ei9NYXBtcTlCSEJqUnB6eWhSSU9vZEVNRFFRL2ZBR09XZllmRFptU0ljVXN5aGdidjhTNFpXQkF0c1RCQnF5Y0l2UFIyNjZ2R3BJa3JIdUUyOXNGZk1pdDkxTWM2YmQrbUFDWjVRdmtOOHhLd2hiUGNOc05DZ3lrTGtneGpTbThQVHhTWEc1YTFwK2RsUmxiMHQ3VUcwTGdldlViNEkreXVJTjZ1bURoTVVtUlZ4clZmL1ZWNlo0UWE2UENLWVdzbHNPcnZneVBpdkhoNFN2cVhvNG9zenRTQlkyUUNscXVIL0RwazlTQVE1WjZMUTdnUmZocFNjaGZDZFVDdWNJNGgxWFJIUDA2NjBLNWt2YUI3N1JTWGNiU3RVWEFvTlVKNUpCWU1XMiswUnJwcGVMejdTdXQ2UHhJbWNRWDlFVGQ2SUhuZmNnMm04QVR1UEVObXRodzdveURvbEl3OTRyS3R6NndxU0JBaklZemFtbGZScnV5ZnI3WGJ0M1lIVTlEZjN0Qm1jczdCUllGYnpqTGt5TVZZTDVsSDAxUGFxaFdZRXl1YUdCMmllZWZxelVYK24wOE5mR0hXaEYxbHprdlNzaENodEpCTWhld1JFWWY3TFpCcjcrN1B4NzZyRDNsSUVEMmVuREhIOWRpY215RERoRGxQZ0FudWQvYVNpL0Q4N3FwNGEwWkFoMlk2REJpQ2xOSUNtZWNlYW1FWFczVy90dU1jNEx4VERYbHBRc3RlUEUrODhKMElCRmlYaVlhMVN4NERDeU5JUUEyai9ibU9LeUN6UzNzKzdCTGxodkVLTE9YNE5oUEp4QWtrdEExMmFJRUtmUUpHZDFDM2w1ZjdDQkFES2VPNUZhWWVxbFpWak93bUFFWGUvNU5SOXkzNmxLVFkrK053cUVTY2xLL1k1V3N1QmRBWHF1R2Z4cHVPT0RHaUNROHU5eS9rRHV6RExQT2wrbFBhTldlZU9uR0NzcVdBOFdiblFETzZDMng5MGZqZTFTMU91eVNKNERsSVpWaDZZY3hXeURsT3d3Nmt4Q1p4WVNBd09oVVU4aFJuRnA3RzdqeXlSQ3RoM3NTRnU4bFA1ZklDNXJnZVpnbkVhc2dneUlaVVRscFI4dC9PbHpOc3RLZVNMenI5SWpXbnN3V1RBL3VrQkZnaVBDZGxxb20veHJmNktGdm54WTlFTmpZYmUxenhodWlZUWd2TUh2U29FR25MRHJrVkNNMTZCeWlkbkZBbFBia01jWGpHdnpXcFBBS3lTVWhZVGQyUXVwZWt2SGFSazR1MllhMlNVcU4xN2FUWjUrMGRiREhFQUV6WmhTZ1J1QW9pZDhyaEZYS2RhM3MxSkdWbWpXclpRMlBwZFNQWnBueHdJL2VJbzExcjdpTkZyRndmQ094em9IVTJlSXFmNE9mZWZDWkZZMHBqMnh0U21XUEpETkRHRnJ3dVpVNC8xNmU4V29OL1llMUJzNnZIblVhdHhDUXM5WDk2dnRHTm5PaEdFKzd5T21tTm9XbEFRbGNwZHRZSHNRNm1TeWdaTnh5b2ZPdjI2SjB0S01MWXFKRUlUNVNlMU90TldSd2NMQTJpMWhIUUU1TTJjalhuYlV5b2xOMUp4clE1MVdOeUdwT1JkRmRmSEl1aTN5NUh1MThva1NVak9heFlKVTNDNG1ac1oybFJyRG95U0VmMTJDeVo3eld3NHpnelJpeUl1dW1nV2tyODlzZXN5SDJFQXR4VnNraHNablVmdnhNb3Z5S2VrOUNZS0hFTFZ5TXVuWUtOUDV5NVFUVjFDaEdIUlVCMFVsZW1LRURMSENZYXorUnpmSmoycEhxT1BWZFB3cDY4YXNac2RrTVJuZjBRckJvOTZ5SStzck55cHU2OG1ZNDRZL3lCSk9SK1RxY1JmbXNxTllYeUlqelFkQXFTZm5HWUNKQzBrWEdlYkVBcFRQY1JxaHo1TDB0M3ZpM2NVclg2NkdxUVlXSU9sUFFPRkZQd0xnVll6Z20yK2VveVpPck1CdkNlYlQ3Z2p2OVJlMXRlYzZhbS93UG4rYUtXL3h0bzQwMDRrR0pZM0JsbXdtM2lGSnl5RWVKN3YrbldZZWtrL3U3OEFqcGdMUFQ1NTFqaC82VG94NjdUQ3ZkTEw1ZGRlOUNBeldzWWZpRmIybHhZUTd2UitSLzVtNWdlcGt0WU11NkVqRTlRbmUwaVVwRCtaWk5aT0duTm5PeVNMWXYyS1FmS2xjbHBmSzhCM2l4WHU3M3NoWllwb21TUVgrMUxhSG1SSUVWcVJIeHc0ZVFjd0wrQjJmclVkVnNrRnFvY2g5dVRRWGViQWdvRExEQ1J1TndIQVNLQUxmR1R3MmdmTmFLWHhPMVMyVkxSdGV0cWgvVEVaeklXZEhLc1hkY0ZoK0F0eGEwMjV5T1NVcUY1dGk1N2I0S04raGY1MW1VS29RSEJlZmI2ZVFrVG8yOGZNbGtDaTQ0bEdxMDF0T1p0czV6YW5yVXVQcllGOFRFRDJBZjk1R0FicTcveW1RQ0JzTytCK1dMTFVyaERsa1EvZXBZZVgrUVdMMGNMdWVPTHR4ekZoNi9TdVhMWTFMSzF1U0pnQmc0emc3a0p5bnk5Yk82YXRpTC9QMjB2eGxhRWYvZjcwY3Bqb1l3L1pwN0VYL3Q5NlNWWjRiL3FVTWNzL1lvZWdGL0hsaHRGM2hUbHhpUWxUbzdoWDRPRkJPQnJIOE1JS0swVjNEOG1NdDdQMElWZGJJd0UrWXBYOHFnVG5hblo2TS9nN2QrOCtxWkxhUDdQdXZkUTlrNkRKU0hENGFnYStFK2xBeHlZVm01NUdSSTl5VUJHc0ZYVGE3Tm5mNTlFendPLzl4dnBUbmpObWp3cThDN203Nmh2L1kzdm9mS1NhMDdvTk55V1liSC90cWlpWnJaYVNzd1phemhYMHh4TC9HRmtYcFFQYnJxb1FOZEk4bHZJWG5MejZxQ3hIakxKRG1tWXlCMEhtc0dPcUpDT1ZFT2dGK1U5SDNyQ2JWcFBWZW4xYk9TUWdGTThKMmcremZHU3NmdDcrMDRlUW1HbTZEd1hZeXkzcTZYbnJuN2o3T21XUjlUQ2s1a3FhQkRuYk9nR3FZNHoyUmVQMW5GNDkyVVR0c2RVaWt3MVJ4TFVvcWhhT3M2NXEzM1lzK2gzY3RsbG9XVmczZ1hmYkdWUHladGVHNUFVbWhVVWgvdU9BYy9FNGhvaXBsa3NuQTRkVUJDaDBzK0Nhd203OHNwWTF6S3ZnRHQ0VTA2SEtteEdqUmRFcWlhZDgzekNyRy9xcHNEcE01KzhldWZEZTNtTWd2YXBUNmtGUnN5VDRGS3FxdHVBRngxVHNZOUxzK2dlTytyQ2RZcFViRklyeVZTdjhVMlFkdjlwUjBjQm5ncDhnb3N5UTd1WlkrckFRQzgvT3lRQW41NmV0S1NMMWR2bmJ3VVc5eG5wcEppeStINTNVRnhESUpCWWRYVFMzRW4rbXFTNTcvd0w5bHZoQmdFY0FQU09tV3Y1Rzk4V3daLzMzSHpqbWU3anZOVjVXZWcvQ2o2QUVMMXR5Z3AvRVN0aW91TWtndytaZ08rdVp1MXFoR0duVUM4WW5CVmVsay9HdkMycTJNZGxTYlBWUTNCWDBWOE9qUnh6ZHR4S3NUMEdsUGNoa3VEWE1IakxlYnlLWmdQdU9wUVByZVRCbU5ud1NVSjUwKytFbXBFSkFSOWZJSlpaMk15MnR1ZU0zM0MzNklNcHVGeFJaaDFuNDlCWTNYVllSaFZsYlJyTUNsTkhtS0RUTDZubktKZDRIVi9GWityYmplNVE2dk1OR0hCK0NQVUlIblFIb0Rlb20vaXNldDBmOWxFbVB4SXVjSVpnZXNaejJad1M2VTZJdi8zL09KN1lpY2VIc3hob0xqeUVXT2RHdkowVkI4YVZmamJJM0pZYWxXbUVRUHZwa1FSdWg3S2kyVEtQUFBic1hSeklvMitBSTNiU3hKVkk0MUtyRHZiS2RMeTlrb0cyeWM2R25nV1NlN20wVjlDVVBnY3doS3lsMGQ2K2Z2cHltbUpPTTZSd0VoS0tyUm5PcUlDUXRrdjArTVpYZTZrbDBUTHJvM1kwMGxwNk5RbXJLcVZGdjlWZXdEVEE3NW1KcldZc1F4TFluZ2ZLQXZzUkI2N3VyaGtvTXF0REJHSzhyQ0Z3blhyeVVZdVd2Q3pWY3JEazNBTEJJaUlCaVpmRzJhSkRBb0lSdW9Sd2RVdnFsZ2lxNStxbDVWZ2VtTERYRFIrUFNTK0Z0cFk3eTlERktLMGdtbkZSN0FoS25FN21oQkV5RjBRQUs0Q2FUMVJ5WWhFcXVjY3N0UnFXbHY0TUNaQVVpeUxpWllOckE4WGtuMGw0OHk1bWhoOGpIMlhRWlVrcG9oQUlkOVo4N2lkS0VJSVEwUkhjeDZnakZ5UE1PQ0p2ZXg4anFPV2J4UU9yRTFtVko4eDNVZ3Y0YUg2ZU5uUDRMamdRWnNhQ1FCLzNUa3prNXRFSUY5OFRUYmlZRmswUUd1S3kxUmR4aGdJQzl0Q3RJb3F0Y3JIaWhhMmdJcjdaMlFXRFZheHpYVXFNMXhzTnVKYVBvakdrK3RvSkJQRXRRTGtMa09mR0ZKNTI3WENwMzIrd0kyOEVXaE1QZ1g2OXdVd0x3ZnRzWWpQSGpwdzUwS082Ujh1Wk90WlB2WDBNenV2eERWUkRKYnhwN2F4UnE3TzBRalNFTnhxOXkweERlaThQcWJKUDVpYzQwVlgrbWg0Vkkzdmlzc1RjWExuRzNZbFY4a2xIQ0IrcEVDbDBRd3FzMEpqUi84MHN6bXhjOVBXaWlhbUhteS96ZDcxTnpaZXRRV3dPT085QkJLVm5VYmdSUnhRVndnc2N2Y0JER0V2WGkzazRGT1hDRXdOQ04wU0lpZnBLWTZUUFV4VmRjdndndWd5TTFVUUlMcEpSL1BLWWdHOVQyaTRJNWhpQnZEbzNvTStZKy9kYTZ4TGJ6dk04b0psdmhUeldKM002SXBxbDRMT3NlSmNKZDdZZUs4ZjFpcWlTMU1VQW50ZTVPckZpQmF5SUpzNUVHeUdoekZtaXJwRVUvNEI0SFRHYlo4R2ZDaDU4TUN6cGFoVHNCZmpjRVZheXdnYzRYUVFkWGJIWlJLVjdhdUx6bDVBOVBoMldZV3BRaVd3blM4U24rcFlUU2lYMXRzSlJheTg1a3RqWFNGVGxuU2dscDltNGZSQXBhYnU5VzlFUFZLWk9zbE9SZnlGYnlqRndoVmZhZVJmakJIWTd5eUNxMW9QNGx1WmhHcWpkcmk0Q0ZxNTRCVmNrQWpoOXJDU2libVNLdi95SXR5YW1Xa3h4ditQOThWNm9wREhxVnhwOVYxTXVlZHhvWm1IWlk5RTQrUkdBYkNLa3F0YnBidys1ZUVMZ2x0MjVzajVZY0czNWExWi91dTdyanlsTXVldWg5Znd2ODJiczE1eVd6dkhSUHpoMjdlTUxGdWp2ZWlGUm4zQUZ0aWFSQ0gwYkZ0N0VGVlBWUzJjRTRkMUdZQjBaZUV5Qm12aGUzREU1TFlycEpBU2ZMV0VwYW9CbGRJaTV4ZFB3YWxsMTJTNW1lbzV1UnVpZ05reVl1U2JEQjh0QTEzL2V6NTNPRGM5RlBGUDZhVVljc0Z3RkFFb050YndaMDNyeHlvMmpHWVc4cFpWeHQxWDV0a1RTRmRrWWhCTjJLVTdXSWpGSWNyUUl5dlliMFQ1U0tDb1REWm9OclI2aUVyWW55YmNxV0ttdE5oenNHS3cxM1l0YjZqL2FUY3RKU2F1NGs5SFBVazUvZmxPT2RNSXltcStWeFpaUmQrTEZlUDZpK3Q1RVlZS2tmYURmKzdPdWs2TzlRZFhqVlo2NThUaFo0VzFic2paZlQzbzFrMG1BOE1WeUpyMmMxN1N2SEFMOG56M3lZbkxVZ3doemZzR09iYUEraEJHSDAwYTc1dG5GbUJKOU1wYTNjYXZlYjdXRkFLSkRnWHlwTzhJZjNVekh3RE83dUpzaU5IajZMRUI0QlNRMUh4RGVKUXFld0s1NGpBUTdjN1dxM3Y0M0grdTdQaURBR0Z6THNMK3NIeW0xODA1cTdLdkJIcHFVU2FxMEZ1U1k5TlFSTEhqUERqOVpaQWpVdTQvdUhlR3kyaGsrdnkyNVkzeVA5c1NiNzRPZzIrMUljSHoyTzNrMkQ3N0pTR0owbUV6V1RBZndJRjdjNUswdzkwQi8vZ01wYnV5SXplL2JzYWtUbUI5VVkwTUwvQXlBWktWQlRZMGNucmtPaTVBSWNkZlV5b0h6SHBsdTRaM2hlZW1qWTRsODNwak80S043T1RkeTZFbjI4M3dibU5aNm1Nd0NHaGc0eHBzTldDa3h0UGxhU3Z2RXVTSXpnVEs0S2kzQ3JuZSs5UlpFd3RUVHpWckVLaGlac3RkSTQ3K3FpNCtad3FQYjR4SWNSYUwyMVoxV0NHOE9NeUJ5amp0MGJLQjJUTVFzcDRtaXFhM09hU2NWVTgzV1BBVmRHbGU2MS9FVlI5d2RoUWJFK0JvWUhQSTE3SHVKQ2JTbEtPYmF4TFR4aWFvRkVLZ0I5TElXUnQvSE9iZkJPWEpwbnk1Y0tGdkpiaDA3alJmOHVuam05aC9zaWtKNHNrZ1VnTHU0enF3ajFTTjZxOHVZNEtKRUluNkZ6RVFnQzhDQ3BFYnVTUndldFVmRzBmR2prNmt1UGUwQzhxVHBLL1E3UmlkdndPY1F5eDF0V3JWaWpya3hNTzhQZnNVdEVsdUQ3VjdUUzUxNExQcDdzYmZaWWdycjY3Vjg5UnN2ZWN1UHdKbUVRZ0tLa2RFQXVSRFlqbUM1WGtmYnI3M0xTNTA5U2FGNWdPeWNtY01vb1hNcnZCQnR0eU1Zd0VVaE9QNUxZd2s0WXZ0QVd4RWp0NUVlYjFLU2JTeGY2WXRBMW1zWG9KVGhFVzBqNW5OMzRwTy95eEhoSHorUEpwNWx2T3FqbnNQaERBWDhwWVk5WUQzYWNOSVFDTHVNOUxVMEViQlB3WHc0UjlHMHF4TkV2MTZDclRHTHkvanp2NVdKVXhTVkZoSUhMaE1xb3AxbDNpZmx1cDkvRTF5dDNBRXJYRU1jRXArNWgvZ0d3a3ZVNmlocHhCc2R3cWNpek1KdSt1cExoQ0RlL2pUREpsaUNKa0dNTjJWbHZvYlV1WDRFM1dsSzJDZnA3N0E0bUJNYWZKTnM4TnRmaHNYckFqMUxGenZHZlJZMGtmSXhFRXNNU0YrNDA0U3NicUlZTUFsRjJBTDJaY25pMzd0b2RkQ1kvMFJxd3hLOHNTRWdwUGROY3pWSFIvbWFycytrekhyWXUzakxraUtWK091MklKc011RlZWZWliSWI0dFFmK3diTTBNRFIxV2JNc1g5a3JDM1VVOE90aGxQQlF3ZEZVM21xT1VBeXpnY0hUa0J0L2djTzNkTzh2UkkwczlnT29nVjl6SzNmdFJpMnRNUGdaNDJPS1FmaFo3c0NYN2s2bnVvaVNTRVFFa1lZSmVnL1V0eDQwbkoyelNSMldkejJ6RzBIQ1N0bmdJZmthSStaQU8vdDRaSldSL0gyUHlkallJVjd2WDlWZ1VoUEZ6bXNlQnhXY3JhelNnaUJQOHZ6VnJWc0R3N2VnMHNOSVBkNFlpK09mUDkyNnE5MzdMMFdEUStYQXVpZ3FrbmpwTS9XT2ZRd2pxQTJaNXdXM1RlWUNCVEl1K1U5YU1HTDdWMlRqQ0p3Z2VXQmlCeGEzZTI4MjZJd3hsQ0VVT0lNa3lVYk83VGovUDhUZmpsVlcxcTJSalJjV3k5bFhCVTVTcnJLK21QbGpVcU45ZjFNUnpLQjZRa2VRL3ZYQkFpdVhpbHpGb2l1TExyV2l0b1hLY2p0c213RVNmWDdjdGVBT3JOT0RuTXliS1pWWFIwbUgreS9uUHZZYm9tOGxWVUlIWldURkFBR1ljR1YwYWRFeVV6bGVMb3BodG1POTRYVW1GdEJwZTFzUmo1Y25BaDBQWndKUCtBRkV1T2U3SjNFZGkxU1dpcXBIdzVMN2hDd242Y2VTQUlLOU4rcWdMdTNOdXB6U0d4ZkE3eUhlWUo5R28wK0IvMnBNUG9zemc3MkRkM0t2VUJQVGdiMi9hMlF2SWd3eWlObzB1T0VVTjdPRGpOWlBSK1hVclBLZXpXZXFIY1lEUHJ2K3d4cGFqeDgrbDFWS1V5Uk1MQ1kzcVZXNy9LeXZEVERRamNTZ3NJdjdSVG0veHRxTnNmK0V0UldkenhxamVKZkhDQjJQWjdveldhcHpWeXhtM3pFbVRZUGhSTmtBWG4rdWV2L0VWaUdFdDB2VGRrYXhpODN1UGdCU2VaQ0h5a2g0VUN6N3V2VVhkVXBvbEVSUTRjVTVseWNLRFAydzBwU1poS1crNEJmRzdXZHUvM3laNkVrZDQ4dWYrN3owYm9ETmF4VmxGR2pJbE84cDhGOFM2cnhJOCtsVmdmZU1wVk1jd1lvZ2F0QXVnaDdQRmxUMXpxaHRZMXVpekM0dG9TbzAvck9lbXN5b09USlNBSFhKcVgyYU9ZcFBSNlFWcDdVQXpRWmV4OXc2TFh1aFJqRld4VnIySmUxUVZpMWZuL1RlUks3aHBscG8xNXhocXAyRXJwQ2FHLzRqQ0hEcU5XdW5xUDdLOHhSeXVZekJSei9OU1pvU2h3NWo5UysxRUI2RVdCSUU4RFRvSytxMEFudk1jZGJnT0c4UFpFWWNlOWVHYWMyWVU4RXlyV0ZpTzF0bmcrZ1lMNHFoZWNvNzNUQ1JCTFl6Yy9yKzBIeHN3R29lem44c2g2c29LWll6ZjAyV0xZeVdoQW9BRGtGL3JQTmgwV1JaUGhyTDJ6VEtNbTJveExIM3ZQTkVWQW5lOHZJWWRQaHU5Rkx5Vi9jQ3lKakxlSXNvMG5SV3hublRMTDBmRFRRVjVBMk9JVkFlWUtqUWYzOTdMWC9IdFc5bnhzTnVzcGhKYlkrY1E4eFZua2pMS1lkRFMzYkxnOHZUTXJEcVNJZnFKeEkrNkpSSjM5MklTektITmlvRHpYQWVDRFhVNFM1YzRkYVlreGtZNkY0VHNLbjJFMjVPNVZBanFTZ2VtMlNvVEdidWQ5bGUyL3RGY0VCb0NteXRjK2dDUjEvWk91eHpPejRtWlFHUjg5WEpPaGE5WXkrNHZXemRPaUU3Z2RNa0JnRExPa1ZHV013UExCbWdvNmJHaUZHRWo0U1hoS1Z5Q1B4OHdzRlNVVm9IUVI2bFVyaE5RaHM4RThYMm9JTUZWRDUwVVEvNG1zODY1emZoejEzQWRBV2RtZGh3OHpUaGl0RlRqcFlBbEZoRWZjREdjdzBVQmpxT1h4Kyt6a0xtdFBTSmVySno2TEZyckNkajByVVl5UWZGS0RkT3JaNEdUMlJ4OG1SUGhVbmlsMTlvclU0Vk1UNklSVVNkUEhLUmVyQy93eFZDTTVSdDVHZ1NPbUxTRmpHNWx2RXdhSXE5VVZLSm50bHNONTQ1K1V4N0ZXcjBoTTVxL2Fyc3NENnNaYzZzZTNzZ0paeHRQUmcxWnJ4dEUzc0RKeEtkSUZlcnVWWnVobGxTeWVLMkFOWFZueXBjK2xESUhlNG92Rlk3VDd0eGI2MWZzL1pUVnFCK3RVelhxK1NjUlhYL1IwekUyNWdQQTducjI2clRYVFUyOVRNRHNBU0h2SDZwZy8vUkhGTlAxZTRMOWlzS2FnSzF2ZjEwNklUQ0xPNjBHSjU3MUcwcTc0WWZUNDM3ZTJaMUpxTlFsRWlzc1hUSFhkU3QvWVhUQTRFanBTS1NVYXZZNlBVNkloWkR1bUZjRWFuMVJXMzFaSDZ6VnRNN051R2w2dnFqSjdTVVh3SHBaV1RlS1hZZDRBazZ1bkUxTDRkckZPOXpJNW5sZkRBVGRYOVRpOWd3ekdWSjAwdG41TTc3OVVTVUtURzhicFQ3bGYrcm05OTk0L2FlN3BXc3NUTmlsN2FzalFmZjIydGFkcXZYcGlPWkxpUzU2R2xycTQ2M1crcFQ0YzY5MTZ0R2EwT2NkL2loamxuak9Jblc2SkUxdVg0ZEdYY1l0bkNFRDROcjVzbzIzcUZUZmFFOG5yK0V2akpNSUNmMERTY09yaGtRWkxPZXhqNWRjSzN2MDErYzB3NHJhRDdpQmZRN2hLY21QUXhIUjE2c1RjSnIzSVdYMFpTV1FPbmlJUS9vcEt6Y3NkaDVhanJEZE8zRXBlMWhiMnFlY3lSYmdCRXNleE1XZzJYZVBoZ1dHdlBCZ2pMS2xGU3BoMGdqSFJLZjZtL0djeFRyRnQ0dmVPUnl6N0xFTkl3Z2lad1FRM2M3cldJKzJ6aEhINm4vc1QxcEp2TXZSZWtNdkFLTW1NRCtUMEt6VHUwa1hIdy80RGtNU2pQTjBIRGhuT3BHUTlkR0ZGTWhtSmJxMTEyeUJWRWQ3WTAwcldrK2RUaHc5SFJmcm1XSFYvOVV4VFBjM04yZ3BONHlseHhCa0czVkJKMXVLUFVpdUtaK1BOTi9xTWp5RXEvQzhqbm1BRUVZMFhuNzc0bmJaMFRzWkgxdjZtMk5uYkFvQ1ptcnY5UmRHelBXbWZndUl3RjErM1psanZXeWk2NVUxM25NbndIekdkbzdEK3VBWVRyUHN2cHhuK3pNSy9wUUNXVnFqSmJ4SFRNTVpkalRQemg1TmdzMSt0cFJjR1k5NWk4Ym5XeE9nYWtWVERBTTRqbEFJM095WlFYUE1tcWNaUVpZWnQ4ZjNBejRtcnJVMVMwTnM1UFZoc0ZWUWF4eFRlY2UrNXBOa0M2dFlKWWJIVk1rWWM0a1FmN1IwazJpc2ErTzJGKzB5L3B3c2pqejFwN1VKeDQ1NDlMMVV4b3ZWU3BnOXYxSGxEK1pUYWJSMS9yMnVQb29LUzRDWHBYTTJlVk5LU0g5VXJpdWZJdVZ1cUhSY1B2RHpNaUEvZmN3Wi9BUEsydXBNczdaWnpHU2cyQTJlQnZudlNhY3NsamE4VkhQa2hQa0VteFFJY0tQSnplNzhGTE13dEFxbDNQSGl0ZjI0M0lRcndOcTd0ZER0dTFONkpFTzJtZ01OZnRZYVdFcWc4N0xXaFNXaWRGTWo4SWQ3M1oxZDdVOU1PTTk3UDBqNEVmSFFPNHlZSVFqczJGRitOaGI1TjAvVlVZZTVKVVRYdlJXZTJwaU5WNE9uV3FYcVpSNFltQ1k5Smxpa3UyUG40RS9vVW5GNlp1SU03NHJzaFVKSXFKQzhWcXVKTHVEZEJSMWMvQVZ0Rk9kZkVhTUJKalNaQ2lMWU9nL29WYkVISE43eWRRQkF2b29FTUQyUU44endWMzV3TnFsQThtTzB3NXZaNktndER3SzMzL1dVVFlVZlNwVTFmRk5HaXdJYmZKeEtlWGV4VFh5RC9WL0c1Z21KS3lpb0p6Z2liSFZRK0hkeEZZQTdNUGZzYWs2SmE0VnRJZ3RJVUZFdUVPdzRTdnQ3Y3o5eDFIeDM4aFozbXNSZERCdkplWWx1OXFrUkxSMEl1bERUUzVzNm8zM29SQUtEai9CK1VxUExOeEM5WGg5SU9QbG5wSnpYSlJpekRrck9Rd3orOW4zaGlmUGJISWJmWnJ6S0VaYk9hRUpCdHpHS2VoUTM5ZDJiNGdaWHpTQmlocnM0ZTVWTXBmTUxpbiswaU1qbTdEb084b2xEUFY0aEpjY3pGZDJqTlByRUNjT0lEVk9RZjAwME92R20zNWYrUktJMlJPS1M5bTZ2WVpPejMwSUVvdjdTRGY1U2EvbGNZZnJIeTYzeWduYUh5SEtqMndwNmlhOWhScldDc0xuV3N4ckxpTmhKZytNaHI1aDdDTHg2R3VKWkM2UXloYWYrVzl2eWlGVGEzRlhvMTV5cjl4NC9LOGpja3FRL0k2NDdyUi9vYnFpVTlvRWdWWkJDc0NIR2tkRnlKVG9qTnRUek5neElTS3NjMVViMExLV2R6M3hldzJzWk1aRUJiNzhmZEJOK3NLNG1STTA1a25xOG5DUnE3Z2ZOcWR0dk1Gc1lEMW9GSm4rZDM2eUhQUkRUV3lVNHMvTTVncG1QMjlpdFliVmtrVTBReXQyK1EvSnBwRnM5UGJ1eEpQVWp4TnVia1oyeGhFVDlsZkc1dXAraWpFVGU2ZUpNVWtvTEhSQmNtc2RtKzRqK1FjbFVXeXFGQUp3TVpVWWNCdktkQ2IvaEYwRWxoMUxzbmRUcFZrd2VhV29vZTVrMEhUam1SVlFZV1VMWmRUZUlBbWxrKzNaQlNMVXdyekpIeEtLN2d0ZGVNdHJxdVJjOTA1YmZhUUlxMDNCMWNRdmRsaUVTRTU5bTYraDlyalZUVmdXZ2pYTmVqRDFNNnVGU0RVVWl2clFwamJIVVZXQkhkdlYxYzg2djVZdmMrcTlDbmVxN1NVY1BhLzkxYlNpUVN3RTVOQ0U0UUlWbjJ2aHZiU3pQOUQydncvcFkwV2hVYjc2a3M2WmhWOXVEaXlSUjVWekYxUDBvMldRN3BWMmRxbEtMTHFZNjgxM0h5T3NFdG1QRHRaQWRIODUxU0Y4QXo2V25HUkVHbTVSQXlNeTNqWkZISXF4R2h6NTdoRHZuQmxVY3hGekJQR0RXcXEyVEZ6M1JSMFBIczRiYTRxckVKdkhFSktyN0J2OUNLbFdrT3dWR2JsU1p2R1d3QldqMDZHOGhWVXFZRlZ1Mnc3N3pmb2I3aThqR2RhdVlYOE9iU3loamk0ckdoTmhMVjY0T3FsOC84cnlHZWhabXNhbTA4b3FZMVN3UXRYWmxIVXVoNTRWQW14ZFpOdWFCUjlFYzMvUGI4WWtXbEUyWjRScFBnajJxaTl5czl3bVBlUm1KamsyZXVJa2VLbUxBQUdZckpYZzNGUy9yQ3lCL1ZYQkJjSFpWUWpySWxPTUExeFNyTzZJMFJBdUd1YlJEbkRUY3FlR05PaGY4VktselRMSHJEYjRTYk9NQzdsM0w0WlMwM3k2Z3ZBb09MZnA0djR0MnhOV0I3YStrMGhKUitYNG4zT014cXRPbFpLVWZRdU8zQmZVRDJBblR0a2lYbllQdFJ1bnNOVFVjTGJZd0dVb2ZzM2tRaW5Xa2VwNERSVGt5Q2dZaUNBSUR4NFUyV2kyWVVyOWFGdG5XWWRTWHF6RHdaeUZCNW53SmdObVk0NFJ2NGdFOHFvTXNuVjlPSklNTzBseFNEalF4enNtRWlHZXRFQU9Uckt0SVE2eTRJRVhoQ25WY1hmYWt0eXdTNTZNdHRjMnpDVlFmOE9XVHRQWWRhMFFOeUNjMklNRGdicnRTM1hwWFdRcCtlRE5DSCtGd3dlemhKL1o3UnhHR0VQRnZOWkx2TjNEcGQ2MXd1NjlwSU5IZFJMU01mUHZGbUhNbU9TZTBaMHRadkNHQ2l5WDRvQk5mNUpkeGJjRURkY2hwNG1MY0FpSXI2ak1iSXNZTjhucWk4aGRFOGkyY1plWTNGMzNtTDdRMkpRbmcvclFwM2cvUHgxKzZpMjI4SUVDZzhxenorVGJSVS9uelJYTFZSYjRoWHcvd3ljdEJNVkRIWFhqdk0yZHlRZXpuSmpWaExTbzBCY1BFbXJ0bWFsTVoxeTNCZjZrWFNIaHVtZ29kZisrSzJGa29KR29sY2VnVVpTLzNHcmdWcmNvd3o0U3BScWM0TXh2alJPenRrUEhFKzBMUFRUbHFITFp3Tlh4YnpGUkU5cG02dWtWdEZaM054ay9qM0JJOElHSmcrSDBjWDBCblE4SVQ2WERZOVRJZW9NVkhVWWc1d1BVaTlZTWZVWXVtSDFNZGxHSUcvSUdOTUliSHUrbGQzQWswNGlDMDZEQndNMnVJcmxBWU9CYnVNUTBNMWtuN3ZRaGxxK2xjZitVVDZyTWtxOWliNTM5WEd1cGs0aUhxRG1KZlVGMFkvb1VzaGxRaU80MzFDaTJKSGkwaWpPdW9TK3piMmNuMWxCdTRudDBPeTRJRTAwNTkraGZ5YTB1VFdJb1I5TU5yT2ZScTVyNGNEUlc5K3l0ZW9zZWhDT3BtaXcxbWtOT2lTeHNISkgzWUNTOGRoV2UvVUUxb1JHSEFFQjlUZ05XcE1jSG9yK290Z0N1SkpSK2JVNzk2S3I5ZTNHWDEwZW5rRFk0eGxJaS9LT3F1LzYzNHVPR2FmZ2Nud1A0ak13U1FpN3JjTWxCMU54RXdVM3hIdmI3NVV6KzNtQTBTM1gyeTBtaStxSmI1cXVpaTk1dWhEMFE3YmpyZktiL3lRbXRtSkJxdjZVVkIyTjk0V3NjUmdJdjhHaFpoRjhTRjY3WHA2a2xWSWxnMW1Fb2N6bE54YmxDeWhWaCtqczl3QkVhb0ExRzlHb0VFYm9EMXRkaHlubnRQZ1RRYVlPbUEvcFRUMFlOaGFtQUtVMlBPRGF4UlFHQ2FrTWhIMUd4bzhxNWxhT0l0d2kzYmY3L2hZR3FYZzcveUsyN1grMGo5ekpDMVNpc0MvYjQ2OFExcEFmNGxDQVNMTGFtaGZaYVA0enBoMkthUFQ4Vjhzd3B3OWdFR0Z0ZWRjamV1YlVaeXVCdXA1MmJ4TnliWlpqb3dyb1IxN3pNZEMxYkhsejBPOWdGZXIrS3M0L2NyVGQ2aFhMMTNDdkhFSnNXaVVsbVNIWUZiSTRlRUQ3c1VRaWgzVlQ2bWxCOHZMVUQvQVFJQndhRVQydUphdW4vcTEvbzhyYlByVjVmb2I0eldIM2VubllSbzd3U0xNN25zNWZ4NWptNGViU3FBTEtaeW1yQTJ4ZWdrZWoycHRtbzFaQjZFbTEvZE1uVFNBeUE1N2VhNEpXY094N2E1QVloNGRHalVISmg1Sm9DZ0krODN4NDZBTUZwRWQ0UWtKNmorVWcyRDFyY1RTSU1rRi9RUnRId2JyZWUwUUdyRC9UOFpwRHpnZnY5bVk1WmNXc0pNVnBpZ1IzbVVRT1JKb3pNSDlnZjQzaSsrSFZCT3VZeUpIVzFlSEFFWXBzRDVlV3ZISG1SWUFtY3paS0NQMW9ra1VpZER4SlQ1UHl6YzRZVlFGam14R2FNUWEyMHRJQzg0TGl0WkZIU3VwUXdGM3UvaWdXbkg3dEQ5R25zUGNpU2E3SE14NFNjL2dtMHE5MGhoUVlyODNmOTJLTG0xakNUUEVVTzQ2MGRSZTEydldDdWV1aDJlVHVUc0V6RVJnRGJUUGJSYzIwRmwwL21XVU1OdUNXdFlwTDgzTXY5OC9Pd0tpNVk4Q2xrQTFhNmVocGlXQzN1cDdVUStuZDh6SXF0ckh1emxHUllEdkdDRDdEVmI5by96Z0hNMW52MmJzb0JkbURSOUhSSEdONzR0QkM5YWg3NWEwTFZQVEFYR1pZUjZDYWI2ZVpzYTd6TWI2UWtmaHhPbTFOT3UzTkVoM29qYzNmRzZaQzhMVk9VUDFnUWRjQWp1ZkhJOXBkWlBTMlpacnJmdVZyVy9ZalRhWFFKbjBiVzRqRmI1OGR3YXNRTVh2L0M2ZkZvWTlQMTNId3E3RElyYmFCc3huQlRFQ2FFNmVFRXI3bmxKNVFRUWhnOTN6ZmREZzQ0a0xrWjFRaTQyY1BiSWluYTJFdm9pdmNETHlZZ2FoWG5LRlA1aFdGaWE5NUJmSFhNNkV6aGdDckc5WCtBbTJucTFzUzBWMnp3Q09QS2tHdWpzbXppbkQwRWNRbzJGei9TTTlQak02ZS9FK1dEQWxHZ2RLRS95RmowckMyU3I0QVFJSjV6WlE1S29LTnh5S050L1liNnRlYVYrM3MxVE1qaFZQRk0wcXdLQ0dVY0FwaWF3ZGV3YTh6MEJxUjZnd3lwUHVwc2RJZDViZ21TMUEvTHBYRENYcGpSRnZIZzdKdHBFLzF4SStZRmY0VFdXd1VBOU50S2dqYU0zWmRkRFVOTDB6clhZT1loeEtXMXVNdnZvTGFmWVZwSWx1Rm1uVGNaWldXZkMvU25NMzNTQ01Cb0d0L0NyUGFhMnhxRXNqaDRnTkFJUTlHaFp2YXZxZkpRVm1vT3B6SDlvUVh0dmtMdDZOWjNsMTV3VHVDN3dwV3Yrdkl1bG9rdmo4N3RUZTdTWW53Zi9OMHVEbUN1Zzl5MTlVQ1hselVzanhBcDltRzMzamQ4RzlxMWx6bW1OKzd2TUUxUmMrNEpBVzJzbUIzL09FT2pYa2luNGVjanprSkFrNnVsT2ZIZEZnKzNqWHdVMEY4NXNQd2pibFJNWGI2MHRITUV4UDJzamFhczhwc0xQOTJjd0NaVE12MmVBWGxYUGE4S1BhaU54YzJQa1dBcmszYys1Y2xoMTVXMndod1B5eCtBVVM5aGxnUDdxeGJuazNUaVBVTG8xdGNoQlZvamFtVFowMnR0dnlVQmtNb3JSaVI5S3NxQmpYR3NrRllaMDdGbEo5cTdsUjVyVGZacXB6Zmt0YXdXKzFmMm1pYWZYODBMdWJidnpSVHRWOGF0QVFvdkk1QURBdmZ3bXluTkI0enVVSnIxOERLS1lDTC94Y1Q0aWd2dURZbkVuRVhZZDhKNzB4b3pRMi9yL3hOR21QaFpnUzRQOFJsaDd1NmIyaWNFenNGc2ZTaDZXc2k5c1loM0VoVVRyR2kxLzFRRTIvRDJOT3QxSldqY2VHZk10eFBaeTlBWjB4WTdxYzI0VUhWOWhrQUh1WUF1K2ZxTUdDNWc4TWprOHo2TytRWU5mYjJ0UVJIOHpZM1VNaWsxWlQybHJSMnhvV1plOHJ4TE9kUXZYRllIV0xGSDdWeW92QmRUaUltbFZOTFNHTHFzTTBlS2hGM2UzNyt4ZXBUd2dNUVpYRU5Ib3UwQlk2c3V4TUdpamR3NkJsVnJjbHZMc2ttMEJjY0lNMi9NQ3RJN0lVVHFuS2Z0cWNOQlhjTG1XbVJVRk41N21vUVYvd3h2cE5UWkovNVpkUUc1eWxFUENRQzExMzRQdXVOTndRNU8yRS9FSXI3cG1uVjRabHkvZUR6NzM3aGt2dUVxZFgyM3FnK21YemoxOTdkWGJ4b2ZlUzNxSE5IU2crZVNsVThIR2ZlNFB0akk2V0RBa0dZZFFJODR4UVBhS0NSTHcvdUduTGMwS3dxanVUdm9pVlpDZjkxWmNubGVyRitMcURDSGttWHM0SW5DNzlzaGd0Y0RmWTRBZngzSCthN2dNNXBadkltK1VJcENPTWM0Q2VlMmNteHpwQ0xIbWJSRHFqMkxTTWQ3NUg1aWNHUmxXcGo2TU9INU1tM3NHTkRqQVBPOFJYZjRoMmRrTXVxbDJYcXFWV1BNVERNbVIyNjV0dXJ3Vjl1WWtVN20zTjY2UFg0RGxkTUlCdXNiemZrdHZPam5xVVNQOStjVWhxdlR0TzRxQUJScFI4Y3VLWmZNTlZuMkQrOWtMMHZldnFieENFMTR1dGp0aEx2M1QrWVpIdHdmSUxOWVVLN2J0dnVSNmxUTHlGK24vaEpjSmJuYjZkTWdJSTdxcDFxZVdLZGN3djJJRUdIckM5U2o3MDJjRDFsRXZLMmU3aEJvMDVjYVkwRFR6aUFZNVBCSnVpOHowUUFKOE9YRk1LaGdJeXdIclBWTGNoK045YWU2b1pUOHhTa0twUWN6NE9VZHhqTXJJUW14bkZaeGxvTnFzc1FUNXZFRGhVTWY4bUpmZTg3c2orSy8wN0NoWHRLM2dDbmhCdWFpamdPYlJocG9mM0Qzc21lVG1YVmpsdGxiTmVCajBhR2N0Rkg5VUowRThGNTBIc0xvZHl5bVlLVWMxT2hIM01GY05qUmpaWWZzT0NGWmJiNDEwNVltZ2tJVDltTyt0bm5OQmY0Sjh0eUhDbUpKYzd6cWk0VlZsdnc5YW92Tjk3R2d1U3IwQzh0aXZiZ1BTZldqZ2Y1cEU5QXJmM2tEb0pDdCtSQnJ4amU5OGt2bVQxSGxkY3cxMCtkZHFJNTRRVjhURnhaYndSU1cyQlRjYll0S0EvNjZmcHhKMmNKejBYUXcrUWVGVnpmUlcxQXV0NXhxQURHcWd5MEZuZmZiOUtzcllpODJJZFg0Nm9USTBjVUdPb2NURlpaenROZG1DcHoycWs2QlVVSmpwb09UUHd4ZDNsdGxvVHVVSmtsaFZ6ckpzbGZWb3RkUFBaNUFHQnA2RGx1bE1QQ1MrUmNhdlNES1dTaVpDaGtLREtOMkVJMkFwV2hTSFpGUkV4a0VGeU1QeWhyV1Y2dGVxOUZFV01qSzNYVGVFaFhpbHlaN3BxMVYza0ZrRlJ5STNBYVlUN3RCeVdwc1NrWnVjM1hJczFVM0k3THRPbGluWVhqbGdIVzZGaVk0bWRmQmZDRWZoTXpPYmVrU29iNkFLTk1SVFh0YlpOQlZiKzN2aC9VejAzdFBwVWhCaXJqcFVxNGlKL2VjTmRHZ0dzTzZqUXF0QldsMFV4R0xNTjJ0NnRab1pjeUNZVTZEbVNIL1Bsa2V5VGJGeGJac1lrblN4WXJPcER1MWtoZU9XOHQ0OVhkY1AzQ25HbkZpb3BUODY2dkFVODJ0eEUzc2N3RU5oQ2pFeHlYTExXMUtaMFZMV1o5RHVMK0c5bDAwQnZ6TDl0UFA0Z252cmlnRnBjc0dEMC94eWtmQksrUXMrdE51b3dudzRBQU83SUlld29CVXh6L0tLbVMvV0Z4RzQ1YmQzZzEybkRsZXY4eEdGSVF5K1hpNFFRanIrVU04NE1rRkRLa3pXUmc2aTZUYXFmTk9waUowWitGUnU1N001dGE5eXBEcE03Y1dUVnA4eTVEeDUzSWg3dG9XRjJDbXVKckRKczd4K2RsUDNHbDk5MDlFU0RrNlJnaGxWUkdVeGl6RElyNHphdWI5cTVQdDZuV0t5VXVmdDFtZEJZNnEzVlZoUE96OXdGS1dmek4rMndKd1B1SlN0bWl2QTI2MzZYV013VFl4REJIYWprVUVVY1FrNDd4c2UydThZWm9vaDY0eS9iN3dPZGV2RFVqbVkwcXYxZVdJOVhnYVFPdHM3ZGRKa25VeG9yanRnakFUNHMwVTlKYnR0U0ZJTFFlLzFZdDNxVnZZQVZucExBYW5DQ1ZWYks4OFVuMitmdE1YVGUvVTJRT2pyRHNLWDRyT1l6RE9PQXJTb3hLVmJEVmxoOHgwd2F3Z0lXR1RsU1BDbExGN25oM24vOUZ1THpGdUxWay8zdFBsalB2bCtxeGpMOEp0UEpQUmgrakMrZ0twNUdSdWVOMzJhRklXRXBta2sxbll2aW0wbVQzQ1ExRDVtUHowNUZueUQ1a3Bzb0dYdjkrQU5FbDZZWGFSUGdiYW04TDh6VW9ySElaeVBnb2lUUFZhQmpqR2xQS2ZFditWQ2ZFeElXbGZ3aWNSZ2ZwM3VscUQwZlFNTkdqL2syRGxyZUFWZ3pFRTl4TmNjMVdzVCt3dzYxNytPa3k0MDFDMCtNUHd3TWduclVtY2JxcnBlYkY3VTRST2MyWkFtbkZqVWI2M0IvUnRuQ2Y5VFU4WXBqNVg5dTlsajcvWlc2SjkveWJVMkhmeSsxd3QyOXJOMEZja0VJREorKzJpb0dheHlGc0hEWTdWZTVEajlEMTh5Zmo4L1NXYS84c3gwbVJMMnlaRHZ4VDI2elo0cG0vTUFzcmJLdktDajBYYkRFRDRiNmcydzd1Zzl2QW9udjc5ZXhIdUFZRHlEMU5mcytDaXlpNWMwRVgzcnEreE1VckpGem5hc0NpelRCcDA4U0svMGtsd25aVDZsaDhKVmZmYWpRdDR0MUlTc0pLaG5jWjlrVzc0S2x1SVRERXNXbHRUdGNlTVVxV3NxNUM4amFERUFOZlRkWXBxWlZKdlZNdDBNNmVzNzRDdkQwWFBKQ0E1SG82WlVkeFJVVGF2RzNPc0lncFNidEZZN2NlVEtVNWVqNlgyQ1gyRlNXM1RCY2FRTkVsMFhnQ0RVMUtvWFdROEoyeTdKcGxLa2crWjhhTUx1b3p0K2NoZDBEMkZNY2IwdWtFY3NPcjhHRzRxaGJYV01CQ0FET1dNSHpzNHFpRzhUWE52Y3FJbmtocXZvc0pjZm9sb2FlSTdPR1RiOThoN3lRQWFCNlVwUE94YWpJTTRLZGtNZUF3S3dzTDNxNE16MDNwWGk1czRiSE9GOGlRVXhwZ2ErUFYzN1h0R05ja2VyN0RUMWZVODlGR3lZa3N1eGlhTG9pZUhTS01hRDhXVEFuUmFxWjVDQ3VuM0l0dnhQY2UrZExMWUp4Rkp0WHVoYU5tY2ducEY1VmxVRUhkUXRTRVBicFlJb3EwQzBETlF2aFRHRXpoV0gycEQ1VWlZR2NGSnFMYWRrK2FIbk54czlwZWlnWFkwSEVGUU9aODNuZ3g5Y2lzdUxwUFhyNVNhd0c5TE1OL1BrSFZRdDUwdHIvaWI3aVl3VEFyY3BBV1hPTmF2S2ZueUg2QWg1T2lRa0NKeVJyaFIvWXFTYW9rcDVITnVZb3FBeXE2aCtQeHhzYmxsZUx5ZVZTdE1WSEJxb1NPbkFSS0g2c2hSMERBbmIvTWpsRTVLTi9LbEI0eXR3bmtTMkVsOExRUEhKZythejBwTVJ6ZlY2WXdnUHdSejlGRzFTRWRTZHUwQTJxSUdUUm9keXJiVk8wNFBPM0YvZjBuTmxaV3QwMFQzSkJtVDZha0VUMWxZWVduUnZlZGlxdFl3RWFaajc0WXpISUtjM1RiUG1ETUQvdXRpR1BuUkxLOFVaNllDVmkwL216d0V5QmhNQjBOb3VjUjAxYWNnOENLa0pGNVFWTFpnVEp1ci84QmhIYTBWckZEc3NndDUzc0FJdVc4RHJhR0VySkcxN3BpRFc2YzBwRVBYd2VZWDVWcVUyY2xsQStRdGNUU1I2RVorek9SV2FUTjJoTXh6SjlMR1hnb3pKUldlNkxGazRrelA1Q3pmbkZBNkJ4ZkRlZ3Y1MzRoU0d0OG1WQ0Z5Q3kzOW5KQ3hGamtmTy9kd3BsL1R6SnpBdkhhVHFJUTFCNVFaREFNV09qMTFtRUNkS1FqcCtNdEtSU0p1amtmRnh0MXVqUXdzVTZBWTh4YmY4V3JtcFJTQk5UWW1RZERBNGQrbTZGRDYvNzBQcSt3eWNaNXg5Sm9McE0zaGRvcjBsa1QzQmJhZE5VblVGMGtwNUhFMFh4L2h1Q1l6SnBrU0trcW1FbHpZdWZyUlRLQ0szWUhDamZhZW94Uk5PcnhtUXdJb2hLUzJmc3ZXMjFYOGc5eWo1RHFlRHhrMjhocFQ4MzQ1S3VNcHNTa3V5aU1pSnhSaXJKMU1jNVJkUnpBS1dzZkxLOTNjaHRyekI5OHB2a09lS2luclNvM3BWblNoRDBoVTVmK1BNcDV2dTRTMEU5Z1VEbDEwbEhITVlkQjhjSnlvQS9qTUFwMG9oam1mVW93WkQ2MERmei9SODlaMzlaTFdEKy9hc0t0VHBnOWNhVHJTbjdsbUlyMDBMZ2VMNUl4MmllMGtzd1loSld4Z2tMSG5BT2IwSHNaQUxEQ1BIYnVIZzVXUXJFbG4vRFMyTmczeko0ekVZdVMySUpaMFAwNlI5VmlqeVQ5Qmgxbysxb0d3Q0hyQ0QzOWo0eUJZZlhteE9WTk5tS3laZmp5N3JiTnJKd0xTbW14d1dEN291NnhaZDV6Q1RlSXI5aXExUVBmVDR3OW5vMWJObVBuM0dNU0RFQk9aRUtaclorc1hodVk5ZFYwanRRMWVVcHhoY0p0ZnpBc29CSHVncWhPNkxuWGNoZG9FeW13Y0hVQnhJV0tzdlBOMDV2ZVdsM3Z0ZVJTOVd3Mlp5NGMzeThZUXVkVDhiR1I4VStsck8xdkVyektuYURUL2pNbWRuRis0a1prZTh6Sy8welorOHdSSmhNNXhjS250dVFaSW4xczdEOHU3ZjlyZlFzTUY1K2ZSc2RsYmR6WXNjL2liY3hsUGRvU1lkWGtyTy9SWk4rUUVNSUJWc01tZEFtbDRpdXp4Q3dkL2F6QnVzM2IyMFVwUi91UlMwUW5aLzQ1N2NsZUV4a2FWa1g5aTFKOWl4WFVraEFWRGJuNk9hOExHSkFvQzMya3R1OVZGdEhZbEV6L0xtTmhVTTNVbW5NVzZSS1c0ZFJhTHkzNXhJSU9jb1JmNWdQYjd2amJ6UUcyalVDQVJUcnp0ZVpQanNjbmp5ZGJITWdWMmJpc2FrNDNXcFBuTkhtYk84VEViTmdBUkxXZTVrSG5kbEtCZkwzWDVETS9WVnl2WkJyMUhxZGhVcjVCOXZMMHdyRHd5WExFWUwzR0tXd0NMWFJDa0NGZmFuNUl1TXg1NTY5QzFrTVEyb0ZqaGl1QTlRa2J2dVB5OXlkY0c1elo2UVVkVmcxR3liaFFaNHk3QWhpRGZLZGNnbWlNdWFaR01QUEZKcDUwS3JnanFIQVhLSGl5QVgzZUVDS004TkNIQ0tyKzdLa1liMHdMWDNUczc2Q2I4bWkwN2F3Nkc0Z293UEdIaUVCV2lvaFlxa1VnRWM4dkN4VDFhMmFaZHc2cXIrTGs0dnJ6OE9XOE1OcDJuZ21pQWVqVkdST0FIN1g3cWl3UFlJVmw2cXJnc0p0MnQ0MVJnS3A2V0YxWFp6eDZlcTdhUTQ1c3FsQzZ5TWhUZWtQREhMS1d1cUxiUzczMGZCQ1hnVGRsNmxPckUxN204VEhzaldxS3NuNzR0S2o3NVpWSHdWMUg1NUJWaCttWDZuRTgzV3d1VDg5S3djemsyYVNXcHNDNHdnNDlYVlVaR09BQ0RKN1FUelpXaUJYSDBlRnZ2aVIrUUxMRHZJU2NjS0t6MXA0dGtnamJ2YnNiVXc3MlV4Ymc0b2lwdXFhUHZXR25oQ1gwa21lR0ZtdjNycWtQaXptTno2WTVWK1psblp5ZFBQWWtPYlFQZkZEVll2WUM2SVRhNS9FWStBbzBscEV0STQ2ZEk0ZWdRRWNiTWtwZ0daeFRLSURLZ2p1d2lqL3RPNnNGbnZtUUFhRmZuNGhkZXZTcWpwOTN5c3d3VVdoekZxSUtoZ04zWktZUFZrZHVZWkJ0cmdOQlpvdjJvV2J5UFF3aHVjcWRPTDBPOG5WRlN3Z3ArYWFSdjlQL1d1cXoxQUtHQ09HSTgxMWhiWHFpbmJ0M1R5eVd2QlQzTGNmZUtvMnN3Tjh6UVViUFFTa09UYkJDb3FxWTZoZXVEVk9tQ1pBSDBMU1VSeXVSUjUwTDZmZTVCMTgwdS9mRm9MNzhIMnNYUk55UFo0cnE1L0RJK1BrTUdKNEhkM2tLdGVKRzd5NjFJZmZuZnN4UlZFSituc0ZCY3RuUHNqckdaRmdIZHkzU0RxMWcxbmNOWXQzcHBaLzJsNnl3WElTT0gzRVJrMU5LcnZTd2FWV096Tk1BQlB4SVZLR25yeVFIY1AyQXRKNkJIb25xWDB6eiswTmxPdTMreUFSajdrQzFURjd4TkpHMHlzNCtVMTFDK0ZweXJkVjg2cHJ4blEwQnMxU01Oc3lnMmhjcDVYZkl6RzNRRmxmalhHQzY2UDUydk5oMm9aRFhQNU5oVEw2QW1IUjIyR2dhbjNLYVl5RTE0L3NPU04vUVdjbjRuN0krWUl5TkJTVitoTHh0VTdBZmxLTVhGa3ErcW5BNVRuUHkyVE11eWZia3kycEdsZDNjUzJONDNKUVZRSExSMjNwTWRTZmo4NTQyNFdLcmlOWW1LU3g5Y3gwS1dvWkZzTGZ5elpLMGZmU0h4MDNlUkU4eUVzZVFGTGRGWWxFdmZ1dXR1clpZR2J2YlhEVWdqRmFXQm5aSEI3NHVKRERySFVpNEZFRkEzeWM3VEFOeVZub2Qvd2prNWdIcWExc00rQjVzNnRJem5sUzlxb3VYMmlxMUZNakpWdlp1Y1JnZjVvZ2ZOUlpZREQwS2IzNmJzd3VrTzYrVzUrYXIvdFFUSjAwdzNDdU1DTmwxUnQ2b0RqdkNaejJRakR3NVFvMHZBNnVRSlR0TnVKNkhVRm5ubjcvRVZqNm5na3lJQk9Eb0hEbXVuWnlDd1BCNFBrWkFUUDFqWXVRanRBcnJVcWc4dmxuOVh2TTlVM3RoSG82UE02UlpPSFVSMG5iSGNQQUtJaXArMmN6K0VOOUJXTzBqbGJuK2NsbkJBdDlZRXh3cXN4NmYzeWppVmoxU2VITE1XbUNKOXpVL2FEOVc5alZRTEZ3c2ZISXphQ0s0Vy9FSnd6Rll3REVjcHh1RjBpSEpsUUNubXgrTHdvY1BrWjdteHorelYySlJ5QnU4VDc3aU1nNGJDUWw5T0U2aTg5SktRMlMyNWxiNVNyT3FibkFTTWhDaHphc1JiRkN1cnBUbXlSWUN1TVpTSGZScnpHd1BkTnpYTDAvdE5VNmRPTXRqQm1zR3JIQ2w0L0xwN0VrV09zeDUyQ0hkRWgwRll4c3NDOTNQdGJZRVRZR3EzeWlZd0hPTi9DMEtpTkNHR1pqbENVb0lXSURLbzBLVlFWZEhZTmduMC9LYmdJcmgxaURGRUFwQmdZODNTRVZDZGtGK3JPcGYwSE5GTmtxa0NLb0Erb1plSWxaeUkvd0Q2dldIbXlUbW45Z3ZZK0V1UTNEUkJ6MU8vaWZGNVQ4SkpiVlE1bm5RNENFMDNaeUJ0QjRMcU5JRzlDT3gremN3Mm1IbTk1T1M4RGlJUFg0ODZ0UnUvaG5KRHVUemxaRGUycjdXZ0xNbTFQTHFRbzlSa21CdFFiaWY1QlpvY2JIS3VVVlRyK0ZTSTZpTndBTTVzNjdGbHNPQ3Vmd3BuMWxRa1Z1YThjRk9obnFPZktqYThNd1FHeTROTDBGMUNTWS8yTUFPMk1DSmF4YnpMc2h5TmtXY3Z2YlhWSVp6OCtabncxdCtKc0Q4YWlFWitmMS91Y3pNemt0VGo1OTY3cGdkczd6VUkxSTYvaXQwVVRzT0lnNnNGM3lINUNQSjRnZ0RpQzM0dDJxQUZZQWdRVExBMzhHUnpQOEV0SEcxSS9pOXc1MVc5TXU2NlNMbHV4M0t5M0tYMFJzQW5NVkdITEhpeDZGYnlRajBDVWdYcWpvYnVFUUh6UzJlYnN5OVNWUkorQVJxQUFSVnM3YmZXYjcvQnV3cEtJYm8wQ2V0SXJiYTlhV1h6dUhpeGRSQUlzM0xXSVd3SUtZSWcrcS9OMHdRMXpBaUxRZjJST1VYQnNBWE15ZHJpc3RTdlhHaUgxdWVTODB0dHFkcGlMYyswaFN0L0ZNalNpbStaM3VFZG9aL2VIbXplTGxzVk0vUzZqRncxMU5PSlptZzQvSHpPclRPVjE5NlBMK1h0YWNCNkhYb1c0T1NBaW83REZyMzVuSnNrWDBrQVB2WG1idTRTSVc0THBsR2NkdXhhTlJGMUx6ZHljcTVRaTR6a2RjTGp0UjhVTXZDK01xRGY0ZjloWUFhTXZ5ZExqRytwU2o2VEg1SGlIeDZpTkNYdUliWjVrTmRDSTN6OW1kYTNrNmJIRW80amJtR05aZHQzdVMyci9jRUc3NWlFRHQ5d2NxOHFHdmQxY3dnaWhtZk9DbEdQSW5FNWdtS3VkamtjV1h5ZFhxd0ROd3I1MVUxSkYyV01TVExESHplZ0Qwbm93TlR0V1dpTWZiaG1RVDFiL2lMVWcvZGc4ZTBJZnRMdEF6OTBEbzNFUFlYYkJsUFl4aWZjSE43dzhodUQwaHZ4eGtjNml4Tm1Kajg4RlpMdXY0SFNLMHprVTloNDlvbjd2aktudmJMdk1pa082Uk1xMjJkbjdadnN2SWprOFozZU01OU1BQ3hZdDk5RWRCL0p5eVdobVRVMitxRUN3SS9haU9Jc0pqbEdpNUdCMnVPNDN0MDloY3pLSWVqaFhUbit2UmJxUXI5NmxLeWZ1b1BQZm9Ub1UwSmZsek9sZnN1SW5VZ0t3cHNxdThVbTNRdUllZVd3OTlKNDgxN3dUTEcyVzIxcmh4MWlSRURTd1VnVVUyU1lGSy9KM05PaHp0SFc0bEFvREhCejJKU2hoMW51QjVrQ3hFUVpLYUhJSzZ6VHRhRFllRFFyRVczYVk0UjBkR2ZzRlppVGY5VDlPemtaR1kvSCs2NXp6S1c3ZzRadGVJVkFGT1Q4bnZyWTNuNVJTRHBZazZob3FJUWJoZEhwTVNzTXBxb3hVMVh5STd3OVgzSmZkTUtwdkdSU1JmNnphbkNuL0NUNXRxZy8xVVA0Z01FM1IrMG1VUC9nbGdqdXB2ZzdnRmRHbUtVdUZKK3Q0VkxXZ3BFWVZnNUlFUTNrNVhDRlRvSVRRYmJQaVVGL3p2bDZrK1Buby9XMktqK1Q2czJGRDhuY0I0THlXKzJGeGhuMnpmaUxIVjFTNmxaZFhaS0tPaWpncHdNQWh5Q0RPVU1jNGFZRm5oOHNjYTdKbjVKVkQwTXNlS3lRcEJwTWh5VkpzSWZrSWNUVXBCd21rakxMbm1zZlUrcy8xdFExZm1YNHlUeHpyeGZYUFZZNnJJelkzWWRhMDFGVzBqNk5GMmZneVhZQ29WUUxlUHZUMUJPVStiVmpBUldmNlZEYTdGaVVWZGs2ZDdFajJ1dTIyMlNVc3V3NE4xSnc4cU9VeWVKaVBmUmx3Q2hEeDJQOGViemhtUkZaREJwa3V3alRHMHN2eXpKdjFxbGtKWWxoajN2cEEyb1BaMW1NZVdHeVBuRnU2dWhkRTBLQjNqdEE1eHJjOUNrc3kzeUJmVFFuTVNLVmkxaEZUM1o3Y1dhWGtVNTc2elRNNUJXVmNJaGJxalBVMU54R0crSzVXNm9Ea0VSMHRsMU4yRFl1UmxqUjA1c1RVYVdjZGpKTUdjaFZwRUN5UE55VVR1dDJ6cGtlRHk5NENOVHFhczBOUXkyaDBvNzVPcHNyWmpGTXBnUlczZ09vKy9QdWg1M2Jacm1rVjlWQmpaK0NNZVlXK0p3NGdXQWJYaU9hOEVSRHBSRnZWMTRMU1JCUXg1bCtEVXJBTWE5Q1FKV3dnWC9RbGNHZ2d2aVBDRjFCa01ESG1lbGU1NklWWlZaYzdYcURRTDZoU0JUTE5WTG5lWmxjcmlhb2lDWDVBTjBhS21Xbkh4bXJtbjh5TU9yaHhVSUgvMmZmVzUxczlzbk4yaHRwT1FlY3BNSnAvYWhJMVNHdGlMUEZYMnhpcVBiWVhTdHNpZHpGZVUrUTZmaCtIaWo1YklLRGxYbklKa0lQTW1pQWVkL3N3cXZCL1cwQ0lsczdNV2F4aDMrTnVwcURNSVp2V3BobUs4cHlucHlKNHB4VS8xRUxtOGtLUVFGMXF6VWJ2MWV1K292aUV1VjBQM0R3RCs2YVJrTERtOXJqSEFqaDVWbndVM0t0TmN4MVVSd1B1b2ZsQ2M5RmtVaWFwdHFXUyt1MGsrZDN6MEdlcWpOYUZCdjArMUVxaDEyU2lkYzhKOFY1ek5qZThHTjFLZUFGWm5udmdXdFRUSndmVVpUMWNPVWs2eGEwRzAxZGlQRURFK2RBZ3NDcUFZOVRUMFNnc0U3Wk02ZSs5Z1JidENSY2ozRW5WODhNVVRBSnR0QmFpQk5mK1MxVGlDcEsxMnkwY0VibVB5bDZzSEh5OFJKUDlXUlBpc2YvaTlqcXRXd09HeGdwaGFUN1UrTFJiaWR6ZC9qOGRJcjE1MkFtZGNiKy85VER5Q0YvMGExTmdNOVRvbVBVam5ISk54ZStDYU1mbG5NNjJ6ZEUvWHhvaGZ0UWp5Y09WcG9Hd3RNYzY1ZUJYU1VkRVN2a2VoaVBZbDhXODdYRFlVeit4Si9jS3ViVEFrZXZoODZaRGNtOHJVbkNRTVQ5UHgvRnZYRE9LUUhRc0YzWlRaZ0FGVEtzVWJya2tsNXAwZXFRSXRoSWFUdzc4cXd1RlYvRXlZRGQ3UTRZQVhnR0N4MWxMSlVSL0IyY3UrcGN5OVZJQTRRaERWdHF1ZzZJb1A0dDk1V05PZHg0ZkhIZUJ2OU1WRGQrVWM1QkpEWTB0NU1QdEQ2U1N6RGcxeEkrdm1zQVdlZS9ucU44M1JGZDVVOVVJTHMwMitXL2ZuRkJnWkxPUGJWc0JqUXI4MVdtZEpvdjBoTE1jM1NxMlNZOHRNdzhrZ0xHcXU2bmRGVTM3SytIVzNETTVuNmtvRDk1dlp2QVJJYmVyajZFNUllL3hUQTk0c1JqSVFLQWRyeUdpNDZnV244YS91UUgyN2l1YzRCMEdOb1BEWXJvTjVjcUJJWG0wVVNFNms0R1BpU0hMeG50ZHFDVFY5Z01oQi83WnNTeTZ1UGJsQWNnS2VwK0l4bDIvY2RNUzdzeVVkOURHSEtSaFpRMkkyQVpWaVFoeFZSa1YxSUZKK3pvdExYL1NaVDMyOGhVa3J6RUxvNlpLOGlRTUFBWTBCVm9ES0o3NGFoSTFXRFVVUXUvWVF0d3BsTXdadmlwQTZEZlM2S3YwQS9CZGVMS0xDSTduRXd3RFVlRXNUSnpHSzlOa2xUZGpUd1FqR3lSdzBRQXN3SmhSbW0vYVVWOFJYTDltczROWU5seDd3ZmgrZks2Z09OY0FZdXBtQzZFRVhrd2FnbkZaSGJkeDBtclRUNzFyaXFHZHBhODMvK24vZ1JlU3puWTJVL1c3a2FXN2RXQTBtRm9pdVBBZzFDUVl1Tyt0WkR1YXE0RHRyQUgyclQ0ZG1YSHZYTnVvdTNMV1RiMW9rcXI0VG0wZWJCTGplQkx6cXNlY3F5RjZ1VmJJVzJSZEJkeGRrei9WTnUvTHFDM3NzS0FHU0RGVjB6dnVjVW5DbE80VmdXS1RHZk4wc2RaWmsyeDVyS2pVM2NYZ2NCMFp5UVBKVTFyWitxcDB2NWpUYTRmWDcySUNuamRhWDVPVFBxek9aYzVFdHBsN1c1N2lCVDR0Ry9FOTQ1aFJjS1pSMlBjd1Z3ZzQyK2o0R1pjcEVzT1VRRTkyeVJVTjBuTmg5NWRzdlI3UXdRWWpFY0F3TmRBTjljdFYwbUlwOG01b3E5a3J4aGJsYmtiaU5ZT0Q2M1dQb1ZpMEMzU3NncTE0VENRRVRTci9CTmJkcFdTZjhzSEcyOXcxcTdyb041aG1JVEEydXpKZVR0d0d0N1BDUXVtbVFlSEVjVmtjR0JQbGN1WlRxWEZsNFdKMlRWQ1FVVnEwWFFydWdUakk2MDhtN1Bhd2d1MXZLS1pEQkRtZnlnMDM2OFNvaGZCUEVnNnBBcHZnZDhXenF4Vy9tZ0xNVmRlNmIxbTRaYXBnSFI4TEVQeVV1MytYWU44dVdHam5XVThXa2N4WFIrYjdCTWxBalowUjF2dXo5d3VnWlNyRmtSdDNETUtqZ2JtcjJxMXB2YkRwQ0tHbW5wQ2ZkWThkb01Hd3hYN0dkU0lyWlNRMGt0eFlFaWE1Q1lxbnBsSzlmaXcwM1Jld0s3MUFqT1F5KzdDdkhNWWFGVjFlYlJyRTVReVlxVG5iZTgvS0RLUjJWVGI5aDY0RFJQQXBuM3hsWGRHVXlYQU1NdFVweW12cWUyS3lrTEpmd2NHcllXMVdudFdXMGVSQ2hOckhlR1B4UnJ1VmVsak4vMFVZUWNvbHFKd0p4emJuMWdMZW5MVWZMVVhpSVM1dElCalpqNGNqMlFDY09ZRkkwNlU1NkNlWGlLVDZuazZ2ZTZBR1Y1Yk1SSEJORURjZm83aG1ZMEphZ2tqMmxsTU1Wb3djU28zV3JzMmk4RTJGL3VmL1RQVnRiK3RnN3hEcHJEUFVWbWJkZE5vY2w1VU5aYlRZMFJ4dzRtbVlJSDg2QWJzUHhMdkFUNVVIS3FtVzBvbFBYckNhQmF6MHNYSEdXZzJmWVpTUmlqcFY5VDhLejl2OUtqVUtQSXdTSHZlaHpYb00xeU40am0ya2RudVV3Nyt2OC9VU2FkRko3UXdkK3JvNTQ0ejNNRWJ4OHVLaGEvL0p3NDNWbzdKWm9GNUVBSmNNYmFWczVvWlNaajVpbUdTTld6S1N1MmtIOVhyZzFOVENaMEx1VjMzTU12SEQrYWYyanlncVltMnhkUEJuZ3NQeUtod21DN1Rab1Q3ZXR0eDh5L1RvcjNZWHFZNFBQSnBMZ0Y2TXNEVUFjc01zbXhYZU94Y0FqcitEVTcveU9UQ2ZLekNMN0p6VnZuTmFycmh5MUpWWkt4NVFRUlhLWndIWTVlOXNVQmlRdTBnU1pBNmcyR29DaVV4Nm0vTkN1RUsyb204WDk1UnBxeUZmYWxPQm5wK2h2dTRPbGtxZXdrV2l0RGR4OXRTOWxLRDdvQkN4T0xpck5YVDRuT3RvZUFYN2RnYkE0SmtzdnRGM01pTE9SOVFNQXM4ZEdoQU4rcFJWOTZYR1hCUk8yUTZLb1VwTVJ2QVF1WndVbEVzVTBpT3BtVXdQTnErS0ZvMEVsc2t4NXYzalE0aXV0c2tMb2JUVjVFaGFCUkxUVkxFMHBERDdaUlB3T2JxUEFjaDNHMGErSGhlbWNhcW82Z0kvYm90UWU5S1BoaVpORXBIM2NTTHFkZ0hwLzlTWU4zWERVeWJEWXN0OS9SV01OL1BkMm1QN05CNUdTS2hRZzJtdFl5SHRETmcxMUpwYy9PZ2dHNWdRdFg2N3JTQlNtM2pKYnREUnpiaTQ0S0pQM1d2eFJVcElFVUJCbkRqZTRHbnR3UGRCOTFGSC9jbm9CSkZUVnBOSHFyU0o3WkFUZS9PY05ka0Q4T2pQTjhsNS9KakFqeWkwNWRVamVnNHVhZDU2blROM1JwYWRNT3NhaWprQStxalRHbE9Wa1N4RWtpblRyMnhNOE1ycGJRN2xLdzJKbmkwR3hzck50MXY4TkpBamUzYnZCOHFyWW1lQVc2VUpCUFZnN3RFNGdwTk1nTnFYTnBaR0FtTVpKQkNMTS9rVGNJZGN0Zk0xYnVDYzBZcFJUbjROYzNKSWdMcWgrdHlSNE9sSGp1RTZLSmVaOEkrWlJsekxmOFlvM2dldGUxakFOb0tFRU13Z2QyVDF2aldsdEZQOVBlUjNuMW9jM3ZmclNPbks0USsrODJoWWdlMFdMc2xtMGc0eFJUa1liUEFIUHp2R1VwVTd0LzhQOUR2UHk4ZDZwUUJ2d25qeU9oWGE2TVdkUFZpSS8yR2R4d2RodkVJUFoyMFI1UEhmSjE3MmNWUDJ2NDdaOThWVGVGcTNqZmtwc25jWndZbHI4dVlzeEpLdzRZME9UL0pMa1dQTTNFN0kramVBTlp4d2d4RzdoQm9iL2NMVzVHbTZlUEI4dTVJUjNwMEtHUjZKSE4rcDlVSjlNZmtSMnRFaTdodGU2OFk3UE9ieWZjQ2FjVEpENzZWZlh1TEsvWWhVMm5tSVF1SDVNem51YmhRbEhWQm1RZkFTZW1XM2R6b1FkbHdjZURmUnMrSjFkOGJ2ZFlpdUVObEtFYmZpZElHeDBZZjUzUmx3NVRxRVNydzY4b1gyNmxwTzNxQWpheE5sdSt6OEN3QS9mdzFXZ21QZEFsMTdCcndWNzJtbHpieGJxaG4wYWE3MmRMSTMyZXBrcFRHZnRmY0IvT1ZSNE5IMnpHSklud0ZVSnVtQkFsdElxSkV5TEYxL3g3UmQvVGhSOTRCL3U2RWZ5Ym14WXdyZjl1S0ZBOEkvRzlsaUtQeTdZU3Brd3ZjM3NOSjh6YjRZcXdtNUMxSUhIMmhPT2RKRDMrTjdDWUs5MUF1c2lJSXJhcGVPK1JST2NDWVVSbi9iWkZRVEloRDFBRnkzM0FrRnpSejY1aUF1UXdVbmw3WWt1UGlmVkZ3bm9zU0d6NXRLS1B2emFVT24rb3Baek1EUExFZElhNkxuRklOQWRzc0xxKzJvbXJpUHJzejlBUjVueVFoVStORTNzWVUwZW9tUEFpOUs0VnNLUzBvMVB2Ukw2RHl1RlZKOGp5YjNGdjhFUStXbERLZk5vTHMrUUxlelR0ejI5OVljemYxejFiWmdHd1UwbzlyK0tjdGlPLzZZRDFPQXk2b09zS0RaU2tGVHJtU1pWbjQyN2hhQ1VIWUZpZ2FIUEIvUW9aRzBvTU42UW9Za05QTXhNbUhXMU53bEhUUkRNaDRsOC9BS0ErWE5ZVTkvS0tpUmFtQy95V0syNE1YYWZlTmF4OWNVT1M2YXkxNWc2Z0xQVTdNYlVvZ3dyNUxtdU1hcCs4c0c2cmYzV1lFZ1ovR1RLTGZqTER2Q1VHa2d5eDFMbGovUHBwWVprdVc4QkY3R2ZzcWxvZW5LaUZjWjFKY3FnMGdOU2pRQnowUW9UQ2J2YlJyNU9aNVpyVjJxWmVwSExOT2d5d0pScmtCNUJXcWlqN3RBNVJ5QWZtQ05wNUlVelVZbjY1S2dIcUFXbktva2M4RkdvWnh3OFhtOTJzKzBHb2pLRERTVFNaYk1uUHd2OUMyamxMZ0hxdUEyWnR6Z0NNOG1nTTNVY1BHalZFNndaSG5jSTFhcGx1VzFqdWJubEo0dWRiSDhWSXRzUENxWHQ2MURtTVNiR3VLZkxjYTBKUXV6V014V0dHdzNMWllGUXBHZ3F5Q3A0OWxuTFZHcG5rQmJoTGNGbzYrd0Y1ZlVKU1RieWZmTVJCOGxRemlKRGxLUWhuYS93ZmJKU1BENzZMOGFqS1d6NEJhWndiQUV1ZVhmbUFNV2Y0M3E2aGdtZUZaY1dQUk1qckwzbUs0QmlZZTQ3R3k5M21MeWZFZlM5S3ZjSnZTbFV4Ny9MQVY0Mk4rbUI5cW16ZGJwVWRVUWtvZlhwTzMyTjYvM3oyZFQ4bXFsWlZhOVlrMUFhNHpMbElZeklkczU4TFduNy9Ca1RlNG16YXB1TjJ3MWY4SkpvTnhEd0cyVVJxZlVma1ROZklBdHFPRlJUUzZ5UUJPclJMSzVSV3BBRzVkU2R6cHdxVXdjelkzRDhPZ3BTNndDOFFDNVRNVHZzeG9ycGpuZWp2UzIza2dBekxlMDJnN0p5akh6YUIrSjRxZmNVdHB5TWVRY2xadXJocXpobHg1cTNtNXgzMkJDdWNFUlJ4cHNHSEI3OXZnTENUd282aHV1MmcxVW8zWG9kUk5Fd1p0RjhmazNOeGlMWDVkZTVBUkZIMExmckFsRGxJd3AzUmNEMGxkM1hoYU9Id0sxYnp5SWdUZFJVSUxDV3RMbEh6Qnk0K09tRW9wbTVLM0dNeVJFV0RQVmxzNkV6OXllcVhNSS9NVXYxcmJwTWVGalAvSjU3emlJbi9KemlxaEZsM0NNeWJJY2ZTRFdCNG15ellVbDFycGswcjI0b2xEcXpYbUJPZ3BQMUtHcTd3eTJiYlBoZ3Vvd0hnWm0xaUdTbjF6b05NK0h1c04wbmZtaUtla1hHTGMyNmk2bU9tc0Uxa0ttTHNMZjhORnRiRnlIMUx0TythMUVZcE9NaXlDNWZoKzNOd3VYWUh3R3VZZnVJVkFlSEZ5N3hyQUFrRWF4RERXbHU3c3RSclNkMnp2a0o1V0s1NzRNdE1qU1czS2RNd1RSVFFGaEs2dTJpaldpcGx3Si9jU3FOdWZqQ0NuWG1PNDZ3U2t5MmtibnNRU0RGT3d4ZzA3NmR6WWxNTDZUbkN2bGNHcTV6SjMwT0g1VldGYVI1RHFuUUlKck9WbzBvMUh2dHpwdHoxbHlXZlVNbW1FS2pRdnMrajBaa09scDFWL0ZsVEl5NHNucmlhWUFpcis0NFIzSnkwaExoN0tabC80NzRyZVMwNFhuc001VEl6VDEzdUdFWVB1NHN3eVRUNXNRTFpHWC90eitRTkRiRWVXTzNtbTZhSU5vQkw5c3UyWWh3VG8rdFBCTndjMFNqZjJ1MzI0N1FHSzBnL1VhakVKZkZzQjlSTWs1QjhMK1ptOWZKVjJCdjhDbitBWEF2bXZrNXg1R085aVlUcVpqbHZhY1ZUZEdMVFdPMmZ5UW9XK3BST2dybzFzMFB0TGFwazVaS0xub1g2ZjdGMVl2SEI4SUpvNjhUMnRBVXdpaHhiT3crMHh1QlpEUVlkaHdiNzhDQnhEQi9vYnVWME1hY0JEenVFbUVXMVdqMk9vK2J0VkE2cjVKczEzZU03WUVCNHVGZmRiZHMxVk9sWDVkZ0dYcUtCV2dNRlVNdzZCTlNGS2dQY3EvVVdmQksxT3NXcHIzOThubDVwZU9yK0YwZGNZV0w3RXovTUVtckpkS2tsS1VSUVFiakc2bHF2L0l0ajNwU1JoWVpkT05xMmJDSVI0Z0lxU2k2VSsybHEvaHpZazZFMTZGTzI0TmZMY1Y0SUhGcjlscXhoTDRzNlA0eVFCc0JlOCtjRTdUOVRsOTJia0JzN3VNdUZ1dGVtelBBZzR1YnBGVlRCYmlzMEZFM3VRMis5bUJ3M0o4RG5ZYzNtL3FWV2llcmpBM28zcHJ1dFhZTENhQTFSYnJJUjFkMGFtYlVGWGV2ZCtPWUZNV0FQblFPMTB2UGVtMVZHKzFDYytmWWRMWkpmNUY0MnU4U1BOa3NTNnZuMUhyMmhVeFluMThSSFNBUERLcFFZOVk3NUhRT2VxcjVFd0hDQ09JODVneFVlclAwM0hzbndRV0ZUWEt1OUFsdHJNYzNaanJjOFMvaEtrSXVIT2ZDdnBNdTdhQkdpWUpOQkNzaEVONXVxS1FpcGE4WWFzblZML1FrM2NXSGtuN2JYckQ3THQrNFhUa0RMSktzZkxFZzJlbk9JQUJRbGZkMlpMbEVmektvZTdZOHJ2M09Na2duSThlSEJ1SDAvT1B5SEU4ajVBTTJCcUJDZXRPNkdaZ1k4aGg5QmVZWUtZeldoMnh5bkVvMkptTWNlS2hBeTkvTjJoQm5GUDczempKL1RXS2VKMlpBUzdIVTRBY0tzNWtWTDNNODFKMnNSTEVrenRUM3RkK2ZBalhWc0prQWFocGJFb1F6Zks0QTNQWE5xdzRxUUJwQ25ZWWNzVmt0SlpnVXFndmRrUzRVRldwR2dHaGJmUk5QQThJSkNGRVJDMGdvWk5nbHZ0M1JIN1pwSzVrVmgvU3FvQmRoZjlQMjc3cHovRnVxa0lCUDEwNU9aYWxiTHM1cnFyR05zMjRZLy9pYnM4RXRpZ2k2ZXl4amdsZDl6LzBCZTN0Z2RYejQ5TEJKQ1JQNi9semdaSFlrRm9jOFo0a094MnNhUVBjUmRVZjRTZVgzKzBsbTVSVHZSQ2EreVVWZnJpNUZuOGZSR3BualFkNGZGaGlKUGorOTRONVRyc3hEa3liSDJFZ2M2SFMxOGVoc1ZPYW9zNkM1MDJKcEc2YnJmem9lajQvV3k4YXROeTFwRmJSN0lHckRqc3Z4L1JzWWhlUS9NQWNOcEFBeG1qbGppUjFOZmlZWUc4STYvSXJDNXVjT2JISTgvdTdWVjVpMG5Pb2pQRmtNZmhhSjJwVWFOUlQyQ1Y4dHQxelh0anA0a1hmZUFoYTlvYTRnbU1QUEs4T3RsMllQd2tNc1hQaDQvcW9VSFp4dWZjcmQwUHR0dTEwU3NSVGpOMVQ4M1FNS0VoMXNoOGJybWFzY1lkcTFRbTBSaVVSK29PVkxxb3F0RkxnbmNNQks1djVGaktpWkoxMmhlT1BPcm9QWTg2MGk3UG9lTXRMRlljWmk4OTBYU3A0c0J3OWdHRUVINFRpWXJFMEdHL09JZm4wdXN0cUdYdFhtWXFZZzJ5UDg0eElJKzNRdVJKNUhXQ3V5UUl6blR6T3FFTXFPTmJSYjFNQWdPY3dIOWtwVjdSelo1UGxCZURnM1F5RitUTjIrM2F1bUo1MUZsOU1zQkhxaDNaUWlJVlJyYnlXMDlUaDcvRFJDSzlua2RaZzIwVnJleVZQZDRicDVQZWpSQnhVdEpNZzE3WXNKK3RsMnhpWXczL1dWNGNhbkxESnZMakF3bUVOWE9RTktwczNUUzZlQVhVaGtBNTdEanhtWG9CRFBsdER3VE56TkhnV0FET0NXeGpZaDMwNC9wWDFOMThJLzdSVVhtN2l1bHR1RFZCam81UHBsUmlOOGNOTFFkL0RkeDFyejZWOVRtYkZIRmhJR3hpRC9FNFNaSTlOaW9Ka2VGSmFaK3VZTkM3Uk10UWgxN290QlhzUWJsQThwYW01T1BzNWhmcUl5UFhEcUNTSGdycHhwRnlPQUNxRHVmTlR5cFhYUVFlVFhzTTQ0cGJ0Q21WTklTVk15L1o4S2F3RkZ6d0d0dDdUZDhNMTZsbkVOei9SNEkwTXd4dVdzZk1hSm41RVd4aTNZTXhYYTY2VEJPMENlNzVVWEcwbjBoSTdxQUhJUXV6S1ZnTnp3WjVMQ21Yb2pQVkNPaDVBb3VBQkwwR0l0Q2lmVnI0dVRRa0JqS2JqeG03YWZLdjhOWTZua1dpZ2hKekRHQmpobU9xSjJHNkw3UkpKa3FuSHRGaVZ3Ni8wNXB6aFE4SVQ4aEdJMVN1UDZtdWVlVVNwandJTXd3QWpzRFhSWlhhRjBDRWlqS0tRYzgvSHFpa1V3SysyQlpIb1djUGd6UnorN2M4UjVxSFR4UW1ZRlN0b3Q0U3NDYktBTjZvMDN0UU5teXJCNG8xSjZQdjRsN0htblNwLzUxaWNPUHZlbVVyRC8wdDRsbFBFemNRdWZxeDlWWkpHM25pcDRoV3JZdmE5SFpURVhEeDlMUE9QZVhzVy94MnY2aFJLdlF6SHpZZkpvMTU5TUZvN3VLZVdKdWZsZm5OclNqYUxlZlllZm1QSkk1c3VvMFh0S0U2VlhIQVczSjRpVVAzTTBJZ2RJcm4wNGhaUnhYMGswZjVHTE51T3JJdDhaU3JKUFlyWGs3RlluT3A2UXp1U1Z3WWZ4OHZVSVV2cHRoaWZXcTFuY0FhNkpCZVlaQ2dqMFhWd3VXU3lJUktkTVR4WVcrOUk3bmhheTRaTjJiSExpR3dHYWZjeC9yazNaTE9uL09QM05tak1Wbld5RlZUa1BXNUJTVk1Ub2RYTWxCRUkrSDcwNnAxLzVvM2RQODJYRGFOa3MvSElQV3pCVHZFUURka3FGTEovUkZpNEpiWmF2c2lLdnpaVVdVYUVyVHJhaHFhTm1NRVRwNmxRaUVMQmVhbzFzN2ZKWUhSNmNlMWNIQVYyNFF3OXY3L09qOTBQSWE1amJqajRhVHB2eWgrK2RYeUJ1aUEwaU1WVjU4RUI4TFhhMXpiKzZzVUtSUUYyYnV2ektZeUNnWHE3cE9TeUtyN0dXZWNqbWhsdjZyZUh3SXhuTzcvc0pGa3FCMU14UHh4bDQ4bkFYbEtsbXNET0Z5d0R0VElxdnlMa1FnREZhS0kxektrSkVnMTlvOEdoRStqZVJFc1BsM1RkbEhNTTI4NC9tYVlsaS91NE1xK0YwUE5KUXdQMTZBQXpBRU5vdUdOSEg4amt1cTZ6NjJkSTNQWVlNYzJrSExnYTJ2SkFnK1l3bWVMWU5WYy96UThZdlVGZUNZK0JaYWs1VVUwNnpiTXpNQ25TNE9CaE1CWFFINWUxeFJFbDVhbHB5c2lxM1A3Zlg2N0Q2ZmFDd21PVVRMM2lqYkVOY3pFbzFod1NvL1dXTjFMZVV2aXZsaGx5c3EwSVU2SSt6OGI1bUNXWmpKeVN0Tkx5NE43OFZBSGVyWjFJRmJmajErMW00akQ1dTFGYUN1a3BvWXBJa3VQWmExVjQrdFVFVTVQRjlPU1hLUVZUT3piZHQ0R3BrU2txS3dRTGhQZjV5RlVuY2V3RVRoa2s1NUROdUJXVHoxcW4yK2lZdmdibzB3RTZxYzRCT00xby9ra3Yyc0VUZWtCRlYwVWlpV1dGYzkwcGVhVE1vaWoxOEQyZ25wcThDdnlvSStKYk1RbnJicEhyWjdCQlVhVFNhekZub2g4Y3dsWHpOcU5EcDJvQ2ZpYmNMSlpKZllsWFNIcDdscXV1cDh6WHpialJaNDJQclBwMm9yM0JqL1JnLzVKUW9IRXJPdVE1VGtGYkxqaHFBeGF0N25aNXhUcUdINzFNSDNlUm9OcTYxOWpMSEhEZ2kvOHRXRi91NGVLcXV0a0dCbGRFeTN5ekNUbmE5YTlrb1ZvL3NaTHNvYmlYcmxTcjNTNjNCWGRVZ0RyU0pPSjZvUTVoT2RCbmRSZFZGck1WRzBmUkhTM0xSdm16MWJVVk1wQ0ZJMFg5eDdBaXRibnFiT24zbDZWcyt2b2plVmdZZGU0cGxoZEJMOWZyeDBpeW9vdFUvcHNnZ0JMeGEwS1ZTc0lIS1MvTE9EM3J6MFN3L2FxSjhxVStCdmlwcUF5VFJXVWttcWNtTFdpZEY4WVYveVBEYWVoWUwvT1JtNllXa1Q4OThWTTI5N283aDdjWG8vcjlxTEVQRUt1Zy9GMXpka2VVNWlDaVk5RmJJSmtMUEhNVCtMbVp0eHh0MCtMTE5SdStIdkt4TjVNVXUxdkVpZTJTbVJkdlEwYjMvUlVSNGdqWjRHdWVvUlJucUZ6VVBvRDBJSDhyaVMvTWs3cVdtSDlFNGE3VnAxUVdPekY5WFA0bGNuYmV6TkxpNU5aeUQ1MEVETm8vd0RqRHRFL2IvZFY5WG9wWTZleUpaYVB1R0xuUy9KT3dXWDh1N2hiWW9Kb1FJRVZnNUZoZ2o1QVdBK0NGN1ZJMmFCLzNubEVQVXBzRGdLVUt4dkVWOEFpSjFoazF3S2crdWRpSXlueVRXYUV3eWp5ZWIyczI2bUtINGZxeVpiT0ZWRVNmU1ppemVlREdBSHFaUk9kRlBDSFhLVlVOWmtvMTROQUd2N3VpU1Vsd0s1SURURkxYSTN4N3NUSkJuMnRDNWoxYUloNzhtR3ArUFNzcFpBMmlhalZuRUhvaWkrU2JJMVdIYTliTzlIeU9TcjB3QjZUazN6VFZaM0RkK3hqdU1pVVFaR3ZLQlpMQWVFeWtpd3NUTm1oUUI5cmIzcHdkOXh1ajR3bmh6VE94QW9wUUhrc3FsRGtkWUtFYmluVnFMZ0JRekRNMU1SUkJWdk80Q3pPeVAxOXVHT0hNUGdpWXYvQStjUlNpcHZzeG84WThVS3lIVG44WnFSb1JVVWw5clZvMTVoVWVBeXFpd2N0aXp6ZEpzYkdoNUpuZHgzMlpJbURWQjNUR0lsYTkyS0hLK01WdjhJNElHS3BvNWtLRWhkMDNrUkNqRU05czE5VGZ5Ui9NZGxBYnZiSkI5MGJEK2g5ZXAxSzA3Ry9yL0tybzB5dytBWEpjMmlSWm5uL29Cd3BvQkdxNDFrODBOMGpJVGZMN1JpQnh3MUU5aHN5bkpZa290MTdjeWtsclM3Z3pXQ3pub2pLajM5TGZvaXppQnRHZ0xzSkk3cEZpS1JHajBQTFBFWDRzWkJKSUFMTHlEdVVHMFlkMi9UUUZpYUNyL0xScVlEelFLYTgvd2wyT0FOWjViMGI4dHIyZnVkRkIwUTEzR3ZHM2t6MkU1c3JPN284OUhuRXJKazcxcDRlSERxYTlFbmcvZHNaSUhwVTRYcnNzOVFXaU81R0JPK1lYc0NYemJWb3hUTVAwSGRJZGVVem9tQnRaSXc4OEtyL0F5Z3VJZnFPWUJ4bmNGcHFFbkpVN0JtNmVpQUp6MnJvc1hvc2lIdGlvc0NZSGltMXRiTzgvT2ZEV2FMeUF2MFhtdGg5cFNRN2I5NlJqRXgwTjlOMGw4L1ZwT01LZzVSd2FFMEpOUTkvdDVOL3lRVVlGZC8xSmlQcG5hMy94RmpPUFdheStPZjRlQ2lMVkY5ZUttYS9uTXdrejdmNG90S1FuV3o0ZFFwY3hRbWJ5cGh4aGUvVXpEL1QzWnY3SGg1YmRpMXZqYmVab1B2VDh0L284b0l2eTBqLzJUdm5HNDd1T0Ztbm9ITEpzK3FOYlJIY3M5My9uLzlCcDAwWC9BVU1oSGZraUx4dktLajBsMEhBaXVCbWozRmxxcVJVSVQ1YzdwL3ZDTGJwaUN6YmUzemFicXo5WCtYclhkWEpCZnZpRFBOWkZ5ZkJNNEdtVWZTT2JIYkYyb2EwaDY3VGRybTZudGtjaVZOTmJKck5uTVZONXo5cmU2NTdyQTdzUFFEbExZTHpkQ2FOSkVWM3VhK0l0R2IxVlF0SkdleVZXaWh1M3hacFZ4QWpURDRLbmtLcDlaU0M5MlNjdVFuQ3dYTTl5VUNkT2R5U3hkR2ZmY2VtMkM0TnduV3U1Q3EyNTJiY0tNOUNUSktaVVhGalVGSk5qWFducEorYkhlcDE3aUJlQkFQSWxaM3Roa0VUMmxia2RoMnFEZDdSYmduOTl2d01CZGozSFdJTVNmTkhiN2hEUThGQVREVWhTak1PZkxBV2lkSXVyQ1cyb2ZJTGlwNTFFcDFRck5YN0h3VUtLbVlYMjZmaHVxWGNnTWNkd2RMaUdXY25YWlE4azRhSlpzQlpPOEhWVHFYTGRIdGZLeGRKVmdIZDVRTmNha05hKzVIVDdNdDhNTFZjZE9xYVhUY3R2dlZVaGNvUVJ4VHVSNFQxU1JadWllSnoyajc0Y29UUDZWQUpINGcwNlk3Q1FHd0ZVK3lHWUd3elA5bVg3Nzd0V2dmcmJ6NEptK0FTMjN3T05pamZCRzV3dUxTdnhvQ2lNTlZuR1ZIWlNTcjdBVHZyYnlVNGRnVGJUaDRsWFQwOTdWM3BFVVF2UkJzaGYzK29TSENXVUlFUHNGV0JBSXNuUXRGT0pZVnhoYkxzZCt4SVFrMm1KckFiS1JvZmpoRDJhcnBOWmRPaERnMFZrdDkwbmtRTCt3VlllWHducUVOY21NM3p5TkFjR0RMaG1GaGwxWTU4NVdxWFRqRHN6WVFpUHQ0TzNQUWJXaTI2Q2l2bW5PVmNmNGY0L1FzRzZsd2UvY1JVVDZXa3hwVEs0S28wQzhlR1M0Q2l0SEZNRGpSc05rK0pTMHJVOEE2NmtHTFRWK2xZR3JrNU1nRGp5WTcxUW1jczZ1SGJkUU5ua0Q5dElJanpaUjlTclUzNVMyQjBhbC9mZzZxNnF6TmdqUHdWSDdmdVl1eW5iUjdEQlpkQXFMREJLYjcrUHNWQVMyb3RQU3E2UlJhVE9YdlJLWUgyekRDVDcrSS9uRklaRThQUUVQelFJbGp3cUU0ZnJhbWoxUENFWjR3TjZNb0x3ZEFkTHViRWp1aUpialVwLzloMmNvRStJNGJRZnZtYm96TUY2TUgySzVEcHAwaGxvUWo3c2NKVjNXZVIyK0swT1ZhZEhNL2EydjcyYnY0SGdSUGhrZFR1QklnNHhpNkJJc2R2UjBML2FPV0xxNk9XbWJjbnM2WXR4ZUdxbkNGa0hUakdPUlplSUhBUlVzZkZPVTdqSlUxenJuN3JXaFVHa2ZITlcyN3Z1UEduaU12VFF0S2NHdVVXMENhTDBITG15QlpjcTdEV2J1bVprWFhGT3hCaGlUZmo2UzZqNkpGY2tXaTNpMjJQNlFOT09UaVV6MjFzbmlMaXhlOStGbWZtdGU3d0t2RXowNDQvbXNzSERqc1cwVkF5UEZzNkh2ZU5XK1h1TGNvVU1tWmlqLzkvMko2TEFZMFdPZm1iUExCallSTnZaTU9oYmYrZ2MvdmlJV2ZwOW4xa3M1aFN5dk1FSzlkcmFhRWtYRWh5clZFTmRmemQvclgwL0syejBIMTlwaXBuVkl0SlpDQ0h1ZER3ZnZ1dXNaa0JqL21PeHBJNVBBNFNNRU5WOTMxQ2RaUyttL0ZBSXgzN1ZZOE82YWxwQnRFSS9Ob2RNZmxiN045Yy9DQnJrT0ZYOWYyTEN6dXJRTU5LSlM0VFNJcGQyc1ZsRXZJTjFHTnZTR3pmVzllVi96aUtRcjVQaFJLeFU5RG4zaGF1blorditBelBaV2JlZ3NyS20xNytUNGtrQkk2S3RjalJQcjk3VGhrUlBZVVdGWTVFR2hiZXFGVXcrN0RUZVBRUTcwdlBZTVNjYU9CQXZxWTNETDdlRmI1Y0ZzbHoxYzg2ZXZESlJZU2p1d3loWm5wYXgvYndvVzRKejNEUEYwVE9XS21iSHo5ejBRYjFGaDcxRWlneERLbUFCMFd3SlRMZXExcCtOTVdUM2ptRHNGL2VKOXZubjJkbS80aTRidVNOb1V3bmJneGgwNE5CcU0xdksyK2VlY0NGRng1d0trN0hSMThmVjJrN1BQNCtEd2ZHWnFEL1VrRTBvYllyWjVzWEZGQ1dBZ0ZvKytTaHM1bXJKWHY2dmtqRGlScFVncWFLTlhkZzFVd1NEeGo3NjdCd01vcnowdEsxVUtGRWxFUG5ISXoyQUxraTNyUC9PR3VheUlxenAzc3RYWEE1czFreVpMcmdoRkhzVzlwL2NSZnU4VXptamNYSktaSm5TVTBiZnRzL0NmT1VQNmgwbDQxYThpVjRra1JReVRQd1Q2OTQvWFI0MDFscTVNZkxVZFpHcmRTbElEQkQ1Mk05cFkzd2k0M0FnV3QweGE4SUkybVpJQUYzWXRPQmlOdDJGVGU5OWdyL3ZhTnJWcnBBMkxneWcyT0U1MFhydytSektJWndVa3RIU0VEa1V6OTVSUHhkb0hpR1NoV3RoSXVZem0wVDZzQ2YwWmZRWjI0MTdINzJENE5xbXhodUZtNGQwa1licTFXVmhyNUFTNlgxMEVXdm9SUFpIbHJ1aXZ4Tlk2Ullucm1TbEJMM1orVkxwZHNRTjAwK3BSa2xvRXhBd0NrazZHVTIxM0dEV2lVc1pQd0J4OE5YcFJsbkZqZE4rNlYvb2E3d3pFY3cwZ1ZGQmhOWVdQNTVacUNDTWtNL09XT01OQy9Wbko5K1kxWE1jclBoNmlYYkdnNWdVVU9hWlVZM0dRdk83LzRkVXYyRGNmTk1NY1BTZXN1c1ErRGpRYlhRTmlqM2gvRmQvbitTQ0F3RU9JNTZ0YlpReDB4ZjIrdG9VcTNieHhING41QWowZXhKWHM2d2Y3dXRoRWs0VWdubEIrc2t2cVBqalB1WEp3V0tRWlo5aEZ5RDRtNXVzUHdoUFBaa1Yyclk5QmprbW5Ta3ErT1Vrd2JhbnNjV2dMWG91b0xLM25rSitVUEEzOVVEYWFuZklMVklqeEtldXI5TExaNnFseGdNNytDMm1uZFE3MHozd0Z5ZXV5dGhWcHdHRGZ6azJEck9xSXlYK3ViTUkyaEdpREFUdnkyY0FSbEtlR3hZb2ZWLzBiZURVbC9MQUFiMStxTWVvY3N4N09UcEhKekpGNjNRV1hiVTBWSk1CTE9nQUI5bkZURFZMTFJoMW9vR2VPVkZPcW14dUNUcThsRDNwdEVHTDRQeXVGbTNhaWZPYlkyVGlLT1licStXRDUrRW5jZ1ZEc3FvRnk0dFA0ZlpTQXg0UFpYZllJOGVrbGxoeE15bkVmQndPczA3RUlJWm5pTExJMFJ2Rm5pckswcWYrSVZRYit3SjNJMEVqZ2ZSNk81K2pFRThFT3RZMURLT3cxZm1ubFlna3BBb3NHeXViVC9VY2N6aWRvYjc2ZEpwY2J1d2Nsdys4TFhNQXhZTGNUVW9iSzNPTUNPdzZMYk8zSTlpQVRHNElhc1FOZ1ltcFdkalNkbmxQWHd5aGIvY3VKQVd5cmdiZWhVZHpjRHhvdUx5VVM0blEvMmwwcm5nS1hUVU43ZG8weGZhWFV2eHZERnB3SjROMzJaMm91RGNOWG15L0F4Z3NBcmdxRVJVWkM4RysxUXR0WVJZazFwWDZPVW9Ga3JjMlpRWTZsY2NPeUhiejN4YTlnSVhGa3NSeFU0Nm1ETWpnZ0R0R096b0xlL1NIS1NFNWJFT21rdWNlTlJDVVNLUkVoLytJbGQvQ24vTE84VWRMNWV6QWw3VWN3dE9iN3dtWFVDUk0ybGJMbW9rVlhCK2wwV3FRZHI2Q0NUT1p4SU5xQ1Yrb0czVXpHT3JrY2hrb3oyUlpseDdhSEc3RCs2c2pjWFJZa2hjckNHZk9pano4OTZhRkU1aDEraWl0clF6anlMQ2lBWGd3YnNTVUh4UUp4cTFra2dZZmU2VmgyRlFTbjkwQ3d5ZU9ZTU1vRGdNUGxURGNKTTFVbTlYMll0eGtTRkdXaTgwOEpMS2ZSZkcvbmFlOFA4djBUUEkvSHlzL1pGUHV4aS9OMjA2NjdrbXpCSkNKVC9jaXJCWGVCSXM0SlhrWjlJK21BUFAybTcycHpwQzVscDgzYUJCOTBpb1JDTUowV3RSUk41RFlHYmsxTDk0T2IrNzNSWkhhc3MwOXdkM2IyWm56ZDRIUlU4V1dQYjIyTXk1Mzk3cmxpL2tiRDBQNlRwKzNXRUxHc3hUcEFTRVZldzEwUlJIU05NZTVUWEozVUFJaDlCSms3a085UFArb1VpVWNNQTBla1grS1JaRC9qcVFIWGE4N3V1OGNOc2pkYzUxNUlGb0VvWlBFZHIrdjdGM1A5NGZsc2kxOTBPb0NjNXQ4aFZtaWJRYmlrT3VVOW5rSVpDVDIwUnBMdFIxUVBGeUNGMDE0L2FyVi9IdlNIUmJid3dJWThQaXpCSnRmOXdBaHVhVERMWGZzNnhWYVFoeElUUTQwVlhKcFJFd01GSTlCNmdZYXYrQWw2NUtUM2dDVnRRSUEyRWhhamdWcjZWNFR6ZWhpZzdNVnlGV0ZoZWlaQk1MQzZqdG9LTnFIUTUwMG9wZE9reE1VZGZwM3k2bkhvNGpCS1NwRjB5cWFtUXRSMnJ1SlZ2Z0EyaEtZZjkwemFwTENjVGduSzZDK1FFWFlCOVJ1c1pSakJ2RkhqZWdrTFpMZndLeUNiOW1CTGNkelBMUjZsVHI1aFR5NlJwRnE5WkllbFR4SG5TOGdqWWgyNXpnVWdBeGw5M1prZk0reU1RY3E0aXNhNDFWREY2Z2lpZWh2c2tKMFRRMXEyaFJVbkV0VTlNYjB1RmNCd2NWNUdIeXd1RlM1UzNBVHhrQWQvdFRwN3hnWHMxVHBSQmdrQ1dRdUR0TnQzWnFJaWxvaStjZHlxYUxwTE5XdXh3cTJUU2c2RDhLUjJqSmNxOW9VK0pYUVFub0l5eTU3VDZRUW1VR09sMzdkWHkxYk9oTEo5TVhFZ0tsdjFlMFBCUnRTbVMvSVRPTy85dFVoc3hxajBZMUtOWWNVQlh2RDd6V1VEbEQ2YkpFZlp2bjd1Nkx1clUzcTFqK2QvMDJFcFpYalg1Ym9zTUt4R3dKQmd6QUR4T2pWR3FWVUx0MlgrWE85eUlzMmxoMzlpMjhCRmFZWEVPay9mSmIzOURjT3B2WWwrWThPanlCRVhYOFFsRUZqeDV3dytuTVVOcFVQeEh4dzc0L1NjMzJ5S3BMQW4zY1hRWTJWdG9mZlk1aFQxb0tVZEdFSWZVRTNKWnNORVY4aERaUmtRNFRoR1VTQWw1SzUyRmhmT0JtaUY3Q24zRVAwNEpLSDZ6RXZ5NUpRQzhBN29sWmJ4bzJlZVdUK3M2a1FPV1l1bkJIc0V6WEx0SEJ6WWVpbFNmYlgxWXNMbms2TlQ2OFRYa0h3Sm95NXhjVlNTR21EMDRBcmd5U3luK0ZVdWMvQ3RQcGRiN2ZTeTdsS3c5YmY4cWxFWi9QTWVPTjhDZkk1TFBySUlPOFd0cFAwQ09nb2hWYkIrZGRsTjJ6TXZkZTdqYjhPSFRDbFBhT1d5T2VrTEJVTU5zQXBVSjZvdlpGRlU0ZE4vaGYrQTMxRnlseXp4d1VSeFN4Qkw5M256dGlXbWNGYUpXamtGWXR2Z2MzT1JyNXFKK1VVVUZMQUorcFgvY2MwVmR5ZGVwT2dGQXNqNUhTbUZlVW5WWHd6ZE54Rm5yeS9GMi94Y1l3ZDBNY0c3aVVVUUFqU0VFYVJNamd0NVYzUGQ0OGowb1gyYXk3Szd2bWxvcm5HTnR1a01Kb2xyUXNzVm1LMmhpczYrcHpmYXQrUEljT3VIUndpUDF6ZDVnVis5c3Z4QUJxSnF1SmlyL2RTSEY2RnJPa0dxdFlFZUlwMUhCU0YyZU9rT2pFVGVqQkhhQjFoT2tRdHJRRk1XdnhLSXo2MmNPOUQ0QXVOKyt2VFdnengxNHhFdVBvd2U1a2kvczNSVVdJWXVjWnY2S0hST3F5dzcxVldmbDVpUUwwdHZvcGQxa29obWM3YWc4QW9XL0kzdmJFQmR3OFZkKzlqaVFPaG1IRmROc2ROVGtKTTdUeVFONVl5OXVDSUdTdWNMaGd2QVpQUFhkaFdOaTZmckRBbWFTSXM3SXBGN3VML0ZzczdjRDBnWkRtMjRRUEFlS3NabGVPM2lyZ0FJNGJNbzVseGM3dm1kbkdabEFYKy91c3I4ZU94eEc2LzBzM013WDlKWjNTUnVaVm1yWk0rVksxdVBURmtKWUJTM2ZLSitoMVZnR2V0QnF3ei9SNy9FL3pRcjRvSGRRSDQvNU1Mb1FnTi9NcDIyVUQ2c0tpSWY1eU9jYko3R2wwbVRDcnhYZkZsbDBTbDZoa2hudmMrZnBaZDZJaW96RE9pV0x0bzZMZUNyZEJ4OEFVL0ZrcnV2NnovTC9TY1B2VjdxdFFaUXVMZnBwSFU0ZXZRUHRXdnRnYWxHdzFmWndCSkFzdzM4QTF1eGVaWTVYbWxuTncreklZZWFiSzgyVnpSQnRPcWZDdW5mb2x2aDFyRng5cHM3QWhZaDdFcTNuUnc4WDBtN1BhdHFhRHJHejl3b3hmL0tMcklTQnczUEtCQVk0NmJUdXUyUzFOb3hPTmV0VktUSG9XRUFtUHlxcTJmMmJOUDhoTUw0blhmU09sY0FHUFNhTVJGUzkxRWo2UFh3RWJvdkx5Z09IanlraVZTTS9SQTF2L2NwWSsyUlZhNjMxMGlvaVNvMVpNU1I5MHVGMnRmNlJCUERCTnFHUXJ1bVNzM1poS0YzZjJIVFdkNThWd1IyTjRPNHpPQXFPSkZBUXNTUWRWeXNMRzRMRG0wYkJaLzlSOVJNN1MvU21nVGJTQlJLTVF5WWY2WEl6K0Z5dWp0aEprdlpmWGUrOTd4SSswRnJ4dHFXMC9jcTRjSUpnU1NGSlZHRDFHZm0vV3l2KzhOOXRSNUhCZ1RNQ2YrMDBkM2hhYytxampXRW1ZV3lIeGs5UHFQczhiTDVYUGUrZWtJQVVsSHRPR2JJQ09UMW5tbHFvMmdmNytkakhpUHd6Q3BDUkM3TGVYa3oza1RZWHpTb3F5c1BTNEp1ekhBM2ZxaEFJRzJWTWV3VWQ2TTVKQ3ZFeTNyWkNwdXYwOXB0T2xPb3k4RHYycWg4R2pWMktpdmk2S1RGQzBwVFM3YTNCbGNEY1BjL0Y3U2RJbDR1VUxTMTNWZ2xKc1hXTlRVMExTN1dwQ2l5MG1uSkk5dy8weUdJcXZMMFBlakRmQ2RoSVkwaVM4NkxlN2I3NURrV0JuRFdFV29vUzJmZ3NWQ3J4aHk3Umx3NGV5OHBZQnlaUzAxdndibHNHRW9QdkdPcTVKSmNpRUNZajFFVHN6b1pxcjQvZm5pVFBCc3JYd29tOFlnZXFmR25QUFA3L2YxQm1RaklWcENtak1DczVBaXFxV3dhbmxKVnMvemhBWFlzVTQ4WnFyZGhCVEw2Q1ZHWURSRk9iT3J1WlJqZ1BoakVyMTFyQ2J3L2p2aEt2TG5sZUtqVFRqMXp3N29XZk4xM1BFRXpTRGwvaElhbzFrcDJDTEpBNXhKeW9rN21qZnp6cUJXMEhBNGN2d0VkUkdTUVNoM09kUG9sMDEwZlRKRFE5RzRnL2poRUxreFVJQWpWS0F6bmcySUM2dG9vTVRqSFJaaW5ZajQ5dGM4dHFqU2tlTlA4QWNZK2M4UzM3dGswV09qY1c0eitxMGxxNVE1MzJubGhCRlVKMTNVZHJaKzl3SlVoNjh1ZjBMZDZCWEF4czh6cWozaHIwWUsxZXMyc1lrQytYemszK3FISmF5TXdRNjJYdFhPOHlHaGZoUHZqeTI3clp3Y2ZEVWNmbGoxeDhwb3dSQ0IwZ3VSQ2FoL21aWVpIanRmdmxtM3ZDMUd3R0dxbFNvVGZLeVErRGpnblozeXYrc09YNEtYanBQMlpXM1l5eHJLUnV0Wmlja1ZGQXlVNGlzbkJGSHdiTmdxYmVjWmh3WUZXT2RnQVI1aVp1NXlLa3hKYkF2c0RyWk9DMXRNTDhSNGJvTGYwVnRKcVNNZTNJRUJod0pPaGl1Znp2OVd5UmJZbHNYUTdoOTJHR3gvdEkrL3BGMzN5Sm1GUHNUTk9SRW01WFZDL2dpbVJDZVlyL1hua3dWRFdSTUdRQzE2a01XN0ZSY2FPZDh5bzJQTkMyRU4vOWdWdGtZU3lNZis5ekdXTHk3OE11M3N4cVFUQzIveXpRNXFwUjdIelB5VER0cDlhRFNKK0MySU5ZZE1zcnZVdmZqWG15U0phWU02UXFySEF6UE1hcXk4dnducml2QVVzNnhtSkVDMGtoaTlubTIrdXZ1UHVaTHMyK0F0T0tjbVFxV095TjVJMVVyQWZXQmZFS2U4VldNb0lHTkNkSzN4ajNGUWVCN3Vyc0YyWElTTVBHZzdMYk5mbGRoME5ZL0F0VVBHSVduczlpS3diT1BiQnh6WTAyTk1kK3d6U2c2bWo2eXhQbVNxUUFjanFhSktyY09kamxkbVRORHdQd3YyeGtPcDlva1MrNGpXS1F5MVd1dGt5ZHJXKzlMbVlaUWcydllETUg5U2tPQkY5WW9qUTFWcW00R1JtcmJXSjVKR3hqUUhIanV1cDJuWWVKOFJITGdLRTV0bVpkdTdHbStuVEd3cXN5ZzJkeHBEaDYwYzYrdVZ1UVpQU2o1aThyNXM3aGxnU2JvdXJBdXRUWUhadnlQU0pTQ1JIQkcwK0Y5d1JUZXR3bzk5OFNhNkt0Z3A2Sk8xMnpwMmlwVEY0T3ZiNk4xaWxNNXVKbGpKVHVCL0psUFd1NXZENVdYelVaNFdEMGpNb1VMa0MzbUhtbjM0SFNqVnk5ZEI0S2JDYkhYSTJ4VUlXUDVKZ3oxV0ZQanl2NFpuQ3l0QXdDNlVmRTVZcS9ZWXBrTGxWZTVFdVovSWQ0dGh1a3d0eXUwUlVXREp0NDBtUURWNmpaUyt0Qlc2UGtwQlFuK29oYWhxSmJkT2lMUUpGUlV2RkNEVkpBM2V3TGFYN2FPS2lXMEg1WnVaMDYvVGZ3azI5QnlnL3dYTkN4Wi8xUXptK1ZacjYvN0Q4K29UUXAwem1IcTJBWlFyMzk5OCs2NldacVVsc0hIenFucG1YN2grMnJFb0IySmRNM3BzN2x1MFc1Y01TcUtiNCtsSDlidUovY1pwNWxURjRXVlJsSm5rbHloamhuaFUwWHZkbjdkeUZicnJFYWVIVU5EK2lwMWRkRm5hQzFTeGVSVDBsSmdGeWVNbGM5QkRpWGd5bUlqRUFkZTE0RVJRbVluOEZ0NUtkL29zUm5JZzRTU0E4L1hsNnM4c05HaXdiU3ExYVNLWUJOSVlNTlJhQ1ArUkJBdE5pSXpRVjlmZm4wRExrclhvY0xkZTFvZkV6eFhPa3lDU2NMVEhDajFsRWRwdHFiL0lJbGlNc2YyUnN0VHZmM3N0eXB3eWExd0h0Ny94K0RYakZJbXVHWHFNdVpaZnN1N1VOQVBoT2NoVXdod01LSm9XMGwwaHgyTS9wdVcrb3dXVmZ5cFB5OWpjRCtLcXRjekZzRzlTV2lrNVpQbkdPdzR1QTEwZ1V0NDg4YVJhQmtiSG05WHpPZ0xqVTdiT2x1YVl5UEhMeVUyTTkrV1JxVlVBSnJTNVNIVnJvMWhkbGc2ZGdmWGxGZkFlZjM1cXQxRWwvTkVGWXVGZEtWUGtzbGFPZmdDRnB3Q05yS0RHSGdyL2hMTUMwQ3JLaWZJaTc0QThpUENsdFZvd2VlWi9Ld1cxRTA2RnE0b3V6QTMyRjN2ZDM4MzAxRjJYeG93TmF6ODg5Vkl3WHY1STlBc1dDTE1TYXRNcUVDcno3dXQxUjU1K1ludjRpU2tVR0dENlpBUWZGSTVPaEZIQnZmSzNOVEk5QjlIMzhka0NiVWFTMm5oeFV3Z2huWENsb1VRSHIxVDFaWUVJWklTQkU0SE5KdFJHc014Q3VUOTlMWjl5MUcrQll4MWMyR1JHUElEL2xtWWJ5QVlEbXlCY003RUpEaWd4SlVoYUFBTm1PMFdTRFJaK3haWnQvK3h6UlNJNlU0Njg1L3kxZEF2dlNyL0xxc2ZPSS9zOXVRYk1YQXhSSFZWYVNTY1VaK1N2TXhST1pra1NTa0wyajF4WFhOaW9VUHYvVStvMjIwYkV0amlkV1Q5dFp1VG5EMnRTdk1iN0dibnJNVkNOaUJnK3JiTWJwVURYREZFampudmh6SVhKWmEvcm1VZjVEeXhid1lrNk9wclJxQ28zajFOWFBkOGpjWDVSMk5kWGtkSEhrbm9kb1N5aWlqYTdDOVRWSTdPeDd1dU9rbXQrNEo2OGlEMm1VK2oxdEZ0Z1FySWlaVjYyOFkrZmwzYlpjUDYzMWNGbFVtYUIrRnIzaHdMOWFENXZzdFhZS3c2NmFMbEFBZlVtM2xKeW01TWVxc0ZKV1pOR1Q3RldaczFOMFpTRDRJQWxDdmZHbzZ6QzZ3c3A1M3FiM1lSRUJNK3hzUXVIZ1d0OWY1d1JyUXcrcnF5MFVyM0E5TWVHMUlsNkZOallWK3VUNWt3aENSalYrc3U4UWZCS0I2eVVuS0p5czdMNmtZYjgrOUN2ZHUzazJuSm5lN1BVcnY2ZHhlVlNON0JOUUpEY2d5Zis0QWo3azEzZE54SlY1aWUrZTZlQklhR2hmSDF2M0dRdmZxODZWYXp3NmVMV1pkdCtnZUMxSU1teVJQT2luN2F2aWUzbWVtdSszTjhXZHlQVlg0SkJ3YS9CMG5lWFZEcUxGeGw2Z21BWnVnSlVXTC91RDZCWHFDWGVTZHpKOHA2ejRkb2lDdGxNRjBIZjJiM1hWdm9KQ2tJZUM2dWVCVlRPaWk2MlVCNHd0a00yN0NMZVFNeHNDZTVlcjFjdU1RQTRHQktmeU84RkZsV1RrZnFOenMvT1gxT2ZQUFJVclB3VWF2dVdNeDRDV3RBZEoyYTIyNE5EUlQvSndWWFE0SEg5azVqR0grazFUNDFtaEFQVnlLK1hSYXE3Y3l1eDdpTjQrMmV0VlpwZ0FCMlFNR1JET0k5K3p1MHpHRmsrZDZ0Rk5neW5xM1E3VlI3RjA2MUJuUFY3aVgwSGFzekRxa2ZNTkEzNnA0a2xxUHlsbjhaczdqSXgzakJrRlRtZmpEdFBETkt3KzU4R3J2ZWV3T0w0V0l2U1dFc0t0L2RJZ2tPSGhEVGUzeEtlZmI4RFVqUGdHRnBFOGxsVWZUUFpDNXFpaUxoT0VuRForT282RU5OZXZSUmE1ZzhjcE8rZXNlTENjNWNZa0JwV0UxSWRBeTBXdEpDWU9yT2gzYVhTd1JHSjNQOHRSeFlaV0FZUiszM1pGNkpyUC9RT0I5VFVBV1l2bW54b2NrdHNKR3lwMFlJWnZIYjlXalhOcklkdHBOY3pwUEpGVEV2eUtObmFJY3pldCtoMWQ4c01Ub2VXRDc4cGxCZ0xueEdVYTIzSHA5YmlDK2w0WGw1YXVXcjVQNUgxalN2MVdyaFlwa3BvU2NSRUQ5SzZaSlplVUtZSHRIODBUbWZWc0VRaHlzS21uUGVCZFZ1dmVpOHQrcDZwdzZJcS9hVWVZb2IzN2svUU1Oa1VVQ2pyQ3JpbXZnUWxYVDNZMnkyWkNnYk5EN0l3MHpYUklKdW9IdnpwT2J5akM5UVZkWUFWNnZVTUxybytYZERySHZPTy9LcmQ0MUN6eUVBVkNjUmU4cjNmY1NINFdSWDRjWmVWeUUvUTRVV2RyTU1IdzVDTWhsVXNudDlZWWVoWXN1alVmRkdMOWJ2SjZxL3pkQ1NXbGpna0M3NmpJMmY1WmpFbTU2dG56MnM3dzkvZXdwaHZQc0FUWVZhSUUzODlValFBZjFZajdFWE5FOTNVNDcwNlFET0o1dlVMZXRTckFtNlkycjI1NG8vR1BxdDhhc2tab1NRdUVIU2Q4OGxwWEZZWExrMVJTbXJRWFkzTktDRzFEUk0wd0MzaVpKTExERW84MzgxM0pUNnJXbkMzTUd2Z0JtbDJLejZUU3dkMXY0cUF2SWZXVEhCV2dtaVdyWEJjOGQ4UElZd3p5a2R0Q3pjMUdFUTdhWFNEbmZ4cFdERXZNY1hjb2lPVG5FcjFHNi9idkVhVVdoclByekVFZUdjTllxY1ZiaHl4L1UxRnBVVnpSSVl5QzI3MnRocW1ieDZnQ2lHQWxmNmJoQkdrRnAyOERDbXlIQWQ2a1BDZWNSRWVqTXRIT3pORHB0VThNWDFLZHg5amZKTDJjWHR1eEZoZ0Z1UmNHT0Z0TjJabTNqKzYyaDRLQ1RDMjRmSUlFRGdDZDNzRGd5a29FbTl6SVByU1V5ajlCMU56SGMzMkQwV3A1aEsxMFhHSjRiZGNKWEpSREJHeFQzcFBtNW1aWjk4RkFWNmI1MmZSYWlSQmk3cjhUbng5WEdLTFl1aUptTmRJNkw0VkFNRjVoMTZZZ1R0Zlc2eTJhM1JhV3VST1dmeHFxcEVCZDR4bXIwN2xyWjZQd0lyTXd0T0tXMVFxQ1VyVUJqb3UxMjE5OVZ1L0RzYzg5am9GRVUwZ1JENE1PRDNucmh6VHhUdWFtU3dQWS9hdUtvWTJJVzJzOUt5SlZkNXFHMmppN3VRZkt5TkNIWTBoV1RTWit5K09LV0tLdFYvTGlZSHJlcXJySDg0Ri9PSTNnakZ5eGMrMzVOVmNpeVNBUzFDa24rYnNIWVI2YzZxTVBiR3JxYXY0SXNYM21kZGJ5RFBDUi9oeUdMbzB3VHBIbUFVdVhmVXJ2ME05SDZyRXJBdHkwL0VlQXVKNElRVmpWRFlHTDBaMWR4cHExb2hjWU1iODdEdi9sZjR0ZTIyRnA2NnRvM2RsTGJIY2N0M1VPZVlubGhZYTNLWW11WVVuaGw3VE9RMzgzaklGd3RRWHpXejJuTmJvN3FsZ05PZlprYUcyN0FnY2tIT3Qvck9hOFJMdlpaSWJwb2RuTXZJc2RQcnArMDR3RG1zQXE1YXR0ai9JYjc3TkNuaTNyNmtZM0kzVGhPQ0pXSFBYS1NlemMyZ0JwbjE0a0QzUTRRZlBCOHVpbEFVRWF3U0htR0JvN2JUb2s1WXVxSmhJLzk4ZHRqSW9hb3pRVjNFNmhXdFJCdHdqZGN2RlkwRWFlVXBSZThwdWlER002QjY0bFZSUHE2Q21NeDdaa1g3M25GM1NuTFkxN05XMmpoUUNpdENDanhTc3l1SnRIaS9SMllCVzBNME5QTWx0dzk2aEdaOWRiYXNzenhZWDNDM0k3dlFjNWwzNTNuVDVRdUV3TGJQVEpkeDhvcmdlamY0MVExVzFUSjVyRzhvdEJKZzRqcmEzL1ZsWTN1anJwODVJOThpVWkxQWxZbXY5TEVSRjRrNXNFYk5aaE5uSitVajBPV1lrYWk5eE9lTUlvUk5FOG5pN3lDWHVzcUxzeEE4LzFiSi83NE50Q2RoQnhMWTdVeWkvTWRUU0gwdmZ4UEVaK1FQU3BpQ0hWcE1VTUY5M2dhYm83azU1TkkwN1BOaGlqcmtmVTNzcmc0c2FLZk1QWkFobGdVdWErMTNxdXpBZXhIVmlMTXFJZHNqSTQ3ckRZSElXd2tVUEJJV2Rab3VhQlV5VGx5V2IxZEZBWEFLa1kvMDloYXpESFZkRHVlbStWVnNRQnVyMW5MUWpGejBlK292bTlEallFdjhXY2VMYVhNRFpTMGRWRTIzOEE0djUyazJPVTluaWcvZWp6UUNaNFZPZTRhck8xaGxsS2Z6NHNjY1Z5NjhjUmh5MzlkRWxEZXNwYUhQZndlY2VXWDVKa1QvTko5d2ZWd1praWRFdWhEaGh5NTREMTV3aW1jTGFzaDJhRHVweUVqQnliZk5EOWN1VGtZeGZ6ZmIxbmljZTRLS1Q4ZVJ0VXppVFFzRjJYM3ZSeTEveU9HM2RvcEwvckRleFNYMEhQYUNXS2pVOUpKUXM0dnBsOUJ1Kzg0d3N1VkFTYzlOT3p0OEU5L3JlS0RreVVjd2dYTnNmdTVSbmplZk5KaHY0ckVRMldyNElHdWtyMUxLU3VyR2t0eSs3MVNnNmtsdUJmalp0R2Eva2cxekxNc3VaR093Nlk5V3krUlVDTmRlYTluVVJMbERBanhpTTZIa2h0UHVDOEJRQ3ErNjBHYmJrdGpCcnFpbkN2RUpveDJOSkVHY3I5OXdyNnpuWnRlUGVRZFZtTTNYeHY0ZWY3WGR5dkRNKzBxSC9NTzlIUmJsVzFOTHJRM0c3NHhFVzBuRnFRNThGY1U3VE1KYkVRNjdaZ1dac0lRek8zb3NFYkovc2hjR3hCc3F2bXVCWUsvM3RxVWt3NkNTUDVrS2JtMHFpT1IzYU1uR0ZoK244dGc4bTNYQ0N0bWd5WndnRDhhSVpNY3N5b1YzUi9hb2pDMi92eXphdXBKVUduNWZrdG9HcWFUbEtGNjd1OFZQd2xZb09DMkx0Nm1mcnJJL3k0NG1uKzdtTXB2YWdITTllbEdSUGJTbGtMbnF1eXh4UzIvdHA0M3cza2xwNlBYTUlhVGJWbm5COE9UT1l6cjBoQTFlSUlqZzJ5Tk5rQmplSk1ySHc4dUNUemZGU2tNTmY4WHJtTU9XeWVpSFN6T0VGRWxCSlZ4ZG5UVDc2ZzJyMU40VS90cU9LZ3NTUklDSjArSVBLOVJYZ1JxSFkzdnpnUU5DYmtjaUtITzh1UjhVWW1RNmgwVTNsYkMxL1Q2czJ0UlZhc2EveWdyU1lHdGlRNnJQREFFVEdZeEZ3WWtIUFdKZXhUcktVVEY2d0s4ZEtwcTQrQm9MakpnWGFUMDNIMnMvbHJ2TmdGcGc1MzJ1VSswZExyL1VKaWhrZUlYVHcvQjVUdEN0ZnhGZHdYcklTelNsd3dtTS94MnN4b01TS0JCTjFZenhHR1A3b2M0akYwdUpMNVlVWWM5NGJPMDdhK3JLWW0zclpIcGFxd3dqV3F3MTNpekhZbHExa0poS1dhQzRSbVRBM0U2bHAycW80WEUxNlo1aUhaRWFiSWpiL2FhWFdUQXk1TkNRVVdRSS94ejRFSC9WbWttSVg2QlNmbUpEaE1OMDRIYnJRMzhrcFVrMVBncWZTMmpJNUpMczhKb1BzUXlTcGlqdGZ1K3g5S3UyNW5JS2N2ZlN5eENVdklHM3F6WkRKanA0TzBrNXFiM0N6RFVPaGMzcVVpVXhiY3hjU0dvemFyejNVQUJ0b3hRcXZ4OC9IRVQ0cWFERE54UWRuMXdHa0Fnck5INWtaZTlOa1JxbzNRaGVKVFY0N2lPRWQ0TDdLQmN4aldXTDJYT2YwOVBIRGJXdWw4MDdkSlpTOGVUeFIvc3ZSSWZxcG0zOUJ6QVkwNVdja3VuRFJYUUIzaStSVHVnMTVoYXhzalNwOFoxcHRlWkc4VjY5eUtQTnVROFplYXVjRllBL2ZzTUxwZ2ZBNUxWcEV6QnZCbzZRUkJweWdZUFpHWGN5M2NuMGRpVjRXcmlZNGw4UXlSUFR3YlhwMFVKZXpnOGFiRkU2NmtTbXhyK2ZHRDVSQlgwY0dKYXRuN0Q1cGIvVm9PSXJyTjBWRzE2R3lzdHBzSU5pWW0wV1dCY09NMW43aUE2c3NLWkRQcEJHUXNBenZXVEgwYWtsOVpXV28vQUF0L2xHekF2OWpoQlF3T0hYdG5FR3VNbDFKTTJ0UUVkMVpYRHRjVFhSUE9xS244RVVBM0FmbjJXUXNPbHZDcGpaUkkvK3RhaEg3TW9WSHN0REhtU3FoRERoMitFRXNHQm10NmNaWFluMjUyVGxyZXRJL1JuWVlRNURyTFYyQ0FkOHF2STVLcGMxU3Y1cXFEYWFqOU8wWnJvOGtnR3FzZnhqSk5KUDZzRHlPZnZGQ2hCWmZOaW9DTzJWZmxBVTNoZHNyN05ITWJrQ3d1T2JTQTlqUG1GYTFTOWlRaXlKOVNDS3lua2lIVkFGRFlNaW50TjVEKytlaUtEN3lTbU91ZU9iKzZBQUJPdExheDVHSk1BcEkxUFJCTjVFcUN2OUdLUHZscXc0TWoxaEZIWUJZcjdHY1ZVZGhWa0wrUk9XcFpZYlhIdm4vWkhjMUhnRHk2QmxPQU1sSk9xMEl5bmQxY0FNN0g0clg5Rit4Lys3TzVhc2JjUGVSdll0Z200VUxCZGsyMjBVd09vVWYyYmsraVh1WlNxajNMS2tpUDc2SGh5RmhRNFNRTjlmaE9ScGdFUkkrMzVnTHU1eGtLSjFXOG4xb1AyNnZWdExja0VsVzR3ZTFxTFZVTzBCaWUyM0cvWGlyb0d3a2l0RDJ4cEhYUWRtWS9HdzQrZGNpM3JpSzhaR0M0Y2pwQ1JZUVIzZHkvSDcxYjMrU3llUFl6cEUvcDI5aGZKbjcvd3psc2VxMWc0ckZlMGp2REVSRjRsU1lOR29KeDAxbURRRStGc09FS2x2MXlZbTdxdzU1R0NZTUV1STZmZmJCUzNvLzRrN3o3cHlSVjU5M0MrVTAxVzdoa3FVMkJaUXlUM1JuWGM2NXd2d1hMSHBFRTU3VVJMcTByZEE0aFIyUzczVHBNcFpTbE1aTC9CaUYxMFYyMXZDaVd0TmJFOG13Y09KNlZHczdEbnZXK1ZSYnk5bTlXdTJ0QXAxRTVXWi8zOHQzYWpNQzRIVE55RkRGWjd1blVYek9WZEJRblZGUWxldzJhT0hCL2lad2pLdmtmc05iTUFNOHFLd3NwQkM5bUZSNmJFNEVGMzd4RWdYTkNyMnprT2t6WFVxU2x6a1JtV3FKcW5UU0JyQTNMaGhkVkpuWEZhK2RROUVUb0xRNmdZbnM5MzgySUlCaUdDZUl0Um9PL2gveTFZN1QzL1RXck9BbnlSY3ZuT01tOVpqVHI1bkZPYWs4R1BiU1MzanNrMDlualN2SFM4Q2NJNHcxbnRkdmg2cm5ITmZsK3Nka1VNQS9DQUZscmdEWEhZZWtUZGV4RFZkcmgzajN6SGhuWk84R0dSRnd3TFVEWjFrYjZzQWwxWnBvUzN5NGxmbTlLM0VLcE5tRDJBZHhqMHAvUWtwaGozY0RpRXZSRjdHZWs5UXBjbXZ1bDBLS2hoSEZ6YTNyNFQrY0s3M3ZrakVHYkFUMmlJcVRJV09PUGtSNmdMTzJrTWpWTjdOR3hubXo1aXdRNXgrbmxiQnNvSnFlTlU2UFh6NEJjMXY2Z1BrZkNxemNVZ1A0WkNuMDlsL3pLNXNybmh2ZWIrcm05b09najZqUXZncGczUmxXTlk3UEI5NUFIOTRpbHZyZ25FMWpFeXdmUEFCcVMwK2Z6N1JWcUJsYWJRSm1hUy9NWndrd2pJOUxhOWpSWGo1QlNmVXRVWkhzbXp1MVFPbjhBWmlqVGlVQm92TDcvajRNNmNXY0Z2QkNBV001Q2hybEkycmlqV3VOSUdPc1JuTldvZ3NRNEgvcGtwTG9QM0ZHY2UrSFlTV2hvVWRBekJzRUE2MVA4ZUtPSXlqdTdDL1AwM1p1Q2lXdndDSW1xanMwQXRjelJzV1dnalBmbXNWQTNJemdzaUNHeG9naWpoRXgxeTJpcXM2NitCVzczSGJuaVhGK0tyWi81ZVdROWpZb2RMMXZRQ0RVR0NJU09lZDNIQXNBMlNaYU42eTdVN2k5RC9YNllNRWE2UHdENnpjazdVZCt4SXI0REljeDJkQUpnSTU4d3hxQk90Slk4MnVyV0lnTzQ2cWRyZFFmQVBVbVFtdmUwdERIVFhQaEpUMkMxQllyZExlblJFUFllcDRudXBWUXVqNjZxTkRQaSt6cTZxdnNKanFOcThwZlVpMkVCNG40N050SEpsRDR6bVdyMUpSYmUxRkoxZnVlTmV1aTZRSjRrd1ZBd3NBZGw5UmFQek45eWszY2hudWtiT2RUWm05ZXlxQ0JSUWJJM05LeitiemJrRHNvcVFydDhMSHRTSHN2MmVaQVhIUVhMbUdXWU93MWlaN2xxZDk1MnBhTVFVTXc5YWpSNmhYc3VPZ0U5U1F1VW53Wk13blUvWnA0RmFpNVc2YnRzdFN3bU9HRTJtLzFBSjdyZkZjWDdZTk10ZHRNc1RWeGhSQ3BxekVKZ2tkZE1zSytzdElvTjJHTEh5b3RJTnRYWUwydks1YVQxSzQyN0pxNHY2bXVZU1lmenJ5NEtzaUxTOEx3UmpJRDU3LzEzcTZkMEZmSXlZaWdGMkFPbEIwNStkWHZ1MmROQk1ydnNTZG1WbkdOMjZMaGdHcUI4ZDJwb2hVcnQ3eGI1YTlxSDZGZUtydlNYZ1ZtNmlDakRPdDROVXNyQWwxT2JqVGgzNlQ0alIramJOWFVvdEsxd29zb2JyRTlLeXJhVEw0QVFYZDExT3p6c3E3dTh4WTBaem15MnpERWJnNjgvSUgyZm1ObVNPTmpGWTlHVEU4bVRMK3lKRCs5aTJxbnpBU20zeUsrN3FkY1JOd3g4OU9tNmc4UGpDaW9HcStYM1p1ZU9XYkozL0M5WVA1Y1ZJQkZFeUcwQWV1RW5DRFUyQksyTmJhK21XaVFOcWxJQzN3U1l2N3VzOEFMb1p6bDdHUVI3bkxyamlVTmxQcndGTmJLSTgyWFI5R214WjdYQ25VcWhTSzkwb0FVb3RaM3RQcWxOQ1Y3dTA2eFNYdTdBL2F5WmsxbW5nN1JoUTR5dG5BamQrQmx3Vy9nU1ZxVkJJN2plZ2tlaEw2M1h4d2JpdmN6NEFZSmtWVlRNOVFnZkRYZS9hcDFNNm9jZ0VUdjBKd01RenZ4K25Pd3pmVUNINTdxdDBsR1ErdmU0MzBUN0V2S0JKZ0RiditmQ2JRdE9wQjhUMzkxUHl0TEhYbHlWcjZ0b0JGUk5aK25USXltaWxody9mekJ6Qmt5ZFBXaTZmdWVENzV1ZzdDb0ZocWRML1diZmJHTStJQzc3bTZORmNMUnQ0c1VSSUtwTkZpZlJYRmcydjB5dmtTRXU1RG1DVWIzUEsyVWsvZk1FdFdXUllmU2tXaG05SXJNODdmWFZscjF3SjZ1T3VGZ1U5ZnZSekovMDNIZEFJSm9QNTRCZkVoQUg4UXI3anNyOVl2VkVLRE5BbXNYL3grUTZQVHRGS1RNUnFMeXdxY2dIMEkrNHpKalhEZ01HQkxjWG8zeHNOYjgxRGIvcmNvRjN3OGR3UmlqbGF3ZVovVDBKMGRUQ3NZUXZqM2p3OS9mRkJURmxha0RUbWwvNzlPSW5lTURUSitWWFpRUThDczU5R2hNR25uVnRIMjZqYU0rQlF5M0NHVGFQcnhDTG1IZHpxNkhkblEwQkRpcmdPazlHaDByclg3aHJ2NkxtcGFNTUpjb0xYR1JHQk1WT3FjajhocjlZekw4bnVmVDAwamNuT0w1RGwrWTNueXI1UEszYTJkaS80RUN0bjRYbFJFTDBiQjlIK0RuL3VCM25zT204YmorUmc0b0preEtRWHpEWDlEWWxaSzRpOTBlNGwyT28vZGhrclp0NStyRlFheTRVZzU5NmZaREZ2UnRHZkV3Sm5VYlNrTll2bDd0RzM0cUt3d3FicEZSdmdkZEhZN0JwN0xxOWR3SXVjczEyZDBjUCtWNE0yQW1ONVJ5VXcrVDcxODhwNHE0QUlTZHVWa3Z6REI5dUVNTEJlTGJHbGFHQ3d3NEQwMjYxcm9hL2t6d0laTEpUM1pJYzRHNEErUVVmMmw0cVRXY1I2NlBQbEM0MFhwS0tHZllpMHl4Y2lUaEFKbHJZbmM5b1picFEvNXhUb3hmOTJwK0xaU2hKQng0ZE9pMnQ1ZnNxQ1lPQnQzTVd0RmhLcG9sL2tUR2hZR0VHY0Q3R2wwRTl4WUdGTWt4RWF4d0VpbVFrOVZYcjVnT2tGMk9adWgwTW4yVHU4NTZvL1dYeUNjVUlZWEliOHVHY2N0Tkl0ZWVvSFczRGd6MG5xbUNCbEIwUC9VSWYzUlRxbTNHTlFoVFRZekV5NXVWQVlyTmJYTHoxNVUrUGZ0cTJYb3RaOHR3dUxpUVQ1aUE0UEhYeTZBQnY2R2VhMlRKM2pVSTd5Nmk5VWhobUNocWhieVdla0RldVB3OXcxRDhxaGJNZVRCRDM4QTBSaWxoelVlcXI5QkRZTytvU3VkeUFxTUhEUWg3UmdoQ1Azd2N5SFpVWXY2V092MS81Y0h5WC9YY2RIWlpLQkxrUHBBODYyWDJ0aGJ5c0NlWWhhZlc1VEZoSUIwRXc0MTlnUXpzVHk2VGdlVSt5cHg1ek9iNlNzK0xRUlNwNWEvMXpTQkhvSHpuWWlZbVJhcVljamtCWU90ejdwQ0xNUzBJSEUvdDJGVEtyVm5mU3JPRmtBM2IxeEYveW5sZDZPUldxUUlWK2Uxam9OQWpDVDA5RHlMSzJTaDBlb2ZhTzhiQ3ZjcDZIUGhqRVV6KzBIS1AzS3BsT0FQcS9RdDFNNlZ0TVpzNWFrWkFxMFZiWEdsaFp2dVR2VzFaM1NGWlp0MWtPMnpaNnhHeUxZblNMMUpPdE1KR05tYlczZDRwWUxCZlFjcXQ3R25aUmNSU0F0aTc3aDVQRGs4ejlzV0JEVWFISUdCZmJQR3VndHZtZFF2dVRHZGx0OVdIVkZOVFgrdU1PRks2VGlhNTl4TDRWYUFueHdKdXNJcG9ybGd1WWRMelBRZjY1WUoyOUdEaDkwSHZyb3hRaXpSSjMyallqZUkvdStLaWNxaHZKcUdyQkN2YXlFZzBkWTl3WTh4RzlqT3dOSk5TYm9aeXBDcEpWVUEyYjRKc2tTRVg1dEJlRTFta3dmaUg4dzBEZGU5OEFUQUtPRk9qWWhEUnVzSWtFR1BrNFBYNnFONmpvZy9jWEI2NnBGbDdsd0pCZ0FIcU95SDdPb0tvbGJFYVJmNE5qblRKZ21ZTDhZTmczRXZjMTdiTWpGUnV1aTgzSjJkK2F1QVRqZGo5OGFNeFFyYmgrWS92dno3NkVwdURRWmw1K2NvN1NKY21BeUFJSTBQeG85R2pEWjdDN0lpbVZWL2kwVkVnSVVwMjhuUlBEM1BmZisyYit0VmU1akRYU3dXQ2FMS0NXV3JFTGUzQUhROHQ5dklqZEpqMTU4LzE4b0tvZkZObFMyWFZ5Qm1aN3RtcXZSemVSM25xSTFtUkZrS0ZLSXdvelIrSmpwWWpKVnM0Q29Oa045Tmk5ckF2UjRUcjNaVFk3aVIrNVMrQ3g3NFNhWEI2RElmdkV6akJLamYwOW1jOE9qbmU0ZWtzaUVodTVmZmNNWjZDdjQyUDZ6eTBZM0lTQ0xicWNzRW1WZmtUMUxMMnhmTjFUV0tER21SMEJ5UUpNdkVNVXpmK0EzbXNtdjNSalBXR21Xbm9raytLalNQenN3Z1pUK3BmYy96eGJnSko3dFJ1WjBRelp6WmtMRWhyaEEwZXErd1gzVHY3VmJXWXUrcWNRbnd3d1BhRGV0TnQxTFZLeE42L1B6VU94dVlpYzFkSHNaU1p5N3IzOG1pWWVIV1lpUDlnU1ZTTkp4MXVYcUkybnBqMFAxQWdFZkJiUWcvbTJvdFdQV2lnU0I2WlFrSVdPaFVnNGZoQk55dVd2NU0yOHAreHp6VGViemw4a0U4QXhCRHpLeXYwaldHSStiWExQclVvSVc0VUNRWkQ5N3hwaHdUdktpMHo2bEp2amRTemxOd3NjZVJlbzdFSWJGcTBxNTljTWlxWE9pcXNWQml4QnNVdWU5ZmFpZE1oRENvdGdQcG9xYU4rTnZicXY4UkhKREpmcFErS2w1SWpZcDJuSDZyUHhMY2l1VWx1bEtxWjBZaExyTEVoMHJETWNnNnkwQVp6TXRQbFZjOVFZcE1keVhlOHRtcnFJRThpT2ZjV2Z1UzQ2ZWVwbXFjVGNySG02b3RsMktaZVc4ak80czRTZjM3LzJ4d0pITGo1eWFnSjREUGJNQVNacmFWMzk0aFIwVTJPY2grVGN6QlEwa1dqU3h3UXQxSmY1andiL3JkRDVqWUwycE8wR0JOV0RYbnV0TjdhcnQ5TGtxU3FtRFA0Nm9weHJISzZha081YVQyVUlmeXkxWjgxZE95K1J0c0RCTFdXejd5eFJheWZxcnd0c01PVk1hQmduWjgrVjVGYzROQVZVYUcxYXVzRngrZDIrNFBvN1hLR3V5QVlUWHpIVXVxODB1T1JKTGpSZkdzUWJWeXVXdlpFZUVuT1Mya0VnbTZ3NXIwOUViYmI2djRGUFJxK3RWWTJkN0t6ejFoa0ZIbW1heGNNMXRteXVNaEZBSm43VnYxVEJGMlRHVmh5dkI2elozKzdIT3N5V1lwZUM4WllTT1pGRC9EWFZIOTJaVWEyR015WHpHUU5NNnZkdlBLN1dNSTBWMlJiaTVPUDZCcWx4SldsejZ4K3dza1JDTVFSUzJrb3RjWWZqRnZOQXp3ODFuL0FaQW9FK3Z1ZVpqd2JiZk13R1RiL3dkbFNPOEZEQVRObXFkdlNLUWtjVVZiakhuQW1IVFBmOS9UazZRbWluOGY4QkEvMlpRWXdNVEJuQTZtOG9FclNDMERRYzJPMmtuODV1T0ovTkNXWXppcVVFNE9PNWtURkNTenVsNGlaSXZnYU5IeW4rbmg2MWNNbCtIT2lMQUp5VWozVDh1em9RWUNzUTA5YWJoeFREZkxqRGFCQlNCMkNVNnljM0FUY2dONWEyRmpBRWdtUEppRmVCRlhwTmxTYkczSHVoQktVOEx4VDBBUFBlOWN4VFUwMEhDNmpPcm8vVGg1S3l0SUFpTVF5dWFFa1prOTRWeTcwWjMzK21oYzVGVzRvTjhSOENJQm9ZYnI5RlZuS1pldlVvaVAzRmYrSlV2V2VRMXA5ZFBRYXNjTkI5Q1lrcXhKdlFpb0xXZDkzUW1hR2cvRCtyYmxaanZUdHlPOW5wYkZQOWVpTEFybFgzSUZJOVB0aHp3bklZc0E2aHVjT3oyOG4vTmJ5Q0RKdjFwRks2eHQ5eFpaUDZKZ0tQL0Y4NUJSZlFyY2xpY3hUVmRMSE9hb2xJY1VBT2NRSjB2WHA5YWlOUEc2RmJ2a2tLakdHMUQ4SlE5ZmZoQnRDRzZEVlRReUR2dExVVWhpSFdIandMNDVOak5tTkVxTlFLM0RyV0FZb3RvNUdTMEtCalN4a3JCQXdpd2RYUDExZGU2WU9EWVZWWllQc3ExV0VlSVBHWlJpbFo0OHlHUkZQRkNBN1I1ekZUcjU3TlZZWGVMK21NWFBFb2dVakl0ZlNNTUxlNjczblpBWk91WTl4ak1ZeFhpZXY4di9uQ3NGVjVraC91dkhIR1FmRjEyL2hheXgvcmdNL0pTTHZmVS9FVENvUjZzb29OYjFOanFCZFd6eXpPWTFyQzZGaHh4bENWR2diaU9WK2J3Myt1MExEdkEyNzMzc3lDb21PcFVUZ3JNMjBYVFNJNWhHWDlHdUpER2thdnpqNkd3UVVzQXlJY0tRTHJ1WHRYSzR4VW5BSEQvTHU0RDl1N21CV2NBNjV0UmhXeGE1M1lKZ2ZxbklCalFWWjRqVkgvWDRNYXp3bmQzQWJXRnVQa1B3dW1nbFVaK2dMNFEyR1pHOGNmVEtBZFF6V0pIMkM3SGNXOHErUWFHSzIzeVA3QnRTQVkrWWwxd3lYYmVRYW1IR3dKK1k2Tll4SDVVc1ZnMW9NSXppK0RVcFpHNU5LK1pPZ296RGFJU0NaVHg5SWFlTjdoTERqT0ozUGFhb0dhQnlIcGhQc0R0QjBGR05TQTZOc2p3THBoemhGOXU3eW01d0UzOEwzYS9ZcXE4NHNyZkFuYUx0MGFEeWIyQ3l4aHZab0pXMmpUbVp4ZVJsam9jMExQdWdJNjBlKy9EcHBSK1Nvc1pVMXUvalpmVGpzRHM2NXprQ0F1K1NuL0VSa3ZTYjFvbXYxRnA4RTBsUEkrWG5KL2htTytCU0ZMaHJQUjh2UDBDb3AwRGJhU3JCKyt1ekJOSjE2VmdVRnRkZXZKNmoxTlA1Y0o1a2hJdE5RR3E1SldHemtDUENwSjd1b25VcmdXenVKQjBzS3F2S3hQSmM2VFg4RFpDU2l0M0pwblptOUZmZFYwRUFOaVc2QUJKOTM2MkU1ZGRKZjN5K0UzaTJTZFIzQWliWnJreDJrVW9ZU21pcXdWTERaS2ZvdTJaaktuNE91K3pqaUY4Z0R1Wk55L2NwQUhIRGpoL1UzUGk4TmlWUm95cDY0UXFZOXh4RmNOMEN0NS9Sb0NpMXBrR2JlZVZrSnVsdm9ObUxXT0thbENzRktEUGJrMkRYKzFIODFFZ0JLVk1UQ2pzRHBHRmpiRXREWng1eE9QVEhJaGFHazY4aXFKZlV3Y3BMbXhuVzhrTGUzdjhEL0Y5dm1aNkQyTmdSSkwrMjZUSEdTNndCbTkrdmVwdHdlOEFhYkN3dUUraHFYSXJKNVRrTXU2MHVrb1FWNXZmSDQzaHZnS0RIQmljY2ZkVm1rYzhpa3hFajErTkxLZXVWME1uUUpQdGd5QmFUem1YQUNFc2ZoSTJEUnp4ZFJJWE5SQnNTYzA2OTZ1V1p4c1I5VU5Wb1daV3BBSFhLZmtXRnNPNXlubnlNbUNRWENHL3ROUXJhUXQ4Tk9VU29RYktwZ3paR0c0cktnQ0xCbzhXMXBkSnBIeWphclZmWDU4eVY3S1orVmxLZUloYXJLdit5YkJYZ0FHNHJ3eGxuYkQ1aVdadkg2QWFTa3dhakZsU2NhMmdiSnFSaExnV2RzNU1ySEF2eFhjM3ZyeWovaEhOVEVjUmIzWDdEMWc3bXVqb2R2UXFFTThrQisvNk95ZXU4MmFFWlU2UVF4MFNNcDZMTDlDU0NTdCtGRXhvT1ptTHgvYlh6WjZ1YWpPU1VjMGFVV1pSd2tlTzZmVTU0Q0FLRTdTQXhYaXJzUHd4cTAzeDdjckRyd0M4R0tBaXJOaGZ5dkkxTHBHRWthakRCOE1QL3BxdWoxQThFT1hoc0NjK3BiTDFzamNHUGxtcUdTaFlNZ1pma1FZTmJmTWVDOEJRbTRrUE41VVpJQ1UxN2xJamhvQ0VxNnNSQnV4OTBQNFZDeTZ2V0lqVjBjR0tLZ2lOMVEyeTVhSlZtTWRuR3NQek5rVXQ5VFB1ZDlDc3hiN0UrcmpMVjNFY1NOeDI1RWRIU3U4M0t3cEU5cC8yM3lCQkFSUlNtckxSUUNGdSs2Y0tOdWNQZUpySVV3TU02V0p3eWpTSWxpaU5RTFRLMmxqOE8xRzlrZUJ0TTdtdjZ5NEVyeDk2NUpRQzZFVmdrUnFjWThYNm9CTHNQQmdIZnBUaG5nTUY2SzFIdDRiMVRXNnJEUnhDem9PQjNlY0R3MTBpSTlmMmR4Q2o4cm1uWEhmVzVvVE00U2FNNWt6c1FXbFhzaTlEWXZGaDRrYkhUR1ozdkNiRjVGVTdOT3dVUitaWjlZWWxtdmtsTzdYV21iWUdoSXF0MVlUSGdEa0J0dExxZDE2QTRpQVI1Z3ZWN29ZRmVGY1dUSU55ajU2cFdJbGFSbVNIdmdhQUZ1ZnVyekhmcDkzV2VoMm1meEtGTWgrRExkRUdwUGVGMlhZSVVvUjBWVlgwQWF5Rm9TaCs1b2lQQ29NZFh5cjNaWStDSTNqeGhTMmNWaU5GdUV1ZE9MY2RSMWtaMGZsUDFzZXp4ZmJoMmFkbWpBMDVlNm92ZndobmZIOXEzRWZESThMdjFGbE9BeitZZFZwUGFlNVdZUUZUL2YwYlMzR0N1WkdBZ1ByaXcyK3hwYlNVTjRSRVdBUmtpZ1YrRmZSQkovZWlLVEVTdm41d2RNRUt6cWdlR1paUzl4OVM3OW9YUkhBblRLQUpYN1VXZ0tteUdhS1ZpTTZKRFFISVl1RGMrUk5rZjh5c3pNdXJnN1VPSlNSSlZFYTJ6cTh2SHdrb0tIcWhLSGZCUU45SFNWbFBmRDlha1RQa0RLNlRyK0wxQkJBS1E4akRTNC9waXZBVCs5WFpCd1lSa2RLTEFzcTRwaDRKY0tkZis4aHZ0RERRWGt6MmlFRHhZTWR1V3JiK0Q2OUJCMEJoYng4MW5iR29IajBVQnpQSVRQRVJpR0VQU296eXJKS0xweTk0VS8xR3dXWjBzVVVxWjRYV3I2cG5WUFhVNXRYRWpFQVRNTk9PUmtCOEJrMzJUSGFtUlNoUWxrOGNPQTltTkNrOFhzVzdPcWo3V3hQYXdSTDhNVnk4WkVWU2FuMGRPL05IeGZ6WjNxM21HK1JiN2cvekUxRVpTSFpBRjlvQTN3MmtGbnpXQ1BXVGY4N2RGN29mZVA4MnozUUQyQjdSbjZRcmo4a3FTcTJVK1BYWFpHbWdscitjSjBsY3psM0t2QWcrYThETVNDMkhSRzg2eGpqYTRyOTUva29zZzZLMXNMREZUMW5MTUhhMDhlUW9rd0kxdFVTYkUvV3hBaUhZV2Z4YUFsT2JZUGZaMys2a2hCNndRcVZkQmQzeTZZcDF3aWYxdUZYK3o0dStSdW5wWDl4eWdudGZnYkgwOVgrR0xVR0E4aTlXaDFwVVpsUHJENGhKMnRKMmVnMTZ6bkdJaXhXTklMY0kya0ZpRFhxQm94NWY2eklXdUl5MnVrNFF5MGhWZDNEZWk5UzB3UE13dGRqNDJzNUwvM1EvdlJBK2tTUHBkaFloWlc2MWF3akZiVEZWMXdoNm5aRFoyQ1F1bmNSdlQ1VTNZQlBZOW04MlFtNVVSenVSVDE1UGN2RGd1TjI4OUxHT3BySFArRDF5dkh1NldTYXpkdVhiVnRTTC90dEROU0lzdHQyMVdMbHkwaWZtS2E1RDc3R0h6SzR1TnduTkRLd1A4M2plbVN1Q2xETGZwdjkyREhWd1dTb1pOTjJnMWNSWVBSeXhIRWg0dzlnVzh2T3RVME5EdmlSUVBNMkZZSzVUYTJ2VjczYXA5SkRCcjhTZXNuVlFrL3lUeDRGK3RNV3g1dFI3Ty83dzBST0FvVllvYWlpTk9oaWx0QkhWRk96a3FmcjlkQVNiSGNqQ0prVGIrNDZ0ZjU1SkYyMVFIbDdwNW4zNktMdVVyUkplcE5mUXYxaFZ2SWdVQ1R0Y25BdW5nZUNiRktzVXJKeUdyWVZYZWFNSERZT2ZzS21hWSt4a3dNZnJsbzJCYldJbGd6dm9PaWpKS3Nac29oVWVXTFFoeWJiSXRtT3FSek1ITzdGNWJRVjRycnBqbzUwN0JqMWJ2UHA4VHVSL0xIL3hGWnZqNkoyb0taMVZuc2g2WE4wVmVLbnc4eThlWnZRZUVJQXF1Nm5WRjA5MFJkdVF0WitzVlExNDlwRXZkMlBuNDJWR3dNcmhocEovaEtjUGpueDZWQTFxcU9HcjRiNTR0RUhFZnFpcHNqc3IxRU5DanUzc1NNUWNwQ21neE5yWWpXczZDVEF6cHpxMUdwRjB0Z3BneG05QytoMVZlVVV3QnZjQUZnbzJsa1hmc3Z5MzhjQklkcEtnRHkvQzA2QkhIQnpIbkpuQnhocWkzTEdoMm1XYnBpN0x2QXJVcHJ4cmpKUXhhZWtSRHBZcEE1TWxqWDhETVlVTHpxV0xCak00elBNUzFkVXhJajdwK0cxQ3ppTXhlcXl4bmtTZHNZaEZrV1JLTnV4OEdTWGMrY1Z3aVo4aGV2Yk1lM3pFSG1ETFdndTRxajNRbFI3VnN0OENoNlYxZzBqeXcwR3BDRWpOcHpNWFRjaXRlN0RmeFg5VXM0ZVpGT3BJTGdBeEQ5NVdXMm00dVAwZm1rS3Q5WVpJa2o1M0ozQkNiL1lXR0plaTdXZHl1em1sbWVHTnE3Ukl5RDBrSjk2TklCMGhRQW9uUkN4ejk4UjFTZEFHVHFUUDZVSjJKSyt6R3B6NTlja3U3UU9hbEdlV0pIUE5HbUg4Sjd1Ti9vTThwNFM3YUJVK2d5REd3VWdHSUxlYUpOVERiN1REN0JyMk95UjA3cFBhd0ZuUnhUSjZjWmRMOHA5Vk5zUkw2V0MrOURNL0RuWEFtc3ArZTF4TVIzM29reGJSN1o3em9TQk0vMld2S3NjblJBVTlLVjczVjNjL3lMTVcxejFkY0VhejYwRXdmU1YwU1dMTWdHM084a0FSOFMvOElzSWc2eEFCM050dStvaWI1Z3k5SHdETlZnODJrYkdueXIwbWw5THo3SCt5TDZucjEzSEdOQko0TGVyeHh0K0taVnVTdUlyblZuRitaMjFKNldPdnJydFZVR2FsclJ5aVRoWW1aYWZjaUpQRlNjams0c3BDc0NiOGhwLzY4N3ZWOS9xUkZ3ZDNoYzhXQVdrSHgrajg4dHl3dVUxajQ0ZmtPOVo5dUI5UDg0dG1HU0lMTnNReUpLZlNqbTJueU5LRmo4NjQwaGF5MDlzRXpYNm4zUFVKT1FXSnFPVWxYWVpYbzlDSFNLcWIzL3FpVjF3anQrZlFhMjRtVnZzdWtDZXh3TnVCdlZzcDFoa0tjajBSL3liUGdIeGo1RHdOaXYxVm5sWkVaZ0JWbzRYVERyWXdJYzFnaGRFRzBsekxWMllFUnZiK1hNVENWRHNYazd4QXBPYitRcE50M2k4dEdXVUxhVVk2Y0JvaGRpSG9KSm5TTTQ0Ti9OeS95dzdaTldZQUpNNWNtQXRJenpOSWxMY0lyQ1BnNU91ZGdlUXhoR2k0NFlNOTN2QUNuOWJDY3h0OTMzZ0t1bHdGQnRER3hmcFFTS3E2SldSeUNpUkduWkRubmhIVmhjUXo0L1krbEd5ZEtYb3N6QzcvZDlFSkxxUnNLU1djbVNJa1pMOU9nelhOZ0wwRTJXaXBRc2VKMDFwK0tEWWtlOExudTIzSXozNi9RcjVaM2tJYW41Qm5yWGppM0hXTjVKK3dzYkl4V3M5bmxXamNqaEpHcFhGcnZnMnB5Q2hwNStPb2E5UllrdTBwMG9ucHhRQVpScmw0QlpoYmRRYU5EekZHeXQyTks5d3p3UStGeGhOQ01NazI5R3hHVnlhaldubjB1OVJqQzJBZzhpcFdjMExyajFSaDI0OGFSWVJFbHJRR2dROW9LQ2xqZWowK29Zb0ZrVHBKWTNYemZQOUk1bTVSalNyZ1ZDb1lIcDBZTWdoT2lLQ2xKNGdwanNIYS92VFBYNmNGaXFpOGt1RFNydGZjenNlVXloSE9OR3lXSCt5ZHZ1WDMrMjJhanJYelJITEFZOVBMZlFyblN1VXhCa3UydVlCNm5vV3VjWDVJbFBTcURuc0M5NmlaQm9Gb0w0YlRram5rbTNlSld1NEY0MjgweE9HVExPNWRUeXl3dmJmWDk1eTJhc3FjU0R3UklVbEV0TnFiN0Jqd2RzNUdvWHBEZ2kxV2JIYjk3RjhFY3JzNXhGUWtPTjZSNkUwOFB4SVZYRkI1ay9JeVk1WmQ4TG1BYWVwWGltMytNbExYMDNlQXlsbUNOS0dQaGgwSlJSVUpBSUk5dnR2ay9uY013b0d0a1VCRGRYQWpPdEo5Y2Zuc2hHenVHTnBzQ2d5aU1YcGc3LzBkT1JhaEZWZzFnVml5aTRkMTc1K3grY0xxVG0wZFhxRlN2bVhWNjh4a2xEUWZlNDlVbHZWbGs0RnAxN3ZZNVBMYjdTQ1lzcnZuMnF0VXJxVWYxU3BCYmpVa0FNeElOeTFNTTJyejNFeGFFTGY5TnVXQXFhcXVVV1BEYjl3d2I0dTMzc21rN3U4dFNnQnhPUGN3RDRHRGF1TS9CZSs3RytNUkRoZy9WM0ZkZ2t1dlNwY0NMcE9jd1pjS3FtNHBiZ1RVazdBSUVaY2RVR2VLaXpQNG9UbVpQRjlyM2RhMWNiOXI3S0VldE1oY0ZBZ3diN2NVZFhNbjMvbXZOUkJZOVh0VlUxY1g1YmF3dGFjcGJ6VWlEVTRZSWtBQi9WMkdwSlpYU2RyRU5xOTNjdjVxS25udDhLZ2tJMDFNcXNuTG9DbTlOblROb280cEhJUDFXb29BVGp0RWJva1dhUHMwa014K0JWZmF6WnJuais3ZjZ2WG5xTmlXUHJyWHVxNjRjSGZjQzMwTzQ3aUhyUVNPMFJDTzdXZlZIbUpNRmpnNHBoK2V0UXQ5Qk12UUd5c0NUcWdTckQvcUdnUERCNldSa1B4VzV4ZUl4eWNWK000SkVxQ2xKK3NmSHZIbWIvbXlETVc3SkZMR1MyQTFtQmZ5VENtWERqZmZGS3ppS1p6dlF5eWxMMzdtNTQ0L0Z4eE9UdDlja0cwUVNRSEljQWtQeDFaTDBkYU9lVzRrUUdjR1FDaVVpMzNENzNtbWhUTEdTcU1vOXYwMHFuWlZNLzY2ZmwxUkZncGp0aHpaRW1mRmpXaDJONGoxWk5JandGWGRjRTJDN1VyelBpM2gxODRUTjV2TFFmZExEZEJxZjJBTjZwK1Z1ZG1CSUpONFZMU3hldFgxdnoySnJjS01weGVJTVh6SXplUkRDZng5ei9pbEtsM0l1Zk8rZ21hN1BFTHpmektZSWxET3ErUStpWUhKN2VJNSsxQzFFdSs2Wlh4bjhUWktuOENnWS9MZU9rOVB3eTR1N1RNZFh3VDJyVDVDOGxUMHNoSytxTm1MTXBvbEFPd0FrSVZBYysweHJUZHQvZUFZSTR2UzNNMXNId1N5L2xSQXpqQ1NoNVBBQzlQejM5QkVlS3RweitZNzBUcEJjVnJMWTdmQmkyclpmRmNMUm1tVHpzZWdBVTJWR3dpZ0YrQ1lUNThjaUhPaC9nV1QrTjUrNXhyemxDU2dhYkxDVWVoTENJZi9HQ0lzM2ErMDlOeWo2MzVDQ0M4NzdPTWpKNlhUM0NNdTZQaHk3SjRZeHh4WkFHTlltemFNN09UdDQ1UUJvYXVMb2J6aTQwckJMRjZRbEVSTXVkaHZ3OUgwM3NSMjBTaVRLczlvMXpyKytpZnA5eVBjeUFRLzU0R3JQRkg2SitZcVFLVHBYZTJGT3grSVRBRzJYeURNNUJ2S0hqSm1zWlV3T2o3U3c4bHRYSCtxN2VvWlhoZDNVT043UXlEZVhveUdHWlRMbTJzR2tQeEFyV00vTXl6dHpQZE44SEN6WW1JR1ZZTGZZWE1MU2hJMFh2cTF6bnNkUkIyMWVvNkVtU1lMY1VTNGFDanhkRDRtNDM2b201dWpiam5USXhDV2ZEYllyVWc3M3lsK0ZKdGxhcm9hSlBObFZiMEtYUVlLdW9CZkZEMDNmTmNlL3JHSUo3ZVZLTVFtYUJLK0FVTzdmWitRVzlNWnIyWW9jTVNneGIxT3htNi9Bay9teVFWNWtQQ29CbG03YXRiekFMZktINjZEZUxuakZyeHZCOEpoMExCY2F5WDEvMGc5bVNVaGI2RGpzVXBWMkFPMStWelNBVFNNVmQvOHg0RUtkcE5TV0FkM2cydm96cmJyUUJmQWxValY3WVIwK0wyWnNtQ0FYamY5UjJEMytTdkxmOU15QkdqdkFVNFR0Z1plTDd0UVpldVJOQ1diL3pEdjBzQ0d4SDRjZVVUL04vTzQ2cHM2OGxUVW56QzMzbmwzRHNmYmlPVW5PL3lmV3N3TFVLSVBFc1BKR3BjRndTem8vMkowd3NTcHlqS1psZ0ZOeVQyUE5oZU8wRWZqamVaOHE2Y2o2OFM2UURRU1NNbmpBZEZiMHdWeE9KTHJFUjlrSUpNUjloSW8yOUVnSkxSVXIvNTJjVzlwWmxIVzZ0ZHVwUnB2NHZKbUFISzRDNUlrUUh2aG4zcjVsY3V1UUREUWtHMEFkRml0Sys5Vkt3Qy9FSTRNbCtSbitmc2YrMXhWK0ZKNlBoVmgxNndpRXFOc04vT3Q1MGFlTU9BZmt1L3liYnlIZW4yLzJ6YUlCYmRFeXd5TEhlSVZnUzFWbW05aUhmVklRVDVFdnhocWI2MFRRNitLWVM4UWR6S215WEtDNHBGSlZrNWFkNmpnS05XazRtbGdCbVNJcDlOV294S04za1VXdEtUVGE3S3MxT3pNUnliMmFCT1IwN3JFSm9nRmhzazFwTzRNQVJKQmlDWUI0VWZFWlRXaHFhZVFGcEYxdXg5K1NLWktwcUxhY0VwSEEyU2VpVS9OT1ppNEhiVzRkYUJyc3dGOG1iRnBLaTF4b1ljVVpxVXJSVU4xMy9tcnNaZTZzQ0I2MHFDVWtCVTN0WVlUa0xKaVBHMVpoa2oyQ2RPK3MrMGpTTHRURVVRR3NyZUhvVDJRbG9yVkx6YmFQUlhYM0RiNG5TUENwQnM3cklId2JQOWpTZ3g2bW9uR3R4NmMyYTRSL3hCMVlycnpNdktialVOSlpBdTlVb2gyazRLTWxUcitDQ1pxdElMbUFWUXRUekZQYnN0RlZHdkNDZlJEYmNYRDlYVi9XWC9WRXowMkdqY2Z1NUpJc24vNHRnR0xObTdwSnhxeUptZ1BuUUhJRkl2R3JZMHBVc21ScjdSUkRvRllSZkxVR2xvY2JUdU14Q2pFWTFtM2hEZXI0R05uakNoV3dIQ0thaEo4a2tibjZ2SDVJUWxucmZQaEdWL0g2Q1pvMHBaMXowU0VqcTdFaFJuMjR5dDYxM0U2QzVTdm9qWkxPUi9TeWpYS1Nha0xCUWEyMmUzMzhuOE5Ea1pkdGJIZmZRMHd5V3RlTUs4dnNENjNNMTRJTW8xYXdGZWlteElMNWVUL0ZNVjBpNmdlVmtidXY3R24xSGd1eENESk5YZGpGeStmVnY3NVBPVWlGWWZsME85amdiT1ZCb3ZSejZGU2hBT21qcG5FTXRXSWhiNEEwYlhVa3ZFY1lUY1NOTmJGOUdCUUliTzhtdjhjZmVSL1Fpa0ZtRHZEaGYzVkJZU1FPQ1ppTDdXYkJzS1VIZjFLUWFzYTRMdjlNNHdCVjJ3RnJOdVR2dDNaK0lRRXhGaDlhYWpVaElDNGhNMzhRN2liZTRTcFhBbUUyOXVFTGRvbkZqczc4V01wZy82bTdpZkhVUGJzODlkMkxoK2hJdkpvdkRBd0k5bDhlNlNZbVUzMkZNUjYvakdQMU5xVDBOckdyNk9aTldlT0ZjWWJvdWw2WGE4SytLbmtBbUl4bTlaemtYTVNORHE2TFZLcXBiUmxzcThiWXRLbjc3SDRqZ09EQk5PTUJDWG1ickh2dVY2aUhValVkSlhVZE5Qck51RFdCcUYrNXczRGpocElIRHQrMk1sNVIxREVnRHlka2xIWG5nL2JxT1JXSHpqYmtmS3kvVXFNRWh6ODBHTFg1OVRDQWZJMXhpTi9Tb2txdUQydGNZR3A3aFRPbThaeVpkK2lHU2pIQ0UzNk0zbWhPM3d5OXY4UkVFL3JybVUwRm9iaFlZMXRTM2lsT0xDcFZVTi9MQUQ3d3FLYTB6blVFejFKMnlSTmFGQjdRMmI4dkM4aEhIS3p1MnJxNE5VcVMxV1kvRTZiUllBcWx6VlFqcUlZdGUrd0Q5azhkb2tFcWtERnRoWmEzZnJ3Z1dHZTR4ZGJSVHYxYzIwU1dZV3FVNFIzU1FLRVpsQ3dOcVpvVGZKVDhuQVVQbE9uYURqRnlOdGpiclR1QTFsQ1dCelBFSDhMNURKYmJnYlVYektXTGV5VmtmQThaWVQyVFpTL1Rwa1YwSGdDMkl5MjRTMXZIVzZTNktaV0x5VTk1UkQ4R1gwQllRMkRPaGxDbURoSFRnanl4NmVOdTg2eGVkRnhYVG5LQlpvcGRUUkJ6YWZLdkRIeE43aEdyWVBsMGVyZjh0MFVwUzZpWW9SZmNDaEdJbHI3djFLd0p4QjJIMHBBc2NxTXVGWmNYRE54Rkg2Y0l0TXJDTjZCcVgwMklMeXczOS9jbGRLR083WGhXOWNlZWFVbTE1VEtZbUEzakxwbGF3Rmt0WlB3ejFCaWRNU0d4OUl1VnRNaXdvbXg5ZE04a0VnMmN2bU01QzZYdFZJRnNMNmdDMlJhblBENUlqRldxYUVDWXJlbm1yaFp3dTZxb0pxNkpkZDdYdW42R3JuR2k4U0czNHV1dHlMV0lseERaODNCblV6RXpTbzFkZUhXVTBVUUhUWDQyL2VJakNDSmNuNWZLNzZtaUJyVHkrR1BxWHRwTWwrcXpKM3M2OWUvVVhZT2hSSVZqRlJLNVdqVXd4KzN1V2lrWGVrWmQzU203MUJSQ2tWL0FNZ0VodFQwaWg1dHB3dFVSU3FmMkhiNlNsckhsVUZ2WjRsays5RmcwMUFDWnZ5Y2paNXVySk5GWmUwOUtXejJ5Ym11bm5pRi9QOTBjTnM5Z1U1WmN2NXlVYVIvMVZQd1F1Q3ZhVHhlTFVXKzBxRUlNd1dDNGlPR0w2MWJUT0FQNzREbUEwcVJ1TlRVTEJRaXNkOEFOaGRoOXN5VFpUa2ZCWnJKakRaRmQ5bGF1ZnpkbTdMTmdscDViZGxLRU1GSnBEQkMzazhUZzNkTUNvT3BMdzFHcDA2YjgzSVNJQ1M5ZUN6eE1SZU43WXYzYVR0REZUSWJXSWlXMjBqNmJ5VnlkNEtSdE5rVXQwb2Y1VllueTYyTjlUd0RsOEJkWmwvcGpUVytRVGhYdGdVTnlKZ2hXdno5a3NNOFUxWFlyNWliOEJleVpVTEZTMVBJTnlIMnd2OVk4Ry9CdmIvYk1PYWtCSE0rVnE1aWFMeTNiZW16cEg3Z3lLdFUvbXJ1MldydE5waXpjdll0ZHNtaHpoZDV5QXFGbVhveGxQQnQyaXM4U1dtR1R0NUh3by9XVEJJUEdJR21ySjB3L3M4Q1pRbGxFRFVRV0k5WFMzUE5vbENlMVoyNEp1RUdZYktDQVA2TjBSQkx5TTl2OEhSSXh0SGhVNzd0cjJRWkxjT2Z5amptRkxVZk9Xelk1eWpxSGtRZzBucHQwUm9MSzhrRlgxRXRzQ3JKUUdnbmdmRnV4YWRDeU9jblk3UHkvekk1dmxjYndTR01yYU5vQ1ZXTmE5K1NhUjZtV0RNeUE5UC9mbVp0bGRUTEZ1MlJTVzllY1FLL29PeHRQa2RPSmh0RW5xaGdlTk9jZFhQQ3E5OG91dm9FNDRCdTdDTjR6b3BYR2lpaGpuK0U4OUhNNGJMcDA2SjYwZlpxVnFlNVIyZWVpbWF1UGNXVVA2ajlhbHN5UWw1MTdDK0MzcjNycWhsR2plQkxiVkw4aEhSZThjUUpKUHJJVmE2YTRQODA4TkJTY2xJWGlpeVBGaFFXc3JNRmRLVXE4YUJYSnJRMUNYenBIODN0dm9IRnBvMUcxKzNOT2UySGtpK1N4c3djTEJUVHIwMmwxUGJNRERoOUlraXhrM05tWUZBQ1RUQnl0SFI2Y2tQTU0xQVltTERxZEtEK2E2THd5aHBGSy9QTENHK3VXNkRXWmg1c0JCWEZaZ3BqK2svdTVkTTF2cWEvd3Z5cXVRSTFZMWlzTXBjRUM4RC9LMDYzdCt3YWJnbmpFZ3ZMdW9SalY2N09YeU9nRlJTWkM5NFVsbnR0dmlKYllBaXVTZ01DaWRwbW5BOXp1TzdmTXhZUmFhM25ZRDhFb0VFZTNzNUdXL3M3bmlzS3oxMExpY2g3ZTdJM0lrY0MydHRQYWVUNDBiYVZDaG5tSE5VZFBLRjlsZjY1SjhmcC96YkZRajcrZUFSSVlvcmdYWVc4VjlwMUkrZ0pIU0xkK0pQTVFKZWNjNWlNNHNGeWJUWHMvR2hDeFdYdXpKd3ltK3ZlSFlQc205M1dTZnpiVmpUeFR4ejJpTzRwb0p1cEFNekRZK1Nac08waTRJd2ljQ0g4SXEyVFZmdzNwc05yZDZnOERzLy9XYUNnMnFxeVJyS2REd1p0aU1ObzZla2JrR1B2ZWduYXpUa0JUYWRnc04wVllBOFdpNmhZTkQ0WDVmN1hVL21YdHRFTVF4eExaaHo1SlBDSTJrS2dJRlBZYjYwV2pIMDRaTTZ4Q0dMdVBqRTZVU0tDbGJBYmZIenZFc0xVckx0MDlIWGw3RUZpTmxCSm9ydVZMZmN0bnNDbWdYaTB6dFpHR2lBNHE4MSsya1BlZXV5NDVWRWtrUktMc3JZOEFjYTBtcm1NSllJK0EyVy9EY0tIU2lCQ0ZicWsxOXNqcUNQV2ptTmhlNUZ6NEEwcmM0MGpwUXl6ZzREVzVTUERudzYyYlZKc2ZyNFJyWWZNRXBKcDI0bW9uQWpObG05OWJGS1hkUHdjd0pRdDNJS3lZdGhTbXpGODYzeHJDSTFVaUtxTnFYN2tlOFljVGxVN080c0NNdGhpR0IzL0VzbFRVdUJYQldLNkdjazFobVJwT3VtTVF2Rk1kTmV3UXNNVFkyWDNOOUdOc2I2Y0VucE50ZFVvNjBPNUV6YjFGaTBHTFMyMXRSSVRpRXlvTmRqNWJ4WGt2L0o2amJvS0pMVWw0L2xYRkFuaS9BUEtvYWxBeUlEbTlMeDd1QytBcExVYU53U0RzOThXVTAxNXZnQ1M4aGRsOE9CNEYvV3NqTDZHNlZXOEVtRUw0M21MbDdEVGNOWVFaOE5vSlpJeTcvbTJuQVFod1VjZWYzb2IwS3dmdGdPdU9FcDlFQ1FrMENJSkhDSDd1UGFuMFdLTFVYSittbnZwOHpXL0Y1Tm9NNFYrdVZGMXZpMXAwYUxuUHlaMlZNY2hWcEJ4ZEVET0lPV1Jlb0lMeEpiZk5tSWlvYlpqWGxsWjlxWDNPdEtqb3JZWDB6VTlkUVJ1MmFaa2FNaFR1RzZOaHJQOVJTOXZEeHlBWG9XMlBJUFpGSmNycDR6V2t1dTN4QUJxcWV0UEZ1ZWcrRWp4UEZLVFNRNjdhVHRsY0l6Z1B5S3F1QlRYOFBPU2R3eWVmeWhzdHdNTStkQlhlOXRCK1l0YlB2UE1CV09HU0ZKWDlWek80OFFSVUNERFF3R1lUbGtuV3haeVhvaTRnVVZwUXprSXBybTFOdjh6dGRGYmUzM01PaEZIaU5FaDFwMjhZNzNxeDhLYU5pZ1JtY2RkL1pWckFxZGtVWkNIQlloUVkvOUFWT3BPcEZLYTR1TVZXUmw3aFUxbE8vOThRc2I3Ulk2eHowZlNvMHpzTldaMElxUWt6ZGg2RXYwZHZva3RiVUlPWWFsYm0zN0xVblQxUDBSZG9wamgwZjdBd28vM29aWTNUaUNHTkp3RHlGTEZwZGk3U3h0MzFsUWtoSDBxaGx6SHIySDBQUWp0dEZFaTBXcTlLaW9ET1BKWTFJUjVUSjBkSjU0NDhUUTdOam5Wa043SVhRZzBEU0V1Q21kODNLRUxNQ2hFUTFxSnJXL0NCWkRoTFhJQlJLakNxbkkzVkQ5R0Y3cG41cXNoU3hBWFJhQmMraURwOU1sYlJiUnExa1ZneU8yNzJOMEhpNml1Y1lvMVpGd3NnTlNNYlpQNmZ0SVpTTytEdGx1V2E0b3pYL1AwTVd5TEFzbDVJWmNoT1JNYWtUanUzejhCdWZPL2hTMlFUUExVYi9oSFM5UWVLM0xsS1VMeW1FZEg2cE5BdlU1MitIeHZtU1VYZkFiM2grOTJUeE5VL0hsdFF5NkZuTkJQbi85Sjc1Y1NqbTRROS9VOWppcGtTUTVnMERENGhHZG5HdjI5T3FRUVk3eis0UVN3alJpZnNONUY1c1dHcnVsQnd5N00raHdsQ2xlY0lLTWF1SDl5UGsrUWZQQkV1NUJXNHNpNWdPVTRWc0tRMXV1YytBeUNjazUxQkd6c0RxNmZPbDdoYmJjV2xSOWg1c0U0U0FPZTFiTm8zN0lQa0hnYzFMK1pjTzZ2dCsyYVgxeEIrRjlYUE1OOEdPekMxeHlDb21DRWU2OTJUMklIdVlsU0F4QWpQMVVSeUFMNC9HQzJzTDgrUHAvQm5udTlhaUdWV2p6WFJFR0FwKzZGTjhEQ3hBb3UvTG0xcjRCemcza0c1U2dYcGdKQmU0d1hLM1NuRFdKaE4yV25Nc0NsMEFKc3lMeVgwUmJualA1dk5IdEVuQ2ZJTGRibkhLQTBhQi9GS29FcWV0NlZBWXduRUFRUFV6ZTQwV0k2SWRFcnJoNXRleXZDQnd1R2p3YzYxZzJOTDBnVnpXSG9GU09YSTlhV3lCMFljNmFuYjZUWGF6d2pGeEVrSGdKZVdVQVlLYmhzT1lMMFZ6dDZqYzZOTFIwYW5KYVRueEUrT0Q1WU4rNDJhQUd4WFdVQkx4Wk5uODZiQ1ZjVFF6L0FZWnhsUi9wTGMxbEZvemNGYnk0QTVQVDV4VFg1TlU2WFFNajhlMVIvVGI3YlAya3lXYUVpNy9BRHh6aVU5UW82ZFYzMzRaUW0vekdvcjdmSURFRmFiMEJuNFR1YTI3KzJYdWpUckdxSFBnWlBUaTRZMDdsR1R5UXNFeGk5cXRpUUxhUCtMdmxMSzlKR3ltUjZ0SUNQTE93MGd6SEFieUNTbWJnZjVmTnNhRE50b2c0QjdoM2hjVjhLdHFWN2R3NXczSXFjOTJoQk5FUDBPcVFpZEFWbTdkSWZPSG1zRmpHaWZseUdLUXdLVFhsdXU0YzRBd0RBR2QyTm05SXpGakN5Z0VQREpiaXRPaWpxN0JRUDBVYXRCWVI2b25NMnZZNUw3bzA0Z093MVo2Y3RUVkhrSDZ0N2ZGeGxCZm51d0xMY1llZTZLYWVJZ2dybW4rYzljMGszZ05IckRKV0dmYnpXTXJ2V3l2WnBpNXU3UjB2TVVaeWt2VUh2dEp2NG9TZSt2MXFCMWl6QTRTSHYyQXpHOXM4bFVrYnByZEJyUGpxUnI2QW5mZHpmb2NyK3pLRDYvSERQUTBDaHdzZm1rQzA2WmtKT2VzQzlnWEVLaFRRU3RWWmJiS3ZGcUhjNm9mdzZ4Z0dYWHRocVUycGZiMlRiTWJLb0lPNGp2TUU3TStCN3EreFh2YVg4OHBSN0NQRUx1cE5oTldFa05BaUZlckh5ZkpEcWZBQzRZUG84cFFMeDhhR09jczJRc2ZDSmR0WTN6ZEFjVTA0c0FPb093QWxKcGFxSFVSdFhuNjZwR0VObS9HQ0lTTmFnTWxXdzc3QjRSL1dOLzFCYVFtSUl1K1NyNEYreGFwaHFKMW1pNVcvdERMVVZQZTk2NXdxMEd0TXpOcFI5TTNZK0JjYUhUd0N5Tm5XM3dqUFhLV05Oa0l4dnhxVkVKaW81V25MVmhxV25mRUJnYVFsQXJIUHllQXZ1MnJKS3B2elVBQWp0ZE9CTXpOTHk3K29uZW0yT0pjTEhXOUFsbnVKZVp2R0s5Mlp6R2toQzBENE5Ca0htY0hXKzdFbFZrMHZPN09aNmZubXBFYzBiUjEzMWc4TTc4K2dBYTBaQ3dyLzZpeDJpMTBKV0EyNkFWOGVaODhvT21FYnVsR0ZXaWdHcWhIMkNCS0prR2dhQzV1WW56YTczSFB5UEZQYjNyWXpZTlE4Q3FNWWRyY3NDWXFxRGZTUkkzV0dHUmFXa0E1d2FsbXd0NDNWZ0ZrUVZLallZdVYwangzR0U3OHdXa1EzMElsWGZZUFBwRGlIZ2RVa0lsazJ4aldzbTVTZUZtVmsvRTd4VG5BNFVEVnFacWpZZXlheEdaMUd2dXlXMVJGdTJkdk9xSWQ0ZFpiTUV2QjFnR2txWUtyL2sxemIyTWJkZHl2d05VTWMyeXNReVJ1VzRpQll6UHBsMWQ4ZnJlSWZYRURGY05QYW5DMERrMVZzZWUxakdua0xqRWJFTU1DNDZMRFg4RkFveU9Fb1FKejVnWnV1R0N5cjgxRG5hMlcrN0Z6Zmp5Uy9EWlVubk12ODYrSE1hckc4MU96Ym9EL25uOXRRWmtsbGNVNWVpcytTRGJZRURYYjNRRjFuYlMydmJPdW9zdURQVGRoSVJGQld0SndNSmdGKzlJZ0lTVWg5WE53aWNjOUhHNk9MUFl0NUtNM1RmSHd2SkhneHdtM01EUzlRYjBZeWxYcWtrZ3BGM2d3MUE1ekhBaXVEY0Q1WVVFanJnUzB6N2U5bERWRmkxMUxiVUhZSnp3Q3BXbUVPMERKejJtZjRwd0owVi9nYmVpUk5YQmlDc3JDSWJuSnprVzBkUFk5blJKNXNHUmlDa2h2dHc5eVE2RHVobjhmbUNxZ0hoK3Z2RUhtSW56cGY2REdnVm9yWHlrSE5aTzdJSzBZbUFPWGhMWDV6YnVPTkYwdUh4cC93OGxPa3FpVUV4TkxTa1NYOWVnaDdzODAzbUorNElla3Y4bEpmTUZtcjZLRXFhWjBXYkp6dzdTZU1RdWJSZDFQa3JzKzQvRWU4WjJGdjVvaDlnczEvdE1ocVloMmNYeXVJcDRPWGt3WkZsR0lCaTFoeHV1aFBER0lMOUV0OXZpK0gwbDU4N0ZmVmVkZ1dHK0ZKREZMM1ZPZ25wZWs3WlkrSXVPY2w2dXBwRTZDTHA4MzdsQXh4c1hJOTdENTFsRWhrdjk2YmpBZno0aG9HM0haTFpUNnRjdUNDRVZRL2kzdElqYk1aQ3RIL0NyK0syUytETTlzMWFmS0dsNmFzZ3JzQzZlQVRiMGVuakJYeGVuZWpsbjV1a3h6VDRrOWVlVUhwVDRmd3hhWXRoRS85OHhuMDZCRXZKLzJpRGUveHRiRG85aU1iZzBzei9SSHVRSUd2d2ErblVFUk9yZWpCSmU5V0NIOWZTNm4vYUdWZTIyRjROU2tyZ0xYM1FsYURhcHA2Y3o1TWhJTGs2ZE9EOVdoZHZ2SXpkeWRBY3BHbjE0VUFvdTFBWHlzNXU4TUIvYlYycnFVck54cHVuRXlWNS9Yd3MwYWluYmJjdWE0UGVac25yVk11UDZ5Q0V2TGIyRk9tQ205NnNzUkhnSjZzanVaZG1kdndaMWpBenNiczFCYkFJaSszdld2OVFDdllyVkQ1QWlua1dtUzNpS2xLUVhsQWV0eXdRRm9QUjM2dWdmTXJSZ1dpVnFaNUNObjZsdzB6WFlpUVZCS3NIQjJTWjNJa2YyYjRIOUFGYjdyanBaSStJR0YxMVdGU2MxOUw2dHFEK3dEenpFWERBK0Nma3dLMlVUWUtBZkpaSW9GMGtaQWdvb2ZjMGZqS3loS0NaNTNrZVpxV3kyMUtzNHVvaTBEQlhPREpjNFlkVzl4UGVQQzNCaGVHaGE5L1hXYnk1aVVkaWNTdVZPY0RHdDY5RVBUYytMSFZWcldzRGN6T0ZwalY4TGU5YzlqVTk4bzBCZzZRSW1paStVdzZ4aW9IYXV6MUJmajJRL1A2SFJZTmxZa05MK2F3cGdzd3Y3SjV2MEgvcnY2dUtETDNhTnhVWU1QUFFMSERRaTR6cWs1b0Q0aDg3cHZUV2VGc2dPV2h4bjhxTFVucDg0emUzKzdocDRKWFFsOGtMSzYvQysvaGx2Wk1LV0t0dkl1V3RHTTU0dmxvRXY1TFpLN1JaS1Nod2VyL3ZxQXBxNUUrenkvelRUclc2TDJtdWE3d3FzeVgxUENpNXpEQzZ0TVpCOVFpY2VvYmN3QzZmMzZKT2ExZGk0ZlpGYjhQNmlPRlBXMzM5cUU4bTZxK2RqaVphYXdyWWZZSFM0NmJYL0ZqTGY3SGZaSllySEZiL0ovallVY0xwZnlsWFBoS3lMdUVIMGJPaXVQSzdVT3Y2cDRMNHZGeVpYSExma1c0QzBhdEpjWmJKdlluTGFaTitLS0h5bzE4TWQrZk9HTXJkeE4xdUJNR3VYZ0J4b092bjF3TVUzdElrRFRCUk8zN0sxS0c3bU42VDJOREk1REtUeGNmTGRrNFBPM0d4NHlkcWRjUTFLREZoRis5MFVINzRTYS9IcjhSY1h2cjg2YlR6dGxmN0dhK2YySTN5cFdNSmhhdnEzS1dOWVNGamkyZ1QyU3VXOXZ2d3NOZE5zdmlWczdIajVlS1B0bEc2RUtHMThqbGxXaFhhM0lsZDlxcHd4bzl5N01vcE0wVjFydmxYQUk4ZENLM3d5ZGQ2dDhCaE1pVTdzcFR3NVJZUzF6MmU2QVNLOXJzK1BEMmRIcDViL3Bpdm5nNXFvL014TFpZc09lNElwNkhiM3VtNWRJdkxad0lhSUxadHU0aWMxeThJNlBNSmgzbVMwL1hjMkJ4UnY0TXhBY1ZJNDc4Snp5cytqcTlMNE1LcFM0enZKS3E5R2ZkaS9PUlM5T1hQdHFFdENKSXl6dEY5bG00Snc1aEJMcUhRWUM5NStKZUhHVHRtMVc3eWtGY2poQ0Vuc2pKWTgybm1ONitaYW9vWDRTbkcxMlQ4VWFuV1lpbjVHT0ZOMGJlTnB5NVRLc1F5QWM1UWs4QUlsWUJzR2lMdG16SDc3NWxXTTBBeTZTYXRwV2FONHd5ZlhKeU1ONHM5RDgxc3NwaXIvV3Q5QTZnSU55ay9KaVJTU2FKaEd0SmdOQVdBSGo1d0ZiVUNoT0RiV3pSUlJzNzRmamhCbE9yMDdwNVpjbVBRdXVFVE1GTjJSN3U5azVENk1OQXJ6dFV4QVo2WEpKQkh1RjZWUmplZjc3ZS8zaUZLU2RSRUN5MEs4NjZSbFVERTU5ZnFZUDREdmxCMFFMRE80UEpGYnBJQXFKVjhjMXpPUDAyYkExQ1JYTm9vQTVyeFlFblhpYVZTMVhpbGVydmtORGQzTXd0SU5pck5JNG9WaG5nTWVqZ0JOeTVaUkQrVXRrN3FQSlk0by94YnFWYnVucFNVRmhZM090Q0d4TjF5T3NNRUF2U3lSTEJJVHYxNW5CcDZPNEc4NThoTVNHbTFSVWhWcXpDbmNDTE9ZQ3U3d2EzbUpvWS91R25rWTdzYmdPbktDUS9vTEs5SXA4dCtzclV1VitLblFORTl1VTRFRTY1Nyt3NlR6ak9pSUthQ0FDZ2VOaHllWncxTWlLS2NBTnlvWUpUVUEvSS94dmU0cmU0ME5CeVBCSXhQbFZhaHFWMStXK3VEeWNzQW9WSWw0WXRUQmlDSWxYQlhNOWdpZHVhMjNXN2dFekNCQkRRVkxaWndwWHE0UXJQbHpMbHhUMFV5ZE9hZEI1QzRYU2JpNWVsL3pLY3VYcGEyTlNFeHlId2I0bnArSmxqL0JaSkZNMjVadzQ0U0V1RFlRMDFReitEL1M0L1dyZWVxNlBLQ0l6dEZ2K3BUa09sa3N1aS9ad2RpaUJadzlOS3lLSWZpZjJzM21iVkE0QjJ2c2NmQVE0eUZnNXdmdjUvajhyc2hRaUJSNTd1bGttbm5KOTN2VzE4bmtTMGpyZlhqWmtJVGlFT2lzVVhYU3YwWVRHbzgyL1JpbU9YZFNiOEJTRzhDcndZVTlLZGhrQVdkMGZkTDlzN2pZY3FmTk5CZFBORmREZ1JzeS9RMEFXQXhLWmNtWGhDbGU3b2oxSU5yZjd6THcyNldIVnAxdWxLeGRuOWFWMURHd2JOMzlQZnZQRUtVM1lmZlROMFNSWkJ1V0x0eUJPNVpPUTVmQzdWUWVCUklqUTJac0N5U2FabDBaUVlVeExwZTZac1d2QVdqd2tKempaRFhBOW5XejZBcFFnS0twL2ZobE80cVE1R0J3K2llRUdQMkVEZWtVVURTdTA5WXhjZ0drOWZ1K0RaZUluaVE1VWt6L0xLaFhrL3VCd0ZHZVhMOXVpd2tNVzJsRSt5Mk1kYzFNK1RhdVpRblpjNlpQclhubHZmUTBxVkZpTzNSeUxJTzRZYTJsYWNOUW1BNmlDTXJTV2F4aWdsOEtVZ0x6eWJoTXRtR2x3RUtKM2pNV3NtNldkejBVR0tPOHFLZjFtNEsrLzRQQ3VoQWxSbWJ2Y0xlN2dTamZhT3FZb1FzQUpHVURFUWl3Z1Q3MWUrZ2pmS3ROcElOM1BIcU1BazM4SGszS21yY3FxNS9rL29JeG41Y0k2aWh4RnEzYkZBZEpCMlM0VzJiU2RTeXNCZHhkUXg4VlFVM0xvVzBTbTErdEdKNWtjRU5yTlJzQVVxelUrRWxLNFJxRllpWGhTQnhhUVE4WW9VcmpyalhhNjA0Zy9mdVNuT0NHT2N0MTJqZlhObERIOFdnV3NjZWd0WW5ZS2tTNkxjcWkyWG1MQzNDZ29OWitxV3dkdDFpRGJYdW1zMzM0V3JyZGJBeVF1VDhEQkx1YStCSjhqd0ovZ2NFZXBsRytpNUNrNitGTFlTSGdDYkMveFNHcWtYRTlwQ1VkUGJGUjM1aExDbkNDTlJMYWZBRTl5a2VNN1pOYmo2bmQ0QVNXOU5XUFV2ZlVYelJCbEdObDFESVV0dlJKelIzTzFtZjJqVkJRNmpvNXpBL25OdEtpZklVUS9SOU14Q1JROHpQR1lFb2h4VWZWejh1RHBQcGxLZFpVVERldWJDS21vcGtVbU5saUNOUFpEWisvdjVGR003V2JTMlU5VkJCUkY5WUtHS0sxay8xa2ZZV2ZJTlJpSkZoYlNxOWxMSzhqdDZ3QnRZUi95OVhTWDB3bW5GRytvRzkwNFFmSnBWaEFCaGVWSmhaQzdHbTJza1E3WlJ1U1doajhkM2tuRFZpei9GajRPbzRpM25ZaXlFWTRnUG1ZMmlRN2JPVUlnby9HNERITG51K0NRYTBwdjNJYUxIUlYrZ3FyUjJMbG9XakxUbTBsV0d0Vy92NFk5NndQR0s1V1dEMFpxalJwMDZtbElranVtdmhoZkxIanZPaUl0c2VneXVWcjF4RHFYait6L0JId2hCUnB3RGF4YkkyQTdCdlAxQnIwQWNTbXJhZ1VLWlpPY0c3T2wxUDBFM201a1R3c2ZGSTRac3VVZTFZczUxblJ0cVNPVU9lNFhvU2hmM2hjS25FR3ZDdm14UFRQdGxkNGRaK2RDWDU4MlRoQUJnekpTWEtIYndQTStCU053Y0pTUjREMlJldFl6M2d6Vkh3M0dub3E4MUo1b2g2eUgvaVF5T0ZHQ1lqWHIwR1ZoVytoYmdiNzVwWUI5Wm1XZlY0Z3R2SlFFeEhoMWVuY2t5VUhPUzY5L0lxSlExTmlOKzA4K3BxdGVmdzlNWDd3K05RZ2pMMTBVODhHYVh0OU1uUGIvZWdSckVnY1JRckxFaWxjdldTN09FNjhVSlRFTXBjSXBDaFZTT290eFhDc09CMktaTDVOQ0xRZmk1NUpVYmxPNUZ5dlZuS0NMRklvL0syZkZPcnJMWExodlJkdG5oSHZhUExIRndYNnJ2MWZSd3RuZmxneEZlSVpBMW9jdkU3bm15ckRldE5zVzZRMTFWdXd0Y2U2U3pyRmNGekhRaU1DQWVRUTFIUnFieHhiQmVGUmV5eTF5RmdRWDg3SmZOS0poNXROZWNNYm0zZ3kzSkhKeGlNcHFaZ0crelhVRHJIQ3Z4eDdhcmxOT2FJZzhzZGw3NFdnMnBRclFuZGg2Q3lqR3NZdFNPdGZOMkVJQWlnL2N1MWxSb2pZMGhtSVFiUHJJZ0xLQzN6UUw3ZjBrRWpmeWZwd1cxL0ZBU0t6UlVCVC9uNTloWEhlOWR0cFF4QWtTMzRScHhqUS80K09hVm1IUWZqdG9WcE12S1JoUHBBbk9hdVpZdy9LT2xWcHZtUWVMNHhhcWlSVy8rQjdIK0phQkFEYmwxbmpJRUlZQ0pCL05IdW9hWDR5cUlPek9taXBXWWJwNnNKWVA4bWg3VEFpdXdqTDFYbm9RN3piN1BZQUpTOUNaMm5COWMreTVZQk9xVE9JZjZkMjNoQUhYbmZnYkVwd3ZBdnBUcEdrTFFNUWl3Y1VEQ1R5a3hIZk5uZk1CYWdNL2Q2YTZJSWxGUE1Wc0t5U2NzaHVNOStXeFQxakx6b013a3JvUGFUL2U0TVdsY3dOcTJ1UE1tODFaM1BrNGdjN0h5UFluQURscmd0NVYvcllhY3ZMWmtVQmFSeE0xMnNpQXRVaGo2SHJJei9NR2s5TGZqaXFITzl1dEU3THQwS1J3NVl2T0FiRWVVOFBwdm1YK1hScml1TW9ZdXkrUlBHbEI4dmNLWDlxTUkyMGxqeHBiWW95aFdaeVJ3a3NUNGFGMWVwQkV2MWVDOWtabXB5d2pOdGZ1NWkzNVJIeEcxenhRWElkbS9ZV21EVmF3T2lCMzkrbk5LM2kxQllrMTVkUDRvOTk2eUlzL0N5QXlxYUVGTUErMjBOZWJwNit0Mk9xdU9KY2Fwc1gycU9yTFp2ME15RDhabytmTnBXTTR4c0k4UE9wUDJsVHZUV29CU2VXNytxbWZ1Y1dkeXZsY1NOYU4veVdjUkQwSUdaY2NFNlhuNVNnbTVmaFlzamlpQ2xTYXppQ1dtaXZFNlJRV3hWRzgvQ1R3MXhVc2duN0VTaExIUmRXcmVqdldVVjdUTEh5bFBSUFpSTCtMNVJRSTloTVpHVlVDelBneGRKOGRNK3VzWDQxRkdrNE5SeXkzTnR5dE1oL3V2MzAwQUM4WXNEZG9WaGkrM0tBb3lrS3VweW4yQTR4ejM5dExXS3NjQTRlMUN5QjVnQ2VsSVc2Zm9aak1LZWNJNjNVWk13YjBYc0h1UGlKWmpXeUU0aXQrWmpjVkMyR09ZQ1liVlc3akhXWFVES1ViVTZzazBsS2luckdDYUlyNzI0c2RpZ3dPeWVzS25DNG5hdnFHVllGWU9GM0RGVUhrQXg0UnlrVW50WnF1RS94VXh3L0ttT3ZhN3pHUnR1UG5mbnljcUFQaDdzSGVVTWVraS9zRUFGWTFZaGhMdnV2dHVkbjFSTW56b2NGK3RZSjJaZ2JCb2RGbHkzWi94L0xOaDR0WDlHYWpjZEVPQ05JTnRXTFNXODZoUzRIRE1Bb002ZjlvT0pzdVFEeXhDaVNXcEgxTG83UDlUSkExa21ncHpaRXU4YXhWQTBBVUdXZXp0ZUlFeUFKOFlvQVNFZ0N6TGszaEwvTXpnUDNnZXoxWHZhbWcvakU2aUoyZ1l0T3FxQkxuTlVDeTVYWU5BUHBpejkvd0xsUVZsNXFGU0NDenJydDZJNXFscExrTTZacFQ5WTBvUTRncThEalh3R0pwblk3VzV1bzVJV0tLcitxZ3ltUlg5UjcxNzN6RmUwM3ZERm4vRXJES3pTN1hYSWthWkxmS0d3bGwrNHlGUTFON01VV1BOYnZDYnZhbTZRM2wzemt6MVpQbEtWSGFGVTRHQ1RRaFhOYnBMY0V6T0Q3RnJJbFdzblcvaWJ1eW1qQnBaUU1mTEJsQis2YkRQVFphalJRdUY4cnBid21OM0Jaei9pekdHYy9BVHliSlFCZ2g2UkxUMm1jSGhqY1d1U3pkT2ZieXl2UVJweXdPZzRPMENBdXh4ckRMR0VCZTJ4bHA1WkVBaWxQckV5aUdzZUNORzMwTERlRGdEbkNJNnRIeUVzdkFLMkFtenRhaVlzWTJBUk54Ri9acndYS3FiNVB0bitlSFZycFdLN3JRU1lKc1pseU00SjluTjR4VTVjNy9NcGxUcFpud0VrRWVCTGpNMXZQNS9TTGczOFE5S2lJd3V5dnQ2dzBTcm9IdEJRTnVyS3V0VkFmeUZVZForNU1XSi9YQUIvMEZsZEkyZzRrZ0V2VXRsVVQzOFVReGVxdHVRaHJuNDF6RnBQeDF6bkx4RDNOMHExbElGVkdzbnkveUNFR2M3dWVIZFhZSGZxcU1GQ2dscHlJREFEOURpbHVzeHZpNS9aTnM3L1VnZkV4SEZveHJKeVl3NHZGRVFGdXc0UGJkTXpVWkUxeTZKT2RyZHlwWXdYOXE3QldGb1RWYWhWSno4UTRIN2JJWldTS3JYZERQdzhxVW01NklZNDNUcm53WnU5VmFLWmptTGR4STNmZDBvaHFIY2pid1VxajdEMkQ3ckUzVmUyaU80aWVta3pOQ0l2Tlo5RUdVek9mQk42akowa1J3OXdwdTlDcmVQcDN6a3NacDVEYmR1dUlkRGVUei93cTVXY2R0WDR4VWQ5YmxGUWpyT2c0b1JiRVFxakhBdzJkZ1VXUkgyaTREQXVpU2V1aHAzNE1HVEtoTVRYT0tFSHRFZ3IrQ1NydEJqb3krcUJpZXZzTkxaaVdtQWVVUmEwayt0eVN0NndnTUluV1hiZG4zRXZURDhzaEhZUTYyeWYyLzljdG5qc29UNzA5dVl0QnJOYjFBdVFQZ2JlOTlRK2JrOEI5MWErS09LZFZZQ2p2a21MYzUrYkdmY3FlbDgwNWIvUFlLdWpyTzVYcmN3Vnc3MzZiYXNTcWNzTy9nOGNuNVNBcEs0M0oyeFVtclF4Mlg2L2NMbkdhZUdTMEdDSzJ6V3hhQUJWd0N4Q2xQWVVsVmZZMlQzTHd4c1lSejJscm9wUThDN045SEE5dVZGMFJtbjRIbjZ0RjFBMFAwS0U1a2sxcHpPUUtCcXkrb2pnVGkyQ3cyWUFVaTgva2ZnbGpoeDMyT1gzbFN6TlRTcGJDWXo0VzR3Q1dndThXZll0ZkFudTdvR2I3dW1jYnlnbkJQZ1Z4cCtINU9zQkViYnFuMkZQdTlidnljZXNFWEwzNUZZY0N1a3VoU1plTEpLRFQvaHVCanJveStjRjZQeitSTzU4dUFJV25hUE5YRlhvcm55Ri9LdHFzVkJ3REJibjhIR2tIcVpaZHlsUTNCS1AyUzYxK1VPSUNpclhKNFpxcHZqbnJxbHIvQTN2UGlUUm1OMjRLZG1vd0tyYTZBeCtTUVRyUGNKMzZkeTdDQkR2RmY5b3hhWm91Z0RaRUFWUksrdjFYYjdUbUhtZlFtMVkwZnl3WlBROEoxSEVLYjhIVlZCelZ4dXllMXdzRTErSkxBOGxQekQxNjM1VWdkZGZkMlN6RUhmNWs1VUdIS2JaYjRlS3ZlME5WQVZtV25VR0FzMUZmVFZvOWlOZFMzOUcxd0NHUlN3VjdFY0dQdzJuYlpObGtObWRzdlhqVDlLWTNxeTFJSHViK0JpRysyNkhqdytON2s0RVJGTzhEZEx4TXQ5bG0yTnpNSTVIc1RkYk1zdW1sNDVES1pMOTA1elBQWG1WSWRKUW9UNEcwbUFmanAraGo4MFRqQmlZVUpoSWhWMzVmbFl1azZPdXFNMUpOYmVadkt6dklka2RQblFaYkFRcG9WSkg2VkZOdXBLbFZnWkFXaTExU2R6bXEvVFBVV1dWYlQvYUxNZ0dPRk9KSXI1SWVNb0VjZ0hnTXJOcWVkL01BaU0yZEJTOEFLZndubjNlR2xFaWN5ZnQxL0JmbE9FZEoxQkh6VVJidmZWZVRrWk14Zkh5cW1NT0lqNnBBMVBvOS9TdkdLWnlHMmQvbGRsN0hRZ2xOQTZVd0J0MXFBNGVqL0dTZnZhUnU3RTlYMFllendCSDF5VU5sR3BsWlQzbEZycmZhbDIzdEtOd0NXUmNxYzR2S2RCZTNtbTh4czU2Y2gzbWNWT1pBKzgwZndoaWhmTlcxOGJndGt6cmdVellIRzRBeDlxbmxka1I1NWNSUDN6SkxTTXdWdFNOaTlocUxpelRnZ0dFdGVMY29ucnpmeE4xQk41V0dqNWw3TVFpVFZNdFR6YmFYbkJ6WExTV0RBUnQrSjJ0cEVneGpNZ0lpdXJlSHRZc2RWN2h2bDFqcjZNb1NueVNpRWNSUmd4aStkTHZtYk5LV3BKcnJzZ2N2R2pnS2RPZVptRTJGb3YvRWZuSWVPTTYzM2ZTUUMyYktBemU3THJmSXo0M3E2YTZFTlR5NFNPYWdqbzFGTlVkaHJpMDRtTlhDME10NHlReno2NHNHZFJxSit6SnUrRVUvdmpZWVJlWmtLVHI3bDVqc2ZMR21UNlVWbHpKRTQ0STMrZndpeXBXMG45bmxIc013UTMyeTQvZnFNT1ZNSDlra0xMZVBmSEJQVHFTaGdrczQ5WUtDVnZGSUxaYjlKREZYZVlXTjRIL0ZlOUtuZnNtSlZlNmRMbkdYb3k1VVMzaVhtTzhVeTFlSjhLT29BUGVEejR0b1M3dmFKNmdadWhsREpKRXoyZ2pBQzBoYnpjMHArMlVtMmpFTStrbklSV1pqK01WSlp6R2lxMmxySDRVeUhOaE1oaDd5eFlUYi9jeUd0eVVZQTIxTVF0OU1oMkNwOVVsaXlDMlE5ZlZLUzhZZkthYTQxdHc3WUJXaEhqNXNMT0lRdndNNnZXbVh3ZVNQMUNwMno4b2M3MXc4MTFncHNmMUJzSkl6UnlCR2NmYmVoRVkrTGVNeWFZSzR6Q2pPUG8wcktyM0ljTXkyaG1ldENIUnNGUVNuSTY3R3UrK3hZZDFQYllOT0hRM1FOaWRrK01MQlBGdzFTSW02RnA1di84WURCMEpwMG1UVTNmWTh3Zk9QZnZGTWN3S3Q2b3dBbGFLaGVXQ2xwN2VZRDFYY09wYTJXbE52R0VWL3hxRXMrKzZLOFlYSWdZeUQwb0IwUUxEalEzVkZqWE0rUFRxQ0RWL3ZtanJmbWtsYjgxRk83U1BKSHRWd3UrbWt2Q04vdFdiOU5lL1h1QklUN2VIck9PbjNzK1BnVXFWRDRteWRZb3MzcDdZK2xSSlAzdXJxTHR5WENXUWd0QUloZDBtQ3ZRczdaeHVMK1c3MFFyenZZdGlMWVN4T0JoVWlwNnRWSWJuaE9rUlZKYmlGTFU3UkhJMkExTFFETUhlRkpXbmJhcTdPU2ZPNm1EcTBHZGpnZ1ZUTTNlb0ZGM2sxOUcvWURESHFXc2EyWW5IZzNIdWJ4aDlGM0tJSXBTd0JQalB1NG9mR0lTNUxCSy8yakJjTlA3UHd5YlJucUJZUm9vaHFRUDNMY1JXTkc1bUZaWFVKNDY2djNxOUNzbnlHRlRDQ2hKL0dnWDBvSmZtM1RCUzFWbHhCU0VJTE5uSXZVUCtOVjNPZldFNEZCTkhsUG1sS0FMaU5aU0ZJVndEeUxUeUtjczY1QTVSOGQrQ3kvVkNjaTNIR0xzQndXSmVZM0ppMk1GRWNNWTdUdGcxc3UzRDRBTUhsaU40L0YyOTJwdjVpTEhHRDFXTmFxM0hEdmNjMFU2RjVGSFJockUwb2RmSCtZck9xWFM1RTFvWkFNVmQycmx1RFBIUERZcjNEL1FnMWNnRE4xRUFqb01nUmdob0h4aTdNc0ZueUxUUmpQQjZNVUZWc1liWTJuK0tLbXBBMGJDRW5Fakcwc3g1NnNNdFFPeWtlN0Y2VHV1c21HVFo5VjFncytXY3lVSmxUcGdUbkg5ZktFZnd6TEJPVUZTV3RsT0llTXZxVmJIMTA0MXdPRVhCbzdRUS8xclVNbWFHL1poMi8zdVBiNE9xQWIxcEpNWXp0bXFseWpqakt2Q0Rxd2gvYVYrNUdnMDVXQmJNZzdHbTJFbnFueTJHUjk4blJCbjY4eTFqQU9NUjY0bkQxd2h1TFJvK3BWRXV6TXI0K21TS0RjOVpyNnpjN1ZYU2tiWHhSaXEzeU04ZVplYUFsSXh6cktqd2toWURjY2VCY3dCbUpVUWVuK1h2VlFnSjRJVTd6a3FJN1luRDBMcFk5UWFZcHQwdHlhVW9pUzlkQzRSVmRodnN4ckEzN3dEenB2dDlwdkFXTUpjTmh6OTF5anZvSy9leVJiRzJlSkdBR3FFbTF3bnd6Sk9TMC9OZ2pyeDQ0M0c0Z3NUZnNzYnpUSzlObGJEYzVFdUpPNnBrbzVHK2wvbGZOTjdSTnYyc01qYXRtNE92UjlRT3QrYzUvTTNwQk16L2NoRGJVbVpEb2VkN01hRytrMUhIWkhjNW1yWXN4THdscmtuSW05MlBLMWk5dm56SDg1UnBCVDRmVjJic3FrM0JCSHlaYWtkNFZzTU44aktkL1dhc0RNLzVSb1c0dEhieElzY0RSblh4M0pwWlZTb1h2MXVzOFJ4RW5EdjU0VHpZTzNrR2hRQXBqTXd1WDlzdU9maFlMQk05V2huUUlUUlNnQVV6OFl4aG00d0FKNk5kNTFTSzhGaVJpenFKcFdjYWZmSHF4Uk5QcmEvY1d6QWgrTmVLVEs5eWdnSDQySkdzcmNNTnNiSFZFVmlONlFGQURnL3ZhaHJ3bWtTV1htQ3NKZnh6QldaQXF1a3FmYUtUN25hYkVMem51TmRsNGpUbEY4SFp6cWlQUUl0bm1UOHB5UjVYOWZ1Q3dpUDZ2L0VHVy80SG5sVFJWcUVJU3k5RGMvYzUrZnJQUVRjQVNJSUJaTTNEWFFGd2JWS0cyaEN4Z3RuOFNKSC9lTXZnY0wrNENxSlJrMnJzWlVqTUFZTTJZM2xLZGpZSkdDRVluaEFtY3EyTmN5enFXc05BMUxlTFNZNE50VFg1R09GOVJFL29Pd3FSN3dZT2VmMkdDYUVUSWFzRVpMMStKd3ZmaUh5VUJTQlNlYUZ4ZlN5Y29ZVExJVTRaVlduNGJENFU2ckwxTnpDL2dYZ0VuR3hhMUg4bjhZNld2bGg3TWpGMzd4U1RjNHNZTE02NURJUlA0OUFBMWVVVUhYa1NNRG0yQTdjN04wUW56eEtNdjY3bk1WMU9YNm1kN29UOXZKL0xHUUpNd3pXV2ZHUzFHYXhHZkNhQzU1TTE1S0ZGZ2lNcFlEOGEwRjZjbzhIdytnQU1wMjVYWTRVUG5xRUdrTXdHSDluQlBxT3NnaUFoOVkzTkR0ZE9rWkFVN29CTFM2MzBBdy9vd0NBN1lneGNIYTI1VWdwYjE3YkZYWC8zbkR0S2ExeGl1Vml4OXdTT1Fxd0N0bnVGNTJ2bEdoNTNURENDMm5yRE1pcFBuSmZaUjdKdG93WGZPZUFRc3llUFNNWXdNWkcrd0YxWWtycVdkYnV3b0lKaFlzWVl2QVRpWFc3dktBb0Q0N2lKb1NIQzFIRzVSa3Ewc2NuYVgvMHdtY3Zsbm9kNWRlZHJxSGIwT3RYV2NaS1drWkZqS2YzYWh5d3gyeUhwQU01L3BsdEE1MDQ4bFNEd0JwOXFPZndKL3pCbU94K0RLeHowcmJhd1dtZEZsWW95WkhscXhBTC9LS3NFbmFrWEw4b0dIdEp1RTJGdGM2REFLNlhTV1FuVmZxQXE5QmRsRnFGSFowcFV5TkdUaVY0dEVNUkdwZ2I1c1VGcjNDcUdkblJLNGdYbGxvQWhUZjhBendlYXFBT3M1SzhPOE9TdE9ISzhqbE5ubWIxa2VGU2x0Sk5ONHYzUGNYVTlpS3ZyVzlKV3JBMGhiK1hLY04wS05aQ0ZDdU8wRkE2bXdzRVE2M1NkMTZzSGpRVGRYNVdzSHJiU0FxdVFiUXIzVnFHVm8wbXE4Q29EandHbUs3QjI5OWhMZFdkWGs2N0FLME51ZVNJbnM1cERoY3YyQmFaOTdDNXVDOURUU0NQdVNYTXh1c3lQTTJyTms2bHNIcEJVZlEyYVM2d1k3MDFGcmtsWXN2RnpoSlZVTmpwVHhwM0REeTRzS1R3dUFqOTlXWFB5MUJtOFp6SHpXdk5aNi9LMHVMY2VUcWZZMkVUbmM0YndONWRCWTZRMGxlUUsrT0lVczZLcExRVzJlU0NhelV5S1NnVmZWMHpBdXNNc2tHM3IvRGYralVqN0E4Qk1pb2xNWTM4SzQ1T1N5RnIxVG1QV3ltd1pseFhpcm1HV1ZjWlZzb2JRZGVPSzVKZkRXNGdzQklNYXJvV0RJdWhreGlWenRNUFdnSlljdTdxcHR4REhWZjlod1VNaHloTzZJRWVML2paS2NMdzgvMzZka1hHdmN4dkxIRUFGWmJkZHRlZHJHZ3pBd3l5d3dEWWtyUVFhUE13a0t6SmtFWkYvNkwxcnBnOVNmd01OUDRCUENKMmxoVjBLM2YyRHFJT0k1NG1LcTVxSXNWRlRpMVRTUHV3ZE1PUzVIWHEvelIrYkVEbXIveWk1MGJnNmFFSW5TQTd3MncxNG5jTVlXV2dXZENucjNydUdWdmRpTDdSelRHT3lvOUVpWHl6V1R1RERzSVpVWWFmSCttV0oxMWp1T3pQTXUvNERFN2dnS3pHbmNFN3lFemhGTVllS2JTeDBjU05VSUhZN09aLzhtTGEvTzFzaWtSd2RRUWRpcHptNHlxbTRJTSs2MkdYNmx1aysxK1JidVdFditTMTdMN2paU2loVkdRdm5QZUVnQmVyazR6N2hzUGZUc1Eya2czUCtzaXEzZFFpR1ZuNng1TE1SaDBoRXRhbVdhZFRLcDk2ckFid1dKemhaYjlvSkFWQ09FQTdHejhjdjA4SkRkU01TUnJNY0hjUDdzcjJYUDdzWnQvczl3VjVRQlJDQlc1dUlFTVpJU2xIYTRyaW51L3QvTVR4V1ZzWHVhVUd0M3BMTTl6RG82V2dXTEVuY0tGOGk5bWM0YWpnWlZPNmpoaExzKzlOS0N5VXZvNzBhSWd1MU9IclVQMFpTRU5oMlZrbkZ3SFRmTWg1MTRTdC9mMWxjRTUyNDFLNGYvM3MrTVFBbkpRNks2cGV2NVJ6dklOalRsUnpXSmFyZGdhSVdXTUY0MUg1NEdkZ1p4bGpBT1hkVkt0VGxkVjd2MnFoaUkxem9uNTVWOUMwYk1EbVFvcy83VW9odU0yUUlQR21FT0tIcnd2cnV4UU9Ua3p2bE92VFVGNkFVVkRnUTlYSTRiWUgvS284ZUdDcndEam96WkhVZm1Kemsvc3NTUnNRQkdXK3Ivd1E0b0FubVloQms0QTVKUHNEL1Y1ZDFmTzdiWWpHajg2amtJQzR3RG9vOEl4OC9MTjNzcXAxbE9oYzNQbUs3Z0xoNkNrcjdDTGw3ekFYcXJxZktOTE9tbTBNTWc1bkQ0eHh4K0l6bmdvUjRoaFNSTXdRNHVsRE1TY2ROUFM5OEd1R2pWcC9NYnVNU09NRmJESUxmMHozZFdLbVpUV015d3dxM1ZkUmR5Y2IyVGovbW5UalVVbU5ZQ0VmK2E1czAreXc1Nmc0MzVvaU1EZ1pnTUdmNjRVYTAvUTgwdE9QVUFKSWdlNmd0aHV1UW9DMitSamdiWENJMGFUYS8zekFOeTVkdE5HNHBXTTErT2Q0cGNHZE92cElVVmRsekdNVEhGcmVNblVXaXdRcHN0MEhYS09TTUNQNGlsZDkyaHY0L3IxNk9HR095c2ZXN2dPSzFwVTNuNUI5TnMxL0trYkM3eENIU0MzL2ZsbnkyZmZSVThQa0tleEQ0Q2I3WnAyQTBuMVphbDRYRE1kbTRmMU92RGVzUFBTdmZzUXZpUkVTNWdWeVVhaVV3Z01lUzVWWDVkRFBPSmhvQ3VXMFU5ZmJlaTRLK2ZIUnAwbWcwRjZKMW9XeVptdUtpY3FLWjF0MlZFYzBDbDhYSmVkUnZ3ck9RVWt5ZVkrdSsxNWpqeklSQmR4cmozM3hoSWZnd2pVL3BSZVB2VWViNXBQT0dadXF4REp4dVMxTjc1emJOcnFyL2FVK05lTlZOUU5DZGVxRVJXNjA3Kzl4cVpIMnB1a25YZ3dxNm1UUHJoaTBSMmNTVHJOZjk4c2xsLzE2bTRhUUlSMzJDREFuMDhlSUUyVG1BbHNTSDVhTXRFM0FETEN4YlloTHVSakVuT3V2eXJ0ZWxjeEZGUjdINFlHYTQxZEQrSTJrTXQvWG4xb2xvWjhpL01ZRitqWXNDVlRpb0tudHNYdUhrWHlNOGszWmVrckxZNlVmS0RaUmQvQzV6bEppczNESVplb09xaXBxNHI4cE13VFhDL3k5R3FiS0prOXlrTXptN21BQ09IRzVxWDVLMTdPMkRRRGVpMGMvK2RiUUNLTnVXbnRBRXZRb3oxYTdXNE1rR1Z1V0NhMXVrV2FpRS9pSDdwd3Z4QVlMTFVJQTlHQkxoM0pvRDNGUU5qN3JWOHlOSU9BbTZKaUpYNFloVUJZR2lsaXJzMWI0c0ZzOHAvYkRTR2ZjQXFDWDMyQmZFOFQxclpnRnVQaEdoRXVQVXN6dFFZOEFISG5ZQUp2RWNKMzFjcnhmUkRTNWFEVnJQQ2txUlJyc0lxMFVaNnlraVdlMmluekQ4TEZmVFhET1JHeiszOTJoUDJYRVRkajBPOEZ0NEcxY2hXaW5HWVdKMXQ5NUIvY24vYmhnZjAzL3dqVnptOGVVVFJxdnpDSmN4dVVPQ2crd0Z0VVA2emRRb0NVTDJOek1MYUxBMWt0d0lvTS9mVFlGOWd6NFc0eEpGWCtiaC8yWU9sWjhEU3lsMFVXRG9QU1JKY0d2bms2MjJ4VUE0QnJJK2hmdzhDS2MzU1h3ZUJYTkVXQVhtUHBqaWkvdGRmUlB1MVRSN2tDeHhEL2lrdk1CSFB0S3o3NGwrbFhDMHJqenZGLzBJKzdNaEQrdDZxWGhTVFZndUxmOWJUaG9WRjhaem5SY3RXRG9JU2hCdGlQOUFNdWFoWCtBVnhPU3hBRERXbGJFTFpxNi8vdzJabmx1SjltbVl0Y0RYOWorR2dVZEx5RURId29zSWQrWGVXT1dNWHVBY2pwYWRQY0xEWnhBMHpkUFIvVENXUmFBZk5TN1AvdlJCa3loaThtNEdwaVN3WHUxcC9aWmdhZXlJdjdpRUhyUzlyclZBeXdqYjVuWjhrQktJUUxVMzJmOHliS0gyQVlPcTNOOXQ0b3UyQVFCQ0dMTkl6NFc1Y1JiMkR6ODNQWnRPRjNWOEVWRkZrVE9hMXNJMnNLUnBXUm1GczV6cVhqZUJscnQrSEhka1FzZTJpUGgwa3JRcXpFcTJFVlV0dGl6V1cxbnNZc1RtcFVMWUpmdldDK0ZYaWsrWGsxVm5rbGREWmpoS1RRb203OXhESSt3SWZGaTJ5Uy9tblhJczQwRmhwTndmaE1uZWJoYXdsTXY0azM5QVAybHYyNVNEakpvNGE3QnJqaGQ2MERoUVlicGlhU2lkZ1RMZHBWNmZic21XOFd3ZzVXVFBYQUphUi8wc3NNRU8wbWlOcXZGVDd6K1MvaW44c1BtdlA1cjQ3dk9PMXV4UTBHSFZrSlByeSt0aUs1UFJoWk5XZmNyRyt5N3RaU1ZRRE9XOE9CTVJzaGZlUkEyQ08rT1Z2S3I0ZGZndkR6N013ekJkeVhMa3ZTUmlmUzhwN3dOUXp0L0dwSGlvT0VFUkpDd2w3ZGFNMXdSN2NucWxNbUFtZ1Rnb2dxSVVBL2xGNkg5b3lGODZMdW5LbUUxaUpMa0dISFRHWit3T05hN01LRWRJREJzeHRja0pEZFlIcTBNZ0JydkVCUVVHeTFvOHBEbWVuaXM4TWlzbTMxYXZzV2N0RUEvS1JiZXlUelMrREZORDl5aXloTno3VEMvcGNhOUFwY2lXSDVuaE8wQklmcVhzRGMzbXlmNEdCL0ZtSlorL0I1ZEZXVEFlcDFmVDRwNFBSMGhpRHF6c1lDNXV3REVLVmlZQ1lDUS9nQm51M2p0enpab29jWVpQNXZNOFArL1NGRHZRMG1ZVUptWU14N0xZbkhSNm1abHlTQlJZWW92Rmp2ZjhuMURiakUwbWI2T0UvdDQyOVVFYTNLK2lFcXp3TkV0SEhIMjVzOXpTaUcrSG5PVnpaK1R4VDR0VWxsRVlVZzIxbnhzeDZjbjlLdDkwTzVFc2p3WTVvUFBxODFxVFFyNVJvYUtlT0g4a1dETWwrT1A1azJtVU1RSGMydEtZVFFDNXEyZkRlT2hDUHhFdzdCMnY4cURlMnBNc3B4ajV3d3dQOUNIdER0QWdPMFhKUDV1clZoT09CNTJSeC9kSDZEajluRkdkZDNCWmFKaVQrVHgycDdpUzczNHlNMGxzekdWQ0FtNGxIdEthUHBKWWlyaGNoYnJmWXMyWU1sc1pxeDNPUFJEdmg0Q2JGQ29HeTN4QkRoRkQ4d2RKYkpCMGVYdzFnbVA0cm40L3Q0MUwwZzB2UG1pbTRUNmVEblJ5RWlTT1A5RE9pZGxDdDZtamFseS9uZC9vbXJaM1FKTDRubmw5WFB1VjlXK2Y3Nmw1dWNxcWNxbjc4U0J2U1JodkxqeW5yU3VidjJUa0VkdmdnTlpIeFdMM1BuOVhjYXFET0F0UVNYVmd0VURwRG1lTVRJOE9ERExVM2ZTOGtKbEMxZEFtUVVlWUJhcWZTM3RDWi9DRHZudXExeHc1aHkvU0t0L2FaKzd1NDlQcDFwVXhDMFYybkxaYXRGSm9wZk9BcXVWbnpqTWVSVlUvR21oQWZ1cGtvcWQvMW1SZ0F0WmZmNFo0Y2M2dFdjN0NwRndLSHFvdzJ2WDhJVjB0OC83THprUC9IYVB5UjlFRzNmMDU0anZZS3dwYWczTHM4dU9jNnZKYUpxd3pOSWI5bE9zT0lXZXN3aVJIMlpjUExnZWhUbk02OWRMZE5NVTlvQzRaZFExTW9oVnBncmZqSE1sSm1kN3pDSVc0a1JuSVVGclg2VE9vUnA1L2t2V2tWVytmRUNRckZrRENPUyszS1YzSjJOZzVlV0E1QmJ0TzA1ODhIZDNyQjFLcEdha2tKMDY5aXAwaTFERGFNc3MvM3lEdHE5ZHl5czIxWDRiTlZRQnBTMlZicjkxOHNDUWNZK2FjY3V6ZEYwSFhtc0FIcjc4TGxEUHpKNmQrcHdENEtueG5WUGsvMk9TSUx1RU5FcC9uaUt4L09DeUxLK0RwdDZrbDZPbjd0eGZPdm5Bc3duMS9RS0JZRzBWeVphWXBFaDVlUkJXUDdMbFRFaU5YTkdjcGo3RE56SGlaWlhRNWk4WGRQT1NWRnBTRG5tcGZJMVh6VmJPQklEMGV4YUtjRTJML0RPU3NwL3dOeTl3Sy9lZ3BZa0x3cGI2d2xPVWdqVmxGcUlDQWcreStjMnhnMmZsYzB4bngwRi93UTR0Z3ZLc1ZNalpJYk9qb3N3NmxkR1gvR3RKdmZodkhLWXMvS0g2RG4vQzFkSDB6Y3VOaFdtMHFJZERkU25JaUdBdjByZU5OTTREcUNmQmdyU2FZci9BbUlHZmo5dmhGOUM4WXpPdzhsM09ZNkRuVmVXRlRpZi9aQUFFQUdnQkFBQUU1QUVBQUR3RUlPUUlBQUFBQUFSOEJza0FBQWdBSkFnRUJDZ0lBQXdBWlZHaHBjeUJwY3lCdlppQkdhVzVuWlhJZ0tEZ3A8L0JEQj4KICAgIDwvQklSPgogICAgPEJJUj4KICAgICAgICA8VmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I+MTwvTWlub3I+CiAgICAgICAgPC9WZXJzaW9uPgogICAgICAgIDxDQkVGRlZlcnNpb24+CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvQ0JFRkZWZXJzaW9uPgogICAgICAgIDxCSVJJbmZvPgogICAgICAgICAgICA8SW50ZWdyaXR5PmZhbHNlPC9JbnRlZ3JpdHk+CiAgICAgICAgPC9CSVJJbmZvPgogICAgICAgIDxCREJJbmZvPgogICAgICAgICAgICA8Rm9ybWF0PgogICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5Nb3NpcDwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgPFR5cGU+NzwvVHlwZT4KICAgICAgICAgICAgPC9Gb3JtYXQ+CiAgICAgICAgICAgIDxDcmVhdGlvbkRhdGU+MjAyMC0wMS0wN1QwMjozODo1Mi42NzFaPC9DcmVhdGlvbkRhdGU+CiAgICAgICAgICAgIDxUeXBlPkZpbmdlcjwvVHlwZT4KICAgICAgICAgICAgPFN1YnR5cGU+TGVmdCBJbmRleEZpbmdlcjwvU3VidHlwZT4KICAgICAgICAgICAgPExldmVsPlJhdzwvTGV2ZWw+CiAgICAgICAgICAgIDxQdXJwb3NlPkVucm9sbDwvUHVycG9zZT4KICAgICAgICAgICAgPFF1YWxpdHk+CiAgICAgICAgICAgICAgICA8QWxnb3JpdGhtPgogICAgICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24+SE1BQzwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPlNIQS0yNTY8L1R5cGU+CiAgICAgICAgICAgICAgICA8L0FsZ29yaXRobT4KICAgICAgICAgICAgICAgIDxTY29yZT42MDwvU2NvcmU+CiAgICAgICAgICAgIDwvUXVhbGl0eT4KICAgICAgICA8L0JEQkluZm8+CiAgICAgICAgPEJEQj5Sa2xTQURBeU1BQUFBWUhiQUFFQkFRQUJnY3NINWd3Y0RCNFBBOUFBQUFBQUFBRTVBRUFBRHdJQVFBSUFRQUlIQUFFQjlBSDBBZlFCOUFnRkhRRVlBY0FBQVlGYUFBQUFER3BRSUNBTkNvY0tBQUFBRkdaMGVYQnFjRElnQUFBQUFHcHdNaUFBQUFCSGFuQXlhQUFBQUJacGFHUnlBQUFCd0FBQUFSZ0FBUWNIQUFBQUFBQVBZMjlzY2dFQUFBQUFBQkVBQUFBYWNtVnpJQUFBQUJKeVpYTmptY29BQVpuS0FBRUFBQUFBQUFCcWNESmovMC8vVVFBcEFBQUFBQUVZQUFBQndBQUFBQUFBQUFBQUFBQUJHQUFBQWNBQUFBQUFBQUFBQUFBQkJ3RUIvMlFBSXdBQlEzSmxZWFJ2Y2pvZ1NtRnpVR1Z5SUZabGNuTnBiMjRnTVM0NU1EQXVNZjlrQUJBQUFVVnVZMGxFT2tkU1FsUXdNZjlTQUF3QUFnQUpBQVVFQkFBQi8xd0FFMEJBU0VoUVNFaFFTRWhRU0VoUVNFaFEvNUFBQ2dBQUFBR0FZZ0FCLzVQZkV2QVVPNjhJZE5rMmtDMVduUW5pOS9Ga09aQ1NzTVJBK011MUxYWHAwNVhFSysvaUtaSkpHTXZ4L0k5SktOUkZLWURVQU0zWDdiV2x0a0VuZ09JQXVaRTVhcGs2cnIzTGlPdDhtRTZtR2d0Y1hDcUE4U0FqNkg3UVRLK3ZGWW5yemY4bHJKREh1UG44Q0FBTE5xSTFBSm5pRzRMVWlqQnI2THRubHNOVXBPdCtPWGRIREx3ZWJnLy9BOFpzWndCRGtwcVRJRDI1M3lSaExCeG1KcStvcFNicGxCVFFnTTFiYThia2dOVXBwOTFQcWE4NCs1Q3ZBNmVWbTdtRzlhaDkvYTBoNThhRnVVQzdURThFV3FMQ3V0RXZQY2NkaHFXZjhwNG5xRUNsREx2eFR6ZnlCemRyWC9TZFdVbmUzVG1IeGsxSDdNb1l6ZHhROVpOV2VJR1QzeGNDemhrUzVlZmhjNkdYZmFrd2orUGhZUmUyNWs5b2haenhnTXllbzhVSVdTbDNLcE00czFpM3JxYTZzRXBJS2RQa1ZGTythSWR5eUlzY1JINVM2ZDMxby9nYm5HeXV1MTNhcWhOTmdRTDhabDhacDh5Q0pDeHJsM293TnBwYTdEQllJV2FTcXVmZ0x0WjFJUkFlSmp0M0V2aXNrNnNlL0VUTGpkSlErTmgrZ1ZIRVZRSUZVYVpHSW9oYjZkUzVUekVaQnIzMFgyaElRSW1wcTYwd1JEcXBPWFgvTU9FT1NjNHYzdGJUWXJIbWIwYWpGNlQ3am9jbUpwcXpKOGtpSHNDTXcvdUxRWnlyK3NUK0FrenJ2T0J4VnY4TnRBMWcvMzUzTU5yR3VySmZSZTBzUzdCRWcrZkhqNkNhTnBqUW52WUp6RjRKZW1GOElWNHF6czZUVUM4VjU3bjlodC8wN2N0RHZ6YUthdUNaSVA5NjZwdHFHQzhuVml6NGFPSVg5WFdjTTg2ckYxU2d5MjR2aTA4ZVZyd1JmclhQem1OaXQzRHprajRkR3FqN2lQRjZVV2NVR3E5ZDVaVDJlUnVBOEQ3NVM1dFlWL3JpUkhrNUV3dG0wdkp6cTk1MlcrV2xJQmdUUlB4Z3RjQXpmOVJxaVRURW0xOGtyQmNYcTR4UWFyQ1ZCVEZDV1BVa2l5RG5yZmNvWmsrRDgzR0dPV3A4bGtYTC8yTUVIUnlvdVpjd3UzUmw2L0NvUmxKNDlOc1ZTTGRadkRQWmdjbFNHcVJPU2I4Nm9rY0Q0dGs3V05ISENIZXVsOEtZdmZINUJXeDg0QU9OdzZXWDFwVnllQ1FzN0JhZnNiVXA1cU1GSndTNkZSWXlia2xKRnZ4ZUhONC9ISm84T3VaVGorcTNuTjI4SFJCZkRiNUhHNlUvVklKRml3bWxmcUpMNmRZcFFZa1ZnTmJTeXN5d3pBdDI4cmF5NHZ1emtYb2w1ZndDdlN6TmNjNTFOWFE2M0R3UkFxU3FjdjJ2L3BqTGZWb0RwaGdzbFJoSzA0b0hLeEhmZ1ZDZVJwdWNQdmE2U2s0Tm5IdnpMclJZM3MxaFc0VkFleGlwNDJNR0I4eGxER2VveEtwbFo4dmhYSjJWY29aQW5wTzR0U3dFZlpMcEtiUXJabUR0K1BnclFyTjlpV25HVVFldEVrdEhYMFQ3QUNtZ0JvYWg4ekJUMGs5YU1TZk5yK0U0MWhTRDUyeUQ5MUpvbjYyeTNEQWFXVWZWeXJJeVVsQnJ0ZjNkMm1xNGZaL3dLejNqYkttTnhLRGFXSUJOdTFhcld2Y1BldzBrTHpQZDRHMHlmV1V4NVdCMVlQeW9WOHlOZlFwUVVtN3NPejg1ajdXZ2w2SjdYU1JQNk9IWTZ3cjlKL0luckpab0Uxb0Q2TDQ0Qm9TRllUemJ3R1hFNTNVTEt0MVpUM3pjaStqdVVDbis0NjhJaXNYbEhyUW5CTnk1OExCeHB3YmV3aVJDazNaR2ZWTzh4OG01bnBPOHVhTUhPc1YybmV6cjgwejFyVDlDazBZRkNTWWdpaUVTK0dOc21EUmV6QWtpVUc5bFNQUWJ6V0U1bUU2cmpLM0FWSjFMMnZiVU92T3puSXV0YjNoSWtLU0Z4MUh1TE4zUGV1K24vV2RVVEpUdjA0elVqK0ZpODRkVHFaSjh1OFpDS3ViZmgvZi9LRC9MQVpUeWhtajR2RU9JU29qOTU2WUsvZ0J3UDBJM05XVzA4QU80VjUySDRMdWliQ3g4LzFYTytlWjYvM1hOdGd0ZlRDS0R4SDhMd3BqODFBdHpvbUFuREZKbTYwcDhJeitWUlI1eVBJc1lPaWNHNGx1UVVSU1dUZ1M5aDdHekVpekVranovQ0d4S1RIcGtyM1NneXo4amFlQ0M2aFVuenl6MUtoL0g5Ri9KVGN1RTlsSjgremJySmNQZzNSZGFsWXlHTjJUNUp1Yjl5ODBMMkQ2d0xuVUwxbnFjb2R3OW1kZk1LM2N1NHNnNDlsS0RtZkhrc29rQ01nMUp4Z0RjQ1NzcktzSGpGSnk0cE9QM1dtQTVHdFFrRDNOTzd6VzJ5cWJ6L0ZhSExQZE9WUkJTMzViMzNkbm5OR1NLZ1YveGl4OVJpTTZnRDNWZFZyek9vNWxSVmNXMjFSVHNhQ2p1ZEhFVnhZaFZlR2s1N0g5R0lRQ3d1ZXJZMCtvYXNra081dkJJZDgvbmQzSTRuQjMvUnVEMktub25nV0MxcXRwUjJjUjJ2ZUdpUlJxZSt4eVhFcjJCU1BzVDB0Wk5zbkcvQU1Ka0JheGJxSkdhbktmbWh0aTh0dGVVZmtiUHQzUlVzTW9GTVRNekxsdVhFZFExYndheDhXTTNPd3pKcmVkL0pPNXRsM21wTDNmOXZjQi9tYjdtK0ZUcE91Vm05eDlpVTVjYkJjb240SG1aaWJTY2RROGcvU0hWbnNsL0dNeHhRMXhvdG04UEF6aWlXcWxEdDNtNG5ocis0dXBuRnRWbjBLemJhZ3ZrMEJReU1UMTJIc0RHVGl6UDJMZXI2QnRwVnlacVh3NTMyMVhqU0hjRU11SGE3NmpiRWpUR2lJT01XdUNIZUkvbmJKcE5jQWJKSEJLSEI0OHZVd1BuK2pPV2tTdVBlRDdXS3ROc0Nzcjh5eFZKUk9rUEtWYnI0VUNROXJ1VUlMWjFpSC80TzlWWlZuZkRrWUxCeW9Rc2orRk1XS2ZBakttNGdpV3p4b1dCYUZUWlRVVDJqODlmbkpQdk1xRi9VZEpkeE85alpDWE5YOHNBd0ZvRFNySzV3MzhiL3l0YU9tRVp3dlhteDVRT1MyUHVSNEdLa0IycHdnb0w2Y1BQMnhZT0c1bkJsVFE3Smx5SS9zVDBIcEVLVm0yV2FKTXB4M041ZWF4c3h2YWFpU3VBeTlUbDlEaWNIYUtndWJvcTY3TDdQRUJwZkI1Y3VaSDdhdHFrZU1aNUhHQ3NMSG1WSTQvREpQV3FMd1hTcTBTWDJHeGpvbmFKRWN4bXVraWptT1hCN29NOElFV2dUM0h2ZGs1MGFiNXBmUVhDUEpwTWYxUURWa2JSOTJvRm1LSDY3TmFLd09kWHdnSDVKcFZUdnBkdUkxZmtkTFU5amY4N2lEWnFUK1dMMUduZ3JCTmxIVk1SemJEUG9NTFFRYzlRZ0tGZmdPZFQ1NmZvNDlXNW9EdUc2S2RBTVhrRzQ3YmxXdUZienR0bnRzdHBZTy9aUnBLby8wN3lxY3F4cXZybkhRWkVaREJKYUdKdmJJV0U1UlpMZE0xeVR1YVpnWHN5MGJrSnlTMlNzcExzUUZic2JlYWNtNTdpbDdjQjEyeElKNVZ5Wm1qQVlickRMTWU5UFd4bnpKN0QvajVTc1p4Z2RXemJEaW5jamdEWlFZYk5rbGNsQVBYckEzK2pieHZWZlRXZXpibHRndmJYVkVPUVNDdElZUk0vNVlLTUlGN3VqVmdaN0Jrd29aK2tObk11REVTdXk5SkY1TUtNdmduaXFFM216dmRvRnlhUjRPclhWczdKTXRWWWZBN0JnN1FIOWpHR1FmS1JHSUFsZndrd0dKcjIwWkFLQm5jTUJCTUtGb3dhMDdxSzlVQXNhMGgyQ2xQdlBQZVVXNHNuNnZydkFOVWdoZk9XMFJPZXpoYlNwUkN6RlRSNFlUMjF1OU5vZ2JRaFdQUS83ZnBiZjhaQ3dBMHZ1SzV3K0lmTjZ4Y3JRa3k1YkxHVlRPcnVRNktkUGRLM2N1dlhiRzhDWnBUVWdjL2tqcFZ6Q2xXWndDZUF2eUxyL1NvRVBHSUFKWDduUGFnU0hOYnkzZ0JNcXVOWmRiME9WRGdGdngvUGJKMi8vbkxrbDhSUjNobTFPQjRRSlovRUNiY3BoSVRPeG9XK1lsajlXSDhmREUvYkJvQzcrOTlxdzhvU3p6ekFBY3NEUGQvd29RbVBQOVhDREozQzdIZmdNcCtiK21iK1hvNk9BUFlWb3diT3dzSUsveWJpbmhHcW9Cc1hsR25VUnBjSVNQbkRBTlFSeXpuU3F6VEhNRHNHdFdaWERkVGpBUXIyRU1GUTRPbDZnNjQydDcvK0pRWmtMUmlOTGRJVnVTVjJFNWlqeWo4b2lpMWZDWHJNV1M0WnI2ck1zV2Y4MTQzc0Q0UytJaXhFSklobVVMb1Jpd1RLcGhCa1NtUVFoY1ljN3A4a2ttNExYTGdzVWlxWmtNL1JCMVZid0U1UkhpM3NiOFZXL1ZOQVNBdkRqdFRJWktRbVFaTXVJL2hNUXp2enppSjhnWEdrZ2xhWkJJeHNRS1VubUh2c0ovYk1kb1A1YXQvcHVDd3M3NjNwKy9YOHE4UDd5MlBocHFOellHT0lWU2pTemJlY3VuT1h2WFowMmpJbWw1R2tsYTBYQUJpMVlncitSZVhPWTJxY3BvOGxMSURWbEpianhKVmp6OXVydTZjREtrRk9FK2s2VEF0Q08zaEVVek9NM0ZscEJ0bE1zaFlxMitnUVVyeHZSbHpqK0Vyb1N4NDRNaUppWG5uckhzM2xSemVaaExnZlpBRWtFSTBKc2ZBc093dFprSEdPM0tUaWhyQm5PQTNnL2RIVGZnVWUvTWZrUkVqVW5iUkNUQ1V4UzdEL1NJcTR4QVBvN2lDT0s2QzdFUndnbjV1K240K0syWTRrdGZXRHdEUk9XZnZoTE5kTUZ1UzRTcjhIMzczZElpUE80T3k4bW9WS09POFEvaVA2cGh5dkJocSt5Z2p1ZnRReE5vYXh2clVpbW5UeDh0aVRCdmVtVS9qVFcvOVhRM28wbzhRSis2TVo5c3E2L2FxRExaOXZTNy9RTCtvMG94aWsyS1loK3dwSk9FMTQ1Z2dXbWZGSjYwS0pWVkUwQUh2REpJeHR5RmRJMmdoYUJNcnBHVVgvWEttQXZiZUw3TnNyWmxwejU0bUpWNmswR2pDZGVZRkJIQ2ZRSUpid1ZLa1U2L2VLSW9RWVJoajBwWHJzcm1qdTBlM0FUVWNPZmFKenJDS2FYTHE2WkVpR2ZOcm1CdVZISGgrQzZvYTBXQ1dJa3loclV2aEpKNXJYakN6VDJhV0tRVDZoc2V1aWV2U1pKSUtuUWVwMXlWNWlIZEVpK1N3NmdJQ2RtQVFWZG44VmRuMGNGOFBIMUp5R3AzTGNmTzZBVlN1cWl6b2lhdzhUaXplenZIUUZkN0JtT1U3dG1ETHVYRkZGVjFFa1NiYUZMOEFaMFlNVFJYaCswaEZLU2JSK0NRbmwweU5FQU1lSGpoL2ZIcWhwdGdVREREOWxmT0hqNW1DQ0ZSSWNqWFd6VHpML1ozL082cUx4MEYrTi91TmRNSjI2TFdZK0t0emxpRFVkb2N0ZnpNVG92cVpWVTAxalMyeWNTYzFmZXlrQUd6Z0tybnYrSDN3eU9JMmxGNVZOSVdIcjFtNk1SbjQrOGNJekRZSFA0WXNOWUhMZ3pqZE1rNk9sckZHT1FsTHdFNTVOdVpYanl5ZkhEOTQ5SjlYVTdJUDRqS3RHeTNPVHZ4TWF5eWNUZ2YwSnNEVDRWUUtQWjZwMVV6c3FUYmNuZkFjV3d0NERXRmZTSWNoOWlGcCtreGxERis5UUtFY3J5YXRjZlg3M3JpUUU5NHNuY0MzUGk1M3R1b3p3OWtqbDVPT1h0SHRQa09xRW1XRWdWQ0R4R1o1c2lPQlFhWWNxS3c5N0toV2FBZGYxVVRzL0YySXVKUUJXNndNYUs5SHFMRXRoSnduUHg3dEZjaW5KRkJyTnlnMFIrbzBscVRZSEttSERPQkhPZG9rc2Fnd2lPblRuTFA5QmZNTzJOOC85Q2puMEtRL1d4Y0E0YTB0QzNuR1F4VmgzQWcweTlpT1lZVUpVMzB4YkUxaFBJT0hiRUE5NStMenhwbDZjS0ZBTldmNUtPbmdERTJGWmFhbHNkM0VFeHF1Z2tQbHZCV2JpdTFPcE9VTm1lQnBDRFluRnZEUDVJNlBTV3A3cnlYM29SUFdvS2NudXoyQzdUcGhadUNrcVk0VXB2alRpdzV4NnAwY2F5SkJKL1hCYVBCWng2ZFZGaThtUzAycUlzQjkvRzVWTnE1c3lkNldjOUZ4WUdvbnlvTk9VRTJLeHgzaGQ3QVV1Wm5hY0JDRDY5amM5aEVSSWs1b2lPWE9LMklXdHR5Z3lhT1UwRzFoTEQ3YzdieVdRdUFGMkVESWJDU3dPRTY0VzMyL0FLQjNVRU1DLzFQS1c1YU9rOTk4b1QrRUxjbGE4Z1dhTC95anBxb29FejVuZUU1R251emF1d2NOcjFkTmhOYzRnNkRCVXlXbHVFTGYvTHpVeVRKVFppZHA0dUdnUnNVc3N4QWxIc3NEVUZPUmgyMzgwSnBkL2FZWVlQNEEzSzBrTHBIU3lwOTQ5cGN1RU85QUVXejdna2ZHVUxqc1g5Yzg1QlhsRVdTaEJONHczNU1WWlZhYUlFNWFSTWlPZ3YzSk85QnJ6c3NPeFJSRC9QYzJmVzlieThVaXhmQ0JmMk16Z3dEdHp2YUhTR0hxM3NFVkl6UWRSclVKMXFaeTM2U2luQTlKb25IS2VEaDlZYlNYNkdxMzM1RjBCYXpNbUJnb3FIZ3dQakkzbisyR1pIVVpORkdjUmVSTk9BazVTdk1sZjVlQmVWNTR0SERWSkI3RGRwbXBMNXgrUmRDQzZWQ3Vla1lValU4VDJKOWsybnJVRlAzYVRLNkZYRXgvQTRscURyYVFlM1BkSG9YL25kanVvdit0ODQzUDl5Wmo2Vy81VUdGZURvTHgzQ0pvdWhUeUtLQWhhZHhLME1uUDVSazFIRVJkK2hPa0JNOFBpVmJZWXBnd1JwSUZRTC9SamYvbC9NVlhzT08zeW1HVm5BN3N2S2xMYUx3VEJSZTB4MWtyczhZNklEYU1UOUNmY2pyN3U3NUdsbmtld05Od2NlVzZ3Z3poU3Q1MVJZK09rYUtjbmhQWVJLeGVlOStqMk9oRjBKUHFKUUlzQ2ZoYUYxR0lmRWpQbDlBMHIvWHNnanBDYkl2eFg0OHRaTEEyZStMVTB1bEcxQWlQT0UvYll6MmJDeStZcGdxUmdKejNGd3hob0FaNWlvazd6UWVFYjZUWlFlM2lGNis4QlF6ZGZqQzlPbEZyR2w3ZDB1VEhKQ1ZxbGFhVk5Ea0doZGg1RGowTHc3d2xBOGw5bks5R1AyT0Q1UGMxbWRVQkh3MmFYd1UvekdSVmdnNDJnbHRsOHBvOXcxWGV5WXlhSGFSemhqMisvMndOL1R4bDF2TWtjMFRWdUt5YnZ3ejlYZW0xMCtDRTBLUVBERUh4c0pqZ00xdml2QUV5Y1R5Yy9TLzhOTG5VTzdVcHd0QW0xaVY3Wm5TMWw5Unl3RUV3cVU1dFB2Um5YNjJMVzBRUnBKR09Bb3g1bTRFRkV6N21Id1ZtaEgyZXZVb2VOc2hzV2ttNW52a01kSGVZekxyRjR4N3paVDdid1ZTck9QdXYweWcrdW0yWVQxWXBJa1BTVGhWd0NhaFEyYmxTVnNLZXR2NlQrVlVJSXlFcmZBSStlcDdIN0xaNkl6TlNaZ3hoVUZiOVZldGtxRlRySENnYlZuTzJhTUIrdkdsL1JsNzM5djl3TVlNNTVkcm84RSt1YUtKR1RRRkdzOEtTMUhIZHVXaE1tcEU4cVBwc29KMlQzWjkvVzdVTmd1eWQzclVyVEJPaW1ISnd5Vms1MVozR1NudkFtd3Nra040Q3hlZHQ4SFNNZUt0cmh0L08zYnRPOGhlMksvNFFlZ0JlcndOR01wZGpFb1NlV0lYQnZQZVBKS0lqUUQxQXZuRUFuUStaMGFMQVhSd1pJeVBxbE9kK3BlL2dnNExjRWVMcGNKNjhTR0NTYTlqbFhjdzFOaXg1TXdTT01Md0tEUzhaczIxVmJzbWpMNEJ5czZoVFZkK2c2UDFNcHBTV3hhUUw1SnBsZzlOSVI3YmhLVmtWdUtzTVhJekcwVDhkUEJMYVBvRG13ZjB5cDgvR0FBWEdCWTJncHMyQnB0STJtSVFuRTdpK1F2aU1wbXNzQXFtWmtDR0Rmd0dKVnAyZWEwRnJJaFFBUFVRM3Z0eEQ2Z0ltZXpJY2VjbERVdkc4QitFWmtrN0ExVDluNjBpZWhDN2VFMEltby8zaU02cldtMUJlekJGZlh6d2RyUlBrNlFlb1BucjZGMlNyZDI5N00vcy9pYzRNSDJGVHM4eGF3L0w1cFFkaExiNlNHUFE0cVpLbGpsOWZKOW1ETTlsQXNBMHZRMElIT0RZY0t1SXM0dndycXZiUlhyaWZ1OUhJdUUrR1gyeXlqOVVQSmhValVhOE9ORTJNNmxyamtGcjNBSDdVWng1b2NPSEpVdGVCaWh2a1VPZHREbEdMbDdscVMxRVlPdlZBeC9GWjA3RDI2bkJaY1l6aVZ3RWlqb1FSdHJqNVVOSm1CZVVGZXVHdmltMnFLSklYWllReXJUMzB2ZnNwQStHdTRPa1huRmlCYUMwTnVqK3lteit4Y0U4VDBLYmQ0dGlGcnh2ZmhMdEIxSHI5bDAzTHJIUUxvazdCRFlGQ3hRQnRPUm5UeUFqZGQzT2w2ZXo5YVhtc3FDaGdGeFJuWHBkQWZDV3hRVzM2bmdkWHBjTnM2azMrWGRwOGE3d25Ydi9tcFNrL29kaUN2WEtiUUFFYndNQllUd3Y1b3Y2N2I0UWY0b25vMnRKeDkyRVUwaDlPcnR6YjRQZCt2L2o5R05WSklsL2RUSm13OWRUeUJXdzdOdGRuYzQ3VXhMbVVpbWpCb21jQWp1Y1ZhYjdQRWtzN0JFUktBZ3lmMm1XL2h0endNKzlIN1Bsc1FTZW5QQkYzUW5PV3FRQmZLSWFibEJxN085d040MFREQjJmRytFMnlISDgyMWI0bnIvVEdWSC94aFpSWmErNHYxMGV4dktvYnZieXlnc1FPbmRhSWI4NTUwRXRLdVZiQi9pRFhKcFBLZlc1WmRJb0ZYa3paZDdYZGdnNmRadHpDazgwTitJMHNUQUl0TXo0Y09PQkFNYkF2bDFWaXo4RHBXOCsvNDFHUnFKeXR2L1BXRVg4bEtkZUVFVjhLNTJTZ21ZTDBzenc5L0R0OFpFQ1pXdExmaVhiQzROb0FldFdad2xUQ2IraHVHVml0VlN3LzcyTTdPNnRrdVlGOUtldnFjNHdxRk1UR0pheDhKRWhIUFd6RlNXb2kxQ1JYSEw1WFhRa3U1QkxXT1pralkzZGowbHV1amFiZlo3enJDNW1LUUlraHJEMW9yWmo2M3J6ZUJwK0ovT29vdXZUM25SMVd1T2hucEh6MFg3ZWJLbHNvb2NGalprUWZqRWRzanRQbk1NTkdrYXpzbGFqSEZFSmc1YmM5WXg4dTVlMXhUWEF3M1ZLWU5MWG9MZldSSUVxeThjUEdOallYTkFxS2xCTWhmMTBtVWtJb1dsVXJMWmh1SU8yN3FJYXBMUVN5eWxwOTFPUEtpOW9IckhOQm5BemN1bTdzZ3lsZmN1RlZrVU5kN2g0V2N1STVhVkdBRlVFS3ZSSU12cUdTNlpadlJkQTMwa3pCRjM1bThHKzdWNWhBRjlrN3ZKb2hDTE1FVXVSSXBiaFN6SHU4V0FWNlQ4M3M3S2pBTWVtZUh1am1CZUtLWXZzcGxDdC9JUTQyZzlQbjFZUGROaTNQVFNYTGRRZXFSdU5UVVFwUHhXcjN0YnhZMW91NGNUZzltV0FHNHp0Wkp1YlR5dVZ3a01FTm8vd1FVUmZ6QWdaS3lrMHJyeEhEZjQrK0lLVGRDMDJMN0dmWkYyYUJ5Vkd4Tm5MczZoODNhdFMrRjJUZHJzd0lBZkRkeGZEQTFBWWtubGF5M0tEOWhhZ3RMTFg3d2tuZnFSR1NSbm42cTZVNWhrV2FXK0U5ME5vQVJ6NUtzMEJvM1FVaFc2MjVpVzBOQ2NmVUtIcWI3TFVSSnRYZlRRTUtheG1mK0VDWDZBdDM2NnREYTJHR3NCUy9nc1BuVkE4RkVSeExQQTN6aXI3R3NkcVRkUXVudzhncUZhdWhoUWhRa2RpVmd2MUNGN25QQnVFSTQySWRpa2tFSFNvU28rRENoODNJZXhOMVlyZGhXQWVBTWNZWFZyRlJmRjBLSHh1ZzQ2RFU4Vno5Wmw5K3dOc0dVenkxbk9XcHhUUmZTTlF3ZXRKY3AwV1FUbTR5WXpjVkdZbTZLdGhtYVMxNWQ2Ym9LcWQ3WEs3WGt1YVFsOVQzbHg4Y3pMMWFQRG9RSnlkVXhNRDRNSGhsb1YxWm5UT21WMW5zZTE0WFZiayt3Mnl1VUZxeldmZndNeXFwbTJOVm1BV0ZMakRHN3AvdU5lakQ5L1k4SEZIdW1nN0dEUUg5NUZYTzB5amFSTGlvVlBDNEViYTNHR0dqOGl4b3dmWGg5RWhxS1cvZWgrb0s0UWJWblhjYU5JdHRZZWZWRlZnVFJTV3Evend4YjQ3VlpWdXc2cDVoSHBqMUJSMlIyYnk5U3pyaVBWeXZjbytqNUdmOEc3bjNibGhXN3FjM0l0Si9Dc1dHTkpqbHdlZ0ZLbWlwdVh2bTBDYjVmYW9qYUVUUXBqcVkxTlpGVnJ0Nm4xVnFuOTJ4ZlppTVlmeWNSYWVPbk55c0FxRTI2L1NYcHhaY2FTRDlhdVVYcExBNS9MRXlzanFzSXZZSlRjV2FLbHFGSyswd0RQVjJabnJid2VwZGhRMWdCTVI1dGI4NXA1OXE0OVNYRXIzTWxvMzVWU3lBendKYkhlMEJvU3RRTUIyRW1jZnRUUTE3N1ZoK3Y0Tk1Qd0taVWU0N3JTSlNTTFhPdGwwTnd0azN1dTVGdGM1UWNxRkZTdWFIRUNLOFRWb2JlWHRiK04rcWpMM1dib3BKRDAzZHhZeWo0RVNtcVVlS3dKVXN6KzVrQ3p5RHNBM3lFYkpLdTg2bW5DZ0JYbFFrQ2o2M1RHMEdkVjgzSS9aL3lZS3VERUlabXVZQ2dkM01tMkh4WmFMYmNmRmg3YlNNZzZ3alJzWG1qYnVJdmlMWWdsVGhJQm85SjAwQkhrUlZ5M1Jmb25YUWYzSjFWbWc4Y3NWaUljdWdrbUtuUFVLMVhZN1hyUkpHYVByRGxwY2hDaTFxTGpZUERlMmtTb2VQOUcvTkFLT2ZpamtVUjRPUC9iTjFmVUx6a3QzdEFleHE1YVBpbitPSG1HcjJJMFpUQ1Q0TnNJcXVmTFl0TTZuWTZQNnpRTWVDYm1INDRnVzNaazBnYm5MbXpqY3k2WlUzZmswaUlXRTJnNnV6UHNhbEtUdHp5QzZtK2tNVHJQZHpqV0ovUTJibkdSQ1pVaVA3WmdVMU5rUStpU0phYitkRG9FWVFieFFwL1pzU0ltM3YwbHhLWTg2MytpNzV2Y0dDZ0lqRUJxSGNvRFF6UGd1bzhMTWNHVEUzY2YzZDRvaXF1dzI2S1lpc1VmV3hOZFY2dDEwdFNMcXdteFgrMXJXK1U3azExdkhrbFBJNE5jTWgrSkxXNGFZdUp3QWhIMXYxMmtkSVU3c1hERm5mTEZJMVU2dTlGYjNMaG43VHY0Mm1Mc0t1V3BXRXQwd3hCeW1qek9WSlZXUmx1OWtHZzlxWjkydGNLbWluTFkvUTJiTUVOR0tTTDhCbEk2bHBDV2x3QzBPS3h2VFE2eTVpdHlIL21iZXg5Yk5Bb29KMkJvaURnQzF3WllaQ2NleTNPYytiYVViR1Y3eTdIRU9NTFQwNitReDVWVFIwNUhXSkZpRm5DSTlEQ3U4MGtTL243UW1RbVhNNTBVZDJhVy9uVUdjU2svd295OWNvU2lEQzhDSUxIVGQ3NWNudGcxbjduTXM2UW12WjVvUEszYlpPbEVkd1RqQWZaRE1aWDMvZjFMR0kzR1dEMmhoNVQzZXJicEhoc2FBbzErWUlsUjQyR3lGb2NVZWV1TURjWk9lVkRMNW4vWTZTb2xDcFo1N2lMUHV3U1liQm1pWWcwcVJCOXVUREU0SG0rYUVxc3NBVGlBZExqaFdaYVpPa09pdHpDbmJvMUg5SVhhMlYyR2UyZ1NNMmpicExsWkVEK0JFaHg0MGVEQzZ4RUJ0YWtSRzcwM3gyNGxxVEozc1g3dVFtd0NLTDhVNGNlaFJ0ckRoYlduTkFXTzE0a2lsRlg4TVkxV1Jzdk1ENWtXU2ZidlZMak1YOXFKelUyelZVMnFHNk9xMGdKeG1PeEFlZ3E2YVZjdHhrUWp4MVd2RnFFOGdoWk9iZmZ4MVFtMTMrRmMrYWdFaFoxQ0hpbytRbmozbnZ6MzBXUUhmSHhzaVVNUlBNWC91N3owM014WlNLcnZCVGxJZ1M0OFJpdkJqR1Y2TnlaUVd3Qmt3aVhRV3dTYU9vOFV3U1BTSDkybDloeFJSZEJ0bnNZSWRLc2lXOVVsakZxZ1IrVjN6elZiTnIyR1JFbWkzWlBmT1FtbWFla1o5ejhLS2EwM0dXbjdZQzJ4Q3N3TWhybmtvMmJUUnBMMlA2U2h1TFhQU2poMDduNzBXbDJscXF6RWN2YmpwNGQxSUN1b2xnS2I1SWs1eEF0TmJRbFFJSVlxbm9FMnR5MmIraHhNRnB1RGN6RFhkZG9uamxaKzJjTkhhS1F4cGJOT094WjhaZC9BRjVlOTMvdDZFdzNMd0hWd1ljWGJzS2NmdlVMUUtidmYxOEVlWG55SlA1eEcwNHA4UzNiSkdSQ0tNRUNmeXIvU3c3WnhWUkVSMFRPSkRuTGkyWTVzTysvTHRBL0VlMk5nMkFLazgrUHVDWmxyZkFJbmgzVkI4ZjBaR2UxVVBrbWZHY2NsbmE5M2hqazhUWDZ3R21idTI0YTRFb2FsaHdiYUNDZEdHQWhGaGF2eHBsb0sxeG9sMWdKbDdpbktURzByeHF1dzVFbU1nTFZIdGpmRzFaZXRuOXJUc1R4Z2tzZXYrb1U2OXF3dEJ6RUVNd2EybVZsZmtOOExQOGx6clowMWl3Zks5OUxVb0JQazJQcFZqdGhmMGF4ZVVML2JSY1lReGdhOGZqaVRBZVJEcU9HK1NMUlFaNVJ5MXZRaEFKTGNBUncyei9DYXdJdjljQjI0SitUSWRDWVZMVE96WTYvb3RzOHFQN24xRlJyY2dPOFlnUjRQUkd3Mm5SQWZCaWhxTUt1Q29aN0tWcE05VnRMRVBubnVaK3dvREdTd1dZdG82Rnowc3JqVTc0WTRRN2MvUU9xdkpNWElybGd3TXN3UGFuNVlmc0pzakRNVnhvWm85UlI3SDJqRmF6RjVHeXdqVDJ5NHMwSnRObEFyZGJZTXFZZ1VLcHpPT0dBZ0lDQTV2cGtBT0RranhQWkV2WGlZUXZqREhxTDVqRVEraTBicTh6KzRRQjk5YnZDTFFUUmpuTjNJQ0gvYW9CVld1ZVpZSU5vZ3F1MGc2UmxjcUJTR0tleWJ5OVN2Ny94cUhIcEc4c2NlRjdrcEI0dlJKdzY4b3N0Um15aVZiL0NscExPYm1OVUVMd3htdUpQRlEraXh5eTFqelFtNmxnQWFBUWxwdkNZeG13RmxsVUIxU2t3a2FLRmZybWg5TUJ2cVFwd3FoYWdwb3pwZitWMlhvSGR5WnU0WjU5bjI5cEFKSHRDWEdZV1RLQjNDRDgrMkEvY1NKbmdMeDRRYUI1NklHVHVzakhiQ0pvSkMwNW1STXB6eEZ3OTJZSitBMkplMEV1ZlFwSmhOYjZVQmNNTUhwYXZiTHFackVNZHhkVURaWjVuSEJQTUVoSGdXSTFXWHVXeENGRGxHc0pHMEVSYkFBb1l2T2hFNk8vUEZZbnBRQVlPd1kwMWNwUk83RC81RVdpbEIyNlJrK3hrSWZraGM3V3V0OGM1dWdvV0lkWXZDaUJ6czhndmJLT3RWbURYVDc1Qkw1MnAxSVd4bzNDTVFnZFhwQkpmSDFybVhOUEJNVEg2bjRNcEhXeVNMc2J0ZXZLMTdxQUxpQTg0ZjZmSGM0UEhNVDYydzVBVzFadGNlcXlGRlpNSVhyMGRwdkJGRlp2ZDU1amN1alBoeXlSWEFlTDQ5bkMrNkNpcTNMZFJtOGRLeHhnSmVhTzZCbWNQZDdjQ1dTbzlBSkpYejBnazE4SkpwMEd0R0FWNGJXQmRKNnoxdVRITVVua3U1Uy9CU2tIVmZUeGZlc3RoN3VsL1Jwa28wNENobktPNnNySU12MlFqcHFUM0ZVZERTYVVkZE5wM1NCRnQveFJIeGZPdmlMczBRSCtkUFJ3UWxST09lRDFmNjFjT3E3OXIzWE1KeS9JK1JDNjBIZmVlajA3a1dIb1lxZHN0N0Q2Sk4wT2MvcDRsWVYwT3NsOTB5T25OblpjWGFjR3p4djluNjl6RXN3VjV1SFFJQXUxdlFvMUN5TnVXaUF0SkJTZmxaV2crcTlMNTZzeHpEbHlkdURaNkdsaVZVVC9FMk9IU3Fld0FwNldQajZyVTlYQnUxQjhMUWlja1Q3T2ZEMWhPRnA0Mm4wcGVjcG0vczZXTGlZV0ZQamxSWjl1ZDFNUVE1QnU4RlF4QnpocTF5ZW1rN0hQeTFKT2ZhODJabm96NVpsWDJrSTVvYk9hZk5KdzBpVUoxQXNnZWMwVHlEbkNvQ2t0Smk2YktkQjBMSWhyRWhCaGc0Lzl0SmxMcXNsWEt5KzFnVXVabUFnaDFxZ3loVkJycWkvQWYzaVBNeFlXeURPRTdqckV1b3BHNVBPR1QvcFNvdGxCZjh1dlczRlF4V3E5eVVEWG5PWUZjMzhjRTFqS0xsU1Ryc205TlJiUWtQQUNNd3RCbzhKc3pOOGJDVDc1bjBadytPbmpOMnJ4MHRwWkpNYitjT1JhQXdvM0NVTWtqWGxuOW9SaFFFYzZwL3duU05wc3Y5cktpbHNBVzkxYjVjZnplZ2tvL3NVMVpzSnZmQ21QbnBqWDVBY0I1dG9kNC9RUFNvdmMvcVBublZyU1k1Ukc2ZTIvTEVUZEx6cWVOR3FNMjJPZDdYclJRU1BCRm1CNWZGdHoralJ0ZDVEd2RXY0pUYk9TQUc2aFBNSjVYd3A3Z0l3czd4L00zMzA4dmpGaFFFRWViM1E2c2ZWR1BTTzkyeE4xYkpPcUlVNGcyZHhIdHVsaFl4ZzRpS0VORWNpZEI4bzUvUFpPTVI0ZElUU3prb3pRemN3MHRXTG9ha3A5eDhVUGVuN1duTzZYTUltdG1CM3IxZnFhdnhTOFBpVmN0NlhlMUl3aXlCUXpRUi9DUTdJNnVjallVU2N2c3FGdUd5aHlCNWhJdGNvbHh5NU9oZy85anJzODcyNHVGU04rV3BzYUFsL0p0RGdJVXlqYWtTTWhaYXhSUVN5a3RUeHgwOXhkVjJkOW1rVUlnb0xTRnNnWVV5bnNxa2ZWMmxEL0FzSDFPdnhxQnhTbTZmamxFaVQwMFg4VjVoS2FEdHk2Z2RvWTVZSHYycE9qWUdXMm9VbThvanpuQytFYTdVMkdzRVNXbTA5OEtvbFFLUElrTHEyajlaRnRIM1BPcHhub0paQWExTndzUHYyOFAveDBmVURlVTBSQnZGOWJ4VjJLWDRjclZwaEV1dklESlhYVVBZekRqL2pUODNWWDB0YkEyZUdabGRGaEQ5ZExMWS9QV2JucmZXK2FBbzhlZVdObTJZRE1DalpxUnllYzlxV3FtQkx3UWpYeXZsVnROa1BsR3NROUtWelJDQnlIMWxrTEhxak03M3lVR3Y4bDZCSUprVG5KRW5KU3N4a1RMbTlSdVMzMDZ0OG5iakozNE5MQkJmTHltekNZUXBoYTdkeVFuZ0RRcUV1QmF6b1AxVVBsbHB3N3pUYXNzUWJGV2h2SFI0WGN3cGdlenkwVGJUYmFTVUJNOXc3K1pqV1V5Tyt6cmN2b01RWGFPdDN4MnVGd3hJTmVlRGFiYzFqbDNwQTlONm1kSHFkNUdxUVV3dTZNNUd6UGNTb29tUzBFVGV2ellaUkEyOTRTZmF5dktNbWllTTR3SE44aWJPWWZJT2lKcjlFdUFQS1Q0clFFQ1JsKy9CZ1B1OWc0QjBQUmdQeUhVNHlsUlg3aGd6eXZaOUhlbjh3d2djK3dwczlqVUFEV2tGcGg3MUdNT2tTMG1zcFdIcUxnbzk5YnhDd2pCNVdqdG4zbUxvQjhwS1pQanZyMzh6MEhCV2hVQWRsa2ppdEcycmVEd3kwTUZib0xLc0I1cHhEUGpXSkFDMFZOMkZzV1IxNnhHREJsQk03WE91aGJZOUI1aWhwU1dyNit6VWk1bFkyZjVhWEdvdVZ0eEtlWkcwejBtZGlvN0NzbFhiZ3JqOUlsV242N0Izc3c1NVptR0RGZmZWaXZKOWEveWF0WlhzL0I2MVB3ZDFFVUM2bnYxN2ZXNlNLWmkwdndJZ2UzNloxbWx0M3JXNEZKRGYxZlk0V1g4WU9BeFRrczNjZEFmK0E3dDVRLzE0MkpKazRWaEh4aWJKZUg5czVUQTVIbmUyM20zTlltWHh6NUI3RHB2eFA2QTRoV1pRQ0NqYXVuMDRxM3ZmMGYrcVJneTdRVVZURUs1NUJjaElaYUxiS2ZZWEE5azI0enNTT2tHNjc4d0EyK3p1VjF3ZE9rckJZMEdVSEt5OXdXb3JpM1NlcjJZSlo3RlFYcm9HTzl4amJjMXk4dE5zemg5ZzZGR29ieW9ObmU3SnU0QlNkbFVzNTY2MWtTakc3MHF0dG42SmcyeEpTdXJjeDBPVXhSdU1uVTBLQysvSUM2OVgvcElxaFQ3VENPQW04TUt4dDJpaUZjVThNTHlXeGJaMHBRaEJlZlpvM2JUVEJPVENhOUFpWE40L3dnM21HTWp2Z2hacVl3TERQS1djcitCRHRhZXgxTE5zR0EvWDNWbzlOdGhNdjVGMHZTYXVUVnNkVlBjM2JQWnpkZWU3YjNFZTRGcTVrUW9ET3JaNlpGT1RpRy9DSFl1UjJlMnJLYTM4YTM4K0t2eGEvcmgzamNNaHVya1JCdFk1RVl1NWVnUS93dUpWSVRrNXpGQkxsYnJJR21ZTXRmMWltV2ZxUGpmSHMyY1ptK2Z1bEJZeUV4ME5pWEtBTktvc1lKUUI3L3ZzQ1pvdVhyTHZqaHdwc0duZXVqeGw1OGowMkJnWlRpZ256U2ZqcGJHWUNiS0J6c0pnN05jaEp5bHpyMS94VEhmcmlOajJvd0NEWGlLN0dWMzVYM3YxMlhTRHNIakxWZ2g5b29hT1RNR21iajN5RFlHVk1ZT1plNWpRMU9URkovNElhK2k1R1N5RS92bXFGZEZCV3JyQU92bVdSSEQvWndyZG5PMnpFY0JYL0dFbXBMQzRiV1ZoTUUxZmZSME94WkNXM3FPQTJIK3hTb1Noc2Z5QlFqU0phREFsUVErbzRZVHBrK2dPM29Ia1RwN2VpUWRKdW8wTlFVOXh6THJwdzJ5RDJyZVdGVUtPRWhUd2RNQmpReDdpL3RLcytMU2lkTElBYXZDclF5VVI4SWdUK0gzZ29QZldZY2wycmxKQWIzYmhnRG44bnF2a25vOVZsdHpTKzZkbVJkRmxCZUF2c3BhaXpLWDg4RlhjOVkxcld6Y2ptUWJnUmZ3S2dEM0xPcHR0MEg5ejZUajlsOXZmV01jZHNaanhEQ0FXSURFTHJwRFREMjA0d0lEWXFyR0lCb1gzcTFmbXZmVU5rME96UWU4K2wyWkppOWwvZDEzNm5Qc2ZSS0JSMmoxVzlzdy93QklRYk9OcEFIR2xqZG9HVHZ6VGRUMFNjTGlYM1JzY0dOSzZ2MWpnU09EOVo2MzVmalBiVFJQN2MxMnhaVHduVktzSjVVdGwrR09WMytaMkZBYURjMWpOQ1dtenQyRkZucloyUHYwYVZTVHRvVmx5S0h2b2RUL1h6WHdmcVc4RUxXYjJTcWJpSVFJZ1Azc0VvN1hWU0JoWnNZZXd1cUxxZ3VVNEFOR1MzTnFmZFZoMzFxY3VVTmJVRTdGcGI4RnVZSkFvSjQ1TDZJL2tpWDR1OTFJK0N1VW5PWFdhK3ViY3cvVC9hZkVadGpudHBCV1gvc0xmWG9oeWpDZ1dkOXEwMzVQUFN1dGV6WGNjaGMya1cybTUraW1FU1NnbVl5ZWNUVmJEdTNCZVIxNkNjRjdNL2ZaRTNpc1ExckJkK2pEV2RQaUVML3NRdzM5Zmx0RTFQMk1KZnJhUDFxRS9yYVAyTUQvVm5SOWllVDZpKysyMHV2dnZ2N2RYUGZmZlFERzB5Q2k5MmNmMXh4cGZweHNYL0RSTU5lNlhVU2wrcS9waG9HQVh3cXgwNVhmNS9ieHMzTUlBMVlmMzRFOTIwWXYreXNySUZmblpWNGsyQndFc0tNbXFpNDBvSVdxQnljeTlLNzJyZmtDOGtlTkkrTTFnakIzdkxKc0lKN0NkUEpuem40YTVzbmtGdXExbkZoLzdhbEp1cG1HVFlSSjVWaDdBVHVFQUFsNzhNd25DMVkzQngvSk9ReHMzcVpGVGdMQkxmQXBkOUdNaVNQZElRckxzZzZBRVZJTHVlcDNQS2tGd0p6QXFmRk9oczRvdVBvQ3hwdnhGbUgvQjF1K1hiV0FpRHNNdXhLZnlIdkxGNE8xUng0aHg2dVlyTDFRbUNPSjRFNW5IVU1UNVRqUWdqSks4eFhLait1elVTV0NlaDRXY3k2YkVBYnVHRWRqbmNZNDQ4ZU5EYWE0OThEeHhGTWRlN1pzOThvb1BUa0ZJSDY2MzFUR0VPc2VHQXkyZzNIMlBkNWJvWTEzUHI5akZHS2FPUE9QQjlnWXRPaHpCV01kWm9HUk9RWE0yMVphL3N6VzNLRDVIOHZJUlE1RHlCUTFTeEFUSHlGa0FYMjZLbnovRWhiUzY3ZFVoN0tnRi94NVp0V3paVkJubnpoSURNVWZYcSs3UWhYaDZabFJrR3pRdnRaMFRFeHVNSjdGK2NlTkZOaUMvYnVXbzkzOU1LdC8wd2pGOFh5Um9RREt1TXcxemkwVy9PbHNpaktyeGY4OUFiY3dZMkdQQk5XNXNKbU52TEhpTGRUTGlnV3dRdVBxRDhWeEJOeitlT0xzTWFldUJkZ3k4VzJLbDBLRmZQUXV0S0Fob1JwUkFqMStldkRTWVBLTU0zazRvTkFmajJCcGozc1VEdVNhdmdHNjNEMDkydDl5c05zaVFxZXMzUTYzc0IzR0VzTlZUTXdpUUhMaE9ZVmZwM1dwVGo3bi9zZWg3NlpTeXNXbkRLMmxuOGN1dm13TjUvNXFOQ0U1ZDN0ZUgzNjZOdmd4NllSNHVJei9HRHIraC8ycFBZaVRSMHZBejB6K0FCSEMzRVhVTSs4dVRuZ3hEWkVsWVNUeFJrYjNNY2dPbVlnZU5wTjhSN1NvNWlDczl2dDFxRnZYaW9ZSjV3ZzRTbk5aMDNtS0NSWXRIaTZHa250K09iZE92dGRNRDVWZ28xbWtiUmNNdjhLWHBDOG56d2U0ZGJZdklYU1FaSjIrTERDc200L3VpQ011NktoODhiMzlvZ1lkdmY2V3I5Ung3MjFBTm1KTTFyZVcxOVg2M2g3ckp1d2J0cWk0dCtnRHpIUk1CQXRSN0g5V3VEaGIyUGpQNkE5QUFvd3Z4cmY4NjJiaGhzSS9Yc2wyOGRrVGU4cCsvWXNNMnZvSGh1NlJUWUFGNzYyb0lWSkI5M3E4UXUrK0NEMGw2SkRIVnp6ZDl1YkIyTG1tV1B6WWNEYUI3UnVJT3MreUdMSWZQQnV1MElZV3Fna2lhQ1U3U29hclZLeUppSmZZQjd4K053Ym1Uc25RV0FZQVZpRU5LVnFRU1M2TWxLSTlmRmUyN3pKR3grL2pEV0dIYitrVFpzWDNXSWluRmUxV0E0TlNkeTZRZWs5Q2p3UFY5ZEFDVkdWQ25wQjBtNThwY0FZK0RoNVJmOGliUHZqdkgwSEwyZExMS2hsTTFxV2greTRlUlpRSWVhbmZTVFIwbVV3bXVkcTl5NzFScTlLTWxaajVMa3NyUWgzV2FmRitpSFllcHZ6dUsrRFVxckRvb0ZXWUFvaDJVa0NxOExkWjlNdi9VNElHa0R2Y1JVcUtYVG1lYWtLYnU4SjgyOExUQUJJbmZ0aWtNeTNJSW5yOXNJQWUxWFY0ZDBPWC9BYmt3RXZRUVlFOUIyYmVvWVp4Q2lWTHR4cHU3cFN5Tk1GTVNkdDQvUm8vb2NYTTJRRm9WL1BxVjBUL0JXaFdXNFN1b1NTd3Jkcy9JbklObHlKbFJoZ1RQemk1c3ZJNGhFNnpSNlh2UjhXSEpIT0wvaHg1VTNFVXJiNC9ZZy9LUzdxLzA5QnBNQ1NvTit2WmZiWUpzZHMrVkRJVjBRajczUFlaMzAxWGVRdGN4MVdpcHdPOHo5Uk5vaGhjdU9PbCtWcTRHOHg1L2VlU1FRYWpvSkVHNmE2OG54dUdjOExWdFFLTHJGRTVZeGthZXB2S1hvWm9iaW8xRk9zM3Q5Vk1Wdy9maXZZbmdkL2toSE9hZytsSElrcEkxaS9tMGJraUZNSWN6ZWVsaXhUd05MYzlSZ3U5aDdIZFMxa1BrdWFnUWF1cnlmOFppSkhMcERMQVhqZWRNamMzWHJsMEYreHJIRW0rU09TWDR3WnZpTEEva3Avd0U5UXFXOWxTOWVhZVBDczlMdytEWklpeTdVRjM0cTAxRDQ1OFA1L1ZrZXl3anJtZmltVWNrNXNlRjJLSkFMMFlvemU1UVdkUCtiUWNjSzZCd2JzS3FwSjZpVUZBQk9DU3RQMXliOUk3cGp4TDAyeExhclFPbzQrYVFjTVJ2alNOMDFaRURiRkFHMUhrUlppK2RUbDliUUhyb2w2UlFUbk1IM2xoUEE0NzZuUnAzZjd0Umc4OFZJQ0dpWXpzeThPOUplZUJPeHhTS0VYNE43T0V4ZFlkd0JMOUNoZnRlL0J1dHVnZ3ZCR2dxV1E2SnA2UmEyYTFBbXp0QjM3bDlpYm1DWUUwa1VwSU1OT29OcVJMS3pvUkV4MlhnMUhjd1NUZUpPaUEveFMraWVCK2gySVMranphV0kzWnZqQXNYbzEzR2JRRHBpN1Yvd2ZKQ3dJL1czOGNOdEVTdWFFV2MvaUh2UHBnY055RnBUN1hmQXlhM3FOY2RHRlorZm5TWitpNk5rSWhlV2FmcHFiMnBpSi83eXBSRWxBdnBta0x2dkpEcXRQSzRLa3ZqZFR6LzF1UHIwSTN0TlBYcFVlK2V1SWZ4M2V4TFQxSklpN3Z0dzdQbHJlT1hwRk1hNkhKN2ZpbWpDeUlqcisyYkw0M0J5ZVNjTHVhY2FMbnJSWkFIc2Y4emd6bWxnWUVVRHU5bmlFdzFpUDRtWjZyWW84UGxuVVBIWUcvRTg4K3ZvbDY1TUtkR1BOMHVVREdkMWtHN2F0M3lncDV0N2Noa1Y5TVhYV1pLVDBUZ2JyL0ZJdW9HNVZVV0RHb05tWnBQd3V5eFRpeERKK3o1Q3dwNnNKS1VUeXJ1RlFUbEZVOUJBcnBaL29BcjNTd3lEWWF5bFp4citnazdDSG1BNml3RmQ4dXVNS3pIeFFrZkh0dk5RSElZZEtLVnBmU2QwcGk4cUo1eUdlbVJVVm1YdkxUZzErZHZsYjdCeE0rSDlIb0tVcmlSZUxVSXdsZ0hiVHJ2dE9yeXNXdXZIMmNsK0ZaV1drV1ZDRzhseWEweWRoMklsK2Q3eGRqcDVXMy9VVlNValV1bDhnNXMzS2NvS3dzMjd4bTBnUElEY01ERXBSM1dNUmFKR0ZRbzZDaXgxT3JJcnUzM241dzZ2ek9jdUpFUm11MHEvVWFrRzE4L2x5bXlNQXAyT0lPMHZIVWYvcVdUTEdMNy9yRGIyMW1Sd2VPNjlDc0xzTVdhNzlaMFFBeUduaU9laVJXajFlcHV0Qmg5U05sTlZwblhUb0lWWHJHc0FMQ1ZITGw1NmJmd2Y2K0xMbUlQdW41YXBLR1BPTXgxS0h2eURiYVdaSkQ4bmMwWm1UQkNzd0xCYjVwQWY0VS9pZWJucnZVekp6TjZtSnJxTk9PNTJGRUVyUGsya2hHQm0wQXYwSWhrRjZFa21Ndit2bmRFSlo4dnhKWDNBUmtKazR1MXhPWXlmOHRRb3NJa0pOWXhTZlhxM29iOWFZOXYwb3dOR0FNdHBXejBmdzl5Y0c3Yk1GL0JBV1JIWlZyWGdDY01FWFZ2TU1reVVmQW51R2NZVmE2VVlYbHdlekdsTHJSaVZwK3J2aXlhZUNHMjU0eUR6WnEveStkZThXOU9PSEh0c1Y4Y0dpNmR4Mjd3QldEUmtvRU41TFFjWnMxelBEalNQcDRCdmJKcFVvMUdSVGNUZVhYTGs0NUliV3lwMWZlL2tVRlliemhDRWNKQXNkbXJVS3JpRE9xOEJHMTkza1pQa0ZmVHBxM0dRckxzU0JwTGJVT1FEbVUrMG1lakh5MXg5K29FNC8rRWQyRXdtb3FBSkd1RE9yMGJWTERUc0IvQ3gwdW5OSFhObGRIeG5obThOa2Y0MDJCQ3ZFekU2MWpiRHpOSFR3UmViMUkyajRJMUFrcTA4ZGNEN0xyY2d2NEIva09udmxJWWNWcHUzMU1jb2dwRmNqMnBXUjB4SlI3MzM4cnZKQ0lvdVZIUHNta0U5ZWxxbFlRdytKRng1THZMMEN5UU5KZFA3bmV5N3g1cERqVXp3dmtWVFFNZCtIM1Zub1V0Q0s0Yk0zZXlSdmw5bUNxNUxZUGV0QUNBcWhqNUxyQlNtNzQvZmtoUmx1NkFneDJJOEFBTldpSXBkY3dsT2hiOXRkeTlYSldBM1pUVDNOSkowcXBGVVZwVEx0K00zTE9GaUlha1loWks2bnlUVWhyM1pJajA0ME9ickptNWo0UzRCRFlRbmpxWFBxbEc1bGFyeE10WVAyWXVaQmRoQmhlWWRsNk1WS01WeXlZd3FNK0h5VGQxVjlscjFGTjVVWklzWWI3djJXenFRQXR4L2tYUTlzUzgzQmZYRHdkMWQyM29XWmRud3A1YmlKZGt6a25GNXNUOUhtQkh3WlRjR1F4d1N0aURxOGEycExkOGRHeUkvTEMrTDBSMnB5WEV1THRDZURxc3gyejRJZXhjYzVpOGJYRWo5OGdWMnFxVXVWWmRuZWtmK1M0dXV1eEFoMHNORy9QWUJMeGZZMmRUcHg1VldJWjVuTkZOTitvWHppSFBzWmJ2d05ndnJySWxCZWtHQmpjWWF6VEh5U0k4VVNudE5RZm1tbm9jWTRPdjh6QmQvSkQrcDk3NENHQWRmSnFzaHlSZ2RkMWh3WlhIaFp3RWdNK1NhK3BJcExDdEg0bkhuOTJLbW1CakhTclgwRjdOdmRvTVRxdmZGZ1FxeFNyVDBzWTVHWEFrNm1YaGZIUnZFdTlMblNzeWt5RlFadmpyVFVBdGVTSzFnYXNLVS9ZNmozeTRrWDFVS2ZoSzdDcTN6MW8ySUREcnVLYnZmUFl6WWVBN3JKQmZwTGVvOVdFNG4vNFV5MGdUR2F4UXAxSjZiWG9vS0Iwc1lqdWRCRWJlNWlqNkFERG9lcm9pNkxkZ29TRyt5OG5mQUJuYnR6ZzBRZnhSa2x0YXhSNDlOK0ROeW9ndjQ0YTZEMmNRZGhLbElRUUZhcEtENml4THRYb2ZGZmw1M2tFZjgrNW5VOU04R1ErQWlqS0dpN0NYY1BhTG1GbENuMlB4MVFOUTE1a29LUm9CL0E1Q3lyM3VJMFdQQWUwQ1dwaTRVQXBkZGJCbDVaTUtzUk5HVFAxQXY4SjZkOXpnRkQySjk4eFJpUHFJWk1IakpqZVMzTEpsMFlGNTRXSE9PYStUeitqTEwxTHRaRmR2c2MrRDZSaS80S3F4VklHQUI2TWJZRFRVbGpnU2J1d2pxVHFBN3Q5ZUhDbzROTlgzVWdBNkYzN1JobjdOSHZ6VjBMZzhXbGZ6bHFlc0ZvekpMd0ZRWVF5eUY0SjNuWndON2t2S1dEVGYvcndWSmJlWFpJNCt4MUErZWRKRUJQZTVHTldsbFZOb2dZL2lDMzJhQU1malI2S2gxQytFSlQzZWJRajZpdGYvQVpvR3NrZk5SdlZLTGQrZk5uYjRYb2FzNzhRbTRGTktKUWtPNi95UDc5Z3FDRjVoaEV3OSs4eE5idUdWbmNrSlNpbWJNdGZiaWNTWUJVRkdudytNQmNWazFvbTdLc2dEaDZLT01LT1hFNSt0OHNYLzNPMEZnbEcxbXBjOHIrQjdsUS9Nemg1Uisrc1prSXRGNmtqUFQrZHdtczhjU2hkV2xGeU5rRWlzZUdScmlIbEM4ekRsekNIblNEZm1Gbk5MaWVnR2t1anVTWm9iN0pvWTd4K3F3Yi9hUkRnZVNEQVcxWVpveFcxTEUvZWoyTm9ReG1UNXpUSElGY1ZyeVlHOW05azR5QXh4NUsvYlgyS3Jzak01V3BZdjBCSTI0RnJsWVprR2xUbHpYYU5QVTlmY3ZrOWNFTVRSWEptSCs1THRMaFk4UUllNmFGY3NvalZGZ25DdEdJRk5rNEZkVzFzd1VieE5vUUlWQ3cxU056OTUydysyVk1qb3kwRzVJUHF2TmlSNHlQL2Y0Q1JkYkt3OEtISDRManJBejlZT0tpVDloa3BFR2xRUXVmM2o3SjcyS2VSYTQrZ1c3T1RKTEJIQnhwSVZGWkYyK0lCZUhjKzNwWlA5VHBmYUY4QzVheHpDNVVaLzFlR2xDZTMrTTdrc01hdVFiekNvRUtDcXNpKzFnSjhoMng1VHAzNFVVV1hNdGVEbnJtTHVJaVVnV2xjZmZVUVA5K3E0c04reGxZajZicE1RcXE4Q1hoYzVZU2twdDIyTm02Y1UxbldsaEFPS0JraTVOTm9sN1JZNkNTVXRuV281UjRjNlpLU0NPbXVqZkVIemxWUytTVXFwWkVDK1FiNGoybUVwaTJ0V0ZDSXZnaWtmaDM1eXNmNlRYYjZDNlZqR2oxTExVZDdyRW5MYjZES2ZsM2NEbjJXalRHNGpDVWdDQnJMR1BKWEJjWTUrMGl5SHE3YUJ6TFVUODdEbXFuMFgyQW1Nak9Nby83cksvekhrNWRieUhZZ2EwRXNlRUl0WWdXa053Q09JOUIzZi9VcmFBVDFDVXhwMjBQNmk0TmNCQUNLcFdPUGNOeGVXOUNDc1BvZU1UTWxhS1IxTEJ0YzltZW04bUpNL3N4OEVrU3YrdGdFUDlkcy9ta2VIdTAzQzlKKzJyNmlySGhrV0JBaHQ2WmF5SU1GVXV6MDgraTVWRENZeVZoTVNVcGp4SFZZQUo2YUFGTVpjWU93eU14djNNZy9hVS9TbXo0cWx3S3A1YWxndmJDTkJqYmxDS0tuY0JLL1BDUHNlTDVsbjVFb3R5SnFZbUJHakR4cEp5TStGbE92M0RiWDJyY2NIeG9PZVhRVlZQTWJIb2E3SXB4M1ZpcW1nWUhMT2lFZ2h1UW13bjZ3bHA2bVU2bWRWdjE2cTRDYTB5R1dIL0pGTFhWSzJRWW0yNThzdUppRk9LWHIzVDI1eVU4dVpNSjVtbWh1QkN3MExjUFZBM1p4ODB4Vmc5OHJXeFlQT1dLRWlXL0NWY2dHbVB0VEExeTAxeGszcGxNTU9HOXdWT2xJNm1LempDYVFDVGxaMjFlWnZmUlpCcVVFNGRFb1JuRmxEaFZiWjNjZmdybE5MV0VVSVFFUjg0Szl2YlpqM2NPWi95L01YSXRnTVpIV0R0NjVYSmhFb29PNTFQeUt6WmEvaEIrSlJ1NFNEM3FlbDVZdEg4QXp3RVNDaW9nUFlQbXRDVU9naWs3VWNWVmd2YXd0cStaTW00M2hXS3F6KzRRUExQOHFVVG1oZjJRNmtmODA0c0VoZ1BXakdOc2lBMzFaY1hKNEhPT29tTC9hRmNZMnJYeFY0WDJHMWxNL1RNYmJwSGNNTTF3QkxpVzNhOG5rOWh1bFRDYW1KS3JzeXVTRzE3MWRNT3JNK2JPRlRZd1FDY2hsdFBRR3E4ZjUwOEtwanE2R3JRdENrbjg5QldHOHBtZlBBRW1xQkZtRTVkM2U4b3BJSGo5OXBYamFxdlNKd1QyT3d4ZHR2MG1FdmFSYlkwUGcvdEk1Q3lRL0xQSTE1SmUyczVkNHpYYi9kNkpXT2VCVVJ0V2tBck1FVDBWLzdhR3lnaWVBbkx5WUora2l1aVZVUzhxNFdHS1lGRWRzL2N0TkdTZDdKS3lRL1FZd0ZGQ01sejlYL05OdWs0WnRYSUpsR29RWVQwc0ZWQTRNTy9odjhwV1pQb0I5MG5LVnRQS0plMGxUd0ZVVWE2RzY3WkRMU3NNeGJMa1NMQkl4dEk0ZExKZVZPbVVGdEU1MjZGWG4zU0c5ejNmNkN4ZEFUU1NITGRiY1lkaE85SGhoMXU1alo5QkJwYlZlMFQ4ZzBDNzNnaWxacHU0YkkvMk1waU9wSzMraUdWckZIRnYxVm1xaDJoZlBTTGpyQWhaZ2dMR3lDWUtJTXdKejNkWUNQWWpDZVJIaW84Mll3UmZtNUZuT3IzTUdJWjlwUmwvekl1dHNuZEZ0YWs0bkNQdHlFbXNjaFdLQy9sbDFGbjBaRWxhb3dWcVJBQi9WMXJYUkM4Tk9kU0UrTGlnSWJSSnI0L0xZU21ET01hYmtOY0EwZGVCbjBJY0Q0aEN6UzZ3bGtFbm9tSnNBSk9pZjZhUUh4RDJRaXNBbGEvNDB5UFlDVHNkRVV0SEtWTG8vSW9lcUVtWHVBSldpMmU2U2Nlb1c5SHlGV3g3c1RYYWk4WW9yNU84QTVzcGgwWGxtZml3K0dpeFErV28ydkJiZWVNSlpsYVVpOVRzSHdESEx1YmpaL0FOcS9yTE9aMlhVSnpQTkEwZjkwb0R2TVBqaEFRNGxvZGpMNW5VR0FHZ3QyUmlWTkp0VVZQSVFJT0FWNG1sd0M1V0lxeWZMYUFQOWR4b3krVUM1bEhMbHlUKy9SRW54WXlBYm5aa1hwazh2dkQ5UUQrRkZiRDQ2TFZpdE1xb2pRVmFTYUp1SDNKVitEb3BQeWZGVWRBMXZXblIydGdhY0VGRjNMaVZHL1hWeHU3Y3hLaXcvTFFJRHlJSWNkeWdhS01MYUNpdXVUYkFJclNLSE9kYzZXZ1piSTNOaVJPRnJucjUydDdTcElsSEFvcHBmSVQyREl2RHZKVUpHeTZWRTIyWHlSVzlVSGVwRUk3b1dpeWs5N2FBMytlMkdFT2svUVRxRUxsNUZyRndBbHVqeWZMbVNGeU9BZHpNTlM5MC85NWh3VFJ6RWgxbHhUL3h4ZUpQb3c5WkI1MGo0QjN6aUhzSmlJRGFvVThLZjQ0YlRTc0p2bGdyS1FaQnJIMlB3MHNWNkV2UHdWR3JCZzMzTmZKZ2h1aWplSGo4VVZuMEFnZjJQVEpsMDczbW5TNGtXYjVDKy9zQ2Rxd0V6dFZYaDVIbHFkVUdwbDhmSWNhb2RnRHM5N2ZDZ0R0bFBoMGxIRzZSSmdCaVdSV0Z1RnFHZTBBa2NjZDRDem10d1Ztemh1a1dwdEZ5clBvRTJEVmRHdVJLbWlGY2VOVVhOMTI0UzhxS2lHSDFiSkJvcUlJOFQxYUpVbnNDbWdnamFkOHlhZkYrMHBHUmV6VUgwY202OFBlK011NHVzVnNEbG5GYmF1VE5rWEl6MkhDdDcyaWpqWUpmRmh6emo3ZFV0aEFnTEUva2RKMU5uK1diUEdOajZBMnN1UFg3SW1iRnBKVWVoQzNDek5tSlpNbWYvV1J6blV4cTI1bmNxRzFJejQrcmhndkhUcU1ydzJZN201TVc0UnpHdGZpODI2UlowOWRGMU9NaUdlb0ZxRjNjZFpMd2NsR0dTV0lUL0dsb01JRnJKOTMvSzVJRC9Xc3NBNFFoa3FoQnV1dk1sV3ljRXhwNU0rRkNBSThzZTFaQ3h2RW5WZm8ySFMxYndQS1lNM3F2T2JWUnBSd3Jta29rNUR3RXhsUWFRRWR6dEp6ZTVCZDhwNVcwaVhLTWc4WWZwZ0FNSFMxYzZSVXJndWt3MEg1SnJKRFF3Y1VOMWhuOTN0cmdzb2hKdTEwdTNnYXNkUkdSTHNTU20rdWNtalNNdGhTT2FSTEh2MWd2dTJXOGVpVTFwOUZGaUpLckovdk1SOEthYlVWZmg0MUF4RlpEVWd4ZGs5cGhPbkNvVE4wZ3hPQTNLOFN0VUprLzBTL3Mwc0VldHVkQlBDdzBlTkNLbkdLcHBhTlVYejUzWHk5K3VqNi9QZkNlREpucWVUUVRrV2VBNjEvaEE1M1g1akVZZmtBMHpSMm1Cb1ZvUWlMQmR6aXpaOTdHTVdrNnhrdWZsWVBUTUdiSngyd1NtbFllTXRsU0NIc2JvT1ltcXpHTHlPMTlnZFJ3NVBXREZrZ2QyQjlkS1ZiMitPWFBpaXlhRDRVV2hIdWM1SVh4OUFKTWkxWklZMnozZnEvYmZLbVo4ZlFwWmNqRk11MkdtWjVaUXhWM1UwWS92RHF2UjhmYVVOdElGUTFGYVFlRGRpSzlMM3hNWTROa2xvNnRpekUxMURFNXhvRnZnMUlnVUpBRUptSDZMb0ROZ210MS8wQURXYmYydlovSDBjaEtzWTBzZlRwMGdpcHRPK3lTMnlDcHFLd0xGVy85MUQ0Wi9uNUZqNHFVSUJpNmxvMko1UlU3YkpwaWZpSFlocm1JLzZDQ1RHSW9ZZGdGVk1rRVJOZHloNFVTM2Q4Ni9LV0NHMDNDemYvcFE3UU9adnNqWUdwSE52L1VwRm95bHJjV1paREtlZDdsbWpndkpQNlZUYWZ3NVZ0a1JsN1JEcEwyTFhCZ3BtOGs1QTB2Nk9VanJqYWVHcFJmd0FnM29NKzJWdVh6VnJxbkFXYUUyUjBQZ3QwZXpzQWlLU2FDditLL2VhVzhkaXJCRmZSSnJzb2JKN1VYNGoyOURtdzVQdDMrMTFsckVuNkYrcDA5RWxpY01tSkt1WmtXdzJyZzBZeGJOQklqWUQyV3BvZ0R1Y1FTM1p1VW1NUmd6QkRSbFF2SE1WdkllRitaMHFWRXVTTldNYjJrbllZcjRJa3lIRm9ielpTUGQyZFhyaGdoa05DUGxCYTcyMUl0cGlNaGZBd04rR25SdnBzZ1YwSmdWUkYrNVhNTHA2eThxZzVpL3h2TW94MFlodlVWODdWTXl4QmtZc3NRUXRPdTNCOWg3UGM2ZzRnN1lnZjV3OEx4T2Q2Z1h4dlM4enBXbkZwbXY0VERLbXVCS2l3ZzFzM2FzNzcxWStIb09mdzZrb1FTVWVSYkVWdklPWHNQeFllNS9nR2JSeHkxcXp2clFBOHhVU0lUVGxhNCtlWkUyaGZLTjNHK0Q0Z28zaVQzMVh0ZGxmbHJKUkxnVjdyaURXQU5UU1p2eSsvQXE2bkVsZUFrVXNUMU5Idzh6T2o5VGNNdzFodVRIU3diNm1IV3ppOE0vZ0VtQ3Q4alZmL1NSelZXSEQzQmJLQWp5VGJRTGpNSllGbmRkVzBYMEFrTGhUVTRMWmxWUktYZHRmd0xFVEVxaC9KS1BySW4xMk44N3dVMzNjVUFGTUh5UHN3cVVrMDBlZStNNUQ5cjVkQTY4YzNIZE1OZmY3OExtbTJLenB4WVFJSi9XKzBqVmREak4yZHV2dlEwR1AySkZmMUtYby9wS3dqS29zSWw2NzUrY2dlVjMxOVRtWUVhTW9NQmsxZUk3bjBHd1Y2c3NXWkI2SEhrM3V1WkxyN243VUFlbWFjNlAwZzFmQmxleHlDdkg0SytReUx0SUpVK0xsandXR0JqT1BvaElybmJTUlpGZWphRTViTWhMczI5OGxSZGdOaHh3cTZod29qbXVFakFoYUQzb1NrdERWQW9PS1k1ZDkrYVBxNVVwL0pmTEtGY0xTeXNDY05HMlJMd29naHNTeFc2aUhHc2dObVlIY0VRTFl4THJSZU14WU0rbVRQZk4yazhEU2RSSUxSM3ZCWFBGNHFZZEczTGFlLzh0b0VPbVhKd0ZGQjBNTDAwcHNWanlUdlYvOHk1Q051WFZlQnJRNjNhelprT2lQMkY1dFloWVZPZUU4QzVvcGJNdHAxSzlXVE4zbUF3RUgyaWF1NlZnQTR0R3Q5R2JyaElpSHZwbGlIeEd2aXJESWhKV0MrdUlOWnFORlMxNVA0dGVib01KcS9LMmJNa09IUWROU0hoaG95YjlUbHdldDJVeXRWbkd0eWtnNDdOR2NwMEpNSWx3Si9GRnFGOEpCYkdDcG9VdFVsMTZSOVEyem1WMWZUVWMwOCtKd3dtNm9zTFovemNXRnVuWlNRaDNEcTZSZ2RqUWlnSHFYQ2pldnNyVThRWjljWTJGWmtsK1g4R0VTRGUvTktDVE02MXhpZU9rVytxZitMbktUTk16NWxGK1E5bHdGMUw0VXFibFBacnRtaWs5cTlVZHpTa2M4R1hRRnRaUjd6UzBDd2tYbTU5S0wwcG1lVTNWQjdjbENvM01VbWN1OGpKUkZxcU4vZGZ2YnZQRnpFVk1WZUNIdDl5c0ttSGRvalprbVFhV1JuSWluYmorYUs5ZFR5TUFSNEg5Nno1MTRPdXd1bHJWUGJuS0F2TzdLRDU0ZXJkUUpEekluU0tZMjhwVTZNdTVJNC8zbk1VSU9wcURONjBDN3JHb2xzeU1zQlFlMEtDMmh6U1pGSHJLN05VdVlvVUZ1Z1JoWkxaSThDWG02cm1OSk10S1FqZHZkOHNDVU9QT1pVY0MyTVk3OVNqTGNxT2F6NFY3eWg1TnpFeEFvRDBZZUZQdmlZWXVCNjIzdEZWYVN0MkJ0WTRaalhpamNKMGFuZlYrQVpMeXM1ckEyM216Q1ZDTmN5V2hiQ1BxVU93bzJGcW5ZUlhtWEJZZG9zSEtLZGRrckZYL0dqMG1SSHBCNWpkR2pmeSszdVRScW9TTnZTbXh1cEVLUDltMTkwNVFUcWJUNmxxQkRwS3k4WTdzTFY4eDB3SEVpQUJsTTVYR2VOeUlWc0xlcW9RZU9ZOUFheG1mdnQ5Sm1NVFR4MlBpSGVzemdSc0VwOTNqR0VRYjFhMjZscUlxOFA4SkIwUmd2MmpYdFd1aGFyVmlRaE1CQ1Z3ZFJPZ3NpTTVLQ21GbFRIT1RZaVU5eVp0Y01SbGdESVQ3eFlpaU4zYkFUSDVyMkpZdjNpWlpGNG9aN3duSEtIdm1ZV1hTU3VhS1NDTExFaGNybk96OXZpaHZVRFFrUVUzNEtULzQvMFczSFZzRCtHNG1tbkZrejFwL2QvZy9oTUlXSzhzWWowR3Fma0F5MXNFUUY2enFNV3ljV2RQVkN4aWxsbS8rSWFQTmhMOGtSbTFLL2xkTnRtVHh1Q0EwcUIzS0VKQ1dEU0lBeit2UHhqMUZITzZmNTQyTUlodWxWRUdoSEhVSEd6UGd5VjBHMzBxdjNGZUlxVU1FTGR5eXd6UURqV2F0cXFEbzQzRmJwai9JNmJLVk9QeHQxQ0p5VEF5MVB1WFdMNzdLeXVLWlFjYU9nTWhEYWFTL212T1gyVi9peEZDUWFLcmUrM0Q1RVN6VFFaRWZIbzFXZjhZR3lQYU5KVW1jOWt2bmtpOFAzMFUwdzlWOVVMOThzUHR0T0x2TkFaaTkwNy8yTW1yc2ZVZDZtZUJhMm15U0VaQUYrQ1FMTk96ZEFUc09vdDBDdWpnSTFkZWVzRGpwa0Y5RnRrMmhRZ1JxYnVkeEZPdWZsUWtteC9rRHRJbDk3dUo0bXJ1bkhLR1lxQXNSWnRSY3JjTWxxNVVQbnZwcjVHTmUwQmlCVTg5M2JqSXFUQzdXUWtBcWZiSmM5WTFrcHRPZkZ4ZjVVcUhUSjJBUVpqazRQaU95a2JYcmltbm1KN0dqbHl1OE1vN0pScVh0SG1kTTVva0c3bDlUbmY1UGN6UlYrNUprODl0azhQenp0SUMwbHVqdEhHZS9FOEtPbEZpTkQzR1Z3djg5RWJvQ2hZR2hRdFMxYmoxYWdiRjdpUXRPZHpUbHRRRWcvbklMbHhYZUlFeVN6SGNsek5DeUM5b3M1LzZQMWJsOXBDT2hlSVhZbGNoZW5IWVY1L0ZFN3M4TWVpcUw4a0JySkI5M05BMXNGS3BBaDNzTjhzaWlxNlF5Tk0zTzBoU0RzRUxOS0tjeUN4TXVydWMrcStBSXhhc1p1WVg4SnBYNTluTXJxNDczUlhxdFN0VGptR1E1VWhmekRzNWJTSzVVNTdYWXRxYW5sV3ZmZmhCT0h1ZVJwNXVVOWh0M2FEN0twM1VwWEk1SnB3OXJBRFlMeEhBbitRS2htOCtIZVp3UFQwMm14ZnFiQUUyNktZMlk5OVI2M2pET3lzU1BPSjZHOGlXMDR6VHYxcVJHKzBiREdpZnRQOTlMaHhod2xLVE80Z3Z4NmViTXplanhFT1NpdlVERTNpdzBiQkJYaTNiMi9JZkd2cjhmYlZjSGcvWUZUTUU2SUF1RnJmaytvRHN1QVRTM2UvQ2JDSk1ZeTBpOXEzdTVOTmViUVpUYi9LKzV6VTZkZGtCWnpNWHozMVR6bUsyNC8wbktsMklxd2tFWFF2eXlwbmpoQzEwRVlCTENNYjZyeUVUdEV0aDhjZEVLVW91cjYyRnhKbE1xZGtFWGplZnRiYUlBSVJrSUtldXRQSmtuUHk1NnlRRGxjc3c3dTFmNzdRNUVIeEtGU3FIUW1TSTF5bmhpc1pqWXFTZTNMdzBtTVRpbUYzbWo1VDdhRkp1dUtuQVRVTm1oT1J0VktZUmIraXpTem5ZV1JrR1JGWEg3bnZ2YmZKUFc3b25UMzlxQmx5bFpkTmcySmtPYXc1cGs2OXQ2a1JxV1lYVzlnMHY1WVExTnRxY0VnMlZKRVd6NzE1ajZ4eERaMCtvN1RtWENWRllnUmhqL0tBSE1kejBhZGxBTW9VZzluaUcxWlEzMWx1SkRrRGxuSXdwYzNnSWxjQllQR3o3K1E2ZGc0WVBJc3Bzd3hDRG0vRjBhY3JMSDcrTTlUMlhub0RCWG9zNmdsakZSZnlGVVV1Y05tNzNiUjNEays4TTd3NEhsYndBRzZmNGdyVE5keGs4NlQzMXJWNVpabVJLZy9yWnJBTSttc3cydnVXYzNrQnhzaGVOdXlzNU9xaS9ENmJkeWpWWmYzeHY2VGRybVpKYmtnY05yRnZWZXJQbXZkMVlvbzRLVDdIdHhOSUhzbVpHWkxZdGJweGdTZ0dISnk2THk5a3lvQW9MR1hvRm1Iejl1Yi96eDRyK0dsRDBPRE9RaXBreGRhMDlrc0NmYzkreDF3U001Y01zNmZJdzVHMGZiUjFiRlJLMS9iU3FxN0dOSjJKdHFzMkIydjA0emd1U3VsSTlFbytnMHNQZFpLeHVoWlhZN3QrWU16b2tYZ3NhWlJEUFZ6SXAwNndiSllYL29lRVdUTXhlY084ZmxKdWl6Nm5LbnQ5SzZ6THgzT2dlYUhud3JLekZ4UHlhbEo5ZUFJSDRFM0ZYbGFtVHdrbDR2a1ZjZ3AvNGV3dHpRUlo4N2ZuWlp0MlozT2lROStQZlRIVEpvS0QrZmRETzByUTgrOGFVTy9ES1pmN1B5SENnbnNLbFVlRHN5SFVadFNMVTU5bXU5cXdhMjY5OFd3NWRRMkFvZStVb2cyYWFVL3VwV0lIUnJyZnNCSmRzS0U3cWZLTDA5V2tpaFAvQ1hRWmMyNHJTNndJUE5wcGhwTkp0MmhoU1UrTlV4aWRvNDlZWGh0ZHkyYkUxTW9vWHFCVzFiRzBTODlnNGx1eXlSRVB2YXMrZmJEMlZicTlrVVRKTlhSZkx2OEpKdDJRUzVqaS8vRVd2SDhmZXFvMVMrY0ZmTE1zZ01TNHpabWhoQVI1NmNZMGFJQ2dZQzluNGNsbXJOQytVSjA1eHBZN0M2NUlkclBaMWhSaWFXMzA0YkZnT05VNTJtS1R4QnhmWk5mVWRsRGxYVU5yaVdMekh5anEwWlBydW90aTMxQ2toMTNvby9vSy9RdUY0a0IrUDNpMmZxSVdybHJWb3Y0QkpoRDBxK0x0OUR2TkgyNDJJeHBQRlhST283VGxubWNlTFdDd2paQVBFUUlDMExCM0w5UklFT29oVVMzN3JWdFhhZjN3a2YwV3lHU1l5QnFmNEpMNTJqbHhQQmlDUjJSWjJuaU1aTDFRckhoVVpHQW5vTHhVREsxbFBNMEd5MFpJdUc4bVpia3ZOUUJQNnNzL0xUUzY3cFBIR2lOTU9hVGo0eFZadEVTQUx5OGN2ZUg5VnRWbjY2d3ZQQmpwU1hpMWdCa3pzM2lJVkxrSnRFU2JGVGhKNU4zOVhRc0dORG1DQWh3bFk2QzVjWXRhVnRaYWEyak9mZDFnRFVYdWJkWlpIbTFkMmxUOVl1ZWxqZ1JLSXphK1VJQ3FLMXl1c2hsT0kwMEpyVmhBdUJtWVJLSXVFMVYvNmRlYTY2WlVHR1Zad25pcVl6K2VEUitzRHl3VnFBYmtYTGhBempEalFGN0ROS3ZFd1MrWXN4TldDRy9ldklCaGVQaVpISHJDV1FPdzg4eE9DS092RzgzTExsUktySnR5S1l0ZkZmRGpMVnFVM0VyeU5lWEQwTlJncjNzS3lJM0liNTBLVko3SExHSEJsVVNzVU9NY3I0RG5ZbS9NcS9sTG1iUjR6WFVQTDNleDAwZWQ3cDAySjJNOGVFZXEvY21wNGJ3M1NIcUlnQWl1WE54QldnMzYzbkpXd3dkOHFRUmNqTW1aSlQvY2J0OVhqQWxYTTlhYlBhUlh6Z3NzKzdqeTdkKzk0UUpPNTlHRVVWYUxIMnNrSFVhNzRsd1RMNnliRGRVRlpBMDYxalBpeDFMUTI4c1RNK2NROFBZZWkzMGZIMisvRVFyL0k0U1VQU0pMSkZRazFrekJqSDUxNWtacFVFVXJ0bTRZdjd2Vit1MTkrVDhaS1NpWDdFdUttVis1OU96ZnpLMG0wSHNOcmZpM0ZhOWFVdkxFUG53M29zSzN4OWxJUEE1aVZoam9ISXI1LzNIQ0dUWGdzbDlrL0FoT241enJpd3RldURjdlhwZ0IyZElha0ZGT3MyTHIzUjlzc093cTY3dUx6cmd0SFNwWnFwWk85UTJEOFRSWU9ZN0huY1k4TDVXdFNNc1crTnhpZGRMSUpRdDExYnhKRThrZ1hCVGd3ajB0VTdLRzJhYVJUOTY4YTJvcmJMM2hXTXh2OFhtaFB5ZlZUSDE4cnV1QjlwcTUvOEpBczZ1WXBYUW9iYUIxOGhCZnJvODhsS3lpUVJ1ckRKcDZ2UGpjMzZjMUhVNERCMDdNZW5GZlpLazNCUDRPdGM5VU5wYlNvNzRNcnZ6MmlXakJuaDZEa0F0TFlKNjh4OEVUbURVZFBha3F4cnN1Q3RablR3KzhqZzhNTWx5Q0F1QlloeFRqZ1VNV2daYSsvaEI4MHRhZm5DMGFsQWFhNVNCci90bGlML0FweWxGbE10d0duMFdHSDczN3U0R1MrK09zS2dpZTB5TU50M0FwZmxRcDBJVDIyM2crTnZxOTl4NXhTVTZWR1lkUWk5WlFUYy9yVERkNEZNZW1CUDAvVXFnMG1wUGtteDBNejZOajhETjFUUmF0ejgrbmxORzZwZEJjMlVBUDhMU2x3bFBwNlBLYVo5Y0pkaWFQSDFLbno5MmdOd2hUekkxempkd2Y5cU5rMndtaDFPMVJ3RTQ5ZVZuVGFYZFJ4bmZhd1haU0tNcHdLM04zeVkzZ3hZamRleUhLQnJYUTk2bWRRUGFYbVN1WmtXRDFLckY2V3pTT3JYL1lTMm9JblpXZWcwVEJ4ZW5kS28xWDkvSHJUR0pUQWE1RnF1L05UTklUYXhRU2ZmVmNEaC8wTWdWR1dzZFhWRTNBV1lzYlVjQWQrWjJ3MkdhL1N5ZzM1bVA1aG9NZDFjb0s0Rm4rRS9qd3ZidEUzalUwSGdqUytnZFZhRXhPN05JdzFUdm5QNE8vay9TSWwxbm1RdWlpdEMvMkYvaytzMG5ib3dYcWljbmpsMHBvK0puSTQyM1RpdDFHQjVnZUhnTDVqU1g1eEEyKzhnQzV1QkdYY2Q4eEQxT3VwVlVFNmNsZmtLQXR4QWRMRDN6c1Nxazgwb3VhbzR5VTR2TkovbXZNbGVWOWllSThMYVBPcEltcFRJVUZ0UE14YmJuOHV6cnRKTW41RFNNcVJJSDJodi9yMkdhb3pwL3N3RXZrZVJlT3ZQTVJnayt4SG5mK1FXMXNMUWFCL1V3ZkpPbVV3MEVmN0pUcURvUUc3M0VoYTlBVVFXbHdHVG92Y2xXVE5FdVc1Y3psK2o1RTIzVTJtYUxUNmF0bjF3dEZtdW5RWnR6eGpyZnlCLzl4TE8xSUQ0UGlUWm0rc1R3UWhtbGtrbmJqN3k4K2hmSm5ZUm84b2VpL01HKzNyWVEwdlZsMW41VGo1VWpMMlZjeWtVazNsK1J0UW5RcjlYellEcHNiMmUyMlJGV3lJNWRURTR0VkRJK0RCbExCWDFhTjdUSVR4dTFFY001VlRzeGFSb3BDREg2WWRkbFFVTzlkZ0JVRTlvVjNySGJlYzNOWjlxN0VPeVBqZ1FwSWFGWlRzV09TZlFucmZwakdQanpGK3JxWlBQbzJFN3JUU1Z0UUhFWUcwWk9HdUd5OFZta0d5WDdka2hSZ0VUNytsL2Z2Ynh4KzVtQUYxSmtqSHN3b3pkcUtmczlqd2xMYWlCdnRBUmJpa2szbDhFTi8yYUJ2UEdEa3RyTnZvalYrTkgwQmQ0WUNqMTJ4alZGcEZva25uaTF2UlpzcDlSNG5PU2haZmRnb29nc2R0S0VVYVB0ak5pcFdMeEEwa21SUjd0V1VOeTJKYW9ORjRWcS95Q2hzNW8yTk1UYUVSUjZ0bElaVmticlY4Q0xtdm52b3VsNm5kVGlEdEdScEdveDBqOFJOYVByR3B6VmIwSVc0d29xb1JmdE5TMXNNOXI4aVc0WjRjVG16aEZkZXUyblcyRHJJS2F2Z0ZkR2xCUTNqdjVYdER3SWhCWkhXMUk4SjlyaXhoeld1SEtNMXJmRXY1TkExNTMvZUJIdWYyZ0QzNm5sMzFtRjk2WVA3dW9LNnFhQUFYODVFbzJURmgzOXFpK3FYcGxERVB6bG9VWDNvMkdyNDk1VjN5K2orTnFFa0JhOWx0bWxRd2piSWZ4ZnVwOXlyelEzUWg4bjEzbHU0WHZSa0VRNENFNWdQOVljbklsNS9VRUtQTS9KSk5YbDRUMjcxZXA3ZW1BSlI0WkdWajM1L0xEU0tLRWt5VnR3aVhXQmZsVlhWckxLeTBQVi9nNlVoanFmOElqU2U4OHJXYU1lSHhkOTBUQk1yV1VZWWhTVFNaVENhcTVxZHJsNHJFdHZTRCszMDMxOFlBTXhBeW5NcEdJQTlmQ1JDZXR3NzN4ZnhlRmd3cVRqaHJFRFNZdmdtc0lwb0JPRHMxZnQ0R2h1b3BDSURKckh2dnlZczZCRThXdDMxZDFGTHM0b3RHL3BwT2hubzk4eHNFY0FsUGkxT3ZCWFJPVEtud3krb0x5dFVHK2dFSG5NZEQ4blVSL1FIMC9kZUlUdFBQeGlMU0U1azI5OVJQMXhWdEsrdVJtZ1grUHFXV3pNbFRLZ3pEY2hVeHRnRDVNWk4yQUpkenpaTzAvVkhIUlV6eEZ2bEgvRVJTUzdwQ0tydjhGMzJnbzQ3N1dDc0hWY0ZKWlRIYWJrcDFqekhibWNIL202NURQMnFrUFJxM2lSOWdRZFB2ZWNuaDdlaDNxak4wei92Nk4yb0RRbzI1ckYyTHY0dUk0WER1clBaYWFBZFRqUUdoUnczdnhvK3dCcGJUc1l3eVkvQXVoTEFzcUxQZ3kzM0J6a1RNWW9zOWJPcjIveGJ6ekFlS1pnT2lHWkRBbVlYQkxKQ1h4eTdHK3JhQjg0dlFJTmJPdDJlSFF3M1F3bS9oOFNkaVcvMXI5eXJVcWROemZ1dDdER05JczlSN2Y1QWRmQUh4UGkwRTZxdE1wRE5lclhuSVFXZHY4RkFUT2dxM29SZ0VPWW5tV3FiWG5POFhuZ1lFeklDSVFpZGJRVmwxUnBBQlltc2t3OUd0M1gvUTVpMXJyS21XQ2VPZE94bVMrK0x5ZzYzc0gyQlJwYVlwSVpocnh0K3Qrd05Zc2p4bHZtdjhrUHdqQlNvTmdQSEtwaWJXUG5rR2ZYMytsM0g4WS9Ma0toVnVjZkpFWEk1UVdQbmJsalJKN3ZIM2dWTmZVb3p0S2xIU1F4NGJqSHJWbFRaa3lTc1pJNUFvRHhRVzF0SFByclA4TTlVZjJPcC8wcVRDVVFIUWJTQkRFRjlzcjBibVI0MzNFYzV2Nzl1TnBPeDdtV1Fwa2lxZFJlTTllbnpXWnQra25iRmFuSWk5cWcvaVlXTit5bjFwY3pUMThGUDQrUkt4Y1ZncjdMWnlrN01ZY3ZkUzJSZUZWdCtOZHFkelRDSGVSbXlIdXBvZVBzbXBNQkpqUS9OY1lUdExJZnVMR1FxTkFCTDRwWFVBVUVQZTMxU25XY0E4cjZKOGIrK0xUQ0U5eTY1bktQeDRDdzB3SElVemFGdEhLYlNlUVE0NzFqRlFRVmZJRmZUamNIei8yLzErSWx0ak5yTjhGVWRGaWIwNE8rcno3Y05FdHp4aTkvZkQxR2tOZ01pZUtabmxSOG1yaFdlRlBDQzJJM2pKR1VjeGVZdGxuSWo5anVBUFp0SVdzaFR1SGRjdCt4RG9qTGxpY2JIbTBsb2xURjYxREJSaTlnWmxIMHc5Qk4yRHY3bERLc3BHeGN5UzFGWlVIY3ZzMld5T1dsNlNTRWN6bVI4aFVSVnYzZmpFTUc1cE5aVUVVVXMrcko5Tksvb1FPczFwZHZ6ZFFnSUw3dEtibXlhMHdBRmZOck83MTdQUFAzbVpWMklYaDk5ZjV2ZVNVeTZxVml3bXdaUW00TExBQkR4b3hrcVFWYnAwakZDK0hRdTB3aTB0QWRpbTJ1akFnTXNoeWFMR2taaldaLzFDVTEyeEZ6NUJmcjNjcUhTeks3UGdUUmFnbnpleWFzTmcvVm9pRTAxMEt2WEUxSE80RGtaT1BEc1N0ekp5RWRXaVVGUUxvZWxzZlJJbkVTWXFZa0lHRnEzRS8zMXc4RGpQeksxNEtVbUhqYVVYS1FEWTkvM3JIQ0JZK2JtNG9vaFU4d0pPRnVwU2lORTlVVEN4aDhmdnoyTDlpN0xpRm41eFB6dTJCeVlzTVhPa25reWU0TjNUQ2FwYWxrUnd6Vzduc3dVL1YvZ05GZXdXZ211ZStIYjdJYmh0VHVHUDNPN05zbUNUUkhVaWE0WUE1cnMwWm4zaHF1d1pIWnJaTjYwcU9BNEJobUJNMW5PVTJkWUFsQ0VZQVpzVWNaRVZpcXJ5YTYvYlJnY2xuS0tBLzMvTkl5WUhERFUzWWhkZEhRSndaQ05WZ3A1OEU3N3F2bzVtOW52eXFRMWE4bHJNb2pHRW56SkoxVmtCK09nbWdmK214ek5kaXk1QUZqR0llY3IraHRNZkR5UmpUVjhwcFJzTkthZlFSTk1aNDIvSzh5OXRqMU83NFd4NXYxQWFnQ0FSWVVVTC9iRzdrTVJSeUFrZlpZMHFTMENCYUtjbjhZRjcxNnIzZHU5QitZdkNWbWhBelJhWGJVd2Z3NGtGRllDUVdqQWlPcC9HdnEzU3EvdkZiVDN6K2hNZzZqN0lPekY3L0JYa3IxSm5heXRWWUVvK2hjaGtEa1ZObVk2Qm9BT2JwZmFSUUNqRGJnTzNDaUdJQzNqMS9RT3RhNjFwRGk4WHBEQ0grVWtueDNzVXIyRGRkcHV3c294bHFuUjlmMUxWdWJoQzFQSW81dUFIc1M2MmY4VDlDNzA2NVBCbWNzaEpaZkpjVEZockVPRFQ2MWNEQlc3Y0poc21iRVhBbzhYanBaQjVBUEoyUDBtVVF1OGM1N2sybXgvU2gySmVaY3I5WXBNWVBRN0QvQXFla0luOGd2ejg5WlNDNm9LZGx4cUhGQVBUWDY0eEVFOU1Ja0tZU1VObHMvV3VZTGxyVStTbXNISkhGMnZWRnVCYUNoVTJUT2lQUnk0bW41UWlCQWVBWWdFVkhUZUdHd2Z4V2lBTTFoNnFHOEplcU43M21WYjkybG5LVitENm4xUStiek1hZmhDZ2NqMXAyN1pTb3BJN3BVajhrUkxSU0pwb0VmYVpGTDdmeTBNYWtQM1BHbTRNdWxqZGVjZHpsMTZEc3lsMDVTNjJwYkxoR2RXZUVWVHNlYngrR3FsaHdBbHdhK0NTRnZEelhtZk84SmZOTXhPOStIWnJsc25VU2w5VFgrYmpQRUpOQkpNSVpTcE9iNFhXa3ZmV0ZCWThNMlVxdlZHclpxTER3OUthd3hCOFhubmFjVEZOMzZCUUIxWFM3QjliUXNqeEtDSzF2a21UbFlIYUppYmRCU0x6d0dJYnFWaThONUc5cFZVOG03a28xMzZUMS9RZjhibTluU0NSMm1Obldya2s0QmF5VlMwQjE0VG95OU1TcTVVQWFTVytNcCtUZEpsQ0c1ZlBUbG1QZWx1cUVwRU5hRjJRaWZDTkhwb2hxVERPK1N4NHZYTWVVY0FyVG5wUjJzcUs4dlhKVnllbUhDT0FGSWI3MHdZaDNQZk5YY1c4cUxRMUs1MEExTzYzUjVPcEUwaUVPbW9ndVpwQUFVQmgvenpkSURPTnNBWGt1WXlZbjdISTlQeFQyMnE5WjFoam4xTlkyVUMzdFp0NGNONXZ2UlNDcjNBMUkzaWo4ZGZ3Mi9JUVJxaFN6Q0l2NXV6dGlMa1hDdm4rZk9idFROY29yOXA3V2FDeGZnUlNTZDZXVUlER2lLeVZOeTJWbmRrZElFTDNxODhGcmZrSlN0SUFlNHRJSlRSUnNSVHNPYlVGSUwvMmNhL2RGeS9CQzJBWEMzR0xuZVZaSlJGZnZ0Nk1XMGV3Z1ZlYTF6Q2ZHaUYrWmxUeE1pQ2JCVStZc3Q0YmRsTWVsdlc4WWNnWDRUcjhtQStiRzJQZHIzQjE1bWJtbmlRb3pjbWhoc2toa1BCT2t2OXdhSEp4OXpXUUdQQmtReVg2QWlGTVpCbVl1Z1kreU9ZcXA1anZ2c2tPVXpYQ0tCS2NwU0c0MUdIRCtieGxYRDJxY21EdWRsOXNqQlBZa0dFY0QwR0s0NEdSQ2oyUHJ5czliWUhDdnBQY04wVjNSMzVWQXp6NzU2S2ZVakdZMnJYOENzRktvdEt6anJUZkJVQkZ5dERBdzUrTWtuM0lQNEprcnl2ZUZ1QVR5ZmN1NUE2Yzl4TW5iYjlQTHM1OUpRS0YrZVN5NzRwY3pKa2NPS1BVNHlmOEhQaEdnVVc1MTErYVBxZWtnZW1FOWo2dnNrc3ZQR3BDVG5CTzJWdjhESnJXSnQrNnZqNjVrSlhhS2RFODVtYitzU20wcmc1dGtrR1prK1FRWDN0MHZKTm1hRzB4bURhR1JNV2dxaEUzbGczY0xFMVNtNjZMOEJIMUxMZUMzV1pjeXNCd2hDNGRsc044akpGYlZyb1M5VDZtSENRcTBhREd3dTFtQUE2emFxV0pnSHkzak42UFYxeHBLemRaTFY3cHZNQ2JFTTMwQ0U0L3kyQzFBN1ZzVFJ6ZGdDU00rN3Y0L2pJdzFPaVVad2xrMU9vWEY4MUxFVElWL2plLy9mNmptUG5BNGJWVjU5eU9mRnJuYUkwdFFrclNqYi9MUG0zZ3VZN3kxNEt1VE9USnVBZmlPeUplVnplSjJDNUY1STVYRW5BZE9YTFdoM3U0aVFENFBqWVVYYmJjMHduMG5QS2ZtRktFTkdYVW9HMGxKSy8xNThJUTZOWEFUd0EvaG05R0tnSjlrWjZwbGZrRXVZWnhDWW1tdW1DK1NVWXlhd3YzNWxJMjNzOU40QmNpbTRjQTJXYnJQNi82N0dWTGNuZXdFUU9JNklxM2RhNWpnWHphQ3A5bDFNRkI2UHNIWHBZNlM5ZzNpV25CNGZRK0pIaHJvS1RQamdMMWRHWUtKL25WU0xxNWx6QTFiWk1vVVdEZ1dtOXQrVUNEajlNSXZjQVI0N05hMmprbUpVNTVnNDljOFVvSmhxOHV6bUdvZHlIdWFWL1ROMEd1RDNkVU0rNnd4MEpyTnBTNitIUFp5VHNvaDBCYTJielZteWVMbWw0RXA0V1VCNmszTmVjUGtFc2lud1dYdnpobm44YTh0aG40SFRLU0tjTnpuVFBOM0VmeXIzVFdzSm9rZ2x2TnFLNDgxK3ZDTEFZWDZ1VXlGV0FKUTVvKytacUxvOTZPd24yTmZPUGFXNG9BQ3g3ZUs5d3RpS0tEL1AwY210anFnSlZybG5oYTZvVVBYbHdhQUpqZExTRTlqVUtlWDFDNlk2RS9vYnZrTm9iM2pzWU1aaEUwRFQ3dlVtTUVrdGNzVmRjSXFUb3pFUkFud0h2bUlhd1BVbE8vMmpNYk5rZjlPOGhSSjdFbEwxQTg4amVsa1c0SDM1NktQTkREaS8yaC9HRlZGQUEyWFdsWHkzLzN6TWxWUitwaWl5WVVpVWVEVGVHUCsvSFZmZklCaVh0dHphZ2RCa1lSWGNBZ1RPWXMyeFo5Ty9tQnhlWGZmMXREREE5WDJqQnFPbmRET1FEZzJBeld5NHpFUHVQOWhWTTQ0cEJzUnIyTTFuYUJ5UWdGODZCeTN5NjdvakVKTHpjRlY5RzN0WEFKc2VDU0xJLzZSbnpoalBtd2J5b0V2aWhXb3F6MjIraWhBeldsUXdWU2Z4dXN2WE1rajl4MFFHeG1wUTRHZEFINlRzZGtsbW16a3dhT3BIcFRuV0hVMVhSbUxIVG1kdGFUV1B5VUc2L0tSVDRjWXQ1YTI1aHpud05KdzgwYUJIcUl5dXNnai8wYWpOY3k3L3lZY0daUDlLWE1DVDlQMGkwMDAwUjZtSWxLQVpvbG4wVzM4Y3dJZzZ1NVpOT0N1U3FsZGlURlRhbG5JZHFWUU5XNEFvZkFqbnVwelFxRC9kRTJpdmJzalpqZ1R0NnZIUWc3WWZTZFltT3N1THl3SjFPclF2T2doQnJ3UTBRK1QzT2I5NjhtSmtXcjJ1OSs2a3FsTFgwL2ZDLzJZTnhwT0QwSmlkaEpmRUI2ZVV4L3gya2hzNUhvaml3SjBCTkh4OGlUUWZDQVZzc1YrWkd1S3g5eXZBUGJTUFpTbE5NWVFYR3J0Z0pTcUFJcGxaZ0NoR0s2MUFIR0F6WldpdzVWZ2xORXdZOUpUeU1TQUN5Y1g5alg1NlVzQU5nWks3L2VidlhpYVdHV2dWVU1sV0JLcUg0SnlJOE40TjZxUWNiR01LcFZOVmpxN0J4c2oycjZHOUU3QW1kZVkwWVJZK0FCMGk2ekVBQm1OWmRwUUVCNzlPRzR6U0toNFVSUGl4ZXVla0ZCb0dwc0YrQkpXbjd1ems4REowT3cydHJQRDNXL3VHVU90aldsSUx4OGtBc3VqZTVzenRtK1RxQnZHWDl0VzBPZ3FHVGwyMzVXNHNuL3Y4UEU0UXBUQzhPZ1lBOG8rcEMwM3BuUVVOdEFVZmdaRVlkdHExUnFBdHZSVjlXdldHNjdFNUIyVlJMMjdSc2ZFTWEvT0pVaWdwU1RrcmNrRG9USzJYZ0FWUkFtSXlYODRzaWVYSDB2Mnk1U0loUWlUbDVhN0gzclRQZHlBYnFwZGluOG9sbThSa21GS2NnajJzZk1mM3JOcWpSeUlnYWYwNUVHSjgzNExoWEdIWVVTeCt0NGtDdjV0bkZYU2JIcnZ3Z3RNMVRCS1p5czlVamFsSW9yeG41cHRjQlBOU0xqR2l0MEZ0cFd1eXdrdDdDWCtMclQ2ems4bjM4NDBJWjIzTVkxYTFiVkczVWZUaWhyMlljMC96UDdSVVpmSEFzOXU4anhza044LzZEOEl4eUhIT2c1cVJWQjVGbUJhdHJJRGY0NnVadG9FSWxRTGJpWnpZajh6YUplZmpqQnFSdkR3aW9TY1REY2FsUlhRNEhJS1diR21WREU4ZXcwbktSR1Z2MzlweGlQbk94anJBZU5HUU9wZTVLL3p2TEpSVmphNUExanRad0M0citZVUR3Vll2Q3R6endEeUFrYU9PWGtWb2ZGamQ4cW1yQjBrblZHekNoMEJMb3BtQ0RHQTNhS2pyWndtQ0VZYlJTcHIzd1MrV0tJbFc1Ymh1ZE9jTUZqS0laN1RqWU5ZNURFRzBoUWEyQWhnRG43RlRkeEh1YW43amNYdzNYem5lVkxlTTdEcW5VRnIvUURnbWJiU2NiSDRXZ2ppTGFkTXBhSE50V1p5d2h6OC94NDRBdk40blFkdGNaWTJZZk5ldkNCbmQzTDl6T2NiTkZQVW9Zc2Y4YXU3cHBvT0NGMzRNcHc5OEg2aXF3UVpOeXBGYWxPMU5DTC9QTXZCMzdhU1RNSHd4MHFLMTUyZjcyV1VGVjBRaXJrUy9qOU43UG1PSHEwcHdvZG1aUTFGc3o3TDlFUnBRVUlEdFd5VE1zSHQ5a1pNTXVjbXhPK0JURU5hRVdyUWZyMDhiVUF1WXNzWFFWK0M5QnFneC9pT0l2NnI5VFFiV25ac1dhbmRHYXNHS0dvWTNFZVFGNVU1aU9ZT1hDdmhNcFRONHJJNVpjbHVFVUNWcU02anRoUGJ2SGdQNWZEUXRmZHJOSGl4ZUR4RDEwdkVjNmJUZXFKUmxCcDlUdjIwRnJheWNtL2FzZHhHbWlnUGJ3MGljd05VY08vZWo4NFp4Z0xYY2ZoL3JRY3A3L1plWGtjNWhIMUc2K1loWHZVaHcyRjZ1dm1nNzVRSDgzenord2NTUmVGemtub2pzRGZ3VHdEZ2E5ZEgrK3hBRWdpWHpRL1lZQ1dGbVZpODkxZUxkNGd1MlJEbXlFWmZsV2pBWDkxY0d1QnlTT010VVNIa3ZoUC9aVFRhYzY1M05qalR5dy84dzZlelYwamU1M3g3ZEVuZnZrT3dPR3pSOWtuUEFFeGM3ajAxVW1LcWp1dEt5cm1RdEhtSjl0WEZWMXZQWndERkdjZlJHQ0tsUHdmT3pGQllzdk9zOUsxanV2bmU1ZjRMV04vRTBGMkM0RzQvU3k5K0g0eUFtS3pmbUVEdEdEOHlpQTh3K0VIVjVVTENNMlljOHQ0NlQxVXBDNThiK2xFN3EyQnpEUVc4U0ZWQnJzbkNPWEpZR1RjWHNxaSt2ZlN5M0liZW5nUlZwOWliQStsbWl6WnhEU2R4RHlYYjFpSUdaZm1vOGN5MkVwRWMwbHh3d1JVZEFoak96MjhSZ1packdHQ0ZXeXd1Q2JJVlNRUzJVMnhFUGJ1YjZtOHlzc3dPbHR0K2o3cDF6Mjk4M3JyUmU2VndFTGpWMkNrSUkxRCszVU5EZHdpZzkvUXdFZ1FtdmI4UTM5Vmp1MllrbTYrdkdwNXh4TUg3K3MwV0RSZTByMGpGTk04YUExNEx0L053WWtkM1BuNWJNaGRzODBUZ1B3T1o1R0RWUmZ0WDVRM0NkdzB5ZUJ5aFJHT2ZFOEFQL2pKY1BuOS9YM3p4Z2g4eFFjdnFUUktZdDZvSnRzNnVZblo4bTRGa1BMdlJjc3JIaVNPMFlCOWJna2VOSHlZTTUrWE12ejc3bllFYVEyc241NEY2MWhuamNTSGVWOUFDZTl6ZjZGQnR4dTkrVHR0djZrYldNMi9HMmtFRkc5Wkg1dTJzR0JpeTVEOVhPMlUxM3p5SGQvMzY4Uzl0OXd1djRUOUNtN29iSFlYUTF4dUpXTzRYb0Rwc0tEcFBFb0taeFBCamtxU05hUTl4aDVKOEIvUUo3MHJpbFlCSXZKWVZrN0pOTnJJMWtXU3hGakdFTjBvTmhQcTd6R0JzWUxEUThZOGU3MTNGcEhXNUhSZ1d4bXU5U0ZoblIyZ2JOYnNJQVpFRkN5dEQrNjhzQmlGVVo0WVVCVGRtQU1VRDNaQUZQQWJacERobmpNS3puUlZnWXlSK29yT2VqYXo2L1A5TWZkYjBmd1BnSHc3Y3VORHNSNVI4Zjg4OFZ0N3pQTDhybjY0eGZ0cnA3b3RTaXk1Q1pxSE8wSHpGUGNDdENiRHF3SW1SRzRibnJNVytqTzNoOWhyakdGTnJwMnllbjFyQjVDcEF1NjM5UERqUnpyMHNOc2p4Ny9OUmpJbTNlZ2ZvOUdlOUFmYXpVMmNQbTZITkpYVTJoWXJUOG0rYWJ2SWdtcjBDR1ZUb25INSt6dEFxR0ZIZjRoNUE1d2t5NDVrNmF4MWRoU2Y4emc3RVpSWUdKdnR3MEt6NmxqQUJ3NFdCTUxIcWhtNGcveVVRVHJoU1grRXVPeW5WNGVMaVJBRVkxUDl2RUdBbjcrdUl5TExwVXBTTlpXWTcraHNCUGJKR2RqZFZKMzRLZDJmaGFjQWlhbnVPVWlXY2pXN3FNRWpwK2xvTW9Yb0IyMkY5RXcweVBoSlBDS0RtNUtSMUcrV0ViZngzMVM1S2Z5dVBPRHhZSWNrQmM4a01CUHU5T2k3Mm9JZVBDOUI2NUMxMFVnR2t5dkJyYU1oUFpCQkxRMTlRNlNvYm9Ba08vUUU0a2NlelNhakFUNWZLUUlYSW5OWmoydnpDVTg4Y3F6TUY3MWl2L3RwS0VCN0hyOUVLb2ZmNWJQM2pmVDN1cktKMk0wQVY1TktGQjVEN2h3dy9HWU15OG9xR1UzVStFZHk4Z0hoNWp5VGJIZm1qdmt2dEdvWXpDMXUxVTEwZW13VGZocUVDYzZsaFZoL1FISTFhMytCK2dnd1pMTnBFMEZvWFV3S0ZxdGVCQ2pRZ1ptVVBwOWw2Yyt3a2hnSHVka2c5L3hPc0gxb3Q3SHdCUmY3RnpqWlExLzZYWW9EdmxRV0JtRnRTZjhreUViYkJRMk1VQmNMY1ozYWlNclJoakg3R2NTR0w1VlBmbGdWekx3OGNHbDZYRzdIaUh1NWI2WGxnMS92YkQzdEFPeGV1S3BLb1BZbW9MaTRmRUlmYWFOMGJBc3QvMVkyYlR4NmJGdmJkZjFnYlBSSFBSa1pON0RheDFhUXRSRUR6UC8xSjZhYWhJVnVHMFRZbmpjRDRzWVIvMjlKcThwbW84Z1F2YkdKWGo5L2RLZ29UR3RNWDY2QnRnbDJabmVRbTIxWTcvVm1zdC93RGl4OFlLdTROT25UZDIvWG9yUmFyUit2NXp2M0VpVTZTNFZYZDN6VlBiVEM4MDNwMW9MaTlFUmRKZkQzdDVlbTV2WVBUVWIzUXJocEdTQk4ycEp3Qi9Tem9aQWU1WjhtdUZwK0N6U0grVll1Q0R6bXZyK2wyUlBueHFRNnJtMTczdEtvOTVNb24xcmcyZUNJY0o2S0g1ODhjRzF1RWhDRGdLSmdRQml0WnFtd0Z5NzZNY1lyOUtleE1xTG1Nd2k0L0w3aHRaTWpXOUlMUDZreXVKN2hwdlZBK3RldTNUUUhtTEFFUTV2a3hWSDI5eVJabTBlaURwUjdjRFl5ZnJ0UFIvTFpqbWp3UGUyR0ZnbEREOUxTUUcwaGx0QVM5c0dGSlB3OW5DSStXRmJEYjlROEFuNnR3TDVGU1k0SFRuRWtWVnNCaHV0MlcxOXZvMFdjM2NNTHo2TXJWTjVaK2hKR0o1N1lqNDVBSUoxdWxHaHMybHJEN2d2SEpsYWZNZVdzN3ZCdStGVm5zWEZ6K1NHcDRYYjFlbmJBNndRZjNha0dDVVJCcDhSV1RSekUzZ3Z6TmV2dnVxTnBxWmVIbCtCeEk5Z0tiSUlJODRNMW9vOHF1YnlhWEJSQVdGY2xJeE9kNkNaVnQxVnA4WktCUWZ3OTR1T1IxT0lsNTBKZmFYYStNN1Q3c2I3YkVWWDdrYnA0clV2OGhYcGhnY1FkakZqUGVLRGN4OE9MVUtQbUN5QU0zZnBKR2ZqUEtzNno3a3oxM2hrOGdvdGVNUjZuL0NtL1FWNFpURmR4RGhYL2cyK2JJQ0NsaHNMRTJrdDc5ZmtGUDFJTzVha0M1ZnBwaUVoQkVDaEZJeEJmaW9EeDh6VlpLSWpHWjlhY3R0bm44YzNSOXpaelJNdzl6WnJpWThaUXZTWXF1dFJZSzMyTThHSHlnUllyR0I3U3NING1PNVVzeExndWRURGlDY3ArT20vZUQ5WnFwVW41K0xPTDlYUDI3RnJieE11VndoTlZzSDVTL1pCUUhPZkhweEd0eE43dDdWOTJwNDZsQVVIQTN4MWN3bGN1MkpnMFI0ZWVKUXgyOXdTNHpjS2UrL3oxV3I3L2MySHdZdld0dE4zVk5pbFhyQWVyWHh1QXdzQy9zeXRLOXFBbjRySE5GUVVzbkRnOFRudUVKaUl1eU45ZDcrcEV0cHFXTWlKbHhHa1Y2RTkxSkpiOTlINWF0Tno3Z0pZKzFHMk1nT0JEUUhTK2VrRlU4OFpIM0dkRm1ncy9BL1o5NUdSTE02SFcxYzl1ZjNGTmZmeFRaNkJhOGZPMEhCRkpuMjdaOGFGdFlMYUZZVEsxSUJMekh3VHdDYjlaaG1pZ0VTQ3M1bzBjQXJBVHRXNUNoV2RtSm85UlJPTmx5TmlBRncyZDVaNWpSclFRVzk2MWh6cmovZllQZjhUbThOYVorVWtsd3k4a2Rzem5mcXVZZFNSeW9ueE5aR2M0cVZGdndWNElKOXdLN3A5Nm5tWUM0UXdrbzlpdVRETUhzZ3ZKS3VaMnkyUjBOdFFmamJKWVB4TytkeGFDMzRSVUk1eW8yS1R6VGUxMWtEaytxN08zMXJxVnRiaERRaFVPbTBkb0hPUEFKM0hIQVVDWFpFQ1laMURwVE9mN3dESWlqRWVRTW45R2FTZjRWN3FjSVVkM2xJR3lWU2FpdUx3WGh0M0VOT1ZXd2tXRm9XWnd3NkxIU3IxaTJPdE9jUklPemN4QUg3R2VsWmY4RG9FcGo3OGtDOEZCOHhnL2oyU3B1SjJzNENTcDgzZFBKenNkNXVsMW1yOUZHRjhFZm9DWUVscVJ1anRGSWJCb1Z4MTV6Q3ptc2p4ODVKSlFQYW4vUkcwYzZKWVdzcVlsVGIwNTZOYjJid2hwRU83UWFEb1J6UVBTYVZ0QXlKVG1LaGphN05mTmlSdURVemROTnJQWGc3ejU5UVlXY0JkbU9XcElWSGdWM0xpbCtGSUtiMTdmaGhERkczclBUKzR5SVlkNWhMK0tDd2R2QnhNRHBKdGc5K1JtK1dxejBNeEFYaG4xeXlJcFdjb0l4YXZRZHNmbVJycXNZTW82MHpDS2dJZW9oQ1dZMmp1eUJUN0NjUmpVa3kvR1k0Vy82RWhsWkQxVjZRemtqQVRRMElZZzdFc3BoS3Y4TVBuY0pBK0hTbDNmaE1MQlpMRWFoOVBrK0NCU0tzQlZ1am96M3lrZlpoN0YwS1JxaW8ySVNUN3I5eWdOSjZjZjFhb1F2WWV0SnhPeDlLZzBLRWdRamFEVEhrcWZGRE9XQW5YdjFsMk5XcWIzb1BzZnRqZkZneVdFdnZFS251U2QzRU9XZUhaQjJTNzhlRWFYOEZpalZON2tjSzhQYXpTT0w4Y0Ixb0g2ekpXYmhXYnRhRFdEaVpYYUxwV2lGcWVvWmJ2TzlWdWdvcy9XZ0JKQnA5c3F5c1J4S0E5R1JuNlVQWUZFM0VJK05meTJ0QkFHck8zSWVqaytrWjRtYU9FY3RtUzNFM2syVTIxNkxXbVh4ZFd2Qks1ajNYazFvSlRzZnlpcGlhbWUxdFR0c0hDSXpOeE9kZmJ1bXBKck13MXlYZUJPQzFDVCtiemFOZlR2QURRZnN6ZkhrTmdzRDF0S1BpUzRvalJJNUNBS1RvNmR1N0liMENSSEdkRisyRXF3djgyZGtLTnF2eFFhR0tYUjMwOERIV0txenZrdFFzblZvS1pxblUzTmR0U05XNUZJYmNvYnpPVnlqSlBZOXZudnFhM01XZWRtNmdNS0x6eGp4REpPbmd0WGVRRHoyekovOUZUa3ZoNlkvbTJZcVUzMENWMllONW02SlVKeTNlR21MMUI4MFovY2N2NWlIZUxWeEVybEFuWDBxa3g2S1hpaFVNRHoyc2hNcWNLQTZvVDFyOWxGbjVoeDE1TUcrYmtyYnN0dzJyeGdrbVB2cEtKbmFydHRObGVKaDhWVjYydjVTWWNpbE1qeXZzSVhITGFZQU5jU2p5NlU0bmlEbDRDZ2hNMitWSmt5YWEvRFZTVDdVNGVweHV0ZlFNY1RsUDBYR1JIVjdYYklMSm96ck5MRDFLeGh0WWpEbzJSajNiVDZqdUVGNnJySmxyRmpqMmhsMDh5SEdCcmdwOVl1eldLbGZ2WG9JNGJITHZhQmJYdkV1QU1wMWdRUjYyOE9hN0ErSGxxNEV4dG9MMTB5L3NIRTR4Vlh0amUwRkhOZDhlemx5UDJqVXhxQWJHOVBlR3NOMnE1YnNTek84Tk4wSkdJU0RsblhGaVQzWDVLR09GMUZiaW9hZVo3emh2eC93TjZCYWR6aWgvcEZ0NXkrYXVoOENvWUZodzBhajU0VnltQUJnS2dXNzVHYVp3cjZHWTdjR05SdEhwSmMrZDNTRXluUE5yZ2RpTjRnVWxjQktvT2xlZkFjalpBYkNlZmhTUm5UU2lZSlMxMVdpaG1rcmlOM3dTNEw3bDJ2MlpyVUJzVmhyOWYwNUx5V0h5WVA0ZUlMK0VqNkJ2N2haQWtnS3hrdUlMZGdvVjR1U2ZNd1l6ekxmT0trS1VJWUZZNS9hM2x3ejQzczM2S09NeTlFRmN5WjlzUmlHU1hHelJMK002VWdUMWIwWFRweU5VZ1NRVWlXR04wN2FRSnZPZStGVjNSdnQ2dkpzU3NZOGlWUXhnQVJNN0NZbkF6V0ZGclRTaGtSOW5ESU8vSFZheC9idms1OUExRU1pR2liTi9FNWRnc1BnVllRQlhOeGlCNlZ4ZWppcjl4R2lZNXRUZ0N3UG9vTTAzWUpRSmlKRnZEKzVHNko0d1VtNjcxeXRRSGVYaHg1T1dzR1pZOTB0ZkhEdjI4UFJzeUJheWE2dUFHR1prQzFYZEJGWkJ0Zm85T2tCY0tEbDJ1cnNZZWlURXNIeXIzNWlJM3V2ZkRDUWEyZ1J1bTVQTEZqTEZ5K3BPYllhVW9qY2lRYzBFZVNldmNoTndjRlNkWTJWNFZNU0RsK056Zk1td1Nic05HSjZhSnNiYVBPbnpoMkxRQU9VRzhuTjN0L202SWNPS2FsUjdRRUdxZGIvYS81UXVQME9mWXBTeER6NE5GU2FHY0dJaTVTRUtuMFZLdXBCMVdRMlBMdDBVbVgyZHlYelZBQlRwUENGRjduOFdrMzArc3BiaEZqWFBrZlFSZm5zaXBkVFpPdStiQmYwdEZXVExLTENyUStjM0VQUVNPT1Q5d2ZNUkd1clJmbVNtZWxXaWxhS2YvWEtOeEFpVFRVbHhERGpNcFVaWVlkbFhPNTc5V2NTZjN6RGlFQW5OOUgrb3JHTGxJSW1DdXlja0ZaUkNyNW8xTW5OMFNuc0xqcEhKQnluU0lwcGk1dUJZRmZMN1JEWElJQUN3c25Tbm5pYTQ3d2tMZ1puaHdJS29IOEpFTzVZN0V4bDNOdSszcDdNYVJ6aUY2SWl6cnh4R29BVVVFb0NQbmNsVTI3K0MwQmRCWHhRd2VjYSthQytXcFVSMmhGbFNqNCtUdGQwSkJnU0E1K0FnSUNBZ0lDQTRuenNiNndBa29xcjJMSktnVTlyVForaWhoQ3ZQYnUxbWFNSTZlYk1GR0dtVUFSS0Vnek0reHNqZzN2MTRyREZVL2tyT2RZQTRsajdJeHdHNkRFQ05yQmxkUFcvS2ZEL0tGTU0vakRIUUovSTFreDh1NXJTSkErMG1nSmszWU9IeUVUYnhKeHdLVzI1aVhlb0Nja1h3eVRWeHUyOE9SRWltUkFhNGFBZHBUOVkzMi9UQVgyL1R6YStxeWZzMit2Ny91VFAyZEVIM2UwdS9mODIxLzM5UGw5dnEzL3Y5ck9mVlJmUDhQcDhQNGZXaWI5dHJYMmZaby92KzNoL2IwUWY4UHNyZjMvY1c3OXZVbC9EMW83N1BjZS9iVFBEK3o2Smo5djBxbS9WWFA3UHNSUDJmWTIvcTNoLzIvWEMvcyt3UzM2ZlJiKzMwNzc2ZnNGL3FvYlhQZ2sxcnM5bG5hTmZ3am1iU29MOWNQU3NxOWtHRjBzaU10aEREdlpZb2x5MDFXd2JZVDZkRnB4U1JMMUJVdTVGdVBLRUZoR0lkaCtrTFJBUmxXMkRjTGh1M1Axd01yZ00wWk1XaGxuYWw1bWFjSE5ZWFNld1p4cUYydjQ0NzFyVXZ1OU1nbm5tWUF3bVNCcmszOENIaTB1bU02ajVHaGRrSG94eCtZMHFFT1AyL052SGdFOXVuSGFYazRjd2ZJT2UranQ2aEpsWUZ0anRwcDcyYzczNzdLNHU5Yk5RcE90aGRsVmhhVXpNQnBTYWFuQng0aFlOZ1k4SWd5NEhETm1mbzhNeXRkZS9lb25NUnA3RytkYjFYaFh6OTllU3pIcE00aWVXRzhUQ0dLWmZ0eVA0eG0rblZ6MVhkSUFvUURPYWNpb2JzR2NVTlpPMDZPZGtDWGpab09Zd2ZSY2Fxb0k0MnowTGlyVFhSODlQQjRpQlBjQkFmVTUzTDE4bkFsSkRjT2VveXRtZkRCaGVkWlcvc3pqaHNkTnNSbmNuWHJZZmlQOHN4MVRTMnZVZFFFQzFKYTY2b2NObGNwUXZDRnV1aHRXYWJLSVJoUXRVL2kyOEJUZlMyVUViSEhxWFVKWWRDdTQ3TUZIbDEvbnljUXF6Ukc2U0c5V250bm1yWlZpOUg3S1JrTVdTdlpPdTFXM1M4MDU4VEJKT1F3Z2lyZk9CVzFaekQ4dkZKQy92QzdUVVpTc3gyMzlwek9xWDF3eDQ2RGY0YmNvS0h6SnJSMStDdG0xZ0wzNEpZN0VhVTJMd29IR1UxdDhNNC9ubkJnbk04Zmg3U1Fldm1rejhVT290Vi83NXZ1MGpqWFNiUkdDSy9lMnRMY2t1LzB6MWZkelhjc0R0N2htSU9IZ3JnTlMyczZudGtKM1RucHBvbVIxaG42R0lSR2FVQnc5eHA5aFBTU3pTbEFKM09GOUhMd3Ixc0RicU5OdGh3OEgrUDhNWnhXd1VwNWZzdHpxZUpQNlZuMTQvSWt6bTBFUzZjZFdJMVRQY3kya1l0U0NxdCtoZlF4UXRGU0JEeTJaeHdQTVVjSTBTMi9LNUZlVWd6Wnh5NEVqeFU0bjdyUEtBZVhFSTM2Y3dHOGFqOG9iODByMTBhb3F3SmtuOW92b0JLd011dlZOK0tmOWh3Smx4VDNjMThqVDhCU0YrcGxJWkhXbVdlUGpQNkpMdjdvRmtqbTJZU2xlSjh6T0pvVTNNSTNEWWhXTmxWaFFUYVc4S1NwVE1WMmdEVmJheUZENVF0Ri91ZWpxbU1HbHZKZ1p5U1Qzc1pLdjJ4ZXprRDdzUDQxakpTcHNuL3IvL2Uzd2w0bnBRTzV5Q3Jsa1lsNTFQcDlDbWE5S21sdU40OWdMeUJ6bGpYTm5iRjIzTWVRM0FaVzRPdm5QbERtNlBoOU5pamUvYVFPRnNUZDlibUZpWm1ERDBKaWVGN3pFbUZERjJqVHkyeWMyRCs4NVhDMksyZlVMems1OS8xRjUwTTVsMmhLR04zWEkra2g0Q2NDSGFTTGdqayt4QXVzNU5PcERTNEVpK0NKUzhzTURWc0Z2WC9Eb0RkK1BkaG1IeEU4Y1RQdmNQUU44QnZ4ZFFnU2NBYWtET1ZzcHM5QTdDbXhJQWRSUEc3MU9LWUhBUHZpTG9Hd3BPN2dSTkNPS0dQZ0hpbHIxaVNpWTBlS25HZHBoUldhdjNyejViNXV2aXEwSlVJdVdqc1pldDByWldtTEh1TVp6bDJycTk5VzlXVTNLRGRlek5ycnh4MTJUeWQrYlUrRXdsbjVCVjdEK3h4NVdnRWwyMTV2eWsxTDVLSEh3YzVBZklnd2FFVzNrM3JOaXhqNWtXUk5XU2I1azVqeE54NkNBdlZvMmF1b3BhK1cyU3BoTHVhMzNOaDBLZERNR1RMNkZoaGFVUnZsWHhQcTV2UkF6MURJUUNJQ2twWkZQWXQzTUEwR3RMZURqRUkxenAxZXk2bnIyQXVxZkFzbkVleVVFK0dkSHFLM29vSUJQUHJESzVmak5ueHpsc1VQdkQxS3h0ZlhBd1A4VUdtWVM0WUk4MW9BVE9kbWx6TTh0T0pzejhOYUhOMi90MGI2aFhEVDhVK0VQdEQrSWVqdCthS3RXSVNTeVBxdEN1OXJlQTlYMjRvR0laZ0pGajh1cUxlQzBHQ1Z2ZW5HTHVKMHNjQ2pwRUJkekxHTHJLb0FmZ1pRbm1Zb2UvVjBVZjZNM09QUTlNd0xGcWZzMVR2Q010d2psbHQ0OFp3WnRrSmFrcjRqU0duMUdoaGJzVmVCenMzc1dvcldrcytWUndCS0JFeVFvM21jcG5zNzF4L2ZLcXdXQjBjS0ptL2wxck1jcFZnMHZ2NXJEOU5xbjM0eXJsZ3VyZ295KzZqL0VJamQyazdoQUhDckd1TEVrV1hlOVVIVWNiYmZ6MlZnLzdJMGRKMWFOZkpqNGJPc0Z2Mis4VmQ4Nml1WlIrQ1RmMlpyTXN3U1RURS9SZ2pXQ28vdFlscFdJL1VVaERlcUtCVXFpeGt3YTB4Qy9lMVpOL3B4Z0NwYlVpRTNQdDJLTXpwd3ZTcG9RMEdKaVRoYTBlS083UldGVDlzSkxWYWZMWGZTbUdyTG05R01KV1JWR2pNRDNaY2VPRGtDdDZDM043VW9oODBVRS9sU0lUUk91ck4rbGwyWDd2VWhMaHZSSUNIb1Bmbko2Zk5DNDJOV3lYbTVadk45cUh0S1pVT0Z3RzBNOTVWbDdORlV0VkpDWGxmSHZpd1NGNkFlSXZKaEtoRnJzUzJYbXMyTGVGN2Nya1hUZ05qbVpxdU9lNE00STAydnI5bG12Q1NxTlE1Nmc0YStEOEhaK0xwcStKdUpOYkRTSlNEWjhQNENrdzRaRFpQU1NNdExWdG5qdWxtOGRCMzVNZ1kvSUVnOXluS0l6aWFCL2xBeXhkZDh5cWc2TE9uOUxISnVNYUkzb3MvMWpuWFdldmtOQlR4UTJTNUtLUFh3VkdyU3Y4dDFFTmREUnp4c0ppRjB0aklhMHlXZEtMSFhOWTUwUFUyOFRLd3RNelhNK1lTYWJJYlpMTlBlSVlRV1dMOUZ3QjE1aFBBZkg2dVZjRWk4U3M3dzJsUE5rMFd3Z3A4M3RjSWtTZitJZGl3VEN2ME1zR1hUN0pNRzFYMVFiaGN5Z2FDZlhjQ3pyTWQ5TStDU212MzRhY285Z3FaY3VRdEhORVdzVkZjK09vTmVFZWdBYklEaVA3NEVWL05Cbi9mWmRTUHZ0MnA2SXVoSXR1dk9aVk9PUmVRZUJuSmJTYUVCbGJOK3oxUTJjQXMzWUEwN3d5M0NOdStiNVhCQktUMGIvWk9LL0VQQ2kwcUZHdHNkMzRXM3IwTnZRc2lyaFRLbVlRSDVYbVQ2NUpVZzlWWkt0R29HN1BNTW5iL3VZMzBucW9ZUUd3TVZQY0FlN0k0WWdOdHVSQUdSR01uUW9qWTBjaXd3Um5EYXdhUWZiUGF6SlFHWitTU2dpMGx2WElGbkZsc0kyQ1dIWVlxZUV0bHdCeWxCME1iREl4K0w0MUY5bmkrMFJXRmNnYUpaUUMvVzF1ak80UU1teWNXQU5rcXFNSWw3M2lXcE1yL29EdjkxYUNxTmtkeUo3S3B3bjlXWmxQT3lBZlZkdk9NdTVHVzFDS2kwdUVNWE11ZTd0QlJhaUpFdXpTQWprWkt3WGVQVlFXWnpwTU91SzVIaG5VaUc2enpzVURyS3ZnZGdJNTBjZ3R2UW5aTkpwYzNuQnlXTlRIb1dyY2YwNThpbUJrcGpwL3A5YUtaUVYvSFNqRkJSV3k5UjJZVkdLR1NUblNqUXFwUGZkWGFzU2RRc29SeEN5dWc2L0F6eGhCSjJRVzR0Nk4yTG9RbncxaENLWVg0M09wRUJ2cmpuU1NLNW1LTHRFdDZoWTgvUEpWK1EvMkU4dzE2NTRrU0FldFFnMms0VnJrUjYzcVBCaTNIK3I4aGxuUTY5ZFRFM1BQc2xwU2IrVGIwRHlGVXY5T1FFWDI5ZUI2NEhOa0NPQVk3SFVJVUVFZVF4ZjV1eWZvVlg3cEs0SUtDSTdXSCtibGh3TVQ0TVYvckFCa2VUWUtzNUErS1k2SnRUdmkyUDZkTHY3TEJadTVqcWlVMjU3SWhEVGU1L3hSZ0dsV3JMSS9CbEhmUStIa0dtSE5PU0pzWXVqbUJEZjdTeGI5UW1PeHlYNGxjbzNqbVpZbXJMZDFSMDdyQkxIZ2R2VUd4Z0g0VmdiTDg3R0dMUXZNa1U5K0lRUTdZYVFJd3J4V1FneHh3SXRDTlFXc29TejNmdmFPM0hiNWx2NnhNZnRSOW43VDJSWTVnNEFPYmp0ZmRiWnV5aVU3MUJJalBvWVFNcVI5VndzOHFYSzdUOXhjZHhZRGdvaFB2dGs5c0VTeUc0Y0RiaEdsZ0p5TVNjTU1seE1ZekVIdll0L3RhZ2dWVGcxY2NkUDJBUHpwZ1Q3KysvVDBhYk0xb0lwSERIQWlXSzdqYy9YWFlIajhVL3J2VEE4MExSZDJITlczSjdPUld6NzZYZFpsZk9DcmlaQ0tSb0JsallpbGtVYVU5K3FtYnRuaDNxQVFUaWtTSFBycWpXRmVuRnpCVGlwMTZrd0pqeUdCQVJmcys3eXdlL2w5MWFHaTNZdVdVZWNaSTNpN1pLNzJzSmdlNWNLbDNvYW4yZU1LVGhXUC96d291clNwWGc0Uzl4L3VNQ1F0Wm1EdGJyb0JYamVaUkFxWEh6dmJUOVdMMU51VDhPVTF4blJrZTFvZ0kyMkVTNFVVbnhQUUtIcEZtR2JnVnNwUi9JQVNna282REIrTU5oQmNTYXVvWDU2VVBsM0plRFBjVFU2UlB1aW01ejhBdFNKMEpQRm5YK0hxUDlnYjBkbzFMSlcrR1p2RXBDS3VuZnkvbDJpZDF3a1c2YU8vMzdvRlJPcGw4ZGphNk9IeVB4WnEwdmpWNVQ4NGVBcVlqL3ZpeERqSnN1RDV0TU14bFo3TTNFZnNucjNJZkxuemxzTFdxWFV1MWJyMlVqTWprNFpJQWFvN2gvQmY1ZTZrb2hkME1pdU55c08zZW9yKzhqL2hVbi9DYUFUTHJnK2xhREdrMXFwRXhibFFERlRCZW90TUtOcVd5RFZlQVNVUFlOSEdycjE5WENOYWdpMDg0WW1IMVVqQ3huSEpjb1U3TlhGYTduNmJtVDVzVFZERjhHZ21pLzhzVno2anNBQTdvbGpidDJGY3BSSW1jREtmeTNMWnlYMVh3cXVxdjliNHJUUkE1Mm45cWVCNDdSeFoxWURiRC9abEdCaldFUElqSVBTbkRDL0F0SElaMnRXM0c2TDNwWUZlcVNTTmk1Z3FrSS9qZDNTTGM0ZW9nZ3ROMWRBT1pmeEhOb2tWMHRmR3ZDQWdTVXdMVzZIaVpxdW5nVTFwOExZTFpDdGpPaVRkZ09LK2VBK1FYZk43aXJsUm44Y1k3VTQzQnNCYTlQMVJPOTBVb2lBUk1zWTRic20xK3BFTjRrOGF5VEZicEFUMzBtaDl3YVFYNmdEV3dsU1JSdXdXTUFielJONXQvWklaNDNaRlJNUllJcWRGRUxuWUpSWEtWb0dhQ0wwNnRrQmpzNGNubE5hSVZFcXF4andRQ1dVUUw5aW01NUYreEx0U1Rld2VkdGxSKzhVd1ZzYTRCTGg3ZEhVczJtc3R2a0Y1Q0UrbUVhTkpRYTNtZmJNejJmTlhGZXBMeTIzN2hpWTRCaUtRNDR0MWhxbzh6UUwxZlpRZ21tcGNLUWF1MTM3cDhScFdkVEY4aWlCL2czYU5IcmdMc2FDYXVOMGRZT01lRHdNOERHeGNpUUl0VGtsSVZwYkRkWG1EZWdpVElGQWZVODVNT2h0RHdLV2JuSGR2NWgvQWNOQy9ZZUVvd3NPdllteXNYU2R2SW1yREtsank1L0tSalMxMWY4OS9aVDFibUFYdUgxendmUlJxNHJJOFNPSTBlUEZqQWs5L2VDdC94WHZrZTRvVGkwcnFkUll0MzhmbTdzeXdrbEdmdWErMlp6c0ptTHhsREs5b3RwRU9OcWNZS1dxYVAydEZMTnVHN3hEUVUvYzFIbUZCZTBIQmZ2WTFsTXVDa3pBODNhMUljbS9veGMxWTd0emhiRTltS3lzZXg0dFUrV1ZkMDlnWmkyRlVnRVUxSWJzN1FzVWR5ZXd6REVvcUpDNjU3b0dna0JiNzJLWE1IU1hrYWVXRkZ3cTRZVWJ4WVVDMjlSbFZ1dXNXeTZoL24rTVo1anFqOThaWEsrdmF3SExHM25Oa3ZzdlFQRHRkUzhuTkRsNDBrSWNKOUNaZGcrODJzU0FOWmsvSUdXaW42c3FBNHhsRXRBYmFsQkFYc01xN2tEdDA2ekppY1QvSFNoNGZhUWtRTEJLY1JJNnVJVUFGbDA1SGpLNDVwSlk1aUxXREVUd0FLZzlnckNsVnkxMXQ4QTgycEwyczRKZDVjYmdMeHdvMTV0MWpOeUM4UXJFb0NYWnZRYVZ0cDVxaUhmNzRsZkhxaXltdjJ3QjRkbUFJRXJPaGtxQzh2VzRVSmRIUjAzQ1FQSUphSjAzSzZ3L25kTW8xQzZsSGZabmJJaHNXei9tVUVWOFpKNGl0VVc3dG1kLzRlWjlYQXFzUCsrQTRHQjUwdHJSM2FtZ0FGVFNpN2F4UWJDM3g2RWpwdzlQTlB1K2dOQ2Evajl2S1U1SEt2NStRMVdwWHQ1dFFHK0dSNmg1cVFpL1JQNGY4QnpuYlAxSDdNZHBGTVI2Q3BGTUN6U3JoMDFPQm9ra3krS1BkNXlKZ1E2RnFxUEV4aWtxbVlIaDFONVpueWpmZE81Uk92ZWZnTmwweXh5eTljZmI1UDV1LzBBdDFzbTllQzNHeUJuY1JnNm41cVVtb3R5eFlseld1UTN6cGljMHZEOFpqa0lTeFN0ZVNaemFMZlc5SFFKdjZsbm9oVnpVV0Uvd1NzWlE0eS9qZ1NQM0dyQTBsTnJqRWpFYUNoTzEwTno5TUcyQzhsL0Y0UDhuUnlJaUVremZZVEVnMk5zZXBqaVQxU0J6SlJFNXRIeXlzOXlqUitDUiszenNVcjlueVhLdXQ2Y1VKaytzYTJCMmwzcUpWVkUwWmtUb0VjZ0pjWGhBcTlvSG1ramczQmc0VTlMaWRDZjBUMHVVcTBPNFgzdWJwYzR5MzZSWlVLOEZEd0tMeUhudElwL2lJai9sWUZWZk9wZXdmTDZRaFlVdnhiYnZTaTFQc1VVbm9FcVNEcThlR1BJUE9QTUhQSnJoMEJKRHVDMWlVVWZlbDdzcDNpZmxFbVFmek1qNmYxTitTSWhuU00rZUJ5NFJGaU1KWW9SMkJZM0NPR2ZlZk42MmlkTnFtOTB3MXlOSUY4aERxRk1GUmVvMUJYdk9BYVdwd2FzdUdEcWJ2NllpTzRrTnpteGJlWm5kZDlEOURReW5sZFRQQWFLTFc5VDFrcHBsOE1PMWNPcGNlZ3RaWlpjM0pvcFA0dURSU1hNb2pQbmpqempWOFdtVUFmeWtCTFdJeEl3ZkUxOHYrOTlwK0E4cGxOdzFVamQ3Tnh5MHhCK0RHRGkvYm5nQmtzVmJGbEd1QUcvaCtHNVZNYkhVSkIwY0F0TnBUT2JRSHZKY2VOczIxTmFMZ1FsbU10K2NEQVJSb2YreXVOTzU0NS84bkpFQlRrczR5T3J0TXhoeEdlYk54R01VK2FlN2NIZXZ2dkRYT21Pd2pVKzBXWlZqQ0hPUzNFM0hjYk5yQmhva2hNU1NxSWhiU0lFaTFWRnJVUWVJS3JvQ1daeHZmaU43T2xCNVJueTgwRCswSnVxa1liQ2pWeEpuS3plVXFGalNuWWRmVXVaU1o0YjFsVDBOamFwWGE1Y3dIZkZXZlhQbUk5WWNBMUZhcDRLQUZUOExyaGt1MUg1YnM3V3ZGdXlaVFpSSUNyUzJNRHp0bnN2eHNXNm9sa0REUVA1ei9GUGtNTlN3WXlTN0g2NVdrMStsWWVJd2xSMjdtZk5zQThyS3oyMm5iUkJXQWNWc3p1UkJOWlo1Tk91RnEvWGNuYVdJbmdJS1VGdW1QbXJsUEJFSHNWODUzRlBOKzU3cFpMdFJ0VW5DMU1RUDg4QWtidlAwUHNYQ0xxd1FxRzFsZ2oxK0hJSlpKdk5CaDU3RmhYbGNXVmgwMTNibmkvamtmZFFSWTlFZEo0YkRxVzk0WXlQcTM3emdCb1F2ZGVYSmVvWklIckZyTWxUYWxpV01EbGowTWVGeDJHRzgxM3ZJU1JHRytXbi9nY003NHRXMXk5NjNaK28zOVZ6Uzh6R1dvWXpjbjRLdXNEa1B5bXJ0Szd5SkQwUUEzNkNuZHArcGZtMmM3b3Bmbzg1clZ0bHp6NWN3LzNDSjBIbi9GUGE3enNxbU5MMWF4cEVZb1RHU3pCYU8rYU9aSVc0Zi9EanhjN0ZZd2VLTW41V21teUc3dDg1VTNSQjc1Z2g2SnM3WGs4aC84SkdtY0Z6eHNPRHRNNG50dHEzMEpZTE1zbHFjZEpzaVBQRytRVHRCbEJqTVVoeW9Gb1BQUVBkNHpuUUR0VXhISE9oSmFFNCtUODN3TU8xTUdzaGxqL2oxNHpiT3ZhRlJ4VWN2NWZBZnhVL2dKeFVySkRtVzQ4Q2pNaVNKQkw0QmU3YnBtMnVZU3JEME04d01rdXhTY3NPWmNVZDR0TXBnUFRyTTJaNlFoNytETmE4eDgvalVuYmwydDIvQXl5WmxSeGx4NmI4SlJjSnRId2RORjNNV2JBTDBnZmkxL3E1L04wUVpJZ2wwYkRuSmYwckE3NUNUNGc5UlBUbCsxYnZtSzVTdEE3dFpDRHQ5ZUszQ3hXS0VBSzVWQlBuOWdMckMxeTNheG0yZVNRQlRjYTYxUUZHemg4V1hnQmxUOEQrNlBhVjcwbUZjZithb0xpbW12TXNFUnpjR2U5d2hYbEhyUXB6NUhhOXJ4UUtNOVR0bUpGZWJTNlNzQnRaSzBvcFQ2WlhkT0gyZ2pjQ1hjSHNnZ2w5c3Z4bFhUR1ZuWGdQdGZKK1RDVnpaRFZUbVkwUzYvZ2lYQVBGaktjSjZzY3FlKzM1ZjJ3dXdUQnQ2c2JjSzVSb1hRV3Y0NU5qRDBibXdtcDVhS3lXMVAybmdpNy9wY3pXREM1UDJQNWtwNVZnbFlSMklGekJINXpSajVsY0x5K0JPNC9YTkJ6Vk85ZmVMTittb2lXY1M0QlNzODZDS3BqQTFCVnMwYXNkOUNleE5zdE0yWVFGREt5c1FITmY2Ry8wN0tyY1Y4MU5NQXdqVGRSNFhhOFNFWVdBdXRHM09wSkhzMmhqMUpYTFV5OE5vRlByTUI2UFJMY2FuWitZRUZsTUhhYVZUMHl2R1FYamVxQUVIMUV2RmsvSU11WGp0U1BuQ2g5MW4zQ2tBQndHSzZib2UvQ2dDaGRBVXF5S2xLV2NsSncvZ1hiREo1VkEzcWNzMlJEUEsyb0YxdThJRWZKdWhnUDk4V0tUaXBRWGs1dHo4WEdBa0lPLzhiYml4aVFmd05SSjJyeng3aE1JVytUZm1zUU5NQ1VJcytEbTkvTlJ0R0xNa2dFU2VxSG5BY2hxOXpVR1dvQnY1TFNCV3V3QVF6MmlTc1ZaaFcrTHNRM3BIanZPNUVCVHV3MHpyTlBHa1pmb284eTF5M2xPdXZkb0RNZzg4RVVpSUFWd25NSUFVbCtOUFFMcUNFWUtsb2I1REpTRmFvWDdDL0cybTJrUmNWSTBIZG9hZFdtS0hGZlRsWU11UEhoUUp1cThLb0JpcTlPUk9rNTMrc3dEQ1NERnU3RmoyWXFoNVJEUVJpWjk4aENZcUxPWkVxUFhYM0RsSGVaR3VKN0ozc0FVcDBucmc3YU9DYWhlZkx1QkdhWENrMjR4N3hCWlZLVDd4NGZ4ZUI5OGNoWEkxKy9Ta3RHdDh1Q0x1TDVFaENZNTh6Z1hTZkszZEFUSUZEY2NGNnU5eG1HV1BtRk5wNGVSOGZ4NEdPQmhpOWdUUklWWm9wdFdUVGpIdEpFNHB2M2lhU2FOek5NcUxLWXFuei9hYjNxUG1IZVUwY3YwV1hxNWR1cUg0UHRoc3EzM2pSVjlQRjRrQ3RGMFJPUU9CYnczcGFTZjhRMjhmRUhRbTVnN2JEbjJCV2Y1TjhPQjFBNnl0REZqL2JTSFJDVVBKOUV3S2hRM1ZPcGtBeDN1aXRuOXgrZnpLYWhMZVY0VEp0NFdvTG83dytUenliL1lMT1BreFN2VE5QMkh6MEl5SnJiNDF3cHV0U0JQbTRqMWE3WnhlRDZNWS9GTVhFYTV4SDJoRVdFREdKbmdyU0EyZE5jdnlNNDlKaWVVYWpUNHlLYVl2ektmeVNLbDBHdHh2d1pTYWMzSFFRYWZKbld5c3NKUXJHYTVudGRsRFE0TGVaczlZTUpGVkt4enhBKzBzSW5BL0VqTWdlR1Bvak9VdCtYeUcwcHZ5NG80eXNweWVVN2V6SmVVT09QSmk1dk83RGRTRmJxNkU3R0NrVC9heHVmRVR0eDdKTlAwUkc1TDl2T0plL2UrL0VnUWoweG01bnNZYVljZXFtN09YbHBkcGN2MThOaHYyNUt0UFNRYkFzbHhCRWNvcEpxV20vbkhKMTkvbnFSU0V3S1dsVjlvaDFBelhXdit1VDVCTG00OHlGdW9ZNjRUczJQUkxhRFVEK1NzRXdWUTBLOHRGRTVPaVRFS0NLeVo2UFFtQ1FPNE92L2FCMFNRYWl2Y2g3OXlhU0UvM21KT0l6YkEyR1dPZEw1b0dzTkxzQ0dzR09HNnBjNFVQUCtydXkwUEhPNm9HSlFDWnNmdlh2NklEaUNBMG8yQ1JZQVVnbzYxU1dBRk0vdVRydTF2c2FxVmxTOG5VVmkrRkpJVCtmR1g3aHhJYzRkb3gvTE1nVmFPdEZBUlBRVjJqTC9hZGtBMmwzblFyYU9teVR1d1BLZkU4eXhOQ0VYeStrUHBQN1VoWlllYlJNZC92bmJBZHpoOGdsUlNyMFhpcVJKYm1STStTNWs5WllobDltUm5lTDZxaHFSMy9DK2w5NU1DZkQvaUlmTXQrU0pkOTRGLzkwUWh4ejlpZGJpNDhGcjc2MlNMNnNlQ3V1bllVaCtPRXRta0FNREpBU3RxR2tIcFVyN3phS09Tc1gzWW1ERlAzNHJEQnR3dUoxTnhBZzZoZVR4MkV3d3gwYlBsSmx0SHpVdm9wL0c1QlNuVkt2OHUwdk9sOGF5U09BQ3BBS0VteFUrUkdNVDNxY1BYc29LZCsya2szN21tMlpqN2JFUzVuQ29PT0hNNE93VmxIWHVWWFEyYUNlczNWcXV5dUhreUNrZ0FFcFU0K2VKQjM4WXJLNE9OaG4xY1pjeEVpalVLVURITE1iQkRLc09rV3FPTFd1WXVUM0REakpQRlN0NytVemZ5Y0hPS1lTbmsxZ0VWYS9wbXY5L2hpWlFuS1hVUFhJWm9zci9WSklLUEtWNmROOVpReGgxNEtDaUROQnhGc1Rma09CbnlyWHdTTXlOVTBwMHlrWVc1RUU0OVNoOC85VlhJUGJrMmU3TlBWQ1FwbXBVK1VyK3JBNm1BMXlpK2ZrNklPUlNRcVZHZ3RpTUZsbkRsS05IU0FrNDlSd284ejZUNHVrVEd0WFp2R1dUT2h6dGgrMzVRbG5DdUp3ZUxNdnJJMGQxY2drblBITWE0OUw1OUFJT3JhSU9FRWFyRGFheGFxRDFPeGdISVNoSTJPZjBmeDFoVWdkSUdNMUZmSWFwT3hNdS9jdXprZzR4aERzY2ZMbTlZSThhN2JDYmhlbHRZNzFIZ05DYy9DbEdVVFNMVE9GTlNMbFdjUzhZd0dETG1sSGFhTFNKaWdZak5TT2JFakVJWFdTNjAzMHl6N3pFalUxQldTUk1SbW1GSHZLRW4vT29WdzI0TWxKT1ZHSkpVcTBPV1JMbkhRL1BiTGNnTzNqS3h1NXVLUlFuSWJsQTFaZjI4YVRYbnFzNGtyODA1YnlXZ082U25Ed05pVWlHMWh6cDFaNmFxc2tjUFIvdjliSTNDdlZ2S3ZuNFdRZGovMFRwZHRpNWZLYTdPeFJmMUdQMTQ0SHl6Nmlpa1hvWlkwcEkwTCt3ZG4vTVhuY1FrUFlhdVoxZVZHVkZ5TmJpajBJWnByQ2UzcTBLeWxVSERXN3BDOWRYR0pEQkhtajQ5NXhWMGhHWFl6czhWUlJlRWpPbURNRzAvMGpXSGhYSThvZ2J5SnNDeTFJQjNTYm9XN0NweW02ZXo0aTNIMHlxWE9ISnVUWVdnaE9EY0JlWU52TVBISGQ3R3FTQ2UvSUd3M3JuVkN6T3RBcjJEYmhHY3llU0w5OCsrdDZTYm5VazZsTFN3ZS9DL3FucjJDWWVxR0h4RFRjU2c3TUhZZ3ZRcmJxUkJvQ3ZBZWxCTUVXNHl0c1cwVVRyd2M3U2VKc2VPNndoVituYzFGV3NtNC81aUdDZXlnNHA3NE9haEdtTDhKbjZ5ZUhTLzJKWGlLT2N5OTB3aTBtTzNUUEZhOXpLUXJVbFMrRlAzUlBRYlloYWZQVHFOekZxbG04Rzd3d1VvWE5ja1o5RE42NWtVWlVvMWxsdjNvL1ZMVThHR2FJSW1ONTRCa3FCM2ZNZ2dsMXNTU3Z0YlhkelBmVkxNNCs0M0NVa1RUc0RWUDNwUFVCa2R1L3doeE5UUG52VStLdmp3V1o4aG5Tc3BFTitFc2FwVHhwYjJnODBXTm5la1QzMmFwZnphRzZ5Q2g3RmFiSFVQK0NjOWd1SzYyelVuQUpBaEVZaU5KWlB3Njc3a1RhQjMyakhDVzBUVEgzczRwWGlNVEdPR0M1M00zYUM2U29FL25SZ0FJMjJvRHIyZWhiMWJueVVNd05TNXM3cjduUVdobXpERDBoQTkwT0ZPazVGbkVaaXRJVkY1L2RrR2FTb1JMSWl5OGdhTVZtbUFnRk1aNXgreFBEVmxMQlN2cmtYdHJFT2t5N3dKTXNkVWhOVG81NStwS3hlWXVOYVNNL1AzMjFGK3hEdWc0NC95cmE4R0k0ZWNDbVZldE9UUHlDYzZjTFphdjk2M3JGbXpDTnVaMC9jWUNzYXliN2pHOWNDenhTT0o3djk3K1pla3BmOGVxcW5ZWEJsdkgxYjBVaWMzR2lXcXBsamlkYTZNWkttdElvN2o5cDBPQzBuZnEvZFhNUUR6dVltMkVRdWpXSy8zMzZscXBhM00rbThtVFUvWVVzZzExSDlnWXpVZC9vWDJjb2RiY2RXRkpxeGVpSnNVcWRNb284NGVLSUUwSWRucG1GMmk4R1NiaCtLNHF3MmVxdTRCWSs0dkpSY0FRcGF3WEhTMG5uTmcyRGU5NzczZHdhSEtjL0s4a0hqSVYwdDdiclg2K3VScjFOZUUrRUJ6T0pvMUFwVkRscjlJdUtyTThuT1plVFNXaXQvVGVhMFhDTU5uODlsWEpXc0piNWxMNnViZEZpN2o3SzNXNW0yTFBaVC9QUXcrUCtJRXJuM1JYRkZkTmRhcWc0QmpzeGY0YTcxTWlrUWNoVDF1L1I3NHVuVXNpNzQ3WXB4U1E2bGN0QU5KbndPWno3Q1c5S3NadS9PcFJ6aTVLZFAxMElub3BwcUNuaW9xRW9KM2pOaCtRbmt5aVdYbWNUcy92ZFRveGcvNEFWc21VUFRZcWVSSXJhVGowM2hRdllQZ1kzdEhadEtsSG5WWVZrZFFnV0NhTTdXRjFLVGZmclR4bU83TVVmaGcwZEpLbmx0cDF2VlcyZ2dDSnlkSTI3WWNycGtGRi9zVDVoTGxJeGExeVBuVVN0YzhUdlROazY3a05ZVEhYcjVnV2x2VU5YTDBEWE91TEJlUFRSUEh6T0RLL1hsdEZPRWlSYmtQTGFxWUlPQVI3MUxTVDEzQWRmME45elNmRll1cmg0b2s2NlNpS2tab21NMnZpU2VzTzVWbm04TkM4aytHSS8xanlUYndpcUV2R0xuQkFOaGR5RGtWbm9QR2d0UlRKaVk3cUlZWjVNeXRqdFUxa0djRUJKTWRkcnJveFZEdExvcGlWRlNEdm1tU0hwdHlYZEFGUWpxZEZoRnFPNkovWmJscEpBRGpHQnI2VENDc3R5bEc5VDZhekViajArNGhMUlpwY0hiYUxrQWlzV2xOejM1THhOL3BmSmR4bDMzTVFwelNHVHp1RlBHWkp3T2Y4dHBsbzZ3M2VtOTFYSXZ6N2JHMFFGMnFqRXBOQ3hxbXY3RXFUR3lPZmdUZktUNmVsL0wwTUdOVjRtY3N5bHpVMFdTNWU5emRSaWhPTFM2b2Vnc0c0eGx0ZHlHMUtFb1M0VWJLRHduR21pc2hoM3JxeGxlQUx0Tkx2emQySXFiQnBETUU1T0Vkd1p3aTBvcHB5NzNXcTdSTmFFM1NIRkVTQURJTG9BZSsreE42bkV6VVdseHBFeDRTd1BZMTk5eWswSTdKUm15NHByWTBJUEJxVjEveDBVUUZPOEtCc0ZxbEhrczZmbEFNOWl3eTZvd1IyVzBncE9WSGdXeThycXBUcGsySEU5SkVpTTFpcFMyVkdRQnVXT2pmcnYzMmd4MkVJWkxGT2ZOdW9IcFNXbnVWTTRSMStEVXEzUGVHdFFDaVo0MkJqTGNtT3dHNzB3TVdRR2swR0tUWHJlMXdoK3hkTERoNUNSN1hxaitINlpSdkpFN1dWK29xVElvSVZJQjd3V2I0cUlDL0xxMDlLRWZ0eUFxTEZMOUlVT0hkMjFrVDV1ckc1Y2JDMWg5c1dnVFgzNGtDRXN5ZnpuNVl6aS9KVDhmaHUrdGE5Qy9wQ2JqdVVNM0l0RjNFeHFmZExRTm94WGRZd2xIY2cxV2E1cWlkd1lsS0p1YloxRnY0dWJHWlBpZzcxV04xRllzNy9hNm5rVTFqUEtKRjZoU3Y4alJFL0d2bzFMTUlnNEgwSzBwaFVhV3JpeUlJK2t6SU1JWlo1eGJVaC96Zm5EczNkU0xPQ2tXN2VKTTZ4TzZhQUR3cU9DRndkR1ZEQk41bXBmekR2OUt3ZEM1UHM4a01lZTB1MmE1b05jTXZWcjNxYWdtdzlrWVdRQnJGRGozcFk1UlJ4R2IrbklsSWtqZVlud3ZMbEFsRVZjaTA5bmpocGVoWEtJa2hsbmZwbHo5Q0FmUTdNTEU4TVZGYVpDR1B4VHoxWmpGR2JZNVRzNmJVcS9mVlhrUzZwb093Nzd0aDNOTGJsRW1XTzJMcWFBYTdlYWJsNE9PQUg2YkNEOGw4YWVJbkVLdjNnL2VzY1d3NmRPV2cwMTByQ1dpWjVYdEpyUEY1c0lvY2s5NkIzanBLRlFETGhQV2taMUpyamVZZ3dFODFPTlI1Z1pETDdRdVliMXpabXRoSGNNL09xakRXOXZzZmlNMTJOcm1PRXBlbXovVjBudWJ5clA0cDNhYTVHUmViOXQrcEYraU9RVkx1MmtQYWg3TnRMQjk1aFU4Nnd5Uk93a2h1eko1aWJDMDE4TXM0ZkcxaWFRR1g4aUUyckhkTEVLTWR0ZnpOV1RPQnVtdGlvSFRFcFpsY1pPbGdJdFNBaWl6d1RBdGpMZWdzdmRrdEtGTkQwckNIR21CQkFyQ1B0VEZoYlp6dTFUTTVIUFRoVnpEVmdvVEl4WGxITlFnejJENWNQbm5IMFY3Yk9idjlnZG1DTmhnVnp2V0laSjdlT1JwVE13eFB1WlZSeHlrYXJISEd2U3hSNCtzZE10QkhBakpJNWNHQlI1RmxhQ2QydjdNMFVEZ0JJQnUvaUN1SG5NVWRER3NuWEJYMTBFalB1ZHNseGcyc0lMSWJUVElVenNTdnlHa0tzOGV0TEVjVWlVWnNkN2hSY2ZvUThQNVltZENvMjJ6Tzl0VGtZOCtoNlB5ZTlNZXBmZTl5R2wzTS9kT2hoTGVERlkwMFJXTFEvYVNhZ1ZRL0RNWldnekRFOTc5T0ZiRXQ0MnhXTkdJSS9FQWNBeUVWR1J0YS9PR2RkNkJrcktIbVpjNyt2T1FDQ1N2bHA0YVhrN3FnVWFLVUoyWXE3TGl4cHV6blFXTXl6QzJtL0RkSWc3L01xNXRJejRjVFNadE9CU0FKWnBHZk41THB2VjVQUXhSWGVoS3EweHRsU0VFOGlMUmtMU1ZZRGMyME5jNkg0ZnV2SDdudkpTdzdBOEMwYVcyZHRDbHpnM2F3Ym9GdVdMd1FLNzRnQTdpblBINmh1Z1lFcUhFcUt0S2lwb3dOb1BRTU0zZzMrRk5aTjhoM0w1enJzb2hUSHpIWlhvVlZsLzMzeGhsQ0FMMHB4dzFab3JabEp5Z2JaTC9DWHFrL1ZwcnZ3WmlJeHlzV09PSXkzU2liT1B2S1JUellhTGlyblBKa0RWQ3cvamZ2YW5CdDAycWp0dEVnYzdqK3BvUEFpTDFxTWZqL1hjb2pCMnFySUMyNjFKU3FhSnA4TDZiQUptTUtMVGhQcXkreWNHZVhqWlAyeHZrUDFwTk1CMFpKYVNudHpRREt3MUcwNkRYSHdRT3A5d0Q0UlVtaGpDUm9xT2FtRVc1Y0ZiTDZUM29pdTVtMHowWk9hZFJOU3hWd3VRcmxZYlRzckN1TUdBRVY5VnVsZHh6ZEFuMzlCMkppb1U1Tkc0eElZRTNzYzRvYzFmZ1VQRFFEb3d6WU56RzgvNkFNdFVtQzh6T2F4RENRKyswdjJwZG9ZbFppRDFvbFhDWnlRUHkvM2RnUkhhbnBaUWxLdFl1djVRbTNyR2dFUEhBM2xUekVxbUlCT0lybEZRM0tkVEg1djlMY0V5QURhSzRTL28yMWk0N2gyMHJKdXI0djVUanh2djVTMlZzMkNZTlcxUEh3UnpERjZKT0l4YlFXU3UyWGJ3bS9sU09DTHpHUVkzNWJxWmk1MmtUdThvbVNKRGF1ZDZEcjh5MUFIUks5KzJYblY5bWJoSGJZek9VYWt2ZGgvR0FIZmxtYTZRZVZkc25kNVJkWTRtMlhaRkpCbmgzdWIydXJYOGkydC9TM1NBRUJ1UXhzdHJmcnFqV2lWMGs3cTR1TEZEWG9tb3FvcDd3NUVpV1d6N1BmcFUyQzJDRGhvWmVsTHZqMXBsZGorL0VxbDdJNVE3U1B0Rmw0akRzbCtaRnNvcHI0NUw3TXZDKzRNMmZWMkc3RXAwNzJORGk2SjNsRDdobTdvL29DM1p5a3pXelBDcml2OVcxeWlDRUdlN3N6akRMQlZCM1l4dXI3U2lURXdBSTB6YkthQllhQnRlT0t2WXlsanQ5MFNBUGt1aUhNYVNsMTRmU3ZOc1Zzbnd0bEhSb25BUm5Wc28vTGVVVFFaR1FzTFJHOXZnUmo0bE9Zd0xnaHd0VmZpWWZVMkp3c1gyZzVCK2xpTkM3WGRiUTVoc201OFdsQnBHejhyRDFlaFUwSXVTM1ZjMU42YThRdmF1M0xzcDY0TE5UZWVBOHZXWDE2YTcvQ2VNV0grUkJOdGdiQTZ3ZGxKTlc0RTE1Slhoekw3WFJ6Ym1HM0s5YzYwaWhuZTVnSlRTMm9xcGx1dXRoN3VuTjl6NFlydUN2MmE3NC9IZjFxcHFDalVCTVZjbG0wM0RUTWVVNnBWYzd3WFJRdlBNTEVIU3gyYThsSk1TbW1aNjJNdDNHNVFuTzVMT1U0TUFNZkd3TUIvTjZlbmFRMGM0Y1dVWUJFNEp5bTduWlp1bVhPQWdBM1NUeDZlRGdVblhXWXlIU1Q3L013VFRHKzFrZlpIVVBVWGpnRmJURWdBVTVLbEVKSDhBVlZZbG9wVDhRKzVPd0RyUWlFRGlHZDM1bEpJV3NteS9sSHBzeUxaTG5pcjByekdVdnBpdUt2Q1htRjNnZUtZSXdsK3haajVIalNmcklvUDFjaXhEQm4veGQ0OXN1MHBsb3M1L2pUR1NNaS9Jekk4VG5JTmFIbTR4K0gvdFYrRHdUUVEvckhCcnVyV3dRdW9oOXo3RmNIMVc3UU1YejB3UUNBRTlHYi9POC9Ld2U3VTIySzJOc3dVWnRCQmNaVzVLeTlsM01qZ3ZHYVBuYkJGM3dOcXBuOEtqck1CM3pSNVdSTkVCc0c0MVJQZXBjVE96UCs3S2pQMWNDVm1ZcXJmOTk1UlBOS1RMRnhyaTBuTE1wRFlxSXBENG1Ha1lzbnJWckh2NElkd0diRFp0Wnk4amJuSGxkdjljRTJCTlhQV29tM1kyemhtdmtuWjZ2RnU3K0taSGFOS2VuYVg0cDBRdlpQUk9XdjhJWDVOZmwzcmZpa0NVYjViS1FjbWxtWjkxenhQQWg2bjViaDJFdUZWaTFjandybXVXUnlmRmgzZm9zM1RFUnh2MEdUSjhxMUxKSThYRmU1dDJ1MGUrZnc1VTBFb1lESlpRcUVKcDBlU0E3UWR5NE5CRG1wUTBFUDNGSi9NSzR2WEIyRUFnT0tMYWt5Vnh1bXFxSVdSSDNVY1lYek1KYVVKc2hJdzZEdCtmMHlkWU1acFRPRGxXeGsyTWdSZU9SeU90N1dsYXlhc2FwaVdhckJPMjBPdFJ5eE9EOTg4RG9DaXJzYjFGUk11dTFwcFpnQzh0N0syb0VQTjVPYVJrTzBXaUNQRnh1Szl3eHdZQ2kzNGdJWnQ0Rk9kaUtwUFlZVWhIMkxUSldrdlRMaVZ0UE1iVjJ3Y2NSU3RIRmkyRVk5TTgzaG00ODQydWd3K3lLTDlIdEh0YzBLL3hST3RBcnlKTHJtVVdnUTB4S1dZeTBJQStjaG41YS9jUUR6cmVPVUpJQTdiR1F6b3RaclZ6bTcvdGorUnNVU3NVVWluWUZPZDVPWkhCeHZiWmc2UWdjcGdwdFU4TUhzazRLekNBOVRpM0lhOC9JQzR0RmFwZGNLeTNqZ0U3U2thWWovOHBRamRTaSsvdHkxcGZsb3U4TEI2YjlHb1FKa0hjbWtkczFCTUN2a2twSURSbU85MnNQVXVnUFpsWjczM01JQ29xcmZIakNNTmpmQ21UWi9VNG9keTRvK2pLT01SeXdXYXRwTVNzY0xXeXVGTjBLV0lVc1BiMlZsTENFOVZBbFVWaTBuOXRDYmsrSkZBcHVUd2tpRW9KQ3VqVzV2TndiTkN3dUZOMURvakF6dnkyVjNTeTZHaklOTnJBYmRTYlF1N2FYeG5LUjA1RDdHZVZXVDZRaytxQ0pWV01Mam80Zzl4T21TbGhiWnFDT21oem5pUVA3S1J4YTFBUjArK2kwdStEWjVxbjYwUTBXTkNlc3k5K1ZPeHJNM1phTkc0UE1oVWdaenhRYmZpMno1Z0txYnhLVFFkaXZRTVF2UUUrNzhkMTRobW5IRzRTRFFjS1k1bFpHeTFLbTJWeU8wU0RockVvZjdYaEJnU1ZjZDdqdDd4TXJvSzg1VHVBS3lneGhvUE1VZUM5aDB3Q2F2S2FTTnRRU3BoVUJGWmtqZUVpNGcyWkwyaXR2WG9RSnUwMFZseFE1VmVVcmVXS2dTM09jSTE0bDJ6VG1ZZ1BvaTh6VGNPRlYreHAzYnRqNHlidmoyTS9pdDJtN29sdjFsQlZBYTJWVXBoY2xXN1RGUVFjQ0Njbmg3ZkZNVko2Z2JzbG5VNEFydEtFcG1Jb00yd01oYjUwVlFnYThnU3k0M2E5UTZNSGFZdXMxTjJObGZNMWd2TzBWOHBpbGdmVlNnUVpZTkJ6T0dRUVlxVXMrL0ZmZkwwUFNlN1FUaVB5UDBwUnVsN0N1MFFYU2ZmQWhpRWI2elN3UlBoRnhMR3crOHFSdWFhZVNJVUJtTEkycC9yeHR6a0tJaC9qTkkxL09wbmxSa3Q4NERZSWhXZ3JwUTdKdHdhd2JWMDNiRkJpTXYxbytWQi93MEQwWjM5dVovOG0wYkxFK0h4dDZCZ0pXNk5TQzA1ZTVsUGFGcWUwdnQ3d3p0QWVQays1YVdYaWFoZUtIbFl3Nkt6WS9sejRjbEpnNEJHVEhVczJveWN6dGRWWTN3c3hzdC9YWjB5M0J0ME56bXhycVBmZTNvOG9ZUXN2Qm0zNTZjR3ZMN1JKcGcyakdrTHBxVGluRmVBMGc0ZE1ObDhYMjJVSDhyTWJBZXJzZDRMVFZ2bXhMaFVTNnZSbGI4bVJXeWIvUnFybDZPUnhCQ1dZUnRtU096cFJwY0I2ZjlXbyt0Ny9DR1UxTVNkczNnMXF5VXlzQlRpK2t0K2s5N2dTc3FnSGJzRitYYzVBOVpubGdtMFNtUmIxWEl5MDhBSDFsUkgwekt0N0d1RCtoRnZOaVRveTA4WncxUEpsdEZRaEJIemNpQ0dCVjJaZ0YvMlVZVlhYL1hBVVM4YURaZVRET2UzdkdMVmYrcGlsUEF2aXlrM3liK1pNR0JGUndGUWx5eTUzcytFWVd0UGFxaTAra09oMXdWWWgwYmh3UmE4Zm90L3N4UzRreTZJL1VmYS9sUENKS0pUSFFLY3hCM3Vnc3FnZDZQR1BoTytIUzd4cCtJRDZIcmpJUmx0b2dnOHU3N2ZpVnNlQ2xMTytCcUN3RmxVODJ5YmxxL0lGOEdxWVEzVWthQS9vVGhDVTZoTTJ4UWdvRXlTd0xLMUgrUzRKcGVMZjZqZkNLMnNFU0lxN3A1ZVBlVVA5dzNJL0gzaU41bXpJUlpvb0gycTVTbEF2MC9BdlUrc0R0bmJTOEhkYVFEMFI1NjZlc3ZmWGhxRUloTUplTWlBNjkwdFlkc1dCa2xvc3E0ckNyVXoxWHhWQlcreFdUTWI0bXpCaWppcTZwMG9lelg2ZkJUK0o0QVBwOThnYnNJQ1NqbXJkaUtvYVZZaFVnWG9xTkdHdXVkUDlqL1FmU1pPVGxLSDBCbGhnQzViWWZ5RzMvaVhQUWIvd2hqcXJva1dXRjNLeDY0Y1hUcHVGVGtyTnlhRlhxelArRmd3SVV0Y3VhTzJMMks1K3Zta3BONzFUd2VSbHlwZ01VQ2x6aFZtM3RKa3ZOQ1k4TXhDUGszN1BPWXF3N1NCZmVObVRNRHdYUTl6NW0zTmZ1MERiU0MzRGQ0aTBGVU1TbVNuMHNsYnNKZ3g2NG9LQ2NvU0lRbGhEWHNSR1hPTXZPSlFZREhHNEYrMXk1RGd2bUUyNkpmcWxOak9oWUEzdnkvRktwNHE2aVJpeXJvVXUyeFo3WkpxNWxES055TEFJa1M1RlRuSUt6NXJyUFRYVlkyalh5TWVwNUQvWGN3MGV1WEY4My9rZkJRdmZsK3Z4YWoybnlLV0xuTlI3NHhYeFMwd1QyK2F3OUhjLy8xcE1WRk1oUzI0aWF4dEY2Q3F2VitYNkxSbTBrbjU5VGVYR25qZy9JRDNTSHVONFFpdFFtK0xzTjUzdTdvcUxPYXdoS2xQaDcyc0E0bVVOR0VHdmtvTFhBeUYveFd6UTJyUjA3SHBJaTlUd3JTRkxQbHRzK2pSTHA0WjVibkxnRUhBc1huVStsQ1ZUNVFOQnhYKzdiQjZBWnNiR2NtbEhQVzUyajVFaW80N1VCOTZVOHdqQWNRcWtNakV3QXpEV3RqNEdGSmVEOTdrMEZ3NUVzTENvRFE3TXRpL1pkZ0hjRlVWejZoWTlNQ21laTlNUFZXMjFDbW1Ja0c0SFF3YkFHaXRVRURld2dTR0tRek9lWmpEQ1kxbDllblFyNGlqV0tIb010WmJkbHV0WkZnbnI4TTFCRkkzWXlqNytxVzBHcFJxM3FHVHg2QzhqSVdmSGEyKy9UWGd0SktLbXNvQTdlT1ZFNXROWExwVXhjUkQraDhvWXZjZmVOUmlySXFNalF4MTlzVENVQXpDWGFPTFRPd3FrRThKMi9DNmpDTEhoM2QwbVp6MS9mWkNMMk0wTzF0RjhTbUJBNnJwZVUxNERsYWxRZEpDd2E1QlZGWnJRREJkeXVYWlhjQ0p2S3ZMc0tKUEttcTFIUlBuMi9kR0xsK2w0cU9MdFVMZzVnZnQwQ0VnZ2NOWnAwWEFjSDl1MWhLNEZrRFkxUTNBZEZSN2V5c1J4cFVSNUNoMGJTMEtkN1NQNHpDZUZub1ZYSHJreHVGazhib0hlakVYQ0NobzYrK3BzTTM4bnVuNExUTGpTQ2dkS0lpSlBsWTV1dkZZNFUrM3JwOE95UzI3WVF4M083U2ZxT0pOMWxHN01OQktLV3NhTjJDc2MyRzN5YmJkeFhNQ3doRzFmV203TzN5MlJHYkZ4SktNK2hpaUIvM3BYVUZ1TDZIS1I0TEJDem5sVTRaQ2ZyTkZsdVNzdUcvcVNLRG0vRlN2Z1g2d1ZuWFpvOUN3ZVhXcmNrdXl6d2tVcFZEbXBlWHVlSTFIWDZWbWtrOHRSN3lZanVVK0llbWNmQVR0ekVVQVdzSWtUdUNHOStFeDZhVUlrZjA4c3pEckowNDVsQzdWZ0YwWG54ZDJFREk0ektpbGRoVTBGaEd0MkVUWlRBdmJvYXZKNVMyMXNPQ0FrV2tLSlFFTndXOHNIZDIwSDMySnRJM014K3hSK1hvSjh3d3JmMlZ1MXVTZ1IyWVdYM1ZhUmlmdkNBMUZHRGdUdWtoT2tDcU12cDNJWWE3WmJBaW1vL25zOGduTWJpVkVjZVM2VUU3dzRsWjJiR0hCTUZ3ZjNBQ3psbjNha2hRd24zTSttdXdROEQvVXFqbERaMm5nVDN5cHVFWCt4NlUvQnlieFlDSWMwWUdlUFZNYmtoYUpwWUM4cFJieTVySGdaM3hrc0VlNmpHd3FtOEhmWkptU2FWdUpDKzZLaHdvT3NJTGhNM2w1bE1lT2UxQnpUTmwxUENUN25UMk50aFVETmEyamtEa3RXZ3JFU2JESWwvWTNMNjFkdjdUR0lWVEhYWEpVS0swa21HbE5HZ1ZUODNFMkQrZ3ZvV1NjMUFudkVkWEJQMWpnLzc4emd6cW1lc2M4SjVyS0lIYUdmK2lTSjBRQjBNUkpKMjVJR3U3OU9tME5YQjFod0ZuZXRLUGVPZDdvUGllWTdmMnF2Q0kyQkJrV1V4SFR0OGx0a2syeThLQ0o2UE0rYW9qSm1lakJYcmlxdzMzOFNSTVlibVd3UjVtTUpqcFpuWW4rNFJzb1hsTExDL3g3TllQTnZ2QWZNSFFXVXdHakVJUDFHc3gzc1VVY2x4YjQ0Yy95SFk1Y3V4UVEvY0p3eTNuTG42SEJhK0NYZ2JaTnk0SThZRWJxSlUzWnpmV21RamNqZnFtcXRBT1dNdDU1WTZqSjNFSTIxbS91TnVUTmJMeTV0MDJSMkQ0U0VOY2VsYlN4TENCRGRxTWZjVHkxNW9ROGdWcHJsaFg4OVhSdnBKSFNIK1dkcGpMNmQxcTR3V2ttaEtvdnpYdWcxK1ZoemRHR2JjZ09xd3RpeTd3MzV0eWRDQmcyZlNENkx2YzMzSC8wbWc4emlqT2NISzNWSnpLZFlnYmRXWlpzOWdjSktLZkR5ZFRuUDROc1h6Ym9XK0JJaTVRWHJUaHdFMThIdGlhVHZXdUhXeUdOUGVGWjZEOCtMaE05a2dmOXdpZmNsUjl1YzI2S050YzlzekZIeC9McTNvY0oyc1RzRGliT3NqMDBUSzY2dHZ3U1NoeTZpcWcwb3hBOGh5NGlYZGMxeHpUcUR6V0g2UHByMWt4UmU4N2ticFdCQzRIS0QwTm5ESEZhMWRmOGtuclNPVXpLbS9lZUYyY2wreFJLbW1kWHFwSHVqMmlNd0c1d2VVTU44UXRHUEhWKzNrR1JjVCt6VGI1MHdDN0ZzU3FFNm9jTjdBQ1VJc0Q5UmJLZSthTE5mcXVoT0xWWkIvRy9wOENLVUFNNmxaKzNZUGRRVFc0TDBhbXhkUndSczM5OS9LT0FrRjhWOGpaTzQyQm1pdzREbGs0Q3RWZTNVNVZPRXU5dXIwYjZpaitKRWU1YWZERUhaS0d0SFVWdDQwVGs1ZWJTRjVZWUNPTm91SFdvM3paNFNQdmMvb2FhZzE1a1loMVMrUXMwcnNGMU5VMlZYc0dDRnJ0WjUrcUw2Y01FYU0wTjlEZ1BUdG42Vjg2NXJ5N2FrWGFFSjlwKyswdE41S1UxOHlrVEZhNCtmT0E3VTU3OXZjVitBcXMrcXltb3daS3dudzVIOVo1YTIzVUw0elA5MmhtUjBWRHlSaGMrdFkyWmkxS0l6czdPMVNWTEJOc0dDdVlUYjNZbUFKSjkrQU9CMTB0MnlnWDZOOEhJQjZUa0RSNnh2cjJCdmYrZVl3djlUelcxVytpQXV0TGoyZldlZGRDTko2anJWZ0V5YjBrcVVJbXVlRHRYbXpPUFBibkIwTHpNdzlEQmt5WGkxYkh5QmJhckJrWnBaSUhSWUxab3NiTnJPdzNyRWhmOExGU3FobEkvejNhR1o5NkdjOWRQVlBkSXpMZFJBeXMyZks5SmZ4aEJKTmljL0lkV216d1k1WEQzKzBvMFhHQVZhZkZZVkdrcXBQTVdjOXBnNStaU2NzamxLV3Y1UjNzQ0lyMzlVSHZTRGNBeEtHdGxxdHRiamNscDRQSU8wUkxwOUtkaDRYckxqQ1FoNEYzZlREU21mb0hyQ1FMTllyOVFHaVFHU0hLeEI4RWE0MG9keVFxZHJmTkJiaURDT1p0VUx0Qng2a2M5MmhNVjVyUWlCOUp6WlI0YXMyWlA4OE1yb3M4QkpnNis1MmEwS2hxb2dLUExjZlZJQWordVJnTXdQTmtia3pDMjREYW9ZYVNzUmtZS2g4Sms3a1RwMEszcmcvcURKcStFL2xxY0NodU1FRjZQTnpVWE5ZNEdrUUxXYUZGSDZVVzIza29DOFJaM1RRWkV5cnpiVGRTYkI3cnZiNlEvOGNLR05kYlJwUnA3dHVHanhncHFDMS9EOCtGYnJPWUlVWm9yNFlsNUdjR00xYTZQYWc2Qk9YUDhzV25IN1JDWEl0TnN5eFVQcGdrcmphVUQ5ckIyQmp6WE1UYUZqWTBVNEIzT3dzcEdhMDMzQndxaHdaYjlNQnNzMFdPOXoyN3JKTjNUQVpxdUVwazJ1YThVMDBvcUFkR204VWJNcGhtKzBGenl4emVXU1hudU50cUxVUnNKWHJBdEd1Z3pZZkM2d212Ylk1S3l1RGhSOWZvY2YrZW02dVI4dVZGcHJ0bFRJVDdYaUJ6Z2lybHUxZ2pmRkhEcWs3WEhvS2g4VlJtQkxteGZ1UkJxU0ZvY0FZRzN5R0lXcFAwK2hGa2tyV2RCb21CRWNsV3JUVkJHUzFic0QzN1RYSnFadE54RGFzTU1NdTMyWndzLzdvd1dIb1VFWmErTkUxaFd1bVRoU290V0VmTUtjd05qcGw1eVozMDR4WVQrdDFPenZXMnV2ODVaZFFtRHhSWlpPUWl3VEdCNGYvcmZCcjlsclZ2bGp0NFowWUxJVkI0T2dPc3NxUlkrYktYZ3ZaMHVFaUZVc0JmWktuL1ZtVkx0b3dKS0RNMXBZdjN0ZUloK2JDWnZWTk9MZ0gvMkNWd0VKM1lJYmNPMFdJRUlDdVJqa3VoQXpMUmlBdzFCcGE0TGJCMXpWdzllV1ZmdDFwSmRCWnUxaXdIYlhDNy9oQ3FFeW5IK3grZElFNGNONWI5M2d5UTBjckR2QzI0cDJwS2YwWU9OSklkNFRLNzNhWW9mT3dLTWxoOXBoL1puKy9mbVIwWkM0ampkZEZValhXUmxMRUY0ellSS0c1RVFpTmN6Zlh0Z2tmdmttaUdYZGN5akRqM1RGNzdoWGMvTXNBclZVY1ljbU1SWXJxR084aXFGdy9wUndONnplSXJZMERyRHZlWE41TkZUbXlxM0NXcU9SL3lJY1ZkcUs0V2FsNW41bWFTTGx3L2Rva1ZFRkxWK3FLVXRPem1PMzZ1b2xoei83aUNBdXpoVDV3Mi9zd0IzaithYVpCY2tHcloxdkh4T0hGNTZIYnEyL0tOdFRJTjBzV3Q5MGZkdlJJcVdjcWNRb0VXZ2lFcTJZb3NXZ0hYSmM3UEJuUXRWQ2E3OENtM3F6Y0ZmNUhScmF3UVdvaHVBTTdKWHhXUFo2dVl6T0cvOTYxSEhPenJFbkcvNDRxVzNyZEExUnJSTytHOUV6YlhEb3VYSHdoekFJYjM2VndnZTAwRExCeDFaTkJ5SXl5NUNIZzdwcC9CYVpmSVBwNlNYb2Fzd3g5S1ZxdUw4a0l6RjJ2TTI5RTdaQXBoTUpraGtkVkR2Sm1RbndtQ2NIL3pDSFBtYWx6NFU1QTVIOThJb0NscmRVRkMwRFJiNmsxREc0YVVtaUVPMDJRMHlDNldnN2dFTTdwcDZjV29GM3lrT3YxZmpDZFRpaSszOE9KVFRjL1pYc09qRUNITlNDNGVnOXN5MURuVG9WMFNKd0VvNmJNeTNQc1pkSlJSMm0rQ3hueG1vMzFIOU5xc09qaWp2RWtFSjFTUXppMklHbnBDcmk1Y0diUTFVSXlteXdMOEZzV3QyaEdUeVdJSjA0RlZuM3l2akJVWE9JQXBxdklVd3ozQ2hxdjF3UklZd1Bjc3NaR1l6VzNid25XVG9ZT1pCbFUzVXVKbXYzMURxTWl4cU41aWpKTC9FSGJiMEtNczVHYmFUS0VtVnVtQ0pSNUpuUTN5MW1VOXRJQW9VaDdmUE9EQk1QMHQ0cVp0cUQveXpHSDNlYUVVOUJXUjFCT3BSVzVsc2JXZGNUcCs0TXVPdVh4Vkd1ZGt1V05SU1BVRFpPVUlnTzIrTTRDUmJOWFBTakhtQnRhVGZmS2xIcGluVXhqQUVybndjcWtXMTBncGljZmttM3YyNXpNeWxwSDkvbWF5UmZWbmtqNFF6NXpqaHdqTXoxZ1piSmtMenVFMk5Oa0g2MWlCZkloR1NLL21LWE1relBkYzVQaUcxbFZkL3R6NWZPK2Nma21qcUZzQzdYYVpUVmh3a2hhRXFDMk5LNHBsTURQV1RBTldvZnBwOC9sVTNrbFlUcStXNzdyNU9NRDlBOG45VitnbEJCYzhnN2ZTRkF4U29wN2lIWllheWdQdkVVTXhZclVTZG5jK0IyV3pRMXpmRzI5cUZnQVYyQThoOVZVaWxSUU1yWXY5bzR2YUZObEpQKy9NNmdqaFllWDNsQU1veFA2M1Y5K0NDb3g4MEk1WVJ6VDMxbmw0empQYkNzVklZMHVWMnprbFh5bGhiSkVUMGl6TGthS1JkRmYyS1BpTHdYaHJhcG9vd2p1S1ZjSzNtQ2hyK1A3U1NpUHh3TTBCc0srV2g3eVRpNmIzc2kzQTd1bVRWZ1hYOFJaNHQ5Z0dlODJWS1Vlc1Mvb2pnZHhkMnljMVl0T0s1TXBKdUh6NVlhcnZ3amF1UHlkRzAyTHJneXQ3My9aYzFJWVMxTkh1eDluMzBNRDdLMVhROTYwY29lU253WUo0ck5RbXhyNlVWNkt1SzVPK2hzOTFOKytza3VzdlRhaE9kZnlxWFFjUlVRMjZDeWpDeE1HQ0g3VnJwRmVtZzN0bkR6RlRVSE1WSW9uVUdzU3JGTUoxdzFwSGtqY25SRTYranV0eWRWbW0zUW8wSFh1WVkyazlWdGJkRGhBNXRhZXp4MDk5b0ZqKzAya0Y0V3NSTENKeThxSThzUHBzMFpkRzRDOUp4SlFRd3ArVGVxbk84NHA5Q3FpYldsUmFwOGMxMGpJUEJvSmxMWFBBOHY1cVdmcHlnek9VOFpGU2RBY2VBUFREcDMwK3MySmVhMkcxR3ZrVDh0THNNalFLUjRmWm5ybVdPTWlmc1RnOEtxYnBFMytpWDdLNzJ1Z05pdlBaTEx2RHZ3OUVoU3N1enpyM0ZMZFBFemNQZmVtdUZyQUNZcUY4LzQvMWMwd1RaUDc3a3pPcHR2amU3WkZwU3M0NThtOG1XSzB5cW1xeXBKSGFRV2NHNjBOWDhleE5VVHNQbU5ZTjB5TTRUdDQzMWRoalRVQUI4Zk5VbWVCSkxiZERGdEw3V1M1cFhBS09DTEN4bUM5elRQWE4zTlBibzIzb3NTUE5LK3pSaDdzcTZjRW85UW9ranNRaEZBRWYxT25tdFMwb3Z3YXQ2RGdwazZJT3N6U2JsbUlCczQzN1gxbGhpQWZMWGN5WUNTMG1NYWNQOEJPOHZSRXBQY3Bmb2tzRG5pWTZ4a1FKTWdLVWNlOWcyc2xSc24wcThkcCszN2I5SU5Mck84bys4NVZqelZtRjVoN25vRWhzSnpEbjltUFdjVzZlZFozMWMzSytXZHV1SzNUQWV0ZTJ5OHdqdHlxNzJKcTVyMFMwYzJETllIdDR3UjY4M2lmZmFHdmx0eTJ1ejBnVXpFWWtxVU9NY1RjMVNuOXBaTGVrQlFJdWlEUWJIeTg1Uk9pSWJsNGFFMG1MdkJ5RFdVK3ozQ0t1RHEvbVlWM2lST2ZKSjdpRlgwYzZyQlBNbFFLZ2ZHbXdYMEFyazlZaG5Ib0p1TU9LaWI1Um9PdnNiTEw2a1YzUUcvOXR4Q1MzR0loTE45dVZmTmZ2Wm1iM2Y0UEIxQ2pwSmhkWFUyL3VvYzdWc0ZuNkJWR3I2NEFhcGdoK2JCTC9GR0tFM0lLSzdONEE1U1hQZVBkUWxJY3hyUHJ2UXhheHJZWmFDSXkyb3RMbjV6QUk1TlBNV2RKTWd3elZLUVV5V0ZFUmtQWnBQL0daRUw1b2FkNit0a1h2NURzQ09rdmNBN0I2ZHRmcUNTZGJOVy9LemFTdVhiK2ZkZnJUcUkxbm5kUDVJZXo0emE3WDdFZnpubUVmVG5qUExDU0xsTTlHWnEzUmo5Zm5zNnhqNFR4VmF2dnljaW1GbjgxTWtlcHVXMWxTV2ZnV01iYm56TGczZnMydjRiVGxHdG9sWUJ3RVBOZm9UVzN1UDdnTE1FeHhBWW9KREhrcHZJU01rYU8rTHQrS1NNVnEyOXhUQTJJczF1YjB5ZDJCb3RsVzJLQmh5VWI5S0IzUUl2dFZwWjhUQ2ZPZks1TkkwSW5HaGJ2Y1lodUMzSXo2U3h5VDZqeEp5eWhaWHFuTzJGZnY5RjhaRkRtVVNKSXpKT3FIUWZHRGNPcHZJc3h6bE00cGNPMk9yTmtYQS9ieW9GbXdEZEg0UmVad0x0WkNtZ0VFLzdjc29IU3c4blFWbnYzS0EzakQwZnlPek5PTGY4aXJwbVByMnR6RFJ6bVRBVFcyanlxZG5nSm10aW5FM2ZYdW0yODVRc2ZrdXN1c2VFRHd0WjJpQ0RaNFd5U2k5amswdHZyeWhKbW1TT0lxMXlGdUFPYUxOVGUxNU05SWFPNDAzdDJmeHVPWUY5VHB6dVRsdndINU1uc1JrZ1ZEa2hvVWd6N1dZMG9hZC9nUFg4RFNwTWxKdlJDenAvak43Szd3ZFNhT1hkY3h0NlBDK2tNaVJoeVlJei96ck5zK3Uva3FOTWVSSGYzK1lqSTNTUlZYT050N3loK0tIUCtXdHhqdmg1d1hXcTg1TmF4Y3hyQzYrMHRYN1QvZGlva3U0ODlHSzJodXFUUWpxaHRTVmZyZ1J3K1ZNUHRVWVRBMEMvQ3Q0cW5wQ0NvMDZreUl5OGt2ZllCajRNYUdsV0hzbXllNERqenpKQk1BRnVNNmFLdDBzVVYzdURpWCtGOWdOU3NDd0w4dTFFWVl0S1BkOTNPaDBhcjcwYnVTbTBBZ3JxSDlsUmpWaXl6aVc2L3pjR3pERXQzT214azZpdnR0aG5DdUkxaExvaVVTRy92bTBvVDlGcUxWMXFaTFFUM09FeGwwd2VvdENtYVA3VUhIUTIrRnQvdnc4TU5kZENWalhVelZiVm96WmFXdGEzbUFBTW1BZGR5TzQ0VURLWEJBQklPQWNEalBVVm5uc05BMWNTSnBNWW5uQitlelFLdjdSdGt5MGtqM1dVQ3gzTmZPcmM5emFEVUhlMWNSOFhEZmFCZW9Ga25JWGVFZzY5eHNmNlBJWU56OXh4QlVmSUNldjhhNjJRTFJESVhQdmN5UzdWSHlOMWE0M0RPU0lSdTQ5OUpJbk1wdmFQM0kyYlNwT1ZTNEhkNDlYSENMTnhqVnh2WTV2NU0xMCtkcVM5aENidUdEVnpsT3ZWUXdYbHdubG0zR2I1K28zS0xxN3JSdVo3enVVblY0RXZxMkJDQ09lOFhiVXk3eXJIY0doVythQzduZ0llMThsQ1JuRHVydXBIVnE0V245bzRkendiV09KUnBGUzdxMDE1UDZzRlBVMTdEYzh3WmEwczdZQjJ5UUp1K1o4TFpHUkFpYTl0TS92bHBvTkRQYWJsQXFNMWNkN3pIUHJJaUdHSXFYckRQcjduQ0QvVXE5Y0ZoTFNLK0NXMUd0YTZNK3dPbUp4Vks2NHBBTXlnZ2RuU2hUbUhrTjV3TlIvT3V1andUSXdzUE9mT2VhNDlWRXZacFNQSTBsc3lSdmNRanc5S2VKcVQzR3R4eFBPN3E0YTRjREczTE1QS1NObEVicytVbVd6ZVFaeG5ldEQzemk5K1BtNTI3dlc2QXAxMkFUdWJQSzJvZ0gyalpuaGhzT0d1VW44UkxUVG51MUw0S2YrQlYvODlmNFA4Q2Y4bU5mOW1hYXpMRWZsY0tFczJsMUxVU1lHL1dwS250TXlEbHZJZHBqaklaZTVoejFVekhDS2RWckYxcGVpQUd6aGJWM0hpRFlMeEY3NllqMTE5cWh1T2tNS0hWUldBbE40Ly9yYW9kZmVtQnpnRHJXdE5DYXR4ZmJuVndLRHJQL0tZeTkzcEZoU2FYWmQ1SlVESEFwWThjR1hwSWJ6Z08wVnVNcVRRUmR3KzJxbHF2Vlk3eXZ1NEE1elF4UTNuRVM3TmdRM1laRXdxNURlbEpEZnFuVGlMb0NQR0dPOFJxM2JxMUhYOHkvVkdpRGpwOFo1bDJja29iaW9Fem43OGh1L3ViU0JQekRyajhGSlVaNjNYakRsSEkwVHBuQklDUEVYeXppMGZZRFJvUDRSVGp5MTk0ZUNjc1R6bWc0VTBZNG5oSTZkb1Q3cjQwUmV0SFBTSEF2TTFod1VXMlhvaFNvbk54QndlRzVWTXJ4Y0Fqa1hyUUNLM2p6M3VtdDFRSy9XZ0tNcmVTZjVPbGF4QU9kK0hGNTJZdWJBL0xkU3ZwNmhLbFlhVzUyY2VmMXovZC9zbk10bGNEQUpiU2tHWEZXZkQwaVBWNE1tS0tEbEc5cEtDUXdmSUNOZG1FM0VQK1FBMjMvMG9LRWxHQnRtYU1VanJ2dEFEQm5oVXptbUV1U011dHVVaEkwS2lVT3pBMnBmcmdkb2g1ZHc4NXNlQXM0Zzk5T0JaVy9VdGtQVVIyNUcxTFpyQmtxMzJxdnQxWlEwZVFNdjF6YWtBTmRrQStTRGtIQmVveWJWdVdDbDFwTDZNeWw2Y1dBSE9uNzNIbTk1QWMxVUMyMjlTOWJ3bDZteGgyWGNaYldLMHc4NmJVaFNaSCtJajRQY0JvTUJldE9kWUVFZnhiVktoN3M3bS9vWmZ5SGdNbXpkbURCa3F6cldsZXFBZ1Bhb21hbU13T0hnSkRTRHlZRjlOSWhEblRDVWhlK2E0bEFua2NhQlQxMFJWT0poZGsvdy84QTVtOGkwWjY2Q3VOWkNjbUlLUEpOUUdVTUREUkgycFM0QVk2dkdzM25KUXp1MTVrU3Y1UkVxeGRuNWpiM1NubFk0aUdlWXpIbnVjVjhmYVRVYVg4Z0RyV001VUI1YmZBSHEwTjNZNndrMENoeFRQN1RhdjNPY2JsemFYTjhDL3RCT1ZRMDl3eGFKUGZqcWEyMVFxQmtsM3ZEejd5YVdiUWJYU0szY29uNEdjTUlmRkJacDlFQS9RYXROVFFqREgrRSswV0JIRmQ2ZFRUY2o3elBQQ2NKWkJWbGE0WHA0K0U2ZndINmQxY3NFM0NoUEdEZWtyc2gwUzVxb1d5Y2xMbGVqWXQxV1Byd21uYUJJUDFaT2wrL2Y5ZEZXbEtpZHJqUDJWS0RzOUUvUWw1SkpIWFZnNXd5amJLd0k0amFjNE55a25LZmdkZlA4SndpU29MZFNWa29SUlZvMnlxZmJFL05BL0ZJSDRVMnA3dGRHMVcyRGxkRGMwU1lZS0JWTng0bnpjbFJaV09GY0cvZGQ4Ymw0WWxka0k2ZTNaZy9ISVR2VGc0alRRNzZBS0xSYVdKVTlJOVozMFZEM25BSW9RQy90RExEMGxtcFpTS2ZsNXZzbTdreGsrL1lLR1lFR2FRUURrdVpCSUI1NGVBNVBWSUR0bVYyU20rTnZ2TVNVTnJaUGhUQmlibnF0N29TcWR3aG9TbTZEWVBMSVNyK2RBOTAya0RnUjJPM2ZDdkowa0ZxVWM0eUhkSTN0RVJvcFpkY3RYMUozVWhlZE14a00vd042TzRueUp5eUNDYzVwbU5MSGR3QUg0Q2lZVkovSDZXbnhVTkUvdVpoVDlzaW0xWEVKdWVlcllkWW5iTjhOaTlmN01udlRFbFJHQVBRUDQ1UDNjUG8vV3k4eC9aM2luOFNHWGo4NXlyK0pHb0dHWkFIQTQ0YlgrdzMxN21rbEhwMUdVSzk2ZlMrbEF2TDhjUEhrdVZONVFhNnpKRzB0RHJHUVdQdjIzV1FlaVZhQmFYSGJBNTJ1aWIrdlpNcjRKZUtweHVBV2dGeUwvZnh0WFhtYjg4MWdJTS9RMDdZTUJXQUtpVEthalZ2YUZmYlo0Ym5UelNsTXplZDZRSEJLWGNuZ2h2dUlXZXhOcWZkUEFlY3pMYno0bGlOT2ZkRHNrM0RJeDJVRE45aGZyTDB3TU5UaFAzV3c4bFRycXFVSVIvZDh6UHFTUXhkQnZRYk1neHlXNmdnM00waVNXYWdScnQzbmRxRUt3eGM0L1BIdi9WWU9ITUtwanAvY2RBTEtqdXlFMGVpK2hGbk9raDhkZGtWSEdtNTBod0Y3QWl6YS80V1hBekhJL3hPRi85S2pDY0poVTdpS3JLZHhiNXZqZHJzWlJVNm1SMytPaEpTVUV4bW5pSkRPQjRCbkJ5czlxTUNkNUdHdDhpb1NwOGJBUVRuMVZCZ1M0M2t3WDc2RmVoRWx1a3ZNWlRTNDZpRUlUTkl0OFl2Zyt2YmlZMDgrZENYamhtUDltbks4Mks5MlVLS3RhUis2OFBZNlJxQTRsb0FUZStmVlVlZkc5M1V1L2g2bTFKNHBvY2xGN3NOWHI4VWVjb1JyZUNzQ2o0U0w3a0pvWG1NUGZFZWprNlppeFBWMG43c0d5Z2IzZTFoU3A5L0NMdHlPU2l0T0d0WkVCTENrMXJPUVFGK0VvRmNma05hbnYrajQ1SDd2c0hoRkZZM21EMW1iM0xibjA5ZFpFWjNLeUJvWWVwOG5MQTBWTTl3VlB6akpHdWM4MkhuNmVxeG5MMmRJUmxoZkx0RENWN3ZEeHlRanZvVmFXWUxXOU42dHdXYW45ditDKzRPYjk3Ni80cWFYTkVhVUFmb2YxcXh4MEV2NVVjOTd5SWpFZlk3YXA1WVB6bUU2SXZaSkhES3JNQWNHNS9QWHJiRHJFNHQwUXBuLzhpSDZWSWp3bkY2aVFDRkQ2dGg1djZkVEFWZmFLZGErTnpEWWU4L0RUQzc4NWtoMUZsN1JqNmViU3VFMkJCZXFlWFNIdlNmSms5bUxlNlpya1hRcExsK0N3ckRRRUJLQjZ3MmlWdjljTFJTSjlnT0RnMlV6cWRWdWhMOUhReWlXSVZwVDBLYnBYbmJtemlPdjlEOS9ldjhGM3NkUDE2UmlTbWxFaklzWWJ5VkxvNXpoNDVtU0h4MytWcHRrSTRwMjZtY3FtdTF2azZKUTJQUlBqQXlnT2xmM2lhN0FUWXdLb1BGQnFYd2wxWVBKaDVnakdTMXRIbklKNUk1Y1BoRTQwanJSQWloeFdQblNzb21DNjJ3OEtxYXJNUE9VL2xFWU9GY1F2dFZSRWliREdzd2JuY3o4Q0sySld3OGhjWFdoZWxRKzF6OGl2cWFGVVZBQkxlKzBlWjl2VTBaNVBSbm45OWRzSlVUbUEzRHVadEZuMTBibllDWHQvZ2xSTy94MGJJVjA2ejVQTmhxZ2FhcE5YbzFGei9HWUR3V3ZLUTdtcTg0bitMd2ZMZUlTMWJtelF2MFpSSDNlT2JVWVkrRjdrRXp0MUk0MnZvaEtLb1k0WHFzekdYTWZZSzF4TWhTYWs5S0J5VXlPckdBdlVXVUJmb1pUTzJ0RVlsb0RJZCtaUnlYSlNyWjJ0R0Y5RVdPSDFQdnRLcVhrQmJkYWdOR0VyN0FlMUs3aloza01BcklqUFRnS0FqdnBRdWp2UEkxbEV2ZStJa2phd0FwU3ZNc0ZJY0tNOTg2NERyTFBVdUg1SUNOZkFPSXpFb3k4dHRvWnRJUHlnVkhnMXN3OXBXeElINFoyL0h5eVd3WVN5ZG0wNW8zVDBNcE54OFRvQ3IzZ0lTU0htenJsNW54Y1RZSk1WSDQxbTBDS1V5bTFsVjdudi9mZ1J3K3ZZTGRuQVBJWDhkZ2JFcmFEa21peWNTWUFCL2Z2UGZlWUY4YnkxWXVKNFlmOTdEU1AvZ3hwdGtVdENHTUhRbmFLOFZhOXk4c1d5aTZQTnYxbm5IMHNqOEtsY0FXMlpNZWlBSXFtK2orUGc3dFEvTWVzNUxaZEhMM3drYUdMQldLbVk2dzZ6NklQMzZUUFppTHRGd09MSnFaRUlpZVpGYWkvdkdKM3VFVFdqOGZ4MUl4Q2g3RHRrWmRaYmZHNDZDOENjQzRkbTR5VjBqd0JZd2xBU3dlVVhNd0RlNEtmRTZ4R2xoSitYSGI0ajlzQ29PclRHNzRNRGFxK1lEMSt0QTdqblFVNWQzc293MHpsd0RiT1Y0NHZkbXpiMStDeXNLeGd4cjVrK1ZUQTVoekM2bG1IQmxXd2xPRmVwSXBwdm5nODkxc0JNR0VHVE55TFFFSnNSZ3M1NkhIUDRVbXczUTJmRW1kVjhld1lVZGRpSDZTZzRpQi9pS00rYUdWL0NkRDQ4VFhERlUvaU1EanAxc08wakVFSTFpVFZwNnJ5Z3lvNUlvSDRibUpoNTFUYzJEdVE3UnptLzErWkwvcjdGR2ZYdlpLZTNvcWd1UHZRQjBCSTk3d2RPT2E4QVEvT1E5b2dCL0FKNC9icEd6OTVMRHlUWW5tM3NybURrbTdpVmRUSnhhKzhDemZSRGVGdWRvOHc0bEMyQnVHdGVOM0lIaHMvYmh4MmtJc21LbGtBRm5KRHV5aTZwbHlkaWl0ME4rVkczN0JXS214aWlmNkhtYmZnODVqdVBZb3JJUUxsRlU2WmdZekMwQ0VZaHNBbGV2S0JPVVRHdW0zYktqTStUNUdXanU0eEh6enkyN3lXd1k0cW40WTRCQkJ5NEQ3bFBlaFdOK1czU29raWhRMXNRcVNjVGZFNjM3elhYeCtHdlVnQlFzN1IrdEUwSHN4dXdBUGg0eXBNZlo0dG5STWtwWWJkeVZYR2trNXZyQ3AxU3ZkRFQwTGtGdHVxcGRQT2NRbnJTQUtxeFpNSHF4NDFqTTZVWWVHS05tNUxRM3J6dkFPbTZ6YTRUdlJRNE5KakhOeHl0WUxldGVobnZObmZIZWFOb0Y2WEkvMVVIYXV6dzBqR3NGdTdEWTdjTmVPVVJlTmJVTHB4cnhLZEpBQ1NBb1FJVkxvMzB1dzNmbHBZOVlWVzIzNGRQL05CTFk3clBDWWswa1RXSjU5ZEYvRWRqYUVMa3NyaFh6T1lxTVdvdnI2d3MzbE9TTndsUmxDYktFUHJwOCtKQU14ZlFsa1Nxa3BmeWVqVWdxRnBsWWMybkZ6eEcxN2NFVzI2MEkwMEw5bGZHU2lwVmsya2lFL0VFZ3d5d3lFUnZlSzBGVW01SWhOVDNDVzkvejZQbVc0WUZ2QkxkRVowMEM3OEJ4K2pjR2pQeWdZRnlBenlYNldKMXRjSWptQUxHa0M4anlmNzBVRU41OXluYklpN0FmOHdLNkREc2JsaHZ5ZjlHeUltUmhZL0tON0w4elg4OGVNclp6eXc1YlhKdTFkcGpuYnNvcWhFd2xIdTVSSEVNZDZsaG10R1BzMFlFNENCVDRaQVJHYWV3Z01KOUw1RS9laFQ1UE1adjZKQnhXWjdUNWRicEdSSG5LTUVYSElaTGRDazh3eWRtUGZ5d0N4V3lPVklzQWxPSi9tRzdRR0l0clZMSzdhQzgwOTBodDdDQ2tyelY2TVNCa1IyMlBkSks5SGt1bGgzOEZPbHZTMVgwSnd3bjR2UlNmU3FKM3VITG96SzZ5b29FNEN1Y2JYdEhXdTJmcDdDaXJtSU5vcmlGblRkenc5OVZXSXYyY2xDQTlnWUFWTVkrakJFdTVCaWhuMkZKR0VXK3dHcGI4MjJZZEdYcFdhcVU5QmVxdG5XUEU3ejR4MWhtbVE2RG9sVHRZUElzaVdPRldYZlpyaFQwSGZGK1VJdTh5elh1NDlYWEFNV3FST3NlOVBEMGV3MzVETVJQU2JzdTUxSjBWOUVrMEpMK3RqWndtY2poTWJQbE1jaExqYTJRdEIxaEliVk44ZWxoWTFPcEY1SFBwZ0xkZk5ITTNEV3laRGtJMEo2U2Q3Q1NtY2JEWUpPRE9IY3FibmJLQWtrTzJaOXVSTGN4cm42UzBlRGF0ZGVaNkJ4SnArRlRxR2ZWMi92K1BrWDhjZUM1R3N3VFZ4eWx3aHpBN1hEOG1iay9nb0FjWEkzT3ZGQTdxUHRwOFBMZHdEbk1mSTdrYmNKQ1hFS0xwYis5RDNoRmNub3IrWnpHRlhzZFp5bklPZUxReE1aQnc4T1JHc1BDV1ByNTllOHg2UzRGa1AxS0l3MVp1akozajJ3WEwvQnZrVm43L2Q1bGhBc3VBY1lSZm5zTnMySlV3MVBrSTVMWit4S3JNSlEzRXJzZnluQW5NMllMV0RyUEkyOFFMRTJFb0IxMW5tSWlwQzNEb1Q3eE95cU1VYklja1d5dXVQeWxKZGVGVHRCRWtWYml1d1JVQkJXL043RlNHbGUxMG1zUXUzZXI3ejRGd09SeDNQdFVDL2FKOVAxNHk2d0NIcGVTVDhtNmJVbWxvaXdaNGpLV1lIRW9HUzJSYWRZSXdnQVgxUlNLWWtUSGpiNC9PTmxpR25EWDlIWEFUR3NKcHp5YUFyM25vNmR4RVVMQlB2NjFsY21QeWprSno5WUFsaXFBMEh4NHprSTd3TDB0Tkp0RDlnTmppMGk1azdWajlIUUc0NmdrSi9HT0J4WDVoR2hNcE5EQjBsbUZ3VEpCeFpoQnJWQ2FWUTcyNlo3bDhPbEJ3QlBjd3RHL3BEelZoVXcvcWswaStRREZmVXZ2WnE5YXNETG9lVXBJbEx3OFMydFFWa1FZZWc3ZGpOaFhwVldqQVRyS3ZmOUZTeWtIMnpqTmYwS0d0anQ2RWNpSXQ5djJPYWVVa0xHUkVZZjJRY2dRZkZ0Q2YyNDlrTDMzM0Q0elh1TklPUmVtb0tTSkRxbmFIb0ovVm8rUC96MVdrUnlGRVZtTHhPVU5WTHA1U0ZZdlpoSXRzUGNOVGpyeVFnTnBjaXM4U0hSV3J6c3lOaUhqWU82WGtSemlyb0JDVi9UMVk2a3VWRXBUYkpqM2VUZFVFOHUxcytqQ0lLcENneEoydStRYWIzVk4yT0xjblpmRy9XSURZRGRWRi9LU0N6MlgvRkd2dG1PQTdPTUR2SEphWkh5L1pwSlUvajhsUnF3bHc0TVlPcDRBamNINUJnbElxL3RLRU1WSk1nWldsc21BQVl5RDBnS044dVN5RVVMUW5BWjA2dDkrZmNGME5jRHBaamVqWDV3djZReW96SDgzTnVTYmxNRmJjYmtYTUNuc2l4VUc3ZmJzaFdqakpvQlk0UlliRy81NllrUHltYVhQeU8rMUdJcXpIdnlFVm1BQ1FjY0xFNVJIendBb21GRkNJVWpuM292MFZFZ2x5T2xzWGEzQXJJY29Rbk40UWxYSXRxd1AwVnN4TTZ4Z3ZHR29IWDVlazNMTFVSZWExMUZZTlhyeUROSUNuY3BMTGhTc2E3ek41RWNWanNpdzBpc1d1Wk1BVU5aUmYvbGJJbUxmNEpnTE1yZmF4UWdaSlREMVh1bnBRVFM5U3VpN0crS2p4bmdIMlhxWmRRM0pjcVhzaDhQZzFIM2ZqdDVhTVk2bVV3eXQwN29xM0tscE5zbW1ZMFZZMWZiZHpaMVVCRytleGxLZWx2VytaejNuRHd6cXBTUkswQWJHQ3g3RE82ek5TMUlOVllHVEJoSklScXora0N4T0F3b3R3bXJBMXJIVDY0aVMwamtseURYRkxCQUpLeG5XYVFnMUp3Uk9jT2Q1eEYwdmhWQ0ZqVjEyVXRua04wNUZ4R3ZZUUJPRHZ2eGZ4cGxuN05VUXlQUVc2V2xITWxNZzlXUmIxMnB0TkN1YUVEZGZWTTV1NC9kdlJiaXhTaUk1eUJyS1lPUXg2OVVZNkU5d0NkK3pnQ3JuYi9zQzF3dkppVUp4cExRc1JYbkNJa0xZOTZNNlhIQXEvQldWdEo5MUFVL202Mit4QUNVSkZkdFV6VVlaSVJzSVBld3c3M2ZPbmRIellaVVNIcW1KeFhJUSs2YUpWSG9mT0RjTnlZdjVVaVMvdU5LK2lJWHVtcUkyQTNncUtxMm5IRjd2QlBvcEVOM052bmYvTkhEQTBjREZ0U2RTYmdxSlBZQVJKYXlsZ1dqQlBCNlA2NzlKVWtpVjNYU3E3UEZWNXdtWmJwR2hFWkRJcDgwaW5hT0t1am5XN1A5MHlpUU5xYlByTTdDNVN3Ums1eXp6SG9MWDlWSEVDUExMKytCVG0zYTdKdlVlM1BqcEpxNVdMOUtDcG9BRWZ1OWhiaE9wdlFnRk0rdWJvMkczd0p6aExPTlhjSkl2TzBoTEYwYmRxQ2c5ZUZqWTd3YWdGY05TdlN1WnZKaUEwU0I0dEd2bHZrNkt5RDZTTnpLT1c5Z0JaM1pGZ3E1V2liL2tXamtPSGV1K0lhVjVsSWxBeTZidmdrdi9lOE5LWXJEMnFESlFBbXlkbkUzUzlVZno1VDRiMXVJNWsrWjRwM05mc3ZuSElVZnp3U05TOGhoSVdVRFpqdXQ3VVllcWxiRXhTVWhPSTZSR08reWZWVFFUZjNiRWQ0d0poQ0czckJNM3FsSzQvUWU4ZzByV1VhdHRDa0xXT1pTWnpNelhGclJ1eGJGMEVpSWJCdWdORTBzS0pVa3RqVWtQbUk3bUdLUVUzam1yUytabWFkQUdORkxZMStVcnVONjVnV0E1RFV4TEluckxPRHMzS09uM0gwMjk5eTQ1MGhvY05kUG13ZWF2RXRCZmRKa3hXNlhxSlkzWi9oWGdQZE5sRmpwd2tDR2VyNXk1L3hnVEIwR1FTalptdUJpTWhIa3VrTm14UldoM3gxMlVHZ1F0UllQeVRuZ1BQZVErZ3djNWRjd3hsZy8xc05UdGp6eDV1ZUN1SmlJTFErZW8zMFc2cnFyaGlYR0psWGhRV3p5dHZPZ3NEa0xaY1BERE9uOWtTTk9KWVJOZUhPdHl0TmV2MG5ZRmV0NGpIc0dRN24zL0N4b2cwNEFqNFd3MDAzVnNKNk9xTmY2dkEwTmtNVVRrMkQwTzIrOHAwMkYrNGlndDVOK3dQaFQ4VXdCU1RiYVpmOFNjMEZxekYwOVQ1YkFUY3o4c0FUcTNuVmlyT0R4SzJHUDZWUjYwMlNkVkNncWRYRkl6R2lHUUEvdlFHZlZFbFE0cVd4S0M1RTQvOFlBQ2pkZ0pxZW85WE9uVjJqOGdXZ3Z6WnA5akxkQWIrMDlsUkhsMjd1WW1CNzZoWE4xNXRVUElHd0VuY1FrY0xydWFUeGFnb3o2RkM2cU0rZko1UnlGN3VuQy9Ic0xrQmYwRXRZZ1EzNHhLSVpoM0hQSUtTTzRzRTZJcXp5MGtXa0IyUmJpNEczVElpUGg1NS8wbEFpNG91K3ByMkFYaWt0TkNSOHErS1hFWlhrZnZVZFU3K2ZVb0pvcmg0UGFMV09WZHJTS3ovWGdUZ21XbWs3NzNJMERNUWdMYTZ5dlVHQkM2WDRGL0dvSXZ3S3hxbndFZEF6QnVmYjZQUHBjY0o4bExGV2I0NmMxRWpOWXpJakUwTTVxM0RQRjYweXQ2VmUwS3V6YkFtYldiWGdlZDluNUZRZ3laNXNicDc0dngxamVBVTJlbmJCOGRQSG1FSVdPNDM0T0VjVnE3Q2FaT3E5OCtBanM4ZVhUODF6UzRaTFJ0MWM4N0J2UHNJb1Zvd3h3OVhidDdnVElEbFNzRkMySEZ1OHFoQVY3SUpqMG9nZy9tQStDejRJdnFXdmVsNnRCTi9pWXVwcmo2bzViUGFQSStEUHlUdWJnTEVoYzV4d3dJZTVCL1AxV0N1UWptVlR1Vm9NWTU2RzIxRjBYVU53UkVjKy9MUlcrVHliZHBOVTA2aE50WDBVRFU3bDJ1Y2JYVjl1eEM2d29ZSmVPNnpqc0NoN21WN09teVB5TlJjVGRtK21DOU8zRE5rT04reFhuUllrZFVRVXFMZ1FpNEpSMUFMMXE4RVdsWUYzY3gzRisrOTIyQUtsb1lCOTlOQUhvQ21zVXNxanFOVVBGb2pkZk4zL2VFZjdURWJsNjgzYTB0NDZqVXhIYi9LMFhVamFzSXNQcEJKenY0bDExbmxDay9xUVBxM0lVa2RFcmxlSHZsc2lrc21pZDgyWGtZUzA2WWFGL1d0MFJBT0FLdkFwZmxnN2UzOW54REgvTFdzSWx2VGkwWWtEbGVXUnlVSVFHeHdUUWNsc0Fvc2h6M05UbTBGM0tLeWkvOFFRYjFSOEkxd1VPanA4d29ONnFlOTlNNis0cFVKRWpCZ0huUVR2Q09wQmgwNXlwbEIyckw5TXJEdnNOa2dhZHJmY0ZubWVqbkt2YllBdGZoU3Azb2JtWm40cjBKOUxLbzJ0L0FFZFVORHpmSVZkMXY2SURjeERsdFI3bnlJeCtQSk1sUWpJNGh3aGdFalI2SFNWYnM0MlFXbU91RllkWDFsbkhySHVValllbWV6ZzhQOGp0eHhid0RaOVc4Wnd6cXBiZHVaUktIT3dPQzNZYUNLVVlXOEhscDdCNXVTTVEzM3F2eDY1T3FHMVRHdVRYQ21USVRPcmFYSHVRVWFEMHBBRnFZTENzOVZrOWsvQ1M5elhyT1pLZVFmTVB2Wm1CNGFXWEdjTTZ4bUxLckloNmVSYXpBOVkrdGZSV2tvd2VCMldZSHIvc3k1OSsrd29jVkoxNEczUURiUzNWM2VsaysvY2xGQ090aURaMGJiQ1psd0t0aWYxcWJ4dnRUTnRBNEhvY1VuOWcrRllzUHlkcDk4czRUL1VBL1hsajBtOXNlcTJuSzJpbWdGeE80cnNIWHNQaStzUloyeXRiTGlnWVZrMEZmcnovTnBHenRjSDIydTM4U1BMdFE2WkViZ1JKeFFRMGxVbHF4czFOTjk4ODRxV2liemNZcnBTV2FFeDRmNXljRkQ4N09wUWc1RWtQL0VnZTA0REk3SFgyYzRud0R4WThNUENyWFpEZHdNRXZLS0RDQTNXVnVnSWYxN2l3Ym1VRFJFak9IekEvRUhFayt3YVBSZ08xT1kreDNqaTg5Z0lwMUlLR0xoMlhYYU9YMWg2dWlWOUlGT1NCQXJYc3VVbjJYcmEvcGlQOUtmRHBEeFhmcFlTTGhkcHhnQUZTWlQyOGc0Rm82U0Z1TTNlT0c0Sm9CTTZWZUVyRnFBWjRldXRoWjVUQnZ0MC9sSlRRSUY5RFRDN1lTNjVQcnhpRXR1UHVXTUhHcXlPb2ozK1M1YnIwVzZKcFd5bE1mNFNsdUVlZkl2MUM0VE9DdmJtZGVqay8rZStmUTY4dC9MM2pBdzZQSFVBaXhGQ2JhY2lPZjBUQzhtY2xmSEdtUEhQOWNLeHV1ckh4Yyt5QmlETUl6R2JiYzhnUzFBQnNtMmlkRml0S1grRFc1YmIwWE5YL29BT3VIM2hBeUc5OWsvRkVaME53WWpzYytJenV3SjJIZkNsRitUNEUyWXVaYXkyNkVsc1J2b1BMeXp1dFdmYnUzOWJpQWJXV0dvSmxWSUNmeW1NQWxUNWdaQkNoeGM4dWpsZEVIUGZBQ2xVQzNRU3NUMm02SEhGYnI2VUsvbk5wM2VsZHFIL1JOUW5mMk9IQkJZU01HNXdyYjR4RVdKb2hpcC93TVpNWXd0a1lIdHo1VDdRZzJESTVpN1gwQ2h0elBvZDdycURNV3J6OWhRdkZvZExQT1FSR28ydjc3VUgrcXNiWmJOQ2w1RUdZS2xON2p6NWZxd2wxOU05ck9kNU9jU2hZSHNZNzVCaWVoZENzWC9pZTJiR0EvRG9PcUx2MndrS21TRzh1NXhMUDJPOVEybkdDZmxVbkJrdWNPWjltWFk0ekJjcEpOU3pJTWlsUU9yMmlrWnpHQ0RxS1pDNmRwVklMSDJKd1ZSWTdjZnhTekkvZmpxSzNubmNwd3JydFZsb3V0QXVMVnZCMWJJK3JyRFRZZDExVVNISjE1cXdSOVJVa2Y5RVVIbURjemQwK1ZFVjYvc29ZbVhyMENBalZibEd4VlZjVzV3OVl0a24xRTFOYXFQWkc2ZUxRcVFJNTdOY1FNdzh0Q0krQUUvZWRVUHFmRmxHZ0hSK3libEdPS0dubUtBdGhza2hKWlRvaEQrZG9KSTdFcU5TRFo4RVk3M2YyMFd1eGVzUExvVjJOdzFqWDBRcGlDZTdBM0xIR1NxS0E1MXdMdzhuSHU4M2ZqTkNUWUhXM0hsZnVkdUNmYjVXKzdtVFdScmN5aEs2b3V5UnBxTUVyUFJDclJIZ3F4VEpWWEV5Q0xmc01zaGY5Ynp0eVJxenJzcG5CemJtcHZoTE1qNll5WDQ1b2pVQ2hkUTRlblVNbFpxVmNJdWpZQWpVQ2h0NTdHNDRJUTBGUTBoOVB5Z0pmb1IreWhSQVNxTnY2VUZuUlExSmYvTjBSNWFyRlZNQ2c3THE4WXN3Nk9uZ1lYYW5Sd0VJelpkQTJ3UEZPcVJGL3NXSjVVaTAyRnNLMzFxbTlhRElXWDFKc3BsNEJpMjFudjdhTzd0NlVqUlBqWEdaYldRS1BVYmZlVlppdTdLcVo1YmNXUEh0OUNRVlZtQmZlWjc3VHgrc2Jvalo4OWxVdld2RlNYZ085ZXZURDl4UGVrL1piTHdrb3Q3WTZUQ3JYUXpKV3F0aElaUi92MklrUWRERjFUQ041RmxWMFlNZS8vY0g0a0dLejlyM2tTRzR1VE83Q2RSTGRFMTBQNTh1UTVBWHk1cmlIbmU3aDF6WDVDUksyRjlSNEt2b3FHaE03UWErMDNsbHFFQXBadytxN3A1L0NMNHVIS0cwUEhrZGxLMit0VzRSelBqSXBXVnI4ZWhQY08reWNnU2ZDMWx1bEhuTDlac25nVlMzcE1JaXFFbE4vN25qeklrdGtZTll1dzF2NTdPTVdTRmFGR29oVEcvU09DTEcwUEFTTGR6WUZGa05WeVhTa21iQkNTbURlZ1FCSXZLZUpWSG50TUgzTU94VDR4VEJWWk9BNzVzdkJrTHlxTnJuUmdnYjNHVGdMVGNDYlZYRDRxUWxib2FmWkNBamUxR3pRMzlrb3MxVitwQWV6Nk9maHVseFVteWlweG03VTNZc2NEbXB3MjdES1V1TG1HU05Kc2lLT01qWEpvRE5ESVhkVVVPQnBlNTczbUxxV1VpN0QxMW5ZQmx2SVlidU1KZFB5UXZTMFFzeGhtK2JYd1NsdVFTajNXL2dDdzRhMTRkMVBvQktZWVgvY0E3NkRoM3FUa3Z2aHZyemRIc1luUmYxby91RU5NQmhZQWkrb09KeTkzYklrbkZURGtoOHRKMWVvZENJSTBkemxmMS9JTUNYZDVLRkdjSTUrYW9DZHFTK1lhQlRxcU9IK2o0aUhoZE1xcFBDeC85UThobHkxWnNZWm13VU8vek8yRzM2MTRRK09IM1V2KzZ2TVZ6SzFuSnRUZVJSNWhNeFFZTkgxYjF2eURmR3E1T3Z1N0E0SmlXZXBFUW1kNElWaHhQcGpxRzVsT1VyS2Iya0EraFVIR1g0MGpFbVQrbXc3SmdOOUVyc3BRdmxyTGpJT0crVUpVdDVsclBlTk9tWjFNajlmcXh4SHpDQmx1N3FqNnpPTFNCaEQvUFFXd2NzejUvSk1VNGdsS2M3YnFWU21QMVZlMnVRaVNXeHJOWVcvTXJsVlhkOERROExYMDMzcmFlanhIUW5zOFJoNDZ4eUx6aGlMS2trekZrOGV1ZjZ1UE9jYWdHQTZrMnJrdExPNCtGdUkzOHl6dW85TUM4djh6TE50b1ZXKzZCbWFXYUpSZlVIOHVYSWZ0citMQ1JDSzZBN2oyQ1VLSDZqR0dyZzFvaEh6bC9aUWwzREErT1UvMTJpNWtIdUdrN1hkVWRVejBGVU5vcTF6aTRRMGUyU3p4K0RsRmxVL1ZmdDVaUjArYkVYTldjM0g0VHBiUGQrdFM1K3ZFcFpqMExNRUYvM3YyVkFTQmhTdG9walltUEhaMzllaU40UjZCM1p3WlBDVDdYa3krQzlPMVRnck10T01aK0V5K0lnZEkwOEVaT1UrbDR5Z2E5V3dUVmxvMzJiZHU3OWdQeHFyMG54RnNnUTlwSkdRS3BjMWVIVCt1dFU2b2VJZG5zYjF1dWVSVVc0WFI3blczZ2tyc09rcGVhbDQrQy9tbVJBaTdUTkJNbTQwZWppeCt1S3JtTE5sTXRET3hQWnZocVJSYmY3cnVKM1c2RzdmT1lEbFE0eXlJQ1NaKzBxZzl0aTZPdFJvNmFBdWJDS3UwcHQ4a3J2b3pBUUR0bHJvSXpLaEEva245RzhJdmh5U2RsNldGTGhtVzVYOURXNlVLbk43S1BPZExkaXFUUlFiTGJqTWlrZFJQR25tNzYwR1V5VEliMjVjcU5qU0lqZTBIOWIzNTVkQ1ZrNzNQK0xtNFRrYVF0dU02M2xkUkRHNjQ1ZDJSWjVBYTRTN2MwRFlWQ1I4V0N6a2dtNFhjaEtvN1BZUlhLUis4dHNqVVp3SlpSbzNFUmNGVy9sQndzOEt6RWcwdlFpSjk2aTBLbDMwL3dwcnhIbnV6cDc4MEora2VneGhPQmN3enpJeU1IVG9EalFvS1BlQ0V4czdEOWRmdVI1bjBHdXU1VU55Z290dDl3TnJTWUkyZ3pIbGN6U0xNRnhtKy8yd3JxdFkrWFYrSWNXRHZ3WDQvazB3ZjJTckt2ejBRVC9NSE12aG5OS2xQQ20wdFpsWXV4QVd5dzBxdnNkMHRPdXBDMUtiUUF5MTdmbjBFaW1PYlU5QmZTSUZlbldIQjJyVlNuT0F6OVZzc3FKeTJsWkdvYk9EenhyeXh6NGhSTHJ5akRuOEZSSTNjQWxUM2cxVktwK3dPZGRqMEcvdENpNkxiT1A2ZlBvRDVKNXpRNjZBUHF1aHdudHJTc2NqdFpjd21LSEJENGR3VTZTUURKQXBOMmNUdCt1aDRDVzAvUEdLRDdSdFhhZWU2MEh1WlozYnRRK1YwYlBEVjl1R2gyTXliNFp5WXhIZ2ZLbFZNMnZYZ0VkQzBiZ3QzQ2pTdTR4RDdZbnEyZFI1V25HbXpGZXVsakdwWVNsK2RoazdjTzhjTGM5azNjbWxsanpkZ1M3YU41TWtqUkRDUnlGampaenFlTk5lbDY3Z1Fybk9jc29BdkZrQ2ZRZVpTRW5wZ0h3QXNNeEFxV1IvdDhVdHJ2MW5WZlo3eDEyS2l0MU5VaTM2VXJycGg5WW5YVVk0c0x2RVZCNUtQZ2JDN0Vwb1FERVlrTVV5T1BKQXJLeGthUERDeG1ONUEwZGtXbzBuVU0zbTBGRU10aEJEQmMrcHJ0TWN4UDd3eFVURXFDRktCWmozcmFkcnZOWEZNR3l6bllWZE5qb0NUamhPMlEybmxRbmJvbTFmYnp0dUt0eWJEblBPcGswRFZPTjNBTmFXVHZraUgyMzEyTUlFREQzRm8xSDdkOFRHSXhFMlZGQkNsUWpCZDFkOUROcDZFYS9nOExqL0pJZ3ZUOXJSYlh2TzZsOVByOHNaeXZ5K1N0QjB4bWFvNnBaQjdXcE5XVTYzNXk2RWxwVGZLNDF2ellWbFZlWVlFYVVpU0graFlOMjd3WDVrUWpTaWttODhBM2FsQzFFYjMyTFd4SHJRbnk4WmVXdmQzeFZzcVIvU2d4YUR3QXlJZjR0RWthMVdKdWZBR0lYcVV5VnozZXo1UnlLdER2RFpoVmhNSXFWK2xRSUpwZWdmSTc2SkI3VkZLbWYwL2xyUTdzUnhRUVN5Tk8yOGtRc0tiRUhpeTR1TXArdjlvQ0o5ckJDbU80UDRsRzhidzNEdnF1Z0oxUHZHbHgxT2NTQnlBWEEzT29MT2N5N2paNGFidXlya2p0ZEVDUjBaRllrUFpTY1p5RjVlQmgrTUQrSUZIQnlxSktZZmxENnhJdW5RYUVGKzFMS3hBUFRHZDRic3hGdDhMdGZlbDhKYlZEdEd3cnJsdnlVTE1xN1dyTkV1WlE4MUlEcnQ0bXNqZkx4TEZXYjBxeXZLTThra1JZYjlMWjBBUUpLd2pWRk5hN0ttM1E1V3lHMnpka2tnRVY5MWduNmlpRXJvZVpsaHJCZ0d4WVIwdWNrZWVnd25MUUxRdGQ5SHBhRFIzYUZCMEhmZWo3Yy9HaFp2dmxzbkcrUHJDR01pdm1xL0oxOUJNT2g0SXlnQkJ4MzRXNEZleUJhL1dGMWNBcjUySHk1aEE3aFQxd0F5VjRvbGVSUGpRcENjaGM2TGJFY21UQWordjR3Q2d4bGlaYkJVMkpvQnNwc0x0R2p1VFZaa2FuZlgrRFhSQ1Z2SHlOcmJZM0FrellOajNWbzhvSDBWM3l1RzA5RW5ibjcxeTVtNzdlK04xaFhla3ZUM2dqNzNhQ01zMWErTGNYdVd4d0xMSkZrK3FGOHpvdTV2WFJJQ1dwS0FISVpvUHBsMlBvMFJyMmEvYWhVQk5EeHk0NjdValR2bElnejdNdUlsOXZYNDJpdWFCS3FneVdVenBlN3FicHlFM2lvQkpSUHcvYWl5STBWbXJWM0d4enZDQVVXUWtaTGRqT05JUmZEK2NLbDBCdk90dVFjdFRhcnYwOUlzbDF2MU5RRzgvRWErbm9WRmx3OXBwOStYTUNoWmE5QUM3ejQ2SWJIR3d1NjZUdVM3eXptaFJvZTQvMVY4RFJ6M0VycjdZN2FqbnpEdUt1WVFoRll3aWNyZi9HNHBFY09TK3JjZUR4bDhaRzhkZkZwT0dvL1lhQjIxUTFmSDdoM0JtbHpjaXNOdUlxQUFVNXJwdldVdW9ZcGM5cGVMa1hMSUhUZjF0bjFiQy9ic2Z3WW50TnNOc2ovSW9odGVPMktrTHQyNDg3cWUrSmJCZWNRQ2JjSkIxVURGK1FpdE5NUlhyY3M1NEY2UFV5Mys3YllEc1Ewd2krVXJGaHkvS1kxSEdqV2I4bmt5RFZrN2pBRjRxQzVOcGJyVzdvMTdwWERkRkkwNGR3R0FBS2d1NldYdlVhUiswTElOWlVMLzhhWFZ4RjhzeEZOTGZIV2lVRjM2cVlWd1dabmpZanNPYkYxUTF6THB5Y3lQRFg5SDlnczBxSWc1K2dzVmNjdVhocGJLRExNbGFrSHVGMUZKV3Axd3N5djFnYmlnV0lvOHRwNmNMTkduK2dDTzlCWlVHUm1XUGEwaUwwbXhodDdScnRsTUhiU1gzSzJSUHdTSzRHZDFtclFEWEVjMTE2aUFoMjB3ZGFoN0lYRmhPZS9DOUdlLzYydDRVaTRVemJYTGIyckY5K1lEYkx0U2o0OGR5Rlkwck9WaW1IQ3NUTWk3ajhKaHN0ZkpEVndhTDlDU01ndjl4bmZXeGg5ZVdHditKT3I2SXF6TTArZTNEaU1QdkZzSHRQT0pYS3NIYzZ3RmU4QTNYMEsyK3FLYjhYL214YVlBQkloRkwreVJIbnpZV2xrQVI5MHVHVDNpMHZzTi85M1JoMGlmeDZ3T1VMNGNNci9PS0dEL3Z3TUdGUll0NFB6NEh0THkxTkNlbFhkb29hYVRvejdZWkZsdWl4VmdLemZjL2w4TFEyVmJ3RWFwQmd4eWMwVnRjSGE3Z2xpOUcyNTQ2R0FNUXd0R25qYk9DZ3ZVSlN3UWdWc3NvSnVoZjZFSEx6QjhNWmNBa0RKbGZsV2NnUHVPV2YzTFJzQ1BBTk03V0thRlJWczhzRXpBV3FCWWJxWWRjM0xONVBKaGpTOUJYbVpkR3h3RElOYXF4eDJBYWZOWXVNU2xrbllkMVpFa2lwL1cvU3VQM0NYSHFCd1A4bDhyZFJUUWFFTFZ5VVBIUjh3UWxXd3JueVQxaVltREUrT0ZkMW1ZVG53ZGlIbUMxL2xMQTU5MFBkUnhyUjFFbUpNZUhJMVJtZmVPOXpKYkd2WkpDc2R0emVOYmVHV3JBOW9FQ2VlalZuUEdyNWhUMER6WE5kVjh2YkhGaXNYWksxV3k3ZUxxUkxjWkliMlZNVEFnQkFvL2g1S29mMmlaUmVTelJWN0w3TU9Ta1g0ZVp5Y1JWY2llQUdnTWdNZWg4dUdIVjhhb2l5R25IZnlSTkJaUk1uNlhMdjRsUjNNMjVBV21zWEQ5YXVyc29mbFR3aUtLaFdTY0VwaHZUdVBSSlhJdUFvU1J0ZGZ0SmJvcitncmJOaEFoY2VseVpYVExZQm1idDlzWWZERW8yYnMxWkk4c00zQTZhZjZFQzB5UVQ0K3FhM0J3VDhIM0x5Q1dwMXpldEFRMjhxK3JFcFdLZG14VkVtM1h0QWErWUlyazQyREY4ZWZnNEtTSVFZTVlxWVlNdnl0N3V5SUgxWk1lL1hKWVk4SjhGbHdCQUdQMVNROTR5VUxWNE5acndLWFFBYUJsZkVlZWV6TjhzeTBBNmFrbS9rMzJmcDl5T01aT0dPbGxUOUNVR3krcWlPUDZZSnFTMi9SbkhneHljOWhEbXR3LzN1Tmk0dGh1dThsZTFLQ1ZDaU1mY3pDTGxXeHl2c01YVlpscWM0VEt0M3liTFdta1ZxaDErZXBzS0FTL3o2MU1YaVZwem9QRkZ2cWQzdGh2aENpNk82dExNd2ZRYlFvMHdjeWtNcGN2Z2pNaGNrNWMvWVV6QUNkdXdhWUp1NFVKMVhtKzdPVy9Yd01kLzhGb1grOFN5SWNkTjQ3bDJFeGdRbHp4dVBTOVFPOHJuc2lRT1ZlaFlRdFpvTjhxOXBvdTZqenVIREtJekk3cTRISHNhNkFQUUxoalBWRUx3NzZkQjQ4cFdNaVB1bzE0eGVvd0JhSjc2czljZlE3ajh6STJNZzZpRjJmRC9BY0RJdWcrU1k1ZFBTVXBxOFFLYVI3R3E2V3dmVzREUVhoTHN3cnlveFl4eVdkdWU4VFFKZUNsR0JRR051K0d1NFV4SDFwL21LK3FCK2c2VnZkbHdyZGR4bUt2amZVTXUySlBWR0FYMEJJd3dFNXdyTDRBOHdCelVxYU4xaktNRjFOemlEdjA4TGhZc0MreUtGanRDQnhIKzJvVDA3OWMrL3FDZVFWWEtscFZaU0IrZkU4cDFpbGo4TUlWbTEwV3NWQzRlY0ZBQVhoVWRCeTEyREdvY0RuZVB1ZC95bGZsRkxPcXFMSStRaFhzZkhjKzNRN0pOM0pXN3lLVmtCalpwWG5Za3hrQURnVWhaNm9MaS9qNnhNT0VKTWgxaHl2NXlWUHlnb1dOZE9uME4wMGI2K1gyV29Sb1lNT3A1dnVPQzl3Sm1BZTFDekxlQjlpZUk5YS84Y3hzSjhHZy8yVUtZQ1lHbE84RDY4MWpWeW42elhiSCt6MGVCSVhBMmFaWlJHcDE2ZEZEcmJsSjNzWis3ekc0bk45YzFubVBuUUZCL2FMNEE0bTV6Z3VUaDRiZTFPNHc1czMvMENoRHZQVkZmMGdpeUlxUThYQ3U4NmhnOW5DelVYMExZS2pvZXp6YStzVnFXTGVXZWtNWVY5ZDdTT2xRQ3FuL1dqRk9ER09TcXVrZVBzWTMxVW1pa2I4ZTdzbWZRdDE4QWx3OG5oMEh0eUExbWZmbmZIemxkYXFreGFhZVhxNm1yUURPME1zbHVkVHppVFhUdSthUCtVdlVIeWhqQUZrK2xvM3BtVXRWalVLaGN1WHdFQjgzQy9JckpMVDFPYTM2dGdaNmhtWFJFbzVxMy9NT2RzT2VOSlpKZXpCbXJRakFDS1FHVWxxUXRvM3pIVmtxOWpvMlZXUUZybmFWMk55VGRCVytzeHJKSXRzd2RsK3NCZEp2M1loaElhdkJ3a0lDUWpGd25mcnN5bmh0U1prbWJRQTVYaXBWb3V6bVpsS29IV3paU3BkNnkyL0oxcGs4M0EvVlVHcVBTM0N0UXFiT1RzcUhjRWkwc0tCK0pidEdCTXVPMkhpVko4a3JSMnRoUlZZQ1NkamhrbHRoK1BIRzVJODB1aHFUNmZRMXJvUjh3UjF2WkpUT0xsb094VjA0bFhnZTZGMWtVaHd5K2VIWllBOElpRFZCR3g1SDVsYTRJbW12VkFVNnU5RllRZVM4R0JUQk05Mlk1a1cwelRoRTBxNHdsb1NaM1lPTThyYkRJK0Q2dkg4VUFUSVJQd0lIdklTSGYwazB5N2FWVUtiSVJNbU9SOUEyY01mUCtqdk5UeVh2M1JPQ3hEeExJZ2hOdEpDb2pzaUExaW5ZSStXazB1b2thOHIwaXRYWW53QVJ5VmpINEhOVFNXWG8vZE9PWFhKOG9CbHhRY2J3UjFGTnZGbEI4VDgzbzlQOENlR3JyeEx1cHdad1VuS3l5dWJoWFc5Vldoa3NnMHZwUkUrbFdtekhSQ0x5SmUybjJwdTRpYno2a044eU9ITDQvUk9TWjJqZk9ETndWc3JZRk0zbkROYVZHamJVbGhFSVRFYzdBVXMwK3dYUksvWkxubE9COXZrLy9XcjVENEk3a2paQWErWkhHQVlEUS8zODdVZ0Y3SXlXUDN2QkY4eUVJVnB1WEN6Z3QyZmpyejNvVnc1VlVEZWFmMEptNm5DRE5FaElSSmk4MHllNzBtMmZJVTVwY215OU1Ia05tSXpLVjBUNkk5cEdUS3NlV3hTTytzWHJkLzBqcXMzTXd5aU8reUdhd3dhb0xaWEZxQXpRRTV6Z3NtZXdMYXdzRWhYNVZQMFlHT00rUlpjNFIrY3RQeUZxL2RGOTR5VnpKbFJRcldMTFpLTFhKMzVHUjZhN2RuQys1cWZJeitEM0lFMkUzN1hkcFJrV3VqNThNNkNsT2doazd6clhMaWpXTkQ1ZXhEc0l4TjlNVGR1UFN5NEljVm4zQ1g3R2wzNlZpNUhNSTZ0alVRVVkxT0lLNWhGSUZ0ZThGYmdSVDgvd2ZIZjhIVUxrUVRCbFc1UVNsc2NjR1I4Uy9hQmRRQ1VueTJEZDB5TWtzN1gvOCtKWWhscXdoa0NmOHQ5L213WDc5MUlUdHAvUWZ1ZTdIbUFEMmUwZGxKSnQ2SlR3aDVlclFtMEhpN1BCU2piWHJZWXVXZWtHR09EejMxMUZ0WUJYdEM2eFZ5OTVZaU1uRlFXWkVyKy9YY1FiRmZoWnRYSmZ3R1BneVBGVXM0NFcyVEtmSktJRmJVMGdYTDJzWTJIWWJhYU5jMU5RY3VYUE96dnZDb3h5cVNUU2hPazVabXNYWWVvbzRmd05qVWR1UndlVktGcE5tYWVPRE5PNjlzcXlXQ3lsUkYzTVhPdFVYNkh1c2Z1amt5ekRINys3Vy95V0MvMy9LeTRpanE2TDhsdEI1a28rMmcwaVVLSjZMWUVhVlZQZGpQUnREMFlnb2M3NUJwbm8vT3JzYlJyZFJaazA5K0lIQk5mRnZUVDFoTWMyNUU3T09zMlJPTnVscTc1NEJ3Z2Z6WWM5dHk0OE5ETWZJd0ZOSlAvTFN4enp2bzg4ZHBFTHhqZ01KQUpPa1JxRDcrT0FnMGN6QUJmM0l1RUh0YTFvVkMrTHdZNmZyR1pqdmJEaTB3UzlMSmI4eXovWkluNVF5cFRPTXJNMVh0NVdmVHhIckw1VEczdnJMZ0J2SktsUjdyaG9GMlp4dWc0U2V3ZzBtNWVBSTdKU1h6ZmE5aUZkYkNRaVU5OUxCQUE3QmRLUXg5NFRqWjZtcHlCcUhOMmNBWDdyODQ0MjR1Zlk1eEJ0KzMxQTNWc0VRWlAxZ1RUUjhDUTJPMitNUEVWSVRsSnpQNm9WUm9VdVArWkxtUUtjRG1UNVF6VkNXK1dqdzFHQnJaOUxmWHZ6RFJYdlJMY05lMXFmUzNuUDFDL3JWdUtXL2pBVGpGMlNuV1RLOEY0T2FlbXBGbnlBWnBCWDE3SlVjMmIzeE14Wmo5ZGI0QmorcFZYWlFCdEd5cisydHVCSEdVTzdmblFzR1RtRnBKT2ExTURKSFF5Qlp4aFNUd3kzQ1FwRGZmNmw4aWJkNmJWdDlXZ085TmFTOWNZSzIrQS83YWtXMmxybDNSMDY4ZVJYZ3FiWGd6VzFpMythdUZJN1ZUWVR0a2gxTlFiVW4xUzliOEM2M1k1WG4xS1dHUUJwRDJESnlmWEZVbXV1WDJaNHZIQXFuOGZMazcrVzBpNFFBMjlUbGxhOHlsMkY4N1piT1gwTjFmRWl1aDRQQUN3TjZUdUxUYnpuTW1YSWR1Z3pPWTU0RFcwSUcrQitYODhtRzhwdE9nVkFxMlkxVGF6QUNpK3hmU1FML05hK0R2M1hoQi9vdHRJMlVsYUVubEp3clkzVUV4ZWJNbGthak9TZ1VWZlZoeGl2SmNhamZIakdtZHh6Mm9URWM2SU0yaWx5MDZMUWtLT0R6SVdIQ0RVdTczUmw0RXBBaGRXQ3dCbktOb1Zkb0lQQnU2Mk54ZDd2TWVwekFuQjdUZmJBR3I0Rlh5ZHVDQlpXc0RqMzJhWlA1WmV6cHFpV2ZWV3Vybkh2dWxxM2hRTEFxM3lmanhFUkJkQzVoaHkyMWo2ZzNKMjBQencxTVE1ZTk4d3RZUlY5U1FZWEFyeGRKY0l2dVppb0kxaGFIemNTRWwrZGx1bHFacjNhQ3pzMTl0QjZJMnRIN1prQ0ZZNDNrVUwzL1hGZUMxK2k4RXlpdlRPRFlCeVV6RU9zbUNUVHdNRmhzSHpCcExqVkhSUlI3L1NPbkJ0bW5QL0hobkF6UGhRYXJhdHhBVjNxdmF1TEI4K0YyazhhTkRQclhodEFyaXBoQjdFbTBiRUxIeTZsQ2x0czExRnNzODhMNitHMWdYbnZtM2Zia0V6d2tSdjlmOVdFQVlUL0JBcHdCK0M2d3Joa1ZpNXdRdzZISFFJOFhQOXNiTGlGY01sN2QyUUlOT213dWNsSUY2c1hUWXRwUlJwUTIzN0dycWJrWTBWZit3WFRpWVZ0b3NNMkRidklOU1Jjejkzb3dVc2pnMURCNVhvYmNIRTBPbGZXVGtyZUg4VXAwcWxpL3E0V0ptUEpMLzNkS3krR2dLeGVMSDQ4MkxkRVdxdFAvZHY4NjBVNUYveFRKMWx0RU0vcC9YRWRHWGMrbDduWDByaTM0TlhiWEhORU83bmpwMWJiS2Y3K3RWNW4rYVBEUFU5VDEzaStqbkg3cWxSZlBGOTZsMTJzSnJwVGRkLzhoVG5Ici9TZk1zRGRtVXNMcjdxL3hwbWNUSzlBd01JeDZ1NzloYXd1MnptN1loK1RSbDZUU2hOSmdhaDlIQ0RkL0pNWE9zWU9MMWRKVTVnMS9LS3AxYk5uc0puck1rdEVYTXhxaVc0cVM4R250S1hpdXRJYWorUE4zS3diNVV1dzRpc2htRjFOZTVkbWE3QWl1YW9NMDhSLzZBL05qZ2txaEp4TlZqMVlNTTBRSzZMTDhvdUFFYWRNRWZQdEpoWWRkWlg5VnhnczVIM2RyQ2dlbDBuUXhDV0FNclpZWWNhR01tbEIyMHhBNGpRRlhBQkM3aWVRN3VhUTUya0VGUjBxVHJ3cW1ocERMQlNCOEZ3cGxtaEpOM2Z1dlROclhsRWU1MjVvVEhQQ0todVFlR2tVRzJEWW4zUGlOQTZnTWhuVHhIZy85TzJqRm90SzR3aTdGN0hUbTA2OXdqVnFJTTUrZUNyMW90dFlEcXArN1VQT05qSTU3eFR3Y3d3S0VocGY0SHM4NDdodDB0QkZEV3o2bE16d1NtU0xURHhIMkQ2UGdweVNLemJDOXdIUzJ0bUF1WXFJdWFrWktMb2VFZC9KN28weW45OTVxM0RzQ3lVY2FLSUlBUjdveDJqdUdNTE1MZkQwT1FQSnp3NmMraHVWekxPWWJsQ0xlVlIxRDdQWktvbGtVVmFFdjN1Um9WeHdHaE5SMnEzcFhSei9RK2tId1hLTFFYbXBGczZpOU9zYS9veStmdkhQbk1IL3BmYzZveFExUDVoNHBCSGhHQlY2U0tWaUE5VlJGcmp0VTRXZ2UyZXYvVng2cDBUTElZcE5BR2NTcU9NbDdITCszL0g0dXI1NFYzWWVZb3RnRkh2ZWZ6ZEFBN2F4dXMwaFJPWkVJMXlYMkN2ZDRvWHU1bzRYaW54Yk9QNTBJR3JHdG1xZGxQaUhUTVdqTDlJK0JuOVdrTUtaWUUyQmlOSDFqQzNPNEFFTGR5QVc2YTA0WXRqNll2elc5TGhHNGplcGNRWnFScytDOHFhK05BK3hUUWxxWStyTHNXQnFua2paV3JQMjhUYzJ1VEN1VFBaRytwazZ5UjJxRlVSMExpY1JTclI1LzN1dGVXR3JPcC90ME9zYXU0VTVJYzAvcGxWY05seFY5WXpXZHJNRjJ0TUVGK1dBeXU0Z0xrRGZQeUUwUVpiUnV4V2V2QlNvTHRWQ29GRDNqczBVWFN4L2c5NzdpQTNXM3doVUwzQ1dtSTljcFZCOGVqWllyVkhRaWdiUnFsTDFMVm5LZTA2YVJ0VnphZDNFU1dMRTNCc3F0T3V1WnBOM1JsRUVZTlNzYnJsSGNoSjNKUE9EcG45Rk9Hb2V2M3NETXVGbzRxUkJIcjhPVW5UVXAxL3M1T0RlYlg3V1BaSW1qU2NKamVnVllnV2NyTnZDblFIN2lLUlRHR21lMVhudjd4Nk13aUJnZE9TV0Rrdld3Ti9wQkNxMDdVR2lwSWxQNkp4ZU9Pc2JLbzJ6cUtOVUd4MElWN2F6VVltYWRWbXloOHJZeDc3ZjN5bGtRY2JiTXlveld2Ni9zRTY4ejYvUU5XWnVzbGlGYmRIbXNGaDFXVGhKeGlSRjA2d1lDMHQ0OUpMcnV2akJoRFduWHJrNGVDTnRIMmwvY1BNMm82SXkyWU9FNzRzRkhqVEZtRDVYRFFzNTJZWkNVSFdJLzVWZHZXWWZzNzE4ZHpDUFhRZFRVMzgwUGdJcXpmSGJ2Q3hZNHp2OEVDc2djd3NqMy9zZHFUbSthNUNoUkZHT0tlcFVZdlhBNjZkQTJFS2dYTldVZXpuYmtNYzFEdWVwZDdQeHBhSGg4cHcxNkxGNXNhcmVZamFHclI2YnJ6UHdwd3BXancrOThkd3FsV09BbDRZV0prZHJkSGIzeCtabEh5UjErclF6N2NMaXZCOCtmRmkrU2dDU1hvZlRsSnl0dGJvOEVrbUdvai9Rb2dkclkwM3NMK2hEWWN3a0dVKy9CditjRUNQWjFucmpVR2I2d2dxZlVSaXF3Q3hyem4vYUY0cXB1U3dqbXI2ai9TaEVDaDc4V0laWksrVnlBTDRKa1FkM3FWWnQ3dmZGRCtWdG9YMGFxdGxwRVhJb3VQL2hta3VyZkhZZ1U4OW5zM2dueXdnZjdUTDJtUkl3OXJuQkpZMU5aRmlpU1VhOW1hOXd0VEQyV09Zck55Q0NMR1IzV3RTVklSY1NmK244QjBRMzA2bnBRdk5nOVVjSWs5WXJUMEdGVVFJV1pualNwcFZreEw4N09aMTFseU9pa3l6RFdlcDREcnlWTnlyZDE4MUx0OHJ2UU1tamRlVGdvQkgramdTWWFrcWdPVDBCcmhTNE1JMUMzQVBYVnpsazhaTUVnRGg3WEVFOEg4U2Q0RGhBTlcvUFFpVDB3ODcvMzMxdlA3R0ZwZVljZWhxMmYyNEdMc2hxYkFTekVMVjQ0UVNNOEJNcVNmWWsyV2FWY2VKM1lRSllNc1FNcEt6Yks2Q2ZQcGZveWpVdmtsNG05SWZxanZBOGtmOTJWSW5DTTIwMjFvcXNLVHNDa0xmcnlBd2hERnRIK3hyUE1ibjBneHdVUGRKYVNhZEFSOWFzbHlsOEZ6WGxwbmFhRysyZFE4SXlpcWM2WGFoUncxMHJra3diUEowcFFXTk5LaHM0amFqNjN5QXB1cDkxcjR6K3pTSHNwTFBMektwdTNkUDZDd2VEWUVyRjdpUDRObTNZT1RuNFBhcU5aVEoyUzVnNk1zelhGTEZXQTVxSUs0Z2dQenExUHVQdGl0dVU0d3BHMVRoOFFpVEFPeDhXNmZVUEFERlN3V3ZwSTBJSFhSYnVtSldsRWFJd1BPV1E2T1huNHpVZThzeFMvL0VpcExxbDlMVEZRc3Jyak9wWXQ3ZXZ0ditqd01XVnNHQVZ5aEFKOUlmbFBOUU9OK1I4STZWa25FcFk1ZFh6NzRnTW00eVhiRHNwZlpNM1NwNUU0WHV4RzBBREJGZFVxdVNBaS94eG9lSXoybDJmanJpOVRST05TYWVXN3Q2R0RsYzBwRDl0NkJhaG5EMmtINmdLWW8yVzlnMVN1SjRXNXRVNWtnNXF0N055ZEpzVk56WVNhcmdSMHQ2NG5sbW9nVDRab2duN2h6MkEvSHFMUUp0cnlDT0FEeGplOXFQaWxaSWErcDJGNHplMnFpanpHTFFCbWFvNzVIV0JDZmowQzV4ZXlISHlacUdmcjlXc0hXN01wSDVMWllSNmlia1VOSGxHejF3NVVlQndadU00bHp2YTlWTElaNTNsek1XWWdMbVRocmppWXZOcVUrTStWNDFjMVFYczVjcmp0NitrbzZRMCtudlFyWDRhS1R6UVF5Y0hkMEdRWS9ieGRCZkVGZ3Y3UFB3OUVGcFY2QUppeWxTTkRsNWpLWithY1JhWDhCUElJbG1LSVVoMlBTUUdESjE5NFgxdWVNWmk0bmJiL0dKY0tEYWlnNisvNHlNUFl4MWQ5K0dHMk5LY0VwNTF1WEkxSTA3S25LZlorT05IdzIyMW03OWdaaGl1ZVBYSkxvT3A3RkN5UTdqK1cwTjBMV05TbmRhUlB6anUwVFdiUjczY2d1WGQvZ205cmdrOGVyU0F5VHVsMEQvYk0venhlZmFjWTBYM2g3eCtsZ0ZpVXNzWkd6enN1YkJ3K0J1eXlMKzQyVDZRbkV2U0ExeDhDUDhmNUoxemRtUjREcWgyTisvclc3THVtL0pvRmtpK0w1SER6eXBsY1g3aGN3QXFBS2orTlNka2NpdWhsaWw4WUkwWHNoNlRmb3JpTVdZQnJQMDZhZzhKTzlvanBxekJpbk1oUGdhbHFyV1pneXNObWNyeVJpOE1zRHJIK2tKNTJwWS9pcEFoeXgrUlI2SWc5RXJhVnVuc2t2ckhKMzNHYklqT0dRb1ExYkxnMUF1SlFEUmU0OTBRbGlLejZjZ0o3TkkreWxyREdOcm1CWFhzd2tHbFErRmROOEcybnJwNElDK3FnWSttZGJjOGI3b29ndDNWbVFJQzJpUTZhV0k3ODB1K1RpbHdpaldsRG1MbEZ3Qk5jbDdlTlptQjFQOW1UOEwxbDRTUFF0YVlSMWJ1MHFUMTEzVmsvSFYySCszaTVuRUx1OEVlUUFtbHBUcWlYZDlzU3pNUU5hVzZyOEFlNGNBamVuckpjc3Q0TUxXZXpLdVBqUmoxODg5WUQzTlp1Y2NMQUdlQ3ZGRHlJMDZteUUzeUNRUUMrVHpyNGhucnlZczNRVHRmOVA5VkoxRHhlVHBJbnh5MEsvdDVQeVZ0UDM4M2tZclMzRTJadXdIRlVMYzkyUXRTSHlBZzNNTTF2c1Q4V3NaTTJYRkpNcHEyQ2ZrUHhKWmZJcEdIVXVkTG43Yld0Tlh4VlNPOVBoWFZ0SjRJRU5NeEZoTEpvaU80THZ5a3c0RlZ3WmJsY2pDK0lxeGNZcGV5NlRvMTFEQVBDYUwxVzBjQ0xNYVlQTnphbFMzT2VJcGxPNHJnOW1QNHhSMFk0UTNqcjNseUJOUkl2SGcvajcvOUErajZsV2tkMFV3TG1JWE0weUVjMXZPVjN4VGRVWXQwSDVrNzMvcFlNNmszK0liSFRva3B0MWpYc3ZXSVVJN1cyUVZlMm9KS1duL2JYQW9keFFTVnUvZUl5bzVRZFVuZGJ1Q2hjeE5waHJuaVcxSXk5WGY3aTYzdFVPSXRYUllGU1lITThSdHpTdVNUdG1PNjVpWXlnK2dxNHVxN0VsYzBGeHQrckdqa1NVakVrRWlXVEpXZzMvVmtPVjU4NWZZK24zOVd1d3JtS3MzRDhIVFFGK2tZenFlVWZCV2ZjbFZXdEhxMjZZdEpLdnBVdDBreDcyTnNPVUNHSThBTnU5Q1BPZmR0SW1HYks0UEJLNkp4bFpwdXBKMlY1Z1FyUTBtVXRseTVWN0srOVlZT1YrU04zeThIWUFpS3pTdWNJZ0lQOHB3M2luTlU3cndVVHBUdzZMMlN2d2U0VXJFRS9YUWtSQ1NnTEw2bmRSSVpxLzJ6aGREajZZcDFTbkVYR2tBSEMwMUREdnE2ZVhPV2VMK2dCZjBrdzhLVjI1eGhiK0FZT0Y2Ky90Rlc1aHRhdE94aEI2UGZoNVNKMkU3UnZkT2xWT1ZlaHk2dktsK3JrZGZTVmx0WngrZnhMTkVQRUtGdFpPTjliME45ZnlBZDVwbmlmaWc0TDJjWkpMMTQ0UVYxZmw3Tlo2ZnVTN0ZHTHNvLzN1eDV6UUw4NDE1OWFJT2t3UUJwRm80bjJYK0ZxRXQrN2YzekxZSThSdXROWTNYSDJuRkNENnR4TXBIeVFEWGdMVmhKdkRKbFM3Wk1mUzFpenZ5NUQ1TW5UMzlvbWlDNUYxc016VEFhOVJTVkRnbzJaZGhzZkZ1cmNPekRqcE5mSk9nUEZvLzg1OGZHWGZMMjR4bXh1ZENMSy9UQzg3TDJWTlRUT0p1QlBZcHNMM2xPL0JkWXBWYkszb3pDZGxvTVVobEphNVdWcGJSTFRvQ29mNGUwTUMveng4QjB6Z0NQWWNaWHZ2ZFQ3V0hKMUxveHZWUGwzWEJJNDBybjR3bTR1Y2pBUGJDUmdPdWZ5Nkt0YU9nTmhtS21CK2V3QU1ETi9yTmdEd25EcmJRcnY1NFpaL1M0WHlMdnJSUDhQN1pQbzJDY1liVzVIdG81elRxbEZQSXR1K1hxVFBiTmhqcXF6VlZXL2FjTWtiTmFYeXBJRnl6Yy9WaGRGTnI4L0MvNzZsRFBHMVlsZ295ZUZCUkpxQVlXNDIwVmpaRlZVV2gzbDAvUUFvT29xLzJ6YitiNVNMckliYUFwOXVVV09XTkc4QzZZSnBqRFlDelZHZXZUem14UkNVb3kyOExjc0crN2RoWC9vSnplc216Vzg4bzJRTlJCSlhtZmxuUkdjYmcrSElmMTBlSzg0ZS9vSktVMkNLR01NTmlHSVFTM3REdVRKT2tRRTB6QlFTejM3RXZkcmhGWnFJNTVQc0VJdHkvRW5Id1RJR2Y1WU41Qm05ZEViUXg2KzIrUHd4a2cxa3pHQ1hUQVZMWDhuU0JUdUJsNEZsUHN0ODZzcDRtd0dPYzU4UGltMkg0R083VFNaaC92bDNWOTVNeHFnT1RnYTRRSTJNQ2cwelZLSHVaM0lIaWNDU2hvbXVqRE9vYlZDeDFVS053dGZhYnB3NGdhY1NYckROTGpzakNOa1ljL0VST2trTnJ3YnVDYW4wZEQzNUdNWHVIUUZsMCs0SDBONC9QanNhMzlyTkNOcHAzU29kSHhMa1ZoZ3VyYnFqVStEVThSTGxkcFRaRmJDQ0dla0RUUytrUnpReDhjZEQ1Qllzcm82K01pV3pvQkRxTjFGZDV1WnZxWXRlQ3VYS1RsNTNTdVV3UmlscmIzNkNtd3pYOWhvUHN6RGRVUVRxOEpNVEo5QlRmQzZ2U1VZWmx3QXlpUEhZanpHVmMwK0RCMTVaK3E2Vk9nMk5UV0VRUGkvN0JLWEtFNy9GMU1yYlE5cmxRdjQrZWkxcEt0NjZ0Q05oYVFUT0srZzVLajdsSGFjRVdYMmNZMkNLWSs0MmQycGZxNThaQUdHL3UvNW1EVE5xcDNldzdpY2FHQit2dHFyUG1CR0ZiMnF5Z09tbElMdDhoMGZGVlFhWFRhZW9TMUhoZ3Zuc2NCWHpaZ2Z1VWpQbkRyS1oyV1AyRS83TDY5bHVCYkxEaWVPcEJRanZOMkVUVWtnYm9oeUttUVA5dkVwalRUZXJXM2g5SWFOMklxd0J6MDFNbWtEVFowNkc0UWVPbXNwU2J6c0wraXVPTWluT1AzTWRMam9lV0ZiUXp4NVM2YzFWemZVaGdYNU9QTlN4ZkkrUS9ld1FnaW5lYUdBVG90QVZaczlwSkxGRnI5RHNMRHFYdUlWZWg4cXgrQnd1T1hQUU9oeDlHSVA5OHJSSVJqV3pOdzNSRXRpRURQMEV0Sy9ZMVRvSlp5bk5UdFdmZDZGT3l5ekJsY3FCNWNHSnhtbVdrV0hRbWhpWENTVmwyTnVMVVdlVEtWeDRxaUxhV0VDU0NxOHQ1ZCtEWWc3anhrUUo5VDJ3NWE2eHR2bGlHMUszbmhRVUhaVkJGNC9HbHMvUjdXa3dXdm9QYjFtdU5GM1cwY3lrcUs1a2J5YTcyQ1ZaeEJERDVjeTYyazNmZ3RHZXpvS3hnazU5N1ZobjEvclJ1Q2pNOVNpK2tSVkNxNnExTEptWXlJSjNpRGxuR2VSWHp4MHdZQlJibnF3TnRBTG5HSUt3a2NiTlgrczd3MjIrQVdGeVdndkJpMml2VTNndXJxS3pHVVhrZ3E5enlnN0MvMGtJQ3UxK2NadnAzMUFlcnlzUVRsSzhEd0VvL0g1K0x3bnN3MUxoVlJTT0dnZDRYOTRvenNQbXVOQ0xwNjhDaWtKdm5hajQ5bHRMcitNb1JLVjRnV0RPdDRQd0phMktnZXdnY3JEVEJPV1ZUVDhmTVRERlpDdXY0eXRLdCtMdU12cUFLLzBjS1dBb25hNjg0R04rdmd2WEluYm1vbnQxQWw3b1dnNmU0UFVqcEJwbktnWFRPNWQ0TFJ5c0xLWkp0cTQ5VDdHb2hFa0k0ZVBjTnNXcG5iSjc2YjFIZnFTNW1ESHVKTGJXd3dqN2oycEdXeGlmdUoyVEJnb3h3Ulh0ZERzWDFudUdlbk9DZFlBenhuZk9uRlRVaE9SNVVSalFyMDlibTRGbDhxaTd0ZkZEQTVnbkppVzBmME5VL1dtc2xnUXM1eTB0Ym10VUxHaUFQWHFUVUJPN3QwMHhNYXFmV1JUWEJ0UWc3NjA1Y2h1V211U2U3WEpONzc2OTg0dTMrcUxCNEI0YjRVYzcva2pNRWsrVWhsUnlFQTRWcmxuVkg5Zk9oeXVlMVlWdExiWC96NFpETkhyR3VpdVAvTU14Vkh4aE5HUUpZN2YxWjRETktqNitlNE1GVC9zQWtxcGZzQnRWd0ZsOElLVDJJUWF5OTNVakRjaFhWNG1tMytIRkMwbTUyUzFraVhJWkFGRUlQOE1MTUF5VXJxYlNxTWRvZU5VZ212YTFLU0Y2djJtV0p0YVhnQTJkcm03azhhcE1yL1ZMUkNSRUF6RGJIUjVRQ1JTZHdLcFp6L3hsNVRINHNZSXQyOTZ5L3ZwYUovTjU3RUw0LzRwRmY0YWtzbTFvRDgvL2pneUV3R3lYUDNmNkNzT3h5WTB6MXhrNXpVdXZzb2UvQndqV2dnZG9WR0ErYmNVSnZxRkZMZ2xIclQvUDFTc0lETkN1ZWQ2Y0R1Z0xyRFFzVXVWcmlVWExMcnlGc21YMWFCeE9VdndDd3UrOFNVWlpzQk1GNENnNk9RM0M4ZGdVR3RXbURpMURldjFXRDhNL3pmeFJyd2MycmY5MzhZeEhsRS9FdnBPZkQ5QUgyRjZQNVREamNsV2lOTjFCb2tyMG1MSE40aHdvcVkzbG5Kek9hNGxDcVArNnVudWQ4VUIzbk5hOW52RTZwYjZReWdMU3RMZ2dhRk1JWEkwcmdGdFpkbzdRZnQvTVF0Rm9ud2QyKy91ZEFwaThuQ0pubDdsMEVYTHkwWlBUOGl2Mm4yN1hnc1JJQTE4WTFSUFFKU2FtN2hadnByemNudHdkekRsNDB2RDNDazBQeDY1QlFUYTZUUElOaUljVGMyenpwTGVCWStXWTJmYTZmb3BIVGw4YUF5UUM1VWhEMWptTk04TW85R1JQVzZSM3hibDJiZWRiWjZIUnVhc3VwU0tnRVM1NGdvdmY3Y0FrSlBqbVA2YWxpKzhDS0hJY1BoWCt3QkU3YXRpejdRSDFxRUxrU2VueFpoR0JpUTZHWXE1WllVbU0ra2kyOENGaG4wV2xPa2swdWRkdnFiZlZDZWowYk44T1duWnJiYS90bndhZEJKMVhFM0FVM3FVRTZXSzVTQ0doRDFDSUVMckdLclRjYU5sWUI0NjFjZUE1Wk84Rzl3dFlIOU5ub0pDejFlckdWWVNVYWJ2MUh5RFBxd2NhZ1RHMmRneStOV1VtY0czYllkNFVWSUlRQlNhc2pudncyblNteUhxUGY0TEdwUjRpQ0tZRnVIdEk5Yk1aUW82VDFReW5yakRHZHRlNFhabHNmSmNDNThKelJtUnplYm4wQjVrZmV1WVErQmY1dHdDc1pNNjhVNzJWOG1GMzJ4WG1uSi8zTzRHcGZmckZWWlJZSUhtb1M3Q0U5VXFoR09lUXByQ3B6WHVXNmZ1OW83aFlzblpRb0JsUFJVbVp5NzlsKzN5Qi9ZT1ZmZkJ1MnVsbTM4cjVmeGo0NW96UGhXZVJneGZJZW05VUcycEVnUU5BSS85RWNxdDNxc0R6TytvcTR6MGxENkF2UVlBN1JZN1Q5V2UrQXhFZllrQnk2MnkxTW1iMzdlMFlWNTRlRk1lM3hLQm9UOG5SQjhXdHJQbDZpTVhxUE5EZkkrTUt1V01CTXNGdG5JSnQ5clBoRWtiUEowYXBBQUpkb3h0akh5NnF4c1pSSC8vYnJCTGlYYkpDbTJTelVZeitGNERta1NNcE1icEdpbTVLd1VRbE83QzROeE9GS3ZQOXJqK1FSRFpPNGl1T1A3ZFBNY1M3cndaY2tEWWlJTHN0aHRuRE1pRkErZ1dHRnBJM0wwWmpOZjFEVWd1OGZlQWFZMTVCcmo4NE10Wmk1d2RJalNsNHZPcDRXZmgzVXZSVm8xNXk5UWsrQkRhRW5qWDQ4SlFwMTZaRVcvR2RpZGtQMXMxbzFaWmp4OHZWNElSNVZocnhMU3dQOEs4a1IzNHNYcUtqZzR4NENxajUrbW9kYnJQMCtrNlpNRDVUMDArZVV1Q2luSFF1Yjd6TW9FWmtIUUxQd2R6blJWUVBuZ1ZoaE5KSnFScVJSRmhLWkNzclJqWVRsMGJJZm83U0JjOHJDVGhSM3NqWnNDQzJPNC9abTJKcXlCWjRoV21ucDJrSTVvdllYYXY5ekZVbWxOMnBwbHVHR3RNWE14NDFhMkhKcThxeVZtdDZxZm8zcVlTcG0wN0xSNk5GNXF4bSt1VHZmUzNZVndnb2M3eXdVQ3l6SW1zNTlaYlpNUE9idXUrNGpKcldQY2dXNHoyeVdlMlB5UHByZkJhR0lPaVlyUWRyZDBUT2piRCttOHM5TWJnNm9NdjEwTEs1SGFUTFRMbDVUR3BpekpNa3FnWm82VUJxRlhDSGJ0Q29mVTM1VkIrcGZqeEErNzhIRURYeHFPTnBWUGlOOHZBTmUxTldtY2JwNUpVZkt3VkpyeG9DTjlxS2toWjFTb0VkdTBPeHRjQUtPUUVpU0dmRFFlNnFQeFNYZ1JDVTZuU3hzL29hLzF4SHI4Sml5ZnlkUzRJTTlKa0tOODM1dk1QZGZyaUtIRDRoNHBuanVBMDFsQk11Mms0eVpxd1QvemVKTnlndWpwMlpMRjN4TVUvaVh5UjJmVzg3K3ArNi9wZjRtRU8rMVhuZlhDR2hyeUFmUTNYeEJEd2NoQTJZQ0lNVDRQM0ZoaGZJdW54RFJKUDl6ZDR1ZVpDbjh5YzdqVjdONi9nVUZwRjRsTHZkQXJtS3ZIK2RyL09DRE8vbEdmTGVtQ1dnTmxMOStieGxXMVBNTGJKMTBEclpJM21ocW4wZkFyekZqNmNTei92aDI5ZWh5WDFNczEzRk5OcENzODVlODNHaHArTWRpdmF4UUtQMHpmeGt6SWNmaUJ5azJSUXhSRGw1VGFWcUhRQXVRaTZ6MmFDbkczV25YN1JIWnRvc2FiRXhYaWtJd01qY0dHWGlORXFFRjFwWGxJZFRhQXgzdFlkMjArR0Q3U2JoQUEvQkpOUTlGdXFCdW1nOEo2Y1psRzBLUGtBMzlEaDNxcjVESHdGaHlkbVg5cEUzVWlTWERnN3hoZWFXZXpyQkYwOWFzOWREbGQvdDdEZkVFSWtsVjVpVytyWFJ0QXNCSmJySFpsUDVuSTdFd1B2aG1QT1RYRW5uWElwb1ViZEVoYTR4dmJRMWZWenQrOFZkRDd5SWptVmI3VmpOL2dtdEdTeUF2ejcyeXZHSDRyT1RobHBldjZkbzZjQVRMejNYVWRLWGVsRjg2ZW5GcEhMZUlmZ1FqdUxuSlE3ZGFaeHZiZFArRTkwUmIrRTI2aENyUE11MlFHOTZuT21NMEtzdXBWZ3NFZFZnMlFoYkZxZ1R1TUp3TGxCd3JBcG5VYmVLNmR1K3ZNZzVpbkNGNHpWa0dWTml3QjJKbXdHdnJQWThZTVU1U3Q5alVnR0hwUkplZmMxUFRYQjh1c3dtOU53bC9pTG1JVFJ4VFpFd2ppZnphYnFSNkR2Unk3eVZSU2tkbTB2OUxrUFpKelpSV0hEcVU4eXBqMU1pM1dybVVpeG42ejREYVFLMHJVMkw4M1NLYi83aXE1aG0rZ0Y3WXZTQjhaN3dCbXZ3VEEwK1pVYzZsckJIUE5jSkorNE5renRvcmtvVUg1OHB1UTJSUTgvNldYS2VnRUltdHZzS3ZVYkdWTFJjeDVmVTNqUXJoUUs3N0s1R0F6Z056MUFHeHI3czRyWldscjlWNkJYbkw1MU52MTFaeEg1S2RIZlgyU1RpWXFaWm1FK09SYzkyTld2TVVWVWovVU9KY1h6b0ZQSXRCdnAyZGxMUDd4VHBkMnRHWm1iSUtPTEV3bU1nRjFTZmZBV2Zacnk3a2xmbjFqMTRDcGtRRjhTQ2x5ZForV2NsaE9wN2R6K0FRbmkwNWVvVU90ZmJOVGZxYUtqekU1Q2V5TnN1eWFkbGc1bDZHcHQzWDVpNUpDQjZWbjhWb3JOaCtoQU1KS1dsUE1YYmQxVDVnWFE5bXFha1VlaUQrbGExUUxRaHlXV0paMVhUb2ZNTnRjRDQ0UHYxaFZkZEljaktCb044ZThleGRBc3A3ZE9kUlQ4NU40dlVubENmY0cyaml4TTR3TUU0dS9keHFaRWlyWWxKNFkyWlcyQ3pSV2VjazMzWDZPNDQ2eW4yTnhwVzNRbnc5NG95QTZ0TGhuWWk3OHNEVFpPRDJTanVxVnRpY05LVnRKWGQ5b0lmRkJBcEhWUE5Kd2swZ3Q4aXFrTGlNcytIcE9TdzlsWmVNZzQ2YkZrdWZRbFB1R3hGejNFejVWTkZsN3pJWkZ3ckZtd2h0NkxaQUl1QkZqaTc3dDRXbFNrQ0xDSDRzN3Q0RkZrb3d1cTk5SXVzSWM4TkpSUy9oRGx5ZFJ2czM3NjNBR0VXNEFKZDFwZzR6S2xDdnJ6RU13TTJoUW5wUzlvVGc5VllldTVFUHQ3QTVhVk1EK3dvTERYR0hFVWZTN2hoZ3JXMDV1YTZlRFZBeEJva1VOWDhQR0RCby9UVVBwWG9nM2FiNjhNS0MwQUhLd01DOEVsNm1ENW5RT2F1ODBpbjFHMVhnNWpqVmhFcWRDeHM4T2wwSnEwYkZoNE5IZ1RiWTBzc3ZpZTJHMnFQLzhvNTlJWGR1QlQxMVROYlhpdE0wRkZNN1dUTzFpUTRUa1VaMml3M0FrV0lieW1BZFhQUm5CT1pwci9heVN6U0JlN2lVa2dpNU5pODRlS0EyaHp4WXRYUVRUZFU4WWpGZnRiRmdCaXNVcEJuOEFHRThqM0hxM2t0V2hJYktzeFNHaEZsQ1g4ZlA1a3lBd0ljd3lzQWhGbytwSU92d05TYjhXaVNTeWRzWGdaVEUvZ215VVg0Vzg2eXU3N0hFcXJHWmMxYUdveDFGVndiNXlybEgwSG5GM0RLVkJMS09BdklYR3pGWnQ5VTNYMWR6S1VzYUU0UjlrUjR3eGdoeGNiT0c5NDVxalNKVXZSNXVtc1VHTmVCK3JUNFc4V2laNGUxeEl5MzVma0VBRWZtQnNla3NEdTBENG1yaVJ0WUVpVmgrczVveDB2aW1nSm5WQ0hlZ1ZUdEcrMWJBUE5tbnd0Q2pPVU9tMzg4MmM1M204dU5Ma29RWXVvY3dNanJLRkx6amp3bnEzeVpZdjlvMFlTTzdWTU10Slh2OVFDOFFUc3N1VHUvMm1MbWVUMzYvVXJmSVMyVURIRnBQN0dwVUhtZHBWZ2N6QjIzUld1MTZjS0ZJUG1DMyt2K3BsVjAySmJvZmRENStOc3dvZW1OTTNzU3E3c1pOZlVSQWlJZzRvb3lLajYrSHVmd0tVZzRXUXF3MG1vL2lDd09udWFKM0RyZUZtdnVPalBqZnVUY0dyRjZKNDZ3M1VpWGVlVFhMV1BPYTJYaloxTCtPdzNXMXBhOXdHUGovZE52WWJtaG5kbkJ5ZXhXS2lRbDZuRFMvQUkyaFpmOURMSnhIRU5wMmEwZmVZejJRVkFlS1NDK1gzd3VRa0UxMUh0OXhoWGpNMUI5aERjRHd2SUNGT1pJMCs0SGppTUhRUXoySm9GRVhCR1NvRzhqelZyQlRkdGdQaVkybTRjd3RkY3p5VW14d09QM29saHFEdzRwSjFKdmRVMEdCM0JRWnVrU0VBWHAyZlQ0djdPbUt0OUFHZ0V0SFFVT1VWSHlpT1JEZ0pvRTd0KytLd2VodHoxNXE1SWxqdkdtbkVDVzlkampXMEpxbjFLVFhHc0FQMFN2eFg0ekthTVRtY1dPYmR6T0JtTUY5VGFNcGJUOUdMV2l3SHNJU2c0eEVXUlFtUXlKWXlGTGZveEFUSFRUQUNvRVgyRGRGeHI0NGZDc2JtRG1idTI4YWhkd1BZcHVUWkdBRGoyd25iYTI5QUI0aXRibCtHNTdwdWIxc1F6cW5ucVJDK2NRb1lmOGZwY3NONDdyeENWYmhEV0dGd2FmS1RydkVqRGF4RUNWYXVHenY0SWlzT3lqR3d6N3ErNTBtbmJLMHhXY1Y2UHE0TjNaSGF1Z0NYTmpUcDZBSjI2WmdjaHdrL2R6SWdLbkZIb1B1QStQemhIT2FwQ3JzV2dKL2pSOUpYVS9NeWczcndwNG15bHpjOTJqaFRnWVM0RmZHVmFXcDQ4VHdwZVhFNzgzbEZ3RHRXdVJ6YTMrOC9TeFVZWHNGRGRTb2FwTmp2M1J1Sk42WnJ5RFF5d3ltbDR0anc4UXZPVStVK000cHY4MWRhOTFESHZLZDIxa1c2UmZCOEF5SmxsdHlqWG0xTXhDRUsxWjJwMzAyVVN4aUkwQUg1NGp5OUFFSkM0aXMzcHJWZ25vMzZtK3E1dUpFRjhub0o0cTBFdVM5MGZ5L0p6aWp6THk0U1RsT0RpYjd2UnRXSkRTMUUzNU5BRFpuUkR2RmdjZWdaY2lCTG53M1pmMWZyN3AyUC9IWnpyM1o1VHJWOXNHTHU5VmRPd1prdzc2anlOeGwzZVpQSk9neittN0M2aTNaQ3ViVU84N1JhN2R1Z2w4N1R0TE5LZFdnQm9IY1BSRjFqOGRjU2ltbm85dVFsd1ZDNS9vN2VhbzVzZnhibEtUMjdOSUxUS1UxeDVQM1dLeFUwRjJ3WlI1YW95UU5oRUk0T1NMTGQ0U0RxeXoxeWtYZng1bXYxMSsyVmF2Mk0xenZXTW1rdVdTU21mU2hPNXppbjVTOVMxRmN0eDdOMEZoSkdiczdVa1FKaURKa1dMNWxmcGFzQ05aMGtiSjRGY0RxT1JmQkcyYWR5THdyVnp3L0VneFFIT1hxTFBSSnBTMnorSkk3OS9ZVzBOZHRybmFvSDFFNjd5MnZhZGJsY2tjUmsrYTFCSU4xeG5qeUNUNEs5VC9xUUU3U1VvRFFSNnhqT0hFMWpVQUtFK2Y0SGlzSEwyTiswSUJGYlNsYWszKzlBQ21NY2JneDdsaS9ENk50UDh0K1Z5QmNWMkh5U0xTN01CT3piS3BwZjRqOVY0QlRFM1FBUmhSeEVCVkMyTy9SWGs4ZWttUzBkUHRTS3dtc0ZLdjhMVWJLaUx6cDRtU0YzWURFNHNtQUsxK0U4c2hrS2tqanJhTU1FaXJLUXFERVF3V2JVMDJGSW5TTEI0eW02M01VUW03Z1d0bFIzeHYxOTBkeTMvYW41MXVwZGp0eXJkWXppclhjK1NadG1Nbmhaa21PQnFwQ1lSbmZzcSsvVlpWU3I5ZTVQQitqZ3lkUzU5NTdEbXQyWDZLaG8zMklLa0tPb0o3UTVrWS9ZTHVyYms1LzNNc0Y2Wm1lNGhLRit6YVNHeE1nUkJoNFFEZEFVMlg5V1Z4eUVORXVyK2RWcWErdTFxdGQ0UFFXdVk1MGhleXRNbHZBUzJHOUpQdGo5cFBMQTZHSllscTMyOG8wMWtlaFJXWU1RbVdPV0svcGpoZmJRaVdrMno3d1RsazR4bjNPVjFCZm0xbE81c1VSZFlyaThzNWNOOGVnZ2VENG55eUJ1czM3cU9JcVRJbWZqTUI3VWcrQjc5V1JDSVdPMk9kaDVoYXM5K0pDcVR3ZmZ1c20xbnlhT1lhbkp2WVhTY3NsbHdSNHFId0E3ZXB1YWF3NHRISHhXSkFXa0lIQm9mdjk5UjFCRGNSb3gvRi92anBrQ1hmOGdHTm9paDJ6dklsUDh0TzJNdGxsYUZDT1FNaXpKUENsN0pmZG9mSVpxM1hmZG5pSHBTRjlHaC9CeDJteVRjUmpuZU4ydldub1VFZU03c2IzQTUwaGVCTWxXNStXQ1B0VUd1aVJjR3hBc0NXMHk3eEY4eWVCeWNKZ205c3NCeWxuV1ZLZlVjN2dVOExTb1dXaTFqd0tVdGhjL2JLSVlsUlc2U21PZ1hyWjVNM3dFZERjY3dNS3pDZkxTcnY0MkJGcTc0Z1p5N2J6aStZajEzaEV0QWJoQlFJUDNwc0NBV2F0ckhLTXpXTzJ3NWt0cEViUjZYSzZsNEdpUjRNYzk1NnBpUUViTmY0ZlNsc045dzlFQXBGSGFQd3V5eHNMUUhrd05BdkMycnNkVGVZV0h1NEQrYkk3ZHhRY2VjcC9iQVpsMHhQd1VsYVVjUU5OaFZOMXhOMkZmeWZWdUFNTjRBSVMzTXZ5b3o2dmc2MVYvYnF1alVlVlVhbTZBNko4dTZGU2FXMUY2YVFvNWdlZlZwZTNRbzUyM1NDbG1ObVViQms5QWlObmtUdm8rWXczMDh2WmlXN2t5ZDdDcFErQ1U5RnBhQ3BzOW9XMG1abGdXTUFrN3VSS3ZQNlo1NFFZeEs5YmkrUno0SCtrZkZvOC9Dc2M3TGdkSWNSUjdiSUZ3U2xueUZFazE2MEdoNC9nZVdtcEt5RXVKbjVNNCtkVzJ2ZUdhZFBIWUxKZWhOdmF1R0I0Z1RLWmRPUWFERU95WjVjOVRjTTAzT1UvOVAxdVV5SnBrVWpMaDNpMGxabE1aemRVVlNaQjFQOVkyUUl4UU1yNGowMHRjdEJxMHliWSswSEg1YmtQSTRQYS9BcXZDa1hkY1RtSTg3VkhFTW1xRWoxQXhhNytiSVRRbnZQVnNSVWE3VkgvZnhDcUZ6RlNDVFVKVUZmb1dqOVYyajdxTzN4YUl5N2Y4OGQ3QTRPSlJBTEU5ZWcwYy8vTTdBNVgvNStwNEZZU0NFRFhtV25oWVZzZjVhRWFPcHBrNnhUZXR2WmM3aElQTlN0R05HbXdHSjRVNUluVjBWcTRzK3VoeDJYTlBPaHk0ZXJQRXBqNWYvUmJpMS9ISnpsREJDaW9aLzZNays2dUNFaUxoQkd5QjFpbWoyYm5oVGRrQUZ5K3FDRnlDTmpJcXBOa3RFeUQrVXkyZENveG1za0Z2dGozZmVpNmpLamNqa0JleVBGWUlmM0dFMitQOG9PempyVGwvbkcxaXcvMmZneDhEVVpEcllHbWpmZTlwaXZ1TWxGWmhYdlZJOHBxc1UxU0hiUWhJeEd0WlJubG5YOE0zUEhSSnVQZUJkWFV2MFo2eGwxOHBhbzM5R3h2OWhwZU90bWZ6OE9VVWZsWDRyOVprVG1sYVhQMnlVUHJ0dTdiY3d4SVIxNnNieUVVSm80eXlNZncwYnJsWXpoTkRLNiszNXY0V2cwa0dEdGRkL2tzOWVZRmlXcEpXeXByR1ltYnp6ZHlUbVkyMEtXWEU0WVMwUWUwZ0Y0NG1pYVNOeWNDZWhZdGFjbzkzR1FvTEJjMGl6SitqV0tIU1hEZXR0SWVFWXljd05WVEJhaE14NjE1MWRvRm9id1FndmlneG5CdmpkZXZTV2NHR2k3ajVPWW12NFFVRURSRG5jbDlMM2lIb0hPbzc2RU5WYmRxaW1BcXZRWHpvcHdHUnc1TGZ0MDlOT3dFYmFSMUZRbytnNllwWnJ3djF1RElKc0M2VjZGZTZhWnZ6ME1jZGhZQ0Q4c3h5US94b3JjNnljbUYrVHBvQVFVa0lwaXpOR1Y0eWl6QXZNdktiTFlBeVpDMmt0M29SQkVkdzYrSDIwalpiK01iU1lsMUtaK0o1M2FWU3lqUE1CNkZCTUNwRUNnTlFXb3dWSkVaZ1k3LzkvNUpzQ3JXS3VMZnlxWU0rOXhZa2poL1NyRCsrUWh2azFOejIzZGNiNmFVLzd4cTZxYWNyRjZwQmsvYk5vSXRqYlJud1RWdGFkaHhRc3YzdWJPQmtnZTFweTM4VzNvMGRZaTlJNDFxMnppazJTbkliTlA3alJZSklMUVZTdVMwMXdPSUVzM0Jralo1VExHeFZwR3Raa0Q5UGFMZDdiajlrbFNXVlByQ01DSDRQR1RtR210N3kxS0oyV2RxQkdhdmVRRVhFNjZ2T0N0QXlXZVZtRkUzcU9DdzdITnhhNDg0VERhZDJ1Vzd2eWVsWWc4cDVjMmRTVzdzMHBpYVVVMThGalA2Q2NsUHdWM28rSEcva3htMUJJbUU2T2loQVdVVFZHRXBGVzZuL1FiSDRBN1J4Qlk0RGxKN1MraHBMakpnQjV2NkVvMzlnMFhWenJzcU9Oc1RhcThEU21kRVg3cHhidzhIVStkdk9mUERvbDdKU3ZkM0hPK3ZpT1B6QjZZM2tBeDBTQXVWOGJOeGFSS1ErNHBESjdubzhOS0I5VCtINmk5UWpPUEZtY081ZmZGS2hRUXR4SDIyekxXTHFWa01mbXZLL2RzblNOc3RqMnltbXplZ1NvWWpWdWJZSW9SSHFidmxHelNac0VIRnFkbm1HYkwvQy92dEduM3E0TzNYOVhEL25FWXBjeUEyNHNocTFrQzRzWDh5ZW55dEE0aWlmRHRwN2Y0a0Vzem8xay9KTDNDS3BnQWhwSGVNVVNibmU0YnlkTHhBZGx6UTZ1bmRLYmtTSjEwR3BEdHdXV1NvQndWOEVUdERSaS93a3BGSzRyMW5pNHFXREEyUkE5UlVUbDhqbkFrTnZqTy9WaTYwd2NxcTUyRkUxdlFtWFVOd2VpMVpITWZNdUw4TjFacGZDY09wQ0d5M3M1b20vSGVsMmo5bGlyV0tHRmg2bEZXdVBCeVNzS1lEdHZVeENkOGE1QVk2T0NRaFB1cTNDV2k3SmR3dDBvdC9WWFR5WE54QnEwS092ZG12dm5SWWVzS2w1a2hYQ3RlUDlBRkxaNndKT0tydjVsKzJ3SUpPcVBGY2hFekFVUlcyNUg4a1dmU3RKanpFV09XTlJDVGUwRXpNMHBxSUZkbW15UmpRSHR4YUVvQzZtb2twQ0t6Q3pQRDlBazRkbVZNQmt0TS9hUENrcmJpNDJJVjZHUVRSWWtIOUNxblFKbWtSVkJnNEF6NWdCR0JEOUIwNGJKSmtjL3JsRDdMVTVjbXpsVXpnTDh0Uk5vZUlPZ1k0T2NZTEp0TUlzZ3E3b0pDR1JRT0hSOTk5RWVLYldXZVJ4cXcwNGdLS0laNU40Nmt4NFlUc2xaZnVsdXN6TGZURkVoM2pEZS9xeHhPazdvcjJTYTlqVEV1aEpZZ1IyVkdOWmNnMjR2RjhyRFVxZEgyWGZyWGdrbENoVG1VekdBQVdRU1BOZjJHUE1SQ3dNMUZGeDJQRHFHT1A5K0NISkQ5dEIxM0NUTXlRNU5CYUlybXVVREFaRVo4RER2ZDhGbyttTUlObFZDeFViMXRKRVRrcGl5R25hTmpwZ2FjREZ2RjZVSjhjaXljT3BrSnZoRVA2b1dRUU1qYmVab3daa25jenBrL3hCOW9kTXdsdVdRNEdxSjN1NEdPeUJvMnA4M0xrYTBQMFliOXVHUFEwQlU3RVlGRzNoRFlQVThEc2xydkI3SUt6VERmN3ZtSUpJbWYwdWtIRURGeVovSXZUVmkrZXIxWnFCUXZxSDh1ZnEzTUNnaVQ1dWVsaTdzeDRqdVBtZzFiNHJITlQ1dk9td1BlL0pTbXRkZVNEWm5kK0ttT3BNSWxNTHl0OFlTemQ0UW1nQTJNZTVYRVJWeTVBNFRsazVZcFpLeHp0OTRxRDFRTGRMakNzL1B4RU5ZUWtPSFFCNVkvanVSc05rR25rQ0pUTDRtYmM1Nk5VUE42ZUhrR003STc3eW9GMndKSnR0UTNmdXZZdmliUHVDbGJuQnBJUGVYNmJHQldSd1JWWHdvWTFwMXU1TEk5cE1kSDNsZUZMeEFzZzlVTWNkdEJjVm15ZTlNT014Q2c5Wk5aRGFaTTQ2dVZFK2d3VU9WZXhuRm9VcG9Ya01JNklJaXpWTUZ0RmRJaDY5Q090MlZ4SnpBejZHcFZvYkowWVFSbkZVTlpOcHRtdnZoVXVuNFVrV0VYWkxzSjdFZFV3WVdGMHpHL3dQWkkzSHppaXhqODZkbTBnV2I2ZGdwaWpLaFozT0xTY0lSNmRvYS9Pbm03b0NQUHlpejE5UzFLNkthSlNGNjBLbTlTcm9aelJkNmh5ZzN3M0xlZUp2V1VBS0Jmd1IxZnZIUlVyZW1laU42b3lSbVo2WGxPZSt0YVQ5cS9JSlNhQnZhRGFMaS91RWFXaUxWNHJGTzJlMi9TSlJpTlM0SWx1ZFdZTVBsd0lpVytWZ082R1Y4TXFacjZKZC9NdHYzdnpYa1VSWFZVakRFdkhoa1JMSGIyYlJFWWU2SWJveWVXcVJ2Ui9mMitsa2k0ZExRR1pWTVhobEc4c3grNTN6N2t6U1ZaUmxtditIalMrNEswZ3JWcnBKOENGTkNGWnVlYVV6RnJoSElKWUZxMVpLeFQwekwxZjAyMmZxTW80azlweEk2ZFk5U1BlcUhYZnd4SEZRL1lKaTYySE9Rd1hlVmE0ejdUUVdFeHVIREhtYlErNEdid2kzaUZwVUpweEVYUmdqSkhwM3J3UmliWDhtaEY3QVFMVmJCZ2ZaVFNkY3FxMlJDSUpZWFZnTEJxRFI1bnJkajliMmt3WlRSaDdtRHdKZklOT1JPTGo1bFpJQVFxajRNdVlQanJJRTRxazdVQmNBbkNXWHRuTEI4bnVaZTNDenpwMG1HYThxOHBuMXhGOHdHcXJNYmxwb3lnM21NMGdRZFo0TlM3d0cyMVNMU3NoK0hGNHpTS3dXTjNHVFZHR0ZEUVZBdVZ1OFpMVmgzZnNNcnBNcy9aMXR6T3VPMUphNm1XNWxpNGxBSjFFT0hqNzZYa1dzSWFvTHFuQk16V093R05tMzdaVHZZRjQzeVYrNm5MOHdtMjNGclNNNjhsQWFSS1RDa1VnUDd4RmVQb3NGYy95dnZ6Nldra2JUU3EycXZ0WCt0MmJ2dGhnQ0JwR0J1NndmUWZCc0Q2QXA1MDRnTDRPcnJLNGM5RDRML09sanQrV2trZ1UrWFdldHZsbmt5eFBnL21UVkZtck1CbUtmUERKTGZuMXRBaG1RMzYzNGNocUNtajJWUDZ3cmdWaWVpRnVUNGhHS2Q4MldKTHFJVk9zMjdLNFJsWk5URnNvdFZseEVrQVhNbnpzcE1LZloraFgvSnBoZy9icE4xemsrNFMzQWVXUkJoanVMR1gydzA2OGdJdDMveVorRmQxYlJaM2M1VjVlS29PdlpZNFlXaGRRaEhoNXhydDk5VWJiM2ZRWm5MUkpuVCtSSGNGSW1mZTA5VlVCSDBQT21BelFYK1NFUzUrVWxxM1BGVVI2WlVJUkM2MFp6enByQlRZQmZNVVNzQWtDK2hPNWhxVllZQ0VMeWpnZUhDbWRIWXh1azhHbmIxT0dGSHBFMWtuVWVWNjlUOUExd1RnZ3h0OWVWOWZVcER5WmlQaVJNcjNERXAxZFhjVDJsVlJRWlFUMEJMUVJPUUkvVnNOaXZqcUlDdytKM21aaW5MYUlieXNvcUpCM1RZTE9FbHlrNWN3emJLQnZqYU1aTUdBYnIvTUdEeEg5N1NjNTZTbnZtUDlHZ1BVRjdMQTVZWXc1SUVVT1I1SmM5ZTdMTURsMjRTcGNwUURXcjhDdGRTbS9KRFJLNk5OcmhVV0FxRzFMQkF0SXlnOVdxRWZOTW55RG9aOWpWR05ZWjFmK3VBMVV2WDA5MU8xMW1ha256YitvNDR1cCtER2JiVFhoczlqczlzT2JwNEc5bE9rWHZ2bEZBS1lzNTF4MTFFbHhVVVNZS2ovek42eXZMY2JXS3JpTW9LMUs1eUVYTVJqN3hJQXYwY1B0eGJSL2RJVnRnRWhEcDY0K1VER2pseWZlYzFpTzhVNUhyaTQyNU5kc2RaaXZkRjhzdDJBMVRJMDFJQ201ZmtFZW1oZmRZemR0QTNqclIreGt0ZGFxbTZ5a2FsVU5oMVQ4U3ZUVURDRWFOUk1uV3FzK3licXlsYVVEcWxrSFJnOFVyNmsyRlJSV05LZWcvVmpyR3dLbzVKQnBNb0Y4cmF4aFU3U1hSSHFaTVRyTFdVR2RoNGdQaVZtQ2xxdGhhaUxKb05tbTdnM25wOThhZm0vTFpMNFFkL3JxL0orbkt3OFM5d20zREN0cERxd2szVlRWajVHdEs0MU5QWFRWVTJ2UHNhelVQdUVlU1M5UkVRbWh5Ny93MEI3d1lwRGNmZkt1QnFIc1I0dlhncUE1RUxTM2drTEIyNnBPY3hweHpEQkZONTVDZHp1WUwrS2tCQUY4NjQ4M0kvaWQ1RWJUYjdWUzlkaHVTRi9MOUY0Nm5GVVNzUlgrcnZMMnBqZXFXc1JrODhuZVVpSmlzL015MloxYnZmRkliOWVUeWVONEU0L1FUNnp5c2xVWUpPYmU0U2lRaWV1ZHpFNVlGa2EvWkJmMysyUnlpQXlYN3UwUVJDdytYNSt5OFZlWGxuZ2lnSUN6ZEE4L3d0KzBTK0kvaUVVTG9wNXlPeitJNnlPQzdjUEVoR0NSZ0s2RHhQbEUrYkl4aEFJcGVCV3RMRTFLZElHaEQ1ckxRQ3diQ0x4UVYrbFozc0hSVkpQcmF5SURQRGVXZzgzUURmaE5uMmgxMkpCL0dWS1NpY2xCd0dqa1J2S2ZvYXRraVZyQzFMN2xEdFZ5WjJFYnhsdGlmTytXV0E1SCt0T3RQeHQ0dll1ajZUVEtZL05pZ3QvTk5kaG9nbmtOcm84SGxaYjJtRmF4MllSNmYyNUxES2svY3pQdldTaXN3em1jV0hjU3A2enJsN0pXTzNwUVE4VEVhUUN0bUpVTWNiN3hjMmU3dVgrNlFUUmVOaUo0a21ISzgxNDdMMUFFNktraUk0aHBaNWVZclJoWjJxeGxqUXIzWW1nNFEvODhOdUEyNVpqM0h5MXFBeWxaSDgzVzcyMUZPbnhUZXhmTWcvdUN0VXozZ0c3ak1Fc0xCZ3N2MG1yK0hCSXVqSVpPalhpaTRkN1BKcDJhYUdsSm10eU1GQlg2dGpoWHA0SEFjWXArUUFrM0o2MEQreTFBNk9ZUXFkMElibTdlL3FZNG5pYUZmeUdrSjNyMmJ5WjRwRzRDK0ZLS3lKTmVhREJ4clJsSlBUSlFhQm1HcGt6MXJUbXQ0cmNvSCtHckoycG14Z1JrKytvOWxvQ2hFTVdTaHc5MXNvNmNRRmw2RHJZbUNjUFVNZml3Um9IblhpaUNmWDduSEZML29vL2FkSFgrNnp4dHBhMFQ5UVVpYktEeUdPRmlyaEFtc0ZDWnNNbXY5blhrRlZlOU0xVFk2NmMybE1CWW9EUFVTaGIxcTU4Q0ZVZ3FDZW10VDJFbmdBS3Q5MHVqUDlYQms4T3ZPbSttYndQSWNyTXVxWEhpUGxKNmNoRWFCTXFUaEJnN3ArS21pQzE0dFVzNUIybmlwVzMxTE1JbTVkTFN0ZVQwdW1RSHczNytuSmxRWnFvSWJUTnZpNVpoSk9HSjVOU3Y4YXBjeVBjTDlML3I0TU5DeFlHQnArUlNOalpnR0pkWWR2OTFNY1VIUTFLRUdBNFdmTEtKN2l4MUhObXJ6VkhINkEvMFFXcTQwSGZjYm5BZm1NWVIrcGxuZ2Vnb0wrOXNkdk54VnRzMEZjditaRkViWmdDM1VXdWV1blVPb2d6NHBPQURjeXZIN3dPK0hrQzErVTRVK2gyekd3T3N6QXl6OXFKb2wxZUx5UEVRVFFFdUo0alIxUWltWEV0ek12Y3RKUzB2ZWtMU0xtTFBpcDJkZTRiOHZrQUhlYUFjaFFSbVVia24rRTFjdGI0cm13cVlkZ3p1RDZHRVZocXY4eExBNXB6UTIzQVJSMlZoUzEvdFBzQ3VXdnVCQ1BWMVJrdngyR0FkN0ZuT3hLcW9VaXBJRC9CcjJtVmdqQStTU1FISjFVQyt5UVFwQzdrRkpoeDFwbW51YU9UN3JBU1NVdGE4MDZFOEl2a3ZjWlMzemFRMDRqRG5nWEg2S1M1MmtObFo3OW9PNElKVEdUbkE5aVZjODQ2VVJtYXN5SytNcWVYVGowZHFsaHhyQTRyREZjTHVtM05HZUZsNTN2am9ZOGxzb0Z6ZC82aTl2S1ZDU3hJSS9QTmhqYWU1NXBHMW15RlNqVXF0enhSMEdIbVBlRGZuRFFON25ERlpUQStPeks1V2dkakd4akVCWjAvTktlTG1CNW1WNklFOU9neGprWSswODRKZVRTYVU0Wkh1akZRRTdNWFI5L1IvY0dIMHozajBNMTVHQWw0YWNSMHpuZmd6VEFtOGNlL3N0eUd3b0dXOGpob1lYMzVndEYybEpjdk44b2Z0eHlsK2pXV2JlSHNxRjBrL1JNU3RhNEl5aWp3MWJFZk0xNVNtQ2ZPTGxsN1pLTVNhTExtTWVXSGpjZzlkcDRPVVd3bDVmclB3ek43OW52TEVsTXgveitYTWRtWVVyeUhRWU94WFBpZTJ0VU9CSjN1SWtFMlNaOCt1R2Y1YXd6c1hjSWdXaHkxWTN5cFlVWUV3OExPcXB0T2ltcE1mb3REeHBYMHNhWFMyVjBFVWc5WEl3RGJ5VnQ1ejZsdDR6MzE5ZHRIbTJybjRrWEhjQXhqZUFaMHE2aEpDbm5nNkIya21KdE5LNlRSampuYnNCK2x6cy9iV0dxV1F4a0RJeTBaYm5zSnd2cFVoSUVlbmpVbmxZUURVZncyUmpGRVBYNEtGSXRZaGRCa0ZSc3JIYnBMcGtFb0k3eC9LbktzcjVqQlpQMk9qQjNBbDh3RE1vUU5XV09OR01jRE5wNFNXNWpQUkxoMnNFUlE3cGZzb05xNm0zaW1ZMHVkVVNuWWdIWGlkdWVpRlM3NGdsVytGNkJMV0hOZFZaZUN1OGJvM0RocDhrYXVwOXJZV1d2WkNyTEV6aUlydmgzOXE4VTFhQjBEUWdNWTBQZlNSUHZsS0I3eFptVzFWTkhpWk5ZWDFxSGFvR0M4ZGtPcGFRQXo1RnkyVVRXQU1Uc20vemxZNlljTEU1eC9WbWI5bGdCMEFleGwxL1hNZm1meXRPL1ZGNjAyc1U2NmEyelNuRUtrK3JObk10ZzhYeVFzaFAreFJKNk8vQWJmNnNZUUVUbWRmODlwRG1ZM0VmdUhUVnBHKzAvMkw4dWhkVzg4bXFIZmovQW9TY1pqa1NRRHQzSnZTMWlIQjBzNGZrNWl0RnIxbDFKQXlEZ1Q1ZHNxQ0x6MFh6MDhBRitSTno4aTJhNVQyZzQ4cWdna3I2bkt3bDhhREZOeEhiQndMRW9RZDgxcFlSRDlqYmJnMk5KVU8vc2ZqdTR1Tk9pc0JJTWdLTHpXeDNHejVDY3JHNjZuN0FLWXErKzF5WmhHQkc0V1d6NER2dHdYaU95QVFkKys0VVgzRS8zVEEyazkweVpsdG1ZdFV6ZjZ4YmRoWGtEeTRZR3VZV0Y1VjV5VlkzNWhmMUlhcmt4OTYvdGZqN0RETytlYlVZYzIyUzFNYjNBWTNDTFdSeURyaUdjQXpIWllPaWxFVkszQit2VXBicnVqUEJCWmhBS1JXWXhTdWFFRklpeG1HVnZ0WE42WWtnRkNCRVRMUnVlL2s0SDk1OEN4aU9NZnd4UTBlV2FIQUx4bUNUa1BwcUlBNzJDK2RZM0gwVkZGVW9FaW02M2c1blJ1bldGdDREMGNka054VWZubzdmbDNlQW5SY0hIQk5NVm52UWFibUFkYldxemptaUlBY2YxRzR2d2RGTUtHUXNQOVhVUFVrbUJBTGxZSmc5SC9IMlNGdVZFMjlDZmVWazA3OG41bXhvMGJkZmFyOG5vRWx2YlA3SzBnSjdGNzNMOUVDQmxCTUZIaG5haUJFd3h6M1lqWUtkODhQYWwzQVRoZVRRVG1aUCtnQmxtNmJGVE5TaHZtY1VwK283SXNmZElWYXYzc1RudjYydmZpWHpqSUJuUkJSanJsZzRsVlVWbTdNdlJDVXFvQmFtUjFtUEVFemdXd2hkVnNhNlFUWDdpek5xL3BUMytkeVpWR21BUEdQbDlJNStwVGZOQUo5eDRicFErNEdDZWpFZERNMTd3WURqQlAwWUxxckpSejltU2x6Y3poQm1wS0xMUE1JenpLQ0tPMFFWQ0JXSUcxRGVpTldhc1RFUTFDYlRVTk1IWUhVZ0Zzc0JFdEh3clVoSjNEaCtqT3V2UTFLV3c0QlJ0ZlY4cmM4SEJMak0zMXRMU3RNYlhNL21TRDNsbmQ3RDhSaFBQbFRQOUtWVXQ2d0piM3VUWkJKckZ0ZFBJd1VRd3hhSlFDUGdqcEpHRXc2RW9sWmY3eW0yRk5NdEZFMnR0UE84RzF0cUdabnpZL0RoZC9GQUNrT1M3N3VUOThlQ0VFMGEvTFN1aTZMd29WdUNtSFlHc3BLTXNEeURwOTZuTnVERU1GbTJXU2hrbEp4dnEweDZVa0VPcTFPZGErRzlJSXJYKzY5VEtaajlkTmxVWHM4OElsS0xCRWlmeTdreU5kRXRxSUpqOHZ1dEJpN0hKNFpNdDdraW1qWHpZeGpMSkd3ay9YVTUvTHd2Tk8wYlNQNmtFSTVXL0JvU2NJSWp2cForZ3k5MTJDUlRVdmJpSTlsc1dpVHoweFAyc05VelV3MjNPc1Y0WEFJVnBQNXRxdnY5Uk1vRWdZUDhKYVNLeDRPa1d3UkpSd3dYbEpTVXRBYWhycmtGelZTTGlPUmh0emMvZEpUVE5pUk8zMjIyLzVKdkFHeS9sbzAwZlBXeVBNOVFyQ2VnbXhwVVRyWFlmWE9LY1FTajM1TzRUajdYaHVQMy9hOHQ3Skg3OXZXK3JyWnJtN01ndGlKQXkyQ2p6cU1XZ3VTalNVVythdDhMRzZPTzBIZ20xL3hmZ0VBOHk0SS9wS0FGSFh0bXlwYkZpVkFIdDlSeW8rZFJ0ZnJjaWc1cUg4OGxzcllBRGJOeW51N3ZwMzQ0dTdITGx6bWROVGdaVkJ5SVhwdFJIS1pmcjVEblhEcFV3NkNOYmpMRXBrc0o5dWs3R2ZtVi9PUmxiRitvUGw2dDdXSjA0ZnZNZHFCUkFqaEdHZmNoeXJZdW9TYUdiTXZacjE1aWFTNGxSdndrekJtcUZ5Sk13REF1WDVzUmZyRWt3MmFNbGlGdUJUYjFhR1lqeHM3aWhHajdZbGgwdngxY2J1ckg0NXBrWFQyaWxDM1JKekovMkhQYTlldWtNQ3dkSjhpckxJbzhlQVRjWXlwVEI5S1dpVGF5VmcveVROcDBia0JOSmhBS3RsWWFSTFlBWGNZbEJoMEFVNHUxMjJua0JSTkUrSU9pTThqR3V0N3doUFpKclF1NmNwYTV0eW5LN3JPVFRJNldzRUJVaHFMOVJ1cHJBbEdhQm1aTmtBRGliUkRhUjZaazR4YzA0b3RNdmYvNnc3cnc2eDRaUDNiVHVSQW1kZm4yN0VlemI3S2Z0SnRlQkNWRi9xcGRHS1BHNGpkYS9CNnJaMlZBZjlPSFR5QXBEb3UzcFM5VWNiZXVkZjFUc1diZFlzaGhsa2pOSWVHekxXK1RxR2hmaEtNSWdmSjNqdDk4VE5UbUFaTDFrZ01tbWx5RWdXUDZ0SFJNOHBXMFd3Q3FMNnErSklFalVZckdJbDFBbVEwL1NjV2NiM0pOVU9nci9JYU9waW5RaHJTMVU3N3pkL3RiWXErYVRsTkZSVFhNNEduQURqbkVLUmhaSEFEZ3FRR3BubTh3NjJjb0o1bENCSmZlQ01mZjJodXh5UGtPN0NRVnZSVmJYWTNoZ0s0QlpxVVV4V0RNMmNYRXdONjhQc1hGSFArNktpb0lieHBudzR0ZWkwMktqb3VpdVVYc2c2T0lNRXlkTzVndlpoSitUV3RhUFpnOXJhUFgvQnBCMEhjVVMxa2E5YUd5MXVSK0Y2Qmc5VkJDS0RUcmJLMFcwenNCWlZkSmVKNUhQYUtzdTI5ZGpkSGtqNkZzTnpsSVM2UUF1Tjk4dTI3UnlEMm1EYkg2dmo0V1VlZ3U0SjJZREkyNWVvK09DNUJ5VHB4dytHeVJvSHFnNnpjTzlsZUNUK2pWeHdnV1lBS3hQSG56OFRUK2FiU1IwaDlETTZWbFJPUllZSWNVSXZuMnRTdkR0c0NNb1Y5a0Z4akl4RmRvdVNHMjVBQ3NLMUxZMElVYldiSlFCWjRUR2lnV2FjUnlEWTk4WHdRSjUxL2tUVDZvRnJzK2RYZ3pXRTRkWjl1NGM4d0pXRm12dFg5NzFnRkNtZGlWQ2ZUUDlYRDREb1ZsR09FTittcXUyV0l0Z1J3emFLUU42Q1ZqelI1RUxPZGhNTkxBaUFKV1NtbTFCTGlUakpqRUNyN0RHaEQ3cFN3Rko4NFlTelZwWnh6ZUxWOXd0bUh3ZDhBUzF2M1Z4bEtIVU1lWm1jQ2s5VWtIMXFQSS94ZS85cW4yd2R3ekZyY0QraWlGRFVHMGhyQkV2bVRYOWxldXhienZ1NHFEb3dCaFcyUG9QZks3L2ZIcUlzSWY4M3Nya1Jqbk1wVWxReHhaZzNXelkyZUFaTWdrRmMrZmZxbXFLVnpES0VGb09rNXNqN240Y3JUOFJaTzJWQnVnTm5DQml6L1JsZndGTTZJcG1lcDk3S1BOalFqSnYveDNpZDhlNkMrL3QvcUwrTzd5algyQUVjRlF1MVZpRmY3cXltWkh4TGJNdTJTSDFIZ0VtNm9jaE1NSWZERWdBcEd1OVVNUm1EdWxINCs4TXZwblpTS1VBc3Z3OWhHKytuSEVMMCs4RjRjZ3NnL1RqbkxJdXVWRnhxOGJVek42eDNvQitmUzRnd2hva21uM2lJdEFhdFBiRlU2dTBBQjhNVmV0SjV0QkxaaHRQL0szemlnWlJEY0ZsTXNVVFIxUlFZZExhQXBvazl4VmtZTUorQ05Kak5IMW1wdktUT2s3eXNjbTJxcmIvUlJ1bkx2OHl6TGRWRFRQbTY5ZEdJZmlWSFZFSWZGaTJLMGJkRnZkeTF6R3BsN1VNM0Y3a2RoY0tZUFNjRVZXSG95Wk54c2N4V1cydHB2am0vekgwTmhtYS9MZFRSY1hMVWpTTk5DWFRaNnNSbldwZjVaKzBibi9aeEVaS1hhUzEyeithb0d4anI2N3J1SmpjWXkrZ3E3Nk1PUHBVM2xlWXB6Rmo1b0ZCWXFaSjErZjJPbGNDS3JyZjJja0duZGF2dml0QnZFTmQ5YllqN2NuUmRlOVpiSTNWWk5oN2RVOTMxVWlDYUtTVmd4dndrcWpoMUtqSnBDYkJWc2tMSU5qdEVNQ3ZubkRVNmlsdjlleC9TRTFTOERHOWl4azNPbVJXaXhmUUpVdDRteDRhdjlpYlVUMGFnZklPNUZ2ZTNhNXVMNU9helZsc3NGZUdXRWJmdTVLSEVLRXpJQ3M2Nk4yRzBHU29pSStIV0NQeEFUcWZ0VVd2aG1hM1VMVHAzMDI4SmsrbFdqYXpXbEJOUmJXSTJmVU9sY3g1eFg2M2JxaEpZd3J4ZjZKN2lhQlo5L3E5WXBINEl1VVgybXExeE10dy9lN251Z3QyZ1JCd2dlR0JHSjVDWHRSTDRlcDNFTkw5MnpvRWZuVC9NVnRuZUtyMGRza3JnbXNuQThLZEUvMUJVNlpOeVVhdUJJMUs1QlhTUjh4L1BXWWRhMWFBSGdwMXJveDF2OE5wSkRldlBKVXJHRGtqQmt6STVpaHJPVUg3Uk1YeG1qbGR5SW5YcmhDS284TXdwdHE0NFhUVnhzdC9aRHVWYlc1eCtFdVdLeVA5aFhkRmNZVkk1eHZuUk1OeG5UTG12Y3hpNkxaVTM1VC9Rd3pmaVZWd0tJOVVreUswZWpHYVkzcjFiR2ZiNG8xUW1XMUp4Wk4xL29VeXh6SkRDQUJxVy9maFVxMG1XNWIyc2JJZFBQVy94K0hRTVNzN3FLYlZkc3FZYUJkRjVFTzUvUXYrR2VTZ1J5ZGlLOVZwdStGV3VCaDcrNnZqdWFMQnozdUhFSDlwOEpKZkVMYVAzNWRXdHNlTVBCejk2RW5hM2lQcXQvaDdpQnJsY1BmZDV2bHZIYVErYXVNdmcxYmhrd0R2YU9nZEcxdGxpMUFBTmM4cUZGTFVpdXpTeDZrc2pvUkdqWkhiQkN4b1RoK2l3RHRsNkt5QzFDMFU3Vm11cnJicHdMT0JrbnhUQmFiVWdQRUwvZkRNbmZYMDBDekxobUtjMjEwR2p1NUthaVdKcnZuSnBpbk44VUlZUmVkN00vZW5Pb3U0Q1Uvb2J4a0llOStWWHM5SjI0bCs5NGQ0VGJNUzFaNmY3NlFBZ1hKL2QzQkIrR1BMSThZeXh5enVGTEdYbGowWGRqZkd4dzdQa2NWaHlzenVwR01TMkkzaGRmMGpCTTAzMzFkYTJTSGtZeUZsTFE2N2VqU0F6N3NCMXhHQ21RZ0tod1lhSXEvckZiUThKWm9nR2tIZHN3bTR0dTM3UEFtT2ovRjI0WDZTalZBK0ZDM3BLa05Tczc0cG4xNUMyWFh3MHBmNThrSVNrOHR2azhIMytiYmtoNXZyWnE2NWlPUG8yS3lKYmg2VGNucjR2MFBrY2pqYzUxeklaTTFOVmRHd3oyUlc5M3VKdXc0M1RDMlhxOXJCTU1NdUhVSlVFNENFNHFjWXdlcTJUWXdCU1ZOVHNzMnhOdHlHTVAyVXpGcHZVY0xQSUM3ZCt3OGR1MDFPcTVKNjEzem9nSEFWSlB5Y3ZPR0lqYnNraUh4RDJoL2FBNUhoQis0M3lFM3pZbm16SDY5ZEJldi9FLzVMRUQ4dWVCcFpsVmVtZmo2Q0NWZU1qT1lpUUVyVE1DSkZqRzdYSXZTaHRhdDV5czVFV0wzTjlsQlFyOTlKd3B0R0JLUzc0Q3Zubng5ODFrMHBDY2ZkdHNYL05xek11SThZZ0QwcmIzanhwa3JsRU5OTEc0bGNNeDdYSGVzSm4vTURhQXA2MG5jd0V3Tlp1a1AraUlJRjJxVjZXaHo5THA0RkE3RkkxOVhPZzk2Qjh5WTFGZFo5OVRRcndTUUF6V2RRY3dzcTE4ZzRhWVBJaVludEdyVWR0Y3ZZL3QzVzdPQnRNUUVYaWVnU0pFQVJsN0FZUnpPSTBrSEJrUzZLOGdyOVNhVHA0Y0ZOZllGM24vTEVYWVhUYno5QkZjTlFBMUdFTHdmQkQvUDFCOHVoWHNpVDNDellBN0xwNndwTFRtRHpXVmMycHZrdHJPUlZLTE4zYnlMYkR4MmlzVXQ1a3VoaDhwWFhDK2I3OWZkZitBcEI2VHZ4ZC9JRWw0TVY5WnRNSCtPNjNHTVpPLzg0eVY3WERDS3ZLdjZCZkRjRmZZQ2pFWS9mRlR4ems2a3JrazYwVXVZam5IZmNnK2Q1Z3VjeHVpY0NNODhyOVpOa0Y3NTU5TG5SejBzZ2NCRVVtcnh2ZHliaHRYbHJMb1VSN29pa2hPT0NoZHVHOUxaeG1rU01TR2paa2h2MXh6Q3c0ZVRmWXF1cWgzRUl4ZlF3VmZSN0JrK09WM3pLMVYvSXgwZW5SVUtJYVBHZkpPNWVKRUpxM1VsZ0kvUi9QdVFoaCs0MzlOcmM5bHZrWDJuWWtFRytleTdTTTdhNFA0MjJhVkdyVWo5Yk9YVWkvUG5QMitxNGgyL2ZYR1c2M3MraVk2a3BzTjJWVXZKbjVKU1g1OU9FdHFmNlNpd29nLzhTbjVHd2hWTllLQWM1dEJneStSQkcrREt4TExZcHIyV0RFQnl5NG1DTjlZSWpYM3JEV3JXWDZFSU1NS1FFS09wdUpneDc5K2d0cjhkZjRtV3ArTFFtRVVXeUQ2aTdHNVJtT001Q3ZJdFcwT2h0K0JGQzBhVjhDR3ZCVjgwczd6MDF6cTlDMlordU1VeGlub2JDSnVpSUNQYVdtbWhqdGs2QUNlNVBkL3BxYloxVmRGU0hVNXFPV3QxSnJESFBvRjZTcG9leXdUTUg4UmQxSGxNamFLV1FwZkJnS0pBeFJ2TlpUanFTckMrbll4azVBME1FdXppVDROMTZFQ0Q2Qjdqd3FkQ3M2SkNva25YZVA1dzBUOXg2dml3a0JuK0lsQXUwNGg2dnl6NmhxOFNsWHNHWUdXT1o4aUtnOGh4Y2hzWmJFWUtHbDZZUlNWT1NFVE40TGg2Nm43Zmhka25pNkFmcmx4ZFVzMUIzOU9HMElDZ3BZdjljRUxGQkpFUVlzd0NxVzZ1TytNNGdrWk56SkJSdmltT1hQNnBNbVdCVTErMTJKc0cvdmUxOExxRjkvVmlrTCsrSzhnWlQ0U0gyQnZQL2JWc2ZCVzkrKzEyeERnNHhZdXJTYmlXQW1GMGVwTWZpZm1qNjNORW5tNE5CMVdzMTVXRWtyRjdOVCtTc2JZaWtkWGJKeXhmbmxRL1g4cnJKYlA5MEIxZlI1bVY1ZmdzMDNIN1BYZW9pQ0FuSXhkTFNxSU9TUUlZTW1zS3ZDazJ2eTBNSVVncXZvZDh2bHQ3M2I5TlMwcjdNT0FaS0p1MmpBNjdqQlZKVGljYlJGZTlVOHVKU05jaENKSU1MMm10SzgyM1RwSEh6MmdWQlJBWWRkN1oyNE9vWGdaWXRmcHF3ZG9TcVIwMWFYYlltMnY0cllCRmx1L2lEczg4cDBkdllUMHUyRWI2ZmhYTm1FL0xCcmtKcllFVFFTSTR4MlIyWXlRUWVzNWU0L2x4b0FFbEFpQmpETjFNU0NUeEtkVWg3b3lCaWdWZG1jdmtNTG1xa3B2NEFQZ3Y2TWZYWkR4dEZlWE9Bb1JhZ1NsR1dubnhPWDlqWUI2RE9LK0J2U0pSL3p0MTkyLzFmc0k4akY4dVhaTC9kOFVVam0zVkpnMzNlVDZ3dENTUE15Nm9LbWY2T0NuR2VmYityRzZqZ25ickIxVk5EbWNsMFF4R2xwVVBoTXZlMU4zY242NDVpMGUrRUtma3Y1blI0Vk11L0tYV3luSVVaS05GWDUzR2VyWmtsRXlURStLY3ZWdXpnVFhnNUNTdXY5UFBONFRTRXhNYWRaaU40alVTNTFsUlFxM25lcm52UzkzYnJ2YmtUTjliOUdEeFpSYVd6VUlFR2E3RkU1ZUM0U1F2c0lxMjcwTGQxY0oxT2VBa1I2UGZURWpqM0JPL0dzei91WXowdGF4YXdzbjlCcVROaHNLZDlZOU1JMHM1RVFmdDVESzlaY1N3TkNGYnlzaEs0UVRvN1hPTk9CeHhDem9DVFVEakRjNS9JSklDaVN4enVtQXdkOXBxeHVsRnJpL0tHZm9DT3lUb3NVT3YrclVPNXIvOU95aUd3Q2h5OENpMzVsNVNBS3UrS1h4ZXVQR0F5b0lrQ2tJVGpDZ292K2F5cS8yL3JZK3N4M0RzdGs1cXMwVGRHY2FUaWZOQWZEWUMxTnpkaGluekpLYW03RG51V28vYS82d0RXODhEM2V5NjV5N1BBaWQxLy9wbkJtaUZ5MFR2WCtTTUlsV01vTUVTUUV1ZmZtRGswNGFKWGJZYmNsWW9BZzFlNStUYXNEc2pzYS9EQTZaZlNyWExWQTc5NkIrOXF0aGVlMi9xbmdDQ3BYTS9yMC9KK3E1WFMvR3QwRmVEbzk3V1VsazE2YWFuK0gzQnY0WFY2RHk5cG9JLzFMT3hNUmFOVktNbzdNZ3p3UzgzVjlkT216M3I3N0JhZzVDOUR1bk8wUUd0dmlxNVE5WGc4amZ4TlJWYkl4RFRCNTcyT1dlRGErT1VTeFBoTTQ2ODJ3azFoaEM0TzRsODI4aUIxbmNWUzJaeHlVRXdYK2w0YnI3ZmtWVERoTVVrTVFubVVJdm9QQ3FRSU5xaVJPV3I4TEZsdUlLMjVaODBXeVVXaVRKblFTZHFNOFRIMCtHb2JoM2lLaDlMVXpJR3hWcmRQb1RkY09UVUJPSXpvS0dWRnptVHVsTjJ2aEw0WDY4YUZjSlFheU5jR0ZQaDY2WW5ncjRSNDRmd20yRUlVYzBzUTVjb05VaHBibWN0Sy9Vb2ZFWXdxL2lvMFhUdnkwSmd0dzYwYTJiUWRjZlVMUjhqZ1p2bWlmZEpkYTZYamhndFJ4aDFzUVM2SGwrNVRFWkt3M2NHV2luWHgyUG5rV2VhUHErSWRickR6dElzVmxQUlZSd2p6Q0taZ2J4cGdjY3pRbnFSTWlnc3ZoRlFtVW52ZG9mT1M3UThubzd6SFExV1RDNjVDQkFEUVE5VW41aTlkVUtwNjF6Qlc4OThuSUZPbG9MMXZ5UWxzU1NOTVpKM3Z3dUdmYU5jd2Z2cmI2ZTF5N3k0alNFSWhOajRTK2N2eXlvMTYya0JhY3FiTWVOQ1RydllxNWhwbml6eXkvR0tORGZHL1VBZWpHNVcvcVhMeDA5eDJsZE9HL3p0NllrVGtNay9iSGFXUmVIdTJzUTlCMm1ZbXhxeGhQOVZXK1NLZXIwU3BHSDFVazZQenQ2SXV4SGJTcWxra3A3ckI4dHduM21SWnkrc3lMLzhtcWpRWW5lMU5xN0ZrL251TStLRmhscDdKNk1nT2ticWVrQXl3YkxoK1F3bkNIa3REMWtIdUxRMXBMcDd5Qm50ZnBTU2Q4S1BPK0E3aUJhVWszV0JzV2UydmlCOHJ3NzlvdjdBTHkyR1YraUNWVE1SeGs2WklSTk1aTzBVZmx2SkdMdmhWcHViUGNXY29PTWF2bmxFM2s3SlNsYVpOMEZCak1Yb0xQaGtpNXF0ZU9xamxuWEFmOEt1VXhpMysvYnlkQ1JSNzIrZDUwQjFPYjd6eGZvcmx6aHdJVWsySjg3VlFPM2ExRk96YjJMSEFCR2JQb0ZaNTdzZS9CRTR1UmhGYUhMc0Y4Uy85L1ZNRUN3eGF1REdxR2NFcXBtcEx3NUdDbjE0bUUrUkRQRUk2V0lyYlNMcHcycmxRODFqeHJicVp0TXVoZk43VEhiZHAzSmt2dGplNTl6MXFKcFlHeG5CcDJiZGgweGwxc0FKUWt6RVRJRGh2TEsxN2UvNU9ySVVUV2htN3pYV3lHKzNGM2pYWkN2TElQWm5pamtQYkI0aXkzNVpuUHpvUHZ3aU1WcUMzWkFxcjNoWkYrMFl4TVJ0RDVzOXRqWXlvck40ZCt0Ylh0RGNvNnlKUEo4eTk2VVBmUk1wblpYTmwyVW11cHBiVU82cHhmRk55UnhhQ05VSGJFbVZUZ20vZkhLdlNMTW85cnhVdUYwTHJoU3pqbnAvQmVWS2FvZlpjNHB4MVJvamxYUDRyU0lBWURFQWZmalFZMkxGVkpwRzZHQkhrOUpzZUhZbXpOMTJWcFVEdEN3ZHZGVnRnUkxRWVNRZmdRV1hzWUtwNG5sMG1URTFTSHhvTzA4YTV2dGxlNXc1bjNzdTVtbGs0cU9WcU9TTk9NSGZETTh0dnVoREZETHMrOVcrZ1B3dGZXSmpCUWxwL3ZBblFDazBRcTBPLy9mVXZBY29YNUpDLzJFTS80VFZweTRLSUMzN2VIdDkvbkZVKzdpbExGdm5mQjYzNE94M3k5dnRmd0lPSERIRlFHSnpodUJwcVAwVENEZW42ZEo2MmFVSUJ4enhzOUtlckU1SWUxVVFQUEl4OThMMTFNRERoK3VNYzJhWWlvSjdEOGFiQzFSOE9HVTVYREhmd0QxNVlZamM3OE9Wc3IyVlZLUTlNTlRlVDZacGFsb3hXc3MvVHh0RnE1WDNhbkZ5dlRaa0NWL3RqbE1LdkYrQW9Lc21NWHV2aWY2MkFZbGxBUUpNbGdLMnVjd0d2SWNMUFBWcmxtaExtY1pOSmVQRmhHb0RGRGQ1Y0wwczhxall5dDFKZE1PRyt4dS8ybmdoaGlNWjlyUnpPN2trSyswWUdLQ0ZDRFkwNHVKN29lOWxvSE9RajAyNUk5N2dpQjMvTld1WElyRk81S09SMndsbWFIalpBREo4Zk9mdERGRUtiSmFPZFlyQ1Z4eCt3TjBmUU9qYTAzOEVzV2dIOW96d1VTUHRKZ1MvQXVNVmxvOGpCYmJaaFk0aUtScmxPL0Q1QzRoY0hMdk9CUExNK0tEQUxsUGQ3akZ3aDEyWWhBUi9OMWFVYXhTZkVOYUIzeXVWbG5BN1ZvbUpTZVBaUWtHS2syMW56TEFIdDFjTDFZQURFVG5hZm95ZllnL1YzOEhGWG10bFBKSFpjZ0Rkdi9tZ2pzM0l6N2w5cHBSQU10RUtXK3lsQmpSZmExMDV6U2d2aHZPVUdYOVozakxOcnF1WFhRTERGWG1CU2VUVCt6QVdRL2FsRVBMTldPU3ZWTDJPOE9FRm0ydTdxTGpRZ2ZLZE5ua1F1ejF3SVBxdit5MkRHVFB5eFpxOTlodUNaSGUzKzUySUYwVzJrU1E1bGtpZSs5MnlvandiVjBUVmZKczNIL1cyQ05OczJvaG81REVlUy93eFhiaTZiajBMYVVNa0w1SW4wZVFSUWkvVXkwYmE4WURqOW94SjI0N2RIOG9rN0ZqMHZvSE0ydVUxeHVoR1MyaHd2K21ycnJYNHJPa1VhcmFoWU5teHlleHNGc0xCenNPUktEM0phOElIdkxlTk1pdXl5SkVOUHVBSlVQWDZDeEIxQ0V6Vjl3Q2hwUVBINFpZaWZDRmhMRjFJUXQ4NlpQeDYyZkdpMUVkMHI3dDBuZnNWeUMxKzJ3bGVtUE0vYUlrNGdoamx0VEtPRkhmVkkybmNiU2RBUWVDMVRPOXZxNnBUUDZvSjR6WEJkS2picTRzczkzbzVRaXNQTDBaeTVDVnN4b3lNaUIzV0lRb29UUk1xckZRSTFoaXlIb3RzMkZ6eXk4NFk3V3dZTFg5ek1JVHJZbjdLTWpwQWk5QkNGYThkZFZhOE1WQnNtOEcxOVlBZmtlQ0o1RC9OUkNFOEFsRVhITWtNZWk5TVdEVTdZSWp0UnQ0Q0ZTYy9hTnhjRmpsYmh2K1pRaEZ0S2p6ZG9LK3ZDRjgybEM2NnNoeHBFK3R1VkoxWkhtUDUwN1pta01sQ0NhaUlQcU1DcWNJWlVXUnhnVkxxVi9CUktLdEc2Mnk0Y2tqdnBNNkRIWWF5eS9RNGJUbUpFOGFpQ0RCa3NHaXJ4QmJRSjJQZXRYR1ZTWTBaSnozWW5GWmhiYndDaW01eVMvdXJGcnFEYm51d0pDRWF1Yk13Zk8vWWc1VDNYYythN3d3S2RuZURjTEc3UWFTK0hCWlZ5ZExUN0pVY2JQUnF1ZnBQR2xKTER2czUrY1lzVVBDVDdBWUlaa21NTXNyYVB1aVFoMVBJVHlJd0JDNTVXQU5ZREI3anRxa2huWFVTWDUvc3Q4UU1pK3NJZmxEZkVtYjFpQWhXZ1RlNE8xckFQZ01CNFJtR1VtR3plVWhRVlVxZEl3RWRCdVUvekVSbWEyWk9KVmhQNWFjd3RvMUtwY0VweWdyOTFOeTgrOXhtUytHSElmWHEzWnBFQUwvdWtkUnYrS2YxSWdNcXdETzhpdXRHSnNvRXFNSHFOUXJHNThkeGlyRmRXN0h4dWcrL1BNVkpRb3NVbmh3YWdYVVJKZC84aTRFYk1xcDluWFBoZGJyZ1NOeUdycVErKzlpbXBzMXUvTGdqcDRSUVJlRXZacWFGWnczLzJJVkxuSW11V2x3azhWci9RKzNaaTdrbnJrMnZNaXg2Tk9CNjR1Y215QzJTTU51b0NmZmdUWXpTaGovRWNBVW1BTVRmaGxNS1phOVdMeC90MmNNWGdROTA2dlNKcGFqb2tqSGc0cE4veU8ramhlZHh1WGZ6eS91bHdaMHdOcm1vcGt3SGlHUWFyZTJ5MmhCTkNpQjZVYmR5dlNOaUZLcXkybXZmZk5OSEFLTmcwd3ZaOUhMbGZZd1p3TUJQWlUycHUvM050cE9pbUYvaVg5cEQ3MUxSTlV1ZFVCY2c1ZDFTRnpHdUJWMVNsZVozRHc5UE01WngwUUdIak5xd0VTdTVBVm9jTzVYaitsRWxBQUtaajhaSEdGZ3VSSXhMVkhzZXlweVpRMC85NFAvRGtvTHloWGhkb2puOHYrMTBMNkNwQVViRkpvd1N6ZGRCWVRQZ1YvT1VyTWQxT0VHVmxIdlV2d0RGU2M1Uk9iSmlvTU01dkhEYWlhbDdaUlZTT3c2R1cwb2ZiYjJTTUNFZEkyOHRYM0lNUnZveGp4UVhKRndzcGRTL291STdxakdUZjVnVGtaTHVNaTJRSXYzZHdXSXlwQ05LMEFPS0p2WXNZYkVYaDl6Tm04aEhLWTlqTUR5VzNFclRONFhiRGFpKzYxbFZTdmNDM3EwYnM2NXF1NXE3TXJuU0toaEg2VUdOVW1yTitJTWtwYlltZjlGWWpVcytKSjM4Q2t0dnJiT1BPbjRpMUIvU1lvcElsdk8wMjRSU0NkTFdlakpZMm1NZTFBbGlNNFlvcGphY3FyOUZhb3hQL0tzT205N01ScUdaSGJYenlSZEhXS3Y5ZWgwK2ZDcS9UcDAyR3FwS2Y5MklFK25UQjhFYVA4anFRdlVSWjdDcWI4a2Vtd2VIcnI5WEhxWEJ3ODVITXl5K2dxd1VocXUyUzNJOHVMM1l3cVpneXRxc1F1YVlvOURPeXhaK29XLzZXQmlwVHM3eHhpTnExL0NIYzVGOXFBOXp5QWtNSWl0bGdUelg1dVBjZ01PWlpiZ01pa0w0Nm83aEVTWEIvMkdkZmROV3hWUzF2MXQxU2gyWUlVSTJPOHBaakJIVDAxclBrTDdTeE5UYUxBcTVzdXhtV0xlc3JOZXBtb1crcWUvUmJHU1BOQmtobG5CcExpTHN5emJLVER5UkZRUEtLM0xIN0RZVmJhZlJQRXFqL1ExakFYMG1TQk95cEFhUXZ2VXNyYjNoWXNUaFhEQWtKQnJ6dHBmM2tTaVAyeXVFVVB1dDNybkc1M3pUTGR4SW9IeC93ZFZlMlNpOE04VjZUcGl6WG0rNmVRUHdBcjFvbitGZkVuZ0hkVldFMUJybEhqZ0dFeUlsaVFGSlB4YUVSTzkyMzd0eEc3WDZJNWZsVUlubnR6WWRxenJ4bEhrZ0ZMeWQ2QWh3amp0bGd0TEJGKzNlM1V3YlRDNjlvMExvU0RTdWhsK0VWQ213M2ZlZnBqckFrcU1RNTc2bFRvMWZ2WWlnUUdjVDUzd3NueFVNck5VWDA1eGtONG5FSU81TFB2TDdWS0k5NzBiRFlRQVZjMDdNUTdQc0ZqS2VmKzVkR2toUGdsWnd3MGVHalQyYnU5YTluY2x0TDIrZkRlNUhpWTNiTHhuUTNmS1d2UDhFUzdiS2pEOXJuNTZsRUFGbG5VTHNPQndlOEtSZndLb2Q5UFhKYW5FOEtMM2V4RXFYNFU2WlZQVi9URzY5ck9hUEVBV1NxKzlJcnNLdXJEenlqZ01LTmI3L0VGV2o3N3RVK1dkTkFJQnJQSHYxNW9LWHphNTk5M0VBUmtEcnZCcTUzdnV1Rk9HelhjS2lEb0tLK3JRMHVZNFBza0ZkTzJBMUtFZGg1RUFrU0duaUYraDNjMkVTRElDbDZUNGZ4ckROM3JWVnBjUVFsb1NraDBES2t5QjRNODVXWVFPelp1ZzZYOUUwN2ZidkwwZVJBcHNoc1Q3U0FtSm5XU1FtZHZ5a3kreEdzNXU2eFQrQWwza2tSbS94VWtCQVNJZmh2Rkk2VmxwRkw2YzA0ZlByYzdpOG9FS3VxVlF0Y2h3U1B6SmFzRnBWWXY0L2l6Z2JFQjNBV3VmMmlGcGMrQng1Uk9takt2Q3UyblZkdUJPMmR3QmlXWTBVMXd1T05PQVNaaTZ3OW1INGVGL2NRVlBGeDlIM21meUJQdnZhd2xuenorSHpHbXU1eTNwU01MdDU0M1FYbnFhQkFoeHJUUExXcFgwUGwvSEU2czQyTzVNdFluYVlOd1pFTEJCREkzSUZ6cEwzaUNORldlWGcyMlgrSnFnSTdMcWVlQThvSWpBMjJ4cnBJQkhJZnlSMjRLTnNVNjhtU0hYQUFZS0xvb2pQYnFtMHk5VjBsN3l0Z3QvQUVMdDRjYmk0a2Y0d25pY1dscDVVN1NmSkdYdGVXRDJKWVVRNEdzVXdtbFVWTEVhN2tnendrcnJBSjA0M0dJOWQ0RmFwUTdZb1grNDA3RWlYaDh2RUdhWHZjUk9vbjI5ZXZPanZITHNjY1A0bDdvdkppRVRRYnhhNHg4SUZ2YTMxV3FNelZYa3VuVHl6MUpiTHZDcE1Zd3N4VHlXemQ2bnFkbjJ1Y000aitRYzBtQ0FUZTVuL2ZFM3ZNVko4emdvdEUrclZzeW9nQlJWOGRWTisvU2s5ZCswYWcvWGxOcW5Fd3lWa1h0NHRSRExqa0psZmVmajBzWnBpMnVENHFoeVRxOUVXQ1JrTytYeW9lQ1RBZXZ5MkxuR2EzcW9sN1dHZC9yVXVDbDByeFVSK25jeUp5S2VVc3VZY0p1MmJkYzQwV05XNG91M0VwSitBOXg0U3NQMWk2WWpUY2NYRFhQL0I0OTdyaXJaY0pQVzlvV1pLald3aC9QUERTenI1ajNCSGx6TUFnRVhxbTcyTE9sbjR6VStBY3RCTDh6bUhhcnVCbWhiTWFSWHdlSTR6dWFBYXpENmFUclNJeGl4RmdZYUVaU2VZNG9NT3RCejMzRFprZ1pGZnl3OVZFUGFTdzRtNWs0SEw3Tzg4RXNtSWRGdW1ZMVJCWUNsZk9jOTRwTHY0VjFSSjVZTTNaVmZXUE5qYUVFL2x4ODZQSlBCU0JCQytKMGdZNmFseFZYOXpRWkRnZWd0TG13T0IwcUJhNkl1L3V4TisvRW9FTFFTL1Z6OVBqU1dDbTJ1WENqYzg5SWI0eHRDcjlBcG5wZ2lzVlZCRS96K0Z0N2JuZjRFNno3b0xuRXRWWW9Qa25YclUvb1FBM21HOTFwZW5ranA0clZmMlpGRWp1WDIyN2U3VEh3TzFNL1Rhc2pvQml5YkdZUkJ4Ym5IdXZxZ3NoVTJwTDA2b3ZZYVlicVc2OWYxMUU3Vi9kcVQ4QmQrcExpaytId3VNK3NmYldvSGxMUTlCMlNMR0pNUUNLSjJPYjVTcENEN3RWMjRNUTFBc0tlQ29DZGQ3c2xCRENTajF0bGp2Sk92eXAxUGV2bk5DcFpoUWxtQWVXT3B1a1l6bnVQbVpPOWgwS3dMd3p6QVJSL0FWRzJNaXRRQlFIR1N4bFFCVGlKdHkrSTZXL2pYY25jNHZaeVJ0SElpWTJmTElseXJDRldCOFlha2xjNm8vNDFYZkdQb0tJRDJIOEdSaXdVMEpxY0JXYUthanE3bGNwUFl6c2pqVUhLZnVDbkI0NlZURnZLdUd6OXRNTmxOekFJckdTNnFDNGJLUkF4LzZPMHNDYkJsS1BtbDZiZnhVZHZ3TEVsRlV4c0hYV1ppQ1pEKzgxOGtPb04wbDZkSjB1ZTJTQzNPRyt4K3ZuVXJ5RzZVMTRlWmdlaE84Y1dadk1FMThXREs2YjdDVSt0QnBzYUZ6VGcrSUpFWFYxVVZHMmhMUjVYWFFzMXlZVmZDdUpPVmpZYUsxb1dNcWlJNmhDZTkxVFNaaE9Od1ZSbVR1WmpLZ1RpUWVZSEYwRkNLcnQrUmMxM09BVU5DelhvSlpkOGVWaG1FdVA1TWYyUm9oVUIreXlaaCttWXRrSkh3MTBoR3gvNi9Dc3dTTEk1MUNtSE14bnhicU5XdjhGdzVadUNOc2MwY1ZmTUxMYmR3Y09VSE1kR1cxZGk0YTk5b3M4ZmZsV1cwcUYvVWhtcElob0NBNDU4VGxVWnBWWU1Mb1VPcmNqWmhYOVIwMFlUWk11eEFFbThReEJPVk9iZkNaVVNtN3RnQ1pYbVhkb2ROWXB3TnFVZHd1Lys1T3dETmZqNzN0bXJXcnVQZHBvVjVkN21Od2s0RkRzM3RidHZpOTYrSnhSTW1xTXFJQ0kveUczR0pnMEd0KzMwM1NadndManpXa0JpcVFrSVdTYmhQYmhhcUVSOHd1V3FyWGI3Umo4RWliVTVkbjArZFpHSDBhak55bkltU0FhTnlReDF2a0JZMW9Id3k3WkY5RGd2clphdFJtOXRBSXNrSG9EMkN1em1odllpVEpyQlczL0RPUkJYeWpkaXQ1THZObWxuU2VZRTU2VjIwQ3VkVXhRaDFpbkg2TWZsbGdwbHlKZDJYb0dFakp3cy8waHpnWERmZ21YQ3AyUU5MdlhNdDEzM1lOL0JVTlovY0pYNUZUdjNRRytld2Q4cmVhQjZOc3puZDNzVEhlL0d0d1YzaVRFcjZRc3o2N3FPMnl3V3ZrOHNDL3Baa0FyZkZBZGRDaUFaay9mTTlEYkYzV2hRd0NQQVV5R1NuMVhxWHZ4Q1lndEp1VlNFOG9kSlJjZE92UXlXTkFtWGE3NXpkVHJFcXp6dUZpVXpQdGZXRTlZMGtmMUdGcXlydXFpYm9OTHl0TjJ0Uld4QXV4clU4aURuQThNMmNJYVRsekdvWUlBalpZN1lVcHlSZHk5Y3pZM1BPaWVmbm9OdDlXMkg1L3BTMUs2K3RVQzZyUmYyby9vNjZmdmRZbHp0a2JsbEFyVUtxRmNNOUpEQjQza1ErL2xvS3pINDVTU3g3aHptcDZ6NjAyUjF0d0YvMWN4Z04vNDFXeXp3aDVYenVFWlJ4UEtlaHN6L2NuZW85Ym52RU5UcXRXUnlRbWlKa2RaVGgxTHJ3OEZkSnpKZHB5R1NleEpLa0EwSVJJL3lQOFFVWndqQXp2ODRGNnUyaGtrS251NGcxbktmam5vUkVsR3VRR2pDU05DdXVENVQvSTNtWC9SNXF1T3M2RHJUam9PUnBFWkN3NzRIK0JnclQ1Mlp2aWNaeXRreldsdVFGQ2c1aGdBcEVzRFJLeitna3F5TTR3ZXlVamJrSkdoTnNLb2ZBcmhoaWIxb0lTUklBU0N1QmFTRDFPN0VEWFZrTFNxc2VjdzRuYkVzRG5ZdGZEYTZDbzBOTlJxNk9xQktMVEU5S2RFdWhUbU5tMWp3WDFLVU5sanRVMW5vM09vd3dMMXRpNGkvR2pHK0xQUjc4b0g3VjRqeFpJK3cyd1oxelVQNjFER2g2QkJKMS9FT21QcXVoaFNDY1lXY0dBTjZSWHZGVzg0UzNqS0pjVHFoT3lwV0Q5c0dBZjhNK0NZVUllVkxBQnpwblczeXhPNXpQOWxsSk1DanBlTS9SK1RRei93MmNJY0R1bHIveG4rMHNKQnJraG8wZm9Xam9CdVhwYll3NFVNT2l3dTlZRkYyd0lPVlVGdHY5ZlE4M1pYV0gyNmVsNnBaaElsNDc3T2VFbWsza1U1NGpMQ0QxZG81dDduYjZEOFVFc21Sd3pNc3NicHIzcjE2TFNjY0RNTzJ4TFB3THlWaXg1bHNpclBobnBvSldFeUpkUEJNTzdpSU1wRjJFa3A1QXNGVjJwMjJ6TGk5bU9jeVdMSG90YzAvdHEwdFlRS3dKVHQzUy9qblkwd3F4c1hab1NFT1R0Qnd2ODQvM1RDMXdIaElKSmlnV0RrRUNQOHdzOXlqcXp2eVlRSU82R2o0QXZDdmU4VjdSbDBVOG5FZm1uRUNRc3VjSmpyQzNURDhpektJUGdPZkZ5bHdWdllWWU8wcTBoeGJ2eEl2OWx1YnVraWo1Y294RitsOXFjNlkxbk5WcUpQL0NQblpmeEtaZEc0MURUT2s1d2hOVHl3KzdmZzhZV0VXUFcvUlBWdXRZdUNDNGVoYzJlNmVwM3VVbnU3Yi9tY1VuMk1uK2JmZ0lVTmVIdEJ2ZDZNQXBPT00xak1tUWs5U2N1eDh5d2sycldPR1NtazBNZ0creDBvUjRPTEwvNzc2SjAxRWxGeU5WZWQvdkZqazVvM3REbUU2cS9zWFZGVDJmaWNXUUZxWjAyQjBpenlzZHgySVBRRFBtUjMyb2JOeUdxRWFhQzJjd3BwSm90QmRoLzE2VTBVd1pzWlpLWnJjSzhmTTJZN3lFbDM3TzEzcUsyc0lzak1WdFpiOW5lZE1leW9wSlBHVlB1QkFwSWN0MDZpYnhDeml5MFA2QURwYVdPVFVhaE53QU1KWGhPRUkxNkowQ2xYc1N1aTV0dnV3UlJKVmFHQytmZlZTeEZHUDN1WVYyZG12eG8yWXZnTEc3TWJsU1NNNC9telUrUWRjcEU3a3U0V0JoUlRpczZhYjdtYUg3dFVIS3hCak5YYitIOEgvMk01VUtGSnJHeU54ZDhUaUtRT3VMakxNTk5kU0hEYnYxdGRHWmVwTTA0UVExb2V5TjBaU0ZzWnZxTFRiNTBxR1ZLQ1J4OTk4cEFFb1M4akxRMkV2aFhKVDN2RmFwVnNjSW84cFR6bGsrQVRUOXAxVnBBZzFpUk4zVkdkQlB2TWcvVlBxRlFHcWpkNjNvZnVmY1VsbEd2Qk11QzRKMjZUd0lKUmdSY2xCU2FwZFdGSThSbzVVYjVPT2tIRmtHZ1FPYTBZdWVKZ2J6QXd5M2Z0U3Vlc3FHSG4zQURtQkEzOHVHY2tCYkNQK3hjbnMyRW5sUU5zdWkrVkhJNHpPU3R4UkRINnNjc3pzeVpha2M0aUp3aGJOYWQ5dndSNi8zQ0p0dDZPRmpDMEVSQlFZMGVjTy9MR0tYR1dJYzFHRVBNM2xCVlhoNXlyVzRpSTBTMitwWWQ3bDBLaUErVEZENTl3M1psVnNnell2UEs1Rm5vdmw3M1hkaWxRbE9KQUQ4VWpUTTdsV3UxOEd6a0xMeTZMUG4zYjZZdEs3b2dnV0RhSkVOOVBPS1lkK2tZSU1DRSszVnhEbnB5RndMQ3pHRjRPRWJVRVFSSUg1dTRqNDI2alV4WFJSaUNjOHVwWkdRNi96bFdsd1IwaEVEdUFDWm8xMW1WanMyaGt6b1gvVjRsZWlYcU1Jczd4OW1jd2dpcjJwdVY2UzByc0NuYTk2MTltcnpBN2JtMXU3azdzTXg3Z0ZuTEppV0RoZTBtTGx3c2N0YWFYcWxsdFg3SVM4S2J6N1JTenpzdGx4SExrMWEwN25kaHlFMk55SlJqSVRWdDE1dUJ4U0dSNjNqdFppQnFrTUFnUm0wbzhTclhaNTRDeDJTNHd0eGVQS3RCTUVPT2dXUXdjL2pjNkNXZFRKbHkranorNXRRUlZTVDJJSXBTenVDcFd0aXZJTVlwc1lxUDZEVW5QdHd4VHczdXhCTW9CTUE3ODZRbUJrSFdNQzlBMVFreTBuM1I3RlhOUmxlVkNCRjdtUlBtbS91bzZqYlU3Sk5XZVNpMWdYa050dHBqVkd1cW05T3lRY1ErZS9PaGJZcjZNQzRyYjdyVnczK1EzQUNnSW5PaEtub05FblJvaVV5cCsvMGU5YmNIVHgwdVVEZTAyZENBdTlCSUYya3NqVXRzR1AvZXYxZE1BblNPcXAwa2x2NWJOalE0WjE1VGhTNy9yMkozQkluNVEzOEs5bTBPNjV6SG1FZG5YeHpOTGtoQXVTWDU1dVB1RzFZczRiQ2ZEa3FhQUs3QUtEbm9qTHVsYTE5OFRzYjhCSE9UK0lEaFJoaDdtTm1lcWtMTlcweldjR3BVeldZeUNiSmF3ZmhSUXV2Q29qOXpFelhSd1NMUGNXSG5KQzYyUjJTQXhzd3VEdjlPLzZKOVhQYVREU0hiUkRlZUpJSVg0ejczY0R3NUQ3UnJ4K0diMEpjTmVQVjRaZFZZM2dSd0tzM3JUbjdMczJkdEVJWkw2UXNsZUs5WEM1TkRrbGpIQjNLRzJGOW12MFNGMllVUEdSeHY4eWovRi9kM00rRHVrL3VWaHJQRDF0dWNnVGFobFRXWlNYSmlST0V2WTVyaXY4c1BsWHdaQ29tMERZNGhwNDNSeTczcCtIMFhBdnRRYjdTVG8yRVhQWjJicERjb25OTWdxR21DN2JRYlY1dysrZUhleUZXd0NjWU5Ga1BVWGFUWTFxYlBJc1MxQzJML1ZjOENrUkJYb3VYNGVZbDVwWFNOengvMVkzZG9JWlUrbUd6SGhmR3NlNVd0a3E4K3BMM2F2bHJoMXBVTEpWendrVVlvZitOSlBDbXFNMnllREgvR2cvWXdGaWFTWjBQeUpMYm0vOFB0dXJ6ZGZVV2h6Tkk3VExCL1FFTUUyM1AzcENMMTJkSUd0SW5iUERmalkxbUZzMTk3ODVLMFdxdkZER0NJOTF6YXl3YllEVDRaWmNRYzJ3dGloYUdRTThIRnpOMGZiaGRtNXlNZit3TStNbnhhbUxPQ2tlTkJXbEZvUmw0cXY2T1NPUEp1cXlBQ01TQXprSi9BZllGK3hYZjV6RFpid3l1K0EzSXN2S2JPZlJldnViZGN1UWRNRTBpTVAxUVhaUFJrRnRzZEJvcXRrUHNYajR1dUZzamZJbVlCbDhTUFVzTlFyZVBFOThKTS8vR0F6WDJyNnYxS0JhNFVQTy93UGhUQlFPSXNZdnpzRWxkV0I1STVFdWs4R21EempHSm9iN2hOVnd6N1FMZnBiSUtKTStzTUpJMWh3bzljODVDTnVpeGFVRlZzRWVHNDBVVUhJQXFuZ29qamxocXlhKzdvMmd0dHVVaGhYOU5oRkFSLzJnakRhNkd2WkhMYURxbnJDWkx1bldOL25mQW9vazlUSkZ2N3JHMjZRc1h3bndJejJ3cTV2dFcyT0MwTDU4NUcwd2Q0VVo5bEliSlRya0VFVi90d2dpd2tpOCtlY1VNK0x0VHlZQndiWlM0ZDlLUFdZRnY4ZTA5WUZkV2VYTXh3TEVZaGdnTXRwcG9RbEtzVWR3YWE5V3VZcmgyS2dLUUtIK2VPSWE5UzJPVmtCcC94SDRKeURLZkVLRW9TUmZOZDZwa1Bvd0hsTGx2ZDRoRjhFbzZNTGhrVnZ4cFlvSVNwUWkzN3Flc3d3QlhjNEFMd0NUMVp5QjQ0b1dZeTNxREYyRFhWdzhKY2RYdXNqd0FnZHRyZ3ljU2YxYktIU1htdm1JVzc2TVp6RXg3azBFTGVPRHBML01tVnRZMFRTMG1pczREcTNyOFllZ0x2TE9JS2oxMU16SDMwTkE3djB1eUQrMGJ4WXFOcW9SQmtwQTdIbWx1bnNtSE1NN1ZwU2JmWXN5eEV0MGsraytOMDlSck1IRWJoVFU1cjlqaHhiYVNNMFltZVJhK2pmQTRSQkY4RWVLS3BtTUllUUQrT2JHZHAxNlFtTDNFZmxHWnlsbnVZd3BqVjc4YTM1SlJVK1RkUyt3K09lOTQvMCtJQ0IvaThQdml2bW80TklFODhtNHFQWE1MR3FaQnhTVFBvbjVMTk91M3Npbkwvdk5JL3FMVndUTWFaUm5EbmZYQmViVDB4UXlxQ040NE4vTkZWbHRVL3d5UUwremtocGlZRWZMMk8rUWZ3N01vSWpGbjlyMWFUaTdWZ0ZBd3lKSXdHUFVybUNOL0tQZVFxQXRpQ3cxSllSdVRLcVk2M0dGbEk4SU5wWlVKM2toSmZLeE5yTFcwajB1bjV4VUVmOUdLcXE1NzhoTURjcExMSStKL3Jzck0xSFJJdHdIVjFwM2gySDkwaUFhb3FNMHhHWjd0NW1QaUpCV1VUeVA1UzdYYlhqL1dHNHlIT24za2tHZkorYkRhTW1jYVE3QWRmaUoxN2dXTUYxRHFaUVA3RE1TN3NjYVdFWnhSZC9CTm9Ua085SUhDcC9ZZWFsSUFlWFV1bUpMWjZ0OXNrQjVRR2FUWXJXV0NzazRvdnB0VHZXSUhacWY5dUM5NWFPaXdiN0NJcmgyVUVUcXRnUlk3VkN4UGFURUN3U3JuVWN0ZXpwY2IvbGg5NWMzNnhCNW9IS0V5TmNxSEU2N0Q0cU9EVkpiZ2d0ZHhtUi9Wd3FoV3JTZ00rNWFFbjFuaXVicjRldXdqMXFTWEtHVWhWVjdtQ0pGUkxaY0UvTjhXOXI4ZkcvNjNxRUZTa3IrZ2pQdzJUWkxGNVM1N1RYZ3RyQWwvdDZncXdVR3lKTmc1SVZNa3c1UDlBQUxrWDBLaXFFdk4vTDJRcWFMSUJCeXlUd0NMYXRQV24wOUMrZTdFL0JIMTJacUJHZ3hKc3g2SE50WFVoSUxWUzNqaVBkQjlSZm1GQ0IrWEZ2bTAxMDhua1YycTAyUUFZaW01R0YxOEVhK1FpVEpqQXhPb0VFRVdLb1VIYTRKdk4zMlNlTWJGemhjdVFwQ0tpUXl3MlIybnRTbld2SFhqd2hPa0t0SWtuTENPTG9pT0tabHlRb1RJRWZVMDRzMnRjTEhLTTJoQnJacTJpSG55cXNnL0RCV2UyT2Q3Mldia2JVd0p1TGwvV2N1ZzZyTDlzVFlzV1Z6em9zR0tkakhVaWFpaEpTcVNGTjV0aHJNWkNNMW1LbU9qMG80Q09MbkRSekpQa20xdFlmajh0LyszbUZOcmxRQkNBZnozTTJONWJKSU9IR3QwaUhTbCt6bVFwNS9KdUdPRFJCSUZuSU9VVVRyVytURmVlcko4S3REUTdYQjBxYmlMNllOWmJ0MFRxbW83TnZ0VFVDMGMvT1FsbGZEK2F4am05TEVkUzA4ZWxDankvUmtWYVRLRFpWZDVNaXBwd09YOVc4OWNubHBCUnpFTm9rcjA1NGRsSTNDTmtOWkFwdURtZDJVMkUyajBncFZqbDlWdmRnbytpK3lDSkJham5CU2VLUHhudUFaTUdkUkh6aTBHYWUvdzN1YzdEcWtXTDFhVng4dUFWZWhTbEF5MWxSQnZZR0orUDhQbndXUUZUSWVoazErT01KaWRabjZkYVg0K3I5Q2RjMi94QUdJSDh2cFV1d082blZZU3pBWVFyWWhwQUEydjhjVG45Qi9ha1lhTDhrcjhTZTVySmZsRy9SVjk3MXVibklnTmp3NWZ4aUYwR1NrU2VwVHpNQnlWZ00vc29jVmZ0RmU5SmNvaG1KV0ttNkQrS2dvQVQ3TG1lRnBhYnNQbTVtYytWRjN5dk4ydUdIc3VjTW8zNFFTRHpNb2F4U0IyUGJCUk9tREE5UVE1a3B2QUZCMTJxOUYydG5VMzMrRFFBcVBjOXIrdHVTM1NhOTBVTjUzUFhTbndTbnNScFdOMG9kS3k2ZFFOSnNRYXRkVXFiUmlsbnllS0dWN1RDNC95NXlORDZiNnp5d2xicTcybEhZTFc0V1BYUEtzWFU1eFZDU2JtV0E1NmtJaVhIYlUrMmVQVG5CZVBrSXF2amF4QXpnTHlnN0JwQVUrUnNzcGxCK3lEdFVNM3d3cnU5UjZQbDI5U29aWnZrZFlXNUtQdzIzR2FHM2ppZkJaenNTOE56dTZqRUZLeitzK0xkN3lmQzRsL2RtNDZsTkVmYTVDdklxMWVtOVJRR0VYQlA3Uk1McXV1UVlNZDJJeC9kVjVRMEp6T2VRc2toVXFqQjBNNXc1dTZzK2RQWG9lSTNOaE1qOVYxQ2tHZ2E5Y0diOEVMZWRSQTlhMmpWKzY0QWl6Ni96M3REV1NRSXRiVHVMcnFXNjdUVzhscWpBaE1od0g3dFVaeGRPZmtNb2JabzFyL0NuMXdQOE5ISFhQSFRPendPY0g1Y3lYYmNnVnplcmtkRzFkZmZ3QUxrWWxpNW0yOHpSRzAvd3ZJOVpWU3ZZTFkyajFDYUxtM05BQTU2L0MvcDZsQlk1UGM5Ni9Ld1pqS0VOVkRFUDV0Y1lUYWJsZDQwWjlZbFhCamNaTFQ0UU5tdE5rZ1ZGMkNZTEc3WlBQMzMzRk9FZHlMc1NyVzhES25JK3Q1WFZoSUliOVBRbk9wT2lncVNNaU93eE5vZUZiNEFLRWIrRkZYK0NaTGpkTHQxTitkUHVrcGkvQUxVWWFnbEZFTXR3blV3TXIzLzdJaXNqOHpGSG9nendlY2N3TDNOYVVCMUtrOUM0TklnY3Z5dGdaK2duekJLdHNrSVBHdFNGTmR1VDRrUFZTaFZSYjViNUo3alRvUHRuMk5FUlhOUW5VM0ttQ3hvUzA3WDhMdk5SM0d1cUJpelEwdUZxVGNZUTVsV1Q3VmZYd3NNaWRJcEJWV3FoaDBmeUZvVVlkOFhLRlJNcE54YnEvUFVOT3NuaHU0dTRBdTFLVi9PaGxqSkViSDhzVHg4ZXRMdEVGMnhKNXlkZE9qN3ZKSWh0T3I1Z0tYdWs4RTBzTFdNcmtWa2gzM0VGSURnWVM0SlZ0aW9FYUEvNWJZM2VxMy9rbC9TRkh5Sm1Ic0lqNGxLbWhORjk0ZWp1MVBSZXQ1YWI5ZENROUFUeCtXWWVBRVUzR1pKemQwMmlMUFZ0bW5mMGJhVnU3ZjVEaUp2bUc2aDlEN05ScFBKQnRQaWtPRkdFdktSUTZpRkk2QkhIdHZzcjBpZ3c3MzJOV0J4TEpmOXFKVmVmWXk2bUZmdEhKejZMREY4NVJIdXZlQVJhL1paMENaWFdjMlcycEd0TFRXMWV3STVzN1puMTFPWjdNR3kzUGk4Q0hzUldtZTcwWVBlUnlpbFFnSnhkbjNudk0reFJBbWc0aTNIQzVoYjkrRitCR1NYUFplSXpzZEJtN0xTc3QzUWxiVWVRdTUrY3R5ZUtSVEJ0U1B4eUtud1F1Q0VwQmlwcE5rcTlUWmwzOCtZdWk5amVoZTgwVGVSYmZKaUFsemZubEk5cWxYTjlxOSs0WUlUbzg2aExUeHBLRkdZM0RqVm5YcDVoTTZYaDlpaUdGU09IOEhPZ1R6VjRpTEljd2VBelMxZEY4ZUFYWXR5Z3pHWC9DN3dmbjlUYThGQ1FHWWFVcXFoSEp1cmlCRWt6K3piVFo2Y3BJSGE4NlZHN2V5L3pHSGYvRTRBSkhmcVBXaEpydklKV0swbmNaWnY5NmJNbDVJWVpFSi9XN3BMT2tkT2dvbnpLMVFsWk1qQ0dzWnZRWGZZTmt5VFQ0NzBHWEQxdTFaeDVxRkQ2NG1RR1pCLzM0UGl3TkZybVVIZGNxUklGcHdsaml1c01VaFFtWklnTTZ5Q01lZlM0ZGNjbVBEUFhYS0cyUzZmSVAvdC9aRnI5MmRuc1cxUGtNTUpjc3cwS1BlSGwvelZlV1RDeHc2WFZHc3IwNUdKNk5BOFpVL0RLdUZKcEdNay82bmNGSWFneDh5bE8xRGtUNkcrUmFsZXovMVZET1A4Q0tIZlkzOWNJWmowVWZpTEMwOHBUK01NbG5WTHVCMEF4b0JYTURPMnVPMzAwZDd2QytwaHNjMnBNNlRaaXpwOTMzeUlrN2FrbmQ5cmNVU1poMVJ4cTRIRWFzNlBDU2FMakdLWG1TQmRvVmttWVVEenllUFVjaGFyaDltRXBkT3dNd1lVMHZiS1JFMHdJb1dNS2hnczI0QkVKTStvU0luWktSdVhUR2paeElSQU9SSVNYYjl1WGJ1WWp6MytVdTJGRWhRbVhhTThrVk5XVTd5NmxKRGxDLzFKUUFhSHFMRUlGdE9hRk4yNFh3a2lycFN4ZlcvTDdMZWFYNldjSk5pOTZqUVVHWVcyS0M1QXBsMm8vV25CUkx1YzFPeXp5YUg3eW5ZUnJ6UEsyUE5QOVRuOGlHU0dKeGJXeEJlYWZVdjQveXhuMy80RmNpRHhpemlxbzJvZDR1Y1c4Nml5NlhIb0UwRGdOdkNLYXVBdHR2N1lVRml1bGRDcnhIZTNtUkgzL0phZURBdWtDUFRPQlE5VXBlV3loWnpUN2E1SXRCajFxR0FMUngxckRxL3g2MHdNd1NyQUYzd1NSS2FlRlJPTDZCcU05N3RoNnpKYytpRVZwRDZIM2gvRGk2aUN5bnFmZ3Q3dy9ZWnNiWSsxb002QWpwNEMyWTl0TjBkRENjNUFHUlgwdDFZVWRRQ1hqWHA0MlZwM1pneHBRR2tBUXhrUU51MjU2QnZQRDU3ZzhVSzhXQWxxMFZHZ3c5OGlvbGdXRDIvNG5SSUJFVzU5Y3NhNHRxWmRpV0dKMC9yb2lzbGhwRlRuNVZTekFZYTVwU3lTWU9kZnV5TmQ3WjhSUXRSNkxtcDkxQW9QdlQzeUFCQ3Q4UzVHQm5SSGcvcFIwd3NRTW5XV3NBS1B1RCtVWC9IcUx2d0xQRFI5bkRMTzYyUDVKMjU2VmQxYlZCakdtaWVhcmsya2RtVmZtUDVjNXIrblBSeWltd0tRVllhWURNMGZUS2N5c1NwdHlyUkJqN2NibnhLNDBlby9FMW8vZzVWbkNTL2YxbkN0ZEh0UllTT1AxYU94aVZvaXNJNlhFc1gySjhvWHFEQUorNGh5czRxRzVMZ01QM0cydUY2Uk5SbEZXYjIvOXo2UWxzdG1YTUhwekdlQkVjMmxTT3B1N0M1L2tPWmxuK1J2OXQrVmdqTkFtaXhxTytjRllhSWw1TXBxcC93cHhaTW8xbndNTVdTWW80a09FRldaaFBWL0tMVDVRU2svU09qQ3dIei9jTm9nekd2d3VPK0JjY25QVzcycUF4azE1UUVqbStpNlh6QkxKZlpUcmFmdW1mYXowVnk3RzJocjJpeVdCdnh2SktxZE5nRC83M2xlbUJoNDBXd0NJellESFh6M0ptZHlTRnpBUnFOZmd4MzB6Vk9sVlpOaUJLTkVkTE5hVmZYYTZzaGxiUDVyNFZ6aDBuT1c4SmJsbVpXV0JOQVJsRVE2YzlvOW12TFhYcHJQUDlYbklDT3NOREhFVGZVMzhxSGxvRlVDc1pCWnVLTWJkaXQ4Zk91KzVSTkN1bEZjRkQvOHUva3IrQ3IzQmNROGY2M2tHVmQ1eVdyaTBFV1Bjam8vN012ejFnL3g0bCswNGJzMGVMZVp0QnkyUFhBYTNYY1ordXQwS3hybkFhbEVtQVFsRmlYKzNneld0UGVjY0xreUsyM0YzMG9xYlJLOTkwSWlsVlN6RW9CNmFPMmVEOW5Ha3A0MXdqTytPSEU5Q2hxT3dtZWlSVUZFNnBBQk1hcDJmbjFuTmdnQ21PazRLd2tldW9nTU54SUJwdUQ1T21reVJTYUI2Mk1oSk84ZTU2ejJUWWo1TC92V2hhS3g0Y1VVbDVQQ1k2dXQ2SVR5Qytkek9oQk5PNWlGdlVlWCthTURQZi9LT204bWZyTTRROGF6THJvTnQ4NFV6ZHlDdG9PYlVGNXhZbStGOUxBTXFzeXEzcE9wb3ljMTl4UUxROGE3bTBTb3RxWDE3SGdsOEk0byt0UmJINE82R2JrQlV3ZGtkQytPQm5sR21GMWphMlFOUThRRUt0OG1tZkt2Z05HQTBiek5MRE5GV3orRjBnZmVQbUM0Q05sdzlXalhVVTh5SERXakVjbjdxeXlUSm0xSzh1TUttbWVPeHZPdTR2MkR0YkcrWkcrYWY0WDk5Ull2TWh0THMyb2QyaHVLSzc1czVRbk4xMzMzR3RibktmR0FmUnNQL0REUHJtMWw4M0tTdHJ4RDZrNWZOQWxicXB2WnA4U0pZNFg5MmpWMU9FSWRON2pGL01lQTNrRWdHNXJ4SjE1d0g5OWtBMUFRY1RCVDNmOEU1TTRZNjNJMSs1TktGK1hhUGp5dWVzYTlFU0xSY2RnNytWT1pYK01FMnlDdFVaQ1lsdkpmWjlHRjlwV2Y2SXVlT0JtTFVJdEFwSXhYbHJTM00zd0ZzTitpWE1NV3dycUpyWVVzN1B4NEFOWVlSNmZJVmRZVDlBNlYzZjFrYjFaREpyV2FxRWZFaEpQT2o4c0ZwWEUyT1gyR2ZlQVJ4dG9uZU1MNzhtQVk4ZVBYc0lzMTR4aFdzMGNuK2JlWGpCdVV1SWkzVDRnelpZMWVDamZkZXBFZFp4YmFUdFNrRzJBQlh6WDEzaTJBNnZMZ3BCU3dLNU5kSkZIVlgzcnJUcWVCQlB1dWx2WjU5VEtMSDRmbG4zK0lNZW1pY0tZUmJwKzVyOFMxKzliK3ZTK1piNHM0dkFSUTJWVGdHWWNYSDQ3Z3lWT0FMZ2JIK3BwUWhPYnJzTVNTb3A3dnVBVnljYVZwbHN1c0N0YWthQ283Z1VVYzJGK0gvRUsxTmRZVlUvZTIyUE9xNmhGZXlvaFZETUJyZFJvaXdiUm9RWDV1WEMvRkRodXp6ZjhhNnBJWXpHMklTWFhiNE81Qkc1Q2ZEYjZmV2xzSkRaa1g0NDJzc2xNd2F6WVo3MzYwaVpqajZlMFNrOGFuRGhUYlo4dzJoN1dFSjVTWWR2UEVmdi9MeEFvR2pMa2NCcjdwaVpTNTRRRnl2d1l6N0tJQWkvZXljbEplWDRsRGVZZ3FLR2YwVGVDVHRaM291cG5HSVkzRWdRRDRYMWNES0g1dDVwZVhYZFZ1d3FDekIvemMzejVIYWQvc0I4NnVQRm8xZlpsWmNpeXlCTWdzaDRGUkNBekdYNjhmbXlueVVka2xSdjUvZWlHbGZNN2dLcFlBSy9VYjdHUnRsdmRESlJ3blVwc2w3bmRjNHlOQ2ZYUHpuYnlaRjZWYTFuTkJmY2lrYzlrZEVESENYckppaEVnYmdwOTZtY2FOS1loVVozanp1N05hQWpjMytUdVQxRWk3cEhJNDRqY1dGdUg2alJobmppZFRXeEMxcG16N3RKMEhtSWhiWThXcUhROWxZays2d2pVamZEZEt3c1E3VzUvOGd3cVRZR2FJVXRQaXVCQ1NjSEs3MTNpazRFRFBSa2w2YThYMHFPYzZ4YnFybjV3OTdzOS9ma0xpSUpGdXo3QWliYnNUMTFjVllnTXVaZnpyMmhKVG5LUy9QWElzSWJEYlhVcCtlNzgzWk1mYVMzV0NJdzZDVXlNUTdWOUdzYlZQK2EyR3RlWmJUWmw0cDdoZ0NCTFEvSTh0cjFybmJYWjRibkxTcDFVUHVBUlVwb242dXduM3plRmtFN21mNHRTdDhrSTRscVl6VVBveXpPZWNpYmIzTFB5KzViSUEzdHppd3NwelJqSG9DaXBUaGx5RXcwelArWkl6bERtK0ZBWTVpVmJReTY0NUhxYkFXajJYZTlGUlZDQkUxZmd1TDBYbDY3NzRPQ09sVDJDdHZwL2pqZE8yRVhXRml1dkhKRHhhai91djcvQkpFdUtBbGNhNC9OamhBdEtvNlFjbG4vYUh4dEswLy9QVTg5dk12OVlUdFNZVnBDS0pteXRYSjJYOXZGODBMV2NCMUMzM3I4UFpxeDhxRXV4WXQyTXJOc3VPcHE3a2FIdTVTQnBRdldoZHBkTDhOS0M0NlIybzA5aEJqRWNab2N6Z3paY1l5RHZtT2hPeVdrZVQwM2VrZWlBdjdtenZDMkVCbFYxMW8wQVhoMXpVNTJGcWFQaVIxWTU1M25VenhEUURNMmhxZFNnVTk3NkVuUmxCbUUrbmVpNmcwT3NjMjlGYmphQjVGRkc2QlVpbEQ1RGhyK2JnU3lJNzZsNE9rN0x2cjk5SytnbzJIQkFZVTBtMHE0ekY5c1hBaExjR1VDUlFRZEJqNEt1MXN6Z2p0azE0VUFPdDdGaFlYY01PZ1BKVWl2K2Q0VERJZm1GOXVBWHpYUmNabklLYm81ejkyRlY3V2d3OXB2OVE5TDZrY0R4NkZsZXh5N0drWm1CM2RXbkJrS0pEbXFEZGZZdVE4MkhiUTNzdnJJbmlETjFqSkNsSEFKa0R6ZUQxcmFOWTVkQXhFcTBSeWRiY3kwMFA3NlZmZUpkOHJtSjhqUkhKWjhFenNLdTBqdDFESTVmMWJYWkVtSUlRaWVkbi9TdXNaaHBBRHMxd2NCaHdUYTc5M1FYMEJ1UFd0R29hcmx0Q05KU1NnOVhMV3VEZ1pHVGp3UnM1cDVPemN1WEU2bUxPSlA5ZzJFWmc4RXE2ekt6U0JXU3pENEhONnZwMFR2b0E1TlBETWp0b1Vlb3k5eGdFV2owYUtzL0NCaEFrc3YxV0ZsU0hGUERINVNrWW5GdExoY3BXTnFpSzByVE5QU2dhRnZPUEgyK28rbEIraHRJd2lVd000NFpYblo5djNWbXBJYjVVT0Rjak01Y0dNR2hrNThNWDdDeHZiNHRHaHByQVZBS0l2OGlvUUlTQlI1enFZOW9rSnlxSWZPZGNya0NPbTRXUytWeStPMWFlQnEzZ3hsMFNFWlp6MEtIczBwMktJQUlTbkNiSUNWeUo3QnBCWEo2Z21RM3UxQ29odTdQdWRhRXFGc09icUhLaG1KaHVTaGxZbTRwM3NEYXNpZmJ0ZTBJQTUyK3ltNVRSbElCTEx1OTBDaEswbStGYUgzcEg0NWVKZVJmTHIzTzcvVmpFeDJRQjNIVFBuQjRXdEVEeHlEL242ak4xMUhqcURNTUlkR2NKemVJcEwxcDB1Z3grbDB6ZG9HRVNmZmZNbzUwZkZHQjFxb3grdTdQbUVzR3pGTHJKbGdLMXJySE5PdEp1ckt0K01ZNEt5a3l6NlhkY09SQWpxYXZ5ZEV1T3RZWEwvRG5vbXU0WXgwMkMyd2NXRHByeVFrUG9hellVZk9rby9GeFZEeWlpK1VnTFpYOVF2bENDaXpEU24veXprUkcxUDE1R3RZOUZJRjhqaVd0Vk1jeTRhYlozZVRGaTB4S3BpSzB5TkJZRy90cVJWMVl4ODU2bFp2NnFGam1TdWRBMmMwUThJb1FxT1RSM3lQUThJL2Raa2Uzbzk2Yjl5VEhHc2RLTFc5OW5sNDRRNFM1UU0rV0dwdmRsOTFMQXROWm9DWWVtbG9mZEwvVWlmVW1WSENwb3ZmQlhRa1BIZWNRUVBrcnFTV0VjMHlKbDVuMk1HSDJybkdqZG9GREVRb3RWL05nc3BXaSs3bkw1MEtKMkNaSmY0TWZWeXMxdFZZRkEwbms5aDZNSHB2L0M0Y2VNL1lsTzM4bFp3T2RhbUJDalZDMlFzUExtb1I4Qnl5YzN6amNKbGpXMkdzc1lRQ1UvclNrMzNnN0pCSzluczNZdERJMkJHMzZ5bFVxa1I5S1hqbGFKaHA1aUxqVHJMeGpCMTNBYThSemRUVWVGMmVWcXlON1ZyZWc4MzBpdU5UMS9hMUo1ZDVZL0VNa3lselJCSy9ac1B3MzVTZ2hFNkpTZ3I1bnFaODVVeUdPdzVvNlZCYjBENUtjaFpsOGJJWFlyL2FCRjg1bFpKaC92TDhEN3hXUGcvRUJ1MTFKZXdyRldFQ29aRzM5VlpMbEx3N1BlSG5qNEZ2K1ZScXBjKy9qcHRGOGVZb0FINzYvWHVTdGRZY1pQaEFPWDFWbEZwRVNhZXdRek9qWkpabVVNc3NwZ1Arb1hGRVNadUl3c0piTmRhVDdCTWNqWWpqYkludnlQSmllYW5DeTJBU0poaHlRcjJZZjlZaE5zWkk4WE1yZGJWTHVzUmY0QXI5WElOcGZ4dTZoeDNIeVNRYTFjSU81aWJSVk0zanNTbVJiV1pHcXlvTGNiaFJOaWxLSUE5NVVUM0ZPeTJvaWtQaEpUZ2ZZdHNoeUI5c1dsSW1nOTVlSTk5WmFxb0hvR2wxeU9aaVcxZ3N3cW42blF5ZUZmcUNMWVFSVUJBQWV2REVydnZncTRucWZmY3ZIeTFYaGpwRGxWQk13WmdKa01LQlBwejR6SWNOemV4ZlI2YzYzZisyeEIrRlIxNEZBekFBVlowREV1b0J4STY5REl5cG16YkxPRDBCUHJnRkw2MlNIWjhFQVd2eDFDR2YyQkE4MTZuY1N5ei9HdkRpZzcyVmxZU3R5UVJNUWlySlR3dXdNMklEL2lqbC85bDU2OS9FRytmNmhnUXFTMVJFb1YyNzZzYlhmUUZ5Zno2dXhkL0p3VzRpSDloY2FyZDFiK0tOajdQWEY0SmZ6MWZ1NFNCbm8yQi9EVE1YTjIzQzJvdXptaHBTcmEwRmdvS1NIZDVwcWtaaGxKd21HMFpTY211QS92Q243cmtRM1Jwc1U3Ukl6aTRmU3ZSZlpvcmhkWHZ1UERVclNvRW9JT3YrRVpmczllSzAxeGpBZ0VUU1dXaDNERVREYnR5eGljYU02WXdlMEtMZXcrZDRXNFMxOU9RWld1Qkk2V2Z6US80RDd2S0dYdVVEMGZzMHNPayt6Y3ZUa1ByaUpsOWpjeUVKN1pJbVZobmJVaG1Ocy92WG9ITUNyNmUxU0lFblNaTFRaZE1aekgyc25iMmpRZDFXd202aWR2aXJaejFhYW9ZdHRFWVdRaG9EUFl1Y1JDUjdsZ2owajl1MUMwWDM2ZFpyVmo5ZDRxbDdaQ3NvUTVZUmprRG9PbGY2WjJCRkk4cnd1eHdOMk5hcE5MN0VPM3lNTk9ET3BMaWV2bGI0RFdDTCs1dDRJNEprbEc3eURyRzQ2aHNsRDhrSmZkOXJhRS91WUxmazFSeUc0UFh5cGEvdVFQWHVPRC9GWGtFWjA4RmFpS2xTL2VaSnVxMytVdEtKM054WmdBZGluNEFFQ3FaaDV3M3hNZUU2ZHlWeTEzOGw2aE1JSkZmU1NIVzZJbW5IZVY2Yno4OWdoSWg4ckxIb2xvYXJBeHdKaEtpaFJ6TkZnRWw5MzBabnRnZEg4SlRPM3RPZ2lYeFZkOXQ2eHdqMGtKMzR1QU5td2p2RGVjZWhrOFRHR1hxSXVPdDVhWXp0Ync3Q0drMlhKa3VnK3I1eVNtTzYycG5JY0lOWWRYV1ZJRW5oN3p0ckoxbGJybnVUYSsyVlBxWnorVjJLaVNBY2dxRFAyV1ZwVDBJMlo0QXZWNGsySVJMMnVvSHVleCtyc1NKQzFaQ3dIcmRSQUF1b09uSGM0N1paYnNQUHdHWXFZZG82MkVSWEt4aFEvRTZIYmdlMlpUMENBdWV2MHpjclR0b3F3TEFnekZ3Y25NMkEvUk5weEpORmQ3RWQyMUp4RW15azQwOWExOEErOWRBTS84SUhXVU9oa25qdENrOC9wZ0VYVDNWNUc5ZWhaMnd3ajlLcGxzM1o4MFZLNHFjdEkwY0ZWUDVxNkcrVDBsa0Q4VjRVTkd3WWxtenA2M0pEdUxoMWRaY2Q4WVFMWDdvMXl5ZjhtdzBabEdPbnJ6UFRpdUVvMWo0THpGTFQ5a1BnV0JXOUg3a0xtZkZDb1kvZmxXeU93K3p3VzZEaWtZbk9nQi9Pc2ZmMXY0Tm9vN1QxYzhFcTFxZWJEMW9BbTVidE90UTlsWDJERE9jY2lZNHd2YTdXWTN3UTMvWjFydzBSZVl3WExBNFV5YXlrUHQvMzZ4WVRBUk9Vak5wc2IraTZpdll3OGw5cm5IeUdFdlQ4dG9jb0h0QmgwTUdhWnRTNC9KSWdIUmloY1liU2ZDaHdSemZGd1R2RkFSbWl4YTFMRkxva3JrTldiMCs3Yk1ZNzk3NGVFMEhEMGgrd2NSSnJlWGMwdzYyMTJiUW9Zamc0Q1lyQjFnQk5KbXpKanFuQkZINDVBSTIzMzU3TlU4OFRqMVZXWnFpdE50VHBTMCtZNEttZkxoV0Nqb3VGQWdzcG1FZ2ZnMENoK2pScUpHN3FscHBiQXRTSGpVaXlmMmN2Y2RrYWNLQnVlK00xNndZVi9uSnRzcGlubjVRZFFPdzkyZWpjdGJzN1ZWcTM3ckdkYkhkTWxyQVVSRlFtanpTSEFoMDlZYXltWGE4amQxSElYTG03bnVaT0p0KyttSVl4dmw0blVHbDZMRzdua2JZbzRWUGwwOUJicFFtN3piTUdybVVoTUV6NE5pT29jQ0JNWC9sa3FOQkhvcGx6SlNETFNSZVQ2dHJDUkpxV3R3Zy9oTDArcXB5bCs2OTE1MW0zY1BiNWR1bTkxMms4Q25JMUV3WHdqQXFwL283NHJRTDhWVm5uNmN3YWtqcTVuN3dkelZRRThOZVp2ditOTXRBSVRSR0YxR3BRb0l4UCtvalp3aXB4WXJCQmFQR0pRVnlzUy9BRmF2ZUYyaGxUdERpVUV6Y3RxcXdjWE9TcUgrUEYyaGFUQ3JEM1A2OFB1bitrMVVWL25CN01YN29VT0tINSs1UXBicnFXZStBZThOWGZNQVlyck1SM3F1THNVYklBV3dOT1JEdmFkRW9hVWlieUNYc2tDUnAvZnlEOXJDRnNlOWsxOEVaZHNqdzNza1VTODl1WFA2aVMzTkY0T3hWNE0wekhTUDBPK2tLSHV4cXlzUDlmMXZFb0tMSExndUlRRWowZmtDYlBVYlE2QWR0NnNGL3JRd056dGkzdm5qY0tIelloQVdCM2ZrZDZsR3ZJaU5zWlAwRmpzK2crVCtQaGx6MnVJMkNkcVZmT3RFbENTM0k3bzRiWlpMMFg1bTJSMVh6S2U4VlpOODh2dFJPcWhrQWdEWmFmRWJwTDdLTmJEbTd6b0NaMHc0Vy8zYzUrODBnRXNTUDdXT0lMd0c5Q1hxQ2xEQXlBU281ZDFlT0grcXJBa1lyQ1pwRlBpTlN1UjBlS2daeDByN1Z3Mms3SG1LOW4yRHA3NWdydUFWK3VlSzlNcHo0ZGM2RFFTRUJaQy9lNkdzS2ZjV0NVczlOVE50RkcxWlZBUkVYRXhoRTdzNGFTbWJZZW1kYzVaV1ArcU9rNFdRKyt0ZVhCcDljTnE3TllkOGVjR1hJN0V6NUxCNmlTUzBuZnZDNFdzV2d2RWhmMnU5RTRXWjByd3FCTEVjNEwvbWhSaDREcEF6OGovTmJzYVlaYkVzQ2NyaTMwdU9SRWU4bTUraWhseDlmZXAwVTl6MU1FZFJHaFFKMUcwendGNlhCMy9lRFExN1Bnb3FDcnFCSjNsczhLM2p3VTdsSnB4VmsrZnFKVVAxY3JLNSthMkxEQ244dUpjc3M3YytKNWM4Wmo5VWlUL0Z3RG1YcC93RWtoN1JaRTVsREtZQWh0L0ZKMWh1QXZJUXR3Y3lIKzRINVlNQzhvYkxheDY1VExUYnNiMGJjRzc4bUljbkxDOEJKZjZ4YVRwOFVmeVNXQ01pdkhNNTB2TFVvaTZOako4elE0MW1ORnA2RWN2ZUorcnJFMU83eDI3QVEzV1hZNTBqdkEwcmc1OUpaRjgvUGhDR2xFbG5mYUl3SnlvTHFUWFQzSWhyVHo0SW1hZ09CejRxeElZaDRvWVdDdHR6RE90SXZNRkxZdW0vTHNUR0Fhc1Q4V3FEVXFSWkkvVFNYSG5hbmNnMHJOS0UvV2QrL0JMVFdpOXd4djFMZzVlUUxueGNMT1hIcklOWVc4eWtLZDZVdi9SZUZoQkFkdHVyVzlwV1ZqVFFHb1BGNDNEcWdyMWxjanJjMWFNRWt2YzU4VGZjdVk4UDZzc1BzbUNrZG11WFNJUzA3V1B2dXRQVUE2L1ZaTDN1NGUrRW1tc09ucmN5UlUxTUtkSlRXTnI3RG5GQmZJaVJWS2VZTk9Db2RtRXI5b3dtRmRRK1psNU1uU2JSOVNMeFpPUUg5VmQvUHJhSEJMaDRNUDFaK05kckN0ZTlHWHNQOHBEWWgyT0FNWUwzcUpTaGtCS1Z5dU02WUptay9mMyt6MmtVOHhWM295Q2tEU1JmMk9zZmkrQ1ByeFpQV3ZIaVFkREJRNEVTUWs0c3M1WHFBQzVtZ0xacjZaNWVWbGtXaHVjVVgrNVNzQzFYL0FVMGliTStGUGQ1RlM5VGV3N3lHZE4yVldCS2xUcmlhSXdJWHJ2ellkVWpmbjJiUGROOTk0K0tZNWl3dFRpKzNiV01ERVEvZXZZQzBUazljTm1neHNMZ1VSRGJOWkx3OEVpMVBBa21GSGIzMTJqZXkwSXBMTTc1dElTNU5MQ1VSZ2xUcnRvZWRSSDQ0b24vWHlpMExiU0dUTU5ybXRRTE1FRmRSdDVMbEt2bGZiTGUrOElac21QS1NHQmFNODhGcUIwdWliNy9WOTNjYXNOeHdZR1IxR2lQNEh0b1YxUkRGbmhYOVlJVEpNSVRXbC9CZ1doeXpIUHlZeEp6UjNmT2wyRXB5Umg4blFDZkVPWVNRTS9pRjZzblptTHprVmlPZUtRa25OQVRPODl3T0NrNjBCQWJjYnY2VmVPVVNaWGxJbzBGM1hlc2FPcFZPV1lBVmNpL0JuTWd1ZGNjOEl2cU10QlFadHovQlN4R1ROc1hNVDJlMHFYdTQ3VExBdzNOVXZYM2QzS05ucGRYR25WSWVOZXk3ZERFU2lWb1NvcUZlam1BdjR3NTcrSEJaZnlLQlgwK1o1WE4rTWthNi9FN3YrYTlzNmxPUUVHelo5TFRydzFrOXc3RWlqc3dZMWFYcGtDcU00Y1FaclFicVBtNWNXQTdKZDVESkZocDZERmd6b0JaN0hnN2E3VkVleGxxZHNqYk9VL0t4dGR4dnlHUWlPSFliQ1hmaWxiY1U4M1JncG5UVHJKRll0cnMrV1hnOXBEVjVjempGNFhRMGdPNktVUDlzaHFPL0ZoOUtKdmJYcWFZSDNWZ1pYVjlrSXY4NGZaVXpLTEhUMUVmZ3NRM2tRTnl1NW1hREgwUEJYdURmSndYR0N5SnhtVi9ZMUZFWUtub2psbi93WVRnZzBWM0NUWWZ4cnVBSW1kV3l5NkdIR1NGek93ak1xK2RVTXBLRThTSHp2cS9ocG9nK0xPc3dLblEvcVRoSlVxcWxkemhUcEttTm1nRTZLRjNJaXFJbWt4UlRLSTNCbE83cTlrRE1nd05KZ09VTHV0RlprdVNmTjR1OUQrZ2l1WURieklUWmZIV2VXK09rRkJnNUltdzliMW5rSWU4M2l4MmxKbU1mUWsxVFNWUjJzSWRNYnpUWjZ1ZHJSaGhDZHdFbXBVb1FWQXROa3RkTk42RFduVmRIZ0dzUUR2ZE9ULzIrRERzSXFhSHVBUGc1aDFJRkhLRlFpNG9OZzJBNU9XaTh6K2xiak05U2kvUzNLTi95RzJ3L1Y3cGRsdjYxeG5GWGVZUlVXVWdvbkJCMUVYV3JwQytYZldVTzc2dllxTE9Jdm9nQ0lWQzA5elNZVHF0V3dGQk1XemVCT29hUjM2K1JSbUY3bVN6OEh6ekhLdThTWTN6b080SDdyZSt1Y3Y2QWNlQitlalpYbFQ4ZE44SXJaYlJ4ZHU0OXhuRmtQUkZZRHpTU1FsUGkxc0o1b1djSndQZ2xzQkdiWklBeXYxK01wUEFtbDQ5R0hydjhGMDI1NjFoRHFySDVGaVIwTnhmWTMyMWlMUmJ4bHdVVW5pcjU1RzdpTkNqaDRTa1VRd05LanQ0VktFUzRwMWZTK0lITFhiMktZaFlETWxpb3B1SXhxb1dlRFRmQ0lmS2lIRFIrOXB2Q01mSzErblNzb1VKK3RPQjg1K2RXVk5GUVJUMHovdVNablR6UXlMeVA2VllnbC92dHJjeXVXYndBdEtTeFovcXJOZmRRVXZGWjIwQStveWNhUGFOTGtYR3lOVDNjMSs1MVFwZVRlalYrYXV6ZVpwNk5XRzZDaFA4Z2NNb0FxTkJ3QnlzNXoxL0JJZytNYXd0bUVTK05qQVJnUHZtTWtCd1JSTndMaDUycGQ1MFZjWTdIWGdYWGQ3WjY1UE9ESmNyajJMMCtKUDhhbHhSNjNuU2tnQUdnZHpjSFVvbHFBT09rR29WNDkvZis2OW83L3FnQVRZM0x4L3hvZkY0eGR4dUtmVWlqWSt3elM4d204bndQWW1oNUhFdTQzeG80dE43aEk0NHRvZnQ0NjQ3L2MvYkYxSVVnUUdLVUZpYTcxdndEVk5XT1YyVW1pM0FzMVpYeTFMeWFpS0cvNE1MamI3YXRmRGwvTElzM3dSd0l3Z2RheGxjWVBPZTFEd0VMZitpQTZKNGowWW12OVRzVDhrZGZGOHQvTGJ5ZUtwaDRuQTlBSzBkYnBVTkc3bnJZYTFBYzhsVEY3MDBWNVJhcjdlaC82dnBCRVM5djA2clIydlJPUHRZSkdxWUdRYkxWLzNBd2U4VUNETHhDVkNBazNiU29KbDVXMjRaOHBXV01ubDhVbG1GbnpXV3VOSHEzVUhnQkd5emR1L01NLzJrTHNHVHpQUXJ5TTB0UXZiTEd5d2ZyUGtLdFlSd004NTNFdisvNGNseTN1dXdtZXJkeVhTREtqeit6RzdHdnhmays0MmwyOVFaazNBZDRHSndlejBKaHk2dU94c0FFbDlXc2JXdE9ZdGgwUFZEWUNCS0orbXJoTTJNZWhHNTE4MFpvNlNjTmJsUEdjZWJiYTExNjQ2K1REcS91RU1rWE9JZTNFNVlDRzVON1lpTmJ4WGQ3MzljUS9vQzFlQzQvcURwNTVmSWp5aU1EdEpDdWJIMVA4SlYwV21TVkluOFYwRFdPY2pkYldycUxJNWFEWTFqYk1xaFpQNy9lMldJcGxubjdqNEJQcnJTZXdSMkxoa3gwMjBmNG1Zd1VneC9DYkxnVjY2RmN3eWpzRHlrdWEvbHVNZXNSWVl6dlAwN2lUc3hCSkp2d1VVQS9ZVmdRZFhxcHcvQ3RCZnU0Q3Y5ZmVmZVQvTHpCcFJ5UGZ1M011alpoUnMrSjFWZzBTc21sWmpZOGZZSEh5MzJ0YVlwMUdLMFpaWDdBeldpQm9TVXg0TjlRa1BPbEhrTjFOV3p2d2luQmdrMmdvUEN2MVZLNU41cDA1QnQxYUFFZzFPRGtJQitwakxXaURlQnMvMDU5NGI5ZE9aK3JnZzUvR3ZBNjJiMCtSOGN1UzhTQnZSeWlOa0Zqb2VsZjRGam1ORnUyYWZoVnBnWkEyQ2ZNek5LT29wck5TZVhxRkNjQjQwb28rQkpvZGFnU0p6Ym1Jb0dkMnNvdTY2ODlqSlRiWEY3MXIzUUI0SUZqSkxiMjN0N3AwWkY2S0xxSnh0VEdNRFRwY280UjZ5QmZ3TU96ZTJ0NGszdWI4TTRJS01PakVYdDdJZGxieDBNYjVxREFib2o0bVpMKzhjVHh4YTl4RjF1V3hidjNjUFBwSk5YR3UxTDY5VnNBdzY0WFZ3OWRiYnhFeXYwa1hUTTBXUFVoMmwrd3lJNVFIY1MyckgrajZYVnBDdmgrbVdCdWtTTTRMbEljWC80SUk1SHJWTnRHczgySHlDUjdOQUloOGpZUWwyMHJFNXN5OWMxQ0ZTbzNkdytaQmJsc0QrSGxmNXdNdTFCYXFWeDMxb2NySnR3OFlMNzJIbXFNYUR0WHg2NndoQm03Ymp3WjRESjVTcXh5S0Yza3BOVEM2aVpNWFVCUWtvRStKcFBnRXpYYkpjWjkzWVhaTlUxTlBQOUJoVzFMdkFzYkpYVTdDbXRHNVZ4L3B2c3BESzNucnZ5OWhSZ2RkYy9CQnRVazJBRlpHV1RzTkhMR0Y4SWpDYTVtRlNXa1F0SnJ2ZEpaSHVuSVFjdXc0Umt6dVF0bFVtRmZtc0J1QXI2aElwVDVaSm93dHJjajIvdmIvdG1hbHRJSkg3NXc2aDBvRUlWeG83RUJWRHcrLzFMdWtHbGkzcldESndKeDlVZk9mRENXMkdaWFEvWVlqNjBwRmpqRkNzSkRXSnRhc2ZzQWR5WnhMVm1VUmhSYTRGNXJseTJoWlVrNkdQUDZOai9JM2FrRGhSS0FBMUlxK1pjcHpuM3F5a1RrL3Z3Qlo4b3FpUUt1eXpoY1B2QXl6eitIckxlZDR2UnRUVE9zODNtVUwydzh2L3A0VjhTOWJVVkRYU0RmdS80eDhYNitDYU5WSXkzdXVGdmtRL3BEMWZGSmlvWERPay94b0pvTlhJWkVONGlFSFJ2OWFQY2dNWk9UN1pueTQvSXlhaUxJZTRoWG1iYytVbll2bHFmNGpBd2M2cXFOOHMxU2dMVDNyQmxKYkw3dmxiOGZvQXRFbSs4UkVlVHNIYXFyZmtDb1ZVWWN0RHhoUGxMYmZwK2VNNVpibmdWMHJwbCs5a3pacmJnK0REWmo4ckFrNnJKbUN5UHBxYXNVTDJGbzZVWUJBZWFBaE5IVytiVG5oWEkxS2x2SUpHRWpBOVZzTXNWbXEvWDlxTTJTdjJmUGUwRWEwUDhBaDdtd0VtNXBlbU5ER1hLU0Q5anJkY1A0ZlZpV1AzV1QySHFQM3ozZUVQWDF4R2grUVFWSWZTd0RoU2pnanBJcjIxbkZtcWVNaFF2azhNdWJWN0Fuam1SSWlNTVZwbEovMnk1SWtGblVPclphL0I0UzhpL0Y5Z05IWVNFMmVDL0dmazUwSGl1TWZOZ0tTdlpKS0Q5QTd3SHFOV3dtWStiVE5sdXk2MVNMSGRVS0JqejJ4V1Vqd1IvYnZXNFUvVGI1UzMwNW4wQXhSY1J0LzFnWmdzcVZobzZ3U1oyZ21aK01COHIzcm8xNGZRUEFqUlZzbVNPTUNUbEZucTVmclBrbGZFQzR0WFNWcm5pYnpRUHRPVnBTcjh1T1c0TXdTY0hEdTJCNE5yRDcyaEh2cnVpZFFIZlA0SkFNOGcwY1dHcURNekZXSlpuc3A3QlFmQmIrTmcwQ2dheGUvV3BiM0UvSGFCNWQzMGprUnNkeU9ySEdwWWFtVmN4SnFoTjBsbllRcG1udXFxcFZQWGpNc2VodktHZUpJQ04vNHllUStYY1JKYUx0R3h3Z3FueENqQlRRcUt1Z05VSytVckVqcUJZSUFuSzcva3ByeVBtekhxNUxSampzZ2ZadGhCK0MyV2xGVDhQdnJVa2p3ajFrVUVYK2VnTVdnVmo4bnk4Z0pyR09KV3ZyUkVHbzhkQlAvemFjVkt6bmNhQ3NZdjgzZldiR2pBT3FEVEUzQ3ZpM0JLak4vYlRXK0FxRWorbDJMSWpYMDRLMXc4UjRuU2xXMEx3RHVJYjlmaW9id1BEZEpGdSt2MTVzRHFSdEcwRmN5b1hqQ3Y0L3pYRE5aeVl1WVpsQjJEQkZZS3lCcW9mUjNQem83WjlQUU9NT2ZHbjA1aElNcHF2Q3J0OWpObXJIWHhBQlIwQTFZamdWNkRoUy9PbkJvMGZrREh1ZUxlR2pPUnNyUW5jK2tJZG1JYmd6ampIRjlsYmt5VWpxNHNpVWFyWUNuWU52dkdMYkRmRk1ZeUlPcUJNYmN1eEJvSStUc2RiNlJqa0hvRDVzWkovRXdKckViRWs1WnkrbDR0Z3BGalFjS0VqS0V3U0ovb01jejNDbEtMZGtDWjZnZGlLRWQ0cjN4QVBLVjNLZnROY1BjQkI0Z0F3a2F6cnFXdkVoZ0FGcGpNNVlHU05CV0dXUUQxVndIQ1RYVkJiYjcwcm42a1V5aEpENEtmNklQZm9RN1EyTk9jNW16dU53VGdDb01xWkp4OVBNOUVHcGdTUEY5MFBEWDZSOFl4NWUyRFVCb0xPakNXNU40cmpMOC90a2ZwM0ZWQ0JCQnlhdWdzQTNseFdhMHV2WmsySWJVWWIvTUVGdGFEbElZMTdvZTdOWlBweUJjV25aL3hwWCs2VFBub0hPRXdHcmdSVGVHc0N1S3MvZVdpVm1zRkZSd2x0WHU4SXhHcmVubTRxRmtLaEJqYlFrY254MlBUZDArQkF6VjZzS01kRWRCN0lDcVBLeU5iaS94M3ozazduT0dHc29xb01oaUcwMkFBemU1bzVSb0Y4UWZVamFaRk96ZEYwWklzUUE0c01IdkVoUmlWckE0N2gyY0o1V1pucGJtSDA2TGxzT1kvRmcrVU1ES0ZtTURDQ3BSTkk4d3RkajczNWtFUzBBbkRDVll5ZmRNeURQRTBVSWlxeHZzL25kdkt6ZFBza2tOd2k2WE1laGs2MWVsKy9ZRlM4TENaTWR0WkNUSlQvNWFkWTR6eE9PZ1phWE44Q0xNdkhuWVdoYW9vNThEYnl1TCtQU0ZBTUw1Nm5NbTl0Nmg0UUNYTjFsTXRyVkxheng3b3dyaWkySmVKUVI5UDdHaWlORnNDVGsrdTg1RU80N0dPd2xzMmNoQmRRaXVzekNoTmtjZXJ6RW1pUEhnQUM2OUkyNFhRcGdseGJ2dFhCZW45VHpVVWI3THc2b1BwWUx1bTJYcGtOWlczYStpUDFEUEVER3pSRFRyVndLaW5uV3FwYkpsdjJZMWZ4ZFV5WGcrZmVEeEt4Vm9JSXprNUFtL2h3ZnlUTlVybEVCUGNncWNCNzdXUkwrNlN0VVdqM20rRmt5VmxnUFo5QkZIRTBBNEd0cmtlVUlsM0t6VnJhQXdwVmxHb0psMlUvT0RqNVJIZUNKUnhzZmtjcm15UDZFY3BLQjVneDB1SWNRQU56NXF0cXB6ek9jVHRiUGE4SjJjTnRKVnFIbmFYbWZtMTE2WEc1aHpjalUxZGw0eVBVTVRickIvcDJZNXpHODVPRDB1cEFLckFrcitVanJ5Z1Y3WXVRUUQ0bUxTb1NXZVdFaGxodk5pcDI3ZURvSTVITW92eWtqL1hXeHVxV2E4U1F5RlJkYkJkeis4T2hidjNEMXk3Ty9SYkJRcEU4YXlRMFJnS040aUpYVFVmdFk1YUppaFN1N1VtTk1vVkxmemhFOFBzRDZlK3BmUWd6TGM5TnIwNGFhUXlmYitheHNhMWY2LzBXUzN3eWt0UVZHM1lpRGUwam9uYjBETU4zVnNYZEZjQ29GaGlsNVAyZEJ5eHZJL0ZBL3IzS3I2OVhwTmhvT2JIWWk0OTdqWFJvWVN1ZEJZTzBWUDhyQjRIb2tiS0NHR0hxOVQ5Zkk0VDdiNTU0emtkTFVUZjhsb21ubUNzUXlYT3F4Q3pVQ0JOT3VDb0lBNE1PRnMwZ2VlK0dhV09sQmNzUWwrcCtZN2x4NGtQa2kxUVB6NjVVMTFBTlhvR2Rsa2l3SGgwUEhHUEhQZXhSRWhlNlp2TzRQTkJGQkFqZW5HL3NBcFhKbVhYSmIyNHZoWkd1V2QyRTdVU0IwODk1Yk4yZlNsVzQxSkdNYTEvS2lWMGpNUmVuK0xhRnNrTElrNFhNczJibEc1ZXBQVkhobXVsWi9zVER4SUZuYjFlQUoyNTBmKy9zVWtiNndyWDh5MGxWOTAwV3Z6SEZJTlRqeGIwN3ZPZVppdlFmQWdUM2djZGJOaTA3ZFNDNjl0aW1TYWlMTm5GZWZacWZqUE9CdUVBWE5qU3pHaGtwaEV4UDMrVWtjbWE0eEx3UHFvVi9IMVZtUlR0eXl3SDZzNjkrVmtybllQYUtqMXNMQWhIbmhtb3duRnF4ZGZhLzV1MmxERkNEMno4WFgwdFY0NmhZeDBSMndBZUdrTVV6QVpLclRhaGloSkVsT2dSYVY4Rm4weEgyZWlGT3locGFSYUtMMDExVE9LNXZuaEFyY0txM2lZaVZLREwrai9lbmYxcEdma3U0N01hODhHUUF2Mk5KQlc3SytTWlAzNkYvLzJRQUJBQm9BUUFBQk9RQkFBQThCQnprQ0FBQUFBQUVZQWNCQUFBSUFDUUlCQVFvQ0FBTUFHVlJvYVhNZ2FYTWdiMllnUm1sdVoyVnlJQ2czS1E9PTwvQkRCPgogICAgPC9CSVI+CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I+MTwvTWFqb3I+CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24+CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I+MTwvTWlub3I+CiAgICAgICAgPC9DQkVGRlZlcnNpb24+CiAgICAgICAgPEJJUkluZm8+CiAgICAgICAgICAgIDxJbnRlZ3JpdHk+ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8+CiAgICAgICAgPEJEQkluZm8+CiAgICAgICAgICAgIDxGb3JtYXQ+CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24+CiAgICAgICAgICAgICAgICA8VHlwZT43PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MVo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU+RmluZ2VyPC9UeXBlPgogICAgICAgICAgICA8U3VidHlwZT5MZWZ0IExpdHRsZUZpbmdlcjwvU3VidHlwZT4KICAgICAgICAgICAgPExldmVsPlJhdzwvTGV2ZWw+CiAgICAgICAgICAgIDxQdXJwb3NlPkVucm9sbDwvUHVycG9zZT4KICAgICAgICAgICAgPFF1YWxpdHk+CiAgICAgICAgICAgICAgICA8QWxnb3JpdGhtPgogICAgICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24+SE1BQzwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPlNIQS0yNTY8L1R5cGU+CiAgICAgICAgICAgICAgICA8L0FsZ29yaXRobT4KICAgICAgICAgICAgICAgIDxTY29yZT42ODwvU2NvcmU+CiAgICAgICAgICAgIDwvUXVhbGl0eT4KICAgICAgICA8L0JEQkluZm8+CiAgICAgICAgPEJEQj5Sa2xTQURBeU1BQUFBVWZwQUFFQkFRQUJSOWtINWd3Y0RCNFFBZ1FBQUFBQUFBRTdBRUFBRHdJQVFBSUFRQUlLQUFFQjlBSDBBZlFCOUFnRkhRRURBYmtBQVVkbkFBQUFER3BRSUNBTkNvY0tBQUFBRkdaMGVYQnFjRElnQUFBQUFHcHdNaUFBQUFCSGFuQXlhQUFBQUJacGFHUnlBQUFCdVFBQUFRTUFBUWNIQUFBQUFBQVBZMjlzY2dFQUFBQUFBQkVBQUFBYWNtVnpJQUFBQUJKeVpYTmptY29BQVpuS0FBRUFBQUFBQUFCcWNESmovMC8vVVFBcEFBQUFBQUVEQUFBQnVRQUFBQUFBQUFBQUFBQUJBd0FBQWJrQUFBQUFBQUFBQUFBQkJ3RUIvMlFBSXdBQlEzSmxZWFJ2Y2pvZ1NtRnpVR1Z5SUZabGNuTnBiMjRnTVM0NU1EQXVNZjlrQUJBQUFVVnVZMGxFT2tkU1FsUXdNZjlTQUF3QUFnQUpBQVVFQkFBQi8xd0FFMEJBU0VoUVNFaFFTRWhRU0VoUVNFaFEvNUFBQ2dBQUFBRkdid0FCLzVQZkczQVVONHo5RTlsc0hEbXZXMGJGemNhbmVoV3dQVUp6aDNSeExodVBBejJsckpVRnRZeHNmNnlmOHJtT2RSOWFsSTVieXY0aDFaYTlnSUNBOHBneWJJdlJsUTdjS0VGcTZkbDNVWndhdkxKZWdQRVE1VmdHeDJZQ1I0SlhhSE9vUXRVWDYrdUEvQWhBeUtMVEljblovMjZ3OC9oMjFYZHhQT3dNSmNWaGJYOTlEQlVyM1pBWnl2emZ4MVFBT2VlbmVUUE9BOFBURXFxZjFQbU9GMkpuRi91QW9WMEs4QnBUQUxhUmVQOGhJS0g2MWJvMElrWGxZeHZnenViUVV1NWtwSnhnMTgrVUVpb0laZGRBK21nQkh5U2c2T1VwanVPTkdKQ0c3M3hlcmdjUWt1STdNREorL2Q4NzZwSGpzb0RFNGp4SW9zT0cxKytaNDJ3NVdaeHhtZWQ1ZmgzUHoxT1dDRDdtU3JMWko3VzVpeTRLajVjVWdGUmw0bEVBend3QnV3S1NQWSszOGk3K2xjaU1hOU9jRFl3cHFlU3lkQ1VZZ0FQOFpaOFp0OHlBQXh1MncyYXlnWjgxeXFKRzRKaTk0TmxZWGp3ektRRktTaWxuK3FjOFB5ak5xS2o0SWFnQ2xPMGFWdU9MeEdCQTNPQlg2a3VCLzRmSUlrNmhNYzNXUmNlb1ZFNUpIMlZSYmJERzNCYTFkaVQreWNOYmZ5VkRaaE04RG43QUpmZmVzSk41WkVHL1BRRTVURTlkY29oRkw2RVBZZTVwYTlkeENWdTlVZFBxOWNPQjFSVTJRSEFJeGtibmcwOHR2em1MT1BQcFhGUFZycXVBZ2ZjM0JaaTk1VmgveVZPMUlKMlZPVkVWVGVabmhnZlI0NFBHNkxINWZyekdFVzFOcS9ZTFhRWEw5UEJqR2kvb2Z6Q1RCUUZLVGNsMjFXeUE4cnhib0g3N1ovRWFJR1hiZmVzR0VmUjJFTEtDVjZkRDlTbUFPZUFZd0FScnNwSGpneS9DWU1vUTZqWXZoaVNxQkVVb0dCci9HR1RhU3BLMmR3YUllb1FMUk8rRFJzZVpvSE9lNkdCMThmODRSSE5OR0tWQnpDck0wV2xwZzFWNTdkS2FaMkNqV0ttbGE4bVhDYlhOWUVnTkUwRmlQakZnTmM4UGg2UUkrbU1JVkRmSUI1YnA1ZTNqZDdNS0VNNFp4SGp0V2U0aThscEZVSklITVp4dzRUd3Bpd0RIc0tMZUloL1NiMkdCbVdqV2N6eVdFMVZtYnNxNEorWGpMcVNFR1JkTWd6NTBqUDhwMTF0T0NRWWpBeFRSTC81U0dXTG5TZ0piV2FVSHJYOWR6T1lWY1BOTGZTZ1UxUldJK2JpanZESmxNU21Dd0JCWTJWNVNvUXNLZVRkN1FGbnA1ak1sWjZ0OWU3U0ZYNDI0MFAxNEdiZ1pSNjJlaGVpclphaEVpQVdqay9jaUM4Q3Z6alVJYTZiNStuZmp2em0xQndiVFM5cFRlTTVVd25HamNhOXAyZ0pvUVJuQ1pRY0loWFN4b1o2aiszemdRZnIrZmVGdzZkYmRZUUZYV1EyZElDcCt4N3V4UlY5Mk9rOVRUcU5Rc2h1QXhHSWNNeEtVbXViTGEyODBqTXdkRGtkaStYTDN5QjVLUmZDQjB3YkZCRm9BUWlsMlV1cEVkY2k3YjlQSDhoNFZtc0VCRmNJeHV3bnREM2MrRDAvbWFhYmdkOThUQ05qUHVnbjQ2aVFSdEJjMTlrbnJsQ000VlB6bmw4NkEvUWg0dzlZS0VCanZYS3JQTkp5ODRwRDhOeWxob21jUGFDdGd4WTJPeFo3M3lDbGdMckgrSTk4MWRMTkkxSk5UM3pDbys4QnlYeU9OUmxROU5hRnpiMEV6MlBpUFNCMi9vN2FoQk1QdUxMWTUwS2dWdG5YR0xRN2RXUVI4ZG1MaE0rS2tEUVBLdE5tNGdOd2FPVHFWOTBXOEFJTzdabGlSaDF3bTVZK09WbDR2SDQ0M0ZaYmJyckNyWlEzVGdYWDdIUnVtTGdJbnE0QVVYcmtnTWdYd3h0QnZmMldHNXMzSHE3R1R5bUtobnNXSmlMRHk5NFBWYXZzYWo2QTFQd01xQmNYczJsZGVYOFRTM25XOHJrbDV4TXVvR3RXbmppeUtOQVB5K1RrUFhBT1pBUEM3ZS9yQUUwbFRDOHo1dlZIQU5lZWZFcitSRWd2OGpka1FHdWs0cncrREs2c1VNL2lRbDh1bmtubDUrbHIrQzdVeXV4NFJ2a2VwM1lFOHBJY2lVeE1vb3pzTFJzd01UUitMOE5zU0x0cHJBVzZ4T0ZlaDhyVVdneXFiaFQ1UE5QcUR6YTB3TVJuaGJRdHU0bTNqbHJPTnhOMmp5ZEY5VjQya2ExUXZjaFRPRDRUUXVxY2d4Uko0My8ybE1Td0xQbzFPZ1JkZEZXNndXajgyalBtVUFOMzBleDlDaThBUHNRY0RmMjBSQU1OVWNQaFI4VFpHMHdrMzNJMGgvd3l2Wko2ZXphU2JtOWtRWUFwYi9NbFdLeHVGT3hDTTJpUEtYMHVSdXpWeWc1TjZFcHJ2Z3laN2JCNjIxZDZqZk5YVGNvaU8yc28yZEVmMVQ2UHlBSURuNUhRQ1lUTGZyQkdOSTB6c1FoNXZ5aVl4SkxMWlQ3cHZUcGswOG5xdG5CY1M3eEt5aXpFdG9LSFYweHZETGl6eERtVWgxcGJhb29mOVBQWlhPMnRQemlodDZRTzhyV3dtUzBJTTgySFRDR2k2b0d1bDVWeXlMSGxSQ0IzRENWdXA5dGpiQkJjR1pJRGxjUXVjeVVTdHZtWTlTOWJOdG5KQk5UVnlmcW1ScG9yamVrZU5IbjdIVjk5MVdOMDBSVVVDQTZ2ZDgwL3hpYytKZUJXNDZKcHhuZkFFcks3amZ6Z0hmemlxOW96WC9GQkhIYzZ3TEo1WUJDKzFzSVFNUU15Ukt0T2M2M01SS1cwajRDdTVwSHN3cXdFdEg1V1BOVXhHaUtNT0R5ejFOVytRQzArcjN4Qy9QR0NSVW9YSzJ0dng1NTltbDlua2VLWDRjNTlRdmxwS3lOSUVzTlF2U0E1TW5ZU0pHUVU2NC91bE03WFRJdTZKRXF3b1p0N0N6UWR1a21pNzJKK3NzSHdVS1Jnd2d1eGlpcmRveTlmM1RBREhjRld6MnB6ejU1bnlNNzVsQ2NVcVU1dmk1RW1QOXRTVXBGZjgzYW5qM2tjTWREYzN0MTM5Wjdpdkc3U0dqbjVGZlpVencxUk9TbE9lR3ZRNncwbURaczcxcDFXRlZTaFFHUmxpSGgvTHd3bjIxOFhTeXM4a0NvUHlwcVpzNjlSUVNYUlRYSVQwa0dmd2tMazdyWEo1VDhWY25pRGxpVUh0YUZ4eUQ1RFU2c2xUd2VVdWs4NUc3aXR3MSthd1JvdCtqMldqc3ZZRDNRd2RXZHE4QmxKd0c5cVNxWGdKOG9CNm14WGpXS2dKS1dQdDBiMHNjZ3Rid2hud0ova09hWlF6SlV5YUVBaGVhYWVERzM3SGtpSHlqT3VBRWxPWlNXaHhmVWNMdUEvSCt3d3VPeHptcmo5djFGVzFYNXZqOElTZTUvSmlzWEw3aWdYelhIVjF4Rm9NTGVlMWFtYjJ5NHBQaGtuSUprZVQwSkhyNmVlZWFnMzJzdVRiSUVqR1RYRWc3eVJUZ05Xa1hsZWg3SkY2NVQ5RTNmd005TTZ5aDRiUExIRm1JVjRDa1BMU3hIWG9NbXVzeVlGTnMxemxzQ09ERHMxMWtjMnVjbkxSL3hBSGorc1dFVEFLVi9kZ25PdDFqZVhNWERoLzdab2RPeVNDTXBXVnBhM2dZbDc0clMxelBIQ3laTWtMa0FkTXhJQ252R3k1ZmxBcFV5MmVWc3lJYjgvdnEydTd1RnU3dy9KbDdyd21LbERLTlN0YmdDdmlFamFMeFZJR2JOdmhwMGJtSGlTS08xWGJ3eDVodEdmdSt0Tmg0NkZITXR4b1gxOTVLbHIxd3ExUEYxdHFTS2ppVS8ydm1kZEpzd3pST2s4YlpwN3R2bVBiYVBIZTR5ejVnZ2hURWY3WXp5eWZxcHptbDBkZnlxS3RXSHYzOFMraUtNRkladHNNWG1RdkJEaXVJYjFXdS9YRjBUd3JNemVZSmR1NDR5TnBpdGh4NXRMV0lZSDM2ajIzcVRkQmo3ajJtQ2N3TVZsS1B6L2FTanVmMmd6T0ZUeE01YU1odm01ckNzbENPdFNicU9ndlc5cERZZExreXNSZEdLNWplZDYveEFuWnRKd0R4T3Z3ZVZ2bVhWTFZYQSsrUGZnWVZnUEVDdzJWaGNTTGptNnBnSWI1OTRYTTZFYUpXbmJoSFFBd3pCMlFYbTRzbkI5S0hKa3VmRUhOM3RqTFZwOWEwSGpVa3RQZ0l2bE9xYXI2OGNRWDBZK01IN1R6VU9WcTRuelo0cFp3bmg1TlZKU3U1VE9pZWhZS0l6eG1MTk50TnNYMWhOUkMzUndTVndpSzhxek0zaGxRNkk4TC9CNFpsM2tjbVJ5Qm45NVRINkY5aUpsTkIzS1cxclNCRlJDT0owaDZHcjhKYjlTejkxckRSTThjNFRGYlF5M0psSHM2U094OTI4c1JLM2ptRFZzMXRvSDR3L1BOciszRGJ0bzZKK2ZwQzI5UC9ienlEWlh4d2Npem9zMmNyaTRkRzB2aG1uTWV0djNCOERDZmZ5RHkxbHFuUURVZlpxanNUTkZxcDJHRFZmT1VEbXhRajBVUFJZRkxmekZ1TmEyZWZiRHorcGFvVW9nNzdydCs1WUh0ekE1d2tQR0VaTks0dTI1TEZnM0lWTWNpRm1PSlowd3ZjVE8yTUtLS1d0dGdmNDNtTzVaeDBXVnRaM0VyTC9WQzdRMHJGdy9rbGNSNnl4QVZWbHNkR01OOUxsT2hEQ2FERCtmcnVycTZ5eVNqN1BhcVZ3ZGdsbnp5RUZZUEZsR0I0bjRkTVgyZUgyWi9SUVdVWW9vTmxucUVGNHRpL080dzRIdHRWeXBXVEVEVmdSaVM1SDl0Y1ZkcDMyOXlpYVdkM2JCRXkvdTR6WEd1czBmaG5PTXZSSTJtVGx0TDJlM1daUXBNbzZSeGJsTVBiSEZZNFZoS2xvLytSMGhHUzJsU2txeFNSSUtsaTBVbkUvMG53WmdManlTc0NDK0ZUYWkwY25FNDExY25aK01HVVpuYlQ2REwvTlA1Q2JKbm5BRWlTYjFDbzl0RGg3MnZ2YXIvYXlFb2tMWFQ3Q09kUFVnZHVFY2hWRk1JTUxSblhzaVgyV3gyaExVWmdPVWQ4bWY2SGhPakZOeXJ3dUZEQ3JJNC9WOXYyNGJBRlpobUxpSlRuNURpMVhoRmkyemt0RnM3cXR4ZTJNbjN1MjRlVmlBc3M2S0djc1dka3hsd2Vkb2pWcFhlTjN4anV0WnBpSTAzdmFzTStVSzJvUUxNa3RKNFBKZ2VPc2FxT2xhOVBTakhjWkpuRkNOVWpFb3JlZFMwNTVHT3R1bm9EUU42bVhuV1ppcHp0NXBKb243bTU1eWVTekxuOVoyQTl6UnR6UERENUdMaGZnZVMvR2Y0Z0NldHI3OXdQY3FlWVlNRlJURkJiVDA3WUNFRDl6L3VTWjR5dG4raUpjY2ZBWXJJQVB1anpYS0RUTmxYSFlzUUZMS09scTlDS0oyZlFrMXhVcjQ3ZXFseEhlSEFFU3RueXUxOW5ybVVTZDhpQTYyU1BZVE53dXBKUCtjVzJPczYreWRLMVlxeUJ2VkRUR1E0SklidGNUM2JIZVB1VmtYai9Dc0xVVXgrMzFUTzNxaWs3d2F5K2hwbkRPZmVqUFM2RGE0cUI2OHJrNzM3NWRrcjUrbklwdE9LVHhVc2svMG83ZlNrMzlaTklBRVJnMTVWbkxoN1NhMGtLcEZ4TGx2WEtaVTFvWDZTd29mTmxnK1A4SEJDQ09nYU1DWDFQbjBKblYwLzZtWlpzZ1prazc5a0JVamdVUG40bnQ5MzdKbFRkeEVYc0dNUnk5VlBFdjFFUHJ5QWRSYnJEbmY5MUg1OE1ZQWtKSUpTNjBibEJDb2FxTThQRWNtTjVMQ1hWK3pGWDVVcFJxdzdianFEWG9YT0hqNUc5WTFyRDRIUWl3Mlg5ckNkK2wwbzBvTzhtOGU1b2xqQ1d1WTM5TlArWXMrTExlejhTV0xJdFhsYzArTk5rNngyME5jZzk4VWxFM00rQ3RQQXk1OUV6bk1YWkNnOHpWKzRlWno1Q3hwaWlVMVJRRnN0OG1ialpscnJEbExjWTNxVjlKa3lWenZNV1N6eGZ5SFNmTEVhS2pzRmM3a0dORWppWk9Lcy96MVV4Y0hQN3Rodm0vZUQwT040UlB2QnpnNGhRR05VT3huYUZjRjUvSkVLUXJiNUxFcFpGaHZnNlBxRXRMUTFCOGc5eHNDc1d3UWc5d1ROYWFBbXBKZnM3RGFpajIrSjNKSi80TVJWNlR5UFlVUjVYT0dPeFV3UHhiUHJnb254QmZBMDlWd200ZHh1Qkk1OHVhNk5OUkxkNmxabThSSnY4ekpRZkZCdExGZ3ZmaXg0MzVIUE1XdmYzU016VnNyeEMyNW5hVjEyc0hxNmx5UVpBNTlTd255SDB3RGtQWXdOM3dLM2lDQmVSVzhSYjFDNTJQb1ZObElROStGWmI5Z0RLVmx6aFN1RkU3NU9DRVV5VmRPTGg2bkE3S3QyTXlIQ2Z5UFU1Q2xHblFRMVBJQW00VHBTczBaR29YU0RlQkxtd1FrZitOeDcxNEJYY29rRUZXZ3ZoVTZEN05VSzdwR2FrT3pncTZyck80VFN0dVJUbDIydDJwQnUvMmxpUmMwRkNQODk0MDVRTWtMR1hYMjNEVzN6eVplak90bVJiVnh1Nmo0ZmZlZ0xhcVhINXFLT2xacUt4SXNCZm50RU5GRkwxazRuQjdjdU1taE1UUXNtMWpsZy9RdUZtby9YQW52RjV6dUlINkhURUpjUnlBNXBZN2pDREVhWHU1WU9zejE5Qm1hUVVpRDFmVm01eWdRWTA2dnQ3d0dQV2VDUyt1Rll4cnVJeTNJYXpNSURWY2NJdzk0V2t6eDlUS0IvbUtQc0xtaGxhend5NVhXMExjVU1FT20ydks0SXlCN2N6TUNQOGtVM1JVSEExbGtibFBGV2tpOXVkUWRaYnljVGZvMGFoZHFYQjUwYzdES01TZU9ZRWFOMXNrdlJScW1DT1dQemRmam9BUlF1UHZoVlhYVXFHVCs5dFNBT05QTlVXNE9MWW9Vd1hKdlJWanI2YXlLUEkvbU4yZ0hPNGlRRFdkLzlsSkhDRVRLLzhXd1g2ZzJIOS9PZnBDU2tJVWl1cndsTTlsNmFqOUZ1OTN5d0thVm1RM2Z0NUxJVjB1Z0hiZ1RwMWEwVU5iOTRtakNWUFl6UmRPcGhGbE1uakdJSmIzM0xMcGloTDhVQlgxbUx5OTZBbW96RzRSZVpsMlhrZUdXVStVbmxkVzhMRm8vWmptUjhQNzFucWVHK0xrQmcwd08wMllNdjh2K0NiOVhZWXh0U1NhRmNqKzYwYUpwN25xSGJ0dTliNmFlV3NoL3JCQzhpWllmdEhSMUVzb3JjK05KV2tsRlRwTUZJc2JGMm5iMkZoVDdOTFppTEhQOUVZZ0V5Vk1Eby94dkhzVkt2TkdhZU1Ec043OXdza0hkZTBlL2lzeUlPQjFiUTJMVG1XMHZnalFTMHpKN0czRWVjSWlYUkFRZTJzWWtpM0VjNGdrNit1OU9MdCtTTzM4WEphRzltNTFnMlNEMWNGakZKSUltWjQra01OTzRMc200QlN5QlJLSy9jK0Z6S29mb3dNeGNNQzc0aXdyaEdJSkRRbW16RWx6bXo3T3VvdEo2S3JUeWhFWk8reG9wRGFUZ1I2c1VkQVltN0ZscmZPRFlSZ0dtdkRDOWtNcE90N29SbzloamlxU05kUHFaa0NoQmRiOS82VmtGK2FvdFlEZ2I0b2ZHRW1WVTVMdnVXVkdYaHNDOXlPejBuRVBFQmtIYWZPNERwei80YkZsM2VSR1hzRmJaSXRyUks0NkRnUUkwb2ZOZm83ZjNCeG1hcEsxdmdsQSt2ZlhlV1FBL1VkRGJvcVR0U0hmTlkvTE9panU3RGRna3pSU1Qxc2dXdE5xelc2Sys3SUtLZkxwNzFFMUpYUDh6VWw4VHQxN2JYVmEvOGJLbU9xcTdYLzRFeXBaVm5CbVNSNm5tbkM3SzU5TVNma0ZIK3k1eUpJRzRTYjAxdnpmbjJKMU9mdWVud3F5VjVKK2JOcU1IWHlLWTRObU9MSFhOc0pqRHFzLzhxZXRwQXZpdk0xVCtMdms2VjV4Q0M0SVc2Zk93UnA1MC84QUwrT1F2R3ZJdHJQSEQ2SnZvZGVRNStjaTBHdHRTblAxTnRCYko2a2Rhb2RSZmZWVEE1UDgzZmgzQ3U2MkZuMDhLQkFmc1lpaTM5WDl4QitXdGsvTzNVZmtPcE5aTjRjdXhQbitmNlhOcnBYQVNDZDlRM2lwWWFwSHBzekNWVUhSaWtkTGQ1QWNNdHRyaXJiWEFubzMxbk5rK25ReHpJRld0MlFKbkExc3VSOWpreFo3eHV1TXlTZFEyNHEwV3ZXZFpHS2NZanhQRTcxd0NjcGt1VjVJTE50S2RWRWdXaVAreCszM1lKVVczQjFsc0VncFBEQXZjZklObzcrMVJOcGk5TjBXRG9nR0lLOTlFOUt0UmdDOE9ReWFXdDVBS2xBODJzVFByNXl1R25wV1FaQm81T3FVblhlbVJmSXNqQzFUSmx0ZkVxVTcvVXhaUnNYMU5EVWFNZDRaMDJNZHI5WXEzd3d6NzNWbzJlNWp2bmNnY09aa3NrQ3NLLzV4VWpBcmRSa2xXL09idXgxRVBpQXU5Wi95Y25paFVQWnN1SGU1WlJTYVZlNUNVZTlaVk5JTldiZ3VXRUNGeFlCcHFyMjhOdGhDQjFYMVROMDlUS1M2c2ExOHhSSkVFZXdjam1lQWl0SGlBdUZyZUEwak1jdHFtSUc4YzRrdlhNWlFJc2NUcWliUitpc2JVQ01SdGRFMmpDZiszZ01MdUFnV1ZVY1dVOFV3U0pDV2VFcGNzT2xRS2tNcDBrdzMxYkJOWHEwUE9RY2lEQ1VTWS9aakMvbklQRmcrcGw3REFYUk9lektxTVYvUWRLdzVWTjRPajJ4V2xRV2NtTHVLeUFEVUh1bHhSem01SVFZQzZuVnczRDIvR3djbFRJVjgrSlExSVBWQjJmTnphdExrREgvTzlRRGlQSmhBYXg3YzNibHhzcG5TdldUTWowUnByOTVsVzhValZzODEyc1FBLy9YcFpqUGVXZWRZSlRIcUZ1Z3FzT1l5WXJJY0dBaWs0VU0wNGtGQWttRWFMQ1ZFWHl4TzVxRldXN3pIRmYyeXhHa3RsM3lFOS9PV3ZGdU9RSnI4UlFqWE92bHN4ejVDTDJuOUFUWUpkZlFjejlLdjlNazR4dm9vNFJrUEtQV3dIeHVVb0pEK2JVamk1VGM3a0FwczIyQ1ZuWEtEamxQZ3dBV2swbXFLUmxsTEhkalp3QU1lTlpYOW8yZnAydTFlWCs0V053aTVyUXZQajR3cGF0aXRFOExBb1BMb09POEt1Y3pqMnlsb2dDMlVqS3ZmcGx5U2lGbnVsKzZmam1IRGhlVWpic2ZDL3lTam1CQkpVNVM5ME5vU0pZdzZUQ2ZBZUxXU1ZjZnhLeU9nMmVOUGI1RlJOVUp2UTR2MEgraTdmdEc4S0xZaG55akU4cWd5aGpqcmVCMnR3Wnc0aHB5ZTNIbVp5OHBzNUlrT00wV01qS2NpamdnNjZFMTgrWE9wdjd0U2crcDFsTi94RG9qYmtia0JPaVg4OGVMQjZFUjRoMWZkNXVlWElQQWFCWDRPNlEzQ3drM1BSMlBBU1F1d2p1ZGNaUkdaS2k0cDNnQ2F6dHNVZnpqLzdKREpFbGhWR0NRTlVZbm1aQXVDNnUxTEpqRmRGL0ljRmpxcXJRK2h1cFVwUW9FamQrczRKU3ByNE1sTnoyMTlad0gwVE0yN2RzN2xCcjVMejR4V3I1aXc3aGNReFJDMnNkZFRjZStCSC9ia2svTEtWRUNuSkhKcVlzc2FoRnJ2emM2L2FRNS92NG9YOG8ybmxuNCtpRG1tQXYrOXRDellIc1FwUkhaVTg3N1JFK0hzQU9RbGlLWnFDVHJyTENkRjArN3NhRVVlcE5ubTdFajRCM2lOQ1g4OWNOL1BUZGcwS3dPQzBjQWtndTFubU5jY0xhRUxJbFRtRzJFVW0xdmtjUDVubk1iVGlYdHM1eVhNWTFHRWJiaHJZR3VPYzBFM1dIeENMMFQ5NlVSM2MyZ0xNRG80Y3Y3Q2t1MW4xdFNPNEQ3dWV3aHhZTjZuUVRieFUzNXNqVjNKU0NqODgvck9ZMXRBYi9mNnRMR2NyS2hBRXBBeE5PVlZyYkNBQ3krakhXUG54OGNkVUgzd2trdFJOYkJNYzNJK3MvVG4rRFVSVkQyYm1uelcrT29WZE9kdzlTUFE4dGx3Y2JFMkE1bDFqVndjL1NDbGduY1hYTGhCNS82cnh1ZTAyb2cvYlZ0YWdzeGt4QURnOHdYcEJReEVadjMreGN3dmw0L3lMSGtmN1VhNlpDYlRaQS9aRzN2V094VlpFcElDZzd6SkZIdjR6bHV1RmlXZXNNdDRmVHFwZDhtTzhWaXVPU0pqcVRNOThOaVpXT3pKY0dSNTAxc0dxTllqQnZuS0pOemt0bzdDTURJWDVOeDFoVGJJZDl6UVNuTDZlZDlGY096WnZyZXZMNlBGMkZ3UHJWeGZnTWpETjM1MjNZWlBOT2VpNlppalcvL1JqeC9zWFVOZ0I1OTh1Z3BwY0ozVVVQQnZReVZRUGxHYmJXQVp5OFh2eDNubndDM2RBbXMrazJSMTVGNWs1UmprTWFwRHNNSXZhaHRwZGRLRDBoL3lvZGg3V3RlOWQ4N0RsTHYxZjdGMmI2MTVOMnA2d0VzUjB1ME5NdTVKR2t6NUdoRGU2M0lOVVB3M1V6dU9xcjNqY245c3NmMG5qbUQya3BNb2FlMUdVaHc5ZktZNk4vWVQ5MzY0OWROaTNodVZXTllwK3hGbW5weXdIbmZPWnptRzBuVkF1U2Y5MTV5VHY2bGt1WG02OFB3aGVlOUN0REhOLzRUaWZTQVhtQmRxMXdzYjdYcXIzNmVYL1J5bXlQS0tXMlpNVmJPTUs2TkFVZ3lLVTFzRHhLL0xTMDU5SjFQcENRcy91SFZiZEkvMDBreXRXcDc1Ny9kcGhDVGlQenRCcFNlbWkrT1lBQmdtT1NUVTg5TTR3b2EwYzM5b2NhZUdEV3pGd3dPeTlMb0xTR2QxZDhGRnJVRU5rOEYya3ZqMExUQnltbXlCSk5YMUZBYjJJMmowQVlxVWtKem9BNnFvMVhkajVWdURRb1J4b21PeWJpYThLdjNmakk4RDlyb3Z0WG9jMkJqRm1FWTZvN0dreVZPek5md0llVTdhRDZvbWhzSk03ZXhsaTdtdERkU3ZuY3FQdHFqZUNPZC9rSWhhcWVFVnIxQk9taWQ4d2lRVmh4UmV4SmdQMmFrQWtNSm0yMXRnTk0vSzJyREpDVWR1R0FqN016Nkx4QTNlTjU1NVJrWFlmRGtVY1JQdDlQMTNJK2ZRMmkyTXFlQ0p5SXFvVVlrVm43S3FEOWNKdlZ0WWtZRHh2MEk2cVhVV1dhd0VPUjErMWg5cmlmdmVSQlkvb3JNS2xvQTVFWVhXN0hHYm5raTJualh4a2YydTdmTXpPVU11NGR6Nm8vckNZS09GVDgzVDU1bWxlQjFaS08zSFlhK1Z3d2x2TldaTUdRdThtOHJyMEF5bjc4eGh0Q1IxWXR0UUNxdy9OU2o1ZHM4ZjJrang0MForVDNzZ2trU2N2UEt2Vml4MkFWVm0wbEJlbWh1SnNpQUZyYjYxVVF1UE9OWHlHa0ZWUFVWbFB2dmF0WE1YbVBIR3l4Tkd1NldZd0NBM2pMRWFPMTBiT2lpd2Z4aXZscDRDZEVOUy81RXEvSXN3UkpKRlFjZGltMlJKbzh0OUZyMHRaZXRwcEJYNHVEWXh3UGJGK3V0RXV5QUxHd2VYRXR0M0VmY2dUSHN1OTNuOUdQVEs4TitGaHh0TWM0Y1ptbGhSMW5NMi9sMUFoR1A0Q0FnSURtOVdidlFKdjBWK0Y2NDZZVnJlb3ZFdVR6Mlp6bDFqOFcwbGZHTVlUUW5BWTBpS25semVKUXp0cWJHMXpyTjExcGpVNEtzK080c2tTMEx5UmNTTCtWSWxPcmkyeGxvNjFOTzMraHZNdjVxeVhiSm1WdCtIKyt6SXJpUnRaamhRSVNhTlZ1Y3ZVMHo5S3dZK21MYmNGQ0dxc1J1NVdRWFdyTkZHdlA1L3MyR2x5bEdVc3o5TGM1d3RiUW9aLzJOUHYxbWpLa3p0d050dVVZemV5ZzFScHdVcERSU1hTS0xVZTlxamFsZzlta01xeWVnT1lUeVdPSXFkVFhINkdPOXlrYjI2ZFhMd2UyYWZrUWora01hSGMzVjJRZlBreFJJaEhZTlc5MllrZ1ZHNmoxa0wvektYWGVTalRXVGFhT0tRaG1aY3BTSDFOZzZaK0tscnNMNTRQRmlkVlprUEVBa0JvRUxEdGNyNWRNVFUybnZSb1JLRnBsUmpPYzZyV2x2SUtMV0NMbWxOaHRFMzZmYnpJZFBpb0xjRlo2ajYzdjN1UXd0ZnQxODQ5djJNUU9KT3l0aGtZVTZROE1IYTIxUzgxNTJSYWIzanZhcUZibG90aUpMU3lrSXNYQVRyUVJPeWtUTjRGS1FKb0crczJDeTZuWlBjNnRWT2FIckREY08wcXRGN005YzFwNTFETGRRbjUxWW5Yc1BvR1JOU3ZMWnkxaWhtdnp3U29SU1A0MHlmR1Qxd1plYUR1VnFlK2l3RmdTSldTNnhDNk9rK1hCMjdwazhIcEw3dzNKWUxhaHJwQjhzd0tEc2ppN2pjNDBsSTJhZEZZaG41SUpCZU5CcFZWUHQ0UFQzV1plUjF2a3hMY1U1NVNiMmpIMWU5cENhTjVETkN4dDBaWEdlaGg0R216ZUxHbEdubVpHa2c5MzEvemhjWlBPV3BqWGhLTUdDL1pLcWc3K3o2Y3AxZGwvV3Vpa0QxTVFITGlBU1JsWHVPUFRsTUd2Rjl1cm1pMG5EaTArc0hBUC8wUHJrTk5aU1N1bjZTQThBREpzYXM3VjVkcWNFU1NYYmJWTXZmOHJ2UTNlNnRDN1VoZC8zVmhCNVV2SW5tK1Y4SzFhTEg0dGh3WVpFekJrakVSeC9SSmhCVDRSYjdUbFJ6RmhUSDh0cmN4T2dPK3RMTU80eFhxa0hFbDBTTE8wN3AyRy96cG9XbTVPc1dNdllwV2xuMks2cHdOT3pmOWdYZDFXL0U5d1k0amh3a0dSajhoKzJSdHh5aEtSMDJqK2tweHo2VTRkdHNnMysrTng0Q0w0UncyT3dDMlBtVGM5YjZmVmY4eW1nVFhOWEJHZi9LNVhHVFdYQ3NjZW1odDFaUTAzaGttTVJFNjl6U0xZOWVwTlE4YzBSZnREVHNtMW8wTStIZjhLaS9wMENBWS9CMUtKM0pZcnJkc1lyanlsdGM3bmxhL3U5cXNwZjhXU0E4TzAycjRmV2lxUXg0eVNqVjRJTzB6YUhmMHVqZ0E5NlZ5Wk1WRjUybGNGVU9IcFVmREthQVVkcE1ZaUN1bm9mcGxxR1JqR1JnTHphcTBVempwSFRhTjljZXE2OVVxeU5DTU5Wa0xwUDRBY1o5K1NvNDAvUHZHWnQ5eHp2Z2o0L0U0bFNxNWNvUTZGWEd5QU9scXJ2R1N4dWJDalNGUHRPZy9qREVDR2FOajFackltczhuU3J4NzNqMmZ5VEwvOVJ5QUNDTVpXQklNanVjd0VUeWJYaXZLUm0ySUFFTkh6dGlWenFiN09MSnBlQzlsaHpPL28wMWQ3c0lrRVJYZThPaVR3QmZTZjZNc0FyMzcwd0JvaUVybVltMWZJY0Y0UDJmRnF6dFpyc3BUckN3OGIvbjNVUWZnUFM0N28wc2twcjNNM2tMSTV0VkhjZXZpK3plWGl0bjRjaUFrU1ViMjNrOEFqMllBMnNYb3lmZk5QZndrMVYyeHA5VEsva1ZRbTg4TjV4U2VDdnkxVmtZNFoySUtzS29WeFZTYlMxWUs4ZUFlT1k2WUZVdTY2Rmxua0lRU2Y1eWNkRW9kSjlBZHpkWWQyTVBnL256TTFFZm1FTlg0MjdhSzgwT0pMT0l3QllJWG9QWTBGUWZpbkJya2pvblY2aU5MSVZzYmVrU29NbllzS1YrSVM2S1lhaXptYmg3azhOTnhLTEJ5ODdzQ0NES1p3Z0lEbjhoNW4xQUlnamUvbkNTSjNlZm4wYmhYWXo5Wmp2bkRWdHQ3akh1bFhFSytoVnVSZVdaZmh6TmgwM3oxVm5LMGt6TDgvSktVSnd5MC90ZmFXQjVFSnZZQy9mODFSQ0hnNVU4Y2JwVWlURjdhSDlrMjZ2NGFWK0htNUcxMUZ6TzhZMVhtTXhmYy9aRnlab1RLZmlWZEZCU3lkZUtpSE81OHlDZnVWWXArc2RPc0FTUjlpdUF6ckVTd2dnRlZlL0I0Y3h0N3pmelhjYVlkWXRhN01qLzhyNlppcjVGRXJ0ZTdGZVBncXJUam1ZU1N3QmUxeWFzSEcxdFdoM3dNQkJsMzlQR2RiYXZ1ZXBhYnF1NmpiZ1JzNUlmQURCRm9kRnNFc3Awa1dkYkR0T2RpNTB3cG1JbXZWZDcxNDJZYlBVYmVlMk41Qzc0YU5sU0ZMT0VGZlVVVUpQRk5Gank5RUxNeCtlVXRUejJCZDJrQzhEM0pTR2VrTHBBZUYvMWR3TnhHdDN4dnY1OWM1RmQwbXI5aDF2T29qdTYrNHVBRUJJUDJ1N0s1V0VoZlZ2VCtWVXhqZHdKTHFMbG9ZV3piMGNYMER5NHFmNzBWRzhEcjliMG9UZWZyS0FXK1JSOUp3WEFCKzNDc05SVWVUTFZPdWIxdXduektaSFRzdmJPRmh4T0hPQ1RXS2JNOWttbmFscUREYmxWUWU3SFpISzkrU0tXZHpIL2ZoM0FhUEFEekdCRm0wRnRWdnE1bVZzTXNZT25xN1VWTUpuSWd1NDVBVm1VZ3lOWVA0T3d6cFY3SHU5bUVSSk5Zb0NvZWxhUVZ2Y0tTVExPaE02VUU2RXFDL1IwQ1dFdlJ1M2l6SXRjelhUK25CVUI3TmZtZEJYUElaMjJ2WUpuT3RwUWxmNmlwcmN0SVBlN2xrR29uWitIZWxMVU11UXE0TFp6RzJCZXB6aWRqVGIzME5WTHMzNHpPYXBmVTVRQU1Jbnh5RFhSUDl1LzlHcjBsTHlxNER2QzhwYTd1Rkk1U2thMGZxczlSdnVWZ1EySjUzM2M5RjNOdnY2TmtJVmpCTzVvdU4xNVpPeUk0TG1RcVloMWZ2ZVl4V2cxN2Y3eEExRHl1VXJ2cDNiVythOHBPTjM2aXQ0STFXNjJIQzVidmVSQzZGVGdWeEVDd1hqMTRHSEJLTGNBYVJsejEzMG94anZGeVdXazBvOVg0eHJzRkVxMGF5VHRNWW9NeHpwY1NzdFFiZzU0WlN3REtycDR5Zm1wQVZmTWFXZWFRV1J2dkwwY09mM1l4RmY2TnJwTUhHNlU1TTVaZzl2d04yeklPbzRrRW41SjNzZDZNTWxJM1R3V2Fla1lhZWtXdUpnTTNVZHUxZk16MFhrNmYxQmZodXgyVVFpRHBqc1FleUU0NEgvMjBrVmt2MTJBS2tQZllFS2NwdlRwaXg2OGRtMmxaRU43ZmZaaGxBOCs5U2lrSnNjWThhMFVFSDA3TitadVZGS21vRlBHK0x6dnF1ekE2ZlFzOEtINkM3cklSaGl3ZWN6OWVUR2lWT0gxRkRqMmI1UUVOMUszcjBvTkJybVMrM3NwYmQxSWw0cStNeGl1MmN5SU1UaCtrcEhPVU1OWW5BVjMvT3NtYnJpaDFlckxzUEQ1VEY0NzVqTlFXbnpMZ1dyYThrVkt4eUZIREhOaCtDRU96bVRqaHl4L2RhTnBKZ3RKdjJVZzZKU1RYZDhXZ1FRL3VSODBFSm1KcmVSN3cwdkphWHZ1NDlOSUxjMGpTakkyQ2JkaEljdU5VNXFuL3ZYTHBnUTY4TmVudytjQlN2RDZGbGg1Wnl2am9odVNYb0xBVGdsU25seUJNM3cwclpoQ3F4ajU4TEZraHNWYUluKzAraUdLN0NodXpDMHUyV21zTWc0ZTRqbjBlSEtXc05pMFp0RS83b2NLRTZ0cXVlKy9qOE1QejFJNUxRVWFnelFhOS9IM2g1WXhsQ01kWHFjTjcwMk1TTzV1TEVneFU1cVlBckhEVjBudDZDZzBteWVBRzAxL3A5bmFFSnJZUDJrRFJjd2QzMnA3TldOMW05bnRURVdraTJjYitpU3dxQWNvSUlaR1NJNnEyYk1mVzZ2bXJjanExVGtTK0wyOUFJbkN4NnlLRWpHSnRKRm02SVE1dkc2d1YxeEg0VjdNT0ZzNGZneHpnSmkxTFNGelNyWDVKYTllRkJ2bGlkL2hVRnRQdWRwN3o4YWZ1M2lzOWRWNElZUnQrMnE0NjU0RkdLNlhmY1ZYRHZocC9oL09FTDFLZGVZQjRUNm1uaGJTZjFUbEdoSUk3M1FpdElyMlZwcWdJd1pSU2pPcmRuVTcwYzd5dWgxbzVNS0F6V2t3eWQzNU9lUW0rTC9XVm0vZVAvTFBJUU9pZldWM3o2aWI3S0hXRDRTZnYyK045cEovRDZaQ0Q0UkdJb3ZraWd0RXE5V01aOG9NcldBUjFyWEhKcW9td3NlQjRVRmVoVGVnQkkxTE5kd0JrMUs2MWYvSmZIclVjSit3akR3dVpqVnpkMTZqanN1NjBNRUhyeWx6YUpSMGFZOFM0eDROQjVRUTdhNDU4MnlUMU4rZjFDRk5lSCtpeFNhdnl1VnBlWDcrVmU0TkpMTjZYZGthSmdveTgrRW56MnBBZWdGcEZUVFFUOTU1akxIMi9qUGRiS2JtTFVQekVHcUt0eUZoTEw4WjRvd3gyZFhIcXBhcC9TYXhCQkNyS0VrMkczTWdyMEpDZFdIbVJZRVd3R1V2SWFJRmx2bHdEd01qR29oSjNlelhvazdaZ0N5aS9VQ1hiUklVN0oxbWw5TGo5NHFKbllZK08ra0xBZXl4OTYvTE12OXVpVVY4cWJhS0h4K0VKT2s4T0lBb2lickxiY01zNXZ2T1ZINGRzTnMycWpYYi9LamUrVHk0TEtDZ09rdHVyS2ZqZ00yT1NVREd3RUhueGd0MzlEd0NxNm5RRnR4KythQXJzeTVaZ2VhU1Z0T0UyYklxaVpGY1oyRkdUbUdEc3Z0bm1UTzJpR0Y2d24vM1NrRTFPQUpnVUI3aUthTFNGOThiTURtQ2pZOTVWNGcya0NhVVF3QTJ3WlowNzBkOXBTNlpheHd4QXcrUzJOd0dNejJvYXBFdnhWR3RUb1FHWnF5ek8rUmdvMld6L1l2a3pDMkNTbnZlaEVjU2ZXa1hDZDBGOUxTTHRSQ1lqanB4VHdOcld4Y3Jya3pQZEVCNUoyZnE1Z0VISWNROFhZV2FFWjlaNUtmOTRXaDk2SVpvR251enhKRSs3WitkY3JzR09mOUxWbTRjSlh6ZEdnOU83ZnQ0VlBKTkVXOGpzanFWOHFNbERiUEljSHVMMnhjR25pc2lhUTRwbWsxUUs0b1BnSEYzRkNnRnB3Ui9sUGtwR1pKMzJkSE1BMGVha2pmRm1PaWxyd0tTVjU0ellzMC9GUDI0RXlSUDlUY09aNHQrVVdRNmNtTG8rY0xqSjZNSnBlMjg3YzM0VEpXaXA1RVFtWFBZQUFQamF4TE9sYml4bmUrRHpQSWlTY2IxWllVUnBFbU41Unh6VU50N1pFMzlEWHhTZTBXanJEbHBkNkZKWmRNZjVnZUVnSXJ5NWtEcDBzUHd4Mmx6ZWpZWkgzSk5acTFLS3V6VjQ1SmpsUktncVJoV294Kyt4citKODdycFA4OElPdHJhSW5MeWU4R0pSSk1aSldnUmVGTE5XS2FJQlVRVGpCMUI4Z25NZ0JqNkx0WEwvTVdCN0FzdngyQ2R5VHBCcU5oTlpqWDlMdG82c2FHL0ZPMHdLZytRelhlb3NxTmQxRGIvOWFIMkxHMkZiVzJZK1doRDgzVitPZ3hPUVpVUFphKy84OFZGaVpBVHljODVicVhpVGhIMmRtdDFsT1Vkc2FmSnNoMU1HbUpmT1RHRCtWekg0OUNNK0RVeWF4bDVLWEdWbG1SOXJYcStuamtTRlRnbG1qL2VDRGpSVzN4U2t0NDVmQ2ZUYmMrcnRvWC9DUmNuWkhDRTlVbVEyajdDWTZEM1B1dFhGd3JSSGQrTVdxalFBVjl3N1RwNXpjZktPSDVpeFp6NG9pbFBIY0gzMVdIdHYwelJiL2ZRNW1zSGcxMEZxTzdpbEV0UkNiUGFVN3liZ1krdmxtMGdsWXVWY1JNc040cVVjdGpFa0c1bjFFQi9BL2w1dWF0Y2tIRUJNbUVKWUJWMDBZVDZBRzVtWHphL1RMYTRrWExYWU9IaTRSSThOc3NwQW4xZElraFAxbGVtRW05d21laDBlNUFmNGpUUGYyQm1lalQ0Q3ZvdVdVbE15UlRrRGRoN1NSTm5sKzJMaEJ6bUQ4dE1PNThTVjZKYWhXdVhqNGgrNlUwc0s0RG1WYnhrTFBzamxIRGhRQkc0d1hRQkxjRGpGa21PY1BuUHliTitDQXQzejBGcVlmWGg2SWpDSFVraU9hMTgrcmxyRkt3c0RpOWtacXpRejYzQXB6VU40RHRlQ0R3ZExIcFFZcDVOSDF6T0sxSlZaZDZmbW5kSmQzcThNT3FVWWRsQkpRZUlsSlBRL1hLR2ZIUGdSa0FheUJhN054djRienZHQUJwcXlSZWdiYXVDUGJEdXhYdGQ2STQ4bzh6OHpHYVVIVUFTTmdYdjFhOWZWOGZ4SzR2SGFWcDJZUHlXZFduSW9CejE5TWIwUC9VU0llbFZPL3Fjb1paSmFTVXAya1crZU52Y084bDBnTEdtVjZONlEvRDQzV0h4RjhuMzI2VWZnTjcvN1RRR1A0ZFcvNjB6UnJwaTVGYVFXanhNL0wvTHFPUjJmT0NPWUlrSTdWMjMzY2JOZzdhSHVCbGcyYkVJbGdub3NhckNBQ3RCMVdzODRST3Q2RWxnSCtZN1dJNHNLcCs2WVRGL0t3U3RlRU8waCs3bEtNbWRuRlJoUUtvZGxLRVljNlY3NlRucDdDK0Rjb2E1Y2VFdlM0a2VyY2xvSVczSmlSaEZOeXdKbVZNeCtqZzB0ajhmRHREUWNrL0E0S2ZPcUQrNUVLVU1paVBpQUQzeUpjZDJvZXZDVmNvd0J1TER5K0d1blY4OE1tZUtqSWt4d3JIMTREVzlzMTY1USsxN0ZmZzdXdnRMcVdMU09YS2c4amNIdlM5Q28wZHJ2UjdIWUZGUHk5REI2Q3VwRitYRkdRUERQc0IyMEMwK2t6dEdJVDViYkJ6R0RhMGJTUXNTNE1KNmc3eDVrZlZ6eTNZYWhGa3RyRmtKdUpyRHltNGlkOUNLcDNQWndkM08wdXRndXdmbDVqWXlYZHlxWFdTSW5heWJjamIrNXNaTW9uSmRiV1F0eGJ6eUVTWncwMXQxVXdjZnkrQ2VJa2hzY0tCck1EbElBeVJod3EwVVVTNmdoc2ZhNmE0UHowYU9DNVp1MkNodVNGbDk1RzVsMS9WYTZrN0lIT1FnVUNxYjNpMzR0M2FhZE5WMmhYSlJyWWR6NFh2ajVxQTdtTlJkR3Z2M1pJc3dzU0M1MUt0SE1SdEEyLzh5SkxEMTRiZHlKQWFlZnkwaWpYTUltK1pvTzR6Q3cyUkorZUd4S3IxUmRiMHBob2ZZaFlnWS9CNTZPeXpwcTExbHB6M2orRUs2VGlsNURPR3VKVGxUNEtML0oyMEZKUnlDdmpPZXhWMWUyV0NBQmR6M3NMS1FxWVBaeGJDeE14UjhnckRDajMyZ0ExTVd5S1h3V2RwUVV0OUwvNnh3NGsvTXFacUxSeHEvVkxtN0VEWXY0bjIvSDVUdGJ3YlJ3bldWbjBkd2lpVnB2L0w1bjlHMS9va21yeU9USVpSSmZ4bCtLbHB6blZYTHdhYWF6V2ZYa3FueEwxWVZqRytHR3U5LzZBK201dWdyRVBQQ21CejBaZHdRRVN4WEJKOFNNc3BvQWYyRXdjQ0xYaThZNyszNnVxcG15bUJqQmtabkVKUFB2U1RwWGIwRlhUU21pNzZ2bTBnQ1lPQnNCdS80Uk9YVnNZbWNiR1RTVkxuL1NaOE1BM0hHNkNodkk3Zml2WitSWVlYOUFMVEkvUUYwaXJrVDBFL3pqWVJEekp0S3l1a3RWcjg4ZmUxSmZ6cXFjLzF2V3VubFJFUk9aV2ZvZGZHcDVybXcxOWZ3WWY2OEIwNEMyWG0rd2xiU09oWXV0Y24xK2Jmdy8xbzJsamM2WVgyU1RaSXZEcGhqenZxTzZHZGlQU05YdG5sK090Y2lPUCs0WW5RK3Q3ckEweWhhNm04V2FhWG1BVFVkdmgrSFkvRldjdHBuMlpON010REdyYmlLa09vTGpadFFPdXZhd3l6Lzg5Nm9xY0pNWmZpempabEkyVTJMRityTC9yWHFvYVBIc3lJR1duN0hZRGc4RHBOQVlUWG1kYUdZZk1XTlh1L3JWUkljUWp2eUdnZ2JxL2kreTBPOVdUYnM4c2dzV3Fvc3Nod3lpWkxSeXJQZ3F0cUVvV0drRjVoMktzYm9wUDR2YWZXOXdIaGg4RkpDaGFybVFxL3JxOXhEV0FvcW02Y0VUc3puejBwY21Sai84dUJWeFI5U25HM1I2YW5yYkZteVA3OXlEdnF5eHVHTUMyT0x4RHEybEoyUVdwK1NwN1hWMDBKZUZ6T0JteWZMQkkrWUw2S0VOaElwVFFiZFh4OFFFTUlpVzZMbk5wMWt6VllMWDFNamlEc2tMTm14WnJXWlFxQ1F0UTEyNGUwbVV5WEttRCtQdmo1ZktkQTZvc0gwUThEN3dWdCt6aXU2ZTNFZHlNWTI2dTA0dTVkaVpGT2g5c2pUUy9IYUt1cGNubmdSQ3Z4dEpHL3luVS9hUG5xNnlOSFZjK3VWLzRiTzRGU2xoemhpcnpLRUZqNFVDLytwMzlGNXlmNldTZFI1a2hEdHRYbG9QamZCZjNMd0ZmWVJrL0lQOGdzU0gzb3BmRzczL2RnS1h2cHpCU3lvWktvd3RjcVpFZEdlclJxTnZJYW9FLzZnK2IweS9xbXA5WkhwRCtma1c3ZkRKWm1UVTZKejBzMmY1VzR3bjdPYVpEVGlHU01qTEx2Sk1hZTZqVGUyU0ZhcUNSL3p3TFRVNUtkc2h2TnpiWGxMQ0hGOWsyMVhidTJYMmxCYThqK2VHeFNGMU5qSFJyUEE0bTJIQ2ZSbVo5bzJjd295UmFvM2E3T0lpK3BDRDBsREsyYzkvTkxJZlZYbVVGNlh6eG1hTjVsa0V5emJaOHgzcGZ4MXJWSHZldTBXL21zK09LMEV4VFFEYW94YkwvRFhsVHNnSDBzU2owRDdxL0Z2eTNRYXcrdGxLdzVXV0FYTkNRTEMyRWhvNmM2b3pVY2FXRk02R3JFTzZVd2ZhZmpIaFluK3ZJb2FIS05LVWRDOWRZZnVON1F5b1JMT3JoY1JvajhGZ1NNazJtOXBqL2VYS2tYeWZkTnhiUmdTYVFtSDJXVTBSdW80akVUSEZ2YndRTkdjajFQRHdEM1VrdUYxdnZUMk1ycmEyNUVPSGJZemhQZ1pZRkQrNUlabU81Tk1PeVozZlYvTSt3WVVibmU5SzViNDRJR3FCclJjTHNRb1FLaGRrdTV3SEFpenFOeGhLNnpJZk82d0srNzAyYmlPajM4VFBzOHNpMm5kcG4wOHo0S0xmS0xMTHdtNm9GN01BUi9iS0NGamc2QUdjc3hGVjJ1amtKMlZ1RXVZUkRiYXAvUmtRTnIvZkpqb3BUcCtEVEVYV2pNMHAvVHIvN2ZmRFBUTmkzNFRLS25HUmN4QU1rbWtRSmxvRHNMRktzN1ZmVjJjTGNXZ0xZYllSQmxZZDB4c3BWaWwvbUhzSGhPWGZuMWVnRHRITkI2T2g4aGV6c0FqU0VLU0VyeUExTlFjenJDYm1hU3M5U0pmWVczU2tHelF6NHJSSkxoMkRDYUNrc3g4YmIxc2JtbzlFN1h2aFc3aHJ3S2RWbmJCd0JNS284NzFFNWZ0d1htcE1xNGRpVmRaSEEyekZJa3AxdkJZMEZ0TjVOWENoUWlkY1Bja0ZYWGhtdmhWdyt5N3V6M3lQNExNUU1xREkzejltajBiS3ZJdFFKVVpvM0RzaUIrdTVxSnpHNTd3c3pIR3JpR0ltV2VINVc0bThmNFgwSDZCMEtZbWFNeWx1ZnpjTUMvbUtzRDhjV2xKb1RISXd4elpONFRhUDU5dHNaSHRGZ2F0TjhYdDVpZUV3M2NDUnpJZHdwcUpUT0lMejYxRlNaL1A5S2RyWnFyWi9vRVppU3dKMXdBMUJ1eE4yRWZvOVI4M3ZjU2Y1czhnbzRZTGpWbXBqWVlKaDhJc1Z2UWQrb2VGcHoyenhLN3I5aGpTVUhhcXFEazhkcEZqaUxubHBsQzl3VWtIUTI0clN2VGtpOS9HUDNkcUx2YkFVUjNhclVHUzBaTU1iZ3ErSFlUSUJKTnVZd3NzUi9EN1gvRzcwNDc2TStqQlNONC80Z2lvcnhWUUtJaVBVNVlyMkE5UUxqYkwzNnpJSDlUcGdHM25NMDFiMUxxZEY0RXU4WTREZVpTUDBXTk5YTGpreGw1dmZVNklNVmNseXFiby9zdFF4aVRnNkQ2QktjUFA2VFdpek5lWFk0UG1Ia0MzL2xpT3ozWHA1RmtLNzdSOVFhNk1yUkJpSHNSdzN5TGkzQVBZdlAyZ0JVeW9iRmFkOGtzK0doOFF6MngyK2dybk4yK0JzMEJTR2J5V3A1TEdQOTRiQjZVQm5EUENsTmY1WG0xUmNLeENxTzVZYjJVNkRpTXhkRHU0OUsyQXFGTkpCTDNTR096a3UzeERVT0d0bXpxMTNrbmd1YVk0RVBudXFhcXd6ZUt1a0lBSldlYlBMNUI0cTNtdFJTa1pzUk1hQXFUaEpUY3N2c3hyMTE2ZFJ6L1U4Zyt2SmxSN0x5ZEthNldEdVNNOXJoNWEzV3M2bXRaZ3NXdjB0SlQweENscE5idnpNV2FHZlJLUFRUamZOU1FTdnQ4dHFBa29raWRYUDJrblkvbHh2Q3Q2R2Zkenp0OUUvUGxqVCtRVm5ETW96ZnhNL0tTU2dlMDdwZnErU1pBR0JBUjFoWUJ5Qk11R2N2RHp4VDA3NXBoUS83cXRVaWZlVE9HTXBXVitBZE5xczZ1REt1YnRkUytTL1puODZsM1JXVXdmUlhZWFZ5NWsvcUhHOWF5WUtWbEVEckw3SzVUeEl3L3p6bUE5elNJbENyVG9tK0puMlJpUzNIdTFneXl5SUMzMVU2UlFBWDI0cG5keDdFaU0zaTJVRWxKVFpUenMwWS9uekp0R2ViM3ZvaUN6d0ZxTlZXUWhTa0NQT2ZDNXd5ZC9xY3BoajJkK0dodkxBTGVmQmNnMGdKVVFrbVc0WGVBVlZlcDhqTWxmSFB2WVU0ZS9VNjhxNmpiZnJKL0NVNk5heHp4R0tnemovWWpWbHM3VmhWVm1hQVluVjIrb1FPQ1JFUHJLaktLdURWZ2NLdStKK08wa25rMkZnTytrbHA2VVdnTEIzaWl4UU1ZTVVUa0l3Uld2amZMNUpkVWc2V0V0cGlPVEl2MGVIYm1tcEtab0RrLzFDNmMwa3JITTZTcmdzZklLUXZaNXdsUGszV3dwRTBWMzAraEhLRkQ5WUYvSjFYVTdHRlpCYlNiTFZiekxTT1NxaVoxTXlSWTdiaUQ1QUtFbEU2c3dIa3dHOEV3R2JSTWhqQnZ5RjJKcHM2TFd0cm1vQUJDbGE0U3hUMSs1ZVBxQ0h1bUc2andpMEIwMHNlOE5ZWjc1c2RTWXlIZ01BWVB0SGRUUDRiMFltNzNFQzgyajNPZm81NEZOU3kyTzFWYWRNN2JxYzZJeTFUWFJRdU5WNm1VcWl5djZ3S3N4ZDVSaCtlQVJpRWpkNUFvUkNEY1dvZkpOVGlZQnZUMnFITnBNd0IzZ2l1UTlUdHRvUVVaL0ttS2JrR2VETFJKL1RrdDNqMTJIUnNzK3Q3WUxXTC95NHh1RElzRmwvcllMcFhKREFQQUpZc1c5UTZidXNiWDQvS1gzSldvcGtXbFV5a2VDQmZIeHBmeVZ3d3oxU054czRDT2hEbFRLNmgxSUJoVVJFZ2IwZkxPbHJ4dDg0bkF5Z3p5ZmZqR0JuU0JUWmZiWE42RU5OalUrb2xDbmRtOEx2S2Via0lhMUc4R3dKQWdBSHcrUS8zUVIxazZPSXpRUzdzcUN1SVU4K2wwWGFLQjcvS2dGc2lDT3JzMnpXektyaGtGemhubUs5SVprSzE3eEcxdHJWZnpPcjlZak9CZTgzd1R3SndRT2RET0orMW1KaHQ1S2k3STRaRnVUd01qYjlxMFRvcW0xMzBtTWlkUnY4YjNYbFBWV1Z1SXBaQVNvdjAzVFNxL2M2UkxtUk0wdk5YZWcrQkdQSUtabWxvTDRTdlRXUUVtSGFwNHB3bmRuKy9XOWd4c1R5MXRzeVY1NE9wazNTU2JIQ3VXckdpbytHaElNRTFHVjdRR1hCZEhJR2dxOTRoSlpJWTJpS2tsUzRoU25pSzJ2WnlOcEFGbHJqU0JXZnE5ZzA3ZUtYdWtUOVp5U01pdS9rRHVCQ2poV0RTSEp4QjFJSjN6N05vbmo3Nmd6Y3lXbVM4YXNRZTZLellPZUxESkM1QVVhKytvUUhnK2lCV0tCb0pWRFd6WnFGSnJ4Z2FHSjI5a2tOd2VJWVFVTWhoUGFwdU5HSkpWNDN4dEFaY3l5ejV2ZEpCL3BDVFhJMklkS1pjM1FWdG9KRUZ0SkpMK3NmQTJTWk0yL0lNTkRKZ0ZhamtTWXNmbkFiTlFJeHMrODl1QXRKUVNKV1dFMDNVVkxoN2hLUWhiRHBqMlRUQngwK3k4RXVJZjFrSThqamhkSWw0MFpqMVVSWTUzMjhlTk91UFRoNEtKWlV0ZU5oYjhVem9CZ29PWGNNN0dJOWJNNDdtMU9yVnNuOTY5SVRnTUlMQWZodW9iZFdTY242eGR6RDFPSGZob0JKMlozNHlTWS9peXZIVlFaS0VqenR4YVlVdHFJaEh5Z29BODh5Vy9EOVpHaXZsMDJrZWN6OU4xSC90NndvOENtQ2UwVXg3TVl2NW5ScmlsdHNhcnZoWFA5aXdaL2lSaDk1QXRPajRZNjl4ZXJGWE5aTjlVdUU4VEQvUnBaRllXc0t3cXk4cHp1Z3NyaWVFQlpXTmh3RDB3RFE2TUhyT3N0M1Yxd2phbjkyZzJSUVJjdHY0SXlsbkhZSC9hRnJZNk9iZTdvY0dtMjFIYmYyQVhjSnZrRE0rU2k1bkZxM3BZbXpzcXI4Q2N2cDU2NHB0ajhRTkg3cGl0S1Q3NTgrMzhpakQwOGtCeCtnVHZnK1plU2o3dm0xUGZsZTJ3TURKZlBWYVE4M1JQWWI0SXhrWmRrMWZSazVKaXEwVmcrZzNydHJJR2pxcS9YWVFCZU54Wks3WE1PK2NPYjVjSVRudWkzWHV6OUEwdUtWTkkzODJTekVUdmRMeEo2MVJLVVQ0aWxZemRWUitGaGZGak9hS0lVUERpNjBsbWVCcGJ3Rk8zbHBMbFIyZTFWY1JNemNiOElWK1BsNVV1ZlhBaFcrSW82eTM3SExKQVBFb2d4cHZ0MEFWc1FpYkZ3VHE3QTJJN2pzMXZMVmRrS2Rtd0JrMjVGem9zYk1KYk1LcFUzTHJ2eFJMZmpWM2gvRkc3VFRFTXNReW5JcVJRdEJsdHBsSERVUTNkbTVLNHdoK3BxZ0pGV3FsNWZzOStSZ1VFS0duMFZhMU9GVzFvWjhmMGhXRmVkNzkyVGJUdDViZWp4amc5ejRoeGgrVkwvRVpYdHZ3QXl2a1htTld3dzNMNXhHV3BTTHlaT2c1OEJmY0RDUld1cG1KUE4vckFZSE5yNDhqdzZDUFp0TlJ4aDhBTTB2Mzg4ajBZUVdVcURpb2tuYnRNdG9wV1pVeWNpOXl0a1c2cUdwaXhkeDVEU2p4QUptdk1HSnJxM080K2hNOHRra1cxSXZoME1yWkFWSTUwT2NVQUx0b0JKa1FvVGtNeHFyZlAzNVRGMVJsNG96NS9sN0dKOWY1cHhOVlZXdVJLaUdTVkpTdGRKa3lxN1VEbkJwUytiK3czekdBVTNCRWlheDdLMVpLRVY3MHV3d0xKeThWQTlPUTZ1dGxaclJ3WEdJcGZSZTN5VmVJSEJjVmtIVmVwQnhIL3BaTHRUeHRhbUM5TThZUFQ4cng1Tkc2MURlVTBCdzdmam15VDYzUjVrdHQ2STR6Tk1MWmdPSHZsWVk5UTdhOS9Cekc5QktOWTJUV1g2M1ZEd0lZTGIvVFQrMDB2N1VVZEpiMHlYQi8vVXVSeElTQ3FYWklsV0l1RUxFZzdpck5PcWRUUGJETUtYS21nbDBXOHUwL3FqQTBMaWJ5UlJhNm4zM1VBaTBYYTRueHJuUElZd2dJN2FadWF0UkhqOGtxMXF0WW00ZnVXV1hDWHlOekNGamtITlpNRzBPNmdjM2R4S3RCK01SRDdRelJvT2pKOUtOckxzN0d4SUVydDBKQ05kbHlBVWkzYlQzZ2RudWFJdzM1eU5DUWd3YXNqdGlwWk0xWkNXbEliOE1lMVFTaTJ6T1hockh2OXVCREh5S3VEV3NpRGV3OU9ONEMwTlJJQ2NCR1NYK0hid2srUW8yOW9sS2VIN3gzYWpCT3pGSWZ5L1Y2M2x3S3RxNkQxUElrc1pMK0orak9HaGZCTlJlQmdnVlcvRkRLYkpxUXhVazdQaHExL3k4Zk9zV3J3amY1eTdoSmtYbzRMQW41bWlTOTBsOU1rbDZCbklBUHNIOU5wVUg1UThxVVFvdTB0OWdQaUZqVHlxNTd6aTY0TlBKR1ZiLzRCTk9laVFZaFNxWWpJNXd0S2xSUHhQM3NkYkpWNHNucUJCc3lmUEJDd21uUHp2amtacWc5UkNFUmFCdk9GbzFjTmF4T0FTV2wxajFGb25VWTk2N0o3em5GMGtTL1I3RUVNdng2c1JGajBnbkNUQWFRNkFpVm1pWFV0VXNBcUVkM2tnejRzUFI2SWpVZnJOMnl3bWlEN0tMaHN2Mkp4Mm1nQmRvZHJCVXBMZjg5ZklnMXBaN1p0T0VpbGJsUVRmQVg2aTlpbk5tMlQwRzQ4UEJUOEJjVzRzK2lrTHArTUJ4NC9BcXpXNFRrbzNPdWdhRmsrVGpxWDBwanRxR3JVRUUvdHZsdFRWVlVDUlppejllZS9FNWgrdkdHMTZJSFVFRUI0UWhnYU41aHJ2THVSK2F5a3ZzQnQrOEg1d0hrd0dsVXJab2YxMWdpdm5kWUFFYVNlV1NoNXU1Nnp6U0dLU295RnNjV2hYcHNDcDcvSDF0U2pOakZHWWNXS3Npdm50QTFqMzFyTEliSlFxcGRqWUwwNloxU3ZpeWRJKzhhZHpidlVnR2krMVlOcnB5NXRKN0NzOEFiNEdWcndsdHFQNXpPS0tHZldJNUhXTnRZRnN4R1RaQzNnNlJnZHIrSmVlRDJnNmc4eGFkQ2RQOHkvSHoyTlJXY1NrRnlWZ1BRMWpkRDJJLzlhYk5OanowRmlWQkUwTncvTCsxb0FlWnVYSG1xR3dlU1QwdXpCUXplb0N3VmREWTVRR011QlRjQXJENWx5VlZ1UWZqZGhLL3draksyYTI2U1BMeWI4Q1pMZVA1ejVYaWNxQ0ZyeUQzbktiMG91MTQyWTFQeTBBVVQ2WEF3V1VscWFuZ0lpRytQZW41T1FNNWdaVG00ZERCbDY3ejBJR093WXlXcHdXV3E2ZVNsMGFvZzQ4Y2g1Mk85QmliT2dwbmVWTU93Z0pYQUZOSEJLbWF2aFJzeWM4b3EzWThXZGNIUHQ2OGZSWW1aNHpoWjZHbGhtTFdLSXArNGY2SWVrL3VCSWRCYkhxSWJLa3NIcFFtL25MTVo4SE85bmdyN0VaTThEWjZnaUFKSjcxVGY3RGtEQkxDYkxXSGpYdWRoZGF1bTJ5ZlJVU2RFeHpJUWU4UUNjamZRRkFjOHF3OTFUSFhacVp2eUluNngzWmRmdkkydUZDcDJiUVRCSVZ1MDdsdTJZU0FLb0FyY0F4R1A3RU5DaDZscndSbmRqKzN1b3pMOVQ3VjdOZDRWSTJINmpVMHh3cEtoNlgrYWdOelRpbHdPWEtEZDBIeVlJQTV3dkliNUxPek9jayt3cmZ6WU5FQmwxYWQrUmJaa1hVMWp2ejNKVHEwSVJ1dEtRMTdmNEswMEQzZWppNHdpTlVwcjFrMmh2YVdhQkFkMnB6VGJLckkrN1BTN3hyK1o3UGd6cDJ5QnM5anJtOE0rL29hbGxrdkViNldXWEJVSjFlZTZGS044Z1B3bG9LaWc0T3lVenFxYmpOWEdyamFSR2ZtZmk3ZEdNeWY5NkVCYXRaY1greVE4bmpwOVJZemo5bmVlTEN1QjVJbWJ0bi9FZDBnbXhFVzg1elMvN1RrdENoNWwwQXl3U1pJS084VlpER1JFUU9TNng1WDdnbUlIWllNWmEwSnF5c05WV0E1WGo4SlBzYzV5MEgrd3RYNjZUdnluY3pzZGV2dVZERmsrdFBvcHI4Szd6NmNkd1JiOU9Ldmc0Q3BFaXRNR0FWU3d2TTVhbWdsaEpnZTdRdmVHRzNTZmgzMHpBcWhXV1F1bkNXcDVnZURGZGE2RUdtdUFIZG5LNThxZ2ZWcUJMWURrY2srNU5TMUpKQ3BocDhZMEdjUUVPbGh2WU4vTHo1R0ZBS1lPQ3NlRmNzbng2anQ2OUIwSXpKblVBWDVIZzR1RTZsWHpydXB1Y2xGWG1HRnVIWTBDZnRJTVAzQ1VMa3lkTG04bDF2M0oxVUNFdlIwMThhSklHZys0L3hHM1ZtWW1ERWtjTFdvQ0NCTUdZZDNaVmlpQUZJK0wveDdiRjBnWGdLeUkycm9DTnVpM3pZcFd1ZUIwb01rRkE4TmFZWmxpTnpXMzcrZE9qUnlGVHJsQUQyYnplTm5FNzFnRS94YkQycC9zZVlES0ZnTE1Ea2FKOTZUM2NCQ0dWeVovcXlmNVIxenpHZ2FTU0YxSU1NU2JVR01jK3pNUVBWa0V4MFJIeVVHMlltSDJzd1RNZmJtbmZ2dkZjMnhoRTA3eWtPQ3RrV2hpQm5GSVBpVVVCNW8wdjVCVEQ5M3dtTS8zVGEwYUtKcThEbitFQ0FUekgyekhma25aKzN6ck9hWG9XM2hqaVpVWUM2UXA4ak9rNUptM2JNUmIzUTcwWG96S0VmRGVmUGV3ZzhSVUN6TFZmTXhoZFppUkdvSlcxRU1GcHhORzMvYTcwQmUvTGgxL3dlb3RxNDN0bEYvZjRqUmpsb1E1SkpmWHFSWDhheWRyZmtoZzE1ZWdrQmxaeU00cmNaSkxjMmNibnhUeXdJTkNqa0hjVkZ2YTV5eHhJbVptcXBqSy9FKzVpbFBZaitvZk5Oazd2Tk95ai9uU1BtQVVPbHk4dGF1RGJ5dEFXUXNNU3VRNGxtNGpJUUlmTmh4b0VHTFlLd01UMFgycWk4a2drZUZxUG5YTHhoRlFvb250Q3hleU9zRVR2cFNJNE9MeGtselY5VzhhNEpuMnZ1Ni82ZzVTNHoycXRTNzRaL1ExOHVpdW42YzFLTGtwb2hyV1dYWnNqd1hnWFhHcFVJdkZNWnowQlNoOVZKRHRyNkVHSkdJSStsOVYrMzVEUXpTdElRbVVsdFZybGtHRnFKNC8vcDJFdWxFU1VnVlpDK0lpbmdTT1JaZGs1U1ZJemE3a2hMbEIxWUpNaGFaMUY1THFxMEYzZmhPOFZ6SzFYWXN6bUVkSjhZNlJXalExMDBFZlZ3U0JIRmtKUzlnM3JSdm5BajJiMjlyU09LM0k0eWNOSGVuQWowbXFLVDczRkExN1EybDB6ZFpJd2daQ0ErNDVqc2E2ZzdUemZGSE1Zc0hKdThkaDdkemd4cHpCUis3YlhWZGsyOUFZL0lQVVJGZXlPTkQweFpaTWx0VllOR1p4Yk9CZXNFUHB2ZmVUN3Jna3R3KzVnamp0Zkp4TlRsN2lKaWZXVTRwVENiZ2dmY0M0cW9oV0FYOUNleFgwWU4zbUFVK1NJdDJPa2NLREkzSGpSbnVPTWdaTWg2eDIyUEdvQmtIaVgzaGtvaUFkNlg4aTV6WVRDTGFXdndWMWhsNjM3TFJkdnRqSHVYKyt3Mkx3UDlUekRORFBYRFpmOHdWOTBLUjA5VUY3b2FZN2dzaGY5MzdkSnVPMnI0UENRL3h0S3BjL1NyKzVHNDIwcEFzQW83T0RkQmRDOWhIWGhWRWU5U3lHTWVwb2lqUE5hRlRrQTdPaUV6RzJOb09xNUE3WHpyb0FHbXhUait0N25qOElKdERoT2h2dmFiSHVQd1Q3aythL1pleFVMZTFlRWRPNzFjeldDRTROS2RpUVVjTm5NSjVEdDhtNit1MzV1UmRKcDJZUDF2UlZZT0JVcGpBUVFDa2tHc0xYUmFQNTdHNlNmY1dtSEVpREZjS0RuOXpvZlVvdHB2SDVtU2E0Z1B0akhneTNhakd3WGwyS0t3b0xIbTRCTFJJL0VtcEl6ankvYW4yZkticHJHb1BhMi84dytHMFBWZ1BXdjNraVN4UTB0NHBMMEpnZU05anU3bzRoZnMzRC8wc243TkQrU3kzdUdvQm9adGlZWlBmdFBPRGZabTJwQ2pLQ3ZhaEtTTWxJOUdtMTltQ3NNQVpNdCtOaFVZZWhxYWRGUkY4OUhvV0tHeXNqcmNjV3oyMFZvdWFJdGpsOFdEK3o3ZTNReEx5SVhwM2NiNFFBa1k1WkdtZk94d3FiL1RaN0VrNnFxQVRpb1l2cjkvaGpTd3djcjZtNmgyOXYrenloK2ZCTEhqLzhDOVJJalBIK3pBdDJWc2pabW41bTJjYlZPQlJTTUVUVldLbkRhN0IzaGNKWDF5dXRLTUJrTk9GN3dMVFZVTitxd3NjS20rVlY4U25xWG1LTDM3OW81Y1hRT0Y5NzFWSUp2OVRlR29tL2xWcXpQNk4xVWVJK0dyUm1XL3RaOEJUeDlZOWVML0JTdk1CUlJoNXVJdk5UTFNUTTg1aHBzZ0dkNEM3Tm5lNVlQLzYxbXJpOTdOVnZLMWUvVXFUdXJNdlVRemZZZ09GcGJ3TGFqdDBYMkdGN2dJNTRySUYraVBOdHlqQlcyRDlQQ2ZUSEJSN3E0L0tpVysrNHpjZDBJSUR3SFhCaHpKVE1tcnNPQ29qVGNVcVRZVWxuZGV5YVdVbUt1bFdRb2Z5Qk1HRko5SzZUbUpkZTkvK0FUSG90MVZ4U2hVcDRuRmtOK3NBMnZ0NjhheEpNa1BYbk9JM0lUeGhGT2RQaVFLUGpCaEg1d0R5bkxnN2N2dVRaMHJyUG9NTkZHcGg5VHlhakpWQ29nZ3RadjJXN3F5MjhSMEFhemhYaHJmbGh2aVBzeEdqV2ZYU0xBU1hzbDNVNkZmbTA0NGVKc0wwZDFROG50ZzZKNWpkWFB2RFpxMG9jZEo5L1VOM0FpeHNjcnVidzMyRkFMV0pZUDNudE5BR09tZGxmdlc0YmZ0cWl3aUJtRXJsT09wS09VQXNJTndBNGMzZERuRldKQzhXNkJYdmtBV3JXb0JITW1yU1o3V1FZVDU5cW5BcE12Sm9lYm96ZUJ5L1ZVRVgwcmg4MlFYNHgydEU1R0UrTkE4WHh3UFdnNHE3SjFzZnl0Zk92S0l5ZXd0UzZiVitrNXNvMGdTV0paaTV1WjZ1bUs3NWtLOFJJUTVJU0c5SzlYKzJxZVQvam5QenpyczNjWUtnOG4ySUl6MHplRndWSU9PcFVaUDl5cEFqTEZFbTVOQ3lUSXczckphQlNISC8yU0dRbTZsOStoRlp1b2JHTnpGYStzV2NLdG1jL1ZhN3Z2WFVUdnhYeDJ1a0pVMm1mRWRlWCtzVHdCdWZGWmRxQ0w5K0Y1QW83a1h4cWI2Ymsya3cyLzFjUlFaVlhJaDJ4d3hEam5iUm1Ua05FQ2NMTEtrd09vaEM4UEd5eE91ZGlRZkVwR3lhNG1aeG5NWi9JZTZmc0dKeHk4RDI3OFVYSE9ab2RDSzNpbUd1eExUWXZJODB1eXNmNGJhcnBiR1BqU3lDeGxscFZWdzdlYmpoNmk1MFp3SlJFM3lnZ01zL1hiV1Z3ZVdybXMxcXlyNURJSTVkTWk4WnF6ZHRtTzJEamQ4UFEvV0ErNDBXWDNoQ1hYeG1ZdUlUWTZESmVaL28wNjRWZEc2dTRtRkdxSGpsZzgvRFFKZm0xbkF3a2NCMWxZS1ZpZUFkRWNTdVJYd1NDQ29IODhvOGdUTndOL0ZQUnF4bXhUOTgyaU5BNWJvZmlnbmdoTHZlbDBGMDBjZFVEUGZBSGtKNEVBU2JvV0FYMkN4VnRkWlJya0JVNWdqcGkySmtWbjdzUE5kYk1FRkdzd0N5T3VXWTYxS3hiMEVQaVpLdmg1bmY0QzlKSHNlOHJjbndYeGNkQVBPb0E2OER3UmZCVUJ6bHd0N0dyUXg5RUhWMGNrcnhmVDc5bTBoVkJxZXRjNVluRGg1VzRGOHA1RkYvMHI1eEpOajBudXFEcU5EWjBCRDFmMGp1MEFsMkdjMGJxQzlqZTBTZ25rek9kQ0d3cUpWV0FhS2Zrc0NXZDFIT3pJVU9xTDNKSGN4a1hyeDdoRVR3cXJUSCsvZ3JLdCtwaHhJN2lESTJCdFRiU2ViekJpRmoxV1hXTEZWMHJkendEbzlvVEZrVmtpN3FpU2ttK3RrL0M4YWNXazkwd1BWSEJLVTdkRHc4WXVCQ0JBL2JpYUx4UDE1VkEvcncxSTZ0aEZ1eTJDeU50TkpzYTNWWklrdC9sb3NIVmM3dmN1bWxDSTBScUJEYStVSXRPa01oaWVVMTcvM1RSOFJBYjhXWStuNmRkZlhjazFraldtZmpDVkJYblpXQzMrZDUvSERyWE05c29mZFhQSzNXWDd3WXp0bVNWMnNTa2lvYmtyNndWVUhMdU9OSys2VEpFWFZVYzJaanpuQlYxZTJjTHNHMWxsalYxdFRRMGMvWS9JSGc2a2t5VDZOdEswSC9qTTh1bW1WcE04bU1IUmtIYzJabnBLNlhFWk1ldnpXTnE0T25RUEkydmNDRFlEQVRZdFVNam1OWGw5cjIvN0NiQzhUanZBSlVacTQwcm5zQnFRdDNzMDErVVhlajdEUm5qbCt4bjFFOGt5NU5Za0V5OUNLdWg4VDNmQ2JqUFduUHJ2ZEFJU1N2OG5DdjNHcWRWMmNhTkpCL21XYlJRNTVIbG83TDlyaWQ2UDU0VEpMUFN5K3dydUdpVmJHZURCbE0wSDg5OHhQYW9GNkdjVjRGWUpjeGw1Q0RrUUhuMVlveW4xYkZhTGRjNnhwUUpaS2tZZy9oTCtIcy9pbFFFYXU3V2lCRXkzaGNuZWJGckJjZHA3UnVEWlZEUHFLZzFFamkvL0hkT0tsYW0rV0ZWMmVhZXdiTkI2WVpvWjlPdDA1eVFGK0xXTU0wMVFGTVUvQ3dINVJjT2hWR2d4OXl2dkpiWllKTU9HN3dhV1RFdklqTWpQcXFZeVM5T1lWbUoweEJ5T2VaUCt5TFhPN1ZhOHNwSTR1TW0zTm1CdytIVXovWDYxQVFBZmxyMkhabkJSblcwVFZRaHdZSDdRcVZ6d0tya0JNWm02d25DRy9idU4xb2dJendROW0rSXQvNDBmekp5aVlSazNJSWU5SVYzWVpqV0wrc29vb0svVWNycUR0dDhtdEUydzFoaGJpTjNqWHQzV0RVMExCQTBqUWZSTE96WlpnTDVYaWlPanhRdHpjT1VQVkpxNzlZZDhMVmFEdmNySjIvZkozSmRSa2NRWDhUZjI5bUpVZjV2ZEJOYUVCWFZTcUtTYmlZWjN3aytIbzUyMmdvNFg5TjdEMkN6WGlxSElLK1BMYXgxODdjQUtGeDk5S3VjNlJEMjFkQ2hFbW42WXlvblUvOVROU2tzV2hmYVJZTm5keWVhL2VYcnR0bjhvbjRrY0VJNGFnbnhiY1ZYNEZkS0VlTzZ2cUdFZDVmdWIyMkdjcHpuaHYxWm1CRjJoZ3d0UFRObEFEY3AxcEhyQlB5ZXhVY3hIYUQvZGUvZTEvSVNpc1RYRCtNK0xGcE5kYktSUlBuSlhqSmp3REQ2N2FmOThmTTlGZGEyZlI2c2ZQRWtrM3RQZ1UzVEZ3eGpsRmZPc3JUckhSVFlGVktyMW1kOHlmUlg2dmJjc0RSYmRjRDM1YUVFSlMydzlabGdXb212TmdwakpKWWFqZmZ2MHpCcXAycGVsT1NIQUIreDE0cTR6Z2IwMFZ1Y21kRXRyQUp6TC82LzlRbWtIa1JSMVY5dzVQbjFsZFVOUGFyejcrV0lMYkdBRkpuc3JESUI5bThrbzNlVDNTaEFtZjVMd2RjZjB2TTI2bGpnT0JtTnA5Y09IRVM3VGViZEtodU5KWTh4eEw4b2tWSzF0Umt6NFE2WmNjYWx1eUJ2cnhHUHQrSTdEU0o1amorK3I1eVlvSHNYeFpxMC9wZkJjMlYzNngrQlphTGRLQ0VrY2hFVDdXL2VJWDFTbG1jbkUrYXB0NUxFYTRhR1BnbzlsQXJEZTl0Q29TcG9sVDBBWHJRVTRXZFNRdm8vNmlycm9TbWlkek1qWkF4Qnk0dG16YkVTM01zSTVZNmUrdGlzK1A4Y2wzQVcxWi81NEVSY2ZkSFRwZnY1c1k2L1MxR1pTZVZseGh3YllJQ01KbUdRWENjbWw4aXRvdTQ5VnlRYjE5b2MvRE8raFFUNWVnODZuL3FlczVMVkhtMDhtdUpTQ291azEwT1JJRDdET2dmZ3FERDNXNVllcjhXMmkvcDdpMnlOUG5vekk0S3hQU1lkamhXSFB3VUxMeFZXWHlqS2h1WXVrR0IweEpkc1VVcVh4YkEvQnB5b0hmckpxaytpN0JzVWl3T0pwODBUMmlUeDdBM293T2JlNXE2dWhRWFFnc3RzVkpCME5tMlh0K2JQTlowdGdYaDc3aW1nMkxTQTZnbTZQMjlGeFVuRWxLQjNaTGwreElWTTVTNUJFZDh2WlRVZWlKSjIvMHgyc0c5V2Rrc0V5TDVaaEc2N1ZvcUdKd3hxOW1nOTNVMFNNWGtmakkxVk1qeXM3dXR2UEt2d1dCVlI2MXhQUnNUb3hMNVNKdjlRN1BoMnlvSzVwcEoxWHpwcUNwZmEwbVREZ0g4QjNTNzR4MVg3ZzdqNlRwRTZ1RU82cjIwTXJsZ2ZEdVFpVG5DaEgrSHlQYkkyM0dHVkMvQ202eEo3bVFLZ0MxWW9vVnVGYmtJdi9MZW9GbHMwT3ZLbDE1bi9EL0JBaEtPT0JSWElJaENrOEpOV21iUVIyQmVJcGF5SkhhRGw2UHcyZ3Z0YnV4YitjdDRJanVSMFhWUXZ0L3gxV1h2YjJrcDVQcHV0bVJ0WmsyaERBOHRsQ3oyZTJqNHNOR2paUjlaT1lZY2FuOWtyWEZaZHlZcTVHTE03WnF3WHo3UlBZRTdsU2JiKzZBUkVIdFZIR3pFWHo0eDFaam5laXdKVHBLSHhwQ1Q4NWVEN0xSLzFjZlpwTEhHWStZaUcxQzk2amc0N3NxZ21rc3lPZHE3NFpDOGZGVjhNSkFhbnc4UHlUOUJoUW5YWU5IMmVlbVB5am52M3FWRWxncnFsUTdNWFppdlpIQlhiNnloWHRkdkJsVzd1bGtNS0VMbFAxTzFtdjFvL09MYkJUN01kQTBYMk51cmE3amNGU2EwOG5WVEprK3ZudXpsdmdsVklzYWRTMHlLUVdaNGZNZTRYSnpxWnVoTnQrNHltQVZBbkl0Uk81U3dMck5XYzdZSjFmdVA1b1hRUGpSVmxGQkhMRHYwbU9zZDVKektqMTlBQW9UcnpxR3JNSmlBdkVtL3BQdkt0WlNyc1k0dXI0bkU1eDJuNGxlUnl1Y1VrbmVvQmp1YnYzVHBBY0RrS0NSTDR5YTRJdStwWFgxRjRZOVB6aTU2NzRjQmZ5UkRCZU1IQ3BOWVRsUldPb2FBWElGcE5HQlBDcnY3QnpVSWRadDB6UGdYWmFVeFhMTTdQQXBKVXcyUW9aa2JtNWtTcDBYY2JCMUZUK2JkL1lRUUdDUVdCZUtQMkpwcThDb1lheUpFVytWd3FKczZyanl4OWdIWW5YYlVKeG9INVIzU0E2SUpnZVAzSng2MVhoWGxiUFY5NnVHbWZkaDBLQnl5QkZ0MkNEMTJMRURIWWo4L2xpZzV0Zk1IaENBamNNYWNob0pqaXVhRFkySVZsblFXZHVDbmxyMmpmcnQzSVl1TGNtRTNQRHFBRndpVHoxQmt6d05RbDd3WFRQdWI3aWtqc3JxdVFmOUg4OUJIUHFmOUdFSk5Kc0FpVEZZajRTMllYUjlQVW13MDFwQ1pOWE42OXdQZitUa3R5RmhKQm80YjBQVm94THpURnJvdFQxR3pVN3l4M2pEOVpSSng2TTVBY3JXVnFWWkJJUHYwWUFxRG5kb2daRmtGTGdLV3lkM1BRMkJEU2ttUk81am9KK2svVFlBTy93OVh1VFllNmJYSW1vbGllZkxDQk9SenB4eXlvV3lZd1Uwby9aLzdPbWgySEV4SVFyRGtXc2htL1VPTDlnK2hmelRSc2JwNTlIbDNPaExraEdqNW5FRnRFSFhXcUJHNVdhVzc1MmRGQno4UWw2WFZJUFZLY29MYUxNTXIwV0dQb21yVStPRE1sU24xOE9ubE9keWZhUmZtV2tlTEJwZEZhcGpHVFZ5M2U3azNGMkdiM1dSdVlTbWVMeGRYM2g5ai9jcWJlS1c5bHpma3RLVHBXdDZqbFlCZ1M5YnBCWGg3cWNBSU9vVmhwbjFEYS9QdnkvYXVjM0NGMEZ1MEluM0VDdlRCelRZMmwyUnZaWWs4cGw2VnFaclV0R2djRDhVL2xtTytsVDgxcDB4V20vS0dOeWI2THVpK2RHZDFaaVZkNGtQdHJoUkNZckpkUGVGVnVaMDR3TFFsVlhrMTZzTHNyK1ZnL29DckdZLytCVFR0bkJvRURKNXV2WWZ0SGw5VnBhZGwvem9UamlUdmYvUVpUcnV4TGlxNnhqVmpnTzZuSFJxemttSGhBYktZRlc3SGtxY3A3WVZQM2d6ckNySi9PQWt2K1FuRTBVYmpwZFFxcUd1bHJiM2dhT2JXM1RxZWJFNVNKTEVESHczanNDbVdOdFNQQVhXVDhtZGlIWjdyOXF1NE5VL0ZRTnFUTEoxOW9LdGVsL3kxM2RkMGRZakQyRms0YTlmVE1KZVhhazlwYk8wSXVwV1NGSG83U0c1SVV2VmVBWnRPR2RvNXMrVTIzWWJSKzRZOUI0d3NSSzIraDJjRTg0QmducnZQMDh4RkgreDdlVUtFS0paZHhDcjdNckVwZ2xHTUE0eU8wWU95NGo1RjFjS1RpM2I2eTFQU3hqanB2OWkrVDBlakhuR3FlbFFMMW51ZU50MnlmdmFYc3NTbVprNEpvZkd3WStNTEcxejQvTHhyejBMMGd6MlNrd21hUm8wVS96RWVzdkxneU5nWUhCMUdaUU92RW5McXVUb0xYT0FVV3ZqaUxLMGp0TnZTMzkzdmNSY3J0OEowUjZ3UEE0bFFrMzBZVmZQQnZSOWZQeWFIanpmRGgvbS9YbS93dTZMWEdDSk16QThZN0E1VmVXakk3c2N5d0M4MGJSREpPSnpMMTVaaU02Q1QrK3BzNWhucFI5bXc0cFBmWEtwVFJQNTc0a2wyU2M0OThHaUo5c2w4dmdBL1owK2ZiODlOYlhBbkhOZS9KbmZGUVZOaUlSREY1ODFJc2RjMTYvWFRDOFhvV0pmOGRUMU1vV0M4OGh0OWhzZ0h6dnM3K0Y2Z0tvOGU3ZUlwS1VoUmZUUlJnUml5VzhzSk54cG1YVTYyWnJGdjJ4YjJWdVNaSU9nVFJVbmEya21xcFZRZGREbS9DS3poV0MrMWF0V1Q0RjNRSWxQT0hvR0padDR3UzJIUUpjK3ZJbVZRKzE3allGNE0xdmhNOFNUdTd1Z3hmUFFjYWRMUDhrQmtKNUhFeEpWeGtad1NUUDdobm1ldFBQbktlaVJ5RGRudi9IZGM2QUpWZXFFc2pZNFJxT1p6S0FLajJqY2E5YjB4b3locEtwRXE1emhEaUM5bTRJSitFQk14dHdrVXk3cmR3RzhBUFFZWFpmVFgyR3F4R2s0cEJ0Zm1IaGNTMXAva3E5cUZuWXA3MlpWMk1LSW5Mekp3MmlRVTJXWkQ2dVF5ZzlXREROVTFLc1pkMHFhTyt3djh3U0VHSGhWUnVrWldXZnN2diszNEFlbkRzWldLYmQvWWdRMEVFTGhFV2MycUNiWm4wTGhlLys0UUNYL1FEMU5sdERUZXhuc1UySXpnMEsxQjFWSmpmQVpzYnJFWjJZQnMvdGdNcjlyaUZMd2h4NTQvK0xWNHpDODhZYWF6eEh6WTZQalY4RDBZdzArV0xwUEJXYmFMbWVnYXoxRWVIZ3ViYkhpNDAvWGdiakR0dUhBSFpmaG9nQU43OWpTd1RZNnNITytBcE92cUtDT2c2TGd0NXJmTloyOGptUmJJVTJxbTNod0pIai9WaEdOL3FWMFNVbTRFeEN3ZkVLSWgzTGttelBDVmxiMmJFRnBnc3NPdG9EUVU5cU1CWnFrdmFtN2JVS3hmL2RSak0yZ0xUeVhPK2w2OXYvenBLUXQrT25GK1BLU0NwcUNWZi9xMzBPRkJVOTJWZEI1a2JwcVpwalpZS0E4Q1NLY2JXWVRxNE1xaGh0YVNJMCt3Q0ZoWUVJbklWRWV4RHhQTnk5TFdJMEExZVBlSy9oSm1IblVtS3JIV05WVmFRWkJWTlg3c3h3VnNEL2VZNEM0Mm5TWi9rRW1qNE5XT1lJZzJVMVRXZHMrYXZ2VG5Tb011WkpRbU4vM1Y3MzRxdVdvWTZtVXIrOVlNWWdNK0gxNmhlMEtQSWpObU83TDBwT0VjTWRXWm9jSnRNMUc3SXNWa1BGMCtkZjFkak1yZnd5MXVINENEUXZpTkFKWmE2UVo4U1YrYzhnV0xNME1VZFRXZ2hRYzhNckRsOE5ZV2lGQ3VxNzEyMWF3OGJaWmdGdldTZXpmeFQ5aHhpc25KblFzWHVKQm1TRnNsL0VZb0N2ZG11K3NkSHNhSHVnNy9CWFpHWG1wRXNuUUtnUTFtd2h0bHM3TUZIRllMOUhkWVluS1RocStyeCtpRFl6NFNSeU5RVWVZYkdNbENKS0ljdDByaGhWaEJJNW1DaVBzd0N4Zjk3YXkydWI2TzlCMVJzbVh3U1FYK1JCMUZ4d1NONXp2YWRWQUVESnhzSnVZZWh2dXJUSzIva0YweHQra0ZJbVh2UHQvNlFMaFdUNDUwSGxGemV3VjFJVEdDQlkwMVIvRW0vWGFpclBrR2dVZnBtdFpwWWZDdldxbzhrSDd2Ym5tQTdsTVdUZTZjaXA4VE9HQzFWVVpFNGtwdWtDbm1EU05JYlRnbkdSS0M1VVNXNlJMM0NQV25sRFd5cTJuRlNrUFkzTGJGKzU2dzlWMGV2TkRiZkRYRjIvMkoyT2crdGU5MDlIQ3JJUzdreHFPWVc5S2VDWmptZWdsMFBqVnE0Z044UjZpYnI3L3Vqdnd5M0RCSlZMVVFyeitxZWFucHZDRTNJNFdOc3pzSFl4WlZjZDdZc1hQTUc1RjY4b0pjSU0wcWo1S0o4TXZjVGU4bG53UVpiVTlOdkxpTlh4b3JKbGxaQXBxaVFCeHYyKzFvVEZwOWtMUEFOMGNTZ0lLREJCZmd1L3hiY21FUTR3S1d6QU9qMi9Zb1JtYzhTVVppLzR0WG03ZW1OMWpINGV2bGVmLzVpcFRMU0w1Y0M2Yk9qRk8zeXBMSGNqaStBOEVjTDhSZ1ExMk9aMjlEWElHM2htcDNWcjF4QlB3WUZPdGY2NWpVelcycjFSc0pMTzV1ME9ubVNKVXhnajhxZ1drUndXNWI3enNsWGJoazllWE1Kb3VyT1BRU04xZ3hTaTJGSFBkcDViS1FoWDJkVmZUaGxkaExOSjdWUEJIUDJpUityeHljZXN4cGZpcFo4WDFWNmJUSEZVSzUyNHJ2YjJXQ2xhK2p3WDlEYjFHM0NsNWFYZXpSNTFqSUwzYU9QVGFPZFZmOS9SVjhPMHcxS3JLSElIVDIyM2IwK2JxcGFWNHpJSVJiS3pUOWpzOGo1ZnB3ejRaZlh0bGFYUjFGODBFdTUwT3hZcU1ocW9rOFQvanJWZ0tveTVrMWhqakwza3Z6aHpCZThBVk11NHgyVm9kQm9sYzFZVzlETzgySURXNUlHSkJLd2tQQTZmMDBLQldBS2I5UGlwZDltYkV2aFZvVy80b0JFWGlEYTNKTkkzOTgwSDFvaVgxbXEyclFIUXJCYmZaWVMvTVdiNk53cGhuTHo5Qld1TEpBVFhiV3ZDeEtXZmRrVDVWYUFPOHVWRVZtQkYxQlJJYmRBTk5wN2Flc2Z6UnpuT2J1RkJGYUsxRWlzNTM0TlFhRDI2WlExZ05jNmI4K3ZlaXpGWTMxckNyTGRacWxwZHA5bWFKRUN0UnlrU3ZZRlM1SHZLT1RzNkFLQjBsRGtTeDhwMkd2M1kvWlhHUzJaZEtqTkp1S3VnajRQYlNNdXJBMDBYVG50Zk1yRG5Lc2dJNGpyZnd3aGdnMEpZeG10bkFFUjFoUFR6U1pUVUkzMmQ0MGw4T0d6c3FRaVpFcDNNL3hydXNQRkNzMHFUdzZMSmdyRXU1cW9mbUhSTTFBNk9WWkZ6MmdNYVBFekdIZ3NSV0I5NkJ1ZEQ4TGhrK1FuemI5UzhoMGZyQWkzN3NRaWtEcm0wWjBpSWJmalpNQmkvaDF5YlZhMjJOYklZSzA1SW5pU1BCU2hmWi9KMUZyYU8xMy9YU3BhSXFrNTBYZWY4YTBHWHZxQ2tjbW1VcTVmUm9LSzRudXh1dzEzTktRZUFnWlNtQjh6VWNSWGRTa1FHYllJWmtkTzVhNUVBeGtwV0FnRTFHQzkxWHdlTk8yRVdYS0tUSGpkY0JJV092d2paMnZQU2FVVkF5V2tpaUdab0xvQUR2b3ozbjRXTm1FaVdEMkw3SktmSXZIRDB6NWtJZ2JhalhHYm0xeXpzQmY3WWwvNEV2MnpuZ3VGcUZTWjIrbmtsTXN3Wnk3bVB0aklXN1pJSENtQVVqRTNhUkRzNVgvRnFJZ1laRjFZZXBaVmtBc0VweElNR1JLZURZSWV6VWZCQWx1ZkNMWFdsZ3c4eThQZi93SzRZL2dmdC9sODJsZUtad2ZOMUZQTlVpUlJPSVFuYWpJZVlmcFFSSjhUL3ROZTJucUVjaEY1aVhLdjZHcTB3RFRpeUhZSTZBRUZGa0dnMldOaWRjUXlNUHBNdVZYSzEzcENwWDZ0WXYxQXZOcmtmVjRwMXhhNTNQQ2prbVpkU29GeUdUYU1jbnRCVmtHS2hrNURjODBuWVlERWRUbHlUZnRxK2Z3b3FIZ1FhRXlaUFE3M0VGay8wWmF2c0NOTU4wM25PU1VlZng1bzI2SGtTYnllM29EQ2JIdm9Va3NISUI3U3VjWnVGWktjclNTeDNKV2VBckF5Mkk4K3ZUMFBMdVNMVTdiYm82RmtneHd4WjlyTFZoYmkrb1ZQVTZPdU56cm1ITGI5TkkxUnd5VVVhcmhPalBjeFF5SkthQ3piV2dHdlZGR05KN0RicDhkMGo2Y1paZURqQjM0SDVtSjI4bVA3U0FKeEozYXQwR3NRRVJCZUMvMTZjTGg1VWhpc2lZU1NiVmp5ZFNtTUFtNFlZbjdVSktzL0tLeFVTMDVIV2pkemt0RG5nbzN0ZkRSRFh3bEwyZmorbXhwbi9CbnlxcGdYZTE3NkNTWDVhbS9uT0FyVWQ0aXpEQlRVaURuU2Q1d0N4R1dLU1htVjU3T2x6dWROeTkvSWc3L3Q4TXUvTGh2ZWdoSE42TisxblB4bUcxUmpHOFRIVUF3a0lHTmZNNW1XT0tsWCtON1BLall3bHVkTGdmeGxMTThWYnp4STBDWko4aWU2TFY4ZEZMT244OE8vVDkxN25JN2d6U3ZVNzVkQUo4Z0RkOXVoMTlDWG1BR2d5L2RoTGlKTktXS1F1ZllLek91UmVvZmxuU1R6aXh1eGxHdGlXRmQ2NCt1NGxkNk9VV2o2d1FyY3BncFBCVDVJUi9qVTJja1RBOHBQYXBiYWVHZVZsVUxjV3dOMWpDaDVucHFONFdJR3dabWYzRGZzOFVCNHFPMnhsV3FlWUl1OGEyUUoyZDNXdzdKYldaOWNta2xMUUxiQVdETEkrcjVIZjlSQk5IT2h0NFplSkkrVUl1MDl4UnR2NmJJT0I5L2pIUkdOVHlhcDdXZVBBOE1zMVRTem9Dck8wUW43ZzBxQ3IwRWI4M1lrR3lxK0pJTkg4TjZnZzgyamZqUDNJdnpTUHltbHpXSEl1RVVMMU13d3VsRmowakw3NHZOK1hxbkY2OWllUHBFS2dUQVE1MUh6RVRoNHZvUWxMc3hvYXhpSXhRMGFQWlJVbDJGNFNMNFd3eFNhc296RjhpSENaNkx5TjBZNklNU01IckYvaEk2QXdRdG50NnJwTDJJLzRHeXJNVkRvMzRiNnZ0OHdjc0l1eUUvVFFTbnVOd0U1UWNjbEtYNmR3SjlFNldIanFGUWVwZzl5U1NhanZEUTh1WHRFb0haUktRMGMwNWNuL3Z4bzRjUFZ4eDJaOUExeW9GM0lRZDRFeUtpTXFmSUtzZGdPbmlTVjlvOEwzOGF6MG5qMFVRZ05aS2lScTZtT2tEeXVxMW1OQ3EzQ2x5K1BYdnU4WGhJUksxb3VMR2IyZGRwTEUxanVUL3Azb1VMRWNDZklUb01oTHBxRVhOY0x6VytCK1V2aDIwUUhhV0g5ajIxM3RiTzFBQXA1WU9vcFpUVUFvaVNvU2hFSkIzVnNWTHRHaUd3OVludmcxQ3N5NnZoRytuWllma3FRdEVTYWN1ZmUvdk56aVNnd3hwSjRjQWZ5VzhrcGJBVkltRGdqY1kvSkx0dXorbysxbW5iTkRxeStTY2xzWlNOUEZmSEJKRkl2eGtvTFVaMDlUckRqZExzb0lTTCtxbjUzL1J1bnNTOXM4aHo4UG91SWozcExlRXFlRC8wcWZsSWt0Ny9VcW53ZEd5dGhFVmhzeGVyVFZHWkNyWjBDa3VGdERHYTBkUDZMWFlGYTdNbEVZVUlMdUdLUWYycmN0b0laMHN0RkpHUkluQWZVUjJOMW9PeDBZaVZ0NXdibldObHJHU1o5QmJEUHZOUm5iUFFqTExyMDYwcStMOHg2VDlUZSsyUFZWc1JMZHc0cjM0TkVHYVVGRGFCRFpFL3BNUnBBMXQyODNQZ2JOdWJTMC84SjdpTEl5VmRYVVhMYm05NDNVMWtwUFpOREhLN0tPc0RGd0xTVkx6S01FSUE0N3ZlejNDdFZneldNaVNhN2RlTUY0aXgwaHpjaklGbVI0UHRLR2IxeGlhN0lCSTFFMFliQVVkU2NMTmtDQWx0NGxueVptQ2NzbG1BdkdqMVJ3ejBQMjdtekFnb25lR2Jvb2h1RkRqRlVHNFZGTFNxYk1zeFE1bzFmRGhmdnl4WHloYWlwZUFsU1paT1JicElZWE4xczZ0ZXFKY2kwZnU3aTlZUGJMOG1zcFEyaXZ0eUNyYTkrelZENWVPc1VCaEc2S0FyTHpzdjk1bEtPYWhadks2bkVuQ1NhTFNxSG12WkJNUzgvc3crWWRMQVVWbkZZRVFBSmxXR3JmcDF3QlQwYytINlZmZnlUNW5sQndkUDZSQ0ptaVVMdUNLNVFnakhXdWorZWx2V1R3QUcra2VqM3RmVnRuSWlOMUViQW1lTGpJOUppK203Ui9hYWhsenJndVJkNGJ6bHdXTklqZHFTb3NUaTR3Wk80ViswZGNOUVVyM0sxMG5IOXdqMURBci9qVnpYKzVjUGF5OG56cDFMOVl2bjZMb1Jpd2hFVUY1eXBsYi9HR3QyR3prYWJ2VmhBZlVuZHk0bUc3VXlkaExQU252MnVlK2xvcUZHeW12dE5vYTVCd1ZVdk9hMUVkaTJZZCtGYkRmQWhqOVJhSUNITjcrTEplR0Q0YXJ1dUJiT3lYM3pSSjg3RkJsOU9HeXB3VDlaRzBYQkpjbTJBYjY4ekJacTJnR0xkenM4QjNDY3BVcW41QllyTlZHMU5nOE5lL2ovVEs0bDhabW51MWdWRjljbHBCdnpzN3hNbXBYY3hIcmJwSHNEcTFzRGl2VFQrZXJpNndmR2RLMkpoQkpwL1JaRmxSWGlBNVRGUGtpSDI4SERmK0kreHNwbkJUa3NiSDhLdWhHV1ByYmlOSXhUbkFtQ05XWXNjdG8rM1dsNzQxdzY1TWZrTnByOHpoZGY3NjVrUHZSMWx6UUxJVXZCQkxsWmM2TXRXQkphTE1ESDh1NWxZYm9RWkVxTzZPVG5oT3NVeUJydU1MY2pkR2lxL3VLQ3ZWSGlRbVNuQ0l0MFZKSzZueVFHRmhBTkduamc5dWdUZ3NhVXVGSUw3V0RVbk1qaC9IcHc0eklDQWdJQ0FnSUNBOHYyL1JVZnQrbTIxOVFWKzM3Yzc5bjNOWDdTci9oOW54ZmI5ampnZWkzMjlnTjl2Y1E1ZnQrbEkvYjlXRG42Zy8yMzdaUDh6N1VyOVNoMzJmWlQzMi9ZZDRIcGY4TzBDKzN1cGNOOVgwQUY5WDBmR3ZuRDMxZlh6ZnMrd3EvVVRmN2ZyUjc2dnEwMTlYVjNmVjJRQTlBQldvZGVMRFc2OHdURUlYMnhZVjc2dWtsbUdnUWJOK3JTOGlKL0xwWmhoZVBaTFk2dVZHWG12VlZiRmg3dzdPNVU2bi9FWVZuMlRQRUxTQ1hPSkxuN2l4dllxdGtZRUZMT3NkNnVab1Mwd09mbDNnZFJCTFc1MUo5SFUwaGVMb3AzZ3hudGtmRXB0bmdpVnVneWkrMUkrdXVRTyt4aUV3NDloZjdOekxaOEJaUDc4NWxMY090d2FvWk5IOC92eDhjL09qampOZXBUU1lqT3o3TTIvbFVoTlJhQlVsUFp5VWJFVllVd0FiTFVMMGt6N2s2bVJVVzkxQWVvMjkybU02SVNHM0N1S3V0ckhhSDVCZXAxWExSZks2NURjVVdPRVVYVUtIdVVSOUlobDRTRUdzVFFDdlRjV0dETzNpajRaeHo1NW1mMGJNTW5lWWxNaFRqeGtPQWpydzNVdVk1M1Q3bzNXcWFQNnpWd20vWGdXaVZQTzJDc2ljWm1TSXc0eWRoVTFmeTNsdDVTRWVwWDhMVHBLSzhNWEs2ZzU3VUxQeXlyUHFCcTRQUUpYa21LdHJZRVE4WXF5bCtqUXBTN2IyV0l3S2J0ci8weG94SHBvZ1k3RnpKOGVGWjhwYm1IaUdBVENZMGliSkxwaC8zdStuN3FyVkdwU3FOclFSdmlUbWEySVpMUDg2YlZUeTdHazBsRzlGQWJKc29xeHJ2OGpLZmNjSXpBTlAwMGx3TTZ4aFJveWJ6R200b1I1T3JIbDVtdlc5MjVvdEJZbnFLVVhhWHZmYXdvSmRYeXo4NS9TT3JFb09WNlhpMm5ETXYwSk45eTFkUUtaczRYdm5sbHV5TVFHbnVTN0d4T2g0djhFRUZlVnltWmM4c3J5dXdISVc1SHhnaFU4bStxSENHN3pmdWRwd21ZVjlZMFErZDlham85T1JNQklybzl4blV3eXAzbHlrQnZwZ3pNWGpBVkhORGlCYS9wTGJKUlM0dCtpUDlGVWI1a241QWFNTG01dnAxODFDR0J0ZjR0VTN0RWtpSWl4WmlDT0l6WTBacW9nSzRDYXhuVGYvZmNoOC9UYmtYTHNUNnVhMnQ4MUR4L1ZSUzdYcHJrWUZMRGpzKzRHdUwvSGE5SzZ0cG1qcDExemhDSGttTFRSempIZStMMnlQM1U1MWhDelladi9mSUNHT0RFdWlOTk9jY2lXRTlnZjBIV0VZTDR1UUhuM2E4V2FzVUF4MDVFS2hmN1BnTjA4Q2FCLzNCZHlsZzF0VW1LNWpIWnRDTnlPeTBiSFRNT1NTaGJnSWJKTUFJL2s2aXRTUmxKeUJZMUhsQ1VnUzQ3QmlyZHd6MlpnQnRYaEY2NzlIcUc1V21MNnZtMEVpd3ZWNkwzbXVVdi9Xdm9WMTljRnQwb3RObDhTSU5KbjJBTmRFWVdMRVlzUzdQajdXc1BqdEhqR2RUbmNEWUt2T0dWS0xuV1NoUTNOV3hJVFJlNEVqYXNFMytPS3BpZHQ5eUdVYzF6Qzc0LzFYdjhBNHlMMFJ6cmRBSmFOSFZFbk9BOWZ1dEdGOHdTcGpjMHdpVm1GdHFxd3Y3SG81Y2VGRjRJTllrUmpSTEpobDNJc3UrMDlCSkhja3dEbmlsaHZNdFZ0bWJxTklsamhHazhUZGwrNVZNSEFIaVcyZTBPNnN6eE1tSm5wMGROOW4weWxRVG52Q3VXbit6RFAybmdwUTJxMk55elJxZHF3UFFET09VdDUxZDdnUGc3dGQ1bHNJSEIvK2puVnppbC84Z0hFcnRTclhJTVZBK1UzTHk3V01nN0YzajNLa2FCWCthREdNY2x2V0h5cUpNNlVVK0t4Wi9KTWpNT2k4T3JXdTBMVENiMTJ3S3hLajZPZm1RU21TZFFwRmp1YzdPY3AyblBkUDFwaWVEdTRUMWRKZTh2Z0F5M1BFSHlHY0N3TXg0UUtBWnF6SkovZDFHVXo5TnVtV0RBN2o5UHBWSit6Wk5VbXJxWTF2K05VdHRrdFlFZ1RUZGJadnRzRHB0OG4zdmtnMDBMRkpMa0Z2Ukx0c3RoR2RJMGw3SXFaRFZNM1dZa1VPVG05cDFabVhtQTdrY0ZmanJtb1dVcm9QL01NejErbmw3K1JjWWRnMC9XNWdQY2w0bzN1cGx5aGNhQ1ZrTFZBTnVzazZWM3hLek1WY1dOclI1WHBjODZBMTBodU5zZldmdzBLRlZxQUZwalFzVUI3RFlySE9jY1RWWldKRmZhbENRTVloQzBaU0tEZ2ZFVis5U0RGN0NlTTJtTE5xZ1NpdlZ3cEIzbmdjVGlnS1IrZ2paT05OejRRdEhOSCtMRlBhRU1TQzQ4c0lYSVRKV2p5SVVlMkNCRnFMZjcrQm9ROWo3Qjg1RkEvZHhvTlR4b1l1dWJEQ0pxckdNTmdLMnpmc2NzVUExT3MwVjUzd01HVCtOUnZ2NHBsQjQvc3FOd0FYcWdTQlBWZGNqZURudWw1a3hUYVhDOWJiVDMvVXE3RlBVVUJCdGh4SkdPcVFMaWFGUlBhaHZPc1NFcEtMVUhsSWxQT1ZQbWZxZExaUXhjNkl6VzlwdTVEWFRpQzhZQkVUTU1XR1JLK0J5cXkrdlU0QTJkU0VhaUVXd2RqREZ3ZnhUOURwZWxGaUw4M0hNNUFNRG1LRkQ1Y2VjWVFjTmIzdzdSNVczOWhETlNqU21JamJqUVBpVHdaQUZRNmIvRGhoNXc3bUl3MlkrNTVkbjRMU2JhZkZxZFQ2Mlp0RjBDNHVIdlRlcHpQUnRqNFVpSmNWcnNMam1ndzJRYk03NXNvSW9SNFpOcktlZkw4R0ZKQVcyb3pWeDM4K1JJMzdsVmdNNldjTEgvbkhqODQwVVgyU3VEUEZrVEh0N2p3cjJheFUvMDFWblpseFdvRGU4KzVEMEE4UndLc2RQNGY1NEUyM2taK0xGMWNrT2UyNTFJZWFVYTF5b2tvOGVWUlp4MG1rSUVZejJzNWVoQjQwSG9oSEE4emlDNGNVZmJwMkJYVEpCTkRLYVBpVmk2OXNHZkQxcktuQ1c5clR6cUFQVGJFekF3Yll6SjRmMU1rNm1MMDBJQnZoSmFCMUZJQXFpazBNMnFqY2RydGNHeUdLSnhtUkdSRzJNR0RLamZqTEZnWVA0ZVgwN0FtK21PNFVUMXo4MSt0aFJBd3ArMmM4QTFFaW1uOTdQWUVRa1dUL09VV3BwWnpNQ2JHL2MxRmZhMHZhczZYUzdiRDI3SWNRd2lMVldROVZHdFNxWmRUTVlFSDlINVBRZnEvRVJ6Qlo3YVhaOUpuN0pjMTBJOEtzdVg5RTRMUTFkaWpsNG83eXNMTWFMOUtqYVRnWnZWM1daNVFzTkZxUzZIb3c0NDlVMDRmZWZuVWxWREFUTmI3eGtLcFJZUC9SYnUyNzFsTWEyRzErNHhjUkh5WTMrRDZidGxSMThmVEZiOWJvd1djYS9hbWlmVEJlWEJiQ2NDL3pDUUpVLzZ5Ym9peGhGcTZBUWlhTEJxN1E2NEJ3KzFOczZDU0FJRWp0U3lRN1EyK2FnOE1CeDFJMVhuUENDamxTRWYvUExIOXFNYmlGVi9JWDRKY3RLK3dIMVhpcStUdDFnR3o0U01kUnRoMVpzRnBQdFF2UjlJT1F5bWJ3c0hJN3pramNtZDA2QWNrNldITzRmc3RjRW9vQUNQT0JEc2RKVlpLYzhGM3QzbUhRUlZ3RldLRnBmcjZuVmNQNDNsRzA2ZUh3QTlpSENnTFNSRGo2SmE0QWFzOXpScDF0Tm1VcmVQakFzcmpXRkRmcGEwOU14UzJYS1BqK1lZWFlOTkNXVm1RaDdCUk9FdldscU1ObHArTXVONEM2YkZZYklXR2FGMjRxWXJ2ZURnVEp2dGluaVJtQ0N6WFV4WFlwYXZJTzQxUXIrekJsdys4MjhWaTV4L3BsYmhWeEZ2a3ZVNmswS2RtN2h3WVJzRlZ0S3BlNFlXVTlKMUVicTZZdVhwQlRnNUdaV2taWk5TeWxiQy9PMG42SjEyR3V4Tkwyc3A4N24zdWZHVnVQVThBTkhlUWFhSzFjKzkyZ00xWTc4MW9oZjBCaThvS3RpNS9CWFBqbWlES3d1U0RxclVxVU5mUkRtRU1NblczY0YwN2FrbWVzNHQ0V1QvaGFSQ0tRWnFqV3BXM0R1Ly9PV2tBQ3pHUHhydkRpZlp5YjEzcUFHS0ZvVWNVT3hYWHlEcUNZN1JSN1pZZjZrRVAwdnlRZmxQdDhoYTJKa2N5Rzl1QnVOWkd2d3A3ckRpeTg3S0pKR0RGdjRldHFhbGlDV3lKeHVUN0sySG4vQUlucjdwb3hUU0JCY1c5SlE5dHp2WlRvZXg5bUs4dVhaOTU2TmZRNG5iZjNkRHZUNCtydUpaMjFKUjNmdmUyMWRSQUt0aEEweGhkMnRmdVYxY1Q4QWs4Z3hRUmFEZE5XVCsxaUw2WTcyaGYzU3dWd241UXhIK01ja0h0RkkvcWtYSGxIYzJrbm1KeEZ0bkt0Tms3NmF2a1hyckJzMEw3d28wdE9ON2dQVGRMZU9pSnJ2UGx2RWllV2thRk1VVzNsa21veW1RVC9saG1NeURnYndHYU0xaVJyZGxHM1E2dTRaVnM0ak93NXB3QmZSdXZZRnJlTkEvYm43cFU5Q3p4SE5YZkFzejU2MnBLUlNHekNiOGlVN3JZa2NOQUtUSXNHWnRveTlVRHJNWFhRZ2RRSEt6VG9nUUdYT1BYamovd2szSXhFK0lGdkFnYU5JcENqT3R0ZVJlOUhsVkJMcUhWT0R0cm13N2lWRlFhK2t4Tnl4dVE5T3dPTW1IU2VKc1d5OW05RFh4MmNvejB3MG9iMkp2WEtnTkd2UzRnd3pvQVNJbTBsMWtFQ0c0Y25GUU1LQkxBYmtwaXhWV21DQzBSYkEzYzg3ZTllWnZxTzVxOUlTYitXclF3TW42VEZmdkVlejl4aTdNazBIQ2QxS2dkT3pmVWZzd1krcDJlRnZaajZIZzVJVzE1SWN5Y3RLTzNkaW9VOUlQeG94ZUJuWXZ4cVNlUi9NZytNVGh6U09qeUJObmxaV0s2RmZHWFRMWEZCbjVUenltMXlVWmdkdjY3NEU5a09zWEc1a3BQWHc2a2RMVVMvTmNtcm1idHJoZWVzTmh5Y0h1M0FJYVVsUUtNOENHQm1ZVE8zci9lNG9iVXZTUUxFM09Ha0YySEFtbnB5QkZNbFp2WVFxbFA4ZVRyOVMrU0pSVHcxOGZHdVp5V0hSNmJkOWF4T1hraWkwYXNnREk3WDZWMWlZWmZaWVJjcW9wM2tHditxL0tSWW9ScXVKdjRkbkVPUkNqbTRtTWRGMlR2MHNUZkRIS2xoSldEbjFEaEhSWkw0dTlrMDdxSFpJaWxrOWZ3ZDhqcGdyT1MwRVhDcFdEVXFDR0NQV2o4MUxObXFkcTh4QTRCZEpIbkxoaElXV3ZueUZ4VFFNOVNSY0c4TlNVeFlWcnNBQmxUM1I4a1V2azBSYlpxSUFTYU1lakt4WEREUkZBMFhpZTBBWVRJak15bU9LYVMxNGxvaTZpdkNoVHBqNVVjYlRTdW85MFJnc3MxTCtGK1B1TVllVU1MLzFtS3ZoOEZJcGxlalkvRTRkaFlROEZtMDhMSXRIZzJxZmVKVU5SRVpaM0ZCTW53WmRKMmpDeWQ2b2U3V0pTNzh4cm9CK2RkUG5aNUcxd1I5VGhpWG5zRm9uK3pqTUdCTlJYTnEvb2grVTZnbTBxbG9TVXc5Z3pqa09NN3dHdTlJUithWEpOZHZxRks1WFFpQWwxTWpEckpBcWF6R2VYTnJNYmRtMWtZZUVaRVNMb3M3aGRTQ0NNZmdWM1cxYjcxbitCTjZkNlNMaTNnVEQwa2ZwOXdVbmZqTExUMG5Jd3E1ZTJlWVdMdGZoVEZDYklzb2ZoUURZczFSTkVwQzdReGw5NDhwazF3bjdTRGF6VEJuVjFnS3c5VGtvNnYzR1pwMEJ1TURtMmN2VEw0NFZRSUZXUUpmR0g2V0tsM1FrNDVWWW1tMkN0WWY1V0RXaGdzdC9kajA4VnRldnlad2JLVkZNOXltUnN4RXB5WXVoTk5wMm0yRTJ5TTJrT01ldGsydVlINTJRb0xIMEZ3bHFJM3A0T1ljUGk0NE5KZ0d4ZTV2L01zRGRkMGVOSHN1UURCQ2RHK2hsQ0FRSXVibWgzSUtRajJUV2J5SlNkdjF5cWJ0bnFiWGxHcmxUNnQ0bXUrZWxMRGNrMlAwUDg5TUg4VDhnQ0JteUVFN0xBc1FMaUtSTzE4T2NTR3ptQWhQU3ROODNHVGp1TnRseEVSNkk4MytTUlBDVFlsckZHTzBJaW9BRGtrS1h1UlFxcmluMENhR0dUdUpWbzNHSXM3RU5Uc082V0VPbjIxNDd2eThjUEZoZGZYSzNnaVY1NksxR3RTQVRwbWdQRU9ZaXkyL3QwT1JvNWVaYkl6TVJ6THJ6WEpHdDVoQ0NET0pyQjVROWhQZGtCU3pWc0VSOU1LbWZjODQybWtoL3djcXZRbmJtbDBvYVZ1NHJjTUQ0S04vaS80TXYyVHMvbmxMMkljSlF5UHpRNEs1NTNybXc2enhpMGVmenl0WTduSm4xSkp1UW82UW5WYmk4ZFpYcGEzL1g2RDNVR0dLK1lPWDR2YlQ5aS92NjlGbldHMHkvSXIrdUROMnM5QzJBMFh5SHF3R3ljdmZVRDRRM29UdkVuUmFzQWthUXhUYlNVL0FGZ1JtWkpsa1Iyd1FaOWtGNE9MVzNkRFBJNHJaOHBuTlJYTFFFVmZmVUVCSlFqb0hVZG5vTk1kbTV2Y09xYUZtNmpRR3RxRzVQcEsvWnpXQXVwVk56bzYxSmtiZFhrR3QrNyt0aFBHYVRmbkhmRjVsSnlWdm9xdW9vWHJZZlZvcWhSQi9WK0VOcEswTDU2WUplRWNOR0lQOHpybmJ6Si81bTRFaWZ0aytwNlRLMHoweEUyeU1wMyt4ditFM05RQlFQeFAzT3oreklrTHFYaWhsemwwZ1FmYXdRRVhISjg1TTcvYlVUZUpOYkVWZE9pYW50Q2ZpcEZ3U3FEWnNrQ3owa3VSUnlmK3BWQko1TEFnZmFSd0dGcjdPRDBQUzFReFJnRVl1VEVnaGtCci9HSUMxTzVZeTlVcnVMdGRlSEMycy9jSkFXaDBnSFFKWlUrVWVIVWl6TWxJNkxER3FRSkJ0ckNzR0t0YURUTFh4bkZweWk4RFpvbU1HQnJRY3pkS1pkMXJhT0dmRmFvczhONjF2a0pvUlJWQ0xDTmw2SXdlQWtCdDZQOFh3ZTZGRW1sVXppRWZNSmNaVUowNG41bWdJWC9Mb1FSTHNtNm5zd0duNzR1S00vUlE4R2Z5VmJERUFCZUJzV2xoZ1draUhodzkvYlNUU2lOcTEyYmM2VjBTRTl2L0I5UlJuVnRjd1ltdHdXOXh0MWJNcEVWOUJNMDc2ZFpkakRhNGYxOW1TdXdBRDBxeUVaTy92dXpQSURoV3lRRUswS2VhZXZhUnlnMVpwRFlSb0U3aVpBN2lja3JsbkJabWh3WHZvZXNLVDBid1NRWGZMdnhuNU9yL2V5SWNoQ3BIS2YyQWNZbHJjOG1QZ2FnOVM2ajQxaUlhQmtMS2lOeTVtSUJ5NzJYWkFmQTduOU1qc1lybTBSYnEwMHg2aEJabm4rQ1ZYbHZsNmNORHZwOTd1dTkyUzArRXZFcXBRc3RaV0Y4T1E5YnpBT3pXQnV0eDdHbWg2OTMyaUpDdlh5SXV6QjJPZUZlL0VXR0V1OHR4cTU0YTY0MmxwZ0VoUGtuSlZSNTFXOUFMRkpuWjBlQklqZEg1WjF1UXhqMEtUS3RJNi9nQlBNdytYdk1aMFlMTjFLTjYySTh5bG9oUDJZVzd0UGxPL3k1SVQ5TVQrcXlLb3hGdFNkejFjcjB5UWNielpyRWZDSy9Yc2JqUVNsb0tnWXJJK29DZlVWc3U0S0VzdnRzQTF1VDZIODI4REJPSW44R29MK2ZqNkNjY2pyVHE4RUR1UXNJUVdMQm5zR1FWUDFNTXpBbXBOK1FoamRRaC9xM3YvcWNqbndWaHhHOHp3LzhRVkpna3hHUFNROEFKdEFoQWJlMDlZZk5ycTliWnRsanA3dTFqM001aURWaXBrOXdHUk5FVVZxNEc5Z2hycWx3Y2RXd3VyVi8zUDJzZnVETTlRRmcvb0ZWVytodlRaMGNvaTZOMGxkVW0wRmhibjh6TUl3K0JsSExHcHEzWFZwd3hZTWQ5d1FBNGJYOUlpeEhzam5ZU2syd1VMOWVTbEtYaFdUaXFWM2wwWENBSjhTbEtWOWFoRmNmbTlUZE1mekp1RUdyeWc5NnpXbDk5OHdpV1E4NW1LZmZxeXE5SGFHYnVzcTZTVzdNWkJuVEFtYThWS1ZNMGliY1lycXBvSHBPb2dmWlA5THE0cFliTnZFdE5SS3VnKzJlS0lEY05LbjJDQ05wWG12bGszR3FZSmVQN21CZkxNZ2FjRzFtU1lCenh2bUJzSm92b0ZGb1Z1Y3J0V0ZnbFJGTllPUzRVM1BNMWJrVElweVJEa1hQcDJwNE4xOXNtUnhIOUJkZ3JBYnpIYU5tRktyZEptNHhuVFdPeGtRVnZDK0U0OHQrZzBFbkd2UWVQSnluYWFBWlk1S2F5dEFlcmJzMWRBTldnQm9PcmVkNVhRZWQrbEFzdW0rV01BZXgrK1EzSUlnd0NxUUxMK3V3cVF4bEFaR3VqYVN2eUI2ZFNldlNEeklRblhnRDBSVk5aZEdlTzhlM0RZVTBsamo2SzNZRTltK1EvVkwxeHUyTGRwWTQ0MFF5V281N3Z6REwyS2VkdlRPLzBPT29zWENHcVh6QnRDaUNhQVpZc0Z1cStMSDJuL3pnd0FIMjdXWmt2ZXFyWEVaRnhuZDA1dUI4V3JFdk1KTEJwbkdiVC96MTJSRlJnTG5sd3lXczhpaVNsNm1oTE9zQ1JKS25QU2JIVDhJTU84WmN1b1JvQXNRVGxCaWlzOFVQZFZ3Rm9JYUxZV09idC9sQkxaeW5SRWo3cEhvSllWNldTMktacVFKSnRFL3BsYTB4L3czUnhJQyt1YVRUVkl5YjhacnlvOVZMMEtiR3NvNzc2cVlINWVvMmpUWi9tQWdHVW1TUTJQMjFiZjNoQzZTVXk4VytpTlpwZ0VFajN1dFJKVUNKWXRPcXBjY25MVzhPWEdzWm04MWVOS2owMzdOTjVhNTlvYm1iUzN5RUFhS0VlRFhPbis1Vkxwek1adjJ1L214WEhoQ3hXZVRmY2ZtOVJDRlhrVWR6Wm92NXJ1OUtlMWFCR2pnNkVuZzd3ajI3NnBaQkZJOXAvZXpoZkNicXMxNm82RWRYekRrdGhhN29TdlRtZXhobldJbktjYmNKTUs5T2tZeWptS3dPM0l6enVkM0I0WHh3T0Z5eHlSbFhHS1hiVU9La0liZXdEYU8yWEliUnNVaU12OGJ3MEcwL3M2ZGRpai9rbmVzS0lHblJEdExRWit6a0lQZU1ubysxUnV0U2o2aXVSOHQwTEtwN0hMTERaNXU3U2Yrb09UVmFJVGJ3bjEwYU1ueWtJU3JPWnVWZkc4dEVCRTNHaHpoSGtsWXNMcDR1QUpTY1Bsc1oycTYrM2c2Y2FOTFBwK0dIVlpqUWNZU04zSkZlVkphTFlHTlNRTWNydmpidnZYOEZ6TDU5cDNWdXF1cHZwdC82V3JwWmNBWHcrNjNnbEY2Yi9NQjc3ZjFhMUJ4TFdCb1lYRXhHckZOdU1SdWFxRU9QbGhYcTJWTWRzWU41Tk9tS0kvTEVYYmxLM2FIazU1L1poN1M0Z2ZWYkxFWDBnckpzMkE4aEhaZVFhTWFlY0JibGFKRENiT0lUVll3cXppRkNuNTlXeDQzU2g2ZmtGcDJLMC8xMG4rSHI0SUNiMk82ejVoRTgzV3ZhaEl6RWdVNnB1OFF0c2Nwc0FsMzYzTG0zemIwOUdJaFhHd1lySnpnUUtrWWVJT0FlbHpCdFU2bUtPMHVRTEg3TENxNFEwOCtZNWVsdzBadWljbUUxTTVLQ3g2dzBDQVRwR1ZFZVg4dE8vRHVvOFJBVTZOY1F2M1dacUhNa1gwWTJVOHZvL2JJdjVqYmJDK2QwbXh3RnlmTlZIMWdSdTl5Y3hLZjgxNXBEcUd1WWs0RmQyTTd2RmtDNU5XN09ydHM1UUhsMmdab1hqYUFOOUlJMTBESW5vUDdqcE03T2tjNElGditMeEVwNVZRZDMrTXhGWXRSekI0eitVWWhTMzdia3lJVXUxVjh4Zlp3SWxFSTFCT3dTTzZiWHhZRjlYUlpnbFhTV0dUUTNvelFtNmRaaWZlUWJjRnd0MlhER3VXbUQ5RlRvbmttQ1NIeXBaOFRaNlVIK1JHNm5FQ0VaNVRBU2ZhUUNCblBhZmcwWk40bzFNdllROUpva2UySDloWnR3TXRhNS9Zb21EQUxZZ3hEOFhFeDRZSlIwRy91bWN3VFUydXVvZ3JxdkkrbDB3K1JPTk9UZWlzUnZNZTFnWVRWKzRtSkNhdzdsN2NtV3VVRFAxaFpEcmdEdmM2SW5vaFdjVUQrWmE3c01WVVJLVVUyclBEckwyazVSbHIrb09PMndKN092TUt3cVNsRkVOYmxaeEdiMGJEWDFVRTBEV1RzeWdGTGtyd0hOQjQ4MHpXanJYVVQvcWMwTnd4M0tIOWlldldwODFXcFNPWE5SdjJTODN4aC9XMFVOd3hzcHl1aEZuZXZEZ3pXb3UyelpmRkNCOGd4cDlwdmE2RkVtd2VReENwcXVYV0tmNXVIbXBhUzRpa0lKQjA1bERVUmQ0c0RNMTBDQ2NrUVRKM1gxNzVLeFE1RXFDQVBvZFYrOHpaaXVUQ1YvNk5mR3F5ZWZqZkhqeW1RWGszUkdvelZ5L3REeXJpa2V5cFhoS0tDOG94eVBGRDVLUnB3Sm1oTTNVUktVY1Q2R3YwK0lpKzZKY2tOblJMRWo5QlQ5c3J4VnpFSDZyNTcxQkd6UENTWC80M3JYQ3Fldk5JM2NiL2UySkFDRW9SVDFibVdsWlJyL2hXdHNmZXZzVFdFTG5nNnVKTzRETk1OcitlRzJIR1lOM1g1dURwSEdjb3FUcXlZbWtMZ3dObTRtakkzKzFYZW94dHdJak9XSGdxZ1ArNnRXeEJ2N1krREVxcWRTalJqVXBrT0FjcG8zNTRBVFZmRjlFVjBDRUUrbUQ5dS9Bb0RtcGQwMzhOVm9xQ25sMEpjVmJjMHRrZ0h5OE0yZzFpNDdFMTBpQ1VhWnE3S2QzMU5xcXNqaUFwc25weEkzUGU5cEtUNVJGMHMxV1pkb0hsWlFTcHZ2NEJQdnAvdXo2bnVLNms3TTNTU2gyMUJZNUkvOGdMRCtDRFFCMFhUYlBTMmFnNElnTE55eXpac0NXY1VjbC9aMmFyRGV0N0ZFTXlIQWprd25WSFdySmVLd0hTQU5kQjY0L2x4VGJQS24vQWg1Zm9ZaFgvRkhZemo4L1VJV0pBR3FBOTRReWsxbVVuNmdZelN0UkJKd0RKS2E0dnhTZVZ0U2grUkdPdVJseGUrZ256MlpTRGU4VWc1TmdOckI4c3lSS0dCQndYclJJNERxLzg5T1ROTkhGVkVqYzdZZ2U1VlFnTmJ6ZnJ6TU14dFRUcVV4dHlsaFNyTjdWbXg2TVk0YmVVcEtzVlQwRitIZzgwelkvRUpjalVrWldFSm4zOGczd21lcVVlZm9UT05Da1FPYklsUGlPTjhFVlJUWHJ5VGdPZzg5NTI5N0w4WlQyaHJzZjI5N0R1TXBweng1T2YzSzVOR2FyUlNYa0FNR3NnOWY1NlhYN0NlcjFpbzUzY0g3Rll0OHpsSlJmUEQ0M3FQNzZpNmcwRnJUWGlqUjZRMnY0ZjZoV0RoYXFsRGZjQW9hZzdkeEIvTzVtYm1xUWlCVmRXUFdaUSt5SHZ0aVVzYkplZm96cUJLN1BsNTBvZWRxUndlS2dqYVBRUmh5ZmRJakpRZlVPcENuL1BGT21TVlF5dE5YYXFGS0FFUlVnZ2FjQm5GSnR4YUxiUzFIdlY4RG04U3lzRGNwVnIwaTF3UklLeVFKUTlpVHZHYThRR0R6eGQ5N3JlZk93UDc1bjYrdXNuMDNEYXpDaHBzU0VHKzZRQjRRUGpqZ3pHL2NQeFB3ZUgwMVA1bDZ0OFkxc0xBSGhVTTM5dzhMWm53ZTNCQWlmdmFXSXdIVTlEY0tSRkN5SmdzeEFTTTVvMWY5M3FzN1Q1RUVDMkV2ckdZdk9jbWEvQjF4czZFSEQxM3VlbTgyRW9UT0h4L0hrcW1LdjlCSUxyZXByRHVoUlY1VjIwWGJiK1dRaStsMllVdk1kb2RTRzV6bUNoRGNtTWtGY29mNXZlUVZJZXVyaTE1OTYzTkxkS0M0Q29hMUNWWUo5MmVjNkVXUTd5VlVNblhKaWwvS0o0a3NySU1WZWh4ci9mM2lKMC9DMkpvTXQ2aWJRanQvVVRvWWJSTXNtd0QwMDk1VnB4eWV5QmVDM1NabkhGelZZbWZWaGFkanVvZ1FEOUJ2cUZTY21tVlJIYkI4QytTK3UzTngzZmVUMXhPWDF3NXZuVVJHT1kvVEo4QXd4RHVTS1hXZVJkdThxRzNjRWVTWDhOU1RTTU96NGhNSFlCcWxRb3c3N2hTL0gwdHgwNGF0VmdmZkFKK05QeHBVa25jZWh3SnAxcTBLaytXQmwxak53eG8vTDBHOThqRVgyTlNnZE9WWEZlNWVxNDNjbUx0bmZRY3gzV2JKRTJZNjdra2xxWG9PZEhlKzBoU3BWRmFIdC8zOXRxUXRLZDVVN2Ztb0ZKNEhEQzNZUEJNbGhhdnliVnVwMURQUW1pdnV6b3RUSis3VklGOWNIK2ZMN2tTVDRTVXdtWnZ2emxkL1o4a3RDdmFQOE9odDNuWkt2UGgwZXYwbkxwd1RsZkRaOFRONEcrMjdrNlNtRk9Fb0lCVE45TUJDSU1hQm1EV3VqM1NIMmtLa0R0ZGVZeS9mb0NOWXZSNmNaL0hGWHU2cFZZVTJYbnpVVC9xbmlMdFVOTW5hWXM1eXp1cVYzbHFkME9mWXNlZC9jYklKOTlNKytRWi9zZjV2eHZ6TXVaQVp3cjJxT0FwWnlnR1lmaXBJdWg2OWFRSlFFTUJnVjFHdFpFUFd4c3pzaU1ESXVlaVNCUXhjTkJrUGlaRkovbzhVSStuem9uY0F2MzJpNEIxT09xaGFmMXhoZlh2Szg4R1c4aUt6VkZlRzIrdzNIb2FwNzcwMHRCM3E3TkdZSll5VGVjQjg1bnlvRzRkblFDSThNZThEZ1hIMVhZTDN2cnUxQXZsSHlwamtYV1ZJZXFkMzRlTHVRUFZIa3lUQjRobldrNy8zalhXbjQ1ZlloRGVuREdzeXc4VmhhSVlDZGlTRWdJVU4rclI0cWtzbjVZMTNFZkFzbExvaGFLZWFHbFA4Y0YrWUU5NjZDVGZ1QmFDenJCZ0NtWnNuWEdlYmpNVVdwSmd3UCtVV2w0OXFhNFNJN3dvQTlyNVhvZWFaTC9GMTU3MHNkaUxNUFdGQnVWSEJONUt0Zzd2emRwZDFPS3ZrQmY2N0tIQlphVFpmcTRZbXZ3SU9KeExaM2FzcktaeUxiSU1OZnA4TkIwOEdHQ2xmaE9yOXF6RnMzQ3dLZ2QxSGY0cmVEVExZRzFvUkVpc29tQ3lnV2k4TzgwY0NvSEI0VUdFNjcyTnpscjFlbGxUd3kxT3N5WFRGR0xwZjN0OTd1bzBDMmgrbkNudWoxaUJJVXhtVnZYNFlsNVFWUXlqR2ErdmZwbk9wTzJsd0ZuaHhhUVh5SUVqaDNvUE8zOWQ1bGJEMmQweHRlWWV6VzI5R29QcGtFMmJnemR3MzRzTHhNTXdUUjEvVitvb3Q0djhhNVN2OCtPRXZ2K2hxUWQ1OXBvYzB2L3puR09xN053MDc2bGwxZDNKT0hadGVmdlVBQlZmVDJidzMwenhBUzltYURGSHNuZVlxd2lKeXJoZ0NwK0NoK0g3SDVWcGcrUDB4Q1FkVExEczdlakU1OHFFN1d6VldoT3UxZFlNNjdxbi90b29haWtLWTBSTW9HY0hhemhibUNldThBbEJUQm93QkxZWHVITDFna24ybzBCeXdKNnl0dFNsamRDcFNJbS9ZZWhaL01ZVmdTekFOdzI0MWFoYzB0QXpYU01BUHlhRkFSMUxLamRuc28zdE9QcFh1SVl0UmR1WGFOejh3VjhRS2N6ampQTlhYRHcxYnlpT1pYc3haS2pPZWdTQkkvLzN0cVZKalZsWDF1b2FhYzZzNzN2NU5PanVPblBGK2dZRk1VS1FWOXBaWnpnT2F1b3VrQVd0ckRMaXBsWUhINytEK3N4K2V1ejNpRFR3RGFMZUFzZ0R3SkdMZ1ZMNENETFo1eENZYTdySVUySEF2bytTRHMvaEVVUTQ4YXBuQll6bHVjMkI3SzZETHVWNEpnYTN6dDRmMFFsTjBLaE4vQ3FHNEhlOXYyY2duVmwyc3NwWHpFMTF6aVBsOFpqbmNvWXlzMzRiQ016SFB2Y0FzTm5jSEtuVFlOSlBPaW9TcHZLNkhxWFV4NGVQVUsxQmErZ3QzRnZoK00wV0lHaEhZdWt1SHo3cFFsaDV1RTJidUE4SkcyM2Q5eGZENzRxS3FVS01sOUZCK0c4SjJRT1lxLzJYR0NPd01RbFd2NXBaa1RDTThwWUs0TTFxZldwYXhRTjZYQzlVdTFEUDRMcU0zaDNnRzJob2VZYThlUitQM3RiMERTd1lKcXF6ZzBZM2VqUi9qU3N0azVaWFhyMFdPTWNySE8rRElBUllMUE45ckU3Q0F3Q1FtaFlCYlJwZzBwaFU5bnpuYU81Qld5enZpUmdkRnZWazJNWWxrQVhwb2EzbFRoL1lZVkRSU1J0b2hMWnVBbUpCMmlMOEsvZkhEMCtpeHFNbTBpNVhRdGNLbEorUFNkZDBkQUtVcFhlM3o4L3pYcDZrZnJQWkpHS3grMnZ0b2x5MFljb05mQ3k2ZEJteFVTcElxL3BTS2FVQklQVjB0bFE1RkVJb3ZMMUhER1NKc21NNTRodGtudDdpZnBiamJjUTV3U1ZPaU4raS9FaTlLbmRvSER4NGxYcjZDbUc2Skord1NhTDM2SlFBc3V4Wnk4SDlXZUdVb2U4Y245UVp5YWMxdlRMcktEMGtaZG5pdFRxd1dzdmU0MXFaMnpwT0xFd3FNMEFJU2NXQzhZeWdyT3dSYkJlOGFGQ0ZhS21RZmRvcWJuVHQ0cVpoeTFOczRxUEtLV1FrVDNjRHA2bDZQWmg4SlRmV2p4ZkVTYnFQMW5zMlAyQmlOT1B4OUd2VVRvSXM0ek9VYUVRR2xDa2o0TWZiVmxESk4xMXQvTjZXeUttMzFTVjhJUkV3TlRtZVBjQXphUTBJUml2Y21ycUxiR29XajdTbDNoWnJ1NytmYXBwaWpyV3Y2aGlXNFlaVTB6ZFBoTlpvbVplNSt5bmEvMGVQdXNYdkIrLzA1bXhSaEJWR0tMZWVzbk9hVGxMd1Z5ZmlHYnBlU2dzQnAwRHNWMmw4TTVxS2tsUHo4RzNDNGRRK0UxV201WkNVUVA1RldDblNNQmFaeUQzRUwzc0p6eGx1L3BGVVpYSHVPck00azhzMUhCeHo5eXVKR1I0M2J5ODZTNzBoNnpKMi9oNUVjTVAwcjgrM2srdWJnU0NUcDM4cmpCSGozdHA2K056UjVERFVlMjVOVEFiQXRzaGZBeGpHRDlFTHkyV1VJMFEvVTl4S2VxbGFXZXd1L29XNnhhR3JlVzNDUGJkYjc3RUhKTzBrcnJKeGJlRzVBTnpGa2NWVGR4bzhOZTVNMjI3UGF4c2xBRlJ4eDZVVk1CdHhvbURmVldmNUpqWTlwRnVTd3FPVlBWdlNwbWVNcGYwYVFGNlRDSWdUanBUVlNLZVU2TWxKU1NlTkNhYTNYeWVMZE1rMzZjVTNvS3dERG9GWVdWMzNlTlQzMGNMa3FTQmZCZFArT1JZWXdBKzVvcnlvbWZsbzNjY0FqdXltRXU3a1JPMk5LWThZWnlHZXR5YTFPSkJlVUhIeTRHaFZ4Q2d1eTczZFp3UDVkR29lTzB6UUZCT0QwNGlFR1JmNisxdFo2RDJWUVc0cXl0M3ViRllNeGEyNytnNVhvWi9wa2hUNU13NWR4aTVpMmxRNlhydFRmRmd1blVvVitnMmovNXdDa1JyY3VzSkNXbGcxUHhMMDVsTGNGNU93OEhEL0JZU2xoNlVESkpPSjk0M0NOUlR4MjBWaHdiQVlydkJhbEg4UW12WmphOUh2a1M3cUsrU1JWK3NiNVF1L05TdTB3RldjM2pTblFTK29iQXlJTkc4SGd2TnhuWTFjSCtSekl4ZlFrbXhzMkVaN0cwNVBOc2dsVUJuWXBUMkZYL1U4bzdvRE1vSUVzdVBIenBVRituRmt0aGdmNUw4bVo5QUlHT3o1MkRNbmpmK2lQQ3FZY1RYQ0xOWTM2VmtYRHFCMWR2aW51cnFTZEJzbjlobWJxdzNIa0hQMU54MGhqTnpyMWYwSmYzcUVDRUgzMWxDdGlsNjJRSHl6WTFMTnJjTW5GbFZ0RTZsa3NnblhUL1pYMzAxZlBFVHRrbzBOd1YxU3hpV2hpL0liRVNSRTRIWWJDbTh6VStuNzlqb2loa3BGekFwTktrYjdtaWMvb3htM1MyZ05GYm1XclhsU1FoL0o3NTFGbEUwWDk5SW1mSUlsSjFrUjZPa202dkZOaDllRkJZL2g2WmJZYkovZWlXdGJmbTdJU295MzdCTWhua0tRL3B3WmNNaHdxTGIyTTV5WWtKZnNvaCtnU0pmMlNkUjhGMGpxSTVyK0ZaQWlCVG5CdHZTMFFhY1dkK0o4cmZzYVUrdlNESUNIbS9xVk5RSi9BRWVHNnUxYnQ3WEYzemoyRk5hQ1p3dUR2MDVLYTJkUTJ1b1FCUndXb2dmZ0hFdkQyU0I1aWdYL1NlQmV4cW5YUnR0SGNudVpYNElHYTFrS0EzZGpDM0NTcVJDYjExbkpLWjRRRERSQzd5OGRWeUViU2FRTmVQWUlYV01JR2Z5STZxUFIxOWF2dXlRSno4ZGdhd2h6WFpwdU1VVU1RdDlQNTZkWU5RaVhQMG9TZHQyN2ZTWThpcHBJTzB0VURGWmtLK3FGdk0zcWgyTGpnb3R6T0daYUp3Tkc4V2E2a1luZkUzL3NaTis5YlNRMUVwRzc5cVVUQ24rc2J6RXNsUngrYWFaWkhiZ0x5NU5RUDl0UTJtNHFaZnZmZ05xaDJ4Ykc1Z01QdlVZQUtCaWZ5SXE2OGhHeVVYU3RQblA5Slo5UWNFTlJTU3l1cFJrOW5RZnBKdWdZbXB2bTU1MVFVbTRXWjh1bDRKRWtkRjVDU3g4RGY1eU43RjBLSkl0alJxRXdOd0F6enhrRlE3cEVHY3VXTjB2Vzc4MUdTbERYK2E2NSt4YnJGdTU5Nm9jOUxzRCtDYWJFVEI1SkNNVjdLcklBZHprcGFOYU96QzJhODU3WFRwZys4OEhWYjZpNStxb1dTR2dOZFM5RlVRcjRRTysyU2JHTlpERDcxVHpvR0o1NlZ4emN2UGJOUWRBSDRmUVBHbkUzMUE5QWxjNWk3TStwTHVJUDNyVkJ1Z2lMRnNMNHlKMkJzQVZ3ZHE4aGVEMVl5T1NmYVB2alpCRThOb0luc2JPa0Q3WUJDWXhhZEJkS0NicFpSaEZYK3dpUjhQNlhHSTZQdjdTWWpxMSt3U1p5SlQ0QzdDNzN1eHl1WEVrNW54VllUM0IrdUxQQmFoOFpFS1h1NVFvdVc2bGd0a2NhTC9Ockh2c0c3T3JaYWZYTEdSeE9YWE9jRDYwTkFQczdKeUc1R0VTRXFJYUU4YjduNjJmU0lxWEVEVnJTUVVRUTJqejZkb2xsbDMzZlhvaHRlNDBrTktIaFF3VnZnWkQwUGU5YVJmV2VzOENnWmVLbFZPbndBMWh3WFRxZllRbGR3Qmd6UFV0S3J6RmhIMzAyeUFQQkdVeVdWdndzWVNYU2l6RHZEVzZybjBJdGIydHVOZnl4WWMvZXE2THdEbVVYWkY0UkJhRU92YWVUYmpuNUh6bFhqTUcwNnIzckNEUkRFbzA4aWwxNVpuS2g4TXFBVVVjUWZQL1lQOUpBNTQ3Y3BaeS82UjNsRC9NOG96UjdMdnRYelZjdm1rbHhHNXVteWYwS1JibzlOc0VrdmNwaHE5U1FMcFBaam5oUFRrbGlZQUdjcmk1cDQya2M3b0lrbGc2YVNoQXQ2bUNSeG5XNm5aS1hIV2F0WWFQdklnYmFDUHhGV0RvcnlGZWNvbndQRFVkRFkxbXdKRGl0MUNHeEJnL3lIa25maXQrYWlCMjVpZlA1UXdpSkpVelVJL2hLNEJYSnRRN3FSUVdhRVh2WmFhREVXQU1hQ2xIS1p0Zm55SkFuaWk0NkR4UHlqZFhHZmg0WHVQblRVMGw0QWF2dDk1Tm1OZmVVeXZseXNiVm9hY2VFNnlSL1RZWDUycStDczFqTDlKaDNiNXhwMkt3OHppVUZQVlpOVXkwMEZtalY1ZFpudkU5RVkwL0UrbGhUMGp4Y3FPb3BLL2g5bUxhTWFGOGsxbWM2dkE0dnQwS0YxRUNVcE1jdTZyZGdrMi9SdFl1VjJvblZuWlg1TG1Ha3o1ZzRYeUR2dm05UW9iMFRhMFNzdWo3bERrWEFSdmg5NzN5eFFRTEJ6eVVZKzBML3RON3NucWt6MXF0TUZROThpRlJzUlc0QStyNndidTZjSFJlUWNlVTZxZTRySFRQbG5HaEg1blBkWWpraUFERVl6a0xReWhCN2hxK2dCTHFYODV4SkxFWHA3Vlh3RmdhNmNNa0E2cEphRUduOG1FOWVIYmRNYWg4YXVWenJsUXVzdnZEcHpTVHpQV1BwYk1CamNuYXczTTY3OUNVcGd0RUo3REFOYkVPNFV3RkM3RmZrb3FiUzh2U1ZiWGJVaUJja056R2JLQnZJWlRxelVsdEp3cXo0RGhVZ0l6RTYyYzlGNTlsNU9mT2ZmWlNqdU1mdVRnQWxwRnYybEFiZ1cyLzFyendrSldkL2lZbUQrU0VuOGVnT1BITmtIYnlmNDRWQ20yZ29sTmo2blRXWVB1ZDZZTWlteml0akNrUW55L3FXNlNiTnVCaSs5cW96dlpCZW9ES2I3SlNEN2dTaHpaaWxwTlhvOVgrSm4xZHFqVlBpYXZvM0lnaGNTaTU1dXQ3YWlraDZncUFkSk5OUXdCRXV5WDFIaWZSczVralRzL2h6WGpLN1p3ZDZubmVBUjFtNFpJWlA3andNQ1NIQVpTU3QwamxQSGE1Vy9URS9BSVFMTWlZcUppSHpjam1NTlRoWkxqSDVlaTFxNzVBaTZPYVpWQ0N1OUlBanFRWW1xS2ExL2FxdjhvZzRmS2k3ZVBKZW1UWGRyc29WQStFa2o0VktjNGFiMko2dzZJMkZxWWo3VW0rek9BQWE3NW1zbnRwN3JzTnhLZDVuUmhMZ29ORFdFcm9lWi9SQWhiWjFieDZqUTRoU2tPTXU2dVd1b3pGYnRaanU3cTNTVmM3U0NTWE9YelkvRGpISUxTNm9ydFhqU0ZsZnVnSWJBM3RqWEJ0cklsb0czdUNDVGUva2hiUGRJbWl2MEdXN2VxdGF4Y2Q1cTR6dWdhS2l3TmJnaW4wVFViU0huR2tBNHJ3UG1PRWMySGxmMlNQaHY0SUJNaVZaOWg3bVNqclUyOHc0aFVtOUJiMktjbnVIUlNGdEthek1TVGN3RmtTVEZ3ekVJRG5iSWJBSWlCR3VNclQ1TmJDREhGUWRDVVI0WlFLQW11eHN3eHBXY1NJdW5seS9rTUJPL0lON3JrUnR4STJXaTlVWW1kdEcwczAvU2VXbHRpT1pOUnpROXFZa2gxQndIWnlVY1BHZmpwbUhyYTRyU2JvM0JSdlFKTjFIRFRXN0I1YjcxdnpMbDN3N2gyN3NTQ0lMdG56K3JZUTFUeDVHeEtLYVBBd291Wm5Pd3NDVTduQU5LL2gxR0FrUnR6Um9SVWFUSzhmcUxMWjhYa0lMaHBmVm1WMitJRXhPN0xDaDN5ZzdrMXhqQzNaTUJudjRVZTg5UDRoclYrNjVNY1BwVXFGc0FVdTY3K082SXdkcjlaYnVtRENOaFRvWFZMelBMRCtCb0tud1V0SkQ1b1ZOUjc0QXpxU0I2M0tCWkZHcHgzYVUwM0JpN1lYblpxdEhkMU1QUTNMd0w0RmptWkJhYTlNdWI3ZWZyeTZWMWdLK0tHTVkyNG9pd2JDbTNqdlV6SzJIV0FwUHo5ME5od05qRW04MTNRRW5UdkIrNm9kWHFrdkR5dGNDWEpMb1l6TnBTaHBveXl2clJ6RW01aThheU55SUJqVk52UnFvTWd2ZlAvVzB4eGFKbVJ0NEh3Ukl2ZkJTbHFtd2NzUWQxRkl6Njd2SVVrOTFvWXVCeWlXNUMxUW9KQ0VhNTNyc3J2NG5FR2txb3BHVGIydnBVQXZxY0VVZVRsdDVPQTJwalhxQ3F6c05aWXFEVnNQSmJEci80eEx5d0k4cHo5aG54M3gvTHBsRVZsUW10NzNHYVpianowWks3dHNaL2F0T1ZTWTFzUE53TkZzc1N4eXJnQjRJOUk4K1J0TVRNTWxCNUNHN2lZUndNa0ZVK210anM5UDZrdmgrckdCeCtUd3NoMHRUWlVVRjFUNjRoSXdqRC9BcU5aRzZkL09QbUcxc1V4K25JRXR0V09JSklXbTBZMVl4N0pqVWZqRkp0K01SZ2xNc3VIWk5kenN6ZzhaU3QvYkI2RzVyUFhHN3QvNHE3ZUFPaEYyNzhKNHpGc2ZMTGFKSkFicGprMFpNaHBySzZoVHhwR1Jqb3h2U1o4c05USW12bkwvQXNOSU8yaURkdmVYTXFUTi90UmIzb2c2VG1zb05HWFZuZUk5d09wUmErRUtwVFBWMkh4YUoyV2RNMCtaTjlRZDA0SUNoQ3N6ZEZFSitWN0hkLzRQalRWQ1pwVHhBSFhsUUtvSXU1bXFhYjRKRmZ2UHZWV1RjN2J3a2lEVHhRcVNTazhZQzN4Zmt6Q3lOMU4walpwVW5oV0FaY1pxSE9qOEFHd2Ezcmo0SG1hbk9xTmlvY29CTEMxRGZNRmxTWTBRVkZHZEx6Z0pCYmNra3hadXY1TE1VZkpJRlBXSURhZTBsdDJYZDBFMzZiMy93ZEh2NzdpZnJOekhVUjVuQ0pRM2k4UExTMWNaNTRVbDhqa2RoKzlLRkxFekZkRkRHZFl3QWFCelBnY0NCeFprSVRMTjAya0JUL280Tk9NMnhSMU5lREFNeFNOWDlVMHUyYVNwZVY1TTdIK01YZU9ocXZaYjhQQ0NVbUI4d2krZXZLQ2poOTNUUGRDSlQ1NXRjNVlTOVZmUXVqbGVaQTV6U3IwUzNUS3BkSEo5VEhybVBqdXZXUVZNUzY4OWlMNDVVSUJxTmdsb3FnT1pRN2MzUlN4VHVuV1FpNm52RHA4YUwwSktndjhBNkdqVUdKUDdoYWhKeGp2dHRPQ3ZZN0oxdUlId2txTTBwbkVVYU84bTd2VVorWDg2Y21sM3hHa25jZzVxSVhXc1VPMUI2YlhKQmplRVJ6RWR3N1c0aW81bnRvbmVWbVVodThVdW5xR3J5a0tHdnpHcW5qVkUvOVczRHNGM2RHMzBKbHVqYkgvWDRBTGE1WGZrVy9OT2xoNzBRSlhvQWllb3RRL2xvZmo2dkF0S0RUMFV3UXMycko4MXJrNmo0bTFGSDdUMm92ZmhFb0t3NU9paGlNMncxTk9MTE1URWduWjlyVkRTZnc4NU52RHluQjlQTHR2eFp3UUNPbTk0dnl3QmVzVThzaUpSTlBHazcxNzE0cDBla1FvT3FoU0tndnlxMmI2cUJzS2w3c2R5V2Vyb3RjQUxUWmI4T3I5a2FVOUNFbUszRmJnZElldU5CbHdEa1QvWWNHVUFvcW8zUjR6YVEveEJ2Wk9xNmR1M01wMGttZXpRNkY1QlErUHBGOEgzcVFZTE5oTVVzY21BTkNpbHJhaTZlcGRvMmY1MWpDOG96dDNGUnB4YkVKUmg4dzltZjNRWmxIczF1RGJnS0ZtYU12SS9LSE5HTGNiQUpvZndvS0Z2THFNbjArMm1CbUJrdHBWczdOTW5Lck1ldGtHU2h1TkQzMWdwOXN5THBiRmM5RVE0N0dpek1tcGdCTUlZdUZkR2ZOWXZ6M2wyQ0Z2cmN4Ync3UGtDNlg0L3hKa0dKUjZ6WnNBb0k1QkprdTFMSGFnY0s1bUMyVUwveHJzSEhueVJEbTMzbTBvNFJ6T01QbUdSTnRPUjRDQ1RvMmc3YUpuZlRLeERnU0hKcUw3aWp5VExwWGZVL2VEU1V4WEc3V0R2RUtoZjZFUjBJbHZQeE0vMEpTaGtCZFA5L1o3OHRBYnVRb0lMVFd4bFRSQkd1QjRERC9QNUlrKzNpQm56TUl2K0RXdDlzK1pJcXlJQW9nKzRqK1l6SjNwZ1VycFdTQU5aNEhjbHVYMzVhVXJrdFJOMHdsdkwwcm9STTZKYnVsYWJqSmxDMkFndVBQN2FSYlM4bXhNbWxRWmhGMVNsWTd0Nk1UaXVkRXNpYjlxN2VBZFR2cnFQNGhsTVp1WVhDSUhPamlFMnVSZGczd2txVEd1ZGVxbkxGNmxqZ3FYWDNXMGhKZ1U2bUVibjlxejRPZXBZMENham5WUlpzL1A4eFdQZE5hTDc1UXRnSWhRRytJQ0NZcWZxakpEMkp2T2JLekhsQWtjamppVnVEdWxjU1FtejAraTdnRFVtZkxSRXZMUk9wVU5MS2VRazNlajFmbjRBcGxVcjFydlFJOEZ1bWZyMDBOek50Z21zZ09TZ01OV2dlcTJmZmdoRFpHc2xSeWl6K3daUmIxazR0cEVlaTFtb25icVFwaVc3QzQ4bGRMeEJtdkZVSWRUdVVtQk02REJZREhlZ1IrVFp6NG9yb3BpNVZqYWpIUm5LL1hnSDlqM0ZGSCs5WnZIMHJidGZxVVgrYTAxVEtzNW8wT2F3WTlpMFFXL3dKK2V6ZWJVSzZjc2plYWk4OXF0YmU5RGpTY1E1d2IzaWMzL1BET2IrNC9mNThHOXVSQjNsLzMyYjZHSXVTOUZjSVdHQWtkTEVhQ293Q2FPR1psUFZWVVMvbnAvZU5KMnFUOWlydXVVdWpaOTdONHJWYUowRUpnU2lkYktaTGs4bDYzQXV2M0tvZjFHb2pzbFkvUG16c1dGVE55Z2JRNkdvMGplVDFiRUM4bmEwSTRyZnc2cHVGY2ZLSEkxclJKd2RLUEVHa2drbVFrNE44aURoTzFiZHdyYzZTVHkyRTh5MUJ4M2RrVVgrS0xldENyUEkzRlF5bkNjWUdQMEtnUEhydXN4Z3B1djBwam45aWFFK1ZXejRuN1FzRmUyOGhOM2hQR1BSU3REUmp5L3p5eklYclkvd1RjS0hYOXEvbkVTRTBBM0pYUmdyUVdLTzN3bFJHSmVQWXRXRENCS0dlL3BUd0s2R2F1NG44TnRqTU9TSFpIdXBCeWEyVHRQN0pJdUlVUTROY2FCVFJqU0hnRFlGVC9ZK210TXFxclVPZkFhRzd1aElsNU1wVHZNaFkzSWxJYkhmNytPSFVWbjl4cjhtUitmRCs2MnhZdWhHOXM2cHlXUDBSblQ1VXpiY2o0NWp3dUxtb0VSNVQvbktBQ0RDK2FxRnExbGo5SXlpZ2FZbDUxVGlVa0NKb0g2Vk4yTVFzWldWbm5ERnR3RDB0ZDZBK1htQktpOGo2OHBLRDFCd2xCWXRrY3Q4UThqZ3RPWGxFdDVJcUdjdFQwSmEvOHliSi9VMlZYV3pNM1hPS3d1Kzh1N3NJZjlWcVNnSWx4bHNKcFp0N0JsZDFUT3lOT25WYTduOUZYVVpjWXRwSlppcGFJMFNXeFRWMHNiclkwaythMFV3eERzUEJUbWtIMU4xVDJSYklReVBPdlF6aHMwT0xtbHFjdXJEV2pKVUNTWW5TSWdHOXRhRFcvVzI2UnZVK0cxZyt1Q3orWjdtcnRWTUlUYk9LeFVnd0Y4d3laQ2tsdE5sbnAwNWpIT2NNUTA1Ti81UldGSW54ZWZnd3FtbzlYNVB1WUZnbTJwSjQvSjhkTFlwdmkvQU9NUlZvMU54VlZnTWZoS1ppRUpKbVFJVGNXUE1IUHZXOWlaejM5QXFQbmF1cFF0Y3NZMUdqWnhjVjBKb1V0dXZJeDZyNUdBMmw4dWJaQ2gvWHlvdERwUE16cFFNYXpTQlN6NXRmMUxlOWVrTmJEVXhMQnJQOTJqMFRBRXc1VW9HWkFYRGlKbEhYeDJKOFQ2VzZaM1ROaW1tMHdZWXBvM2s1S0JNWm4rZGIwMS94TXZJOUkzY1ZWOVZqVlBmMnQ3alE2SkpVcEhUSFdaRXU1SkRhZ0Y0N096bWl0SFBYYkhJeDAyTnI2Z1RmeC84VWYyR1pPTG1aNVBpOFlBUmlSVkxNTThQb25pa3JYa1JQaW8vM1I1bHkycjAxY1VVVDdVdG1vRXRnRjlKd2pQMWZsaUlPaitENkk1VjlrLzZqeDZBcjVyNStsS3lIdkovMElmSzBiWk9saDNFL2U2d05BaVI4Q1ZpNTFEL3hnR3krS2VLNHhkV1g0dXpjMTJ1dXM0WFgvVVZRVEI2K1MvR2EvWlZ1dzdnUzRucEhuWDE0M1p3NTM3OFhRUm0zNTNhbTRVdldFcHRTMDZPVTBnZDFEWUFTaWFEWWsxbTMwWjdIZStPWEZKcjMxUDVFeXQwaVBkd2UxaHY0bkl2WFF6NnhZN1c0dndudE9PMkZkMUIzbTU0UFh5Nk1WWVVjVjdhSHZERm1laU5uRGgrekhxanZCK3Nza24wa0ZTNlFrZkVSSVFxQ2RyWW5QUUZudjZHamdSTjlnM2hLZ1YzeW9nL3pJei93ZjRsWjhZUUxCWUZpdEh0YU1RMmZRQ044cDhFdUgyeURpK21ZWjlJVnc1cTdjL1lHd0N4SHp1Q1RUKzJrSUVLMUdvbTNWNWZMbmdqUDJqNmk4bnYxemNHZk5rTUdPYmErcmQvRDlMZ29NK0NFVGZXMmhHbkZFS3daKzZPL3B5alBrWU5Teko0QlQ1V1MrTTYyTjE0a0lybGs4b1oxTWprTE9LVWRuc1kzT01VcDRjVy9Ua2c5Q0E2QVlObUZaWmsvb2xXS093OFRDbDU0NHZFeVlOQTNweHRRcU44WUxjL3Y0T0NrdStlNUc1a3JGdFFtSDJQWkFpN2NnTkhNZUhGK2t4bnlMQ1VMTWR1NXNwajV4cmw3c1BocElzODRLZ1VzYmdaTk9HSVd0WHdMUVNxaTc2Z0NBKzBEdHpSeTBBakpEREV4MUxhdE83OEtlSEtvZGVOWU1ScU5HcmlOL0tKMjJ4cFEyQ2g5ZFBnbklKb3VSMEh4a1ZFa2l3UVFrTXk0OThJb09LNEwzOXdKaWRVNkhlWnhVRi9xN04yNFlvaFZNS0dTRnZzajArYURIK3JSMjdUc3ZKcjZwK3JvczJCZmFjdmN3em1vajk4bHY1d3hRWTJEOTZVaTVaYVdmcHR2NmxNRi9vZGpYNTdCeUV5UmRBbU9tMHFyaHZuWEtyMnFPWlc0Z2p5QnZLeWN2ODluT0FJdGZSUGpBVXVFODdlc2JqNUZZL0t4b1JDVmRzUnk2YkpVRFZjbVJMZ3VMd2pmd0JzVnNodEN0T3NHUnpmeDk4a2lRbFhQSWFsTWVWVWx1cE1IQ09yWXd4M25WTDBwRUtHTldJMDAzMlZLN0hrWWdDR0ZUNzhtdTY3RUlDdFdHaDdPajlVM0RuSGY4Q0kwd3ZVVzJaVi9hbFQ5VWlzaXpQSjVsWlR4Y3ROSTJBZ0hkSUljYURBUHJ3ZzgzeVBNeENxbldseUk5ZTlKdms0Y0prWHNSUzRpOVFxbjE1T2Vja0ltbTZ5c2h4S29jUXBwNk43QjgyZWtNczh5NVdZeFhBQk50SzBqNW1RTXhnR3VTNWlnckx5T0IrWStXZjg5RlBHSG9kYkRQVUJjbVRtUEZySWNMRUZuY2Fmb0NtWnVZRGdtajV1Umo5NU45c3hvYldWUmRDSVFtR1BDUEVoUk9hTitzY1ZmcldrbXV3OUEvamF3Y0VWd1NzbXhNdzNiQlV6SGowOFhUdGNZcno3dHc0QWRRYXkxNW5CVG5ueXJNWlVVSVpERjhsMHo0dGk5WktvdnRmUG5Pb011M0ZYS0dmTTNYRC8yclJXajRtd3l2NEx4SUVKd2NNN0luOFJKNjN0dVhqSDZ1S1p3OFNhY3NPUUlCRHRRQ1FPblh1QzR3a1MvNk1ZK1BTTzdzd25NUHhZbWltN2pHcHJxZHBJY1NETmhTOFdpcEM2enUrRHRCbzBHdGhJMkRRKzIrdzlqSmp3Z1hDUmdCc2hCRWZ0OXNadTVEWFBSUXFLZFlMUklmMklXRkhxbFh2dVRuVWlFTjNoVmRpUEljN3hYN1p4K1lXdjhiN0svOUZqYkljRDJpTERqWkZhbnd4UUkzYlVuYzY3R0ZlYk5SUnRwUUh0dnRIWEhkaXRLVm83RmtWSzlmVWNwMEZKaExjMkVPNDIzOS9ndmFYVFN4YVE3M1F5SHlzTzlhSUNuSkZmRTVodTFZeStBblpXTGlGbEJYODBldWZBU3RLaE96RGNEQWMva1JPM1c4OWZobnhmbFB6eGtzbUxOejYzMGNMNTJzc0d2Wko4QVlmdXJFU0J2SktpMWJXM010bVROUnIvdFJwcktnUmREU3ZQS1BJV29FMFBqa3NWTE9paFl5Wkc1VkZ2dUhDeDNJck80LzYzTWdJY2hIUXBPVTE3cXVWVXVLY3FteHJ5WGFCUTRFMS9JUWVma0ZqbTBpdjJwcnZJVGpwZ1ZGS1NrTzUvVE5qbGZvMjVQZzh3T0FvanRpZm9PMnBPaWkxRFd2dm5UeVBCeXV0bmRSeTZiSzFxRUJCV3U0M0FFTHE0dE5KaHhrc3k2R3ZPbmNkTDN1aWtYMW93aTZsUWxGMWZLYzRsWmJUOGlXcHN4aDRiWGk2Q2dzcUk4eEFWa2NuZmtrMlREQVZDS3ZTZng3M252QWFOZE93RXFDd0xzYUhaMTM2VVh2N2JZV2U0OGtRcjExRGc3VUlvc1lCNGNIb1djMUREanlqWE9uckxRZk9pM1hFSmZpUDl6cTFDQ2d2ajNiMEpLcWRoMmxmZS8yWFVYbGNMNEJKQ1FLTTRjWkhPV1AyK2tjanFVU2lTWEIwT05nRU13QjVTbHdGUlBhR0lPUjZHdkFyQkpjWDZYOTFTODFBcmhrQWhtZFpNU1B4NnJhdVVrVEozVHBvemw0MEpMWE81R2tOY1E1YTZQWVBiYnBuRTV4bXFBVHAyeTlhQ3hKQnZ1cWJneEc2UU9RZHptNERIZ3c4clhpVENVMHVBWUh5bmhndkhIZkMveWdvTHRtSVYyNTBKalcvQUMzTFJiakErU3lZRU9RK1lJcXNKYmtmYWpqbHlzNlh1bDFLYXJJcHJlZGdVOFZoRjNLSlNhMU1iNzJ6TnlIUDNMeFE3ajN3dWJOMkFOdXNSSlRlL1JCMTc2dkJSOU5mZ2VuN0FWTm5OQ0trVXAreE1ZblQ3ZlIzWllDeG5VMnNwdTFmZTZZc0lHUG5aeEc0OFlRRVVuYlhRU0NOZzdONmtNWWxsay8vTUJFTWFYZDdLM0g3VzhtUEpHdXNob3NnM3F6MnI2c2dZT3liaG1Fak1BTnRUVUtkUzN3bFpLRitBZEtySENYZHBZUkFQV2x2amt6VVFtNDZLN2xCNUtUelAzVnR4RUc5MThrbStNbVJxajVJdExNQ0ZKT01GQlp6QjFpOW9nVGNDbkJyeU51T25yTEVKZzQ4MVhIdEpRd1doajBmdTZPak1wWmVaZFJlVG9CTDZoRGUwdHhWOWc5OHdVamFCY3phaDR3WFRta0N2N2VQVzg1RXNZY00zQXltTUhtbE1RMUZKMFhld2x1ZlozM0Jmc0EyREF3VmUrRjhpQ3JTbjR3K0VBTjB3eFg0THNiQ2RsbXRvSks1TEREczJuaWw2K3VTOGxia3hDbWdyTkR0NVM2T1BrS1FPak4vcWtPOHdsMzBTYTNxZ1RSSk9TTlRTUG94aDFWdEhjWnh0aTBFVkpjNEFEeUxKUWdxTXFqbzFoemoyTURZTWJZSXU0N1BHQUttME5xU2ZTYTlETkwzTjNDWGVzbFFsWnZvUU9XODlOTUJsZnpZZTg4Q1hQRnYrMDk4NFYrTTFyQWhRNGpVSkVUamgvS2I3T2pjTG53TkdieHRXWlVqYVBqOHkxSW9KN1poNTE1cGZ3dXJzL1VWNTVNbHRONHpwcjZIeHZYR3VPbnBXMlVDQnFnMkNiYXNIVmg4Rm13aGpjQ000RldGWThyL09UUGhtY0JVbVhqN1lkc2RHNXp0S0lPKzFtVEZqVXNhREhpUjBHaFdLV2U2NERmMWVZM1N1SS9KdUJ6bFEvVnJBVmY5ajBvN0JrN1E3NHVEb2QxS0VoWEJrK0hzZzRMYXFTNHdGL1RUSGY4dWNIWHBkQmQzZThSVXREYlRiR2orT2U0S1BQaXNoS25yVHJQeUR2MXRVVzNiZUNyL0VOV2kzVkFYZlFsb3h3alhDSTAweVZPRy9Zb0dadU1SRjRTaU9MWkJQWEkwdHVVQWZwR1Y0VWVVSlVpSWNGVWVOcDR4Y2lGYTZURCtmcnhEOHFvY0o0TjJJTDM2T3BMNTlPM1RTeXV0aDgzU1k4Wkw1azBBd3RsWXFnK2pjRUdRQ0h3UjlscTh0cFlmT3ZOUVpaOVZwcktYeGlDVDR0YmdjR09sZFlWa20wYisrZWtYbjJjRk9lOHM1RnlwL0JoQjJONGxiSFoyUkRXZUpnQ080VDZnSjNlbk5sOXUrZWpxeGw0ZUhNaHk4NXlTeFcrTjBrUHNDN0MxTGppaFBrVzE4bkRnTUpWNEZFWVcvYTY0T3RSZ2Q3cW9RTzloSE9sRFBtd0s0blQrcnJFTitYbUdTREw1UzRQSjMveUNCMWxYYzBWbHE3WnVmM1VSQ2kyRjZQOEJjRmtRMy9wei9pUHhGNHk1THFEOTgweFhtMGNqUHVNS2FaMm9rMHhvckpoSlpGNGlRUW12bnJGUTd3TU9aaEtiM05zSGpDVUZtVTEyQ3oyTXYwdFAxQ1IyR2d0OFUyTkdZenp5MWIvckRiZm91aDJwYmV3QlpSV1pkVDAycHhTc0Q0RHdET2VndXgwU1BMSkxxU0pjU1p4dG9QQzNuYzJMZ0cwa3dXS0s1NGVlL0U4UkFMNEpqYWoyZmNoeUpmakkycmxpTW02QWlTeWxZMUNNVnRFRVRWRXFIS1RaM1BUMFVVeWFOVmpuakY0eDRZUEF0aVdwK0pNT1BSQzJiM0JYN2M4NWVDcFNJVzlkMzBhb2VtSlpaaGY5SDRkOVZPTHVsQ2V2ZGc2NHVYR3RqNzNHY2N5NXBEcVVFSitWZ2tHZXpNTk1oaHFMbXRBVUxpZlA5eFJmT3JMZG14Rm5JTUo3TktTNmpkelF2R1lWeGxpbHAyNGsyNlROTk40bUVFeFJOdjRtck5LeUc1SlJyMmY5SXpjdXRyZDlGQU1uaUlEc0MwVnU4VzBqbGdOUnhmRTk0eURMZE8wV2JCNnd2RTVabnd1akxIN1duMEpjSmM2UHNCRFZVZmYreFJZcjgyR0xsclZzYytFaFcwTU82ZFR2bWgydll1SDhnVnlFbE1qMmoxbFpnV1ZFZThKNXZUZTVYZTZzQUpsb20vQkQrVUMwR3Z1OVJ4eUVBNWtCb1k0R0JEQlNRZGN2VmlGVE5CU3BQUXo0QXMyMWdvQWJYWmxnYWg0bGtlSkpuMzVKZmJuQWowT29WaHNtRC9qZTk0QnI1QVFkaWQ2MUpaekVaRllZbmJST3Nla0s1RTYreUxiQXdaVkdxRTcrMHlKSjM2WVhKZEloSkgxZnBFdjRwL0FiVEV6R2txK29mcW9YcGExOGhuaDVHL1NManBRMmFOR2xTVDlOZzFGMEpFK1lTd3RCbnhXMGhOSkhkemIwbXFhSFdZRjBWZGhUdDZ5cmplRlJvRUlyaHljSmUxWkEvcFlZeDQvbFVHSW1LNnFIaGlCVUY4WXg4SDNwdnErcE5vN3lDTXN3cUdTbWVPYXFiMlh1dWZmdjhVbnRpcDRLWnNYZ0VtUFF3NWdReGlKLzlMeG1IaDNHMFpYSUJxYkVJZXg1OG51MzRXbTZnTnRjaFMvbXNHUW1wSk8rUFlVUHFDNjF5N1laZmdFb3AvQzFCb3BTZzBkQytKRVJtZ29mV2hqMSt3ckN4Kzd2WDZBUWpvSjJQWDdWOTQwVUNjeHNkUTBYbVZkdDFsdjJDU0E0OU9KR1piM2ZHeEtJQ3Rkdk5MUXdaZXJaZmhNVDlXc2w2NlNCdXNJNjRKbkJtaXpQcjN6V0RYNXZPM3g0MHowQWxpbVdwQ0ZQMTZKY2dPRmRvWmZUYTZGbk5tb054eUdZMzZiV1JSeEQ3aTh5bVI3NFJCQTZ4K2FGdlhaSTExdy9DWjRKVWdsZU04aDBiNHpMTnRvOHoyOGZuTnFWYUtxK1NrUGM2cUp2RHNTYUVJZ2xDTzdTZ1B6MHpZakFrZE92bTdhVGFMLzAyQmdxYm54TmJTODZidUcvVlkzamt6UnJ5TWtMWlFralhUcnF3NlVOak94WksvOWh6dGFUb3NhK25Xa3dDVjduV1FXNXJXWGtyRUdWcjYreG5Da3hxTkk1QmtZS2Y5U2kyY2dxTGRZM1ZOLzltcldmcUUxQWxubDdmcis1SmxFNUU1UWdnM1JRTmY0UDZVVUp1ZnRtbkpXdU9ST21paDFISHBQdVE1VjFuN05ud3NyM2VxL29YM2Joa292eExta21xVXcrM2s4N3BLNUlpakZ2ZXV4Tm5CODIxQVdkYkdnRWR1TXJCTXNuczc2MjVvZ05jUGs2QUx0SnVBUG5NMFNJTWdyZ0RidEkyNDB2VkgxT1JmMGk3Umh0YW1ZUmt0NVpNaTdXbGgxb2ZoWCtXT2JmbG1xOFRiT2M1dElDYnVYSDdIakF0YkNzYy83cXA3YmYwdURURFB5b2JNZFQvZFovc0tQQlU2OG5aeXQ0RnYyam1sNGNlcFpOTnIybnA1aGhaRU4reXlvWkhNaEwvck9ZSTNpM1dTR3dRNFZsdkYxOW0veW8zc3F0OU95N0dOdEErWHhMOWc4U0cxN01IbGZRNTdrV294Wkx1bmM0TGpaNW9WRjZDeXUwZXNxa3M1TjF1RzRTVFNNcHJGZS9wbFMyN3ExNTFHMVJjbENtNndzdHd0U2ZMTGQ3WEFPSDJVV2N5eW9UYkZoUVRUa1llaWRIaWIrekFEckdyM05PRE05VTdrbmZQZmZjY3IwNlFRTmgwOVFGb3NTM1JrT3lqUjRUSmppQWxVK1gwQjIyNm5vMFdqS1RidGxwUlBYSi9LMU9qTTN1RTF0M1RlbnV1b2pwRDEvVGh5ZEJnN3MwbjQreTlJZXhpdy95V2Jvdk1ZZFkzV0NjQVYvQ1cxb3pyNk9pc0xTd2pzU2pNN2UvMDJSZkkvdEl0QTNWZndRNUtDM3N6UW5Zam1PQWc4TnozYTQrUnVxWlNweFM0SGhabXcxUWRCZysrMFdhNW80QmJwVTBVUFpSbk5PdVNuM3ZjbkZodys0UFBVYzFKY2prNXdIN0xjRzYzaTVxQ2hkcU9Bc0lqczgxc2NEaWJnMHoyR3hpRVRBY1dJbzRPZWVZOWdYSW9MblBKUEdwVGFhZGVlcmZ5Q3gzY2JMeWdRajNQL1RnUk1UMTRHdC90c292SFhFVEtueWhhQXdCdkQ4OElpSU5GZVo0MjlzSGxiaEN3cU02U0srSHlGOU5rQnlkQVJxWjRJbmlQS2JUZ3U2K3lZeGthU1o4ZW9jTXlsTUNZYTF3aCtoclpmRXJsU3ZwR1BvejV6QVVNa3BGQjRDT3BtVkdsRC9sRlYxelB0cWNKTFVFc0N4OThCVHl0bVFzeGxNMzJqNjl1VU43QzJZbzdZUmpzUU1CY0Myb3Z4S3RIeGFoKzhXSXQ0MTdqc2tLalBKR2paZE1NbHJyeXlGZUhvRUx5V0pabWVtUFR1NUdOUTF6RVltck11QVNsWGFPY3pSM0xVR3o2YUdkbXBTcVdzdngyWEhCcG83T2M3YktwWFo5dmVsd05FdEpwNHpRMTYwWTMxL3dhWVVCa1BJa0pjV1BEeldxVERiL0NWeGNxZExTRVkvMFBlZllGRGFTNjNyRFQwdUhXTXQ2bjd2c3hnV1dpQjBORWMyRGs1emEzai9STXhha3FVSjFSQjc0M3hhSWM2dVMzRkttWklVZ3hRcFdFZTZKd3VSZllhZW5xblFNdTNKTkt0dE14UlovSERSc3hkSkZpMU1OVFNvSExaVVBPVmFZQ2RSMk1oNGozZVNENW5MTE9neXJQNlUyemYzNXg3amoxNU5PNGFXZm5wOTkxbjdzNlJqck5SZzZxN1hwTHFqN3Q3ajBSa3pMb0tYb1AyTnd1ZFh2SHVyMmRrWXRHTWEyWndCbFZSUHZFOWNwMnlvWStOUnJRVjV5NFdCbXZsSnNNcHdaMU1GZmwyMkVFdVEza3g2TWZySnVhSmFBTFl3Uk8wc1FZdXZsTkRveUN3SytLek9hb09NbDRCWjZyMzVWZ0hxTUhTM2tsWkhpVmhjT1EyMS9WenV2TEVFdGtyK2o1NzFqOUVSMlJOdG1aNDArcXRXSHQ0YytNTVU0TXA5dFFscUxwUVNnZUtTV2x6YVdxOXdGSDlaUE52YWk1RndUbEVmUlBkL2ZvMUN3WUdhajI5SGRHdTVrNHorc1hjTmlJS2d4L1BDUDMraGI3VTRzeWJGOHRNODNIeFlrTnN2d2ZMSzFxbWN6aldDa2x2c0dvUEovZ3VzZTNReThyOFZ1SzY5UVdMSFlQNlRYWlpOUC9kaER5OE9MM3hsZ2VqZk4rQ2xYMHZBZndMZGx5dGR5K3lQNjhCbXVjNm45V2lWSFdRb3ZQdExOZUEyUk1SQnJITWpQd1hIUElNd25QeXpPdFplT1FxbDVFNzVZMGM4SC9XVW5wK3F2NE1MVjhnTTVGQkJ1aXJGUVYraDNmemhYV1VtL24yeUdWNFdRa25wQVNydUd1SStQSlYrL2ZyY1lBbXFWSEVKQUFqYUExUm14NUxjTXcxYmQ4aWFBd2VMdng2c1NSdXNTWkpCQllrYlkrZU5vcHZBTk1Qc05DbnV0c1diOGVSeFE0NTZEMjA3M0luQXFLSWNqWXRqdmk4V0oxTlJGTEIwQlkvcllDMUMzcm5nNVpQWUVNS1ZPTk9GbkNXZnAzNHppZW90YzUyVVhDcktKQ1psZFJsLzdna0xSS2s4Rk9zKzZ2Wld6cXV2UWh2OXNqV1VtUFhSSXBOdE9BQ2pQMEFoL29LOXFhK1J4Z3JWekMwbnpkVEtwOEpPVm1JejRTZEJGMHNjeERGUXJOVzRLcS9jTFh6aU9RbXMxSTF2TnlWTUlhVnFIbVI4Qk0rNTlZMVNqWjVKTm1Ba2Y5aUd5T2ZpZ3dGNEc2V1B6MWd6Q3FvWEtEVlVSNUorNmQ2RVc1N1BlK3BCTjdjUHlzOFZJcGRjWWVjcmRSOTVzTEFSK3Y4RVhVZHNKV084Q21uNlVoNkw2T01WL3lmSm0xampDUm44NzFRdjlDb3B5UUZNeVdwcktaSTYrRXlrU3J0TldETEVZSExYTTRsZlhoYm0yMmpVVWVSa2xoYmdPTEcrN1B5bWV3VElaTU9CVWF6dXByT1drZ0FmZkdjcURWMTlzcUd3M2dMMnl1VWF2WHgySmNLMVpoeGZWZHZyUjRWeFlWaHVnV0I1dEdjQjQ1ZUE5SWRIbmpteFhYb0t4S2Z3dTNMQi81RU9uaFlHbmxrWnhmNkZBVEp4ZHduRXlIVzBnd284YU5TOENjcHRuVGRKWVdJNnFhYzFCdG95b3VNNFJJK2tCdUI5Vms5SUdvVFRxdE9jc2dxZXRnZ3FCaXlJMVNscGgvY095OVB0NVdLNkpwTkdKczVrK1FaQlJQWVlpakxXYld3U3Z2THQvaDdsZm4zNEtrS3hUMFJQZWtSRVFqRlY1Rmp6KzhKY3RZNUovakRhQmRlcjhXQVZLS3A0bHAvVEpQeCsxWHk5K3YxSExlUW1NZ0lNaTk2WGFOTWRiZi9xbHhUZFB3YlA4N1lXOTFsaFFVU0J1WEJiZ0lpaVpBV0NlSFExYlFvWTQwaE5naXZLVlBybDhWNG9Vb2o5cXFNVWRabWM0SG9YaXk5WFZFeUFSTGNKemZodVpYNFEzdkJBdjRoZ0l2ZXZSaEdCZERQcENoejRKbEg0Wngyam5oMHdqY3ZkOHVmYXY1eWpyKy9XMFdiaFVVaXlrcVM1bm1XdlM0QkI1VjJnd2hWaDFJYjZhaWZNMFhndzF0YWh2SkJZcjAwdllZdFhuVGJKdS9LQnJTbXVIQU9KS05FcEh0RW5mdmhKZ3NvV1hhK2dhNUxRQndvbk1MSU9mNWtsN25vUnRQUldTN2puZWt4S3J2L09sNXB1UHpKSU9ZUUtUdHh4QjFXaDVNN3VuRkdrQkh2eVF2K3Y2TWxTZ1RkblBORThYZWROREgrREVYc3YwZG02MEhCdWd4ZEowbHJaeXdQQUVwWTlPZEtDMTRJMnNFcTlweklTUi93TEJrZkgrbjZVTHJaVlJSRHVaOHpEQVNVcHF1TmtBcjNpTDYyUDhZbDE1ZTdrdDNqVWkzR1BwUEFadCtiQVlqbklBc1Q0YTJqTTBCUkxNbGxmWll3cUVoNzFWT1VoNTA3ZEIrTTVhdUw4RDJYRk5iN0NEZk5xQktTV0tLTjhSNkJ5YjJ2bkYvcUNsdVA5VEZTbnVhQkVsODBIZUU2MHM0ejR0d1dqeDF3SGFGMklpTk01QTVMaXhsSUxPMWo3Q3VWYkI1TEJXRTBCb0ZCMFc5cDZDN01RRE5CdnE4V3hONTVxT08vajArZnRsZDBQTXFqaVlsUzJMcTYxUGJNWnVUV1lpdXE2RkVXc3IvQk0raUZ1L1ZNc2o4M1JWZ0VvREJ4bXU0L3greEpHaStLZTVVM2YxYXp2RjlNQTJVOXFzRTBrSG12VnZtRlhrK21FemhxRHplM1U2ZHZiR0hDTVVmQWdiaUI2dGxGNmc0NjEwVXN2bDd5QStwanNPSCtFNTB4NnlRdFJuSFd0UkFFaEdNUERCREUvV3BRbzMyOFc4dlMrQ3h3Z2t6ZDkvS25iSUFacFUrMmg3dVZVaEVkRXdqTDlPUzZ6alJTWkExZkZwZ3hYamE4YlJvQkVEYTRqT3VheWZBOE51bWdsN09JNGlYc0VXbkN1UnM3UlRrb0JZOHVoeTNvL0xwS3lRWEIycytPZnRYWlJoYmtkbFFrdWFnTGFMM1FPT1hIRDMvMXdlZ3VwS3RsUmZoSGxyV3ZuMzdmb1lnL01zVjZ2WXB2RDBVUjZJZFhNQlVWVzhJcDhJdThNeFlFWHBuK0ZlakJwc1JrNElrckVwcUUxZXAvQTNzc1JyZWlkNEtudnUwcjlYa0RKbHZlLy9KdTlTMmRYNUR3amhjc281SSs3U3o5dmdlazlwWExrdmNzK3lTZEtOSG9ySGtmZlRyV0g4QWJ4Ymo0RnJTZjVzQXJKbjF3OElOeUtYdVh1OGo3OFNFTW5PWUtzQWpKanJxOGZLcXRRUWZDMmQ1SU45ZUJWOUxxdlNmWERrZmxqWGhDY00wS28zQ3pMS01makcwUmdGTm9PTkMrZGxKUTgrQzl0NmxFVkR3UXZpa01pQzNDcXdMcDQzdk1tNmliRkdLVE16R0dERk50ZUVBWHo2SWhGMDJmNW1ORmhjV2xVVXNNQjlLT290WWE2TTdrck1NWEpBYjBpcmMzN3dIYVFWYjhhUzJkS1M4bURtQ081UlByT3Jha0VJSElqcENITUtSRmxUMHd6T0dXZU55emtwOHJHZnBpNzdUaEZsTUtOQ05kWUNQeXJYbXlGRVZTck5MVW53bk1PaVpvUEUzTTZQcElnRHNNamxHbkFDUFJ1UkVQOG8wN2wvOEJNcnYyL2JOc3lVZk83Y1dlUnVaOGl6aHNCRytqbVU1UzY0clBzTFdnTXN2eUdTa21tV0VzeDQxR3pUNERpaUc4SVlsbWVLWWt3SWZFemYxQzM4Vzd6a0RhRlJmbTdWc0RmclE4NWNhS3k0dGJZbXl5WlJ6NjV2OGYzRDhjcjVSSWJSWnJRNTYwaUtzNVJDSm12U08wQnh0SnMwUmZ5cDRYQk5mYkl0dVBsdG5xaHV4aEFlenkzeElieXRDVkJjeG4wVmVkdWtQRURhNnBoTGpibEhuS05aRDNkMFpRSHZJWjNVS2MraHE1R2c4TDVqN0N1TU9FUFc2OFRub2o5LzEzRkxwUllXdzhPWWJ0K3BzVGJ1UVBlbVNnblFHNFM4N2FtcWpEdjFCSUNkSURYMkJyUXRpaGNwNDJQTmhlREhSM09yM1dONFRCNnZ4RHh3QURrZkUyR1hnUEgrQkoySFZPb2RTK3ZDcFFXdG5xTHltbHFHb1BUZTB1b0dmck5xeVRPcnllbDhWTW9DVmo2T3NZcmE2QUF6Z213WDlrYTVlaTJvZkd6Y2ZKczJEajU5dmRMM2IzRzd2NlczbW9zM1hMSVNXOGxGOXVWYXNpS01oTGJzV0VtYnNjTGJLaW5ZNi9QdHA5WXozeVNIYnlTS0JiSnQ4bWpaTzhCcnRBYzFqZWI4ckJKM0tlUEJlSmJqNjF6UjRWa2F4LzQwTnJEUm1LVHdxTU5TWVhZazJnWnJwRlp0TlcrZ0krZEJWbVVObWU5S2RuKzdMUVNOaWVGOG1rYW9IUlV1eFIwZWRFUmdqSUFiQWoxdHhkTzh1ajlVcWRwbUVHa2JyQXJzdnJIbWloRE1GNXpjRzFOM0FiUzJ2QWdmUmloTjh4OFhIUUVEbDRMTXVVY3NId2RrVXRzYklDQ0dBa3l6bVdocVV3OXU1czliREIyZUhkSVV5TnpidzhFSHViekcvVlpQVktaRnNKelV6d2NNZ0ltQ3FzY0lLTGIwV21OWU1Dc1RYRVJxLzFrNG5YMGFVcS9rMEdrR1BHaGxuZ3RLSldETTg3TW1YMi9XVnE3NzZ4WGZHcGZXYzNqSElkZUcyM1U0SEN6ZFZCWXlzdWVJVTY2ZnRWZFRJQTd3RUF5V1BsUFk2TUwxQmxKU1dtbWVFVFdJZzdsdXFIVFM4bU85ZFVITldJbnludEZNOW9tUEFjR3hqOXpsNUc5NHp2ZkIxMkN4c2swSlMrcm9DUnJyREI4SE5mbkRZSWZWTXd6Q2RVYjJNN3ErTXpTYTJuRnhxMExNNWNXaXlocFZwclZNU1RGN1BYcUpjaGFCajM4MGpDVWViK3lMdGFWZnVOTUJ3dUhmYVpoYzdLcExXUEErNW9UWm1rWW92cmlJTWhRcG1rOWpFcmpsNEJpSVp3NXFnelpVdTNqcjFpVlBDc0hDcTJSbGNnTnNoMGFwMUI0Y0VZNTU5bFRSU3hmd3JLdUtLWTVTUHpud3lkZXdHakVxUDR5MTdaenVOWTllMjFQUXRlT2ZmUDBTajIwSnpMRUdKWUhYZEJlR1NVTy9PWVhyZXBZSks5VVdWYnQ1bkJROEs3NzlxN1h6d3dUK1JubjhlZy9LTXdGUDNjTGNlOTdEZ05xOExyV1hwVGJmNnI2bjBlN0N3K3NuSU42STUxUWhHSGNhbnAxZFE0aHNjNjdjUDdmbkszSTRKTXpsTFllMXJUdzNFdzd6VEdEdU16WE1NZy9xWjFsSWFTcEY2SVR6Yy9jRjgrQjdBaE9waG9YYnhRSGFiZkRkS084UWJxTTRsT1BnUU5tc1JoQUlUNHJ4WExvWmFNK1V3aTd2bEdScWdxa0V0bHZMTGxHUHpTSGFadEg1VEZJV3FIdGtobnlybGRGZ2JnbjYxamZyZHRPa2pUcUpXOUVSTDdwWVdLU2NRSTRNSW43VHBIUTBDYW4wd252a2hjOXNxMUI0T0M0bWtIcFM1TkN1eURkUHNBQ0k0aCtTNXVIMWk4eCtRc3NuaWJUY3FWc0JzY2JhYURuenhQd0NYcTZiVHpBNEdRSU91RXpJR3JFL2xCemprcE1ybnAxclJUcVJGNWJQV3ZiTUNoWXY0TUpIeDhTeHhuc0ZxUjJGNXpDQkVERk5kNTE4bVpzcHhsSlZZY1dyNTZ4TGFVRXlndE9md0FiQVhHcFRDRjRUR2lNOGNJUDVGSmdzVGJBaUhMRzFIZjZzQlNsY2dYa21FK0Vub1FyZEFlOTRzV3dxTUJSRVRRUTdrTVAvVGVwVHpra2RuakkrNWkrWnNpaFFwRitkVXBLZTMrK3ZMVy82cTY3cXdRWWI2b2grTHFneHZqUERQZDFyS1p5ZjZCZk9rT3ZLVjRaenhxeTJPTVl3RWhVZXEyMkxkTVYxeHZhNVJyNG1Wd1NpdzE0enEveFRlMTJlZnE5TDhtM3dvTVNLZG5pRDlWbkQzVXozRUNVQldURnN4eTBha3RwYzRNdmdIU0ZGTXJjNjJVbyswdXVCY0E0Z1NJQVZqRXZxUnhnd0ZxZ2lKZnpMeEdVbTdWYmhRWWd0VDMrbnRUV1JRZ3JpclVtQWtrK0lQMm1oYzZwbmhZbUVjdVNBN3BZMUNTQ0dzTklRR3YyQ1luUUpKVDNWeVFFMXhoNTZnMkNtS0FCMWRxTnM5YlJDdHRIQ0h3a0pjcm9ZbG5sNGF2VEJuK1llWDN3aFBTTTdZQmNDaEpxUmlCZzdHZ0hEU01iOUpOZ2o2ay9lM0VWQUQ2OFZKZ2JsZzNuZ204YTFGS2lZL2ZVTGFBTHZYWUlTOWdkOXlCVGtqTzhKWmttSDVQaVVUWW1zWEptWEFQVzRYMWRRM0Q2cFlXc3lnZSt4c0hPYmoyR2VBMEkvd3R4dnUrYWc2TzN6cGk5WGpzRnhOaUtrWDZhL1FBaFZQYURDM3dZNmJpV3JmTW56M0lZYXNuSkZzVHFuUnBLd0JvWUVlVG9kbmxEN0dXb2M4N1VzOXNFT1lLbkRrYytRdzgxbXZqQVArZExlSmhOek0vbDY5akVEbjQySjB2SExlNVVwZDU4cjB1UFI2b2Q2b2tVcFdpTGtuclZBdjQ1L0RhSTB5RUFZMHRFTndpOWpqVVhaU3MxSTIxN1huc1VNdzM1VG1ReEVJODZFQVNncHZUQ296bjBSSm1yeVBDazRlTWRNMlJpL0RBVkxkaG5IcTZmTEltOVZPMmhaV0tDRVhvc0RsUmhCQld1R2c1ZmlXVVNvZFJ0Y1dBZWh0VG1ER3dCOHpEY2hEQ0V5YXNPVVJucktxNG5uaHdVencxdUJBY3l5ODlvQnF1YUxwbjhCWnR1Ymh2QXpVVGl4YmtvWlJrQStweDFqWFRpQUtDZHFlUmFwMlFENXJtaEJhVnlqUy9hWmtFMklzaERnc09IblYvSDBWdXYrajIwS0RSQko5VHRGRldvZ2VqMFFuMWdiT1V2SWIyeEdkaWlQVjFNY2JoVjhETGNiY3FndHlUbUNCVk1CVlhuMkNxMmQwalRlQW83MVE4OEJMY3hESGFRZkRyR1RLOE9sMWZrejNvUGozcytobnVnVUVDL3ZHb2J3OEZRdGtFMkZaNzMrVTBBcHB0aERoTU1RMi9mVEI5c0lYQ0RqeDJnVjJOL2hsWG9naS9VZVozSGJhbUw3aU5ZUzEydEdWTnFDSWY4dkdBNDA2cWdlQXF5cnFzdkRIRUI2dWI3dUNqU0V1K3k1Vlc4ejhvQXE1M1NWVmFJbWlVbFN1ei96Mlc5YWxmZEtnZzdtMi9hUG53Z0F3Y2RteG1XL1VXclRXYWxTN0EvY2lSdFlDRElYeVhJQTA3bEhZdHhPTHJRcmlVWEFUcU80T2xqdjZWeXpSQ2xzZzlOZFdTa0pEeUtkOWIyWkI1S1BLVis0Tys1NzFCNkZROXFmWDd4dFVZY0hJemZGMTFUbUpoL0JWSUk0NjRSU01ZWFhjOXdjNFhiaUMyUHpjSFk1Z00xcUtSSU5kUkVJTFYvUlVqdnRvbThzemlPYTVGMkJiamJUMjNGRDJJbDZMOVFKVmZ2aXJVL1VBL3V2cm9VTU01S25NbDcyTW5MYjN6alV1THZPMFh4elVKeHRuZy81ekJ6WnowSmg0ODg0WFlmM3FFYldyQTBYNzY0UjdSbFdWT0drZnBxZkJyOWZiVk5wVHNrN3B2dHQzTC95VDZDTWhIcFdiMDkwVUV6VnZ0Qk5zZmpqYUpGMnRqVUdjUkpHaWUrbkV5ODNoamk2L0I2SC95aVBTdHlZNVlXSEJuMFlYbFdXdEZvQ2JtcXJKOUQ0V2wvaHdiZmtBcTQ0L3Jhdi96MHRRZWYzbC9Sc05iVEpzV2ZUd0dXbWp0ZE1Rc0l2OFkrbG5Bb3k2YkRScml4RHNleW1BMnpsd1k4REppSzJqWWtBRFlNT3V4dHFpczdPMWcvSCtDUDcxcTI4ZlIwTU11RXRBd1RodnM0Z1NJVmQ3SlZ4enR5U1VSNFpVUlBXaWN1RmpJaFBES1ZCMmdzMFpuZVFxdkVOOW12YmpEd2FxdjF2UitWMVByUEMrZlNPUDZ6bWd6d0xqL01uV0R2UTdKUHBVcU1HOGlialk4VGlib0RtLzJiQmlhdUN5ZTMzNjlPNWROQ1Z5b1BveW8xa1hhN2RuRFZTU0JDV2xZSlc3OWpwNE5hNEhqWjB4M0VOaWFrY29rYUlrbUZNQURXWTlqL2lwK2J2MmpEcmRiVE4vSUVGVzdNTEY5NGROVmtkaUZFQ1VkK1pmU2pWeis1MHFDenFOYjYrSktwcTdqWU1Eelhmdjh0cjdXZmdiSE0wcWNWck9xbWpVYUwyK3JwVW1DK3BlSEVsVXJNRXFBV3oycWRnaWIrZzBxZWFmVXRVaWVEaWlNWGl1UDlyMFp6enJxdlk5YXRoN1EzZjB1eUFVZlZFRFFRTEllQ3RkV1hVWjBXTVpCLzVDa08yd1dlQmZWK3JiQjdyV3hQaHVGZDJDcHB2cktKem00NHgxd3pHNjg0VWxsSHREcm1tV3VXU3NhWVJZd20zdHBTZGJpbldaZUU0S0JENnZxU2hJZ0lCeDNzOG01Z3h6OW5YaFFRTDNRZXo4K0orZklyam8xTGJyRWEyL0hnNi9wZ2l5azZOdUpTNFJMQm9xQlNaR2FOQjBFVVdoWWFyQXJOUDNVZTkvQ1VtdjRFdFJDWVV1Q0EyR0FNL3ZPMERGNDVQbHEwT0hiNHBtdDNSU2VUQ1VlaDB3bGZCVzV5OVU1SG85Zk1FQWUxZkUzSS84dHFzZUh6YmNOZEp5WFIyZVQySUE5NE1iVU56a2ZBSVJqRmo0Y0ZjanVQeE12eENOZ05uRXJ1V2RTUC9jakVpSDZLVGdXSXRRcGM4T29ubXl3aDB6QUVCSHZuT2NMWWM2SThGYWF1dXl4MEh3YUZUWUxkSVBMOG1PUGM5V2RtaWtPWHNLK25udlZVRlltbXhNRDhobzQyV1hLRmVOanp4Y1duWEpkbGFJeVpoaVhteFlJY0E2SS9WOU5pMXI2ZitKL0VtVWxBOW1RemE2a2l5eUI1QjhaRGFZSmxWQ240SlZDOFoyV0Z1eE5tZ1ZQV0hFblR5aGpucEhUWGFab2MzQzdSajlENGI4YVZiNlFFcThJQi96NkhZSVZXNGRQVzNuU2dxam5SMjhGWWpMT3MraUVtRXNKZ2tsMmVOQ1BhcTdrbzNnTUNFeEwxeitqVDZUU3FhZW1HRXpUQStha1hPakNhWHdXMjQwOXJyaUlza3lCcUExN3d6Q2phRFVlSkNtdHYrSVJKdG9ITGJzbHhreGJzUWo1NElNeVZyTjh6Tm9NZHB4eC9ydjl6RStkeUNLTkY5cmhpbmlzNWFscE13MDN5aWpXcGRsa0hCQXczUlp3b0lqUWNJYkJMdFRzTW1ya1VpL3ZGV1JGK2NEVjhzTkN6K09WS052b0lzUkNzN1NERm9NSDM1UlFlU25QMTUrWHp3eFJOZ1BUQ1h1WnVyQWNyc1diK2hpVnEwd3ZGcGx2RmI2dlFwRHN3eU81eTRoa1ZWRlBTSkFzMGJ6Y2ZKMEJUS1oxNDFqVjd1Q3ZCM0svWFFoUzRVZEpXL0xYS2J0aCtZcVczdlVJRHlnU1N1L3FId1pQZit1dENTSDl3YTJOSTJMZnZ0a2RRLzVOalBCRXkyeUdtK3ZXdlRDMUpxVURtaWJENUh4TjdZZml3U0txdE1lMlo3YnFPWmMvWFArOUVqMnBBaTErVmpoZlVBb0NKWCs4cnRxdVpVZlRQbjF2ZWFkSGx3M3FXZ1VOVlhLeVo4S1lFKzhyNU45WTl6S1JTcE9Ua0VmVmJlTG9FS1lUSGk0NzBIZ2pIb2hjTzhOUE03ZlZHT0xkZy9XWUhyeVpTNHpKRUxVbWkyN2xKY1FaSGRzOUVqZmNLL0szU1VtZTZXcGhMUTZEUmdSSUZTdTI0WU1YS1JnaTJrR3M0YlBFSVkxZENNTjRvQ0hYSVQwMEZoYXdjaGVhd1VQQlJEVFpSNGhlVHgzRTJQZDZWQ2FyOWIrbE9oZ2NqRVN4U0d2cVZta3Ftei9TUXVTRWc4dTRqbEMrb0FGSzdzUHpVYU81WGlGUHRrdEZLUDZDZ0JGeVdIUXdwTlFBMFo5VDhoQ3VVbDFxSmZKSzA1WW9DcGxGSFc0REpiVmR2RHZyNHQxT2tLSUxyNFI5c0hlSzE0TW5rMjZQR0svdTB6ZUtNVm4vai9JcGhobXBxVzVDR2trZXo2dVZrN1h3YkQyQnRGSjJKUmJXK2ZNZzBUOENibHFNQTJDYUhGL0J6OUNRaFd4QlR2OUtPVjd0T2NveThURHZteGZTcGFyOVUyVU9RbFJZQzNFZUlFOEVwWHM0NDVuZzdUd0NvZW92R1N6b1VMeFJRaWhWUW9LS1hROWpWMlM2Wk9HQWI4d0s5c2hFb28vd240eCt6N3o0cXNFalpkT1ZHbEFxanphM2VINWY1S3pETUFTSThDSzhKekFsRGRJeTNrR0Q0d3VqNHVQMHhwK203WDREcXkwbHBiZmNIcm5VelYrT0I0ZitYaTJPVk90S0tpejBxaUxjTXlSbjdCcFJYM2RKYlhSN1FvWm9ieHNiZVJsS09TSDhWQnNHQUc5YzRJT0hxQ05McHJzV01qYllYanF6ZmcxU0IzV29LUVdIZmZ1WW1QOG1JQnEzUGpPYjNnMnFXVEpDeWROWnM1S2NCWC9TV2Rna3hnZ2EyMUY5bmRPS01LdGRucnc5T3BXdGdvUUZIL2UwVktveTlTa01wcWNnYUpmdnptYmJraVRBMUt3UjlFSDdTMXRrNmNRZ2RreVZycXZJQzR5bWN0TnFFcWZxeGlHOFh4VkxxUm5SazJKb0hIODNEczR2U3lhSG5BblJCK210VXEzM1dMRkdFL0tZWWZQbE03djRWS1FlNFB1UmxWTjk4UGsvYy96cU1BcmVYNERRYmtrRDdmOUhEZS9NNm4vWUJiOFQ1aWM4Q3J1YnMyWTljMDMrU1gzak5tS2JUT0VuTDFpT3pSVXhXNzZVZGxXZElHcFpjVjhvdzdwVzEvL1c5Q2pteG9XT3lxaWxSaTZIKzhsNS95d1I0RzlCbnpzbC8zWDBMc2VZdXZldWJNRUFBaEpFTmxFSDB3SGFQYmhOZzhtc0tyV2VKMXE5T2NZMXA5eFZuQWdKcVo2QjZUZWY3U2diVUdpTHRHNmwydGdiYk8wRW1PVG9uL0c5RHVCR1AxcXdnZ3psMzUyL0oweHcyM2gvZ2ZqUllndmN0M0I2bDlJcXdEMVFlV2hVSXh0blZ6N3FWTGlTclY2N0xrbGVwQkJHTWFFNHlzd3p1VktzNndxd3M1TjNhVHIwbjErdVA4UCtpOGpHOExxbFBCdmR4cXdNOCtScG1ZZk1Hc0cyNlgxTEF2eG9razVGUjhaZVlJM1NtM0dyem0vVFM0anhCcU1WUWhxNnFNRXljdHBLc09nN0ZMY3FJRU9pamdjQjU2VCtZWS9vcUxtRDVsaGlBUFhpWlFRc1IyNWhIU2JPcDR6TFdqWm1kYmRDa1BETThiY2JJcFZlbnJyUE5vZit1UDB2ZWdQSEQ4Zjd0OUdBRVNScTQvNllOOHNnMlNnVU1VbXFFaWpXN3BFY08yTWg0NERoMG5hWG81U1dZNkY4eHBVN1VFYVNTWWI5Q1JDNGpUWGJ5VFJVUlZ1WGp1N0lXMnBFSnBjMldkb1hCSGJ4SjJldW5iWDdWUDdVcE5FcDd4ZUViQUthaXFjYWJQRFE0N3Nnd0ZxaHlNMVZwdW1FZVRzYjVDMXFSKzhNNDRNMHExZmlPQUJCOGVTZHZ2UWg0U2hoK0FLWCt5aTJOS0tDREs0Ny9XdzBpQkIzQTZvWXZxWWNQY1Z3d055bzA4NTd3QWIzbGdZa09HYVcrTTh5cjVtbTB5cjAxTkxIZFplWHlYZnBhaTRUY2RiZG0xSW1MVzlNbDdtSzI0NVlSUi9CR2xKbjliMWlPeCtWejU1ZjR0eFJ1c3RhWXF6c3dzTnYwQkxyREhyNzIyQm11TXVHZ0xwVXRyS050WVN5aGFsWlNuRVliRWppRVhjMlRRMWFpRFVHcjVLTmVsdER3ekdERUUzQ3hpU3JjTTB6T0hKUWlhb2o0b1FSd0ZGVjVBOFJwR2VGTXZqc0x1QXJLNnIvQ1NnNDAzcmZoR0NjV0pLdk00ekFqN1dpelVhNy8xYkc3bVRuVit4ODhyVW1OcVlCN3h3SHUvbEJoSGJ1RHAzTGdjZVI0dG1kRW1jMzFycmRVSGJMWXZoVnFyYjFSdWVNYUljOCtTRUt6emFOTzVHeVVaRGRrMWdwVkxhTWRNQlZGem10UDB4dTR2NlVCNkdZQS83d1IyWTNnSjRBZ2VCa2RPWGVxYlFKNEQyYXJqWE04ampBV3RZQ0FuQ01sU29BelNBK0ZnY01pOVhSTVQyMitDUUcrU2doRHBSTEhQV0hWWjAyRDZEczltUFYxaWllUDZJRncyalpiYlVIei9MeXJKWFhNaWZDYktobm5BY01haEZTb3dwMmRCZzBkR0lMZWtiTUJDSEVBSGg3RnVVYXowRUp2c1h1RW5INllIZXY4eTl6bE9kRmtGQXB5U1NPbnRwRVNaZmVGRUlIcmRjcU9wemxvYW9nT0w4QzNBeEZuMWdDTVJVOGFoM1hJZk41M0JNTmp6M3hUWXZ2UGdpWE5oeWM3WVFOWHZZSW5XakR2b0pRb1FyY1NkQUtZcFdqeWdmYU9OaWpBQVJmb0wzVW1JVE9zTUFzZTdyakFyY3FGZTJaMUpEdGVPcGIrcGMzdU51YjdGWkRodUozTWlKUjRUUklLanJWbWdKa3hQdUdXMVoyL1VNNnNaaDF0WGc2MmVsNkJiRUxYQzFOblZ5bUFoK0hhQlhnOWxmVVZNalRxeWNEb1BESHlFM2xtZFJkU2lEUWNxVnMvRUI5d29kTTZ2V1AwZ3Uwei9jUUZVek5DZjhabTlZZDZLOHdRcXRuWDVIbDgyRitVVlRSUnBrWHpFcVdHNG9RZUFJdXFNSVMrNlBCMTN2OWFvMzlqU0Zvb0ZORzd0NnY1Mk05QXFaQWJEUGlRVnYxLzdYV3VBcGhIdjFjSHJhTGJoQ2liNUxReVlpbENvbTZjK1F0UHpOWE9Pd0wyRS9pblNyMFFacnlSQXJrTHZXU0VBaExLNHVEQ2dQSVRKcFczRkZnZnVwWkFxU2Jna1JLUDJnSklaVSszdUpPUmljdm5IZkthdGQ5dmd6Zmd0ZWRIVkVvRmg4ZkhXaFIxQUJ0SS9xcWUvcEJNRExJd1dFT0FhTmdQTTZRdmlaWjBPa2NEUHR3eTlkcHhtZUxHc1Voemg2UjRMWkI2WTkvOE43bkJlMFJGTUFqTk9LQ0NZRE5nTmFrWDVnQTYyeTdWcXo3VkRjQUx4bWI1ekJoN2NweHV1ai9wN1o0TERmdVRDOFN2aUsvY1ludzV0SDNaanBvRFg4bVdUZEFlbU1PNjFZN2k1ZDNtRkdlOHQ5a1B4a1FFQnVGMWVxbjJxbEc3aEVyRDZlYVJwS1VUYk02czlXbmxyZUtWS1UveWZsSEUwTEVhdDZiZko2K1pBY1FWRWtIMkxUbHRKSTBXb25WTTIxcFpETzBaaW9zSHJNeXcvSnBqS2wvcE9BTERuYTZKWFZzU0NCcndoZHJWZEFFTFV4NStEaXBSVE9wRDlTcGVkaDNsZWM4SStHcWZhcUFiZmhIWnBsWjFIRTRBODAwTGdYN2JXblhTbHVIOXRROVVJWk9rNGZBdTlqdlE2OS9Rc1FTY1dQRUV5TGNGejAzeDVEUHZaeVlHR2pOZHBISytIcnE3cWpwNE5ONW1CcHovTEpOTUtxMXNWSStBTEZNbGc5cG55aEdSRmZLSjdGS05aRjhYOUJDRzVCNnVLUkRFSXNRRGRkTDU4YXhjSGdjVnhxa0hBNk1iN3V5RHJiMnB1bFRaeVRLOTA5ME9MUXJndXhJYW9qNzYweER2dkhicDNhZEU2T2dNWGlqY3R1UFM2UmNCSm1FT1hMMWNMY0NockVCaFRSMnpCZXNaaTdtNFc0UFYvZm8rMUM3dFZuVmY4WVNxUHJONGVrRWZVRzZuNVRUcVgwVlFRalMxVkFYamZWek1DS1gremRpYktJWFoxbXhQdUVxcG53RlNxVmd6b0pQdFNrNjZYdTdjUkZoMnJOcTFFbDJreGFxQ0oweWdlQjQ5SDcxN1kvcDg5eUY4Wjk3RisrdExwT3M1cU1ORWhRS3d2cUtZM0F1Q1NmNGEzMnNHanFvMkwyaFA5VHN2WUVteHJQa21iZTgvQ24za1FBTENjRzdPaVUvc0F2SjR6Q1lvTmJpRW9hTFFQVGtTSG1IWlh0ay8xYW9GYmF4S2R1WmwyalIwdExNWm00T2dpZythVE9PaVB0UGNoMk9OYlVLSURxZHdlcWJOZENySzZwc1kxOVZ1aVM5d1p1aUtZYkEzL1dvT2tuOEhXTzQ3dUtIeGhhWEc1TjVNaExpNHcrTVlyNTl4NVFLTXhuODNBQUJCWWorMFRHR3laRG9tOTlFVGlyamRVTDZuUFJ4aHVDenlMeUZucHJWN3ZINjR1aW9uUkJyRDdtYnVFMG9tVXJkY2JzWFZ6cUtiei9TRHB1NXJTY3pEc2dLeVFmWEdsK1Z1M040ekNDR1NBNzE4MnFpVjBmcnNnL2hYdmNUaHVRNGxIcTNLZGVGcnBJNUpOTWR4ZHMyYWx3ckNqdUN0Uk9YM1pvWGxVbG9QcTZSbHlWRjEwUjd5TytNemxGL3V0T0NJK2lzQkpiOUZwdjVWZEFLWG9Gd3M4Sm1NQmxJeVFvV0FpNTFyeU9PaHBjTGJLUFZrNWU5OW14NUxoNi9NejhpVlYveURGMEt1Q3dwZVJ6RTQ5MDh6K2U0Qy8zcmVudUVEOVlUM1A5S1FmbGVMUHNNQXVSUHRUcHBqSXJwYTdpV2xJSy9JY2RpOG5iekczbFJMT0hFS0xPV0ppVlFNdGJFei9FbGdsMEZWMjRKUHE0Ym5Fa0Z6dk1LaHRQdTFkWTg4c2xPbGoyUUJ1cDhnKzc1ZmowK1JlbmZUek8vWmI3V2VSbHZNTjVOMzdyNmJ1T0dsOGJmSGpZMDhyNS82TCtoUENZRE9yWkFVaFJSNTd0N1lOamlZa252Q2l2RVkxVVh0TTN3Mmk0Rks5RjQxczAxaHBTSzRmNlNjTWl3N3lEVzJoNC91RkJpNW1nTVFxWmY4SmdjdG55UEo4UU4rUWNEdnRaZmFaTzJIWDAydXlPcjRXdXdNb0hocWFRMTFFTUJla2Z6RDJFd3VxbVRiMnpBNnVzdVJyZFZ2bU1jLy9GUmpzNWZCdzl2Z2JDYUozMGw4UUY5Tnk0R3FQN1hIS3VhbXdIQjV2MXVWQ2w0VkphQkdLbkczRjRyUDJLc1Q5eDFiZHJiL0RDNDM0UmxhWWU3RERCa3kvQWdSL205VWZuTGhoYmM3R3dzaWVlR0MxaC9ISG96VnZKbk1XWU1lc3VkTTR6VkVqMmcyLzh2bnFLdm1OVzIvMG5NWGhYMjZLTTZPeDhJeTVGMnBSRURWZDVxZlhWOEpwSGkvVzIzUkoyekI4UlFEN093ajBLeG9OSUoycDFjY3FsRnJsbzRFNk5aNU1pbnlERWlqSjJ6RktBZjg0NDBjdlNLSGZLY2lIRTlVS1pCWUdBTGVzY0tuNDJqVjVqS2MvNk5OWnNJYWFRQkRpVXpkUUYxZmdVUHhNcEhVWExDaWtES3FtWmFnRlZKUFZjQmFUMEhtaG1vaURNWnNXU0srYmhJZDNvejRqOWg1SGZvSUNnckliZzVwTjh6aERodWVsSUUxalJGTjBONVRNY3dRVEhMM25neENuYWFvOVNhUXNYRnl6QjRmN2dMQzBydTlsaTg1ck9PdGxQcEt3bzZvUVFiR3MrWWo0YWR2TEoyaG9zQ2lpN2ltYS96VElQeTYweEtHZUhOWkQ5M0daRkM4UGowYmIydUpZMFJiT0pxc1VIWjNRakcvV1ZiQk4ydjhLVzNTaG1oOWRYZUt4VVFuQWx0Z1IzUDR0YnQzbDdqc1VFc3pwUU50aWRuRE53VkN6ekVUYVdON1pPQ1VsbEpSK0ovaVZOVytDNDF1Smx6MndEQ1BvUTFWZEczRmdXNENKdG9tNnZCaUF5U01vSmhvYU1NMThxSmE0TStpU0gya0gxVlgwd2pkclZWKzQwUTVodmFwaEt0M2phMVdMc0NkU21MaEk0Vm4rZkVEdzZnSG5BMVNhUWJlc0czdG5tb2RUeXRZeW5iVzRTa21Kd21KU2JTYXp5cUo0WTAzbEN0d0dXa1hTODkrR2kyUmRXaUpXdkl2MmxVMDNteEVGVTZXU21LUUZydTkyLzBaRlRxQ21oQUxMNzZ0dGZjQVpPZ2g3Y3JOYXVnajhtSnBHV3E0L29aai9OTk1uVzNpa0pXNHlTN2E5eU9rNDA0ZDFWd3RRTXFrQXo1aEY5d0ZvYUY5Z0Q0OENKWlYxZzg0UERDdGNJVzlwQWZPd3R3NGVMcStEeHBkN1ZHaE4yWjlzSlhHdmlhOFF6RjF2UnphanZySFRmN0N4Qm1JdFhjaHlUK0pqZFgzb3BubTFhR3c0ZmxyWkl1REFsRlhLSU5HUko5Tm9XRFk3YUdyQUhlNWZ3ckVxbVV2VFRNYWJZeFpDNHFWcnIwMm9QM1hrZElaNm5uclZrZEZuZnhsS1FXNFVxNktKOGs4ckdwM0dCMXUvZkU2UHdSaVFDT04xNTk2ck9meDg1K0s5Y2p5K2h2MEtkbTdJWVgveG9EeXp5NzJ4T1A2MmJUcldsY3dJb0oxMHN4RXpIeFBqSkVpMldwOSs0OU5BYnplRTVqb3Jzd2NZczQxNCtFSytwT2ZBeHR1R0lkaU5OUXozR01Gcm1xdlgvZzVCUHZaYmlOK0c5SFFuWko2cEN6UGxldGZqdmlRWFcwUDVBTzh6c1h6ajBlMVlFek9mQWxEYUNnc001bkdYWW9xVi9RSkoyUGxFTitpc0FnSUE0eVkwcFc3SnZzekx3WGxGd2kvTmtnVnllVVJjVnFPS24yY2NWelljYmtFYXoyTWNLOWw2MUVaSjc2V2tuZDIzVmxzeExMVFEza0NUWXI5S1lBMWhTdldsK0JUMk8vZStuY3JwKzZDQUFEeXlsYWs0UktqcTRLRExHVm80eTUxU1pwMW92djRWQzdnZXVmOWtsUGZoMjFmVEl5Q1dSaHRidDV2RUFaYk9NbjV1bnhITTZGZ0FSeVRCRGlMSkhNNGh2NXB1eUdHZmJkSkEvV0FXemlieXkrNTRXNTJUVlFib2VFdFk3bUsxM3V5Y0JWM0dFWURIZmZZcHc0VzJIT2hROGZmZVo0WldlV0pvUTdMVis1VVl1U0g4NVJtN3JwVTQ2aysyT0RvVjR3a2hoVmRNTDA4ZDArV1hqUzRlNzVITU5zV0NQNnVLUnVSWmxNMytuQytTTU92Qk0wM3oxWG56c1U2RVk4MjJnakNSQm9Bay9oSFN1UUNnZ200Qkd1Y01XamJzRE9YYlB2VzYvRnQ0Um5oQVdIbjFFQjZHRzJET1IyYUE2UmdLeFk2NnE3WlAzY2ZzY0xwTDhJWXBIdjY0ZitEM2g1MGlDNVBoMklhUmZrYmVOUVova21xaVAwQTBzSmQrNHJkU2lMclJXVitEdW5jbGhWb3paWnRTWnlFVElvK2FKazQrRTYyM1d3UGE1VXo2eVIyeHlTM1RjbFlha1lBVnBVTzdMODg1cXZsa0ZQeTJ1aG4xY3k1dThZSDRkTWhDbUltSlJpdjhGeUdzb2swSWJvc1Z4K2RXSFJOc091dkVjbWZJSnFIckYwaXZEMEVyUktwdkNNWVh6bE0zUjZ6U1ZoMFZuRmo0UUxJS3pNVElYR3BjUDRLSkdrcFpGTTJMOURncGRabW41WUU4OStFa21ZZFA0TCs5N0V3d3YrM1RsNmI4NnEwbGkrSFB6eTZpcEtFV0pqdS8vcVcxZ3ZpSTJKaWc4WGg5MkZlMlY4SW8wM2tQTFpITkMyQ1EyK1A1M3BScW5zK1Bmc0tvdzRvd2dnVXJNWlBHY1g3TlRTUms5dXBYRVNGLzNGdENkOEFMbnZZSlhURnQ4bVJkWjZ0OWJJNXNLQ0l1RVFRL3FFNzhkSjZsWUhrNEswQ1lWS0pxVGJma0JTa2ZRN2x4dVVZY0RYK0JJSk51MWtPOEhNbjBrTW1wNm5ZNjIyZlNwUkd4M0RRY2xCMnphdDV0czJEb3JFelVmV3h3NjNJL29qczVYQ0ttNWp2MzJLQWFxVWEvTU9DY0FuMU1qMCs1TmhoQ2hsWC9DUWlUblZyWDF3RmZmcEI4SElmbTBjWDUxaGJQdXNvb1gxVjdnYTZ6RzRYdW9ZdnMrMHhIQVFqeDdEWVJENW0vUzJFNXVqUDlrNkRPTFZYemp3Unpvazl6bjBlWWVFeXBDUEFqTWdXM20yeUFGMTA3VmNBcWNEaWFBRDFWU05oQ0tMdjA0TWN2cWxCa05Gck5QWCtjZkhidzB6QTZwbE0yR08xcTRpY05GbGlHM3UwZ09mNFV0ek5xZ3VzUUtHK1BTZ3NjZFRUb0dyZXpOcVA1dFpxRnVhZzNKSXJyOFVPZ01VajZVOS8vWWUwK2YzL2hBUXVqRVUrT0pNUDFCMmNsMHNvM1pxZVNjckNoMkg1VFlKOVdVQklSOUtram9STGFQMm1JdGJiSy80QVNsMVB5UElPbStEczVXSUlnL3p0ekVQbDVHMG1FdW5tQXNKdUZmR1dQRENhNEpZeXpoU0NaNFcxTVNJT0JvQUF4RHRiRUdKTlVVN0FQSndzUDlseFUrUlRzZUlpTWI5OWxVQkRWdG5DdGFkNDBrSGdDOTAyY2JaSU5NY1BEUWg5NzhBZnZFY2VBcU1OTm5VZFl1cmFkeDBWRzZTWDRZMStmQ29PMlhTVkhmMU9uRDdMOXhPSm85MTJOdlBscENYUkcxTWovVHJDZ0FKRUNobFhDQ0w2ZjNrRHBlQ3dqVUZtaE5JVkhPQ1pZV2MwOWNENG81WGhOT09GdGpRb0N3M201aTJkbWJ3cXVaaDd5aWxZU2E2Q2lSblFkQzhYSXZQMm81MFVpbnlsZHR4Z0VxUXk5dHRKUlZjbE5aTlNSTzBWU2lFQnlXb3F3WUxjUDVxSzYycDFNc1ZUbkErNG5vZnBWdmRzc0RmSitMZ2c5aHZINUwyUEtEL3RmZWZUdURGUllqdVlpMWpMZVZKaElHUjRUOW51MEMzY2JJUUt3cEN6dCtEZU5FNlEyakFQclRmUG1ONmsremdVS2JEY3VadGlyaHF4Y1I1T0NGdzI5d01xYTJtVXFINlhvOCtpYnYxT0R0L1lKYUN0UVMzVWhMN09DNGYyTDIyTFVaR2JZKzl0NnZnUVUyY0dHUU5uaFZLSG9GWkd1QmJGZ09uSi80RDVISjlzdG9EaytuQTA5QUxsSk9LOWJlVDF1V2FmS2ZOOEtHbXJUdFJNMG56NnJTb3pBUjJOTmhmN3RoQkZvYTlrcTMwQ0g0YnlibFl5YUxJN2N0TURrQlk4dmRFdGxXb3Zwa0ZYVmthemF5d1BXUTJVVnZ1aW51Q0FiL1I4bWwvUzRydzJJTlJrVG9oZTVqTkVsaXo5UDUyWDF3dEFTbkFrZ1lXK3Q3WjlYL3lMcVhnU2RiWHdHdFVnbmtWczlzNmIrSlpGU1cyRm9KazFQOHdoQ1BLLzFzVG4zVkxJMWNtQjlleXZCaXBZMjNNYjUrbWViY0c0UzRQTUtScTQvaUNrUXZ4UDM0UDhlUFk5R3lrczNFRHpkZGx0MWNaT3M1cHp3ODNnNDd1YUFjeTBhYUNoMnY3NkVQWDZSRTdBUTJuRTFOeldiVEQyZk1vUHRhdU5GOGc0TDR5b2tGdjRpQzlUSmlkM09tNjZtdXpTYjc2Z3ZEYVZVOU1VQVFyYjh0QjZLaVJNUUNLZ21ULzc5SUlmSFgvTGpLeWU4bVk3ajZzSGg5R0VIMnlEY3N6RVlTczBFczUyWGxGR2ptM0hIMUJpSm0zVk40Z3RjNnBWSXRJT0V0aXhMNkw2N0RGYkdkbnU0WHdRMWJwN3YwRHpuTk9JSEZiV2o0djlBOFpQdXZCS1pOUnNBVzlVMkVBN0pHWE1ZcTRVc0kwUi9OZmZnSzF4N0tDZ2ppQSsrOXd4OUdSQ0RYY1NkWDZ2R0ZlbGRhR2lyOGt2WTc5ODk0dDc5YlE3aVJzaWhXVVduT1p1M0JxN2xtN2xDdHJoWnB0SzZoRUFZekFKK1FpSjJRT0FockhNNzlKb2JKV2lXZ2VmN0RnT0lZUmhQL25rTUE1cmdJeTVsdG1SWEZYdGtpejZRdzBPWVVkV0F0NXplLzFEUllaVDd1cllSYVUxeE9XUUFkSjhXYzRpSzV4aUpMM244aGNReW5XZFM0UFBUUm9JbE92OGRkdWE1elZaanJMcm1wNGlYVlh2WUY1bmxuTVhXUVdMYmY0aHV5Z2hqZC85RExQc1Zlb2JwcE5kZEp2WHFMYUh4eEpnNEpjSTFCTFYzcEtrWWpWYzRNeU50Q0t6UjlHa1JIbHE5QTQvZVg1NVhsNjUwS1cxaEJsOTBnbXRQN3RLdE03ZUpLbUo5VEpidjBuNkQ3bEg1U0UyVWpRNkhvK0ZvQjE1TzZQQ0RQYXlycXAzYkJ6aHgrVFV6QXY4MVNuamtDNEg3MjIwakg1SWFRSG5nbGJMRGRxd3Z2WUtFbHhPWVoxL1VoeElFOGF1VVBQblFiaHIxeDRlNnhsSGNrb2RIOGc2QU1LeGw3YnoyYkVJMGxXMTRDcTlGb3dBazFQYVJta3dvNmlITFF5SWxmNTNFeW9TRFVyQmV4UmRYL3ZMYTFDdGtZQTdKcnZwT3VrS0x2U2Q2TERUT1pCQlNqYnhkQkd1QktuQ0l2cVplV2VXNWpsWUVYbjAvR0syaHRjTTNpNjV4VGIySWFCVlFlYTZVTTVRdkxMWVhvc1QwdmZ6N2UreTVRZWxFbisyT3lCTnVxSTJKSUZKbUFjK29Dazk5SU1tZXlXb0I2WUZFSzFPSW9sZ1ZJNE9qSHlZNVhkbkdFSmZGY3gydk9EaEFWU2d2T1ZEZUROT1hxb0hweWlSSjZOYjdPZnNZTEh4YTFib25EaG9acW84dTZGWjNiVCtMb28zaWFpZmN1VytMeTdsaytkQTd5bXZoaGt5SmZRdXRKcmcrb0xZUFRNcmpHY2s1VVZSWjg2UkszMlhrVnFNcW9aRk9nakw0YmoxeEM5d0pCdGowMndFMlpsNFVSR3E3WmRtUlBZNmRKS3NLNGtnQTEyY1FqUDlBbjhlRXZvamxJN29qOWFPakhXZjVTNUt3Q0pPM1E1RThzcXRmNWJ0a3JLQU1hakk2eGw0NmNXWWdNYmZzWU5yNXJibVhNUHZQQmV6bkN2OW80VmFOR3NDd2tjWlIvbW9NNWJMZEpiRHYwbVUzdmUwcWpwbzhRVElZamgyVmQ2ajJCWHp4SytCMlZTZXQyZXlmRTR3bDNjRHBsM3FxbjJWRDVJaGw1S2FISlJGdzlBWEMzNTVFWVFLQk1GZERyOGdWWnRPak1GK05PeWhOZGlVaXRBcGJqdUU0eDFTc3FUM3lFL3dyVmRINXcvV1lvUUtleFc2UUpBRWJUSEVhSEluNjFmR0hJMkcxZW96cmhibWZHRUZuMS84TDhIZVNJRmQxWG5JME5wbEhhZkFZR1E3WlF6dVdQUUMzbTIxcTRSVmNtb1pwRGlxR3N6c2J2SmVkUjN1Y3JMMnJ2bFVTcFhqYXVoMFJtelkrTnlkNmZJMHBmdUN0RzNZNmdUN0dZVTZjcDRZcmExYUNXQzZIOEwzZStMOTI5VUhFd3NlZTFEVDdtdjZqd2FGakxXTURDMURFdmdTcFBVTjNoMldDYlJVQU1GR2YxVFNYYmxaOWxmOUFydk1SbUNyaWhBdktPRnVkZ1NCQXYyYjZXS05YQ2tieUZ4ZUJ2RjZHOC9KWUpqM0l4M0pMSkZuU1lXVHkzZVZDbk1ZYjdKcm5neFc1d2NPYjE4bDk2dUVmMThkaUxPaGhUUlZIZG0rMWFWanBGMXdyZFgxb2pnNHh4RmxBQkhqL2VTc3pkdkNUbGd0Zk1zR3FHbmJTV2FVNkVwTDd1YmVKRUlvTUhQMnpPVnA2V3NMRUNrcUpEWWN5ZllyVG1wSy96VXp4VTc1VHZIUXFUc0hxVlR4NXkxNmp4STd5cit6dkk3WVN1WHdhZ0IzVVdOUm0vSTB5aDBpWW9RVDRLaXVQb2FnTEpRcVZtM0lMUnB0ZFFoRXhOSVpLZDl3aCt0V09rbGhkZERDRlFJeDU1VWcvUGdsSkNOVXROMWxNVWI2U21kNkd2L2g1Y0xGdlpqMDUwei9jMU9MaWJzaDVoK1phSDFONjI5dnBmS1d0eDNFVld3SE5rMEZ0RUJyV09PNTdmZW03VTlzWHB3TG5qcFpJSEhRdE50azhVV09WbGVMQmlCOEZ2eDQ0VFRIcXdEUTBuYWpLMDZxYkkyUHMwZS9nSmhvRTJUbE94czV3VGZncFRLT29zL2dsTFp4dGJkUjFMU3prUnMvUmRqOFdMNUNRbnpUblRLQUZFT3ZIWWpnVWZQRFo1SmhZTEI1aTlJQkNObVY2cXRqZUE0M294RVlHTXROUVNyUXFPSllTUUVZYlZWQVVYR2hLT25URFAycm8zSTV4Y0VkbGtHZ0JYQ1NUN24rUVVINTNhbGpydXR5bm5uMzV0UUJIZ3JJTW44VUdMeWZvS29TZGJFelNMeFMyUUgyRXZwQUZ6YTlNNWJ4RVJQY1N5bHpVNVJWL3R5TWFZYjRnRmRQdkRPQTFRSTBMSzRSVUxRVzlzTGgwemtJdjBrNjR1TWc4aTFFRy8zWGxQd0dYeG8yTVc2bjJTdFVkeGxXR1VDbzZreWhzb2ZaY3RGbk5NRk5UQjJHSXNralVBOXlhVEJzNXYwanZrRnIyTlBtMi9JVmJlZ01CNmQvOGNWNGtObVhlT1hpK0RGL3U2Q2NMbzltUitFQWJyRjhZeHZNcDBaVHRIVWJJVUkxb0ltMFhOTExRejIwUnNmbnFoZnRDYzVFZzQ0NktBaW4xTFRPS0c3ME5MNDlyT09QK2hqNjhrZEw1QTJIajBNT2RSN1BSRzBiY0xIWHZWekJvVWJzUm4xcWN2R3IxaWMzVit5eGc0V3picFp3U0JiTjNrQmIyY21TUGlFdjZOcUduZzRpd0RLSjEvaWpKNWxLc1ZBUVhORHV4aFp0Tkc5MFBIQjBFaFJQTlZjeTZ5a3lUT0tZSzBXYjlLRXFheW5RcnRrYzVTdkd5eGNOdkZFZ3VKNmNnSk9RZDY3L2gyaFY1YW44M1M0WDcrTWNaYkdDMG0wbkZUSUswSDFBNXNHMkxiL3JWVnZPVW9vdHBWUmp3T0I1OWZ0WDVieXdYeldBQzVUR1JIdVhCRy9UM21FNXJHSE84eVBhYitUN09tR3A4ejI5MjE4Z0FTTXpzZ0tzUEFlYzF3TzJvVWt4MGQyZU5ZUWZJNHN3eDlIREpCSHRwL2trbDZ2MFR4S3krdEk5b0wwaHZ1ZC9kVElvU3pPczdqNXI2eU5neUVTVGpVYVovSFUzMjhyNWxRVmdxYTRodytUVGtVdWNxVEp0QU01M1RMdHgxcjhlTWU0cHBUWEZFdThuZmVmOG1xNlU1L0V5dWJzdXBhY3BrNUtoTjdCUEdjd0pIYU5HTXBWSnI3VTVDcXNiaFFhcTB5UnB6WWI2dmhLQ1pKQnkwUUFneTgwRDhOQkpWbUc1SUh3L2JQWUFSMncxaGsvMHhsVHI5SnN3bklYQjk1dGU2bGk5RXYvakx5YlU5KzFPcEFCSC9CeGJmckV0MVJWN3dGT3I1cUsveHZ4MkFtT0ZwMEVidjcvdVNoYjIrSkJLMUUyakx6RzRQRHZzK3NEZXdudEtYc3IvUHByUFdlQTRPRWtyek04eXI5K0YvSjlMSTZRNysxVnErUkJ2WkFWanYrV2ZqWFIwNU9pcVVnZHlxbFdoN1VSN1RKUDB0aDZoUHZFblpZVFhCRFBDUUdndTRtaHRBVFBRSDJkSWN4MW5xc3h0M2QwT0x5L0xIY0g2NmJuVC9nUGNBZXVEaDhuUHNUemFGQ1FoNmg2WXZFM09SYkRMcHJQK0QyNlRjWmxuRnRCSGk0MGNzZGJjY0JVeDBYVWEzOHdQdW96cmp6RTR1Z0lXMTBhQlRxS0c5Zk5mNHhBSGR2azVUYkhCb291WjBHY1V5Sjk1MytNTVZ4NjFmTy8xSVlwV2g4djlYN0kxUzlTNE5URXY5VDErV0h6N2NTaTdMamJNWnJ3LzhpTVR2L1ZzekQyWm9aT3FpYnBidnpjQSttTXBSMmZIWmJOV055YU9peno3MEMySVJIT1pvTUYzS3lkSEdPU0dMbHdqcWR1a2NSOVRGV1VsVHFYcUxibjBjZ3RSZmNmSnF0WEZEWGV5dFp2aHBkUi9pOHJvb1Z4RW1UVC9tTzFUbVNKVS9HM2lVNE1COVRlZDQ3UXNQTHlYcll3TUlxQ2tWaGY1STZDdExQQ3llRXlpWmtudkJrdzlSR3gxbFI5c3Q5VXp5NExVSVFKeVoyZFZvTFNMNjAzTkM1M3h6bWgzaUJSNnl4WWZTS213ZmkxREdIQUxUZlRvblNCbTRWeHZpNHpwalpKaXRLTHJpYytpY2ZXMGx6Qjh2NnpaVnpvUHUyNWNHTzlacjlKSTFOamNnanZPalcyNEduWlNQeTAweVZvcnRSeXZZK2p6aitRZldldmx4Yjg3bUFna1pRT0YrZ25vRXNPak0wVFpSRjlOeFNVaXc1bHJEdjN2UlVQZ2xyem96TE4wZDVTaXRkbUlIS0lGL0VPWGxXdGhLcUVHNllCQVhweldCZUFMUWx6SE1VSFkxdWdERFNzeS9FRmMwTVErVXJkZkloOWNQMDVEYjJHOTVVUm8rSlhHNEpsOU1UU2dkUDR6WVBJMkRhWkhQbG1ZWHprakFHODJhaE1uMXdRRVhVaXcydE1LMVJQVk5RVStsV3V0aklYWDhDcU1aMHhVRWsrREw5MGNmQWpuN1pLU1Q5S0hOZWFCaWJoaCtUcjByNTBCRUthdkd0K01aVHRQZnpTWWFRa3VHZGQwR2Rienh6T0dvVGMrTVdZOVF6VlBFMHovQllidGJOYUVMdXdXdmhjZFlUZnlNWVkvelBHU09WTGp3d2oyUHZKQzU2M1hrdTBFWW03bk5oUVUxTGtyNnNCODNHNEdXL3FRKzZ6VDNsbmR0bCtYUkVETGVKVGpsUWdnNXQ1MXAwM3YvTkZPeWNjV0s3b2MyZHB1c3dER0w5bkhqbkdrSXBKOU5zcllZbXU5RnhlcGZBRnRML2NKbW0yRk1kUjdLSEJDNDhvVkFWNXVOWXFYdWJMaG1QRW9vQkhNRmMrWWtmazBCYlhlTmlObmRCdERXb082NHcvVGUrV0l5T1JVNzJUSFNPNEw1QklHdjZ5WU9wcitpR3g3bjNOVDF0czk3VElOVTUyWFJMRktxVDBzTDhXcjNKVktLa3NXQWRTanZidWlWT2l6VU1QM3VCYXhZNGFnYXBzYjd0eUloOVUvVHpwMzJ4Rzg0U1gwNG5iSlpZNGo5ck03TG1iNDJOK093Q3A1ZUNsN2xNbTFDdlM4ZjhQdm9hdkJ0VFNKcnAxKzcrSFN5bWdQS1Jid2RvcCtGSDlFV0k2bSswWDMvS0xTVVhYVEg0N1RtbHlsTExKQ2FFUVpMSXBuL2dPTzNKK1BhcEpMNWtYKzdjakxWTW5lR202WmJvVGtRQUZDU3JBUVdWNFMrU1ZFaE5Kbk1tVVk3UWZ1eFNLYmpyVVlMWVFYeE9HVld2bUh0dlM5ZEtJZ2drY3BLR0hLZWZJd2NpUTMwOHZSRWhuRDVnU0YwZkhYOC9UMWFkK2QySjdpK3VnbE41dFJleVFZOTJOVzFsU1BaNnhqNE01WHk4UGg5NXI0UHVQb1ZsbW5GMjhVaTVqblFqU0twWlFLMi9nK2kybDR6MGNML0VUV1lnTFZXQW1Idk5iUVR5dFoyQkh2ZGNDTnBZQzdiZWIyOUpFS1JDTzJ6OFd4Z2JDWWpoZGZNUUU0R0dFVkliNDE2eElDbmNCT25QeWxyVE91QkM5ZHNrdmRIeUU3TDFxandKalZhMkQ5enhZTmRZZXlreDR1am9oYW4rd1VCcGZNVkhOZmk2UmdPbEVFSjl2a25hWDVhZlMrY0FlL21wWkpHd0NwQjdWWGZhUnVIKzZPcEdrYjZNYk96b2FIMlRoOC9LUWxwS3czS0NPb3NHUW4xMEZ2aHZ1QVJFOVBXd1A5Wjlqa21LUWZCbUFwMnlOYTM3NERPVzd4RTB3SUkzdmNTNmJkNGUwVE13emltVE1iVDZUVUVZamc3YWpobC9tV0FlUXovZEs4VW1xSURxZTYvOUgrUFlpbFY2ZTJVeUJqeHJVYkFxalJyU3R5eWFYd0xRdDBPbmxtMzNmZ2Q0Ull2VTNndjlOejF5cDd0QWNYSXAxR2lPUStOOTA0Vkp3L1k4a2hFeEZYVjdEWXlIV1pkRGExUmY3dmZzTFBLekRjZXF6bEZLMVdINFd2aSsvWXFaZjV3Nmg4KzRINWM4VnY2bXV1K1pUYlUwdzF4SnJUSmtoSkc4RmxoTFJmajJjbGFUMnhPdG5xTnNadkx2N3l1WS84Q1hzQU9yYjRwbUhxSHNqZ0lyS3RxRlI1eTY2aW5pOHNlOHRuNHJSc2ZxNW1ORDVPVmhyYnJwbmlweFR6bjV3K0hsU2RMU0hhWGpZTnRnVlNOMFBmWm5tc2t5TURUVnU5TE1ZMmtxTEl3c2doZ3cxMThTc1dNSFpVWVZiUmlWRjFDNkQ2a1kxbXkzeDdteGRocFlQM3FKbVFqU3ZTZkU3ak5QZnVLRGI4MnhBM25DNXk4SVdQbzQ3QkJFdmtCOHlwcDBWY1pSdElaUjc2b0RaUzdxRFcxUFlpa01wM3hYaWZSYzloWVNzeitaTk5lT2NhWTU1eUdtSDAxbVN6V3YwbmNTWkVranRhTHF6ak1yd0NtZlhHa1EyK0hpTGVPTWhkSGZ3R3BxRnJhM3lkdVVyU2dWMmhWZ25nSjhGaU0wQiszWGpVTm41Q1BFSThZcitkYU5DS1h0c3FzaXF4MUw2UjRZc2txM1NiN2M3amVXU1gxSFhkeHZ4dlZDVGxrTm5UTnBqK0ZhSktoMGJPR3dqaktWMXBCOE1CYzEvc1owUnFzTHFKdDVsN1drSXh0MWtEeGVWQU9tYjFUcTFXa2hIbUVPUDdZQVIreW5ZYzlpaXdYdGZseDJBU2FhZUx1SU0xOEd3SWNrVk5ob0RJa3VnNlhEVGJvY0VhZkZDbkl2TkRKbFY4SksvS0p1anowV3IyWXNEN3ZybHVxSytGN3UyTU42QXgyeTZsWU5TVzNnblpwYVFNZkFOaVlmRk1xSjM1WUQxTGswSVBSRThFTmtsMUlrMEFuVk1mQ0tjNmYraXMxc0t1RVN1d2luUmdhU3JmR2RLRGQxVDFkelg3N1E2K3FyY1d2Z0NjY3d3NytiaURHZFdZcmtvNGw4MDBjZ1pvQy9VaHM2T0huYXB2WGM1QTNRcTF3eVgvMUE4WWRzK2d1eXR0SitGcHU0S01vdFhJYzVjYzNSK2doSDJNMXNydzJZQmRlUzNCMXFYemFseTRNa0wwblFlclJyYWNyOW5LYTdtQUd2QWxiU3Fsc1lvWXh5dkF6cVRVN2YxODNWbVV5a3B1UGVvdVA4S2RhSS9nTGd5bUVJV2JDV2IycDhKQ3NwMHdTeE5iUVBFMk1xM2c1VG41ZlQyZnpaTzlUbE03NHNPQXl2N0NNVjU4aXIyaVpyYlFPRXJ6djJSRUJMa1dhWWdtRytuOUpRaFlaVEhSL0puN1Z2R3RwbkF3MDhuUkowd0Y5SXRNUGZVVVZMeXFORWJJYjhKdTFiVE05cXVPL1k3enEzamRMT1BHTGVqdmMwWkRVeGxuTFpvU1dsWWJEbW5xMXlSREhLb2d5NGJpeTJCaFVDSDQ1Z0Y1aUxwd3pxdEtZYUZzSHp2SjkxSlVaWElNL2dGS3VXRkFqL3pzMlF1bjZYTGNRbXdaSzhIWnlUYzhrTnZ1Wmh1ZFpsYy8zMU9zWVBBT2hMbUY0dVEzeTFXTXZYVXZ4V2lPN3AzSDZWQlVRcUplb1FCSDZ2UzRoZjYraElnMElDbVFIMm5nVmxobG1YbU5OZXQ2dHRMcW5PTFgxVnBnaXZLVnh2aGtoalMyNVNrOXhVNk9NblVZU3VpSWhudFJydXBEamdRWnl3M21yaHRKclJuNXB6TENob3pSOEpUMnEreDVTenVaUllnLzJoUDlCNEs2MFVPVHFvY1d4NWllOWJhZE41WnlzVkZsUXVVUzNXMVpEV1B6RC9ZcS8yRENhRnBKQ29jOE9wMExZTHFodXNMMzQrVk5ZS0tVbGJRek13R3pRUFRta0txaGRxMmlLUG53OHV1Q2l5NDZ5Z0NTOGlWVWEwT293UEVodzNKczJuR0R1NWZHdGJSWkRvU1ZESjlXclZwV0gxZHVUS3U5VmNwK2lzbkw2V2dzTWkwaHV5dUJ1eDBoOEc5d2tDUTFwTzVZK2VKS3Z4dmVKU1B5SXlZSHNuMlhOcTVtRlBuVVFHZDQxakVyczhvQ0x0TFFpVEtuTkE3RW5wSlFNSmN3S3FieWV5Z0NqWjFFOWc2enZ1eTV1Q25SSTVOcG5acjdGTExhOTZYdUdmTzE3SHNoTHlCSjVkOWlSaHl5YVplckJFYldzZ1lYcUd1c1czUVVlc1Q2UXM4UVJSTk40bHB0MHZucDNJckk5anM0Y0NsKzQrZ3lMY2s0cktnSXBCMENMNTcxTnI1emI3VERSYmNkWjZnMExtY2RrWTN3bXBrNGVCeW04LzFOWHdZL1p3dVhKS3RBb3Nid2lMTWt1TGJzSnNVMEx5YWo3a2J0bU5TNlc3aWM0ZFdMK2l4UllWbGtQTzFQMTdrTDRNQU56SzZYb0Z1a1JnRStDK0tnUExxcnFBZmdIV2JsM2twYWZ3eXIzMm1GbkI3VkhVNHlmUkRQZHVoMXUzQVV6WmtkbkZvWlFYS3Fla00ybHI4eW9Lb3VUNXBxdmgyQ256MHFMSFJxVkdRYkMwazdRZDJBSlJSZ3pveUZkTWErQU5KUHFJOUlBY3Z5ejhLWU85ZTgrWEg2MUdONTN5enFuOWdiUDFMQTErVjhBZUpLa2tRbS9LeXZzUzFJbE96VW9nWXdTeTVaWTJPYmdPS3FRc043dGJ4NU5ad1hhdTZLN1BvL0R2M0J6dzV3T2VsNkFSZEpjQ1ZhUzJYRVMwOHUycHBxVVFPSlh2Y3RnTk94YXB4eU5pM2NPWUtRREYrR0hBeE1rL3dRMWpwTEhseldJUndSR1hkUjVnUzVKYm1ZSHQ0dWc5T0tkUk1iYXFjMFBrdVhYME9UODRUbGs5R3FzY3dsSkJwUERiWm9GQlRyaXB2d2hJNmVKZnZZWnk1LzJqUmFKc1JmNzl4cHM1UG9uNHFJNHR4RFplQWxxYzFHT0dhSC9ZN21sc0ZKTHl0WG4yTmZ5QUtIRUxNY08vaDh5SjAxOXJGT2Urbng3ZGtQNnBuQ2ZJbGhzS2cyQWdqd25EWXB2bE1lVDlIa3duMmY3SGkyQUsyYlFKdkhqMUJ2QXUraWYwblQ3K2ROdFpJM1k5T1NuRHZoSVNFMHkxWDAyMm96SVNIQkdyVmI1elBuN0NiUHFtOGsvcEFlTnBqMjdKL2d3MkRUdHJOTXM4a3BlTEpHVlRHNm92bUI2VFNHL1ZVMFdiUnY2QXQ1V3h2WXpKdE9PYVFzdEVDNXBBSVF2M2RPVHRmQU5HMXFBZUMxRjlyYjVuWCtQejNyQnAzYy9DZkZjclNnWjJQSGFjSE9NOWtueks4U09xcWxQRkNvSmN1S3IyWkRMbDBCQzhqL3NCYVVuMTdZbWRPRCtHVUR5NGt1ZDRiVTIvTXNRY0l2eE5uQVM0aW1pTmNpd2w5TzhlQ1RlUlpHWi9WRTg0WHh4ZkQxQkMrNDMrQWYxK2xuUk1xVjBtOWhkeDY4TnFOWU9udyt0R3pvK3ZQdW9hMTRPN2tqY2UxZWFFd2ZsdVhOaGEzMUdIR0Njbk9DbVllZDdwSWQ4ZDdSRSszQ3R0cGk0UkJWcFo3b0F4T1lsS1lCUGJKUFp1NWVEdHFSMThqN1B4ZHVBK3l6ZWhrSXdCTzFpWVJVQXE3VnhrWC9ITUJDd3crMmdzM25URm14V1NQM2RaazZGRU1vRzZpSDRSM0tGL1V0QWk2RVVqRVVGTjhIYjRaalh5RmY2L056VktibkVtd0thbXJ6OGRjdjlPenI5ckZnMG82QjRHalBTRGZTVEpxdHBPa1NNYWtYNE5JeHo1c2Q0dFZKdzBvSis3cXBUdHE4T2ZyLzFUa0wvTlBrQmJLTkdzbEpSd252U0ZNbDFpeFBDMm9QZzFVRGtzaHMxTTVCSlpNbDJqUlp3bU9WNEpMV3ZFaUJBL2NuMDJJUHpLNGw1ZUJKWGF0MDZDcHMrcFhMdW5YcTlLbzVIRFRkK1BVM2dJc3Q2KzJxUXVZQTdVODYyc0h5NEp4ZnR0NWRFTDh6ZlpLam9YMVVtQ2k2UFRBYjhNZG83UHcvaE5QbDVqWnYyTEc5Nm5HeUltRkpTaForMWM0c1Q2TTdNaldqRHpnVHlyMnRjakFMODhrQzJFTlRDSnVNUjl5ZUlXOUt3RExTUlRYYmdoY2N5N2NVTkl3SHlHZEo0U1pmQ2wxbFJKZ1J1dnVuc1FOUjRSUzVUMkVodmp6TW5xZTNrVWtsY0F2N0xCNXByai9IZXBoSm94OEtNa1JRbXNlU2wzQjZZUENyU1puaHNwM215OVN3U1F0MEgzS1hPdEpLU0dkdDFlQ2VoZUg4UkczWTIveTRKaXhJb2VDcWN4RUcvNDVob29oUG1FOFVoR1l1UmJIRWxLbXA2cEs5eHNqZk9GNGdabDRKSmJ6YzNnSUNxdGpEMEY3dy9TSGJwVndIYTgxMWxDKzUyYVZxalJ3UVRYVEF2eHc0STNSbEtQUlplUnp3VGhJajd0Nkh1S2ZEbTdVaTczeWxQWFVZNitMak5GM2JRckxFMmttMlZLUXc4NFByUmlRN0k3WEh5cXNUWW5NdG5ZSDQzYVJFMDJrbXI1b3RFR05vb1luV01aUVRISWNiME9ZTU9qY1JUMzI3TDNwNlhwc1h6NmVTdzlmOXU3N256Qk12L09raFcvZ0F0VTFBTjZ3WmgyVkY4R09UZ3hCbW1qVjZoSzE1T0l4QTZ2ZkZXRzBLSGxLdmpBQW5VRXd0ZDFwV1lXRGM5K3RrTTlHMjJEQzd5emZsVXFKVFNJVWNhSjNtcTZ1ZXEydHUzSmJ3ZXo0eEI0ZWRRdlFGZ1J1K2w1VTk2Y2RtM1Jhb0dyQTZZVk5lK3VEaGJ0cUk1bklXRS8zay9HUGdPTmpoVjlZZW9wYkEzWEl5T0VtZXRwVU9ZQkdDcUR4VDZzdWhtWXJRcjVwTlFnV2VMNXJvNi9qQyt1alJJWDRaZENSTlpvWHV2OGtVVDRYNW5QVU1DamVYb2pzYVBzaEdMVWxXZWtuTm9pWkhXZGtOZ2lFVm50TkZSek5sOXJlQ3llUlVZWTRDQTZhTC9ZVEE0MEs4eDd3aXhFK0FLcGlmSHRqQU1uN2pCL0xyMGFxZ1pzV1lYajk4SVFLUFo4cUhKRTd1RGFNRTJGWFVRRFp1K0czbkdlMFJBaUdlT0hlbXZaRktQTzFUcVNiSmUvRjVsbkE4Y1RETE0xSFVyTGJHc2loSUtEUFRPeTM4cE9EcmdNVFNaKzJra2lmcjQ4dFZBeFNWbmFUT2dwYmloS0czOUppMmxLNThJUFY1LzBpNXRRQzZQbi9rVXlXVnJwTEluVW5IbkJucWhvMGhRaWc0TTFJdHJzSXpmcDZGenhTWHRDYXBDY1BCMTBJN3hRSldVb3BZR3haUnF5bzhFRXFmcWZJZWpFbDUxcTh5SE9saU1uUEZwOC9ZSkVMVG5ILzJ6c2FkNTA0TFoyTEcwTkljR3p1Qm01anlYTWJqMFdubEZtaytGQkVMN0Q3QmhLWHVlVWdBN0NBWEt0YXp1ekF2QXpSQlNCRmVvUE9GbWovOFE1bmErWFUwY0NsVTlOMi81ekhsWmlkN2wyMG9uc05ETnRNQXlBanBEZnpxMG9iYm9INy9pZ1RIMDBBdHRuYnJYTHpSSjVhS2xnL3QzUllPNUZjWEpPNVpIOERXVWYvOFByTFF4TkVqQ1ZnelRUMURNVFV1aGV6bXJIVkQ3L1dYaVlQR2E2SGZWZ0p2WlM3S1A5d2JaR1lFZS95RC9MYWZNTlZ5akRaOURZNmdFS2lYWVhjNUxaUXBJMU5XWVY0cElJa2xOVDRtZHdFNG8yNHNmaHBEeFNMekIySnVPU203dk51a1RhSzRVM3ZiVGNNMys3c2RVckRPUklNZ253TUVGVVFmelNadXFFUVFBTm5teGZCYmJrVHdXM0h1YmJ5SnZSUEJtNkNtb0w1R1ZsOERzSFhvV29raWIzcVNUSE9rOEljWlVnVjhkZEQ2aS9URVJGSzlnalRHMThMOGRqdSs0eDgxVkdpY05Kb0tGcXY5ekNSTUdVRU9WVkNaa0FwdTBrOEovVG82Sm5BbzI4UXoxclpCd2s3R0xuRUVEcEZEQS94ckx4NEVjS1pGN29ZSlhCTGN3NFpJRVAxNW5icVBnZm9ueHE2ZGZsZm5OQktrZkJMZWNoa1d3cWZFK3dVZnltbW1WS1BLRVV2c3NyZU5QdVdGUXZxODh3Y1ROQnlCdGM0M0ViZWFOYi9OUlpya2Z0elRBbHgxc05QdllsaU1qNWowTDk3VkVHNitVZTF4YUtWYVZLblV6NzkzVTBocFpmRVFBWVpKS1hlb0dSbkxNWWtvMDNWVGtnRU5zVkoyWkw5WHlpd0dUS2JYSkZieEJqdGVmcFVSUE9WSkU4bi9wNnBQZmhqeTdWWjFDSU1CYjFtald4RUIyWVgreVB4L29qQWY0Sk4xcS9rZ1h0R2xRbWtDZW9STm1oUlFEWmlGcUJsZDUzMkEzaDdWUGUybURaa0tXSmxlV2d1WEg1bDgzNFZJcXkyRXJTUElkZ1Zva1B0aEdxalJZejRnYzlPVVp1cjR2NWk4NFViRUREVU9vRm5lVW53Y1dld1RMVDU4VUJIZ1dPY1NLK2pKZWhpYWc2aHJTSXZxdG1OVjduUm5TL2lOcWl4Sk1JdWtpR01VVTFyMkhFYlVFSVBpdDhFM1VlVVdxRE1OY0hSYjBDWE9PdGRZUFhNYmtZZHY2d2IwWUx0clU3dDR2R1dMUFcyWVhobWR0YkhtQWw0S3dRYUZaaGxsdnc2OHovVG5VN25DRzFUdGtDQzdna0FCVVBCRTZJODBmbkRrM3kyLzk4c2oxc3dqTUR1Z1VjR2NFeVVxeTdBZ1JLcythcEpiNHE4MXNySFNGd0JXZElYdlhDVTZtNkVub0JvSFM3NjBIT1dsTlNnbXNpSzl0OGJsMVpWdlRQM3RZSkhXNW9ndk90eFk2aCtkRFlPajQ1WkFNYXY1RFd2WWlIMEZwblhRR3dZUGt4ZU9KSERLdG03OGhXMTFrMDVKbDBtK242RGoyT3BjWEQ3aExBOHVZMEk4MjVIOVJ0Qnk4NEVCMVplZExab0hVQVF3elBLakw5NiswbU5ncmJCcW16VDVqOXdCTDJPWlhiNlFGRFcxSHZReGRxTno1ZG9HZ0ZuRGFJdys1VGV4REFGWWxSdG1Qc3BaampSWXhCWFVNRUFReEZpcFpTRVYwMEE5TUZRaGJJdTNxNS9ITmxNUVpWOUZHaTltcS9hZm9UMldLY25TWEZ6aEpmbmlZWmI1Snpkc3cxSnFEWTVoNTZpSnoya2VhaEQvUTdTZVVDclJCUHB6a1BMTU93L3hMOGdvNWdoWTlkampGa0ROZEJiSjNMN1p4Q2JyenNZS2UzMXM3Z1QvNW1Iay9sSU9hejR1ZEFZY0U5Rkk5TjF0d1JUSjlXTWdXMlMyZkNzZUxqbTNlZGxEeWdFR1UxTi92QTJscG1sbWFON0J6d0toYjRmQncwNW9RUkY1Y3h3RjAweXRMMEdpblJQTjFJcXBBVkdoa1BpZ2J0VEJpeTh6RWJwcXQ1N2V6cUZtZFVXTEh2aVJ0NDlOdnc2OFNQalZTL3pjY2dvcHZUU05Ca1JKOUJiaHRFZGpDNUd3cGkxOVVBV2RjUEl3SjVqSGpNZnR1VWVHMFV5bFVBV3hFdy9HK21uMTREUmZCUTRZNG9PQkhvVndFdkN3TmpPVnZVRXJUOStZaElsaUIvRWxKMi9iZjlBcEcreVFMUUMyTE4wME1FeE5Xa3JtWjBYSjVPODFoSHdkMDJkTGhTNGx6QUtCdWJDMS9kYitaTXpyUDNXL3IxN3VWd2lpL2UrS01Kb2JublN3OTA0WDYvWGt4VURuNVVieFRVZ3hWYTI5Q0ZlaFhiNitpT2RxWnJQd21UbW94WkQrSGMwN3BCblBJczhRMjd0MUFrSWlORTNSSndhY2MrbkNkak1PZWNxL0tGZHYzSTVNbDBtUGhQUUZyU1d5SW1kTXhSclZWSlZhQlJ4Vlc2Slk1M244eXdJZmVhRk40RVo1UWpTN1p3bStzSThKY3NGSm9BbTFCb0kzUDg0Z1F4ZGhiU3ZHT3cydjNCMWMzUE55U0srVFR5VW5BUGpKdHpZTjBtcFBZUmRQT0lEZHp4MVN3VSsvUTZnUUpaTTA0aU1wS25ncThEUGd2U3FicWQxRm9hdnRoWXVUYUk5d2tqSE5MRUlQdWhtdjdBcjhyaCszdkxOSFlUWmtWRmRuY2luSHhoaUZWYzdzQ1BZNko0TGFLRmJxOEw0OWY5M1pRd3BwSWh2NnF6SUl0MG94a0pkTzZ1bThCYk1DVXpRcDUvY0g0c3pGRDRUUjMyOEtXR1RkR1Ayd3N3MVNuSXNiMHErUUtreWdEOGI5bVlwZmZQRzUxUjd1NGZha1BjUjNLZyt6Z1ZOc2hoTW16VUVDL3gvNCs1L1lZdXBzR2owMnFtVVo2MnlsUkJ6am00eFpBZnU3UUxBR3hheHpZdzVwNW94bks3Z2lKREcydC9VTWsyemg3Sk55a3lOTGc0NGZrYUlJd21waFZzM3hBUG02cVNOL2RtZlN5S0krVWVqUDlBZVQ1RisrandKL0EvaHJsc0hSK3pNbGdyemRMQ1NRSjVYSFdHZkhNTzVWckdXc2pWQzhVRk5nazRmZ2tvSXpxU3gxS3oxOFRkd3Z5WXhTZStUZWw0LzZsK1JYTFp5bVB0eVlWbUxmaUFKOU52djR5QkhSN1VKU2FZREQxaUNUWFUvdHBvcWlMTXRqTVltQk5tc29hTlc0RWtxaGMzVlp3MnVuemJhVjZjRmdscVVDcU9IMDZ0bWZ2RW1hbG4weDJVUzlTU1M1UENDemhyelkxMXFWdml0T1YrSkhld1NlM21LbDN1SjJ0eGc2emt6V1hrU1lSWFZJelNCMU81TXBWZmpQZFFsOExWdVZ5R3ViZUI0dXZ2TFhCUi9zYVkzWFlmNDFnUUtrVkQzQTVsZldVNldYZTlMUVVLUEFnNVYxZExDWGZYSE5ZNWlaNE1tM3JDdHVkMXR4eHdPNHV6Q0pVb2VGTHRNaDlFQSsrZUVaQ0N3OVNEem9DakhpWlllOGZzc0dLRWc5MVFuZkd4aFdGN3FaVWdTZDN6N3lDVUJWa1BYL0V3aGNYRGFPN0VUbDV2eEliUXBaRm1yQUJxOVYvMWxNT0tlZC9MRWtsc3VRR0xKZ004c2F5VzQvRytrYkQ1SzczYi9Ka0thREVRcE4zZVRIaVBZaHJiNHYxNEdSUE11N3F1WW1ReE1JSEpEeHNvbzV6b0x0WHdrQnM5TFhqK2IrZWZ5a1JVc2ZuMCtVYitKQUlEeW9pM0cvbXhCSHZUOGhrN0h4RUlyU1I1UzBFUm5rR3RGYnJTWHlkVjlIbjNXdUxDcHhQVFpCeCtRVVU0QW9CdnJsakt2ek5vQXRzNGNvYXhQMDhsNEljbEpjZW94ejkxQit1dDliRHBBUUoyNDI2K1dzOUplb0U4ZmY3QzkxbndRbHpaa0w3a0REQlBBTEJRMlEwZ2pNSXhsS1ArT2JFOU9rNW0zZE1mWnZ3ZmRhZ1VTV1RSNitGazNhMlZ3Q2RCRXhhTEpWNk1Sa1BPNnBhTVJDUUQ2UEhaRHdLMXVnZHhBTGFlNzJHb0VMT3paamR2akd2YjZnMVU3dHhxK2E2Nk1iaTBsWWE3RmlIQXNSRjM0WmFGL0lNYTE2TGZpaUNhODhSbnhNZEtiNTZobzNwSXk4c0hUalZDRGlYMlh6WGJ1NnN4MWZsb0c0cGt4dk1YVGZwMXNCQ3psQ1g0ampLZndNaHJqV3crTXBCU2YxaFpVMTBIZU1JbHBZeHRNclJNY0NzSTMxd0RvcmpIMitTY0JNeXU0Vi9oRUMwZEg3SmpESCtxSmZMd3NzbHpkMjdBVEFrNE0yYnkyc3hJU3NxZk9mT2hUMUJSdzdCUDhNS3RoMW13bzZFUDFTMFJWMXNFY2JaeThlVDE4RWExVVRLb2hlQ0VIZVp4bE1uR0dUYmlKaXJ4OEw3c3EybXk1cTlDMGtTdEcycHA5a2ZZQmxFRGpDMzBNbUFTUHR0N0pPL0MzejlxSHRWck5KZVVRYlR6S3ZyVzVPb2VReEZ0WXYzeXRBNW9JN0VnWmNWa0RpYW54cGt3TStRSlBRTHBpTlprRUpUWnYyZ3JqZVVHWC9iRTlUaXpEaXJ3dUpKbFdLVGk1aGo5Z0g2YmlxakQ5S0w0TWFuN3M5alRjNDIyekNaMnZTTGwrNG4xNGIzMy9oMUdNOTBHMlRPU0kwVXJKSFZRaHBPYVZhMHNUNnZITkplQ3ZvV1duVlBwdXVZYndqbEY2U2I3c0JLYUVERTkxbXdsMlAyV1ZOWjN5V2Z4MDZZZk1XaC92SHJrYmlpcmRibGFnU0N0dUxMMHlvVUs1QTFsNUlpQVBtaG5hTnZ0RG10VlJieXlOWExIVXJsZzlUZnl6ZmxiZFJzeXZFM29OVTJ3c1l3dDAxbnJ5VHVlbTBQQzgrUGlXemVFNXJnRFVuV29mVS9mWWVTVHB2czViMXdSL1dvWjlwOWx5NlNlSkZwUUM3TVMxSFhuQmgrQ0pYOXdaK0d2UnU4Zzh3dFU2R29peTRITEdIaTUvUmJEK3BaQzBhZmdlTHk0Qll5L3R1RWZ3UUpWRHlVWGFhLzl6a1pKR2NhcnFtSTQ5TFptZFlVNlpwUU9jeGxlbzl6VjQ0SkV0anFUOEducHBIM240SmRmOVRGRStjeXBkL01QRk9LUzZ6TkFiZUwwNlo2TEdrOU9KL3dtSFRPVS85QVVYMlA1aHlqdHVsV2FreTlsOHJ5N0ZJZWxyMFVSV082RDFXTnBQcm5Nd3g5T25lak9IUC9LK0R1aXNWZkZMRG1JTjJIQmtZV2lOWFVoYzZEcW5wSHFhZGtaVE1WV3RpTUk4aDJRZzByZkZQamdjdHBYV3FVeVNFVmcrTC9hL2NWS0ZyTjREbHphTkdrdElQRE1JcWdibFF2dTU2NDhmOWFyWTcya3dUOGo5di9XVWMweU50ZUU0a2t4akdMLzFiYkcvRVlaaEluNU9keGpUR2NpcmViNC8xcVROLzVZVGRTQkkzRks4ZHRIUk9hL0g5eHhDdnRQWHB0a29BUFlYVWNGZ1pEcmdkQUFtajZqZHFiVy9kQzh0ZmZmbGtUWlVoQmNGWm84MnRVQ04rZnN6a1lFNFRDTXp2UFFTN21RNUI3YjF6U2FSRWw2M2dHZXZ3L1hyVnU4eFlYT3J3dTRXdi9PQ2N0Y2R2ZUM4ME1jOGxMMU9yUHE0RmdKVWgrRmJIejdoNkVjTVExaFg2Z1liajY1dno2cGk5Z3Iya3pYM1MrUklZOXNrNFlXYURxZHJqdE52b2JCbnhhZ0NObW1uRDRYeDRsTklJbmlDUU01dUJjK0xwWnc1aEZ5N3EwaG5DdmgyeVpwQ3Y1a0NPSDdWaXFySkY0ZDluY3Uvb1hzRUhZU1BCQTg3MlRWRWpveFJ1VWVqcHZGQXNjMGhCVEpjejNITmdLNnVKOTljSFFyRDJPV2xZTERranBFemM0d1NjdFRJZ2RnMUVoUVFlc1g0MmhJQm9yL0RtRHNMU29WZ1E4cDI2YUovWUMvMittNWt0QXpUTWg5bFo5cDJ5RytpcGpQNmJZSGFQNEd2OUtpSXcvaXc0SlF1NGZJcGZkSG91WHhZYzNJaUhCWmZOWnlQaEJHdWtHOU1hNVhKVHlwTGg4eGg3RFVkd09kaURjeEx3a1FVN3FXSnFqTDFRVTZkWnZTM1ZXQ3NDNkpRNGVmY2xmdkNGTi8ySWhQQUdTcDlFczNoNWRISDNYRmFnMEZHUzEzRTU0SC9wOExwRDgxcXRPUSsxbkVPRGs3Y2RsalQ2aStHSFV6bnFuZnI0dS9TYStGRkhueUZndTB6TGFYQ1NnVTZMOXMvOXZzM0RNR2Q4bE1Dc0ViTW1uOXhMOTdRNGNhNXZ6emIreEFwaXpWVTdGcENudnRZMkduVFNGUDYwa1l2Rk1meCtJSlJ3V1k3eVNWM3MrSHY1R3NYQmhMNkhoVHJKZXFVdGJmR25mT1UyV2VUemtSbG1aNW8yYVg2TkZHN09EUkd4dmxlSm5GUjErWFJ6Smt1bDlaLzh6UTdNdURzMUZkSFVPd3FQcXhjNVo1ajZIM2NYNHZIdTV1d0VpSWgwUW9wUmVjNmFEVjUyN0Y1ekJzRUE5MEcxM3piWGdOMkNnK2d1SythYnMycjhxbFVpRXhPUVVGQ3ZGZ3hjWWNLTXg3VEdaZWJDZGhvL3VwRDgyNU94TTBOK2p6N1pQSmVMZnJIL0U4R1Q2UkRVWVduK1hNUURlczZQVlpqN3Q2dmpQUWNiRWhTSVBFZHVlSFI0bG14WFFQME8zWTloYmV5STcyQ0V6L0xQT084a1krWGh4V0VRZmRLRkI3R0k2c1RvVzRxTHFGTHJaTklOMCtUUitJYWoxZkxLM3d1b2RLOUphRi93MFczekkxczR0aElKUzBIRm1kVFFzNC81K0ZlMzVvTDhBSWlsSVdwSGJrMk9reE5KQUpkRU5weGlFOVlwaHVNblkwYjNaWHlkZnhhc1ZRbjhXL0Q2aWFUN1ZiTlBkR0FnL2taNUJlaS93ZGE2N1FLY01ISEpXams2TVBpN2Eyb0NWUmtBV2xzci9KdjVvZWwyTnM1R3Nhc0pJZU8zT1d1dFlMM3lWYnowdzFiTE1IUjRUK1gzbXNOL2ZreWNEb1p3WWZRVkRJYXJIVTZ1dGV6U29tZERjZEhSbUxxN1BnSDIremtPVVdWaVFQcVJUbFhqODF5cnVvL2ljSDFnNnFWdDlEc1c3TS93RUZDSWZCQjJQNGZ2VWU3YWNwS3ZwaHJ1MmJhT1poaWNqOW5CWUtRUTl1VGx6Z01CdmJXUnFUdUQ3bGZKK0FJYnNKNEF5cjh6OG14dE9EMjc0bVg3aE9qUDdmRTJta2x0ZHhzME1uUitjMzdPUXdmcHJuRmZGb2duZi8xTzcvUTFpM0s4VXdWbHBzUDhVbXYzcVhBZTZFRnRNSG1wUEtDVWVWWEhveVVZMEd6cnZXTkpqUk9CZVpXNUFFdjUyQjlWdlpSOGtFaGhrVXhTRkRkTGlVRGhrcVZPcU5acGdWdXFEREhnbSt5aE1hMjl0dFlIaktUZ0hNY2ttd0x0ZzU0UkR2LzhHQTNIOVBKZk8rRVBFYkt2M3BsTEZQNlY2UUFNMjVRcWIvMFdVTVY5TFR6VmVoUlduOG4xZUpQMEFkcUpEYXJTM0RjUmd6bGErRnkrVncvTlhNZjlUTmdSS0pyUVJxdVl1cWVGY084WmhLT05oQmtwdW9Nd2lOaC9BSzJSQkNObzJmMjFWbmdhUHFEQk02NGVMWGtGemhLREdyZ0VLSDA0V1Y1Y3R1aHp4S29WRTdqQnZOQU0zQ1N2dnZ3My9SK3FScys2VkpGcE93OGZXRXE1aTg1MWo3b0tLWGtFcURHQnU2ZENLVUd5QTUvQVd6QTdjbWMvV0dMV2NSUzNiS2ZsdFY5MmhNc1EvWkJTRlZadk1mT2dZNndmU3hVa3FOcG9ML2kvdWJrdERUejljOVQ2bmQ0aEdzQnp3dkxPRXJMWnB1OWtqT3JPcFVlK01GRzJsTCtBcmliWFd6bmpxZzBYRjQwUHlQZTBwaFk0d0ZHVW9YNy9GN3N3a1QwL0tHc2N4cHp6d0hJR3F6Skh1a1VKeWlzOEpuRU5FbllLNDBldE5QTU5MbkprakZSWmlCNG10aEIxNnJiYS9oTTdBYWwxalkvTXZNdnVTbFNIVFNkRVRiYU9kTWRXdzhkd2FhQ3J1cmg0cVFaNzNYN0VzL3gxMWJ0YVBuMFdNa2dZWmdYQTA5M1U4VUhUMk5qU2xJQStOcXl6UmpjZk9rUGJlWm8ybi8wNXBPTjVWNGlJWGNXTUgwSmNFUmZDTURHejRaa2tWVHZROHpZTnhqMEZneXIzbHVURllkMEd3NThQRllKYWl5cm5ONnBrWVhvVURzQy94WHJ1MWhYanlsdW1kWnM3b1ZPWTBEZWhXeWdua0p3UHFZcFdLQ3RZTnp5eEZySEtYRXFXOWdqZ3p2cnkwdHg0eEtteHJrYWF1NE1iUnRqN29GRkp5SWNRMWVjZ3I4ZHNtWEZZZlNGcks1OTYrOExaZWc5L2pWT0hBVGZyZDF5N3puRU5QNUNGWTdXVEd6RUdFUWxUL2crS3dYaHVKa3dWMWsyZ2M5eGdxay9SRldmek55TzhHbVlVQ1BTNXZwOTRrcGpTY05rM3hrYjExQlFVL2V6V0pyOUVHdEpDdHMvdkpqUHBWR0UxaGVERWlBZnE1elVVL3k3eHdRcXk3cXEvdjFjVFJ6eFF0SnhaeW13ZVBDUVIwMHAwUGI5NmZyK05XTS93aHFzMGkwZGZOSVd6S2NnUS80WjlCWTVIbTFUK3RvZUI5dWdtdDh6OFd2TGRSZXFZcHJ0dWs0T2hoTUo1aFVteThIN3FHa0ZkeER4clgwcDUzKzBieTBlSjFCTUlzMDExNG1NYkUzdGNxc0NTWVlwNUVDQ0IzY0tMemZoaU1qa1RWMlBDenV0czVsVE9INkt5ZzNibnF1cVB4ZEgyWnFaNHk3UUtuOUlYbjE3eFZpTHR4RTZ3TWZYMFVQQUlIQ3c3M0huTnRuY1M3UFZxdzRkOEdnY21rTExhL0JRVDdQazU2OGhQZ0l0dGF0RTI4MmU0ZmwxT2tyNmdGVW9kR21yNTltcHJRbEp6TGhJTlladURZa2RpbFZqdW53SnVPVFR1WWFaalU2NGF3dHRiMDlLZmVxdGJjREsrdGdQUmJSQUNsaUwxWm5DemcrUlh6Z1hsenZFbTlWWXNPMWxGYVdsbjJXWXUyNFBJZzZhVk1ZTGdtSnNmbHp4NTB1Yll4dXBWSmtqWDl4SExESks5QmZkT29vYnYxMk1RMUhsOGpodndBU0xzRGVGS2JDY2UyTDZnbzJVeUcyM3pWeXRNeDAyVUhBeXdMdXVreGZCRk9PdWlxQS8zV093TkZGY3gvdDhPZVlnM2FOTGgrWXpvV25sZ2haRkZ5RHZKWEo5U040Qy9TVnQycThPZUhJelFVUm02ZUNVTC9TUVl1blVLV1E3MDZhRkxONVlNMGIwRVA4YXE5Nm45ZjRNYWhFblh5b0FzeTZvYVl3bW9zVVUrT2RaYWgvWnRXR2pNblBpelZWVmV4Y3p0QVB4VC9GTjFVRmUvSVZNaGYrR1NiTGdQTnRUbWxmUlZKNVR6SjZPRGQrZ21EQ0ZaYTlEYXRqS0YxTmlDOEtxTFNvZ2VKNkRyMG9YSWN0V3FXK1BsemFVaFA5c05MbDFSNkROOTcrN3NFSzJ0S3g5VENqS0Y4Q2ZlRHpma0tnejY0eCs0em1DQnIxbW1YK1VwZFZSSVVLVGRnbUk4Q2J2TW1oVncyVWJYaFQvS2NMQkxFRE1vK0ZTVDcyOTQ5NUJlNEdVaVpzUGdlTU5WekcrRXlPZEd6ZE5iRU4vcUlRbmt0ZGQySWY1QzJtc2NndmxvcHFrcGtBUnVRNWwybStFbFk5QkttSGU4TmFCMVdlUTAzSlZnMTdSa0o3TW5peUlJcUYwc3c3Mmd4YzJsL3JVTDFuUlEzZW10NVBNZkx3cHJiMld2ZXlUckxVeHp5OXBLMnZZN1FKVXQxRHp0TDRVUkpFeTl2VFBUYlpjTlNLc3lEekx1R2FJYTlJSFBtZjdiU244MHVyS3F1S0F3UWgrMVcwWTUwczFraUFhOVZyRzB2VFVoWWh3R0FnV3paU2hVd1FFWGdJSWxKS1BPbVZWeEdoNzdmRTdxemFsKzB5dzFWaGpUd2x6eDAzZ2kvZm50c2pEbHo1Qm5yRWFBdUc5cGxRa0RlYjJYbmwyT0k4eTg5d2prcGgxZDN3a2hZZVpsOVhGMHU4UmNkYVMrUHJRekkyUmt5Zjg2ZSswZDZLK1d0RXpRZ2ZnL3BHOXA0Tm00akw2RjZwZzZzUW54S3E3MDZBVHp4N2ZRUnNIekRwSzN4MnAwWXBJNTVMeUt3OWF3UzNhSG8rOU1yMmRMNkpNL3YzclRpTDJjRkRuQlduMnVxVnczN3BEMEtmNElkdmlqYWt2RmxDdzBYaUJFdEZvZHhFSGF4ZzBSS1Y0TmxUNVBzenJ4aXZYR2UrSC9PV010eEtwVExpWWIwV0o1N2RPOGtOdlBRbE1uRmtsTzJiRFlmQWppZUFKbW45MVN1aU1weXVueVpCanl4cDFoOElvdmVpTWkxbVBPWW93MHFGQjFPb3RNRzIrejZibmg2V0p5cXdhSXR0TnpaMFQreTYzRWovdTIzczlRRnpNdTRHS0RtV3dFelAxZE92Slc3S0RwaGVVNXZMZkpjaEU3THNJdEF6TTF4QWZGVVRRZFVMeXQxSWtrcGs4U25KZ0dxbkJuM0J1TXljeFRNMW5vbFZmN2NWbnNwUnBNTEtEMXFzR204ZUp4RFJPZjVkWSt5QjlKQ29zc3Q4dUVxcVhIaHYzTWdHN291UDJuNDBBeXBHYWdpNzZTRXhVclpoOEtvU2pqRVFEc2VuMTNrd3hKNzNaMG9ob2xXSnIzMEszTlhnalVYMUxZUHM3N2Y3WU9jNXNwZUZ2cko5dHRLYnJQSFhxVmRkYTM3WUNsTEt0NVA0VVZDTzRsdmtQUUpFcHdvOG5FQWh2OHAzN0R4MUxucThtclV0NjN4YlJ5Y2g4dlZzYU52SERFUHYvNFBhd1JvZEZkMjgzTlNYdTFROVh6WVNlb3JpcENCdnp1UG5WOUFOTVlrZUd6Z3JodnNDY29jL3l0ZU1uWFJCcWJYczY5ejVzcUFMUEVodkpXUFhKNUcvMGM3Y1B5alVVS2ZBeVVHR1diZFk4TzZFais4OGp1WTZhR2RWeW41VTRYbW0xZjZMWVhtcHRBNDFtQjdhajhISEExSEo5OWR6YW95S01nR01tbkg1OUEyUlg1WjhvQWF4YVR5Q2ZkbmR3U3pEV2NVOFdvRjFZMDJ2bmVjSFA4YXY3VVVNUUFkRXZuTjVxNVBmcUU4K21GT1JBMkdibmpFNWE1NHphZEhFUXF0cGxscXB6dy91WHBKdGVKV0FRUzJJU2JBV2tScHViM1EzUVZEYkRYNkVBaDRVTi80cGF0RnRtRDhTTnRrNTU2bVR5a0tKMjI1YnhpbmcxNEZkN3JnNk42MGVLbGZOMVhhZUcvU0dLR0o5NERVR3d2b2txcDFiQ1NpNC9Zd0dxRDRMc05UOFVvTGdpWXlQQzN2OG9PQnBocHlaMDJRNlIvZ2dJRCtVb3JKcjMyUE1ZYVpTZjJuQkZDMFBhdEkrRFM0UXBXTHgwcElMOU9JYzdJM3VJVm00RE00UGR4RHJtOWc2UWd0MG02LzJlZGQ1cWJ1aEREOU5vakM4cmpocWFqWlY0dFlhSDhKZWdCb08zRjZDRHlkWEh2c0JmSEoyV2oyUkZlcnlaQ0g3eVBobFdHejhqVEVHd21RR1MwTGRyOFdtRmVHYU5Dc21zN0t0T0szdmprL0xscmJPV0hlMkRTNjBETHpIZkZVYm5JUmNwRUF6VGJ0RGxiZzhlMlpQSDlMTTJ2V29iWmVPZkwyc3hGYThJSjJyR1dBR2FVUXkyTVBJcUJsdm5PbS94N2xqODZoQjU5LzI2WHIwRUswamZ0SHMvcy9QR3g0akVxaUU3cGoxY0FwYVdzR3piMjFOZ2ZkSkVvd1FUSWh5OU9qNVdEV3pvNWNIZUNoSkF2WHluMlhDOGtjc0RUTWJIWUJuNmltU3Z5c3YvWFdpZkc4eC80L1hOcTlJdUxkQ1M0MVIvcVJlaTYvRkZDUTdqL0V2YUFsNFBtVXFEdVUvMTVDd3BiUDFtYlNpTUltdkkyZERBdis2TnQ0dXFzR2R6Y2J1MVJtemlucWZvdE82RXVIalZPeENrQVh0MkZrMWlHZmJRS0llVGsrKzFia1hNRlRwOFdrQWt0dXB2OGJvNXdRZmpxVWtJYjYwL2JvQ0k0WndIZzlid0dieVpLTEFRR0o5N0V1L0t3aGdTbFNidTQwUzJUUnpyNUVzV1pUN2lpR0VIQlpsVzZPUVpqcGVSVUJYTS95RTkxcGlDMnQrSXBZT2pDSVZEaFUrOGlzcXpKZDR5ZXhXNzBXQUc4RzZTMFBvVlBiMHZzWVF3K0NkR1lRb2g3b001c3VsSlZ4aDBEcGx6M3pDY0tkZUZodEU0Mk9zN1FaQkpjbExNOGRUOFdnUVZYbGh2NzRKTlBXUnZrNlpNbW8zREhQakpnSTBMcnlSaDlkREdkcDhwOHRvSk0zbUZBZ2xqRnN3dExHNk1kY3pOMm83bnJQRWo3bHkzczZLaUs5d3cvbmRGVHFVQmNLbTROdE0rZEhRMzZlT0ZFcWMvRm51UExPbUF3emtwYVBQZzJ2QUsxZURyNzRnajJJZm9ZWndkclJVdFErbVFqUjI2dFdiVnBIbC9La25vTXNRSDdQNXhTcTNlVkxnYTNDSFZjck5kWlRhN2lrL2V1bFhVazNDUi9WZ1RxRDZZaFBhZTN5S1N1ZktxL1dxN3F5Z04yUC96WW0rdXNQTklzaGFVWTRvRnBHVW96bUdDY25mUjRQNVBzeFFEZ1dBVGpHN1g1Vm5PMHNWUVVCUGZDTEM2UGgvMmRDRGhKbkM1YWxKbllaOTN5SHVzTDBRR0piRUFLcGFQVnQ2WVNIYW9MWE4rZllyY3lzbjN2V0MzQ3VZRENheC9qTVRHMTA3WUZ6Zlk2b0tMUVdIUERqWktXeEZrbGJQSlhkT2VwVE12V3R0aEEwNSs3RTFHUk5lN0lxRithSTVtTzVnQ0VCWXgyYktyR2RWbmlzcmJ0N0lwZTlRbGpvWjIyQmRoY0oyL3RTUVJhYjZ0dG5YekU2VVVrVTVYKzM3NTVYbVVzcVcxWUFNMnZXR1A3dVNhbThFZDd4SVZkVFVCTlJwMDAyNUdkcytoWGZKamRQZzRsejZGb0hNZTdoQTgxWjlSTVZ1T2pJU25ZVWtlcWwwaUUvbEIvR1VuK0Y0aHNaRlJmbjVXQjdHZzU2TFBiVzZMdDBRMWdkRzBVbHNWekxJQXg1RkwzNFVESUd6MHRQQVptL2lxVVkrY3g3UHM0b1d4QVYyTTRYQkdWc0RsZjVTNU5pL3pURUQ4MGp4cm1Ia1hjbXU4ZC9vdjgvaW9qWEdWdjNFYVlKcjNIOFFobkdLeHZSa1pIT2dHYThuUzc4NkJVb2pYMzJaNDRDcmg4OVhTZlRGc2FDRXhRd29NRFlzVUo1dFhxdlNDR05ISlFyVDdUMmVCbDIrb1hxdTl6M1N3NmVIcC9ONGVSZVdmQURxZVlwc0F1cmRxaWxiOW13NDRGbXpmdG9YYUtybXhhUms2ZWhpZVZNU2lDamhhTEszNzYwWm5CR3NrS3ZjNGU1b3dGNTdQU29BTGU4YTQ3NW9HZFNZK2hoaXIwTlJRaEJoTXZEWFUxM1NBMEVESmo0Y2xFZ0hWc0ZsT2lCNThUWU9GbFVUeDVQK04yUVZQNHB6dXF2TDdxRjNJbmF1U284dXBSLzl3M2hDWml5MlptLzJzUGVRK1p2YVBJa2FJajF6dUhSVDI0WnRTbDdSTm9yVHdkbHM1ZUlYRjg3bXpkdzJ0Q3RCOExoNnE1RzdNci9laGpadlNuZ1oxd2VmVU95SmpHanEyWFYyQXozelh5eWx3WG8wcjhuYUNWTkNTd3Q0TEtGN1N0NUlJMGV0N1ZHTVo0ajY1WWsvS3A4KzdkZVQ0eld4VHZiV2VhKzNUcllmYkZ1UVg1ZXVKRjE5TThBN09pT0hwWFBNY2txbmJDMXdJNVQvWkY1YmhrYkFhWDlsaThTZk9IVTBSS1hNVnRoQXRBUzZMTFhXcEQ3TzN0Q005ZlFNUjYraVA5VDkrNFJGZWNSWjVqMHlHNjBWQkhXYzJCSVBzZEdlTjMvSk9aUUpubnlVbzI0UVBxOGlRaHlsL3RUdjhsLzZKNDVDWmlwY1R6ZGFWS0Rlem56Y3JjekJuTDljTzBiV2hmc01sSFFoQi9maUFHazNnVm5VQ2JwT2cwZ2VKZ3FrdUFaa0FReU5CTUE3MjdveVhqSFdkaEZLRzB2Wnp5SGhQdVFXUjBHRkVDUU1zNHpRQmt3dWdWVTc5cmNzOVZaYkZGNXB3T01vRTFPR0JRZEM4ZFdZNktQYTM0LzRCaFpIRzVmUndRM3QxamJUMlNEa091Szh1djFrZmt3akNNTGxPUE1wdWsyS2cyVkZFSC9YMWEvbXpQRGdZZ01KNWJGS0sxYW13SXdzT21PUTdBTXRyMWFLRGVzSWJkekZlOHZrQ2ZYamNvRSt6NUNOQzhyZXhtZXl1ME12Rms0ODFtT3kzazU4czRTOVBCc3lWc0duRGpKbGZZSHpPbVIxM2t1TTVZbnJRMWtVMHdrZWF4VzlTRG0xdEw0TWU3OGIrR3IxUzJVeExqZDdCQ1AvdkpJK290bmxHM0tIUGxDaEFYU2xsMElaVWJudXFUd1FaVWRWZE5yVEcvZUFVcU9mNENoVCs1dWMwb2xTVzhRazNHY0lRRXhwVHZmaTJmUXR3bU8reUg2ZVR3V1JEa3BSVXNxTzFLTm5XRzNMU2hqa3RMZkZDRktpMk9laTdicU9PeHdELzdwcCs2SjNLMGJXL2M1OXd0Wnd6WllrdldDeDh5ZUpmNVNxcVJMUFNRZFVRbWF0d2VNSTVXN1RkV1ovT1JpVE5LVUtaVGtneE9iNzdudGJtcEVIbzRjYVc1Q25BekFCeGdDNVBRdWxhNXJNZXE0aVg4Uk9DZ2RsNFlYSW4yZWltelRNdlBPcEtZTlJTRTM5bjI4UGxERDcrSlArUUt0Z0NzdCtmbzQ4Vm9XcU84QmUxQ25PbStRaFMwUEZNenh5dHpXNFdjMG1rbmt2cmdCcnJWOXBUS1BBTDBZLzFNUHVYMDYvRHlhbXdVTzVNQnE4SS9XRldKTXhpWXdxREhSUzJSaXhDTjh3U2Z1WUxiR3EyajFmYUY3Y0xVajBDUU9aWHVTT0t6aGFYc2YvUWVmQTBSaUNDQ25XWG5iSWpQcVozUWlZckpMSkFZY1NtTDNEaHJMZm5uZU5FTWt4MnlrajJIaFhpanQxRzBIWW8zajFJMk9Qdk1RMDBsZzRNTktNMzl6YnVvdStFUjNuMWxUU2QrUVNWTUJ1c3NyTnhvQ0RMTE1oVUxlM3VBUmdSaUlqMk12THRBajdJek4zRDI5ZCtJZUNNM1NQT09NOEw1cTdzSC9McTk5OXh6V0MvZjRFMi9zREs4eTJIY1g5SDQvMU1OQTVXRE56c1QzYUNuYlZrMDZFUFJWUFc1WnN0SFdZamhGUjRKRjVuMGhvZVJpZ3pUdU1jZUFRNE5EeVpTVy8xLzJWU0ZSL2ZiUVlxaFNHMlNaUHV3c2VCZmNYUHhUSGxmYWhlckk5SU8rV3RQVzcrZk5BTmxEbDE2RnJyeFhFNmhmNjV6QVlGMkVBTmViWmY2ZWpjcE1SWUkrck5qMk00dFlnaDVSZ2NVSE45OWNLMWxibno4eUJ5eE96VnVzZG9lL0tDakkweXVLZGcrOTVYd2FTbDJkZWFoeVVlUDhlelZJYTNGYm0vY2tMeEwrN0JoRkRrTjNvR0FNeDd6VElad2VrRFZZb1p0d0taeFE1Zmdpek45MHRMc01FUERWZmVjUlVCM2hGRW96OFFVQVhGeVFjdEVOc09hTXNYYkNLVWpNVmNvS3QvZm9sR0xlaVoyL2RhMUxHOGllQ0drb0p2NVYzdUV0ZkV6ZkJWZWlidElxcEZWYXlKdm1JK0ZQb1dYVjJPc0hWVVlxN0NaY1RVL2lMZ3RNQVh2WllDWmFKWXVodEZsWDJGWGFqUEhIN1F5bDg2VHlRZWZzSmdibWd6Z3RnSUQ4S2lpdi9pQkJ3MXRhTkZkSGxpQ2xlNThKUTlDZ3cwTEk2TDNtNVF0dkgzSFNaSGU4bnFmYTlXSS9xZHJsRXoreUVPRXhiR3BNVTZZSE1wNDlYMjcwV3VsQXlBamZQVzArK2U4d2VGSTVpU0l4K3ZWcmU0alFJVmtNdkYwNmZMemlUUFBzQzNEYk93R2dIMzVrT0E0eWZkMUhMZS8vRnN0aVJob09CUlY3S0d6K0tRK1pIK1A2SlBaeXBDOThVUFI5dmNub2tSL3NIamh6V1pXWTJZM0ZBbjF1R3h5aGMydUkxTUhuWTJNci9mT3dWTjhoL0RMMTRqUktRa2xXdHl1Wjc5eXV6Zmpndmxrb0dLeDJNOUlocmVHZjlRVUNRME5VRi9aSmlnR25ucHcwdE0rTzdmZHd2eVU0emR5dHFmdTRjdG9DcGVUVTFoYVRXaWVsRjFsTWtBTXFlZDVYSG1CRlo3WVgvUTdZdU94TmM2UjlJLzhYZmwwbkF5VTI1QmVkMXJtV2lwSkVnMHV2Ri9SVTZQaFcxR01LNTEwQi9VWGJFUEdTL2xleU42eVduR0xDQUtiN2d6cXJkaHlwUTlHVXI0RE9BKzRETE9WNkNYVzgvQjhmSCttVW9OT0JLNlQ5ay9WSVRmSkNudDVaNXEwRTdja0l1bEpIWG1IU1pEeXFiemJ2SW1TOUJuV1JkRE0rVkg2dElwdTRqeTN0K0JLUXdSRFdBU3pUVTZsb2t3S1lWbHhyWjRhRGxmVEZub2lROFU5eGtUbkozY0QvS01GbXFWWmJQRXByLzFrUGxVZUh6eTFIS244VDVxRVVMb2ZQbkY3a3E0UjZwWXpIMnoyYnZMZlRSTHZZWEthWG12OEp3WDdXL1lqb2NrNmZTeGtyemRXbUF5b0RIdXJBb0pBcnQ5Q0dvQmpHYTFVdGUxeDNLdGpKVy9BdHI1NUs4M2FXYythUkE1RjFqL2VpVmMvbFlzbTN1SXNVUUhLQmhBcEphQ0JpMkszL0thWUo1UVRUUy93ZjdOQVhKTVEvMUdYcU1keXZaODRtcU5JRXNoVkJwWjE3dzAxbWdDZ3JnWXNQWTBORlM0WGpzTmF3OExnOGJtMW1sS1gzZ2NTdEZDWUdTcHgzdGtqZFdGZWFQdGVlaE9GVXlya3hnZ2lBd0hwWkdYVmNIVW9rRVNsSmQ0dmhINTY2eS9veGx4bGEwWktOZTdoN1gxa0dCTWc3RC9FYTM1d3ZKdEtzYTFTUzU1b1VWUGZLQjdNSEl4alB4NDRic2xoZ2VGRzJDSHkyam1QanRIMUcyZEpGbmxjS3FYRnk2Z2FzSlhJSGJhZFhIc1NsUU5ycHZwRVBpYUkyTGxKNy93b0lDSUdBeXZCMWx1NlZNUGVCTWsvdWFuRFJFaERPYksvVnEwUFZDYys2TldQbGU3R1pGT1I4R0Q1eC9FbjlaS2RUWUJTU0RPTUVLemsxdWVseEJ2V3JHQ0xnWUN0QzNwVGwycDJkMnJ6b0x6U1JSMlc2cWZmaXpqTUF6NkJqWkgxOTJaWEhwWFE2MGVHUGVJSVI3QjFKeVU5akorem5CRDY1NWFDSGIzcmFVd3hzYlN2VEdPNEswSHFtM1d0ckJpbGNGZ3B2SzhaY29Md09ESnFXNFp3b0Q2V1VPdUtEOE4rT1dZbDg2UVdLbE5xbC9xOVlwbWhUcDNhOUM5M1I3clhucFplNnFhc1AvcnNWcHRMSzUwUWJKVW5RZWFtZ0htLzBiR0c4aCszUzZvVFF3SXVlYVJjSGwrK2hBOWI2TGNkdTJqaDdCUEtKWE9QMElqaTY1SnNXby82aENVc3R1YXo5OStuL1NrdTJDbTdCcEpWVTZoK3p2OXNjTGJDcVVPdTg2U2NHcnRpeERLSDBuL2NucVFSU3hIdythaURGYk9CdVBLZXBzRU9xK09NYWZpU0I0aEJMbkNCc2hvU1g4VkJpMzNwcHZyQ1VYdVpSZjZTM2oyWFpmRHpIeVBZWXNTU2FBUE5pTFNaUkdLaURVaXFlQUNKSzJSQ2J5TzUyQld1ZzJLZExTbzJKOUJpejV0bW5QaWNmR2hsSmt3UkJwUHVDMU1XWGIxanZhMkxTK24yb0dFZnpaR0xNaU4zaHdURUMyU2dzQXFzOXZMSFVnMHJWbnhPdmNsaEpJMjdxQ20rSFZTTE5nS1dDWEROL2hoenpJS3BmTWgyL1V1VlZhdFFSeWRKc3lRbWJoaTdUTG4zdHFqZVpjc1kvaEJYRlpHNmp4SUNxOUs5R0dDeFFLUDh3OVd2R0ZVTyt2K2xoRHl5SUVveGJTZWRmR05kMDJqelB5WUJUeFdvZjVrVklLSDl1Qi85YlIxZEJnR3puZmJ5bm1TS0lsSWVIZTBnTEg1YnlvMkFLaVhPaFNBZFFFSDdyYmc2V20xNUFBK0ZJK2RXbkVEZFB0MVU5QWcxaHhCTGFCUXJLcEdlNDdCRjg3OWpadzdHY1I3TE8zaDBDMVRoV21pcUZsTW1kK0RwdVhRbWFSWGpNSjlqTHZramdESGpvVTNNYmlwU2I5VkM0SkpBWUJMcE82NkhzWVpXN3NjOVhsMWozdWJXRTgxSkd6NUt5emYzK1BxemthbmFZSGNUTzVxS0hnWmx0d2NHTWM3RkJJQ3NucTBQY3ZyOTU4K2UxZFR6V0twZmFoeUlzWlVJVXFoZ3NXQ1lqRGJYVlFHYWxybTJCSFZ6OXJrKzlvRTNUNkozcWJwaHVBQ0luRk5JSjNNY1EvTmJmYjhkQ3ZMVnY0WmFrVmN6d1ExZzhLbFBzc0dhMGp6VHVxSk15ejJYWnRoWUJQalV6VmRvVlpPYVc1VUFXMDN1Z3hxcnc5Yll2djZoR203ZFBHRlFjREhyUjV3bEZEbmlDUG5hT1lxQldLSUNPWkEwT0w5Y0JkL2lPOVkwQVZZemFqYzlxT21YR1ZjVmd5cUVOZ0JIZENka0Y4bU80TGFUaEdWa3NSdkpNLzJ4Nnp2cWRreWNrU0ZnWkg4bXRVZWZwRHZWcU11UnY1VmJtc044VjZNeTRXKzNBWGp4cGZjSlNJYlR3Njc0TVNZdWRRbDY5d1REL0p1TUhMWkhmQm9nQmYvSndoZmh1dS9GNC9jRmRSNUJGT0J3V3ZCNXZQcFNEZU1XYWhTdHlGa1BXay9UNitPc0Z6a3djejY4bHlKKzVXTkpFbHowdjRJUk15aGFmZkhTcEl1YjI5dFY1aUtJSmFDME1yYXVobll6eWUwVTJwYkppYUE3NllqVzJGZHBkcXVyQlRxcXdLL2RENStMYzdaV0lqN0dGS3JFMytBdVpNVGh2K1VQUUp5dTcxZ3JjNzNKQS9wbHU0NkIreTJKb1dIRVpwRC93aUNJS1Y2bHJGVXBEQzUvUWRrODRyNzMvY3BWOUxZMmsxcUxvNmhqemNtMnQ4djhkWGhoUlpIN2NoNFBSZ2FKWGxpbEVZUlFrczNUZ1JmQjMzckYxNG0wcllrUTlTLzVqZlo4SDI1SzR4Ukt0OWc1NlgrNFJpTGVQRm9mRHhMOStrZFRFcG94VjQ4MlV5S2FkMzd6Wjl4MmE3OHkwUWtQWlFsTXFXdjBWc0g5eGwvOFU4NFJOdTNxdmtxM2xmT0g2VFNhY2IvSzM5UzRZK291Wm56bFFZRUxheXFjQlB3THlSejg4OFMydWpXVEUya3VVVHU1a0NGSmczWDRFSWo0NGI2SFF1b01KV0l3YkxacEUrTUFUbVQrenRlRkNUT0I5WUI1ZWFKYWh4am1DWEI1VDZBMnhjbGZ2UE5abkgzdUVtOU5vNHZvbFhBQXJ6dUlzOHdEeDE2Nm80MktGZW5NbC9lU29yaHpBYU1qQWprU1ZKbVFmd2lhdXhXS2JNV3dFVDJiQXl0KzhxcmxJVEtxZGsyQ3hEYTVsdmhBRmYyZHY5alZ5UnAxQU85cmVmKzZHaEtHYkpYa2NndXRsRVMrMWdld010blE5bHNzV1dlNzcvMGlza1I0djJPTVVwUEhDbzRheXNOSS8xdHRwaXFxY3MvdHM2TVN5d3V6REhILzdaeWVlMlVteUg3dDhqMWhScVVVY3M5MmQ3YXRBVE5rS20wY29oamRCaDl4ZWpvVTh6THk1RnZlWlNXeHZ1U3pqQ0dOODRkVDJZQitWUFZBNzcwSnVqeERZeElnR3ZKZkVnVXkzZDEvdjZ4UXpLSmtEOWtXSi9HZjRuU3p2ei96eG5TdHM2ZlpCL1JJYlVCbkZ4MDRYcUZoRE5PTWwyb2hRUDJTTG96TlZyZTQ0RVZ1Ris4ZGxTQmJIaU8ybkNCRnRkTVFNeDVMRU5oYjJhSUx2dmlNbTZ3ZTBaZTU2bXRhUGlPbTQ0VTVPYWpQbytLQ1IydFNrVFhzWHZpKzh1TGJSMllydVlIaG1xSVZiK2dGeWJ0ckFqTHdoTCtpejRLNGtkM3Y1aGxjLzkrbWpaazNFQXFTdElmQjJDdTYxc0dLejFqazFRQXZ6NUhqbDlwQUQwZDl3dUhtN3FMcUllQlQxUzJiZlN4STZyNVlpS3I1azJwQ2VoZHFoSUx4RVd4QjlZcktneG93cC9OODBNWmg2L3dWTUppd2NxY2d0ZDVDL1Vuam1CNVpjVkp0bGVQa0EzRGlLVm5UVElMZ2VCaFlkVE9jVU1DSmVnZHhIVEQvVnU5RnlkNEhFb2JLTVlDZi9aR1FQdmV0aEhCQU5xUUV0UzN1a3hZRXJjM3IxVGtRWUp6bUFzdkN3VlFmK2lvYVdaUGhRWHM2eVVocENtUDA5Y1k3cVkza09GaUp6TTlHeCsxMFNIVEpUUXNYOThNQS9UTDNxaDVtOXVhK25rdGxGL2hNK3VNNThWalBSaitaYzRTNjgrVEZ0RjhiclZuQTJWc3BVM2d1LzJuK2tMeDZ2UktkY1JVcEorMnBOd2dFUDdPdHJUaTNRRXI3U3J5SFpFcGFKRzJlYjNsRmJDVVE2ekIvWTE5MUt3djh2QTQvU1o5ZUhvOExDdGIzRGY4T0htUTJnbEtTOUJSbkU2a2FGVFpmdUw1Q3VLV1NXZDhEMWZlRG1rTWdMMzV1TEx0NEIvS25Bd3hOakRRYWlGMnBkUlRNNFVsekVJcWJGYk5NREFHNFRLSzkrOWQxZG1TY0lWWXVNRnRkczJuL2IxdDNaYUdNL2k2aUJueHdqeG1mNDB3SjdoNDlFWEJSQnA4bmVSNmFhQStqY0djc2hudVpnUUZwSzEvRDZOb0xPT3RwaUl2MW9yWUtUK0phQnpWUTNFa2hoUHQ1cG1DTVJ1TFoweVNMTjN3dThacXpDR1ozV3JXNGpleWFUeXVuREhJc0twbmxMM1dKcnJJeVFzemtpRVlEckVhQzlVNVI1ZDV4Zk96dm9PNG54ckRSbUdpT0YvSEpGM29tN2FJYXdUWExTNDRwemVVT1JCd3I1RlRURHpKeVdZRnVwQ0pqSWo2ckVRMlllR2FSNVIwSzlkT1NrREsrUnBod1cxckEwODhUWUNNL2FzTkplVTgvTE9DWG0wZWZiV3dYUHNhRGc4WTFtWW45RVVYQVY4RkhpY2R5cVFNNXp1aUZtR09IQ29pZkNaQ1NHM2FybmprSCtxUUxjbUh1WGl4U1dtWXNHZi9GZjhxdmZtL081cnRjUU55WGJpZGtPM1FSUGpPOEl2NXZ4QWR6UU5PQWNwbHcwQzd0TWJYd3pKS1N2Sk5RcWpJWGc0YU9XaTBjbzNpYkRoMjByc2c0dEZpTjQ2RlVHTFgrdlIrUW10N2p3VHpLdlc1bUd6SytGaXQxTUtDeG1jNWZSUVpQV0JjMC9jbXJ5UWhmZTJJMWdDR3ZUL1BLU2FiZ2F4ZjREMERrTkNKbS9WT3NOUkMxUlNyUlBCY0dmb0RmcVlsWWg1REQxQWhuWTI0LzBwQUNzVUFiUlpBeEVBVzFXTlh6SXNrMGNyTzVQUDRYN0JHWGdtOFQrWHZmN1lHMDRWakE0Y1pHc2JsY1VkSUJBaE0wWFdidFBaemJRK3llMmtyb3pIZFE2bDVLVFdHSUwrblpNRWR0WkJlWmgvRUFId2hKU0JzUlRCY0g3WURrRlcrbEw5M01JM0tpZFFVQmdhRVF2V0pqNitDU0NvMlV6MGRVVW9KZVhNdk1vSzlDc1dyY0FGMklhaVEyUm83OHNZMTQ2VE1Pa21SS1RUcXU5Yk1SS1d0RE52OFVRaVMxa2pXcHZCcm5UemVnaEJKUTl2NWl4OUJmekJ4ZkpHQ3h5Sy85am5aZTN1RVNZalVhTUFEL05ONlVxcUJLSFg4VE1VUGJKL3pDRFpyOUtZbjlDbGE1RlJGdHY5RFlEV25nSG9kTVQ5ZGN5TXMxbG1FZkdacTNhekM4SnhIdXU0Q0NRYlZqZ0pybDZtTzlxdG9Rd2NsQTh5Uk1YUnhzODdPditCSWFpSjJ3M0pFTEFVRGJRb3FxN0JXNnpIWm5seHBZSWtDOG45QW5iNldOOEtIbkhUOXgyVG4zNjcrc1NLSjFxU3JKSUl5b3o0MFdSQ1g2WGVQaG82Q29wVlZYMExkdlZiZDRwTG5FL3BzZ2l1ajJOMWVENHFDYlU3SkRoaHZVYkRKcFhLU0o5M3gzdENBT09xeHpVRHYrQzREejU0bzMrV3hoZ2I3dE1qUnphbDduUE5DQmlCSXVhNGprb096Q09TRVZCTWxIcGxsdVJSR1ZPK0dGQ2p5NlFDejh0K0dVQ3hKajdpQUt0ZG03SHFyc2EwSXorekVsamNNNys5WXU5WmNyN1dGM09TQmVXeFFwMXJvVzM0YmNlbUw3dlgxb25ZRjFjeVNyVSt4d0FqaE1zNEtJTTZzczhreHo2WlpIYTBFbEQyaHFYY05HNEd0UWQyZUNWZkErUEdVaXp6TFA4WlE1MDZ2dG14NmMrM3FuRVpaWFozYjM2QzVzamVrTWx5WVNFVTZWVDFmNzljU0ZNUG5aQ01FNk1zWmd4YWNoTEZpckZuWFZIMEsrYmtNcy91NzU4bWJPSjZwZTJvWTBIQ2RLbEphbXZUcTJjWHgrUndLTXorZFIvbFlQMjNhRUkxbi9iZWpJM20vekd4eTN4SzJ1RVdWMCtmc3oyWDJYaWlmTDNWWkJMSmk1STNLVkRrT0I5ZGE3b0M4Q1M3QnZyYzlSbVlXUWc3bDZ4VHp6WXVvK2QxTkhlNXNMdUVWSTh6V29ONDh5U0JDSFdaTi8zelFkdUdxWW9EVEN3Rit1bE9GK3MzMW8wbU4zL0ZBVkU1a3dvOTc4M2tMNW5ZT0hqWWFVd1VGZ3BqdEhxdGRXa1hNck9DTktkS1dERnp6djV2ZVd2NkEvYXBuUER5WUhMOVZTZjlEYVVRejNCaUs3elVVUWcwOVRJVWdLQ1RVNTAxVkMwbjlicFJmbS91ZlhMYTc1T2F4L0lGUWRIalV0WEFvUXAzaFJOcHBGOHFsc1JNWEc4a3A4QWNOUk5WMGNsb3lsTi9MRWhLc1JtNGs5TG9xcDRlYnE2WnFQT0NpNkNRZEdKTHJsZmhFVjNTc1FCdE9Cdk5FZ1pWTGtyT29XS0prcUVndDFMOFNDaDJ5STlqTFNxM1JSTUNqbzhsVTJxdGovcUpqenJpQWI5VGRIa2NoMTBPV1dIVy8xYWdreHVRV0dNcldHYURqcURvYjd3bGdFMlo1c2tlK3VTeHQ1NDRyUlIvcEVjT2tRWHNLaklSN1U1Z3kxT1FteVZGNGlxelhnczBSNUhXK1RPTGRyVTlrREFGdFR6MDBGYVlMWHhNakV5dW9IcE90T2d4elYza25NQnhoaGpFeVdKRy9DOTJia3VscFZJd0FjODBxRUt0OEkwa2ZvZUVlMEdOcHJtREUwRGtGTWI1cDE3Y0tQcmNmUE9qRW4zMTZnMzZ2Zy9WK0RpMWNlWEZXcTJubFpwQ1NvVUNDaElqNHFuSWo0Zlo1elJuS1BGUHN0K3VaUTJDQmI3cEJ3MHNHR0FVT2w0YkxLWjJuVUhSbHk4SktsVzlvZkRDM2pyMkZjaHNlQWdRTDkveVJxSEVyMHR4OGkwR2hQZXU1UXdGbjlEV25wbU1uZGliS3RxS3hVdkprWEdRVW9sd3hra0JyNUNPVzlROWx1UGx2c2hrWFdKSGRKcnk1R3Z6VUQ2TXU1dk92d1NDOENDODdpSTlZK1hQNHVvSWtJWWdvYXA1WXhQRm1xS1dSUFN1N05vRk8vV2Y0Q2lYM0RjUXNjTDJYVXZWQmZjNUJFS2ozSG14K2VOUVloTGNpK05wSUJIMU9nSXhuaGthdlRYWWlQNkwrOGh4Zkt0Zi9LWFZqM3lobWtYYVpkc3ptZDh4bzBqSUE0RWtRN3pycUhLY0VyRjRMQ0t4S0Y0YXBFZjVYanJ0S0prcU1ZWUlSRGdldWRkZURjL0ErSzFtQ3RpSy9zdjQ4VVpYWGdlVEVaYmJrS3k4UkFtcUowZTZheDRsb2J0c3BqYVJqYkpmQ1RVZ0xVbi9WNkxhdDBKUHdzR3lsWDJrcmxEMUxZbERLREkybnROQUZxL25kNzZyb3N3TVoycHVvME16RmlETEZ3aHhIc2F5UXRGckpkZjhkWDZXemI0V20yZHFyVDFaMG1rOXJiT1lGb01IY3F2SExuYWVUckMwNktaWURzQlNrcEhNeFdVS2JxOUY4OVNpT2NwaE9YWFQ3bUtTSkJUdXl5ZVp0ekJTRU5nbk45SURnYWZXQ2E1QkREL0FaUVdSVUlXRUVwZElsUjBBTzNhbUZvQnF6RkZtNU1FOE5IZTdSSXZldEg2S1ZBWlZTcXdOYnplaTlMSkU1eFJkaE0vRVBXN3pTVDMzeTExV3VSN01xTXJNNTh5eEUxOWhqQ2syUmlueXpPNzgrR0FLWGhtV0FBVDl0djU1aWNhUDRBYlVJTHlGQVJuQWppNjViVnNqdkkyb3RVTzBOcVRNeG8zbUtXczNXdGFTR2daK0JGR2pKMDlmMFlZOG04Y2Z5TFZSOExrQnRpeEF5L3FXQUdSS3lBeFREU3JDV0ZTY0ZvUUUwNDd3RXdGVndiblprTFdDdnc5ZkNTQ1B5Z2tYU3I1blVZYVBDaDl6cHkvZllGR2dNWVFZNHNTS3JOVGQzU1BSQmZmaW1kV2dnejlyeDBmRitNRTVBMTJmK3VOSE81SWRVUDNrOFZrWGNjczcxbGpqVHdQS2lnQzA3QWxJT3hOb3VGakZiTWd4VU8yTmNiYkxiMlMvQ2ZGemZDeHBTenZvY0J2OFdJVHllWG9WZGlpcEtnRVZkcTZKelVDZVhqRHlqcDkxWjVpVVhRaC9wY2ZQQWJVQkl4SGlOek9oaW5HQ21UajY5ZDNnRmFEZXVmTHpuY1dEQXF5bHd2TkV4Y0hqdFVuUlo0T0tyaVRVSnh0bzlLNWF3ZTlWSmQwYU1hamgrUktRS1liZkQvVmtoVHg5ell3K2RTN0VXdk0vMW5hV0g4eVZHUTlGZlZvWTN6TWxJSkFOeEFwZjVYZXJMRHp4TDNhSU13NE15WlpXWEtzL2NpaTFBUnVsS2hIVFMvZE15MURPMVhGcWVqcU11U0k2QzFvZ0ozOEFGTEwrd2JkRzgvd0Y3Ry83cHFYREhoZDVkV21tSmQxeFNKVVYrSGV3Ni9XRklCK3JPSHFpdG0zZjJwWDVWc0FlUUUvMWRTLzhoK0JEOTBYRWVQR1dDUnVSYXU2UUp1YWZiYk1WQkN6Y1BWdkExT3YwL0hLZXFUMitobUNEWTBtT2YwR1ZNMmh4bnNNZU9kZEx4eDl4V01oRFRGUDZoakNDbDVxbEVGUndieVpxRVp6dktGS0xzKzdybURod1BIbjYwRkxPVjBrVHczZXVNUGdTN0pjakxMcFRNVENIbllBMW5FVkFuZThSY0ZpQ1FzSGxVVjZBdlBxQ21RMzJjNnVsWGh6R3FleVk3dEdtV0ZCYWdkUjFhTlA3aGtBWWp0UDMxeXRwd3gxZVozOXp2YVNpeWRRSEJWdWxjY2tuN1ZXTXAvSFRjWWRReHBKaUNZRFZxbXhOYkR0b05RL04wWXBVdVpjRSszL042eElXM20vRGRock4zSUFYZkxZUVg1T2VrQlpjc2VmUENNSWtNWWNKalZxU0VlR3ZHRUVWMi9HWDdFMitCa2c1ZE1iQ3luRDdXaVFHSE9LUVJHZm1MOTZyanlBYWxMMFpVbDBVbUVWU1QxanNWYzFrd1VseS9nUSsyMkFIeENtU1BCOXFqNkJjZzFIWTY0bC9kaFVMQ1krVlRoaGt0bVFINkpQY1RJeUtiRHp6TFUybU9PS2Y4U3ZwZHJIMGRQZmwvdk5ITVpjMmFqZVNwVkhXWk16SWljVkR6Q2I2eHlQV25USFFxNTd2T3Z4RUMrM3ZzTmJjYVNUS1ZNMzhONFVNSm50TmNtdkRUSWVMZTZQSWNGNGE4NmQwYktrM3Q1d0xwMXRmWHM3SjBDU0VkNEdDbEtDSVorRis1aVg1RG9iT2hYcWJTN3JyYmdLSTF6d3JPVmZqSGw2dEhHNkNMQWNmN2ljUHVrMDRTWTFtUXJvNnJoQ1RIVW1jV0YxUzdDWTBUNHp0b2ZHVFRQVVFPUVJPODRsVkRlb2ovNEhKTXY4U1NaVFIxYVVMZTZwM2sxSGd6UmExSndwWVl6RUk4dVc2N1lnYitsZ3Y5bHRqWFlXcjRWRUNUTTlNZXg5eFJWT3AvNkxHU3luR1BFcFFqbFVrNWh4Nk5icjB0SmRQY2VmWkhheFRDUG05Y0NIZFVldiswYllDRHQrdzdnVVlxZmRVV3AvbERFRk1WRU1JbWRLRlIxN054by9Bak5jcTdGNzJhSTRGRWEwWllDbDJrWEtBS2xvaGdIQzRVbWV5Rlc5bFZqTUVWY3RjK2pyNFByeU9WZkIyWmdmQ3hIQXo2QlpueUVHV1YrUU51Mk9nYUlYTUdyV2JmQmlYcWhqLzBUMyt3THRqeGxMd3FmMXhsa1BLZDFTVUdpMXFGQ0FXZGpCZWVTSDB4WXNZaGwzTDE2WSszd2llVWMyUGEzNUVHZXM1YksyNUxUMDVnL1NKUHIwNnFkU0k2ek5FWU9XSGp4L0J0UkxUZ1NGVHN4QzloSlpDeDBWVzAwU2h4eittbDllUXZTMzRNZE84YkpLWmlzbGFKakM0KzFpWmFqbVhRVlU1QTBSeTF3bytXbldrZ0dsNHRwSmZOSGdwdzFsaTlwR1lSckorOWNDK1ZrYWhCQXU1UStiY0dHRlQvS3BrV3dsVFVMZy9naG5VQ09ISVgyaFdvZnpMTkdFZHZqY1F2MnprZ1ptUldlc1oyak4xYjVrcDFCN1c1MlM4bDZHY2dOckNxUUdHOFJlQXBxVlIxN2pjTTU1U1hTYVk4TjRiUnpFZSttSG5TNGtxWHdCdXJ0RlpyYXBnUUNzajZxSTExZTlqbUJTZkpmMzAxek91VFhqM0NyMDlTYjFZZ1A5ODNPNzh1NHhVSXhnMmNTdFJZWlRzN2VvYTlUVXJGVkhwQWZBL25BNC95NGJLQ2RyTlhLMXhKZFBOMXVqVE1TQVBmVCtTQW9PTkIxNGtFMGp5cjNPQlpESWdTMFNtRHpuR2k2cW01Y01CVnRab3RPYm5RNWtmalJ4dkh5V1lLbUQ1MzZYQVNWUGRtTzd5a0c4YkI5amRnV0RSTVZwaTRob1NJUUtLTVkzajlJbmQxc3ZDTHNITmZwM08wTW5JeHF1RXlWa3Q0UTNremtZWERyUWtTdE5kNEgwYTNOYXRHUGdheUx5NXVrM3AvYVhnWkRnaVUwaFRiUnd5OFBBR1EreGR5d0ZRc0tTYURvMythS1d0MkhhSkFEbm9XWnRIdkZFdnB5T2o0QmFkUXZUVkhnMkdESjlSMTlmVzdJZW9scHpCQlgyaEJ4RzY5a0w5dXF3R1FMSFV2M2E4WUVNVkptdFVOS1YydUJ5eGI4a0FSMG8zVVVlc1BtZUU0aEsxM1RqeHNvOUdremVtelo2VkVOWHhDTlZoazBIOUlCaXp6elJYNm9vOHZTOGc1SW9odzJmUkIxKzFHUzUrdmUwOUhIZjF5QXM3bFpJSkpKVXdmRG5lZzFvZWVWaGQzWndzMUlqa3N4c1dVTk51dmpyOHFHNXllT054UG55QnJJQXFWZGloNnlwWVd2UTljZzVPZjVxVmYzWUhWRjhxa3Y1c09JNGVmbnlGVGRXY0FlM1ZzdVMxM2xxNE5qSjBxanNnUmMrVGQxT3BnZFdSK095NUpLMC8xRUt4QnJweUxqQnlrZzg0NVI0WU1PcER0SzJ0WXlXNTloTmlzazNoQ2ZQS0E3MjRuakhaelMxWlUxYXhxK0JWdzVtdmhiYVB5ZlZtMmpTMkduTWo2SEQveFQ4dkFqUmRWMDRydTUyVlVmRFdRRFVmbXlNM1Mzd21BTHVDNVpIT0NkZW1vODU5VUFBNnQzUzlWRy9Fa3RhbXZPK3BaTUNCRU5WUjh0eDVxWWJCbkVVaUxDWmZkZHlGMXFNaE1VekFlZFk2ZVNKanVTRm56ZldHNUdpU2hQOUpuaGpOc0pTR1BiM1pQZlpBYkJFUks4YTc4TUxESXFiR0tyVDBiWDN1TW1uSW16ZWlKa2NNNVo2NXUvNGVHZTEzcVVmbjFNM1JSd2dGNWRoaks1SHZxZGxEelZIaEdpdXVkeTNpS0w1YUpoN2MvdmplSWJ2SFZ3Qmpyd2F0dGxvMGF4ZUowb1lNcUFKL1lzYlV4R3dBUk85aVpDUC9MMWM5eWJZdUpiOU5sSEVyczNWcVZPY2dKdmVqckJPbmRTbXVFcG83V3lMTVNNVG5nNEphbHlyU2pQRVh1bURFTyttb2VmWlZ1eXMwbEZBQmllOC96RWJMRGh3UlQzdG5CYU5mbFUwYzQ2WDQza3REbUxxZzZkcGNTTG9iTGIwME53czNFWHR1K2p0U095d2tXVk9WUERXTkgyd20vVXVwSm1JUFFMSktoQ1pmL0pUbWtlOVUzNlIyeVp4SFowU29iMHZNZ0NSV2UvbjNiVFZPNENmQUVZN05Ba3Fzemd0RnVqTS9vT0Jab1k1N2RUZFBHRmkwSXZWcE9PZFhQQWd2ODNORnFsU25XYS8zUkxUOFBVR2I4b1dvWkJGdXVmd0pBTE5RdXZPVHdlMHVUU2IzYmJwNFFQeERycGFGVzNUbFRoajBtekNWN0tJWG1oVy9JYkdZOGgxaENoRm0xeEo1U1BIcVZ0U3VLcmRXOVUzTVE2MVh1Y1ovR3Uzc2cvNEQ5WnZJUHBYZnJCbzVjZWxhcEs0NUtteXNwb2htS3M0WEI5YzE2TFgzaUp0RG00c1ppY2Urc2hGL3l5WUdaVm5teW4yTDlBSno5blVLQW9BMnZJZ1dSSXh1bTUwQ0pGUnVzS0tVajloSkw0V05YV3U3VVJUSEVyR0JYTmhRK2c1c0x0YUk0TDVKM0dhYmtHU21RdEZSdExnQTc2YTR5eU1hamZUV20xako5S3FYeWpWcEs2eWF2N2p0Z29tVlhpdTZPUm1TMVNFWXBVNmJnZGtiOHBlczhPcDhWaFJaekxMTjd2aEt6ZnFuUllVUWZOVFBKVDMzTTdOc1pZUFZZMUR2RU9aK0o1TU1CemFhbHZ1SGNma2cwWStHaFNnWWh6d0xUQUpqd043K2N6aElZb3VyaUloUEJUMW0rbU1nSGdVNHBoWUVDcHhrT0NueE1TLzIrSHpreGY0MFNuQ3RjT2pOaVFpUDR1TktEMEM5SW9DM0dCRUtkWFlBQmZxdThLVkFqWDIxZEVJblBIYXNhWjFrZnhacndTMWg2TnRhVnV0czB3Mmphcy9CVHFtQjZQN0x2eXZ6c09LWFRydlhEdVJIdzZvSDk3K1hPRG9NV0RpVk0zM3BXRkxrZ1k4dXpaL3FoSXc3ZGFSMXJiSHREcTdvSnZ2OU0waEh3WGtuRWVPM1crQmEyUS95SVJIa2wvdFJQTTJjNm9UUmpwN1RaT3RiU3JJTXBqQjdFNVpOL1JzRktJMVBha2VZWmpqcTZ3c3lWQWJLZXVUQ2t6T0RIRS9wYVIvNzlmWkZhMDN2aDdMUzlVMi95Nkk1cGl0eW55ai9MRnVIZjZrdnZPTnpwWUd4UEs1QklsRUtoejVQZ2w0NEJQMElxeDV4TmZKdkM1aTYyZ2FNWk50aVo4emVJRWx2SVFpZ0hoRWtWOWVCbzVjU3dUdldKd25IQ0Z3Uitrbi9meWdaK1U4QWprSGZiQm1CbTJIZ3U0VTJaYWFZQzZ2YTFiQXAxcHE3SllJUURYS1lwQ0U2d2JYTE9pajVqdWVOVG9WUE5ESUJsMXY1RmNPanJOalpkemIyMGZuN0FEVFZ3VE9uRzI2UDlJRjVmWUJidFM5TllBZ3lSdUd0emhySjF0SWhocTVYamlWU25CTnY3eDVxSHh4c043U0JsMklIZ3RFa1BxMWJDY3dzN0IxUktCLzEreVVzY1lRMHc1M2JoUW1ZSk5DaTBTeXFjdHo2SmZIZ3hqS3FudENuZWVJNXp6ZDhZZmJLUVFZY2NoOHNTWWNtVTB4SHl2RTF6d3QrMGJtQVBmYjE2b2x2RiswQy94UmpzWjZHaFZRU0JMNEsvdk9hOWE0MWZSS2x3eHZqYkxxS2hUSXpxN3ZwaWNDcUdxSmxhK1lrQnlmUG9vaW1tMjRYR2NOeW9rSzlsMDN1dUJjZzFoclZzTUJZK0RxYXBTaUVhRFR2M3paWFhoZ2I3RDVUUzZFbXViRURabVJ6MEgzKzA3RnM2UmZ5QXd5RHVSVmlzNGFUU0dXWEgzR0QyMjMrQWZWbW1EMCs2RUxHdXMvekpZdTdhNnpCWlN4SUhLSVFUdk53SzlqTXpPRjgweERML3hIVUhnOVY1YUQ1NnJGVDlWSUhGY0FqNjhSZ1R4cTFlc2FTMERIcUppbFNrbnBwRlIycmoxSnM3UXVjQzVzNzErNko4NVBlUUxFdFFGRXg2MlJraWs3NWFpYWZkVG9HTkF1L1o5bnFPaWd0NHowMFh1S0V1bGwwMUU0VUlBWWtoZm5BNmE4RmsxZGxocmNvL2grckl2VFh3OUN3cm1Yc1RqRHRDeGFGVzI2TjR2L1pQK0k4YkNENjdWQ092VGNmMjBvOGtMU3hsOFNNVDcxUFVGTHR4SWNtSitsQUxBRE5mSjFMa0hMR1ZlbldCY1ExcExmRWpwZUFPSjVXekh5WEZydGhpRFdmcnEvUldOb3NWWHVjY1E1TmJIRUc3WkFnRGs2dE5oS0NZcHo5L2hDTG9ScmVKRFNNN09wbU1jTDhhNC9MR2FUaENITnlPSmFDSk9NbFdOUGFGTzhDb2wrMDJvSW5wdUFmZENRWFlQS0tWREZFVU53eVM0VHAySWtoQzVHaVFtcWdMUUYvb3V0Y01xbmxWT2k5WWNNQXdqdlpiRklDNVpnTktkOWxiRkhlNE1lVXgrRzg2WkpqczNOUDRsNlRYZE8wUVFsakFRamNZTnZRN3djMU5LTVE0SS9XNlpEdGNaQjZ0ZSsrRUVaZTFucG1nd010azNhOGF0alUzdmR5am96N00vSkhYbDlrdlQ4SUxyYndhSVkySjV4SXZDb3VnTGl2ZzZjSXA4bzVUTWI0Q2tNdmpxSThDR0UvVlZYM2xQbWk4MkptQlRhc2FOVFl3UE5tNVdMOTZHT3dIendqZ3dBOUs5ZFhSOGhmN01zbDVUUWxBdmtmSlFrcnZVbjhVZzlUa3RGOUl0aW5UaTJsb3htdW1TemV5LzFFOVEzK1VyWHd5OHIzQTFHRC9pVkRBVS9Jck1iZGRYNTN2c04xaElQVWRiN3FEVkZHSGtNUkd3b25Ba1pocGxnOGZNUHF2b0EwTXYrQWxLcU1POVJidnBFeWpzV2hqNnh6NTZmWDlnbDhGN0ZMM0VRU3pBcmhaRDdDM25EcEFldktUUTBQR3IwQkFNS2l0cys0UUQwdVI3ZlRmV1hHSGY4NkFENldZSGEwUUtQMGM0M1NqdnhzVXRGUTdxQUJvbjF6QTdFQlBaS2ROeFd6UkdUYmFWQ1BqeXhsNXJISVc4bG9qNWo2NFZxUzE4dEp2emhBMDhJSDZ0UENKTlJBTlpaV1BYOEE0RFRueFBDb29tay9uRWJ6aExKWWRQb2prQmhrN1JNNXBOVzdLSUdhdERodzRzRUpxYy9DNGE0QmQ2YTRzcGZ1NWVtajBOUE4rNlBKTTFydllIT2R6WFpubjcyQTNTcjRGbjVhN21xdDZOQW1uSEpEcDMvY0k4cHl1YkJXZExNV2ZYSHFvRkZoSnBlTjJkdlBXYnd1ejVIU0UzMWNHOEVTRjljVzgxRVdTMU1xMlFSTkRBdEpIV1hRNFdtSWJldDBYU3FNTjdYY1RUSmZzNnVJenpvOXFGRWY5TlpZK1MwdHhjVXdMQUthZFpMMktONE9UYjJiT3AwZE1EOExPQVphU1FGZ1BlOUdyb2kwZllUSEdOVndrSXZqUlRWZG5hTkdSeWY3K3hRQ3g2VnRGMGx5Z0g3SnNXdGY2YWtocFRYbFVZb1l6d2Z3STVSRDhjV1RkUjd2V001WWVrVmZEdktCRXZqOVhYcmVhT2hNalE1dXZDZVc1Y3VzMmNNOUFGZTRkaEZqc0dodFZiSTAyYnZuYkh6V1JOcDcybjNKMjM5elNYcnU0cWxOTDVjVndZSDZ6K0hueTAwUlRVblc3Y2tDZjZzUEl1cjB4SXZpQWI3dWQ5ZElKOGRtTEVrdmRMaTdqSlA3TEZaNXJBcXFpNUZrNW5nZERqMW1pTVpHWG8vWWdZdEphKytiZElzNjZsYUNCQlFJY3d2MTV2Nzlna3RUN1lmK1NoSDZveWFocEVGZDM0cVpPVy9sYmdmKzZ6Sm8xY3lOdFRQOTNhUkdhamxGUzhodzRDanc5VnV4UldnbytKT2F0TERIanlmSlhlZjVsMXNzaU8yUWp0UDhzL0xFNWZuTm1TcHJxWXlqdDFzQUNiQWk0NE9PZDllanV1bGdJY2lPcGFERjZDdURsSDFsaUJFbXlOUVlVZm9Wb0t1c0RaZGw0Y2lBYlBtcytSdnd1TmZxZHYyNjQ3ZHphc3RyRVdHMjZWMHloY1FQbXJXM0g1QmRJU3NlRjh5YUJEQi9Fc0tTR0RCcDM4SHhpYWpSOHJOUEZNYy9pbUpBdmRCRjJBZEJmenowK05sZUlZaElPN3VqckpwT2w5MXFnTitSNjM5enpUTDJ2SzJ6K2RSV1ZGTFVaTWVvWVJZYkE4YUUzYUtkV3JodWxsNS9xUHRyKzNGdm4zK1FEYzRoVDZWbkNwSHBzaUwrdDA5QXUyeFBzbWEydklDazlRTis3c3hGTHMrS2ZmUWdWTEdHRG1RcDA1UVJLSllKNXkraVBPUVZENG1tZkVSNWtwZE1UbS9tNEgydFBrajRZUDJyZGVvV3FZZ2gxZHcrNFQ0U2t5YUdISTNrWFM5M3dlc1QrWFppbFJqQVBTYlo0cTNFNmVXUVJ4U0dabi9TYlFwai9wVmJMc28zbGZmVTFwSmwxYUFTZEZudnlLdS94cGZDYUQwWHVDaHRSVVpzb2ppN3hFV0JTZ1FQR2N3U3pLdTRidHM0LzVhYmhyY3p1YWJSRld3V0VJVjM5b0lqVkNhYUgvMTUzN2kySi8xallDMHg5c1NGWlRDVVMxYW01V29WRmZmaklvSDFGSk5Lc3RMK3F2OGRFdDNXVDhubzh3VFBJWFVlVCt3elRXZXQwSjB1akNLSVgybTEyc2FXdHM5MmtlUkF5TGxDVFpKcXczTmZlWlp4QlpjM3lMQ252OHhvZ3JkWWN6dWRkRXNad1loS1J0ZE0vcGtremljUzVaeGF5T3VIakYvcGhLeVA4dkxUdGsrYk45LzFNNm50L2wrdTR1aGlvV3NGbGZWa0xpblBkZm54NFB3a1FWWnBUVjVNL2JqMVhQdFczckJVamRIOUd3dDlya0w3SE1vUWowU0Y4YUNsVTU4dG11TUFtc05BRTZRcTViS3gyQk4vMjhob3ZaemJXL2lNYTQzenRtakFuVVg0bm5OaFIxU3RDeWN0OFRwZ29INzNFZHQ1dlZDVnhnb1VXenF0Sk1USkFPZEF3YzU5N3hJTWYxR3FLNmprMTFtajhXWFY5TW5IUWIya1J0dUk5eTd0dUNLZEZTcmp6SkttUFJBNnZBeDFJU2RwSGNDU0RldjF6SXRVOHBNcXFodVQ5b3J5ME9PbnUxU0RZUDhsVWlQNnBQU1JMcHp4S1ZROVB2NEJZbnB5ZHVOTHZXRkVXbkdFVVpPNEg4RzFuQUpUT3djRVJObC9TeFY3R0kxWGkxVU5Tc0hlaExPV2RER3dCK1lEbk9xQXFJY1FtK2pITFRWbGw1b1ZZbkxTU29NWktvTUJxbmxibHp0QmN4YURMVlMxczhCbStLcHhrcllLMlhqM05xTmpibXVXRG5YWXY4T0FCYktNVTRBWG5qV3kyeEd4TEVnOXNxU1dtY1JRM0ZTTndFeitEZVNtOEE5cjA5aE8rdnNJeWFCRjliUWJHRDBKWTZSRkJFMS95WjI2OCtJNW42ZGxRQ2F2eHR0ejBsaCt1ZUFlazFaWTlsK0xGVVoxYlU0ODRhVWdaamFrNndtcHl5Nm5zRy9yNWt0d3JCaDk3eW81WnFXWVZjRUIreUR4SHoxd3c2cW9lbFRXbU8wdmxDZVB2N2V1Q2RHZE9uVHZPczJjQ0xubyszTWNaZEtGU1lleHJGc0l3Q05Rd3VTVkZaQWpiRlRxMURlaXJFZHJlSFM1cGZRY096c0sweUhmQjlIRVZCdXErb1Erd1ZsdjZDYzd1bG43cTZDck5lRnNiLzlkNkF0TFpZb1dqeFVXZE1QVUtyd0t0SW14cVVGWkNyaHcxSkticUZaeExmMnI4aHZubnpzZU9HR1dKdTE1eW1LMTEvT3NWRXNaTWExaGsyTHdzV2FtZXhvWUdPa3VIbU02RDlvS3hCd3BCRGQ5d05XY0VETEJneU5LbmdFb0FrSEM0Rm5CY0xnQkxKQVM2QUtqVUlKYmxha3Z3Tlp6ZUl6MUNiTW9EcVBicHk1U3QvL0IvMHpYOFNLZmlac21TemQveTNoZzRVOGlQNlJYVmVGdm1vUS9PS2g1OVNVRnR0aVVOSWllanBNNjA5NnlsRFlQbXlnVDdkaEgxbTlpLzdTWHZSUHdqZ3FoNE43QVBWc2RKLys2YStmQjRYa1ZSK3Q5V0V3N1J2VkxkRW5mRlIxZERZSHJDdHlRYWlhMGxjR0xHVGEvejlxTGdTVjY3QVZJTVdJTC9KTm9rRGc5Wkg0WS9oV3RQeTFUTURRbkN5TXcvbTY0cytYQnl2SDAxZktUdk1aczdiMUNKcUE2djA3cThiUFh3UDR0cUIrRmhxU29yYy9TcEpjRUp6bFloQWtUbmdkU01scDB1aHBZVnJ2MFc1LzA4emcrYWhKWTkwOGlFMGdaVWNVT28wWGpKcEg3N3hhSmJzdEV6dFZlQk1oN0ozU1ZtK3hUcFUxQWE3YUQ3YnVabGpMQ3V1T2w2SWpyVW5vRlprbXBXbTRWWWRyT1B4Nk1BVGRxZEpQNzZMNG42NnhSZG1XSWNMR0N1b2ptZWs5cXBoMGYrbHJlRDJxTjluYXgyenpGTDF6S29wR1p1dTMyZGkzZ3hsYzNaUmd3aGJMZkxoWS9qREh1a2V1RExITUR4NWVUYlVkeXd1bXQ0Rm9raE4rOGFwVTJSRGk3d1YvMEFkejRKNjluMmRtdUs0Y3owZjJNSVN3T1orN2IwN00vQ2taL1ZWa2Z4amFvRUl1Q3hDT3V5SXJFbEV1YWxuUkw3OFRLZys2Z3kyOEJ3QTZMUDZPSGRyMVdZRzEyK2RWWWtFU0JHdEdoQjVoNFl2bm5nWENycUdnU0FYM2pvNXZwUFdONGl0WlQ3aFp2NGRSQ1BVdkkxNmtPMXVhNnFCb1VGWFBIMzQrRlk3Uk52R2NMSFNPSWtMWkh6UXZCd0JLNG40cnkzR1pNWWFCVlRtNExLVi81dzJzbFI5bDQxNzNCbHBtK0xEbkFON0ZXZWcxWEgyNS94NEt3ajYrTFA4T0ppZEFtMGQrVXdIRWI1czBocGZzcERVaVYwaTBDcU1MaFFLT2RrNnNrSDI1YjdnYlBkME5Ham5DMGliZGRzSXVMN2k3cTdDbFVkVWpFNnNJdlczaStEcXBRTlRZVEVycS9vdkVwbWhsRHFMVjdhUlMrd2dNUzVvc3hrbm0wenljRVRwYkRxVWNqKzVzeERzMTVJbkYxQ2FYTFp1ZXJaNy9hRUMzblJkRHgzenVvWnJNbzIxZTBmOVlMK1FyV3pCUmlKK0U0aURrQWJObzlpdy9oZlFlczhtN1Q2WWxvTWE4em5QQ0toMVI4WTh5NnV3UDFvc1A5aWZwSjZZcWZSMTRtTWtsR0k5RzdUUjU2MEk2djY5R1lGL29NTC95WXcxc285anhBeU9EZzFDZmhEaDZBNmt5OHdJb2FBV3JsSkZzSk5GQUp0ZHRDcjVJbWRVOVNpY1N0VzBXZWVFT2dwaEpCUUhweUFvZVhaQ1F4Q3RySWlXQlU1WTFJRjhyeXpVZy95WWZOdmlPM0YxNkk5dCtVUndybWx4Lys2OGprVjVHanU3cWxJd0tKODdZRzZVK0NpbEs4ajZ5TldidGRpZkplNnF1Z0RMRXVuM3BteHFnbzNaNGdQWGVpS2UwU3FIRy9GWnNQN0NlUGtUemhkZ3NlM1AvUm1zcm8vSnpYMm4yS044ZmdSYzZlSHgwQXU2ZkNOUjBsc0FWWEoyOG4rbXkwVVpPRTNweWptTWN6OXUzeHJJVHZnQ0p5VnJwRVptMDBhNmxQRFo3bFNna3J1bmUzcFhFdk1SbTdIdEFqK0FHNngzZVlBbllMWUlnSkxHMHROb094RjM4ZXIxYUgySjBERnBMS2hNaTNZamhyQlJGUTdmcFZxZDZ6TThOMVFXNUFxeXhkQUcrR2pZV2ZWeTJudlFwaWh0Y0dzeEV4ck8wNTlQNDlsb0s0WW9IM2lPRi9zS0RlYitEVEtUd0hmdTVGcXEyTDdLZnhpVmJzK043ZVlNOVNVZ29rdnkrZmRQOVR3N3ppSGxFQ0Z2SWpUZE1YTFdXaUM3UlBwNnFlUTJwbmxyREoxdlQ1dVFTWFc2TE9VZHE3bm1pTDVjUHErdHZ4YUt4bG5MWEY0UTkreUZ2eHB2dG9sVG1qeU5xcFpnRDNTWGFsQTg0REZPQ2h3N20wcE14a3UydHNvSzB4TjdPNU1sVUIzejBxeVRqYXF0KzRKOUgwbWNPVzhqSmdEWGhVaUthcVNpQzRCazNNZ0RLNVNTWVNQVGM4V2cvdDJKOFdHU2UyS1N1K3hKTDBiZGZQR2J1UUo2YWxoVnYxQUZTTHkzb0VnZ0lzL3Y1U0hzVmNub2NacDNFRDUrK00zL0pTd0ZvUk81M0VJYkZqVDc3VFBqb0RyNWlRLzFzQ2o4dUpSdjVmbHFGZUo5ekEvbzE5QlhKTGh4T0kvNmw5aXlZb0J4UzM5Y0tpUGlsVjN6c0xPdkh3VGJEdnVYMmkrODBXbG90RnhXVU9QZjIxMEFXeUxkYnhGUHlBb0hNY1ZIYVRqVHFyUTkxamhtNDBZZW4rSTJ0OWNwY25OZ1RTU0dlN2ZtY0dlS3pNcjlERkZ5RFJSdFVzWTRLUHNpUVdRbU1GaUdQYW45a05USnR0WkpBWnYzNHBuZUVCNVBnbUVCVkVEaklTN01mMzFNWWFkTml3QWZwSTZxZ0pSUlRrc09xWDFvSDNtR1Z3SDhrT2x0TDNXYWJObWRUam43UDNWQVBzQ2pJVUxmdXB4dEhQV2YvMlFBQkFCb0FRQUFCT3dCQUFBOEJDanNDQUFBQUFBRURBYmxBQUFJQUNRSUJBUW9DQUFNQUdsUm9hWE1nYVhNZ2IyWWdSbWx1WjJWeUlDZ3hNQ2s9PC9CREI+CiAgICA8L0JJUj4KICAgIDxCSVI+CiAgICAgICAgPFZlcnNpb24+CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvVmVyc2lvbj4KICAgICAgICA8Q0JFRkZWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I+MTwvTWFqb3I+CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L0NCRUZGVmVyc2lvbj4KICAgICAgICA8QklSSW5mbz4KICAgICAgICAgICAgPEludGVncml0eT5mYWxzZTwvSW50ZWdyaXR5PgogICAgICAgIDwvQklSSW5mbz4KICAgICAgICA8QkRCSW5mbz4KICAgICAgICAgICAgPEZvcm1hdD4KICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24+TW9zaXA8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgIDxUeXBlPjc8L1R5cGU+CiAgICAgICAgICAgIDwvRm9ybWF0PgogICAgICAgICAgICA8Q3JlYXRpb25EYXRlPjIwMjAtMDEtMDdUMDI6Mzg6NTIuNjcxWjwvQ3JlYXRpb25EYXRlPgogICAgICAgICAgICA8VHlwZT5GaW5nZXI8L1R5cGU+CiAgICAgICAgICAgIDxTdWJ0eXBlPlJpZ2h0IEluZGV4RmluZ2VyPC9TdWJ0eXBlPgogICAgICAgICAgICA8TGV2ZWw+UmF3PC9MZXZlbD4KICAgICAgICAgICAgPFB1cnBvc2U+RW5yb2xsPC9QdXJwb3NlPgogICAgICAgICAgICA8UXVhbGl0eT4KICAgICAgICAgICAgICAgIDxBbGdvcml0aG0+CiAgICAgICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5ITUFDPC9Pcmdhbml6YXRpb24+CiAgICAgICAgICAgICAgICAgICAgPFR5cGU+U0hBLTI1NjwvVHlwZT4KICAgICAgICAgICAgICAgIDwvQWxnb3JpdGhtPgogICAgICAgICAgICAgICAgPFNjb3JlPjcyPC9TY29yZT4KICAgICAgICAgICAgPC9RdWFsaXR5PgogICAgICAgIDwvQkRCSW5mbz4KICAgICAgICA8QkRCPlJrbFNBREF5TUFBQUFXN1dBQUVCQVFBQmJzWUg1Z3djRENBcEFVY0FBQUFBQUFFM0FFQUFEd0lBUUFJQVFBSUNBQUVCOUFIMEFmUUI5QWdGSFFFMEFaMEFBVzVWQUFBQURHcFFJQ0FOQ29jS0FBQUFGR1owZVhCcWNESWdBQUFBQUdwd01pQUFBQUJIYW5BeWFBQUFBQlpwYUdSeUFBQUJuUUFBQVRRQUFRY0hBQUFBQUFBUFkyOXNjZ0VBQUFBQUFCRUFBQUFhY21WeklBQUFBQkp5WlhOam1jb0FBWm5LQUFFQUFBQUFBQUJxY0RKai8wLy9VUUFwQUFBQUFBRTBBQUFCblFBQUFBQUFBQUFBQUFBQk5BQUFBWjBBQUFBQUFBQUFBQUFCQndFQi8yUUFJd0FCUTNKbFlYUnZjam9nU21GelVHVnlJRlpsY25OcGIyNGdNUzQ1TURBdU1mOWtBQkFBQVVWdVkwbEVPa2RTUWxRd01mOVNBQXdBQWdBSkFBVUVCQUFCLzF3QUUwQkFTRWhRU0VoUVNFaFFTRWhRU0VoUS81QUFDZ0FBQUFGdFhRQUIvNVBmRzZBVHppTEU4bkJvL1o3cURGOEpubUVua3ZsTVpzK280N3RLK29hdG5OdDdQSjBWQWMranNkSU5jQnRHbjgvT3BFNWtlUkFUMHc0MVF0OExnSUNBOHBCd05EanN1bzhZRGROV2VoVXJpVnlkN3k2QThTRFpLWlBYOUZyalJVbmMxalp6OGlOdDJodUEvQWhBT0Y5NUpHNW9Samtnd0tHM2lTbGtIemVwMHBGRGFjTExCSGEzRjFueWRYRi96cWNUQUhMU05zZjJmYkYwQU1pbUJFMlNYYjk3MHNFblhBbFlTbi8xTGpvVlFKK2U1TU92MC8yZ2NEQmUya3JGdGoyR0Z1UnhkM2JpUXkzK3RyV25pME9tRzcyNXhEZ3ZXSW5tTzZZQTdJdmdwWlk1bkV4L3RUbDR5V2JtU2FCWm5SRHVjektpb1VvVzhkbEFQdnZZczFrTTVKU2ZKN2FsRnhOcW1LUnV3SkhWNERHTWxRQ280RFJYN0JLbklZS09lalBxNkJzY3RWaGd0dHVKdmxvWG5wekxsTFlTaUg0SkxmczI3K2ROdTJlTkF2R0R6TUpBMVJoUFZrNXdQOWlUL2xHK3JkS3EvRzMrTTErUWVuOG8vUklsZUdIWUU5cnlucXdOb1BvSzVXVXB1c0lUcW01MlpLRUZWeVowYjFmenZjNkM1M3VRMXdaeGsvOFhhaWpnT2c4M2I1K2J0c2Yyc2djUzNwZUY3YVZIdXdPS0FKN3dYZ3RDekVQei9EWG5ydFVxdEJwaFFXRTJHMU9KeHM4QmRUcWxtcXByYTdvNkgwbk96Zjc5REZlSU1QajI5OS9QSk1ZMVdNWmNGNWhXY1RpcEhzenpjNXRzczZudW9hZVJHU3pEMjkrcGxuYzdSWFpWZjRPZTNGVjk3c1BxSXArQXpxaWRwTWhsMDc3cFlxMHVvclpQWXpPdHZ4elVSRW03anFGeHkrQy9yZjV2K0FXeXRRd1kvQ29qa05INHZhSEQ0QTNzUXl0T2tSei9YZWFScDFtdWdHQ0RmeWdIZllUWWx1Y0d3RitjYXNmVUVuNktsMnorajUxbE9yN0hIWkJZTHNuVkJ4c0I2c0hxcDdsVVFqMmtlNkZWVzJldFE5cjgya0lBTXdsQllhcXVKMnhETDd2bzBXSkYvUGdTMWNZNUo1TnRBWHVrZGNIazg1V2Q3QndwVnBEYm5naGs1Smx0aTJsVUVjQlZDRzZCVy9WUHY2UjR0Tmh3aEMwNDVXUmc5eUppdjNFdGJNTWhXK1RwTUkranRrNEpDNWpuYms1eU56YUpNY20xR1J0SGoyMUhPUmFKbUtQaDNXdXo2clVUQnhLZC9OS2ZlV2R2TkY2ZElPek1EQlgvZGQxSlAyeVZhRmJuZUs3MFh0MnVoSVR4VitGU2ErWXY0UHI4ZXMzb0tiZDlRTElrck56dEtjYVZVbUxmN01udmNmenZZL0tUeW1ZVXBnZkwvTmtyTnFZcVkzTitOSTNmY1Z4N0E2NnZ3ejNoSjhETHBUODNCU0xzTm45NEcvVEtNY0c0NTZTVXRIazRpN005T2I3eVBzT2ZvRzI1R3hLV1ZMdmJ5UFNjVVNDV1NJa1dMdjI0UWlyaG1hdmwyVEF4bnpSQ3k4MDZFZ2Era2paRzV6RDhnemFaVXZiZHdaN0dlZ0R5eVlld3JZejBleVRZU1N4bm81cVRqTjBua1VWSUpLblYySjdmQXRBdGp3TjVmUWRENUF6THlxdm5pSHdpa2lSU0hsRGhaZjZmeDREOHlJZktrWDBxZ05RbkY5aG5ON01keU1aa1dmcFNCN2FrOTF6eStoNldhOHBucUdBVWdPZEVaOWw4VTd5TE1wSEo4OTZqdXVyNDB0N0VjUFJYZldYNStlckVWYVd4T3kvalBaZ2xDakRPL0Jadk01K3ViWDFZYlV2Q0g4WUJ5ZjBLenY1Q2hMejJJNjA0WWVnS2FJRWtBZXg3aG5XZ2pSdExnZVpOcDFvZzZ0QW5xOEN1T210dUFPTVNUN1dEQWxvdnNPWXZiblhDdzNydEtmQ3ROWUZDdlI1c3IrOVVFM0x2RWVXVjJOY0w3Q01QRDc2ZDd1YmZxTXdnRHNob0VqUlgyL29VSk9kQ2ZHTC9XSCswMkRYUHVmeFdwdkhXdDlUckcvSnFoZmhnUERSNDFTTm5tblc2aThuM1FMTUNHbEZ5VDQwTGdQeDc2WUFNVDd5NTZPRDM5aldOSXZsZkNiM2tzc3JCcng4bFM1dVdyVEJwK1VpVjV0NHdxWlU3ejZhWUJMY0NudlFmb3A2QjdJT3VucFZtQ3FSNmJSNk8zN1lVVXpuWlcvdWhhQ2VKaE55TjNHMURSdHRmUE1oNkxpWWd1TlRwUVpzT3BiL2JDaTlCKzRHLy9tVlpUMEpVdGdGcDlQeS9tcGhYMnZLWUhmd2daUUhRVnZwV2JweHRRWEw2UHA3R285a0NKZ3NFSlhJQmZoQWFWSDVCMGQxWXVvSWFKOWFEQ1RkRW5MNXk5MCs1MFlDaXB1cU1KVTEwV0lKK1ZWUHB1S0VseC9STUtLSkdvWm5JS2FsMGlGWUlGRXljYkg1TUNYd1RXWkNxNjhLb2VoNTBLcWpQdjA5RGRIejNUM1hyZWhKVmJnb242SzBDOUhpbmdtVFd3QVpyV3pwVVVFQUFGWWJKSzVQek1SeXoyUElSd3FkN2R4d3JMYWk2SGhkaVhCc3JRQlAwaGJPUkhMQ2lpT2Y2d3p1MnBRcXBsUGJPamNaa3p2OWhLd0NNWWNuajA3K0J3REI0bm9wRjYxQ2t6UEhvMU9XWkhKT2lKVHA2RFFjSUZlS3NaMUd6ZXJWbmZIaWd6SjF2L2ZaeXg5aG90N2dyMGl3TDgxcFprRVd0a241aGNwRy9icVk3NXBkcGoyZjgyUHhQblNjZDFRbytqUlBYOU4rcHQzV2RDQzNjZTEyT2M2eTdsVXJ3NnVYSVF0VnozVmdkVDI5TzBDbGgydS9Sc2xaVHNTWmh5KzNFell5eFlySm1DQWNxRHM3bVRzamZJcFNtUitCeTE0UEEyM2lJK2dGa1AvQkVtWlo0REdGU1RrUTZYN0ZISnorTjFQN0dBNjVIejBLVUMwaFNYRzRrZTBiQTdXcW5vRENVQUZjMTJJV281NDhnUU56MUV0MU5nbkdNanJIaXM2QW12L1ZiQTllamhSNHVMbkczZmlndDFkU0ExbnJVRjNNVGQ5NnFQUm9hS2w3ODEvT2pmWjZmWjg1anEyc1RoYnJQMEVGQU9iaVlWSTBFSDNHS1BrNG80VWprTzVKaktyelNVUDlsUHpoa2FGZHhOSUZZQjYvSjI5RDZJc0pmS3QyUElVQW5JMW51dW5uZXlGQlhlZnl1NjhDZjdISk8wSFVNbDVIMFFqaEVOTmFhc24zSlNDOTBKS3Bqc2FVTXVVS2FyMmRUOVlwajVyMjlQRmdWQnVXYnBTNVdRd0VkU21lRFVKMFp3M1lyMU1NUEFUcndWRi9KS3h4clk5WGFRWUJiZTlrdlNQMHlwemgrSUdyZ2w2UEp5N2dBZTBJVWVjR1FyRk8rZlY5aDFmNnZiZjMzTEdydUlmTHFJcGlRV3JoQTRNdWI5c2I3UTN1bTdkMXJzTjFZMkRwYUlXNXk2WFRkMTB5MXpQZStIMCtIQktFMWVPeGRzcndUajg0MjB0MVNXcEVhSEVtcnFhTXhyc1Jjb3hMa1NPTktoK1lJSUUrWlFiNlZUUm1FYmg1Yks2dVQ1bjZUUmYyRWd0UVV2VjhqSEpsdllqbmRKR0lWYWZzV2NkcjFva2VvZ2c0aElJZVNzSG4ydU5DSm0vcFBoL2JVUFhRTnNBQXdzYi9WSWQ3eTBFMjNKNzFqSHZXckxKQXRYUDlWS3VwTjExZ2F2VnNROU5IOUxaYXcyVDJ1U2RRMnVKSHJ3QUN2YllMUGZpR2VDTjNFZDZneE1menBsZ2dBdWtjMVlkUGh3ekFmMk1aazhZTSs4N2drWDVMTC9sd2hocnUydXBjWHkyMUNtRm1PN1lSbTdRZlFtUkMxYit0ekFaNzBXcktTOFlHYkVWYWozSWRFckIwUU8zU01SL1QrYmRDbjlqZ3JBZEN6YlJxR2VEUVZ5OUJkejg0RUpaL0wyQjN2Rkl3bm95YU1FU3gxV0ZyallXb3V0NjRsQlpxOW5kazFMVTFuWVMrNi9qUkxJOThVczFsWUtuUzBGamNER2x4UEZXRkpGS3BkSjR5VkowSjRQSVMzMWdDdUF3eDh5RzA2QjFQUVFxbHVxT3BHRzBRZCt3bXZzb1pST3JwTElKSjBaZ1JybkMrVk11WVBZYlNxRHJBQVROOG5hNHJEQTJJRlR5Y3BiZDBhTG5sYk5aYTI0WE5PT24ramVGVE82ZGkzV0liYWhJNzdDNzRONzU5bjdhRStpUTRsQXlkNHc4Wi90OHpQeTNFT0RNTmkva3VNdTRYSHdFZ3JtNzFSdHFjSW9hZi9TQ0VkL2FGQ3NFc09NUHRxMmdOQ2lveTB3RlFkUzJGZUczMDA5WlBiTTEzV3BxTzk0MUEwRExqNlMvbU90RmF6TllXVnd5OXNBNmRjbWpseE84VTZ3R1IyZmRkVENsVDQwT3RlUm1iVlpVaGFQSmxUMEtYRlJVRzNSOUF5MUkrWERSYWpneWN2SnNmNnRvRVhha3FTNEhwYzd0T1AyRnhZNU55K2JqRVpyTTU4aUtXYlNoNmtKbmExbmZpT2ZzZFJwTC9tek5mRXNyVisyUU5NQ2o4Yk1Ia2FXK1J4d2pjSk9HTjBNaWlzWVdLK2Q2S1d4T1M4MWw3VG1QZnc1RlFWT1hBWGRHYjNlRnRNTFZyMEpVcEtsbzN4UFFOdU1RaEs2Y1ZPaE5FRmpWbi9MS0xHNFNER3E1bGFXS1RJVC85bG5HenF4QTd3M3RCMk44Y00yY0laU3NlUlVjYjBjQkp4Z25Ma0MydUxSL2RxQ2hJdzdIdGc1MXpSNFh6Z1NRS3YwVzcrL1A2ZGRJd1Y4eXZrQlBLWkdFbUFPTmVRd210WnVjNW5xbHRtakxGZGpSQVZLS2FqUnZzOUNubXpUQlllU2Q4ZGUwYmtVU1VPMmFpSGtCQXBQVy9SVDA0U1lEa3FmMmtScGRGYXZwK005YU5DWmxhSFFJTDhYWlZPbTlGV1p4ZTkvdGZaYnIrUExybWcxcnZuQ1A4cWJrOVJ3M0MzSnRkYU1tSW4wNnRPOWJSbURuY2NEVHYrczVyOGd2T0NsUU10QzhIcHBIMVBCdTh6WGtVTUFGd2poRkNFaFBib2VHTkNWek5LUHQ0b2ZSUkdURFpjRW1BNFFMOHdUcWZtcFFyMGo1QUFqMnpEZVdDUEM5eTNRa3ArKzhmVVFzeS9SeFBKMm8xU055d1lWY3E4WTExdTYwNDZ3d3dVZlF3WjR4a2dmN0FRaXBKT1h2MDlYK0ZMRFRoVmpMUjlyQ0wxN2pYY2Q0Q2M4WGJGbG5ia3E2Z2ZCY3JVRE9PSmwzUXY4aUNHNVF0c1JBS2pOU3NVREQ1L1kvMEdpNzhjSmhYOUNBSUZTd2xHeHN4bGpmMllRMDlSVzloSWlhcWpuU1BXc1N6ZHZXNzIvc0hZdnQzNEI5bjZBZHBKczEyK0dwL3ZzYmx6aTFFOUdScURxeFV6cHV4ZkoyOEYvZk9uSFNuRGZoTDZtWDF1RW1MeWRxdEFJN2dvWXN2b09QZktvZU1kcXA0LzR0TXVUTkZzYTJNTmJybHl2Wk5nbWVrTnpjWDM5UnVDdWhReFpsOFU2OGVMZGJmNy9vUzJXa3dEZzdiNXlteklBNmNRaFZrSlp4bG5xOHVFVEJlWXZibzZzeWNzVkloc1ZnSVFxVVAyTldwSlg1dWFPcXhsalEyeC9wdHZSYnNQK0QxQUx2QlZSSmhzWS85RXVTbzd4Zm1hVEVSVkEvMlN1RTVvcmdORTRjd0tXeG44M2tYN2ZRQWkrek5Gc2cvM09aNys2MjNTT0wyN2gxRDVWQmNvU2ViMjN5bHNCT1hVSE40UHM4MmttTk90Rmpmd1FoYXlYS1orRUNlME9yT21YR3lUcnVuTS8yelR3cDg3a3BvWnZqODg4T29sRHVST20yQVRyRUlIR3NhcGZhNzh2M0NLZU1XNTYwdVhpMVA1YmR4NjdGRkhtK1Rjbm1JRkFvckluSWhHYVFMTDdubUpldjQ1eHpMQkN5QVdqaXJhNVZPckxTaURDYXo5WTFOeFdiOTExbm12RnYwcVAvU3FIOVpZUUtkUUkxN1padS9LSmFKeUlXMzVNdmdrcW83REh3QUw0MXNOZWF2d2IvcHk4T0lBY2JjU3lRN3dPR1NyYmcvNnBJcWpTUVU5YVdiZjBIRHFBbFMvQTV5VW9FSEJzK1hBVElaMGZQOEc0bndhNy80QWUxSlpPaGxFMU1XUmIrc3VEaGxqSGNyVXdMekRXUGdwb0pPYVN3QlhwS1lUU2JUZkJTQm00b1RrZ1JTcnpyeW0xak9MeUlvdUU5bTZIcXl3MUJ2KzRlckFMbC9IQ25POWhVYXJ5TXdaZkc4KzJRMnlZYUVoRTVoaVNwWW93ZlFEOFZqbmxIT1RyQkUwTTZnT1MxcW9KSGtaT1ZZYTJZZURmOXBiaEpUdFp4UTZJZTJlR1g1dEVPN0R5OXZEd3VJZHR2YnZMUVZMREd1K3htZVVNaVh2ZTRCaUptbURKN1BUdGZGMDNIeW5vclNoWHpLc0NFd1VGUWFldEUzM2Z0a3Y5THdobERPb2JRSnNCMVBrbm5GU2thM0RxaTJuTDFhcERZS3lhNmdQaU9RTUdVdU82eFJxWmNTbkNuem0wRUhYME0vOUtCMTBPSmZtcCtnR1FZSlErUGVHTEE1UW9JRVUxMUhqNUtSeURaREJEVzdSUldnemVsRlF0aDBoS3dTcjQrT0syNHk5ZGpjZUNRaWhGa1JUWlMybk91VG5ybXRlOXo1NHRQMm1CTjdLVlhQUUQ0V2YyWCtvaWVqeHhqL2lwQm1Paml2Mkl4NVBVa1d6MEpBSXlvN1dJbUdIbmpkTUtSZG5lampmZjRnVUxtOEZnUzBqKzlZaUlnQXFTbFpkTEMySWxkWXIyL1ZMSkh3bW9FMnF6a3hWS0tSdzJNQ1RXcElLMUprb2pLc1RmZ281bTladElzR1o3bHlDSHEreXErOFdMSURnUmp5R3NWa0ZXbmpuTDMrNmNWeWVWVzg4WmZhUjdMcTB0ZlpYVndLMTRqcjZrajFDUnB3T0s2TUhVb1VFVW42N1pyeUU4QnFTU2dKLzZvL2hmOXc5YmRQSHF2cjF3MStFdFFVYVJnNHJzSTk5R09UZmNJN0FtNWhTemlXeXdQcEhxSDBhbldRNlRaUytHWm9tdzJ5aDZCdHkxd3RPNGxyL2QyNm9ZNDY3d2V0Q2syNWZ6ZHZReU5TZllCOTRiZTJ5c3F1eHZ6cTRaU1NGMGliL0tiaXk2cTU5aUtPaWg3VnlUcXN3UkQvdHBGU0JEdElvbk1ZVFM1SExGbnJMLzJHejBRd0ZWZ2w5WVdBVzcxZ25zR0dFQlJvN0dzQ2RXK083Y3oxWENrd0J2L0o5VXNmWis2bkZpWHovTjlkNjhmWTJjZS90dkN2UnBXdnZrRGZkZ0tMRmxoaFhDa0JYZ1JLOXEyeDZqaXlXTXJFY1N0UTVKeElpbnVqbTJ2Vm04VnNOYzNFUUVOMERtcE42WnMyN3VVZjFnL2NRR2NoYjQ3ZmZmNnBHTWJLME9mclJlbjlpbWtBK25XNkFQL282UXUvNFBRVXlzUmNIakROcVNRSENpbDMyc3lQQUF2YklsRzNQdngvVWVxQ2RRVXljZ1N2UDVCWlFJMGZlRUJWaS9JTlIrZ0doWlRTaDY4dHU1ZGdlZXRhYkhzSVhVSlpRbmNXUVV5Y09lcTNtcms1REJPc0hVblBPckNhbmIzdDd6QkNUR2NTZzJwamJYVFllK2FSUnRlVkhxWklOZm9hUFhBRlFHNXdRc2VKL1dHVXcvam85bHdVd1VydHlzSjVFeWRIaDRyUXlxVjd5NDJGTDNRcDBWSzhrcjNncDZ0YmtCZW5KQXZFZHU1bit1T2htY3ZPcE1rR3F1bWdXQmhOSWJqcVpKUHZ1aWUxdVVJY0cwU1RTYzlVZEMvdlN2SkNnTnd2V1h1UWtmR2NqU1hmQTJlMUlyNWJlaW8yVElPcFhjVXVaMmRSSXhDNDg2MUk5R3BrMUE4MnpOWXBrSDV0SjM4LzNlY0lhUXRtTnNjSzBUemZEOHJYQkwvSjhTbU9JUEFQcjZ3V0FGbzFTcTF3K3doa21qUFMvdXNiQ2xsVXZHcGYwQXlWdU1Ldys4eENNM3BBemhDRkxmR1BISlRTWEJOaWFkcmdpNDV2L2Q5SHRkbFlwT1pKdkhkd0dmKzZ4N0VFUm13d3BiL1ZsR3hLM3BsdU1INDUrUFpZYm80ZmppenRRcUoxVFVPQ3FWZXVBUEgyM1NWaFkvd0MxcEJoSjJYeWhTOCtHZnI1bGZHVnM3bUk5Z3NZTVdzNVpJYWlCSis4S0NERVJCSnYxQkpRWEJUNGhNL1R1M0Q0aEpndUVHYktTTW1WYzJ0R3Z3bm5RY25KQ2FqM3Y1MWY0YzFKcHk4SEp1eEQ4VjlEL0cvbW1sQ3ZOS3I0U2ZtSmtNYlJkK1Z0VEI3ZDRnZnlRUXgwV0VjcXRqS1dVcFhLWDBwcnNFQ0x4Ri9QdS9aQ2NYMEpjbFRVZVdtc0xMd20wd2UzOUl5YklmakFqNnRMMHBIL3pyNytSK1JPZEdHd21DTEN3angxQnkrU0czNVU1RGdmNU40ZnhBUW1UMFIwTUlFaldFWHVhY0lVWjJzNDRkTDR3Vk9KYlNqVE4zNm5mNXlkdEVzMytYbUErVmJMREhYaXVzZGZrTFozTnVCaTBSZm92a3I2QUhBa1dFYmFEcStteG40SWExTU5MM3JDWTM1OTJXTW5yZFQ5T01sRHc3b21TZ0VHRjZoSjR6WHZHVVNlU2FEdVo2TEMvY0pVWTFUNDRsYUtNd2hUZWR5UGkwaEtnT0k1V0lhdkZMenQ0RkcvenJRMms1OUxVTllQRmliWG0rdFI0OU56SWlYZzJJejdhUnhzRW1zWHVXd2srYjloam1YMU9MZ2o5NzJPbDZPTVlIRXFyWTdZcmU1Y2Q5bnV1N09kNFlSNUJMR2JuL2sxYTBvZ29ZUDZqakUwOUlJYU5zdm1nd3lmM201TTd5RElEdmx5MmkrYXl5Y1VQYm9tYmtWRnJ0WkxkLzBCazJRMThLSzU3eno5SWNNandQODZIbmszT2lFbDJLdm43ZFJwWGVHbzlEZFRZanVoR3JHMTFydHFEREREaHJLUkJVUDRXbVhwQWZPczJ3bUcvdU45Ni9SajZOK1UzRi9Cdmk5cEVHM3JaSzZTRCsza1NQMURrMVFGM2FTVjZOTGNOVnhGTlB6d3cyUGppSGsyYWJ4RTB3VHlIaVZkV1NOZnd1ZFVJMTJoV1B2NEFYMktoNjBnVFB6ZTFQWlBJNUlNaDFYVzMrT2J6WHNIV3NyZjFCM2FoZlA4bWRzRC9ONzlOZ1lUdDNBMzFDN0Nua0NsWTgvOFlXUllYUStQM3kzUlp4N2llWXBtbGlnSUhMb1hGL3lRNlBqR2U3cjRIK29sSDgyK25IOWtRMG9DUVhVTURuUHczSm5BMXFXZFh5ZHphR2lVUDI1V0VxN3lYNkd6N2N1Vld6QW1lWWJreDF0REdmMnJmajRacVdlbW02SzE5N3QrMXl0RWJvNzcvYWErTGVRRC9TUzMrQ1RHZzk1c3JSTytIVkZWTHZzY0hSVDQ4RVo2T25XSFZMbC91bFJXdVVxVjloVFpMQm8vNDE0SVl0d1Y1cHd4NFFMU2xYd0NwR0IxVyt0MXFTc3JiVzE5SzM0VHE2dU1CbHhhVTk5Vm5KNWRxSWNFc1lHd0JKb2dJL1V2amdHalZDSFArVGtLNzlNWStnZmk4SWJndGJVN3dtNnFUY3NDQ214dVZPWEQzcGxvcDhISHkzQVIxeW9aZWh0Y2RIdEhqZDJVT3JHQWZ4N2VOSytmN3V0eHFPdHFCTU1PZTYvVDNtSU0xRDQzak5QODVSY3lLLzE2cjk1ZXR1NUlBNzVORVlialUwbXJ6VU9VQTkxNlJRUTB3bk5GS3RhUUo2TmN6SFRycEpYTW82cWduendzaGJpY3VCM2lsZTltUXRyZ0FWS20rb1BlRTY2QUNSK1VidUlaWUFiVkc3YmRWR1RhVTh1bE5KVy91ZWZPanRQUVBuQWlmRFY0bGpaZmNBTEhPaEo2L2FyTWNIemVuRWVYYkl1RzdwL3dsU2ZsUEs4emREZENnbC9MTC9HWjAzeUVKOGFkek8rSG1sa1lLMC9sMzFXeUhOQ25KUUwzNngzbXZDRXRWMHVvbVk5Yi9PYVZPNURVYUM3SFBkWi9HUnV5M2R4c1lKZlVxMElsTExwMW1uNnVoc0ZGS1l1Vm8wNkpPblNxV1RMbXQ5L2cvK3Y1Q1JlNWNDR0R2eXNxZmlYdzlkb0ZsVVNpemljaFZNZjhTcjNkWUl1L2JOTWtsT3Fzb1g1UzFlS0YzQlM1OFMvUnZvK3kyTWk4YnV0bWJFdXVHSEhoVVVNaTJ0S3JsRHlBUExVTE5rcmxid1FwKzJRMWZmcENBNTEwQ25kWkhGRUNDR1JualBjQmFsVjYzbkI4Ull6YWkyb2RPeS9XcFE1YlZuYVZsTk1NUGdRR0tCN1FYVnFGeDkyMUN6UDVwckwvR2NubzlxT28xb0VSVU1xOXRMSkt4TDdnQWVBSUZVSy9lUUtDZURIVVFGUVdHM0J1WGVxQWVsTXM5NytnQmFib1RwamRyelJBRlh1NWlpcVduVjYwUHBnc1hxNFBtWnhVL3ZBSUtUSEdoa3FLMXRXS0hzVXM5TG9aVWFmYjQ4ekp6VFJFUkFVYTNsTWEzb3YyQjMrbWd5bithb0lZTEZYYkcrS3Z3bG9RTThFZ05wN3RFclA4ZWRGT29XcnVpTkxxcEdwdUVmWlNwb3NML1YwU2lHWk16eE9QT2NFNGlvNHp4aWlxbGhXOEFwSnp3M1hiT3JsTjVyUFlUeUNseVZoakQ1ZE1aUVNiT0l0TStCclArMkl0OGlteW85aW15ZzZWYy9ZSUt3bFZZNFg5Yy9IbXhoWUxmWDY3MTBYcHNUVFhGa1Z2bDN2cGZxMDFSNVRYcnpjaUZjRGF1ZWJ5VE9DSXBTazhmYTRjVmpWOUxldlpWQlFvbmx1WTRqTVlwNFNReW80SDRXS3YrRWFhMEpuYzU2eEFQV2tuUmFtb0RUSWVVdGo1V2srL2xyNUJGNC8wZTdkK21iRzZyOGV1RVVaZnZicmFSZXlUSTRoZHduY0w1SVF5M3c0ZnhhRkVjUXZhV3BYcXVIZG1haGFiVUF2OXBDbDhMVjBaVzVoeEROVHphYVpJZlhIMzlleUZYT0N5ekplK0FJeUdMeWQwK2d3bXh5MU80aVphQjhRZ3lEbVRKSXJzMm14S0xnMFgwNVN3WW9GY2tYeHJHMkMyYVFpb1pWc2kzbDF6MlcrY1pZZjhtWXBtOGVUTHhaSjhvUXg5b0ltdHdUV3NtWm5uMURWWHQ4UjVjTGhabHhoQzN0VEFkWWxNNGp5Y1BaVHpJeU5PcE9pQ1BRU0RUTzhzQXVHSFI2ZWhQbWdlSmhNN05NQTYvMHU1Q2RhTTBUMUhxK015Q2Y2WGpjMlMvK0VUU3lDOXVXUFdza3hJc0llaW0zZ2VGZzViYXgwNEptenU4VGt1QlRkT2NubFZkT3FIVE5QOHdPN3NsNFk5NVZJWXdCOTRhRGthL3FGanZ2aXFJSDdUM3BaU2h3YUx6bDgyNE1Wc2I0UmRkYUJKdlZZK0FHa2RLZmdlcWhRZjdic01SeEd0TjR5WGZLTzZPZEJlNFlsR01USnladkF6VnJqNWhObndKYnQ5bzV3cEVGMDhWM2JNeC8xTmtBb0RmdEFvQmpDUnRIN2FXYitTL056TWxOZkhqSFA2K0hPNE8wUGJJSVg0a2RZWGpWaGdseUxhczA3ckZCc3M5M0JCYTIyK3E2ekF1VGtVMXM4UTg4dTN6WDhwbVJSK2UyUEZ5NTJXZ1BUNDl3VlhwU0tYNjBHa2N1RW8vdFYyZXhHa2dYb1hFN3gzU0I2SjNnNGRRTlRzQWlmN2J1T2FCRWRPaTJabGdxMXByc2dNNi9DbWpkbXZPRWVSdXlDdVpQN0Y0T1F6aWpCSHg3Y3ZmYnNpcEsvOHBnbWdaMHdJbmZvU2JabGx3Tno5RGlIWWRjSm1xY2RjSmpGUUI3U01OZmFqRGtsYnl6dURJc1lLUDI4YmNwcW9zVVBzTWsrWDVDWTlheTYzdzdOcFlhdDBOT3J1M2R0SVNkMC9tN3prTXlPWjArckhoYWg0RE5Lb1VlaGVlVGRDN1ZOOEVYa1ZvcDUvVU9YVitZeldOYjhLWlFENzhHV3d3SVRNanBOVG5iM01YeGhLb2NxYTNVS25uOHltRFFROFBkbUNpN0FWK3FvNW01MDcvSVYvbmJzVnFoWkxiek0rTWhlanZqejdENU04eDcvNnplc1BRa0ZlbHVqYjV5OFJmQU41V3EzeVROemxBRllXYk1RY0pwd2xVMkUzOTBYUVJ6aXhKbkNPalZRT0I1QjFEZDBGUGFKWTVIN0J4cnpaSC9VbElFRVpGOVhtenppKzRRbTN6YXUzUjVSL2lkcHpna3VJb2dWZW4vUjNVTUZWaTFUNlYwT250T2JWNHJyTnRRaVgzdGdmMUUvUUNKNXA1czB1Y1JQaU9KZFlzZFV2MytBYWJIUzhFS3NwUmFmSi9VRnVnOWxDUUNNRXZCcXgrNXZaWHdFQmZuL2JuS0RaN1ZWMlpYeUlPb1l6eTRoUzhuOFlqREJNYkdvWEsyVGhFY1BOaDNwcGtvemN3bjRoNUcvYWdScFZPdG85WnJXVGgyMEdXZkR1V0hNdnBPWWNHWEFmU3lVU1BNYzYrbTYzSG93aEk0bmoxNFdsR1Y2WDFDT29wTmxrQlNSQVRBb1NrT0hQUmZXL0d5NkQzejJuNHlkaVdEcmxWZ3dzRzJoMGZDeTBvMzRYRnNOTXRkTzZ4YjZqVkFPdlNGWkZXYTRoQXhVVDIwaFMzMUhkZERhNHBkdW5lNDl4amVlQnVDZDRUZ3ZudEo0NmF4cEx0ekx3N2tXcysxUnBBNnVsVklwQWY4eGxNTU1BWHlObDNnV05pR3V6RUFLWUxzM01OcENrZmMzaUhRMnIweU1KdnR2aFpkSERiWWlHYjNONnJvWm1YcjdSNW9YbFhyb3RmbjRkYWJ2bzVpMStqZVNodDdtV0h3bk1kYVltTFMyT1ZDV1Y4d3p4dXJTSUxLL2ZPSnQ2aVFQOGRUTU15bkhnWGJON1ViR1BzYzNRZjAyWjQ5OHZFZmpjUjI0YzArOTNwWFBwL2dJQ0FnT2IwZmJyYU9iMzhBTnRJd2ZoMlhpOTExL3pXNlZWRGtldlFDTEEzZmU1UlROdzF4L2JaYmdpeDNHRVNqUjEycUt5TW1ZU2g2TEZjaEc5SzAwVWZjZXhrOUhwVXdqSEI1VDJhT3grZnBrYm1zdVVyS1BNY3pSNlNSVW9DVGFWcGtIZEV3dC91OElCQW9vZmk2WEl3U0dPdW9mV0xqRFY3UXMxZVVwZzJwcE1LNHVXQXJBZ0tQUStuZHo4Ykx1WFdHVkdFWE1XZXNteTI5ODVhOXB5Y0ZZSysrc2tHMllzd0xhL1NKUjhyZml4Z3FHOUlQMnZjaCt2QTBpN2J0Ty8vUjdXVFNBUnlzd0hrazJPMWJqMW9TWUdpcUsyekw3R3Z5ZW5hMFRFSmt1NmZQVWlMOEE3WFlTMko2N3N1clp5aXZTSGEzZmlMZWJwcnQ0K053d0hrVzI0ekRBQVVOWWdZb0lFTkRTZE1aSDBrY2Rla0F2NDRMUjJYYTRHOTBQWEdUeEVaamtVUnRvUEEzaGtveVh0Uk1zZkV6cW51eStadjJVamdNellZTHZ6M3FRSHk1UHFSR0haRjhaenNVQUVDM2V2UHFTd01wTEs4NmNzWDMwUGh0eklVZkM4TS90bWh2cHgxYXhjRzQwaEUwN1pEQmlOUXl5SXhHWUdOcEVJbzNSemIybFY1N0V2Wm14TFRsZ2cwbGJpejNGWEpYeEdDZGhtV2dFY2p1a0NMUEFsVElGV3h5dVJRc2ZORUJ0SGtjY2FCay9oSnhWcFNzUVlkNDdOWXJtMlMzckZzalFHMTRuWUhQckJyL3JLdmlWZjN1RG5uRStYQUpKaVpHVWV5aWZqU3h4VkNKMVVBaUtldm9Yc05LR3U5RHF0VHQ4TWFqOTJMSGRGNE9RMEUvem01aDVMd2I4T0VkTzdOWGhPMFhwTUQxTHZuRDUzMk5Pak1sRUU3MXd4U1I4STROZ3pQU1dVQVdXZk5aUnF3S09GMldSWGd6dXVpU1dUbTl5Ly9MVnlkTDFCaitSV1EzM2ZlOE9RdDdod1F4eElPSUQzajlhV2RXczNaQ1I3Rkl6MGFwaUFjbGhZcWZEOWhNTmUzS2h6WHZFbFFQdGI3MjM2L2plbkEvVTFXZmc5TUZsK2R1RWRJUmpBdUM1Z2NUTVRhZTJrSkFWektXOTFSZTFHY2xaMm5IV1ltVTVibStVa3NNUXAyYWVuMW5JeEM4RDc5dFBvL0xubnlSMWFoTktSdkhrYmxrVDRVQk5QbUp4bHMxbEZPa3VjL3c3c0JraEdzei82ZUFFZUxuSm5vS2NGU1ZveU9na2hJbHkrMUxISG1seklBRGhEK3dadnAwTVRFeE9nUlRXTCtkcDJlcjhuM3JncHRnMUw5OFpldFNLSHducEJVSjdOTUEvY1FhNkRqM041aWxQWUV4NXlvZ1RPQk9mSjIraUpnb2xUN1c0UzFDOVpyK3Nuc1hMUy9OdG1DaHJwQ1dsSGFOWGgxL1ZibmhJOUVRVy9KMnh3cXR0dnJ1SnZoeGZhRC9tblVIUndtdUF4R3AxMWZqZ0tUMFYrdElWRExGeVZzVktoWTg0OVZ4VVlweXdxdTJLSll4RWlFSmpaNjRSRGxscEtWYm1sK084bWo3TWJnODdvT213bzBzdXp0NjhlVnR0dWl3ekphbnp0dS9RdXhuaWdadHhoeVVxSGdhK2RQV1ZrUmsyeUhFSS81eHQ1TWQwZXdNanNkZmhXZFZ2OTdYUlVwcEN5M3lYRStBWkNJZlEzQmNwcll1WXNnV2hCRk5UVy8zbmkybmVDdll1UkcvRGh2L2s4aGlJOUU2QXl0eDFhM1RBeE9TemNJV3lJeTI4S0dZRzNIcW5rY3NIaGE0b1NuNWd4ZE00RnZpam1IRkhWdzFFT1RHcTBiNHRwdDlJN3RpakhXejVyRlFobGRBcTlvR3lMc29pQWVNNFMvZUlrcVN5a2FRMjRTZjZhcTRDR29mL2haMGNwckdiKzVTUE9zSGN2VGpHSXhTa0tBMHNLakN4SHNodDg3MXlHbEUwb3pwWXJuWkEzSHY1cklWNVhLTWpZRDRXWHltRUFUM0U1TzRTbDRmU1c4VHFWS0hEU0RnNGhBaWlXRjlOR2RrZkNRNENIVkt4K016WGRKSXQ5azIxQVVMZm5XRDJ3dUV6TUs0OFJ4VWVORnA0cSsyUDRFZ1M4Q0JnNy9UQllwblVQOVdQbXZjcy9EQlI5bGl1Mi9PeGJhM0xFK2MrcGc0VVlkS1RpWEVnSzFLbnZRTEtQOVl5OE5UK29XS2xWRjZoTHhZZWx1YUsxSE5XNkRUaHdKQkdhaXFuNFRXU29CdE9WYzVxWFZNMkFlRjRuS3kzQk5yTG1LZG1yS3BMaUJhSElVRDdKUzFUUTlGWnJFMXF3SFpDSmtrRHdMU2dJZDA5bXhjdDlKR2RPbDNJNVI3VUJSc08yTHRDK3R1dGpKNytnOW90M01FKzFEa3Bid0JIUlBraTQ0UVZPdFB5YmlreHhoVXZacndXWkhvVWNqeWpDZC9CWDNqRU1zYXpKYzEwWVR5QjluQmptN0tPZWRCeVh0c2pSUFlPRTFFdmZ1N25saTJVd2RhaUhNN0dCYmZ4THltd1NOdVdWS0dXZk0wcXo4MG9LLzFrMmdrNkpSdVdQYkJCSXVHUnNZUUhPNGdUU0pPL1kvMnRVQlQ3dDd2Tk9nbiswdjNkZG4yQmxmendLMUFEYVd4eWFRZWM3TXV0VW1pZjFORWlGci9rVk5CaURoZGZxUGwyZTE3NGRrZjAyRm9DV0pvbUJlL1UwRGN1OHByQmZxMVVzV0tGaWZiNXRRZERqdHdrNmZGdW13eHBjeE42czQ2THJmZ2RXaStFejdOOWhVVDMxcDFQQVJjWFhRUTFCZzVta0FsSVE4VVlreTNock1rZERpdGVObW96UVRtZDN3QnZNUmhOODI2dUk1bXM5SFZDbE14djNzTXZkSTYvc0QxY3BxVDlHTlhWTzYyT2FJdzY2aVJ0dThIK3JjdUtocG9yRVRyV0I2ZnBMRFBFQnJZakl2am1RYURGZjArbnArcmxodk9ZQ1BTeCsvQjlOMDdtY21UL09PT3orREJ0YVYzY1o2aTJTc1NRU3NTaWNvaWNtZzIxUHN1bUcvU3NQUG9xWVE2YXVyUFVMTCsvNEhsVjIxSUdUOHlrSzByWE4zRHBHUCsrR3A3OGF1UXpRN0tqNXBzeVFRM1BnT1o2bWgybno2d2lNV0F6UzdYTjU5Rk53aE1ZMzBnQXQ3c0JRRGk2bUJUdHlLejBOU2VacVp5YXBBZytmUVhoZys4cUJZaEJPME5qd3d5LzJCNUlpTkQ0UENlT3BybjZERkM1VzNOdGRhOEpUMkdoSU1UNndUZk9OTEFnbUQvMGxtTTFpblgxaWh6RENwR2hGMUJyT1F2MzQ2ZHJMNGQ1M2l2M3pTOWlEM21Hb0djOEJmR3ZuOHdpZ2JnWFAvT0RMa0htT290dWVZZ21PMWZsZXRVMzJxWGRhWlRsZHY0NDI5K2xLMFl4UFpJZ3UrQWQ3aFFZamo4MFpKeE9DMERDR2lXU1BVbGJtRklrUEowcytmd3hYZk96V3ZzVkkvTU9JaFFiWDFkT2d6L2NlbnM2dnhZbGpJVFdrNXk2VlpvanovZFM5NmlCOVZlUkMrb3VWcFR0M2JYdmdTUFNkY21Ib0JUZ283RnF0VURwTThTdWNoV1JQUCtld240RjdPdFkyRmxtdjNMMmN6TGUxcGdtbEViMXcySjlSQUwwWmdsckpvaGwvQWJxWCtIUkxlT09IUkZ5UVpQbVgyUFQvMExSRWxHeVhwZTFnaWhTTGk4blB5RUJpUk5uUkU1cXFSYjdwUmppTnQyd2E2aGFIdmVDVHV6VkNFaXhsQk5aUFRpaHM3VW1yTGxOdVc2aWZqWS9UMFY4LzVLbCt2RFhjeWxSN2NxSGVESHlDK3UvZW1jT2RER0Q5UENIUnZTTUZ3ejZJcmhBMW10WHhmaVc3UXJMY0RDeVZnWnJ3R0Z3QitPdENuKzlSajRSUkFiR3VydUlvZE5SOWMrc3UvMDRORmNDblBTOGNKaXJub1VtaExGVkd0cC84enplenZnOXlZZ1BrN1pjR2NXNW5WUDFCcE02b2ZBMVEySGkyY0ErYmV0WEpGRWVoN2ZId3dmdlYyclM0dDFwNzBEeGZFUUtFQWY1TnBqRWpSeGZ0d25mQWhUbEpEajlCamRDakFRUDVCV1BNZlVRUk14WWtNNlVXcmV6LzV3TXJ6dm9wTWJVeS9CVDhCaURJZWFoMU1XZTZGZjRwV0lOelU5aGtHRndkYmZMVnpzOE83ZjFua2RFSUZXZUZ6US9RclYrb3pNNkx3QlRIMjc2M0V2N3lmelNablNHaTFKYkIwT2xXWWVoTkJTVDJGOHZhVGxaNzNJVks2dEhEQ1hnajdzOG03UVJTNWhOUlFqY0VJRUh5M013ZzRVTjQ2c2ptdHZsNkYzbkZTNExGUmw0MjNmeUpOcHB1VGE5V1dTR2F3d0ZXQ2doMFJ0WVg0aWg0ZGZXUFpZeEVpaEpWTFpUSGQxWGJ3L1dWYy9XZTc3S0hyNno2K3RZTjllanY3TkJuOWVobjIyb24zYWR2dTBmSDc5SGhRbmp5QnpFYWMvRTlxZkFJRldpR3UxQ0RwNldreVdvRHlFRWlZNzRhVis1d1BZVm9lR2hWY05STUlKOStrWkxNdTQ2bCtEbnFnT085Qjk2Unh3Zng1UlVQRzVUbjNnb002Vng4YXF6SzRGVjdHSklsaEhPSDkrbWlTbEZBODFxNzl0SVhjVXM5Yk9scXdlWUV1R0owMkt6NVUwTTlRbXlvRDZDM3AxZGFIKzlQWXNUODhIZ3JnSTFvVGIvNmtJTk1MZzMxV3VMS0gvcHhmVlJ6YzdtRmdyYU9HM0lNNk9ScVhIMVJhdGlHZU5oK0ZYNWNhbElzdnJQQjdQNS92K0NTcHdDc011RjVsUkpLcVpkSXQwdHFzZHVKcHlOMDBFV2gyN3dwT3BEUDdWOWZYNlkrODI2VVZPY1BSdi9SQlRCZnYzWFQ2a3FGMlQ3ODVhempjYitlMUVMV2ZuVlZiYkNwQnJSYkJseXo2dFJibTVCaVNkYkhYZ3JPUW1kei9RbXJ2cVNGTGN5N2RZTkpSQ3FxWnBnQXkzNnMvbVBReFZIN05WVEJ0eVZIcDloeTdmMEh4ZCtMc2ZYeHE5S1AwcmR3RU9xVVR3YjNzSUhYdlBHQnNBbzI3aEFKWFZYR0ZiTmZqRzVEY0JwV051NDFZVy9wb21CWkQzdUY0UzVoeXNoWEN5bkhjK29sL3FoL3ZxNFYvMXpFdnV5UjUrc2JoUXliczRMZkl3V24zb1hESWMzUHVlbHZhQ2Y1a1lyMklkMVJiQU9zMmM5aEozSHNsNjArS3pZaVNDcVgzLzFwNHJGMmhVT1dNbXl0ZHpPNHdOZ2hrV1lsdFlDU0sxL29YOXgyS3ZMSmZOeVVGZjQ5dXhPOWl0ekFJTTR2ZzlBS3ovejlWemk4dFlCRnNiY0grUitRcHRCMlQzOC9OTWVhTHB0UG5uOFU3VVZnYWRmc056MnJpa09IT2ltZWFkNndpUm9KV2dIY3pPQ29tbC9DeTRaci9NTmdQR290MVpuSGJNWi82QjFEeE5ULzU2dWpoNjZHLzFnT0lrT0FVcGsvYTRvNUpDckpXNm9UWE53L1VwR1BaV0ZtRy96dVVXck9IUEEwczJVNkJDNE9rWlo5TFhqUEJic045S1ozNml6S1VBVXVhOUdESU9aeXN6eStYV2JJZCtrZmtWeDVLdk5lNjFBN1dtVWdJQVZwVUoxeElPc1M5aVUyeWRnQUdMeDNCcCtaMXlFNldsOVBlQ2QzdDRmSnJmVXhlNElKRzFJNHN0a0JVd2loZGZibk0wMyt3NmMrbTZaTFF4VEFhakYzQXZsSTZLdGNnR1RrclVYSXBXNkpKdXVrTHQxM2tZekE2L21IWUN1UGNaU2ZLcC96YW0vZDNsaUc2YVFkWFJUdUJjSjFQQTc2ZHpTaHdyeno4aTBmdEk0cjRDSkZBOXZGcHNWeWN0Ulh4ODNZalh2VlNiRnpQb2VTSFA0aUdZYnhuQVlXM0lQb3ptb3M4U2h6N3h2QXZTaXdVNjArYWl0WXp3MHVTV1Zaem15YWNhM3R0VlZLSkFsWXMxUjJEMUY1NnlHZ1AvVnJ2M3p0UGQzcjZSRWhNalNvZzZSbWFrTmZsTUpFbmw2ODlzZUMwbE5NcVFkRlZaNXlNdFc5TjlBTThmcWJJL0U2cm4yMGw3L21NaXFiZG9uMXpOK1o1WEh0blhmWnIrRDF2d2NWS3ROaUVsRjI2Z1c0RXovb0tTTVdjWGI2dlcrekp0aUpkZXdKVStnRHJybXRVYjYvSTNZQ0l0czEvbE9rTG1icWpiS1g0Ynd1MVdkMVlZb1hiMWV5M0poVDNOUUYzRm4zNW5rOVkvQnQ4Z3MwajdYVGIxZ3NHVStUT2dEK1ZWcGRCWlJSak1iN3BjT290S2dYdXFMenZZc0NIUkNPN21oc0o4YkZnd21TY1R4MGY1eHEyVEdYZStTTFhvbmZXdkxGOTRjMFhWaEpNUFhLdWZEaEZtWVFkbHU0WWJqYWpaMG1HTTJ0QlhGbU1VcGpLL1pQUS96MmVlZ3l0REFtd1NpSXpaY1FnYm16Mk9hTnJrem10QzB0ZlA2NFA1aTgrdHZtcmRyVVdiVmx3ZHhUMm9qL3E4YXk4YStKcjJsN0RuYmw2TnROUHV2WDFuS1JyNzR4bG1PeWdhVE8rWERMMHlHdVF2T280aTZhdHR2aE03QjdadmN4WEhzKzhWMk1QQ205S3NVRHZjamgyQUR3TG9LQTRYSkpsZWp4cGIvOU8vM1F1dmZTSzhraTRrVVplSGduVFNOTzlmejVocG4vMzAxU0JndzVGc2NNWmhuQkE3SzRTRENuQ2N4WGlNM09XbWJkWVJRWWR1YndCUStRVTVtTmM0UTlMNXZ6SmhBQ25sa055R2k5Q1cxcm9veFhtZS9WRXpFYWxmM3R4NnJpVjlHdy9iVWtoc1VLeDFEMnBNNTNwS1RKYVdzYWRicUhTVHhVc2R0UFBIQVpyUXpKckdNdjVrZEJVeGd1RlpZV0Y3V3NWaXVvaXc1U3duQW9sanRpL0xQRmxoYk1pd1ZxTXFtaG5aMXBzeXNUQUw1SjdvTk1JdlpsUnFULzIvVndreDAxR3loTGFBWUs2eFhsb1E5eHQ1MnRmYy95UWZyYnFkK1BOZHBGQlFOYlFvclA0VXltRVg4VndCWC82U0hVVC9lemhkQUZYQ0RZSEhNazVpY0ZYcjFCL21nZ3NtQzJlTjlVTEhXNFYyWHlFb0pRUmc5c1Fyb1RxcnE5TE0vV3IvVHMvUVR6VmdaTU9YYU4zSFhkcTZzcCs1VndCd0s4RHhLZ0YraHRBQWJyYzltOWxRQTNtbXdhbldMY1ovVzdsV0h1WkxiUkFlQlNGekdJSTBORWNhSVpWU3lCU3JZOGVLbUxkY2d4L0lwMUk1UStRb01LejcwRWM4UENWQ1FzVUhLUVh2UHVFSkNxeG04VGQ2RGFaUW82TnFObzNiSURlVlFtREJPOXJKQjBQWkFXV2ZTb21SZXVyanJ6dUx2ZjdOTm5vZWgwd21wQktFT0lXeUVQNzBNb3V2MVRpMDhOUk10Q2ZEQ2xpSWpDOUVhMWR5L2ZFZEJwQVhGQ0FxNnl5U0hTUUcwenRFd3NpZjZsdFJiNkgyKzRyWTdyUjhkT01EWWRsdFdDdWd4aHdGQVJLb211RlZzSVQyUW10aytmYWhpU05tZTl5S0NOeVhwdkUvUDZ4ZWVKRm5nU3FuVDhQd3B4eVNqTXorWU5kTFA5b09rM3ZHWkxzUjg3NEpaNEU4dzN2QW1pZTZsczFaL1FqY3NISnZIWlU4Tjg4ZEJBdSs1NnpRZ0hKcDhmT2Z3U0l4dkpGVEFhdkxLeHZHMkE1WEJJdlZsWUtIUlhINm9UYXhtZ1NXM2xOZUdHMmlaanJOM0R5NXlSNFd3UGJTYXJ0ZzBLam9ZZmF1RFVYQlZuVHJRNDdPUjB5ejRjMVh2MEVkcFVBa3phZE9Tc3NnT3ZacERwSXZ5Q3ZyN1hZeWJYTDV3eW42MXRxVitKamt6UmVHR3g4VS9LYWtHcWo1Wi9MdVk2SXpPTUNSbmlwSXdiU1drSXZPNnc0NExURDkxeHlRQnRIbGkzaXo0QUxSR1BhbXVzUWtxdHZTVkdaNjZwNUNxRTNtcERwb1d0YlNyZTB2eUFjVmhBbkt4T3FrdWxJSzJianBrakxYUFdlMUJrck5kVzVVMmFoODJYRWtaWjB3VTA4ZCtuZEt4aGM2U1lEenB0MTU0ZlFJRjBsUm1zRE9tZzF4bjVKMHVYRVliTmw0cHBHemtycUZ4OVNDTElDSUZ4SFFxdHFiekdwNGNmUktnOW1kMEVrRjVTVDVRK3Fld0IyN1JjZkpFWXVKckJZSVhObFNsd3VZemFneHYwVGxHUVlVTy9LSWVXc1dZRUxIMExha0EzRFRESjh4MDNpdnk1NEJRNTIzR0FUMndrWUVUMWhOVzdVU2RLT2NOckc5dWRxL0NvVjRNZEF5R2tRRmpsVW1wdUs4ZThwaEoybGtrNFkwNGg3dHN4OHJGYjVKOU1PU0RwZGF3WVZ0UGtKOWphQ1hDbUJMaEdKYll2NGFxVkRpVlNRR08rVDN2QUlVL0VxSWxEa1VrVzhkenM0T2xvbWh3cVZ3WUJJN29XWnhpYzBOcUgxSWMrckJEYm9yWnA5S0hZZHQrcjU5cWpwU2JvTnNET21RTzZRYzNYVXNwYXBYTWJHWHh3M2hzY0hTYzFDbmV5Rm5xekpKaXRwWkZReFFTNVFPdGg0YVU5QmE5cXRYM2t2UkVySEFhamRMSUV4emF2bTJJM2t2MDJTb1U4VTBLV1hBUkJWVWtKa0xrT2djelI1QjR5ams0SGZpN2RZY1djNUd5N0JDeHpJOXBjaDNUcExYUmRuVEVDUWphMG1lUnZjSFYzdVN5MDFsR2U5a1E3d0dGdDdyZjVpNHIzWldrS2NBOE1xMmZac3JnODRqYjBQWXhDdVh2aGx2Ky9wcUFiTzdNT3l5R21nSk5WYWppMkh0czR0OFBxb0Z3OHhNd1llRS84MHRrcmdQWTJndWdTemYrVVZxYVZlMzg0bVBPRFk0TE9PL1hwalNXWGF5MHNsK055WjV4M1oxVHdudU5pL3VOb1oxVkVpUVNyM3BzZCtSdDZmTjRFaXQwb3Jkc0E5UlpPbnpSUm4vTks1aEZ2ODFBZzBGN2J3ZnBuYUEwT1N1bTJuVy9PMmVyMGFMSDlpcmRzWGU1QU5lVmp4Q1llZzdyUE9MUm4yYStveDg2YmdRQ0dOVkZtRmxIbWxrNkcyUnhYYmU3eUFhNUd4eE1VK3lBUEJURmtEcEdyS3ZuanlRVy9vZVZTMHlZZUtlVHNubmRQc3ptUE5RamliNFJxbWlHbXZ0R3hLbW9DUmM4MTZpRnlJRVA5Q2ZUUTcwdjdJUEM2d1dnTk9LVG82a1gzTk92ZXpON0ZwdjhzTk1OR3JMZTAvZDR5bW83WjVjSy9QMlh5M1BIcFVqREp4NGZMdnU0S214bmNEeVdwL3pUTFhJRzF3ZnY5bXFMZ0JHYUJ2SVpxM29Jd0VMRjJZMDgyMkdjRmwwcDVzb1NvbElYcGFPUUlWSGRWcS9aKzNhbmdjTnprQW85bzBGVVRtRnp2WktidFU3bkZSbklSUWM3SUlLUWZ3S3oxL3psekNKbHhSSEVOS011Q1JmNjZyQWVpRzBYNmpXSG5kTVFzWEtFb1o2YkdpWGpsS3Z4OXdQSWk5eU1MNklNZ0ZGcDdDZHQwTjRiUi84NUg2dXdCME9wYzFZaS9PemZ3a05GRUN6QlpaaHJUNWFnaVJ3cUFkeTMzcUovdnFuNGtxaEJja3FHSU1KcDQwUGVIM1E1RUxjN3ZuK3BTTzQrd2RnWmE4U0F4ZHdqMnBaOHZTeUQ2bE0wUXZKNng1dFoxcGE0SCtlT0tTUUF3T3BnRHRhWld2WkVzQnYrTmlkRm5jOFFJQlZkcGtqVS9Md1BkMHBlQmkvRDJYeStrUHJqUEJpa2FBQm5LRzhKNHdMR21YWjdSTHpJL3MvVmgySkVwQmwxTnBzb3cvelIzTEpzWW8xRXgvNHBuc0hnSHVCSEp4YzVyZmNGdWhWaTZwZXFKTEtWMG1YZkdYRnZOTENSSERYRDVXM29XT1F2dys5YjFkMGdjNnova1NyZlV6dG5uSTNTV0ZnRFFyU0tzMVdGR1ViQ245NmVYQmlpS3pqTjhGdmFqbXgvcDAzNjZrY0lYczZ4a205Q3I0VklnQTdHTXNsK3NhVHo4L3kyWUhxNTRha0d1TllWakZlY2dUUE16WG10aXlkUm1QY3hZOWpiWmVORFFJTitjUkJRb1pqR09UZ2hZMDlSRGZ0elo3bklmbkU5UTZ5RzJ1TXRkU3FLNVZySEdMZk9PZDJpSFFIRGxLR3N2UnVuc1c4S3hZd2FiZjlSdVkxZE1FQWdXUmp5OFVheC9pV3ZFaU9waWtXRnIrTGZZZ1IwbXBXRFpocndTeU1EVlNWQ0w1NGpNSjVXTFVieXVOandublU2U0p2VGJjYUpVR21ReSthT05lbG9pcmkrUHVoaG1GTUFaU1VZaHE3L1o1alIxZDdUZ2hvdTRDbHhuTStRQUZ1Y2ZvMnBBRFlDVU4zSXhGZ0k4a1BDTVdacFNKYVRiSTQ5Z3pDTTJ1Q3p4cHBjcUxkVzkzOEFKNlNuWWR0UUFkUGVST1YzaUtBRFpKTTl6NmF2cGhJNUZCZlhFNFVpcDZuelVyMkpXaFp5cXEvUE8zNWFxclNob0MzUGVIQzJpZnVNQlFBU0pqdjRnVzhjRS9udnRVdGVRSjg4ek5IMGtNNllpeDhHdUZ3RXA5ZmdZRE9vK01RREJRVGFKSTlNei9XRnZmOFlGLzVHNEgvQnhqQmxFOUZGRXNQTHVodyswbUFLREJPV2ZqZFJPWVN4OEJLMzdRWDZJVCtCTEZJTnJCaDhrcHJBTktXTDBUMEJpWjRYcHRILzA0S1E4U0xiRXY3THJFZm0vWjVvaks3VE1wU3FKeG5xeWcvclkwRERhbjhBbXFZWTVqcmphcjRvWG5MWUZ5V2p3bkZORk5PTjFuOEpXQk00emk0L2ptTy9zZ2dKWmJmRlVSV3lOQXU1ZGExWEdPZ1NIV0pROWIxek5vR25TNlN3b3dOcVl3NC9Kc3Y4RmMrK3A4eHR4VitvSzVVd1VPWkFFa3ZCZ0tXallhTlBxckQ1Tzc2cnlCZ0c5aXFxT25HWTJwL3ErM1pEN1ovQi9ZbFY2VFY0dmtTN04yRTI3WndNQkF4cFZFZllMNy8wclBhbEdCRFd0Qk1YbFFJMWtuWHNvSEtFOGQycmg0U0N4RXI5MTJVT1V1bGRnbXNxVnh6R3JHOW4ranhGcER0c2JOSXNoQmEvalZhaTk2eG1nRWZ6QTRHMkk1OUZHRUl0N2pUTmZXOElaRWRydlhFenBEQ2FkQ0lMSzdERGFGb0pOdytVNlo4VjMvVk1rUklzUWZXcU9qR2I5U0J0L1BFcy9qQTYvVmhGM2xPQjlUbG5raGl0K0l4UXd6TitBOTkraHF6eHFPK01NOFhZU21VR1ljdDBCbGozcmRZTnNmRE01THp5cnFCeWlyU0hpSHl2U2FpamhQQjVWTVovS0cyeWVkR01OUExLbVk1UThVV29wdjZXZ1NFNm5VT1JJeFZMMDJPZUo5Q1RVcDVybWtwVWJVbHJ5elBrZlY1WnZTV25WOGh0MU1ERnFWR3lNU1R3WjNTWWY5YXdEWXBGVHpOOUlYMUhCUFJRM04xV3lXK0tNNlhsMDB5aWxNWGVCUUxDVU83RHdUc2NiNXNyM2xRYWtudXg3YUhkbEhWQVVxd0dYVVRLdXJuTGdVSk40aDlPSVdOcEVCYy9CVHVqS3FtUWpsMTl5R0hpZXl1eWdhYXJ1TDlJaUM5QUlOeXVRempDK0VESkJ6RVA0ODAzTzZ3WjMrUm0vbWY1V1crNWw2RWVvL0huY24xSG5hUzRQY2t0aTkwSjdyVGVSSldPbWxZVnNwdjhUVnlEMkRzai9IZ1crWkFhaFRGQVNLanBZS3NjQVBMd21BUmNMVWQvUExnR0FRRFl5YkVac1IxdDE5QnprTGJZV3pRUkEzNDUxaUoyWnE5TG9pZkRBdHFQazc0SzdCdGhDVDJyZzFMWS85Yzh0SjZaRmt5UnQwNWdmdFkxWU1KVks2Mjh4RUxxR2k1TWFYcHJnMVFGTHlSaWpSUnF2cEJtSk5GSkpEWEpmU2pmVHYrNmhzTGcvN0RZM3gzM1RxNFUvMXBMS2NpdEx5eWdlakh1THo5eTZ3YkdKNUkxMFk4REF6WDNtYzBXYStsLzdtNUtTaXZaZzI0eDEzQndRS0JIdFU5NnFoeDg5TjBSSjdScWkzT0g3MnVqc01qUXB5Qi91Q3dmVGk0TlNUNFdzS3NrVHI1TVhvZXZRcXM4NGdIdm9aUDdUVmdxN0EzVG1BVVdaSWVrVGNPWHpYdXEwb2NQaGs4Y3FsZWZRV1dkS01KZkZ3K1Y3bmxtVm1LbVI4aEExR2o5bWFSVFdPTkVyZyt1b0tONVRzUUR6WkdkSGg3cXIzNEFUenlBbzZtNHZieUdMTks4WGtFZkdKY09ScVNwZ1R4WHloTGxKQVNHZ2EzNzVLVFZEVnBWekQxUm9OazZEaGZwbFNtZlZob3M3aEJVYVQ1MjZEaW1odjNhLzVzRzBJUExNRDNTVTYzTzNFT0xEa1BrQWtoWk94VFFxQUt2bS9NVDA2ZzIzQTBnRTlpT1o1bzlMUkRrUmkrSkJIMzdhVmFoTFNBajdWVVA4NjNLaTJsVC9xbVE5bzF6K0JRRjZNWEg2em96QW1UU0QwYkJVYktoNWxEaThJR3dBd1RDUWluVm9ZOTlxOEdTcG5oUnI4QkFZaElwRkk2MjhrMHRGV28zMGREZVBFZjR0bERqelg1TVhHNyt4blJ6ZGRYU3hMd3JXRmErYlplZnozUEE4RzNJUFFMdDl5RXNNMjRkNktwdVk1WWFUSDBuU2JrZnVjZjdTeDBzMzBuKzlxK2hKK0ZqM2NWRDRWOWRGNDM5UW1wR3lXTVhrTi90YlY0ckdIelZpKzF2Q0NuK0h6dzcxbGM3ZUZFWTdSbDhMMVVZRDdmTVg4MGFlYUwyakl2L1pnaUNGMW5NRmMzRm9IbzlEQTFkOW9jY0txazdHZUtRbnhMMHgrSU5HandnUlgwSlA5R1IxbG1oaUV4RDhqdXZoREVtU3EyRFBlVXliMnkySXhpWWQxZWhIV0hCQlczWUpXQ0lwbXFNYXExQlFoQktBRmkwaFExY2YwSnRaRWp6amFyY0lwL0hYb0NaM3BVaGg4ejI1czhWVkNaT3N5RmpZemJycFpHMkdrb1Z4R1NuTVYvSXhIb1ZFV2xST2xHNll4VTArVy8zYTdyMFlpOHVtbGVJZXBITXR4VDA3b1RlS01GUEZsM0hSUWUyN2I1YmhYWElNN2I5ZkJWQXVYRGQ5WTdDVHlPV2hJYm5kSGtBU0FUOVBlRWU5aVZoYTl1MzFKOXFsU245Yit4MDlUNWk5a3JoOGluWWROdHFUcmQ5KzJ6MG9nNis3c204dTUvQmpLSTVob2hpeVhWMyttTFNuTWl4RmhmaE9abXBSaGVMVG1zeDl1U0RXV252QW56ZUtLR1BXeUJYb2tZVzd6ZU9CUjZneHZhcVN6akNpVC9VOUN6RTE0WjhrczZQWW5ocVVyQ1RhS0FtbEVlMEkvZ2o0cHUwY2d6dE9sZmRubGZ1WXlsWUJHaVlUK2dKc0ZQUWQ2ZUcwSGFYY1lyNVFlU0tjNGhoRmNEMzI0WXkrdDVoQjg4UVROREFSb1NNck5pUGJVRmpsclVPMllXTkpaYTJvR2FSczdYUVpQK0xkaDhmVVQ0cVNKQmVtR1lpVEdHck1vS2lUaXNheFJ3a0VyMmxaTlE0QXdrdFF6bXI0c1NhTWk2KzJZUXN1T21tY1EvdnlOQXlaOUxLQ1NjYXBUUkcwRzRiZGlobXF6N09vdm9xc0FGRFFJSTgzL0JwVHhsWWprRmNZZHhSWTBtdVI2NFMzQTZDandrRC8xeUU0Y21nZG5vNDV2dnR3Q2ROeC9OeG1jZmNWYmkvNTVCTVRzS3VLejExT1UrZ0RQL25yZWx2b0tMT0IzZGZxOWNSdFhSdXlVbmZpcEhNbVJQbi9KOVIvSlQvSDlhS3NuMzhWMmFzVmlaaEExS3VHNzg5N1I4bElhVGtLait4eGhrL0I3eTZ1dGFWS3EzNFA3ZnlidHFQWkhRbkVjUzFldnJkbXlUREp5Qmc1YXZ0dksvdjNHN3NSMUR5Um44VERTTTREUVIwdGpFbW5OWmxtVUFvSkNrbDBXd1h1azVzcnlBZ3Rxb1B2TFZTdkIwUFh0WVA0aHRmbUtSQWpjZU43T1NScXYzR0Uxa3VTdkN2TzJVdmQyWW0rZVBVQm9LY0Mva3psdlVNNHQreFd1NW5kVHIzWUZFb1NkeENjdFhZR1BMQUgvR3dZNFJ4U3QvUDhsb0UwRkJyZG5tOGlaZ1lzOTJLRGptbmd5SjNwd1RtR1pqaEhXVGVOWTNZNlhzaUhxMm4xSFZuN0RVdFRxQ3U0dDdlOXRXSGl2K0V4ZmVDZmtHRDFvZ1NTKzRiL25Lek9uVWtmNkorbkhGUENFT1V1OWxndWZzUjJNQjZvN1orUlZ4bjI3Wjc3cE9uQzVXdkJ1eWZNUFhNQlVSSnBPakg5cjZRR0VqaEhkTWg5OXNuSk1WdzRkc2ZQN3FybVFSRGVOQ1BVS3dNZkFRa1RJdFhveGR2MWt1TGJCVW1QalR6NTByQjFrYVJLRkR6R1Y5TE5sdjNRVzZNUE9GbnlKSkNGQkpVVDhTNE9rQlE4SGVjdkgycjB2YXpSclJKanBjcVZCRnZ5enFkRVRTVFVGZkRuWHorZWVIY3pSTzg0dmdTQVNTa2h4NDN5Tm84bDAyWXZzdkhjNFZjSzZERmE4dmNpVWVTUzcxa1dzR2tVYm5Vd3VnT1c4QzdpVXJOR2tiZldDK0RKdVJLY2QwQkZGVzVMblNzYmU1TERZOW5oclhtMlEwbHQ5WWgzaVpqbkUyVHRYU0p4S3BtQVAvVXZOcXNwSXErUmYwaFduTHBFZXVqczkyWStlVlFrNC90ZlY4WlprYzdESGdONTRYWkZDaXl4OGNUYlZib2p0UU9kRE5kZUVKeUhkM3hZa0laZmhCU0dVczgwYm1nWUV2NW9uL3pDc01WMnp2WUFWLzJlWkk2V2FmUkRoWEJrNWVjdlNBVVB6alhxRGRmMWJrWjRxblpaNUpWVGFIRGZEa0tOM3FWb3R5YnNIdFZIQXo5aUVvSUlCQUVaeEJtZmEzOFpLaWliL1Z3aTNJSjdpckxpWXV0bllNNnQrazBFU09CbWR4ZldPOW1DNHNVT0huK1FmTnlvTXRIeTBaYW02NkFOR3NsU1JoNGsrbzkyWjF1WUxwM0U0UjVRK3ZtbWtjYjhvb08vS1NaaWVTZUZIYXZ6UmVHa3h1K2hwNm5LZ0hCZnc2T0ljVkJvM0ZSUzdYSmlGQVY3dTR1WURWY2VSYzVsb1Z0c0lBRDNIalBJd3p5QVcwMjVBemhWSXlOUlRPamJxQ3VsTWZkOWRSR1I4TDd6NXpLSVdtYVhlZlNjTjNlWEpBZ1JmWnR6MmcwTTVaQVBZVllEYTBPVDEwK09HK0pPZHRsWDNjMFVvNVBGUkNhcytOTTYzUTVubzFFS3JLRlcvN0FyUWRSRW9zUGRrVjQwK21XZkRFZytWUnlxSzVSV3NMalZIWm9OTmJ4dEFOR2RDSzJ3MVR5YXcwMTF4eWhFc2o5SHZRaE8zYTRWNEdiMkZoaHYybkhCd0FiVmRVV1cyNWhNS2kzUXdRdFpUNFVZWG1aYlhWN2tJN0VkRnIvM3V4YnExZ1BvV3J3S095eTBEVUh5djUyeVhHdzRlc0dqQ2RBY2ZuM1kwTVgyTHoxaklzUlJZZ21SRlVHSXdUa2Yrd1lsamRFeDBqSlIwUStVV092Nkp6bGFxdEZyeG9xOEVJZE1lT29neWpCdmphckhOYWtkQnZtUUZwY2xRdjM1ZTI4OE42anV3WitEalNOeWFid2tqcncyVlNRN3lod3ppL3FtSjh0dkMvem4yY0Z2a29WU2huY0pZUkJlczNnNnB2NndUSnNZY25BTGYyNFkvN0FjSHNmMUFrcEM4c3VxRG5hbC9oeEFJR1hXTWNUMnFpZUdmNm4ybnd6MG1hd283OXNUSDRyUjFKaVdBblpWVyt2Q0pxcDIwYy9Fc25Hd2hlSWZJRUJqNjN0U1dQWWNsTE5RSEZpM213RFZMSWlYWVdXSTVJQU1aRHVVNmpTaURtQUwzTTFmeWh3R0QxMzhQZktoOUw5R2xmSlZlV3pzbGxWS0c0MUpUWktCb0d6UnpCV2t6NTVUcnZFcUNURzFVR3pvY1hKV1VteDg2MGlXVE1tZjR2Wjd4VHBrZFdpT25DOWU3Rm9uYkVFTTZDSDV2THZSV1lpdFcwWWRRdG1NM3hvZEpnUlY5QU5vbzN6azEvMHlzUlFTVGtvMHFEWWZuUTNIS1NvekIwQUtXTVQ3SU5wUW1OZytqbUw1Z0R3c1J4cGxvdkRjYzFxcjVJdSt1QWFTdTh3VktHYTlpOTZhZGNsellpN2ZibzJhbzFwd0pDK3V2UXFyNnRUcExNdS9hcEp0VmpDOTljRjAzckl1Umd3VmMvemhjK0hFcHlqZUtMME5wbEVVbkJud0NPbkRZMUVGVWVlNk5YamtIb1FsN0FLT1oyT1ZqVkd5TlpwOHJxVG9Cb3J0b2tobmgyZDF2M1g4OUNyR1J2TXdsUkVDTWxqeTR0Skh6V25jN0pkYWVxaHJqOE9oQUduRVJYLzhGc0Q5YWZXRjdHSDV4M3hMSkZTUHdlU2NVYTVPdFBWY1B2WDdoN1NGZG5QTGpUMnNpRURMa2ZzaXlvZVZsQWJEdFdEcS80VnVES0RZNWVHSmsxQ1NRcDUyRXRSeDcrM3VaZHF5ak9yQ1dzZzVYMXFEb3hTUE9vK2tkYTRxZHVnZlFUcWZtWWErQ3U0TUxpL013LzBPYkZvWTFpN0NwU1IwSWVXcEFvWldUUDAxK1dJQzVNSHN6ZHBnNGRsOU9nbHNkWWsyemlRTTVqc1FSY2c1dk5NOFZGUW9FMFBMMWNSeU9IQ1NlTThzT2g1UEx1d0wxTzkwMFhGNi9LdjFNMDM0RTdIZ0hQZWdpSmdLMHMzTFo2bVE0bU05a0lhTWloK0lWZWs5RUo0L3gzaGoyWnp1U0E1Y2w4M1JwQ3F0SXpnK281T1FnUVpORFNRVFBUeVZDS0UwVnA1ckt2UFhtTENYajBpbFFhWklBcVhXY2c5YldhclExVk9XUDBpRnZqTkZqeUJVQm5penVnTVhWMUIxbmtHOWhhUWg0enhXMlVOU1did2p4cXIvUnVyMlBTd3QvcWlycXlXZTNxbTM2VGJVTjhYZUl0MUUrWFRHc3NmZ2laZm9FT3BydFo3dlZsTG45dVJiTGNuNklWT2dLc1BSSGNicGMvejRGcG9sVUlsNURGaXVsVXFWSkFLNkw2K0sweVBIUzZxbkNrcWRQZ0ZON2VJSDdaUmdWaDljcmZlczBBTUNPOGJsZ0FwbEV6SkVXNXgwbXlMbFQ4c3ZXNW5VYVVsM1NFVU5iZytndmN5ZTNXSEQrcGtReHRJOS9HQVdRYk16a1pWeStCTis1UkNtRld3QjBNRDZEdHNZVHRXVVN1UjNFMmJvSCs3blkyY1RsZlNYTUFZVE5OWjFIVEZIRmNwbkJsSHo4K09CNkl2amhDcERPUlhDUHpoNVZoUEtmQytEa0NVcFVtY2sycWRlVjNrR3lGaVR5dmhNbjFmdVd3cDNEVW4yZXlDZll2MDVTYUhSRXk5MmpNWVc0Ylo5MDZjWlFHVkFCMU1sNGErZGdEMTFXWThUWElaUkhEaHl5OFhSdUJhUDNzY2hSL3hxR3hEbFZWbHlIbmhsdnRJd0h3aUpNZ0MwZVVudy9ZbStFdVpSbUZvNGFiUGdkVEswR1QycXlodmlHT3RxbHF2NlJCRUE1dnJDYkRBbFBHNkxpWHNhUmQwQWlqMmt5VUM5UjI3YkVsZCtweHFVVUd5NlZUSEVzeE85QzU0blhtSHM5Z0xKbkxINWpIdTZ6a0NRVnppcGF5NVpzbHVTbWR6K0xWdnJQemUwOFp6Rmw1UWZEZ0xQVHdtMWFWQTVhWkdVQnJBMzVkaG9UZUtxZlpraU14elBaa1FXQ0piSFdIQ09ZNGF3NmJNdC90UUdSOWxnVUhVVThVbUt2aTlUYkVobEY3WTY0K0J6ZGFkV3M1ZVFJTlNxMFRyNC9GWkt6bzhVb1Qydk5oYUdhV3J2bGpmQ2NjZVR4MXZIVkw4NER6ZE8zc0poRnp5c0ZuY0V0SHo0cmY3RVNaUThyWGZIVUJyWmcxcjcybDJ4VU1QUTJsWkJTU0lWVTg2ZG9DNUpFYVNNeXNrSi9BK3B5VUlHQW9FYks2M0lHTHlpUlFvS3crUzFhZzA2K3Y1V2VJbUNlTzZPdlFvMFpwbHpRMFlUdVhqN29NQUxyaGRxV1NQRXI2bUg1WlVuZWszYWJMWXN2S3BleDMrcTExTHJHSjBSQWltQkRJZEVEdHprWGJnUEY0bktOazlnQXhGcXlqa0hsc0w2YkpNbUpudXpMY29BN3hOQVppUjRra2VpdjkvRkpZNG9HUG1acGtZaW1jSld4cmpIQmxhTXQ0TkxaQU10NEI2N0l2bnJ3bWM3akRqcFhHbzQwWnZ5eHVZTUV4ZHQralBqcFhpbWUydGE4YkNTaTFvUHpsZlloZmFHbjR5TkFwUENVc1NnMkxZaldHblUza0V1cS9TUURobWVDQWxlNHZiT24rY0RVU1lJdFVnSmVNamxrMm1YcmF3WDd1Y1VUYlBzOUlrbU9YZGVUWFNGU21EZ0REMnFoTmdGUFFlNldYUTZaYjJwYTlJdzVpQ0g2V2grMDhNVW0yb3RmSVlidVpGUHVzZkdTMzg4UVhOUTJGL3JCdlM3Sm4zYk1uUlprVWFFc01PL1VFMWRqbHNFMmFnaXJ0dDJaSXZBeHJkakpOMlYza3BML05Bb3NDOG1zdDVxUmtCaHdVN0xXWU9EQzh3aStMNm1uUThpOG50c2RpY21Ya2NVTWI0TUR4SjFQMGtVRGdUVGFWeldsR1NzYk9YenBNbWJ4SVhlZjNyVjI4dHprU28xTUVLY0ZqN25BNXQvWjhvK2tWRFV0L2ZqRTVjNjNhUi9RZWNva0IzVkFWeUdpWndKTGFCVjdhTngrYjZ5bmVtL2NjK05IMG1wejExQThGbUcrRld2VUhQdktFdSt5a0RlcEZtM3ZrSE16OS9UR2dNcVlwNWgzV21wUGF6MzdqV281RFkzbUZUckM3SzU5QnJHYm4yWnBaTi9kLzBnMGR3UmgvMkp5R0Z2K3JjZldEOTVCd0J4NFlnN0hma0dXZHo4bUZVdDZ2K25tWUJoZVRyY3VKZVI4dVh6NTJQVWh2YVlOSi9BekU4cUdWeThoK2lWY0ZTc0hReE9Zb040VzlpT09mdkIxdmR1RWg3MnJoK3o0d3BEN2xleWl6RWVWS3JKMnRYdXA1aktvUnRZMzEzVndpaWZ1WEsyL2hYNnBsTjBKM2tuUm1Ic3AxRmpKZGoraURKTlQ5K0lORHN4ZjJpdjdoN1JJUGYxdWFBMWl5SFo1OGkxSmdSamQwWm1vRUI1L0RkaGtVSjU0dGJCejlDS3E2Uis0QytoNzgrdmlRcDhta1NnVU1zdWlVVnVqU3NpeGR6UkIzVXE2WlVUT1NmTmtaZElUWUFvNlZDWDFTeDg3aGxNdURJWWcvVVpqYWI5RGFGa1pIeVNsMzMwN2RXeTVPSWdMdmI1cm1pWWs4cTF3d0N0SWRGY1dza0VpNE1DT2dCam5mZFhwOXFvTjBvSktQQlVETHJrYjZ1bFVidm9xVXlNWmRnZVRhYUpMbXhiMllFNFZnMTdvYzVuZE54LzBpV0l2MS9RMElVa3UrZGtGRUh0b0c0YkpxWVhKNG95SjR2SnMrOUkwQm42SDlLdEpGSGFHWVdOZFRsdDRMcG1UcWs4RzhtS1BsaERUeE91cmkxcHNrZzZ6SjhDZVdFNmNjMVFWMlRTODBsMHBUWXNEVlU3U0t4MUdPb0dqdE1WYldiZ0RSWmd6Q1VOMkdja3lnZzFIZGUrb3MrNXJrOUN1dVJqU1BVMFYrbkZ0UG5wQ2MyeGRDVis3NEhOZHlpdnJTektDSTVqeDNPQ1E5dnpsSjVQOFBTWTlibk8zWUtPdFlNbGRMTmpUaUxHU0ljWElKckNZL0Z3T3B6VlRWeFFTbjBybllkYUExNkMvOXlYVXYvOEdoZmtMbVZmOVpITWF3WEVYeTNFTWdKUEsxUnhJYThLeUdIdzJwenI1c0ZwUzFDNm9hM3BnQ1F6WVcxbE5lNXJLWWhLSnBSdVk3TVA4OVV3WEFBK25TNWF2ZEFZTkREK2x6RkFIb2lOV0g1aDNrNnpaK29NVWZsenlTYk93UkNOUkRKVzVrNnp5V0pUU0RVK0NHQ3hBa3ZpMjJnZjFSc0NmbEM4cWVoWHV5MEpqZGRhRjRrYktoRzhxdnEvZ09HYXhJUUpYbnJ1QTNSVXNZU05sM09XWktRVzEycHkwbDNMNmdmdjZQbDNHWUp6ZUNMVSt4bkh1RlNIaU9LNThFVmJoMlJXNXhhdzgxVXgyUXM4N2ozQTc5VDdDb09vUDkvNWZUZmgzUTluVzRvNmtMeG13L1ovYnRuTlBPYTZkOG14RUN2YnVhVWIwWWw1SEJUYkw2RWF5akJLd2JkQnlFaGNRL0hWZ0YvQ1NSb2NGZnpKTStHUVJKcnp2T3ZXaHpWak0rYzdIV1lZb2l3ZmZxbHJJS2c2aituL05weWVhbEZSZTFLeWQ5Zk9hbmlqSjhvZDdNRzZYVm9CR1RDbnQvYTVNaU00NmE3M0tqTlN5L1VOT0hRaDltWWlDUFVPZXI2UjVieXZQYncwUXJRUzRSR2wxOXNQd0EvWlR4U0puMGcydW8zY1ZuVkV4VUxPNHJiK0s4a1pOViszaGJkbG1jYVJuajlEcU1xeFovRUN5N0NsOG9OQitSQUpkOU0zM0ZOMGxTMGN3K1piRUIySzRENzJqbDZESlo1UjdTWlNzZU13YUhsbG51cTRQQWZTclEwclRGTTd5SW00VkZWcW9wMjZGZGh6Q0dzMmp4YkNsN1hoOWIzN0ZSY2VmTWY4YVdRVHlNTU1aVzVCOU54NGF3bFZKTGJkVllIUFhmYUdQL2VjMXVjTloyazl1RHlrUzN0cU9TOWdVaEl2MTM5UlVQaEovQ0NHZ2J4V25lYlZwVzZjL2htNlNVS2RkTEszdnBhQThjNUJMU2wrREEyOExHNHNldzVtOHRSVFExczRMNVlWWlRYd2hqK0NXK25yUnMvaENrWnMrN3hISkNWeVBYY3VTTGZwdHBNSUtDNHVGMVJQVzA5eEJxZ0xtQUZ3aDA2bkR4ZVhrcmFwZUhzMVFiRk5IQTd0WXV6L1pxN3pwUWc3N3ZYMjZMaURLYi9SUjN6UEJyd0pVV0ZEb3E5S3BURlZFQWd3WjhFUkgzSjMxd1ZFZ2l2YlRwV3ExZWtHeUtNOS9zTlJGL3l2c1JXR3ZIdkUvalozczM0N0ttRUR4RWVUTVFZUzZMRzhXWkRrdGRPQVRHWEovRTNxUWhXQWlENTJVc215eEtDSVhTOFhPdEVrWWp0S3R0RWhkYWU2cmVuaXNxbi9pMC9LZTNQeG9ZK1YvcWVsL1hrOW9qMmFKdDBnN3JEblloN2kzWVZobE10UHUycjlOUFR2Qmg2VWoyN2ZYa0FjODdmZzNzSzZwWjZpN1RreUl5SWgvY3ZPNVFNSENOZmVWWHI0d1JaS0sxNTk5aXF2K1NZMDNWSkRpdEg5Ui9PWW1JNlMweUtQZlJpSXZTVDVJN2lvTEZOTnZFLzJaaU4zWDZ4MUtiblkxN3BOemV1R2NUb2dLeTRFdGIzNm1KTXNZeHZqY0FFNmlIaHN5Z3BWclVkVnlxWkUzOS93MEdiSWZ3bkxIQ2dzbUZCbE14VGtEUzRkaGEzM0NDbUtNcDB1em1xZGxBdkVqeWdNcGRMYkxsVFZTNTFrVXNoczRpWWozREdtTThnaHc5NXNSdWJFa3ZETXdPQjVFYzB5blJ1Skl0dm05UzVPODBXclVTTmJHSTBVRFZ5SlNORS9GWlJKMnJXcWFDUmJ5OW00a1FjRUNTL3l4UUQxTithaXZFR1BuNTJzK1dhdnFXdHI1TDJYMnFQN0xQS0VJb21TOVYxdW91ZDZGT3lHa01HY0hiZk5WcHJaTDk3RGVvMVJ0R3NrYWFSSzFoenQ3MC8wNXRVM2dFTXltRjVXQXlzdGtmM09HZ0ZGcUtKek1CMHB5eWRQQVZsR0M4dzJoYnJiRTlVSGxjM1dCV2lXMnUwblJzY3l1bzcrVytWR2ZHd28xUmlPUGJ4bzBQMG1oUm9oU29PNlpvbzJRUTZvUnRPRmFLMzJqMnZhV0Z5eEhBallCeFJXa003YndjcEJpbjdiZHk3aTRxUXZTZVJUZUowSjdIOEoyWVBXdEFhVHBFVEE5RlY5blVxbVp1UW51M004bDdIR3ZKV3N3WGdJbWFnZjRTWUdRNXI2SXVXUE0xTkNjTk9DSmJRRFR2OGdUNTNWRTNRSVdHRGZ0VlVhRnNjaTBwa29LSXE5N2JlVXBZeHhHK1RjZjc1azBFUENQbi92My9YeVh1SG1ENlYwOGsyZG1aWDRhbW9UL0dyWGJnd2hBVUh5elUwbEtkbi9HcGZMUFczcHhDb29yenlSUVFKdUxUQ2dSWWRlYmhBY3RaMHUzV0sweUJETE1EMm92aVhWb2xHYlFGZ0FvM3dseUVtaWJjakpxQTl3cmJReWVRa2ptVXk1VFh1T2RxaklSV3hGSDFraS8rZmNxZ0tPaFllZFdVRFNKanFxVDYxTnhmWldsNURqUXlhOGlOMGZWVnl1cldCRmp0cGV5MGw3dHIycnhVQXgxRGlaNjIwUEtDOHRnNjFCVG1Cd0R5YWhFT2h3UDR6Y0tkVGRoVDlGQVNla2dDMEorcUlwMnpLeTZ1bGd3bHpCVzBSMVdTcmZQNFNmc0J2ZGt2Z09YVUd3SEo5MUMwd2dpRldrZW5Fd1pobFcySVB2Z3RjRGY0Y3MrSnBSSjJXQzVGQ2NyRjZVUUYyMVFEbWFhciszaktkMmlVWnZjc0Z4L2c5UDFSRHNVU3E2ZTYwZlphMHFSOGdqTmhZTm1CQTlCNUhLMG9YdU5tM1h5dTNaNE1qc1BucTFKT1pwR2czUVZWSnpYTnBSRzBaYU5BUEZJMUNmdTNNQ0Z4TVdTVGFQSS9FK3JFZ211WHNmU0pzek9HbEdIelBqR3pGU1FEdCtzbHMxNU9PR1hvZG1xcy9VSEo3ZE1CU2dKZFgyZW1MbWJSNG9KTjBHT3IzeG9zdVBvZE56bUt1eFBoV2FxNDc3MUZsSGcrbHRQU0RVL3RETTBTcHBrSEh1UG91NkZNZFFYNW40U0RQVVpaV2VIWHN6bGx6QWNrM0YwY2I1ajhHak83WmZGL3ExL01oNytBcHNvNnlJNXArVkFqUEFURjJESmNkYjV0Kzd5N1NQTk80U0pDUG5DQmcxNFRrUVhVVE5Lcnk3THhNQ1RiZUY5SFY1OThVNDJ0OGRraU1keHJncXl3UmZ5U01zdWpFZ0dOWm9yWjRUQ2V5Y0ZBKzZkNVF4WHpiOHliU3UyY01CekFXRUlPTUsvNC83a2FXeHBoNTk4eGY5MmpjK2FsQnBnbDhTaXFqS0JxZXdxd0VaRS9ucThucmh5QllSaGRJUnFrZTFOOVI1bDc3NGY5S01YZjBaam0xNEZDdkVQTmFqU0NPaDhnL2ZjbHFhZHFKY1dJb3Zya1VKN1hMQjQ2d0IzcVIreXNPK1k0M21lMjJGNDRHd2FoQnZTYWppWlBEWE93ZGl4N3MyN085RlovMzNEcng2S0ZsZUIxcWhPMUVXNThzSXc3NFB1RVd4NTFuZ2ZYeUNHQ1NIU0duNlVhWHduOGdabGNOc2xjQUdHZW5hQUpvSHg1OWtMeG5jNDdaUnVNQTRJTitVeUVjMXlUN1FPY3hxKzZOSXNmblRzLzFXTEswWUpIYVdzUzdheFBVRndYVCs2MCtwMGJDWlVJYUJBV2h5RVRjTWthQkNDMStHK3dvTHRJSXRJZmtSK2M0bmRyeEc5WUJ6SFpIQTFJWitxMmRhdDFGa1dHOFdrMXR2bTRMV09PY21XZWloS1d2MW94N1pRaHFnWTUwN21uY1JrNEo4NGd2RkViTEhoZFFFbVNYNlA1RmZjVU9JeEVDYllWNFh3dVJPVG5zMDdwdFZ4SXI3UkpQcTRrUTB3OG1OekZ4b1BTOGZlKzVabUhaamhIdkVxYk9XN3VTdG0vQmdGVFRSUXgvN3NkWEJUWWdlclpFVzRRejhLdWZLV0tmRnlUR1h1cU5pT0UwN2hJYUhNWXhvelJsR2lvZEpnVS94ZjUraHpVcGV5eE1BRkEraFZKUTU3ak5LdE5VZ1NJemduV0xPaFNLRVBic2F0YTBoUDBQYktKeXRmWU5GMHBocWx4d0owaThnb1lmR3BnNlRzeGRHR0t2WVBJMVhtTXkwYkRjQTVuTkxMeEQxc0VHbENMNDZ0SWZWajh2MkpNWkwyc0F3VklRUXprWEkxTDBsaHdyTlppeVdHNVBGWU5jVnJtN1h4aXhBWnVha1kwMUpQYjhLMmZLWnlrUnNQU05icTNDK0FIdVpJWElENXkycUpySnVkcVdqQWVYekZnRUtrZnA4Yy9uOUJ2VWxJKzBEVWxqM0FiYm5ROHpJdU9SMzRhK2Foam1QTVZTdXhIMEdMeXRjUkNodkErNkJKR05HV29WNFVtTVNqUTdZcWNlbkJKWFZUdTQ2T0ZrYlJaOTIrMEhSY1RjZSthS0VBSkkwSy9ycDFXczNvWCtpRTdKdm1ZTEZIRVRyQ2NTNGM2M3JkUXlUaHV0V3FEWGsvNFBnT05iSW1NWkRvL3ErM0JoK2RZb3czaU5PZFM5NXQ4V05IOWtXVlBtSytyR0xBVVUzZnNUR050OHgwOXM2ZURpNzQ4Mjc1RWN1ZzBKaTJXa2ZtMHdvdy9zNW4zOHd3eitvQ0tmRzBWc1ErOGp2VnNYQ2JiNll5aXhGK0UyaG9BZ005NUNoWk5FSU9mcnBrY2t1aFpTYThZTU1NMTd0aWlGVHJYQVJYMjFSb3g4aUNqSTFUaU5xaHYySEVRelpqY05jWEV3MEcvaHFmS2FsTGJxU0ZCY0NBakhocW1IUTFmclRVZkMwNExFbjNLZlRjdjRobUFuTzBLT0dMaWlqdjhNQWJISlMwK1loU1REM05KWllOc1dhTjBmTVJtZUIyQWU4NlFPc2hITFVDTldzN000eUdzUDl4MlptQmVxeGxoaWMvSk83V2liS2Y4TjhmYTN6dkZqQm9JNEZuUTl5QytLSHhCNTQzNndpNS9EcTlFbkM4M2ZwU0FBMndET0R1RUxZTDR1a1RsNGkvWUcyWXl1eU02aDB1cllTVUtGcDV4djJSRXFCWFp1ZmtIZFhGMytWejY0anZhUHdtekhoczlRZURoSWl4b21idHpQZTI2NUp2SGVWcmFTNFk5cUZVQndDbGtqNU9FbWxhek5yKzhUa1lPczFKUTJYTnZxNzg2MUt6T3Y5R1ByeGQwWEt5R1JvdTJ4K2l3NzJYcTBzUmhhY2RtaEhpbWNoQXhDTjc5Rmo3dHdmNWt4OGxKUkJKeDFZbU5vbHV0ckcrY0EvcVlPT1BwbDJVaFdiWnIzZUh3SW1qbVJHejdQeXFibkZCVUVCcE45UXptWVh3U3Q2WFhZQkx2TGJsVmZ5U3EzdnVuNmJqdkJyVUxONVMvT2N5Wk9NTlp2ZTMvMC9lZ3JLN0pVYVZmcHZHWlRqcEhOMFc0NWpmVzdoVEpCbmt1Mk5YRzhlRGxvSlBHVVdmS2dxWitpV0xQVi9YKytEcnJJSytVTDRUQ3c2c1NJNXV5cDBSY0JXWVdjQUlJREFwTHFkeUdET20wcFR3bWd0bmZnYlpZaUJ3T0lTUmNjTlRGVGVEM0t3bDNXOWRYTCt3UFNaOUdrU0FvWUJNQ1lpTlRGWVdVdFFtZVVIYXEwNzdSbkJCeU56endXTWNic0QwSnZMREt5c2FSR2IzNXRCUXpFQ2FMZG45bkR4U3MwZ3NXc1VTWDhLUUFYbGE5c1ZEb0x0QXp3VllWcDgwb3UrdTFObHc5Vk9Hc2ZvQ09Zb3c1azNHbkVtRVU0Tk11RjJVV09YK05mOTVYcUUxRmlVRTZBZTMreHBVU0FWbjJCRHAxRUdJV09XaS9QTjNhcmNsY1JZUkdZZkYrUzBiQ2c0N2tncWs3enpvM0hPL2ZNNjlEbXZ3WEZhMmlKNTNrcTFwUU5LYmlVdCtpbFV2ZXFPK1JHZ3RGM2xKK0V5S1FZMG1qKzRZRHRDWWo0empGMGwrNHFNZHgxVVVieVR3SE5SaEhSeThnd2xqNXJ1RGRKNkcvc0thMTY1Zk1ZbW1NTXhNR0xJTVRleGsvaC8rV2ZhdHJMV3Zrc1lQWVN4bytPclZMdGQzVFBwcEJHd0hFb1J6ME4rRXpNWmtDZkdmV2NRKzdlWis5ZFJLeFAza0ZkZDlxbGNaRlZHbDVFNFIvVThFZzQxMEFoSlNLVCtZSWpQWFFYN0liV2FMcmdPRVZoNzlOYmd1MWsyNEkrMWNVemFsL1F4SXVMQmd3czU0YVNJN3ltc2pkVTdxcUVjalVMMmM0aDUwWlZreDBOdGtIVURTVVltMkZjcFJZM2pjSEx6bk5QTHFvY0pQbWV3NkQ5blRnWGs4NG9ReXR5SDhFcCtHNVZ1b25hZStnVTB5ZjRzSDI2bk9hN1RhVlZKZlpjcmFsODE5MkpaOWxMVndkRjlHNVlhZUM4WVBubjFCM3V0QWZuK0M5WmY0Mnh5dVF2VFc3RTZiSTBYSGRvQ3JBWlJRTDd2aUdsYXdIMnU4T00vbXVwa3owV3pXQWw2clVrZWhwczAxZGJmVVdybnJWTHRNVTFIWWlGRWJHUDFNejhXMDBwQUxUZlhtSDZzakljRlJzaVJLM3FVRmxONGlpUUlrVktvUk5WcXVEbXpQNzl5N1d0L2llK015WWttWEpsdUg0Z3FOK2ZNR2lLdDI5WjJQVG04K0lRQnBRd2k1bk9JZXV1blE0dDJoaHN0YUwrcUduc1NEMjdGVmtMTTY2YmkvMzgreWFLOTRaMmhUUStaRWhuazFld1A0WTNrYzFJUUJVbXNZSXZvUzJ5UzZUWU42bkFJWmloL3FUb0l1ekF0OGpFVE0xY3QrM2hEWm5KU1ZUanhySnI4dFVranNaUzkzTzlFL0xYMmViTm5oeXdXMVVKdHhTYnhFNUFrQVhMQ0VYVkgzbU5KYnp4K2VmTkxYWi9YNXMxVjdpTWhlQUlVamp2YXlOT21nckt0aHpEU0xYdTlVTUhQRDlOcUNlVUpJYy9FVm5qR05QeTBrOWlxZXc5cDRwVFVhU1dHcTdaK0FtQlZhMnFkM2dwZTNrMU9PRXI5TEw3TlNkNGExemNXMC8wdmdEZ0JhLzFGdU9EK21JMmY1MFdLWWdtZ2F6L3ltNG1KTVVxNDVMMnQ5dCtQS1ZhQ0Y1UXBWeFBlV2J3elB6YS9ibzVGU0xuYkhqU0FMUDl3U1g4OGg1WmNERTRaSG5jRUE5bmRxSTdWemNNM2ExcTA5UHBORmVvQjludUlaUGV1Z25IeVVWT0M3MnBiR3pzYVI0TjRBeUhjZGxUYk5ZRzIrZWxtWUNKcW81YlltYW9wT3RDb2tPYzg3MU5va2RwcWp1ZzZDY2g2dzhEZEVjN3FjV0Z6M3ZCNkxIMDNpbEdnSHI4Z3RpazR4Mk1PZ0Z5L3ozYi85dndEdjNlZGxremR5NE1oWWdGazlZcGZTQ21YSzdFY0szTmZ0bFBYRzg1YWZNT25BUDc3UGZXdVBXRlpqM055VVFuK1UrTVVnWElKb1U3OVVWMkdQYzRiTWNxaTdKWk90QmdQbXJ5SCtJUDJCL3ZERVpvNkJCNk8rYjBtUzQxdHVWOGluYURwRmY4bjh5OVovTFpBSWtWN2tNc3pJN1AzbFhvUG5wVFRmK0NVaUxMNld5d1N1TmN6VUxYdlZIV0NYb2J4SU9wdEtXTkgxZXlCZ0hNd2VCTTlhWnl3RGp5aHp0YWJuZlIreHgvSExuVkd4cnhTSVdQYTFjZ1RpWHFPZDhyOUNkUnJFaGdrKytxZVlnVitkQzVveDdkaXBKVFNKQXlBSWsrUXloMVo1QURuSklubDY0QjREVUtKSFVHL2loODNPTFkvbk8yVTI1YUhXZzBiMCtOTDREb0VKMjRNd0o1Q0JQd2g4bEQvUXVQelA0TG1QdEJwRWVJenFoZWpUdDFBamZLRmpvQ1JkbWhpQzNINCtBbE1RMkhkUVZyVEJqREJGcmQvWFd2czZHL2J3V1B6aWVOeGpOWktwS1ZkZUpKQUVWL25hNHBYNXlEK0dzRHp3RG1QK1VmWlRDb0tkZlJhN0R3V25FNDdSbXdiejdmUFl6aGZYU05vTndRd0RVN0NrRDZiNjh2OHJpYUE3cEdSUWYwTFFsOTlpRWVKUzRENk5Eb1d4QUJQQ3lrdEtNMlozeW1od3NWYURlWWt2d1pMeHNMeXdBQkYvKzJuK3Z0VnFRYXVuNEl1MUtHSGVmR2xnT1BSRlZ1bS80QVFzL2FwT0FnMFZMZFhacDJydzR4SE1teDlNeXZTWEhtMURRWXg4WWcrRnVQOE1lNFloTTR5SzlicGFUTWZwV3MzNjBVdHVscHhIT2dTL3grR3RIWkdnTWJqSXQ5Z0tPWnNkZjk2Y2s2N3VWYjVleWZHamd2SU9VdDgwanNhSFdERnJFQXpsQXdXa2NsYWNkRklLZUxHR1JGdUlKV1lxNGFwYWQvb2RFb1k4TVpRSEdycitLT3o2K01hMUI5b3lWNW0zaDNua3BvVDI0UkM3ZUlVSHBITzBpR2h1bzFPYzhNcUloYkVEOEFJbVNoL3p6NjFPMHU3U1ZXbmxXbXdnaEJ4N2J2eVBRZGl4L2txWDBlTGdvZnorTnJCbVZoVk0yZFpLN2VUQWx1T0xxZWt2cU5UZ0VMUi9wTnJNL3hhb2xMaWZ3MGFQRkRZMDBaZThyaDVYaldmTFhGZGFvNkdEbEoybjVsRmxpb3JrQUo4U0cvM1FubCt6Y0JlOTBDWnFlMUFIMVIxNDIxbEt4YVNHZW8yTUo4WDgrZWlxRWsxNDUwemk5UnlnWlAxSi9rV3NGZGtNRS9FTzBUV2JyODlSZ3BrbVlzRDd0ZWV5NXczSjlTeDZtOVdmdWN3V1Q1M0w0NVJUWnpQS3QrOS9SZ0FLM1dLeHZhV1p5RXU5M1g0ZXF1aUtCYm11dGY3KzQydVRYdGE4dUdMN1FvbVV4WXFRMDVxcTg1YnY1S2xJbS9WNTB4SzI0THlFaEptR2o0M2VTNWdSb1lrQWZFbXp3eDkvMGpUT0ZCT3VvZHJxUnNMT1U3TURPcER6Z29CdHU2QzRVZ2tYM2pHMzIvS3RGdkpka091RlNqZGdhSVNYVXNNUU8zbnZ3ODhwdzUyMTh3dUFqWThOdE44MmxYUTF1Qjh3YWtQZlhnN2VJdDJVSjhmK2JZOUY2a2FxZmVUL2Y5YWprTDZTU1dDWFAvQjFKNUpNQkQzNDJNOFhjTG1SeXloNHU4dGppZVJidC9QSkhVMEZqSngwbzJySnBOKzJGdWJERGFrL01RV2w3MTVWRHNuc0txanNTTStob0VIZHJlR0ExK2hCZ1lrMmsyUFZYRzhwSFVDejQzcHhaR3VjaTMzaU9HMng4NzFwQ252SGI3TGpwbUZRQkN2V1h5Y0xaREJJMTB5S2s2b09iL2pqUXkwT3ptM3RWVDlwNGJFc3VEV3JCN2VQQkhYUjVJa0VtenJrRjR6RlhuTENXOXVDMW85ZmxsczJ6QlJsTDNwMmlzNDU5Nk5YdjdKdWtxN3o3WDBleTdOSjlpRGtXaXNSWFpZUUtDOG15SmtzZFU0N01EVE5MT0I4VE9EMHlvZzR5eFFkMkN1clhsVUE2ajRQREtIZ29wZVgyWHppTXp5aVQxT1Nib2lKWmZQUFA0RlhxOTg1TXFyZElOajVQZzY4TmlWRENVcmpzRitBQ29yNk5rNTRGYzcxcDEvL0FOT3F5R1Y2cVlGS0I4Nk1BbE9ITk9zUnRMZGt2dll5aE5XZGQrcGY2ejVReWVESDZXR2Y2d3Jka2dNaWlLRG54cjFFRDM3ajdqL0RuNlZIaUxVTythY3psSUp1MWpYaU05QnY2Q0IzenZQUFdqbGtVZDlBNnplUXBlNVlHMUh5R252WnE4Sy9UWGcwN1RNOUhxbEU0TjR6emRxdHdhZHl3dlJMeGlua2ZseEJkZFBvQjlDazhwdENKN3pzUjhhZEliR3JJWjZpM1ZOUklIaG81cm1maGdXVVMrVzg5S2pPNEROWHZNM2FxTU1nU3JxOHBKUDByUEgvSk85SDQyMEtCZ3lBMGNkSWJkTU5yWWt2bTZiVnJJUzY4d1AxTGN6NWx2U3A5djhHUVc3eExOQnh4eVovRzZBRVVrdVc3VDFuZG1kMXB0V2RQejZteTdIVlZIR0YvMlZOcVpTbWRUcXpyTkRxMkVIYnUwZ2VEdytJM0xzdkFHeWJxUzBkY0pzZENnMit4TXk1UGtreGJCL01Zd3Vldk9sUFRNOFQ0RGpQWm5DZmk0SEdCbTNiSDJjWUhRZHR2RzBmNWpXMERmREcrWkVJZDdVRC9vTCs1eUowKytib3hES2JMN1RNbm9la0crV0FkS0lWWUxrQjNaK3JUeUJmYnBscjJycnBxTW1kM0RvdkpMeGJMSnEvL1BCZERMeDZaOFVDSG44S1RLWTY2dkRvenlvd3JzZldEZWh3SE1qOTFmSmdJSGJYMFhKNHgwa2QvV0pjd2djQXdCZ29GMjRYbzJBc01NL0U3VEhQVTh3TU1BaWNwQVJvamd3WGxiU2M2UzAxVlVCUjU4L2NQQmVSUXFoUGhqczFkMi9MU0RqT1ltTm9PVEMybWJONk9YTWNxVmRXdUFiTWs5enVveVl1QmNkM3pmZFcwbzNtYWNUTnJoT0JSR3ErRjJPenB0L1lMWERCaUl1OTVzVHhOK3p3UVl4YmtIVk1kdDhuekh2OTViMW4vSHdRTEVMd2psWU5NSkF0WkQ0Q0JKYmpsMFpvTk5nZW5LUmZ3Y1dxM3hvRUxUMGVSYUpJWTYzdW9CZFE5SW8zUER0ODl3ekdvNVUvYjlOQy9ya1BpSFdaMysxRXVmb2tybWRSU2xXTHpJaVEwV2cwbktGcTZEb1VaSEI1dG9NLytPcldvODFqMzdnczk3V0l4WGdzQkV4cXVFZ0ZkMk5MWEJIZ1h0eDExT1ZWejVGRGFpVExnMkxtVDcvS2ZWVHdVNVV5S0lKc09vaHl4U0ZnSXVXMkxVR0xudElJQmdoWmo1WWRjckluS201SFVsbDBUbFpKbTVNZjBrd0hUR3Fyenpub1FMeVV6bnpGTk1GREdHQnpNbmxaWVdmb1FsRjhRcmMrWXFYSlhQMjJaNEgxYWExL2ErVlpMSUVZWEdDaVlYTit4eUFmWHFJZzZBREx1aUE2Z2FncFVMOWdQdEtLVnBqb2E1cmIvY3RvTUVUb3BIME5maHU5L29zbHZPUkkybCtmWFBNSUVwenFDajhieUhFN0VKYTBaYlNwekdSSVEraXJidzUyMTgwbnRZWnFpOS9ZcVBMMisyU0VrcFhqRitnaHZNVXlCOVV4d1p2dzRWcDJWTWhiUFA5eWRESFZ5Q0VsWjdTNTJPSDlxN0lWYVBYZkprUk1aQmxjT3N5NlNVUDg5TVBNTlRJVlFZN0ROM01KYmN4OUV1TER2TEZqZTdheHZsL1lMc3g3dWRlcXNYTk1HWFcveTNXc1doTzR0TWNCL2Y4dThRT3VUcXIrVEZxY2FoYXU2NnUzR1JDak5na3EyNUVQQ3ByZWxjaWFtQUV1Ulg5MFNuc0dUUCtGN0MyUG5YWHZrcTdxTG1ycmZpay94MERKL3hxenVZUktxbWpTZm5TRk9GSDJrU1BNQ3ZZOERyeXlYTW1pcnMxMy91V0I1WHhxYXh6dHV3eURjMy9aTitKRzRYNFR2b2tla1lZaVY5NGs5K3NYWUtHWFBjZ05jVEp1Y3R2WE9Eam45dUdNOVZKa0hNSUxLeEFqbzAxZ1RUbXNEWmxlWmpMb1h2SjIxTHEzbGx3ZWJUbWxaWjh5YUNxNG1RY3RUaVFwazRJcmxaSXBvQ3FmdWF2TkZ0dWN0TWNZcGlybUpicHlrOWZOdWdkK2RHT2lNVnRQVHpLM0FCKzQ5RUNDcDg0M2ZkNkxIei8wOUp4cVlJZHlmVVlXMENPZGF5M2ZaKzVxMVpabzIxQXp2N1AvTDdyTHljZGpvMW0wd3plbkpNN21sYUp0NUJldFRVb3Jya3E4U242aFhwa1c0YVEvWjkycWMxTG5MRE02RHB2eVk5aVJudWNMcDhZZUJmWTNDMzFmb2lIbGRkRzVDL093c3dKMU9HcWxxbWFpWFUxclVNdU5NcTliVS91dFIxSXVyTlVQWExUdHQzWXU0VXFxb1NOQXZGY3MxQUdjYlMraUtpOHo1UTYyVk9QdUs2L1VPVWlvK2tlbEowcFUwbVczSm4rWWZWaEJTQ0x2S2RtMjZqZC80eGk3SWdMTXM2b0NaRmJWWGxwTzBvdDYxK3lrWEhZeHpsVnlxYWFlRnlDVzlNdXZJY2oyOFFjRm1GbG9yb0drWHBSQTVab1oxM01PbUdKNktIT3NNUWduT1BkZGc2c29JNnlJekZ0eXlQS3NON2drOGlKQmVWZ0hkcXd2ZWVzWlh0a05FSkN3Rk5vcThSQy9kRFJpM0hqaEdubEJtSjdKMkw5bmYxTEp2eHBSWXRJdHZSREFQd2ovV0R5eGdKT2o4aWxweTVYZ0NpRHhqWUFjYlEyYkphckdTVldjUDFhbmE5c3F1dWZtYzhaTGZMZ08rbWorKytYclJKaytscU5xS1FmYThuMzQvVEpEZFd3ck1iMExFN084c1BYZTB1WDYvMkc5VjMrY1VBTi9aK0hnUjJjckVxVnh6Z3Y0dWY5ZTF5T3dLTW12azdKUzBCUmNjdHpmQVp3Z2Ivek9JbHl4akZHME5DK29lMG9YWnN3dWkyRVoxVXdnQ3VHK1dYVFdHZUNYdVJIdVVoRERYRE1Falp2RWJRdHREU0NwS1k1TzQ5NDYvYXRlc0xGS1pIenh2ODZ2dHdIaURnZTBHZ1pLRHNORmtrd2pITnRBQlBGRzN6bm55UlduMnlrUjkvNGs2NWxORWR4SFYxT1NRQXkrV2FyL0NsZXQ0Y0FEc0FGTHMvOEJxTWtpRmM1ZGhJcThFUzd2aVA4bEZGVFNVcHhHMzhTZXV1dEFmVk54R3FDTEVHRzNjOHdub1JCdFRybGUzV3hiUW1LSnljMitGY3l6SzFjbC9PanhCcndqU0o2YS80RUF2cHZCYnVsQ0xTalVETUJNaU1haEZXWmw0OVl4b25OSThrcWpxTWJiN1VtSEcwRDJsQjd5TGVlWmZZUVpSMFNXSXlUeldkazdRNEloaU1lN1VLazd6QWN6cTcyOEx6OGhyc2VhS25sVmxvanlxK3R2cHQ5UmwwMzcyU1hUYko0RWpCWXRWOUJDa2NGRVRqeHNORE5zQzNGcHFra1RQVEttNmtKay9zOFBJOG9wQmRZRlcwNUpFOE9MNEthaEFtR25hMGQyNkNwdENCeFFBdm8vVE9HUE4zbEdGMjZGOXBHVzlidEtsZTZ1S0hJRVFLNG5LYk94ZWRkcUk2RVRBbmJEUTl0K1RPZ1RJQ0Q0UGZDMUpwRnppSVBQM0Nta3BnK2xUWTlURkdXbld0Zm1UcnVYTDFBamdVN3dvQ09pMHVKRjc2blNmQjVEb0lLMnNJVkF5cG14d3dsSkswWTZQdkRkYUlaU29LdWZWOTgydGk0NnEzZkFnMkZZZXRtN2NWRW9ROXJtMmpHUE03cGVJRUlNaVZKeXlWUFpmK1RWbjRDa3lBNUVDZE1RRG5vay9OSGY0dGZCMzZnd0ZOMGYxRXAyYmNNYWplbUN6SzlvN254dWdTZGJEMWtKVFhodWYzNUJHZW1pWFg0WjlxblJscHA0K3JOUzFJQ1lzZlpaRWpXODg4aWF6aWVjSGFpcEw4T0taazJVbWI0djgwU1hyQkZWNjY2REgya2NEb1l4ZWZKZE1oVXp1MTdXWUZmZ2swRllaWi9jSkxCOS93bTRjazhSVExhS09ReUNsMWpsOXNmOUpPUzNTQ1l5VytOYUZSZXFVMzJQaFNvRXpRZmpPcmYyTURJb2RLcDhwM1dFeW1UQVB1Mnd6YU05Rk5zcjROYUJmU3pBcDY3RWNjSU4vdnh2RnhoakVGUkJkbUNkaldKM2xQNjluOUlJRVhoVStHNjR1bFlZUlEyL0lDUFAzb1RQdERsRy91SFRKZUxmcU5XTzRFVWpGQmhna3p1SVFnM2JKanROakZ6SGF6bUQ2Sk42Q2ZLWitubjRIMStRRVhIeDllQ2F6anM4ZWFndEtPRnpYejBEbGZid3p5NWJMNjNMTjRQZjRCUE45ZjRVWXJ2cUJPWXMzbVNrVklPejlFbk9uSnFnT1cvQUdwS2ZWejY1WHphL210TUFHTUt6b01PbXZPcktCemNxelJSS3VOcGFnbE1IQ216bTdZbFo3RWlOWXlFT1RMYTkrUi9GWldDeUhYQ1o1U012V0JJcHhkTHErS0x5dEV4elo5OE16NTBpSjVQZHRVaUZIUFIrQmZjYTlEN2czZ1lXQW9ZaE11VnRQK0grTFZqT0hzL3dWVkhTbjR0SVNyeW9hU0J6MnBDcUN6MU11S0R3R1dSTFVnUEtldUtOeXV4Z09zMTY0TGpZYUxnRWlCY3lPL0wzV1ZQeElGSlNXeFlyMnBRTDVOeFlTVi9TZytvVTFrUU5lMzBNMlFLZE8wMldvTlYvT1F4ZDRwVlMwTWdLZTkreXNROTVueDdobkVGV2x2b3dYcFZTTzRsL1ZjTXhHSjI4MDU5aUtKdW96YXJEYU1EUFhnTnZoMzh0cjhoY2c2dEVia0FHUDdDK0crbnI5YlJKNS85ajRrRjJJYjFJdGhQWEZra21vT21zb2w5SGFON3I1WTV3eUJxZXlseUpIcVVZK1UwL0JSa3pMMmdpNUxka3pjTW1waGJoVmZ2YjdlTmNnS3ZqcW5KbjBId3UreFFiVHNIUWxPNFpOclhKZUtHRTM0MTdNdGptb25QR1BlL3JNTVh6RW9HRE0rSVJGODArY2Robm8yY0dMdXdLUUJSTk95VXU3MW1sbU5Jd3M2ZHdUTDZ2eDlvd2pKZmFGcEVhL3p5aSsxNFNhU2JVUXRnOUdIYXJRN0NabU91VjFwNklraU8yYUM5VVUzMVpMdkRxSE5DVjI3UkgyYVNURVlSZ3pUclE2WkVla0plaDk2NkVXR01IUWczcTlEbjQvT2JjUDJ0Q28yU01HTmJqcy9MdGhSNEpJTXhzTjJkNmxaRVpkUTlIdFJkcU9EWFp5SE03a3RXd0hUZHNVR2w2dGpNK1RNVmJMVlVoYnUrbFhsZTVHUTQvakN2WWxRN0hYNGx2bGZ1RVEwMDdIVjhkZ09KWU9CLzhjUkoxc2YxbSt3RFdqZTdFZXVCWlh5aDQvcE1KaVQxVWNQMHQySXBob1dpVjc5SnNCaWFkejNna2ZkVDFLR1BwNktRUTZJU2NzelRMTlJHdk9KWFQ5S1lIOStPNVUyODZSWVF5Y2FhTFZhRXhjbzJEWTRRTkJKbWJDa1c1djk0UFRSc3ZpVW9yd1Y3eTFtQjd3WG5qVGNTSVNSV3VETUQ4WU81dlNzUzJNK1BkRnVOY3FlZ0FpMDg1SkVoazFOSjIyQlRJVG41M3N5bUt6cFE3T2F0bVA4TTNDNDViblFMcVBMb0pvRnprTU8vNjBNRnR4c2t3WlN6dzlMRkFQbHJmT0RPeGJJR2N6aE1CRzVLd2tONTM0dDlranlTa3J6d0FLN2t5Tm16Z2VhMHh4ZlFQenVzNUswVGRoc291cTVCeUxJZHJKK2dnUDRub3Q2dGV3L0tDNmFlRmJuM1JtQ1h1dXpHRlY2QWVuOFBLZkp2Yzd5S2wrVU9UWGVpajZmM0VsMVpGNVd5M2dpSkt2UXhoaGVoUWlUREZNWjNtYnExb1Uzd1EvVUMwV1dzcXMvOTdkZ3VBZ0lDQWdJQ0E0VDc2UGdDbEpONFJBNHBxN1d3Y0pxcTR1OXF1eG9jd1dxazdsSVk4VG10UGM2MlEwZjFIcDE0Uit0QVc4QXdGRjdjZTM5ZWxsaVNSV2wydlVtaEZmRnEzMFZkV3B1czVaTXBUY25wTmNya0pwODNrNEY4alV2akdaZXlRQjJ6Z3pPWDZ0WEtWdEFIKzdqbTB6Ulg0UVN5ZGRLNHFjWUg5M3pyK0hpejgvTHQyVHZDUW55N2VhRlJmUnh1QnYzZVBFaUo3S0cyYnJDaDNiMUdObVFtcXJIdXB6cmh4Kzltdk04dXZQS0JyR2luaVIyQUJXKzU1bVYyQ0xYdkwrZU9uTXJRL2wwN2F5MkVLY3AzSldSbUJJWnZWbGVxWm5yVzZCRUJoazZwbHl4SFUzQ2Y3VXQ0NVREMTl1Sk9NVjc4N0Q1bkV5TjZ5OGNxRGN0dHVObnNGbEFhUitBK2ZSSytoTUpUL1dEclBtTHdzNlpud0JLNmdBenBnME9xMVZJVGNlVkJick45dnRUWDIvWWlmOE9zbSszN1JINjdWZitIcUVkOXYySS83L3R1UCtIYjVmYjBuMzJkZk1mT2c1L2g3c1g4UHRaTiszcksvaDlsamZaOWp4KzMwbzkrMzdNcjluMmhHL1oyNC90NkdmMmRaZjdDdmgvWjY5bjdmclFkK3JxSC9OK3RTL1o5ZzMrcjBVZStyNnVqOW4xM1cvVjEvWDFiMVgwK212OUo4NTFWQ2RXYmVjc1Y2RThyaUE3ZGVBbzZlcXFNTnozVDRIRjJ6SktuRXk5RmxJN1RCTkt1SXZlYVV1T2E5TDVaLzZNVEc5QS9sVlFXeHI2VXZWYkljekhISXNMei9SREZBbnVva3BpUjE0aENDK0t4M2hEWTRRdXM0bVVuNVRzU2xSRVdGNVo5aTFTejcwdThnbC9XYXBaU0gzc3dRajFsS1JUTjRkRCtXUEZWd1I4c0xucGw3bTBQaUgzNUViVTh6cytDVzd6TnI0ZUd3U25mNUtpVTdqUmt4anZkUmFyc3h3bU9pQzc1N01nMzVNTXM5aUhQNmZRUkptNFV3Q01YWEtIUGI2VHJIcUVBM2w3RG1LUHZLUmRROHM1N210VVorZ09YT28vUncvRFNkS0tsdFFJK3BxS0poNC9BdktzWHJveXVuRHAyd0RmRDB0M0tySGVza05wZEg0ak93UnRMYnBTbU1ESTIwZDB2MXRxc3EvbEdNRTRaRE5xcUcxY1pIVTU4dHBNOTZ0bkxOMWtTeFJxQmVJYm85WGlWa1c1N2R0Y2haRHplZzgyYi9XbGZZajI2S1lmdVg0dXFBckVDb1Q4Y1kvZ1kzQzNuT1E2YVUwTVpiZkVhb2V6c2NRWjlSajlVZ0REVHluOEJiOHdOL1hqcG9iaDVoOFBLRmdEQmFSZlJRZXBHMkFsYzJjNTNtaGJHNE9USDV3SkEwVDZZeEl2V3JONXlxaTliZXduTDRWdjRKYmpSRGFNck5FMzZIN3J0N0VUOFkvU1IvdEJRam1Td0lEcHRiaXV5V0I5ZHVTVTFiREVDOHRycUJ1ZWVQTDEzZ29kbEdHdmlYNmZQWlZXRzlaZjhpNVdKTFdBWHIwZHBwNkJMVDBBQ29JdDhPWUVJMGROWTg3YUEveklDaWFTVVlTMmozM3pDRmhtaTh5TkI2eXgrZU5TVHMvMW9HVU1WaHNsRUlCSytQV0U1dmxjd1d4bzJNMERWMDZ0NEdVcEhTaFF6UHhHanVpZGkxYW5nQUpUSVJnVVpsODlacUxzd2JxRjE1SjhtM2dVZW5OR00xNGNxMGd5eFQzV29PU3dYMDFQOVdXZys3cnhwNStCN1dKcG9mdWFKaXpoNUNmUGhzU1I3UTlzRHlJSDliZmxqemp4L3pTa0g5a2YzOGtvcTBsTmNGdkdpZzBFckFNNkY2VzYyZzg0RklScTJhVndtaFFzNlc0cEYyL21DeDBTZ2EzUzVLc2VXa1FTNjNxTFhYWkhyak9CRXBpWVFBeGtuYWV6a2hSeW5FMU0zcEtDUzVDWk5YblQzVnlZMWxZN3Z4aHpEcXRCSTFBVVNhVnNUa25kNU84VndyNmtzMERsdmJwNDE2YXlUVzlzU09TbXBSOE0xREo3QjJuZ2hlZWJWb2RodlN2QVdvM1Ruc1VwejNueEQvUTNwU1BXU0xMd1Z3MUt6czNVM0hJMkhsbENyajUvMWc5R0pJV1lkUWZCaUdlZ1pCVEZFc3FISy9NSjBGbzduOVJna0tXcmZXcW81VXA2UzdCTFVHc0E1WS9SZEdVRGJWT2tZRW5GZGJuL1ZTSnpJa3g1WHpKZkUxdTVyWmFWc3FiZ2FJYzNaVEg2OGVHdnpidmc2ZDdhbGdreWJiQVdzQ0ttTDc1UU4wS3NBK29ZTy9wMEpFbThxVFBVNWdZQ0xSZmhrcGlHaEtUUW1TdGExQm4vS29sNmpYb25wcUsvTmZzcXdlRFJEVmdFM2FlOFA0YkZ1TkJTWU9UUHBOdkxhUnpQMjNob2RPVEowZkhubDV3bVd6RXdzYk53SGc5UGcxZXdXM0FydDJEb3dZKzB2cThjSzlWR0NHcjZ2ajJlTXp1RHNWRTlyTmR1dEMrQUxrSzhLNks4cFN0MXVjazVUc3NjZFRzTW9YMEdtSjZIc2xHUUozV1NLZlJwNVFRV1MzT3BYNXNhSzZaR2pmRVkvczd2bENHSWgxK2Uzd01XRXluNUticGlVYXBOMi9hR1U2WEJOVmVoeFBUcytqRUhaL01QOFZqZTlFdldSNXhPNlBxR2ZmZU0rMVE4cE9KclNBTkNpbWw2VVFacHRRZFQ3ZFN0a1JUY0pZU2FwMWZkNFg5OGdZd0V1ekZ4WUlVcjhoSkJtTjR4d0xkeDJJaFJjbU9uTDg4RDQ3cUFkRzlsSTRIN1J0Skx4eElDSUgrVnk2blRyYTExL1dxSHJMWXVQRVdLZ0JiWjMyZkpzYVhQVDRreTF6d3ordkNCTy8ySUp4SkZ6YTB6ZnRtRzNQcnQ1Vm5IRXNINXVRWjJmWERNV09GdjkvVk5ZR25sYVpDM04wQXEyZi8zNDJFdzhSUEp6UHMzZVRoRGpneUVvMURpd0JXdENBMEFQRDZiRjlhS2xZZkZmcVNvUURQVkNqYjRWeno3ZHdyWVNObjBYbVBvSjZ1em80SHNwY0RFSVlwN245OU45RVpnVmtjR0docXNQOGJsTEdaR25pL1MzSVlUVUNrK1NQZmd4eS9IQ1lPalovR1RJZExLclJUVmNXZUxMc2FEdlB6dDZiU0tzQmZzaEZlSXlKalVVRzRObVAySDNUSFRHejk2aHBxaVlrZDIxdWFLZGZ5SGt3cFRRTGxxYUZFVFhRc1RaYnZYeHZSL1dqelk5b0t1S1NyQUd2YllCNEtPaHhqM1YzSkh0TjRJencxWDFnOEsrbms1bXpiUTRrOG83bDZtbkE1R0pheEFYcnVndTQ1VFF4T2lzRkU0bWFUUloyb09oR3Z3bjg2SGt3NENIditxZCtWc0NnRE43MEJ6d1Q2TXhSazZOaGtoS0xvYzNESVE2QUxURmFVRXNzL3pZamVZL2VnYmhzd01GSFB2V1ZsaFNpZVBtb2kySm8xWXJzL3lsYjNMNEdyVnliTWlMTmptZVZjemFUamVMR2kyNFV6cSs1SFV0SFBZM2RvYmFWbGpxT204elAyaitkQ3h2NFdNanV1TnZzbjNvY0lUV3VKUnNJTXdtYUUvY2dva2cxMTlMS3c5cVpBZDlod29IeUk4N3FhanIxRGI2ZnhFTWYwVWtwK2VDUkllWWswcjBHVTdQcW1rcldNSVk5N1VCRDlBSG0wbWNuZEFJejQvY3V6NFBCK3lmTXlEaWtiaS9mZ3NuYjAzTy9oclorMmRySHkrK2FyV1hUT1dWcDRvanY1ZkFGREh2Q2JaVFVETFZMLzBVZUVPcTZ3UUlhZVdNdnVrVXlXM0YyK3dHd1lPa2Y5NkFjRnNOOUovZG9TMnc1Y1NHODQ4S0JBMDcwbDJMcDJpSVZZeFkzN1ZHcHdhU2x3NnpmUlFKRnpYcGhoWkJ3OE9PZnJXQnRDajQ1VXdSSjNTTUoySWEvTldiQzU5TXFyM0pTam5jdytsUS9sN3g4a1R5Skx4dkQxU1k2RU9HMjFsVXNVUWlraVR4V3AxamRsS0l6SS9ZZElFUlQvcTlJamxuUU1uUXNpZFNtS0QzYWRDaFdUM21UeWFhQ1dyZjJmUmRvSkZuY3JnZHU5UnhMbkphTWVNcDJZVkVzWGZkbTlQQkRzaDdKT1RSOVdsOEFKemNQeSs0RnlZczI2VjdSWnkwRFYzNHFlTUhab1J4dktuT1VlMkNLUEs1enFFd0lzZVltS1FVVjJaRkVrT3dPN1hFT1FyVDZXaU5VMVU5U1JYM3M0a0drUGExaTRVSEpMT3BqYU1xZGVKYnhIZm9aY3gwSzlTL0NMUDZiV1hOYlQ3VEZ5MC96UzV0S0xpRlk0YTFOVHhNQXc0dnFRM0lWWVQzRkJGaU16Qi9UcVVKNElpVWFOQmtCb3JDd1ZQRWt6Zktyd0pvc2lwYnpweXo3RVJ3dXRtYXJWTGpoSkM3Z3AySW9uTGdSdHNqbFFZZUNLV3dqazBhNlBJRGUzVTZxQTZNV1RRZ2kxV3RscEIyaWJ5UmExRlYySE44TkhPTW9LMk5SQ0N4cGdpQncyUk5mNTF6YWhnaFk5UDlQT3d3SksyVGFwSU9FS1gySWVNck1DRFIwZW94M2o1S0thekVyMTFRNFBMMUpMYkNNektMOVIzKzZiMU56L3hqekREdTBTVENiUVpBTDE5NjZvb29Pd2lXeVR3bUtjNmpoRGYzVjJJN3ZVRnFvbTl4ZExQcmpNWGRrVW1zdDY4WDRuNVFIbmxmS1dwRFFlVlF6eFJvVFFxUWpIdTd1WG1xYkNmRXRzc0FvSVBjTXdzMmxMckk4ZUF1dUUyTWh4ZU1mUXlTazQ2dFJPTnUwM2Z1VTJjVTJTbTZ2NDBPUnhtanZGbG5WaDV0blBwV01vcDd4UWNWWGNWZjJ2Ynd4ZWovWTlZbytmbHNtZm5BWm1CTjk4UTQ3cDdpTmJnc3dhQ2FhQzBYYXdRSE5DZVpQUVFjTWZHdlkxRlJVaXh6TmliTExQU2Y1ZmZsWllNaGZrWW53UGIxbTVEenBEeVVtclF3bEpvZzR1aTBjdk45dU1JdzNNQVVSei9DVWUwc3QvMjZ3TlhRaVJaNEloSUVGd3I0ZkZKamFqa0RvQXJLd3c5NG1RN3FnL3lpbHFQQWVTeERnd3hhYnZOK2pqYUU4S0VJSFlTMGQ1dkI3VEg5OFpIK1N1L05mV3BGYjFtTENIZHdPdlhBQ29FV2poK0hodTVPd1E4Vi8zRDF5cnZLc2lqMG5QTnZvSGlRYTFNK1c4NzdBTTRBRnAyL2lMVXpHWjlVMmk2MUJWYXhCK2dhekhIeXpnb0xnall4M0lWTk8rNVhpM2owVGFyS0NvVTVENGE1UDdOWVBKZm9Udm4xQ3ppemZMdGNuOFJneGd6ZHErYS9QWVlQT3lCZjY0RjlNeG9nSFlEdUxJT2xSa2lZTTFSdityN0ZLekxrZGtTeURHbDRRd2ZmMkh3a08zbkh3ejNnOEhVQ3FqcVVqdkg4eTg0MisxNExKZW0xSmhhVVl3M0I1R2Q2d0NnNWZJbTl0VCtzMGZ6WmJYeGM2ajZSUUx6TW13RXJiNUtKb0hWczJodjNMNDREWmxMeVhLQlhXRmZ0M3paZUVKcGdMVmxTMzJ6dnYvcnFJNE1NMEhNMkNFTnV6SmZuSE9nK0xpWFJmQlM3MkYrUVYxREFFTkRaSFpXQmk4RndUY0JXSDN0MkdVaHY1NTVlcHlEZm4rWmxDK2dVbTB1dWQ0dzdmekZ5T3dKOEdKNno0RTdtSGNVNlhYZlJibkJTRjVmSGJUeGxnWnFhQk85Y0ZleDBndmNsNE9lb21ETldGNG5GaWZZbzJJUzBBaHpONmhNWWVmOXRMUzRhRUFNSmFVRFl4ZjRUdlZIc2s4V2ZhRGZwOW81blJ1OTl6WFkyalZ5UytPS1h4cUNEVVVuZDR1cVNCMTZqYXY2elUzTWJ1NUpna1czNFRLMHFhYXk1V1d5QWk1aU83WHVva0F3T1prV3g2WjJqd0xUeXZmVCtibnRiSnVqV3RvZGk4S1VVcTlNdys4MUN6SEIzMldqYks1UG5PK3JOVTNrNWgzSzZEVlJSeDFPWmRNVDhwOWZHSUl1MDU3eHUrT0cvaDY1RlBRa1hSTnBrbGRUaUVXMjhLSEJ6UitEeGlUYjczY0FYcEluQUZwZU1qaVZQam0xRW5yQzlnQm9OdWtzWmlBRWQwdGxTeDZHOHR2ZTNieDFUZFVRQlo5VXlzbVZIak14bkl0UlJkNy84S2hrbnpoWUNpU3pxZ0FtR204MGdUaXl4RVE3OHpmcUdxYTFnWjIrNkF1MFJqM200SWhsVlZ6MlU0TytjaTd4M2Z4NmZ5TjkrK0VtcFdZQTYxOUJ3NitJWC9aaVRYL0xYWDg1NVhwME5lTWVYdGYzdlJYVlMwd0FHUkt2M3pGWnZRa0wrak4rc2IyQ2FiZHlDeGI2TGIzUVZ3ZjZER3UwUkxUNSt4bkhOMzFpVjMyZUFEa1A0V3RtY1dDdWVhWW9Fc3BLS055MkxMN3E1R3ZXcGtFK2JicGxHQUJielp2bVdzNCtqNWxVWFF2SGVTZEFZWHZUeUI3NkhuTnFxZU53cGVGZW04NUxuYUFkalJUK1NINFhiYmRjL0ZnbVpVOTlVQUgrUzJtclREUU42cnI2WEZXN3g4bGdFU1pkWWt3dFd1WUhUQ1JWSGFSNFZpL3dQUUVYbkd5YnVhMng3S3Y5VGs5TG9PZTI3NWlUWHkyT2NpV3dzSXZQTS8zZkpFVVcvT0ZKU2orcG1saUxnQ0FURUJONEtESjVOTjN1UW50YzJuYlRIMXN4RUFkcTh1aW94b01yTDF3ZFdVdWF0L0FwS0JXdmR1dnJ6THV4YzRVZGhXbmhMZGdLSmpnWW5LbWs2T3lKWGVmNGwyaDFyektMSHk2cDJqY1c4dDhWWE8zR2RtU2YwUGdKbWVsa1NDQ1UxbzBtUlpSVm5zWWVZODRCb29wZnhiaEozaTB3Y0pRS0dlTEtVTzVhbjhSVEZRS3dESlVoL1p5aDlCRDQ2Y0M4dnZpQ2FIWmVuelpPTUxDY3pxelhOMW5ITGpUbUtSYzR2aUtYeWp4UGhpWGFyeTNMakk4MWwwUTRSTTQ3TVcrU3pvYVBuZldJKzY1aWsyUUlhNmRLbWFETUlkSVdHaU02TlllbktlYU5NMXNhbzZhYTQyK2JKRmcyeWFEL3owd1puL2JSczVUdWlvUWJBS25LdlVmUXB4cERCRGk5TkhrS3dQQk1WMHVmZkVralhjWXV3KzBFOWJ5dGhGNzFsOURrYnloOW1aOFhLclN3ckRyYlR6Ylltbk1ZeEZrQWxmK2Nva2hGZmhtc3JuSGx5c3VueHJxMlNOU01ad1B1UkVrVjYyWFhvNEF0RnVMVE5BTEphcnJ1SVNDdC9nMEk0ekNvemxtTjBIMEJDMDAySE5WRFh1ZStlMFoyeUJJdTdleUVtc2UyMVZiN3JkODJENkx3WlFGdVBDemE2Z3VSQ0NxRWp1cVVoK09xNjlGUHNmQXRCeDM1S1A4V2FnRzUrd0twbGtQTzB2S0MrdGZuOHlpdVlXVHEycllVUlZOQ1RhbDRtMFJQbkJMUnFncy84Z3kwZXlVUHR0V05NUkQ5Z2lTUmYvUkU5TUthcm14UmREZUdnNWcyTFdBQ29nVnFQZExyV3NUQ3NjVGQ3YnhCU24xeHBPZnVDQnl5QnRjTzhRUWEwTmcwU210QWh1Tk85cHpkRXBKb0pJWmxjWTc3UEtjL203WURONzVrNTl1aXhGbmtDa21wSEpDaUc3NnVwU0ZPaVB6WmpReE9LTWwxTUIxTzN1SEJBb3o1OXFKTkwwSFdNM2U0VWpIalNTVVhIVWZicFdPSTlaVjNBaHNITEk2a3dLRk5aZ2xzSzNnS1VRYWVFcW5XUE5ISUJvK1d6RXdOckZIQ0hHS0lONVBVbm12Y0k3YnFPaExncVlxSjlRUmRwNmlERENmY3QrNmQ2V3I2VVN3Vko0bW5Xb09Kd29rYU9vaHRTN3AzWXJ3YWswM2dDakhOazdPdEJOUTh4amNxYTNkQ2lOc0dhU2dkMlBrSXFrR2cxazd6bHd3czVDU0srVmovbmVCWWIrR2tYN084TkNwWHJ3b0FtRzFQODV5VjRIeHpCS0wyTHFyc3lBRUM1bVA2UTZ2QWh3QXlLQmZxbjhaME9KV2crdUNZMW9WZmV1NlRiSmd0SnBYU1BMRkxrOVhtTEtSL29SQ1YwT0NxZmwwSWtUSlRSS1RrejdVeWNMdndHcVFTcVBPWnM0RlpmV1F0N0Zhbjk3VloxSE9STTIyTGFQbUFoa1hVaUt0QUIzMDlxTk9jTEFUUTZCOTlaS2tlaktWYTd2UXVBTnNPSzZzWGgxTENVbEYwam53NG91NnZiT1NTZ2lrYkk3eGg5TlpFbXNROFROajRoQ255UnpwZnVlT2JVQlVOeHBNamowRVEzd2l5M29DSk1DMzJkdnZwMlpxdklBcklhVUUzRWxhUEtBbDB6U1lIdGdGa3ltQTZPcmJWazRIL21ZeWh1MlcyZldIVWQ4V0Z3SVdHQmdxNGlYaEpHUUJWZ1hFbU9ubkU5cmFDS3gzQkZMdWxtY1k5K0hHQVdISDMrRk9ndzk3VkFGMXZSTUZYZGpMTWl0d1NacnNHdlZvZVhkYS93dFFpNUgzQU1YYm9US2l6ZzNGd25UZ3FOYXBqZC9KRTZ1NFJYZHV6OTk5SFhraG50VUF5VHlXZURyMzBjV1NXSkMranN5Y2ZaSThHblE0aGI1M2w0TTZSMyt3VTcvWXpYaHlLU3lXaGFCOWwzUmJnMXozaXFqamhWRHBDaEg3cFIrMTFlV1k4QzhhZkJhOG9Sd1dubnk5SFFVVlZFalY5VC9ENDFLL1kyS1ZNZmZGWEdhNVdmRnJpTUtUTHduaVAzUlI0a1pKOVN1SVVFZFdIOUdxUnhLTXN6OFFXNkpiWFRTSU5KcVRVN1M2VnFyMUpORlFwSHdLVGZ5eFFEanM2RWVQSExrM29hUWpFZk5iMVFPN05uK3lyS1U2aEpOb0Z0QTgzd2hOaXJicXBWbm9WUjFkY1hETFNxTEVoSEFYVXRXRkNjYUFMRk44UlpLVlozOEpmbmJOOGttODZIYlo5R1AzdWVzNlpNZGhSOTRzZldjcGFFRU41a2VianB0SGZXdVB5dk9meVFXMmFqaG1MOEl6WXoyWEVsYUtlWHBoMEM5SW1kRTdiMUNRNjlmQ3RTZk1jb1RCdElwNFlxWmJEUk9OK05rVnZxWCtxbzFEQ1hhbkt0dm83YmVsWDhSMWpjdzlvcVBSdCtqWmorQVlwUnRGSmRGVm96V3ptZzJkaDJnN2lNYVF4blJKUGROQW1sN0hSWG5yTkZ0UHlGRGNQY0dZOEVzcnFVdVh5MUZxM2pVZWk4MmZBdTMvMEZUeHJEMGlnVk5CcTlYR2kzcC9BeVplUjZUT2ZOTzQrenJGUVROVThuTFlyYjFhcEZvcmk3WUNMcUhSNUpoNCtQVE1aYUl6bHJkczZKK3phSGxwdHhmOXN0dm1TSVVjWEs3VlAzTzhZT3ZrMXl2R2s5ZStjN1NGNURZR2F2Y1VMdmpwVjdCTlFyVmU0WFNUK0ljUzVyalBCSEZSK29MYWpjN2ZaYkoxS3NlazFLQUpRbzJLc1VjaWY5TkVRcEQ1YUtsdUZ0dmg2NW5MQTI4S1pzeWZXZFZjVjZ1dFFCS2luYS83aHFOdWg3L1ppbUN0YzFSYm1CYXk0Y0o2V3lLWE9ycUU2bEpnY3QvOUVCaVhXWStNblMzeWE4cVpmajlxSERXS3dJbmZNbWlDU2lMcFFWSG1sTHNPbGtuMGtuK2MyUitxdDFnVktENWhXZjdlejNHbGlYZ2NZM1lCS1ZyekVBNEFpUTdhbEtaZ3RCOXdFam9vaHJhTW9UYU8xWVhwck5RZTA1THZIZGNUY1pOekk5bG9sZWdKbFNGSzlLSmF1azBVd1JyWW5zUnJmNUVJZ0U1bC9WazcxV0p1UVNMTVF4RWRBckVhMVpQajVCS21IMkRpT2hoZVczTUpGSkFWQkloNjMrRlQ2SjFydkRPcGU2Rzl6M1c5NEt0d3p3OGIwZUcwVm1Hc3hDdEp4aVpZeGZxcStTd000YVQ0OHNrcUloQjhLWHFTWFJJV2N3SnozYVJRMEJZVHIxanBPTm9DWEJEYjF1YmJocFl6WDJYQzYxUUhRa0M1K3pKMUhmSzkvTEo2TlE0Y1pwVUJNWjhkVm52cGNnc0hrOFJGcnF0ODB5dERJblVsWm9odXpPUG5lTklybEx5L0QvTUV1NGxGRFBLWmJkdG5oZWdxRUJveFhOMU5pTjQyaHU5WHJ1OUNpQTVwQ0VGTFAxL3RHbzU2cGY5Sll3OGEwbEVQNDF4KzErc2JSV25IZy9tT2lrVkJDdEYwTktWL3VnMkFvTHZrQ0M5eVdqOTN6bXgybHNiMU9MbzhjSmlYOEFFb0V3NTVlK1ovaXhNY1FhdGg2cW9hY2xGT01BRDNrbFR0cG00R0tCQ2ltTnUxd0RaTHBBdFVCclUvRlh1emI5a3dHNXF2SWswV09NSi9CSWwwc0pNaWw5TzByb1J5cXBFRWl0eU9CcFpmOXk0UTg3MEZzZEgwVnlqQXZrZG45MkZ1TUVuZGhNVlRUeXBWTC8wbHV4S0d0eGxMUTQ4U3lGRXRsaXh5T3AyNUxqU2NYMTlHN3Q3bDI2SkxrMGFsUXN2ZHAzcmVGbnphaHZSaFJFbjlaNDVTQ0drVllMZzR6cVd5cDZjVjAxc2pSRUx6Q3JTeG5OSFh4aGxpL3c5enBReEc5WnVPMW04OTM3ZkZvUHBQcXNraXdCZUZ6ZTNVSUJBNjEzT1dKS0RYWDNIYWVZcDNEbURuazBKSlllVXlPb0NmM2NSZDR5RW5BY0NBeWYxNVNlUTc2dWRHOWdNSFA0WFdQR01NVnZBNjdaM1NTUEE3V1VhVzRoSlI2QmlPbnMwU0hEWTFnVzZqMytBQUc0YTNESEJSZXU2d2o5U0VYWDE1N1J4RVcxUEQ4OHFrUGsya2xmcmRWaHZ4Q2VWU1NjVVlnWEhSMEl3WTY3WjhOaTFxRDRTQXR3d094L0dTSlIvQTY1S3ZTZ0Q3RHR5cnVpenBDcGpYcmE4c2hMa2JXVGo3NjZtU3JZQkVCd3hndG54SHF1VmVNcWVBNmsxcCtrVnBZMUJWNTBXQ3NwaEs1eXM2enVLZzMya2YxK0MrWVNOVXFjZWZ5QTVuZUNTYlVRVDNtYnFHMTVNVkVPbDQ1a2l3UWtuRVU1YVh1aVY1alBrb3c3YkhBdkdKdDhiNDg3QVJ3QU9VRC9GV2NSQnQ1VlhLODRpby9aUEc1S2IvT21DdVZsODVpNU1lOWJ3RnQ5WmxsdHpRZHVhU0NmODhVcXFIUlp3SjIrL0YzcnZzOUVuQ2kweERPMkNUTUVBSXVzWEZscllBN1hhZzBEUUpybU1sUVg2aG5ibXZUVmZNNDZud3VIUHpYZEJPZmFzUVdseDJRcnduSkdoOVp0cWJyaDJTdFl3cHR2dHdLcjk5elVlVkd4SzZUd2phZWZ5Umg0ZjhCbUtVbHVVZ0gyQXJDc2FKazZWVlFJL1pjMEpUWThDLzNpNDNIYlVHaHhiMCtkWCtyN0JNVnZvRHJVbXZ4ZDBTemVhejQ0WWsyNHc0L3pSWnRSYUxUVVBpWkFOc0JHZTNCL2hIY1NHeUNsZ1pXZ0RyMEMvcEJDaGppOXhoTnRCTDJiQUFaWUY2WVQ0Z1NhVHZIcVJQeThXdmhzWXJVNUZ0cGRTWVZwemVMOEdkSGpqL0tKRlR2UlZkKzUwUjNVZmg3VFFBYTBaY2RucjR4ellPSUwxQkdheTE2MnQ0U3pUWVlxcTRTemxGVXk2RzhxQXpVWlozUTJUYlE2L0xvTVY5cGJnUXVqeHp2RmVGYTFYbVI0VWFpTUs1Vm55cDNYNTEzcmJmcHNPUkhaSGJzVkNsZUo2b3dVWXNaMVErdysxd0JVRzRSTGhQZXV4Q0lhL2lxMEZtZXdDek5zREdxM2s3d2UxVWlyb0syb2VrY0lESFpBTDB5Z3kweDlhYjBNVnJ2SkpCYjBWZVpmblh3eVNGTmFUbERaQkY0ZmFhbUEvODZVcktmeTdGMklub0ZpWGE1VXdKNURUSEFGUU1CZkU5YlZMVjd0Rm9YOExOWHVhdW92QTZHVTBveG1VdDkrbGtObTk5NGpJSjZBNXBBN3hWQzl6M0hDN1dKbmtxZHdVQ3VaVXVCNWpScTN6dndiVEliNHIya2t0TXVjTndIb3hGeGZKOWtyZWo1N05icFMvUkdENlpKTEJuWms1cmdOTUdnV0ZnSU9EZ014aWM2WTkvcFNYejVrTHFzZEhBZEpHYVRpQWVGNXg1dDNqeHZyRVZ5YjZQNEh5cGFqaEtsTGtBdCtlOXJ5OUZELzh3RFZ5Q2tIdHcwbklMY004UkFDOUJjT3hHV29sR1Yvczk3SDE3b0xuUjJJY2VpK256UnVLTE9iU2ExM0NlL2oyak0xS1BJVG5Dc2ZqRDN3MTlqekV6WFk2c0tTVjhlKzV3MzdGaFR4L3VUZmVnODhJeVYxbEpScDVCeWJLVnE5TWFhVjg5VGQzMi9IN1Z0dDdKRFd3VDNPZCtGTitneGFLN2hqMmhzWlhwa0tWWmtTbjlIb2lTNnZDV0VOSklrNHN0ZjBreTBURkc3RDBJbDNibGVYZGNMVGxuLzZjSHhkazU4eEpPYUtuZHlTbklXWGsxU3krOENlUFQ2SUN0eEVjZXZ4d2NMMXFsbjVDQWVzdzllOWk0dTZKVk5YdTdTR1gvZW5LN3o1REFiYS9ZTjJ6a1ViTXM0ZldsK0p6VVhXS0dTOGk4QzFDYk45V1BmZW5LUGMxUDQ4WmxWMjRnN1NoWWJHUU9oWWRmZzcvQ1laVklVVVFCK0g3OG92Vll5VkMxQkFYWllWQ1R5Z290NUREUXZxZ21SdkliV2UzcWZrdnRPaU5JSEpRU0t1SSs0TFpmU1lYQ0lzR3dFb1VKWGl5NXF5U3Bua2NTaE5QeUhqZ0IvYmZDQzdaQWI0VmI5ZTdMVEtYd3M5b1F0alFoRGsxNDJtdnNITVFhN1c4M25MdWhUanhBLzAyZ2VzMWZkOGFIV1AyQ2tTeE5rQnA4amJ6Q3ZDMnZFNXNGYUhvZFRZSE1tN2c5UXcrU0hzVVgyWWsyRDFCUnNpK1NHcmQyRzE1SjFPMzc2ZFZvZWdYSEhZUjdZNnlkZHpwVklkSVVBcmlTL3ZHMmJlMzhxUXlNbWdWRDNlTlRPQUJiZ1A3d0VPZFpaVUpieXZ2dXZYU0ZmYm40SThwQXF1MVFIeFhKZUtIUmYxTFJiNTJXa2RYV0M0STk4NEZrK0JzbnY5TnF6amg0S05CS3UvcjBCMFY2SnUvVnFISWdWSzcxZVkvYmxsR2JVMVh3K3NYTE1VTWFlZUJRN205NkRsV2JIY3RjZ3RGZ2ZPV2dCb3M4N0RZUytFV25hNnh3NUFUMHlnUVh5d3lSK3FqTFFZelFIczZtdlRINnpFR0s4OVF5aEVsMFNxU3J0V2hOYlJpTmNxcytEY2x4UFFsd3M1cHpjVjRVM1ZHV042eUhHMnd6bFpJTmR6NG1IR3ArQm9sUUdSemV6NE0rUnhHUysvS2FkSUxUN0syMmR4OUxhTFdmRFdBUjZGbjFiT3BEcm9rZUU2N1htVHRTdnh6VTZRSXdVZXlsMUoyUjVYSk9WNkZDQ3B1cXdTcG4wYnRDNmNrMjYyVHR0WFRxNVh1MC9xaEZNdmh3eU81N0c4ejJGS2dPekhCQmZ6Y2FNR3J6R0FnbDAzMWxLU0xiWjFkQ0xMNzdhVlBFbm1aWi9MNGJCZVZWRFg2djlpVUl0RTkzT1JtbUN3WnB2NDdzR0lmMlI1QjFmbWVQdjB0R1p6RTRuQWUrazJmWFh2elpLdVBZWGZjNXdnbkpySFlLdDFaL2l6U1JKZldtWDhhMVRkMDlDMW55MGh5QWgrWk5NTllVeGIwNFp0UWhYQjI1cnRXTFlVYThwelREcFhSNGFFZWFYZE44RzJHYllndmJUTThuWGNQU1pON3FFdlFGdlc3TlRHb0hnK3BPcTRPRXQ2MWNzOUlvam1rdXIwNTRQZ2lGRElMZktMRDczQjVaOUdWQ1FuTjlOVUpsSnY1cU9iMStiVXkxNGVBekViUmJrR3lLRmNFRDB1Y2RhaEcrck5RWWc2N05rMEEvM0pMbFJoUFByaDdaSnZ3NHE5YXdiRVhHK0t3T0QwWExuQlc3M0dwNFdSYUp6enkvMS9QQVhqdmZ1NmNOT3piUDRNQ2lZaTZ0djZKWkdWalUvM3FnQWJOWFkyUHBTRm9PR0ZQMjZZK0VhRTdiamR3L3U1M29LM1BKTDlKbGx3QnFFR2QxZ3dVWlhCN00zZkpYSTlibDFxdVVZQU9mM1JtWEh4c2doQVNMZGRhQncvckNhaUMxNXV5UFBFRlZEZVNuWVdOK1lkbzkvYkFuYitZeUcweDVqd2RXWHFJbkNrSldsZFBBZld3bS9zQzRRaytSY2tLUDc4RVRmTlgybEZpaGxta1ZsMzlKWmM5YUpkSGNvT2FhY2VDci91TGJNU2NYdjl4czJRek5YS2lzcEs2ZGpIVDVVakhGWjZqQW1QVXdWNWRncXZLSjZmTVpUNmhQT3dBa1NleVZvSUI0SVBLWlphc2hocFk0VXJBamY5U1p6ZWgwcEFXc1JPcXcxNmtLRWJpWVQ5bzV3ek9HNnpwTmI5dGoxUzJ2R2FNNTBoMC94TEM5TUlOb0xIczZFbWF5aDk3bmRrc1dTdkVaWTJReXUwRnorZW9nY0Fpbmpaa3NqbCs1elVCSHBQRFdVSmJhSnY0dzl4R3ROT3U1bWdRZUExcG9Ha2xYTWNpVkFaL1Uyd1dEd09taWRjUkV0dVU1SkJzVUFOMTBQaER1Y0VlcHl1Yjc5aTY3VllXU1ZKUTMrTTNGbi9DN3dScTIyZzFYRFlXR0grdW5zT29zVjV4N05xSnkyeEZLRWtRSStNQUMwRzlZRmN1N2JZellIRjc2NHV2WUt6VUl3T3Y5alI4K1A2ZWx6TE5OUlFQWkZ6SWlxRm5JNnRibFY2VDZJdHNEak9OSWd5VkNqNXFkZlh1Z2s4UzhVeDBKTDZjc2x5TzdTL1pvVnhYZXFDRko4eGJpS3h6dE4wNnBjSEpBNEFWN01mcVdJcmc4dlRuT3V0Y1NwMWJqYUYxakcrNUNRMW1YMVJWWTBsZERubkh4RlhjczNBRnlESE81SS9raEhFS0ZrQ0R1c3JLS3hXSzdiYm4xb21zY2ZuTjBMUjhnVmpOTnVEMW5MbUoyM3Z3aUd1QU94Y1UrTCtVN1dKU0d3NE16UDhUdWh1eDhhamFVaGxyZHl6RWplQlNZMFZUbXNXNHhNNWc1R0V6M2E0elg2R1pwUDl0aGthUndFbEZsdHBRdjNZR3BvYnF0Q3Nxem1VM0dqNXpDcDc2c0xRNm1oTVpXQ0l5SlI0TTY5b0RlczlzcHZKZXZTdktJTS9BL1NETExTU09MVjhKSytLOFp5bW05cHlvZDhCQm50SkxaVmUwMHNQay9EQjdBNDFJSk9oT0NDcEgrZXp2dmErWmFVb3VaSkhxTS9IZE83VXlybGZLaVJpUG5Hc2IxZVhjQVZkRGI0WWVYNDlMRTNLZDZRZGtwNVRMdnBZQVFHT25rTnFIOUxUSTdiMXNmZTZCbit6VC9KdDdjSC9lTlJSTjJxZzA5TklmSTZwZW1wTE16V0RhTUtEaEdGbUh6LzRxbEl3VU5VUy9xSFNhREErNzNwVUNCMUhsM01STm04TkNOOFN0Q0RYR2tsZTBZdUJrdDVjYlljd0krcXd5TUlkajBGUVIvdDFTa2N4U2ZqMHlsWjZzZjFkWTBsRTZXS20rRWF5UHdqY09QUDZsakNNbUlnNWlZZFo2eGVTcHhzelhNWUF4cTZtbTlNcm9Nb21HbzVSZTZJVmIrZHdPVjhkUHo2UktESFhRS3B6NmVMaGpSTEdUai9LTy9DZllHTUU3LzJOLzZpejJmQW5Yb3kxaHlCMmhjYmsvRFdraHVMaDIwN1dmQ051TWtwcXB5TFI5c0hMQ0hWcWwxRGxYcEVQSTNLS0UyWmlTc3Y4Zk9IbjA3a0pKWjVyRzV0VTVEd3lLWTVZU3VaM1NST2psanBxclg3NnltcGp1eDdScmhYT0hoNk91U3Z4VjZ1aERoSERGM21OSlVKbG1JaGZqTlZ5NE1zM1hRbzlqbVdNcXJzNWtmNXZBR2s2MWFoa21FNCt0SnZRbE5obUFVcTluSTlLa3lNdklWZ2d3RXJGZ0Fqd0J5VGh5N2QyUzJ3RFBLYnNqR29nZnQwMTdhV1dLU3N5eTUxbDhRUWloZ3Vtb0FHdlFhb1FraWtjQnkzUWw1alFrVDJwd1ZnUndManJQZDlSOUNJY1BTUDVwZ3BVNmpzSVlRM25NYzExMjc2K2xhOGpHd3ZVb1BWMDA3OThjQ29MdDFxSWhUcURGTGFNZEY0WmpSczhpamFpdEpNZGNjMWZGREdtanJzbVNFUDlVWEtJQUlFTXlKVHhVSm9nNUhIZThadmI2WXdJWGR3aHNIbnMrMkdNK3FqVFBGU3c1NEtaY3l6NTdQdFlSZWphRVRtUmU3alRBWTJ4Z1dDeUpJZy9mMnNicEQzSkNRYVlZbTVsZW11b1QyVkNnclpTY1pLclBrTVZlUlFQejYzVWxPbCt5eGsyY1BKT1ZKL05VTnRYWU5XVVNmaC9xVktXRmxIWWtTY2ptNXQrbndPKytlcjJxNUZtM1g0enBRcmsySTBOZmh0c2VMa29PNnBPSHVhYm5iRlE1UTlxQWZ0cXNPLzdOYnhRMVVzdWJIVEZjblh4aE44UERXSTdyRzFpSlhpa3dBeUkrWjNoY1g0Q0RqdlQ3a0FYTytZVEIxdU55U09lY3Z3MUVvZjJxSkFWQXV5OHhEc1RWSkxMaVdvcUdkVm9GcDRHR3JWTFhGd0tHYk9EY29ZaHkvYlVPcGNsZ2ZCUXRKZnVxd241TDJ4NENDQkRwdUt5alhSVGNmc1QwTGlySUVhTmMvMGxITlllN0I3SFlQUlVpaXl5R1QzMTMyZ0R2dDRTRmEyVkEvd044blN1UUNDNjRZVjkybDMyS0ZkMjRZRWxDTk1CamR6SmN6M3FSR2lqSlV2WXZxTm93UkJQYXdidHJxUlY2S0dRSHM3VjQ2aHByQ2lSTGFYY2VLb0Uwci9qYnJVMy9VbEpmWlRuQSsydmpZQjkrZHJsVy9tRWoycVora0lwQmNwSXRvRis1SGhTOGoweGVHa3hUTllqU3B6U1EvU3FkSENoblVRa2NWMWRGTnpmNHNNWW9Pa1RZN1I1MnpYZ2ZWQ2NUYk04K3hBU2U4VVlFcTJyRGtiNjg0QlJ4OHlTY1RBbFBYdTU4NnRhOUtjanRmczFNR3JtcW92Rm1wRjdQV2lnditTcXZqQ29IbkVtWGhEa2lHVTFpb3NiOXd4WFhPMVpxendWUjVBWmFVU2F3dG52bVozMWJLOVBlN1RzUm1RUmtwSC80cHRlemlxT0NQeTdWcmRFWUtkVHdTTEZnT0h2RExqZ2x3SkhXcUxpV3J4ZmxFRW9Ccm5QQzhFKzhQZ2k0Ri9TQlBaek1wMm04ZnRiaVJkb3AyMjlMNnVlTDNiZDUyUFV6N1Yrc05lU045NmtnMWw5U3k5Mnd5LzhmWTNPdGxsU3k1T1Z5ZFhJdGUyNHBnUldabVA4U0RCekFUM205WjVCZzRQV01CUFNKSkF4UE9JR0UyQ2c4ZGE3UUtjdXpVNEZnd2ppdi9nWXVML1BpQzZVT2NDMUt2TTVUYW9tb0RyYU1Dd3dGWGlPalZlTGtHdlIzNm9Id2FmUDdDKzRJSmxnU1plMmlyTmU4VVROeTU4ZHRqS3lMQnNabjNzc1NySVJqbVIzbm52NmQ1MVViL3FuUzYzQnJsYm9vV2JXOWVhTG85d25Wa1dXcklPREtRdEJMaDJmTmFqWENEYktRR05YYmpNcVJadHRiQ3pTaWxzTzFPdElsdGFlWitMZmZla2RTMUhZL1p2ZE42Z245REF4djQzM3piNTVDUVFEZkluQU1rRVZwazRMR3V2Q0NuNVpVREpZUThySEhEZjNIV3hKUGdOTmUxN2QwelJTR3VOME9ENURMSTYrQlFzVkN2WGZjMWVEZ0ZDTG5oVWltWDdLeHAvOENncTZMRzNBNTc1ekd6ZFFSU29GVHljb2hlaHhEU09NVWVPWUt0SWlIRVJOaVJuNkVDMnR5NldIWFRBTXN6cE5LdWx2TGRwaDZrVXJsRzFtWHI1YUNSQlZXNnZQaElOdTJialFuTjBnZzZhME1xTEh1UW5YbEV5eE9PWHpzdWEzZ2I2V2s5VXc4VThGQjN2OVFNeHpOdkRUMGpPY2lncHZPS0d4aG1XcXpZdWQ0TDdYd2xDVVFTYlhMY3BZbGNRQ2d0TWEyanVreVhaWlJnTHQ1NnRnK0pTSmNFcldqN1hCaGtIRENyalB2TUhmK3Ivcjh5TXpzWXMvam5kTnMrR1lIUnJPV1NkOVF0bzdBK0VpZFc1eDF4d1VQYWZudzd4ZnNuY3RydkF6UFptNWdHUmxRMTJBOWpuemFPaVNPU09ISElZTVBWYjloTnppaUo4ZmFtWXJ5cnB3TkFHcElZM2RmUTdMWHA5bTRqdllCMjZFbXo2aEZzQWdtMWp3R05xbk1ySUZlcm5hNUh6eE9EN0hYVE9uWW5mMUs0NzFDUTJWUU82N2FFN29vMlk5blFITmhSMUVMRTd2UloxTStiTnNCd0JoL2JyMTZPc3plVFJOVVNpVjFOUHgxbU1vSnFVMFJhR0NNTEE5NkhVVXFoQ3ViaUdOd3NvOWUvZFN6YWI3VjNHY0htQUpIMXFxd0Fmd3dNRE5ScVRZOWJ1cTU2RU5rdHNWODM1c1M3aTNaeU1OaGtWSlV5ZC8zMitPZG1SNy9MQmNsZTN2VkkxS2w3OEtIa2xOem5Cbk10VmZUUXdYT2FWTFBVQVdJakZ0STBHd2xtb003Q0RDWFVHNkU0Um5UTG5tRkF3N0pobnZwb24vTXYzTXJldW10UWIvdmlJVjF1Q3IzNldQR1ZydGVRa2p4SGRBeUJ1NkZpSnZxK0lheWlRcUdBQlZwVHJobk1vYUFmWjVoMUVFSnE0akNINkJHMldrU05LdTFiZXR1cC9KM3dqVlN6R0J1aEk4NTg2dE5OMGtzd2hRSkxmTjRuZU9saSsvRnNrbjF2Z1ZkOTg1WlpiRmQ2a1BiWFc3TWFSRU5pNnJiVSt4aVpkZXFPMlBBeGQ0eHNoSUJmak9IYnI5L2g1RVFtcm16ekFzQWhHa3A5S21WTkQ5dklJRlNjY2J5UXBxbnpwWnlvT1VOckpiQ2NqZUJ2enM1eHlySXZwUHF4dFlKcFpCQXlqWVU4UHRTUlB0QkUwT0lhT3lSbjJ0czFRdmJFd3lzNmw5aCtQQ010czZBd3ZJMmwyeG5EQ1lLZkpIaXFLUzRXTzVFTzk3QWtlRVVvNWxVRUZjV2pJU0YrNS9xRGNFUXVPdkt5T0ljdVJaNUF5V1ZYRjRBYSs1NXRoT0RoaGF5Q0dDdnlSV25PSm5OYVNGeGdsR2p5MlZFZXgyeW5TcXh4eDRDc2xtazFFNk1QVFdlcUpZWEc1QnlmVklFWkxLMjdXQzU5b2I1Unl1cS9mand2UHlFdk1WTlp5QVNFNDhjUWs3Yzl6dXdsNlFXcWVYMEx1c2VDMThiOXo1UXdSQlpDcWJMMFdoTE5JOGVGdDg4K1R3a1pvcS94bnRla091V3N5TzY5V21uNjRVQkVadGJZTXJwVHI5cmN6QVVXbm5TOHZvRm9GWkdMbDJnOSt6L2hmc1kyVVQzQUlUaWtxRTE1NjlkUjM0VzNmNTNXRTB3VWdJUnVaVVpVVTFGMzZ4aWlURThzdzhNOXZVMEdhcDZMK0VnY3drbjZsRTlXMUg2K1BySzBTNTlPc3lUN05KWG43cFVoRjRtQnNIMmlicExLVXRFWkQwbERJU2s1ZWwxV2F4QXlScEhaUml0elpzcjR1VE5WUWZXNVBQazFkd0RjcnRmZW14ZFllazdaKzBYakVZbldzajRRZ21lNy9ybmlvT1NNRHVUVmRrMTRCVy9MTStIQ1dOaTA5YzlJNEJ0bmRvMldqa2NWY3krclA3aWhYME5sd1Y1UHBLNTNBMlZGRTE1OWtLWkh0ZUhjOGpYYVoxVFhqWHd2VitEeHp6YzA4cWhqQkt3RW5rcVZ4U1JoOCtYeUw0S3pWNCtnUHc3RmdaMEs5ckRsYndGSi8yeXBwUVVkUkhGRGp1RnJ2clRrTUN4ME10MFhob1oweHFWdDY1bzhOYUhsdHgyQTVIRjZKNWxKdHR3QWVEZ2llemxySXJnSERVTjNoSkYyMFRrSzlJSU9xMTd3eVFNZC9VZFF5QnBsSVNrU0R0ZlVZQk55cU9IMFVXZjJ6anphOFI4aG5hN3lzSWdQZXNGdlRrOFFEVW16V1BSckl4YktwVGw0Y2RudWlOb3Nla2VnZGNYbEFOakh5RHo0MmJYa1N0V2dkSjJMSzU1eXArYVlabnN1bDJGd3UrbEhFOUVxNUxCNEJJNzhqYU1nR2x3SDZFR1NWZzBKOXIyb1RxLy9PNWtwRzdtTHVpVUFENEYxUFljVFpWTHI3VjJVRFo4ZGZVS1B2TUlNamRBeUdaRkhWbllJWVlEY2d1ZnU1dmdFbURySHBISEZ1ankrWTFWamZrWUVSRmZiaSt1RWdjVkUra2ZESEZGZjRqekJPc1pTdmh6RGFONks1N0l3SWZORlZZRGxyTE9wSEhGek5HVnRsL1dUU2JYZW5ic2o3MG9YdTVtYS9sMlc5WU9wRHpOSERnYStqbi9YMXAyNU5Iem5iQ3pVWUdBTTE5ZzJ0T1hWMWlpanhPaHcvWWQ0emhRZ2QydDdLUVBNNTBSbVE0bGNTSDFHbFNIanRrVnBLdm84V2lFM0RPYUYzcHl0N0EwK1A1Nkk1UmhaZXVROEtaWHNUaTlJeWRhUXZsZXN2WTcrT0o1Q1RXcXpIdEFNME5DSUl4WGxxREhpQlZzbHRZWG5mUm9ybHdQRm5ZbjhpZlllOVNYRmRlUGc2bU9NRlBVdUxsaVFmTnFkeU1FUGp0bGNPMndOYkhzTWF1L094UDN2WEMvQ2tudFZoc0FzaUd2NUhnR0p1bitON1V5ZktvUUZkelFKa1g0cHNweWthQ0FWM2RtME9CWG9WQXNHOG9xUlBKMFVmUzhjMTBUOFB6a3VoQ2JWbCtuSnZ3eGFMMGUycXdVR1ZFM0xGaElvRnBCcXQ0dkx3ZmNSMjRDczhuV1oybDRiNndjK09UUDVIWmp4c3diMW9ReHJMd1FpNmRpUkJhQ2ZXMVBZWVZ2QkVJQUVYV20rczRMTmRpaHRFWnRlZWVsVEZFN0xvWXllVEVza1dvT1ViOHVnZkx1VklrRVFnWms0QVZJTThQKytSaUZyUklEM3JXRm56S1lUVXgwZWR6bFVaSjI3cEtmbEliNmxjd0hSOWRSK1ZHL3gxS1ErZk13b2x1cnk1dTA1MmoyV1h6V04xWmQ0ZGRtSzNvQ1I5MzNTY0V5clJKZnNteHBDdjY4cndrSFJEdHprZ1NYbDc1YVU0ZXAza0wxMzBFSjlLVnVWZXg4djFiUUtINFZ6Vnl0eFpvWnFmR3B4eWk1Qmp6RFZIQUFWNUVUdjNSMnRGSmk1VmQwV1NXSnZQWGtBQmYrTXB6MjBGVDhwa29UbytQZkN3dlhTWVU4b1NweDgrUFVBVHNITWVqbDdETlEwVThCME16KzVxV0RrdmNwM0ZrWElWSXRySEJBcHRRcnFuWHR4RWhtL1BDd2ZDUjlrNEx1NlZ0ekxaTmU1UnA2MlF3WUNGc29HcGxNQUpoajJwd0JzMXh0cTZmUG4yU2UvQ3RDRU00MW9xOU5Qd2Yzc3dLK1ZxTmQybWtLekNQZWhrQTliVE1hOFJCK0VmaDhaMWR6QXU1cnVDOHJpZDZ0T09XTjJqSTlNV0E4RHIxckJ1Y0FkY0l6ekdsV08vbGxPRmdEWXFxMEg0KzJ2dk03bmZ5ZHhObkhLazMwU3hxQkNzemxYUmtIYnhyQS9zcS92SkU1VisxUHZNeExMT3BYZmV6L1hXekhIVHluWi9aMjJJN0d2ckhQcmhBWTJweDhzN3RkOUI3SHJmS0pCQ09YQk9FU05Ec1hXc04zOGJtcmlzNWhpL05ZcWg5bUdiTytzSmIrYzhFZnh6RjI2YmxrS2F6ZDJHOFFjL3dSQ3dhbnFJQnJRYnJvd0liWjBwWTZWQlVERmJ4cW4rS3lKWlRKYnRaNXhUajhvK0RmYnBKY1VBMjZIeFFCcTV6anVtUXFhK0Q1d2NLVlJrcC9zNXF6R011TVIrUDJqUTFQNGg4REJSaTJ0S3RNc2dsL2RHVXBjdytDcHJuS2R3cWRxcFMvWXdLeU5XSTVtVGZxQTd4d3R6Z1hpYmxKRVI0b09ZTHBpSi9mTzYzUjFzMzZEcHZMRmcwbmNpSUd5MjU5STV1dzM0b2FNbzlQcG1RdkRvY2Q0STVkNzB5OHdJVFJxT0FHTWdoTkZWWUJwdUlUWXg4ODRWMGdUTGxJbVFqK1JnWkdhNm42Q1JURnEzZS8rOVhFakJXTmFZVUExVnZwNzdGeXdYVHZBTkRteXpYNHBPcHAyU21CMUhXbFU1V0R4THNlRUlJdFNKTmNiNDNNUjVENytoby94aHNaalU5K0hDYm9oVE9MWS9abEV2TFFjM2s4R0JMRFY1M2Vtb25sZXNNNGxwZU5OQ1VranBrTjdFY3JTejBXcDMxY1ZreE5CQU1aUm9aMzcvOVcwaEJRRnhxemtIKzgwcnIrdzRyM0tKdEdQQzlkS0lMMk1tblZPVUk1V2Jac2VRdlA0RVR6OVcwSmtSaU5qSDRvSEdVek9lQjc1ZVo1UjQ0SFlCRFVDalZMenpiaEw1clV1Mk1MS09iM0hPcUFtcUtXbS9udmtweWphNUFVOGFIQWJGMjgyWnJVN1hHN3F3RDE5bWg0S2RlMlRRY1F6NWk4VCs3Y2dEQ0t5dVN2NzZ5NncyMTAybkRSTyt3UWVDUk1CR1EzUkNqWUE3b2VlT3FwUUdDMlBUYmxjSndyVU9tVmxBb3psSEdrSDNwUFhQZ1lKajhUSUxRSUtYUEdOVFdkQXMzbWh1aEw5S2dDcUhhOWhuTlFmejFGQnZzMCtia1ZZSCszZVNkMThRY0lEQlVyN3hmTXdEejlCOUxDbVBReEpSRVl2UFVlQ3MvUk9LSDQ2OFJRdEpxSFR6NlVUR2lXNXdnekxkT2VwVzJTMkVCd1h3ekVxRGpIUzE4Q2ZtS3M1cjU1R21lMkVRN1R4eVJLOXdyRFdSdUNwVUhaZmxyVDJLdFRzWWh1ejB0OHM5dEFHclhxZjQvOW45a2xqMzlHUUhDUEkzOTRHelY3WnZSeXNhVW0zbTlMR3BiNHVDZGM0NndCdmpVUW5wZnE5eDEyZEFHUmJYOVBGSkgyUGo2L2FFdmU0eVVaVmcrSHA4UXR0eVBnOVRPdFY5TlBiUjRFdzc5angzNlduTUJWalFjRG40SW9CRmJINHRNN3RNZHAzTlROWmtscUt5ZVFxc2FGZGU4RzgxWEZNRWNwT3lRczFYQWJ2Ny9wcktQdWFyUi8rSEtnREtteWxiZ3Y5NTNZUWh2Z2pXQTBsWW9BcHFLZTkvTWxKbGY2S1RxeWROSWRCSkhOVzl5dzk0WWs5MUZLWHIyRlZ2eWNHam9QS3hiNzlKM0ZMMVVycnkrTFpkTXBhK2ZOWjRsSytMMmZTOXFZNm9BMEEzU0dmcWtvb2ZYZ2FXYkZoNzZSQm1NdnNPd2pWS1Bja2F4eTBmWFo4VWpWUDV1RDdPN2JFWWcxS0dwTEYxNnpQRGpNeWpSTlR5Y3Nma3ZDWElJNHBSa2pFOEVsNTZzd0FqbU9Ob0hBdmdTajZFWlh4NDNlMTRJSlh6S3pSM3FpU0N1eWx6VitDSVM4WnNtVkdDWUtrVmlXYTZyMU5aTUVOS1BzaGlmU2RCQlZ4WktkeG9MUzRYZXFPZ2hyZjZoTlRNWDhsK0doVk9OUGdhY2dRRnlQcWpjZHlHRmZWTDJzT1ZVS0R6Z1h2Yzc1MGluWDFOaDBRaEJMS3lyMGliUXBHZHpoTXNoRklTZ3RIQ1p4Mmp2Nm1ZRnRzV2xRVXp6ZVJLOFp5WTk4WThhdW4rVzdETWdKM2pnSUo2dnFRdUZSY2pqVWlzWVgxcEkrNGppWi9jTnk2Y1BZTzJBb0l3UjVUcXBkbDh3MEhJQVZ6V0lLWTBTcTFsay90YWlveDdPZzBhNVRJOWNUVkJQaHhrd1hkdlN6OE5VNjlTRmxWYWlVYWN0Q091eXh0bFV1RmVDc1NGWFJuMW44MmxVR2J4dk4yWmM3ZnJ0cnNQclg3S0UzTzdTSStZdS9zTnlFWmFnMDJGVU9rR2NBaHRsaXhDK20yOUdCSWNlWHdJMThpTGFTTGtsOEpQa2dYdTAxQWR5V0ZlTWN5a21iSzhkKzJoTTErQWZjY0RuK3Y2VDFxdnRiL0FoZzdYM2FkMUE1RS9SNlBaMjNDSEhTUkw5S1NjQ1VHWEYva0RIdFB3eWFkWU12dWhVSXFKU2pNeHpNZ1ZqUStxdGh2eXFRdzNQOFpPWDRkNUpkdjB1ek1LcUVkeHdGMUkwRThLUWdSQ1BVQ2YydGlzZUhjbW9zbVFhWURKWFZpRE85Q1lGYW9Ma2h5ZWdlRW1lYldvRlpZTXUzOVNLY0NITUw2dHNuakhBNmpvQlVqTjIyb3dXa2RjcVlwZTlqYytCMVNjb1JCM3A0VS9PK25pMVNtZkpSSmpnN1NZQ01oaW9tdnJVaXovVUcvek9Va0tKZVdUWUFPck1Pa1Z0MzgweVJaSlQvaFJ1UFg1UnhNOFpjR2V0YVhvLzc5cFNFUmFNeUdIcWRvWEYwanc4MXJxVG83UkV3UGtnNTNUOGNhQXdzeEk0N1NKQ3hSYXdDMmJSSzBmWFMxOUdLc04yRU1uamJtVTJuaGRKNW91Q0NOM0N6bHQ4M0U5SHJIZ0tNVDhIR2k0L2dMbmwxYm81RWttblAvMW1MaGY3SjRTRXc2WXBvNU02V2hyNmJpc3gwTGlFTTFHYVJWRU9SSG9pNC9zUnBGRHdDRUtUMUw3MmxzODNUUkF1RWRVeUdYWmU0RlQyajJYdDR5R01GK2lSYmFaZFBMNzV6eEZIYUlPVjAxYjlPRDJCb3duOVQ5YWVZdkhhNnNsOWdzN1ZDbU4vYlk3WEkwL3JnMm9lKzNLdUVYRTRGeWxjaVlISndwOG0vcnlWS2JNU0hlMmhDOTkrb3R5QlJOR2pJZktCMzdzOFdwaVA3WmZFK0FNZUo3TEJKMFIvanE0c1QvMVM3VzhKakhtcGJubVFrMFRKZzNaVTBFaU1jZTRRcThWNHovYldhV09NNmJnVUg5aEMxNlh4YUh3R1FvaEhkNVhRa3FZL0pqR1dZUGlNblVFTEFjV0oyL25oUHJGbEs4R2hFVjdFYlBjVDQwbi82OXNwVFFmN1lGalpkWVZ3TXlBTXBtT2pUc3R0VUlBSjFHVTQ5b3psS2JRelNxU3Jsb2hJWUZPWHNUenhQdzFOWVdFcVdWeFBLcVNpSS9EYy83SFdpMHd2ZGtkZURSUnBOZG1RYlF5UllKZWlaQWM4M2x6aWQ4bFZka3R0dVRweHI5Nk9YYTU1RUZGWG9XMTZET2RIT29YNE9IZGxsTVlRRUNkK2JwaFJXdkFwbjdmTnJTbWRKZFpBRENxVzRFYURmbi8yQ0g3R1V0RXZ2aFY3OFNXclVpa3ZKTFBUTkZaUTJ6eWhPSWttKzFTTEV3UldIQUpxdFFLTUJUcTN6Rms3M3pWVXR5L1VwOUZhK3dpQmY3Tm5VWDE3UmJDWUJiTnp4TDdYY2xRZkFlUVNLYklTWlFyT0hvcFc1b25QR256Q2dRVmZROVZEQ2R1UjJ6RkYxU3MwTS9OSk1TMFh1ZDhvSm4xQVB0U2Z1eXhOWXlBRnBKazV0OEpCeVhOWGMvTU1jaFBQRzh2U3Q2VzJSYmJhYjhIR0tOUFQxbUhPaUs5M2ZVRXJTMXRaSXMzYjV2K0VJVDdwbFRjZDEzVVBTakI2czlha0JCdHp1bXgreEJaMnhlSnl1RDh6SjhCV2pHVGhqbjVzNHlMMmJrSWpFRGM4OU1uVnZHRlBBTEhlcGRMQ25jdWdGR1grOHdMZ2FVNVhhejhwVGxLTFhHSjU3c2ZlbG0zV3B1L0Nlc1luVkpmNzc4MVZGdXlwbTNaampRT0k0VCtVN0k2SHVOMFErTVJ2NXZteDV2LzEwV213ME1pM2Z6ZWRLeVVpS0pKdVVFdkJ3dllLTWV0dVUrc055UndBN0d4MUNTSmZDNlF1OHRBMGdEcUE0dExmbUN0aWhOV3dtNC9ZemZDdTZqQU50QlFSN1duRmJoSGp4QXJzKy9ZVVhZbEhFUUx6NEUxeTVsbUxhblpiRkE0cEtMa3FIVndTV3BsYmhRbmpQZTM3ZytxeWFCUks1Q1QrL01VVG0xRmR0YmN2alE4V29xSk1jdGtNeEljd1V1bmxkRXhIUXo2eTVzcytxRHVJSU53dTJnU3ZTM2RJRFVUUmpxY05Md2JIZUxMbFgyS04wbkZHaTlvVXlNelpZMVZ3QUd1NG4xLzhHRExEWHJTS1JFR1drajZxd2srUGl3dDBaWUQrQjI5M0o4bnBuQTZ0V2NRSmt3YjZ1UVM4cHRXNTdJeFNFRG9ycmZyNmFqWjVtUVg4OUdoNDhBelNzNkVpZjFnOTQ4VXpNczc2OVltZ25EZm05WFUwZVlBNTVJcnJ3SFVZODJSWnp5VzdUeCtvYVUwOTNrSkNQMEF1eThPTTUrRE02REZyRFhaR1JRL0RQVW9rVzc5bkpHVmhWTU91Q2plaEMwWGlhci9BYUhUQ3M4ZlBRSWFhQThsdmo0Q0MveFVvR2Z4UnRFNkhmd1ZXMmptUHNiL1A5ajVYWnROaytSQkdTaUJCQm9XYnVTVTNSKzZjUXY1bkZRc2F1cE5yQUV1Sm9YNXhvMzRNWitpL3JLUktwb3BVT25wZmUvZHZxcytLSmFNNTQrSktMZ3F2Vkl1aVlCNVBFREtRZEFUbTFoeWxpWE5jaXBDb1FHaElncDFHcE84SU0yMVB0aCswVzZ1c2ZDYmY1NjMvcDV2UXpVU2k4MDV2Vy9qTUF2ekZrMnpBSGRCcTVUb1RPdEV0REFrZnpwbldRR1kvZEpsdEM2cGd0VHo3NDNwRitiMWZTdmx0T1Q5d0ZnK3BmcHVkOFE5WDZSc3dSb0xoaWJRTlB2d2FXei94RWVjQ05RQ3d4OVQ1SkQ1Ylk4VFhRYisvb0dGd3BVZ1VaV2JKaFBlYURBNmhudmkvRWovTjU0L2MrQmVaRmwvOXRlQ1FRM0hFZ2NNTkdMeHRPMVRsY0swM3FpOENOWllXUUxhSG1FS1ltNk9EaEJmSEt4R0NtRTBwQ2o3UTdTMW42ZCtHZkkvNlNFalYwa0FqdUtOMUlYdC8vS2VWNnJ5dWdmVUhGT2RINWQvSGl1L005SER6TUN4SzRWQTBPbHBQWGVjRUlQUlh5V0dBSmtMRFFXc3lwcCtSb1VZeGl3Z0xjS084NEdlRzdtcVdJcmI4dDJQdE8yYjNpeFFYQTZ4WkpYU2hhSG9CdFFSd3plcFVlTXBYSS9RT1ZJUzQvN2srYVFEVW5pQkJaMGM0WVo5VENVb3cwNjFHTTRFUkZZbVNNSW83YmZqUHViZUFSMWtRdWJCZlVIL2k5RWN1dFkxN2VibW5KSkFiRWREcGFRQTJ3RFZTMGwrdXloN3AvdHlFMExiNS85T01CemFFOWZ1dWhVV05hZEFBdkQyanlpRjlBNU1IWU9JcU1TUUwrSHRoS3FlSUVqN0lDNTZhM0dYUlRtYk9pNmIvZW5zd0xmampndkpKTTJuaWQyMG1MeWtWeUxGdUFpWWJ6MU1PQXNabmZMK08waTNJUWcwUlErQ1U1M3NtblNrZG9IWGFzU2t4REJMbS9TWEdWNzBNN21HdWRjY25RRWVuM09SRjU5c3oxd0JXNG1WbkliWVhhYm5UTVJhV1ovV282bmhPOG43NTZpeUVuR1NuKzMzOGE1c1g5U2dPSVBDay9VWVpOSXVxQUJ6RmY2OWlTdG5iOGVrdVVzQjhPNDlFK2xGQ2Z5cDhlNE1pRDUrcGFkKzU0dDFYNk1Rb1NxNit4MDFMY2ZTVkNVZlZ5eEVXY0sxckFZNDI3MU5nZmoyOXFlZm1NMXpBb0I2NGdveFpIamNaWnlkbWxVWVBiMjFYU2kxYW5wQzdEWFRDTmpvbUttUk0wNWZOUkFlRlkzSERhemZUSlhXdE8xVVExdUYrNjY0ZDhEcmFCQyswc0N2a2J1N3p5ekR4VGIzMHBxb05qVEI0ODZXRjZzL2tPN2FiUWNENVByN3JXajRoZ2RkUGxGRGowZDFpNFltQ3NBREpMdU5nZVdDbEdxNnkzSVFNcHhUUE1uWFFZV0lYc3YrSXkyOCsvYkJqQXF6VE9DUmNjck4zaEZla3prV3ZzbDFmbytZK05MNWFBTC9BeXJJRnBVZXZmaktrOTVXVXZ0ZFp6d3JudDVqRTR5MWRHUHZQUzdKSEREMGZ2TS9jdW5qT21vSVp0NXJ6NVdleThQRSt4Q2IvUW1jUlZJRjJkQlBUVU8vSWtTVmVxalJEQTgxZU84MFFmcDNiWS9hdGE2cXZRV1Uzd3Q1OG13bXVZZm5jYVBYamptNk15dWNzOWlkc3VzaitpZVBta2FlL1pqRFQrbzhtNjZndy9wbW15RUxEWHpST0ZJUkx5TEtueHpjcE4rRGRyWDRkN3pRSk5xYmUzclU4aUFMbUFrUUJ0ZUZVdHlkRkNzY1F1cUJuUXZrT0xXbjlocXRxZkdzRWhWd05XVHl4UVpOUGVlVUNDam96cWkxRURKK1VTTml3aXI0TXVHakdUb25BZ3JZcDdldFJoRHVmM3RUL3FTSHo3UGdweEU1RzdybnIyOHJGUFBER1kxeHpSd081NGthaEF5UnlGMkRJWEdQWWo4d2I2UCtxNUxoZXNBellpYkFuUGpFUXYvVDJ3RFVOL3VtbVFoemV6RnJNRXpBRG1UYjlmbys2aU9BOTd4b2FzblM4YXh4aFE5QzU0TnJDb0Q4SVpxaGtyWDhMTGl0alY5TmtZL2xYMm9DWmJrQVRpeDJLMXB1UlRCNGVzNDJhK0swU05SQkYwZFhKMkV3UUJlelVpMEhLRng1eG9yQUZPNDlFOS8xeUJRc3pFelQzdVRVSTQrOHhXdVFOWVpUeXFycmNKUmhHaGt2Vjd2VXFMWHZvOStSb1JORlM4QnVWY0lxME5kWDF6dmJYY3ZKVGZtMEYrRjVlODZUdnpsNml4bzdCVThLZWREQmZxczZLVlVFMmhQeW16TVQ4SVpycmxDMnoxbG9sb1UzejNyZy96NTBHVENFM1B4bU1YY1A5LzB2VDJOZjQ2ajVTQytBR00vWDdab2xwWEpqYkRLOTZGQ3BFT2hOR2FMOUduYWI3UXNGenBLWjZzU2M3dXhTOVlGZ1FEcUFuZTgvbmlyNkUxM3FVZStBUnc2Mzloem9ZRjAyeXh5M0hLSWpSdG55dzE3RHUxcERMRHB3OU42bXFGV0NXS04rWGx0MWpaelFFdjJTbEhacVI0bWxKekc2N055Z3h6THBVUlRTWURPWmppZU5wdmNERFlpRnR2M0xWTFBpMUVMdWxGVHVmaFBJZHF1dkx4aStaR1NET090OHhMZTdML0NxQ29HZmRRN0xXOFJ2SEZuZnhSOWlHV2pWQVROVTYwZHZtendjMWxvQ3VEZUsvTWM4cnY4QzFnVTJOdGk2TmFuSC9WRTRoc3gwQVRUMFJwSExyS00yZ3M1S1FmT0taYVhwQjJOR3N6YnBjME9xU0lvbng0bXRPRTg0cEJ6T2VQSC92VnNYcnpVM3lFVGRER2t0S3VmQjU5T0hkb3hSL3ZUYnRUQVQ4YTBTaXkxY3E1aXUxNHhzaURsZjFhWEdZc05JdUVNdmtJWjFRMTBEcHdRRDdzLzNJMy8xMW5rczFXcmlTOXVxVEg0cmI0dHNIWktDQ1B1Y0p5NnFzOTNsazdkNHdNZzBBT2JrUnpmTjJvQVVrNVJkQUJXTHE2eXBDb2hlWHNZWVk2M2NEQnFIM0JJZFVsSmx0NzI4eElBeXFmbmQ3dkNXUHY2RWJsOStvRGFlZ1lmKzdlTVE5Rm41dHNHMGkyb2ZGb0U3R3hNcFJLUFVIcE05djB6NnQyME1aUnN1ckg0Q1NJNmlPeTNmOE1DVE8zcEcxVVI2R000NFpYaWxtVlhuU2JSOFAzc2d1bmdIczNWRjNQVnN4WXMyRFpWUnZsKzk0cmR6QWlneEJybWR2d0N1K0FpMWhTRUpQV05raU9BT3BVd1FpWGVpa0VsWG1rYTZBemVzMXAyczV3NUY3QUN5bGhpS1VjU2RKK1IvWVlzcUtZZlhOaGJPTGxqL0EvKzZMRjl5RFhDdzZSVmFoL2dhRi9NNlRhUTd3U2hOQmgxTUg4YWV6cGdpb3hwcm5mbVNWRDdWZU5USlZXSU9tRzVCT0JLK1dDanEzOWF1YzZ1TjdZK2trQkp2dnVQdk9KMFFqU0lyWm93akt6aVdQaE1yY3BYLytBdXpib0hVdmxJQjZDeExJVzdFYnh2ZEljbHhQSjhNTUdzdDc1VTFTRm5lSG4wOXBucmF2c1hzT3FDS1BSMnE2bk5UZlh0aXJoQmhudjlyUVM1SXNXWVZBNm5pZmNLaitGWUtCcXk0bC8vT2NwZzdzMEtyUGVaU0w4TkRHZG15QmVvdGRKLzBFNTdiUXZiVi8wU2lEeVFKQUhOZUoyMXhTckxzdTBPOHlMbWE0dWE0ckhPTjEyc3NNM2JjSHJyRjRTKzVtdVQwTzRYWUhobUMxemlmb3lzNS9SQnJjZW5WcVV3d3ZESHpTcDN1TWlqdElCZHE2RHJQY0l1TjBKR0FLTFZEZGNQKzF5UUxiRC9PWk9zTENkU0pjQitnWTZXTlFkSDBoYUVESk5DSjg4dUN5b052NStPOEMrSStNblZpNXB1T294dGl5VEN1QW1PTk5zRFlXakpBWGlYQ2lTVXhXVHI3VE5hZ3poZGpuaVltYjV0cVNpc2RKNnZVTlhGYStJcnhUOU1PYWg4eC9hZzc5ci9abUF5cDNjWUVtcWhxeFZEcUQ1M2l5S1pyanB3N3pUVFdMUXlITlR1RGozOFUvSC9JaXZTN1FEbURKVHBLaFdnOVZVL1Z2Wno0a0ljdW1QSTNvd0s3STRMNmdsNGh3V0Nobk9SZDhsKytEWDFwRDR3Y3Q2a28wWW9hTGJiK25mK0IwOTZHZkJHcUMzZDlxYlBxU3dXWncyT09qdzI4K2ZIbTkyVnBuOFBOdXFsb25xVThVT2p6UHh0cERlRS94dW85TzRHT3Y2VzRBV2grV2thZWF3M1A1MVpyeEczeXJBNno4cGY2VitnVEErWDl3YS9kRlAyL0pOWXkvcmRJQ2VMSXRZc2pZZFpBQSs0SWxPbTFMYUUrTEFpak5NWGliQk5jbm5Sc3djQ3FISjRVbUVOQlBhNDNIM3Qwa2JmVkF4dGI2RU8wRmV3dGhPWnhpSmo5TDk5RkZvT0VxK3ZJY2x1NmR0YWlOdVlYbUl4NkxUNERzaGlONWVLQ3ZYSCtEK0MxOXVmSHk2QlFZRWFFbEQzZnk3eGg5MmgrdEVBVjd5VHdhZTJJZHVVaTh6dm1GMUFYR1dhNHZGeGl5N0NHRXNHaVJobjlIemlYV0ExS3NUK3JadGJaUE5ydmZiWEZTb3RzUXJ6SlMxcWhKaVpGL0REalVxSVBGTWlDMmxpSkFQYWxBVzRwdVoyYmlBbW5iZjIzNDg3VUc2eUUzT2dBZjh5N01WbHBoOWRKYjhMQTZ3ZW9ZZzhneWpuc2h1empNMzJtUWUxT2Z0azRabDVCZFNqTC9LRDEzeWZtc0NVQzA4Z3ppODkrNkFTeE8xVS9FeW1RSThzdnorWDB0RGpsOEdxR0RFRjdaMkVheGJObnpCeU1BemxlUkgvd1lTbFE4YzNkQ01UbE5SWWk2NTNibTUwd2d3Sm9wUml3WEh3N212U1VLdVRDaW9waTl5U0Vwakc0YmpPNjhNbG90eEx1MjI4Z0ZtY1VBRVZzTHIxTXk0bVhpTTVDc0FXOGFXOUM3UW5IRUs0aGFNY2F1K1ROY0Vtb3pxcUVHei9pdEFmQkI4M2Q0VnQzVkhCRkZnV0JpYmhVMGlsRm01OEZ5ajllRnR0Vnd6S0Ixb010QzA0UWdhK016aU9jbFY1aWxSVFphb2w1dzExSXFPeWpLNEo0TFNodUdNRGJYQnlXNmR0c2JCZ3hwelgrYStuM2V3L3FPUVZJZnFROVQ1bHNhVFhwTFlRWXZoLzFtVUszVGRuTlVSMTBNVTVVd1g4UFFQUnBlU3Q2dTAyQ0NxekFLUWdYTzNXMWRxNXdtWWI3YnFCSG1lNU93LzZRdmVZelVlcFdWdlYySyt0bTVHYlIyTjJqT1FXbUpPQk1KS0xGYzBCVEpjYXRxa3dCU3ZkY2ZuN2dtY0xZd3ZqejNxV0g5ZW9wcmMvR2lZVnZBVjYvYlpjR2JQajdpcWI1ZDJKRE5aTk4yWTc5bjJ1QmtZdVl2MDU1TUFoRmIxYTdaSHYxbzFBaGZoR0ljV2hkbWlZeFMxdy9ReWJYd3RCVnRPKzgvcVVXcmdKbEUyODJXVGFtMmU1SzZDZzBZbmIxMGwzb1ZubTgvdmx0SHVMMUM5Q3hreUl0akYzUGE3ODhYYlFTVGNTUEh3Qi9HSXMyK05aTGlnaUtoVTdxUzZXQW53b0o0WVVuNVlEZ01kSnhqbksyemFncXE5QUpzdndTb1htN2NXYll1b3FRSVdKWS9rZmtybmM2OXNJWG44dlJ2ZDlLTkl1NGdONVphUXlFaTBSMmR4algxdlJacUFXc1JqWUhlQXdNWGhINjdWQjk4ZkgrOW85eTZXUDM4c000WDdjZ3AzS1REZ0d6M202QjBWTEF3Q2NneEM2eFZsdUpwMW01dVFxYmppT3c5cEhJSncwK2duQ1lVZHJQVC9kWUI3dHpxV1gya2J4Y2VaU2FPaGdJTGZSQ1QxNFM3OThjQktmeTRoNEVra05BaGZVTURhYUdtbHpUTkpIRFVwWGVRUEc5T1dzdGZMdElqOXJUZ0ZhemxrSm1pUGNEK0Z1ME5yR0hyaDBjNERUVkhMQ3pCVHQxeDNGbllkcnBVRTlZZWJhdjZmbXFpcFg3RWFlM3U4ZTdLbEdjV3Q0czk4alR0aHpZYUhCaXJnWk0xUG9YNjJXK00yaXUwR0ZWbkVlbnh2dzFBVU03eDhXYnJhTW1pM2V0dWNEVThubWVHcVBlTjgxZk1QR0d0K256aUtKZ1ZNcFVCdmN3TmtpaVhNOWZYU3Nwa3hBclVWZlAzN0lxWmRkZ0trTkJza21FSFZDb05va3BhbjREUDhES3lUMS84Uno4VjljTjZTb2lhbU5TS2tWcGs4Z1B3N2dKSllscllpQTlreWswWVZwQVFNNzJKelduTUYrQ0ZLaXdqb0xYcTlKQkpIZVRmdHE0QXM3YnhpaW1uL0hKbVYwQzA0NnZtS2I5VWl1Y2VJYU5Ddm53SHlvSHR2QVEzNFBRbTBnNDhLVkJzaDhMbHpFSG4zMDJLVkxVMFpaQWhFaWZXQy9uSnNSMDZ2NDltU05Na3hIdXU5L0RqYmVYWC9iQW5CK3NORFZ5UFNwOHRheUtKaWtkcHpMaDY4WGpNcnlNdkM5Y1JVUHF2cGozclhrekk5U3RBSVdKRmxLNWdiMXBITDBrQW9mcFJidmx4L0s0TjczRkJwL1R1RkdFTlNydko1NXBMZEtrZE9FZVkvd0lzZGV3N2hRbHk0cFFwNTh3TGpBR1FFaGs2Vko1NGVHcG5lSDhLV0F4SHFDNHdXNktwbkdJMjR6emdWOUhwenNkc0h5VVNwODVZRFYyWldBSzVqY1ZGdXhpeWJLRmlvaC82QWtTYXNyTmVLVVhDQ01xY1hWWE1vOWdjVUh6NEt4eDhaM3FxaVZxQWMzVy9MODB2Qi9JaXJ3UzIzQ1JqVzhwNGo5eXhJWFNuVlVLZUNGaDVOaGlaeTJqZkNwaGptTXRRd2V2ejJrRkJJRnp1MFd5Q2ZWaENmMkpIaDJoSEU1d3ZoYzdnbHFhWHpPd3J4WlZtSmpVMUViWXNpWFF2VW5DeElKcXVVU1R5UFpPR2toMHVrbDVxZUhLZUpDUDhwN3ZjeFN6VXI0ZW5vT0hoRlFFRk9WaUN2dVBGaXMydUg0Ri9VcHE0Q1NpWFZ0TVVZdGpwbS8zcUJVbFYwaXFLMmR5K3FFZVhTV2Z6c2JHdmVBU3RaSG8yek4vdFpTZDlHTkNMTXluNW1VQkNabEtZei9XVlJVOFA3T1B2dGZBRjI2dTlHMVpkd2ZYNzkrV1EvNTBROUFnTzVkSG5lamdhNXRPck9DQm5XOUFuYVpFVFpJdnAvbUpPMGJaQi9yalNGaWgwSE9aeDljdXBqd1h0TndCbVBadVQzR1pjSjFFYmdWN2R0YUtjc24xWXAxT1JyNnNhZUdSM3NCcFhRVmZlVkJDVG50K2prOHFuNFRKK2FBS3c4UmlUSFlxc0E2Q25nM3BwSzJaODQ3VmNkOEdrKzAyVk80QlV0aDYxOFpkMGVMVW90VTM0enVCOGZQOVc3amZmTEorM0pGNWtzNFNDNVZGbGVUKzJGNmppQmVqajh4KzhSbFN5OVVSejVqWmJUSDBDbHB6OVMwWGU5OGg4NUJ1ZjBTN1RaQTltZUNtYzFhZ0pSSFp0QVQydWJuUjFJRmRmaEZ0MVpMaU9lSVMzMk1jTk5YelV2YVBWMHlRRDUzVVVLL295eG9HdW4rbkRSVm5nVVM1WnJvc2tyZ3RkSElnOWtFdkVLcWI5TldTSWcrazdLc3BzZUNUVXh6a2h2WmhuNDUvakdJV3hQaWZLOENoYXliUml1NmN6ZndLR2kvSktBTVhUbm9ZTVA3eWNIL1BSdE50djFRYzdKa25McG40czVMVEd5RTkyNUpGY0NzMGlRWllhUEFoaWdCRDI3K016czBKVkk0ZnJSMEpLekJLQXNYY0grd21vaWxtRVgwL1lBdmlsRDBOYlJ0L0dnN0ZHMFdlMHZXdUxtSlcwRnJDanVxNGozNVQvMUh1czlxRFlWdDVRQVF0R0g0WG94cUNabldBY2I4ZEVud0JhZXAxaHA4NUp1eTdvVjRYL1RZNXYzN01wWXJyc0NtejJaZ0VJYWFqTnFhMlZRYytqNDc5T05XNEJNUkJOL3l4L2V6QkcvNWUvL1ZOeU9vNG5oL1Y3c2NENHltNEtmVEh1RjNTZ1ZmUy9ZaVpWbWc4dkRKY2Z1NDRlYWVyV0hJYnl1Z0FRcTluamh0ODRwZnFoc0M2YlJLRVBqOEdieTB6Ly9Hck1uck1nZlBGU2ZQTTl0U2JFWVNGU1I1Yk9ibXZkako4OTg0bjJ4cjI3OXZlVnVvRzQza0RxcU5tU3ZuTlFwTnVzUk4wSjVYdTFwOSswb0JqdCtYemVycVA4RExOeGNIbGdVa0NtTFRPRWQ4ZmwyMjZWZzd6bFRQN0Nqc3VldkYvZmh2UmtTcHk4dlFSbVQwSGswOHdCeUEyTkR4d2ZoZHAvSnQxNDN1NFdqSzNkZi93cHZTRVVZSWZZZFMwcHM1QWxERXAwaVRBQVdpNVhFeHdWOS9RS3RLb0FZTVZ6MDhHYlZJbWZ3amxjeFZnSDlESisvQjMxSzB1RjdNdDBVWHBmOGNNTHg3RWVzTjZyTVZJSHVtWXRGK2pqZ0tmOHBydFRGdnp5c1plejkrK0dsMnk3TEJGV2J0V0NwdDNMK09nNWxJZ3ZRWTAwQWZoV2pEbGhDV1VoM3lZandoeDdaaHBETmVBSnJhbGpwOW9aRjUwZGl0bHVYeFpsNGh6SndiN0dZdlNtbFhhMmZKS2JVby91c0xiNkxSdEdiY2RrbXpud0cvdHJHcEZSVStPTGplUUFSVWpOeGhwTG5SckZWSG1tZFdFb0F1K0NLR3BKSEFmellYQWh4bHdWSzlNV29nU1hiMHJDQVBBMVl4ak1Rekd4VUZaNllUbkVrSzF5SDAxY1NGVHhNVHdKZERDWGhQYzJsTjIybVpZcllVZ1pjSGcwYzRjYWU2WXlSdlZ1UHlpOTVVcllDOTFnN3lYZjZvMXFpMnVqaHNHTkpMU3FzSTNlUHA0a08rMDZJWXorWktlN29rRUhjNUdlQW55Ty80OXRKdlNIa2drQ094V1VQY08vUUpaRHlKSnlsRmhIVUlmSEFMYmVFMnhXdnBTRDhDelNwSEpiSVRwZGZ6RnI1QWNxNWhJamkxeGhkSDFSZnl5MzFXeE5CR28xcWVQZHl2Q2VNaisvOFBtSHNaQ3cwVTBrRnk1TThWRS9vVUpYWjB4aGw2MVE4N0dEajhmM2MyeHkzcjFzWnkvWkJ2TG5NcUN0OXZvekhxVW9CcDZCTnUvbGR2V3p3MWwzdTV2YXBiNWlTNmFnU0RqcmFxOXhyTEp6Wjc1WW83SUJBdU8zb2huRFlwWlJjOXVPMnh4bnRqZE5rTktFbzZVWFRKa05paUxIeHZmMWdMcXllZ3VTZWd1ZXYrQXQyc1RydjJ0N0lTQWFKaTRwUXlONkFOT1ZTUVRRajNNaEpTWVF6a0tiNFRMTlBVTE9CaFgyVWpmMFgyU2JPcHpGOHFyU2dqbVFnY3lEeitpNnRrT056bXZRL1NUNnh2SkdHMHdYZGlDMFU1WHV5WnZHT2d3aE8rMlQ2SW9hYWNKOHF1MzhUWE9pTHZ1b284SlNIUnROTGRueWFXNmFZSTNObHg4WU9XVGdTcllLb2VXTTdRUGtObFVIbTZtM2hvRXV4UkN5WVlWdEoyQlBmWlE0UEp1OUJxTnFmRGVTQVZobEhBSGFucmttZlFUN0d0SHpENHFRRFRZcThFWnEzWnVHclVaRG5nQTRKbEQzYWNUUExNcFdkSm13Y1dBcHVON1RHb0tHQ0dRNnZWZUxTVzVFZEZLUExHTnpscUtoenk2Tk1GTlJ5ejRkQlVyRHh0MEduWDc5V1VBZEhlUllqUC9GTmFydGlodVpQVU1zcnhmd3NFWERvMjc1WFF4V0ljSm0vWHlFUEV4VFkxeGhVNXZUUnlQSmFXVHBPSXVzY2x4UlhMM25GaHpiTzJYYXRIM3hTT0xPdWFlWkZ4SVBidi9tYXFPaGlxK1hmRVVMYTlNVmZjUW1xTGxQSFdBRHFnR052YnJtaDZYaS90NFVIdlZKY3pKNGFOQXA1RXVpNERQcElRUU5sZEFIL0VEZHBvbC9kRUFsb3NQZHdnTG1GallSdWJwaTRYbEdYZFJraG1oL052ODV3WHR0U1BaYW9SemxnY3EyTlhPOU9nY05DMXJtbjZLajRrdWE3Zlg4elhIbjN0SE84VjhGaTdySG5udWpHZmk5aGUvWXdONUpuUjJhUlZUaUl3Rmk4KzZpQ1pKUEl1SWUzbkZzSXRzY0hSNmZiNyt3bzZsMTFyNG1Mdi9aeDdPalBRMWRTM3lGUzVKQkYyMkZxVWxUNjc5VkEzQktFSER1dWExQVVlN290RlZxd21adng0a0dJZkNhc2dUVVVDOFlqQWhhY1o0NWp4Z3Z0UEw3MVFpTmdJeVlsY3VIbzhoZzArK1UyamJwb1pWbUQwVlFqcDcweDJpVGtWT0ZnaTkrT2gwWFFjWFlJalU0N1BMR0dNdGpKRGxFK2phbzhRcTVDTVdGbmo1dDhheHMxZmlOTmZJMlhlbTN1SG1BK25EVHduZWNmN09ONExGM3ZDL2NldmtWRmZEeVprRldnZDk5VW1BcFBvSWJpd1lIeTVHTGpndS9jRmp0Y2hyYTZxaXVGdFY0bDVOcDdnZXJpTmw5MTA2SCtYQ1pqM3lVa1ArNHdMVUNnd3AzeVFaR3NHOGVZWkZaT25KTjJyZ0dvV25hNDNUZEFPUUtjbE5iUi92M1RMVUFzNkgxTEtscjVYYi9TQUQyK05mVEc1cDNGZlBjdjNHdFpybHJmd3VkWURkL1A0Q1NGK0pyWlBVRHMya05BMzhrb0NiUGlFYjg1WUlkbHZYcFlLNUUrVmpvNy95OWRNWWkwYWh2VjVMb3FLY1JsRW4rWk1RYnl5dkF4U2VJeGRDUUtMcENQbWg2dklENWpsT293ZS9HMXliNm5RU29STUt6cFhtV0lNOTZLek40eFRhMmF2MWsxeVVoT3BUc0wyYzczRkhtQnQ0U3RJb0xqNitkeUF5MDIvM3dWY1ljQWZDdm1aSWE0enFmZzk4L3FwTjd4aDcyTkNaZ2VnUTBsa1NQSjlXbTlqK2dQbE81T1RJTFZJMzFqaHVCTmNHdWtWMSsrbWtOMUpIcWhRZDcrUitlN0M4dHd6WnNKNEMwZEdsMnc4aTN1aUtlVjR3WUZVcUU2bFlWZDVTWCtzcURVV0t3Wk1YVzVQS20wQlNUMXpENW1rNzdtRnhSM0FqQzFuNUpPVm1VUEMwZTFYL3FaM2RIZ1Bta0NaRXA0eDFBeE1ueHBZT09iQWxZZVk3aWJHOWxSNVdhL1ZXNzJNcHhVYUlxaFRiaHY0U1Y3S1lwUDVpaXIxL2dUWUIxUVJqcXg3MkNCZGZpMTlxd3J2T0FpZ0ZKVTRwZXowcm1KYlJZN01NSUpndUlxekErcE9JS0VQOXlXdnB2aGlsUkVzYm5DcFRCZFRxZ2ZIRmk2RVp0NVJidXNrelFyaEp2cUJITGwzYWdxL1J0akljMmlyOGlkbVpaMTM0VDVtNEdZVFYrdmxlbStvRkVsMTJoNHJvMUxpTDFPNjdQcTVvVkRZdFFRUWJQcGVLWi9xV2I5aEJDSkNrdUlzQkQ5MDBtTUNqT3dXVUROVzZjUlJ3T1JaRC9XRjV3NjV4OEhUS3hPUXAycDU1SEhkMDViMkxjbjlBejlDL0pRNTl2RUtYWWM3OGhUUkhUcUFscER3eitNZGEzdStqRktOUUNNZDNuV05UcUxRVk1vNFVTT1BkdFM3UGR3dlNnTTJuc1ZXNDZlMDFzNTNBL29YRTJ2ajlIcmZxRE52SWlSRDUrTjZZcVpQNHJpZ056bi9OaXI2WllZRU5zSUxweFhFYmpZTml6RXBEcytWWERldWd4R2l5aC9iR3p1SDlNbWx6d25mZEdmbFR4bE96eVFnMGpTZURoVzQzdUluSVZkenpNT3M0Z2NXRDJQWldCcDIyOWRVTm9WTFJwU0laVjBITzRLbnBKQkF6UXBXblBBb2ZOZUxPOXVXTVdIYVlpQ1ZVTlZyU3luT2swS2RmUURJSlBIWnNWSEJhZXFDb0k4YWt2RWF4bTBNUmxsSjBPVnhOVUNDbUpqZ3BQd3BwVVdyVmVURHdkRXpQOU1GMkZPZmVrTTA4ZllidzNXTTkzZkxVMkdxaGVoV1FSQjhJOXVDbjdIYWFlOUhrTVpBZURENDNyMjdRcjZ2M1RSVVRBd1FkekUxRFlHUmNRa1RYUEVOcHZwOFYwY2FnYUY5dWk0QngzdEM2VFJ0RUFpN0h1b0RabXdlK1UrTVQzdFdqT1VxS1V3YUFtRWNTZG41RHdGVlViUnNqUjVidVlXYkdiMGxmb1BpVUM4WEVjaml1cmpJaTdMZDc5RS9tRDAydDRldE9BMHUxdGU5MXR4SVBXY2M5Uk5HQkNTbXJDYlFBT241andzUnRoSHBqNjlOVm9rM3NPcTFKT2hqdVNlSjFRNHE0L1pmNkpKS3QrTWkxL1hLdlBzZFlHVkRGWmtlRnJZcVl0bDVGZ0VsU09MYnBlbzBzMmo0RkRwQTlmZDhwNnI1NHBMOWpad3E5ZzhEWnNmeVdTMHI0em1KVm1zU1NKVyttQkZQRHJkeXhyeFNXUTEzaGh0RXNzbTV0QTViRjB6MVdrSUJ3L2ZzL3h2NE03d3NLOFpxVG42RDIvbzdjWkNqUFEzOGltTE9BbkVSMC9qZlBwRzE2TU9sdytkOWw0cXp6aExBeHFHZWFPTTlITTlhaGg4RTdyanBTYTBaVlk1TUl2dEg4SllDLzl5aXp6NE92U29Ob1FlWVJSZEcvQlJhTUFpeVdxL3lqb2tSRXVMWnZjcnhyUWN3SXFYYmVMMDhMTXBlYjlabmYrSGJpTnZ6OTB1UWN3ZElWaVdrNnN4dzNGY3BaUWUrandQNWVsRGVHL3h3NUxzWFU4Ykk3QTQxb2hpSFIyY1RYOUpUTnZvR3hMRDlGejM4UGZqQ1Q1TVAvVTFzL1dTaUEwektLTU8vVlB4RlB3Z1RsN1g4SEFrdnpibmxlS2lrbGY3VEt3TzY3by85RS83TVFsNGMyWldXVkRDY01kekN2OVJEcUFHcjIxaUlSQllsTGxPYVRndERzVE95dTdKR2EvcUJmSGFDalhVMjZDWHVRNHkwQ1IzZS84ZkNYVG40VU5KYUI0RnUyR3pFUFdZMFJGN3F0MkNLb1poNWtrSWpnU1FCcGxBcGp3S3UwUnNBRjBMZ3hZMm5VZU5ZOVdzQ1ljZWRrWkxlQXA3NS81d1B4NUZibVA2aWVEUFY1eVBoMzJZdzMyMDRoc0RuZUU5VTlNRmhsMTM0alVWRVIreHE5L0FZemNBMVlEK0Nmb010TUpCTExJclN0dkU4K2dpK0M5TlFUOSsxYUJ0S1pWMk1UWndVU21NcXl4Q0gvaXhsck5qZDJzM2NkOGFLcUNZa2Y2b2k5cTBGUU9lUDVpMnROT3pLendVS1dUYkVsUXdqVzB2QldDUnZvOUYrSlU4ZUpmMzZUUE8zeTdzZ0FKVGFQVloxUjJZcUMrWlAySG4zamFobzdRdHJYZEo0WmtqcTdFenVVN094OTZCamQ1L0JIUy9ZQmM1bFFHUTlHdCtxZEtvRGtkVDdrRDcrU014WituWnkvUjI0aUEvTlVzTUtXQnpvR1R3YjJFdlZIV1BLVUZiekdjMjNmN3pLR1M2emlnQVp0QTRuclRmSHF0WnFXZlU5NGUwaVA5dGhoS1lrazhIWlhnL3RNbjZzMmFPOExxSVdxaGpJUm5kMHNyZXppSWVjUnhpb3NsQ2FBdENtcVc2SUFtaGc1bnc3TE9MTHlRK2V1MjY4ZVJiVGJNaVdteEtZOU1FNWZEVUh5NytWVXZ0OElKRkYzRFEwOUo1aFN2Vk81ZU9pTFM4RjhRNU9jTnFHYWJCUTN3SXlwL3p6T1FZVEx2allqK3hJU3p4SlN3a0FHRERHUnFvWmJDcnBoMVgyMFhEZ0d0c21oN1lHbStKVHd3MzJrSjlxRk1zNUU0ZGRiTGlLUGtFbXNXbnIxbFdRSnhWR2h2Ujg0R2JwN1BqUnd1NGFGb2JhZm43UUpPa2J2eVp3UDd6ZUErYXVuUisxZjlZUGdBeFRXSE5KbzRidG1GemVlTzYzNmx3bGhGeWxiVktLcWY5RFJWUzAyZVEvTVFBMnBUc1F6TnZxZU56NHcxL1RaUW9VV3dnNk8xcnkzc1FsRGxRaFVrczgwYy8rZ3NGR21RVGFoUXRrU1doL2VEWmhXWUZVYVBkdDFFUTBNK1UwSkRicTVaelk1dFJsdzI5d0xUYjJvQlRTeG4rS3dMZDVTTklSRnlua01BVzl6Rko1ck5GZjY1MDhmOGR1N09QTitsNDY2dVFRWUthd1VzOXpwM0Y3TWpjc3puN3lITTRnbWVwSXRVZHl6V3dmdVZhcnFYL0lBZ3I5d2VyNWRKdW85blg3ckZKU2hyejZDNzN4V2diYzFlbGlJYzBqb2o1RjBYV09VQnlWS2lJWjhTRm1XbFpyR3ZZZmZBTC9QdXhNaVpXYjN1bHFwcDVEb3AvbXE5STFGdU9HVTBuNElEc250VTczME0wRVRWcXAvcEdHQlNza2p5bDFRK3Vta3ltNWNyVDVSckhCWDdIa3hGeEZQQm4xN2t5VDFKK253TXpQNFZ2YXpsNkYwcUptbThWOVRlaXFzMzhMb2Rjdyt4cWYxeld2b3BjZ0RsUmN3by9mS0FPTytWSFkxbXJtYy81SnlWMG1SRVRRWms0aVZjTk1ETTBhaGJWVVRnQ2RnczBtMmxZOFh6bkNPMmFGSzRoWEhPRVcyVHNFWlpvUDA0Q0ZNVzNjRUpUbnR0cFlHK1NHWDFQTXpqUjZxMmVaZzVaenp1b2xJOGdvMU9CVnhZNHJHSngvemE1MnR3ZndhVkdVODZUVC9Obll4RlFMYkR5N3BJcVhpTXkwMnhTdVVUb09vTGxEbmR2L0haQXR5TFg2R21IVUpxREFNTldVeTUzUGZFRmFVeFJMLzE5a0E0YXBUQ3cwSUlmRjRMN3diRDZSaEZ0TzRhK2VYNHF3TXNucVRPTTJBY3FETFVycml0YlpBbUZ3VTZoZU96OUNzWjZyNnhjVytCdzV4bkx4ZFkvN0JQSndpTXB4bExYaHAwN096QVRiSDduVzVZNU1sUmVwSzBOY1hBTnZIbkhlQldRWUduRkdYeGlTVGJROHdWK1JBb2tuL2h3RkZBZHdZZkxoVnZLOW5xa1cvRVR3Vll0Y1h3NXM0QXp1YTMwaHRNTGdobThWSmFZQkNacUhNZmJnZUxQbFhqN3NoUVpNbzBEeHdjcGVnaFF1dGV2MGIxUmp4ckhvWU9QY1NPL1JHRlBrMHlGSXhESmRJaHR0ZjN2QzFYRFpXaFdnb3BBR2xrbW90NUIrV3BnR0MrMzlzWGI4S2FvOXJ2V01FQUQwOTNGb0FsQmpyTGhVWWhOdEFYbm5ueGZqY1greURzcE1XRHE1ck5mejNSOEppbDIwZFZnRXBkUGdYOWVkYWRYL1lyYnVscXMxT1FxN1NTcUlBVTNSMXlSZVlISVhLbXVQUFd5SThpd2V5eFY3TG9kY2Qrd3Y1V2dVeG1jZXhYZmJYSTVLT1BtYmN1ZlJPM2FIMG1uMSt0NEoxc1NnMlMwOFBDanNkNXd2bCtGL0NnUmRZcyt3dVUvR2VXZEdXYnNMcktKSmlEc1BpWGxTeSsraXBtS2graDJJbFRMck9vbkR6MW11MDZBWndvZHRLWXQ3NngrUzdsbjBQS01yb1Z3M1RCQUYvUDNibkoyQkJUSnppcCtPOVFpQmxpd05vcWJWT0N1aDh1dHdDdm9FVjRqZDUwQk9XdlFUOWFGNmFHVWh0L3JHRVI4aGJCQ2ZxU1I4VzRWL3lzcXFhdTBmcDBVUmhLKzU1TWZDd0V5WVp4SDJKSVZMSndPNGN1Vm9IeWRZSE5qOUNrVUd0SHpKWGZsZ3ZmRE1wRTVBUm8wbExaRWtDSUpyNWlMVjRGMnRHMS9HRmJKalMyOWdFYXd1RFJPV3ZyMEp2a0drdkpJZmtmcWtEU1pyME04dXNLTS9zRHZGSSt3dEpFOUNORnBMekZ2ZTJKTm1PTVEyMVl1YjduMzRkYUQ4YzNHTmhQbW9xT0dLc2pZdW5pZm5RcTRTZCt0MkI4Q1VuSWZuTXZLWEFqYUwvYnU3ZzRRbGxWci9OWVVXeTdOSTh4NStLQUIxRFo4ZXFEQUh2dytkdHBudjNvY3V0RE1nYlM2N3B5VjY0cWQra0N5R0w4T0FhRmtKdUgxVzdLNE1qbVdWVWRSQmNod3dYQ2JBK0dWRmlnZmVZdm5mN2c0Z0k5dWVJZmcwMXVRVy9ZemlIU1ZYVEY2ZXEyc2RES2wrZmplcWtabTgvdnJCM0F4YnNrL3hRa25ieWhLWGtkRGsxQ3czLzM3VTRmRmM0Uy95RVBndHJIdmZMckpnRFVBeWEwWlJpNkJlZTdsektUOUlvQlVINlFqakc1LzBKRk05eVp2S1M2Slpsd01sazV4R1BDeUM1UFA3MTQwaGg5eFpobGkvSmVhR1VJeUg3RkZFV2ppNVdWMjBsM1RVZWovVEx3eFhVS1RNMlVVeDgyVHAzcTk2ZGpXeHVyQnp6ckVzSlVoRVJFY3lFbVljalNKQXRzbjUyd3RzeGo5T1J4QjI4cXFXdFg3S1ZlZk01WVgyRnRQT3lDUXBQcWxqRlVObXp0QzhkWVJGV01qTm1OZ2I5TTdHaGxkWWgvOWYwSmFYeDEyaE1ScDlBTFNJSWl4TDQ0bkVnK244UmtFOFE5MHpYczBoRmFVdGpQai90elZrV3pUWUdtNUF0aGphWDYvNlZVSlZTZ2J2a2NtdHNrSjlFdFZQOFY5YytKTFFEZHRtVWZNRnZQc1FLdlZmZW82ZktqeElwVXJ0eURodjZ5ZGFjdWkxV3lLM0pnRzVTUlB0U1pjd21mVFllL0c1ZkttbWJ6amx5d2RTRGJTRGlFNmVpRkRYK3gvTHhiTGI2S1NqMVNFY0dWWlFvSzh3RTZMZi9Na2RmamFZWVR5eW9VUkorTmhBa1U5TGtnbHNBWWVBekVIeWVWK29YeDUvMWNNQkZQczE4QWNLL3pPZGorRVp3TWdtQzNHVWFOeVFKN3A4ZS9lcE9VNU5USjBwNHByZDk1U3ZJUmlaVGtjQTNrbU5RVUxEaGpQTTRReEdUcjNlL2M1by9BNFJ3MnlRYStYRzVCaVZjMGFoOUo1SEtSUlZHaXhPNVNhT21JZFJ5QS9oUXlULzAzYWFxT2FSOVZIQjhnbE9LQ2FqOVF6RjY0VEhFVWxVOTJmZVdxTkJzVCtkODNaSjJZSnUxU3UxRU5rbm5qU2lXcTNGa3BaUjE0bGlKYnN4eGlydVlJemNpVEQxWElqUEh0MG9FS2N0ejgvd2sybVJrc1hpczJCSXBmMUYxSGtwR2dhMXcwWENPS2txSk9nUWF6aWZjdmpqYW1DenhpS2hpSEFmWDBxaitSTkc3YzVjMG94bXlKTm9pMDFCVDJRRDNJOTFHdE1ZVzZocnZzVi96VTl3QXBtS2NxaDE1R1dXczJKV0xqK3VUTTV5N011NlNFTGlCajhtSEIwMFFwNlYyeUtub1VKK25RelhNNEd6RjBnYjNMS1UzR1dhT05tdVp1MlB6M2pUUmNNMVdhcTgwTHM5dlY2OWhNalpjbjE2eitVRDhLeW5rVzN5ZTlON3ZMajZialNTRFZEVGlHQ3duQkVlWlJjQVphSVRiUVJibHBMSUd6TG1SWklPb0J1dnNoWGM0YnFwTVc4NnZocG9KVnh6Z3h0VWpPWXBLbVBoOXJZd0ZrdEtaWWNTdURKYXJYc2JlcnpUaUhHd0tDVkJZT0RyM0VNRVlreTFRL2owc2F1R2l6NzRPVXYwbC84Q3hBMWVLNmxjRkJNVzJYT21wTndMbGYwSndDa1hkT010Vk8zN29QVHYyVWJnU0taMElGNDdhRi9JVmhmRmdoNFhqd08rTnlxaXFwSG9saHAyL0RFNTY0N0ppazVTRkx2b1NnTUZXdkFqcXVrdWtud2xDZ04rUEl2aXd4UzdxbnlDTzgzSHp3K1hEcG5vOGx5RWhlc2xtdHdhcXl1aHdhL2RqWnM0OG1sdFJScFNkUEViaGMxTWlvbktFOFFjWWpYWTFCdk1paTRaMk45Sy9kNHpoVTUrTnVIWFF0YmZNR0ZiMGU3d3VzNXZkaVBLZGo3clJyYTRnZ2t3UHdLQW9za1dBeGZRN2I3bllRUmJMTmR4VWhZSHBKQ1BsdHJFWTgxYUR1cFhjZkZHYWJDemVPNllQS3ZXN0dFVFZQVkJRM2hDYlZ0RkdDUGE0cWwwSTlveHpCVXUwSHFXellFYVRLZjIrZTNNMHJEMFVsYU5oNmljSEhXbUJzbkZaS3hnd3hSZTgxemZ1aTFkVk8yYXZJcGd5M1NzV0kvT3BhTkNCaEU1TytWVHdkZVdRakYwcitiQWtMeTliUkFJaGQzK3VHdGJQaGJFb05peHo2OXNsam8zcFlvemo3R0UzNW51c2cyRVkrODJ3d2ZCVERXWThCSklLbTA4NU1MMHBsd3paNkFtRjk2L3FRWkgzWkZHQ2ZQV3B5eGx6WlFqRTlTa2dqVG1rbDV1My9ya2FwSkV0Z3Jkdm9FRnJHcVp5RXRiM2RoYU9rZDNielBmekR3ZUFsdE40emhZRm80RTJMSXlSS1VaKzhRUnlrY05pM20zdHFab2paUXZxRU5VUGl5dEdnTE9jdGt1MzBUQ2hENlpKc3dmZEJaa1JqS2tkSDBIK1FuckJVbDZrRERIa2RDa3ZIbld0c3kzL2ZPdkljWVVsb3diQWJkM05IcDRPRmRUb01KTk1wN3NSYmFvOVlJUVQ0ZWFORWd4bVd0TjdtblNEQThuQ0FldnNnOVA3eWRkVDNUWUhYYTdub24zRm5CYjc5eXA0bUFmbmJid243QzVKSGE4Rm0wL2xmQjJDR0dxSW95SytrRDBTdnZ0b0FYNDU4aFEzSTNyNDJ0K3RqRzkwZU9DUGk5anNIdEh1aWhTWXY4WUhmMTdnQ2pXY3lodk9aL09UVE1abUovNEc2dkdkTnZSTDhCOWdveFF5a1YvVXdNNWxoSmhrR0pxWGFYcWZ1OXBvbTFKR0w1N09HbkRxR2d3YVhPTE0wR1BoYnBMSmZsM1lPRUVMSGVzbW8vZXBwaXNsU21SdCtqMmphMWlpWURQWkQ1L0pYUisrcVlCM2pPODJ5NXF5Z1dhZjhxQjRYZWVlRzk5c3FiQ0d6WkpOTmo5WHB5dUpMVjMyMDVFQmR0dzRXSWNRSzlIVjlJSzhBY1pZVE5oSmJRVmJrRk5mTHNqZUwyTFRDR0cvb1RQTTBWbzJVa25CK3UzNnJjRUorMUhJL2hCUWJUVXcvRHF4ZVJ6YkxEcG8yQ05maTc3YnByNjRCbm5rVUdQdFZOaW9aWGRsaWFYUGhrY2h2MVVXQzFQb3NCRmhML0FoOW4vMGwzSVZpNm40cEcrRjh4bVpOTW00VC9jc1RJR1JSTDBCL3Z1LzdJL0NIcjJKWEZydmdKWGdPNTFJMXBXc0tCVjJIaU1SRXhYSlNHMnlnSmhMYWkzM3lON2VoL2VPanVveEt6cTBocUh0bmxzUEQzU0pFVE5QdDFZczljVU5MREZTdjVOeTMxVFFlSmN0Zm82bitmYVBBTUtEM25OTm03eVpYd3doZ2xPbW9Say9xWGI1R2tnSlA1Z1o1NVRZRmZwek9ETVpCZW9hMDB3MDB1WU4raDJUb0ZCOC9DK08rZTZVWGs2QTM5ZnJ3WjJUb281ekpjdW51ZGZWQ3lzclpCVjhzYnVrd2ozR2ZKWUtoT1gvRk9BRFdocGJScm9wUy81MFdkWGE3RUZjV25iMm5uTVFpdlpJRmIyUWNYWjNIOFJON2tsdWR6QzR0QW5mam1BdEFOOVpUVDRDdVJSK1NsamhtakxMcVFyKzdvNU9pbUxSTDZreFlrQWJYekQ4anBzRG1oU3F2MGQ1M2VtODRXOXBheWYrQjdBWDBvVUZnMHVxb0M2SHhReTN6RE5WdWhubGt2NEZRbDMwcTFsYmdITjNPSTZTV1pCUlNnY2k2YkEvZDJmcUVMN1dHaGJmMFhZeFFCUXJIMjdoUWtTa1hrbkNHVXNhS1RTYWl3TFhWNVl4TENyaVNCNHdrSXdBYTluZVl5MkZpWXp4T3lZcmhqbk8yWEh4M1Rid2ZpUVUzdUIrdGZXV3JPWkxsWmFabGdrZkRaSGUvL1V4MHJiKzZxNU5DQ2F3Y0JZcEYyTnhmVlZiV21SUGxWck1MRlZHbE9XdFNYTUtyTUUzUVU1WHRSSER3Ri9FODlINUJHYXJLa0NzVEs5RFNxSkdheDgxVjIxTUxkVGwzdmpzVGlqak10SG95aW8rMHlGVGV2aHBFSHVScWJseFJ3bi9taC8xZ1lzRFBXN09UZENWT0dmang2aTRLclNRZ0czSjFtSy9qQStwYmtMbUc2WkJZWWltNUJLSHNENnhQTUdyUmJLd0JQNHRna0lNR3JZY2RIK3ZGbi9wSWVjV2pPVWtjeHJ0NUxucXhqU3kxN1pOR2NvdkkxQVNEa0dQWXdwYXV2UkFodmp0ejB6cGJzeDJvRUVVS2lRRVZkRDQrSlVUV1Q1SHVyZFF0NTIyV0VrT3JVRDFBRGcrYmM0cU5sZmxMRTlnZnFROEhxT09lK1hlZFR0UlZvN2F5REtLbittN2VSTUtIWXFSL21aaXhmekxVNjhMQ3BPT3VMaTY4ZzYvUVNzdElUdms2VFpTQUdCVldrMVFMN09QOUV3SVJucW55ZFlWMEhqS3VMMHcrWDB2Vllkc3FwaURLcmNPdWEwRkZXQ2RvalpIaWRabnZzNGducXRsZ09XSUY2d0pYN2xkc05SbUZ6SXErNXZjQi84U0hCTkp0RFQvNjA5bFhZYk5wRTFPVDlCMTFRbjdBUUxtNWNKZzJhTHZZUjlqZVllTDFseW54WkhWSmlOVG9hdWV1azBZT3dCVjhub3F4aGVld1I3dWIybzdTTWpyU01hR2ZZVVpiUG5LSko0eFREelF5ZkdYTnNPTFhkSGU4Q1ZaK281ekxETmxUL2IwdUl4b0t3aDl2VmRLR3huNHF4ZDlpdTRTRlBvSHdLZjlnOHVDK3NCOEFiT1Y3NnE2cWJ5OVdwYmNyMFJvaVZaQ094Y2pZZ082VlhvbTZrRkIrbW13YVAvY29xenhFRnM2VGh4a0pSR1F5bFVBWWJRRXZ4L253TWN5b3psZVdIR004aHV4blBaMEwxc3puNmpOblJ5WlpRYU11THZBck9GRGNJdVBaY1Nub2hycWw5K3p3cDZhakxJTWR4bkJDcU1Rc0JPbnhOZ2Z6dmFCZ3djZkwxNFJ2aUEzTVFqRXUzUXA4M0ZyM3ZDRHZqODRJRHYzYUxDaFgxTWUxZE8raGhsODNkeWVaZFNJMEZma24wSkttNkxtL3ozcG1ndU1vNFoyUVFYTjJRaGtyaGVFRG1mcWZ6Wm51OEk0bjlPQUlNSGc1UTNzaDRtaFdUM0xGT0hRN0c4UlhtT1VCeko0SFN6L1VwWlZTeVp6Rko0bWlpbDBadkQ4S0J6RHBBemN0R2kvZW93Nk9RNDJqTzhGTGtzNWlhTjkzTE94bHdsczY0MXN5WGdTS2RheXFDU3dVWlNSVEdISmVwbjg0dGpZYm1ZL3I5Q0o2QlR0aDBOMGVGS3VFOVN6Mlc1YjYzWkRaNEUrUnh5WWlWd09TUGxuSnlpajJVZ2wxYWt3MzZFZjk0LzFKaXFLd1dUUG15c2grVDU5ZUFyc1FGN2x1UVdqRnBPb1FXbHcvVWl6MEgrT2ZPZGRiWFBDM3FHN05wV1d5eUpUaTYvaVhwTlBheHNJQWxPMG9tckUyQWRvSEFvL1JCMDVXMlNkUHVYdHJUR3hOelNwaWQ0Q2NGRXhER1ZFL1ZkSFp1S1J4VU4zZWtaYzRYS1d1VkVNSGZSNExqSC9LY3R3TVV3UDgvVTZiMWloV3lmMWgweVBvdXgwSVBaRjBVUFdrWVlMc2wxSlU1cFdpa0d5NUlJekw2OHpBOWpZYlhNTDY3czJ6TG9FN3Z2U2U3UXdYRzB3TlVreVRBV0hqa2Urek44NlRQR1pkZ3haRm9VZ3BYaVNBeHdHRTZaTGFNQWVwb1hEVE9zNU53WjR2QWpRZWtRT2I1NGpxOXcrRXl3Ymd3a0VpaVBxM1Zmb1MwWkNnQXJmc3BCbWtpYTlxSkJzdlRzS0lWcndSakx3N0xLWVhmNEE4VXF5dHFCQlROL0dZelBGVnZ3clE4Zk1qSWZhRFo4ek00a1NsakFIL3FrVUgxak1vU3F1cjczd1ZoSSsrZlYreER2alg0cmFhNEhpMzd1bGxTT2dnZUhJMXFweUxCNENuMFd2OFpnT1NiUkxSRXM0L0E0V0FqN3F5M053cUdSZ05ocGRUOHVZbStKRVgwSmY1ejFpTkhaVVMySGZmeXRQMjQ4VGdKeDRML1Q4U1lKL3ZuR2FZNVRRRkN2TDhKWjdmMzhWeEFhcFR6dVQvaW8xQnM4N1ZZZ2pZU1FldDRZbFpZY1NKSHVaWFJKVlhQalJNYmtRSXJpZFN6N1pKQjFEWGR3VVN6Q1RRNG1SSForV0pMVkV1R1Q0NHZDdWtPUmJFRngxKytPdUpLOEQyek0xMG42Sk9FMlJmVGtFSkw3Q2djU3AxTmIzeXExUEdRL2U5WnFFem4ySko2bjFZLzVCQkZRQzBHbW04WWF1bnkzQlVsblNQcjFLbTVEN2ZnTW5vWUwvdzZjQ2VHUFNHUklxUVhmS2x3Y2JhbGJVT2lZRVhxb2JOQkpoZm9WNGkvNXRGWEcwZm5ycWdUMm5SQ0tGcFgxNi9rYUFpeXZBYVJaSVcveVZBaXJxdU1FLzFtc2phS2pkTFc3WjNqRHRROVZBZTJOSDkxVmtwSUllNUxaa2x6NE1qeUV2Mk1vWGJmSER1VTUwZUMwc0xVeVRhWVMvY2NDS01DSlJJckVOSEE2THpmeG1pVTNBbTVmZ1YzY0F5bGdtNEh2bHdseWw2dDBHMmVpak1OajVYOW1MdW9XRUFpQXQreE1UM2k5MXhvazJnS3RoQ2N6dUdTWDBhbnRXMkc1SVNtZEMvNGxkc1NpZ2U1NUxBNDBON2ZwWHFxQy83ZzFiRi9PMFhCMVN6b0NPV1I4RzE1NXhaQnBaWG5EZkJVelVmYzBpZVlTbFQ2NTJ1VkNDd0U3cmNMSUlEc21Ed1JzMW5uOFk3cTljbDdmemMvdEh3M1NHeGFSbk5HWFlZOGxEWFB4SHYxN05ydFc4bDZzTkJjK0lCOTFIYXVkY3hQTEkrNks3RW9YTDM5ZUhMbzk5akREbTEySjhGa0JrU3NjTzVrSUh5Ni92bHFqd0YzemFFUHo1T1NENDdKZTZCMVY3NnJ1QUdSeXMvVS9mVmxPNTRETUlRaWJzV1l0UEJxUnd4OVVaeWlZb0ZEdDNxaFg1YTJERkY4eUZPdnJRcEcwb004bWViUnBCWHFVMnVVS2lvT1B5akFGbjZWSUJqVmtnTHdpd21aMjBMNmxzWHR2aldHSzdvNDhNRTkyY3VheVloR25sa2QxS2gwWTVDKzhJUDFVc2FNaE0xNURuM0NQNDZ2cWZYaWFsSjNScXp2d3dXS1d5QzJvam9KL2ZiMHFRbDdsK3VuOW1vK3V2WmFrcjVBdi9WVzZQdUhucXNCYzZRSWtVYjJpUjZ3V1N4azBZTWhtWDBQejRmWTdsME0vQkRMdXdnWFE0NVJTTCtLMnFsaHNsc0tRNWFJdlBud2ZORTBPWHgvNXUwWUF6dzZOSE1TMER2YVBFbXJ6UmNEZTZMT09SQU9WMjFrLzBXQjZCNzJzZXlVaHFGOXBvWEo4bElycW5ibS9CQzR3SDNZUC9iazhyU1U4eTVIM1pRTGFCQVpaRlBJTjhORFYzNG9RNDQvb2FsaWJUNUdiSGEwT2pjWFBtSmNxcktyU1I0YjNUb3JjN3hlNjlndzc3d0grejQ0UEMvc2RlRTN4Mm1XdGYwOTJveDd2dnc2R2pyTnA1Tkp6TXdDbWIyZisyc3ZLTjdwYTVUNHlJaTlxWkY3Y1JWS1BXU0hvODdaMU9JRCs0NnFoODZuTmJBVWMwcEFFYnNPNmNFRTR2UDBrRkZWYXIxSmR5ZU9WRmZ6KzZmSFRGODlZNTVxdTJ6eldtZ2xFalp2RVpHUk5Bc3paR3dYZW9CM3Flb1NjNHhtM3Z1aFJYUElkVjI3akViSTh0dlVZRW1yUGpLOS9zbDJJaDZRZ2o3NXE2RjJ2UDlyZEg3ZzFNU3JCdDVYZWlXSURCUE94M2tUNlVlYTlDWEs1MFFPYm5lMnNDMitoNVF0cEwxWGhaS25IVFJjaWRjNVRMZEU0N0NOdk9kK3c2OTZxcThnYmxrNUVjeXgxRU5yOWVadTQ0VTh4SDBBSDNLckJPb20vMlBpRW9xLzBQRXlzVzNoRHhsZVNTaDM5aGJUWDNIRkljSnFNSnU3cHNZWWkzMzBEZXFvYXZvaVRvOXdvOGJKR25obDR2amdaMkIvWU0zcjdYZzdiZVY1emJpb2x3ZWxLb3BXcEliVXlmMmx1UElxNDhKOGJSei9EYy9YY2xYZ2MxcGJFRjA4S1Q4d0tUSzc1cGNsbTZEWHZ4UHBJcld5VEh1RU4zaUdCSWRsMWtPcVMwbzJ2WFhBaHVYK1RFSk1CT09YUFE0RTZxVlFaNnl1cXRVZVRRZW1PdmUxeFAzQVFKeTJQL2NsL1EzZ2hpR0ZNaDJwdGsrZnJLSU56TG96SVpISC9YVXFVYmZaTkRWd1psZEx4Y21zOERzWUxDa1Q1YlRJUWw4dlZzUFpKUmpHdU1jQ2ZFV1JoWWM3dks5Syt1MWZYVGd4REZwbWhBWDBoaU1hSU0yZzlNYm90bUhxK0IwRzdjOFFieW1TZzA3SjlEYXpydTJFZGFsZmpGZTh6UG15K0FtcUFCVEc1TEhZZWthV0krdHBCWVl4ZWJWUGgwU3luZU55ODB2TWZVSHNtbjd2ZEdmQVVvOGN5MVpkcnJ3OFZCaThYS1F5a1R6aUVmTjMxRUl1MUkwcWFoN0ZKL0NhRUVPMWc2WkVGMmNPM281MFp6TjdaNDM5OEUybHM2RlQ3bjdwRkQvK2RwYlZvcm5lNmJrdTY5SkIyb2ErbDNXNDVvOWJUSDU4U1BValdqcXc5bmhlWE5paVRCVFdEaFpNMFdjYWhUc2llMERiWmhyOUE2eXZlUTFLeUY4MUdVektFK2VKUGdhdkovdU5tdlhwUXFxcWpwYXdqR2wzaU81V04yUytHR1Ricm81Zk9mT042NHA4K09DZ09mUmRNRWltYWVFVHZ4Q3NkeDkyNTVNSVcvUjdZcjlESWFlODdxeFhac3Z1N0VCc3lQWUdYaGQxbk81TXJxVk84NjE2cDlTbk5POFlGcS96UGJhYXA3bmZuSXNVZGUwWE85dGJ6cTFpUHhncXRoRm44WWxOQU4xbmRXYXl6enlCeHhPU3BlYWFYVE9JNUZlakFnU1lHaXNPUTVxYjFtVXg2RmdHWU81Z3R6QXloQkNMZ0VOaGczZm55MEpScTZoSWw2djFvQzJuUFNGR1Yvb3lmbXFQU3ZLOC9RQjJNeUFaMmhjdmc2aVZHZUoxWjMvVnFtNWpFdno0M3pnR3ZUQmFRc1dhQmdRNjBMNVBRUUJvSHFjZTdBdTJISEhtU3BDTWtDWHNIM2h1UHBnaWdpVlV0Ulhub3ZiUks2VDJRaWx6R0toelNFUlh0dXorMlJoUFFoZ1M5VS8yWTc5NlJiUkZKcGhvMUZ1VGdBMTFqYy9NYVlVc3hZa2Z0RllpTW5Yb3hMcC9rZmxObE9RVW04ZUVyK1BpUjZQUWJoV084QnEvQUtYdEE3VCtHNmpqZ1lTUm1mbEJhVU8xUHBwYlZJZXdVZTR5cUpUUlZjUXFaZVVFUnVwcmgranBvVmg2TkdNWnMzRVFqNWZLTTNmUkpSYU5QeDk5OTdpbEozN0F2M2FEdE45amdYejYvZ3kxcStLM1NFa3FxTlE4SldmeER0VG9vdWRXRDV5elNKRVI1L1FRbS9HOTZ1VDA1cFZ3ZVlUaWJpL0M1aUlucFc4T21WZlZCRlV3OWpUR2FmSVZ0SldEakdUZEZrL0JIdHQxbEdUN3lPeUY4Sk5tckRZdktCMGtGNlRVRXdqSE11TXE4a2FOU1E2Wi9rWndtVCtyUXlBTUpBeE1UZ2dJbE0xNENQUVlCbkVoa3M4TzdWbEpSZGZtakdqS01lOE1HRXlDaHZCYVlwcUlhWjZBU0tUMFlyUGNReFgyS1ZoNTRrWHpIcFg4NXFlRXhSeXROV1hiZmh6MWovMXVGVzV1WEowOElEdnhyZ3E0cnl6a2k0WUx3Q0xVMVloVVl0bTBMRlNuWHNEYmdKWm1wazZpSENjRWVuVksrM3JmWnFQYTQxeVZRdTJuRWlLTWhBdll4Z2VhczhsVTJHV25NL2tRSGx5OGFPWmRBenN4VEVwVVl3ZHRHUDd5YWlDYXZOcld3a2lMQTNyd1lBR2Z5eFJ2ZitKNzJ6d1dROTkzT2tUbTdKeW5NTE8zS3ZDbEcxOTZvN0R3RzNuQTNmMWhxTVZzQ3JvWTdSNGdyQVVmbCthSlNLcVN1cXdqcGNSNkVFdUF1d1lHS2w3UGZ3LzJGanlyZUVGeXE0MDV0T3ZlSEtsbksrc2ROY0tObHFOMm5GTXdQTklvMDB6V2ZFU2kyam5RQzdGSFVEVEtBa1pFOTZKL1NCTVFhTFc2WEFDMlY1WXRqSjFxSFFhV2NBOXphcXBLa29VVldreks2L0F0eWRJRE5hRGZlNmVPa3VNY1lKTC9OM2R6UHF1bDN3QXFIY3FCNC9XajZiYnpIL2p3ZDRuL1ZrbmJCY3FIZkVVcHdSVGJ1ZjNudWhGRVFybkt5OHFZbUxkckViN1JnWlo0d1l1Rm1MdllrRVVFUG9wSHk5WmpiUnJJU0JYOWtzdTBTeHI1Zm9UaEJYODVPaTVmVjlLSWpvSTFqVERnOXZrNHBodXFUUGpvY0JBcUZOaXdLNTZ1K2tudDZmQjdzZXZVc2d1V0lQajdaSjh2WnZNajVZbGlPZUV5SVVDSWw1QjdoZjJrUzRzU1A3dGNaS0NPU0VCaHpvTElOK3ZaZ1pCQ3ozcGJWVnJjM1VjSkUySEFScHlvelpOS1hseHJnbnU4VjJWYWNodTZWYU5pUnd2MWdXdjRIT1BCYTZDcUFMUks2RHRiQVI5UlZVazRZb0dOckx2Q2JKeGJqMHp2bDR4cXE0ZUJFaDlzRUlJUHVyVlFXZHJjcW45Qm8rYmk0MzMyUkpFWmhqRmxZSXM4NGxlblo1eWlHWU9Mejd6VU1RWkFpak5tb040WUp2MTRXZ2hxTXRuVmgvaGZnT3FGM3lVUkhRdDZyY3VrbHpFR2NwUFNWamdpM29ha1o0MnFyc2Q4MlZXTmJoVDk0OWdlZnExK1J1MWJkUmtXeDBaTDZSUWVDYTRKUmJQNUtSTVVSSGMxdXhFQnFnaS9GSGxUbXlnaXY5Mnk4ejEyTlVyanR4VUtGeTlGL0VIOXhUWmZPZVVtZmdWT3NmU1R1WGpmT3Fkb1EwSkJZd0F4MElJUGRSMS8xU0NzWk95bWFjcTNGOHJLY2R3SXZnSFJ1aE80cGxuc0Zud0pqTzU4eDJ2VldrQzJ4YlBYTUQxRmZyalBtSTdYVk5uL0c4dUdhcWVjT0ZKTkhhaDJaLzZiTW42M2NheTBsejhiYWFjUU9md3Fjb1V1YVpWeFBHM21XZkNMMmFvWk54ckJmSDU4TkllaGxiUk9lcUJJdTJEV0hPU3ZoUUxXVnhDL0VTNmpVdXlIL3dWcTY0ckNJaXF2OU13VldpUVVnOCs1V2ZYTHEvaHRkSlJwalFZRm9DaklhR1FCTDZkQU9jNTg0bVp6ZHA2d0h1ZG1EZFFSSzdnYU1iWTU4UWxaQlhzejRwWDZFakFvU2g0UkpCbjEvbk9SUGQ2ODdUNExGdzZyaXhqYjBGVXUvZXZ6N0hoaFlGNE9uOHRZWmZvUUVoTTIvQXJJL3U0TEk5UWE1b1pwMk1NUkkwYXZTY20va0V1Vmxzcm9adlI1VjFIaEozVVg0cXNLMmRXdUNtT0dlUEVsNFRpZjY2dlBRUUhyNXRvVHNTVjV5QkprV0RwZXEzRlIrK1NBc3RxYjA0RUU4dy9FNGNjOWV4YjVlUWVQUzJGeVdSZ242anJ6ZFo2d2FEMS9lNG92NVRUbmlDTUN4RUM0cXlwUmRIeG9wWnRvM0FOam1UbnBtTTZwQzJpeEZ1MWtmUjBTYW1qU25FaHhyUDlLS0hXeWdETDVCK0lyREt0dzBsc0N1anU1cEdLaGxaMnQybEZZcmdCZkVmcmZoZE0vMFlMVlhWamk3SThDL3U5czdBbnY1N0hSYy95ZWJNMldhYm16MG1TdWFWK2Y3ZW50M2hhNHc0a3RpWDFWZGpCejJLem9CZDA5VXBEbkNYVGJnSEE0VmFHSHpRalVYcEYxR050SVZINndxckFSa290SXcyY2IrdUNqdHA1cHNRb2VraDFkYS9mbWt3RDdLd2VyOS9wNmRRRE9vaU83V3g1d2cvc2Rva1BxZDBncEcxSlV2VVV5KzF4Vlc1NHFmVkVNZ1U1QXI1ci9iNWNzMUpPdkJPTENMaVRiZDExYXFnS0dCYUFWVE5QUVd5bzJhTUtNS0doVFIzQm05T1VjQ0FxNFZSOVZheGRCM1MyZEZCY1MyMUZubis4OUkzZjBXbytkVCtrRnFmdHBpc0RXRGxKL09TbHE3UEVuNUI0ZTBHSVlhT1JFcVZ3QmZ5SUJKMCtmMUNhOGkwVENLR0lTY2NrbWlXTWlVNXNuYndnUGRhQjhyanI0ck4xa3RydVhsWmpQMEpYdlRUcXlodFYwcnhBM2RQdFhENTRMbllGeXkzVG5reFZHTTRDN0NIZlQ4SENQMEpFWmVFaGpzSGZNbFdnVmg0TU5XQkd0SjhGNk0vUG9kQzBTT1ZnYkxpd25qNVg2dkNtUFhiVDFEeVorVTBtY1c4dkRDK3ZuYzhiRlQwOG1CVDJOWkl1cGxzZkVoYjc2SzVVMWp0cVF4MXFWTE55QXRFa2ZpbHBQMHRmQ0hKenRGbmF5ZFZQWVNjNCtVV25GaEY5UkE4VmNGNEJyRHJ0Vk14Qk4ybkRxZ1I5UG04RjJnWHM1ejNjMDF3blJaam9GUmo3TWlXQUlSeUN0L0tOaHJmcldPR1Vwd3JCeFJGMFI5Zll4Q2Y5bThzdktvbGVvUXhITU0vaTlGR0pQRFFHQUlQMGJ6anV3K2RnK1k2aXpjbHRIUlQ3Tm0yWkdlOVU1ZlZTOXBMNnFiUDkvRHdGbUFGaHo3MncwejlZcWMreitiM25OejhFV21KaEZyejRQb1ZSekhxakFRMkczRk9Jem13ZnQzYUFuOWptVnJmRmZKOFZIMlk4dXMzeFhxdlhsVzBZZm1oMnlCd0srcEUzdlp1cWhtT09qZXM3Z290Y2t3ek1UZVYrZnZPMVV5YlhUTlF3K1h2RENNVzg4L0xTWlNsZmNCeWIvT2xGbitXbW96UnZEd3VyVlJOcU9DZzRTWk9nZTdnNTRsM3NpUkx5Wkl6bVVTNjBlbTFiOHBYOTAyV21zQjBUTlgxY3MwOFMxWDZWWkladGFwRy9IdDlGUEdWdC9COFFETjVTSTlaSjY1YmtMbk9KSmFyamIyeXc3YklrOWo5V2VTZExGOWcxTGpwMHlxamtpdEJZc0wxL202Y2tIbzZiekI4UWRUVGQ3OXhHNVRuMU93MzRNQlJQVEJMRVd2b2hhSmFnUlFYMjJ2NjVEc2tHZ0J2SVVOQ3FzNWthOXpvaEVua2ZZS3RoMzJ6SXFicWlUbVg1bXE2bForeUVNNE80M2c0WjNiTWN4NThudG5iNW9lQUkvUkIyWjZZaTJYTmN3eFJDejIyNDNGMDhKVDhmRVNnNGkrQnJTY3VEZEFjUkdpNGVIRE9OV2FaT1huZjZrdk5hK2U1eTQxUWVpakY0VFp5L1B5VjhCNXVNeDlvM09uRURKbWlhb1AzbG0xNkszU3lYM1Q4ODYyUXZSdmtFRkFIbnpHNFh5OGNnalZ2d1RhR04zamtLaHJVZGNsemRTZkZUZ2E0MHlMSzdwb0JRcVZlQUVEdEtZNFZIWG1qbXNtekQzLzFQc1FPS3ZScUNIR1U4SGVuTmdJOVdpUlFpbTF0RktoQllUUEFZL3NYdGU0eEs4N2hmNDFDREltTGtqbmZBbDRiTTh5SVJpc015MVNpZDdlVnZnYmNtOWJ1SnJWZE1IU3pLc2tFTjl1S2xEYU9SVWdwNDB2em1QRnhRZllIVUpnRUVnNzMyd1VTbzdmWDR5c3dRY3RXYWhUTkR2Zm9INkRIcmpjdDhmMWhuSmJzRVBsZXBZVTRNOGJpVlZuV3NwS2tETzJvUlFFejU0L2pXcktiRlF4eEFXdUVMNUZIMXQ1TTBWTSswSFZ2RVVnZ3JQN2M4bHNLdVdWbnBzVXJFY0NUSzNkajZKamRCUDg5WHdxakNhbGdvaERVSFA3ZjgyUGtyRHQ2Qk5mcFFENHNHT3pWN3V1RTFMTEJGTCtIWVd4U3dQNkg2L1ZuZEJpbVhyaU9nN2pFOEpINnRhWXRWZ3NjcEc0NHpWdUhsSk9acjBVVGl3a1E4SDVzZ0JweTlobmxvYVRUWU9RQUxZU3IyU2ozVElJZGJMWUZLa0NsNFg1c0MrRW85VS9vVVJkSWp4TzY1Q1VXRmdEMTQ0S3hxSnBZTHNKekxLMnZidnVuL0ttTEorZEJ3UDZzZWp6R05wdWcxSEprK0FQTHk5WVA5SEwzOVRJQ0dDNUJBS1ZUVUhHcDUySkpXNDFRcHBKMjRTOFdBOTc2S0RXWEM3TC9rS3oxUHduenhJMUt4ZGlkVi9EZ0lRT01Ld2pLVDA5U25vcERDN0ZuWEFuNW9DMm5oTjhYZlVvNzEveFY4eDZMSW4rbTFiQnNDK09BRWhVQTJ2b0svOXdjUTRBK3Y5SjFaaGU1OXZmaDRsdEttaEFTZklnN0YxZDRHZzByOTN1RkR3K0xWUGMzTkFwL0lpZFZ6RzFYTzlZaUtubW5QQTJBVHl1UVkvZ3JYQjEyZTRMUVpUZHI3eUYzN3EvZUJrWjBSVEYzeTdCUHdrQ2U4bFBMUVNjM01ydFpmTjIrMzBDOXR0REtmdTczK2FFTUVXUUh3blFPUW1QTUNXazdBRmpmTUVYV0Q0Q0U1WVVqVFZQSmlWV2pWakkzcC9wTWkvTG9YWDJyYVAzNjVqdTV6YjlDV3BROUFTVU5Ob0JuL3A5dGdhc3VBMFc3V3Z6WE5VTmZaRmdrajdjS2Nta3BISndxWGEyeTFsdWxNSjIwV2hENmJyRXdPVVhCZW5YRHAzNy9oLzRJRnpHYzJuL0d6d2V4K3hmZUQrRTc0SmNUd0ZGaTUza2pvd3l3eFFuZHNkN3d6K21EOStVb05rM3ZhUStycm16Z2VicjdMdlovdUdCb0d3dDZ1OGdNUStqMm1KaW81SlUzVVM0bU9OTzJKbThyZThSdm50aTYvTzJQOFlQV3lCT01QdENEWTAzdC9NSGNqUHZkakRjSlBzcGNLbkhRZjZZdkRPWEJsRnJXckRVcWJtcHFTcnVRNTM4dEkxQmhzaHdNNWNaK3RuZDh6b2E0bXM2OUVyL2hpMS8xNXdHbWxrZ2pMRTQ4OUthYkY3MkhUemZQVU5SdzBNeHZFbjFoMkE3OWNNeEMzUDZwamxhVm9wc2JTYXpYWnovMUhJcEc2ZDF2SFR6UzVNYXJEbWZhYm5lMHAzWGQ3Rm1WSSthNnJFUkV5YzQ4cDNwU2V3YU9NSWdPaDE0UVRxWUFSb3VtN3c5Tm9XL0RhVDlaMWdsbzY2V1NSV2REYkhCaDUwTTdpcUdCMm9NbHJOMytkbzFhM2J4dzRhYzJFOEgzY0RuTWpGWjdRVVhVOXU2RWM0RCs5a01YSU9wRjJjYytoOFM1TkFReXJZTkFLbXRxV0E2My9oeUM2cFdoSk16NWV6YldML1dKUnJ3QUQ1RTF6VU1LQ1FEbjZVdXRjTGRCVERUbk1MUktMdE93NUxUN2lDUHNoNWl5dWF1Zzl3d1hSRGRtWW9aZVZ4K0owNTEyYkpLWUMrMmg2R3Mxa0hJOGxiOCt6aUorbGNuem8rOEhOcWg5NnkxMklNQkkzNEpYbTFTVlFLL1hlQktjcTZHeW1wQUhhY0lsOExjNnEydUdtSG9WZ09NTlJWdUFDalhhaTE2RmprRGU0QlBmOWhMSUJleFBLamduVC9HNDVnY0hRVkRVZFQ1UzNRNnBXNkd3NHFpaWNSSHNTdWVuQjc0cE9vVDJBVXRKZFpsRWloYnJ3ajd4QWtKRkFDemdxb1JyRnhlMkNRVlkzVmZCRzlzdDV4UDltV2FOVE42MCtKV0V5d0NDbzhrWUZyTXUyQzY0azI3VDdVME1ReDJTdWZ4MEtXOHowVi8yT1VwMHllNzNBMUlYZHJ2dFBVbWlBWXNoeFhaaFZyQkJIR0dlTjZLMUZMWlk0QnNLSnUxTkVXaDJtOFBMUFcrVER2eGVHSVdBUFovaDZzUStYTlAyNjFIT3FUTFc2Q1ZwMUcxSnZGZkJ5NlErQ0JnSGw4SzFRRXRReEVUejQwT01HeWZHR1BVM0oyNVYxb2h6bjNyMHBCZkFiYURHRGF0c2RGc0NzSGZCd2VSaDlpMk55T2s2N21NV0xrUWhmVSsxOXdhdXNHMVBkTThvODRjTzl6Q0tMV0s1SVUvYWpIdHdJUTVlZHFTQy9JSUtxWHlHRDlFRkJ3N1RGTi9FZDJDRGNmUHFyNE9BbWNBZklYYUE2VkpsS3B1cXlvT2F3TjNweUN1N0sveEIvWTJqZkdRZ0RoSUg5bkhrR3R2dDJuUXV1QVJYV1Q2OXB2SkNzc2FreHRsZ253R3o3bDRzL01waS9zamRaa29nRTFIUEJYTlM4TE1MUlh2R0lOM3M1WFUzWjNDMDJIbmwySHgzbzFubi82ZFQ3WU1qMlYxVVlSSUZNajlFUTZ3RTNaejViYlY4ZjNYSGJ6M2RwRHdLaTVlaXNyU1FoTHFHMGl0MkoxcytrU0dtNGFvQ2M1WURLQ0YvUHJlMThQN3JaTDNqSlo0dDdnMVE0ZjdhdTR0V3J5OTlIdnIyN0twSkFEeWJjMHBsb0cwQzBJZjhPRTV1OW9vSWJ1T1JkMUlVbGh0QmltcVNUbXBZTVM2UjR0dDRQYmo4S0V1L1lEOG1rNUtlMWdjNnBURjNRQ1ZRSUswVFZZeG1EVUVGamxsL0lodDNIRTJlUzQ1WE9rQlUyRU5USkd5UytVRUwwWlhzTlhGSDlyaklKWmYvNmc2cTF3L1ppdS9sOTRqZEdUaXgvV1FFVGxvVTFlM0E1TlRnYmFqbkkrOXJXMWRLOHVzTmVzaWVSdjArTHZINWlQU0tyNFc4RmxFd3ovZjRRVDRJaWhlOFlGVjZQRDcyRGt5ZnR1cjBxWjhVOVE0L2tmUHR1SnBRNWRjTjNlOStZVDN6RmM1bFdqYXBMMW1uTVJ2SWZ0anptYzFGZ3piWEtndmRqeXhyaWdaVG52MVM5L1drVCtaL1JwdDJWMURxTXlxTEx4a3czY0pMK3JGbjdwc0Z1bzhIczIzTjRTQjZlL1l0MVIrTHlsN3RsRFJ0Qzh1K1hTSUI1b0VHQzFLSHFGc1JZVHVpUnlEd21tZWNsakwzOFhaUE5ZUlprMi9jdE9LRzAyOWRSQlVEc0tXRjN0NzZ5SzVxY2JlamlSTVVPUlo2dGlmOXFZSWxxK3MzWGdTdGY1SHJyVTBTY05QMXM1U2FFMWhHcjc2K1RZSXZXSkVRMjBDZzY1VGVuKzJGZmdiOXRudGJYOU5PZUVROVcwSFdLbVFNMWM5VW45Z1JJc2hPOGxHNE5tcmVVbkVkWlYxNWxCTFRHSlRFd3RQYmliUXVuOVQ5ME9ZMDVwb0FxVnV2SFg4WmEvUWVmS2JqaW9WOU5DRGk5c29CT0pNVGUvZjZIZjM1SXpIVXJ5em01cHI5MXNReDEzamUyYS9wV1M4SFNxemZpeG5jOTN5RVU1dC9OTDhETWVGb01nQTByamE2clZjL1ZWWDgvbjl5S2VDdzFzNTBiZlNqYXJLNVZXcGNleXlYYkpDZzZIK3VrbHBPdHY3QVVob2g1YVNBWE1mRVRZZHY1clAzcXNJc2REc0NNMFJkOGpPSnlJcHJOZGpWdXpSeDFxS1g4VDZtS0VXTGRKQjBxRGJnRklYY2JhaEljdElKZ29tc05HYVlOU0UvSCtSbTFpNkIzdUt4NldyK00yVERjelZvZis4b0dKdmVqT244SlYvUXFsMjBTYjYyUnhuYUJhTGErQ1REK29HSFFBZDNxbFpHbEIrTmRRejZlZEFEaXcyd2hjNTJjYzFwWWpkaUxNZkxFZkNOS3J5N2srUU5DQndSbmxyWkppdkUrSmVvS2FoVWJZY2toWTlINjMzWkM5bjA5Q3NXUEcwOHUyMzhXY2xHM2lhM0NNUnNTZm1lTE4rd3hONFA4MHJ3Yk03cmVPM0Zha1o1NGtMQm54V09vY2pFTnJsWG43cmNjSjBYTlhUcWZiOXVWTGtLY2crbUROZzVmeXZPZk9QcjcvSm0xSSt3REsxd2ZqYmtyOWl3MzZtdGxJbTU5NFFCYlAzRHBoRkNDOHhqelA1RVFuL00xRnNyVUUzN0VsU0NTVnhSbWpIRGo3L2kxaE5TczJmbWlndWJaSmJpV0FoVEd1OE9QV1czTDJjdlIzWGFHNmRDZTdtMXhCMDZnWTJTQkY2ZTVwOFdyNVMzMXpieWNObElrYTloZWxNaWczUTF5V2p1Yit3VTFrY25UTzFhU0lNMUdXVjNIQjJCbDNRWEtqUXhDQUVBUlpvL1BvQWh4dWV5ZnJLd3hWQ0dZdUQ5MFJ6U3VScEE2TGJxUEl3ZHJESnpiRkUxd3p6enV2UEQrUjRlc2ZZSjMyRnJ2SlpOK25DcHhyM2NKRFlSbUYzeTRuR2p2YXVUSVZlQWxvWmwrcTVNUHlEbjRib0kvVllIUnpJbzhDNlI3Q0FQV3U1Smt6cXNEb0EvQlloWSsrbHJja1YzL1FNbURYd2FxZ0lJT3hVbVJLYUlHR0M5QVU2UHFCMG1RS293N3VjVTNkRUlzZTF3UDBqOFM0bmJGTk5vbFhUWjZtaVBuY1p3ZlQyRURRK1NrMy9DNGRaTlVzYjFFWm9oU25sOFRpdzdoOXQ0YUZrUjVySGsydDJnUEVvUnlKeEhUR01TamxDTGhUNys3S2RERFluemQyQldaeDFBVkYyUmJwY2Fqc2NlUEFVOGx1TUdFNEN0NUJ6NURma0xmWlZBZ0I1VmZVZHF2QVlNamNsL2NXMzJMSjZlcE5oWHFaQmhsZlFBdmZFWTlDWEtzYXNqanhwaVNDY0tFclJ0Q3ZVdERvRFd4WlYvS1UwVDdwbW51S3MxWWhWb2NTZXRRZHNERHRHRFhMNnZxSGIzOEovMWJOdWt5WnVtQWtWbHcycFFGc3Z4R2lKdEpZTzdzL0lqbjRhNXVscGFMblcxdVR6SXk4enllNVZiSThUMTlvbEZnN2Y4M2Q0cHNMQjRwYlBxU2ZCejdGUmQzb1hpUjU4U2VoSDI0T2E5N3phaVZ3eldYc0ovSmVvVlZJcHpDWmE3T3lxN1E3TmhxTU1nUFp3VVM0bmdZNSt3RUUyMG9ZWmR4aER5YWJQK1dpWExhQTQ5QzNXbDI2aG5za3BoY2ZJTWR1bGZnQ2JIbW5KdTN2Z2c0b09nVmd1cXVtcGdzTFdyVGlEcU5JUlpsV0ZGek1QVlNQOVVIYytGdzB4TXZRLzFGY0ZmWWJnOXcyTldqSzJoM1BVb0VwZ2dKR1kvZloxaGYvTW9kR3krN1Uzb09ZT0JHSkxXemw2K2NrTzEyeW16czF4cCtqUE9SYjhDRVNZdUd2bW96K010WVZOTkhZM1hjd2kyZndkSVNYaGFyVjZCOXJjQ1d4bmRDeEJQSmZXRDhDY21wYlBCaVlQZk1nYlJZL0ZIUUE5Vk5uS1ZKNlVBVms1TnhlZ3NpVEJENUpPaGdKN2QrYzBaRDNGUXZlN1FWWjhvWThMNkpRczR4N3RtK3V4M0RzYjI2Q0xrWEtocWF0bUh2bG9zSkpMVlRRSnhVYnFZVk93dVhGSGx1b0NmTzRocGF3LzFzQmlTTHUvY2EzZjJzMWlMNDBFMXFBSmZOSTRGWFpCZ0JDOFNvdklaUCtNeXdWTVJQT2dLNk5TS3B5RjhxTFRvc1FnUmt0c0lxS2tjY2tDRkhaUndKMkhENDJjdnpQSjQwZHIwR1FtRjhBZmVweWFjdDIybnBYN0g4OExXMVgrZHpFYUJqUUhubzRocjRpOW1vMmpUUjRERVZVSjFtT2ZUL3NQSitXYjE1eFJQTE9zeGlVSVNsaS95Yjg5OUJpdVU1VlhRbmZNZmJBWmZSbEpwNnI4Y2pQVG1aWDBLRTVMdEUyMnFZeURvMk5Rem0wNDdoMitpMUJPUFBVWmg1cWFVMnJWV2xEekFUanBCV2NnRFk5bnFEWTgvdlhnOG9pSzVzZW55UTJCYk5GR1J3eitMR1ExZjdKMFFpMFlrRTFLU1VnTmN1MC9lM0ZFR29OR1lmYTlvTk1XYnJVMVFiZEl4K3lXcStIVWZ5Nnpzd1UzUitZQjFUUGdxZ2tXbjFPZU9RaWJHRmJmTUtWMEFrRnE1SnFrVnlwUHVJMjdUdnlVOUtkTjc1c2V5ZUVBdU5GV0I2c1Z4VHhDRm9CaVlyZ3pUckgrVW1sdCtLbi9DeHFCUHphZHR4QXA0NURVU1NWajhDWjV5amN3dVRidEFhd3RLSzVVRy84Y2lIb3A4K01ITWRVaURrajNIQVZPNWxYQXN5TEpQMTRnNTVSNndIRUJwZ3I0ZGZ1eHU3VEE0blE3QkFhenZ6MEVoSkIxUkhSMHEzalJnZktQWkQ2T2YwaTFZWVZFQUc1K2VKZTFpVDUwemo5VFpzYUFDNXVvWWs0UHJvc0ZrcFFUbmJJLzJ6OVkyVERlc1VKMEVXbDR5UXlseU80RWJVWE9yK0xrZ01Vc1NpWjkrV1hCVGpnVk8wT0c1MnczcEdWU01qejY5WkNGRFlXNHZQOGpyRVplVHRvYlVBUithMGxURFhoMERETlZCdGFYbWVnenRBUWRRSVJhOVpkUVlxS3BXVXZqRkNqYzFybUlQNVBqckhrMTlHSjYvZTk1RXNGRk82aVhCMytET1ZaeVZSQm44NkhIWVlmUWNaUTc4NTVkL0ZSVWU2TU83R3F0T0pxUnQxS21NODByQ0dwdnFtYmNJcWt3QWlJYUVKT0h5NUU0dTVoT2JFN1FMUUpuYUtCVnVtbENhcld5UHlSbXRIVW05VWM5bzhaVWJ2eG9CaEJpRmF6OXhkT2tidFJrT3dGZFg0UndRTEJVWUhod05lQ05ycXNWbFo4WUI0YytQWFlJVUk2VldrL0dDYWpyUlduNFM1T0ZaYUZlQkxaVUpObzUvQm8zQUxkdi95MEFPRzhUdys5dGVrdjB1WjdGbE1zeVRkTjI5Y3hkRWNPd3dUelA0UzM3TjRnWEFnSWpINWpMcDZBN29PV3JubXVXV1VHeDBlVFJ2UzNnUlJDTytrOGZ1Z0U5dG5TMC9sYWlNNUNOMVY2T2NZdUh3NEV3TE9UUHlSbHBjZ2ZBcmVWYjR6YXMyN3lEa1VaN3NHZGYxL2ZJR0lDeG9BQTh2TGR0WUZBLzNwR29yOEJhMXZPNlNGbXBkbWIrRjVpTGU1UkMrY3pDTVM2bmdIV1R4bmNJT2dBNVA0L3JzVHJaZXg5eFoyVnJuSlFibTlwWFR0U0REdDVFamhoSnJoTGRrajBDTktpc2RQU090RnFJK3JleUNNK2ZrSlJkVHlFSXJsOUtZR0F2Nm5VRlVNTGtwY0FYK1h6TTd1WEdvL1lXYmYweUsyczVmVzZiL1JuRG91NFRPRHZOOHA2d095N3MzSlRCSmtFYWd2VHNLZlFndnZCVEkyYkNtV1d6d2M1RlNtT1VkTkx0OU9MUEhhb0ExZ3JhQ2dpUzVuSkZ2OWE5OVRzcmdjWVpFblhBVDBuRGJMajZxOTRuVldtS3pLSVVQY2czUGNJejR2WXJKQmFVOHcrdm03TE9BLzIvUGRHdCs0andxWmVwa1JmaGJPNlhwaXRMZ3NRWUlhNGYrT0lveWh3R1ZVd2l2Y3J0NGt6d3RPaTlYZ0RObkwzckR0ZDUwTWRvaElIaEpBWFpaUGUzc0NEMmltcFZMcmVpdXhYS3I1b2lZT1ErYWxUNkRuRnNOeGJtREF2b05wNi93RWlpZEJTTVozaUZCODdnaHh0LzArU1V6TWFmMDFGWFlGU2xVYkZPbWtvdjExSktQcHRCR1JQU09ublRpUWRieVY3YUZ1Z1dpcW9VSE80bFI5QjdJRW1oL3NvQ3E3dmpHYTJEdENZQklQNlh6YmppUUJKOEVmK0x0cTlWUDkrRDlpYzVtQSs5VjcvSTZrVFVaNndEZ3R3N2wxRW5jekIwc3Y5TlpSbEJGbEtRd3R0TVhmMkJmOTlveHphVjYzYVhvYTJibDYwbGtSU2loOVBkUEd2MUdLcXB5ckhrYWhkamt0b3NBVnd6dGxwcXU3WTRsOVh3OEdvTElpT3pvaVVYdlpJS01nZmNrajBmeE1pS0JFL2gydzErSm1GR0lKWkUzZlBZbXVCdVF3TzVDakZtaHhKbFRKZFBFY2srYURBODNjWEd4YXZYa3NoZ3FobWZsQjBjL3pudGRROVlMU3h3WkhsSmhQVzhNZ1hZNzFTUmNRV2tTK1ZZSEY1UG5TcGswa3FxWUt3UnVJU0xLdGJjNGFtMmVqa0ZncXJkSEJ3ZSs2N3drREZjQmxBbmg5aXFBZHJJZHJIRFljRnViNWkvaElqSXNvVGc2VnFTSU5oYUxpb24rcEZPZFYwTWVJT3ZremdyZHc2YXlFSFdQYkRtdXZxWG4zdzJGYW1nYWVDZjkrcnY4YkVLNG9qUkV4eE8vT2FubTlZZkVWQnBZZTV6TXA2d084d2hSYjltM3J6MGRoSWJrK21saEhGc1kvUnJwNDBYdGtZNVZvN1FJWnNZSGJWZXBFL0tvcGtOMFYrazVSMmJnWFM2RTdkME5ZM0NEUlEzeW9QSUVwY1pPLzMvMlFybUlZek5RcHI2L3NZSWNlRElEOGVWc1ZGZHRGakdMdWdMRGxOR2VlUVdQSTQ3bEZiN3NuVnZNWDQyN05ESGZHb0FhbnVjbUhFSWVxenQzcjdFR2Y0UDBYT09DWEN1cGFONjZ0bHJuSE9oMmRkaDhTM1lscFdURkI2ME44bFBXZTFaK2UwUnl3OHV1bE5VMDl1OUp2R2t3SzJldnZBdlpweXA3OEp0djVHMUpPdUtnWmJsV0VQT3VJL1NSWEt6QlZjUDB1OFBvOFFORHVjQ25TUGt2eWlvV2xGQUZiSmNoWnZBTVphQko2aFMxMnE3NWxSbXY4MW82MENoNlJVZFZjQTlwREIyTlEyNVJnVXowMStiaEZMdnNSN01sYVdSbnVLSVYvbzZaUXZHb2N1UFhaMkV3VXJ5SUxpc1FtQWFydWFCOS9XVkY5T21OaGhPTU90dzdmZlk5Sng5YmxpUnh1KzkrNmMyWFJiSVpQTzZ3V1dTUGVEUld5TzgvK0ozZHY4UmQ3S1JWQVZDdGtUOVNhUW41NzdDUVpmKzFMNEVCbW5IZTNFMzI1M0JNa1hDVXJLam9ZN0JBRmgySmZEd1lMQnVTNXNKQTVNc204QUJuWmxURFBGV0pWRGFXamJZUlovaUhueCt6L1RzNThiaE1OYmI1L0VXYWxValZWWGV2NS8weWlYcHk1bnJNMUZsM2tOTm9PS0l5NHlYS290cmVCc21mVFB0MG9YRkFIakpNbDFDNlo5dnF6cDR4RUJCNzhlcStnbTF6WCs3OXRpdHpzM2RMMThSZjlaQkFQWkpMWDhHd2pKbVpHWVp6cHRCenNnTDBZT1BDN3pJWEJuaXpPdXRWWXQ5ejJ6YnRpVUNoWVpDTXpNd0Z5aWhKRGVGQzlZMkNzVm1MR1gwWXhGRzliRzN3WnRGN0lQWUZPVjJ4TnFZTEVLVy9UZWVtYVQyb0tGNVdkbjZ0U0VIZHVlV1lyS3U1V1ZxR3Z2NHF1VFgrK2xkcjFsbFBSaytNSW5GVFNXYk9LTXowWCsvMUFPeDZWMmJ4TWRCaUExVGtCbVFWVVFCOEFXZTdVcVhWQ01CajNFNFliZVZBMElBendESDcyOWRKTXZYK0M5UTBpUXVKR1Z2VTh0N2FwdkUyY1ZLUmJjbHNVOXBKQXpkOXZXV3A0dVdIdm1IT083c2d1OUZHb1V0RHRma3dYWWk3bEZrazNkWVRqWVo4dUh5d0xuZFRwdStmb0VTQm5WV3ZhbFlidURNbjBVM2k5NWtBemJjdzlmWCtIeTlEZFpTNlNCL3lTa21hNU5xWUM4VDZPaE5uYW0wTlNDUm5wZ2h4eStQVUpQUUg3Nk5Dc0pTOVdaYTc3eGRaWlpPQnNMRExBTGduWm5mbHNvUXpYYnZOSCtGdVZXZnRTNmxCM1BKd2ViSGV1QTRyRjdXNS84dDhqdVJneG82TjBIbloydm4rU1JaY0xaWE9MNUtkNFBMRGZ0RHFGeVlSRXpVbnMwTEM2SnJxSkw3UWxsZzRuanpiRG8rQmlrRUg3NG9iT3p6TGN5cVdmL2dERXhaajhTTTNocDBZN2dyL2F3UExNV3pGNVFCa3ExQXEvbno2TnlEc1BKNnBGbmlVNmFRK3JLU1Jpb2RyNTFXZ1g1Q0xkTHpBa2dZaDcxOS9kS29kejVYL3pDazA5ZTNUbWhLUWQwV3dweW5EK3NnY2hSeEV5SElRVUVRVEg0UHpJdWZoZ0F0MzFLaDdKbUZzWTlzL2tGRGdHL3ZRV1E3RUU2cDlTdkpsNWtNU0JrZVpCbUQ3Vkt1QjNWSTh6b1JTbHQvMHJRa0llSFlIWnM1ODZENUtDU2k1REkxMUVDNFZPQmtiSzJOQ2lUM1dTd1R0bWg1cXNJTWxQZ0RvU2k5czZkNVZzSjRQTHUwRkVaU3ZEaHJZMVhjbWxDRHVvYTlpSkk4M09WYUdsV0YwSkRTeFlCYWlqbFFYaU52ZjJRWWN1NEV1VzdUMUZEN2VaYW1pN3BzdnNnZkhKZnZ5L3l2VlNId0laWlI3SVU2ZzgzOWltQnd0MmhubWlFdnMydFZUQ1I2TmhSN0phdk9EUThwc3M2MGpiRUEveERWejYreTB3RnV5YnAveGlnYnBpblV0bDhuVWlmN0pnaHV6Wkd1aUIyREFxYWpKTFhXWk5oL2tab1BnMnR5bDZrY1pjd2k2dnAveFlQSWFEUjY3Qjdqd0YxU3BVcG5DRXdOS00rKy84Y3NzSU5kRWRGUGxybVpzbmg2NE1TZFVrWk5LZkNPS3lJUS9HbGpYaDJRVmRINmM1bFNYT05ZQzJoQmQ4OWlyTml5OElGZTNrMmVnNlFreEhEZ201Mm5PcXVnT3EyNlRYMDk5K2UyWWdmbnVCcDBhbCtIMVhQQVlITzRQNWI1TWhPSlNZV2puaFJnU3paOWN3bmIzQWtPTTdNT1g1Q1MwYld6UTFQVTF0YTFRVlljUGR4R0x1UDN2akprNVVZcjZsL0lObzZmcys1OUZOR09Gek9PcHNCeTBsRG9tVkJTVi9qZmhsa2xSY3ZyNEI2ZUNPWDd3VFVkNkxDZml4clBOVnVSRzlOVG9MNlVBaE5xMnZJdzhsK2o0Ky91OFhOSlh0a1JNQ0tmR3pyeitDWmF4YmF1MXd4clJpVVZ3Q3VQeWpMdnprdHFsOXdjZjdVSzJhb2hhT0hteG1aQW1tekM3TllUYXJ0aGpobzJFR3Z0cmdqN0tmQSttTHlueVN5UHA3OHhZN1U3UzA2Y2t1UUNwMlgrOGxWOFBFSkpmTG5rNERQUGlYUm1nU2dWTlpoUnFLUFgraVp0N1hkcUs0N280QzlLeDhOTU1NUHJ4UUUwN21TKzB5WjNVdFFkSGpSQ1lrVVl6MlhsR2RORzVkMVd0Z2dKOGFBTDZySUVVaGYrQVcrT1JZcUppVi9lWDNEc2d3a3BDazhvZ1N5YUJ2SUd0TXFQSFZwNHhBWkJQZkorSVN0M2ptZVUyL1ZOeFBEaHVuUnBkUEhmZHdlTm5pSDJpZzAwOG9JSXpyeGpodGJQdUhwK1V1ZExPdDEvSEsxMm05QktKZzNRdElPRU1IYU9GUzdLVHZWVGNmeVZETXdYNmpYekZiTzBKcGJpWFhuVk1SaURhSHlsTit2NlNBRmFIOEpkajNOa2Fla1IxczRCVDI3K01ML1JYOEtqeDRNZzRucWRlSmllSHNjd0pGZ0F2QkVUWXBLVWFHUHRFem9WOHpmMjdyMW91NzRZRjJUQncwK3dWWHlvbCsrUFllbUViaTB6Ry96eTJ3UlBGYmZWdmpkWVRKRUVKRzhyMzdIeWFxbTQvUHlHZlN3UmRveFBnc2ZwMDhRajVhUXdJNXhXOE1lajNhRUJoayt6V1hYVmpZUDdRTkdUbm03S281MmEvaWZlZ2xQb1hQY0xwaVdZYU9qU0R4S1VidnJqemN1U1pYZ3JJNU50WElZNm45eU4xWWpUajRobkIxMEFZTHFiakdmQVptVVVQMjBlRXNiODd5b2Uxb1c4ZVYyZk5xaTZDWUsvck1HdDFNU1FVRUM2cTVOWllWUXE1WmNGUTF1d2twQ1dpVTV5MXNxcUorYlRsREFjUzBFamhkcTNSTGhXdU1CaUhBb3Jqa2ZIK28wMU84a1VWeFBLalV0RHNwcTArcVFXOG8rTzRMYzREME5wc21hbUpkUHc5S09sUldabTA3ODRIRHRPY0JBN3BFY1hVSkpqWjNGT0hoZXJEQTUreEQreVFMR0F4eWNtYmlvem9KcStaZ29JeFVtMzVveW5XUjNYMjdYM3NMZnZjNjdlem1aVE5nOTB0NkJBeG9hdFZ1NzR2bUxYWEtnU3BjUDdkS2NmMkRvaFgwZml4a2dSalR5OVRIaC9PN0NCbVZZSGRDdHNHQ2J2NXJoK1pmancvSnhTL2IwSmcvZXI1WWdDMTNRZEtUNlhBWTNFYmhLTThwVFMrUjFnUWVQeTBNYm1XTjVyc3JFdHpYbmRMeGtlcTNEdXhaRE9ObUF4OFdSRVJsb1lpZ2tXYjA2cDFPNWgrTS93ZklOSW1TRWhoSkV1S0ZibWxZVTBReFVvY0VvMTQxbk9ZTmh6UWViSjRORUZBVGhHTWI2ZDl1QWRyTmRoaWk5cVF5Qk9qMWdCY2NyQTJxcGdKZVAvWXI0N0hONEtoMDRQK2VZV0pIZ3U3ckVqM0tHWDVRV3ZUNEk1SW03WVYzRitod1Urdm5YWS81dE9KNTdLc1pSTCtqWHpDeXRhdXEvekZ3M2RrZHhNNU81NjY1bFhPUnl5M0VaNnRYejhza3I4NUpkbE4xWmJvRU4rNThJbU42ekl4NDY0L3dzVlhCeHFxejIzUnUvZlBLT3JIQjRPWFAvRlVRdUFpOXYwcGdlYjhQOSs3TTlmZjN1WXpmdjdJQTBwcmlyWHJzWm1Kc0JoS3pwbCtubFNncmExZ1ZKdjZRRTBGUktIaDNRU013TlNVRXlKU3FyczFsa0lwcnVrRDhnK0g5T28zbGRvY3pSOXZsOUhlOUlsbGxOMEY4dU9MdzFsQ0ljNmRadWovWUpXcC8yYUV4VFJvazZxM1QxUnQyMUlscXBVNTNUbU5OckJHbndjUDJBYzVKMnFKMEFsQTFYR2V0b0JwcXV4dXh0WXRkUC9DMmk5ZDlWdk1ZbkxBZlpyNzZENzFwSW1mdUNEVjArdUVJaHFkcEV1YUFHUDZ3ai9WRitPSmhucjFkQjFGbE9NbXlWZDNSamxOMGF1M2pZM1VWejB4cW5ZNDN2UUc3L2YrV2NNSThzU3VPL3A3ajR5aW13TXRnOUR4QTRmMENWZVNtQWRZKzNLc3dSV1NwaElFSGZvNFBhc29jU2RWdFd6c2dRZ2VZeGRIekZKM2FjRkZXK2VlUFBGeUxKVS9ZVjlBWXE5YWlCeFR1RndSa0NiYmw1TUdJRGxYdVRPU2taem1id0gxZWU4TlBBcnd4TC9wZ2ExN3JsZ2JGQ3grWlBpOHdMa2NFSGozN25ibUZVVHNMOEpyMFAyQjBhRlB4YnNIUTFsa3ROOU16cW5ZV2RnT2t5WGRqVjZkZVFVS0pPUmJrR3hCdHpQckxPdFc1T3BBU2tYT0lPR3RmRzV6UmIxbzV0cXFuRmxvR3ZvbU1mZVIySWRtQ1lWTmM2VXY0SjRISzc1dmRwN2xPSmNlRHptK3RoSHI1RC9mSWp4RStva25TU2NBYXJlZ3QrUWNwL1ZrVGQ2OEJMRkF4MG9JZmlZbTg3aWEwTTBMdGc1OEUxck54Q09PT0drUjd6SzY4Z2g5V3BMQ0l5YS9MZEtlNm1yVjBYbzVwSTJnOUplaDFEUHlhUWdwTXFTT1VPSGM2WlV0aDdmNnN6TldEUEE3TzU1WkNuSFdWT3IyNFIzWlh1WHROeDRna2lmWW1VMHo0QU05TnNiTzNsWFFyb2RseEFKNy9vdXpOV1BPK2xuM0F6QU14b2pxKzdpOWNVTTF4NW4zT2hIRm1WTVdiQ3hadjk2Qnpza1JSV2wzYnVaQ0M3eGhDbVJDL0U5NUNzNVlJcE5ITzl6a2gxa3EydTF1akZ3cklzK0hLZDd3eUlIeGVaVzFTVTNneHc1QTFGY3NtbUppR3RTdDhBWGh6K2R6dFJRbDV4NUxUQzVnWG84YnZTNGpiUTR6d2JJQlE0YzdEcTBOTmo5RzhHV3dqck1FMEhocWhFaHE1cXRJYmYyaTJDVkxWc09xMHIxQ1MzSThlemc3Tk1MMkFReDJicjFveEZKK2o4bGNKL0FNYkFwK2lhREZTVm0yTFUxOWZvNUFLSTk2TmlROWdqSitZTTQxZFd1UnprY3krdkIrQVZJcmxMTkp2cXBTdXdDdHZ1MXVrOXpVTTlES3VZaXRQeVFnYW9IVm04b2xsTk9RcWg2c3IzVjU2Z2dzL1lSZnRmaThId2lyYjRhc3ZqR2tiV2dveTZrS2xUekc2YU9ROFlmSGN2ZDBBZlk2emExNEZFRzBMTmQwRnkrYStSUXpQK08yVzdiV1dOc21oZTRKSlNQY08zdkZxZjUrbGRqbUxCc1ltWmpmNE1CNU9VVmhXVDlnWmNTemFxUVJqbUFiNk1VMEp1VHpsY3NUbXd4N1Azc2RpemIxYzErV3ZqM045eGUrL0M4dzlDa01MSDhQODRyUlBZN0RleUhsZlVndW1ZRi8xYmluNFQvelQraGVkazFTY0gyRDUwQ3N0aXRESXJ6c0pWY0ZpVGhxZi9WU1ZmSHRKSkJPOHphdHpUbU1EM0RwTGNmYjU0WjdhVFFpY0VqeW5oU2NJd3JDbWRVeXRZZG90czNkeHBRZnFDbHFzY3lRMXJCUU5iRW1lSkJ5RDh0S1VKM2RoalJsVHZvQm1tWUc4SVhSWERHZllMZjhtdHp5Y1dqOVAvTm5hSHgxemRudmxSc0t2Z0M2dVhXWHJuQmR0VGlsYlprWHhXL254NHg1ZkNvb1JMNlkzYmIydWJSY1pPZ2VlRmRVZS9WdjBmNkVTaUNacVpudnRDdFBmME1mR1phT1k5NTRYdmNmN0lNK1hwandpMmdna2FLeE1SMXhiMXpiWG5iTFh1Rm56bUQ0Z3lOVk14dk0rTnloM0lyN3VXV0kxRk5JSjJBdHprb0hQNzA1VUJTQlVrTDRJNGJNc1dTV2VuZTNIbGtWRjlxSXAzUVphQTEyeTFtbjFwbWRhQnFPbHU4NG5WbzIvVnpVY1ZCaDFsSDhhMWoxSGFOTDVFTGFnZE1CMy9LbFhHYks1MDJzTlRkcWZabjY4STJpZm56UzI3Y0xzcWxBMW0vMXo3Q2JiUk10Mldkb3N3c3JMSFBDd0JUVVZYVHB2THdOMlhndW42OG10ZmFDMWpiR0hUb0NQRkpaRlNaUy9ENkpWYjVCSkkvcnZhMUNsVzVhU1hla0M1Z21sSEQzaisrTHFST2lrNlRRSHFyd2s1enpWNk1OV3VsajNta24vMGJCRXZyekhKTjRsVlVDT3ljZTVNRlNnT0pUanIxb21ScURlYzJpYzJ0UWd6VEduUkl2SWQ0V0RtK1pWaU5OeHdTRjh2NDRaN2xwb2pvUnZSb0tNcnVISnorMFNkUXRhK1JPTGF3MkFPbEEzV0xQOXNyamtqbCtsSDZqL09IYWw1R3k1M2RDeEE5azVyTEJ0cG85U3U3MHZuUEYwQ0IrRWdXbEdKQlErQm9EMXJVZ0ZxekNpdFdhT1dWTnhUd0RBQWJ3M0x5dTVkWWZwNStnRFc2OGVJNng1MHdiUW4vdHNKZldvem1EeE55VUgxejJXZUpBVHdxSm5yRmI2OUFaT0R5K1pQOGtuQjFNYnJaUFRvUTF4TEpNdFIyUnNOTGlwSm9pNlA0Z0QrRG1FTC8wZXBVS05xcHUyY2tuUmtBWmh1V0RjYjlTTm1jdXFQME11UjBOQ1FhbjJpQ0FNV0tOVEQrdGR6eE9PZ3dhZHlYWVNESlhjajE4RlE4UXE3Rm5yazZ3dmFLTkd6Z1FvY2VBREczR0dCRFFIRTJycFU4dm9lOTE3T3lteVhJcXNOcnZSN2EzWEo4aGhtbnR2NzNRTlp0T1hTVmdXbGNZYUg3enoySTJLazFCNk10T3JNZzdZOW5lMlFGYllQWU5oZGxnSGtyczlOZGQyKzFOaWJkL2wvV25ZSmdoRVowV2VublAyaEh4RWFPcWg3STd4WWdONXdMVWpLTWtTSGc0dkJILzhiZ1dkR0VqTVovU0F2Tm1Oa1FZU1M1cUIxZDB1VVo4TXllZS9HSHFYclpjVjBlU2RaamxaZzExclFycmNkZkpLaUQyTi9HaVMxWUtLQUdjbzVNdjZLSHpYMEpUWEl3WkNLN3JyMzB2NnlpaERyeXoyZVZVVnZXTnhPQW53dWxNbVozMWFuOGN3YllkTEc4RDhlMWd4NUtGU2FqdUVpK2Iyc2tDZVZtaC9yR1Joc3lNWFNQWWtLemFDSzBkSGV4L1o5aUhScjFLYU9XL3EyeWdaUENaQnVHa3dmZ3FWQ2VrOGlzTmNTMFZsT0I1QitIdjJtUnoveDZNbWU4RDBwUTBINkJXZFFHcTVoOEdicWhQRHVaMzlYU01sTklKaXlEQzdVM3M2OGkxd204VFQzb25HY2cwZXNkY0xHVldjL2tuRFM1eHh0SzNJblFsNU1RNzBSbFVKdW1wN2FvZFQzNnB5Zk1EZjJxV2VWZTlRcWtycTRzNzRPV0VJN1BSMVhpTTBoeXhuUmRhSHFaQzkrcVl4cmVtc280eEF1aU04bHBhSXBxQURPRU1zOWdYOVVIU0tRQkMzQUdJaVhIMHd3NXQwellnNkx1amZ6WjhnczJBM20yRWpGcnV3dFdiSzNCdkowL240THpVTDhlTWNJTWp0ZGVUVnM4Nkx5Y2YxUlUyV0Zmd0daZTFOdmNEMlZlTjVIQmQ5ZExtRzY2L1Uvd2tKMVJQclIrU29peDBLaVJWTlJYRW1UVnRYUDQwcGFvUDdXTHJYYWhOYldlb1ZZeXg2dTc3cTZsQ3pmVWlBVVRUNnJHdUh3OTN4T3hkRDRTSzVSWGdrSmt4RUlVWldNdlNNWVZXdEFBSXNoT1NsUVJDcFVmWHpaeVpkL0RjNWdBTnBCdnpISTM4aytYeTJVWlV4aUdqcXFDS2FaT01nK3RnMUxJUE5NSlI1SU0yYWxWYjh2YVpZUGVObC8veWlzRVJrVUt6MWxURlZMUkNSUDQyTWVXL0hCb0Q0SnlLUWdzYndoZXVTK2pmVG5aMmJzQUJyVDN0U09EUkpxNVhhNk5ZUEIwMENYVldSNlc3NFR3dlRyaE5JQ29DYm44bkpwWVp2dlNBeWkydWdneUJEbVVBeTQ5SW9YZ096SkM1RU5HNS9Md2RNeDVqcVpUVlIrZmJGWlFNdVJMcXQ3Y1JuWkFBNnE1MU8rR2hTaDRGM0o4bW50bkpHK3ZRNjVNem5jM25lbmNYRGtNeWFLZml4ZjJSSjBWK2hwSHMrTGVLSkJ6a2dPMENEWHhydXdRU0lGblp6UmxiZTZBVUVvcVNBT3djVUFadjJFeWtCclNFSjFTbU44aWZNa2NPMEZuSTNheDBoaTZhem9rRHFjL0NWMkRMUC9RSkE3Y2V5MmJQMDg5ZjBRaGRxdjRWRTJZNmRMRDRRd1ZiNCtuZGVwY3puNEZNbE9OOG9QL3hKQlZDa2JSdHQ4d1h2bnVRZXdIamVvVFI2QVRYRzdEUDlPQ1dOVklDM3JkcUM2TE84czdpK1NBRnRZc2tiUHd5RWtoQ0NwODBiWmk0WmdBdjFXV0hITUdqa1o5bzRlU3lMOEtXb1Y0Z0cxelVRMUk1MmhBSG9YZy9lbWFhY0Z2bk1DdHI4aEdsQi9ZTmhqcExTdmRjSmcwOENJN0RoUUZPeFhEb2h6TjNNMElQdVZLMGdhR3VGSmtuVDRjQjB0Qk9oc0g0NDBhRzVqZ2oxbC9Vd0c1VHNaOEh6cXJxUGFoNC9lanJCcisra2FjWk5xR1pkakZ6OTBBUXFNUzVCY201SWtkWDdMK0F4YkpLRnZDQ05sK3F0Zmhna05pa2VhZXdCNVRpVXdHR1F4OE40aElBejZBaGFOU1JJZzlUcElsTWVLcUJ3TlViQTd3dmR2bGoyWEpHY0hSRnJCeUUrZjVKWk5wYzFQZkJYQS9KSnJ3YVdSWXAvYnF0bHozdk1VYjI3UHFXNlFyVElneHY0dkFnWUpQR2Q0TmRZYTlLRzJPc0JQU29kWmZCZ01ad205VlJyTW43U1VPMk96c0lyaU5iY01lSmtQTi9IUGxIMGNKdEJGZ3NPUkVzeHIvVUxEaEhCbEZkWjdKNzRFMkk5RWlrQUF1SGJWZ29KSWtKVDMzUUhIbjNpcFcwYy9UNnJ0OU5pOFdCK0xLL05zdW1TbEJqUTJLUDJnaDJpK1BwZTNna0FqdXdSeGtEUUlQQ05hUWFQalZ2bS85QXJ0L3J6amg1MGR6VytSV0VyOVluVkh0bkFhL1ZtZEhXaXV6UVMrQ0JSMXdudENvNEl5SFhxbnFWYkhTekYvNjNKc2U0QWR2eG1ZeUpKTUxRUlpYcXpOY2laYVN6SzFUNzAyZit4VG1nQzNvKzNFTHJRZVE3OEhzUkg1VU9hWHJGdDc4N3l2aEFCQktBTHptSm9yNFl1cGpLVzlxay9xQkZqSFlwZGdjaXhWTlFmZFVneWpFY3RiUzVZRVJkQ2hRMm5waVZoclF6Y3JSOEZ6cStTUG0remJoZktCRnlDRHErQTg0b21jOHR0VHFZRk1CODRMa0lxcUtGUmtibG9pd1hvdjJOUDdmNDRCYlVZQ0VuVmxmdjZlQ3E1bXcyTEF6bXE0eEc3Zzh3WE9UdG1HbW55NDdHcGh0VzV6QmVUU3JOWUJ5aW9qZmNmdmtmSkRESlZueC9YTWhneGhCcXhEUmtFVWg2WjI5UWc0d1pCUGkvMDdtTEdoTldnanJ4YWxNZEtsRFRFSTQvMnZFek5vZVMrUDNCQnkvV2R4Q1hQcSsxZEY2M0huYTlJL1Q1K2ZoTjB0Sm44bzkvSTBBZ0Y4NFVDTXJPVG5uQU5vS05nVkNLeHVHU1BPUFdwcGl0VVlab0swaWY4clFlK2RYZ214cmcvK3JJUFFLSWF5RVBCeHQ5YkN4NjlyZ09CaE0wMTR0c3VxUmczZEJhaHc1dkxid3B6WW9oSzI0WHAvSHdEbWQ0ZGh3UEhUT2xvTS94YlhkTGhYVDFJaFVNcjhoMWhnRFByQU13R3U0RGxZOWJmN0E2djBQb1BvSkhuWTJibXlkSUFJbGFxbTNQNXVHVk45V0pJdC9Nbkd4NzZuc0piSm1YbDMvWFJBNUVEaWVhVktnMHZMZlpKbVh3L1AxVUMzVFlaNHRreWU5bThNR1NaY0VjT1MwN0dWOVA0Vnc3QW5VNHo2dFFXTWp6L1JQWDdCVkhiU3c5N1IwOTlZbzVqVzcrZEZ0T3hTbVNTeW5jOEpwSjl3dXZUS1FhYXpHMFM0MkNjenFkRmtDdk9BMzBUcldFcEVhZ0Z6aHhiNW5KMTMwclkrcjhmWGhxZWkxRzdRc1R3ek1UUXJKNjA4ZFplUWkvYjhYTmc5RmlzQk9Lc2JDWGpsSE9kVDFySFlua09wUngvWW1vN1R5bGtzN3AvSjJ6VDJucHVtNXBIRE1ja29lQ040S1ZhaDk0RTJhajlvRkNvUDA1OFk1OUxDTWRicS9ETTRFb1FwaHlhMHhuTGhDVit3OVdBY2N1MUxiNGlVN1BMOFJXQTcxMTVYd3B3Q1NHbHN0eGFRckFidDF2Q3ZzY25ZTXhmZkJjVytLT1F3WlZlcThLZFAyMWY4aEhiUkJCK1JNaFdYaDNQem56ejVWOGs5aXJwZ3lrbVVEL3p4OUwrUklYZ1QwcS8vVVRaY2R0MDhBTERLVHI0bnhTeTNVZHFZR29tRXM0bHJoWURqazJjcmdVaVMwREM0eElhZ1JDeUYzLzlNdWtoZzVMaUhuelZVbjFMRmdWdmxkeWNVYXVqMU9yNVJ0VFhPQldsczg3SXd6ZGppYlhuQTlzd2VLQmRRR0tsQ3JjKzlTdnVXQ2h4SUhmUUhNVWN5WEx3UFR6T09maTAvanBDTDV3NTZremsyeFVNRkhLRzU0WGhGbE1GdDNvS0NFUVpHSjhnZ0VGVlBpZEV3ZUVoczVqMWFPZFdCNnZwazRvUmhvalJnUzVCR0xEa1JOYktRNnNlQXFVN0JkVUdqL0sxNlducjNiM082b2JRTW1DcGZNcmhWeklvWUR5VTZHSlprMjNWNjZpNUJZTHlSSlo4S2Y5cXRLRVgvZkVrY2VCYjlOa2FKWjdSbzZ4cGRuTGVYWkhyWHZJNjUrSWlESXFhSDh1TjZaSUUySUVlQUFJelN4MWV2OEx4VVJPRVFJWnBUU1ZJYWFud2k4c202V3lHaU1rblVtS1ZLZmhDaDR2OEdmQW90a0FidVVVKytXM1pxa0F0MVlvb0RMQ3VlcGJzV2oyNndCY0FUVFBaSERMNWMveG5DbEluVzhjdlNYcmYrOThndXpTWWovZEtLZTlvbXR6bkFVOWt2VCtkYUdIbEhxdzVYUXgxZm9BcjdvVG5ISmczTkdhUEVURU93TEk2Q3lFMlQrRDlkUVJHSHgxZldUT2MvZGZpQmNCQWNtUXVDWGNNMi8zT0V6UmpQcXVOa0VlaXNFVnBRREtUOHJRREh2Q01mK3pJNUk3M3FNc0hpMDNCcnJVYVI5dWRxQkxBVFBtc2xBTWlrcHQwMzR2SFpnRHMxTm01TDl1SjcyT0tDYWtsRHl1NFMydGxYQXI5aFJFVHlLSS9JcG4ybGZ4bjZ3cjdVSGFid0FZUDM5VjR3dnVYbXhGQ1Z1bGI5MVhVdnoyVmxLZzNjUnBua2pLOVpJbW11UWUzZXdsZkdXZWFOa2NFOVVxUWsxS3ZxVksvZmMvM045WnY0bStOd3pVWG1DUEV1bUpkeUtVU2VaOGNMUmlNa241T0lvMkhjWkVYY3FVM1I2TVJZb3d1WGg2QjNXYUl2Ty9uWVM5S1NEb2paMUQxNVVTK3ppdlRaRHc3UFErc3JOckVyalZxMXVLMDZzZENIVzFuNmFuZjZSVk5YbTRaQ2FxT0FsbmtHU1NpdVB5b0t1WUlTVGFSOWF5K2RSNlJvM0tiNHlWRklJbmc0VnczWDk5ZjFRRDJWRG1kR2dZR2Yya1N0YjlMZy9Dd3pYdW1RSzlIa0Zac1hTVUgvTVUxSzJ2QjFRSlFiZDN2aVJ5aytTT3pRT3FZRGZ3cDRnemlGeW1tVFMvcTArUFViRTZONzBEVkk2U0s0QmgwdVBKZlZ3bkhMdWJ5K0lwdTBqdFdJZ0lsaUJGOU0rcnBncS9QQnZPN1BXRHFjNVlVWm5YcG5IZEp5N3Z5SDRlSFBBOFdoUTgwUjdyd3lBNHZlUm5ZTkhCcU9nWWdDbE9QQnBHSEVvZU4yWUs3MHh5VkdVaEh4dUJRc1EvZHpZQzFzVjZQSlo1a0ozS2orQ2kzVk55aWFZZlVLNU1ML05tbjh0NXZndEg0R2V6Q29PNEJXcVVLeFFZOVI0eHAxMXpTK1hoQTdRZkpVR1BGVFNaWVhJQWxYQjNzcGlQbk9yMFc0UGRIRzNzNmtvOXE1RW9rbXc0aStUcU92TUQ1SmJWR1dtS2hyNjNKYXM5SW5ZaHUvRlh4b0hXQ3AzdGlmKzl5cEtNZXUvMHhreTYzTHBCNnN1SW8vMVg2T3JwYWE1VHRMUGQ1d0dWcEN6bnR5S0FVdzBjeEV3aVQ5aXVwMHFhOFFMOVlNZFpZdm82WG9wRHVNMm9LSjlRVGlIRU9uRFhWdEplT0RPNi90aEtyclJwL2RDWDdEQzE0RVNHZW0xOTk5Vnp5ZjRqWlUwOW0rejVLVSt2N2tQTklkSjI4U1o0dWZtMnZxVXduZlpBZ0FVTWJxRFU2QklNeTcrN240ZlBKaVBZbE5tYWRSYVh1YjgvclBQK05mTWFGbXpmemFRbWdmb2pCR0tIa3NsY0M0b3dBTkxJU1R4N210dnRpOG9Tc1h2NWthUy9pSkREbEZ3SGtGUEZGRllrY1ErdytYWUlZQUk2WXdURjg0My9OWUNoVy85RDZkTkRHaE4ybTN6eDJjVm9jMllLZFhvU1NQRWUvOFU3ZG1wZ3hZMDhqQkgwMlBuN1REYkw4MGNXQnlxSWhxUXRzcWt4bDRuOGlyWWIydVJxNlRPU0FVOWVzMldLNmoyRGYxTVI3clJRM21DTW5xSG95VVcwaWxJek9mT3pOY0tjYU5pUUF0Qy9BZXZqMUxQK0Z6M29KdWQ3V0w3UjB4di9hYWVGR0J5V0E2K1N6bWZCVklSam1sdGJzYVlibUFEcE5VVVNTQ254RUtjVFB3OHRybThjY2ZIWmd0MzlzYUV1WjYzb3JwUjhXQjA4QUdpcjJyVE9BM3ZWV3R2Ry9wOWRXYUdpUVZqUWtGQ2o5WmJJYUhOOUF4NnlHT3pkdEova3A4RUE3Zm9LK3lmbFhGdS9PTmZCZHBmVUJMa3JiUU5hQjljanlBMXNRdXd4SUZtaVp0TGV0aTVQUW16b0Z2ekZObVg3TTZIQVoyalBkVGIrbnV3YkYvQUZCL25OUHRZOEFqOFJYM1MwdC9xM0piRVNNT0ZBU05RcUlqcFNUSGdLUEdPalRYcis2bGxqQkFBbVQwVnBwWVZHQTkvMFNGYlFYRlRQQ2dScmpMczhFU0VWbWpDRkd1SjQ3dzMwUzdFT3YxenpaM0tSWUdtWUw0Q3VsU1M1cVlBSUJGNlJjU25VUDJnNlpMRVAySmZkQStCZUtZdU5TNEJiNHAvc0dlVWFhZjIrZ1JTSUkwamo3dGhuMXdjVU9LV1cvREVtYWlueGRzenV5NEw3M0p2WnhUM0lqaEJSVW5OVXdiL3BTaGJqVTV6ckxDUk5LeWtVK0JCYWt3SzE4UWttVjk3VzlGck83OGpFVDJ4aUhjZFNDV0pTc1NFU0N5OUN0SVZJSHNJZHlOYUZ4WVJkckp0akxxR3JpL3gwdTdXZ0tyQWxHUXhqWGoyR0x5ZGM5YW5CRllTZm0waEJXbHBDelJ4dElmNURocE5OWmEyQlZsNE1tK1ErZzlVQ1FZV296S0NCWDNsU2VQWTlEZzRTZEdzR01GWUZ1Z2J5a3ArR0pGSXB4TjdZKys1a2RvMXZpeUdGR0NpZVk2Z25GTFN5eVZ6YWZsamF5S2NjTHRQY1dTaE9NaC9iQWh2MmQwKzJ4djl4QkhKSkM2SXBVVEJ0aTVJTUJGc0lkS2dHL2M1ZTh2ZFdUbEx2WDRDdHVNOE9nd0Y4VjByak5nSzJONVdZd3c3SmNSZmpPRmNlVFZ1R2dTNUNLU1dQU051RHRvUTJZMVdQSzNIVlYwdXRUeWllVlQyVUVhRmhqajJSa2w0aWV5dkVLWm1QQ1N2UDUwK1JmRFRFdW1xY3hnM081cDRZcEJTVFhTaTQ4NC9uUzhsbE9obWFSaFdFZGx6VDBnYS9wZG5ITFBhUlFKckc0RW1KNnFSN3g4TFAzN1pFUmlqRlU1N1llMWxXMnRHZlhRVG5UbjZPM0Z1cXYzQkU2K3hlM3BNVW4rdTFMb2prN0VZUlI1TVFzdWRkZUk4cTRxaDNpTlF6RlV6NVhRMmo1T1NQTzB1UjRNL0FUdUp0R2JVb3I3UjRhSzNuSXIrRHpzVjQ4R2RxaUsvbjQvUGxHd3lZMzJUTmR5QTFjMnM3UER1eld3YlozZ2tQc013TytTT0NIYVZHaGUrbVdNelpoS2FQcUp0a25zY1lVeGo0bkhhalJzVXRxc0VuQkZDQlhrckxJN1NwQmpiNk1pbXpSVUJLNkdhYk1FQTFybnl3emp1VENPbEV0dGpsZWlvSDd6dXNXcFdTK292NjFQMFhWRUJqeWNSdlUyRUtXYnpLNUo3UWhPRm16TFg3NW1Ga0toSzJ1S2dvMmE0WUVaZ3F4ZG9CeTFtcElPV1VpR043cWE4dFc5RnlhU256K3dHMHp6bDliTjR1Ym42aytlY01aeEJyaFhQOHRKbWp2RXNrZmVsWWZFOGxPaGhTaDlZbzQvaE9kTEtIRzlrS1lEQlY5QzdmSU9UTE43QklGNDI2YVZ4OVZnSjNlbUNzSFNNY0NzUzRHRUpPTGFnSEhzbVp4MXFpWEdmRDlUNk1SVCtqUFdGNTRTeW1kZjVlK016Q3ZQRGV3YW1uUjVCakczN1pPNG5oazdBL0cyNjNiWWxxdXBSMURxMW4ySUNvRUtzeE43cVlnd3hTRkMwa09iMWxNYmV5Mjc3ZzRoamEyMWlTaTc0ZHljUkxGMkZnb0twWlA4Wkh4elowYnFwa0xYMHk1cXNEMHFLeUlDSjhQNkJ4bGxuQkJNTmRuVUhhUUJKYlAyMEd5anpIbytwS1ZrNHF2TU14TldiMXZFK1UydCs3ajk2V3czUWtKMjlXK2VNMnFDNEZydTc3YjdNbEloaTdpQnUyOCtRVEFWTnhsMFdscHFqTktLNVBsTkZaSmRyQ2lEWTJ1SjgxQ0YzMjJkdFp0Wkh1R05Gd3Y4VVg4K3N3ZTByQytMeTdhSDFmTGFXNlZjd0ZwZmZUVlo4aFIzR2MvMDhWTWZUUkJkVk5BM2J2VnhYLzkvQVF5eU9kRGV5MjJWZDlPczcrelhuaGlKL0xib1Z6SFF4NVJUS2pvSDlxRk9ubE9ZNStXL0RPSFdiUDRocUc5VWJrQ2Y4YjhOeUxHMGoxVWhzRDh6OWNjN0p4WldoSXJicmY4Z212Y2pyLzhrbDVuTHhjMmZHR2l3SnQxSDJ5WW12Q2tjaG9IR240WnVDNTNDNlh1cGpsOVk0bEpaRi9oaHp0VFY4Q0pIRGUzQS9qUjlOamZBRlAzVlZ5Q0NLdmN6YmpWTFpZc0ZsTVl3SVZLVVIyWlhwYVZoQmNncURqOFZWcnFmZ2xDV1FQdnpyRmtKcG91alBzSDhCVU83K2hCVi8xMlFVaHJ5ZjlGYlZhbXN3V3FsSlNnamM4Z3E1TC8rZVN4NS9kam1iR0hSMmZ5b1FHR2Nnc1hXSVdrYjBmWThyWmlWOWE1dmpmUG1CRlFESE4zZFZEa1p2bnU4dG9JMlhwR0MrdmpyTGVhaHgzZ1FxME5BMGNBVHBWNGkvbUFUL3cvYjUxWHZGVEN0N2p4TGwvOFBwSnVwaVQxN2Q1RVdWWEIwRyt3Z3A4QWFNcHZKSnM4N1RmR1dzRWdGYVExRFZMTGRib09mb0l0U2EzUWEzOUFvTy8xVVdJb0lYU2dOUTEwQWFpcm9QL094bE9vd0hGeHkvRU5NOG5EZ3dpUk9RQUdhQ0p1L3ZtSWFNc1lVUCs1V28xd1dES0UzdE1OcW02aUFqYURuZzdCOEw3SmpDNStKRmI5MnBtd0lpamJ4WEdkQTNVMkFEdkE1a3BQZnhsWloyc3FIbkdqZTQ3MStzTDhlU0RvVHJ0eG1RNVlHZEoxMEQ5WXhRblJHSlUzVjFQbmx6RHpkU29ORkZUYm9XQzl5NGg1Uk5OKytlb2M5RWZab0FWR09OVzZOeVBuMTRmSzF5VFpDbkVOY1MwbXpkTmF6ek5ydkVsWTRYYWk1VWMzcDF4TXhCR0RIT0Q3ZmVEdVU4UlNUcTk4Y1pKSjVXdnVpWXpUNCs0UzNzdWM0bFpGUGhiN04zYVR4TkJkaWRKYnJtdU1EWG80OFcxS2dybllSNnV5dUxWR2J5dmZoR1ZGcVVzdDJ6d0l4REw3U1pQcll1NEZOS25jbmVVMGdiVlNIcldOR2xOMHNialVlVHdPNjU5eGo1dnVpR0N0UVFLMFJpemg2eXRTN0RYOFBmQ2Q4anJwT2Uxd0R2OEF0cmkwNVdaS01HNDlyaWR3OWo3bzJWdkw1UGxIZkk1a0w0SnZybkxZS3dPaktBM1p0cm1jMXg3TU1hRmNMT1lFcmRNTXUzSzJEYk1rRDFjbTk4UEdqVlJGVDQxRDZpUjc4ckQwaUNudHNVd21jSGthR21FOG9nT0xqUzFkeStqUHRCd0dubFZva1B4U1ZrbVJJbEw3NVVOM3hkYmtMQTdjcWVxeHVBa3h3cUN0L3B3Z2I1cEdQYy8rQWdZVzc2NmdjeFFCRVBhTHZtTm5zYmwxbTg1TkVLblIwd09vZGw5V1N2NWJQTmVINWZqT2NwN1RQYktxSlVwdy9uOHY3Q1JERDdYVGVGYzJqeTdpWHVjN0dnc1JFYjYwNWtXSEhPc3V3UGx4alpaYVY5VFJSOXRtR3plbm0xQzBPQjBqL0FoK3Z3MU1VNm96SnNJZ2FwekVrNHlQeEpFZHM3Y2JFOURiaklvUldLY3pseWIwcElhWFBNT1lXVk9sSHNlQUVUS3NOYmg2ekZCV05sVDE1eHpwc1g5aGpwb0Vmb3dKNjZRV1NIRndJcEsxb1FpajExZk9HbGRKWWJIUG9GKzhmY0FjSXpiTUZicUZ2NzB5SFVqNW5wQUEyWUQ1WWViMWk1SGkwRGxzTHZMc3ZBZ1Q5NmJVZlBpcXB4YlI0YzV4cERxc01TNkNhZm9qRjlUMUFVenUvc3U2cTI1ZWVHbU50UmdPdXZrTEl4QmJZaldvNEJ1N0M2OXU4aytvNUJBNkhoMFQxTkpzdHVzS2MwWmdyaGQzaG05NERxSnpONXV5VHVjcCtERUVwVFFrVm9KMzA4UThvUytrc2N4a2hEUHJjZi9IV0JKSVhYb3UvSXV4QVoyL3djNGNUcGVhazJPNklhSFZrK051UzZJUmI5ZjcxYnl5TGVMY0o2bk9xbEZrWDhjRnFTRUhZVzBpTDFLRWN0T0tNR0hPMzJlbUErOElneG1CQmhZNVRpM0UxR3RBZUpiakwvZ0F1VjM1MFFhVlhud0poQ2N2QXA2QnNIV1grd3ZHL3hmaUo2WHptUHJRaGNuRnJtN2Q2KzE5bElTMWxwd2F6WUh5dUgrTXNpQzFOUHFFa09UTlh6WmtJSW9QUDk2dllEWU1MeDNIbUVVY1hwSFczRG1YWmZ3ZmpzV1JoQzRkbnllak15dFVaME1iZ2FmRUtQdGlzT1ZnUFdyRGJjRlJTVklocmN0QTlZTGpmcnhKMGhiTWpVcXp2TU02Y0dwY0prQWFUNGdMT2s2NWZPbU43Qm4yS1NEcWFFZ0ZJb3IzVndrYmtpREhNTk5UTVVQVkc1Qm9aWno4UzFFbXFzSWNURG93cjA2bmNUUTBLTHdsSmRkWDIreHA4c1lCRzJBZGsxcTc3S1JjaVIxeVVrd01kelkyK0F3QURPN0hhMlVDY2toNzJQcHArbUtGWmd2OUFERXYvRGlJbEJ5VFdycnZGQ0NPVUxab0JMLzd6TjBLSDdGRmNWR3llcERqNERMcS9SMWVqbnl1MXV4QXNGcUJydVM4SXB4emRONyt1M3RVWlA1QmUzSUZtUnM0ZjkvTGRJMVIrMGdPSWJzdERSRm1WSlJKSi9qZ3g3dFJYa3FGTEdNK1VnUndsRWZjVjVua1dzMGJaeWJQazZYUkdpYjZ6MmlEa0tUeVIzRjhZTnd2L1ZJSXB6aEhpOW5zWUFTNVhzRnB0OWczSjJOalZMSkhSMUJ2YjFlVFJVMFJUbDVQcXdnZDR5dmo1UTVmR1dtaTNhYU9ZaTNLRFM0anNZQzZWb0lsaVh2NGI4VjFTZU8xVjFRRW9HNlNtNzlyZjJGNndNczhSZHF0aktDWmd5MTdXeE4zV1FrM0NaYndpMFA2ZXVZcEVxRkVtTG5iNG9xTENmM0VqeVR5eVhKdkpadXdFZmhGZC95VCtFN0RnUVkvcCtTUXFaU2lSY1p5d3BkK1dRRTNpVWVnOUo0VmxGSEYxclR2OGdpbTQrTWJ6MzBQYnVtd1N5RVRWcFYwSXQ0WDcrZHdkOXN2dE5SejBRbzhUajJidnFMdXBaWXUrcktYM0JRbXhwdFFuUkVObTI1MDJWcS9yYi9UNHJXN0pxdE0vYVZmR09Vbkt2VitaWjVwaEY1NEN1RjFjOGx4UFczSXFVMldlS0psVXMxZ2l4OWpEd0JKM0JlbXVCUFVRR3pBanpFMmdhOTZGYVJNc2VCTzdTSWFKcit0SnN3cnBtczBRdGdPZHZPU0tMK013U3dNbm5BV0pzb3VLcTlmeDBDUXowRThrTTFRa0RidFNtWjZlMTZhUFhRMEFCb0dkZUp0VXIydnhneDFmbTZEY1F0UzUvMlBxY29NUWVXVWcrbmRwY0R2QmdQM2ZGcHp1MkFPQThONG9zVC91TmJuYU02bnZmbXI2aEpadjRkc1QycHprdU9sbmdma0IzZ2RlUm02enkzby9YcUppcWJzUXk4WVkvU1l3YmVRSXI2aVI3eXQ0TFRyeHJCWG55R0Rib1dCd3VnNVppUXlncWtRMWp3cGZPYnRteG45VVF2YW1NeitZbXQ0cFJob0VGZUlKeWRWTUpCc2NYOVZiM21MWUwzMDlwWGV0UlRjdlc4TEorYmZUckhhZ1Q5SDlTM1hsVlpoZmRydER6Y2xUMlFEQm5Gb2p5RlEzM3BuRnJaZE80L2RkMmgvZVRvWFIrK29CdkFIOEpDTzhlSVhtMWJHcVppczBBc2JIYjByTDVCeWNPNUNCbC9ncHFGOE9YWHdkQ2lEeGE3dWIwRW9TYStDMVI1U3k2Z3FkS3c4QUZLaFhHb3VFVFc3TUNTZUZhR1FRdzU0SFFTZjZpT3drdzVBRkNsMEpXN3VuQk5IelRjNzkyMDhsNW1obFNMam1wT1VyRTlESFl2ZVgySnBxN3JvcURUVVZUWCtxZUwyLzh2NS92SXRJQ1dyMW1sN0YwNGs4VXlSMXp3d0s3UTBLSFZRYXJjbUdGaTVCVm5mTWIvRVZpQkZGcXQxWlQyZVYrK2U1TlBjeVNJa2dQM09OckxYeFJ4c3FybTlaWUM5V1Y3Z1liL0FUd2tzM281SmJzbW50czVvNWJkS21PeFRpaWRCdG5GUWdXN3VTcHVSZE51TllYYW1ZdlIrRTh4WGgyUXFRQXVRNWZsZTEzSHVDM2JXcHErZDVtNWVpQ1BSTFZmZVpVQlpud1RFTHRaajFNNlQ5ZUJsaWcvVTNDWXRocUpMd1NUZUhzekNBMThXNlgwbVh3V1M5YkozdWZtN3g2Sm5LUDVJV2l6SnlCRDRKRWpCbjlyQjZTVVpMTnRQdDB0ZmtaWEI0YThERUpzcmRncjJBc3AvNzBJUnlDekZoOG9XcTd5NWdSUlFIVDRHcmt4Z1F5bXdiRjMxK3hpYVJTYlVwalQ1QTZZUkFycnlKQUZLWGRaY1RFMk5sUHhIRjQ2c2pKdmU0Sm1icVgxTE44K1RBdDR5NlFna1pqOXMvL3daeGU3MWFEaVRsc3Y5OVJrK1B2NkxRcnF0cHNBR2tMR1dsTVh4Tzc1MytPRU50d1lwd3hUNlh1eEpuQVBoZ0I4QTVOdy9tTWxXOS94RTF3dnViWmZTYU9jRGJHdC9uYUlLY3VkaEVqNWxMZ0hjMjJNZkRobTQ4Y2paS24vWVllNDdsL2RST0JrWHd6TElRUHVQbTl0M2U3MmZZVmVjalM3d3NzTWR6VkNzSXNULzVPOTdST1YxL3JkQmVVNGFxZG10TzR3b0NPZThZbkJaTjdYVUQ5TTZsaTE3MU9PcGRYcHp2RC93ZG5pemdyekY1MFBrbU82eFJEUkxzYlBacEdyUk11T0lCaWlHMWtNaUp4US9Rc1JJTXpqVFVvR2xvL09yRlU5TmFwYXhwNEFrckpDVUtqV245QVIyQzFJVnhXRjB3VVNYQTVEZWVCb0UyREF0WHhoK3FnNVA4S1VCSitjT1VWLzlsUDl3bCsycFN4M0ZwWWZwdkxvTmdUSFFBSGdsNU5XbzRtb2ZIVzBTRmkrM0ZDL2R0L21HVlhiSS9UQ0MxbHR0bWhYMm9oV2pHRWkzNC9MV3FXWE1zWDh4aGpicThDWmFodzdZMitZVzVGdmcwU2NHRDBCT3hvNzdGRDF3MWxwQ0RYNE9MYk1aQzRJNldOdUhLblFZNnZIN2plRzJOcnBWcEFZWUJyajVvYzd2cEw4TXB3U2pGYmY3Rm1uOFpwSjBwTWRyN2ozMmF1bXloS1YvM0lLRDI4RUhjV2Nrank1K3R3Y0ZjNkRtZUtMZVpoS0pVNE5JVzVNNHlhc2VHL05QWDNPcTdQbm5USFFiWlRMaDEzS09ReUx1SURWMk0rOXVRa0RtTG1nWithem4zODZkYXB4bUZ2RGZMWXhxbDh1WmUvblJuWU9HMk1PaHBGblRybU45UDVob0IybC9FZmxlT2FUT0JWNms0ekZrR2c3ZkhtczN2OEpIb21DU1QyalNudTg3SnAzTnhldmpRRys3YWxvdEpqcDZvemczU2lPdWw3SDIrRDJwUWJ6RVFlNVpwdG5ZdHNBSTBiaWtybTFURGRYRWZ0TXlhU0RENVRWZklLNENBOTJMeHpCRzlsa2ttSGVuMzUzV29sb3FCeVNGdUcrZHFWZkZENzJlVHVJZWVaWStoK2p3ZVBrK3ExT0RDWlVyZk9FNE94ajBZWmx5MzZVZlFndy93VnVEeVRjQ0ZRM280V0VJODVMeHpxcTUwUEtlb1EyN0s5aEpnR1dsbDNjSDFEbWJaY205U0wzSlV0bXVONCtCMk5HV2VWQzdhRHhrZVlkb2FZcmdlQ0F0RW5XRHFScFFMaW9TK3Z1YmpkczBQV1RvbnhXTHB0b2EzQUpoamQ1TWl1QnBxaFpLQU1qNjl6cmY0WkVqQW0zbHM4ajBrdERDTHF6MXJEd2VOeDF0OHRlazY3ZFRhVXRhQlhQSldEN0VUYmE3Y1NGU1hLd0pTUklzQXkzSmdFR3dQc1FIN0ZnaVplRDMybVpEME9POW1mTXkxRU5ja0NaQTRVQUM5TEVVdEllYzJtQ2QySGcvL1MyQ05XYVhBcVVtY3N1UHdIeDBNdzFmeUt4N29MWk9YVzZXTDY1QjBXci9GVTZ0ZWo2YlBHMnkzRklHQlI2S1NhWkRmOUtmbm0vT3B3d1BRektaZVQvMm9qcnNpT1lXOUR4djR3VTA5ZUtBSTdBMG4velZ5dUxpekpnL2JNdnRsbTRiUFYxZzZBRVpIRGQ4RWkyNm1uRDBmRG80eDMrd1N1Um44c1UwaUdsK2RGaDZubHpmNDMwZlVwdmFaMisrQTdiaGFwZGNTV3h2cWZtWERHRzNuK1VjZDBBZ2l1TmhEcCttNk40dlB5V0txV0ova1VuQ0VrTmR4V3A1bEVSVk03d1MyNllpWHptNG1JWkZ3S0pvNDVFaGhOakZJc2JodTdiRFUyaXd5RklZUG84Z09SMS9OUDhFRFpJelpSUWpIYTJuRFVtL2kxWHVqNzFPb2x6cW0wcWVGY3VaNmZVbFcra0k4VnJEdFU2aHRoQXNKOHVGL2Z1TmRkbGJ0aytBMk9pK0pIaG52QVJIUnRUUFRicHNsYlczY0NuNFAvb2djWkxlaEhXV2FqSW1jU1RpR3JmdEdmekh4OHhkMnBpWjJUQWFSVFVlNWV2RC9FejVYL0NUejhSbU5mZEZiRzAvOXJrUEp2SmJXc1hlK0pMQlBRdTBMQWx6QTVBMWV2aXVwVzNOQ1RyNUVKMU5uQ1BOeEhDTXl0UmN6Z2RxWXNxOXZuVWtqVWltdDNEaVdkNUxOdXg4RXVpMkc2SWYwRFdiNG1uSUZDcW4yU0dBZWUxZEIzR0NFTHBNUllHQisyK0RoT2xkb2xOSHdYVXkvNzNYOHJRWm0vU2wweUdZS05paHh1em4yUlYwbXQvQmh1NWJCc1M0aE5iVGRXV3h3WE15U25ja3p2dDhRbnFhalpBMVdQeEYzbmhRN1JLS01VQTY1Q2dGT0NZKzdoWXdrK2lQbEZIckNjTkd3QVBLanU1YjdkVEN6eWdXeUpzMmpVNTFwbWRCa014T3puYlRNRjlSQzBqNnVFNVB4OGlPcjVxR0dmZXhNTXg1eVNMejdOOUFzOHFlTmFvN3RraFg0QVlmZHZnY0ZleFExYUdxOTMvSGVDcTFIOVRkdENRVDBQbkN5Umx4eUZoTGRIbzFmVXJzVTBXRFBBbldSUHR2MnhhY0FmVVdYV2NZN3ZGYjlUWW9XZVU0dWJzeUhtRUh2Vk81Szg0ZUJ0UWtHa3BpTW5nV3lSclNnREJ6c3FYK0JNajBhMC9sYjBlNExneENqZ3Z6YlUvem9Zc3FoS1VhSGtVMjFLV3dLK2ZDUUIrTXB3bjdkcThYaVh6RlBLRUFPQXVsSDY2bXR1eCtoZ2s0b0ZsRURPWWs5b3FWTUtLYmx0Q25yU1NnbUx2aDhFVC9VaEZTR0ViUE55MlRub0NDeHZld2t1VUVscERjZWdpbCtKK2ZnWGRyYVBZVGVCemMvSmRaZkNwM2JDdTFmVVdSMUQyQjh0RmtvdTdmckI3RUgrWDA2eFYvakxTNEJwQUpjY1ErVTFvSk1GRXRNYjlSdlZNY0ZBWVQ0bjJTYjRPVEg0UityRGRocVBMTk5xTkNsQzUzdDhiYnE4TSs3RkJxUUlnSHNwMTVWNE43WCtxS3pVRlRSUlZhOHBKSEZuWHh6NnNRVnBBZ3pvNnh2WGw1eWhTbndWNDRJbDg5QXBFMHdUcHl0RktjaVZaamFHQTdDb2VZakNIL2xWdGpjckM2WUhpRXlVZmFqVGpEMTJ6aDhnaHJWSjBSRjFqZE01SGp0ZUlhMTh4RzFkQ1ZXZ082NXBZSlVuQ214NW4xaXlLaTVnajU5NVYyRnN3eXVpMis0QmdBMUU5TnhaRk1EeXFFckt5b0JUZ2p1OGpiWThCbDBHT0dRcHdBVnpSNXYzN2JjS2FvN0gveHFiaDVYOGpsaExGK3lIbkQycmVOL3QySDlEVHMzT0Y4TFN2VU4ydG9iL01kcWhpeHMydjBremNlQW9UL1U4MXZtbWg2ZjNMKzhKZDdZZlVncmF5M2U2b0ZGSnBNMysxVWVkY0dkQzh6ZWJOSXd5U0RnZzVMb250blZhRk0xS2FyZG1wa3luc2t4eEtrQmx2VDJjdmk5SW53L0llZDBzUEIvSjkzOGxxczlqRGV0MDVpWi9DMS9pbTBON0lscmVkaXZsVnQ2a0hxemdBbEVTSXV4MTFRRmEyNFZvZW52ZHF0NVhFZndkV1JkYTJUZTBjTnNvOVN1ajBabnZvaXNyZENoOSt6bVJNWnNBK1FuZzNzYVJFRWRZdHpseVdYSHpYTERrVDFEeURjdXJoRzFyRGs1b0F6dFpZWE5QenFWY1BCenV3RlU2akNpTHd5NlFKN25YQ29hSEhNRmN0TFZpQWRtaWpDcXBhdzdFOFRiYlU0NjBnTkZmVTdtTTgxWU10OXlhR1ZFeUlXUWtUeWNxMUpiQTNrUVpMK1ZONnhuc0lKdHVGSjR2RnNJM2xDN1dMZWZ6U0h3cFpPb01PRHFqQ0JOMXRjNEUySHExbC90MW5NS0xSRXZLZnR6aGpnWmRyNHgvTFliRGJxL0ZvUStmUDNTQTZjZGJKTmhDcWl3K2JYS1VBMFBxODhHdkNnSUJ3aXNxbkJuZ2JtNDVtcEVROG1UdzhXeHJtL0pacTgzektaTERQQnovanlaUUtkSG9tTXhnRGJua2pGTlE5UnVUSHlzVklDcVFuYkh4MHpLRFpUSVNFNTQxRkRZOHFYbksyc0NIWEtvd0lWMEFqSHAzdThsTWlqcFl0b0FTZHMxem05MmdxQjVqeWVjMzczUmlnRittVFRnMmdzbkpOcUZya2t3YzBoazlIWFFGdVprdlFjNWhSNWNpMVNKM1VCTW9Zbzl6N0lLWlhycmFKaHJhUGhvWW5mRlR6bU5RV25FQTJYY2N4NEdUMTE2WTFPcFpvTnNnQnRTVlVqSmxDR3V3WWZ5NEFVMXRuWlhFd21SSGprWDhmS1ROSWRkMUhnQkw1Y2hPNVpYdFVTam92cnFGdFhxeHJUUmhMQW9QZVVlRnYwYTE3eVdjTVU1Yy9XL0wrelBlclRJZUJjQ0dkRC9UY3ZNVFBkV1ZKeFdLQ05CaVNUOHgyY1NkUS9pdGZUL1hINDBIRVBkRUF3TE5GMTNOT1NKb1BkMHFvbkhRMjlLVnEwdFQvakFER3BTbkVWbFo2ckhjYVd6ZVEwL0RqOENlbEdRL0lweDNjcSs4dEhaQW8xU2w1SXN5d0hwTnJacW56bWF4dktCOUlsbGFtaHVpWDZKbi9ETnIyQ3k5cE1oNnYxVXdlMi9FUk9ldGxSNUcxakRud3g3TkR4S0xxOGprdTNZUkVFZzQ5YWxiT0JVclB3cU53WEwveUNuZE1oSlJoRnlwQ0ZJdGN1eFFHMmN6eGszRGVydS9JWHBrYWNNWHhnNnBpd3l3OHdiYlg1cnNEanA0QTlIMno2NVo3U0ZQWUgrWXJYOHJ2bVk1WkVNMGQ0Q0tOSHV6WGdzTURqWTdUR2hjNlM1WVFVbWt1QmMvbTI5ZUM0VUdic0R4LzdFWUFkZTV1anNQSnRoSzF4ZkVwb3haaXJHUC9aU1p5TVVGZXU0N3pzWTVnTGhkR0FVSXdXckM5NFo5R3J6dnhqcmxzTWhBRWc5dHNLUElPcjY3N0VWY0NLaHRocndmWDhMMUtpSVI5Ny9VbEZpWTltTEVxV1Baa012WjdvTHB0NFNsVU1aMEJHVVN3cjhwZmVURWVnRVI0K0dWdjkyQ2JvUXN4ZjVLSEFpNXkzcG15NVdaU2JmNjVidFcxVVFyZ1FwbENNaEdkNW9uNEp0dUFkRjhBNkE5RFc5V3RmbEpobGdDdWZzU2xZeWduRXVxQ3prNENPSk13QzlyT1FLbXRYbTJzSEVoZ0ovRklFM3d0MW5RWmtreG9UZzkrZUlUQkVsZjVDUk52a2d2L2JldGdrWWxWZlBJSE91aFBnRGdLKytpemduSExTY2M5YnpTRGpzTWF3OXdKTkxVNWcycUI1LzBqS204elY4NU4xRW1lRFhjUkdQWStnL3E3dDRYa2VObk1GTHZSVjEwU3RYdS9aL000NVg2d0t2SUNEMGhLZ1hld3BsRGtPWDIvTFkxZW5jaWN1VUFScktMNlp1WlY5ZlRCNXI1MldLdTZMZTBqMjgzT2xHRFRZbGpxbHM1T0FnNyt4SUw1SkdwRFJnOEZnMi90Q0duV0FzZlZZTHB4bFBsMGxyMlVwV2xSbUJOYWFRT1hQWng1ejVZVE94V1NiZTVZbktTWHAzaGdVcC9kN2l4aUFXRkkyUjFZZ3JqU0N3VURXWTNGbXZOZHg3SGdQMm1ILzNUSHJDdGxUNVpEYXZSNzNEZzlFUGxKSU9aNzJLTThaSEVOU0xkK3VsNW9QVi9LNlpxaCsxaHBsZFU1SVJLOG9oZ3pWa1hJMk9zWTIveC9va2NhKzZxckVVam1nV2luREZVV2V5Qng1eEQxWGJ5Sjc0ZHhpOHdHRmxGYnMyb3VIRXRPVkcrMG01WVpOWDQxbWlMWkRYWFdiN0ROT1drY3lGcjhXVm53cVZpcGg3VC9xYUNYOUV6Z0lvN2lZMlVqTVdSQTA1TWMxMVFyeDhTK3ArUjJuWWVvOEJhVmx0Z2xDWkhaelRzZ0duUnF5K29aY0NsaHR3WWU1dms3c2gxWk5aZW03ZnpnUUtwZ3M1OWlpaWFJZ1dsNDlma2VYTjFpUDFDb05NY09ldEtwU2ZVNFdZZ083aHVzY2dJdjlGV09sU1g4WTdwWllSZWxHZnFSVGFXd3FpTGNidlRlcmFjR3oreUlsR1Rydy9yd1ZBaG1CdkIrUmpDVE1QR2tpOHhEcnZHMDlIUmJDNGZ4eVRBZWQ3OE0wYjNYMzJ3dm9XY05YQVNSNkxOUzJOUGVhUXhwN3dyamt6QzVUSVdmWlpuNDlBeDROandyRGVLdjhWdzI2OElER0h5Mjl2S3owMmk1WEMycE9rRFRnS3U1YTZaOHQ0K0NuN2ZWV2h6cGt1WDBqNExIaFJiNVJxZG1zbENMK1hWcWRyc2xma3VOaHBYZ0NCcTdoWjJYS0RPeFBSVlhlNys4MzI5b3dwcEtZREo5NXRHLzV5UjU3WGVKTjNvQTkxTzJXMHNRT0I1Q09KZE9DVGlCMEdtKzhBSFZmY25qTHozbFJlK3ZYSWF6dVpwYnk0ck1ZYURiSWJBQ1pQVndwdllEMjl4ZHlGTzBJUDlqVlZvaXpzdHhZTkZON0dUZEdyZlF2OW11Q2RZcGROenVOeGtCejdtRHRvWStLa2R3Qm53WUhJQ3ZwK3hPbytmYlBqeE9lZkNTZG1ORG9GQ0M2anVmN21hcHYvaFYzWWlFUmxtRUpsZFhpZ0hCUTBzNWNJcjJXQ0xMNzF6Rkh1ZmRHejFYRjZLc2toK1R6VXBCUVR4YXNpYWZjNHZRVWJ6U2plSjI5ZE5jbjQ2MFVId1ZMc1hwM2NROTYwVlNXei9PRjVaMVpRdFdlQU1ST1dMTjlvUXliTFJRM244RitrY1RkZTk5dnpKbEVCTHEwQ296VXRtU0NxTEdGSUc0MWphS1pGYlVVajlpekJPS0ZNSzlMeU0zeXcyNkd4NE15RWlpRkUxRlhodGF4NzRVNENKa2FPYlJ4UFQ2VHhOOG9STUxrTTJOVVJpcElsUWhXSENvbHBqT1pXeitKQnE2dkV3a2h1QzhOb1ZqNVJpYmN2YlpTM0FnYkd0ZkVydTV3YngzeUpKRXlzeXVrK1BNSUl5RkV5WGpnQ1BVT2tiS2JPUUhhbi9mZEF2dVp3TGlUdXRQUTJYaVRBdnRNWGlFeEpDdDVlMVZRdmpvbVVoL0hrQUNERjU5dXZtUXRBZlZSYXltTE9kdy96Q243cm1ibnhWb2Zoc0EvRTgzZ2psR3RYelRDVVlLejRtY0JMWG9jOU9JWG5XOCs0Z1NDYlpnTERHM3duU3lSRmZFOHNNOFVZenZVb2VDeTFFY1NPRGpOVURSVFNUU0hiaWlHa3ZtTm94bVM1SFBOV3JZSTRUZUhFTmhFWmFlUjM0eHFudFUydmF0a0JHSDI4SWsxSnA1KzE4SkVES0tDR2w4RVJLdHVtR1BsdXE1RkpDT3NKaTE2QVVBZWtoY3Roa1pKQ3lsRXNnZmVlNmlTUjNMam1Va1ErMzJhZHQxbk1nZCtxOHRwM25ORnZ6Q05LUW9XWCtibTV3QjFxUzZGd1dOSHZMZ05BWnlYTEE5K1JOVElVTzFydE4rNjMxN2FGU0xwMStsTHRreWNVSk5SSTFUUVdsMGMwbXBVSGZvNDVrcWt1elBIdENwdzZmc1hCYkI1dCtXVFNEMWZubXRrOFRjV0hqRm0vcnZGbzJrc2JJVEdiVGhlbXNReDZibWxKL1c5K3c3U3ZoVHgrQ3JZL2lXcldtSW5ZdVc2RlEvRjFOUkV5ZzVRaGUzaEhOTlk4MEttNXFCSlVFeUxEZ0dHTlZ2UVpULzhaVGg3NDdQNlpiUWFGWHJ0MURSTWR2ejFrVWpsSXhKbFJNY3M1Skliemx3UzBxclpGb1VuYkVpUHRpMHFHaHZ3YWhZUjRvY1JTbWo4SUZLalFtaTlvUDNpTENkQjVsOHRBR2orTkZyZUNoTHhWMUovbW9qOExRTjNYUFREaU50TitiZUFpakhzMUp5ei9EKytlaUgvSEdsQkpZREo2QWZRYXJqVGphcll3KzlFM0I1bXI1NnV4c2ZkV09KZmZiSW8yeXp6VVQ5OWxWcDFsVmpSWFN1YlR1ZThlL3pBbzFLdTVoQ2VnZDVlQW5XcW5xUVR3U21FRjk4TlU4Z0JrUTlqWXI0UTZkMXRNNXEzYUQ4elJibjBndDZRcFRZZTc1Mi9qb1IvZmFVaE5PZ0E0RTlZdWNLQit0TkdpNC8yMmFScTh4TjVwL3JXWlBzMW1JcU5xRnFSb1RmYXZBSDc0dVlIQnlGWHdzMiswS09hcmNidzdwZ05nR25JM0dZR1Q5ejV0dzRuM2JISlRTMDdmd3IxUU9KQU5KV2R6UWhWUFVpRHQ4M21WODJ6NnJPLzA0YjRRZElkV3MyUDllMkZNRjIzVS96WW9zZGRoaEpDOE5KeHMzN2JPOE1SQXdnYlNVK3J1MHJ5VHNIUGpMdjQ4UWpmSjN4L1dLcXFzdC9YSWoyNFYraEJ6TXZXL2F5d1haVk1keVl4ZUpET1doS2d2TTljL09MLzM5S1lPazZmdjVaWmJPcGs2NXU1M2YvbmZIUDdtclBUU0IrY2FrbmxVUWx4ckJSSW02bytmWE9uRVlyNWdrQUc5d29hOE5tTmcwTStHd2NGOGVuM2NHRm5LQjFkN29QY3F5V21pR252YkErMDVWUWpyU0FSbThHZ1dCZGc2YzBzSHRLOEUrL1A3N0t2SHFuZ3hnYjRWTVRhL3JNK3lhS3FkTHJUcUN4U3ZYcWZuU1J0OGxsM0FNRkQ3Q3huYVpJMFovVHFnYkFjcDVqUzA3SlJhcjlWdDljbGNYZnRBOFhGQktsdnd0RDZEeXdtdFVNc2kzYUthWmt6MWhkSkp1ME8zTzdTV2pZSmxZNTBjVSs5MXZRM3NRdG5SZXZXWlc0QjdKUkM3WVZ0bThVelErdXNodWtkRlNkQjFZU0E3bkNZdjlOUkhPY3FNdDU4cGx3a1ZaK3JhMDNFa2JUaXkxREJnanJiL01uOUo0UzljZFFMcXVRcnNyWTdoNFZFMzVvbEJBaUIvN3BTend3c0hyajAzZExQQWdrYm1pVllJeE85VCt5eGViaUN3VzhkZlJDWU5zcCtMMS90M2RscVZONzlMWmdGZWtFeXZyMFJpVWpKcUVNcUxtNDJYWlFtSXJ4R1VFZDl1NG5yNGRrWnJsOVVvQzhkbFg5VUF2SmpreHNiTFlkdjVZNzU4enZ1aTNHUmhnQnplZEhvVnFaYkVHQnFKOWJGUUhsdlBLUzdFY1FOa2hWT2hOL1orRkw2OUVYUDJQZTZUbldzZi93MEV1aUk5RXhReXIzTGgxWlJPQ2lVLzZrQndKODhWTmdhZlRLcHhVN1kvbXIydUZ1NDFxREhHcExMZUtCa1NkeUlEUm5MclRldkx4dC82d09yVS9IOEY1TGN1dU5tL3ZRNzBlMkpZWUFXN1pyWEJOME5STExDcnV3VzlXbEQ2SDBTbUhZMmRRUXNPc0FmNHEzV0dPV3VYVkN1WjBtdlRIN0JNNjE1VnptU3ZNTDlOeGF1NnBnSHJFOHNUOWdXcnRiTm5XeWRhYTZxN01uQm45dDdPd0Vtc0VUa0NOU3VTbDlFbGE3VmVsNUFuZjh5NkhyUzlVclR1VTU1VlQ3WnFFU2EvRHhScHFqT0F1VFN4bFJMVDN2MTNVdW5hYm5GMUMvWUIyRjZCSXpEazFJejk4OENsc3o3c2tTWUNYL3lkam43SG4xNFYxYjJoZWVaYjQxc1NXR2pNbDZmdnhJV2ExZWtjdngxK2Q4anNPUjN3S1VwcHdzR29oT0RTRGdZc1k4dWhFVnYzMGlqM0ptV0ZvT1ZnS2xmbTVvZ1QzTlZ4OEdPVkpPWXRVTHV1a0V3djVLMExBM2N0UWFPWmw2NlpwQnFkSXFabkZVOTB3QkIvdC95b3ZucTJXV3oyUlJEVlJ0MnFEQlByOXRuQ0tUL29RcWR4bzZ5ckFEajBMVzAxZnZSSG8zQlVOSlBLSXZCU2xiOUY1eHN3MkoraFhvWlByUWp0MGdSWGRBTENVVzFtMnhQTlhmclZXZnNNbkVTaEZXS1QxNWd2ZjJjZlpucmo5QXo2N1BCM010MGx4UW5GTUFlRFk2dHAvUlpGOFpMOWdOeU9JUXhQaVVGZUlJUWFtMGJpU2hmOFppdFhhZFhzRnhmOFIyQlpaWkhLaXAwWVgxb0ZSTFg1aTE1UFV5c1VkbmFyVTJqS0hEb0FLTzltUEdHWU1PUDhCRmo2b0Z4UngrTVVHaVlham1tYy9WVG5hSXpNTHpuTjQ4RFVSK016b3RlbDJFUk5TQ1pNU2h6V0lITUREREFzbnd1bXNaajlaSEFnNndnK2J6QXdsWGtwZjNNZDNONGt5WEFRNUFqQ09IeXdnVG9XTWJScjhJeTJMS0JraHRKNkZZc0c3THljdHhMd0Q2dUdaLzJBeWNTdVBIcjJxeUpBdWY3KzNWenVOdmpEa0h2UWYwYnl1S3F4MCtSSElxLzg2WDJ0eExUU0dNbG4xNFJqcWZXS1g4YjhiZG53S1dabXFsOHk2T2pQRXlzazU1bytBZnpkNDNEbTRyaWZRTGc2RzhiSDcreE9FT3V4eS9wblQ2VEVZUGpCZlhhNDJVOVVTV3M4bzc2R0xKM3RhbmY5ZlNJd0FYWXlzWTZaNnZ6RjVXZ1hMZUs3SndJRGhvY2NReGhIdXVtM2dmRzdodXFNWDZlejlwSDlBbTJTc1NOaFhzMkdMSERpQnVuUG01K3phSGFLSXRiUmVYN09GNEZpL3V1MUM1ZnArZm9Sd2dmQmNpSytWYlpOKzM5aE1lTWhOYVZqRkswVnpyL0Ria0NOdjE4amVsdWx0NlhHZm12RHlNUzVkUXZpL1ZyTUU5N21iM2RXZGdtaVB1YnFKR0lmTWRKRUZQdnVyMWpESVhyWnRWMkpJN2FuM0FBWk9QSWNQODVqRFpDZXMyWUhYYmFtM2hsdSt6dUpMdHdsa1UvT3BxTmNFRWNKWXRBRGhEVks3NWZtNzMrQVhQT1hyTjNIRWljaWNIWVhZeko2MWYxZ3BDZUFMTWJDMmM2amlmQzlTZ1FXNnEzL1ZRNWxUOUVtOGNRV3AyQ1lxcGtLTFpBaHlmSU1hS01FTTFpNUs2ZFFLd21wQ2xORmdpVTdEelZ2UTE4cnRpRmFTOWUwVElTZHM4a1IwazJRZk1XQUo0NHd5SlBHQStZaUhHY25TbUE2SjYzL2ZnM3hLNTlrSjlsOU5vTFUxM2o4eEtNL2N5QU9YQ3pJY1B1ZzFWOEtOaFRaZmg0WnJOSlJRdU85enR4ejBDZERkMWUweDVVbWZKYjJ3angzdXRUWll2TjZLdlVvTU9nUlJhTmRWTVJiY0pZTjVJS1R2V2ZtZ2JaOExSSW1PU1hGWkwzZzcwU0RlRUdIeE4xVmtNandUeWhIeHBGUUJGV0Zjb2hMNEt0Y2QwQlRlb3RSN3h5dWFWbjhzUU1uMC9ZR1AxWmdNV1ZiWXordHRJUEpsOVBjZG5BNWkrQm5OdXBQams2MFpjSEFqRUhzYjRRMm9VMXBkMmVrN0w4QTFxald4bFNneHpwZVdGUHYrSjByS0lDcUk3RUNBaU4rQ3lMSmRCL1FOdnFUYm5kenhPQ05LQUJCcW5mNThmY2dqS3lkM0JUbVQrT1RYWnZPOUVDS202VlNwN1JvSnVPOTN1Q2s1UDlBblltbnNodk1samtST3NHc1pEK1duMm5BVk5JTlBaUjBON3FYM2lHeFZybDlTaFlRYlc5K29KK1NnOXdjeDlwcDNPcFErbjhWSVF0RmdlZGFHekdsc3RJcEg1Ry9RYjNEQ1VjOTJQWWhCYUYyUkh5M2hpSGdrUlV1NStXb2hlYXFLdTlaK1d0NURJTEp1UWpTVVlSY1hyRExTY0t3VDdJdFlKM3dtM0l0WEJFeEVUZW84MWtLOWRZYzV2bllVUlBra2V3WXowOGNqVHFxd24yMy9OcnJZMlR5bldWcUREa1hqTldrMm5FKzZIdkZGTElQNUJ5aU9IKzVCVHdSL1F2MEV2Z0pRUGdFREt5d0dFLyswM0Q3NnF1N0VLNVoydTV0WTI0WU5UOTVnUDJMK0d4OWJmdytYWUF4aHlPVmhCM2krZk9LcEtKVzY2YmlVRlduemhxemNtMXpjRy84S1NmdzAzdGs0N3dwaG5IMHQzc292MWUrQ2IxWEJRaFg2Q3FWM3Y5OHBrajJpZHBmTm53eE1sZ0RTMTdwS1c4K0ZOVWNBWFc2aGVhbmNHTXlMVmM2RFJ3WTZ6dHBHWHpCRFFRTlQxb25QVzRHcnhYb1V2T0JyQ000TTNvNENpbEQ2aEJKMkVPQVNHbUEzR2FqUHA4ZnFrOElFOXZZcWt5VUt3bVJZd1JzbHpya2FsemFtNDhQbkFlVDBleUV5UmtKNTg0UW90Mk1yODN4aG1LWVVNMTUxdjdZYXV0dVlYWFh4eUttWk5IeDVaOTNld0hiZUVEZjU3bW9LYm54Y0V0OVJaWlgyZkZoeTRwekxaM3pDblFtV1VUSERQV2x0QitjYTN6b1hFM3EvcXNGRGU5VXF3ZE9ZUkZ4Sm5NMHNFTXpqcFIyS0RwQWRwZkVQSkRSbVVBV3Vkc2JDZTY5SktBMmFuc2Z2eW5Md0ZhNzd1L2YxemU4T0FVSGRNb3k3a0QyUmRDYUROSHVmbWt4OWI3MXpqYldUejRQL3o1WWRWTmgzM2hZUHFyL1dPVU02a1dEQWl1OWVBeHJkKzhiT3B2UGIxcVA0a0d1NmZ0RW51Q3JwUlFHcTVhaXE1MDJQZDl4bHhiVXo5ZkVIQTRVS1hROEhQRmV3VmZ2WEtIQlRwbndkc1AyMFd0UXdGRTRydEhucHYwamxHeXZpNmh2OGVFY2Z4NFhUVUtHYmtkbVBWOG80cGd3RnE0cnpWUVptSFRjSU81SHkxdHRJR3E1OStGbVRhTXduQ01CU2NCSU9BNWxYRk4rdnlmdG5HUXhLZm45eXRsNFdSMzgvb2Y4TExFc1JYM1g2L0laSldaNHhMMEFNSUZSK1JpSEx4NVRHeVo3TDh2S05QazNIY1dYVVAzTXVlVXpOaTNmY1VYYkNEck9uYm1WVGJubGhuay9Hek1GU2RLMGFMUVpLaDZlQlhTcGY0R0x2ejBheGZHbWVvWXNhMHdETDhPNWkyYmUrVC90aTJMY05jeFhwWjVvbVlvOTJpWnFkWG9qK25yZnlTVlZVa3o5T1cwRC8wcFRuRjBnZktnekNmY3M0RGplaHRpVjNKbGxoaGtVNjRLTTJGQ2RWU29iZk5qY3k3NTFLcTh2QmJKWThYSG5GSnZjVVFDSVkvekY3bEJPbmlxY1Rnem1iVjZTZlMwb2tjMkh4TE55WU1YMlkrdnlLL3VWWER6bDJVUjdjVllzdHNjd2F2RXhiSkIwdWhkT2VyRmlHZ1BjWlc2YWhFaGg4b0hsRUMyWnNCTmNvT3ZTSG5xa3Z1UU5xMnovR2dScHdCT2N0Yk0vSnJIKzZXL2ttMkd6dUFTNEI5bS8vVDkrME9lNUNwbERJZkRyd3o5NXFJVXVaYnk0aVo3d24rOGk0dDJSNDdQN2R1aU9jdXFkN1NaTDVCNXIrZ1pocVNWNXA1VjA3SFlWTmZmaldiM1ArY0x5S2Q3UmMvazdOeFdOam5mVnNEamxKYXpUWVZrVE1KN1ZFdnIwUDJiSnpXSy9zcENWTGhRZ1oxdDdnRmI3MVJzNy8zQi9EcEtxcnhielRvanNJRDhqTWRVZTJ5d0tCMytRY0g3VHM1bXhSLzlYZFhhSm1JT083OTZvNFNYZUhqUk5pSjlib0o5NlI1K2NSNGY2ODJ6TDhXb1hNbExkd1pEa0FLN3pqcTRXL3ZER09yQm9xcjhYYWxpenFyVkErM0U4dDR1MHlicm1oNmNGUjF5ZkNjdnNnUllteHpnVXBGSE5rYUJDQXRmMno2MkxZeWxTN1NQdGxPdEtRM0xlRktFOUJRaHNjZ3Q0ZXBZNklRdDhDK2NWYTZUS21OZHk0dCtaWFgrK2hnMyt4dEQvV2tHenVKUWZvMFJ4akd5aUpYR3JFTk95SGo0dEZSY3dEbU43a1VRVWprWDltamhIZ1FjQVIxUDAvdllUaDZhYWRZdWUwanA0WkxPSDFBbDZYYWJ0OXFWZWlONFdpYVlkeUZzdHpERVlvVjZ3TkpQRWNUbFFPY3VYb2VzYjJxUGkxYmxSMDVSandPcFgvdzNoRjBIUk8yT3FsdzU4WmJDODdiVUdRSjZRMG9EZ3I0eFJYZHJ6dTJ0TEVBKzEwTHRLWDY3QUtuamhyR3RFSzdqMnBxSHJBcjZ1ZXR3Q1RVdHAvRnlna0FLcmErb0E5VkRnV2x6Z1V6NXhQejBSdzgvR3luSXQ0MTJxbGNqVUNON2IzL2hqOGloeURuRnVtUlpiUnQrZThRa0tDVjVlcW91dHo4QjM1UWZLQzFsNFA3eGdYYUdZWCtxb00rWGk5NHo1S1FNZGtsL3pVWHFwcWtSMmpnYVJpWFdmTGFyb01VK1NrV2ppZFVWdHl6TVZYeDlEbGtaWXBLRklYK3pURHJuR1A0dnJpcmk1UmpJQ0RNMkdzSVkyQXR6N0pDTFZ0RU0za21JdFVBKzZ2NzluTnNxQXk0OHhaM0pyaWxjdWYvNHVrSzYwSUZKZWt5MUh1cVl3aEgvYS9PdlE0YmxlS29LZWU0citmMnNsRkJ3czlxYzZmb25GZG9aNzRlSVNYNFRaQ1BrUG9LNElQb3BHYi9HVzdXM1ZQYmgyb3B6QUpjcElWdjRrc1ljZkhZOXhuRXlBamV1YmJiMlNNTFhSR2V3Y2N4aFl5MUFNK2h4dkRmQTJFWFhNbFBmckgwRU4xN1BQbFN0K0xyU2NLTlNKRHY5eW5EMmllTUczQ3ZVM2ZuRytwTDk2djJUVVNoOER1SnpMY1o3MFZQMzB4VzlGM0RGWW9waXExTjVSa2ZObzZOL2lWYlVVY2VwUkV4SVpMS3hXdFVTVVJWSE5HMXRsUGZGVWxaQ2RXcGZKdHUvYm85d2QyanpxTjdQeGRPbkFtK1VzZWxHYUhqNUlKZ0xLM3hZL0VjaTBjSGRVN0oxRmZFbzFvVjlPTEJEK25hUjA5V2c1eGRnN1l6TmJabGd4emdaclhiT3ZXeGk5SDVSSTVwWi9xOU1xOC85bWZYd2VUeEo3dlBTdUE0WDV0aG1ZaEpZNzJIUjMva2NPZUpZZVpRT1ZJbVk3N1RKODloNU1RZlVSeTNCRGJQdGN2b1ROQjg5SG8wdDk3UGo1Nk9MSTJ5WjRFVk9mb241L1VNM1NzbDFqd3ZqWjRITzlSZnN3OWlhamN3WFhpb3RvMFNHR3paSUZodHNrVmo3dFJ0N2FDa25nYWcrVUVzRmRFd2I2ejFLWGZscjUvai9LQTVISm9Vb1dGY0JYd3ZWZGNMS1RWdEg0QW9lbm1NUmFISTBCMjRWT1BJNTJKczB2RjBsUERMT0lnQ0IvVmN3SWppbzZ0UzlmVUJVczVOaWFqWks2VnBuWTFWN1J6VnErY3ZKS1FGSGZpalFncHZjNWxNM0RjKzVUd2E2Q3ZwM090Ylc5aDVZTVhXVExwa2pqaFduYzFUZmwwWGgvVEx6WEV4UU0xc2cwTXJoMGxudGxpSVhqMGZkVEJJMzk2QUNydXhPU2dsSlRVOGVtRjAvcytmZXJPMWNhKzFiVU1BNDNKVXR3WWRRQzEzMjc2bzJxSkdFTE8zTHR4V0lET2FDeXpHc0M2aHlKTnplVTI4L0JXVld6NDU0VVY5ZXhkaUpjbG5YUFpSdWdhY0FuN1lQUG85LzhOTkdaN1pZcXNiNmxEMEZBN3krTExSN1pxem9Pby9pYmxROExDVmczcWkxcThScmFwVmhXc205YTlxUTc0MGtoSFM1ZmxRUlNMVzVRMW1yRXU0MjY5U0xHWjdKL0UwQ1BJTFQwM1k4MDdSazhORkdpY0VFdE12Zis2SlByMnlhVUFvaUk5QjhnckEycGgzYUMvV3d2d2xqemxjaGZoWEo1WFZPc3M5UkZ5QUNGUEx5UVB2N29FZ0dZRGs5ODdzaUd5eDlBRU4xUmJZRVJJNkpPS1RrN2FyTWpxdWIzeEJGV3ArTE1XdzZuZ2tNWkJmbzl0RUFEaVhJOWY2d2hyb1oweXJSM0dhR1JiakR4Vm9ZTCt5dlZIczkxSXkvZGtvZGJVT0tpRjRpcWRYc0pxZUpLUHBZYldLWUQ2NHEra1ZlblhhUVNGanRtOStLMFBVeCtiQjBrMzBFbHYzalBpUjBFZ2o5WGI1RC9PL2dOeFljODdEcmJRUDZRZmFkRGZZL0JySHM1QlFPY0JNSGZ1eXE3U1ZYY3lSdTROZmJCeGV6RDhaczlwamNZMVpHRm1CODMyNlQrWUxvaW9xcUlmRVVXNlgrS3JsUFdzSXd3UjZscUR6U0EwQnFKdVA1S2Z5VE16UG52bWs3Tld1bldtWlZFNloraXI4d3hDN2g3c0RlRFlLRGRvTm4yeGxXSkVvL3hldXVsQ3N3Z0N4OUt0SjEzdG13YlBJZjVxSjR1NDBrQUVRZFFxS2prOFYwQlEvWEcrNjJJTldMOVpDNGx4Q2U5TlE3UGwzb1RhYm5DU2V1UWMreHU1OXZHMVNIWHduaWE0akFRZ2J4QWwvUlgxcEtYUk4xKy9PQjRxd3c4cHlrdDJhUDUwTTBWTjBqMm5Lc2lROHJac3gyaUV0aWVoQjYyQjE0dEVLZjA4VFNwTVhKNHlhUUhMV21pUXBrN0xmRktnOUEwZDNaam44R1NqWEczN3BtYzQ2VnNPM1MrYWJySFRGVk9WblRLV2pMWmdTOVp0c3l4cm9DKzl4VXJSdWdhUWN3TzNYRjBpNEpzN0tlcVNVSHFaRGV3RU5rSXoyYjJtbk5KdVl2OGhGbVliWWdUS3lRbTQzRm12MDhBbUtGWGN3WWFWNy9uN1JmNTArdUh4RzZlS05YcDVsY2R2OWFYTmc5eDhib1p0KzdvMlZ1ZUEybytrQmtiVmhSNElnRlZuUS9uT0NhbG9sanUya2tiMzFHSHJ0N3ZtQk5HekdGQWZlbHNCSjd3VHlMOGpjNWpEUHFubWJyQnJGYVUxWXlGc0Yyck42MnhuU3JJT2NQTHArbDgzaWd4T3MzOUpuOTBUb1U5a1ZqK2dUVlpwRG1tNTV0QWgwSXdWSGFxNlpkbjgzMHhENVlVQjN6TUxiY0dhNDgvRVdJK1hHWmtsTU45eFhxNjFrUWJmM2syKzJMK2cvdVBhZENiVTZHTExuNTRiRUNPbWd2QUt5RVRDK0FPNTh4TEg3L1hJbWNkRVFTRElTU0V2alNrUE1MbEJzRk82NmI2Zm15REpNakNreUVCWjE4Z29wbU9ibWpCeUNxU0hiSy9yVmJNTE9ZTzV4V2pkU3RSZXpnUUxad043c2lvYk9vQ2NtQUMrblI2eUVtV01vOFJqMmVoNWVjUk5ORnVQeVI1SzhlRm1mc05aSWdqeXprQkEzbGJZQWc4ci81R3FCMnVlN3lYZU5Eb3dMREpUS3AyK3lYcjdPeTZLaUZ2Zko0bTFKM1BIMFY5SFBNckdqd3gxS2Ura04vMFN1QUQ4VHpxR0ZtcHp0UUdVWnZkczE3Um5EMzU5cTl5RnoxS1VSR1d2d3VjY2lxSUluZnZySnVER3pJb05Tb1IrUytFeGtLdFAvU3g2SEROYy9oL3V2TEJqdjlZazRZQkhyamdSMWdwbmlkTGU1NnFianAxbURvbXQ5bmtTMUdkOTl6NEhLMkZoYkVqMmpwWUhCcTRSMFVJLzA4cTdZOE40dWFDTllUMktVeHdmaEh1VjU4MG5qVmtEclZlNndIVHpmQk9JbTlqNkd1SnN6eURWTUd3Uk1mOE03aytFSG5MYWJhM2NEcndlaTgxTGw4RDRQTVhVUjZhc01YWGZXdDdmS1hpUnVaSGd2YTQxNU9aaDN3TnFYQnIxMzg5WEdZTno4NThDNEh3UTR6S1paOHRXRDRNQjgyeFJkQnQ3RkZkQ2JVZlhDbGpFbWNWWkhVSUROUlVnWGYvQTN4TGhDaW5XYnFDSENjSEYxVlFwRVFnb2JNb0UvbGdHZUV5UytvaW1scm9oNWZ0MVc1VWNJRWRDWlB0Rk1HZzBCcGNaUXh0bkRMZVFFUG9WUnRuemE2K1ZFLzBuVnZ6azdJekRFUllRRUZTUS9wc2N1THZVMlFidzlPSS9RbWJDUDRsZkFQVHRndW1aOXVjZ21tZ1VYbUdzRE1oQjZERkRKSnVIUmc0UzVYTk94RzVQNlBVbjJBSThQbDZya094VWxwakJLWVRsb1AxdktSSEZxVFZoUjUwdmhuUTRNajRnWHcwalZ6Slk5bmY3dUlIcHNoU1daRGFrNkY4QjF5VktkdGVxbVFBV1ZacUFhQXlGdFJlazhZaWtjMlUwNG5EbVNMUGNmei9JdGZ4dk9qMktUR3A2akdsT1Vlc2praW42MVdpVFVyc1ZDdDlwS3VUeFBvclN4amF3MWVESFJPd3ROK3E2UzJWSTRONlBkdWFRMllxV2RwNDJTejh2cmNPUHJHNTVVb2lOb28zVUJTcVFYdGEwdy85SnNZeHozeVZ4U3p4Y0hXYXZhNVR6Y3BvN29MUkpjMFdHYzRaR0RKWlpSa0wwY09MaUFhUHhVN05TRjFPakxSSGxZQ0ZJemEvZTdlMk5RaStnL2dVeUQwdFRaSi9nbzF1amEyVG5EaWRnUlhGR2c0emltR3M0WXV2bXVuVDBlRThaV3dhVUt6bjhJVmJ3MldxUkgrb3lMc3dEdVFEanlFMjZINnBQTW5EanQ4cng1WURPc25hWlFXL1kvcDRKUVo3eVpNVmhjbnJvZWwxQXdITU5YUGorclZpUWlYKzhuRzdBSmcyb1lxcGp5b0I1a0VxOVRzcHZFeVQ4K3NMZnQ4SDc0SzFDbDBwaWdMdG9vYm9XemRocmJiczI2RVgwZmp3V01LcHN5NUdITlhwcWpnWi9SeE5vZzE3U202aFUrczdNTjBEZGMwR3pNOENJLzRlUzlYeGs4d3cxblhJNm1hNk9IbCtCTTAzRmIydHpyaHNZODJvVkZQNENCeFBCUDhhOHdwNmVDVzcweFRRNXZzcGdpemdZbldTSTNQMzR6OUZpbStRZHEvUmovaGJZRUxTNEN5Nk9aSDRDbEhpMjlyUkVBbFQ0LzdnZmhsRFBhWktNWHNDUXREa1E0citzb1Y2NTk1K05LeENVTFROMEtOYVNxVEIzUnIvY2toZTJUNHJudkZNZ0M2cHZhbFh5T3BxVUhNdXd5UDcvMDNIS0JFZndvb0hrdnU5S2JCd1V4b3ZSMkxBc1F2RmM1SXFienZlZ1lWdUlSMGZ3cXV2czRwclkvRnlYK0ZyazB6eEY5SG54MjFVbUcxSjh6WDJlbEZSdjJjSDgwdzlPZlhsc3RFczY0OTRNMmhhOEg5MnpyRzBKNXhKYWVMcGZDc1dNb28vdW9HWEgyK2JpaDVOSVo4QWZEVVdIa2JPeGxuQjdad0ZSVjV3RmpPKzduaUs1K2tFUFpobFdUcDN1eU5UQW5PT3FzQmxMK0lwMFFJbEtRMjJjUWVSem5FMVI1ckR2emd1QmlNckoyZFZTeG5TZHZyQUVOY2YyVmlZNldyZXkyTmpSdGlwdWg1L3NKOGxxMG5lVkdqRmk4VnlVZTE1UUlsY2s2b1ZrNi9XUGk3ZUwyaFVYdWkvSnZyVE8zYW9ZTFVLb3VVb2ttc3dsQjR6VStTU0c4b1Z5TjVGNzBxa0V3UGVNTk0rT3NaaDZtNXR0d0xjSmR1UldONHJPbzF1amxTK1ovREVQVU1ZRWZpOW50QWtUNDdUakhtY1hTeFpWR3dqVjgvUGg5KzF3dC9wdHdGU3FZS0NVMk5YRHF1Qk1iSHplL0VVRjRvNGFtME9jYUdianlnS3d2NGVPWW0vTXVLdG1yMlpDcEt1QUUrZDFYaEcySk14K2RBckZkTXFKVkFMc3VWRk8vc3FUbW4rRU9ZVnR0aWVyV0h5ellXRXAweEJ3ak03UU9SeTk0NnBZcGt3Rk8zRjRneFlHYzFQbDgvRGxxOVRrMEJCSjVoeFRSaVVsQjZ1K1Jtc0FxRTlFdmxCYzVIamRYTjhxcVYxUG9kcE1GUi9uK0V1WVVZdEV6VjJGM3VkY2p4TWlCTXhJOFhRa0dGWDlDYnk1dkttQTY4TWYxeGRQbUk0c3QxL1M3aTZqYUw2N2RubFQwMGZxUktpMFpHWE9HaEErK3JjS2I0dXh1OG1RcUNLYmM2K2lpRVcrMHFtMmNlMklsVDRLaVNDUkNYVTlyWEFxTEZrWEZDbDl0ZjVFY2NHcy9odFpDTW16UExnWVdYQ2RyZS8wdjRwM25WSzVqYU9LV2VHZmpxZzJINWdCT1VsV0VBM3Q1eWFsWW8rdE5oUFJtOW1LeUNmR1VJK3F2eC9uQUZEZ2JJVkxOL3V0NWtmN055MHU3eEpLL2lybW9qbVBmdzVRU1RCYXMxdGtxK0lTQ3pwaVF0b2I5QWkxYkh3SUExRzdpTHFXbDIwNE9kVHRONnkrNUN6T3RRcW9GMnZyRXJ6NUVsSEUvSno1V0lHSEJhbXhUNXB6RkxIYUFRaUtrMUwrNFlZMUpYNXZqa0txSkk2TmUwY2R0cW9lYndhSDBpeGUvRXpmRTlEWnZteWNVcHVoWlg0Nk84RldiRWRKNzhWWXcrNzV1Y2NsVUoxa0JqaVloVlk4eEo3YXJvUGtvcUFzeXJRV3JJL3RycG9YSjJ5SlpmaGRvemg0ZHVVTEJqVmNaUXRqMGJNakRjOXdRU0g2cWtWMHJ5SkgvYm04cWNod25zWFlpNDlnMjBoY0hHRkZFYUJ1MjRiM29xM2NkZWlwZGV0QUd3bnFPSjFwU3FybWRnOHJQUTBOYWRlZHpXR2xOVE9TYzJNc29lVzU4TGwyUjQ2SWZONk9NRm9HZW9HRjcycHpKVDlGRDQwWXRXbHFGdVBHTDBtenBRMklzaitWOGRqdjBCWnhld0gzRXB5VDhWbzBuVjFrUmFZaFEvTk5BUDRodmhlZ1ZkQzBKa2hKTE5FR3BSSzdCTEN0aldDaG5ybEFGNjZoQ3d0TlIrREc1SmVKMEZOdVNGcEo1TmI4dUR0Mk9ZYmFqaG9Qclpteis5a0lHNWVJd0J3VzQ0V1ZQWTl3WFFyNXJobXZOWVhDcC9nc2I1MUkraFlqbjRWc1pLOXU4ZElSdjZEc2hraEpyVUVIL0JUS1JRbW5WSlFJbWJvTzdqZUJySFpwOGx6Q0VldnlFMzFTYnhrcU5DUTZ2NjI3S1FySFBLZ2tta1N4aGo4YWRuTzEzcU5XNG13bEp0K0lOdDZBT2NlWmZOYnJYNnpNK0p4ZUtTZDVaMlQzS0M2VE9MMnJCNFBuclFHWG5FYjh6VTByUlNzNURRWFRVUWM0QzE4Yy9OeFVnbzRNVWZHY0N4VmM5WU9FdVBHMEZ4MUxsNURnb2dncjFOZ2N2ZEttT0E1Q1hJU1JCZU9taXFnM3BPK204bVZLUEg0eTRUekkrS2hFQW5OL0x1ZDkvNUNUbjVUbDdDNGpaNGQzS3U1OTlESUZ4NTZGbGUyR1h6RXczQ3U3YUFsck5yenZhMXorb0JGZDRkaFN5algvM1lDVlZkRTdoUWhqdGlMeG4rMlpyM0FRRGNLcDkzM2FhT25HRDVzd1RscW9SajB3YU1BNE1CK1RYTTVRSlJNZzU5d1ZzUVFJa1hKRGh6WlRjTDRkQmUvM2t1WkV3NlpRaFNtR0FEWTRaVzBZQjIrS1NubjlybEdoUHI3a0tJak1leDh2aHhnd3FXQ044RGxSeTZWVVNtR3J2ekNnaC9Oam9sMDZiNjJ6M2hGYlZUZ1ZnWjlBb05jb293OFlCT09nZFRJZktUbWxKTXRTekVqTXp6amRGakgvb1RENWVza0IxTnZhUGZEVy9hbVdWVTB0emJwRmMvSFo2emlJVE1JWkI2d05xZW82S2NweFh5blBwbjVWTU5lMjY1SkZjQzk3U0VVNXpDd3ErUmlDY0xZQnhZd0hFN3YwUlBqRm9wMnFheitzdVFoWWpPd3kzQzlJWmJBVlFLTE84ZW1LeHN5QXM3V25aY1VVTjJNdXRTZzg3Q2F2VS8vT004ZFh4ek84L2pmVzZmdUhYdGhqTGZSaVZNZnhtMWJVZ0hmT1Y3bTJTeGlGbVpFUFRvNE9iV1czdk9JVFhnZmJ5MkRmQmFLbE9vSVRXUmtGQmdJNW1CY2c5RE5La1FGTG9RMFVjMUZEK1JYM0dLU1k3MzJMcjZUditpU3dZZnUvaUI2ZnRlTzlqdVVxODd6eFZBWVlNZlYrWmdPbHF3R3dTNDZXZ1BCa1ZBcVM4RmQyRjJYL3o4Z09yd3VxdXkrT1FXL3BPTUlLTjI1MFQ3OEVsS2pqRDNlVmZMcWxYbGJBYTZudDdDL3BGcFNqYXJTWENGSjRMQndnSVUrdm00cWVYN21aQTdhQUNYL1FoZGJaRGZYZDJCYlZ4VmhFbitCT1c3QXBvcWlOa3Z4d2tvUnl1NStNbHlyaVpRVWZza3FLVm92MzhRNmtpY0tUZ0Q2blFjY05JcVdCMDFsUW1idGdlbERVZkhGTndrcGxGUmRYcGdIa3BqNkhjZHdDT3lrMFh5b05qUDRlcUwzaks0S0VoRGpQNzdzRHl3b2crNENLWGU1bTdiZjhaRjEwcHRPSXM4d21hWDY5Y29qeXdVVGZrUlJQN1RydXRwblgzSXVZOUdsZDkrWDd6YVpjekFudEhqL0hzRVBCblVGdm5XYk5wbWxVOUNQbTFPV1E4Nk43TXBsWjRCOElzWVZiTDNub0wvbGk0czl5OExIaXZSQUtTclNrTjN4QU9SWlhmSHhZYUFEaGpiV2l4bTlycGNmMmR4dlIyY3hzSHE5TlFNQVBNTnpOVjh0WXRQMC9jS28xdjlkNWgwa1VLQ3IxeGpzN05EVGhzdkpESUFMU0VlY09MOTlDSUdmZklKS0xvYi9EVTY1SmJBUGdYb1hTWG54ZjJZSVQzVDZyakI2cXpJdU40OE5tTjUzbVgya0JlTmJTQ25uTlVpV3VjTVYyQzQrUUE4bzBJdjNkOTQrRFNaUDZ2THFkU2lGdDljSjFsYkQzaHo5K0ZSSkdaV0JpVUsxV0owRFRLc2NDcUhWV002M3FmSFZxUndCMGR6Zm5hRUVPUlBwekYyRUJYL0hzNFpuYmZWN2FNVS91YVFMa1UxL010SEZGamNuY01ET1F5ZzZ4R3Q2ZXVDWE1uVGVpZ01RdnFtSFVrZjNLYWVPWk5MakFneDR4dTJNT1dwRzJYVTgrZWh5dk9vNEYrTWdHMVJWZWRHOENRbzlWVXlHS3dCVTZ4cFVHTHh2Z2s3ZitjRUJ4Y0tZY2NINWJ2cnNkNmNhaEQ5cUlYRzUzK3ZDWDlFaUljUXVkd1prdis0ZUVLc0NtTHhHWDlLamc0eGdzc0l0Nm4yMGUxMEQ3WENLaUpVK3ZLcm1RMkROUDRSTmRmVmYzQ1QxZi9XTTh6dXVWaGZiV3gxWHQ5eTdrUS9Pc09JNkppcGh4RTBQRWJyMWlDcklIWVhRRVRieWIzOEVnVlU2TFNzMW1aT3g3VFAwOGcwQXhlUmN5UjA3dHRMdHNzZEl3cmU3dmRlQ1grMTJBY245Y211UXNEVkE4dTd1TUJBV28xY0x4V29nQWd3eDZRdlNwYm1yRUFkWkhNNVJtS0U2NUpJQmdLZ2pjaU0vaUhPOEU1eitGRDFXQmFuamUyVU1WNkRtcDdpdUxqZ0l3emRFVmlzOGJPSFNyVnBESmx3a3pXbnpJOE1EWUlVODkvTlE4V2NqNk9QeUtCY0VFQWgxeUl6cjZ2cml0UndUV2pOeFJaWi9KTXlyR1NyMHZNbnU4Y1JkOEo5RmlVc1FZNjhWN3lPRXY0M1NreUl5MWRWRmNLOEdZaERYUGt3SDV3b0JaTUl3VlF0RUJKZ1M0Mms2aHdtTlhGSlMvVDM5MVMvWGdiUWVVOTNqdkFVS3FTOHk3bG93alpqMHMvUmpLUzh3aDgrazVQeXZEVGVLVGw5dCs0NTg0b3Y4YnpKa3daZDVhZVl4Y1R1WDd1bFBHWmVuYUFHekhtT3Zkd0JyOGxWR2h4dEdtNzI4ZEFjUTh1TGZ6YlVjdjFRcktGOUYwQzBDTURqb0VXYVI0TWg4V1Rld29RdTNkSEdlelZMYUV2UDNWRm1kbEJLQ0oxQVNyVkZaUXFQYTdXVGRkaU5YUVVqb2NiN2syQzJuR1llUWFQNnlzSUFPSkdYTmJFQU1STER0dHJXcFg5WjkzNFowUTNjNW1zaEtDZ0ZpM0xvUnpNT2N5V1FBdlBkaldVd0FkcHZPOGpvSkhDc2hxT2F6Zk1zU1hOVldaZ2JjSEdaNjVqZFZ2WnFkSEhreFoxWFBzWnllb1g5WGtGZlJQd2UvbW1VSFducmJ4Z1RQU2pxNmEybkFhUnVKVXIzUmR5Y3B1aDF0ZHRYUk9mNzFkUDJCb2VJa2JJMk5KaTZKbDQyVkFmaU56ZU5wRUlYV2RPTVB2OVowVlBGK1diSVFicEJ4ZzhMM3JuNFd0bFVuRXlYTkJ0a0lNVzlNWjhRck1iTVNCamhyek03UlZWQVg3MXhaMWd3QmxLWWtaemFNRjkwVzl0aU90OWtmRkFpZkVxbmxHVXZHYzJLeFR1SGdvbXZDaTc1NmViT3pSdXhxVy9kY0diVnN0Qm5uVU5MS2pRd2JnVW1sZ0dZK1VYVWM2cnpvQWt0Rkk2OEtWSUhHbG1CTVlOQWlLRVUxUzMwY2ZZa2FiVXhkL0hwWWFEc011ZURuWktVVytoN09OVVEzbFZzR3JxbnNqb1FpQjRxemhqM1d0NU85WlBBWUc2NXZLOHh5T2FRT0JTKzhFWHJvMlltbWpxbGdUMjJKNHZKZEJvMitQMEM1SFNYTnVMWHV5dHMwL1NGM1ZFZDBJTU1HM0hVOWFpemxLZndjb0xBalJ0S3lwVUpxdXB1Q0Q5RWJkekloaHVxRnhhMzd5bWdWNDlYNHlqVUE1WmcveENHVUROUkV2WHJoUUduRFppTGxNdndnNUZvOHgyVjhiSFA0a2xQZGJoRUhFZVN6T29OR2djNTdQVEJPVE9UL1JxN3YzeXFUWlZZcmRJQ0NCcWNkMWFGNjF5LytORU8veXRkakNDU09weHR2T1hBWFhVZEhXZVNTSDlzSEFZbHpWY2FpcEJleVVhTkRRanRLY0xFczh3L3VGOThJVzQ3bmticWk1bGZYcXdlNml5TW5DTTQ4aE9XemYxdzBqVjYwbnZJd1YwU0FrWURtYTZUOEhNSktaYkljUHZsQnZyTUw4WldtRXI1TzFkWURFVUkyMS9saHFPSlBZYmNyZmd0REl5UDN1MEs1Yi9tTUVIa1REUUkxQ1UxRUhXR0s2U0U4OXBNYWtiVnhGWHlsUWJUaFdQbnZCNDZLVG0yOTVLRWhyTW9kZ1NmZ2YwRVVkQnUzNWdMQkVNdzJETUxTaUU5OGd1bnBsd0FaNDVJYlBhdW5ZblJrY2RvblRTQmRkTHRmaDBZREgza2tKQ1BOMUE3U21SMG9QNWFIajJKSW9NaVRLVGgvOTM2d0NVaXFmb2dlcnlML1lhN3JzKytkakRBTmNqcnZIL2lYZGRjeldTUXZvYmE4d3VQcEd1dGRLRmpTZHZzYmk3NUhZZzJ4VkEyMlN5Rk1YVUlIS0dBcDh6dzd3L0thOU83Z1JieFpyeFlnaWg4NXdOY2NZbjNZb0FIVldnSy9QbmZhaEdscjlwOUwzUlp6b0JsaFR4WUxiK1V5TUNCQWRDMk5PcUllOVpPb1JzbTlXalNLNE9vOXYvVHVtRUJTK0FnaksvVzhJMlNLbXhJOFRwbEVWcE5JV0JqU3VjNWJJSE0rQ0E2c1FzbDVxRW9pcVBZOW43WEEvSW1UWUxaVlZQYzNsb3ZRcUhWOXV5eVNWRktFZERVbTduYzl4b1RMWHRzNGZNV2RWbHI3SkVNZXZwOW9ad01oYzBWbWNKV09HL0tVUjBXWE9qWWVNS0RWSEljZnhmQjNncXNWeWhCTkg5WjJud21McmhQdU9uK1FvaHljc09PY0RuUjIzbVFLNXRBQUlYcTA3WVpHNzJ2VUkyTEUzN2NXRXM5Q2xEZm55d1Y4TXc4anBOZDNZVEJldEYwdC9PcWpLeXFNSXh5eCtkSGcyRTh0TXJyZXRVVlJ1WmM5Q2VNOS9KVDhNZG1SUFJJM2grMThTNXdRcGNIUFlVYVI5QjNNRGh0Zkh2b2xVazFpVy9ydVhvQ1ErT08ySHJTNnRVVFc2bUd6alZIbkY5YWw5UUs4U2hOQU1nNTBwRlA0NlJWcDVPdUM2WGhGYzB6QW83TXpsNjBZS1pVaFp0bjlsbVo5MEwxemliRkdSQUhaRG9ud2kvWHl4aVV5RUwydHdOeUZ4Uy9qTEhLOS9JN0xPTlVZbHNiZmdjanpFM0JYYU4zcDZGMlBYdFZrK3FrR05MM3RBbWdMdXUxeks4TSs4Z1RWWTVwZ1g0SE81bUphSUtzMGRGZ2I0aXR1dG03N1NYd1JPekZlcXYxSENpd2t4NDMxUnovcVYrVlo5QmU0NDFrNkMreDkwcktaZ093S1BoTTNVdTlONTNhY0hZamdvYnlKdFFtUk5oVXBNNjhacjF1UzNHV3UwKzhVVHE1RTBZelN2RjZGcklVOW1xTkpJZm0xMVUzVy9Rd0dyZGtKV3h4NnpibWJHTGdyb1BHWFpsZHpVUndzNEJjZGZJdFBJMWtBYkxReE43cjNlTlF2a3dTdE1kaFFnOHpQb240cS9jQ0JKMFl1c2l3M3NLTmFtSTg1SkQ1NlRRQTBtWXJkRjNxV1g0SnNOUnBCMnBER1VReDhIZlZscEwrcWFDalFXWThKMWo0NGs2cWhpK21LMkFMWHMzSktqZldoa0VlOVc5d3ozdTkyU3dUVjFTZjZkWStBWEs4Vi9CM1VBWEtwSUMrV3l5M0o0MVZmVlRVaXRNN3hWR05pUVExcUNGR0pPMlIrSUxDb1UwdU5pZVgvQ2lTQmdSL0IycWYzTFR3Q3VtVTVUZWdaeTZGT1hvZjc2RXZiZG95T3IyS2E1ZEg5aHpaQmQ0OW55N0xJdWc5eVBHUmFvQTRtRVQ5TExDSzFCSnFzNHptNFcwdzFYd3JrOWgxdHo1UmN4bElrWXV4VzIzRHR1bGM0TGtQdGUzbVEwT1BRTE83b05ieDdRVEtxTHBRa1QrUHJtNk5temNpcWlvZ0dZV21lbXJxV1BSZVpDL3pvSyt5anVvRDl4MjB0VDc3VU9RRmhLQTI1ZUhrWUp4TnE0ck5SQ1NXcldkb0NXSXZXUE9MbDRkSEJSQTRROEliVUlpTmowV3VKRmNMU1BSNW1adlJrN3RxaE5zaEp6S0oyc0V0bUlWN3Uzd29aU25hek9LTVpTVGkwTUxRSXMwZEpBSjJwckZnYkV4eWdYQ3VVUjlLZXJIdytXNVlGUUIvOHIwRjBVMUhYeUk5enNRQ3l3bi8vMlFBQkFCb0FRQUFCTndCQUFBOEJBamNDQUFBQUFBRTBBWjFBQUFJQUNRSUJBUW9DQUFNQUdWUm9hWE1nYVhNZ2IyWWdSbWx1WjJWeUlDZ3lLUT09PC9CREI+CiAgICA8L0JJUj4KICAgIDxCSVI+CiAgICAgICAgPFZlcnNpb24+CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvVmVyc2lvbj4KICAgICAgICA8Q0JFRkZWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I+MTwvTWFqb3I+CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L0NCRUZGVmVyc2lvbj4KICAgICAgICA8QklSSW5mbz4KICAgICAgICAgICAgPEludGVncml0eT5mYWxzZTwvSW50ZWdyaXR5PgogICAgICAgIDwvQklSSW5mbz4KICAgICAgICA8QkRCSW5mbz4KICAgICAgICAgICAgPEZvcm1hdD4KICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24+TW9zaXA8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgIDxUeXBlPjc8L1R5cGU+CiAgICAgICAgICAgIDwvRm9ybWF0PgogICAgICAgICAgICA8Q3JlYXRpb25EYXRlPjIwMjAtMDEtMDdUMDI6Mzg6NTIuNjcxWjwvQ3JlYXRpb25EYXRlPgogICAgICAgICAgICA8VHlwZT5GaW5nZXI8L1R5cGU+CiAgICAgICAgICAgIDxTdWJ0eXBlPlJpZ2h0IFJpbmdGaW5nZXI8L1N1YnR5cGU+CiAgICAgICAgICAgIDxMZXZlbD5SYXc8L0xldmVsPgogICAgICAgICAgICA8UHVycG9zZT5FbnJvbGw8L1B1cnBvc2U+CiAgICAgICAgICAgIDxRdWFsaXR5PgogICAgICAgICAgICAgICAgPEFsZ29yaXRobT4KICAgICAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPkhNQUM8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5TSEEtMjU2PC9UeXBlPgogICAgICAgICAgICAgICAgPC9BbGdvcml0aG0+CiAgICAgICAgICAgICAgICA8U2NvcmU+NjQ8L1Njb3JlPgogICAgICAgICAgICA8L1F1YWxpdHk+CiAgICAgICAgPC9CREJJbmZvPgogICAgICAgIDxCREI+UmtsU0FEQXlNQUFBQVlqZUFBRUJBUUFCaU00SDVnd2NEQ0FyQTdjQUFBQUFBQUVqQUVBQUR3SUFRQUlBUUFJRUFBRUI5QUgwQWZRQjlBZ0ZIUUVSQWZnQUFZaGRBQUFBREdwUUlDQU5Db2NLQUFBQUZHWjBlWEJxY0RJZ0FBQUFBR3B3TWlBQUFBQkhhbkF5YUFBQUFCWnBhR1J5QUFBQitBQUFBUkVBQVFjSEFBQUFBQUFQWTI5c2NnRUFBQUFBQUJFQUFBQWFjbVZ6SUFBQUFCSnlaWE5qbWNvQUFabktBQUVBQUFBQUFBQnFjREpqLzAvL1VRQXBBQUFBQUFFUkFBQUIrQUFBQUFBQUFBQUFBQUFCRVFBQUFmZ0FBQUFBQUFBQUFBQUJCd0VCLzJRQUl3QUJRM0psWVhSdmNqb2dTbUZ6VUdWeUlGWmxjbk5wYjI0Z01TNDVNREF1TWY5a0FCQUFBVVZ1WTBsRU9rZFNRbFF3TWY5U0FBd0FBZ0FKQUFVRUJBQUIvMXdBRTBCQVNFaFFTRWhRU0VoUVNFaFFTRWhRLzVBQUNnQUFBQUdIWlFBQi81UGZFeUFVTFBjTUJlVWZGTWhxbU56VHNad3NDdVpoNVN3bEN1T0xpdlN3LzBHR2RmVFk2NlNScHdCTHd6aHFqQXZabG01Q0lOYUFlZGtQOHIzdytza0pzMDc0Rm9DQThVQVJFaG1sbit0YU9GQkwyMkdDaWFFb0lWaHBCb0R4VUNlcGg3dU9LMXBXbnQrZ1g5VVdlNGc0M3FkcGZZRDhDUUJFTk5iQTU2R0oyOVFhRVUzYzhUU29Rd3p5eEM5eGVSS1VZSGRlYlFZN0tycnBYREhIVjRrQUpCcnEwcjJiOEpBSVdaNy9EN1VMdGxpR1NCQWVzZXlDa2k5enVPaFdnRkVGZTd6R24zd0d5TlFqZWpaRUhsN1AvWElqdjF0NzIrY0hONnRBUnNwVXNsenhyYk0waVhaVUxOYXFRTFBZOFhtNml2bVcyYVluNnVFc2RFVWZkMnNUY2pvUTFrVnN0S1JuRDRUaU9LOEpnRDhEOW5ueGJ2cFVNWlk0S1RTRzZWRWgwZmF6MjVaV1NNTEdPVzVxSTlCL25lY3NlQUdvbzJFWnU5S2wySkc0WDgwQVV4NXlleGRWdGR4bFFCOVpoOGlQRHJDclhjeVlKRys1alBLL1ZqRDZPS2RCZzdNWTFPcUEvR2NmR2UvTVRGMXJJN21CSUlhVWY2aFh2MEtBOForcXhRRjMvai9JRnhEWEtJOERZUVhQSERUdnZQS3RUUEhpdTRoc0EraVFtclJHOFkvL0dnSi92ZFhIaG5tcHd4dzBkdkpmV2cyd0hVVlZjMlM0YjJOZWwzNTY2eGlEUFRucjJtUGw1SGw4SmZGUmVueDlLdWJnZWVneVZsWmh0ZUZhTGl4OGo3dVoyc3pUaGJ5ZElmVWdLeXl4N1RCTEVyUWNQSkJXT0wxNHNUMmtucm10bmNIMHJ1OTc3TjFDZW4rUm1DTGlURWYyS2hBMGZQTEVOQjg0bzlsLzFtWnVZK1Jkd0xpSVM5SEhWck9tYUx4MjB4c0dFeEFlQ3M1SjF3dTJqaTJRcVB5Nk1HUjluYmZ1dUU0a3RvQ1d4TmNkYkZaWHRTSDJic3poZ2xBc3JwbU9UY1VsR1lXZzZNNGsyVXdyam13WHVSWE5RajRTYld0R3ZDQ3BnTWQyRGxENDRDT1prMDdNUU92cEpVNlZ0YVJBZ3ZHbXoxVVV6SzFUVXlFRXRFTkwzTDBzRHhmOHJjWHBjaXFXLzFqSm5BU2ZXZHZuNjlwRk1Ka3NmaG84VnNpajhkMUZic3JraGZTN3hrVUh3SnZXRDBEMW15blhIRkZJUk9keE5GbUJleDJwenZFK1UvMFlJZjlsdWlGQ29VMFdpaENWS1dZUFpManJ0cWg2MUpFdmQ5RzNVMTdQUXZSWS96djlzc0JwLzJKNFVJMWk5QXNPVi9Pc0VXMlVZMlJ6bkJZaGtTcnZEZ3FYSVd4UFRvNi9GOTBBUVkzbGt3S1Q2ZUV2bEw3UU5FT1BvU3VTNEg5bW1IMWN2SFNoOXk2Z2hqN1I1SkdKcnF1L0JEYTUxNERYRTNyZ00waml2Tlk0UXMxSzk3SzFpVllqNUhGV0FTRmI3SzRUNnVUUlhHOE5qY1JuakRZUVdHdVZDZno2SCtwUURFUU5sZE1zUENpK2krSVhCeFhwVEZCODc5MnVJKzNldFdhUGJnM09QSEtlcFoyNTZWSDJxZnhYY1kwTXJxN0ZWSC9MN1d4WXN5b0h2NkRKQnJDQzZ6b0xxdnhRQnJSL3BMaFMyZnFIeXBkdkx5aEhuRDc4SXNqcmF5Wkx5djlVcHVKT2M5M3UwTW5kTjNBOUlPNmV6ZndTVGU4cjF4Vng4bkxFSXJoRW9mQ3hzb1RkdXhDOHU1R3hMNjhvQi9vTXMzZTMyd1dLTTZDUG10ZmdDQXRtVnhkVW9CLzc1YUwwcFo1ZFJnK3hsRERDaVFCU2txRG9OU2dBMTkrbi9LbXpMK1FYbjBXckYrVEFLSWsvYVRuN2hMeWwyc2JBSUY2SjErd2JvMHpmSjgvOHlTZk1sUHpwb05mREtVQVhoSzdIa0Y0VEZSbXhsQWQwRjhrdE5ubVVqMGpJbWthK3lCT041ckVoUFEyZDhMYS9QbzFHSFVCZDc1aUhmQ0E5NFE1dkIraldFUy9IQUg0OWdrc1VZejM1UFRxUVR4UFFIcklVZ2hlWm43ZHZlNHlFMlhSMThyVDhmRVpnY3B4NTlic2JWRFhwUlNKSUFGTDcyNkxRMnlDVlByRFdLREFLdmZyMXhWMkdiWDNJR3RmdDJ3Tnkzam9Jd1A4YmZYZ2hucld5bzFlSTBTeFFDM2FWakFQNGw3dE40Nlg0RW1od3Y2OFk1bTRpVXpha2VxUEMrUDhaZFc0U0pCMGJxRHlEM05xb3NDK2ZZOUlCeWNYUFJLSHJJMk55MWZSaGNPd0Z1WXNML3VUZ2xLK1RTTWFvRGZCdFlHSUp0YjFyQ2wvNmwxVFE5bkVoR1pwQy9KTlNJd2lPTVpLV3ZwOS9BR1k2b3pOSFo1V0pZQ1JtVHYxeExJWTZBRXpiNHpGbzJCOEhFZmV3NGFJOTRHU09mNWhaWmhrVWlySklMMmdpc0FCMmIyOWRWeGhQQTBxTHU0NlNWcVVSTk9obUZJMnZvM2dtUFlURlNtSGNTUndYdVl5dTV3QWkzZDduS1o2Y1FUNjQ2SElKa1BJM09zWkRmYWQ3WkFLZDcyZ3N0TVVxRUY4OWNGM0NCdzEvVGgwbGhUdEZxdG56eFlzRmpaQjdKT2tSbkJNZTFNUUQwVDUxc2RIOEhSMVYxbVRuVVRxejlYaGlRV0Izd0xtWnc5UUFlOVhlbUNFSllnMGI4NE5wOTRseUdEQzBJRzdPcVVHdGFseE1HL214WHZqbjZoVVRyVjVvWGdvdk9rOUZUa0tEZEVPZnlHemJ1dHcwNVRBUlVKbmduTmNYZDZQNkVnNHB3NkNsNDNiKzNMaFpLWnhSZno2Q2drSnBhQlYrSldBTTAvWHZDZzBzdE80UitmYm90NGUvL0NGU1o1UUxXVVBWR2o5YTN2Y21SQk1LcnhEdnBxUWRmNStPN3RTbTdIODl5OWtHenduUzBxVWQ2aDNTM3hiZDIyckpGWXpNS1QyQmVCQXBabCtQR3dxcVVTN012Vk0waEdwbHdqT2JLaHhmeXhDaGNrcGVqd3lMank1cy9HTGJUdGJDRjJxdm1PZVRZcXRsYmdpWVpZbkZzaFlsb2kyUWx3YVk3ZWlXTjRxUzF5ZVN2SlVldWgwNzBuNUFZbUdlYVRtOG1EQ3g1T2lLd1ByQzBMN2pEcVN6UHpSeXVjS1Q3cjJTNDRVNld1bEdnWlF2OG9ERDljTlFWMDI0aUR3ZElSdHp1UlZlNUdrSGdFNGRRdUxVenlaVXh6SEZJdHNBOGtYbEZVTTJNREhjYTRIekNycVdwaHo3U2F5TFR6Uk43L2dhQnV6ako0UmhMRzEva2NUOU1tY0lMQ21CZUZNeEtMek5qTDhlQTZEL2NtN1dGSlZpK1V5ZlpqVTF5M1lVcXhUMUsvZVBVK0UxTFZWbHU3VnAzZWxEVWViamI5TDhXSDJXQk1BSVNCT0RMOXVUZWRFWVlzVGVYMGViRS92QklSUXQ3OHZYd0pSZ1JlbytUYzl6YkYzL2RveFV2VUpJNXBPb3ZablY2bkZ0OXBYeEtrZmxEWndGSUllSTlBUEJyNlE1c2QvdElBcFh1cXRpQ1dVNWZXdUtFdjROS2puRnRSZ285akFMUDRwR0YzUUkrVXV1TkE0RUloQzJGSWV1eDkrNjRnTTZwZW9nVU45Mmw5R0FBK1F6dWo2TE55MmhjdmtmSTFMa1lOTk5MaFdUS01xTU9qRENIR0QwYlNycE9JbzhVeE1kYzdvd2l3YkE0bVF0M0NtSy8xd1cvdUFiRG8rWkxSSEliaktYUmk4bEIrU3htMUNteTNrSXEvUlJ3WmJIaVZkNzM2aldldjdMT2VSaGNnOHQyYWRrc2xnUWp4YXN4by9WNUNoa2hzVXJJby9vcVBIYmN5TjZEb2ZWWUg2NmlXdHRVZ1F1OFNWL2lkSzlHelV4N1l0Mk5OSHoyc1lsNDUxcjVZUzZKekZzTnFHcmduaUs4U1ViZVNwaG9XeFJCVDJiV2tlSDZaZ2pKUElncWRxRnFJWkluUytjc05pR1dXVEhXYTBYQko3cW0vRVRROFNpbFZ0V3gxNWFLTFg2TzNVWUNVdzg0Q2I3S0lLYi9QSThxaUlTR2MyRTFlRFpGZ2k1VlhlUkxxdURESEkzZWpCWnZrRGhDZHVJWGhaSzY5ckhMaTA1ZXhXZEhwRjByRzNjKzZpSTA4b2tuZGNpTzhHSnRZRFlZbkRZaVpHbjBDOUo5a0thVzVsV0FMSDBNMDNmRXM0TVluL1VmWWVNQVRrSkVkSmhWb2RaY0dJRmRFSFJKU05uak84VC9yV05EOHFUUHFpQWJ6QnR6R2ZjRHdxR3hQeThnK3JVaTMzT1hjVlBzdXQ2NkRWWlRHM2VkVGYwU0ordmF1RFpVNzAycjlwNXBnZms3cFYwVnlXZFJWSFh0V3ZYYUlkdmIwV1NZdzFmS0lWT3lKM3FjUWxVMXoyS3dsRENCZ3VDTlh0RDFsT0NIaEVaOHpYQlMwL0EzT1M5eVZyZ3F0RVR5QU5hM3N6WS92Y3pYcE9XaFpTajh5SU1MbE9hRzQ4eXcyV0NSVkdXc3hYYTJwYis4QXZHcDBWYjdGQlN5UWp3ZlE3SHJnTkdvdXM2WG5BZWJmcVpkd3JwUnZuM2IvYWJObXYvWkNNMnVDZlhyemxMUVpYQ3NaM3N5anVXSklQeUN4UGJma3k2eEJiNVZoYWUzSGkxcDUvbVc0NGlQdmxIMzIvTDFib2ZNQ1VkNlFCY3ZWeVphdmtZRFJXd1RLbldoUnlscU0yb2p1S0p1TnV3UjlVbFhkZXdKSHpubmhHb2NtbXlCNDhkTEN0Wm9COFd4bCtDV3BWMmIvbGMxQjQ0cnNleWdzMnpyclVBVnhSOWsyLzdkejFTRUhia3Y0SlFvNHVwMlJzNnl1d3pDemFwNTZHVkZCZFV2VE5MS0M2eUdIQVhnV29vTC9vR1o5eGJvUTJDWGFsaUdoNHYrR3pDa3U5RU8xVjJ6a1JMT1h2a3lENUw1SEhjVm4zc0JIVHREN0Z3UjBrbXczdlZTVVRBWldxazlWdzhYUFN4WU05N1g5SzBNNlhBSUlrZk9hdzZvbXM1eldsZ2FMOXRBdDhqb0JTR3BRMWdzWGp5YWlPdjJ2YUl2bjdRbXFyajRJRm5GSWlmOURxUXZlNnZHOHNhdWRNUWcyYnJISVVnSWhXaU5ZSHlrVkJLbnh0T0lMelJKN2ZPMmI2OHExK0FCalp4alpVdU1QbVgvcFRZa211Nmc3TUhiSWdiRUZNN3NYMHdsZG1lYmlSMWVpRHVuODNtRGNDdjY5N005R3BQOUh6RlVvR2pqRDZUSWFKMGRTdHJmOTVpVFZjNVlrOGRtS29RMUlPbkI1eXExTVlwaVZmMDNjb2d5amtKUHhWMjZYOHJiWlplVS96Wm1hVGM5NGwwVWo0dUd1dDZJUzQyZHcwUm0wSi9uV2c0aFo4VUxVWXdFNkQ1SE9YSEdtQWRZVjYwQWpHdlI0RnNML2Rsckg2bWhyZFRPQWEzR2hibHFIV2RpcXhsVzVGakhlbjc4Rmsyb043S0ZDRk9jdWM2L25BWTM3eVFUKzZQN3FIazNobk1PaVFOemNzQVN0ZWovcEZTcVd6ZDFTYk9JNGg1Wjl5YzRhOEwrT29Gb2ptQXpiTE9Vb2tFVUkxQmp3UVVsQm5vR29wQU8vYWpXMiszdEZoUEUwbmRsSDJWYjVJUENzaXlWdU4yNWhrbkQzWldzaEFscTJGUE1vY2IxSkU3YmFlTEd0K1VtTDBHeUVXY2dnT2pPclpVeno2dnlwTUJ3YUFzQ2pVMXZlNTUvblNoRXhtdlFZblVrcG9ybEF0WWIxSFZqQ3c2TXRISGR3a3Ryd1VzZ2U1MXZERGkwNmxLUWRIMFZ4bVdacjVKS2lmSUlEUEJJcjdML0d1SGc0MFpjMHBqbFhFSmN6WFA2NnpodUxKZkF4anNPQ0VhYTRRdGZmV2FqSXRiTFcwaUxEMThhOFFEMWRHdmNyTlQ5ck9VR3c1amRGbTgvdXNid203K055SFhEOTB2ZVVZVWNTVU9wdjJVWXRwc0U3SlIwMm9iajg2TWhGd0lvL3ZoaDMyNDFFK1V0cUpjbGd3YTlJcERxYmUyV0FLMTNraXVHQWdQMzlmSHMwWGd0M2cycDQxdGRQaXJweXJrSnliQk9RTFZzMytFSExmN1RJNEp4S1NPUFJZZnlja3JXeUNmbS9icERGemxTN2E4WEFjMHd6OVpqWDQ1Tjd5U0VnSVdLUkJYQXEwMWUvWUd0MC85WW9yTGVlempKQnRTQ3Brd2xqOWVCRzNuZnc3b0IxN3RPUFFpaUhLaExSMS80UmVnRTZJdWtFMkJTelY3cEw3MVRvV2JqTS9PeG1nT3VXclY3NzAzcE04VDNiNkRZQ3Frd0VSbTFxaWwzVGxDY1BjTFhSeU81ai95Nmkvc1Q2OURHdTN2M1FyekR4WDRDd0c2TzNoNjI2MTNJSTVDeFNuemFQOHFCZkxwNEhwaHgyTDVDbituKzdTeDBVLy9idUZIeEFJQkE1QlBSRGVtV3J6d0lnYzJQSjQvUlk5UC8zMnN2eGtCbzF4RVNGS1liV3FkRzFxc3EySVhVZFAzTnBNQXp1bzN0ZWZncEVvL2FXaXhyL2J6Tk5HdFJQSDdteTJsZTE1alJLTDErRG8wVXNQTEg1ZWRnTVcwNUJOOHpNYXMzeW9UaTBOVm96VzE3WStCVGRFMC9VZEVEZDIvM055Y3dnTWwzKzA3WGJ1MXNSOFZtS1JqcWpHMUxsNzRLUW9HVVlQa0ZvQ2tWSDlaTDFlVnZldjhvWnQvMkZ6eXZaOFFmOW94bkRLc0MvSVhtelBTS0lycTc4eGcxbFcvUFhPU2IwdzhkRytOa2VBcXl1TWdEKzlGUi9OU2RPVVN4UEtVUG1LZ1VPVXlrTkI2TXlJVFQyeHVXOEVDZG80WmMyVjc0WGJkcDFsZGUxYmpHellrSGJhZ1lxTUpCYnZQZzhhc2x1Z2Q4RnNxblV4cTdveDNGK0lRcXY1VkpSTno2RVBqS1RIQUlhc01YZnN6U2pySzE5cWxGcnNpaFFRQUl6bzJPS0p1Z0hRTTN2ejlOWWdJdWFNeFZNbFNaR0xhcGk5YzkvS0tuclg5Q1hIMEp4ZldXMkJSdEdHcndsSEdTd29keW8vTmMzMEFDdFV0L05jakNIMThCREo1eStCTmdNdGREZnhoYlF2cFBseS9NbW02RE1mdnRleDBySjJpZHlaM2NZRy9YMG1zaUtmWVhaOW9ENldwQTkvZmV0cDcwYkw3K1hrUVVVQXRBYjNHMlFFeWc1NW9TaUVYdVdsWnNUdEF5LzdYUTJGQ3JETDhTWjUwbC95WkxaUjJDMGFMVHJNRmYxSU5pZ1NsTy9GRVkrU3BaYkN3N3hDQjBHTWxBVGFCOXRldmhKS3hRWTc3eVRjbW50VU91eFlWRzhQT24xcXgyWHBxZi9SNitRNEJ3NTE4anFlVExkWTNpb1dOZHR1MTlSbW5mRGc4eFkyWDhZOXcwdEIyQ0JWaVgwb2ZSbXljbXlDVmRScXhEQ08yNTlhYUFQRjBUTGk1L3dQYldjMXZscm94WWRUdUVrSG9YVEEwVWdLNy9wTFZPLzZsUGMydGxpTnpwS3UxY2czZTF3MkJCVXk4TTdjVUk1M0V2cHVEdER0U3dKVVhaaTVya0pzYmk5cTZseEVqSjdVSXNQcTVlWU0rNXJCU2VOM3gzVWI5RDFkZjU3a3F0SFdaa1lNeWVadzlDSGdMVSt5WXhEc01vZENLOG1qN1F1S1ltS0hQNTZCMEE2cjcxZGl5a3Irb0grcWY4bnhTUXFYNEZTKzV2QjJvR056V0NhZjhSVkZNcnd5OVIyMTgwdTRqUHJqSVdIRHVoQzhyZlllZG1nNzNyV3A4OXI0VEdoeVUvM0NPUUhVamdtdGMvM1FJVklTK3ZzQ3FmU2c2WEJLOElBQnpVUG85RXk4R1c1a3lwcDd4NnR4dTB3SzdNdXBoMWlLV3N4YmNTZFVkNjRMT3U0ZzhMNXF1R1lPQU94MWVtWGVEcExMM09JYnZ5WmVhMEhtTmI0Sy9ldUtEUzNzODVEQnJ5cE53M0tpZkVidE1tTUh5QlRhU0RlajRqNExYU0xRVG1KZ2tDcTAvSFMweHFLMGJlY3Q2aGtzQjMvV2NUbzhZMngvcmprSEE2dXgyOTQxTHBpMnRicXZQdEwyYW5UY0wyc2ZPL1NEOWdFMjY2Z0xyajBlTmpxZzFWdng0OUZVdHBRc3ptRm5RbVdOU0syVWpXZ3JhTjYyK1E0WENsMmpadTQ4UXQ5VnZaN1RDUytGM2RTcEVBekdndVVWRGw4T0hNTmNuckc5cHJUZ1ZiMWRKZDh6YmlXZlltdEdpMHhvYmFmZ1VVVm9WUnBvdDdURXduam5RN3dGNGhzL21pOTBaVktrWnNsbTJPbzJ6U1NoaFpwZDE3N1lsdGJQK0J2Q0RZdmFqTG1iV1h5UnhQaFBDQi95WGwySWJyeCsrekllMkw0bDU5OStFcmF1cjVtckFIZTNUWFYzY1BickYxZnVUSURIdzRvelZOR09RS3JvNUlGU05WaS9HQnhyWDZpYThBNXpuMjJkVU1QNklhY3k4ZG85K1VCckoxMzRoK0t2ZTBhd2NydE1VWVlkbURORGMrcEpveTBSNk1MTnI1VTJYS2k0dG1IU3lsZFhtcUpKa21xdllyZ0tqUEkvVW16d1B0Ry91cEFocnBJUFhzRDZmNUdaNXB2SXZFSUJaclRZMjVNcWlaOGVlNEtTWjhDV2lXdDQwMm9jdmlRc3JaMFhOUWU5MEFCM2FNdExmZ004c0o5NmI5WmREQ2ttd0ErVjF0VDhhUTFYWkFhVVFtUWw4ODI1VjJqTUwwQWZSVkNjTXZSTFZpK2x1MjEwd2lwQ2VLcUJDaEpQYVVpS2xZeEtSNytXTWRqSHp1eGNoVEtoZWpxN29rMTU0c2JlM21yVGsreEFEY3NoTDZJNnF5dFdqYVJ0d2RpaG5PS3ptVFZ6enVJNUhtemN0dURpVitvQkprbUZlMEtQVWtmQXVWOVlBVHdDK3RscU1BY2J1OCtxZFRzeHpYTisrYlhvNHY5WkdZQ2FQeUc4Nm01S3pkek0xdHRIcUxUOTd5b0xicEhlUTd5a3Y3ZWVaRGhoVkhiSGdqY2hMS085em43eU5rUWlPdkZ1OXdTSWg0TVQ1RU5rU0VjZUw0cEJPOWxnKzhnRnQ0VnVKWTh3QXd1SkhXUms1SnpDbFNQWmxXTzlBWjRndVYzSm01Zkl2YWtTdkhUV3hldGtWbldLSm1PT295YTZpVXVYNXhtYWFoVkJSTEQ1R3o5eWRhaGFoandsbVJnSnl1OXRKZWdWUHFvbThRWUF0aDJLK2Q0U0h3TWtubitvNlY5eDhWblFDMk9QejdGOURENHpKMmRNQjVUeTdwRVNEMDM1UVdPNnZZTmkzS251eis4VDBvNHJKUDFJakZmbGFucTFTY0dhWERrRjRKTjREbC83Z1JiZW1oRGlDSnY4MUNDSzVhSG9GUWY2OG9pRGZhaklvQ3R1b0RhU0huL25HUlUxM29XNE1xZDkvamJ1OVhJOEJoYmJzdE5mT1hiQmxzb0RjSmNGZTFPMDRSZnZQeHVmZlpMZ1JMZE9OTU1jZlF2R25BbjJGMzZGNm5ISmI5NXV0Z2NnRStzaDlNVEJnRUhvZDRkSVB3VlZ0OWpUeC9xMmlOWVdyNmpGNWlKYWlhdHJZb1FycmNybnVyODJ6SGo5UUpmdS9Fb053MWdqRWNld1djSU5JcUpqZzlieXRNZC9wVnhHNUNuMnJSUnJEVHRCSTBTWHphQW1EZUxHMlZ1RFRzejE4NldiSGRVR2xXNG9meUErbkUwNmlsQ2VYTFJHbllraFRHOUpLcjZPZ1AvYmFwWWNtallnT2FFZnJGSHJRYjFORlUrOUF2RlNOeXdTSUNvVzRHQyttTHY1UU4xbFA0MjhONVk1bVFKUXFhaUo3UmU2SThPU01WU283MUExVXhqaitvdjhnZ1VtS2RQNnZFeDNkRk1NdVl5cHhXMUFZQno1SGVId2hOaVFmMHR0SUhLS2ZOSkxpckN4dkRqdzNEWnRGTW5pWVJ6T0o5NUw4MWhBc0VaREdNZ1RZQ1d0eXRKZ3JMZHJIZ0JzY3ovQ0NmVk16eG9VU1F2ekRQb000SDVTdWVSVjBoUGI4ZWU4bzJobjA0VVBLTE9Oc0pHdEpHTW1jcldPRXZkTzBtQVFVREdIYkNndWVZTXFQWHFIN25iRFA3c3hoMHcrU0V2RVVNT0c1MDVGSzdLUmVSNWhlaE9BSEFsUnBtR3ZVd1MyUGk4T21yaUNIN3hJTTNkMjQwOUdGemxYRmtpaDB3M2RqUW1QT0Vma3J4ajBJMFZzZWd2bllYek9sc200UHJyeW14SUJZSWFvbVI5NS9pRGZQWGt0NXhxeHFOeTZSL1dVRTFKV2NIN21OOWJ2V3pkeWp4OC9QODZsbkIzbm5kRFljaGlZVC9wWmhaQmJRL1lLTTM1T1UzUkdJNVFDNmY1MFZkMFVOSTBybjkzRkhJRTROdU5FY3k3bFZzcVk5dlk5WTdyaDBhOXZOZjNGaFNpWWlGQ0ZaMlVqVlFUZFd1ckRmSkwwL1oxUjFvbEJXcVJEOU1IZEJ5VXdjWE8zdHUxSENwWU1XQmd4U2tmRXM0Wk1SSmg5T3lNeVdCVHRWVHlYaERpbm9qWU5nenpTc2xBQkhQWmJIQ0JEcEVFaWxuMHJveEppR1E5NVphelp3alNBZEdVL3lSQU1kdS9zL2dZSFlGcVdEbmRES1IrUUVhaGFDUVRvaEt1NTNWN0hwMmtmdkhSU3NQam5QTkFBWlREWVlOSnRISXBNaUVqWjVoN3hhL0ZvL1o2dWNnSnVOc0tSdEQwUXBQRE5abGNyL1huZGMvZ21qcFN3Vi9NR2o4VkJFTVpYb0NLSllnTDQxd2JGM2FKN0VHK2hmUGowaUlyeXpSZDFlVjhRMmsybFRWeUYwY2hGWkV3YnptWHNtMHViWi9RRjkrU1JKZlkxQmt0clRGKzl5dmtmS3pESE9vcFNsNFZVM2ZWbzZsbVZudXNQdGRyRmNnN3NWa3hIeWMvU3NMbzJxUElCZm5HWnpnWHMvSTRwV0YraWVNWmFIVUhFZUJwd2xiZEl1cXorNHFDWU1aR2N3OHFWeXRFbzFmT1RQZ1hWelc1NHJoeWd5RVl2WWhMbVlIU1lxNi9QRFhpZGtDQy9TRHRCbHVvYzR1dEh0R3YxSmFaYnhjVTlKejZSMUUrRzg3UnNhTUZreFhJUFg3L01CbTF0YW10c2FxVG9zMnBMOWttT2pIQXV3L0pIL1Fqc0pmRmRWWDJnYnV2WFdkbEZWclRpUGswSkVlQWtHYnlHTm1YMm5YMm4rZ0Zvb1hhL2FhVnNTQmxmL0paZlptdXVPemRrbGxBSDVpYisrNXcyWnQ0cVNWRHMveWRoa1lVOEVmVGl4aFNqaFJyVVhjcHB0bVROMFBkbWJmQTE4RG11cTBkS2l3enM4TG1wL3k2WGNicnJqZTY4eHFybFBuRTJaRW5jMndsRS9MUUErc1EwcDlVZXhQN2lrSUF0SmtYRHJyTjE3dnljbnQrZEFSY053VWQvenFTVXZtWmpnMDBLQjQzNEJCS1J4NVE2anpTTnBobG9ja2p3bDJyUDNCYlhRZWxRcmljUFpOd3d5Zno5L1dIN1M5dzAxQllIckk3Ym16M1VPUGVjWUpyeXRTT2R2RTJjYlo4aTJ2VjROYjIzT2c0eVZMTGM4VHVGSXhaeGJ5MWpGK2E1NnJzdVpIRlFxUGs1Smw2bWlyWXU5ZVM3YXdJayt3TG53YW4raWI1dzFzUFFaL3FQSFdSdk16bk0wUHVoa3ZuK3laWW4yc3dZaVJRMGJMcUtUUlBZRGVVdzEyMjRPOFg3MEJHTkJMVGhxN043Tjk2cVp1SXBTa2F1UjJTRmJPNitEZ2t3N2hhZXI2QW93bzdhYkFDMUlmeUhBZ1hNMFJtdW9QREw5S0QrSlZab00vbUQyQnZ0SlptelEyOGI0eThmejdYV2ZrRXZMa2gxb3JCMVM0ZWQ4ZXhpVjFPenErc1JJcUhCRml3MEdqZ2tiaTV0OUY3d3BEZmZ4VWVHRGt1VnVaaXBXTGh6Z3A1L09yejlCNmpKYXJiQU1sa0lZZnduWWdnWXdOSldpMjNoWFJ5ZzZlRUs1VjhqZFFIR2VzaE5TRkg1azJMQ1FlQ2pwRm5kQWc4YVBwdkVKaW1lMDR0SElIamdCaVlITnhPZXFQRlMvWDFLSnJqOTc0aWhHM21Ec0V3RitVbnFKdHFsTStLTHF1bjZabmVjU2ExeEJ5dUJHRlBOUllFTHhpdlRvbzdEVkY4cTBTYnFUMXlFaFhMd1JqLzZuNTliOXdBYjJzWEh4ZWhsR003Vk1QZUhmcGZVUjgvU2NJSk10OCt6NmRPWjBaamtOOW9YN0c3amNnaGlEV28veGIweWNZUnFNOTMzQXBYYVVkbUxQcWIzeURBbktFMCtQRngyTjJoYk9KTTNNc0hZRXlkUEVXZ2tjLzF5ZCt0NHZjQW5TNjgyZXJId2Y2RUEveGUvSW1KZFNSVjZaZVNRK0RoemtiRDlEdU80K0VaNDByK1RLZHFldVRzMENhd1A3NmhybDBiYWk5bm5WcWs3UU9ZZmJ3Y1RlVHIvWXUwVjZrQkUzbEhyRnM0K2ZGeG0rT2VFNURtbStTcXBIdFVxZEEyU3hIbjlYWVBJS2hNYW00L21ZcGIyc3VUTHVvTWtGcXBKb3R4TjZlME5xYlQyNGZKRnVLeVVpUkU0eWFzMHpJcFVrUGtNUUVpbVhZeFRIUCtZYUxGcGo3b2J2TFpMVnBUNlFaY1NsUkgyNEtDUUg3Y3dPcWU1SVBCa2tzZjhQL1RLdjQyZm9YMS9NcHN0SUZjMGI5MkpOZytPNVZ3ZTB0QlBpd0YwV0hweWcwdk1HWnVpcjBvckV3b1VHUWkxaG5PU3ltYm1hZ1hDSjlOMlB0UDYwWWdsbXMrZmFORlhacnlkMGdWRDlNeUtlSklDejB6TXY1RmhhUXIyTjdzcFN0ZDRyS1F3cEdscCtkLzMxT1crMXdzb3h6ZEZHMlFwK3M5OHlUbTF5ZTlmS2xjdmVwWjVTaDlmR1JsS2NVamdwY0VDZlZzTmxNZTJBUmZGU0JQVWg4SkZ5c2xJUmF2bmdaa3FkV2F1SHRnOHZIcFdybTAzSjBYcVhZeUx3MTQzRmJkcDdNSENmSUE5SGMrUU11SXZaeFRUNmFrWW5wRUJSeGZIdHZFZXZkZUI4QldJL3pZK0Z2TDRRSnFGNjBIVW45ZkxXQSthb203R1JoVHR5VHByd1A4c0xBNTZ4dktyaXRGajdUYVlpSCtzelVwcW1PcmxkYVo2REZaVStWZzREUDcxRjAvSEI1bVMvdytuMDhEY1V0ejI4eUJZbTJFNXZKbUtkbXgzRU1DcE50UVlvMnJzczIyV1lZdEFhd016eDBjRFZ1Z20vdFUxSmx4SC9ia0lUMTl6TTR2bEhra1FwcXlESUUxWHZCK1B6ZjlyV3VoQ2J0TnVkNUpmcm5RNUFzQjNGSlNON3BmaUxjWitidnQ1eUxJaTQxZUN4L2hIMGVWSkwrTTdXMC9hT0JBbHBpY3JsQytSNS9aYlBhdTdWKzBSbmlXSEJrU2V4N3pDWkFvbktoZ1RMbVhsUmZpNmdPMUZFZG9mVE9oVG5qNUFqMXN6SExFdjRIU1RwS2VoWGpmRWRGZ2kzRXorNjg5bDF5TWdIV3lGaGgvQkxWaFVsdzJHZ2tRRlNsQ05LbVBmOW9NMUhEZjRjajdKWFFCdVRTaVIrQjBBUTgzTFJPVGs2aThRRWRkL2JBVXFDREJzOHJqZ1hsNnlOOEtQN0JQaG9HVUNhVDl1UnhLNU5xZGVoQk0xaFJ6VEt5MHlCeHZ6czNDRWZHK2srWHVJNHNXeGREalZBVDNIV1FybExwTGZiNDFlZmdESEswNmxQWDVmOFJIc0tqMzRhdlZ5K0JjV2swNVJxWGJXS240Q0FnSURubjFRQTBkcDhiZ1VoeGxTeUFHNHBMb3JNOHRPSlQ3K0l6OVNsQXhFSGFRWk1mMElWVFNhOGNKanJvb0tuUDFZc2tsbVNjcmdVdEpwc1ZwUTVTV2FvV080bnFvV1lFK2ZzWFJzaEJpQ1dPT0JrODJrSm1hSzBHTVozUDNiRTJQVFAxQzIvRDNJNCsxcVBOT2hNTnExOFFxc3FDcy9hZHp0emZwdzNGd1NBSzhjMHdXRHhUbE84Mld1NThUdmpYc2lpdjJmVXVhQjNJcUJ0akVvcjZqRTNqZDlGUGtHdmR3WmN0Tm5ISGozK0RBSkRoOERFemJFUGh3YUV2VVdrYUNaTXlvaW5tVWN5Wkd2WG55U09rSHBURUZpK2lzY0tHQ0dRdmd0djdTMDVEWXlVbVBPVFVZWGxVVnRNUFE4QVBLekxDMGdPdllIbzlFdDROUGZiYXo3MDJkazNZWno5YnNwVkVqbXkyOVRvTDRLSHJ1Zm0zZElKK2NlWkNpL2ZLSEZWdC84R1crQUZPekJ0YVdYQTJHYiszWlFJRTd1QzNIYUp2b3AvNE9PcWk5a2xxcEpCRXR4enVCU1k1eUxCVEJYelB2MXpobm5vQnUxQWhVNGU1ZmtBbWgwQk9jNFppa3dSTkZMeEhsZTNjdUZEc0NJUXpxcWVnWCtYcXpFTzlXNUVadytjREUvZ05rM3FGclpnY0h4dCt4RzFwdmdRZThlejQzWEV3MkZkWlkxVlpRaGMyS2owSm1TUU5KY1Y5WDV0Z1BnQXY0cFVQdW40NkhFQUJXT2p3ZTFJRGRoYjExN2NoUHg4MEhVYnBWTTRHUlFqOGY5S3JENGNVM2xjZGFTSzRubzR5a1pNRnp1eVFqWHRLTTdVWk01d2tJRkZxU1hWTSsxMVFoa2x0eWJXOEdDQTVONFRrNVg5U3RuWmhNMjN2ZWF2aHpYTXdGeWtkNzlYanBEeGNNeE9sVjA0SEdNUktQNUJCUDRzczVrTHorNUJZM2ZISkxlOEl5VnJOQ1pXc21HZUgwMy9YVFpPU1M0Sno5cURpS3ArRHpWd2VGQ3JkTURLVkZWOGZ0UWptQnBBUFY4UnovSmZoOHBVYnMvTFBoeGpxNU5aMXFkVXpVMmdvVHkxZDFlc3pFSjBZWlZPR1BzeXFHZW4rY2hvWnpsbVNWWTNJMXpuMDd6VFk1UXZFdWVYNEx0QXVaS1F1cFBzaExoWFlxeHRyMDhSbEpDT0Z1ZHg0MWcxMEVJOThsRmw3Vy8xU1UrMmhRWGZLOGl0STZnSGxTb0tRVGpoZ1E3Njh1WHVVMmhJYXhsUmg0ZHNxVzBrK01Ld0t5SU8zbDZWMTJRaGpEVXhKWmh1S0N2cVVYMFgyNTBYdm05N0p6L3lrYkNzYjFIVkpTQnk0a3pPZzZYOGRMKzYwQ29odXlPMFlqazBweFdBbFh6RE5QRS9jYlBQb2NIeU83SjJiaFYrTUpTYjVmb1doczcxZ3pRbHRxKzF1cW9FVTZYRE1MMllXRk8yS0VEN1laZGorTDlNREt5LzZGYnFlcVZjcmtBNGZpL0hQaW5FR0d1TTBER1EwamR1QzloYURZSHN0d2ljSzhocHozdXFvSFZXUDVvZzdMVzU3VGxnYWtvUDZJeVNqV011a3hmK3Z6M2NWczJiVnR2dGFTVXplRjNmSFhxMHNSYVNNTWp4VHNLdVNJT044VUtsMjBzYzB4RnJrNW56NlYwbENSTmVSNnBPV3lvcS9ZQUdDbUpsc21hZUZWaFhjR2dwaG1xblY1UFRCMVBkSGVUcHNuYnNtZkNqcVlIOFlvU3dod2ZNbGVTVUhXZzJYTWpIV2JaS281R003L0MrVEpzU2FscVNGd2FEZ0hGVjZlUlh1ZDBzM1hOS3ZOUFp0QzVPQi9GczBIOUVZMlpEZ29BZUFnWlZVTGdpTktJYzNFenRYNWVmSTliUTVEV0hPMDBkVmxFaE1IWFVRcDJKSmhGaGc3ZDl2M2UwUlRoRENpUU11Q1pUY1pGQWZHSGdZaGRyd0UxRnEzNk5wOTIwVU5NTkZmU1dNUzVBQUpoRFlDU2dRWUxhVzFzM2RiZHNJWXd6dWU5SFJnb0M1dzYxcVVUdE9tb3VrYlc3K2VFbDdzSDdWR0dhOTNoOUg5Tjk0ZlVZTS9FT2p3cHlyZUhBRlFoS1pISFAzc3FoSDIvVXlDMm8vZnhsYndPelR3K2JrMTIrYysrSVZObFBldjZmZHdjV2dxZllQWWdWMEFySTR6MW96Q29HWTloMVVHT2wvNEpLeXg4Qy9tV3laK1JMUmQ2UGZMTEMwcmNMbE02RkFWcUVlM1g0ZFdkcm9xaHBNQWdYZWlaSVoxTzBESUk0WjZmVDdKb1haVkNCbUxRbGhUWW1abE9JMnliSDRhRGptbGVKZEJmMGgwM252aVFWcWUydExyaTNuTlEyZnIrY1VDZnNYL3lNaU90dHFCSk0wWTRpWEV6MjZxKzJoTVh4MDRpbDBDVmw3TFpZWVp3Nk5TWlp5clVJVGtscTA3MGdBSnNjV204VFZrWW04VXZLSmEvenRCVTl2ZXgvNjlkK094WTAxaGcxbExjaHF3NVRqbEdyRUJxV3NHbjVRdVVPTDFSZDVYR2RZSnJ4NmRVV3NwVDB0L3RtYnkxZ3pwaE81TkdrdzBDcjBNeDVzVm5wK2toVDlBUW52MWkrSXp0bkxzS2x6eUZjYWpha0FnbkhncFlocXhlSGFodXorSEpKQnlsNVRYd2l4czdpSGxJbDk2aVlYbVhlakFONlB4SmpicWczZU11b0RVakkyT3IxV1N5RmRqWk9Ta1VoREJHSUZ6M1k1ZzZvYnJiY0N3Yk5OcmhuNzFzakZOWHdWYjFZMnk4ZWVsRzZFTFIvT3RSZ0d6OFNLeTg5N0l1dEVOTksvbXFtWWNPWW10WU5ZUHE0NzVZa0xIK1ZNSjl4VmlCMTJ2VnoyVVBkU0QrYW9qenBTM0tLZjhpYS9JMTdVTFY2OTVIcUdZZjFFRFlrSHJXQnh6S3R5SFluMGlaNDRVTUd5cm9GYzQ1RWNKUnRNQkY4M0duTlkxc0tXc1JOUm9NaTk4cnI5em9sK0ViTThtNWNodGpFMTBrd1RJallZbUdsTTZ3LzlWS3JqWnhlcERKcXNrTmJXMURtRnI1ek9pNkdHR0s0V1pKYzdnNkZ4MmZGTFh4WTFBMllkZGNnZWFoYjMxdWVOUDNNT2M0eGRFMjFOMmw0WHg1YmVhb2E5ZnJrK2VHWnh0OXNWZWluL0JUQ0s2M0cwZTRzaUJhUXZkcDNpNk9kNWVjQTJadnZnWHJ3MmdpejA2N2xqd3N1ajhmeWRTcmxiZTFlZzZDTkxsdG1IUTBnQlJpYTVUQnRpdXlEb1RzS2plV0x0UmY5eDBvNVJDeWJ6ZU9RK0FmdHB4WUEvMXpTL1JGVnZpeVJaY2ttbTNRaVpVSE4xR0xqaW5Jb0FWMlg2TWlnMGVkR1h5YjRWRU1VUG1rSTBsVjZDNy9BWk5EbEVrUGJCblBzTE9zR09pblhFT3VqN2hhQ3BLeUNHRHR2cURtWXB0a1YzNGVmeCtKakx2OTBRa0t2bzZrM1lCSmNBUFNMd1YzOWc5WGhld2JDVXZ5eEtIMGFNbGo1SHprSjl4UEZxTmV3TWRCVWVJc21FSkhQMzc1ZzREVkFOR2JTMjcvdVl1ODR1VWFsdC8wLzA2RUlnOUs2eWR3cCtDeGpWUWtRNU00c21Oai9LcE5TclVGdjZzN2p3YmVUcmdSdTU3ZXhsNHpCUFJFajdmY1lWYkZQamU1Yk5IT3J1Ym9IRXZxZDJ1aU1ocm0zaW12aGVnT1FaWE53K0FwWXBIUUMrN1hoNjdGZmRUZ043NVRlZ1Y3YXV0bmpxQTZLSjlxM0I4NFBtUjZjNkE5cTBpNFlCc0RPU0NjbjNLa0g0UlFOWTQ2UU5pbzdlQW5lSHVHQTd2NElKSjlhOWNvN3RDMno1dkxEblA5SlN0QkFqQXFMZGpzR3JSMTJhSGdpR0xkQmhJTHp3dmhUaEhoNDZUM1FBOFMyOGdlSXhZb1JQdGNDeEF0ZGRKeGpTbHhRMzJWdDVvMVV3NHlTYXFBTjJ5WTIwRWFwb0FVQ3BHd0lDWWNuY3pCb04zaVowN2g3WUx3dm1xTU1JRWNwU1EweDg5Mk4xeDJoQnE2bXgySTFIN1VhckRZSExGREMxLzlrYUwyalFnNDllU1RPVTNyUlpTTE5tSWNLWWlRd25FL0NzQ0Zra0tnazU5MTV6b0VkQnlreHA1NzFsakFEVThnNVhMYy8vcEdFblNPY0Rpb2F2bWlXdHJIRXJJdHJuc216Y0FqdEMrZ3RydXUzT20vL0plcTQ5Y2poWG5UaCt0T0dLc09ldWNTUkFVZ2UwRUdqK2ZxWEh1dlQ5K3AxWVZqMGd6aEpTNzZCbmhZcktpeHhuemVOaVpvdWtPalY2NUZ5L3dHZmFyb2ZUTHNnRmQxMWh5VGdpOTIybUl5RUxvS2syNXhDanNLU3hadWRpMVNJV3hhVlBuVGF1RVBLbUsvT3JFQkpYM25oSXhkR3BLTEw5WkdsaS85eUJKY1gxc2tkQ0M1TEl4UEk0NmpUY1NhM0ZqbERJMjNlbTY0cGs5dFhKM0hRcnNwMlhGbnpxeGJpaThPS2FwTVZWZTZqRkN4U0M4Zmc2NUpBeVBvMXlBUDhiVWpZKzNiL0NUWEIrd2FsUkVqR29jMHk4UXV6cDJ5VW9MdlJOUnJDcjBwcmF5YkJXTWJScmJSWXd0ekoxYm5vRGIzN0pkNmVNRUFsMlJjbGQzZmdKc3Q5MWpNbVJoS0ZOR1pkTXNWcloxMlZkVlN0aDRBTHA0d3p4ZCtFMnV6U0k1RC9BT29GS3lHUWdvSGdPVmh5YitoVGJ0aFRvS2V2c05QWE1KZ004VjcraGIrbXoxLzFsRjVyRTlnRHgyZ2dCU3ViRWtESDgrVGlyelNEN3dPMm9hTk5CV2NwQmo4OE5reVRoNzUxUFNKNWZLbDBhaXhjcXEzMmdNZDlEVnlkRDJOM1FxNXhWMnpRZ2dXTEFpdkcrNmIzbmlXZWdpa0swRi8rUkpMcGRGa0w1VmpsYXV3RHdEYXoyR2NlZlhFa085bjU1N1ZwbXl3V3AxeXVqamdrL0hOa3M0NzllRVhveFBGQVBaYVRncDRJdmRaWDBtQ2NpRVZUbFpUNFJzREJIb3VkT3I3bnAvbTVtNFdYc2tGeFRuZG9NbmFWNUkzOVpTbEh6b2ZzMlUvOEZyNnlxRyswMCtzc08rdGsrMjArbjFGSDM3ZEsrMWRBbVhvaXdCbUZBbHNNb1JsVmh2VktaV2tibUdXR0gwSW9uYVJoSDFFTjY2aEpZUEdPbTFKNzRRUTBYbmRnMXBoNGdMYXdtR2Y1VjNJUmNyM3hvWHFRelVwNC96KzlJT0Y3YnJGUzZOS0pKb3RlVzBXNjRGT0l5YWpCaWNxNEd2VUpxcTlXT1JwRkhRSnlaY3o3cUhHd0hzMEExK2JoVWZvcHBoaU1EVllldkpJY2dHZytGM2o0dVZPc2JaNnJiaER5Sm5hRE95K0p3dURTRXRQL0h5bGRmZzg0VmNjZVE2R0NMWkl6bmhPUGJVTEtnWStXOW1IbU10TTNFMHpyVVEweC9ySjBGK2JVMUl3UzZ3MXBFSWlEc05jNm9VY1UxUjB6S3JHZThYNisvbkxJejltcklhR1IxclA4eE1HOXVuazgyMVJWZUtPWkgzUmRGVGpUVlpiY0NKUnFsc3Qrb3ZOOFQwRU0vajM2d1dJM2U1TGNTWmRaU1haM1QyenFWSERGc2JXV2lBOTdwWHhhZGViZ3lkQVdGTHcrdkZTaldhN1VibTFaeFZpUzZkSlNFR1JOVkRiMWhZL0tCMFgrbnVYUmNveEZwOENucGtYUzFOdzNGb2FRM29adVpWdHo1ZXV4Y29Kei9TWmMvZHJLT0Q2Y1YzajZuY0doRkppTVJzMlQ1S3p2dE5RbzIwZTdkL2VuSm1IZ1FCNlkydmtIbEIxRFYvcWVZTFpJQzBJTDYvc0dLZG52bnZ1VFdIaVEyRUN6VkJaQkZ3VGU3UGs5VGhlZ3hZNFlNQ0w1SFFpei95T3hHTUU3TkR6S2xadlo3dW5rWDVnMVlwNTB5emQvVTJmWlF0T21vV0dFaklVSUhqRGlSaFo1bVpqYUQ3VGc5cDhYd2x4V3cyR3ZJT1N6YS95anFtWFpQUmFtbWIzZzZRWC9XeUpTV2FlWjVwQmlIZ04wTXdDeXlsMjVFY3hGZ1hsKzRHeUs3RGNrNVgwUW5yelhwYU9zb1JNb2JhNWNvQ2JneVdyaDE1RjZIcU5vSTJmNmxNYUM4OCtrZWw2cDdTd08zMTFwelRoaytrZ0xYQjBMbkliUUd5VUxIZG05dys0VmNvRXhWTlIvRm5QaFljdHQ2N0c5ck1oNnVORUV3ZVNNSlgxeFg4Wi9DK1JXdlZ6cHVDekc1SkJ1ZTlOaWs2Sjdyd3hLZVFPdTl6c2JDZVY2d2MwOTN2eWtOMHZHUzRmL0xSeGduMjhIYmJWMzRSenFyVGVHYnA5dzIwVmo0bnlaSkRIWkJpa21IZFhjalEvYW5OQXlCWkVLVUZ1VFpyZWZScTlZMXJpTXZDZkQ2OE01L0RKZlpoM1ZRRlFGbzdLSTArQlRSUnJKV0VuMm9jV2p4ZE5MMlFGdVZnK2NEdm9vWS9DdndTK0lBMEtxRDdsOHRldDRKcjZoOHFDODlncDNvdHRnaWhQUzJlVUtYWWhRU090dVREaEJNbjZVWWZMYXlZY1BPZ2FDL2sxSlRrMW5OeXhpWkRLNTBjeXI4V3AxTDVvU0ZCVllpVFFTM2ZiS3hwL1VvemNzWHBlWWxHWHRMVGdhcVcveHBZeDIyQWxnMnlGeVQzZFhjaitOMVZwVnRoM2Q5OUFxajkwaWpWS2dacWFXUE9vVmZyeUFnQjNWcGhvRUZESjVFejZoeG5veXdpMjhMZWhKeWVtY2JLVHcvTXdCN0xPUmwwMUhHN3ZKNG9YVXQyZExVejdab2wvWXhZbHl1UzlWMWt4bFpRL2lZbDdNNHJpTkRRSXc1NVRyV0IxZjZ0dGsxdGw1bkFTVjlsdHgrU2RkRVRPMVJYMndzL0ljaG94VldyYTdjRW1WNW9la3N3Z1IrOVdWNjM5VTNqZlJiMnlTWTJPNy9vTC9PbFk5N3hLbURHSVpNZWhLczNqbjFLV08vWjMyVHZXWmJPUjRHanRneGh4bUV3WENsTGloS3hKaEVSdzJVMFFVcmZyR2drcGhwbkdGWFU3czhCVUJnZXlhbHVyUlBhTEVxQjZIdHk2SWxYaGZ1ZXZmMzM1bVo4YnFTTVRLNzg2SkU3d05KS3o2aXhRWWgzQzczWEh6ME53ZE5xTFhoNGVuZE5UeUtCLzhnQ1VBL3JJbTZUVnhpUE9ySURtZXIvaGVEdFBrbUpxOFI3N0V1NGN4aCsxWkFoVmQrVG1NTVQ1WDFkTXpaQTFMOTBhWWtTRUNxWUZOR2ZrMlo1Zlp3Wk82VlJPUmRMUHNNOUtlNUxKRDhEaTBscFdpUkxuY2RsSzFUY1FkUklIVjFLYzhhZHBGZktLam5PZVMvRWIxWHdIdXJVU2RDRWg2bzl2UU9rS0hqSEFEN0NUbHRBVm05STZTczZlYVBsbjgvQ29KdjVNTGNtMUk2YTFPbm8wbHRoNFVDWVdGeXpWVEZBZGxTV1l2N1pRMVF1aFBmSlM1cE1EY1hkc05sWVRvVi95MVZKc2hmaThnNEpDWlNXbXFEZnYyKzZEQWlmWXhiZytvNEFTSUlvcGUyVGVqT2ZxaG5vNk1wbTZLZEUvQTVsbytRalNURjJkSExwaVhmbFNWRlJia0FpWDdOdUxRa1pEYnVtb3crTnA5aE82OEx6Z0RoRm91SlQ2elcrb0pRNXdsTlhqMCthYnpreE9VMHZibVZjTVd3VDk3eFlOSHdRSFFLM1F5SGJBdEh2ZzZYQzFPemlONkNaNStwQXZRNC84d3R0K0tPOW9xMjRPckpLY0xYSkpzRGRyVEczQ29HZ1FTaFNEY0NTWUh4eE9ETFFiRFJObEpsaUNwNnRKZVFGNUlvSHF3WWZubmoyUTYrNk1sUHRneDdTSWs5RmFCYUZodmkyTXplbnN1N2RsanhxUDhKbnZMRzVMSWJVclVDUHJYa0VhMTJXRS9VYXh1SHlqSDBMeHJCVkR5ZWN2UWVncmtjSnR2S01XWUhOZWl6NTZ4ZWdQZ3J3OGhJNFEyVjQ2SGt3eVV4d3pqNm41N0VGMUMvVEFzY3g1RjhhVnovaWl6eFZMYXYzU3hnS3U3dEdmTEF6b3FKbFNKQmRvZGZma1plTElYeWpEZXBZL2MzQ0dwNVFCRlN0NS9pVUhxbnl0ckJPS2hFYmdPci9kRFEzNUZRcDlKNnBuWXpGSWgrdDcyaFZHSElJeXRIazg4V2xDOEhnMmcveUZvdFFvcVpMMjB6U0JRQit6TkgvaWVDc3FJVHQ1amdTUTlNaVlJaGRHRXdjMjRHQzIyWDRVQkJ3VW5sbldNa0xUY3ZIUVRIVGZmT2wwRHRZSzN2QUFjSVFEYStYeG85MUxkMGtPVy96Rlppa054bFRFSVRVN1djL0tybHo5VHRMOExScHY5Y3IzOUhqTTBtLzh5MVF2TXAxVnVybkxnY3lsais5em11Wm13ZUNQdk55OFNlMDFFd0ZNdTc1bkFLNjIrZ2VScEVxZHAvTlRSTDQ3V2pQVHRoenNwZVJtT0R0U00zZDdiZ1RxTGpLUWM1WGsvNUdIdWRTUmlaM2VPL3habE10VXNrWDdpbmZEOEQrQ25ZVzJOU09FQTlsMVFVcjFUbWJXZGh1b0FXVEpvTjZkUFpNTU9xZ292ZDZFdG1pZ2VDV1lLY0c3bnFXbmtLWTZoZlRNYjZPTWFFakRyR1Z3T2FvZXJBV1NwZ0N0Z3JxUXpHYXpmaGhXd3JKYTdtTGNIZHUwYUZ0dDVLNjdHUVJqdEJxS0JveG1BeVNBZ3kxN2Z6ZFFqYzhXdFRRNkQyOHU1RWVOdzlDYXlJMTFxN3daaWI1eFdyZHF2SEpNcGV0d1NyRS8yWkh6YXJBQ2JPWTF2eUtjalJjb3RtZ0pNU0x0eTdWZzM4Q3VkOFJQV3loK01sdlAvQWl0b0YrOFR2S0wxZnM2K0pSVTJkQVhWaThUR1FtUWpaS1J4cFVBc2M1cEhNOEppWm16VkNNbkkxRUZMclZUK1ZCQ01idkF1RkRNckk2cUV1WStwSWVqVXFhN2tNQmMweHVWZzBwVnU5YnUxQ1Q0RWhVWVlWMk9MNGZ0M1BXejlpT0RadkNOQk11YjZHNzhVVDlJajRtZXhNVzR1dW5DNHZqZnprMVdyQ2d0NkpXL3RuajV4cE9BSWJMUThhVS84Mjd3ak5zSmZaMU5aRzFGUUpGdXpxTG02aDNUek1relZsNXFGVUhEMkFWSTlSNWxuV2hxcVVZWXlTRm5XNGN2c3NhUnFkWmNsK0hFMjEvUDJ0UkhqTFhtUjdndHhUSXpGcHRUMUkxVjF3Ky9DZ1NlM0xOSGpTNnFZTlVWbEx6M0RNRU42OUt6aW5GK3J3RVpzMGxLTUdOdThXRlZQb1FDMDNLUzNWS3dTN2pQdXpraU0vZGp2L01XRzl6QjBpWnlXNk1PdXF4SXliZ1dTNjdsazVyZUtjRnNLTk9jOGZudkgxQkU0bVR1Vk9uRWlMd1p6ZEpYK3JGYlFpRGpwUWN2SlN1aXRwQnNRTER2T1cvejdqdDQ4RC8xdHROc09NbTlEdmRiV203bHh0aHgycC9iMGd1UHkzOEJoVjhoZ3p0YXY3eFFmOGVPVHJJbWJaQ0ltQnB1bWxGallsRlkrTkYyK3lza1djdG5XT2h0TTBUcHAyMy9JNlpWZGxINmM2L1RLN3dhaGZxRW51dnZYRWdZaVlBK3FnVjJnT09rQ0dNTGJiYlpraDZSNEpyK1lXZ0JYWE9yTFAyRENsbmdPRUN4UHVjNXpCRTN3alBYQ3pGd2YrVzRrQlg5ckduQlFrd0VtOWtITEUrcnorcU9SdnR2RXF5RW1PZjF5RUFseU9nVUU5R2pSdFlXbUw0VU5QSUV0aFUva0kxMGk4WHRZM1NSSWFGQjVtWWR3ZTF6WDZQOUdrKzJ3T2R3NUpVZ1Arako0UlNSZmI3clhzYk1RbW5lZXdIKzZBWGZHQ3BMeVYwamF5dm9FdW5aOEkzTEdiZjlSUVZ2Slo0ZkN2eWwvL20vRDJ1RWxuWlgvUUVLV0VsTDlDWWU5dnhpeERuOHZaUkk1bUVMOUs3YkJ0UVdVWjg3a0N4QVpISmNveEFnbC9oWDhyeUF0ZFM2ejZ5VFdkcTFrZG5lUmlKNWpCdGxJalorcnV2TTFEN29OQ1NWTzFGWFVtVmNSQVlHUmEzSEY0Y1lTMThIMy9rMjFzN3VNRnByOVlsNktianpiZHo1cUJrcjZXRkJtTWVTN2c4WS93RU5IWUVqUFVvK2JYZlpXRHZzcVBZbEZXc1kxbEVncVREWkNpRExnSHFaOHhEV1FoTW5ib2RMZDhud3h3dU10VmNTVlp3V1REdEFWazY1ZkJLaWJoMWpvUHBWZkJnM1Z0cE9wZThjT0VqMlBhRHRFaEl2ZVdXREs0cWxmaWlTOEIrSXlHajJzdEdMVDVBSXlrQm5aVmYwZTJyVGpuM2FHVWdlV1ZFVUZMUnRiUjd3MitqYWtBUHUzblRSeGVWWlVxbTJwU0NiYVhtWEtHc1FOZm51OTZ0QytxNDcxMEdlQUhOQmF4cWFkTkIzRC9XMVlnUjRiQVp0WWJUWHFwVCtwRHViK3c2VzdPdStSeEZWSm83bjlJcjUrM1pIbDRuM1RSWGRid1Bkc091NGlnempyNExqcXBPTXd4MnVpYlgxTDRUWUxObkN0bEZUSU05Z2NHZEU5RERCQ2FjUXJBTXFWWXp4SHpFaSs2VnE3UnNMYS96SU1xcWkwa1ZQZkJsekJRZlNKR2wwOGd4UmxQeU80dW13empTd3lmNTVFR2QyenZZWm1wd2RKd2tMM2pEVUpwaWFMZCtiakJ5NG85WHRTTlh6WXpTWkJ0RzRsNXpvUWVLUFNhL2tBemVoSmdNN0tOOVNoSnhKQW1BRmhzZGNrUkdiYWVESWZpb2VoRUlFK3MrMFBoQmtyejFZV1JaYWtBYzdMMjZoTGNMTjkyaC82aXI1UDE0bG5FWHhGUDMxakVkektlaHNkK2pMbEI2N25RVlhNd21nM3M4TE05L2xsejBoRzJ2WjlDbFFHbFBFOWRMTjR3d0VmRS80Q3YxRUVBalhiQnRqUzRldklCQW8rQ1JmWEdubnNrWGtPQjdLR1pYZHV0WVd0eElla2pqeHFsQkd4aTFnMm8wZktNVFVrSmxJc015dUZ3cWJnSk84eVc1M2x4THF3alIzTElib3FZVG8rR0cxUFpGTDd2NDlNKzFhdzkyR2RhMG9nQmdtVGpwTENGcTBJODQzRXF1TzdRNzdUbVJsQWhrdktmUTNZaXhNcDd0UW1oVGZKenduODBsQ2pDalY2QkdrNFZBNkFleXhrWlF5aFhsbjd6eTdpTXFoRW9ZckRPOUhVQmZDRG1ZbUNUOUZzSEFMZE5SczhvQ0FCcy9HNzBoZk1WWEIyYXpHeFdkOXdwZzhLczdsY3Mxa2xCVHhFbzliVVZUMUhDek5aOG5WV1pIbGpzQVZXbEJlRThLdWo4T25rMVVKNkFzZ1o3bmlTUWdkMmtNMmJFK1BuaS94UTdKUUtKMDNnNm1jOGtadnUxbkpuSzVKRFdIRlc0QnNKb3dBTi95cys1K2ZQWi9pUnBVdmJNZEFqekYrL1p1U2REQlpsTFFVWEFKM1dENFJjYUozbG04enpVdjk4VENjRGdsU1NQd3AvZkVpRjZSbjRPL1FKVFEydVkzTWVBRWs3b1FRSzBDRnhXQ1dibDFRK2FRaUQzQzNoQysyenJyL3gxUnN4ejd6cHRWYm5aK3NzTHMxUEpya2ZRNXFmWVpEWWFkK3RrZlFTRDh5WVVyRDVSQ1JPNW9VUUZVRXlXWEV5Ny9PN0k1MU4xRUkwb2xrZ3YvTk5JMFZnUzVpeG9kd3J3SEVraUhZRmphS0Z3ejRTblFnTDJlVEdPeldMS2RqdDJxd2UwcWdCRExNWU5FQm56aXp0TUFhby9IUEZjdE9OMGdwQnEwa3JwRE1vVEM2d1QzT0t1amtXUWhEVDRuSDJRM3I0VzZhS1ZXNkR1cHI2N1ZkTWd5WVU0eXFWbklrN1NjamVxV2twVEhpa1ZMOFdTaXY2cG90bk1qMExiTDhGb09MQ0dldTBBdGVJSEJtckh3cjkxRnB3dTI1SW1vTXpBdmdYNDF0VFhwL3pFSDc2Rnp6NnF2TVZNTWFmVXBPdFVXZEpvTGRadnE3Rk1mYnpHZDQ3RTR6Zk15ZFNoRE41Uk5GVlF0ZWY3bndYSWRzWVpYdFVhWGdNSm1vaHd6aW5UWnpZZHh4WUtZK1dyVW9ISTFFRDdKUlJSbStEM3paU0l0UUZDWkxVWTVmVXYvUm5oVUhTb1hRa2t6YlVpTDU4UExSbnVrZmZpWXJhRE1vTU1NSFlLc2hiU1lNd0Q0bkZCVkpNbFFBOHI5czFSUTBDQWs1Rkw0YW5QV2ZBRittVkw0bFNMdzlwdC9ZODE2cEtOVENGOFlueU9heWZEVHRtVktpOGxrVFFKeVhZOHVoa2lHVHhXZ2YzdGhRbVAwWkt6ekxvTDJGa3paeC9iT1E4d2JpSHJaWHoyWVIrSkM3eHJiRDloS0NuRUt5SCtWTnBBUnFCQk4wYmZzWE5LNEFjQnJIaFMvTnlnM1czL1dIRXNZeVFZd3Zvd0F0ZHd1SFNkS1paOU9jRDRHS09icWFRNGhCNnFjUmdNTmk4REtST0VwZ1o0bmFSRVpuWWtTY1dLTitlRHBwWHJleXJPZDVKc1F6VzlOYVpqZWZjKzI1cHVsRGZMMUZDbW1CVC9NcUtLckl0NzRTcGNOT0Q2RTdvQUplYlkzRDZPU1ZCUVhVQ0oyZlJyV1k4N3NBQW1MYnhMd01SZ283djgwb3pUTVorOWdpMWFuVXJNRStZRzJFY3RaVE9PMU1lQmh5TFN3V0Vjc3NvejVhaFdRRjBtdTJvSFBXOTFSa0R3MVREVjNrS0N1R2lMaUdDV3BrZXhJVTRsNG40cjFkcW5DY3hlY1pVbE9ObW82eXlXdGloUDBTRmRibnFlRDcyc2ViRUh0M01CdFhQOTJqSngzVWk4ZmpybmV2TXBNNFBicmI1dGVLK1J3R0lxU0NrWFhaaUp1SkpBWlgvRFJwVlN0akpESytGaVYzUStMNGk0ZE0xR0VjWUxNeE00ZERORWpGeStFK0FXaEdPb0tiaXByaU1XQ2l4QWZWRHYzdkN6SmVYMXN0OEhwdjlkWWVCaGJXUmdSa0k5OGlvU1psakgzOXF6MUpEbXFRNzhCbHAzRHNPOFZwR0VHb2ZydWE2OGRwY2czV3ZpcjUwT1dlNFBXVGVHaFo1bjJlMGNZYU15YTgvTDJwQ1pma2ZkbEFKUVFUTlZIWkdha3pCMTB6QUxOY0RwUlFjdzZjaGhDNlMzaWx5ekQ2d2VIK01MbFJlMlhpMXBBTzYxWDZncEUxV2NjeUdzZjhlUC9RUmZlUlNBcVRXL3RrZHpXckQ3NXB0TmpBTDR3TEs0SkJ6cENTYXE2NnRzNVlpelhaVkZRZHVjUlIyNUxOc1g5bEsvcXJtcHNiSENBNmwydUE1bDFqUkp3SXZmbWU4WC9RbWcxOHAwYnAzQ3ptQ285cS9PMGVDak5JV2ljdXFQMy9LaFlYTStBRWJTcWI1UDdGL3VaVGhFOVZHR3k3REs3NS93c2oyMXRHMHFkS3ZwOHdPT3MxaUF1QjR5dGNlTXdHZUV5MlU0VWl4ZUJSZE4rWHJ1Nk9IeFpIdytQS2dIVGkzMkdLWExZekhjT0VYejdadFh5Y3RNcG5VWVd5RE5rcHpIWEM5enIrK3FpMUZqc2p4dHAxU1B5a2lqQlhta1dyUVhqVkowUmJFMjY1Wk1pMkpiQ2ZnVmtQa0RLendwZEFhNk81eUE5YU9oY1U2c2J6MDFRcU1zNVpkZmhuZkEwblRMUDJuV0tVU0tHQms3RGRrYnRVancvbUQ2c1FxMllBSTBESjR6L0Y0YXBwZHZ1RFJTNjU3REU4Vy9qdzB0T3ZaM0poYzJWUSs4b0E5L2V3aTRuc0FHNTNoZnZXZG5GSnVmbjIvU2M0bHZkWjVhR01CY3pzR1B6OGxIdDNJK0VMemlqK2hmOUd5WHVvQnJXQlVIYTAyQmx5VmsxcEMwSnJybFBya3JIa0wzeWxXbUtwVkx2NnpXMDlNaU1VaWJ5bHpmd3pYTGZaamh6dlBYdEZDeDhsUkc1eU85d0ZoZWl0cFhacnhGRTBGaE5rMmxMZEp0dStTN1JjWlpMTGlBQkxNWG84Zm92VWNNTDhjQjkwSG5CSDkrSnhrWGZIR2N6WVBZa3ZJNlB6VXU5SmlrT044dlRBWnlBNWM5YjYvZkhFT240WDhyZURnYWIyR0c1WGFCVVFlcnphci9teERUb09xVzdEZ0x2TE1xYXNnYnJaYktXY3I2SHh0NnJrY2Npb2I1V25ERWR0UkJaWklyT29xZ290L1k3UXdVZDV1ODAzSHplOWVSQ3IxNHY0V2twZHBpYXdqOFkvaVBuQXZaVVpZS1lFcXgySHcvWE9aQy9RL0M5MklBcysyMjlhTytuWVhsZEZIQmlCbG5pN0hWbjB1Nk5SVVVEOVlRSG5yMnlTV3huSnYwRWNDckNZWVByYnN4SWZZNU83S3B0bk50TTZIZWs5SFRROUpnaUpCODFXTGtnWEhCT1hJcTAxMmNkNTBmN2VTenRFajRnZ21tTlB1K0g5YmhqUk55MXphbUJLQU85UmJrQTdyanNFTkFrOVhpeWtCU1VLc0JmRUl0ZnpnSjBDcXVNb2JuM0ZtZjF1V2VQZW4xYk1Md0hydDB0RDMzcDMwcEkyTGp2R3Z5Q1RsMldzcGdBbFFyTExtS0lNYlFsQjFiZWhoZzJ2c0VDNkNpSE9kekxmazBwNEJjRmU0ZzBDUG4ySkZ6K3J3emZvM3RaWEZNclRjc05xaGx1ZUl0QU1kbkVLeEdDOERrTmJEZjl5NERtWVBYNnJqZENEaVdETFJrTlNtam93R2wzNFZEeVVJU1gxYkhVT3pTNlZpN1NxdktzaVJVQVBuKzN0c2dsTlJuRm94Qm8rQUNJbnNwR0xyd0hNdUpOVkJhMDR5WHlvdk4wV1cvZndsZXNFQmZwT1BsWXgva3JpMXN0S2d1QXNONTloQnJZaWtsZzJWNFREbE1GTXlWczJXUkRCNmUrZG9CS1M5V3FFeU5wbm1tUStWcmU3UmNjK0l1OFdoWUJTMTNDTEZGTEl1SnVDWHR3cHZub3pqa2ZtSkI1K0pwbncyRDVxV3drUUdOUitYSVdkaFA5V2R4RlVvK3hzM3hlcHM3OU9DVFhKdmFxdGtUdm43Si82N3hRNmROd0NXZURIaUp6eFBtSTJsNEVyYXRHRk95eDQ3Z2Y5ZU1xTUxiWXdnNE1xOEIrM282ZlV4T1grSGxHYkp6RXJObUNFdjg1Q0NFbmlaRHd3b3pCaUhwS2o2Q1VXLzBIemJnYmR1OXZYbFJUZVNqTWdwd3lYaXdZTXdiN2tzZnJBNkQ1ZVlWQlE0cWVNbElHbDhJOTROdk9ZNSs0MzBOR001UzY0VzhyT3RrT2NjRmFvSWhvenVJTkY3RHJZdWhqcWhrMXB0N1VuMDgvTXBFaE1Kc2tmdTcyOVlRRk1MMGxTOE1FSGpreHpJYlB3cW52c3Vid09qbVFRUmdMaDNRc3dtRWdBUzBaOWR6ajFrYnAzeExnbmx6TEZqZitiL0RNUGJyby9JNHl6NlJkZU1xakk4NlRqK1gvcEtlQml5ZTdHQzJjZzJVYVhPeEpJSGxnY2pZRTI2M1lJanZ4YjkxM1JVYXhaYUR2MEYydjd5aGdDMkRVcmd1bExNcGY5ZG1JZzBtdmFnd0NEc3k3aXBKZkVLa29HcWN2N3pUelVKQnMxZ2FwTng3akZURU5oanJjZzVnQkJId3NlRzAvTHlkb0JTdTAwTENlczlXZmtxbzdaN3owZFRuZ2Q3OFJoMUZmZGZXS2JaQ0Ixc1M1WE9XR0xZQXZWYTBIbGYwZFMvaFBPUmRNbFdaZjdtZnB2MzZuUVRCUmdDQ1RKT1N1UmQzQVNQTEdXWkVaZW5YMWhTMGRPa3YzTFZERnlnYXU3OXM1a3l5cE5lOFltRVRoQzVlSVRoVnJSckE4b0t5M3VWZlA1ZitxOGVUd1k5clRFcnlwUGZCb3I4MC91SWExeExxQ0RxdXNRMFNuTWlKdXI4dStOTWhMV3k1MXdRdUt5R3BIVUlrNzR6bW1FZ0V1YVh1WUphMkt4K1dxbzdVMG55T2pXdmdJdUJZRGVHYlRvRVAwSnBmN2ROUml2MFpXbkZ3dXhUTHB6UWVBK3FMbnNxcjhEazQrdU84anBGUmc2dWl5T2tiVitaUGtqN1I5b1lqMnI0U2dINUNDU3RWcFlFZEZiL1hBWWNkMHg0eEJJYTVLTVAzdzRQSW4yaW16b3FNQTBncnZBOC9kSE4xWWlQT3Y3ZVRSeHo3Z3BET25oM042NFJtNERoYjFNc24yZktqaEZiWjV2N3h6SlphVDl6RlV4WEpXVDFkVU4wOFRlUmJJWnI2Z1JPV2NvWURqUGU3TkJEZkhWWWtrZ0JlUXJpcUEzVkx4Y2R6d3pLTEtaL1U2Q1BiSCthRllrZzJoZ1QwRnk1cVlVSHJGMHphVlU3c1VMU29PSEk0bnJMVjlHTFRlZy9rTjFDMzhrUGtBaGRBaERCSUpqeVMrajJKVHNqZ05GakhoSHIrSkRFbExPMVNHdlQ4NWloWS9zeng3OFkzNVQ5dlgxQ2huVUlEcmhTUVFJZjdONU9WVDhWVHVaQW4wMklrYXZnWXJBSVlvS3YvYkVzc09rY1BMV2Y0WnpwUmJZT1dPVFZWank0dE9PVHJLb3Znb1hwVnB6SzdnRkhYWm1vTld2K2svOFNGRzB1UVg5djNwKzkzWHNKWTB2OG1yTFJPMWhDcWdjSmhuMGE4WGZNRXhNNGYvb2NrbDdlTThjaERGMXFjTTRISzVuMGxVT0JFa2t2Sk5OUnh0eFV4TVZPeTJ5K0hyd21ZR0VQVWxwazRlRERvOTZ6dVA0NEl0bmFYdkV4Q2lOYVlhNEdlOEZNSlFza0FmTy9ZTkMvMWxHRVVqNmJYa3hjd21uakxZUWppTDVhVlBwS2VkQ0pnMzJKYnpxaTB3OU0ya0RZaUdlQ1c3cXo2R0ZnYS9JYmNWOGxhU1NxbEpOMDE0cDVjNGJsYk05cDlFOWpEbk5Hakp2dWFVRGpBcVNhcUYzUFZQbnk4am00aUV3WE5zdDVVVkZKMDF3Tjl0QUViNFAvWE8xQXN6MHhTZnVwd0M5ZldjN0M2c0VTRk9CQW9ReHZZVlV5YTRTbkljMDIxb0xNMHprZEszM0lQenVkNHp0S1hlbEErcG0wajY2MVR4d01yYVVsREM1N0twZFdUUVNHVTc3eWpiNGFUaTYxNUJpcjBSVDJDSkZWaS9aUXRHVDVnVzNiSnM5d25uRDFDVDFySUdIZDE2YzBxS1MvOTQreG1wM3E3VTVpWUxCVnhJQzFqRWw4UWlxMXQwSEo3TkppbzlydUlEOGZsUHJOWlVvZDFDZHFPaEtXd2xhWUNPWXc0Wnp5ZGFlR0R6VmM1NkczOXV2cUtuNG5RdVlXQ3ZkOTBhSVJOdUFtVnpLTWtrZENnU3lJTy9UendMOXpmWVVYVlNiay9lRWhjaGZsOTJZYUVXS2JiWTc1VXg5ZFV5T1NBa1psZm9CREtMZUZVM3ZWV1F4UVBLdDFIVDhCNHNHOXNtOUo1WmFVMGF3TnN2OFcvZG9tRHR5Mzd0RmtqR3JKRklmRmZ5NDlkRVFaUmhHdDc1T0xYQmRCQmN0RmZCM09PR3lubjg4ZEpPZmk4aUZLaVNnNDRERm5EaVNMdXNNMThkRkNObk9nYnl4MUIrSUZRbmR5bndONWd4WDU0bFlxYmkzRDk0eG90bUxuWksvOFFyVGVoMlp4elE1VUZWL21lck5sME9GcmR1MnE3SGVETEpNWDh5ckdqWG9aeXRmS3dmeGxlM1U5U2JFTW5pa29YM3lIaElqMmsvd1BTenNRcGI5VlRkYXhYM1UwcnQ0U2Q4N3hGYjBUQUZFanI0ek9oWnpmUURQZHN1bmhoTzVJZnlLSDNoVzgvMHpDYkRwRzRRQ1NnT3RGMi8rR3RKd2RRT20vQVh4WGI4MGVhVXBxeHlaNzgxcEx6cnAwL1NwV2lJWWNSNktCU2ttcFNPTHFBcmhpdDNlanRxSWJ2YTQ3QVU2dlNqOXVldU04Rk4wQVM4UWxha1VtTk85K2xKdWNPa3p1M2NwSTc3MzNtbHNtTVdVbnVmNUNaWXN3cmhTQ0x5TWJPUnlKaFErVkhld2l3bDh0MDY1bzlDNldjWGZhWmZmdXVLTkRkYnY5K1RHVCtueFVqazRKYTRMeWZEYU94OXRQZU9lSzQ2Z01OMzBJY2M0TVJFWXdpRkRRelJVdDlJVzg3eHBwWkNwRncveGVKU3o5L1RsR0E2MUw3MWxNZW15UElKNHR6emFEWWx1RXZJWHlsMEpURC9MakMvZHJiemdvb25KRkkvOXpHSnIydktITGNtVUFCbXlPNmQvUitYL0NLWVh0cUl0TkpMV050dW1zWjVKdmJab0hFdDI1TGgrcXcwa082eUhkdXFaNUx6cWpNSWV6bVRCYUZoZEJkNXkyT2F0TE9GQ2xoSVJHMHFhNDNIYUFqMnFSK3l0RzRwanVBTDByNWZXTEVZV20zYUpTQ1JWTkZvQXJnb0NpWkVGRXpCS0VhV1dLZndDWHhSQjFsM3VsbEJIcVJrbFBzb3dxSUx5TlVMek5rTlNYd3FYNzhLa3Rsc1Z0STZFZEVyTFVHNDdhckkrZmk1bzcyRnlETkJvNVBEMkthditCWjgyYTlMdG1ybU5YbXFHMTA3VFBkRHAyQkVCbmUzdTVLbzlQdjNLcVBLYkVPT0NOU1VBN05kb1dXQ1ZwY0lHYitqdTVQaXNvT0w4YXJzYzBJSWRjMmtydmoyTlpQVGtHbTJDUmRVUWNQTTVhR0FvaE9nYlRXZ3ZPenZCU0ZFeHk2VGlXSU45ZlJVbnFKdzMwdElIWFFaa3lEVHh5M1ltSzc3U1dVMzdyODhQUE9oWVBNUjA0cXNSQmsrQUJ0WHB2QStuNGM5YU1oWEQvT1M3NDVUaUhwa1gyUmUyNGhPa2ZYTTBrMHVjLzhJdXR0RGVHNm1SVGY4QlBIcmRhenRTT3FSL1pudk02QWxFZDBjaUtUY3dHSWx5d2tmd0ZUSG5ITFB4ZUVndkZ5QmFHelRBMHRCU0Iva3RsNE5kb0lnQWlDRjhaV1Y1T0FkalRCM1E1ZXJQaDNjTlVld3lhcFAycU9LOGdOTmQrZzRlRWt1WW9IaCtNaE5zdkVEQ3duZFFuTWZpenowMi9mVDQyaldQaThydnZFeGNkMmRBbkphNUQxL2lneHZQOGR6TDUrdGNxSytTS2U0VE9EK3ZTUWdBZFhQcDhMYWJrd29BendVc0s3SDVMWGd3Q1Q4S3FCZVQxcUpxc21yS21ERURnN1REYXBNZ1hVNTBCVEFtZlBnSlNaSjAxKzRtZlo0c1ZGVDFXVnJqeXcvZ0VGZFNLMnovRjhJc05DcHAxN3d0WlllVEtQdlZZUm1KS0lNbDI5T0lBcHNqZGNwWW95eGYrbmdDMDRibFBhTUlnU3ZmRVNBMjJUcHJoY3VmNWdnMy9PRXMvdEhzUWNBQzBuMWdqVzR2L0xsbUJ3VmM3K3Q2bXNsVVFHcncrS0xtRHcyVy9lQjUxUXZyU3pwVUdkK0o3Wm1ES00yaVROc1hRVE15TUNWRWh0VGJLZmZLb3Y1UGxBYmRVQXdxdGZIR3U1R3ZiblNuYmlNMGx6azdTSjhZWTFQMzRKL3NsbWVJdkM0MVhlSjVZMko2YTY1V2NCdFV3RzZibmJaZktSdlF3SnpVYkdFQ1liZHN0VFNPYmRKaE5FaExDZEFKbi8yVjJ4ZkxxMTBMRHJGR2hMQi9PVk0wQ2UzMm44VnRoVS90dVArWkNhYWh4UEtLNVJiZHltVE4vOWQzVDgrS1NSdy9qRS9BWXl6UjZpUTE5dm1OZXB5ZWJKQWtjU3N3WFhjWFhkc1Q0RHhtTHQrZ1Q1UWpOd3ZvekpPa1Q1eTBFbC9VVkpITkFzTnpVYnFoRDJNck9FZ0tlY2RjMktPMnJ0amdDa2ZzQnl2NVlVS25PZFZmdVk5MmhWR1AvTUhrcklxRXc0UGdoT2NvYkhzZ2I3OHFhejhSN2M5eUdrakxVVWR1SHUvYXAxM0ZrY3NKOHlkQ1FEZUw5U0YxY1FCVjMxUDBUZHlaNXdNWHd2R0x3TEdRNVlndGNLQWlmZkVFOEtJRW5QeWNhdFJLcldnOVEySEY1RlBOeE1wbDZBNGxvbXR4SmFaUGpyV0hVdTVmMTljcVBIQWxNbjdiK24wSllTd1gzUzc5V3lwQ2pybUQ4Y0FYWm9SR3dHSWFEK1hrV3hXV0NyQ3U3dDkvRHpMMWRLRHpZZlMvZTlsdGdyRkk1eDNhcnphTHVoVlAvWGs1SWJ6S3ZDN1dHU1hPYndiUEJ6VW0rWEQzUll4TzhQQXZBZUxyQkRHd0FRS3VIZnF3ZFowZVlYSkNUZG85Nzl5SHVVM3pVNFhhZExNUE1IMEcvS0czaU1mR3ZUQ1FENmxJVGovdFcvQWMvcFRKRFpBOEk1TEdCYlIvNWRFMnVPMVl5a0E5QmRVQTIzZjFvQ1FoQ0tIYWlERlVLdG55R0p1T1V2dTdaR3NYVDNoQVM0M2ZFcTJqU1hhaVpjNTl2SFlDSmRrMDdaUnZLRlFFTjYwR2JXQnhabjNpYWRaQWRwaUxRWHUrRmJtQlRBdENlVUJYTzI1bGQyWlB0NjVma1c5anZBYURhRklTMS9NR0NGSFBHT0Z2eGt1c3hpNWhGalpWUW1jd3dnTkJrdnh1UUl0am9vV1dJT1Q2MnlLUFRJLzhGNERwTDlNL0sxTy9RTVAwaFhHSCtjRmc5RmoydHNXUkRSVGNDZVE1MGdrc1FlU0d5R3prZ1BFTGVpMWtJQVBLUVlkUHM2KzJvaHcxaVJUNmNOZ0dRaWZjWDJKbVV4SW5iaWRzQnZEQXJoa2tlSVJ2dTl3ZjNSODJ0bzBWQ2ZvNUxnS040UmtqaUtOQ01lTkozd1BEWEwyR0UyRDMvTnZsbTVoRkdQTzFRSm5iUWtpcmdMMy85QzJuT0lsTlUwWTI1RVJaNlFqZDh4bTVTK3g1N1lwSDdJeG9tR1hBVnN6UDZKRW5EUkRRRmxOS0Vqei9lVnBJQ0pDcC9PQUJqeVRPeVpaU2FaZlpoSngvQmJUbEdyakNBTzJjOStPeEwyb0NRamhlWW92bnp1eCtIUXBrWWxnUFJselRzRHg5eVhhSXFpekwxNi9UUjNQNlNNRjdyQXpkQ0NXTXRRTWNqSXM0ME9nbTNveVpIOG9NUHU2NEw1VmdMU3UrQ1BMZ2t5UUFqSGVjaEhsUTNCcmwwUkx2MHdjSjZ2SFlCQkxBWExHMFczT3NDNy9ZcVB1b0kySElGZkhrUlNtMmM3bDVQRGRROGRNYUV4ZmMwSzA1N0F4eGdEM05MZUxmM290OUZCeFlnYWdjQ1BwWTluU2tQQnNDNXJxMWJaVHc1dk4vV0wxZDR3RWJlZ1dHTTAwbTQzQnlUZUNJVlZnRmNtVVpNZ3ltNzlsdXp0dFQ3VkxFVzFiTjZJNjRmRU1IdjRXcG9qQ2t2TmRmckV0ZGE2bkxjbzVOWk5WK21GRjlDYnhwTDJpUXpGNWxuVWVmUWNRT2ZXc3gzSkRkMFZhM3VRTHFkUmVKeCt2V1Z6SHJab0o4MGtsVzczb0FHZG9Cdld2MSt4ZGw0WEU0RWNCYWMwZUZ0QUw4c0l1R1A2eGhWWTJkVExyZzFJR3BUY0hNb0I5TG1NTkh0VGY5UEpWMnhIeUpUUDl5TzV1eVl3bjdSSDFxdFVxczlGSXVGOTBEZDZYaTkrenEwNUhVcC9qNVlZalllRWkwaTJramFOS0FkSlExeVpReEpKaC90WnAxdEd0NnZaQTVIRVQ4d3ZhVFpiSU8zN0NYNW8vYW5hdkpkaDVBSkQ3TFloLzVqUUZLbG9XQ3JEMnUzYis0ZDdkd2ZaU0ppZFY4WDdOTmIrcm5hQlpMTnJtN29xUUVPSGFLdlFheENaTDlnRUloUE9OVmZEenAvWnIwMVZzQnFiN1BDblRvTzlGeWI2aEdPRFhIeVpNTnJONkpaUURxMVdqK2dlQXhEejJDekhVV203dzkwUnB3b2JsWUVPMkdWbGRIR29rS040S1loeTZWMTE0UFRPdFRkbEJFWFVkVllTZnkzbEVKSWVzVk52NHg1cFY3RG9BOXAyNlc3MzVqcktMNzNxbjA5dTYvNDllaVFMc1M1dXcxMlBhZSs1SE1rdjJRRGpRY1l5NzNpeGFwakQ5ZGVJTlk4TXpFOE5iTlFKaU5PcnBkQTdaaWc0UldaY2t5T0NjQk5rNjlwWWpacUpwSFI0b2E0OU1wRExHUGtqZ1JlSm9YOWV0UXBqTzBuU2ZwNGpFbmxqVnlSMTlrdFRMWEV5WXpubERwTjBScGJXMlJ2SUhCR3JVUHpZTU9maHVqeklualkwT0hwSGpUQmF5YmJOeUFiWHJBeWxVcU9Cd3pCaG9KTFlOWXBtalBrdkt4OVRqY0l5QVo0alBHQkJSNnJBNGxCN09oTlE1dkJpZ0xCbVRWdmxXVmt3YVRmNHJKeXlDd0pRUVAzazZYeU9qZnVCZjE4clk4U0ZMMmxHMEg3LzFCb2R0dGNIbHZTYmRqU0pBd2tTWXFTQVUzMU1tQk92Q0NpQS9TMWt0NFptMXlWanZOOFJQOWdKK0pLcnY5NEtpMDh3RXNpV1kxOVNXN1cvQ3QvUTJCbFNOaFZvV0pJU0xuVHZmMmpGN2p0MVNhVlZuaXNRRldjazRIa0M4U2tDanRxSlpvZ3VnNXVkbm92bHJ2cW4xRFhrN0gra2tSc2lycXN2KytmYXlia3hiQUVONFVQZnYySWpMRXRwOXFxZDZnbTRlSnR0RGRrdmJEMzkwUmE2cFFlNXNVZnd0anF1SmxaanpxaDhjRHkvQmRhTEtNa1YwcEFyWDltK3U0MFIvOEJjcHJxVUQ0Y2NaZ2ZOc2hLUUY2UTFwbWw4UjRUS01xWEk4WTBENGpKcTZERmgwQ3dxVjNpWU54VmpFUDJuLzIyRnJSQlNNRVYvMlpMY3BVdkUwMFBaTWtHNUEzNDNsU0JkMzFwT0I4enJxdzRBZjQ2bGpBRzZXUzRYelNCN1pKWXIwZXZ2bVNKbFMyK3ZmcmI0bWdFN1lFazFobEdKYXZLcVQ1WnFNdDhFODNubzhWTU94cm95ODF2azl0Z2g2VS9KVkhlZjhnMExHWXQyYXpCbGxXZ00vNWJjQitrRUhNT0tlQ3I2OWd1aW9qS2hKbEo0N28xQmVlWHgvTWUrY2trdDdxRXR6aVlZcGxZSXJYbGVxL0lnOTY4ZEpnTk5Jb1g3aU1aM2tYaDNhVzVTbUlXZ29QTDhENmx6U3g0ejFLMG95b3dQOGlWUmtPZkNpck13UXFvV2ZvWjNJd3hIYzlaNTBxa0pHT05ySjduQWx3cnRTZWF2dGh2cEV5NGdDS2ZIeXZyNGlQOS9PYmtheGptWDkrdGowekZNTDdzWWZNRWpjQno0bmRhcEptSm1xV1prMXg3M0c1MVpiWlZtOWVDMVQvYjVlbEt2RFZrN2NYY1ZrVjlBWmZHSFZBV3BsNnBub3NtcTIwbmNCTWk5Mk01SCtxZ3g4dEVNcDhWVDZ3aDJmMWFDbXA5NzlYVE1Tdkt5aFB4bytzNGdVaHMxKzJwTnhEL1JoWG04emNJdjNaZTQwSkZjSDB0M2NHRWJUSTRGc3ZJRU82dCtQOFFmeW9TUHNjU2lHRkNVMjEvelM4b3UyYkZSOWlidXRuV094M3VoNS92N3FzSGZ5TkxsODk3d2kzRW1Nc2pHZjhBbm42L0s4U3VJaENFT3FQZ1ByY09xc3p1RFJmZjdjc3VLWVJzNDVsT2dVeWVOeWVnR0licHNRT2VUNDk1bjVzUEFhQ2RLQURuK0tsRDZRWXJLNVRKQjB2NEFhM3o3WDJkRlpVNjNab3VTUGhvN0h1dVk2UlZ6QktPQy9mSFpUUERTeW43a1FzT2IwMUNrWGUrUlM1ZzhYQ3NqbS82aGtEaDdCRnFCczRkRys0alpNN0EzWFVLbk5VL25KMHlRV1BSdnZVNkhuT0dNYkRJT3ZaOEg5S1R4THJkRitaaXhra1BySHJSaTAwMVBnQzFJbzNLWW1lL21hcUN1TEs1aytWMWR6TXhaWU9UN3dIbDdzVVRwTzFhdW9mNkhqMlllNGVDQVMyQ0xDR0VHVkRFdnVtU3hQNnlIYTJpdkFyYStMeVpPLzg1cVJ4cUhNNm05Zld1T3V1bEgxUVM0QUwvQ2V0bnFENWFNYlhJWlgwZXEvQkx2R2d5NVFTd0hOa0JTT3NqRXVkZXhXTTB2MW5GbG1hRlBHaFNpRWZTUUtjVmpGUTIwOW12NVRqREVGNkJFWlJsSjlNVktTdWxMVFBOTllseEN6NVcyR1AyNFRHZDNRa1V2N2M0VGZYR3UxWWFLSlVWMUhpa01vb0gxNnFwVXN5aUlwK0JxWndhbW9kakwxSGJGNjk2QmJqUDJUNndlYlNEUzZJWmVsR09KY096ZmJwZ2NQblNkYUZJa0xHVnBvRjFaeWtRcGRQdnFIUnVmTm9QQjZzYi9OVGRaUGswUXJhdDZ0aWg2bjc4UXhWZUYybXRFYUdsK1lBdkFOZ0ZiNjVsRStjSHJYMUgxbEdXWHp1SnRjT1hiN21EMHk5OGp3OWJiOEVzQ05PcExvWGVKNFBoaWJ1bkVVUmZVVjN5WWNKN0tqMGZlRjMvS2pISVJKa2JvdXFRK2FEM1YxR3dTenpZWTNFTE1VQ0haTENVREU4R2hoaWx1Uy8zd2g2VEg4M08rTVRYUGZJSG85M2lBUkQxRVMwNGJUOExYQmdRN1V1VzNjckJxb2twc2haSzdNMXRoTjVkeHFNeUl1bURvQ2Q5V1YrbS8xTy9HQ2RuWHhOYURyVGhIeG90VURSaVo4dlpndk5pVjBLbVQ4TEY3LzFJM2VSWXoyVFd6SzJQekxOcUVXZitnTmp6aDd5UlpMR1VKcTNEVldHbFBqcm80cGZ5d3BJL2pFZ3F6UGxDMHFuaUxjRHlkSWJmQ3d1NUVsTUpnb0hDWnAwZkI3OE9xdUdXNnNmRkgzZmNEV082WlJyamYrMGF0bkNXcG1SN3VOYkIzQnZMSldxMExFNGdzdTdROXNzQjZRWkl5VUxDWDZnbEdFZVpXNVJtNzhma3pMSlRCeENBVTBhV1IzaDhNcVJXRUtLR2Q4SCszSGJ0L0V6VUFvM1RRdHdDSWw0ZE0zNDUvVGxCWDFzN0pScC9RSUNDRG5UdHAyNGxUbzdmQS9vREc3dkxETjlsK2ZjdkFhSGllcGtUT20yeUdyZTBxcUdlYzhaMjlqeDgyTzIyWDhrSXA4a3l1c29zSk9RUEx1cEd0aU11aTdTZnpXSndxYThBMFNLZllQbWl0VUdoWFA1VFRjYVVDRXp2eXB6VWVNY1pUUFdJZnd6RGd6NExIQ0Z6T00weFNZQnZwVkNvVHRPRXIrYy8vSDhRT1BEMW1CL1d6TkczbkVlQTNZN1J4UHc4c3JsTGMzL1B0UmUxTXNvSk1XZmpkbnFndTd3RkFOZXB5YkFneEpzUVkzVHNmQnRZNmdvRTlmMmNMQnI4T1dOTFpJU0hGMVM1TGRJeFpMUFlKaHprN2QwazljTW0xdWxURm5icmpyMmtpa2VQVDVSRlV6VHpGRlpVcmh4eVNQaklWMkhqbVZkZVRtdDgvMVQ5ZTZ6Mm5tSFd6Zng5RC85MzNkSDNUd2J0bHk1K2oxQ1RnblIyTldQMHZJVjdCYzFVN0J1Z0x1a1diVzg4TEFQSzFhUzBLL0R5WSsreHlLZFIzUlV1Qml4MXNsTzFmUlNBdGxua00rM0tHMFNqR3lDV21rVkxCcDEwWnR5OUhMQ1o3aFcvdXU5QkM0KzV1RUE3RVFaeE5zbDQ5WWE1U2xjWVQwcHBDZUN5enZzTTlLKzFITmE4bFdVSERDSG1xM0FtbXFvN1gwZElWbGkzUTg5Qi9uSnVVKytWb3U4dnZ4bTI0bS9jM1k5UHNPWW1OL0Qyc2xpd2hLanhLcS8xUjRGK2V1cmovM1ovTFlESHdFZ09ucTZIRGllSlNnVy95bWNHYU50dlB6MmtTU1VHQ1IwclRGZVdhRkFYQXhtSHNLcFdxbmVKVllyckpGRjc5N2lWendVeHVhQTVVejBiYUxURk9qYUlhNEZMNHJlbHl1VWMxb21EVW1oc1lkemdHbVQwUnlLNE5KWHQxRTVtZ09laWJUd2RiQ0lsRE5DSW5uRzJQWk5ZSUU0bktFd3l0aWVabHhZYnBBbVpyaHhUZ2ZTallnU3NoWE1BSmVFdnltMm1wTjNlTzlyL0xsOVpRRTJPS1lmeHM3c0UxK213aDFPaFJaeEF5VnhOZHV3NEIwZW1KT0dLV0RBVnlTdUZBcGUvZERlWlVKNjE4bHBISDBqam1vazJHTXRiN09wNlU5MnFDUll2Y0pkUUttdENDK2VkeUwvYzQ5QzVaWU92dWIyclYySGlxL0xNNlBtV2dkdUxHbVJJTmZWVHo4dVExcFJLNHptVkc2cmI1V0t4ZlM0bnAwSHJ5Qmg3V092YlF3d0lGcGs0Ty9HdjlDejhwb1dRRmZLVE04STVKWkdFdnJGdkdIOTA0RGJUcVI2UVJ5dGZNV2hwdk5abjlGVnNqNTQvSUdBYVdCVExkMDdjTExSNVpqam5LaFZEd0tTMnZMcXV1Q24vU21rdm1QNnJ2TGV4TytCSE5EV0NaNElsdXhuVjErc0lPN1VDcG0rcVNpakN4Y2RDYTFYRUZFR0pKbzI1QzhMTk5zU3R3OGg1RFo5bXY3aWNGT3ZvZGVMR0dPR095RGJNUDF5cFE4TWtqVXZGUktZV0NhandSeFZsaG13dHpLeDdxam1PdDBTMVJqaFJzUWp2R2pZa3dlQTIxS0Y3c3NtMUZnYktKeHJKV2lVczlqM20ySHcyd0d4OUMyVGNDbE8vUnZRTm9iTDVudSt0bFRvaUluaXh5WGdWMlMydDFtamRSSjhVNjVxMWNBbUFkblJZZVhkVHZJcXhESnhzMGczRTlXeGpMNmlkSytsMmQ4YzJodlpUSkxLTFpOYzVyNWZnUGZlbUxhUER5bkFGMTlHMnRPWFlOdWJPeFN6R0l2b0hQTHM3elFlamh1ZngvSDRKMVA0RVlLNE9HOHhQRkVrdkcvbEM0UHRBV1U2S2hRSlROaWI1ZTNHTktZTWY2d2orNGNITjJuQjRiYThENnlpamp3T1NTRWlGYlh6YmFGZzRxbDljYkdUMmFGOXN5Yjhaa1hpRkxYTzRqMjN4YVhnT0JyeFBxSDlsVGpldVpnNEppNGc0Vm1rTGZsdHgzK1Q1SCs1SlJXMmRSU1FuQm91M2ZibUFzU1JWN0lubUliTXN2SVlLczFTZUllOUNRZWVwdit2a0FTWUZvV2s5N29NRWxESzRLbUVteHpCRzBJanJFS2VzWVB6czROWHBqQnh0M08ra0F5Tlgvd2tzSlZSMlhTdHlYUTRDM0VQWnV0Z2FjL0NML1RNQWhhWDVnQXhTVmNYcm1mZXZvSFNLTVRKdE9mSHgrcHRXdmlKWjhXYUFjMFNTa29QdFRTMjlzTFJ0Z1U4RVYrcW5EWlFibk5iTmFrTjVRaG1nS0h1SitEbkwzK3RZbHhiTVo1OEpGVVZyVVVtRDFMc0lPV2lHOGwrVDM4L0xHb1ZsZXBCSUVTckpldjd0c1V2TWFTSWJnRWZPVlh3TEI5WjRQQXQyMzZwMDBaV0w4d2JScklJU3MraUFiSnF0a0NzMi95aWIxUnNTZy9sY1BTUnphdjlXMXJLeUgwbzVrdFdyYUtiaUxiU1NUZmc3TTRDb0xDRGszejBXc1U2MkhUd2NHOFdqTXk5RWUrZEJiR1FkRXJ1WTlCZkN1Tm9kM3JWUm93bXZubDlhazQxTlMvVGhLRk44UEpSSzNWTUlrK05HZlBLazRnaDBvc0xNb3pPVlhNeEM1R0NLdXRBWHBobms4SnVpWjdDUDBBSHpDTjBtUlNMeVdLMkQvcXBWb01sUU1qSFZOWHR2NTRjZEpKQzA4Si9JemRwcUVob2ZXaE56U3hIQWdLOWpyYm5Bby85d3g4QUhzRmMwWk1YL1lET3RCamRDV0VmYWc5ZWZyVDZtd2xFckw4TjhuVmNuclJMWjB3SlVvbEtzWmhIR1ZlZ1VBa29DUTNvQ2RuMCtYSGRSK1FvSURNL1hmdGIyRDJsTm9nTFJkb0lHUUkyMk5CcVhxR2o0bm1heGU2Q2lrWmlwVWlCODNNMFhJaFFhVm9PeFhoRTdwS3Y1b0VtQTJYY3g5NFlKYnFMSG1Wc3BjRjRQQW54cEJsZTBKV3N4OVViUUp3NFRWb0pwdWtkL1RwdlM4MnVHWEFOWUJKc3BRL2FPMjNCc24yaktFMmU0N3kyT0I5ZG9QeVlWWndnaVZTdmZKMm42Zmw0RlpveGpzQTRlb1pyRGdQb2FQSUdwb0lJWnBtcnFkS3BONUVKZFhWeUYvTjhkZitKTkJrdGdNSUthRXdnN0xhRlJkMHdJbGV6VE9lRTUyclFRQ01jTlh0NTZtNUxYeDVJUWZqa0MrMVFuNmdmOUVqbW9MUEtCQWdsQkFLKzNwbmxTMnRQbnBJOGpSL2hxNm8rM01vcjhDaXlaWGJ0c05kaGVpZkR4L3JuS0dpb0JZRmdZbXFnRWNIRmZyTXR4elN3Z2VFRFozd0VuMHFEMnF4R0RXK3BLbEZnV3IrMVpoT2s5c1VxTDBHWGVMeXI1anpjL2ZEVlZmVnVGUkYzS2pycjdLUGJGMTRYNU4zWU5XZHRVWXE5eE9CcFhhemlSNnZrZGZoSFZ5SWdPaXg5QWpnTW1GN2V3RkJHZmhjMzhsVDBrZGpVcUsyQm5qdERqZUNheXl0bFdTVXFFTWVZTUl3Mk5xM0FKbENEVUZDNmdVSktsN045MGpqQ2FiQnp4dGdxMzZnT0hUemVmek10eHpHckRXV05sS2Jvc1R5UHcxK2pmUFQxTndPUSs0bjA1K3lmdUU2OU8vRWJmNXkvVEFBbFNPSGZmYXpUeTZteFJ5K2RJZHRxc1ZJa3ZWV1poYkRzSnlpbjEwZzN0bWlKaDRqMUlaaElUWlNRQk0zQmF0YmJuMGR5SDA1YlpOdnJxQVAxNEFpTndSZ3VjbzZKbmpqY1l3OWxZc1NaS3dEcVVzOWxPRFlvNC9TZ2FzYUNEVmVqYm1aK3UxNGVEZ05pb1BwaXg2Qkt4NC91eG5yOVJkdnBNQTdZUDdpOHZxVzhNaDFEdXJtN1hMdjJtNnRTY2hONXZZOHdsNDVNUms1NnE2Qk1hdjQ1d05EWlMvMi9rRFVpWVkya0Q4b2g3eVpVU2tobTY0ODZoYWJXUXVPWC9ZNVVxaXRQckt4RDJDMm53WnlCY2ZsS25aNkxOL210RUprUjRpSHppQ1JtekJieTFva2ZmNDdOZk9yR21pbG9xQzVzRmRlQnRMaGJqOHBIT1k1MUtrTlFvY0JjcElHR2NERVFMOUtxbERrOHlPVkVIUUdWb2E4K2xYMTJQTjk0R0gyRnRBMVBFZFB3SFVGZ3U4a1U3S2lCcEtCdUFlYUJPN2lWSHFBckEweXEwaDZ6MU5MK24vdmVzVW85U3V2TmorcmoyaVJ3TFdUV2NBaE1YZFBSU0htUnA1Zmk1VXlnelpvMkFCTjdYQ3JGWVJieXllK2FpbWJXcmJ3YSszeENiUEZMNmZFS1dGbHV4VTlzOUE0eS9ZcVBnL1JuMFlKQU9PQXlkSDhoRDI0aWxkLzR2c28wVzFINng3U0l4YUNBUUZVRVVmSWdTRGpvK0lVdkNVcWRvSlU5eFhJdG9TS0pxanJ1WWJ6L0hRc1BjdVRpVk9uNjFsNWhDbjBxTUVuSjhVSG5JSFNyT0txY1d2Nzh1S2t3TjN4S25qL3ovUUlJMmRVdlMxY3NKQjVXMnlsRnh3cTRoa0Q2eVAraGJVckJrSTlXekdBVUFEMVdKWkZtbWZwK0RIUU5QZU56VEdmWC9IYnBrTHVZRG1QS2FsTUZ2eFFMeUZTK29oalh5ZmFkbklzbm5ZNS95NzJkQUZHa0hvYnFjU0ZxcDJGRDZibVFOSEN2dUNrZXJLSUY3VFJnUi9pb0VJUTczRDB0azJpOXB4M0djMEVCb0dxamRPbXN4cFpSNXdMSnZvU1RSTzUzUnB6NEdaVGREbGRoSTFlZWpRTStlQzlYQnBkS1JHZ2tCMElja1VDcDhVYTFqK1ZGV0VEMW1IUkdnUjIrcVRmWnF4b3g1bm5ncE1mMVJMSTBIWFpRRXJkZEhPRFk1bS9RQ3VCT0ttU3Yza05CZWRRYURXMWRMVFZVVnNweHV0NXJhdzRXaXh6WS9VMFZwVUY1Q0UzblVVbmI1d1VqRUNqNTdQajIzY21GdUVBaHZYQXhHQjVRc0ZhWEhzQStROTFSNlpzRUZVVlJpdWh5YlVjNWlJcHp5UHVCZ0U3WExtUGdkbzBYc3BTQ2FJLzlJV1VnUzMvbml2MjZDYlJ5UWw2RExQOTM1QjZrblh5dFI0bk92cTVjTnM1bFdJMXJib29SVC9TWTZKK3ZWeUlDRS9QWUlmdVZqamFrSnk4ZFZXUHhXUEtRZGJTS1pxTmtjMUhqcE1DL2xYMXNWNlZWMDE1SGk0S1hLMWJ4Z2VaQ3daSkpFLzM2cFo0WVgvRWxwVTNjU1E0a1QxTGlDSjNvRUpJY1VyaXl2YUJpdE52a1hpUTdLNWxpeDdnL0dITCtTNzRIOEhwbVZVeWJVcElPbit2amdIWG9Eemhtckw4Z0JLZ3Z4c05pVjE3aUtpdzZTUSt4aWRpZlRaMDJYK2toaVZhMGd1RVVYa0pFTDU0QW1FYVhXcTI4amFIeC9taWVzNXR0UFB3YllDeHRRdjNpOTY3cjNiT2dUOUFEUDUxTTlMc2NMQS9NZGd0SW40TzZtODl5Ri9pSGJvLzFKMlBHZDdiRVVZZ0hhSk9EcEpLYjlYWEE4bXJKeFRhZ0tIR1hzU0FxMlloYlV2QmpGdmcvcGhHR1JuRVllTlA4V2RCdzU2MDRvaXVnYk5tVGllYWhVYkV6NUVUcHFLUk1QVW5iTmYwOVA4b2h6dFBSRnkzZllpUHBob0IvYmdsRk5oZmNwV09ocUl3Nm1BcjRyVU1IL0FyRFRIL3FleHpqQVJ4dDdveHY4ak42bHM4NEdha1lVMjhnSVBjWjZaRVNFWFQwQUNWckVSb1YwT00vbU1SU3NnRGpwL1BTb2ptM1U0bXE5d0pJVWlPYnRhcUZGaUJHbm1GQXJnRVhvajVnUmZaVG91M0dJMUlpU1B1SldYeHhnVnBXMkw1ODZwejl5aC85UnhlTWJKVkc4cW1CMWlkSXFYRnVKdHhMMHBwcVNDKzYxVXZKNjRpeHFLN29BYm1DTndubWZVVUxFNDV6Z2VvbWQ5RU5jVTZRUTBDRU1OQldMQ1U5cW16NmpsRCtydzQwRVVZczVqUENoMW9icllZdTVCTW1ydktYclU4VjgrcDkrdEo2VGtuTjdFcVRhMjdrckY5VS9jTjNPSzFYTmY1eUxQblF1OUFZQlJITUplWnRhV0xzajdCYzdTR0xDcnJ2L2Q1ZEluUkZpWXE4RnB3MHh5dG9mU1M3SW1KTVBFOFh6MWVHY2pONVBtU2EwUlcvOTZNWnluUjh2WG5rN0dubTJlSWVYYWlEWS9NOEFiZWlZUnZxY1FyN3dYQStIbDNtMXBhbjFla3JmNFJ4WE5oUU15OUZrWVVpY3FSRUl0eW53bkU1ak8xMXBxMll6TkZFalNpOVlycCttRFREejA1ZnBLZXg1dEMrV3g1L21xdzFqcWs5TFhsMS9maEpyQjJhSmtIc09iRGptcEQ3d3ZLd2ZieWxkRWtvRlpUQUdQRVl2Y3pjb0l1aTZuU3NNVW5scDRwSWpPYXViaCsyMm9GQk43RkxNb2N2OEtBZjZlVUxGelBKc0xVMHpCUEVTemJDNmY4U1Q2cFMzSmo0SExsTHo5OEJnTVhUelRjejBKSjJOZmI5UXVna2pLRUR0ODF0RnZqRVhRQnR6VWt4bmZUeVE0c0o4Y3RqQzhTcnZDNDNURDl5Tms4U3hOSlJDeHpUNDdBTkxJZWkrVFFVVFJybXZocjdWR3g5bXJvMWVCUnBDbXd5cWNOTG93Z2NBVStFMUdpTklpNE1YcENkSlJGQnV5cFhXRlh1OEZTYUZSLzVtYURUTlJwSWZVcjlQcjFhTzhOZFlud3VLOU9sZVBYRTNkcW8yWVdKWmtBZkcrM21aMFRYaUhUMzBXcGpWc1hGWWJhSm0rZ2V5ZnNhVWNsOWdLVVRlRGhnby9mVDNObXUyK0VsVEVrelUyaGhvU2RnN0EyaUM1UWN6ZkROM1NCK1Uza002Y2YxeEZqeDlsSnhETitwN1haNFZ5K2djRGV6czNXWnYrZzJVa1ZjbTMxd0ovdjhpYnNRRkVCNDR5M1NFVzVoaThIa2tlU2Y3akZmUG5zdnlubXV1WktDbzRBZGZQOGZHZ0RxU0hsWityR09sdXNEcDlTS1JhemdGQmJxOHgwL2hLQWozZ2ZMTmZEOE11Y2lmZjNpNVE3UVcwYmtKNG1LRHUyN0tCNWJDRWdYSVVpU09rR05lT0k1aHF5MDFJRUxOUjA4NHAwSkV4UjgxSTkybDNnY243VUZiN3M4bWF4ckFuaDhWWnI1RjltVnhSTm1zNER0MStJaS8rMlEwMDFoeHBHR1hrOXJnM2lSaEs1N2UveUx1cVpyNEZtZTFEaDJaUjRxZ3RVMklyTzlKN0J4c2F0czlBT0xkS21uQXMwWnJSbGgvVFlaK3FyS2tCV01ia2VDZUp4N1JqR1loYWY1WVdiS0taVGJwK09BbVM3b2FEWlNuYVFSTmd0bkgvQTFtcVo4SDBWUHc0aURna3RxWjRrMlBDWS9pMmNONkRINmhXSHVrWFdIL0tZd3QxVXYwdFVPbVhQZGdodUJyM3FpWDZXUGwvRmRXdTNqdm9DSTR4WGNDTUVRNkYxbkh5bXlVSE5JSzJ1akNHdDhlYUJQd0lCNEtqZjlUOWF1ZHdxQ2VBalpndjdhQVBOTTZpUW1RVU85WDBTc2E4L011VTZVN08va0pxTlZMSmUzY0Z2anpRSVBUY0VTTWpYOFNyeUdPQzJnL1BGbTJ6clBLMzJHTXBZaTZLVmJXQkF2Vk00RlpEbFB4OENON0lsTk9KTVFHR3V2VFhGUVkxc2dkdUMveE9YR3dLWkUwNmxqR0ZMbS9zbnR4UmxrVlNpUVpwcnVkdlMxalZVeWpXTkNTalloYVFVSjEyTm1IWWVLSHJTWXlsekpadEFyZTNOam1kOVJsRjgxeGErc2VRLzhoMkxLNFFPODFEQXlVQ3I3cGRQeFFWWDdYbnU1S1VOQXJwVWxtd2J6QU9GSS9od2tKb3BYMDgrWGVOcG16eVNORE1VWjA0QkVBSSttYmFjZFFhbWR0RXJTZFJnaGwrUzNSNGgrSzU5T3Z6OXVMNlljRlBXL3hlLzlIZkxPZmc5Zk96a3VZVDRITGVHQi9mdzd4dVJCZVg0djMyT1dlV1ZKSjhTdUNFTHJhcC9ma3lkTWNLUHhqcExKcG1uNFlzNlYrN0owUlUzd3FHSVhSNU1McGxCUE9mMXQ2NHdUeUVES0Z2VEl1dk42ZThHc3VJcG5RaHowUmFKcFdaaTgycmNvRGNHdU5RWXc3dlRySkdiK0dGK0wrZ2IvcFhOTGh1YkZGR2NJV2dHUWJobENwTGsxVU9kYU1GZnJ2ZVZjbjJaMXg0Tk5YN1dSZFhTZ2xsMzN0ekdRUm8rREFldEV0aHZ6L1IwbnFOcjJ4Mjh4d2tsRTNXYlpBZk9oUktwVHJCeXE2SDBCc0phcGtIZytMdFN1bkVuNlBaajRicnVvYVB5bUlYVTBKSmpVenVHNWRsRlQxV0pFOUNpQlI4QzlpYjVYbHhrTGtERWd0WFREL1lvcnE4aUtqRUk4WkNDVXo4MVF4N3FaSktKU2swcFhCVjROeGdDZDY0a2EyVEFJazFTMzhuWll5bnFsRVpVeFQrNCtaUjlFQ3RMc0RkTFVHVjdrdHR5cndURkE2MFZudm5idDBYWE9kK2F6Q051VTZtU1VBdStWMWI3ZGF6MDJkQTdJd3dqZVJ3TSt6eURYK2FUT093M0hlWSs1NWFKR3RZaUNPUUNUTHlkcWVTSHp0aDFucjNqN244L2pFbCtQeG1GcVA5bGpNWUp6QTZPTGtkZ1BvKzJwUk9WKzlHVEhqTkgwSEJud0M2VFkvZWtkbGs3cFNteUZTVEI1ZmZnV2hjWWNtVVlPQWhqVWgwUmUrbG0vSEszT0xiNCtPYnh3cXhXSEFMSkVKRGdaVDM3NElkenU5bHBwdXB1djBOWkc3cHNLT0U5ekZHU1VxTWdmN0JyckZ5b1AyRExlZG9CRjhtWlpmRStwRHNDdHRoR2wvdzdseVljUnVndVJ4RTVoZUNjOVdPMlBXVkczc0YwcjluVmtDRVQycDZYQzQybEsrVldqOTdkNXdjYVJBZ1cyNlhTRnByZ2NNUTUyVVkrR2w5UTJXTXo0Zzg5YWVKdGo2TnIrOCt6ajMwUEhwYkZYZDZRWmh4UnE5YlJZV3ZySUEyMGsxL1k0cisxSWNnVUl6UHFNcHgvUC9BSUprNWhwcEN1UnB2cHplTEY0R1dFSUIvMHd0WGNpSU04c1FLamZ6TDRHcWh5RXZjTXVid3FFZzRnRURIblp4NlNVVkt1YUhGUThtK3k4YWlxenVjZ3BNZGFzeGhYUGdjSHZaRWhDRHUyUllXZUI0NHhEcjl0TlVCMjdybHRpRHdjUnZ6ZERhZWZwaDJpMnowMWIzbVprUENBRlRWVk5GdkFUSVFualZpR0YzeFVETGZFclVSRVh2UkYwU2hrRllMVDVYanJBditINDNVRkg5U1dCUDZaVEt1UVUzRWdjVXN0VGE5elBWUlVyeWIveGtnYlhOL21XS0ZoMlNqL3V1RDRIcC93cHFyNVNCVnRBenQvY21pWEQwd2VjcCtUaFJENkR4R1VoeXp1cGM5TDQ3cSsxVFhiNG9Rb1lwb0JNRTR2OWlmTVlwc3JXaTFCdVRGVGtDamRUWFZ5U0U0SVZ2N3FkRjI1MkFTZGcrS0hyb2pqWENwRzJ3NmxPSWRYWlRLL05PdHBZc0JkRW9FdHAveWxURGI4MFBPT2xhOUhPbWQvdEkyaW54UGRPUDU5OFZNTjZSbzIrOStQNTI3NjhPU1FhSlJqa1FtVlNZVExNTWV2WEI2TGpLd3BOcWFOT1VHLzIxZjN3cXpqNW1HNzBJajBkNUg5TzUxWExBVmdxRDhsQnVwbkV0ZDZZREpTK1FxUHBwL3NWb0lZSm9IdmlGd01LSHpLNUxZWUNjK1V3RitjRTdFalFROE1LbXE2RFVkeXRrVnFmOXZxbU9PRStMb3RKRGNmR1JJYXh1ZmVSeUpvYzVWMTI3RWZpZTNpem4ydlN1eFF6OWlpVXRFczBsRHRGRVd5ZDBmbHNsSEkrWjQwOEpWOUtuUWZYNTY1eFVxRitNdHpLb3dqc1NwaFlOYmFWVENJYWhweVN5SW1MdzVudzN0NVBCOFdTZXNKVmZKVW5nRnVQdytGMloxMm94L2NYUmNLQUQvRFg5QVdvR2lNL3FrbUo3OUhKNHVDTWJ1dEN1bU5XMmVlYzRpcU9DUEVOOXpIOElvKzZLeUQ1SkFrR2JTYldaRGR2TEk3NWZ3RnlCZUNXb2sxVnVnUlNsdHErcnl0ZXQveHI1azJjTnlZcHhhTVpYL000c3VtRFA0bUdMUVJCMGhlQTF1Q2dFWjJtb2tXSmpnY1p4SHdrNmVWZlQ4QzFVN0l2RUJLRWoxVjAwQnBBa2N4MlgvQ3MvZTdUTEFQeUdJRk5vV3lvVXo5Yis3ZTZZUzM1YmZtRm9TOXBBNDRCVzJJeCtMT2kyTzA5ZHVDOVpmSVl2Zkg5UUgzU2xTanZYcFlKWWRzRzJ4ekp5WkZ1TGNHNWNodk1udGNSUlhEV3lHNlN3QmpzVkdMVFR2QTcrK216T3RmNnlXY3pkT2I5cDRQUWF6YVo2SGNQbG5JMm9sczcrMTcvbTB3ZDFyUDVFMFduOEhtNW5mb3kwdXJNei8zaDRBRFdxTk9hN0YxNXVOZVhUSmdiaXVXbk5YVHg0YnkxRE1PZkhOZEtRNHhubHUwYkIrM0FINis0dmQ3dmhyVWU3WnJOSXAzcUM1TDhOdkMvSGlrdWJ0R2s5N3JuZVBDc0Fvd3dJdjVhK0N6c1NZRWpqdTdMSEFVNUp6U1dQQUJWb2JwOUtOa2NYdytxT3ZENzd0YjUvcTZNdHlLYXVtYVpVcm5paGh2SHh5STZOU2dqTHBpQXM1MEZDUHJvVW9yVWdRaUs0SFNDb0pxYUFsMXg2QVE0TWFSSGhVNzJzRFN4djNhRGwwZy9NSElIM3Ixc0cvVU1aMkFmb1FWQTRYdWxoOTZxcGxFdk03UnlzdDEwVVJ3YWdEcytsZ0xmTUJ3TDBLUjNkSlRzQ0RCSXY5UzlaNEdNa2g2OG9SbGovYmgvSSt5RGx5ZXlCdVhtbXNreG9CNzl2S2pPU085MFVKTkV1ZzVyVWlpSldvbHVMeHVKM0piT2MrWEZYeEJ5WGx6KzFxWHZFZEl6c0V6QVl1RVErbDFCQ0FmY0tOZWt3dTNkVys1YzJWRDRhT3p4eHRCQ3dPTUtQZnIyT2lXYTJXd0VXMXJBRXgzaFJtbHhpSndwTlJ2U0JZTHdIYlZkNWpYeEppbk1PT204L0ZNQmdrUVV0NFNTaGV2a0JXTCtMVFVmZERtZGw1dlpxcE4xcVZ3TlRaSjdWbWVwRitKREVSNHlXYk5jT3gyaFVpMVUzaUhTa05yZ1psZzJIaDhHcTZiL1RiRkIrSllZQTl3N3Fta0pYeHdTcVdya21TYkcvYnJNRmJxU1k2V2xub2JnanpWSGZ2RkN5NHJOUTllVzJmSDh4UDhmYVRsZENjSXhEYnUvMmFMV0R2bnkyYjdNcHNYbWh0SGdGcUIxUXBOM3JhRGovVlhTbkMyZWE3bHlIc1dKVzF2WmxScll0THl3QWIyQjYyRHF6djU5SG9hMlZJZzErOEZqbFdObHFqcFMvSWdwVXptNktOcUgyb1l1SGkvZDFBcTd3eXBNdU54cGdLZ2g5WnZNNFR0aWdtWkt2aVlseW4rWVhtNVBjYURkdVJPU1pzL0h6VDlKSE5icmxQRU1YZ3paalBlSHpVUEg0YnBvTkMyMjNsWW1oRysyckFaYnJXWkJ1SW1HeW5xeC9lZDlPdnNHU1FnTU9idlBnSDJ4VWdVeUw2b1VkTHVJUnVVcFBxUUkzVjlSNXJmVzR1RlJWeDd6Zmtzb2ZKMU4rT3ZFQUg1dlRjaERqQTlOa3AvVDAvZTlwUDJCYVBjK2p2amZUdzdrVU5TbE1RdklZMG9BMDVlOU9WdUk0cnR1ZElVY1NKWFhwQkNmQ2pDeVpIRHdYMm9McWFZQzd4d0EzOXI4bUYxOXZFcHd4WmxNUUdqS0lDbzM2ODNxVkhHTW8rRUE2ZndYcGcxU1doQ2xjdW5qMjJCd1NHdnBBV2pPZFordktqSEkvdEpBUE9QN3J2Z3I0Wk4vWlg1WHR2NUJPc2hWbDRBUHNENTNxMWQwbExtWWl6cXlxMkpyQXBpZEg4enk0MFdrYXBSdnY0TStuRlNIUUxMaWpHVVNQNkRTRnZ5YlJLS2Q4WjFqMCt0eGRmY0NsZGRqTzcrem5LS0VVZkd2UW8wVDJOeHR6OVNyZXQvMmNmS1BlMXlUY2xYWCtUeUlHZklEYm5GYkRlbjM0Q2szRldORTQ3dm5OWUVwMDBWYkNhQUUrYnpINlI1YkZtR0JXSTR0bTBCUDBEK3MrMnB2REprbmRIa2Z3UGhZc0RSOVhSZmNJbWExM3B1eEhUMWFhWlNEdEFIWlFCcDJsNDZGK05TWXZHeFJhQjU1VUFYdlZqc1JZUkpuSEJEaXZsblliYzBnWVdEd1FOcG1oTmI5MlRIdVQzUnloSFR2a255d0N1WStTUGIyNTNvRmRYL1RYNldzMzJSSzhFaVZ1YXI5ZmdJQ0FnSUNBZ0lEemZiOVlKL0Q2TkRGOGhQOC83a3UrMzdITDg2M2Z0K3pKL2I5V0JyNmk3OXYxMGY3ZnNKdjIzRHovQjlWcmZiOUlYajg1ZSt6N1hxKzM3RzM4N0x2dCt6a3Z0K3RoMGZJdy9oOWNSZmI5aUgrMjcrSDl2MDhYN2Zmd3lmQ24rejdGajl2MWQzNTFYKzM2MDYrbjlORnI1MVg3ZnFNYjZ2cXBQMVdPeURZejlFbzFKRElOQ0pVOXdLS3FGUlZxQlN4NWVkdEJoYzhMZTV3ajNhOSsvR2xOR3VIdWFFVGkyeEh5MHdmdUF4NVE5N2tBdHFKRU5Dd0ZQb3ZLWTZWUS9ibnN2RjFvdzVsRUg0QWlSeTc4bGsvdmJGWFRjT1J4WVVHbXBIejhnbDR6OTNGTXdLaEx3UFZ3WndhOFpyVlU5dk5WQ0lEcjRRSDB2YjZNamRvb0IrWUY1djBkOE5qbWtCaU1rV0dZR3ZSaUZtRGZEeENNOWV0NURjeWgxWnM2V0NjNDNRRUxMeFNxRExRUGgzcHUrQWxYOUFlYnVDbjZld3BBOGJma2Npek53d3Y4Ui9tTGFrbUwyd3JVelRBbU9aQ242TU4ySDc5MnM5eDlXMk1yUUlkSFJOUnpYVk5yTHl5bmtDZXZVZkVuckI2S1RZd0hCa003U2JUMmREdGY3K3NhVjlSMkh3OHZuUDhzL3RvSkJFaEVmYkFkSzVBTWJMUnB6NzM1bzhDQVpaUzROU3h0b09zWUZFQnFoZ2RpTTVmdk9JTTdQMTQ0bEpxRGtQd0RxYWlBUmlITmJVR3J5K21qVi9mYnZCU05CL2RscUpGbXUrRDltR2Y3L3Z2dFpmam5UaDkwY0I5MzhKelhNcjMyS0RhS29XRjZacUl1RzBPVzBkcy9xZDhKWDh0SDlCQ3VPa1BPN0RwRDFlU1cxaFovVmlITjNQQ3pJMGROTGRLVzc3ckl5c1BsK08xNWl6V0JIRXlaL2t5d2pVWUV3WVhnc2dDMDVCNTQ2MHpLUVh2dUZ1aExzSVd6Rmd5bldiVHE5VWJPWWU3QjlxVy9IVzYyZGc4RFZ1ODRsaFZ1c25SVXlWMVlsRGU4SVJIZGxSenBTdGRMN0tZdjV5dk8zamNMdEhhK0NzSDJHUkg3Mk9EaEgzbHA1Qm5qaHFYbk5jb09ZU2Z3N3Bsa0lMT2dmeHYwN3RuOVEzdGVGWURYb3crRUZvd3NqbnBGYmdSSnpFQmdnVlF6dlA3R2F1QUxBcVBSOGdjKzhVYXJYejMyL2t0YllGbjlWUEJhenlvaUpjeHQ2NEZUbTUwL3N3NkZ2OXJqQkYvVFdNcDUxaEkvL2tUbWJmRndLcVZHV1hENzdtbFVSWU9TN1N6R2MxQTB0OTJzc1VhRGptdThlQVRXZEhPcCs1Y2tmWXdWOWJEV01UVjlnWHQvN2d6THlqRDkrdS9HUElIWVdhVVBSRlBYc1p2UW41WmJjd2cwbEdwVE5YS0pKMkRLcGJneWFsZWRGUXhxRHVtbml2eUw5akgvRGlBZnpZRXdqVThyN1JkeDJleEdVYnllZ2JPaVg4T2diUUlUV2FCbTNNbjcwQTVzSy9wNzZ0MEF4bDJwb1A2dDY5a3htSkRmb2Y4azM3ZnJUbTRoS1JwZ1NCaGx2TkRLTVlOWmFUZzdmOGlKYnVxaWNQcHRMaWRGQUo3cC9qTm5abVBsL3JLUU0wL2hFTTFrbTFQWVRvWUtyc3Q0OVNDYWc3K1dzckMwd1I1TEg0WEk0TVh1YUw2cXBuRUNuQU83MTBNUzVoWEdkeG4rNDB4VmV4MUVhOVNNc3NONXFIY240MG54aDdoaTJHbFYrVG82dUdKaUkyTnh6R1Q3VWpUY3JuWllxOVNjS1ZiNWcreEdJazhNU0daSGZSeTQvVlowZGI1YXZPaGROM2F4dnNyNXJmZ0U1TnJDVVE4WUFqUDJGYU92SFFTQmZIaVN4M29wMWZPT1g4UEpjSDlaZFFoT3BjeFF2V2ZzV3V0SThrTEl3RWx0UzViaDNJN1Y0alBJYVM5Uk5qb0o4bVBGWWtpdGIzMEhYeGN2OUVjZ0NaVXBkdXdORzFzOW1qbnJyL3F1UHp2ZGxYWkZTZHJRdmQ3SFZtTG5VbUVsR0RrVk1FWjBBSmwxZlR3ZENqaTIyUW16Y0l4T3AzQzhBaVhOOTdkR2JzclBYWWY0cW1BUU9melJ3dllqT1lKN0FGcmIxY2FiNE16cEd6VlIvUzgvM3J3TkRjZFZrUWszcDJGWEpDWUZEcEJxUXBoVGJ3TWt0NzRuUkxoL2hUSHJuOFZxN3lRUEdLYlZoOEROZi9xdjRpQ29yenNXS2JQT2d4bTFpRDIvTFlvTVl5dDdIc3RSREwvOWlpT1FzbjJrSkFvbU9OWXhIYjZ3VkF6N09CVmw2UzRZUUZTVC9rT24zcnl1QUdkT2lJakhoS2ExMkR4YlRHQ3I4TVdaRW5MdklyVndOeFkzbC9ybFJGam4vblVPdkoyRU5sTFprYzU1OHVEM2gvYXc2L2x4YnYxTUhkOEVLQ0pZS0J4Q2R5TTBoSks4dnF6SC9OdlFKMnVkem5NSW1saWNILzZFb01NeklxTGNZMUZuSm9CY3hKc0d5d3JMeW1BblN4OGI3UEVzYVVBdXdXa0hsdVV1aTdVRFIwK05RMnk1NGdoS1lYRHA1TXFYQ1BYUGVLblRqK2NjMldiNW1zdVM5RHdkOTJ4b3F5bi9KYW02NEsrT3NXY2RPbU1TWWhNSjNXUlpSdnFtcFFHcFhVMy9NbVg5cFcxcmVzY1lObFJuTGNsaTZWNjlXeUZKVy83Zkh0SU9sYmZGY3BHMW5sUE5kZkdYZnkrSS9mNFppSHBmOGFBdXdKbXVYVXdFRDR6ZXZKMlNZVitucnZpS3RDTE44MzY3cEFQd093VkE2MmFsVjdHWDFjNFI0WHBjbUNydlhlM3N2VGg5L0FNcVdwUGdpMVpUbzlyZ2RmYnFOeVZkWWs0UzUraVNYbkxPZjNjUGFwVTkrNHBQdjBrekIrcHdDTkpKekErMUorZDd3NWt2d2szY3dSbHh1YXlpK3oyWlF5QUt3RUZ2T3prZllreVo1OXFOTFdyMEw5RmZoVmxQNnFDOGM5WHY5OU14N0k4SDB0Mkh5TDJJdU5KYUNaaWQvUk0vbmZpVGhpaCs0ZnFQbnBXcElDYk5VK2dMa1Q0R1lFK3oyc2hGMFBQa2JuOW1RTndqNk1TTkhkcEkyWkhOOTNhcE9JdEZuMTVYdzk0ZlMzeGpkNTY0bFZvZkpIOFJKMzVjOW5RK01aS3Y2K2VSR2pvUmo2NGc1TVRrUEpoNHFPL2RMZjFIdzVSYmRIQUh6MU9TQXRialdaOHJYaXdmT1UxU1c0RnROTHlyVjd4N29tZytwd3R6b2d6S0hnZFplTVI1anpHcTEvQ3JTQ3hDVFJaa1F5TU5MeHAwU0VSdnBCd2FUbldVTEJPeVltSW85dFZKNG5KUlFFUkFPelNGMTdGWTBHUVVLVDZacllvNFJSdzhqYk9KWklpV3AyZVl0VGxoRjZaczU0WTVONmhMM05FbmNTTFJNcTlOa2lBK1pQRHJqL05qL25ESVZLNm9kNzVwYThNTjYyNFl3UzI2Zjk3NHhBUU1BWWpTbkowUFNGMDJTMmpyU1dlYzAyWUN4aGJkV0tVRkp5b3Jzd1VlT2lRc0MxQUpqQ240SHVnQUYxbDhEQ0VHWDE4OHo4a2JGTWYvZ3B0RVo1TTRnbkZrR2xoTkhUQ0JhNGlSQlZ0WjhQek4veGVEcEtBSHcyWXFGaEdSM3IvczdocGwxaHllSnlYQkpmb0lTWE1JNGpFNVFNcE5xR3pQZ3dBaHcyMFJwSHk4OUxtZE9SODlXbGNQRmRPZEwreFgwc0NhS3duanBUREJWZTdzOXd0cHRJNStaTjlRVHdaNW9zVjhmdHArMURMR0dQK0dYT2dpMkRUUFdCSVpLbC9mNi9FUEprZVNyOTdyNUUyeEpFeXNGNUhtWjJlMGIxRXRUM1hTWVlxZ29LNVhFY1F2OHlvajBrZzZOckRxMWt2ZHBOL05MQS9WVGdadjB1L2dSbmJLcXA5dHZjcUJDcVJPYU5xMkxDaUIvS2ZLVVJ4ZEE2ZGdBU05ES3c5RTNUVnVIa1pvSjBCeXJVZk5TUXBnalpIcTFSU09jcHplWWlQTVFIbXd0MVJnaU50c2VncGJaUE5wb3FVWmxxdjZvQ2J5VE9VZEpqL21MYnNNZ0Y3Rysxbmsvdys1SzZ5c1c1VXBiWVd5UDEwZldRMkV5YklnUWZpTC8waTFhV2VBV2V3V3Y0VDhUYjNvN2N0MnFtRFFXVDZKVHF1MEVQOFNEcktFMXNEbXV2U2IvRDdUYW9LYXF6eVBLQ1o1bkVqNHN4Tlh0OUtKUnRHT1d6QXNkOWJMTUxRZWF2RTJ1UVk2eGpFQ3ppellzakdodndkMHBXelo2Q1dhYmxxT01VWUxKV2JHbkFrYXQ1dGZoaHYxR3JYQVZNSHROVzNaWjFRenQ0M1hXVG8zR2p6YTFFSXJZVVFNcDBSOWJzTUgwVjIrN2pYOEdjYlZUSXNZL0k4Tnd5NWhlZURLTnFaNTQvbkpDaDFwYkIvVUkvR01ycmVTS3pnUG15MnBsWkJTUjgrL24wOE0zK3AvdEp0eDBqUUVvU0xDanordTkyTGEvUDh4MW5ERGZpb2c2OFVqZnNQYXVOaGh1a0FGNTM5eE1WVk9IVDNMTEhWNUs0bzFySW5xMTM3c0tNN3ZDZ2NRdmY5bjNydVZPSm9NNjIwRUhNWkxEdUlKQ0RCc1IrYTZXd0NzVWN3MjJTdnlUMExWZlV6bmFLb0tIbmZXbTVjTjArUC9FY3JwYkZ2Z2NWb3RKQ1R4cDlsc0ovVkVUZFZOWFhYcHZuYTlraTJEUFNaTHVHN04zcE9uOTA4V1pKcWhTaGQzSS9NQUVTenF1YmJUZi9CTStCRjNNTjVzazM4UHVHSDF6SFdTbWkyZjNwOWNBY0w2cDRNK1NhYU5yeUpkdm9oWm9ZK2JpczdDbWJuYjV5aXIxR2JxRjBPelFaQ0NGYUIxdEtveHRDKzRxVTU2NFJ6YU84QTdIMVhuaGl5VUtwOGhUTUY2UlRpQ0diN0lUVTY3b2lCcDBJZGxJeVZQTi9heEV0VmV3dDZ0QTE0Q0tBejl4TVc2emZ6MTJvYXR4RWVPUGZRbitHZU9acGlrRHI0TVVKOHZUeDk5UC9nMHVibEp4aWZMZkM2NENmMCtOY3AzWmNlNTB5QzE3UG1jaG01c2dsNUFBb2lUZTJFeHppdE80cTZFQWEwWXpPUkxyaWZkQS9xMzNWVGp5WWkvVStXdFNDZGt3Ym1XR0NZMTA4TDhyQ1ZaVTlZTmdYbzN5MkxtL1VIbkZIVlI1QXVpQ1V2MVdWbmMyalNoNVpxV0hldlFwTGlBSXNqaTJwTVhmZnExWFZqWXNLY1VQUHFPRFk3YVJteHFuRkZWUjM5M1pvSi9jbmdYWm9oa1ZxZUhkRW5yN3F4THV2N3FGaU5aYXh3YjBzMkpXSlU2YXRzYlpRQmlrYUprS1pqSzR6Um9xUzY3dTE1Wnp1TEpNYmNOamZsNDIvdk4wVklQNlBQVUJzTzA2TlRKTVNPMzQ2MjN3M3ZHSlVONzluK2pRUTM0N3k3NVgvcXNpSWtWQnRVbEp4czF3RnprM0ZOMVdMaXlhUlplN0JrL0hValhpdHhPWGE4QzRjTUUzMlpNUk5XZEhrMFNmR0JXUElrZmlDS0lka2ZVRmJwemNrU2xSMUhtUUl2L0N5cFdBSEFjT3ppMWVCQXBvVGdGQ0pRZzAyZ2cwRlZScU9RekN5U3BxSmdLcEVBSHBOdnVEc2hGcVNWY3I0RkRzdjlyL3Zob2NIMExFbVlnSWlzYm4vT3NOZktGQUFDZ2NtYlRwZCtobDdFdlVta1VpSTBDcGRkY0xQZjlEdEl5ZE5CRjg2UlVILzBmSkJmMUE3UUhOVDJZUDI4dmtpckxDNi9oK0hlS1U5WXgxckU4WVhGRUYrbGFjbFFIVTBVUXR2d01XOVJEZUxkT1BaTVlmaDlPRHk0eG5DdkdicjY1bjN1VE1IeEZycThhSWNMeDNvdXl5aGwzTFpJSGRHNk8xRTR6amxra0FzT1NBKzdNUGhyN3ZVV1VhYkpLRlZqZXJZT05DUUREK1NWNjNOa1FUOWV4S1M2STdOWEFWYkVBSDNnUHRWTExFRFRPZHllNnRyekdBbFdIM05wRjZnTDRySm1sUWpmWmxXTGZLeThReURBRHBmOFppT1k5WjBnTDF4N1NZSDkxcUFPZ1ZuQysvT3YrMWNNQmF4dFRHbzFmVDFuVzJaYWdHdEJoTE9HVmlSMkJmdWw3cmJNNzdwNkE3MlZOZHBSeW1yYVA5aDJHUHhSRVlyTHVtcmVBeEo5QlVoMjNNcjNKMGFWQk9EZUpSY1UxYXQ4NldyS0RMeVFSWjdaZ3hMTDNwMW5zTE9vWXZDemRvQmhHbFJiWHdKUVZDUHlxTVhxK0hhOCtSVUw2WWJEdFVwQmJERHdVcUVZSTFrcy9kZFY5MTBBN29GRktKdXZZM0JLWEVBLzFRV2ljR0grQjJKZjhoS2NDTm5mVDJ6OExDZkgxRHZFZzdqNFlKV29LV00vakZqUHdWeDRUMHQzaEdPYXhBcXpLL2M0MlF2bURXVlVRTHA1WTBZY2drWWc1TFg1cDV4R1lkbGlXM21KL3UyUDVxbys4aTlpa0xMSmsycGdieFRMMEF1d25XRE1rKzZLWlowb0xXNlZzdld1RWlmYnJLaFcvRm5BRmlYSXl6djk2bkU5cXlxelZvUkl3SDgxREFEaG85MXNwRnVuQzFrMzludHdidTM3NkgxUzZWampXcEdid3RYMllFTkp6ZEJNRno1VXZEUGFsajBzZDhVMWxSNzRDL3VMeEdkY1F0NEs5RlQ1TGxnZ2ZuaVg2V0tnMG5QTER2UzhRMFdnTnRzRHZRdFMrS2lEMjI2UTg4TmZETHk1aHhNeDRwSWZWd252bjVoVjZDS1AzYkN6YXBRLzE1R0pPRXBCR3MvdWF0dzZXTDcyamJhaFQ4dFhocTJvK29yMWdTZnpFdlRyODIxaTBNdDBUYXBuRlpxM0l0YURTUUxEMC8yMlRkbVNUcm1QVkRRK3lyMnBLZkxLRFFZd2lidDE3eFBPZ29aR0V6N29jTTVZZGQ5Q0hwZ0h3SDM5UnQ4NnU1bm96OTEyWDdhaGt5VGM2bUVBVzIxUGVLcWtVNTlIVmVBMHNYM0ZFQmJoSnlJd0oySkpmUUs1aDQycFVuUzhNaVBFSk9yUUJLbnZ5OEhhRjRDaGpXOUlXRXpORDI4RHJEUmR2eHN4YmNUc1lCSnNVbXpmVmY2eC9uWWhIUGZiVlFJUi9ZcWFPSTVLaG1UM0cwUmFpSllxek8vOEs3S21MVVBlWFZJLytVUDdPUGVhNk9YajNNdXQvR1JreUZkM0Y5TzBBTDc3SHl5SWJpWW9nZENvd2lIdm1pYmRKWVhUZWFXZ0F0SDVZZ29wQzZHYklMTGovVE5UVnNDbjhvandoS0o0SnBGVDJyN0VNTmI1N1FReWhNS1VZK29Oa2Zuc0FxRURFN1NFdEsvcXljenZYK1p5aGtPelJ6ZUtXMHk1YVB6MDE2UjMwVTB1WXl3V292QkZ6SzE2Sk5NcU1HVzdEbXF6a0V2ME9hNS9wU3BJZzhRTUFYeDZscC9pd0Z2Mm9HVEUySmk4V2VEQTRLTzNvL0FOd0V4Nm04dG9lTGVONmFnSHEvZXV5a2tZeVI4b3UwclJXZjhpb00wZXU2MFUxcU02U2t3aFBUcll4VjNESisrWWY5TXIraDdaWmV1alRNWU1oYXl2bFNRSU9aMkJFU2JDTWtvMUM0a0FXZjdZRElRRzBvUE9MTXRjU1NsYkZLUlVQYzYva2t0ZjJheStyRGVkZE9ZbnBCanQrczBjMjlLNDZERXozVlFCRk1TektaaHBEalV4MTdZVFN0MExSNk1UcnlCUzkyMXVFc0hYeFc0YmYvVzhrQjZmUkYvcThTc2psZ2NLWE5tQzQyNHhnRjVPMUVxL0J6aG5EZFdHOTd6R0VRVDh0T3VoTHMrWEN0Q0lJV05Jd1VPeWtzdk4yOXRlaVpsVjVrZCtDR3BUTzFhM2FydHVCamluQWlEeFgxaVEwbDB0dE0vV2J1aFdHc2RrQ3FMZGxkamt6SVJVL3c2cndHdGNEblYwQy9DNTQvTFdyekYwQTNRTXFNYzBuR1kwVWQzQlA3REdRakY2T1hXeFZWREF5YU1HRFdrRTNNcXNZWHZZd1NHVDRWMmhXOHQ2aVR0UFU5OXlEdEdvOXVYd0dXVmpUazg3SkVuaDFDNGJkZ2JVTUxtd2VGQjJobGRvNTFFSU5zK3Nia25GTHFOMW9RcFJsSk52VlNJTzdIWm1GWEdXdVZTelpMQTNXUDIyWWhlVTNDMGlsaUozUE5oaWN6dndFTWNUKzRzUmhNQzc2c0VzL1RZSDVWcFVwRVVpUnZmWWZraWFaWGp0d2dYV3F6VDZtYnIxNFJ6UEd1RTdTc2svazJyTUNkaGozRGxBNDFaM2pCMFF0M1lyTlZJdWgwN2g0NHZvWDNUWG9Tb1NjWEZYTXhqRFZwMnFmZmxzR2Jib3Y2WXNldnZWY25BcnhYQTFqcHdMZzMxeGtXbmhMT0xKejlsR1M2WUpzaGx5SHhSOTNINlNWRDFiYng1TGlOZDVwMnppL2diWmN5bFhKcitOM1Y5UU8xU0krVjkvaFJHUWczZFl2a0ZCU1gzR1dha0YxTGViRzFvMXRra05nemhIQTU0SVNmWU9LeVhGTkFLcldxZXFEWjNSem91ZnJjK1FQbXh5NGwyMzBaemhoM3Vnd3dxVThueXowMlJVdW9wVjkzYzlxWXlIZU1DeGUyaWlVdWozaHUyd2I5cW9icnRkSUZzUm01aXBSc2RZS0d3d1htZUg3KzZPSEJ4V3FKVHFDR3lyOXQ4VWNURXNmOW5pdGs2eUtiY242aUpqWldyTnlzYktrRkFCM3FObWFiY0ZXb05sTEV3WUxFUm5Hd0oxMk1PaG5VbjVYTjlBODBEU2MzTlZNWjRKbkhFTkgyR0owZE1JVVpDQng3aGhLUjlUS1ljaDAvc1NPUGJsNHYyd1kxajJrUG1xOXRoMmVNNUxYZzVzaE0zWmkzQWJZY3UycHd4NHlwZ1daYyttNXgzNmlBUlhDcnczbWo3aHNMTDJub3ZjcWJZS1pjaG12S1dsd1dZN3JIMHUrWURMb2JPYkZFLzBqTGVXbythMitzTWVrNDFBcVZXT0I1MHhqelJsVG9SMFh0YnJMMHp1SHhYelNwc0FWb0tNeEpJVHM1MDY1Q3JJUERIeW4rRG5zM1NkN2tKUGRJL2dmV1NmMWFEZUVGUm1WUVhCRDNYQ3VFQ3Y0Ny9WQ3MzZUhxeE1ob3Q0QUhlTUpTTVFUOHNxRmprb3J3bEczY21aU1FVYnhCazJJUVFHWHpNSkxjNHMvRWJ5TlZLWFBCb2VEVERnbjFlVVVKVEE1T3E4K2NoZjBqZExuTHh4SGRtSTRJa3lQUDVwQ1UzN2htUk5reG0zNHJ0K1BZdExFMCtScHhiamxtM1FQQndNa1k4NHJzWVhWZGdISFR5QVh4cm1aWHhiN0JERXF3S1pCOVBLQld1MWlqZExDa3ZwNWozSHFOelRjMmd5Q01uV1ZSOUc1ZlNXNEJtdjNuSG1TYmdEZFgwS3Zlc0hIRlVveWJUTys5NTdOZEJwakJvem5DUUJKOUxLeFp0ak9rMUpJTGNtMkxXUE4vYlpqUzRCYjdpSVgveExHOWtIaWlpcEtQRWY0Nzd0YW1FdVVpblpNeGZGV013SjExeDBRMzBUUVcvZEZlU2Q4cmpmRWFQYytldTRZSFRwcUlwMmMzSG9HT29YT1NlYWQzc1c1K2oySXNjYXNhSXJhaGN5TjBHbjBDUzVHK1NsdjFKN1hpVkNmcE1jcUd1ZXExS252b0lSYWgzNlIxdmxpVDRDdjNNSDI3SXFqZi9MRDU5b1JBRGxGZ1dRM21tSlEzVGtvcktPaEROZUh3V0hiQTR4VkVaRThWT2p4OXI3YXJ0czluc3lIZEdlWTlQa3Z5bExHVjV2Y2Z4TEkyMDZnT1hCTGs5em9pUGRwQ0c5aHIrQ1NLeDl2ZE5FbGxIR05GNVRGUlZTL1JBQzIvMDVuaUdUM0FZN1JCRUw5Mzk1Y1lWaGtXckZyRVVwazRkdWNoanNjZE1KU2FvUjhvNmMxWHNUaVV0NGNodmRrdlYyWGlteTNlSzhQL0wyOFJycCs3NnphekdTQmRiZzRBUmlIQUpyVVpCNkNTWVJYQllOMVMvRTJneFVLSlJkSzJTTUE4N1VBc1FaSnEwd0VpRThzeGlnaWtzNSt3QjZLUlRBYnZjTktIQllCWSt3UTJmYkI5dmtsMXZYNHBEamFpRkVGQUlBSngreGsyNUx3N1I3cjNyWHJZR0lXZGluYitVSnNlMFZ2b3AxazJhd0NtbXFsa25RUWpUMUxmS0VsZURwenZsRDZteDFBaHp6NStMa1VHb3BBb2h1WTJOcUVTbitEdTFQWHJ4VDEvWXVMb2ZmN2hLdExuZmhEZ2hjQ0RhOGE3RktUUmhrVXhxZFBuS28vMXRzRm9EUWJIclJtMS9ya2d3cnk2ekFZaVdqZmdCRnRFaXVsL3hKbjA1SDBPWC9yN0NGTXZ0bFg0ZGYzdFNnM2xLazRlY09RVzI0RDRhVTRFa090NXBPTDFXaDcwQU5JZVA0ZnpvOWhFK0RkYVpYVG9MZEhQSVdCY1VNSVJOQU9HbzdIN2FEUzJGNjh2NVNBdk8vcEY1ZGNPdytoQTVzL3RJdS9IQm9Wb0JlWERzNGxjQ1VucVgrY2NlTGpOdUkrS3VXLzJXYUEyZ0pzZEtpRnNqVHN4K0kxMEE5ZFJ4ekwwaCtCSGFxY3lMZjdFUkdTNFJvTVM1cEJyeW15TEFZWXVkKytOUDAxTytHZUxFVXFiSmcvd25OYnVROEJrVERDc01tNllYVzluYnIzSEV3eHc3NjcvMXpTK3M2RUZVYVVnWGJwM2RTTVRpOTVqRS9GSDd3SC9RMXp3cTlyeWRMN21Ed01LUE9SSjF3c1Bwa09TK2FJWHB1OU1VcERsSUY5UmVxekRuazk3N05YUXphdUNKV05QQ3FtbXYzZTRlTnBjTlM0dmtOUkhoM2VGN3pReHlXRE1xM0JmaFo1WEVjeDMwRjVmKzFCKzh2SVN4MFkxWFRGSEZwbXFqYXo0dlgrTisrZHAzY3BWdkFQMi9RdHBtaWhHTGtWK1JaTXZQeFBkbktORkJqWHlxSnJtV0xyN1Qwd09kS1l3bEtTVTVlbUNRcWdTSmVRSW41UTh6T3hCWFJhanhYZTdlOUxEUTVlOGpqUGl2S1AzV1NYRVNlNXlSNDZNT0o2bWZGdmI2NktSZEU1T3pjcmZUOWZLWXhLOWZWdzhhMkFXUklFK2I1WnZ4QlpIRVlVS3owdWlTdndFTHVicDE1L0NyRzZtZlJEek1NZUx6ZDhxNVZpWmFlTXNCRmNUTzdUMmg5OTI0TXZPdng4anVOZWJVNjZEeVhnUzdmWkY0UDg2cEVaY2VWRGt6YXhURmJmRjQ0TmhSQWhWdytSaG1KMUErejEwSGxpN09vS0RweWNaWVY4M0hDNDBuVUZPZGFJcHBtRTJxM2NobkEweHVjY1pCd0hxQkQvV2I1ZlR1N005SWtvMTRtajhvZDVSUmE2Q2o1TWxRSXR2K0poVlZxRHFORGo4b3JRM1lVYjVTUzhIMWgvRStwM3kxY0I1TGhIQjRSL2Y1TDR3UDMydUtzVW1uUVRnb0J2ZysrSTRqV3NPdWx5dnhjRjFuRDNaSWUzbTM2c1ZMMnZNS2JOL2J5WEo0TmdZZGJwdjZYVmxYbDE4VmdLdUVVa2tuRUFkbWROOUNQUzlOMjBlU09mS0N6NkpIN3JVa0pya1JjdEZ2aWpReGtoejdkNHpWV1hwTVlrTEllM3hsK2Y3emtKbGJqczBPVE1iR0JJdllMdkg1eUlKczhscEJpWEtkb2VHZmRBQVJ4SVNtWFRwbXFXYm5GT2RBd1ZSQ0U0TDFhNFFWZk1ERElXVjhXK1AzMi9rSkJhWVNvNXl1WXBEOUExMnpsV25UL1lzanBDSVJ6bTZFWUd5Smo3WWVJTThpQm1YMmJqZFBmeVlnRFFsOWhtVWFjM0VQeGp2WlQ3VFRFRHJWWloyZ3pkaWwvVDVzbkJjY2tiQktCRWIzYWdkdzI5TGwvVVdaMEN4WmRMWlNaNnRMall6WERZeWczOEM3T2d5MHhtVElKTlp0ak8xTmQ2UWJMSnF2dUhkaUFGem03L1FiaG5oUUJrTnJnRXZRTVVkYnNvKzlaakpKSTUxQUh4cUk3UGhQN3BMZE1QeHFOaHpwdEZOZmx1RW1rcEFaL2FINGFLTjBzeUEvOEI3Z2FwOUtzZ3llVzJnNHFMUThmQmRyU0ZzVUxOdXJJdmNoSWtkTnZuMHFlZGJNb0JuaTlxRXdjT053dzYrV3BOd0NhQUhOR09nSkRINkxmZWlpcW5zdjVGQXZzbWRUU29uWSt0TWtHNEo2M2JaVXoxSEE2Q1BOSDFrUEhHNXN2elBoRnZIN0NJS1ZydW9ZakVUTFZuWDJkRU4yVzBkUGIvZm0wcEtSQk5hTS9tN2IzRUpVRVJkMTBWMm5MS3NGeWZUME9WWlNPNDlSNzltRVRWaEVUalJ6Y1FkSVdSdVRtTmk0TmpOYjV2QmhkZTJmWXNMb0V2OXhrTjFsTDNsY1FaR2hFOWN4d0VDc2MzNU1SeEhuWDU2a2ZiR2ZoTHlCQWJrL1JaSW9QSHFmTU5Ya1dENXJPSHN0V1RxM2NZUm9yeUZaL2FEbFhVcjJJeHA4aEJYSGRXdUZ5NzQ1NjV1K0YvRGxzaVpxTmR5NE81SnpEZFdJdGY3VDZCNGFzaXZ2OHllR2lQdGpuYnY5dVVlMUUyTDRjY0Z0VTF0dmRyeE1MSkVaOFhKNmlVV0hDYnhmUXc5dDNTS1dIb1diV1l1bGZWQ0NKeUhhSGplSGR4QWdkUC9GZm42OW5BbThZRFp4K3JQWWVrU3VPZWxJMTVWWFJ3NWhvQ0kyb2VpYjhiQjlwWDZYL1BqOWRKTWJudldTTGtRdDhEREdwaHhrcyt3YjNOeG8yT3NHTVJ1Tjc3QThHMm52K0FNVnU2ODlTMy9FdTRDbmUzN0d2WWN6WDE3VmEzdndxSlRJcWNzdzZYVGtRZnp0Sms5ZnpjRy9DZE1id2tXdmVESTI5c2tJelByVFFDVmQ3T2RGbm0zYkxYd20vSnNscCt1Tkp4b09NQjJhak4zQVJhNHQvYW1aeXk1RytNL1o0a0FCSE1XSmQ5T1ZHLy95bStQWWxFbTN6Q0FyaGovZHgzeEpoMXlRck5WUTErY0dCbzh4WkVKQTlRSkZraERwOXFXMmwyNnBDMDBrc0t2bnVpd3BOTmdnVjVxNzBtREp4MmltMUFXUGVrU1ZNci90MHNsdmxHQTN3Z2o1b1JWS0NIeHNySTFmcWtKd0lmczhJUy9tUFM5NHNVcTRmNURoSWZBRVR3cDhqb2JLRm9rRkJNUXhjZndwVzh4c1VzM1M3ZStkMHJVV1oyQ3h5aHlkeVo0MU9IVGJjcHIvMEx3L0ZXRUZKTG5zQVduUFcrMXFCT0tUaEt0SFhXNzZGYXZnYnJQcTM1WUtrUjVyRm5lcG4zN0NqZStnb1NBcVdOMmh5aElNNVNqb2tSblRXTVJYN1hFc2FtbE5UU1laTEJ0THlBYnpBVFd0WExicFB4NVJFZEc2amxOSk1tZE5DRFJTR0tvMVVCdjY5V2pzdEVPUktKMWZGWVhSaVlNM1NwZWxzN3JROHRDdEsxQ2FTblhxQzR5SG8zeTZJNm1wZW84QjJXcGtRNVpmcVR1YmdnYmg4WVdRcmp6eG4rUGoyRkRDNVFIa2tGbHc2ZGVzZk5xZGZ5VEJ0R0VFTlkyWTUvZjFPMXk1T0wyWU9QWFpNU24zTExBc2lObTR6RU1oR1MzOEp0aUhKZ25vNW1TeUhtNEJJa29oMU9vREF3ZlVMTktsZFd2cnJlMjc4ZmREM2U0R3lHWlRycXBFblFreEEzSmFqNWVrR2wwWGlmVVdCRnVsNFFJY2p3YlpIM1g5ZlJqdHFKYVFpNmJCTHhBUXRVa2l4M21waDBsSEZxTXhlN0xaNlZZd0hFTDFIaVhGOFJQdEY5SXZ3dlNmWnJ4NFpDQkZENXRMV1Q0WWh0ZGhNc3pjSzVWZXVkSjN3RldrMnd2MktNdHFVaEE3N0VOcGtiRWhnWUt5SXVWTDRadlR6N2lCSVBoRGdwVzIwYUlSVGpDc0ROSWlacDB0VWc2QVVqUkVYMUdZNU0zVlFaNUhTUnV2ZDJzL0pPSmZ3bjdmSW05VXZMV2hNR2RBWWFsbUxBSWd4cW03My9IY1piV0NacS9kN0YxdGk3WmVxenNya2tWK3JnajV2Mm5MODc3UE5RVVp3bTN4dDhKMW1pWWlxSEpJVzRRdE5JcTA0TVdPOUZWOWZyNEhFMFF6ZTd2U0NiajdZNHozb3ZqNHBabkQyUlVFY2FpWU55ZXhZUXcyd0taMG54c2t5OTNZNTlZTElERWJDV2R6eXFjcVdaVjRic0luV1pjU1RuTTEra2tUb1dCYk1ndzNoU2kvbHFYeVpVQktkb1cyMkdTSjFCNWo1QU5SdGkya0pNNlliVWxBbU9wdkdoTXNNT0VwUitLcWhEWWpPQzhUV01tOS9PT1VEYnZidzBmTDdGRHN1NzRTVzhlYXFad0QxMHJKZnV3Y0JmWEd6WUZOUUZaY0hmYnFoeDM0enltM3ZKYVRTdTFuZEc3dVRYMHdUNXVBTWtXRDN3Zlhsb0FROXo4anpWa1ZiaFVGS1BXc3NnWGVyQndUNDRjMUlmWmQ2N2h2N0g1ckYwaTNSU0RkcENMRldPSHZTOStuQTIzalQ2c0dBMkFnTTFJQVd3NkVzWXlEbVladHpuOXJXK3l3aXViMW53bFB5RlA1M3Z5SjhsSXdFdS8wSWcxb1BFeGdxblU1OUwzTEpOSmRoNnl2TGF3NU5UU3NQN0dVeFJPMkc5ejhOZlJEdlB2VXM2clRSVisrNDVpK1l4aUlHWUpVOGNpeEl4ZVF3SjBOQ1J3cGEveXAwdytwekcwZ2ZGbnZwRzduY2JwRWJPNi9NOEJsaCt2cjJUSHROek5zMnBBNjBDUTZxaHZoTDBxZTNWS0VmVFpNODNsd2JpWE9mMGptcEpYcU5YNDZ6VFZvRTJGbTdjUEgrdDFqV2ttTDJSWEIzTWtkdWtVeks3Y09na1p6OE1xZVQwSVN3K3RjNno5UHRibzV3VXVYbGJwZ3hxaHFaV0pjNHF6YWI4bmpVRzFDNUNiZ1dWRCtobHNVVlpRaVVEWjlRWHlKbUE5SmlMZzNWMEtuNGY2WVdESGZEWE5EdnlSbVB4UXgvZ21qU2pHc2RNb0VSMFM1OENxS01FTExyandnNHhHTzVGU2Q4ck04ank1RDlpWDJnYWZoOG1yNDVIRGJZc2xHZEY2d3UxMS9oRTJLRDBDbzRmbTdCMis5Q3dtc1daMXg2UlFmT21LYzZzOG5CQ1dxeWRPb2VIRFU0cCtRWERBVDVwTVBVOU1JRFJlVlVxT0JGS2o0WHRpRGJYQ0VGc05rV0NUc0FDbFRjTUQra0crUWkra3h3Mnl3bEplOGVQZ1NpdS8wdVZqaENJUElSNGFwbGR6bDJ1dENJT1BiYjREUUd6NndBZHVQa0FzbC9pSjJmUXlFZ2lFR05CYm5FWk9tZHVDVkppeHNEWlRtZkQ4bnVjTUpkNGg5b3VoaEtBZlFYMks2TCtWVTdsQktCYkE4TjF5dTZ3WlJuZm50VWw0aE9jc0NGOTlCUllWdG9NTjY3dFRUWVg0ZkpNUTFNbVhnbmI4NXB4ZnlwMHRrRGJRQTZDdUc5N0ZlZXkzWWRMRlBhUDFBNzJXWEE5bitVLzQzZnZoaDRXNWlkM29iSUppaFNBMUFvUFA2Wk9Qd3B4RGQzSUhlL2c4ZzUwSWxXOWsyZ3ByTjQ0VCtjREp2bkJENlhQNEx2SEJ3NEhPNlVHcnc5U3R3dmFYdVVmTkdTNk9nemZ1NTRjVVhNazZRQitBKzRrbFBTVS8wQ1dWYmNxWm9xc0FWQ0hOeFlRQ0d5c2tTY3hGRTNUbTNqT3pGWVNueWlZSTBza1oyb1E3bHEvZ3YyV09MZ0VVNzY0dzlCMXR4aDJnSTdhSDQ2Und4S1E2c0pBVzI2aERnZzF4YjRMenNqeENYMXVrdGZDeVVSdmMwTEw4UnE4OG5RZ21FNnc0YzU5Z1V0c1ROWkRQWGZiUHZqdU4zTi9FOTNrbWUzSEp1Rm9GNFRRWmdwNjMzOUdxbTNtdkN1aXdUb2hTM0NBOUxtUW1vS1RKdzVDQ1E4Zit6Tm5pYlRvZmQ4dDhHZGJzNEwxL3kwNHdadTJ6SGNCQWN0dzBYU0lsaU1BOVJiTm82b25ocDllM2gwZEN5NlJQOSt1WFhtYXROck9qN0kvVGZMVldnaG5lcmJYdVN0UjlndU1ReWttUWJnRkF1ZmJhZjFiUVhjWkFEckQxOWpOZFVJMTREWms3MGx1TDVvWkxPajFTQ1NtTEt0S3AzUGM1VThiVXlQNUswNTRaaEFSbjhPQ1ZmQzJsSjBYWHZQS1hESXhZZUlMbzU5SVJ6aXRwMjY0K2lnOE1VN2NqVmFZVWYyN05oRG55SlhpYWNDQzJrSUphYSt4Q2p1dFpUeXRwMGVob2FYbGhpTDFEUHpLWmgzSS90UmZ5aDVtQkw3dzd5NzdReXN4SFlyL0Q5N1o2UlRUQ29EZ0hZR2RVM3dLYmI0VERVcUY1Nis4NzA1eEVGSldxcGNjUzZ3R05yVVJnSHVDanlvVjFXMmtHK2psbGZMZXllZFFsbDM3UmFsQkg0Mzc4VWd3eDZYUmRldTMxa1hsSFQ0VXB5R0ovMjRrVVNHT011S1IyUTNlOUdmOHNySXEwN2lZSEg0VTlZUFh0a0Z5YnkrTi9IQXJXdHpYeFZwc1I2VVc2TW5GNHJSdnJaSTBXbUtjRlBxRUdWaW8yNG9QVitnS1UyY2hTSnAyRUlvdkZXRTUxM2haVTIvaU1vaFlCbEhqRDFnRCtyeDlvbjNYSlUyVnBMYTJmK3pTUjhnbW5VM2xTblFIUElXMWFnVnEyTENPdnlRNlI0TkpGWERoL3hEWWpnVjlsL1BxODczc3NRVXQrOUJSWWtXYmpJYmJuWE5qVTl2eW1TVVZzeVQvRHk2NmVVcjlBRDBTb0RZVkpVVzJLYzJadml5WlhVWm5YV1BHSXNmbnNoK3JYaDUyYnp2M0NFNjlDTkJDSW52T01zQzhjUmZ6eU90M1EyQ2d0Qm93R2d3QmVFYXJwUXRPTWo3SE9qRkMzeXo2Sk1TUHJDaUFwaDlNVXdCWXdrbDNGemx1V3hQaUxyd1ZYUVFmUm9vVWEzWkM1cjZpSXpOWWxlZnN3SkRHaUlNMW01ejJNdmJYRVdieWE2RXRBVi9ET2dKa21ZNk9QbFJsbVZOUENBeFJnRnRFelVoTGQydS8waEM1eGh6WVZ0WFV2ZTNFbU95NE1WOElXR09sRXgwS1luMjY5NmtuUVg4K2ZJV3VUUlZmaVQvQ3RXZDEyUW1USE5Cd0svdzVkdlIrWmV5WjZTWHBRbGlQaTkrRFFJQlM4Ry9iK1YwYVlZZW5tRytQNEhEN2hOZ3lZOEZ0WmZLb3ppeU5CazhjbnJzNDdXNWNBRnhheUZrMlZzcEJwV1lSVSthRWljTWJDNE1hcVNleG9YT2RBd2x4dGZqWVNkTVFxbndZS000L0tlbWFDVHBSWkgyWGdCNFpBOFVLb1d6bE9icEVoQUMySlpldjBRRUxKc2NkWGZSbndBcVNPYW8vSEYzVXNGam1XTlJqa05XemQ2dU9ETGRxTzYxeTJYSTFndVI1QjhoeWNBc3JhWVlBdWkySWdHQUNoaVp2U094NmtLekNNSXhTUXdFb0YvRXYrSEpOMXF3NXdpMzZ3bW1lWVhUeVF2MHduODBzMFdNYlp2K0ZFNnhyTHRUbmpaNHhVMnJGdUlzOS9SRlhFUTZXYWJiZk1Qak9MZ1c3UlFTdDI3WTY3dHJBRHFVREJyM2ZzZnJKa2N6bWZmdVJPcTkxd0JLVXVQTThoc0FNeGZxUVZkN0pNaDlpZGx0VFRtdGlXOGhNMGtyZ1JDdnhPdjN4UW9xa2IvaEF0ekNOdDVnM1ZHdGVqSmNuYlZHeUJjdm1tVEQyV1RKT3F5b1NLQjl5VGl2Y2Q5ck1aOXRsWWhjcWpzOXBrUnFPTUx3L1dLWklUWCtHeTZWVGo5WTVhL1NpUndaSEM5ellVdjBmWWpzZDkvb3FaWlF3T05FeUtzMTc5clUyM3pNZmcrVEtQem9jMlZuNDVOSndyMlFHUUpabm5QbUJIdUFSZjBlTXR0UmNFbkhkT0VpMW9YM3BFdFUrMGhhMmliRW9tSzJyN0h5UnVmY0w0MmRLbURUaDY2cjlwbWs5ME1idEpjVkx3NlI4WHR0cHFhMzl3SCtER3hET28va1hpNTlZQzVMMGdtQ3Bja1FGMUFNV2R0Y0VRZHp0am5tQmhPMUFUc3ZPTVoyNzIyN25OK3VnSFk1ejE0ZnQ3NXoxdFlrdXJJc1FqbXh2VjJIdHpiekVJSmxXdTZOdG9QUUZMRmhtZE5lRDc5UUtaMGE1ekNFcDA0WEMzZ0VPR25XMEQveGpoaFYwV0NiaE95MTNhRlpmampjQ3ZFaWtBbEJGV1oyWE9yM3NNRkZESEZtbEUvbVFNN2k4VTFrb242TThNOTBRMGZYdlEwRE9KejZkTkQ2WXBtWVJ0N0NXUlNWSmFoK1ovaTJvaUN1L21vSTkzZVBxT1c2dzZsUCtBakMvUW15TTA2WFFuZU9QbVFTdFFjOEdxTWJSd21PeUlLSk5NNmZzbnNCd0FjOU0xNlNVTFNWRnR2SzJkdGVTaDVEbmtSaXdKRDlaNjJBMG5WN21kUDNhT1BURkhWQWMwajl6YXJxUkpFRnpKRDdoK1ZmaUs0RCs4cnRkUGNrcHlWbWJiTFQ5YWNuVitHOFdsNXhtNkUwTmtWeTZJTHhhUzRKbUx5ank1TFpZSk42c1dYODF2Z3hnYUZqOHdrZzU2RHRyM0JlaC9IZnpSVGZBczU4eWp4dkVIYWNNTjMvODZ0SWpCMHROZWVadDFxN1krT2xGbFV4bC9NZi9PSHVuL1lMSnQzeUMwNzlZYW5EUnlGWWdsdnVQK3VCQ3Q1OHlPNnU0WldRaDhzcUpFMEhjaUZIdFR1Qzk2anA4TzR0YTR1bU55dUJMamcwTkF3QVpjZ3lqbEVUc0NZemU0Q0JMbTFzdVJObkY5eURFQkNkdXZJdEE2RzZEemI2R2hzZmliZ0x0WXAvemwvcVhtUXJmQUh2NnB4ZzNHOHZtYXFkQ0pSdDRnY1JrVmF5UGpJSmtQS2d3Uzh6enlLQUd4WHNORm1vRUxWd0xjQ3I2YUpIdkVZNTJqaVlvWis4azl6YlVqRGVFQ3o0ZkMvdkhIQXRBeWFMTVlzN0lHbDZqQll0ZDZUbGs3eTdscitwTi93OWRsVE5OdFJmWjc0OUJqd2dBUmd1bk0yN3BZUDlUS0k5VlZWc3dISVRaWTVNc0VLYmNIdGNqSW5PNng0djZETG53Mmh2eGFjRFExRldBUnJUMG9qcjVNR0VvYUt6MFA4SXd4WkdIQzdWZHZZTDBHVnF1c3FLcFdET2E2cUZjaVl2cHNnMVk3VG96YVNmZmYvWVdxK1R2b3ZKRFJXWWMxek1WcHlZbjM5QWZzNTcvS0xWcTVsVHFESVRvKzRoNElKSkhyRWExeUxmaHF2dzNNYWdNaWZoOWU0SVRldnc2OWNxM0Q2UE9MelN0MHU5cmZaL0tjMlRiMjYvZzFOMzhjcFVWUU1aZEhvL1FLalJtZk1ZNC9ucTBNRlQrU0g1VUdzOHpMUHVrT21UaHZnMVZQTHcyWFNFV0dMUVpyT2RIYlZzZWVwcm1VZEtTL3pLS0hOejB5Y3Yxa0dWUzNneEN1a1p2OVRVUlJQS0RXSGpLNGFxYlM5REVUc2w0UFA4bkMrUDZRY2thUENGME1qNld0TnpRdDM1WGIvalRIRVN2ano3c0RHWGY2V01YZExRRUxNdC9Rd2xUOUc1dGZoWjk2SldPK2Judk5OUTFER29LZjZwRllOWGZDRGR5cnIzS2NyQ1pRVWlGK0lWNS9PYi9PSGxMdjBjZmhldG9BeVBtOHlGeklGUFcyQXpkbDE4ZlV6VzVrZCttYUZKWURKSEpTd0ZRZWw3aERpcHlxMjg0YmE3eWw0Nk55NWI5ZDVDOGRmQ1pnYjhxNVgxNUhyWTFOOStvQ2JUdXhEdkJnelo4UU9kNmU5QWpvSExWdHdTUDRmOVExaVNCY3FtWXJJM083S293ekcwK0g1ZXVsSXE3djNuU0hoMWVwYzBVMFVBOWw1b3k1RGFoWDdCYlJZUURtUTY1aC9VUUszUGROTUN0ejI3MytwZGt3bmEwTXgvd3R4OW9hSjFQR29NeEluSGRYR3lCMlVrMytLdjVsMWdaYWY0OWVRc1BENGFIME5WYU11eDd0RmNFcVR2bUFBdExqdERlTVJvdzdJd3RsWUZXSUtENUdvNmdKamF0bWRTRVlwV0oxRHE5ekJoRHNZMTFmVW93Umw4QzZMdm0zeDNCWm53TlBTSUhQUy9Jb2xtdGNnaFU1VmRDZWQ0Wjd5dVFrQ25KcWJCQXVJd01oV1J0L1pNa0JtWDVDVk9naWtiT2FBbWFnZWxscUJVdVp3VzVNQWFyclFqTHRTQWRSVGwxam9zL09iV2VVL0ZwZWQvOWd2Z1pobmlzcWt3YnpsZ1hGY2RBV1lBeCtiS1dvbWo5SEkzUFROZTExYzYvRWp6cU1VWHpPTVlxWHlRZWxWdWRjMzhpeUtOa09wTFZMM1lTcTMrNy9scHgzaTdqVVRYZ1JDWEhjTXM0dk56dFBzSTlzRG5xSWpaS1pIM25hM0tEU084Qm0yUk9JNXZ6aGJnZUlhVDlrZE5ndjdTME5TQTZab2xmcUg5NjF5LzB0L3p4OHZxMGIySHJ2T3JsWXFjajdPRFk0cnNLUVVya1MrUXRXYTJRSmhkcFdlWDA0dWlUWW1OYStJaHU4T1plMkdVL3Vsa0E0eks3enc5MmdKU3kwMjZMSVpvcUpaVWZTVGV5Y3lqelpOMjFtNCtZTnNub3BmNlVCNnc3Rk1xUkxoa0VQdC9zaDFrQ21OK3VnU1psd3dvUmRFMitwVnFOZ0RMdi9lay9GMDg4TGpWQ0xzc3duT1E2U0JPdDU4aHlVakdwbHVlRTNNMUVsZU9CWUU0ZlRxcm5UVnA1aVBGeGxEU3RWMjJtaDJoSVk5RmlSSWxvZFl2M2E3VERqZ2VGYlAxVlZ1dlg5SE1RdkRJNVU4ZWVOUWkzNGlNd1VmOHUvMHdnYVQ3b1pyY3ZIbXVsQ05ybTFkRWVHUXhwVjFPMUhZTko2VGFMN0JpS1BUblBtNW5NekxiV3RBZmVvWm8xRXlhZU5lM1BsY24zb0xlclJlUExWbzFKaDQvVFpYM3hESWhPdjIzQTgwcVpVMDlLTS96K00vNzI4TzdsT3NtR3IwSlF1Ky9zYlBnM1pLcXl5dWlWam5qaE5uWFBDcW0xVUZkbjE2WUF0S252UllxVlFLSk1DdlRPWXFNeWdmVW53TlVzaXN5STJiNGRCUWd1cjZ4WG1HbTRrQ2VodlhqeWlvc2lBUmVVdnZEQ0pkc01UeTVjaytXa24ydVRhcGRsWU1CQVVlRkd6c0ZkejJoSjJiZVEvZzAwZWsrdFRsV2JHM0N5R2VDL1p2RlBXdjkzRGNMbmtSL3pvc0xvb2lkR3EwcmhBd1ZwbThnbTNoZmh6VURFNzRSVzRWa1dsMlUzRyszUU5lMEdySlRFVnlFVEhuRmhJMitRRzF4UDdqOHFkdW5FS1YzcFJGZVZZVnlHNFUwd2w1di9YMUVPbGpLOEtWcVpQQTFIWmkwbWdqYlpJUlFUdHY5OGdhdSs4TGplNisvRi9zcHorTTMzTWdDLzhnK3UrQkxuSmZQUGhSNk9RWkN6bytJSEd1STNURmx6REpMMUpHcmU4SmlTWW9lemczaXhiZFRHSkUrWk03UkJYVkNSd253UmE4LzN1b3dVSnk2RlhBdkxqK0UzYWQ4RWc3ZjJaeXd3RG9VbkJ6UExhNUVOMHEvemtLdjRwUVoremhtZG9TSTlTQTFNdVNaL0J1eHpmcWhaL3Y2TjlkelptdzMzRHczVWgxd08zNC9aNWs2WHE1NWNibEZWVFlNdm1xQWYyU0hpNXFmZDdGZmtEczY0RWFJQmU5TlduOU1aZGY3RmdLY3lRYzNKSGtuRnFEUjd6QlRPMnBIbFRzMzJ5WFQyOUZiZWFQWjJSRGovRUNTZXdwTmJUYWVuQUhyMS93dWRVSzFKM1lDMXZxVzY4ZE54cU4weDEzZmthVXE3THkvUVRLRkZoa1g2cm5VSzdEOTBQa2xwYmZFWTlRTjVBNTVRYk1jaXlvTFpmbUlBSnNkY2hTVjkrSXEzU2ZVdytaRmJkd2VOUGYyRUVPcXErcmNSSklxZ3FtbjY3WTNLWlF5MWZvRHhLQkpsbFhWWGpucE5tWFlqQy9sMktYTm9yQ1AxSEU2U1hlZzFIYVpYRHFOZ00zQWp6dVJPSDNTM05xRVFzREdDVHV2Vlk1akpSZ2wwVWJIaEx5eE9pVFNFaTY1OEplakxlTGZ5QWU2WTZCK3NUTk5ZQ1ZKT01mbVBxR2cyTitOc2RxTHJPTERraVBobEpvbkY3Y1Nxa1BQRTVhK3RXQS9CdmdmYjlJdGxva2xRWTdKTVZWd25IUTBjUFNoZlk4R3o4bHpqMkZnazZ3bFBLVzg1Vjk2R2FqcGx4bkovckQwTlVFZk8rL0lmNkZCcXNBZnhNT1hGWm1acCtwS3lvV1Y5RjZKMTQ4V1Y2U2pXR1g2Vnh4WVFxK0VRc0xQbDJWMGNGdkorK2QyRmE3WG5VaVFPeGlJT3A5aGVQOGVOUytFWlgzS1JPU0p4blJ3bGd4VGRIMWYxNHlPYUF6RDFPUVIrYnJqTC9vMEQ1bU9KQndmTnlRNVpTMzlvV0RhcytBUzhacmtrSVlnWVpHUHlMMGF4T0RENnVYZHhWTTlJWUhQc2lpaTZ6SFJhYTk5NWdqdXBKeEgvSGE4M01ob01UWTdScFpaVEN3NGxDQklCQnJKWW9GNnRWVzROL1dETVlOak54QXA5SVJaR0FKUUZ6Z0NRcnhVckFQSnBwZWxnT05hSUVhN29WVU5JQmtlYmE1NWtEaUJXbWJZR21QaE45cithZjRsbGZ2RGxmNVh3dDZOOHJLTmg5YjViRkRuczhGc203N05zbEI2dCt4RzVkQjVzeFE4RW9JKzVxZ1FqM1lwaTRqMG0vSmwvQklqaDEzRlN1enM0YmY4M0hDdUVyalp0VWxiWENCZlVaV21OQTFhQ0hscmRsSGN3WHUwOCthTjhwcUlGelVScUpycDVySktmak1WYTI0RVoyNnYxSjNOa1V6VHM5TFh0dm9pUzhSTk0vdDh6UHRSRmd3YkpDMWJLWmRtWkNCL1k1U1dFaFpMUGZMZFkxVHlrM2NkeENLZWRkUHZxZGc5MDZWb3NkT2gvMFowcGVSL3JMa3hTL2FSaGpZMTc5b3Ywa2s3a0UvQVAvQ0pYc1cyWnpES2NoM1dEck8vS29kU0t2STFFeFZhblBualR0aThqZDRyeW8xSEZVczJLN2pNT2dUVDEvTU9XWm8vbVBCeFQyVnpoaSt1d0RRUGsyd0tuK0tZQTRCSFhFU1VRQXpraVQxV0tIVW1RMTdENHIrYndZWVVOcWVZNk1xVFlXYWhoNlA4V3FKaThyOStUQTdIMWF2VUNHSHoyM3o5SnEvYThZOHVwK0FHNUkzckIwN0l0dTdKUjYvZ0R6dStaTDBlV0p3QjJuZUhBRG8wb2JWQ3BRNkZ0N09TWSt6UzltK1YrVDM3bW1CdVFSTExSVGZlNFIvQlVKbWdxa2dvWmdOK3BFV3R2QmdncHBUN1IyTVJYMEN1OUszb0JXNDFDalAzMzhmWlJvaEFLY2JubmJJWEVBVmNpbzBGdmlySENKc1ZLNTZNU0UrSHJ3Uk1PcG5ndzMxS2ErZHowdFR0OVQxaFRjRytVdFIrV2NZWWVadW5uSi9WSVUzUUdRM1hnQlY4dEliaE9LQXFZZForVlg2U0Z0cHNsUG10YjhaMW12NHRJS3JPYm5zcFVJajQ1SWtxQ3V0U0doL2lJcC9LbkVZeWE4S1NrN29BZ25pZFV6SmJHVi9qOGtRRWNxWWNwWGZXWm1IVEpMZ2g5R3orWm1NR0owQ3B2VkJBY1lXbmlqcit2WXdZUCt3MXYrKzJZOFA1SjV3YXFoMDBIV3JRbHdQRlRKVnFhd1FlZEFObUxRZjd0azkxTDVielZxNjRvMXhqdjVPcnF6MWlIVHhpQWUvRVo3RFNaVHRldmdYSWFXcHZCS0tSeWNQM0hTeS9jUjdHcjhrbTlRaXllNkMrYlZDcTM4Qis1ekxPYjZpOGdNK3JYWkdDRnc0MkVNTTZLRnRicFZnV29uRGVxclpaeU9aeTZXYWZaUyswSy9rZXdWN3BpV3hudzN5MEhTbVFtOFA3enEwVnM3cUpjT0J4Lzg4VWdUTnJwbE9QeWZaUXJFd3EwaFZ4L25UdUU1eUd2ZTc4SFd0aFhrRWlSeHhKQ1hDS1gvcXZvV3p4eVNYZEVQMWl5WWJHa2JtbmJibE8rWDl6N0poNFZPOWJJSlVUcHJWOTJab2Qrdi9Uc2hsQmZhREpncEVyVm16N2RKVXlhVTNuK0pXNmxpS2RWWGlOVG1iMWZkdDZYQ3liZTYyWi9MNkxVQlhPcURQR01SVk15bkw4YzVWT0tOOFhzQkFqQTI2MHAyeEhQOHJzSlU0QlQxc3RVL0VTTVlYdUZxdXFpYWtUT3Vab2ZqSytUbWlMekdMZFVCcUZaOEZIYzJGZldqc1BNR2NTbWFWNzhYK3pKNG9yTDB1MnhFdkZIUGxzWjVhbFpjaW9KTGZyWjA5SlMvUTExZFpjdkVTbUVxd2FnMDRVOGc5clRodjlCUUNER1BhQmVDR1NPd0c5RWN6SGVocmVPZUdHWVE1bG9iL3lqV3JPWS9uT2wyMUg3cnBkd05FZzQ2Y1hpc0pVbGdkSlpBWEhlcEZMSUw4bnpLRTNGY3grQTh0ODdFZzNzVzdVcmFlalRTOWtjQW05YVliL2xlTUJqNE5nQXRXK1pEbzMzS29mdGRUcEpuUWtUaXpBKzRPNHBPMUJYVjNpZENXRHg3YkdvaGhMV3Y0OWovenNtQXVVWmdiOWN5VkozV0M5UDEyVURsaVJtSEJwaEtZM1Zoa1VLK0htWE0xMitLdEY4NytPWDc3VFBXdU5RTFZYWkNvWWtnUGlKVEZnRE95ZmY4ejVGNUtFVUdkMXdEMHYxZkhEK3lYWWxvU0tCellHUGNQS3NTQ2hiakFQN1RTa2ZmMzlOSStWalZzaWZGQkVvQ1ZIT2lBQ0c2REZOOGIyRlFkMUd6V1phdUJnRTgxRHVFYjExamtTbHFnQlVZMGhuekxTQjh2VmxUQTRmZjQ1U0NtUXNtU0JlUUNVY0ZCaVhpWmV6bGdINjVzNzhFbHY1S2g2cHY5S3ljTUNacFlESS9yZXQwN0N6ekxuWS9GODRmT1puVzJGVWNkSG1PcWhxR1pVczZrWUxObjFKaTVmU3hoWjRpSG93RjJjTDgzZFk1R3BGWG5ySS9GUDF5M0NxL2QwdU56MWRJZ1FFczBxdEZrWjk2Wk9XWWZzNTE2UExzVjcwYk5nYWVOSVB6ZytsQkMvemVMTFFZWWFsWVZJQ1piUmxSQTlqZk5IQUZqekVDZkVRTXlYNVh2NWMzSWx1MmhvaHNZQjJMbHlSa3czVURMcHZuUnpRckUyZFVmRW9DcVFpcUV2c0M5UjdYaUhNaVRMM0tOanNNRjlCY1dJVlNnL2ZKS0x4UTg2RTdCbnBHVm4rY1ZNRXpMZ0xHZjg2cms4Y0RhdVNkR3N0c0F1ei9WcG41U2Zqdi84UUZqK2FqaU9icXZpZkRkUTNPZUdYa1JBTGhOZTRRSkdMa1V1SmNOeDF0S2Erb1hXem1TaUVOaUJoQUs3TFBlYnMwaExvSGdmUXdKdUloazJmb2tVQUE2eHdVaCtIT3JGdDd2Y3JFUElmNEJtaXNkNzhTdkRRWTN1T0lqamxLNlh5TUdxN3V6K2lqQTB4YWNWeDZHTFczZnJKSVZRQWZvWExnUDJ5bTllSXZDci9hVG5SQ3BqTW1LNGQ3VkhDMHV6K0dBc1l1SElLaVY2ME05d0hla2VGMFVhRk1HZ3BzNlNrUkg4UURJallyMmljN1o1c1lvUkRiQUpmZDROaEd4ZzZzbTc3Mk1sZlQrdEh5eEtMTjB6SjAyb0cwSEh6UjF6WnJkaVEvMFVjNUlkeWlvbURwZjA5M0IrUmRSdzBUdHNOenRyT2p3d2hHeTEzNDFvblVQa2x0TFRPQXlYTEt0L3IyVFJtYnVraHRGWFBCM0NiazBZUlhlWWUycW10UTBpQ1N0OFZ3RkdwQ3FwbUNyTlVXaWh0WGdncWtKMnVDNmQwOFdmUzR2UWxaSDRySnBOb3Y4NE8rWStSTnZJbFFkSjBCTk14b1dUdGt0S1EvbS80bUwyNFQ2STZSWnVPTTBYTTY1RmhSaXdDdXRVeUhZbVU4bkVmSFM3a1JkSk5tUENBU0d6UUd1WTlVbm1ZWVpqV3cySVFnY2FmQ3RITytiOHZzNjNiVDNKWlQ3SXVaVmJJMG5aTUo0QlFmVVVyY3V5eVU4eWw1TUVTOUdwQ2RTdXk3Y09XUnIzelpRTzQweVl1WFdEeWVJRkI1SnlJWVlBNjdQM2NLQ28rcVF6VVhuby83eklNTU1vdzdrZW1GYm5aM2xEWlk4bEZ6OGlPUEkySGVkUElPNVRlV24rSmwvN1RHN2dwOTR2bElMUmNMUkI3QTIyWTM0dWZKM2NOZzgyZ0dzOUYwTXMxMlVvZmlNcG9nanZ2d0F2bjRoQ0RyN1Q3OUlaemlxMGtZRitkUHRQVnRVZ3dFU3dBSFIwY2JJMER1M1VzUFBYeTFGdzNIMHBDNU40U2U0ZU5KYkhzVTFJMEFrazJnM29WZm4rUkZZemVPSWpYMEh3aU5SQmpDSThGUWtZZ0ZJUC9aWjdDMDdjU1VFVjBOajhicFJrL1Z4VGVzRTcrR0JwNmQwRy81WHU0R3hNa3FtSU9UcnRNVmlLSmFnOTdpZEVoUldzS1BJL0k2UVVQb0dnQWZRZXVVVkkwQXlaTGpEL2xkc0t2NUNVQmc5UlJQc2RLNk1Nb1l3aFNHaWJndTljdWhZK2FKcXB1MEtMc0YzSWFRWlE5NG4wczY0VmRtVWQ3dmRYSHB3cG0zY0dueVhGeWFaaHE1QUw2QmRiRmp1UzIvMkJGOEVNVXd6aW5wOW83aFdOdE1mNHlCNmZudjlqSnQ0d3hZS0p1REc1WnN1Rk03SXlvSDgvVTNhWm5uNWUrbVdKM2dqTk1Rdk92V0lmWVMwcXJSQlZVNWx1YUMwZFc5NFlRVlNuYVZHVU5VY2VJckRpUURQSUlRRGxzcFk3YnVBcXdaWk5iTnNDMnhFQjVrM0dlZEhzczZqekNnT1dlajFIbmdoQ1JlV1dvYzZpYkpyV010TW1FMDVuL1pHNzgwU0NsYjZIZWd3aVBSSmJMYlpaMCswMXFJOHhFS0E3VU1nZE96Q3I0eTArZVk4aEJmRmhZWUphOWJxWVMyd2RoZkVFVjZDWlV2Vyt3SGIwc05CYlQybFBRY1BPQ3hWUHFFKzg2d3RRNElTOXZybmdadzdiYkExLzZmVEVpMFQ5elI4NkhWcDkwd3F1d2p0cmJZOWRxZ1MwSFkyM0l1dFJLUFB2RG9leWtZSlNMQ29wVVpoWlJhRExMajhoTlV6bHFUMkcvWnNxWDN5ZEZDQ3lxbG1heVBWWjRlWGx3RHdPVFUvT3JJN0lsSWFSaFRPZDJTVGhDRTQwRGs5RDVrdlcvMnB0MHYwWXhLYlF3cUJMc1JxeW8xelpjemNaV2phNUNxYWNjUUZ6N3F1eERuTGFZL1owSEJwVngxSnlVYlJFUkljK0tvYzRxanAycUNuWTRGWUhoaUVPTHZZUVBtT1QrZGJ1QzJDcG5Wd2JDQ3ZLVWh1RjB4MWZRbm44ek5yek1GM09rY2xickd1OGRwYUZpRzdhTUk1bmVPUWdmTnZVOFIyYllDaVpJci83VURId3ZkQys2VXFPWDRha3pIaWpYekVWNFFWZVgrTEJJcnhKZzBqOG8xZnFjRFgzQTF6Qkp5U1llRjR3VWlJSWFhNDNXVy9HbnM5cVNMRENVYmxyZG9RVjNNOXJlSzlBV3dYbjhlK3B5OEVXYVFoTUxUaVFieXY5SDhLd0ZsU2FSRVhNdjlmcXVMUDk1OUtDME5TTkhiOVQ3djA1V3RxMUtNZWhaZWdpcGR1eHU5eGtpYkVQOUtsK3hVbUlpWXlyTlVyWTVqbHlKdFBTMWR3VDc5MEhydjgvblM4bDVWWjZxVnRHMnJCLzBxdHVRWjd6OHFlV2NLelhDRjRObXBnNEN1K1dzSU1ZYy9pYkVkK0NHbUVHQklpZ0k4Z1V5L3JxWFY0dkVnaEJQaTI1eUZWb1ZTdFVLdFcybFZFZFNUaDROSS85R2czM2NWRFBxWmxqZUdtYWtRU1RNMXBqdFFValZYdXZCUmFjRitVMEpyemtodzR4QjlzaWZZUWNXeG0wOXViWXc3SVVwVEk0aDNHZmhtNkRoc2w0YmFyUlUxRm5oQUtDZjNpSkIrWFFPZTR4YVVnVTRGT1VaU0JUTzVsb29zeUdQOTNQdlNaTVAraEhZUTh0aTNSdkhmWVVqVDFNZDM5NDJvZTRIdXNpTDcxRE03dG84dWVSRjFJci9CQXpIRkJNOHc5VzJTeVFUemQyc1JwTml1ZlFIeGhycW5aMGxPWTl2NnZBd00zWW5jUUd5V3ZJTkRmOXBEQVpqUFZuNThOU0Q0NVVBUU1MVmNHc3NaNDllQU1YelpaZGwwY0xVeW5MdXJqQ0F0TlpEWWRpbHU4TS9OQVFkSjJXZmllTFY2S3k5Z3NUaXQ3bGNRS0RFeUhFOGlXNnkxbjYzaUlhODFucXJwM2dhc1ViOEFJZDJma1hHWkNUWUg2MGo0ZFVaRnFia1ZFMmd0azZoOWkyc2NvOEpJUkhJNVc1a3lxaEVqUmZuZEg2ZEJRU2F3MzYxQTJ0VGd4VG00WjhOdy9wVldVdHU1VHh4VkZPZ21UZWJLQmZkZEFKY0JXelkrZEd2NXhRSlRtVUUwc2xIQUpQRXVaRGM5QnpSVXh2bjRiR3gzblN0TW9BSTUyWVdzQ3hCRzFjS1FiaGtQWWtTSFN3ODdHcTRwbktOZFRwUGZqKzhHbkNPVUtnd3JGSXMzS2NqM1RWTmtKbnhFVFg2a0xoaDNpcmJtdnZZeWJwdHdRM0ZxMUZ1cXRiZWFlZ2Q0ZGFESWo4NHhlVUg5R1NsRXV4S1pvWm10eDhMT3N0YjFZMDZFdG41SDNFRTJZR1BKV1gyQXRMcVFjNWJHenJnV1lwQ3BNd1U1K2d4azBYZk5TWDVTbWwyTmxlQWZjQ3AwZGwyZytFVnA4dGhIbHZXbVA4dFBqSjJIY2xhME9CcW01dTlIcUgwcDhNem5vODRsNzBlZW01QThxUzRVYTRjWmxiMFk1TFBLd1RCb3Z5VmUrUWo3MFdmTlF1SXVBMjhFSzJQZ0JJbjVURzlFUTk4WTFscXY5OHpMVFUwNEsvQ3NHdVVmVk1tajZibmhEVTVuby9Od2crbmRKSngwc0ZMS1NEL05QU1FvaStodW1MRnVqYUIreEVJWTlDa2ZXMDAvZWROSHQ3WklvNUd3c2dOMjVKMUhPTVYvaDBzbzZ6UVM5VjFVSFVPdzkvZmlLWE5Wd3VoUmhxRlZHeUx0RDh6NFdDVHhjbHJ3U1lNMU96b2p6cTA3SGs1eVcrc3IyRUgyRDYyWW4zeHloWXVNTHIyTjlEOTJQdUkyb29jMzhkSVZtTnBybkNTb1c2VitpZTNZbTY4bTB0UUdoblNnbW03T1ZZN09Fc1RWSGx0WmFJWm83cHdRV2t0cWJvUGxuYUR3Z3Z1R0ZCb0pWMmVZb1hQOHRiQWswT1FKNFFLRzFVZE5NcHI2ZHhRbTErQmdGTnZQdGIxSm9keUFkdjRITU9TbGRYRW81dS9OTmllNWlZYjFWQlFibEE1QTFWN2xoZUQ3bXBuZVdxOTB2cFRydHBDYUU2MFE1NFEzcFZPTFRVU0FrR2hOYzVDVlpFREZwWjNVSG5NNTB1U0QyWDErdklJQ3YyU2N5ZUx4c1RTNTZkVGJBcmxHdk5heWhCL2tpNXc1WGtaWXBaTWdDWDY1NmVpL2Rhb01hV0wyTmVaUDNCWk1vMUlYVWxPNVAzb1RSOEMraDNSTmN1WnR4SVVKVW9lT3J3aXdtZlZKWGtFeEFBaWRFNU8rNUF1MHJyQ250R2pFY0hZYmovT01ETDFRYnUrV2FYVWZKbUsrTzhxRWZMb0NQZ1pFaXoxTDNDQk1sZWZ6Q2VPYmVTbGkzN3E2ZWsrQXZYcWZseElOWWVmOHV3M25UUjZDRXI2SCtsTGU1N2JsZXNxK2p6M0FkbGVvNlBCcVVQNU5LRVp0RjJKTkY4cUZxcHlXWVhacWtuaHlIVVJTOW5PMEE0c0FGTjVhWThOYXRMMWZDS01OMEdjZ2JxRnpuNW5uWnlZT1psdmZ5RFVGUmplandEaytVQUhPTEdTZDRXWk03d3FHN2RwTmxVbE1kQ2RMN2xYWi9MSGVuWitMN29WbUhWRGJ2eTEyZW02VkhsWTFvZHNDRlRDeExMTlhGR01HS3oyYWxlV1A2UlUyZkVnYnJRM0RKSEZHNjZQQnRuQkhmQ2o3M3ZJOHQ4OFJNV1E0YTJhU1JoS00rZng5WGRsRHpXQXRNbmY5SGNpVkpleGdiTFNUK24zR0dFVnQ3V0FNdGRrN3hUOGNFUGRxRDl0SjdGYkgyNDZEeEl2V2VCVjRVeU94T2FuSUwybmNPano1cVNTcnQ2NGJUdE1sVEtHMjJHU3duT2VKNVpNMlJDeXA3dmY2QUhzU3VHc0NrL3pINUhGUWlnNW9CS1dKajY2N0dPdW4yVy9RRGpyeUoyRmZnaVJNOEFpTFJ0TlE3WkJZbHM0UXROUjFyTXFBZENGc2M0TG5MTk9xRlcxZGVwRU5GZ2xDZW5nTVI2MlFpUStMQ3ZaQXcwUUNQcERwcS80UGVQc0llMUhkc25sbzBKcTlITEcwbFRMT0M5SE1pOUhiNGRmdkRlSVZiUmpUVUFKa3dTeFNtUEJqKzRYMW9GczRqRUpKdnQ1RHptbG1JajVWSW9velFuK0RpZGpkaURiR2dZRjZIUitPSkdKWTJ6Q1JmQ3YxTlBjU3EvQXRpSUZkd0hQRWp1ZDV6aGYvVUJCU3VTZmp4OEZxYTdQT2FkWlpjR3RXMW9SRUtYUzFseXVZSGVWRWt5MkQydjdkcmNTK1ZDbHZjdnNNNnZVRUxJUjNaKzhRNTVCdFA1UCtuWlNnL1EyMENWRVJrZFkzQStHbktZNWtBWEFaZm1ML0ZxSzNKUGNBdGZ5QkswVGE0MDlXRlRlZGFBdHI1OTZ5cC9oK3o3NDVCVHp2dlRhWUl2eVlTd1pMbHVwa2pCMU0wUEdKRUp0RkdrNklYOFNpY2tMZmlYQ2I0QkRvakhlVktzakE5dTB5bzk3d3hzek5zWkNaNFd3eTBLeFAvU3ZycFNwSTc3NTV4OVMvREpOY05NLzJsY1Z3QUhOQUNZR0lHM1MrWlpWSm84Ym9QRVZ3eUVsSVV0QXhuODdGV29nUDhObGNzTGFLbThsaERLb2RlMndjQ083dW5LS0o1TVBRZWpKNUplaUdkTmswM3RrL21DeS9USXRpMi9jb1QrN0piY2hwL05udU5ucG9NOEdzZkxydlBBbk1JU2g3aVRnamVybm00dE9EdkgvRDBrdkdXWWRWUWFuRG1vMkFhaXF2bHg0ZlphU1ZXVkwxODZxRUdqdXIvekdENkpLQlUrWVRXelA3Vmh3eUJlbVpZTTM3Qy9IVnY3WktML29MNjRLd2JzY2hqWjlvblJENHBXK0RjN3BHaTRNSWc5VVN2azB1Z282bEltOTY1Ukdnako1bCs1SGV5OWpMSlJSdXBKS1ZtdUxMVWZub1lTR3crbFV2RU1ReCtkVDF3emc4Q2VzVEw4NjF4YmVNcS9NeE1qUGJIS1hOdXdEb2V3OWEreVg0dUJSdlc3bEhGcmkxaFFKUW5Ra0lXeElBZHRjbmtyRGV3WmliTldLbW9mclFiTmV6d09PRkpmQjh4ZTA5amRUNitlQnNpV1Y0MytCZTVYL01raDdDR0lJUXQva3Z6K0VwSGhWS2IzcDQ4c2pic1ZBcFZBbWtiLzZTN0V0NVRmZTdoN25wZkxaR24rM1M5T0JhWnhYWjhvMXY5SW1TK1NWQy9jWnh0R0RPMVN4OHhXazVJOUpiS24yZEZqY1JkNkhGc21wRnZpMnd1bit0c0NWSStGMUg3OEdYQW9ScDlVU3dIL1hXU0w1S1dXNnJxWENGMmVHZEFPMXM0d05FYTR3RHh3T3IwRDNGWlQzZytoU2p1eWZjZU9WYUgzZUV3S1czendvZE82TjU0Sk1GaXp2ekhxN2FMM1RZY1BoQ2dsZG0vQThCU2RyNjFRd0Vtc0swZnBINGtDb29VYmZsZUh2ZGZMTFkzbmVxYWFsWVBoajdOMmRad1FyZTVBT1g5dHMrMk1JN0I1YVZ2SXBiTFRKOEEyVTVMWjFqcHFWbkhQeFRVbkJ5QVF6SzRzYWthOWxZQmRlNlFGTnFmM01qcWR0SHlWQjBKbUwvUWVjeFA5SkZKYXZocHNhbHNSc1NJVWVFanlVNUQ3aW5lUXFGY2FKclUrdmZnamJ5L0x5R0tzdFFRNUdpTWlSZXZUUDNHd2xmUi9xU3NaWVJzMkFzOEdrVkYyUk1kQzRNbzRLeGxDczEvYklTTWRWQUEzTm1hUFdUOU40eTFuMkJGK0dMcHYya0Q1bVc5SUpFQkp0dFJXRlR2Tktabmg0VWlVNEZkenl1K3p5MUFGY29HYnE0QTNzQk5qODNnTGhEV2hZTVNxRHZTdXBFeUdJR3VvU210WVA4b05GKzZtOEJHdDByaWttckUwTGdBc2tTMFFYQlJWbDhpUnRPVDRnZ1lmaFR0SjBVMmRSME44UG1INm51NUJ1STVPNCtjRnBRVFBOZlhKWGZJSU1lR0paT3JNa3N1R0N2bVBEWDhhckUvYi9Dc2NRTUhLTnNBc2Fxdjk1RGNBbWhRZERJYVM4TVd6cG5RSG56bG84MFphTmhRb1ZxY3ZmbmFkVEFxNW9pK0RGQmJadmxZbm9QMENhcVYwRDNvdUg1V1hsSHpKMVpSRUg3TUpJQjA4LzEvc1FPOXRMRUhDUnN0Z3pMd2JQcXRYN05adlNRME9sMUxFdkdsVFZhUHZUL0VMT3lNdVp3SXdqd01Cd2o5Qi9JZmNkaWNZN0NxQ3Q0YjNrNXpubDVGTUsvUFF5MktIN2xudGRWVWQxNmRZcDBDNkgzMkx2d0NFRXhzcFgxWmh6dnpPSExzRDZ4cXg3ZEx3S2d2ODd3b1BEeHVKL3kyUlJCSTJ2TXdsNklTcnQ3VFBwTVFJeGMwbjBHQ21RUTJacjBobXRFdEljczB5S3FmNCtXM3llU1hFOStPcXYvM0FmTllHS0VVOHVCVVpLM0toa1hCSk9kNVRFbXY3OXBkS3JhTFV1TURtWTNIS2R4eHhEb01YRHFzY1JkLzRFd0NSY3BrREZuRTEwdGpmbS9pZE84Sm9HSmVkU2JWRC9LNVViM1Q1c2hubXhFdjgxZStTaDhGMHhoK1dDS2RrUithRUxxa1dnTGMvR081ZEpkcU10YzRGT21lZnE5RGR4MTVSN3VrcC9FOGxweDdzczgzR0VBa05MR0NTOC9hSEVnbkt4T2ZGZUQzKzliV0NqbDV2Rm5uWmlGSDQrQ1JpY2tJTDZVTEM5UFpnVzlVWm5RLzNRR2Q5czF6UndTQVBPTlpQQytCU0YxNjY0RU5QM3VRTlBpakF6UER4cm5iMFd6bm9tR1hITVdiL21DVUFybTY2Um8xUVV4T21iR1RHMXBWZjhGQ2p0Tm1WY1pvZS9hOXhIMm9rQkozOGhJdTNhcVJhakRSNzl1dnBwRTl6OG5MTURKbWlGUVBnRUhVT0taZzljcWltUk9zQjVaeENFNkxrcTdmaWFKaW9naVhWM1ZybWVuNkFuMVlnUEc3QVp0bUtDai9zT0FYNVViVWZqbTY0ajArS0pWM0I3QkV3dDUyYVBSQmJUc2g4ODJQOTFLemNyWWlJOU5ZejJFSlpQbXJDYzFScUxGVnRoNDhkTVZ6eENHb0pYOHkwd21ycDJDTGlmR1JQUnBCYmtsdGx0WHFOUnlOVTl2TEJLZFpkQXkvU2hvQkViRHJMRkN4eFpPczc5SGgwZWhYYW9HMUNIWFBlYVVTK1V1RG9WVGtLTEozcU9KdnJFWEFxQlE1cEx3TEliQ2w3MnVnYWVkYWNmM2ZibjJJWXFFclRwTnlzOUR1UU9jUXlFZVQzeExRMURrYmRkRnUrWUQ3enREejBVb2UvVERreFllQmRibWdrdEpKVXphblNHbHhZT3JpVWFhb0g5aDRzcXhjZHB0cER1c3VnRVVJMEN5UjFacmk5ZUhnYmxONHdkZW5XRWllMThCQTd4Tko0aGwwalhlWEJLQ3I2YkFVbWlFNk5BT2FlZG5ndng3MElmdjB3Wlh2UmVRWHZsdEJUNW8zZ3dWMVYxWEp4ZlZnd21KNXJ0WDUwVkc3RWEyMkFaWGpZdjMwR1FKanhyNXVueVdIWkdKVlU5TVNRbm5FNVB6SkFXS1hSU0EwaHdQZFgrWmxiNU0vWmpiV2xkemdvZ3lvRnFya09zQ1piZDgvNTYzNjJDdGJFNTJLem42MUJxMFpacTJoZXNSdWgwK1NRNE5mT2ZwTTYxOEpWTW5hNHlzaTdPa3JuVkYxWitnc0RReVZ1ZVEyRGVXRVdnYXl1ZzYzd21NVkxiWmxsU0JrSTJIZjJocUJLRVRKc3RNSDNnVGJyV1N5MHM2V3kxdW9PTVlDQ3dSUXJCQXhoWGRROEVuSVhSbHlCeHVZbTkxZzVSRkRLS1FOMzVLWmxZSXNKVmVOcFNHVmtUNWNWV2IzL2pjaEs1bmUvUHhwSVhPNlNzRjRjaFBleEZZakdjQmp0QU5VbHdONll1bDRDc2VnMnhoNkFGWXhpekN3RHRSa2xGTWlRekhoTEtUUkp1T212UFY3Y3MxMWhZakxXUDR3WHdCQjhXYnQ4eStHSVVueHRPeUJXT3daM1BoSXUzNzdPbU8vSjJKSXBZM0JnaHFYQm1zdkdscHFoZ2lTL1ByZHpBYTM5QnJDZThiamxyb0FqT2JETVJGQ0piaUdXRUZ5QmhDK3BuUUo5V0RraU5YMGpiL1U4ZTgzREdRYnFNLzNHZ1l5NjJOWlM1VnQzeDE4OUNJOUFUYzFXbUU3cHphUmlqL3Z0Mm13cENmN0RNTko2OEl4NFFVRUd4dXFvelZDc2FBZyt5TjJPTk1UdWNuMkFKR2lVdnBjRVo0RnlPZ01XNk4yTkgvQlpueFA5WHE3VnFWaU5WWkFKcjBoclFRTTU0SXRTY3RrWFJ3c2JQRkVzb25RcmhmVVIwdGwwRWlMU0N6YVRVWldZUnFOSktRbmpwWlg5UWRZV28wS3dNdmhpbEprRllIZmxDenFWNmErV25jdFN6YkZubG5IbzE2SklhOHc2cjRFcDNITm1zTHF1QlU0NVgrRUZCS0hJQXUwZjBpY29kTW5GeFUvOTJHZFNERDhyU2FoR216NnV1TkJCdWFUems0cFFSM1hEcjhvd2ljNG52Z1VtM1FxaFc1MjZHTjgvYTFDL2g3M1BQZERMSytlKzU0TngxU1g3RGVTZzhjcUlHVmJaWE1EMWhOdXBBU3RwSWJGWDkwL0V6bDUvSHlBYnBRV1lMQTRqTkNyRXc0YzBIQlp1MUVGQmNrZGwwZ1VtUHU1LzU0L1FBa2J5N0VkUFNzK2IvTXIrWUE0U1drT3lsTzBONHlLeUtPbGFnZVB2SThhOTJQSkNQb2RLdGRSRklpY0c0R1Q2N2c4UGh1VEpmK3JzME44QzNlWXJwK3daaVJzbURza0RWVkFPdU5kakFIWDB2UU0weTBIVmlWSjQxZU9neVRTTzhzaEdWVENuY3FtQkZScm5pZWxTemNtSnpUQkxQZHNJOWpNU3hyangwS2dWd2hrZE05V2U3NmxLQk53TW1CeDlXU2x5L1VtYXM3NjJuTG8rcUtXSWFHZUFCUEFXTHNkODc4dEN5OTVuOGgzNVdRWEpCbkZaQ3dQbkRUZzJmNjRkaFkwSGVHOWtXbjkxU3NYNEswVkRBbEJTR2JleWd2VXRvVlVVZDFSQ2JwVnZXTkhTaDYzTmp3TzJQdGdveUdqMTFvVmJPR01HMVVITEhPSFMwZDE5RmtuYlU2MEg4UWRtNFhONFJycVV3aXM1Q3U5NXZQM2RIbEthRWVHK2xBQkpJTWxnMGdIY0l6Z3FUQmJjeFRKd3hGdDJ1d2dmdWx0Z09UQ3o5bHBuRllYMG1hdDJoUVlUbXg2T0NyK25KZ3R2ZGpzMURsOGJBUEdtUjE0OG44Rkg5SEhCN2d1bjcxbll5VmlYanZBeXhKMGJaY29HOEpubi9YVnlyVnh6V1dQazVwU0hUWERYamNoLythY050SEpxSFFlKzBlajl4dXBJY3pRNVovZUpkRVM3eGlKS0gxL0hocHJCMFNGY21aeThoT3pxR0R0NjczSnVzNHNDOXRQQ1N2Ri9ja0p0MnZFTml1bFcwUCtwdEF1MVN2NkRZdWk4c21VZFlvdjNjZzBTZmRDSXNRZUpZdk92OUNxcGNueElSYVdiWjhEZzVBcWxzUzY5MFQ0cW5nMDhkNlhrOWliMC9OR0hrR1Z3VU5CSnU2K0dmbmMwdnFkTXdQRVhVeHp0em5NUjNjb3VQYUFyREVIeUpRVEU1YjZJbTRXaExqSmFWMUpBUWYrNFhna09YK2hYT0doRTExY1FtdE5TNHJNZk84a2NDU3IxUDNCL1VCcUlhUWp0elRsWlVNazRXZTloZGRGMXlhNGVocUZ1RzFVdXl1a0l3U0RwWk0vS3dyRE5KcmNra0xYYkl2Nm4yMmZ3NXdUSWhtd2VKTVdXak9vWUFTZ2xOSitPK3hJdU4wVE9mQXc2Y2dSNW5zSytVd3dSbUtTOGxNZmdOSmMwZG53bk03K3ZzUVpaeFYxQ3VYMnl5YW1ERGlySnArSFRjdElIOHBaZ3BrZkpTV0FuSHZ3U3ZLU0hrYkxLaGtOOFVVZGN2dWgyblgwWE16UVFac1NkSFFVYy93N0YvZ2xGRUdXSHdGM0ZYeHc3MFc5Z29pVWdoM050L2lGSGYyOWJRNSt1Sm82S3FxQ1AwWTdRTjg1NDA3cGs3blg5bC9YUEFQaXVOc3J4TmVtcGt3THFxUEp3MXpYYVpYcDF5ejVMbDlZeE50Qjg4MCt0RjNaekMvRmp3WjRSWTdEOCtoQlcyQWxWSGpBeWFGVkpueFBWOU42c3hXa3BXYUp6a3JXb1Bjd25hdTNrc3pTcHk0MDR6cHFLeldYTzBOdEFSc2FzcDA0T2Z0UTRtaDA3S2cvWS8zVmJiNUwyN05WaXI2Z0lUdkU5dk9CYmZFSzNBcFBVWFRsbjRlTUFrMmNsR2xJY1JLdUE1YjBJZkdPUC9SM0xTWVhvZ1ExZlQ4bnphRUdSNDgvOGlka1Q5NG1wK1oxT2VyRkdqQ1dWMUxQYXZHMHlQaXhEK0F5cDlSUWlmMTNxcTZobGFNS3pZMlRzOWpiNkhDQlVhWmJMVzdXcHVqNWhHemU1c2k3OGc0Uk12SVlPdVRaczZ0VEE1TDI3V3p6Ym5wL25ucHlOVzBic2J5N2l6UE5WaTFqUnZWZEQxVXZkbjhUbXdXU1lud3B6ZkloLzdhUEVrcjBrcURSSnJTWXNKM2I2M1B3a2xWekowT2RlWEdCTEkvcHQyajI2Y3VVZG5DZTZpR0hlLzZad3Z0MU8vRWxmUDJ1VWlDMS9XbnhtdTRoME16RStXNDFWMW1rMDFaQmc2R3UzNWpwRndWS3JJZ1Z3L1lJR0hsNUJscHRlNWEvYnVmN3VaZjRpcmNTNVMvdm1zTE9pRkJuM1V6eGMrVElrUVNPUDlOY0U4RzNuTHVLZHRWUlFZYUJLWnJoQTNCT1dPZnc5eS94RjRXMUJxRnhZQjl6Z1ZVeW51d3hkRHMrT2NkQlI0VjEwdTNEdUc4L2g4SzFBTTM5V1NnRTdoSWp4NktrSTAwbE9NanZMN1RFT2ZzSUhESWlJZGtTaUVsMWdkRVNweWs4bEVLbStxSmVCYWEwNHU1VU13RG5uYWVYVktQRzFXbVlPanBKeWRad1Q2QVIvUFRUT2M3eE5kTXJiSlNjbHdiWXN6RklxK3Z1bmRXVWNoa1N6VzdqcCtNbERMRDNrMjlsSFh6N3RHWVFvMEtLc1ZOVGVzdllyd3NqT09FeklVVEpJdmlPMjhja29OaDNJdjcxa3Y1dGUxRUViNjFiS3lsMzYrUjZVZlVHT3ZLY1BnOS9QeGdlaWljbC9zdWZCeHlQVkVTbUN6RnhDUmtlRFoxL0Nhem55WEhmOXE0TWVudURrcW1BNU1RaUZteTVyalFKazJrcExleEhhTEl0c0ZReE16NXZURU0xQVR2aUFrbkdFSmltV0JHL0U2cUlTVEE4cUNwK05zQUw3SUZpSWtVNXJRNEVlVC8yWFdjQzFCdnZJUHFydFZWN3lNaDN1cXhvVi9ZamEwSk1SQnVRR2E5S1o4cHhaRG1qa1pubmlDZkc5QjNybE9ISXMxcEFGaWxyRWcweDZTM1dpREZZODFDcHZJMTI3NDBVWW9wYXZtWmg3NDN3MUFGenRWN2pzU0prRExEVTdGTk8zeHhaWjBSTjZ3ODhxMmlsdlJjOW11ODdtOU8vOUlhS0VVN1d2UXFBUXArTkU0T0hPZGxmU2grUVZKQm4rY1crUW1HOWlodkFnYlo5b2xCcXhqSWUycWwvTFhySVJOdTRua25tdW1FTExaTUd0aG9QSmFSNkhLdmUrL0lQSlNDc2V6eEQwcHNvbzJjT1BsNmxVNUhsby9oeWxyazFnU1QwR0JSbitqb0FLSTFhaVErTzFaRHphN21aK1R6ZnAvZUtBQWcrRW16UnZCM083TGJPZ0hEbDQ3cHZoTVJJblQ4NEJ6VTJhVFpFV2pMWDQ3UlVmUldPdEU4Y1pwN05hd1lRUVRKT05WVEt6Y3ZJWVU2RTRubkVML09IMmlBejA3RkZWRmkxYnlCQkpveG1GcERkOHZxZDJueVk0NXhMWEN5UmZQZU00akl5c3N2cUovdDV0ZlJyV0VKZEphQUtHd0F0N1BYdUxqdkFWTHY2VUpLTnAzOHhrd24wdys0bW1BQW51Ly9NMm5NMFRweU51TnE5c20xNDRCa1lOKzlvTkpHMXRjOGVTNFg4Q2c3V2IxK0tzaWlidXNSemM1azFXUlU5Q2R2YTFldEhiYVYyOS9IMDEzQUw0MngyOUVvR1U2NWZoeWNLR3FOUGk1VGNTTzJNWEF1QmVwdWZRZTRIVHZqWVhpYXdPK093cDFWSXpIcHpuTk9HRytyQ3RvVFNjajNiTExib0UrTEdQZWs4U1ZuVVdWSmdyaXhiVHpTYm0rQXlIT1BHMHdiV29QU1A4N0d2ZWlIK3ZJK2NOdnU2clZFa2srSjJqSHd2VTJUSTRUb204SzFRRUFpUkEyZFFOZkZ5QlZpMGNhY0FEUUIxQmVveGVVUjRNd1hqYnQyRjBKQ1g4R2ptYnRQeDBFOXhHK21ZNlVHZGRZSzFzTnIzUHJuOTUwUTNFU2w0aldqcU5YbG54VWVTS0szQm9kdEZacTE5TDBDQXlkVVVXMDl5SzdNSW1RK3RSU0lWM3lkNUxJY0pZTWRvYjhvTTFQY0Q4TStwSXgvZmM3QXVQcG5mbnZkMWtRai81dUthYmJjTFNVcUdubXNNT3pqeW5Ga0JaekhoSEVSNnNKV0FjTGRWRWdSSGMwanErUHNFaENQdDJ2VXdkeVA0OVZnTENJc2p2RzF5TkF1cVdTeHk2R0kvOGVXOGxCVXB5UGNIUlFJcXlZcjZzcmdVQ0RqeS9LdHpZRlA4MEFNRkZXb1dTVzBITUJuZ0ZSeFByNmFkSUVEUWxHc0wvK2F3ODQ1cnQ3WFovTGlxWFZYUWt2VHQ3dVY1VEJPMUJ3clpXWEJobEU4ZEpnaXh1NW1VMERYWSt6clhyMlladzVZVm9NTGlFM05XblNHMTJlM214OU8vUUg2NUdIUmY3VHp6WW52dHgxeU0xU1cvdVQ4bmo4RUZKanN1NnloSlR6SEkzb21CclFqcjhQemxpR1dDQXVhVzJvTWpHZnp2bDhJbDdaTEFqTkwzZ3hiWUVoSy9uc2VZTWcyZ2QwMmR3ejA2R0YrN1JCSlJWM1VCUjJvN2tsWDJqaTA4eXNrNkNueUZqNEt6MWgrSWxJS3lDN0JmV25FUmQyUDAyY0YyZE5KNmJFTEhyeHRVb3Q3TVRkNFJZSVhnNGNXUmlUMzk1Ym5nYnpZZnY4WnpkZWR3MExLYXRtL2oyQkkrL3k3TzRaS1NDSkt0dFplZndmbTM1MERWd0w1QUJtcnFWdjh2enp1T3VmSWpSNXlURm9nV1Y4OHRVdytsYzBsdlpSRnBGTnBuekd3UFMwZ052eG8xVE9Kd1ZRei9PVzYyV2Y4ajhUbFRjdzRqR1Y3c0R2d2V5MjdNWDFobzRmdGkzME00dENQT0IrV1NsT3FoVHhDd1dtT2xVazZvQVpVQVBsc2tEeHh4Z3YyZUhFR3g0b05sTWZSd2VRdlVRRDJtejY3aVFIeE9oVUd4QjZ4SFpFb2RqSERldHM2UnhoSThJaEYxS3dSajFnTzNBZms5S0FmcHN1ajE4M1YwenRrSEQxekgvU1dLYzcvM2daZStyTEZOMmdoaGxoL2IvUEtiK21abGswM0tjUHB6Y1FxWWlONTlYSFlaUE14Q2RTWDVoV0loRHZIbUd4UlhBcDhNQ0t5bDZxd1Q4bEQ1eWdSbzkveEM0bkh4eFJtK3pEc3lEdG1pK0djaGR3NWNSQWY2NjlUMGJmVHYxMU85ZkVkUWhBRzB0RGJvT1VXUjRxdVhEdGZDVGxhNXZ6Z0RrRnAybFdEMWlJNnRzUW5FbnNFcExhaXFtcEh0eWVqTnB0ajRqUWJHNXBaZ2tnUkNFcGozaEZiS0h4UGVubWl2MzFVdmlEbklGcjdOTjhoeWpkQyt3TzZXbGkxcGpkdXY2TFc4M3paSkZBdXVtY0s3TlVtTVNRUDNlWlZ5Q1V0SHJFdDlkNUlCSmY0eWpGaUE3ZTZtdnB5UnBSbCtMYW5BY0hLTWp0RXl2Q1BBVEh2UmtxcllmRnNra3RVYmVtUzd2aE5TOXBxZy9yMEpxMUNSZ1hialRmV3ltdXJNSHZldEhNbjFYWm9EclZQNGRWYllVNXdGSExXMmhGM2JzQi9GTFg1V2NnTXZzZnpDRmZVaVhoN2d0YVJ0TlpaV01iNTkyeTVCMXpsRmY4STlWVVNCSWpFcDZCejBFTmpxSWMyN0lKdmtOZklLR25yaGR1VTFOcVdHd1JLUDNTR3djMWRYTlRRekZpOHRzSnRLTnNvR2pNVXFzM3Ewb29hZ2RtdUlIVFdBNjVPbWxMQWRFK0E3TjhLN3FsVlB0eE1tWmIzVE4xc0hQSU1DS1hndy9iTnhOZzFCTGxzditHT3BFKzhzUlFaaWE4czdqZmR0SkpubU1aNlFweGlqSTdsM2I0QUhFaGJiRTBRWDBpVXhIYWZuNDUwVUlxT0xFYTd4eTd1M3o2VG5XaEUrYUhWZXRRVS9nMG1OKzMzZTlqdi9DUnpBUEczbVVGOWJ0a0Q2aHB1KzQxdVd4YkYvcGNSajR0NXgxdjVvbkUyeVJHc1JGWFhZZko5MVo5dlg0Ly9SWk9lcEtydWN0NlY4MVJUa1B4eS8zNGFLcXBsVVAzT1Y5UnFzYXpUYW9hZGNtZ0RvaDFEZUt5dEdPanlwSGhNS0Y2SGt5NDNUdVR1cGdMUXR0VnFtRU1Pd2VhR3ZxcEdCalBWS00rQXJndDNWN1RWU3VhY1JRbnh0ZHdmQm9tMjBkeFVwcnJHZml5Uk5ZZEIrTFVRSXQxNmgxQ0l2NzdUaFBudkpwQzhDQUlaV3ZveEZ0aGJIWkRFVEV2YUlEcEQ2b0JpaUtjT29ZU0RwbmJhemY3c1NZcGQ2MlVJaHYzazh1VVAycW8xOFhLdXBKdCtDNXdQMXM0MU4yVFRmOXVyWDFZVGFOSjFJNWRNellKNEJlUnQwY2xkQnV0MTM1dkVxWlFHZ1ZxdU1OQWdUU1RtUlJlM1puZ1k4ZWJXN25PcFg2emJtaUtXK1dIQWhLVTZxYXVnZFQ3a295VEJvWjRLZlpHSnZONnhabUtmbE9XakVOZ2ZWRU9iU1JMeldWUUpjQTF2QlZnaEM0c254K2l2NGNzdzRPSmlKYWhOME9YU1VrUUUwYzd5Z0dXU2dqWVNDTW5EUHJiMTk2R0dTd0M5c0Z5dXRMMDIwc1F4c0trSnM4Z2JoMlNXcVZqWnY0V0FtdEZ1b0JNQ2Q2eGNaMFZaT1RDRlNXVnZWRmVkR3I4cUtCR3JRT1lIWXhlVDc5bUE3YlRNdTZ2SWZNYVloYkJCWWF6RkhSWERsODBiVjVvc2d2ejhTVitpMHpNODJ2RUhJcE9BaUY1Q3VNZ2ZyWnhUTm9iLzRCc3lCZVZKSG1LREVqcFFaNkZBNFdiRFhVUUFzTzg3bjAvNGg5ajVPSzRlUXNBMlFac09BZjhnd3d5blRPUWN1RGxieVREb21WdEVnL3VuQTQ4WCt6ZW8wVmpzQnl1ZjBTWnRDUksxcDVRYjAyRUROek5QZFFndVp3elk3Nm5yVE9TdnEvbUY1V2dIcG9jZmpOMU9DdmdRYXVJeDJ0THI2Z1NQOG02N054cjFJR2ZGNTUvK0tDM0lCL2drSmQxbTVqUFh5SWIxWjB1aGtNUjhkeXFReWg5VXN1SjF6OFhTeE1EbWVkZytXdFhCR0pWMitwZGdlbDkwTWdIWXlLTnh5aHFBbkQvUjdialZEVHZ4K3prQ29BdENqYlR5ZEpGallnellmU1BFUVNhVzVkRnpZbkYvU0NSRXk0VlhOVEJZVWZGNTJyZW1wMjZqYVZkZ2lwWk5KVEdKOE91WUlNOXZlc2VraUoxQnMxV1lBMUgxSDZva1puMkN0UjJ1bWdoMzFiakF1N0hvTmY4MDNTWW1ILzZPRVFMMG9tb0tRb0xPeHJIZ0VoMjRNY0h4Y0p4eFI3eUJoZXRnNHBSTEJ1OGQrYVdNQkUxQ1RoeFkvTmwydUx5SFdxQ3QwWEE2dzczWDVUeUV2OWdKOE4yZysyOVNITmZlaEI2T1lPcWx1YW5wd2thYWFOR0xmbDZQb0ZKWGhWOUxLVG02Q2syZ1RrZ0gzZ0M1Y0duRGVtNFhFR2t6STl0YzlQenlPalJTRG1mZ0d4N1B1ZldCeEJ0dlc4MkJ1ZmwrMHNwTDRnelRKU3ZrcGNUOU12Q3FjbGdleW9CVm43L0xZYkNGRExKWDZ3U01LdXZObWNPRE9MVkxzUXE2akZPbkQ1a1Q3Rlo5TlpOOGJySXZibHMzU1A1QXN6Zko3cHdnSjZpL2dBSm1zcmY3ZGxLWmNFKzBOby9pMDVwQ2R2Qk9QWFVzNzJubTNyaFI5Z2xNRlFoMitqU2pnQm9tWGNLWWdlMnpzYzc4bS9aM2dWRWFWdUM5YnpvbTRzLzZQdUFwaG5sYy9wanZkeDh5aTJERUh5UWVORlVVRXVjTlFpNmV5dkVnVlFyeXI0V1FDeWNzQnhGYlg0V000N2pGVHJBRGpnL0MxWHY2VzBGTjhHNE5ORVFYNEVJSEd5aWR1UDBDSm1wVFliMzlUbGx2SnptSTFFelVScFVheUNNM1VhNEdqeDBqbnd4QzBaSDkyalZHd203YmNHRm5LbjNiQ1BkSUY0TzdKeHp5dWwxV2ZXMHZlNXQxb1JPRE1DS2dxTlY3empyUy9QZzRHMTNEN1M1T2xhQkJoNXhrRElEcDRSVG9yRmxiUnAvSXBmS3hGRE95WXp0czgvdmN2RCtnc2M5RUFCSlJGK0tRWTJOd1FrZS9KMEdRREtMVDVaOVc4UHprY3d0cnN3dmRESlR1c01DTVZWbzNjcDltemNydFJtZmFiZjhVNEplTituNDdEelA1a1hYL2sxYXNkKzJJR0gxWURPa0FQR3Qzb3ZaRjBKYnJWK1RPeUE3VGVHeE90ekp0K1FXSXNFdS93Qk16YzFKTzAvNitiZXVUTnRBVU5PVlNpWSsvb2ZlK2RIZlIrS2RxTTROZmJodFF3clNteWtYUXg4KytrSCs3amoyMWZXSC9XUW83bFlSbTNQYzR2T1RSU216TExkVEJxTU1NY21UbmdiZFhTZSszelU2L3hNa2ZQUnNkTHk0WUFzalZ1WDhOdWhPWjJKS29pRzR4VjZqbkdLT3BGbXhnUjI2ZEhleTdyeUR2Skk1Zy9Td3NvVElVRkdOTDY4TkcxVkVSYXF5OEU4d0pBc0t0dkp1ekM0dW1RNkdYblVBaGEzdXNjeEV2cndpSmdOejRIeFpJQnRFNTJBRVpCR0J0YitPY1FoMkRLVDZMWTk3dVJuVEVPOEpiczJzaGMxQ3djQXZ0bFZQY2lNSWF6SSsxanExbHQ2Y2lmdUVldFVpbmJhL05YZ3daR1ZzLzFmb0g3ckZvS0R3eU1RRGdxT0ZEMk9pUHZGR0QrYXh0Nzgvc09sNE5TWTdqZnlQTkU1VDd3ZFhWSEZHZFBDa0hUbTNKNlVjcFZST293M3lLbjFDZDRUWUFGR3pFaU5pTW5OS2t0VG9VM3cvcXpud3FtaTVVaEkxS1FLQzBGZlQwN096RlVkbkF6cnhkcVdOZUs0dlZIVXptU09zUXV2NjFsaTArWjhlcEFXc3VaL1NaU1hVVWR5dnZaT3hqamowVkduWFZsQ3E4MFNlbkxPTTh5dU81OXNZd080d2laWW91aVRlZ0lZbTdiTis4Y3NISW4ycVJmZTFQODNVNjExTTUzK2VSbEEyeFVQOTJaaG0vMmEzV1JVV1ppRU5GSHNjVnluNEppNnVPWEpFcE9EaU9MekVoVFd2dy9rN2NwYkxIUFlXbDV1Wi9ibGUreExFVk82bDdBUlVDSDY1cDJnOVNha3NHM3RRTTAzWHAzdG9LSFFlUTk4NWh6ZVJWTG9Wck0vTThhOHNuazkzMmloeWY2UWhzV0RhOXhzRFpyajdObHNwSWp1U1VzbFZWcjFDN01kMFFTaitXTW5ML3lnOTV4Wmd5SFFhbGZEK2ltSlhybHVEUDY4V1ZkRnA0Q0ROTDdWZk9WRG1NNEMyL0hoTDQwV1gvRTBvNDZDQ200cHU3c2VKblJadGlBTU9Ma1hJTUQ1L2pxT2pSY2I2WFZCRHQ1U1dVK1lvUXdKYTR2czk4UTdUbWxQRC9WYVR4UVhQTlBKdSttMnNob2ZDTzVIYlZxZEVOUGkxRXlRQ1kxcktZSjlSZ3VGM1VWbjdlYXNDNFoyenlsdkVaR0pVSHVTenNMdU9GL3JYUExXUFd0QjR5cGFCNkx5VU5pZHV1Ujc5MTBhQWhxdDAzUitJWkJzMUhHUEtIUzlLeEhMQ0R2cDY4L0NjQzdXVXZzYmpwUXpwL2hBODhuMENhSTJJektlWnl1RHZOcm9hU2ErZmtISS9XN2N4elF4dFV3STU5YU11MnhQeW9mOWoxRnp4clJnZ0lBWTZRbTB5NWFXU1FGNDBVUG55Z2R3ajQvU3dyZGtqcVBoL3VEbk03dDZlRU9SbkRkbi9DVTBUQ0U4RFZKbTV0K1RzaUEwTmhuZVJjTmM1WDFoTW1HS25pdlh3bUlXQVdNZk1FczZVa28xTDBiV3loWUoxNHlycmpvbGRSVlh5TG5VVFBpeHdrUzFTVmxNV0hvd2tVTnFrUFU4Ymh6VzN0VDQvY3d3YVk5dEkwdHZORVhXMitTWkdHeGRZd0Y3TjN1ZElQcFhjczBWclp2R2lUaS83UlBVd2hGcmRRdm5rZ3JtQytUUkhoN2k5eVpXOTl3aDlSZ1FuOEF3NEY4UmJNNWtvd0J0VW5NaGYxYkpjQ2hTNjFrR1BDZUZOU2FGSG9SSVBFUlJ3c0NxTmlpQ1lGOW1DbW9sQzg2THVVN3VOc09tR1k1OFozaU5OajN5UzRydGlCMU92dVNrMC92VDViTmsyYnhWVytMMHBZWldaMUM2L1NhZ0RFNWJnSnFEVlJhYmNtMEVHaTVqRlV3TmNRNlREQ1pKVDc3L3BudFMwb0JEczkrd3EwbUJTeENYOVgrQzhNdDcvZXgzd1RxMlBHUjAzdXlqdmMvNmV6a0lYR0gwMUlhRDR2V2JRci9iQzhhd3VMQTdRVG5VcXBjaWFOWVRvdnhDOGZYdCtsWFdlVllkR2JiVlcvNEtmSFpHK2dJL3Z3aDJ4bmNwN2Rxby96aVBVekVNT3VoeXBZOUNwMElSNkpMalVETW9KdHdKZTBGa1ZHV3hiM010NFdPL1pDQXZSc21HdDk5a0tJdVB0cnUzTU9abmQzQVUzcVJTb3JoVlV0Y05nL0s1MVVxSWgyZjI4QTk1d05Tb05lRUZIZ20zNXZ1Vjg1UStUejEzR0JRbm9sUVU2dDFubHRxMHU1S085YWR4TnA1Lzg1Z1NMZ2FBLzdnS1BnckRCdjNvK2k1a1U5RmU0MGdLWGlycEozZ1NkMHBjTm5MTUp2ZmQzdXlqUmtRQjNWUGJ5SmtyWVpaVU81OG9EVGZuU1g2VDJBVE9pam9JTWNyMXRMdjh1NmVEcFhNbGhoM2FwQVE1QmF2RjZGRmw3bnBXRDZVQkRCemYyYXhxZnRRTGdHWS8ycWk3aDdFUmZjWm5CZkxZU3phL2JjZXVPcmt0b0tONTFhODYxa2VZQlRvczJUY1hHdVdWNEtoMEtYUW1HVG4ydWp3ajlwSXRYWjg2RUp0c1N0aWNGenh5MXRKY244cDUwQTZHYVNSYW9ZTklOdEJ4Z0kwdE00TFpNc2RiWi9xb3h3YXJIbVhQai8wb1loTU5ESEltQ2VHL1QycEQ2MUJVbENXYVdmYjc4aW93eVAxYVdaNlZXbWtlb1B0VEdtb1I0MW1WNGJnT01oU2JVRlkrZkdDbUFYVEVuSzRic0FEUXN6N2Y2TDZ5SUNmYjFDUUJra0pKd21LTnJ2bkdTblpJRUUwNTRhTEo2OXN4dElEL24xZlFkQWg3SUJKZmlvWWZCUjlER21sc0dCYktTaDNTQ2g2WUVvb3lmOTlYWUNDTW9oeDlwanRTWXMzSkI2S3hLSWlvUTgxWm4ybXFjQ1puc25YamJjR0ZPdWRXcC9KOUMzZ0l5TjVmbW5zMWNsemhUUlU1MHhGdVVnbzdUeVc4UDRFb2l2OXhlL1gwZFRGZE52WDJHL0JXbUo2NnE2WkV2YnJKR1ZyWkkxcnAyNHh3Q3R0Ri9MbHZ3VkJkdUtTV0ZDSzNJUUMrL2ZRU3pzd2FITURuRjRvcllmVFpBM1BUZTRtTG8wVWluN0lFV0JoODYwRE5kKzVtR2M2WXNGbllaaG5iT25TV2VYUEZDbEVvUzFBTVc1K0ZKTWdSbmt5d2padkhWVmlUWDhuaHdpanVZd0R5bjdQeW5kVUVDUWFpL0FjY3cvb2w5OC9zeHA4bGZQQ291MkdGS2JpVVFQZVRhUVA4bU1kTHdjYXVlaGJ1Tng3RlJPRkRQNVp4NmlGWmZ4bkIvUDZNMTFBYkMxNDdEeHhGL3JmbFQ5Ylk3eFp3VWE3MVVNNXgxSnZ3ZTFkT3BMU25pUTRZSjNrSW5VUXNwQ0hVQm84bGNXdThNbTRMZU1lMk44OFZNU1B2Qy9PYk1oaFpwUjdIMnBqM280UTZGUGVPbEdWelpJelFSYzNNaDBOM3Rkdy9rdXhRQjBGRG5OZUlIQTZ3czFmVVIxZU9LWmR5QXh3MENxTFNIb0YrejJjbFU1UlJ1OFYzMUdOdEhGQWNmdUZ0YUF3TFdYeWVlZHQ3UmE5ZnVST05hMFZ2Y1NRSUc3bi9QMDNxWitUMDUwelUyazBLQnY4SXBJRndTWHg0Q2tVbU53TmZ3QlBIbmJMckkrNzVWQTR3WDZYcFBiVTFjQWcrUGUvNTE2VHRwZnI1Y3hlOWlmZkFVaG90bjdWQTNPcVhpdGk2TXJXVE54ZWNPNlhVUWRBa29sWEpBSlNBTnhYMnNiUDgwZVZsa0lIZERESmxVdGg2KzhKdVhuTXJsM2ZnZnhOWUdnU1diMDkxYk1NUDRwMVN6WHBNaEVpVy9mZTdQS0JvMEpaczJNUHlBdzRkU1dFYWVzQ2lMd2MyWG9FNS9CdG5MMmpFUXJuTDhzNXBrdmk0K3V6QlJEcXZDNG1ZSmgyeDI5b2FQRzlobDREbThqVlBsaWtuOUNPMzI0TU90ME1aUTNlWjZpcC85SHJFWFNxL0MvZmNJT1U0Y2ROUFhHdWVxbVJzS2pkdjFzM2JkTzFZWFFqcmcxUjZDb3k1V2tlM2Fuc1o5bWlBRHU1Y214MWU4TWliTHorOTBBOW8xbSt1ZUpTNGpnQWd6blRBQkpqOTlaZGRJb2F2Z002UkYxblJxZC9CVVNMWFVVK0c5UGc3SUJ3ZzBVbmxXdDZOZHlJNmdqVHgrYWlNM3p1UHFvVll5cEs5SjcwYmdhL3Z3NmNCUURoekFnaVFNOVV1RU1wN3Mzd0xCRWlPeFAxVFgyUWNtNklYNXBudHAyZmF1MEtvcWVPY1VsSG8vWXRtMEZNcFlJSURGL29jOHptUjE5NVg4Mk1IWEtCMnoxWEEzUzVCZGVpQWdJNG5UODBkQk0yTnVwY3B5OUhOT2Z5LzdDUTlDanF1ZE1yUjZmcW4rbklld2EydTNWWnZqbUF2cUJkVlJOT3RabUk2bGpBMmljd2F1SXhBZWlFNDJDYjdSTWpXdE1RR0JUUDN4dE8yamdyT0RpU1E3aDZQMFpZTmJvSlhnbFo4Y2hWK3oveTkybUJOQkNycGxqUVYzVGhwZjJ2RDJLQk5UamgweGgrWnoxSFdYZnNEdU1GaEJ6RHBrS21IZ2hGemVPb1JBRk4vbDFJR0V2SExPYW5RUE8rd29yV2R5NFVYRGtUelpOdGtpOUtmblNoNjhqZWJHTHZlTzl1K3pQK0wxUDd1djk5OVlzUXFKbEZYTWFsY0pmdzROeE9YT0FRdk9jYjFjcHBEMVFhOHM1T3AxMHdUbjZsdmpWY1YveW9XT3B3c3BqVDZ0UmxtbTRsUDFjbzErcURXV09kRU5QekpnMFhmaXZrUUhybG9TQ1I0MmY4TzdSWTRRa01oNmJBaktvVFEraVVBRmtxb3Zvc0JkRDJrZmF5QzJ3TWZPSGNJWnM5WWNKSE9Ib2E4T1RwZlgrZUFpUE9EZFZ4QjZKRFRHUFNyaXZmT1JjdUt2M3dUNzdBZDNxeTl2bytabGpvcWVKNTE4NHZ5cFR6SVE2dXRZTCtvRm1wWnRpN3VZMVM2Q1VLMmVyOHN3ME9DYWF0TE5FVXBzREQyZy8xSmUrZlNOdHl0eWhsVndweWpGVTByVFNVZ0Y5a2ZuL0NQNnVFclNvQTR5SGxaVlpIeWJPQS9QYmw0Vkt0SGpVcW95aGxyQmMzbWhBNHVSandJT0RHLzlFZnVFTzd0OXRUb1VnT0hZODEzVEI2b0F2NDVQaUhlbWU5L0FUOVIxelAxN3g5VVpzZEpxNlBKQnQrYVpXNnpnc1IvNVpWNXRQL1dWK3ZJZzBOTTIxZ0dnb01URlFYZGFJQmJ6MmZJNkxsY0gvdjBGUzZGODBNM1Q2Y2dQQ2NON0RTcFhWMjM1Z1Q0Z0tTNHdwdFU3S0dWVzFRRnZDQ2pZZWcxYVBrSzFwa0c1SnpSb3V1WWR1aWtRZzFzUWxlSDVsVkdoMVQ2bytWWVZVVDRIcm05RTFNYUxYajlweHYxZEdHaEs4OTRMUk1aVm9vdzBTeEdDdVNNaGhvN1RST3puUmNGT2FBRFQ5RzNwTE1oc1JGeml6c20vQkxHTnkxbHRoeklEbmRSTFY2TmZTajRKYlZLc2RkZDM4L1ZDL0hQVkpaTklBcUM1SGh0U1V0Q2pWSnlISno4elBBTnVkWDNWU2FQcmp4ZjhuU0VVNHJISm9TVjZuTlBaSDFvZ2MwTVBGbmVreVFlVmhic2FicGw3c0VqR2FUdWZyUHM4UEVGVzFQc2N1OVJGR1NzaE1JR1pjRXdRMVlMcENCUVByN1hUME9vZE1ZTFZZek5XdmtFd3RHM0UzbmZncDFRNG1zS0src2I5aHc5UUJPUGNGYnhEUWpzUGRVRitFVnpaUUpiRWxYeGZudGNMaklSSllKMkl2WFNMZWdVWXRnNmtETVBqRkpzalZzUERibVlzL3hkSUcra1BmNWU3Tk83QjNoaUZObXhoSkh3KzAyMUE4U0x5aEoxTEtXSWlTVjM1L0s2VGxRUStyT2MwcDgxcXpjTCt2ZUw5WmZsYVNLeW1yMW5IeEZoZTFHaHA4Q2FVNFg3dTEzS2UzdC9yK1UxQmM5NzlETFIrRjNROS91SGM2VHZ1bld3UXNXZUtEMkt2QXMzVW82ZUpVcndOSTFBUXhBVy82L3lFNHRXT1gwMW5hcm1iSXFjSGU3YzY2dGh0TWloV3Z6a1djNytGUThIVjdHNGw3K1RGbXVQSHRCYTVBQmt3QW5ac1p0S2Y3NEtPUnpvSEgzWlFnZjJqSGVPaXQxMUNzbTJOUzBVMlZjbUlVSmJJaEJZdGQ2S3Y4ZDdOeDRUeUNvakwrcWFIWGpId3JIeU9MeDErdFA0RWxXbDRLdzQraXBiRzdUVk1rd2RJQnVhSldiYVVNNDZWQ2Y5ZzBvNVFiMVhwVWFTbFhyRUxnRVQwQU5mMFVJeEF3b1JhQVdTS1pidklKdkxkQjlaOGxRanh3UjEzcUorOEpDeWpSV1orS3JzTU5UT0pnN0E2QWY0clQ1akJTK0hnSE9zdW1ydENJcko1Q0I1K1JKMlMwMUtZVjNkdmFLc21UZ0hvQkdoMERpTkZIUkhmZll5bGVqN3lPTDdXdThyR1A2WW9ac2FNU2R1V043UHJzdUpQSGdUSitRclNwNXEzMTVZMHBDUVlsNGRlOWJ0VkxjQTBESWMySytuWDEvZWg0d1ZnZHlkWU9JZVE3eVRlbUtENVpRTmhySHUrbFlNNDZDTmhSVWw3Slllb2lFKzRsRWRPOG1HcEwxVEdjR3pKMThMWG8wbzJJb2hGS0wrUHlKbFJkNC9hSXgzUGtSUDYwVDVLVUoxdXlVMXZXbzR4aGRZWFZhcEFMbEJJWWt1WUpEaU1yS1d5eWJRZHFKMTl5YkR5MitlZS9mVzBPYTRZYkdLT3Exa0NFODVCYm5VVmluNlAydGw3VHgxSHBRbW9iNi91Ymw4aFE1dVYxK3gyeGpHeVB4b0ErSnMxWGhJS0M5SFZTRTAwMTlmU0xRUzV1Zmo5OFJVWVlxQUN2Y0N2azRyZVNObTdYNWwxTW55ZVNEdG4vSFhHdWU1Nnhta3A5SXo2U295RDI1Zm5pR0xEL0ZZa1dCa1JvZkc2dU41dHFWbHpRWjgwR29Qck5JODJLT0s0aXoya3hQR2kyM2pvZUxqVUdnVGZlenFkRWttS1hFY3pjaURBYmRtUGVxTnNaenZxbWZJZlhiUWxTK1h5Qk1rR0N2TWU5WWNHNG1LRnlSQnlXNUYvbHF1cDNyMGZob3dXSzZYR3p2YmlDUzJNYW1wZmpJdjV2SmpTK3dHd2FaMDExeFpxZE5sbFVMUGd4QmtCT085Q0Q2b1M0NVJmcFV1cmp4UnhINzhsSHBvTk5ZLytUMVZlQlNvMDZuSHJ1WENPUktJdE1YNkg1YkpaYlhXWjl5T0VWYkc1V0hXK2d5SGtwdEk0QlRsTThmYk94SkRYTGxRTm4wd1lReEJvbThHcGlXS0NWNVU0VmNMWitFb0c3YjJzRFd5dG1vQnFIT0NEWVNKd2svWWR0cDBYd2liUVVOMXpTeTRZWGdmRHRwN0JIcFNXb1I1THpDY1pabzlLVlFFTTlvTEFvR0krU3EwaHZhMGJ5V0xWWmpBOWdpa1pHa0gwMjVOZkw1Z1c3N0RiWTZpSGRvMk8vZzlCSVk4L296bVZyeHJMSnVaSnBvNnlIUzJreVlMY1o5WG5hcnpNcE8zWkFZelFBanlEdTFUeis0czJaR1VWekJaRjZTQm1RSnhaNjRMdTJibUZNMnNlNlE5eklScDBLNG1iNUJLWXFKZHFlSEhhYWhRMFRyWnFyNXpiTVR3T2VvbUZRTWg2R2VhQlF6bjVFck1PUEpYL1B0WDhvVWhGQXZQNU9abHdab3d4b296U2d4OGp3NFZSbFJSWkRISjBTdUdVeEFGZlI0cjdZekM1emdwaVUra2E3UFd6L1JyRmEyWi9zWGRRZTBZZWVVMFgvTVNBVHo3dlJ6MEtGaDNLdG5HM1JKaDUrbFpsTldBSlNWOGo5SExQc053RzZrdUNVTjNwUCtISThQWVFKWjArVWVoV2dzeTI2S3UrTVBuV0tZRjF6YWd1dTM3SE50SWFEd1RSUUowdnNLcTNPRVRNSTluWmZSUUptbjBKcDhBWEE4d0IwOHhuV3FxMFgwKytFdjBiWlRPZjBXVFZ2aFJpZERkbEVzclM1V2ZxakF6TUd0U2h6VWd3c3NPQ0E0L0RsNUlPM2VlczNnTU1aUHgxZU9aVWpNQWJXZ3NGRHR5amNlVk9mL0VyNE9iWkpjNWsxRDNaUmMrS3lJZFp2bCtVOWx4OHpBMmlYTUZjWExMaTlYdVVuY1h3MHRVNU85RStUMHlxaWtHcEp3RlRUTW1qUUJuc3pJL1BMSHNhM3FPSWVCSExzWUJlZVkxTlNuZmI4cTd3cVFNUFF3NDBmdHJEV3pnUTZpV1lPRjMrU0k3L1pmUFRXOEdXVDlxWTl0V2R5aVRkMDRnRmJQemtwWDdQN0VSdU9Vczdpb1FRZ3lpTDcyeXBlb0E2MWZvN1R6c1FDd1E4eHVWT1o1bXFtWnIvYjBhbVNEVkdNTmFZK0gvTjZ2dWF0SnhCbXNOVkFKaTVDMm9OMTNoTWE1MFlNVlg4ZnFoajlKRTZUcFp4SGF1U0p0ZU16aHVmbXNlU0tzbDJ5cjlOZVJGRFJXcDlPRnhkalkrRU5jSUtNTXorTWViMnF2RFJYbmxtS3NFcHdFUDZmdUdnV0ZxWWhwbVp5LzRvbXdPQU5kQktabWVkN09HRTZvUGE1UG8xZVhyWmZ5UFpjWVpna1dsZW51UnJpamp5U0d4bjl3bGRrRnJRcFphWjdOejc0S25SQ2pETm5yTGo2ZEdvL1dtUE5KeFVwcFBDV3FrNFBIejFmN0JLMUlxZlZPRGFPWEdvT2xkbmFlV2NwSEczYkRvaDlDbVY3c1NOclRaN2gvaEN4bVBObmRpT3hhWTdVSDRqYUl4ckM1R3dQQ0ZRZnpEcVE2dnVkbTN0TDQ0Q1dhTGt4QjJtMTl1bnRLTzEyZHBISkxtc0FicEZNZ0I1L0xSYUN2ODh6SlI1WktCZXZZRXQzSjZiOHprZVVUdWRpRGtUOUpnK3hZMk1PWnE4ajBZVGthbWQxMmpMWktYYkYydkIrUHVCZVJCOWlJeFQ0NDcwRENpQTlSUzExeENxNDF0eVQ5aFAxZUw3aGE4MXU5TzgveS9Fai9KeThrU3phN205R1dVREVDbmxCejJhcy9MNGxnYWQvWlZvTEtVdUpWTURjY2piUlZKVHliM3BhWHRKN0cxYjRKd0liZUhqOERPRnlvekRjL0h0RVp1eDJWWmhYbzVXOW93TXl4UFpsSFFOOE9DZGVBRXdOQ3VGOURUWE9CVzhnVzU5elNZcU1uZnFPcEpwcHVMeWNQRzVTSE9aTEIrOVpwRlVnMk9YVjRnNVZUaUlqT25BakFpSHM4UzEzS1RJUFNHMS9NOFZkRDBhME5zR0hGYmhGKzNoVUtHL1EwN1VOM3p5WWdlM2FWU0Z0U21nODBWeW5pRldSUXhqSXBDUWtta1MrNUIzT3dheldaRTJoYTdmVldZNEtkb3RLMXVjNTZ5RlFnVG5BdTc0dC9qMkxjdW9ZeW9JblBOaElZdVNEV1B4aVg1ZjE1ZmlJYVhQL2hEUGxpUlhhSGJ6QmhFT3V1eVpmV0M4OTNseSttaTYyc2h0aEUzQjZJUWhTbFZiS2tsUDMvNzJycXRRY2dZcEZoZHpnK1NsbVZCVjBObExiclQ2WXo1bzczeGtkdkg4K283eURac0R2TkJyWWhxblAyOVIzNnhQLzEway80VFFBcEZDOHppOFhFS21LQ2RnNjlSR2lpeEhIVEFJYmh1bmpXYmVPdTlPUTZIQk43dXVZSGV0WWhJRFhRK1hqZnUrd1lraENmUllaOUVoQ0hoVTAyU05yL2h0MEI0OW9VZFkzR0RsTG5pQzJxR2N2K3VYQmZRMEhDbnI1Mi8ydk0vSWJCR3hCVWVzMTBLc2VtRnFiRnRhR2JUa01hUzE3Q0k2ZEhHVkU1dm9XMUNSQjB0L1p0eEFxNUtwZCswVGRLTTdhYWE2WE80S0VhM0pwbVE5R1RyZmpjZXd5K09XbkR5NlBqM2lTMndUYVlNeWJEQlYrMVVCR2J2bzJRU0R0blVkdjN1ZHc4WENpNjVmT3lORGswZWtGQkxZTlZScXhwbjBRNEsrVE9oUGZCQ3J1ZjhZUVZoRm5yNmZ4NnBJYmJkNUFuNDc2NEVGNEpINWF3VmIyK1V3TWJDSXNKRUt5MGExQm53eXRpdC80TmpXQ2Q5MDAyQXpFeG5na3ZmMWJVWXZFcFFabG5taFNoQzBuZmpWd0Vuai9TRmF0ZG5qK2JXZDRjM05PdWhkRk4wR0E5STYrVXJJakhTZFcwUUF1MnREV0tmQVhIZk9qaFUyWkxaTGlQZFUwb3htR0l2ckdrQ0NOTjk4bEhQeXpRYjJZK2syQjFOTGp1VGlpOGIrajhhYy93K0grMVNHN2Q3b3EzRG9QYXViSVFZSFczQTI0K3dRM1hjdmt0WERadXIrUGRoUDlYUE5zdFlLTkJLMHRxdVZPNTdjcnBzUmNTNTFSRUVkYVpDSTRwLzFLdk1pcXgxNTdGMVNGNlpNeDJsUldmOURHTUk0TzByamdWMzVoeFlxNk1vVXd4TEsrenBhMnhLMnZuYjNrcVNtVXIrdGdsSENOL1dTNHpKMUxwc2Z0dGttMWIyR1RFbDl6ZGtTYjJJeXNsVGVFQ21EYVA0MGozV2pvNmszZVNjNUVXWmZkOWN5MzgvR3p1WVovTmtISFJndFIzLzhSWnp6N1lkYktUNzJoOW1icVpaNVE3aXQxVDdya2haNkRlN3JiS2pPaUQzMUZqUmhPRENPTE0xN0RVQ3ErWm5QS1p2RzNYZ0ZCUjZXV3ZpRVlxd3pOVWtwMnhIN2hyRzBCU0FXZWM2SW9MOTBxRS9jQ2Ryd0syWlZoT3crMFR6VFFSZkpoVzh2bjRCK2poN0NGZk5mVHEzSGk5RmhWZ3VKcjJkeGlya3U2QWZpbWlWM1ovRFdpMnJXb08zek82WnNRU3pja1gwZ1JWZ2F2eUlhdFpmeHg4OEk3WmVtRDBtNllkUmo4YitqQkV6N1RNb1c4Y291NWRVbStjeTNNYVowSC9WRXR6SHExTCtQdHdIRjhvOG1RQmFnMGwzSzhJWmtXSS84NlgwU0ZBcmdnTlRUV0x3RTFZL0d3Q3I4dzM0VFZpL2VPRUJhVGlVR3pUVldCUkVnNHV3OVRCMENHZkhvRXg0Mk9PdFJ3WW1oMVdDU210V1pkNWV3TW9FMWxjcVJqRERLNlBaeFQ5Y1FCRGI1WlFPeUFhQ3ZXNUV3NGxnS25uZFJmWnJ5MGFtVzE4RzJkaVJYZHZJdUhEbk1ScSt0VTNjQXZBa0E2cVBrUDZGbXZneGgyVEhTWDdhdlFtRDVZYnJ2VnRCOEcrWEVWSjNrWVpXbU81YXRBSzRmdWVVUEZLalZRdjlkNnlaeXk5cVVIS1JhOWVRUE1tZWJIeDVkOTNWMGZYZ0xZQm1uTWdoVEJYOTd3MXZFSnQwTjUzQW1Sd2tCWXgzS21raTFoeExhY2NnckhWd0RtdEcrQ3Z6MnVCTDkrMnp4UDRtTDhPQ1YxWDRDYnhUQmVKSk54Wm9tbXdYQkM4NEFQYVJ4SEFxZ0MyU0dqQVdaSXdHLzVlbHUvemF2a2xhVEJqcXptZk1JNSt3VkZ1b2U2UDBORFFrQmVWQVM4MVJRQXlMS0luTmI4ZlozMWZ2V09WN3VaNm5SWHdJVnRuL1JISFRHbDhSNlFld0tCKzd0RXliTUY1Vmg4bzlidDdKSmpOSFkzbXI3ZGhzd1VNNllxL0I2Q2NHdHYrdU1MY0UwelJlSHlYaURiZ3VoelFOajIydlN4SzU5OEMwVjBQcjJrdUhjVFJ3U1FMQk0xRXFqcmNVdGM0ZXRUa0UvMllsa3hLZlFSUmhYRHRDMFQ4L0diNzdoWUdRbzRNa0phbndJbXZoNVlTb1hZYWZCeWFrQ1JhN0RvM25HR3NteSs5T0tkcldDZWZXdzF5eXBXQ0FieW9KQUhZOFpNTXh5ZEtOaG5DV2E1NStDSW1UcHErRzAydXlMa1hueEpGNlRLUE4wYUFOUEE1ZXZMaFZFQ09la3UvME9PK3NER0FKcXZFbzFvQlh4endqbytTNGJHTzRLZU5LQVFlV1oxaml1aGY4YmMxank1aFJzWFU1LzNxdzd3OXdMcjV6L09GMWxhcDMvSGtWckRYOXJVZWxnem95WGloeVZOVVJqeHNyNkYrZXBNaGpUb3RHRHo3ZjlHck9nckxSSWEzL0Iyd1Y1blZFQW1PMDlRQ2g5emxzWXB4Zm5LQUc3NGJwVm1jSklLNXcrbk1kTUpLSnFaM0RLa25EUGVBcWVnV2NaclBzTW1EdHEzQ3QzUmptK2hqNk5TVDVyKzZ5Y3pmaXBkMVBlZVBSbXlqVEdISE81VVRWcmV5MGk2NWpKbnphNzFBelBod292aEFUV21vUWVROTRuM3ZGNDBRYVJVdS96YnM1YnJ0L3R5RURBeUlJQlFkTG5Mbzl4S1BJT1VvMzNqajlZV1lqNE5INjA4RHhjQUpsbVYwUzMrRmo2b0hYeldPWFlYWXJuaGVtQjB6WkJUaUw2UExhSW9UYnRwNzVEa3dWK1M2QmZ3dHFEM3JVR2dYekZoNTNudVpqRlQ2S2xRT3dhRVlBQ0M5bTNzNGU3MGtSdk1aQWRud2FVYVcxT1RQcnliTWpOaWhrSUlGVk5TdHRPdmlaaDlHS01PWFRVdWJjMnJXSzVQOUFGM2FkUEJ4RGhRTXZad3NSakZTV3cwYzIvaHVKRTdxOGNUcEFkaDRrZEtaZDhVbHljT0J6TWd2bUpEMmFpUXZUenBCbSs1MnNuMUNMQXRGYVZEWk9vWGl0eHk0Szg4b0hKWFBqUmZNemRCdUliT2kyUThrTkN0TjlGenFCM283WjgzVGUwemFrcFpxQVpmNEhTdXJJVDVyL2tjS1hhNXhCK1FPd3NBeFkwbkJyTGY5dG9xRnBFR2c0OTJxUXNUaktwRGFTUTJPS2J6YjRHYUJqVjFWcC9oaVNsdGFqNFFCcitTVGlqV01YdzJaellrd0RFOEFqa1JIb2hpV2tPV1c4dTczNzlFYmlpUGJkSnBqMGdZZkRNOWJSZ0dyTlkrY2JZMDE0eEY3Nlc2WEU2am00Q2NuVVNWQVdqSUxCUEJmV2xVekV3NU9qSG9DdXdkbGZVWUc0dEx4WGVhMzVYakdBUFVHSzNhYjNDYnBFcmIzMStidkwySDJaWUp2R0c3OWdJazlobUhKSWRaS1JjTkdJanJVSzY4YkxGSXAvaHQ3N2dia2pZZ2JBRTFEQlI1VWpvSnB5QjQ3RjBwTXBCb3BHN0hEcnQvRzVLSHZncGo5c2gzbk9za0JZMDNqbDJHWTBqRXc4WDRPUUd0N3Vld2kvWGRka3BudlV6WmJ1MDVMVGNjWTI1VGRRMEhuSEkzamhVOWh5aVg1UXJWT0hnaEJ0dTVSYVhvb0VFTnlCSVNZakZYcWtMd1lVaVdqMWFMMTY2M1VqVnNXTldMbXdHVDg2cmZDQzJ2L2RqbjRGYk54OVhiK21JNEU3cFF4OE1YVzA4WUUzeVpWS3VWVDk1S0t2L0pRQWREc2dud0FSekxTNFVvUTFxTkVWU2ppdDIvS3gvbzNqVmpRRkVKcUFINUNwZC9zZU9wbTFHT0g0QWJhenVGam94MlY2S2YrQXRlditCTkZuZ3VNVS8rUjdaNFhpaUxWT0NOQVBXaEV5L0l0VWVZQmZqOU9GRXRlZ0QzQVVmR0x3Yk1HN0VTSWlrZlpXOUZrTEtMaWpaVlIyMmFONGZzVHQvckUwQitXYlVzSlhleCs1V2ZrMm5EakhqYSszMHltczAvdDNUZG14WTlGMmIyS3JFWU05a2oyVkZzUEloeWVSaUd1K2thalhzMCtYVlhVT2M1aFdlYmRLT3hFdFdaM1E3Yk9ER1gxT1NocUZTUEtOYTZHU0F2ZXJVS2NMUXYvVUMrb0JtNDJhNkVaRnYzZ2lpU2JiVThkS3YwMkk4cnpDcmxGa0ozQlFXdENZN25icWFOSWFpcXNVWU5ScWo3NElwK0VxZXdvelB6K2NjMFdvZDlPU29aOWFpa2VjdlAvMjFOY0NOeUhTM3NBN21yT0Q1dlhuVm1EU1dOVU9lMGFhbTNrWGFaOW1yVGovSlQ1WGtEdXM0Q2FZb3F0QUxETkl4SHZYZEpicWxodkhLZnpBczNEbGsxVUlTN0l6bGFjYitFazJWd01WSnR5dlNFQnpxS0phSjRnTlpOS3ZyL2xhWWVlcVNZbStKNXhUTEhBa1lyVUU4NGFPRnlZUGkyNUdzWGNsOUwrVndvYlQvZ25GNktHOTFsVmJReEE1MXBzVVllRmpvYnRabzF3dElPcUxPdjFpNGpqT3FHbzlHbUpudW0zNnljZzNOMlVBWnlRdUE1dG9tRENxVVI4K2FnOU1PRVBIcDlOR3M3bE1pcGZXa3grVENJZFBFcHBYRElZMk5VelBDL2hMY3I5ZkJ0WENMQnN0aWVuaTNWVnVNZnZmTXdXaUNUVld3TTg3R0lhRjhWV2kxc0E2Mk1nem1OWWl2NDgxb05SV2xOdGdacU8rejZsQ2l4cG5tWVhTMGREMk05Y0ZseHFZa2lDb0lpV21qY1JLclpyVnA4OXI3THJHaWVrSUdDS216T2VzOEpPV1pmRDl0Y0xSSGJyQzBEeGZReTA1Um5SNjFOV0dpOWZVdlcvaHFhM1VlbE00Rml2OXZ3RFVvb2UyN1JUcUs1cDd2dmFSYTcyWGhTTzhEU1FieHVXVyszbGJWMWdXVWpZUWRvMDNpeVl4RytENVFZWWVFL0JmaVh2UHozZytQcmFaMU5pSko0VnlIZEFUbFRXQ2lJems5OWh5QkVmM1VOeVF2OGV4L2k2OXRkMmNaeDdlL0g0ZEhmYWpuVHEvRThFek9vQTUyUit2ODVuY0pzTUcwV1NPblZ6azdGZ2tqdlFPM093d244Q1IwS3RqbUVpcCtwNzBQQWhnWGRySmVYdnhwdHNrOUlPaGp1aE9ZREIzL0lNTzV6enlraVVESUszYURIZzNMMUtma3NkM3ROd0tWVkhCUDNuZStEMnFWNWdzbTBCUUY5QzlBSnlOSkRBbERlU21MSEI1eFVXbVdkaThydC9TUENJNlZ0UUZMNGZod201YnRkS0l3a3cveEk2Wit3SmNQRUx5NXk1bU9zQjh3WTJURG0zd1Rvcm0rZXZ0WHJEQ21uWTMvUmlwZkxJeG9wditCU1RlcUlsQ3pzaTJtYWdibndGQmN1dXJ6ZTFpL3ViS0g4SlBBVldjSU55QjNna3RnZS9mb3ZIMC81U3oyd2h0THo2U0lIQkNHa2xmeGxwZkcyZ1RPdnY0d2hVcEVlUlkzdVpzSVNxcVlYTXZXWWI2b05LQXNIYlJ3dUgxWFByOFdiMDA3YVhtUVBqOVZYKzJ3YnVDQ21hcDMwVDBTMys0Z1B3OFRNOFR1SUs4N3lFRTZ6S2twVllQZDZtbkUwMEFPbm0rVnZtNVNneUJXdlZIL01yRHZMMGFVMmoxanRyY3R0R1lDWFNVbHhyTnVSZU9pVlowTWxrOVpvd2ZhamV3WlRtWGVFanFGZWFnTzhzSi9tZXM1eUI5QndZUkF2MHVYZ2VTTXdDb3dycjczVmcxME5kV3RIdlZMNlNyVm1XVjhiRFhmam5iT0VjYzB4c1Mrd0V5SGdkRDdwdTlHT3Vod1UvM043RVZxekxwM1Z5V0d2aXJOTGsvTS9VTEVESnFCLzB2SllaZzkxMWhYcGppWGZVZWNoTEl0R1dMdkYrK0ViYUtEZ255Y1pZUGpaekJ4M1hGYXRRYjNGSDhjbGtwQmtSNTdQUWQweFhrQjRNd3grNEQxamhWd1Bhc2FYTGxhNlRyZUt1UmVXa1R1bnU1TlZtUktzV2t5RXEwSS94QVdFMWcyWWI4ekNSNmI3clJUSUt6alVzVndaTXZ5WnFZMXNpWG1FOEh1S0V4bjNLMWdqK1hLaVplN0VadEJOTVJwTEhadGFvUTgzaFlGZVJBZFd4U1RERGlBdWEwcm8wakdXUUZHUkhmcnNqZkFSbkNGb3lyT1VTUGVSNzc3YTk4RXVQdm8wSDhMcXc0UEtRWHlNZzNEdDRTendaYjd1K2wrOFkwOEZ5Y3krcTFyWGRsbndkN2I3QVVINGtPV2xBNEhFYk5uZUhabFJBNWdxcHpCMllKcGFFbUdnTE1rZ2xVdDkxN3M2Rzl4MVlheGZ1WHpzSlUxWmpnRWJSRVB0U3RTbTA1aDdhVDJBQ2J5NVpmUUdEVGRqekRWZ2FNelpZcFJFdVE5aGd5OU4ycVFMMmVoSWljT0hsMTl6b1NoYzVlOUFKR3BQRFpCOGRhdzJkWlBQd2pDcjdaalN3Q2pSTWQ0bWlNYU9iZXQrTGFLSDdYWXJrNXc3RVJBdmJSZjM0eXBoTlFFYURCNnpqVWdadlFya05DRldoWHZiS3pNRFJzN2dHVzJEN0J4Z3o0enNiTUp2cVlLNmg1ayttR20rWHV1L24vZTBBSDdweUFVdzN6bmh1alVWVlFjNFFkNWc0bk1xVVhUV2RkTWRjL3JrUitQN0lzZ3FWZnVWd1Q0d1VGR0hGL3ZMQngyL0Y0RUdFZGlJWGxSd1Z4TFNxWExCUEhGakFxbzlmOUtkMXBQYUI5QldoN2FDQ3loTWpBVmtsenBmWVNzQTdkQ3I1T2dwbUJROW9MdWtaSVlFc3NXN3o2TFpaWHN5OFRsdXFSWXFpVGhDdnRSZEZlczNYbFlWTjJEN2Y4cEVnclVESlVpa0d3dzBhUVJtaldhZ1pPNU1Hbm1CaE81WGJQRjhtWURBN2pTSU5QSXZWNUd6WlRTL0R0VkJndDhhckR0UHdMQ25ZZnJxRldLS1lnZmMwbVBPUVF1WmkrUWl4TVZIQTlmS3UyTm9WNCt2Q3Yrck9SVnhSNzVpQmw3YXcrRkJWZ0RGNHdpTERrNCttMFVNSUlqbkZiMm8vZ3lFSVdUcWdlMUc2TTlsMGZHUGxnM1ZvOUV5NSsvZ0JOV3cvRGtoL1lYNTBYSGRJU1BGQklETEpENCs0KzJLejJ3R2JCaExmRm15N2tjRmtpTjJGZm1VTGVDTHkvVllZazRvOGFOT1dXSGVSd1c2dWFoUkpNSUtnRW1wWEVJdk13ZllJWDlidEdwTS9kM1pJU1hqMEhJL3EwT3pSc2FWRnZTU09CVG0yR01MZStUbVNSTHFLbVF5UEpBRXZzQ2ttZFBteE8wNi9aK2hnZFZsWFBXVlhCNUlwYWtaUHFxbnAzcHV4aEJjTCsxblJzeVBOZHFvdnlLNUZVU1VTeHVVY1JJOExSQ0xqbGZPcFdCRkpjS3JoVTRnSnRjMkV1bmpYWWhtTkt0eFlvbktSQ1l3cWdJdXNHSWN3V3NyZ2ZwdjA4VTBjeGE5Uyt2N1NERlJTMm9zUGdLaEVKQ3RBQ2hjZHhQRGo0bk5ycUpzMHl3L2swN0oyL01xR0JsOXBCc1FhcnVKU3VFbzd2NURiT09taVNzTmlWRVh2bVd5d1hzSytaYXhzRFpuUVArbTlGejlpdVBXV1JnQmluYTdqSUNVNmhWZnJqNVVhOFN0R0hUV1N3OFJkZDJrcUE2MlE1U2NmaEVtbnZHT1Z1amJOenJMcmdBY0lzZlNQa2kzU2xGS1p3bjBEdFZWVmZkKy9KSVZYdUVYNVJOZFJBQjhXekpna3ZkSG5scjRpWnBQQ1R2SS9HaFpXQTN1ek5XVFNkSzdtWTBscCt0alRnemhQc2tRbEpQWEtnMHFtNGdsQWxyT3BrWmhCNjhFS3F3UnBkQ1hET2dtemxGYjNqeGhRcU5tN2ZzZkN6NXhSQkdtL0cxWDFDdkZKWTBJQXp1eVVWcjhxdXZrYkx2T2FISHdlRzdPWFZJTHhBS1dYZXVvVEd1VDhvQTMwWS9jQ3RHNjR6aytnbHJRTXV5SWFWcWtvNXRkVjRBZ3JJak94a09vbEFjQkZGRU9MdHh5M3pHMjdPUXB0VXFPaVRHSXl5NXQ3Y0JkdmxoWS84OTBESHllMWd5VDAxbXErbUEvYW1XZmxBOFg4bmlFSmV3NStNSWNMbGFiejJ6NWQ3MC9uMFZzdXdGc3U4SGhwV1d3cVpwRG9ucWl4ZGxiVUpONUljL01UdzhnNlh0ZzUyRGV6UUFQa0JMNFp3cHJkMzJLYlhrc1JCY2NHS0pPNzYxRTRqUnpEN0l6UWZKb0NBT3RzUmVDRWIxS3JmN0NqSDVqVWViWDJNNytzcXVZWG1WMWQwc0o2OXNMQUNzRUFKZ0JObHB2SW9qVWtXeHdvTEhjWEVmdUY5Y3I1MWNpNFJlVnUvWm43aGdnbXJSTXlRM2E2azRyN0xqL1lTQ2dham9RTHI4VldxRjE5TTlLVVREcWZqa3kzMWFsUERxMDV0R2JRbk9SbmYwdnJJVXp1alVFR3lPamU0aWhGOThEcGNjdWRlN1YvNDlxQzJJR3NWb0M0WVpXeHBlRVpJclEzNVVvZEE1WlNyM00vQ2dXQ1BKdUt0WmdFQmZMbDhmWjhlWGo0ZEkzZGg1bjBETnAxV3NLQ1FXdkVZeDdSdEYyVnJXamxWMC9pcDVNRDFndzM0TExycnFZaVA5d0ZlaEpzSGtPZFVnZlNJd1RjekdvaU1OMzBaZ0l3WW5iQjlOZFJhbWUxOWZtcktnYVNxTjFHR25ZWFEwb2pwMWdNQjY2VXJuSzEwM1B0VUJPMkphUWg3dWdGS0w1RFZ0Y3pHRUVYSE5pQ1JEWGd1OXJjdE1DYmxzeWo4YzdENTF5ckR6dklzaHdMeHY2RnlNcXZVQXBzekFvaGtjWTh2UTMxOVM1VDZHa2dWcWlKQ2ZwNmZFTVFsR0JaZGgxN29wU0ZtSjh0aHBaaE1sUFNmMlFOQUxqRFFKbFh3ay9ZYzQ3dUMwVHpLOEMyd2lTTjRJblJjK2RpV0lqMTNucUxoS281QW1KM1dZZTd3ZTUzcUg3ZlRsL0FXY0ViZFUzUGYxZmp0NXFBQmFoYUp2b1dLWGNwUlFtZGhQYXEydFNGVnBKSFZoSklURG0xMEsrZW02clMyempHdDcvRTlhUE8vd0pUL3VoRU5BYTZqNHdPaS8ySm5JYjhYeHA4bHlXL25Tb3hqT24xZG4xeWhRNmRpTWVKV1JmN08xVDJTV1VqTmRBUlZUV2htSEdpMFBaak90OXo0dUZzdytUNVRrWWFrK1pJTFpCam1vamRMQ0RHT0NCVnZJcXRhMTZqaVNJdE4yM2g5TFVQc0dkZnJSNW1tTFpWR29DZFUvcm9WV2tkRHl0blNGZzhtbkwwbnEyM0ZRY1pTTjJ5Ym9KWE4xT3o3dmFRWkRUNHAreEtWSm1LZFJicGx2MHdCK0E0SmNYaUV4c3BNTlhONUpsV0JMQzNwTmR3L2RNNU1lVGRaU0FpdlJIUVlUVm1XL0JWWCtpUDdaYnNjNUFDL3ZnR29PaVYrTkQzTVozc094aktUU3ZEdmpQRVNSWUFnUkM0SXRFSTFQRmliV01tcERnenBtdFRkR1dOMmNSNFJKeXJyRG85bmJxRGsyOXR2cHR3QmhkS2RoRTN2eHo3U05WT2x6SXJtaWdVbTlRdC9IZkNNb2JBdU9waWNzbGE2UFk1T2JjV3o0cVZuVHd2V2hKcUErQmUxUkFGVG8zV3FTazdnem5ZWFlhQ2dzdE1aTVducHlKajA1cmUyaHovcVdPOEZacS9XbWVMQmpSRmVKT2hFRDhHWXpiazFKSHVvaFQ3UlN5ZXdSeUc0MkNTMG9rRDdDUTlwdmxUZzJxWDU3OG95VXR2aVFUQWpYZVFiaFVaa0JPZWw2L0EwdzZyR1A1clA3R3ZRZ2JJZ0c1a0tLYjNnMjc0QjdpWHRqVkRzcE9CVHdCTnBNYStOeXBtYXdsSGdmY0Q4K0hVTjlBSGlKeWpGYkVkOGVlcUFXWjlmZmRibkVoczBFUnB3Uk8zUUlRL2hEejJweDVJdXBTUStlSEVIRUI4bVJRb2tFaERXL0N3R3doTmhuNE5FMmhXNDFLbjMrQmM5NE5XaDJ5ZE9HYjFZQzNpRDJiQkxJNzVxSHMzMDZQZnNEamtqTXpaU3lXQzNDdzY0QkhPUWtYNVlLTmN6ZHc3MVN3ZzM0VFB5RzBVSm80TWdkcGk4cGE5dVVVajJHOXp2VDhvNDJLNC9vVUZ5N3NjOUpFdWNYNlY3Z1dmWGMzY1pLenFJZURpdC9EOVI5UnZTUklvQWVvVXM4UjRZcER5K3JRR1lHR01YSkNmU0JlbllINm0wVDhGNnQ4TWpOTmxoV0c5Zi9aUGZZdVd2WE8vQVM5eXh2eExUYUxUdC9OSnU1OUcyNGhZWk5uUThYWllGWGFvOGROcTNrTVdwanBTYmVnTzU1VXplVXVNcUxXRzNtc0prSWR5SS9lNXNMVWt0K0VJeVBnVm02SVQ2MEhPb1ZhL0Fsb1Q3THQ5VW1SZTVoenp1ZHdrVjZVelQwSURnOCtpSExybkQ3bDcrYmFSRVlZZVVVRWZKek0yQWQ5aXBTNnRaVVlkZGN1bGE5MGRGYWRMTGZTdVdOSE9EL1BkbE8zRWVKcGdPblBjRE9wY3hPSndBZ1YySTB6YmRIRzFCVVRzbkdvRFNnQW16N25SeGJ4SU5Gb0VNOU1ETU1qem1NRmNzMjNXdmpBRUhydW5zckVobFJlRDFEaVpCcDJPMHJPeVhIZlFSRzU4VWhRemU1TUp1bVpLQ3F4djk3aVQwL2FJUElrTU1CeDA1UWlZSlpLRnQ1WkdEY2RSMjBia1pZMmVTRm02M2NtZGZWZmdyVEVRTFpnZk5tUnRJZllVeEFNT003MUlRRHNsaXZSdklqYWg0RnJiYWZrM1FwWEJCaDY2ZEhZODVDeXNWZzV4ZURwdXVybmRjVU9QSUhDaTl0S1lMaktCYjArSkZsQXBIT1M1NVJBb0tWdVV5ZXNwdEp5QU1SeWNMOWUxNTgrSVZXaUZPWWF3OENtQ2tWTzlHdTVBMm01bEdjRE9Bd0E5M091Z01KTzlNcHhVNG5rTlBrNG91UEM1WkV6czdrMmZYNms3dVhrNGxOTWZmbUl2ZC9GZ3dNUzRkVFRoZW1DOExhbDlzeXRhUG1YanQ3TWFENzYrUEM0VzlDTXFwTytZL1kzOWZyRXJjM2JFdVNPYmY3eWdaUm5aWnBCMlJPSnJpaStzSEk0ZFlqSitSWU9GZ3ozQ01YSnlFWll2ckZMdzd4emI4V1VqNDVRTC8yVTJ0YmlVbUo0Y2ZRdXd0N1ZJK05tWXd5bEQ2aFJOOXZuYWFwTFhXSUQxOEFNZlg0OVZJZ3p6Lzd3a3dDMUkwbXZheG5PMEtpVDRYdXgzaVNTZjhabGdCMURBTXprd1hYYVVZam8vNWVqY3F1Y3U2clJQQ2tKNlppTmU0QTZrb1hIaGh5ckVhOEMzUTlJT0NldzVadmNWUmxLWkNienh5VS8yRWhBYmRvUThuQWxQZjhNMGMzMDJ4THhsSXVuODlMQ0JyTHI4bUtaS01JbGw1SzZhMFMyRkhGVDJKblI2WWFacFFTL2hYWG5vU3JqclZZY3JYbkI0N3F0Q3NUVzk5bkpLK3MvQ1AwM3h0N09XQVA3NXJ1WE1MUy8wSzk1TnNMUFVTckpKRktDUmFybUJHMktTQjV1Q3FheHkzcHJoMWVDTEZyT2NpUWZNdk04V0trVm5aT1krSytwVC9PZUdGRHIwZ3pla0hGdER1TUxsQ2VWbHVJMTR4YyswZWVXalNNd1M3RzdIMzVqRUJacW8xSy8wTVErbUx1RHdVOUZMbXgrZ2lLdmUrd2JYVE1jMUJ6SUJqOXNhZXo3WU8zMnlTby9uRTdWM3Y4YUh5NDVRRGJHVVI3dG82Uld6MWRPR2VSb29QNVUrRFlDWnB3ekd0UTlDWkVWMmxaSWZSS1pncDRYME1QL0F0RHBhRDdHS2ZGYzFlc1ZSV0RqbFlROW8wMitwT05lZDQxRVhvdjVYNEtlNmJ5UEdXV3BXNXAyQnk3ODBYRHd6ekc5ODJvM25mN0ZEclVHMjZZWklaajNxWExKQ2pFcWliekxXMDRtcFFZZi9oUGpiOFpFdGZNeXdvaEdWYzlxT3R4RHVtcEtnaVYvUEkxRWgzaVRaOXNzWlNINmFLckpGbEpLalBVNkY5Y3dYYnlTOFFydjNFdTgzYmJhTm9GZGI5Ym82VllSL3FUL1ZaUjRpZjVSVUxBM0RJcWc4RDNUZGY3Q0hvTHBNUmVUSy9vcVZ1N0QyalY5NUphMi9zRVlUbHpsdVMwWkRpdHdZaU96VE02N2Mxa0Q3ZURqMndnUVh0Wmh2aUVJNGlqb290UGVEbXhwcERCZCtVemQ5UXdSczhDUHdhbUxvaWo3UndCR09GT2JJUmdZdUhhcFNoZDR5eWtibXRIemJDRjB6emx5UU5JblZkOGV0aFdmd3JQSEJRYXBhYy9STmQxbUYyaEpQQU9FNVZxNytUS3gxYnBmRmpMcFY1OXEyenE2eE5nUVdyTWFwclN1VHF1MUdxWmFhSWdNOS9jOGZjUi9RZ3R4dUQ1TnliWjNUWjJoR0UwV3I0M3ZqV0U0aXlPaGt0OUJTQXc2QzBpbnl6cVY1UEs3RVIwMlNSb1c1MDNBNUt2ZXVVSTJPaE1OVHFWL1lMNWhUNndCZVNaOHlJTkhRYm1sR2dmaFMyK1ZRNDZMSjRJOTdQUjNSeVZ0Z3dtZUVZTGlqZmM5RkQ1UE56YTBDL0VtbTZTVEVWc3NjNUNkQis5dHptWFBQWXltRE1HaktBQURpT1Juc0pDcHBkZzRsYUJjcS9GMVc4Yy8zckkxK1VaVG9CQ2U0M3NObWZQOVBnY2NaOGdwRytVYkJ6ZVRVUlhjSXB4emc5alJia056REkyTXV3aitmSm82dUNUL0xhNEd5eVNveUFxK1BjYTJ1ZFRXZ1R5QzJnbW1wY3B6Qi9qR1dyWlhXOFN0M1pRY3VXN0lYcVFCcE5hTDV4TXlETytuUzNyMEVuZmM5MzFYUjBHdTRGaG5tQlVMV0djK21MZ2tCQnlEelpvQXhSa3FRQ3VQZ1pQUDg1Q3BHZm1lclFRby81U3luZnEyZHExZ21xb2o3U2w2bGsvNTd3UG5PWXJrZjR3Q1NVN0tsdzVlQkZrMFBOaGNGRXBkRjVXblRNME9vMHZOVnF5UHhMOTU3eUdHZmxlM0h4d3E1YXZxcHB1d2tLZDBCc3EzUjdhdlZPVTBJZENkSC9HVVBRVXJiWFVwM3BkTXhnMmROeXhmMlRXWlJaVlBEeG9BTDZhL0hDOWxUVXNJRzlFQ0Y5TXRnRDlybnFGU0hBdE5wbXJMczZTdU8zTXdjZWFHeWM2YTdJbGVNOXBPM2ZOdjJXTU9Cb0h6WHdZbU5KRzdRMUdXUFlGaFdPdkV2QjFUNmF1RGxVNU50NGFiTkRWeG5nYURQZzRyWDlYMUtIYWk4ZkpreVdZQlI2WXRGNmxsM2J3SEtsWnRBMklNT1hLV2krc3JkajJTWFdRclhqRWRRclFRd1FONlBQSk5OSWUrK1B3TGpaaVlzb01mQmpLTVlvelR3dS9xMDVXMVRncE9UU24wWTFIbEpzOG1JeUdBSUdSZUgzT0x2bWd0SFRtQTBsVkF5WVpwRlRRZFVDWlNzRHJaaTd4TkFmbGhLa3RhdGlxdXUyMkFZTkFRWjRGSExXb1N6Q0NRdHBWenM4cFBWb0wvT0ZkZk5pQzdsUitVMVpMUTg3dGpJUStaZ1NHbEhvcmtENEk3dGdPL3RFRWVYOWlTNzNJenJkNjJ2eGFsYnBGcWZoZW9mYlNVa3dscDNvbDVsOUVGaE1DY2pXSTgwa1YzMG83MERXRjZoVUp6SXRkZkJackUvZEF2L3ZmS2VvOGlQazdxR0hLSVIvNUJkUU1EZnpPZkdZTGVteGVqUGx6Qk1GWExyQ2JUSTBTRkJTWDFZKyszWW9xZEtxL25tSXpXZjhnY0VGd1hpMzM5L01mcWFZVFhNNDQyMlBzbGQxd0NMY1ArV29LbTdQYlY3cGRHVjZhQ3llUW1wWG1ocGg0SEN1MFArWVVCWWZ3bW9udmRoQmRjWHd0M1YwSnRrSlFPbXNnNU9zNGVOb2IxL2FJZzdxcXh4UmQyMHRiUG9ZdWQvUWdnUUFmRmN1d014U0ExeGh0Q2ZLUXNmUjJ6UFlicFRuaUtyMmF3SG5yZHhJZUZrbjJnbnBLTHA5VVVMRzlNWHRXMEtVWW1FeGJCazJ2MUZVNHRBeExkR1R6Rk5aQmYrRkl1amFuZEZyZXdZcGMzWHhDbUFQNkxESi9jRTNwNUYwWW91YXU5NnJGclgrcStUYWp5Z001NGNnVlc1aXlTMitZcXdvWk00QkVlNE01TXJBejdUYzdlMExpUldJOTZFeFRpQXh3QnY5cnBlVWMvekl3NTNlMmFyUE1Ob054WkpOQ0ZueVJwbmN2a3RtU2loUHRCdGVEZ2JSM0UxYzUyUElWd3kzZlJRT241ODBCT1ZJRndzb3NEaWNPaXQxK0h3bjNzVWlFTi81UVRyVlg2Wlh6bmUrb05IOVhrOXQwNnJhREp0Nklmd0RmcGZOOVRHQzNWcENNRXltTE9FcEdaTnZtS2hLWGMzbXpCamYxTW9tWGJFQWNFUS9kSXJUWFFaYVQzZGdFdXp0TmNzcU5paGlZUnc3ZVpDVnVGc3lKUGRpaFZ0NGpqOWg0NE5JbSt2bEhZRjdCRExyb1NsYkRqQWM3a1hWS05WaGFpSmw4TUtFTDdIbkoyM0E3SE9PelUrQ2ZFcEx4QkdYQ2c4Qi9aWUZ0U0NrRVp1NnNTNzk3WUNnbHVHT3dzSTlSamViQTFqTFpiVHBVWnNrZUJERXA5aHZzNGtCSTRQWGV3eHZSblJNZVl5WkthVkIzQjBEd2x3OHhLOCtiWGRQV0Zha2Q1WVZxYVhDRTdTeVRUS3lDcVllaEhlTkxPQmw5Z3lxNXFZRkJXcWd3WVErWGt3Z010Wit3eXFjRWdjclJvcUpOcVpoejFsdzRGZWN6cG43dngxNUNtTEpXY0NsM0liT2xzOHppZDdIQ0UyVVJZUWMvNTlEWHBWQ1hLWEI1NjgzZGQza1QrNVAxbjdzdytOT0hjOXlRN01POFR0TzNMYzJEdjN6UWtDalRza1dJa1RIbGNwdDBWMEpmSVZQWitPWXFwK0FQUWpQNlVCOGFGUFhiUXUyd0toZnlKWkozcklwMUZkTmVzYk1oMGlYZktvME1ZeDZBeUlYQjhRWng4K3Z3U1RZOEtKOE5hNythTTJxZEc5VlA1TWp6STRkU2huWUx5enhxeWp2dFh3SVpXUnFYakd1MXVCc2pzNHVmSldiaWhhUGdEQVlTYnNZeGtTMWpzUWtHbHp5YjZZc0JhSy91emRMaWEvRXJNL3dXN29qZFlpSFU3amVlbWx4ZFIyNGtzcFdEN2NodlhQVTgvM1RCZzM5NUMrVjV3SjdqVlVSV1poTE1ySzNidUJGN2hWb2lyZ0lFemNJRkxNQ1B1TVNNSXZuaTIwU0FjNmdFWU1KN2dUTndhN0svSlJPNU9zNWpIRnAvd2N0ZHVUSmF1WE16M3craDd4S2lhSmM2Yi9LNXU4bkh4S3NvSDNDK0c4M1NnTVdSUW0zSGk1TXd6Vk9HTnpQSGo1YUVLTENRdTY3SXNlRnBMd1hMT2Qwa1JnMmZNNkozNjRWL0lWT2drYXpzWnI1V05NSmhaQVE1L0U2T0ZPOVpneW5FaG5PbnhhbzB3OEhXZkcvcTFQYWhkeEZ3bGZuMHVDT0RzYjFueENlMUpidWtFVUl1aXQ0RXRyZ3JzUE84dXdaMkRtWGZlUUhSZUE0QzRhb3puYm1YWmZqTVZxMklqdE1MV3VhbTJEWGk3cnhZamJhU2xpbWhGaVVMc1RKUkpxZE5IdW55aHVpSDdHZktnS0FQaXZVVkcvamVmZVQ5cVN3Wko1d1Z3eDlRWVJkc1dLR2lMUlVjWFNZSHJHYUZ1Q0dHb2FVOStsTGYyQ0RjV3dlcTZmSURhU0RMbUU4VVcyMkh3L2QrYmxoVlBvdTF4bTZUMVZmaXhHQWR5Tkp3cVBqY2ZWV2xOSitVUnNjR0pHMngwcGI2dG4vQ2Y2K0RLNjlzakw4Wm9DSlJYay9xUTc1WmtLSjZvTmVxZzVnZWxyNG5vRFpVZE02MnlnampkSFlSd0FiKzdmY3BxK1pHa0VDcWh1VWVUNjJUUXIxYUhGM2NjdDF5T3pDc1BMUlBpbi80VEtrOTVkVCtGa2xPbDdqdERnNS84dk52OUFjcEpKWkF0SDY2ZmE4MzA0S0p5ZlpKaU5Nd1NTOHp2R0hFcGZjVjRibmhGSmFvRjRmNHJ4aXJGNUY4M3JvODV0UWl0MDhudDhvMjYxeG9wdG1qbjA5d0h0OHB3aHovU1R5cXZHU1hkYmxYNlgwVVh5UUI0WXVLaUhPNUZhbUNDYjhibWhKWFFQMWxqaW5QcURqNUZ5NHovcE9Ed3VEcjZzNW0zTk5PcEJQYjJLZkZVUE9MNitRVTNkYThwUGhqY1ArQ3F1NGhZVG1ySyt2ellkbU5tbWt0OHVzZitZbElHYWlYZ0o5OTJ2VGczbFE4WmVJdnNLUEhRWUVvVHJmTHNNNm43N1BmdFBPeUF3YmhvOTV4ejRNcEhtVFJyWkZxaC9VSDhsNk5yTDNTNXNzcTl6ZGc1STN6RllFYVMrclBtVm84ZEZiZnljVW02UEtpMjhOTG5IdWNEbVZ0QjlSOFpSbVFSTE1jc1YzcW9KbUora21mbVpmU2k2S3lqS2FoblA4eWYrMEpIYU1tSzJIcnJROU85WE5vU2phdWxSUmFKRktiZFJlbkZjM0xzRm9ZaUhTYTZHUEtUTTZHQ1RCbjN1VkpCRXNzQTdRTTJBcDE1K3dxUFNRdUV5OGNROG9YMzIyZzUwL1orTkgxRGwycXd4K05hK3BOYUhQNU1yb3ZqS0NvK0FZeFpYbnpDemVnblZ0STVpU0VkZnVYR0lMNzhGQ1ZaNmp3eWRrcGpSRVUvWVVCNzQvY0lSa0tmYVlhUzYzV21QSTRqSFNucjJuT2FVNUNobDIzQXdhRGpMT1NOYTdBN0FIa3FnYkZpbk9teCtYaTZBeGtXY3YrZjVyT1dHUGVjYnJBL2xDdHI2R3lXOWRuMTVOYmFKMUtLNnNSZ1RTMk93aGFzU21CSEJTNVhrUjBDang1NnBEUXVNSSsxem81Qjhkc283eGtKMDEvVUM1dWRQTnBkZmdaaU1vYUlqTmhzMFVuNGpRTDhTaXlWbzZMd3J3WkRPbHRCeXJmQStUczdFaytMbmJqQWJGeFlrQ2QwbkdSWDdTTWlKTUpER1hGUzFlSkZFd3BPSFdub2ZDM2J6SERobmFpb3llYXpxbTdaOE5OeFNnUWlUWTRPaENkK0VDMWZmMHcwSW5mMWlSUjRmaGNoV1gvUHllbVh3bW90Rlc0OHhHd3ZVREo5Vit4dWU5TytEa1luVFc0Qkc1TmxISTlUYjZnTDNNRUJ1UlRCREZ2bDBxbGVzVHlpWHlGZHN4bmdkaUZ5LzRveGZwZXdlNWZmalRUaTVFQUR0eXM4bEVsT0lrTUhrem15WG5SRll4T0FsZWt3V3B3VStBT01FOFlacWRZcFdvYlNqWkt2ODNRTk4xbGVHajYyNmw1YmI2RWxXcGRsUlcrcVdwQXpuaFJYcEt0a1hKaUdHUTVJWVRwSkYxN3l5Sk9SeEgxejRmei93a3pScUxVTFljV0lwd0RMNkVqU2gvblZYQ0VqWDJ3bk1DcE93dksyRGhDRy9kL0hNTTVjYk43OGxocDZzWG5pV3FoT2Zrc3YxRzRsTmRrVDRUcnpmSHpXMStHVDFYNjhRUjVZNFJPZnVzcFZlak9Ick9vSG5WUkRQVmROeUNOa005UER5eHhUOHZGTXV5SVB5Q0MvbDRQR0RxL3FKKzVlS0JlZFREUzlJRlVYVDVHdTVka01GYi9WR1RkcEYwTmZQZ2VCN3JLRC9yU3J4QmlCUnBUeXFzM0hucGl1M0xUS0cySzA1VEwrUTd6S3BkSUc3NGNreFp6NEwwNWdXdlMzOCtiSFk3bGFzMllVZ1pEeXpSbkhDRVZ2QW5hL1QrelNlYys4aWVlU1dpVU1SZjNNSTltM2xpMm1jUjRWaUtqYllMSDNpdkhsQUYyUUtITEo0a1RMeEVGVTZiU2ZnZGJveFBjc2tBUmZWbml3aGk0N0h2Um1RcjNOTGtsdzBpaHU0WGc3ZENCb2kzcStjSFVRS3dhbjUrUkV1SFhiZFovSzdBKzltYU9wR3Z2bU45Unpad3I2eERhQU1sYTNlSlBNd3c1and5cHA3SHhndWpOb2hvNnRsZ1RoQjJRSUVPV0hyYTJKck1sNHpOV3B4S3dIb203RE5wNElZVFpyQnh0dHpCTG1udjJ5RzBHYWI4UGhFTWFBZzk4dDZBelhveWpqL1QzMnRUZTAzSDFIWHlWMlVOUk1KWjhya2UxQ3JKM1hsRTJUQVBUaXVsZi9lMFpkMWRiQ0xhd3dsbXZDd2NmajU1Vi9jQk45NzBpMERHdFordXExbjZjbFVzMTZFR1Y5RG5nUDgrQm4vcVdZa2M4SXhyNDdwR2VtSTVLWFRCMWZ6RFphTWhWV1RsZVFnalV4ek56YTFrQVBCcHQremZ5Wi8wa3p6c09jMTY3SUV6STV1SUNRVk1rMmZ1dEVNUTFWSDBjQk1SNDBtUjdjRzR2SmdWY1N3Z0V4U3RySHpXYjlacDlxTWVoMWJBWkhTRnB6WjliY3ZBNmdKV215cVREVXdocTA4d0pvZkZsc0dNK3ZjazNNaDRGeU1JczNHbFg3aWtjdVNNWmhWdGdWSW5LdHRpWVlteHFSeXd4U0pNdklaamwwelZMdUhRMzN3VHZldU5LZ3l3NU9BUHdNMnljK2FzaDJ6UzFjdG1hSDNmaU1ZMVExT2wrdXgzcVpFMmQya3BvU1NLTjNlWGNCUzhTZGhKUjgzSmlIOGVTNmpZdjUyV0FURXEyeUFVNFF1WVovTjVSd3E2dnIrUmtoSytHY0lYaXNtb2pRdlAzY3pnbUNWUGkzSVZ2YU5kcHBOY3hHNk9LV3RvM1ArTDh0ZE5wMWU5VjIrT2YvRDM5b0NuNWFBUG1iQWdOd05jL0tCZkxPa2NZaHI2MVRNR1htS2FMRVpEN2ZJdUxsNC9NOGxBYk44dzNvWVg2NHk3Yy9lSVl1NlAzUzVUbURIU0lnRDQzbURNWmMrR3dqc0ZwS2U3Tm5OdCtFMldGTkxlRzhWYlFTSHBKZWNvcTZLbkcvMzdMOENINHUxU1ZQcXRQcjZOVkhuTzFGR0o5ZnZaMnpSZm9YQ1kwUWpRejhDVitjUzJxczJPcnZ6amdaZEtpbUdYMEdVL1psUFVzQ2MrTWxjb3lTRzBmNnk0NktiT0Y1NGNobW15RXFwbWF4TXdYaW9LSVd0YVdRYTFnMVhHVURuU3JiLzE4SjVJZFhOaHAzdHA0VzBBYmRuTjNqQXpWcThFTWRLSjh6YWUwQlBDV3Rpemllc1RwWWg5dlhrUXFKcW44TDBlZFlKengxSkY2UzVla0FsTld1OFZCQUJrYVNlbDdNRVo3T1ZRSmZZQkVXaEZZMnhPc3NiK2x0TXdManhPMmt3M0VDcWJITDJDNXNwQUhLb04xQTJZdy9abDJDRHRzN3FGTGd1dW9LMEtheG5BS21lMUJYdSthcWFjZlpHN2VPZ1pKRW5rT2VRWWR5QWpRcDV2UnpTSnh2MzhPRmZwWm83bk1Rak1uOUdjNC96L21YamliTE5KL2lTVDE4VDdZblJrUy8zMXQwUmh6SjZnMWwyNnNicVBQVVgyTlBCb1J3VFR5Ym1hVll6RnRWOWdod29jWGxwVVdacEUzZ1dkcEFsU0h0d3BjVXpuL1JLbSsrNVpYbm1qaVY3Z2dqbWV2UzR2alYzRlF0MU5EejJsNWFNVTRnMzhKa2dVbUZicnppQ0wyblJndGl2NUxpbG1mS3NsRTdZdXNDc0VVeUN2QzdYZGVJUlc1WG9vbEh4YWprTGZmaS9tVTlWQVhNbDJocFVneC9ObEU4OHQ1UWo0dUNTcE5SRk5rZDY3R3FiZzFWaWE4S2tQc2pRcnJCc1prRzI1MXF5U0dpSlJsOHlla1ppSEU2Mjd0S2FDUFVNbzRlOHN6d3FzNnBnYmJBa2YvTU1wNUw0eVJvMUlFUC9OZ0FuTlUrNWpQOGtMWDFtdEFQYjBiSW42eTRyckV1a0h0NmVmd2RSMnZlSW8rMDRpdGN3RWRGZDJxamM0TXdjcTB4Z1MzR2tPazhScHdrbnFubkdLQnN4YUk0M2pkYUlMb3haempBMU02a3Q0cWNoK1d3VXExd0pWT0RxVzNRNVdDYitkWVVoYXB1YnZDNndqSGt2eHF4cU5Bd1NrbExSVXpINXZzeHQwN09CdUVkSHFzVVYyZ0RPb1V5YWMwVVdld3RDNDhPaGlvTW55Q1ZKOWlUVkFpbzF3UUU2VXRvYVZaUHhzcVVFd01Hbjg5WXlIQ2VPMHR3cHRYeUNyVTQ4UkNPUlgxWGs5M05RUmRoVTZRWm1DSnZjK1pzd0NOcDlXVG4xUG9nYzAvNDRWSm9qaiszYXZmZGZuUnhsZlhLaHZkaFo2T3pRYVJ0aFR2UlkyM3VFWEhja01HWTNVUmpjS2pzMFRNeFloR2d5NjdWSWliMWRoYXNkbGRVU0cwZmxiaThKMUdDTElxOWFNeEZMK09zMjYreGsrWnJyVURyYUZXN2kzREZvN1N5d2VsSDMrcjhUNExPbGM4anh3K1FLYnN5dFY2ZVRWTEFUaFE1cFZUa01mQVVnZ1F3YTBLQVNaVlVhekdTZEcraUJaQTNwOHFhM0tIS3I5aklma3BuVE9HN2lXNmw5OVJZek1MdSsvVE5WcU1iSVA0NHVqTGJDUXRXb0h0RUV4b3ZBY0RHdFBmODI2Y2wwdHFFMldERUZqazZuS09YcjRoYkdXR3YwY1lYVjc1b0hocXhwb2dwMzg5dnZaVEZCUGpBT0U5aWx6TnhPNWZyV0tTMW1zTlJDUDhjcXhia29rZjFIVlNHeDlKM1VOdE1ZV1IxUTNZMWtZeXdmMllLRWpaN1lISGtWYm1Yc3RGdWNKblZRUys2eURDNU1hTjh3ZUVNWjVyNEdPclNBd2pWZ3FJMnU1eVdvWk5scHM2TXJSRFJUbElOTFZpRjJOazlKcUptbTJtb00xdVZHb1pMZ2gxcEFNZ0dBS1YxaFliWTAyUzhPWTlhcnpPOVVuS0sxa2VJdnZKQkxJNHpyd1pBZkxjM2IyQjFJcHNxS25hMkFTSnl3a3QybFhJTUh0MnNCL0lmVGZDWHVIenhBYitkOURsQWRPOHkwUHdnRlFtbUFVRGhJWTFkL3h0Qmh4bVpDdlNmYkxrcExNaElSeDRlYWRBN3dtV2k0MkdDTDFRclpDQUdJRmxmUjRpRk5ZUE5QRUtvMy9xK0U5SFhhb0dJSnFQOGpLUDZXVFJtdzB2b0poMHlJTTdCSENXSHpEUGwra3FnUHRRY2pObDdCenJQQVRJSTRBTTJ5RGxHWDJueW5XYzRWanFnbHVOT0pWanpVSmc3SVhzV3NUckJ6aU1zanYwc3Nrb3RDWks1MVlmV2daNU9jeEhTM2hEUi9uejFvdCsxMGxzeEhsVldtTFNsYWVoR1Q5cGg5LzZzeHdiQWp3bE96ZjlVRXhEYklBOWg2UmhzSFIwZVp0Qk5lWHpWTCs5ZTlYY21EV0lSNDhhbHJJY0daN0gwNW5JdFNMMHpxcjIyWWZmdVA5VnJXeC9NQlZFOUpSOW0rV1lxNDNvNUkyNGhrUkViTzNtSWhpa1Ayd3BBR00wRmNGKzRiekRLNUh4dUxXS0w1bDY3QzBUYUp3LzZPRVRtL0VyK2RMQjJQM0FqMVJudkVMalJPaGI2K25ZUHlzbXppZ0NwcHJqMTE2TW9UbHlwMGRNUWZPclNsSXgzOGtTTzMyRFFHbTNkdVQxSC8zMDM1YzFlOEh0a3BOUHJFZSt0UjJ1ZXdLc0M4T0NwUFJEZGZuR3B0RkhCYk56QU5SWFBsT2FhdHFuSUtRMVJ3cytKWXFkQVducjhkUkdQcjEyMUY4aEJKQmo2Z0pIVnZ0TTZxV0QxbDczTStkYTEyam1CQWpVMHhaU2RqNGRVNXFFR1hsMTYrTFFOOGQ1K0VTSFVXNWgySmE1azdsU3p3OG55WjZrWkN5Z1RKVWFoR1dQdyt1Y29sSm9xclZCbDZpdnZmYlVaams2aUZNY1k5RExtSFh6NTNlNDhvWWdTOTNuelQvL0RGRUVwcUUyOHhHM2xISWY5OHpBa0huRWxNRmNiQ2F0WEhKdGNDTDA3UE5mNElON0RGekxJWGRDb1poUWxReEovVU5jNlczVEVVbGpqelNwWldZclZWQnR2OFpRNnZyV2FkZW5TT3ZGdkJNL1RHUktZeUdoWmNaUXkxSGtjQ3BVLzBIWEh3aCtuNzBzbUpCclNGeVU0UU9OWmV3SmJla29VM1VETTV5MWZ6QVg0bGlZeDBRSG5FOCtta2hLaUpmb2UwV3c3bjBhbU96RDRxZWJkRlVOcXp1cWlPMWdCcDhNdHBFbWVzZ0VCa1huZEgyRlRmNmJYWm5OU2IxWWlKWDFjUFBoWU9NbmNpK3VSQlNKYUVZMnplTWI3dnhyemVmdGlYVTRTZjZlMWtzNENVeitkNFBtTzNuMWZVakxtbm1hUXZJaE9jRnZlSEdSZi9NZUk4K05yMWxnL3JPQkJvVEtmdnVSZElpT29pRmJwMlM4c3hZVmRiSzVMbzA2WnB1Z0dGMThwY1psM2MwZGFpTHdCR1hSbk5VbGs0QUpBNitlY0JaNWxQTW1MU1lDRTNmMUZaS1loOERneFN5akRQSmZGb3lBTjJuTFF0UDZJSkFJK3hpakN2MTBFQXRONXlLTkFTSlg1Yk95WTNIL1BxL3ZoSEk4VzRvNjNiVFZ5SVdZRTd5RlVnTkVBcHFWVVNyT1ZpUllXbkc2c0hUMDFsaElKQnZvOTJJZHlVSXhPcGo4UTU4TFVOby8xT1VKUEQvSTIzTGZCV2QxdVBMUGtBNGJFNUpEeXY5a3VIRWYxYlBDeWFDeC93TitidzVxb0hhZU5IeldhbVo2NUJzcnd0bkxTMGNPemZvYkUrUEZHdHlLSTIwODBnMjRjcERrUDJ4c0xRT2tIMHVVNzBPdkN4VGsvbVAyWGFDV3RtVXhzZG0zcXkyenoxckxUS1VSbXZFME4yRUZUbnFkU3hxbHh5K1JPUXkwOUhVUG8xWnlGeERTSDZFR3dzdUJFU0hVN3IwbmhoMjNwalp3UGN5aDY4Mmp5SnZIaGE0S1R2RWp5ZDdUYkRUcWdqYnplT1MvVmtHTzQ0Z091K3Qzd2N3YUZsTWRYMkRtMEppcEQ0dHE2K0FyS0xROFlsY2V0OC9zaEZVVlZCWlIyVHFPeHVQYlBlT2hrNVBZMnhsdDVvK0doZnVNNm42UmdmSGxqQXlyUTl5RGFVWkpVRGM0TDJ0VEZEMTJzaTU4UW13Q2NUd1c5K04yTmwzVENlaTk3VmVTdW9IY3lCY2w4ekJWOEQybGhpa3JwY3lURUpuYVV3dmtWdDhVTG13aUx0RWtJU1d0Mk5qTlNuSTV5c01QYm5Ha2pmenJ1Y1VnMjlDbDJtTHRPaTc5OXl0M3dpaE14cGFRNDUzY2JZMlR4cWpidjQ4eUFiSWtqRmRqekNBSHl0bGtyWFVEcWlaZnFGRTdsUVZjdm1SNWd5bzdiQUVlWUdRNWVSNWRDMUROQXNqL1lPQlMrSmd6VTg4VzB5QWhCME05UEhLRVcyU085c2RWZklKTklBaHZ1SWE1VWxuQmxDVnZPSWhaSkxaWXVFaHJCK1htNnlkd29DME54OGlGcERLeEY5dnlQeUx5V1BFcXJHY0FidjlzSUMzWWs3cWI2YnlCVC9xYU1mSHJDOCtvNFExb2FUY1J1QmNsUTdtbXROVnQ0V1loSk1OLzFnNGpOR3d6UDdQR3NKUU83MFNwdGhkNHIzbm5aaDhKeXRBLzlyc2RPUDMreHF4cFJMRDUvR096MkhZanMyMWRJUUlHZzMvbUhqakF4aDQ2RVp2bXR0SW9jUUlaUzB0V2JUaTM0SCtqQ1IvV0hBOHRkUWk1WDZuVXd5K01TYkVFbEVBK29qOEtIVmU5ejRiSlQ5a0xBVUExaWhXZmNoeURzUlBOOXp4Y1QzaFRaNWVaY3E3QTRwUW94ZzFOUHE2a3NDcFZ1bDVldnZJZjNnMVIrVVZlNndGSHdUUURWMzVWM2p0Yyt0dW9sb1JFb284MmNrU0h3WDVkN053blBaOHVlSzBKdHRKOUx3cTJsdDNKT3U4OUQ5ZFFFWTF5UGFsWXl3VGZQdFRIakJwMGZSdUlwcDR0V2VQRkNrcDBZNjgzK3dVVE9yNHAxd2g5RGlPTDNFRnNFWXRKS3BTalpGdklST3JnYVFCMHUxZW03Qzlmd2xTd3pLZVZJTzR3SlBTZXk5T2lpeWFyUittc0laL0pjTWVlL1FVZTh0bmNNOEtnT3NjQTZ2TzMxMStBSmVqcHI4bkRNZnArcWprc1R0WXhqUkhhRWc0RkwwbHJ3TnlrM3FUTjdUa0JKNytFWXVhRm5BWU95N0xib2VhcVV2UzNRRGcwU09aM0Q0Y2JjV0FTb0JMV05MVyswaVFTdFREL2JwMHVRdU1rbzltaHQ4OWR6dWRUNG9HN093b1Roa0s1TkFiM1Z1K2NUS0YwYUgvc0xmbm45ODlFK3NmRVp2RVRTV3Q1a3UwRk5RWGFOY1pJOXVwbWp2YURDNWdUNGlaVlh0UzF4SzFRRWc2U08vTmVMeWNpeXhVR1M2ZTBrM2FzMTJNdFFtdk9mSFFGSGdCenZMY1FGNEVxTkxadTZwU3V0cWsvMGFtaXJSMjdyNlliZmEwcTJTamRybi9GZU05NXVEb2ZyYWZQUWY3c3V5WURmNzh4bzNycVNudHhPUW5nWFRCNFpDbW9RVlltdnR3OUZqaFlSRkhzSGl3TVdydlB2Sm9MUWNzamlTRzNMK1h2bWg4MVdRNnZENEhjRGtzcWV4Y0FmeXRxYTRZcVFSbFVCZ2JTaDZVWm1QaXdMdlVRMENqTGtRSjBnVXlyVVNwQ3Uya1RxczE3ZFZJeTFIL2JXQWRDRUpkems1dnd3cmNkNndDeTAyQTNDZWpDdnd4R09LZDFWZ3RHd1phK1RkQTJTSGVmbjQvb3YwaU1aRm16TnRJWFJFQTNmdnlocEZrS2gvNmJuUlZsQzB3eTlTUkhXMm1pRWs2YXY0eFFaMzNMWUZTNDJWbzM4QkxGTHJEUWZUcWtpTzJ4STdUbmt4cmUwd0hMMXNjeEpQSEhpQ1NVRzBhSEVVNXlxbEp5cEZTR0VOb0puSm9SNTZBMHBxWjJuVjVidml5NEkvSmZWTmw2WVZ3UFVXcS9sMmZ5QTY1ZUNkVW5LL1JJUEdjNDRpeGdqdHN6djZZZFdpYy9kcFZlc1FFVlkzM3orUzJ2S1UzL04xUmVGdG1GRE4vWGtnakpWV1pwTzVpeFpBK2ZHT2h2R0ZkUVUrb0R5aEJzRXljS1RmcU8wanZMVzMvMmk2RGk5MFErQXB6VjJ4WGVUUW1veDR1RndsQnh2N1NocFJSWlYwZFVpYUVxdkI5ckRCa2d6OGIzMmh2bk50UnY1dUY4SUhDNVBSdDVtUzRBK29Mc3d1K0Z6WUtNT0MwdnFtMmt1dG1UYkZSY1Z0Wm4vbUN2Z3U3WEJSQlJSeWV6aUZnbnloYmJpNmE2WDRmYWdWYjV3Q0FqQWFOeDZZVEdMdEFpMnBURnZSOERVYmtHV240Z0l0MWxIb0VFZ21jMU9uaFkxU0lxZ2g0QUZXMHB4NmxvazBMSnUvdUI1VllmeHVuRWVsamltcHJoUkFqSGp6Z0pWQkRpdzV2d0x1VVY5OTZPRmw2OC93QmVyREhDWkU1VnY5MXovVEtqc0I4M1N1am5TalhXTWFnbERFMzNNK0lYQ2thWmJ1S2p0L2xvWUl3YzdrWnQ1N0xQSTd4Um9sbm0wWHJUOHlOdlBqRlhXQkRKV2tYc3E3R0FSbFMwcVRIdFk1VFZvQVkyZCs4Uk85YlFzb2hnRFZ1dHI3QmFPcTMrMVcwNzFNem05RVBPM1FjTUNEWjNhQzJkaXppSytIQTEwdjQyYkxGT0daNnd6WDE1TWN4UjFtM3FrdFA2SDJnZDBmcVBSNWkxYnRhMC9uaWhsTEh1alFNSGdxWWlYSVBzd2ZVemRuRFVPYVFwRURPeUxpdGN6bFVUOHpnNmp6dUx2RzlhUzExZGxmc1NCZmp3M1MxMTRGb1EwbENuYkh3QWx3Sm95MmY0ZXpsY3Y4eVJqMWdqSVk4ZEx4cEVNTDBiYWFkd1R5TEJwOXkrNHAySDY5a1JNcy9LQnZyU3ZYZ0RPMWFldGIvVm1ldXF4cXpjVVB1OXk4RXhobXpqWTNBejBiMTMrRU82QVpDNnFpbTZhK0J0TXk0cmwwN1NyUzlrazlza3hociswTEttamVrRlc1VmRkZW1mZ1Rpcno3MnIxSFRRdnY4NnhtSmpVU3NVa0NVdk92Z3dkQ2JBRFVIQVMxbzR6UllNK2EzblU3Vit4VzVHTEpQRlg0c05Eak14czdlODlOMzBSS3RiaitWQ0NCekY2dDJSOFlHei9CcldwSDN0VkxGbkpXSmRsdnpGQUlOa0dDc0Fhb1R2SlVjVWxJZlZaaCtQbWQ1OWNnbmkxbHhEY0xLb1Nva2NienBEY1hLclk4SURMcWZxYkNrSnRxRmkwdmxobTVtc2dLSVZSQWJrOXQ1T3BURXk5QTR3dHc3MWtUTE0wdW0ybXM4dVJHL3VuRitvRnFXUk9NTU5IVGtnVVdUNTdpNnpvcjFWSEtYZFFaemNSWFQrMjY4NDFFRzZ3bkMzOEE2SVZDS1FWdjNpelJlSlpKdVNGR3Y4TnhXYVlOYmFNaUc2QzJWRXZSMmEzTjlUR1YwK0puQ1E5dmxtLzNvVHhaQ0J4ME9Yc09vOElxM1J0bXFFYWxFL2RmRWt3dVIzT2JqRU1ySmtuaWtZbGsxeWlJeU1LVERNS2U0WXc4N29FMnpqcmo2RndqNjhseG5MN1laaEZFMktUK0JlZWxnRWg0SmNzWXVqOGpEb0ZhZEw2c3ZQb3E3NktVcVIrQlZVaEdia2ExK2cxd0JFdFM3R29KN0Z1d2tuS2luZnB3UVQ2UWJCL3VSNlgvQmN6QkhudmFwaWdMQ1h4N0hCZDE0Y2szNTN5RTdBaFlXZ1dHQjBINGRZYW9NVVFFNGRXU3ZxYWE4d3hRZkdsMVRVdlBYKzN1TFJQcVRNODJLV04zWVRXNzc0QTlUaGY2Nzk4MGc1YlZnRE1EdG9SOGs0V1JvaGsrR1dCZGdmZ1hoaCtjR2xXUlpPK3ZnNGp3SVNKcGZmNWNvY1N6U1p3N0xkTDQrRE90SXJBUjA1R1o4SkF1YjRjUjdvNDE1dzk4ajJvVDc5eVFIM2RPdDdiOUdhQTFyMnpiRlRWSWJSL3N6K3JHaHd5WmxlTjRyMlltTE9iYVExcDl0N1NxUkpuR1plWFZFRVQ3Z0ZpdlNsMU55RnA5ZUJEc2xlSFVmMis5eXNZeTVPWDdiMW5ta3FpejZpdzFWOHFjbnVabS9CaVA4SDVTYm9taVArazJMdGc5aHpFTEY2N1JUNDdtT0ZxZnFaazNNanovTTBBOWx3dVNVZlN3Qlh3M1d4aFVUK3dPaTF1TFIwZTBzejV5dmordWFDOXRHemR0a2ozTVlVZE1kZkdUTG0va2lSb2w0NkRSelpydGVna1lSOVB6TWxIUjBNOFdQMndudnpNYXV6alpNRmxybm5hd1REaVVQN2FSa0svWno3NW5NQkt1T0FWMlpBY2JpaGtQZnNTU2FHRDNabmE0U2orUVFRUTdPZzNzK3Vpenp1L2lnY1lUclJmaS9nWHRBZWdRbjlXaFBtVFA1aFo4MzBiWmxLTk5RUXZPbzhOcFZHbnJZTFJteUhuWmFCMytvOHNWeDF4bER5dzBZbTBQOXJmOUhJdGtDTEl1bEs4UzJCUmRnTDRVOFhHaVJCSFFlK1h6QmdtTDVOcFB0TGkxZWdFaDdacjVRNlg3Z3dXUUNsOW85ajFFRzFWUHpEekd2djh0QmVLOGx1ZXJScjRzUHU1aG91NitBei9EVjNJRkFtSDlTeDk5K2hZYjJtTmhnZlFYdGsvQjF6NU5PTk00bnBmWXdHR09ReTRpVUVSNW9MMlFSMGJSRmJXQ2lpVVhnWWxLOGM5SnAxZ0g5RmltNVlRQmFCVmFyVnYwdmduRHNqbnh1Y2pVMmRhVWtFQlBjZHkyc2NBTDNFb3cxSENMeW5BQzYwQUlmdCtkMGpvMEV2ZTUzSms4dnY1Q3dWZ2ZVSmlBcHBIMzN2aUpVNFVURGNaU0ozcnNlVkpENk9pd3VtVFZ6aThiTElNRGpLZ2hxTlpDN2F2MjVYQkh0R0VPNUFOcWUyR0JGeGNLYzlUZ0NKajF4T2pic210Zk8vcE5VLzFpNWZZZitFT1dQSk1sZmRHVjkrelZwL3hiN1haMEtxWld4L25DRUJPZkQ3VnlYSGxvVnUrRFNTcVVtNFFKbFkrMk9oSG1tUlI5cytHMEhPd2IwSTRVZkRCZGFtb0NiM2pGTlVtdHgyajhISktESWNJV3pBWGo5ODczbWpjeHI0eHZVcnVoYUZXZFpiS0QvL2dEVjNFd29aenkzVUNucUEwTVhsaXpEU0V1NG82bzVUU3hJQjIwQjhPdnA4L25KUCtnNjBhbCtoU2RpMnFMaE12aUNpNFhhWjRCUGZJMkd3ZGRwdnFUc1lIcTRVbDJPZDlMUllheUo3M2ZKend6ODlDMWhqVGkzaGdSTTFwNmNJTHNWQ3RMS3U5N1lRL29MYklJRGVrTm4vWXhPUUx6QjBnZU1hYWR0aER4dm9kazFkWDdrd1hKVHd0Z1VxQ081c0FjTERGQjlBSjNycldpMmZ4ZDBJL0NKK2RXM0ovY01GN3ZsSTJURkQwaGtuUUVnOEJ5dW02bGgvaEJBd3VlaEc1bDZ2c0M2YTlrQVVIanQyUEhOMjgzK3c1YkZyZDd0VGFtaVNHbk1KaFBVT21lYzhtK0pvaHBzK1RQbzdEQXRETGxiN1JRL2FNVVBEeHlqUmVTVlBEaUovbU1USWxHbk5icUZHYVZZT0hQRnl1bWh1Y3A3dVpkS2hIL2NJM1MzdGh0T2ljTGlYaWNhdkFZY3h6blZTTDhvYkt4ZEMwcFJKNUFEdENUNnBGNG9LRnU4TSs2Q1ByZHpZYnl2WGtsb2h1NWxpaUNpY2NvbzFNN0lKSGsvczZlZVJrRWhMYW9lbTJLL1VUdWF6eEpXR3JJZGpVN3dLcStZZGd1dlpkRDZDQ0JzMnE4TG5vbmxzRTFEOUpnZzJ4SmtGTUxCRFFpR0QrVXh5VE0wamZORkhBWWljaGtXSCtKL3hMQjgrR0R0dm00cTdtNFBDLzFKMDJJMVU4TWhoVU9xcXg0NFNBald3SWhWUVNKMjI5dG4xNkJuUTFFM2owakI0aFhVczFmV1Ivc3MwTDh1QzdBSlBqU1ZCcWJsRFJLV2pMZDJhK1VKdisvODUxTkpUZldUT1FuT0xIdmR1aTBWdGFGb1ZNbXpGOGt5ekFESHBnRHA4aU01MEpFbm95RU1VTFJTdFp3QTdiTk1KUkxJelRBWTZqamVXNEM1Mi9ieWVOOTVTdWtLSGtaTVh2OTFCYlhZQWliTm9IQmFaaFRFeTVibkRrdm1VSk1UUS91WW5YMUtDWkhZUTdyMjdRWDNCNVovNjFzVThDVTVTeGFzQ2pib0ltV3IreXFjZ3RidnlKRFQ3VjU0QzNWMUJmbTQ3TmIxRC9zZEpxamJ2cmtrSjgxNUs2TEZhdmlmSklwbDBFaXp6UzNEV21UUVFDVkdTSU5ncWMwdHlGKzg3SkxvS3lrYk9Od0pybGEyYk5RRDN1ajI1Y2NBVHQ3S1Nra0Q2QXRxd3Q3OTBmOFlLdW9rWlNqYmdhTGF2N1FCWnJiSkhveE9CUSt0d3pTRVp1akVYcHZhUThNbWI3dXQwTEMyckp2dmpiSW1LZmNHaTNEazJCWWgxaXUrWFJ3SGV1aHJacEhVOUlzVGtlUmZlcFdmS29ORUx4T0loR1Q4cldDNDNVZ0hMOXJGMllpcENSR0tqamFTSTlBc3BtZlc5SDY5UHAxTEswSHJRVDBwQ2RsQmwyZHByV3hyaE12Y2gwTUFCd0pocGRKelBWc1NCVXgvTFJaTVZhSmtzMGhReFZMOFVFdUZDcmx3NkdRajhHNnpjMjJLV1RST3J4S3FDV3o5dVAzSHZiQ280QTA2NFJpY1NVdEduelpOYjN4L0xzdCs2Wk5ja3FEMWJwb2xnMXp4TkhzcW4rK3dmWnd3Q2VzZDA3aS8xYkRNSzUxRnJrSFJXelJTQi9aS3B1T1dMREc2TTdwRVdoaFRrYXNGYXRoZFpFU1Nnck1xVExoWTArUmlkT0FzZHNLcmp2MHhVZkNPdUJYRFUrd0lVeDREUTFITHdoaTllRkhFNUJ6UGlyVVVYUDV1ZTc2VGlCUHBMbWRvQm1qb2g0STd5MkpnZWRxVERTSDBQbFo1ZzdWZzdsR3o4RHVybkl5bXFsVkQyRndPNFRNQVlGU0pJZDI2WExUNUpqUFpsZHNjWktKY0JaVWp5VXRQZTkrVlVKQTNzVGo0K3Fwa0srTkUweThmSEM2Y2o5SEpIOVhCRDROMXdmTzE2MEtQR2cvQ0hGNElvNFlaVEdXMUdhVll3WEJJR2kzaHR1Y1h0VzBEUlhRWFM4d3l1Q1pFMitVZi9XTVl0ckt6Z0kvZEtVRzBtMXZ4cVQ3ZTAxc09mTGdvODlmRVljUDZRR1hkb21OWHF5SHJqdzA5RjRUUk9KY0J5ZUx3dnF4TlZISml1dUMrV09mSURTTENVY3JLc1ZuSi91NnpSdHFHNjVPcy9obkNwVDBWYno0cGRMQllIMlVJby8yalhJYnFjM0dnOWhlaHV4VjF2ZGNtTlBJeUVxWVYxT0kxVjRrQTRhYjRUbWdWNUtPR3N1Uy9mNXh4dHl4NVQwQzQ1Q3AydGJXbkRENEZ3cDU4YjRTR1o1UEVuMHNFemlKYi9CT3VjNzFaQ3cveExzWjU1VGlRWDFRRmNjK0lBSFlwempWaDBNZzA1NFRLVzgwaHEveGZIVENPaFRGTTBhYUJibWRnTTB4OWU0bVk5UXR0Nk5aaVQxRGVIaXEzT09lbGJsc3BSY3JPSnl6Z3pEajlPbjZ1WXNWZTVpUndxZW16RjdTYmJodHpEbzlieG5iQUVueHJobERzSUJXZ3BQbUF1WU5wY1Q4bDNneGRtQ3IrRnNQVWZJZVVZZHV2MlBYcWZxNE5FdU9iZEVWMytQeEpFWTQxNWdSMHYyYXhOSWlqZjl2OTJ4Q0FWV2tPcjdGZDUvWW04b3ptZ2pSblJ3RVF0bkVYY2EzdnRnWlQybXI3MzI2bU5EYlkyZS9vaVlvOFp2dU8zOHIxMjFra3laVWwzbWxsNVVGOXhKN1hhNmNrWFJoK0tyYUZUZ0svN0crVnZvSHA0cE9lcUhFSG56dnpTN3ZkcnBWSHNuY1ptQVlINU5CYzlCT2JJRis2QW1aY2hZUjN4NHRndW5RRzMveTFrc24wOXIyaU9idGJqSjdWTGhWTUIrdEV4WlRmRE9IbFhKVHNDYVJhbnUwUzhvQ3Y4ZUFqeFcxeE80K21ndDVMajBWSHp1QTBqazJrM0hmVFpud1dnSEFQbVYweFlaK2p6K2ZqTWtJbFBHOWFmMkxqdm1OOVJFZjlLNWRwZ2V2S3ZpNUJRWUpIS2JWaWZRYTBjRHVRaDRML1N5QTZjTU9rNGZleUhNYktBeFdsb2ZxTEU0aVpCTW5HL3h4RWVnVFppRUw2Zm9zMkVNQTliSkFYT25WdWRLaHR0RWxsNlkzb0x1Y0V4eVpZQ3VyVXVqQ3VmL2crSUxiQWlpdkkwVWVSbTZvSDJUcnVBRm1paXFOMVV1Wml5KzhmTUd5Mi9vRi9vYVJSOGtiK01ORWZ6UVFVbmZTWG9JQkh0Ylh6UXRXR1BVZzFPTCtXVVY2UTBTN0RSK1pkdXBTYUNkQVowWG52Y1ErYWM1alBKYWE2UzI5d244U2M4TmwrakJJTHQwRk5hSG41MHROL2lDRFpxcVgxVk5lWjViVjdySDR0WEtNN2FHTjJScThvaXJiVTdvMzdNTmpDdlQxenlRZXpRU1ZDTlFGOXo1a08wdXZNd3lCaWJTVGVMVHlVeEVJdFJmamI5dll3eHJIZ3ZrK0gyWnhDN0F5dVFYMlJ1TllqWXVtYjJLbTM2TUpCaXFOTGxkZTNGMDNYMjQ5anovdHE0UlJEazNIbmh6dkpOUHNJMitPSDgrbnVuMjRBQ3lQTWVEN2c4UzBUbmIrbVdPK2xHaC9wR3ZiTmI1aWdxcVA0Z1Z2SGdKSFRFSGpSZzM5QmxPS3AyTGthUlpLaHhmUU1WRkY5Q1pTNTM2aVhicFRibCtFOFdzZFlQZ1ZkQjdkZkw3cGwycEhucVFHd1hxeCtQZzllYU1hcFBKMncxcFA0c3NlRHE5RjFPVHZ1QnN6Smdya0RFUHRQQytjUGloYVNGRnVSUDBKaENIQkoxeEZrZHVaSHZGd2x4NC9ndllPa3djSU13NjliL0FZRDZlRnhkN1F4NDRTVUJVOVVnT0JCTUV1d2ZKcG9kS1NsU2JoOGNCQVBKZ0R6RWYyYjBqcldVd3B5cW1ubWg2UVZXM05TOUI2WE9QdldLUXhRc09ZMll1cHNwdjI2ekwvRE4vM3JxNzJ6Wjl1VVhHSGlwMHM5ZnlqN2VZSm8zZ0htSGs1OTQ0Q25WaEJuWHRIWFYreUttQ1RYQmxJQlZqUWVaelhzTlRwQnFsQlMwMTI3a2YyTHFlT2VTYmxyaHJLMHExUzRBNHFEWlgvMXNrR0tkWDNiRCtsamtNUGt1SVUwNVVobTlyaHRQSGdtTmdFeGtocmlIOHd2UkFzOGFzOGFlQWdESU1VM2dYWGxnemFJeXNLamRJbXFOTUFUdUIrZWNsWUdqam5DWCtLTmVrK2V5VUpvallUN0p4ZVVoMDUxMjh0Q1IyQnVRK0h5bThVaW5SZ3A4V2hBSDZsaEVJTm9FUjFpbStIeUIza3dPMkdnNklwRXZ2RHBhL24rRCtuM1M0SXdURUIzdFNxWXVWUmNadFdiY1ZpbytHakxjNnVIb1hTRTEvbDBSekFlUnplOWNlZml3c1BWSUUwV2RvUjExSnltWERudlFqM0R0QVNrQ2E1QjQ1RklrUUQ3NHBHRjJGMU9HOUxValdTS2I1ZG10cE1uNU5CWE9jMDVKSSthS1dLMHpHTHBsVXVJR0hlQUJUellFMC9VQmFyV1pPWjJJTWs0OVM0aUkrZmtjQW1zTE5DVXMvQ2RRSWxvblIvdmlKYkRqM2oyQUJRR3ZURk10YzF5MytNa096RUtJNy9vTG93MHp6VTV1Y3ppVnoxOVdvMVpETXBRUjNFM0tXQmpGZUlpWUFyQk00V1hXWVpPOEUrc3U0NXBKUXdRc3NjcFlNdjBRenk3U1FVeHdFdzlhcHZyMTV4RXFwem5PbTFRY3FHcXB0dVdBRUFodDhzRnZQL04yblVNM0tpSC9VMFJ4OHhPaTA2a0ZMbURLcnppN3pOVndyOEtaUEQ4K2lsVlZ1Zm5OL3NWUzdsVkVJeUNJOTBxL0xEVmNOZHpCdU4xNitDRnB2blBjNllCTk45KzdWcWREd3ZWZ2dFWnk2ZmZSU2t1VWZhcUhYZ3FJWWVYQUNTZHVKWmJMRkRrSDRoNi9iL1NNUDJmaTFIM2h5eXYwVk1jWHBzcXRDanVlQy9qcTlGTmdyYmJLSXFIK255c3NwclJwNkRlaDdnRktGOXVodUFveWdqVWg0ZkhMQnBndTJvMjl2SWZIUTV1OEV0YWRWTVVveWMrNGFia1hiTmNwaFBOY05SeWk2RVZqMjZYUStEZmY3OFI0Nm1QREpubWFRSVk5UVZyQVZqS0xaR21RVDRHR3RGY1MvMnhqS05ocGU4Qmg5QVpBdHV3d1dTTnJIUEZhdHFHLzV5K3JkWXFvekhzcVo5enFkbTJXN0tIaDV0eUpneE1waEI4MDd5MXEveWNyZVhDSVNieGdLbEphbkxGUVc4UzlqLzdUS3pRekRLR21uVHpuYUFYMDFGdW9GMGhjVGZ1YTRsRnIrTDlQQkdneVVFNGdSblF3M3RJeTcwQUVoRHpkVndWSWR0d082RUN6ZXBySlIrcmlZeEg2VTdOY3h5OThzMFJWRWdpanl4T1oveDJhVTlxaE0yMENHWUtTK25rbXkvUVV3Wng2bjFwMVJ6L2pnRzZ2WTlsTk5rMGlGR212RTB6MU56NVI0amRZVUhrT3dEdHhHMEMvQWNnL085aUVkci9qQXJjMTc0UUhqdHFYeVp6YkR5bjlQVnlDbENWYWNtVjdISitUdzdiL0s3cDdHcGxHR28xbnFzNEhzQjN6TndKTW53NUhFRkUyV2lwczdiVFVCQ1R0TGJvVjZZL0xUS0ZrY3dZNU0xeDEvR0lFbU5SS2pVQVVnVTRZYStzeUxQN2RpL0ExcUpCSFMwNlZRMVQ2aW82dzVyQWY3VVVZWFBzWjFOQ3VMdGxLazlqR1ZCNXhpRTlCNGwrL0g5dDRVVG1YWHNlQ1BxRVoveXZ1dVhYYnBndjM0MWZndUxVTDVCeXdwUytrMkVyaVVZenUzb0NZNUV2WXNXZDhqMVlrVXNNWXF3TGs4eDZMbG1VRGxiWnN1Q1d5NWhmbkE1TmhWNDFRMnRNdlk4d1ExNHZDV2VoaEVNaDlzYWxWWUsrVjZwQUlzdUF3Nmd2YTRKdll1N3hMdFFFaTB3OGpnMDAvREVMZVFWeDV1T2p6cGhFWUE3S1BNV3Bjak5VU0lBUWVJWWpEY29MNTFndFVOZFJtNlVIMWNTOFVKSmZhVmZwOSttVE9GTUVyeldQWFZNdC85MVpwSzM3U1JneXdMc3VoeUtMbk5YendGb1llemZMc3BnQmwyZ3A1L0dZNWRLenN5U2VvNzRzQVNXbDlMS2RyT2M5UExGUmMyaklNTXJtR3gzNjFvV2ZYYW9jdnkxajVWQ25OR2o1dDkrZDBPd3E0SVB4dHhpVlE2U1k3Slg1dUhvVUdodzRLZGR5WGt6dU1hbCtlZHk3V1hmN2w2TGtubis2cDZ6MCtic0pkM3ZzcHNjV3dXUEZpVGMvcU45Z2U1U1FVdDBKeVBLdjErS2NDbHQ4dEozU243MytpcmRNT2lhaGM0UUN4Y3ZDN0ZFZGlQVU1LWGFWVzdJNStLNmI4eGtFL2l0bk1GSDBzZ0loSzRQYXZ2dmFtbDFkTlNMTUNndTZ5R0lNVG5wNW9vNkQwS3I2Z3BVMlUwenA0ODVzWCtrK0Y4QklrMy9wczZCUFJ0YW9ZVGVUQVR2ZlR5RXRsOGxGbGFXUTNzdm5vY2l3MElBVzhQV2FjT0lUejRuUmhucDBhSlI0V1duNVR0MitwaXZXMUZ5OE5sNWNSTElSalFMNWtVOW1ha056Wk9BYjJRUDl0UVRZaWpvMzBid1VDczdXWWo3NXdLUmVFY1BYWW90YjY5QjBUQWtSVEt3bloyazZ2UWRiKzJmZzJHZVJqMjBvU203eXllNy8vRVp1YTVodDRjc3Q0UG8xMUxtb1MxYm5RaVM1VU96Q2NoSDJYandMcklIbHI3YldBeTcwMW1qcE1xZ1JZOXVzcURSUGJSZjF5WVB1RkFHOCtDSzlmUjUzTkNIUVRpMWt4OFhHL1JXSGdxRVZXOGUyQ2ZGY3ViRngySWRHM2FVejgxK1U3dHM3VGpVVUhESWx1TW1HNkxhb1FaN1ZhYlFGUlkwVXFDK0ZINVpmWjNYM1AyM2lSUHFMdnYwTDhxUmMrM0JRVE52eXlXRmh0c2FQazMvTlJzQkFaZjRLS1pwbGZKc2c4R3FKdlMzemw5VStDVXo1QVY5ejdNNzhvemF1dFlTcGlFS0dlMlJ4SEV3b1pGS1lrRkVsak1OMHQ3NWxpNFFqYUg5Nk53T2NEa25rVjduU0kwaGxhNEpDK1dLL2ZmcjY1ait2UmdQSkxRbWxQTytrSzBxVHR0cVNCUTM5L2V0TzhNckhPTFlCeGgxT1JPdmZobzhOMVFYNllnOUtkVERVQlFkSldmcmhNMGYzdjhhaGQ5NDFCdWlZT2tuZVdTN0Jici9CZktXSXlZdnBKaEk0VXJnNVhHaVR5Y0VJZzMvbWNCSUt0RDlxbEx1Uko4UGlSQnYzN1I5ZnJOREt1bkR5YXpLVnhaUW9JMmZxeElCRFg2Zk4vVG01T2FyeElnY1NFWGpVVFZjU3dqNWs2MThLQ2dYM3R3Und2eUtFK05ucW1TRnZTNHZVdC9Vemlnc2Z4QkhxQVovenAyZ1hTUllyRDMwTTYxTUdLeklWM1YxZDgxN0h2YVlyVEVCb21TTVoybHp3M2llWlVyZVVmSmsxdG9iZENEK3pubG9ZNFJJaVJ5Z1dVQUVKbkJGMVdVRm5QbnJEYzY1eUV1K0R3cUZpS2ovSk8zZXBMUWd0ZzZzVFpKamgxclMwRGN6TllYcy91Mks0aDVCdkN3eDJ4OEZWbEtjcEF6SXFKSzVUR2d1R2Q5TVFIZlBIWGdhVDYvY2xVZ29JN2JiNHJLUFA5NERKL0tPK01oaS9ySlQ3SnhNMTZGNWRobzBwTHZadkxHUkdaSGtRRVB2OU4yWTVxTVdtYkR0UW1YYmFlMFVqd1ozT2Riak0yakZadTdnRHpISTVPaGxSd1lTT2VZZXpLUXdrd3IzTEhpN2xVQlhUMlp4VUN4ZmxNN3NxSzVPTjZQSGdFTnZLNVNLbkE1K0U1WktEVDBXUlpFMjA0RmJXTnBYYnNTMGNublJMV0ZsRmZkek5BTk1VQzVrSDJSRWRTaHhEMWpXTTI0ODRJS2RoVndIUFV2a2QxT1QyTGlKQldYaFpmUVRSZHlaM1BmUEZmRWxlK21sU3VpUTRFZVQ3SElEdzhTNmxhSm0yZTcwc2psMjNhYUlobk9NbU1OemJubVpyRzNMVXpsWUtlbHpySUtVN3l2QW9xbTFuYzVuSStyR0NsejVRakF0aFhucmtqbEN5NGkxZnR4SFVQMjU1bE1lbFF5Yk8vZEhtam94USs5YTNaZGpSQzI4ZGxNOGZDTmpLVmJCOHU0dlRwTy82ektqb2tVYTNCdkxwdktTMStNN2dnU3R3YURHZXRGcG9LUnRPMDhnYVBkQTZXME54K1RIaUhCT2FPbzd6V0E2c1d5d1YreVRTbi9PUU5ReGM5N1p4a2RDanYyTDJTVjUzYmlEMnhPZDhoU0FDQ0o0ZUlWZnJkK2k5d2JLcGcxNHJZdFZHcFZmdW9SdDBGek84QmdBQkZ3QnRlRVl1ZUJRQWF2OUJFaFJzLzJ3aGhQSG5kWGxxSzRlOFp3emFnY3pNdzRVUVVXb3o5MklxaFQwbjhCalBQTWFrMExjS2lYUjV5Vkw4SUZtVi95Rkx2SHlvSlBSZjdlSmJEV1FEc3oxMVdxQ25ZdkJEUUhIRmQ4WUlITmFXeWhtbzl3UkFGNjRRWHpxdkwvZzM0cGxnZlpqOUZkYWI4YW5UMkdicEZSVmtuUnljVzZFMFdQVlpoL2MyZS9hRjVrSzUyVzgrWlQ2UWNOWGtFTnBNcDJzYTJ3a1lDYzF0dDhpSFhEMldnOXF1RTRHcTZucmlId0ZFeE5STlVXREtiamc5N29lSk9RNHVXcmwvN3ZPaGNTOXRIQS9RMEljaXZjTTBrNXBSaWxaUG5JWkRld1JsNzRTZ1NMc3dkMDFUQWU5bFhnVFBncGFOWjdpampKdkg4c3ljVEYxQngrOVVmZ1k3Z2hPS0svSnplMDU0NFppalorZ3BmSGNtUkJBdE5hZW9jNXNFT1ZNeHV4SWI5WGx5bUVwQXVQNXdZZjFkV21oRG9SblpyRUNEaSs5U3ArR0R6cHFxYVkzMGgrZUVSRWNjY1Z4SFVSWXRhcUs3MHFtQktNbUEzVDRDVUF6WndvMXJaeGZHekprdXlkNXAzV09yTndHVnA4bE1rUVVpQWQ4R1hhTTRpbGRKa1J4VVB0TVQrSU5mWXJjL2c5WWV4S21IY09Ic0FTQ1RIUE8rcGVMbnc1N0Y0WVd3TjZVZ1FaMWhNVnlmY0FwL3pnUVBiSEJrY0hoV3AweVhtNEhNdTJmYkJ5VmQzak9HMUgvZU41QVdNYjFacDA5ZjI3aHZINTU3Uy9YdnF4eWdWWnF3RGRKMlV0Ymk4TFYwMXZKRHVnWGt6OUQva2FYWmtYeEtxOVBDa3ZlWkZlOThVVjJPeGNxUmYva1VMbkpLODMrMEpOSlVBTkZWck9Wb3k5QTl6VjEzVXErbjNSTWtFZ2VhWEUreC9MRDB4WXZvVUQ5VVpuM1dIbFhjaWJwVkdzZWdtdVZyRzZvOUd2cjlNNDE3WG5tYWxaTFExWVpZL1JiV1h1OHhjRlRNR3ZDNktRVk1peXhLVDF2Q1ZDRHlqL1JCSTBMS0xEVjM0Y3gxamRiUTRkMFZYcjhJLzVRaUhUakVlNE82ZDVCZkV3MHVLQzVTQ2tDRmtoM2xyQjI4ako3K3VUT2N6ZUZXblR0MjJVSGYrcEhBS2xicm1YaUhEUTBCa1pLYUZlWDkwVXhnVFRFVU1FMFVNbTNxSzBCUDdjZENTVUtIUTl4bWdoZG1xamlIcDFlZFV3K0hrYjJueVpCL1dNUzdTaW8xUFNzZ21HaWU2S2Y5M2V4ZDhtdnhTckJEOWl4ektZK0tiTUNVRFFQMVMvdXdhT0pubWYxZGNESkFESDlrVGE1WHhpa2JZY1hvcUpEbGYyUE1CUG1ub0ZXaEcwa2VpbmVkMkxiNHNnbFBtZEF4eE9tS2pqUDVVTkN2T0xiQWVMLzFKYk0xMlpZeTF0OGxCZGNMSlZSeWIxeW5yQUlDSTdnNGFYTHQ3QWR2Z1MzOG8wMmg2d3p6WnV2Ylg4d0ZYY210UnRQa3VGNTdQR2F1QmlaOUgyUEJxUjI4eEJSamF3aWsyQkYwU1dEdUhodDFRMVJoZXFRNnJHM3FvMkIwN0lFaEdMQ3NmeFR2Y01VbStNRFlkOE5BK1ZJOUc0M0VuZlh5Vi8yUE03R0JtZU9FYWMwN3dhN1p4WHRuTWdzOU9MTXNhWUk0Qzd6ZTBCUzFucXRRSWZRS2VYbE11dUpJNVdJRGxDaVJuZGNjSktpVkhISWJEWVlocTJOdHZJQUJLV0hJVCtPL2YrRGNkaklMREh3bW1mM3lIUmJsR0pscThVNUNWald3ZWkrMWJCbm91M3NQVWU2R25XOW52ZVpoaWRFVE1BT1ZwTllMYlUwZWMrOHpKdnNFUWdoTDlvMmVhaEtacmc3amJSaExvMnFQeWUxaklUZUZEVGUxQUgvQlZMYlliY0I3a3BUbVh1bmdEclRIVHI2djluNXdyZk5OSjlmOEZHWmJsYVZKRG5XTExxSklRTnZzRzRSL3M3WTd4bk9ZOVg0UXpkUmRzZ1JhS3JBVHY3TnZYZWFIYnJKS1FGUFRHUHBzcU8rTTZvU3R5WUFWWVNEemhkczd2dElyckJGNTh6V1o0WmVQR20xTTcxT3ZVeFdBR011OXVqaG1jdmNXa1FtbFhqZmVBQW90TmwvOGdYNUdQT2h5SmN6dlMvc0J5QU9MaWJRTlVObHpjNExraCtoN3NYck9WWm12bGlaU2hEMFF6UGNKU0NDRmN5M29scklqQWU0QkRadHlrM1hLOWlPelFxYzk3bmNqYzB4SXJkYzUrN2tKZElDd0wwcThRNnNveFpScDhaOTREbEEwTkFBdS9waCtJT3dkYUg0WVlmUFJSYVBTN2V0QTRxdjBhSGNTWUtRVkpsZExrRDBmRS8yV0ZpZUd3T0pPcHNwNWRZRGlGZE5oQ0pnMERUdC9Bc1p2NkZTNlUyTGN0SWJmTnBCU0xhanJ0c0JpUTFtUEhlYnplTlg1TjEwTEVSTnJSd2VSOU5FQk55aWlTckJ3QjBvaVRFM3QrZ1MrcHZ4a0FwczI5M3pYTmNpSGJMWlRhcFRldURXdldmcUhzYlVGL21wQVl5WlVhV3NkdFhQbk53Zy84aFJIL2ZkNTN4WDV6Z2pWK3ZwbVpQYk5pSjJJYWk2dU1jRlMxQXhTLzFBd2h5cW5TWUVKZVFrV1JGb0FUNEJENHN6WU1VS1lCU04xbDlZVjYxcVoyVXlvQlJHemtBa3o0aDdIWHZQdm0zNTdoNDRUTEpnY2toM2ZTVGc5S25PUExNSm5XV1diQUoxODREcThKRTQzQlNndmp6NElJVFlmQ1U2Rmg4QytVVGlzbFhLVXdHUE5CcDgzSzVzZmRRZEpEMXAwbUp1SVBIUnBwQm9TZTNJcm9acUhBbWxFREdOSVBFTm55NjFQV01HZUs2U2dQL2tHbUtXcWE4RzI0eEx2VG52eFZTeEhtQmFXWDVNUzZSMTc5ZTFiN1dLMm13VTNEcGZMMzgwNGZ5amNxT1FhVXBReUFjS0xqTUwyaDlWeHJxVG5LdUp6WXdNRlU5YXJqNlZyV1ZjSHVQV0VUUTlkaEg1bU0yMFkzMUM1N29kQVhuNm4raHo5NUw3V2cvd3dzNzE2OUpXZDJ3QzNlSHdPeGtTamI5b3hMQ2swMHBTTCtLOVF4V0tuQkkzazZJN2g0VGpEN1dTb1JDQzc4R2pTdmQ3aXZTbTQ0bkhjMXpDMFp4MFpjSEc3ekQvNGFxQ21KaW5aa3liRTlvNlVHRFR4VlF3cGRTcWtEL1F6SW5lVlV5dXB5c1JLNWVKRVdBdGFtOXY5MUg4NDk0bFIwT0hNU2xOSE5QcUpoTGs2ZEVuMVhUWjJYRU1PaUdEZng3eVpLN1hBZ3Ntelg2K1JBSFFuMUxKQUsrYkQ4NVlCdVI1Q1ZpdWYzRml3Z3RoZ0RyMTZ1ME5ZUFRGNVN5dkVXY2p3Rlp1c2ltNEc2TllERVhUd2ZQQjRrL1RFdkpBWTN5M2l1d0djOXk0VjJOdExRbUlSVC9qNk01WDlYWkc3M3ErM2t3ZHVoazVlK3ZGc1NReUsvcVRobDVkVk9DWi95em55TEpUQUt3RWhRdWdVTWVCc1NBVmNEbU04aG1JRkoraFEvdVdRc0gvZEJIT3hHVGlRcWpYZytSNEwwdmZYYkRuR0JLZFM2UlU0Ly9KMjM4dFR4NTBxa0grU08wMmtRUUs1T3ZhcUNzNTBXVy80WjdrSEtTVERMYU9xeXVEaGVPL2FBWm5JZktUQ1M4VzhFVWpDUUc3OW1INFhzY0JzRlNsbWl2ZExwalVFaEhxWC9CSHRNK2FXdzhwbEZGRE9wdmtSU1BWaUREVlZleDV6aXJnakRIRUt6ZDZjb3JHdmhBQTl3VjFkVEcwRlE5NFJheFZNZFJiSm1LeGlpRy95cnd6THdYWkVVZlkwVWJiWkovaU1jeW5ucFRZNWpkSUsyeVpscWtOaWhtS2N3L0w2MkJvWHFYbHFQUFdmVHJTd0lRaHE0Wmk4eVM0bGxDM1NjSGorQVhxSzZEeVBQQzlRR1ROOTlFSXp4dGdpSkNOZkt1NUppQkVWMnoyYkhMQTFVVVlabkVaRzhKYjFEZjlUclFOaEV2aUIzUlVRcmVFYXJmazJUdFNBZ1RGVU5pL2NNRjQyVzMraUU5ZVQ3Z3o4Wnpmbk9IMjJLSlBxUjFuOHFCb1dFQThUT0dweGFZOGFvcmV1Z2YxcHhNL2hVNURuMnNlZzNCLzZTTGx2RUlUMnJocy9kbmJhdElYdC9ibmwvSWRTVUZFeWd4MUV1bnJGZ01XcWQrRS9BT1A5VUc4VEQ3N092UnRMUHVMaWthaGFZVFJ1djhUb2dKaGlBa204N2pILzA5VnFUS2lsSW1RVHFub2NTZUVMV1pLSkZEbEt5UHFzNXJMY1pOTmZhRjJQS0hpTWIvUGx0Zi95V3UySUJtbUUzUUdsVXhTU1NTQkdWdkt2Q0EyNGFmNUcwemE2Ump3RTdaOEVqWk85OUQ2TEkwKzBBYnlxMjFsdktrYVh6b3RCUnVtdURDUUU2WWlNUXprVmwxakE0c2F5eldGQWJ3aWNiY0lMM0RmRzU5NHo2eUViQjBXcFZZZ0xlbGJ1QWIrOWRGNlRpT1h2enp2RnZoOEZVSlR0azI4QWtzZlIwaGZuMlp6Vm5KT0xHbUdOejAwZHV6Z25wR1RXeFZDQ2JwS3JaeC9RcHJzS1NMOGRMVlhnT3RsK0lXWDlmR3V0NVlnR1diSWc2Nlpyc2pDS3dHVEhreE44QVdiaUpjblIzNTRuOWlqRjJkMUF2cGVpeUM0R0NRRlA5S0VYWHlPVng5bVV3VHY3dTY5RWVsa0pzQ21wNGVXWmg3cVZZeU1OaDlKVnlYWEtWMjJUdnNqbkx3NkFJcGd3eC9kZEFONUM3L1dpTCtZRkhkMHR6TFhNbHF2MlRiSXIxU0k3VFVROURTdHI5M2dHWDZVSWpzalN6L29jY2Q5QXluamxmVUk3TzZTNTFsd2xaV3hVcGlqZ1FER1ZzRktYK2VIZWYvUDR2VE5NY1oxQXkvQnVRRmpzY3hhVjNYQkhTbkdhQ2VLaGlpcDh0UnFBcUpGYytYYkZCWmozSnQvN1NYcDVkd3FyaXg5U2QyVVZKL0FvT2ZwY3djY1g1WGVZcm5oVlRQbFBZZUxIS2ovRlVUOXplTzZGSUthaHdJdFNRS2RXRmhMU2NLWVBxbERnaDhUcHpERkxGWVg0cFo2dFpUVU96TjFTWXI4MDB0ZEZLTDVKU2pJOEtueGhSTjRsLzM5SGNPdHhYc3ErV2EyQ0w4eS9Xb1gzUSsxSStldjZxWEsrYnZmaGhUVzFmM1hIcWE2ejBGWDBJRTRTK0FWa1BYSlYxWVg2VFpuVlppa0JGMFZTVWJGTEhVbUxtYTBOZmxqU1lWUW9PUkw0NHdDV0hKY0YzNHN6Tkp1RnZvc013bGMva01hQmtaU3EyWkJzWHhERFExcndsbmJUTFliaWZiaVpUOVcwcHJ5ckNrRFovSWFqS2JhUVlHZkpqZjdiSk91WWR1VW9aeEZOVE80Qk5pdFlkRzJPREc0bEduWWROVmFPV1lCWjJMek5McTEvOUN6MFVXYlFpYlRXcE9JUGcyZkQzREVwMFN3ZEkveWdBUy9SZGltYWgxbG5tZ0ZKRzcybnova0ErQkdHeVJrRzN3aS9HL2NFcHQyMGNYZ3NXaTBPMmVIMDdmWlc4eThHU09rZkJ6QTJaRTJENTE5VmZYOVJQYzRYNTA3cm03VUlaNG9xa2FUTVd0U21WVXJja3VuMC8yc1JCMUVFbk5DckdqU2d2K2tvei8waUFTWVRMcmxvdGpJbmlkSTk0amUvS0lsY1lpMUMrQlZOWjUvUXVwNjNnQ1JFWFBSZzd2UGxhV2Z2WDl0TklvWFVSY1Erb1lzbmdOdVEybWRpZXQwUmp5enloVWtuNUlSYWZHU0hNelE1NmEyMUNYZ1BmYzByT21pOC8zNnFGbC9uaUlmV0NPR3N5YSt4UHRtL0FQTFo2UG1qVkduOFBibzRFQVNmSGFtM3BjM1FsSDZXMDQ2WE9jSGFDNUJSb09ONEhyWkx6UENkKzFrNEx5T0FyZy9LY3paWG1yMGFQWldkU3U5WklRQit6RXREZVFFSHc1eVVzd3lsVmRYenZsdEJWYlJ6M3FTWU9sWUxYUUV1cWwwdTVUZzZjMXo0WTVhenZvdzcvWm9TTjYydDRvU21wcXpodXRPMU1rN1ZuZjRGbHBiMWNEbzZOQWhPeUVUNmxZVjFkUVNVVW1QbHRCakJZYStadFFRLzBYOERUNmY1cC9CME0rK0RrY3dBbmo2VVFiZjhyVCtrWG1nR1M0RHlwbDFyQy94UU1JRDRBZWl1enYxREZUMHVUTTNpbXpHSEhTS1JRRWRDekR3aWNYR3lZR3hvQ1ZHVUk4cDU4K0JLbXhCWE55QWdwdG42cGxVc1lSQkV1SnZROUYyeVhQUkt1VXRxQk8zU1Qvek5zSGp2Q0tVQ0VrMHdHT2NIVnpFMGJvd3pxVzNoNHBxTTl2OUZrV0lpRFdMSklsSVNvbmpOcFhkbTIvZmFjd0F3TzNMTjBKc0QwN0NwWFFTSVNqVlkxTitUNHE2dExuSXNxMlVwVkpkZWFST3oyZDRNczU2MDUwZGlHTDRIL2ZwMFMzR3cyaHVTb05NN2lHYmFCbStzRFFiWDIzd0JSN1hIaGlNVWpJbFJyaHRHUzFJRi9wNFgvR0xSZXVQRFVGTklDeVRUOGwyb2FoenNQMWVoaFNsaWlpRG1YeHpWZnkyNkt2ci9kWHFqc0JYamZBWmZCSlVxOEp0dkFJcFcyQlppVlZLVzJWbkVpYXZBc3BBZ0cwcmdYQmNVK0Fjdkt1TmJ4REhQa1IrVWUrQTNhRkh4UGpyUEl0b3pvaFFNbW5vN3NXTCt0aHhQdFEyUDlXYWlYS0dKRHlUUG9LWmwrS0JWam5uNi83d3NBSmVIUWdQUVpQNmtXU3hUNWRxaFJXcDB4aHJvQStoendUdENFZzNaZFdFZi9oU01wc2xMM2VjdzJQQWJDM1J3RGg4bklqdnVUOWNDbXhEcEQvWG14OWhrN3o4eHE4Z1lQWHl3YjRwMDI0M0pISXdVcWs2Z3RZbXozSzRoejNkK0xXdlhYK0tqSWE4VkpXR1g3Q2pvc1dCcGNUdE5kQlJCeFhoMUhRRDdESXljbnI5NjM4NzlzUEhaMTR1WHAvM0VSWnMzZlltVTlqakEwWG9MeGpkOHhCRGJjaDUyek93bGdSTDN2YUtWZ1ZpY3lyMTNSenZWZUtaZ0Jqb1JGRmtOL05RcDFsQ09VTU9EOG1VRUVuQjBWcEx5N3ZlRCsrcDZKU3F5SzMzNHQyeVFJWEhhSHI4MlErZTdiSEh1NUFPVCtNMkd3UWRaUVpVVTZsa0w5d09RYlhPSnUzdEpPeXRLUFh4UWR2ZFB0Nml5bUw1SFkrTDMwNWtESlBYNG51ZUtsa3lLQXZwM201RVRaaklTV1NSdytoTHhHdFRBT0E3VjVGbE9zMnE2MXMrMmZkN2lHTUU5RGhpK1Z3aGFIU0hTZ1hzMXJjOGppQm5udzVkdFlzL0pobENFSy9pbk53cFF5c3M5NEJFQ2pqM09lQkJCblZnYVJUaGI1MHR4YjVDbFJFaDFDU2ZNWVFKMTk2NnlETzhDMkZsQzc4dm5Gb3g0d0hndktEZ3Q4MnhsUVpHbERYRTVsSDZKMVpRVVl2UjAwNUEvNGtWSFh1c3ZoRDNsQ0txUHZEZjJtUWZiUHprR0xRTXh4bVdLOUptNlU3WXpMdzUxY3RFaloxdCs5Q3dVQUsxa3BXZEZxRXZaa0Z2MVpXbm1XVnVMN09FazRDZHFvNm5lemZtN2M5R3VRUms0Ri91aExMSE5jQXhHaFplUVZ5b1VndUxKeElJUzFlVHRSWG1QNTRaV3FrV2JZMWw5RTc2NFRHbGxUK1BTempjTUh4Y3d0Y2JGWHZvYlFhZjNhTnZ2NHd2V0RGMG41U0ZwT1NxZVhRMjNBV3hNRDlSRDU4RUFFak10dzZVOFFLNkcvWG5aZkI5UDBoQWdlQTQ0VXU4QTJlMnNuMmtoSHozUUxmVk9iQXF1UkMrREkzekg2SlNZK2Y4Y3lCbk93ZnZOd2FDTVBaaUhGUTVWR1VvS01hRHk0MU16TWpZdzk1aG1NOEd1M1VVVEFFTXZZNUxxQmtNTkdUa0xHZWhQYTdKcExGMVJMaWd6ZzkwQ0NybGNDMGwwZ0NWd3dSaWU3ZEpaeUhVUXdGak1zUk9aR0xMUVo3eDU1OEJYeFJaUlVyUGNnbUgvcThwVHNWU2dDWU50TUxrMmpWV0p4RVZCNDRMUG41dVZkQ0ExQTlYaWdCSlZrR3BBQk9sd0swbkZGNWZxbUltN1NsSmpFejIrbktEa3pmMlhjVlUvTGlQVEJvZXZ2Q0EzcXV2ZVVDV0NBd1UwQTNYZHY0YVVRQ2oxVVJUaEc0TnNSWGVvNHZYL0sreTZ4RzIwMFJNeUk4VW5GZCt5bEwrY0RtU0xyTHRyL1BKaXN4ZEs2RDFQYXB1d1R0TEJScmdiMkEwZDdHTmhKYkZ5K28xTjcxNVN2Z0hGV0ZNa3U2ZC9oWG41V0RMRzBRZW0zMGVncnhjUGQ0aEJDRXlNYjZaSzh6dDBXRlVZaDNVSnpyaklXWEtoTlJCRTBpZk1MQXhjZE1QQUlIUmlrYlkyeFZ5YnFuNVh2TEp6V1k1N3N0UVA4TzVGOGNET2Z6cjd4NFBoaThjVnp5c1V1b0RmbUs5YWxqYUFUaTg2R0tIb08wZXpFSWt0MWR1V2c4M1p2dzVvV0xmWXIzanFNZms5U2F0bFl6MTIrTnE4WGdYWTRMelVBWWJPNWdkdHdraHdmWnQ2WDU5dTVhSzFZRWVRM1Z4K1ArQU1aNUJtTHFNc2pqQnZZTHVnQVJpTUhCdnI2Y3hnYkdQa3B2OExBVkhDZDVVY0sySE5jSTYvaXprTXVoY2dmR3pDeFNIKzNpZ3dpOHlGMnBoOTJzN2pWYi8ycFc3bFVjTVZyeXEvRkU4bHlUYWxCV0xIWmYrOERNc1hpdVc1cGtYSXRWTzBDTVZnT3g5NldraTBGK0k4M2JXMGJnRDhoR0dBMXRyYVRPcEJnY1g4eGxCVG91QWUzNzVPMStiVDlvTWFURTFZQnB4dHgvQm5EZEk3bTJ4ekI0V1B6Nm54VFZZRmZ0YWM2WE94QllyTFFNNTRNMXVEMU9QRzBpK3lpU0tENkE1cldMcjYwTWtYSGdBQ1Y2WlduMU9FQVF2N1dxRzB3WGl2NzBEMUQrMTk3c01MUS9MNGxUY3dGaTBBRG45NlVnY2ZVR0xGQjVKemlBblZjeEJ2am52OUpGT2pIQVMrbVBxQXBIdGFvblZjcjlqZktGaHlGNkVlYWFIbFVGWU9IVGIyRnpVZjhtN0dwYm1admN0SWRCazQreG9KaUY2NmNhTDdhb2kxNWc4RWlaUXNReG12T3k0V1JXU1NoK3c0djVtS2w1T3BkaXhKNUU3QjJsMnZ1UlY1bHYwVWJ2U0Zkdk12c20xUUJ5WS9pZEI0R29tS3VDVnBFM2VWZXFUT3Z2UE4wWWVPcjhzT0RNQVJvdmhvYng5a2tpdElLdVhWZmpWQXkrdkI4c2xvcWFCanJSMWhnUzdXU1dFZDU3N0lpTThlM2J6bDNmL3hNYnBjZkx3cEpBZ1VQRlZZMTBKMWRSMjZkeHFXRS8yMDNpQm1KSHFtS29tcmhNYzh4Y2kvSFY2NjI3bzlmcG1XcTJTc2F4YmZiTy9MZUs4bWF2enpYaHN3TEh3TnlXMDhhVCsrc3VIcWhRbTI2VVA5WGE3YkVaVktvb0NJS3BsWDY4RUdLOHFhUUZYSFhuMDhzQ3VSMyt4OHE0bjc3RS9yL1FTZ2I0dGJXKy85c2lGWitIQmtQZ29MMkVwaVdpV1Z1UmsxbTUyelQ4R00wS1JHU2JQOXJqODhnd2xlQmRHTG4vV2JOSDVBTUxma2lIczlmYmY1RTZQVDJJcTZXY1hEem1oV2VRNkpNdTlNMG94OHVxMWZtaDVvSTVnSlhuQUtjaFIxclY5dDUxUVNHQjJFcHlJemkydFFwTGhpclRqSVFCSG9ycGExMlBRZHBZdDhGVDM5QTF2eWFOSjN4a2VrM3BEV3g5ZWF0QnFWRDZBZzVscWhXdERBS2N1L09JbU9CRVZHb0laZVlEQmQxSGtsSGFDOG05VWpqbFdDZlFMbXlnTVhkbUVJRjhCZ3ZRbXBkTGd3NlRmelBGOVpWc3ZSaVpzUWhqZG8rRzhqeERnTzF4Ymk5SUg0ZEVWTVhWVG50dzhZQ1J0ZDk1cEduL2RrS0h6NnowZG1PTmJnQzhXdW4yVzlMN3BSeVJMTWc1M2RwU1NNTC9aR0tXMVgwNmJPUFR4SHBOYVVIQWNmK0hSUW1KTHJocUI3QTZ4U25ucHBLNlowQnlEM2QyVzMxWUVPbWtQN3lKVVUrRmczTGpkMlNFbjZKQ3Nmbk1qZzV4Vk0yL0NkcC9Wamc4RWJTa1orNGhqT0Z3dkR0U3pRNzMrU2oyZDR1VDk0cWQ0ME1uRzVDNTI1RnBnd2dlNDBiTGtlY3RmU0t6ZVk1Z1JESEFFWkVzRkVkWkpDYTM3WWJqZnJxSW5wWXNJYzVRNXRvK2NRL2Q0a040OGNrVTExQzBUYjN4MzhtNk5sbE1pUHJjWnhnTE1acmZJMCsyQ0ZiYXMyajUrY0NQS1BEMHZabDVld2RTMnVIUFkyM24xRFg2QzltZDlsaWFmVkh0eWp0Z3JsQVpYcTNnZ3BIY1AxZCs2NDZZSFpJQWJSSGdqNzVwYXNUYzVaY1pPWEliQkdiWit0T1VlL3EyU0svYmx2aVdjaEVjbG9kU2RYZUVsQmt3a1B2MFdTbHVMM3hwTGhXVFFuZ1VyVGVMUTRqNTRDMm41cytPQ05MN2JTNVNKbVNoZzFIUzFqenZXSEtRaTVqMnlndVI5QlE2RTRMSzd1eGNyZnF2RSthT3J3S0gyMWhNTkJCWFlXdXhMbElsSDhLU3QwbEd0akowQ0IrUForcko2UklDa3RDeU5YcVREME82UkhyOWFiclBwS285K0Qzbk1tTk03aXYvQmoySkdsbGNtcVZGQmZraDFudzlNUTZRS2l3dkdYWnl5YTZ6WVNMczZxelc4VGVnc0lMcTNTYUUzNmxBdXdzR29CamFmdFg1Q1Y0QTNJVVdGdGwvTTE1STVLK3lpMVJUYS9jaHBMVUdDMExtSk1sZ2pCK3BQaGhLbS9GblRtaTRMOS84NERnL1RsRGFvMitIeE1SSzF2K3pCaDdhdnk4STFXN1ZmdmczM01FNThwOHZTeE9nRER2RmY5cHl6NFRueUUyNkcvdEU2RDlDTWZKSmRKMDhleDQyajBTbHlNMXdQbWRxWG4wOUZvVmxSdmpOZFRIMUFDSjg5ZEw5NFhxRXN3d1lZZE54Z0pKREEwV3BjblNkNTFpSWY3SlA0bFNOeU1PVEx6dlYwZWtyek5XdE1WbWVJS3JTZlBSMVUwVnBzSVdMV3RPK0NhM2hmaXBmUGxJcTRka0tTcll2clFmV3VJTzFUdVdCNWRRRDRTeFhHam91SDFNRVA2dGwxNEpMWDloUFpYOTROWXp3OEE1TzZrTkpiUEZCOGVQbkpSbW1tSXYyeUhkc2x1MFdTOFh4emVqZlVQbEVjVkFTNFRSSys5QWlRTUkrVHFSYmhsNno5MHZtK2FmVzNPbWhjdFlVQldCQW95SzB3eVF4THVNdjZZRnJIRW5ZeWZLZk9UVVowZnFEOTQxcHphMGxoc1kvVE11RndoRWtzU095SitYK0J6VWpLZDFNRWExSVA5RnRYaGtEckJmRHlGMDhvaFR3VjBUQmYzR2RrUWQ0Um10OWwxY3NMU2hpOWdwQ29BRTZDcGVPbUtIV0loNlllNm5qYlBUaC9STGFEYituL2RmQllkUDJsRzlaVVhQeUpQK1dUMCthVzFQYVJ6MXpZQWNWUExtaitnU0VZaFNvQldhNy9heE41RDg5bldRWXN6d1VXenljSzdld1FEK0FoSEJQZEtOeVExRFFZdlVNaWVwRDcwcFBMY1R5NlYrSnBLai9xcWxSenVlRS84b09EMjhQNmRZR3pkTkthYXBweWRNTzBSNURyY1RFVFBHQ0M2aERCTk1kZ3FzeDd0Y0hzRUhlc0QwblA0WDFIajJhaWkzb0l1R01oemxNVWNQQ1Z3RVB2ZDNWL3hjalYxRnM0aW13Z3l5RVUwcE94SWthSDd0UmFnQWJNSjZyNkxRWUYxcS9tQnZyWFhoVEczUytYdk1PVnl2elhXWittRXdNZ1RZRDJRbWhpYjF3MktmNnpuVEV5UFg5dTF6dHFsMDBWNGp3ZjhNaEIwdHc3b3BoQldWWTJBcTlnNGFyYXlFNXJLQWY3cE1QMFdkYkZSWDA1UXorNjN6SUIzMldQRDVXRVBCR2k1TVNjbWZIUjZlTFd1RTFMQ2ZnR1I0Zi9YZGFBcmZ0cXcxSWFGWkFEdy9tWkwxU29zbWFZNFYxZDdtdmhCdE1RZCtuMVducnJRQzZxdW81SXhuY3pGRVZlbTJCckdTemlGV3ZhNmhtOEg1QjUwaWpraEdBUVNBTmN3cms4VHZWWWhJZmhueExyenIzNGlMVmxodFFnVENyekZzeFhUUzBrY2JseWNqM1Znd0djVHpwYUZUOTNGY3ljelI4MmZiZi9pRERSQzZxL3JqZDNDbmkxemRmbE8ya29OelNlQXA3aHlZczR3R1pkc0d4cUhmdEtPSkQ5SHRJQlphS2ZnMkp2TmxOcjNZTE5Kalh2WHMwMG12ejVzRkF2OUZjT2xlcGdEa0xSdlZCKy96cnp0WGJybFJuV1oxcUF2YUY1QmVPUUJBeEk5Z3RzWmVhUDFSc0doQVJXMkNGWnpzeG4yLy9rTGdvVG91cEFRRUFWZFpBUjdRTVpKUGVEcGVLazNFOW5TOFVORHZlc3N6S3BoNVhlUHFHK3UxQUZwS2FVMEo3RWZPR1I4TWNGYmQ3aHdZaVlJZnViS0JDaGx4QmhiUUlHenhvdDNWUDV4a3ZHMm9nVDB3amlRWUpmNVYxZDJWa2JGQzJhVlZQUmM0WGt0bG9xVG8yeG5leGlwQmZCK2FhZkFaZjZxNUErZ3U1MGZ6Ti8wdmZrckpGZUp0T1NEeG9wUDRpK29XUGY4ODI0TEo4ZHZNZitBTytxMmVxMjhGS3V5YWFobjBoRHRXUTJ2eXdyUWh6SStiSnZHR1RyRFZWbXMvTmw5akc5ci9KL2tBS3BYbnBkSTBxMEUwVk02RDYreHB3VFUyakVQaUx6OTNUNW1RQ1AyWnhtc0FnY0pFb1Jzd01YVkV5SGJxaFlPUTErRUc2OW5KRzJZOVhQVFJQL1YzYjZTV0o0dTg4cTJIUm5PZUw3QnE1Z0hwQ1NZOXZleHhXckl3YkNEWXpMT3J2Y3M5b1pMQnZZamtYMCtTY3kyT043aGVXUFR4dVVYS0lZdVhkRDE4MlFXSEM1Y1g5SjRsL1h0RTZ2YUNmU0ZEWW5hTUlrZGhoUGpic3E5dVFYWjZQYm5RYzJkdWlwbWlBQytzcWJnU3JNdEhUd05JVmx4T2FvYXdaenk5aURCVHNFTy9PWjcraWEvSkFtSGpXL1hjREJGTUhmZFJvakxXTi9CTU1yc3ljRXZOdWNCRGo4QWlVbWIxZjhobHJSVjczeEt0OW5ESkNwbXNGalpibDk5ZTZYd2RNejhPMEFiU2xseTNKL2h2alk2Sk1ORGk3SC9YaTZjUTg1TzlnTWNCTDlsRkNmcStNZUZUeEl5a3plTnhGcktjeUQ2MUs4V0Z5M0tONDB1K3VsTnNzTTZEWmRRWW1Ba09LeVh3Ym1sYzBHbXpCSVFqNnhtRVcxOXhuTnJXN2dGU05LZWowSmtxZWFXcW5hZ0E5T2s4QUd3SGR6emNZanBFQ1M3aWtwVnRteXN4VzNpVURVNXFzUEFsMWxaVld6U2ZaWVpMUEcwSFJKemoyYkRrQjh1YVIycFF4VXIrUFpRcHZYaHBzREFQT0xWT0dKYk9HbTlHWU9VYjJKNkNOSi8vTnlKM0ZQZ0xGa0ZWeEVWZGFqWE42eTNpc3JkbXhKWjRxNlNNY1BFdW5HNUkwM3RMRktpZFF2Ymt4NVBEYmNMeERBQTZ5M0JUMFpWL0lVdkorUy9sUXc5bDQ3djhzeFNSSG0yQnJxNURQa1B5L1hmYWRheis1V0pwalFVbXhIeXljUEpjUHBUdkVFY3ZrNXFIMjJSdHQ2aEdVSE9XcVlLY3B3OTFINDZsWFJIUkI2WUlxQjhhM3R2ZzhsUHdzaHY1S1hYZ1kzQ2poVjNvNjduL0dOSVAvMFZScHVYMytGTzBVNU9ZcjRXd1BQYStTZHhjdFlIN05RQjR0SjJDU2Zuck9ZM2piSHU1NlYwZDBKcVcvc0YwMlh3S3dXRlZudmxmbmNKVnJxSThzVUVyenhWcC9pMjVGRE5GSlYyOWtHMCtkcEFEQnpCdENKcGtsVDFLaExIZ0F3dXdMRXowRlRTaXc0M0RZSGpWMllQN3hzOWQxR0RTU0JLK0VDaTZtU2FPWnZiUDlVenhQN1hKY1F6WXFzei9nNm9nK0RDVDlybUJmbW5MUmJNUWFxdTRsY0lQZ0hPZTNUMVYwcmJZUG5zd2xvOTNsa2tlZSsybkswdEJ4c3NYTk1sbzRQVE0wbnJVRlo4eXowZ3hyT2hqVWgrc0hMVFdXT1pvRlVTVWdCYVJqMWJFRnJEbDVROEYwRGQyWDlDZnpVVFl3YUc4WWFPVU1OSWlBVXVyeFFKMGRGbit2ejhPTzdEYzRHT0VtcVo4cHFiT0dLT0RiSURJR2Z6MEIxdExKemFLNEY4eVEyRmFnUmF6a2ZrVmtkZXI2N2QycHladnhJekE0TjdFMVRyQUh6RmdUQndqdUY1SGVCbnBrTEhtbkczVEhsS1B5K1V2eVpZRVA4U3NLZy9pTS96cjB6UnFaT29WWWFIb2lZalAxbEZ5VTB3K3dpRk1UeXFKNmtvQWMwY0lVbnhpL1lkRW5icGwvNE1qQ3BGTENXRXJRdTlCODhlZktQSkhhZHo2OWlrODZQbDFzL0NqTDQ2TVYyL3orb1psMGlIZC9OVXpLRW85MklKbUZvQkpxWnA4aTJoanVVYmZIM204Qi9TWnRvOUY4QkNwb1Z5WDNtZ0MrdGlDRGRUTFN6TEJXUE5BUEU1TjRkYlBlKy95LzBOaDN2ZGRXVjd6U2lzTlBiSHE4dVoxR3hicXAveldMNGsxTDdsTU5pUFJuODdrbUJhOHV3cU90bFp5dVYxTldSdTVIa2RpWHRIanUyajR5SzJ1MkZINnJRT3EzaG5tZ0dFNkQzTzluK0xhNVVTNTRDZklUZDdnSDFVZlBtU3c3T3l6V0NzTlpqYlo1Z05yTVludE5BYVpHZWdBNVFxY3A4M1F1ZE9oT1hqdHFiUUFKclRUMFUrN2FRNk1WY08vZE03T3pUSTJzN1ErWHpnZnVHdUhwd3ZVWEhXT1kwYVNSclB4NVdMaHVSV05tenVmUHJuekU5SlIxMXFtOGMwWUhuRkRReThJZ3Y5MHN4U2czOHFJWnB6aE41VHhuQ0c4S2JZRUxENEMvTU1Va292TGc4b1ZqZnhZUURFVm9YcER6clhUNkdNczJrUnBnWVh1a1pBeStzNlN5TmZwQm5jQ3JCVW5BU2lRR2t4NmlVcWQzd2FPNmNXNGFNUjc0L3grSnROcjNaQmJXL3k3cUQxME01dXQ3YmYrcThyZW95blZ0UDhFdDN6Smp1em5hMW9lZWMzTnRsWWk4MlN6TnppdmxQWGR2YnlrcFZDMFJDS2VmSkVzTHlKTDZmOG5Ja1pqb3ErSUJFTHlQazdEK2NmZnFmbG1STS9aRDhEdmsraXpMWkFkVFZGbDljSzJQNE1PVXhKNkF2VHRkZHhHNmNhVlpSWE5SWkRiNUZPOWlNZXhTTmRKeiswMVN4eXF4WUh4bzNLc0Z4WHVwYUdLaWdZQ0M0MHowam50WGUrVVhRNUZtSlluZHE1ZHhTUTZueXRYQjhPU2Q4VjVCOGNPSFh6bFZDanozQ2ZnSEpJdUJ6cmlPRFhqMURhRnM1TGNSSkhFenBVRmpKR1BwOUFLVkhVcGJPRDV3dkFRbmNUdE1mdzlXTDk0azh6T0RTNDFqK3lSRlhpZlVWY0hzY1NwdmhJNzVKSGE3bUg2Y2tRZTJ6bEN3UUJtZDBjMnJLQkN2ZUcrWDJqUXN3WWtSUmFVREZjL25KYU8zZlYrWlYrRFBxYnh1bDA3OE1JRFdvVk5HUXh1R1I1VnhVOERwd1pnUTVaV1lHSUd5ZEpZOHJKTHRZdlBmTDJSQXB3cGUzNC9KbUJKZlN2RlBjUUYwaXVrYnl6eklud2Jwb3FSUDN6RDlvU2lvWWRPVGdsVmppczJtQmt6YUxmWDFtSmRlbzVFd0hYMmR6dEtoRzZTOC9vYkdUVzhlN2tETm9Hd0Z5UWVKNnpaNzQrcHNadG5nZHhxRE9ITm5acDd1UDVvZ05BajBheGc5NkN1MEhYallCNHBRTzB4MHNqaE50c0NLMUdOUU41ZTJCN2F2dlhqOUNBZ3NaOG9HZ0UrWFFwa0RZK2J0QzhzR08xeUFuazRNWmVSTHNOblV2NmlrMEszTnR4TVJ1UlpnYSs2YTdINExoaStwdUh4bUYxd0w0UVJ4UE12UnZCbEwxNlFEU3BHVzRuSWJyeW5acmkyZjAxTDRwV0NlNkpHRjc2SnQ1aFBBcnlvSVNzQjczTkkxT1huSXdaL1Q1VG16MEF6T1d2ZHNzZzlVUFNQUWR2aGUvOHBGYmVyb3RURnV2enRuM2ZYaVM5ZWpKNVRqWmFiVHdQRUVBeWNiU0xYdWRNUXRtcTYwV0Y1blI1YjR5bVRSRjQ1NlplM0RVRlBoRzRuN1NqbWFrVk9VczRLSjg0YzkxSTd2Y0NYT3ZVZ2NVMDJIaG9NOFpRd2ROQzIrYThnUEV3dm5XZ1ptcWsyMXhzalRoMDdlNmhPZloyck5iZHM1VHIxdWZmN0cwTVdaRlFic2M3VktKUmk1NTlzZFI3R2ZTVDRuWWZaWExmaDE1UnVyRGRlZUVNWURmUVg5OS9oUWh5Z2JrU0lFampoNW1jc2dzbW41eTJnNXkwU25md0ZrM0Y1eE5PQ1BzWk9sM0NVbTcwRGROKzdER1VGbFpVMEgyYTJWMm0rbG16YysyOEJkcFNZcGxGeDdzR3BXNllOYkFZMFBvVTlFMnFhS0hrdVZjM0NUTndxSUlRNnJWengxdFU5UFdUVnRMVGZWZG5kN0pwa0xONkppMHhIU1FkM1NrbjZFYlh0T3JQT3pjWHdoSnNnOE5qQkl4MTVqVjVZMCs1MEdDU1JoZUpZbnpWdXhReUJQcVJtb1RSekN2S0V4aW5ybDVaeWF0VjlpTHpySXE1NXplN1FJOUdTVktmZVJoV1RiRk03dk5MOGJYRGdSQWVSNm5sRW9KUkd0Z1NzK0Z0Z3VHRUpIS0lzdGIySllHN0RQei8renFCT0hJZ05Ubm12MkZra1o5b3VxSlNhUG5ZSnNWVkZVdjJmS2pJcmRITS9oQ0dsQ1R2U3BoSkI4d0RncjdzRVJ2VkFTZFM4SVoxZzhDYm45V00xdHdnOE9DR0ZUUHkyaS9kNWVYYzhIOFVOQndheHg0MmlUdzhORGg2Q2VpNkZSNCtjSHRXVS9zS2d0TzJJTmdWU1RrQjJscHFsak12OFBXUzEyTE9ZcE85QnRiaVRwRFBLckhmRFFtYWkrREZLREgvSlJNU2xJdktuSmJXOGU0TCtlQTB4SVFmVDREMzJERER6aUZ5M0FDT0ptTGtEbGF3dUxZanQrdmJPaDl4UXhxMWJ2TXdmQ0xHREhwaVVJT1Z3VHJIUk5nZE1nazZKN2JHM3FlamlSVGlEa3dTeEx3Tnp6ZTNJZFlhQXlSWE1OL3hZeHc5YlNDSTRpOVc3b1oxcHJGOHQwN3FtSDhTZGpMVm84OXBlTWFIZnZlTEUzcitLdDVTeDlYTnBXeFhPeHJleTI2eDRWZmhMcys4WnJvQ2VTMHZwR24vaXM0ZEZsbVhzS3VJWm9qcmI3enJpQVZDMnd2QUJYbDJmK050NHl5RkVzSnNCNjQ5MU11NERyakJtWTRUSlYyN0VVMWFMYUF5Y3VYZCt6dmZDQnEvNGs1bnNLZXlRNCtFLzh4bmJ0MlZFcDJScmNHVi8rMmU4QTVjOUlGblY3bHltelYrejU2TThnNE1NOFpCVVoxY2EvRkM1S2d5djVic3hwWk1XRlNLTDNhYnNxaUZ0YVVCckVLRCtNcGUwWnc0LytscDNnYjN4MVlYaGt5bHhYTTl0b2dtdGFQUUlQeEt5RDFGTHBiL3FzSVFHclRpTDdyNkZsWk9xdGRES1NKM1V6TVRZK2Y4cmJEMDV4VHkvaURyeW1aV1NlWnpFVmMzOGJ0cHQ5K3Q1NVVOWFZuOHNpSEVxV0dndS9nL21QcHJJcWc3NGtlZ2JwVklGTDdDdnBvMitVRExqTlFMVlJQT3dvNDRvNjRWeU8zaGRqOGFBNEQvMnRiSWswMHJBOGpsQW5BdzRoYnlwWWdveElhVUQ0RU1GNnJTZit5dVBpRExJVEtyS281VVg4OWpJUys0bFBTVUJJK0lxdEk4MWlxL1RSc0FpMWNXWndqQlBIWFRqZG1YUFVESDZ5djlyY0RaM0pBR202aGlYUmZQMXBRMDg5R01qVzQ1ZTFaL2VmeW1WbGhIVm9ZY0hRamxLUWtwM1kyNU92d1pVMGVKM2VybFdMQXQ1WmFlcEZCMmZKOFlaMzZFL2NDaFh5N0IrTTBzYzV1V2R3U1kzZHdad01qWmgvMS9iaDdydGNvbFIvRmNpTCtXOEtiLzhFRTVHR3grOTJvdVkxeU03eHo0bzhrOHNlTzhUNGVGQk5KNDh6SVRHb3M4OFVpalFYL0NyQnk4T3JKbVR6Ykx0QmNBUDZqY1R0UVBkcURLYWcvaHppbFY2Ykl6cThvOGErN3dLMjFlMU16ckhsVk5RNlYxVVJkZGZDUWx1clV5MVlkeVlRUmcwVTZ4b2k1TU10SVc1cHQ2bnpjMTdKdTBrNEJkblNVNVdwc0MrK2oyQjBIUUFFZ1F0OGRtaTdpaW82TzY3NGtza29wdTVCSGNqU3dOcUY5NTU0aTBhVGZ5MnVkOHozZU9TaGlZdmdGNTN2ZGwweHB5cUNBcU9tN3FZN1JHZVF4YUdSaW4vVjVtUnJJNXZmbC9ZWHN0T2lmWi9PZWQ5anY4bnhuRXhOWnNxTUVzUStnamdxdWhhZGR5ZUdlNGhzcTJGSmtUdy9pT2w1elU1NnRMWDlZMmRkQWJwd1FBL0xESzNaTVJrZC83WUQvOVd3ajJqTUMxWEhNczV6RTN0a3l5OFdqK0hHQ1JXTURXdjdvaXpad1BHSDRSSDFBNFdqVXQ4ZCtMK2hWT1p4NFN0NENMeEZ1ajZmWVBpeUxLVGMyelljSW1GeDdwWExBekxCSndiOGoxUVp4NkZZSGpJUWFtVDFEVlN0OWNyUlU2T2wybm8reExUNndwdGhxQ3o5cVNUWTlBNWRocFRqL3c3aW1BNDEyWmRzbStLcXlNTXNmZ0w4eFFJcDZ5SVdNQkNTMFN2T2l4RTIrZUpwalBnNm9wNTV2UzZKeGd0SmpPKzhJb1EzaE9pVmtlV2h2SUI4c1djTU5zNmpjSmJuQ2tOVE85V3BIdzZpWEhDdTBwTGhRQ0NQY1JwZTZzM1gzd3FTL3I3cUhLWW12OGFwQ1VRTDI3Skd6VEhoYXJnallBSDRDM1luZnlLTkZzc3dtVmxxZzE3VUR6TGJrRlFsRGJVNmdaRFcxTXdNeDRwQ29wcGswbUIyMTgveW44RkN6TTJ5VjlXenByTS9DdmpCRXBUdTBwd25VaDJ4b1kzZnJjcGtyUDl0VFVUdjdzM1JSU01Jdk0zaGI2c05EUzZHcjVFSDhmK3VmUjB5dkFUMVA4blczVER5Y2xlby9OSXFuU280TkN3Nnh3ZFFXK0NHemRuYzZSeENpcVJrTjEvUXl2aER4d1NhV1gwQm54M1pmZlNBdGNpaThhRlNoSThsU3ZuU0tOcHlHK0EySTJXbzNJVVJwdFlKUnQ3ZmhFdmI5cGdCQ21ob3JsWUlWcmNOVVJZTHg3RFAxRVM0cTdKRE1JQmQ1cjNGWEJ2cXNIWXJJWHhaa0JsWkxEV0xKRUlITWFuaFF3N0ZEUThIZHNrdkFOQXNwM29OamFYdVB3NWcyY1djNFF1M3c2WWhuTEhyeUJ1SmRvc29XVjMzNGVqckRMV3NSLzFrMmRqMnJ3aDIwYWc2N0xvNkcxSkRsYythS25FUmlVaHRLWG93TVFNWkJZOTF2ckZ4c2xGWjVOaWhrV0dnKzN0dzYyd1pYUE9FaFlxNVpEdmZZRHhOeFBIb0ZOc2E1U2UvME42SUFJR0gyN0IzTktGWFV4d2xsdEtwK1FUMUlUSEFYdnpQbVFnY0FNWWw4bkpENlh4SWlFbVpNejhEYVlISG5ZVXNJTzZ0eHcyWUxzWGVJM3NqWUgyR0FxSGVRUHNzNG1OUlZlckxEQTdZRytDYzU3MmtHdEJCdWtxek5EMVRxa29IcHRsVGozdjZ6Q2dQZ0V2MjNWQVZmSVVVOWViTGpIMVlsSkFkVnRGellEVkpETTdPT2NiOEdNU2pycDNTSkVsaDFHeHY2bU1iM0VKT0VYUlZmckphaE1CS1QyMkhWdTV0NFZsL2JEN1N0NDNkK3NnNXo2dUNyb2RxVTVnV2txWmxVQXRTdXptbzN5MFp1QXVlQjdubXVZb3Z5bllpQ2xiWmQ3L1NUVE5neks2U1BXZ1pRWGdYK21jMktiY3Q2QUZZdTE5bWxUdGUza0Q2T1JUZ1JtYUVVZUxPanFlWHdRa0U3aFNneFRIdFgrejUrODJRQWZKSEVwOFY3bFkzbnUwMjFURHlBMllmc21NaFM3ckdHRTl2b05ERi9GbldTSWZFQXloVVF5RUlORDR4K3AzWTFhMCsyN29sZHgvUXZBUmZhSUh6UHQyRXRvdGZITWJ2b29jWE83SDRRMHhPZ3VJTVJJbGVFRU93MFVJQ0pSVUllakJmR2tYaE80MllscVNKRUxVOVEvUDFBblY2YS9nUnRLRUxmN2g3VVNqK3VvNENIVGtOSHZWR1U3dUtYT2FEQXZ1TjQ3OFFDaVFnaVQrU2NlVzFEZ2w4d0w5cTNOUFg2TjgxdDNHaGVTSWh0QjlVSjIwclNtTWtqUFlNTG4xem5PcTRkbFd3bUFFNG13NGs4QlZzVmxJNXNrbTczNlhKZlhyUE9aS3lRcjFGMjRhV1ZXOGhuclpveHlpd1JYNmZGU1RDalhuYmU4MkY3cEZzaW9HNXE5Z1pSNmt6ZzROSDNsMlFlZXBXS1dsb1ZPM3BpdUdVa1dqaUZsVzRUcUVDMytseTV5NEtTcitQcStrUmQrd0VncHkwMkdLL001ZlJ3eHU2TjdPbmV0NUQ4UzNMbTlrc1VUNm5TZ1duWTBEcFZpRjF3Q3lpTC93cDExOEJTcHArdHNpRFoyWDVwbU93aTBJckMrZzYvSHdrTCs1OXdJZjJLTmlsTk5rSHRpd1hCcm51cXhVZmlHdGVFZWVkZExBbTJvdkxaVDZTZEY0SFVKYTZId2s3M1hJcFBVR3I0alliaWwwNmZhTFRHK3dERXQrUGdzTnhrZGU5WWFSRWZRT2ErdjluWUNaQTh0NFF0WU4xaDNWMXEwbENZSFBraHY1Q2hUUG43d0EvQ0lNc3dlQ3VXYmZjejNpK3JFSzVOZlJrTWs0aEVCbE9LcEZkZys2VTRadkFzMGIySTNGakIwSittZFNWOWxIVzZ6dEgwZ1I2eGZoMEFkSDBnZi9WOVlXRTNkSGlaaGk0SzNaMkdoTU5WVFQvVGFmQTl4cEhHSEN3M2laUG9XNzhqT3F1WWVjU0R6Z0NXeXppdjVNNThEdEQ1eXVCYWIzWkdIcWU1MkpIYUlDS2pIejg5TmxCcDBjVUVMN3YwMUNIMENsYUkra1R5dWZmcWtQWmNTYjJRTlRTamVqWUYvOUJFZi9jUkY4ajNlTHBTV2RVRW1hZTZ1d3hWVGU1clExbDBCRDZlWjgrOERqdGVYVVRDSW9BdjBUdVYvUEs2NTJoUG9SL2pjOHV2dFdVUnVFK2FsaGdMbnR4T3V3V3pPSVhWV2Z4N2hDQ3BZUHR3TVpMZjBaQmRQVE9FZjd4QzFBbnVxejJtWUkxTEt2b2V4dG9kWHhkaThWM3BCVjJoN2JnTEFhYlRiY3hpZ3ltVVk0Y3M4NmJYTXE0ZW9RWG1rMTlOVllOUFpBTjBXbG02bXp4SGQ2UHhPNS9GcEl6NFpjL0s5eWFreTcrQkh6T0FVeHlJL2ptYjJGUXRGN3VqK2F3d3A2ME9MaUJ2ZTBhaFlvRGJzdWVsNDN3SmZhWHN6cC9ubDJKQlNQbDlkSmFWckpTOEw2L1A4MWxlSGVqbjZpTU5vWDlhK2c5K0pSWGRpeTVNeCtZTzR6NkVzdy9lRkdkRzNLQTZUazBBdmRHSFNpdG9oSVZZSnRxNTZ3R014bnduNWRBWVBoT2xqL0xheFVwMGpqRkx2NERkVkhzSEZqc0VWcDNpVFY4RTdqUHAvQ3FlZFFuMENwOVQrUjhOdG83OEg2cmw2bDFJV0R0bktSUlpBeGdvQXYrZjRjQ0RneDdLNlE0ZkR4MHRyTEN1ZFVSaGVWZW5UT0pKbTJvcWRSK0RmSGhpeWphUm1udmZma1NXWncxQnhaUlhFaFI0NUF5QkpJSDhkaXpBUHpkRS9kdkUxSWc0SDN3NmFHdm03K1VOOFZ1dStUNDdwU0ZJUm51dFRHRnp1MllMd3h4VkhjQUV6b2d1OGxzVmpWcnU3VGE5OHdUdFpTWHR6RGVIZUNMMlp4WlgyM0Y2NW5CZzg3d0NSejNxdnYzMk1WajF3Zk80VytYRVlmZ1VKTGZvbGpuNzBZMWZINHpZTnBCLzBldHgwdXdVaEJBb3FJUm1DSDlCb015RDdDZVFBOEx5TzVpQlNmNW5hMkxBaTR6dlVwVzBxVUgxUWM5SE5XU1BVS1cwdGVLVXBINWV1Mk0xMlJSM0hhYlBKZnBUV1l6WnJHNEFneVQ4OC9mNVE2R1NSSFQ2U3lSUUg4OStxaGl1OGhYNGh2bXhacTNaRWIwRVY4NkwwRUxYV1Y1VUU1NE1wdXJhY3R4TStEbEVmV3NjTUZoaHN4ZnMwZzdmcWtDbko2UVdrRHhqa3hBa3h5RERhL0xUVUQwcDB1eFFWSXkwRzBRdG1VbUpIbklXRVFjSkZoM1hXcmMxaXgyclphY2lxbXhXOHRLTEUvRXBmY29wdzViTE52am5rd1lETVJ4Nk8xcnVIZFdSd0l3TVE4Vmk2SGkrajJaa3lCUjBIWWpTR0pRdktKb2JNTU90c2hRSElvc1pQcWgyV01oaGpUVUZjYitzejVwK09FWGhFZGVHdXB1eVRmRGdieE9JZWVNUWZKRVE1S2dLdzdHZUU5SmMzdVJ1a0d3MEZwRk1qNmFnaExBKy9hMStFU1pEZWlYdGQxVGlVaGNvU2dTR0I2SlZPUjd6QUpMczUrT0JWdVZvcWVQSEoyQ1lKUmpKeGN4V0EvYUdJak8zMGNEekQ5WHJubmlqQjF0TjN5UEgwWGtjNCtSS1ptQlBTWTE1dVMvVjdVVVd1N2dsSjI4NEFIbVJxTTVTSFJ3VkdCaHJUTjIvVGlnM0tVTVNqRE5JVkY1SXVhUHFaRVFpNTlEY0dlenlEd3pBenM5QjFFQi9pRG43R2d0cVZscmxZbU90Q2xheG1DSStwazJQaXh6WU1yWkhleEVxUndZMVNYb3FBTFhOemthVFRac2JXb1gxV1JjVHN1bFhpaC9JWEZwUFl2eEVhNkFGWmZ4NHhsTk16Zk9JdVVSY2J1KzZxdmhhU2hmaCtYdTZTa3ErVmFER05hb3VLcHhZT2I2QitBKzFUZUlJRzdMM01SKzVIdFVURFIwZ2JjTTB1S1o1NFBia3hBRzViaHNINm5IbVErMUc3RWZwZG8xbDVjSjdJSWNIaDNuR0pXc1lsM1F2dlhaYWhKdlB4NVU2Sm1MUXZvUURKY0ViclFaNTIrQzNSRnIxMXBaZC9NVVVSdjN0UWgxMi90UEIraHdyMXNtTm9CVWY5bE1TYjhBQmh1MDZ5dU5mdWIrUzdNN0RiSUhyQlJtL2ZFQmZNZWZtVllVbmdnSnAzeXVZYnFIZ2xRYjZDUVZtSHNlanFhWjlNVHowYXJDRXJBdXF5R2srVWYycmo4UUFSWmk1cUN3bnRDUDBmajBLM1FveEpsZ2ZwYnRrWkdIRlRTdENBR0JLS1kzOG5sK0pLOU9RRkZ6UUxnU0toUExORG1ySGkvWnNIR2JJZ2RTendDL1pXOXU2aW5vN3NuNElVUnUyQUNUOGlGVjhDanBHNnQ5dHlDdk5TNTFjdTlTY1FzaW45K1ZSa2pLZlcwQ09pblhOVWpuNXQ5eG8zOFhRZURjcnZqampMUEFrRUlhU1RRazkrSUVIN2NSRXdFNkhsYi9qdjlTT2ZkaWtmclFsSlpxQTkxeDJEWDNjWjU5cnhZbUJiUGVHS3NaTkZJT3ExU3psSnJCU1Jid3BHYm5UT0lxM2pZemhwNERjSklibDVremRqcFprQ0lIVDh2VnhYZ1lFYnBwYUVjSmJzY1BucVZGWUNNd20xUDRzbGI1MkxTN2JUN1I4REFDVUptYi81bG9xUVBUVVZwWkNrQ2lOalVCcEpNeE50NFpxZDQ0eWwvMWxibllDcnpZR1JPc0RmZS9OcnU5QTJ6TjN0eXhCZmhvZDNRNzlTcytMOG5MWnFaZ3MwSzBxNUh0dUZqQVUyWVArdkFMRmt3RytpYXV1bndBTjR6cjI3U1owakE3dm4xclIwM28vVHU2Y1FvTDFPWHFwVld5dHFtN08wMEZrNFhvYi9zdzZtQ0lYUzRNMHBTc2NaWWw1MDFOR0ZibDJtM1VGZlhzUHdncVRiWkhGNlhCMEdqdVJUMElmTDFWZ2I0ZWVLOENnM3JPVnNtd3JoUnYzVlp4c3lHaVp0eFlYRFZxYWY0VGZEb1JSR1RnZkk3eFIxUGQ3aG0wYmRUdXlVUWZ1Y2hlbHlLdlpIY1ZHS2NMVDUvNW56NVVIMlh4L0ppdU5KOE5SMUxUZ1FxWXlnaDFsMTVEUVE3eStDcG1BZ0EzWGVIS29Tc1Z0R1J3YWh4SEJ1VVAvd0FrNHVHYVhYRGI2SzMyUk50K3BJbVV1S0ZVWVlyQkMySXc0eXFHTm9JZDJxQmdTWGpXWko0TVhOVFI0dk85NUlWbkMvYWdLRkNVdjlvMGFmbno4WlFuQ2ZscUlRa1VBcFRNb0VBOElwVnBUNHlhbS9aRy9rWHJ2VGNxMWt4TTFGUHZ2VVEzaFdLYzQ1TzQwUVozRlpXZ2NzVzFUdi9BK0cvTDZqZ2FmWGVCcVIyaEFoZ1RpbE9kWUx0VFB3ZWtvaWNwTFo3aWZjZ1FpL2ZjZEFmN1kxQjEvaE1lSXM4UG9YTi9zNS9zVkJUc1U4QmNiVzgwemg1MkpTOVA5LzVCNnAyaCsybm5qWU9zNlZVeUpPSlFwRmN3Q2wwVFVsUEo1bzJmNEZjRHpQQXFqYkF3Y3AxakUxR21uZVkxSW5VbnFBWEJjOTZsQUZqSFB0a0hSeW1HeWdsakZoMjFZblMzY0V0MFlEOUtzdFhVYm1kTGZGSk5ZUHM0VS80cVlueHRIUzR3ajJRWSsvSzVXbzN6Uzh3bEU4Ky93bXduT3lMdk5ISS96aXJxK0l6RitSK1A5RmtPSmFEZk9qVDhzTlFBeGhVbVZsS0R2SU5KMTMvRk13OERzci9NOFB2cFFQemRRNldvWkxyVDJyRE9UcFY3b3dtYUladEg2UGtJTXZZa3lXV1hObzFMc0hCaEh0dzVjaUthSXFZYXlKcUY3ZTdPRDB2N2pvaW52bTYvcHoxdVI0ZFNKcCtXeDZzZk5sNk1TcTk4VmlBek9oTFpNY2RBOWNldmlRTWNkMDdnT1IrSDVYVmZaZjZyYWU1dGRBaVUvVkN3MXYvWUs1amF4VHdpa2o2OTlZa1BzZXpSMVdtNUM1c3NmNmhXSktUTDBiWW1yM3BHZ1Z4SnBLd0IycUIrcTVxd2VaRVB5K2J5YW9JWkVKNDBocXdlYkZObkRMS3M5bzk1dkpwL3F0TU5aSFdiaHVhWTVjdEREd3ZZZjVVNVptY3UvaFdmS1AvQ3UxbkIrelRLRHhWVUNRWGZ5b3g0R0YvQmVvVDlaWXNncU5tVzBkQmtyUTUrVXYyTEozc09Pd1pmV0xuclB5Q0l0OUszOGE3V05QclRpcnFwbkRIeUYxWmE4RmRUN1lJc0FQU3U4YVl1VU1vOWszY05xWWRPRVh0djlHc1pacVhKZTBJK2Z3UmpjL1FVTVp0N3lhOW9DTzdFcmVMUjdDWEhRemdqOUlGWEFJZDNNeTJjL3pLUWdDUDhkSTZubnNGN3NNYkI3Z09BT295bDFVSUR6VGFXZHp2aHIxU2Nma09JZEpSQTRzdU9Vc1k5N1B4NW1sdEdxcEsrSEN2UDQwVjJPRGxMUWFrU240MFByZVVmaUFDa1loQUlXaXBqZGZxUGJpOFRUL0VxNEtkRUo5RkNKMnRxRTR5dENWMXFmZVdUVzZEbERFbUNaY1FtUVJiclBGUlVaYzRTakhKYmw5N3hKait0dUI1Y1FhbEdNTWpBT3BQeFozdjMyK1pCZEN5UVQxMXpYWDg1aTZYQk9kY1d6UDZoWWVRazhTQWI3U1dqUVFMbVVXeG9nQytHOFNNTHZKTjNJUWdlUFkxY2R5dG03Q1Rib05hWGxZL1N3NTRKeE1rTDZhVzZIQkduYTd3UGJyN2xRVEl3cmNURDg0NzdsR0Uya2l6Z2hEOVo3bVlySk1DdDFWckRXK3JKdDlvMEJkd3EwNTJ2L3BqT3J0b3NwR3poVGl4aTY0RFRqd0FRdjZjYnROKzF6NENDekVBSjdJdHlMVWRtL2pPbi9BaWVtTTVqRWdHRCtzbjF6M0JEUTZnbmxsSldNYVhnT3oxSmFNTHIwUHk4a0E3T0FNK3k4L3ZOdWRFcm1xcStCenNqalRRNzlud0VXSGVtQVZsSmx2c1p3a09IZnlWZExDbU1MUFN4elBXZWs3amNvWWVINnhvY2N5Wm9yNThTUjRZVlo0ZG45ZEdqeWw0VkhPT0xHcFhjRFRxbGlWcnptQWY4RWJnUThNL0tZem16MFFhOU1uWjJ1TWtoNU1JQksrNWFqMmlPd090TjZvc3FiUGlTVkxudkNONG9wUjRWR3VTTjRPMEFxY1J6RCtqaWVveGlyOHE4YXhTbUhOU1JDVjJnZEoxRzJRU2ZkWDJ6dE9uQ0p3L3BXZkFLWGVzN2JSVk5ZNmt0MnpmUzA0cjFXU2FDSkhvRjd3YThwODd0YnJySjdGdGx6dFVodGlWYUNCTlc2SDl3Y2hCNnE5M1dHZlpqdU1zRWhlV09MMHdUM1pEOXpmM1YrWGVyYmJOdCtLVHdqRU5MUW1sUVlWNnpiK2dBM3NtczdxWEtidS9IWjZwVW5ManNHNmkyQy9LQklQNWsxblpoWCs3cXlra2tPTkRSKzFXRFZmcW52OWZLNjFaaGYxRElnQ2ZON0o1S2JLUGJkLytVK3kyQkpHQWZIZEZ3NEg3aXA1eUJncDVsU0xTMWlQU1RFamdMMURTNEE2eHliMU9jYXhCRWxJOHJBb1NvVlNEWW04QTUzQWE0K1JZK1lIU1NaaEtLdFJNOCtXTVNYa2RyZHVFbjhGT0pZVFQ0bXFpYlJWdjZnVVhXV3VleXdQWXdzbnEweWJUY1lwbmdxaGJ1RDFuVWNzSEUxT2s2alEzeWswSHdjbmJNMVFwT0lIbkkxQkxKc2ZpdERkNEdIcDZJdTMwZW8rbVM0MGZQc0wvZHo1SnliZ1dRaFoyT2pzUUdJRklFSVNXcCtXZXBuVEl2clBqdzYxeDdHcVp0V3hvYWI2MUw5OHVxUGFUalBzTGxmSFNXaFBUQ2dkUnFWVE1va2MxYVJCdXkvYml6L3kyVFRXUWlwOUZMd1NxOVRYcXBseDhPbFBPRkU0aDJSbDNYSjdRRVY5Q2dSWDAwSjlzcXVVNUJqckRSckQvVzV1eFNpanFTQ0tlVzlzdmxjbnM1VEdJLzJJVWhXU21oWkxGN3M1TmpxWTJHYlYrYzltSFZ2UXAxWWl4dENCLzl1R0x2cThFYW5xbnJQTlo0SmVJSmNTZC94eVlBSDl5VTU3VTlZdFNOeUF2RnU1ejhZckZiZVdJVE1LSi9kK3M2UkxrTXRkR0I3MHF1R0t6TkpGKzlCOXZMcmRHMHE0NGNnYlBsdmhQWXZTVHlMMEl5a1IyUloySEpyVXlybldic1F2VDdHLzBmM0xCUzgzcyt0R3ZPM2VJQlNRQ3crMTQ2YnF3eE5PT21OejY5bzFQTk55bThzRDZWaHl2RlJNcjBHQXJWUDJZZEo1eDlyWnhPOURJcnR3SlJ6RmNraFgxY3RiUno1MEh2UllPdkppQXpoUHRFaGhlTlJXOUREakRPTUVuaWJtVENtVmwwVUo5UUFxendpUTM1eWVUTk9VenpJakNsZ1NKUDBaTDFwODBJVFVkSUdXVDI0WkVrc2JqR2hiL1BPT3J6a1QvTHp1cG4rSE5ydnFSZXFaUUt1V0I1eXMzcTVieGFSMDIxODlTeEMveEpkR3U3djl5OXdpdzV3T3ZJVHpEbE9NQ1hxOGk5N3A4SktEQjVCejFYTTFZU3U2WWlxcEtqRURMZndCSHZUM3o3NjYwanJDazV1dnlJNW5GV05McjA4ZDhSYzIxOWdXMDdsZ254VlFHSVhHTXFjZGdmMEM4cHRZTXcxMEVBblJ6ME9IVzh2Z1lveHBBVFd3L29CT085Nm5yYUpNS040R01adStiNlM5c2QvZ0d5S0Y0aUtRS0oweGxRdy9idDVId296dW45V0FXeHZUNU0xS01GMXViY1R2N1JvelZHMWhabFNtblAvVzluRDFNRlpwSi9xdDFrMlNLT1ZWRFVLbi9UeWhCaFBseFJERmVDYWhJSjRXaEUwYmFFMzJxN1dPZTZTYVpYU20rbXpZbzY0K3Y0WWtuU1MrMXN2aXhaUGVlRWxDODQ4bzZpOU5PYlNZVlpaZUxKTG1rRmNGWDdCTWJGSzMvSGhMb2FBY1Z0UzZwZ2xVVU5YMjRrSE9hcHg0RURFYjd6eXlJQjBQWUtjU3liWDY3VDBEdnc3VnJ2WlZNM0RtcnZhd3Z2OU1ROVJka2xGRytTR1dIRm45c0pjN1Rpb0UzZnVrVFVyaUtWM2RaSTljazRiNW5MU0VhY1ZSQ2dMeU9xdlRjckJDeHdBcjBISXJ5aVl1NTVjT2tZckI4LzJFSFpGRHRhQUxxYUloWkh0NXQvQVVpQnM5QkZld2hmc1lTU2lkUHJXbHZRbmdKSlVrVnNQNnJCcTFRM2ovU3ZjMjVmTTkxLzBFbzgrME42c2VlVTFjZmE2Qk0yWDJBWHdIQmtkS1paRFpSK1lDaElYZHJtKzdLazVLTGtUUGtTcjArOTZTZS92SmtHdVFTWjNlN01pZWFOYXdueGF0VGRlSXZhWHZkcy9GSzRsNWhuckZCdWVEYm53TVpCV2loY0tHdGcwQVlHSUx1czNrUU8xWDJoemxpSFl4ZUFlT1Uzc0FuUWdkeDYwVnZmL0I2ZnFLcW4rUEZqYXVPVnNXWGNyWFVaT1JYTjNFSVJLOEs4M1BEVC9IaHdnS0RESjRmYVYxSkorclhxTmZJQ2FvQW9FbHBqdzhHbFpHK2phS2xIb24vZHUrSmRhcC9pQmRhbisyZ3BwSFJDSE1qK1dhQ1p0dlYyQVVjZjZsUTVVVGNvQ1djb2lLN0VrT2ZHdHFOR1Y4emhlaGM1L3dEQitmZDgydWVZNHJjc01id2phWTR0YnhoaHlSRlFsd2VhU1BjNUZQam9kTzNTcUloa0w2OUw4RVBNWHMyS1ZocmRsRktFZlRSRlk0eHBJcS9PVURsYm9kZDUrT1VVcTRjbElkV21YYklHSktIN0RUdHF5T1JSRXByUStyWDVSZjU3WWFrcURobS9sdy9xZ0ZNaDk5dWMvNDFlMEpldklvalJBSy9uMUYwOHpCOTlkYjFjaXpYQU5tdnFseGxsV2xsMGFJTmFGN2VzVUlZVlZCQTJiSFo2MG14OEtCYTVrNERkNXpxRUdSaVNoN2VDZlRtQTYrNHArV1BtZlBOZWNZQnFSZHRabExDSEc5WVpEWjQ3dDhGUlJlOEQ5STM5S3hRVjlUMU5rZGtaeFhROWp1U0hiR25vdC9IVHpPcitzYkZVRFN5TjBmT1FDS2pBOTZUOThJUHVHdXNMRHZsM1V1TUhRK2tPdjh1YSsvKzBMYWJsbkRKcTF3SGpOa0ZnTUlSblJQUzJScU15TklRZ2NKTlk2S1lzS2dobkVTVjFMQzRSQkJNb2xBY1dYODU3QzMxb2FUUHhxczVDTkIrZktiK2NnTUJTRXNEYVJjUjFsRURDRVZ3RFBSUlJpeVhMcUN6MW1vT0VncjRhVzlhd2VCOU1mSW03dms3WTd3NjJSTkYzY1QxTDF2TEZKSFlnQmtKb092QzA3NGI0OGpncUJqMmtqVGd0bDN3c05LOGlpUXFzYUM2MUV0M2JwazRBOEozcFcxT054TTd0d0kydnFya1lQcTdXZ0M1RGU1d251aVVTTDkyT1ZkbTZ3R2RsVDRIMjdGZytISjZuK00yNkhuQlF4S2FOOXdFSG9yYmdZd0hxcUxzM3g2SjBRbEhGWk9CR1hyRE1kUHJURTlxdVA3ZzRhRHRvTmltWllUMkpQM2pyRzJXZHhRdWNGWThpckpkR3ZRRW95MjJKdmtqeGpLZkJYamRQOUFuZkkrNTNWb1ZKWjNZb1FEZ0pVQk15RjM1dHZqZW1qWkhIWEhkV3RSMWU1allHakZsNDQ2WDZVWC9JL2FidFRjNVp4emhSeXRlRzVkYkQ2dmcyc0FWeTZ1YkN0NWxKc2NNM0o3WnJsVUx4QkdnMG01NW16bFhHRE5iOStocWN4Mm1xb0FQRlpjK3Z5Z0dFeTI4UjRiYnJBTzFvNjNqTHVxMjJESjcxZ0RRbnV6TUNhQi9xbjhFZW1tUU55L2ZXTTRGdWpqMzI5S2FzQmozamFyY0gxeTJCaGFIeFg5L0RwcHZQKzVrRGJ4dmVCamV0WmZ1MmRVMW9DSnIwbGppVy9QUGNCbkR3YkdSZVFxUGRQTjE3TlJaRXVMd0ZwcFJkZWNhUkEvQ1VkRlRCVnV4M04vSERLRWdRaEozVUxnSUtQNHFkVjNLZVlsY0tJV0l0WXpYNExqYnBJcnQ2RWtFSjJVODl0K3lQa0c2eEdKT3BwWS8vRC9DRDNWTHVHT3RGdFZYZnVQeURjV2NtOFpmbDFkcmoydHh3TUdJelJPMjBWK05COVQ3dVN6WVRuWWFvSUhLV3MwY0dRckJaY2ZWWXBmWVVIQ1hJRm4rUXF4eWZnd24yRldxVWkxWm5JaDlNN1NkRE5pREl1bnFZcmEycE5LdGh2WjBBSUpJdFFzR2cyRmZRU1BnUTdtNU1mbmtyM0NTeEZOVHFQQzdnWlhTUEVjN0ZVLzhsdzh1UGNIRFRjSW05Zm9jeVpzMEFlak1LNnVWRm45ZUYwaXZNbS83NWNDbjdJQ0JnVE1ITC9oWFV2RTh6ejNXOGo0ektOdHJ1Ni9BaEFqbktxaDdWRjVZLzlrQUFRQWFBRUFBQVNNQVFBQVBBUVFqQWdBQUFBQUJFUUg0UUFBQ0FBa0NBUUVLQWdBREFCbFVhR2x6SUdseklHOW1JRVpwYm1kbGNpQW9OQ2s9PC9CREI+CiAgICA8L0JJUj4KICAgIDxCSVI+CiAgICAgICAgPFZlcnNpb24+CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvVmVyc2lvbj4KICAgICAgICA8Q0JFRkZWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I+MTwvTWFqb3I+CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L0NCRUZGVmVyc2lvbj4KICAgICAgICA8QklSSW5mbz4KICAgICAgICAgICAgPEludGVncml0eT5mYWxzZTwvSW50ZWdyaXR5PgogICAgICAgIDwvQklSSW5mbz4KICAgICAgICA8QkRCSW5mbz4KICAgICAgICAgICAgPEZvcm1hdD4KICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24+TW9zaXA8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgIDxUeXBlPjc8L1R5cGU+CiAgICAgICAgICAgIDwvRm9ybWF0PgogICAgICAgICAgICA8Q3JlYXRpb25EYXRlPjIwMjAtMDEtMDdUMDI6Mzg6NTIuNjcxWjwvQ3JlYXRpb25EYXRlPgogICAgICAgICAgICA8VHlwZT5GaW5nZXI8L1R5cGU+CiAgICAgICAgICAgIDxTdWJ0eXBlPlJpZ2h0IE1pZGRsZUZpbmdlcjwvU3VidHlwZT4KICAgICAgICAgICAgPExldmVsPlJhdzwvTGV2ZWw+CiAgICAgICAgICAgIDxQdXJwb3NlPkVucm9sbDwvUHVycG9zZT4KICAgICAgICAgICAgPFF1YWxpdHk+CiAgICAgICAgICAgICAgICA8QWxnb3JpdGhtPgogICAgICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24+SE1BQzwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPlNIQS0yNTY8L1R5cGU+CiAgICAgICAgICAgICAgICA8L0FsZ29yaXRobT4KICAgICAgICAgICAgICAgIDxTY29yZT43ODwvU2NvcmU+CiAgICAgICAgICAgIDwvUXVhbGl0eT4KICAgICAgICA8L0JEQkluZm8+CiAgICAgICAgPEJEQj5Sa2xTQURBeU1BQUFBUG5GQUFFQkFRQUErYlVINWd3Y0RDQXNBQ1FBQUFBQUFBRXdBRUFBRHdJQVFBSUFRQUlEQUFFQjlBSDBBZlFCOUFnRkhRRHVBV1VBQVBsRUFBQUFER3BRSUNBTkNvY0tBQUFBRkdaMGVYQnFjRElnQUFBQUFHcHdNaUFBQUFCSGFuQXlhQUFBQUJacGFHUnlBQUFCWlFBQUFPNEFBUWNIQUFBQUFBQVBZMjlzY2dFQUFBQUFBQkVBQUFBYWNtVnpJQUFBQUJKeVpYTmptY29BQVpuS0FBRUFBQUFBQUFCcWNESmovMC8vVVFBcEFBQUFBQUR1QUFBQlpRQUFBQUFBQUFBQUFBQUE3Z0FBQVdVQUFBQUFBQUFBQUFBQkJ3RUIvMlFBSXdBQlEzSmxZWFJ2Y2pvZ1NtRnpVR1Z5SUZabGNuTnBiMjRnTVM0NU1EQXVNZjlrQUJBQUFVVnVZMGxFT2tkU1FsUXdNZjlTQUF3QUFnQUpBQVVFQkFBQi8xd0FFMEJBU0VoUVNFaFFTRWhRU0VoUVNFaFEvNUFBQ2dBQUFBRDRUQUFCLzVQZkd4QUpWT2QzeHpjWWp1MXc2NVZGaEtwbnZQRGYwMVYxVmdOWitSUG1ZOEYzSS9wT3hrbjlLK0dyTXF6VWRCUGZKb0JvZ0lDQThZQkhIK1FEdzhHRWI3UmJQeXFBOGFCcnpZSlpSN01hS3lIZ3djNU1nUHdKZ0QyckgwaWU4c0lpVlFOSFZoMDFTdFI2MUUraFVpaysxUkVFM1lrRVdKRExUa1ZYbVA5MVNhT3lnWGFBdzFDT1FiQ0lvRm12bUs1VWFSWlJBRVcraUc5S2pBdytYMjN3N0U4ZVZJVXJPcHlRTVVEOFNxL1pKdVM5dU9VNGNhNnVNYXErbEZwcGFLNlFoa0cxT3c3emJFdWpBSEhrSXFZYTM4U0lrQlZzWThzYVZGMnhNb0Q5c0J2NTRFeDV1QzNUK3BQMUJ2eGt2d25mbVVDK1JqbG9SdDJ6Z1Znbmx1Sy9mUFdlZUI1S2JUV0JQQXdWQjNzTFMrRUZ3RlYxakU3UHNBSmUvYmwxTFBiSUhPc3hBSHgySnl2S2dsZGdJc3djczNUL1JqLzZpMkQreXBFMTJISWZyaTJ1Sk9DdVBLNlRVc1I4eHRLdllJUGh2RzFDQUxUYlFiQURYRTZQa1dnQVNMQklyNWVUYnI3TjFpK0VwV3ZPVklERm96elVpSC9zOENsL1BMaS95LzI5V2lxRitML2RyN1Fwb3pscDFMYW9oZmYvRGxIbi94ZmplamlwcnVqak1SeEtMdGlubjFESmtNam8vSDVXaFBqeDB2RXV0WXFBL0VXTkFMa1RuU2dCakxKdlMxQ2prYjZjb3B4blZ3RG0vVTVVQWVDN090WEdUSzhyZUhGemV1V2dSUFRjczFHQ2NiNExyS28wRllERmR5NG1qR1lWMldSVGQrS2tFRzhJdFBYNWlQM1RqZGdwaEcwRWdOUTJwcVFIV2lSVkRBVVhIVTFUclY5MXA1dUhXQjF2aW1DQzVhZUpiZ1BCWXYzY1VrMXdpV1NHL01DTHVieGFTTUpQbjN0YzNHWWpnNVNpdlB1RUtWdnNROVZMTVlOMUFTT09JTEFJMW10a25uYk5jaDBIYlBOSzI3UDd0OXJCdjF2MEdoc1EzYlB5ejN2N2VqMnplZWVvbytFOEc0TkFVM2Q2MEtlUGdmR3p3eVNsVXk0NjBMaWtjQzV6Y0NneG9JV0RBRWkrdlgzbTBCOHFscS9iamNUQ1RBZ2FveEhROEErcGlCZ0h4MzFwV2RGbnB5ZWFmOXBhTmtZV29ZcVRpMzV6Sko2Qno2c1J6d1RnWnlFOFVIcllYeXBRa201RWo5QTJmNG44cGZmSVRYem1NTGRjb2ViMFo3UzJ5NnRmNllsaTMxSnpnMFN4MWpSRkVSdkNJT0ZWTnROY21EaWFqTGczTG1TcndXOHJXMUxsOEp6WXkwbHlsSzg5a0swQWluVGtxaG5ud2Fyb0lyZzVpY2Z2VWQzQmFtZVJ6ZjRRWDhNaHM1bW56d2xnc0xlWVZjbjRUWTJDNzgyVHRpanZySXVoT1NXK1FlcXpkQUJTdjQwZGVXZ3FFQmVJTk0vaHJhZ2RXM1VteXc4dmNsVkZDOGlkWnZaSGM5VDluNFBLdDJOTURBamxFZldRS1pTbENZNWRTN242VkgxdExUc0hZRGFQUW5PUzVhclRJOUo1czk3WDdWaFhSeWZwY3hHOUc5ODZiTVdrcHdkVTdSN1N4YVI2YnJ0eHliMmdsSk1qNkNHeWo1S3R5dTRyVGdoQzB1UlRwQ0NreGY1RkZSNVdQa1VTbHB2aTVJZ0pKaUFrQllZYk1DZkJhWW51VENmM0k5SExZNUtVV1I4cTlHeTY4dTJVMzZVdW4zaUczNzRMU3ZvNlR6Q2UyMmp5aTV2Rm1HRVN2ajFsNDFhc3lra2NTaVNjcTdqZ1FMSjdlK0ZtekFoL05ENnpiSzdKd3UrSEVGZVE1aGxyUnBxUVEzLzhwN0Jhc2tFeG5Dc28reWI0SitwMnVmdVJVVlRjdE84cVhjc1o4ZUdFblZjVE11TmpCOHh3aFlGQ0h4aTlWcjdxL29vdndOdDRmVlZLYVk0VExkbUl2UXRHbXZqMlB4SXdRc2c3bElvdlMzRnpqMVl4bERQNmhOcXBBSUE3b3VmME1kc0ppR2l3UzJ3Qk9xRTAxT2VDS3lGSHVpS1gva3l2RFlsNVVjQXM0N2xsT0ZHRXBZNm9iWlN2QVQ5WnNTRCtRS20zekEwUVhqdUU0S3liWVhUVmZYQUVRdEF2Uk1pQ2dJRStZaWtFVEh1U2NDZUYrREpQeTdZQW9od2JIcDc1eEFBU3lkVTE5YmtqbW56bG9DTGgxZzI1Rk9lTSt2VW5Jb3ZyNWwwS1Y1UDdRQ3M1cGJ6ZmFBek9TaXlFRUEvNTVMRFY3VHpBMmRLOE5EVXFQd1BGSVBxTVNTblAvdUJRY04zRTF4K3JqemtyaTNxVTIxYThhQ0o3SWdCaFpaZkFWaEZhdDBoMWZ5cVZHbE9lMGhpUlYrakRPLzlnWnZqVmxzUWUvejZuT3RDYVpVMXZ0OFdpWWtoMDNLYjZ5cVdwemhvOStMb2E3NXJTY3JuN0Q2SDNnR2hBbGhxb2xDWkRpSThjVFl4ajB3MTlUVWd5ekJWeEJQS25VcFQyQ2daU3Yxc1RDZlRvNHpNYmp2MVFzeC9nRUJuTUE1ajVDWDFiRktPcWtJODJZSjIvelF4cEVSL1NaRVN5V3pJUHhOYlo2VnhDSmN3UjBMV29WbVEzWmhQcmNHMUY2bkM1MEV1WVVaeHVZWHQvbEdzOW1tbkxSU2EyWVhXaXJNeGVUV3JsTDhUTVJiNUJlME13azNZVGd0SE5rN3FBSGo5aHFQdkNJMHRtYXlsQndlYThtWGo1bE5vd3VMMXdBVkQvQVlhblVhN0k4cHFPTWNBdFJjaUpPMGxlczcrRER2Y0RNMDFZdGxkU2VOdnVaM1lYbnZlOExObWdlR2J1WUhIQWlWTlBEZFVwY3JVTWp2YXhYWU1BR2d4TkV5bjFidkVqMTFld0U2WnYxQSttblZsR1hBclh3Rk4rTndpT0ZJdERvYm5tTVYvZGNxUzJCTlBYMmUrYW9OalFLeisyR1ZXOEorNGtqRGZob2RFTEMwNHdGelVGbWY4MXlybnZ4bE53cEVuVlllZ2ZMcjBZVHkyb2RkRGJnQ2dsVnRBZmg1S1BnRy9PVmRQNmVVT1FpMVA5c1VOSzllK1MvZ3FUSnRBOUZVbFEwb0hGTXdPWW84dW5YcWlqRDRvTXR4TlBqNmRBVzdVZkI4Wk93d2wwNEhXbEl5c0lWUmlQYk1iTWh4Y3dNUiswbGNzcWwvanR3eUF2NkVjWUpGU2pXZHIvY2JqaktFNTdXbldQSi9yV2V5emFtWnhIeGpsSFgxTHQxSFNnOWQzTEhWbWpMWnlRVFBWNnNHZzF2blJSeHc4ejMwdzJEOFFpOVJodndhUTY2d0E3ekNlZ1RnYmJzeTVqYWhmWDI2LzJaZTF1Qm53L3FLUFFaZm9qV0hYN3RtWnU3Nm1TMU93VUl5dms0QmJzOTVtR25qdFNUZVlMUkU1d3pkODQwRkRzUExNR0o2all2ZTcydEROUmQzU2JBb3U2akI5ZEwzVDhXdEkzTHdhUXdSVUppS01scm81eldsSWJ4RjRFVCtZM3BnUlJ0VHN6YUtmZUxpeUtOOW5USWNLSXk0cmFNVXhRNnNGZFNjRk9LenlweW1FdEI4TDNQRFpsMzgvQzdUM2F4a3JZVzBxKzdTVkVZenlIMFFDdHNCNHN6aFowbm9DeFlNdG9QdFhXc2ZZeWliRWV4TkgvTkNWb0RYSkU0YllmVkdDK3VMbVRwQnhCejZYaE8rU284djlaeS9VRTFnN3Q4cmJjL3pROFY1WlIyR3dKRUlHMFQxMXlFUlRkZVFEWnJnWkxkeUdHaW0vS2RYQ3ppdlAxZDZkQU5Mcnh3eGd4TW5SSmkxSWIxQlhmWFA5Mk1ud3paVmVPakF3Qk4zQytQQytrR0hkeDRqQlhxcVg3bkRnNTd3b3p2K1hBSEJkbk4vbks5alBNTlVMbGJlNk1vMy9Ra3hZdWVKV0J4akRPV0NLOXI1bk40alBMK1JRdStyM3lKcENSTUY4RVlqQW5NUmxIU3ZQR3kwSGFtNm5DRXMvZHVteUErb3ZzT0tBTkp6eGcySEVoenU2VEQxY2N3cVk5MFdhbmp5V2hQSmtTRGtRRkFqeFh2Qm14YVJrYWFqOUtLZDRXcGNTU3YrT3M4RTE0Vko3UmlvM3NnZGxjOVh1TFoxckd6Sk53UGFTRFFsZSt1K0pZUFc5eG5Pb2Q3RzlzSkFZY3l5dHc0dVJDNFVLVWo0TkN2dDJpek5HS0VqVXp6Q3NoSURxTjN6WVlaZXJNd3ZiNjBGNWFKQ1dsMVdCQ2QrUVovekFTdE80SFRqNlRkRWJyY0dhMmFrMzhIQ0d3OHNLbTJvZjZXM1d1ZCtXOWI2VThHTUlReitZT3Y1YUZZdEZQbU9MU2VvMk1HcHZZaU1pUjBsZS92dE5rdmlxLzZZNERFWHF4MDNnM0RpbWlrSU83NnJBd0VYWENGeTJ2RUJaTVE3Z0x6cGdUSmxvMy9JUkcrQlZScHhXRWhvSXJ6cTl0V2JtOUNNZVpaQkc3VjIvVXd6TzRCNXNFakxHaC9Rd3Y2R0kvV09vQS9QblBiWFhwRXZlakROYkx3UnVtdUJ5aGZ6WU1JQ0RISHdVN0EzejFSQW5FT0trTjBvcFFTa3FZVGVGOTFtMXpWWEdFTC8zYmdhU2I2QWp1L3ZpekhwV3c1QytUTWdNQzBXaERqREV1ZkY5RVVnYVNMd3VpdW9kYVlEZHdGMWNMNVNFSTh3WVBQNXJxMHR3NDN0bmtkelNwTnlCNWJIWElPODNIc2prYXp4UDc5NWpqbHU0MjF4TkpJNUlXUTJIcnBhN09URXlheDdqcDNySVRoRHQ2YTRBNCtiTWp2NXFGeGZRSFJRYzF6NzM5WjdyblRnT2tSVVlJQ3JYdlNtWG8rQmsyQU54UnUvVENOaVU0dzBrQm9qSS9MYTQ1SnRwQzBxcTBoc3JpRmkvNmtUZ2ZBVVFlK05pbXlPeW1PWWIwTnhxdzhYQ3J3aTU2dG52OFZBSDVxUEw1RlRSVlB6eldnWk9hYUdmNDhJT0kxR0R5OGJ6dUFnazBNaGhyL0hSTW9HemNzZ3czU2dsNUpuYzBLV2V2NDBFWUF2a2g4RHlRb3hlZ3EvUFVYdktMZVlmN0dPN2FUMStRRGVtREQ1ZSsybFMzdVVwT0kwTisyaXVjaHlIdFRUL2NBWEcxRWlxQkRwc2lpb1RmQThkRkpHK2xkRitFUUkwQnVXMVB5Um42STlBUHhsRU4wcmFTdWRxaUQzWXphakNLOEp2UGNpTkFyQmt2VVFWS0wvbTRRbXpzeGlza0R6bjZxT1NrTjg1NjB6UFh4OFh5NzNHMS90WFplRjIyamhrTm00U0ZQT0QxU3p0ZFFBelVqK3Q3Wlo2cFMvRUtJNURUSm95UFN5KzdQdHNwWnNxZFRmb0d4eGFucXNRY3JkYnlnSE1OcCtpenV5Tlc3L2ptMUdVOHZ1VVNxcWlxVVhOazJyQ1IzaFArRmw5UGw5a2RNV2pEZ2pvK3VUYnFEbCtiS2NYdVh2OHZ6MkdnUFhRVFZiVUFnNDlka2FqQ3YzUVJ2d3EyNW9zZ04rby9ETUN5M0R5dnYxVEo2c0FheGVrTGVhd1RPMk52SnFmMFBpNHg1dFlMZWtRck92eTVYTy9tcUVyQWIzVmtlMlVkRUtJZENpMjdZRXVITHcyMjlUR3VaRmdQWVQvTkxMR2ZVUmJZeG43TWVRVXQ1eFplVjBYOUtIVm8zaFB2dHBOeEorelZWUU5FdG5EREVGNk0rUUtGTElHS1dMUFJHZmh6ZEFhTlduQ0JIcmtqTlV6djlETzJwUUhXdFRoTERmWVIwU0Nid2l2STZUUHRlOGdUWFlseUxWL25CcG5wWi8yZHhiem80VFVqNUZtZngrQUtmRnJjZDMvNUVxYjJudmlwVHdlVW1EVFBTYjZwQ0VvZHNHaVE3cW1mQStDOFJjNEpGT09veUNISXJycEE4QXpDWFFMSGJ1Qm9wdTNud1dUTFJhRGwzREdoNG50ZHJTcmtpMnRWZEtlNmR3UkQwN2RWUUkxdnNEZytXQWdXY2RQQVg0bFllNXA3L21wRjlzaldnc0VQLzBHeE1rYzc0SVpOcXV3ci9tUmV3dllQWVE0K3NOVXVxRGxORmU2T2paM3BGQ2RNdFRSamdmcE8wMExnVm5RWHI4SWZFbHQzL0dXdVRwMW8wMVVxMjQ2Zi9pQ01ienZmL3ZRdktSNEZKQWg2VVJpbngxMDJoeEhDYndtRVN4WkVhcWkySDJPZWJwdlI3WWxrSlRvbkJSZC9lOFFTNk9ORldiUnZTa080TlF1OGI0VEE0NzVwZmJHQlg1dHArOEptb2FJRnFHTUExdjFra1JzK042bzUweGxiUFhoRldPOEdGSUE5bStTazdWeVBJOThqODBOZ0xJenhQNEY1bVlOMHdlUHRJY3VzeTk5SmNMZzVCbkFNY2RaN05VaS9jYTRqbUdMM2JXb1YvcGIrcmJhRVlRa24zeE1Yb2JZTnB4ak9oc25GS3VSbng5cnJuczEwNTh0cVZhQWZkOEdZSVFNdXpLdzdhSnpld3crOVJxNGEwUzlhUE9hZWtYbzRzR2s4cU5qWWswSTI0T0xQdmRoazRqWTQ3SDRJZUl6WEFFSnlxWWRsZkY3SmxibnlxUVVlUSsvWWdUSEpMemlrc2dNV1ZjL0FPQWtTMHFiNlRlR2pSTVhZUGxMUGFHQ01NNldJeU12UEt5cXRKMFNTWXdtOHQ1RkZDUzNmZXNROFhKSmtIWkZkZkVIM1plTXdMQUdDWjNZVDBzWHRhbjFtSGtZWDBHN1gwdFlJVzdYdzQzcm0vay9uWDlBZThFelNlcHVaQlJzYm44VG1rVUNiZ28xWHNjYjJsRXgvaDVDamVrSTRXOG8xbExaNysyMmFsQm1WOCtHcjNVditramVkUWNWMG5KU1duNmNkS2pqRys0YnhjcGtGR0NzRzR1dE5FQ0hwWnVjMVhNWE02Q2JnN1pDN2RVLzFPU2UyelNRUWdTNTVQVzFqMnRUR3hLTXNZZGpHbENpSU1GNndleWszZ055cG5ZUUlQWTZ4V3IyRXVNRlcvcGhzajA0ak9VRElReEc1OWkvMHBVVTVyUk9JekxWNzFDeEh0V2RENnRvNldxVFUzMERKZzNtNTNscWZlS3BOaEdTRVNOb29SSTQ1UlkvRDdvbmM1VEFOR2hNeVRoZElRenVLeDQyMUUyeXhnWGlRU05LQjRsSXFHVlMyL2FPMDNjZ2NsOWEzSUJhT3dNazYxYzdIcStnMXRFWUI5Q3ErK1ZmTlJvOXplVm5FZjVPdnpjbGJPeVlDM1drbXRHS0o5UDVtVldzb3dWVTZ1SE9hSWl4Y1dtQkFnMU5GQms3U09KaUsxdENFK0JZMmlhV1AyOEJzWXhZSWpxc1hyR0hFdzRwV2J1YzFSQ2lHcnJzM3BySTBqOWhGeUxna0t6SWpHT0dlc1o5dCtpQzVQaGFORDlmdFAwY1ViM1BQT3ZXWkpZTTRXRlAvYko4OVFhajdWU1NKdFg3UEkwby9heklBTS9CQWNVdzlFYnNkcVFkUDRqSFBUY2FrVEF5WTEzazRKTlloVURFc3dhdVdwcm5LYlIwUjErVEpidXA4d2VyWG10M21nSHFpcFU5SjZubVg1bEVuRjlwSFJQTWd5RmcyaWU2TVpWK09uQ0FJVHRVRE54cXJoc0dtSEdRTlF6OE1JSUlYeGFXNWVjYVBkTGlFVWZVbktKUzdzZjlRR291Z1dTcS8wd2F0RXdkN28vai9PU1Q0U29aUWV3ZFlFc3IzcWZLVGxVOTdTSzNDcmIxN21zYVdRc2p3Ynd0a2lHWjVLSkp0Rk8rbmxoVS9jMUtSZ0VOUFgxZnR5M1VtNkZidnhBWXlsc2JUdXJ3eVRHb2I1a0p2NWw2OEx0blhIUmNtRTVJZGhkZThCYmxZMDB0R2Z2QmU2RmJNaWtuZzltS01lRjl6N2d6T1hkSzVMTmNiTkEvOXNrNXl3SzZIbW04MTRwbU5qTzlWbVBocmU1VDJiTFR5ZWZFYmRQNVhUbXBNek5MSk4yMXNvdmtaR3AydUVFNUpyTjJDVWNGWDE5eHdXaldic3oxWWdZRXdCK2tOYk0vdTlzNWcyNjQyMzFKeDhaQms2b0cwSmpzQVIrVVVnMC9kNzZJeU1kTkxxb0FIeXFwWklwMS9TRXdPelQ3Rko4ODdPMU9qNDFRcE0zVDZJTURad2NteE4rRk5JN0tqYXloaHJNL1NFaGFycm0wcllobFNrQWpnZk9sNU9kei9ab3ZXN0FyNitTdlE2bVV0T2pMWlo0S2d6eWRYZnFLRVZmTktjeEJGQm9uMEF5bTZGZ1hVeHE5VEhqSE1lTDVvU1VuOEpWMXNCSTVraEZQZE1YeU55cmpMZzNQM2N6TFBCWDhzcU1hb044akErOTlDTlI5amFRVkFXOXE2L2JlYmxtd1VrOTJjTy91UmhvZXliRmd5TmM5Y0dlenFBc2l6VHNJYWRWWnZ0cU03azBVNStLdkt0L1lpOWFwcFhhSnlTb3R4THI3WXBLOUVBcnU4YWl0U2NCZlVUbXU0WStlak9IemZTWHBvd1diTGdVbHdzNktuemV1NEpHVTd6TEQwaEtpQld2emNBTGVycmhKS2ZPOEF3bDN4UkhpK1BsMXgrU1FLakJrTzBqRnpSY20wd0lrRWpGQWlsOGs2WmlQNWp2NkoyMzJTYzgvdXVjUVVhN0tKUjVQZ1Rwa3cvVW16NW5oSDVxYjZ0dVFaaklKS0pGRVRHcm8vZnRyRVNYWnRkMmdWZDdZN09HeVNDS211WVRzMG5IamxaSy9qUTJxVjZmcHV3Yk5rRTZPRWx0ZFRmNUxOV0tqT2crUDRPSGVpZjFIaGM3TDF6MUczSjN4TmRDZkQwY1Z2VGdZVjd4cFU1MnRpYjJOQitxUnVDU0Jyc085M01HNDdTKy9EWDRDQWdJRG5uc29BNVdKOE1zNGpZMlByVlRYQzQzR2luUStNbzZWSElxdTFmSlR6d0x1SEk2YkNNQ1ZVM2N3ZlJXK1FPa3F6U2VPTlZScFpCdEMveCtkeHpiZnQ2SEdubFA0eVdGS2l3dHNWN3EyeVBFRkY3MHU4WERXdU41bVAreWt5VkhkZk9FTzE1TGdPVS9Kd0hpOStpNnBjSVFrK1ltU2xIdFVvc0JHeTRkdGE4T1JaK1hUUTRYYzhyd1luZnBRaVhFczB1eG1jQ0VzZ0p2T3pnOXBZaU1XL2U1SW9sV3F2MzluTW5Fd09lUDFJUEtjRldEb1FiaXE2MUdLMDViRnN4VjRyQy8yNEcwZ0RlTnd4eXRDQ2dwbTFnSkhseXpLK3hmb0sweEQwQnhuZFRoSm51NHV2TkkzV2I3b3ZPam52UmdCTzNNZ203NHU3ZzlaOHJFWEJJSFJHSWxjU0lhWG1pRTUzY2g3cHBwUEZtTEJSNklDOHA1S2UvMGVGdUozNStGM1pYM29FMmRwWVhFNVU0U0JsenMrWElneGY3c0Y0UG9NTW1JT0cwZjVCcktMRjB2bEU0aEt2MDZUQnZpSTBoaEkxakxDNnV2TmZSNkdxcUZvZFJXcDdrQWtHd05lMUQvWUNNT01Vb1lkYXE4ZzA2U0dObEF1YUloT3RHNFR0bzNOZHExOGh0b3BYS0orSy9jNGN5MlR5WFcyZlBIK2huOE9rTis2OGI1MzlwL2diZk9CWkJYNkRFTWRtZDJ5WFBhQy9qWGZ3ZWdUbSt1N3ljaUVudVhoeWVjQTlNbTZMMWptYnFsSTZpem9QNEltKzN6S09CSTJlZGUyUWE4alBaL25Ic1ZSNFU5V2xwT3pWRUN3TzRkcncyZjJQekZVZkFDcjB3OEVsY1U2ME8vS2dTQk5yRmhxamFVVGtWREtrVXFOV3FPTUkyQTJWNC9MdU9waTZGdGVGL3hWNS9BUm02VDkxZEZGbTFYaFVpeWVNaG9WV01yRHhUbHdGZ1FJU3FWMXcwTzRTaUhyem11TVAxdWVTT0VZVTRuSk04MGdPZVd1QlV2VmFFRnF3MmViclpHNXhYM1pmTW5JN01KcENJSmtzZTJZOEJtTHlYbHE4bzRiSU9BNTd1MWUrV21nRzNHWURVTzFwTCtPcXBIekdIc2NESlVseUNyVG9XYlpJV3ZiTnpDbnRTcVRTLzJlMEFUd2sxZGFCN01DVGRGM2RYa21mZ3cwREhsT1VhN2ZvZ2FsZ29KVCtJb1B1VnFkaHpqUWdEY0cra3ladjQrQVA4SkkzQjRQbC9YazdzNmhZdlZBM2NBU2d5L0huejA1UndUWUgzaEk3MThSeUg1VFZuYnZlZ1VSa1hVcEZ6bDU4MFBtR0pyUWhoRnJudkNFRTYvVlZobTNvMFc5UkJvNHRUL2g1eVZaRUZ5NWtqS0U4V1RQbnhubW1wVmRjcDg3VEEzMktuY1pVVlA5WUl1WTBoVkdtdmJpRzg5cGp0R3NKQXdpNVgvWnpyekNpQ3NVbXRXeFdUSWVIbDFidVUyMUp4MDcyQ2dZeG91YVRrNkpHRDV2Q01obEhldDJtdEUyODFBYk1IWXFxM2UyRkpZVWdsVVl0TDFwb1R1VTJDaVhreHhSM0t6TkVyY3RVaG56MEtrSEhETlU0dEpZM1RrQ0Nud2xqZEhsVVlpSnVJeTB1ZExsQ3VVS2ZKZXo0aCtqbVpCNnJ0Ty9qbjh5a2JyazJ5eDQ3Zll5ZzFNdTh4UXBtd0t1ck4zUFh3LzJ3ajZJU2lZWVlqRTFHVm0xSysxbWREejFsMm5GZWxwSW1mTG5NRnVjRjJmVFZMRmNUSUFxemFsOU5yVFFoc3REd0x2OXhXQVJNQ0JCcllodDBNMmdQNyt3NVNuVVN1RXFXamxIaklnSzl2OVk1NXcycWoxVW9uNVk4OTh6ZDZXNS9MQ1Jrc0xUMWVOdTBGRmF0bTFxTWl6bDRZaVlxMFQwSWpXcC9LOHFIZUR2dVM2OXFWUXhHUUx6WW94aW85WXl2MW9RdlcxTTZoYUN1bVkxU2htdjk4bERzeU5VMGVJTHhKb2Rwd0o4K1QxSWplQ0pUVlJic0hybFpUcTFlb0VzWTd4S0Q0NTRTcXVRc3hsbTROYndqZHltcGgzMy9PS2ZvL0xmcFVJa0ZCSTg1QzN6bDREcVNoTkxucm45YmJyaHh3Y2xnRjZTQmpTZG1vZTc0eFp2VnpleXI1WHRjdDBlZXh6akJVM0l6Q0dJUkFocnBYV3JyTTQvTHZseTJkbGkyY1ZWdXFpNnFMRk1WUjAwSTNIcjVJOS9mdTNnYXZvVUd5cjRYK0dIMEg1cXdSUUhxT1VEaXk1VnBuWDlxcDk2MnlsaTVLL2lSbEtINVFBVnk1UUVCd2hUdHhva1BiQWZoZXZtb3VQNThNbDhhdk5CSGhwTG1xY2czV2pKV3RxN0tEbHYydUVOc0pSRlljZnhIY3lBM2dyRlAwbVNyMitWVGVrV0VwblBPMTg4b1cvdTR5YzV4WHJOUk5RYnI5b1FxNTJTV2Q3bWRNaE1aM29uMTNzRXFWaW01U3FweitvNWdGcmUzN2YxazlYMTZhZjJMZnZySVRmZnN6ZjMrb21ESWtldlpQd0c5c2VFbUtYZnhGRXE5RkFSU2k0MjZLYmVzb3c5a0MxTDhUWTdSNWJNNFRUWFYrZHhIWEtXVlgzNGNBV2twQmlmVU96akFScmtEbmlVOGpXQ2VKd2VxV2VleC9mSU1ua2pORjNmSTBqTUc2b0JsdGcrK3dJbmNHWUhJalk2cS9HdWJqZzZEWjRCb2lYck1Bald4N0VsYm82bW0xSnVvL1BxMmRHSjRSUFhoUXRIdUFHdDY0c3lkeURkQ3c4bVNBS0Zpb3Vmdk8zZHF0ekUwWWJFRGtKK1VPRjYxZEttaFphZmgwbXhSekdWdnJsU2RuUnBMb1Y1TTluUVBKekg0djZqZ1RMcnJqaGJSVUpMZTBzQlgrb2FwY1RlYXl1ZVA0YnZHZTNTZHdvY3dTREExSWp2cEl5bUdaa2Urb3NMdmhqLy9JZjlKS2ZxSmxJRXNJRnE4MmlmRjE3ZjR4bk5MNjlKanpxcU4yaFZYeXlxVFRCeG95a2R5eGdmSDJsbkU2RXd6bkJiVHNZcWw2dmJrSEJuN0tCWU9IWWdzZVBydkozZHovMWVKd2JweVJ3bEdZcS84RFJKdEYvcTBlOHdCcVJOVkxvRzVWSi9ZMXE5bjB0anRwU053N0hqZkp3OCtNakdxd3N4OXlidlY3b1FRV0NZNk45Q0RpMjVNOHZENUZucjJpUjZGNTNMMi8wTVc5WWtZOUIxbENxaU1Dd2diSW8xZTZRVW5UZXlpRjlFTG1JZWRCUDdoK28xRFRxNjVNYXJqQVBkeTJKYnBKNjNTc2ozT3gzcjYvVmVBMk1nNnBmRDdXcG1VUzQzenl0YXc5cEJ1Z3dTZ3hyK203QXVkVElwZ2N1d2FLUFZKN1NEMFlpbHBpK0NZS0oxdVBKemZNN1ZRcXFYbmpKU2VNTmRQVVB6NWdCcC9pT0M0Kzl6WklaNmhMZUNWN1ZGS0Fjc0hrWk82NFh4Tm5LOFRPVTFJZStYRGtNK3JtVHNRcE9wYWMzY0ljL3pYSWYyRjRsQkZaTlB4dWUwMnQrSDMyZGIrVXkxblFJb00yU2E1TU1hM3pXdGNqZmRVakZHR3BoQ2U4ekxTS2RlU1l5Z1RUMkxrdmsxRHE0Y3FLeFFZekpIOUtVbUJJSzduaDY4YXJrZWVoYzBRRytZUlF1REo5UGQ2eWl5NDVpRTQyaFZvdjE2eU5rWThzUmQ0MHgxU1RvblhFV0MrRk9oR1NqVTlGRVNablRLeVdmU3doNEpTb3VodWVPMEV2enBRZFdFZGRTOUcwVFlyb09rUzMzTG53NHl3UG40Z200Y0RSTnJ3UmU0RWJRYTFwNUo3MFJNSnljWEY0V2Fwb0NCa3hESVdQcXJCbU9zRHZyUFN0QVdSREw4RjhuSXNUWjlPbUhwSmdPd1ZHTzRPclgyQ3Nla292dEpUSjN6RjlXSlV4dkVLZVlRQmhqZVdwdllrY3AxVUJVNVBEWTRrN3prYUdDT3VlT3VibDhucm03VGRkejF4ckZqRno5MmVqb0VDSStZMkpXSWxrdkNrVUROQ1BPVUJQODdWNCtrbzdIWi9ZTnFZZ1NoNWYwUEpkZEk4eGJrMDliSFFJbU5uR0oyZDJGSWQ1bTdaeno3dXJYSFpWbHdMSWMveFF2bHhQOFIzRDNWZnk1RGdUZXFSYXFrcnBvUlU0dkdldFNPWlhhaXl1N2RmYjMyVWJrcGJHVHRoMFA0S3ZXeVc2Znp2OG5ocEZUQ2NNaktlbUxrUmllMGxqNDMzYmxmbDhOK0RxY2lBNEVIT25hTS90Y0RQNEVSVlZ1WWhjOHlMQmV2cDdCR0tuU01pV0xZc0RacU8rUEMzT1ZFNndnSjFXWDBudW1OOERXOWwvQ3lPSEdhL3F0UlFVNTJYdW9ucWVlL1RSM2hkdXczSUNMVmRQdEtRNmlZV0dhUVNwSHY3N2podFNMa25QaGFxU2F0ank2MkJtUDhTclpQY2wxaVh5dmNONUtFd1pid1g4clhZeGtJY0ZlSDVVK0JHaVRzR3g1OWhOY0R0a3JaREg0eEo4Qk5RR210MXZZR05rbmY3ZU5MS0xWWXBlaWExMSszUXpQVzJxSjZOQ3Y0d1FCdEExWFdQa1RwQVVWbjhoK3dwUExlcnh2OWVmN08rNFBveW9JRk9BN1RCUkNRTzViYU9TdXN2eTlOaVlVOVA1ajhLZzNWLytnUlpzT2pxMVRzbUYwdUxNSjhKai9EdUFiN2tBVmxZeUZXTit1cjVicE5RVG5ZV1dLL1dpMWNSdFRDU0ZRNm9vOElDYnFDYmZhSDZVTkU3WlFYYzFrUUJTVTRycmNUTHRFc0NIcUZRT0NEME5LbC9GdXE4OXF0SDBWMTJvM2ZJT0RYUWppR2Vrck9VdXpkVURra0ZVRkwxUCszeVc1N0tzQ2FMaVFQQW5JdnVENi9CVm40elVyRFdSSDJJbEM3YXdSUlJBQ2M1Y21rL3lienRkZm84aWVpTXdYWUhHZC9ZSlpBZEJ4dWlJNnhlTWxjTzhhYWJEb2FwWFFIc3Rsc3VlY1FyV1o3c3IvT2JRMEJ3OG5keTlya0d1VlIxWXlxR1J0MGk0Q2RZZ2xMdzNwalhEWDZLUXpKUCtwcUJwemhNK09MdTBaOEMvR0xpQzZkSWJ1MDZnQlhIcFlueFVZbnFMd2liR25rVkJ1L2puVWFNckNtd0c1RmlDM2t0UHJOTXRSOVZmWXpkV01IYktoMDhQUjRYYUhCRG9Qd0N0eUsxQ1cxQkR3YVZjTlpYTmo5Y0VhTGhXbVZ6WVFmZ245TVNSWGRNVHY1YUErcEQwUGF4cGkzQkZuKzAwQUpOZ2hKYXI5QUJwd3J1MC9HeG9JWjRMVW1oWWJzZUNWOUdwL1FIKzV5c25NTHNFeEFWYjM4aUF0T2NjcU5td09yOTFCblFET3NJdFZqSmhyYkZLSjcrRm56Q2h1NGlKOEtNeks0TlliRGJMaVBpMG8rc2dpdzlMNzNYM0RCSVN3MGNqaXRuRWNCdDlEdjZZcFVmNkRvQThtangxU05MTDN6d2pBbitJTVhQWFFqRTkrcVFLNkpyUEJpTk1qNnZXYUdjakNGRzJMV09XdFFrZDR2dkhoNUhpZVVqVGtxZ2FlS1J5eDhURzNtd3pSMnN2ZytMK0pVaUFXRVJyTWFlOGJ3dmtkYzd3RFdBS3VZNFBRRkNaVmhSOTNGOUtjQzc2RkVZaWZyN1F6YW4rMk0vT1Q1dEVpLzFPZE82cUxKVGhMNmh2YWt0eGNJTk16OTYwdFdjZGdxNGZRK3hmQmdxOHJDRjFBY0ZZSDZCbFowWjlpK0J0K3ROQktFWWhnb1ZQV1ZuajFLaWJCZHdmZkkydjBuRGRmaFg3dW45SXFyUG5ueDE0MzZneWQ3UHE2QU5VWHoxL0NybFdrNmdOeHB4ckZZMzJPT25VSk5UMDJOSWRFVmpHbmNtbFlvYzE2bE9oczZKdkVvT3RlQVNYaVNmQkgvUWxMZExITUF4eWdNcHp6SndPKzkvS1hHSXp3TGdGSThTdlhBZXF5Rk5kZ2VxWmhnZmFiL3cxbDVwRERMY1E5dkFlUEZOeG9YRDNNU2ZWUy9IWURQa2JFV1VNTmsxTjZWOXVnc3kya3MwNjRxcS8zaFAxSzVnYkZyR25rM25RT3R4Qnc3MWtsTWhJcmNXdXdHbWwyVElUdWJpNDBFVERWNDBiRDZsVWpYTjJLU0k3Y2ZNS0hNWEtYWUtWT2dJZU1SYVRHTHg5RHM4cXQ0dVhucVNwYy9RS204cUY1VjF1TDFNNFBBWjZvVW42TVdKTUpZUEhPaUdieWtJbnptY2dLUkUrSWp0OWJ3cHpmQnh6MkdGVzF6RW4zM3NFT3BQV1RCNHdadm9kT0pwYStmekxoR01aYUZJNTNZR2hweGpTajZIMDZ2cExCbHU3U2ErSVp5U2NuYU1RWHF4bENrdUxYODdIbldnd3RkTDF4R3d3RG9BRE9NRUFPZU5oc0VlTzFFaCttcUVMVVNDbUdMWkFOUjJwNCswdTM4bUszaTNwTmVLVzhlMUdqbUhDMmpOODU1cElXQ2FIcGo0N1JBWjV0SUgzZ3NrUTJ2VmlCeTdYampMRmRKU1N1VEFmVG51aXJ2RnJrNWpWVXA5RUl4RjZrNXo0TWdwWEZYY0NxY0Rubm9IdHpnckRBS0pTeGoyMVppSFVxRHBWTmV5eFAwNFUwRUV5VFV1Ym5IR3hGejVsUndCL0JzeVpDMTN0eSs4MW9HYlBtNlc4c0RUVG91azBUUG9yTWVqYTZDaUVLNUlCaDllUEpvbzVLY2tua2p3ZUI1dStOa3pja1A2cHczWXI4eC9xc0QzQTNicXYxa05qSkdGeVJOL0JwWmNtK0VOclZyZEIrb21hYjdKZndmOXpBUFhWRTZ0UnIrSUhrcmRCUXVienlab3dzVTR3ZGFlTnpDb05BYzBvQ092bEdUOEN3UzNoaU9rNkJNekVMVUk0bFNIanE5VEhQSDB6WERHdmdJdGlrdXo5WHQyR3FxVWtoelNRQ1JOaitGREllbVlOYnZDcklJSW5KYWVoQktSWXcrdFQ4WiswejhJNjhCNHdXMnNvb0VSVTNYWlVndFJBa0pUS2tHb2NKUytuOENYVFVFNng4WFdmVGZLS1R1NEFwTHRtM2N6cDNZdlVZRGc4VjAxWHhiUTRxNzZudFRiR2VoSEIzcnZEdzYxcXVzVVV2T1dIbmZ3Wkl3aUtaQkpxb05jdXdSY29LTG5rTmxGcXhCYkJtdGZtbVpVcjdvZW8vM2RuZDZNd1hIUWswYkdhN0FjUEJrR1lnbkhQMlVaWkd6QVh5eE1uMS9FeTMzbjEyTGlXbVg0SXRWMU0yU1Y0QlRERkpieCs1eG5mN0VvdFpoWW80U1hTNFJHN00wemFsbzh0QzFMMTVEenFheCtxOGtoQWQwQk1ldnZhUWIxQStTWXE3ZXREZ0R6bXgyekdOVHJGMzVkVy9kNVFsTGZnV3kwQmZwMnppdVp5OVJ4dnRBamhMSkFKUEZOWXQ2ZVBZRmVvbEpiUW1pdWpCZmNRUDdLSHNZWHFFdVBRU00vU2I0UEJBRUh4Z0xlaXE1SE50T3RFNCs4dFdaSFJ5aFFtbEFrb2ErQkxKbW9FSFZRSUc4TGF2ZC92NVEvQWViVktrZFo5WnpGb21tbXoxMVNaY3VVc2FPakxDVEhwTWp4NytRazVMZitkeUVkN2tNOGprclJ0SjZkdDBvL3ZrQ2hCNm9EclZTeUNWdk9vaDZJeDRLVEphbUM4K3BuaUtSdzZab0prWWNhZlFmdndlaTA5UHJ3YWlBSGRLeUQ0czdGY1RTdjh2MWFlQjRMc3VJRXo4RnpBaEZLRC9FbzZBOTZSTFowRHgwbmF5ME5Lam5pSVVtUEpGaFhFVE1yaGtPaFVDZGFsMWkzRnM2dDhQcy9lcVhNN3Z1V01zYlowM2s2Ny9tVzhZR0czTmZ3ekxLMHB5UVR3SUdiV1VwU2FYQWh2UDdEa1JueE5JVDVTSUhSNCtvOVVsNkxPV2tiUDJXVlJGcDZ2L0pvZmttU0hiN2F2ZjJJSWNzMTIvQjl4Ym0rd3FOUFlubEorWURJT2JVbXo3NjluaWtYMVorSThSSVdiYXRoMnhVTGg3aHp5YmJnNzRJTDQvbGdNVmxQVUdCcW1UMmExS2JpVjM3dk1BN1R6SXNYZ2NDVVJaSThlazhHbXpCYTgyRDVTVmRZeEI5dDNmT0I5bld2MGo0bGE4YjhORXQxdFhCM3Z1R2hQaVgzWGFsU3BpcEh6YUs5ZUtEUFFxc0o5Q3FoMmhtS1k3QmprVTVScG94cHpQZHNCbU5ab243bVZPWkJhN2srVzRwaUhQUjUyTFJKME0rOTdoMGkza2xnZnVjZWRvOXNicUFabzB4Qmh6bFZlR1QrenlCRkhLTk5PZXJFVzlEYUczbmdLdFNvdTJGKzJZa0xNNWloZ2tyUTJPc3BZa0tZNUdnb1BVZGtwdFkxMGVhMjZyVlR0Z1pZYUJFYVRDZDZneDNQclFGOTd3TG5tWFRCWGxGL2pTVWlwWkt2NU9CWTdNLzZsUXJyVURKTWh5QmtlcytYend4bGJLbDIrVktpZDZLZUo4Rm8yUlFlUVlUbkRkc0JWRVY1RmdKRjlrZWtaS1k2djZ0bjg4UTNiektjOHp2MUlwOXpzSnZMN2FPdXViNER2dU1uSXpNM2NjNFlhV0MrNzlPdUdTdS9NNzRYTXowM1laOTdiT3BsYWZXQ1V6cXBEWXlxV0s1ei8zYW5NcHhlNWc0NWlCbWhYWFkvUkJKV3ExaHpwL2dGdDYxSW9neUhLeUhWWlJqekZhZjgxQ09wZlp3bmtvdktFRE91MzlRSGhXOVoveVF5SHlTY1JRYUpkbHZZcUFsNXRUdXRYSGZZK1QwcnlCWUZBdU9rMGNobFhEVHBFZ0ZjbDlCUFdaUFBleGNxdHlKSW9ybHhhT0Y5a1FQanJDU08xODU2eVJ5Y0NETzhSTGl2a0dVQjRZYVBCZ2Q4R1ZyL0RoUXZxcjZtTDBYODNKODZldjdDUHkzS2hnR2JjQlV3VDczald3Wk1qalE0MmZpcWM3QXFON0NETDRzMU4zUHhzRDNyUklQbVdvUFdqODFtQlJHYmtlekRrNS9aUzk2bGpvbm9MN1E3WFF5OHY5d1VsSWkyaGhNNW5jVElJN1NMQTRmZ0IrMlNmWDlsdkI2cXdvY0JxMGx2OTZITFJhWERIN1IxYzYvOW1RdU84K0FIYU9rWk9QcHRtbC8zZGMyOThTSHNhSVBFd1dYRTVOU202K29TajdwYzF1eVRXRVhsZGlqYVZsSTA2dys0cWVnbmJybE9iOFZyMm5Cdkl1RXU0djYwbEZ3bUd2YzQ1WHlycHNuV2xGL1JrcWdaK05rMGZGZE42RHp3Qk1uM1h1S294ejROWFJhamwxbHhSNHpuVkd3MU1WdkxGa01XU0FIL2FWWFN5dmZ4VEw2YjJTR0pvc2JrUHRsdzhOVWpzdXJVNEFraXErWGNxaHJoOXY0STR4emh6RG1KWkVxN1NhWUJ5NmlIeFNBYmZXZ2FkRmtXS3ZIWG5ZaGxzMmFxTEZMVkRNNWRyTWZsM093MW5NYjFGN2VqTmdTY2pxdFNTZVExSlk3cDJoMlR3YXFBNmEvMEVIckIvUGxkZ1ZZZ2ZIeTFpNldYMUVSV080RmpFOVFLcUpVeG8ydHFXekZoT01MNnh2OVpFOVFFaUU0dURWUVdrWi9KcVVnRWsva0YwV3hLTExVUkFWOFcxekJXSTd2VlYvdThzd0J0UU8rZENTejhObytQVXNERklhTFlrSEhQd3A4TlZxd25DQTFPcWxaYTR5Y1ZwbkF1MXNUV2lMNWxNNnZiM3VkQmVqaHQ3SGkwZ0I2UGhqdDJyb2huYUdYcWRpQndmK2dCMW5PeU1rRStSbWZhYzY4T2lGemdyeG5DZ09SUVpCRkVIdFN6d0VVWW5lMDJyZ2wweCt3VndaZUcvRGE0WC9SZWJBSzBCU21jOG1ZWUxIN2lUYzAxWjh2ZjQvRFc5MUs4c3EzTkNlNG9SSHVuUHZJcUwwSGE5NllrNVkrS3VhT1hMek5GLzNJcXFsTWFxSG9MOWh1Y2R6Q2JDZC9lUnJFZDhycGZ6S0N3cml4dytKd3FndzJKNURoK1MvNVBzU0RHekl1WkZBbURSbW00S2ZjVXVxQTlpUVF0M2dxZ2pwTFd3OGRxS0xOTjZoR244cmN6N2NHTndrd2U3UmdYUmtKQWhZWHI4ZVlkSnJsSVpLWExFWTVXMGMzc0E2ekpxWENrbW5GcTAyVk1yRVkzZVhkcFdHLzJVQndtVUVYNlh5SjVtWnVOM0lmZ0o1eEZRN2FneXBmYkRDNHhrUlpqK1ROS3N3Z29LSURsN1l1NFE2VWc5aGVBS1NiclZLMzU4QXlKTnloZDlGN2M3YTBKL1RzRnNobXdoai9hekkrV3FXM1FmeG5Gd3BQWjg1clVPM1JpeXBkNjl4RDdHbHhrUVVzdWRLZ3MrQkExVmtxYlY4WW5NbkJnUkRtT2w3eWN4U1dSTWdvT28wYmV3RG1pM1ZMaS8xZG14TkxURnB1cTF2ZHNvRys5aHhSUTdvQVk4bDlkaktYN2VsRjZHdGRZSUdya2tvUGlaRkpPTFlRb29EaEk3dk1PTllyT2tIOWZqd0VXY1RKaWg4QjJqUVk5YXFIRm4vNWx5aVpPektNaFZaWFFtZ1U2VFV2bzVWa1Zac2NzMTlLcmEwR1JhalVkVlgxOCtOZjlpVVZqNXpxUmFENjhKZW5ESndMb1l3MHVtRXBRdTd1NWppV2x2enFZZ0F6WWx3elhXZXZONUIxZEJEUDZkY0NGeWRlUGNvNjdxYmhqTU9NdDdrSWdlZlIxMVROZHFNaFJyT3dXYkZISGZEVVNXNmE2KytZamdMWjlGWGVBMzZTWFNPaGhoNjcycGg0VWFNQzZXZlpJcHRHTkxzR1F6Z0dDVXp5N3JZSXU1T2JqcjMrcUhQTHFxTGsxb0hHZFJZbVdMdjF2RmNpTXY5Tnc0VjdIZHJwaitRK1QvaEpvd1VLTXFHK2U3c3JSOXRRMXZ1QThPUm9GZ3BrV0I4N0J0NHlxVmh5NU9GQ2gyNXlGRFVxZVVnY01XaE1BYXZVcWFuRWFNdW83VjNwUnY5L0pPNjBMS3U3M05LUllEZ3E5Qm1iTkh1dEZqRUtiNDVBdmV2Z1FTazNHUXpIdUVWSW1rZEt3Uk0yMFhuc1dKQVgrdzNtakN6RVk5eHl1NTlzVHNWc00zMTZoVU40ZE5FNVNUWjF1d21neFVWazI5TkFQZzc5Z1FrWXVSSGt1M3hJWGFBVTZSVDROYnFIYy9rQ3BGTjhYQk9YazAzdkc3S2plZ2ozYnNTb2RZZTVMbHZPem42d2phSFBYdmNaNFNxaW5rcGN6dHV0a1lHSnlESmpKZVZDYUcrZzhRZWkrb0MzTWt6cm5VU1R2RTBzcGtlQVlnbnI4UkJLdDIvaDh5a2dQODFiOHY2Nko3elFPRzFIUHFkVHJjaHJTNEtlakhjYVVFMzBFQWt5eTVlSkMvMGp6N0Vkc1pseHJNSWhDNURDSE95MmRrdHRGakNIaEJ6cytqNmhDRFlhMnNWVjBUMFhFUEw3K1JWRjJDOVFEalFLZElBV1J2bjRhcjNYQUNuU1JZYVkzL0Urd3duTHNKWlo4ZENWaTBUOFVZdEpvTTBDK0pvVld0TmljdVNJWEZOeWxoREVYY05oSC9MOFJBOWN4TXBRa2lzbHIwT3ZEWVMrQmlYMWRXM21TcjVHNjhTN25aa05MR1Y5RElWNHhYZ0lkMFFybUxRLzJxeWhtVXFlQkZOek9TK0VWR0lOeVFzU3lYVmUvSWd3L016NFdvTkdxS0IrQ3FyOTA0UWRROU0yVHZDVVBmaFRQTmF0bHczVkFGWnBjcU0xaVJkTDJRMXkvSlRDMTJOUlpkVE9ncWsvTG9aUUljaldZT1RzQTltdG1udGlqQ3dld3NTUFJzVWJuUzVYdUJpT1FSeGZaQWdXY0ZnQ0VLWit0Y2dnK1B4NXpkMlFra3ZxWnVobmZjRHVHSWFqdEN3RlVscHY1cDJjUmtKQXRMUGtTR09VWnl4OG1BU2I5YnREdDExMFF0WStFMXJNZzFMeVpya2g1YWdzMjNFVWVHU0ZSd1huK3dpTHFxcTU3aHk3NUtsMVhQS0hMNWprU0s1S2JBbTIvSWloSnd0dW5lSVZ5TkxDRE1MQzArM2tmZi9LSlVNcTV1eFFjdXIzbC91eWJuOGwveVc5YXB0OHk4WjJRcTBNVlBPMW40NW5BTk4wL0RjUDBUQm5UdFhjVEJxQlUwTGIwOWQ1WngzR3A4MmdmbW5tWHpwRVpQRWdNZDJTcEY2WFlsNXp2S0pGNU5qVi9XbTBjY1JCellaMWtDdjRVSjZpeW93dDA5UG13RnhKcG45QS82aWdiaTJzcDNYQ2dCajJ2aTVEeU51YnhIMk1Yb0VkU2JQN2xKSmxFNlBUd3F2VnBrT3d3c1c3a1VnVUtYVUx4NjJISFE3N0RxOXJmOFlzN0FUSnNVcWZZYXFRam9xaU5BdlhCSnJ1ekx6S0RTbU9wanV3aDVDQjZOWU1FenJiUkFWZTl0cksvSXdlOTJ6MmgzQXhsSFJRWVZ2RTRJT2cvbVBDaEMzNDVnTDVsb2JmaVpiVmxraFozcDdVMnZJaFpKMm9NRGJxbzBzT1U2cjI4bjNkdFZ3ZTlUZEFrZ1VISWNuNEFZejEwdXZZZGh4NGZZVS90UmpmNjc3NzVDZ0t2dDdwVnE5aGl0cXFKYmc4NEUzdWJBemd2OTVXZHUydUd3eEJRT3RpLzdaVTVqajlZNHlldnVWWitKWWRGUWYzZHREdlNSam5kYjduSUt4NlU2K1FacGZFU1QyUWhOVXhPakIrekYvSENLeS93dVFLNTgvdHRsbjVGNmVsSGRGU3p1clNWL2VqWUxZNWFjenJZNkc0cXVnT3dTOWlTVHFab0M3WFhVUTFtWWQrT2d0bmdaTmtGQUsxNUhYR1oyckJNNTBHdy8ySkN4dUt6cTdNK0FCNFdaM0plQy9vMy9SWlNsUzZOQU9VektQVmhkQmhJMjgwS09Xb0VpNU83dUZWb04vSEJhVk02dlNWQTgyTDJPWmpNOTdTZC9RVllIUmFMRkVkUnZkU005dEV2MS8rRWtMRnA5UjRKU1Uvb1d1SVF3YUFlRytGelMyd0N3dU9vSVZKamFhUU1aUGtuWmFGVDBoYWVVSWgxS3B1WXZ5YjVUaE92YWpSWG5pS2dRS2cxWXRHcE4vQWVRSGo5UTc3NXdFd2NDR0ZrUkFMT1Nta2hnMjBtV0JLZTZjZUJHRFh0TmlaakE5NmZ3WVkxQ3k5WEJGOXRoMHdoQldzaGNiYUZaY0xsdmlGZjA4Mkx1TVVud0hxZHdJUGtBS2NkWVdYdEpzMjFmQWFKOTBjaWgvQ3JwaXpUdkMxQlZJWkdKbzNDWjY4UEpTSWpIL1FrWW4vUklIYzhkL3NTMVNvbzVKVCtkb3ZqdXV1ZzFiSWpKTzh0N1lidUVBanowVFl1V1FZelRPV2VhZmZJSHYxc1JySGNBSENWYkQ1bjl5a0dGTHEyZnFCQ3RIckl0cHBmaGUzNFVrLy9BRFZ0Y0ZTSU1jMlh4amQzUnVCTzdTc0xTYnpZeXFwOEFNTzc5RFZZWnlEOHZhQ0tOdEYwcWZYdGhyNWp4NFZ1aEt1VGI0YlhKNUR3K3BCajBmV2l6ejlvUlhZYnp5bjc2VElaaEtBSmFtOGVsWE5qWnY5UU5hMXdydlM1cWZZQXZjQ3pEbEdMZFp0ODhrZXRiUnlWcmxpRWJoU1BvNGZDUkNmNUxONGQ2Y09vZGM2a3Q1L3JORElZV0Q4eE5FQnhOQ2wzbU9hZ3FKYU1TY3lrOXIyTTN1ZWdHRjJwU3htSWRtcEtYb0NZdE81NjdBc3ViTkEvYS80dklzQWJOSFIvRWxwTDUxMFJDbVp6N0RaV3ZhWnZTYUpreGdjRXcyb2tIcWV5NU9Xanh3RG0yd1cxNW80NGFpeTJEaUpUbjJETmpkdUx6Q3lHNHI0bXF0SXAwZ1E2L2lrYndMVnVMUHlzTzFUYjYxekRyNTlnQUovK2R0am9oMFhsUDNtQkNvZHAycGlJWTVpWUQzWEZLV3Q3T0YvS3VnYWVhdDAzYTltYlg3TitNZjRxZEV2Rlg3Tlg3UkpMcWp5SFltWHA5cll3Y1dkdUVLQyt2M3prS1pnWGFqVkFqZXVEenFMSTNFOHdSMmZIczByZ01ydkkxUWR3M0dvWjRlN0l4SUZxdWVGSDFSTWVuMStEYlpsZzgyR3puWnMwL21zZnVQYm9KSVRJZUhnbWduUkZOOStWdjFRRUdRdURhbEpab0xXWlFMVytlbTBvNXdWN0Z1N0g3a0ladktmVUxkeXVvUDh3RktEejE2QnZOWkEvZG9oa2xXNHBRRlFHRlhSTkJXWUZtb0NyVGNKS3lkUkYwYVVPSWRVelBuUS9HanlEbEZ3cGNvOTc5TEdYdWU3NTBENWxhaDl6OTU3K04rcVdlZjgzUGRhSGZ1aTFZTXg2OXN6N2J4bFdDVmc3VjU1SVovbUdrV0hkWmhsNU9MMmZBVHRLMGpaamZyQVNKTUlKb1ZBdTlVeWJQZWtmNXg4ZXdrMW93azVXVGJhbkR2V044Q1FnVnFFRjZXblZ2dURMaThEazIwdkhCeXFGQ0VZeHNpZHo2Uk9EKzBPdVFVaDJHbjNNbWoreGhuZTcydGpFU1FvNitzcGFhTitydTRQWkp6V09WbG5wNXRYSnM4dmpzVUdETzFaL1lUZzkvcTFLaDlaSkphUEM2REdEbE9rbEo3RjdGWUhDOWpUTFpMSGthMUtRTms5TmpxZlBablZOUG56cDlyYkM5TTFFNEFzTW9CYldEWGw0bS9aN095bmFkWW9HWTNibGVpNFpWWm56RWZVcThEMWY5TUpZRVRtV3AxWFp1YmZjTFV0L2Y0VUh6dDMrMFFOaVFSTnk1Vmw1bEVoQXpZVWJBSGkzMFZXOER2S3g3dlU1ejJmRTBKSU9UdjZlZXJHek1vK3Z6WnFaUjlXMG5jbytEMmJ2RWxoMVVSbmt3cjVMbFp3T0JqMUQ3RncvRlRwNFFyR0ErdHFMYmcwY0JVeHlPSS9tYWQ0ZkpqT0R4Ni8xV3hVR1JZQUtYcENBSFlDZTBvaEFWREIrQm11QlRoSEF6eFdqZ3JGS1pCb1l3Yk9udUkzY1BrMXZ1RHRYQlVZV3BjMmFtMmwyVEVvcTlva0lXekMyM1NZZzA4YkN5ZG5iZ0NWcWMrdTVPTU1NTjZWVGJiYkFRNnBIclpJMExCeVNpNmFrVmVCUUE0NFZpSXpFOFFwNzk2OUlDR1hUdUs4SmNPN2F2RGlCMmJtRGFJa2tvRWJUbk9vOEYwcUN5dlZ4bUN3UGxpR2Z1WHlqYjUrM0VXY0xJWDZiR1RodjRKZ0lMSHhOVmEzQWozTDVLY0FYcWpubHVVSDBhZlprbXJPbHlyN3NWTktINWxFUkNjVmFWSERRQXFyQVRuUjBmR1dRTDRsSk9scWJMc0lTY2hoK3liNEFlclVvT08zYnYxR213eHIxc01qTFdzVWtNNXdLTklZRE4yUVdBcDRlT05SZUhqMzhuL1VvZEF5V0hjR0JnQms5WkdJdkd0VmlRN0tHZ0Z1ZWFVWW5MT2JsMFZUbEt5NUM5OVRZNlM0VFI3U2NCdkpxYmhRdW1EQXQwRGRZRUJKY1RpUnpGTXlLQ1hEeHgwTEgyRnFpRE1uSk9VT3NmeDZqWG9iUWhSZFZPLzR5aWx1MWx2c1ducEUvdnpNWXRmcS90RVFlR1Rsb2w0b1puVnJQQ2VROVdiUXVoOHZTeDB6L1FJdktJakVuMElNYmhWcDlldDFWd2h0amNmZ0NxOGs2RzNmY2JVMzhmalpFS09hNlRUam82dXNpc3RCUktJRHkxODg4Um1ld3VMNTJWZUQxSWFjRWIzbnJmSGloYjJJYlpITHNjamZ4Zjl4UVg1LzlZY3llRFA3Q0dQTWlCemViN2FwV3hYUnJsbWNNQjdmcWUxY3lUTTRaSmJYeXlmRVNkcm5zUjM1cXM0aGtoZGJUZk9KM2s1bm93cDF3VFEyZUxobDFWNUdGK1BUVHN4K0ZJUWo2NlJ4UVV3TXJ0VzcvY1VNcEwxVm5zUDJ5SXhiWkR1ejAyc1VNQjRBYlBkZHR4NnlLL3pYR1ZPeE5iVDZsS3BFaHFacSt3Y2hvaU1ZbDBGZDFFSUZhVm0zTmdXUURQRVh5clA0ZWQ1dzRqMy82OUtGYjEvQTh1YnhHci8wVzdEZzRjMjN5MkozSXIrOVVmeithRU5SUit3NGkwTnNzMy9rZGtHOUFBZkJxMW1GcnBBUjlsL1pQQmk3VWhxYlBkUEJNODE1WmYvaDNZUWlrdE81US8yRWw1Q3ViSkorMjZhSzltblhFMEJydlNHcEtwVW1pNWhEN0R5YXRwbnphZ09uc0orbXBSMUN4L29SZnpyNTJvbUFZN05MT1U5ZGlVTTN2T2FUb1lQVWp1UjJxb0Ezd1c4ZkRSVjVndTdtNUtrd2phUEJ3OUJvejY4TlpwZ213TzkyQk5GcGR0em82YkZJSlR0cWt2SkczblBHV2NEMklMQ2dCeDllYmkyemJGcUhJR3RWK1RqUEwydDZpLzNBSWJ4Y2Q3b2g1aW1vNjA5eVBRMTczK2g5dzJ3Q3poYll3R3ZqVDJwQTBSVzRrQXk1TmVHeTFZNllnNHgrMjdndU9oNXMzM2poMHBwcHBtYVowRXhvYSsyNWM5S3JZc29oaTYzSHdmVFhaNHVaMG1BazRqOHhJQ1RJeVcyR09QMXNrVzlWSU0wdkZoK3pmSVV3QmtONVdOQjh3dlozczJOZHFpb2VZbFlNc05keXYyaHQ4ZVZUZHhJZWFzYTM4ejlpOFhHZW1vTjloSXR1WTU0WU5BQW51R3B3T3VyLzBHeXBlUm9VcDlKVHNJNXpEaTQvaHZYenlkaUpRYjRxMlRmWW5ZWUI0YWFrZFVqZ1EwQjhtVFN6eVh5UEo5UEl6MENSOFBjZjF3V3ZmeEMxM2NNQU5sU0lUU0s3TzFOMHNHbUNqUWJseWRpVVVqZmZuNzlRZDBnQXdJZ0dQUkFLaFJURG5zOXQ4ZVVBa2hPWXpLQXhaSkYxSTF6TXFFRUJyZEhKZEhlUm5uQWVCODRha2RsTTU3K0NFU3ZDczB0aVlKL0FSdmZGdUJwc3UyZEJyTTBabXhvaS9RU1BjbThxVy9YT3RsVFYyUjFxV3MwVkZROU5aOEdtMy9Yc2ViK2YyZkF5ZTZNeDFVTzIxTEdRWFhLMWYxZFpFUTlCcnUrcDMrb0tPUzMvemFhZjE2U28yd0hNczdOeVI0UUhJYVVFdVhXN2EyM0c4Y3RZdjJRL0prb2sxdFNZK2NVbDgrT29ZZkg2WDNmNmFQb2NJcGw3VHE5MWFnd1o5T0RORkV2WU5sWTJGU2tzTW8yb1oxNnNPSXQ5aDNaRUorQ3o4dXJmWi9lQUlkQ2RLUnl6M1BxWXk0d3UreXR3QU1qWk9wRndMSklwR3FEcTRvQTVhYUVsWmVhclVhRVprVnZGa3VzK1lxYnB4L0lJajBIelRRM1owaWZlcXRCeDE3Z0pSbEtsbTZKWU85YlJ3NUdPTG5ISkY1VkQybFpPZFRGOHplM3d2L01wRXdpb1BrczNtcUo1ZnRuaCt2aktVWXlOSVIyaGdHdFBHV1JkaUxMRzFTbUJJUjZFbkZxMGVBU1FPeUhXbmp4YjFoRWowS05HUTcreWNnK3Y4VkxZdUpCU2Rsc1JsN25wcW1HcEd4SmRQVjFzZ2pYb0pIOEUyakU0NlFqTVNwL2l4ZklEN3NtZGhPRjVQUUNnTDdJdnREZmN0RUtqalY4UzlPV0U2VXVnMWE2aXlOTnZvbENFYWtOL1pBWHVNWUR0eDlDSWJDNkJtbmwzUVd1VDd6ZUJabDVKa1dGS1NhNDg1d082elpMN2hBRDYrc2lPYTAvWjNqMldiZ2dETjFsT3lRQjkvZVVsRmFvcEpvYXNudXBUdE1QOGdKUWNOZENWVXliMVJxbUpSRE1sM0lHZE0xdk1sam42eU5mODJ4cWhzdHRFQUhGSE5XNk1Eci9CYTllbDFOZDE2WXVQU3FDcXhjMWdyUGp4SUxLdTVxMkM4TWJRdzF2cFd1eDBFMlJiNThLOGVYVGxUUjEyaVJPNkI1cUFLTDlvUVRsQXE0UksyVXFpRmtGU1V0azhlUGovZVpYczF5ZkxSbUpzMUl0akZRbnAvQ2NzQzRVY0I5NGg5MVBIeFdXTEVCbHFZNXkyZ0N1YzFDK1dDQ0M2ZDc0RXFEUzc3TDlpdnRDc0hRY1JENVI1bVlJTWhXWTdqS3dUS3FFTTh5UXJseGo0VFhSODVCN1Z5REpRTm9DdkFNQ3BaTW9jUzZOODV5c3Q1OEdtS2N0ZG5qOUhlSTRHOFZvTm1oZXEzc3U1aTluRFd6VTVnVkhmdjlScjFIQWVVUU9sTGgxYzljOUh1c2pDaUtUcS9aUkNkd2V0K0VHWFl1eVJMYmdsYWxmUEQ1aVpTc1dCbE81WFJvNXZabGpWdHNOdGsva01pem1hRHAwa3ZReEwyN3BFcHNjTUY0RERoRFk3cmtZSTRVMk0vMmZFTjlCdmZxY1ZZZlc5aWR6cDZ3NzI4RkFWYXVLTHM0VGV1NWdLNExLbjE1Sk51OTlRN2pMWE9rT3hKdS9uc0ZEei9Nd2NpYUJhb3FHK3l0bnVPbUxDRFlwNFdYRTc1Z2FHQTkwZzBBQjRtNGh6OEJDeGU3NjljblR4bTkzVlkxWWZaSVFNeGJiZElCeXp2ay9mSVE1QThuenl0aEpka2ZINXNMM01GRnVUUUlzMjlObkdreVFHei9IVDh4NXR0WFBnRDJmbFVXR2IyaXVxaC8zajBydjVrTkpxRVJVZXArMmZUTWVScTZGMWFWSmgyZ2c5d2xTYmhhUUNXVGVvQmhVRFhQeVVtTmVmTTVQQk1sMXAwUFFWL3JEcEpxeThnNWEyaDJvb0xBaW9iN1V4OEpKU25nTTlibE9uWW41cTRjQ09OZTM2a2tUTklZSGNjaWdVdnplVTU3TXcrMHprM2R1QmFNRzBMZzMxM2UweE4wVFVoN2NaamM5TnhkemgwRm9uWUF5UUgva2YrNWNGY1I0SGdGd0Z1azVYQm5mNVVKRHI2dW1STVF2NVZvUnVDNHJ5SVYyay9xdkRHbkVrc2NVLzFudUE5aWdpZEJWSDZWZkhzMXJmN0h5TTFPc1NYSzZIemNLQlNPK3NWSHU4R1UvSEJnaStLTmp4L0I2UkxtdWZZTExvcHB3d05kT25TZGh5MmpONDhIcjFLd3hla2N3Z0wxUzB6RzRIS25tMGFadHBEKzVXQi9QTzIvVnUvNk90SzcwclkySCtUTElXV1BreTF4MVdGOVN5T1lzeWJ4a2FBeFNiZFZLcEZrQ3UwYWtIUllYR1pHQTJHSTNyamp4cEdCc0tWVEw4Zmt1ZWVkWjBHWTVyaFp3VXVhYWU3MHhDQ3FmN1k3YWxFSFhEeSs0Qnp1R2hTbHR6eGFpZFBXUnd3VjJNM3hxMWtKWlRmWFZEbHJnZkQ1eERhZSsrZmNiL0F0YVdHdURhT1pIR3JnQy93Y0tlUHJLSUZPeE9rSmhyVXN1aEVWNEpNK082RHkzc1dFcFdhRWdieS9IK2lsQzdtbmdtakxpd2JhZ1I0Y2tIYzltWFN6a21rajJVcm1jMUxuU01zTkNOem9aYTdHVEQyRC85SmJNMVdmQ0VXcTZrdDZTaGhwcmhpZnovTHhZcHE1VWRBa3I4cnRNZnlRWVFrcVF2MTlBZmJMdUliY3hna0lweHU4aG02ZC90T2RDSFpmb3pRRU14d0kyczkrS2VIS29rNEJoaHdMa0VwdU5uUGQwNmdiMUc5RjVuVUo5MStuYnRkczVVbENEQjF0RWU0TGU1VmpqTXdIS05waHQ1UHlEQ1VqNnB6YTY5ZzRKcjBBaURwanFkR3NpbFNiOE1FMll2bGdNZEwwV1BPZGcybGlVZTQ2YWQzR3BYVEIxTFVmQnYxU0llMklOOVNLQ1I3MTZVMzN1T3NPNDE0bGxVVGViK0xKQUthSUVFNUcxc2RPN0tJeHRIUEZUZ0VBL1BvUnAzSjRZUHRQSWhQaUpqOG1SVHB1a2czb2JSQ1gzbnFyRlo3bTBBcFhSTmZhZjY0ZVhQb29KblZCemlrYVVlMkttM1FWYVVmd0NMczVYWDl2Uk9yZVQrQ2hBTm9lQ1NnM0haaFN4TUFZTmVraFl5UGhlWW03c3J2NTlxR0Q2NVdoV25yZXpQb0VvUUQ4WnAzZ1U0UExEcGJ2MHVHek5aZDl4ZFB4VVYvbEc1Q05YYXN2MExZYUhFZTQvajI1c0YxS29oQVFHeTllTjBORTUvMXFmWW5ZeHRCVVRPcmMrMHNQcml3VzZiNnY1dFpSK3R2V3phTTJPQ0tvMkF5TnZ4bkNneGMxWUFvTlFRRDZrTUFuSG03Vm9qb3dTeEw1b0hzVXY1QURVbjRtOE1ZS3lsZzAwRlRWdHlGbFV5VFF1dmRXWk9VNHhiVyttWHdVRTVQTzRXYld2SHFaRFNZazI1Tm40eDhqYy9mOS9KbE52cjJkUzdiVlpTOFlvQXZYcjVWTmZSTXFDSUU4ZFRIc3RaVjBxQUYrdEZUUUZ4VjFGQjhuWTRNK3BubkR4MUZqNGZQSGl3M3cvR3VmanRDQ0x3THZqZ1podVVKeGpsT0tOR1pRVGl3ZVFqNDBuM0JHSUdTdHp6TFhUdUpQQWpJdTJQMmRBblFrRUYrL1U1OTA2QldqeWVHTHJYVG9WSzVVSjlEUU0wUnBqdVVjZEdSZ2F5TDl0Yjdza3hoWFJjekpXYUFyNTVNZEE4clQwSUh5R0lLWmhJTXg4NTd3SHc3aG1xdy92eTM1VTVLek9IZFk0SWozdVFtSnhQcFpyYi9TdEhoUkQyYSt0b0ZZUnJpSExJMzF1bmpwN3R5TjBMSzdDK2h3VVg0KzBTMHZyR2szTTRVQU9SajVLU050OWtRUnNPWEhlUUJHVTd6Nng3UWdUTUFEYWMwY0tHVnpuR2pFQ0ZWSEVGNzNJUWNQZktHempiak81U1FuUlpMRm1KWlNjQVRpUjZYRnBZWHRSb3UwVzBJVEVaRXFzTi9yTm5sM1QrcWpiR1I2MGttdlhHaGdjMEFMRW1hTThGMXh2VXJQd2xjVk5xZ0djWWZXbktnUUhuTjBwdUlzZS8rQnhVemVlQlhmcWJrUGpMYytYenVpNjYzMEQyMlZMaE9EM21YY0NJdTMwcmdBVG5LSlo0bXZ6MHZvT1FtWjFGTWJUOCsvMFowWnV6UTUwU3JNUW45Znc1T1lIai9EQU0zRFIvd2wzOEZNcXkxY2FGc1hwdm14cTVsUnZRU0ZSWno3U1NpMG1TSUZCb294VEVaV2tWZ2k0dlRIQnBpY3B1WWF0U0tYYTZTckJCbTBacXkvTCs4R01GQkhlZTJadGNiZGl1WmxEYXRQTW4wM0J3UzhyQ1hXb3Vqem5tNUZWQUpuOW5DM2ZqdU1jYWNMZDE3NVlvaDVkM3c0SXFkU0lhQnVsbEdyTjZuYjRBQXRGdHFDa3JyZGR2b1IyUjZpT3ZoR2ZkWWxxbDgyTzluVXJ2MWJiSTMxMHNCZU9TV3czdE5vSXRjQ0szaDJZNjdQVEZndzROZmRTSmpLTHg5T21zcXNDRk42cXRBM3FjUjRwUXJqOVh5b3hPNTliVU04amZWdmVMUFJLSDAya3RrKzNYR2dKcjJOMlFGM0N5V3BtcStvN01nSVFoVzFPMHFwZTRsVCtmdit0N01HN09Id00vcHpmemhTK0lPRG8zdTZsempFd0h6bnlFZkFWWlNzaTF1Uml6VXRNS1BTMTk4M3A3cFI1TlNadXNvRHRobmFIVjc0OUZFMDFjdElQOCs3Zkk2c0JOUFgrYWdGYUtHNWg1VGUyQVBlbGlCODVEMjY1RUJWV3duWnBTZ1ZmSXFsUExSYlJ2bTBXcW5ZdUNUdDRBcFcxUVpBMHRIKzc2cC9jd09NOXYyR2V2V0pvMGxOMTJLQXBWN0FXTGpqUlhHSmhSR2VualJpK3JtcjVtVUJmajZqK0VHWVIybVNJTHlEN25rL3hsYXdweFFZMzEyeG5BWEJKRjUyQ0k2RHQyVWo0N3cyQWVkU0h3aFUxRjdJbHNpSW9seklmOFRzZ0dNbjhZdXR1T3UvdG5oVGlMY2JnT2k2bHJFY3JwSFFueW1xaEdWOU5GcVN2OXZVSEQ4R0prUWNmbVp0MW1YVnJVTXlFZzNlL0pyVVNTNHI1c2FCTkVPWXE2dmwxbjljbEZVZ1U3OGYyYkp0RGhGc3lGSEhvSXZjM1dEWlNNUHBLRzkrUlE4cDZSMzB3ZjQyVjJTYW1lOEpuWnM4Sm54UXVCanVmd1lyRFRPTlJ2WDdWeXVCODdkdFh3Vmw1R1JOMWg4L0ttSnYxWDZQNms4bnJwdTBlbitkSzNGbFEzdkRyT3JRQ0hTOW9DSTZDNzAyYzAxTFdFTkVNVzE1SEVzeUN5eVF6RlBmRTdIMkt2cXUxdWc4WU9jY1g1RjBjem4venRnTjZ3ZG9lb05BVWc1T2JPbjFJNit5YnM5V0ljc1ZUL2xUOEMzLzJvMTJkUmdrL25YUHlwOThya3Q0VVhVVm1UalVpUG9oQnY1MkZzM1RCVjNFVm1yZStsZ1MvdERGektYcUxmaVhkNzBXaTBkU1libDJnMkxudFAydDFBeHErTm5WOXU5WUlYTVBDbFJReDVmQ1JqMFFyYWt3VmhLMnoraCt6S2k0Z2lGZlhNNEw4NHFUaXJpNzVmOUZzb0V3K0ZPMFZFQXNTM2dlZzFXM1VwTUVwcWFsWmtSbW54UEhSZWwxOHJDY1RiQXpQdWRRTE5OK1p4d0VLSGhvakVEeDVjSDNyK2s5WDNzYnBTdkQ5RC9aZWhVVFhwU0NMQjc2MVVYWENSU1hxa2JBZHhlOFJOUGZvWjRsMFhnQlZ6NzcrcHI1TUZ5Zy93a20yVnFKTmFpUERjdUFYVXpwMTVRQlQ1Wk1jRys4eXJ1Y3RiSVM2K2xFb0NaSElFRjc0aGxMWGtremY5Uyt5VEwxMVZXZlFVc1lrK0xHQS9SWExiVzZBR012YmJiYmExU0luTS8yWTd3WG96cnRzM1FRMEI3WXJqYkVZR3M1YzR2cFhjQ0RsaCttMFk2S3VVVEhFb29ad1VNa1RzeENFbjV1SjJFUFppZHN6d1htMlVBNzlXNklMNHFuL09JNDNYakZGYS80akcyYmFnaTk4K2NLSGtLbTFHK0YyTHJxNjlXTWtPZ0hRQ0ZPY0NPQmFoY3h0RnN4ck5wQzNMTzZqZENrWWtOd21OZjhKOTFTQTZvSm1Pam9RTzhvVC90TTV5YVpkTCt4QjBTdXpRUmorZklLZzdoOWVCRlBmbWtjYkpza0FSdHFrYW40dWd1K2Roa0lUTXQzdzJyQnBVWjVwdXpzM2grWkpERVhqenBnVDRXYnpZMzAxdHBmNjI3ZHBjdWkveUMzRmVGVUczY3p4Wk9wazExWEdjWTFPcWZiUnh3NHR5OVYzS3psaVNiNTdaRFBjZEdxNGJkS1BMaEVicGNCSmlqUm4rUWVmVXl5ZHlEdnVYMXlMb210cWNRa1lZMDZyS0s2Ky9BMzRXMFpHZjk2ZGF5V2RJSTI4Y2J2QksxYlVmN1FjUjgwSVRSbFJKOHM4N2xPUUxxM1I3UEprTmxyRkFYMDhQeDBrU2xiRk13OWx0SEFhWG45SXNIR1Z4VWc1OWFTN2JJajgyMWJrWGp0KzMrT2RwK3JadnhVVXk4dE1INUFySnJZSW1zM0FQOWZaNHFwaWlPczE2OUdGa3FyVmRIM2V1WFpIWkdyZWh0NzJkMDNlZ1JpU21ZcE5iUHI2VzJGR0NFSmZMVzFPdjRuRjhTUDYzNGZQNzlUbXZHWldrQlhiMEpVcXJhaUdrVVREZmdLaDRXMVlNcXFqNnJqc3VDZFVkcWNlQUUwUTFXbmlLb0MxR3lsTnlsM2VwcFYra3c1TncxaUlMWVVBV0ZVbHpHa1BsT2FjTzAvZllac1FDSVZoQ0JDbVlBZnR5R2JzZENZVll5YXcvT1RzMUcyWCs4UG9yUEdPVHc4a0hqeFVUUnlPNTRBZUFlQUM4Q2xSdWNEWndodXl5VmRqQnZNb2NqNVpqd1I3ZTI3WFNqWjdJVlJ3djEzRWtXTU4vbno3UjZMNENBZ0lDQWdJQ0E4ZjIvU0IvdCtpcy9aOXViK3o2OTcvYjlNSCt6M0IrYjdmcE4vMFBvM3I3ZnRHcjdQcnE5KzM2YUQ5dnUrY1A3UG9aLzIrLzUrMzdDWDl2MU9mZlY5RWYrMzJZdzZiNExxaCtwcGw1cUVzRmcxZ0xwR3NTRWxWMkNTMVZpR1pjUEVlVUtDdjlaaE9TRE9KUDZUaWJEeUlvcmdMNW4wcU1Yb0NWQ1VvU3AraUZOeEphSUphaVZLZE1vUWRRWEIxblFUT2lMcHZMTmltTjVoTVd4SklVWDdkeGc4T25Ib2dnOU1zYVQ2TFU1bXhaWWxGZElVZHJUZmRzQjhjTVYxK1pWWGg0TUN6a2x0d3F5VWhUZjJjZjd3dERPQU1Kc2IxUHFkMkNESWhxNzByZmpqb2lCcE91YjAwNWFEZzRuZGV2Q2pQbCtvK2JPU3QvY2xhTHg1RWVCYW1SME15b3NBTDdUY08wUUZFY2RaR1N3RXNUN0lmZk5zUnZMYncyOEFsV2tGSEZ3VXRWejVQSktDQ2tKQzhtL2JMS3c3YTRrM2plZ2JQVVRUa1FzazF0VUZCdDZYVGtINElNajdpSlBGYkh0aXhzb1Z5NC9TM2RMVkMzSHFXM0I5TnVXWWJ1ckVZV2lSOUFpUWZieGVEZEZ3R0xHNW5QQm1FcnpveDZJc3FMNm4zUExNZDhxZ2pFM1Jxc2ZVTlpPUWdsYXNVNmZta2t2U2pmOEUzTS9UWlRFVTQ1cENEK056TEJlY3pPWG9rdExtQXd2L0Rqa0lDMUVOWHBEcHNhbkhaQ1BYbU1vTFNheENXRCtpNFpjcWhIZmttaXZ0UXEvdks5a3RVdFIxSDlyd25tM1hPNyt4a0pHNkpob1AzbzVHS05pemkrVXFmTXJEN05BeXQwNzVOUWdOU1l1c2RYcjloZDVmQ0o2QVV4QWx1bU1tczk0eG5LMnFjUWoxTFkyUUNmeHpLRnhrd1FsN2Y4WVpIQzZ1RVI0b1ZOTDR4aUZIUWc1OGpSdlVnVzVjTnpkeVFsRVZ6RU9RTGRtVnhvaGNhZnJCMURoU0RkcFpWMW9UM3hUTjlBYWloRFBBcVNwWmpZUkZCbXl2SDluM0xwZGdEQVg1ZzRsckFsYzlOeUk1d0JiQlpYSzBjOCtCWksza3BpV2kwZ2VBNmg4cDYvUUVXaUs4QVhXRzFSUlR0d1dXZmxSczdxOFRCWGlwKzRRc21uL1NPekt4MlI4SWdERlRhdWloQW9Wak9GUy8xR05jaWhKd1UvVlk1NHd0akw1aEtJMDFuWndHYXhGemd1WXVsa2hvUUlrYVlIa0tNZTJDR3dWREFlTFZwNVhOWlpLNFFzcStrSHRJcHRoRGhhd3pRcm4xYnVyeTI4ZkJUcmhNWWZNWWhBS1BQaUJhaDJYc3NvbTczaVBTVzRZQTRKaDBYNkY3S1pLRHZ5YkpzdHJzNGl4eGJkQS9WRlRKRzlRVzFRK2JVdEJGclF3anNmaUoycU1lT3NpVjl6NFk5WCt2ckE1SHQzZzdCUDlBcVMxclFGZFJYMzNRVElvdTJ6SzBtR3BXWG5zVUl0aDZkS3BCZGNUQUZoS1NsQWEraTdnbE9xRUJxTDV3cHJwZys4MnBvVEpPR0FwYUlrNDFqbVJ3VC9XdERiYzVMM2xsTVcyMk5jSTZTWHVhWm1tY2VYWWkxZHVpdVUxRUJPZVJWQTR2MXZaQTNBbDdXMVB4QUlwSW1hLzZQMW51aUp3UklkbnJ3bGFuUjJGNnNXWGVhMmdOK0gyTWk3SC9PUDZ0Y2RBSitFeTY2dXJNenhKQWplNTVNRTQ0UURDeTUvaUxZUHZhMmd6eHRZRkc3Tmt2SFNydHduWDBpaEZyaUhJR2FvUGdzblg4NWM4SU5Cd0ZTSzlyWUQxWmZOeEdiR2hIc2kvaDZUcnJrL0lNS09wNGlCM2ZKQmRBUUt5cG0wNytVbWkwdVNsMmlCOGJ2U29zcXBNajAyMVR5N0NkNVJnTW1YOWNGcFBqY3VHQTZwQXBqOVdSQTRsSXF3R1AxRjZFdEJ4dnFHOFFYQzE2TU1IUk5IZE54N0pHbkFqa3BENklkT01mWHdEay9wbm93Sm5DRFBsbGExQURES2FMeURxSk1JNmFEOWtkQmdEN2JhNWNBbVpFeEtsMVE1SzhicnhQaW9xK2VyaUh0WGt1WCthQ3JxZjFIUU92MDdqcThFd0RLblBOQThVOGhPaHN3K3hoYzR6OVRMVHJLclNGUzBOc1RidGQ0Rlc2NFpxa2prMmtraEZ4a0kwN1hCV2NEUWs0RUtLYmFzOE1WcVgrTGV5ME9JSWpocmhpOWdtSVBwUnhOVEJGZE9FOWxkQkptL014Z3FtYXFRRWs1SG5hMFhuREw5ODJQa2xkSnFwMWVXQ2lLcnAvVUtpV1EzUC8xSExmUU5vRmxzZkd6Z1BUd0JKSEoxMVpxbWNuRk9FRThGaVByL3BUb3lwa3lTaTdad1pwY1Ztakg1K0s4cXJWMmR3UEFKWEphN3BpbHhEQVMvY21PS2EvM0pkWXJsdG43TVZ2MVRpRGoyZWhCSXRGbytZaTRBMS9aUkxkOEkrMHJqQ2U2SVY2Mk1rRlYrMXNKdWI1ZUQ3R2VnTTJFRVZRTzFHUzRCSW9MeCtjYldxS2xaRlVwUTNOV3dRNFhOUy8xdzQrdFB1THpVbVdLTVFoS25rN244cVVzcFc3VEZNZGxLbWF2RzRpWDZqcDc1d2xoamE1c2lYSERVajZ6VWR2U2ZSM2JGcFVoZzRIVDBZd0drWUExZ21nRHVGYWdvWitYazFHQmQ1UmhhZURrSEtiOHdLU0NXR3RtQlFLWlhnY3F0Zk1lQ2JOZ3VBZGpTcUpZbG9aalVnTFVVQlRQWWVobUVkaDdBV3NQdzlRbWtxNzdBbUNucXdGV3BTZmJMWHN3NzREVzRoZGtKTHhYTFVFQ0VveXhHZDdBR0UzZWhhMFhKZ0FLeDFXOEJBS3NTYlVad1hPMU00eGZzWFZ1TVM0OW9JY2habnQ1R3BoZUZ4UGxJcXZIZEFUQnJVam5uR3RJQUFKWG53Yzd4VGhMdGdDTEdnT054d3QvdFBaWDNWamZMaldYSWNDUmk1SXI1cXZtRjdyOUdlb2owdktsVllBUXFxZlB3RE1sVVNIc05EcDdERW01amw1c0pqakRBTWJYWFhqclByRzcrYkFxRHFyR3c3dEJiMVZGeHdCcDU2YUwwaFp6L2xudHd3T3p2NVk2Rm9Cc2p1Vm00UXcxOUY3SEcxdUI3V04zTzBvV0tsMGdSNFJPTHdSaVk4TlJZdEpxbkdJN2NpS2ZrYXJFTU1GRnpqOXpiR2xuSktpK2wrclluZGRqUmw1WUlsWGN2Vk5MSnVJWkw5Nkphb3dNdmwzanpVa1JQUUtuNE90TTFibUpnKzB2TTZ4QWxJNFZKZnkzRjBFSFZvaHQ4WXJVc3o1QTNLZDFLOXZXN2FqNW1nV0pQdGJtOEtncjc0NjFOcjhkbXBNQ0ZmYlJDbVNCOTlLZ3BEQUQ0SjdLd2FicnRMQk5hM2Z4NDFuT0FtallHMG81SitkMGRvMEJpYlpaR1Mrd0t2MGVlQlBQdkxEYjNXZmIrOUtSK01GdlNJd0NqN2RRT3lZSUJ5L1JsWGp2dVJhVkN6cG1XcVNZaFRXN21DTmZJZEJtZTRXdUpaUW1ISWNCTEVoN1RHTXdYb2ExMXRad1ZOYnptTmlpc3BacGlTa3gvWWtsYmhCTWg1czBTdmJBS0tKMHp3U2ZyRFZqZ0o4Qks2WGZuemZTTXRXRzRldTRxOXAwSlUzSUp4YURrYTk2MC9YMWJGTmRzazlVZ1pDUjEwYit3NXB4cS8xZG93ekhLOFlGbU5qZmxoOUtwb3RFcVZ0dkdkdE43VUorTUd6QXhxUkxjaTFjQ3VUUDZON3QrKzR2a2tjS0hQZkVORGN2MzNCRFlQNWJQc0RNOHRMUWUzTFF2RHpyNmUvY3YvZkQ5Y1pkR1c5RUh6SmZMeHZHS2NtRmM1U3R2dDAvaURRY3RCaUQwQ3NmSVc0dXZIRUt0WjdJV1pBRjJLaDlLWEVFVCt0dlZGZld2MnBwQ1RPd2dlQnJJQ2hKL1gySm1wb0RuNFZ1WTJHKzc2SHdudThFbC9QSjB3Kzhpb2lzS2hINFVjTFMyWnppbHdYeW5sOTJrL0RZa01JblFwM05LcmFnZkh5ZGJtcHJtZk1ONlNaTmplSzQxTnp5MnJjSHo3WXgwSVJOczVROS9HczVybjZuZ1dBVGN1cC8ySTFxQzBIK2RSWlJKRzhxQVorVll0ZWxHRlhmMXd3dlRVWUtVdG95VE90NFBWWkw3d3RNT2RDWE9mNjdkOTRUdEJhU0d3azdMTW1sTDlhOWVFTVhHb2FkcmpSZVI4NTc5NmlFcUQ2bHlQWmpvbkRWdklyWlI5ZkQ0R0swUmlHRWNNR0ZwbTlzOE1pWHNaMGx2dUpCQVA1QjBKeWZvc09XU0NGS1FzVXY2amNxV01oRG9QVy9IMmpPOE9RT0txYzZRME5FNVN4c3JMT2ViT1F4eUlyU2JUTVZoamZWa0p3L1BvMWFLUU9XMEw4TExicmM3aHBJajkwMlNHYlBBTk5xaE5td1EyZEsyaEZQekJjYjdvZVdsUkV2ay9JQjMrR2FqYjdGVEJYQnJSVDdCV2NVMDNIYjdrTk51TmFzVDd4Ni9zVHdKWHV0emxadEkyZWxkbWNGVTBGaEFxdytyQlVCa1BmR243dVovZ1d1TDRFWmxEN2dhQzRELzNiUnJpNTFrUnBEdnh0ZlBtTUxMVDFTci9LUjZNM0xxU3F2MWQvclJSWXJ0bFhNSi9TTzNQM01udUhtUVlNWGJBbW5sTnkwZ0xXTEFxRzNKTlV3OHlURkFPSzNqVk1PVUdtWUlHMG5JM3V3ZDhWQTBtTzh3VXliZWJTS2dYajlFZ2VsMk5RVjY2bnVROEZ3N2E2UkIzT0xndUl0N25qbHZVSTZ1ODFVTGNqTitVVkZBZEFiQ2xqbjR3Zk0wRWtvLzFOVW4xckdvZ2pVTGFZbDFzV1dTR2g5T1Rhc1ZKTHRISDc1SzZMNk5YVCtqcnlVZFIzZnMxK2VtZzZtS2pBRStzb1hMcGVrMkZIUjRIemdqQzBsazhTTTR2b1BWUlNVcWRKanpzM3ZkdGZhRmtLa2FYc3dFQTI0bm1FVkNwQzRPbUtNd2lJZWtwV1BPTjNPYUk1ei9CTnlrMm5aYVFUSkhzeDcydkx1aW9NRDVrQityKy9Qc1RsUHNRWm0zSjgrNjhsL3hDVm95MGJwWG8zMWVvS2Y5N01ldHBreVpaeTdVWEdVdXc0ZDhtRWxPY0hyTFVBcENjMHJPWWl5WkUyUUMyd1FvYmo0cFNXcXF1Z0VGNFBjWmlBd3dBY1lON0xVNmN6bngvUktaRE1XSVRhT3dVNm8wV2VhenVjcHBpckJsU3RraStzeGp6cjFzcVNtSUUvU3p1RHBwd1VacUJJd2VaV0NNSmk2dTFHYW0rVForRVlMMit4ZDA5dzZIMUM2L3NxbmEzeVYwV24yRWxPek1xYjRaVFp2OE1VR0NrQ3dzUHprVjI3REdxc2NDV2QwSVNFR3F1M1lRSGI4eDBxZWRFYXZpMDBJWWErV0JlNjE4Y0hOdXk1eThoWjE2ZExGSlZpd1hrUGZ6cFFyQUNHaEJ0QVhiMmhoTVd5UnRHZ0NYaUFrUUpQSGJoYlM0aVF6VG1kL0pLaXpBWnB1aXMvMWdMakw0QjZhVnhQd1BmMDJkVDhtd2NpalMzNlI0Yzd6a3Fxbnk3bHZYWFp3MTZTQ21ZU2ltcmdza29Wckd4MlQzSGlWTWU3WWlGOGp1NTJUWjhlR2VTcmVoTUlMS1FBK1ZscXpwRGxNT1l1VDZxcXFKZVJBcWRUUmtSb2FOQStGS0xuTUw2Wkh1V21GTUM5cExicDRCdmZvY3oxNVpKSDQ1UWtiM2E2c05FSUxCUWxwbHdwd2c5MDVnUkxoYUxNK0x0MDVsVWgrVkFKZjBla0FiNXVWaURoU3lpZGs3Ni9EdmEzODJQaWhMSEovcUMrN1FWVVFSaU5EQW1kRjhYTVBGUVZmbHdWMEdUdnVHUlozNTdiakVya2dPVTYya1orWWVXT1ZScFFNY0hRN1hsQWpFeENDZHFYVUNtbnBuTjc4dE9RemdRdjVQVjFPZGJHbjlNV2tqTmpaZHhWdTdCek5iZFRhOHBmK3gwczg1SVFLWmNyUEhxTFcyMGVNZ0hEZFRPSnl2YTR3RnRmR1A5Yzl1cE40ZGFMd3dtUEN0dHRXR1NZR05WSGN1b0JPWVhxRFdKc3NSRTVQMWJ0b3hqNTdjNjREZnQvMDNxb3BzNmY4SWhOMTlOazZJNnZRTmhlakpaK0hWMmJJLyttcFdVdmJXazgyVXIwa2lnTFd5cm1QQVU3blU3dzJBSG5zcFVRdGxJTXBSNHZPb2twSElNVmZBN2s5VUd0dkZKWHdlb2c0VzJ1YkU2bGpueDVEVDJ4TmlidHlUNllZK3QwOFl3OFpTd3UzczRzTWhDVFdVaU1heDNJcWRtczZoM2gwc0xEc2wvVjZ3V2pRZ1BkRTgwWkFoRU4zdnRjZkZHV2dNbW9xbGp2eGxxNUVib1oxYjlPWjV0bVRub1dvQTlHOFV4NGJRbnE0NFc0aFEzT1RmNlJ3emZCMnM4REhmQUhYY1M2bmgrcTF2OWlYWFpxZ1FWU0paZFJCeWJqK2xVK0g5RUNQU21ZUlNYRk5hVUJrS25Qa0ZNZGxGSzZnWC9ENm5zK0hHWVhHNktvWmRLRllGSzU1QzdLRHM3djNDdFBXMTdxUWkycTlHVzdLZEpqd2UyK1VpNUk3ZC9XODJFSHR3ZGJSV01jZFVLZGdhMzlzdW8vRTR1ZnQ3NS9qRTVKQzZzRWJPYWIzZ0ZpWmpESnR1UGNtdDBTMHNPSUNRdzNhekJ1Z0tFWDNteXcrRmxkZjlJUGx1a2JETFVEbWg4QjdqeWVxVEczWnhuR1QxVTNFeHh0Uk9Ca2dDOFdUbWMzb2VSNEFvY2ZLTGdzMkJzaUpFWDVoa0grNkVzWk40MGF6ZXpUaFBOTWZEOVcxYnBrUFNyQnB2cStEa3V5QXJENlUwdldRTXE3MzNnOE5RdXFoN0FOY2xZRGRSVjkrSTNjajBYSElBc2R1d0w4cWNXY09aTG1ySUtUb1IyMFpMQmo2NlpRa2krUGRXVWMxTUpvYU9OM0lnNm56MVRWZTV3UnNPQzhhVWlUSnc4elNqZUZJbVNmS0E5UW5SM2pmWHlnaUlEN044QWpxeTVVNm5GUU1uQkN6MU9jMVpNcTFmaGNKdzBLQm9oendlUkxpcVkyLzRaNUlnZE5ia2NhS3lCRmFQaHd6ajJMb1EveXR6SHZISlEvcWdwcTNvWkFiU056RERPSkN1cUpxZmkvTzJvY2tFcGYrcktJQlBGMXduQVRKdU9lczBORzhVdGpQVDM4R3hEckpxelo3QnQ0eS9keXI2dXB6Vzdic0dUdVpTWkgwcTVMUThpMHVXOVloQ3lncXQyMkkyMGxDNFVoQ2d1Z3NGclRibTZWYXJrdGZRSWJ0dTBlWDhQc1ovcVZiV3ZNQzZldHppV3hKMWkvbTVNdXdqSkRyS0JzZkNIVVJJQTB3UzR4aHFjdEI1ZytZWWhVcUxuRGpQSUx2VWEwYjVtQ0FEMXFPSi9LdjU1SUF4R1pMOGd1Z0xyK2Naek1sZlFJMGdrTmtuRGE0cXZmS2lPQnNsMHYxTEh2Z2NoU1FiNG5sdFc3b3FYNFJZdzN0MllCczdlVzlMOE5TK3hhT0VGMG1CNmxBZUIwZ1Q5alJEWmplRzBWU2RGdFRNMUdpS3JKZ3VKY0xnQmlxRDFnVlRvbDRFbFkrTlFtLzdHQUo5NDYzY054VUZQeW5LYlVrUnpDM1Ntek1nVFdadURCWWlWRnlqclZWZXZma1hFMXpBaEtwKytwRllNTUVpRWt0bW5UWFJuL2VpV1FOOFBiTWFnZHhZUFN5U1dMWDFla2RnNDBCKzNvRHRxbnVxMjIwV29peFZ2RTB0UWlMbVM1Nm5IOXAveUZCMWd4c0kxRDM4WUp6dzI2elJ6NEJGVnlGRUhhZ2toWmZjL05oSUx3VEFMb0FBVStjaHZrQUsxcEQ2Y0JzZ2o0VlZML21DT2VOaTNHNHR3SE5ITis3OE5XS2pFY0VVcSt2ZEcyN0w5OGpCcXJkeG5iR1Jkc2FuNVJDcHBsL3hyeEtpeFJyWDhibElob2FkQ3QxcFZMZDduaS9rR0FjTDNGMFFtSXFucWV3RDM5dXoxK0h3c3NlTTkramd1c0I5UTFuZCtHNHlIVXBzTzNtKy9kSEk0RFc2RnhDUUIvbmlHbHZhL0MvaDB5bUpkOWdTR0VsM2dkNU9LK3lKa3F1QnlNSlNFQURvaG1weGVGWmQ0ci93TWZMNlFBc1dQUExmZHI4S0ZuUS9JZkNzMHBiMUg4QmkwM0pGdEpXTGhQc1BuZkVVL1JPKzMvelZzeVZESkg2SVNLc3kwM21WOWpyRFQ1YjYxS0dkRE4zZFM2bG1rZjM4K2RFbGUvSURvVzZOSW42YVJFalpsdjdsZUJ0S0xsN2NPelpGN3hWOEd0cGg1MWZWU3hRR1ovUFBTL1NYcnBsUzM3dnowYmI3eHRSY2pUeE42T0ZvWlZwTlN4MEJvSmlOcVAyWW1JUkY1L3lsK21FcWFUaWorSUxWTHBYcU5seHdlZS83eFlaQzhqa1FzR1NFZEw3aHJVaGNzejN5clpwb1d3ODhGSzJOem9YTUd4elBwSjNzUVVJOXlmK0hEU3lQMzhzU3dnemJ3eWhZc3RYMU8rWEV5MmhNemMxVUZvNTJNUDhMZVJHdy9EeXRNbUhSNml3V1Y1dVRKNE9SWGE1bEU4MysxY0JpWFVFTEU4bmlPY08xSlBJZFNnRmdPYzdodExuVHFGYW93UXBGeFhrU1ozUGExUytlR1NyMEhxWkszVEhaUU5EaE9zaHNXTFQ1aE1WVlZkOUdwcWIwUUlqalpiemhoc2lQWW9RNVpGQWpLcDBqU29PN1VmTW91Q2orVWJNdFR6c1VYcXc2bmRNMFpjL3VHNURJZm1HdHpvaW5kQ3EzNHIrOFpFcGNiMC9CUU9UUnJIeUVhMkJMdk9odGs4ZTg1OUVlcmxpYzRybjJRTEUxRVNwQ21QeUhNZU5adHBtTWQxeHNyc1VhTFFFekxweU1XdlJkNDVLRnZqN21jdWJ5Q0x5cWZ2MlExemdmdXNpclROREQ4Yld1ME9reFhuZTk3ZVU5Vmt6U2IwM0RCUWZEYWluUldGZWtUenMzQXJGdEduYVFabUdvQ2FWMUtYdFUrVUhjQzBMcTgwLzhtNWtpQlE4N3RnL1R2VitLbDNxSmk3R2swUmtydFZRRkV3b3l4TW5iSzhKNW11RjBQY1lkdWsvYmFSS0VjenY5TklFL2NwOUlSR0NiNlpVdXJab0FjeG1Hbkt0YTdIN1ZXbE5WalBDV2ZocEZoRHFJRzI4TFdpRlR4RjFxcHlrekgvM29JbHhhWUdUaHVIYWx0ZFVBVEN1N2w3NHhnWmdWbDlJQk1RRDFuWFhHNkpUbUk3V29Ec3NyY2VwblcvZjVRM0htSDVUcHF6RzgybktYazBnMjBzdFRacG80cWlkVDRvaW0zSUF5eWFTazVock9HNEZFS2pvcm5kcWNWbUdjUUR6OERSdXpNdWMvdzZMYUlvVGdtUElENGJsbU84bHFvRS9aZW5mNmxoMkJFMXZQL0d2c3VYWDVwZlRJeFUvdmRlSzdBTVI1Zjl2RkJQTU1iWnRWUis4NWJEQmpnY3JHQ3ZFMEg5eUs2bGUvZ2UvMHphRUpjTlNmZUw5VGlFTVJlNlFQQ2ZnKzNEaFhNdEVQOE1rUUVaZEV3RkZkK3BRSmFDMHhaWFFHRlUzcjl1dEpMYmpCTGp6ZDVlK0Z2S1BNZXFaYXNTd0J0anBEcU4yY0VCNEwxdm5QMTdIQWphY3FiNnp3SFVIL2NxbHYyQWg1MXZ2SkFpeWpSNGR4ZUE1Y2NaVis0VDFNbGIrSjVBWVQxY3VNaFl5QlFQanJxTm9TMXpSUmhzU04vc0l3dGVDUXNmZEZtaFZkSTZ3WjhJVk9CUDRiV2FkdTFETHdCU0wwL0ZacTU3NDBNUlM5eXB1UFdmbE40aHBqWjhzK05ZR0RwVk5Yd1BPSXpPdVd0cmlLaTF0akU4Z29rNEVQNFBoVkIydldMTldDWmZSQ1RPaGtoMXhuSGY0S0M1QWNXMm51cnpqazlhbWRkYndGZ1FiT2FEamZpc1pSQ3Q3a0NHTTdBYXpXSjFIOGJYYkNKTmhVc3VMQVF4Tmx2OEsyT2ZrUkxUb2dQdDMzdTM3cUVxNHROc25nWENwMUVlR0ZRMFE2LzFPWXg5Zk1aWWI3d0pJS2pKSGRYTXIzR3JVNEFPbHhpTFNuTVBjWTdyc0JWZWY4a2hsQ2hYN0FPbXMvTm5Wb2xid2MxNHdMZDQ2SzZENG9FN2JVcjlhUldPeXNQcDZZbTlPeElEb01UelUrc1pnd3E0RUEwbUpvTm54MWJuOE1rb1lqSmlJKy9hNmtmN1dzVkN5TGhiTWwrYjVCb3VETVBCM09WV1JDRjJKdVd5bVorVU40SjdqcXB0NG9mOXJmWGtmdUpuMk42cThnbmFQQXgvUW53WGlya0lza2xVZTEwTmZiWWdZaU5PVW9iK0F6QmZTcHRURDYwckMrRmllSGFuMTBPK3hQYzBNNTJUZ1BiS0VEelRNWEl5U1d3MkJqTldSWjMyL3BLdW1FK09vM2VCMHJQNGRDV1lEWWZlMVJCQzlnZzE1ZENDTDJjOThVQllXbGJYN1I5ZmtLWit2aEVabXc5Q24xcVpuZmFoUzdEcWRyNDlUa2Q0cXlmNjNUMnhNTVRvVGR1UitLYjdBY2Z0dzVqOC9LanJhMXAwM29OaTZLRVlnZVNoY0lxeTBrN1p5bkRvK1kxSzd2clh6UmRmUWN3YlFTUHU0ajJBMU93S3ZjblRSdFVrbEhvRGpSelM0Y1VpRXk1a2Z3NS9GWGRWVXRWdG8ycjhVQlRoNEREdnFHekVmMzlWUE9NOHl6WFJOU3dtL0hsWDdlZ1JvYnhJWS91UlVvZm04am14YjF3ZktpRnNWUDhsVGduSlM0TkQzYlZkV0Voc25Ud3U0eUZEUGFGQmJrVFBIR3FBVVBteU92WjVsRkxvQTRYSHZYQlRWdUVDaHRDMnVkT1hvbEMvazRYWDZQMk1vUTV6K2cvVDZWZEJ4TWQ1TlNIaUpTVnRubHd5YVAwd1lPaWtMUlJCM3dFRHRZZ2tGYU0wbHlvaU9QZ2FrSWV0a0tQWmMyQXd2cUlxZFY5ZjNHSUNOeG9vd3lvbVlDWXZUSXErNWdJbXdvbm9JLzhRelhsMU0wa1Q3dmxHZjlhL0RQU2FhajJKSy9lb2lEZFpOeE1WZklKNHlGY1JiN3dnMUZ2a1VVaEpISHNQVWdFUEg0RExZWnhJaUlUSWRCczB0SEQyelFvT2crekRrQTl0OGF6WFlQS24wOG91TVQ1b0QzVG54b2V1NUxKRWJtbTVYYzJ5NUM4UXp0S1hVOUVxck1CNitRWUNJZ0lrMjF2L1FLdkdVeXovallpYlVXTFMxMmJlNWpVdzFEdFZXSUZOQmNBbFNOUjZtNlpzOEp3Z0pzSnJHUEFEL0h5M2tTSEFJRnRhR21ldDU3bC9QbnRqa2NEbis4SzFDWjRhWlBmU09lQk4vMitVSzRCM29MbzlNcXlqRTA0WmJ2aXJoNE5zdW4rOURsUklNS3RxSUJ2VW9lQUFlZi9TNUNuQnlvWld2czZueGVGUi9adGFWbFFleFhDM2pRNHNrK3krREsxZVFpbVBDbmRycmJpZmluVGxOTkRBc3lCbVRBRHNpT3lia2pycU5ZbTJ4emFMZnNXVWJVZzFkUytqaStIdnhaQnVqN3c5ZHVsMTlxU2JLQmRjakVJMUFzbk1vYndxQ05lM21DcktROS9UTkdzd3A5Z0xaYkNlend5emtLSFN0VnRLdENTNzc1b04yZU5SQVhnWkJaYVdaNkVaUWw0c1NGc3dWbUJBd0Q4OWZQZkxVUE1RY2kxbVFRN0dZQ21XelVKSTVYQmpJUHB6TzJpUCtXWVRGUTFjb3g0NG5PSUpyMmR1WTBXVHp6Z1RBQnFZOG9EZm5GaU1BbC8zNXg3a05SdmF3SXNGYU85L0J6cDFYdmJZc2Voc2hXVkFpcFhERFV1RUFvMGdteUNzSW9aZFFWZ3BaWEwwL3EyekpyUmFVNGtpQVNWMHN6TzNXcEFwQzFhZnBoLzNCY29KNGJhbE1Dd3pKaWR2ZjltZnhZYmZJTWFmQitSNmtLVEdIeTFTVFNZaTFmRVAvUDdYQ0x3VEdtVEdBckNhUVg1eHQ1R3MxdnRjcy9QcUlFeEdwVGdCblVLMDRLaVBvUTRhWXdBaU9kMlJjSlZ4a1FLeXNYcjBrY0g5TWxzR013L1NnWmVVWG9tcnNhZ3RhR2xkcjdWOEkvbkVwUWV1M2xYL09OWnlWdDEzaFRkR2dBdWpHNWx6NVhVb05NcHZqM2hXdkJkbEtmY1h2aDZHWXF3dTJoeEdFV1dSdGc2b1h2SnlRSWtWR2FFaHd3dTFjM3JuOEE0eW42emRVTDhHVmdtU0JBVE5DZWhjMGRRTXlKcktrT0tYQmhaMWprcHkrN2g2UW4zbEpTbWlzSjJrRmh1Q1NIbFhQVlBwalB6ZWg0TGRrTlBjNktZdHNGeTRhMFlIUWtXVXR6b0Y1V1NiSndsTnlMdGJJM0RVd1NLM2xSNlRaSXg2NlBaS2ZlRi9QdWxXS0RVUVErMEJhYWNqV1dienQ4OFJCanRJRWhGY1lzKzgvZWdxTjFrTFE4TTBmakdQZ3dqQzVEWFA4RWRiQ3FFYXRjb3ViZ0s3R21GVFowUDdZWHU2RS9MZCs5Um1ZaDJCMkpZWG5EV2g4WEtTdTdrWlJhdjJPTFJ1TnJHM0E3MEFwWGJsVXprNDZSd0R3em1LSnlZUDdVU2tQNjFsZ25rdmRKQ3JqcVdXWnNwRjRJVzBFQURmaUJKL0dJSkhVNWprY1ZrUjIvcTh1ekVLSlRHRHNyYklIcjBoVG1RZzFveHR2QmlieHhBMGxQMUJrWXYxc0xFZTFhZWFQeFhEQ2lRbXozaGIxaUwwTVloNE1WNmRBcHJ1TnFXTFdUY241ZGp4d3A1bU1nQldhMDVsWWFERWd0alRlU0F1TmJ6dXlNZGFlcW1SVUFKVmtDYVI3MWNxU25FYnc0aWNVaTFDS3c3VWN4K2x2Vkp2aHlZRXJzZW1OV1crS1RWMy9GWkNHV1FsdXcwaVZUM0liU1Y3aExvaDNqcXVnTEtCR1NQWkhIS0tyMWRCTUZhSkVpUk9pVmVZTGxTVjNVOTFxMGlVQ3hIYmNTVFZ4VG5GU3krWlhtTXV2OFQvZksrdnV5cmo1R2cyQWU1NVVySG9tY1BVQzdNNmgydmwxeWx1bHhYQWo1WCtlVW4yN3BtTDRJWERCVjNtcmJGd1Z4enRwZmdQNHpobkNhMGxFUzd0ck55VmJjcUlrb0crUEtwdDdVcnk5VllqQ2NtTjFiYVFnaFF4L1RrSXA2a3pDZzBsVlplMFppUlpvWW95UlFtWFdZbjBrbHloOU1QOHMzOW5OaGxsdmZqMnJTMkc5UDJVSjhkM0V1TldmWHliQlVGVnBIa3BtQ0diOFVYRjc4RndBS1BFM2dHRm8wbFJTYTkrTjF1cXJDZkRpOFd5SktxSFhXd09CdWRDRGdmRVhTSStBeFArZTZ6aEVhVzhaeXdQTHdHR3dndXdpN29QSWg4clBlcHlQb0twTUdGN1JmUE1vSE9ib1FpcnE1RjNmNUFsTWllc0lhZ2Qra3RKMWpmM2xuMDdlOWtRdTFZK0tOOFJudXBiRUs3NndiWU9BUDVNWlhOTklZMWFRdlFuNDhHUEtVckFtaHFXNnExWVNZWGNrMDN5c2VReTdxR05VSHByTjlyZ1l4azhLYnZOcDJNV0wrM0dVaWJCcVYvL2NWZFdGaEtMQm5PUDBQZ1RRTFBIbHJISUF4bStuY016TTFKRGF1V0w4RWJrNFVZcjZGK1gweE9oYjRncVBNQ1FyV2JTNG5TeVFWZU9wbkQzSXZlUHc3eWJFRXRNVTJTUm9waENOaXI3ZUIwS2ZJNEZrMU4yd082OXBrNnVJQXg5Q2pFcXZ2WVVOa3ROeFRZU3gzWVpHdWM1elBhZVVGa1o1YkVNWk1TOXlSOWMrUmtlNTgvdk9PMG1rMHJYa3JlNFpTaVRwNWhwejNVU0JFUzRPUDFHQll2eitndWhTaUJSaXNrRUo4MGNzSUM1UkU2cXgyRThVQnc5SEJqOWRSV2FlN0JzTHVqdllzK1pqUlVuMU53bVkrV3k5VVhBSUVLN2NXb01GNDBJcDdKMFlkaGRPU29sakNLVlJLam10ZEhtaWQ5SERWV2l0eHpVakxJUU5UM1lIRWpoQ3o4Y3FtdEUweXFtT09MakZaUjlGYmpFTWpzSmlFZFFKUkEwOUs3UnMzWjBpNkZOTnlrUmpYeVRzYXgxVE1yZEwvaURjUFRoNlBtNnJiVDlJTVBRbThyeE50Q1FMc3A5QkEwQ1dkR0xzQjFwQkFibjdqblJzZEoyYmNjblI4V3Yzc002RHZuSkR4Z1JUUDhKV3JFR0xJNkJucklsbnZoL0MyT2EzOTJDemEzaU1SVXJ6K2FIOHd3czRHUlpxQzlMbFZYWWJaUW40Ly9WODdjckF5YXNsMWoxZHAxVUYvSkVQa0tTQ2MrWlRJQzM0VWdZdm80bVowaGl0RCtaUkx2SUdqd01QM2JBMmZNZzN3d0h0QTR1SW81cXliYXVtVURCTUlWV0N3V1FtVlNZa3RIMnM4eTl5dWdRMW5lWDVLdDRNbGZvODNvZmhxcG9Nb3AyeEdTdi9XNHZtRTF1TVA5T1ZLMlVJRjJCS3pSZllBUnNBanoxa09lUVUvT1B6bC9hS2cwdWVoR0Z4WTM1VHpMOEdNVGgxMXZWODBpVG1MOG1UbGZHYmwyMGIzZEUzTkJMYzRYbS85dnJpUnlQMW4yTC8wM0hvb1plcXlERjRPYmw0blZLU1FqYWdhSkwyWkpLdDd1UEFLV2tyM3kxRnZFT1RnaVN4bit2T0k2NkVVS2FGSmhFN25acmV1WVlId1RRaityU3VCTFppRnpxWkR4Slc4WnN3K0hIcmVLbldlVjlKeU9KNVJENnpBUlF3RHpNRjZlTmdDOUtFRjMrSzIzWHlZU1NaTEI1S3FXRGJKYmM5cWt1SnQyTDhHZllkOFo5dmdPVzBZbzd6TGIvV0dJZ3hFOWFQMHpaU0tyU0lpTDlYZG85NllPVjExV1BMVGJKWGJ2NzZocEJyZ3BxZ1pReTJqK0ZDc2IrRUFONW9BNThtb042d0k3aFFYUURvRWZrNVgwbS9kNE1TOXc4NkpoVnFnbDY0Rkt2eWgzSkk5SW0wY2QyK0hXbFNQL1czR25xRzJ3eS9IL1ZBYzdpVFpSbXlLc0pNd3d5aXJIY1UyNEJ1eVF0b0xzV0VIdmIzYURuNDFXQUJON2l2Y0NDTUFqdFdMbWFkSTlyOGlpcCs5NHpBMm96b0JBeFBFSUZhUnc3b0tqbXkrbUYzUTRJZlN6VTZaODZVWFlOd0lJbUJrcVI1aG0vcW9hWTlVT2h2WDNEV2YxM0VsWUtCNWxFemlkRXUySjdDVERiaUliSkE5eVNZbjlkaXg0U0diaWFWNk16SFlKa0RCcjNNN25NVk5PTXlZWFlWQVQ5ZHZxdlpLN2hjTU1UdXBsbitQS21GdGhNR1EzRmZURnA3OWRyaEkxcUJDQ2F1WnM0RG1MVy9nTjNnNjlTbytYTDN2cjhuSkIxVk1GNXp5SmRCb1JHZkdmS1FDUGV6SVE3aHJ1d2JwOC9NV09leSt2bWVzbTVRdFJWNm1YMjBPbEtiYkp6cFlMb3kzRHhBR3Nyb3NkK1dlQ2VobE5ockFvZEFSQ2JIeUlieXpFTzdmdlhpMm9qdTVNb3FPTGFiU2VkOEN4MEFMNG1aUnRPR0ZkcVBINTRlL2NtUEVCMHFpSUxJZG90enN2OGFKL1k0RTM1ZjJ6Y1hUb1hPbnNSWTEvVm11dWNPcnB5UnpNWkJLMWFVdWlIVU15cEVBVXRzdWVaZXJ0WlhNaE5KOE5FNllkZXFESDV5WE9CMittbytVUGx3TFRBbWlwMWRQS0pRTGdWRzZnbm13N2ErdTlaeHdYWERYZVlIYzk4NUhBVkVmb0RqNHJza1ZxUGova1hqUDlISHYvYkNkZW42M05sWjVram91V0FzN2VrNE9mQkUvN0hZdzFTaFYwYVFyOFM1b2JwUVA0SWk4UDltclA4MXBpOUVSSTF0RTZwV09LY3NhRzZEM3BWcC91b0ZiREV1Ym9GR05CUm9FWXp1QzloWm5hR292dXYwVHRIR0xFRVNWdHQ5NVNnbFVrTHNCK21uVmZRMG5IZkxxRnZ6UWM5a05iZzl6Ym8rSlIwU0lGSkk1bndRSUh5NEdQalhnQVJZR0p5eDJRTm81Sm9GWWpZcHRHZDRnMy9SQ3RQSXZiTUZINVJFSlQwYkhLMUZYOGpxVjIwTjljMW8zRkxoWjJuZjNFSEc5YUptSzdSOWNjNzJhbVlyMnZnYkp5SitwTUNQWmRhQkJLbDNRWkVwQWtjQTZXNElhV1dSNWVPTGoyeXUxdTc4cGNjcnNnOXRwZEh2aURHUHZTS09tM2lkZmdMQVRZOHNyTXZmdWx1cmpzd05KK1lOV3prVjhFb3NLMG1BMzU1aVJmaUUrZmplK1hqVUYzZDk0UlNnV1pqT3c0TjJJc3hjeDNQeWozL0JaR2VNL1NtQkJXMmFVTExlTEgrelFjaTRMREsvRkloTWltWWp5RWJYNHhnTjg2Y3FqZnBqZEl6WG9oZWl5M094cmpkS1RMSTRDc0pNanNGclRCcTdHWnNta3VDQXBLRG1OVDFzK0Z3TUdhMDdBM0MvRm4ybkRUNjY1Zm9ZT3JRMEFKWVJiVC9ZVFNMdHJrMVBXWDZjdHdHWFAxWmROaDVObFNIcGFUQmlVNTBVck1vVHB0NmJReDR3U3hSemI2SElQUFZIR3RGMjJwSDEvMTJhSFdWeFhLOW9hbVBoamVFek5NdHNQRk1qMnBxSmEwYWV3d3ZyRXpTdTQ2eDhPNFNrZ3ZYUW5YUnVndWxNVzc3aGdZQzJjejBrdUgwMTJaUy9LOTZFeTlYUzV6QXlGV0V1YkRjK29aMmhnb1lFTDZlWkNPVzZJRFFsR05Wak5KeTFGQkFPV3RuNksrbTNUVDRWZ0dwdTJkL2FQTmY4RjFmcUhDNGlWVTc5K2lhYkw3T2NKK0ptWlp2a1YrSVFQWi9ndFRHRW1IRUxuOVR1MW5NVkhKR0tHOEN3ekkrQUZFbDE3bnhQTmVmTWFsMUs5WkkwdllKRVVmcDYzbXEyMGVIcXVldmd4Qm9mcG9hc01NMVY4Z0FKMzRPaWFpRU9seGFUV1VuTVM1TFNma1ZrY2w0UnRrOEhTSlc4ZWk4dE1ENlUwOFBLNnlLRWpIWFhab3JmdWh3cDc5SndpWlhkZFMwc3R0VlNrZzRQOVlidE9VVm9qT04yNGdRN1JoYVNMZzZ2QVNaR010QmtEdkhlZ2FXRTRRZTJhNE9IOXZNamVlN3hxU293N3hhZmNTQUV6SnJkNVFYRnBPUzYxV25UUlVmUHhXVHlRYmpXMzZRQkNDUnBsSnhxci9LeUg3NjNEalYxTXQxN2JXTWpjWWZicVFFV0VwZzNVc3lzMWJQL1cyYUs3OWdVNG5VN0ZaYjMvV1p1SHlXV2tqWXhYYzFUY2crOWxUZ08wMGpWcHQxcXJSVjRTamlBTmxjeDF3Sks0RTdLTVpLd1ZzbXpFRWtmY3pXdHhxOTk0aXE2a3dMNUFXdDVKZ0NRK01jdEJadllPajdKMGJvaW1WUVJNS0tYLzRHR1ZFUVUwemJCQ1FyQkFSb05wYmVMVmZtRnR4RThmaHc5eUZVdUh0QVJEdVVodmViV2RXM3gzazFwdlQzdXpnd1BsY1JoYjlrdkNua3UrclJhOFlxaGUxRUZlZzVGVG1ubTZNV1FFcUpYbjZ0ME9jWlZNZ3VrWFMvelp0dGVVOG91dTEyYWhyMFMrTDNRMjVaVzJNeklVZWZZZGZxY3dqTHJxd1kvbk8xdWdHemFFeG5ENW5tNXZqREd1R3FqWWNobW9XSElzWXpFS2JhWEZlZGl2bUR2OGU4WGxicWRoM3o1eWdKRDlYL29qeTh1NHFYMVgwdHNRdGNSRVF6VW55Q2NXOWhLUWVkR1ZkUTZ1UkFiekRNL0g3MUowRzd2T2RucmMvMTdOOVAxNnJXQXBvTDY4OUhSOEh5Tm5kZ3FnckE3UTNhaDNHcGpBbkZkQm4vWjFLRUZoSzRTVXRjSW8vQXdoRmlIQ1ZuNkFxNFUwZFlhTkRMUDZ4ZUdjVzcxQzdyWXJIdERYc3dDOGxwNW15RG53VGdCRW8ybTUzMXlSOU1pWkpDYmI1M1lVK0gzL1lHbG1WOVlpWmJ5SXJWOC9JbEppRGk1bjFWaVFURFJxaWFTdFF4QllkQk9sQUxGNEk1V1N5UWwvZ1lHT2FZYW16empiWU10N09OaW03UStpNWhHS3VRNFpoOFVndW9yR3pMWnNnRzI0TU1EQXpJYVhHVjJ3MG9QQnJmWWwyT29NR3ROQm04NG9GVW0xam9RR3FvcXNWOG5ieDBabGsyUzU0OHk1ODJrNThCVnd3T3ZvMEJ3NGNKSXJ3UlpTTFFjS2hWM1RoV1dLS04ySUhoMjgwbS9hYVJ2WEdWWHNrV2dEcmY0a3hJaDB0ZktnWkJZUmpYS0tZY2xydGRWd1pENHVNR2tCWHVXR241c29VVG9xa2ZvQ2hVbnlUdXcwemNKR1orUENPaW9yMGp6c2x4MktvaG9UM2F5RnVtdmswazdtcXF3YldNUEFWVlFQU0dYNk4vdzZEYSsvVE50RUg1SkpueXFnUUdTLzI1QzdtYTJXbXB1aHNQRDh5YUZNTWZMNnB1N3JPVERjYjFNeTdVcUk5bHNnRndEU0owTHRjR0ZnK3ZDRUNjRG5mOHRydTRzYk8zTEFUTFcwZ2xLOWFVWVV6U2Z6Qjl1VWxDNERMMENjQWV6akpnb3NQaGd6VDZtamJQaUZlaHgzMzJzcGVJd3NDVjN0UGdMaVlkMW54WklWbGthalNvWlZZVXpXVWJzRUxGYU5jWWxMZ1ZJTnZkMzcxVjd2clRQSzNremdWcHltT1Rqa2lqQ3ZaMS9CVDYzeTBJNVZ6S29aSS9sK3gxaDVUTG4rT3RobXU2aE9aVldIaEErRkE3S0wvYmRveWE1UlkrK0I1ZWwxU0NkNjZoQ0duYWpXbnhJbHZHRThraE14Y241ck5DWnZybktqRVNPTTdQYzU3bzExVTlRZFl4ZFJ6eFFSczhPZTRrb1dYZUk3TU9tQ0l3S2FxY0cyWVY4YVEyZVZsMXFMUzIrQmdkRzBPU3lnNG1SR2ZlaGxFUEZxRHc4OEM1YUhzVkpsbTRreFJ1WEJOTmRTNnBkeG1wOURWYzlTNkxiSVFqVTFxWGh5bCsxeHR5Y01Wd3daQzkwdS9ZYVg3TWowc2lYczBtZlZ2TmJBdGdHbWVwb3VYRGYzRC96MldPbVRiR09mbzU0cHhSYU9tb3pDNWhsSDRaeEJFVHVRTHpiSnpYelduRkdnV1Q5d2Z6UmhNRzRHNDBSaVZvTmQyL1liYlVRYXR1eHIwV0ZUUzNuWmFOamlWaW5rUTgxUnhOeURoUzdBR0lOOWVmSm5aQWMwRTNZS3pNMUF0a3FzeUJDSlhZZGRJNkJoKzUzRkpKbUNNcVlEdjBwK2NTUGtuU1ZzekEvRzljVFRNd0RrWXlTUEZXOWNNY1NXL09Vc0RMSUNxUGprd285b1E4ZFBsK3ZJc2hlQUdmQU0wb2duay9HT3JxRXBxZkwvZGhvVnNxUGV6TkZGbkRXUlArNFF4bDZaUXFRSkJBa3BWRmtlUHh1SE9PV3hXSDYySFVJMlZESUR0YzNydDJUU1JDNGVZb3I2TnFhYjVhbUZSYnl5ZCtIQzhsOGZVd2VJT3pqYmpIRFJUYW9DR2ZBVzlHMm51Z3QwVTMvbDJpbURCdW42dDRhZCtTdUk4bmFiaUpBeENhbFA4QnMwdWgzTnFtSFpPY2VnbDQxTFpCQytkTTEzRUFRWTNKMW9CRjBSZTBZc3haVUlBMldOV3dMTnZIQnpOLzEwdjB1eVhyRzUyVjBvZ2dCYVRDQTNsWnhTZHJEM0xaL3c1L25zMTB6NmMycTRRb0FvWkZzb0Z5SGtFaFJHTGd0T1YyRFUyZHRSRTNFb0tEMWo4WDRxUkVyWWRjaFU0aXhJd0NsS2QyZGY5cTRob1BaNEFaRG9RM3VMT2h6NkJFTG5yZ0RLQ2JFbVVUbVZMNll3aXBYMmlEN2ttTEFLeW14b0tabUZNdm81a1hpdnR0TDVzOE4rYTRoWWZXMUJiUUVRc2FkT0FEYzYrZTB0Qkh3L09jM2w1aEJBcEo3UDMvVnlpSjlmdHpqd0J0OXcyTTRvMTN6UGdubVI4eDJkNHUwdHMxelVHREF5Z3h6MFUvVzA0MG04dE9Ldktpdnk0UkwvdHZ2ODRXSlpJUVZEWlhBemJ0ZlJOMzNpdnk5eGRYakRmT1RYQUo1NC9XMGlCL3RNbzNZakFLYktKWHlIMTNiK3BIdWE1ZzZpMXlyZVJHZjgwMytXMVZYS1hQaWNHTytwLy93V1BQbTZHc0NLWW45d293bFJKK0FzVXkwWjdRdmxSaVJWcnh1cTNNa1hyYi92NDA5NDdpKyszNjRPY0loTkdEeU5XRk9pSGhlUGdVZ09yQVdyTzdCWmc3SUc3TnRhVU5TUWFkV003bGI3R05Ic1JxTTB2MHBRZG1PdHc3OTBydmNqaGRhWWVua2M4V21CVXFYSHl0UFRmTTR0QWhCL3VpMndBMXVVVHU1YW5EWVJYTUI2bHFEVWdlaWR4U2FxZC96UnBqYVhDMER6UU1RTWtwYkZrU29XMmRhR1lzSGdHd2tiSkRCUGI5UWV1cFhzVjY4OGNadkR1eG83SmtwQXZMa0dqYVhJNW5XV2VZZjBSS0M2WkVDSVAxZHpsOVo2WHl2WWxiVGJPK2h0dnQ3WWtDNzJTaC8zcVZIQnlzQmZzYVdEeVVzN2lFTHpwWmlEVmdKRUgzaHhVRVJQeDA2U2FkVWh1aHFXTE5Ec2Qxamp0Wkx2NXVTOUhKTnVCWEhSRDJrRU5MclJYWWVoMGVSY1VHVmsxQVFSd2FVSXRISzRBY2tVUkM5dDVmcW9sT1lHV3RvZmx3ckVJcnhRdkdsNnEveVZKY0N5Z3hCb1BTYnFMVnl1bjJzV1Y5cUFua1h5cnhJRGtxQmpxSFUvUnNTOWl5cmJ4M3N3eG9GYk9leHl4a1pWMnJINWtsTGJYTU56R3ptMlFuVkxCZFRqaWZRMUlJWkRrb3hESEJkbE1OYUdvTkthbysvWlVBeVZOMkgrcVc5di9WS3hCa3VXeWJObTBJSnBnTUEyVVcrY0cxYmNpQ2FVK0VYVjNmMWM1Vko5RXZmODllajdsVElCS2lKbDFJWDJoWHNuWndibDlOYjAwekE2RndtTFBWbjVmZEZLMEg4RG5JVXFCczJjTW53ZmQ2b3o2TU9mWklER3JLY0ZqUWhHSDl1c3hiTkdVVUNYb24zdXk2YVZHZU1BTFBhSUt0dy9kcmpTUmlIUlNxZXFUZkNGUVhwQnlNSlVxbFBCWlJiaFlzdEI1am1IbHBTN05ab0F3R2VoNDZPOE1EeTBQYzNyRW01L21ta1VJZXdtTjNwbGRqS2FqL3pKeXg0NW5oa2FrUmFZZmpSYjNsQm5vUDk1dW1TdldLVFhrazl2RHp0TkRpZnFKYnNET0VqajV6MHl2UWZMK3N4NngzV2JNYk1IaWd4WjFDL0FpaEhvRkN6Z00vUzZRQUpkMHNFV3UydUxkWmM1Z1NTU1hYdEhrNjlFYTc3d0pRbldMSlIwUUI3dS94YUlXaGdFRWp3WTMvak5rZ3A4MmU0U2U2NERaeU1yb3dzWFpGOVJtVGFlWFFTZFBrQ1Rmd2dsU3UzWHF1TW9UOGoxdkdYMUhtYUVzR2sxNURIUkd3VE9aaVRBZVBIdDRUTUovWk9DaXNVRUpaVnBteXk3S3E5RHdSWmtJcExBelhhbDc4ckFWWjlDQzdLd1ZDVjNnS3NvbGVaTmJ3RTVjMk00YzVVV2lpV21jNWE1YWNqOFYwWnViTHovSm9ldmZaSXE2cVJRNmtsSTFPN0NRd3lrRGZEdjRYZ3VVald5WjhtNGdFeDVhY1hkVzZFd0hxQ0xkazlIaHlwb3Y0ZHNQdjhuZlJWSy92cDJZYTZQOWNYY3VqZWh2MjBramZnQ1poQnpyd0dXck0ycEYyOFRHaEdHMXRZanN4bzIrdGl3aHNXeWg2ckpMU3ZCeko2ZEpObUZvd0hhS3YxbFZtNkxZdzZNVGxOSnhmazc5WDRXTVY0ZmkyeXVKSEVoVzRQejArL3dEODIySGNHeUE1R20xVTRZby9CYU5iNy9waThjMmV0VTNXTTR0b1VpQWNIU2N4T0c4aXhYdnBtWi9Ka1BLWGxiTEs2YUtrcld1ZitwckxsYXBDWHF2aDgxczMxWmphZU1xVmNKdG53Mi9rVi85NkZVRnlCbHg2YVFkNUE0cXFlQUdZdFlvUkxJVDE4RFRUaEdTa09uZVVpODNaeVBZbFB3d2c4SG90dXFQY2lQWlJuYkZoOWtOTlZ3c1V4anhCMzM1VWI2amZXcHF1czZXOXFMMDQyTGswL3B3WEtHL0djc0hZdWk5QWdCUzdKSnIrSzVlRUlvK2RBNllHWFlNdDM5YkFIclVJKy9ibVNwTitzS1dVREFoR3MwdkJjU0N4NEZzcWR0VTJ4djdjZkQrUFpsR3JZKzNNeTF0Q1lvTDU4ei9BYzRCREptWFo3U0l4SGRIZytGNnNNZ0ZoV095WEVockd2R3NDT0lNUFpnaURHMU1CZzFVOVVsSUpKNFVoWkZBaUJibXN0YmZhRlpQbzVpN1B2VFNaUXZFN3Y5Mnl6L2kwWFRycG54VVZyNVNHam5UOW1leWd0OVFKWDllTUhOempiR3J6U3dTczdZUFZyakZNSHhpTTNLZDJoVzZlRTlUcGNNRTAxTTdKT21HT05HR2xMRHkxTW9vUmFselYyKzU4Q25oSktjR3h3Kzk3SFpxZHduU3gxcHNYK2lFVVRVd2wwY1hiRkdWUko3YXlJWmZ5TXl6RFpuZlJqT2MxM0lXZTdTYXFFdWlNenAvaUR0d25PaTFoL25mY0VvbXAxMFc4N2tMenNaS0JyNldsQWwvWjV6Ui9Wc3ZSZkhVaFJjYmg3bDR1NUdCWnBCM2drNzl2WjI0b3dlSFNzeExhWEl1N25JRldKMWJtZGhuTnNRNUFWVzZncDY2Wm5PWjVOcHN6NkR1MlM5Yms4K2lSMDRtYzIyVjNPbiswbThNUVQrSmNkaUhTYlBZZldOTEM2d1JHdFF5RVYxczVHYlBBc2lHNDQzTDRROE93LzhQaHJnZWF0UVRJOTNvcGoyZk5uaGlkdkxMTlVWOEJWWm4wQnNEbWZTUHhuTncrMUx6bkNpZnJvTEN1ajR0aWN5amg1WmxXckNzdGh2NVF4ZDdBN1h4MHgxWUpWVUgwTDNZZkRQVU5nTVkrTEsrWTkvUEl2anZObC84b0pxRVdWS3VvRU1sUmhaK1o0Y1UvUXlGdklUTFJSdVZQZXlabHV5K3h3empSMnJsenhZWFdncVhkZ3BKMU9LbjRselR5RkZxZHl1T0FnOFJwbzFldlVSNk9iY0kvdVQrNzNoNmVLK3MwV3BHZitSUUJCWklFNWRvbmFiNVhYdGhDMHNISENNS0MrdFM1Q3lNcnJhVUZHQTFPYTBIUWFXY2pEeGN2NHQvbFFDOFhTU3dYQVZhWFVuZ2lHTXlzNDVsTEUvMU5kK3hhQjN5cXdWZmFpcHd5TnBOdEN3bmZtd3ExWTZ1a3BhcmZ2ZzBaMUt1S0JWNmE1V2tGWlRNVDdjekFyc0xOdFdFQkQrNXJHVmU2RWxiM05CaEZaTlRrWjlEc1BuY3kvdnhBWmsxOXlrYW40SlMvZE1jNU1WRkZpZW9mUDk2cTZkbStzeTFUclRtUFdxSm5ZbXdVRDNzZzU3czIrbnkxNEEzbzlzSGgzbnplczFOcFVLempiL1QrcUVya3NtMWg1ckJpK1J1TTJuaUZvZHh1M0tRWGZoZXRORUhqQWE5SFk1WTVjQ0ZDaVBJZ3dacmdnbWpKSlFvM1J3K2RId1ZiVjdSUWR6WjNpN1c4UEl2YVErZFVJUGxhU1NJUnBkNG9jdTM0VWgzdDNmR3NKTUI0cEdWTTFQNnlGOVJuYzJEQ3hsaWx2SCsrQTdyR1hlUzdoaXZEWWVjbFNWWFh3Yk0rSnRuSnBCRXRocm9BZHl1SDdWNVRObU1hUERMYmoxZFdtdnZGd2hvNG5scVhUa0dNTnRrbFJINjlleVMvUTVtZmhqc1RVRUFNcEFFMW5CVUJtMXRXbGZrVUFkWFFMQlZ5a3pqNWQyM2N6aUxFbG85TE8vYWdXSkg0RWFtaFZXTC9CRjBGQVRha0lOUWt4UnR5M1ZGL3VtbDJXQTBVT0VHMjM4MUhYeHZFNXViYTQ5eTlKdUgyMENqRkxjc2YzWXoxN1o4Tm9GNStLeVZ0R2lLK3owcXppek5uUjJvZkd2M0czMTNYSUFRNHUyY1JKSVhaY2tRcmVqb291Nlc0T2Fnb3paNlhyQXkyTllJOEZ6bGpCaFBwS3NwUWRMQTU2d3dSbkxkWDdYc3hyZjVTdXlwTkVNVWQyQVA3NnJvT1R0bGRJOXkwa3RtMWp5Y05sak8xNFRNbVZ1S3ZYZ3ZUTXdNaVJ0WDNFU3YxazJqQVpsbHREMUN6UkU1Qmp6b0QvQ2UrSW1Xc0ZRVXU1TUV5VHNBU3g3dTk5akZUYlVSc0FvZndRYnIrSk9EMFU3MHF1dzhpMWpUVjVIZlQ5cGNqbFQvSnV4SFJ2NDRJaGZlY3dKeHhVOGh2bUFaSFhTaE50eUkyZGVwdllId0ZCNG9sRkdYU1VyTmswdExrV1NaaGVrZzI2TElyZkF5ZVRnaTV1L2VYMEFBM3dmaU5qUmZtMkRyQktMZkRHUHZudFRtUkE4VUhsVnJiUGV1NGNpcmgxV2NGTGo3M3MrNUF3Wi81VUxKMUdQc25EcFhkTkZGSHhNdWdkTDNpWHdUYlpadFd5em5GY1Q4U2pLL3dUZHU1RVk0OEgrVHltL0RtUHRkdmVzc2d3bks5Rmx0NFZ2YWtaQk1ES3FSSmswcjFzcGV0KzIzdER5RjhhcmtCTTBoamVRL2dwUWtBcGhEdTQ4eVZTZUhtZFRtQk81L25kRFQzcFl0RGxCKzJFNDIvTlNTK0lmN2FsY3dGL29PSmhDd3VGcnRUUE1FUEdqWitwOEN0ZlNRc1pkbitWWCtiM0FxWGhCMkhiVC9PTmtzaHlDRE83dEdDcDFmRHdIMHFvc1hNYmNuN0xzOCtId0lRaWwyWUVMOHF3cDFwSU5lRzZ2ZGpDbmNMb3hBUFAyVVNuZVROVmVDMFBsRm0vTXJsbDI3MTZpU0hoWkthb3k3OUlPQmFab0k2Z0FnblhZZlhQamZMN2czdmkxS0Q4WTVqMWdCZUQ3aUMxZkF6NnlLK0hiQm9RZ2l3Y0lOVUFFeEV6VWYxT04xK1BzRGpobUJuV0h0YlM2elJtd016QW43TVd6OGdzcUtoMUcxNEI4K001SWp1Um1ieitNcjFFNC9wZDBBdFJGZisvV2h3cDBZc1g1UU43QWcxQnRpdkY5NDRrZGkrdVEwWmNKLzBsdlhwZ0ZZRldmemxUT29JelNKckx3aGRWQ3VLSWcvSUpZaktMb1NMSGxSbDhjT1hUK25TNjgrTXBXb2lQOVNrRHMzTnJlSkdwQ0dlZE13ZDRXQS9IMXE5aDE0MExpR1oxM3NrTU9hZDV1endnK1FiSlhoKytRdHN1VUhoc1RqRDhjckJBR2huWGk2ZzhrZUI1cGQrbVlxcHRKYmowOTlkbjRLd2d6bDduUmtjR2Z4WHhkTFUvQXJmVm5TUFRpUmFsMGNDQTdCTFRTeHZlQ2txUmZHcFYxR01sb3N3N05yVmp5SEpLOEl1b21VeXpGbEpFY3pQOXAzTGFCRmZtV0J3WitMRUVZR2krYXlHVUJ0dFNoWVZFaHVidHh4QXJNNjlDUTlLNDZzMloxbHBlanVYbkZ6RFZjQ3pwUWhqcjY2T000TWVVbWM0cW5FTnQxYnczUldMS3Y5RkJKNGZVL3Y5UE16TExZT1drb2JmY1BXM0VoNG4wWjRGZ2JWT1hmMkQ2QkV3WVNGVmJua3puVkMyMFBRMkxZcTdBNFJyWVo1VnBuTGliV0VLM1JEUjZUcWRSR2tGWU5tcXJHYkJNQ3d3bjBBbnEyRVljSy9MdzNIaHJ1eEZZUVE4R2Z4MkJQSkpDTWUvM3V1azBOY0UxZzR3SU01NEpodkszTE9QeG5aY09BZnFZQm1WYm13SGJ6Sm82Rkl0aTBUbVV5ZTljazRHbythZ0x4SFU5bittTzZ1bUdkeE9aN1BOT1psS0syWE1SRFhGbXBaVndXOHk4Z3UrckErUUh0Rnk4cmFQZEZGV0RVTHVocXJFZ0VodUhZMW1PRTJ3bGcwS2JmRGxaOHV5ZXBsSDNQVjZJYncvU3FLTFlyYjN5U0R0cEFTREVja3dPRDZWK2FPdERsZzZPU3JTVWwvaUJiTElIYlhMOWpDbG9ZQ0pEWGZjdXhvNkNhTTU5bVVJVGt0ZGltNmc3d1Y0cndxWmkyUk1ua0UvMDBTeDV6UkRyWE5ZckExY3hpWnVvZzBSZnZ4bjByWGJ1NWZqb2dUd0MvV3FZTzNiQlJjNzRia0xCVEJJTFgrcHRGTWlBVzVod3gxY0JOTnkrTG1Jdmt2V0pmNEk0c3hWZUtNUjVkbjdyM2tGY25NV2RDd2xqcHY1eDZVc1huc1Z4NHhEc3ExUUZ1YmZndXMvTEx2SkxXV0lrRFlQSUZjTG9IN1ZVL3daYUtLNURGYlA5ejdDV0UwZXNSTW42dEg4OWlsQ3hlYjdXTWNsTTZ1Rlh3S1ZsWnB4V3pYREZDQm9IVUtmOTQxelc3S2ZjUnVJUUhhcmdVTWtLNU15elB1aWZMNTZQSXgwTFBtZGFkVFUyV0ZsMzRxZm1sNHN1UFhIVDczUkNJM1VXQmxlWWd0TEwySi9MS2VIR3JVR2dXL2ZvUDIvMCsvWEMvTzM3d0pwbXVLWWlyalhpUEpPRnRRU25CWE5yUllIR0VxOHdsQlNacllQOU1zYnFVZTNlbkhabmVkYjdEYSs5UzZSUmFUZmE2WWRRYURFZTBreGQ2KzJtLzIzSkc1TGEra3gvTXpRdVBoUE1xYXRaejBtVm96djBIU2dBbHV2OVJHN3N4OWdjTVlBZ0U2TDZ1YzZ1MlRPak02WkFueUlkTjc5VWtJaHowVkpuakNUQzFYdW5mb3ZwUjg1Y01zU2RLMUp5ZWtxTmdDcHo2YnpJbUhvWkdLRGgrWG5yVnBldVpQVysvS3gxY1RZYi9MLzNRTnJvaGNMRmlUMUl5K2NZK0xuSEtYZ0I3cDdCM21qT3JGRVI0Q1JhUkpFRDlkYlREUWswdGRpaGljTno5US8xNjB6Z2ZGN0pTNHdxaUJ2R3NjWDVGL3VkTXNPVUhsSmY4VTg4VE1QNnNhM2VDYjRNZndMd04ycnBOdXpwbmJGRDR5RndLSVh0RExlZjg3RUM1WC9vbnJWL2MzL09wdCsrTER2NkpRNm9XeEE5SEZqcE1qVlU2ZDFXUWxsYXVJN2xrbkZIRGczL0RXNDhXVm1xK3ZTQXJsenIvOGs5WEJLR1hTWEdnUlVUeW1ESHV0MGxGMS9teGpzd05qMk5GK3MvekVkV2k2MFJSWHhtc21TRnFxODkySEdVckRMbG94b0dWWHVUM3N5VWVPZ3NRQ3RQc2lVU0hxWHBycXBuVXZkaEZyakN1N2NHMkw2WVVscmxqL0Irc3pKWFJXamczZEZvWERFMzhKdGpEaDJJTzdLR1FkL0FKT3p6WDI3TnlKcjJMclpTaDMrWVZmNkdsUWdManhTbXNLNDNrMHRNN3pKSzBDL1QvYzBNNTJSY2NXVlpJeG1OZGlXNWUzWEhWelRGSEl6YThRVlV6eCtXZ29ZUTZXVTVhVTlaSzhXL015ZHlkc1BTaHBBREhEL002K3NwMnNCUHBLckgxcS9IdU1GWHJBdG40bkJoZzM0NDFjdnd1bzdCdTFTTlpRU2FySG9pVnFNRVhEQ2JJZi8zakxCWjZNS3k2M2VtejhHaWFJbnlCSGZYSU1sdU1XNlpTSnBvVnc2RzRYZHdEZ1o2TEVLZ0Fqbm91dzRLeVJ6SXNhYTJqMFJJSVFFVm1mNWplR2ZYS1NUL1VJMElQMy9Vc2E1WE1pVEpOQVMxYTJuUXd1RXM4T0dvTFREMFRSN1Z6ZG5UbGkzRnNGNTNaOCsrSHhuL0JSeWg4VUNLL0hYREFNQXB6djJFbHlxNlhyN2o1SXlMQ1g5aVhwOXZBbTZlcTQ0WlZRRUpaUUdaQU45ekNYSDNOWnJNL2FySXBtNW9TaE5PdzRMNnhBK2NtWkdHVWRpOGRodDI1Y05iRmRQSnp0TlNiV21FMEVKLzZHM1BiWEpVMEtzdEdLbXJXRmxSSDVjRDRGd1lwWmV2WFBjc3UzUk9nSC9KRDRpVDgzb3FTK09ocUFBOC8vT0poYnFuYytlRXlCaU43TFdtREJqVGRqbHA0bTFHcUtzOFNTYVVLL2JIdzJGVVFxcEdac2JLQ24xTHJGWXl0MTM1SjZjdjhZdDg5S1dhVGdDa1hVWm1JeEdhcVdEay9aQ0V5bU9LdUpaM3BZandGY290T2owb1pBMVJvR2FDaSs4MHlGaUtBNHpVK21kQ2ZDaGxjK3g1YWRET1FTZlM1SnBCdFpnTW1mTlhrYmJYb3hlR1hpRjV0SjRXSXNCRDRWUXorM2VSUjdvanJ0aXFwNzdsbjRzeFRqQTdwazVSajg4bVhSSE9mb1J0NFBmSktiOWNkM1REYnpjcjd4U1JNUmQ3YVlsbld1WUF1TTFlbVptdGd2VUdjZ1JtNUdNck5XOTdXTENhd1VvcnZ6UEgxeGxET1pKWDBZV0VzUURhZFJOYUs0dERrRnhVZWo0aHpTMW8xc3M1VkJNUm45TElyWkVjcDRIaVdOU0JGUFhudEVPaWNRK3M0ck5RLzVmYUI4bTgwOU13TzZiVkhrRm9va2xzbmZzY2ZxRGtPTHplamFGNkQwSjdQOHV1aVc5Ry9vU2ZJeStudVZVdkpFMFRuVExSWnMvQ28rWTcrckphOSt5SUgzMDloV3NvMmFmRjc2Z3cya1cwTjlkeXJDcHdoV2syaWJUZzVrZDVpcjNZeUhUcGpicWNPM2xIL2gzRDdSL25qamkraHNPTE84bm1kbmNRTEdhWWFUUUo4dmdNU3h4M1FaMHhkZUZYemQwREFucVNvNE1jcWp3bW5mMWp5a0hvMXNDWU03OWlMRFNCbEZjcG0yOFlKb1RQaFFtYmp0c2lVaTI2c25DYVU5NnNFbVpaLzYzaEN4cmJiUlc5U0duZzhLZUxwSDRJWCtqVTdxODBMSUpvRHVpWWpzUy9ObC9nMVdwK3hVemtISkV0TTRaRDlOTG9ISTdNVEIxTVFianJOd3B5VndNMXcxOUx0a2FNUUtzUWNZOWZmdWdzZTBHMkk4c014MW9QbmpFY2FMTFVDbWZnZTRFRGNlWU9PSEQ4Wm50UU5rSUpoaHp5L1dEa205K2VHNVlneDBtK2hnSCtEY3pNNDM5Yld0RE1ObC9mWnRnNXhRRis1WjBPZlRBd1NDOEFwMHpWSExOMHpYbTVjbnpZOUZaUG5XY0pCNGNvNk5BWUFIM0lpZk1HU2gyWnFkNCtWVk4wSjcxNmpQRVpId0FKbCtCdDZDdXhjRERlTkExVEo5N2J0ZUFFMGdOS1REN05pQWhtZlFkK2w1MzJPcTkrWnBhbWNmR1NWVVhVNnlQbUNGaTY0Y1loVDhyanN5blZNMGNWR25MYWlvV0NTZHBqSFVrQ0hNMHk5bEkzczEyZ3lEdC9xcmthUkIrYkhLWlo3TFRicXpLWGJ5Rm1KUlRybU10MVZpZE5iQk5Da3A3ejdqY1BWY2s2dDZoK210aHBEc0MwcG1GS1k5cWxZLzMzbGNTQ3pEbXo2Ny9raWt1UTkzRThoT0xMeW5ObVlRT3FWYUdmZ0V4UW5tYmxVOHh4aExUMDRqVk1UYjMvcVB5RE8yTW9RYXE4dUNTdWdRVW1IeHQyUFRLN08vQ1ZTbWh6UHNOb1pqYmgwdmFKdjBoVDVXbEYyMlZjSzl3K1g2a290YVpUNVpsQkJuckJGM0hvQld0M09mYUtxQUkyZ29vbG1ZczFpanFIK0NvalpQOFBNcWNlOHNvcWVVenBnQWQwdXNUMlRXRTJTRitOQjNuZUMxRWZzQUQ4cDE5Q2k4aVFmOEliQkQ1eUN6NmFkdXlHc3lkRWVQMUdQeGpQTUtickdRbnJQb1dBSUZxMSt0VTM4Y3l1clh2cWJTYlJUMndlM1lmcGE4UFlpMTJ0R3g5S2daSFVJcFZDNnJyZ2VyTnd3RzBBVkQzSlNjTk02VnZ3Z2s1OGozRzlhNmJaNk15V3lKRkwzRGd4V1ZzQkRVUXRWdnB2RWtxZnlPWDFRL1dMOFo0VFNDOEpjWFIxSkRpWkVodkU2by9XWUlmcTlFMy8wKzRLY2d5UkljS0UxbUd0a243ZnE4cjROSndKOGh2dU5rTXJ0YVIrU3JyaWt4SU5LQ0Q4RE53YUo4dS9QVThabHozWFB6RlFpYmF5dTlrdFBXeUpqNDY0aE54Z2FiYThzOXRXbGgrNEQzZVgrdm16eXlnNnFUTTkyRml4L2VsckFuQmV3N0dvSkFVcGx4STMyMlQ3RUVBck9QRlF6QmJSR3V3eHo5NnI2TUtBaEF5VG5LNUhabDVUeVp3elU4NURJZHk0ZEQ4MFVTQUVscTBaQUc5eDlMR2JKQXBSVFJiNEZ6d3l2b0h2UXhVdEl6N21QTC9Ta1R4WndreEVCN3FkcjQ4RkpqYXJyVWloOGVIUVVKUHZUYzhuUVlZOHJSdXBxQ1ByT213NkIrTUtWWVdvMk52ZUdIN3poci9mT1dPbVZJNmdEMkdxVi9pTklVZ2dlNll2OEd4bzYvR0o5SHhQTzNMKzFNNmI0V3BNVHNDZnlCemg5OG9HcXByY2Jhai9ybjNUakNwRWYyMmRCcHpwZ01lK1JJMFRSa2ZJbWtPaXUvVVRKMU9tZXZ5UUdDRUQ5QjRVNkJzSE1GdVo4Y3lIMUIyWmFSbWlRdkZ4VklzeHJEQ2xTVkdCMDlBbXlzQUdXVzlIenZ1YlBTL1RMN1daVTl0UVR5Y0VhdVRZRE5PTVB5NXhWTFRicTNFYm54TGJ5RGpDQkl2UWR3WWY4dzRaMmhzcCtCRnUwck5tVDA5TlA4SmpwaXlXaWpncHQxWHpreVZyZ1NsbWUyWTg1TkVCVWc4MzRwaXl4YmYwNmNEdWs5L2RFVlJvRXJuTUxTZW5pZFFETUhuemQxRzZMclJDNmxTaFkwSkNLNVlrRm1mK040MmcySVlSN0dkWUQvQm9OVHFEZHFySGRka200eTlqRC9DVHF1cFRFQzlENXc2eXQvdlY0QWpLNGtsTU9TRHBCUjhzVlBHS3hxdm9SWUZGRlM5b1ZDUXhuWU16NmZFSFlRMTJhUHVmdEFwSlc5azg1cURKZHE2eU5tNm9STEhXNDhKNEQ2aERoWDJUWEdOUml6ZFpKMm9vSXVoNjFvMnpyVGd4T2NpbWdMejljSlNzMHREMnMrcEc1bUV5UVJrSEowL3dFT3p4TytBYjFSaWhEM0ZQT3lKSHV4TTRjY2ZiZUwyaFVIeEU3NUJOQmt3WlNwYWlNM3plaEgwTVF6MjBnSmNOYlhTNGl0QnZXeUhJV1BrRzdVT0xJRjJTVnZEVkZUQ1YzVzRUT0w2R1pUUXdhSEt0RVdxSmRwKy9xWTNFWkJtb1Y3K2Z0dG4ybHYzWG9GeFphZy9iazNjaXNUUmpmRC91b1JveVIzcjFTNzVKUnh5TXRCMWI3L0ZwaHVDOWp5N2JyYi9sYm9sZEhrSUxSK3d3L0tCWGJjOVpyMlVxWkJDQ3lQbHFreWtBM2FGdjhucWQ4TEM2WXZxZ1NJaGdDNHdLaFlCMTdOd2NBS2pXSndyRTVYWGc5TnFZVDErWDBUVktHTEJEQmhBVHA0cVJWU3RibTUreHhDcnhTUEtMODNwVEMzNXV6ZEZwa0lUaUFnZ0pIM3ZOQVdYaFE1Tk5UKzVhSm8xdjluVTRpUEpzQ3ZuRDhZN2tOMU9nRXg0MDFwanQ1Nkk0OFUvbmszSmV5dHRSKzE2NDNQYWt1ZlZBWXFqbmxkRmF3WjVMUVRmbFIxZEdSNURMb2szdGhhaGdyczVMd29oZDRRVkZ5d25IMENValJFYU1RQjZZOTR4S3pKRmJqL1dXUVFKY0hkMDRydVRqVlEvZEdaQ1llRjhSV2JEQXV5R2RhZkdEMHY1ejJHRGJiWXk0M3dtWlNlSERweXBnWGt4OFhIOHVOR3BMZ2F6K2ZSckREOTVSU1FtUGk1WUE2eHN3OHdYdlBybG5SSi80TEt5Q2NkVlNjQWpPK0NhNGE1RGtLMFdxQW4rcTJENTZ4VmVwZ08vRFJ3U0Fyck1STGlNZWxWenZxVGJoaWkxVHVCNkZJK01vVFE5YnpzMGxiTE9QeERTOWxxbnhPUDNjaUtXd2h0OUE3YWdiampxdVlrNGxCaE1MbmdON2J2Rmp6Y0ZOcHBaVytGZUFvQXVwWFhJaVUzVXFVTTY3aG1hVGNPWXhydzRGc0NGeEg4T0gzM0ZRVGdUaDBmS0xJeXpobFpLaFZnbTZwdldnNWlUM2V1VmFxcmw0bEw1eDNjOTZKVXUzeEh0blcwdnJGVUF6c29RWFI0cjZId1M4Vk1FRGZXOXJYU1FnUkNFbThZMWN1TGxGVUZ2MHY5Q3FUeFZmMDVWazA1eG5XRlpaeW4rZ0tSZVF6czV1d2JubC9OM0V3VmJRckFZeTVpdGJWQVdFeG4rNDNsd3BxT2taazJMUjAwWFpKTDBuT0lScUJvMTltWlBhd25ldlgyeC82VlNYajU4MGM4Y0tGWXNjVDl2RUZmZnRTZDBpUVBOSEhucjlEaWhiRVlHVWFJdksyWnFlWWFacEhWcDdsOGxHTVBldlUzMnJjS2w3ejA2SUk4SGNBSkEzYkJlSVJ6a0g3SXdURG5GWTNIVXhxN2FWOVlQRXA4MnQ0RXIrSGpUNWk1alBIQSs4QVUvRFNueTF5Qzc1RjlZaTlseXYyV3hKMlIvWGY1dlJyZGhDeVY5QVRVcGRWQTEwTTBHV3YyZ0FVZzhJS1hZVUk5eFlQc0hXMWxHUXR1NUF4cHpsUkswaUxYVmV2OGVHRE02VTZhWDQxQlJZTDZIOEtTNmtncWJNdlVtTk5IK3grWnMxTGlpdUxTN01jQ043Ui94ZnFxNGUzbWNCdGNqTXd3OThHTEVsZXV5dDdwa2R5bEV2aXJvY1NDcmlQSnJBK0NBc1l0Y0N2UGtLWU5uNmVENkRZaVNpZGlyWVJ2dW5qejUrWUk4RFU4ODlaZS9rZ0s2N0NjZW1valVHOXdpVkw3S0xqQmgrcjFCQ1RSaDUwOVVsTVJKNDIzVm9CeGVSczRGVnJOS0hnWm9DZG9ZV25IYUc3Z3FuRldEVlUvQWFvWFhRblJiQXl1SXNCMWkzSlhvbDFvSHREdnFnL0pFWEQ4aFRYcjJnOG1TSjM3SUgzY0x5b3hmR0lPOFdHMEJXZTQxMlBhcy80OE1SY205Z0N6R1NmcVVLNnNXZ1A0Nk9FTjU4eDBUb1NOVW83S2hLT2FITjRvbTNpQU9lRGx2MmhyVnBGM01qalNJMWhiRTZpUjlnejd5YTU0N0NvZkFjL2JJYnoycHNmbisvSXdONC9RTmtNMGNOL0lxL3UyZVlVQXJtN0N0WnBXZmxtUTlKdlZaeTJiUWg1MkVrNzIremRHREV6c1JJaFdHZUt5SStmeDFtdS9jYnhyWGY4YUNyVDd0OWNwYVpCVXdqZkE2ZnpWVWtpZXVML3ZIR0FFdkhEckxPemdNYTB1T3FiY01McUNMQzJZdkRJcU1uS0w5ZDJKbitwYkYxbGR4T0pqOG1nejNsSkE4d2pHMDN4TVZxU1VkaEFEOCsySWFqVy94K1p1b2dzc3E4M2RQQXREa1VLYWpwTFZ0TTI0cko1bUNLVVBHeVhRc2RuOGdOVDJFRG9qckhQdXF1aGJISmZteTVzTnhuYy9iK2VCY01zcTV0N0tsWWpZQXgrUzd6UkJUOHFodDk3UEQ3Tm15QzA2bi9sblU4aHJzK0VSdHRmYXdaZ3VqcFhzdHB1SUhOV1p2c29RajJTZGVja2d4aXZHTUNpaVg0cEVmaXRmNFZLWVdlaHd5NnVzdFF0am5ZN2FDaGh6a24ycitSSFBrb0lBNGhsSTFmcE9yRUtlYVJ3ckNNYjBiR29JYWxPWFZvOXZPWTZRbWNnTTR6NmlvdzNyL2x5SWtOdnE4RWhKWi9QVlJtVmxDVXBRSTc5VHYyV0tLVFV6alRaRmduWEJZaUt0cEhPcURxTjBLRUxwUXNZSTlhMkFPZ0tyVlBPS2VJREFLU0hWTlFnYlNBVjdNREtTTlZ5ZGtNUjNId2c0TWFrMDJVK3J2RFJ0UUJQbUx3OUJEdTEvVUpPaERQVkhmU09nemY2Y0x6U3lkSjRJRk1DM0w4VDBiZ1h0SE9jSXBkWXBwaksxbEViZDFMZHJ5RU9PL3cxRTBxY3BldkNBUHJyQ1NTdEFwTDE4bzBmd2tobUwxckNRVThPbE4wUVA4eGw4YWxQRGw2WmRETVBvZGZwUkp1ZXlsaVRKSDY1TnlOT0ZyeXorQXBqYXRXNmRJTzVFakh2K2V4TnBOY1I5d2JlTFJwQWJaSWVvRGVxRk55RWYzVldaOHA4SWNiaGF0U0xlMlpGRlJNeUd1RlhBMzFIWHhGbDdraGRVRkdnK0VGWmVPVnpLZWFpSVdPOGtib05SenZsTGp1WnpqT0JidEdmcm42cnQ5b1EzR0wyL2o1N3dKZXArYXVxLzlFV1F5QVRRL2N0WmhWdUlyWUtZVFQvZVlRTURwZkpIUjJ0OVV5UVFLVFNjSVcwazJhNDF2cVNjaTE4L1FFakx1dVhvQVNmZlRVdTg0L2MzMkh5elhhUEhYL0crUnBrUS9VNEcvVUpNVUJEWkRhdE00QXNmT2dXbkpNTStHTDAvMUp2OXl1aEVaZGpoY0hVeG10OHhzSGVhT1RZdEVyNTU0OUZ6WVM2aE1obW84em9ZL2QrbkVFWjdLNVpXY1Q0VFYzelNxdUhjaG5rNFZuOFMvcWh2OVl1L2NZMS9xbFRvTDJ1ZHFockhsNkhyVFJ3cnFJcXVjODJFaXJISEhzRGdiZGlNWVlTQnJNdldwNGlaRW5UZmQvNTJpeVdzYVVFWkJxazRoeS9VRXV6VnpTV0dXNllTc0FmU0pFOUNPLzBKMGhuRTBWVXBBSTBxNXladU9UdU5vR0RQQTAwejRHZUp2akw4RDJ3MmFIRlRvY1lKTWJhZHd1UFpud3pEQUEwdm85SWQvRVAwQmQ1WlNlazZaZFkyeFQxUURkSHd4YmphT3RxUXZ6Ly9mdlM0eEpDREZybkYzbzdaQXF3cWFUcCttS1I2M2NSZWxzWklJOGRLbjJQL2drOVV2SEU4bEt1cHJZckpOeWpZRFgwdm9za0gxYURyL3RMOHhpbkV2Uk5ycXp4ZVFyN2IrcTNjRENkbjRmVnFtN2oyV3VEZ3Z0aGcwbko0ckl3ajNOZDdSY2FYbXE4Y2dXc2FmWFJkNXl2d3JaODBSOStUWW9adndwcS9WVFRZUHdHVGNnUnRtWlFBSmRnbUNTakVCQ2diTDA1cFZHOVNtM2JUYlN6dkdpaVZ1VDlzTmZEM2xrb05TMHgrbW0zUTlRaWNJRHFMVEp1VVhsaUNTdGRkOWRuK0l0emVFRkVTZWJTL21idW5EQ08zUkNua0ErbjFxL3dVTkJNOXBOL1JCVncrWkxWbDF2SUVKWkZCeWxhOE54TkxaSlBGT1pTS3JPNU51WTErWnMvUXhTaWE0bWhSSHEzNkplTXljVHpFL1dSbzgydjF0UktvK0lIYTRrUzlvQ0c0V1Fab29vM215L0hzTU9UVHUvQTloZnc4ZG5yVjV2TkRNQzRBck5hYWNTbTJVd005ZE5pKzNyTnFtaEczcDVMTHlwc0p4Qm1VbldldW8xeVVNb2JqVEcwOXhGTVNlNkMzZlZIYTJ4dnRvMDltTU1IUzZoTkIrTllpaHlhTWRQcW9jT3grTEpLVkRrakxCSk9tQjVlbDZ3SHpVNzJyb0xvaW94bUFram5Ia1k1cnk4MkxiYlVTUjJLOHpzTE1VYkxnNTFIRitzNmxwNDdJNmdrb2wvQy9BY2lidVV2RXRKTHJCRXEvak85TzlWb2pOdGJsMjhkZi8wVWJzZ1RDeXpHcitJZzRQd0JtdFBVKzVXRVM4Q2pxRFZMUHhxc1c0UVNzaHpESk1TOG4wVTYxVXNhd2MvVGIvVm13SktuZXJONFY1a0RTT3JndmpzdS8rWTZLSWFVM01zN05DRWpBcUxHNU4wNEZPbktjaDRKeXpOZGlZK0t3L3dwdmRMUHhCVkJ3RGNZZmJtRUVlTEtUa2x6dTNyajk5aUFKakdWTUFmRE5TclhVSlRVNnI0VnhGU1lvY3ptQThwWE96QlNvanZaOVNwVlZiTmxEZzJTYm10SzNJNy9vZ3VUb1Q0cGVCYXBMQ0JtM3haTXpMODdidG5TVWwzMG1NNlRGSW4zYmdYaWxjQ051aDBLcHNyOEhTYmN1RUpOa3Njc2dPeC9VZEdySWxpRmtYMUlRYmxmQ05RVlZKbm9SM095SDJkK21SNVZhOFJGKzFYTXBIbG93QkR6anNBY0dtL2dXSXVwd2VZY3Z1V0QyNDRreFVoUXRQaVJmOUtjd0lSSmdzRXNaSVUvV1VFa1lnUTkwMEtaWnp2REl2emJZNHFtcWIzU250ZldrblZaMXJXdVBLTzY1ZTlmNHlYZTZCL3ZvbUw1RDVyQ0xiZ1V6SEhVVXlKQ2xiVXpON0VGRC9XVW9vMXRKY1VqdHdKVkwxZmYvR2pvb1p1RWd3Ylo2eEozdFlJQ2hsUHRDb1doNUFSekI5ZUN1dTEzOEkrd0hDMWY3TnBVMjZLYzRlb0k1YzBuL1k3WlRTdlBGSVNxZ1FxUVhGL3I4WEtuV3BlUThFQ21nOGFFakZOenFvSkVtZ0JWRE5Gc3BPN1FsOFAxcHFGVGt4empzSEFaMURraHVlQUNzTUJCTmg5R2VPMXJNMjR3aGw1Tld5OENHRU44M2d6WE1rU3VDeFZ5Y3JTNW5tUjM2WlYzcEY5aGswOG91MDV3b1VyWnVLeFVTMzMvUVEyaHpBRmtlT3VMN1RMSUQ4K2FnVjFVdmlmQlIwTEwwWEtzUzdaRXFJU3BwWjlTWjFJY3R1MllKSThEVzJMWmdCSHM0U3ZSd2k4dXI3YVdmWVM5RnVQSW9LZXd6UWxSbnpKT2RqTlZoRWt6dS8wOXk2cUVCZ09VcmRkRmlVL005dW1RM1lFR0xodnpWeU1kMUlWWk9lSk5BdE1MdVFsY2E5ZHJFVTlpRFRwdXYxUkNXRkZITEJkZ3NVck9PRVU2Z09vakFvZEJOc3hmSWVKSWNrdGtNS280S282Y3F3NTkwYVJVL0VOclMrbXVLRmg1Zms2c0wzbXNTZ3ZwYTcwdmxsZ1NIU1BZRzBnZUVBVW91c1V3MFRKaWpsVmhidlpSVkRtK0cxMDlIaTFFamJaM2RaSWNDSnk1OFFIUWNnQU5xRXUvRWlIN0RYTEtOcnVXNklqeDJac0c0RkxxNWVXSVlNTmdSR3hpZUZvdWtWZHMwUklNRGVGUjFSamgxR2ppOHdINHYvYWtGTnVBaVlOaENqSE9wblBtRjc5a2N5dzMxVjErQnM2TnQwWFdQT2tCS1gwWUdtR3lmTzFKYWE0SXRJU3RiTXJZZi9OZlJsb3RhUlBUcnI2R3FaLzByT0NjMjRPaDA1NGNHei9BU1pyV0grdTZhcTBXWllQbTNma2FjTUtJVlRVL3pNdW1KMmJqcytyZ0o4OWVDcFRxUzdURFk4MnA1d29EbmZKcEJ2ZGxnZE9LTksrQkcydDl5cEszM1dzVWVIRC9DSlc1M2lueG83bEVJNUV1ZEVLMUR0bXl2RUk3N2pOUWZ2Z0RRMWd2Y2NoamtVWGpPY0taeVpEbFhXVzdiWEQvMkdCam9tNTNOWk9vWkRFZFdBT3Q2QzMzMmIzU2tUMWpvMjRMRjVHZWZLY1d4a3FZcjByUFpyaTJ4NlJtUEFQc0RIVlNXSS92ZkZYV2ovZndJYkNxQ21qQ3JXajlIeXlvaFdmMVFCTWV5dGhkVlVZUythNFlQUy94NExzeFRlK2tmVUNvdlhhMG4rT1ZicDh1MktOTDM1dmFmbHg1QUF0L1NFV2lqYmU1QklLM0UyeGZKVDNhL0IyMWF3R1VSYjlzSUZ0Si9ydUg1L0U3b2hCUk9BL3Y4MHloeUtQSmtDYlVRRzZaNTE1TnplMmZ5OCtYampSdFZEYW94dWRXeHQ0N2hyY3lzODFOZkhRTWxoaU9HYzVjaXBHMTZMUW04amJNN09jY1YvVEpGdmN5UTg2R1JPM1lEalZiUS8xOXVrWVBEcUE4YzYwZnZVMDBBWUJJWk94UWZuODlmbE1vb2hIbDlhdW0xaXJ1MmlYbFh6aGVqWC9KR3B2aldpOXRJY0VzVVhVVWdJU3N4WTQ4ei9Hd3pNRUZMT1B1cmtzTEU4bEFaVS8yRmJYekt1cWZoTHVYK1Irc2hOWS9qQUhPajFjaHg4SFd4dENQeXBpVllDOFhNdmtGMmI3MXZzSjhRZXBTbzArclR0bG1vcmY2dVVYR3FiRW8xeEpKMTlZYmtBYjAwaE9uYkFjRkJaMmdweUdDYVN1OFJabEpMNVZQcFN4UEgvbTVSK243STlTV3c4WGowYU9kYWMyTncwOW5YaHNMWjI1K2V6R29CL1VaYWNYdDV2cll4cUZGbnhqdXBRMTlJcU16Qnl6RktweVN6aFVkSjI4VU9NZTFGbk1hZzNka3V6TG5Yc1REQXdsM3FmcjdyQWdlMnBnZkhhOTdlRnIrOHRrOHBOSU9ocVlFZzZtNEl0N2dHRml6NDJQa2dJYWFMaHJQS0YvRFNUT29VTkJld1QyUFdyOWFqL043MUU1eXZJUmszQ2pNMXhaT0NRbGk4cU9nVUgvczgwQytTditYNlp2aHJhaGhuK2VSTndGNjJNQ0oyUmd3Z1pzSzdsVVlpK3FlZk51YjdZMzlGVVdOY3NwczVMeHRWZTNLYjZBOGZDeVVyQkpEZi9TaVNsZEsyS0pKL0ZlQkMrYzkvUi9MTytNdGl3dWt4NEtmcHoxb1IxR3FkVU1tOWVaTzJqS0hvb2lUYzBoKzMzcFB1aGppUEZGUGhlWmhXMGlpdkE2NDROZ2gwa04vZzBjR0J0VHpORHdhdGY2R0p4ZTVPdUxJQnJhS083UjcxUE5sRzJUTUtmRDB4QWdPR0xaTjRLcHIweGRsMnBTVjF1TjVsbmFFWW9hemFIMnVTUmRZcWNjV3VodDVxOEJVYlVPemt4KzJib2pjVDZTR0h4eFo3b0dVZlZoYmNkenVEOUoyUGlPbkdQK1Y3bklMamhBb2VtLzhVOWRzeGx1RjFtVWxaS0p5Z2x1dWVNS2h2ZHIxcEllQ0ZEYlJSbzB5Y3NIZjl0Nm5hbWN0QysvSzhMcnlEaDFScUhMYXVCNHNrOU1oWEl4Si8xUjQxdExVcXVoZm1SRjRENngyQU91VjBBUE8yWVRjMTYrSjJCLzhmdDVQK0pRSWhhN1R0bUNTUlR5OVhWRGs5NHdOZS9QcTVQQ0RrRk9kdzROM1hBdUNhbEtKSFlDQWs2b1FUYVYzVmR3dmxlWkFqTkpNdkc5czI4TlpyTDZmK3FxRmt2Qjg0RldEREFldjNoc1FZU0FaRytIbUhWVDA3a29oMjB4R3NyQUtGMU9kVEF5MFVESnRKekpnejcyaXVudWNPS1FUY2lnTExoUG4weXY3WmVXeDl0dVFlWWtiUGJkS3ZydlNJV0d5UDNod3BHN1RlOVFBSWpXM0s0YnZkZGdBdm1zVzhTbGo1KzN6WHFTcHJ3R0wvUDdwVzR0dmtvM3hvR3RXVDNPWjR1dkR3QzcwWTc0ZHhlUDh1bHE5Tkx2SFBuVFZiVW5ORW5HTS9NMm5JeEtBOENWMi9NeG9vNmE3VGJ1UXIyc1EzNUtKMlV3MFZFVU1JVHlDRmdOVjF2NTczZkQ0SWk0bUpLdXdvY0k5a0tPR2dBelRqQ2VVakp4N0dtR1BSR1UzVkR3WWFBNzdYdEtvZ080VmRTd2x0Y3djVHN1QTlsVXhac3RSMDVqd3Z4VXRHbjUrMHN5TmhUK2ZhZFJpUUNoVFEvMWt1VzVzcDNoVnI0RW56NlJSS3l6SnhYWXJCZ0pWMEluaVJVU0E0NUhjZTJiMFpZV0FlV1dsZTdpVWY3KzFzMC9EdXQyeklEZFVVZFZLVitLZm4xalZFbjRNWTA3ellPTE9JU3gzUEMzbi9CUEo5eFRwMC9RbEZzUS9jQmQ2dE45QTV3K1RTVTZvaXNaQUhGRWc1eUZiKzJrN0hzUjJkTThPVkxQOTYrZzFaTVBhTDZvYzFkTXdLZFl5STR4bVUvaE5EdWRGVEhCS3dnanU5dW9CK052WnZrLzV2eXZoZkNGYnB3TlVJS1YwSUxnQ0YzV2dxWjB0Q01yaUNnODJ1UlA4dFBaY3hybjlpUERmaDZMcHhLNm5DR0J0QmUxVXI3c2VpU2lXaDluTUo3aElrZTJOQWRndXZxRUE1VVFTZE90MUhRdkRYM0pjdkFIQWRGSEVKd1RobFAyUVhGSkpLSXpBcHQ4ZUVnbTFsblVoeWJzMlN3MlBKYTJMdmJaei9kN0F1TEUySUdiMDB1bDVHZjBubHdGM3dlS0UxZEhHclpIRFRSdGVpQzhTNkhSWllaWTRwSHBVKzJOMUlyM1dIS0pqOFZOUXhCZDgvYXNJYlQ5TFMwK3BxdURUanVmNTBCRTI3TzJRcURLL0tJVW10aUs1Znk0aWhVTEdVdjYyTDJnemlFZUkyODF6QVc3OWo1Rnhwd0VYZ0hxTnJkNFdjR2N5NkJSUGFhVUVKL0NJbnZQTWk1Z0Z4WXBJYWFMQmtQL3BzOVFuQWhQNFptTXNYVVV6aklaY291Wis3bHRuUDd1OHY1aGpDNzVRU1FnWHVBeHV2ekRiblRPYVhRWDFrL204a2RXVzRWUFFYL1R5Y29nZjh2VG9kQzBPUnBCZU1YUDc3UHVZRFNsWDJVcGF2R0NMTmc3d0kvM25ZU3FCaGFOaGt6UHNwV2w1Q0JBSjhIY01rT2NXdEdPTGthOFVUWXRiV2JZbzFtZkh5VmhNV2h2TlpEOTB2amR4SjVKdVhCZ3lmMjZwNm5IcmlsbTBJaHBFeFdrb1BmaFZHSUoyN1FuYmkvTGszaWpKWHlKRnZXLzhzcGh1dmpQMmZzVXQxY0piWVdleCtSZkNNektRcE5TTE93ZzIyME9mY3Z6Y05VRGNvaWRROXpXUkk3cnZtY1JNbW0yMFR5MEpxQzd1U09Rd0Z3L0k1L0QwejBsYm9wK2x4STJFR3ZpL2VVWE82SGg4UEdEMzgxRVdobUVmOGEvaWZEYmNSamZuY0pLTGVKdmZNeVRIT1AyNGZnM2xGVEl4SENDL0RwN3Jic2VrUGJEQUl5b2Y4L1FmQTVjZGJic1FlV2ljZkRPSEJZWmRjVTdNWHlVRG1sRWtTdmYzdlYvUWV1R1MrbkVKcFdZWGtLRUN4MGFaNjE1T0ZYTFJET2FFYXNsL1dXdnl3NWUvTW1PeTIwKzdZSmFtdFJCSzBFZkxVQk5saHlDRzFZUTAvd2hjd05Kb01WZ0dlTFhjMFY3ckdXakx0OFNMS2hJVEw3RHJLNU1mcDNzM0tKenNrL1hCNmtOZEE2OVB2NzRPYUJiclpLaVVGMlloNkt2OFhKcTB0d255Qkk2RlNRMUlZNGxKZkptQXNibDl3bWJhUWg5dHpXWUtEaDJWT0lkQmFNQm1RMHBya3dQNUFiREdpbWJrTU8vZDVaQ3Y5SHNSdGdTb0JMUENLSGhKbnVLZzgrUDllR2VKVVdkMzg2NmxOZ3NjWXo2b2R0MlFxdjVWcENWNitEaVhLM2J3QzE5Zy9DVW1FOElLN251WThkd0FIc3BNQjBnZExaOWFnWG5YQ29kOXZVSDZJRjZmSVU5d0w2SWhTdVNnaHFveEtycWxwbSs5M2FMME1YNEp6d3k5amNyK0lWY1ZnRU5OM1VGS0UvbElESjJCZHB5NG41cTJVOU4zdlk2dlYrSkdpd1ZrOG9VelZkQVZDeDhTYVVwcUNVL2oybXpvRnZMQTc1MGFLL0I0elhka1hRN0tJRDlZbFZHSm4vWmcwcmVrM0pKcHNJQk5vM01yUXM0bXZCYmhmbUJjb2M5dDRpNCtlRFFnV2ZvbGsrazNiUVJ5YWFXTG9oWm9MYWN4ZTY1ZVJZOWMwOWZnaGZyeVdxcnZzR3FyOVBUWUV2NERjN1BNQTU1aVN0WnNyc0wxeE5nOVNFM1MrZzg0VzZjQWJuU0hobnhnaHNMN0NEVU5nM2x6MWJPL0h5OHcxL3BTNUp6bkhaR3hOQ1NiNW9lR3RaN3dCSEdHU3dXNjFhOXVLZHhETE1hZGNkcUlEV21EejFXZ0dJR1VWRG1MTTlXSUd0MTgzUmJHUHQ2V3IxVUxJRXV5YnBUTEZaVVJYZnJnRERCdXZESUJNTW5TOWxZNVRnREVNZFIxZWZSaHRFazZoWVhHY0ZUdURpUnFnMmI1Vm9jcm5YTlpOTWxidmdWNWpXeEhFT1Q3S3VkQXhRY0JDMWVKbUxaS3lFazc1Z0Zva0k5OWtnZVlLTzN4Sk5GeUEycXhvaVhFQWpnOTJGUzVQNEU3QTdtLzNwVmIyQThTUHZxUFVHbzJZK2poZ0lWNnptQjBvT0QvWFoyM3BjQU9RVjN3M3h3Tmo1bVgyUEllTmlkRFRSZXhDc3UvVGVFT2VKZXJvNVpVL1lwQmQ0S0M3Tm0yMDdIZW1wU1dpTTFEUy9nSWZXWXJuWWZ6RFZnWjhSb015WWVMdXN1eUNyd2hCOXhSUCtiM0VFbTBDNXBNZXc2WVZ3NjdaWTIwYy9TL2l2MDdqSGc2Qzd5Ujh4eS9wT0lZeERscFNmR09QVXVrK05tMmtkNTBLeTBBRkM1WC9jbTZMVHVOQmM4ZmkwSDJ4TGhlMjl3Rm5wTHZtZ210UlkveFNRcnNrcG1JK0s5dnltWlBmMSttRDByT1o2ZGIyM3BOb0dRaW5tM2hjNFhxS3NnS2hrTVU0cDVqM1I1YnNYclduNFNndjM5SllmWmZTWjBGOG5OenlROFJXNnJycm9idUpDT2piZHJJVi9pUU5uVTFlemdqQlVlTllpU0pKVDBKMDNPSCtNVTd5LzE0TFcreUhYZFBEK3pLMDdieFN3TEVGWnRncEM5L2toekp3dUIrMzdKK2tSakQzRlQ5Y291VmJFV080bDg3QllXcWJPKzZwVXl2WlFlM1kyZVlSY0hwc3pzRnY4QXlhVGtNQzhzOVo1M3dmeGRZa0JWZ1RKOFhjNFFhK0tEV2psWjBGK240T25DR3M0cmFnT2E4ODhDcE5tRFBDR2F0dEFJUVhBWk1ybFJ0emZZWmt5aDFSQmY4TjBVZEg4cXNCaU9GQ0JzcVlieEFRWk9LM29uK1lhQXA2OVpQRmxlTE9EVDVNZjVpZm5ZWUJSZHVEbUlkVTlIMVdOekZHVFZzcDNKOXNiZzB3M0I4R3djczRtM1h4T2QyNWxXMkRBckNDY0VOK2ZRV3VYUE0rMUU2cFdDbmhSVGRwVWE3ajFWZ1MyT3pDWkoyZjdPR1A4MzZielZkK2Q4bTIyOUVEYWZEWHRkUFBQd2FEQVUrTmR4RnY2aHhZS2FsdEJJVElhZXdPYmpzYVE1cGlxN3p2UnYrQTZ1anF1dW9vUEltWStESG1jVy9venVua2xXOEo3NGFWKytCUGxoa1VTR3VKRFRCYnZ0NHlWcy9ITmYyaVhGTVdGRGJlL1hwRW1OaExobDl6OHRKeFR2TDJnZXU1Q3ZMR0FQQklyN3RMS3VIcnlqc3NVcnZOSUplVXMrWFNiMDIyZnJ4WHN5ZmZsbkdQaTNIS2pRZU1icFJyeDFwaEEzcWEveERRa1VOODdjYjJ5R0I4RHh3NzdOMXNqZndpdGtYbHJpMGVVMHBVWXVHWDNCZlphNCt5TmtnOUV4UDI0OTVCcndHVjZQUDRiUDJ4Zys1dHpnWEs2c21XcW1uY3p6Tm5kSm5OK0JVa0IzOVg2WVZVWDF2dm9MUVl0WUJXaTduRDJ5SWY4TlVHM1Vidmg2amFpN2lGWXlPak5RU3RIZHdoNnVXR05FVFZJNjJSTXgwTUJzNnN1WGxuTUZYTlc1NUVsYS9CZUM4d0plZmhpd2JSNnpZMkdZMzZaVHhRRXFlNGd1czFNc2x4azEzQnFpNHNHUEJoekM4Zml2TEJvcmtkY3V2bXErMGdSVDdyYnhKZnpudFRmc1VseWoyZUY0Vlo3TC8rcE91RlZzUUdRZm1nU0RLZXRtY0ovNE16SjJjV1YrNGFoYUVxY2cvSER2emdjcGxINDJIc2EyUitNZ2treXRSNGhTWFRuZ0xMVXVFallHUEs3b0ZBRGhYRHJhT0xFYmJNSDJXV0dhRHgvMWk3NXJBeFBGYjBkbEg0OVNZNjVGZmIxU2JUT3dSSkd6Nmc2SmN0bTJCTXRQVlJvMlh6WlUxM1dxeVRBYnBkd3JiWXIyTjRVZ2RSdzV6ZGc1b3JybS9qVlBHbGpwZzNWM2N5eUU0QTRrQnZGaDZvK0IrVm9vRk9nWjVyMld5WkVkR3RtbENpdXFIQWlJdnhMVDBSZ1JxeDh5M1hxWVNRTVFwK1VkbCsrTkZ0OG5ZR2tTclBmcVFaS3JiNzJlRy8rUUNuVkJZSnRnV2g3Wjc0c3c1dm02RXNxR1FmZFZIdXRDMW1FN2NCUUUxZXFCb1N1U2tLSDlQS2VuQStId3hrWDl0dnFQMWdyOENRZWMvN0NjQmxCeWV1T2k0c1BTRDIza1A1dlZaZ1dVMDgxTk4rUEJ5bWVmSjB5VlM3bjNKNkt3UmUvQWJzNGVWTHo2dkFZbUdVSmRCYmRwTDB4UDlRTkVQZk5oWldTSzVVcjF0ZXo5cklUcWJtcWF3bVJjMWxzTXMxaHY4NUpwdUVrcEJuSXVERndKWjM5OFgreU82YnBsM1l0YlV0QXRJSmthbnhGZjJ2ckhkWDJWUFZoWmN1N2h5V01sK2RmOEczaDZOeDBmR3NuQTBwL1BQMXA3WlhCL0w5MS85ZkF4ZzhhaE9aQU9NTytTemwwT0xkdVhvazFLYitnd041NEMvOUluMSsxSk5Xb3JZQllPSEZ3OTVGaXhTbFM2dWwvVkRxWUZXc1ExQXpSZEdXRkthOTUrbTdTVGNZblQyeFhyaXAxckN3cDcrRyt0MXZna1NDekxRUjFNVDUxTHdJRnYxb3hvSGt2UGJXUmU1TkNjRURvaGg3R1FSSVhTOHM0L3pycGtoSHhzcmNHaVB1dm9DYWdJck14dlZyeG44aEMwdFpSbnVtYjljNGV1azM5YytqdFJpa3BmemQyb1gxWDlSaURHOWY5UkoyMGZ1d1BPRVFsVjk2aC9TVGNmVEVPRzRrQ0ZxczRMTmpDR3hPOERzbzIwLy9NL0FOWENaNHZGeVViSXFYTC8wZkI4cTkrdmxnaDB2Z3VXcUxNNWo3Tks2Yy91Z0pYUHpoZEM1am4wOTJmYnZuQXU1eTNlTUhDeHRhUmhITHVWODdnbWtaQURma2RIWlIxWnhLampLUUhFS3VWOHFRR0ViVUswVW1DbnltTW81cnFnR2tKOUc4em1oQXhyYWtVN0hURTRiWnFnbjRDRThXZjhaTS9NOTZ0MUMvTTZXN1I4UWRmMGUyOFA4WHdDT1B4Mm1wYWIzZmNlK0hWRFZZNDI0SDBaVndCMGwrYWFIVGdnMVBGWmMzNVlsYlpkWXpOT0hUMnlpMzZBUVZsS3c0Nkdad2hLQVFsWDhRY3lRT21vMm45NTdOVEdwa1BWb1ZVMWkvNC9jdnY5bUJTZmtxbXdtTGVRS0EzMnNxb21vNTVrcXRnNCs3R0FZd3NDOXA1UE9FYmZZYkZMbTBNOEQvVTk2UjJiYndjMnJWQmZJQytMZ3JRMW44QlhuM3FkUlZ2U3Jqb0gwZ2l0NlR0em5TNHpuUUNTd0dNa25BUWVjY1NoK1VEcjNwYkRTQi9yT2FpN1lRWGMyRGVuOEt0VjQwbGgzMysyMDh0Nmw4TkhSYUNLdzdQYjNEMFQwdzhaWnEvSjc0MjBtempQYXpEWktaT0VZSDB3ZjZsWHBnUWxDdExDVGh2QWZpa2xxc0UzYms5aHRFbUtMN0hpMGsyUmhCdHRLbXphUUxaUGZGVjFCWE00ME5QZ3FxVkQwSU8xWURlUkJrV3AyMjhlZC8yYmJJOEVjWER3KzFpUGdWZW1WTGh0aXpKRHpIamdOaXA1RTlTYnlRUFJ6d3V2amg5R2x2ZVNrS2FLZk12L2MzZ3luakZSck1vZHdTcUlSZGs5R2xjRldZZWlUdDQ4VzNMaGkzQWp3MnpvMVFvODZQVEZRdTViT1ZxTWpiTUg1QXU3T29tSkd1amExdE9CWTNFZ1A5QzU4VjN6ZFlUN2NiWUZBdmE0Kzk4RFkrUDBIRThSSStwT2VkYUswdEdsVXR3NDNjWk1zTTRFb0pzRTBRby84YVUxS1p4YlJKV3gzeXk2bUhod0NqUDFyOUxiOFlzamVGRTB3SmdQR3lldjFBUW5HMG9HSGRLQVl6RjV5ZEdjWDVnQUR0ZDNBYjVadkdvZ3NOWHNiZXVLQU1oSEtlZmRmSkxZMndQRlViUjk0cDgzVThhN3J5TWp1Z1hCaE5hRVp2WWNrQkR3TWYvVCtaaGFVNEpJSGFOeXN5a1F0amhjUU9DMG0zV1Q5RFNVby9TN0NmelVnMUFhdUhYeVUrWlhjTnQ1QlBlRXZGSDBKOWpqR2luNFhoa3VNSUx1RjNhZHB5VHc1WjZrd2FsLzZWZVB1STBaNy9Qemg0ekU4a0lzTGhlYU4rU2t1U1NwWVBzcHMxYjhGc01TeEFWTWhIY0V4RytlTXVOZU83bSs5WW5qckx5U05wclcwNDRBZ0FQRURMeFJEYkdZVDRFTUdHWGZlMitiR0ZCaE1PazhpQk0reldIWTBwTUhoeDRXOXhFWm5aOW1vb3VnQnphdCtMQUJnUWhzZmZPbmcrMjM3WHB6Y3RlRWJsT1JzSFBHdk9UYlJiZFl0TzdUTUVlY3kxRXFEUWtPZzZVU21PRkxpV09rbEdSam9MTnA3MW9lRkc1YjBjN0RubDlsTWI3NXpNSGRXZlJtYnhMUWVMbkJGaWFMVGlHUXBjN3l2UVR1WXEwUmNQeTVIditPNGhRSXV3MElFZnUyUU9pdTA1cTNjUCtlMHEvTTBQZ21UR1JCWlJlWTFSdnMrdm1LMW1RZngrbUo4czZodklnUGNReTd0LytocVJUaFBMT1EwcUtmOXFqWFNpRVA4ZVN1TFFZYWgxUVpsOEhuVTBhNlJleFlNZW1vR1QzdmhOVHdTT3ljNzRhdjhQdE91R1dzYkMraTZQZjR2VVo1c3Z1ZjhkVUpDY0V6V2ExVXJDL1RaL29HU3l6bXhyYnpwNzF1aFdhRWg0VTZlMjZkendYNFhhODJnWnAwdDlvekhlUmVDZEZhbUM4Rkg2ak1kSXhFcy92THc1QlZBd1BCTFQ0MVFTL0ZiaXZ3YXpGV1BCY25VZE0rWVNNZS9JTVFCR2trRFBTWUtSNXgzOXRuMnRlWE1KdGMzZ2tKOXZEa3IzeVBxdXplNXNsZTFOUVF0bldNS1JrOTM0UTZ5Zm41dVdzbEF1aW1JMXhlckx1d3JzMS83bXZYUDMwcnJkemxJNU5iWm1uUUhReFNLVTgrTFFuYzlTd2U5eTZpM1dkQ2pvbUFRdExKdHRrcS9kLzF6Sjd4L0VoZk1Yb3hVUkJaa1AzNkpjMnhVV0pCbXJqS2pNRGNCei9Bc1l2endUeEFzT2tVT2YxWTNXbXFYSG9NbG9BcDNVSkY4QzdtcCtvaVB6dURoNUwxQTlDMlhGeE5PblVsTVhhOFBWTWVPazlIYU1YMHEySTV4UTBGeFJCaFJ0NWZrMWF6ZFh3WFcrdWJJWGMxdDgxb2lNQUY4N2FzbHNPakJVRDJHZFBHREF4MkhENVRjTjc2TElzR0dmL2lNeHNoSHpvdFhUQmJnYSt2YW5aazlYc21nZGt4NFZMeGs4UmoyMUlKR2dIQUdDUEJOOFZtczgwUk9iUWpXWUh5RXRGVVpVaUZFZGw4eGJ5djhIQW1SM2ZjV2dqK3JwTW9LdlFhd1Y2SXcxNllRYjdweHJWWmFzYnJBSWg0V3hPa1dDWm81dVpGZ1JvMmg3R1hSSklocWdKVkxpK0ZjbnZIRmtYR0lvcXR2QVB2dGpiVldYMXhmdVNTVFRGSitJTElQVVJOM3U2QkJZVURvdW54R3NEMys5VHE1QVpMTytZV3N4elJoUVVHSERsZnByV2c1VUM0QldmTlpsWHZYTkpSaU8xSWZBemg2VkpmQWppYUNSMmhvUnpwSkN3dlVVSWtKUkt0Q0hvb1NuSnBvWXEzTFZRMm1DTlZMKytlck1EZzQ5N0d4K0ptK2lUR3VpWmx5bDNSdnV1bUw2SndUWXI1OGRncy8rWWhtWXNkYVFOU0FmRUVHQXdPMmN0SmRaeUJ4Ly96RHgvSDlBWGRyNm1sQ2lSWlJVNFQraWlqdE1PWFdIbzVKTDRDRW5ocVFVZExKOEZka2RtRlR1SVJaREg2c2Z5eEFEenNLUW1hamV3VWloOHpUOE9pSW41OFQvSjFTdmhGZ3lYOXBBQU5RY2VIU0dQKzd2YTFmSFY3NzVvL1lZeW9kWEZvT21CUWZ2ZE1YZkF4aEI0Nm9xK1g0bmJzVzNtOVUyZ3ZlVXV3TEVLblE5L1QxY3RaQzAyVFJVa1l0SkpSYmIzY3l1S3lWcUtDLytmYXBDeFR4WkMxcjVXcGY4ZVltRVhKSC9LRmdGSm4rUjJIUnA5YktKZHR3SkViL1JXZktKR1FKSlQ5U1dnY3NrTTJsaUJkeXN5SngrTm9mUHFNVXVRNTRldHM4R0xmZk53TEIvM2ZFSzE0N1FpSEh3TlJCdURORVdPaEpFaFJvN29BVytCd1JUSlo3dUs4MEtuWVhPL1hTbjA5akltUW1yWDZVSVhDODFNdGxvclprMkNSRXJxZkxrMTZiSU0vSlBqcmhaeGFtZTBZNDMrNDZCS1l3ZWdNT1RJQWh3YWVQSWExRlRMbVBocWoweHFQbFpEVGpQcHZ6R3JQUkZ0UmwxYU93ckpXcFJ2L3VvN0pRWmZlTlZCSVErZUdwaW0xVlhOUnpTVTh0dmo3SVNGL1FmZE1paExxNm9NU1pFYkJXMWtERmoyeURSRjR1NzFKQ1NuY2N3M3BZNXlzNE9rZXF4VzgxTWxMamcrczFXNC8wR1c5Ym5vZ09vaU1ZM1J6cGtDaUVMSG1BaUczeXJVb2VLL1VER3hNc0ZTY1VkT3ZJMENGTTU0Q2J6Um9TRityMU0reFM5dnVMWTQvQ0pybDB1Q2YyRlNERUZQaDNMbzlrUUZMdTE2aEF2L1l2L0FzSTV4VHUrYWtxTVZWdDVkT1BhOEZCOHVEcHpSeEJlVFBSb2VFMmsrb2tSbnhYSnhxLy9WSHBldEtuU0JZSWlWWnhtUHQ4bFFMa25jaUl1WUNQMFhFc2FIdTJDcXQ4SGVDMlprREJyQ0RvRnZMU3g0SmNHNVlSQkhCU2NwNTFEeVN1c29HL01tMGE3SUpEczljYlIwakR0SXM2MHFsRTk2bnNrbHdsa2pCSXc5bTdJOUVIMmlacjBsRWt2S051NTNaUlZDaVdsUDZjVmFZb2RUclRSVllWL29rdDY3SmNJZGUyUURjWHlDWTllUHliZHNUWnRadWpLRklqUFM5RU5nTG5EekJmSmdpOWJWU3JaYjZzOUNlUjd4dytWdG0wQ0dEUkVlSkw2UzQyZGtydHU2TGlYbXI1UDE1MGFSOWVPK3RPNnh0MzhTeGViU2lEUS9wRWJweWVwTnhKalFYOEpPbFh5QmRtakJnSnltWjE0dDliaXBxTll6dUZKUE8wcUJLOVFodHNDbzFsaWM3WDhMS3BCbjUxeTdBVDF0bnZ2QTh4VFd3MnpQcEFKSC9sOGVaV3paaWtReFlZMUdxSzNUMjkwOWRWci94dkp2SDNVSXgxSlZWNEdNOGFnYjkwUDRmVzV3M3dRY1ZvSlJLMnBsQlV0OUdTbkEweGlJWVQ3V0tmend2MU1SVnFpbmh1cEFYRVFleE9COHlZSzFYVDRacVRDaFIwSEVLQnljN3daRXFxd2hoMUtHN0FSdUszWUpCQnZ3NGwyakhCWWdLVFJEOVpmUCtIWVI3NVBTUkY5Nzd5SzNWaitDYkF0TkhFdWZ6M1AvQUhCK2ZYdTdmN1VsZVIwdXNSRjROWGYrS3JZK1VKeVo2L3ljZmt5TmNmeXhqOUVBYU5CVHlIQ1kyMkxFajNwanp1bHVhVFVzLzVibnJXZnlaWUhlMXprSWhCamEvVGdKK0F0WmcyTWRmM0NhbU5xd2xiV0I4QnNkM3V2SmtHanpxT2hVcTIrdkd5NG9pd0pNUUJEL1pBVnd1UlhFTGpjRVhpb2RyVng0MmVZd3ZHYXJCUHNBbGZCU1B0SVJ0MlZGcGdBMTVlVW5oeGJYdjc5ZW1SVXVUZVlKSXhQYzc3Z1lDTDZQTEtoQzZzWklycmZpbEp3KzRGSnUrbXlMWWtPNnJLR2x2VUsvV1N0d1ZVc3F0UVNLbHZRajhWV3BuOEpORVZJNHRjNzJIRXRTYjZERzdOM0JiemV0bEpKeGptTEEwc2dHU01OWnZiTEszNFVYWDZFSllpNEJ3ZzFwNzNxNmY3cHNldDdQWXJ4bnZnZVhidm5qTkc3UUErYnAzeldxL3dRQkRLbDFCeVEzM3NsWTdwSlVwVHJvd1dFVnlscG9sRURzb2pmWitxYzFuRGE2VmxwVVVrZ0U4Y1U5djkvejQ5TVVleTdMRFQwYlJIY2IwZzlsajh1TmltR0lpb09oMm10SzEzNEhFTmZSU0Q2RVpPQUpwc2tXcEhXZEllQVkvZzhYUHc1RDByVndkeUN2RnAxQlNQbGx1TUt1RlBKOGZ1a2xaL0RJc1NqbW0zczl2dTJaM0x3UVlDeWdQdG15T2ZqN1NKVVpZS1dKTGMxcXo2NEJ4R1Y0RmdvcGtDV2RDTVA4WEZoWXhYcjR5eitJOGhYcW8xbnVrZzJSWFdqVytGR2w5Y1lQUlhBS01JVi95WGRiczRPSVlGQ3B6d0NIZHFuQWhKRWpUcUJUV3hXWitQQWRkQ29LSnFXc3VtVmc1R2QyYk10OVNKNnk2KzVFRHY2RzNhbzNKSkRoTk9zR09LbU9HTFV3bXhxUjM0b3lEQjE5L1FuTDNvcGVxZ1k2eWZFUUx4L3U3cG1ZSmd3U24xejJMRlhKOEQ5M1pFdEw5RDBPWGIwNFZSYlpxUlJjN3lkN3ZsK1JjUnZPM1QyYjREaTI2ck1ZK1Jzcm1rYnBxNVNYZ1lrdU15MGFrVlMwMzIrK1kxa1kxdHc4eFhTRFEyS21LZ2RMVVRhSU9TVXRLVnBlL01DdkE1UTlQcmpLa1ZnMkZXYllpRWVGaHBZOGF0QmtxSnp0LzhQSi9UL0k5OUlMbUNYQWtlOEJxUkNaZTdOdndMUXBaaUhJSHJjVzA1VmQ3OXRTQ0FqRlgwYVBPdnpoV1BsK2xWVTFEZSszQ2RCcmR4dlFHS2d6bFh0QzdFL1NvZG9oeTRaWVJkUVlUOEdoaWE3ekY4SUlJa1Z6NnN5YWhtUUltRlc1cFl1OTZFRGhLVzZ4dTk3REIybXpNTnpmT3JFZkZTcENtRXBZV2JncUZMdWJXZCs5R0RYOWtYRXdvTEhuTDBudURUZmJGSGZGZGx1UXZBd1lYUzRwdmN4MzBQUXl1MmxkNkM0NmZhOTR0OHdJdTVSWVVzTDllUkl5YmdLbktXdHR2Y3BtZGhSRFB2S25XMGo4TE5YNVJTVGR4SFNyQ0crajBoT1VjTitwOUZXaXhteEdSVXNnSHp2MzFSNW1JRHVYUkZpMVZWTXFmRTFCWkU4ZkpMZXFqNUQ1MUpORGNRKzZVVU1XUllDOU1ScG9MOG1OelRaTERrc2J3cGlpZVNPMWpUTkMvVUdIdmdjS1ZPQUhZcXE3WnRFSStmc1RhaU9JQmdGYnA0UVJLOEZUbys4K0ViaGNZai9STGtqNjkyV0h0NmM4NGcvMTNlamtycGhrT0FsdDJnN1RSSE1JYVlXSEgxc05nUTVzVHJodUVEeGhSOTRUN1U0MkZLK3ErYzFxRzdTODJ1SGN1b203Ymd1c2ZCS3RLa2JIMWloanAwdWxMZC9GK1VRcXNoY3lFa0xuVDBPT1ZqMnhjSVFPaEJRUjh2SllVeE9NZFhkaXY5cmczZjk3YlAxSVNDZGtSZXRmRVBJcEZoQ2RMOUUyMzU2NGpwc01uUjhPQ2ZENGNsNzFQcGlsYStqR0Z3VCtERlZ3OURZazZiMFNiRmtyVjJlaWpYUEtFcURKd0NOa0lDc1FFQ0I5QnJqR1ZidVJBT003R1BxcjMyNWFxZmQ5TXU3VmxGZUxoazJKMmVPT0xabWV3MFR6MjFPazBybEtnNlNUVEFENEJJVzUvSFJkUUtWV0N1YUxMZUpXRlF1dEE1QXZvVERrZnN6SlVMeDNFV1A0QVR6UGxUV3JUT3ROYVFuWjFFY3lDVGVsendoV1cwVUVFZk5wQllGTHlISjBzSVN6Q0pWVzZZSVdWa0dYdVNzN2RnZWlUQldEN2FZU2ZvWXo0RC9BTHovUHhVTFEvTHdEMnYzNCt6dGxVaHd1SUk0bWNQQzhHRVZYWlNpa1JjVHFQb2lHRzVZYll1NHJYNXM0T1NDbUFyejRWdTI5VXR2TCtXWFNCNXQvaWVIVHBQWmROS0ZTRFJmMjJEWFBGMENtcFJmQnZjeWFJRU96WXBKYmRDZzAvOWRNeVlHWS9IZUdocU82SGs5Nm9QNmVEQ2tvbk1tQkRFcXlQZGIzalJiQlhhdkF0VnIvQmRyVmJPYmhoOFVZWWRET0g3WnNGTXlzRW5RSnU5U3RwQmZvMU55L0VoaHpRVGhkREFRb0YzS05JcE8weDlPc1ZyaFlxL0VONWRBbVB5VjgvQnlqbWI1UG9xQ3FsQjdkNVNseHY0TkRVM01adjFtY3l6c1dSMjA4L2VTdmEyQXlGVlYyZTNGR3lkd2xkSHo0cUhRMllReGZPcHdxRGZxZG02bGtTcG9NMGNmb1RQOUVCTGw2U3d0MS9oOGx3bDF4eUFsR2ZlMmorVHhTcWsvRHFSdlZVTm05c3EwN1ZqQ3N0bGpnSzFNcFRnL3lhN1JIZ1lnVnlJQklYVy9YTnN4cUhIU2dtSHhEMWtlNm5tbTM2V2xpVmE5TmNqdGJ4ckFSb2Vqd3RqZHVlYjRzbU5qbkU2MnFsOHJFb1NzQVJUM2QwcmtvSTRxTCtrREdiN2dYQ2Nkb0NyeVhZd2kxNURvQWtHVC8wL3lhNGkrdDF0L0xGY0hsc0kyMUpSTXpCNHZyT3J4TmZReVJpVFJiYkhlVHY0WWpVMVJ4dFpPNTNhQ0IxTVZjMzZiOFQ2NHBiTkVoeUtQUFdpMmdvYjZHSzlKdVRQczlXWUdCRFE0a1o5MWFISFI4QUhVOTlzcm1TdkNVUVd6TGpWYVdmdHF5VXBsMWF6dUljRGxqNHpycExKMllSZ1Rza2JpckdpRVRpK3JxUzIrUnlSWkRIY2dSL1pIU0VFWnV0UFRKVUIrVEx2aEdWODdTRm9VSHNIWmZtVTBhMFNHK3oxbWZwZFFwWUZDZUUvOWY4aUdHYnliZUZSYlduaW50Q0NyTmFvRG1XdXdMeUxvS3hVdzVTSWovdTVLemc4bzBaWXFMbFA3RGQ0bnpTWUZYT0RVTTh2blhiYldUWU5zNnJrQ0NHTHVzekUvWWtydlkrY0MycXl4SkRkSFdpOWlyUVBNem5ySVFjU0ZuUmFGZDJPaldRcXBna2FManJKZkZqeEVNTTZ1YXNiU1NSNjR0V0pjam1ncmUrWVo1WlJtMEt3dVNVVGlWVGxTb0NWQlRKcUMveG00d3RESkFxZXk0T0hGYTMyVmhuMlQzWnJVUnFIRC95QUhPQzh6NXlRUkN2ZnRCbUNnRmkvRFMvUFhvUk9KTDhGQnpSa1FTbENKd1dvK3BRR2xxVEViWmQxQnl4QWpVYmNGUWUwTkV1TUVvbktraDdUbG1INFNxV1BVTFJVUm9lRGNyS0tBSjF0VWFkb1gwdmxTKzJxbm9tOUM1VHNpRjJpZ1U0THRvMFEwZWsySVhuUElFZjJ2SUdWbkoycGxNQ0ZyQzA2MnR4WGpUUG5YeFNab0MySHI1dktBYlJzRXFjNGlqQm9kM1lzVkVsV0luTDhHUk5wekFQeW5rbzRyS0QvWWFIdDQ4MFFrcUtycEJ3ZU1hTXVxYUtzR0lVaysxc3FOaWtQaWZxWjczaS9KODB6RTJPRVl1KzZpV0NaVEdFWHB1cnUyTkJTWlFORUpMREpicWNxaXcxMnVaU010M1EyQ1ZSY1lGNGRzR3lPSWh2Vk1vbUVPeGNMeVphcnFSNVJUck1sdTZSck9xeCtIOURSWHZsck44OTVZbm1xT3RHT202dDZoUEc2RDJVQWRNUUxDM25PWktISkJ4ZmZTZ1pZQmk1akVza2p0b2dmbDBTY0xpamtqZTFnTno0SmJ2ZXhObTRiTXg1Y0VFbGNNNFdURGo3TU8veUtTR1hiRnBpbytNTE1PZ2laNmpxbG5YMUN6Q3RNOWxVRWZiMldHa2VBc2pYQ3pzK1EyTkdvd0JJK2hpdjhQUVY2QU1QV3IrU05QV251LzNHZG1qTDJGVnp4OE9sbE5VbytqcHdIcEYxUWpydXF4eE5kZzhlRC9SVDZ5YmJQVS9OMHpEcm1QN0lqOVlIbVViZGNhaHYzUEYrcWF4TEZjanNNS1E1SUFmTG94dUo3enJ2RmgzNXF1UHpxZGdwNXdDMWp0dkNjalJBbEIzdXF3cFpZOFYrSThRUExQWHM5UkFqZy9keWFmMzNlM2lxRVlrN2pURzB4Qm1JWUI4SEFmbFBXbEhIVjVwM1IxTnJIbUFycTVNYzErMEEycWZsNFVkWkZwUDlOYm00MW01LzkrWlMzU3ZrZE5ua3VsOHFVaGRCUkhZRkwrQ051WXNhSWh5bmd4a2VDRE1jVVZmbWxnSUI0SUYxbmo3em9HTWhPSHAvUFZLZU13bVU0aU9tc2lUYjhrYXArblFRUERmajczc0pzZEQxQmFlWmFhc0hWN3pNcmlVQTFlTEpRcFlMU08wUzZXbnR5QkRzOUFKTTg3REprUDZYUy94R2UrcWU5QU1sZ0g1S3lVay9tSjNIVjJKZHBFa1BpUGRBOUVmVkMrMk5JN1g5TW4yL2hENlorUThuODZ0Ui9CazhMVlYwSjMzekF3V3NGUCtxUnBUaEVyYjdTQVY1K0Zya2h3Z0phVTkzdVJwc3Y1cE4zYkRQUG9USGNhMFB3d1NLaTFlZ1FwYzBXMzVlS0tRVWhFVGJFa0hLSFlyZGx1LzJsTEVPT3FVZVoyUjNnd1RVTjNPREdVeTcza2ZPdklZVWh6dEdQL0lNbFNWT0x1djFqNnNDd3NoT01DalZjeWR1S3FGY2x2RHNmQmFyRytReUVxQXhKdTdJTWpETnZaSTJVdE44MGdVTjlUN1NiVnRyQjlibWNFU1VDV01VZ3JJNzFKc3kyclR4TCtKdE9IQVZQamN5bTdybURxelJlVDcxS3o5OFI0aFg5WnVsbjM0STMyTkxCRmpaUlN4bENVZ1NSaTgyMzZTZ3ovQm1WZFhMN2ZaYVdYcXFpV3BwZ1hIbGNvckVQaEVmMFlSYTJEN0Zxb0h5RTRWclBVTDNoK2ZCVVA0WmtTOEdFYzdzMzljMWtBNUtyMzl0MlRXaFI2OERhbEc0UVc1OTNtNjdWTzgxbmNXZk00Wngyak5iRDBlY1BudUVWWGMrR3grYXVwb2tqT2padTBtRVlCeHl4ZGo4L2hRT0kxRVVoSkJGQit2aHFEVFhESkRRbWlVdXdnMWdtRG5wSnk4enB1UDNJNjNNcGVReW5CRk01TFVmUDdYN0lybWJJWU5MdWdXU3hLL25jQ1UzTHdIQlpySkFvVStrcC9lVUlnT0RnN243VXpnOXY0Q0ZOUEFHM1ptRU1jSmQ1M1VhUUg1Nk9hRVBkUTRrZ1ZYcEZZSWtVeEh2WE1aYUZxaUMxRldPcWozSjc2THFKRjRhaGg5S08xdTViNjRuV044MXlXcUpKcmVqZ1RlMDJjS0hhcjBlcFMvU0ZJbldYODJNUmMxT3VOTDJlV2xZaTI0alJYNGtiOFpaZjB0ZkhOcHY5SXAreTN3Mm9vM1JQakVVNFJBaUJab0x0R2taZS9Na0VQa1Nvb2ZjSUVoYU93NGJXdXRHR1JxRlhGYUhvRjhxb3l0VVAxeFZiT051RkpwSDBrK2k5MzUzQXljaXMwQ3lXL0RxUkUwazVqc3RMNmlZTzE5dXFHMlpQc3c3Um40TXExMUxrMWN0dm8velZMaEVGNUZ0dWJobm82RzlOTUk4YlVCb3d2SmZsUWxUN2cxcURueUU5T0JJbk1kdGVqQ3hEWkVSRTM4L25HM1NLd1VvTTZEakZYMk5INUtxeUZmbVlrZHJQQkFJejVuV2FOODN5REJzMWFPM2gvbGRZYTV1ODg1VXQwZWdmZCtKVTJkazdxMzg3UUpPTldKRkovWjFaaEtSK1FzeGdBdmYwYkdCZUZVdVp2NGk5ZjZqQUhpYnhteXBlZTl0cG5zVGhWZ1hLaGp0aERyanJHeUdtRXJmVmMvd25xK3ZkZTNza1lsVDNTNHJoNUZrRnRSRE83SjlrRWpjenh2dDN3VFo5OThDbWhzeGNKbFM1Zkg4TkVJUDNxM0JmVnduNDNOM3h0aFV3Nkw5Zk50TUFEbWJTVkJHMTk0VEFQRFRleXk1YWtWeGJrVU1CR0hMMHpwS2dULzFWb3JrSWVOSHZIc2szeCtrNE9pYjR4Y1k5akJ4d1NlSjJwc0dzT2tZSStTQmFrSlBPUWo4OG5INUx5Mmx0aHAzeVZSc2ZIQlZNU3FUZzVMaVZSd3BhZ3NKWStKUG1wVFlFbkR3VjhMY3RnU0hQdDRCUk9WS2g5RURVQ0VRUmNGalZJY0gwZ0dRNGh6c0xKdE5SWGllcEhDRmxvcm04MGV6RXAyVzZCcFgzL1VCa0ppK0k4TERjOFN3eVVPV01jak5FbDA3VDkwUmdvaVhOM1Z1SjRFRHJ3cEVsRS9IakNmZnlDcHUyQ0xDTTc4VU1jMWdGaHVKYnEwa08wY2J3RURYVERGS0IzRUxlek9tQzF0S0FBTk1Pcnk1bUM2QlFOOVVUUGwzRW8rUmxmNEtJNFFsMFRkc2ZLVG5OZ3o2MVhoTkszWVdCZmdNZVE2UWtEeC84NjJSTkI4eWo3TUZLUkQ5aDlHYm5tL1R1OE4wbU1kQk9XV1VnVUR4VGM4Rmx1VmphT3BHcGMzaWFRenB0QlNPaUs3R1d4aWpQbmdxUWczcmVFZEorcWJjSHlxUGF3YlFsNmUvRm0wYTI5V0lsUVhWZTRmYWxNc2dsUDBPSjMrREVvbDJWKzdUL3pMYUVPeXFHbHBHL2VBTVpsNWt6TWs2SnJqbmJ4TDBXcGpuWDIwS0ROVUh5citaYzRqZzlqNnA0UUR2UmZEaXllOXJRSURBTzlPanlhbmRyQlZIS2RkRzVKU1ZmNEU1M29Rc3lyc1RLcjdzUE83d1huZlBDVnVOczBub2RySUpadlFHZlNuVUV3WXFYMnBiU3RlckJEU3RPUkhEcXFDaERjcWVZYTdJVUVsRjJQeWlHRnR1czhLaWZmQ3JRbUVkMFhWZ3d1cy84czBFSG5BOEhOUzlwdjJmNWYzNUl6K3dJc1d0TC9ZQk9UdTRFZzdLWmJITlRDNnE4SVlKaVNnRDI3WDFLL0FYNVU0YVhaQVZZQWZxZFphbG5TYWFFVHFGUGRCODQ0K1N0cGFiRkk1WWRyQXZwUG41b1dMSXdiUThham04aitGWmRsMHl2NmJNbjBpTWovRXhJektYVlNTZkZQdy85Wk1LVUl0UFJ4aVE4cjE3VHZUWVhQR1JNRGVZT05BUjY2YWJGT1JFMXJZMnlZbWRRRjNjakZrdVdzUHQ1UXVaUmNxMDN1L1RySER4ZnBnRi9BaGpOTUdGNDl2cUhZcHlCdzFaVXJReUdKWDVFSUZUU2hDYkUyWmRUS1MyNzJuSW5GL3dMbm5od0lFOWtnZUVEcUIra3AvVzZSMkl2clBwOXA1bW4wVDhyTHB3SCtlRSsyVkQrbkVGOHRtK0E0WDVXRE9OK2p5NnNDa3Z4NEdlMU5TOUQ5MUJkSG9BYkZYcWh3N3pVaDRRWW52WWl3UUNZNDdaTm1vWDM0elAxMFFtNVNET0RSY0xNd0FZbXhQR3dCcy9ZUFNnMUVSOVNDeTRCTkl6UVEvd1J5N3Jzc1NkS0kxWVlSVmlIM1ozUVRJaG82bFpqbEJlM1ppb2NucGQ1UVFjSzJkWGQ4cHo1eCtEUGl6YmZoNUhKVS9CUjQzbGRSUkFvdE9RS2hDTlUwc2xFc3huNXFZUnl6NmR6amo0OTNRVU9yUGl0SmNicDF5SVRUcCtxeWhpa0w2T0Z4Ri9jSkZsN0JoRHdRZ01DcDgxVzk2YkMxczhTSDdCUkIzS3NCUXhLWWNnZVlYVGpUMmFsSDVILzFLeHVYVk4rK2hRL0FZb04xMWorN3diWEhPZ2ltdmdyT3liUHVyakpWR0xucHE0d3NTcWFBRDZlaU1CK2IzUVhZRGsxTEQybHJQZHVjQ3dFTGgvTGZaRk5iTzdsUDBKSTBTb2ZQUWdjTkhzdkpPakl3M3hZVkVSRDZTZjFPa3NnSlVhT3EwOXZzdHZpanV5YmxsNUxzSjFlYml0Z3N5VWFZZ2hreDAzVkRnM2R3bVhiTXhuRCtjK1JQcnBMbCs2ZDQwcHB3UHEwUUZvbWVTbU1DcmtYQVkyWnJZcm9XYU5GY25QeXp1Q0FMOHJldVRoSzl4TndnSHpvWGl5T3VTRUN5QUtlMkR0Wi85YVVwODlTaU9OaEF5YkErcjd0YngyQlpLdUhyUDNCSENFM2hJVHR3RGFrc0ZqenJhSlZKR3djL3VaTW55MWtiSHNwZDlFOHBxWDgybmdOeUh3UWJ6T1V1VmVTeElHTm9oS0NkTWMybkFDRStGbEJwTnVzelNKTHlUaTFqTVZlcTkwTDJVVTFPemRpSjZKUWx5b0hrc0JJVFFRZENOMHZDZStFRGZIb0pLNkZKWXhvUHlKYkV0bGdDQmlvTFkySWxqTVlPYzdpQ3FMZGY1SDgyV0UrWGhJcUYzK1h4bnM3ZWRGbE9aRno3MkhDYUtSWTlWaEFvOEJKdU9SZGZwM1h0WnJsWFkzTDlYRUJjckdIM0tjeStadjdsaUg1REE5Nyt4dHlKVnd3cGVmTWdzZEpMQ0JlNWprQ0JFS3k4Mjl3TXdxSkdBdllPTHlveXVxcXpraUtmOXNtbXdWdGJIbWhFU09EZEk4T0pjRUFrZURqNGtCQ3p6QUNJSExKQ0VDNjFoSG5rWUxtN1piM2JQei9QdGZlQmwwQmhDZTJ3a2NQTUdXOThhZDU3dXpUa2ZPY2dxcnc5Z3BqVW1NcDRTTklEOGhpSVNMTytucjQwaGptbzd3ZTlidVE5VTNyS29CVHBhZVdDNUxLK1ZKQXBMekpWR3lOWExaeXRjSG9rMWhoY01Wd3VvakhMU1F6NkYzeFlVcnJtRUJ6ajJBRkE3Mkt2UmU4WVp6TlROQVpBYjgwaDNzU1A1aVg0eHQ3L1dzd0tlczBNR2tZSnJhZWNhN2U5OFpoUHpOMExYQjJsK3ltOUdXTEI2dTYzdnEya0NmbzVBbzRXdXRsVWhrbXVzeEpTbHUrVVIrbXpGVGJZRjZwcW0xaVBxSHZ6Z1RrM1dsU01DRW1Pa2w1UGEwVy9YcjlqZDA3MXhZM0xEMFp4RzYwcnJ4VTJNT05SbUlBN0Q4dTdGeklUR3Q4QTE0ODU4MmJ4cTVyRVF4cDZVZW8vbGZHWTJjUGxZSmJxMTZlTEwrVG5Md050SzlsVTlXaUdUMXRjZVZSL1lhdFptaHJtUDk0cFdsQ0E1YmIvRWhCcTVyeFVRUXV5ZzIycHpRaWNHbHR5RXVVelBrQjlZbzV5OUpvdlRrRTA1NGoya3VlK2NEYUUrOXg0K1RMN3ZTU3QyNkxlTVdRd2FCZThTa1lUVTZhR2R4ZmFZZDROaUx1ZmY5Z29lYkRUd096bXBCSU9LTTYxK2RSa2toY0tZR1hPRFI2TWlXSlp0bTU4SlpHb2E5OGt5NS8rYWI0ZWNkSWhRQnVuVlhJdW4wNW5PZnZ1bTJMVS9Oc290c3RwOVVjNEZucjZFVVdoSmNXeDJyUjVxaS9WY2NBWjZJS0RrR3pucGMvR3hQSlMwcEQ2bmxoc253Y0prZDl6b043bUhPRTdmcUExUDNIWFVLYUNSc3JmVXdqS1A0ckI0Q215WlRCOW0vUTlVYVFlNTdjWnNqd3JKLzlhVVVyd2kxTWd1c1QySDNTd2E0NmxvM2ZoVXlyTHk0WW92TnNtbHhIZkR4ZkcrMWIzc0JKOFpKYU5Db0dVb0NTMjBRd2RHMU9KeHhDZVhSL3pnQktwK3lYZnpFZk42SU9zUXdFenE1dXNqOUpPZitYUit4dmNHNVBneEE5KyttOTh1Tm5oTnErdnhUajVQTDA3Wlo4bTVmNzdwVWNhYlpubURwa0VhU3gzMlFnOERDZVFTWmRzSXVpTmMwcGROZU1laFpSL01yb3lBNzZwRVIxdFhSMjYyU2I4c0VhY1VrRng1aUphWGtEbVB5Mkk0UkpNQzRuMlFWU2JXMjJhamFQeTNrTjE0K3dwbm5pbHNtZ1dwdElkamhCWGRNa21CQktuNVdLRjN5OEdsaTZwS1hxRWxvcEpGOUtMekVwc29UcEZDRy9oUGVETHBCd056V3pwb1lzdGEzYkxCdEpLQ1RCbHZ1NUhHMVlCTjM0TXhGTkYrMTZyNWJ3L052NytnL2NyNzB2N2N4a3dVZ01zWS9HT3M3Z2JQN3diUjZNVTBQemFCSnZNOFcrall3eDE2Y1paRVduTGQvNDhNOWswRzUxUmI5WE5mcVB5eWNuZ2xaaUNaTlBYb3VjdVYzWDM4bittcFpzUHdIbkFVUEZlNGpSQm9TNWdscTgrZmg2am42aXpHR1hSWWFHeGpzMWx4OEpQcjIyYnhadzdrL2dGdTk1V2V6MVpjVXdueitYWlJzNG1icjU0a2xTMnQ4bEVKdmhiMEgwVnkvV2xTT3dHekl6M0JXRXlkKzFuZTZZRGxabGdUVTdZNjFxUWJEMmVDOGdHK1NFL0U1bittaUdTUkJ3L08yTlFnaXVORmM0cmh2YVYrRXdTd1pINXR6a0JNMGF6SVFOb0N2eVR2Y2RRVHowd2pwQmZ4dDlxWGhRaXBQa1M5L1FrbHB1RWt6eDBPMmFUblJuMnZIazFzTEl2R1FsRXVOWXA3V0hMbzVjaUdUSXFZcitkcC92TUlTSzZITERyRnhrUlVmWFlTRUx2WElwT29XcVB5c1g3L1VMQS9tYWxBdlVHRDhDaXMybVM2a052amFtODdUYUJZSFhuRk93TU9uSFlybTJxYURiaFFYTk1YY1RaWWc0S2xhY0dGdTlIWUVjbW41d1ZyeGRTWjczZkN3Uzg1SVlXRklLaUVpZVNHSk5ydittaTZmNHdjbVpmZ3lzaEZUWnB2VlRJR3pOUDFIV1VaM2EzTHo5T2FlT25aeXQ1ZzFWei9RT0d5ai9QbWtseDY0SC9CSHBYeGlrZStjV3FSRTBGd1F4QjVubGRZclpyWVVobDZhSUJKOEVmbWZjV0ZRRGpBanFySjhqU3RaMVVlc2xJRnNzaWx0a3VtTHc3K3ZiVkpsV0VsNVh4a1M1d1FZdDFwZzZobHd1cjdJS1pseThhRGQyK2lKTW5vVmhGcHd4MzM4L1FFUEZtVldzSUhpb0IzSGw2a3Y5UmJzYnQ1T0RkVjVwSDRjbXhDZ1l4UTNtLzAzUVdxNGZCMWtSQXAyZ3F1OUI2ZVZ1SU5TNjFmUVo1WUhyQ21XOVh2aXo4R2tLcEhhRHhwNHYvUndUelJhMklDU1gzWFRhTFJwbHFxaFE1MzdWQmVwb1VsbmRNRlVrWUNSeVBHTjNuVVF4eEJHaE8zdGRrRGZxanVFdXpDNGtDam0wbmN4cEM1STFQRTNVZVlUT3RqTHp5S1dtMElWWFBtUyszOE1KbnRVMy9CK3ZRcEdta0lRMkErc3hoU3RTdkpaaE91S0IzR3ZMVDNOYlk2QkhNeGhYbVk4RFZhT1J1MHVMeUtOb1lDc2RUUVl0WW0zRGJqeEFQWXpsMlR6NzNUSm5odUlBQlQ1SGZ4N013QmxabnpVaS8xRmRvWnd3TC95VTAwRGNKd2lvZENTT1F6L0tqTE9WU3pVeVk3Qyt3c0ZsRVQ3NzFUeGdCNkc0NFNIamRRaitnVDNKeFJkUkpaUUc3T1JReWFjS1FpRkZRZmtBTFBHSDAyRFZROGNIZGY5S0M0aDUyN1FuTDVUbFFxTzJHTU50WEdTcDdXR2NSY3FQa3VSSmRWT0x6QThnajF6dzgvMnAxdEhheVRVVkwvWkJCYXhham9vRS9qc0ptTnFxajVZVUM3R3Y3cVRRVDFiYU5rekt2YTZLeGxLcFZnaXdJaUJGMUVRUmxZbk5hb0k3QzZ1cUlieDl5cXRHT2h3UmxVRFY5dHlNVURiRjhOZ1hnRmQ4UTgycnhPeFVCeGk2aVV3RWdyellzOGlxMzFlS2NzMlhHZkF6WUc0eVdoNWF4NFVCeGVvNlN1M2VWb2daTlVwekxmTEhaS211RFRqTWxRU29tcFhkbVc4RDQvbjZpcHJ2YVlKcTZhZ3RRUDdIcENvd0xkUERzeU5NdnZ0bkpaOFNsc2pTdno3cmFrbHRIZFJmZFMvNkM4dGoyOGNEOVBqNFBkalloZzZMUVBnbkJLblZ3YTRuSFYyODlsUXlLbk1QenlYaW05bjRjM2NvOW1mOWNsdnB3amNrT1dqekhSZjNwWjhUWDBNSE1NSzNRNGpvT05Sai9XaytYeGZEWlE3SWpXcEQ5SUVKVVV0ME04UkMvZUQ5VlFqRVNKN0xyV285R2VKSUFnU2VYWHVDK0hQb213UHFWTEZhM0duT1E0akNpYWx1MndsY2t3MUZmWkFRWWJqMEpvVTJKK1N4c1g0ZVNRU2V4eCt1MGRoRjNaR0QxZnZ6bk5wSVNSMitTTlRWVjcrWmRvV1BydnZ5dWlHV0laVlBXRHljSldjK1FuUnI4eEtZQkxYZGxwR1FGUUF5bkplK2pDc2xrbzhnZEo0UWl2L2lsR1NVOE9wNXJDNm5VN1djckc0UHZxb05NQ0JHdnNBWnYreDViZURvVCtPTTgzMFpndHBpZjNQUUU5UmVSOVlxOEcrdDhoanVGWWJQUTJUckZFS3JzZGhCVjNOSFREMSs3b1dLZVdTL1lrL05qaC8zaTNkTTdCaEFFWFBQMkRIN2JvWFo3TlgyNWZKQVZYVzh5aWMvVi9wRFcrb2QyWEYvSXZ1R1ZIWisyeHVZMitFbXQwbnNVVlhKSVZLSnhGN2xNY2dsQlFHSk9LZzZMS010OUZkbzQrdVpjVGlCblJTR0RFWS9MemJwUFlnVkpZVTJmejJTN0xGUDVEcTlvWHE3QkdsaXB0cWhwZ25mMmxnTktybTZKSGplSE92SXZKOWI1a29DbC92SlJ3elRSNWJwM0hRNTBkcFU5QmdMZ3NmUjlCMm5aUDYwZmhFaWVGQlBHaGVYaEZGZWRXOHR2eldIdGJXME9tQm5vQlkyWXNzYjZqN2JTSFRoU1ltdVdKaEduVkNDbXVySkNhMmpUQXAxdjZwTHBHZytjSDdmQ3Q4eWovblBjMkVjemdFQUZJdGpOYTlnNzMwMVhCRHJhNnBhVVduZW5NMzRZZnFyYWdxOW5seCtpSlluZFZ3VEVHbkR2OVJrU2JGdkxyejdKOU1tYXJmT2ZBT0lmcitEQlUzSXpiQXU2K1dmVHZTTGFYdjcrSmplNWZobzFvdkNNZXBoaWdURjQxODM4Qmwvd1FOQ3pvRm1VSjJPc2FZMUJsSjdPT0RCTTA1eUpGdHJHdjFQUDNZWkhicHlIclloMjFNQ0tBUmw3c0daWllmcEdBbU9Ga3BjODRJWkk1UmxnR05KM3U0N0loclh5Qkh1b3FneTRMaWJTaHEvOXJzVkh6SnpCQ2dMZTZPWC9SZFo5WlJNbzZFb3hPVHlIK2hJUWgvUDJ6NDAvS2dZOURuS0pKV1dDM0ZsTUFkeE1JWGhjTEYzYWtYVDVzaUxxbEhTaTdVN1BnUkdsQkZ6dlM0RjVaYWZwNkNNajhXWWw4ZmlKVThjMU45TytyS0VqQWpjY1JCZ3V6amszY000djJLZ3JQcENaNk9Xa1JMM0tUc2I5cDNMQk85TjI4RlJsWjlCNzZ2aXlFbVBHcEEyQkNrUWtVckdwRzQ3RWtHV252SjVJSHBvWjYyV0toRVpRQmh0MXhMdHV2S09FdE11RG9CL1pQM0MvbU14TWcvNUIzWE5ETjl1aUZERmkxZ3hiWE9QaVIxU0xyZXVjb2N2b3dFTDAwV2F3dzE5eG5NcWg3SG1jZVFPck9jdHhyYXJrQ0NhcHlOUkRUbTc3dTJLaW1DRWlGUHI1MDB1VHdCdzZmdVExZUs4U1dySFJMdnMxVVVaMVpyZDJFT3VscFJXOWZocER6R2RiaHNZNk9JUTVvVnl6TFNRaXByWFEyUlltVlQzK0dWS0ZDOWhob0tPNXNrczlERngyc0VNeFY4ekdPYzlXa3JHbVJLRnlwZTY4SkxLR1BreDdRZ1YrTFUvQ3R0OWl1enZ0YzE4WlJHSWgxT1VtNTNCdlM1bWczZm9hRXNFeTl3K1MxZ0NqVThLSE15akZwSmYxSnBNam5EbzhYc2J5bjNGSjFuWHlpVGhONTVUa0pMWmpaby90WEdGRWU3TWtqTnNsa1JMUVl6SVYxZWlTOWJIMDVMRENZU0hYOXZiNzN2ZVIzcVVLWTBkalJEUFhmbG1RRlQ5dzVSWU5oYzZ6S2dOUlFWeDY1emJTbHd4dzhUTEUzK3dZZTBVb2tldlNvZ3YyeFRBN25EbXVqS3d5ZWhBV2RXK2owWUltVUl3SGt1enY4Z29KRjNhUStQdzR4eFVYakYyM1RHZndHSzZha09xZEhFOEdBcEFISTN3WFpGQThxQ01LZ09uK0lZS2xzSmNIK0JrZWVGekdZb3JLelFwZEdKS1JqbGcrSGd1VHZMVmVHSXoxVUtpUXNlNEVnTFIyRU53YUh6bzBPdFIxalRvdVJvVXRLaUlCRUhuUTdxTWF2RjZob0RFejBEUDdKbnFXK0dSY3VqN2VpTFBZck5sVnV3dXdmdEdJenUvOWt3SWNmcmhaREFXUEZ6d0FMUTRNVFpSOUk5VmhQSFJ1bWlzTlgxS00wdzdCZ2IydWtUT09hUW9qbUJoS28rRStmYzkvVWZJWG5nWHhZK1hIbW45OVIvYmI1cUM2MXQrV1BGbU1KNnQwY083SkZSVDVURWZJV1E1c2w5U1hNMnJ0MGxpT3g5UVFkNEozZzZzMEN0eW5PMmMvTzZ0bXBiakhaL080R3VhZXB5SmZlWlBKL3JLSnY1Zis1VXNVb1FUS01YNVM5MGExdlhxNkFUM3llSlcxRTJLbXU1eHdEaWx0bWEvMWM2b1JtRDlWenBLVVVRazBDcFc5bFVvQ1BXRk9uSzU1RnBxLzJZaVR0RGd4V3c4cFlNb29pOXJyTWsvZ1ZhOXhxVForQVpWV3lFV1FjSmFKRUVtN2dBSjdIcFBOU25EVXpqRTZrUGNEVlNvWDExTUdBY2pLU0YwUVcwTU9pbDMrRGJuV1k2d1BNbGxUL0JybDZBMmhYakVuWW42OWtiV2ZZY0lIam0yOVl5T2V1VW5VR3ArTVprb2JacXlOWGdJVTdxMEY0VDVtb1JYcUp6QWVnN3RkVDN6QXgveGsweDhTWmtoSnM4Q0k2cmpvVDEzYW1SV3F6NEJTMXNjM3I4Z21pUUFIT1dyQU1iZmZQV3FwZ0NJWHhrUXRMTHFXMFZ2S20vMVl2M1BCYXJXUHd4U2kzZ2xjUytISGNzVkFtazIrT0NFVEhYaUsvcERqMmZ6L0RPcjhGUm1nT0wraVBlRkhEL2RrSkgvM3hxV29kRU4zd3YyNjhYZEhWaDlDYitEUlBrd1pUeTREVGpJKzRKQ1dMYTNPQ2lOTGNmOFc1aTVQM2ltWWdDVHJURU5URmFvY095MHR2ckN2TmhidzhiVHkveWJjY0RsZW5xU3JMdHhUTWtMcC9FUFJHS2g5QlFkSnRtYUNhbDBuZFUvenFQZUNGQ1FiS3ZObGJFQ0hmRjFJd0FlcmRxL0J6Uk5SYUQzaXFLdTByTVd4ZkgrcGEydEZoeU1RY0NOOVVweStIWVFUbHBOZ2dkZEpYQTNrK0p3Q3VCS0lWS3ppOFNvODQ3STVRVDVuektIMm9naGd2QUErQkVsQm1qUkxyeHk1QjVHMkllSXJadTJSbmZKOVFNZHBBb0ZxaVpwQ3p5aWZZaGFuRjdiRVllOXhmZGxmSTR1VE9SeXd1cVRiTGgrM2VNTFdycmRmeDdaUlBRMVhINjFCTE5vZ21hNlpra01OME1hK3JLUDlrM0NEcnBkcVFOako0TCt1UXQ3eXM1ZEFabDBkekoySEM3R0RQUWhsUzEwOFVmNDJpRDJ5WVBzVXY2Z2dPQ0pVMFNURkNkdVlvMGVHeDJ1cjZCT3Q4c0V6ZlBqMFZGUHF4RG1Sci9pMWRzYTlIeUVQbEkzb1dRRUc3ZDNkbVRTWUZtMW43aXNGbDhqOHhzMWRrQTQ4ZlFGekR0cDQ5TzJUWWVBcDI1UGZoUDRFQkM0STVHdFFiSkluWThDYzRyQ1RvT1hvL0RZazQ2R0prbkE0eG14WGFWSk5KRnhpd0JGdUJ6aHFVaDVMWkc3S0oxa0sxZCtHSGRXcnlDL0h4Y01SQkdKdGtjL2tWVFZrLzBZb0s3a0lydUlLekxxZ1R3NTVoT2NoNlpTOGpHdzlUOWtKbWVZbC9ITHowYkQ4TVBtbk0zT1pQTytUdmhYazM3NjJFL0JUTFZQaERQN0VIbmFIVU9MclJHZHdsVVhkV0VwMHNKdWRud1RzeVIvTnE3SHUrUTlST3B1V29UZWI5OGtWR1hSdVRwU0FNb29saWF1dENZYlhFeGM5ejM4NmNJNGVvVVlTWDY1TC94Znpjemt4dFJvM1VYRi9PS1czMjRORzExd2lDWFRxcjRtdmlVNDh0TlhFWTNsSGx6YnBSckN0TzhqYmwxMDJwSmFTY3l2ZFRGSEhCZGIxSXMzVVdIU3lqUVRoSXp5YlkrVGlUdmNXaDg5ZGxUV2dDZTNYR056UCtrb2ZJb0Y2Qk1qT0dJL3g0dWswMUhhaDZJdE41OUhJTUFNclN0MWY0ektuTEw3YzBVYURDNEwzaDJ0WnJhMXEvTmVZRUdXbE1QU3F4K1ZSMHB4RlN0THlZdlhtMDhzM3dadzFWaitScC9pL2FYZUVTU3ZzZjBOVDg2cnV4d1g2a2h4TTcvVnhxR1EzbFJPL1VETDJwUVM0V1RUdG9Cd05ralowTFJ4WmhndkpRcnFEVFlRS0pZU0NMZmpVY0RvRGRyRlIvS0o1RG0rdWE2a2RsRkVCMTg3a0dYMnVFTVRVU3MyWWV2YUdkQkdaNU1DRWZBQXUxc1Q3bjBCNDRLWmFXWDlDWEE0blZnOHRqSlZuNktzZGFtMFM2NjJTSnIzTmhZdk11aDdyK3lwWVhUaGFQa1FROHR3MW5EWTNJVWJkMHFoSWE1UFEvU1R0M3AxVlBaZCs1NFlPZUhOcVFIR0plM0pPbmM3Tnp3dms3NzN1YkRHWS9oWlNTRUIxQzFkUHZJZTB6RjlFR2p2STA5VGhZcVZ5SG5BNTNqVitNcnNQVWhnU0tLVnlPSWluYldVaElwTU1Felh2MlFqUFAyZ1lQd0dkWDBvRXVvN0JmazBxSmNlcU04MGpGY1dFNEhScmtJNmk3d3pQMVBaVERMK295dEVUaTNVV25WMG5HOU1SakFVcGlRaFJuY21xUzBYeDhWL0VGaE5mdGxJRmNaRkZVZVBJeXZLa2lzNS81QTRSWUdod1RrWGtrd3VtMi9aVjRneFRUTEJHdVBPdkE2ZTJYNzVwZGR4RVZsaW03c0V3M3oxY0EwZEk0aDhYTUhlTTZsUXZkeHpsOEtSTVFmUEo2bHRXUjlLSlViWkpjcWR6NzFxL0pXVUVoVytMWm9lMFQ2bTcyWjZTd0g2Nkl4SDJ0YUZ1YjBNTzFqYlYyZFlCaUphbERIcTVVYjdJZXJPOW04Nm5laldwK2ppSFJNb256ZmFiekppRmRJbU9sNXE1WHk3d1FVeDA3ZkFpQkJMZEdzanBYZlFKcDdpYWxGek5kYzdDUDJYWFd5WnVxUWpvbzh4RU9wUlUydGdwRzJwbUJqVkhzZFIwVEpuYlhmTFFHSk1VSi9idDYweCs0cG5VbnYwTnRqMVRaZWl5V1JoaTVmWmxBUXRLemRFUjBDNWVTcXNTTHd3YkplS3N2KzVTNzRnS1dRVlFmU2YvSnk2Z0p2bDJmQStYeDlwNGJjM3d1Y0dYVG83ZXIvODkzeGF6QUpFKzJZMUJlS1VlQzMwMFNzZXd4RXgzTlR4YW9CaG95UGJuR1ozai8zWjNnNUpiYmdsYk5ZR1J1elFQWGV4L2tlYjB5d2ZBYzFYY3UzNS9pNVV6NXB4S0lJZW1yK0R6SHVKREdBT0VOdUlVUENtSmR5S2xhb3BCQUxPemxZMjJlbEk2UEZQM3hiaGdhRzd2enFFb2tHbVppVnB6QTVjdjhINkRwdExNaTc0Slg5emZFRm5tRFA5MTRSaFJ5ckx6cTlocEM4WWVkSEVmdWs3VUNLVG8wZWdpUGFuMFMzcjNZRkJhdDRBM0RaKzZtdzRsc2RzR3FpWWhGTHVNaSswTFlRY3E5YlhRcVlpL1RzRk1HaWJoS3BkZVpMWW1VNVFpR1M1QzVWSU4wUVNwMGtuNS9nYWpBSjRxWUZKNnNRTENWVUd2ZlJCUmFyRVMwVFlxQU1xNlI1ZXFZKzYyRi9icXpab1BIdmZzRGEzQ1ZmZFhVcmlzZ3JsbEY3cGZzZC9EVTB1NThienFjR3EweWRGaGZZaWhHZ3ZCaUlmRHJzSEdkekU5UkJGSWplQ0l0d291TU1GclF2NVZNNlpIKzMrMm5tNno2dGRCZUtzTmh0YUpqU1hpbi9IUUoyOVJaSk1uOWNqWEo3YU83N0k1UUZTOEZOeHI5RmNIV0lhR0hsdDRaQmJtcDRSRGpyVFcvejRaRkx4OEp5S2lsU3RxTVNsMG5TMUhSVldKaU5ITVh3eDRVVkhuWk1IOTRHQXVEaHc5emV6UFhUQ05FRnhJSE0xSlJyTE0xWHlvaWxSN1YwS1JxcGNJZWgyaDVOaGpka0RObzl3bkVBclVTSTJVeXpsRHlVN3RWVGRkVHk1TnhuV2UzeEtuQ3NyNUhkRzI1a3NLVTBvRUFWeHNaVVNCS29TRU5TbUs5K011UC9zdXFtSUkrVkxoNmRWTERtNSsveWMwR00wcSs4eWZJTmFXRlNtRHpFZ3JmV2RZNzFMYjFjbXlUZ2UxUHAvL0hlMmFmdWlSbHhrSGd1MWp0aEp5bHBUeFJlQkxBYkI1VldLbnZnMmVZN3libXhRYW8vV094bWpqTGhWb2F2SlgvUWErbEl6K0pSQVVVbkJqTTJ1UFRyNlRCeWZvcCt6T1dKWWJQSmRYUkQxUHhhNzVCRnhDRDhPSDliS2JYT0I3SXBqVnVMSHhQd1NOVkFzR2JtanZJT1I0N3ZWblZpTllhdnFsTzNJSHFSUnFSaGYvSWdWUi9ISlVNRW01UTkyekZ5YVlvcFE0alpNSFBvK2QyTjdLdENTcHBXelVWRk5OVXZiL0x0azNVbVBreGt0OGRJSkZyNGJWclpVTGRDNTYvQWJLSUNRQ3FLUGhDVy9GSXRWUCtYTk1RdU1wbXpDc2ZTdzUrdVZNVVpFQTUxNWVSWHhtN1dFZVNxNnZDOTc4clpwM0lZVGtmREVKR0dYY3g4b3h4MWJwVTJPbTRYYk5qYysrZFA3bm1TcFdobEhZbzJvT3pQRmVlT0w0cTAveHEvWVBaU2pFK0grRzZMUUZlaDdVMTllR2ZzWUxWN0JkUjY2RktTeVBIRW5rZCt6TmwzcXBnZmxRMHd6N0o0UmNkVTNZcDQ5NDVCL0JlU3dPaTZlK0kvWDM2aUs2bTVGUjdIMDUwRDN3a0RGNCt2SldJVnhYbmw5RW9wYzhETEdyZHMydDI0Mm5ySkJ5Y3VJSjBCcGFmVUgyYjZOMlBHZGJMdzFYVkZzUk5jbkZISXQybzdjdWc2enduZlI2UUFKekFFaFcrbnd2VmhhNk1zSHl2ZVBhMmQ2dkljdU04eFZ2WisvVzl0aUN2NzZtY3dnZTJhRkx3TnBIVnp4ZlpyN3ZHVlc3ZGFZMUt1SHZ4MExDeGVwK0laNi95MnpkcFo5c0RVL0dHbWRYSDdTNU9xckFlOFdpczRNYjFMMkpsaU03YTVqSnF6MlUvc1RiMHl5eGl4aHZVUlRtZnhETWNHcFNsTS95blNVcXNWZ0JSM0xRUFVhNUZBZG5YdDVIZkJTdUJxSUp5Ti9Nb0JxMnM5dFdaYllHMzdXR0xKODBMczRWVm44VVIrQTh2c1ZtMmwvazRZbXZHdHYvRllqYkNHMmMvcStlZ0JTcUhNUTBuV2JCZmliWTlRK1VsQU1YYTMvZVBJSE5jMFk0SUt2RDRJNnR4b1p0dXFra0cvOHBvMUFIZC9aVlVydFcwOUZGVEs4Wk1MdXdKSXZTZDZkalRXYzhEZ3dkb241THM0b2E3c3ZOTWFNZVhQRURUYU1Ba0s0dnNERHlxbmEzMzF5QTJoTVhUdTRaVG9PNHpYdkdyYSt1VXR1cHhmM1lJNGtHV29sKytkRnhmeEJvRjN3cU5HNERkVlM1NnRYbGxOcVlxeXZJVUxaQWFwVkFHMHFSd1B3blcrdmxhQlJqNkRLWHN2eVh3bDNuRklZYjNDMnBCeDRyNllJdWNlSUs3RzgrdXI1dlh6QlFpcTBmblRFMDRDT0pDREN0THc5UkFtdVdhZDU5dUN0QkFFWXVRZ3hndy91TXpFNS80WmVvTDdvOVIrcTkxbEpadVNmRTY0bUVzQTllNzg4WCt3ODdhZDlCWm1tZitTWFd5UVVjRHZYT2g0QW1GTkRPcWdEeEIxY0VUMXJXU0xOQUwwbHVXa0l2NC9jUDcycVpWVFZySUhlK1VSUVJsZk05cXFrbTA2cy9QcmlKZmU3dUdDUS83MkpWazdWSkVaRWlLdnp6SDdDZSthaFdVc3ZJb0FVUzZpUVBGdDJTTWE4cE1kT2MzU2FpeTI3akNOUDRCQVVLaTMvU1h1V3RocjhQMURGbFJQN09HM0FvU1ZEcXlITVZGNGtOVUhTbGJaU3N5KzAzR1BDTTZNMmZ5bUZqZk1sR3pjRXowdW00Sjk4M3dtVktzRE1DbS9EVWl1SkFybmdobVRrbjB1dThmTno0a0JWbFAyRTJCdStpRi9VNUpsdVBSN2hFaHp2Wk4xMzNhUmhMaHZtbnJUcUxUcGljYWR6eHlsUzltM09uWjRTSk1pcFR6SmY0bmJIK0RkdWoxTHA0eEswMEcvTW9iUjBDUm45Vmx0U3d6L0dXaWNwTGdmMWNBbmE0b09kSkR0WHlwbFFxWURkRGhBcWVLNlBwTmhlT2FjYmdPblA4QUl3QzBIVVdpK1ZVUDFOSGt2azdFdWtmNVV0d2FBZGVYWG9CV3I1MVUrU3VQWHNIYVhrNzlFN3ZhK2psbXUrSDV6SHRDNW1vRFB4Tm9HMWFuQVpHRFNWVm95ZGJFSXZGcEJwMTBhUnU3SFlzTTVnY1RRcng3eUtrL1FnNUlWZmgxcXl6NFJPMnlJR2FONStoTDFsTkplcmhKOVRQTmlsR0FRVTBYM2hjdFlFenExaXlsbFArOEZDbXRSaEdqQngvWlZ2V0t2NDdLcVVCUGNYQ1pFU0dObWN5VHBrWlB3SWdrTWVFdmVGN29hUFFPbVZ3OVFObW1mYTN0U0tsZ3JVQkRQcFVDTUNWYVA4amRlQ0ZhWFhiSTd2RWJJUnZhc2ZVTjNFY1RsV3k5c3d4eEdMM25vZjUvRjgzbWN4L3I5OXM5SUV3VEF5bjNGMWdJY1pyeHFSYkY4MVRTQ1NQT1ZPaTRPTjF5Z1RucG1lRVllQ1p6amZyUkN5WWNNVUF1V3haV3FQcVNRbVlEYndXY1NIUzFpM3ZQNHN6dGMyNS95aUIwMGdlSmtUcno5Um9jTW5IQzRYVmNhN0l2ZDF2WW9VaTBwS2Z3a1c5RUhmaFpYb3JUb2hYQnhPUitSMjh3VnRDL2J3Q2VMa21jQTNHbmlpRXRSL1lZaUpoVTdEZDMxOEJTdW8rdXdFSGd3dnIxOHRyN0c5SVlwbjRlREpsOG1CelpuQm1zTzNJR1NVZjJUWG5ET1o1MWdqT24vcTZmS2tTdCtmbTk2TVZIaDlmZENCUXloOG42dVMrdGFXdlpsMnBodWxHSUg3M01WamhVejE5YWM3Rllkd2RKVDJOeTFBQVIzb1U1U04yVnJ6Snl2bjh2c1FkVGx6RHFBK0JFQzcxTEpSQk04Y0NvR3JoY1lOR21tN2FNRlMzYU1SdlgrTDFZaHNqRDhBYTFtalJzUFM5VTlvei94a3BtakNLL3k2QTFBcDZTcFdiZVpnTlBzcWxtcG1KNzMzd1RzSTJaR0NmeEVicjFNcS9vRWRPbWhTVC9oTFdCb1NsVkUrbmhyWUhMV0syWEMxQ3hnd25tbDF6b3EwekU0d1ZPZnRiejl5R0VZZDRvWHFzcmZxQzU4MU5JdGZuNVNzRnJUNjJ0ZDlLMktLbGpQb0JpUXJlSFgweTM2dU1IdU12N3U4Vk9uaUFOMXBpS1E2STZYcGgxUHFqTC96aE0rWm1BMC9HNTZmR2RqS1ZKQ25JaC9Nalh5Nys2bE9hZEp4cDRLcGxhNnRURU1WemU3SnV3Mk1GeExwTk1XSk1KV3BZaCtqQldVSUp4MkRTZUpFaDBjTWtiY1FvRE83UndTbXg0MjBIOE5DSmxUSG53NmVIUkdZakg1RExaMlJPK1JyUFoxYzV3MGIzbTN6V3RDSU1wR0cvNEIzVUV4QVplZlVHN0tVYThxWW1OL2hDRWN2ZDd3dTBOM1dZMG1WWGI2blVYUWIvSytrOWVLSFFSR2YwSnR2VXorL2g0dUVaRUJyYzFHeExqemg2YklhcFpGaTFVbklkYnZ3eGxESEtiS2czcGVVcE9TWmpjdWFZWlB5cG9QOGkvdTJyWFhrVEs5dVdwd3FmRlBaTXA0Tm13ZDhrT01aMTd5MUZvN0FQcVZFbU9KNGMxUm1jcGF4cjd1QnU4a1BYdVpOVkM4Y0Y3TjR4MWVhZlZNVE5sdjU0a084dkk2dis3NHRvdTUxbjNtR1NZWFBvZnRZczc3OXVTZlgvY0pxRFRaUk9tMWFFV0Q0V2IxY1ZCa3hhN0g1TGx5Z3Rhc0dXS2pKR29WWHJsVHRiM085RGJERFFrblcyQVZNSWgrWXVvbFhNcHlxSit4dVJOVWRXZ2lVNERzeW10d1dOaFIxVXB6Yy9WQ29wc0NvcHRJV0hYcSthdkl5NHh1T2R2ck1hc2t1dEVCRytlMmVYTW1TU1p1OWZwYjlDT2RkRTdXK3M2bTh3b0ZwaGNUT0JqYmxQZ3BZSjVycFAycFc2V1ZNa1pCRXhXaVpibWRxcmlkenMzdkFObWxxTGVQUGRqRnJvMm9QaWRCODVsa1pxK1Evc0FIWVBkVmszQnM2bjFHTFozRkFKYjdnL0s0T2EvVjhYRTlwTVRway9JVmFyS2dPYlJkWWZseU95TS95a0dCYWRubjUyUG90MTVqSlJIUm9WYkhPZEloK2dacUJXN2QrYXBNcUJTZXl3RGlraWsxZFBSaEhqTnRPb21vTHdxSGM0d2tRNlFDeUJiSkh1L0YvcXc0a0Q1NHZ4SUZBM1NyWWZMZkJoTEVrMzdFTDczQTVjeU9kdDhDQ2dZeG5RL3hBSXYvR2FEcnIza2xoUzNVWDRQNGxaOVNWeGNGWW1VVGpRaWh1QUxLc3lhcytKSTlkdW9rNFNGWDZPekxKc21HbDZBMU4zek40aEFsZXk4cVlNSGFCZHpLb1BZeFFPSGI1NHNnZGs4c2pTRzdzblA4a0NVTm1sNjFPdVE2ZkJUTmFOOTlkMVM0Z0prRVdpWEFoTWxTRUNtWnV5MzJGVWxrRmNwNDhCZTdQK2pZbTRkUmNwU25YdG9sUEQ4NWRvUTZNL2t4MGJzREUwRTdkWTJLdmhWZjZDM2NiMXloZWlMeHN4SG1RV1d3Uk10T0xwNkNZS2M5a0szenE5c1hyMG16SExxSnBFczRobEpqcXFrS0kwczA2dCtIaTV3K1RtMmY5b200bDJ0NGlESGNXci9tcVRZVjc5VEJndGcxMUFBaUloVHYwZGdraHA3SHZMaUl6M3U3MDZBOC9xdjhNV3NXMEFwcjVKMnBtK1VvcEFzUm5Ga1dtK0dWUWRRSHp2dXJuYTBRbnNmbEgvVXo2dUxWV2Fmb01IRkUwT21BQ2I5QStvWStaMWdsQWFHZHR2TDFDUzNUL2xoZnZPSWNvdGEwTy8wZlB2TFVYbVNMVUdzKzNZa3gyb1FZUTdQSmFyZUFFeVhOUUYzVm1XV01pdTZ3VFNBanNtclR2NWxTdDRLSlpabFlUamlVNWZRazB6aGpYUHV2Q0Z6UlA4SDBMMm9CRlh0MkJFYVc1TDE1RW4yTWFmaGxodjFPaEthQzJERk1yaDNiLzFVMVlQL3RuWUtRWG1hNVllcDlGQ3BJT2p3emsxOTh6Wk1TK2RIT0lMdHA0RVo0ekkyL0czelUxUHhkbHhlTTlaL0tMT0U5SEZRaFQxUkQ4aVc3dXZySUVRSzlyMVhmc2hvL1JTY0k0cGxKWnZPSEhDdXc4dFB0ODJPZjViTU83Q0VkbEcvTjVQM0RyOU44VHBCa0R5dEJOcEg3NTZlSDB0QVprblhuL280QW43c3lQQk1ITngydURKSHBFanlhVnVHMUlIdmNiRkdPS0F2UzNyVXdpUmtpMFZSZU1aOEhyVFlQQ3pyRW9HejlpUGp0T1J1Nm5tRVJQeExmZkovUW4waU14MkNlb2V3VnZnRC9kaUtXZ3RaUVdYakFPRGplaFVpWExmaHphZ2c5Vko1VnNLNDIrNVZiRXYwcTN3RUluZlZ3bWl3ZWVRelpTUUwrallGQ0ladTBSUlJ6SFBJcUdQdEliODg0WHJzRUttdWJoNFFzL1dzamhDbDNkUDRGdzk2U01TRVZBanBtMnUrK2lhcmdvZm1LNVB2aTV1Y1llWHpwN1p0cUFaVW4wVHkrZmsyY2hwb2lsaEdtMWRKYkcrdVNYVVZJSTRRQytIb3RCNFRaWHdKSzVpVklnV0ZBOVFYRFdTRDIrSDdGd2I5NWFnSzJ1ZW1vMEtxaEV6SllWdjhnYkRsSC93MURCYkZ1Z2Zod24vZ2RnMnZBUndRUUNUMDFPcThPWlpHeG0rWWhiMHFJQVczUWJ6UUVENThPRVZNeXE0NmRJQ1FxVm8vejNiK1NnKzQzaEdUZnBIWUJhWHY3YU01dWZvenowL2N3WEEzdTRnRWV3bVAzdGhZU2ppVytoQy9lR1Bia0dSdEdRVkhydE1JN2dkbXlCR2J3UVppbXN2R2R6VUpuekdtNTk1SW5DaXhiMWtvRnRUeDhDeXZ2V0dhY211MjBUYUVDbXV2a2FTRXRPUytwTFdDRjh2Sk55Wk9TOGV5SDA2S0hlazhzUTRXQW1rTGNCTFBaTUVteHJ5OWFlRmRSaVgySjRpbEYrOExRUGhPdTc5S2I0QWlNT0dlQ1EwR2Q3aGM4RHdNV004SkNuZm1wSzZuNEJSTnJOM21IUC9aNGVJbUlsK1B4QVErUm5YWERNeExiUm1TcDVXcHUxSURBQlBDWnhmMVorTHhQOHBkQ2swQTJZM3lWbVYyNWlyMDFwcWNhNXVEVlpiUTdKNHdSMVdLOHo0UmFPeVg5UHBnQkNmdGVPSjkxZS9TK3VzaDFtbFdXL09XNmhIUEFXZVg4elc4THkzdTN3bW1ubGg5MExPZUM1MCtlQ0NPU1JjMTk5T3NWblpMQ3RIVWpYOGFyNWdlRDdYcWJMVXVNWGM4c0ZlYk9GOXR4WUxPQytVMVMwUlEyd21JdStJL0VNc0ZSOGdjNi9tQXNVMDR3SU00dFgrM1A0NUpFZE1ib2J6c0dXK2lWNlZNeklaTUZ0OGcxNzlUcGkrSU94RzZoSTBKV2pUOFRvMjRBOTlCMHZudzVnNStqM1EyWmx1TXFqMzNVd1hONnFOZW1zbEFlajhKUTJnaWEyM3FxaGcrSDduNU90ZjcycCtKYXJmdk9YaWtaMXJxN0E0SzlJRTBNcFNOVmE4WmlpNkxWL1VrOGVHYzdYQUtEcmNNRVhTOEhuZjlvZzJFNWprOUcrQ1ZtN09oc2tEQWN4OE1Uakt2bDZMeUEwYzV1VVNORDZNUlJTOE91dmcxSzZsZmVuL2VBYlVlQ2ZtTnJNbUtjc2hURG9QK1ZadTVwc3VKUTR2eE5xMmRnSnFtSlZHVHA0Mjh2NVRYYlZRcGw2TEJycThvbXh5cmg3RGRxdlkzZEtSNWxMSnY0c2plU1FCQUMrTkMzVUZDVnNQZFJwZThIT0JIajNVaGFaZXRscndYU0o4ODBpZW1OazRaVVlCNU95NzkveXlQRFlVdVpuTm5mNmtBS0V3bTFvUkZXZzdWTkdabTJTcXg2V2kvek9NbHVudFprT2x1ZTRtMjlYd3FoM2N3UVFMQnByTEw4VjNPTGpOaVVRcFpGcWw2aUxPQ2JEOGxyNUxhMVBVL0Z0Tkl3clZHaUJETnB2bGFVekl1UnhsWG5GNEJTVG1DUUVqNG8yelRwVTlkUnJ5cFR3cmxITlRxRUhMU0RqdEdadmlHWklPV2RqS1pGUTJTMGpRcjB5RjcxKzA2cmJKT1UwYldrV29Ub0F4MGxqS0dNc3VzNUY0RWx3OUV0TnRZNXZPVzN2TUFyamUvdWlaTDRobkFYT3JabHVsVHBTYmtDdUpMZ0VXUUV0dHNTYlNLRTVsaHZmK1ZoczZML3FRZ0xzTFpNNVIxa1ZacTdaZFFqYkhwUEFWNFV1emdkVExteHlPdnFvVHlDeFJvNUM2VWVsbTRxWXJ4anZtS1hyamFmeEdyZjdFbFNLelBBcmJuM2I2L0pha3dPdXAwT3hQdWZMRm44NkJxODkwUE5Sb0xZb25WVDVIZGd0YzMxTFZiQjRtak5DcTQvMWpETE9Ib0pjdHl5a2N5R3YrMEtzbmRTZ1pkVW15cVV6REJMbCs2Z0MwUU43UTI0c01PSnk5SU9DV2g3Yi9WazA4MWFhc1dVS1RRaVNqYzdpUTBETTJId3pyOUVKc0VYUC9hbDVZT0hIbjBIYlBUaU9JcFh3TnoyVCtNMldGdkc0UEpGTC9YWjN3SDJLdUs4a01zRnRvSzFxYkpBaFRZbmJibllZRFZUdGl3d1Q5RHZXWG4vMEtPcit4aTZwOCtVTFh4aUJWWGx6TGpOL3lkcHRoamRNUmpxd21ZdnV6UWFKTWs1TXJqY2tCQnpvdHcySmEvTnNUYml5L0JON21UZE40c0gzaWptRzZ4Y2dxRHNNdDZNSVpjVDJrU0NYVnlxUWZiUkVKYnFjSzV4dUJ6Ykw3QzFqUUUxRDZKbklYaGt0SzJ1ajlaSXRNUDFhRlR3YktrclZ2eGhxUkp5TVRwOHQyT21DTDRLTmY0R08zajFYV1l3RHdHNFpzb0wwMmpNOGU2RVBRaVZ3U0UrSkpRcXJDaHZLUzZGbEVzYi9QUVo0SnFnOWE3TmczUVB0eTZjVFllbm90RGV4KzJ6cG1ON0g5VDhSYnMzeTF0MllOVXhqZWwrOVIzRVVlUk4yMG5XeGx1MkJYOTgvSWhoSEhZa3grMUJFOUVncWJHYXZlb3BKUjRGQUdEWitaY2wvUC85a0FBUUFhQUVBQUFUQUFRQUFQQVFNd0FnQUFBQUFBN2dGbFFBQUNBQWtDQVFFS0FnQURBQmxVYUdseklHbHpJRzltSUVacGJtZGxjaUFvTXlrPTwvQkRCPgogICAgPC9CSVI+CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I+MTwvTWFqb3I+CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24+CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I+MTwvTWlub3I+CiAgICAgICAgPC9DQkVGRlZlcnNpb24+CiAgICAgICAgPEJJUkluZm8+CiAgICAgICAgICAgIDxJbnRlZ3JpdHk+ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8+CiAgICAgICAgPEJEQkluZm8+CiAgICAgICAgICAgIDxGb3JtYXQ+CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24+CiAgICAgICAgICAgICAgICA8VHlwZT43PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MVo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU+RmluZ2VyPC9UeXBlPgogICAgICAgICAgICA8U3VidHlwZT5SaWdodCBMaXR0bGVGaW5nZXI8L1N1YnR5cGU+CiAgICAgICAgICAgIDxMZXZlbD5SYXc8L0xldmVsPgogICAgICAgICAgICA8UHVycG9zZT5FbnJvbGw8L1B1cnBvc2U+CiAgICAgICAgICAgIDxRdWFsaXR5PgogICAgICAgICAgICAgICAgPEFsZ29yaXRobT4KICAgICAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPkhNQUM8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5TSEEtMjU2PC9UeXBlPgogICAgICAgICAgICAgICAgPC9BbGdvcml0aG0+CiAgICAgICAgICAgICAgICA8U2NvcmU+NDc8L1Njb3JlPgogICAgICAgICAgICA8L1F1YWxpdHk+CiAgICAgICAgPC9CREJJbmZvPgogICAgICAgIDxCREI+UmtsU0FEQXlNQUFBQVQvY0FBRUJBUUFCUDh3SDVnd2NEQ0FyQXo4QUFBQUFBQUVpQUVBQUR3SUFRQUlBUUFJRkFBRUI5QUgwQWZRQjlBZ0ZIUUVSQVk4QUFUOWJBQUFBREdwUUlDQU5Db2NLQUFBQUZHWjBlWEJxY0RJZ0FBQUFBR3B3TWlBQUFBQkhhbkF5YUFBQUFCWnBhR1J5QUFBQmp3QUFBUkVBQVFjSEFBQUFBQUFQWTI5c2NnRUFBQUFBQUJFQUFBQWFjbVZ6SUFBQUFCSnlaWE5qbWNvQUFabktBQUVBQUFBQUFBQnFjREpqLzAvL1VRQXBBQUFBQUFFUkFBQUJqd0FBQUFBQUFBQUFBQUFCRVFBQUFZOEFBQUFBQUFBQUFBQUJCd0VCLzJRQUl3QUJRM0psWVhSdmNqb2dTbUZ6VUdWeUlGWmxjbk5wYjI0Z01TNDVNREF1TWY5a0FCQUFBVVZ1WTBsRU9rZFNRbFF3TWY5U0FBd0FBZ0FKQUFVRUJBQUIvMXdBRTBCQVNFaFFTRWhRU0VoUVNFaFFTRWhRLzVBQUNnQUFBQUUrWXdBQi81UGZHMkFVTFBjTHM0eXpxMENpVU93aGRLWXU3QTBvN1dZcnhjc2NVc1dwNkpLYWh2Z2JraUlveFN3MHpZbzlGZllFTFpmaEJNNnJwZk9BZ0lEeWlJZHhOaUo5Y2FSZTlCS21jSzRkbWZ6QWdJRHhBR2JyS3B5bWFZUUwrUzRBbzZqSjdNajhCNEQ5WWhCZE5UMXBLSG53QzRRQ0xBeE5UUk54MVFEM2cyNUIrU2lOQXQvSFdBQVlyWGh4eDQxL3FpVFZrS3VtTjhMTnFEVjlsSFR3U1crQW85UVI1Z0FxZ25CUGJ4UlYrRmg5YkNHVEZMMnVMQWFLYTYxcS9LVEF1ZCttcW84TDkyZ2lSaGdDT3dtWml3cW5wRnE5ZFN3WlFtQmpZYkxLb3RZQXN1a0Y0OUZCc2kzQURBWnZ4SEhncmxuc2tuMXFFQ1dNTFlGVDJmdHovdkZBeGVMaWdMcks4ZjFHc0RReEx1Rzk2NWc5eDRHNGRNQUFjSVJxemh2c1lVb0U0MU9jRzVJMGN0Ny9QOGdBM0VDL2U2ZkVVdmo4WmY4TXMrWnd2Y0VuMHQvcEw1c2wzZ0ZHczB5N0IwaTRIUElmU1plTlFYUlBjbHQrR3I4aS9PNHBaMlpxbEFObnhCRHduejl5QmlDczYxTEt4Yk9aN0ZxMElDZzJRRjJrMVBGbE8zRlpQcDM4NUpLTlFCUkN6RGlFT3BMcjBFZHFINTY0UjZlM0w3WHRBZUtIZ3VwUkxPZDlZRGtIRFdFb2IyYWUzQktMc29jRFFENUJuNUY3bklOU1ZlUXVKUHRPOEVzWWRHYWJwM0I3eVVDTzVHMGErS2RvcDFuQlV4SjVPSGlKbloxblpQNGFROHpNeFNBU0xySlFIakV6aU5temNSM2EycEk2dFFiRyt0ZnYwWFJ1NkZLK2gyTFoyKzZaQTBVOTBJYUQxUExRRlN5QW02TmpCWi9RYnlXTnhGdjZXZFNxSG1yd0xOa0pWbHl0UHpYZ2ozRjY2c2Q1VjZ5eE5UV1dTcXBGNWx0em9IaFVhN0JDenRIQlZGamxpemcvZjFOUXNPay82SnJRbXgrRVNEeVEzdlNWSVd0SkpVa1RBUFhvbzdLcG53UnRhME1vMitMKzZDOENCNlJxS1g2dGcwY0FLeFh5OXdxQWhvS1ArRFFNaEx3K1BpeHZFRE9vOXpLRXk4ZEFvNlBvTzljdS9QVDRud0FJbnBreWU1bGZjckJMWHh4bEVhQjJzTGQ3QU1lai96WXJTakNFUXhBSUZ0YnhTS2lXVW5HTHUrTTJmM1J5MUtvbXZvRG5VdHJJMDV0YjRyb0Q2bGQyWnUzOG10S0VUeHdVNW8zMUl5N0VGQ0xvamtORzV6U2RhcUV6SktaN1JwcXc0bVRLeitUSXFvMjhRUWZ1N3BVQTFFY1JFbVRrWVBsbFZjY2V1KytOVFFzU2VrMy9BRTBsRHRROHJjWGExdU1vVGE3TjBjWHBNVmxmRWhtWFNkbks3ZllhbGcwM3JUN2VIa0Jya2tsZStIY0taR2N0NktBSjJFa25nOFllK3lMSjdnMjZLRDE3TG5uNGdFUzdaRS9Ib25oQWR4UkcvSG9tZlFuT0NiVmVYcmFsOFdoWkRIWWFnSHd1RE9lWlBOUGhFdmo2MUJ2ODdxK1k5L29SNE9VZEoxNUV4WlFYYXVQSU5heHdlWFE1dUJPOVg2ZmJxeVpzVmhQeU1uUnVsVXRVbUtQa1N5R2VMaGdRWEdpZmlpTDdubWcxUE9DNFV5cXpndllidmJDL2M2VDhJVm82TDUwNGhQdXJ3UDRhRHBXODRHRTRhMVJVN1h5WXhjaEtRYTRBbzJSM09QOFNFWEIyaVBNZ3Ruei9OWHBJYW85bUMvdU44WW9SY1QyRUYyZXFPYkZyMFFDdDZFcVVkMVkxNGFoQ0JHaUpCTWF3bmtVS0VOa3djQ3BsRWtqMytuWFMvZ2Vuam5DS2I5WDhuTlBuTGVQU0NObERISjZjUm0rQjdkVEdLQ2lkVWU3QUV5bkZUQm5VekVzVUxpb0YvcTRSRTlVcWtqdlh4SEM1SUFTU0VRamFjN0ZINzZ0R3RiMlVpS0NVMTUrbEpBejVLeGJYRzFzUlBJZnZER3U2NnBEbkZNYitGcjlPcnkvOURvU2FTT0VwakhQTmlxS1hKVHJTQ3JTRFRMTm9acTN1L29mdmdCZ28xak1OMmRuc1RTcHBNMmJhN0Z1Z2hnU3pJWm1DU2pCNDBjRnFkT2RabSsrUVRuSnhESTlmK0hLS3JEakNoMVVBYUN6Qm1HdFVUQnFDMkhCbG1PdFBDMnd4NXg4WXlOT05ZUGhQa2t2TUlDd1VnbnBmc0JaUCtDb1BkbEJ1dnRQTHIwWkthV1ljK1JZYXNmSC9hL3Vjc0RTR1Bna3Vpbk5UWHRBSWpEVDlESUVJOFlkMVIxb2t2OHltOEVjckh4a21HL0hIQTNjZFlMTzg2MStVOGRLTEhHbVlPZE9PdlhtdTJwUGhFMjlKOFhhQjRqK0RlYkk5ZEs1Rmx3OXN5RVQrd0Y2VlBnc1h1L0VKNG0yVHFMWjlOOVBNK0t5UE5rR1Z0N281MDFBMWJCU0JHdmNGSGZ0RGhORnhDWmltWVY5RjhvYW9jMnRQVlJYeFZvOHJic2w3MHhycWhXN055MDhEU054VmxXeGltTXFSbFZzQTlPS3F2UU1LWjZHWUl6bDNKQithYzJFM2RaeHVsTWc1YlZjVzJHTlQ0RjVBbUpYWFplVTgxY04vVXBjWjh4bk1UWEtpK0E2YzBqOCtUMVRzaXhOU05QWlNOajRLVTZobHBmbjc4cFluUDlwdXJwY3ljZ1REZ1BFNW1kcHlYTEVhcjNJQk51MTBqMWVDK2wrcGZBSEtOaDBGRVNFcmJRdlc4eWg1R3BraHJ2Y2lIbWNGWU9DbTg0YzBOemNFY3ZjLzBzWFlpMURFL20yVTkzbVlybXJobnNhdFdUbVorYVpmUENQa0Z4ZCsydW5uMkgwNStzUUNreWtJTUJ3UHJ1Z0FtbFVBeXJaTzlPc085TTJMdTRUVlliaE1odFpUcWhYN3h0Q2lSc25zUi9pMUs3TXVIMlRtY05VdmFCdnhZdStmcWpjbTdvQmNzQm1XbFIrYko0RG5lZDNWUU1ZUUFhQ3ZkcVhvTnBtbDArM1drSThKd0QwaXlJVTlXYVdaa3JsUWo5TU1RdWtBT0R4TEJyYS85MXFjSWRyUUhrZVZwekR1dVQyakUxd2U3RVhKVTNiRlFsTGxLOVo1Ykx6WVQvT0NNNzBLb1FPU1p2dnJPS04rTTFIdjRzd2NaSnU3ajdVQmh1TTlXN0Ztc3l0ZDhjUFZmZk9iRGJVWSt6dEpoQ0FsZ0hMUVNOM3RGbU9BMjlkNXFVUFVWOXhsOU5yNHk5UEsxN1E1Yzd4OGczT2tXcmxmUFdiUkpOckRBNjVTcVhDN2VSdFhMTUZDaVZpRjRNbSt1cHFUV3VTMWttMUFmcVBKSjRBeFhEU284VjhROEg4UllUSXBIYjZTZnlJL0MyQk9xN1k0SlpidDI5aXEyUmJBU0xiVnBCeFFLTnlGRzVlR2ZCc1NWVHd5L09vWC93cWVWMGFoSFFnR3RiSWMxcGtwQU5DZ0pMU3pEaTQvUlYybnV6SzVGVlJRb21KWld2TlNTVUxyaUlGMUg1akJIS2g1ZUFFUGFXalNoS213bWRWTHc1c0RreHQrem9KaEVHbmEyek52Q0s3VkdxT3FvQ0l1YWhKNGJRQkNYTXkyZlQ2U2dud0I0RlQxN0MvQ3lqb0NWTnFyUVoydXIvY3d1L0xMMGtwUkdwbHBuTjREd2JzU0xCUllFOGVFNTJVeUpxajVxSTQyOERLZ2FpeFFBZVlISGdCU2FkUXFsMzl6VkRvakhqRnBINUsxcXZZWHo2WjdmUjNUQXhMbkgyMnlUZ3czZWlIYUl2Z1poNisyK2xaZFJsQ2k2b1RoamVWTm5uSWZRTkV0bkpxdXJrblUrTTl3YzZRNFBQQk5CeDB5MzFENHJZZXA1eURHNXhhV2VIMzV1c3Q3TnN0Yk55OUpwdXIzclhyRjVTUEc4bi9Sd1Buby9WUEE2c05lRGtQclJzd0JFY1ArRU1xWWV6V0tHY0Y1VGFselR6TW1OdUdIeGZ1S2V5MEJ0OXI0VU14a0tDUDRSR1ZHYVBXV2grWlhpUWFPWnNQd21LN3VxSEowQWs3VWcwbVQ0dTdBRzcxY2taMXEzbHVQOTZWdGhaNWR2WTZMOU5zR0lUdGptQ2xLUWNWdEJ5MGU0ZmVJVEpBUGpsUVBLOWJPb2RNZW1pY2ppRkJnVWF6dTV1NndiZjlad2Y1UTRSMjhnODZUT0ZVa1RreGlKWnB4b1F3bVBmTmZ0Q1BHQ3duYlQ1VVYrWkdNQXQ2ZnRRWFRVRnU1clR3VVdmRy9VeGhNQmtMRFZYNCtlQVlFYzZ5NGJLZVF3ait0d01scnI3MzVZbWRIcWhKeUloR2RMd3lSUDJlZkE1ZXBpVVFVZ2hSd1N3Uk1YU2lMc3JxemNRWS9wRTFROHh2M3V0VFZWYmM4dnpKelFRWkFUWEFMeXpKc0xxc216VWFMNlZWWmNtbjNXQ2xQNjA3U3drSGR6SGtCejE3OEZNcWdJTWk5c1dGQ2Z1Y1ZJTWdMcndQd01PY21CUEExMFQxOVJldE5qWkNuc0FHSGg1YytZRE1WUk1NWnNzYUNWcFNtNHpXVUQ0K0xuS0VhU1dvbGpUM3ZqMkY0bTZaeUM1RnM2RXhZbEtqT3B2Z3lYNnorRUtiOGEvU2VnNm5CN212R1R5N2FvRVJ5NzkwQllKcjZMQ0UyUllPa3hsaTB3MEZ2UUpmV0c5aExXTlZTdmdldkxVTjV2Zkw4MGpKbGNjL25IYWZkZVRIUS9uTXNCSTlKVHpKVklsR0hkcE9FdDFZSEpCcTFrd2ZNS0JKRlREYUZhV1ZHZlRGY0gwYis0N0pZNVpOOWszUk1scTdoazZvOGh5anhVUmluZlBFK1YyVnlhbHFUbFI1Mmt6c0pnMU91VTJuY0U1bHZONTd3V0VVSDNqejRaYnErQkNjV3ZFOWRMeWpSblRVMDRNbkxlczhqbE4vREg3YzNPUklpY0pqR3oyajhNNTdXS0VvYWpXOVBmOHpFQjRTc3NuclZ5TUZadjZlQi8ySHBpekM5WDZ6N1JYSUZibk5qWFNxdXRZdVM2b1B4VjdpV09KQzZrUThvZ001WVM1TGdOQ2lOYmtLT1FxUWNhcUt3WW9rcVR2QllnRnY1cGlHQlIwVE5nbW5wRXlvNVo3akZPbWQzNGNYTnZDckRoR3VURG5KNDE5Tk1pSjd5MmRrTFBmTnZYSW1kZGV1OExiRlBKVEZWTStXcG9jM0V5OVJMR1VZWTlvUEhYdXZmOGdkSkpQSWh5VHU3ZU5yMUtqSk1qSjZzTVQvbDlDTU1lbEhZS3ZkY0dtR3J6ZkZ1WkFEb3pYb01XYVpwUEl5ZWZDWVdLaExTNXVXcnE0OFFyU0dNZlA3M0YrRDRGb2FHV0loNWIvYjN2Q3BQM25MMHZlUkY0TW1XTDVxY0xCbUt2OVBqbVVzOWRuZEVjazRsNDRRK1NtWExPZFNkdkFYbk9NdjFFcDZYTVdzWDhveTkxWWQvU0NEa3p2dm96dTZRdzJTeFRhditjQmlXS1JXakY0OVUrZ3FTZWw2dEhVOTdwdCtReHNaK1Y5L09La1lnSFhlV0hKZ201REdmTVRVcGg0Nmt4ZFZ5MERHRGxoMmRxNHNtb0plQUN1aERsNlc1Y2prK29Jdk45OWVvbFBBVTEzNk9vYjhwc2VpOWpNV21aSEkzMUt0eTdQMFBpK2xIcjZpVXdNRjFMNmt4SEt2d0JrRDRWMjlIeTd1MlBTaFBhTm1HYURxM1haZ3BLbTBxeTJ5eXhjcjMxKzdDbTZQQmx2ZkFHOE14Szk2NUx0eHpCUlc2RjZsRE9UbXJ3dTVnMmVuREtrTlVSRjQyMGNxWVJzakNrL29KN1I4REFyaHdOY0NITExsZkIrWExkbFhhSU14WllvbldSbWhReFdPREtmajYxR0I0V1lYZkhPUkxwdUU1bFN2R3JJdEt2eHJhYmR6Qi96RHoyWThpUWRXVWFlNXlPMThrNE1xSkdhc1h2UWRaK1g2dCswbDQ1elpXY1czNlU1WE42NldMMEMxWVVMeW1ZSjQzbS9OZkNVZmkzN0VlWCs3VG04dTBTcFk4N3BhS1VZdm5OWVA1anZadTB6anZBZlVjRGJJZEpUMldjOGV5U0g2NUp4anRPWDIwaVNmR2p0QkQ1blc3dmplNE5NbzBvSC9ieVRHUUxLdTVyRGtrcmxDS01wSjFjTXphQWo1TnVRVzlidjY2RWNVTHdNeXV5aU9Ta214dWtHZEVURm9VSktLZ29zbmNGOVVOU045NnNLek16S1NkZWh5OEdCUC9mWlRlTjVZa1J6OTIySkxLdW5iNmxqZVV2ZXpFZmc1a1hSYU5xbVNsZzFCa0hlSFNnMGVFMTAvbW9UeHYyVDlwZURkSUVCZHRKK1ArSkptcWtIeTlZc1hGREU4bzdTSmUySjhDR0I0UG0vZWRwTlVjOXZVMmRUdHJXYUlOWk1jNHNkNlRJVjltblhJSEJGM2xtd00xdjFVUmY5WVN5WmNKL0dOeEVVek9qc28raXNDdW5tVUliUk5UZFFUVlZ6MDdwOHVaSlE1bFFHR0FPelFlRGtFeHNQc1ZwbjN1dFh1dktqZTQ1MDdsNTlXZks3MVIzU1FROFJHeEtoOCswZEUybnF4V1ZiYTF0SzJHSjZidGVPK3hlYVVoUFM0Z2NaWFljSFhpRWlTMHptMGk0Y3FzaGszZG15a21TTEdhcy9BYUFwTDV2TS9WblBIc3hjME9DUlRmM05FZWgrWHpZd2NheU5tdlBYcm9VN2d4VkIwSEo4bG54bUUvTnc3TFFWcStWQmYyV0JyT0dxbVBseURNOXMxM1k2R01sMUtWcU94SUhhT2wxbnlsbTJxYnI3cGx5bFptRGpOVHQ5ZnRXekU2UjBFZVc4QnV4WWZISGxlMUJlNGhQRVkySDZybTRZdS9zRzAzR1VYRGJCeVVPQ2tnUHJiRVJQVS9kUE9MbnZ4eWFHOVZpbEppL3lhc0FCZ2lIVHU0SlBNUE1pdmxRUGw1QUNoRlVSclBsZlVIK0RHQnQ1MnNaNDlHcFp6TWpzMHFiZ1NnL09vdDNjcFpiZGh4NDQxQVo3bG8yVWNhcVlxM01JV0RrRzVtejNuNzdNZU1JVWtocUNlL3BZVU8zR3djNEYrUGJHVXMvalBWL2RMS1pqcnZFRmVWUmg0SlZMSmN5endDeERMcDRHL2NFMXpzeVRHR25tYkhuK0hFVTd5eWN3amw2NkU0eFdSWjhIRHN3QVlmcnRONXFWVWpoandCNE1Lb0hoZ0NFenpmeGp1TDJqWjdEdytTZE5nSVIxRUcraFcyMkdvdHVZemx1RU9ocVR3alExeXVCTENIeHVJcldNM0YrTmMyN2cwYmd4WTNGQjFwUzBBc1QyZEhyUEQ3dHdpM0g4TVJvRThwTjhWdmJEdjBwNVpiRGkrRUhFc3VrZEp3Q2pIQjkvMkxvejdXWHFMSmp4d0xjNGdyeG1ZZmk1Kyt1RUlJek9BU2krMUpwRFpsZ09sbWNZZG5PS0JlYkU3TEU4QWtrRU9yMVJja3FvZ0htZFJ5ckl1OGJmRGt5eTBqekxLanNkVEh4MnNrdGZtZjZBYWtOMXpQUGlvVXprbVpJSVRIaHJFZEpzY2xYU0NlamZKcWdMMDNRMVlPaTNZSHc5L1F2R3o5MGhFUktsRDBCTk5pK0dRejIwTU5iNHFMdVA5MVQyZitNbnZoTWJJOUYxVDF3NHI0SkdxcTdnc1JtVEtOYUJabkxham95cXdXbnp0bjcrVnBkRjArV2oyM0tUa0xmTmFnQ09OenVad0gwa2hXSldUbDBuVmNtNG56cG1qcVpCOVlKcWlDSE5Eb2xjRDMzYVFhUkl0RTlqQ05mdXovUlFYTHZuTzlqL0kwbS9mVVRpWTNvUjhmSjYvU1ZQdVRBUjErK2YxMlAyU1J5aXJvZXlpaStWUGMyWllRM3NCR1F0Wk9SSzQ0Tzc0M0hzVUwyWDN1bU9nT3pFcjFFei9XdVNHUGNTME9Odkp3Y3V3VndhVXJ5cFZZTDU3VENoOTB6ekg3K2RHdDlwNTVHb2Z1bUdYWHpmWFM3eGp5T0tHbGFsZzU2TVVwdmNsWTRvSlczOUxzc0JsZ3dkUkoyRnBlWWdRUU5QbmtFUFdrNjl3WXM5YitxUUdPYXA5dDBWcjBKcStLdmJaOXZtS2FOc01kaEpOL3pPM0NaRWIvUDBrUTF3anloaFovSHBvcTBVTjUrN3lpSDVQSHFKTHRIcTNrTHZoZGJoZUpjZWEwUVlzQUhxTjdSUHJoSnlJNUk5VlhJT1BOVDJiNDlBTDJUTXpzT3Zid01zeWUwQ0swdlZLWFdoS0dsVzd2WGQvMzlPRXBVN3FzMjNKYzVBRWZic1FoMUdwU2dsUlNIazlGTzBkM3JjRndtTVRzNXExZkZ5UUk2RXFKS1J3cGdHcDJzdGI3ejF6UzFibUFrSHJZbTF3NlRVOWJ4R2hiaWJMRkhNZ052UTkzdm5lZFpTWng3YTJBODMybk5NeS9KMFdnMEg4V3FXc3d1WEZZOVd1ZnVwbk85dGhzK1d2OU5UQm1qMytFV3cvOFBNc2NSQ0w5NE1vUDNLMS8vbmM3ZXZCa2hnWkFLMThTUUhHZ3RTNnFNdXFxUDMzR3hOOFlOM0tlTElINkNhcnV3ZUU5NWU4SmFrNGtiS25UcndwUWlZbjk4Z0RDeTRQSFpaMGloYjEyb0lpeklESkdMSjRmWkdHbWdOeVRhUVI0c2xqcndGdTBsUDU3NWdqb1RkNWZPRkFjWUpsdmNBVzZkdTJuZHZCQ0hXMDd5ZGpQbUNJWXpBdVFFVHF1azNhZDhNaXlJei9nZFYxQzUvT3o5clE4TTdTZjlHZWRlRWNPYkZSTXJpQzNnNG9ZWnBnNWs1NDlMZFNmQmRJTGo0S0ZlclhmYk90MUs3UFRtc25UNkJhTVRVRkU1bm9LS2hCUHBwd0Rka1BzeFBGa0F3b0ZKZnRlZ0lQNHhiK25mTGxsNWQ5TmpFcng2UHk2ZDdJZWtJUStwQThob3dzd00wSjF4KzI0SFA5YytTMFBGMy9YN1NpNzdxb3pleG53WHdvZFBaMEFJVkFPaHlsMnZudlZRNUNiOHFBbmh3VUFqRFJhOVBoTXowV3JWOUNaaEJtTTFpUWxQTW1vbTg0Y3hUeHZ4bVlmS2UweTQzN3FxSzIvS3N4SzA3WlljdFdSdXRsUEpjNGROUHlIRHN5T3BWdXQzY0ZQRzVobVBZQWNYa2NzeElJeUloeHE0L21rNXU1aHNWR1I5WExhaDFRSWE4dE5EYU5UTTl2M0V1OWM1SXJUUmtGNUpCT053ODVuaEdYQmZOUHd6YS9ia250WmwyWEtEYVVoSTdrem5JVnVobTd1RDZSQVlKVzRRTGJrOGNLNkVXQUZOWStKL0FrZHZaRXFyWHJaSE5vMk9EeEE0M3hHOTB0SHdIZmE3bk5vUjNYMHErcUF3RXFqd0JYdkxadUtIZWNtOVF4ODJSL29IZUJycm5Oa0ZCNk93TS81UUhacVNFakZXZndrSEZOazAzLzlqTHJxYUtyRGF4bHFVUnJ0ZWxaTko0VXlQVU4yNURkNFd1ankzVzRvRkhZbUZnUG0yVE1oTkIwSitheHVlVk50Y0tCeVZRRHZyN3E4cHVPSVdYeE44V3pLNW1JMmlLUGNIcEFwd2pSaUdESlpQS0ZEdjBQUEg1M0lTVUpPSUN5cyszZ0kzWU5CaDRnM2J1RHU2WUJxamtQaTgrenloTVd4anBVQnRGVitUcHFYcUpNNUhUOXloS0kyYVVWVkppZ0VOaG8vZVFFSXpoeFNlOU9EQ0hSVVRBTkpJZFU5NGdIdnVCeWowNytTR0x0NzlGaUhGVFhvMFVnRGNLeHYvenFIMk5BZjA4RGs0Qmt5VW40STFCbXBwZzBPNkVjVEN5a2JnZnpBMG1Db1FoV2RlZHJPQytncmpXaUt1UEllUjhQZHhZQlBEL3JxZ0h0aCtmMEcwbWRTRTZvenNEZzJ1c2NtTmRpVDhBV1A1cnlCd1ZNci9QR0RjbFFIMCszdUpBZ1hLS1VCb2ZpRGp3YU5PUDFMYzhHODZIVVdBQjhlZ1dNdnpPbGlFam5qblBhRzVhd1kreUpSaStNekJyZW5CZ1Jmek5KSTlmY2xiOS9YbTdOcDRiSTg5Ynl4Rm1OWmJQRjVkaVdVVENJT3VVcCs1K3lZb3BlWUsrUzVtY0tGand5LzNReVNEY1NDREtjL2tTL1VQYndzMDZGRmtuYXNsV1ZzUjdtNjVRNE5mZ2owalNyMy9zVk1qMnBzL3hSOWpFdE0yOG9Zem1CQlNVOVErN1hGMVlHSVVNdXU2ZXBMbmY2SzUrL0FwZjBqT0YwNXhHdEUybU9XZzBwM2FxL1pNOUZBVlpSbDk2MVFYZlg2Unk1NlhaeENVLzdrekNEVndtQmhOcllvUEN1TTIxOW9pK2NxK21wWndGS1czQmExalppTEJPaHYwZEd1Z053WjFIOC9OY3ZBZml1ZFdiNWsvMWhkUW4zOGhhZ3g5UmdYNmxDZFIzeHBJZ0Y4RWRYMU1oOTB0S0ZRSko1aTZYamNOY1VjeTM3M3YrNlAwTVF2YmdjVmtYK0h5Y245VDRlWHZQOFhoaUNIQncwaC91aGMrbzRZNUE5UDRCZ2Z4NUUybUFhVFZhWmZRRURESE1ZVzdKbW1xZmxUQ3JVVTRVOGFqQXFzY1RUZGtoTXhrVWRHMWExUHlEMUlUclZGZm5NMWxiTFphMjRRTFI5MWFta1kvQkJnWExZYU9PcWJsdndibTBpU0NPV3lKVVhQejFQVjltK2Y4NldxbmZuM1dHSmROQTBjbFRkQkE2K09vaWdQTnAwV1ZITlE3QitsN1V5UEV1U2VrTWVVOU5kTEViUi8ydHNCZjR5N3MyV25uOFZoeGxiazlUZ2FQaXQ5MDlVMU5NamVrNGxKU2pobWhQS3c5WG5MQldXYkM5ZUtPYnMxLzFqWjhobWgvbEZOSFovb2JFM0ViTWpxWjErcUNmYVVMTjltaDZmZmpDN2dCbHlkZnV6eHpHc3RVaTBHNldRck13MDVMbXVuMXdHRllJT2hPV1oxeVNUOXJuMEltT2thVzFkekUrYWhFQnA2TTYyM3V6VTlONGhHWUoyanFTZk90VC9RTzRJREl3N0UzTElnWkd2U215cEVJcUpzd3FHU0ZWbkdFRmI1eVIrblVZYUtWeUJyNis0TmtMV2hiMzdsemJ1UUVRMk91TnZYZXJoeUwrQk9EZTZ0aE5lcG9CWTYxSllXYUFDbHdQc3M4UFl0elBYNTVZYTRnYVlzSWtwcC9GZmpPNVR2RXNWWDJPcFNvTmdPY01scDlFSXdvcUl0SlVYNnM5RmNHM3U0U0dHWC91TDl4NDgyZEZyUWxrakF4TTdBMC9JdVZxOTk1QVRGaW8vUzZFMUlzT3hLdmRhNVdWVmZNOTMyL3RjT1BsQ2QxV250UVdrZDB2UTd1VW82WU9lVktGdTM5eTJwSjRJU1RFOGxIQ0E1dDNFeG1EQkwvVWFlbFI3S1FYeEUvT2VManZPYVlNUFd3L3RMcGtsMVg0Q0FnSURtK21nQXdNYTB5SG9pNk1HZVkxQ2NraTFZSzJsNllsVnlnV0pvblFJVXRVNHNOM3RaNk4rNmRrZXdqMU1PQzhaYU5SUVhQRnpUTFZmOTZVZkJNelp0VkZXQW9GT2pxUllOeVdSclRHdHJwWEo5RnJDVzlaZEUxU2hwUXJkalpieXA0U2RaajNrUlQxVWYwU0NLdS93UnBWTkhHeXY1ZG1QbzBnSS9zbXhiTDdBajFPaVdJVkFUd2FqRStHYjRrNHFNRXhzOGN2RG0xRnVlVUt3Zk11UG9aNTZ2QVBsaldoZFVMbnk1aWJXMW1hQ05nMFVieUEvRHg1QlJ6c3cwQzBEbXQ1bWROenZrK3J5bU1MVFZkU0FkaTFOWEFaVDJXL3g1SzhxdHg2WDNaZnpLWTRmUldCbDMxbWh1SmJSK3V6QU5paTVzZmw3ZzhRbXJQczJjUTJabExWYXpoc2pKVzBzSWdrZ1RBZGdyZ0loTndrOEd6ZGRuV094MEZQOWFkSlVZeFZxZno1WEowdkV6NS9oY0UzMXpWbTJWWUZTZEdheTZ6eUQzYnA5eFdvYWRwVUJUOHVPYkFML1dCOGdsZ0sxWjFSWk9QZmliUHJPSUtWQmsxUUY0SEs4bjFTcFdFYytGZmVjQWxzbitWVytYclFLNnRHRys0aTdRSUVzMVhYbEJVWk5aMGZ3dGtsRzZOR292UnVQYnFsd3pMd0tCQWR3Q0k2YjFadzdBQzlJZG9WVnNvV3hGVndMOFZmVHhKbHpmSkc0eFp6YU4zd3NLU2k5Vyt6OUJFL05PeFBJYWswZXI1eDBRck9VQnhFbld1YXM0Q2VOQ1ZIVWZCWmN2R0ViRHNCWmpaQ1JpU0V2aXVrM3IzOXRXdDkrMlpCYWpUb0IxQU9rMFJucnQ0Z2xCRzFnMTlIQ1BoU1ZISlV4eXk4aWduUGh4VzAxK1pMcXdkMHE5L0xBdk9PaFE0b1piOEx6Z29nVlVKSDVPRkdlNWVCa0YxK1dVdWRyeGNQTUxiOW43c2o2Q3hPVXZzVXN4QmRqanl0ZTlicXgzdmVmcVlEY1NGWW5sUnpHSENXQjl2NUFjVlRZWURRR3VUUjZkVmFlSm1JVjBIQkFTWmkxeVUrMjB1UHNSa3dOeURPd2xTMC81SmUxSzlZdFN1dGUwOENRclkzSE9TV2llZG0vdWRpTEpZQVBJeGRXa3k5VDBaRGhwcXlCUFRBOHhkR25nVFoyZlo1VkdqMjVBOHN5TXZHMUQ1M2ZqcFhtN3M5T2oxR2ZGOUJsMnRCbDFyakVBeFg3bkt1UDRpLzF4M2RBN3ZtNG9xcXRtSHArWkUvREhFcXIrUjVZUjkrN0hES3AyUVJXeDFVdmdWMUdDcjJuenJtMHRYdnNvU1J4VS9iVFJZSkhkai9FNzhCQUo0a3NWeG5oYW1WK3hkZTJCOEVDQW9UNGprcW1RdnBtU3JaSzg0Q2pLMnJlVXAxamtNaWU4a2lFaVMxdU4wNzJXeWtQU2F5N3dseWpPQkR5VWg5VU51TjhEVXYwRFNIak5rRmRyUTZkdGdSbGVMVzhRYjJBSlRlSDAxbjRHeSsvUlY3K09mcGpwUC9DT24zRFM2N1dCd0gwa0Z4TmY1dTU4RU5nMWF4eGdwUm9rUE9vb3Y0MmhyNVpXQkgrTGRURC9HMHJsdnVGM2FobFlYSHJNWGtESUNMaWNyTmxqdVdiR04vOW1tQU1Zc0FSb2tTdC9WaFNSUFcvMUQxa2llYi80dFRKUVhsYVdUay9JMVVVQ2hXWXJndEtGZGxMZnZQQ0tFVkU3L0owaklyaEtudDB0L0xJSGJRbSthek9TYUZ4WUlHc3lpc1g0L001UjVWeld4bE0vTE14ampSQXVCOEhrWTRHNjBXR3RBTTFXem1TREdwMld3eEM2a3BqYXQ1WDRKdjNXRWFnQSs3QXNpNjZUS1pDVklCdTlGelROY0FHQlhBZ0ltZWVlbHhtaDMwVktqTjBWL0wySU8rOWY4K2VHdktGYmU0Q2R2ZTh1NGxMd0VXTmRvTEhjV0kvYXRTVjhQaEUrMXBrVlh4NTVDSm9wNWNscXhVOFlXdVZ6bWxRTjkvV3dIMEp5N2dWRzhUa01NYk5CQ0VRdEYxaXFiZGd2aVZzY2o3T2o1UmhDaW41TXZJekEzTmtZdEVlSlRNMUNGWDlFZ3BZU0xoVG52UjNtbE9zbkNVc2FKQW85dVFDUWs5YWV3TUxsK0k5ek5WWnVqQ2hLRlVSc3BaRmNZS0J6aFlucWpBUUxITEVST3JNTm9GQlpheVg5dEIweG1TZzB3WXhtcWlMblB4Tk5BZ1laRVlaUHk4cnNmQTdZSlJHSW9NWWljeWljTGxVTXdQUTFLelNQSHlqYkJBaGdVa1FtSGFFQzV0TmxsUVE2VmdVMjRJazVlcHJ3d3p1YWZVNmM5NVU4RmtVVVByZVVzMUdGWDI1ZTlqTjJJWC83SVlJZHhpeUJ1SGgxdUlEREpBUU9sSTFlL3RUVncrYVZlK2F0elZtUFBhb0FwckQvVlI1V2pPYk1NdEwybWZQa05HRjh4WTU0cUZuK2VNWjFuTExTa3lKN1lFaXZ3SmhWSWJUWnJnNHpqYkFZcnJUOUI0cTFuZFZuUnhyVHF6ZG9ZY3ZZZVBQdVVFdDFUWFNiUFI0U3lmRXRJeGpmY2tHRUc4aFVxZnNKbTlPdVVkNlZNRlZFY2JiaE5QazNnMEE5NnFSU0FDM1gxUHBjNkZwanNvcDFqSFpFcnhaV2wzeVhJVzBsa2VNR3V2bXcrNmNwTU5SN0VJTCs3Z0lUenVhQkFkUmlELzFmOVRsRk5jd2N4NGZCTlNsYlJ2Zy9XK0pCU29lSDRVOFR0QXVib2xRWXU0SXN2bEtWbkZITHFyMnVib252TXRXOUl1QnR4OHR2a25ybnJYOWhncGJMRDVPdUNxUUlpdlUvb2ZWTnBYU2lsMjF3b0RHSjBxNXY5cmRVRExLQ1ZPcTRKbFB0QlhsaVRHN25NSnZJekRTTUNQNVZMaFB5Sjc3aUttNzh1SGpaNkJjQXM0SGFOdFhzZ1o1SFIxb0svZHBtdVJyUk41Rks0T2ZHR2ZZQjhGNk1HS1lVV0lrOXh6UURWOGg2L1EySm40ZzZ2Q1RiaGZlVVJhcWF3MERKT0xDcnA3ZWFOOEN5QkV4RUFObVUwcHQxMGw1ZXQ2RDlPNTlheWY3eEM2cXpHQXlXZTl2eThScFhDOTRBWk1uMHhkZis5ZWs0d0tjd1RsUnBMeCtCVy9yakErdXhvVTRYK016L0ZGazBldnA0TjFLZ2V1V2VCSTdiMlg3K1NpaVlRZFBjb3lnY1paMi9Pd3hka2RBWnRhRTVRNzdpNmJkWDNIVnFER2hGMEcwTWQ5alN6dmg5WDM4NklGRkF3bmpzRVpiSy9qeWNvbTh0N0hVV0g1K25GYW9oMFpTUGoydDVTMGNFNFhRUnhVNHl0S3NpZW11L2I0d1FVVmZWUk1sa2F6YjZrZmtQM0pUL0ZSQ0RoVUYraXVDbUVyYW9GK2NrMVB4dE5mb0tMSU5BVWxMdk4rRkx6UUtOMlJvZmttOWdBa2RuVTZKdmFoQURLL1htMmNTWTZTM2hFMm9STHlQQjFiSHZHZHU5VGd2NGUxVlBIb242SEJNMm9Edmd3Sy9XejU3ZjJWN2VTUm5kV3NYMkdtcGM1VnNmTk5ua3lXWjVScU85VW5jQ0UrakFMRWE5aGRFQmpwRCtiZnAzUjRDck10RThTZ0g4aTRxWk1rcEIvendTTStNL2FISzI1TFNPSVNHQmIrUmlOME9hVVBJKzJxVjQySURvakNJMzhTN1orQ2JlZk1DMGdQUHZrMjRQKy9PWGpRM1o4YW9ua0FWNENzUmsvdVBNMmZ5Z1Jyc2I1Q25lcUYwbXd4TEVFUUFJTEVLN2l1Y1BhT3RlYXV4S0FzaWNsc053WnQwbFdteW5uZHNpVzluWStnMHlUUnJlOVF2NXFtdU9wY216cE5VRnhGeTAzdG5uNFpwWXJqRUsxRWNRNjRNaEIreTVkL0xNZkJCaHE2RndxenBNZDIwVXdYYTdMYjhkS252TWlhMm42dmx1L3FNbE5tYjlaV1I5Ymo5bHl6NnkvMnhpYjlkSC9XWkQrbzBmYmEwWDIwYi9COUFGKzl2QXhaUWthL2Vaa1JlaWo3QTZsVEVueWRxZnBBdVB4enlRNTN1UTlvVFIxOW5ESUdrYXU1UUhKSWhnWDZuV0hPamtxMVlMUTZ6ZjBIZFl3SW12Q1B3aDJqQlpxdklYanRudzN0SlRHTHFwNFhyRzlUV3ZMMXFqT3pXWllxdzRvQlF5UVdUNnBNNlcrbWJJN05IM0t2VkR2Y0JCL2swUmlOYTlpakNGZzMrTm14OGszekhHd1BUYmp3UFFWb3Zpb1NyUm80MGVJVUl5WDhIcVhyWC9PSzJhQmNPN2FYa0c1NTJFeG9hVVExUGNDSjJTcnZwN3VFL1ZiS3J2dmk1c3B0WExwVldiNkZZa0l4dk01ekxPSnVRNnJWNVg5R1FwV01VZDRXWjJUWkR0aWNyeHg0c1U5R2NCenhJaGJ2SnNIellWMmxoVlNsMDJLdnhwMThGWEN6QzR4U0V6dXdiNUFzT016YStxUnQ4dlRWaVNQbEtUbFAyMFJsOThQU3FjR1FkMlY2aGtuQ09CamM5enpBanVnb210UU5IRHJXbGlTc3djdmFIRDZPT0RBNDBYR2RQUzhIdEg3SUhaSXIwSmtPQURsRjFtbGxMK0R3Q3h4SGkwM3l5R2cxN3FnQWd5MkFKU1JYVHA3eDJtZUczdXFnajBDOEtCeUpoT2tSaENFaFV1OTFYUGdLdFRub1FRVFZtTTVvSGsxM0c0bTJJVTJ0SGl3OGtxT3A0UXRIZVpRaThIN29LTjRPVXVSa1hOZ0xONFNsdDd1QUkzdGNDRm54U2hKSlhHa3h4TnBxQmd6eGd3dHZZZEdOQ1JpZGtQMnpURm5BTzFtZUJrYjlTTVlveFg2MzhyTUlieC8zMzBuMGpsdXVzZDY4OExEdHZ4Y01MR1B0MmRLdGpMb2JZM0I2R0RFVFFkMlEwZ2tRMmdHb0tnMnJEK3diZkxTa2NSditZb3dTMXBrbVdkWi9EZXhkWVhnUWtZY2RudEFKM25hdElwUzk5emJpZFJsbVYyL3FKemtVLzVzQXdHV2FCMEVLbkU1TkIrb1Zibm1CbVQyaEx6QTBjejFxU2JnWXdGRTREZEsyRzZ3ZWlEc1VsNXVsVGlRTTVmdmRuRmVXdkcyZmZIRmIrTkVrZnFJV083VllQVkJXQ3JxdDFZUWNIMUZMZjRhOUVJY1JONG9VV3Z2aTQrMWJjMVRMQ0V6cDVHUzRXcFJjTWdSSHhGYVNZdllDRXVPU2xnS1dpS0ROR3dRdW0zTGlCNEJKdGlTNVhwVEpaM3JtY2JBL1BjUGRoU3FqbElHWWRKaGJWeDIrZVNNRUxqaC9hREROK3g0cU8yVWlXMkVZVm1aUTljdm84c0xDSlBjVGhsamxBWUFPT0JRQzJYU2FlQ25mOWFOZzF1SDZMVlZFSUtxSEgzNVlLRzg2OUpmd2R2SkdzK3RoMUkyT2Q5K1BnZTlDS1lybXpzWnJ6RksxamFSaUYwYStJTFZLWkFUekJoOFhEeCtrbkxuNHdKb2NWMk9RNG5SZ0tLanZXQzNaRWpZOWY5YVBLLzV6WDIvRUNDQTlqb0ZlampaOUc4NW1VanJ0cEZCUnpEcDVOMTBWU21sRHYrUkhXdzlkWGZ3QldJcjdNNmdsdWVkT09SOGVGL3RUbEt3R25qWk5NZjRHRmNOS0JueEFLRlNtQ292eStQTnc5TTVWcDZ1YlQrWThTTmM5ZFB4SVoxNEd4TjJ5cVc3bXY5SHFVcHRFRWVoYXdnWFBLTXFubzdlQm4vWTd5RGdRYWZpQkpyczB4eFUrZ05KL24yQnlRb2N3VjFneDRPR2NRd3RvaGNxRmhFaEF6bFdhbU0xTncrT3RhVjJQek1PeCtOTU9ZcFdqSjR1bEZHaXBWRG9JWFVYNkxwNjdSL3FVdDdYdjV0azhpck4yUTFBVVdsVEVKcGhON1dOQ3ArTEljd09yZHNOQ0xsb1hBZjVtNmY1K2h1NUlicElvVlljOXNZblhuK1N3aURZYmpwN1dmc3EyK0kxQUhnNXJwc1BRK0h5L2hqdmMzVHcrbFp5WmlTcGtMN1pNVitsY3hBUlNwc210bmN1L01zVmtEckdraG56TFVwcGpweERxY2VtZDc0ZmtiaEd2dFd6OUdMeUhYNitnQ3JaZ2tZOVhvSXNNc1FQRXlMVEdxZXBOWHNVdmU1MWszS3RyTU5kZHQ4UU8xWlhvL29pb2xHbzhQMTgwcjl1MFBvT1RreXA2QVE4V1ZPYzVobTR0aTlrMU9ZQnQzc0h5RnVRanZtd0V3ZFRtd0IzVFlCcUJJajdma1NSZVRvMUhVYjJMNGFDa21EMWZ3RzVCamZNNGI4dXdTNWphOEYzT25idmU0akx3aUZiOWNYR1d3bDEyZUdoL0pOdDczeDdPeFEyZGtIM0F1b2VUNXlRdG1wVGFnaGxhWUZiU3ZEUkdVd3VkUzh4aVlsd1VicEpzOXlGUjFjVmRiMXlBVE9SNVlON1BHV0pMNDBUKzhCTGlnODhHYmZTZzFTZFp1aXkveFJvdlBwN1E1TDJ2Zk9NSFRzOTBnbXUwb2NBbUhqenQySzVzY3JoSGJSQkV6VVYzOWExL3FPWk5yNlhlMFdSbVNzZlI2cHRaRXRKbW5tWkVjOWF2WmI3bWlsTTFQTmZPMitNRUJ3VW1KN2FuNGdwNVFvMUFEaXA0VGVJakRZR3hzaWxzMWhuaDgxR3pJY1hjVlpUek90SnY0bzg0ajd2a0Y4ZVpkT01pWkJsWFBDd3dxbVlHdVZzeDRJMmt2YUQyMUczVWQ4aVJaZmk0Z2M0VjZDUWVmZGZXdWhheDdac21HeitNMSt6aGFGd2xSei93UG9UWWlrUXN3Z2hYR2Z6Ni9CVzZZZkRyWjNmWG1RWFBrVTc3c3BrZVM4dzlmT1VFTWdFeXdzVWliQXBVWUJQa1EvOWw0OS9UODNtNnZkdVVReSsyYTZSbm1ZbElFSXlOMkxXRktBTkZrWFExREJBYWgveEVoSHpRNCtGKyt0dUU0MjVvRFRCaXRiWklDMlpPbXdLZEVsZ3FaWmtDYllyOVdOd1hONklTaDUvZWF1M0IrQ3BCd1lKdUpLVCtNOHhGQUdQc2R3ckRnd1lVWHVzVzFXcWQvcEViVER5T0ZidjQ1OWYxU2pHMzRncHBVQS9YOFBZbS96NVpvUDN4R3hhTUJnK2FvR3JTYXVyMHV5eDA4Mm1iMHBYbFpneXgvTEF4ZUZxUlcrVml2YmM2Z2VJcG5mbjQ2aUlKRzdnUXpjc0lRRzQ1MnFvMWpDVnBzYlgxaXoyVWU1MW91YlVnaGtpaUhReDgxbVNJR2hkU1hlN1NORWlpQVoyUFlKblIrZ05mWlJaT0g3b05rVEg2b1Q5ZkxEeG5LUTBsemY5aHZmbUNWQmlLcXJTUWxKcGsrdUNReFIzWHRFcUpjYWlRa0tqM0dzUHJSWnFVMnd4U0o1RGRycUc5bnFMdkQwb1d3MDM3OEdtaXR6M3FId01BVDk5dnpnSXhWVUlqLy9NRkNxR0pxSzBLOU0zZGJGTUF0UGVjMWlQRzJxUGEvd2F2a0NEVEV4c1RoSVVqQktycTJwN1k5NVFRejkvWjNWcG9kaU1xZkxPVGIrcDFjblRkNmxXZDlPSS82aXpqeGJjVG05cVJrY2NWenZERFZNQk83SDY1ak55Zko0RUp6cHQ5aDlNWEtvZy93dHJneUJGa2w4WlBqV2pWbXl0Y09iZ01MV1I3KzNhZkx2MDYzMVhLVFMrUHJ0SWJDdGw3RHhtWS9WSTlFN2ZlT2NMZ0oyeXRuN1Q3WjYxUE5xUnRGLzJrR0I0NHhyYlQxL1FoSTMxeVVDcWY3RUtkcjgxaCtoTDd2a3BGZFdOZ0tvRDJmWHlMOFJ2MER1RGZvREtkZkpkV2oyZzE0RW44WUVhS0lNQld0OVhqVEZnai9kMENVUDFJK3lkRlk1OWpHMGMxZzEzek5ZZ1FQWU9ldUFmT0Y1ZGw2ZVdLTm14ajN6UU8vWmNsVGJmQ2hmSUdsSVhjQW4zSHhTZWFUbWVJdnBTZWNnZ25LS0RCbTFDTkRtRmVKeVhQTmlyYnE1MHM5Z0l5bzlVWEttM1lVaEpDZC82a1hjMGMyR1o4QXFmaFkzTGVSUGVIQ3F4d1N0NWFwRDM5TUFqbmxkczh2SG9UdjM1Y004ZUU5U0ZucUI4eUM3TmlJalRWTzY5SkxoQWdKaHhocnc0cTlWSDZNM204c2tRRVRJYUhpckhzQk8zcVRJQ2RsaklIZ0FhR0pxQ2UvYlhpWDJFYmZtUFpFMmlOcm1PVisycUlsdlZMbXI0ZlpLdnljVkhoOEJwK3IyZXdGbnRYeks3ZTFvU0RVejVRZEpxQkI1QnpxZlBrUFJYQ2lsSmdSVFZoaW5mK2lKSEhWTS9hNFZkTUkxbFBQSEViejVBeTlKRlkxeFhjQjRTMWhBd2dXUGhRRzVXc0dOSzRtMjJqQVNRMmhRMnRkbmNvUHYrNDE4RGNiSU5abVl2a0FHZURvQ2lzbXUwK2w4NEtMaXdzaFJEdjBqYUE0eGo3NEhGZC82dXBPY0xKMEpUaHFRcTRBd2FGKys5bVhVck9OS3FvbUdBcVFPR1ZiK0FMUFo4ZHdIU2w0MWhMZlJQQ1FDajFSWGY5amRhV0dIb0VjMStmVDRuYjd6MDhVU2dnVkZDZWZNUlo3Tlh0aGcvWHg0NDA0eURsNDFsd0E4Z1F2RlE3SFk2ZTAyZFhPbDFURDg2NUliN21nNnJ3dzh0WDgra3ZKU2F4MWoxM1QxNEI3U1pDY1RpcGl3NzFCdFh0TjRseExkQWQyQk5hWk5VOVVFWDl2TDhjZ2RkQlJ1RW5PL0Y0MVZHZC8wQkZET2ZLWW9IbEhndTRyZ3pRVHFzYmZyaGo4UEhKNWxEZWpuSWlKc3owM0p2eFlud3NCOTh1bGtVZElQTGhuc1I3VUVEb0NXYVd0N0IwNUk3cU9tZ3VOSllpa0tISHA2dmVMcVgzNXR5bzhCemFXVk9hTWdScE1CSFFkU3BGc0owWVU5cUlNK3FkdjVXWEQwVkw0MW51YURtNXRnUStIWWFOUmVwTHlVdWZTNGZIMGl1dCt4ZkYrcDZoZmh3eTdGZ3BXSkZqOCtKemZ6NzVBb0NibDRuUmZ4T1YybENmRDA4VXVDREZoSHpJTlU0VXZlSGRqNWRNTkNnelFwRmptVDRaNjZSMUlGWk1UaEhhMzV1dWEvclVCUG90Ums0VG5RSGtuVVRVTzJ1U3BySEZRdEZHL24zVHV0eFBYeDgwZjhucmszSE1vU2hWWDc2d2QwMEc2Qlo1U1RrQkYxTWJxdGgyNUNvakpyaDA3Zko0NE9JNlVyT092dGZaVFFYYVlMNmI3K1hVTmNaWGRjS0Yyd0NJOXRuQjJ3WStQOTRuOVlMdWtIVUZNZEVnbmx5QUJ1QWlKcGNhNzEwR0RnUFN1R0lpdktUWFhITk1IQ0kzUGM5ZS9tZGNaSGZ3SHJ6cEZUek5FWFB6NHVyMmdiN0tVQ0N6bW1BRnpTSjdsSm5xcnhJZHAzSXg0TjM3QlYrZVZRbnBoT2l2eDNGSDkveTlDNHhtTmFkYjBmK2Z4RjlucFg0N0dNRVNSck1Vd3NkM2pLb0xDZEw5TElDSUpJeUFoK21tU3o2V3JSYm5mWkRnanpKMk54bENHc21oR0hNUkJNVkk2QVREeXZycy93QzBtZFowZVpYSEs0bWxtWVMrZHRXOWtya3p1dEhTZTgrNlV0REpYcS8zVkxydmVDNGxKWG1TbTVGc1JmK25Db0ZDNWdtc2JVMDYzcVNEUktyY0xaVjFDODJiM2x0TEcyUE5oSVJ1cnFIUzdZQkgxNGQwaXJIdFNVeUl3R2NmUEIvMVdZZkpYb3FHam5kMW1tZXJGOGN0ZWYyNHRvRTdpRml5RlRuTVFyZmhONFlTcHpkQ3VBZEZicnpiWUs0U01DNXNmMGl3TzFsS1NyK1FhZVFneEFQS0czaUVnck1GeTZIQlRQLzJRbUVKbzFyYTc5cWoxTnMzeGFaTUp4RlYveU9pOFNwNFlKWURJOHVGWWQrMFFqNnF2YjRxSHVSZytHMnlNUGpnZGJwdVdUQmg2NEVTYlppMEUvZkNaMDQ5K2xINEJOallmc014ZWVRUlZucXhqY3EvbmxxUHZjZTJ0MlVDb2xwUjFaOFRpdk55SmN6WkF5ZjVVUjRlUkkzN0lsV2xzcWtXdW9HZVFWekhzZlNKQU16TWVFOVFMT2ljRVpreWV2RHhDM1NEc3JlZ2xFR05ZMGhPcCs5VW0yQjlWQVVYRWt1UkpDSnduR2I1Nk9KSWYrQ05kZHpmSFhrZWptTy9SbVhxSXNrVk5hVlA4NWpVa0NPOHF1Sm5Cc3JRSFRmTTNzc1hPUmErYnFjK0hiYnRZMnhlSTRpYm1JQVd0QTBFNEZCQm1SbDNvOXp1ekZqT1c5VmFVeE1mT0VUWnZ2SW5yM2dUSnBPNHhSNTBnTWdNUmY4dmtZTHpvaW03MHRUZnFwaFJhV2Z4bjhNcVNGQ1czcGRscU1sS0FLd3dRT2NYOVhzNXdPSTlvTWtJUlFEelNjd1pBTUd0TTgydytTTDF6WkZKUWkxUHN3c0ZWVzVvbTVZY1dxNzEzUGIyR0RZd3cxT2FGNU5CSmwwd3JESnp6OFp6U1VIVjhzRE45K0s5Y3FZenVYSGpjNHM3YnV6UlNOWlhUZXNaL2U0MldLNysvT1VUby9taWMvc2JqdDlBTzNYNmhrWHUxOXFYZFJHNVFjQ2lHaG00dmtXMFN4MGhIWjJVbE5jeEtrZmdFcU5DQitoaW9rVVJwbnA5U3Q3NWtmbnY4RVkyNTlSVUw3UnNqMGJTMkN0MVFqVFRFWHRacHhkN2JGVUxsRXRWeU1HMGxoR3hpM3hyVXNFUVhVQ283eDIrR3pyVmtFSS9yNG0yRElEcVVnUTR6dWxjQ1Bldjczc0VPOVV2UGhPTU5wN2FmQzlkN25lc0o5RVBYempPWFlsWHo1TXNuMmhGZnp2S0NLQUJSc085WDUvT1JOSk9EM00wM3Z6NkxxbkRKMCtiVXMyVDBycklHOHFEeCszdlR3b0R3QThBWW1DMlVzdUtrUGVhS0hqSVIrOFhrMHE3cXNRNXZkekdEN0g2U3JUMUg1dHkzL0VPQVl2cTJVMnlhbWJ0R0xCdm1OaVNERG8vUldwbS84UFlSbEJhNTdwOHBtajdUV2ZjMk1HdE96aGtrZHk4Tk9PemhROFVBN2RqQmh3TUJMa2I1T05BeTBZWGd6dmowWElqLzFpcmR0SkhRc29HNHloaSt3cEJrUWlEdkdmZEJsY1FldTBoRzVDcUFVdmtNSTlsYm5sVktYTXJ5U1NTUHNsd2xnKysySmlzZnNuV3prc1hvbDVDKzZTUHZRVXdrTjRqTTV0NVZwT3FMa1VLNFZUOUl6V2x5ZHBMOUpBNUQrRTI0cC9JQklsaXEvV2ZNR2tuUzBZM1VhMFAyZS9aU2VwVDJ6LzFYQllmZk4rUUY0QzZCRTNuZFlnVGRMWU1ibDBVbmluSml2RkgxZmpXSFhQdk44N1VmV3hjOVBPcSsydTQ1UHYxS2NMeVp3aGd3d2JiYllMR1RRbE5WNVdFemJtWGI2bXlXd1pZRkk1WExZTEEwSTdyRFdLbVAvZDJNNFJzcm9pYkFqQmZ4ZHVwMGdUS0pjTWEvMFY2MUIyLzhyckFCeWVkb0piZFVPdTZUT0UrWklja0pzU2w1UkJ6R1Zxa3FDU25Fc0JibGpSZklDb0ZtaGFwMWo3dUZPYkxXdkxWQmxZK0dYdWxjNUw3TGRvUFRIMVRoeFZ1QTRVb01BaHkzbWxodmlyRzd3ZGhsVkVGYnRJK3dpcFNNdUhyTFh0RkFxdSsyVjdUVFd5RXdtaUNJRzlha1ExbzJ6QmsyV2R4MytVcmlXM1o5UTVRaDJJUjd2cWEySUw2TUVpbXBrYW5XYVpWZHNadWRZTXJRSGRielVjRU9CRDFDRTBYN0FnVWRYckEwazVQeGduSjFES0h0MTBxVGZSeVdwNjBMSGJmZ09IWUx4ZGkvMFgySG5QbkdnbEZoeFNFZ1BGRkRvckNrTTdSSFpISUdWNnJJMFNWU3lZN2t5WDZNc2Nac0s5ei9NV29BR3lkMU0wYnd5ME5GQkV5d3B1aW5MdjFBZ0hjK2wvYml5VTV6YkV2MVh5Vy9lREloTmZFb1Z6YXVvUjA4TXI1MnZ2VzdzeGh0MllURk03RUZJSzZNODhaeEc4UU40dEVIVmJOQ1dFV1ZKYXFWeTF3UmZhQmNNRW1vNGFoQ3A0dXA0bnhOdndXbElQOWZneW81WDNJWThQTElzcVIwV1hucytobFhPVmNQSVRSN0lBcUZ1dmthc3hQRVRPR21kdHpCZ0U1dWdSWTVjdmwzTUpNell3MnFoYVN5eTdlYmNJVTNmbjAxRmZSSGx0NGtad0d2Y2FrQmJZQmw3WFJqRGZJSjNodjRXMmkzTTJNbDd4VDhUQXpORGJ3Snd3dUM3bERFcm1NWHF5VmlkRC96SDVlWkdwQ0VpWm13SmNxNC9xY0dGMHg1cUxQVU9NTko5dUlJUms1eFFVU2RRaVdFNXgwdFZRa24weEw3aVp1WHhPU21INkdzaDVWaUJUcG42WjhoQUpkZlA2cC91YkhTSGhqOHNnODBUTXFSOGJ5b01XcWJPclR3QXlHTkhjV2dTUnBvSlhCUnRrQzVza3BaejFDeHhUckNUalRsYUtFaEgrc2M5ZTdUZ1M5SDFEY3RCMGJDTmVUVUpYMVN4bGU0bGcrNmxIVTJRQWlKdTVCd2xTZFNCT0JXa2IyL0pzZWRxUnNXYzdQOG9YZWkrZjg2eHVHcFd4aUVCenV2aGp0MlUrek5FTmR4WW5YSnB5dS9BTlN2MDIydm9EdkJ1V0QxNkZ3bGhZcWoxeHFxNFN0NlNOQWxXVWY5c3lBamdVcDNta0J4RllPZ3Nvd3duOTJSdGgzeUZkZVIwR1NKVHd0QldGMkltNXZrSWw2VjZrTVgzd3hBZ1lMeVZ0M2QrYW9Halhhd1JCNFQwbDNPcFAyOTBaSW1QbEVFa290aGpnTnVFSFQvZ3BlajR6Ui9hODhLei9wUnFuZnpsbzkrWE93TnMrbE5pVm9iek81Mkd2eDJ3QURJQk5Kc3cyb1krVXV0SjNmZFZnMEVsdnE5bitjY1B2TENmLzNJdEtFd1RlMFhoWXRySFNEVjRnalduVjUyaGViUnF0LzlxckQ2TXgwZG53bGdqYUZvcVlYcnNMNnd3R0RTOTNpMEJ3M3JhK3JJYUpTSG40UDVYMUo4QnNtYUxCR2U0NHJ4UHBYM21QZkhmakFNRVUvWW1EOWZxU2FWWEJXaFNOTkRyMnk4UHNOUXRKaFlzT3Y1ZWFQclU5VWNvUzhJL2pHcDdhdEFxeGxtVVJQNmRYNlRISVBDbVJqSWdUOGJFemlaY1lkNy9XL0lKNjZNenJnV2RFclYxa1JFTm9abzAxQUh5bUV0SFpiay81NmtLZ2V5cTZaVDVVQVlPaUFqWkhudEdhaFR5OXI5b2NvZnNadkUxNDQ2WWFRME5oeFdQNFIxM1RHM0JITzhJaWNDb3lrcE1nNHEyR1BmSVc3K1F0YUhMYTNlWGxoWEx5Uk1NYVd6aG5WOVV3dU5uUkZvV3ZQNEYyZy9PQ1RDY003WUtpMHZoaFhVbEdzUWtTSy9yaTRyNGw2UmxGZ21sRTdkc2pnb2F4QVVBVC9XOWNHTkJoM1BwNkRmUE1WS2xxQXNBQ2k1dDFSMGx1b0puaFFuM2l1enVvTytHWkhRbDVwTFpHMTFlenl0V0NZV3pYSVJVb0ZxaThZVmFLa041ZTRuVzR2M0VKbnJEcVRCYkpYMi90MU1aOElpelVkU0xKRitlUUdJTlRJdkxxRXdvM1pMTEl1cWp4eWV1b0hPREw1eGVZTFoyZWtGam9DUkxqRXNDbzR6bFl5Y3EwMC9WRW5XRFE5MTdkOFdFbkZOT1ZWUWs5ZlZSUTQveVhmeEYxNkdtUHhqYm1jZVh0ZU5oWE9kVlMzdHdvSERBVWJ1SDM1L1dEY3BVdDJsRytqS25DMVdOQ21uc0lzR2ZZZzJubEN3R0JGc214MTN2bjN3TnVycDNGR2g5T1hWYzVHSGJZcldXZG5Nem9xSWxDY2pSYTBERmFqYWd5bTRTZm93NFpjc0wveGhMTTlGbkJmMlYzWWxrOTlod1lRdzhTdXRIZ0lLOGFQUi9ZZU9oRERCMnVDUjkyWkY0ZmxLNXJnYjhTbS92SGVLZGhkT1lOYVB2STBGQndjYnZvd25USm9qc2NUeVdBL2tua2hsdy9QdUsrRXdDVWxWV1FKUW9Wem9rY0c3T1RjUk1hS1pkYm1zMmNmYnlrTXptRzI1bzE2cjVKNmpQdlBiWjZhUHc1MmF6OUFma3BGUGxYQUhJa3BNN3Fra1BiMGRWTEdxSVZMNHcydm5vOTZVSUZjWEFNdkhuUXBkUjB6Y2tVNEhoYi9kVjEwUEZqNTEyQ2g2QVEyZlc5dkRkK2syY1JXaXVIaGpvYXNLdmRKdEhoMEI1V0VSYTFab0FmdjZCM0Q0SGVDQktOcnQrZnBiNzZEMDFqMUM0MXRzRDFlWVlPcHlwUlc5aXhtenJZdXBFcnhrVUpTTEFUTnN5VXBVV01Pak5vZjBDc3o4MzB4bktyUlUyMkRXNFlXK2tGcyt3WU8xdTBwSmpWbDR1d3gxSUtYWkgxYmtkcjZzZ2hZelV6M2NFeXVXcTV3bHlET3ZSbmh3MXMwZ3I4ZXpoTTc0eVpKcThPK1ZETE1Ua3lobW5UcEQ3RTZMWC96MWQ4TDk0c2g0QVlyV1craG5PTG9meEl5VzNscnEzK1JlUnRGeXFLR3Zya25PdC93ZElaQmFYZWgyK2dmNXZJaUQzTFJYMnNkbnRZZ2xFN0pRMDlEK2RVSTY2TDhCakpzVGMzbjhQb2hvb3dLMUdLVThDdUpRQmhIWnhBSTBCOW5tNTIvcm1PME9DQTJtenI2ZEFPbUVyckRVa2QveFpiaUQwV081aXd0SnRidnI1T3lmOGZraUN5cm5ScUJNZ21SNnNaK1BIYm4zUzRHMjkvS2xiWXR6bC93NWVQN0U1ejNhUXN0YkdHbFJLQXpVRUtnWSt1T2Y2RlpiL0ZUREhqSmd5eFBLZnN2V281TE1zbmNjQWlNMCs0R0J6eHEvMVpUbTBRLzNYenpLMStDNGpPZFY1WXp5Sy9nTmZaNWYrZkFISWM5KzBxSDRSMUNKZEhhVWtlZ2sreTlJd09TUVNqazFsNDhCL1pTaEJlL2lJQThobDJabVRlc0NYY0NWYWladSt3MjhDdHVBV28rNWZHT3Z0VWlNUkwweFJBb3M5RUkvZzlJRENxcndrMmlCamJzbnFWNkRKWVZCaW9FS0F0K1NzV1Roa2lqVytyMUtGQ21sN3FzTkZxSlY1V0M4My9FV3JONWZrMWR2Qitqb0psMzdZUmZqY0xkbEpYa1RrQWM0ZVQwVHNseVhHNWFRamhkWHAvdk9yejZyUzdHOVRvb1NYQ3hJeWwrOS9OTmxnSVNNSExET1p3VFNHQnk4YzI5OHdmVnNuWW5YVjByQXN0bGxvajBOQThYcXFGYXpvdUtnSEl0eCtNQVh2ZmszRFdHNmFXQnVpR1FwS04vNWo2SHVhU1ZLSTF3QXVpeGtRSFJDaXQ2bzZtbE5nanJiWW9ySDN5RC9DSkpXZFlHd2RuU2FUTVFWY2NpVDNxZ2FXeC9UaTU1U1I3MjV0RFpXcm96NVZaRHUvZ0h3ZUZKb0ZPY0FzMDFCclNiTDNodHkwTDQ1KzZOaWI4NmJBL0ZVUUZZQlBlYVBLTURTMWJCdzRxOTllMnl3UUJkc2dVKzM4bnNGdDY4aVVkdWh6cEYwU0dNSVcvUGNkUDkyZC9kNzVsSXg1amR4Q2xYUEVwdkw2dlZUYnpQaDVleGpScGNIeHZ3MDdFamFQanRIQSt4ZVg2RmVpb25IUzNSUWN4NWd3SGcvVWFuUjRsTnJ4M2lheFNERi9ISTZzQ1hudStlSm5oc3lZK21CZmhpS2xvaG15U29POG40UVU2VFRSTXFxcW5mcmFDdWxqOWgzejQwaklRT2lHNm9Nb2lHN3Z4UHg0RlppbkRxWHpWbWlsaTc2OWNabVV5bHZXMTB6Qm5hSFpOYkdjQW5xVlkzK0wyOWRFcmFVOU0yVmFOUDJsUGJCUnQ2U2NLNHhLdmZZTmVOQzZWY1dlSHRpcjhyQi9FSytZV0lveWJZVDZZMTNKZmxKYTJCcUY3OGxoRjNoUWxlaFhjSXpvVkNieXZLSFkyUVpaUWwyditTTHdoZ2hJNThtL2dQNFhXNUhOay85NGVPZ21ncEtyQm9sbjFlRWg2Ym10R0FoTkFya09aTFdEWXZoTFdTWjArZjdsT3llZm5GMm01dVlQaEhtTkRWMFBKZ3BFOFRHTHB3L0FrUmZuSXhjd3V5WkN6ZEhseWY2aERaQWVRalZKSUdGTWpXenBKM1Y0R0dqQWZ2c3VzLzFoaE9BOE5VRkR0WFhjOTIzZlhiY2NaZHNMb2N4RDV0YW5Daml3cjlqREpIYmVmZEtJUUplc2JGZkxZNGJJYnk0Q0d1SWV3aVZQNzdtWkNoQ3ZMMy9LRU1LbUcvTXB2Yk5oVWRuRmdJVkZVMmRsSmRTdVZwMS91VzhnTFJ2aWJ2bGtZTHAvQmtLSjFQeDVpNVR3cjAxeDc1M3NMdTB1c2x5dnZ5eEJneVBocmd1N3NERW9uTHlZVjJtWk12TVFhQ0gyN25wYmo1ZU9jTW1WVmo0T2pnSmNFZ3JKMVN2NURQY0hrODdNZWFSRlNQZDdBejQ0SC8zZS9QT09Qbjk1bU9UVnZGd09kd2NOZStWUjZ5cmZLRkcyZ2ExV3VTSXYxcTZtdWs3aCtFb2p1dk41VVhzZEQzN3E4UXNxTG1rQ0hUNlduaUJNeUcvM28yTmZQVkkwTmh2ZVk3cFpKTnIrVnU3SGtvNHFKa2VEbmhVTDNhTnNTUTBpRVAxM1E4UHlUQnZ3VHJkbDQvSTVYSUY1cW5qRnVTeHBaNkZFc1BoMFJ5NFJFMVJxbE5GMS9IVTQxbWJkU1AzVnpyKzNhMzg2cmFOUzgzUFpGN3hObGdZMzBYNTlwZ1JVRVVhcEVYdlpaYkZqL1orYXcvQmJlNm9qaCtJNWhZU0VwQnVGM3BRclB4QXEraUFsQldEQm1mVUx6MG1VT0tSNHpPRm1QK3BKNzFicjB4anFyL0hKckVsNWE0Z2FKUE5MQVV0S0loU09rbk9GT2U4M0hHOE5oTmw5cXphVzZQSnVmYzcwanlXR25FSnRQeVBla3o2RG5zTHRtcnl1Tm1lK21ock5WZ2hBa0tvK1ZseHFDcUlTSnVBdDVrRGxmZUQwSGUyOVlIL1RiUGcvL2hNanVTODlNV01IVHFYZC9oZk1Ubkp5ZUhwcWh5TmU0VzBUQW43TjhUQVd1UnpWdUNzaGNjMlpZYXFZMXgxdkFHc1BHZDdYN3R0S3U3WmpLTnQ1a051YXdsT0kzVnFJN1VkTkhnczZqVzl1Z1U5VjhYN2dLYnBTN2NvTWMwaGZneXhGUHZpT0FSbVJrMzBrVUFCclZ0MWdhbXZWUFJzRUZUWWRBaGQva0dnQWl3RndzcjJma0hZNlUzRTg5aDdtT1M0c3c1eVRTSmF2eWRmQ0pnTGJjdlg1dDI0eEd0R2FzNnNLZkFaMjhpZUUxT25ZTXp3OU5CaVZOZjF2aGZ4b0NjWDRnOGgyTkRYMWhqREx4WnNRK29wazd2c2U2ZVNPbDhLalM1Vy9GbzBtNi9OMkcvZHBhQXRpUVBHTGFNcGlYZFVoZENQSmxXREk3aFptM2JYUW8zek1udnd0djlGNkViVTBvaXdudVQ1MFF3aFB5VWpGOXFnUzBUSU9hL2pRYWNZSFNzdWlETisvSFdXRmFaUGVHUTJvR2FpaHZSRnBOWU5WdU50OUxYeWhOWTBmMFFwaExXeDZXSzZWRUh2cytMRkRIYkk5ck9VQXBjM0ZEU3prSmVPVEgrZlA1bGlOM09zcTM1cU4vY0l0NVJ6UTJoVTNaNy9odHp6Q2hPM2RucU1wOVZDRGw4cmN6OTFhbXpJZVpkR3BDdUxKZ0UvVWZqTVp4NnBxSi9hL1dkM1BMRkpwd3RUUWFuV2VoUlJRUFoyZzhvNWVJN1U0VVFQeGFKY1ZOa3NvSDlHL09hcGRxOWwvTHNsQjJqQ0xWODU2bloxbVlNR2xBSmtVK2dac2RxWU1LbjRpdHBIWWlVb25JdUVIdWRRYitVY2xITDgzSXk0d3creVFSazFic0szSFVlK0h0NmJOOXZtQmhrWXRnTmVUYlJobE9kRHRNYmQ5bitodzFoVXdnNFFLbldjWXFmbWhCeGp0YnFSRmVvQUJMVnpwV2E0dkRzd3pEK1krMXVtQVVKN29vZ1VvU0x6WlAxdWhGYThnVkROUXJWYVZ4aHM3TTUzNGpzR2VkaEhkK3gwdzNqY3poWTd6NVVvRjZBVGgxZjl6NmxiSWd1c3VVWCt1ZXp5Mlh6N0VHR0tYM2szRzY2S3Y4MEJ4L0c2bUJxZXI5QVBjbFk0aU1ieFVJUVFjSXZrL0plc1libFJlMWFKTGhUZTF5OGZ5QXZBQ2VvYXowdlk1YjdQaEFuZ0ZGSHFRQ3F4MWNpbHJRM0FWTDAydUF0VG02QXdmZTl3UlM2VXVzTVpycjFBU0NudjBYMUc1b3B5WkYrVWpLTXVqcWNSZkptaFFpb0VVTzdZay9uVlFwNkdyZTduWDhOT0tTVlNJeE8ydmFJcHU3cXFHNlJ3TDJycXVxalU0czJUTGU1ZzByOTJIZENyaDlEeG5sUkNvdmJQc2lsOFRDN2xKQkpBcThYLzBLVkJFck5CSFVNMDZsRFFaaXJ4enVPb0hWMDVINDMvakNOR1lWd2srNGI5MTZqeFM2Zk9pemNGM1NYd1RrdUwzQisxSWE0a2ExM1NEQlcranBGeDl4UlFvYmt4NnM1aGhwSm5TZ2lPVnhKSEJtNHhTb2MyVjNtUHpIL1M0S3hUdzdxVENESE8zdm9COHBvOWFXSUp6VjQ5S0o1VlVwaG9sLzJMNEVZdlNxOU1EczlnZWVPQ2VBZThhbHJWbSsvOUFTT0ZOMFBwRmJBRkFaY3ZUOUl5eGRUSXRPMzNkME4yNVJ4VHJ0dWl5b1JjNWh4dnVHbXhBRCtQaE1sVXRBOXp0V1JDazVGTCs5Z1NQUy9MOWkwUHRHbUxCOXBaTEg1TGtWT3UwcFpObEtYZzhGNHB4dk5wU1lEQUMwNllBd1hvUDMzQ1g1aW5abC9oRWlEdVl3V3Q2Rk5EN2wyK0g2SUZmSHJta3VmZTRPdWZnZFI3a2lud1B0Yjlyd2NMREt6YTBMN2tDbFh5K0lzK0pBK29oNEQ2T2lnR2E4eWRxKy92MWZDb2hOUy91STFHMEhKN0V2aFdhVGw5Y2wzY3hwS1NLUS9NUWJ6cWJUN21SWmhpZlVhU0ZhT1BhOEFLaE1xUlFVMHgzTGZmVy9EV0hFUUJheENkV3RGSTNqYlBxRUtncTFsZGFuM0VKdUFTK2pMUWlVR2ppdTlXTElvMVo0ZlYzTHd3TzdjMlpnRW9YenlXcVNJZDI4ZXlsV1FLWG1pN1J0S1FzSEszbFhqOGppZ015VEExOFVvaG1aMStzd3Q0YU1uRS80S0Jyam5HSTZTdkFoTEw0WGFjT3cvcVBrSmFXS2xXZVdsREszRVlMS0ZaMVN5NkI3czVwcWJuNlpWK3h4ZU84VlgrV1UybjJOQldMeDg0R1FYTUVGbnJrOTlWRE5sb0paZFhLRC90Vm83Zko2SU11SExxNGgraVVTb09rc2ZuMjNZSkZybWZTbFNZbnFOaGI5MmNyYW5nMHY4N2p2R3ZWT2l1UWN3WlQ3TXBtU2N3TDdnVDRwdjZRLzJmMXFwMGRaSzFJNFNrNFVvM1VpVjh5R3VIZ1ZFS1JCRFZ2V3NQbVNUWnFRRFFCejYxaVlGU05TR0FvYnU3Uys3SWVJcWNaTWhMVkg4eldHL25LL3FDVFNlRU4ydU03YUVzbEpuUTQzMWJPVDRGdGc2ZXFUWExRSnNuMmJhcXAzYlc4SFlSMzhHVGJidW9ia0NQcUFWWU5OZ3R6Ymk1dDZLL3laM0dXcHd1cWpxTGNtbWE2NTNBbWJEMlM1dmhTSVZ1TlI2NFZzSXFrWEI2a3JmcVdRYW9GeFVIdkJzdytZUDJmb2RNZVl6Zmc0SEtOMVNaTFBMeEV1VWZNV2I4SmVqcXJxWjNIVkgzZVFLUFFaYTE2SXQ0V3hHVTNhSTc0VDErQmVTQlp2TFQxd2tDN2Z5eCs4RFVRVXArNFBEaEdjYU1lVExHMWNhbGJ3b3Mxd2JybmVSUUh0MEljc1BRL0tZL3IwRkJCYnBHbU9KaFM2cGVWTG44bmZDNDEyc0d4RTFtOVFHTmt6TDdRamZKbkc0NDNyZG9FYm9yRzZaNmc5dzVoNTRBVUhSemJGNmVLSWxvYmFDSzhORFJKMFZxbXVRc0I0eE9mM2pHaUtrZ0w0YUxNeE1lM0dnR1lQQi8wVDZWQmtuUlNDUThBaENzUlFBbG9PR25MNnRyOFR6UEVwemZhZ294aUYxZFB5NGpUVExpeU9WZ2NXUHNTNWIvK0Z4ZC9rVVkxWkxveGwzOERodUJyanhGRVBYZnFXUk5XQ1VvMm5kWlBRalBRYmRaMHZVZ1IzbFBFaWJERHdzb2NWaWU3a1lKcXVWbWl4UzQ2UzhHSFgvWkI0bWlYZGM4TGROdFliY3BDWm1mZkdtOEZjT2FheDd2RXY0cS84cEpIclNXVWgrK1NHV3hBMWF3TVhIYkNVL3dyY1p2Sll4d1QwZXAwMXJZR256R05iT3RHYjRhMjJYMGpmVk1jbmM0TGU1OXpENWFoWXVvdGRUWk5MQTFkMk9yRFpRUy9pWEpsY3J6cTRFT0FMcS9yQ2E0d0JHL2ZtK1FzMGxyVnAvbEVUWEVWenJjZmwxUUUwYWcxZVFQY25mYUd4c2pnb2hSUElqSDErc0c5c1YvQTkwN0tDMGw4NFg2bG9JNjF1WTNPekJxMDRwb2J6ZHV1TWtwUTlDVnEzb1J4aHdQR1h2UUgzV0tEU0NoNVZpajRrRTlpWFlleTRkSzlKZTVMTExaVUFrYUNEOERwWkJiWE8vY2hpZkMrK1JSZ2xPQ1NhMGIxUnJKNzNzbys2UDlMQmxmdzNnaW1pUitqNHhZaC9QeUZLNC91dzU0UndwMVAyaHpKMjB3MDlwNGVEV0wvV0c5UENYbHh6YjNWNGErUE11ZGVUNTEwRGRySWY0VmdXbGlzQTVlSDBhcmswbWpXWmZpU1l6NVpGVnNvNEFRUXEveTNmWFg4UjExQnhKcm8rK1FjSkJuQ05maWZSRW8xeWRlb01sdnI0SVJ5VjZIU045S3AxazJkamlwL1h1QU1zQkJNTXh6bWkxSHFrcGJYdU1TN2swMFpMNWdMb2ljemhZc1RjRCtOZmFFTTFka3FLNHBDa3ltRldCNEJEN2lVeXJRWURNam9mL2wvcFVhZG1FWVdKS1FMaG1pZlE3RnAvQkFlSzJtQWJVRHBYQzFMWUFIb016RWxCenFYZjR5czVna2QvQnNraHRSN3JST1FDQ3UzWFNXaU1qRGM0bWVZVGN6c0w5UEk5WlpLR3dVWTRVVTR6c2E4aVNrWDFHdXQwSVZvOFRGU3BZS2haTlNnQTVmT3MxY2VzV09UNjZRRzJWbGthOXY3R0d3T2hKaWlkcmdXZHM2a1NMZHpwSnlseFQvVkVMVTZRUUhVeEl1K01lN0RBVnVTQ3YweFhKV3ZHeUNCekI2ektzVHJYV0xwVWkvRzJjZGRDQUoraC9Gb08vZlYxT3ErYnI4ZnhUTEhrUHBPcVc4U3BzTmp5eEo5MzFNV3VpYkdhSmhJWVorWjcyQ1Vmd0l0ajJKdmxmWDJMT0tDR1pEYXY0b3VTQ1d0VWl2VE1ZeFR2ZWZhY0N1NzYrcjdPVmdIdi85YXh6eUlWRFNwSnpiVjlySkYzRmhUUU56a3lOQWpzamJSMGdXQ3pSNkNNN1czeUpWUHpiLzM4SmJQcEg3elVDMW9oNWJjRW0zdUptMkt1d251VmI3eGl4R1ZqeW1SY0drQ3htWk5LTElJaTMzZDlIRzllZDIwbFIxWHB2ZEd2cWN5RkRwME51TTBodG9vMHplRkx0ZnRkd0lpLzJmS3k1SnlwbW1FV1c1RUI1Slg1K3lOQXRMSHdkTWhOQ0FDSUlFNGoxSUlRRGJaMXp6VDdUNnUycWJOQ01SalRucnZpaWlmN0tCMDJuSFVLdUJFcWNsWHlIcXhqNDZYbkhIQ3hYaTRHWENaeEQ3MTFuM2JGaUJyMm1uQXVyVHovdFBsSUxvbVpTYWF6bEZTbmRrOWJ1aFRBOVRnZzR5TnF0YVpwdVVVWnBTV09iRE1HejZDRjNqY3dQdkY0TEUvN2I3MXpWU255bElLUVpkQXJEc3ZjenAxSFZrSW1IMGk2aTdJRk5PdENMTE5lTWdrbnFMTitJR2hmQnpzRmxEVHljTE5TSG83NEI0YlFwTXNUamxVRUI5UW5WRnJXYkJYYzNnZW9BOGRrK2RRajFISDRraFM2c28rd3FuSkUxT0I1WmhpWGoyRkphZXJTY3BmNG5oWERIcW8zSDVzVkQ0ZHp2OFcwV203TTRGeDNKaXNQU01URGs3eG1iMjlhQVBpdU9mc2xHUTBPdzlJZTlKTFcyWTR2clhoS3JuY1JBakZRNXhjd2pib3cweGpJVXJYVkFIRXFST1lEVGZGekZjL01DTktWK3hidnpQU0dtYmdQdEdSVmdtaVpjdlNiZXVRUUduWkV5RGltZWZLRWViMjhZZG5NMldKSVBGRytJQWpkYmJydjM3SUdPMjd4OUdvMFJVVlQyZTh0SXpSR1QxejBvdmlLWnJhNHhaRDRJSDArUWpXMVBkbCtrZkpUYVVhaUgxSmtnMFlQRVpsY0V1OStxOWx2R2hkK2VMK0xRam1RRVR4T0tpdGd4M2V2WWVtMGU2bk54ZkQrM3VvTEdRS1hEb2JCMUsrMlpGODluMVg3SWhjUkJsbXRCRDRObEFOZFVDOVVHNkM0SVZWa2dpbmVsMzMyYnFQSlV4cjJiRjljNTF0a2E2S2dCRVpPNWkxSkJ0Z2dTczRpZ1JJOE01WnpjbWRwbWt6ZnN4N0U5UWlWRnpud1F2S1M1UzM3QWpzK1FOc0hoaVgzdG1jdXhWYndESE9KRDdoT1NGdTA5Qk5HMUFTaEhrK2xacmhqRWJhS1JQNUZiOW5WZkE4UjFYbjJ3SzRaSUt5UGRaRnRvbmxxVTd3dlVIcWtlY2ZNK01TYlphRnVOT0FWRzJKK2xOanZuaGFLUG1jdHk3M09yWGFxTFR1WXM0a3VHeHJIeTBueDFtVVhEemNSd0N2T3JjLzlUdDJwOGloYzk1UTFyQzFmOE44cWNBVmo3RGVSam8xUXEzaHJ4Ulk2RFNXWm9ZYTZ4OWsyaTUyaU0wMVFZcFhTdUlYSEtYYWtOR3FhVkFYUmpvNjVuRC9DbWsyaExhUHZKSFc5dXZGM1RRbm92MzloYlIzbXVJVzF0bVcxU2hkS3l0blQzS0JaM3pySTJpWjZwNUlFbzhBeStpNFhQYjIwWE9HdU1QMnBKbWlhblVoLzMvSGFoQm1IdmZiVzlUb3h2cjhKNlVCUVhDZUoxaXVLVVppejZobzNmVDJ6VG5yNmE3S3BHNmFtcGJlQlJFSzBJKzl0OHR1SmwzV1VXWkJYbWdhc1U3ak5yS2ZuTXcrK1BEcmxDbXFGYWU0Rm1FS1ZtVCs2TjVMQUx0Rk1zMGIxWVFKMGMweUI0UDhIQkJLNlBGNFRTL1ZrSjgwZWF6NzgraDB6NFZQeHZGMksxeEdNcDR3WXRUdDY3MGtVdFVMcjMzam9LanB4V1V3cTN6K0ZjT3ZWWVNTdE01RUQvb3JuYTBSMDdJL21UbldsaDZQMHR0RkN2c2FWMjBKVWVNRDMzeHl0Y3QrdGJWaWpTWWZ5TUFBU29ZTzYzTTNZY1NPRHgxMmtxOWtpVjY3a053Z1l2dW9GZzgydUF0bUNNVFhCNDIxcDlOaDZGYjQvR0luaVh0R0hLc2ZyRlFDajlpdkpveEZERkdPejBRNk1hZjhBNTRqVlpwME1zSktNM0l4VUxCVHJIcGdtT2JLWnc1R3Q2U1Y0MlI5RUdTZFMrTzRlYTY5OFJFMFppYXN3R1JBV1I0d1IveldYc3c3UTFXUFgvRmg2MEVERHFtYlQ4VmVWQkhFQUdzNzZSUlQyNE42b09RcG0zaExkc29iNU4xTTBJa0lYRDZGbGhhREE5aUMrN1dORE9JQnBrL0tSRHBKeDR0Tjc4VVFrTW9lc1owczBuaTdKR1I4eWozY2poWDZreWllMEN4VWtLSUE5U2FLd3cxWUV6ODNvUG1zRk5ka29DQlRkK0VEc05jem02UmI5bi9FRXF1MTBYWGY3Z1NSNzZaemVEUlNWWHdzUERmOUtveDZVVjhFWEpMc3lZRTdCSWw0R3pZcmkzVnN4clU4UER2U3UyWHVWVGVUMXNCSHNpSmJzTjZwSEIyM0hvNFRLSnJOMkxRV21nMGFLeDdZdzc0VjZodHVEbTJ5WHJDWllUL24zcmRYU2xQalJrdW42b2hYM0l3Y3NIRHpIaStQdHdKaXZabzl6R0NaUktDZFdiMHRtaWt2WDZmZFhLMDB6WHlUazRVaGRlRkJ1YUxkU3pwbzUrMGN6WEZrVjZtV3l5UWhXOWdMbTVjUWs1RjdzZldHSVc3N3FvZ3VrMzFUZ3o2c29JbCtCSjVEMnhmNmwrYmtIWERUL3lLOGZPYmhMT1dPSHpyTHE2dXlCTXByMGZsYW5sRkxuRTZ5R3lyUGR5UVZLcjdRcmJZRE42US9YMFhZMFgzUEZQeHZrWHRxSnFIS05LT01nejZReUNoMHlDdk9NdHlpVDRXZUhhSG4vaHozNjJrM1I3dFlIaFZaeTlpTVoyMTVaOXdvTjQxNXYyOEJwVjZORVJteEpRVyswYmFRZXVXbmVybm5wbkJET3JETUpMYVVLY3dFbytPNFR0ckI0MmJxelNHdWNaQnU2OVhka1JPRFFZVnQrOERWNDJpMVA5WjZpMVR4R25xcWFmRlFzaWhKeHNRN0Frd3d1dDkwREtneDgrUDNoV0Y4NlYzYncxRFlaSk00M2xxNkZIbE5ldWNCbkFhR25jbHV3Smc0UVNpYmdNeFRlTGl4SElsNS9VaEFXdzZ0TEZPSWpKZjUzSTRrdXl4NmsrK2p5bDdmc3RTWm1MZWxySVJIZ243RmtpRjZ3YjdERnBNQVBlN2lxTzRzcis3elRsb1R0SzY0K0xqN21jMHpsZjlRZGJTZ0M0V1E2aDhtVnNmVXoyb3AzdmlQYmphZ0pSbVJDNCt6UGRZeEhwSUloWGdtdnpTR3RUU0JXbEZxdWZucTVXbklIdVpXTUY2aDlIWjZVbXRmMnhHT0xiVCtKOFBWSXhTbHNDVm9JVUhnZ1EvOExsdkgxY0d4SkZHc1FmaXV1Vit4VzM0U2xRcFloWXdmckhWdWdqMHdtQjFnSlVPVmdPb1FYNEQxNlBRWlpLc01CekNoR2JYWFlDTW9GeVNIU1loRzA2UzJaaU5IcTBSVFlBN1ZSU0U3aWtyYjQwdUFlNjRNNmlsL2Y0aWdXQXVnaHV6aGxuY2JPbHNvK29ER1Vub3lSOCtlNEtPZFlqY1c0VkV2VXR0S0h2TDhtWmdzWTFqZGdpNjZncmFzamE1aE51TEpDb2ZScHlXUDB5cTV2enlOY1lVTWNCeW85OVc2aWlHa3MxdUJWTWRlK0NHVVVabUNPVm4xdzhhMnBRcnBjWkJWNTEzNFVhVDhyazU0K040M2pQeEU0blpOT3dwRlc3NVZkUXZCcnFFZUd3amMxNTdsNmtXQkNQWTB1L3M4c1pDZWJJT0UzOUQzemFQUlV5SlFweXJNMGNZcUM1bC9EQWdQV3RiYmovbElxQVJoMXhiZXZWWlhjZ2JTNGsrVk1rUTJQN01RWUVpek9XTmFDYWpBanB6M1ZGUEJTUllBVzc1UVRlOE4vRzR3YmpwQjltcG5HZmpiTlNGdGxvbUxmQWp4RzQ4S1IzdlVpOVMvbXdiR3dyR1cxVE8zNkJHRk5rMW5DbHhMTk54b0V3bTBnR2tNeWdmeWkrU3hCV1NFZkVjb3ZKcm5yaWJ6d3QwcjNibERUWXVFdU9xaE5yZmZCdHhyMVhMSUVxcW1CaDVITy9WMlRWYlljUUU0TVpCNkRPUFlibm5ibWl5eEdMcFV3TGRYRE5JNHVUYVpubllUNXR4VHNDc1EyVVo0clYzNEY4RE9UUk9aRVFMeHM0MHlGMXczSUsyNlpoT29JNGtnVUJSc3pWQ2c2NTZRTXZ0T0lVdysxeU1wYWM0VmpCTFBxb0FnQXNiOUdrR1oyRDZhRUkxRWRBZ010TU05dkVDeXV6RHJnTlNFeUdBcS9wbEZXWFIxbGdGVkdFcGZRZkU5WWNIK0pWRTFwRnNjVFNBSE1LL0ZOSDFHZnhPbkJDZ21MNE5TSERaa3JFbWc0eG41MXB3TzZWSkUzWkNCb293MXJBZHliN0ZjdS9Dd3U1dkF6SnBEZXBWcUlacHloTjl0eXJ3cHNzL05UYjhaNkp2V0NJNmQ1UnZuMlBJV1dOMkFmb3BWTXJDeWRGbjZUUHdaZ2ZWUytQQzNRY2dYSTVWeUlRUEpEaE5QQVhsWWR5YzFIY28vTU1rT0R5ZTVacUdlbll3c091RDZoMVF1NWtvOU9LU1RKK3FOOEgvaE56S0NCVUc3RFFwMVdCWng1bkppTmU4bWdKZDNiblhYak5qcDEvenBKNTZVbFlvRXdSTzdENjU1S283OXdDYlVHWlBacWdZcU8xK2lkSEN3ZVgrNjVtVkYrNE5uRzc0NjVIQXcwcWFjZjU0dUJHa2tZcEpHRTI3WHhMVE8vcHBNVFU0ZnFvUUdUTVZLcFkxbGtucmhmREFTdUxNS2ppTjA1RTE0bVhvOCtlZHBVeDlPUUh5Ni9ycUxmK0Y5WGlRWEFHMjJ2cnBsM0k0b1M0UmQwckd2WGxuWmJTODltellMeUtITXZweGRpMFFpUm5aaHhOV0lPbUxDVk9sbU5jbGY3eEhnbmd5cVV6eXI0dCt6cmJEQ2NmS3Q5bWY5VVdVOE5pVHN4MTFtbG5OS0ZscWlIa3BIZEJnR3BTQ0RsZFdHVHNuTzBvWVNvZ1NteTIvOXNzVlorR0lUbDF1aHR3MGFvV1RHMHo4SkVSZ2JRRHU0WnNWNkRDTXBJb1k1YXJPUEMvdlRrVjlDUUxBUEhlVWNvYUdNcHF1dnU5NkRUZ2ZlYmFiN3RNbFN1WjFucXdCRy8xcGp4NkthSnVWUDAvbUVsRmt6eDdxQ3lTaEpGRVZHMUZvWm9nd0E4cmgvM1hkd0w1VXplS3VqYmRmNDJ4MFI2bzRSOUlZU3pnUjh1bk9xWWhiK1UzK2MyUG5xUG8rSVBVNDNwelZNOEgzOHZUaWxDVVpycUtBZ3NVMTR2ekp2ZWlKalBWREI1MHFub2ZnVjVCNUtuQXV5MjRhVW1UV0xqaVlibFVobHdvT0RvR1NTOUljTlcyYno1d21wQUF1K3ZWa0NSMFUxaHhuYjVRRHNSZTM5cVpaZVp0VjZRdEE0NVVUTk1nZE5hckRQajlLYjNkdEd4Um1kc1VzZlc4ZFJwdkRld1hnRkZnU052bUQ0RkU4S0lpMVFndnhSYUJMNVlRcHNtSXhTNXNadE91VE4yYkxsdWZ4ODFqQ0Q0SlhjNGpJVEozaDZYaEludnhQUy92bkM0NGlrdjVMVzVKKzd3T3l5bHVCZGwxQ013N1VVMG9sWXhnbUkzVEpwWUpidVA4dmxWdktmS2dZaGtIRVVxaDE4Zlp1N0thRHFxWTBuLzJCeTJjUTBtQ0cwV3BKaVFwYmozVkNHTlhZdUo0QVBMbHVJYXFmbTJLOGg3YkNDWE1FamhWV25yQmNaWXFVRUtYUXBYYmlsd0JZK01Ha1FnQVQyeTJWUjNtSVVtT2loVUxwckY0T2o0NFIxUEhLekxTcGdqL0w2aFV4bW1kYlJ6M3lyNDY0aXZhRjRBOTJKczZEWEhCZk9GR1JPbzZPcHlsVi82ajd5VVRmVWlBbjBCdXhHbTR2bnQycC9zYk5iTjBZQXl5YjMxTzFISFcyOWEzNWhVVWpCWSs0bEpwWnIwVk5PV0pLYkx2QnMySzJiSVZKVFMyL3JKdk83akhCbEQ0TFNmSWo5R25yaGxFbURqcFRGT2Zvdzk2WWV3aDYwc2FmOHdpeTBvY0hMYy92QWNSUzM4dWJqK08yN09tNzVBMmRRKy9uaU9JTkhjQmhaUG1ZSXAxdk0rQWx1U1RVc3RFWUNXcHRIZWdpTk1lQ0dJR1hERmdlZVViMXovcGFHYU8zWkdzMnlzL3RCL3FPNmxNM25zenNDOGFjRzB2N2NLbStGZDNiYkNhUVB4eVcxZFJEZHNKY0UxSldmbkM5OUxaRUNGYnhVbTg5ZmJaMCsvU09ObXhjSXRta2kyL0VJMjd1ZXU5S2l3cE5kR3pQZjZic2pzak9Fc2FjeE9BVUZCdjd5ZHMyN1JVYmJpeGdkQWI4L2FQZVhyK1lKWlEyaFNDUk0yVGkzcmw2a2VRVjFtUlM5WlhyakVpTHB4aWc2bDdvN0hlTlU2cEVDU0FKdDcyOVh6Zmx4ZlBBZ2Rlb0NoSzdvbW15eUdNUTRqZVVZRndzYmcvQkhaY2FLUEZGV29DZkp6eTRVZXV6TCszb2lJcUVXaFVkZ3RGM1JTS1pMVDI2K2RKVDBQMnp2RXhDbzQ3MU91bUhqWXdnV3lpUll3R3NmQ0ZxbE5WU1RIaHQ1NFEzNjUwYWFNb0l0d1NHWlpTOFJwRUVybmFiOXN1bnZlRFJreWdST2toMWIxdWt4ekdkY1Q4OFdVUTZ2NnRycmc2WXBmcFJZSHVNK2tlV3QzNnRMQXJadGdBZkpSNzFxVVpIWjVISTFENHBURktUdlhlNmlWb1Q4SFI0YVhhWE92bEN1YXAxQ3N1NkZrNXI2bm5iYkVaUXlXYUZoeEVISFF0QnJXUEhTcjZVQWE1SzUzM1FLa1hDMlNmbnNnZUUzM2V6Vmp2T28wM2daYkRMR2ZkeGxldUh2RlRwV0V3dWpDMHI1d1dpYlgzZUZWOHIxS0NMRG45eU5QRmU0ZWkvQVNNUjJ4TG5JbUkxSzhRRUcxR2RNc2RyZm9UU3plZFJlOGIxTWpSN1Vzc1BSQXFnTG5OS3VpcW5FUG5kVm9FTGwwaGVqVmtLUE9xYUlseEFleFZrOWMvU0huQTFtQTVXbnJxUFBvTFAzdng3QUprYlhyS3N1UmZCeW1tZ0NFZ0VsejgxRU9mRTViMnU3ek9Hdk5sakN6YytBWFJ4Q1Yzc0dTU0dpb0VTeEM1UExaazN0T2F5Z0ZJaUh4MkU5TnpVbVdtSlR6VWIwQ20wUkk1dW9hVzlOUWJhNTkwdWdoNTFQenBydmNoMGRXQ1lJcTBBT3Q0WHQ0ZkRJektmRkdzQUFxeEtyMUY4OEhuWWc4M0s2bEZ0WjBZaEdaR3lXNnRYdUluWmlOcTYycWV0SW9mdWU4Z0JSdXZQdnRDYkFrQWFpbkJ2VTZkaUtiTm9DeHNzTUcwWEJtNXgvdGpJd1RGWkNNayttcmZUc3NDbXk5emV3MHlicDhTNWFkalh4d3NDNzdOU1VHUHVoVjJ5VXJFRVlyZUYyMHJTVjFwVUNnVmE0Wkp0bE5MQm1BeEJvWVNBejh4UzJXaDRZZDUxVUFOWGQ0SEJOdjJ3Nk1ZTkFnMzlWSUJBRTNudzN3dTgrTStDOXR0YVBEUFgwT2lBSFg4cEhwbEpIY0g1ZzFFa3FTbUx4NStCM3BQanVpY1JBcGRiZHVZV0tVbnNjV1NWRVNNeHNpVmNVRlYvQTRiRXFkVituNnEzWUQ5anFLTkxFc0I2bHI4VCtWUU94UW9pbEUzRVN4ZWpVWkFQa296QlpxWFkyRWN3aEVVc2dTYjVpSzVQUEF3YjlPOC9HRm5xbGN2MnU4emFDN1J6SmhqeTJQcG94TGtFVURMNU1XSUtBaDRYeVpKb1gwT2kzd3RxQms0NVRiZWJvT2NlT1VHM3k4R1JoNGQ5TDZoSGdjWTZRWjV6ZWxDVlRmNnlOUEplYTBOT0xvY29yeENUcEtUNEJlcDVGUTlTS0Q1RG12NDZsNk5qelk2OW1XZTNBWm1NUm5iam9pajQwZkFXZkViNUFHakdqYnpzRm9iNFNWNm1rMGpOQ2FyWGd4M0dSQnY5cTZHR3V4emVrZ2twZUtIclJ2Q3hiNkNiRi9SRE4yM0luTFM3ZGRZQk1ZUHRjRjhkSGk2bHRkTWtnVHZUa1pNbStCUS9zVzVad0hhZUJLOXFjWGhjdXMwTk12RlVTZWhtcm1aK3JXSGkrTEFyVEtRM3JBTU44N2M3RzUvWmZVVmYwTFg1UnlmT1JmL0dFVnRLalVZbWZPRDY0U3ZSWTE1dDYyc1VCVi91UE90WUNHR0cxMk9ycjVwVkZTS3drak9SV3RXMndCRnVtL01HRlhwYkdmYjIzYUVIM1ZtRVNJL013ZDNheVR1WlhTc1lYc3JtalU3K2tPc29aL1AyT2hmZ0pHaDNQVVBnSXpYOVluYnVnSFNaeTYxMXh2MEVYclVUVG5nZkNnUkVpaWpHSHVNL291WHVHQ3B5RFdmUmdqWUJwM25URUludGdXU0M2RWsrUVJySlNBclJzWmJDNXh1QkZXWitlSjQxc1c2azN2ZWxCQTQ5U3ZidkI2VkprRWZldzJITTBRVGt0N3JsQzhpcWdZSnU0eGFVNWJxMWRCL0xXRDJmRVVnbUFSZS9JNzdoUXFrSU1qOU1YNzRiL1MzSDlwSS85aWVsWnRSTGlrOVZEbXdwYnFyZklJQ1pFNnl3NTZaOGN5Nk9GcXdHTGMrTkhlOXZudE41OWVpai9SclZEU29QSy9zaWpESjRpSENpbkJ3clNDU3RyNjlxblgvdmNRaVFkNU04S25wQWE3dkJGVDgwcHAwcW1DaEZDN01mWEh1RFdjSHpwdzByMW0vQmlwSnBOeHlRd20va2h4aWh4TFJsY281ay9yYjJ4NkZ0YlJQclJoYS9TYUk4ZUtrNFdRZEszMDUrNlpOQ2docFh3bjh4YzM2dEN2MWMxQzIzaU9FSzVHRGpUVUE5bHNlRTBTQk04QXpmUW1EeGhqNSs1aEpNWUtiQUEyRmNUQ3pQTEsxWWFZRUJ0aGU5Vmd1UFZtOTlyajVqN0VXejJncGhZMmRBWWFyKy9HYk5uRkRxTUh3eGxpRW4wTW9UUEZSTjVnUjdkQjNZOEZKTThveGhqcmV6dDFuc2lCSFpYV0NRK3RrOEFnSUNBZ0lDQWdPSjdSQURCOU5FaGFPeGVTQm5aR2t1cnJuMm1ROVR6UVhUaWNqWWlXQno0R3NHMEUxWmMzMi9XRjMyL1JmNmZPays3dUY3N1B1RFAyYThiOXYxY1g3UHRVZCszVWI5dWlmN05iblA4UHJLNzdmcGw5UG5WL3dmWnEzMmZhWi90MkgzN2ZxM3YyZmE4Nzl1dUg3YnEvWnFHNGYyL1VFL3M5L3pYenBQMi9ZTGZzK3dQL1QxTDM2dnBsZjAvcnFkK3JTTDlWdGZwNk5EYlhjZVh0SENUWlI3VWZnOXBMU3dXc3E4WVBLY2xnd0JRdHhSMHYvNUROY0RYalA5S1lLV2MrdVNKYWNNOTlCUDhObllkVENnSDU0U01DSTVJM0ZjSUtCemdVV3pWZXZMcVBHTzFEMWFseXo0VStGcElaVnFDLzIrQzY5QlBERGhCdFpvbVNrZnBXZXdyVFFZSmYwNlEwNStsQ0UzWWFUMTlLQnBadzB5cHN2SHBOL21HNW1PblRyTzBaM2J0SDRaQzB1R05rZVRLQTA1RHl0WTJSb1ZxVm9xYmZIcEU5b2RHYUJsWEw1dmNMeWlIUlpNNFNGZVRhN3hZcm1BVllhZkVVd2Vtc2JxbWx0bnN0Q0JyQ0gwZ3BvWGRjN3BHcjNtNFVkc2ZlNzJYeis2MS91dmZFVGxIVEVvR2JzY2J4TktPdmsvTUowV1ArSFZBNDdGM0JVL0tVWHo4eWJJSDh2MHYvM1c3a1NTaWRBdC94Wm1IU0ZXS1JRNWpwT2R4SmVIVDZzVVI4R1k0c3dZUzVENDEvTjZhaXM0aG9ITkxsN2VETHJFenMweHgwdGpaL3dmTHZkazBZR21BSXpQOFdMNlpFOXQvanRKeWxVVGROVksvbUFIdE5RN09xTEsxNXI1NXhPV1pFYWwrOXFJTzZaSDBRSHNQWXdBd2JwaHozUzBoTDU4L2E0TnZ6Wmk2OFBxdmNlNFFETWFtdmQwc2R2WFNXMVpZOUpMN3ZzaGkzWW1SWEdKais2dnNGMGRicWcrTXFsTEhPRmU4TXNzc0sxMkpqWkVIaytaalBUekFnWGY0UUs0cUY3T044T2xIRGw3eXpFVzdMc1BhRWVnYmZkM0NadEJnbHVQN053YXROQWs1eFM5NnJObFlRQzlYd1dkRmQ5K1hBdk9RUFVzQnBPanFTanpINDR6RjFUWkovdTdIL0Z3OHdiTWo1ZWdoN2dXckFoTWJPN0l2L1BDRjJYN3pnWjJxOVVsZldMMW81cTdJdVVHR2VrbHd6WTM5bDdqUXhmRUlSem9KcnVkaDhlVVpaaDR4TURZdmt5RnRlVUZjZkhibkNNZExSRFdOQVB4aXBqS0tqZ21TZWFmL1pOMFFDaXFoVFBKRSt4UVB1aDIwcmJzR2xJYWUrak9RY1p2dXlvc2wxajduRXNJVXhaQnRHZU9QM0pqb3k0NVFEWnFhRG8vK2VHeWt5MU1lZE1tUnNpZEkydE5xWHAwZVFpbU5aM1hpV2ZUSk9XTW9WRmJScWhSbTJwVUdKcUQ4UjJObElPTml6MExsdVBhWW5lTWc3S1VUVkFFVXdDV1psck5hcC9ZSlRlUUFsT2dtalpOTlFLSC9TckE0ODY1M1d1SURGbEpvVkZtZXRRSDFOMTBmM2pKSkR5VzN6d2hoNHUrSHNnd2thdDdRWm5EVGxMTFM1eHZYR0ZpcTlidys3c1ZDbkl0OGk3UThrUy9WWm1jRmRIem9WZFo0Qmw2S1pObUV5UGNNMlF0d2RLUDNESmpBUGhGZTNJODBjZTBtM2Q2aVBXbUQ0VEJjUDI1bk9VcEJOTHRuNmcyTndxM2tyd0RIRnc4KzU5SEE5Yk93cStrQm9UbjZORCtoYjE3NThidDBUbVZyMlhSYmppUFJTaHZnbG9RT3owMk1haSswYUl3VXZJOThvWHVIRGRpVlZCQ1g4OXp0ZjRabEduWUJMVUU4SlZHUmV3SXdNbVpjTGZTQlZPV1BzV0ZiQzZ6SGFBNUFHSXdrckpWclpGODJjT0NDYTluUjhvc0hUUU16NjdRcVVJMVZNVnJZZ1VoTHZUOWErWVVQR1ZEaWQrMjVpaU9SUS9CdUVpY2VGWUhzSTVqSEIxbzhnWDdGd0VZaXluRXZ2ZFZUcVVlbUIyQ3FjS1lIU3FPbUwvRzhjVU1mdHBmNTNJWk5tUUZuSld6aWdiK3doaThjTXFoSVVxWHZ1SHY0dEJkb1h4ZW9MbWpsUHVWMmdhdHBkdENTNkFIVSs4S1VlT2dKbXdaRlhoT1RsTzEyNzQ0WGpwZ0h0TnV4ZlNjNWtuUHJBb3NuVGY3ZFhXcTdTVDFtRXVkRXJ1TFdhQkN0aFZNV1g0c3RUOFRaVlNHMSswZ1lUaHp4VjY0WTBIMG9ibng0TkVtY3pxenJHSFpISUw0V0lIL1c4emlBdmxkaE91SHlHUHBVcG1VUFZndG9ZcDZUR0J6d0ZOQ2ZNLzY4L2tuR2xQZWNtcmpMcXpZNTlJNE5lVytpdXdPR1RQZ3l6cTBya0hHcktmeFFTQ1M5eUl1eld5dUhCM0E2dW85U3VvZXNqWTcwZlJabXNZZFBPVHk4RWJPUVJCRXRlTEJXZktJeHBGekFjaGs3QzJSb2NGbVRNTDVidHUxVmhoN0lsS0pka2FmTE00R2IzY1E2QnpCVkpaRW12dyt5bm1pZGkxV2RNaTdVS3RkZHFZTVJGalA2TGhrZUJPaDZtUWg1aS82dWFWYjBqWmIzRmRJSU53MEJIKzZhdHdrVDIvT1NybXRSREV3UVFmS1VoMjVzaEpEUFdCSVdxV0JiKzR0MG5Mb2FYRUN3VUFhL2xSelhyWUE4N1BQTWNYdy9paUVLUkszWW9DMUJvYkRENUZVTTQybUlTVGJCUnZqK1dTQ3ZaaldYNVpvTGRIMDB1TFQ1QkY0bFVEakRYZ3dMR2xTSnM2NFR0OXBQWnJpRS9YSDNuUUR5T2pWNjEyNmFDV1ZEQUR1dDh6UjVYR0VMMXVhRnNxUENnajk4c05hbFpkSWxFbGIrQnpwbit2YlNXWS9KdnFxbWIxZTljaWhOZFpmMDlqS3h3ZmVmSm1saEhJa25oYWd0ZTAyMjlrY0ltcXBoMFZMTFE1akNGR1JiTTNvT3RYR1ZSV21aQzBQamtJY1NESTJ4NHdJOTZ4SktwUHU3NHpDcEZmWFJsNzZTNjBoU0ZXWGF1NkJPNkxWTTcyODhEa0JWVFE0dzB0UWo0Y0ptcUYybnN0ZGpmeURJaGE4eENvOGdHWDBYTWVMT1d6Y01OUDQ0TmJKbkFIT3FYMWpOeGNhRG1UMnFiZ0Rrck1JQTFpNlJmN2JKMGFEVTgxempZeWdEOGVaQnlCaGhHcHBPS01oc3pHaURrRTdabFdyWHpFTGV2UTZTMHlCcTVaWEQ1SFNyWGI2OWQ5TkEvM3kvQlUvVWRsUWxxTzBoM256Qzc5d1UzNFJSWnR6NUhtTGhnM2ZiREdpMnVJQnlDMmdyTUtWeHFNaHRsS3NqdWhuM2g4WHQ2dlliei9lb1B5eFVNTzM4ancwOEVDS3JWVkN5S21lZklFdVQxbzlFMngvdjFBd2Vvb2lVKzZ4dHROeHozbHFaUHBrM1BmRnlEMVR3RCs1aFZycE9wWUFrK3NUbkU3bG9uMjJoNmo1bTFoK0tNNUsxNFhpMm1WaCtlMGdvWFpEeTBoV0ZPZnh2OTIrS09oZEF1b210L3VBNkJpR1daVFAwY2RjUE5WREhyQWFkVmNteTdlYlo1NWZLOUhCWFRZOWlDWWVodVI0SUhmSko5bTU3TTIzdkJxRVI0dGNxZUhCL1UvUUFUVUs1T3JmY29oM01LZ2R4aTlTVkJWMjd4b295RzFJMFQzN3pzUVlFVm9PRTZ5KzBlcEQ1QUNNNHhTblNDZlVRc3JWRiswaGN2Z05EYmRaSld3OVVXVkFrS01XOGtiT2xEYjU2Snkxam14eGF3OSs2Q2wzaWRHNjJtUnJsUmZ6NlozRlBYSkNyRlhqYy9iMHdvMXBQMitjbDVTWGpnWWxWOFRuUTVFTVNKelgzSFdhRnF0bmpBM3h0cU5CZnRtMXlSbStQWjVFbHFVZ1g2Nys0djI4ZXIzMGRrWjBsTkVxWHBwL2FjM0ZkQUNDZUVSMG9LdmhRSXdyQU11UTIyZ296MS9ORHFPQi9semxUSlRHSWN0TUNlR3hxNkloMTdMemZJZ25CNjRuWVBwbVltTUVpamFwSlFvcy8zK0VBL1J4NUREeG55clB0UXY2d2FRWkw3Q0hvQkFOanN2TkNraTRHd0tEZkNHclZNcDJBdmFqUFg1Qmp5M0dITHIyLzJCMkRCODJjMXczTXgrUU04akdlYi90WnJncjM1TklXZnBXbG9zSkFLOHN6VjVHb3JuRjdPWXJFTGVPeGJuL3FwejgraWVoOFhPNFRmcWMzdDVGczhaZ05oMjdUUCtLNVRQOGNFaksxVHBwS2E2Q091NCtCQ1NYVlJXd0dTVDliV2RlRG1CdGNyVjdlSFVwdnhWUXp1NzdUemVUajRMd2toOElJRDFoamE1Z0drUmhnb2NUTVE2MllsYW9KS0srN25xYVpubWIza1pVTjBMb1gvUXFmRTkyaWZBWUtRbzkvd1AzSHh3VFN6dWNxMTIzSSthSFpYZ280UlljdlVvcW5xOUVsMzRNdTh2M3FmejdlbXVxVkNqL1Z2dy9QSWY5QlFLNEtRaVd6WlUwbENKOTNLUXZvVEpHak43M0hFaXNkVTJvOXVJTFl4QlEva3pCdEM1TVJudUFrNkZwR1F0WllyTUtVWXJKZ3ljc0RrTVg3SlNhVFdvbmFaRE1CenRFWElueC9hSXZNaGVVZU5WOE5wdUl5ZkVjYmxvemZSTjRST0pCcmFLbk05WEljeWZVN1BGeXJiTTdwNXFnRHBtNUtyRG1XQS83NjNYK1Q5UDR4Qk9jQi9hTW1OdmdpM3ZxOFJwU0Z4c1hybXpUUEZQNjdId3dEd1FWRWF0Z3dwNVRRb0s4WkhuUEM3OVhhWW9nc0QzVzlraW1aOVdVcFBkTzhDV01zNDNpZ1ZZNk1rcTRGcmt3NXBsWmh0NFF0cjBoNlNoMll6eUVIemZqMFVZZEd0dkNxdndDOThsUVNnSkF1dGt4a0RVZ05MaTJ0dGhiaGxoUk1TazNyM2NCekZnNGFKV1Ztbm5lSmhVV1V0UmF0cWJCL0dQbnZiR2drS1JzNHpZL09Pd3ZNWitYME5nc05tckpPV2xlZ29neUYzM2NIUWNaZnpNb2VldHFWaTJBZ1VnUFlUeTZkMGFWYXE5a013V3NPd3hxeks4QWVPVjJWNGhOWWF2OGNIS3VPVW4rbUlrakpXekNjM1A5d3AzekFCbmF3WjhKK1Rob1FCV2dOU2tsK25UQ2pRVHdTcVlCL0svRzJLS0xhY05ZSlFVTXZhWkREUjJyM05oT1l6cktZYVkybEdVZi9PVjJidFdQbERMYnhORnlUYmE5Z0VCc1M0d3ZNdzh3cWxZK0ViM082VUFNbG0zR1ZjdUhjN3drMjgvd0lvdW1hR0JpWjcvR3hSOUJ4Z2ZjQnhjbXlKR3kyaXRralJMSnh6NHdOeURIczVQMUFpSWRFSHJ6ZWZ5Y1Nqc1QzVUxDS1N6M3M5d2RzT05hNlVvRmZtNHpYajZrdCtORmFoNU1ocXM0VGwxY09vNFhMdi93UFkxbUIva21XYThjODI4UVgrbFpEODNHcis0S2lZVWFiaE5KaE9UeHRnNXRwVllxdHQzQkZxeEF6Wkd1Qjh1REdzNTkya25ydjN0UG81RzNkTjJuS1hETTM5TllQcXMrVHQrUGNqM3N1aGU4anl3b3dVUDh0M0pLYUZpYjZnNUxaclg5UGx1ZGgzZUlYVlAzQzlIeVNGRjhTZmJOL25KSk1Hd0dCNnlFaUVkalJUd2E5MC9oUCs1TGtuRGYzRW1Tejh1ZUh0bXc3L2VpZW45VitCTllHZFNjZWlsVU1rVzRRaVZrNUc1TGhZd2xEVHpKZkdtWk16cFQvRXRUWXZiUU1KSTU5ZTMzSU5xcDhISUdZMkFrdWZFQUJHK2k4V3BvSVJmOGFYMG9FVTMrUWpYQjZCRVZEMHcvcWNySzkwMHQxQmxEbldGWFprU0pERXFDYjIrSFZRZGxoZkh5VUg4RTBXNVBGdnUxM1NQenFLSHY2R2d2S1ZLS1F6b0ZJVENLZUdFa1RzbkFIa3FKaEx2QUk5UHFVdXdkeS96eGw0L25TVTloY2YxM2k4OHkvK05rZXh0cVc5WmR0ZHBNbmZVQy9rNnhscUt5em81MC8rQzYyNXNqUXhyL2RBSS93YzFURzF6SkNHd25WMjBkNU9FVytyRkJiQlRndFROZWdGOXlCTUZwOFdGaFVCd0NLZ2Q3NHJDWUVuUndUTkYrY1dvWW5qdUpoQ0Q5U1d6Rlc5UngzRlhtU0dWUlNUQkdBSEZKZTAyd1JMQzRNL1hRUWlzWmFodjFxWWt2NHlUK3o3Q0hWSzJwNU96SnhsbnRQNnJmTkFqcDZtNHNGWkR3dzBXNTdGSUxLL3hucVIra0t1S1lPSXNWNktuSG5mNjdiUVFrSFR1THpCYzFOOUlIRXd0UXFBY1hGN3BOVGIzUTNXMk53YkZhVEttSmNmV1BvZlEvbHZ0VXYzbjM5cVdWbEtFZExyd1luc1pUdW4xT3pEUzFTciswRXFDTTZrTklndDlla0dOMWtEVEhQL1pBRjZYVmJqd2FRdzFTcnF5U0ExK1ppRExnYVRva0JuM0ovbnVKSXJFbjhSKzFVWjF3YXUzaGcybVBuWUV1cHd5Y1R2N2VqSVk4Y2ZVTmljaXh2cWpwUlNBVlR5RXNNZ0xRWHczb1JuOVIvZ1NHcENQTnMvR0ZBNlg5Zmw2Nk5PWHFtWEY1b0Rib3l1MTA3T1VMR3R2bCtyL205RC9TNytCOW13aVRLOEpVQ1V3WEttK2V5aTdpVUtKb3BMODFWMHRja09ocEQ2cjZxc1JoR3VRV2JzZzVKTFZ3WDZiU2xyUFlHcmRMN1ExS21mSEFYaXVuTjZZMkpUTSt2MERBMVJoaUw5Qm9jRVJoM0NnVEdZM2VWdmhmK0dONnN5emtkMDc2bGZEdTMyQld0dHpPVDkwRG9tTWVGR2JTUzJBNnV0K2t6dWdIc1VuSU5YSXdVZ095eFhjNHFKNEcwUnFWMWNjNlZ0ZXJTck15Z3gzTXBsT1FXbW5OUnduWG02TG1JRkZnZUVUVEhyNmE5NUpRWXREekdFdDVCVWxNdEx1bytNelNjcFhhUmNkWG0zTEVJRnJoeDlVTzd5SGtHUU1ZNXB0VUhDMU42WXJkRW54Z081Ykc4YWRXVnhsRDVYN0czaGNuKzBSWC9RRTZodW9YZ1BQaTFXT2xmcStvRnZtWjBwZ3QxM1lKb2FtNlF6ZXpyRTNmTk5yc3JyN0hHTUtSejlCRjg2ZHhkVEpDd1FUeVN4ZU83S0ZleDRLL2dzL2MwblEwNlp4di9SYjRkeGJZMXNQUUJqY2wrV29tZXdrSTFQSkFKYTl2YmhNV0QybUZ5dnRGUG5XZ2podUh5ZXBxcS9xNFZZV09hek0vQnl3amRQNEZUYW13UHR2VXpxT1AzOHNtVHF3NW1ubVovTUt4T25LMDhEQUJWd3lyRFNRUDM0bExEZmdmMjQvb0JOM3NnNjBEMVVBb0E2LzFIMytUOGlxOW4rUjRaQmNzVlhmcWJCai8xUW43bjdqdUVtSjF3UEQ4V0lZOVllUFRTdVNGL0dBZVhuM0dGa2V0Y2VOblBBdXE3L0h5dzlGZ2lvMndzS1hmRXRaRzRxSVh3bDFhNVBIVFhMZUkyendiNExMSlJuMU9mZjNiSXdFRU1XSkhFQmdnaVJLQTV6eDBTa3I1aElWU2h4L2doQmprVkMzbnpXcHNwZURpbVBHWE1OZWl2SGI4SkM3MlhLOUxRNDU4VUFCdGp2TTJmeHppUVp4SFZvLytFZ1JVM1g3RWlGazhMdS9Ud0JrTVo3em1Sb1N3ay9tV2dacGVueis0UlFRS2NoZ2V6QjdhbnN4QVZxaFJyS0VSQ3NFQm96aXEvOWpzRFlkY2VxcUxvMzNKczdBcUtMb0lJR2xXWWkyNThpcTI0VThCZjkrSGVlbGc1RDNSM1pwc09UaTBKZnlpcU53ZVljdGZTdEU0Yzk1emhkdGJNZ2VtcVdLOG94WVZHcU5QRW5aRHpFQmVSUU9WZzlGRjJJTWpZVjVLZWYzaGNDUFVnclY1L0Z0MnVWcVo0U3ZnazBsSWY5ZTdVcFA0QTg1K2NnQlByUHBKUEpWK3YwWHZ3SWhEejJEWmpnbG1xOGZWNkwzWXdpUjBRbXBiQlRMZVZjSVdEUEJzenNUa3kxcy81cW5tbnl2N3NhNzV4cVhOcE95dEtSc2hJY2g0RkpOeUx1S1h5b09lWlRMemdzZE0wc2pnUnVETyt3bmMrMWQ5U2JYc3lsZWZUcithOXkyTlFmdUR2Y003cmJDRXBSRnQ3UGVhYk1xRGxVcU44YVo2OGJ4dHJnaXdzaERIMWFOaUlXQ0VSbHpYVjNXNXpkeEdvWDVTNm15ZEpQNmRLMjE4TkZlc1lVc3lXVkNKMW8wY2pjNDFLM2V3dFFaQ080Q2Rxd1lBSFpnUmtvMFdha3ljNDhNUlY4N0Ivc2ptOU5HQ0h2UEVHUTBRUDJGMXRoY2JrOS9raFNmdEljQzZoNnErTEVyai9hanYvSW5kblpoMm5EbzY4bTcvbkUrSW54Ky9VVWxMY1ptQkFBYjk0SjJvNmhQa1B6NXZmT2RObm5jM3RoSDhnMVFOUE4xZlJXb2E5cWs3RmdjMEEwcEM5ZEJZQjBuNzFZUkw4b2pUL0NUODNXWStwc1c3RVZmQUNyRVlHOVhqWnpJdS8rRXRFQlI0L1llZHpXT0FpNXcrMDJaS0Vhd042WURwM0RFRWlYNTluVWFONllTNEcwbEpVYW8rOEw3N0xYbHdtaGw0Q2oxREkxWFlzWDJyRGlXdjR1a1JZZnA5SXZ4QUdZbzBOMFRqUWNwZW5NeTZMaFdKaUJqSE5hdE5kVmxJUFQxVmFIb2hBQjRPQnRiVk95VHJreG1JdVpMdW1XUkdhQ29YYTFSOThlNkJLNzk1cld4QWFJQ3Iyb2hYdlVLVVJCWUJYL0dISjFFZS9wMEYxeXc1RTJqaWVCd3crL3hRTDBZMTdpUXBtK285QWNXMGlKRFQ5ZkxVRzVZUTltYnJlZU1vcFQ2ZzRUS1UvbEtpWE00M3J3aTRoL1hzblFJcmE2WWNaRTBaczA4WDBTaUx4YmhjNGs3NGhJOFk2MnJwNE4yODFrdCtneXAzMzRhL3RyS2hCQ1BmSTljUGViNDVRVWtDZDJyWEY3WVhQcE5UdkFvMVY2bjI4MXRPVjhkVVdmL0tSekZuN1Y5YzhISzh0Umk5YkJxSVhzZEJNUFloQmhnZk01TDJpWXM4YzFEK25PaFA2d3ljcWNwZGE5T1Q5U0NKVFhmOXEwZEVENWtwdkhKdHQxU3dxYVlUS3Y4MHdCeWxYVm4velFzQzNlZGJlcWxCVWFGZVV4aEpVbFhRbzUvTTNYUFdYdUYyenVORlZyWUhiOVcwUzBDR0YyM1h6QmRGYnNIb0pLWUNkNzE5ZVQrRWVKSERIUi9SQm1NRDBRZmphTkU3VlMvMnYzUXFNTWRrMnJyWVIyN3dWcmlJcnVpbXZHSzl4NjliVmE0T1dsR3o5aWlWMjNUQWsxd3lDZy9UT0d3RWFXcWM5T3F5OTVrUmFlM1M2ZkQ1S2R0b1VIYXp4UUtkTGI5WjErMldLRDhTNGR6Z1NiaytIR0d6ME5YNHFRUmJmTzNCcVVXdjVBTVpDVU5icVVkWk5pRFN5NzdNWUdaakJWWlZnNjQzNlN1dUpCVFk4anMzQ2ZlNDlUWkg1RWRORXhMUm1ST0pwU0liUCtJelJuckR0RWtoelJBMS82bk1IMnoyS0VQN3FUS1VibXAyRWZRSE5MbTNkeEhUK1JMTitLeDV6Qk5XckdpclJkclBtKzJUTEUxK0J2MU91bWcyc2ZwRzBpZ01oKzVmdjh1RG9pQ2U3eVZoRGRJOFVaVFhqVExZQ0RLcGRURjV1RlhIU25FTUl1aGREQk5ISjJueVpsMCtVdldtUi9YY2RZNC9oQ2JEbGtOMzhXd2IzZTVyTTBTN2s4NXh4a1c2WWNsa3UxUmQwdjVoanprUEdSbmt6WlZlbTRPM1Y0Um4yMVB3bW1VUUw1eVVQUSt6bnJLZlJieFBCb2pqbFlBRENsN2xxVEpqQlAvVWdaT2ZBZ3lHaU5wS05QOWxBWlVjckN2UE1rUGNhUXIxcHFCQlp0WXNreVZQNis2T3N3VjNtZDZjcDNOaFZuU0hFVldJc2tsRUVpeU1PWWcxcGp4NjE5ZGtlT1VZTHBoL003VUlvWEk3SVNYelFyRmRuTkVybWVyM2tDWU5OTUtFOUlMQk5yU1dkRXUyaEYvRHpFQWdveDJXSFE5MXkrSHMwbDFURU54bFNpVk9BTmZJRjdZWjcwRGVLOGtrNDZudElnc2RQK0JSMDdscUcveXFuLzJKdmpLNURhUm8rZk9nb3hjQmlxOWVmZ05DdXVnRGRubjJIR0k1NG9Gd1o1Q2NYN0h5SURncVdZQWNrL2dhRGNhVFZrNzhjU2k1dnRuaXlRc3NjcThFUVowZ3VIS1NLOFJQZFBTcjNuM3hHWXI5WDVYWjhwZkpkVFhOYlI3TFU3WThjYWRKMmVwSlFkRXZScStZc0d6ZmNnTVQrV0V3d2o5Mm1TY2tzbkY5MGE0UEUwZm5CT0puTHdYVWtvd1JIVHlESDA0UlpwVGxQcjhPenVLQk1UT0hldHNtdkJ2OVR5dmszelZITjlBZ0N5bHBaVmd3RW9lMmJEVzFxNk9DYU92T3lnSHVKU29uVTNxZmZidkxyK2V0SGlkMnNZOUZuVjFJUEJqTTRPSVYrNDNRdmk1TXY1d3dTL2VuNU4wQm5SNmlydG1tRm9zMXEvZ0x5TnB6T3ExT2JtOThGOUhGTXNkTjRQOW9ZTERhcE5YVkhWY1hwL3pWMXdSbGJSL1cxR3MwWWZOeTk2eUVzZnFLcFMyZ0tPN2Z2UVFoN24zUkRIQUx2Ukg3akJWeWQzbjJjMFRtbkZQeUtMSVRDc2JJVFZUT3FjM1FRTVl5cXVIYUpFUTBYanczTG45YWpjeGVSbk0wZUNvRGZFbGVxbFNIcGJnM1dDR1MvRUJNNGhOQ1lNVXFHVmJob2FiSVY4dGI2OUNwUVk4SUEyVHBKUzdlanRUZUZlSGRiZzJtZVF0bVBIb2FjT3k2VUxGbkp5T0cyR1c1VFQzL3V5NnpFVmJRbExMRmhSS3VtVWV5TDVVZXQwZXFTeTFnQTdDS2ZmVG8yNXJ6Mm1iQ2lyNzhHa3pTTERudkVIZTlaWTFhY3hWQjBHdWZpc3RVaXJRK1pEL2JJdFpLakw3Uit1OVJiMzNGQmlWTmpLR1B0ZlRsYnlacE1iUnB4Vmo2M0hIZnhVN1V2WTFGTjBQNFZOckVRWXZhVkhjUU9rZnpONmYwQy9rdjJabHh5NElJQjdIM3YzRkJVNlBBTGI5Wmh5Q1MxUVVaOHNzcUdlTFdzQWp6WVkxTHk4Wjd1dVJFUDNpcEk3M2JDdm5oS1ozNjVhQVFKaXJ2THBGRUhydUZYbkswQW02Z053ZUxmUWRaMFBmRFArNnJRUVQvSDJrc2RLMHQvcDR5TXVhd1FnZzM1bjNNRVBqWjlYaERJSlFER2dyb2lhb1IxY0svb3gvTm5OSk5WZmR4OG9Wc09uZ1VVMEUvWGlPZ1M3dGsyWnR2VVkyN1FDQkNUQVBkdS9JKzN1NTZIbVdZdFdINnhlMDdFK0YzS013ZVNJREVpM3hxcTByV1FqZkZQMkdVOTliNXk1eU5KWGpXMTNqbncwRURvY1NEQU5sT0RucnRad3oxL2pCVHBSN3NoRHU5VGVFcVhNSFR1bzRPQ3VIM2hPVkdmaE5Uc0UxUGVFQjcwVUwwZTJUUTNlN1RzdnpNZjUvRm11Q2VMdWo3aEJCS3FobXdnWklXV3c0aUpHTkVUem9IanJtL2xpWHJ6N3ozQ1NELzRZb3p3dFM3YjBjR1Y3em5SZjhDSGh2dDVQcGRsU3JIS2huMlJ5aTc4YTcrY1c2c1dlTUZFNDJzdDBkcW1teU5JVVAwQzdvRVNjWVNXelJoelcrbVpBWExmNmF2NERlYVdudkNkRVdHdkpPeGNITVMxcXdjdHFaVm82emxibDNYZWVyM01xRjMxTXlmSlFtV05IaGtVWmlZMU5kWDc5ZGlYWFoyMnArOU1CSFFFM09GT3JveGNMR1AxaTN2bEt6MGJLYmovZm5NTWkrMk5LYXJFaEkzQURQM0sxSUdNS3FuZHRCalVKT3dCWm1jK0dhU1g0YVV2ZWdDbE1VWElUV0JtT3hvUEFUMmhHTFVIbzRKWFBTZitJMm1LME5FbXhSUXhZdGJ4SXF1V0tnZ0FvVmVGcG9zbEFvMmxuNnZGSEliaDVOYi9SNmpRTVZXN1hTQ3VtSDNsU3BkcTh2ZXpVS0VTRHN4NE4xNFp0emxXSkY0aVRQeUxBZGw1RkpLT2o2Z3U0K24vZWxQQTdidXZPcU92anB3Wi8yd3VLNTFPVkk3RDliSTJvRCsxbUNycEhua3plUHV4NU5NT1RBNkxIY0FZM0F3MUdWbmJ2eWRoZUFaN3FuSjdSQm1pT1BIR2FKcGpPSlF6ajY2TEM2Mlc5a0ZSaWk0VnErN3BYYmpGSnZkUyswVjc5UGlGaTN3b1AyNTcwS2owL21tRVhQdVRxZzNVZUR3RWtiTVFJb21hYk9yT1FCVURnNHhBK0I4cjdtNzlUL2pPZG92ME53SDR6dy9iUE5PQlBESmpoWldFNHllb25xODdaVDgvaVA0N0NYVHVIUnQwWFY3Ym9QTlJ2ayt3NU45NG1aRXIvYlZEVVVpVy9yRDdGQ0xDYytnL3dzN016TEhuejhkS1I1M25pMEJOUWNGOCt3aWMySUlUY3VmZnJ0NnIvZTBSUFdXZm9RVkxjS1FZUU1VZ0taMHdMNmE3dlpVNHQ5TWNTU1BOc1h0RmpqYXl4c2I0a1NJNm5TM3A0Q1JHZzdVQnk0N3YxQml6NkI2TEh1UnhwdkNHVytpS2NiRGJ0dFowK29QdUpUZnFzR0lyRWRLdUR1aVZPOHNpYS9HZ1VCcGZsb2V0bW42b0F4dHdsQ09wZExUSG8veWM2WnE3dFJmT2RYcFlDbTdXU1p4MG8xU3ZvMlorSCt1TGFuWE9TUmIzbXJOckVoaUhJSWVPZ2pJdzdLL0lDUktwUHhYc2hFenBjWTd5b3Zaa2FVNW5FbEtSR1ViTEtOSUQ4Vk5jODdCLzJBemNxVE9uaHpXQ01HMXhWT0FyZEo3bGtKMkY4MVpWdzFidWlYcHY4TGdGUWxHVGZtTTJ2Q3Mrem1PRmhUbVNCMkVKNk1lZUU3Y1pjSjQrZ20vUkFtejB3QmZwL1UwTVFhdmZxZGNJSFQ0ZTJOMUd3MEFMa0lmaFlKSVA1YzlFeE5oL1pOYmtSR2hPTmFwdkJyOER2dGp3bHJNVmJ4V1JiNm5veHNrQU5WSkNvVlo5YmQzTjJsWkxXb05LZDhySU10NlB4K0phNllZOUVNeVloa245QnpVcHJvSzkyeHBnOTlzVXhoY2RuSnZzL2JYcEdacW50VTdkV0U4VElEUlZ2dWdOZi9MbUptUUxPTFFmTXZFYjFYcVBHWWR4N2NqcDBHRU0yWmlqSFVyTUdHdDlPOUVZb2pPYkE0UTVidkFoYnUwSS94Sk9LeVBJK3d4SkFqd3UyV2w3c0FCYXBBYVFZaW9yWEdYRjhORndWL2dpOUg5Tmx0aW9teFhJQTNpTkJsMmJZNDN2eG5MZDhmZHY4K0FCbXgyUWt2SEdPOVNZS3BhL3dUSUtrNVJ2dUptMXlzM3lzVThGUFZaZklLY3hIUzhwTDIwQ3RrVTUvcmlEMmYxT254QUQwczZiL2s0MHZibTdScm1ZRjRxb3gxdEpESURtMHFNbVoxREVUaEFRSUdiR3Z3YlhpdWo3aHo1TEpHMW1sUWlCajB3NXViZmlzUXFJK04rY2pZN09iQXJQSk9PU1Q5WVlRN28yS1JPMlFTZXZxWjVEbS9zQTY0V1RyRFQvVkNpVVREZDlpbU5sUnNRSG1aRlpOTTJmUnJOb1REenpzekpJWldtVGlhNFp6OVpKVWJwbitYZXpPL3ZKaXBsdjJRWEw0bWU3MGIySFNqSmRiZkZDWHNMUkc5elZkWVlWYmQ5RVhDd3h5ZW1RZjRQZUxoOHJJZzljK0dZU2F5dm9VenJEYk1TL0ZmaDdQZTNvNDlDd3lNUWJ2UlhrL3ZmRndqbVV5L3BUOE9YZVZwNVk5VTNjSzYwbm9WWmhPWVV5NlFZaE43UlBxRDVmWFFpUitlMmNKeE5PaGVEL2ZPTEFZZ0dmcUNLbXpvUlF3YTFqdXFteHJCL2RoQ0Z5c1Jhem1HM3N2dmp3aGJGMGZVVFloc1UxS2FLK3hwb2Z1YzFhSU1ndGNDUlVqQmMwYU1sR3V3Z2dGd2xtUXB0a1RLY3FxS3pHU0ZkUnhtNzJ0NzNRNmpUdmZTUmo5Y01yUHFyTEhYTHFKMGdpMGsyYVVPeVYxMlpOcU9LN2FFZ0ZyUllTVS9KQmpVYmFIY2pjNDJJR2ovZmlOYUprck83ckFNZ3lvekZDdlUzVVoyU0twL3dSZHVCWEt4eWZRdFAwcHNUWDJiMnQwY0lNbmEzNjJqSVBlOEJ2TXo4ZGFiU25wOFFGakpxTUhJaEFlSjJ2M24xaXovNlk3SHI4a1ZNamJNMHNUVmxsRFdiRmZSRUNZTkVRVldlTUZYUVlKU3YvVEFFUkkzeElNY3MwN0M5T2E4TnVqK1ZxQ1NoQk5ZWWhGcUtPQ0FFTGZZb1pYd3Z6OWUvaGI1VVRLS212a3RSK0lncHdjd1BXT0o0Y1FKVW9zeTEweUUvSmVIaFYrUHF5YS9RMEtoRmpMS3poVm10bEIyYWg4eEVLdStjc1Y2N2RyVHVSUWJzSU1pZEdhT0owbG9mdHMva01GbkVCNkhKeWcxV3VFOGVzTUZsckZNa3g3UEtLdzRyakpwTkIxTG1ZOUtWWnk4STNkK0o0NWQrNWVhZVRFTmVJTE1peVdibEdvL0FJWGt3QTVwRGtsQ3B2R0JBWWttNWpMdmF5UFhGU0plZVZTVFY5N2tGNHZDMDJCcGZwanRCM0cyY1Q4SjBKQVlCTW9uV3RBekFvWTZKNXU1anZWaENpcVhGQzJLdzE2cmdLZTQyZ1VJMG8vdURFN0UrNU0vZ0psQ0FtY2cxa003ZUJ2emRxVWFTdVE5d1hpZlJaYVA3cEVPRlBmSi9UdGNXVHdLVGZOdWUrWXFsVWFYSjBkWllaVjJUdXpKaDZueTFrMFNGb2oyUG0yaU9mZ1dnTWEwUkNjK25wd0tmeU9jL0tPaU9MaEFUM1ZzbksrdWNqaW42bDVWOWE3L2c2WXpEdmphWW55ZmV1VFFkbUtsK1BUSE93eVhpQm9vbzZGamF4OGVQV1lHaWEwbmV0SXNIYnB1ZHVpSHJDRTQwMDkzeG03dFFXc2NFcUVWL2dxWHQvZDVFMm9Cay9TVzhVdTJKbi8wNjdTLzVoWG5RM1pZaituaExtZjcyN1N0MHZKdjduak1nV1dxQU5ZL29ZQUo0VGdJak41TDgrVnZaS1kyYkhwYzlpMW90ZUYzK1B0UU5aMmdCU3FkVEVwMHZqYnlJVFZ5QnRFM0ZpYjVoWUlHOWpjVjJmNkprRDc2d0I3ZldyREtiZWM0MlBRelIvRU5RQjFoVmZuRFIvSlBBdUlWam4rNS9yV1h5TTFoL1JDOThaWXhFWWU2YjY5R3lCK0JsMXJSUExmNitxYzFHdy9hZnE2blc2ZCtmN2NTdFYvWVZQclNEN1JHemdKY1lFQk9EQkZ1REcwd1VrS0pnTmpLRzQ0WXZ5dnRLOVk3aUNkMzU3QzZLYlJFTzE1a1NuOHdsTHc2RmwxRnVhRUtJRzZMa3V2K0plVEtsaTdPMm43L1FxYXc0VHVSeDJDWjM2WElLaEJFYlo5YmxQVlYvTHkvS2hWWEE1MElub3FJaHQ4a1RNQmtKa2JjZkRveE5PODJoRzNJRXVXRjh2OVdNaCtBOHlMUnlRelVCZ096bndicU80M0hVT29GRFFXUmZiSFZiemhKUkpLbUttd0RpaDJBMmxoSmFIUlE1MHh2bUtqY0FrTjZGTkp0RUVZRG9HVEhTbzhhMklBTjQrQ2lrRXhNOXVITWpWNEVPMVowREl2L0pDcGpJbW1tbHlvRnhZMTZUb3JpL2hUZ3puN0FiSG14Z3Zud01jSkxrOWhjNUhjME1IZVpUNlhBbFVQZEtvYlRxSE5UTFdVVjdYRHgzR3dxOHo2TU5zRG9SakE3dzlKRk9reUhRMkFEbHNCUkRhSkRqUjF3UGk3aUdqK1lCUyttVncyeFZ3SU5jaWMzVnVQdk41eTF4RnRtemVlV2RPRGF6K0t1Z2hYbVZROEhHemw4QXNNZWVDc0FqTGtDcFFGL2pTS3hheG1OYXZDOUoxNVViQjRFWlBhRkNlbVJQWEZFMTI1eTl3MVc1TmMzKzZoSzhnTjl5aEhHOWRDWHEzRzVSQUpPVXVVVE1mZUJiTmgzWGd0TWFadnhBenl5WGFZYnU4aXRWcWpwTGFJMVhyaUNGYWJJZ0h2M3B5S3c0MU5abFhkN1pxNjNCUWNHMUNNb25pODJ1UjJwTzFINGV1UG12L0xRak1NMUk0d2ZpVHN5MjhaOTQ4aXFmSFMxejEwSTFWRWNod0t4K3pxTzdBQ0w3OXE5SHFmMGdpd0ZnRzA5ejlIRHhUY0M2SnhPUmlzcDU3ZTVkSFU4cklrSlBWMXNucm9sWXByalFuQmZ1bEFOc3paU1N3QUxra0haOFowUUZhQzRNbCtmMDEzM3NqbXZqeStQMTRyYmFwU21JZTl4S2cxcHdKWmZqcW9ETVVuTVVxK2lORkQ3N0NzMWgxOW5MS2FhTEZIMHFWWXFlalVoRDJVcUxnTHVVOXRnVkRhb201eFI2RFpGTmpTaTNNWmpnZTNuZlJFYW1EZXBUaE1ZYit0V3VodFpteEV4R1BNdVpJclJDYnhxS3F1SlhnNlUzZVFiZmFLeVJHOE1jdHNVdHl2RWxYVm4yNUZFNy9ZRnFyaWFoQzF1SGVwTkhablZMenJpaWxyWmlhQWhhQm54M0NLNXZCWWRnVUtGY0FJdnhoUVlhOEZhMjI0TE00aWxXNnh5V3hmcHd4dmM5ZUxwRlN4VStlOTVaTmVhOWZIOUhUUUU0NHMwbFpsR3diTHdnSjlpSDlsdllDMWtscDRDeE15dFJTbExjOVpJdng3ZDZVK3RvQWt1T1ZXYnhObFlUS1hqbDM3UnhsczRobUxJYzUrdEZKQWQwZFVtVjMxakRnZHUyNmlHR0pxYzBhb2dBTUtkTGNEY3lyR2loTXI4MVFZYkgyQXFjaFpBZnBKOG5jL2tjVkxEaEZpaVpOS045S3BBdlZhcDVBQWJEWTVabnYwS1A5WC8wUlJJcW8wOEhmR1dHNDZjUEI2VlN2RUZvdUQzdi9ZUEF3eEI1SDl5Mk5XeCtLZ1ZMS25xM2oydlhBUkRmbHc4RDBBQVA4YVhRM1dZK1B1VnE0blhXYnBkSGVCWnR1S1l4VGtUaWRwOG5GL0IwaDQ2MmpxZHlJczJndHhEbkdhTUg1T1IvYUhaNW9CbTV2RUxjbUg2YUw2RFBhTk1wMXBHQU84em85N3loamZKVGpzU0RPVzdXaXpsSVZDVG9xMlhIQVhpalBnVzBxNThoRkZFUEFVUDNJNy9KejcwM3dZR0ZVU3VzS2VRWnh5TVJOYkc0Y2dDSnBYeWJ2aEtPTHRkcWZtbjQxK0kxa2dUUGt3SjVJRStoKy8xeTJRdFdLdnVua1FmdnpDMy82MU9WeGwxN3N5WVkxRmVCNUZpRDhRREdmWmpEWloya1psWlgvZmVIN2kwL08wNHNmeFVFNDZjRlBrZUwvSU5GV1JiOXlDVlRzOWhWSExiK2k2a0M3ZWxLc3FtaThBOTRrYnQwK3hIVjZxc2k2RzNwL0pJTGl1ZTA4UVBwRVU3dHE4OHNuSVNxZ2tRKzlzY2V6c1VzOHkrd0JScUN4aVZSRHFnd3RsVmlTbFVmcE8zKzZoTDF6ckhlMGgxaUhRZmhnaVlDNE5XNWdWb1NGYURGV0lpS25aMWlxK0s0VHM0Y1pPcnlDMWhMZmMvcGl4d24rc0tkeXpaTFEzWCtjWDN4MmhFdFlBdHZncXhneksvbzdUSVBLSW1rNlA2eHVvRUsvYk50VVQ2ZTdSOXFEOUJWenNQQzhtNlhKSkZOcmkwSnhOVm9vQ2ZjMXRPQmhvVnA5YmRHMzljdGpmYkpQRVNLT200UWlUWmFrYXlzQkFqZ3ExbHBKM1Q3bVJJYnd3bnBuWXhsRVZYdFdTQ3ZqenZmYmRYcXd0SVUxc1FzdG9NaHVFQ0pHRUtKYlN2OUZBZDVqRjV2Y2ZGTHZMd05icnp0WnBqNEEwRE9EUC9NWno4UXgzU0ZSUDk0Z3lSOFV5SU43ZFdYVFV2dEw3b05wNG1hZDdWbFcyZlRJRkpkRkxPM2YrMXR3aDJ6emtxYWlZSGY0UFp5SVdrUFh6UVJIYlptZ09RcXpxa01ReGM4WE5KeVNic2ZDdzhFNzNXMUtvVndPbW1SbGdTTnJlc2VkU3NwMmRHOG80UnphcC9QTHdmRThteDd5azV6YVl2N2k4c2pRWlBFdVB1SWU1NFpxRXdlS2tWNE16dXRGcS93NFlzc256U2gvQjNPL1JOMWlGcWFPc01KMFVYRDFjSjBaYm8rdWFHVXVRcWY0SnhTZTVQdjdzelRvdWFNUlhsR2JoYnR6YWp4ekg2dWJiR2JpbXlZanRJVk5BZzNxNlJ4TS9BQjEvNEpoamt1d2ZPM0xEeW0zZWMxeklCRWlYTTM0bTc3Vm1EYjg1bDRWTkgzdUJ2T1R3MXZFZGRBVjVjelhxOHEzMHh4Qk1DKzdPNnIxWjZPZGtYUVZEWk1JY052Uk5ucENLN01MWHJBQzMwTlpKU0N6V21qaXgza2lEMVcwa2hyTERGd3dwVnNzWmdzZ1dKc1lBYXFOY25MNE16WWUvc1lCczk1NG82ZmlUTmZmTmp4dll4aThVRHBRY1BLd2RQTi8zSFVTZ2J3cXhhajhTMjhsUk5lS0hORGl3c0hqUmFHQ3htai9mSm04RVlhS09Oc3grY3lSbVJIUmhuWE9YT0lJOXRSa3FLRTdTUHAxU3lqY0R4VFlXZzlXVmF3eGFjc0FkWnJVK25NdzY1WjdVcll4VmprT295VzYzdWorbDJ0N1FvWFVCZ1pycjVlM1dFNDNyWjdJRE5FMlcxS1Fya1YvdFB1UWtDVXYwcDhXS1N1VUROQnBWZ1VMa1pTMzhGUkZMdy9vOWpZL3N3OHAxZFZmMkxtNGVqNHlqZ1JjcVY3aGo0NTBBeVpLNGZwMzRQOU43UzREaXBOTncxa2JiK3h2ekVhRGdFc1hGU29MYVdibXJ3RkIvMHpBaXRqejlxZDhYWUxURlVZUG93dGs3cFdhQWsxalRsTG9GSDE5NEhCS25yR2RTK3JNa3licHZVWDcycUwzblI4RWp3a05vK0oyYU1yVUhKNU4zUDZJbTVReFdDdkhISllyZTAwMVIvbFVVQ2FRazdYQmJESGNnQ3VnVTFra08zQUl1Q3RVN3p0NDYwQm5YVGRKNXNUdmhPZUFkN3NxR2crbW1RdnJmYlIySFE1N3V1ZnNiNURPL250YnBLbTJGZGcrMzA4SlFUWWFON1U2Q0FvNzYvWmNwVXRibFdBUlFheDRrRDhIUnVYSTF6NDIxWHgzcHpLQXJIdVNwR3FBYlZnaFd0anRXUUUrYzgyZE5xRFR1MHA5cGNEWGRCMEFPR1dGZHhNYVNncnI5ZDFoTUdUY2dLdnNMZjhidkJDN2lSMEEvbDJ1aXNEYktvR3F6OVQyaHFWMUh4L25JanJhTHZMaE84eWVPRmlvRC8xb3MxSjdNQ1EzVVRJQTVabHZucVZxdEZJRkkweERXNUZnWHZUam10cDl3WnMxbFZoYWljbWFsNWwrUURQZk0ydy95K0FRUUlCQUhjRnpMVVVFenU5Wkl3ZnpMK25tZHEzVWsvQkdNdVd3ckpHQ3F5MGEvRk1abEhDeXlYRFFMSThHd1M2emNIaDBLVU5IaEF3K3Flb1FPOGpFU09kVVNlRzBDQWtrVmtHSVhraWRsT1RyaGNXY2dMZmF5SStGN1V0K0JKdGFwS2xQZUR0RTRFOTVITnpnS0hEK2E1TG5BVXRFMGc0ZDdEdElobTJvKzZac3RmaVRHd2YwUU1CcGQrRFhkT1Y1dUd2MGdzdnBzL0x5Z2dzOUtqdkJFUW1xWFlnRENXd0Z5U1FUaGlxMDNOYmcrYVdIcGxqQTl4aUZnbGlmZENuNEdQQ1VkMXRRb2Qwek1RL0VuWmZQNUcrSVorLzduMUJlYWZac1ZhejNubDh6eTY3aG9ueUxaM0N4dkxpSzE2eXZ1ZzBOUG10ZG1CVFdTVStPUHV5b0d0OWRtcUtlNlF3NVlCaHVVMFJNU2VzKzJpVGFCcXFQcDZlaGdDeHBnUmExY3djcmJwcHhPL0I5MDdCUGkxbW9RaGtwU1c3dEdjbi9XVWl5QkJsQUFHU0FReHBNQkFqUllhM0hzQlptUU16c0VScHZQS2N6dlQwbHB3Mkp2bDZDQ3BvcWRocjl1ekNseXZXSGtmbXp4V1pNNEh0WlVFUWR0bHR5UjV2eXRmaFl4WjFlZGtGSFVJUlV5dElMVUFSd1pDU1ZRaG9lNE0wWGxKSTNNTGljMFY1eE12VDN3RUhnSS9lMFc4VlBGYlduZlg1QVEyOWJ4UXdDVmdUK3VKbjdYWml5MEVPY3M3bFVxTzVTeHZ6alJtV3U3YTdEdklIeGxTNjV5U1dHdGRFaTErR1lRSGJ3bW4rbjNJN1g1NUZpY2R1TlBTMUVBWVB4ODZ6MWZiREh2Z0FlUER1VnRnYWpsWFg2NklnODF2eWRIRkN5UHNjbGh5TCtkb0pJc0JuYTVDNkVhdEp2alF3Z1B5S1E3VzFhZHR3ZjdLSTM2VFFPUUNOMUZKclVGTkNKQTMzc3NnQmVBaWppalR3WVIyTzd2QnBnekZ5OU4zT3RSOU1nTjBSNEk0aVF1QUpDZDVYM1dVTzhOYStyQ0xjWkpBSElNVTg0VUZ1cXlDQXRSNko1Wm1tNk1iTFdDWjQzVzlmS2RxTUF3bk1YMDVodXFiUW5OV0owYU9Obmt2UmJqdEErUytGTllDek5YcXlML0VyODlnYlJ3dy94UU9Jc2hpOE11N0FNUm5VME5hVlRSbCswa1A2NTNUZi9haVY2SlhiZEdqY2pOUU9MQ3R6NVBkblBQZW1zQzBMeGpUNXNKcUJ0SC9kUXoxbEJpYTNVUmxFWlArS3VlS21mWHh2bXp0V2RBOGdtK2ZnSEk2VFBPTURCOS9NMGFNMGg1emdCcDFxRkZ0WllaeVlTWjdMY0M0dWtBd1czZDFJbjZ1TTIzODdBSVp6dHVhNWw1N1hRQ3ZvSnJ1N1V4WFcyYy91VG0ya3lSQTVXRG0zdDBjajFxV05UaHpUWlhxc01KWldFTUtLeUFzUWJaZVJIQ1hWcHpTQjlZQnlTaEhwNU13cUtEZlJjNkRVcFM2T1BYSi9sSWxSZXMwc0FWcloxUWFMOHlmc1RaOFRSQm11R2FDeDFRdXcvenc4cFNuNG9oMG0wdmZoRWdLZm1DdUoxYXpQc0tFN2JoQU9pNFI5ZlBvTmtYamhjQXJSejRTdzcvenhOSVFGSHZUeks2OERDbEdOYmRnTTZRcVlKcmdtN3RNUVFiZHJYNHUxRUYrem5UUGxLQkdDSk5sUDFpOEJNWU5EQ2xhaVVlVFMvQm8vUG40eE9ma29vL3prNTdVNjdzdkJnY0tBb01PVVVKRHp2MndEOUttL1UvbWdPeS9meVhaa3l0OHl2RnREdVdOSHltbnFqa2FZWmh3UTNPUEU4MWVsdjlET3lzZjEvNCswWUJNa0ZZQnExV2VvOHN5MHpNdmpnZmxTWDNIS1JvWGFZRTVQN1duTHB5Nm1BUVRSSkw3MkU4bjVZWE11RTRuRElZRHEwUW40bEpjOTAxUElwK0s5S0Jkd3MrdXIzNW9tZEhHVGpObnZRRHFSUFpIRk5nTjErcGt4SkNrdEhXNTg1c3dwRklqL0dQMUlGUXFMWkJHM1VZYjBvbGErQWRoYXZqNkRxK1BTWmdPWnV2UjE0TEdFcmhsTDJIb2NES0lXUUxkNFprQ3hkYmpxbjU5MlAxdHM4bUtBWThMajE0MDlMU3ArQ2lhendVemxVLzM3OG01andLM09ENXhTazFWWkVSbFNORHE0Y25MLzh5OEx5eTBtSmtYQ2s4WVlOU05wZ0ZDd1dHYVdMOWg5MzVMRXVnb1R3azFWcjhDOVJISDgrcGxYMk9yUmZ4eWFFZSsra0RuZUM0U3I1TTBXUFJYSkdwQW1ucERWTG1VRUt4K29qem16OS9iMjlSMGRoM2hJRHBUU3hpd09sNFFVSHFzWk5Mc001OE45cjQ5VVdZUXRTOHJrTVg0SHJ3a1NTZnVZM084bjVpaFBUbDNRSEdudHpGTjdyQ2RmUkt3aDFXbFJTS0NaMzA1cDMxZUdQbzhkdUZ6V3NFRC9DT0FkK1JrVXQxY3NPK3JsdjdVMU8zTzd6Uk5EUmo0Y2krWG5TSUFFY1p4RVI3aXVzTDhUVDhFQm4rbUo3aTl1WCtad2RqaU94MmFUVUQxTmdxcWNMS0ZYWGI3OVVXZ2lEUUFHWnozZm9mdGFTTWlCdXcvanJtbVYyOXlKdWZOWWI3ZC9sOURxRkJzTjF3eUZaUEVWSlZ1WEo0L3FKSWNkdVo3ajVORGdNbjl1dEo3aFJMQW9DbFJsMU1idDgvUTV0bE1NTDA1T08rR1puaDJ1REN4Q25FQkpLdVdMWjVxSnBwbHo5STZtVHpON0hIQUhWdlZuOHExU1VEVHE1akowQnZsdHFyOHowTjRvVHA4ZGRDSERJZzZwS0R0VFI3ZDl0SHhEMHF1MnBiM3ZDZXZLdG5WL0NoMUV4ZjJteDB5Z2lNZCt0YStHSWw5Y2M2SHBzSk5MczVWUlNBWEd1V0RLbnFjSnA0Z3NFZkk3YUgxbEJoSXRrY2NYYlN4WklNTTVNK3Q4RmV5dUkwbHAyK2pqQkhXVDRWbituT2ZkRVd2K0M4YWRFaUdhdWtoVFJzVi9KNU9uZjdWWFV1L1I4UUxwZkZBYWFhNnpkOHFVNVBkeXFSR3lmaDhVdWI2cUVBWHdxaEFiZkZHdEZsZGdTZ2pZTW1UUDFnL0RrUWVqRitXK3hPVGszT3hXclhzbnE2VkJnRXhkM3l1UHZlcUpsOEVPUDZqMWhwODJuTXBmREw4UExDaEt5OTJEUE4yVUJuTzh6dlRYU3BURGFoRVk2UFZ6M1dmblRPUXA4U1RJdWt2bkZoa1o5Y25QaTRKSXBreHNWT0U3QlZtV0tvbWpHRTUxOXk0RVMzbnJJN3lyTSs3L00vdE9xa3IvZmJSdmRkNmdtaklBREJSYzhjRTMvSmQ2QnR1Y2FnaGtzNE1iQmJDSzBCYWFWanRKdGQyOCtNeGM3bWRIbUV1Tmw2bmZ1L2Z5U20welluTFlXWUMzelI0OG8zNTdiNDhHSWlkU3JpT1dMazJIcUJzRHYyRUJFY3B2SWptRWM5cmhxekxPVE0vd3VIZ2FVWHF1RlVrOTV4eTNVR2NSZlFCL0lDM0hVY0Q5cTYvaDIyUkdtVFlnb0ZjQ1E3R1ZlajhEeUgvQkJJUENPam9WT1NHVHUvSEdoalpBWDBja0xtVXV5UG1LQUJzMHk4OXViL2ZOT1RaTXNpTXhMMlFvbVZPdndkYmhXR0R4N2VmQVFsclArUzNVY1pldWhpRW4vUzBxZ3ZUZGJ1MWRaS3huU0F0cFhiM3U2QmJ0STZQdU1EKy9SQTVvcXNqRWYyRVFFenQ2a1pUOWdyMDJVeWRncTY5MG9rWkkwMG9xd3JxOWNXWERZVjE2TjJRelBiWUlGNWR0RHFWUlgrQ3VEdllRUmZBMVFmRVRaSW8xSkJxSnNHT1RtMjVkcTY4bFB6bXBaQ2lmTmVEb3R1UThQY2kyREtFVkJ6VkdSOE9RNHRjYW1xRVI3bWx4dnR1a0Z5RlVLbFVwNW9LcUlkN2REcUtmSlBHWFNaMXY4RlhuU2FSdCtsajA2WHd0bEl4Q0lldXF3bGE0dHNlWlR0R3pST1haeWpTdTFjMEJoZlNzSnl4UU8va3UxQnNKU1dZays5ZW01SUNsRHRaQ2cvU3VxWWdrTWxpbEhidzY3R2JrOUpJUHhGVDgxdytub2hGbHRTL0R1QnVqQnRNdDFUMCszMy9GRjdReVFJTmZHaGg4OG5LbHRlOTc1N3NTaFYxMklhRWY3Y1FlYWRWOSswTWJHU2VtSlhUczdOVkh1aTJKc3haNlBMVnpQNitJWXZ5T3NmcENZeDE2dU9ra3lvTU5GK2lUL0wwSysrMUs5NEtDdE9KU3lJWTZ6TTQyWWFNOVpDZXhVb0lPNVFXVTA1RTZFU3crYkJpS2prenVkWUdiQlNvNGZSa1VXZWN5QkpjZHo2Tnp6ckNsaWpSZDBtcG1pbUZqOXo2TlBSRUY2UHhqRzllNUdkRW5XYWtDTzVyWUY2RUJtMHR2SDczMk5NU3RLc1JDN3pLV1FCVWNlSHFrRERMUjd5ZjhlbmRQV1A5aFRBSG44Uy9uN1E3UGxrMFY5N0h0YXJUampES2lDR1V5a0gwbWVYK1ZVK0JkVWNkcnlpQ1FXZFh4Z3E5SXZZYW9qaDZpU0Noa0VsUU9hYmwyR2xIMTdCWmIrd2tSYW85T0pkYStEOFA0Zkp5UjluMndTajg1Sk9lelhMem5MYjl6b0t5RGQvTVZJaEhpZHY0amNFaW5tdExNamg3Rm5NeFFNNkRUdmFZdlduaG1reSsyall3R1VCbFIweFBnZWNyUGJHTjM4NkdnSGR3bi9CcE9raFE1MjFwcEordFlVK09QM2UvOVVSdnI2SS9MRHhPbDVscG5MQ0U0MzZFUS9CdTIwY2poSlRpSXNiZnN5VHU4RUdZM3UxQnZlYTFYbTZjanZZTVFOOFpTVG1ONVUxU0ZhbjE4YzIyMkVnblZHNitGVWUySHlBNk1kZ1dnSi9Tb090MHBHTnVpVXBSdXlnWjQ0TGlDVWs5L1FQNVhqU09lbG1Hc1VScGJ1RWZZOXEzWldhelNoZExjVEtIYit3cldKNTl6MGxGMEZ4bmxlVjlEWjJSNWlWNUo3OEpEaDFXWWRCY29lZTVvMTMrbmpjV3JvUnVzQmdqQ1FZMHFIRUJoSnphZkQ3c05OTVU4OTVNbDdlSGQ4djZuN2VnbVhQNVg1UysxN3ZWeGFrTzVET09XdEpXMXpPcC90Nkg3WU1QbWZNUWNOTENUSThKTkwveTNyWnBCZjF2aS90ZW5jVjVOWUZReEZwUXI1c1p0YXloMVU4NkVpSm96Y09pNFk4MFJQL0NjMXZDUjhxOTNuZ2dRWWNBRVBCVytjNnhMa2FySmgyQ2N4N2h4c3E4c09NZ0JYdHREL1hQcis4NUFHeHZZOElzUzlReVNxVDczZExab0F0dlFhYU5TS0hFUEdxL2ZNYXd2RkM3OVVHNVpiUGJaOVhNRnl0bklwS3ptOEdMdVNXNHVNQkh2aHVmSy9LWkpnYW1idVBteGQwa3ExUmxQUXBnUStPTDkvZ3Rad0c4bTk4VEhmamUvcHcrZ1JveCtHU2h0L2RxdFFxMjFybE5kOG10QTlqb3dmWGlXTG5idmV1VHQ4M3RrOElhRzNVNGZrOWRyTGJ0Z0tvVUZseklxb0JQZWpUaWVhdmdFcWdtOHBwaFFISytEYW9rQXNNcTNSSGMzZGFoa0pPSCtlWjZaTHlUMVJlQStta3FUeXBuVE80VWU5VmoyMHBWYlRQOXpVdVhlNTBDa1Z2dWhoYTM5dFcwY2hXbXVFNGZXc3F2NkZoa2R0aG1YU1lxYXFMaHlXNlJwc1E1aGZKUmNGaTFwVXhZcGJ6cVljM3BKbE9SR1F1RTdjZ2hLUzZRdEt3SG5kZlhjNk1yU0Z4anluaXZHTWhtcWswSmNkOWtVZlFvMEErZTBiMnBlN0hOZ252Tm1Ob3Zad3dPVUJkbEJ0bWpvelZHOE9UUTJZWWF5YnRPK242ZlRiUTVUWWxja0hyUmYycnAvb1ZiSEJhbHUxTGdIb1FrMXBMNWhGSWhYaVhnbEJ5NXRPczR1MExHWkhFcFNUUEllUWZPNWI5OHNJNWlHa1VKSEJXbTB1alRBVi9IRE92b1IwdTRXVERvVUx5OFk1WG9yb3ZaQlVaMTVLTnpoa2VjL2R2VllkUFc3Y1ZoNVRmV0N6ZkZvU0ZLNk52SS9aSUZLVHg2bzFTWlc4ZFUwZHFsbmVKTVVMcU5tSkxjVkVQTjBPL3AzMmhKV1E1TVFqaVFTalJZN1lLRytYdFFRNzNHMmF4ZmxmZWpZdFhGMFh4L2d2YjVpRnRIdmdpczRUQXBEQkdmM2ZzdDQ2TURiRUVYYUR6VnNOenFGaDVZZExsdXpUVk85U2Q1S0s1VU1vYm9ubi9uL2VPVzI2Tnc5VUJJVGR4TkE5NDF1Y21vYXhwb1QxRkhpOE9IODBpK2gwS2tSNFVqSTZpdjlvR0xNMTIzaVIwNW8xb2JhSXlVU3g5K3R5OVpWbm5jdVdmWWgrc2gyU25NeGZWaEVJZEd5OXo2b0FYSlBLOFlHVS9UU3BEb2dtSk9mZi9QSnFJQWtwNmlqZC9Xc2NnRW9vZXNPbmFMOVZXUUxOZklJN1Y5L1BLSG1GMXdwN0RRMGJFSk1qaVRGZ1lBZy9QZUNNQWxwZlVNeGZzRFNQdkYxRk9tZjkwTnRvczBlcmRVTWdnMHUwV2dVK1NvUkM3Q2dIcE5iRVluM2hqWE1SQmJMVXJ0d1huQzBOQk9CdncxQzdmSCtVV1NGT0oyamNhUGVHVEFJeE96WFFjcDFuNTFsT1JuTTlLUm9hbm5hWUpFcXFnYmtBdGNZdUZCbTd4OWZRL3VycHJMbHZ2b0Q2Q01ES2toVkN3TlRRbTNFdXdaY2RGV2ZXQ0o2djQ1RUVaTWZ5MFpUTHpxcVU5cUc3TnBLM1JPbGtmRUVxOG1wYWh5S0VLdVBrUEJTaExsMndac0d2WklHYWU5ampneFZZdnU4SUt1bWo0N29kRWNVUFpJeldTa2V6UWF4b2huSGNoWVpCczNpQlRXOWZQZE1wTHQxSmhzOFVpbkRzWjRqL1BIVUdGZE9NejJMaGExdENqRG9QTzV6b3htR3dIbVZiaTdnWCt0Q3hJYU5CU0xBelNpNHpPVXlTeE9lY09qc1pUT1pSM3RvU1FQZ1A5WUpsT2xiWlZCc0NFaEJJb1QzR1J2OGh3bHNYbDVqWG0xQmlIK3IvTDZwcFNTOElMeFZVTEdFU3lGKzVEQ2tvdmhld3N0cjQ3dDRQR25BS0tRVTJMK25DbTQ4cUdybGhaVXdJcmNXUWZsemZkREZaamhZclFBVzJiWmc0WWhoQ3hnUjBNY2d2a2dqQU5ZTjZQWjdNdnVRRm5aNElZWm5IZkF4Y09CODFCUmJoUDhaTVZibXA1QkE5NUx6enRwWTlMTjFUTkNGV2pFK1lUU1hhV25UU0pjUHorZm1wUGVGU004VFNUQ3lYRzl2dDl5K0l4eUVjUW9QWmpnZFpOY0hKN05RY3o4UmE1SWgvV1NhblhKYTZxOXYxRkwyVVJIRXZwUVJvVElwQlNPelMwSzRwTlNUaFg0THU1SzJXZjVJcUtjSkEyRGkzVnNVdmVwK0M0VWxsckFpZlZHOXdSUWZ6STg1aTZyYnBQbFQ0M0lIZFFiWFNJcmZvQ0JBenkrL0w1Y1JSa2ZDTWpRWW9NSnZBbU1TK0tMNzJTdDl1LzNZZWdDZUZnOWpPVFJHeDN6ODFGcUxhTWlqSHVOeWxwaUN0aWZNaXFHcm8vQUdQWFhueU9NRnZqSkFCTHRTK01sUkJtRWtISUtUeEV0Q0RPL2MvTDBRbmNxOGtlMzlCUXlBeU5XSUpzbW14cGliaURXL0dKOHdRQndIRTN3UTZVVkcvY2VXVUNELzVoWEcyMHN4SW5oN2pzK3d1K2xwMW5VekM5bm0raTVCMVNhdzg3TDAyUTM5c09iRE80dHlKVTlNTHQ4U2tDU3RQMGNZVmtIT1JaSUxOWW1GWVlNcFdxUEFETVg0WTRHODlFdFN2VW9mN0ZmOEVxUExYMThHYlNpVmJiUmhGQkZPMWNTWGxYSk82c0NyVHppYndCRG1OK05YQ1VDVFp0bE9XYmpmcUQ2SmNnM0M4aXhHTjluR3prcDAzbHhuWGI4anFtcVRTYTJRMnYvbkkzNE1JWkhsVmhyaEcrNmd1QVNZN0twZTJPMGdGVzhZNzVTVFB1OE12Y1RNM2xBSHV0WVFMdG5vN2FyOFlNZFJHeTVzd1l2cklHNmtxbjBudmdEdmM4QkFXclVaTzVOOTYwQlMxUFBmeUprZHRxUDNiemNyOUpNaUpoYk1Uc25OYUZZUXluQk5mNDNhMlRwTjh1bVdEaVZwbU1TdzhXRkl6NHBFTXJSbFhaTEFPU3ZldzBQemd0STJjVDV6dFA4NUViUFNvOUF1cGZyUUF6REFLVWJhWUNlTEQ4aG4yWWhQcGJXaXE2ZTBuR2pheVl0SDRROUNkNUZRY2oyRXRRcUxEMU5HTDZtN0tnS2hJOHNMZjU3T1QxQkV0c3gyK0NLMmlZY3FyNkJXYUVNMTkzTWE5V3JrNS9JUkhORExFK0E4MDJqTE8wQUZMUmVBU1ZZV0d5aytuYldoSlEvRFJpdWtUWXFCdllZdzEzUWxuOWtYUVgyczBxWllwU09xTm1ZNy9WaVRPbnluRXZ4NFhLYkMxbTllQk5GejliamdtSTVyNlhac3hoWHFxSk1JTzhhUEJNNzd2MERUVUFyQzBjalVINnBIc29kczlENlhFZ203OW9VY1ZPbEdMclppR3pRbXhEcUQzeTVMVW9Ec1NyOFlxV2V3ZmZpOWxFVDZsWDBhSFRWRGZXbjNnSThLeUJWRW5TU0x3SHQ2WWp5Z0twM3F4blBmNGZjb2hoR1dBL0FPcFJudEJidWJhcWxodjJ5SE5QdEE3OUdlR05INHBKYmtxc1VFeWdhdTd3Yk93UjBPTFV4TlZiZmdYOXVDV2xVa0EvY1ZQcmxVOHR0TTBzaDBuVFFvMENaR2FwcDZXQlErcjh4d1N3VkdHVTRXQVJoSE5pZWg5K25WUjNWL0tKS2lsQ3p0aGUrd0dzNjR5dDMxS3ZTK0pyd2JBbEt0VVM4WG94M09jeVJUZGI2MXM3a0ppYjJZVzI5MEJUelk5cCtxQmZFUk1iU2drT2JHS3BkTUduUmVmMWsrMCswNENpcVgrbGNIZlYvZEU2a09EUXZGL1JyQXpnVzVPUWJmTTB1WDZFdUc3YzFvT2M1UDJFMlUyOTJvN1cwb3FQTUpjTWE2S296cFdDZWxjVE9NM0dnVkF1NDNpVGpOS1RTNkRtOHdIbGJwdjRNY1gvckJsdFltVVprNlhNanRnYWpRQXcvMWgrZjRYazYwQ2N5c29ZaW5ZQ3M0c0xjT1p0VlFwRUY1RWdHeXVvZk8rN2locmR3YWVDR2FjTmpid2NNQzAyTm5lVDhNOW05cVd0WWhjKzNReEY1RThGbm8zcGJ5WHg5UmF0MmZ5eFpWaWM2aTZEczdXVGFIYnZ2VWZ0bW5oR0lIam1IUnRMYk9wYlo2TDM1cVlucU9STGhFbEg5Rk5JL1VOcVZqeUJsNWltSmQ0WXpvcW5PNzFkaGQvaWJKRy8wQTBRK3cyNTVyNitXeW1rVDByb3ZkeVhvTTF3ckRnVVR4NVZYSGVGK3MvcjNiY29SK3k5d3pOOUxQZ3VCa2dvV3d5S2FXcXJaVit1MVNLcEliVDFoWkRlcEU0SmZrbWFrMHBYVVhURnpwWjRZYzh0VGFXMlhVcXZraFFzQktYYTBBZmlJTHlCQ0c0ZGo2ZHNOdEw0RmtxQy9YZ3pBNTRESlFhelNlNE9UTnpCNGhJWVhwcS9KMVJsSjFmSW1yY3JLMWNUMWR6azFldVVoOU80ZVFEU1BIZWtzRkpkRGYzRUpDeEpzSmZIYUdOMWZTU2VOcEpvQlFra05GODVBRUs5WlJaWDFqUVBOeENyWFgyZW41aklhVlRpekY3bEJwSk1oQUVvTHZRbllnNXNPdFVtbzVUZm1wTkdXaUFDdmFwWmJ2c1ZDaWFWWTlWaWM4OGpPMzd1c1dCeTRaRnRwQzVrWnlac2l5QWxkRi9QL0J2bWtMdmRITWZHYksxMHpHZ2Fna2lJUWxlQ0lvVXhDYm9tbGZkU3ZTMERCRU81N0NvcVlhc3Bzam5xT0tFbmNOc2VjdzRtRU92WkpJOU5VbitRblVJVWxGcUFBNml1UlVxSEc1eEpZdlF6M3liT0w1eGxRTFdBYU9hV0N1YjE2TVRDUlBhOW5KcGxtbnhiVmxEMGpRMGozSFc2dmFGQ3Y4RmhaOERKd3E4MTZFckJ4THBaVDZIZ25PSWl5ZTlwU3NsbmpZbXdhdVlVdDlrNGRMZ1ZLSjhqRE8vSGMxcE1lMW1ocFZMeUNPZ2FwZ01oRzN1ZkcveXZoM0RYbVkzWU5sK3VmUHNmZkdXUVB5a0d4alNNcGJXaGQ0dXh4d095RWcvOE53bzVwMzlZWjUva3lXV0NPNFJ0Z21IdVg4bGlaRjcvR2FJK0VqWW9OOEpjRjJYSjI5Ym9nem52ZDU5aERpRmx5OHhJZUFEVG5DTkdkajBydUxKcGVuQ1d5R0hwY0E3SEhET0dHUFZ1bXVQSEEyVzg2VHhVYWtmdWtDYmxiUUpzUjl0OFduZzBmK0ExTzc1VWp4TitGSjZ3K1FndEdBd05zK3NhVzdKemNwdit2ckhSY3NYRUVHUDZkMEoyZ1FhS0g2T2hEcGU3QVF6bHJUUkxMWTZ2eEs4S0FXR21EL0VDNktYd3Jod0M5Szg5am9pZVJkTFduN2xaTUcxbm5oQTNtWWMveEt0eThqdytzdk1sMTFNdkdQaFd6T0lldEFuanV2aE00OTlOKzZxcWIyUUJBVWtUbjluZ1loUVE4cjhtS3dya0VBb3l5eXk4N1VYcHpKalZJUFVkelhkM0lUQ1BKOXU4c1RWajgvcDNhQXlNaEVXL3lsU1c5R2tOREdMc1JPQ2lOT3FvUjUwaEVncWtpbTl4Y3V5ZmNDRUpMak1mRkV1QkJCcGs3bW1IRXVHbW9mWXBaOFdSRVRNNXkvOWRsM1VTdjdKWDVYNWdXLzNJTmkrYmRReW1jWWtNVkN1SGU3QzBUeU0wdTVPcmRFeC8zQjF4cHEzVXk1NTBoVGJsMHl3cnI5RmVDTllTUnlMemZxR2pBNUpmQmh3dENTMnpOWnltS2ZURHpQcktPRk5aREJTVXo0bWpYNlVIWE5Weit4UitKMEw2Q1hnVFpTYjBwcUNDL2RXd2IwUVIrSU4rSUJOV0I1TjBML3JLZzZTU3JJR21zalI3TEozU3N1cmsvUFlDSmo2U0ZjZ0RmYm1hRW1Ld2tITE9wRU5VQ2x3aVpNSzdsUXZYWTdsNmpnNWFNNVhoR0FwWWZ0ZWFkUHhVMW50cmtpQmdTS1ZaTUJqTjArdWpVUisvWVZ0YTlsUWdINktPMm9YaUREb241THhjNHIyMGZTWk1wVmExekJETlJpNTFmZm5GTEhidXBWLy94Y0hUZjlrRHhLd2o3VUM0OXRPUFdHSlB4NEtsRGdNdFduSGpsWm95L1JMVGVNWXp5L0IySnJUWDBOb1pTZDJoenFGQVlzZzFRV1dDcERoQVo0UXhXS1JxdUdLRVdlby9NUGduQnA3UmxIVm1ZOXBiU2dkNlBTR3o5Vml1dkc2K3dSYTVDUllCWEdBVWoxVHAyOHBrSTl1QXhmZmszTVVUYkx4TW9TSk4xeUI1dFZuUkZwVzd2TVU4OUFTTFU1SWJVaVVjczhNOE1sOGVaTG5QdE1qSTRSWW1ZWmlYN1duN0hmWGN6aDF1RnNrbTdZTmpjOFExcGRMTGtoSThjSVpzUnZTVUtEeFVvMHhieDdoOXBMRlVvSkFqY3dsQllpNFBxNmVYb2ZTOE5sS21LbkNqNk0wbktVaElBTks5MUVoUWdJNUppRVhtcUl4aDdvaENjWEIveGp1OTZESEdrV3JiRHd1US9WeG80L3hZb0JoVjc0U1ZaMUFhblZFTEJIYkc3ZEZoNDBGSGJ4Ym9BUS9wYU5sb0tSWHcydUVhQWhKYktFWlVNSzR0b240a2ZkMWpWTVlHYklEc0ZtS1ZhQ2VwM3IzZUlXdXhiMG1ncHJtUVZNT1c4WE51eUE4Qk5pbEhKTGNjTnZDcmtocGVSU2t1dDA1NWlIcmhUSkV3RXMxbndtRG84K054MG9FK21UQlBHaVJuUlJiazhqNHZJQTNUWGs0cXJ6QTg3M3BoMHR3bk5UUU5ha1k1bWhFVkVuSEdiT3FtZm9qRm9JSEZNdHA4eUxROE5US2N5MDNWRU42c1h5aFh1TTlsTExMSTNreklJRmpmU2N2UW5TeldqOS9yZFB4ZnY2Z3ptblFTalJJNCtxYnBieE53c1lSMFFTRFFZc3liMUp1ZUt5MEFEQVBkRG5MWWQxbzFWcDBrVGFGWFFBZ1RYd0YxMnlhdjBwRjNBTmQ0YVFCL21KNE9FWWdMQ1ZiZC9EM1paT285U050TkNBa3gydzFWTWJCL09PbllzRmJsWnlBNUtqZ3I0eUtITVhaS1VmOGttZjNBK1l4NGxERDh0OWxnYmh4bUFWZ2xvbFFkTzFPWldqTEJWYko3alRIVFVpY2hFYTc1SHlhWXRjNDJqQlZiWTNwSW41akxPMTBEWGoyUUJwRWJkK1dDVjNGVmtuTFVpSUVMZVFGV1hoQWJNMHVUL2srZGt6bS93REkra05xVlZPVDAyd3dUT0lURnhLTWNUMDA2em5WOEdlTTViNndaQnVwcldXQm9yQ0gwRU96eEdYN0dRczc4NDNJRm0ySjJ6amZOZVZoNkhKVk5vZmM5TTdCeTRMUXBncVdSUE92d2h5dkNob21lSmZYNU5PdURqVkJjVWRTQ3AzMFJVVU1oTjZUeTVWRmloYkEzU1V1ZzBmVDVkNnM2TVdLMjZyMVVYeHl0T0tUV2oxNDdxeU0yOVNmT21HNEtDWHlVdWdFMU5Hd0tJNEtib09mRVJHTm5TUnkyNDVEdS84Y2xTVTBvbG1vMjFhT3NLWjg3L1kvK2MxUDR4bnQ5TWVQSUpIZUFkTU1PblhkNnNST1FXZmpyZE9NaXRPVzdMdkxjK1hYNXA5VDVYQm9DQ1o5Zlp5aFZUcHUrbmZaakpNbHlrY0Nid2N6N1g3ZklpL2l3K044SVl6TjJvUXFvdFdXek5mWGNaclZYV0paRTlXT2Nqc0t2YW9ReFg1cDdZY0t4dGpVVDVXdnJ1K0pkenJYbVBYZWppcDhTd2svVDVnS0RkSDBNMlJ1YnZ5MHZDWFFLLzQ5WDI4US9KTHZobGwrQURzUFNzUWVXMHVXamNHUXFzZXd5TXBZbnVKQ2lsSkFtL2NySGN1c1JKa3Urak1DU3dxeUJHQk9aL1BBQmk4R0FlbEVUK1VpMG4vaXc0aTF2WWFrNzR5SDc1eVVGUWNXci85MGFVK0tiMWZyY3o4Z1pjRjFlUkhwaWRkdlAwTDlkNVowc25BVVdMZHcyckRqT2VEMHM4MGxrN1h6Rm5WeG42UEh1Y0lwcWphQTdSa2h3cXFMUTVYajRaWUxHYzRLWGZEU2w5WVdRRHZOb0pXWHcxS2VNUlZsbHJ5dWJSbUdqcHVHSm5ncU0zdGYvVHluczdoUVpkSkIwMlZmNUJibTRqMHVzUHVSZVp2azFwNDJsSGVHQ1RJUmxVWnBEV08xanBEb2lRRWtteDkxT2VXNCt4M2t5VjcweTVhTTE1Wmp1RS9FbmRyVnZnZmtML3cvbVBlU2JVQ3B0UnpuQWhRdFVVRWtYaG8xMjNNbmNyalA2OEk1aXF6STFqQkNmNWZjZ1diUVpISktKZnQ1Q01DQlpCbFNFZDc1SVl4bktGRG9HWW92a2tLZFlHQ0Jlc3VmNkQ5NlhJRXd2cTFlR3BjMVRWRTAvaWp4UDdTZUlWemhTSUdVcXUrbWFkb0pJd0FKMmFydEQzR2FEN0Y4aGY5YzVxOFljWVpER3g5aXBGMnJTRXE2WTltbVdYRlRsRm14cVAyT0xmbk5odkdjQVlJUDk5WTlwVVRjeUp5cTRvdU91akVtS2hZWHQ2SnE0WlFRRk9meWU4YWlTUUhIMDJPMkRJanVzQ2RTRG1uM1JWUVVFNndPeDJRaFdSK25ycW45d2NRUm1seXM2YUtBKy85cFQxU2l0QlRXVkROUmNRdEkxM1ZQUmNvZVYySWVYWFhSZkVmTjdFay9HT0VYblAyMVV3MjNNWEQ5ZmkyVDVydXl0UnloNGVRc1V4T051MVc0dkVydnJ0ckRZQXREVzhpRmxOMGxVZllTdU51dmk3RktscGVOR2tlTTBpOFprQTRITnhUVGlZRHFPTEFhaGhMYTh1MVk5STEyUCtmNjBYWWhpaVZBcFJwNDMvOWpRN0FlcWNBd1lHY0x5cFBMcGYyOXE2SjR1REVEOHI3V2JvTkgxOGtkVGZiemtDa3loK1I0U3VrajRvb3k2eUdLN0Ztckg3NXNzQlI4STNzeDFkZUpXUnQvT25jSmFmOHBpK3lBZXVFdXQwVUN6VXk2YWZQM2pmemUzbUJDMDIzdDA1NFI2NG54S1ZYTXVLd01UUTNld2RXUGdtRU9SWHFmRVNVWFZwcnJFK0pMOWZQdStSMlBFamtBL2ZEbDRSOGI2enpZc3h3ZU5nQThmd3JEaS80YTNCQis2UnFCWkFYM0MzMXJYWnQ2cExESjROODI1bkg3dUI2VUJQZHQ0TzhwbEhYanorN1liR2tJSHBaUjRRZi9FR3ZMVVBjVHR5TDYyUnJwdkRaTEpsZmllWXJMM25pTFZTOTFUWCs2bHZ0VHlaR2ZJN0gzaGtCNlBzaldNeEZhcGk2NXFxYzJMVW5DemN2WFJCOXhjZTV0em5qZGRhM0hXTHA4bEFyblpucWl3bUp4Y0VXSytqd3Ywc2VLcWRCWXpvZVcvYmMzOW9LQkwydXB3MTYveTNEUjRZak5Td2s5MkRQU1Yxcmo1Y0RMcjRRb1dlNG1OVXRIbW5WdXFwOC9JcE52RjVYbk5DSGFFZndHOEE3OXJnMlJNdnhpYXRzMDJ5Vi90S21hTEVIclhMcFc4WnFTUGU3S0tNQ01OUmFHSmVqS0lERG5jOWFkNWlmRDc2N0czTWRXQVBCVzhxb2lPd2d0NVRiUlVLQnhmMUhVcTFtekdLc0V1Mk1NNGV3WmI4MzZvRU5yaHozRnlRWEJvYzJxc0tveDhERDBweFdVZHh0RHk5QVV3dE1ETDBSWDRtdnVDVlMvV2NUQmJ6Y3Fxd1orMjlWV3ZmaGRvVXFXWUpSSVNGQ3RJSG9aV0RKczFrYTV5dnZBVUJiRE4wdVVySkdUdmlvVkJxbjFVWkxDSFBKa1l0RkxQVklIU1lxcDQ4OGo5RC9JU1pDUzRRM241VXpaYXk2S3NKNjIvZ3I1WDhIcHcwSkFYd3lsclZkVGVvM0ZQUmd0eWtnWlpucGIyNGlMSkRndkxhQ1BMYXhXdXBPeHVqT0htNnhQSlhiL1hvazRqeWZtL05aekErRXJwK3FXVjlFRmdkSWdOVFp1S0NqVUd6UGc1Q0pmVmtvbDZjSkRoU200QUhidlVkVmtkRmcxVm5WNUJ3TlRmY1NhZEJxZVBMZlVUcXRoOEpRRmtoWTZ5VDh0ekZoTU12eUJWRndsYmlXQTJ5V21mTjlCanhYTHBTRmQ4Szg2THdUR1Eyd3JUUW1jUDRzRGZncHM5ZHNRUXh5ekpPWVk3UmV0SW5VZjExM3NkcktpZlBMY2xSRGZvY3RKUVpPMGZBWm1JME5tVm1SQjJYT0ZKU1pFQzhETC9GbXR6SHhXdis1dWpIcDBlVlovbGpGZHBobkxEOWpDWUFzVjZINWQyeVhVd2hsNkE5QzhhRWZGaDJmTC9kKzEwQ2RCWUNBSVNTZlloc0FrdU5GaHJwZ3p2cktFK0ZDVlRyVldSVGR2akdoeGd5RnhuUllNbnc0S2pPUGJUTlhJQmZ5aGNoWFRVR0xqc0dtY1QyY3dVSHdjVGNyVkR2WElLeG5oRFVSUHU4S2cveXE1d2x4ZHBjODVBR2tRWHJqazREZHozYlpkZG1DY2NNckJvUm83c3ZybmpiS0h2UnNLM2REVDhtSTNDTEJsL3h2YzFWcU5BTFBhbEVNN2htWmJIRXdMUDNGMXpKbUh3WkpYdXdWKzdxdXNzSGkxcUxHNXZ4VGgwQ3R5ZEh1aU1HaThIcldOK05hWWplM0ZaVDhZUjFuQ0pXL1BQMkgwTGt2THZvZjdqeU1kUllxUFNOQmp1WG5GZkRvZWJlRFFlL2NkckdiY1ZXZHFFd20rQ3Z0NzUvME53eTRSMDhYZnhFUkNpMS80ckUrZExnZkgzM0lvOFlIQjVKMXJXVlhmdkV3TFhzUXJCMm5NTGllYkc1Kzd1Y3VyZkZoR1UrSGpOUW10UmF1ejZXYTMzbGptRVQ3aW01VXJFeGxtVkxuNUZJdE9TNmttcGJiZDBZN3hWUXFqNnhkRFNYN2dEVjkxMEV1cXY0Z1Z4L1k0cDNZY0lJTjFIdkNmbTJYY3hMeGVLTnZ0NDVBc0tWRjZSTFdIT3lnNyttbVVzalVtZUlweHFySGdOcG9QblZ2bGFIcHlWU2k4VGR2M1Y2KzQ1SmZjanJUanFDUC9DcnJBMXdkMXdBNVhFYlc5cElRVGt3SjJQMWlSdHJYTlFyMG5hUHZhM20yZTlNdGpXOHpmdHllMkUrbWRxOTV1VU1QOHJreGQ4SkNlRVVzVjRCak5mVFcwaFRrRG01OE5RV3duUm41U0lTcEErOGZMK2JWcWNYWm8yaEhQbEdPREpGQ2dYZGhFUXJRL0pZTkI2MS84NFdTYWo5djIyYjJXTzBvK1pwMU51eWpHbUZoUklxTzJteXJFdUdLUGZJOVpYRDJ5SVc1Q283WWVYYXZycnFaTXRvaERSMjNLME1QWFNLaGZaNnFMY1FqM25yUm15VUt2aWZIcTFWdSs0RnI1TllYTXdHMjhQc3ZVMEpyamxMNE11ZmQ2MUpQQXVEOU9WQjBza3lzSGpHeE1sZ0pmaUtPcjdBYWNEOVc1a1NrU0g1cGZJcjYvTVNXb2V0MFY1b0FGNG4yWjdrMWlHU3ZsalBKTHJPV2FiVWx5ckJKZmhkSXNtNmFUUlA3dWE1eEpKS1NScWdUSTQzaE9yN1BmanY0dElpWUU3VTlxSVA3bzNhK25KaEZyOHhEUXpkeSt0OVg1Z3J1MkdGYldnb0Y5Qk0zZG5hRTdQSFhjVVBwTGNpZU9NVStvT21GbExubHZ6Vzd2Q2Z5NTlvYVRCcTJMN2w2Y29RT29mUXA3ZCs2L1JYWmowUXpDaUFhb1ZlVnV6NUdVdWUzaG52U1Bhblozd2NhUVJCejdSdjJJMVRMVjRKeWVoWHlWSEZoMFM5YVF5My9XUHpFblp4dm1mM1BqNm9uTHJuRDVuL3lmdGpCZ24raXJBSVQxY1o1MTdweXFaRzVrNUpXMzMwaXJpMzlGYUN5TGdMZ2FBanVacGdsYU9CN0wvUitoN3pyWWt6OUZRSVRzRXY4d0s5TkswMm9IZlpiRTF1cmxwbEl3VSs3QmkrRkRaMmVnbWp3anNNZ05VQUlQVU9xeTFISGozTkovWWVybldDd3lkVGJjWFFQdWtBWTFMaXhUV3BaNmNzdVBMajR2ajNHU2p5c3VLNHQxRUlvQ3NjRUE5bjlzYkp6UXhlcSttR0tyT05LQ3UzcE9Ta2VUK2l4TTd2bUxjR0JaQTYyZVd0T0xRWVNpa3lpcVJKcXVJK3RrWEc3eHdPbVJIN0FzQzF3ZW00K3B6anFGaDd4bzZpK0hiWDlDN0xWa0kvQmJNby93M2ZnamtVbmJIaWVjOW9MNk9lSHVEbHhaQ1ZPTVpOYzdBOG1SeFVnLytjWGpMdkVzeTBtVEpmNnczeEhFUlRVL0EvdnN3a3ZCTlIyQ29XK09Va3h3eUtRZUV3RzFhMkRjWXVnU0VRck5hUFRMSjZSMmF3b1NBNkZmTjh3OTcwQVVBMTZxOGZkemVqaWZqYXlqeWx4TjFHTWZvcUNvVzBvK0tEaXpZRStnVUF4a2dEWVNvaktreThneUtUNVF2ZzlsYjNtS3I2V1p2b1ZhSTNxY1NlamhXWjAyVXF3UlJKNGVNZXY1KzR2dk9VQ1Bqb3NTM1pRTE50VW9EWjlrd2xuODJDMkdqTjJwSS8xblcwSXcrd2pLbytvUnRRSFFiZlhmTExCQURLcUFnbXZUL3ZRN1FtZmFLYWpyL3ppZ3NXV0NWSE1WS3kxMVcrVkdyNlUzM3IwNFBGSktaUVJxMUhjUW8yZk9uTndNdks4eW5kSVJBTFdyMDFPa0p6Y05ic1lVamlvcjlUbzAyV2d0aktKQWxsQzk3UHRaN0ZleTFoS0l4MnZNZmJ1ZU1zTDQ3N0NaVzVzSzFVUlc5a1J0VjEwL1FNTzY3SEJQWDJ6bXJxcEVjc1o1eGE4SE9WcXprblFYSlJ5ZHFMNXIycmYrS00raGlldVNCeHVObW9OZE5ocWV4TStOK25xOE9PL3pQVWFPd1RaNURXNDhyY2s2M1pEQkNUZ0dtcUJDSGsvelZKYVl2YVp1Ukd0czU0U0ZlU2Q5cEppRCtCQXUyVUpYOURESFlUTXBsTkxuVmQzVXZvU2JBN0xLVWRPUVU1OGV5WVF1N0ZsNkJwK1dkV0VvNUtjU2RNQU14Y24xbi9MUTdPc2lEdjRUZzU5OEdmVGx1Z3JtRUdsQVRoTEpteEFlcVFQVnl5ajVRVE12L1JkWXc4RWJTTW83WXhUYkYwamI5WEg1S2FZclVUNkNodFQ2dytpSG02dDNnS2NGQXM3czRIYmhVQXZjb3lxWk5jRGpDWDNsRmFHc3ZGeFFZY3N0eEFhaldLNjlzTzFIYXNRYnNXV3NMTmxWUEM2S0tUM2k5bU00T1ZRNVpwWFQ3SWdnSTlGakZwbENoNHZNUzJMUmcxV24vRFRsMFBIUVExeXFxSTZkSWVmR2x0TGhoeGVFRnFlM1RFV3FZSW9wdWJTVUdnMXZxOVljWngvSDBmMUE0aTZjcXBJUmZTYWxBSzE4bE1VQ2pickR2aC9lWFFVZ0hoa2dOZTc5SjA4c0lkTENsSElkOFhQalpEL1ZkcXdlRVByZDhvcWc3dGtkZElROVBMN3pMNlVKOUlIRDU4NHZHY2ZDWU1HSHZPekp1MW01NWYweDFCL01FVHFDdnNIQnMvTy9rRXhPQVgzRHBMMGhYQm80YW8yQVNuNURtbXlSQ3VWR01QUEFjZEx0SldwdTc5MkVlTjJqcTZPSlB5K0g1MVFKZjgxd0REcjBQQ1BTeG5sam5qNld5NTVNUGR3MWdLc1E1S0VUZXI4NzBzV0htY1BwSUVmYUJlNUgrdzhrbGZTUVFwYmZjRFVObDI0c295bmRZaVpZRUMwK1hTVmJvNExoK0FCelpzSGVSNXpuN3FRM2pEZlpGQkJxTjNwTDMreFlPV3AxZEN5QkgyUEh0MXNBMzZWSnVvTC9oa1lLRm5qaG5UdjBlY2lyK3hrK2pTelg2REtLVmNxT01ZN1VrZ3Y0NjVmNWcvT0RlOFlkT1djaW5qUVBJMkJMRk1DblJQNWxpVGRvUGxZODlueUh0Vi8wQnhjZS9OWEJ6dVB6M2UyRUs1TDJmNHh4a2ZsSmticzdjTHMzS2xicy9MbGRGYkxQeWVnM2NmRE01eWhKSHA5c052VVIxWVRaUjJLaFJFV042MElQdEQ0a3Jid3B1QXVTYkxwZlpJdEZmK25ndGRrNzRhR0F1Z2Z4eU9uK0dubWF1bXZnTCtNYXZCSXBmYllHUUJuTnlGV3lUV1E4dFU2ektTZ1F6cTViUDN3bXFvMmFkendabUxiMEFtSEMySHpycmwrZGFEbDFsNTlCSE5iSUNRRm8rQmVVQ1ZrYllOcTg0Y3diZGZUdktPTCs5YU4yMW5qYUUyekY4YXlqb0ZRVkd5YXh2RmJ1dUdRUXJnUGI0bUZPZGVsUjdON3FIQmRnUjV1MTJ1eHJ6TDJrUTdJdU1tT0pjL2U4Y29kdXoyWmJzMTBTQXVLSC9ad3pRdGR2eitvYkJ4b0tmbDgrTGtHcFJscmczL2tFTkpKcXZIMnF1eFo1TGtDMnE2aDBqZ2R5RE1NMktxQVV2dnQ0ZE45a09sTVFvRUdPV3d4MG1JOWtOL21mRCtwY0JORTJWUGM3ejI1Y2dMMGl1OENhUldTMkQycmppWm10eGlhc0d0bC9HbnQxK0cvNlNvcFhSRWExL0FUbVRVTVVGTEI0TGhKMTl5bFRJZFhCaHhacFdFVjdqVHRMSEk3Q003K0VUTUc0cXc1NUZOSlJuWHVyZzJOeFlWTDFteFVBUkpCMnpobHl4UWg2Q1RLZU9wdVkxWkVVUjFSKzl3TWRFWFowZjk1UU9QOXZkZDVkb1JFa3NKODJNTUdaSTFRWnNjRjhCSFBqYkFGVmRQcDhQZmFjRUM4aTYrcUZDa2dVS1pNWTJRenpvbU11MnlzVFJENmhmUXFTNzBtWDd1Z1BBUnNIRjc2UVczR0kveDhnUGcycFQvVk9UN1hXbjZEdlpMS21qK2k1OW0wam4wUjRBcGluTlp6ZEMzRnhvME9lTWJXNE1kRXdLY1pqYVRUaEVuOTFyRmpZVllnUk1OV3JUQ0dLTkNyWWkxNEZvcDJBbU55Wk1xT3lqM2ZnMGZEdStEa3B4STl4Q3BPdjlmUnRaUFRCeEN2WEJkZnp5S0wxY3IrOEc0eGNtOW9tYitBSnRLeDFXaXZacnVTNERWdU8rb0ZVaE1Xbklxank0RlhyNTJnV2ZIMFNWVytoK2JHNW5FQkJxRFc0V0tTVWVFWVladmtEb1FJM0I2ZEplYWlqampEUlBROWIxNzBTSGlYVzMwa1pLN0dja1JTa0h5KzB3WHpudkN5QmF1TFNzVzNOTGk5UnJYMUtoUFVLVXBuSEUxelBCbmNiNDJzN016VUxiZlpSMmtOSFRMM0R3cTNWT3J4andWUStsNnYzOHVjR2tOT09UNjZYaFdhNHFrblBoUnFNc1k2M1dNanJYMG9xOVdKV0Z5NVNlRk8yOWU0RjVsMkc4amkzVkwvak8vOWpXNEQ3QmtTK2tTa0p5RWRkaE9wZm1hNXpiZGtUSTlYZTRkYTRucGQvSlZQZXVPZTlsSHpjdnVFZFQ1cU5ISTZabmZSbURYK1MvbWFWV3BaYW5OR2lrRC9Wb0Z6dW1xRFJZcXhRMXRMYWxLVHZoa25vT1U0d1RLOThQNXc4bUZGOXNJekVTMjBMR2NuWVFSSDJsY0picHpISGtZeVRFUFo2dlFqTXloeUg0TmVhQU9Sem9kSkV5QkdNS0VUWnhXemFZYlR4TW9GSElCQ25sa3N5RmtnYmZJNjB0anRuZXRHc3NKQWlDRUFYL1pwd1ZGOFFnZjZNMzRjSHdLYTRFWUd4ZCtJazdRbWtRdXkxd3VkRXMyMW81QXBveGRwbVJVQ253RFl1OHBOaWZBMExvV0o5ek1FWVRzU0JBdDQzWVFtOGRPVkNzazc3cEFSN2pCeVZiVmFvS3NRZnlpbHIyS2hIRFNvaS9aRUlyRXlEMDllRml3eEVDYzFieEpNdnlHaXh1d2l4azQ3SGxTK3d6Zk5tQnA1UGVrUHNXWmltUXRzVVR1RGZHYy93eUt3ODYyMEg1L1c5SzZ6SFFtRU1xd0U4REMvejFpOENPcmZDM2tyMUFJTFh1eHM5bGZSa2piUDZMOGZNMEVpbk1uOWw3aHYwek1lNFBiVSttcFpocGdFU1ZRc2xxZmg2NTE1c2MwQkUwOFhxS0pQeTJYc2MyZW1FdENENzczcmw4SVhrWm1QcklsWThiZ0ZqeXNxMXZ2OUtGUUZ2a1VXUmdFc1NzNVBDdTBsRWZvR1lNTGNyU0h1MitCdE52cmQ2YmpSVm9uTURJWXpVTVhOT3RmYjdMRWMwWk5PWStVY0JCeVBjQllYMHZjaDlIV3RCMWdTYzNvQjNIYXY0OE5sY2Q2ZlpBa01YVjVhWnd1WWwweERLeElhL3ZzSzM5RS9OQzFydGVML0VselAyaDNpZTJ2alFsV1psUGJSZEVnLzl0VjdFNVB0OXlYOHVqaHNJTzJSam9MNUh4OFF6cE40cEdXczY4cUMwR1VoaElrQUx6QzlLN3JNa3I0enFYUDlCdG90Y1RzWDM2emtWNlNUbG1NQ3cxeThOYks5a1MwY0lYcjZEREVDU2RFMXBFOElqSG1McTFVUno1bGZ4WEVSejhzSzBzeGo4SURFMnBpUmR3MlFVWWhSS2JybEhMT29TM2ZMbVFhVkhsUFl4eDZQaUNaQTBjWDBKa3dCZWcxMGpiNFc1VW80ZzlpdERiVmpjZis3dWtKbW93ejM0Z1lrMEszbjB2YmI2amg1dHdtVWl0bWVlVElXM3N4RjZyYktqcTVrVVR6NVpESHB5dzZzM3dKcGtscmJCVkRPOTVmV0lWWWRiWVRtMEVuUGV1N1ZacmtiS05kKzVsTklhUStsaHZKd0xCdWdIMldCSjY1dld0bTBOM242cGZVUkt0T2s2OGlmSlZCT3Zod0ZxWGNIRjVid25HeC95bzBBSlIvMzMvYWFEY3NzMGdwWVRUazEyd0JLT2wzV2VVZDc2dFJ3UlJQRGx6KytJcjVzTm5BUm5DUnJXQmpLVEx1c1N0Ny9ITDZXNGtJNmxHaFJjSzFqTGtPUXlVR2U5VnhVeFlwVkdTWDlCTVkyUnIrTWUwR3JpTXFxVXlsbUxUTmViY1dVZ0lhWXJsQmpHa05vUkJYUmQyNk5MV1BiYTk4NlFYaHFyVmNreTRPcm1IcW9DTjgzMlhnSnYrb1JTakc3bHYreHA0aE1hU3AxL0loaUgreU5Cb3pQaW1wVHlUMGJwcW9Oc2wyMy9MU215bTZINDloMzlHM0wyeWFoUDduMGl2dDhpN096Qnhhd09jV2lmcVVmWVdjZG4zUkdNV1kweWsvcmNBdFhQUWZYMEVlbHk1bitrNEFkMnBiWGFESldubENTQkZwaXIxVUt4V2RhbVlsdjQxR3RTZUF0Qk8rdGRmSzFNOUtpWHFEWVorVnVYU3RSaG1QeDV0dU4wQTZDYllkQlhyM2puL3ZXbUVWT1VPTitzU1hJVWVoMXZiWUwzWlQwNlZiQ2drdGQ0K1ZMMkZFV1g4RnhoZkVzZmpKRjk4enhhNW9GaEc3RUF5OWF1ZDJabEU0bU5vc1c4UlIycjhHam9ZVnFxdnZIOUxBeWJwQndodEJDRXRrTDFKd2o0SzRwbEo4bkhHcm12MzVXZVRRTU4rNXJsYTVvNGtBRVpDeXRoL2NBaThWMlk5WTJKWWpVVTNnbXV5bUdlcUFnUk4wbzJDMDFCME9YeDlRUm5lSk8wNG1VM2x0TDU5aFIwTzB6aHhxeUgrNkhnb3picXhwZGtZRFAyUXFtVGNncXNWQ0FsSXI2K0w3THZ5MEVkdW1hdDR3L045YmQzTi8wOVNyY1hMajVjWEpOMFRrT2JpVXp3QzJwYkZORFc2aVJSVnFkRndmb2xVWi9OdGo1NWR2Mld6VXlOQ2RqQTQ4M0NNdEtzMFNFNnZ4MndIRU9LZnVRNmt2aEFBU1E5S0ZqcTBnTHc3WCtkV0tGUXhmUlIvcnlSQnhpUmJrRzVndGNuUnpnRFF0bDBkb1JGOHFObzVHS3FXMnZhcFFMWmRkaGZxUHFEQkFUSlJwejVINnRvbHNzVEpuM0gvUHUxWEdIY1JQZEVuSUpZK2c2VjN2SmZKb0VkYW8zWWp2b0t4MUptWGNJWm9FZCtEM2dqUTJGTDN5VjgxeXIwQzA1Mms4ZGtNT1ZaOVF1RXI4Y1lNSm5YSmZCSDhpUmVYZFphRlhzRERVVmdsUkNYRk15bTVWVkRMQjZTOUdIMDRlTHhsOExqeFpkZkdNSjkyZy9KM0Raa1p6akRaS3ROK0lRUk4ycW1TcllLdlV0MDQ4L3RmU3NqR2ZYZ3N3OExjUXhqSzNjSHBsUExHT0xpTXJxRTQ5b0xJMTU4b29rWG0vVWh3c1VqaUZWQVNVRG9PUkpnWnUwc25lYXU5Z2I3bWJteFA5bE9LaVp2RkxFSVV2bjNraW5YbjJrOUxIVmdqNnBiRnlLYm1CbWZLRkViZlhUMDBRcG9YbzYxcHJEcUkrVEFuYVIzQjc1YnU5S3c4cyt6RDg3Q0JsY0Y3Nk90WXBvMU5mNWR3UzNXMlAxQyswdGlwaENnU0dwaWFSTVFZenk3OUpYL1k5SnY4bkhCNEt1SEs3MHN3MThNL00rVE5UQlhKbUNGL012ZlBIN05jS0hKSU5ER2krZ1cwSnMzOGc3TEJDSW1QUEpJTnFlMkVpak5IN2VsV05FZFRjMVIwanFVQVV4Tm5GakhDQ2hrTVFPalNtRGZJNWZieVpWcjlPeW1CeHp0RTlmazVBL1lSZ0VMaHhEa3E2WU56aVlLVnEvY1dSaGUyd2ZKY25HZjdQeEVMOXJyVkhiRXhBMnhjTmx1RDJheElqbng4TWR6c0poeUZTbXBtdDA4SGJZV2tTa0hWaWxiY0hqa3VQNnZLUlY4VDJJTG1iRVQ5KzdrZ3ltMUV0Q1B4T1ZSNWt4dmlJcHJJaTAxYlZLRStBSVU2dkFpKzcvbVZWOGhZWC8wRWdLdjQ3RWJzVHFBT0w1M3I3S2xoWlBLMzBlNndBLzFmOFowVlFDODJlWExnczVRdlJxMWRNMHJyS3lIczdiVGw0QmV2UkY3OURyMVBhUjI2dURxelk4Z0xBaGZjcUY5VHliek8wV2NSbHg2d01qY0MxekFld0MyZHliRHpWN1E4SE1DV3g1Y3l4MEdBWXEyWVM4Z3ZPRFdaajFrWkZPdGxNT1VGMXA4UWVqcERaUjFHL2pHNXB5cHltNXpoaDhYWDRKbjlEK0dKaUhWMk1sWUJNL1Z3Q0NoZGpVQ1g0a0NtNS9TeWpFWHJyRFVPWnVEMGo2eVNEb0ZUa1FscG1KNXpOL0lQQkFCekZseXJMWmxpdG5WQTJNd2NzaVUyVzNzOHRPb3hTZ1grcjdGL0srbXEvalgzMndwbTE1eFlEeXpyUG9wTWx2QXVJWk1hbk1QTlUwWFhmamRrUjlYeDVsUkFJWDF3eVpzTno4bGpEVm1YUExOeEJUaU9hMXB2MWJiSXl6OXB6c3QyVnB1cjY1NHZ3MCtRSVFxRDFPWjdjSWpmdVBON3ZSd3MvN3hXcUVNMmVibE9sNGVHK2Jnci9nVTE1NVJrdUgzNjZpdE5Zd0laV2QrYVhzR2VXamszRng3U0IyWXROa09NbjBMNGNtNkVGTFlDQUVEWm5SSFFCdWhxUGxKdXh1cXI5UkYydERRTjg1NGpEMERvdWN0MTlCSVMzWi9lc2pOWE9mY0d0MzhkaGNjcU1Ccmt5WDZNbmJiS1RzdDhYajhjbTQ5OTRnSzNzOU1HVWErNlk4VzhzSWRkOVk2MVRXTklXbTNIZFM3dmEwTG1TZWFLRDFMNGMxZWJGNklzVzZlSHVNekdEM2diYW41Um9NaCtkSHZ1bVpySFdCeVVuVXdNTmZPV0pOaGk1bnJHclpFalEvSjFReFZoUTNsdE9DME9rTm1tZnN4d3lidXRRdjVlMTBMa2poN1RTZEw3TlJBZ0VqSWJOV2xaYklIVk5CTk4wSzlEOVpnbzc5T21HMzlOUlQ4NVhpSCt5eGlCOWcwcHBlVkRIblVtVFV6WEk0SjU2L3BIN0VqWW1jUGJzNmxqTmVHQ3crc3JTRWgrWER6RHhIb3dRUUtncjFVeWlnaGhWYitqWHZCMGlDNDJPalJDOEJpRzdSdE9CZWp2RjFUWDJEaE93RktLWDFZMy9iZ3JiVWpaeXBBeFcvRFBuRmNGODdWMzB4TlgxbkREWjc4VlRrOTFQTFIzMnM3TU50dVY2YWl3U05WYTdqWDNxNlgyNnFpejhBbUlteVVJK0xMeURod0JlS3IvelYzMUROb3FEVDMxaVllV05WOWVmMDUvcHNOK2xiUEpZd1FjWlRxWHFueG5Nd3didjN4Z0tZVnJJcGdkRlY2MVVhZ2psWjJicjFtMFpKOWpFaW9paDhHZkovRDBjZFRqd1ZhVmhmUnhVMnkxK2duMmZPajNMQmVUdGw4SXpldnpWRGdGNUNJeGdidThVWlREa3VDdjk2aVZQUzdRNm10NysycWo5ekhzOE5YR2plVXZlS25KWHg2VEd1VjVycmM3SEdOZ2dGYVVDNUFUT3NrOU5xaE1zMzNiU2xTWE9YOWRDMm1ZRlRCMkkxQnJRYk5mUityQzM0cDVQSjZjc204RVZCcmptMThUTkpvbmw3aEVGdUhnM2JDMG1XZlRIZmlwaTh5aWJiajdIdEdaR01ZVmpFWlJQazNOZkc0S2R1ZDlEalIxRjRlUWsxL0NFci9oU0tTcyt4TE13SndVZGRKRjI3d1p1cnBvcmpkQmpvaUxBTzl5NzVZdWxZSFIvNU5mb2REV01RVnNPeUwrZU5JNUtvYys1dFMvUDlWcEpLbStpMm5saVg2NEpYQWVrM0thanM2R2hKdmdpdENNaHc5cmw5NVNjU2g4WDJ2cXZPMWlwUmx3RlgyM2laUTRnZjY0ZGEvQnY2NTI2MmVNdVU1MmVHMnQvdXlsREFKd3RzN2pCWHUxWjhCb0w1SHlTNHgyQlBMNHptSDJpelBuWTMwQ3RSbi9BSFY4alJScFAwbXBKdkJvNmg3Uy9sWWJoZDBESGh3a09wQVVmUFlFOWlPK1lra1R6Tk5UZGVYQ1Y4TW9Zdmc1bkpIQnNPS0tiVFJucDVnUk5DeGp0YXQ0UGRvcHlUeDJwbDdCU0V0d0pkWXUzUlFjc0p2L2phUngySEEzKzBCbDJxK1lKSkkyRlVwWU9kcFNHNExYalpsejUzSkh3WVJVUHhFY3hFdmRNaUh0THBuYyt2VFFIek5pdkFNNWhlSS9ueE9MejZJTWcxUVU3d3Riajk3U1M3QWZxdmlKL2MvZEpMRmVPa2tFQ1BLZmdZWWFmelhtTHQwdXBlVGVwZUVsNkFXcDAvOHlidXFXVXdUVlV4bHNaNGZ1Ym94MjJpOS9KbXhMQndEa1ZlVE9wOThNdG9sbm1HMXhYNjE0UFRZYTRtVlozbEZ3bWRaeDU1MjNJeXZmdldiQlFjbzR4NVIvVmozcHpGeDMrcGJHWEl3MmsrUC9jYk5qNTg5VjI4am9ISlVxZ2hyemYxbUQvVmtuTFBNSGFnbzM2TXZldXlzdFUzMkIzZGkwcFRGTEYzK2Z6V1FvQ3gycFFsbWVSSmVNSy9aalVCOEFHQnFYOEcrRWt3MnM4dFQxUFNSVWoybVJnYnd4QUNNc0Fkd2JHTjRyWVVqMTNXVDlmdEgxbkhxT2NUTitZTHZibVZaSTZhTUhtNWVyQjNpMXpISDU4ZDRPLzZhaU9sUFUvVGRaVSswc0I4K3E5d1lZTm5nRThwQW9xYXhmZ3B4TUxJZWovY1QyODFqbzlXMlcrd25LT1N6Mkhsa205TTFoR1Nyck81MXo2TnJnNHYrank5b0UxeDZLWURuU3RmeWZnUXo1cFdud1I1bDdIRlM0Y3VaSkplLzBMVklnNFVkdGt2dEtuUmhsaWVVYmw4eGVYRlJwWmlQK0RNK3NrNFFmem9oaVJ2RVhqS1VwQzVjVCtPV2tRYmlQbVk4UkkxV3RHaDdJYjFTRWsxNk5SOTdVU0tSQ21sd1JHcUdWazRFWFVXMVRmWkl2VkVacG5EZUdYUm1YQVp3Y2p2OTdzaU9QNHlvMnd6bTZGdXhpb3pZRGV5NTdPT0pvK0xQOTdzenpyaTlaK3ZibnhENEczbWpDNEdwcWVET1d5WXJDd0NVVzhod2M3RDAwOStqNXYyR3BQR244UytoUjZqL2ROK1h3SzBKR1hJMmtlcmdEdzJBSU9STURBOXpCTVRtbFQrd1oxVWNLZFNsR0l6anJiY3dFZEI3eDQ2QkdPbUg5ejJOKyttL1hka2JHV2hVS2xFUUgwa1R4OEpKei9hNWpBMjlZZjJwS0l5a09EVVBEekUrRUViTkdkNitLTndsM3B5cTVjWFRhZTR1cHc5Q1ljMzNCckVjVSs0YUVrczVWdEowbEJCQTcrZTVEMzdHeHdoVkR6UnliaXpwYW5wVWIyeDdLQ3A1SnhESnZzSjZ5RGdlT2Q5dzlVVHY3WnJ2Sm9GdTBOMlA3VUhvZlRBb2NCNVJaSnU0MXA2NzUrSWl6S3ZoeDdVMStaUHZ2dmtJS3ZFVjBGa3JzQ3RLZnJpa0ZkZzdYK3JKYWlFN2I3ZXBpb1JneGZtY3lDcktnNytRckxJdFRyckRvMlM3bUpKRVZUdGVsSkVQWUJyUmVCVytSdlRmWEF2WGVUWmlwY3NuNjJTUlJITStrTXN3MWhFbktVdkNyZ0tRSWN6VU9qYzI3UGZMc1R4amNVTTVFS2NzYzRkYnZpSWM5dnMrWUk1V00yN1hIa0ZZODZXYWluR1BCcGJrMjlnaEdlKy9vRlNGNk1FWTVXTXlFemtGMWJSb1RyTFBHcFpyc3EwZkI1MDlEeGMveFA4QkpVSDZkZXROOTVhQVFjSXh3RW9aTmRyRmNTV1ZmSWk1R0dTU245RHR2V3ozVlZGaVVBUFZYMU1TcnNpUXBMK3lpWWtFZlRFMDFNYk9Hb3RSVUhuYUxhQzZxdnAxTXBtNzhMalJmTmQyN1ZreFY5cVIxdkdTSGZ2RFNUVE5QVEhOb2p5Z09ZOVdUUUJIbEZ6ZUxWZEIwZ3B3THMwU0dyMEU1Wm1zbWZqMHVxR1U1T0xLMDYyT2JSR1I5anFzY0Rjd2x2TEVRVFE5a0tBOFJuSU5Ocm9RRkQxbS9Da3FoZWo5cXc1T0lkOUY5QVlzamRYWXdPWTJQV0trYS85OWk5YUJQVlZZdHM2aUxzajhkUWVSUDVxY3BXRmF4WFN2ZDJBRGtyMFVHRkxzTzBJaTltaytkQ2ozdExoRWJ2WTNqelM4emsrL1ppSjVha3IwTlFsVTB5UFprdUFlOXZtYUlTRkd2VmhyTU5mdFIyUnAzK3VEQkdqZHVDMXE3OGJXMGU5VWZ4aUk4TVRwWWdlbnBIdFJsOXBFTEg2WnFwM0xDQmg2Q29hcmlpbHJSblNuY1Fld1QzbFgwa2l4QzJlNDN3dlV5YVA0c0hqV2VHS0NTekxKNlgveEduOTIwT294MTh5RTY1NERTRDl1TFVoQUltaU9CZVNxaWpKQXhBZ0I2UXRZRndqVGxCV1hVUG9xbXVyNjd6aEdKZm1Pb3pyWC9YVnpvaXBtZHRFQzlPMXVRRGdFRFFnZ0VPNkppanhXWXI2NHpyV05yV1VGUHBVeXVIRThKSFpMS2JBL0h5VGdaOU0xdG9zS3BQczRndjhpeDgxT2RUV2hCRGRiWUZFbnREd0pGZnNxbUtDU3lnd2JpSDNEdlVlYm9WOW16dTh4WDdQa3ZOb1psTEJWWlRLcnR0bVUzQjF1aVE5V3VuMnMrUU1lRDV6TkdMVmRQZDV6RGVUSjVEekZabkQ5Q0ozVXpiRklSMDg4Y2d4OEF3b0FMdTh2UHRMRmNaOE5WNk41WktLRFlKaEhHMlV4ODQyK203VzZnTWp0QzludXBsODRHTnZueVlHWVNzdG1YNkduSGJyNVRjakx0N2swaVRSeUJRRWwyNkRhdzY2TmZVYTFxbmJqVVdUNkthRUkyUzlrcG52dVBDLzBpYUxqWTJqY1NyQTF1RjU1WjFaTWpyRE80dHBMdjh2VHo2WHRlWmpSUzlLbXhKMjdpdEFMOGZOb0dSdmI0N0FjdnByV0Z5MllkTnNPdVl3eUU5V25hSHJ4Q3NvVlFoUGFCY1pCcHpiL2dpdSs3UUdBcy9BdUkvTFVpY2Z1cjFkRFVlUFBTdHJTb09ybFVFcXRqM1c4QnZaZDNBZ29iTTl3d1ZTY3BXRCt2UFdZaFgrMTFLYjhtYTRZQ3BOMjVJc2Y0a3hoaVZMYVNqTVlQYjlxRHgvczFZbU9JMjJNc0tlVlo2T2N0cTd4TFdwWmoweDhsK2V3MFRPeHd2bml2czk3L0VBR1VKTmZRUytFVFU2a05VMkwzVURwZENDT0JCWGdnMkZyL2t6TUZ6TytBbmw5L1VGUkRzb3Jyc3hxS0JQUWR0WGVZNUpCbnlMaWFBekVKTUpiVTZGd0dJR0ZuUkVtRFAxZVgyand4dTdQS0pJbXBRMWF1ZFFCTnVPNXhkYlhuK0xDV3ExSXV4Ui8rc05rRXJFTEE3ajkvQ0pYZVE4ZEljRVVPL1ZVTC9TOGdYeDdnS0pwQlRnZVFTcW8waGJxM01Wc1cxVFhrRzFiWC9wRjk3d3B6SjBrUytibUhKYWlRcDZyQzg2S0Npa2RtdWlPRDdGU1l1NUdPS0p1YmY4VXltNEpMK0QrY0FJRjduWk81OG5hQ0VUL1hqdk5PRkdWdk9VUjZaZlVvbjlaUzczdDVPRFlsVGRNRnRkWkVDNmd6UlJkRTc4UTZXWGFCQktNOTFoOEx6blU2S0tnWk9hc2tuR1NFc0F2ZjFpUy9YMGcxZ1dOcndPMm1tRTJnRkN0cHAvVnZxYm1WdTFzdVhSR1UwUXhKN3p5WlZtQ1cyNnIxY01XeFk3SXJISzlUZVl2WTg5ek1iY1hUVzNVbEFtajlkRTBPVytuMDhvMklPdTlKNmYzYXFIdlBzRHpSSmhIekdPWFdUS0RZOWpwS3pOVDd4aHhDODdoU2I3MnNJT2s0bGVERTIyY0lUQUlMMGlMMnhDUENaRlgzbitCSEwrZHoxWnhkekF0N1Jkby9Ea2JnaUxiVnM4WnhiczlTdEpReUIxUG45ZHA4aE9rVGxXeG02cTlGUHZmSkthTk9zbHVFSGdTbjZLcnhEbnNsUmVyRmNkWFRzQmdwSFpUTjJ3anBIbzAzNk1wRVFkbUQ4N3drc1B4dVBqN3VKR1VKM1N0WVNOUk1FdERpOElITkp4aVRucGlSb0Z1Slh5d2c2WW1Ga2VsMTNIOGcvVTFBS2VGYTBoV3hPUFhhWi85WTBBN3JhaUdSWTd2dXFlaWhVTkZmbDB2OCsxODBtLzdvS09uM2VSZm1kdVlwVnlpL3FkUkJKZzI4Y2RpWlBrZFMyQmRtRUl4QWtGWUdWdVlpUUJhcDl5c2ZjZ3JsbUFrRTVHVzg5VDJ0d0hzM3ZVdjljNW8vMHk5NTJCZnlDa2hKeERLeSt6Z01wMjN6UHkrUE1yamlFZ2U4UTFGcmtBbm1naEUraFJ2UDRZSm1XbjRqdCt3MUdicklWQzNFYUxHaHhZOVVVWEh5elplUC9QTkdzYzV0WHBhelpSaVdWM0NoV0hxVEp3akU2bmxBYXkzTkRSRG5PcWQ5Z2RVRWtiQWcwREtoTWVMS21BSWhWM3A3M3F2S2pxWGlUdFVBZFpBVEpEOHNNeDJuN0xNTGY2WFc3VVl4WXA4ZEJPMG9BYXM5d1NJVW5SMEJnWmp3bWVxa1dhQ0I0Z2FYRkxCZEwvbGo1Wk0yQ3dja29xRUo4c1RwRlVTVkEyVm9rYklMeE1tMFVxc0lpUzNKNmEzWEM1OHdSajVnZWF3bS9Ka3Q0UTl6T2ViSlRMdmFsYjJJNFY0NUhxbVZnK2txMVhGTjltMEl5TFk1eVV1NG1TbjBhUlFXKzZ3YTJ5eCtacjVpN1VhMG9UNXZRR0NsODQrcXFHamFCZW5ZMUhTNi9ROGtGWmdjMEJ6NUhzVkVjM1ZHRm4wVDM3ZHBOWFNmaFg0MjkxRDhnZ2NxWkdDaEJkYURCZW94cDBqTFE2bHB4ZVpJY1psaXF6VmJZc0NVaDEzMGdmL09EblJsYnJDbFZKb1FNeklqcVA3SnliQXVQV091QU1KNXVpVmM2ektDdHk4WGZVbW5DMklNUkJsM3p0Rjg2cGRGWm02SGF4QzRNMjFrVXR2NDVNRHA3TFhMOXZHMkZlZ0VGUGtzSXJ2SjJ3dVJxTG1BVFYxTWdlOFdEY0NrRS85Wjl2L2Fna3prSzJBMGtLRHN3bFhqUDdUbWJwUndHS0lGY0o3MFVEMm0reTgwQXJiY1Nyd0NjaHJjeDVXcUFSTUU2UGJvS0pmSXBhOUdjaE9kWWJMbVp6MGdUZHVQbUFKemYxYVJsdUVRU3RzemFyQU0rdTN1Z1duQW1zVWtkdnZVY2dHZWNXZ3JqNUE0T3Q5bFl1Ymp2M2pFc0RBTi9Qb3lvc1V6cm9xYitPT3UyWlF6YzlvRHMvZVlDdGF1aldjZFV4SzU0L3JBQmd3cExBTnZmOG52bzFTUTRUZGhnZ3BvYUJMUE96WENaREl0c2cxSkQwWmR1cjdzRFJmeWJKdkVGWlFUa1ZsK0t3SWZtMk5wOHJMOEdMM2t6ekw0KzdENjBZUVYyZ2c5Y0sydklDaGQxRzMrSDB2TXZpRUZBbDc2b0pzd0FkektzbzFmWTNWV3JScEM4STF1djNBUjRjQWhMZUUxcUYwTEszUXpWOE95RFlBK0ZjMHRKTHRIdFFmb25NMHFnYzJ0UzN2aCtIb0w1TXpwSVRiMGVuSlhKdS9rMkhxaGZJbzlKOWQvak95MHcwWUFRTUtYQ3FRNGNscnhEWlFuRi9sMWlzZkhTT3F2VjRCc1JVTGpmZElxUElONFJPZTZZT2JYekdiSTZEUzZVbmVSM0s5c09xSHJaM21VVCtTUWhFN1o3UFBYbUNkemY4d0pDMUhZY0YwUlY0T1JJUThSODFDSjIyRm1Oc25WdkVpQjBDSVEycEVaeVZnZ25BaC9VOWZEaTNRTXZqSmJLbzZqT0QxTnI3NVZsREViK1RkRVdNdUlhNElydUt0V2ZZV05ka25McS9zVFZQSjgyOWNVcXlvNjNBWDhESkdEdFZmNjNKL3hsZHFXZ0dmRnNKd1F0NDJFWTQwdkhqd3JIdHlrajZFc1RzVkkzWGREVkhnSDlFRXJQa0VmakszMnNsZ1dETXV1dnR0OGhDWHYyUDBLczhqdnFHbGNJUTlwOVlnYU5CdzlmQXYydkkrNFBwTmRVZkgyTm9YdDhTaUozazBnb0IwQ3QyelNsSldnZkEvcjJJa1JXdWFlQlJXWnljaGVvemJpckdFQllFZGYvODVxbE1tMG45S3hYY1hqaVpWM1RpZmo0VkFRdjBXc3kvTkpKUzloeGZ6bmJHVFVCenB2c0s2QmlYRUR0Tmdsc2c3Z0ZwcTNObCtRVlZheVdjVG04Qm9xMWtUcGdmS0MyWHhRUDBIaTdlNkp6Z2d1WE1KaS9LajB6QXU5OFlVQW5mNXhTd0Z4Y1d0OUc0bnE2YjFUZE01UVNGc1pneVVJaEtlR3ZXTCtQVFFjYXlNcllFZ1VCWXFtdEp5a0pIc1ZUNWN4b3BIMk9kSEMraE9pY2pvYXJBYkxXckhyWXF3emhuNHpEMlo1TDlzdWZxblhoKzJtZUd4RmlGSkE4ZFkzN2NlSS81dnlMMWNwSHRhWTdzZzZPb3d4MTFNVWcvM3NBdDFPR05WMzhYbHdSWlR5Uk9YcURxZC9TK0NHN1Bqdnd5VnRsRGNZUzYxT29MdGJEUjJZWkpjZXZtanNzVFNLcDErclhUbE5XRWJWZHRvblorYStqOVlnVWxLMTgvWmh5dWZxb2U1Qk9QZnM4d3J2bnN0QWpoNmx4QkpYMUc4a09lM2RNcjVZdmNORC9EYkpWVXVzYk9JM1FsK3RibGdnL2RHNmdYdjROSEV1L0h1MUJoREpYUWNWV2RoYjlpNzNFMzhQcjNCVHdsYXJVbzBOaGhZWTJsVjl6WEFsSGVGRGtBOFZuMkhHNGZCSk9lQ2NZNDExVzJnSUFYTlFnbHBUNnEvZ0Q4akVlVndicTRTWVZEaGpKUTR1azJVeW1vUHBNUmg4L1cwRzhqaWxiaHhoN1h6L1dmVnoxU3Mycm5sWWdkcVpwTFJ5Q0Z1UVQ3eXhod1kvR0JhQWZjR3h4Y1MzVlRuZWJBcENJVFIvM2NTNnIxS0Y2VUhXdU92NEZIbHYwNks1eFl6U2xSU2hxN3l5KzhGYU0wMHBGWFhCbUxQU05RTTNvVmNLQjBYVEl4cmdkM3BSYU5yM2xkUStqVUVaYzE1dFozV2srajduOFRXV0pRK0VNaE9WNHppSmxyK1Vhc1AvZUV6amt6RThqTVl0bW04dWV1b0ZLNDZKYk5wd1VuVXVqaEhwSEgwd1VkeERCdEhwYTVOUTNJODh5cDJNc0pmUjI5UFR0ME9YdG1zUE5mUE1XYUJXV0V6ZjlpNjJqTmNRRkQ1RUttRitORURmM256bmlTT2dtZTFZOXlVN0tQVnFOTmpxQmg1VlNhdG8wdnY0MVY4TSt6ZE5kaERKcjJsdjVSMGJwNkhnSElwaDR4UWhjcm1FekREZWsxTWVST1hDOEY4bGQ1TFNSb0dtVW5RdG9scEtMMmtoc3dERDY3SzMvRzJ4WWIrTklaWVd5YWhrd1JGVXQwYnFJZ1pIbFcyNXFsOVVxMDg0Mk9JRVNGWFJvNkQxcjBlRkQvY21ZNi9MVlQ0UUxpVFJQYi9NRjIxaVJiVldHM3pTNmpXclhQMjllV0h6OHVERXRPRGNvd1ovdmJ4ZUUxdHlqVEZ5MUYzRlMrWXhSRk9aREhMZEVNajBuNGNSOENLUWdsMFVGaVV2YXdJTWUrbW94UCt5VXpnZUdMNGNjYUVhQVpHRnV2dHk2L0V4bEhacXV1ZFJLUzF1K1BHZWhqSXFZWTcrMllscVdYcTRTME9YczJhTXIzWDlqQ2Z0SUl0Q3p2ZEtrVHBWZk9GeWV5RC9VOHp0Sm5xcGFlS0Nzd3QwbWdwNWp2b294dll1a3J2dWozcStMbEtnT2FQY3RMM1dMYzB1U1l2cC80bElCQXNWbEhlWC82WjBuamlCT1NXRUR2WmM4cWVPS3pOa2d4V2c3bXhvWEpINmN2NS9VMjhBUWZtZFFjayt1MUJkTGZJSkN1TVJBcHZlODNGUHhGSWdmZEJmVVdMU0VWRDkrMmdvcmFjWllLS1NRWHJvY3gzNG1rWXhNMWFob0lPWEN1b1ZZck9tYnFGYkJ4R05relFQc1BHblBmTk0zMFJPQytXSk9zemM5cWsvR0NzY3FYUGIrSE1iR29WRERaMmdLTDNNcFIzZnQ1MTFNeFR2dWUyczVzU3lmWDk2VGRWUHFQOHA0VkdRV1FjOFdDWjYrNFlMWUdGdVJ3QmRYQStzS2g3dlZ4RWNzVU1UM2FXNS8wMXM4d3QrZXl4cFB0a0RFSTJITnNXemRCOGc5bGIrOWNTNHZpbGRIQ2JiSkhheVJmVm9QMTMxV3JOVDNnZkJ1U0lKaFFJU0h0VGVWeldrbDlLT0hEYjBXRUJHYU1veFFnWEJTYTZtaFhHYnhxcHFFSDlYOUJQbUlMTk04YmRqUTNoczdvYm1PTmdrVVEwT1dsUWc4U0lJMXFlTjJ1K24vamJwQ2dEV2JFYTVJbEZES1dmTGZZL1hIRVloME5Dc2owcFRidi9HRTlJN2xsMjFTL01LN0xoa0g5UGJlRlBJZTVrempFeGtodnhhaGNYRjFFRWhCbzhlU0N4c0tNQ3pvWHg5MzFCb1pPNW9HOU84T293TVJoTzZ0ZXM4ZjFpVDRiYzF2NGF0UUF5SXRGVFNYYkJiY0l4OGhQODVPVitLZGpONXBLUlJBZTlRcW9kcG82WDdhRSt0WEM5V1hTMll0SzZoLzdDSE9TQjJxOUVLeStwVHBBdlJ1Lyt5dHJOeEdvQ001Y2ZXaEhwVnRDWnQ1ZUNKSkJRMFRrdWkzeVl2ZGF1L1ovS09VWXpSTWhlWVZ1UFNPc2l3MWl5VERDRUgrWWplTW5udlFmRFUveU11QnlsN3VLNXp6K0xrV1JYMDdvZUR3dmFwMDFCNUFMZW1Jei9TNm1RSzFIY2pJc2lURERybTRqOWlKQzZPa2tGbHVGcGduRDIveDIzSFhVMGNHbE9pNk0xaHBMK1JDSmtxeVVpclcrT3hLVENyTUpjM3gvRERoZ3hXaFBoRzFpNjd0NWo3Uy81akprcWUzbVNyNVBJMGZBYnJvQkJTWk1Ca1BWN3VCendCazBBZy92WDJOWTNmcDJrVDJkMHIyRGFYREZia2pTMTVBak1JaXhaRkppT0prVGlZdU1Qbno1d2FRd0d3N2xwKzl1OUZDUFlMdU4xNTdoRnlvbi9JOUZZeFhUVTVrZnNKajVIbHdDbEtpOUUyMjBhVDNKbUNYQkxKQXM0dEFvNzFVOGpST05Ma1JBTDFKS1czcm5rVGVOOVJ6anRSdHdDd25wd29UeTRsZHZNbTlOM0RBNHhlNS9ZdUFQTmZoaHl1akhYdVFVOG94dTVoVkJHZUdNZXA3b3V5d2VkRDhqWk44R1lqYnJHK2dROW0zZVZXTHZXdktoNEJuMXZ1RnVxVDRIWlpaS0VGeVF2U1F6NmlmS1FhNmFmd2ZxUXlIKzFOZDhCajRveU0xSGJsanRPbEhQdmIyOWMxYjZ5MkNUOVJsaE9IdlRqK1ZpSXJVN0FlWHBzSWdqR1ZKT2JrY09BYWNWQktoMnpWTkVYTkRzL2ZCbVZsUEwwL1RLeGNUcXZySS82S3FCYUQ3dGp3bkdud2FuUU5wY1UxQ1JjbTZWelF4NHRvSSswNjVHL0Z6WXA4YXpUSE9GK01VUGVqcVp0YUwyekd6ODNDcHQ3S3Nuc1FENUFHa05LcXRMa2RxcFZWM2xhM2Q5VzBGU2JObVpqYW9RK0NzNHpLRWhDcHI5czVEWGhkZW9na0RER1ZsT1RiUjhkTkN0YUpieHhTMUtyaGxIdUFOcXhUTUtqV3NUTmowRzNCSEk0Rnl2T3ZtY3hDYUdZQ2txSTNSMUcyWkcvNWRRMStOcGlZTFByamIxRlhqWCtkdGxiQlB5RzZHRTJJdzMyd2hoeDFtK2lQV3JqNVFOcU1NWmxYZjk1enBBbmFxSXRPR2hCN2U4RThURWkrREt6b1lZWmNNMUFMUGJ1M2hNdXhCUnRCYThMZUpNRUZGaXBjOVc3cjlmSGZSbkZlZy9EOWdFS2xtdkNNMEJDd3lROHdJeEphN0RZTEtTY2YyWHk4ZkY3cEVOLzdpKzZXcDFLUzN6VC9xVWI2eDlGNHZBTWpLaDNkbm45TSs2VXQzazNKNDNNekdLMzhDODRlVUluY2g0VWFWdFErK0tQb0g5SFE2S1VraEg4alk5Z0NseWI1Zy9ZTnk5R29HZ2lRd24ybXJydURXS2NvU1YycTNNWURhdWtQYXhJM3hwOWtRdHM3c1prcmlwNGIwU1gvMktEOGZZN2ZpZ1NMR0g4U0lQNkwvbHdFaFlXbW0rOWRJbmNQYnhJdENlYUxCU2h6SVpJOHFGcU1MK29SaThpKzZaUnFpbzc0ZUI1cDFtV3hONWVMYlV6K2ttUDBIbDBwZG45Y0ZWeUcvckJMakRUYjF0dUFma3JENlRXRWFhSDFFcWtiWXZwTzdWR0JoMUlSRVZMclZleXc3T25UcisrVk1ENUM5bmVndTdlUWdwMkhRUVZ4Z3h1ckRLeDcrVnV0cFlDMEsrRGNFRVpQWllJWmVVemRneHRRMVVpdjRRd1A2b09qT3VFOXV3RCtpWGdWMGI0NDZ0TnczTHRMWGVlNWhRZkd3ZjQyT01uSTNndjFSS0tvMEhsWTNPNTdiejlDbWZnRmFsNFY4ZENEOUZkNlE3VWx2RWhlUzJZVlBmN2E2aG5OY0tQRU5oNEs5dzFHVjcwazIySmt5ZGhRV0pXNE9LU0VCNUdrTEtDWnpoSEJuLzllNWdjTGZHZlJDVGwvamhmMlFqUFdkNkh5QTcwd0w4bW1NL0RVelBFTTI2bG5oWXhjSm1mZXV5SmVWZEhOditBVHdBZXJFNjRTcXMydVZTK0RvMEhWVWlTT2dWSjMyV0ZwallJMlFyeExsL3JKR2JtNkd1dFZDU0YvaGxVUkhZK2p0NGUyT0VCY0ZTYnlyZ3JITWJZZ3ZMdXdUKzR6U1NrcTAwZHhNdFFUVlJJTnJDOXFFcmlxMFlQT3pKUzVtWU0rVnBsaWRrYjlwWDFJOGw1bVJYVkc3YXd5V1FZVWcyQW1BV1AzSUpTcENCYTZmTW45bmxxdHJ0NjZLd0sxQkdXTE93c0VnZ0hYZ1EyeFdvOXNlMWxkekI3MlJQakhJYnBXbzlsNWsvcjlIdEpyQk45YVM4cGVlU0piRUhGS1R2RHdNR3NhZ3lTdVVBNnppWTMzUk8wY2dSdVIzR3BMakNueXZOU2sxU2UyaGdISVhORWZlUXI2UDdHd3dqcm14RS9nQ2kvV1MvVVJqenNTakxmWkRRVnQ1QnZNbFVScng4enFKWUJSbElKdkN2WXI4NkxxeWxveFp6aWQ4YUUxNDdZVWdma1F6YjNvVk9sSlJLNjhHT050SXk0TFgvcEhOUmUrKzZOR3IzSTRjdHdIeXg3R3l5OXdGT0k3MmUvU3B0K1dUUFZibE9YVmJ3OFZ5cUpGRWpXMnA0OEVWTEtPQ05BNW14NTZta21xNVUveDdIQmJoalQ1WDVBNllKekNpdjAzTlI5clk5RGFyUWpKLzlNTm1WbmhhVWlQTTNxQktsQWdwYk5McGJPTktYeUo5K2Y5Nmo0S1JUY0NKSVRuYzE2SHpFWXliMTM5L1UwNjB5RFVINnJNZVNrNzJWdmc4NkFJQTJRWVFtUXpleldxVWlDaUZTUmROQU45cWlEcTFHNkFWNnNDM01RRU9WV0lGVGxLeDBlNkhrSXJ2UHF6alNCbm5uR1ZoVzUyOHFpVVk4SG0yVmdDaXZFRWlBcnpmNXVVRFBUWEFGSDFKYWszM3h2NlVyeUUwdi9LOEJKMHp6ZElzZXhWeE1jL2lBNTJqUDVzQ2RFb0xxemtQb2FadmkxTmpVSFNHbGZ3OGs1UTIxY3dCeGJ5MDN6YU9DMkNaaUt6aXR2alZ6TnlSbmxnbnM5bjJQbWpLUWgva0JoOHlGUThlRm5UelBCbTlQR3pCN3p4NWYyVVZieFJ5anpJUGdwMnppSkdYSFFNZmhtMmtoMVpKd0FwY3doSkJ1VEhrSjNLenp4bHVPOG5NZStNUVArYytrOXljSFZ4cEhkTXBnbjVJVVAwSHNCV3BtTnNJdHcrLzFrZlR1eEg5WU1hWXpNOGUyZHp4TlkrK3IzZ0tHb29sZ09pWlVLSk15MzNMOGJXYXpLZkRDa2dYKzVWc2dTNzdpcVhNVFNhL3licFlHSmdCdjFJWFcyOVRiOTlSVjdPcjFlVjJhcEFHZlAvc1Z1Mks1dVQ1aGZvSnNEVi9COVlRTnhuM2FCTncrRVozSlBrbEE5WGRGU2pVdzlGb1pyait1Um80MXVKNXdJbVVOaUcybUdGSDJZdVA4WVFJY2hKYytlUHBRS01YVWNoUHZhdHlETTdaNWpCOFRybGM5UzlMZEIveG9mTk9MTmxLdXZkVGt6djBzcVkvOFpZQy9jR3Z2dVNydWVXTnB4UmlkKzNDZnlKUEZNc0k1Y09hdnJGMnRTSlJGOFJUZC9WM2RtaU96RW84V1ZRRDV0TEpKUVZ2RjdnenZlL0oyVXNBLzNuUlhvdTRWNjdOV21vMVRjbEtEMWowNThsMXRvOGxsT1F6a1B2SXRvc2RwazdQN2cxSXp0OTBwOHhVM2RqVGtra05QZGRKaVhCT1FoanI4cVF2NXNJSmlhbTVtV3B0QzBDejd3Wm1QckRIVy9kOVAwbG0wb2xNRHhOc08yUHdUaGp1R3ZKSTY1Z2FwVUIyZThKTlNrTFFqSXlsRUEvYzFld21tUWRnZXJ0RHJhQjBFZU9mK0QyeHFwVTFydTdoa09FQmF2YlFneVZpQUtwMUdXdEk5UXgreXdQVHZlN3Z4aTlrenhhU2cveFZPV0hyVitYbS9lK093NFJIY1VzeWgybTQ1T25jNHRwa3FWYWhsVm96NmtLV3F4SWRPdlBqVmJDQThkRUx0OW9kdkNUN3g0Y0lSaGlOVHZ3eDJ2cVQwRU9jRmRLeHpFN3RWWGt5SVNpd2kweXBhaFRYb3pDM0Jac0FuNThvSWMwSTJzUVNpSVFpNVhhYkg5OGVickpITmhmQjBVeU5vSzczd0lMelhyUytJK1cxM2oySy9EdEc1eVZudXY0Mnh4R0JUTGhUczBoWDFqSytHUWtOU1NZcytmSE5ybE1oUW91MDlzYVpIWUh4V2tjQ0xEUGxza3YvemcwazFKeVBwZ2ZuQ2Q4R0ZUSjRMc1FmeEFYcm5meFdaMTQrbHBoV2phRDZGbCtJN3JBWVg1d1pCS0FibjhXSFNPc3cxVFI1ckFwSUR1cHo0OEI4UFpCNloyMVMzMkg3RHJGY1IvWXMzNW1JY1didEFJcjI1cDhLK041ZWFtcnlES3ZDZmNRQUJ0bUhwaVlzZ1RtSWlOanBoVW9McUNOOGdQamgza1ZQOG1yem1vZEFkZ3pUUm41ZWlES0xDaW9SUitubFNhWXhGeXNMY3VaODBhb21ZejA3dzNTbzJDWjk1bHFFQmIwSDB3OFNnUjZPUzVtelBrY2k0eWp4V1E5eXhJM3ZNbmpYYjV0ZmxiQngxWUJNYXo3cXVjdUdGMnpKa3BWQWhhRGcyb1lxbkNHUW40emRmWFcyRS9DbWdOQTRQOUxyQms2NFVvdnlhU3VpVkxxN1BMc3ZOZmd6U0hXNTE4Uld4TWtjbzYxdlFQb1djMHlTZHJWd3diemMvT1krWlBXVFdXa2p5NEF2Y1lqa0Q5by9CSDA3RjhJY1JjalRKKzlqYml2STRIYnRNN25veEFPYms4VzB2SDg2MVF1RVJUNnJkWVBrQ01mY2JrRTJxSlFhcGVFT01zbmF0RXFZOHlCTlVpc3UxTzZLQU84RlQ2WG9sM3NOeXMrY3ZSeEozT2d4cEFtY0Z4Nzl3RFh6UXEyc3F2Nkx5cVZsQithWi9tTjAxSnVhL3pQZmpDOURhZ1ZDQ0Y2dFF5NkFpWWJjS2FhY1VYU1dZRVFLMFhhV1hyU2NHVnBveENLTzVEMzUyYXlrMXd6ay9Mdmk5eEt0amwrM3JUbXdxbno3NWtGaVc4TmlsQzNnVHNGYU5KZStpMXppUlIxNkFyeEo5OUV0elVUUys0MDVvZktndFdtR1Q0RGtYeTNpMEZWRWI3SzB0K0ZkL1NvNDh0K1RCODNCZXdBbTFMSEsxbTBoZzFFcHZML2J3OFlsQ1BrNTJZTDh3ak1HYjdPc1pxdXpMWVBSQlhlZXRMWGFha0xJcDllVm54VmY0enp1Vlo0MEIzd09XQm1zY0k5aWdjeXF1dEN6a1ZrS2xNdC9VQXFXSm1OUGpYOVNjaTJwdldpSWhHc2M5TXBBM1VLOFExbzcxaE9aNlpBRVlmVmMxMi92Z3NEbzd6YUZXZ1hMVGg0VFJvUFVHRWdPYm9uY0pocTFDdmZXa2xEU1JsU2FrZW9tcitUMi81Tm5RdTRKYjFTZGRWN3daUU9GT0ZyU0dqcnJER0lIT0hTbE4zSmRNdjMvMFBVUXhXcFJXVWpwTjhudWh5eHhuSzkvOGpLd3psME1xeS9zekZ4ZnBibG4xSkJpa1YwcENIV1Ixd3d1REV3TEIxSkpRNndxRmhWMXBPMXVSb3BHcjgvSmpWL3RWcyt1ZURNTHcvQkNNblJ4enF4M3QyeUlIckxoWmhGclNWNnQwK0hXekdTWmZ6bWQyN3ZzVWhHbjJGbU8wTkRVQWJCSUF0a1RROUpxYXkvd2tremNOM2tROUFTQzY4VG40VTlNRDBDWTFJR3BNU0F1dXQvQlpscXhLaHZSZU9GVUUrbm9YMU1OMlNDNC9ZcGpmMk9oa0R5a2xMT04rTDQreXFWYkpVOGRodmM0UW8zYzF5MzFidU9rT3F0a25INEFseEZJK2RvcnJjcmpTYVRvd1ZNNlF1SXZNNEpyZGtxK0pDNFlxMWFZSWM0ZGlLRHFnSVVHa0QxVEMrOU5jN0pJa0g2S1VVZVlicjREWkpHTzVQSFcyL0M0c2VFTGRGNHp0R0U2SGIrSWV4TE8wb2Z4S1ZUL0xPRitXMldvN09MSFFPMkZ0MCt5MWlNYXRjZ1k0ZHMzVm5vNDg3cFUzb3BCU3czWVg4aE9BWUp6YjM4cEs2M2pNVmlkZVJnV2NtbmZ4RWZ4eWl2NmxzcmNoQXAxaHR4a2dqMUFyUkNidGRNeEtneWhLRVYyYWFaSURhWEE5ZkMxdGdFamJJbnJIdE94aGk2dHNGWVhOelhGR2tkS2VUMWdDYkRPTXF2S1VKc3UrWGlnTWEwdHFOMXVlZW5RaTdXZXBLV2tSUUcwcFUvb3JxTFZVTDFHWUlITERzYmRWZUtnTmNqdEpUZGljZkY4RlM1WW81SVRzNkV2MUtyeEJSc3lvUDZZUGo1MDFUN01CMHJNQS8vS0hxcjlNaWpEcXhOZjRzYTI5UGprVlhWQXU3eW02SS9KRWErb1lOYmRiM0lLS2ROSi9tVWdPVGxrV0EreS9xSVd2Z3JvOUZCdDZKc3RReS9VMkt0N1daQTFlMGRJckttRkVJdzNTN2ZmZ2JJZHRvT29GUlhkdFFncmpiYU1BNE9jR2xlRVl1QkZpOUloZHo1Z3NQYm4waGsyYlhmRnBBS1F1U2pJNGo0VjcrRE5YdXVUV1pnV0VDV0c5b2VyTEdSbXozNW1zS3dRdC9idVlNd0dRNEZac0tDZHNkaG53Q091QzNmcnVHRHI4eHJLcUxDRHFDYmdvVHNZWHJQdjNRVGZQZU5uMTByb0NQWnRYU2RFQVJFQ2xyRldQdVlKUWdXcUdYVzM0Y2FxTVQxVk1tcEY1MXFWeFNISi9wZ1kydkhoVlRPa3g2Q3lNTHl1VXIwaHJMNmdOMG9XeXJYdlp5S0JJb2NQZ25obXNXaEgrVitITFp4dHM2czRNWDBXOG1odkpLWjR2ZGtrSXpTZVE3bTUxaVpjdzlUMzFhQ0hJYU93dWxPd1h5QWVwZ0Z3VGw0MzFSb3c5UHFnR2tPREJDdk9SaFhMSlM2T3VLMVlJRXRQampSMVNEVzFGWjVzNGJvUFlWWnRIUWdEYWlSN09BeSt0N29YUTZPaFg5OGVRTWk0akpLSUVIcXdTbWxaVDdiU3I3QXBWZEhkcExRNEx3dXFKQjBSMTdrRmR5OFJMVktvdjJuUGhEYU1nMGxBNDRpYVJjZHpSbEJOTXVBei9RMjVtMTdNM0pyQzNRRmRvcGdBTC9CR1k0cndOb1duRDBvZFEycU11amdEQVdieHFZQitUTU80d2QzVjl3SWpyYkhSdGZQRVVwOVkvUGtyc0JydjF3Mjh0YWtOUlF0OWszMTV5SVZJTDBZNEpmVkx2SE5Dek55ZHdHbGNvcytSVjZwVlFPZU9LSWlnUG9STU5ER2NEZHVJK2Nnay9pN21McUtNdmcxS3hzNUtoRjRaS3ZBVDdZTklFZHZxY3BNS0ltbVdFZXg4YUIyV2I2cGxKbmVFd3N5ek5jWnBqS2VDdS83RGxUSmRNZHB1SGRNZ3V5cFg5dERqTXR5bGhEcEZnSnRRSk0wM3VSV29DMCtIb08yWWZzdGZQeUw5a1FhMFp4TVVRREdCSEJQK3NhQ1FlblR2cS9MRXBycFBRaUJIMVV3ZGt2OXZ5R3FndW9aMUx3Z2J1WlBBRmlOaDJpSm5lcVZsS21JcVIxYmhsaFlsYmVuSVRJVWEvMmZxNXN4T05CN0JLZ0ZQQW9ldHo0SVdDREYxVjN2ZWRIVUUvWkN5V25SNEdZK0RPWkhCQkxwa3JlUTc0QkNjeWVkRlROQ1ptdkZmUUV4R2pvR3F1cUsvTVFaNUpZSGlQdHA2MTNLN2hJcWhnQ3c5TGx1dzlXYXBHS2pwYW12YksvdVU2RFZzVTUrUTNKWTRUSCtDbW1hOWdLWjNnNVlmUWVnZmYxQUlaZHFNQXZEbWlqeElNY2daL3F2NmU1NDRJd2pZS2NkUitlUXRiWFdCQXZxdzhIQjJnR0VsZyt6L2MzVmNCY3pBd1pQSG4vUXh2SFBOVXUrN0xKdE9VYmwvcXFINWViTVVuK2pWVHVJbFMxc2IvR0xXOEpzOUt4ODM5WmxRc09lMkgwNEZUNEptUVNMOFcxSzByNXpiblpHVEJ1MXdmVzhOVUUzWmpLa1NoelpPSmgyNDJJYUhudmp2T3ZrWUZYL0duZ0FSZjlJUzk1WWhaamkyeWk4TkVRdDNxTjg0YzVqL0VXemJUYktobE1XRDFXQndKUGNCalB5aWFzUG9uQXpGTmhGT0V5MC9PQ2Fzb1orek1nR0ZBc1JPWVpBSDVmM3lZRytNa0dUWThSOFRNcnlaRjNyYWJNOUE5QlkxOUNnMDg2SFIxa1BTaVlJSkZXWTRkVHBxTGhKM0RLemNDQUw4d2xxYldHcVRoOUFkZ3VyTFhLOUxHR2U5Uk40YXYvRW5TRjVjeWg0aENZYXh1dWNMK3NaSGhPVXIydGRjMk1yWEhoWW1pbEJQZjhiWW9iTXpZRUVZZTJJSDJlcWVubUY0Q3puMnpTZEU1WG9Cbis1TGIxZEFkQXpRaTFWMTdwTzF3NmI3WHVrZnN0N2o3REJoUnp3eDNmZkRYUzUzc21nMU9kbjJhN016cHErbVJxUkhJR2lvVTNCWHR0akJ0M0VDT29hdzh5NE5oSnEvVDhUTVR2SklGRThWemFhVzdoQ3dJV05UV1JKY0R3dFNpalFlV3dXb2EzU1pqQkxkbVRTbmh5RVJJTE5KcXFlQ0FTMGsrQzBqUHk0U0lBYnRwMEFJNU05YlZZczd0d3NIejdCQ2hLdUZTVVFlaVdZK3JiRWxrQzZ0ZzYrWWJLN1h1bnU5K1BRRkVLMUdSMUtTeU43ZmFjbWtJbTBMZ2RLSXhpc2J3MDRjS2x5QWNJZ0swTldTTG1WdU1iSEVSd2V4anRWYkJvemJRcnhNanBCVjV0ZlZDcjBnREZobSt0bUhXbkwrbElsVjZXajJ3TWFSaXBjZ3ZCdDBmekNsS1hSc2V6TkxPL3RYVFJnWEVxVnFNRmdYWHAzVnczaFlVSEoyTThhejdMblYrSDVIdm5sdVpUbW40dDdmcmJoZDNYMjBUbU1YYm9vSGFRdUE5dDQyQmJiZ2xaRDVwcndGSEdRZlZJbGQ2WkxvSCtrWmltWFlsRStRWTdCdVVkejRkTW1IZGJ1Q09RejdXb3d4L3ZQRC9tRFMwcGFkalNjTmpIVjBRUXpIbUtEa0t6VzJiVDRLamo5NkErOFhpcm5CRmJDWU1vMWhuSzBqK2JaVngzWk9qdEs5ejBJeTFwcUZvYXBBZlE5WHFIS0VJZDd3NjVwbVBPSENKaHJaNW5odWh3OHZCWjBrb0FIVE9xcXRIcElmOXBneTE4NnVUdldTQU83aUg1U2ZiMnFzMmExUk1rSkg5Mll0NGdRaTI0WXZ6S0g2Z1ZITVlqbEQzSGh3dC9BNnZpUVlaSjhOMi9zTFRkZ3o2QVd6QkpVbGl1UmdScWxaU042WVFraThsMUl0ejRqTFZTMlBPMW92TlltbzJZNGE5UzlVRmFCTVkzNUdBZDIxN014L252a3Y1c1NiamhRcVJ0TlI0a0Z2UWo0MWo5cy85WlQ2dzdjZWJ6cEljTDFpbk4rc01aWW91cy9tSXBMSEhQVmVEREJHTVl3bmJXa0lSSEw0enhQT0Q5bUxENGhMN0dmSWxOUEpQRFcvcnp2YSs4M29rSXBYTjZxN1JuQkdra0taR1hHQkZTbDAydTN1cFVwRzkzOG5hMm1Ub3JEWldibWt1ZXRUK0l1WXJTVWdWWEdMaG5LcDk2clVWRXplNE53RFFDQmJVbVRwTlFiMHJQQkVDS1J4bGprZ3doQ1NjcVl6MmUzZ2dRMnF1VnRwZzhHVDlmdDJqMnRXNTNzcmlDR1ZoSkdnOXNrS2lxTFlUY085YUVNVzJTT240SVlmelhJNVlRdGJ5Q2l0RXRZemNydzBMeW9GaUhsbDRJVzc2VUJ0Q001U3IzSnN0RmRjNlUrVGtYT3hEU2V1Mno2dmZoS0F0OStJR0dLREdnOTlBWm9TNXFyRm5LdThRK2JpeFVtdjNjKzFJZjk3cDJzOWN5TG9Ob2l3eGVabU8zUmFNUUM3RmxRSXJENzJteHhrVFZ4NldDNVlhRW1sQWNrSm1jd2EvWko1bStWZ0RGSjFod3RFejF3YzArZjdONEtlRng3eEl1N3BLc2NVRVUwSWQ1SmdpelhWTUF4eUFHbmtNUnRSVFNmcjFpMlo3L1k0RlV3M3l0Zy91ZFF5UTR5ZTQ5Z200YWU0OTB2YXNjSWtwQ014WUVzdWIvV0NhOHZqTkh2OHlyOG96Q1BxNDU3cmpIOEl3NVFSUlVzNGZialBSVk56TTFRU3RRamo2bmtZaDgwRm5XcHVaR2VETzl0Ym5kbEhhYXlJZExlT1ZyM2tFSFQxYW1vZkh2SUdLUSs1cmdiTlR4K01xenpaRHRMTkYvWU5vUkp1bm5YUUhkc2gvbDI3WTdIcnFzR1Z1S0lCK1Jnek5VYnVaM0dnMUlpU0dXcDhlUGtqeFJGWElMdlRwVnBkRGtlWlpjVFc4T2FwQjY0L211Rjd3Z0Y5NWRXOXhJRWtURlY4bFlxK3JpcFhFc1N6bFRqNkxIdTdVaG5WZ2pEbkFmMTN5bm5UM0FsK0NWUHpDYVpMNEVFZmc1Tm9lSkdxM3doaDRnbSs0Z3FLVVplVjBDOU9tbFh5YWVJU2JIeHRiN0RoR2t4Rm5KN0Q5SUo5RWF1cUFvdXg4T3B1cGlyY0dpOFF2TDFocTBRSURaR1NtcmFyaWJjNlNVbFJ2VkRhMU43Vzl1cVIybUNKT0tlN1NOdmRaaHUwakxrY25jajhOWkIxV2RqQ1dxeFZBQWJOcmo3VGFsWFZISjl4WldoNVhrRjBET29qNW1HVlhhZmd0c01mV015cnlwT0VKVXYwa2Q4UzRaT1ErNHd0aXdNYUswc0ZaVk1zbjlmYXd4WDFuVTFGYTJyMENqcDBrN1FXK282OUZpZ3VqM2t3UmNjeVNKdVV6dFRZcGpad0U1ZVNMc1g2VS94S1BNMWlyMjY1S1g0QVRjY1AwVXJEY241RXhBL25wYndvTzRVb05jWWZaTHg3UkR3N0FvT1VpcDFUdjh4TzFFY0lIOStiWGhwdEdWbGJ4bTNsUTl2cWdpRnhaYkJWbThyd0RUNXl6MU9Ka21EbGthTkRUL0Z4bnQxMU1QdlRpK1B3eWVXWFVtNjVNTEtndk1JUHBsYzZaNWJaNFlIQ05YNEpiRzlVQjNJY0MwTEE0YTljT0doNzN4MEIwdU54MWRORkVTeVI5M2NuUDNtbVNJaWdpV0hUSm03ZERVWUJXVVJ2Z2JWSCtpTS81ekI5ZDQxNXlQSyswSU9QMU4rejZ4d3g5SU95Y3pwMVYza1lRbUxNY0t5VVJYZzNwSjVDRG5leDgvWUlYWWNsamR3T1VzbUNLcCtRdDRtcGFRNitJQUdHb1haQmc3b0VhdFU5RHhqRmxBSlJWSmdWZm9WTlZaM1o3Y0VNSnE2ZG1MT2ZOclJuTTVzbGJWYnpaRVFtczZTdGpDQmM2RUl3QU96aDZVdHdHbHFQRUZNU0tTU2VsMXRTUzFqc3lNUWFhQkRpWjdhR2JMbVRHeDBMeFhnUEV1dWNXTVZ3eS8wVERMdW9FcGo5Rkk3dG5RM1BnbW9FcHBqMzhXUFZ3a3hpU01WREdkcFFXWFhsajhQVXNaanJNOFJuWmpuaVM5NE9TZ0w3akx1SDE0dGFCVWR4TjJSMjBrb1pjSFRFWDFGSjJETFBnZ2V5NkVTUTltUmhsMGpzSVpOOGYvV3JoY2tseXFOUitFRUdyeVNjcFE3M3dTNGp4SlpaRFVKZ1R6NFJ5NmV2VGFkaXRGaU10WXpXSUQ5VCt0K2UvbzVacFdLeWhNd3c3T0NOV1BsbkprbHM1NG5qcm1aa20vZTl1SWVuNGlhSjBLSEdtNXNVd09vUnk5ZG94ZWhtN1BEamhTODhKNHIvb0g3ZTF2MWFTMklPaDdJNm5ZcmNGL3JhTGxNSEtETTVmV1pGNm80czZodiswSUdOTi9BRmdWd3lMZm9WUWkzNWcyMWxDRGJnZ3RhY29CTTJIM0w5T0FJaU9ZdTc4c3d5aSt1YWlTbktPdmhPOTFSS2lyNmlJZ0t1TzMwVFpUV3R6cVJYVTVxcEtRRXRGT011Zko0QzdScGFXck9MRmpVUDNPdGhPN21GUVl2NnJ2L2sxUFcxT0g2TFNsU1hraHlvU3NseW8vaWNLckdrWFlkWFkwV0RGaGVmaGFVZVpEc21ib3hudEsyaFdaenl4YnlNNDRDdU1taVZtSWtyQldiQ21GTEgwbzUxbGZpM3d5Y3VvRHNQViszWkEvNkFhb3VqZmdEZk5vQ3ZyTlZnS3VQVnNkdTNjNG9TaHZaVnNCMUxPN1FadUJOeUFpYWhLMHJVQXhFQ0NwOUVnRUFmeTZRUXRRb251amI2allrcWg1UUYrVlBkTTJxSHRDaGdwK1lpRVpMbVYxQmFYeDZ2SVBJSGZtR2dSZFVoYW5GbGNLQXQ1ZFRDQzk2VFE0N0lRc0lwYUgvdVhFQVNwWU9ZTHh2dTNMTHRRcVlDbDBhd3RQbE5ZcGJESEpFQ0dtOVpnc0ZMTGxDR3Q4TUgrSytJVVdoUDdEMUNtZ2IraDJnSVZURXdKdmt1VjVGY281aXhYS2VQNDl3bktReUwwc0ZBWTdLZC9ISVJqbXhPTG5tMDIzQTdmcUdZejBuZ2hhNWloK0xyZ3ZLdWh1d3lGcnR1bzZodmx2NnJ0Q2I0TXYyTitJRUlvZ2ZxMitPVGRVb1BCY0M4d0hIRVcxWG5BNm1aK3l1SW1wSjlrN1ZWOTh5YzZoZWlxMzd5MHNaQmJBaExGdi9LYkJ2Z3JUMy92TzAxd2MzZ09mRkRuZkZrbWQ5eUZGcXFodEU1bU5PY0RFdVdUcUlmTWxjQU1Xc1BPTSt6Zzh1c0dPOTgxZ1I3Y3A4aGJ3RC9OWGVaZVh3aW5rVmRSdDdDaXJ0UzlTVkNXK0RnNGZyTjNDU1E1cGpOSjVmdWFybDRkMXFpeTdML2x0S2s0alU5a001UU5YKzYwbjRTckw0UGM5L2JtdHRXbi9ScmpTenh3ZFl6SjlnWjc3ZytsVmk0R2RnN0R5MStSK2V2enBnSFRkSDNITm1tWmtlaTBsd3N5bXVCK3pxWkluMFcxRHhLSGs4Zy9CUSttS1ppcWlLQ2R0TDVzbXJxd21vYXJHZEdhSkREaDBnZGYzdkJEVGdKbUMwaHM2OUJ1Rlg4M1d3Zy92NlJvS0hiTEM1SkhQVnRCakx4d2VHR0dENFRzOEpFN1N1MldKcXk4TGgwM3BGRFBRRDZCdGwzMmpsVzVza3FOVjMySThweTJNYWFEMjFqYi9SUVRDR1BlNWxxRFVtMytGaEQzNlZQTERZWjZYNmxwcCsvZitjMHRPWGZiRk9jUThOUmFHZTB2VUZ5MzRVTjlTR3Qzck9LcmkrNzRzUE9mVGtEYzNEVHhMWStGS2NNYnkzYWh6blhnYVB2eDlpOTVtNnlwSWQ0VDkwUnA5TWpOTEptWU5tV1BsYmNxSHZ6WUQrbk5kS2NxUTNuMnZBTkZTNXExZnh6a1NoUUdVazV5T1ArNUlHWDJHRXMwNXZseHkwSG5SZnFISHJzVEQ5eC9LdnpNQ1NuYWZEaXFXYW5Gc0k1ZmpPeFpsVmFzZGdoeWtTRUh2b2EvMEJzYTJVV3BBNnIyMTZzYVBlWTlGWWYyb3o5bjRWa2lrRXYwUFZldkZkYk5melRteXcra0xpN1RPSEoxbmhmZGdISXVxWUxHSjRsaEh2QjRUcmVLM3cyelF0ell3OTRFNTNvMEw0Si9iTWRtMzVaUHdUVkJOeGp2b2pKakFOYTJxemFoMWxjdFVEc0t3RnhjYlBsTTJmbTlRL3lTY2xqRDlpL0N2Nllab0pmUEQ2ZWdoeHp3bkpjOW5GUlRXelVMcDkyeTRBNVJlRk16bzZtSnBqVk51ekVlb1FIZjFCVG1WZnJkTVVjbk1pNGlXZTZrbGF1MWhtZFhFVDdla05EOEE3ckFReSsxc2IxMHE1eklsbGxsYWdIa3JIRDBzZVp5L0FiYzJvN05pS1FhdlBFbEhjY3FuRzlLS0I3a0NhTTN2VWJvNWpzRk9tOTJRWU51UmZLWjBOdVZ2dHZrMWVldUhlN2JKT3hPT2ZIMkFncFpla2QrRCt5Si84VHgwTjFiWGplcGhpaHlSSFZ1QXdJcHMveDNJMlVwU0hYejlBOEdPQ1VPU1d4cnJlUEVoT0grczc4Q2RidmlaWHhYOEJtK1lwQkNPQmpVaFhycFBnNUYxU0ptRDNqUk55TU8rQmtyNk5sSUVidng3cDRieGZ2bWJQQ1NCaUNYQm5DTFhCcTdNd1I1Q2ZQNlhoNnl0NWQvSUlHbHlsaDVXT1JTckNJVGwydnB5cTR0c3ZFNm1Ec2Q4TWFsaFdUWVJlRVdRNHVHWGdPdkJtbkU1U2t4M2NZbEJWMzdrRVVDdlRPb05pVHFDMGF4R2JMS3dzVUxncnJhOGxGcS83WGlpM1lhc1BpaUswZElqNjN1NkNISG1NdWhSWUorUUt1SHJmMUFjTGd2U1ovNGo4U3ROaFNFbTZrYzRMMWN4Umk0QmhmYjh5bnA2SVRIUlZtUG5wUnBKNld3NGRSWGRxeC9DRjFDQ2UwYkxLOWFXaWxpWTdWbUVRdzBqNS85cTJ5RnBZVlg1VnBjcUtOZkJRVlR0ZTh5U1VrMlZhZGd1eStBYXBmUHBtVndTaWV0UGliWjVWNkliSmpvMUlmbWl6eVhpY2poN2FDdzVGT21XZFpCdUhIVlVFdkMrV3Z1a0UxRXZiUFJTcTNZVHdGOUFROUZQTVJsUk5zbDFjQWt0TmV5NExMbWIwNjBhQjdjZ3lzRnQzOEJqZEZIVkFQbGZRVjhnYWlEQ3hvY2lRdXBoalBzdDNzdzRYVURVbllKN296VWVQWThyMG9UQ3dRVVdpS3QwVkZ6bkhQSWd2WjZ6MEpwQTY3YytZeDV4VUFnRWZxRWFNSmdHYzVvaXE3WWhaZUhWNjh3N3VVb3plTWJRSlZmZTBlWStOLzZxWmlPK2RDc2Q2WGNQSEVNOUxtbWVScklzR0pHK1IzQUQwQzRzRHBGbmZ5OS9VZ2htc21acER0dXcwbmxJWDU0czJBTEVlQlFMV3JPU3FaTk1vM2k4QW9TWVRtKzJQbGNFOStSQnRSZWlHaGhBc0RLY0VzUkl5YjViOVo5bjQ3bHJYZ3FlV0IrTXlTNnVpVGN5QnhUWE44OEJiUy9VL2dLQ0pwZUhkdVVSMHc2c1h0cFE1dm1WVStSbnh1VVdOWGliUi9DT0NPeWlHSU56QkRIYlpTWkpMNVF4U0M0ZkQzVDY5T3ZlYlhlcTJOdTBZcnAyOUFSVFRhUmNVYVc5d2xhRDluZ1FwVWlvRFM1KzdmZk9aa3JSa0MraHBoTERna3BteE94RmtmSWtTQU5tYUl3R2x2aUVxaEFSR2JRRHRYaTZFckhtV2h5VjExWTd4MUtCaU1CR0R3QllpaVpBMFVyOHM0cnFIMXM0a2xpRGVKaEZqd3dBUXBPSjNUaWhNeDBnUGRzWGFvTGlVY3Rid1hEV3ZsR0RWMWRtU0tuZUZ2TndmZzlMbkhqeG5tcUlJVDhDNnNEdlFyclZVNmhvY2pxeTVlVzMyWC84cHVLMkdwdEVEakpVWG8rcVRkdVp2SnBoeTBEWG41YUwwUUdFMnJEazI3MXpDaTVkNTVEck52MS9HY1NKVU1ScStsKzVRL2FVMnlJcUdZOGNNR29qdUFxc0c4bk5ORDdnUW04b2FNWGtaM3JTck9udnlMc3lGK2FYRGpOc0xRNVk3L0N4TTdZUVk1NDB2amxVajJ5QzJRbkFIRGtZNEVFaForTjAzMG1jWXdMU2xIMVZMTTc4Q3VXNjNuMUVJbGpmVVlaT2J2VW1XcWlIVEpDQVZzOGlCK1lRYU1XaEIwZmlyLzQvVndNOU8xNDVLYkdEeExVS3RwYnQ0ZDllVzcxUDBGSjNoV1ZHSlRudHY3dnlOcytJQlh5WU43RlJ6VkhQbkh3b3JuOWV5c1BpSmg0d0NSOGV4ZXR1c0U4ZnRjU20vMnpIN053cFoyTnBiU2lDblRrK1VzVHFUa1gwd1UyRXF5UW0vMGNwK0tPVk85MkJFRjlkSnBNNmpaWWlpMUsvUm9yMHpsZXlsYjdRa0pWUVJCTlpOblg3emVSMVNCcVlZbUtZWWtNYmgzeHJwK2dSa3gydm1Pa1RoUGxoVFNOcFMzbmN4c1h5UWhGdW8yUjZUZEtRRzJaOXd1bTFHMnc3MktXQk9UbnZBc2dwc2pCSlc4ZU9VSzA1WEtoR3g0dzFGV29DdEtneVk3Vk1PUjRRWW9oNDRHc05kMC96Z1U3dWRZVFdISHFjZnhWNGxEWjV0ZGdYSi9JenppSUxweEZ5Nnk3ZkpUSTRzanV0MDlRWG5kbElCK1IyWFUrU1paVjBmWVJMQWg0UVdiTlBmMGQxQ0FBYnJIMG5McHEwdm0raXRHYWpMbmVMZTRMc2NWYWM5MWRlb3RvbTd4MXdBZFI0QU0xR202Z29mTURHMFhYb0xFTHpNQjNOVWpzYitnK1RGMmQxVHJLeWlRTUZnUGU4bVNTUXN1a3EyOXYyUGZRV3liU2xIdlJsb3B4OUdTUnNzdjU1TTZ4NGF0RFJWdzhLUldYYXNvWk5LY2ljWTZxcXJsaHhROXJwQ1J0WUhQTFpuMlpMVjlIUG9oS0crT25ySDl4SGJKZ3c2eGd0VmFvNEpOejFIWDRIZnJGRFJhZnU1T3plMnY3OVNUVWxwK2h2OFJtdlpvWWxQMFk3OWErcXVwOHJkVDdPeXdrN200c3luMUM1QkdKUEZLMDczTEhuRnNiWVJ2V0JNTE5mQ1lDa1hJVG1qN2dySXdCNkFpOVpZbEExVXNueHF3Y3VQOEYyV1FGRzJYSHFzaDkxdmlRUWVhTTZGVzNOT1R0UkIxeXFkV0RVakRjWU5hSHhnNmJnVzM2QmFGMm14NFlkbFc4clFZSTExeWNlQmNuVDNhdGNsZHkxU0VNU1NaVS9vTm9VeEd4U0xzNm1NY0lVVVV4bERyeHpOcXo0WjR6NlhuZm9qUURXZUdZTkJrOU1oaDkvNmN5VFRLNXZLOUFPaVJleUc0L2JUcnNwaC9YU1lyeDRGQmRVSUpzK3M5Q3FqUW9kY0NsR3prRzR5SDIwNUc0NkFPSE41dFdDa1RHVThVMU15endQMnRrcmFhajE0bkZpNUcyS21BdFB4dE0xSUhQeUN6OStNTlBHRTBkalQ4RkFmUDZyUGllVG5iaWpQK0dLVEJ1NmhHL0l6dHhZWFU0Y3ZHT2VEVnB4dDNTN3hleDZVczZSMTRwK1FuaXdyK2x5RWc4cmFwWE5OOHNqUGpKeUhlTW9QS3RoTUNJS0pJR0NGRm5RR1BlcTgwQWFnZlY1MG8yWlh3MmNkNitaZy9oN29uc3BIS0Vzd3ZMR1pCd0tCRmRySzc1WWV3c0xQUTNmUlJ5ay8zTk9IY0tuMWZzVkorRmJYZjRVWlRYbWZVQkxWS0h2UVR2d01LejhBVVJsVGQrNmxxWmxpd3pQMkFaUlpTeGZIY0hDRzVXN0N2MVVtQTZ5dUc5T1RWL2VqcVV6bmJKZHkvbXdXd1ZkdXozZkp1SmY2b1RsRyszNWZORWRLY2poVzc5ZXNPOW9wcEVVSm1TODJPQWt4azNaZ2lWbVBKZWVIbHlsNUhGcGpLdStVVXhwRjNHT3IrOW1uMmxlU0dMOG45Smt5cEdRazRVUlQ1bS9Yc281bFBUR0l2MGs1NENQeFJVaEhsVllVRlR3OWtxbjR5SENOK1pIYkNKT0dnUVZua25XaldGamw1S3M4Y2FGTk12dGthNGFuVm43bFRrT0ZKcllFT1hjWFJNRnJQOEZjbjZiaGlRVGd5ZVlXY2V3NVUrVnZGckxDQmkxN3A0TjBodWpGRzlSQU12OU1XWEhCZXlhM1U1WWlmU1cyczNraVBmaEVEcG9zcEZlSWFLSm5rV3RkeUtDZC9RbitiQlRPOVA0QTNTTmZucDBKMTVETVFHMVhRV0ZidGM1Q1M1R1VqWGg4cU9xNjVQeHpEMUdHNEF2cm1GYUZQRW9WbEZWQmxpc1BUTmdNK3ByK1BMTXcwd0Y1SXB3emhlc2V6cXhmSDQrVkNLYWlKazRJeDNSQjNtc2t0VWZ1cEZBVi9VeWhsRWlQaUczT0R5Q2tKbUJuODN2Rks2OWhDNDJMZFFURzEvSlpiZW9QSzdOM3NKOEwvNmp6TVlsUTBPT1J3bUpSQVZGVUdwTE1QZmVGbTVuTVUvRk9LUHRHVzJoOFRlNXVzbGFta3NKMU8rNWk2MEF2ZjlIZ2lZSXdIbVpQTnBJcFRsOS9TT2dwZXY5cEs1ckVWeWx0SGJDTFdla0dEaU53b1RLRFZMN3NGSThGd2VzS29kRk4veExYb0xFRmNyTFM4cTlVZUJVMmlZSzdQeEQ2QWw5MjYxY0lUT25pR1JmQmdkby9pVWlBcCtvRmZJc2wrb1NDbStOSU5DY0xwdldGYXIrV0ZBTHZpa2RuVUV4MzNiSHh6cWxGUFMyWmNPTHhmV3poZGFYWEpsL3NTUzNXYlY1OWtLV0NKcTBtQmt3dGt4YkZkSS9TU2JIdkJGcmtNcGIwTWRzYWNaL0ZGRWdRd0UzYUdOREF4STJIaFJkYS90Z0FxNjV0c0VjQWxYR1ZJb1l4dS83cFJvVXdZeG5reE1ocEpwVFYwSVVCZDhNSVNENnhkRGphTE95M0VNWWF4VURFamY3NndJS0l2S0dpUzVMQUxJTCtCRSt3S0FnSWo5TVM2cGdnUVdLcXpjWDJSWW51SUJzaUt0Zm0wMVJaTDlnUHFBT0xrMkg2QklQbTFqWm9vSUhtVERzZmlPZFJPa3pDNXVkenN2NHh5b0hTYXRuOHdUZXB6Z0VqaGlwaTFhQzkvaUw3Vi82aG51OUhFOFBMOVgxYTNkaFY3Q1htOW5vRjhjZ2ZJOUUvMTJndTE0cGUxakNhR0wrYkt4eERIRHdncXBYbU1oNzB5QS9taVd4WWV4cExTdGR3Nm9UQXBzZWVkNWtsRXhzRHBvOGEzS2NvdThDcGd5QURNdTByUTg1Vm1ScGpudGxXTnBYQUhOYnp2aVpWRGQ0OXZvU1FMbG53cVgxdEhOZlNPaUJxVEFobDRVZFRHMTJIU3NPUWRDU0psOWF3UzVDYWhXUU5uejVWeC8vVi9DWDFYWWhNNWxuWGdRMkxxRUN3UlV3YmNTbmZMaTJ2cS9rZ1pGYi9wSVBTL0VaeFlUQ2Jwa0VHRkc3VXZyREd0M0FrTENEQ2VURlhmS2htSUoxNXBZSkNzZnVWeS8rZnNQVnlTekhnMTRXeXFXR09ZSS9WQS84ZmozSGttcFc3Z2JZb3ZwaW5jR2dPSlpNY0VrcDY0UXF1UnlTVkhUR2pDUm10MDJwVUh4NS9BS2pMbEFCcWFLZ2hKZXpXYWxlektSekhFS0VnV3UvNTNmZVQ2NWdQMFQyUlR5d2J5ZFd2WkRDK0Rzc1VsYWRPSkVSekY2ZFlMbDBwRUFDVEtVNGFWN3FPV0ZLN3BrTFVBSXRXTXNHcnFTRnVoaGF3U0IvOUk3UlhmdUYwNzBxRzJnV3F5b2JpMy9iYy83RHQwNEtBR2xlSlpCRjk4WVRrbEJkY3RzeUFwelM4b1pIcXBKSXFPTWhtcDZYMTlYaEVqb3F0TS9mN0hHSkV3NUZUSFRJQm9IVXR5RXBhYjJNMTNHdDBaRkQ0SEJSQXdsRmlNQzR1U1h2L05LWjJLdjVsaWhYZnZwVGU4clpzcERkQTJRRmRMUElLWWRpZXhjYm40UUFtZWRmZlpTRmhDRGxlMmZ5My84aU5VeUdaSWkyYUo4L1dmYk9rVXhRb0ZlYzdQa210eERvYkMvbmt6VlRjZXV5Y3RNdzZ1d1pjTzZCWUE0Q2ZYZlBpZ0VLR2lROXZBOUgvdTJoUmRySzdPMnNENUR0Uko2OFZYaGFWR2ZnVGdKY2V1OHlielBnRTZHVmpIRjkxaUIwK1NiRHRPMzkzTWk0MTR5UHlFRTNTMmUxMlVhakVqNHpaMVo4K3FrQmQ1ZkZwVGR4Tmc2MEIxSXM3VVpDRFlQa3dETVVuVmp2V2VKVThrSTd5SWQ5clVzbTNCWmJLaHl6bU5zWHl4RlJ4VzVzRzhHdG5FSGNlODFsNEE3YVhheENjem82c2F2VTA1NE0yTzZ4cUpTL2JBUWo3aGVvdFRRbWoxVG1LVWJQTVFjNldSVXlIVTVna0pvK3p0NjlsNTd3bVVubW5waVZhNlkzME1CWnJ0VE11MmRNa2hOWEkyVm5hRklra2JaKzZMekRBQ2hpV3ZENnc0bVMzUUVSK3lzajNncnVEMnJQODVHZVRqZG5TbUNhVG1NODVjbnZPY0gxVEp6Tng2OFhFd0tSRHF3MHFzZGdkK2hkaVk0OHY0dUpoMjUzR0tMUEpyRVFpUVZaVEFOb01lSEt1RUl2aFZVQjJBWkY2RG84RkJPUUE4cE5zN0dySFcxcWsvQmZ1aDZtampQV3hVT0tWVURYek5sTUNtVHBVTmloZzhXSWllSFp0ejJibjRtaUpLLzQ5UEs1Z3RMcjBYMGJ0d1Aya2UwamZCSlJreWJuaXBieTI2WEFSN2hGSWM2a1paTGtreHJ0dmRRWDNWaWFCZWg4QWxVTEFwY0QvcW1oUEJmQ2NiL0JCOGRYcCtuUkRuM2xPLzkrd3Y5RDRya2NpM2I5M3kyNk1TT09SbVQ5ODNZM1Z0b09jaXlVbVJWaThoTkloa2lPOGZ3djczYmFxUEFScUJDZGNnZ0lFMks5YVh5S09GdWg5N3lFbzQ4a09aYVJMTkhQM2NDYi9PZ2sydmNQQkRFdE1DTFRNck1JNEZxelV0cEl5eUVFRjdKTnVYOTBNNnkyZjhXcEtFdHpwM21ObTg3K0lGUkttSmhYbjFaVmZWd0VVREFmVlY0RTRvZXMrdmlEdGZPVGVaczIvdk1jSTZYbVJ5QitZMzFSUGk1R0hHeDJVZUhzRDdvblJpVnZIdUZRSXdKN1NtQllCd3JhU05Hdyt3ZC9rcERFazh5WFowVFNoUUZlNldaVEhSTy9jQWdOK2hiQWdNYVc5QWxmZk10VzBUWjBjU3k2RjdtbWpxYmRSNFpyWTNucjZjWllFaUsyRFdVWFI1L201K0pQQUlwdTRvSjFVV3YzVnl4QllZcWtJWnFxbUluUVY2ejAwWWVOV3Q0NHVVdWpmUjN4eEV5TU1EdUp1aVlHTlZwc25QS2sybC82b3pKUGJ0SVEzR2w4NmRFTEZjNnQ5VE4yT2IyYUZGbTBLb3BnR1Y5YTFrdXdWZ1dETE9ldVY3YklYM1pUT1lScXl0NmM3dlpmQjR3bGU2ZXc2Tko4UHpUL2dVZnhYd3g5RFpMcGo4cWlGSDBxNTI5Snh3VE93Q2g1cFBqclh6ZUp2VFpwbUVsSzgyYVJ0QmFJNFB4MGc3b2srbi96djIrYjE4UzQ4WjRtM3gzWmVnSzJsMHNDZTR0SWhPZXJXM3BHUk5qWUVRd2E1dUhVdVJGMnR1NkJrclhZSEYzcDMzSXNFOVN6c2VBcVBCWjNsc2NMSHk3dDJ6NUEzSGs1UCtuQmFzNUJTVjZBVjdJQ1l4WU95LzE4YTU1NEgrQ1d3MGxGdHpwL3FlSnZGL0NEL0VjblVKQUhmaHdOUkRFM1k3cFJXcUFxMURDajF1cGhMQzZkOFBucHgrcE00TWxJUHBQV1dFMkJHeEZVT0xaZEpJVlFsTlZQOWRBNUFCd0Ivc09nZlQwT1NFNkhVK1NyZDFscnpVUGdNVGF0bmFQQjlmTWhEWWVPWFRabVp2SDlET1pKcmNWZm5zNGM3eFliT3IweW8xYlN0YmhsN3VRYU5JRDQ2T1kzQUhraW9mbHhRM3ZNME5vR3V5dmpkd0VCdjVLNm1PR0hhaGRHdWtTWTJ3TmZmUDJtcjcxU0U3RVJaSlpVZFZNWERaTUZaWGx2SDFURWI2b3AwN0pURDNOc3pPaEtNYW1FWlhSem9BVWV3RUpGYjhEb3U0VEt1bTBjYVZvTzR4bHE0Y1c2aDZjQW5pRUtYNDNKM0RqRE1VUUxOQUlmaGplVUFWNUw3eDE4em5tc2NhTHdzY2p5aXp1WW1hSVdpV1J3OUtYVm52VWJyMEJ5dXRCcUZNdDgrcStLTndxV2s3ZmdIbm53eTQ2UXFKalp1dU5NdFliWkNWRkduTGRSZkt6UFcvRXQzVEFlMDVjV0dxY0krZ1JSeU5IR1k2Z2dQRC8vWFVUUktNL1NUWUhNUWlEVW9tYmxDNDNWV2w1VVFIMnZrMUEvSHFWRk9zakhQeUthOFpWVzJlS2xSOVVFcGJYVWQ0eGc0bDFrTmFNUDlTT0ZTcVZKaWcvTjVhcTRqQ3krQ1R1TTNxMVNpOHlraTBoa0RJR1hKOE9YSkVFdndyY0VBUFovS0dYRXB0VThBQnFlYmNRbDE3bzFITnVBQ1dTcFRBd2w5MU5XWHV6RVFrOUt2bHMrdG5JWC9WK2ZiYllKWHk5M2VwNWZSQXdtMTBhbnk5K1hhSDE3VTBVNEs3MnZMSTJIVDhnSGx1VTd2S0c1ZGtSdHF5amxZWVh0bU5PRURWUitnRUZLcTFZbVkxUEdYRjl4ckVNcm55OTYvcGdiWTlaQ2lSdkkyTG04ZHpYUDhrMEV0djB2d0xNZVVtalY3ckxHKy9yZWRLUWg3T3ZuSGgzOXU2NCtEVzk1akdJTXlXUXVuRmM4TWcxSTJRMEwra1BPemN5R2VCS3FVSmhrWG16SHFNaXFGaXRpNS9TTmNQNVRrWm5xcWdqeVBTV1ZOM2hnTXhNNVFtNnJVMkhLeVJqYjJiRm9mcFNLWEg4ZW13QW1mbFFMS2Ivbkl1WXVqZW5DbHdDTEk0L2JKL0loTkVPQ096SG5SZkJNNFpTeXgrZmVsTzliVkU4TXZmTEtKeHRQVkUxRysweDYrRjcxeEF0Q1BYcGlpZW9la0ZnelZjc2RjMENqTkFuUS9aTnIzM1ZtcVVBdmFTUEJuUGxvaEs3NmwwWmx0OVJUODFONk01UWVnTE03WnJRczZMaE1TQ3pDcmJvZ0FRaTVIb24yMENOUzZ5RUptQnhySTR4Mlh4a1VUOXA0czZob3V3YkozcVNDVkFWTmUvbGFRa0FjaEszdjUvOTlRK3RiNVJEbGRrMlpGazdVOU4yai9DTWZXY3NJa2tPZm9MRUhLdUNUMDUrNXQybEdSMmpOV0JZVXpxQ2xiZnIyU2Y5WkpvbE9nbGlSQjBqY3B5WmkvcDZqT2lKM01JU3drNGRCVFRBN210emhzdjloZzMvekgwdzN0ZEptU0M0RjZxTzNCbFhjVit6TVF3OWF2bnZvaFJaRitDM2FxWTZXcWZ5MzcrQkc0aVFIb2p1VTMxNzVJWWI3NUR3ZC9ucVdtWVc1aDlXSG90aXR6MXBBS2U0K3BhSHp0bnZwRHVqVWRHdnFvalhZdm1ENERyQ3dRVGNPZzJVWUxZMDAvbk5kZGRTK040YWYwYVpCYUo0aHR5Y1RxZloyWHNXV2E2L2lhSkwvWFB4WTMrYm5CVjI2YmtndFBubldwY1VhSk1UNGVNNFRzSTRkRkJwb2YvYW92eDQ5RjlPcEJWSEEraktUYTBWSmZrMEl4WlZ2T3ViaXNBeW1SVXE2bk40QjlFK0NJcFZHVGd2U3BJK2pRWFUxck1ZbE5UeXBsUmtJRGQvS1dMZWZhcVFmUlRwSERDa0Mwbi9KU0k1VTFlVmxZNkdhVG9Nc0pyS3lkV0crNHRlUmJELzU5ZGRvNDdxd0hXaDZMN1hFRzV1dVg1N3BkM0xWSU5tRjg2Wko4QzFPRWZSK2MyUG9WM2NMWXFpbkJKQkZhVUlGZUtIU3FveWl4RkNzMnlhRGRQb3N1T0EwQzkyL3ZJNXFKZUZPWHJ3QVY3NG9FaVRab3Y1cWMzRWhTd2xEdFpoR3pPQXh2REpKdnMrUndmMkFHRzJuWVpPdnB6ekhHY21ReFBROUtMTi9RTENDZzljRzdnSEVSZlJKdXU3U3RiYnFTWWlkTkhBcEVoTDUyWW9LRlo4K0tDSjlWTExnbzIxanJraG1kME9CZEFUVC8zSXplTWhVZWYyenkrNXNnbVk2Qmw1bjBoOHR0bkR1VkpyQjZNTkQ5UEtmTFBKeGVwU0Q5ZHpEZ2NxN1hKcVhqTktNcFd2MXBCTjkwQnJkVmNNamdjVC9QUm5TR1BIbTdrUFFDbkRaVHR0aEpVM1FQamdlUW15SXVGeThoODhvU2IxMDlNSG5UOGVQNVpTZUwzSzNrTzlKK1VNOW5RWjVwRG0wVVdRelVvQUdSUGh1N0tlWkFpYjFmcTJuNkY2TDk4SjZLZVVsVWJWRWJSQml2N1hVZWtweENjdkdEZXNRYlJIdXlkV2xxdER5NVk5OFZvWTZOTmlvbHA3WHk0bUtzSVg5andvLzZRc3gxNjVTYzN2QnJHREtnbUZPL09yRE5GM1ZjR1hhU25qWE5OblA4b2JEY091eTZKNVEwUGdPZ0hrampCSVNPMk5oNXVQdHpTYlc0VWYrb2lianNFOTZCSHNjcXlNOWdReGludzN1eTJQakxSQzYzRjRPYlB3N1J3NDBwN21lNlRVekZ0bGFVRUUrWE9TT21nNDNXbDBWNmlFVkJqRWhpVWhWeENiUWFWRW1VV1pPR3FUREVSdmJGbUhwWDZjeDJZcUIySFhnNGdadWVrc0ZaRmlLck0wclVmaTQrQUZpRmV0SHMyb3FDZXVlTFJ0aGU3aWdrOGxqSEpaZnU4bWJvNk01RysxNU9tSnQzVHJLaHo1enFnMk1RTnE0VWcyTW8yZEJYRVcrRWVQNHcwS1NzOWdsS295Z1BFVnl6aUJaMmwzNHQyY3c1aVVJQWhaSEdCcENuK05DaWYwSFBKMmh0eGhSTVhyS3c0WkI5VXEvVkQ5aVE4M2JYYU1uTmhYUmdyWnFGdHpzWTkwM0x2WGppSWhlc2pCTXV1ZWh6aGJ4cE1EMjdqWEk3dGhyVXBwemhXQllMWlZ0L1dNRmlISmFxTXZrcXZieFFBSXEyeldDUGF3SGQ2U0pKVWZ5SDVhSjhaUHRGbmNkNnROSEhTOHFmenkzQkJwTGtNMUxRdWVMQXZRSVlvd1lsOUtWNXBRWEF2eUlZa3JlU1ZYMEUyTnpTdDNhTllFT0p1Sm9vb2xUcjBsbGZLMmgxZU8rQjhoVW1mbEVzRFhlaG0vYVFvd2JPZnA5TEtvd0lZZUJsZGhtakR3V0tZL2t2UDVwd2VlTFNEaG51VWgyWmIzbjJxMSs3RWk4ejI3L1ZHTW5rY2d1alBnVVp3dzVMNmZPaUhWaGVPZnRhWFFiTnZsMXplbWduSDlrSkNzeWZkZkY1UlR6eEI2dzlyS3k2VlhEM3p6enRaU2VqMjVQYkpTelpSV2lYQksrMlVvQzVaUXFtR2R3aEViL1FFcHk0ZWdqNW5lTXB2UFpXNTF1c3R3Y2VvMEtyOWlMUlczMFdVdFpqamcyQXNkMlpHclB6TzBqY3Mwa2t3Wmlyb002aU1mOXovRTNlaXFBaERMeWJDNlBEd2pCc3AvalV5N0tpZHN0bGtIbkloN05ucmkwdk5XdnR5RmtEVnd5S0FFT2grRHFteFc5dHJDUi93c1o1cjd3eUwrVWdNcEZRWlZORkNTYUtoaFVoU28wWUxpbjB1SXBSNkRqaEdJZEFLQVlTc0pBb3VPd3k5S3FRYVRHeU9JcDhySkxBNXVjaTlydzZmVktzNFJhN2dZVDljakJnQWs4ZXozV0czRUlvbkFVeThRVkNtS0FlT0N6eDA1MXZVNm9XQ1VIU094VUUxVW0zc2lFWkVvSmNnWXl5eDlMcXpsZVV5YnY1Wk0xWnJFUHZXaXNtUWFiaS96T0pTR1lTa2lodHFqSkxEekRqNDhOdVFoeXprM0owZVZsTEg4bzJsTzd0RU1nNmMwZTRJWHdscjRBaW45UEx1VDFpODM0UWQ0dXdwT2dJQ00ySXFOZ3B2TjBRaHNocVJYVWkxRXBGcFJWUzlCNHVsTXdrSSt0cllteGxpVGp1Z1Ntc2RNVEpiRVpSQXNBNzFWWTd3NGtacUZIYWwyTlhJajQ1c1dyd1M1YlBJdEdJcFVBWlpwUkhrallGOVNXMTdNTUppcVV1NW9Dc3h3VUNmTlc2SFJEK1BreSsyTE5rTW9SYzdtajkwczlGNWhTMUF2UjErdndIUkwwblVLOFVEN3NLUTNxaThNSVVVRm1MUXIrWEFVRDNralZtZ1FWbk50ZDY3UVR2TkFxR3V6VnpXVFlsL0FSa3RiamR2ZTUxTHErRWlFYmFIYzJVdWY3V1dJclZKTG56aUpkMVNLYm1JeFlKS0JXN1AzTG1QSm9LcGpxYnF5R0xXOWcyQU4vTnlESWp1cVNUN2RUazBveVk4WkhaaXJDYmM0YXZrWnp6TENldFBHK1c2UTJZdkdPSWk2V2JBbm9FUFA2eVJxbjNvSUo4MitvUU1hUnlYOEtXMGVHQjNzMGZNelBIckltRGRCaTFDWWxSL3hKNVlyQmpGQ1l5YTlOSngrU0IzbXExaGtIN2NUYUg1S2I0VGpRQW1RVmJDR0d2NEtvekZ2WnZBN0Yra2JxOE9mNzRhMHhZUW5PbVExbWRkWlJXSkMzWGtKZ0hOWGl2czB6Z3Vhc0RVQURMRVlBc2V0Q09wczIzVGg2cXdIQ0R2V0dRdDRpNFFvTnRJbTBIVzNJalZKdFR2UHdhWndRcXdrYXZzdFBwNzd5YWdmaDcrMW1STERmRXJHWlpwM0NsUi9mQmpOL1c4V21YelZQM2NBYlg2OGsrOC9EWUlGUWFZaFpYZGh5UXVoVzZHTVFkMTFEZHdtZUpjNE1wV2FZczk5V1lrNUYwQ1VWWUhrZWdhbTE4dXpibldNK05CSEVuTnRGZ05kRzFSNmc4aGtVVldKU1FjSjlDK1BHb0ZwRHVQU1Q4R3RpMGpWbkpkL3ZXbFpJTXhWVXhwWExtRXJKNkxrbGU1TlI2SGJjRTB1ZHk3ci9TdGY2QzBLR294OHJMazJ1RDBIYUdxSVo5S0V6bGx3bEZMNlc2U2tJKzVScEk2bzNHQjNSc3pEQldoR3YrMW0xaHVQeUdINGdjMmJxeFZiSXdsRGx0b3BCUSs1MUhjTmFhTWRqLzB5T2dhQkVlc3Q4TmpIeFRXUUZBWldVWDBOK0JIS0JFUGgwTk1Wc205aVNsUkVLS2tGbTEwc0NpM2YrM05qY1g3Zmp1cU5YVlVIdTloOTF4MHczUERzb1dIdHFHVmV4M3ZQajNRcGR3dWd4TE56SDJFVHphUGxsRlRnbXc3QUFweXZ6Z2lKbFpGS2pFZ2dIUVZCUnN5Q0JBL082RXJ2MW5EM05YUkNLaForMjZyRjVORElIOUlrNnM0Z2pBU05wMjNZSVR5UHd3ZzZDQ1hsaG9QQ3RRTVo4Wk5Bb09JZ3JmaUQvVTJSdExEUzVlVTBRa0krWDd1aGRwdDdtMitjNkhNcU9uVXZjQU9mRzBQTjZhTVBKZmdRcVJxbU5WZXR6c1IrdEpoZ3YvWkZjaGtlU2Vkemp5a25ScFZLek5VbGRVQVdMbFBLTHBKRnNOWmVxYkJPemFmWVZ5QnVLYmFtQkhybi9DbUFiZkw2QVJkRHIrTUJiTjR2THgwaDYrNEI5eG1vUFpMSUpSOTl6SFE1b1FaSnljU3RLeTQ1TkgrQzdLdE1sanhVSTlIM3UrTHFhNVhsTTA1VmlmeEpnUGhUancwLytoM0c0dHI2UG9BWGN6Rm5pTFNKWjV4ano4T1FPKzFjcWoyUml4QTdVRzgveXd3aDdwamJXM21KNXlpOFFpV1gzODg5UW1iRndKV0NUU1pYdSt2ZmxWcXJXblJTMmtyY0tKYkdna1lhamMxUzlvVy9IeTFSb2tvNGpqMzIrL0VXSlQySDRqZFVrZGs0M0QwdFVIdk5vWnhJS0dvZlpQOFJPVFZtbnN5S3huUTg1OWxTUFVlVTJKenAwbnM5eWM0c3g2MlM3U1VDMCtaazlPdnp4RGJNZW45WWVYbkNNL2pHYmw3K3NmbTE3aGx4VFcxZmJiY2lVdDhLeXJSSFZHSXFZQThMZmV4a0pwTHN0TDRDWVVxNFdidll6RUlnQnFEU0hmdnJEbGRDWGJZM0w3ZUhCOHZ5UE16alVLT0x4Yy9xNWF1OUxyYmx5RWlkOHkwOUV1dU85KzN3YkswQ2R5RWh3d2FRa3lFbU5zNU0raERrVjBZcWRJTUZiZWxoTkFnREN0VjF5Q2djUmF2NUVhOUpUbHBnZDM0c3NxZXRnaEpLY011MFp2YStXWWhtaUtXNVoxNXFpMDRoT1ZqK2JuNGFUR3dzUlFhc0t1T1ZaSWVHZnpmVzc2eSt5d1pFKytadGFFbVdGT3RvYWo4SUhTOHJtVzRUNXZwSjllMnRsSFkzM1R6aG9MRG9YVk0xWklaZ0d5dHFqM0EvelR1Z1BCUnZlNEJ1dnJETndub2FrUjg5c1UyckF4Y2JOTnlpMmpRb0JDZzhhSENnRmd2Sk9aNkpWQzZXMFptcHZkaGdpKzcvOE1pRVNFTXVwUkZ3NWlnQmdCT1Ara0JKK29IenpqZ1FZYUx5S1VVV25xMTVZMzUxU1o1cUxuZEtKNUloWE8reko0Nkh1MW9oU3NVRUV0Y3VVQjRUYXAvZDhPWjBVKzhOZFlaWUJrUlhXR0tnV3NEdzNuN2F5VjVqQXVmWU43clIrSDNySVRtazVkN1FZVkJuNC94QkY2ZnR2Zkk3bkI1S3Y4a1VYMmQ2TDVOdG1WZVQxSDNpUlI3akZOeWhKb3pJYUNYQ2wySEhTWk5zNWtXNEFrV3pQU1padTAvYnQ3Ui9vNE9hSDNSTG93MG5uY1IrcGREckdTQ3NvTU9zc2NwbG1SaldCZ09vMjdXajdDK0xnTTJWaUtReDFBWEFsNFdoQnNiOTJaUFJXcEJpdDBZS1R2b24vZWtCYXJ1c0hsdXlmeE9JUHNhK1VkYWpSRmxWRWRvL001dXUwZ1FwRm9zbGp2YmxQVXBxSzNYaVl1cnIyNWx5SW4xREVUdUlsUlgxUEx5VzhwVy9FT3hNdkVlOWVuRVA4bk1BMWJkZ3gzc052RkZOTzNBZDZoYnYzMlBMc0V6eWJUSjdjWVBncm1YMktEUE9Kazl3aDlQZUdUakdiRFBteXlVQWdLbTFMWHJ3RWQ1L2x1NkFjeEVqbWVVNElZUWdpZUlJa1JkVDBteENyWDQ3QmYrSGJlYXZMNHZPWVRlTGdBTmlSclo4eXhYWmNOVlIxNFMxOEE3NXRLMnRUTndFMGRBVXM1ajlZRXZROVA5eExxbUlTR3RnS0d5M2I1WkhTTllBSWdNRFRoc3lGWjFaa3FJeTc4RTFUV2xudkNvTHQ4TEpmWlcvOEFrOURINE1FSXpRY2dnSEs1MmF4NXdyNkVQQWtJcDVqNy9HVmYwZlJOT1hSMEJ6aXVYZHhaV3dHVE83OXNSVnBxMzJtUnNwS1ZWRXRiZ29LVnJKc2JRc3dQd0E1eG9CbE53U0FrenQ4eGRSOW4wOVZoSVV6cGNGMjBockUveERTODdONHdrRHZpU1VuanFiclJqbU9KR1M1Y0dMbjNjU283Y1ZsaHQxQ243L1VudGh3dFVRNUlQbmFwRE95bXBFTUhXYVdUTTQ3L1RXaWx2UUVIeW5iZXdqR3kxblRQZ0EwV0dmYVc5aGVOcXdWakR6TC9Eb3l0SHVLTHNkUkdITUNybU54K2dGcVJKNjFmMis2bkdLMy9xeExScUtVbCtWL3A5dStmMk8wWmJ4d0wzWk1XdDA4dXZvMXlWTzJaM0ZLaTA4N3BTYjlIWFRZQXQ1MmwxZSsveXJNRit4N0FBOHRudGFvS0ltbll5dW9HMVk2NmJ6WTZzczlQRWVteWZBc3VXdmlGM2hQWm9sTWxzTitiOThNT2pMNXU4V1AwMVNVRThiZjhyeCtSR09mZTZmaUVMODNLcUhkRU9kN2NKRDhZSm45Nk8yK05kS3MxUnZ3NURiM3A1aGxiTjNJZDNNV25QUDhML05Tb1J4d0tSQVh0WTVSSW5CQ3hKWTdzakN2c2MyY01TeENPZ1ROa2hJUnlsVFpaa05PS1dTOVdaK1RrS0FaS3RWNjhvdXdHck90Qm5PR2s4SzhHNW9RbGxEUXhUNHZObDJBSzNPT3cwVitFMFE5SHFhc3IxclAzTEMyZmpsV2ZVYXNrZzhVSWZ0cTRHNm5iSEtkUjNlNWM5a0JqRkc0aXRlY3dkWUlnMFppNmo4dkdoYkY3R2lZbWV6aWlyMXptRFhJOVV6Q0hKRmc4RVByUXA0Y3l3QU85c3FkaVJ5R3Q4RVJ5WGY3ampFaEUyU0NZVTJUSzYyeS93UjFEcG1yek00dVF1TXhwNS9CbkVWQnNCUHVTVWIza0k3T1BZWHE2c25hSys3ZUNEeTFzUjBERmsxSWdIbWlmeUorZ3VLT3lVWFNhcDJjRmRyVnRHOENvTDdzaENnckMxRUh1RzR6TWh4aUgrdmErb3pyWGdvMktLcTBqLzhwcXgrdWQ0L1o5S1lsdm1hR2l1OURSSnZ5UTBhNlNNZUl6cHcvTGllWG1NVnNlbmd0bkdZRnFCYUt3YnU1cmFPZGgyeVEzTDM3TUcrYm1CbVpvZmlJL1A1bnIrY0FEdzdrcmdSUHVrdHVka3QrUitJWHl5b29OUkhFcGFyR1J5STBXZ29uWWlSV2dqSkNzVzZjL1d3VDRhNVM1aHdYY0JremRLT3RUTHVxOXBhOUdFcDdieVBJckVaUEsyZi9TcENxcDhMQVcxRTRMNU5CYXNCWkhnWFhWemRQQUYwR0E1YW9LUjVER2xTUTA1L1hDWHZPc2p6SjVSUm9qQ1Q3dmJIVFA0YWIrcUE4VE5ZbEIyZThkZnR2OEtETzV0WFEwL2UyZlJEUGJ3YStaUGtYc0p1SnltQzh2Mno2cElkZUVIaU9pWmJEbzN3cUtxQ29ZZm5ZR2xpVFR6UGZwL3h1dCtzSllQaGdrN3p5ZVhsV1Vsb3A4WnhET3VMUC9DYWZaU1NJRU05M0E4OFJDc0V4OVk2WTlaRkdKUzFvbVlMN2taOWpNR2VmR0pBTmJqbTlGV1dCaFN4UG5QNUhVSHZDV2ZGb3RwWklBajl6aXVFL255ckRVTmg1RCtXcEc2VkJhaUdPanVzU1N4a1p3QkFnZU0rdUNZamU0dGdOcys3RHRwZjZTZGIxS2ZuMER3S0ZkZDN1K3hlU2lkcUlDT0lJUlRRaEpISENQK3VrSjJ2b0hrbWZ3WXZGWG54VjllRGczMGRTT0VSdVNhb29WMWc5UDc1aVdWVUtFc0s2dHAwSDRzWG1WUEJPeUQ0VkQvTGtZTE8xYTdLUXdnMTZEMUNnVmdrZ0E0ZjNsYng5SmZaOHhvU0NzSVdxT2w4ei9MTHN0MGE2UUlpZDY3Q2tPdmlBeVlvOW5rRFV1WHZlZGRuVWwwcDlTMG5uaEg3M1RudTBGU1ZtT0ozcCtBdHRYOGRFSWZxMG9TMUFLQUMydFZBa2RqUkc1Nm1jc09xa2J4VzVJNEhhdnZtK1BORW9CcmExMFZBRnFkOHRCZEFXbnpGa0Y3TFZpY2svOVFOMlRacVlXVi9OaDR6ai9MZ3VRbzFIczVITVVld0Nzc3h3cTNiNlJsRUNNN1RpaWM0WnN0YWp4UFBqSHRmSEZzcHJKZWhwaEJudnRwMlpVQitJTWZsRnY5Ry9GdHIwMU5XNnZsN3J3RmptUDVNMVdHQ3J5U05MTVZZR0lndW1mdm1EOFQ4Yjg4dkpsY0FsOW9ZV3Yrd1B3NnhCckhCTmx1ZExiZEVWRU5jQzRzYVBMK3huaitWQXJOL1hoOEZ6N3RnL0NaSFlFV05ZT2ZPS0FPTndCNngxQU9IUHF6Z3JDZFQ0emFlWjlzTGhDdlh2M2NUQ241Z2J4bDhWc1RBOExhLythdmJadWdJMVRYazFVK2wvY2s1UERrd2lkQ3FJa1N0c3B0bFNaUStsY3JsclI2SmVOZkNiL0JncjlLTURaL01Na3FFejI5VXZ6RHJ4VHBmUlZqMm02TGVnODdIcm5UaHAxZE4rYXR6N1RhNkpiUkxxUUFHZUdrRWJpQWtGbmlaTlFud2xOc0ovbUlxRzU1SXVBY3ZDazJRWkN4N1IxRzNQOVErMDZVV25Rd29TMklObmtGOW9oL1Z5Z25UVGVHalFYTlhHaWVNZk5QenFmb3F6eTlJaU9YVHM2MmF5VEllMDVKNDNvWUR0SkFJVDNvRS9EVjF5NWVPcTBKaHZZSlR5MW5BZGxKOEJId0g5dVRCelBYZ0hpNVB3dUNuZ3duRjljbzB5N0FMbHF0U3RSWExTeHlTSVVhUjZ1dnI4M1BSd01XMXFBZUZ6bE5VMFB3T3NETkNoWTI3VnQ2cmdodUk3bU9sU1VxR3hrRSszMXBVWGNKcjlYd0VBbHJJaDNYNW1FTHdJTVMxZGdUNXEwUGl6ZVlXdmtmTWwvVkVJeGtKbGlLOXk4UUVMQXFTVkl1M01ocmdqK2dqa3BuRlE0QUlwOFJHN2NEOFprRW1pbFhrMDE4TTZ4TjB2WW0vVVZyU3ZWK3I3QlNBVnhVY2ZqUVhnSDdsMlJCQ0pmcHRNUmRGMUZrYkwxUjc2OXhueUt2VVdvZlhVZ2VXaGxidy9pTHNjRTZFL2V3MEl5T0RHVlVFcXdUK0ZXM0o0YW55b2pVUnBwTnZIczZWL2xMN29qbUVrYlpnOU5uVnJSd0MvR1JZMjd5QUl0WUx6MHRUa0ppSU9ZbjdxeEF3QXBuckRjWGlHZ0g5eEdpbkIzWGhYZU03T3A4aWdNZ1pwOXFZY0lRTzhLWHpnNVpTOGVtUVJvZUcyU3g2Z3I2Z2d5SUhqRll3YTlEMzJNd0E0SnhJRkRiYmVaZUhkd1JLaFovaWFHVzZ0RjQvZE96bzd0dTFaQ0I3T1EzVVlQZnhaMFh0bjU5ZkZBR1h6d0pWUkZ5ZnlTV3I0ZUR4WVR2emJFdkNTaXhjcUlteE0yZ0lNaDB2b2ZET1owamNsNmdtUmFYZVVWQkdZbHZwRmJFV2lDRklmTjFoRk04MDRmdHN5UUtPQUJITVBjVWNxSVhRa0FmTkNlSjRIc0IyMHZ1YjBZeVg5TUdnK1FpTkpVckU3Y3dXa3I2SlY2eTlCbms1MS9xemJLNU41SXgxZ2xKTThvN1VsN3daOHR6THhsMmRxTm4zV3MwYll1dC9NTlA0anI5RjJtRE9Za2dmZ2NWcWJsN0FRRW5STlBxOS9MR1V1WUpaL1FQejZXZGthY3VjKzFNMlhHNFpvZEp1VDJLTFExZ2VsNXErU1E0bFFMTHpraHBkcVptVk16ZlhyOThhVjMrNWZ6YkpKSTBQN2trQzU5MWJjSzJSZkNlcHNXTloxM3p2Z2M3NTV1ZUVOd0VJNk0wWGk4cEJaZCtrOVF4K2JnTXI4RmpWcEoyN0srTkd4ZHlkb0o2cXB6VEZzQTZVckEvaW9mdHBqc0ZsZ0ZCdmtnWkZLNGIzVXE3VUJVSkY4LzJTeldTNnYzUXVsOGFTZGdFVk1reC8rQzE1QUNseHY2YmJEM0d3b1FwZFNFRWxiNlRoeWgyQjVuV2I3bzBSOEJiZGRqbWlhVk81N3BXZXpXa25TRm9wZzVEdGMwSjVYU2tuOG9OWE9LbDZoYUwvR2psVVBRUmxpY1FYUi9vb2pXeGtWZkVCR0FVVDJDZmNEQUFyNGhhQWJBOGxlRGdmUkhBMnNJMEkrOXV1SUVxN1dVZ1lmRG0rbDlmbmZBVE9oWndQOER6TXNwVlN5cnJsanhERjE5NUc3Y3NnaEZwWUZRODBCRWpaajNvdTJ5TVJHbjlLN2NyQU5uUUZGQ2IxemxZSFpobmRNMUVRTnpCaXV3U1ExV3JuemZiZE1jSzFhNHNaV1IrWGtab1JQaEZVZzdSN1d0WFFYckJwbTJCRjAwMDVJREpTS3J3ODRCZVFUc01BR1lVYkVVREJtNGg1L1F3MklXU0IzTW1tSWYyamI4SENHYjFhS3EwalVrTHhNcmx5akJGbjJ6aWpMYjkyeVFtUGt4TVpnei9QakJicnFYNTZQdG5pMGFVVjk0b2FCRU9ZVngwLzVyY1NXNHBSeDJ6QU1ZNjJPTTdXRVZ0WE1tU1JsUkhRRWhlNzY4V3BRTjJGTnhMV0FUK0c0UFhmTG5qMjNhd3I3OEtxUTFwSVQ0OENKcHVOZStESnFyeCs4WjhQM1hVdTIrem9XZHBoa0x6eUhia3Z2RkN0dmowbVNIUFhscWlIT3BLSTc2bVpMRWNoMWVSc1JucEk1N3NDeDA0Uk5hOFpiZm13bVhvR3RkdEJQUDFQcUM1azNvT0tlYWExenR2OThiM0wxZnZLMm0zMW5oUTA1WlF0MStxK1grMDF0Vk9CYlVUbjQvaTZTcEZxbURDKy9NU1dzeHRJRzRSZEVHYytCemdoUVo0ZjBZWXhQVmlRWEtqZ0Zvd2dXSWMvcWUwajJIMy9YTWJRR0ZRSFNSalp2d0lqTmxSVkRUNVluQXc3dWhnWnN1NXZXUi95NUkwQnBScXV0U0pvUWZOdDhuSTQ2ZkhhV2Q5S0JXZE40aEZRK3RrMUFlU1RkdU13cEIwUmZXTDlQOWZoZlQ1c1RYdXJwMVJjOW5WZ3N6RFQ5bE1yM1MydVYvSlh3RU95MWxBemJOQUk2eXB3Y2tCQVJ4UFZJTXN4MFNXSmZISmowMldhRnhNRDZBMjByNFNCcFpWelNxbDZRU1FiaXp1MG5rT0RlZ09RYjNnVGZTQXZCbW9uUkJSMjNqeGlIbzNabUVYQmhhZG5QWDNiaVltWkZ5NHdIMnRvRWpiZ1Rmckswd1ZkNGdQUHVhTllMLzNWS2FjUzJYWmpuZExyYlRoZkVVaEVPa2paNHlsZUgrVWlQMkhoZlFsVUlBZXp6dGdXT0g2b0ZLMGkyTTZUeko2NkZaeGs4STU2cHpKNVcxV3pBbG83SDNLNkJrVGZHSTVuNGlibTB0Wm9BdzJnY3VLSUE1RTFQdDZkc2tiTTI5TkFXODROUlVmUFlGWlNNT0VnbGtBTGkvMTVtNGFSZXpuQUJPTk16SWhGbTlSUG5VMlRva2cwL3QxcHh0dm12dXBMQlFWL0FMeWNsNUhQK2tQaTg2OVJIWFUrR2RBRnBUczZ1VVpBUTRIbmF1RGZmSTdrOUY4OThsQVExWUVmcER2aENMM1VkaHlBZWtENW5ST2UwaEJpazFuV2MyQW1Pb3BNaG1HVkpVR1BtUjZNU0FtRFZTaERQRzlSRHg1MGRrODhTdFIxN0lUTUJZTDA3NUpnUUVRdHNEZGJYSW5yTGZEYXBrUEpGcFRWd2d3NVFxMVFMOUV3dFhLZEZINS9hdTlQRld6cmt4SURwQTJzb1NjODhxTDBPci85QnF3YVJjZUhERVBwOS9iVU5NWmpuQVVKbjA2eTg0VWpUU3gzbmNUanJDWnFHbXRPTDRid2w2U0RydnZkMHF6aDlzUHBmNlZzRnVSd0tCZFU3ZDVybXVCYW01ZjllU0RVQkRQZk1YYW1lSzNBdUdOVkFCTUptVDlremU4NEdUTU5sNk1tby8wWnRlU2xSWk5OT1NpYVdhZldZeUI1NXZmQmVKQm5uRVl6dTZ5VDdOVmQ4cmRwMnBpNk5JWFl3aldZRzhwVDMrdmxVRlorMmJPZE5GeE9tSHlwSzQ5WkNtMjN5dzhZbVo5QVM5eXFObkdPaEVObTByR0JZUWlKYWlHWDYwY1FOMjA2UUtaU3Q5SFBmcHRTUERTU0dYMnNCR2NZaGVrb1NENVpsTHhBdjhmaDRBK0xXZmlINFhndWtVbzVoaE1ja01rMStSYS8zQWlnSTNBQkNsZHpoWFh6cXlGcmViOWZZaFd5UUpibTVvejNNazU3SjdxeUErL20zdnMwYjZnRzJrMmtINSszOUtpMlFuaVBKcDkwcjVHeXZWSnUxclFqL1ZLNjdDMm43VmJYQkN1YzJ6OVBJWTVwNlBUUWtTbVZ6TGdKNjhRR2psTVZnRmNJcHg1MEZoSGZ0SnZCYkttU2pKdFppNVExVytaWnpOa0dnays5Mzh0NW15VGZTR3laUkhmZ1VmZ2pqYVZyVnhoQ21NaGFsYWExUXlDZWczNWZuZjBrVDV0OHEvdzlSdEdoUHh2eENqelE5TDVRSnVncDZYME04QUxGOTZzNzBQYksybnFTRnJnQWQ2eWlqbmZLTzBxNFJrcGM5RWFxRUpNUTZlUlpDSHllc1QwaDZrNnhlNVdQYjE1Q2lpY28rRWwvNUFLS1UwU1lMTWZwWmdKaVFpK1hHaUhSZDBTUVVkREdPR0hrUUtoeTJTT0o3OEdGMzJESzZCQ0wraElFRDJOQ1pyMk1oa0VDVDhSa3JGaVc4WVQxVHJheGEyTUQxQ3dITHVmOWdwbVhSY0xDRzQ1L0tpeXNOVVExRGd2SUNBUUROK0NNWkZZRktIa24rUnZzTnpZZHFHbU5zOE1rcThLeXI1SnEyd3ZFVy9SakJqK01tdmw4L2Zmb0VRTDFITUJZZlZaNHpqY3BoaWZjeDR2dzl6QkcrSjhkcjM1blVKRzZlWmI4Rmk0Q1lFNi8vUzNsWmFqSjc5MXZGL2FMSHRtUllCT3llaWwyMmVjeGJpNkJ0elFOZFhtcjNmS2dUS2dVRWpzbTdZMzNhd3RMK0FjcUxOTW5xRDEwbnFPS2J0Y0RHK3N4MFp3RmkxSTRuazRjTDVWbFZ1NktFQzdBaXVxMGJPbmcrM1Mrek9IelNLNVp6R3drOWdhdEhiaW5IVDd2NEdlc1U1UUJzcTg4V1RzWTA5YVFQZWpzYkhWWXV5b1R6M04xeUs4eldmbVorcVB1VU9JMUVyeFJoOUxHamxFdC9heFBuY3JaNDN2RC9FTC9BbGYzeG01c29tU2NXRjF0blEyUm9COGUrWEVRaGIycTJvbkRDeEtmZWlEclcrQXgxckJROFNESm4vek1jQko1VWtuWUxFNW9SdXNoS1pNQm5aTEdib2V2ZUMrZk9nOWtnMzJuYS9nQmcxMndSSXUyeXlXelpNMElvUUZXVHYxV3pKdWgwNUZmc0Y5bmIxQmNHc0Fuc2VmdEFzajRYQkdlcStjdTJONmsyNkt2NCt5Wm5xR3EvamhOQi9VYnZOTnVHM0dXMmh5M1NUVk80YjJCSmVONjJTK0FndjVvM2t5ZG5keWwxbFhueExVSEhDdHpSeld0UTh0Tm1hRFpRWG9WUjh4NjNXVEh4aEJ2M3JHZTJtcjY1K1pMR3hQeDB0Z2k1UmhoVzhrN1lNaHpBWE5QMHFxMkN1bWVacW9JZ2RYekNaQ1VFU3k3VWRDbjJmYVpjQ2pPYklRMEJudjBaTnlpUXBlUFFvbzg3T1FMMjdjK3Jhbkx5MnlRNEhDM1JuQUpzSk43aVN2U3B6UnZzQ0pCZm1SUVVWUW1YeEQrZ0NNWmxnSlhiZTZGbnF0NVFOb3h1d2lXU0hhTlJzODVMWHFBb2p3NGI5TTVSVk9OZDZNa1lsREw2bXR1K2FBZUZ1VmtuK1A4MFY0RS80ZGx3L1VZN0hDOTZ3QXUzMnZlaWQ2Sk9TKzBaUkp6WXV1dW9HWjBpczEyNm9UQ2hmbjgyUlRlckdXUENNUlFmMEFUUTdtdExZclpFNEhNWEpyRWdrR0VTSmx6ejlha2xHRXVSWlo5Wi9CbmtWRWFDS2hSR2h3b0gyUmdSOWlBdW9kK3owczBRdWNUaUltN0xyc2VRWEF6RzFiQ2M3anZCVCtCMExzY0ZLeTJIRnRRcXltcStwMWdpK04wdVA2MVdLcGY0MUNZaXRQRGxnNDZWWDJYSEZRaUtSaUpKYTQ0eENNZ2pvdFljamtzSkE2MXExR0krNjJKa2VwNVB3OHhickRzaW5uL2pYYlU3NnF2cXY4Mm5hcTczR2NiMU1yd1hadUhiNzR6ZTN4d2I2NFczMWZhQ3RuWEZaaXlwT3ViUnJZdmlreFhHci9NVHZaNmRoZ0JLZTBUcWhONU04S1VKM2JVYkkrZXZhVTVwTDg4Z1V6VmFVN0gwK1l5a3ZHNDVYQ21vdFg3RU5obC9wSHkzOUE0d0JscFZyZDlOQVA2dDU5SkQrZWNWb1VVY3RKNTlQejRzZVJYMlMxb0IzNFlIakdhbTZ4UGwvVThmM2czSzQwUU1YejhaV3pkRzBKOUV0L2g2dE13SmFzcStaVTlORjJ2cjVMNVNKTzJ2cGRRQkRvOGdoaXk2K1pHQk1NOTR5aGNlN0hBWW8wamFjL3U2QjNKdXYwcWIxYklTYlpibUFrS0QvMElqOXpUQUtCd0U0a0ZoNHZkVUd1U3huRnV4b0dmMVMwVEJMc0FaK3Z4bW0raW1oV2ZXK2k2cHJKNmM2bkZtL1hjN0FGVzFmZ3hlVlBaNkxrdVhtNnFPeDR3S3YvT0FNL2RnRFlQSVV1ang3eCtrUU10QlpLNmkxeXc5UVQvTE5sQXR3bnVLdWo4WVRvVG9zY2N1RnZxd3dQS2VxTmVmQitsR2pMdHlXTVR3M0RMeVQySWo0YmhmS2dSVllRV2tOQkJWUXJCYU1YaHc4V3A4d2ZiVXIxZGNGd054TDJHZ3dXVEljK3BIQ0dxbjQyZ2ZtOUpVTncvbjhiMFpVSG1ucEpOdjJDTkI1MjB1Zy8zUlpIL2NmbHpjTENjVU9vU0tQL3NSRC92SXNxRS9JQWJzTWdRRlpVWlVjOThadERQQmo3WFBHTHdvckFib0dycWdONnlDb0hKYTFRMEFZeWZ4dHl3eE9Tek5idWg2Q29zZHl6SlFudERsSDNkQWFFVXNBSWFXR2RkNllDeWlVR2FwSysxbU1XSEFCaU5LSkxodDRkbFlKOTZ5bTdxRnR1NUNWWnVUSnpNZzlaQ0hMb1IrVHJJaTJPUTl2TUFuWFhsck5XWXdDUEhPcFpXN1VoQ28yMFJIUHFWQmU1UDRMOUE0UDI4amV6UEgzRlFJb1VoWjFOUUxFdDRoM3BpV0Y3a05mbUdlSzZRR05ZK1NFOW9UYTFNdnc3cFk4NjNFbUhNNlFaSkU5Q3FMdGY5aUlJdHZXSXRYb1VFZEg0ZHVtWUJFZFloa3J4ZTVIcW9RUkladXpUNmxyNkhieVFGblRjaGdDUk9EeTVMTGhLNktycUhGd0g2RXVDY1JaUTczc2hDVkFOM0k5ZnMrWVoycXVtdW1oak5jMXJ3cWkyekt3UDV0MzljV0p5UGJyeW8vQTNoaDhaQ3oxS29pZVlGNTB2Vi9nRUFqcnVrK2dDeG9uYnNtRnA1QTBtNVZWRTllNC9UT0ZWR3JBcG1TL012a1N2UzIxejhFdXgwK3F6d29VdFBGaWRhR1BHVHY5REU2d0NFRWxOTUNZY3BHYXFBNFlzZTBDNzI2d1g1OXFtQ3I3dTcrbUtLSUxnWU1zTzdMQmJKSW1FRDhyNDh3ZGtZUVBBdnlqdm04YWtaS1FsM3AyYzRrb3VYTTVFeVJjS25BNTAwUDFIOHM0QzdUVThQMmN3QVlrYTBhK1VRTm9DUkxzZ1Q0L1dwT0pWUUQwV1g4a2h3cEJlMFJURHprUWFlVGNyZ2JzTUhiZWpzY0x1Rm5UYVF3U2tKNUZHajNJaFZrWXYrQUkrNHVyVTAybjhPdlNQMFZsZmxvYm44VkZQb1JlZG9tcXB4L3dRbWFFZXZaQUtjMGR6MjVUcEFYTDZkV1BwZ0ZMamQzWTdaNXd0eFU4aFJYZ3ZvZEsrUnVQRmZib0x3KzhZL205SFNWSGdmdXF4M3lQUDlCVWlBcHFLWDI4bVdrSWtuczN5Zis3SnBxYzB3MG4xclZISzgwNVlLTHk5cWlMZDQ1djZUVVNhTXR3VzlKOEVuN1U1Zlhnc0x6c0tqUEpvWFd5NmJnUVlyMGxXMU8vMW1XOEwxeENYbXVxb2ZEYXFmNkFzdGhWYll5ZmNRNjVYdXV1YS9HZnFqci8xS3lMTFJHMUI2RVBJeENkS2RSeTN0R1c4bS8wT0psMlU0aElvVHFIOVJ2VEs5ZkVMRnM4R0pCWm16M0J4d2Vobm15b0FhTXVzL0tDdFUwUzJXSVpXbzdrbnVuMitTTWJzTWNES0E5dUVqUkRxVUUrNVkxZG9UQzQ2Zy9vM3p0aGVkVFZWK1pubno5T05vVlU5cUhqRXBrR2Q5SGxad3lML2NFSng2ODJibEdlem9ISGtUVUMwRkt2MjhEVUNTQ0ViQlBIb0dsTVhFUkU0SXQzd0hTaExBblB4VHBMQWF1R1ZsU2t0KzRwSS9UMnE1YzJoeXZCeGVOVHR5eDRsWGRhK3hyS0lNcDkxakZpSUZ0WHFIb2luQTZyVmtnZGZsQ2F4aUlESWx0YjIyMGN0bjM1ZzVVZVFHa2FJbUJyZS9Vd1NGeHVOcS9ZQUFQQmV1ekZ5a00zQlY5NVNpVDdrL2cza0p3VjVRREdSRFp3eFFsTTZ1WExvUlZuT2R6STFGODRiQ3l4MVlaY090em8zWDR6REFKRVdib085TmdCbWVGQVpuMEhVRTRuTVU3YnR1TytVaGovYjhZQU52UVBZRG9EelRBZzUvZG42VDZwRGJBRW5rLzBrNDNkOFNiTHpQamRibDM0VlMwVTBzTlpNUGpuZlk5ejRwY2FOQU51aTRnaDRINU4rTTloeWRVUWNleUU2V2ZGT1ZpbkdVdWFJSlJ2ZGpqQ3YwYlJLVkpjQ3hHbE1CeTI1cUExK2lYOEpmQ25pNEY4TG1SV1dKYkdUaG9xZGRqeHJiS255SWc4aklxYXY2SlVSVndON1B4c2tlTWRqcVZVcng5bnlhMWV1Q2puSDA1ZlR5dXhMakdIOUJuSWR3RXpOVmtQWW5BMTBMMjFnTHEyQVBMeEVKVHNvY2FiZC8yNDRQVS9ockhPTjZBZm5VL3IzNUE1U1o4c0dFZytCUTgrd0RXT0JPcnVZZ3ZtQVZkdXZxRzlnQmZSWHlpcURFclVXeWxVWTBkRElyTGp6WjR1cXpQOXNzL1FMQ0k2emNvajQ0N3FwK2gweHlMbGlHRUNMTDNXdnlnM1l3WTZTZVZITnREOUtqMll3S3pFY3o4ZWxJdmx6azJnNkZtOVNhcFlBNWxjY3k3UXlrQ0E0eVB3MWZwa2JJYlVxemd1cVQzV2VmUTFOdFR4TldSSmlnQTMyYURnRlh0NDIzVjRFQ3FDc1ZJZkdlMW5YVzM4WGpGcEN5TU5BR29ZQWhVS0gyc1dQdDlva21KMVc5alhXWnBHZmgwcWhVTjZhMGw2SjZYalhRR3h6N0xuMEQ2Z2o2eUlnZ3RNRFJtN2hSTHRKYW1hQndwUWg0cFh1NFY4ZDNxdkJseXFjblJHNkpTdGlwTGZ2M0YyQmo3NjkxeHMwYVp1SVgzWXNjc21tVHBOZWVUNmEzelZMZmVuY1pOSXRMbnRWditSUlhnaVBKT0EyVFV2MXVjb1VYanlnM25aN2dza3lEZ3BUTHZJSm1WRVdWVXdSVWNZa2paemQzNU9RcVhkai9aSjRxc0VuTzlta1piOWZ4bFB0VDM0cFpZQnRKclhjb0g3cm9mWWxkb2VXZkUrOVloN2tsNFkyOHRJU3Z6bkIrYnZYUTlpWnZ0NE9uL0tLcHF0UTM0ajBSZVc5b3NEeTNpK0IwNGpmbEE1YklNYnhEZnpCS2RreittL2hQOVFsOUNyN3poVWFjK0l6Z2pqVlpxa0ZlTjBTRzM4dTloZktRRC90bHh5Njh3T25DRzJNbzZFdFRZcWFhNGRCeXVmSWt0cENyTFpzQ3c5UitzV2NEbzlQRForVGkrdjZOM3hHVDVFL0x0K1E2c0lCcDU5RjZEYTZuOVFRUkxYWEMweVA5VGxQRVAvTm5POVlUNGEyQnZENkl1Z1JpMmR1RTlhSnkwM29Nam1CMWVHZW9QcjR3cU13dGNGdVE4Y090bE9KZVNvSHU1dy93VjhpNS84TE01d1dTWWF5d1c0OStpUm16Y2JzMUNTSDJtUDFVdWtVZW9pM0hFQncxVEV1S1FMWW8rdDlhczZjTmZHZndtUjFabjFJK05WTVRLSXZoOE5mT2pKTm01VSt3R3N3MGJQRDRKUW8wZWNUcDNOc3VBenhBMTg3cjdsTUp6c3VEdXNtVzAza0p1QmZIT2xhY1h5cHhyRW1PNG13alVtMlhxUEZTTVdpellBUy92d0JlSEhFSm1vczU1by9uMjlQaDE2b1k1dHRUSTRkdk9tRXdDVmdZYnptZGc0M2xGdVlpaWhHazRveXZpWmE3clZWUmF5ZU92aHpqMnhHTUZUMFo2akUvUXgxUjZTUlRXL3oyZGl4QUQzcjdZSE9ROUg2TnBvc3U5dHM5bUN4Y2pETXI2c205cG1lYkpTcXB4SEYvbTNqMi9OUVRLdVU3TFIvdFQwdnhWbHl0VXkxdGh4VXdKSC9OZ0NFSlNkM084OUhGaUI3eTZHMjNFQ2IrTll3VzRDYm9WS2dlZ3lic3BZSkZMem1uNllaWUNjVWhFTWJnZG9XYllNaTVkenRZa0RTY1BiL3FLZWVuc1BPNFdVNDRENWxZR2d2c1Y2VjltYm5PNFhpREEySW1VeTFtTEdhWVh6TTdqcHg1TG9Ya3R2RG9OdlRwUWp3MFBRWDdOcmY4aDJIWU5vK1h0MzdSVTMzUStZQWNRMCswMUNyc0NjTlVTUUxnQUwzNXhsbjR3dHg0SlVsNFRZamF3dEZpcDB3ZklCZzRLbjJSRmlUYWVvUDhkdWNKbGVyYmpKVHVtVWdiemxjQnVySW5rMnNMMEZvVGYxV1RkMERLNkxZanFyNWtMaVlaTFFsU0xYY3d1aldiNU5FcXlVcmdMbVM0WXZNTDlVdDJmS043QktsQnB2SHI0czdQbzZPQm8wd1Z5aEpTRGF6aXJLbWs4Tlh2YnhpVDZyUjJLMXVHclFiOUwrSEM0THVkc05HVW1FZWxZTzFKdDZGdkNLRXVJRCtwc0FGbHFteHlwcC9lYmQ0OFJibnozdnk2UkV4QWRIbi9xaFd5MzRpbUVVaTZ4OVpYNFVYKzJxWkNQWWhMdS93SjNlSHM2SkF1SWdtdWs5R1Zid0R0cE85OVN0M1BtelFvRDNLZk5rWVBvUG1VNUd3eHlkOVFLamRONk11TWYxMVp5bkFUSUZzSDcyMUJVRjdtSCtkRWdxVE55T04wL0RoTlp4M0ZYMndiWDFLWElmQ2NnbzlydXNtcTV4d3RUbXB0NWlNbE5HQ291bkR0SEtORHdHWnorSnZPY3NPTE01QlE0TjF4VEU3Q2lTRlhUSVk4RlFMVWNERUVqazlmRi9ObGp3aENsTEhWYXNlbEF4L2ZrYndJcGRnWDZqT3dnaHZaa1hHSWRLNWxuSnphekhuMzMraWY5NlZlQkwwc0Z3WW03a3lURk13L1Q2VEdTMElVNm1vRkhkdnlhWWVNcFEwc2ozNDFzSlhYN29jeHcxK1RDYjFsTjh2SjE2NEI0MWJETnpXSnh6aWZwNVlBZ00wUXFqUU5iYmVjYk83aEFFbDkrVGMyU0Q0clp4d2tzZ09Gc3dOSkphdG5aQUF3dGF4emtLNyt3eXAzSzBMd25ocVc4bEsreE9NSXNRT0ZsTTZOYUdxUkl4WDJDcEZDeVZUZUtvRTJmZHRHd09Memd3dHhVUXMyeVpNRHdQMlRhSlhETmVEZHJjY2l2NlVKbE5IUG03ZGs5K0VRbllkYjdEa3JBTk56NXQzS2krb21SVkYxaDA2U25ON3dybFFScWJZQVl4aWxDNnp1eGc1QTVndm9uWEY0ZnBNbzFNVkNPUHJmQ0VHT1N5ZEs1eXlxVG52b0dLM3BQa3JsUTIrSVZQam5rOHZpWHFYcURhaU9JREF1NS9IQWlMVFBrT1dDZU1iSWNxeUtIWHM4SDlrRTFQU21sVkNoRkgvVGp3VXVEUi9tMkFOb28wN20wamY2TVNtVlZhUUtPa05QekY5bG85a0pwdlVHR1J2d2lINE1TaVpHTUYvQysrUG9MbFZkS2tvVkRpSXUwUVByVHlSOE1PZkxhVUZkOFozM0Y1MFA2dHVwZWZSd2I4WkE4UGp6S0ROWE1PYVYxU1ZHR0p5TzZrZGQ1SWs0SWQzL2wvRHhiOWg1RGt4MFlzY05WdURtOG5Qdi9UK0J1K0QzOTJoNHJ3Tm5RcWNvQkxTMlQxc0lha1J3YnIvWUkwNHRTVUlYNVFxaTlNS3YrNWhmUFFBQVZ3RjRKdWthbTFJdWVqckwyU01jcUdWY1hMMGRMU3N2ckp2VExkRUhHR2JUVDVrYXZ1eld3OTlFZHp0TGgyZ05xKy9JUXFIbzFWSmV4cFA5Ly85a0FBUUFhQUVBQUFTSUFRQUFQQVFVaUFnQUFBQUFCRVFHUFFBQUNBQWtDQVFFS0FnQURBQmxVYUdseklHbHpJRzltSUVacGJtZGxjaUFvTlNrPTwvQkRCPgogICAgPC9CSVI+CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I+MTwvTWFqb3I+CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24+CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I+MTwvTWlub3I+CiAgICAgICAgPC9DQkVGRlZlcnNpb24+CiAgICAgICAgPEJJUkluZm8+CiAgICAgICAgICAgIDxJbnRlZ3JpdHk+ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8+CiAgICAgICAgPEJEQkluZm8+CiAgICAgICAgICAgIDxGb3JtYXQ+CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24+CiAgICAgICAgICAgICAgICA8VHlwZT43PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MVo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU+RmluZ2VyPC9UeXBlPgogICAgICAgICAgICA8U3VidHlwZT5MZWZ0IFRodW1iPC9TdWJ0eXBlPgogICAgICAgICAgICA8TGV2ZWw+UmF3PC9MZXZlbD4KICAgICAgICAgICAgPFB1cnBvc2U+RW5yb2xsPC9QdXJwb3NlPgogICAgICAgICAgICA8UXVhbGl0eT4KICAgICAgICAgICAgICAgIDxBbGdvcml0aG0+CiAgICAgICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5ITUFDPC9Pcmdhbml6YXRpb24+CiAgICAgICAgICAgICAgICAgICAgPFR5cGU+U0hBLTI1NjwvVHlwZT4KICAgICAgICAgICAgICAgIDwvQWxnb3JpdGhtPgogICAgICAgICAgICAgICAgPFNjb3JlPjc5PC9TY29yZT4KICAgICAgICAgICAgPC9RdWFsaXR5PgogICAgICAgIDwvQkRCSW5mbz4KICAgICAgICA8QkRCPlJrbFNBREF5TUFBQUFhK25BQUVCQVFBQnI1Y0g1Z3djREI4VUFJSUFBQUFBQUFGUEFFQUFEd0lBUUFJQVFBSUdBQUVCOUFIMEFmUUI5QWdGSFFGZUFhc0FBYThtQUFBQURHcFFJQ0FOQ29jS0FBQUFGR1owZVhCcWNESWdBQUFBQUdwd01pQUFBQUJIYW5BeWFBQUFBQlpwYUdSeUFBQUJxd0FBQVY0QUFRY0hBQUFBQUFBUFkyOXNjZ0VBQUFBQUFCRUFBQUFhY21WeklBQUFBQkp5WlhOam1jb0FBWm5LQUFFQUFBQUFBQUJxY0RKai8wLy9VUUFwQUFBQUFBRmVBQUFCcXdBQUFBQUFBQUFBQUFBQlhnQUFBYXNBQUFBQUFBQUFBQUFCQndFQi8yUUFJd0FCUTNKbFlYUnZjam9nU21GelVHVnlJRlpsY25OcGIyNGdNUzQ1TURBdU1mOWtBQkFBQVVWdVkwbEVPa2RTUWxRd01mOVNBQXdBQWdBSkFBVUVCQUFCLzF3QUUwQkFTRWhRU0VoUVNFaFFTRWhRU0VoUS81QUFDZ0FBQUFHdUxnQUIvNVBmRXpBWkx5T3RIQ2pYR0ZmenZ6WlorZjF4dkU5cXc1Z01zVWtnSTc5WDB1LzByVFVDY2RNYXZwZ2xtdDExMUlXd2V2VUpYOUNBZ05lQVUyK21XRFVBMkNXK2FHUS85S0F0Z1BGdzk0UGFiTUlzZldNdU8xTkNrcVpyNXc1SFBwNUJZeUtBOFZDdWVTQmkzNEkzT0hHQjMxNVZaQ0UzNXhlL0xlNzhDZ0FCVCtsWmFIMjh4RXN2d3BRWVc4ajdhWGxYWFJ2UitpdzVzSis3SVVBM0U1bXZmSTFjWFNOSHhVaFlIM3dZVzdZSHlldnc4R1g0NnowNVJrOTBZQlMyUHVwdVFhRnJSMWtlc1lqWlBheDNra3VwNENKYmhkT2ZxZGFxY2UvK2ZCVlNXbFNBSitwdzRRM1RjZzY3clAzSzRiSHBvaGI2aEphQWZxaFpSVkJPeW9XZElxTXU1TFNhMjlUazRRQzVrTHdRYllJRnFYZXJKOGpwU1ZvK0dSZTZDV1RkSEp1NTA0dXFMamdKV2ZSK3Vua2RpSitMdHEvQ2NJWWFrSjFMN2pxMUNmNHM5K1hKeno2Y25hTDhpTkNacEl3YU5NQ2VaZjV1SElhTzRjREpqMTZIMUZaS1lXWXdpdHErMmNURVJRQ0Q1cEtxc2t1SjFYbjZxSjVtbnlTWjUvUHd2dllBR3VsanpKcjhZNytNZGZNVEFQWmdvcU0rODhSWFQrcE9WVTZjMHVKUlV2WmdKMEhLQjRzR0QxWVUwRkQvY3BoZm01TEx2ZVRQcHVNYUN0ZmtUeUpyZDRja0orZnhsdXdJZ0N6cFRPVTdaYlJwQjJXS0hFWjRFQWtIMHh6QzF6aElDYzhCYkRlTDhIZG00Y24vQ3IvQ1RRdm90dStYSjJTZSswYWphUExMU3ZDZG4vMHVXQnR5b3M2emNSd3FFYnBCcWsyR2JVcHlsMFFMT2Z0RE1aMERqUEs5MHR6TURXQmd5VWNvTjhrc2hkU1RjSVZOSm04ZWE3TCtHK0Rzc2xNSGZsOXlnU0Rxd2lvOElOM0FEbitsWk5UQXRoWXdrZVRzTWFiaDVmMlpoY01LY3BFVEk5OThVNFVKNHdvdXlFOWIzS1pxWUdTbm11STd2ajlWUE5ZbjZzeHZRS0ZxQjVhM0F5UVBSeGpaTkFpbm5BODU4OW8xckJDWC9pVVlHaFQ3QU5vSjArYkd6SjFBaU1WUi9XVThPTUE3RVphQTRnRGM2L3FuVDU4VmRTa0NrbE9yOUpEclpRZzkzRGtlYXZ1aDY5enJZS2NlekY0Q2MyT2daQ3NtRTBhaE0yY3M2ZVkybDkwaHZnN2hiL05LNVZ1VXdMcGJTZVpGU0pGWEF5aFVWbm9XQ213QjI4bkJWdXN3bWs3b1ZNdDVWWG4vYjA3ZzBrdlViRGl4cW54NDVJZ3FQWG1rR0F2M3V3MCtSVnloM1VtOFJiM2pPNDNKa0UvRThoWXdiR1l4VXREZzIzb0RYVmVhNGkzOXhmVnlReGd6YmczSUJqckd5SlZoYjU4Y2NEdzZzVXBCbXZRMmx0UXk4S2IzY2Q5ZldHNkpQcFk5Z0tPZ3B2M1pwaWgrZG1jTDRrTkEzNUVxOWpBc0NnUkM3TGVtaExYTERzL0hyb2R6dC84dldXUXIyR3JaUk9YR05rWCtGN0lyQkk3eWg1OG1weGU3NEFvenNIdjhNdWJEM2lBcU5qc1FsL2NDemlUZ2pEdW0yK1hYWmU5dExHZW5mR2xGOGhaVjUvSkNrN0JVT0RCMEduOUtpampQcEFweUlXdGtvT3QrZ3RNWi93WVpOa21paE45b2docEt2UDQrOENPbUV1clN0cHNLWUU5ejVuYmtlQ29wMTM3L1NzOW00TTRBTXVMSVpkRGhvNWdNM1BkQkd1YUpUQTVkTDNCVEsxeXJ0MHo3RTlnNVNtNWxOM0VqQVI1SVF5eTNqZGJBN2lzN0gxVVNjVkwvR2I0NkE1bmRnY1N2MmNBYkYyWlpreXN0TzFjYXRIZEdCV043Sk9mUmZmODB1VVd1ZzFNdFNtbW8vdjZhcGRHakI3b2NlTWREd3Q1MDZJeVo0WWpjV0FQeFFENHhobk1GUHZGdlhrR29wY2hXVi9VSE1tQWN2VVY3bjBwbGZlMU5FQVhjMSszZEMzak1xa0NML3hWVG5yVjFhWTltNERwQitvbVZMcXdvb3JzbnhXT3lPSm96ekd6OHFhL01uWDBzS0tKaUxVcHRDS05IMjg3RmRBdjhkY1lxcENMTmo4Y0VJWUZFUjFNdU1NbnlRaEx3MXhYNnZKdStTcjcwSUE5citrcnBDeUdYL3FRMUI4bkhhdE5Jd21vaXhWaitOc2dhQkpxV045a1AxUEdVYis5ODVpNU5JdVRIdm1wckVuSGRQQnFQeEd6c3FFcDNaUWc4STR3UmtQRmxMN0drc1Bkcy9IUE0zUTlUT2FQVi9VenFvUEdvZi94bVNoRlZVRFgyc3FBYXIybFU1bkdpcnN2MWMzR3lseXFvd1UwRVVLeGw3emxMSTY1UUUvU3VsVkxhTlEwSWY5UGgzZWtaZnltVTFwbWIyZURqZFliUmMwTGkzbVhsdjgrTnFWUWdlZVozaUowcFJpbm5XVGN2VkNjMFI3cHhTUFFMdGRTZEVEYjZZeDlMT2NXR2lZSnF6V21sMzRZdE5XYThnK1UyKzBsTTJ1dFdMT0ExNnFSc1RKTGpGZGYxWUhteTVTMCs5SnV6eHhGRjZXYnZmaTE3QkRFK2ZDU0dqU1lLaGtwSGtubUVGUjRJM0pFbzlMWWtDYWY2SUtUTjFGWHdxYW9URHNuN0JCbE4zSGZsc0pZUDVGY0pQYkk0UUVvVnhONzBtU0xvU3hsVEZ2Wjk1ZUpEQ1VzbHRDQXQza0FEblM4dXZCSDZ3UHJCQ2lYUEN4V3o4SnpVVkpFeTZtanhweFFjZlA2Ym10dDRQSTVJaXVGeUwvRDJndVFyVEdBbTZScWRTUUdjd3Z5WUdPUWVDVnBURStDd0FiVmx3ZUpXTEVpOG0zMUlhejA0OW1wSmVTUFFMQzhEMktlS3d3a0t1Wmkwa0FzVjVZeFlCazRaN1JlUkllaGhRangxWXNvQ0lLOGExQmsrS3BoQ1lGWjNXdUZFMXBVU2NWaVJIdEZXWHdWVlR2dUZPM29rR3ovMnk3RW1kRlZEOEs2RDZpTnpYTFRMZ2lPMFkxamJEdGN6SlVWV3hUVkhHS3I1eTh3MVNXNjFTdDhIWUUzSkl5OCs1ZGUydkdsMGJTMit3b3ZhOXJ1aitaaHJoSDNvRHhLS0dzdFEwR0ZldS9zVTZHMUt0ZkVqZXpLLzJwOGZHM3drRzVHazVKZlFSenoyaFRGVGVEdjQ0b3lHMGlpcmVlRmRkTnk5RnFmeTRHSnpUWUxFczAxdFhNa2FtZ2UzL1liUlhyMEZmOGpVS01kU21HUDkvamV2NldVMWQ3aklSS3lkZmNrTWM3WnFnU1FPZWtTWDV1SUs3a3VSRGxiTTE5U1ZzRzBOOExEVEJmZTRLY2x4T0EvWnhrdFRmcWNqV3dvRU5ZUTVKK1BpcHdXV2h3UE5pRXlhbkVaVW5tNVFReGgzMVFocDBoZkVTcWorN1BsZW1YS1htQ2lvUHgvMnRQdlJqaCtrUUp3SUVOdmswVkdacDJ2Q2ZYS2N5NnhTdEpDWENMejRpL1VKQ1dTTkxOSnZJQkVJNFJSc2hIOGpjQjM3T3JFVjhaNWFEZUZTT3NXSkdCMFNORG5ycEp1aFFoMnZHUk10bEh0VGM4ZHBnNVNucFJwa1kxSUpJUTlEUnQ4bWhTY0FHSzFBSmpZOW5iMHY3N2ZmZm8wRHBHR24zbmF3c0Q5Z3ozNWFuQ2F1VXR4alVuRVJpVWJtOXAxeHJRY1Y3Wkc5N0xqUEpPRU1XK25vL2tFbzlsbDVIa2ovUUZJY2doNlFldTNqRjlmbWVrY3p0NGhqN0JrZjZSb29VcER2cTNwZFhrM2svRWVOYUhuV2pWRDhiT05CK1VCREdyL2JmM09pQU5vVWhpQWttMndiaUN1VGE5bEY4c0ZZbHJzM1pwTEZMdWl3M0NjWUpRQ1N0MCtYVUdQNzZSdTUzTlR0RUxremxPT2VUc1ZhZjdGaUxkWXhua3pYamFhVjNta2hjNVV6elZ1U3d1ZTZkU2ZjV3lYSkZpMzFyb2g0Tk1GZ1VOTEdkb3B4d2g1bXlWYzNZa3ZCNC9XM2VHYjV3WDlWeTRIZ0lkN2YxRXI2ZHJEWGQ4UlU2NkNQZkRsei9mMUVPL25DUno4bm4xcVNMSHBCMkNPOE4yc09UcFIxQXJsVEpEcjViYkorQmlhTUNtYmVieDFOS0owY25sKzYyT3dqa2RtRlBzL2ZQbGpBR2dEcm1kWnJKUkhZVjVIMmFYd3pzdGkrUS9FNkZ4bzhia2R5OTdndXIzNXRSclFDdElUc2Naa3dKUlpVTFpPVDFIWWVWcXRrdTVEdWlJT29ZVGtyNFFVQTNCR2VaTnFseUlRbkw4UDhoZEVrVy9qN3lWc1JTYUlzcG90OThrS0ltZmpLNmVhU2RneGNUditBQkRUNWl0RUVpNkQ2UzhIZkhNOHRMeHh0ZWN3ekdHNWtidEFqMFA4QTA0Y0pGdjdpNGR3Smt1NDBjb1cybmxlZkdHWWFhS0ZyeGZhbFBldnN3cE4yeTFjemVQMFdVZ1UxQnpEY3JwSENSR3Rncm1pamlmT0tlcUJ3UTFBeFhQajZBVW5OSHhlbTZMZ0FkcVhzNVFLd3o4M2FGWllBVkpqY0JrZUxDVWxPSzFZb2pZYWZNYUc1YmFOYTh6eWMxQWZiN1NlVHpqTUEyeDg5Y05CV3VXenhtYVdXSDFZVzkzRG00blk5eUJwczhGR3ovdk1Mdmt6UjlCV3ZhMTFpbVV3a3c2SVJzMmhJeG10ZjFjUk14bTNIcGNPQlE0TlBDeUlUdmgvMFpSbkFyaHVjNFZGMHMwdVRTU2FTTXViUXJGWFFsQm1sc2VvcXp4WFNab2QrNWUzWkVxNEJpTVFUeWNtc09DNHVKU21ZVGJxdG9lcGFJMWErVXQyUG0wRDRrczk4Y0F0U01PcVFwQ3JjUTcrS1pTMmxONXFBMjdhazZFSU9JM2EwaXJ2V1EzbEZJUndGbVRCcFpGcnY5U2JwQnpZWFVnM0NIbEU2N0JraXVpVzlMUTVqd3hqb2hkT0lZUFYyVkx1NmFaY1E4c3MxZ1ZtaVJNNEJFaGpFVk9mcjFIYkxJeklTcGxmdUo1dXE2R0Rzc3hhNGtYUHNBYldnYmRVdllXNVBaU29ydVc4cE9rZDd1am9MQ2NUQTlSZVY4Z1gwTlNub0RZLzh0NDlVZkxYWkF5VmRCbzlld1RDZkw5aEluYWxZd05peHFNdXZoWTdiU1RTcEtIWEVDOEdDU290ODUrUFJPaytlRllXUCtYR1JHVS9oelVrS0hUR0RkcWlQMHEzdTNsaEk5d0dTUDVJT01nNU0vMzBOM2hjTzkxY2k4UVdWNS9hald2b1hjWm9La1psMFhUSGFONjk2ZnpXVk1jOUp6bGtZZTBRemtveGRiTVcvSEdUS2RuRGZSYTRIaGpxV1dyYUVETEtIZ3JXMlVZYmZEcTZkenRNcGlZWWRKZXd5S1VnclBTeDQzaG11SXR3SGZvTVVwbWVzR3l2ZFhtYnBwMEdMankwUHpkZVdLNURseTdVOVNWTXVmNzg1VHUyNXkrdk5mamVxbURMaklaNmw0UUNaT0dTbGFrWUpRdWdUNTZadUI3OERnc0ZlVnZ1NEFTNlFmVjRnWU1URkRBMFNjUjlJSGlLdUtrVUYrdVZ4KzJ0T0J5SStCTFFseVlpc2w1ZUc3T1V0YkpCbGFHekJBYVBXVmc4dTIyMmhZZ1BwZlNPc0k1VkNHUUNQSkxodVQySCtwN2dTdlEwbElNVHdMYzFMMkZwbWtCQjgvRWNyN2NZSHgrQjUzYXU4ZXZtTGJZUFh3Ulp5UlJab3BIUXBjR3dIcmw0cDNBb3gxZkJwUGcvckZFRTVIcEtHTWM4R2IvelBXYzBINGxMZExDbzUrTkFMeTRPYzZNc0pqOHBZSjQrTCtOY1pQQ3pFTzZsMDZDWlRTOFF0Uzk3d1FDa1BoNWxUYm5WeEFNMHBsS0ltUFFtYWNlWFQyNk9OSjYxT1RQUEticEM2c0cvME52WXlEQ3BoT1RyMjE1TzZVL04vQnhIQit4bEpONTV6TTJBZnQ5ZXpFbWFYb0czUXN4QnEwd3k5Ny9IVXhYaVJJWGdVaWFEOGNqUXFYcmJOZWlkeFV4N2tDeVBrazlxUkM2dGRvWnVNZGpwOGMvMXA1YVU5RWpUdW9hcFZSa1hPSHMwUjRLRkZmZjJEYnJibXNtLzVIUklqbDZZdzljZzRyUWhFY20vRnhsSUYwWWc1RE5wQ2pYcTQ5ZEF5Tk54UllRc2xBOW5NWHlnN0FVajgwbFA3YjBHRTBvenBPSUUvOGRRMlFRVGpCZng1RXJHMUdOK21QZVRKa3hNcFdlaGtDdlVieEdxZnZRNWRaQXVHREU4RTFoei9jNVI5aGZWUkU1SVRNbm5Edi9wb2lla0lVMU9uWDBqMjNvNXcwWVVVblBmazdyMW1DamVRd3dCZ1hSK0U4WkkxK2Z2Sk9NdkU2R3JYNGlLVkVUdEs4ZS9PTURkRTJ2V2xVdjhGZUxiTGdFN2U1bG0yNXpBc09NVFlkcEVZTU9nL3p0OXFpMG9zWHdrVGlyQ2cveDFnRmg5QWZKc3BGUmZESFZ1RWtPdkFRM203MXZLU0FZVWVKTHVodHUyOS9iVDlOUmhyeHhSZTZIUjlMQ2FjcUY0U3BaOEZpTzV2VHVaeGFBVFYwalRaaHpRSXVYSDB6VEJKUEk5V01XZzRTSDJtWitwTXMzb29FU3IwTnd3eGl6bU9PeVV2bXZraU94K054NnppaXNlVjVwV3VJMCtJK3lnaUVTZHYyM2ViZXFuNVBPU3l1UzdMSEE0NlRPbnJxcWllbjB3UW9MUG5YeWR0TVV6Y1BlbGdJaEZWL3B6QTNKSGNQRWpjSGQrbHBITDhZMTVBazRnczZzV293MjdZQTd3b1N4YTFIaUlQZDdZQnJzbVZtNmJwYlNxTVl5UnRzVlpsOTRIYlgrTE05OFZUa1BDMThmT0VZOThOTTBHdDVwWHZUUllhSHB1b0RMNTNXYnFSRGhSZlVya1ZuSTlRT2VnOHFDOTJabFNYdnAvRnRDZEx2ZElRRmVVZHRwZkFQR3A1U1VhZ3NQSld1clpGNGU4T29OVkZXMi9VTzBzMU5hK3dJb2w3THVLZXFQd0RkL2lLVnBlUTdHZnNYMjJUNWg2MWw4emRuQllJRGhvWlpDeUt0U0ZJQzFodVdkTm1lam96WWtDT0plUUpzc01MRHJUZFZhamZzcmovREF6V2NqVE55VjlnZm1ySG1NWHdwbVFscXV4enNpV0pDcks5N1Zjb2phM1RhRE5ZTmFBdmZmbUFWbEJYWm5ubmsrWVhFSmZ1ZHNxc2dzRm9WeC85WjRzc29uZmVDTEpmQkhNR1o4Vm11OEd5dWRsK01SRjA3emV3WjZqZjhwUFlaUHZRR2MvbVd0NnY5ZE5nelZvTUpDTUF4bnZ2TXNpQXp5ZzRSYWZCTExTeExubFBhbkU0UFRQQ2F3T096L3hQQ0pnRGNDVHFxTERndXBud3Rja2E2YUU3cGYwcmovU3QxOWh0b1BYMGpLNUxQdGNvNFpnUWZVZ05ZSTRiTmlORk0vSjJwUHpXWmZEWUZWOFNzbk5wVGhBbDh3RWpWS2FnMFlpeGljS0RXalAyOE83VlhFMDFudG0zdzR0eW82WHVvb2dHWjhnZW80SWVrYVNFejZWUE1rR05UeUtXMzJyS000czRLMUF3UVNUSUUwWTV6eWVYWno4Vml6My9mN1VxUTdveHlBQ0xabEZRWXB1VGkxQTQwZjhrVjBMSTNRSkI3WnNnenIwZFlxL0RzREt1TXdNT3JUNmFrRE50TmhCQWJXT0k0OHZhZk44SHg3Rmw0ZjlMNFNEdzljQzJ4clZsdTdmd3ZkL05nMmtoN2x2eGp2M1RDYUU3YjRwcms5YzRYalNUTFBCSFY3WkNSSWxJZmpES0JTeG9KVnhEdk55SG5HT2hCZlJZQUZReXRMeHowVjIzUmJNWEk5Nm9raGN0b3Z5SVRzRVA4WlhnWHRiVkpnaVo5Um5YQndpOTlOaDFtMmgvSVMrUS9lWWpURWpyZUxtaUIrNW8yTnFTMWJQUy9JV2NpdGtzUzg1aUpmd1dxUk42SUJFc2hsT2twRjd0L3BZaW0zQXR3Wko1Yk5NcW8vREkvdy9BcUNDcmRjdDdhalRtSDlZV3lwTC9aY0VHU25qNEJPK0dvb00ybVpaajJCT2FSa1FDTUtQU0QwV0NVMUQ1MFVkM1lBWkEvdGNzQkxOSVp3ZnMyUFV3OEtaRTB5WWxwd2FJaUx0UHpwK0pVbkpHTVhtT0NTK1I4SnNNZ2R2K09zTmZRSXB0WmxNUWhLKzZYRzM3Uk5yeEd6MGdvcWxRS29ma3FHS1dGUXJSRjlFL0VpaGtFRlMzS0ZueFBNTkRRNDUrL0hFUWFBOVJ4UlNJcVpoVUVyRmFYMmFyVHJXS2h3QldEWUlVa1N5SnlaRVZ3TWhoNVp3Z1FtV3BvTVYrVmpQd2NuS2V1ZmJSemhSUmplMElRYStsTDRFbm5HQXF1ZmlyTWtzbkdDeURHTVNzYUJIelVXVWVvN0JGa1Z0QTlwNGk0eXJqTG04THQ4Qk9RQ0hHYzhsd3IxVTZCb1BCRFhrV1hJUFVkRVFLenZUc3p6L1d6a3J4bnBxNjl0SiswUU5wOHRTYU1MTUoxTVl6M09iZ3YyOFQxRUFOUVFaL2Z1bFd2dGJsTW04S2x3MExHQXlpcHByb0Z6T016c0Y4aG9rdTg2akpseTJRMGZwOEhYSVQ2UHRoRmwvZXVRNTZoSEpUUU9lV0h2ZjFIdWNTTTRYVmhLQ21GTmQvK1BESDdrL1V3TmZYcDB1LzYzcDlXRDFQVmlvM0VlVElKY0NUeEdCM2RKa3g4Wmh5YldZcjhtZE5NQ0docktoNDdscWNlOUdFcm4yU1E4YmNMK2lTL1V6bFVEKzhlR2FQMzNJanlUVzBWRVVySi9ZMFQyRFFTNlQ4N3Btc0R5UWNaUTFMRHJCS0NmWWlFZndHSk5NdldLQ3k4b2Y5OGd6dUFNNldkY0srbFN4alJrc1ZuQlIwZVQ5SzUzbVlReU8vRm03ekRmYnlSNjVZTWZkVkRiUnRjdTdVRm5aWWdrTU9yQVNCVnFZUzRnUWNjOUt3bENGTkRvdytpMkZFSTcvTjdicXFwcVdUclMyeHJWNGFpNmpwM0hKMWhmSEJlSnQ3MXgzNjIxempBUVlsVVFPMGpZdkhaSGYvRmhuUUtsa2o5dHlRVGRLMW90TEVNTTZVWVB3Y2c1cjRacnBuNmp0Z3RyQWhPdmN4N3lvM3MwVzk4eCt1R21RS3RiYWxXSEZUVnJJMlY1NXVyb1dFMURHVkozc1o5MDVDUEFPWVpVYXhQRUZUOElRVC95NUozSm9samxuL1JiVEZSK0l1VnY2NE9WOVZoaE5weG12YmF2bStZbHI0TDJHY0dvYTVSWTBYTlpjUlZmdkZaZVhIa1VTNWVUU2x4N216UEUrVjlZeFp3TEQ1Q2NWTjdwMGlzbU1LWmpVVjR2YmQyYzJNbkNGTExnQmp0Ui92VHRlQUlrTWxZb3MxWldrUjhXbXFmR0RsbHRPVityOFltbzNXQkNsL3lmTmpjTkFSOWJTTGs3eStsZWhBOERzVURWVTJ2c0Y2cmNaMzVzZFR4b2ovZi85YmFIVVRNK29MOStHZXJ2ODdQQjhIeGZvUEkxTHpTYkZ3Qk5CcWtRb2RyOS9UNHFTWG5ubE9KODFzOXVhanNYOVRIWHVuNUFWZFFaeVF3Q3o5cFVlYTNlcDF1SzRFeHloRVo3T1JpWXMyYmo0USs5aDhKM3ZQY2RrL1ZDTG9hMkJGVVk2eHlwZFZsR25wOGNWQ3Jac1phS01IMnY3clBuSlZualNlaTZHSzVSNUFNc3dSWnltSFp0QXJOb0xSODBIL0VyR0M2T2lTYS9aZFMrb1QzRDd0Z2U3ODJRZ2MxeFEzNlEreXZLSHFGNDI0SW9oRHc2SnJVNDlzYXQ0ZkkyM1I4UjJVTzNPV3U4aGdtOUZjemxTVHNqWU5vbW8wd21TWTlpZVlGNURzcEsvZ2JyZ3l2Y08zTXc3Z29maFJROUxMWkF0dHdCcU1VZDU2dFZCQ1k2aWpnQlVBVklVK1VwU1RsY2RBNVVqUmYzaWZsMjZHM1l3Y3M1dFpNQjROV2ttWitiWWVLS1JNZTZOUG1BM0VhS3N6WEVJUWpVam94cm5pS2YybHk4WlN2QSs3MkFTdmlZSnBWR29WbDVhb2g3bnA3RHI4UnduS0lidkFQY1FEWTBGOGR1VzlVMnd0VUY3bmJGVGhFZGdkSTBvb0pkSWxtbG9mMGV1UURYMFBXWW5uWjk5RXRrSVdQemZQM1E1S1lVZjN0M081aWJPc2VFbGQ1NHBEU1lOY3RsSm5HV1d3Mk53UWQ1eXA5SHRyUmNOOFlpOENGamJPY2JRMUlyMCtuamVsOExJY3RnWHRrSENXSXZkRDBWU2k1ZGpkdG14UzdOYk4zTUdZZTdUZ0MrQWlyMFdhay9UcTJjaUxnTk1yaGxYVFdVOEVzVnlBM3NzK1F4REdTNVhqWUNlRkdLOWpSWVE4QU5PdVpOZHFJMmg1WlVTa0ttcm95UDAwRlF1V0szRVU0NE5uWjRjVmZyNVBiUEkvWDlDVG0wRkZBd2NnWVo1ZUE0OGlhYm5PZzN4eWFCUEgzU25LaE53ZTQ4Sm1CSWFHYnpWdVBXNkxWNjgyQWxBY3BlKyt0UnE2Vk80eWdTUVRRU2I3Q1BLWHdFMVdCKzI2ZnNuejVnR1huQ0dDZXR0NDlKMHhwYlI3R0J2Z1F2TFN6TndBckF1elZJbWxKNm1rTXY2Mm1yOWZad2dTVVdnQ0pHTkZRSDFPakxlcFdSNUFkSUlRak1zNjJXank5WXdsdDVWNDE0R0l3c2lGL2JuWmFzeGc2eHpiZ2lKdmxjTzJwS1plUDZHRnRMcXE0cGFPM0NEYVdsZTRwUjEwOU84UjN6Q3BOUTdLbi9YMUtqY1BjTEU1Tm94NXNqT1c4Zm5FVXlpZTVwK3dPZzJVR1RCL3kzZ05QVnBMQkxRMGhuejdHdUp3L0NjK1VJTlBnb256UGFVazBmY2VRQzZkMFZrdFV1SVozYzVnS2Nmb1VFUXk5MjZSN0NjUVlndTA1bnhZT3BZanhjUzB4MkFDb0sxcG9hcCtIQkdzOWxRWEN0aC8zZTg0SzZma0gzeS9zSXVvQ1IyMFRySGN1TmxMaGlnV0o2K1Y4LzNUMnlaYkxHbFhFRnQyN2tDVnV3YXBvb3plYTRuNGgvY1JrZUxFZ1RhWnB5cW44UmtaODQwN29xM3VPZ1p4enFTRGRVYXgrd29QbnA2dk42VmxXckI3b0hEQWU2VWlldnduRnR6WFJia1pveml5dFZSajFrVTI2U1p3RHZzQ3NmdndFbUNuK0tFL2toNklBUDg0UVhab0pXcUN6RldyRG40YkxFMzRRUDVHREtseWRsT1NaTUtsb2FCS0JkR2pvZUZPNTFocEVWVnluMlVNMXMvQ1BoRUJmVGRSN0wzVk1PNGtlYlEyeXo3a2NvRTN0bGRsSnNBdG84U3h1dnlrWjBYRXg4RDBSWmZyUGprc0hMZG03anZDVjRDd2tqZVhQamd1SnI3NG9KaEo1ZGh0dTF6QU9nb2lVN1pFTmZLQkVDOHNoaXJaOUtDMHRBNEsrSWFVd2E2ZHNuamh5WGQwbW42YjZhU0FyR2liZmZvL1lTa1lHalNPd0w1M1poNWliTGhtTjlHTHhNQnRISmZwVWZSdzdiRUpERnJCK2pJVXpESituRFp2RnE1aS9KcVRwS0tjazJuL0g5RHNXVGZ4REJFbmZROGtQZHN1NzF4ZDFRRy9Ua1AyM0lIOXZlMUFoRFRHRkhFbElkTWxBbmtkZU15S2t6MTRyYUQ2dzdlc0RMT1BSd1JhQmlXS3ZFTXVxNkovbGtKSGxhQ2dPZFU3WEg2eEYvYXlKaTBJWUh6bllVYVU5eVF0UzExMU01eHVKMkt5VjRuUDdScUw0VUVYWWZMVHRhRE1yUUdpbzVMRDR2Zk02c0p6aWFJV1hqVENzS2dkRlF5V3F2dTc2YkhJSldDcEZnOHVIUjFWZU82MHhYKzI1QU8xSnZwT0tzdkhWMDdCV0syRDlONnpMNHM4ZW1QZks2Z2FweGVYeWtVMng4d29QeWNGcElZNkFkMUpZVGx0UzJmNHltWk5pNFV0Ull3Y1FobEVZQ0VBbzR2bEF2Y1VBS1ZjQXAzVFdzUU9mYzN1UkM5L0h5NjI4dUFHWTljY1h4OUdHampBU0hYSEk2cWk5RlZGSEpxQ240WFhubjFDNW4yalpGNWkxbjV3c09SaXVnSDZINTJVeHUxOTZhSTFNOExrNkNvckZPZXB3TGVkeG4wQ0l0KzEzWk9INTVsOWVqeHVCYjU3Z0FkbHhEZ0xUV04yR2pFcFRMdlNHMjNVQk8ydjZiS1hYRy9UQTJBWitKZm5HYWtEck1Zb09ud3lVSGNLeHA4VGhJYlYwVkQvQ3ZXZ0xiMkRpQUxEOHpSSm05ZFVqLzVyUVV0b24zekI2ajcxTk9YT1BlRjhSNitZZ3g1ZkZtVG94bExjbzdUamxyckd4OUVjRXAva2pYTE9qellRUUkrZ3hMK0FPUHRseGRjM3c3OGYzTU54eU5EWVI4QnZLQzE3bjNLN2hOajFzTllUd0dBUkgySExMT2NUMXlDMnhQb0hRT2U2ajB4L3BCN0sxTmRWSS9yaTVtVlpMUmE0a0tGMzh5YVNTSXBzdkhvTWlZQm9aZytqTUJmVjBsYnoveWVSMmgvMXVmTFpJNERONXFHT3REcUVNNUZzdC94Y3BOYnFNSmNDOXk1RXRqSk1kOTRmSXVRMTRYT0UxcWN0d0JKSFVORzJiVzhMRWhIMXJ2bjhlM1lzM2lseDI1ZlRQRTd5OWN1T1VKOXVXRkhvUEZoYWl2Ujhoa1RWek5YUi92dnNDVEJaelZZY3lTZ3dXeGw4Rk45K2pTR3ptUDlKcEdnVXNFaThXTytwQ0JDNzhMTm5KMmdVZWVSVGhJL1cxd1pNN1Q2Sm9Ea0FYT2lDZnJIa1U4QWxHZUJoTEZTQ3JsYjRMSWc2dDRDclh1cTZ4NHdlU3dhTXpzMjRKRE1UUjUyTi9xNndGNHNRcEgvU1B1NGFKcUZRRU91OFMxMUYrY2ZVaEt2TnplTjNjQy9VVll6RWZDMndueEdHV3BnZmhBTVVuUHVDcituUlBMZ3NTekZFUnNWQVRZOXFyMHkyckt2U1ljVW9PVEdrTk9Fb3hLWmZiSnZzd2FYclZNYlNjZVMxNS9ZWnVJNnhTM0gwZUw1QS90YTFycS93bUxPL0wwK0VTSTVoVENkVGx6a3kxNk4wbEZSdVJjVTBPUzBJYWNLcWFTazVnV2ZaeFRzcEE0Z2NiTkRLY01zTTQyNFpSN1hNT1JTdGc1UVV5c2JXUGh0alZ5Zk1tM0QxMG01LytyYjVicko0ejNYRVVoTXFpUElmUEtTZjJKdVEzQ2lPWjVJcFpVK2t4eEJoMmZQL0ZORDlnSlk5T2J0SFUyQjZUaG1tU1MzVXI0YjRpYU82NXhEekVlYUJKTW5iMlpBOXdHTDZlNGtyQlVQRzFuaEFmWEJEZnFpVkdDejc4cjdQL1JDd2JFVU5QaEFFZEFzWmsrd0RkcDNWUmtYNzNBNXhsNGxkQ3pFeGhXOTRpYldTYUdRNEh5Y2Rhb0hpVEV3Rk93K0JzaWJjU0wraXAxMG9vYUlPb2cxQ3VnWGNNREFXVXV3ZkJ4RFV6bG1IWTQ2bHpaWlhYUkhoQzB5OTU3anUwWGNlRG85QnFsTWZqYlhBUHE5cXJBTFk2eGxDOFJOcUt4VkQvWUFGSWhXNXQ5WVU4cE81dHFMWnE4T1JQRHhUN2hSZHJvZm9JZ2pQNDdsQmVsSkY5WVhBS0I4VXRsTDIvQW5OS1p2bVlmOXZvWW4wOTB6Z0Urck9SRGtMSnN6ZUwrWXVxZE5lY0loeEx2Uldic2s0TFBTLzN1VmF3WnY2dHM3ZmpjcnMvZVRlalpHdE9LbWJRQXZIMThrSlpZL3I5cHYzOVg3UEVyV3JpSVV1YU1scVhzNTNJbTVjR243dnBwMFlJQ3huSHVkUW9IWTdpbk1SM0Q5YlBuL2NwNU9oa1ZsamtjMHhsTW9NcW5mUjVEYXpuNXE1VmwrVlVoajAzN1VOZm02clYxZDJDNnlKQ2ZkeHBUS3JJSFVGTi9hd2J1bGZzK09seUpIdHByY1htVHU0d0FNVnplZUxGUFZSaU9sSUN5WmRaVDVpZVJwTzlacXdCa0JpZzhkdlRIZFp4NC8wRGxKaGJKcURGUXNBRlgyOGlyOGtWNHVFU09kOE5WVGJRcE0xUTdrKzJnL1gweDdRUURPRUJVQVovQlVha3kxNGhZV0xCaHVNZk1nc0t1aGdzNlpqMVRDSUZsSU9GeldIYXh1L0RmbjhVdkhCZjBvcDRyRXV4NHpDOXlKUmdTY24zdS9ncmxGWHpSY2tiOHlhVTNaYkZsRWlYY3hIMGlFWkxqNDBvRVlCSTJtZDJQU3g5dG5wb2FFdmRjRnpPb2g1dytURzhyOUVMUGI5RHRuUEdCUmJKbTBieDJsNkVjZ3Z6QTh2YzJ1enBYWDlOMk0xd05EOFpSdXJmUitUVFR3STFKU25iNG9idlMxSlVDRnNkcGF1NHpFRDZvT1IyUlIzRlZxalBicTVKRjZlVTYrYlRBNDNDekhzaUw2UW9UdXpKRExiSGZIRVdlRENzTitibHdPWXRCWUZ4S1VIRFc1VUdlRWMyT0RJL2p5ZmFhQ2VGeXBzVDZxWW41QmQ0Vll0bTBxc082eGl4MkkwTy8yMWZSdnhyWkk1MFNXMGdlZTRDdVFqWW1TNDVMMXRGK2NqM1NyeUFQcWxDZ3VNSWR3OFhPalBiTFlyUUVJZ0dEak5jWW56NzkxdUtTaWp3bkxWVjNSaGt3WmtJdEZyVVNFelNQcGFKWWJBb1ZscVJueGpFanVZUHNVL3hNemFxUWx6YnBoYkVwelhYVVJ4VXEyaVZDMjdWS1VkT0h0Z29OdU9JNlgrQWJsZ2VJY0dQTU0zam1VOTQrZFlKazNIZzk0NmRWNUpJUFB3RHppSEo1endBMS9hREdJQUx6ZEF5Y2xsQXh0TDlIMkw1eGxXYnlHUU1kUFladHBaQmpVMFhDcnJFM2FqVHhOUVJKcGY1MVV0ZU9EUHBTZU15c05uWmVtTmR5SnE3OUV6Mm1FRko5djF5WkRXL2w2bUJmRlQwYTFvMjFKc3djcFZoZ2F4WWZJZUY2WlVsRWg1TzVabmJ6TVJmbUs5TEljSnlNcmtIRW95ZlBuTnJvOExBY3ladUt3ci9HOUhpOXBUUyt3bXlsS2lmdDc3LzBtZm1sNFdwY2wwMmZiWkxRZ0ZlbGczYTN6WHlPTklUMDlmbG9NbjUwdlVHQTB3M1ZqcU5pRFMyaGY4RlQ1VW96RnFkY2V0OXc1UTBlZVNTMi9pbVluVDVrY21YalNDbElObysxanhScHZwTUlEWWM2UStiSHM5QkthOThGSkp0ZkMzZGhjNlVmRE5ZRFlBdFkvVWhsSWZ2WmpWZW44dnhEVTRxa1BrZjIzTTR3WFFuTmo4VUVHbml2aVlUZEFPU0xTR2l2M0J4cUtjWTdpWTZpR1RoOTBoUHpOYzlWais2NXpqMHg0aUF2NmwyRjZwbnRaaGUwSjRCQ1VvUTVFdmJIZzhvSjVRSmFza3FCNTB5bStQdjlMT0tFemJoeWg0TGNnZHhNVU92SXIxY2hOMFpuNE53a2l4dms2cUorcE9qWGdnSm0rQWdJQ0FnT2VmWVRkTVozMXNBSmdJUnJvVWh6VjI4cUdxRU1ROUFnVSttRnBTUEl1Mzk3ODU4cXpNR1hnTkFlaEtLa2lvekFNdUh1N0Q0eFVNYk5obFI4YjlHa2MrcE5vUmZvd0M3UDFJaTVtT0VZRmtYby93Zlp0VW9MUThqTTU1QVI0Kzd3eDZPWEpOOEQyb3REaisxYXo3Z09KdkNxMXJOMWtQbmM0NGwxdWozVk0zWnJEZ0s2YWRuKzNhL3RwSUpLWUthVUpLbTVtYlZTRjZWYUxjY0RURW5Tc1JWWGFJWEZoWU9iVVRSWERrVStwVUFRUVl2RFhmeWtkVGh0M2NYQ0RwOU1kRi8wdGFnYkxQTFZlVTltdWo3NXhGTk9qOGVnL3hDeHJkclh2QlQrdEFiTW5jSG5VempUQm1nc3pqN3ZlSElUZ1NqTE9UL0ZHQllLa0pOL1dCczc4ekFuVEVPS2pxSFF5Rm5YclpSemVMQlVUMXFFYVRZTGVEbTNkZXpYMGNlT3dpYmpGbEpvY3pVWXEvK0FUNUtqQXI0cGU2VmhvbnJmU2lUWWgyRFVodk9aeWZaNVh4K0hCbXg3dHlFZngvOXU1TVRsSWNIUld4ZnpORzlwMHk3WVNaRERrdmVqbUpZUDlEVVRjSnJraXNudU96THZ0eFpJT1ZZZHdaSkZ6L05LbTFZV3RzRVoyd2g4TEJjUFcyRm1HMEFKbVQ0SmRqRHordGNkN1Qya2VEOUJ3L0tPajRSSFJjdWFNNDZzNWdzcEd2aUpSOVlOQk1iS1lHWjU4VzJZaWpsMGxuSXdjbXBnQW5lOEVXKzdiMWNNSWpCNUN4SG5nQkp2M0haNXJNZm1mMHc3MXRVLzRMRzI2bWthWjZMdTNDT29nVWkxREdUS2o4bkVpNEt2d0xtWlFNMThnakZ0YWVCd2dXei8xWm5YZ3lNRDZCa2drTGJMNElCQUJVamNnTlZxU0svbVB5c2NnTGhXYkNsR2xWbGdqazkzcUpZYSt6cVJlaFZYSE4ySGo2eGZuOVVnckpnY3ljc2dMSitpdEExdkZTM1dXVUd5OU96VWc3U2xnbE1xc0VWeEhDei9lYmloK2hxbSt1T3h5QUQzWSt6TjlYSGRPZDgwU0NtUE04bGZqM3lrOFJSMktCdFBsVXd5alZTK3pKODc5NTNrZXNSYjZJUHN6QVdCRWdYeW4vQWl6aEUyL0ttTU1PUDNQR3Q0WGRkekNIaDcyT0dSWU41d0dFc2d0eFphNEJwV0EvMXlNcldxem9wMkxZYndlRTJRUjFkNi9RN0lPY0M2YWdqSFBkeFBwa2MzUGVjVTVUQjBKSzFZUWUwek5CU0lUNFlabFZUOFkyMnFndUVDK3M5TzlHbXdiUFVmWlord0t0UFBhZGNOWnE5am1DeVdHNXFlTE1ybEMrZGQ3WVl1dmVndTNmdlNCZ3BMYWRETHNaR2FtRzZ1N0lsTkFIc1JaanFjbnJEZFpJS0Mxdzg3Q1YrR3JmdTBCUXlyZzJqWFBSaGZBVmVIYVJzVFY5WEpsWTR4VmZhSHdNM1ZQSmpLMjBYTy9TS2JSMWJYbU5QTkxXK0trbUw1ZFZvbk5QdDVFWk1iR3JqcDdzNE8yM29KckFsZ25nSjBFWHZZMENSY0l3bkN4QTZtbjc5TVFxZ3EvRHlrUFQ3bHVLKy9qYWtvclc0NVkweFZJTVdobGQ1QU02VjRhTDZCYVd4N2Y2dTMrdDFFMDhkOVVlc2h3cENTdWQxZm5mNkVFcjJGcFp3UTI4cHZtVTVBYi9QdmhuUzBpUnNLY0RhWFpoZUJnbmRLRVBpNnBJRFBPSExHcjRhNlA2Tk12b3hLa25GbkZES1RkTXY5djRza3MvaDZESlMrbDZhSHlHdFVvc0Q1bWR5WXBvbU9IWHVpT0RyUy9sMUxadFhDUXJSZmtFckhqL0NJMnZkcmt5V3JvOGZpYzlCekVGdWVZVEF1WFg2WlMxTThhYW1LMVNSOUNuaFM2TlJtb3U1cGJiVjgvOEwzWWxuSy92Nks0SE5SNUZQUGdIaFFzcnNaVHUxTy9kZVJ4Zk1uc1VLZTdlYVdaN2I2NXBvL0FNZTNJcnk5KzV6cTEwNmxITUtLL05JVUdWdFg2UDh0Yi9lcVVNaUVheDcyY3o5b05yTTV6VW1BaE9DNkxRWkVxbGJnSFJNWk1XUk9HZzZuczJTalM5OTdoSDBhT0FkdUZONXJUMnN4S1gyUEh2LzA2azZnRlZySkIzTElINzZ3b0pwa2lMTC93alFhd0dJM1dsUG02UEZLS3B0blVLNDVEL09udzRpeEpoU05jQ1NoZjhvVDZuVG5ITUhWRjVlN0lDTnBJWUxLVmhIZjYvTGRRNWRJcWZzZ3JLTEZYVmkvTnoxb0RBR2FPK2FEVFVuUkZ3a0VLQ2lVbXhuTHBoVi9Ga3ZsMzRJYTNpenN5WE9kbmRYUjBIbTdFM2VuK3FxbnAyYTlQNHlOaFl0L3BTc3J0cWF4U0dDWHZKY0tmdTZ6RHVORExpdUU0Q0NWeWkyZVBPbGhqUG1zNmhLMkZVTHg1THB6emNlbjVTSTdpa3Rra24veGtrVW5BZW9SbFoyR1N6cGU5d1IyMUVwYmFPOVZWUWsva3I2L0pIN2JUbEtqNnI4d2dWR1p0NmVUSWY5VXBYV1htSzFTVmtoQXBhUExTY3RXVjBocXU3L1JvWTZzcGVtZEpreFhMN3FNbkpNT0tKOERGTThLNkRPcnJFajloNW9XbkE0YUpRYVo4cEwva0hnbjRSeTB0cTM3T241TVg3OC9EZG5FalU0RGk5VVZlam9XY0dzMkVrUmMrQjA3T3phdCtaZEhXRG9HWjJzaUJzbVRrOE9VVW43dVFrbk8yVmlQM0lBUjVNM2NpU3ZPV0pkU05uT1pSUjdYNEJFSUVOd29hbzZtenJqeG9yWWN5czdXVHViTU9EVGJVUDduN1FzNHQ2eHhtNzgzalJxQ2xocVBUc1h4TFIzcG9KZGZwenc0eUJCa2N4TnhpMk5PcVU0bmN5dW1YZStmcWc2R1BsYXl3ZVZ1dVpyelBEWjRjZ0F2b3R4THNNZ01VMEs2NDdOTERpUC83NHAxVElWRnZRd0ZkdHhMMXJ3UjN2Y1dQR2JWZXFnWVhXZGliYlErVGFFL3M0YnFSRGdJK1JTMXVMeFRLMFVXMU9UdFd5aCtZeE5WUTFaTlYyWmJSdXFGVWR0dE1lZTNnQVo2N3BxTFYwb2RLa1g4Y0Vla0dMSVZCS1VXQnJUbXdyZjc1TVl6TjBYL0FVYzJNbzVwTmZTSnRGOW45aG16a3BTMnZ4bDVDZVdXMGdLb1lPKzk1dUN4N3BhOFRNazhiTmY3bjJzeUNkTU41UVJ5NTlJS3Ryc0JxZUhDaWtmUUVrd1RPZmIwZkdEbmVxcExKVTUxSlIxcFpXL1B4VkUra3hncHMwczliUzJ0NENXZ085YnV2NFo5NE5DODRZVXJUc2pXbWhGUHk0YzdhalNLVjN6WEJSV25CWFZSb29WU2owV0VDdmsyZUFKTFhZaFgwU29oTXF0c3JDNVhwVzFzQ0YwWUVoTVZFZXFBZ1FvdnhtSjRvdklqcnZSWkJVVXVmL2h6ODlsNmphWmNQN0RCdERlN3oxcFdsMzNDSWV1RjE2NTh2c0t0UFJzVEt4emM4d1VTbndhMkZoRmpRVGE5L3oya3VXUnhQWXV1STdteFVsUms4SUl4K3RBMm9qbUVMK0ZwMC8wdmZHUjlESU5PQS9UUXpWbXMzbkxQRWNlRExYVVlFZ2VvTXFRNU9ST0lQNnBKVlU4bEllV0FiRGt5aWY3THpPUUliU1NTUlNOQ0twSVNIdUxocHJzdFYwWDdtUy9la1hTbmV0eWpRdFBod1RuYUxMRVdQeW1LUmhSdnZkWlFyZEpJMUU4cEI5czVLR0dXT2cweTd4RS81QjlCMDhWTDVCNTUwa01ROC8zb2pjdUtoNjhzMjhMSjhJZE1sWHNBZVZHdndtci96bGJZYUsreE9Icmp6cmFTcHdaT1Q2SzdqZmZ3cG5PYURxcUZlNDdaMjJjUi9zR3lrcU1HL1Jzb3J2NEJRYzZHYTlpRlJKRGVYQmJ1QlFNUVczZW1OVWpVRFlrZWNpamhXNnAvS0xxMFNYbDBpWTZWblpySUpJdGVvcXh2MVgybWxKZlNJRzlZZEN4cWx1U2dtNzZ2eXQraEdySk9zenBsWjFKc1BaMU1HcCt5cVUrZExCY1hyMmd4bndNY1VzV3UzNG02b1RQVE9oZm5ZQ2F4ZEkyOEphNFdaRk8za2xpakY1ZTJkbzZFSG51UkY5NXJFUTd1ajd0U2p1cDFyYXJ1RVY5NGkvUFBPN0s2NSt3K3FmTkp3WVhmc2dGQVhRSEY4cG9tbWovaUpNNzV5YStCZWVpUmRKbUpBdE1CQW5CNXNwUEFEM2Z2OEI3T1kxbGpnSTVBVFhCMHRpRFZMMU1rUWowZHR4RlY5WkNCUk5lWXY3UGNZdkQ4ZytWTGxrRmpNNEdjZ3hITG5ySHFYOTVQZCtJLzlMdll6aGo0OC93bTdrU2doaUJqN2o4eEhhQmJaSkFnS1NXaldrU2RDcjdaZkxEekt3UlRtNFUzZ0JMRmpjQWdGbS9GVEZwc1JCZzNIdWFDR3MxMnBDdGxLRk55d0hPOHk4RVVjdmphQytTU0ZhZFlkbElnWFVqNFBja3dhbWNHU1VFdGtwdXBoNFVCOW9YeDhRL2hNTmp0M1pydnZsUlhSWU9pSkZZd0lqT2ZGaXlhQ2hrM3Z6R0xGdWZxRFkrZFFxNU5QYTJBMG1XQlE5TVhRT1ljQWxkeXh6cXhBK2xjaFZWWmFhY0NTL01QWUdVSHNGZkVWY2pwWXJBQmt6dEsxVXcxOXdkNDZXNDEwMnovSDV2QU9XUDlWVVNNL1Bud1ZvYm1jT0RQNWltM25JMVRiYXlIWjdRU3JBSnBCRXFzZm5acWpreVhlRnBDY2NrOVRyZmJldnh0UnE4dHlJbTB2NnozYVFoUnRRL2ZhdVRzekpDem1zQ21xbDZYcHFnL0FZSXMwSTBhaGk3TGhOYzVtWUxNU2h1TnBhckpGN2hjQk9DNDEyaVVPTGllcWhod1ZzaW5ncTVJWmxBYXh4STNMS0IvWVRSTlFOU1dmMmVabjQ1eWZHVnhVZWMzYWZXYTA4R0l3QVEySkZtSHZTcTNWOHh4M1psRlhGMHpOODFpeE45YVJSVFo0NUl4Qno3aXBIMXNGR1pQRUkyM2s3YlBPcENRQlJ0bGQxM3ovR1E3dEU5YnNlSEM0aVBMd2RPRDlwZjhvaURtSS9qTjhxQjNrdkVkbHhZdE11dVRadW9keVB6WENZTVNOdFdibWgrbGJVMGgzN1BOSmVwTFFHamJHY2FpbnRZdFZZdXR4Zit3Z3BabklTVEd5Qkp6d3pZdklkODZpd3JuTktJNk1udCtOK2dSTTdnWU5QZFZwcXY2OHRHbmNpaFFPY3FvNkVaMXVnd01iU0RGNGNJV0N5MnkxOUFKYXFiTkw3SEdWVXZzc09uRktjeURIQlpRU0l2VmJGeDZZNVJLRnhHd0kxQndxd1ZPWmFzQmwxcjZ0V2xaNnhmaGhFc1JnTTJXcWhkV0tlYUtoREJWKzFXN1kxck5iek9RQ0RkMXZJZE8vSVd6MEdFc1F0SjgrbEFDL1VJODBlV3JDRUE4ZFdBN0ZCZnIzVEw4VU1IZ1BpUFpGcWhwUGJMWWZmQkMwV0FEcmpOdlliNXM5c3FubGdBK1BjeGYxbEQzMWxlL1drcSt4am4xbE1YMk5aK3Vreit4bjMyMmNuOE85ZjkvMUNuOE82QU9nTlM0cktVQ1NQMXlHVGxyNktqTUtyZWhUT2NkU3ZMUDJ2ZkVianZvY0xIUVQ4djhEMzJDSnJvdWdpKzZTOHJoclIzbVZ0bTBUNTVKc3IxNVh2akFFWXJWdnB2TWhkVUF0VHNoclFMbjYvL205WHdKV0hSamF1eVp2L09FTG5xWnhSbWIybE1qN2pmVDlEZnlic0VrWUJVRStPdy9Cb0E2K014L2VaZ2dqTnNXYkVzWDRTV0NYNitZN3hTUmpoRzZDM1B5YmMrN01PU3BpQzdLNkdHdFBmT3BXOGlFcm02SHNkWkhEaFBBMGFIdEYvRi9NWFNFS0Y5TFRJZTE0TzBlVm1qL1RuTU5qYVlXYzFXcVpPZGRuS294cVFaT2dvLzJZcFlsYVplMTRjZDlLRUg3MzZJL3VQeUFER2ZKU3R6N0lwaEJwaWtPZjlvdURNVytYc1hqM3BqSHBKUjNCMGNhQWw4cnY1T0xSR3doWG5paG1uTGF3T1ZEZXFZWjlCNXJ0a3FVb1g0a2MyU2JhSDhjaWZQakFpQjF5Q0xYMzA4TE96aWI3MTd6TXA5N1N2em5LVVl5YytFT2dDVzV2Z3dld2JESzA3VG1US1BPYnVyeGFONFZYcDdkaEZiSTFyQ1hCOG5OWW9rSHR0ZVBaZUtwY0tpS3RzT252dnh4ajNManJ5MXVGK2VuUVJ2TElmS0hkekl5ODcweG56YUhBdUkxR0JRWjF5d1JESUh4WVFxM2xlTTZyV2pId01EdVNReHpMZTVYeVN5K0dLUWQwcENiWHJqK1F5VmU1YThxQTJ6Z0VTRkpkZm1ubkU3L0FHdE9pUzZsek1nVmRId2F3c0t5SmJWell2Z0JnWFhYSFFvN3Q3Z2VYcnBsdzNHc3pOUDZQOGgyR1NhT1dRN3hBQnZXTDVtQmdxd0pXeFNuNk1HMzcyMFR1d0R3OXRhZUZzS0ljMFBJNWdKaG4zZ1U1Y2RJYVJuYW12Q1hXejdJRi9oRXhWQktZbGFWK1JxRGdvcXMvUDJJa2FHSjdPMGxkQVFnT2hKL0pSb0RYVHhNVnlpZ0RzWE9BYzhBV25PcVJCMzMvSUhucXZrblpyNWdZNmZoRTZCSWJpL3BDWHVmV3p6TysvcXFPVXFsYmQ3UmFmOG1seUZLdEsyQ3hueU4yN1BETDhrNVpwV2NqQXJKcGU5YkxCQkQzWDJ4aGtXMTRIdVR4QXFhK3hubURSTTRvZTdjVDVRZXk2M2tRUnhlb0lPdFA0TEFwcTd2Z0xmRTVtYUM3Tm1sQkNnT3N6czM4L3d6bTZ2SzJvYnlQRFE3cUpDK3dUZ0RmL1pHb0l3MTdoUG4rSnZ4dlJQSGlUOTZUMXl1VzZhT0lqNVdUck56cEYzN1pXYTdVczZrWVJWTDhKUEd6Ti93L2FkNjV1VUJlLzFPOHdNcWpjTEJQdVpHRXp6cXBvdSswb2NYRVRiOU5jU09vcWxWNXdDZjdzMWF3blpwRzNnQWVPSFpTMXNCZWRHRWQrK1hlbVNuck8wUHhwZTNTMjUzV3V0eGZ3QWRHZkl1V2R5R0liNEl2ODBjUGl4NWtxLzB4eTlucVdCRG1HeDlVOGFGTGdOWkFUbHJ2MmJTcGxXWHJDaVQ4N0grbVZzemM3M3d0QXN6VWdMTUFXT3JoRGZYL1FFYWdZd3V3M28xaFJSMXV0d090bHVQTjZaMVVtMzBjbFBrNU05RFlQb0l3Zm1LWDhqK2FOVzhtZUp5Mm82T2NFdEJMelgxbk43M0tJWWFqSkNBWnRrL1pQSCtUQTN1UUZuZGIvR3dVaXlMUzdBVWR1L2pBMkcwcSt1NjRvSmVvczdxRWEwT1h4eXAvOHJCL0JrTWxBYS85WFJrWGFWQnd4cnBlQkxqaVJrUmc4NzZoc3lSLzdUdjZWeEx1Z3ZJSVFqUlYxSjFCTHlkMzNjVzN4M2JVYWU3VjVXOHJYRlRjR0RaTmFNWUtDRS9PNnFSVzRsQXZnNVg4cEU1ZDdSVkpId1kyekZnWlVkbkRUcFJjZkdjMHJraVR0c250R0tkZWF4V0tqaDJZMGl5dlBtQklsejUvZHBNV0MwTXVpRndGeFA4V0xwK2s0NnJYa09qZ1NrazJHbDNJeWtnK0hqUGNLTDZxZGNqc0Z4eGh1dUtvMldPUWdMckRxZG1reEt1bXBvMzA3VVdkcExoVmE3ZWpzcml4dmdIS2Y3THh2WnoxZnB3TnViL1UwdVY2VlRNYXVrS2RCY3B3M1I0L0Y2Y2ZPOHN5VnF0MXQ1RGszdmNXNlZ6c3RId3BGT0ZnMkhtNUNuTkUrZzNZMkxaT05hZWFoRmtsT2RwZEhGQ0RaVitUbnBTMVZzUFpZY0wwdEE0SVljWVJyM0FRajYxWFJTSEFPUlY5eTJXZ09iZm1rOXk0V29lWkdGQ0R0MkNkOG1oTFpoR1pOWjZqRkVULzEyYlZqUFR0UjY0NWEvZTVSWVQ1NkxBc1pHakxIdnhpS2hmUHV2Y1F1Skk5RmcxamN4aUk5TTdSZzZGcDg3eFA2T2NzYjJjZjBlOXlwSmZNMnpVRjEvZHhZRkpsSnh3WFBBRUM2bHh0YU5qMDlxUXFXbUNBZ1dKRDE3aVkxNXpQZC93aE94K0M4a0JEaC9DTjl6b3NFYVRnTzF5Q2xHSkw0TVdnSlNKcFRBcGpqYnBMeUpJWWoxK2NyVDhWU3JlMUFzRGZYL2RxVXZkV3VHd1l4K3lEeEFDVnZxZk9DdXloSEdSaFRycjdvRkpQZm5GYmkxS25NdmFMZVlFUGlESVlqa3c2OStvdEVNLzlndmJPRktmWjVCNndJRlNiaHVvbFlzb0JFNTB6MDRQeUVpeFNNWm94eVVwa1ZxVmJvMW5jK3hGdUNHa1hBQVlSNVpxbHNJenRLQjBic0w1cUcxdE1hanpaaGk1QlhUZUxKaTRZc0Z0K1hPOGJvdEU2MHl3WDd6cUhJSkwrRVFaWmVtT3JUZ05ZUmFIR0kvZWJFTllYTjdPbnUweUVuWHFBcW9jdmxnUy81VVE5aWpDNS9xQmdPcmJPUWd4a1FPR3YydkNJU1A0ME9iYjNWVi91d21rTVk4eEE2Q3VkQ015SFR5c0FPK1BpZlpFSXZuWmVFN0xtdlRlRzY5UlQ0alNocVlNa25lZk93KzFCeURMUlpTNGJ0VUtHdVBBUG9rVXZWZkRoOUxNMGhNM0FUWEJLNHNKSDRmd0g2NWlTbmVYYkI3VWlkUVg2Uko0NTZjZXA2aWV6U3g1MExsMEZKS3pxM083S1JvS20rUDJKd284c01uVkRyaGhLMG81dVJBTU01STFTcXU2amZrbFB0OGUvNkhtVktISGtvTmdwVFliTmpwTG9LZGlVdERVN0JiZ0xYQ0MwSXl5ak1VTHk1NlhqYjZXZitVaTl5K00wY0MxZ1hxeTZ2elJld3hPUkx1b1dEdFlWNUNHSktxeW56dmNPNlhjVDR2OFpHU0dleElmZE5xUTRsSFFRMzhBOE1SQUdzazhWd2gyVFJrc2dVbENVaWJleitYRmV5YjVJRGYyWE1IaHpuUUxMaXhLMHl4eVBVVld1SGlOTkZFbGp2N2ZydDgzbElZcHpPQUp0UWVXRkdOTW1aMnJRVG5XYmszQndUbVJ0M3BLU1NDdjRJc1U4VGVSNDl2djZ0Wm92NGd6U3JIVStaVVFvQ2xZSXY4ZUtraWlSNUlNeXgvYzJiSnMzZ05QMFBpV0ErWmVnMjI2azFMY1htRUVkWkxZY3ZuaE5lb1h2YzlOckdsVjFDOFgyQkU2N29DTlpOaEFFTUVVcVhFdGlZWG92N3lwRHlVU2xaaE80N0JYQlZ1Z3FEUzRIVjhrSHZzblQ2QnQydTcweVlValc3SGk5TDB4VnVOS0NGMlAwNUlOZ3FVL3I0MmFuaG5ZMmllSG9lTUdGWW5KdlNaRUVFYStNVklyWlZETFprMzFzZG9SWjllVTBpQlZ0Mk4vemlJZU5STWJJRlRBem1HQ1ZNRkFDNDQrV0RxUXFxakZIKy9wV1creFhJQy8yV0NmT0JiKzczNzZScXR0QTk4VWFicmNBdmFWUlp1NWVubTdLMlpaWEV6dVo5WFY2ZmFxN0hkQUNnNlRqZlFsdG5UZ3BBK09aS1pHQnQ5aWRHNjBUUTdNbHBHaGhDSnAvVEQ4Sm1LOTZXSUdQMGVrazdXWllSM3MyZFpNZDQ5bWNYdFcvN1RJckNRVDdTZmk5TTBuVGV5K3MwS2FUdUk3L3hibmk1QVJlV3lheHdHMW9MN1NobEJ3cW8rSTlFd3dqUjdUcjZuOTRWaUJRQVUyVnZFM1JvalkwQllzaHhiemNaejBjUnppZXhGNm83Q1VRdHpPNE5LN29aQ3pKWVptZm9ZblVwYm85c3h1NmlLTk0xaEhsbHZ5Y2g1ZzJwckFERThvWVlHc0gyZkRrRHJWMk5OQzNodHdsQi9OTDVRdjdHL3U3b0M4Y3RwSUNwbDNKNUpYY3RwYyttNnAwaVA3M2J4U1lIK3Ywb3A0Nkhuajl2UTNFU08xZXJLK0x3RFVZNWorKzQ0ckQ5dE1jR2pnTlBwYzE0Z3FDS0ZnUmpEWE54cVBtRmRacWNEQm5tOWo2YzNqWE5XM1lWUFpIRmFpdUx1TU4zeGxxd1VKRERkQnNscTJ2a2ZNdDRlZkdmUk5EN1dJQkJKOWFaZjRsbTJSMGhDMXRqUDk3Mll4eWhPSCtRdU9BQzdLWjhZZHNnVWQxS08vSWNWKzB3Z29MSFpNdlJOcSt4dXpqUHlkM1ZWWWlmQU9QeVowREdCUDNIRzJtQkNxQzRLQzJDaXR5dmpWeU1zbjF5NktLR0NXV3dueTdMc2RYcFQ5T2VHdm90Qmk3Q0Q4cG1XbHlQVlM2dWdxczcrOEdPdXBvK3BDSFp4QmhjdWlwZ3YxU2RIc0tCZURpOXIxSFowa0xEa01meXBuM0d3MXNlYUwxbGVXb2p2K0dYeWcxS0VrV0NIeGMzU1R6T2pwVmF3WHpuZW5IMXlPZ1NpRGZDSEZNeU5YdnkyK0FmcmxjMXNoekJ1WjMzSFp0Qm03SXRzbENtZzlqc0syTHBpaHVmYUdoMmxqcms4OXJLT3lHWElMbzl0V3NMcXZJUTBKbzhhOWtUWDkyblZuNHZQZHppNGlrN1BKQ1pVOTd2SUdXOXdhM3JUNnNpRzZGK1NRbWVOVnpwQXZBZ0NqLy9QZU9KVVNzbHlUZEZxK29EYkQ5MVQyL2ZJNkhVNkt5cmtYQnR6Ky9ERU4zY01QUHZTeTN1M2xaaklDU3JkdFFvOFl3b1B3V3RMRHZ3RExRZ2lxM3h4UkJTR2dTbHZBSHB2bnFXSUNEWHYyQ0lPSFphZU11UWNKY0xvQnVRNU8yMUhvZmxzTGFtbnlPcXNlcDkzc3ZURElNYlFkSzdhQjhqNFdCRlFNa1VkRUt3ekdlWnEza29IcFoyajRxazdxUlB0eHhsYXZUN2xYYUF1U2p2ZnJScHp2Y3UrMkV2YmJQRmdYU1BlWHNrZU1QWWRQWUpEZ2tmKzhIMXdQSmtBSGV6NGNVaG4rZHd5b29qcVp0T1BOZ2I3YkIvNVdCSjcyVUFIMUVvU0Rqc3NjZFYxYWFqYS9FanhNRFFTWElIOFZzZ3VyZjUxbFl2MGZTUFpURGt0ek5jVjZreU4rVk5UbWFaQTZQWnFKbUViUWlWL25FemVnVnlZcUNNbGtqNHVhdmdaUnlhOXFyTjNUNjJLaHFMN24vTmZKUXVscDZ4UUlQc0o3MFlrMSsxRVZDSVVCTDM2ZEZETDZmSm5TSHQ4eHNVTjRlczQwbGpxUms0TzhBek5xOTdmd1o0dzR4c2VrYi9NcUgvSy93YlE5czF0NmJEbHdneExOeDhmY2U2b25wOFdjdTJnMXl5NDZISVF3ZU5vY0JKWEtXZW50OTROLzE3L3hjM0JqS2JuMTdSMlJWMytzYzBjSVRaQUtkTS9yNHc5N0NpMkRYWW1oeFV4K05VMG9DNk4zbjgxcDJPd29jTyt0NHk1UE1NOUFBa0R6VVNFNFBHSC9ZY3ZUN0xIaC9tR2FIWkdiYWtHTFR5K0dBN1FaUmZMbVc1OXRYdnRzcGlQS1cvK2N4ZjhxNWEvREpIMUlTL0NQQmhTeWQ5d1JvZVlzWEcwckVRejN4T3RjekRJVUkvMXcvSEFOK3g4eVFsMzlEcVg2R3N0R2tlU3VZaUtpNHRXRFdmRk9uTDZrNm9ZSldXK3prRWtuRkY0TzRzc0I4Y2ZZNmtwdXJQOU93cy9UR2UrREhUS0d0MXMyUlVKaVVFb3d0aW1wWlZLMGRISGlmS2hyL0YyQ2tvbU1TTkhQT28yQWpUdlVNTXBKK1h0ZkJ3S0xkT0x5cVNYVjRQZWNNZUE2aW9nWlR0R05tMVp2d1JJaUorTnBDdWxFcEd2eFNzNWdXVHRCR0ZNRDd2K1B5WjQrdGEvRzVQN0w0MkZvSndwRWJhV2M0eEpDQ1M5dytJREtYb1IxZ3EwRFFCTmFNRlJUdEgvSFRPWjVaOVJrWVl1em9UbFJ3bjIzeDd1V2k5WlFybGwvenczMEpzU3VHdVFqVVcyVjhjS0ttbUVlRVdvVXNJbEdrK0hpNktka2ZWNHZodURiQXJZbjBPSWlRZC9IVXdvYVl2Qm1VNFpoT0lnMHVvQ2VEcjNKWndCUHdTeEk0V09YRFZaSE1VSGs2SlF0YmlWcnRaOTZDSW9lb2MyR01JOXFxb3ZkRVpFZzRGc3l6cmdGK2JETmtzMzQ4OVlIN2R2Q1c0eHp5NUtFamROVHpKWDRTdzgza1l3TDJ0ckJwVUYzYk1oeE82Q0l5aFg2dWNtazJUQ1QxRStYRmtyaGszZ0dCUllsOE5tUlNEckhVRFh5N1lxMGRKSlpyblQ5Mm5rQkt5RHpQM2pXMWl4VURZTnN0NUNsSno0K3hHbW9HbHBKV3VjMGNQbXFNK01sZzF4SXRFOFRqZWZyZk1sRGFTWis2RzljZWlsUmxjeWJmWlBDR2VTdXRua21oQU1SRUgrWTljeUI5ZkhOVVZJSzkvT1lTRjVDQzFzUXlhbDVoOWtETVBzL3FxTlZvckVCWWk4MlJCQ0JWeDVaTGdHM3F1MDBFakxFWXFSUFZ0R05rMHBFazR3WnU2enliUStlTmZQQU10a2Y0WHZIbDVMSmZhVmh2STJCYXdRQS8yQ3o0NkFOYnhIa3RRc1pNZXNVSFRPZVkwK1RiT3czSlp0YlY0ZzdiUXlIMnRqbFlreG81WVdzVTMzOEhzQzlQbDY0YXJGcUUvK2xtL0dOOHp6ZHFYRzB0eDVYMUZKZTVYU3V2SlRRbXNuTVV4eFlPbmxnMGxpOHBHcTUwS3dScUN5cUp0VDRuTmJrUEN4dTBEU1Rud0ZFaVVEUU16OEZ5UWRESXdTNkk4NUR2V2xPOXdGNFlKNytvSXVvN1BKR3VHL1N5bFY4MEFmNVp6S3VQTXRKVnFFRE5Vd1pJZXJ2TUR5dFIwdnl2MzBGcmsyblVuOC9RcnNzeElJNDhaOVVTZWQvSUpxODd6bi9nZHMrYUhad1h1TjluMTRVS0Y5RUlzYlBNU0tkbkRWVi9UU3NNeE1jL0lwWHFYOWtOdjIrcm5Ndks4R3VZTHNqQXJHeFUyRXJMNFpNU3hiaDZLNFVUSTl5REJGTHBrOW4zVG90WmRhc1BVVFV3Zytud0xDdWIxQlh2WWtWay9BOGFBV29RSUk1NzhPa0pGSTF5OW1lWUdxbnFUZU01Nk9nOEdVQm1WZkMxaVNTamFWbUtRTFNHQi9xZmRZNFZMTU96NUVSZ0Q3Y0YrVFlaNjlma3NRaGFUczBDWnVnbnBhTU0raGNFemNLak5JZndZRlQxY0Z2SWZjM05FUFc3UGc2VTJoMi9OU1d4bVhhS2Q4OWVlQlNIL1U2RDc0MjJSMkFrQkV6akhzR2FOY2hxNDl1Y0lBSUdjS3AvQm5ubXRTZ0Exd3JIaDlnYlRvaHUyUndROFdSQ3g5ZjRTQ0htcXFBT2RBV2t4N0tDWEVqc1p0QkFJOERaRDBJSGM3ak1HZ2ZLcXZ6cnhXeVE5UjJTUnNWNUQ2R0xwLzNXRFY1NWdKa1U3cDZPVkF5ZFpJMG5NNUtQTVNKMGhob25ZbzY1MVVnNk9FcDFjWUZVRVMvSlVNWFVFMXA3NFRENy9mOUg1VnE4RDMxeUlWaUczcEtQdVJMby96K2ZseXlSdFIwZmRBbFlqRnI0QnlnTkpiRlA2WFJQYVdxZXJ1dVkwM3M0T0lhMlpDdGI4dk0yanNqUnZLR3hvTWt5UndGMmZJYjJvZW92SEFuMWUyUVI4TkxMdnBhNCtLMWVsZ2ZLTUE4S2VCcG1MelZwUkdKVlFaY1ZTci9NUWRhUTlYYzE0M1FrNGEycWtlQXZWYWxZWmoxTDN1YnRMN2RoR1M4c3IzcnVlRGU5aEI5N2ZxaDBoK3Z1LzlaRGh3R2FwT3BpcWtQSVI1dE5xanRzYVR5enRvMnRhcWVSUzZOTEtaTWFCZ0YxeERRQ00wWFJpdnZLd2lpOC9zYXFJNnNiWnJaTU1sRi9iaXlIcGUvQzQ4SUxMWlc1QkdqYzd5dk1EbkxLTDR1bEJFYmc4NzR2TG9KV0xqRVhQZWtIS1hrUXUrc3hHOHhBSU5qa2s0b290Y2JwWUtQMDNSZFVQblBVYVBsN3ZMb3pRVTJqdWFLMUdXWTN5UWFMd3l3eWJTRTRLbnFnbDVVV0JpRmJWMm9iNWkzN2FEbnpKRXdraVlCNURDQWNVQld1TVgzNkxVUGtWczFaejJ2TGlpeUhZeXNLYjUyVHFrNjdEaEdZK3dzaEJoZ1RNSStvRTVZeXhQNXl5YlgwVlpwbkpENmpQWDh4Y1R2SzduSEdlcmd0TUMwVEg5anVhRHhzNFRHU2tnQW90bTN3QVM5M2NObGpUNHlvaGtLZ21TazBrNXQ3Vm5yRHdDakNQbEE3ZzVJb0tPYVdRdEhtSk1rbldlOTBSTFI2d3d2cEJBUmh5cjl2d1Z4N3d3bWJLYThnWWZiY09Ldmp4VWRNT2NmYW5ORDBNcGw3U3luZkVJYll4SXdoM1AxeUd0WjJnYXQ3c0d3d283aXJHcWd6N1dsWGY5ajN6bXRwYmhpZHo2ZXFZYzNGRFZoVWpQY3kvREhzbitDMjFvZENJQVNGR3VOdW0zQUFOdzVKckVaMGdqcWxMeWNSNm0wVG5HOFpIdkFXR0M2OE1ZOW1rYVhKdERSTnZmaDhSWWtySy94cFZpQ0ZQeVM0czdFenBlYkJud0xmblpsdC9aUlBrZGt0QngwQUR3SmplV3g2NHo4OUpvTlVhUFZYR3ZYcjlzWXNqcWhLdm1GbmJ6V2ZjUUdOUzA2dVhNSlgzeUtSbWVVQmZwQkNBaDBVa2pZLzZNK3NOcmQ0MnFZR0lHeHlUdlRKeFJaU1RraUtsM0RacEErREVoM2trTXpXcUZSOHZoblNnR2cwUUtuUUpCQmVYLzNjbU5KOGpZWW1Sb21aUS8zaHdwaDhPdGNUU1pRSExzTmFwOWtJb2k4ZFhqOVh2alZlcjdmaVM0d1NoTVNMcmljbFJIWHdlSFhsWE9sczNubi8xbWtSWkFKS1FlQkIxN1hxbzVUa3RIZDVidUJvcUNselNoc0pMdlR0a1I5U2ZSY0UyZktEeEJBM2YrMnozNm9jdGVsQjNJcXZMVFErUk1WdWdJd2pDYTExQmpxWkFPeWNRSWkxeU1qUlU4M3F3WVo4UFF5T0syTVpzSUk2cmdhaThyZWxUZkRDT0VlekZlMVRvNkNvTUl4YmtwMnV2SEhSUlhlS3ozS2Exb0lBRVFqdVpPM29GbXJUTXdLOXpIM01TNVBjWlRKMzFPSEpldFdDSG1GWGZrbFpRcXY4Tk9qVklUaThRREN2bXZKR0lDYUhxRTE0UlRaQk1MYkxlQ0dLYzgwVEp3c2xlaC9iRW8wY3lEVjdDN1pNMFlNbXVFcEJrU1V2T3Z4SWV4NVFiMVNMZGM5WXBIM1FWc3hjUGlqdi9mdlJocnUvL2NNdm5xMlpRdEc4N09TdThoZy8xTzhoZGliV3cxSjdFM1lhR21kWGE3bVVlUmFjaWdjRGxZYVlPUWJDOGVqSCs5ZkdIdGxNWEhPeW9kbEhsblV5OHpZS295SDdYZmluWXJZUjcweFBTNFZBWUppZWhtUU5pUzhCN1NNRzhMcnpFazhTUnUrU0ZVY2ViRzJ0S3lrSXltUUE0RjRCYjh1S0VxY3FacGcwNXRUM0o0S3RtMU1sL1l6blQxOElpY1IxaTNnWEIzMjlKTEpycFZIWFljTk9GM1BKcHp0bEZFUmVwUzZPdmF5ZnlCNHFuVDREdDkzMGxmVXRPVEtZR1VGdnhmMlFqRlF2T0tpY3RPS3dhOHJlMGg5YU9nY0t1SDM2YlJqRUVGQVNYMC9GcDUyWm9MZEpmaS9PNVNGL0NRTkZ4QUwvOUtTTmRVeWpYaGxhNjMrMVlUZGIxNGxOZkVIUnQvS1pQUlV5WGlFM2NxWC9VcWtna2dSOEJnclNvQldESE5rYlZKZjluTEVPVlJQNjBrSDlMYkNIY3ZXNjB5RUVoNUY3L0tJeGRQaFY5K1dhY2RvR0l3ODVTYUhrWnMyc3hLQjhSYkk1L1RPZng3RzMwN29YbDAvVDhicEhiazRwblExeWNjWDlWMEtkSGFwbGZZMmlqZHd4RWNCZWRPaTdmVytPbVRyNmtaQmRRVk54azNBL2NKU1NFMmVqb1p3eGZ0NjNmQXd5UWNRQkd3WjJMY1VRbDJ4K3B6a2p6OGxmSTJ6VFc1SHZWVzdwVDQrYmxjUTVTY2NoZStqOTNoZzlFRThURmxxOGhxSW1FRmcyWlF1MVFOT3lCSW10WFpodFIyWDVkditaUTdvd01jV3pFVVFBekxBVVIveFlkZjg1SE9abDdaUGR6a2VSSXVkcHptVlp5Z0hWZnZvV3UzVHpOQVI5czVQNWtGMHhKMmdtNXJvcDNYOEtQTlNtK3NCNll2dER1QXFHcGtqQTQ0aVdZSXRsNW50b1dYcHpWRkh4THlkNmxPVGVKV2tpMlpybDZOOHUzcUsrY3pGajFRSG12Q0V5cFZsdnlmZmZkNFIrU3l5eklnMnhZUFNKaFlVWVVhTGN0cXAwUDgyWFk0enBSRzZma210b2VBZnZPa3p5US9jWVJIVlZPUmhPem94SUtrd3Ayckg2cE8zaDlzai8xUVJtTld3Q1JRWmZxeXY3NTIwQlVKMGJtd01YZG1CcFJraThMWEVqRm90UFg0RnFicHZkWEVLakp6aDZsMW5sKzIvUGZ5MDhkVEh3OFI4OEs0NG9rVlBLRFl0NU5GUnptVVExOTNiaFU3dUlIQXBVN1BoODIwR05OU1llVXVlR1pkYTltNDY2dFltK1FKOTJQWkhjbFh0WnZiYTlKM2VjVDdqUXFJZ3VDWFh3K3pSbFVhbzNidnZFMUVqV3NuRktYQ0VBdi9GeGx6bzVFNU5kdXlmaDIzWWZSK2NhaTJiSGtBd1ZPNGRBZmtiR3pjYXExa01xYzNXYm1hSU9NV21VUm15Z054OE1nTXVQYk9uckgveXplWHpSZFBYZUhXL3ZTYzF6SFNiWEZ4R2xoeHlhSVB0emVEVSt3WG5NeWc4RitDSzNwUG5FVU8xaVdkemlsUTYzZk96RzhrYmtFNHBlaTc0blM3WEZhVTVoL1VQRHpJeXRzMWlscDZWVDJtQi9zeFVqa3MzS1N6SEpNaUVsY0ZjVFZwdEJoYXpwUDM0c0M5NEFZSzdnQW5aeHVjT0FuZkNsR0RKdTIvdXI3bUZDR3ZTMUkvaHBxc0NDRDRUNVMzcXYxSVdsRllTNWE1cDJCU25KM3k5anpLcTUyODNtekFncUlxZkJMZ3FaTy9rWUVubk0rTnVXUU1xZzQxMDVFb2JSaGo4T0VCRUJHd3B2L0pzNkloc0REUEFld3RJZ0RVK24vS0ZHL3VreC9XWlZWaTQ2RDZ4Rm9pZHZhdGVyYzBXOW9lY1lXOTk3aDg2Wk5DSDBsY3NHRUl6YnBVbkdDdHl1ekZhR2JHS3NhYXJKRVB5M0RGOEF6UldxNllTdWRFbHdZVDBtZml0MGd4Y0h2OFhJWGJuWlN5R1lYZmROejNkTExiNHZBZU9IY1VoQkw5MUx6MWNCUU1ML0JYWENKY1pYb1hyS2h6N3Q2bUR6ODlaVkxubXJqbWNuL0ZPTjZiVURrSmFHVDZJbGRWcmVsUktvNmtRaUVqZ20zY1RpWFk4dEJNS01rSWhNMERxOUNyQllkNjZtZXZ1SjFjRUl5Qk05L2VXK0g3N2xaL243ZEZuUzNMWFFZd0pkUUZBZFRWSEdFNkNRNlFpOWFHWWRaSVJFVHV2OVVYZ29JUEM0VFVCQ0dPVzBUR1JhdUErZ28rOHVWVFpLMzM1Y1FGYXY2N0ZIaEVRUEZsWG5pMlFtUFl1VHJrT2NVcmRCWTEwa1BPekRkNjFidThEbWdZWUhpVVBEaTNQSTZnQ2NIYXUxdk55UW5aR3BWdEQ5VG1JUXZQelpxWkxLaVI5TGcrY1pqclV2Y2xTbmcxdEdrcjJleHliQlBXb1lVdVpDVnJJT2FtaWZReGRLVDlNKyttL0FLMXQ2VE9OYzFEdTBReUdMUysvdzJZUU9rNExrUUIxTHovMWhkbWhvYXd0UXYwLzdVZ1pvbFZvVjVkaXFqUzBVY25iQitmUUpXd2t0NC9DckFldmZiNERHMmU1SEt6VlFrQVU1cE9pd0o2TWV6b1k4cHJlb29zbGZrUS9zY2pjN3ZBUWJuM1JkMjM1NnZEQVl4UnRpWEp6aSswZ01CWW1QSk5SbWlzK0pUYUltdFpBMWpPZk1sVmd3VXRmNllYUUdKZ0ZPVktXSWhnUTN3cWxMeDR4TnBlU0tpSTd0S1dhQm1CYVhjRkxrM3YwbVA0WEdudUhCK3M0NUYxTnAxYWtueG9wTGEvVzgwT2lNbS9OZ3ZkdFJCK1JINS9odHBJTjJnQS9pajI3NVNzSG5DOHZZN2k1dHJueDR1Qm9qMndSdFVQVERTK0xQNzJPZ3VyUDN1aEtmbHVZYnI4N25VUTA5TnFyNjQ0UVV5ZlpieU54cUlYc21OTy9WeUs3ajgvZUpLWjVMTVhzdDN4OFhyT250dkRPbE5ZTUc4YldhWlowYzkzbEFnMG9PMCt6VkZHRmNQcEVLVUZnMjZ5VkhvZ0tWRDdZZnVxTEJPeVozc1doYXlxeVdIank5WlorL2tVbC9HN1Q1S1YvWFJ2Tkw0ZzBvNWJkdGVseE9saHZIemhxL284aFVzbWhMTVcweUlZbnVHaWduYmI4TGYveUd4M29VV2hjbStod2JydXVsazRPc1JKNytQZ041TytGeWJJMXhnRnZRUU12UXVET0xRWUh5Ui9XT21RN205cmQ2MmpKQWJFdkJTelErYnJmZW03Rnhvamh2aWs3SzlvM0tKcmloWjhhTXNkeEpuTWcyTDFhSmszNEpTN3F0ajBaUE5sT01NMUtiTHhQVEJvM2MweUdTRFF5UytMWk55cWpRNTY3d3VMSmxUakhvUTMzTkhqSlVUV0pVdk5STDc5ekNSdUNnNnJTcXpUZGZPRmVOZ0V3ODMvQjJaaFR5aDFUajNjNFVESEtrZkQrTE16ODdLSTd2UmlJSnNRWmFxcmFCY2RZZm1uUkhNdERSSzlIaVFHOEsvUUlPRExObWt4aVYrcXQwbjhYMWpQQU5UWUNQUDhGRmJQbmRsbzlLVXhsQWIrWkhFYVNkbHF3cFdxczA4K0gyZFI5Y3FDMzVkakZWUFhibmhGdUx3Q3NJckpUcndiK1hTSnNzdXNwUk9LUXBhckk0Y1dtU0JRalpwalltb1lYamdWYWV0QUNFd2lTMDVTOGUzSVhQa05DUWlacG5tdzF0a0hKS3RWSkg4NWVUbW1mdkxJL0V5V2RScm9ZeWZ4cE55Rm1BT2t0RTJnWUpBNzBGSVN6QytqMEZZSTBxTFg5RGRjbTBERy8zZVZnUmFBVnp4RkFmMkhYRk5pZEwvSzRieVltR3BHOEZUY3gzWGRrdHhoSU9pakVHOHdLKzZ0TVBjbVJqK0FEZkpxZFpJYkdkQmRIZ0JTMlpMd1lIbGQ3OFJpc1JYTkNpZ0FYemFtanFuRmt1NWgzb3VQN3JadkwxTlJYcmNBejdkVnYzcWd1YUxxSUpEVjNrR3RQMy9lcXFhWE14L1p4blNubGdpeUxTcjlvWHVUblZZK2ppQmhhSGoxSXVLTHg3bVFrOVphdStKNm8wb1pUSFViS1ZBNHFtQzJhWHlPVDlUUG5LZ3kzQXgvbUoxQTRDcGxIWS80c01pdThMcW1vKzdXTUtyYU4yWUdlYmFCNzgwMWNaWjd6aUsrcmtHSzlTU0w0Yzd3bGVmNnJVMGpodkw3aXRkUDMrUUltbVB1NG83OXNZclNQWG5YN0s5TWtGTXp5V3Jpb2ZXVDBNVmhKMHlDemlZbUhrcG90N291NCtFUmdZWFdSaGUyWmxySjhWdWJlNDExZmJGR2hVTE9hR0xMTjdXOGlvanJCblpXU0RGMmhSWnNGcHliMWUrMklUMS96NXlZUjJtYW5OdFp1MEEyUlJiWmthTkxMd3JGR0ZaZk1iSC95WGlSUk5WbytGdGhPT3BRMlJmaExxV3lCMVc5R0pQcU1BMzJXZnJsY1Z2eWdKeFBuSTJxUDR4ZFJWajBXV3IwR2hxZUlweHJ6ZWNnTzhxU3FLSjBNd3c3c2Z3a3NGSGV5MEMzdlpqQldFTUpsbnozeXV1bmZoS1FMVDJZV3paTVZWQk51TmVFa0JjZDUvQllxcHcyZTFZNjNaU2NVK1E4WXpndWw3ZVREVGxyQlBaeHVxemIwRUYxNG1pR2dEbGovUzlGZktVM1NiODRNUTNmNm40TGUzN0tEK0VmZXR6c0oyR0hCMlNId21CRUxQSlM0Nzd2Y1A0U3BCVFMvS1c3RHRHRTlYZk5TWEhlMUJ3c2NIWTM0ZTJ1UzlZRHFUVVVaMEJvdGdmUFhLelMvcmM5bWhDWFNBUmhOZ0ZJV3F3T1FrUUtYc3NqNGFtclFFN3lTK2xsRWdXV3hoZ2lNQk9KU0NDeXhzSXUwSGpJc2pVc2dXbFJBQlRTSitXemw1WWlMek9aVDArdzFqL1lNSmgwd2l5eHYxbmtrU3I2RDVtNEhSYXhrV2ZRS2E0TEl1Z3hEU1NIdWM0aTE4djlSTitJamgwaVNsWW5FRjNzOVloVkdnVnNvVEQ0NFNlNVJwNTFwUGFqM1J5b1dFVnZlVGxkS0RXQklRTEFNRDQyUE9TZmFvbHhjWGpuanl6R3ovQ2ZLc3hVWTUyY1J3bnlUa25PbTlPbStpTXBnU3Yra2JkYTlTTUJoWnVKaFMyU1lKODd3SEpUVDNVZDFnRFo3L1pROERMQ3ljalRzSWtqbWo0eWU4ZlZ0cVdER2VOZjNLYXhibjV2YkhXTm5tVWY2ZzBaczJRcm43RDNwSHp1bklnOHcxS1VYV0Fxd0pIYWpXTW84aVJmVVNoNE9ReUJGY2JWZlpsY3NHbnBpZk51R0FtY1Fvc202NVhNS0x5SS8xaS9JY3ZDZWd1eGRMZVlHR0kvUWtzWTZnRGdackRSMnBuNkFNbTQrdHNDdkV1WEQrMTZXMnh0azBHVUplV0w5ZTZvck5QY2pWRXdyUHRhTFZNWlA1Snl6VzJzeTVoZXdUa2tFRkVjaWNPa09kb0xRZFNCZjBYYU5rZlJscmtwWWIyYWhWbEVBTS9sQVlyQnlGRENTR3N4WitRUnRzWE40SE4yTld0M1A3REd6UG96MGExOHozdmtsNkE2NDV2eW9EcVBPSlBnMEgvZk95UUtmUW83WnBIOThFb2xpL1ZjWmpxTEUvaVhCOExpOGY1OVZkdTJqdkJERFduRy9IR0piWitSNVBUMWJDUzQ1UmF5azYwU2tLcHZhTWVWbmhOWUdvY0JTREFvcldjR1hpdnZpaGtVQXUybGs0QU9OWTIrUG0rRms0SFU4SUYrUDVwOHBtcFFUcG8yeUFjU1lON0U2ck1ZL1I0ZmkwL0MrdUZDaVp6UTVJS2ZlZkl6TFNIc2krN0pEcmk3OU42VWJFQTI0M20veEErTkRpT2N2Qk80UmpWRG1vaTd1bEJrYXNaMFBJOWk5a0VBRjdWdm0wY2FuNFQxcWFCVlk2S0FSK2xHWXFJWmgwTjllU3V3UVduV2ZNZmJacGE5YmY2cEtFcWVqZ0tDRlRHTzVUQ29kdFZLVG5DODJNSzNUemNDZXJ2TjBvRERaTTJYK1QraE02UUhEV2ZxdDQ2RlYzSHMxcE43M2F4QVNqU0hjUGF4a3dvNE9tbktHdUw5L2JEd1NDVy9VUUloTWdWcTRHOVNMUWZxZnc3L2pFK1NSNXJVWWtOMjRCYWsraHJrdFVjdUJESGRJT3d3ZGd2UUlXdVNDZnNtZGloT0p0T0ZYaXJsdXV2QzNMV2NSc291SmlTNjZ2RzQ3dlQxdXc2Y0Jja1QwRmJqZnRXSDF0NkZ5eEtBZjBFRDVFbHBiRHVzdU43OVFQM0NZeTVkQlRDNFFYNys2cVJnRTFnZi9kcnh0MU55L2JtTGFrclEyVUZtYjJTcDQ4TnZodjJtelppdmxHTEtuOURXOFZqWmljMXJKaGxlbGt0SHFnTmpqYTQrYzZLUVp3Nm1YL3EzRDN1UWJaR0NXQ1dLSHF5M3JYZUJMR0wvMk1Ca3E1U2lhVUhYN0FVWWtrcC9wMVJ5Q2ZYV25xVzNEWkI4ejNqQVFMSTJ4L1B3eXNvUU5nYVF1UWtuUGw4cnhrQzVjVVVwSmV3Vm5Dd2V1R1BkOUtETHZCNUozemVRUFhaVytjYURHWkVqNUcxdjR6UVJpK2hZMnhaNzZkT0pleWJCZHU4L0JQdS8wT3lHTWNVK2ovT1FLRnduQjBZM1h4RkcwNDMxNzdKazJDOTFVbEcrZnhHL3ptYmd6WDZDUEhzeGFWL1pmNm9ESHp2OCsvYkE4eENuL3I1SlI4SXMyanNOUkJ4ZzdrRlYyM2JlWEtVNHl2MjFHN0tpQkJWN3A1cmgrY2ZzV1NsaGNEUkJMdXJNYkx4WUNKTTlQOGN2ZzJwQlJpZXhSRllmeWthVzhwV2VsVEFIVkZ4VUZubWtJZ0xMV2ZDRTg1OGVhcmZXNUswaGZxY1EvZmxOSzB4Y21XdXNwMnN5NDducXNvbDhZMHBoU1hwMkhSWHZVSGNlY25veFhiYlY0ZkNaQWFpdUE0a2h2NzB4MGlpRXQvZVJHZUR0K0srZ2FZMHoydU1RaUJPbko5Q0N3bW9TeEtXQmlHQndJU2V3MVpXWmpDdjJCdDFVc1ZudmFRaDU0bzQ0bEpRZFJRZmhVSEdUY0ZTTE5IeENFUitiaE9vUk1jNTE2b2NYRkxzL0NsSUZyeXhkd0tYbWtYTC9Cd2tzTyt0czBaQzE3M0JSVThBcldxSnJ5ZVIvM0VEUTkyVGdrWUpjQi80dUw0ZFlCMGJDZkxRYkcvUWRXaC81cVZWTGZiUGdPSkNIN3hHbzNjSGpNeE5WOWh0M3I5cWd4ZzNDb096WDYycGE4T1lTZDJaMTZ3QWNiYkRoNnBBOXZaMmx6VXBOVitDSW01TVNkbGgwZ2ZNWnpxd1FwMkh3YVd3SWJaOVJjKzFLekZTSnAvS3RGNE12d3lmdGVMU1J4R29nbmJhelhUMWVXc0tmdXNWT2ZOY1lNUTlEaEhIZmhUT1VSVmZFVHE2WDhQZjhFUlExa21JMVRLbDZZWE5ueElLQ3p1aTVZUXFJd2sxV09LcWlZZnBVNlNwQVZTa2s1RFBMMkNSUS9EaW02RDJkamJMNWlTRXlhTDRyVXVDeFVIckJQWEpPNm55VkpjS0dFa2h4MTlxdnk1QmdhZ0hXam9tT3RlbEtPaXcyeFZnM284VWxueEIzOVNrNGw3YVhtbENuTzhHeFJSZ09DRk5iUTlZWDFUOHFpc0ZVUXNQRUttalJ5N0diN0o5RnZzRnBtNHU4MlpDN0o0RE16S3czR1BTS3lTcFluSURMNFVwUEhFWkdVazl6N3Q0M2xFY1NzeCtFalVSeFNjSS92c1paeGJvb3JjR1d2NGRsZ1UvQ2Y4R21rRUtHZDRLUmZEOWFndTZUQ2s3YjljcUdlbVdoVjNtWUVqL0NrWFFtRzY2MXNlcjlUTThRaitjODZIVE4rT3MyeWxORFVrUWRrZEhCeUdNOUYwS0lZZldPSGNmeXRmdUpUSWVqV2VEQnBCcWU1OVZMUFVmRy84TjhYVDhCTEJ1NldZYjZPclp3bWdnSkd0Q2I1Wmh5QW9oMDZRQW11dzd5SVkzVFNRYjlUQyt5WnZFNmFMOVJIdlhlTGhXaVhzZmF6VlhHS3pKQStMV1VndGV3MkV0ZTk5d3dpWUc5UTQ5cWhnNkc1VWhyVkxNTk84aThqYTAzOUxzNlhEWDFPNU5ISEFUOWFVNStXaW9VT0k0aFRJSWMyS2FCS3ZCZXpyUm1yaXdPY1V4RjFxWE9aNVVoWmRuNzUxUWUybHNCWHBjYzd5SWplQ2JkOFhlUnE3cHhOTUx4VFVWYzZoajFuc1hGa0UvV3NWYjVJNmFNZDc5ZC9LWVZWQVdGZXNWRStPVHo5dkQ2QVp6QWY5TnFXS2l3WUorSGlqQUlZYlhmL1c4UXFFeUdhNkVKM1NiL1V3ckVFdDVUeXBMbkdaM3BZdXYvbldyY3RGMldveFh2V2J0NTU1aU5yTTZoakYvK3d2TDZFYW92ZzRHMHErWHB4a3k0dFJ1NnN2aTZvaExYZ3FYWDYvVzV1NHBNdWtPaFM3VDRvd1lVM3VTNytaYTUrdC9GaSs4WFpiVXdDOFdGakpkQW1BVXpGRlFvdGRnWWFsWlg2NXpRcnB6aWpETDlnSXlmcUZzK3U5azNyaVA0Rk5QZE5wZ3NRMEhmQTBieXQzaytoRmRRV0JnK3dUemNmOUUxdTFZRTNkNWtHTmpwVU9oVXQxa1IzQ21sTWZEUHBUejdsVnp6MVFRUzNrY2YzZ1czQndHTzhEdnJrZFU0OEQwYVJyS0RaNVdscG9ZU2tkZk84L2xpK2lYOVlieEQ5VHJENUdKK2hZdWJvUlV6YkdEMkV5NS9tblZnZlVhREs3dG5uVVMwcGhBa3Z5bmc5c1FkdEpkMERub3h0UHJEUVBWdkhGY1VyMTRMajhOYmh6YXlZbXFTejl1aWl3NnVOc2pBTUFNVURCTFNFYWlldllYTmY5TG9hQzY5ZW1uNk52ei9STm12WnFGOXVyZEhKcTI5bDl4Z2JhWGJxdkYyQnZtY1V0VHphako3cmt4UEdLQlpBVTdPcnpLdlloSFZwWVJRN1BaWlQ1OWxRSHVUdzhwSGk3aExodnBFVFMrRWlHZmRheWREcEZIYWxrUzIrdENCOXFGcFFnRXZMM2QzeWZNZGNJYzYzMHNGNjV1YmREMzF3UUZVS21EeG40K2FFVHoyRDcyaTFWWStBUERCdjlvbXhIQVBoMWUzbk1vcXN2STRWM21yT0Z1a3ZzUVprbGdkcjRNOENocnhMdlpIVDJFa25ib0hEY0xzRjNIVTV5MUcwbXdCZE84SkIyZU5DK0YxUloyNHpjQjl6UU43YTg1NnRUa2RiWnI3cEsxNEE2bWtEUkdqdE9UQlZMdlRVa3Z2NDVGcGtMS1pWMWJhSlM3VTUzL0ZOaXU5ZzZRdDNFeGY2ZjZRQitUU2gveExXSERuRjAzN2FwZU5KK3l2cldmTXVlMCtNSjF2dnB5a2I2QXlTSmM2d25jOTVGR2syaFZlM29jTTU1T250bzJwdDl5RzRDU091Ym85bzF6akdZUFE4MnF6bVNwY1NXMitVcTJxeFhYREpaeFJoSyt4dUxtS2ZNU2Vyd3owbkF0Yk9KQTdVZWl1UENTVTBZakdRTzFJWHJwd044RXRkRjdpWFNVdHdEcUgrQTFTdXRmSGdoaVVFTVJqclkyNFlxTWFPZzRXTm1sU2pQN25NYTRVU2lsdmpYQUVXOEJwbTRPMkY4Z1VIU1haaTh0VHJveHgzYW44SFBoYmhhTmdUZHc4RFBBbVZPMWxyOFJDSWd2QjFIelZrbnhQOXU5WnZnRVBhdkkya2tVL2R5YTFzUWZnWm52M3BPVXV3dmJTNTZkVFA4Qi9xOWNsbmZHdjZhL0pWOXQ2TTVPQ3dBRE95YmtzdGNYaGk5TEp6Mmd5UWQ2TWx1NHhOSlpGOXVMRnVFbmtibnNyYnFjU2kza25seHBMck9tR3lidVlmNzVvT3ZRY21aaTlVbHdPUnJxWFVUQmsyNDdvZmhZK1R5OWd0S3hiK3NZWlQvNmVoak10Q3A3aHI5SlMwTmlGNUZHNm9pQkF0ajhxVXkwSnhERFZrSGwyUlFoeE5OMGQyTTV0SmNsM1BpN1JXcEFZUXErQ29XSGY4WlJuSTB4SVRIemxnOEc3VUtGb1Y5SzV6VFBPSmppN0crQ1ZoZ0luNVhpY29Qakk2NForenhLUjlmajVQUnEwd1NBVWVXN0ltcVpDcXRvY21adzljQWV3cTJXVVBGTVVSTnBHWFB2ak5BNXU0Ui9oa0QrcjRzalpHKzIxdkw1em5sOS90V3VvUFdDOEFjcjFOZXR2ZC9rL3FSV2kzWHp0dElud290VC9Wand1cVV6MkVRSXFzWFFGbXp3bVRnOTgzTS9VbXlEYXRxMXgyVFhwZ1FYN2tqOUxxZEtDemUvVEpIczl3YW9SS01wMERnbmtJN2F0Skw2cm5MckFRcjVsazlYYnV2UnMrTXI0aUQvZ01GVG9yREVHQlR5Tm85TDlhTW5hdTMrNGtLQVM4aEpOUm1WeVhGWS9qL3dXOWp5a1RmdmNKblFqVXhOU0tLUjFFNWR3citFdjBQaVY0SkYxd2xUVFpWdGlTQS9SWnlBKzFFQlVjQkM2dU5jMzhiWXFMemJEeUE3V3k1Sk91Q3BWREpEcjZYblowa2Fmd01oMytpNmpmcVJ2bWJJcm9SMUVaTmtEYm4wdUNvM1dXMy9EMnVjZ2UvWjUvNGJNSE01TDBCMUNFdnBZRXl6bmhQQnhjdjk2M2lUcVZ0M1VKR1FOc3hJYTFESkpyNUtuN0ltRGZlZ3FSTVJ5bk9yNjFGYjhNYUdBeVg0bWhWOFhEM2JkbmF6cDFJY3BqQUpwS3VCR0FHNkdvUXcyWGs4MFVzS2dRM0hxS00yWmZnakxmaDhjQm01Smtzd2thSzVEWlU1cmtVQkJiR3RhM1BqZ1V6cHlkK016eTB0a0Nwd0VvNkxRN09URFlJWkhmeDRyQmFFWS9BMjBMRzNrenYyZndwV0ZML2VrL1A2ejU5Y29UemRLbTdpS2dFOEhkaUc5VXZ3RDFucnNNZ2pXUkhoNzRDWGNpeExXbk1EckJMRlV5MHZrY21WanIzVFBkUm9HekYvZE4wcDR3dnNZWktCWC9hQkhxSTlyOUVwVldYS1NKWEpJclR0V05sRFdCZTlPbXFnbmtwY1YrSGZuWmVGUlpSMEtzOXZsQ3JSNVNOOHkwNDllQzlyTklvT1hSS0JQSUcyQlliMk90ZldvNFJ2OFp1NXU4YXVvbmVZb1BucEpQYlJjLzh6c3NYUnZteTRDSUNVSTREeGtoVkdWelRIZ3FNaWxud0lWbzlDZm5aZGgrbHFPd3JhNTM2bUdScEJuS055Uko1RTFjQUhxdzA4Qkx6Q24xUmNJSUt0S3VzV3VRR1pudS9GK2JtWW9BZlhCZldQaU5wWk1rNDlwblozeTNieDJYYXIrSXpoT1d3b0pCb2xyTWZyNVVlZU1GSDc3ZmxnTzQzL1VTdHZRVEQyQWxBOUUrVDJsRU1pQ3p1MzRmTFd4ZmI0TWZ5eVh5ZlVIUUhCZ3ZZLzV2aklCb2RWYmFweDlCM2ZXN3JRek42ei9ONUxwQWZ4NTB1UTN6aWd4ZG4rS0YvaFh5NkRQbXBJZGRvSW1TUTlBRnFKcU1jVHA3Mi94amlpNVdKY0VUZnNUNFlDeXpoUDU4U01OcUFHSFpHaE1EYnIrc0VpT2pYTTJqKzc3ZCtYNUlJMG5xUUFwUkdQWG5sQjFvWG13RGVhYk9TZytZbnBwM3djenBGQjZqaUFiNEZucDk4d0cydlJiNDIrTmVPbEN6aXJFTHlrT1FTUEVramh1a0ZHVW05aEY5K2lPUUpUTE1IUmVWakpodW5EUGdtZTRBUStQN3l3Qy9TVXZHRHlOd2pwWXRoL3Z6Vyt1K1UvVUFNZkliMGF3M0FYOXA1NzJ1aHRIVUR0T215OUlYbGlYcDdTK1J5cC8xNHpkcHdEM21vWUU3c0xFZWFaVGJhRTBsMFRYYmJkQ0JYNnVDRnJGU2E3eVpSSTd6dEdNbHZGby95MU9xaHMydGQ5eXdvdmU1a1pPV0VHdG1JRUIzRDBjcHBJL0wwMHgzS043MUJGcHIwQ2QyVXI0bmdLendoKzE3Sm80b09DYk14d3pacjhVR3FyL2U3V1V1UW9rajJIVXVRUHhEZlRZaks0WkVpRVhsa1MwVjlTbHhhejEzRWpVOC9yZld6dGZ6YmlhTUhxRmRITGF4VDFYYVM2NFZqNTUxMEdRbVg2UHhzcTN5WlVGaU5pSzNLczBROThjakJuaFc2dzhCNXkza0NaN2p4MEJZUVFOUE1jejQ5NVYwMi9oMmxvTS9FdW9JQ0NZd1V6VWpQd1VVRE1EcFJvb0Y3K3I2VlVieVcvNk5JYkgyWEJlTXNRNHI5aEM0R1V3UkdOSUdORTVPbGJzWS9rTko4Z3U3MG1BRWswT3MwQ3lmSm1Kb2p6S3lndVUzL1VTOFJNMDlvQWxFRE5aSm9aNXc5ajRaVDloVXNKV2p1QU5NOXhQZWxSWFB5TkZtRXZZVnoyak9PaVFPVXlMdjdLMkF3UUhRdVRPSkVQNUE0MS9sREJEQ0ZscklzTnBGL3F6N25rNVEvd1g1YW5nOFlhbzZwdkdOY1NpODFvNzYyUVpMbk0rSk9RbVZNbmxPMzZYUkZZZmhseU5sZVk2NXQraGNRa1h2cktiSkw5M011bzJFb09JeDczQWpJVHdmdFV2WlY3VUFleVQxeW9rdGZ4L1lpWnM2OWJ5L1RHeWNYWTBuZFFjeUxrNzZ5K0dXLytBZS9maTZ5OXpqVGFtMXdpZ29maWdyOUlzRlZjK1ZmZHMyUkJxcCt3VXZjeWdmanVldUJJeWZEbHFhUUt0dTBMbzZ6cmNXeGhlK1JieEwzSjZrV0E5TmQzTktBcUViQ2gyOU4xTm5GcUZKU2Z1eXd0dVRUN3cwUDZRT2RQNHNVSWlIRjdLR0dQT2JvOG9xSG9zNlFBV3N4YWNrVzJYQUJ3bXhJUytseDlVSnNoc1RNL3lTT2lhZURoUllQUi9oNWx2RU5vZ0pFTUxTWk1yOXVpckg1b2VKNTcvdWdsbWhQZUZ4Z01paTJOMi9tWTcyaGltWjRyV2xoTVlYTEYwWlhWVWZFaUVubW1XZXhKcFQ1eTd0NXY4dHowVnd3UmVMNzlScUduOU8zUDlEb3dyZU5XRFpYZXZJSzQzbTh0aXJ5dElaSlkxRzZtZCsvQnRPcGJrNmlQbElFUTM2cTNqaHZyekMrcGNCWDNqdDBTZVFvNjNjazkwWVJzakZrNmMwN1lLOFRHY1gwVVNna0xXQzNzTW8xUGN1NFBJTjhmWFVZRENQOVYveVZJOU1EZ0JYQ0h3MkdLUFdVMFA4djJBUWltQUxUYnJ2V0tjbStnRHRObGlPSjMxZEVwMTZNSjNNOXE5Tksyd1JCUmdkZjlBTEs5RHR1R1RQSTdIcHZqYTVFQVUzT280ZytSNlJmSzV4N1Y5WlY2Z1daSWFFWldyZFJKM2NkaTROR092Q011ak9hVkVtUCtvVjlqSFM2c3ZtZEl6OFplcEhidENldlZ4N3RDbWNUcmtyeitDb3UzUTZjWXdHSEJuZUpESjd5RXk5K0g5cWduSlo2ckNzbERjNmhKYkp2N2QwQ1BzVWMxdzYyUjg0OG1BR3dDU1paMUdEbEpJcnNST2FUZkZCVHpVVUJmYTNZdGh0UTdkNWhCKzMwU2NySzdYVlVOSTJaRUpBRk0xZFFHNWF0bCtvZ0t5N3ZRMWJlRjN1cmI1MTRqd1BlMmFhaTBteEVQNHQwL0N1WVpvaEQxTzcwZVZWRFBNNjhDT1pzaUhyT08zajR6M1krSm45UFVaWlNFRmkwV2ZSQmpCaVZaT3lybXpGVzU1WWpXNlJ3RktLMVZEVG91M1REUXc4MEhFSzRTZWJEaFh2UWNBMlorMjZHRWQzWU8wQldpMXR1RFhSQ2hjL1oxWnN3RGRrckVlNkNicDVqS24vWkdNQTdGUGRTUmJCSDcyd0xhQXJYQm9OYjBWZG9HblBWaTB4NUNXTXJnYVl1OVpvdmtUdFU5cDZMR2N0YjJIQzlrWndoeHJYRnpLN0VTK1BXYXdQNUxuOXMrQVQvYWNrdG9lOEVqaFRBMExiakJKVlBnSnIyZWZIUERzZFNidGtVQVFNVkxQZFlidHpsQXVPcEJzZks1YjBjNUtYWlgyZy9kaFkvaHUwRUNvUjZlSnVveXJ4c1NKKzlZNUYybEpDVUpaUGlubnU5K2lyUTV4c1BpUGFzeDRIaEhlMWdlZ3VjUm1QMHVXb1F0VkhOZHdqaXV1VVJFOS9WS3ZKazE3QXVlRFY0TGNrZm56VUNDMWdtU1dJZ25WWWh6L0FkMllPNFFCYVN3S3JNb2xlODI3ODV2NUpsaHJLQU10azJ6OCttWEtzZG9BMG0zVVBwMmEvVTA1eTRjbThRUFpQenFTK2lZM0N2UEdqWVRHc1U2NlZncnNMa3JqckEwVDNCMGdFNFRTUnR1aE9wOVB2b0lUWGp2L1lMK0pOZ0c1N1hEYThXNThsb3NiTTA0M0NvZ0RBcE5tNjRML3cxRWRDMi9GMHFPZVhtblpuQlBrQ1NWY3BhUVpPZExFMkU1cXp6R2xZYWZWZmJDMlhLUGg2cURUOHJ3R2JQY1NUWlpKaERWWTdZUTFZOWdtOXJ3N0ZPNDJVbHhrYVU0bGpQR3ZaamNrUmh3dVRLbndoYWZDbXNBYyt3Rm1YVldqVWpIYmd1Qi9vdVBKaVhwWEFJOTJHelNtb21VbFFpU1JhOGpoWGV4Tzk4MUM5bVVib0ZhSFJNK2gyallnZ20rMmZEVHRkczA1d1NoM3lmRHUrc0tXSFRhSk1QaXBLYi9UeHhyR1ZjMTY0WmpUUW1MSVFrMVFZa1VnSTBuVnVGZXp0aCtrQTZOdlZyRjFGZmJjVmFxZGVIWTdNZ2F2clpWYmU5clhaS1g5K0g2SHJidmVjWW03VGhDWk9RWUxpU0JZb3ZQMXNuZmhKbTBzSWYvZC9kRFdVYjV0ZWVXdnFvTHRPaDF1ZDF2WDhwQ2cwM3YxWEcxRTdlWUpJdStITXRyQjZGcDBGZEpvazV3SUN4TzVIa3dRNEFML2t2RTVBOGlkcUdRRThTVWtLRVBnNDAzNjdXNE0xWjQ4RnoxZkc0aHA4RE5Yd2lzc1k1d2ZSaWdMNmdLZ0hPYmhEQjBDTTNKeEliaXZQUVQxTTU2Yk5ZeURTYUJNRk1kUUVXa3ozUVloaUtCdWVuakYvYmpramM3ZzF4L0pNSmlsUE1xVjEyczZldEltajlNeXo0cXlWRnJsUUMvYzNKYW1WdzVKcHBRZkk2SVlmanRmVWlON1B3N1lIVFppUkgvVSttenJBSHFzdWRqOUd0L1RCaExzM2dPWm53UXI5UDZEaUlrM1p6WDFMR3RHQWpGSUh1eVUxdEJyTGdDYWZBcHEraXNTQ1FqWDhyaC8zNGRvdFR1ZjZsTTVMQ2NwT0pwTFhMb1JBSS8rZG9BMXF6bDh5d1B4NGVXOWwvejV6TVM2b2tyeU92d3A4ZEIxM01WNlRIMmxLWFpQM0ZxU1VXTVdnN2dPR1cxejlyN3ZyOTdIOHA4bjl6SGtRdnE5YnVTZHp0ZEJTcEpMcFlobThLdytMRkgyK3FhQmJOSXZnMjh1MVlKcU9peFRyd1o4cm1IOGdPcm1xM1plSXZnUXVPeVpWNnAyc1pXWlM0MVh3d2ZGMHdwQmZrOEhaL3dEWmUrVnFObmZuMGNXNy9pSERGQTRVL3M2bE5mcm5CbGR6TzhsdXp1TWsyZ0lWQVRGTkQzZ3lrWG1oZmZwS0hiRWFNQnNxbGhhR2M5b1l0c0U2UlpmeWMxQmpCMFFYazNwTEpXZ3FpNjcvOVUvMlpVT0NkNUxzeXRTVm9ZZWNZbVhRaHRSQ2dib2txZEU4dE5BdmtFU3FWM2tHV0lSNFlBdVNPZUQ4UUQ5RlNZa2J2clppTDZubGVyR1UwZDlZZWdMNFdLemZLQTg5clEwQWR5c2FzUTh2ZU1SMEZRMDRrUGNodVNjdlJ1Z0hOSStxTFVxMU5tdHN1WnpoVlFHUDB5V0lWTWsxZ1hzYktjZjl5c0RzVEltdGZWaCtmdXFUNTh2eE5BSHJRdkVrNFpMc3M3Y1lWWjJmOCt3NENEZTNHYkhkNnMwTXJxSHh4Z2wzNklCMUtBa1BjRm5tV2hHTXNrU1BRa0RBaVJ4WW1maGVoanltMWthWW9TcmRsL1ZXV1RtYlNCYkNEamZIbEFpVE5BU09YdEFUdmpYNkJ1VkZYMzJKZE45Y0tQQWJ0MkdMOHNIZlhhNHYydCtkbHZFcWhic1NXT21tTzZBb2R5K25INytVbnBJWHBrSU9XeDY2VnA1ZUJYdHB2dEZwNk1NcTdMdWRiM1BmT3IrQUppTTA3SGw4SEtLbW9OcThvK21rK2JQblFHNGQxRElNTW1OaEQ4SzBhc2RieWgrWFdXYXIyeXpsWE5XL3IyQXRQQ3RkMzY2bXoxbVFYNU1KVGR3eEs5QU05Nm5BbEIwM2gvQ1RleWtQTXl6cndtdmhmTDFnVlJZZzE3dzVwOStDc1ZFOWRGZk0veVA1bDNvWGNrWGhkcjBjYXhza05WSGpxWkNTaXI4ZHZUb095MmlTNWgyN1lLRWtXU2lLRCtGYVh5WkNxZDBoY1JTbEwxWmZ4Z05SVjI2Q0FCbnJzZUt6UURvQXE5bGpaUHI0ZmQ1NFlwTjAzdHJZMFprUkRDcXZOdk4zY2tOYVg5UWc5Y01HTEQrTmppdzl2UjNWT1hhTy9mKytEbmlEeWhSaG13OS9JM2RTdmluZGthYzA1dlFCSjJFUm5GWUhoRDd1Q1NRVzQ3dEd0VU8rcUNneVhzQzcwUTlhTUJQZ3NScmFWR0tzeDZIRGtYUm1wM2REVlk5bzh3M21pTVdObHgyU0wzb1ppS0g4WmI0Zkl1ZzZjblVnQmI0THErWCtSNE5mMFpMR0o1cmpJcXVYY2VUQ0dkVk5PMmh0ckZkSUtnM2JIRXpRZHdWd2Z2SGJ5MkljY0doMnpRSW95endVTHdWc21kMy9pbFRDNkdPVlFlYkpEK01pZnJKRDVHbDEvMktrVGFVODlFMXhwRkJqZkdPUUQ5OW52eWl2OVhUOVBYODJZS0pxUFdpQ2hwL1EyRUtMd3pUdkNsdFpKSTR1L3F6aGx5cWZRUnNyUWJNVnluaWw5Tk1Id3lQSmdYMDkvYUtRbnRmMGVVM0FROTRmUEk5MG9uUHAyYWdyK2FKbG42VnV3MWFBSWN3VXAvZEVSdTBSalFlaDdPSUcwYmYzcC9XcEVUbDFFa2RDSDN4c2VjY3MrT1V6RjB0SCtsTjI4SjFrNU9Uc2tJd3QxT0xGUDVGdVJzZEdTWmZSQnRob1QybFc5UEV2RXA2WHdnUlcva0FZeEVoSVIvL0NvNDh2RXdrNHZjQ3NmZTZha1dJQ2UyQ1h2ZE5WWDhoU0IxVFZCK0ZvR2FRWllZZ0ZVZi9DenZ4a2tFbVpFbXQ2aUxhVHJsdDdaZmxzcjRvdnpwVFFwdldTK0dGRHNuanlCc0tna3IyOE9PanNUT1JpWkdReXdPTkJ4a3M4ZjVxcmNDOWl3M20raVgrR3lTUWpyc2lpdDQyeGlVNjh0MGdQR3BEWGRna1NDVVpMV0U1djZjcmk5QysrTXNzTGt0eHc0UWFtbnQ3NlppZUplUVdtYWt0N0dLTFJFUW11R1l4bmNOR01rTG8wVTVNWGFlMklpZ2ozRkxhUTBpZXZhT3ExTEZsZUpIUElGc1hYOG1ITDlFNjVCNmI1bWljN3dMdjdCZVRRY3M0QWNRdzh6bllkWmw2cTZRbk9VSmxlblRXRWhOOTFob2czY1JIREc5NzQvQVNDMTVHYUhJa0dyZjhKRGxDZGt2bElWTnRRUTFnajgwTjVQUkN2SUdLMkZsZlZKejV1V1JLTUg3S3N1WldkQ3BUWXVMSnhXMDcxd2R2ZmYwUk85eEovc0QzZmgrVW1wYzBGY1JPOURzSUdSUlRjeVkxSnp1RVNEcWlteDhjMzgzTEJvTkxDbUd0U3RtTjlRQm1NMGJHUDZ4dVp5am1oRktFYVA4YjJybmVmbmJyZDA0bGJ5enQ5amwzenhWRUU5Tk9LYk5kMVlaNG91S1dGT3U3OVg2ejR6bGgyY2RvWWFMYTVIRzg5ZGZabzNqTC9RWlpGVU9PeXcxUi9IdTZtUkdicGxFZDlBdXFETUZMKyttVlBYSU9mV1A3akhDdTN5cm5CbEFnMmt6ZXgyZVZIS1hyNE52OUFOZVc2M05hR0pUcDNoeisvd2FETmZJVFR0SUhzQ212SllXL0JVSHZTOS9lcVlrcWJSaGJ3MFZoeGo2ZVJQcmg3MGsxMTBDb25ISnRVdEFFLzF4MURTV0RWa1k4cWoyMjF5anZ3TEFEZDl6bUtFQm5nUy9EdWlMbnBSYS9yMzFQbm9kcFRRMVNkem9EUGdlTVdwNzBEOGpGNkZkRzJJZkNVcWZmUUJtMXMweC9WOXNPa2EwcFV1eWxjd0RZYW1MaFcwM0VSWXkveW9YL1FBNW9hR1A1djh3MXFMUXM4SXh2YWJ4UUt6bXpVcnRDNStUc3lwZXBwOGxYUVNZblpmeHU3NGJnRXpsZGZ3UFp5ZTlpWU1HZm1oTVhuTGIrNDUrVm4rVEhGUXp6YzZpM0dOZUsvR05OKytJTVBEeUF4Vkt6Zm5Iamw1TnBBaUdMVTgzdzdVWGw4VTl5NDg4eTZEN1RuMExQMEw1QTF2dmZEODNkNW9SaHZRaUxIVWZlVm0xZHFhb3g5TU5kME9OeTZ3dE1LWmZmS2FOZWZQMUNqZ2h4ekhRdmo2N2JtU0tjWTNZQ3dVOUlEUW5CUWlXYWlRenRvS2tYQVlodWF3VjYxd3ZrUWxSS3JKcnlsRWhvY0owdGMvMDMzRUFKZVRzaGMzdUJFQi9WYnFDTDUvTXZndUNIb0JmMlNDRDRZTlhHQ1YyWlQxVHpCNkNyZjlETTZEajAxQnY5ZkRBZWk0T25CS2hkUHNFTHRzVi9HZWZHNXliYUhmaU1JQk9iS2RoN1ZvQ092bERHbXhGUCtOaDhSOGFHdE1jT0dIVGVpTEE4M3pSNEp2MDlsT2FybEphMUhPQXJ1VmF1TzJpS25odnJIT2E1cWszYWNWRnlSNnVqa2MwNmZRVE42K2lUM09Wb1U4alIzWERjRFVzOVNwSEZ0cUprRHU5SmUzMXkxa1cyMXVUSUlXNUN1SG9vY2RnU1RJSWx0VUpSa3F3L21Ld0xMbXFORUZvaFBvOEFtL08xZ3c2b1dtMHJ4R2NOcmJ0RUtSTDNtMURIc3NuQytvMGx4LzVhNlVTSk1idDA5R2E4eXBIV2tqbXZDUjNqYWsxVERXbXlYSmE4YzhQL1czaFo0SlZQbFhTTUxtQkNhbmIycnp6WHJVUkovTDh3NnhJa1FWQ3FocVNqRUhKT1VQNm15am9MSzdPMzBldzZqcTlFbGM0VXRXdUc1cW9aNThUbUNrSHdCODFSNjhJZjU3U0VuQnYycTkwa2hQNjMwZEs1REg5NXdQdkJPb09jZEdBVzRxb0o5eUVLWHIrR1FCa2pxKzZZMW1wVlJxRUZZRkZOaHhhZFgwK3VvVWtUYWdRd080R1NHVm0zYWJ6MHU4YWJmRVhQaUVlNUc5VTR3V3dweit3L01LdXBrR0duMFlFWlk2SUtuWldjaFZuaGY3NFRNa0l1a0dHalhPVkRyNG5ubmNSUExGWWltY054N0JlM2NlWnRuUDNwOStkazFuaDZpc3k2L3FDWjRzUG8veXRwMHI4dU1jL0NYNXJFNFNjVEhpaTBVTGhvRFRaMzJabGExL3VOcWZWdHczQTNVSW9yc1d3czZPTHVBTmpBMVVqM1RyOTFYOGRSNlliR2xuWXUyNHV1N1FIaHlnNW91RC9mUTg3ZnhXTUVwdG8wV3MrVFFaZXRXZzJubHFYOWJUaEt4bEM5UUk4VjVGMUM1MC8wZGthWUkzWEVZM0VXLzRZc2Q4ZnNEbHNUT01VMXI5Q1hNelJ3MXU5WWVGdHFTeVY2QWs0UjNNcnB6SXBvNjN1Vm1pTmplTGREYVM1bGtKZ1dBZFJtNUdFQlVMT2p1TWRUYUFJS1JrMFUxb1JjWTRlZjZmbWFnNjZkVXJLM0dwRnFmUS82SkFjaE5ESm9LTjhpcGUzaUxEMkIyRlNicUJhT3gwSmJweGlDUWdUU0F1VU5TUmswZ05DU2toWlVacmNLbHNQcGpsbmljM1VkMFJVMzg2YUFYN2hwTmZZckZvbmF5aU5ld0lydmdNbWI2a09nWTQ3RVAyVUljZUs3cFdLTDBxQU91NFJycmltd1ZML2ZaYXdRZzVYaU1hZWtXaU02d01ML0Y4UWdsM01hNFJNVGVMcjVaZWV2UTZwaEQvbVNXM3o0ZFFsQnliazZocE1KRUE2YlRGaUV2akpsQStSaGlTTjA1TWN1OUZ5V05FejU3MCtERXBML2tvcVVORU0rTjBVcGlVZWJINTBuRzcxb2lJTGM0YmFIenVZZHBWWVpyUW5TMkNnajRlbXhBQ1I3VnVTMWJZTGgraWY4clY2eEFPcFpRK3R2K1RRVTNPbSsyd01pMnp5Y3I0SlZhS1N0bXpBWi9hdlhsbXdqM080cUdZS3RTeEpWSFAvQWF1cElOWDlBRzFPZWNUWkI5eVpaR2VUcjh3ZDZzcTN5OWgrQ2JKdGxnVnZteDh4L1pMNjNSNDFEUUM3RUE0blB0YjByZUdpLzRCUktCaVgxalU2QXVFVmxaMFB6YTI4L3pXWnlub01KNUhKL1pla0pRSlRyeUlYVVgzRWhibDR2aTJZMy9NaWtMcjZRVHBWV1NIZVBsWTVLMGxYR1BhZTFpWlI1OW8vWmVzWW56NjhqM2dVUjBydUxScjQwTVFKbzZkQzRuS3I1c0xIWmlXZXNLbWNDTThTTUZoWWY3YnhsNkxMcWcvS1hPcFRwV2pkUHlXZkNiODhNWW5IMEZSbXZ6ZXlFUE1Xa2dDR1hMdU9uMks2MHNZeWVlN24zczZOK2Q5YjhlaTQ0bFFIbHdOVHhMZ044WUg5RXErM0dqcUt5NDE0Zzd4WlN1dkdLdmh4c2NiZm5sWmVuaEUvOTNQN291ZUxXM2ZOQWY4dE9vcHlMTGt0SWxqYm5JRVl4cUtsOUJLWDc5UVAwOVZrbW1FM1Q0dzlzTE9uVnZFVklPSVBXNFFNQWZDSlh4bVlIVm93ODcrR0VKWGZEMk95VlpyOW40MGdlaURuZkdUcnhES2pZbDc2ZjhJUkJ3azYrMVphbmh1MzVzNEdweUR1Nk5hTUp4WHBrd3BUQVFqcWhreFJxNys5UlJFZk82V2JiUVQ0YWIzaWoxNkgwZWR1MCtvZHNOL2F5TUxiV2k0WHhhYnZvY0tIclB5RlhrNkw5QVBiT3Q2SXlhZTBWN0JSQ3Zzbll3Q3MrOVk1Y09TUjJDVVo2amNDZVZCcElta1JkT3RHQXVWcEdWQTRsQkY5bHhOWTJuVlU4NmVqWVhQMm9XS2ZTKzZFeURZMS9ya3RUZk9HcStsUXZNWm9HM2g4Wk84TWV3eTNpUGNZODZFMTZycUJMMWQ0Y1FEdlpOSWJsaEllaXlnSFQrSzY5YmhrMDdndlhxQnczMlJYQlVLbGN4cUFEQUl6Rm0ydW5iNE44YjBlZ1VoQXdHYkM3emgzRVpZVitEM3YxL3ZBRWxRWFV5QXF2QVVMSVhGQVJkK3RHdFRaU2o2N3FFczNDWVJWYTk1Wk9PZXp1SVNQOUN5NG5mUHVWU2IyNG5uRzZQeW1DV3F6TlJKMHFDUkE1aUtxTGNMcE92NHdWY2QzNXppMUdJbmJJUVVNQ2h3bHdxUXc5TS8yYXhYcEpOR2dNMngrZjIvdlFwbGlrdDF4U0lVeThxRDNjTGdrSjJGMzJ0S2xoYW9jbFNPVVpYNmNFY1hCb0dvRjU2cEprSmdFTDM2QjJrdWNzTVNXTmgvZHFoOHpLZ0lSZ2dLN1Z5ZUJ2NHNJZzNJczVvTG90UUJhT2dPeG9JaW9BYnJPN25qZzN6T2UxT3A1RnpIRjJOYWltVUc5c3NWeUpWTXBEMUpzTTVpSlEvRngvdGRONFlpMzNRWTVPTUo3WitVM2FvdDBOM2xUbGxJYmhXUlplT0o1Ym1leWlvN1FtbHlYZ0N0SmJ6STVwY2R6QSttZlgrTHFXZ1pJUjFYNFJyZUFFQ2tRd1V5MzhMZ29oVE1HUVJSSG5XRDI1dGFRcVRkK0htNURxK3FuN0RmU0UyZVpoMmxDRnk2Sk1iWFBybDFaUStDZloyYmxkbWF5NlRvNDVZK3ljOVFMamFmT1F3K2F3YSt1bkNETUd1Tk5JYUVFWTdjK0daWHVtNWQrTGFBWlJmQ1VaRWsxaUNnZ1FBQ21pWmwxcFE1RVJ0WmtKYlQ0UkpRbmd2V0kybDFudldiTUpNT1A2MFlpNHpad2FLcGE4UFZ0SmVpRjNWUXY4MSsrWTBSbjg2T25QK0VRVC9WM0xPZWxqUFAxR0hQS3VBamU2cS9DdGNieWhOTThEdy9zSmdXc2czNndhT3RVOWN4cnBTQ1N2QTg4aTd5TURpTXVzUTN2K3BLbllBZGdubFlrRUFYYjJUOTR2blE2TXNrKzd0T1ErdXhxS0c5WDN6MXc1bURTNWdNS2xGVnhTM0tBdGR4NEpoeERPT0JwZWV6QlI5ZG5QZG8vUDhGeTJ3STZNaDVKZ3JHdlN6NzY1WnVpTjM5dkNoc3B6ZDRMR0NzQkZvOEloM1IwUytQcUdrNXljWk5lRjVyeHl3OGZtMVNyUjZBSTZCeW02VmN1UjByRExLTHRBSGc4VWRndUxmOEJQWTZ3dFoxVVliblRFYk5qY3JOTmVqUDNMb29EN0wyL0lpMjFqM05hUG9PVm00LzZueVFMVUZ6MW5IL2VQVW9Sb0NVV09HUndvVVVrUFlUS0RuaEpDVkFFRFFYazZaSlluNFVObllLYllYbDVXV1REakRhOG1GWEY4T1A4OGRTa3ZrZkVMZk5qTGoybjg4djdGWndzc1M1bXl3WS9NMVZELzJoaU10ODZMYnRVRG5HYU1mQmtSdlArMFdNUjFwcUx6dzh3U2xoVFJjeC96WUJBdkRtRG8wTjRNVjhoU3RXTDBsVGRLQ001MlNtNUN0Sk5CQWliRWFXWGYvbE9zbXl5SVVSUUVZcHJDU0x5OFRreVRRYUlJaUtRVCtJc3l6MzN1cHJDcUJsaFBVaVhXVVFKT3ViSVhWdG9ZNHJPOUpOUmVHU2hVVzdlV2lML1JBcGU1b2VuQXF1RHJON21xV016dUo0TXRNb20wTnNlYVJLYTkwdUxYRlpTemtnUmpqYzAxTk1kTWtUL1JQNjc5cXBWL2JMSk5HcTJHU0t6RkRacndxbUg5SVhZMVNuMlVKY1pFTEd0QlRkMUhTaU4xSnNVQzBDMUxmYjdEQ0F3ODFyRlpIc1ozb1J6UGdSb2Rxa2x5WHBTbHpFTWExOTVKUnFuc0hxVVJSdlBKeWxQWUtmSzNQSSthWlRidXJHV2kxV1dHMWhtRmVTcTBuR3hxb1lLNXJwdWdOSjJrSkRSV1NEWERHNC9oL2pJeFdEcG4zZGxTTHQ5QVJxUE91bG1TU29XUVBjMk9yYkxZV1h5dER5V2J5dy9OclRKQ294WW4rcFVhWnUreGtxM3pGdW5rcHU2Q2ZsNHEvcWtNa1NVaG4wUXc5T2l4bi91Z2NxWlJYaEVvT05DTU1ZaTVGSVpUQnZ1NWwxNWcxdHJqcjZuOUVGQ2VWREh3SjNLYzVyRnNxVFRLN09yUEJmR3NDUFYxREhnMk5XRUpPaXMrVXRndG9iU21rbEplYXFiYmJwWnZ4SFBCNDZjR0JFRCtpZUZRZ2pNSTVacWFuUUliOTkwWjhzQmVBTkFESllWd0FsRjF0MHV1T2c1aWo5QVhML3JVYVpxaTgvek8xcEVFWmNkbCt5MGJrR2ZieThTTVZmcklsRmd1VjNCUU54akVmaEtDSTZKemtHdHJyWXRsVDNybmZ4cWJMUmNESXZPS3k0bUFHZW1JbU9vZm9xNDd4QXRuK0lYQnZ6T2owYnErekV3Z1lRZmxYSk9KQ3BTaG5UbkdVNjcxR0w2RzJRR2t0KzhrekpvSmhyNDJDS2Irb2daWDJ2SGRFelgyNkprRXhPenVxRXlnWHU3aWFxS3lidXgvS1d4YVp5bWErbUtWckVLdGlvZ1VrWUZ4K1MyWjFTY0VtWWNXaFNzL1RTdzU1QXI2Z3dUMmFNUmhJOU5yenRHblBzNWFIWDhvb2hvV0JZN1FpVStqUzViUjlsME9YUDhiU2hQQkp0YUt0bmxKNThZTlc0TzQwVGtEOFRrZkd0STdtZEt4QU9CL3BQemU4cFl3SlA4Sy9SbXk2dFZXRjIwd1pjWTcyRysrcUtJRkh6SEJZbDVxNFdoYk14ZEM5eHZpZjAxY0wrNlZBM1h6cWlzcnZTOWhSb2lhMVorbDlSYU1IcXdjSHVUNzllMkg1Zk43RDEvVENNcEFyS2xsMWZuejhtWVZoNXdSZ25SNVpQcnViRi9RaTZ1K0IvcThud1c5MzNjRlFEU2tJQWpqRDFUcEpqT3JMcGZya2FBWkZNeGNoNFRpMnp6dnEzeTFUT0dHS1d5ZjlUOGpXRzF6SVNZNFRkZFFJb0FZeHhyZ203Z1Jaek92TTBFUHAvaHljb2oyS0pYeXI2VjJJNWRDbHF2Rjl5UXU1WDdIellZK0tDKzhpdkVjV0diUTQ5U08rNU0wTTdtQlFHQ0FyeDZlVTh2dkVWZGptY1dwbXdYc2dzU1lTcWVQeUwyK2lQam5LY08wN3FiTG5WdGt2YWVFdVM2ZHZTUjgxZ0NjN2lSUWVieWVWT1Fybko3VktXd0FyUmFMYWp4bTgwUmJiUkEyVXR6NVBNL3Y1QXk5RXJWdjBTT01ReVFueWg1VU1JcDNxdW03S3RrQXdyTkpVMGZQVk4yK0w1U3VwSmVFTFpvdTVOR1NpcWlZaXVOb1EwTWVqeWRsSXE3ZlZrNjlRd296bEU3czlhTlRJVlZPU3pBL01LU0w0bXJXWUtVRmhoNkhUR2VxVUExNi9QU3ZWQVhCaVhxMlFQSEhmVjMrQWpGRERtRXpVUTlGSjNZQ2MzalAxQS9hd3VBclR2RDZ4eFpRWjhSZkZrUStQblJpTXgwb21mSHlCdHIvWGxPbytWOU5DZ2NWMURFRW9hYTZmTjhpYkw1bXRSZ1N3bW1SekZBYUp0VzJubkRSZ3dheHZpMlBodTZrME1TL3pkNUxUYW8vYlpGUytWU24zTmh6YWYvS3lVOWFTM2tIY2FOUSt6aUg0dlRGWmlqbmorYm9XVk1relRnZmlwOEFScnprVXBadlorMlRPWDhCT3l1eWthNjVUUkd2NURmQWRPZEhiUkQ0SjhkMitsMUVraEZ0MDBzYkllWmNCcHUwaDRyenVXZytZZCtJYXM1WTJ6cWhKeHVuaGhTdUFSNEFIei9HSGR3Qmw4Z1dSUnJScWMwRDJEV3hoOFYvdEV4VzUvR3EyODB1U0RKaWx5RURxQmMyZldNdXE5V0kxdmVBakpPTGNydU9tUTdTUmR3a2NtK0huSjgwb2Q3NWZDSHhubTE3N3l0ZS9kUkZrajFpY0U3NE9tcU44VTJzM09sSzZLemFZLzJSTWhlaERvOXdGdjF3Y1M2Yy9Za3hNN0laK1VKTFhIUVcyZEpkMENDYkNPY3c2c3dlR0tnT1MzVGk3Unp0Vk1uTG0vZEN4S3NIUFY5V0hhdTBqZktnK1hJcE9qVksrQlNEZ0t1eCs0UU1yN1RtVU5ZWWhRQzRsZTdKbzA4K3YwRXFqTld0RXRZbGVmZm5oQWMyWE9ZZ1dNeDVLWEs3WkJmTm9LRjB0WWNrTUcrV3gyVWZBakZXZng4Y2VEaG96TzJOYXNYUkloRHhTQnh3Q2pObE0zK1FlYVhlY2Yza1FMVjl4Nm4zdm9lQ0pmdTV2SDZJcW5TZlhGQ1B2OGlZZWZ4ZEdhOGttdm9DVm1aazJuUHJOUFFIVG5lT2RYNGc5eGhMbDFJcHZhL3cvSFA5QjF4N3VkUTEweXFxdmtwb0JYbXJsSHBOSG9pU01FQVlMempJeVRhVWlnODlWQ0JHYmJxdENocFpjRVhEaDlQNVMzaE1adXNHdVJhR0ErT1N5M0IwT0RnWXdPcWhob0RkZkRUcmh4WEQxU2hCajdUWS9EUzJHaVprc3BGSkM1aFl6QUxFYlpxdGFRUlpKNHZRbStuT1Zha0l0WXRvOWZDZ1BnT1k5di9TQ0w1eUhIL0gvOXZ3TDBDVjlNb0dUU2RSODRqRVVVL0poSEZKeXdkNFl5Y09XVEZ0RVNSRkcxcThnMGlCTlRKNmQ1ZjVrNmNMLzA5enMyYmRPNFV5cjR3ODBWRVVIUUdvWmhMMzdGTHpBck9GcXJZM0Q5M0lKTEVBbFZOTXNocU5VYngyaWRobGEyUDNHZGZleXJRRG0zYmxXTDJtVEordGV6UTRBRk1pVHJBdXlDb3BhMWVLTi9LN2FKcGpNTU1RY0I3RUdYMWdGZEZDNTZGUlE4bGVHN0pTeEh0VXZ0Z2VWT2xEbWxYYk9VaUE0TE1qTkluQkJkaGNQYUlCWnRtM21CWklYSDEyOE4vZ0lDQWdJQ0FnSUR4L2I3R1A3ZnJndjgzcmQvWjl0VCt6N2hUOXYwdFArMzdHYjluMnBYKzM2WXo5dmROK3owUi96ZW4vbSszMlUvNGZhcDc5dlpIZlo5a3YrLzdaYjluMGt1L2I5b1grejdVei9oOU1iZlYyOGZzOUJ5KzNxWTRmMit1MyszNnpUL1oxYmZzK3V2L00rd1kvYjlERi90K3NJdnAvWEVmN2ZvZzc2dXpPK24zSVgxZEhZRG5WdUNEUUpXV3Q0b1VCS1NJd3pqYy94MnJEdGs4eGVZNEFNVlBGbjRMRHpEWThLVG94dFluaWRLV2crQ1VSbmluZ2tod28xNG5vaVFkVUdUQkk1WDJaRTJhVkFTVzZuZjJ0dFFVSk1MQWNjdDlidmRBeThKd2MwRUgyTU84Wm9kQVZsOXJZUzJwa3pJb2ptVXJPL0lQVjZhOTM2Y0RKTGlFT0ViVXZJTm4wQytlUEl0dnJmVWZ6MlBjVzIxMkVuM29qTGdNV2ZLbVhjcWZtY29LalpZMHdURC9KeDA5SWdVYkhabUpmMy9ZMG1USjFBOFN6dnpxZHIxc3VFNlZaaTNVVnJxTmJOUUhpYjFTaytpc0NRYmNYcGV0eWpUVHo2b2lBYnRsMU83VExBaStTRzVTZm1JWDZOM0J6KzlQYVFSOVVnbzc1L3FrcmlheVlDbVpmNktoWmcvRU5XRmJVWVhtYUJVL1QxRWJiZDRLa3NYQ0ZXd1BmMHE1WjBJb291VENZaUhwcTVVOFVUVXVWejd6YkkzdDFiYWd3ZlFubUI3WEhXRU92N0kwM2pPTzJhWk56cVdhQ2U2emNIRWFLc2x2OTFyZ1JZYlp3YTJaWkt4YlFJUjE2eXkzWnYxWW55ZHhOdjlRZDhrSW93enkwZmlodUdqSEJ4bzVLbndGeEJEOEtQcUlkOUYwWlVJUlFoaXBSODNseUdZc0pTM3h2cDFNTThxSWpRb3IxRk1YdTQrekpsQ2ZsRmM0dEFmZEEzMjZkc0hIRy9IeTRvSmdhY2ttNlFaZzZ1dHFWVkprL1hUL09BWGpKNzJRRmZRNDZjVGNFRU1pOXdVYnBNTVhZK003dVdyZWdLV00vamR1K2xhT1JjZS9CRTNnZEVIUDRJcmhFQVFiK3ptcHduL2VudENjUXZCVWJnMnVvVWw1b0ZtOVpmbGFkMm1OME93NHVQcXIrN015TWljSXJzakpORHVBV0swVGF3QXk2RDVuekZFblhraUhteFZZSUU3NmhxV0ZCTHZKMHNKUTdCc2JQTkJJMjJySlBPNnkrdFo0Nks5MFEyMStZM0tvektWUTFNTm54RmdSN1Qwc0gxOTNEajBDa25TWEZhaHVmalp2WEl2aEhjY05UTHJwMTlQdTBiOGNFVk5xZU9ka3JwSlR2THJ1T1U2R0Fxbk42V0ZlYnI0dk40VGllVVp5K3YyYzhrSVhrTGYwYUd5ZXVyRktORVBINnFiZGNybldYeFAxNkJ0N2pnWURHSkdFSUZiSyt3aEtJcXltcGttWjlFQ0htWjJBNk81amdFcEpDQzkvYjJ6Mms5VUNXWktPYlpsZWYwN0ZrRUM0MlFMUEdkd2h4bnBRc0VDMk5BL2U1R1VtdTF0eGN4L1FwVndKNklpSEF1TUdzUkNxSDl4VllSa0RsakVnSXBqMTYrQk9aN3VEZmFvOUlTajUxUWN4UjZUZ0dveGR3QlVHV21Ld3lOTnVnd1Z1bVBVd3J3MUh1TzVjRkdVTnE5cTE0TWM2a3FZZ0ZBVG1reEpJNWZ3STZkOW1lMnc3cVNxblJTUXE3TTIxemEybEszZWs1MTZQeldPcWpUWlFkRHRSYmNnbkRGMUQzL0FPcEZ2bG1mbENNS1NMSUE0cGFkRzRFczdQRU13Nno4RGRLZm1KMU5tczhlZE9LMmVHWUp4NXY2dlNhdEd6UXZXL3Qrb3RjV0JKK0dLdjFnU2doVWNVUldhbERRNFhiNERvUmFjK3dFM0phNTdja3kyaW1TMzVpNXNZV0J1RFBiMTRSWDhUM01SNDBqKzRYbnVZZXNHUU1KNnhFSjRudmZ5S2xBeEFJeVRmWS82VE8zM3VFNm5pQnVyYnFzMzYyNHQzVEVxbHFIak5GWkZlUEM5U2hZdlk2ODBlc01VeDJpUk9UQlAwWnRzcGhVaWtMd2ExbFJYbUNrS0VWcVdXcm1sT1RpZWtUcllpb29iT09jOURwKzU5STJ3N2pOd3Rpc0tpcTVrTnRHM1JtSjNqbG5mQmEraTZ3bnNvandiYkRCa2xUUFpISU51M094aExyTDRkR3g5QU5OUWNkVjlSaWo0N3EvdGZtZVhCS01IYlp6S0hJUUF2YjlhaUJiTDl0ZG81NCtZY3BWNUF6V0l0cnNkTnhTN0k5eU1abmVzTENSTDZ5dVBNRHBsZjlVVGhqNkJXUXVWdERGTnFHMG1VNGp0YW5nSm9EeDBSNzMvRUNSbFlnbXk3T2U4elZwSlhNbU9yUmVCTy9MMFdoUUt4b3l4QWYxNDZGdFFDcWRNbWYwY21oSGJ5Uk9hb3NvVUpmY1lNekV2Y0xjY1hveUh4SWZORWt2aE9lcngvVWszL1pOaWoyWFNRM01rajArRlMrYkgxbThOR1FDSTZvejNJcTRsUHlNZ1dyL2t2bS9hRkNCWm80MFNOaTJOUEdMTE5OTHVwZEpnNVJvWDR2QU8wZlNmUm56UHEyMkNpbGtRekZIV0ZySXlXWkxuOEIxQ284ZGUyMTRSZUJqVTV3eXFoQ0w5WnFlSlFISzEwbkRzWlpYdWNXYkhleExzS3RqcE0wY1pBKzlOSmEycTAzRUo1cmJZTkxRRE1jMC9leW9MeFFWTnpWcndicVRwT3gvQi9yWUpwV1psa1lqSlpKQzJySzdHWVh3ekt1eGhTZ2JKdFlsbWtTajFPdGM0YldFaFZ5anVkekhFUTZkUXZ0NFhodFVpL1drREh6OXIybTBJUXo2L0lGc0hxRmlPYlFqaVltYkt1NHM1cEliUFgxc01Ta0FjN0cwUXJiZ2lNYWVMRDBqUG50UUh5L1pEUnorZDdFanRtU2tGTXBHR1pjRTBMNnNzSEdSdHF6SCtuSmNsQk1kcTVOa0wvZXJ0bUFZb3FCOUlMNXZFL0Y5SnczakRVamV2akVZK0puTlhXQjVtMXp2Ry9tdk9lOVpRekJublREM0sxTjJUNHNBaU5LMUdVQ3hOcFRLaHJDVXlUYTJzRStUSHhoem5FVjRCajhSZFhpM0pqUFJ1SS9jVDNVbmFVT1p1UHRNbEUzYlJpcWdzNHdmRG93eVgzb0tZeXNiUmowYzVCOGVHYXBCNlRFNFFZR2lUT2NweFZaM2MxVTZnNnhrMmxDV1NhcWplNmhCWEZJWXNqSWl4M1pHZTFwN2hvaFhNYTllNStObXBobmk3TGVWdFhESk45OE45a1FiekV3M0RpK2RTZHBLS0ovd1NUOFZPTldtVVdPVzcyWE5vN3UrTlZHUDgwbmQ3RVhtbHI0bzVjbmErQU1mOUs2Skd1bEpyTEdwWUVIODA3dDdiNC9PeDBMaHlGcjhJYTI3eFRxTGN4QXViL2dVMzBmbjlWV205bW1EbHR2ZXdlREMyanJ5OWZvOWtGZmJvbEdIZGxiQzJnaDV1dnVkRjNFWW4rTEI4dUIvdm50ODV6SGtHMFFsdW84Q0hLaThVeGxiS2dqWVlqellWWGJrbW55YXVVeEhRcGtxYTFjZ1pWQXRwbXl1a21FdUJjekg1TnpJSjRiMjZDdGVPRTFWaGQwUXJ0cUdFWEZpT3NFKzd5STR5bG1JdDY3ZG81SXphRGttYWtXZ3cwTGVCNVd6YXhkb0pmV3RLNGZocFF6c2FueUZqTjVzWmIrTVN2aUJRQ1Q5ck56TzJ3UGg5T1ljZkx0YWhGd25mYTFPREdvc1IvNUlCbHZlY0E5dzR1SHgzTk9vRG1sU1lDRkdHWjIzbEd1SHpONVl1eWNHcXczSEFrQUVpR0JsS2ZwNjJYeTNJSFZKM3BOWW5uMzMxTnhuNHdJMmZubmxaRWVpVFVCVGxxSFdINHh2R1pleW5QTEZEK0NXdmJYZXd5RHBBWHJja1Y4a0hKRkJCc3JuY242U2JZejZFMTNFOHFzcUtJditVVjVFU3hZVEpWNVN5SEhTT1RLNWkwWDNQMDVJMTFZM05iOVhVU214UXBEZjVIcUQyMkJaejIvS3JHVzR0NWROS0RSb2V3K2g1KzBSYnhvOElCSk5lMkJ6SW5sSXpyaVc0Y1pEU2s1Vkdiait2V0xYWEluclY4aE9ZNzZYd1lWUFh1MC92eThWUzJqVnUrNHNqUEJxMUlwMERuZlBIem56SlgvMVdJdndXLzh1bmdBQTcxcWRySFV0NmFHZThCL2ZwanZmZC9PWUtpaHRuR3UwbXRUQkpnZEZnWE9KdzJidWF0UDBXekc4bk5CeE9VUHdZMGRQd0J4VTQ2OHlBQjhKS3k1Y25zeW84YUFvTXk5T2duQjdLUmpJQWovblVuSWloMVVGY2NQTWVucG9pWXZsZU04WGI4RnJWMlBPRXVKN0lKYW1sVVN6eDhkcmR2Ri9QbjU3alNNQk52dW1kMFhaLzR4alE2K2RkYnVFa0xkVUdSc1N4SEFIQlpiVjQycUdvMTJvMFE0em9Cekc4WmhJTHpDVEg0ZnIzejBTeTJpM1V4N2NqUEx0THZJbU9xR01WVzIvTm5wQWpCODBRZnIrOFdkZUNmMVJKaEFvWTlpWVNVemNxNTdiczd2RFFxQm1PMC95aWNIRkYrV1M5T1FNQzJVR3N6aERPQ1ljU1lxcXNTd3NwbmhROE10SWNRaXkvRWdHY1BlcTdkandOTjV6dStzc2MyMU92NkZ2bVliQ3dIY1dielNwdk9GRU83SVRoY0NMV1dXSU1RT3orTVFPM3k3WndpempPSVpDK2FHcEkyRUZEWEIrV3BZOWRvdnFTajV6dHpiMEZheFVJS3puMkEzNGNNR2FsQ1NsMklubTNrK3RpQXowNmFVK0drZHJEWFQ5eVRKd1RGODh3QjY2citqVDUyaHZOVFVibFRRYWE0WDZXQmNDbmZNbEE2c2JrWFVQMXRRVDd0THg4SVNha1g3T09GME01YkR6aGtRajlHL3hNUCtQMVgzRG5iK1YwdWtZTy85R2pwdVhrbG4xNjRka2FuTWNSR2VPYyt1NTBnMUxDVVZlV1B1SldKY0FOSUowcVhua2s1NkNydmUwejFSVnhHUVhmQjJGemZFZVAxNjhSQ2JZb3l6c24xd0dVMWxTSE5GT3pIQytCcXByMFpFSDhKMmFDWjNudEdyUUh4U2dQemtIaExsTFZCWkx6NVFtY05PUSsyZ1hEYlBGQzZZWC8vUk5pUzIwQmg2RE5POW9aQk1sRWh5U09kM0ZSazRHS0hXUVZsZXhHVGFUeFpKRlJFVnR6S2g1c0xTWWVHclhLY3RETTIzYTlIZGZ0VnpKaS9UcEFLSm4zRXhTeStHMTFJV2RjejdDcXRzZXpUUng0c0Y0b2YzcFA1YW1DcGVxZVlrWlBONTJUdVhwTEgyZlhsTzBmeUkzd3RGSDlOOHhudTFkSy90b2F5RXljcGY5TTlxanYwU0lLSHA5ck5sOXVpdVJ0NzJBOFFkSnpqOGNJMHNlZDgybkJFVnE3UEpIQytHZ3plbmk3Q2EwalBwS3pVK1F2NTZSaGRrY3R3VUtzQzhNTWpQakpqMDVUQ21wak5YL3YwZUEwZkRkMU5KTjlIVk82RWFkbFVyTllKL3JibjFRV0JXRHFRUU5HUjhNNWsydFRzRjdRdnFKa1IyNU1JYkZJeWJObXpJc2V4Z0I4eFpVaGdVWWlHNlU1ZXlEVmZqOHo2NGFSN0lqMVYxaHBRVkNPZ0YrUVYzM0RUQ0hrUG9RTzI3d0I5UE1RcFpzdFp1Q2RTUkpRelZQaUpneHFrd3pzNnk2NVVpVWlMVDUyZ1lNRDJDTjlqWU1rTXo3VGhLU2diU3ZjVDZGay9NVVh0ZVYwMGFhSi9pbm5kb1VzNjlRTFNaTFBtb0h6ZEhRdHlDZUpwMHgybWgrK3p0QUpxbUFJeEQ0YU9oMFlaa0YvYUpvbnR4T1V3RWVYc1FLM3Q0ejFRdHFqdVdjUENSb0I3bG5VWjhNLzBMRDlSalp6ZEg2YWU1ZUpKUy9TdFVXQktwNWFQTmdMQk5Ta1pWWUJtckgvaUVOTkUwaDhXYzNhWXc2aWlkSkNnWWJrUzd4d0FhNkVuMDZUSitUd0E2R0RwN2VUU1lyUzFidjNtM1Uwanhyb1pRUENwMmFBeGRoNWN2SjY4SlhoZWRsMndvdDhpT0hRZFRWMkZRck1OeHJFTUgyWkU1engyZFo3RWZNbzBNeDNSUHpna1h4VjU3NS92cnA3dTIyV2hMVTkrRXhlN2FZOFNYRnY5T0pndHRENVgxSDJXQmhZSFNodFlSU2dEc3pvT01hdFhRTlUzbHZ1OTYzUXdpRGZMY1FIYmNuOHYzS2pKNDBBMkdoRm1RaHo1UnVhM1NraWJMWWlXOGJPbDl3dlNqbnVBU3UvZzZZV3RYQlBjM3BNK05rU2FJY0lwSU00RFhnNzdLSjJSSm4vcVgyVFpKakJoOWxwZXRNU0dLM3ZsNWFZS0NsQm1EaGMrUm8xK2Z1cjRWa2l5Zm1Gdno5elNVNTdlaVAzTkdwUit6VWRpZ1lNUVJpZEN3KzF2bkVvdEZPb2padGNGTzQ5VU9UbkFuQjN2c3Y1YnY5eU41QjVubHUxVkdjVUsvbmgwcDBSL3llcEpvOGFPQzh5YitEU29IL3p2aDMrdnN5V3h3VFJOMmtoR1JESGNVVW9odmgzUkpFY2VJTk53SUZmeEhPQkZpb3BjeXVONGlPUTBONjJpK2JncVc1dDMyQWZjaCsrNy96TGJVd1JldnpxVjNIUVNpdTNOL3lvV2hSMUFSODdtOEFtcHEyakFyRzN2U0g1SFFLcGduT1BjdmV2RTQrb3FMdUtUUkpvclB5cGx6bmRiSkFXd2Q3ZTI1dDNRVjRTZWZPa3kvc0E5US9CdHpaYkdZeDNydklYRVJGYXJvT2FhYVg5ZTk5Uk5xYmY4ZGtMbHpTQ0hsNFNJeDhFUEUxc2xoQ3JZL1Vsb216SndLNTRRU0hKdG9UN1VZRnlaZzlrTzV6MHQvcENCNHl4QWtFaTZrSlp6b0t3aHdQWmpEUTdxRVdEVzBrVVZZNHE3NGU4VHhmZDhpWHVETHlzVkVjLzBhcEFtTzE4RW1rd1NRWDdQaUJoQ2N3Zkg3eFhZMlljdmNoRzdjMHowaWh6V1FMcjIwaTdRVDI4c2o5dTEzS0JKNXF3NEtDRG5TTkU3WXhRRkJ3U1MrR095MTQ4eUVsM3JHSFpOaHo0bHA4RHdmUXJrUGJWNFZHWDcrOE5sZDBKUHI4OExrMEFsNC8xWEdPNmVBN2Q0MXBxNHVHR2VxbDc3NGRnS1FrcnZHVlJEWUZ4YmRMWGdqMlJsOUNFUlhKRXJkRC9qVlhmcklYa2xPZzNUSFh2WVZhYzIvMXViblQwTmNRMysvbGprMFlVVkVjWWpoTmRqWkNoSS9aMHpndFJxdzlYTXh1L0c3Y3czcmZLdzQ2bmFDaHNIZzNtWUVSayt4SG92NVVLWHRDY0RRNmdiaFdsaGRhMi9vT09IR0IzUDZBZ1IvaDBTUXpONy9MV2lMcndLUjBDUlk0alBZU2E3cktqVVVERlRvenN2YjZuTUMya3RjMmVLcVZieU9rOFd4MGxKVmw3NC80T1NSY2VHU0JyVnVReTNWSzlZMjJmWXh6WXViV0N2bHBBOXNYZmtkZlpkb3VPVDZDdUdKSUhVNldWZC9KSFJhdTVsWldpc0wxam94Y3NuempnNm1Md3BVR3NOZS9IWGZuZkZOUVJ1VTY5VHFPL1pLWmRLK2phdmU1N0FjZkpPRkRKNGhNV2tZbFE0d2FFTEpKZUthUGE4VVRZUkxVOFlqaWhXVlk2d2VhSmlaZS9oK2Y4VW1CQjlWTEhhL2gzdWhLTi8wV2V6Qko4aFVuVGxma3VRcVVoNGJyeEtvL0lBcHJvRVFkQlJNMWJDZGxtRUF2R0c2WlFVYmpjaWJyRlBQc1IySE9XemFWR2pJQURKVlBjNzd0NXJOTTRKNVc0ZXh0SkF2clZ6TWhBajMyaXpSUmIyOHRFSUxGaGZzVG1CT2FneHpsK2JEUHpPcXhtSGdvWFRHM2hGMXJuMFBJMnZKdjVHYTdBSzhIdVVJcS9GNzVOVlRyRWxHelN4V2RlaVJ6T3FQY1lyQ3BzNDA2Nm1iLzZnSHNpSWdnbzgwZVF6OTQrQXpXaXNMdkxwcHd5MThiNkVhMTFRc3FZZndIQUxscUl1UHpPeUF3NFprT0RoNE02RGtLRTA2VFB6Y0Rud1gvaDRpTElJcjdyVzJEK1RzekZ3QURvSUZmT1NYRzZDTUJmaEM1K3JmMC9Hdm9NZFphaHNiUFdVM3orWU14aHFGaVU1di8yQXZhRFVUU2JSTlIzY0c1eEd2RlA2RVRPSmVxQ3hxQ1piK2xZczNIY0ZnL0N5WHVERkdZSTVuSk1wWFltQ0lTMENSL1kyc2dsbHgybUtzaW9VOWYzeHhrb1BVV0J0a2l2L1EyUXd4cWRqaFZ1UWRXZ2N6RlFTOG01S1YzZHpTUGwyVkZWOGpIdTFESzJMYlA0TkZOUkZFaEJrUTdONEh1b1FNWDhiV1Q2RUlEc0tIazVtbjNmTGwxUTdoNEdmK3pidWljZTVOUDErNWw3bnl6MEU3T2MzTWJQK1JXazQ5b1dyR0FvZmZPd0ZING0wSGhQZUVpY2lZdE9BU1BYQ0tsakRWZkloaHNlMkwzV1NycC90WlFrTmtrNkcrMytPTlBTZ3BnNEF0WWU0bXloUHRaai9GSzJOZEVaZmVzRjhKT25iQ2xmdStoK1VKNml0YlkrSVliRnpVckZGQnZ5cnRUdmhhdG45S0V0ZWxxZVBqVG91cWJNTlVnNmNFWGlhbzB5SmVpa3p6V1FWdDQ2cmlwcmRHWitLNkNSbmx1ZVNVd2ZxcG1UMjYrN3VoREJsUkF2NEJjYndBWEMxdkx2RlBHUi90bysxamZCa2FzQ3FwT1lvZjZob0VLZlpETDlRcXdQZUhOMytPTXlVeUVKWXpKUi9HUTYwSGJCY2FQMGtrRGpucjFsNmxvbFNtTk0vd3ZqVWg3NEhoMjA1TFJnenk5UFc4WW5nZDgyZUhnWDEwZk96R05GTHBhc2xSUWtHZ25DdnBOK3l4UTROaTZwZGYrcU9OMVRPdWJJWkpwcS9ScEFyNVlUd25SZ1NCRVd2ZTgvb2N6YmYvMHNySkM1NnUwYmJKNHlZWDlFSk5MRnUxZzhnNXpieGowRTFlVk1FdHh6OTNZaEJhdFhFaHRjK3JsQ2RFNE45QVkyRTNSczhMSkVtd2pIN05xQVJNdTZ0YjF5UWNOWHpCKzVBY3NXTExYamdhNkQ0SmZGeFlLT1QrQStmNUNGL0dUTFNGYW1iQ0ltWlFuR2JING81WmZadEozaW9JZW85dThwTHYxTHg0N2M2L3JrY1d6RnVWU09NT2l1ZDdzLy9KSVYvS3dMR0p2VnpTTEJXY0pRemQydmtHd1AyQW1oVm1BOEwxaUgyYlVFQ0E2elFLTTVJVUYwcGFqbGgxT0o0cXVHRjErVDg4L1oyYW4yK0E3OFlmK20yc3ZoOW9lN0VtNHpUSitrRUl5aG8xaGE0M2liUGd2dVFuTG91SmpHcmk5Q3NpQi9iOG5UaGZSMDNOWjh6eHEyNVFacXVMTGFCVXVJWTAzZlZPRlhoc2FLOHNPNzRVSVd6bUlTdUJvamhyTHJ2Wjc5MHpldW8vaW1pYWM3V3RpNVNyZVkrYVc3WlU2ODc5OHRBM3dVcW5abEJGNlhndndDOFB3WnNHM1VGMC9lSy8zYXZTcC92MTNIRUY4RFNvOUt2YVZBR1ExbUZYVUlKRTRZbzBFUnZKc3VCemthdmxhY25yY1VNRlhKYjR3YVVNTDcvRHdnZWo1cWhDdHVtU1daM2dNRnFaRVFLMHVPdHI3bFhndlZGcThSa3oxMnNGU215Zm9RbmxuZWlicFNLYWNma1ZsWXpMMXRDdXdxdDI0RGNGdmlKV1MwQzlRQ2FzZmNvdkhyaXU1M2YvSGhSUG15bEsrZU1FREg0d0RKdURvakoveHpoUk00bXNBeHpxYjNLVjRlZEpGSnZqcU4zMGVWdGIrQmY5ODRaeXFrV3oyZERUMjdHL3o3Tk5Tc1ZKQVV1aUprWVF6VWFCck1HL0FoTDcyNnFZbUlJLzJlQWVwbTNZdTFQV3pDMVBoZWFjVkVXc3p0VFlMd1hlbkNPRXdCMDhTTGlRSnUxdnY4MkJNTUFFcVpyajBSVExpZ203OVpDZXJWWFhWbHFyMGNRdWJJTm9HY0lySWIwUncrY1kyRTE4TmNPd1pwNWRndTJ4VndiaE5sY3YxaU95TTJmWlFVVEVWQzBmampFNlZDZHlyeTRLVTV0eXVkNnF0cXp6bXViNHNXZUFKMGxoZkd2dUFvMW9yL3NuTjJRbmtveE4zTC9PYlpRU2s5cGhEWVAybFU2KzE1UUQrVkZSekpsbE00N1FHNVRTRGVmYVV1VnBsb2RrQ3hEa0toRy9HSWlCSmYxMUlZL1d5YkloMEptT2ZyVjBaZ3R6ZE92cHowNFBaYUk5Y1JJeEVWNlY4OGUveEhKbzlDdnNjd29aa3VmRHNSOWd3SHdhajg1MGE5SExxMmZvOWRxeHoyZmFtTjRkUVNqMXZuOGdzQWpjdFB2bzVjaE1CQUgzQmE4ejdlMFd3R2xkWmhOcEdlN0ZkVnJDWmtlUzNYMEJoUkNKYlJZaTF5UExEZnB1aWQ1dW5vUWE5blg4Z3R1VXRaVlcxS2NpWmd4Rkw4VWptKzFheHRhdHJaU2R3U01rWFN5ZDhSdjBZaGhxWjQ3US80V1JORVBZbUREV0FCT3JZRVc0SDJzQWR0VXlCdEVxcUdvVFgwODhOQVVlcC9BTUJGUVVpQ2oxV2tLVzluYmtCbURvUHhSQ00zN0lmNUY2djdwc0hBK0l6WVF0Ymp2c3U5NENYaU9XNVZiYmpoT0xDOVgrdWVET1Z3QUlkUlNXK0NTQmJPTjBSK0MvRENhZlIyS3I0QnlrK0VZQXRRZ3p5bW5Sd01sVnpOTGMzYytRUnd6eHlpT0JwZmZlT0tJNlBGNUp5Yi9NaGhXN1h0UGkvODhYMVZCdlFlaWc5ODdOdlRtR3BtRVJmTm5sbTJLUDdVdlUvczZKeTFET1hVZWNyT3d4WkNoTzlCcFBLZXVrbVVHV3BOSnQ1akZNcFprYlVqQU9FU3VxUG00c0F6SklYSmdrNmlLWTN4S1lmWlhkMjRSdjR2Z0lLMWZyaGl6NVl6eVc1bXdOMjlGMlR1a2psbFljZE1ka3BQM0lSbXlqTG9qbGtxMDJwK242TStCMzZvSStOa1JkTUZHZXBZUTVHYmQwWjFjUGc1c0E1Qzh4cjFmOEhkenJRZnhrWHNQZmlJVjVuL3Vmemx3WW9ENTVCSkhSTUYxUS9BcWxDWm4rZWlTRDdpTTMyanp0ZVVSQktRK3pFWnRseHhqbkJ6ajBydVRxVHZXUDJBaTN4TlpqU3ZUMkZzenhEa0Q2Uy9ETXUzSHE3WUF0R3FFS2ZUakR2T1E3VE0xL0xBY1lqYW5qNlMxRHoxQnF6dFlKRkM5SUt3eXJrTUo0VmZUK2o2aWk0WTdDZGY2b3diN25KTVd1TEdsS2U0MCtjbWs1bG1oSjJ3T1JtaDNqQjV1S3krSVhlUXpTUlVrMGZLakNjWGNCMUl5MFVhS3lPK29jU2ZlcytBTFRaNTdKY1NzVDB1bU1RVy9VVUZ2UDBvODFwYzFQTnN4YXVHWFBzN3Y2bHpSRVRNS3Q3WTVmZ1Ryb0NacUc4NFZjUHMwbzgyNDdQVisxOWlTU0FqaEIyWm56aWZOS0hyY0UxQ29VM092UzBJalJtM3lLcFZ3RnRPWVY2V0swMEo0cDMzT0JISmN4V3JiK3o4OGFMRWlVS252b3ZHQ3BXdFNGYzAzUkdZRE15bFlmUXpsK25QMk5pbDMxdHRvekFBOE5YOVBVdEN1ekdDMlhtYmNXam9pMjRDb2liMVJkMG1maFROWm9rWFlKajlnclJRV3lqRXhiejl1eG1nekc0RER3OXNZcVI0MjBaVGR1Y3Y3VGUrcnBEUU1HMFoxODRsTWg5Rjc5RkpKZy9DcTdscVJ4aXp3SXg3b2FEK0dpV3Uyai9aTGU5c3NaWW44eDJMT29MY2pOOGxNWUE5b0lCOVBKOTJ0OFFiZVA4ZWtJRzRvZWgxZXU2SDRBZmRXc0RQUmM2dnhqcEwwUTJIRDFVN1VZTGl6QTNTQmVJOGRMTU1BWXhwRDZQb1k3akFWU1hWdmFOYjRMRkN6eXhUNUczZFkzWjR6QkZpK0NYTm1hZ1BtM2g3d2pRRDZhMVpYSVM4WnpBM0ppU2pzcjdnYkxXd0dlRkNmenh3WGE1OFpXVDM1bmE0S29ldk5kLzZCem5uZzIreGxOc1FOVUJWc3hwdDRkVlJNcFAyaUYxSkM5QjhtMzBHbkZBN3RnbE5BZExUcEt3SjUzemt0N2hJNUxabTRKd0hiL2Z3QlZRZzJ4SXNDclJydW1QZE1mVVpPdkFZYWxIbDVUeW1vUHI0Q3lRTEYzRS8zcEhyOEdSbnNmY21Md3diVDZwTDJoVWlwVHBZZ05RcVhtVkZXV0NyclpjNFJpOHRkeGtnQVBOeVI2c25SRDcvL2VMMlRHNU8zUUoxK09RSzJaVGxrS0xUR05UWDR3b0EzaXpJQnhNcjNVYXNVVkxyZ1AxQVh0Ylc4NzdJZDhrb1pTYnB5UFgzbXJWQkU1YmZ2b29WUW1KVWZLSWdKUHpwVWM1VDFDbk0zelhLajV0UWNLMDF1bmNTK2xTRDB0S2hBYWRwQWlSV2xEMkdGUEhBVElwM1lHdHVybjk0cDNCNlV6VW5mZEVMMEprWFZTVG1vNGNuYTdMTFF3NFY0NFJCbWFlbkRaZ09GYTlGUkNhdktJRFg4U2tuS3hzSkNKMGd0OEFYQ29hK0RYRTVrZmltTkJLRlh0ZSthSHoxM1RBUEV2RzY1N1ZRU3hNUXhKSlhBOWN0enBIemZjWXBQdmRhZWozMUFOTGdZdmsyQVRRWnRLZTBWYjg2UWoxQUduRzViZDZMdFVFZzVOMTFZeVRLZTlDaGwrTmI5WU8zcFdiU2RsRXJLMG9HTUdtTkNQZFg5RXRpcmU2dmNVTEs3VFlnK1NIcHpNcFlaUUdzWUdmVzE4eUQyNDBBa3FLbWYvUGJVVzJxejJJbWN4b0UvNjFuTWVuQ3l5SmZmMGlxdDN3L3NjQ1lUWjM1RTE3TU1xOW42Y2dic0d2VFQ0S3cyNXFqMEwwUE5jd1hQcUQzZ2QvTThNNGpBY1RhUEgwWGpsK1JFQVZxcDdMd0M4ZzVrYTFnWHovQ29KeExveGpQd3ZVR1p6aTl2bmF2MFl0RUpxSjdHMktLanpyTkpDM25vNnJNRVpBT3hjcXJkRVpxSEJNZFNZSGJPM2s4U2h4NlFFRklVWks5ZGM3MllrQ3ZDdEV2TWlhMXlKY3NMMkVacTE2Q2ZvRnREcDBxbXVrZE9uOVI3OGN4R3k3SXhIb25CT1E0T0tuYXV2YXJmeGVpUHpXcm92M2VHRlFmenVTQkUyU3pQbFVlQTJ4dVpxelJ2VS9uNVZ5QUdweE9WcUtIQ2JNS3I0RXM3ZlI3OUhoeFVlYkxUVE1pa3FyL3FHVXZmZ3BjLzluMHpyTTI3bkpvcFhRS2xDa0hpZGY0QnZLaUdsaGVqTDc1SHJLZHhkOXRMU1VzdmczWHk4QlR1bEFkQnU1K0ZxRmlZR1o2UjQ2R3R6ekl4djRES0x2M242MFYyQVN1L3gvaE9tU29IeHFQTC9NOEg3Q1VUYk9jMjdsd1JjSng3eGsrNFFyQURtM0cxUCtjVThmOElOL1dhc05tNXlDNVVUQjBKSE1uMWovK0hkMldBRU9HT1lUL2RWY0tJVmJpdlRMZXFYak5sQjFpSnJheUNvWDZ0TU1oOWRzUWNRQVpieXdWWjArQ3lQalU3NVBFSXAvTnN0NUNyZWhKMTV6U0dwanZqczBvbGxNNytIcUIzTjIzYVJORWtIZXRsdFlkbmhibGNFY2FZUjY1cFd0bTM1b2U3dk1Qd0s4VWZDWk1FRmE4c1hjbUZ1MDU2d0x6eXE0WnhWVGRrSGc0Z3FBS0N3U1pERDZzSEhlcEc5SHAzeTV6aEl5UWxpZkJ0dEpOQnlzL2tmNzltdTRsb01pdzhpUVFCY1hxUDlQbXZTbTVRTDJ0UzMwK2pYNzhPc3Q0RW5XaEN3MWxZTXdBY0VhQW5wM1lMY3lJL09nejVWSDdwd1hFOTRDQlNNaElXYzY0a05GUHZXL2o3WktCUklBTlB2WERaQ2Fpd09hNStsUmprclZNd1ExbGJjYmZWQlFwbE9EQjMrSDB6SkZuVi8yZkJreEFNNWprYm1UV0pkY0JPYTFoanVrQUxzdVlmNDB0NzlheGlUN2hDUm5kaExzUHUrN0VPemt4MlU2WG4zWWFxUE8vclVkdFZMSld5STZOVmVsMU9XNWZVWVRXdTNBa3pVVkZTQ1RoV3N3NGwzaFpUalkyakdVamEreFRuQlNNYXVpWVJvZTJ5YU1LRTNmSTBNTUM4Q015NnFVNHBTUHloaTlhNnl1Z2MvTmdHV0FST0VnSWRJak9MRmhBVEU5aEJPTkVJTDRNVHNEczBsdHN1dVJ0cENzVGRHTVVRbkUyQzhpNWFrNWt4cERKK2llSEVVVGp2Z3RnaXJjMUMxY0x5VVNNMnlTaFYwQThIa2djZVFyUXQ2ZHNNSWs4eWJCRVhsL2hCYjZuZDY4N2dhWXVRNWtlTkpmS0ZkbjdXTUIwQy9aYUl3TkVVRi9IVlBoSTh6bWIybCtPQVJkM09oUWY2Uk5DdWJwY0ZZaWY4MzVpSnA3RUxhTE45ZktHTHdzTk9jWGFWaVQ4Q0V3NUlxbitnK1orc3E2b3BtK3RzNU1jcDE1Z1ZqaHRmTThVS1hLVEt6djQzTUN3clB6djBGWmNzYWdST2dNdlI2YzJqRTlyL2U3anYwVFkydnlTSWZvbUlzVG9wd1NoSTAvTE9jQUs5dk1ReUl2bkNEcGFIblQ2czFOaXcxd2QxM2FJdmszcEpncmpPUjNNSFBpcmJVSjM3akkwMGRhOWkzOERPWVV3S2VXUXZQT2hucHpwL1JUT2RSY1Qrbi84QkxRVU9FNUNKeDNSOVdWVTNpbkxkWCt3U0ozbEczTE5wanNkY0pvSzU3YWpIZE9DYTNnMGNTZGF3V3AwSXlzRHZoVWsrVlZnMW5pRVpqVUZyZjNtWnNtVTJvMmdsMFZORDVHKzNNR1QvV0NZYWZtdW5abldwTEMrcEtxUjRneWpQTTYrNm5XOVNkZ1JvODFEL2JjS0JRUVVGSnZZd1hWb1g4VUttNzRWMTdaNmlEc0M1dVRzZGIwQ1dlUHNkbXAvNEptSWVROHRvSjFrRE5rZEQ0QVNucUVrM2twaG5OZEhaWkJLOGo0WjU4RnRqem1UclZmZ1hxUjlUNnNHSWI3V3BTdkdYK0FJMmJPVzQxMGZRVWNjUnRUcFFOVzl2VU1WblhISXFZT2EwWnBvUlN6T25UM0VlRnZtaWxOanhjb1kva0FMT0F4aEk1QmV0NVRncXkyTHRCUGlVYnQwNHhweXU2MjZ6Q3VhbWlQQngzREljMjlocVZITFVYZHZ1U3hLeERNWjRyd3hIWEkrTlc5TlJabUNvelozenFUK2VBYXRvRGM0ak5WTzZWdmdSYzcwdi9xUVBpU20rZE1kY3VzNzVrSzBKOUt1V2d6aTBtODZycVZHekYvcXpXTU1iVDB3TGVqa1U2U2ZoZ3p3ZTB2d3JaMmNyTXMvRlR5NVFjNFlDbysvdTZmdVVpbWZmQ2d6NlRmNExrYTFJdGhkeDJ2REpxeGJja2dWQnhydnRvM0c3dWsvdVh2ZVVKM2V1OWZGa3ZMQ2xNUkJ5ZEU2Y2NhaVVPc01DaE9EUlFhQnAvMHVDVG80TXZwMFY2YnN2a0hKNGZhS1RUKzhXbXpOL29mMGk0RGlVUi9uSENPODdMR0Q2VmpmdmtIcUx2LzdiV2ZYZHo5OUY4djIrQXFiQkhPNnhwNWhwYXRkZFZVek1DTlRBMHl1VmZQcFNwL0E1S0FlRGh4N3NxdTBQNFVnVVF4bmxGQmlxZWZkS0drNkdza0RsMXk5STc0cUdKYmdMS3VWVGI5L2NyTlVqMDZCMWgzcTlqaDhyU21xcU02a3dTVW00RkEySHAzdldNbzg1RE5TS1NUbDcwY2wreUpsM2NVZS83bDh4Z1lLWmN1eG5paTRDUGc1Y3B3NTdKVFAvRXRCSW9mbG5QVGc5V3ZBdnQ1c2VzSkhYeFlxM0gyQ1owUWw0eFh3WEM1RDJVaXcrR3YyTGtveERCTzVrNlNTNHAvdTFtNWhFZzJpUEo4TFRxb21pVDlUYlpINTJ4eVhFdGpBRVVab3dlQ0VuMTBXZ094Z05nUDAvdUpaM3BWWUxOdWFkMU9jQW12NUtKQTQ0ajFIWDFHQkd0dEYzN1BTRnFPYzc4ejkvYVI1bFJrNUhTdSsvbTVUY3V1VXo2NXRFbkFaeTA0TW5DTjAwd3d3eVFoY2gxcURzYjdJYXpUa01xWDdNa0lPN3gzTGJiQldrOVQzS0JId05xR2pKSTJkU1kxNFhBcFhXMDlTc00zTmhSV3RybWVRR1dOMHJGL0RmWEdVQnpPM1ZQcmlLVEVlb3FUVU15U1doQUhPaEF0SkVWZ1dVR2NpckpPMnl4dkU4UXliMEx3a0ZhMEJlaFp1RHdlMTBUTVlPRHZuckdMcC9uUFhpZ3FzUmQ1QWNlUWVieXF3MXFkQ0ZlcFdSWDhkZDl2dXBueUs5dFo4UDRmQmlldjdyZXFHTG9MZFRwekk1YXJwb1ArREFWalZSWGhiN3NrbENjUStaZUdsQXlBWnFQMEU0bUNkc2NxYitUa1RZVm8wVWZscG9UbmZNNXhHNjgxWXVqMTdlNnBHUU1CTHN6SC9Ub1RLVlAyWEZqOUFvcy83aDZSeUpjcUFjd3FsYWFxSGwyc0VTc1JSQkcrOUhUUVRkRGEyR1lFWkVQSmwrY2NGaUxnQ25aclNMQ095WVBDaTAvRWovVWR0cVVVczZUcFhPYW1nbjBoWjB5SkQ4NHh3RzMrZFJkaEV5NmVuNTlvU0c0SGlKczV6UUd2ZTNRNVNsbEdlNU8zdUFZcmlxdExoV21VZFM5dkEzNU0wNlpTcG5WTGVMeG54aTVpMzY0ay95eTVGc2hLbkxhVGM2TEYwWXowL0xib2NDZWhWSkxOYndiSk1jVEtSOWxlVzF3SHVhdWFkMUp2NHUwOGlUKzFDckY1MGRQNjVVVEVuTWxzYmdvYnpobWEyVFRWazM5SStreWpTWWtzZ1JPM0JCUDdDY3JKTGhmYjEydDE4ZmdRYkY3cVFIYmZSMzZhVHBVQ2NQSkh5OTZ0S1lwM1J3YUhCNk5ma0pseG1tNUk5dEoxb2ZTZU9sK1VLMm9HYnFuODMzR1R6L1FPNVQyRjBmd0JjSjdvWWhoc0VwNHp2OHMzU1BacSsxZFo3OFc4RzRiL0JnRkdMSUVQZWo1UVNDOHBQdEQ2NnR1ZDZxRzVERVhYbmlaY25KRVlWR3B5elVQMDFUdFN4SzVNKzdmaFYzQUtrdmg1Lys0SEtVMXNkQlVsZzAyTVNTdDUvNU1HQ2lucElZMERXendpYVdYOU1wTUQyT3VTdXk3clZYZUh6ZWVmRzNsdWl3Y2ErcTJyM0xFTE43USt6NkVOcTZLMDg3K0hzZm10WEJUcVIyNFBwbEVGTmFPMVh3VW42c2Z3aDU4L2RKbCtnbmkwaVBRS1JwazU3dW8vR2tRUGhLb0hEU09wMm1KUjZOT0Jzc0tIcmxHT05aQVV1cTZzb0p4TjFhSlRsYk5uZkN4SGhlRGI0S29jL1ZXTGhocEJLY1gxMmpTaHlZU1VMMzRSTTVxa1pGWWpBdUViUmluc20rR1VoOFhHM0NRTks1OVVNTEJiNEVhY1Y4bXJSaG1Hb1RFTzV1RWxLVzFMd2tJQUczZ0VPSFdGdXgxTm1YenRxelhuYTZ6K3FtdlhqeWk3N21wL1c5YzQ4ZDYwRlR4UjFKTlRQNjNaSTNDV21zWGZVUTlJdlF3VE1jWkEzbG8rQkJTQkFVeUthYmdxc1Z6amNOd2MyZnNXa1ZlVHFNTVRrTUdDcUF5L1c5bmlkOCt3eTFBd0QxS0Z5UXFuSkJQUWd3OWMzRmZRUkR5d0ZLTjl6bDdaeFhSaDlxVmVuSTNwUkpoSWI0Nm8vVDRubkwxcnE3d2F5U3RDYm9tem8xa0krdFJ3dWZBUTQvdDFJamlidEhaeFlBWWYzcXMxVURBNXR6U3VxRUFWUGx3QlRGckE3WGFyNWhIT3N5dlRXVU0yczI2a2xZeUpEaFZZdTR5Qk15Tkk1ZXZpUVk1VC9EZkpWRkFwMUZHc3l3anhIN2x2VHd6T1o3R0hUbnRyajJXTlNjRnJIV0RFM2M5K3o3WXNTbWwxcEtMS1pBVitQL2ZxdnNGT2IrUEpGVU90S2VVcktUUEFqczdKakVmWlIvK3pxNDNoSi9WdDN4SlBMbHduZXMxUm1MdXpQdXJZSHE4dmlaMzVPbDNEZnIwd0xENTA1RWdZV0hPM3gxenlJcjJmaXU2REVHR3RXTHZoK01jMFhxbTNOQVo1QmczamdlSHNKSTUxV0pzZEhPRUhNc2piYzZneEZXVWdFZGthVzZjMy9Ldk1OdWlPOU4yV3FVYzE2aDRvQVMzRy9YRlJEVC9lY1NFUHplOEVMSkVsQVFvVWMzemtlMFZaMGVyZFExY1NpZFFUUnl5aUdBM1JoTkRyaVVkZXdRU3BiUGIvc2VYUHBnL0E3SGNxTnBSdkxOZ3Q1RnZBVzR5R0pHTzNjZHQxVEtUNXBOQ2VGUno5aWJPQm5yaHFCREpNOXVLTVpGL3hTNEljbUZnR2JTcE51NjhFYnRFeTFqRmJVWCtjS1hxdEcyZ0hkUjkzaEpOcDRXWC9OR0diWWJrM3lXYTFRNURsbC9DUnl5anUyLzJXdEJjTm5yaXQ0K3AwOGlQcFQyckRaSllJT056Q2Zva0dTOUp4bHpic1d3VFJlQVBvaDhjWGV5VGRyRmhNK3Mvb3c4RHJib0lzVjRyektvSW04SXFqbm1pMlcwT2tyaVIwVEhwRDZoZXlMcG9rMzB2ajJRNmdETHA3UVArVDlTM3FUbXVaUWxmRFlaWTU4VUdOaDBGZjVtdk9FbXFta2hpNThMdE1rOEFCWjhDdWsrMVdYNkhOWmJvU0FSellkUktWRWxOT2RIVk1OMm5vS0dTREp2cHJkTEtSMGp4aVBHb2tXV2V1SUtmNko1VXFTWTlVSXNzU0swUFJ0eXBTRjVYeXlsWVQzWGQxQ1FQbUFOOHRoaGNtODUxeFRLbnRVbUx0NXd2WGE5VzlEdzUxVHM0L0tKVSthM3RoUFBrTnkwTjcvUFJDYTcvM1kxWmZyMktBalRXR1pxVXdsQjcxRlZBajdURFlXMjIyL1pKTytKcGVYdWs3TmpKSDJXOUZLWnhrTHhoL3NES2Z0WFRuK2Q3a0tIeDlyMUtoOFk3UUwyMDB1MklKTmJxcnpycE5xS3BCR1NXcW1SZDUzcjlMYlo2ekU4N05oMGlsd2NQaUovbGprdzk2VzdybkNNWTNnWEJveWZJeEYyMzFpRGJweEp2VW13RjhMalR1WFlyVVQ0WjhzTzljaUQ5aXMxVzlaNTRBYkczd1BtWVZ4RkEzcWE3a0ZNQS9TVlB0dDFUMWc2d3BTRmQyRndxc3BoYWxWdlpteFJwVjJsZEpwdTdCTXR3TTMwUGoveU94Mkh3SUg3YVBLUW1jMEZNTWMzYkVxVW1DWWp4d0EzT2MwY0NaZTRlSmE2VDlaaTdtbmhRWUU2QlV5YnYvZnRoZW1makhjcUJUTzlrQUthVlVabjBINnFQNHRZQWhRQVhJRUVMaGwxUlF1ekFaMFVSY3FUMUgzYXl1d05TQkN5clBYWnBneU5EdW9RbVJ6MC9DV1ZTSkxaWnVnOTVZNGRzRC9ucHZuY1B0V05GaWxEZnhXQnJXSHFVbUlCcS9RUTFmUE1qRWpsSDV0UjJORUpmMXdnbXpBZ042Smp3eU5aelJuT0p2aU0reHUyL3p3YVpIdThUazRCaXJmOU9WclRCanVyU1d5WlVJY1J1TTlEM0FuTGdBaFArMXhVRjJMSWhmazZGUkZzd0xOQk5Mb05VQ3ZNbUgrWkF0cVF4Y3VoOWZQQ2pDMXAwdW9HaUdrT0N6d2Z2SE5OaHRsSkh6VGMxZ2hhZkpIVklBMlo3U1YrQVhrUWtEbkpBajBXbXdmRzVINDFNTS9WN2RqTUEydWl6TXlYaUJ4cFFBazhVTFMrbm9CQWdxVkIwVmNRQ3pDWG1FRk1kYWpST0tiOFNHV0p5QnErdWc3RGJKekpZUXRwc1E3Ujd3aEtxaVdBM09YTDJXYTBGWFBHV2Fxa1VTbGRHTlJsMmZiTGdFVlU0V2xRaHRxcG4wVzZ2RDgrdVVkdEpHMCt6cVpYWFpDRnZpcHE3SGlpRHNNYVJzVE1XTTZNc0ZMUnpFSjFqbjZKTzhWWjhYQzJFcFpOSDRDVjYwclRLZlRMOTNuQzYxNFRKZUVBNnNjSkw1TzBZODBweVVHeitWYm50N1VnTVV1WnZJcDRWWnp0RWFIZ3RBYUNyQ0JWalFJY2F5ZzlaZkd4SmpaWUtYekJQTkczVmlWZDlEcjRRZ1NwTnVQOEkzc3J1YWdKT2hkS3RxcXhtSEpiZEZYRCtlUmNwanZCdlZ0UHB2ZEVjOXV3Q0E5V2FWRSt6bHNzR1RiYkYwK2FSZnY5WlA3WW14RGQ1SGZyVHlnbVg3M1FUTnpNeDBIWE1XVGtyZHQ1RDhlUjBhUytMUkdMMEtvQ1FFcit3QlNTUlNYczB1cytYYWtCK0pydkhmVmVORWpxaEw4U2FKMVZXYTM0MWQrUmtYc2FNVE82ZXd3QjVYNVdGR2lRTWlSZjBkVHd1eWpYclhCZ2xKL1FxczBiUjhWMzA0MWN0YWtaeGMyOXNrd2ZUaGhqem1QbjRDaEgyNHRqVjZBbEkyaGcxVm1WMitSUFg4cGVXZkRaNCtRYUlIc1ppT2hKZnNNbHp6QkMwY3lmRXBFa0N3U2xHQVFXUXQrSldLYXJKVmhtcHZnS1Btd0ZTK0hpNzBtRmQ5eFVXSUtrZFoyM1VCWkJIZTVsd1N1Q0NodFI4aVgyV2FHTUFWYitKMERmcUQwZC8zdjROSXg0THQ5N3NvTGZNbkpLTDlqbExCRzlWczBGTEJvREpSU0tWN3hDK1NSOWVvQ29HK0libmVuQ2ZaUllrdlI4bmZTMW5aQmI2VnBUelZVb2pQcmljZUpiUHQ0NHB1RXdTdUsyL3J0MTV0MGZZdG9zVFIvZU5LNTI2RFNKVjFyaFRHR3ZuWDFqTUM5WVNHNi9DblI2elRRK3lyd25sTTBjeE9RRnRUR3VraFRDR2R6MGJTclNCNXFJR2V4Y3hRRGhrMytRcytLQWN5THBIWEMwSGlBSnZSZGlTSjJMd2I3dDdlMDhzREdyQ2I1MFN2UVNQNTBtK3VFeEJVNjF4L3A0bVFFc2JHK0ZDZEt5REtrOU8vYWRLMnZIVXI5WWdxajRuMHh5b1RzNHBJdUtVOHhMYm1uUjQ0M2Vwa212a1ZwaWV2SGdDaWtHSUVHZHU4WGd6NXBmN1F3UzZIeENzRFlwM2xPeGsxYUZUa3J0RzJkUmI2dHhHUVpqUlljT2YrYlQ5VG5ET1drcldhVmM3UnJLMDNHaW5UQlJENGN6ZjRuQkFjbHRNa0JHV2NzanZPa3I3SEZ5VHI1QVhhbVpJMTRtVG5naVhJakdHbTN5T3oyZHZ3aTRrVHg0a2E3Rmw4VVV2SThrU1RNNUJEeDJIMHBrM05BdEMvZk9mdTVia1M1Mkh3ZGlBR0VKM1ErOTV6Q1VLNDJGeTUreXloRDUrek4ySDQ3UDhkdnloU2VHREx5cTI4QWxPbHI2b3lrQmZwTWZVejg3L3JlcGtaV0hWY0xoaTNYQmRSOXJmUlA3WWVRVlBtU2FiMUFyWHhoL2VTbVR5YVZEZkQ1U01VdGlPeVpVTDRCVCtEbmorT2pNL3oxTmFUUjM0eXBNZWo1VUMwaEZ3L2xlTEZFK3pBdVBocGRNQkhSQzFOa1M4V21rbnBYSmptUkV1Q0JtNlppWDdqOVhwSURlZUk0OCtRNHhuZmRqalQ2K2k5Sm1IVUtwOHgxN1JMS0Q4dDAwcHl3d1BRZUplbXYzZk5PZ2Q4K3NxNVVsdFJvMHJxYzliVlVKeUNyUUNOSnJUUXQ0RG9RVXEzbnQ4WXhkaGZyK3VXcDJRbkUxM1lFdnUxa2FVREcwN096WERjVzBkcno2OEt6dVNTeU1sN0ZKWUpCSXY5eW1XS2lpWFNsZFNSazgvZUczaGoyVEVSUkRnSS9aMUxLc0RxSS8yYVR6Sk9HWUFTamxqZUpENXdDeFB4N2IrVmx5dUp0cFN3c2l6eTROZlp5bFZIRkk3R3oyUVZFUC9YVE9TNGx0S1RFZzZuMVMwZUJZY3NWSmVUUEk5WEpMcEZSeFhKNmhhNGNWa1hLOG5taW9WM054V2FJc0wySVJsVTdTRGE5MFhwOEhnam1FZmZHOFo4RFEveW8wbm1JT25kcXRCMk5ZVjBTTXZPSWRyZHdWWjBxS2QyaEZqNHhVWGpYTUduN2RpYVhHVlJ3VUVtRU96dXN4eHZISUtBZzFWRFliRGV5dStlbnBRdGgrU0ZmRXFPVDlnM0Y2Z0NUUHVTUlF3bi9lYmlYc09sK2V4aDF6VllvYlVrMGxBWGxUZDJOK0RTSFdzemxuakNlRE5IV3hqNXY4c250WE1SY3Y1SmxpbHBuUU1ib3hyUnRnWFhlc2tTSTlrN3pvTW9VU0R6TnFrTmMzTUlHU0k2WXRuV0RFby9LeFZlSjJrN05lTmh3K203eGkwTlJxbDdVWWo1TUg3RFgwbkRuTzVtSzlwNGlFRERoamNhRzNqWmxEOWR5VkhTRXA3SnpUNWorV0hONVZwSGovRzBEa0RLUlF0Nm92YVlXTGtxVzhIVzM1T0QwSm5PaUR5Vm9lbWZZcGtBVEdDTEZPWnRKWXhJUWJ5Nnk3OEZ1aFhGQ21nY1BaczZCdUZOOEUrVXVLUnhqK0c0bGlINkhodkhtREEvWXNOeEZsdktvUDhqazdvdFpUbStjckoxK2VsdVpsU3RuQW8vTUN0dE5HMkNZVkZjMHdEQW1MMVVvcjNiQ3dhS2VLbDVFU2R2V1NYTlJUKy9VOUFUeGdEWlBxMjJPQ1Q2emtDYXpyeVAyZnBLcmlaWDMvZHJiNFY3THlQYzRWODVVeFZ4MHhlMTRURDRlMkZkS1h6TW9PeGZwK3FGcituanZqWnVvQ2d6K3BoSXByYlovWXlsNHg5WkwzR0JkMFZmYThhUzg5NU04Z2NOU2hKNTN1N3RMdGRqejBGNGFFUjRFTnBKd1plSEtGYktnZThUSmgzTit2RmE3eWdaaTVCbll6MnIrV0IyUmV6SmUvTzcyRi95TWJmL3RuenN0ZExGNHdtOWFxcm5iNGZkZU1vNUhEVDNtZEhmVnUzK3h5aTZtUmIwUHVYUzUyQU1hSndSZTM5RFNZK3JTYklvcmQ1Nzcrdk5xMEE5VHZJUVMxME1VbjF3ZHl3bVU1QVZpZmIwR0pHdC9ZaUNPZEN4QjBZSE8zUzlHMnkvU2kxcjVha2JmdjRWbjl0b1FvcFh6Z213ZWZMeFE1QXFVazZpRFNtckhsMWN0MWFMQVRPdXIwVXcwQ2pxL1ppRDlhdHVXNFd6Qk9DWGpONHp4eS8zSFNsMzZaTmpla202QzFXWGVtNHlWenI3M3QwM3NIakpTRW9xMG1sUU5VcWRiZ1VXTWtUb1FwVG5HSzh0MFdEK0NCSGc5UmFDc25UcGxsdC9wWHRlMDZYQ3h6M0VZa3UyWlcwUlRpa0t4U1RWLzI4eFY3S1VRYkhEVnR5WWllT0wvcktLTUNkYkRxTStSUHo5V29palEzMUI2aE1vTlJ3bG8reFBudnpRWGdLUmc5bUQ0R2tpamc2RVRIT2Y0c1hDVGk2ZFhsb0phTXJIaW5ld0d4VXM4eEJaT1lMRCtETXBCNXB4MXpyV1huQ3VTS2lPNHhzdS9YSkx3SWtoUEhYcFUraDYwdjFWUnFNZFdtcFNGcEVtb2xWd0xaRHlhV1RUVFVwd0ZBS0Y0WGd6bHpiM3RmOVl3RGRhSjFTZzk0VEZkcVRKem5nT2VjY1JadFlyUkpxai9Yc3ZMN3J6Q0c5aG5nVmJWK2o0MHEvdWZVRVZ6VGtGVjduT1RLWmU0elh5QVE0bFprS0dmTDNTeTR3QTNNTGt2L0xqVkRXWmE5NkxRSmRhZ1FVNFQ0NGtqMnEzaGdsa0RubDBKejRjR3dNejlkQ1hPRzk1cVRNM1VjZDl6ZnVUS094M3VDMlJZYldDcTdQcjMzZ1ltQVNDSW0yelhJQ09UQ1o3Zk1PTGU4Q293aGRIMWRIYnNIMGpveCtJZXpxTnQ4YWUrdGVkdFBqdDR3bWhUSHl0TE12NXc3bW4reWNacmVFS3dGRExyZS9JMWZ4R2UrUm4wbUNiMnFsVnBaaWpyS0dncmswaEd3RzRGOGRvWmFjbWZMSUdlYXlnQnhtQzJpMmlHRDYvNDE0STF0cjB2Nmc4ZWlCa3U2VDhWUHBkTWhEbkhmUWZYU0t3R2dieDlIOC95S3dWUGdpNDJkanpiRi9lUmcwR2NURTlJTWttQUR3OUJFWTN5RXc0cHVGMWJYRFhsVjRQVHpjdndadlBMSTRiRGUrR3B5WXQvcFZ6TDc4S1BxM2g0MVRRSS9kamxid1hEVzF5R0pNeWcxZ1RlMTgrd0Zxei8ydG0xWXY1Tk1TZ2pwTmR1UlozN1J2NFhvSDM5WnBHTk5ML1lTMmp1eE9vdCtDMDF3cTNxb04wWUdXb25CQ3dndmVDOHNjOVhqNkUycnB2WGxORVFoT3hKVU5HY1lTR2s0RnZSZW5wQmZ6UlRBcDZlTDExZHFDenprTFZoQkRxM1pjZXBubGZvMFRWbDJERXhOZFRMTDhrSm5NNHhtUldyQWlWekYyUnFnQmhhMCtwaVViUGhsd2c4VzcwaVhZd3BzbVFlRzEwNVhpam1EaDllVW44b3RzdmpJbDJNQVpUZ2x0bDlDbzRLVnIvM01CYXd4MzI4UU9peGwreE9EWEFiZG9NUVAvY0cxNzBGNWFINjRqZUpSVFQ3Sm9qaEhjV0IrTFRqQVN4aTB6S0pqR1hXNCsvZmVsaEIwZ2syQVVBQ3pjUlpXMVg4b2ZqRURTVEhtUWRWdEx3MDRZMFVSZDdCSUp1WU5ENERCRjAwZ3BWcWJ2cnFwSzNsM3MrWHVOTUNtV2RJMFVJN0RTb3VOT2l2TmF4Y3ppZWExM1RmRDMxZFN3VVpHQU9lZkdTbnFlTE1lSjRORmFkb2dtcDgvZXpBMVRLeHU1ZGF3OVUwd2pHb1o2RTJRdW5ybWsyQXJzNHc0QkExR0FnMUtlSi9qZUh1dWZ2ODdWMUpmQ2JkTzlVQ21MU0hlNjVQMmNuMDN6dE1ycVZ1MG5GbGxiWm50VjB0bXhyaDlQN1NYckRiN1YxYlYxdXR3Tm1rSEFKa2p5Y1lQc0I0K1FJNjB6dkZLMXFSNjZubXVZMHNpYWtXK040ZjRDY3dHNEVaYTZyaG9aS1VvQ29uTmJFWWQ3eEN4cTZ2WTVqNkcxZ2lyZ3J4Y1Zua0U2Z3NRQ2pTemczSG15UHNhUG1KalQ5bnl2dExvMExLcEJwSU5LNU1NbUhMclpwN1M3cDhjK3JiTi9jaEViNTJ4eUpjckI2bFp4Q1BvR0FhSjQxa0t2UVphZE1BZWNtbk9HeTJWNHBodys1NnA2WkdUMVp0NFk1bUF1NXNZUk4vcTZWZ2JqV0MzdUwrRE13ek84dXlTMkJUdVZTNFY1eG9Fb3NLNmVBV0xwcXRCU0Q5OGd5Q3ZjUVJnbU12ZG1vWG5LeXlNYmRESHJVdGFwVjV4M1R4K2t1K3A1bXhXT0dyTWExeG5KVzFhMzlMM0ZBQ0hZRzY3WUtiRkx1bW5GS1NjWEdDVzNYMmNRbVk2L3ZBTEd2YUdlcGR4TG5weDBwZmVVTG42R2NiMnJaMHpkUHdnY1dnb0JXNnNJUEFZSHluTmVPdmIxYUNzTVVLc3A3aVpha3lIQ2ZOenNKWkhHM3VFVmNYWWcvRGVWTUhWRnpxU05QZmx6UjRCU3NoeXdBaGhGaGtxajBhYjhuN1htc1Y0UThkWVBaa015UFZRNFlaQmNMekdBTmtXakFKQ1BmaWZnZHdGUEVvN0RGY3l1b29Fb3QvSmN0Qytla2VGbTVFOVRjZC9oNnY3d0JtMGRaemlkZ2V0MFZvNlZRaGxUSUN2NXJOR3RJcnE2bEd2b0drRlRTU0IrMVBOSlQ3WGFjRFVJM29qK2dOQW40TlRmc2h2VEdQVWpBenorMlpDeDJjSlIzeGxkNGk4eHU3eTlVK3pidkV1RmRVdlV3RHBtamRMWmNoLzdwMFg0amNzVzRpZVZTVU5DeHJscjliZmorNnpVUG1QQWZOYkJTdHRIQ3VGUVhTUTF3dHVoRFhZaEswdEcrbXpmSUlCZXZkcTFLaUlKdU5HdlVtVEJ0ODlXUzJ4TWE1akRodWZwc21RdlJ3dG1WQmNPTU5WRnlpVnJMQWhnRXRSLzJmb29kUGl4bVFzczJUaDlVdEZ3aWFQK3ZnRzBGSnlZY3FwMVplL2N0K1R1U2xDQVd5TFc2dHl3QjM0UEgvcExsbmZ0L3oxV2pxTHluUTdkb3V2TE1PZnlEYW1KQkh0SVpzNFBHU2ZtZURFbDVyR01laU54ZmFqL2IvdzEvQklma3JJajVoZFZFNFhGdG5pSjJPVlBWRjYyQzNLNFdWZUlueUt1blladjMveWtxWjh0V0RQM0svTmhOWnFRcUV2STduVHJVVTEvSmFBMWV4c2RLZDdtODFCY2pIeW8zU3F5T0NUVWZqNXBTQnhLV0h2OHR5aEJmeUpNV1Z3aXd4T0Fjeitmc3FqN1dpS2hnMjBXV05YWFFKSzlsTGtlN0tYcHE4RkNoaFc1SS9PaGVZeXphNFZrTEpTRjA1NmdjTlFCVlY2dmNaMUFNaDdtME5FOCtlNVBON3VDTXVreituTFdhcWgzbkc3U2x4Q0QvZFpmY0tZaGRMc3g4YXZCb1NPOUcyUEtKVVkzalBXVnp5Y0tEVWluRWpmMHNtcDRybmd1MUpkSDBPaGE4QVF1a2RvU0hjVFBiSm5tMFZJVkd3eEkvOE0wL0RmQnkvSXdvTUwxY01SSWlsUFBNR2lmQUNuQ3hTNTZQNHlYcWREYThZRmZMVVloM2cwemF3bXcyY1d4WjhlZmRkVE5FRXp2MGM4Vm9oNEo1RnJaT1Jkdml0NVZYZ0J6SzRJa1BpRlg2Vjl1bnBPMFB3aEFsL2JCbENkL01QN3hwRWVnODhzOC9NOW4zWmhYeFZxaUgvbGNEdEFaSnR1S0V2enlaMmhwVi9mT2dkN3cyRHJzSUFnVDJvcGR2ZDB1dVk3ekpLYkUyMTA0YWNrQ1RvL3dHbW1KWkdPOGR2R0prNWN1amplRW10aExxT1hwdWNhRE9mVXZBWEcwME95VVkrRnZWVnNVa0w4WTdvUmtHK2ticXFhOFRkQkZDa3BkSTl5WTN3WkkvQ3ludER1MmpYUU5sQTJDWmlnckFhMVpQWTFqZTlhYUtMZ2lMdGZjdXZrYTU5bVI2SHlMOGhOY1BhYlJhVENYR3BQZDhDL0NjYzlVRDJCWDhjMHFyRGRDZEQ4N1JCWFRrRmplejRRM25BYVBUQjZXRkF2dDNIc20vRjBJU2krV0pZQU5pSXFvbEd4OW1qRjlKQWpxVm9rMGh5WVUvcGZPblkxU1FMdy9WUGlWS2w3cWlTUk9LWXZESEllbDdvMndRczlqTys2N2cyc2FyYkxUUDlUa2NzRUFsSGxYNU13TGZES2MyY1huZjVjY0c3TTZ6SWJHZk1uTWxPWjJ4Uk5uYy91WnpXYlFHb1B4KzdwQ0oySG5oV09mYTVKaDhvMG9HTFdyM3lXK2tFTnVEM1NiTDhla0hnM3lWY0wveFQ3K3RLcmh6NHk1VnJTQzdOdWNVL3lWeUk3VzhHQTBUdEYxYi9WUnNtYjc2Q1dlTFBNYi9WQi9kYTFsaVJTOThnbFlIdFdwZ1B0QldsdWZNTzhjd2d4ZW1YaThWZFZzeHJTNnM1VUU4T293SVpnSUNwYW9HT01KamttVllrMEFsMFRSd2RrVmxsc2JkVnFkR1RQd2xOUXNZczdSaHhQOHVOdHlzZUQwTE1pUU9xU01IZUhnN2g0VlphaWpGalJXQUJNTVZPYldGNTRGa1JWMlBrUzczNUhXTlJaZmZEclNXNEVzWmpMN3FBVHhFanpTOG5XR1YzUGhJYjdxYkpHT3I1WE56d1Z3QU5uK3Fhc1krdHloNWh5WUpBZ1VQeFA1ajc3c2lXeUFRRzNSd3NuN0Zvd0FpUHR5VVBkWENUUVR6WHIydHU2REtnYkJvWURzNXlObXFrMW1qbnY5ZFFXOTVnNmp0ZHg0QmZjTEx0YTFsTDlJOVAxa1pTNXJvbTgvbExTSFBxTVp2aWJCRi9SWWsxa3dFYlE1WkZBcUxFN0lwVmx2TDVYR3FkL216ZnFOc01DMlZqWmh6cjIwYWNIZ1hYd2ZJN3ZYa1B4YzJvbjhSTXRmSkVCenN0WVNpclFxOVlrK253T0VjK0JPTFJVOTJlYzJCdDNyZUxzNUNlenJiOXFpbHdjRk5YOE1CRit0d1V4b2hVQkxrY3VIWnlLWnFqNkJMeVJzeXBBVXBTQ1VYRXAvRVE2WlVJdDNBOXRld00xbTc1K0NmSUZ6WVI5VDZDMnc3a3BzcVg2ZWJuNThtS2UvVDF4SCtQcE5ERklnRXZzS05UcDJLL21BZFMxTmk0OExYWXd5cC9yREZhMUFtYTBrOTFIRkk4Q3JWVjVOVURzQW1DR3k1cGpoTWpZNGRZdGdwa3VMMXhHRjVjZnNSR1BaM2psakkyTUNrTHF4QU9XWjU5dm8yRmhJK0RINXRDT1I0NmhJeGF3ZmdIamROTXJTMml6aTN2Y2x1WEN5dmR0QUpHVFc1SGVKc09BUHNrVk5yd3UxeHgyM0VnOHJFeHFqZWRzUHR1VzdTRFk4bG1sT3RBQVdpSDUvT1RSdG9TMS9vM3BTc09VQW1rc3VZbnUwL3E4TGtZWXdIWHBIeXdYQXJCU3lqMmNnRTRkNG5Damswc2NhNzZkOUxzekJMZ01jZHh1cHZTV3ZYVm5mL3RvcklqR3Vpb1VmL0gxMFFoaE8wakVKdUJvc05MSmNVOFMzdVUzUmNYN3BTS3BFR05HVkJlV21zOS9lazF5Y3VXVmlpbDdYN1p6emJMWnk3M3pUSzJkdi9xc0s1eWgrSU9zc29Zb1ZzTnhrZTdPRmtQbWRSdXhWNDFFbUM2OGZjYStNaDZZQzZxMjExOTZ3c2J3dFJ5Z24xTXRtK2VvTFEvUlRzUFpPeE5zZjljV2pBL3B2THhsdXd5V05QUFF3UnBRSHowanZvelpoNzhZZDZ3QzNRNEx5ZC8zMDV3Ymtpb1FzUEVQSUtvVy9FQ1VuV0VIMkNPQ094YzRWWThpZ1FkN2NMMUlySHA3OC9uSDMxTjFDeG5BOTV0TmN0WTB5N2NWdFVXMW1JcW1TV09iNC94KzBhcUNuREVaZVZ0TWN4RzBHbGczeWZrejd5aFkvemtwUnZzVXc2cVNkSmdXdTNmV1c2aUpoQmNmSkFXd1FJY29RVXFKTHZzQUlacTRkUWZYWExqUmhTRm9IR1BTek9CWFljVFpmTGxNU3RvT2NXbWdnVjhRNVJ0UFNVdXdPNzdiREZTcTFqNm5OOWl1OEE1N2RjemdOS254NTRRWlhzUFByTkI5RzFaT25WZ1RmRzZTU0pVMXorU1VwQnFvWTFFL1h6WFQ0Y3V4TnB5eVNvWERlMzFmZWFCZTdKRndaa1dHcmcycytOREdMSW9ESjI1UDN6d1puYkpIWERxSmdMNVRsRXovRlhkRUhxK014SWdYa2tLd1dnQTBEK3RzTmJBdUlDdDRFdTN5R0NlWHZIbnF4K3FFR2dsVUtoMEQ2VTdpdnFNYXF4RW1zSjIyYkl3TGY3cEwwVEd0aWQwd2JtV21vamdQRWtVNFFUdnA2a2V1bmF2RldDVnNhMVpHakg2K1J6dDRIbVQ1NUJCdFFCYzRURy9scHpNUTIrdDVsUHA2WFpBMnhJa1JHVWV0L3UycVk2RWtOS2RxVVZZS1pZVVIxSHVPUkord214Y2taK1BvS2ZKcUNZMS9ON0xhdDVJSmhPWFdvTTJZWGVTbGFwekVrNUFXRXZnTjRsS1FvdWZqV0N0eVQrNmtVYkpXcGttUCtmNGw5VGo4NGd4NGV5N3lHMVR0SXNMd3hjVTVwcTdYdGJjQTNqcVB0K2dPaFA5MDlEaU8rbTcwSTZ4Q29wK0VRY0ZLWHBEdCs0bUg4UjZNZWMyN240NDR4Y0YyYlYxTUlKWUNKWVZDNThiOTIyUnFsU1RzM1Jsb3Z1NUxsTU5TMmxrdmZENktPOXp1b1R2NnBKQ2RtdG4rR0F4elJjUHhDTmhIL3hzYWNlK3hPY2tTSHpoS01ycXJMbytzUEtxL1I0Q1RlaEd6UlVVMHVCTjZBeFEvVVdqQ3liMzZwcUN6aVVyZTU1KzRVZkRhQjdiZUoxN0UzOTlGT25UTVRzNnlqOUorbDZZT0d3VXQwRHd4MjNKbnJ2T3V5WllQK0tjQ2tta3VkMnpXZFlzRGFNUXlZUFNHbm94NEhvQ3JseXlndTVyUW1TcWRXRG1UTHd0Z1Z2a21pQ2tZMm5SZjFjZGxYcnVxSXRPV04rdHA4T2c4aHF0NU1xT0t0VkJ3UjR1RXFLcVRwZm80WkFFREE4eXNmR01WbnkwWWtOVUEwMnpHRkZNMWV0ZCs1dmVqUVhodmhBbzhQaHBVUGFjWHZJSFBOTTArRTkxWTlUbXJHZkphc1FyNnpseHc1bDJLaWkzenpRa1dtRyt4SE14Y3dVSFZrRWJRU0JQWlpaMHJHdDJ2M25WOGNteUpEZ0M4V0lOQjNoNFFHcmlPNi8xNC9aclNHUTJCdVpidDJKTVNMZWJlS0FERHRYcVFNZUxWOS9tem5oUHZPZXAxWnRYaVRoR01oLzhReDA4NlNpdVByT1NybFpKalMzNG02MFBMU2VINnJDYWwxTFMzNzRWUWVmZjZrZ1FqaktBWFREM2tBRDYyZi9nMGU0YXZSZjlma09GbUtqT3FpL0Z3QnlNNXdpZVhjaWwxL3c1S0lLUHNWZHFCc1FJNHdLams2ck4zUUFUUk9VNG9wNFcrTVJnMVkxcnZuZGhwZWFleGtXWkF0eXduM0t0b0ZlanNYdzR0dHF3djc2Z1pieVpQWDhFc1V4WXNuYmQ0UXY3SVVuUUlPekJKTk5aVlhENm1JZ1UxeFZkUGU5ZEg4dUs5dndPRnRsTElXSXlOcFdZQVVJSThRNnE2TXhGQ0hTdFcwNGlUQXJwb1dZc05KVUpnQVF0UnF0bjJUdkIzSE0zamNMTTdJMDk4Q1lNenB1SWFsd1JlemRIWUw0ZXBtV0RPVkdzU1FzNitKemhCemJ2YjVmY3RncnhFRlQ0VExLbE0wb3A5YXVVd0F4czgvcVFxSE41Vmk4K2o3YnhNUGs5dVB0b3FJY2c4L3Q4dk1JaG1QbVlmRlVmeVpOOHVPSWMrcDJrdE9Ib0t5T3RjY1VXRGtmbGI4NWZPa2NKcmZIblhKT0hPb0E0eHRnaVZNRG5IT0JOQ0o5bG4wVlZFTWFhY2xmZTcvQXhUWHdTSDBzQk45K2hvdFJYeU9IVWlUbWJpTSs3RGhxNkNOd3h3a3gvY1hUODZKOWZFU0Zxa0xXemlvRHp5VnE1OWsxcXZCamVGS1JQU3BJRDdFQm1rYjczRHBZSWhXUW5rdEpjc2pUZy9tYWs1Y1RSSXc1WHVTMFh6NmdSZXBBWDQ1ckNzM2NaUUQ0THZ2T0hNNkl0UllqU00zMDNyWSs5Yy9UOU0zYXNaeGl4dVZPdWJBS04wM1R4ZEQrcVNEOHQ5ajNLMWxocldoUGgzL3VNRkNxekRDZ0RsOUFNRWRuTS80alRZQlREWFp5UFpNemtpcXN3OG9PN05GOWZLR2JuN2FqZTNKcitmc1lZeW5YSElkc0JkV0NBK3k4RENxY3NnUktjaWZGSXg4OVhodms2Y0xJNWY5UzdOOFVkU2VkSXZuMFhMUksrNjc5T0ZQQzZmbzhzMVpNS1dreVo0em5jdWFSS0V1dEtOc0lEMWszS0xCRncvczdqZklwV2VBQ3FuWkFnZVBUS0dDMW5RZzN6WEtXZTZEV0hkWTlBTUM1dkRZSm9xR0Z2SHBBRTJYUVRMMVloVndnbXVEVHhzNFkwS1dkYSsxV24vT2tORFhoQXdxS282NDhHa2lXRG5nYkpBRU40NlEybHYyZXdQclhMRlRtazlLbFNVQXNKMDZ0MkN2WlFzcnl3dFRRUkZ5QXVYeTNSOG83R2UraVRJTERNNkFOV1BRVUtTWEtZalVKZ0RNbnBuVTd6NnpteXRoL2lIckIvbzZ2T0VVcmxuWkNNc01abXF2VE1GVUFrNmdIM3ZtdlFjUVlsR3lhYld4bGhLbWF1QkdtcG5ZNDJaL3lMTlZLTS90bys4emd5WjNMZDlTU1d1ZW5yeXIreWJ2dGUxdlBsK1l1QmxKMGZrdEtkNTJTNVF2bXhxK0FIRmVUdnBKTTlFS2ZMbkVxUzFEZlU4MFl0cnZPNk5RcS82aHBtNXhUTVcwUW9NRTJKaE5EdmhKa0dHMHdvTDB2czdYOVFKemNlWUxnWmtxRy8xN1NmWHR4VGkxQXVmME5hNGc5dWx6eFNMZGZqdTJPcTdKalMrWGVCWHpTSEtUbGJ6NzdJcEV0UVYwTHA3Z0s3NW02NEVYdUxTbW41M2dXOTNlSngxZm15S0tjdm5nU2NXMXczdytld2hodmJSR2NiNi9SWE50RkFLS0NoVlNrRE4vR1lrQjBObFljYzFYRkR1MTRXVGE4RUppRmVCeVcxV0JhQ3N1RjR5UlZ3RmUybGdYR2NLRmR6RnBINDExVEdyNzZTbVYxSUVBeENNK2lSK1QrMUo2UGFwbXloWDJDVldwaVhFb2FDSENhNnpIaUhQUEFnY1oyUmFOaFZEcFA4Y1hReUhUUHRaNGNEOUVtanJFY1RyRUxyNkttK1ZjYjRoOTQvOWhBNmJMT1k3N1FxNDRSZzJHL3g0WGprcWxsT3lXSG1raytwR2R2ZmljczkxSE1yU0pIQWRrd0ZLZjBYZVFLREJxcFQ2YkduTlZ5RFRmK0NUY2Z5VGNrTjMzRExxcUQ0dU5SczFJV0dUUllxSkxjbjIrMkJrVUhiQ3pueHNtYUNVQVA2MVdvenFyOWs2VDBPdVhFMUZuVUtwS2JPSHBjWTUxZm52Ty96OGdUZ0FWSVpjZXBhS2xKaFl1dGp1NmhrbVA2TEM0a09uSmxvTFlUKytzenFoYVF1Sk1rcHhkcldOcnFzaSswTFQ4bXlhKzRmTXM3N1c3alY2RzEzbEY1aXlzL1VIQTlQTllScS9CMFJBL2lDVU5MNTlZQkxINjhoOXVjSzlJaWlVQkkxZmdzTGJVaTQxUmRmYU9jZnppYWZNRk5FVjBTNE9taXVoZ2RnZjVJU2txK1JEbFRqVURDQ0wyc2V1N1BHcWVYNzQyTjc5NHpqeHBaK1poR1JxUmhvYXJPSWRXMDFTbmR1QVZINzVGcUdXVXBXWEFwa2tQcXNLeXA0Ymh2MUtQWGE5djJxSjdIaHFiRTdCM3NpS0EvVjhKMkRnQUpsZXVmNDhxZDRsTjYrRnJBME5qOGVNdHJKTG81REJYOUVxYVhCTWNQODRBL0xzTkZ6eU9pb0RWN3FTMk5KWlUwekhIakVQZWFOSVp3U3hSdDMyclNCbGNtM1pIdjhHWGdZNUZSVFFua1ppcWd3enI0WUxlQmFEeTNQbHZlR1RnT1gzMUN5OVJYVmZlSEdYN21HTTJxeHBhcGFBN3Q4SXB2NVZMMFJTdThuNUJmQ29ESDlDdUZad2twQnpoaHVMQ2NZUGpCeVdOWUc3bHJUV1cyVmlBemxwcVFMRjFkaHUyUnN4MFFmL2gvZHVaNVZMQ2Qxb2dhM0dNM0ZIRUNiYjIrT3NzYmw5V21aZGJvdTROV2orbG5KRHNHNkg0MGNtdjZxUk56bTI3azVQVElWZ2kxU1VZTWdBbE5CNFViR1FybEJnb0Z1enREV1lYcWNWVVQ1Q3puY0RQcmF0OE1Dd0lsMk1Ec0ZERmJsZzA5NHo0U1VRTXppdVJYMGgwOHpIcmp2TGdmbkd6NHJQTUREYmlUekU2Q3dXQTJLeGEzZEZyMTRXNXNjOWo1OW5UNUdhWUZIeVIzMWtNQlV5TVBCVldhV0NuWEVlZytLOThQM3hiSmpTcVNzM1lsbFJSaFVmOEhmMVVvNTVoQ3E3cmJURWI0ZERzRmI4Sy9pRmFpdXRPclZMZDErOU96R0xvNm4wN1l0NTFPcmo1ZUFldEVGOEtqZGlTRThySk9HRkh0TDgvUEhxeXdRNUtNR0RwRmJvMjNXUDY2WkVISXdabmc0c2F5ME1NelRmcm1ma09IYkRsb1JhVHRZdGdxankxNG4yNGtTaXhYZmtHd2VSWDJiWTV4VFZPWUw0VlV3c05GanhZTVRvZEcvdGdIMU9UQjFTd2szRFNYam9weHRmV0dqei8xZkF2WW9DOU10ZWZqZC9sTDVsdXNVaHJ2MS9WbGpoWTdpMlFPdzdZdVhDd1ExRms1cW4xNERZcG8xYjFUa0l2STBsTGNiVzZKV00rRkxFUGtyaGZVZjlxRkhkS3JtdWRCMFBZNGVpUFYrMk5ka0x1dDdNciswMlBvcVB3SUdTQVpncFlpZXBVWHhzdkhSU0RkZEdveW5hUDFhR2JUZSs3MWt0RTN3d2xkREZ5SWtXQlpFQldCUmhMTzJ4THJTNDZmZG4xTzFBdWd3dGlJMXdGTG1ibVlTb3VxZWkreUo3bmFxREtnNnlFMFpxWEppYUpaaDg0S1ZqZ21yYUE5SERzem9UQndiNGloNFBXeTVyV0o3eUl3a3UvSHJxYTR0cG5BWjVscUdrMW5FSWtkQXJGVGk3TFJnTC9GK2M1VVp4dS9ldm5uNFVSdGtZY2tsVmRaM2ZMS1owekVnVi94SzFCajhYcjB5a1dwdkhOcC9PWHk5RnV3ZHhtb2t4c3Y5ZTkwNHZFeWtQUU1FT0R6T2J0a2tETGx3Y2ZiU0VlcXFmb1crbUZVSElhdG5STFVBSkQvc0NCSTN2ZithWXY1WGpsVWsvUG5qN0ZhY1FSNUNMZFlsc1loL1YyVjUwejBSV3d1SW9nakY4ekxVWk5EOUpRUThXSmtodXpQY005bWEvTUtiUzZvTll2WDBzU0ZIL0llYnN1a1MyaGVaSE14SGlDNkZ0UmlRUy9tYURVUkNMMGpMQjc5WXF4dm5NTGYzcHFIeXpVa3o0Sll6blhOb0w3ZjVRdkFvYjJVbVY3ZTlyMWFmNlgyMndMNmFINkJGT3ZOUFpIUWFBdWVVYzdSdDlWeEIyalcwakI5TmZQakdqR3owSEFCdklpc0t0cThNSllmQWNsSUJLTjVpeDFINGJibGR4NnFodC9Dc2hJdUlGWEZsWnRxZnMwOHduVWRkMzVZbHNoQ3ZUNktBcVRzWEpncEkwdVQ1azFkY0J4a0Z6TWlhbGJVWWFJU28yZzVEWTVPN2tkTUpkWXVQaXVtSzRpR2VsMUMxU0dxeFRtaVNIdGh5bjdJc0o1YVZOMjdZNE44SkRiN0NDVCtVQ0c2RW5iWmswVXh6aWhwaVZiV25KbU9mMnNMVGxIUTM5VWVyekhrKzFheDgyUXYwUUlOKzIza2JxSVdXWXY4SmpGRkprcndaT3IwWGhFWENUM3I2RnNDWUhVOTFwdVZIbkpCNFhBUXZPZlljdU4weXUzREpBODRJUDRqRFh2MnV6RjY3WVF1aHVFYUlvVlYrRWtCaHRHazVzZlZWN0pZNGdQWE8zSkY5c3JSMFdtVTdGMkxoTjQyVG5sRkRkVGNrR29YSlN4RXV2SEdKRkN5QmkzK1YxYWVBQmhQRS9Wbzc2VVpsZ2lhaUd5ampQSTcyM0xYWlc2QkU1NmcvcUFlZ3NESFM2RmlRQjdrdXRVM0FpNVlISElTV0I5QlBiUUUwYXNVZEd3QkJ0MDlXbS9KZEY2dnp6dTJwUlpPbXVIRGczYUZXQXR4TThUN1pLaWlpc1NSdlpSYlR4T0N4TmYwZTdHUEpRU2pQT0RtU3BzYmhSbE5IdjQzNEVHcUc0M1VGSWpabExVUi92TjIrbUk5RVF0K0NRaTgvQ2xBMnZrdzZjUzJPc3FxTlJ5ejB4OHJCOGdrY3ZuOTg4WGIzaENUVGZwSmI5bGFTVzJNby9JOHJTOWJaVTdOa2NZL1htaWkzcFUyb0xuUFdYWmhKa25CMzR0cWtSUS9QeFdTVzdXU21hQWVKN0o2VnBxbmxhdWpyUlZSemRLOXcyL1ZuZGo2M3huZlhFZWIyZ3Nwb3lHWVZaV2wzTTh2OUVCS2ZZUGRuY3BNTlUvd1BMc25yUzE1VWNlRGZ2TzU1bFI4NmNHVUQxZVRhSEZCSXhPYmlNeWU2dmtqd3NISXl6bVovZlBxNldwT2pZZk5Ec0VDeWFsMTk2dWxQUVM5RXMwSmw3b25LSDZRdm1maUhpWkNWZDl5b0xHa3JiODE5SnIzVEhzOUV5UDZhdTZYbXZlRm10SkgvUEwxM0hwNURkTlgwdFJ6aTNZTXJmVzJ2TUVRYnBhYm1WUVdvRkdBeUYxZWdGMFJrRitqNGtzdWNGL0dHQ0JNb2NVTm5ldVdNY1ViYytGWnM3Rm9OUXN4VzNYVDEyMUJoOURtMkNwdHBSU1lmWlF4WWN4MFJIREx2VEhiMWZCU2NVZE03TGJLU0ZUMkpiZVMzZGtPNlBnQ1B4MEJ4RG1EcXZmZTVNbTVjKzlqV2pZOXpSWS8xOW1OUkY2SmRDSFlKd2lNL2UwU1NoZCtQdDhYWVRqZXhRSGVrd1hzcXhKaENxdG9Fand4cWVLRFN0RHAvbjI3VThVeEErQkhZeGRFejE2bEloVXZCeHNYU0JDT0lLLzJqaVFOdHFQcjZTaW4yWitramh1OGo2aW9UaUNGOVdhaWVxMk9WUWM1cHlMRWovRUFCZDdrQWRJWFZzRVdybVhEeEJNOVZTaEYrZ2JiNGh0Nm1lVUJ5d2I3STRMQzNOSFQ0MXZKb1VKRElaSUxRMFdBTTJTaVJ5WDZId3NzZDc2U1V3c0dIMmgzbzdhMUhEWk4xdE1pb2NzTmRtYnVHK1NocUVLWkRYNGcxMzRicEpUYUlaY0l4c1FjQnlvbGdNc3k3TzcwWmZZQU1RQkpicGU2aEJJOHJFcjJLOXp0bm1SeDBVVUNCWmdKdmFVSXgzWFdJL0pNRWlWdXF2UUNlSU5EeFFtN1B5SVQzZzZ6SnJST3ljVWlzUjFxRXgyeVpFNktmNENOaWpRZHNHVis1VjZRclRVWTRLNlNIMmc5VDdqTTlYUW5qU1Z6VDRFdFB4M292N1UvZmg0allOend1VU5zTHBBRnBmMVZlT2lEUTlPQTM1VWh3T0JPdGFtVFpuZHAxWWZXaERzMmxoRk1NUmVXZGU3UFZrU2w4dk1vcnNQcDBOYTJhdEVielV1a0d4bUlVd0FGU0pVUTVFYy9na1pHUG9FQTByV2RMS1NRb0p3OXBneFowd1MrU3AxQ21wOUkzbzU5aWJ3Yzl5amJueGVJenFhV0REU0x4TU9UU2ltbThaR25vcUpiWk80U241ZzZJVEwrbVNidlE4NkxkMUZkZWVvZlhYa29tNlNGcEEycmd1WDdRQVlXNzdITU1WTWtGMGZ0L1hKRVdqNmk1NWw2MDBTNGpjOXdsZmlaTkFCU014NkhtbjdsSU5tZDBvNDhXUWNBcFkxRmNLU21tQ2FHZ3RxN0toRlpSYkJGN1MzVzNsQzRTcEF5blVqUFBnaFY1U0ZjUW9KTGk0NllMRnlud01RckpNVGNmNEVSWFEvMFVTalJ5ZDNQR3RmYzdGNFI1azM0dGxsMUlmM1BNeFA0Yy9zTXN5SVFHZkduWmtOTFJ3ZjBxQzdsV0t0SnpmNzFlWWJ5dHBSaUpaK1BVL1pEdG1ETlZQTy9qeEZEbDZXVm9ZMC9ad2I2NnMwQzF5RHBzODA3dGR4dnZYYnZuYmhxa3VBZkFOa0c4K2RmeHdBNitYV2VaSWZzODdIbHJkM0MycktJN05lRTErQWZldkRQVVhBMERJQjBuZktwWER5WkM3YThSUVNFcUxqZjhvQ3FQUzJpalhBVHEzaUI5OUNGanhVcCs1cUh0ZjJnTUdCanFiN2pLQ1hCT2VVY2N6TlIrUzBPdXVpU3NaYWowS1VUZ2dGdjdLZFRoRUxyWHRZZldGV2lwNTJ6Ly9GazU3dXUrOVRITDBKWmRReEx0alZpaXZESi9hYUIvNnZKZTV5Qzc0NUZoc2xJS0V5MEVBUjdHL2Q2N2F0bU5KWUlHRGVzSXZhNFhFellpazhBL2MyVGVFbTRwQTBsdUdPelpuTjFaL0pzU0x5SDZvYlZobkdjTmVtMUFUVlgwd0V6SytDektlcHlPZkNHcFdDV0FIWkRuRkh3MzZObUFnZGFwYncybTVscFR2MmQ4SWpPVDZYczVNZk5LK3pyajR5NG03TWk5ditiTVo0NUJIRFJubHNKaHRjUlZFVEZRbUhFRmhMdlhOTllhTWs0anZITGowUFNDWUNVTVZpWkEweUJMS2hnVEhxa3F3N2JOWi9DdHErWjlGMDBGbUlacjBmTk5pa1BiSURrZUNEYVRTL2JETXFLWVFnUG9uUWczQm9lSFpyNHNGamZTN1VHSUN0cXVhd3ArMTg0US8rNEJKWkJpTSttVFkwdkNlbFYrOXdrY1NJTnNCMUdDNmlXUWM2Wm5Ra0o4SWlIZDY3UDcvZGY0bVVmeXkvWnNyS1ZSNThlNjZGandmUFViVWRiWjFJaWVsUnhpZGRFYjFHazdhcXVMZEJLNzV0RTRJSzczaWZtbXRsc3RxUElKcmZtcnVvSk5mRndqS2dhOFRqd2liT1V3cjJIUk5uVlZ2S0dpb3Rldnhhc3JZU0QwSVM0NExzWThWK0JCckNYZDM2UkpwQzNGZkpEWjVPNE5Bd0k3U2NtQ0M0ejlJck0vZWN0RTBHdkRsK08vRW1OYU4yOWF1bVJZdXdZQVF3VlFPc1AzemNPMFFpVGFadFROUUJHdjRYQUNaREhMZFJibnZRb0RCdHpOVmhsdlBuSWZ3ek5UMGFXbmJ5Mi9uQ2d0ODZMeGMxR3VaUVZWa2pyWFFKdm4vV3lvTGdjd3hWeXRGNVovSWtjcnEwbXdzRUMvTGxINFpsTlBqVWpuaFMwL0xnNnZzRW4xbWg5azRENnRlN0lFVnY4eVJONWF4bSs3SlJLK1BGRDZrR1prWFdBcEhYN0tFb0t4cHlGOGY0czZxajhnT08raUhpcEExTU9aL2NYblk1VEJCYTYxL09rQXlXNTJYQXd4Tml3ODJub2twVWFGTDlEd241T2JBZW1SQzM5NWVmZlh6NVBjeGdySlVsL29rbE45ZlhIdEd6RFVMRVJta3NhZXNnWW9yazZCbkVpNHlCMW5GTXFGeDlBVnQ3dHhvbnVLNFN1NEVnYTJaZkEvOVZvY2JLL0JLTlJYRjAzdzlXaVpheFJtZ3pXbE5xSWhLNXh6QVcxWFdLdXpzUXVucDYvVitCUzZRQ3pJMjlGN3Y2SDdzWFJyVy9PK2dpcmlHUGdSK01OQldDZFNSVThuUFIzK1hFdjR3dENEVjBmVEdweHVIWjF0N2hKelNKSWdiblNQTzhXWmx6YzlsMXBpRnl2UlI1SFpMek5GOXdzWXRENDJucDF2SlNnakh3U3hTZy9VK1BxR21qSlh3cFM1Y2dGUE5PT253YTl2OUhxbU01V3RwUWphSnVVYkZ3dmVQSnB2WFRtQjIrMW81aWpPd0djLzhWSko5cjZyRVpoNHJzRkxpaGxNY04zOTZuTXphcEZib3padnUvektQK0VzMlVhcmNRVG1EbjNEM2FTS01HWGVXcTBkZU9OMUoxa1d0MWFXRis0R3VFbFduWHV4Y3NOOWI1QmhaWkV0ekVDakVWZ0ZMdm9Hc1hqUnNpTXNxNlBGZVJVY0Y4aWRTOHU5WWRaUnJMSnhLaWRUV21SUVk4NWgxZXNzdS9UYmVxTUQ3anpLL2tzTHNNS3JRRXRBeWthNVB4YlR3RllBb1o1RWRXZVdEN25tVUFveG92VFlweWRYYmZxUWJGM0ExdnRCYkkvelY1VU4vdHRtTjM4dlBIb3ZkdlEwYjl5NzJEWDRiS3VMMHN2TllPbXhraW1mcGdIeEJlRGV6bC84aFMvZEZkcVN1cUdNTGhEYVE5T29Ob3djdWVBVGd2Q0lBRjlRbkNTbWE0UVFEWkRiY2U5TGdMVE40ZW1USmlKOGtEQ3hxQjZrM3k5NHhvUGxmSlJ6SFNCWitVeFhkT3lkbUdZZGV6RytXZGkvUlBVdTJibEN2TUp6ZUs3WFJCcW9JbGVQTmcxeGFkTDJGSWlHSnp4anFJdmtKdGlFbVpwU2tPdWtPZkF2ZUM0WTZQQ0VacmFpSE1WL1RSZ1JsRGMycm5UenZtWEJabC9LZ0NBNFhYN2xBS3NVWVI4bVc4UzNScFB5V3RFSU1QRGZNWjlXU2dkZFA3RUFGME93YUdjZ2ZvSVJ1bEU0OHdKdlhSZkY0Y0dwUHhXcS9hQ25HdmxzeTAzMUpLQTdYb2IyMDNLMmFlVWlrbXFOZUo4QThOUjdhTEtnc2VkSENZQm5CUEFFR0IwQUN1TGtxKzdRUUNvNER0RkRlNVJBeVdoOUcyeW44eEZ5dzk1RXBDcDR6RmMvbStlYUE5QkU3OGVYbzB2UTlhZ0hSbjN0OE1iRmZCUVpXT1RNNWpJdmw2bUZIUHIydEQ3c0Q5OSttTjhoS2NKVGViTlF3eTYvYWRMcnRCREswV01aV2ZZdUp2SmFDOWRLNmRGdWVMV2pjTU1FTWYyV1o1OHZqRU5xRFNLc01wYWVnYWNSVGQ4dHNXc001T1hLUkZIR3NwWXdWTjlKaEpIOFV1bzkrODVGeEZDV01oVGdaTG9KaG8yU2ZZczhlQ3ovemNWRnBKNFNDdUlGZXh2NlBlT29MVjIrdHh6bjNYWDgyR3hzZmovODdMbU9iZmNZOVFKa0tXcisxS3dBZ3diTHMxTmVLNFk0eEVIb3BXS2wrT0VOUFB3czBpdWdwSmNSaHVjZ2pzV25WV2tYQUJhNWZxUHFtT0xMNi9sZVpVSHRNNmx6SGk1TnI2d01pU292S3pkS3l0cFNnWTVHdmFLeDR6UnpUMStqdnZ6SVBiZCtMVW84WUdDR0dHUGhqYXJFdkZONU9GK2taSHEvd2Q5MHl1Z3hOdmdMNFVDK29XdjhOQVRrZW9qem96czVMRHZFWWNuZlhlZ2JmVzNCRUt3NjJmUHhjcGVRZ1MrY3ZLMDdmQ3hDanh2a3VoRXB2SGVkZnFOZ3RpR1hnTFVhandhUmhvbkh2RDdMbDF0TVlqUUdPdGcwdzQ2blJHbVJhRE15bFNTRmdsQ2VZUytZTkV1ejNac0x2dlRNczVNdHNvaFJvNGlscE9GSkh2cTlkY2pYbXZ3c2RPek5ZUlJJVndJcUNVN1AwRnNyaVp0SzF2c1YySWRhSmpNNnRheDFkc0ZUenY1cG5HWk1WNnpLSTg1WVR3K1lYOGVMRWxFSnhRM0k5YVplTmxqdGc0dmpJcmFYOWdEa3RKTXVnY1dkZUl0RXQ3alNRMFl2YUswQVBGSGZvbVhhNWlJRUQvRFpUKzluMzR3RGhTS3J2eUhERFhiVmVLTkdVcEdUb1EyTk1qTmxnZ3BjcDExRWsxWXg2Qzk2MTdyODcvcEpadG5SZzBTTmZZeG9LZU1JWjQxa0pPakFxOXBvWEc5am5WdEJveGY5LzRYSkx0VVR2TEhQdnhHT3Zwc0dkdVZuMEFNQWdVMXg2aTlmWHN1em9CWjRleEozcFd3MktmWU4zcVpqYk80M1ljN1RnN1Nvalh1TWJrYjRabkJIdFZVNjU5YnZDdFVqZ0xPRkFZbWtHTExidnVBZzBJNWo1ZjdyRU1odnZ4cWpkRkhZeUtwdHk5djFyeXpIbklLRjVsUmJsTTRkNjA5RTNNUWJ5Q2tiK2ZiWkxvN3pxYU5lWVBGWW9PT3N1dGhvaEJETEFwRUI5ZmJhZGQxNWgrK0hER2c3aVE5RlFFMGlmRlYxZVNQNUV6TUpVTWlzdndnR3ZMOTVuZUdiTDdxWDd3Uk94VzVtM3djSzNwdE5OZGZHZmpUTHpUN21JQ3RYcHFBMjF5eTAwcm10Yjh3blgvUWhTYk1BeEEra3VqOTFveHNpdU5rV0l1OFJscHk0bDZCSjFYVGlSdndHdms4aUZpRHIxd1l4MDVTQTlES3MzeXB3OXprYi9jOURVUnFvcGN1dTZUMmNTYTVqbEcxQW9iNFQwMi9XQm5uYWRML0JVc2hOTWNBZHhxNGhiWktRRXNEaDV0a3hURldUWkZKYnpYazVkZi85U05lOWsvVkhPQWFEM2E1UmFqcjJ4bkpHUmtoZnBEZW1pRnZ5SDJmRHJPT3J6eUU3T3YzUTZobTRJS3VKcHdVckxuMVF3cWQ3Q0FSdk1ySnA5QldMZHZhSGYvVkN5OTZxUlNhUTkxL3dUQ1ZzNkR5bFpJUXN1NkI0U2RwbGMyTjVUc3NxRGtGa1hONVFkUWZiZTN6R1Z1MnR1Q0h1T1FXeHhhMVpxNTNnWWI5VDJ0ck8zdWFuZEhmUE5oYlN0VlVjUlRwQnNTcXpnTGRrdjJEZUVyTjhBQzRiK1VDSkJmQVB0Sk5GV2M1YXNQMVk3NVZjVXBqcTZoMVlFc0ZhSHZZZGFoQ2Vnd1VYS05VR1NUUmRPb2NhRVhwdDA0b2xJZnRYVG0rYjFsRHU3SENrOWU1clhqVHY0LzA1MWJ5V3NISkxoOE9NcWxoL0QyZzVxUWxLemJIc0wrRmJhUElsczVlLzJLb2pFY1lNb1pDKzA1eHN0cUtjd0hLYlRQOWN4NjJHZTN1VURaT3o2Q0tUYmM0RWJqVU10bkRCUnIvUXVIM3pyb3JWWUdVckN3WnhsMnlDdFE1enpTOEpROTNZUkZCT0FpOXZTaHJpVGJQODlRUS9jRUd2QmtGL1h3ZkNuNitDNnRnRzdWTzJIQmphaDZaVEJaTSs1L2RuUTk1QUZ2NEs2cHN5OVFwMFgwQkF1amkvNjV4bGdWWEZ4QVFxUlNaNjdONlBBVmdpdUJDU2RxamlwVnpRaTVVcmUyZnpEcklMQlYvNDhFOTYvaFNZOWp2UVQxdmxZY0ZvUkQxTUJSRmJJRm55M1M2S3Fic3kyVFZTb29jMEZtT1lOSkU5SzEzNmwxdUYzQnhoamFJOS9paUF0NFdEMWlFZHhDa1Z6cEdlYVp0UmNLNFhmcEdCYldhNkNKRHYxVWp1TmhUTy9TWTlSd25FTTVaK0JyZy8xeVRaOHpMN09Oc1dheGEvbUVpVC9VbkVlNmloQmpBVEZFYmY3Qzl3SjhnSjZSb3F2ektnTFA3MHIyd1FDdUE3cGo4NnhpNTYxTitNekJxN0ZmeDdpUWhHcmJnTXdrbzVROTdCOGl4eVJkbnBiYmY4NW5JWkZTM3dQRzFBU1pPYlhFcmJwWC9uRVNmNjZwZGRhdFhmU0RqMjRCSm8xRmNSazcySjlEK0lnK0dsemNkcEozSytmVkxLUnZLaUgyZnA5ZG5ZU3laQUN3U3RtUzhXNXJJWnptWlJUb29nZkYydUtjbzgyS1pZTjZFUVB0QkY3OXZGR01NT3FOSEhUSjNqSVBEeUpLM2VqVDRXcnF3Y1FoZjVxTEFlanh5cFJNdU96emcrUi8zVWpaTUxsWU5idUZwQW9DWFVvdUJOVlA0bm1RVlpTUkJzN0JyTXNLTXp0cWFaYUVNM1dVSTE5MjRqMG1NN0tzaWNaaVBMVzBmazF4cTFlU0sxbHF3RHpGN3RtT2V1K2VrTVFwTFhiWXlpc29JdHpLSXBybG0zTy94N0JTL01xQXRDZnV4cWJpVlQ5aXdUTFcxUlE4SGFiWFgrTkoraWp5T21pb1Rqb09JbExZZ2U2MFhPM21KNVRibTFTdGRRdFN3Qk1rclpJOHFGeERZRXRGSlAzR05SeDZlK0haOFI4d3QzYm0xYUlIR0xOanFzamtKemZyOW9ObktkWnZxdkRaTWRaZEQwR1dSM2NOeE1oM0pBNzdnQWQ1Vmw5NmhlbXFiTHBiSHNlM1RRenZuOVZRUHdsYldDZGxKdTJacFZxSFl3QTY2TjlEZE1KelBGbE1TdTFQVmxTRVpTT0VST0hRcmgrZWo2U2pCeGpDbW1oL2lEbjdjSFMwekNJK0NDUlhnWURIMkEreHJvNXFWQVZyMW1iRWM1S2d0ci9VcHBXSDVsM0R4cm5NbEhsc2l6SUtZcmg3eWZsL3BZWGU0dCtGQUpLMHNSNzNHUEdseHRNaDRpTUFnTHBFcFVmeDNtZFNVQjRqNjJlTDVUV0E3VUhkOStUck5tQWxNTGI4ZE4wSjN6ZmU4NDY2S0psc05veFBsdDg3MlBRU1hQM1phQUtDcHNpZzRYRXNJdHRkMStrNEY1RW44ZTZBUnVVVU1DUmFFY3pNOThVNmRGeWVvQmZFWnBOY0VTOEJrQ0l6b3FNRDdwL1lpcGFkdXJGaEcxNEh4eG1VbE1rOFJrUlB1TkVwWitMMjZTK1hRd2ZBNEoyVTBweXN3M3htOG5IZDJ4L25JZUNMNTFwakplVDltNUFnMTlESytpOTZXTy9LbXNxMnh1WWV0K01RSmRuN1ZRUm11Qjl4T0Uvcll3Rkp1V3RUUkVnYmJjdnlXVXBXNlo1UlNxZC9PR1o3V1IrbUkyVTV4SlZlSDJKYk84RU9iTnB0UkYyNHRqWVV3eVBpck41OHVQZWZZa2ZUN2ZJWStIZko0anRGNE9Ec2hmTEwxelM2elBSUHdoZzZrNFNLQy9VbmdINXVjWXpjTE8waDNpUlFJNzJjRGRsd0dNckZ3QjhUTk55akpERkVtbmw5WFJkbnVXT2kwYTc1b2dRSUlGN1hleDN0U0tUZWNtR2owVERNaGpXQkJIOUdPazh6UzZ6K3JCUlFRMVh1NlJ6SW5heWdmckI5TlEzd01FdUNsVWFpTi9ralFraVJEeGducEN6a1hpdHVFL2lXVVR5QmJEdUhTdm5JSElybG8wT2NFVVB4UWtON05HMWY3dGFZMEJ0bnpTNy9DaXIzd0ZQUkNPR0NiMzg2bWlqcGsxcG4wRzk5b0N0eFAxUGpsa2RTNnh4NDhJWVRQSm84OXppV2k0VTQxU3lUQlNDTTc3L2RRd0NwdDAwaEVQOFQ1Nmw3aURjK3QzRWRSMndUUFpUdmRCWEpJeXJwbDVCNW0xcm5qRktEeTFQaTdIcEczTndueGRhcWhISlpyK0NweTJlM0tERVJ1ci9lQ0dQdkFYSHZ5QW83Tyt5OHlsYTRZeklleWNaUG9HWG9TeGdQNkZ3dWtGN1NacmUxYlM1VjdnOEt1aWNwRTNzSWZhZ2JZSi9CcmxQMStkNEJJdlZ6N2QxdmErOWRhU1BFY2VvTWpUT01Da09Xd0NISURYUlpXL1dkOEV3cGR6cTk1cG5KaGR6MFpoWnlGcmlaU0VzVUxKUFduV3hQM2NlaGk2RDFnQ1R6RkpvdlBpRHBsbVZ6L2Rna2lEVmlXV1k0WHovRnFLdGNnQ3BtTnp5bStweHRzTWcrSUNvTm9UMjFjWVR2YXROZ2VmZkMvMGhPY1l1SWFyMzRZYUZ5V2lJTG1PSGFIVDNwcHpjTVhHcEp6Y1JNQzkySmZHcHJoSmgxbGM4dXRUNjkrYmtYRDFtc0Z3VDdtRmQvUSsyZ2ZpZldTbGNXTkxlbyt3eVN1cFV4dDZpNHIyTlNEWVdHWDNxVnQ3eStJRXRQWExiblZjTXBhdUZGMW9YTXZ2Qmg1S1NHUUdab3Z0QmRzUGNab3VnZm5VOFBWdi9QSUcwUnRscXZ2TXZQYm9PcXBEZlJZUGZLTjh1S3VOek5UUERkZmdwbVhsaW1NTEpkcUtERDVrOWF1Z2VxUGlld2QxTG40dlE1VmIvWXNsQ2VvSmp5M2VCT2tNSDRHcEhVc2dmTElZTjIycUM1VVlRNjhtanIyK1RBam5FamFUbzhYaTBYMnJnTHlEUFhKNkYrUHhxWDRnUDVUaDYrS1NSa1RqdDNpaUVXUm81YVBocm1EcWJHUis5Z1M4Z3RubHVVeUZZczBZeTUrYmUvbCtoQTZOWm5sY3djWWFDeWxXY21LMTBmQ3lzNEVlN2Z6M3lIelVQYzNzUm1MNVc4MzRTdnI2dUU4aDZZWkljZE5DQTdiY3N3YndFcmpib09abzRoZXByQjkvZ3p1bXZrMTJacVd5VGE4Y05IZVlodVdXNUdSNVFqM25DbFAxMEJNeTFOV214RUhOOC9JTUVOMkhBeHVHOThiOHFmbTNabnBsL0JuZUlaeDdYYUxPTndwMmF3TTNtUUNPdXlQZVArZEdmUWZvcGZmazkvTlZHQ0F2NXBJU3pXZ0hpYVRyNEduVXVTTmR6Y1d5SCtOUE5DYlI0dkcwRDVHNDZxSzhPWEc1dGZiUFVmcElHS0sxRksxK3ZiOXlHWkRmRUl6azNLVlpOWVJPaWEvb0JMT05RREsyNC8wVGZlMHU0dy9sMGw1V2lpTlVyUGxpL2U3SmYwQXhKUjJNQk1YckZNcDg1bnEzRUFnRlo1MzlCWEdVTGtMYTFRc3RjRDc4YnBsQ1NkQm1SeXJEL1N4UVZKTUpxMGJvRjVSbUVCck1GN0RHUmNiTzhacDlMbDNSQmlIeTg4S0VnVDkvdDAyM1c5TzBMNk5NMXBNeFd3VVN3MnN2ZGdjbVUrQW10R1B4S3ZkVnRjeDFHMlIwS2JVaHprbGNIZnZTSXZia1ltcTlYZFFWMVdOT2ZDRVU1Vmx1N0gvTjFxREo4SXRhL3NOSlgvcFNUenhvSWtMMHdIV3VmYUIxZFRUbnNCalFva0JjVlUyT3MwU3NnbW9GVnlJZUlxckpYVWxYL0d0UWIxdHBNVVE5ajVobmJVS0Q4bThCQ2M4akREcS9VM1hpSTk5VFkxMWxFYXErUjJwMit0OFVDRTZTZktkWUZhbjhvd3RndlJzOWtjRkdIbXJXVi9Xd3RxaEQxY3lxTW1DS2hTNmZtT3VCbkNFeS9ZRkI5RUVFcDZuZmpuM3Z3OXNPVTREUEJsRUNSWlNWZkFqV0lUK04wQmNpZ29renNKc21DdVB0MExZUFVwWWRmV3dJcENoU2ZvbFZEYm0yTDVRa1cyMmYxRFYwMklvT3R6cHViTFpHLzBPT0xENmxJT2pwWG1qLzZpV0xTeDFQeWdCNUNFS285aSsvU0lia2F6VGhOeDZaNWQ1b2d2UTFjUlZPZFlIMmI4RXRJM2R2WXpXSEdyM0Zpb3FjdE4rUTVUWkZicDh2TnN4eko1UURUeDVzUXFOMVlOOW9XUjlYV3VXUTRXMk9XaFI0UEtjblVuZkM2NXZtY3h5SmdMRXRXYjZrUXhOK0xYZTZ2SXBxdUVLVVpJR1ZRdVRuSk8ycWxNaXFoZXliN2RZNDduTlBUVzFRUTBTTGVwRnZGN0g4ZlBsSzhYQ21DVFdlQk01ZUREbi9MMXZwVVNhbWRFLzhVRVVhV2lzdHZYZExxSXR3Y3QrS09YY2NyWkZUL0hYZExNWnJBN1gyMmRmOXk3czB3QlpORnBOcEVabEh0VUxnUUV1b05reTh4YkNLT0Y5Z0lSdTRVbGw5RlVmRDduc3lTT2RxYUpQT1U2VGN6SVpTT0NlOHpWSjVwbldGbWk5MVp1b2k3VmRzZXFoOXVaNjZ6b0xuNmdCVUgrYTRXS0dHaVZYZ25CUVRwUHhiWjB1WElxTWtGS2lkTERqcktZMm1HL0NXV1hrT21BUDQ5dWcrYnd4OUtBdjhsTi83NzRUUmlYMWZDUFpzcXZPUVhuaDNxMVFnWmhIbVNBN3AzanpNU2d6ZnhkZDFKTURFRlJyZVh0V1AxeEYvUCtObXl5Tm1oc1hsSE5TMVBWV3RuZzhLam1TazNiWG5yZGthR0tqa3FUMUVSL2FBb05IWjlQb2RxSE5yem5jdkVOK2s0MGtOWnY4WTVjRmo0Q3ArK2NVYzdLQTRYbTZGWmp2RlBTemJDVlNlcDU2M3pwOG9iQ3Y2cklscnp2eEZVNWFXbVZKaER6RnBXUlM1aURoSUhVa1oxL3dRM2JrSnVDR2kzZkF3UHh6UnBXS3dQd2ZneW93VTJyaGFXRE9sSmF2SHZkT0pibUw3L05UbXo2blpzN0tOalNJR1dEQUI5TXUwTExpblYxYmJWRlhBQnJxQmtreU10TVZ3SDRKZHhDdU9lT2ZFL2pZc1RPRzRaRktZNFl4SmdnNjlaeTMzNzNxTm1kQzRORm9PQlJ2OXRMREtKUlZaMFVQNElGb3FaeUxrZ2FaOElUNWk2dzVuSXdVMXJGdmNTaEhlWktLTk9Cc3JIbW1ad0lTUktXV1FzWXFMVytmdkRZVEFEQ0I3N0gvb001a0h0ZVlUTzE4cnY1c21pSkZPZnAyUWhubG9LOXV5RVpuem9TZ0JZZjRNRXRUK1h6VmkwWU9uZ2ovYSt0VzdDU1c4TUhBVCtrTmRxRVJOK1JiWFNENkk2SzI4K1l2TWRmZUJFVFFuMmJwaEZrL0NrMDZUd1QrQ0l2ZjhRa2poTEZaZkZESG1GOTE5U2d2VHdONnhzdDlEUDBMTk9WZFE1VzJLcUxNb296MUNjU0c5d2xVdUoxcWJUTkhZRmtHTGVYQkRQZUIzanNhS2NDMW12Z1RqamcyTTNZNUlObkwrUzMvZE1QSXVmeGhScUVMRTZpVENYZ2xKTVpUdnpaYy96cVpwenZnU3JGUWcvR1Bka1V4c3dpeGk1OTc3bjRyK3dZWlBPeGVDSEI5VENnalk4SkxUbXBXaEx4ZHRmcFdCYTVLOWRTejZjOTJNVVRod0QvQTNpVjd4VW5xTDBlaWF3eEExVzdIZVJGWngzUzZ0V3MyZnFoUEgrdmFEanJzZ285c2Z5WGhLZnpsdmlBb1BoK1lqWFpTbTJKZU0rTUFJVS9VdGcwSitMZHhoZnhTZ2tvSjNKUEI5d2RlN3k3K2hKY2xnN2hKNjVLOVVhdzRPcEVET3lWWkF5OUdXVm1ITi9qVVh1K2ZRU3hhdVpVOGQrN2Zxd0RhTlFHNzZiZzNhVEdVTGI1Nnd6QTIzUllvYjZoNlRGYU5aK0JtVEFtK1RjWk9BMVNVNEgzU1dvMkcwbk10SGtGaXZWYStxdThVUU9FV1o4RDdHQ0t5emNZTG9ueUpTYk5BbWRrK0REN0RXTURYNzA4WE8zQlhsM2Y4R084aVhxd29Mci9Da01MMml1MFpVZUhzQ2hOSWZJUndYRlluRlRGSzU0Z3NZWC9kR2lIbzRsTHVNeGVDdTNZTkdvOFdpYUhOV3l2aFZjaVdvanVxYVowNmg2M1Foam13c3lkZmhFRGxkdWtKOFZnYXA3VmVVdjJBSVI3NjlseVFVQ2hkMnZ3WElreTYvTDArTU5GQWdydml2QlV6TWYyUE9pU01mdHV4TG93dndPLzFBcFo0bGx6c0s5dzRqMmRDWUZWRmkxVzFKMHBUYUJHNDdLK0lGTUZ5TTkremd1dVhHK0JBempVRFBsV29NejlDYTF0blY5RjFRVjVhd1B5ZEluSEdZNDdSbEFzSDlZT1haeEl5Mk5qdUFmZnI4Y2RHWFlkNGFJVFJqSXpSMEFxRjB3TUVxYmNSMDg5bXExSGVMYVhyT3ROREJkYlFFZ3FXTnpoV3JSNkxzRW1UTXlJN3orbkMyTFFFV3l0NzhTbVRsZ1A2VjFEOGYzbUJxcHJOYis0d004S01RV2U1aDV2NnJxS2JFai8wN21nZkhWNnI4NnpoOUYrRmE0aXZ2QllvdFY0STVsZktNTzgwQlJUN2dCb3FRbEU0T3RYOG54dXNyQlUxcGFDZms3SEowc2xlZ2V1UmtoNW0xckduL2FvSmlVelNKU3lzcjY3MFNJUWY0VWdKdEl6L0JOK0pkVWdYODExcTVtTUdRUlM3Wk45M1V4c0dEMUZ4bXJDSFNNYW11bUh6WGROVmViNzh2RU5UazhQN3dSZjV5Q0ZZclNRQ0NVQWZnNGJGMWFIWGJLeWFPdHZ2VDFLdmNBYUtHM0pzVjM4dEFMelYyRlRWOTRFS0c5YmcwU1Z1bGFvcHhFWmxKamN2VjdqK0U0YUxFSUtacVJRMG1CNGs0SVU2b2NhbDd1VVJnMi9oWDRpY2J5U3lVNjU1RUtjdmFubHN5Q3hCSVc0NWczZ2FFaUsxL21wSjdnb0gycC9nUFpMQUlVSVlQMGk0Ym5Rb2h6bUQ5a2VKK04zSExqblU5WDMzQ2d4ZnRhVmtRVjFXNVZHTEtOSVQvUk5rUXlwb0FOUFJvN1NnWjBDdkJraDA5S295MzNxVm1yV0UrWEFHSGtrYzZVNzdnL085bEhKZjJpZ2pjYjVjb3pyYVgvUlMwTlNwaHhWWFh0M0dJdmpvNjhaQmZlYWVuNjFHMDA4Yk9xY1cvZFJKZ0c5S01hMzcwS2JhenA3SDYwTHloMGorVWllVitHbklwQkVPcEJqVVhucDNsK1kvOWN5U3JLYVpOckdtTVR4dVZCSDh5T1ZSZCtXSnFJTWNFWjVXckEvYVB0SFFQaVppanFqWFNMQXF4Y3JDZTFDcFZoZVZGZWdKeGVBK29Yek1iN0IxdHJwS2RDVHpZNTZxNVlIeGRpcWQyVHZqbWZEYzV1dkhtK2gyK1JqeC9lNzhuVEV4YmY4RHhwRGFhMElwQWJmRnlnTjZhSDVvaDZxQ2R4MWpMRWsybEF0WnF4d3dyRk9lUG1La2ZTWGNUdnJyMjhKKys3bkRFd1drVUljTkUzYVVaRHNWbW1Cb1JlYis0WEprcVdFR1NmMThJSDJob1BVazJ5WnA1RUUrUXltV2drTEpBaXJZRlgyTmwrcjd4NEVXMytOTmpybFI5RVlqbEk0d0RTMlA1OXBuZDA4eFdlczBoZlc0NndMN28wdXMxQzlrZ3VqMFM4SklWenoydVlIRnV1cnFaRnd2ZG40dndJanVXUG9YNGMyWHZlRG5qWFp6VkxSZmpGb0xSZjRSYlJEcXRON01yOE1hSUxBOCt0QVZ4UHl2SXVpMnZ4eVJ4UWZXSUprQmhMZWdiWUxtS1IwcUV4dDdVcUVJcldxN0c2Kzk3L0FoYWpHeEdlejlGSkVtSkdJeG5UQTZkcmZkMkg3RHZ1cmg5bWdGdHRXYWN1VW5MWHhGVkhOdVpaMHRoaHV0NDcyRU9hSzFFUm5RYjV3ZUdvNjA1MksrQVJzbkRYOVNUVzRyOWtuY0dlbUxIQ01DNjlPYStsY1JLTm0vMUJhWXFaWFVzaDJTM011dzFMeXlYdU1PVGpnd3hmMHQ5UVM2TEFlRXJJaEpEN2pidXIyeU94Q1NYME9NOHpxOEgvVThEWS9LekhMd3ZxREZMYlBicUNoLzlJd0hJRnlOVk0rRDNnc0p0M1JNbnZleHkrWGp6Y2YyNDc2Mlp1MnJqZnczaE0rRys0ZEdWNVhwbmlpM25iWkZkUTJvUXBIQXpoN0lBOGM2VmF5MXZWY09IOTh1MzV4TlNDRGRoT3JFNFNwS05iOXAwK2NDY0FTaDMxNGtPeFNDQ2FrdHB1SlhETk5Sems1VGZtK1pUeU9yN2lpc2h4c0Q3eVdaRFl5ZTQwRjdsNWV1SU5kY0NhOTRFWnBkVU1jbDBrNlozay9VKzlQOTh4S2VRTVRPeVVVUHZKZjRpcy9WMVE0NDhkZ0tWbTJuM0NJVlF2L2ZYbzBUcUVtTmk4akRtRTdxZ0ZoMzdPaUtLMFpBTFBZaXZNVnJucThLNlVtZGdhb3MrSVJHS1ByMk9Gby84clkvOS8xTVRxdXAzTkF0V2Z2Z1k5S2RZSXlrbXVLTXVUL3RqVFZsVnZERWM2bC9vN2Z1a0VMNVFsOUFmRlBsb2YwWk5oRXBTcUZEZGs1akszRGZnUGpnQXlMVFNvR0lNMm5uajVpb0M2RXV3OXNvSU9iNkVrcTd1ZW51a2dpclFiZ3hZcU1XKzB4L2Rnc1cxamNLQUJvaTRzV2VlbUhOc0ZMcFdvZENTKzJqbE5jbWJTV3pXUzJsK1JhU2RJdS90VmhOenV2R3JzS0RROVRUTzRTSXkveXRjYzhYb25UUk9ZMnNHdzV1Wmp2eitZN0lKL1NoRk9ZVTBYd1MxR2NSMlQrQm9zc3MwN2NUd1ZDUjJLOTNkbVVnTlIybm13NkFNaG1Kc2Q3ZDFaelZmeEsxUEZwamVSTW9sTjdLSC9HaEtHajVpVW54aEREenVuSjlZblovYW9QK2ZBNDR4WWRPYTlzeVZSMGRGQ1IrZ2pFcXBRbDg5c3U4WFJtcS9DYnZaMk5HbzROYUp0U015dnFQY1lQdVNjc0RIZU9nOTZZRGFOMUpqSGtkK0prR1dUamR0WWE2azlYMjdLV1BZWDNnSEJaVFkzWWU5RWFNRWlna1lLZTZ6K2lMSlpOdXNWWlA5VVNBVWpac3JJNDhDUkhjUCs1UUcxZVNzSmowYWtFMnpZMFRkRHJ6MGFxSnZDeGRuTExQUWNUdkJVaU02eXdzMW9GRld0OU9ucjQ5ZDRBZFJpdlJGYnAwVGhIdURzTUlVV0pkQkczTEZpTjFXWE1kQVp0dmluRjNraC8zd1F4TWk3TEtDblVhNjNaM2cxWVRRWTluY0JLRFIyTGxodVNBQWxORHF5d2tQRmZ4OEtTM1Rmem1Tc1VkR0h3T1B6dktRWXp1Qlk4SEdBd2NWNEdLaEVqNWFYS0tTZ0pjZ21WRU1KM1pUbmthbkNXN3VpR2lpd0wrZklEZkpKZEZBYWM5TTJ1Qlk3WnJjbjJkK2k1ZHN3YkZlRFhFN0hOMHQ3TUxLNXNBOG5UNzZHUkZIbnpaY2MxWDlnVGNWdExyUEtlRC82Vk8xbVdhNGhjQ3o1OEMyV2lNQ09zU3pSSlN6S2FJaVVCdmlubG00dXZ4ejNwUmpnUElkNC8yVzQrZ2NuNWtJRC9mYnVETFQ0WG9XTDFXck55bTZjcS94ZjZ0TG41d3poR2xzTGp2UHpieDh5WmJlOW0vM2o2UHB0cDNLbGhoZVNVaEVhNzdRejlCT00ydGovZzJaNktqVSsrWm44WW9WcXNwVnVxcmgvbEx0NmdoSkpZMHI4dkZwbTVzb09uL29vS0pLU1pWcS81ZE9nNGhQSkttSnpiTThNOHhRbENGWVBSTldYdENiVVR5TzBHVmxONkFLQk9FaFVuS1ByempVMU9PbUtxVFpaNXgzTnNoRFI2YkhFNFpSck9ITkkzWDhYOGtOWndVSFR0bnkzMU92dkp5U2pCZ0Q2SXVBdThiejdEcWUyTG5ub1lBMC96dG0za29Wd0ZFZEZ6V0VOMEtSSE1yTkt4SWMweXNRNGgxRDVreTNPSFlCbE5rYWltMHFjbTh4UTdOZE8vdThEK2FSK01aenFyQVhnTUZ1WHJzZTBPSkNnZFJFSTIwY3gwbzZPUXA1WDJsM2pZZG5ybnlYbFQyWkJMR2lCVnB2b0pQMzFkNEhsMXN1NDB3L3R6a0tyZ1RsYXRPcXdXaVA2Wm0wRzgvQnRKWG44WFMvSUs2TUdtQnBhSzdRREpqNG41emlyMFU5aW1lTXNvNi9ZVjk4MldGaHY2a3JGQmpiMzFjR1pSZWRQVUJ0TVZqREdwQ3NveGFEcjZXeGtKcWJCY1BpL0dWTnhPVEhRV3BiNm5VWHR5UzA2emhtZmFDQXc2NUIrNjVlL2lkd0ltWkZJWkYzV0tQRjdzQ240dXoyL0NWVzNHZnVjZWtCVHFWVEJoUmVDSldaMG5SNzNJTkJCZjRsRmFFVEpVYkZFTkVtOS8zUFJESTNLc3E5dks0bk0rMm1HcHUxUk5nWTEzamFhQzJvU2J2SEhJSnN4ekFxcUdBR0dGT21IVUEwTjNaVWJjcCttTUJrZTZqRFZ4NzhDb3dPMngzR2kwWUM2YzdZVVhPYzBwNEhreG1WanBOSmhqUVcvVkpwZElPMjdVYVJkeTZKZG5hRklTT1QyRll4NVYzc3FGaU5YRENQUXRvNGhSV1UrQmVIenVHZVVYd29qZVRCa0lycTMwVHVjcXl4bE15TXhwZlBuYnhNL2IyUnVTK2dxdHMyOXJHWjdCV0FUNGV4bzJza3FKVGlZTEpVckdnVmtoU2JMaXRIK25HVmVwMU1kRlFlNzg2a296andFSTlENTZhUFUyZHJtcnB1d2tWRHhFbm9OL2JZWXA2ejRUeTlJT2VpNEFHSDg0YmIzNXJ3TEtmaWRQQ0kvUTM3aWxabXQwRHI0QkdzTlJiTmRDWDdSU1hEYTdkU0o5UFB0NmZyNFJWaGh5SzJQTU9wbEZtanVzd2lUMWJmMm5ieGFQUU5FTkk2dmVXMW5nNGZKZ3QwcElSc05PUGNQZ0dkQTBML2x4TTRqQldYWTBkc0p2WUdYd0thdDNmOGhraHIzM3NWM0M4dEVxUnVnY0ZrZ1NiR1ZrRlJhWjhIb3p0VUpNNWFqVzk4cHIwU21Eb1ZMTWs0MXhYOUhvbWQ2UGZaTnZhRzBpTE9JYVlrdVJpS2ZSbnFxaUpITllyd2ttUk9IZENnTll3STBXcURQRVl3Tmo5YndRTXhQREpUM21ZQ3o0Nm5FbmNOQ2d1T1JlSWMvWkJLekNKT1h5Y0t6c1c1S3VHbnZnZ2NzcG9jREdLRHRKQTZVYVhHaFZxUnN4Z3NadnRZRlA2bUtiVStTcExaQnN1eWtEVEVYNVNqclBOeGdKN0JUNUVkTUNyWFBqYllEa1ZteE95cWtNSEl5TkJGY1BSYXVjZGV4VDR2QWp0bHpscGlZdmJacmQxMHhlRkVoU0UrQlJOeXN4WFB5Z2wvMkViUjdSaEtxT0N0UWxxQVd3dEJGeml6d2xRdmM3bkgzVjZKdld4NnpDaDB0M0lBeW14R3lXdVovZ3lFeVRxWjVmVE9KRjZVZWtjYnI3SWJseVVYSkhEbFJmT3F1c3haWVgvSzViM0FLRmFBUGRaQ0dJSFBSZGd4TURYMGEzUmt3Z1B1VHFzZFlKOWd4U1E5aVJqSlE4UkFwVnJRSGRFUW9KUWtCYitJUlZ0MVhXRDV6bjlwOG5xc1dVd0RLZ1JIVXJyS2g3MHBVU1M2S0FDNnF5VHRIVEV0aVZwY2dmNU40ZFZnWXZzbDlhWkVVUURjcmNSV0V0bGgzaFI3YXhTM1prd1p5eUl1MWpQNHc4YktzdHdJM3ZuNkI5N0dTOUxHa1M2UWJXdkNRZkhYVFpxZWRhY0VTN1p1S05Va1BxekFRYnA0dzlzSzBTS21vYnQ4S1hFSGJHVVJ5Z3VzajF2eXYyZDFWTk1aWlNhemEyWUhyNi9wdSthclYwSG5pU3FObVRJb1hFd1RSajErclBCUjRVYUZDcVVWUFVHNmdESERsVVY4YWRmbVVVSGdoVE8vOXlnUTE2R3BKZ05ZSWd6UDI1WGJ5UFpLc09KQ2VvRGEwbU1tcjVIVW1kZERnMVJONENzb0hsQTJUby94emRmSXF6eE5obXg5Q1NQNk0veGdiMHJWUTRjSHJZbmFiSFdiWVpNcEF0NDhmN2JubUNnTDBXQmhjOElCRFlHZ3ZUVVM2d1FMYmhSOUY1cStsU3ZZZkQyY2ViMjZZS09HbUtTWTgxOTNNa1AzYTFuT2NqcityZTNBQ1MxekMydzYxNXNUT0Z5ZWhQMDQ0alVBMEt6Y1EwTmZkVTNraFhELzVHQkdyU1NsRmRpcjNteVFBbU1SSnY0V0dUWG1vMWpSbVdTWk9hNUNyRzl5Ynk1Mnptc2czOGJNczhCREx6cE8vOVhIWlh6akpQbFNTYTdlYk95TVZqMDhpK1FzTU5TZ1p3SmtnSGdJQ0VTTmJpRjlTeUdWZ2FCbEIvYlhseXZUSStJVjgxcUVUdDdCQWdPcHA3TFRXRkN3UkVZdlJDS2V5N0NGalMwMjRiRmU4WHp0QnBVMVNXSWVXN3FOa2dDNEZCdHB3ZG1iaE5kVVlMZlpVRy9TWUI5LzBnYTZjTkdTMGJoV3IwWDhOWDdqZTJwK0ZhYmhScVpVQkZnVnY1anI1Sk1WQ202bjhnajY2anVUcXBHcUtGdnFudnhpQ0JOdG1vbVMveUJDOGFUMTJFWW83bjF3cmdvalNnYXlKY1M4eS90MU52dm5BYUtOTXdaZFk1ZUJuc29JRU4xN21JTVJsZXo3YWIzTHdtV3RObmJrbmVPc0E0V3AyMmpHdUF6eFB5dzdSVmd0b0NBQTlDekdNaGNISFRDUXBEa3NjaEthVHRjeWcyUTJoT2VvYmEvODRNTFNnRldIYldHc0MvT202RFRQWTNBRHpiOElJM0xZN3FVYk9Hc0kwaktML2lIckswVzVoN1FzMCtuYnNFbmVXUWorSHVPTEZqSHF1YjJxSG1hMHJoNGU2SWwwZCtCNGNvV1dTNkIzbEpzOFArVVBRWFNrRHVXS3labGw5eEFlODhTY3lwS0FwaVUyRFpWT2VhLzhUd2l1NFNYZmxDOXJVL20wN21mUy95MTN2dzBxQzVUTVpKMzFmTDhWQnBkWUczU0JXR0VBUUNUVGhORkRnTEhSaFNsbzFVWnNSU0VjSG1IU2U3MmZkei8xaGs0UTNISGwwcWppK3FGWGFBLzdTR2w5OHhpbnhQcG5RT2JldUViU3VycjlRczdISU9lL0hiWWhrMGMraE9Cc3cxVk1RMTRzclJnRzVETTRRbWtJS1g2enRhbnlYbEp4aUs2SnJwdWI0d0JwUEZBdDFxWE1UanF5aE5wZjVVK05ocy83K0FUeGhvbTNrWjlxa2JRZzUzMnZ4MmRUUW9sMlZMbTcyL3ZuSC9vRTZLdlZWcWttcjRSYVZkVCtndERsVXdILzNoRkI4dGxzem02RG1Oa1ZsNE1aa3lJZXhZandxbk5wMVQ3WTJpdGUralBXWkJuN1lmaFowT3F4K3pONndENkl5ZVF1b1Nvb3ZreXBIOXNDRlR6REZjSytMWHFGL1MzMGV4NlkrY1pEMXRSWEZNSWplajVDTmR4dEdhL1d2OHRYVU55bWhxemltWmpTQ0N4Uy9NZDExYUJZdDRVblhDSEFSb1NqTFREUXJTTnQvcWpwbkpqVGZkQklsMk1FNzZBT0VQL29zQ0dTMG5RVGRhWTNKTXp0OUo2M3VYbnVMOVRkdHVtNTdvUDhESzRKcW8yQkxxOHIrOWVLeUJVR0dvaHg4NzJicXJ1c2VnSThONjIyTWdSbStyYWlEQ3ZpbTRzait0MG05eW1aaVZwMnI3Tk5xZGdiYmU4ZU1pS29UQVcrajhJbVF0bnV5a0hucThTZDVrV2wvWHExVjRnOXhSR1N5SEJGa1dYU3oxblNsRVJsSGhIbXZTV1hiemhxZm93SVhHU2ljMEI1cUt0aHdKZ3BwUEhuYlZvQVhoNDcyY0FmTXEraXZKMGk4TythNFZZUW1sbSs4dFloUGsxc1pDU3BuayswRDN3aDA4QkZHRFEyUHY5eUZQb0w5bDdKU3VSZjgrTkFGT2lrNmZxMmRTZTFHcGJKWU51YkdTTTJjcVo5T2V5WUUzSDF5VFBrdkRzRzRjNWtqMms4cHM5UmtCRHptUjliMnN4UFpmbzVYVlZ0ZWNtQjdvME9UdzByUDdNNElxN1pXQnZ4YnlEOWJueHY1Z2tFQys2emJWeVlQMGFVUlRyL1lQWmE1KzdEQSt1YUVleWtrQU85dzJMVjFCQ3BhMWcyVEQ1TENkOEl2VmQrOXA0c3VkanVwdE1EZGZvYVBsdTB2Z0xNUkpkYmd3K0ZYNTAwczFKMWFTU0FQQ01QYTJtL3RwUW5xeHNvbk9wSnQyM3I3cXdFcEt2eFJaL3BBa1NMbGZKZUExdFhiSi93a0hFU3R4MWE1NUFpL0NNbHBGZkQrR2NvQWFxSkx2WVU4bStwVThyQ1ZPcjUzNzVlUVN1ZFc0S3NZOEVYdlRWaUdoOE9QL3Q1YThRRmZLelZZaUYwcVUyaDNCTGZTUEd2Wk9HcUpLNzRSSlI1MmRRRXoxdCswNnp0OU9EcVpVNnZKWWFjMW1sdzE5Tms0dDFpZlBnc1B0Ylg2M3FUbzNYMzJublh3cEY2WFFqRHppMUJUOExGSWRvd0ZGVDBsTGdyOGxBZjNzZWtmTi9UQ1dteWJUWHBVcm5CY09SOEhWOENlVDZYdSs5ME9GMDVLYkRDdXAvQVBKL3BMaGl0aEFDeldjckVlL3RENmQxbWtsclI2b2NkK1dBaG9UNm9FV3BkcFJHOVYybGtMSVhPMXdTOVhJWDVPTHVmclY5bFRwWXA4NG15cjc4OFBFeHdCWjZBalNvVTJXaDFTczltUm1ob0N3b0RSYS9hRXFRVDhTTDVaRysxUFk4OU9BR1U3bWxiaGtuejJ1dG5sZ1MwWFM0ek5BRS9kdEtXOHJuRHRWaHRSOGNFSkdnbUJUNTFwcGx4blhnbS8rdzJiTW4vaEsrOWhWS0N0d0Q4SmwxcFdQV3pnSDl6MkQ3ME5iQ2ZEaTVvK0dxaUpzd3VjazdXQXFrY1Vub1FTbmZPNm1WSnIxeFdZOFpzNnE4MFFDSzJoT0JqN2VUeWtnVGcyd1VyOWhaSHE2QW9KZ3NSNFNDYk94ZFlMVi9DcjdKRWtpRGd1ZUIxdjQ5UGJQcU1yUWpKaytzK24wMjA4Ti9LbTFUN1pDbzBTK09kUlY3bDNSb2ZYM3puandyQmFtSkIxUnM1RGxvblp1WDk5aEMxcVNpdnFHV1h3c1oyOEhmTmhVOVdpRk1RajhieExRd1ptRk91UkRmQk5yWnpyUzdZWkttREVoOVVXUjNiWFBmUm5zYnptZlNrQldYWElGMkwwRmZjN1RvdkVQYXJVbEFYZlViaE4vamFZYldzOXNjV3B4MUtPb1Mvd3NBUFRDeHlIbEU0OXQ2YmVhcXBJbHB6Rkdqa1pETFo5SnZtSlJWUnBQbmxHS1VWMm8zZzNDNXJYdFFzRG9iYTVSSit2QTlMZW8rUy9sUG9YTHJBdDBLM0dBRmwxZHJxay91NmdBVUQ2WGRZMVFzeFZUSjJSNjRGRXF1bXJEQVA2Q1kxS3NCd09IRnUxMkZOKzdSMEY5d3gzK202aVNCODdVd1Rwekk1OE5JbzhrRHRkRFRHdWNwTDZGSjZQb0xyMkdvR3lHOFFrbnp0elRJSUFHVjNiL01FLzFDaUZqcXVsbm1ScytRczdLTTE3d3h1YUxNUkJIL1hBV2k3blBuSlNkMjFNNkhyVzE3QmlKME0xMWFlcXRFN1FJYk9jUW1QRUs3MEdYNW5OOWRSRFg2WVF4bzZwUHZKc29IdXc4OUNHY1FMSFUrdHlvQWFpNFpVTFR1Qm5Ic2tWOVo2ZDFPQ3c1Nkg0YjZuMng5enJUTTJLUm9ETlZtY0JNSUY5dVFFQWEvemJtcnJwQUtncU1LS0lxWnpKK2dlendKRmJxaC9jUWg3REk3dG05UG5wRmZqMXMvcEt4VEtKbjVDcU9RbTFsSkhDaDI0bFpONHFOcFFmSUh2aTlmYy9TSXp3d2dUcTVVMnJOa0ViYUVyOG9DMUprQ0hkWWhMYjAwQ2dpamlUYjRKaUdLVVZmQm5HRmRmZFlobzZFdDZiQUpwMWRDQlZLaGpSNVRVMnBBWldoZkk1VkZta05UQm1TN2ZBeGtwSXpYMm5UdDRDS2dHd241T09aVDcrbzAxbGRBREhSQ2xFQUlETGgraS92cUlJa1N4ZGt3eFozRlZRK1NUNkIwRldlaVk0bzhocWRVZW5NdWVKV29ROThvZFVLQmJUSlF3aWxjeDM2L0krUjJrbTRKNDYvZE9GVjkrYXZUdUVIaVRSSVdvZjJJNWdLSDBXVEh4YTNuVFNvMndCclRqeDJpc1NsS0FyYnJFT3p5VlhNL003RkJhemhWalRURlFibkxtbXlUQk1tQVFxTXhaRk9NUnpKOGtyMG9EM0FteGMrRzVmREplVXBMZGtkQnhSVXdPZ29tbmhIcVgxVlNtVU1ZZ0d0dGVDY2RqNk5lTWFGOThHOFIzdVYwRWlWcnBMaEt6SE5jdmJNV2Nmd2pFQWx4WG03ZjZ4RG04ZGZ3RCtZL3JVUVlBN2wyNmxNYzFEVmNSeGtvRXorVHN2SXNORUNzQzZXMTVadGprMEZ0cHpmVW4rNXBMa0JBeDI4N3ZXdzkzV0FiUVNyK1pSeXIyVlJnYlJwMnc5dnNFMGoyWDYxTWZjV1lUSmptVlVhWFVYOEhpR0R3K2VrQWNEcUhucStleXVHUU05RmNPUjl3aHdOVXFEbm00U0s5UHhzYWkxcXVjQk9LUFFSRVJaVTBPbzNFTStqdWlUMVFtakxIUUs3TGdxaGhlQWZrVkovWjhzbldib3g2aE9WWjg4Kyt2Qmo1SVdHWUZKOHZKL0tjdEFmSnRNWmJEdVVZbDkyZHJ0VXUxekZndVdMMms4Y0oxd0x1WVBKSk01Z2pLRXJDcmRxUzFJTmRxSHhqRmhLOVc0NE55Z3QyRG5Zek5IZExZYWlJSzNvQ1JxbThaeXZMcnV6MVFHRGZhT1dSN0IzTWFzcEYwR0ZiNHFncmxBSHZhQ2xNeEpINWR1TE4yUEtPN1RwTnNPTmRsRHNUSkErRGJobUluR2hjQnlzdmtLd3U2ZXA1ME9BWUY3QVZUZE91N0xUaStCc0x5VVdtVlczWjgzY3U5SnJEMlptNHhwTzQyTm41UmRVTzdWcHN0T3h3dWZxUVNRUXRHMktpTVN0bXhpN1JLUnpGald2V3FGNmpXMVFMNEk1Ti9vamI4eENWd0VPc3lzV1NqdUdxVU1oZlZtdVdCNE5iTHBpNFYxYytIQTJBdHBnMXlZcmgxeHUrbGhDQVJnN0hBMFBtczY1T09TUTl2QjdySVZNWlFlZmNSTjhjTk5FM3JyTVl5OVc4VmdKQklPU2hBc3hpQmxReEhkMElHL0t4SzNzeEFsUVpnOHNmNXZKbVU1aFJQZVVFV0dSbkJQM1ZRLzdHWU05NVV5NnlnblJNNlpoVE1IQ29aWW9LTUVlWHFPaVVUQzR6cVZvRFB3OW5qSUZ1aGh3cXpqMXV4TE5LeUc0WEdtMGgxSkhjWnFVM1FSRlR1U0Y4cmR6NDU2NG9WWWRNcmRtNU5HOUg5RFFRUzlEMVVuQWJHWnArT0NEL05IQUdlSzl1ZFF3UVAxSFgveFpsMVpHQkczbTNKY2VMeVUvWjFQS0p0SkdDMzdVazlkblFHNnBaMU5SSWRMV3drK0p3cDZvcm9xVUtUc0EzN0VveWtsWG15QWVJQmFiYTNsc2g5cFROUlEyQUxkZWJiUjJ1bDBLUVk4LzJ3RlhOTXAvZHdhcHd6WFJPSzBGYWJKSTJ2OUhXZXZ5ZmgzNFBaTWYyNEpweUQ1SE1mVUFaOTZlMThmdzlVVnpHV21qdzU0R3V1QmtVOXdncG5DQkpHMDFkbzJlZ2pjYUlhS2JyM2FDV3V6RlF4Q3VZYVR4Rm1oRTlOb1czbkUvRUx1K3NWTVkvS3ZWdG55NnZFUmtUOTRqUkd6TUZHdWpCZXNDeWRrdTBXMmhhQk1tTm90TEJSODhGMllGN1lEaFYzVEpVRTQveW1vbkhhWEhKSnlrU1hMbzk3VHpabm8xRmVOOXkvSWkyT0I0ZS9DVW9tSjE0a0xsa09jeUNOL05temdxL21EdGhlQi9iM256THpqSWd5akZycFpkb2hhYStlcVU2NjAvRjBrOTJNRnRxS0w5c0M1S0hKM1A5ZWhDeUpIUHJJTW8rVGk3cGw1WkZYT1gwcmNoU3NzY3JnR1lkM2ZtaVl0VlVWY205UXR4QkYvRkRFd3drL2lGTFYvRk9odTF6M2NJeFJuSWQ2MHA5RCt1dGthTHJaejBzaTZxQkFwMmFiTmhhSytzVnI2cjIxQ3RLUFgyUk5wcnJGd05nUHROemNmbzBLenlyV05ZQWlkNit2VDVscExxQjdLbmMvOXpid1lJVFZOVkI0TThvRnA5QW9oWWE1UkJpUGcwMENRRWR0UDQ1TlREM0lwR3k1V2JjK3V3Q0grMWE1SFl3b204K1hBU05DZEt3bG4ydkROenduWTNiTmJpL3M0MXp6c0ROZy9sRVVGaVRtOWtnWWpTQXhXaVpEZnBGSzNkUWJZMUF1eTB2V3NOWTZ1cWxJdk9YditXUzh0UXRUS1BPQmZxWTNnTlRmelNiYVZVSDJqRm9rOUdpUzN5Um1pZFdidHRlOHFMaGY4T0pnd2JiS05sbUc4aFhyc04zSFlVK3E1a3RObHl5ZVB2aFlRU1d3Wks4Uk5GZXo3eWJjdTVCUVFXVjNoQVJDT0pGbm1PVFRkY05sMDlqS3dWREhIdmlyRExUK01nMkg1dEZDRGMwTjBNd3VCWDBEU3NMeDl3Y0NjdWZBZzJyUDhrejdPSGVqUGlKSTlJNmw0VW53VFY1VEI4aE9ybmlsY1NEMm1LTGVRMDczWFNvalpUa1ZtcDVMdncvRSt4bDlIMEc0WS8yUmp1Vnd0T0txWjBpeE1OMHQ0UWE4SUF1SG85Z05QV0hDdkpSVnl4Q2tJSkozc1pQZ0cwUWlTb0srQVF4dHI4R1Q5ODFibjRQTnlCN0tjTTR2WFM3bDFOY0ZIUUFrLzBESVplci80Q2FFNUVqU3FlNkdPOHhpdDBBdEVOTWNUd3NocmpRbUNYM1l6SzFEa2NZNk9sclkxa1l0YlEwUGo4cVZYSE9ITVJFVnZ3R3V3SytvbHZ5ZWJqaHMzN3JJTmFwZWRSOEUyS0NyTkNwOWFDbXVaQmUwQSt5cVl2clY4ekVuUTJCVkpvb2lrWFNmN3NONmxEdkxONE5jZHN5NEp6aUZ3K3VLYm1NL2RkYUFEMm10OUpBOVpqM0E1ajBLY0Jpck15SGs0Y2NwWHU0a1ZLTVFiamJMR1U1b3hVdU9ZYkdhTmtIY3Y0NUo4b3R2U1B5MzFhN0Q1RDFYa3B6TURDUUUzREFzNkZHOFBiMVVXZ2JQZ0grS3o5ZVFZM0Ira1dnMW5mOE8rWFRZNkVRQjAxMmhwdnFFWE41TFRGTzdxc0Qrb1IwanU5OWJOczdQc3VwWGRRNzQxbVpPOVZJQ2h3YzNXdDI3QkgvRHNTcXpLY1hTTUhDM0p6QjloeWxyS2oxZFBuZzhOQTlBQ2tsZVlzSXlTYVVvaCtydFp5YmVoSXVLYy9aamFKWEUvTXVUN3ZRcE5VbXU4cm4yc0VpbVZyVGorS1RhY0hmcG1vRUFvaGpIVUx4cEZCWFZUcDRRc1hkZmptM2pKays5V0gyWEt1cU54ckhjc1l3ckE4UTVMd2UvL0R4Rmp4TWx2U2JGcEx5c29TSjlTU1hhcUVLRkZRUXg3SDNrbnNmOWlLSXhhTmNJc0o0T3JRR2NPUWFEVTBpQ0lqLzR0RlpleWRhdEdZbUw4eGMvdUZIMkcwR3cwNHl5T2tvRVQ0NVlLYUlEVVZjTDFubVF0L0VCa0dneThQeGZ1bjQ5ZlgwbytCTE1WamtaaXdGZzNmRVBHUFJzYUt6Q1ZuZkpST3FtQjhRa0UrWE1oVzFuOURGVUxvSW9zVC9peVkvWFhFUi9WVEhBVFVEMFF3eTBXRHlJWWxzcWJCY0VuTlBZUTBIMUM0UE5lVGNZRzFRbHRrd0JTSnMxTEdOSWFLS2RsV2hOc1NsY2FUcWZsWU1yQkc2SHFnUHFkSFA1RUNMNTdYU2YrUUlaai9pVHB0a0tKa1F6Q1hRZEQ2VWFlV1NOWmk4VmlmbXN2elk2OEM4VDRVNUJZa2tGeUdURUtxc29vTDdTeVdESGIxd3ZhZVA4MDFPTy9WTEhXNDREcGpYMmpJSnRPYlp4eDJPT3RXWWh2azVRRDFOTnFkcTBQQUdPZlhnQXhOK205QmpFK29hNWljSkc1K1NnMC93RTBJRHRwNWlRR0tkd0N6aWJDMGx2TDEyUWpXZkJhM04wVkp2dUZKM205dUE5eTRValJYSVJ4UGdGNElzRzkwalRRRUg4VHZzd0lhNzFqRVpGSzdHcjlSblQxN3FNTVQ1aTFDSHg1Vk81Q3ZSWXhIYzloLzExMVVYcnV2R3JwZjlvd3pKaTFRMCt1Ui9uVHRSeTJ0M3crdWVWWG5uTUVvZVpwakFOV2RjZGZDMEhqRzVWTXpxMVJXQXpFTGRGVjNDYk1MTktseW8yNzMzdWxMQmlEejBMbE10aXBVVUNSU1U5YlhiMVlOblA3WDd6aVFnZ09OVXhuRk1pc3g2M1JiUGNLU3U4d1JLRTJ1akZBMXNlR3NjMkhvMDhsTmFRL0ZsUC9IRXN6Nm9JeHBOb3VhNUhmSXhrM0FuZ2Y4MkVIbVphQWpheHZPR0xRMFlDeFdVZ1ZsTVphZ3lFT2Fqck9ucDlieFRocEFxMXl6M21HLzBpaE9yOEpFRDBEeFhHMHNtMEc1SGhyN2VYTDF3YUs3a3gzYkg2L3ZhckJsZmRSVFBKNlJwNVlxL3pqcE9UYmhPVzJwQTlkS1dsZExHMUJOTS9mUHVuemN1VzlncUlxUWtnQWt6RlloSDFmV0Z6MTFJL01nUUtRUklpRTBUODJRU3VmdzlUSVhIZnRwbEkxWFlwUTJ6RitsUm9WanF1VHFycHV3MUlJQ1ZuV0trS0xFMHRoOWdqWTFEZ0JSd1AwdEFpcC9LamNBSmI2UG5lVUpoRUt1OEFFU2REd0dLUmhUbEV1K0wyMDNyZ0dUTlZoYys2Y2ZPeXlMRi9FVTd0b1J5bmdOYnpHOWlSQVBiNXp2d0tGMFhlY2pvTm51OEVsRlhRamc1R2hjb0Y3VVBMcElETzhxdXlGNEtGNG9uOGNHejVreHRhY0l5aWRZNnppbURhRlNLRTJoVFRhT2sxRmU2VDVGWEFmc2JOTGFaaDFodkRheWNBMTdCNjVTellHRC9FZ2w0aFVkWGlGdENla2VYTTBxN1ZROTNlUmIxY1VrVGcrSzZ1dEVRRUdaWnFRWWdKeTduK3ZYWElxbmhPVWNIa05CaFBGMDlXVndXVW83NVEyZ21uc0NobTB5Q1RWZVhpcC93bENzY1JRSE53RlhaWHdUcU1wckZFTnZrYUVoblJRYjJDbkpza3R1TXc0dkJuRFdFcm1UVWlQSm5HZk1EblYvbkdYakRwdnhTbDFSQ2h0VkJCOHA1YjhWUm9vOUtoSUtmZW8xQzFUWmFNd1lKTVhDTndoakRtaldYMkxCSVFpWGlsQVZWVFptdTEydVJtUlZJWm1JTDJib3RXUHJxWDIrbGQxRjVZdlk1OHRJZzBSaUNFUk1LendXOS9wYWlNK1hBamh4cS9WMVJ0dVlYZFNXTng0SzdxcWlvSE8zZGxDdGxkUGduTkpwY2lYSldrdGxHUEl5OXFjeUpCQUptVmRNMVV5aTYrdENKc0xSTUx6RWFuMlhabWxlN1RYT0dManhwb21uWURDYU44UHlLZ2VISVpxdGd3ZFIwMklXYVl3cXUvcVZTZWFXSFRtbXZMMVhodHFCT2FpaUd6b3dpTkhhT1RXR0d2T3g4YzJ1bmYvYlF0MlhRKzk5Zy84N3R3L0Nkc1Z5UFRDa3hEaVFrNkkzTGpJZlpaeGtvczh1cEk0NS93ZVNCTHNMOU45OUdNTHZ6UVZJUDlIQTVkdG9nQzg5M1BEZHB6VFpkSUFYbUtkSnBVUFBSYkFPM2o3WE9meVdwaVV5Qmc4clVLSTJNWjIvRXp0UVF4Qm5rVCtGZVBMREkva1dRcFBqd3B4dVlmMDk2Z0h6QWRvTFZqUE5PZHV0ZE9FSmxMSWdBQ3VlR2V4cThlQU0vK0J1OVFDWUdlU01BU0xLMUpFbVhndzZpOTlzVVJlZEkxUGFadmoxejgrNU5EcUsrejRISkhQNkwxWURScCtoR1crWTY4UHI4dlBzZXI4TkROTGZLcG9mcVl2SnRNVThGNFZURkppK0FocG9MdGQxT3N4aXJYWXQzMVpCbXRtL2UxWVNDVG9SbHE5UHJDV3RaMnI2L1FHcWFiNkNKYnErTThvRi9KK3MwQitIdkpYU1RSUm5YTEZ4c01WZUkyRWl6NFFFbDNaNnc2d2FuRVNUUmtYZ3RHNHhZN01MY0VoRno3Ky8zSnJtd2tNSmZpdHk2QkdIQmZiZ1d3SE1zWGpiaDR4T0ppcURyZ1EwaU5ubUlGcUZkRjd3SGUwSG92SGYwZ1ZPVVFTQWQrcTRxalZ0NzNQK2UrcDZ6bEdSVkpJM3M3MWU5aVpYZTZYc3ovckFGQ2F6L0V4ZHFQZWFhTVpGRHF3RDI1dTRKNmwwNzMzd1lXc3BFWHRpd0hrNjZ1MVZ6enpudFRORStRSDRPd1NhL1dkL0Q5dTh1WDVDanhyN2wvVTZna0haWHRmczVKL01KeXgrQjkxMnY2V05IMEdUeVRtL1VVcFRFVmFzVTdibC82YVRsWVlRQ1NrMm1kS0RIcytHdHpmdnVVcVlEL1BHOXdhSW4zMy9YTlBxWVJJM204eW9OTnhjMzh6enVnZVo3SkM2QVY1aTgzRkZadU1yaXdsYmxIQTZpeW92bjJqZ1VwYk13YVdINkJBenBIMm5UZFVOS2FDZUtLMEZxVG8reEMyWmtSTVdXb1Ntdk5mQjc2eHM0YTJqaW80djY0ZWN0NGUzVmdLdHNrcEV0OVkyNkFMWDQ3UWloN2ZyOWN3ayt2V3VQSFJaTlBxTERxVDZORXVCYzZ5VldjUm5HbTJtMVhtVSs0VUtrdnBvQ0syUlFKVmc1S2J3QVpMUGpSN3lucC9zN0Q2WGI1K1kwLytZS0tpZUtQaWVodlpDVjhFZzQ4TVM1aG1WN3pacEg2bjVJWWtnaGk3akNNUDZ4MlVqTnVCZWNkcDB1WGIvRnhxWDlMVDd3NElaY1l2OUhOZ1YrUVB0UEZyVXlQbUloQWZxZ0k2cHRvOEd5NnNWNnlKN2dBdHJtSlQyV2xMWlZ3a1hLTlo0a21reW1XNnZ4SGdPUFRUd3Jnd1AyME5RTmROVG4yeVFKWi9ibkhEcmNBMHoyREpLNW5LeENWWjF6RE9DcXVYWTZMZTFDTm0yYVJkWFJOZzZscTdJYkFwcmlldVJ6cGI0SzREdnRtZDBtR1R1RXpFcDF2c0p5TFliWDNjZWJaZ2NPNzdXSjB4QWtiT1FxOWVEbGhscWFEZ2pVSDhmRHl4aHUzVEZwa1JlQUtrbGNscEk4emlBalBGejRKTGpHcVF2cktnUDNOSW92SFhUeXAxcVgwZ2lYWTBWVWNFSncrdFB4VUc2UU9WKzhUYUdvRDVtTVJZYjdBQVMycWxPVUpYcFNKa3Z5Rm8rdXB5M2FqYktyaWI0b2xJaDJTZ2pNNVF0QnBwVUxaRGl1NUVsTmxGVktmajJOYVlDZG5aRG9IbStGaXN1Q1VpWE5CWERweXBFNHg0ZUlFMi93ZjdFNHY0N0krelZ3S2t1V0Y2TE81ZWFFWjRsU0dFU2QxbmRTSEh1RHdGcjVMVkkwVmdWbDRnaWRmcytueENqNzRBOXdrTjh3S3lDem03VnJWOHBtcU5WQTRlOVJ4V0VscU1jcTBGejM4YVpSdWtnbDZhOFY3dWZHT1FFbXZnMmp2YVhsSStqRkNjYzNUOTdxM21yYUwybUNJWFY0LzAxL1hpbStuNkl5YW9kd3lNbXZ5b1NUTGZrRGliOGpMT3krbE5oZk05amoxUnVLd1pUWVJMa2Y0bXJlN2dRbkpOVUpvekN2bzRveTN1bmtRYVYwUUtrb20vSXJ5ejhBRVc5MXc3NFFjeVVkbEpFWnNnVk1PZGtnK1luV1hEUjJEQWpaM0RsS09tbDk3c1pLVjhKMlgrTXI5TWdZYzNFcjBRTHllZm9tbHhiKythL1hZblZVcFdBMGxrQmVEK1hDeUdmaWlGSjdoK2xKRkdnQ0IzaXFmUlAyQ09IZ05XOE5XRHAzU2QrTXpBRHk0WWZrcmp2YXpaT1JlU1VIRlY1L3JwVlpYL0ltN3hkQ2hMNlRwRkFhNTh5eDl2VTVHWVBpZ2JHMitXbFNQOHJySzZEYWMxNU1mRVhzVW5rWTViS0s3SjVQalhUMm9uY3VOdXkxUy91VG4wa3hwVUpRaUsvSzVxM2lMa3ordEVoUXNRVThDekg1UFBncFQ1aE95aTl4RnRaSjVMWTZrelJCOWNlWWV0aGRUeXV3eHdqZHdaVEQ4Y29tcEo0SU0zSXdQL1hMWUFRYUk4KzRiNlNGRWFka0ltZEtlQkhuSERmelRiWHQrM2xtR2dZUHkxZmh5L3d1YTlGTG5VTmJVNkxaK3o0OTllZ21HRDFNUUtaS1NERjhCVi8ydDYyZ1I5bG9tbEFPZ3htV2FhQWxxYXhmNlZXY1g0R3prM0ltbjNTd21LYjJpYnM5NTRzZzl3NmpNQVlBNjJpMlh0VUEzREU4YUJNQnBVdDBIQmQ1Zk5jV0Y1L3FSQWRyODVqSlVYWEJsRkROenN4YkFOcUdwajk1QjZWUncrSnlYeGw2WlNScnZ2dnNwNGsxMlpaRkNEMmFJRklsOXBvSFUra0Q2UGJMVk9FZE5xMTlmdGtRVCswUHRqbHlZVmF2TkhEOXhvVlBzcHc1NkJPNGI3M2sybGtuOEg0VHR6enJzYmROVDNudlY0bkpkQmhBaEhoQXZkQXJKemdwS3hEdjhPV0pnL0dnOW1sbytuUC9ENHY2Mmw1Z3NFYTBEV012OVVGMXVHMW8reGNRQzJIcTJXb1dGdUUvd3FUNjU2eG5kQlpWbEdsUmp0UnRoRUd1aTcxVG5HalEvZ2tZUWdwSXNmYmFuam5MdnBHeXpJczhzR1huVDdkSEZrbVMwN0hqM2F5UFUySFV6cklHSFBxczVsOXFxcHpzMlluU000YXJObGdoR0VsNXhicC9KY0N1cTNRSk1KNUxnazFpYjRNbUhiMytEWEtjWTlsNFZQaElKSGVEZjZWdVJwNUNIWk9qTVpmRW9qVm01aElBOHdYT1JYMWtqOEl5VHc2VkxJVXFtQ0hIQ1FKSFNYK2hkSUo5WkZCMEtZbWtwOHBob1FIak5MQlNYWW9lczlFeXJnUnNhdkxyU00ySlRRMHp3cVF4RFNXZW9OMUVicm81MDZIdDgzbEdjd2U5UDBvaDdTTUFHdUJsVEpsMWFuNXRDbnZpcVNMeXBqWjFyOWx0aVU1SjBVNFpRYlc0WCtGZ3RzMitiUTVUNVJ3RHdKRlA5eWNpbUFwNFFnQ3I2czBJRlkvZ1dSM2NYNTRISlN0eS9lUzB0blFGMXFJc1NiQ0UzeWlCMU9rbkcvODJiTDhTWTlyREZnUm5MM3gwdjlvT094NXRwS0N2SWxXaERkN25RaWx5OTF1YzhYQ0dpS1Y3Sk5OMm85ekhWK1BnL1J4bzl3S0wydVdCM212VE80dTQ4RmZjNmtKV3grcGlXRnczdWJ3dHhvTnNwYVlQSVB5Z3hCc29YVTE3SkZwMjRVMUw3M3Exc05uaG9wc3JMT1o4RTNEdUd2MTNwWlRBdFY0ck5lRi94dlJnV1ArMGF5Sy9wR0NPSDVFSmN4ZHZueFZkZVVINUc1ZHQyb0hvbkpYMlVKT3BRVzBibFFPUmVPV1lCSzR1bnIrQW84dkRhMityZU5kT3dHMmtZNytRczNyb20rY1pUUy9zZ0RRTjBTWE5waE9kSVo0WUh6ajlxTHRXUmV0WGQ5eHpzaVB6dWgzTmN2ejUxTVJRc2d3TEFZS0xpYWlVRDlFOG9jZ0tQTFJUYUpBTTBWQmlOVEs5SDlZODE0NkE3Z3JCUjZWYUpJZUt3dXp0dmtzbG5oVWJvUjE3NnB0aWZNOU1UWkhYdDZQSWxhbG4ybStnS0h4RXAzdkZJS3BBallPNmthVG82dDNmYkIwVFBrUWduMEhSWFlDR01YSk9aOVV3dTM0UVdqWVNnS0pGMlRURzZHSW94ZjhFRlBFbDNoQ1c2aFoxM3hCalRkZnlrM3JXR0NQMVp6QXBzNUJCaHg2aEkyblZSNnZSU1gvdURDR1lHczJhU3J1OEVrVVYzMEhMMm92bFBNV3VZWHJkNWFQdjRKdEFvNmlFMVNRR0lQdjZLdjBEeFNZWVZvWENIWjNnRkQwTUhxZngxVDBHK25JN2kvWkdhUWdSNGpxMlhrc096SXgrWXF1akZMNWkxTnZVeDU0bExLSmNWdGxyZlNkT3U2c2hZdVBWMTZnN1hrZ0ExaFN0ZSs5UTEyS2xqSXgxVGllYlZ0YnJ0TVlFOGl5WVBDQjMvUzBXWjN1WGJsVVA4N0VEYktuVmRpNmxYd3ZTbHZoa000SlBEL1RTNlh2VHBmODZ1dWkxaWNSZnhHaU9id0dmQWhzakhieWpQUk5Xek1QZFU4dXppM1ZkM29aOE5vL0hJRmpad2dWVHhrNm5CaGw4anUrQVg3VVduRFptZldmZFpyUXkybXFrOTdKSDdtVkxESVEwam9sYXhTMHB2TGxpWGJCSC9VQi81TUlPOUYzaWdhamZFVnZNaGh0R21BUGcyUStsQXJ2MzlDbGJGSnNMSmxwK3oyMVU0LzdFeFZYMFlVSndiNjFmYTBURDFqYnZlNExNTGpydlZJMUhLVmEzaFBacktmNHNpanlDL0YrWnhPaDFRR0NEZXVaQmRnaXNZd1FlTzNTdkszSnFjNU9ibDRQVWR0TDQxTVVTc25iTkRqTVhjd0xydStxQkxXMUdUYXNIdUF3Zm5KQlZkd3pseXhyejlHbHBTLzZUdVdxQkxuUkdWNVByOWJZa2hvUUdyaEpXUVlySW9sMDlpL2FVNmpoWkVic0hWT1NicjJ1M0ZzcUlVU29HaVdMOUMwL1FMUmhwTFpGTGZVUWErT3E5V3VLY0ZSUkRnMkdBUGlxU25Pd3IrcExtaEl0a3dRdW5rS3VYUGppeHlJdDl2dmlMbGJtdFhBWkNCTGFuNFFwR0hISjFXLzFlZWFlZTFCZzFEVGtiR09rL0dnSFJsWG4zMUU3S2R6bUQxQVV4SmR6bWh2R29IYUJpUEo2U1RSM0xodEpydTgzL0pYWDBJTFlXOUxUWmY1dERCd05VUUhYVjJqZXB1RTFDZHBFRm9jRm9QTUhleEVQaGJLc3hOWVA1RmtDM24zK0hLa211YVdMU01XeTZhSnA0YkFRWlBsRCtUSVlHM2N2aDVHWndjeVR3UzhmSnpHbGZDVFhmcklDU1BIa3NuQm1qZ1V2MVFjaGc0OGR5cFhKR0NLYmI4am9SOTA3RHVaazAvWkFiSzIyQ0dtczhjZWFwdzlsdDcwUjREQTN5UnlJSkU1N2ErQWhRM0J2ZFlTN01jL1d0aGsrNlA2dDJhU2U1Wi8wcjd4RG04dnZUUXA5UVFTNFRGWXdSNnFOY2ZydllRQjRhSGc1Vk9DVXAvSWdwWjFVVkhxcEpLc1NPSEZyVThrV01rVUwyYVJPQkhXcjZkWGpYZlQ0RWQ1b0RWTXkrS2Uvek04ZS9udE9WdEFaUmJNR2dGRG9ONUkwWkZxQ21mdEx1MFdRcytuOWxjQnRrUjh6NFBaUU92NVp4OFBPR3RTanhxb29ydGFsOWpsMjEwaVFUNWpzOE1YVGVQeGRhMi94Yk92d1ZPYjFyTkRKWDhHOVNMTldFeTd1c0NuZlJVSFlDeVo4WlBVc3dBc05IeEYveEZ2ZTJ4dGRYWUxtRmJNVUZVRytsUlZjLzBhandaMHIzTTFVZlZqSzRWQXZOY1IvejBTdGZKMXFzTWRaZzd6ZS8zVjJlTjBlNGtZL3RKNnFjZ2IyeENYNUNZOXZYOVJHNERVV0REaDVIcmhQanFadW1xdXgra2JCcGU3TUtwSkkzMzErWXZKTEkwcXlaTC9MUVpZYzhERXUydmNidmlIVUFyTUQ5cnl5QUtXaHp6MFJDek1tOUkvWEhMZTdLdUVNbkVzUFF0c252SXNJZ0EwR3ZXU25ZYXA0YldCZDlzU01Cb1Q4UjhTdCs1S25VSUFkZzQ2NlplbnovV1cwSmNiQWUwWXRHY3ZlaXVGblpQQmtmWDZTcWp0UU9haXplcDh3cDF0c2t5NThZQjVJb3JlaWVDNU9rcEcra0d4UkdIT2s3bHlmZXBDRkNQNkltS0I1WG5qcThPUXBHWk1kaHFVaXZIWEs4Y2pFc0JqK013Mm9vR2l4YlZXM2srSURiQzRjVXJCMDdrdy9OZUVNMnc1YWIrK2k3emloMTFIQklvUXUzck44OU5NRlJkc1JDM3RQd1ZUWEd6cHVJQ1VYZHRTZ1lUcnFGaEhMVU1aY2tuazNnRXNUaEhYeHhFdHhLekR1eWt4TEZFTFY3OXRpam45Q2s3eTF3RGwyQS9mNVBSYTBRYmV0THNqczBoVWVhdW9qQ20zR1VTUDVPUlNtQnRzakV6SE1UbkIxRTMyMys4THdLTXJVSVFGOEFHWkcvZjJUTWZ0WHVOazlNRHdhenpBNytJWkh6bkg0U0xVQSt0Rjd3cGtDc1B0SmpxTkE5Wi9xZkJ3VDdsQUpldC8vV0F3TXgrYWM3UjNwT0JVUG9YZlZsNFhQK1VjU3pFdWNva1BSUGFldm9WdnptS3JBSVhVdXRtbW1GNFFuVmhhUVhIaWVLcWJGVjlWL0RaZUJvbUxOaGtscHdRK0djbzBuR2E3WWQyTE4yem9tN2pYVUpoOTZBZFQ2OTlYenFtSFNFZEJQbG5CQkZjbVhkU1pHN25DUG53UzJlMURvaXR5eXJ2MVI1QkF1RFBOdDIrNFVhRlJPK3lhc1FtTTQ3WmxJRVl5eHZTbVRDZFlNMW05WHJ0U09nQWhBQzBIWE5yeWlwUjdrdkk4SVp5dE12bmltaG43eVhUaWN0UER1eEdZTDJBYndsV1I5TC9nQ09BQ3dXNDlndWQzbWJzcDlITHZDOXk5b0o3NFhHOGZLZExtT1Yyc2NjTlI5L2F0Q2FUb2piZFpmd2VCY2pYbXk0V25Rcjl0RlR5K3l0TU5Ralo2RFl2clkySVFJWDY2c0RyN3FDRHFwMVdXd25tSVprUGMyNjBlNHhpUmlodkhjUldVd0NrTTRvRy9sb3p1U0xRV0U3c0VPOEZhTnVCa25ZNWtuWFBCMzlkLzFKY0UrdVNIWERxSElrd3p0eDVqbDliaDBZZzl0OS9ySUwyWSt1ZzRQelhxWmFCWEhROWF4M2dmZkFpWTMwWjkyY1lVN1N3L3p4ZXhhWWVLQ1JTUmVwQ0Y3UDc5WWRDYlhDbWZoN2FvMXFLUFdNZEhmSEoyc0hkVUswTVhsRXJCQ1E4T1d0WUxScThYSG5vUTV1NURNRlhyZ0habzduTjNXdG9MV01UZTRETHlhRjVISGZqT2plakF2R1JTZ29BeVFMUmNtN3dPeTA5V2NBblV0QUZUbGhENUdldVh6ZXYxL3UwNjB2NitTakNBK3JlZ2pQaWl5SDlVSTNtSnViYnc1eFhYR2FwM3YrUHlKOCtYSlVMWFlHTU02dCtPdUdwZ3FpQUFPOXJMQ3pYTXBlVnhDMzdLSlZsaFlMNlhrYmFQWWhVMWEwS2YrZHRoNXl5VlJ0bEJGa0ovNXJVOWV3YXlzczVQc3pReXV3VXRCYkloeXBibVpFaVNrRDRiTkJDSEpnZmtHTDVUNmdmNERKaVA5ZUxqL1cxUmFhQlZFa1RBcEpMa1YzaHBpeFpLZlhWZGNlT0pFVFFwUzlSOUY5bzdaak0rVy9mSmE3d0Z0eVRmMEMvSi8xOC9JTTlZWnlwaDJqRFZEelhjYlJOTS9PWk5JaGZGT21uTHNoTVlBeEpZTEN2Rk03akt0SStrTmNBZTBsOVBlZCtScHBiSUFmQkZXeGd1a2FTTExTOEVybmdGeUwyYTFSaG41TTdDMlRMQjY3Um4rNEswcEY2cEtRdjNVNk51eGF0NHNWZGFiUXhWeGFub2VpY1Z5Zk5SNFBKYTZLc25VZTErdVBjMVYvOGJwY3EwMlRiZEh6WWJwekJIaUtjOUQ3ald3eDVBVk56eUp0WXNpK1BOZWFyL2Q5dUEyaDVWMS9mc2JROWtTZFBjTjdIdlNrNnFhWFJWTk4rbjZwVVpwbFozR1hUUkZyTXpUYUh6K0lhcW1wdGtNN2FmZlZzZXRBVlNkWXRPV3V5d1o5ZG02bkg5N3FucTV3TXE5OGUzWG1LTml0SUowTHJWK1c4TG52QzE0K3hkZGdEZGJGM2s4TjJoVEx0eXcwZTFlc1JGZjRrblBuSXBtSFV1bTNNc1FlNzZVei9EeDlUWTdWdnFBVXJQbTlyUTFrT0VlZDNrQUdjUTJpcUhsTUgzdmdDK2hqU2dWUkExZFpXU2d1SkFxQkpGZU1GNXVuZzlZSU5WVFhSK1c5OGFLWVdWRUxGay9HT0QybDJXZk9IVSthZzdGeTVDS1N0ZXF0NFc4Qlczb0NhK2FmOW5wdWpCMlZYYlQ4NUFwQmZYVm0zNU5MYVYyMzVmRVVGbVF4cWZha3dadFQ2R3cxL0JQLytGdVdaSWg2RGhMUDh6ZU43NkVDVmM4Mys0cnJveVBPN28ySlJvUmoxcXpqUXdPT25sVmg5QVBwTzc2TnRKNlQwQjZiMEdZY2E4K0NMWnQ0aUp6QXJUNmk3dTV6bmFtL3RxeTI1TXhIMkQ5Y0JrMU9FUFlGQVB5d3dMMmsxUDZQSy8rbHBFeDFOSHF3Q0R5MHFjQWNUWUpZZGQ2OG5DNk1KY0IrT2Rtblo3QnAwK1FZSHh6MHBGZlFhM3RHUWx1cS9HSGFldlpBd1RpMCtMYVh5NEtNTHBGZkRPbjN2TVRWbFZ1YTJHQklYSHJjcnVnSyt6MmFROHlCRWFuRzRXOVYvMjU5WUVuR0E5UnNvdUZTK3FBQkpsRlJ6YUQxZEJEaklXZkVWMXR6QTZBZjA1Q0N2ZHlMSTd5eXM4RFlGY01rbis0NHNaL09ISFE2c0hpUHI1UlNweDRtUkkwemNyQmRlYkIwemNIWVlnOVVsb2JyM0g3d2F3UlVXdk80NEF4U0JlSTQ2djlWaFBIcDQ1eExLR3BzZGszb1pPWHhFSW9OVmVYRlJIU3BzLzhaSS9jb3l4Rk1xeG9HVXRqL29PeURzRVMvT2JyWTBuSE9LUGVpVGlWa1NvN2RvZ0lxQkJ2WktLcXdjL3hUaEtHVU41WEJKY0FCdlVuS1pHWWxRNnN6VHJVVGV3cnFrcSt1S2tNbllXRFhDSCtEa0JlYVpLcmduTGMxd284dXAvUXRSVVZjUVZnS0xMNGV1elZSdGRXTmM5OEpPTDJiOHhKaHB2MXc1TDYzN2FTaExYRkFmSWVOQVdsTW1EUnUxczAzaXRnOUVaekhsck5PazcvamFPRHNjNlFWc0xWODNNeURnVzIrSHBUNkRSTUNKMy9odVJUVG82c3cxV3RhMU9LL0RvMlo1VDBncHRIeFlyem4xSHJ2S014Y1BTNVZCUVNKS0NXT2dxNmg0aDJYTC9aZjc1VFQ4SFg3SU10Y2V0b2s0SlFDWHBwUVlqelpnMDZZTEZYSXVVM05KMnlSQ2U5cHZuZ24vd0NyWVhIa25wcmpjY3JmY0ErYU1PV3EwVnhHa1RrcytLak0rdEwwcUtaUUEvVkdsN1dRbFV5Mk1UajYrQlJEdkNiaUE4MG5xRFJxMmhsVWw4azM3V055K084UHd5QjcwLzZyd25GMFN3dW9HTWxPYWFqbHlucTRSbXliWWNMNDZTb284NGY2a1NoOHpnNW9ZV21iSEZpQU5Ud0dxUW9Ja1VVeUxBZkMzQmNZcm10cFdXSnBUSmFEWUFLbnhLRk1icW1qaXNpL0dod1VvKysyczJNeXYvR1ErVlowa25uc3ZvQWdDZjhtaDZ4cDkxbHI2M2h5RFhhN2Y0VUROSytGaWFYSjJQWDR4VmRmS0tLa08xd09pS0hKeHFFZ2pjSlJMenpaSDI2Nmg0b0NoejhhenlBejUzQ29uQzlRWlNBMWhzbEZYY2p1QWdYRDRPRUxoT3IrWFZCalBhQ092djRueDRtQnVtcFYrZ0RXYlFuMlRLZnlmWWQ1QTFOclcxbEFpMnczT2dEblJyMXBnZ0VqZHZ2WkhqL3EzT040emF5MU4vVXdNallVVng1eTNHZ1J5VWdvMnhXdDJsMDNyTDBYc2dWL3BhZmZ1bjg1M1ZsREZMVjBoeXZGVGUvVGp1ZFM0aHJRL0pVaDJPKzZZK2xzclk4VFUzVlJ6WlErLzg3bWF3UDBMUVpEZ3RSSE5pK3BvejlwM0dnYy9jN1htdkxBVUJlYXVMOTFHWlR4bE0vTUpqN1hmRWZhYlhWeXNTSnBMNUQ5c1NzM1NuM1RDck1qWHV0a05na0FOMVlBMThYV0FDTjlHc28vTTNnZlR1NVdBaC9uWklkRSsydGxKTEVoVFZCRVk0TEtKb0wzQ3hxbThvWlRTZUt0Wi9EK2F4K05YV044VEpGZzJFc1NMa3pDRGhQcEhjaDl1RHpJVFNaWVhWZGVCajZjRloxTnQvUmJFcXZFeUhuSFhPSTd0RkdhbFlTVVRQQ1hjVUg3aTJlUW9oeWxERnFiU0FKWjBGdmE1eFk2Z3NLUzNNMmFXbFR4NldUeU5tZDAxeEFTSUw1Snc1ZDRCSHloNDZwZXgxaklXQis2b21qMjdDdG90bXZxMCsvbVltRno5RU13UWVZd1h4cm5jMCtWdzRsTWNXSDBtVTFXQTUrck5Hc2M3MStkTkcxd0k5Smxqd3VhaEZXU05ZdWVDWFlXdFUxTG85cThmbTY4RS9vQWJxMHY3N0xKN0RZb2tRWWp4RTAvZ2dQZ200K2haOXduMHBMLzRkR3V4VS9pdGwwY0k0SlNBUTQ4TUZ0c1pKYmxKN0NrbEhqQXBqUzU4QWJBajJYS1Y4VWN2QmFaV0Qwc3Y4SGZSaXFYMjNDTWNMNU1GSkM4RVIwWm5CVHo3VnJiVFE3K3IvVHBDNFhycHJEeHY4clF1alpZQVJNWDhFcWsyaXhpZTI5TW41UnFBbTk5R0VycEJ6NGptL1Z2a3UwU09xa29NU2IwVFN5M1hPdlVFZ3p6ZmE1VXBydmloeUFMWnh6Z2RFeHF1d2xRYzY1NEJFaXYyRlNSZGJwT1ZQc1J0dGtnMlFxYVRSb254Wm5aNy9naGJYS3JtMVVYVHA4R2FWR3Evc0M0clc5TllHMWt3bHZIMlMzaXlRKzc1bkp3SGgvd2xhVE5PRmFOMWZLMEFnd1VYQUtnUkR3dzFGbDRabmdCaHVGZ1dKa2NSUHRiazQ0T0xhNlBFZThlMHhQSE5SUlJSYWVSTndlRm94ajNVSG5Vbnd6YzB5WHNKVTI0ZWxxU2lhVjJta1l6RlJqbGFPZ1ExUDF2eGQ2M2QzMW1WbTRTVkI1ZWlHTEUxZ1B6MzBhRldGbXR0VFdHR2orSHRoM0NDNUFIbWt2RE9FeWRRbjNscm9HMUdKZ2MwZjVzbnYwSHNSU2J1RVhjVHRYbnJNSlpPb1JBdWxOeGFTWVhPY0JRRDNSeHB2L1V1MUE4YlM4YUlCTVZjcklEamo3dERoM3YwQ2lQSVFEL2ZUN1hTelpnZzI5NjZJRXNJZVBNdTBSWVdmaUhuaFB1SWk0MTA4MTdnc3A2YVAvc2pmZi9YRlJ6Q3kxdzQzVEt0ZEg3VjNOS2R5V3hSS3JtakxKNHhvRm1nY290SlVJYkV2dytCamxwNzREL1dSVGl5eFlMeUlmRnZiT0djV09yeFF5TFcyT3NsYTZFeE1nL210eXVQeHd4NGwzSXh4a1dSUmltbHdnZzlHa2hhV3NzdHFyR1paQzVGa0ZDM0d6ODFVKzlPN3Yvelo0YUNJTTdUaUNHMlFxdFJwWWpZdklqMXg5Y2V0ejg5TXY0SkNKRFNCeU1rRUZ1azQ2VkwreWNMbEd1WGhwbXhxb0ZjU0NqV0p0RW5BS2RXV09nWVhienJTUFVPZ1pnd3FTZnVNQ0RJTjljQ0dKc2pnc3dpSlhNaHdTUWFYbGV0KzBVM0RnY2JQbjZodkM2YnZEVXdqRFpsYzBnTVVuSFp2RXN0SXBXTFhJLzMzbENQckpzQ3pra2twcy81OThIb3dMdUttMkVRSlFXQlYvU2FhZDlyRVR1NEVkbEtZd040UTE2aW1PRkdHYVlvcjBicExxeTZ4RVBEUytKZndMaHdaakJPbTdwaWlMazVhT1JYcU9pazVuTlJVa2VuNVFhSnEwckozQlRrRUIvd0JxREhyY2N2VHpCekx0RkpsUzZUTm9VZlZJTmdVc2tUNlNoMkh4U1p1TzM0aXhtb3kvelpibmJCSzdVbmhsKzY5UnlPeEwrOWJBZ3NpNE84ZUtpc3FmclBwejBIR09oTzdYTWNSaUNHL2M0OVoxbXdrRzRpcDc1NmIvd3VLd2wrUk9pdXVsS2UwQWlFQjRXWHo4SlR4Rng1QzhRV1NkM25yMUI4Qzc2QXhnK3NQSjNEQUpEL1ZFblJIWmlsQVVHb3BKYjN0b1RucGhUUEdNdnpaQ0Y4bDRYZlVtZFo2bkh2TGtDV29hdWsxd1RpNDhrQUNnRUxyMjVnN2xtWmJJZTYzWHdjb0tQek9mbzZrakhnd1IrWFEvc0FmNTNzL1ZwQ25TaXNlWFB2WGdteW1ETkNRa3ZNZitCQlhRaWVFc1JRaHExYXAwWmRmVml1bEpYTjdTWTB3NEJkUDVyNFlxc25LWjRVcEFRV1pUNzlOYVVwbTh6eTBQeE12UlpBeGJMMCtvVlJWSzZlWElEaldnRmlkTHgvS2ZiQ0ZHdSthYmcxa0ZVd3AvMVd4V3VKcEttalpqK0VnTTZCMVExdFN3c0tMaWpaWXRHejZ3VU1nWHZPOWE4VFNsZTRVWkxuY0xVTDNnZHUrMDlGeDRjT05QWTZISENpUHBHV1BkSnpCWUVDTUlFUEp1dTdRVUYwMStzUThZRHZYV0NPekxvZHZwRm55dXlCeVJ2a0JrT3F2VGFSbWZhVnBzSng4cFBacWlMS0dqa2c4MFdpN3FaRmJJYVJKRHRlcVN5dFJYeDc3bFg4dVRMc0ptU0ZoOTl3TjVyL1lyQWJIcDRmVDF2bzJZSEdzZnFkSkwycXE3cGMvaHZBQjJNaXRncHBhWDZ6NmVIb0NiQlFMS0VHeEtiaVVtVElyaEF3cmxTZ2ZUeDFYbWVXUEV3b1E5WVNDT2xSeVFkZUtSMTUxQ29PdkVuV05CQmNxdVJURU5zQXFUQWxHUjNLeEE4ZjhIVEkrYld0MytEY0VHcWdrampRdDZOT1YxcDhzWG5FVWpGU254S2pMaFJLbUJpeEtvaHk5NVF6Z0c0eGJjVlJhOFpsUm9NUkc5NVpKOEdZak4vVmtyR0lRMEgwM2hBWXk2ZUd4ZEVQWFpWYTAxc014b3g3dUhjNkFDQm41eTdIbTRCZklkcW9NSzdqNTZ5RUVOVlUrVmFtakN2NEtxRlArWlk2TlhaUThGVVZaOHpSaUdoQU1TaWRJbDN2R0YvUW0rcHhTbkVsS3lyY0hCU1hESHJXeXFSUjA5dFBzQ0hXOFkrZ29HQUtrSU8xbzgyVXpmYmNlR3h6M0JTZzhPQjhtdzlqT2JqZE9mNW1lVEhqYjhUNFhyMmNyYUZBZE5qcHBNaWNzamlSVXRjendPaVdKbzVMWkRCYXpCV1FBUjk5T1V0eXhldmVDVDh5YmlwVlBMeWFaNTE5akV6bU1PRGdzUFZ2U3hpbDBJQnVmUGhIc2VMMHNvNEpRZk1mTWNnNjVOYWdPdVNhNlBMMSswQndWQUNrR1BnRlZBa2l4NlZNajJVMXBGYjRBMFpmQ1FMRlV6MkhZSFRsM2o2N0hMazQzV1pTT29WL0x1b1UvRVJRUk5yNjdNWC92SEE0M29uOWVlUzNMbnFURjZWTkFKU25xYXZteW9JV3c2WXZwYkpkYXhNYlVVUmhpOG5mMHVOaU0yT3NXODk0UUdqdm1sK0twcGI1VXJLeS9VYnJTOGRtN2ZYQUNGK0FiZTBzanZTSGNsMC9WWHUwbmsxWTZ4RmpTeTdRSi8yaW1wdExxZDdRMjJjK2VQZXJ1VURkc3Q5eXBQWVQwbnFiK0tZcHRxQi9pNDBITU9mR05Jd1ZDcUdiaDV6ekEvVzBjMllJcmV5empMV3dwNndPSVNId083MFBQNjRBNkFNd3U3NE9GNTlud0RzSmJaeXpPcitmcFJ4ekE3Y2s1Tys4OTBaYmV0TEk3OEY5V0hmYnN6TWl3M2JsTUhSdUlyWE1MYjJPeHFvQmxlYUJta0RkZ2doMjE4SU96cFUxY1E3Ni9MTjJDRW1oRlNtbTZPUlNib28yWkk2cGt3a1lXUjdXNElQNzcyTklEcW5XZXBhSjRRY01obUdyY2Y0ZzRZc1JwRnVwdnAwUzUzS1BUWmQ4TnNRdUloOU1XV2VFMXlwRXpMRVVPbzBPU1I5WjJtY2NWVjEwOHRxS2lkQjdHVUdRRW1iR1ZMdTV0RGJJQUszZWVJUktOd2RyajVQUEtvdlhqUThWWmZ2ZWNSRUtoMHBXZ3lqT2xlcXRkYlRVLzc4UnVlOFU3bm9xckRoWXZwbUlEeldzT0FiTklPQk0zN1I5T3lJYXg4K0t5d2FEOWRCeXRlc3VyaXJXS2lzQ01zQ3dHOTBwYXBVQm8yV2V6TFB4WFFkbW1lZnNuUHIwMjhBcWdVdVRSUFpURjZQdzducWZJazZSSmVPZktLMmpCVCtITVh0WVp6NmJxSE92UWhZVjBSQmFENDVZQUo0QTZwWEMwSXJuazRha2FncDFOR1NNYjlkcEkyUHZDSFRENDhzSnYxK2NpTlAydlFpVkdtN0gvZ0NCOUIxdzg5MFRXMWFXM0ZhS1NjTTlac3lRdnFmYlhYemZQUFlqcGJiYUwrdUJWS2N2ZkhGUmhWbW1EVHkzQ2tzQ2U5dEY5MDdtNHEwWjBTa0dsVm5sb0RvV0NZWFZ6VUdWbTZuWS84M1BsbkM1OWRzbGlxSklsQndFTUw4bmlJUm1CbFJiQXpUd1J6L0hwU2I0Qmtsa28zd2lnam5hc0srUWVLbGhlU2J0WW1lMFFBNFZJV2FIVkhMbWZnd1cxVk16WWIvMHRiSDFFZSsrZ0JtRHVrV0xsRWM5OGVXMmlPR0xhSkQ4L0NNNWl3N0RoZmFvZEVLNFM2MEt5Yk9yTzltMTc3T2RkYXgwQ0ozVDJsb3Frcm9tQmdXcGsvYXQwSmlTVldDK1pCK0ExdGVRYU5OL2tic2FQS2cxRE5SZFBNNEN6Mmlma2xmcjR1elpmTVRWZC9MWGNYSUxqSis4ZXNuL0xtSjNhaGY5alRJcWthSE5ISXBkeWZrN3JEZTdZcFAzR0dOUE9aSkRvQjFZb2lWckhOUmdka3UzY3NXamtyaVFGSUNJaGZzT1M1WkwzZ3VkcmZjMXhDc2pBTW0zczh5L0EwTk9BZ1JCZFpaMmVLeFJ6WUVBUVpOeUlMbzR4NjRvd0ZwRTNrcWNWY09XWFVuTHZDRXZFZlVNTEg0UitNcXZMc2FMVXcwa3docTNDUjBsQm0rK2hIVkdJVTQzbE42d0lZMFR5VkQrdzhGQ0drVVkzV01LN0tUU2t3eGNmSFBZeWlEN1RQNUswUzZHUTF4L0VSZFo5a29vLzRPMDFNZTdCV2tqaFMxWjYzUVBHbHI5dlY5WHVPNFpqcVZJRWJBaEZFVFdJWGRoa3JyWG5BdmRlVmp1R1VhOEozZHcvb0ppeGVUc0szeGpQeXYzRzFlK1NDV2Y4YytKRjY4KzB0VlY4TWhyTVU1bGc2SGFXKzlPSjJOZTFieGpFb1lPamdqamFVM1dUdElvQW1SR2lDUTdhZ1RFRHNtUzVrUGdjdVAwcnlWak4rK2t1SVpCYlgzUXRybVBvYTlUcGkxcmpNbVorNUtBNU9ZYUcrY1NES1NRQ2gwNjZIbzNXSkpZM05XRjZ5NElSS29nWmJkanRwOE9nYmVURUtDaVlGcU9jRDJtTWxyTXp2cTcwUFZqUklKc1BXYmc0dnpPeU9nRWJGaWFTSFpIaCsxWmlrTVFONko4Mm95N3BFczVjR1FodEhCSHRjOXVNWWQ1c2FWbS9mdUl3RFg5L01OSUd6LzNrcGxiMmc1V2p0T2JSWXo4TG13RFFVMjFhaFh4V0k4b2Q2OUo4MjFnMmw4SmRtWERiaEtlN1lqOUprWHdYV0hNdGxHWTFueE91WjdpaGFlWUlYbHRNd0hPMHljZi9WTlRZcytzNmREMFRteXVURC8wckRJRHJoWFBHRHNxUTk0U09ENUREMngzNUJlaE9LUk9JbVg0QjR2MEQwVDQ2WDVSWHZGNGUxSjNtRHlaMnVVcWhKVkFFY05zeW5mOG82M2F6bWJkVlN6L3RZcUZHdDhDMFVRT2tlTTV0SWJEb0p5TmpHR1FjR05LMWRBZTZWekk3R2sxRnplVjhydnc1VkJtVXFhUHpXNkxKRHhLRjR6WjRKZ3JoaExqZ2RjTmhyTEhYRjVBWXVzcTg5QTdMTzNyZlc0V3RpM3Y4TkM5a0pkTWVUSXZnNEtJamtCM2Y3TjQ1ODNtV25oNXRoOFhzZmhGWHA1OG1ObWJXc3pLZTB3cG9hd3pmYnhZMnl1S21oUkFEU1VPVGUxdENZUzNqWUVQbDZ4Z0VjZUplTUx0OHY2dTVvRnhodVBWR3NpZ0FySGxhUlhoYWFsczM3cVU2cFRhMWRrOVBIOXV5eERKUlM1djFCd2Vncmp0bGMyM2hGSS8rRnppY05iUEtFWVFoMDljaDd4SDhvcW1xc3VEWTVTczRtNTVpeE16MVFKeTRYN1FKZVlDcFU2TktxS0NMcDh4YUd2UlM5SzZYdUpYUExrWVFrbnhzV2xqV3E0VVRvKzNYcXFpQ1laNFNCcFBQT1MzRkVPV3o3Vk5rR21mbkRFNWhiTjUzTlJON2s2bDNIZW02NUVsSjNxcjhuSWNJQUtLbElPV0RUWnJxS21ZV3BxL1NEVk53OU1xT0NIV3cyTHFtcVZPelBoV1RmaHZYV2p3WjltN3VMUjdGOE1PSzRnOEdqU2ZxVUc1VVlqM3hiMGtuZEVXTGNjQ3pCZGIzTmRHektONkhRTUhTRFROSmRiRzZILzd4UFFsbGcvaUNNVVZJUFBTcGp2aHJSVzYyWVFSdU9Pd2c0Q3p5M0Y2d0U3L3B2MEZXTFM4QWJsSGVZckNEQnMzWmRYNVRGek15ajJjRCtwbHBGak9EdENLY3MvVDg5TFlQT0tHeWF1VVMyS3hMK09MbGl2VDRNeUVRYk0rcFJMSXF4K1g0dlhBT2N1MnJReWllVmcvendIOFRIRlBZZEVzL1A3djQ5MkVqdGU4KzIzd1lMdzM3Nm50MUdrYkZNdVlBbzVkSmVaSmZZbHpEL3ZlZGhiaUJRNno4SG93ZFFVYWxaUUxYSkdZd3RocjZJZGNmYURZZmc3WGxROURuQU9BRysyUlF6YW5JVHJYYUw3dDFRTkJNN1U4aW5GcTlZeGFRT3lzRUYyN2tjTnByVzBreTk3Zys2ckszUTI4OFMzZzRSU3pZejZMNVRvZjFFQmsxYXZwdGM2emJQUHJ0S1BPQmxpQzZiTDEreGt1TVl0TFFDWFhsVDdubUdJWDNSZ3gzQkFxWnNRR1dSUkZ4UWlFVis5bU9oeVNMWVJ3SWQvNUloYThHN3RiaWhTRzkvbnlYSFVrSUVYcHZhMDAyK0xSU2tpdEJIQzY2WFNnUk1xQWhHR2NpOUNVWUREV1BOYTVxbm9kZVBKQm9sUmthSkhsR1BvQ3QyUTlRaWJTS2wyT3d5b3JLQ0JiRGcvbzVzQWJXZmFyYnVGclF0ejNQOTVpUjVOV0NTNHBEOUludVFCd2xjMlFoSVBUUmUzKytYWngwc0ErcStUMTdWZnNYV3pVZWx4eHl2b1E4emVMUFMwYm51MjhtT0NLQWJFeUZhbUFCSSszRUpJOThndGR4RUpKRlN5ZGRHdHhPYzEzaXArK1Zyc3hmbzVlZldqYU1Jdjh3QjU0WVBZR3FHTXdBdTV0RFFuQTUrRXU3b0NaK1JCMVBhcjludVdhT0F4L2FVZHprc1hHc2o5dksySHVWUlZ6UWhsUjc3K2lhSTZtZ3NOMTluYWJ5dkd2U0hFbWhBREQvWWtmL0NGMnZHU3MzL3JNQk51NHVuVHNYcXQ1WTlyaEtROEdYeFdDY1U0Z3NrNlJFMXBhM1FSWmRvbS9SQXl3Qk9vbEFZSHBOVjdiUTNid1NTS1NjeWVodUlyMmRuMUo2YkhjZ0NrbHVZMVNHUk1BeVJUWTNNYit4emk0a1BaSVNIdkhDVWo3T3lGSVQ5aTRKTDR5Nm1FaW1MWVFsQU5OMGwwR0k1aGt6UXJkYSt6elozU01tV1VhM1gzWTBoQnMvcDVOc1RLUXFDdXhod0xVWFA3OTZXbGpabnlLRHlRenVOc2RFckpIbHB5M2dvT3BlQ0EzOTJkQWNBTnBqZTlyanR3R2gzUzNGQnhMN1RvZTEvZUZrNVdmOTNRVzVpSmh0TGJucGllVGFtaEdqdzhSajEwRGVSSFFDR2lXZHJreE53WDR1ZW9YYnpsSi9RZmxVZ0hTMXJLczYyeUs5RXdKWm1NbS8rTUFYVSs0dm1IcjN4MnBjcncwUUZHOHJhVWZmdEdGZnA0SG5tMXNKaWh5RDFZQ0FsbkErSzF0U3dIbUtoOHVIUU92M1BUbldJc2NDZEFQTjB2RG5jSVJ5aFZhWFBxVTA4c3JEcmpIdllZamFsOXIrU1JkVkJpcGVkZHpxZ09MR3VFZXhVWXlralllaytqZUMyQ3Z0K2oyZCtidit1citqVjM0ZHM5THZGUisrbVJyd1BVTXpHWmU3U0JyN09iYUFwTTNVSWJmbTVmWFZxSHVKd1hkdzRuRWhoVEtwZ0hKQ3k2dzI3akxTOUpnZDBlcTV3d04ra1lBOG5RbkQyTUIwMXU4czg4dFhUL1QwdUo1WjRlZEhrdVo5eXo2VFAvR2ZoR1FIWW04UTZVU0hFQUFwcjVRVHVUQnh1bDFNTm9jUDQwaWpERDgrYzRLZWN0ZDhMREtET3RxNStFVTV2ZXVhTSt0TzhyTS8rU0dNV1RrTUJtNEpBYU5ORFhZUmlDNnk5MXBVYzEwdUJ3dnlCTFduMDFLTXJjNm9xYzNYS3hLc2Y1Q216T2NqKzVZSlRBN1hqbjlRTnRrZThFRjJKU1RVcFhLV3VYbVR3TEFSaXRoTzZzYWovNFBEYnVwTUZ4clpBWUVyWU1saW1RbnRWanlBTzR6NGlVUzhhYThacS9kY3Z6QWkvSnBPSlBBZVJtWnN0RzdOVVBhUFZOVlQ4dUNpaFY3N1dZa2dmUWFRcU4zOFhERnR2T3FmQ2ZmVm81UkJEazZPL2RYeHRjVkhBaU90VGs0NVBCdEIvVXJLSDY3YWhwM0pYNTdCdFdXd2pWVmZlMzB6VFIwUTJ0UXpOUHpLdlVxLzhXVEFYQnZ5dnZvc0RsS2d5QnIrQW5ESVl3T2pCVGJOb013OHN3R1ArUllQSmFXOGY2QldmT2hxOWM0RW1POEl1TUFVMU9IVC9PWStWVThLYjI1cWg3R2VBTExGU2l6YXNpU21tY2JNRTFGY0dQcVNjQkJlU1E1d05kU3NXa0RXZXRYendDTGV2OE1JL3RPTHo4WkFMSm4xYmhkckczTkNvV2c4UC9nM1lORklvdG9ZbzJhUGdneHdjV2pRZUsxK0hNKzVueGhHaGdOcGNpeVIwd1BnNTdRYjgvWkd3MXFWWmtQRE1TM3hpK1JzR3lnSzlkWEpNK3NXMm5IaUwrT0NDODVZUkpVWjAxcXVXSXBjZHkxWnRGbktsaVlEeHNFc1RBK05yQ2JFNDI1ZmF0YXpLek04WGtZcnEwbXFvY3dPbHVPN3hicXUydzZ1OFNpdkpOSmMvYy93QStWZUJoMzlvLzV4UE1zZEgrS0NOam9CSmh2SUpSYlNOUXRBVUFmcXZkNjJKWVRTVUtodkxRdUE3TTRPalpFSzBQV2FPdU1YTjM5NmlYd0NoM0tzUGdocTJLSkhBdTh6QThGQlhxMHVGamN1citWVklhU3FtVGhTQmxkY0xCWjVXVzBOSERQYWZYUk5ZdXg5bHAxYTFsTitON09oNWRmWUxWaCtQb3c4T0cya0lQWUQ5R3h4bVcrQjM0YjNMeThva0JOOElkVURHelBiNCtVQmNFS0lWaHFKcWNMTURtSFYxWG9yUDYxZ1o2ak1TdXBXY1JHcDBsMXNqbFpETGZKTWx3ZCt5MmpjQTkxeTBvY1YxWW5IZ2R6eUhFcGtBa1ljazh5Vy96VXZlT2NVWE50Y3UvOHI3clMrSmpHbGpzS2JZZXhpQW5xTEs2dGJXa2NpRC96Rmk5dENrS2c0RWw4Y1lKMmVnRVZmQVQyd0xneDFsWkpxZURDV3lwcS9mQUx3RU0yakoyV3ZwaGNuYlFtdjZKUEFiVHRzenM0V3FJWUY5MHVmaUZjc1UyWmg3d011Vkx3UVJzeEJ5MzdXSzR3VTA5MzNjWDVjc3BoK3poM1ZGNkdFeGJhbUptTmZqU0pyTGlhNS9Jcmo4OU92YWtjT1ZTcmdNVWtpWnprQWhTZCtTK3MrZzgzS2NpNXA4QXhKa3JtMTBGRFhkczNkQmNiaTdWY1NtYnlWNDcwYnd3Y2E3bHdQMURZMmluZzhLNkZ4dVBkbzUxbGFtUDlrZFRPUlV6Ylc4cFhtYXgwdE5OV1ZGejVuejM0MXJGWnVpRHlYSFpycW9wUGVBMDRPYnA2REp4NDFwWWZtcUd2cmUyd1lKa2RBbjdWL2dWM3Qwc1BMeUNESUVPTlB2cmVPaTIvNXZyNlRrbVYxcUJMaGgyNGFnUDdqclN0and6Rnl2YkpNUkw4cU9YK1pBMERYUG5yQ2U1NWVuNks2c2JaTnd3aGQ5NktlKy83VVI2M1VKM0xyc2pBSVJpMUs3aFZtV1dxVGV4UzVQdnR2b3hJaHN5OUpTNmtmNnpJM3NuTzlOOEJsaXlYL1hmU1JBdmJYanZZQnQ5UDBST3NGa2VJMS8wcGxkOW4rdWVkWVZuVFZwcEpoTEx3b2h1UHVGS2hlUWp0dnBjaWpKZ2FXSUM0bEtpaXJsRk9tcDVJaFRaUGVmTGRKbHJBQm82bHZUcDRRSmR1YmNoaVpSMGpOUTBhMWVENTRzcTAwQzdnVk1HSndPcW1Zc3NPQ3J4TXVISjBscHZxQWNqeHFTZ1Jzamh1d1VLbmRoUGxnUFFPOGwvbFIxa1dFZGl3d1JZMFB6ZXE0UGdrQkVhY2ZQT0lQS2NwZnA0Znc0WUtyOUxDVHBCb25SZVlWL2ZDRnNvRHFEY0Jhb1FRNU5KOHlxa2Q4czF6K2FMRjJvZ0l0c1Axa3QyL0F6bTgyb1czNzVMV1RYZkdIaThzaWxIcFdQSk91STZ2ZEdWQlJIMXNwUGdPeDh4NEV0L1d2ck84S0pwOWZNVVpqY3AwcnhTRXpmUW52WGpxTSs4Z0Nid3Q1YlZLUVlMcDMzbHJ3b29NVDZxR2VjZzJ2MkVEaEhOZ0E0VU8rNk9oaVRhZ3c5NFpOaGdSNG5HYVYwUFdkc29WeG1EUEg0TlViSHhMQU5pT2FnRmpPTmJibVU2ekswOTJwR1ZSd1oxSWVkdmc5eVJyemdlT0J6WVRuRGpGZXQwNk5MRU5VVlBXTzlQMCtDQkdYQnF0M1ZoSm5oOHBuWUx4YzBoZjUrVllDa2tTTkFqV1RwZGFqblkwNnNxcW5pQ3FwNzhmK0NqUkFBUDZWTVVpU1RvWmhBTU5DSEo4VC9KRFpRVWQxemVJdlBOeVArVEswNnY4U3FQMEZpeFA1ek44NWlaK2JRSU9hbDVhTGg2NDFWRWNYVlFlUnIzOEhUSDRDc2VSTFZlN0NDK2pMSFRQYTlKY1ZXY3MvSUNjMWRNVlJoQndxK0dNYmdmNWlCbFNvUXpMOUNkMHBHQ3dVTlduaS9pcHRlUzR1L3NrV3pVSW9BRXlIUXZlUFR0SkRBQ3VzUVJhdDR6eFU3Vk85eDFxQ3lFR1pZNVdDTjZTY0NhRHd1eSs0NG5IMExqcG1HVkVrUXJoeExzMmhiUU92R3pZZlIxZGxVU3NaKzg1ejlReno2dkxIZmYxaTZDWkZIUmFnOXRMOWxhZmt6VDhHZTBQRnNxV3cwWFdodlBJd0FTc1A0VnFTVHRSWFQrYTdkdXRHY290dGcyS2lrUWp0UjFJaXBzWGRYenViSm81cGIwcjBwWU4rM3FDSlJOYzh6ZWJqZm9xTzQ3VHdSODRKRGtKZHYwRHFXNEhseW03dW0yaDcydDBsMzJ3WmdPR1d3eXRJRXkrbzFMdXlrNzFhQ0syQkRuS0lnNjRNQStYWWJ1cUM5VzduSUIvcG5MQlozMXBBY3ZoR0o1YUpQQzJyd3lVOFNOaWhMS1pBT1ltdnR1S2hTZ01lemZHY0EvUHhEMVByYnFIa3UvTmpJTmZxUVJlR1ZWSzNURyszYzg5WUo4dmJhdmRMNHprdnMxRmFyTEZLNDQ4dG1jZkpMREFUNmNqSEJibnMvTTlkNUhrZWYxZ09JNFh0QmE1UFpuM0N5akkwODlIeGJhVCtIRXRUNnlwWGtSNlZ3L0ZFcEx6YnNuUXFLdzZCMG52dHU4RHcwOXlmVFVxVWhCU1JYM2ZHUzd3US9rKzFlbDhJajBpVUNadUVLVi9ZV014cXN2RFJqT09TVmNiek5YZzlJZUFoeEdFVy9kS1hta0RLRHdVNnB1Mmw3SkpDK2tGYWdZOVFjT2hZZDkvRXFFa3UwSEdSWDlJZGRUZzI3bThROFUxSVZEM0RYQnBXWVd5K3lVZmRJMFNVYlcwQWZsMTg5dlJUd253Q2NnMy9XV0FDZ2d4TlJyZElFY1ZmS2tKbDhOM2l5bnlyVWZWQUl1RFJjOUJtR2YwVjlKMk5WcmRUcjhPaFRuOElxeFQxZExHUnlFZXE0TGR2cnVmcHdsekEzTjA2QThZOU9mY2Y2M1NxSjVuMEQ0b093U3RZSytrN3IzSlZ2NVJFK1grejAwY1pyMTk1RjNDNklGWDNmRWtCUmpRb3lvc0ZPa2RudTlIeVhyRyt3bVRKUWI5dEdlcVdWT0plVU1RMnRqYzl3c05RbEM5VSs1a1g2UDNXSnUxWVRGNjdRODdHNzVIVkZ1T0N0azZadk9xUE5yMkR0Z3hndUFBMnVGblRrTVRlaE96ZG1YYVpXOE8zemp5OVd4RCt2QnJXRHFVdUhIVklzcE5ZS2hQWGVnUllTcUxBY1l6QlkrYklzWUFSMFcyemdHZFpILzVEamdsckczZzVoRm1FaVR1bGh3Y1RuUDlCS01laVVFVy81bis2L1RsbGFqOEQ1Y2ZoNndXRTVQa3VRaHRPbXZXbkhoR1RuT1cxYzh1Ym9yalcwQXpVb3dVc1NlR2l4bDdwYm9TOEJvQjZ1bG9tdDVzWWFwbldrV1lZWDJUWDUwUXFCM3JVSndiSlpwUEt6VC9kaTVUOW14Z3pJR3RZK3kxTG1ZRjF4SVJ5ZEZRbTRtaFR6VGNmMXBaWWl1WUtWKzBqNGZTbG1XQUlhSlpiY3dpVTZiNnFNb3ZVVjR0SmdwYWlyakxVYnkzSVRST1RuUklBRjBCRkprTThkTzdtS0Q0OHJiMk9jL0ZCU2V0RE5zUzhHaGZUa2k2VVVZOU8vMTh0ZzBIN2FmS2tYb3NvYlh4Q1c1RDFXamJDK0xiRnpOQWYzVXU1TnFlcGtGWUNwQ1NjQ2dyYTNMSENVUDQrNW5qbkxaREJyUmx1eVAzY1AwUC9lVFFwMFJpWm1lODhtSTYzVTluVTNTUUV3RE9MVXVEamMyOXNSMGFrWjNGeDR6cUZJM0cySVpDUVM0eXhBNEhkWXVNU3hlN2QyNnBqS0NZUGlBNnpGVnpEL05NaUwveXVEdDd6QlpmaGt5Q2pOMjJRVjEyV01jZTJOenB3UzZjTVl3dTZjN09PZFAzM3oxaFk3YUgvTk1Pem1nVUdNQjVGQk5jdXp0ZDN0YlhuR0VZY01TR3FoMWpCL3pzR05OOG5KSEQ2M2N5dzRFK2xqdmV6WWpuMTFCOWNGTWNTcjFja21IYmdDUmgxNXVla0VkcWRjMUNZbk02NDV0UEg4cWFDY3kxdVBYdE5KUkRMSGJ6Y2dMRnBSV3RobHVnU1J5ZThhanFlZGNHTEFnS0hpVkVYQUdrVzRPeWxPbmNHSXhQL1BrKzhkb25ZbWp6bWcyN2Z3V0hmbWZMSWVSY2ZoMXFic2pzZ3hpOHk1WlB2OE4zOVpmOWx3Vm1mNjhVc2J3aVQwcUZXVEF0cmE0RXVrTnhtQWU3NUMwVS82dHk5dENhbGhFdWFNNlg1Q093K2lKaXlHQ3cyY1VGM3dRemliQ1NJYjVDeDBWZ0p1R01GVWk2K2gwcFVFVWlVK1RnYWxmajdraStoVGZEWXZvdTV0SUNTYjM4UlNSOEdsMU1PNThtRWQ5eUtwOWFYdE5DRHNUQmdrUGltSTNUMVluNi9lZ3NZZTE4ekVCYkhtdXpDTzk3ZG9aT013U1FTUThNVXhoK1p1Q0xxK3BkdHBMYUlUNis5ZEFiTU93bnllMWxjU2NpTEkvUFdObEJnTFIxYUQ4akhZR3EzYTJsOW9MT2NBTlpDa2h0ZVljSzBkMy9ESDFxS0pycm14a3VaWkxBcFNEdFVETVhjRGJnRG5WRS9tYzBnYjV2SFFUZmRTc3JvWjRNN3F1Si9memJXajREa3JaSDJqdFlNU0RxdGppU29xc2NXb2thYWZGTCtFOGhFVVVnY0FlcFJNZUdVNmRiVzhKTWJpb3Z5aFRnNXRQVGtGZ1N2MUkvWk1NZTNiZEp6RE9zWHdFV2hwUEpHYTUrN2I4SWNtdStwY2VMY1ZTSDQwZzRjT2Z0NjNmVmo3dGQzdmFOUmdQWjlwUWljZlFVR0lQMWRwdnpWVnhBdDNTeklkRUM0V2hrNGwvUUVNelNkSUxaNzZ1NHFsNGExUnorMVFHZFo3bkFJalErakxoN2NjeFFqcnZRUFV5ajBqcmI2R0syMzBEck5DMnkvV25xSUNKdExGVVJBS2syQ1crUlIrWW13MUdjVDRNeWVKMFVab1J4K05SclFYT0Q3SWE0L3BpMUxyaVA3YkdVK1U3NkdVR0JlcG1KZGdVdXpBNkJZSFZRb3d0MEtGdVd6R2RjTmdvTUR2QlNtUTFEbVJ3MHJkTFpZVlIrSmJMRGFuWjlBMTF0SlNPUmdUWVd4R0RUU1luVGx3SnFJSXJxRGpGRFgvdjVmelBnNlZWYlpkTE1yaVNwVU9TVWVabFJ3Ujg5aFdMOVR4SnV6d0xYa2dQTEcrc2pCZnM2YUVuVGRxM1FDN2ZYdiswV1kwVzE0RHNkb1pSWFNCdzQzNkR2VVcvd2k3WE5PZzR5Vk9vVEJQTlJrNmk3eUJCZWhxN21lQ0tUeUVCSWgzZE9BMzZBaDFyeUtFcHpuNUJHRVpNNENzZzd6bmZCQkdjZkQyOHBGeks3U01ieStuVHJlVlMrcnR6ekdBSGNCd3d4aE4zcXNHODV1WkxkRWMvcWNXTnBhZ09pT0d0blVqMEQyeTNJSXdOY1JwUmVYUlVXVFl2YUYxZjlleVhQN0JPV3BWcGU4TjRxazF4OWtaTm03VVlhNlA3ZlRiU2NCWTdWczFRVU1qRE1yTXdFcXJDK042TXNGWGZNZlgxc2pJOWNEU0tYazVLazdjQVJRWUFuQ2Z3ZGJSckJpNWtjY1VlNS92SG9EZUM4Q2M3N2hqb0t5Y28wdEJ4cis3R0JMRWVLNEFtcjBTSndET2ZCR1IzUVlwM005YjZPaGJiL09hbG9JRXJlNWI0dFV4N0d1aERUSFhjTERaM3FyS1dRN3NnaVlTTVc0ekdlcjRNOUFVVXpRMSs4Vm5FL1ViMHV3Ty9kU2J6MitNZzZqMlo1c3lESS9Oa1Y5YVIyMDdsSnYwZXJpelpMTzZHa0FYNW1kTWZNT00xdUNpVStSbkZuTElsQ2l6a1Y4MjdLWmFqZ040L09meWhjNXIrZWZjQXcvZUxGUi9ER0s5MGFwRTM4TTM1WUR1Z2U4cnRhWDRmSDV4N1lpUnhMK2ZGaXBKTUxnTVVPYmFxNVFPeGJZOG91TDUvTTZmNUFENE1hcVdGOHA4YklGRnRESkFuR1JJNzdONk1kY2VScmVFNWNSY1B1Ly9EeWI1ZjFlWmFxOE1YUDhyazlabFRCNlZoSDVrK2NHY2M0THJJVkpxODNKaVA1Rkx0TGdzNTE4NE5McEpNRVdNR3J4OFJ1RFgxVHYwSW9GblplQVYxRDJldUF4a0YwVTVyby8yWm9vanNwN0tKeklwVklxSWJPSkhGR1c1ZHlKTXRPb2puTSt2OUIxdWkrWXpML05rdHpmaXFlM0UzN1hFNFp1YmZXcnJ5L2VDdTZwV0J5MS90RWdMOVRJeGZzMW51VVZwUGpzanQ0dXZRM3Q1aU0zeTJ1ejJyQm1MR295ZGNMOWt0UHZWRU0yM3NTbTMwNGw1RkZLRG00RVJvLzZKWmIyZVh3UU9LZEdqOXpJU2dPNk1DNGM4M0I3SFJ6bFpVd1lPTkhmamRza0dSK3V5OW9rNEd4V0FLQTVhN1JwREZ1dGUyWHRnQzVPNklleUxiT2czVDZneWJIcnkwdE05dkk2czQwSDdXOTVUVVh0NjFNdTl0WEVxNmZSa0gxMEJSWU9rK1AxUVIwVDk4cm1hbXNySXU2ZzhHS0lxendPRUI2MzRhWGpFSTlkdytRazNTV2FYNTExT1N6NmZLOTlFRDdmUXFwRTNybHcrUFh3YkNoSXdVMXVZa2JxWUErWGRsNlUzc1lIdjNzTzZwZVNaREZscURjaTFTUUZ0MHZXVXRFdE1oVHdLdzVLWDRDd0hINitpUUVhazc1MXhheFE4d29ZczhQU2tOVnNsN3hrdkNSM1Q1QVI4anZ6OFA3dnZ1Ny9NdldpL29HdGZreGwrbzVxeUhHWVFReWg3VFUzSzM4MTBDUEhZOW5ocEhyeXBNTWM1dzIrczVTRVE5SGdhWDA2RkVvQjBId1U3eVVoNXVlcy93MTVNekhiS0VuS0Myd3NDTVpWN3lyVUtjdFlJVC9EdXdLTmlnRUNqTlNDdzJwbnJsOEJicUFOaEtjc0VkaVR6c3haZWlWT2Job0ZnZVVQL3FOMjdLWDRKcDN4OU8xNFBvVTQ5SSt2TEhidytudkNWanV3K21NQ3R4Z20zUnl1c2QwdXloeTVkelJQYjEvMmtSN2lNd2llZzAzcHBURG5NZjdHOHFzeTNocU1kTW41cEwwcHpQT21DOXlBT1l0VUdLNlAybDZBTFVNUWhVV29HM3NrZ0VEMW9vT1k0bDNaS3Y0aC9tdkk3d1l3aTRNWk5va3IvSitYWGZHQlplTkxISUd5WGVXUk9vZGx1OS90UThyNVFiVndxdVozMEdRcklSVXVxOVhHWHh5blcyQ0pZT1hTME9TcnBYa2ZmbU9xZ1c2eVF3YUdoVGZvbHRCTEdweUZoeFBPbm9saGdyeFJidkJtRHRjT0UrMyttTDk4Q0IvS2tFWnFiK25oTmp6WWh3OGhmSXg5TCtjazlKcFd0MER2MHZsTFVhZ3dGdzdIb3pTclpjWE0welFtb2J2aUFqTnAxWWVxZ2s0S1FzTmNrbFZxZjVvQjh5NUM5d1plbUxNYUFESThpaEd4dkIxeERvaTR6VmJJWllVY0F0L0h6bzRKbnFlTXhsRm1mcEhHL2tXMUxwZlNZTHpNQzY0T1FBR01QejRvUllMODczZ2tSbXdJYU91LzduQndMTXhZZWZuUHJ0eWdvaFJTaHU4ME56VjlNRFFZMTFuUloxbVdmclRYR3IvRzZ5TW9IN0pidXU0UjNTRVp1RjdxVUhtUFhRdDhYKzhkOFNwZzN4Y2RWZ2pudEZ5UVhIMWt3RmRzWmdWajY5WDEwUkx3cHIzbEM2aVAzUjBQOVhKM2lSazBUNjYzSEZHdUVLaXNxcmhmWmoveTloeDYra20xM0NLa2orMkZKeFFPeXF1WE9EWFNsbVYvSlVsSytuQVJ1WkpJeWxPeXp1My9ZUXVZcmFCOXBVY3d3RWtlUFRaQUk3VjdBeHl6WHRkK3ZnWlpVZ1VnbUFjQXd3RkRUWmRHUlJVbE56NTZlc1RzNm5IOUFDWk40eERjbkdIZ0t1dk5zZE9oVDR0Vnd6MllzbW5wTy9waThhOUtHbkkzTldJQlNlSXVWYlhPZEN6VVdzSTJGQlFSSlhjVTh4Umc2UTFCampQVGxrQmJ2cDV5eFFRLzRCM3htZUE5Y2lGYm1uQ2ZlS0E2bFFNQlVSV2t5amkvcGJrM0dmREhTQmw3R29KMFZPOCtpdlZEbVJNRGdhbkRveFJ1OE9abXpsSmd3MmtlY1Jtb2VNa1NBRVgxTThjRGs2Zi9ISHJrSkFPbTFtZ2VUZWFhYWpJWEd5aWtOaG9vNm8wblFRTTU3UzNLcjNlaC9ncFp4MVhGZmVyejFUWDdWUEowUWljNG95REpnTzZObFNMUXhodzdwMGtpb25qMFQveUxjN25RNkRZVk92Vk16a3ozUGt4NUZsMEJFd1FtM3NJVkxjcDFuWExrczJiMjI1ZnVjVll1aERSNkZ1Zm8xUVlQQWw2ejhocDFmaExGdUwxRjRBWkhaVG1YRWNiemhxRVNEZkFKcGd1N00xVEV3ZHJxTkc2My9vS0UwWUtyTEZqdDB2NXEyM1FsRTkvdkhFb284MHhHNTdObnFsWTcwNTFDeEtmSHkzSGY4L2VVV1NRUEVoRy9wYTh4NUk3SnErSm1zQWovVFFxaklocWk5YjczMG5jZU1tMTExbTQ5QmRXRWtjSTRqaEpoa1VPc0pRUjg3VnFXWlV6cElaODlUNitPSVNMT0RzUlk4ZysxVWh4eGsxM1l2SzJSb3BuYnhxRDlSbTJ0a3ZnSXJvTVErRHAxTnlCNDdHYzZmZXhqcUVPVTAyYkQ4WWEySGVocFVhTTZqY2JyQXRnVC93aExhVnpQRHd0YmdaNHE2ZjlrUnVwM2lNREl2bUZiRktmYVdPMlYwZURkbVBWM0k2S09UVzIzOGoyRmVLb1lKWFRBVGFaUUo5UDl5VXVnV2wwQW5qLzQzNDI1QlBraXNrLzJnK0tPNk9kQ2o5WFdRUmIzWGM3YytxV1FsV3NDbjQ5WlJsTUJ3U1lhS0FZQy9BWVVXOExBcGh5c2hLWVNOVmhqNGJwRWR2dGN3c1BuallmbS9ielJCc3FWeG1YMHlVYnRPazZDeTdOZElVMEg1ODZtdEhOdmhLcHljQ1I3Ylk4OWtPaTREU3UvQUExSzIxYkF2NElpbkdYUkFkVExudGpyTjFvbWJsYU5OenRtWjk5Sjk3bmxQN0FzeVpUNkJFaW55Q2gzb2V5ejduRmh0M2d0TVNpMUw3NEpqZjRNcStNMVNyNmh2U0luZmhWRm5hSHZWK043cTA1WFVycFFpSU1UZlFXTElDRVZXMVJZWHZXUWZPUlBUbWt1aWl0bHlaRFFWS0ZhK3l1S2QxSVVyNXl6bXBtZnRsbFRKSHMwMEZnY04vSEU3TEU4UkRPeFpkcEs3SlYyclRqQ0Zzd241OU5UeXR3dzdaT1hoR0dvVWtSQWE5QkYvSktJS0tlVGUwRnY4bE9lSkU2ZW5RQjRlbHdTempMQmpObFREZGhlcWE4dkZlbklXZ3diSWNBbUNIVUVhWXZkUkNVK2hwMng3NkR1YzY0N0NndHRmanFzZjdmT1FleGRRSm9ub3V4MEZpOFV6SEtUZTZJTzJBcXNnc0J3R1JsejRhQVUvbEtMbnRIMHN2MWtETE5LckZkTEErQTJ1NjA4UFo4U3l2VVh6bXVXWHZIVDVjWVFheUhmVm1keHJwa05MMzBNNEF1dlNOUTV5V1djaTJ3SnlOWDBaRXpJSm5wQnZYd1NIMGZzcisvdmpiaWRuam0xNzNuWWFaSkFLUkY3cDBoQlgzSUlKeVpDSFJYZUp3SWVrZ2h4R3ZXMWI1OEw1QmdaSmRPMDBiYnlhZlI3RUxyOWZITVl1Z2xNS2lVZXU1anFseWRqNXIvWjJpNkhnWE40bDJyOWx2ZDdrOEJPVWFkRVh1SkVFazFOVU1zN2g2bm0vTnplQWhLWUhLejZoNmJybk00OXdLOWU1SndMYWlWdGFUZS8vRFNxSmx5YkVTeU1LL1pYMHcxNFpWMVRCcG1VRGlFNFo4UzZpcGQ5MTg1OURicWVhZEo0cHJwcitFbWswUGwyaXhTUTJGTTYzT0MrOXppWjVmdlN5a2hYVWx2VitHdDN4bFFkZGpWVjVSZFlFZ3B0cmY4cVJrcnk5ZVN0Z0hLdWVsUmZST1NRSjV0a0E2ejFFSmwxSVRBcU1Ma2xBN1lzMnpqNmN4S2lpcWFBN2swWHNnbjlFNjIxMFhsZU41SG9JZ1BBOHhUbVZHQkt1Q0dTNTl2K25lMjNmSytZTE56RmkrT1JqNVVjYTJndnVac3BzMjJSTnRmR0diekl0US9VSEhwSFR5c1pzUmQ2emlEQW5XTXJybGpkV0cwZTRXeHl0YjNab3J1NTZ5UEhNZEdHNEc3R0ZuWGVudUF6MjVEeDdXZFhKT1pEK29abHlhS2VqVThBRzdhYVRNajEwZHJTY2lxWU1GMjFTNFdIak1MSWtPei9hS1JST2pnL3NoSHRaeEFPQ1pnak5wUnBHNEZDWnBUdEhLTWdrYXIwSVVqdEs1ZDVUYi9UOWVFZzBCcFd4WklzTmRCdWFRNFRXQXBkWktESCt2WWc0b05Ud1Ewb21GWkltVmNkN3VURFN4UmNncFRlR1pTcEJPSXhlU2VOZzBmd0hBMUQ2U1huTXhDT3JLNkg2bm9EMXhCOWVtbjcxbDJyVWwyZ3BMcUovdDRBbmFpbm03eFhQb0h2VHNjNE9uTDkzTU04SVNXSnRvTlIvUkNWK2Qzb1diamh4dGY3T1Q1c24yZmR5bXRDUVcySDVPN2tjNlBWQU5Hc0M5cUNkVmV1ajgvVWVNZEk4NWJpUm5heUl5UXJzZ3lRQlZtbGJNYW9ZK2YxYzErZVgxS1RRUk9aZFVwc3BNZkQ4L050WmNKZzZjcmlEY0NZUzZQVFhkUHZwTEJIalFUd3lQWUFXZFFPQzZIMGhDeWlmcGF1ZmNRN1RjUDZDSzU5UGZ5SE9XV1pxODlscDlIYVZZTTNKdEdsQ21OM2pGMzFzWG5Ydk5iVlZmTGJWRndzanhvQjkvRktPRWhlNWtHK2wxRDMrQlYrdEVYUm1ncVR3LzkzeEgvcGllckVkWURFQUtrSlh1SGo4Q21yUVU2U09ZK1ltV1NIVHh6THZ5bndST0g4d2pIaWIrL1RXbTdtZVVPR29yd05NWFpvQWd3VERLMHhpZUg3ZEcwUmxuMmFPcGwrWmx3RGszZ01NQlJ1YWtscVVUS04vSW5HR1BHSWJFNm9zV0NQTUNzRVJWUTJtZ3pRMHlIOEl5c2hvQnNLL2NRa1BnYXQ3cEdjQmZXbm5GV29TekJlOXJ2ZUl0NCtmcU1rWldEZHZ6UkZxZ2hoaEJIL0RQeEhvbC94MDRSenVUTm1yMGUxcmtTbHJzeXdkbnU3cThlVmVBVDc5YVlGdWtoV05EOHQ5UTFRNXJQa0MwK0VrQjFXTnlrSGVtL29qdGw1Z3d4elV5czJuZUUzbkRmWU00cHgzMnI0M3BpRzU5QUc2RW1mQkpndllvYWZ2aFJHbkVlQ05GRFIvTzliT0IycWZ5VnltTVZzenNJSnZwcHAzR1oyOWJmKzR1TDFRaitxcUZ4VGxhNXloaDlvYVMvMFcxOFVMQkhrK2NTOGJTRlUvazZwbFg0d1NTTjlMQ2IwTFZ2Z3Nya2syQXdVQW9WK2VCcWliNnI1NThPbnNmQmNWMzNPVlMyazlnNzRHOE1uWTBzaVlESVBoeW11bzJvZkRoUmdjd1BTZFJPTVpIdGtFbXNZcDhKaTA2VUVKNjc4SkJFWXJFNHVDOEJtc0ZDdm1RV2doWjFQSm9sSGw3eU5HeTBmbHRkeFNSWUtMUjh0YTRmQTNDNUd0S0xra01VNDlFWjJGWjRXekhuUWdqWlJ6SjhVVnFFRElOZXlCcGh1bFo5OS95N0pRN3gxYnp2ZTlqdWNla3I1RjJmdkJwWmZNa0YwVXFUZTdDblg4RXJBK1dXRlRFK252VlM0YWhGc0cyb1BNUE91V0NEQW44Q2VVVGd2MUFxcUE0ZGpieWgzTFRiY2J3c05YSUQrVmVuOEpLVEQ2MmN4VmhieEdZZ1ozMi9rcDk0cUlwVUdtdHdLUFc1c0F4YXdYa1VMVlozSVBZMkp3SzhOeUVsL3pxVS8yZTByUndhNTl4TDFWRW13NHZxZFBORi8wTHdOZnd2VU54bXQ0dm5oQmk3OEJGbFZXUmdPcTRacUJwcjZRWFVCYkRZSVJ0UFk3enVaQTl1eTdMZjRKWUliS2V2WEFkZzIvM0JHTzR3dUdpR2lqTGpzNklKTUpDL3hwazd2ZjN2ZTJLbGhjeE5NSzBzdi9GaHlqK3A3L1VqcStGUjVLbThGY0VxSloydFpKMm5vek9Mc0hWZWs1MStKSjQxS3loQ29yaUYvTmszMnI1Wkp0aG94NWNVamhXTTBQWG9qRXZBcHB5VldGM056Mm52ZkcrcWFQYldoWEowL2dYcXk2eHFRaDhYNDk5VDBNbzQ5TUpQM0xyRkNqalFaMkppazZ6MzdSdStpY3pOTTdlSHRVTWkrbzVURjlNeDBUNS9LZUNQTGVZK0tRMHhRc05IdmJHWFRpM3dmU2ZhR3RTU2VrSm4xV0FoTVo4Y05NRXdUUXdlK3BrSUF1MVJSbS9selNFbTdxdjhzazhxeVQrRW9WTC93dVd4T21pQk5xZTV3MVRFSEdtK2p0Nzc5bTJJRXQ1ak9YMHNINmJSYUZZVVZkZUpjZjhrc21pS3VCMjV4Q0FlaW5XaUtlMlZUeXdKcVF1QktJeS8wT2JPVFdtTGlMcXh2VlF1dE1vOTAwKzEvR2VBOUl6cUUrbG5YVkdWR1kxYWEvM2Mrak8vZjU4Sjk0ZFk3RU50Y1dLWklYSHdybU1KYVZvbDhzZEhNeGpYRm1MdWtnREErNVJ6NTlnZmNicW9QYjJaQ1RlZkU2UStGZkVQWlkwaDVjeW1kODIzN01ycnVnVXdmUTNrNnp2NytlS1A1UVZyZmtIVmU2MkhNeTcyUEV0RXVpQ2ZLUGZiT0VBcy92ZnRJS0xwYVJlZzluOU50TTFHcFEydXNkU1dodVNlMDRXcnY2UjFEV3VWU2NkellENnFQeGFYUlIwWXJMLzlPU2tBRDRIcnVJL1JDSXVFVFBlZ0ZnU0hNUFlkclhUK1RZWjhBSWdhY0Z5NHR0dTYxWUpud202SGJVbE4zKzFOZGJTbnhoUitwZUNFY3YrRHFiSW1TM2o3RTk0TGhBeWgrU1EzV01Ndnh2bmJDbUM0dXJpcWRKWmkxNnVlbFVocEhqNVpoWi9qdHA0VW9vRnZ6UXp3R3JTeTFSc2d1MHdkcGp1T29iQ0orWENneFVjWmdDOTZVY09yQUpkcmMxMkpDekRqUXdza0plMS9XcjJvTTEyYlRzLzl3YXFsZ1dUcVlUa1I0dHgydmU2dHA4Rk5URXNVeGp5QVlpVHRvZzB0SXJXNU1OQnhFNGZPNXY3OGh6dFd1d3hLamkzU3BuQTBVWkRvYVpzQU9ocDlSNWkxSUlrUUF3UjNTVlg5Q1lVdkdCYzJqSDJ4Z2xYQ3RjM3F6cVVwbFAvRVRudFYzamlBOENhYWlJQ2h2enpma2R3MVZsNkFoYVk3Qm1TclNSQlIvMlJWb1lYSmd1czBxRXlQa3V5OXJtcWdYWGNoS05VS2cyaDQ3cU9kZm1ad3N0c0lMRlNNN2NTaVc2ak5aMXlUNUFpNVpra0dhWDZDYXJpckx6WElEcyt0aUtpMW9NS3BEYnhmTC8zWnFFR3luZDVUZDhueUZQM1dFd0wzQWFubGVzUm9nSnB0V1pZc0xRekNFS1B1djVxNDcrcjNJQWRvTmszV2EwWmpKRnd6amJjR3hsTDFpdEdweTRDRS82aHppWW9mVkZNUkdLSlNuRHdHeG1RMm41VlNRY2RHNUE5YUdWZVhGK0ROZmhMa29hUW9IQURUUE5JcFZ0WXVMNzRRUldPVDZwSFV0QTY5U200N1BUaXd4TEdTOVN6RGJoVVJWWVBHaUo0VDZGdy9pUkFPNXdlV3QrTjM3c0VGWjZQY0RhcHA5NmNLWjcyd0JxTWJVZXRMQWRGeEUwNjhOYWQxNERKUFdCTXNPYWVzOHhvK21ybXFKV0pTcU1BcUhVT21qc2JwRXgzODNwN25kK0NqcHlGNDhpamFDNmJNaFhqTGNKL0pYQllMYmhJQWpiREpwb0JtbzV6SnQxUk81Q3FBYWhVbzB2VkJxdlA0N1NZaWZJZEdjZG8ycFlaQXdqczUzL243bDNzTnY5WHVOUElZWlY1bWYvU3p0NldndkNXNlBFM1ZHVDNJYnh4ZTQrYVNLSDYxRnRqQ3RPSjBycUlJUHVpUkF0U1QyWlZoMm1GTmMxWTZ4bmo1NjV1NGlYUkw2L0ZTQzBXc3krY3VWYWJhVkNyMHVaTldybVdja1hHUFgyTEpuZWJBaGM4K25aaFdnTzZjcTVTS1dhZktUVXAyT3QxTTFHTHgxUnpLYVdUbmxhMkFiZ01kL2FVTFdXbmpKL3duOE5WdDVEMnZoK2wzQmRIMEVTNjJZWkthVmJvWlBSZ3R1QTVrV29nWWtEanJ1RUFjNElLSXpRYWt2M1l0YnF0Z2QvMVBoT0lsRGdDUEp2ZG16UkNPU1lzV2FTQ3J4bDQvZHRZZ0ErUFFPQ3BmSWpzbWptR01Uc2pCU1hvczhBT2ZlQUsrc0RrdUNRR09KOXE2M2dtb09ENjNDbEZYMXozaExyaS84dkRjRFdQaStYQ292aUk3cEFMR3dzM1dCd0FtdE1FcHZDdzg0aytTRkpPb2hGa25rUExwMm9pRnZ3Y0FkeTkvOGl3eWEvS1ZnZEcvc1A2ejFIbWc1eDB2SmRkcndhVXVtcDg2NEJhWFMxcHpvTE4vYytLUGwyRWtoeFh0ZnBYWCt2RzkzNG9TVmhBMEN0RzBDY2pvdGJEWjhuclM5RWJUdHdZRGdZQWFGUG5mbTZPQU1EUSt3NTdEeUt5UXI0RkJkMWxJV1RjYkhleitiL29WRisxNHRHSmxocjREbE9VOW5uUjdTZ3pxV1FnclhuNGdKdllEdzBRNjczOHRCY0plUk1qQ1pBOHJhUlJHWmFJSCtNKzFlcllKcFprVDY5YVJzWXltK3dWRm5zdUtPem9xcGRJaGFPR250ZlM3aTM3anNCS2E5WEtkRjVoTmpINmp2eHZWdG1EU0tKbDdrMWhHd0hQa0VTNExVV2Zic1B6K09HU1VwWWx3aGdiSmZnc0N4OEpKeGtkaUVVZzRYbmlZL290MkpxQWxGWTVoYk04RUxZalFjL0IxdVVNNlNaWlJ3cThEYUk4VkZVNlQ1YzVhNUdIYlQyZ3JSZnBZNXJ6MUlxTmVJVmxyaGh2dWxaeldaVjZQR3l5MFAzaTczMzhobWNqQkp0ODRlbEQ2UDRXL1lIUFIvOHdyMWYybkdHaS82ejBCczZwZlFwOStsZW11Q0R1c3dHNmNCZU50UGczbDNaZTl0b2tMSkE4c2R4NXZqelJrMEkzRU5lTWs4Und3YVVQRkxkWE9tSVcvak1nVVorMCtUUGV2bTZXcGM1WCthWU11QkpnVzRQcDRBbmZYZmwzN3h0TXhRWkhUeituRFJKZEx4VG16UytCclE2aUxCRTRaelh5NHlqN3l5SThVY0JNRFhkYjY4OGtoOXVORm4rRGYyWXN2OFBuclR2ekFXdno0dHBEcjJtdGIxVmlpTmNGTlFKdmoybFBCNXJQd3VQendsVVNnem1GNjVoT2t6UHk3bmlNb1p1SXorMWtJRjI2dG1nb2ZuZ1V5ek4vbVRDNUIzNXlqeThFS1MzWG9jZW9Vc0pvQTNqQWt2ZVB2T1FZc25qakdYdys4TndKTGM0QzVtZTRZa0lzRU9kbFVpd1l1WmtaN0hnU1QvVmJvMEhGTnBrL0UxZi9CRW42Mmh3NUUrZ0h0eFpjMWhZSURWSmlHRGhrdjQyenkxUStKT2tCa1g2UzBiZk5UZUR1dDkwNCtVOVl4Y2x4TzZmR09SRGxacEVZR2pQUXU1QUhQZDNEU0pNVnhyUmkwbHNtZm0zTEJuM3h1RmZZc2NjZUxIZ2R2SE1PZWRLRW9HMU9HVjRjd0JlVmJtUnk4MndxbkFmdWhYUGxYM05lZ29mYkhac0VQeHpnT1dFYThldlZFSkdGZmpaVW9LNWU1Q0dwSlJEN3NZdTk4TTFIOG4rN1huUktGSHltamdTaFU2enBkcmQwb2dYZmtyd0p1QU5uUlBWSHNjTG9yNE9jcmVvdDlGTFh3QmljTmU3dmtCQjZibmNnZmlJaHliWDA4K3ptS2xIYUtUU1FjN1Jjb0VZcXc3UG81cjEySmZmTndoRUQ3L0JKNzhVZXZtWmpwYTBiS3hETEwxanFqRk9lRE55VXlRNE5nOXRWMVdCMldKYU5lRkhaaGU3dUU1YlNsUUtxazgvaTBLSlY2d3Jpd1hWeDBsdDBYY1hSMnpXRVlQNSt2QkJIMkVic2FNMTZGWmlOelprOCszMVJCODJrZFdYQ0prbzlRa3JPUitjNjV1Uzc4NDNkL2RFVkRoYitXS29wMk5MUFBzUmJXcGZMczBCTkwxMWJnNTduaTB4bEo1blM5QTd0eUNKNlB1N0VsSkVPbXFQZkt2Q1RGeGFLK1RjV0pwZHNXRWQ3U1VDWVZSZzQxdE14RjF4MzZjcmR4bWcyUFlCenlVQkF1UHpDWDR3SjdzN3ZYMDhiV3RNdDVMMEpMQWp6Z0t6a1Y1NFBSdjNib3ZsaEZqR1VFRE81MHNrWmxtYkR3czB4UURaWWk3Wlo2YytISDEwVVQ5NVQzcHp5eTdVc0dSOXJ2VEszSlVOeU1ZMVMvZHpZcDVmRkJPR3BKUVl1TmlwWXhHL1hkNlZkaHBuMzZ6WENFZlNDb2ZJeVNuU3FDODUxRGd3MnlKOENhVGM2Sk4yWEtjTkdTcUlLcFdTc1hZNGhqdmZ1REpxQmFKdUZuVzEvQjFBZVFuVEYzbU8za0VpT09aYUU5RkRpZGozaDB3RXgvYXJ1L1MzV3dBS2Rtb096SWdMWWVqVWlocW9jL1AzWEZONnJCUkV0RlA0cXk4RGVBcWVUNVRPaitOM29Ed0pwQTNsV2dwQ0V5SHNnaW5MdEVpM3JpOVVNYTVKNCtTSktPd29DU09ISjJFRFJBNlFMR0g1RGgraWI4VDdEWGlrTUZmcHMzOHFlSThTREZVV1dsU0lJa1lnaWMwemJkU1l1Q3FxRjVTTWZJU2U2UU9wZnlTOEdYWG5sYU05cEEwMkYrV2JBMGJJYUZheVVqZDF0M25LODk1Uis0ZmZTYzUvdmF3dFREVzcxdlZxQnY3S2hWMi9qNlRSR0NMMkYrNTRWT0c5bjBIUkpNVlFoK3dwOUhmZ1FvSy9PbEFSUTlmUHlPa1ZnNWV0TE0wMWZMWk5KeGFmOGl5dGZwT294aXlSOE90RDROaFFNM2EwaUhlc1BaQXhsMEdIbzg1S3pYeUtrZ2FMOGM1SlBWRHZrWFMxVHpMVG9tTVBRRkl0a25PWGovYUxkTGIxeDAxdjRaekp1SWlMR2MyejlsWnZHczJGRmdBVDluWG9zVzVBNWptd2VIclpQaHVBUVphWTNtaC9kaDZoaU0vSFE2cHpHcE03RHdKdU5GbVRaQUFEdVpBS3ovYmpCVm8xR2IraTBkVFpYY0E3OEkrVWVkc3dvRGhIMmhXeHVqZVNkZHNYVVprR214L3dIQ1VieUcybFp4Tmp4STAyVVM3bGZ3eEUrekJaOFc3UXVBb094dkVWSm9BYlY0dllEb0trRG9yWDBHYk9zOVhxZUNIYXhIclN6SGQzeEVlbEtDZ1FDNkZoWjIxR0dQZ2tWUEtxd2pnYjNmNHFUN3ZxejFiRFNIbDY2dUgrQVBaT3lxRTUxenhtSzR3dGVaTWQ4Rk1jZTZ2eUowYTZmeWg5LzBLQW1iNHMyZitkVWVmQ3VKbnhwZ0ZML1RnY2tkT0FxaStGeUNGS3BmU2lJalQ4MFVpdGI0ejlKdXpaQnFMYlRtd05XZUcrelFzelA1S1FPTldhN1NtQjhkV3pobEl5bVp5VGFEdUpta0k5MTFFUmF1TnMzdHdvYkFrd0p3WkJ1Mys3SFV1MzUyNzBGeDZ1cU15clNITVV6SmNNcEl5Nm5oMmszb3RHNEN2RVEyeVNyYXN4RGExS3RqZWUweEc1bUE5bnBzRlJXajR3dTNMRFE5RkYrR3RxSWZVVUFaNGdRVDZRTm82cG00Wi93dit1UGZ3VlUrVk1zYytSYWZabkpNdkpTeWpGQjFRUXFzSFRWT3BYdkRvYlZkbVZSenFGOVZENGhWL3cwcWIvZFh4ZUkwWDVaNE1WTUNqRlp2am53VnNyOGl4SWFiaEIwZVp4RUk2QTdST09zVXZYMUNUeHc4Q1ZVVXJzN2QwOURGb1J6aldhT2VOZU9FVC9PeC9yKzdqZzFJTVVSRWlsT2hyQVZYMkhqWWUyVlp0YVZGaDdUM3VlMVRLQmRVdFFKMm1wZlZEdHg2UGcvSGpuL3J0Q0NsbzRhNHVJSXhJYjBFWDdqOXB2QWhydU96MWJ3Z0Foem1pV3pWTWViVUhaamU5c0QzMFg2Qk14RUhvbG5qdnA2eFBJSS9QaDVEekxydmYrOFJ1M3JPa3NpdDBoeGY4UzBhVzVxc3I3U3pMd2FiR25YTWpEc2JCeVJ1REgxd1NoQXVOT1pTUk1RM2NVS1FOemExT2h1WEMxUE9QR1RjaWs0NTBGTmZ6STloY042R3RzTERSQWFoVGFvK3JLRm1XUERQcDdvM0d6SUhGNVU3NHhzMGJoYThWUjhBVXR5Mkozdm10dkdHVUoyYTIrSWgreUpoRzFYaHJHd2RaaXRPMFNJVWcxL2krRTBvR2dXdG9lUUJIL2FHeXdQY0pBZWkvY0R0TkZST3hyMlNzM3dXUVIxZUlQV1BjTXFlMDBobEM2bEFtWjZnZldQVmpQSzVLdXAxVElCV1hWeHpQYXBwZmdDSlQrdWdiN283SUVCRy92ajFtb1JpSUdmYytRaURRMElab21zZHExdFVIYXg5eVIvV3Z6YlNhQlhVendNRSt5N0Jpdk5KTFE2NWZlWlNwMXFyY2Y0N01JSlUvN2RCY0Zib3FWQUpYZjNBNHJ1enA2aWFoV3BHd3g4MWhpUm9rN0s4c3UwK2hFNnBWaTJ3TGo2d09SNDdoM2FObENpUm9IcmZlUmltbHVQOWhNNktkWGdkUStqVmF4anlRK2VwN0c5b3hNSG5VcVltV3E5a2YzVDQ0SnN1aVNReTQxYUZGSVYzVUptMDZOTTZsTFoxdDhMRWtINU5KK1pUS2JVa0lrZG9TNk8yWVB0Y2N4YXZoelFrS1B6N3VGcFdwd3hFMTJPMmcrUkpZcnJXTWZTU1hrOHpFZjBEMmlDNFJvRWh1cmY1TURPd2ZndlJwZUFtYk5rZUZQR0M4SmVPRng4bkx1U0VqaTRYWGcvMFFrdHV1Q21IT0pNZVh6RTlrejQraWxGVkl4bWZWbm9GZWpOV1JZcnBPYThWZHhBWjFKanBpRHhCWnBVODdDeXUxNzNJWURUTFQranhSUHpTY2l2STltVVIrbmV5TUNhcWhEd3c0QlJtU2N1M2dFUVd1TXQ4eVBhbFV4ZVJwQ2k3N2pBaUJ4L2ZNVjFYdUxUMlBaSHhJbDkxMUdQV29QeHhIVFVHTXRVN2NyamlwZTJrMHR2bWpHUm96L1UrVDV0N293L1h5OVE0dEg5U2Q2ajhkVDZ2OThWVmVsaEhkejNZdGtHVjk3bE1YOEtPSzF2Mk92NSszak16RmZqTWRyaXdLbTFWbWdTYmhLUkl5anBjOUlUZXdMWG01bkk3dXVrOExneUF4SEZScGxHOGN4NDFrRUh3c1BqTHlhUXRlcjVGOTBEbzF5Mi9wblRWMGxNd3V2eFphV0tTdFpCNEYvWUNZYTljS1dQdHdqNERqQ2J4eExkeFplWjZ2SUx4WGZhSjV1WmhBMndUdjQzVUpKQUU3eG1teEM0dzhSUkNSb3UxaFVaeHJsUHVFYk4zS2JMbEZvZW1ZU0hFTmhySUhyeFhZRjIzcjcvOWxhcDNCMndNeFdadTM3cEFDMTRSYWo1aEYzN3NOVjF3M25MLzRPNURJUXlHRDJUN2ZROGZmN2dDTmlYY2ZySm11V2Z2aGhCVXNmbFU1UXBIaXR5WGE1c24zK3l0aGJGbGxuYjZSYWw4V3RSSDFFSEpSbGpjTHdDazl3ZEpFVnBxM0VLVDNhNDFyR1phNHE2ZTV4MFRMNW96V3lFRU9QTmpWL3RieFh3ak5Rb1B4MmxqRFRTNXlORktqVUZycW8zQVJqd3dzaUdzcEpVWmIzTnh4dlkyODVwQzhMaGpDUWRTeElYV1RRdmRVU256NENUNllWRkdFVFNLWC9VYVA1S0RQczVLR3lIcnpsb0dhY1dJd0FzYU5jMGhUaGR2WWx1OWd6QjY4TENIUU82b3h0S3JrYW5ZOUVoK1RKbk5ybDJBVnVWUEVlczAzNnpXN2EvUGFUcU5zdy9IakY0THdtS0dSMTFYR3dReEs2cU1aVmJpTDgvVTd5RVFYbXZCMjc5aENERmJZdkM0ZGRlTjQxd1dTL0xIb1Qwai9NRjNFR01VN0pCeE4xajZLMS9wL3JtU3c2VjloTDBOeG56MCtmaFlXQlhyVHR5QjhSMGZEMU4wTlBjU3lFNGpaVjk0NS9YUVZSTGQyOHR1Vms2eEUxSG0xd1pVUHkzWUtZOWtRRDJKdTdId0lZK0NpYWkrdTJaRzNiWFZ4WWw0Vnk0K1VYUFdaVE1XTFpGK3NRYXUrem9WaUJIM0xuVFJoK2dGUUxBNUdObmhrYnNxbU03OGNKeXQyTWdaS3JsUXVOMkRMeXFuT3FVU1JnMnJIOUFDMG5OR3FLWDhERHc2b1g4UWd1a2orSVdBMk84dytBeWxQNmNjbjkzWU4zeVczUWJxSTZGbmZzVjBOME43ZXJlaGRaU2xNdnZDVkY0LzlObGJCaG9xMzc4bjdINEtaS1ZWTkdQZWY3SDhHcEFCa2VXbmFCNmVrYTBjUUZvK1JTZ01yKytYQWhkdzJWZnZQZlA2a3BDSlpReGZYRW4xS2dMK0dEbEkxK2xxTGQ5bGVsaHU2cXQ5NHhzUXRDQmw3UkFkdGVrM2hHbjNHWUtkc3lWVXRreDVFaFJGWFYwQ2E3VlBTU0pVWEhlUG84Z1BjMFVTaC9RZmJHS3BCY29aTmRLMGNaN2s5bjU4Ukg5KzJTWUZVMWRrVmx0eUVxLzJ1T21zZHFRdEMrVE03UWxFcW00KzhzSWMxdkExamppdkpBNlVFMUF4TnlGVWVDa3hYOWZvQlhHWDJEYktQUWdIaXZCVXFJTWRSSUh1dUpwVlFSTlpnY01BM1pLaHFlNnQ3NWxvZHM5YTJRc2U1SFVrSmNmWTJvSE9xYnlkeTg4MHdERFlncXNlRWpHVVBHRXlyQzF6K1pxMTl1ZnhsSFlLRnZZRjZSMHlKeFovUjZ3U3JIYyt5bUlxMzZQUkFYNnVNbEZQZDVxM3lReEhVVlBnNFJMSFN4anR5RG96UlM3bXRUWkRMN1pjampvdGhHUVJ0bUZkbjFUamMwV0JjN0o0ZUFQbDN4cVZ5RG9zUTR1bGx3M050bWhPVHV1d044RjBpbnl0dFpvMEx5Um9tRzhEZU1WR2hlQlV4dVZKYUhBS1ZwKzc0eXg1SnBZT09kaENMb3Nac0JaRzVhS2E4VEwwNE1GRDF6ZEhPak9zMXlpZU5HWkpXV1RWcXRtMmpSTTFXeGZpbWdEejRTcHRMQ1hxemxhWityRHBZeWtPTmZhbTdNMi84S0U4c3NxWEkrWklZNy9QZGQ4WHVhcnhOMEExaTRrZWRLZnhUSy9MMjRXOWNBd3pIWWxUS2ZJWVlleFRUNmFyUkFtQzF1Y1lDWWtxczkrb3cxWmNKYzhMU1VBQXJiMEFpYjZRRWdyWWlSbE5zR0lTMXBpbzhwdnhaTVZoZDRQSy9wOWpjY3pIUVpQWUpzTkdrclVwTWdybWZvcjRZaTE0OEd4OE40SkptRTE2K0k4ZWxHU0lFQ3FjckRMZmNGWlUvWlY1VDRyU0FHQ0lKd3VDK29iVDBBbUpUaW5yd2p3Y1ZDK2NpaEhpYzMvc1ZLZFY0SUY2ZUNDTEsycG9ZNWJDLzYyR2IyTlpDbDNnQ1ZnUUN6MlNPL2x0ZCs3aUFGV2VlL216dmI0R1luRnFrTkNrOFlMOHc4L2Rqck1nMkZab3llYWwzb25lK1M4MWUwY0VnQmZlV3dIY28yMHFhSE1RYmNPS3JEbTI5TGZNVGJvSDUzUDBhRW03aEhpazR5bmJ5UEhIdys1WnJkMGEyZEtvSUhKZmkrbis4eFErblNxNGJRb2krUjZ0b2pHWlFqY29GVXhTeFFPendRVEpIM1dOZWZ2aTJwdEdOajYwUHFaS3BGMHhRQ0I3VUhFeVFrb0lYM2VZbXRUc09uRUVPQWRONmYrdEszMDg4TVZ6TGFkdkJTbFZtdFVENzJKbnY1VWNVR0dMQThQaDBtMlo4T1NEdjU0RUEvMUpqbGorZnBacVl2ZnI4Wms3RUE2alMrR0R0bDN4MHZBNzBJQTAva2hib0ZLUlNWMUo1ZllmMTV2NGFEV1VjWTN0VHRudkF1dDJQbmJUWVU3azFvazYwU3hoaC9pMzdJUnR2aEd0bzdsQ09aeDM4eHc4N2FCOEJ5b1hlcEV1dEdlNkcxcDhvdHZPZFZ2WGZibTdacG5QcUFxbXIrS3UrRW5mSW9vaGtMOGdGQmlIcmxUOGZvMGo4M1gyOU9TSmV2bnBYNXFXQjEydDhWbmFNaHJzRVIzZTJLaytXelU2SVYrcGxka0c0RW1obEdzY1d2QW9FQXYyZStUeHEvRm5tUzZ6UmIxMndrUXBMblRhZlhsM0d4YnQyS0xFRzdmUGRrOExxalNYS09nZU84TmxpenhIdzdsSXg4ZXJDd0dYbGhoS1BPUVIreHpyM09tRVQwNFo4TWdUT0xHbHN3QVRCYkp6WmZQZTM5TXRLQUFnaVFUbzNmMUZHd3RURzlTc0loVlIycnBsK0dxZWVCWHBJbUR1V0pSZGFUU1A1aXdQekIzSXFwN2tVbWtTWjNvOXA0TkpzN2pUako5Q3lSYkNSL2NSTXdVd1RMbFNvcUNGVzVLc05oS2tzVzhGQ3ZhZTNadXZDMmtES09uL3FNMnBqVmFBVWRBVXljT0sxWnlXdTBEdERNa0pBKzJRZ1hwckNXRFpGOWZqRThGRU02T25SODJrZXRBUHdmWkNvakNpQWk4SUFPSmZYTnl4STlWc1NGZERySmVzcDVWTG5hN1hJS05FQ2tqaCtNMkl1VGZRdWUzTmgveUFCNTJwVllHVkcxaU1UdGE0eFVzVXBJMFNnYmtDVHJ2Ykhjd3U4bWVmekRFWXJaaEZJelhna0dnYUprM0NRYTFncjNmOW9Fa2lHVnM1THdRODNhK0d0TUFzNUhVSm9QdDdNQmd3RmFiUDdaOHRZRlcvU25Eb3F3b3pRNWYxdStoN1JNbzBpNXppT2hmYmg4YlpZWVc5cm9Wc1ZQakxNbFZoekQrUjl1VDh1M1hFZUhHUGpCai9Lejk1eEh0b0Z1WDcvWU5VeDNrVElLM2htVkgwcUJaT2pZbWpaKzhadmFmQnBGUTBkdnJqOVdOa3p0YUo5QVNoMWJjM0w3Q2xWTEs3R0RPSDJlaGNMZ3pDaE5sRTZNeUJZZStCbXJPY2hBTEY2RVVlTGlsM1dRUUsrdVZ1elJWdEZ5RnhZNlBDTGxYdHBqVXNUU1Awa3pmQ0VjN09raGxrdWFkOGlkMnB3OTNURjdvMHl3aTZ0RGtQUlhKVS96TWhHWXdhVkFYNHdQMUVkbHdCRHM5S1ZsVnVmWHZkSkIxYk94akdGL0RTQktjd3pxUTdVSkZadVFYUFZEOVMwelg2eUF2ZDNxbnNvNDFUMmUwU0tuVEd2RzlJeVlyckN2T3huTXN2U0NSemN4TEM1TGRlakpwK2Vja0I3aG9ldzZ0SXJqUERLZ205bkM3ZitBSVc4OEFWVkcrSVlEUXJIbkhBeWZDRVBLVllMa1F6L05QY0NJK0dYQ2IvUmtnMkppU2V3QzlCcklGclgzdFlOWTl5Szlzai9HTnV2OUN2dUh6TXJDWWNrdjY5MXhKMzV6Ri91bEl5VGJmSFhsTWZWb05tNjJZa1JYNTFkOGg0dFBYRWFZV2JBVEJJTWxtcFJDSDhFSW1Ca1ZkNUlmNDhiNVM4V2pDT0RXcjdaS3d2RXJOaGI1YU8zOHViMUZkVEFHNFFYZE1lNURkUXZoVnc1NGwyak1zbEtsbEk3bFBGT05lY24xV1FZT3BsQkx3SkI2dGN5NENMaEhCTDBicGhLM3RCZWFDSFZNeWNyeDViUjAycEJWdlRlU3RFMkxCWWxRRzIxcUU1a05nK1RyQ2U4OGhpVTY3dWZFY1E0enpraWRPN2gvZnRYQTlsWm5QcC8vTldoUkdaS0VnTU0xa1BwY3Y5UktYZnBJcGF5RjV5bmUyNVV1MHZYd3oxZ05zcjZOVUFNNVRIL01oT3hJRmtEa1QzUGpIUGpVeDRHMnVkOEVCOENFczJSSEY5R3BvT0pMZjBzSXJVdks3cithQlNBUndtekl3cVhRUmNVM2VVbHkrRDlOczZIQVkvb0tEUW5ZeVdzTi9URzg0U1M0UXJYQWt4bzRYQUNFVksvQ1NpRkVZeUE5Z0d0NDAyUFN4RVhiNXVCVUo5cllpT2tRMmNtWWxOWUpGYjRrZGxhU0dHeHhNYWFTZm9KelFTa2VqcmpLV2V4MGJhVVhsS3NzNzBzK0l5a0MxV3Z6KzNTNEhUQUVWazUzMW9QazFuamxHWEp0QUJWOTB2SVFjSDErVU5CZmhXY2dIUmhCR21vSVRJR0hYRlcvMTNPaTlVZkhyZnpwVzNxUzJZRStuVFlrOXU3MWFKTnNTb1NNcy9KZDBweThDb283MUN1Y1dUNnd3N2Q2SUhiS0l6RnE2K01mek01YWJIYWlQY2NXTDk3RmJjRzFWWmJsa2xValI2am5DZFJMMHkwTEZ1TWoydWdkOXFmeDdNV1NwSlRuWlZHVm5JakZla1lhMmFjd3Q0QU1MMnhCdU9ncXh5OTZ6bjN5WmxsNnZ3RUtRcXVwTXQyNXY4WURKc2l3bkRvQm9sWEpyb0MwY01oYVdnaFhqdlBGNytRdWxpdHpKN1BFTEFNMDgvQkdZOHBEY1llWkdTZVZTNVNicUhqVTErVTkzb1BLcW52aUJkWUZjSVR3b1F3RmlTNkVTYm81MVBXMVhhcmJzdnRUWUs3RjdRT0R0RndGZW92QWhqTVZjN3BKMnVGNmV4aHRLakVqcXMvWmYzZnlLT0VUT1V0MWZhelluQnZPdWc4Q3RtQ0xUUXpyNVNLZmhZQzdwRTVTNTNyY1I1WVdtaWVkeVYwdmRGVEdpcDE3aU5DUDVtSEZoNkwwYVJlRGszdi93cnhObUpqQ2g2K2J6T0NXZWYxRk9NM0FwQlFtNDRjRi9nVDNnUDUydjdRZEp4U2RYUG9Sa1k3YU1pZDduelVuL3ppblk2LzNocEdzaWx2eGpDcnE1MzUzZVF6YUMrSHQxRDBHNWhYdElSZlFEOEhTYjZLWDVZdGVhdVlhUEtxYVo5b3JnbTNlN3l5Vmo0a3VhK3UyRGdwenhwVEEwZGs2cHFsMDZhVlpERWtQUlluTnNVc1V0OXRya1RDZkdWcWFGbU1IMXU1M21rYTdUTC9EdWg0dEZzWmlaSU1jbE9OQVJ0YkN6cG5URkovUGxIZmhIcExzOCtlaHR1WGJKcmN6QStjcUpFMENwSTR2NGtNa3FJclB5UFJvZmVBVE1uTE9NQnQxL2Q2am5nclJTb0NSWGFWQngwb25YckJCNC9WejY3S0ZtaDNWelhNT216NzJmSHF4TnZ3Uy82Y09KUnJtdnVmdnZFUFpzR3BBc01hQ2dCM21aSnJKTGh2bWxYSTI5S3lGUUVMbjlpYVBNY3AyMWhUeHVXRkthN0FmcWZ1anFpU0ZxQ0UxakF3eGdqQVU0ZVIyMi9uNVV2Zk1INC96WVpIWFlzdXc0UGpLdm9vSXpPRGxvQ09jTVIxSHFVVG9yZHVMVUZRdS9yYjgvTkdPY1p6d1R2QnV2S2xNaUtFamFqTnp5VStNbGpTbmlON21WUDVaVTQ3QXk0bGJEbGR4Vm42QUdsMmZHaThzeTliZmZvNG01bzY1eFY2YWw2a3dvUitQdWFwYVl4K2FldXNYNjJoUDNTaWNaUXdPYzJSb2x5eHpkSG43Kyt1VXJ2YnQ1a1c3M09yMkZDNWIvdWo5NVQrbWc1V25MZXFRVkppMmt4OWl1UkMwTzdaMlRQUkpNbkFLcEVLSDdmSTkwNlNpNjNZMU5Bckh1OWxiMmtiQVhSMUphY1VqL3AzQnE0K0JJSGNlWjhnY3M5SXVBOE1nTmkvaFFsS0lWeUhna0NBeGw4K0tqL3F1SGpUTkp5OEpVZ1hBTFU5VkUyQmFaWmU5SkdpY3JRSjYxd2VtYjZqMURKSzYxRm0rZXkra0JqTWU3VXZhbm9sZjFYdmlKcTh3MVFCWTZkTkZPSnJ4RS9EYnNGbjhxb1FjNlYvYm4zSi94SGxrcDIzcXNaMTQ3emIyTUlUTWZ3UjhTclEzOUhLVjdjUFJ0UHdZWTRXMEhHUjhhdWlHUlJEek9QZDRvOFZyTHFGUVpJMjJ0bmp2R2k1eklhU2NvNXUyL09lSFhYRnMrSVAwL245R3BMYUpVL1VBc0Nhb1RRdkVwVzQ0RGM4aGhWQnFaZjZmbWdrcjYybnVFRjRLTVVqenJraU5nRXJmc1lQZHViUVZ3Z1lvZVJ2bWw1WHNlTzU3VzBmRlBOWXVRSkY3YXVTaDBqMXZpR1Z0TEJnRVFYZzR2OW5NTmxBN2J6N0ROdlZXNlN3TEl3OERuUFRxWlYrUllJQjEyYkE4Q1ZpT3YwN3Bya3J0RnlRdGNDK1FTV1Y5RWgyQ2NPZ0FTa1RBWjF0MWI0b3RBK3lKMjQxTDV6bmh1TjNiOWpJTC9TRE5QZFdNb3llV2dyZ09JMzQzSmhkRktMWUt0RTRlNlUyaHJGd3g5eEZwbEl6bDRxNEI1RHFocnBwc0JQSnNCTGt6WlRkZ3MwNlpIQVJVZUZKWXZUN256Q2xPS1Y5R283OFJJVkV3b0piV2lJeGRYSXEzZktJQnRZSGxZMVJXd3NlOXBtYzQ2THVjSDlWRDE2b1lpcy9QSXNOUndQWEpYYUlPanpzYlltL0tCS3ZmQmk1R1JqRkxjSXliWFc3aDdBYmxQUVdQWm9tT0YzRTAvQ283emV6cDFLOXRadGVKUURJbUM2UTZlQlZLa0hURWpGWmd6REhUMWhHbExsUmwrbFlzUDJnVDBtOWZzYml3VlkyQzZQOHhwNHlzR25GYmhLa1BFd2FXNUUrTUI0MFRDY29ra2RUL0JxemtVaTVoUUdKVHpXcjg2UDltTkVhNkE0NS8yS2tndEV2aDJaQkI2MVhPR3RFeS9EU244Wng3YitSZ2FOS3orQlRaaTRPRVloNUFEd0YwVW5mdTJRcEpwQzYzUGxIS3lpcWlsTGhTM1d2aS9ENjNxVTZEeEJ5YXIvQmdXS2daWE9qQTI2aHljMERTcit4aFFnb0lkSkRKaWFSS2NDaFVFTVNqUTNPV1ZXb0k0QUU4NWFHQnlPOVNtcUZxbTJWYU9GeElXM0o5VEcvVTNVNExzNEV2M2dyWkRVaXlMVXpacjhCQkUzbW4xZGJYYVAyYXlIb0NwU0k0S09BVVd1YVF5Z1FOcS9hTmVZVlNzM2dnb2IvUXlQYVg3aWJKZy9rYUJXS2hPbStEMFBMaGFoaW13L2dKSmFLcDlMS0pqQjJGQ3d6MW1KUHVYdS9VaW9obHcrRUk4TG9HYXRGemxFQmxDNjN4dStPZXBrbXJMNGk5OXlTTkVBZ1VuY29NMm0zSUF3cTViWWhLdjZMajNVMjBQcm9yalFYU3lVcXBVYnFzNWpXY29Lc2t2dTdyQVJXZ2hlVzZBM09MSTZIb3ZoNHpOd2ZaQmh3b0ZISHhsT3ZMN2xXVmdOaHhlV3F5ekpRREl5ZGhkdHUxcXR6Q01SZG9GY3QrQmNvZ1o5T3pwL1FEUVRHNFZVUWlZNGRuQllyT3FIOWZyVGk3STBiK3AvZ1VGMjNGR1NodUlheDZMRVFhNnlVOTlsV0d4ekRUeE95b3lnaUtjUEpobXVCTmZJKzdKeGoxYWlZaEpuOCtaNGRzbEJtTzU3akk4V3F0Ti9aVlQzYVBIb3RMSFVaZFBkQysrSWFNUWxEUzdsRXRaektlOVJqOE5meCtlS25wWDFMZjVXTkNZWjRwTGU1K3FDZG04eC9KSldMNzVNbGxUdmJIMkF6eWdmcmdmSEtmMWhCZ3F6Wm1EeU1EWU1oVFNvQU5uU2ZwQ0pqeHo3SDBqZjBjL0haRmMyM3Y3SVl6VUg4Q1Q3NGNuL0ZPd20zQlB5V2dCbWp4SmNEYnlycVRDYVc2U3UvN2N0RmszY2NOZ1hDUS9CQkw3Wm9oYlFHSUV3QjRYM2xNc2ltL2dCbHNzK3RkcG1ZamthdG83VUx0VUhxUU5NNWNpMDloa0gzVU8ra0VwMDRiL3VCd1NwOEoxa3k3WllBbjA4ZEdwMHd6ZGNEMmxHVHQweE9icEpKOGRRbXJZeWJRaEZSRkNJVmFlZ2RWUmIwdzd5c3A0UUZMdWI4YlVsWHpwQ3BoM0VobWViMUg4Z0o5QmZweWpPL1lVUFRUb01SQ2RTeCs3Q3BwZWlpZzhWN3gxeGY0V3BwYWRGRTZHU1NkQVFLMkRxZkNtVlFwa1JPMGIydXlGZlpBcjdOaDdHRWY1b3RMcE9BbmJ5em1aUDNKSTFPMHdnSmRxcDZ3NHIvUTlySmNnOXMwUlorVmF0aEYrYTJvQVQxcitkSEJIRVRucGVOMnZob3ZlQWQ1c3dQNTd0T0ZtT3dzWlVDSEU4UHlWRU53MzVWb3I2VWpCdnZmVnk0SEprU3E3dU41aWJzcmZibWltQk56eXQvSUtBdVpFQnd1aHZXdm01SVRORzZ4UTRRQzhScnlNUlp0L2VWQWhUVUMwemZUVkZqbUdySTFXdkNibzROdy9icGQ4QUV2a29YeElwWUdYcFRIbFdSRXIwMkkyVU9JVUF3clU4aGdrcVhLTjdqQlVTUUtyTG5kUElqZkdDclN4S2RXTy90Y1JiRm1KdGt1NkREd2tZYTNjZk96SXNicG10NStXSGJudkJ2Y3lyMWY2RHBTMVQ1Vlg3Rll4L1g1RzJnM0NKWW04NzdaVG1SdEpmVi93MVVqNzJSSXBsMWpoU2FJU0NxVG1BS0pKWnhlUjdXTUk3Wm1zQUhYUDNzLzNuMmN5UTlMSDRGVjJ4NTFpVzluRkxsQUxrOGFKVG4zTWZMY1ozeFVKYU95YVdGVlFCdnc2K0hUclM5bEVYTGNYSlNheUlQUGdlZTVIVDQ0V0hRb21uVjNielVLYW5ubE9nQW9IU01BYnRCQjF3UmV4L29jMzJtMHlFaDVOdTlaTmQrWmpKREFEWHlrdGdFcEpsYk05Ni9RSmdPYWRzaE9NVWdmNEN3NXdraG1wTmgycmZoTnpvNFlnVExyTldXcXNoTE9ZOFZqTS81VTlaeXcxZm5WNWdoZ1lKdFBaWk9LNFJ1Z3VUK05kekpyd1B4RTdpeGphZEdsRWYvUVUvVFpvRXZXSXE1T01Ndnp0dnpIQ1duZmFDMit4c3FMM3JKQ0g1VzB3ZkEyQjREaWpxbGJUTGNSdW16VTlrOXRRS1AwNkF1dm5yakJFamdTQVhheXhKbE1pU1o4QmRwYk95L1lhYStwM1BBNGtIZFR4cUh3S0JVNXJnNkRhcDVXelVmVWgxeU9jZU1PQUl5QlN1QnVPVTNSU1phaWZZajJoNVNSd0ZaZTFrQlhOQlZLaTFncTJSTytZZWVuSXhtSmcrSklzL3VqWElFaE1nTktxbVNjaGlVbnhCbHZsdmliK2tNM1BBNWVIWktCL29lcFhmTHNBSXlSV3krN2pBdlBKRmhEcEJPM2tlSTFoK1lROVJJcUZNdXBGT01GcGVaelUyMzVTZlM4Ym12NGVxZy90SXV6QVFYTnE5b29VZWRaTGxSakJKc2dDaVZieHBvSWRBZytDM0tEK0YrK0JieXh5VEpHRXJDYWtncXlmYUJlUnVIaUlzVzFoTUJ6U3YrMmo2M2dtY1dWeHhpWEtXZXNiMWRtbzh3MTlvOUFuMFpHdlJMakhHcDVBUzlyTzI0QXFwRDhGeVA2ejVlNjdOOHhONjE3MTVaK0RnQ2E0c0xoSFRmZUJoSFdwalRhS3JROGdrakdPOHJ1SDV4TU03TThKUEJRcDlMQ08wVWh4YllpNkRSQVpITXdNNlg5eWNBa005bUdoVWdRN1c0L2w0S1NFTmtEZm50K2l1T2FJK0ZXdXFIMmQySkVRVUpZNnBrZkZibjJERnM0aTVhdEFXU1h4a2gyZXJhbzBsekRCN1Bpejd1TXhGZUxGeWRhb0RyeXd1Mjlla2x5bytCa1J0aXhXS2RYY1BtOFpEUDV0dk5IblpoWmdWYmo5Z3krRkNtQVRTL2NRSy9MZmN4S1NVTU5pL0FWN3lxQWJLVDdqZGF5YVdBTDh5OGRMam8zQU1HSTlDUGxVM3dSSVA0UnlnYlB6cnI3V1hDVHNlZXordEtkM2d4RVVnWWNIUWhHVVMyT0pyeFRqTCtGbnprNTd3TWhtQlBTc1JERFBHK1RIYmVNSXRZWDdyZjhZRHQxU2wySzh1QlJwQ0tpbksxQ0FJbmhLMkE1d0tWamdjT1hRR3pscWFQUnFGK1VPSW5DaThPcnZWTUlHUGcwanNRN3hnZkF4WFVCQm9IMlV2U25ET0Vya1IyYlI0Nno1WDlvc2o2WGUzZkkrUGFSZ1lsY1YvUVh5SVE3UFpSWWFKRkIzWDhYTHBYMVFIMXZPM1BoLzg3MnBmUUZEQ2RTdFV1VjFKcS90bjQ1VlBHZkcwaHN6WGlHOGxrQjB4amJ1OVdtd1hsQnBWdWJyZSt0eVFxVGZQWit2S3hVMXVYUVo1bVozZnZyREJ4ZHZPK2RDckpiNW9WZktsQktSU1I2UUdEbGh3d0t3TkRpL3kzZW05ME1RWS9kaS9ZOGNXM0RaYkI2Si80WmJuQlhsdERGeHJleFp5ZnlXUi85bFpUeEZodEloeTdhU0V4QzgrL2RnR2VzVE1UUkpzNTArMFBNVFUyOGoxL2hvaTBDOVFGNjdKNEpRazN2VDBVZEN4R0VWM2l2cEZHaUEreVlyZHlQSXFuRjJHc1lsVmJsV2Z6d0o2a0UzNkkvcEtTWWY4K0lEZ1VtMkZzajF4RElSMVdaTWhIcmNTc2ZMWkhCeHAwbndmMG00c2ZTanFHelVxR1BSVmZPaEw3Y1pLMkFDSzBISmV2VUpZVmNNTzlqUTgrSFBwdFlrQ1JKQ0ZHQjcwbWMxd3NtNFRIaHZGYmh5Rm5LZzJzWUxpZG5jVW55QWREMjBza0wxampsSzBJK1NlVXVqS2FEWFU4cjdyMm8vbjNlaGJ5dWJLcDJFTW1TSENKYTdyWS9oZlZUbmRCb2xmTnZzWHl6WnBybmQ0N1NrQU5ZZmMvdzZvOXBxRW8wZU5VYk5kZjZiYlY1aWd1dkUrdytYS3BucXp0Qm9jU2g2eTYxQWNmL0oxaVVCWUgyNGNtYUJrc0xZSWszL2IvTEZ2blFaTzllSzYyemJSR0NaU3Zxc3I5dkgzS2taN1p2MUR3VDlReDUrZUppZ2s4RDJCOVc2b1FDY2hYSFEvbmVIT0czSlJ2WlcvMTRTcVk3TEl0R2tFZmxoL0tZa09NOXJ6QW9OOUNnV1RoY3N4aEhvaGMxK1ZuRXZraXVobXZrM3JaT2h2S2RtTXEyY3BEZmFjVFRwYTRRQkhuRGZEOXZmMjR6N1dvaXlKM0tpVEZkcTBUQnljcEJSeFozS0JLWHlWeGwzRVk2SktrbDdDVDJQb2JyRjVJazhWcWlxa2RZUU1Nb1l2WWUrWW45Wk1PU0Q3L0tJOXdPSWNTeHRramU2SDZqc3NGTC84MlZZWmVTc21sdDluR0cvWWQ3MUR3dHRlL2F6Qjk2cFc3ZHREZ1loTmZLalR5ZWpra01TSnVlL21BU3V1a0lidm1hRGxVRWZSZ3prdTQ4blErZHdZZ09TVyttY1Z2NGdISVRPalA5SGE0T3dDb2RuRFlUT0lad1lkNjh1NzlsSTFsSkwxeEdmZWRyU0ZzRUllYzNPZXdrYkxiSFpaRDdsVUNObDg1cnY2a3JiaWlGTDdiVnNWWTlQN3V1bFE2NlJqQWwrT0Qzam5JWG40MXNRQ0RDTmU2THBwSFlnTTNMNS9UNkFudldzVUY4VFZxKy9UNHhxN3NQOWNKQlovM3E4WDhUL1dENkNZSlNYanFqVjFLRStUVytOdzVaZXNQblZzTGY4b2pDQVZKMlVBdlV0U1I3UzNVZHd1T3lEUTQvaGlwNFJvb0k1eFpsQVRTM3d0Qjk1UzhPWUR4R3RBMHdCR3V6UG1XV0w2UWNXd3V3MWFZR2grS3ZQcEFXTFYvaWp3TnQyQjlzYkNMdngrb1hFN3RaM1VjcWxDcDJibFJJdmI1VzhBOUpRTW5iMFYwWWpjSlJ4a09ic25OUmpEcUZHbFlmWHlXTlc3M2xLR2JjL1FnelBiTlpsU3E5U3g4LzJWNVIyc1k0dGsveDVTaE1WZGh3Zm11K2UrWERiRlZqRzhGZUtMbUpvZGJweE1LSlVlWjc3cXR1SmF6MC9ncGY4UlZ5cGxEdlVlZ3hrZys3UDIvN3RlOE5QcW5lTS9iQlN5VXhvWEJhdU9oWExpYUNPV3hiNzlCWWxnbHRicGZhd3hRMUNsSndsa0E4MDNXa1pvRWhCZS9EMEpwL0tuQ1NaMWlQekowekkwZEJRU0U3YkpLMnVQblk5YXRWUEh5cXJWRlVsWS9mQy96WVNqMVArZjMvYi9jTkY5TXlUZURyQXc0WnJjYmNZRjhxY0pJeU9SMElGWDRoamZVUGpxT2NTUjVMRTNCeXVmVmlpMmlBanM1dXp0SUNnQlV3Y0NSbURnRUlRZVJUUm83dG9kcnJqNVpSYnEyeXI1QkhuSjFUZm5BM1JkaGtRWGtzNDhXTlZUSzdMNVJYWDVVaExmSkdlcDNGRUtRUlcrQVpRaTRoTHdtR2NCTENrV0tkZFFCZ2gyOW16Q0FHeUVpQjdSSVVqWTZsVmRFTC9ueU1nR0FITlBrS29TT2lGMEtNemI0Y3VySXdNRnJvZ1U2NmJLcHNxYWpsTFp5d2VmQ2x0N0c4aDY0ZVN3R1p6RWNxN3dUemdsbGRYN0ZySmdwQXI5WC9IMVNFMU5nQjVvQUdRTWtseGVsQ1VkcnFvQmlDMmtHWHQ5SkwwM29KSElUYmJZTmdBaWZpdmdJV01ENy8yZDJ2cDc1Ri9OWkFSTGpLWWNGQ2VOQ1hNUzRtRVY0RFRBSVkrSmN0Nmg4WXdpQnhVZFZROVRSYmtIRzN0UlowaDlhbks2VldicS83eTZxN1J3NG1aYlYxeVd0U0Z4WFlkZDcwakxTUVQyMzdjbGJidGEwVkt5SW1RTnF3ZmpaaFB5MDRvcmVzakFJMm8xMjg2YmowOUZjdVVpTGZpalI2enVvMnFIRjBnL0NacGMrZGZBZWZ2V2J2SGpDakNPdjJaSHQ0NEU3bUFDbWtXV0ZqcUUvK2FpM0E3R2N3ei9iWlFVZjdEaXlWZjBPSjlVdU94TmErU2lJUE5sdjl6cGFXQW1sS3AvUkI2dWc5WGF4SGU3bjRNVjcxbjk3b3NCa0lTU0M2WW1ZUzRTWCs1VlkxaGhGSlBMRXFodHlaL0pLaG41OEY2YXFBdjhkbXNrWkRJVzBONVVhcFQ0Sk9CNFoyMnZ1NDQ0RmpSVmwzOXNxMUxnanlCcHVnNGVwd2sySWpnd0RKWTRqenlpaFc0WGV6Yk4zMUlYV3JUR3JoMEtkendteTROTEwzUGo4b0lRSFQ2YmR4YVdxSXZ5NHk0ZklseUNac0RkZEpGeUtFNGw2eW9qYmY0ZkVOYzIxWWM0TFp2Y0dIOWNLZDhCS0s2ZTZTVzdLWHZ5bTEwckhOR3hJTmhXMndWb1NyVjFZSmR2Q0JHWGl5b3ZERUNoWWI1cDZ6UWxsa1BlZmRucWI3V3RnWlFtWlg0djNrSm1LN3cwNVBGdi9YV0JFUkJubEkxeG9zMnh1RUNlaG1UY3JIbEQzUGVjeWhMWW1uVjV2UDRRVEtHR2NNbXRTVVFaT0JCc3Vza3FmK2NJMTVyL2wwL0tDSWlKWWVxNVBiVmJEelF1bnFIT1AxMmtLZTJ0VEZtbldtdGZXZVo3MnhxaUM0S3RMT2h3eWhWWlg2OHpGcWZ0cFFjSzR4NWFEakhFbll4V1Rlbllja0dOLyt3Z1JTcG5nZXZoa0xEdGhXQXJjc2luOEhMYk1BdG83cE5odGpEempFK2w4c0hobzJrL3QyZVMveVZLeTl1ZHZGeXVMaE1iY3dHMFhDZ2dXNDhkL2lDYWdSRzI1b3dDRHRkdTBpbVJ3dGx4b1NTMU5GQWgrbFFramRGb2loVjdPaXNyVTBIWHMvejd6am1jQUlnU2pueXc3ZGVxVlVqTk9Fdmw4dnNjMXdSM0liOU43bEFWNzA5eUxtMkJFcHh5djNxNnJXbm5Od0QzNk5EKzdJNlFMVkt4TnYxdzhZa3JIcTQ4bzdEYkFOaFJWQWt4a0RLTnNEdFh5cFNIMWJwaVZJUjBObTJEeG9KMitsQ2ZJbU5UVFA4U0FzQklTelRVR09aZWhuOTU2MjJGRlh5d0RCdVlEZ3BBQnZqRHFVelZkRWoxL2kwVEdVeTdaN1VnVmRGUjk2c1A1b0pjb1lNY3hpTmk2dkhOeC95VjB3UzFlRFpPQjJoTzhzc0M2TWMxaEMrTVVSYVVFTHZrVW9nSFM2emZncnQvRXlOVHlmZ3BwZWQ0Y08yNjlQcTdKWDFJL09Pck4zWVZkU0lZbzZPZFVJUW1ZTXUvM3A4dU5xdDdyYjVaR2hlK243TE9ROHJBamp0SkxXVVBMVDBGc1dBUWpXSDNsWFJWbDRyb1BOZXBLV1VvTmp5bDMwL3J3Q2FhMWFtOVVNc3ZqRVVSaVU3WWVBb1RNTm9IMGZZU0UzK3BjQ0hJb2l2OVdwSTZoWHF5K25Ibk1wNThHZnd3R2lkNEMxdkcxcndtS0Q0TXJyZktURlNPYitYSlpDclZYblp1ZlRyTnAzZ3h1cEN2b210aG9BcTJZekhiTjA5UTRuNUs0N0VUZ25IQjNZWGFXT2ZrQ0taZDVLN1F1Q1RlY2NCby9QWW9UY3BmaWFLMkkwTitEcVh0S3ZhS2hJcldZWDRkTjVFSnZlcjNobklwcTRmRGdpYUhWcW5hVnpsdC96VlpnRzdzTE9acWdHZ3lOS25VekdyTFN6WVRkRFI2eWVENlV0RVlqRnFNdzFFcVoyZlVmdGhGOGhKeC9ZL0crWWRibDh6ZEs3S1NUTnNWc1U2K3NIcUFGb0RXQThscEVCK1lkZHdmRXBTUHAydDlVL3ltUmtYS0RaYzJoZHFhczEvQVhoVkwvSjdweXFTdkNuQnMrajlSRlVkUlpxaHNFMWJuZ3FlQldKSDZhRW1JTzFidTk4UDVHWUZiKy8ya3d2SUs1T0JxMk9hb0pIcGRTSitFenhkVEg2Qmw5UXpFd0pvZXVpN29CK3BlV2UyaExHc09qSEk4bk5Yc0svU2haNDFNVklQdEJKczdjNTI5S3QrREFqRCtsVy84Ums2RnBvQitVNXhZcVZGSDBlekUxaHdKSGZJVmVURFp6TXlBMnY2SjB3eU9DK1hROUVUYkl2Z0h6b3l3Ym5BRk5za2RJSUZGaDNjMlBzNXgvMjErQW5ZSTYzbkFoMlp0ZHBQczVMV1RJNGppWE1Qc1JxSU5hQyt6SkxISzFKekEzeU9QOG9qbStld0w5WDRESFdUVVQzVW92YU5aemxpanpaOWVQZGg1d1VLd2xYQWxLdUxZNzFIQzZNNG4rdUd1VXovUDVBVVBUQVhzZW9xMVN2NHJ2RStzcFYxNDZVa1BvQjNBaGpkM0pzMjkvaTExVlVneXVmalFsdUdFOFVzTnE0ajR4emJWOVpCbHZnVk4wbHFoK0xOeG1MSit2RGFVbEJuaW1JWlU2VWVpSExxalN5TWQ3WWtpb3VYRVp5TGxtdGovV0g3elpkemxZT0JMajU4elJlK3B2YVlycE5zU3dYT1NUZUVRV0JNMmRWRmI3a3VOK1VEc1YranRuODltQlYrSDR3dUg1MnhpN0hiTWxkc1VqbnE2Y0lWMVY0Um84R3F3SlEvSlhSY3BBanloTTVsRFcwTWxnSlJIMStUZS9WOEtRQ29RQUpjWlYySlFNZXVrWTd2WGFhWFVBZkNRR2dLcGdsWW8vcVJyZ2xBdE5YcXhlOURDR0tWMStrZ29YWWpDYitLTVRrZ1Z4M0Y5UkUzeEM2UEtHdzExNmtzMFhUOFl3b0phMHMzNm0xVEhqOFpaUzlKd3lRZkxBeFR6WGhtcktmdWMvSVJROEFmSHF4K0FsdlA0eDl2T0hMMFgzT0JSUDhJdW81UjhSQXFVNzVpM3MxU3RiNUV2VWtER0JFaVRWMXByY2VGTDRQbFRGM01KY0s3bDE1bGF6dFRQV3JjU1phL1YwQVlCZVR1dWY1U3N6d2o3NzdTVVp5eGU4YUFDVEZ2QXRJT3U0Vjg0ZFRsQ0UrQTBLSEpxMkxWVFlVdURidzR1dFNJSFNHUVRQUDdWc1F3aDZESW1CWVV5d01mYXpqM3kzMXJBRWVPUitlN2prRGtSWU5Ib3hVTTFYUis0T25WZ0RWaUZCbnpuQXA0TTM5eVkwRTdhc0pmdzNBTkVZU2lkUGovV0RMU1Bkc3lDU2JpWGlDeDFCYzdWTUxYSHZNY3lVakhvc0FvQ2VKMVh5c1BHREVNRmtVTU01djEyeWQ1M2tWWEQxQTZwM0dUN1ppdHdGNlFIZlp2RFU5TnJKSGU0NTVlaDRqRWU3ZVRncW01LzdKNHlpREo4Rng0Z05PS3pGa1NHSUxNbytCUnFxcyswR0VLWDZLeHM5RXRHMjVEL2g1aW1yUWk3VlIwRk40am5JRTZ2YWt2ak9hYyttdjQxZ2RJb0hMckZCbHNhT09maHRXR1dQN2Q3ZzVzNkQzVXB6ZWx0YVpnOG51eHJmZGs5V2hCODFCaGpMejRBd2Y4SkNEQnA5NUxmWEFvM2JYQWk2Mll3dkk0dW5UdGcxRDluYzF6UWtuSjZlNUNUSmwxTlVjMzljSDVCZmo2L2RxU3lMZVNnWGdNc3FRTmVKUzlQeWVuWHZGQ0M2dFB3dUZkdFF3K0lPcS9JeFV3dzFBekM5ZFd4bWt1bjlIeW1rVTBOQUFSOTE1VnhLNDJydktrWFBFbllubHBYcXhMSkNyeUNGK0xvRFFWZkt2anZyM3FxMXRNa2s0YzJFazQ0MkEvbnpnMHZ2ajlwektlRGVWVzNLNFlSanI5dk1HTzJIZ2JvbWd4NjRQbU1ITGFTSHFTekxyUjQvQ2d4Sk5STzJDelJlU2lMRUZPb2wvdmtDU1dINW9rRDEvMWt5blJrLytBTjhVazYvTjFkWE1JaFh5Q2xPbWtFMDBTMmxBNmZpWXpXUDhOVnVwNHFOeS9TQk9UQjhVVHZCUVB3TzZDYzg2Q0hna0JOaWhPQlMyRWZNaWEybThsVkh5bmNCVGtXL25VUGNUblUwanNIK3ZRRmx1V2VkSWZDYUIxTHA4cGEwbnZQTEZxZEx2VE1kK3lzUmgwMFJUYlN4OFkxdUU5ekZSVzRyMDdzRXZtNzZqNE04WUNMdElaQ3BvekhaRERMMnhJelliQXZQNTlQVXpvN1VTUCtJSlMxcGxuVzRhMDd5N3o1TTdHUjVCT2Z2dW93MUFmZk1vOWltS2VvQmVzNzVvMjNwN2JHcjV0ZUd3MC9wL1c2VnFNK09aSG1mWUJzQnhJMG1iWEVySTRFUUxVUWFkTXJTVUdNRDF6VEtmRldDZVlUQTlETm1OM25ZckhpSnIxWnFwTXZ3Q3RzNHdZT1hwUmdlL1E3bEFpYmpYK3ZLZFRLVElvRG0zb25VeEVRd3A0bVBsWnR6YmdhbldvbXFaaS9kUDVkcFJWT2g1SGROaDIxWW1hMUpNOHZhM1RMR0hLV1crWVhBQ3Q0NlpMS2pTNFBuM3Vrd3FFb0Y1RXNsRFc5LzJrdnBkZEtpOFZzaVVLK1JFL05qeVZlalBtSE9Gc1AxckFTNmNOQnYwOW5UZWFNdEZDVEJEZE1xdGhXOU5ZR3NibjFjOEh1V25wdTIrR051RGZNWWl0Q0IrZjk3YnpXRk1zTi82UEgzWXkyNm94Y0J4RWdWVXZZWUFzeWdvb1N1enZpTTZqWURySXhpVEhOa1gvVUoxanVYZHpxbnZNeWVXREJEOUltKzE4MnNsamJyZnFOMnlqbC90RjV1TkdsYWlFaUhCUEZyejEwTjJsQlc4K2owK0hkem1mSXg5SEFETkhwdmt1MnJSRnNkZXZxdUpNTFN0Mkg4NHhNaHFKVlpZbStuQ09rRmw5T3llejFSNm9uQjR4OXZxL0Y1WldYOUVnVTU5WVJCZ0ppT0J1R3JGZkQxeHl5NmFoTjl2SWJwc1M0SkFSaWp2RldZYXp0emZoU0ZTZzRQQnpHdHIyOTJKWFVHb2pXYzdDSHVhVWF6MngwMmY4eVJZaGtlenF2UjNSMmt4N2hWWFpNcGJMbkoxZ3ZQcjQ1Ni8wZkM3NGNDVmZtQ0lyWjA3WGx1dkJuYkpONDJvazNiNmVlVCtXbG11QlU5WDF0OFV4MnEzclhzTXRKVzRNUWR3WjJSN2xaMTVKcGVYdG9PcmhVTEowU003eWJ3WlBmWStQT2dhS0x4SjlzVDJCbS8vSFF6bmtvbmVNalJ5TU5PS1hWVnhZa0xDWmNuYTF4dHl3eUhJNVduT3paczUzOS9qNU5xdVpRaFRiaFBYdUFwU2RHREt6cFFsOWtya2ZSbW5hdFRHVzRTc0xuUWQvc3QwL2xUV0FSUnFCMDgvZ3lRTnZ5NVBLZkJrU0VyZmZZbHRlRDBka2VoVTZOWGVHZ05sdml5aWhkenlZQWFjZ0c3YWovdElLSGVYa0hKZmxhU1htckllUzBYMVNhUW1HNU1YZHlXMG9BOHRpZE9XWmNKcGdQMjltRGFwOHlnZDh1bmJIQVdvWkg4WHY4VE5tRkJaRU5UVFVIWlE1MlAzNnhYR1B2UVNZZjFqR2xHd1ZaaVZibm1pSEpIcGtTYkE5cW5mdGtIaVh3Uy80Q3dIM3l3R3QxZnNuaExONWhZYjB5VWpFd3MvaXZtOXIwVFJCdEs5OUdxaUJkSnR3Vys5eXY3K21xTXc0YTdVRlNIYjZLZFJWZ0VUS3NQaElIeTZBbWhxcVpWc3RUTkpMZHd1MEo2SXdha3lMRHNxUy9XSnlmdXhDLzVNdHc0OXgwS09aUXFuTXJtdHRIWFA1ZG9YYnRxdHNVbTREeTBMUERPYTNLSXNnOUpIeVo2NGVBcDdzSkZkU0ZNemx0OS9sODNUMVNwbko0T3I0SW1va3pHUlZEbUhKN1JKRWU4RTc0QjkxMGplcXlHTmFPaUo5OFZrYWFOSkVaYUxHOHpveE52eXRvL01KbGhQNFE0eUc1VDRuendFZUF3dVYvZlBiQmtNbk81dnpzYWxMa1pIa3ZwSjRieHJRTE5MY3Fpb3VBU2x5eE9Mbit2a0ZySU84bUVjdHZkajlTaTdrdDZmaHZmdDcremhFUXkrK2VoKzFETmFHelFGalpQWVc4V090aS8vVVFPZ0FDUk1Va1RuMHZHaHZOckhCZE5WR1ZtbThmYnpVUzdoMFpPOWwrczcwMnBhcTZ6aTJHWmlRbHRJdzlKd29RcUdRcTczTldEYWdLNmQrMlNjbG9ZR0pwZGo2VTZWOXFLeFBTeC8zcEpWWktidTJPZE92MVUveGR6RDBJekFtQ3NKVXdKRXBtcFl0cTMybWUxUnlxLzZZZ250YnFZdk1YRjh3K0luTmdZSFRtYXhoaFVHVWloVWxhcnVYRlp5QU1ETWxjangrUnhxZU9MNlkrdnFJL2VwZkM0Nm1TRmljaGlBY1dROWlQN1N6THovbG5qSUtnMnN6YU1yNkViaHg4Qk8wQmVoV3huZ2ZnZDdCR01rQ1M3aG9XVkMxQmNCbDJIQm0zb3JUVWJpbFBsa2JHK083ZHIrOG1zRXNxbHhGNCtlNDQ5d2UyWFJOWTZkZXdjd2NGd0VkWVNSa1RXVERoV3UwM25jcFNiWEdOWThTakRJOUMySkxsNjNnOVUrVEV0OERmRHJ5TUNyOFl3a1p3UC9zWU44WFBpanNhalFlR3VxYXYvYlZnUjB4L0d2UGxkOFp5RldNbE96WkxyRks2RUw4QXVsaVFLTUp6V0dQdCtoRDRqYjFWV1lTWjloOXgxbGJLMmFkQUE2dkxXL21rNCtGckVCeXRRUEVBamJIWkNDbXErWnh1Q2ZDYUVQNWZieC83TDNPZFdqTDcrNVpUZEtDSVM4RkRqN1VKUzJ4TkZRLzlIMmNhRE9qYzgwVnFhVmQ5M2krd291MWl6K3p2ekF4NFVxZXdabHVENWFZekswOEF1RDE1dVZPbk9hV3FqaTl3VUx4M1ZFTllWWWhoVGdXSWVhL2RNcVVoeWM5WFBTUTRESFJTWU42cy9DQk02ZGtCMXpyc2w1cURjTWRNbnIzRHVRL3Q2U0VtTGVIazVmeldkMkJLbkRaQjdsZ3FnOVRRV2E5SEZLTnhpbEE4UVJEYTg5ZzlGVHFRejFDRE94bmdwT2hHQldUdmhUR3VuT3lFOVc5T1Y5RFVqNWpmNmR6ckJGelNOVStNWGR2ZG1HR1JFMWY1MEhVRlNaODYvL3FGSHdSOXdBblhCcmRUbHdXQ0Z1clFzMTgrT3dxR2JmbFdEY005N1R5R21PR0xHTTNKQWk0WXN6aGpDN3JoVTkweUVxdkpNa1JJZmxldGJ6c29XMWJCaytLY2lHdmxIRnBXbzZIWXZybHpPYXZrcy96ODZ0V3o0bnpzbTBzTHE1MnRlbnF0RVI1emdMdFpIaDBvM2hrSzZJQS9Nd2VMaHRYY1U5R3BrODhLckdDWVpCY1Nsb0hTNTlWTzJ2ZzAxY3pPbUhYZEVFeEoyc3g0b0FJaktNTUdrLzJhdE11YnF1c2k5MVhXWk5Sb0RuZEFjSGQvdzlKeGVtSTBIV0Z4WWxGaGNaQnRIaDRMWVhaZjlpN0FzUzY1MWZxaVJlQVhSRW5LQTI5Uks2Sk1yUWZ5WTdjM0M0Wk9XRkpGbCtmc0RTSXE1Z3NuaWNUWHY4T0Z0U3A0dzU5a2VseHFCNno1MmdJRzRWcmVqZHFYeTdFYTFMLzJxaHJSNEd5ZEkvMFIzWkpLWFQyRnczejV6V05lODNuQ04xMGl1WFlHdi9mVjRkdXRRbVlRL0JQYXprNjNZZW5RYUV5MXhXRWt0R0RBVU01RitQUEh5VWFPWldhUGtsai8vQyswaDM5VURUVTYxUnBjdDE0U0pRSWdqT3MwZ3pTTzBPT1F0RXhtTDcwUUFtenNNL0ovVmQyb3FKeGVsVktWTkVaZzJuTmgxQzRlSGE1V1oxOG9QRDU5amxJeVdnbjZBQ05tL0dPdWtPSFBHdmVtTkxpa3ZvNGR4UnpBVWZtMHM2bDJYQmNTN09KMWxMWlVYc0lldEFUNWgwT1ZhaW1RR1R2eDdueVV6VC9iZDVPcXd0N3N3S2ZTekxkV3MyV0VyUExVblBkckRPUHFwM3VjMllDMzFIVElRRW05bG52MjRiM0hHN0dnMEFMYVJrbTVVR2d4bE9Bako0Y2d6QmdZZDBOVnlPdjh2QWFBdFV1STdMSEsrb2IzaDN5OUE3c2xONnJPR3NNc3hCM21jTmgwZjl2S1F3c1l3VlBGL2ZmMkZ4djR2Yk9RVm9mNkJ4dlhMZ2Y5ZlFZV3doZUlTYWJQWHJrZGQ5Y2I4UWZLRm80VkFkQXhLOE9ESXNNVzB6QXNWcTJaR0k3TllxWTRiTHFwQkNxVG9oU1d5MTMxcVU4QjdGd29wMjlBNi9QMlpvWTVtMTFZamRqeng1VE5XOGZJdkthcVIycCtoMHhKVzBubTRBTURSTndWT1NTK3QrSHBXaEMydHYzZDVlclVDQ3ZHNzVUN0xzREFDV2dUKzVVOVAzZDFVYmRid1pXZm0vZ2xoU0tFR082d2QxamVjci85VVdyWmNSWGpVakJNcFNseTJoUlVyQlVDRlQvSnIwdFRzNVBjREtIbzlSamNaYllZMTh2ZnNLY0dOV2prdWtsK3Vud3BLQzZPRDFxd1JXNzZabklJQkU5bGtFMlZRbzIrbTQxN283MlgvTkc5RWRsM0VEWmpKV3VNOFlucXE1RlV0TndWWDRQMlBkTU1SNE04dDhicGYwWWlreEY2Y0ZVRFlCcU9kT25Id0x1RkpWQ3c3L2VDang5WlVNUjdEdGxyU3RmTXN4QkorVDhFZExMR0dQVEw1a3l2SFRMaGNDRW5aWEFpSWZnaEYzQnF4a3FYN0xaWllvem9ySjQxdkdWdmdiNE5PUkVRVFlORGRDRy9Zb1Y5eXVHdnhzNE02aXVBMmYvbFFPUm82WlpPY0FxdVViblFxaXJRRG5NcTZKb05xajFrYkI5ZDNNK3BMYmE2anFZV2U3aWxPWHpvN3lBbVVhcStRQ1ZiWHpMRmxzK21qMTd6YXFUZ0VQUTRhaUl1VUV5d0tlbGV0WXhaNnMwWGprRzJSM0tld29WaTdOWDR6bnlLTXgrSWwxcTMrMy9UTGJ1L0lMaTNNaVZiUjZBRjZ5M0FTOFVBaE5yL1JZcWx6Y1VzcXpScy9nVllNdng2OTc2d1R6SVZsWmhKSWROb0NYR3Joa3lBekNpMklLV0g5cUNWRkM4eTQwZTFCcnlBWUpvamxGY0Z4OGdwdlhxekRDNFExT0JuRnVZdW1BWmNUajh0ZGs3RnJDZkFva2tTSzUwQ0pjbjJsWmNtRUgxaHhEOGk2UjRMKzBTQ0xwL01qTHlnSXg5ZEhMdGRaaW1kUm5PMzVYM2h3bkNpb25WT3duVEMxL2Y0OTFXenJZMXdkRGx3dG9rdnpETFhCWmVuQlBGb2o5bmhwU2lBWHpWQTkxdm1OYjdKVGNqcnpmU1lwR2lCTDBjdks1QjZuU29SU2tGd2tWdzZZWWFUbEVkZlp0SHhQWkZUbFJlU1NaVmRGT0FzUkVFdW45UGtaZXpnRnNzN1Fsek5nKy85LzJpQ1E4SzlBcnRpK0tkUGtmcTh6YVVMVldHNmcvU0RwUlpLUGJJcVNSSlZ5ZU9NZHRwSHBsL0JuZlZWRmFZUHl3bzQyd2lpZFovd0svU3EwaExFMnhCZHZEQU4zQ2E1Qy9JVndja1VuckovbzVBUCsrc1VLS0ltUHU1MjV2cER2UWtJeDBxb1RJbW9xRHFSd2MrUWRHTUkzWHZoZlY3RVFIUTdIT0ZjaXhwaUl4RWdOc3hBMDAwa25LTVFVSk1VYWxaZFFvSThFMXBWU3JjSm5VcFcramhTUzRWTFBiOXhKa3dIbnZpcW82WStMb213NDcyYUcrY2hQNzdwQVZTRkIwbEo2cklNeGdTb2taMTk3YzducThoRlUxeGpHcUo4elNwTVJNYzE2cXFuUWk0RlQ3Nzc3cDVsMzFzQzYyUHNjSmpnMDFsUDZZOENuV2JQWXpCWVFscWQ2K3FNUGlUY1B2UjVvcEZERnFnakxYLzgvYkhBSTVDdkY4OWtVRUhoZDBLNU9CaitGMWlyWjlSSWxrYkplZ3ZuVFN3N3NWQW5WQjBUeTc1SlY5T2tHQU10eVFIMXo2eUNiNlp4NEtWcmtRNE1jaEhmRUNsdFdOL1dESHNwVEpCb0R3ZzdjZFc2NWZUTUM5VlJHRDRYTkdnd0xCMTl4SGxLRUZPZ0R4bXJjY1VBY3RJTE1SQWxwY3JzREdQckFZNEUrMXd3VU45dHlXVmtETHh1N0Q0dGkzOFJMSHZtNFNOaWVlcExrVElnS1pzV1BvQmVEaU4rWWNDR28zb0Z1ek14Q2lyUzl3TUcyQ2NBUE9CQ2NiUDMrdDNVTlZySWhPWWRVTVB5K0l1a2t3a29NS2lvV3RHQlpaTkZ6VVpoaG95eGZqUm1Id0dVNXR1Qi9qRUlxL0JsVW0wWjZjWlVmakZ1RDljNXBpeFhBU2NxNGdreU91SEFLc2ZWZ0UxYTdvMUw3SkVKcVR0Y2RORWtkbUZPN3VTMUE5UnpTRnJGRzAwQVE1RVcxTXJrOVl4SGg0WGxNNVRudlpkZnRXK3ZxWmRNeXpMS1JQVGZBUEJwWm9Vb09meE80eStUQlpNS25zYTkrVENscmdDVHdiN2V6eldWU2dYMER5QkVYdy9zQ0tEeXVtcDVlSllyUjQrVkJaaW9ETjdpRzhBZi9iREVVdUUybkpkZEVKTC9yMmxONFZJdzBGajVGMHp0Y3praWZaaGpTcDFwcWl1amdsVmRFQ2xuc2tkZG02Z3VYTnJ0cENQZ0JUWUtoMUVtQXFhNkM3UGRqSUROdWRudE9kUVVmd1NVcE9KN0Y4ZkdlcFU3cjJnQ2FGaVliVC9MVUpSTW5vSWpXZlJBdUtaTDlnaVVZbHpOYi9IK3R2cUp6SWoxdG05N2V6bEN6aXUycnVPaEw1M3Vsc01Nb1lwUG9mYWpwSVZrSTRxQ0NWU0xNU2U4SXdXa0VWMUU4QkFUR1JKZVo1eGN0RWd1TWlPdGtXUThwSUtnaTZFMW5ETWVIcmNXbWRoVllDZEh0T3VIR2dmdU1JNkQ2SlNWbjE3YVNZM3h3QzFOUHY3SEdmdXl1WXlVMGtrQmNNU1JVN2VxRTlYK1hlTFl0MnIycTFKZmtTdXZ5ZWxWWm5XYXg0YXFpSjU1MmVPRk8vVkQyTWY5Rnc5RDFpSm5Ya2I2U1RYS0V1SGVmeW51Q0hXOHpHODdta0FhTjVEZHZIcFRyOU42ZXlDdjhNSmFnMDkwbUxONWFxa0F4LzBra1FpdU1TVkNsbVA0V0ZEMDJqZHl2ZlNtcDkvOFMyRzc3VjBsd2YyU1piTFZzcmRPd1BORG40am5sZ3pnRW4rbWphZms5NmJCMS96c0tYVmZDZ3VBR0l2VmpYNnZtMTBRWS9rVjBjVmx4UTh4UTdwdW1KNXRtTlYyOGhiSkpxMVlrZmNJUkZXdXU4OXQxWFgxQXdybUFDcWpQZ3dLRWpUd0xLWEpkemllRU1QZituNjZZRlY1akNoenRPdCtjKzE1dEJmcDRHNkFpRU1UMFFQVWVjU21RbXY4TjhKQmwzZ3dZdXEvbHoySFJaazQydzdaTk1janR4MHhJZWFSY3o4aHkxUmx1MGwzN1dsWEdTMFlySU03b0w3cngya2NGOTlBTG1YRXAwODZVeGp4dGxmTmJsZVVnQ0M3Sk8xa05mVVh6R3FKT00zWk5LREJjMzkrSXJJRXRwWkdtdUlIMXltNUM1U2VxSFljckd3clJROVlndkV5V29KQ0pzdXFwd245Um1vNnVCV2VoMG94RTFkQUQxcVl6eGdFRWhnS1RFNlM5enlCSGFmaGs3QUlidlJocXFOYWNUYW5DcDExeXBxS3ZseVV6YWRYTUxVcmhEZWkwZkgvOW1NalJKbFc0V2RCZ3VuT0dsM2lxWFVaeTRLRXpsMDMrVEZBOVVZaExqa2w1cU5FYkp4b3VLZ0oyYkpkTG9xMHZ0VmxUWS9PdEFOczRnTXdZRVhNNW0yR1NOdGhocVFabkpuUlowVEJqbUt3Wm1ET3FPc1h2NnE4TDN6U0ZuSFZkcUk4UmpWL3NhRTNQa1dLaUp3TmJuNkVxVjE2NzVJYnIrT0UrUkNXY29mUVMwMlU0YUNQWUs1T21EVDNkOTVDS3JBUEk2Wmc0OGJadmdIaUptV0libm5rbmRzN3ViNXVBdGhBaHZlZmlLeHgyYnVJb1M0d3M1RUh1ZGMrSmQ2ZG5QVDFUT1htdmR5NXNpRm1RSlNWd0hQcVA0NlFnVGp1M2lBbW53c09Cb09IdkZiazB1TDl1TGV5WHRXNEFjdEJkTEdacm0vaUpXU0UrZXA5NTVEMy9ZeUpFTXhVL2xPVFd4bTZVQmk2U0h4dnFYRDJlY040a1RUSk9SOFFoeEdFTWcrRGtpSndzbHBoeHY3TUVmUllzejNZVTZPRGpaaGdHZmlZc1QyZHRiTGVOTjRNYTVOcndnZVU1ckVHRjR0dXR4Y3BJR05pcFBaOXBVdE5xUzVWVW8zY0lQVndqbm1zdjl2OWg1OGIxSWlqZUNOQUo1M3JkLzF6K2hwN2t3Q3ZVVXVDaDJ5UU9RTGhZQjBjbDNQS0hjTWR5aGJzOTZnbEtrMTU1UXZOTk5ZWklTM0JLcnlBWmtLaDcyVlMxa2tnN1VLUjV2cWUxc21pMms4M2ZkaVplVitWN2lMYnJGMkUwdkJtejNKazNNRVBKOXlUL0F0YzFocFdNY09ySzNVMzFDMSs2Vk1HQzlRKzYybGtEY3l5ZldSL1MxNTlrSU5qSkFVNUphMmc5TSsxZWJoQU9LcmV2Z0tTa2hYcVdPTXpWVzArMzM5eTZSemF3bXlKRE01M2pMM0d3U3pFV0Z1b3dnMDc2UTdQZnFaS1puMzlFWVg0cUx2RlB0UVB4SmE2SnZYSzM5dXd0NHVuOVBvSjk2QTYvcTJTUzFHZWs0ZjBxWXpmbHo0SDUwYTBkK2t0bjRnZmVkV0dIdWVuTDRPK1NKSUVGNUR4ZVE1VVY4WjRoaE03NldMK2gwdnNYeGptYlZsRm0xTnltcHBjMHhQNFRuTFA2QnY1T0RNTzBEeGk5bkM3Zk45Z21kclp2QkFSZXJZN3g4SEg0SUIyWWttL2lUQTkxaFdMOEpVYlhLMnhTWXZxMnhWcWg1RXhKYmU5UzU4RUxla0NFaEFkeGt3NXNNR25JY1BOM1IyTFhoWi84RlF1WEd1ek9PcUtDY001UDNKOS9XSWFtZ3VlOUQ1Q3V2dlVybEhPRUUreWhVaW94L2xqaXIxZUpJWkJjNXovS2RwR1ZJVm52SGFyNVhTdzhOdnNlaEJvZXh3ZGw1ZThjZWdwc1NHZE5JUS9SK1M1am5NY3hTa0tGOUt2bS9CNVZ5elBDYmNtZ1NvRGRNMTU0TExCNDhGVG8rd05BcGVlTDNlcm12WjI3SGxmVHVqVVdEU3BtekhOWkpSaVRodCtFZDZiUjNScm42L2Z0WGRUTXl5YzhINWx0S1MwVkMvTkswaVFuRm5EcFBjWjhoMmNlZU1GMG9Tc2MraEc4ZmdrVFhxdkFaK2NJTE9TbnJXYktlbnFuZW1BSHU5MzgyajdPSWpDUmJtb3p4MFZqTW8way95eFp1YThGeTlHWHBSQms4SU81TEUzQml1Wmppc1BtNWVBdUh4T0F4VC9qN3BQS1V0eWljNkltdFlwRFVTR0xqQ0htVGdTaUxSRE5oN3JtZDdHSjBHOGI2U0VRWG9vRm5uY0F5SjE2bVlpVm1yS0xod2JGK2d4T0FTc0VLNFJhc3JJeFFaL21aTTNqVWtLR25jODkzS0VZNnBSMDhSRGc1OXpPMkx1M0Y5Rlh3Q3pZcHhVamx6NU03RXFiSXlieURxemlNRGc0TWltMlFybDhwOVRydDdxQVNkMG94T083d1BlVkpHdFAwR3FwdzVvMDEvMDZoajZJeGdhOTEwZzQveTdRczVpczZ0dTZZaHN3eGhqeVpTV0F5aUUzc1ZoNk02bitWQTltTlp0dkNpLzVYaHk4U3NKUnd1cUkwWGg3bUVnU0dNN0xLMjZSNkZNWVptTnFiUWY5OWZDc0t6aVhCZ2VHdi9HQUNJQVo4Tzl1WTI0a2llbXBldVk3Q2ZkbDZpc201cXVaNDBoRkorblNwQ0N2bEQ1MUphK0dKbEpQQ0VOL3FpU0tJVlJaNjh0aWhvcmgrS0pLaE9lSTNqNU9Ya285Z3hRYy8xMmFieXVBOG9BNFZBMDlFcS9FTHMvVUI5bWVtS3lHY1J5cTVmZGlNaytVSGJtZlRkVVJQajM4cWxTdWtOLytralRpV2x3UmpheEsyb3ZWcm1VeG5RK1FpUFlCODQ3dHhQZWJUMzRaU05YekJaM3FOTTBqdUdkUGErUWxsOGZsWHRLZEdLZlhGQnphMEZZV2pORVE4RFdJK3pTU1ExV1VaaU1QejYraktaT2M5aVI5bDBBREpzZ21KUDNiemxwaGxpTXlpM0d2SjNKTUlibHdnM2VTOXhwcXM2MFBhRTJzMWhNWG03NlhFZDZuVFY0enIyMkdabitydjRtZ0dBVGREQmtuNkxic3Y5NzNUaGJ5R2lqMXlySHFjOFA5TlRCbWJkN3dmYUNCUFF0K2w3VzU0NUtsNDFSc3E0MXR3RTYvYUsreHh4a09FUTZON0N6QndYT3ZZUjR1ZnVMNkVNeEZBR2ZZWGV1Z2k1WnptMXc1NUZLZzQvdnpSZE5EZE56WEhZaFI4STh2cUZTUWc4RGUwSnhsbkU5WEcvd2FoaDdLQk00ZTBxL2xKa3lPa05odFREcWJJYnd1Y0JkV1BGQVlPZ0Z4UEtTM2Fmem5FaGp0SStQR2JVKzhpYjdVZW9pc2g5VE5WQkluTkQvY3VwdTcyUFk5SlpZenkzcjZTS1lJbC8rQjVtTzllYzZVSTk5QVlBQ3VjQWdJcjRRQzRaMHFiU1BIOTVkS3BQS2tHemVBYmxkV0x5RmwwcVllUmVqdlZhS3Ewc1NCRmZMUy9jQzhZRlVzRmtaZDU3NTZkZTAzS0FDekdvNmpiTWFhaXJzR2FOYnUyRzVhV0NkZmhzT2h5NWpCanFDaXZiNCt5Q1lmVmFySEFVRnNPZ0t2WVlIcEJnbStJanJqRFZROU80bGUwU0VnaFFQdHdudEpZdmZPeHJkM3dKSm41dXlkbEVwTkZRVzhudFVJTndsWjdkT1ZjcUh2ZnZ0S2hOZmZqTEUwaE9WRHZJT2dZcEpCZi9SY01FVlN1M1RuTnVJVGRiSko3NEtiM1NzQ1JlMFlQVWt0bTVnZUF0ZjJKaUZhNUZiSDJ6M1dqYmZLV2NKbEZmMU9IOXhxa3BHbjdBUm51VjNGd1ZEd3JzZTR0citNQzN6Y1hvUlBiRDdBZGEyVE9jekI3UVZFZGJ0ZC95Vlh1M3M3RDk5N0FzTGwvZmxZSGZnRnhkVnQ2V0ZBY0tDQlFrVmNveUNYWHNSNE05MXdSc01wTTY4Vnp3VFVHS2VSM1FBZEgrUXhoNGdrV2d0VGhzLy8yUUFCQUJvQVFBQUJUd0JBQUE4QkJrOENBQUFBQUFGZUFhdEFBQUlBQ1FJQkFRb0NBQU1BR1ZSb2FYTWdhWE1nYjJZZ1JtbHVaMlZ5SUNnMktRPT08L0JEQj4KICAgIDwvQklSPgogICAgPEJJUj4KICAgICAgICA8VmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I+MTwvTWlub3I+CiAgICAgICAgPC9WZXJzaW9uPgogICAgICAgIDxDQkVGRlZlcnNpb24+CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvQ0JFRkZWZXJzaW9uPgogICAgICAgIDxCSVJJbmZvPgogICAgICAgICAgICA8SW50ZWdyaXR5PmZhbHNlPC9JbnRlZ3JpdHk+CiAgICAgICAgPC9CSVJJbmZvPgogICAgICAgIDxCREJJbmZvPgogICAgICAgICAgICA8Rm9ybWF0PgogICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5Nb3NpcDwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgPFR5cGU+NzwvVHlwZT4KICAgICAgICAgICAgPC9Gb3JtYXQ+CiAgICAgICAgICAgIDxDcmVhdGlvbkRhdGU+MjAyMC0wMS0wN1QwMjozODo1Mi42NzFaPC9DcmVhdGlvbkRhdGU+CiAgICAgICAgICAgIDxUeXBlPkZpbmdlcjwvVHlwZT4KICAgICAgICAgICAgPFN1YnR5cGU+UmlnaHQgVGh1bWI8L1N1YnR5cGU+CiAgICAgICAgICAgIDxMZXZlbD5SYXc8L0xldmVsPgogICAgICAgICAgICA8UHVycG9zZT5FbnJvbGw8L1B1cnBvc2U+CiAgICAgICAgICAgIDxRdWFsaXR5PgogICAgICAgICAgICAgICAgPEFsZ29yaXRobT4KICAgICAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPkhNQUM8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5TSEEtMjU2PC9UeXBlPgogICAgICAgICAgICAgICAgPC9BbGdvcml0aG0+CiAgICAgICAgICAgICAgICA8U2NvcmU+Njk8L1Njb3JlPgogICAgICAgICAgICA8L1F1YWxpdHk+CiAgICAgICAgPC9CREJJbmZvPgogICAgICAgIDxCREI+UmtsU0FEQXlNQUFBQWd2TUFBRUJBUUFDQzd3SDVnd2NEQjhUQXg4QUFBQUFBQUZEQUVBQUR3SUFRQUlBUUFJQkFBRUI5QUgwQWZRQjlBZ0ZIUUZsQWZnQUFndExBQUFBREdwUUlDQU5Db2NLQUFBQUZHWjBlWEJxY0RJZ0FBQUFBR3B3TWlBQUFBQkhhbkF5YUFBQUFCWnBhR1J5QUFBQitBQUFBV1VBQVFjSEFBQUFBQUFQWTI5c2NnRUFBQUFBQUJFQUFBQWFjbVZ6SUFBQUFCSnlaWE5qbWNvQUFabktBQUVBQUFBQUFBQnFjREpqLzAvL1VRQXBBQUFBQUFGbEFBQUIrQUFBQUFBQUFBQUFBQUFCWlFBQUFmZ0FBQUFBQUFBQUFBQUJCd0VCLzJRQUl3QUJRM0psWVhSdmNqb2dTbUZ6VUdWeUlGWmxjbk5wYjI0Z01TNDVNREF1TWY5a0FCQUFBVVZ1WTBsRU9rZFNRbFF3TWY5U0FBd0FBZ0FKQUFVRUJBQUIvMXdBRTBCQVNFaFFTRWhRU0VoUVNFaFFTRWhRLzVBQUNnQUFBQUlLVXdBQi81UGZFK0FKUVRSZWxQQkUvcXRaTVMyM2dkK3NhK01nSlJ0MnhsbExOckhpRHJwTVYxMkNRM01scDVWTTdvbFpTejBOSm9KRTBDbWVzQXA1NGFOdDVneFZWNERhWUFJd1A2TmZ0QjVPZmRORXoyUWpJbm1BRDRLQWdQRGcvck9tdXZPT3BPZkdUTFdVOXZKcnp1djluYmVOSVVmamtrQ3lVb0R3MEVtVzI2SFhROVZqTmJGVkJQOEVlK0ZNbGx2U1gwQTRId2R1L0FaQVZkdUZhcFRYVHZJeldvYXlGLzdGcHkyNURCOXZ6aEhDbktDcFZhREVuWWhOVjh5UEV1WkRMZm9OMEdpOC9sZ0hEeWVSMXNDT29WRHVyRjdSNXp2Qm9vczA5USsrUEc5VjIrNWNEck1xdUJPQXgxcU9zRE9LQ1Y4NVpYMzZER1RwMFlnTmo4aWwxWlZHUnM1R25TVjFoZTMxbDM2WXkybXNrdmNuT0UyenZhd2RUQWJqaEt1eGxwQUFwcGt5U3R6SHA0VmRURU5zblNpajljamE5c0FxY2VUWG9FSzZSZkdOVVZjM0ZvY3dtWm9Kc1NDdnVra3Uyc3AvZ0dUb0VuSlQ2bzlMZ2V4YWlUTTBwQ3hyRDhKQ2NNang0Q1ZvOU1SbGwycWpPbUpGcGtIVElUNjNraHYxNE5wcGhhQ3NqVm5jVThuaVdKZ1dTZ2NiKzVNSlkzTFIzOWJQWTNSaW8zdUM2SVpoVitKakRZZGVLZm8ybGU4WlAxYlp4VVVBd2g2SmF3KzhPa3VxNHp5VnRlbEJpL1h6dXZQOFpLK01vZk9hZ0lQOERVZThSblZXS0s3ejBvNE5oK1M0QUdXdndyTzJndk5sbVdadlJtUW1UaEJSKzZGdWdWQStNYmsySisyQzVhMGJlNjZCeGZueENGNlJtNXh3bnUrQy90SHYvRjIxSFV1L1lRbHd1cElHTzhMNWVtSWZFT2hnT2hydm1SZGt4bzVGRXI4NnduMTNRRkJzV3g0cVg2Qzl6K2ZXMW53c3pMRlRzQmVwRkFhaXJwdmxCUUZ6UUdUcFEwaXY3eVRFSDVFNGRpSEc0UFgxQ1pqaG1vSS8zVjRCbDhpalJ6UE1ucmxvd3Zzc0tkcFhkT1RVUThtcVpJVE44OGl4QThtREJOL1E1d2ZZaHMzdXZ5UEZUK2h0RVJBOERhc1VKVXVDRklaSHZxNHhtZ2VQcG1TMFpsa1dsUW5NbE1HZTVhUUFqdDBpbU02NlVpM3RhbjEwV3dhVDNrbzMrL1MvcHI4emdEK2sySFdxOERzQnJIS3hsM0lnYm5GdlhTRUFUMzdzQTZwTjNUVWhGOWFGTWgwSUxjSHZsVHF0aHd0Q1FJRE8yZW9kbzVOdFBzc0NhdGNPSG03ZDZzRWp2RTBlc2Jib1VMT3NZOVNIYVVEUjNBbG5abjZodEdPeTNZalk5aVpGLzFLTGx5aDVCVm8xQlRqY09iY3VpWnZVaUIxRG80clBrYjhQUXR5VGVCc3NLM2p1SzhZNWh6Zm41eWpIRzcybUpsSHpnRUoxb2d2T0Nzd3cvUk95UkhhWDVMdEZyN0JOUHVtTGxjRG9CaElCSXhXZEU5MytoTjFzaFlYdGFzSDdPcVlnTUlTbjRPamF0a0xSeEdYakZveWVCcmdGWXdjd3dORDUyZmdxdm5yZnNOZ2FRL05TNVlNUUFGZmg2RlptT1pEMDVIWWl3OVZrd3Ixa2NrYVBQeTJTZnUzUDdDc2dCdGErQ2FTTWI1VW1Tand5SUEwTXJNa1QyQ0kxMXNYdjZjVEpHNmhZUk1jRXFkUXFsNkp4RTgwN2NPcmZiMDFJWHhnV1FsUGo2V3pkR2FZbEcxYjVGRUxENGV5aW9VNjFENmVDTGE3MVZHNENqb0k3VXNZMFRXQTl6YjNNRlF5dmVnS0cyR0N2R3A0ZTVCQ2k1Vkl5UlJzaUNuSGo2eUYwMDZlUmZDNDJUcTNEdnBXbTk4RmREbzV2eWVxMGh0OCtqTER3RGZOeFJCREg3ZG13SUU4SWNYMno5K29QbHFqS3hrVURPOVY1M3labGZWRDc2WlBBZnNQc0JlL2VsaFAwOWZyVXRqZjF2N01seC9pcTlhWWE0a0RnMTh5d05EZnc1Q1FOcEMyY2g3NDVCRE5nMStINFRKb2FyRk9rMmt3dEM4c3UxR3FHNHVJVEg4WXNCNUVBZ0VkcUluY0Y2V2ptUVJTY1ptQXQrMmpIcEwzN1NvajNNcG9sYWxMMTRsQXNyQnpUY0p6TUMrOTQ0bjltQVhPc3pLZTRBWW1pUDRONzBYazlQTkdUUUNnUDRIZm03SktDT1pFaEpxaFoyU0RXdkdRN0R5TmlEV3plS1JsQWUyOTdPQ0NWc2x3dGlDZnY1SzBoSFlxMUp3cHZsN25zcjVkbmZYTjQvalZYUGIvRFdFV0lBQnpMSzVGSU54bktDZ2hPa0ZxNDBiZEpTeEVWNW56T3F2SnFTeTNiaXEvcnJHWC9aL2pRUy8wYXpxYkRnSEwwcUVSVkxuM3hlTFk0ZCsvZ3pMWmtEdm5JOVZOZEFiQ2l5cExBWlc2STNDNm80c25Ybk1qUytURUVxN2M2L01ZcjVUQi9RNlJBWUdHM2ZUUnBSUjVZcFBjRjdGK1h0c0k1QmQvWEVCNzUxdjdlYjFkeTJ2ckF5dE8yZXJHdmFjcTRvY2xMZnI0QmhLdmRwRDlEYUdtS0p2SWFrREV1ZUErVnR1QmpGNTNHSm5YejBrdHUyYnJsbkowOWZNb2tLSmZzY2hrZHE0M0xWajNFU2RxUE96cFpORWM1TGlweTErVTBsWG9YVnRGMkJVdm9temlUZEZzTVVBR3NnK3owRkpIWi9zU1BRRXU1YXk2MVV0Y0I4SGptNnFuMFR1RWxKb29KNzRvK1JaZkJjbXRzY05wSkJoMFdndzVQbHhiYVFPdWhYSEFiUHNZWEpVbnY2UU5JOERFbnpGZ0RNaDBYRTA0WnZSbHpKV2JUTnVocktIeGhLTnBZUzFNaEdyc3FUbUxZN1FSRmEzOFpKQlpsd29pWTZlQllRQ1lzVGlBbEVlbTV3em1ncDV3V0ZaS1BuOG9ZNDBRT3B2SzBITlJxcjdMMXBuTkp4U3VIZEhqVDBFK1VZR1BlUUUyYm0vNFFGQzlXSFVIN21NR2ErQmhIeHlXakJjdUtteUNTU2FjdEFQQWdrQ1U0Z25LbDFTNjlXSk9JMkgxUkozTGxHNlN6Y0FFN284Q2pEYXRSWGhDSElhY3BSUVRHeXRFdFl5NzBydmVqWWVFSnNuS0JEcnR6dnF2bmlRWS80ZVUwSU5pY1FEc05vUEtwYUVka3BULzlROGFJaTFuT0hxd3pjTVhOaCtsb21BQzNIcnpVSGhobUNlRWY4R3Fsd0IrRkZ3YmdvS1dXTklGZWZLaUZIVnFWUzFRWmRnQXU3cHNpQWs0Nmg3em9aQnQrdXU4R3F1T2ZERFMvazFPZkVtbHdzL2xTRTJmYVd2MmpENTVFazZ6ZzJ0MXNPRlVRQWFJWVdlL01xOUJuakhqa2taa0l5VnZuZWZrOTFvK1FVUm40cEt0azFNMk5CejRGcHRGN1ZJRkFVRDRVRjJCU25zb0tFeElZQVIwRU1LNjQvSEc4OW5OeW9mWTlBazJsUEthU1NubGlkWis2ZVR5OVhlUWhqUDl6QVJzWGExNVkzSzUwcnlzZ0d2WjlwQTZod3Q3SGFxNGwycFVrNmswaXhLVm1qR1NQTkhkT2dMVE9GdStPV091azhST25CcUNFRmw5amlCUHBaZWF6eXpPQ2lLU0pXUjBleUJzbHRWcDgwNndFWkhOTUUxUWxlWWNRckc0V0JmZ3FjSUhMWHE2ZG9vRWljYkhiVjllTTJFcVFDYXBmT2FzK1BJWWczTmllRno3clNDOE5pRkxJUnhaMVE1UDNWR1N6d3BsTjRITDZJNVBjelVCTEh5OXJqV0pZWnB4TzdxdWlKMEVwK1FGNVNMOS9rK2Y4ZzJINWNTYVNPS01heFYzZi9oN1owZHl3dWR1SmpXOEdNRW5sL29GUXY5bmJKbzRkNm91SEFZK3JRVXFyK3VjbUppWlZlYzdWLzI0WDVPWS91N3FTbVFuQStJUnJES09sRnBtclRCTEhvYTdaM3Z4MklSc1R1MW5LZ1J5OEV6bVhWd1JjZXpUQ1IwdUlNbG9hOUMxOVphWG1QUzJjZkpzbGVjNG9VS2lmemhTWnlqOFN2Q3FtcktGK0RQWlI0T0VvWGRsMC9rK3IyTktNck1oMGJuV05uQVgzQVVCdGdTNnZJU2w1WjNLYU1wL2ZiWm9sOHRrMyt2OXdYeG0yVVpuYVJkQ2RleFBjQS9GN2U4cGlVajRvMmtqN2dJMVhQY2RRZGJGZ01raXBPTE9SUUVQbnRRNGFzYnJqN2lKR09NcmQwQ1lVdnYyZm0ycURaU0lyNmw4aVVQV1NYM3phcERpMmJ4ODFZaEFDbDZwTFVsYUY3QWIrNHI2SklMeVFzYUJzdkFtbUszRXVEeUJiSEwyZVB3eFozZFFTTzZpR3B1VUp3bERlVXM0TGMxR3BENEZ3U3JZWFZBSnZsaXZYeVlBcVM1YTRyWnZSaTVuQnI0TmRVMnRkZmJ3cjlBUWhrMkRvektReXJtYzlSb1dVblcyKzdQSnRITWorbk5JK2lERjJ0Q1ZZM0VWaXEyOTlTaXlFQ3ljeXdMU0VQUWwwTVpiTUN5STdIWWoybzVIZEtab05GZzlLWmVQQkVWWVplV0VmVkh3TWJGTlp1dWRQOWJURmF4RU11Z1VDS0FKdnkzcmtqa3NSNzRkRDc5cTF1aERxRi9VWUtPRStzYUY0Q3R4SkdsWU55eVIzWWZQTHJYcExtRjY4eTc2ZERVb0U2aENPRnQ3WU96bGZHRkVxNkRqNmkrWnphRDNoN1FJT3lUYlJ3Si92RTdHV1Z6V0lVWExvZC9Ta2wvVHNXWjBJM1RzaHVkaFc3b1hVMks3QjlqaEtrNmVVd1ZSUFBFTkxiV1VaclBrWnZmYUZHclVsVHNtaEs2Sks2U1cxUmpxTlY4MUprVXZLbU9MZHQ3bFlrTDF3OC9zUGt1a2tmVGZVa28rVUJCKy8vbGpRR1NhaEtkR3hUUHBDK3E2NXppWFl0dWttOXZCM3RCWHhHWXEyOWo2ekl1WGErTHUxTk1YR0ErR3Z1L0Y5cTR4QWhoZzlQVU1uRnMrcWJLTUU2WHR4MFp4bElBek5nYVlmbSszbERIY2xTaXR4OEpBaTdMUk1YM04vbVJqcmlOSUp2OUFGOXQzMFU4MTFVWC9PQTJPd090Q24vdXVUd3RJOWdSRU4rcVdYRStYUjdaeXBSbkNTUWlXY0FKbWNMWmgveVp1cGhJNDA0TE94SGdQWnZWYVdXNkxPSXZHeThzYnkwRVdUZ2V0WlMzdkhvc3AyYndsSWtsQktMZGQzNGhLMDFpRHlPSDJ0WGlIVjlTa3ZqTlEzaTFpVVpuMlJQYzJsOXBMMElLeStRRlI2MjVtTTZ3MjBWajZOQ3VoZGNnbzI3NUxBTU9WSmlzNE90OWt6WUxFc2NScncvYUJ5LzJTTERydlVHK2RGbjZGcG9SczhyR1h6MnYzZ3EvNnl2ZFRkV1dMQVNDMStjMUVuZDFBMGtqc2dZTEcyZUo2Uit5WVNGVUFBZDV3bi93VmdCayt6M3g0ZXZQOGE3bUx5bU9NL3NleWJtbzlKZDkvRnRWQnN1aEZ0RzhVclVUOFU2eTVXVEVENW1sLy9aeEVqY0NNUGxnb0lWdkh3NWNlVGthTEFhdmpocERmOWJabUFxMFdab0luZFB5SnB2Z09TeC83UC9scGVNZ3FlT0Jmemg3ZEgyYkU1TFh3Q1h2YUllR0ZjdXB6d2tRaklaOG1lbXRHdU1BRmJzYmV0SlRpQVNCZHpHZk1kRUlQeUc5YlFqR2xjck9rYk5kVHlMRW4zQWRoQnRGWDVmY3M4a2FYU1BGeWpCMHRyK05rbjZkZCtoeU5VS2ZCZk9WOFZsRWM4enBKaW0yTUcvSVNjc1BPTmZKTTFDaFZVYkRUZXY0bHRSYU9sMEJNU25mODdKWGZ5cGRhbk1rWUtZdFdNVGpQMThxL3NQbFVBam1nc1pqZzk4bCt3VUI0eFZObzVOaDBXUy9wTGp5VjNSYzFyUGcrOFdENzd5bGxJNCt2S0xONjdDQlJQdDdUcGpRZ2JwYXdEZVZVK0NvNVk5cXVpZGpwZ1UrcXk5L0V3Tk9XT2E2YkZLMW5uc2QvSjhMSEpYRXlpWXlRa0U4L1Fmb3l1QVpuM09iMTd6N0VUTmNBc3U4aExGd29mdEVVOGdqZThlSEQ2NlBHbE9DZnI2NUNtdENSc1VNVlBjOTg4UWVJWEVmVW8rc2YwT2JhQjRNQXNlby8rRHQ1OGpXWUYrTEpBMUlvSHRXZWgyR0d0K3JydVdiQTNGRTdLOE13eldvVFVMckZnWXJwRWs0UmdOeWJiekpxQnpudzAxOStTU3ZQQ1o5aDFpRmxJdkc0ZXJnZFoxY0ZTRm94TlRocVVCa2Mxd2h5M2liK0FZV2R0UW1ueWp4MkNQMEFyYi9KMkJqWHlTNzVYbko5TVh1V2pyZnV4RzhwVlUwQVVQM1g4dG1EWmtsMlIvdzRmZHRmN1lQUHhJdGtCVmExOFBCY1VaaGYzOXl1M25oR2hzN2RVMFNPZm50ak91RXVjVjhCM2praDhEUEpWQk4veFlGbFVGMm1mbllpZWtLT3JMNkN5VndDYlhnU3pYMXVKWjdSVGxjb3RHSjVkK2xaZ3RQVkd6ZmhlSWtEekEyako5RmxPSXVocE1TcGgvd24rTkwyWS9FTFk2TXR6M3VwQzV3U2RrVVFwdDl0SCtNQ0pOeGowNVMxVFBHWXhtcSt0czVKUnBxZVZBdDAzTUt4ZUhyOWZrdG03UitRVU5idGtSbVpXeXg1QWtyZUN4S2lGb0o3ZDNqK0g5eDQvUVIrL2NyQTlEcXRySUpJZ0NsNEJ4bk1BODhxY2VpRmxvWThWZFBzSGVzTExmVUwzWWYzNUlVK25EQSt6UmxWZGhMblRtQ1dySkRoejVTS2F1SEtldzFVdnFFOGp2NVl0b25LUlppU0ZoQ1RDUzNtMGhqdWxyWk80VGxYMk1idTZEUDExZnBZSmhUSDlnOUFFeFVOUkJlaGwwWmNuaTFWd1RDd2cvdDRwa3ZsSUxnbmNwWk5UMy84aWtJV1FiR2xraWZibzZwcXRGdzNnNGV1Q3FBS2NjUlA0VXlDK29DVEV0NFE3RXpYT0NyaGlFZXVKUlhkSzl6SnBCTzl6WFRFcHNreXJibFBQc053aTN5MjIvWVN1Q0c3UEZvN01RcllKS1JicGRXSWl1SGYvTkRwSGRVbjZrV0hROG5PbTNxb1lTdGFNb290YTZ2Y01LNjFLNzBlKzFWT0pjaFlWMjNkSTNaUGdRT2llVWVWZThmcUJJd3lhWnM3TXRvdGwwbGt6Z0NGUk5DODQ1VzZqaWtCaFoyOWliQXg3RlVXSnpxZzVCS2JrSDNkcG9vU3JhMFZ6Z2dKMlc4N1p4UXpBVUVsRkxRZllPcmw0NkJnWUxPR0E4RTB1L3prbWRrcGplZyt1MnIwL091QzM4MGY4d1hSYXBZNVVqcWNrUDJPRW9uTGoyaGFkZXRRYlNDaC94ZzhrOWhlcU5aZmFyTUFwY2dIVnpCK0JxK1BVa1l1VUhDdTB0a0s4bjRVdzVrNGhlRFU1RG9Sa3RiQ3B0aURIMGhSa1pBdXpueThZclFKd09PUk44aGNYQnIwQUtIUVRpNytOdS9KMUc5N2hEWk0wbk9WT0JXVmN0OFNYUkQ1SHJMektGTjFxbm5OOEZwZHBxN3BxMXZ4NnRVUEFJdVkwbXZ6UUFyRU1oUUI3aVd6K1N1TmlTTTN4SGxKUkV3UDlYOU95U2pVaTB4Z2h6Unl4SDAwRmtvT08vd1h2UHNnbWRMNmJpRXBYYzl1Z0hvSFhRS1JQMjVYditzZjEvRzNtd1FkUHFPejV6eUJ4YVltZkZhUFhaYVRNMW9xcGt4cFRuZnhNbWk1OEtidzI3Rk1RQ09aSjZPVEJ3alR2Z2lnWStTM2NEb0hvUmdjSy9hTVhzN2tCQVo1MXl0aG12bFdwbjc5VDhVOHdrenVGUS9mS25vUkhrd05waHp1RVA2Y0lXWVlZYnRiUlNpR0d1SlpFd1J3Z0xqTzdTVGJ2b2xDbUpDdTNNZUhjOVRTYnpMS2JhY3h0UC9MaEVlZU5VTWVzQnpDNGlzYkUyR2JUajRzVzZRZ05UNEMvdGIxc2FLTkdWa0w0QnhYeitFYWpTVktHY3NvT1RyNld4bTFOcVlEbWpMRVZwV1ZTVTZyTEVndFR6amZCbnh6aUcwd1lpWWErN0NmYkFEUnlmUDhlNUVEMU1EdnZTMWEyTHArQkwyV0lDbXA3Z25FZllnZzBPWFYzMGF3cEs3MVYzUUx3a09IbkVaa1VVRER3VXlrc24xVEExemo0dXNhaDYydzhWT1JFU1Jqb0J2MWxZZnI1RUd2MlVNV0JaWHh4SW50bVV6NENXQmUyTi9BbWRtdVQ5NllHSk52b2NDM1o5aE13WjFRcnhMWUlqUEdSWHdEaTRybW5nSExjUzAvL1l0Tys2MjNMWEZSQzRQZWRYNnhnU2ZUTjRUUjF6aUhlbmFMcGlmRFlSZHJrZTVQNm85bmttV3dzRUV3YVh0SmE2R0lEZ08yZWdkK2cxblpmcnFKK3liaStxY3JEUHFUS25ZRUJQMGZLRU9wLzB6UjM4WC96eVB1bldaVC9kcW0rRjRmcGJVbUt5cUFvU1pCVlJGVTRGSFpReVZJYnM5UXhVQnp4dElkWE1zdThDdUpkbERTbTBqdStrUmZqTXhzZHM4eE9nd2tTOTdZWHdUV2x5OVhBVk8reXlqR3JRanJ1QitqS2N2VlVxakE2bXJ0a1VvSE5uN25zTjViTjJERW0wMm5LeG9PQkJHT0lGeDRsbTc5eTJxOUxKamxTOXhaQWwvNC9pZjhiRk9UMm1DOGNFeHRrOWh4S2xaNG1Bd3pGejJzZTdvc0dGbjFLSUtjd3pKaDRUaUduaU5XQ2NBSllIMlA0VVhHRUZxVTlYVldLN2liV3N5enZ6YmtIZzlpaE9KazlEejB5Qm5iWVNabXJESm80MWVlSnV6d3lUeFRIYnlGQUY4M0FVU0ZuclFHcjJCTHNydVREbk5zeUZOVnZOR3pRRmFyOTBEbDVJZXNuSzY5S0d5dHM1RHdqWGtOMm1ybUZ3SDBBNndGUkhoWVM3WUtUQjdlMzJMQzZ1eEJrWW5peUNyTS9UeWgyQlpFOXl4RERBZk1Uc2FqS3NkQnZHMDNlTHQzbk5nZnd5YjhNTnl1VXR4TXFrKzdxQ2hWa0I2cWQwem9ISG9PYnIxb0pTZGVPWFZPTy9TNDE5TGpIMUh2Z1Rwd21SWlZmYVhyV3NNbVVBN1pydTBockpVcFNCVUM4ZFFGbUlCdXhNbjRONkJKOGR4cStZUUxHd3lFOG5lNHVML01OOXUzMUo4T0xhZUpLd0V0Ri94Tm5VNStoNzU0NGRQekdZZGpBNzlsaU55ZDU0cnFjTk85MG5lZWNZMXJwK25iR2oybjFQcXFDSGRJamtZU1k1MkMzSW5DdUd5dmFyNTZZdU5XWXRqVXZTV2k0Rmlqd2JMR2VmeDM5WlFmQURrZ3Jpb1BGa29VVEtVZ3Z0YjR1ZFd2QkJKNjJ4NmJ5VGJ4UzRxaEJzdlVPZ01WWHMzbjJKT1RDVlFxZ1hpK21RTys4TkVBV0tOVnQ3OXUrODViUjVlcXBuYlRwYk11V1M0bDAyT2hITmdEck8zZlltTnhQRXBiUUFkZTR0YzhNdGpHSm1NMHMrb3J1Tkd4VHQwUDhSYk1tOHo5M1BEakVKR3RQeVFJZXB6N0k0ZkFnNW1mc0lEbGRHelRqQUl2T2E1eGxBR2NaRzkvdUFqbVppWVBKb3Rmd1lRaVdtMi8rTGJTT0tBZVNaZDIxRUVCQ2VUUnRNaTJuQ0Y3aTQ1bDJEWjkyWDNJdjd0bWM3UUV2YnAwMTlONnNuK25KODNqaUE2akdqYTFSQlRFeEREYWpMQmpDUDJEY21SaTBrVWdNQjVnOGlDNEpEQmprR3J2SEJxS0k5OWsrVmZuekh3R3M0VVZHdWVUU2NISDZwSFZMb1djZzA5d1J5NkxaaGg1dm5tWU1KWThGcEtmTXVNVm5vVW0rOE11VlY2YWxUWC9ibFA0djkwN1VvVjY3dzdpU0pJZElNdURHdlNNMXNKbENIeDlWS2xaL28ybDhsRk1wSWR3YVdRbEViUXZna1plazFjTTdwL2NyM1BLNHBRcjhOcDRVWDhLaDZrcVQvanpqRmRQWHVPOUFKa1YxVTJSNmU5M1VjaklKaFUrT3FKdUpRSFkzUUdvRXFWUVlUaUU1WVhhVjF2a3JSVjRWK2VWTzN0ZWJ4dHlqQVA2Mm90WkdJSllOdWtzcUJ3SWlnQUlUTWIvM1RVVGUzUjVkUXMxeTNoWkdDZ292cnNxblZpVzRXM0RzZFFUL2dQbUM0K0xFZHJzZk1DNzBmOFhNOGdSVUpENXdPVmIxMlkreStSVzgrclQ3NnZleVdUR254U0tvbVF6MVE0NFBVTDF5V3ZlZ0ZDUGh4eVpZMmVxZE1ocUZVZUp5WE9rSjV2cnFrRUk3Y3kwS0JBY3VTRDFQNHJKeGhaY0RGYmlEYmRxMUZMeUdMWWZPTTJMcU50ejVBalJ4U3RwTE9EM3JBODBLYjVNV2VLY25zS2VjdnJlZXg2VGFDTGhxYmk1Z1kwWDEzcEpscUZBbTdvVHlHRndyRGFPV3VLRnhqcHFkMVkwVkh6YVpnWW9xNWo3OGwxYy9BWi9PWnVvem8vQUxWTzl1cGFEL0EzZzdTNzRHREV0UDBoWGhOUHNyVTdla0hSTW5ycmRjcys5WklDcm9DWkNZSE5IaktJWnlRd1gvQ2V0ZVM0a3hGTk8yOXFna05OUFB5Z3lEck5BSXZPeHlQVVdjQjJ5RVppbVkrTUdiS2xEVmRFZXVBb3hZTkFXdjFVaDRZZUNYY1Rnb21ER0t3WW12RzI3YXZVVVkvMlFjU2c5WkgveEpHNUs4eHg4cEcwZFMwWlZsNFJIbmVlVXJGOWo1SEZaTkd3NDNoOUNmZ2QzQ1hYT2ZxTTFOU0h0dmZkNnM2dk5pSEdCVkVCUUI2cTJGYWhaanVmakpJaC93Mi85Y2JWSlpYSXlVa1QvbEpWS1NNeG0vSkFlbVR0by9ib2ljdWlpSW9ld0ZudHN4OEZ3Z1FJcTBPTU83b0o5VmdQeVc5THRvNCtueEJRcmtBNUJNekNmOWJtUW1xc1FHRWdKOVBDeFFqa3JVQW1xUGJiTGg1d2E2Mk14N3hDc1ZnZGtVMVFaUlJXa2g2NmNtWGgrLzRHS2RSdDVlQkZMT0luL1N4S01YeWxidzBCRjFpaVVUaE42ZnRuT1NNeDRPQ1doRVVjMlpWSFYzWUU1TlBaL1ZnWFpQaytGNXcyN2lreVpoVG41RlhVaTgwMHBNRFVIS2pGZTFwNVhUVU5pRkUxQktxUEh5ZG8wR2dqK2haU01jTHBwcWxYMldXUDVzelZyMlFBcktyTm1oMjJ5U3ZPMFNkRWdQdERFbU5PRzRKQ2VmSUJUM0gybVVKTnM0NWZlVTdib2U0OHVNRTMzdzE3blRZWWFONkV3Q1NjbWNBMFBUUHQ2eTVPOFdZRnJvRnVHRlFndC9pYmFwS2VDSXc5OHorS2JkZW5XNEYwTjQ5eVljeXNlVkxOUHZiN2xzZ293dU5CcVJvaHJKNjMzdEswQUl6a2RQR1JWU0hMVUdWZlB2clhpRm5TbnN1QmlCUmhWQnRDR3lCckwyNmE2N09QV2ZZZVl4ZzdXanl3aFlzZWN3ejF6NFlOT1NyTE15cXAzc0lBU2ZodVdLei9wb3ROdC92MWxSeWNYMkx2c2Iva2Y4MUVxamU1d3VVVVhLMnVsb2hyZUJMZkF6Q2F3eFdKWkU1N1BMVGFZV0JSb2FEM2t5aFc4ZUZ6TTVzclFOSlRYYVd1RW1zTXUyMTJLajV3eFFrS081QWgyYlIzZFhEaW1CNS9sQTBrTUxNQUhIWnRvYnFPU1RYNWM3ZjJQam05Z0s3T0FwS2IyS2V3azkySDBjOXN4YktxSjhvMmUwTTZjKzRDQnVsR3d0ZkJVUXZOMHpzNkNMZjZ0Z0k1cmFLTkd0Z2YzekxoRm1iK1owKzlJWmtKSWJtVzk0Z3ZNWE56NFVRWVh6OXBRMEJwbWRNcmVDUkIxRjdOT29Yb2JPdW9ORGo5MStlY1JCWElGR2ZIelRQS1dSeE14dEc4R0c0VHdxUXBubFpENlc0TUNKc0NISVExa2w2SGd6YS9wOUlCOXZUdkFoQXhGbGRHNHJKQnVkMmFNQlJUUGYvcVZ5Zm9yUTcxWVA5UnZGNXZqK2JQbVlLaERlTXlIRXhZSkZLRjhFYm9kczBzWHZoTU94dzFVcndnZmlDR3VIVkxaV243RE04VXMzSGVaYUVOeGJKM3hrQ0lZbS9aR2FBL01kR01scVVYcGlvai9POU80czJ4VDc0SG4zQXdlaEE2UG0rMFlpcDhxd0FOT3lDUno3RjdTNEVPK3JiUkxXOHM2dkR6emlxbjBCYjFkbkVraWFsRGxBMXdOWmxZaDA4U3JSMzJPdFhhMUZHZUNUZVI5Y2x2RU9MNCs1RkFDdEdNbERsNUJIUlpDWXBhRzIyWUoyMEVJWlVrSDdmTkxmcldMK2hZdWJxTzU5Z0x4SythR1dzN1FrVEFOblllYUd3eWhJN0xZc0hYcVNTSlRpSnVFd0pHVHRHSDRiZDJ2YWlyKzdIei9MSXhyTVNpTElXdXZxYVNDc25GNnBIY1MyQTVKZitiTWt3dXJ5blBiVTlNMElpWmY0KzZQYmgzQThMNVgxbFBjSW1GbWFTdjczVGxTVEpTNzV3YzJNazlFcDdNaTdIQlQ5c2tNU1pKWVhya3VQTjR1bVQrWEhXU0tBT2MrZjFKMVdmTjZIVGlqTFN2dGFWbVFxWllIQWZtQ3RrTHkxVUxlblRUbHE1Nm1TK296OXc2bHBxaUFIenl0QnNpais0UzNHSVdGaGhGWittZEJJSmYwb3hFYUVyaCtyTnI4YjQ0Z2ZVK3ErMVRjWGhWSDczeTlkakw3b0JNUHRDRjUwblVmZkduSGpxNC9NQnl2eW9hYk1lZzdrdW9BUEhpV3o0RE1IQWdHSWIvVmRza2lXVTdWcWNpTnowM2tjWkFQQXMxK1Z0dFFQVTlTNXVDMldDb3RiUHJGV2dLRjhsU3lVbzMzZXRsbXVEWjF3MWp5MURKdmNhQW9TY3ZSbUN2NkZ4MENISHgvY1g3VlNqTWJnN1ovODFxbXZSeWpnTzQ4a3c2VW5zb0o2MDdubGUwYnBqV0FwM0F2ZmtMZVpraXJlQ05KdnVmcTJxaWZ2Smxmanl2dWhoajhDZ2UvcGhwSjBVMEYwR004ZmcwVG5td2FMVTZmaVJlcXZiZkdjWlhRNXI0TzRzeHBPK2hHbDFwOEdOeUNLWFoxbndqcVBIRGNSTWM5UUhWVDZTa1k2UEgzMld3ZVFvbnhadVFsUzF4aXY5UEVEd3dvc1pueFZXK3JUd3NNS1VPbEV0Z1QxVUdHM3d5cDloR2pXcUpkQzlRQ3pQYm9oNmY0RlU1bzZCZ1pnR05SS296cnI3YzU0K1ZBRDNkaGczZ3ZBTTdldUl5cXJsS1U0akpuUEVSSkVVNlQzcHNSR0NBSlRYcUk1L2NWNXpjVTNVdkJjN25xc3hWVk9XdFMrNXFqK1U4NXVSVTZ6NlhsaHBIdXpnYVRHbkJ6L1BScFR4RFNjS0ozV041eEdVbklqT1g0RXNjREwwMGVXdkUwVmZDUmFJeG1ZL2NLeTBTZzZFdDZ6ei83MnhFN29MWFdoR1dJVDVJcEg4ZllqRDd0YlFOTlE2ZTNJUHR1cHNUTDZpWlJuYllhOEVDZUxRUE5xM1dlNGg4dk1mMTQzZHcxaEd6Z0t0NHcwNlhpOHhVMENwRUI3YVhyNm80TGVYcy9WRjJMVDliWE53OHNEKzc5QXZWQWRSWldJYkF5eENVZXdCcjlrK2J6NlZvSmpHSzZoOGdLT2NMelJQajErRC9XODZiOU4wMTRpZ0lIMEg5SE9veGVmVXBwWlNGQXJld1pTdjYzM3cxbmx3M2NQZy84eU5QdGMxdzdNNDFEMzVqWUdLNFRwZ0gyUnZNc0VNc3YvYnZLYXlyTFZKcUR4NHdnSXAyOWRjekRqaGpYUHZLamE5QXVYS3kxYVFENzdUeW92ck1qTW9mSDNVa2IxWFlSZVpST3BmSDZpakhLc0ZGTGlrL1FPWkZqbVNHZnF4Y0JWM0Yxb2drVi9wb1luMEFuWi9tV3dPMFNLdkxYeEpySlhocUN0VVVnSWNpZnNRaHhTUjRBVlBwUWJDMVU4T0ZueHlTTHIrSDFYZDBuT09Bc055SklnUnVJaWNsWktnMjRTTXJEd1V4a0NmVW1YWnUwVDdVNHVZM1NBWXZlYXJUN09GeFVqWkdCTEs4cndERWw2WmF0RUc0by9mSDhkR1JBTDVGSnkzT0c2cjFFcHAvejRBT0ZNc1hNOGhsd1ozdHhrYVJnTEFGN1VzMWVhZENJN2NqU1JPRVVWcmIxUm1aTERPTjd2QmFDNlRCVWtwNUR0b241dkNrcjlsYlZGVENKRWd2RzViNmtrN1h5UHlqc29zcHhVNlZTeDRXVEZKdG0zNzdSYmdBS2k0aDFKZzYyOWJvMHZhVXlLWHcwdHVabkllS1F4bXN2elBtV2RJQUFyNmpYTTFWRFQ3WWpIdGM2QzhFMmdPK2VmVnBtWVdBMWFIZnZCTnVtdEtkYlFuUUVYNkh0bE45cHRwWmJkaHJKeFVRN2Y3bldXeWozZ0ZmN0FhLzlwckxSVTI0RE1TTWkycGlNVVlFKzkydFhHTDV6Vm55K1NEUzZ2OXF4azJOUGxSOVhLSzAvV3dqKzVSMWV0UXcvUHh1dkhPd0lWWmV1T0ppTEFrREp5dll0d1ArVXcyTnZQSzNDcUlnQk9XT2IwTUZvMkh0dWJ4OFlCZG9tM2N5ajg3RmJnTXp0VHdoc2NETWxxdWNrZVJrWjJqUXdYcFA0QS9ZV2lNV0xpZkgyb2IyUUdFTVB2ZGJQRnJpbm5wK1Zaa3hLN0dBSWFhOExHYUZaWENDU1V4bWg1WDR5a2VhSVBVSG55WjI2TlZxOW5BOHlGNWNsdWNnN2UyMEd2N1hUVE54QXQrMjBYc2o3Vi94YVhlTGVWK21DckVDaHc3TGliNjM0MWkzcTd4Szhlbmk2ZEVNZmVtWHRMVHl5NENyWnF5dm5GM3haQnlROFdMbVNiN2xaY0FlTGRZcmZwbWhTY3ExWFFTcDQ4YnEveFNPZG8rTTFpRVY3MFJmMnEwTHl1eGZ6ZU9KVzlJVEU3QnF2WTEyVFdYckdtdmNNU0piRWkrS3ZPQVVORXEyQlZZT2R1ejZFaExVY2c2N0RIK21GWFBKbVNEMXErZXBQOCtKdmxWWHo5cXBBb1A1SUNOQkk3ZWxFcDJ5bkFqWDhPdlVZTEwxekc2eFpOUVF3RXlrbitYVmRlTmViNEtBM3lKNXhodTA2WVVUM0pOTmdoZEl5TlM0NW9vVXhUUXU0L2x6RmpzQTAvWDFHV002MG9TMW5kZ0Urb2ttVXQyRGFHdE4xcEFIVVg1QWhkR3ZYZWRwdEMzTlZhUUtBb2RHMjVSTXBTaVlORkhWZEN3ZEptM21yR3lUbkJEZFNwM3lTVGFkMXZPQUdyV1hGZ09ZSndZNUNjei92MllYcVRHKzMvZjBuTjdDUDVyaGNpNnJNUzNFOTJWajZIWXRNdmpHbVYvaTRHUUttaXcrUWF3L1kxcVRXcWJTUGdZdjJHejJOajMva2IrSHIvZlhhVVVqZ0VuSjBOdEdrdE1nVktYSWRVNVJOVnNQNzY1K3E3V1pDNjVBWFdnbGFMUjZlV3Z5NUhqejlHU2pJUFFTbWowNm9ES0dqOExNVHNDZ0JidW5Pei94U0lzMVFtU3F3cWpScGY2b0Q3cnA0V3hlSzNUOW1PU2JGRnpXMktndE0zTW9oWTVMMXFPTmNpTVUrRXRLK3Q1aExvSjNCd0RVK1VoaWEvWTNjTXJHRjNFdWJRY25TV0ZvR0dlRlRBdnNQcktVaGVzbjExbkxER0hJdUJ0bi85bkJKZmxiTk1jeDVxbXJKMzdyS2lnWWJpTVZvWk8wUXpKNG1BSUVOemt6MFVuUERsZi9zZEFwajJwdGdhTWZuckM2Q2hhOEVrUUtxWHpMazFkWUdFc1F0T0hYUEZMYjNFUnNsd3ZWNmhFU0lDTE1RRmlQYUJXS3BnY2ZmSmJxZUh6ZHh0cHlKNEVtYWJZb2djUGxydHJHWndSL0RZemtvU3VWbmlYcXdaN1k1d081Sk1HRWx0V2xVTUFNdFpOMGxuaHh5Z0lzVmZQdktxVDBxKzBsdHJSK3lCY1VVdWo3ZFhERkdFeDZwQ1JxSmV4YTh3NEV0WElxdldOT25WRHVBaitoUVBZZTBEU0hoZ1FLUTNIaENLYUtUWis2MlZVOEVOZ2ZYdENDeDVTdm1CdlU0Rm4vNXhqd3BCR3VBQ0tMbkUrdWszdUpZaVZTd3doemV1NVZyaWNUR0NtcERhUVVLL2p4TklnT3EzSEJLQjIwUWxNZHN4bUY4eTUyaytWVFQzU1pZZDNYaEZBUDgzd1dycmFicnVqa2xFV01qMUZUYkVxb2dMd05HTmNYRm9sajJtR1FOS0ZTdklZYlBPZVNVTzcrY2d6Qk9UWnJaUDdLQmhWUGM1c0Mra1BVMHlqVXpzamNHaWxkNEE3bER6TkFzOEFDZnROK28yckNkaU9zN2lpZUlLbGNqMmY1WWVrNzFBaDBWTjY5RG9rN2htZEFBcE41OGlaRUNtMll5MTJ6NjdnZXIwMlZyck00R01JQm1kd0hZN1A2VkZvOWdVU21hckFQUkVEQWk2aHNtaFlMTWdCR3JsTkNWbFNCZWY2bnhxUzViZHE5U1puak9FNW5YWE9nN3ZaUExPOVY4Zk1LbUVDNDFpTlErNEVSc3V5eml5YzJIS3A1UDVnOEQ5M2tRMGw0YXBFNkJSWDdYM0lsdXFBVnpSaVN0U05DUHhtTkR3b09Hc1ZJdkJRU3orS05sbEtOVFc0WDVidEZUZFJ2OE5uN3ZZQ1diWUtyd082dkRCVk5oaEZjT2FSZWNHVGFQRFdhYUdlaGN1TGhHVmEycDlxamtMNm8vR2d0Nkg0aWVoNGRTc0txWUxOOVQya1V0NmJ6NEhBejJmTXpXUW02djE1NXNmVlo5My9LYWxla21KNEZtVGN3MHNGN2phOVltZTFYWHRnN0VmVHZtQVJESEpXb1JBK05kUnZOWDljU3pUM0tyVkg1bDVMN0dGRmUzRGVRL0kyeVdWZjc4bmF3VXpNdlE4Y3JCYk9CcjVLdlNwZnM0ajhQVWxHVW1PVENQQ1c0a1FWcVpvWmcyN3NaVWN2U2lDMnpQdWhiYWttck8wMkk5cmQ1Qndmc1h1MTRGNXJyMnZnZnhscnF2R200bTVJYURWamhZYzJSTmNtMm01UzNxS0Z1eHZHNzFnd1BCckh5T2x1L1ZuaUJiZ0k1dDBOMUpHU3U5V0d0b2cvQlp1YW5NS2dCeHZUV2tkYW9nd2pIK2hTMGY1NU53U0NQaU43eHUra2V4bEpqZVMzUWxQSk01djh5eUx5Ti9pbGUvWFkwNUxrWlBrTU1NaFFYSUNzZXhwVXE4MDdsRDdZZ1o0dG1CVU5kQjBRTXBTbXA3L0JLRVAvMlpOcGI4Z2ZTMUNBdkZpUklLSThlT0hQVGFhenFXeUZKVjNWZVM1ZHk3bTZpSUZydkpOeTNmSkJMRHFzZ2F0YTVzcU50a3BZUFhoVXJPU1ZoWjg2cUJXTHVFajJYUWRyNXRZM0NhTWhjTmtMZ1FhcERGL1FpWDlucldVRm9zNHAxSVRtbFZIUTQ4MUlaVlhlYzBmWkszcWV4OUVCUkJ2QzhrV3pHaUxoYXc4dTh6UHpiU2E3QklTZHdxMFhIMEEybUJKYkQ3d2QrT2swSlNEcSt5SjU0V3ZpbzhvdFo5b0pqOTVhTDZPb3pYYzBEU1NnL1Uxa2s4LzVRR2sreThpcU15Z0RNOGpXNmJ1NUM5TFpLOXB6bU16d1RSeTRYZ0N3aE12VDZjblZqRWMvWkIvanJBbkZMQUlRaDBaQlZyU0U2L0ZBeWRXZ3FaNStoaW5xU0hlUXhaZW5iM0FhUWZwODdkMDlDTVI5OTNiOXlFTitSNnV3SjJEWFFhR0RmOXZFdHRrdGFJM2wwU29BaUxyWG9XTVo3c05WaGtlYXZpaUFLVUViM3V0Tm9UeWROcFhsMk0rNXY2V21aVXI2bzlJNEpxNk40VmJWenkwbjZNdVNPdmlWQ1N0OWtRTmRKdFhGTE82WGlacUVQbXd3bkVpS0NCd1AxZHE0WUNOeEVrMnh2Y0hUc3JUeWZlL2xObGd0dFlBWWduSHcvQXI5ODduSHVTeE03d21LRWdYcGQxTEdmYTA1elVEUm1BK21WQzFKM0tNN281a0o3WW1za21uTHNMWFZnSXNuaXFuVmFLNXRjZzcveVJVVy84VWpxWUErTlJBN1A3cnhYWkErU3h1dVIySGszS1JFbEFLTjdnRXlhV0JkZjhNd1dMOE9lQXo4RjJUNmJKU1JTVmhnc0ErRUVsQS9JQVRBZGpuWU1kTDZxWStpWDBBM1dhWEJlR2FQY0FUUGpsSkx2R21vUEFCdmluOEtXRDRGQzNFNVRISHF3VGhlUTYzSlRjSjVnbXpQWG5uNXBhSzAzSTNtb0cyMDYycWlQaWhQMmxxS2w1Y2lpNXhmRzhOVkl0QTVxamxSc0RNUGlralpqNjJCSXYxNU10RWNRZW44bnV1RXhJRmQzWXZkR2ZpRzg2dTk1MXRQSjRxdGM0STkrbzdZeU01Q21IOTJOQjlGc2lXNFpBN25scldFN3MvdlVJRjB3eDFmQ2dnOVhqU0dOYWI2eWNmalhyMHVmMnNiTkxJZEIyOERlMFdNU1NQa0M4QWJOVXJHV2VHNlhnR21lWVF2eC8yazdpNVNwbXBZRWk4bFROQThIbHB0bk8ycS9ZZGJlMGp0bkpPSGg2b0gyc2NmMXRScUF4YVZENDUvMTFDUlAxRzkySmo3d0xISzFKbnJqZWM1WG9MUU9hVHpvWnpxVkNZc3BiWUc4Tk5WOWM5cnJHQy9ZVThMc3Rzbks2dUlyV0x5UndGMzQ1WWV5cFI4dWQrU3Z4R0hTVUFyZW1lWmVNL2dJQ0FnSURtOWEzVitldWQxMi9COUlBQXd1aHcxcEIyZ2IwakFWTEhmVlcxaDdoSy96UEM5c3krYmxraE5YOWF3ZUNWeDlwRFFWcngxSFNFNlRWM2U5ejltUU9KYTkyb0ZlUndHT01JdHhXRm9ud0cvcldUTDdIUzQyQWdrMFQra0VTLzRiNzZTRVN0SnhxVXhwMnFKRTJSeEZiUmpSaEJtNlVtZVAxMWxwQk16c3VqWmgrcjVVVFkvWCsxa2tvWGpnZklWaVRMMUIrSFBnWmd1VFFRMkF6aGZBNzRyUFNLOEY2N2xYc1F5aUp1QXg4Vm44anVadXc4NXhwakZUOXQ5Z1Z3UU9vOTN3NE1RQkUwNmJKNHFWMXhnYkFKOGVidDZyaS92dGsreDNVY2FZRzRRTVdjVllXOEZHTjNtVVBWZTEvYWplK01qSmREWkJISU53dTkrdWdRdm04Z0g2N2d3YmdtVFVQQWJjOGpoSjdRbTNmMEZvWVZHSVZPeERJRndFN1hhTmg1NURxRk42RGhFaFc5NVBOWVl2Ri9OUnBSQXJraGNqcW1VT2ZzTW5kQWpzb2FWWGdLQjA5VW9KSmtGQ3kzdkdOdCsxUFBkZFVjWkVwKzJLQmp6NWUvZEx1Y3BCbWFmWlozL3gzbDZpY0tZZFhpc0NHQVEwejBHUER4Z2o5ZkpVcDZGMnBmQW9xdWIwM2ZrUzJGMXJBWUdPUzlxSTk0ZTVEL2RWQzQ3T1ptSDd6bEx0c1hjbGphc0FoWW1jSlNqOWw1bE9GN2VoVThPRnFJTDhkK1cxYjlqSVkxZWdmQ04zeGNFL2xJRHV6L1dXMjNIMlY3cWZLZk9IQmpVUjQ3SzBpN3B5bGxaU0cwRjY4ZlkyVzg5bHgrSnc4dU9YeFBBV1VhdzF0S2tTOXlrcHU1bWNXQlNJV3RWa015eXlrODFCRmdjelB5Ui9pUmM5aEcwUm9tTUNsNWZ4SjdLWm1WeVJodlJLUVB0RlpFZDdXZW84VjVUa0E2WUxlTDVYK3dUbUg1QzNCQjVsWmtLOWpZNXJVb1VKdTJ1aTBLbE8vcVFrUjhBVlVUa3NHV3hwN0djbUo1YUhvdnErZkkzWFBGZWpRK1JYZDYvdG5xY2JqR3FLcFkzcVdaVXFsSzlIcjFnOHowRWhhRjZEdnpnUXUxVTNQNkhGanlUMS9OSWZReEhEcjdiS0tNSWlld2hHY0J5ZUlUUmxUZ0NtN3FTd3pSRlV3VVovN1RpOWJiNmlnd1BNc3RGTFNCaE9HNytDUExSdkNvKzZDaWhxeDMrTk1tNE1QZmRPWmRBZFNscUJZWFovekxpcTRMcis0QmhuUHlKL2pMbWVBOW1waVVmcEh1UXZrU1ZNT2tEcUx1TmlXbkFURTZZelFlbVZYY040aGpjTEdkTTZ2dWxYMkFIOEtNWFVra1VBZnlta204OEpES0FJUGZrangrWGM4NFpCbmFMNVhFcFRNY0h1NjdCV1NzTnhxUUoySHRnNjJPWlhHRG9rZ29wYy8zWWtIa2pFcVdsUHNIZ2JNcWJPMkdndXY1STNJdE9lRHhnUWxqQ1hPS1BIOGp4Q3o5OVFKeFMrTllac20vRksyeTdtZksrVzgzT3FoaUl1U25KS3AwK1ZjZlNSbGZhVTEwZ1liVDFGUjFjZ0Fja2Jha1UvNTl2WGlaVEZmYWRZaGo4L0xBY2RuS1JramJmM2ZkME5XdGlEZU5GeVBSbXY4dVJQOWR5clo3RjJjQ05hVlVnekE5SGdxc2RKRmU0MW1wT01tbWtBUGhOdzdEeGpCZUFQc0p6SWxkUUdVeEtPbmxiNXNtcHdnSWFabVRVcmtMQ2tnRmZaMkNZVEVHWmdTUkhLa2Z3UEYxYnhLQzN0YU8wNWNrM1lEaTZLNTVHQjNYT3ZRYU5wcFJmTEtwMWRmdk44bXRwQVZvMnV4VFhIZk1UbEJJam82MWk4ZUtzVlplc3BOTE1WR3NXekR6YzkxUVVQaFdCamo0V0JRUEVWMjB0Zk9XMFZTS1ZNYWNwUGhmYXpQM0UyK3NGNGh0WFdZaG8yZjR4VDdobjJYUXJEU0NWOHVrUktMa0I1eXAxQ0NYWS9ZREY2K3FzVXYrOEhRcFZiV0dKaDRWWmh0TmdPZEduSlJvZCs3dFNkUDhyNUErRzhDWUMrME5mNURLZ1hUYXZsVGVobkQvUmZ3bzE2NHdsK2toSENydWxtclRpcVFEbjZDMjZlUlFMcFp4aUROY3dNYTI0Y05hN2dDRlg3ektGOEFyaWV6MFkrdjJMOTQ5RWN6emU2aVNyMEo1ZkpOWUdOY3habGF0bWpWNU44ODVlSllSM1VDcG45Y0J5ZFRlVmFDTEVEUHduUFRJQkk3MHptNmUvSzdVOHQ2cWxuU0kvUk9oL1RJNWZWdXhIZ3RQd2F1RkIwdGZyY1RYdVFyOTdNQmFsT3NBaTNpT3RZcERsTEg3TmtvQ01rdlp2NWgwaDNmRjExZDBNQk4yUkRSNlQ0VjJqNUhlaC9IM0lDOURVSWZNRVBGV0lyTlRHa1A0RzYzc0oxVEdwVEplYWZSbFZxZnowMHVDMGdobzFQMUFjWmwzbzlIVzl5NUFsbWcvMytmb25pRzZqS3gyZ3oycHRGNyt4NTQ3Q21qTENLOUhZb0JVckttM0ZDbkdkSXg1aTBURmJKWndXNVBvVlJWWjEzMUJjYVhCeWdzNTFTZjdaYytraUVLL0tBYUNUbmxGQVRwU0FkVGVVM2tFQ3JmOVNXU0M3VStrKy84d3o4eEpNdWt0c052ZC9rcERTN3Vtam9uYStHT0VmMDZJQWs3b015K0N2R29KQitacWttZVphcGNzalA4RlRWclRDbXdpeFVNZ3BPVTY4bkVhWkRMUWJ6cUhRc1dqWFgxQmVIV2N6NE5qTFFHY25SQ1lPbkhwdDA0aVZ6dGNWbW0wNlRJa1hPYmhVdDhFN1lHWExSYjBJd1NFQnpvMGlZQTRsbm1lM2M5aXA1djVGb3BjQU9zZldpL2s3OUplN3cyWFI4NEQ2eEZhUUM0U0Qwb3kvQy9DSFNvV0l3a3JBSnY5b3NSZHBwRzJoTHJkZWVWRmVjYzVxZ3h2Q3NCWTlKVStraElUMnJ6d2Nlc0NRNnBRWlZSbnpqbzY4QW43bE52Sit4UHpWV2Z4Qi9qMk1veERtcHFYL3cxN1VkZ3MyREk1NmRUR1pHeE1HcWZ3eDZDckhBR3lsU01MY0k5V2ZFMm9xWVlaYTZaSVlHd0U1dFV4UlByV3F6NFJQNmtoT0ZnTDR1eDBiSEg0d3F2dEVUMnZMWm1IUWlsUXhUQ2pGVHdnbXkrWW9qNlJuUmp6a2xhWXMwcE5PMkQ4aU1MN3ZaZ0doZkY2UjFMVG5Wd0N1eFdKN1NGem1HVUhXVWNQZTRpbzBHbG9JUVhFNmp6RW1uNHpDTW9va09VaU5BaEs1NWJoaXpZN3BaY2FGUmFYRjJqV0xFMlFqZGRDZzhuMHRWQSt2cDc3OTBOazI1QWZOUEVyLzFJc2ZGbEdPV2l4SWxCM0NKVXgzSjh1ZFNkR2JycUJGd2Faa29xMnVteXNWd3o1bW9IaTRBcWlQcHRMM1FiN1JNc2ZkK1FwSUoydUxDY1pPNUNDeUY3NHBrTm91S2daTU1uaXdOdTRnRFhMZ05aSS91Wnc3bmpkdUo5YjhqcVlvSktaTFRQMUtNMU04UjhyS1NkUUM4Qk9FLzV3a3h1RXJKWUpUa0lmejJsVUI0alM4SXBzY3FtRVVqMjhPWjlDVldiNVJGUVJRY1lHTHk5YUtML1BoRXl3TCtZMDB1a2g1UDlPc0J2NUxrVnRpSGxRN2t6UnhSQ1VWbjNldW8wVW0xVUJXbTFqOFJsem5UNmFHK3VlcDZvSTAxOWRGRVdyNnNBRjYwZFVvK0hGS3loSUlDVU5zWlg5bnBtKzJIQkJoN0FVQ0pCejBvU0J0ZjQ4NW12R2FMeG53YlUwNHNLbTNRSmNqaUFQbU1BSXgwRE82ZUEzalNibVYybEQrekkzTjMxbjRDWXl2VGtpRTdpMEFwT01LMnJDZlpQQ1JKbHN1Tm5UdEtzRzBuS3F1cEs3ck9mZzlSYm5mN25lQUt2T01id3FCRkcvRExLRnBFMUlBakN2M0JaYUxodlgxQm5tQ0p1WnIzdjBZZFo3dDR6eE9oNERvZzhtQUJuL1I3bnM1eVlLNkJpRGRzWFJSeG80dnIrL21LVWs0dmJhWmRLK3lNaWwyaGVSWHBSUkV0N1pxRnZUN0lZQU9md0R0RTAyb3dWUnprRWZyWEx0OWMzQUg2eWdrU3hRYzA1T3g2RDZkWTRRaU1zYVRvaVJKenNZdEs4UlVLMXBldU1wWFBMUSs1dFhTRjNUZjl4YjlPdTFKS1p3SmMyOTVKdVc5VC9ML0hweDY3VENpTkZVdzBrd1VjN0tSRExLT0ZxcXk2aFNDaTIzUk9ka1dsWnF2eWJUcTRVTmxFeDRaZW9HUnlTVmMyS3M4QmVZTytTRUE4Yk9uVFliOFVIVmZDa0wxTUNyVTJxS2s4S2dNVHBqZTc1QlBlVDB6M3dlWm0wSjRVdXFZVW9ieG1QWFI4QVdjTWQ5Qkh3djVSNFhxWkFYVXVQcmF1R2k5SEo5NDF6M0xMN2Q2c3NDMUZ6QlZjaWxlUGxoNU0zZGEySnFCQzBleXE2YW1aaGYrUzF1alhGbFBBb0hXNS9mSFVmZTU4RTkxekxSRkwrUUNKeVlpem5pVi9UMGhqclN2eGZqeFZ1a2lFck5Bc1JPbGhTNFJISE9Bc3c1QXA4emxjeWdtUnIvZlhFN1pxLzROL3lOV2l0NDZCWmlrZzZkdlFIUnd5d1VhbHVNajRXMUZPMDBzYVgzZzBkVHNBLzVFdzMyN2xjZi9yTWdGRXZ2Z0VXQWduY2d1YTMrb2Jhdmp0QnZpc3MyV3dRL0NKZ0kxQnV3VkN1ZEFGeldBekJFSjE1T2hscHpzNVpjQXlBZVNVVnA1dWVKZ2N0RjhSN3MxMW10QXU1TWQwczVhNy9qWHl5UURIREhYandUV3MrZFRJWm9yRDJ4bDkxZWdORFN0bVhUd3BYTzB3M0ZGdytEeUprQUlUWFpKU1dxL3JSOHFISlhWUmdsdmhONWtiK0ZjRGIydW4zTk13bk5VQityektYc1I2R2FqRzIxVG9SWmw3TTE3RVNYWCtuL0RWWklLREZMa0RDekRCelFJOHpIUmEyVHNjczZ5SmE0MTRreGRsSXZ2TjJsQkhGRC9ubmlpZDNTN3BPQVdtNzltdzFyWE1yOXJIbFZna05zSDAxOURFczdBcjlpTEpjZkFZWWRjdzFxOHlQWldlTGFGRUJaNkJoVG9MZmpueGhtUmYzeS9QSFdsRnNnMVZMNTdBV21UYkdBdUdmTGxtUTZ1ZHpHRm1US1FLZER4S1N4SlV5MU1mTllycC9DNVdTMmQ2Vm1wUkxGekNKV0hUMmFZMUFRWi9RS2d0azhvVXN4Qk9PMWFUTmZlTEhnc1UvaGorNjJVeW5Ya2tJcTFvQU9sdkJTZmNJd0VEeEc1ZFhXVTlNZzRhbW5BOHlXN1c2NnNjZDZNc2Rwd01PbEoxM0ZBTDlJQ0xtZ095RnIxNDhLdlJiNDRnUGpWZHRFbzF6M0FOSTIveDFpdzBUSVJmTVB1d05tM1NjSXFyZmZ6TXRrWE5GVzBpODRpdnJoSFNsYkhQR3BjT2x3TEd0elRCblpWTzdlYThvYkd5N0NXM1MrZXJsVVVBOUlkcVcvV2l5UnR3U0JrdWx2ckY1aitaMVJoNDBlOWROUkR3TmM1TTJacXgwRUFwWktBTE1laEZwdi9IVFlJck1RWkkzK1JaWGR1aWsrVFU2TzJ4QjZZMjJ0TWJjMVZBSEZMbGlGTUMvcVAwZ1VUY2t1b2FCUDg2eEN6NEdDMURTbGlPcXlZcG9BcFl6K2VVNXdUamRyNWdpOWM2clVBZDczRGZZMjZRZ09QUk5xM0QxQ2NCcXVraVcyNTNUL00rU2RvYzlTZ3JOOWg3aVRldUhGZW9FNE91NW1GRkRXbVNqTDR3cHZYRklieEY0dTRubm9IZWxadHJhR04yTnAwaFR3eTRnbWl2RHpEc1lPWjVkYzlpVVNkRGY5NnowQXdudktoQU9Zb0xxRjlONmY0anRmWUIrVEJhTmhreGRXeUxMbXFwdVNJOXVzazBocGVJQ1pCK05xZGNuZ3kvOWdPUTBWR3B0d240bERtSUNEb0pQQVJyZnpERHRybjVvQUR6Zm5OMURjOGRkRHA4czlHN25YK3JEVmh0OGgySEtNajVDbVhrSXJQTjZqNlA2VlRLOWNvRVE2cStoNjRxWDNzNFZnNjVhc1dZQ2pEZmF5VHVrbWc0Ui9GTytIbi9ONW9CVjVPVkROWkxuTWZMcElhYitoVVlNRzdZMXgwbXkrSFVxRWRKYWt2WUhuUXcxeUxHbU80R3VSSlB1c0oyZDFwOWNYNnVkYi9Jc2I5Vk9QWWgybVVGNmt4eC9uQ0kwRncvOGJMVFVIMFZDWEJkT2E4c3pTbUwrVjhVVGlnWkx2TXBkeUY4L1FVUXFQeEhWdTQyM0QxZTg2em5IRlpDYTRtS3FsRXhHOWpHOXQvTEpaNGtHOFZxZXNGT05iVmVlNko3TjU0NmRnYzA5S1YyVnVhNFl2SnlBbXpDRHZaU2VSZ0owTVhwdVZtdXdDL2xhejk4WFo5Y0JkcFZESTN5a241TnJIZE9yZlFhSU5nWGZtMm9DdGcvU08xK2ZXVHJzckpJTFc5dzQwRFl1WnUrQWwvdk5sbGR3L1EzQVRidGV0SXpHWnAxSzVrVzY3ZEhDc3kvVGpLMUFLbDZTY2tKQUpXb0pVbTJLd2swenovdGdCSDBsaW1nSUh4dzlqNTZQZ0lDQ0EwZkhWOENGa2pMVCtPWXl4R2lxRlBKeVdKVXpaYmtmemJCVHdtTXBvTTRqRlhZUXA1UHBZZ3dHRFVJM1htT29uU3ZLd2hneUxRMmxSMTQ1OVdwTnJJcVpNcWFjQ29EczQwT0d5Zk9jSkJRWDgwQlBWWHBhRVM3M1lvTUgwaEViRm96a0QveTlyejFzVDgvVDIybVlKRlJ3dXR0WWxPcjNHTmx6cnFWWlRFSDF1SGx2MXhjM0p1cmxDbWZwT0J6K2dHMEJjWlArSEpRYktIYkdKdGNhUXFxbEtUR0w1WmUyMnY1Z3FrMDN4cFU0SitZK2p0ZjJMNi9yTWorc3N2K3hMLzFaVHI5anZmc3NjUHIwNmZ0dEcvdGVmOXUzbXZ2OHEwT1RlU1RsaDBQeUlCV1BxZ2YweWRwUDIyOWd1NkluS2Nzc25mT0dkcnQvSE1DMUtZdjRnRmxTTUd4eFdCYlZqOEE1b1Y3MVdUM21Zb0dBYXBpTUJUMkVJYnVuc2RScXdYVEk5aHFpWkhVK3FYUk5WbGtkTkhwejRUdjNNREUxWmlBbFVsbnJ2NzNOS1QxQ0RYZVpRbWdoOUhwYU1GWmFEbURxV1cxeVdIczh1MVVkTmFkc25xOWdNQW10aVBZRVU5eldZQ3pZVVc3NGpwTnF2Qk9DTXA2Tnh2WFVFU3k2YlhZQys3eG9DaEY5ZHkrNURIWlVKcG91YThxT2hJTnVaRE5wbG5PUExGT0hQQmpBSFE3TlJEbVhPek15blNBQjhtY0dBM0Q2WFhKOW1MNXoyZS9KSVZVanVEOTB5K3pEWTA3WVVSaHp6UitwcFQycHMwN0U5ditzWndZMHR1MWF1UkZuUE5NWHlKQWZRU1ZmZXVNOWRJd3dwVTRRL3dXUUIrbEhRWHVrUlFXQ0MxQ3VjaDJZZitldkc1a2RnN0tVS09ySDdRWU85VG5hSHoyQTgwQVBZNVhvTllKb25xNlc3eHc1bFFOWUM2aWFZS3ZMYU0rR0YwVExCa2NBQURVeVNlS2hwZm0xY0VROTY4MkZqRHV0cGNDZWVUTGVKZHpwYjA0US8rVHBKVlpwenU4aVRUTWdjdFF0WGMwdmJSaDhCSytOa1RuUVMrZ1RwMW9UVlZDT1lmaXdEU1kwZlV1UW9CcDgrMmowMzVQQmFsRjZVRlJSdjdpV0hvME1pbEYxSjZlZmY0VEtOOWhYWWd6WGJlMXdjRkZnMUM3WUtqby9DRGVEL2dna3l5dm51Z1ZXQWlSM2lCa083cWlXVzJ3SVMyNCt6a1NoWVBPZGl1ZUlQMThZK0FoeXNXZVgzTVlNRXBHVTlVS2Q5YitEb0FwNFNtQ09janUvQjBpN2NFTWhFSUh5QXc1VTcydVEzV3N3cktVSkRRYisyTnE1WXlOWVd6OWlDUGsyVG95Tkg4U2hSM09TeVd4VTJEL1NMblA5c0FtMktKeDZzTy85c1B3MHp3MVc1cXhES3NxbXlwRERObDhCcUY1UUNKSUdhM2tYNVJRbzVabVJqQzlaL2VPK2t6TVNGZEZQYStwVGE5eE1valRiUVU2Rll5eHZDSHFTbWsxQ3J1MmE0RTI0dkZBd243bS9lSTNBRjVmRDZxUllQeW9DRDc2aXhDUnlNNTZZYU0xdU00RTdNU2Z0QXZZM1dPWU9NcHVZajkwYlNUMFpja0Y4MCtFOTcxVDFVTGlrK2s1VTdGV2I2V3J6TTlyOFd5czRIZXlLbk9uMmV5eklWcWlFb250d3RFaUZJWWtiWkJhcWgwOC8yMEZXUTVzd2N5SlBxMitycVZkYjlZdzBlUTVRZlQ0Z2ZacG9OTUN4N3NKR1F6Z0N5cTBnUUhsdDhmdkwxRVNiY3RIeFFKSlFhT3AzdGRtayt2Ty9MVFpuT0xoSkY2L0RCWDU0QWRRdzhPN2dmR2lhUklIWVZSUExZN00xekxlTUZNWGlSVExiWWZBcVkvblJkQ2QrYjloZ2VKUWpLanBOcU4wY1p4alhia0JHYlJNMjNLWUc4cHo1NStlOWhWUVhiRm90QWZzZzF0emR0SnE5Sk9lV0lsVWhBMUx3R3JJQ3BiUjJtZ2huR1FqcmpUUGFQNEErcXlJR3NyWVB5VnFGYXdZUURnWGpvOU5EMVpIK0xNYXR1dEhUL1VrVFlUcGpvNWhSSy9ZNUhGTk1EaDBsRmFhdU9JMUxtS3hwcGNnbTdSQ2sreEdUM0FISkJhZTkrcXd4aTl6R2k2djQyc2FmSlBKckNFSmQvQ3FqcFpHb2hRR0U0VE15clBzczMxOG0ycnRHS3I1RVJLWTNrbENBNFhQYXFZYWhZRFExWTk4YStWSFFZK3hESEdWSm5PRkE0eDhKWlRVZ2ZkYWJtblY2Y0Y1cDF0VWVKYktRRlViQ3R6WmZiVlJUbzhjZmkrdGNQWGNsbXhmQlpua05BdFBDa2M0aWN2UWRQdytxTVlqQUkvWjFocjB4a3hhbW5MOXQwcGt3U0dWeWRsVVJvZlZneUF1YkdHUXdSYmYyemdBZFhWZDlQdG8yTGlXdnZkWWo5OHVLcmd0dzZkTERuZU5zWitUaWs1a08yTVJRNlgwV2FWYzJVYk9kSnhiTDVMWmJzeHVSa1VHbnQraWtJOWhmVFR2UEFoVjZCdFNPMTlOL3FXNGpNbjc1SzBJbjJSVG1HaUtxb05aSG1kNzAzVVArQzRLbG5NKzlQYm5HejhvY3loSUtCS21HTlJqQUVUa0dUWEluYW9sNXdlb3F3U3AxTThGdnpHNEs0NDRSRjkyaUxramlBdW5VZGxveGNxci9RU25nZ1VPTlBrTFZMRU5nR2NXY1ZkTjhSS3BraElMVDd3WVZ6M1lMRFVZUVNRcnNWRmtFMVd2NTFFbjJmU1BSS2dqUWtwMkxsSTVHT3B6WUNhUDZUeWp6ZmxtcFQrNGppVEh2eDY1WFpCS0FmOTZtUDZtSGdVclNQcVIvQzdWYWZIK2NxVlRLQUhCNUZiWTlpMUJzMGN1UG1uS3o2NVBUSzRhbVpROE03RFVKVURSTUl6K0JUWTcrMzVMbDRLZ3FtQTZITXBBejBsM2NrQUlmcVBINGYwRnViWHRIMnVCek1pYkFqWnM2cXZzTno1dUc0V0UzWitUQm1QR3lRekdlSTcyRysreWkvYzI2bHNsRExmRWYzQlZrckNvQSsyMlBRZ2pZNjk5SHRxamxYZlZXa0lhbng5Rms5cEFGaE0yZmVoZkkxZGFla08xWXIvaXZzbWlNTW8vMU5jMUJqMVFud0Fwa0NSbTF1NUtUNTFWa2RSSm5Sd2lidHZ6VzZkcmx6M2k5YUJHNFJKdk9abzM2am9GUXEwUlNFLzFCSkE2WWwxeTZPelVwMmtMZ3JNcGxoQUIyN3BsOXlsU0hZejY4RkZZTlI1cUFGR25ja2VVM2FIKzJ1U1FNaE5qbDdDMFU3RUJjMnBoL2JsVkEydXpRWElXTzlzWFl2c2toa2FMbUs2dXp6eDRTa3ZQeFdPRUR0dnNnZU9wZVpuU3RoMXRvZ2xVOTlqR2JydEQyaStuakUrK2FucVRRVjNQZGZzRkpmeU5UZjhLVWUwQUd6Tm9EWnJxeGdVTHNINUNyZVNIdFJpc1QwbW5VVWEyeHJiQlh5QVE4LzA0R0htOGZ5S3E3Tnl1OW1ySm1mQ1NTUWtST3kyZXdQYVR4STlZbVNBeHpiZGJ4WnpTN3BmWWRvcG8vUTd3LzkwcWwwWjJhVGZOZTYzU1BsV1loNFBidnJkcVo2aUkvNFdlbXcybVBCZjZBNXVKMWZCbFd0RUhLUk9wR0VwT0dFcGE1NW9OL2pFTnM1UXlzU01UZTRwKzZVakRHMjU2YjduTWV2cEg3V1M5Wi9XMzFzYzM2RzhjalVEUjJ4QnNNaCtJbHE2WmdENEE5ODR2OW9kenRkQ0Q5MkFFSXpxdDF1SUN3UU52YkoxczAwSm1ZUzJJT2xzckd0NTN6amhvMmF3eE1FL0RzWVJHMGpYVWcvVGNCaDZROHEyOU9RRWlTcFU1SUtkVmxubWJtSGNid2xFbFRxa0wydVN3d2UyTDNuOU4wT2xDNVhibjg4aGpNdWUyODd2Rmh3L2MzL2VwdzlFZkl4Q2kxa3RlOXBvQlpBZG9MRFJGdW5OajdXWE5rTHZhdFVKV0xWNkxpR3Q4bFJxZjhyTDNCbm1LNS9Fb2RwS3NOOVg4cXFUSUtGVWtDMXhoVmlZUDl4OVR4OHo3Z25tSWtzcDJyVnNWNkxrT2cxaUJFNVdUT1Z5aEhsM3hMKzFpVG5jWXJ2d0xyQXBjclVPLzljYXFyMWIwME9aTm9nOWpWRGs1MG80TDNBNi85dmV1c2h3TlorMWo0RzZPQll6WUZRMU52U2pOWVltNk81OGNZQWluV2crZkJKRm80N1NDcTJyT0hRVGphZTJTSTUwYXBNQkNuZGd6bm1mZGE3ZWdOMzdBUWRqL0RYaFQwakRrYnNkRlBYcm9Md2xCaGRYQlpDeGl1UHdSaDJqT1lJdUtlc3ZNR24xZ3pCUmdzL0VZUWxSVm5pRHhUdnowM3ZvMStzK0V5dCs5cWdUS25kME5Yd25MME1JRGVONUh4QlJVYkhaNExUdFZnTmg1bTIvZUtTZmJEbXhVQjRtUDcxM0dyTFlTL2tQVGVhTndUQ1IzbFpPQXhvSGp2YVRZZjBjSjVUVHpHTi8xZEVONTJjcFJtemkrMHpEME5ZZkFNZzdhYXM2ZnR3aXJKMytuYXJaTEJtSTBjdEJUamsxMDBmR052SmFKVGVtZmx4QVZsOUptdUpzZjNVL2h5UStXekY0UjFmczFDb0lkc1o1QnkwNGlyOUNXbEVsYlBuSERkRGJTTnZ5YXBTUnM5ZWVRMHFDMGM5QjIrazJTbmhEMDVzS2tiYTlsM1pLcWxuNWZYb3djWVFPL0JmVDZxUE4xbjREWkdvMHFabzFWM01GRXVZM0g4cXpJNmJwNTFnZ0JXSVJNYzdDbmRxb2tVVDgyUkxrL3YxOEVYakR2Rkp5N1h2NGVLS0I2MndvQUdYY0wzRzdhTnpIMTh1L3lGaVVKd1NUWGwrWXplbitQdDNXKzRHNWV0ZVd1NldrUXNaUGpXVDhVVFA5aDJkSGMvWVY4bldHRko2TWhvTytnKzJlREgrMmRzcWhCelY4UmZ1M1A3R3pEWnNia0tjNXBhaGFWWGVhTWRiYWJLS2dWZUNMNWxWWDVpWnJGRm4rZ1RQOVVsSm5lTi96eUJ5cHl0UE1MbmY5ajEreWl4ZXN0R2tvaVB0cUhWRm9TanRjNU5mZjRwR2JKQU5IUGo5akNlYTNkQ0FJMG10OHl2WXM3OFUzZEFteWphQmFldmhOb0tod0ZCRVovcklocjk2cktuVHUzYjZoeVJPR2ZqOHkzK3pQOXE0M25TSmhYR3RVRmoyOElvOVB2Rlk3SHIwVFo1SHRaUlpzY0paMEZ1RW1FQ2V0NGpiZENCUGhUd1ZMZjBFRUN3RGgvRlZ5TnNoNUxnclRZa0xINHBkT1NycHVEdmYzZTZqSkYxQjFSb3BUdlFoOHB3ci9qOElHa1lOQXUrYTlrbEw0cCtacmxZeEZjQURCWmZIOHFDVDVhNWZTOVJvZHdvUktwYlJXaDZrTGUwZWtGYytjakRmWUhRSEhJOEpaWGtvN053VmJ1M0RxN1Y3WXFLWnJ5Yk9BWjIwcUNpMFJlMVJBRkQ0UUU0VmJpSlhyNnRUVkRQY2UxdWwzbHErZHdsbEFnV0krVFZJTnNpOENtTzh1M2djTHNGOTZiYVJEVHpvVkgrM05MYXFCeUZrNk1LMFJRcHBFQUMwSmM2QjEvenEzamg4MmZrcU5Obm53NlFuSERVMUpYTGtzVmxwNUgyME8xN0RHUXlwWFRUaWQ2dWVEM01vQUJmaXJIMVlzNzA2VmFzUTNwNlNJemthbVcyU1hiN2J3MGIzTCs4YmJaV3EwUEJYZ1VyeWJ0c0VCMnlUZnZFK2lVclREK1hienN6L1lvODBtRDIrY2luMEJDSU8vWStERjU2QUlSSk5EUG5NSWNXQ3NvdTRkMWhYekVad3J2aVdzbXUvcjdkRVBWcWpwcnoxQVd1R2M1WGdqdmcxVnZLdVZ0cUtsMWlvdnZtcEREL25NajdCb2JHbTNXUmpHR1VORkF4UEJkM3BuY0hwbWdHaGVuWHQ5STg5aUxtZm5hTEhHdUJsT0lWK05RSHZQMXYzcDdGY3lNUkNnMW1Nb1NpbDRYQ3d0VU5zSmxoa0pTR202L0xZeFBCT3VaQkdOYTRDUXZDUUIwVmhGZVorK1NSQXBLUlRwMGxYT0dwU0NIeUsyNXB1RUxrUzhweURuWmlIeVlLL2x2MzR3MFhzeUgzc0xUVENsRTZLOUxOa3I1anoyRjRNRUJuRTVkZDBKMDhBUkxaU1l4VXZqRXpCUmFuaEFHQXMyckp1dndBWkdzRkNJaXNsU3U2eWp5Uks1WmNuVWxHakR1MG1nMHlTYVRwYTYwaWJBbDlkYmFVci9wbGNMUUFxYTJkUXlnWndaSXZ1bGp6MmptTnV2Wm9paXYxMXRDL09xY3RyWTkrT3FURDVPakNQbGxSUy8xNkZzQXRhTHp4ZXhnMXdheU91U1ptdFQ1VlVYM05Rb3hwTEdoem5CL1plYk1QbXd4eVltS0dLZVRnc1U3cnNWY3RaU2JDNHVTUWJVdXIreG5tT2ZvcFpDK1BpY3c3UFBUOE9xdk4yaGJ6dWUyU2VNZTJZclJNdXZlcHVtck4rMXVTcU1xdU5qb1VWWW1NUTE2cGR2bEdKS05XNHArSnUwYTVLNGtsbzJJVDFCL0VqQ0hIQUpkZUZQUUsrUUtIZHhORkt4ZVNzZ2o5bDJwOWg4YTlybXRFckRTOGs4bFlnQ0lPRVk1a3N5Tld0dTlxZHR0U1BFM1ArZ0I3cGt4VlpkclhWUWkxYlpLOHhMbmNsSUd6WXMwU1h1U1M4YnNWd1FzVGwrZk95QU1sdnhvaURxN1JpTXkvVmJBejRWSU9sclpqSTgvdjhhaGNIdGVVL0cxTDM2bDNoVEFJV1U4N0ZKdnd5bitWSDRJWkZRaGtYeDhiKzdleW52enpNNmZWWHRFVkVNVHBWdVloZlhIR3kyY2RxWXpRZm9Ca0ZwdjJ3a0JvaXl5SDBCbFJaNFkrNVJSakY1K1V5dk8xWGJLVFFwTVFRV095ckFTQmxZUEx6cHUzVHl6VForT2NCelN6SUllRGV3YWthRW1BVVVlRktvUk9HeTkxWE5uVkgvc1ROWWFBazZhcHlhdEdMeE9uSlNBQXBkcDk5V0RhNWhNV2JIMVMxaEY1RXVUcXBUSmR4dmY2c09BU0QyWnAwWlUxV0N1OE9XV3JxajZDOHBybUtlSjdtMHlzYzhtRCtsL01PRjRiUDVBYXFkV2pRL3d2VnZtczlySXBkalpkSTJQaThQTW9ERitmdUNkTnBZTXdCT3pwcHcrVXU3bE9nWXhoYnFZdWVDTHFvMHMwQ0pKZlEzTmRpWmxqRVBzNStJSnZ6WWxKaExCWHh0RTJpeFI1V2o2KzBuWWkyZnA1Njlzc1NJVGtkYnJlMjdLVXAxZjhWMkhRU1BhOFhvdkF6NWZJL3FpVHUwNXNRNWVGeHRUY3JHY2NFcFpMdWNRc2kxN1BlL3lXUE5pQktFZG05R25LMlRjbGRVWnBUM2VBZTkvSXUwNVJ6eHJab2NuV0J2a3NIQWNWTGZUalB4Y3c3TGp2YjNIaXJxNk90YURUTkhGaHZRdS9RWHBVNUhXcnM2eWhGdklPbTdCYjZ6dXdUNHpsNlZBNk0xcGxJTkNiU0hxT0lVTHNaKzNHWVFDbmdCWDYyLzFiS2xGVmJyY2ZHNlcvRlZ5cnMrOG1FbExQa2VsdnJTaGYvSHJSejVzbS80aU9SMi9wWm9ic0F2aGRHL0JtZnVPcUd2LzNHVVdSR3lOMURSb2VKbHR4NzFaWWplVnBycUhvcm02ZzJjeG5hT2lyZWkrZDVpLzRzaHhja1ZDc2RIbHF6OW5ScEgrck5jNFJ2RUIxSXZnbHE3MTRCMmZ0YmFzOGdFNjF6c2tGL0MwL3YzRFZyNWVFYXZudGhxdDZxUnIvRlE0M3FXOTRTMUttMzRUZ0hBSm1YZCthZmFISWdqbmRvNFA2S3h2SjhxWlVGeUJ1ZUM0MlNQalNScnlKVGZpS2NOZG80bXhYVS94WWxFSlBodXB5YUhmdDdFQXI2eXR6WEw2Q3Erd21qaXNlZVJnK3dWWW5UN1Y5Y0QrRld6ZmU5VkpHNk00djd5a01TeUZGanRVT3ZZYysxTEc4YUMzbkNyeUxrYnprUyt6a0JnVEoyUEtMaklIb1JrVkhtWVlBSzIxUTkyTkpORHZ5SXUzWGQybzM0bVpjKzgwRHNBdVBwOVkwNGI3TkFWSkg1OGt1TkJja1FZaVBKLzRCNE1YMm9RMlRGT3RHMnVYd2t2Vko3ai94dis1RnJMd0ZTZE4rU1Q0OGlodE9yTzgweHVBUDJpc2pJUkwyZUg5VFZoTGYyZnVIVHIrb3ZKV3BHOGphc0ltbWFQZXpnUzAxVUMzUGJQOXlPNnFqNXBKc2hwTFFUUjE3ckNmNEtrOVNmSTRUckYwcWVKN2hxaUJKaDhUTWRlOVUzQnc4bFhVU2JBOWN0SlhhbVR6bFpxL01aQWRta1pXRTd6MHVzNFNWenhXTHJPd0h4Yk5kbXBhYncxVTBQYThLVzRtV1N4MUJCd2pONE5rRXhvSGhlRzJxeGJ6R0FaU3J2QTlrM1dCTWNKZWxTemc4dUV6UE1ocGRhWTBRQnpoMGE0UG1JZncvYnpOTWhTWEdZNk1oSndkdmFOQWgydzdwL2hEenpoU0JudTd1aVJHWkF0dFZRWjNNbUZzVmN3NFQwMG1lTGNBbzl3NnN2Tzl6b01nNnQwSVVsY09oZGlwOVE5T0w3bEFlUXhZZml1cDVQSUI3YW0ycWc2KytYL2MvZElVUzMvYWxxSUpHZjJVUlE2dDdjayt5NjJ4eXRCQ0kycDRibmlGMkp5a3RnQ3h2WGtMTHRPaThwSnpzdldZZzNSSDJvM213S08xUWF3d29kSjZiL2ZiRW9ieTJpOXZzTlUyVFZmYlBDM1k0TS9EUzkySWx3M2VtUHdmUlpYQ2NGeXN5cEZtdU1mRVJKSmdNS3F5KzVLNjBrZWl5QmdPZkx1ZXAxOFM0bFNHY3VOZDk5VjQxTkFGeW43SXQzYzloUXhNTWxvOXBLdzN6MmZEVURTMU5xeWR3WU9aWGxJN1hIUTUrNDlwYTAyOTVGSUtDYi9rbDRJSERmMkpBWFFQMUxaWmtmdWdLTStYVmhNd2FwWVRjM2dtdzJ6OCt4RU11SytpcXdKZkdBUUxPYmZaQ0VTamI4Y3JpVTBmMUhHQlRneGVuL1g3aWFFcFRKNWVPUWF4NWo3Z2FKZUIrREdzTFNzNWhRalo4cWZKRXd0dE94d281aTdmVG1rbUxETEFiR1R4dkJlbWxUUENSR0Y4VzZybDJ4aE90YVhocmRWTGFrdHR5NVJ4UTc0SVpHd1dQSDBpTnRBQlNFNVF5R3JZZzZ4QjYyQ1JOeWtXTSt3RndPclo2UExaOHA4YkYydk5NRzV1TGZuT2p2ejhoTENvditOaUhVUFlGTkpzeWV3YmoxOHNpaUNnbC9uTmlHaXAxZUtqN1BtOW8xTGw3MEsxaU00Y28yS0JSWVdZOXpmSzcwYks4WGkzTlJlMEt0WXpaNlU4YUw5L2R3T2phY2c4M2VGdFFHZUJLYXc1d21UcjBUR0Y2Nzdma0c0L3hzMi9zRklrZy91QkUrbE15aWUyejdkZnpBdzF5Nyt6Vm0vQVpTRkNzTUh4dUVTbjdudFNXMzg0L093Z1FsdVVyVzlkVEJuWGMzN3oySnpTRk1FZzdVaW9uakx5TmVtRFhQRnI2RkdHOHd6SUx4NUlpVEozQ3dXUHM5cW1hYzNrblcxYkZSbzlyNlRwY2syeXp5QTZnQUpQc0dMMGpGc3dkS0U3bzlQdHBJTklhUW16MXlKLzB6b3NobFBYUUEzS2crWVNuVzlzQTdzNUdhQ0l4MDRjdGxKY2diU28rVDl6SUdqcWRQMXdOTFdvOVh1T2tMN1ZScjFBWStCWkx1L25UcEZ2MGtlZ2hkaVlYNUs1UHAwSy9NMlRIRGVoNjNBZXM4NWxYc3ZtdGJBUkxtMmYyWmVHNzlSamdPRHhacFVNOEJCVVVLTU1PR0ZRTnJtQUVIM2N2N0xQa25uS0ZLTGtMY04vYjd0OWRRUU1VMFBJTzFWdWVHYkY0WENMUGRsaFVNWEtQL0NhZFVBMElnMVlLWWtCWUlacitOSE1mUUpPWkl3K05FYjl1ZTUrTVdjbTF6dnNTODRMMTRKcFdSQVE3M1ZVSWIxcm90NVlHdmFPNm1acTBwMVVHWUVXZmk0Y3lLanY4SW54UHRiOVFYVUg2WFVjcDdUbmVEeWVJNmRDUnduUytReElCN25jS0xpT2VVNHc3ZmxTOGVpdGxEVTNmMkM2YXNWUS92MzgxUnZWR0xwTzNVV2lQYjJ5TithQ2RMQnV2SytSMXpCSGNxZEZXRnMyRjFTdjV5MDNWRWpNUlJzcUJUY29ldjVTaDZjVE9DMFVQRkRkTXZVKzRXNi9vZy9UQ1hmYjUwTFVFQjAxYkRVbUc1bGwzTERjZ2cvQXp0TTFpQTl2Qit3c2tYSWE5SVZiMkhQaGFGazZvK3BnQ05Kbm1Vc0tlTU5NcVB2VFVTa3ZYYzdNeDlNc2VUNitSc1ZWOGRiT1lSMzBUd0w3anRkMkEwNlk1MUlJWmx6KzVoaER2aGk5ZTBub1RkZjh1aHdxamVSazR3NlVqV29FdWIyVEdJbVkyNGJBNUFHbFU3bmZQUTBidStGRzQrM1A5T2V1dlUwSmxMOURSRXc4Qi9LYm54R3FDV0hFR3g0eC8xLzFSbkt3MjFsTjRySkFuRVFISGZXZ0IrWFpjb09jS1h6V3MrTUQ4cjJEQTBOUGFrTG91L1Y2OWlhaTVhV0hMZ2JHNXBtMkxUaWN1cjlNSFgyZVcvZUh4aFFKcXFZUWJOZG5UKzFjaGdhSVVGNlA0UFQyYWhzazJ4SXVmbmlCUXRVTExpOWJWaHA3YkpBVVBSL2tETWZzOFVwRkxJU2hFeVVQRGo1UnlYc25nV1VyOGpQRklGdDcrOHRVcDhYelhRTDUwYnl2OHgzSU1HWVdsZTlpTnkvMU8ydlJnTGRKTHNsWXpnNFp1RWNrbk5qOUdlY1NyTndEeml3LzA0Q0NobVVJWVdFbFc1V3dPbkYyanN0dHJrZ2pDVGs4ZDhJMlJqRDluTTl0ak0vTzZMWWZwcTJja2xxeTNPaW0vazIxOEwwS2FRbXJZS2ZweVVGQnRvSnhxNjBHcGx6ZWJhYjJzRkc2b0lQY2hrOUdoV1Z6MlMvMDhoZEMvcmVmaUpJS0plY0ltNS96VllvZDl1a2ErazZWRE1LMnFZdmlmNFA3RnJLWmVFYmZqc2VOS0VZTWRSQ2l5endpRG9uL0pSYiswUkZXMFZGV244VmVNQ1B1MStma2ZSbWcxbDJNUFRNT3BiRWZmNFZkRkYxMmpHOXBzL0IzVmlIQVhiS1pYbEhHUzBhWkVzRkphZFJjK2FHV0tQQmtmTFNvTUdWVHgxeHAvTk1SR0k0WkNSTU05cnBtdmNHSVpqS2E5aEF3RldwOGhCQjl2WjIyU1k5RFNTUGQwc1lCUWFPWUd5WWdWdWlEaVZUQlBBdlRKNnJOSm53cFYxSGMrWjVKQXN6S0s1eWRuK3BENjQ0L0daUUpxYndEMkF6REFxY2pXdU5XZHljUkVLSm13aXBBVGpiU09UWmdCelUyOHZXdHhxSm10VXFYT0FuVzhOQVVVQytGaVRYQUFNbVlselFJaGJ6RnpPMW53Y2hUNXM2QU50WE9kcE9nSi9RY2NZM0RrMVNuTFNYVUN6dUJpVE5FZEpMMkVmVUpYVlBIcjF2TlRtOW1KdEo0R0NkZGQzeHFkQ1p0a1pMbFdnVTBoY0NwdUVtbjAyM0hEVjdYZmRGYTdpTXI5S283dFgzWU1RVkM3RDMzNjF6SmcrR2p4OHBXdk0vc3BCaUgySk04ejY5aE5XTmFlVVYrdmFNancyRWFseVFUSW5jMWpUcXNwN29QZ2FwdGNTa3FqNjZNdDg4SS9EY0xwcyt3MkpaZmw1RTI2bWY5a2pGd0FWRmtML1pOV0Z6NjdkSjZ2bFdhTHRRQ1pjRG15ZEEvOCtFVmNmL1duOWFPVG84NG8xZjlmV0JINGg5c0xBSVZHVSt1VUZRaHJMeXpBeEFGUHE0dWQyUDdjZE91cFF5TDN5K0hIMFVrbkZrUENZVmJUY0s3ZXV5cFFaSVNoNDRSemhVc3UyTlBmNXZQV0tSdWZwbG5pM2VVdTZKK05NWGRmdjNpWTdQVWZ6Y2Rrek0rVEJKeE4xK0lRSGxGWkdqSXhzUEdBckJ3Y1A1NnN4Zk5WZHZzcWV5QSs0MTJpZjBGbHdWbnQrNzRndmtWeFVMcWVnME5tbWUxNndVU2dLRUcrSGx1SEdLYnlBQmt6NXZudWJ3N2hVMmpMSkhmWHo0bzFpa1J3NzRGZlFVRlpOajY2NkNQcnhiTitkSXFTRXpCdWk0Q0FYbVA0VVJBVGoxa29QbzlvRi96SkxlcHlyN1FMK2VISTEyT2VkS1MyWnFHcitDajJCdWlrRlBwRDR1L21GWG41V0svSUN2ZDlEc3htZWFyWVU3L3pXRDNkbHdFTVRMZ1dqWEluSGIvU3F1Y0JHNHg4bEN4MUFoQTFpaWRKbWhXeGMwcktlVWdMb2s4MG1qYWs4L3RkbWc5K2ZiMjFVNmNLZm93T0xaUkdjQndLUGwvS0FxUENqdFRqZWw0dTh1djlxeS9leUZKSUVGZGU2VFlMWWZ4NVNRSndKNFVjOU4xTDJ4b0tyMGRPWFlsTTR3bDdtQ3lGWk5aNzFkcGZBQkY2TXBXaWwzeUZmQU9tbkJoNkU1ekRzUGl6RDZLNzBOWUN6L1VpcEpNUlVHek1ZOFVxQzRFUm9sTlZrWUhsS1g0ZEJsTGVJQ0c5N085eUQ4TER2QkZRSUdaNUhYTnlxR0xackR5T2ExVFY1YVJTWGliWUZUdHBoeTFIS0ttUWxBT3RTVmpacWhRSDBOdm5maU1MazM5QW53eGJMTzF5ejUzY09QWklrZHB6SkhhQjMyNXRZZkVoYUZLSmExMXpRS3hpMEREZzVybU92QVh6M0R6b2I4b1ZsMFFqSGlHK1lJSnprdWllQVQ0OGI2Z0VqRlpYazA3d0MwTFNOMG8waHNuclNMQ25XMXd4eVVycnJTSGtRQklmSDlxQjlDeEdrUHdqVVUxUVBMYVRkRFp5SUo2eUEyWDhVTzVNUzVLT2FYV0JlY20xVnZ4aGRYa1cvL3p5Sm9pZWkyT1VSbUdzSmQ0NzdBTkNuQWFyT21COWdQS25PWTRPRzYzUGp2NGw1RUkrUGFIbXdFTGNEWXc5RjZ5dHYyaTMrakY2YXJFbHpPTk1ES1U0SnpiaEdDUUdEa0poNXFNcXBjWGFTR3Rvem9FOUZYOXZxWitsUnBqeXhyOVU4cUJUdmZkMlltOGJTd2MzczMycnVxNzBrYS9vNi9sME0yejRkWGttNmQzMHVJTVNXc0o5MkNoTG1kUnVsQVM2VHJscjZHNm03Z1ZyUjVpZ0I3bE42ZmxZbW5HZGEvRDI2MTNYczMzNjFld084ci9DSzB2UjE1VE51ejdqUzY3aW1CMWVnRm9SdEExdi9IQUEvZHpUWks5WDgrY0JQeVpZSjRzMTFlZ2o2SzlUamdTcEZoVlFHUTBFZDMrblRJNW9NWm5ON1p2bGFwTUowYndUNG1yb01lRk1kQ2tJczRBYVlVcm9BMHhScmNNVHV3a0xuYlpWOXFuamVnM2U1V2gxS0tSRTFrajdUUXFNUnlWdWR0WTJyU1E5eFBiU25QeDZUQVNuS1BJa05kN2t1OUFmZFVPZFExRDI0Y0RycVlCNEZnT1EwZmZpRVc1cEVXbDdsQU44MVY2eloxS3JzWG5HL3ZPM3B0QmtpeXkrSFhjNXluRUpkRHRVNkYvSTRWSFpQbjhEbXhKNjdYYndwU0RhWEUrOXI4aTNaVlJHK2N1bU5jNmg0VEQzb1BMTWd5TzFvZnhtUCswN2g3d05ENE5CRC92MllXSzRLUkkreHBNdDByR0NkS1hoS3owRWtCajNkOUg5b1gvMTdZMDNvZDV4bzBaR2JOSTI4WFB4OGRUUlcxbHM4bmZLd21jbUw1aFcxbWgydXpEWnJkVU9HUUhyWVZ6TEYrWTZKYjNad0RPRjVQbUlLM3BlNEtscmcrMDhNeFpFVlptazVVczkvb3FWNFA1NzNWNlkxZEdsbzlmWVNnMEdsTU1pc01oZzNlVzZVdS9semZscUUzSmRzaHEyazRrUzdoWU5ZaEMxZUlEUVB1Uk9XSEk0eDZ6NHRNUVJwYnFUTEhmdTZyeWg3TnBESFFjYVM4RitlU3lmKzFwQjBQTS8wU0ZLRGZSQ25uWE95c2tCQXZGWVcyeWxyV2ljQkFERENqTDlkemZDcHYzeStBWngzTVpnYzM0THNPNS9pOTVRVzQ3VkVOK1ZjSk5menZld25WdU1XNnF5MDRZNUxwMFZIR093aE5JQmViZkZFM2FOU1g0L2pKTUVBNDB3REJVWU9mbWRrTmpJdTRoelVnYjZzMkM1a014OUdUa25meHVGcTZwRDNaR0pOeGZ2VlVuL1JFQy9ablpzdEZLOVJaWjlxZE9rbDBRWUg2ZDYyMlR6S3JJeUllZlpTOC90SlV4a1pyTzdtc3RNbXdwMUpDSjRERFBGeStnRmVGUGhEcG9hSjlZc3M0TEd4bFd0Y04yYWVYemJ4VURNZ240TzRYVjk3QmFUZFpkYUgyN2xjZHZ1Z3dnNnRIaEZWbUJnUVFPajZQLzl5eWJPcjdiTjI1Njd2dEVVbHNKeXVvZEV3YXJyY3Y5YXU4UTYvdUZxa3gwK1czWlk2NVhTZlh3blBnQk5wOG56N3FzYXdNYW1sQXNVQ2NwdDF4TzdFbTUwekhiaHV6c2lRYkVOdmcwSEpaNzF4Q2dFcnZLQjZtNmtRczZ0RFJQZ1c4dk9SdTlMbTdsY0VKQUlEbXJrZzdjMWNHengwUkZMYjVVczVnNmJscEkxbWdzdWEwY0k1RG10Nlh1Q2M0L0hlOXZYU1lZb2doZ3hqckRZYWNYN3N4enVySlFZeldSd1ZQV2JZYTBraTRsQTNkSHFwZ2tXYTFjVU5NN0lKL3N5VGUzMG1Ickt3NndRci9TMVMvd0dpZ3dyN0o1U21INEZNekpJT0w0SUl2VWdhWXprOXlKd0l5amgvMDlkQVovYzFHZFN0b0RTMXFPRlZ6YzJ6b1FqYXp2UE5CMmx4cE8vb2x0M2lUaElaViswTnBIYlIvQ1NGL2VxT1lvWXN0cDY2YjBOcnRHcEYyQUs4MHAzZCsvbi9WNmZpeENXZjhDSFo2UjVQTlhzakgyQjcwSmpXODFsK2RFd25hMWJrN0lLRE5IV0VKd2lmaHp5V3RIZHRRTG1ZMm15ZGgwY3kvTm1RVlpodFJrNkFzWU1kUGdMMnRLeStzNHkrOHp5Qk5KTFFsQmhvcGE4Nk9pUDlrcFdZZmNiTHRKTURYdFcvamtEQ2JYVGJoa1l6Ty94WmlxQU15TEMvaytIY252MjI1SVYzcEIwTmZoeVp1QmVNZUtVb1pwQ3VRcFZnL3JPREowL3FJU1NrTGJwU0p1aVowSFVId3JRWEJPWUx3RnFNOHdUaWVGQUxLNmN1OG5XcnVBZ3hmSWlQdkdBUHF1TnQ2d29JQWdCNHpET1ovTjljWERSeHRHTnpKckx5bStqUmFsUjZPVnUyMTRZOE9wRTdQZzh4L1JVcm5uQ282aGdyM0hOa1p1SHMrcVduMFVZWXc5K3FhVE0xdXMyK3lFTGdYd29ReFdlMDlGV240ZG1UNTJ2eDgxU0lCN3BGbHNaQ2xkNkVHWXlUSytaQzhaOHAzVDVnVmZEQUY2NFhUNjI2MTNGUTVicVIyOGlkZEFMa29TaHd4Y2ZadFkvZzB0b3V2b2x5cEtEQnlqRmREMFFUNG95YzUrdjBzalJPQ3NSbnB0T0NWNk96SzU3bWdqY2VPVFFjV29hSzgyakMrempmVzhZd1puK3dvRU5UVDBDRTlGSDVlTjB6VEk2U2w4TERqeHE0aHlTdDY0SXNyclBHRU5HNlpRcFF2RW1TMkN4M0Q4NGdWYldJSTVpWjZGZE9jOE1xbXI3UnZkbnBGYm11UFFRbTJuRDlhZlN0aS9HQTBIb1ZVVjRudGh5WXgzKzd0OHpNdFp2K0hXSWZtNmlrVlJmOWFObGIzajErS2VCUWRoSEFMLzF4eUIrRHBHRTlkVXFUSmZpVXp1b1Vjd3NMZHFqY1A5ZDVrbVl0UHFveTJ6MlBKNnVsZ29yMXMvVWloVUhGM1ZrVkNCa3MyNGRZRDlXbzRDbXhiVVkyTzB6WDZMODI5TmNRclc1L1hidXhVd0R4dGlxdDROamQ3dEtrbGhmV25NSXdMWlN1bXMyNGlCa2R4NU5yMnh5NjlWQVhmbld5N0NJbzVuN1NNdlNMN0xjdkk4Q09XTFJGY1dYMjIvOFdwSDJ3R0hTT1dKMUUwbUk3NXgrY1dJVlppdUZqYVd2V1BNdW1uZ0wxd0NpN29yUngzWTdaSVZVZHR0UDNzTVFWZzZDVCtUMGtHcFIwZFF6UzY1bFgrbVpCUWlPL2JIckdHL0hBTHJHVlhZeDNoQWpwZkwzV21BUWcxdU52TTJGRVFoOTkwRHBmZE4vc2VzRDhQbVExTXU1Um45RUdyNFJkMlk3SWJXVk12NWxsQW1Sb21KYklOVXo1Sk84TC9ZUG5aSGdiVndGWWRxZ1VwOUNZQXRrakxRV3ZOckFOSmxHd2ZOKyt5aVExeGd3bzYrQ2pYMVpOSkkrc1NtazJGTzdiNjlhbFNkdS9ER0J1M1loSVorSnJUbFpHU2RwYXp3YSsrajdQRXF3NzFsRU03Zkw1ckZGejl5T2l0NEp2bFNnNHlqSWRjY01MNWJWL2pWSDQrTVZBN1lOdFNNUWRHT1dNZVdFOTJPRGRyRnJSMk84RGhlZzMrVXBwNVJTYmNPNWJTeFVpcDNCUllmY0ltM0FyUDl6eThEdThxek43QzVJREd4TlZyR0xnU3I2SXVsWkpiSyszeGtVcFpyM3M2eXFnUGtQQTY5ckgxZzgyM2NFd3U1Q091MnJ6eldseGtrS0RYVVFyZDVyODgyOXIzOStGSnBOSWpGT2s3dGM0NFl1dVZXWTFmWUFIQnFzQllabzhlMFF2c1lFS29PNHRhNmNPT201MVM5U2lTV1JaWXpFWExyUzNQSURFZEw1VENCNXF5c1lNSXZqSzF3eTlIWFYxUXBNclY0SW8zWklSQWNRcktoakE3NldjQjRQSEFaRDhjTlZGWHBWUVpIRWRVN0NEN0ltQXFZYWIvT0VRcVdUYkVna3hjMzYxdTlhVGVTaVlEQlBOc3RiUU91UEJkWVhRbnRxWnlhN1NNcDM2MTA1blZvK01tdzh6RytycWRUMXBFdWE1dFBPc2ZaSjFaYUtHdFNQRUF1eDJWMlNwWjRKdU94WEszbWtiSWVjSE1kUlhuazFaYzNDQ2FsUk5vR1RjelBpbHNmOUNsRDBRbHJGVlJpZHltbkRLVjlGQjBqVXdnZGlCNEcyY24ra0ErVm9NV01nL3pSSENmR1lrYVlMQys5OVRsSnJGdEJiY1kxKytwZWd2VHk4bWNCRXNONC9xVm1jSkNFc3ZWMjNSc3ZaR21iZUNDM1I1TTdvS20yaFg5TTM1Ynk0Vld5Qy9ER2hGSXJQMllYVk9VaE54STk4WmFVVXA4ZEdMbDJYM2JlYnZqL0hMLzB1WHFhYmVGMnRsYm5DSWllUFVaQlhsekluZnlCakhQMUE2OW5WTVNDSE9GeXBEUjdjeXlOcmdZWndVUXJ6MEs0eCtqRmQ3WE5wclBWbDRMaXVJUVU0Uk15d09TMnNISWpZazZBUGRFRE9acjZBVi9MVVdoTTF2ajFKSjF0QitScFNEVGpGMHEyY3FmMkQ0dEEyaGZ4ejRobEtrRFZaeG5jSHFLSml0MXVHM3RYbGEweUtMMXpzTENHS0FQMW92aGdKYW5weTFUMUQyQkZ0ZHpiWWlYenlaT2pEQUxrS2ExTzZtcVJJVWRLSkJZY0lvUDhpWGxOUm53Ni9QMGpYVmNicVhXbWZKRkJsU3hmOXRFS29MQzJhOU55WFdYSWpOU0t0elBGTXNHMXlXMlRLK0owWVo3anVsZDIxSk9PbHFEVktaMjR5M3Y1aWlaS0IzOWJIMlluVVlmdktXZVZzcDZSRElobW1hTkdFdER3SHJtbWo0bjM2dzNUR0hzVmJpRmJFb2JQSktWRm5USTFUWUFMUm94RGkvWVA3dFhXbkNuKzV1TUVoZE9sUXdLNG5pS2JvU2RUSWxyL3NHaytFempyMHlmU3hkbEZrMHhxY0xWb0s1ZU84emZ4dngxeEtlcjd0M2xYeUdqcU5aUVB3Z25KNTkrbDJPSDFnRjgzS0VqTUp4all3Yjlsa2h6RkdrNGUrSHNPWU83UkdwZzhJcTFGYnVBT05xWEZMUEx1SVVnL2hlRzNHVHIyZk02MEVGbGNoR0ROclBqaTRKNWhXRlFzTUFCSDNCVHZYWkFIRlF5NjRxODVoaE81dzQvM2dkZlhDSEh3WnFqMSs5OWx1RUFoU0hDOXVDVUxmUW1aSGcrMDA5aEhRalkwZ0NuRlJnazJWRzdaRDI4Y2VLelI5a0NxaFpURURaaHlOcVdUcHZMWDVmSzRuTlIwQ2NhaE16cDhhWkNIamhQUnFYYU10dnJ0RmNKdjd6S1pOTjlFS1gzcjVERktvNHZxenAxUnBXOWE1TXlrdGtia01HY2ZtdWZJSEJkbDdTZFVUSFk1R25EMi90cWFqRGVXNlk5SHV5YmE3N0xUbkdpdXNnUnc0RUxTTzhhVTdzTy9kSVZjSTdmUmhGcHplcmptcEZhcnRHck9xWi9kTEp4a3hJRFpKbmhpblM0Z3NkMzdsbVpuNDlmR1pGdGQzelA2T1Z6TUE5MnFLeFlSLzRYbUlpMDdwL3hTeWtMRnFpdEtxdGV4YmN3SFpGTVhCUlRZblVIY0JFam50YkxCMngydkRoMXRyVWtuR2xnV0J4cXIrbWtmUVNoVGZDcU5ESWdobldXRlpTTnM4OHZ5WmhzYW9mcTJlalQ0VWVKL0xxL2dIeDdxZjVKYTVwRkU5SmZTYUlPSXA2ZGFhVExFUUF5TE5FVXd3Z0FHUVdlN0JVRS9wd1RkMXo2RWkrazR3b3pFb3pYZDFMRVFnTFFXSDFzNjk3WG1hRUhrM3dTUkxKTzI2TzM5YXBvbGI4M2dYNDZ6NWROZTlMRFBod2lTQXpRRFdBVEZXMGRhZUJCS3pRT3J3T09pWHgvV0h2N1A1NUlmSmtYbGkxUU52Z3E4dTBKRkg3RDA4M3B2TzdvSm52Y3FXdm1ucGQ2cHp5NnRINGF6WlRZQWtxanJmb0RMWmdxb3I2UjNWVzh2OG5MRzlQVFpvRGxCMUFWZW1KMitFV2RFWksyaVdxcjVuMDZJOVdtUFdFZFJKUG9PWEJaOWF6RHl1bXpVaURmOVVCL0VlSlJvekVnQzV6RktvMzBpQ0RmU0NpQmdLME5oNXlVZlI5VHFZdzNnRHh6TWJpNFRsdGZadHdMeUJTNmJVbi93RTJwams2Q2h4OU9PMTJqWlFFeFhRNi9NMnh5UWxHcWwvS0pBeHJhS0YzQWdlRWMycmsrS3B1NHBYV3dFOHBXTFFNZUhxSW8zRVlaWW5xdmpUS2ZhejhzT1R6c3VQQ1B1ZTdHTEo1ZXJxRnlpeUtXMktqem0xUnNTVDBIWHF4akRQZStyUDhyYzQrZWdObHpRVUtqTENNUWVVWXk0ZzJwTzZKaHllUWt2M2J3Y3crd1duQmVYVGZXaG9seDd4TEtxVGg0TDdFbXdTcmFENXZpOVVPeDY1TUdMditaYU1tL1lMTkI3SUlMVXZrNlVESDZhVDNZVXlWZDNnQ3YwbjlDVFgxd1MyNCtZbTZqRlduNlo5RXRtQWN0aERlLzNsYUI0K2tkU3Y5SFdvdlRBUGhVSXVYcFdOeGlJMWZoMHVreXo5b3lkbGU0bzFlN1NXSWl4RkJvdE9jUVY3NEtCTG9qbDE1Y2RxR1hSRGZWQ205VVFWSndia0g5ZXZGdW83bzVHOFJmdmZoWUJaR0VVNzdxaUtQMVpOUXlnSktPQlNrZVBLSjh4bGx5eHNOMVJ1Wkc0WHF5NUx2MXV4dFFqRjJqZWwrTTJiVmF2VWVDMU5xQzhTTHdLN1NvSCtwRTEwMHVVQmxUd3NOUERmWlJvUkV4UTRjRTRnTld1TTdvYllxUGlHRVZQenpOL0xXekdhODczeWdUTzEyb2hiUGRZMHU2cUJaNnZIQWNVbHIzWUV3aVlFNHl4WmlZTFZieFNpSjRDMGdTbXBreG5nanYzYUxaRjIvR0pqclo0dml2SzJrZmxpWkdmaFk2TDdqY1lhZnlIQzh3SC9rNmp0TXBkb0w2SU14TlA1Z0xncUhRdTFQVm9vcE5QVjRDQ3VYdTlTNTVtMXVxbXpUS2VDUkZhTUtaZ1VYQUUwWURmZTdwd2VIamJhM2ZUbENLTU13ek5jNjEwMnI0S2pMU3JPUlBOUmVLcy9TNDEvSGpjV0NlTldoYlVERHVSU1pNRFdZeFdaR2RYTU1TT0ZOaGZMTHlmbyt5YnB2bC85ZXpKazhBdDhBMXRJTkFZTHFwRSs0Z09jQjRPSWVHZVM3Qis5a204YlJMVzJHTUFRazlSaTdVOGc3UGxkWDIzdjVSOW02WE55eXl0ZTdCTjhNcy9BRGZ1am5nR3Mreko5RWxlUXRESHY1dnYrSlVSZUpIZU4ydHBzSnJyVW5DVFVZTGIyR0YvWTlQcDNwK2FVWm1ZV0NNOEhwZFRiT2pVcTVsNGdIdFUxSVh0YkxZaCt2Vk5oYldzdzFjUDVjNUh1M0g3eUxMbC90Uzl4TFZxd1dKdkE5VERxUWZTSnJSU3VzVDFvMCsrbmRVRDFrRHo3blhYaFNPN1pCWURsY3lKOGJJZ2RxQWM3UGQrZWNlUkN6eWFsSkJvOWM1SVZrNXhEd09zeEJKTmtLdkJidTNtdUE3ZU1zTDVpQXNJY2Y2UTFXWHVLMS9KWWdaU2tKMTllc3dveERyYXA1dTliV09Td0dRb0dzeThhRUhwL0t1SnBUSHIrZVJPa2JoQ0hEQ2piS25EY1BGVWdmZEtxc2dEdVQxejFucWFSZTRuTWEwVXhteFFZSFNiUHBNNVJxdmtuQ2FEaW92RS9NdFo2ZGlqS09uYWwra3J2WEhXZVVoQnZMMGxPWHZNMVE3L3U5NXA3RjFCZFBGMUtGVk83OExjbGloQXdtWTRBaW8zN0o0b3BhaWNSYWJwek94NXdmSTROL0RnaW95OUNKTjhzVEphUE1nOGJjM0NaaE8xNDR0RW5YaEZRTlpjL1QydFhMdUY1ZmQ5WXM3dG8rYmxYSm0vTEhManpnTUY5blY4ZVM1WEs0aUlDVGtMWTFXcGpETmVUems1aWlFekFtaGlRc2VOditoTEgxRGhiUG9BY05BQktkV2dFemlCektCam9rWVpxM2Jaa21Edm1yelVtajZ1aVZqVmp6V1NSZmZmMFlQWWtVL1FKWVVJM3dHUFc3VlBBdnBzNzh3UmY3QmF6Vk9pcjVpMnFVcWFhQ0luQlkyVW9kWkpVWFVWcmRBSXhTbk9IZ0xETmxVZzAzNFBoVmlXeFp1MThvZ0ZOREx4d3N3cDlQWitWYWlOVXErLzNvRGVRRS9VaGJSL2NVc3dhb0dmTWVzb2NkcmtqVzYvbmZLTFlCUlNiVjJ4Mmw3dGUrWkszR2dNSGQwRHY5eTE1bzlDQkZuRXJzYmpTNkdRWlJmeFY2Z0ttVnRlTnZ2bmN6Y3Vac2JNbmZLYiswUEhEb1ZkdmZwcUdnN3V3MHRVK0NlYlRqdmNJNWdhOC9aUWVFbG93STVLUHRGTTkxZ1c4MWxHZEVwTmlrRi9FR0VndjBSbUZwNXhNYzFqK1B1MDY2eXZLeTI1N1hDcXp5eW54RUJyRzVpekJxNHl3K041MklZM2tRcmpFSmx0RHFHWlEwQXdzRzJFK1hpNk9IMWp4RXViTUs3cHBGQ2FEL0hGamxmbk01TjIrUGl5Mk1zTGJtU3F4blRScWJjMFdWNDh4US8xMUNXcG4weHBhVTM5bXkxK0txS0lMbHFhNDVGT1lqeGNsRVloalZucGJCb2hhaTFlMmkrUUhnUkJOUzRYQnEwbU0yajFDRlN6cjFRc2RxcFNTdmxXYzgrbXhwcWtaWGRlZ2JsS2o2UHRjdlh4UEFPalFndENML2RpUjdRRmJ2YVY1TUVVZXV2VThIYXNHSStDcDBNV0FCVEZiT3Y4L3ZOaDRZckNFZ0pyRzlna1JGQ096TG10Tm9GWStTcXZPNVpEN1N5ZGJnSmNzclBkSjM5eFNsYWpDeE9nbEs3dkExMGwzL2EwbDZNSXJlc0FQZFRWZEV4SEtTZmI5RWkzSGJ3VkZPT1NsdXNmSklSc3FHd3pkM0RBWEk4a3RyaThiVVFMUDBvWnRVMCtaTFlZS3g1WG0yak9IbFJ2aGZ2TXJiNUxoSUhPSWxNZHdzbUErVnV6VUc3Q3NWY3E5UXpFNEN6Tk40QzJLTktmNXZKWCthYXpsVGFzWHVpMDNyMW1tYXFHRWhYOTJSYkErRHlVaG9MbzRXK2UxUEg3VzI3Zk5OWE9tcGxoT29KZFNRSld3RXM0c3lGTHFBNy83L1RKdHhOK0NlTWZtMHVhM3ZBNnpmYzVNY2szVVNXaGxTakhsTjNyY2t1cEdHZzB0Y1h1dndxZE9yQm45UmFGQUR5TWg1Vkp4TVJEWGxkMk9VNXJ1dHBrVzlmRzhDYTYrc1lOL001cVFIcDhBclNrMWdLc1NnVnJQQi91cXA0UWRxVWxHWmxYaE5uOHI0MTdPdy9rWUw4azJrNkVJVm9sc3YvMnoxSnV3L2ZadHJDMW1Xa05haWVBWEV4cC9qRS9HYjhjWjdNTVhZTWRtYTE4dFc2dmRWYy9qWUhBTmlMblFiNFRpTU1QYTJiSmd5dHlZNUtVb2FvdFlUM0oyLzMzbXg0SDl2RUo1dm1RSW05anZYait0WndtOU5leVZIc21mU2N4Uk03SHdZQkxtTTFucEhtTTNBa3A5UEFnNGJDTDhTVDYxVHl1QVllQVJMS1R6R2pkYzFjZWFqUWE3bGNENTJLUFhCbHMrd25pT1l3Y0ZENGx4SkF4dUFLRjFvR09pN25YZFVUb2hDa2pVd0VZMFZzdldzRWRza01vdEpzUHNIUzRabUdtb3VQaXdxMmxrcHZKcU5iaGhha2hEM0dXMTV3Y2hOZEhsblhYNHkzRzBZYW1MRStENnQ1bzN5UERXQUNvS3JCdmYvVmg1bnJMbENNMXJRSDdYUjB4bm95SjVWaDVweWJLeUNKR09aaHRPRTZKZTcvbjd6bElUaElUcXlnSnk4em1TZHRwSXB1Rm9ZREdaaTdwQUhnSnhReWl6SHRKVWROMSt2a2FYbW1XaUthcHhiMzVDQ2pKL1ExeHJ2Y2Nzem56MGpLa2pUSTVsWWNYVktTQWpEOXRZWml2ZU15c3llKzdXSTAvUmdZZmtaR3pITm5IdkgrRlg5TUtRR0JBdFNrYmQ1Ymw1dUpYUS9oeGRiYjJnNWJNOEF2emgrc3A1Z1ZqYjZkcXU5cDRENmhBckNrU0hVak0yRS9qV0ppMzlkeTl1dU9YbnZrc0FubVJhZlU5cFh4ODd5SERvVFN4eDBqS0U5d0t6RDdxejFkYnR5MlhINEhub1BDNjV6cFUyMXFtanZrVXlIZjRvcW15ZFM0eGs4R1JLT3JqN0dSVExLUCtydG5uZWV5Q1N5SFBxaTlnUkxXb0RXNWhhNEJyOGNUaDYxTFlBaU1Hak1IOFpRRnZPRm5hZjY1WUNaL0JsRXcwQzhIb2M3UXBkNHhCdEZNTjdNTVhYNVZiY3VndEJYOVdRbXIvYmQ3eTd5alRNaTg4YThETENCWExkWEVjdW9DTFNabTdqRElmbGZNaU5FdGpCQnFzTVlhQjcweGxtZmF6eFNFVWwxV3BxcEJvWGN6MHlYL1RTUEFybXBLc3ZKZkNzVjdjRFBtY2ZmcklDN2NVczVKVkw2YmsvR0R1OW9mNFFBU0pqYkdyYlppcFA3MUxaWXRjZUU4RWJCRXB1ckVsbWViYi9BL1ZmZk93cTFxb3ZhTHkrUWtjcTBBZ1lWS1B2QmhlOERsY21BZUgzVXljc2pIeHFicmEwbmJPYm4wL0FBeXBleHlHdWg2YThHRXJ6aHNCY0VhL2Y2L3F6TUlCUXRYZ25MbTZWZGFrYUZQMlEwQmpVRDBxVGxzbS9jc2k2RWswKzFublZtRXlzcWdpbkVxR0pQYmQ4MDZLOHJ4SmVObkd0MXIyUS94Mi9hcUdPcGlNcUxLVU9SQnlqQVVaQWdibEJTNjhsd2lEODZWNjhCd3gyalRKODlwUUF2am9aQ2hhTXk5NmRlbTI1Slg1VVhpUzZPVHVEeWc5QU1mZ3dWR0JTeDk1VEYvMzFPMWZpVFVsU2o0M1FGQXhzeWZEOWEwWlNNRWFrSGtjUnU3SW83ZHIrZzBCK0hlcXd2N3hBQWhRRkhnWlpVQUZMTCtmSkM5N1k0emhkZVdMTkdJZnMxUFhaYisrNERQRFJzdStFb0NxbTlCcFRKeHM2TWpPN1JyZFJORTRtbndQN2pHUThZbDRNRFZ5N05oUTVJWUozVUllNTN5SmlGeFQyc2VVYVl0dXNiM1o1RHBCSlpwV3FseUdEN3hQOUZtbUZGdVJ2TGNGZXR2QlF2RGViSUEvYXo3L2RXb0VHZHY1RlJtYzcxdmJTMjc5WTByNjVpWHAreEM2cVFJVFRONzVTeG9UajU1N0lFNCtGdjRBd1RVUDJabTR3UkRhekt0RXhFcXNVaUx3MlZDeDExamUxR1FRVFRaNjYyd2p6RjV1akJKZm0vcFpaV0VGUktpcVAwQXA0cVpHdmFEY204Z2NHcmUwQW5hd0tEd1lBNGM0VHFZK1FLeFlqbkE4alJCekpJOS9vRXZsalJyZjFWcFRleHZVODV3WVEvVHp3K2VuZmR5eGQ1Yi9qK3lxVitFbnZZVll3RWlBeDViMlFKcHdob1dyWVV5d0tkRkFneHZrWFJGVFZkYm1QQm5GRDhjazdvNHBZaUtQa1d6VklmSGxpUmFXcEN2bVhrb3VaY2JKNTdYVXRWMFR3eWsxSDc3eWRNeVYxR1p6M2JmdGlKaEN1VnFtYTdacCtKYUZKS3A5VlJUaWtJbkVYZURoYm1rRXN0cGFuY3V6M25iUWtxUWhHZk0zWENJcGluVnFmWWNnUDlacE91YVRqbEdUV1EvMDJTazRnMERHcXlhbUxBVm0xdTZRdWFudUV3MWFvaDR4a1I3c0hpQkFMZEZsZ1VhZ3NwUUJZQk9jTnc5WlpwTEt6S2VPMEpaTGhzNUdyMmRvdHNJdTFiODBMeVZRa251czh2ekwyMCtIWXBSaXJLOFFETDNrMUpuYWpyVUw1QzJvNzFhT3dEMHpBZWpiL2I4SDNvdEtVRXBzTzk0YkxjR2xXL3BVeFpxWVZWSE5WbHV6WXFMeTlvSkU2WEg4bWphZEswYldURnFMZjNUS005R1hHUnEyZk5jazQxZTlHWEdMQWdIZGNDOUZQVlgrbVEzaG44RW1nakdyR1NZalNndjRkLytZdVVIcWxoRDZ1bjhiRmhvNTdwSGhTQndPWC9Tck5rM3JyTmJKZ1dDL2pxeDRrVHh3SmRqaldjSzRyZkI4bGk0MkgzYUtmQ0FFQ084ZktSZ2luYjhKMHlrVlg5bE5TakpGTlF4dU5FMCtaSVdlZUFlWGZldXowQ3d5MGxHVWxBVzFQTXdYd2lMdHZIZ1BhRzkvdWUxZURtK05jNzQ5SUlidHlORkNJTVJJdGxRdzlvamtTQlc1cVlGbjN1bVVBSVlwRlhvNDNYd0pLTVpibVBQVDNLR3JpbXRCam9FREp6T1EzcHlsemoxWS9iNS85MTFqNkFzMFEzYzBxbjd2UEhvbEovRlo3Sjc0UjlmcFZxaGMzQ2tHb2lxSGFVRXBXSjRMSkdKVDhSQ09GMHV6ZU5lQm1UYjkrTjQ2YUV6cndpMFE3MXJDWGVmUmNrSTRlM1ljZncwKzd0Tnh0Q1Qva1hUSWZmbG12OU0xVEVpL0wyQ1lqbDVYczNmVXhNQi9nTm9ja1ArMzQ5akMrUnpSby9wSUNDWit1ZFhrTEJNTDNUbVY2bW5OM0tsUGRZQlR2ZzdsMk40QWRUalROaklTTHNJNmtRbXFteFJ6YVVSRUxrZGR1RVJYZlNqQTJNYmlWL3ptYWdaMW55anFtdjdnYW83MEtHdldsTG1QNjhIVm5EVFhOQXFndUlobSt1UTczVUZNdjVGeEloT2w2Q1dzcW5COUoyeDVCRmEzbVIvSEVWbzNrTUJIU1EzK1JHbEZoR052eTQrc0hFK0JacStPbVpya01rOFdHSUQ2bStQUjhyNXo2d2ZPcjBwQllsN0lOS2Y3dUF6bmYxTm8xcGZOaXdwZkZGWmxBTFZTZGdJeHk3QlZ1RC8zWTlOMktnTE5EUHE2VHV3YzNLZEdPd3dMdmsvcmJxdEtpK1NJa1NjNHRJQ2FPcU54cWZhY2xGU3hZR3NyaUZsQ3FzODFhUU55T3NWUko0dTdvbE1OU201bGdxcC9nRHR4b2ZiY01zK3p1RUhPa2lJZjkvNk1OSWlSMEdUc2lQUGZvUVFpZXhOL2R2RG1jbGYxV05RcFdXNlYyUmVGc0hsUWk3Y2xSR2JscUlSWXY3QTBOWDF0Nm5wc1JCY2N3RUtBelJVOWZTV1ZEQyttNENmL20yNDNpNmc1akNiS2M1WENXOVErOVRBTFZwTThRdW9oT0ViME5mMCsvMy9NWS9tL3RMK1ZGNUhBWklmaWhNamdmNjVjS1FBb1VGd0VFQWdnTU5kNm50RTNXM1pCUHoraGVvTUVTQnIvZmE4bkxab0tDOWlzeG5jbDB0a0xzeG9vZ0pKZnB3UFM2VVgyeXdYSE85WE5WWksxbng1UTZWcXcwMmJEUzhzZnFnMVhqVDExaXpiRGd1aWlZWkErOHpzTHZ6OW91VUJBbFM1S3pSRFBkcTNpZ3h3UWxJVWttOWNLWVRQbkI4M0FUdWRXV0gvMmErek9UaWdGSXhBRlZJWlQwUnFOc2hyTDR4cCtaclpVSkFib3ViUm9ubDlkbWF5NXZpYTVKR2s3U200V0M0QzEyL3FzM3pZakdFSEJXSVdrcmw3cTBmV0dPemNpdzF6UG9pSG94a1NGdGhZZVRKdXlTZUIyb1hZWmdSdFVWVkZ3Z3BMeVlzWEhQREtiSCswSm45U2UzdnkyYXdRWE05WUpvcnhzSkQ5MkVYa05qL1Z0dFByck96Q2w5ZHg2NU1NRDhwUDdjeEFSb01EZU9Db1FOVW9iNzNEQWp3WmVmZW8rV2NsNFY0UCtPcXN4VnlJSTQ4TEE4bUV3RUIxRGd0RlVxeFVydnRib0d5dGZndWE0azM1T1R1VFlMdEN0bDBFeUVGOXpBU1FGRG5jc0pmRmhpSkVkcG53bVA4OHB5NjBJdktWd0h2eHNkOW5XeEZDaW5qQTRrbkl3Q3B2K0R5T1pOTlJmZDBYQVN3MG1VMzAwQWI3NUNxMVlWcWFLZXpXMnlzS3NHc0hscHQ4dUlZempIZzY4bElPaGJ5VkM5MXVoaEF4aHFZb2RjdE05UlFaQXR5MjZVT2Z3ZXQ2L1RuRm13WFhDd01ub0xTMzZKMzMxUUZLMmIzR08yZDJNNUY0TkNnNWVWNmY3WVFtMko0ZVlpdTB1R3E1b0VlM1JrYmFmdTNjTHkxN3pxL3VFb1d4aVhtQ3M3dW9LVUY2VjRlaWVLY2hIUlBOakdzd292Q29xdkZFa1hCUmNXTjdQa1NYN1NOVkNBVHdKaHhnTlV1cUhVNXlFUGJZY25SVEs3eWJIOHlSTURZa2p0L1FkZnErWmVTZzJxcnUyblJMMnpGTWNISTFnYTVmYXFpQTZWd08yem9MZUYrTmF4T1J3S05HdXlUWEFKR2lWa1hFUDUzMnZHRUVGdzBJazdJNW5VZVJDeHlwRUlpcW5rTGd2QjdMKytETjJuWS9hSllQdEhRRFdUdkhuK3pRbldEZS9CbUlvMTRmajlZRlRZWE4wdGlLZnFsenczNzVEUFlWSXZjdEtvUS93ZXo4bmE1aWU3ZnNoazRrazVuWXhYWThCT01XZnlDS1RiZk5VVmNCMTd0YXpHcDM5WEkyY2E2aHU3OFQ2dVNiKzZPbENqbFNiQjdyVlNhWExDT3YzZFZEMiswbUYxRmx0WUpQWkh3djZZMnhqajRzbWpmMFVjMm12aDNqS01EV3hwUVdodXIvc1BqdVFmMDN5dkRsZ2QyV1l0bk1TdTAzWk5LVUw1ZnFld2oxaVdEN0RTMFpRbGJkcm9RMkNyM3BSeG5GZ0pYVG1CK3ZNZnMyeHRzY2ZIQmhaSzhsRnZIVzVBd1N1RWFVMzVmV2w0NFBCS3Z5anduc1NWUVBwWWNMRldTRlpRY0JicmVKcXZrWEhsNk1XT042WVRJYXFyUXQ5Vy9ORS9JWjRxZDd3eG1sVk5SRmhiY0V4cUordXEzeEVlR2ZCU25uUjQ1QURmS1htWGlMdW5UNkpFbUYrSnFyS04wR0tvQ2s3QWNtdnJWYWFKMU5BeHRldUp3anZKQ3hQTWxhclBKMVA5NnZqOGhLY0NsekxBK0xJMWNIbkplT2dhQ2RIUkJPMStLU2toWFVabFA4OXhZQk9xRldYakxIL1oyemczSlNmdnRUUkJoTDlKYmZvNGlUS1IyelA4azVVL1Vxd3RIem9YOFdVOGZDejRHWWpVSmZXeVJ0OVhRUXZ6NHpIM0w5S09QYVBOdW00eEE5SGdsRnF5elhBSDhNZEVyUFhac1RwNTliRVNlUXQ4akNweWgzNmxjR0JRR1UxbVZMRVNyN3JzRnZjRDhxaElMMGhNVS9HS3pyRldIWE1rQ1UvS0Nuc0pzTUJ4OXlPQVJ5WHVqZXlkem5ra3dRY01pQ3EwZkdBTGJVNGNnRnRuOVU2MU9HbzNwZlA3MmtManFmV2hscGZEVVI3U0p2ZHM2ZzBKWU5GcXFzL2tkdk5maFBwckJFbHBTajJGYURrLzBJZmRFcXNmNGlVMWo1TWIxcFNtK2lTTkZ4dEhmTXIrVE1ENVdOKzhsb0dFNE83cUNmVnAzMWw2KzBIV1g1YTQ0R004U3ZsR3FoWlNxclhDS21reXFhVDF5L0p0M0pxUzk5NGZkVG5TcW1qWmhQTWdxR3FBNnRhWitDSmQxR0JXR1pzTVgzaDNZeDhOTE94Sjc4WVVuM0hpTGxPd3F4U1NCUXJka2g1Um1vYjBOZG5ncWd0K1lxaDQ4bkpDWWM1anF1UmNDdHFUdElXaEoyV3VnN1VybFREd0FweDhDb0Y4MzFqQ1g4SGFsTmN5Wm1wZlBwVmo2ODFyenAwcFZ6elV2a1Byb3M0aEZTWGhWeU53c2hqMXJMUXpTVHNhVlFUTWxyTE5sYlZZSTdiakZac3FMS2VXNHdQREtoSGpsNTdrcHBvU0VERGlENW9RVDdWMHJEbUtoL3hlOHBwNUxabEs3TVR5NXAwbzNFOVU5TUFrWU1jYmIzclF0OUNOdlFZUDRBTHBCaDdvNm1RUDZVNEsybC9TVWFPdDVQVnJYYnROZkVYUlhOVHpkeGxGVGVVY1djL2FER0lzdDV2R05FZGsvdnJCeFFEV3lER1JQbVVnU3MxbjEwakRwK3pvTmhqa3VqM2dUcWhzcEkrbUsraFRUNXExcTB4K2hla1R2WkRiL01qbXhlTndPTXpBTzh5UkExdjlzOVlmNHRNS3VkTUxlVVVuNXR4WUdLd0syYzZ4Vjh5cWpQZW9mK0dOZ0FOSEcwTkNpVWw2d0hmT0MzNlU0R2xaQk51cmo1TlN6clUxMUtVMDJxS0NkdVkxc3lmaUdaWkphVk9zUXJBTHozQ1FaWE1hNlAvREJCOXVwTkZndFROeDZ0ZTcvQnlSVVN6bXIxYXNoOU8yVWdpUFpIUHB3aHZQR3B0aTNwMks5dUZ5UWVGTVEwRmlWcW9kb3FlWmxqTGFuUkNFLzNIV2RyOW4rMU5ET3FUc042cHBTUFUza2JSL0w2c0VpK21HTnFHMml1SG1wK0V6Y3hya2Y3Rm1tdFQ0bFB6WDc1eU9nYi84OGtuOFRrZW1kSU5RcTB6cHVqakpZS093cVVSWTE4bU1uL2dXVVNhemJQZDI3Rnd2b0d2VjhlK2Y5aW9rSmtQQ0JPOGlBMW5yMitYR2NTVEFOVFo5TlRPeUhXbkpncTUwbjJTc0NEelpYOXJ3QnV0TXFNRi80ZjY4azVTbEtBYUhPZ3Z5cktHaG1xNU4vbUsyYTVhM29LT1IreUI4cXF6V2VvSEdUaHJFdUdiOW16MmlrRXlmelJhbGtNdjFHUDlUWWhZRDZkb0tkeEtudGpkTHpmZVp2WXorN3c1cjJzZ0R6SHZ1dUFMSHhhUWEvS2t0TmpaU1VCUFZ1QmdDV25Sc2QrZG5ZbUt5ajdrdjVIRDlERnNwUGt0WkFNM3JqRE5QWXNQanBPNitMYXFjU1VTUEgrTEMxMk5oWUY4ZFRjU09LVjlKeVdSV3FzWU9UaGpFU1BYSGNiUHRxcEdCUEY3YWZLelMwR1hnd2N5TDdLT0UvRk5jK0xGdStoQUQzLzBEWHpKSCttM2UvMkMvYXgvTW42VzN2UVZlUWJzVkQ0Sk9PQXA3OGlybjNvdGNRV2dvL1J3MUNDNDRIOXY5WEFCc3FxdkUzaDJJYWJOZEVzVU9JVjNYRDZpaWUraGlkQkEydy9xNHJxQkJQbDlwRk9ybzk1ZnVoWVRVUC9nLzRxSWJVSnh6ZWZIWGVDQ0dWRnNsQVg4WlkvYzF3TERnR1JFK2tPWENzeCtpQWd0K0FOVSt0b05VcWpkZ2xCWTM3N0wvdU5zTjhZSVpPMDdUUWVkNFp6WVNlUXhoT0lIY3JRdFV6clZ4Mk5zQndDQUZ4NE1FVmFYci9jYm43MHZkYWFYNEU3MUtjNUpFYlNTUnJLcjA5VUwvUExucW03VE50bXVMWCtQZ2tqaVBtQjdNT3NHSGszcFhoRkVkNzV2NGlPWm9zVkJ4bXZBNGhhbTlESmdHM01XRHk1NE1jUTdJcU1SM3NTVm0xM251dER6YkZlajNJRWNkMUxQV2NEcUM0c2xaVEs5emlORkpHaWhTbUxVakN0aUVNVjBQZUc3WHBlQlAwSmZUTW0rK2IxVjA5Q0ltaENlaVBGK0xBaVVJL1NacmptNjJnb2NWWnpSQzFrWmhIU0V6YWlOTWtPUlFVc3J4R1ZaOUR2OVpVUVZQUlM3UlNacFVYNURYZ2VrYWlpZjNRVDJWOWZLRGpZSEdtY3dTekYzK2VSZnhreTN3RitoT1JIMlQyMkpFaHZkQWFxQkUxMUJNTmlJM1BkV2NMN3J0bVNDNklqenpRUVNkdFlsSVBlei9aRE9BWEErTWFSbzRVZFZVVnlWUXE5VVc0V3JsUXByRytxdVcveTh6d2JEMTFBc0xRT3VaOXFRMzdXT3g2WWR6K3dvUzJPS3pjMU1mS0Q4QW9tQUlmVklPMnBZeHp3ZnBSanRLL3p6bXlVdmg1YktiamhQc3l0ZkFBMDZqSk1QU0kwM2tVSDhDNlBrOGhqM0h5MFE4bHEraVFGaEh6UFl6QTg4eWhtTGN1d3BacjZuSXUraVliVjhwa2c5c0JxL3FEcjZCYUlUYlZnVmYxR2trRUFuN3Y3c0VSNXI0dTFSb1Rhd1Z5SW1uVm1HWDdmV3Qzc1VaVVdlbFlBZ3pDdXRuWmU3SnFiNTBoQjNpZE9FZGlNeU41OTJENmRRSngyTkZESCtkdFNJa0NFTnNiODArMDZvd2QzMGlDS2VCR01CcXN4dFU2a3VycUZXWWsvVUdkeUY5UlF1R1pWZW5uejhFK1ArN2cvcWc2UnJFTUwrdnI0QnBsY0FCdDZkcmVOaW5rQzd6SWExc1JBdjVSRkNVMGIwbU9PczB2bG1hSUhreEI4RlRQV1IrWEVpeDVVTVRvd1BsSW81ellIL0hIQmNwL0lKWXk0UTVaU1FTcmEweWJzeDRGcWZvRTdWdHhCc3VLY0VmZG9ZeHhvcXlQUFhCMHhhemhQb0s1MmFIV0NQcDMvWkVBN2hlZEJCNTZPb21jakg3c0dua205YmJHZWFnRi9nUElUVEJlYjhNZlQwdC9qNUZ0Y0xSZC95NmlHNXkwWVFPelpteFdQRUFLZ2ZMN1BjZmUzV3hjOCs2TjBvMzIzK3dyMlAxZjNHMTVaWE1hMzhJa2tBU2JCWndpQXlHSUtnZmEwdmtiNjBNNjJlclBBbGlnRjRyUmNXZWtNWno2TU1wQy9rdGc2Kzk1eTkxcmMwbk1wTlFPS2x0aVhsS2tnMmNFazN2L0N0ZVhmM3hscDRyMStYSEowQkVLRmdRZFErRUxkVlg1MnhjVkFhd21UejdVSGZaQUI0ZHh1OExxcE1XVDQvOSsvdVlnQTJONS8xbGNxd2wveU1zRXQzY0kwMis0V0VwUDdGdmFyUGhReUY3elBUTm9CeEdScWQ2QVQwSDhqV1k2ZWxxU3F5T2JWVEVpYkN3WndMVHQvWlZjYzdMMGMxL1dqTjZtSkJTZDJUZG1nQndtS0NkVTNYL3lYVGpCakovUmthV1BxOTlTRmlsWjc2T0RodzY1bkp6ck5jMEs0ak5sblFFQXE0UlhvWURldkJnNDE2SzhHVmtObGZUTzFpcHd4dmV0VHl1dmd5TkNKRC9Tam9Ubk94b0NPbDRYZ1RkWktMYmw5MUptYUJhUElMQUQ5REFVMFY1OHZQeEJPSHZ6bmdudFBsN0hubVYyYjdOYjVpNDJLY2hHSzlHVEJsYXNxbWRFMHVkeUlTVUF6Ny92ZktOR3oyRk50a2lMaG5VMXN1Vm43emRFZW0yVklFN0xMSnIzUHRJbWw4OFBaY2E1T3dRYkhKbHB3ZkxtRERCUHRmNzdkUHdIRGxwYjJ5SzErR1lRbkVXbk1XbmxvNUJTOVpVbGN5UGxtMndCaC8wdGlLMjVlNVVoMkl2ZDhvRTlFNWYydWFWbThHVWRxdG1FSGpKbWZqbzFzd1BPWFA4WkdkaDNLYTZyaG9TdVZUSjlvajd6L1FaMG81RUQvZmJNUHBFWnZnVGdUWXRkQ2NtT3dtN2dTTWh4RjJsUXlNNTFoRGNNa21FMWROMmN4ZW5nOHdvS2xOWUVuZG5nL1h0WW5xN01tR1FNYzFPby9qWDBlcDg1eFNSbkVOcUpzRm5LMTlLZ3huRVZwWDZ1Qjd6MTZ4VUxqa3RkcWNFZ0xBbVhwVCt1RDFKWVlyN2dxNm1LMDdocndldjM0VUFGYTJXODJZejZOd3l4bEE4MFFIbjRoZ3BUd0tQWDZ2N3BVSjBDNjV1dmJldEhlTmhNbXlqeldPcmRpWHFLL0dXM3lkQzI5SzVRU2J5ZmFZRVNXNm5lZ0N1Sld5TS9KZ0huNkprek5LWjY0Ung2bFFpSWZickRyaVRJcUovME1INUhQck9pOFpDbmptNkp1KytVOEZZRlp3dFNQVmZMSkJmQS9mRzFwK1FoMmxGeVp0cENQVGJnYzl1OXRaSC9kNVlvU05ZZjUxRTBUSzVjMjVmakVnNTFIWDlGT0Q0a0xpSmVGb3VBdGprU0F6SjZsMU45cXo0OHZPb09JaDhyT3pHc3JSWlh4RWlmektqcS91ZFEzQUtGbTZkemxOanVjVkcwbkZGYlBBWXhOb3p2VWJKYmxEYUdxRmVrU1FTbmVEcHhWaHZxYjhSRWxXMDJNQkF4RFg2V3N2UWZHVUI3NUZyZFJ4cVZjZDFZOU14c0szbWU3WDVpcHlBRG9MVkNySm0yTW5PTkovcGdOMnNEb1F1U1gvNkpRSGdBc0FDZ0V4WlViQUZEbUF6TVZwdVpRcHRUNW5ZZFMrbG8wRnlUb2pubkg1aFhHOG9za0tFMkYvTnl0Z0ljRkJNSEhBMzNoUWRWTXZhNmpMODVtbW82UzBrQktEUWF1WlVHeU5RUklSQ1dlSmV0dXdaQ3htWXpMd3NMUVdHcmMzeTFNZVVpMjJyT0VZNHpxK0xmWCtrYURac0Fvd2ZvUW5nMzU1WVVpSGJiUmJaWWk1amFUS3ZJN2VibG9uVnJlVURMOUdaMUgxQ1pkVHlrL1ZSVCtoZjZ5eTZUZ1RUMmpkWWZBbUdLN3hML044MkltaW4wNmkvdUJJWHJYVGtST2psakxGUmRQRHJHYnIxbnBKTjBtYk50MEpiSFk5RmIzek1HUVF6d29MazVESS9LR29oSWxQNWZJMmZzWVhZUTFldkJpZHpJL3hNVFZQVmZIWTRkU0hQNDQzVWxIUjRhMGVPWFMvYU1MRlhnWjJxNjU1L3pGdG9qQTNyL1hLUWxoOS83SWlscEE0QWVYS1lDRzhBYlMzekloNmZYalp2bGQ3RzFEVXFNcXZjMzROZnlCdkFNdTZ1ckIvSEY3cDNwTHY3bkFkdFhsQU5yb2VxanN0Ukt1dFg5WGJ0UHVzemhjcUp3VHFSUGphcS9sUkJpOE5NdFd4TFJ2VDVwWEpWQkg0WkpIYmVLTUphbXZWK0ZpOEVkN05KTFlndjd5OWpHOGY4Yk5kdE5yOGRFNnR1QXkzZ0tZallaMEhQSjQ3UnEzbHZWdU00Y2NBNUpNYTVFejRsR3ZhekxVZk1JNkt5RS8zTmRHakRIYi94LzZ4a3h0TjZwSzVPWHVQOXBDbHhheXU0Y2ZNTWM5R2NwMmNYUUg2eVViVkkzRStNdkdLcmJZUFNJcmV2QlM4ZEI3THVSRlFqVkxYS1h4RDlGZ3FITUx1eDhDenNXenZuL1NqcUVnenBJZDkxUVVETEdSeWhEY1BQT3ZLOXVSZGVUM1V6VGRPc2ZTWWZGYkR2QUhBVkxSSXhQeWVHdUNkUEtETWxHcWJQN2FPQVBSUlFtRTFycFIvZWMrT0t0aUYyVmpYVmVKV0ZiY0syOGZhNS9VSVE2alpSNTlEZ2ZoY1R4YlBXSlBJMUFhSkNmSTBwaVZaVFlXcmRlVi95RWJKR3p0U2dyU3d6cld5NkdaWG52WEl3S2tpMzJSRmMydmRjQ254Z1U2YTRPelJIU0RBNEZrS3hvUVNGNEwvZUJpYTlLMlUzQkhPMmkrTktDTmY1WE81QVR5NEdkYUdzZTFPQ0YwbXU1YTE2bHJCYm03NXRubDBmOGRNbTQ1ZmtMS3IwTjVBTnJ4b3NSUVZQMHpUWHlkSktPWUo0dEY1NlMxc3ZZSkE3UzlkbHhoNWpxV0o4ZVFPVXFQd1F4bkdOenFHdHNOR0Yxa3ZveTFCK1d5RmxpNVJQR3haeE1NSEs0RmNKRlQ5UFF4Q24rK2dEcDUySmFNdkdhZGt6dkUwR05lcHdFNW8wb0hNVGtWZE9QdnA4NDVTdTNGdk5KQXBlMFdqZks0V0pONzlTTjM4QUg5Q0M0SzhXbFlSQTB6Y25MdW1XQmRjY2c3UjZudWlIYTM3T09nbDZ0alFkaUVaQ1R4NWJUYkd0TkkrSGZQVVRQQldZWUpzb3lZc0Zxczc4OHZYV3ZHa210dEtQZ2FKQmppdUZBcnUwLzRqc3ZYRlh6RG51ZkRoQmsxS05OS1ZQaWc2UHRFMTMvYnZxZmR6anEzRDdiNnlON1llMGFwK2pOQ3pTY00waFVjMlRFbEZqWnowS3hNQS84L3JmeHlVeUV6bUpoVHVRMlRpazkydXR1ZTZNcnVVb0t0Yi8rS2w5NHdsQ1hPd1d0UWVJYVpFSGVnQ0hNMk9qWHFrQXFCeEVUcFVzbk1zZGdWMVJaalZKd0huSkN2U2tHemVVWklQd0dhbU96Ky8wNDdOOUEzTkpRK1kwUGxLakdGK3RKYXlSNisraGp1am9oaTlsTDl3bndrS1QzMWNoWUtZNmgvaDJSQnVjSFFBNXVqTzd0YnArQlVuMm5HQXJsZHB6Uk5xMjBOM0JmV2ZJMHkxaXJodGZ1eWtMY2laMFBMdmhsRHU1WFdyd3FubXc1MGJaY2tpSDJ3Y2pUbVVERmQxLzNVMDJrS244aWZPTzNxRXcwbllZMC9VYnZqVU9KRk5ROWttMjF4R2JpWUNqL2YrZGhLMGFDVDlkOU5vSTlaUWlPR1JlWDFzWnJMWWo5ckhGTE5HY29FUHQ1K0htQlY2dy8vTWhYcHFoUmZmUDBSbEYxdWlrNEdCWisvcEovZ2ZTcHg0b1RDR2VDQUtkVktaZDF3TkxYaEhMd3k0eE5MMUNyS2pLNFBPTWdQVUozSi9ucm5SNWE1bVRsWkdqYlh6S042VVF2ek1yV0wzYWRVcXZoVytpVC94WE9vNU12RU1BeUhBdk1EVDJ1eUg4a0FWS3paazFsV0MvRkpSdDlKekU1Y2RjcWlkcjNPbVYrV0o5S0s3Sjk1L2hzT3Z3Z2NRWUY0YzZ1OFNpMzFzLzIwZXRlZUJkaEpCRnNaNUxLb0dmOUVHWUp0TVkyNUpiZTlaa1UxOVJkaVlJMVV4Q05hcHlFMzFRa1NPZ3hFOEdmbmZSQ1liWXd6NE5HdlVzamFRN3Bqdml2cFFIT2ZpazhaK3NOQ3VKMDR5eFA5bXFkdWVhektKREpuOWJFdUljenRsYlNTSjlOQ09KWS9FUFEzNWcvaW9La1Fsd3AzMlg2U2ZTeE53SUJJd0RsKzVOWW4vRlA1WjREN1JKK21vNmJtaUVEZFRldUJOdUdXZDN4R1kyaHEycnpWVmptM1A2NGRVYWJ1WDhHSXkrcFJnSnUrbnlBdDdjWG16cjlQb08wZzR5RnpuRzJ4Nkd4NGhrZXltaGZrQWFyRTdYWEkrRTR0UnMva2EwbXRKNFdab3I1Rk1GSGFZZVgxbGFNbzJzTEhheGlTM3RkanorTkJiU0dnOE9OTXJlcVNVRDNzU2Z5RmowOVBHNlhnTU02S29Hd1lyQy9WNlhKK0tnbUlNdk15RWpyY1dZeEhuSlYvUGJpVDNrRTZhbFpTUk1XcnZVNFhIeHMzYVUwUFJ4KzFIVkZrQXgzWDNDU2ZUWXNQUU1wbHJZclBEcVRTMlRYeCtpc1RITjNrK0VySm9BYUhnMm5UQ0RqdnkrRTJEanpkMERBVktOMzA1Ylc5ODRDS2pZcmRiYmlwK1NPelREM2lHdUlHSXVlTVZRM3pVS05LbmhxTkpjSUZkMzViVVMwc201b2dXWG1NL2J4emxmVEc3dzFwN2dneUtqa3RveUpaRUFZcTV5UWtsc1h3WExmZkFKbTVwTkR2emZhaVZRYldrTC9IaitPSzVwUzRJQ3dxNnMxV2NLSEc4cENDMVNyWm41SEIvQWxUTWlMTTVxZm1uV0c5c0FiY0VsREt0bWxKU3d5RFpENEV3a0wzdzhWdzVCWi95TCtxUzI5WnluU3FlV2JJa1U4bTIwd20yWVg0R0lPOGtMYXM3UW9UWUZ4a0p2U1d1OUd2U21uUUE2dmhLVW9IbHpWOE5USkhXME9SL2h2NXV2cEovZzZpcU5iYVZ5YnZiRVhxNEtOT28vK1pVYVc0TWI5Z1lhdE8rYWlMRVhaSUxWTFUrQWx0V0pjcStwVFVYWmxRY0JXRnZzN1VocmpRd21ZZ24xaFlIK3Y1Q3d0TmNkVWpnME52NlBEb3g0dDZCT1BSUm5vdlhtNGNFNm1XUndBNEpxZFdNaUtNTm82MW8xYVlmT2Q2Q2JvSEFRTmhUb3ZNN1h3VHFPZ3VWUUkzK3JQZStwWXlwWkE4Y3UrcEpkVHl1YWVLeXh6emZOT0MyQzF0a0pBU1ZJTVJhOHVBekE3a0FFbGNpbHYvd2QzSEcvSUVsa3ZwUE1XeGdQTXZ6dmxZb09HWGx1UHVaOTVJbVpkR3ZTSE04MUNVQ1lSdnlmTjByckhoWmtmbmZRV3Y0ZnEydllLT3dkWDIvblZWMVhXWGhYUDk0eXNEeE1yVXpwSkxRTE9VT0NxN3pvTE1kQXdvVE1ybFVKUWVlZXZqdG1PeUU5V0xBaTBpZGgzZWlLeU84V0c1Q2NlcmFSbnRya1ZHL2dkSFNUTzFCRUVVYThVVjRLeERCSTBVamNUbnRiVWFrK1p5cTVuZ3FmV2VjSXcrOGE2bWEyNTlPRDNhUDM0L1UzbCtNaWFrWW1oYjllREY4NGdQYVhOY1d5MDlyUUdPaHlvcEtDUEJxWFBCYlVOcU9ISlNZUWRGaW9QL3hGcWFzUjJ0Vk9hMk0rQ1Bwd3Rnalk5SnpvTVBpY0orT3JnWTVYb0hGU1hoajRDYTg3WEtkWTA5VXE5SXk4My9GYmVnYy81dWk3NzIyZktFa01jdFhLMzRhWHVvck53YU54NEh2d1JQZXdYQkI3bU1EUXA5SjIyS2d5YlNudUtaQjFISFIyRVRTbTVXV2F3WUhLcHB4bTkvQzloNmlOT0lMVFVQTllGR3g3cm16dllRL3FWc3VsZnFCN0d3TmVwWlpqUHNlU1h0WmdSZ2dyb3ZHMHpaTUwybW9WOVA2UUZQNFlzT0J4ZzVkY2ZrbTNlMENVWDBIZGJkdXJTbUdsTHd0UEpYVERSTkkxSnArY0pHQjVmNXlodVhrN0lzc1JmaEsyc0tKR25SM0hlUUpYZDVjUUt6QmsrbjFHUlhSR2prZjJOajU3clFqK2ZoT2RNZlE0MEVyMWZQNUVMVzFtQzRmTTRpMk11NnRLWHRPSHNtMDhGSUFMU29KWnN6aDVOL0dyMzZJSkVXWGZtam1WSXpZR1JWd2pjbjRxWFFvZDZudUIxZjE5Um85cnJrUUd0SUFYU0ozZUp1SDlqYlU4eEFrNFRKRitsZVV2SDYvSkk2WFU4NUNSZWs1WVRkeTBwME5TWUxVWFErV0RVdVRwYjl0eHhtdUFNVHN6cjVuTnRPQXc3bGNjTlZ6L0ZVOC9DZkxWcTdHVitaQjhOOXUwTzZmZ293cTFRRnVkWWVhQnRhRFN2S0lhOUlwaUpyNC82VTVTSmRYWlVGbDlGQW13MzgzNjZmbXZEOFh2bWV5bUN0MnJWTVFvUDBSWTVjWFJ0dWdLbkJtWjE3bVlNUkxQRC9neDRDQzBNRzlmTzhYVk02NFlpTzkxVStPcThSRUpHYS9XTFdUa0RPTUVrTmJMT2l5UG11bytMdE5wU2lYRFVpb093NHI2ZVcyK0R6N0xSU1REcEZEaG5EQU8rUm1sU0ljaUQ2MjY4eFlVQkdmcXJPU0lyNEFPbHJIRnhoTE5yMTQvWVVrM25UQVBQVnFYWTdvU2R6QmxKdGVkdnVoSmw1c1o0Sm1DYldnUDZQNS8yL2M5NzBDU2czQTBPQzZ2OWhEUzJNQ2xzWmg2eVRmdkozNnJuamxjQXJzZDUvMm8wTlRQbVVSZ2RtWDVuOFJLRDliLzBVL1RBa3NkSUsrZStORlN4T0NEZ1BTN2t1aWl5YlZvZ2w1bTIrM1JRQWZtZDRRWlBYbW1VSnhpNEl0OU1tMGRkTXBHaWhOUm5FcXNjbDNoaFVEbHU1MVB3N0hvVVhhZCtScnNNUlBta2FEREpQbjFpODNYYXludkt0WERiQm5aR2diOFF2YWhFQkxDdm5wZStqTHFCK1RleGVWQU85b0cwdnlSN3BETEg3THdGLzJjT2c5WU83b1h1NDlzVzNPdVhwSHRtSG1BQ3ROOFNKU2JHb3dXblRjK2xqUkFrc2pMMUZQUldubDZ2MHF6L1oyc1oxcXg5LzJMc3dYaFNXRlVuTHczckVUeWVVZUtKcktsdkt0TzZyMUo4M1hpdEVHbk9rQm9rcHVFN0orME1nRkdNekxZZHFrdXZVbjY1eC85bHVrT3ZzL0U3cEtlOXZmZTJQVitkZ2tpRVhrZUY2RVhUakFQOFBqZUVNc3dhY3F4cmpBcjdKVlRhQWtndXRRYlIzSjd0cyt5YVhjVlA4b1RYWEJCamVTM0pvU3ZGMlhweTdtRU0vUXpscGtBQ3dyYlBEYjVaaXhxTGI3NDQ2VHprTHV5NndKbUdIeUYrL3JtaktiditkOVVDL3luSzV0NnFiYW9VdWp4Z0FCNmtRNGVCeVpkRFZHNUZmSmtRdHhlNTQ2SWFDTENTcEZaUERYVUJGMDNseVBTOEcyME03R08vOUdkeFo1OGY3K0Z2c1psYk9oNkhzeFBHL1I5dUFmNWxWRzR0aUN3aHRxWUlSZkJHbjJnZWtLNFRLTjk3NUxuNVdiZjhZT1Y2TTJBQ2lMTkZINzFoQytVaXIyNzkvMVA2M0NNTnIzYjY1YmxJWmVkamUwUmp1WDBUVzRUKzhtQUhZSWdCbzNOVXYvTS82NUVjY3JXdXpMVjlZc2NjdVFSekNaRUJZV2VHQ2dkQjBOd2UwbkRROVp2dGRSRjNxSHlKZ09SbTJlYW5lbm9ZK2h3WlpZZ3hpUmpFbkZMbm9QdEg5VmxjeTIvMDhoc0U3aVpuOWY3MkM5Z0pCQ3Jqdy95WTZnRDNsM2J5SXJXWTZmRStTSjQxekdYcHpZMGVBeE5nRlFFL3QrWjVnaU5BMStxVHVmc2pLa2JSTFkvb2pqWmxPUEtIN0RPNDQvVTJYdml3Y3JLMTlqVklHaklHZEtEdnVEZWM3eDlWU2RMTW41R0RMZURNdmZIQXFRTVg5NXRyd1doeis0ZlNmMkIySm51SXdJK295dVcwNVZZK1RFWjVSWlM5d3FaOWF4YlpXMXNjcHVzSHpuanllcngrRHFBMCtrSnZUWkF3RktuRmo1ODVMc1pSY05wV1FzRHlZb0JvTEVGMkVCNXB4Vlg1YWI1bDljQzF2RGVLWTlTZmpxdUMzUHFiTklCeEFqYzFGTlJ5Q1JWQWhTalJLWmkxbHk0UzJ4L0Zpa2F6M1QwZlBPbUdzalRUVGxkVWEwdURkemVyS3dtOERJNFY1WTdTWnBIRk1GOGpjdUdMaDNLOXMvdFZEcmJrRTB6dDVqSCt3MG9MMUk1ZUJjMXhkYzlhUFB0SHhWUUM3dU1jLzFLU3N3ZEZFU2YxS3VCYmJRZ2REU0dPaEhKMTQ4RFdTQWlZS3hJZEp3d29odlZPdVE5OGpoRnpPb0MyNlkrRlFpejU5MzhKN2hNa3JYWk5zcG84V2R5d3FEY01ab3pXc29uYzFVZFhxNzdMbnFkMHBSMTlYOVRlcnFGTzRSdCtoZWllUVA5a05nRVhDSmVoUmdvRXVXL1lHUHJtb3pkMjJtdDExTW0rM1AyekI0WkZXWEd3TStna2d3aDBIMHJKTFQzaWhsc0hTUjNsSU9PeHdCWGN1dzdDWUtkVFVjUTE3cXdoVExqbUNpdWlENXRqdGZLZ0MveDF0cXFhc0RhWXNBc2gySHNnSUlOajJ6bG9uSG8zQ3FzYlFMdC9ENitxL2RpRFVyeTZHRnRCQTVFV01ya0lwU0M3dW9OZGg3eWl6ZlhiMkFBV29DRnlCU2dZQjlsYjdwcWRyL2E0eitkWlY5d28wM3pRZHdiVm1sWWZwb2lHRlhWT2R2NmNDY01lWU1PdmVSVkphZjErWDhlUzRESkJ4TVMveHZaci9kV0M2em4vRTRNMFVEKzNjSk9qazVlT3FRdnZ0c1dmZ0JIM3B2Zk5pYnhRRDNQMlFqQ1M2WVNhQXhpVFowaVlnWlZhTElkemsxZjRXNnNPZTdwZzJqemNKak9VSEJwS2FvZTgzTUc5OTFwWkR1WFhUYjlLekhZOFhJUzZseVFwZk10NDJHNi9RM1o5TmI1T0drWWJUWHN0Skl6emlQT0RsSjZuejArZWtZbnd6a3E4d2FhTUpCdUJTZGNLQkZqYnF1R2RCRzdxRXBXRk42eEd3VXJkRDQzWHc3WlZxQ01yQ1ovM2xCV0h3aUNqUlRGQnJhMXJxNUVJdnVSaFN1Mkcvdk5QaVo1ZUMyUDdJazhSczVRbmNGaVNOQzFaNHpYOXVnM2lsVVhVSVMzcloyejNMM1RFVXUxdCtXdkJMY2pvZ0NES1lPUTFJWjluZnh4S2dzbzFNQ2RoaTBUaGpmQkRJcWNqR2cvVkQ1SW8rTllmeVFmRFZPbnNabkw1cDB4TGg1Rm0yUnA1VWhEOG9haW5yc1BuQzRucmgvN3gxWDRsTWRyTDRpK3dYeE5KcXdLWmh1MzA1aVRlVEYwTGV4bzVBVnJQcjJhRDBoK25SbDFkN3p0V0p4SFRIdHFEdkFNRDdiMVZHa3hxZk1QSmZmdlNXeU42eS9SZWxwUDZ5UmthWCtzOEplQksza0tQNHQzejExb0pjMmhwZGxhZ1NqQis0MDJ5cTMwUEh0WDEyOHZBRDJXKzhTdlUzZk9aU1BVcVZlenlVWGlKT3dQUW1WcHBUOUc4STZkSUZFYWRxS0RFcHNwVWR5TEE0UW5jcmdsRnlBTWtQZnFQSEdhMUdKQ1plZkw2UnlDZm5SR0tiZWk4ei9INmxkQVRzOHBidSs5MVpadW9mVXgwS3pMaVVzNE1CVy9aSFcyaGM2OFRnUGxVQTFFTU9GZk9ieXIwaXc4ZGpmcElVN3JNKzN5K3puUmZlTnNmUEdJdW5pcXFsWVJqQ1NWRUtUT2RScG5nMHp0dUFNa1pMMTlOOWVvVXU5WGd1eE9pYjBLMWMxOFBNMTg5ZUZTOEVXU2EzQlpBeXE4Z0k4ZEhEdnFJNld5ZUNaaVB4TnVmUWhoYUdHQUhublVIU1VCdld5dHRTWlFmN283ODJNZEI3VXNmMFYzM2p4WlAxMU1qeFBSc0R2bVpJRVlPaWhpbGkza1FjK2l1aEZpUWdsTjFlN0JCdnJRRnlUby85RlVnZGhuT0VoV1NOVnhpN3NiTi8yWTVKd2VtTjh5b1BDYXNTVmJQbEtuc3V2Uk1YQUhRbGMxdndJcVFhNGhLWmx1Z2EyUVBXc0pOdkJMcjU2TWVWTUQ5MkIrWmQ5SUsyUjRJMG1waUU1Y2hrSGdYbzNLWHRZeU55T0I5L3pRWTBaMUExY1d3UXlLS1lha3VhUThCVkNLeFRPQlRyU1AzakwrVXF0V0lpZ2xRU0JjRWVUZERsSWtJQ2NQOU02NFV2SGRDVjNEYjFmMEZVNDBDWVBhcXFJVThjQ29mb3gyKzAvekZSM0N0QmFuVS9xeGtYc3ZSV1JvMHF6YjgyY0ZCbVRQS3pCdk91b3c2Mm9RS3VSV2kraUNqUnNOT3ZNRjJIL3FIK0twekphNEFmcEpMbGVEdmpMY0ZvNkRuaWZZaGhjQS9PUFFhbmQyN3NkUTR4cFdOcHpnRlFCUWllejJKRWVENVpBRnI1TzJ5Zk9PNDNmWUlubmp2Q0lBdndOSDFmVUEzNWFWVzZBcDdUWGNBRnJUdDNrRHpJcGhrSTB1YjJDbUFzbnNJUVRSck1PVnBkZ21BdGsrcHpseVFtUE1XTU1PQSttcDNoem1sVWF4Q0QvYS9yV0tYMllkM2RGWTJLc1VmOTE1ZlFNYi9SM05lczJUMy9kN2ZnZjlaZkoxVEZpMTM5dWFKaXRCNVZGMkljUDNQUktXdWFCY2JHYUl4OEV1aXJIVjY2MDJjRTFYUkNvb3ptUTZzUlk2aU1vOFFOK2xqR1lxOHcvdGlLdWxhT2NEYTBZaktab1puOEFCNHJ6TEpWSDgzSVVJNWZSMEc5dGZabXJIY1UzcWZLbFY3VVBaQ3NGV0J2YS9jc1VFdFlzYlkxd3ZnclNEVFZScU9ERFhCTXRzVG41eUtNRW9JQ05VcnBxb2hDWm5DeEpKdU9NdnVVSnp3NHlueWR1TXVCYWlDNnJhOE9jUjZ3VzkzNlp4WnpscVlZaXNLeEU2Nzc3a2dyT00vSndtcXgrd2FWU1JvYmZwc0QxTzg0Y2N5L0M0ZlkxcUt1cVFaMk1nVCtBK0pRUVZlS0I1UnNsQ09LKzlRdGVNZVBYM2FnS1FzckhuU2tUbmt1VnJHQUhMRUtVZ1dxa1Nrb3FCMFh3SzlMMC82ZHJ0YlhWMnE4WUxWVGNNQWlWQWxyUkhxM0VnaUREK0RBWmZVaEIxNHZDZ09XbGNDdXlUbWpYTHdsc3FXbDJiS21PcVFpbUhqbjhQVE9uQVBIZkd4TnpqMnpIZ0U3WDg2QmpxTjBJVkxKdnJ6aUhVdTg0YlZoTzl2eGRuNzU5V2RsOFBHd2dnSEdVc1BIYlE5c2RwR1lmYyt4alhDc2R5cXBxM1ZwQ1kyeE16MjNtbWZXNFdKcTQ1ZG9Bd2pzYllLcEdxRC9lRzV6eWh1S2RVV2RDZ0tSaHU4MjljeGZlcFVyakpuS21qcmlBYXZDQ0FkS0pNMlZGUW9nYjdRaDI1eUlBNHhWMTllNkhwcDV4WC9XT1FsY0hZRXcxM1RqWnRsTk45T01GMUJONlNCc2I4cFFLbzdrOVcyRE8rblJpZGlxTWY4UTVHdEFsNFh1bHgrMFkyU3ZnamtiOXBsM05qamJmc0ZLNmx0VFpwZDFHdExJR2FRQ0Qza3BJcmk1Y3VtckpiVXV5a1NFdUFPQVhrUXFyamEvZ0k0QVp5djhTajcxUHhHeThMNnJtTEd4UTZaalRpaFFjTnVRSlBNUU9RdEdOMXZHRkorY0pHeC96cXRJenRrMVNraDRBUERuMitZZnc4RjdheG9sUjFBcXRnVjJkMHJFYkgrcXk1Q09Cb1VCZDEzcW11emowNkRUZDZJZWg3Mk1aejB0SnlNcFlrS204RnZJVGtjNnJoUWtId2tjRFpXZzFsN3RFVTB5cStyMTZBZk84Wkd2eUhxa1A1UE85Uk4wb0JuVmhEaXkvdHFPZjhaR2ozZmNZRm9ReHJTTE95TUNlWHVoeko4cTNxQndGV3MxdXlyK0hQY3lTZ0xNNldwTkxXUm9abTdQVXRpcng3eEx2bVRVNlZ6Yk5mRE9aS0w0SXVyRTB0c0ZKTThxSTFCb2pPTXc0SWxCRDFMZ0lDQWdJQ0FnSUR6L0QzQTc3ZnNZZSszdFp2dCt4K3ZzKzQ2L2g5Tnp2Mi9ieWZzKzREL2NQcTZmMi9TWi90K3JqdnQ5blBuK0h2VC93ZmJhYjl2Y2QvRDdLZjkvenM3OXYwMC8zaDlwNWZaOXd0djJmVTAvd2ZUUVgyL1dVL3Q5bVRoL2I3WDM3ZnJxZjh6c1A5dCt0bC9aOW5sKzM2TkQvYjlpVit6N0Z6ZnErbGcvYjlEMSszNmNQOHIxekR4d1MveXdyVzJpUktHOWt4K3N5MXFldnhUOVV3R2lZc0FuWlgxSzROQmQyU3VWSWNDclBWelY0VllJbEhBSUowYWdnckozNTUrbTB4UFZsRDZFaUpDVVhDcFUzSWZrek85bVhPc2hGUXhrcGxHRnNQRCtwZCt5ZUhCbWRtNWpZRlMzTXVkdE5CQmx4c1VNZzhHclRBRTYyaElHS3UzY25UYVZCTC9lOG12WURvd0IxQU9tS0hxZTc1ZGxHN3VZU2psWUF0eVpBR3YxRWNLNXByaU1iNG0rQysrY3lBQitDMjZpVHJqVjZCZk5CTTlzY2hOdnNrTG12N0Zyb0gxMW53dmUrU1JtRWpkcVFyYWlHak5JbE9CRXpmZU1WK1JETCs4b0dwdVA4UGxMekk0ZVlwRzQ1b25TTXV2ZzFWSzVxTnhEUmFCS1JLSnlkMlBMaVphSTFqN0FTZ3B3SGxlVXh1RjNBZVFDZVBYNWtoSHJPQkxUeThIYnhUaDFZU2VRQ1I4Y2haaFdwTHRUYURVM29MS0tNbFhwbFpiSHMvRjIxZEJucHJoMFN0ZVBIMFZIVyt5Q2ViVWJEMXFJMmgwQTY0UkZhT0hzWXZpS1ZDK1JVSjZZLzlhcEhFWEwzbllNTm95OVVPWXZQanFzTnNyaCtPSGVBVGNvSFBXRzNIWE1ySnk5aUhaSSt0eURNd0tySHUxZEZHSnptM0dJVkIxZHlZZHZEOGVUZVJlU0x1OE9YMEFNaitmaUgyNWptRjc1TFRMdjFZNlNGdlIwNW0zTitpbGhESUxsblRNZ1FJQlFUNGd3Q2VDOXU4TG83SWU0NGlSazk3UHJ3S1lSMHBxRHBmakxjY3pNSkdLQzhwY3VjcTVFc1ljVG5laTNjc0V2R2ZYbUN1eElEWkJyUWVMMkN1M3ZsRVRCczBxMXkyT2FxeWp4dzJyOTVJTEpEeTFIN3JEQmlsSFQxNjh6TVNodHZobjNBdlpkK0dvSGpRL2wzbnBSUkRkekJ1VzJ3TlVlaW4rT1NHZk5nYVJyYW0xQzhzSS9VbUVEcmNIRkVTaVhpaCtIeXRSbWJDOXlNR0NKdW1oaGlwY0Z2TU5hTnFQMWFGWnEvTmwxSmMvdW92d25obHo4RmcxckNCVjg3eGpZVkQxOXlPb3NrRmNhOFBBRlQyYnpFNEJLV0I0Qmp2YkFzVnRkaDJUeE5tT2gyUGRwdXlDOElIa3RWWm9rVmt0OFVWdkQwaTN1Sjd0bmhGMW9ibFJOSXdpWXVWZFlDU1pSTmg1V1lKdTNUZTlzQVl0dnNKYktsVE9EMGlvOEZybG9NSHdEcVZMZ29KeWppOU96N2JXSkFXM05VZGhlL1NhaGZlL1Vrb1JSc0JRKy9PMkNNYzVSTHpGYkVTd1EvbXNrZkFNaDk2S000OVRKdVhycnE5TS95aWZvT3FsOWZ3ZFVZYWwyV0RVTjBYVWdzanBoRU91OWFmalJQMnU4UEx3aXcvd0JjQzJkVU5rNENPRmVWZlBJaGlSRHhmNEE1Ump2dkpaQ2dhaEFmTXFxVzZZaGt2aDR3eEw5SCtEcTdSV2tzMmtYRW5DQVVpTWRCK3Z4aVBzVDd1U1Eyc05vRmlzU3g4aTRaRXJZaHZlaXI1M3NZMTVLRW1EQklPeGh4NkcrQnBKOGNwMlVLTjV3enY3cGpWb0ZVUUxLU3RsdDAybUVHMGYvdFgwbEJSTU9YNDFJZkpsaWVtL0RKVXVVdk1hY05aL3QwYmJKUnhhS3pCd1Zja0tGclhYelhOUFJhaGVsMWFmWEZHaHhCaFNoT2RJOGFXWVN2dERyZVdYbVNnTHdrT1R2SkppdmNrWXMrem05T3BqNCt3YXc3WC9CbzJ3V084Y2t1Y2h3U0VmQ2dpMGtnbDdOVFZlWlR3Tlo5N0hrRWo1T1lLcnBEU3NXaDNxMXZOb0FnTDVGYkdFbUlhei9TV1FMWW5hdjl0T1VJQmlITHVhczhVREduTVdNQ24yYkRCVzRzOFMzYzVOaHRNaXdyMnNkVEVvTjVzUnIvM3hEOTNFRTVoclFxSHJMRjR1WjFTNTVWYTljQW1xbjFQWW1VN2tBek80MndnUGd1WjNRSG5QOExxVWdyUDIrK0YrMG82Y24xZ000S3JBMXovZ2VkTmxNSGZiQnpMd2w1WVhYc0ZVTENIYXVEc1FyNFBMWjRRUVJ2b2ljclh5aEJSS2x2bzJ6Nkh5S01kUlNBM3AyVi9abFBFUkxpRVVDeGdqR1hyNC9PODJ4by9MZURLS2NZZGZMdXcwWGFHWDJSS01HQk5Yam9UYVI5K1hReEtpSzlLQWNVUmRVUXk5UjFWaXJaTGNDR0VRVXgydkhKUFNVWEhEMDdFQTBua0dTUE1EVDNHNmJPTjV6cEY5T2lDc2tUUDJGbml3ekljaFVUanRtbW1zUFdSV3JEemhxOHRYb0wzTWJIU2w0TUxTVm93YnVESnRDNnd3Vzcyb1hMQVNkUDJ6L053VTZxU2JaSnJYUDJ6a1IxaE1QNk80RW5qaVdWRUJ5aFpEb3VyQlMwemczNS85WEJsTkh6d09EV3dtb09ocXNlNGcwQmtORE5rQkdQZmhGSGl0WXlMZFI0MWQvMDR1Tnlsd0xnU2p1blB1RFJPTDBxSVlxaUNlNXJyMjBNd3pVbGVqNkhrK1FVVXlRSXJFbmNhMi9nM3hjRU9Ed0RQT2FjaEd2VEtERGdyNDFFODJ5RHdRQkk5aElCV25hVkVKQzNUS0ZwOXBOd1d5aUhxOEgxSm50OWNibGtqMEFwSXRXbUZkSkpHYXFMMDVSb2hUcTdPT1Bka1kwZ094bU81cDRxWTA4TmhxTVFIMmRMbVhTQ2h3VlpLRUMrcW5GVEJ0U0p3L1N3Y2V0K3Fvam5BS1BGRnJ6L09ZeVYyRis3YjhOOXlzOHdQWGZ6Z3g5aGlZZ0sxc05UZnlmcVp2YTcvV3FDajdIdWRqM3RUK2pOamlJQ0xTR0ZKMnJkN3Jabk1HcU9aNE9vaVdzN3p5RW1TNVgrSS9BMEdreThiZXhmNCtyTEwzZmNMdUtZOXdGdDNwc1dGQWsyUjhYZjc5RlFBZ2dZT2RSRWhFR3pIWXRiNXh0Q05DSzB6YW1VMlhXNVNIMnRJem1RemR6VDBybm15ek5sdk4yTGlHTkZzbGNuYUxHOXpWQjE5L09WdGFqY01VWlU4MWJZTitlcTloeDFoVTV2SzQ4ZWdzbUZNL01jUzJZSnR5K1lrV2F4Ymk4dWVsOTJ4c1pjL1NlbTdHaG1jdHdVT3VZcVpaVGFDT25WUVJoU3lGakVBNnNDRi9BVitkZGFBK2E2YVdnZDB1MEF0TE5kdFdYdlBPSmROa1Uva3hwNHJGMGp4TzYwcnQvUTBsaDYyc283TDMwS3JBeXM2RnYzUnF2SlFObFhaeHhYOHpaQUVnODg2RzFnbXF5cTg5YStveWNtMFZFczc2eHFENDMraEhiaVQxM3ZnWitob01pTVV3b0M5MDZFWTR5YlBhdkhabDhwa3p1L0t5VndSOWk2NXhHTGY1RXQ1TnVTbHMzektRdUd6MHBscnk2OFZSbWxhRE81MVUzL3FQNkUzbnhISjFvTERvZnhMczVYcGhCR3N5ZTgrVXFpRFpETVZZSmdBaFArNU0xVTA4QmdWZTdJWE9lNEI3MjZoWFBrR0FnaEQ2dFRaWkZtZHlMKzBMelpFRVpLNmVGQXkyeHF5cExIOGcvMmZsajFYZ0k5ZlVsblU2Tnc3eTByaHpMYTFGTzMyM1NINytJOG9PeVhxOXV6amVSeDByZ0h6Z3p4bGhSQzAzcE9hU1M3Zy9WWGphUHZnM0cvUzlRam42QTVyZmd5TnpZY3NUcGFqd2FoZlJXR0RqMDAwTTU3andyZjRNYnpuZnFMNENSeDdOcWVwalQ2d0trSUVRM2N3Z3ZPZ0VtRkJjZnMrQ0RxZEdYanZGRlJnemYvRnBXa1k4RDU3aUZxTWR4QitNUmEvVGtJZTRrclRmNm9sdEtyNkxtMzgvK0syV3hmQ0xNLzZqQUZjZWUxUEI0WHF0dGE5Rm9ZVDlScDBZRnhESnVwM041VU9sVnF3Tm13cHVFRDhERHVmRzU1R3haa2lHUms5Q2VPbVFXUE1Qc0RKemhsQ202MTNEVTQ5UndqRUp3YW5Na0N0VlBYTVlGdG1IMzdMR2QzQmYwRW1XSStXY2tvSmZqNWFsQ0VOK0xMYTRJQlN5U2h1b1M0MTl4Ykc3UVRYSml2TjhpelFqTmJPaXZ5NitjSzVOSzFqUEJvWVBUQmwyb2xIMVJKekJwQTc3MG5yUEdNY1RpRmMwTGRYcDlXcll4djlncitabGJpVElSa05JakY0aThrZ081Y0J6ZEdqaFRqaHdCMmVBUVNKc1Z6L0p6NG4wZlFIc0xWaGZyNUh4ZkpXalArMHVxQ3BGU3JScVByeFRaenBDSGN3SzdndVFENnlWWFZpQlpyV0VmMVpHdTJ4eDlRaUo3NlNFbnltZUNqU2VkV0xWWm8zQ2Zzb09uQmhPL1NGeUovVzVFZG1UMnhVd1RtZkRFSmNSNFdOREhTTHRaeHRJcng1U0ZqbEFZQnZscU56OU54Uzk0NkhYbE9UcVI2Q1pSZ2ttczlkcTNDRFQ5alA1NFBrRW9XeERsd0ZDbDlHaU13WElWWXEzR08rajNxRHFCLzUxb3NaaGVLcDZOMmFUNnRUdHVxWGRkT3ptR2gzRmdta01SdEx3Q2FSVmFDYWlrVUlxVzBTcDBlbnNDcmYwbEhMa3lscU5hcnV4b1p0QjJ1bzV5TkxPa1lvQklBR1lUdERrK3lqL2g4ZW9nQVo4SzUvdXdXczc4M2grL2hDeUdHajVIUkxQNmorVDFkOTVuU2NyZERnQk5jdStrenBZRzhGMnJBWHFzSFkycVpIY05MMEtDcU55Z0IvQ3RjV0ozL0VLaWFic3FQOStzZURyRUVJU1NOSVBidS9NZk42VFFuS08xbFpkZEZDbXhQZXgxVW5mMGpGd1huZXJsRzhUUllTZ21FWHR0LzdNbUVjY2ZuNmtZNkdKaWtMTzRsSzBqRWY2UWIwaUd6SkVaZEF6YWZETG5NeXB0dkhBMG9rUlhyRmk3WStkU25KU1N4V29RZzRYWHZ0eVcvTUFvUTUvZjQyZWh3dGtZQmVlOGtUdnh0R3lOckFMR3laK3ZMREYzRm95VzhFMnhldWRrb3ZXSld6WldMck9KVzM5TStiWW9GTHlQamVTSzJNbUwzaXZmekJodEVSdHFsNVdXMnJYWWhOQlNWS1dxZVBVdThhazZaYkdKdmxqNmVHeHBseUpDVXRtOG1LTzJmZG9KZnMyUzdDbHhQVGQzL28yaHhEak8vbmFZTWN6L3JZeDJQMk9DK0txWURUNGw4MTg2c0ZxWWdoSDNxZFltaVpzU0V6aGliOXcvSDJjSWsyUHJEY21OdUJxV0xiUVgzem56a2ZHdXk4cXg2TkcyU3BkdUxMdGdkeUc1WXI2NUZLZ3lINE5weDVhejJ6MkN4RWp1ZVlndDQ0UStOTDBnK0s2Z2Vkc0ppYUZWYWRYd2RST0JvRHlwc0dPRFNIaHhxc2R2WVVnL3BDcWlPMm12RnMzUks4azlmRHpiRWgvZThBd0dqTm5RTG53ZlhZZFRQRWVNZDU2ZXZzZGREb3hkR0YwUExKNXNBR2R0QlBSQVFBVFVjNlZPV0NBTENHa0JQYzlFTnlTbGxVbmNJMCszZjhzK05hdlJSVTRtOUpUbVVKQlF3bnBaaDZsa2w2TVVEL2k1aFdYWHBndUxBaXNzUmUxM2ltSzJPZkx5Rmh6WGgyKzFjb1Ezd3BMWnRzaGh1dGpEd2cvS1JNNkNnUDVsUkxQcUpIT3ZSOGFnRGJFcU0vNmRFVTU2cVk1V2h5ZXNwMUdWYnZOTVlmM25TOFUzSGg5T2o5THNqNDhKNmpMRnk0QXAveXhncXkwSHhtL2VHMXNFRllFRk5nakM2b0JWbXJKU0ZCSjBVM1dOand5UmdTUEx4R3V4enZPeG1rditiV2lZK0xGb3JRQkF2cUg3ZFFsVlFiQzQyM0Y2eUhzSDJ5VmpoRFdNMWxjUEY0VkFuanJKd0d1QWhHZGh5d2JXN1dHQTVoWm9zZG4wMjVzV3VtbmIrQlBMbE5mNk53OHFnbGNaYVlUeTd2NWlUejlNVDl5RUNoVDAwYlFiSkpHVDg5emp0cG1odU1MT2dzUU1QalVURkJSdTgrWk5QVENGd05IdVROc2VVdFhYWHhWZmc1V3VqL3pEMFpzYzJJb2xuTS9VaGJuUm1vaHRaZnJjUVJNUkt1MmJHckFFTWJYcmx4SWppMk16YktncGxvMUJjeTB3ZE1qZkY1UFNRTGgwQjVlb1FPYzk4dUZoWWJXcm9vM3Vkd0RONGt0WkoxakJDSW4vMW1GSm1tdFhyNEtFaG9SQktJUk9hdHgxOExmVEppaFBzWHRzSTd2aEZqOWFMYW1PSzByb2ZXbXlrYmM3ME5ESTBjcFpFeUlVMENxT2pnQ1JTNmp0eGNrcWlCVkxzTEU5b3RlYzltcE5EZTJlL0R0Y2hrVzdyWXZFangybUVxWXJ3OXN1Y2lWdmUrbStGWVZxaTBJZEdZa3k4VVpnWHVXUXAyd2ExNldjeW1IVUxjTXRaSG9nSnM4YzRyZFN2TzhNajJIZHNuQ2JvcG0rSCtyN3hoMnVGakNiVWtENXd0L2RlZWQyaG5NZlQ0ZHo3NXRXS3RSUUMwSzJxWlBMUFhCSU5SOWlLdVRTbGZCbEJZaE85bGFTK0E4S1hKOGNIRFhGKzlzem1ER0ROalY2VllLRUpEalJ3b0xhTFlGM1Bsd1VXRUVYNmtBVEg4aHBEZ3RLcVR5VFpmQ2RmcnFOYjVoc2lLLzBuMkxJMVN1MncyTGhkTG5zcVpJcTVYZUxGTzhXMTMxUnkyR0RPWFlUcnhZS2UrU1hDSzBPRzVsbTNDUEIrcWhoeDhmbFgweXl4cDQ5TDU5Tm12SXU1enJEZ2ZNek1VcUliUEpiZjQrd2ZHOTRZcGpYTi8wK1AwdEErMWlDQ042Z2xTSWJleWRrTnhZc0pvMFpxWjFuSVFSYjNIZURvU204S21FZGNkemt2cWdyTnVVUzlhb000TWliVk9Eek9KVmJsdUZ4TThRS1RiSDY4Y1hMR1NXM1ZpOUxrTjZXcW1BaWsvSy80S1M5bC8yVHpsbmJMa3hodWtUcUZXRDM2Wm4wQ0dyRHJNSzlidTc5M1VreUk0dHhKWVZBUVM3S1pmSWIwZ3dnbzYwWWtQZ0RyV0ZCWktPdW44U1VUMDJ2RmtGcVdlSTRjMW81M0RDenBWemcrS1BUNUhnMEZ4T1diZGVQNmc4Vll2K0VSNkF4L1JreG4zblBnaEFkUGtHeExDTUx6aytGdjlLc1dFZlhPb3djcFZKUHIrVUd4dHFNb2hGaXpEMmNac3FpYkZjTVdyQWp2WjE0bjNsOEUzQk5ZKzN2UVovWStZem5kRFVNckpxOTJhOWRWMkZLb2J5UEl6Yk1VUDZBR25zYVYwWlRxMTVNUmd5NVFtSHhjSmIwQ0R2RFg4OU1mcFBpMVFDK3RBRnRmdFVZdkVKd21TM29MYWY0dnVoVVYrai9SQm9aZnF4QU9KYWpGRWlSdGk1dW5pS0NpcUJoRHI4QktPd2hTVWwvd3N1S2ZZaVdQdkY5UTNCRkIxY1Y3cTI2dVlPWVcxUjhta3lNb0dMUGY4MUE2RlNJR0VTU3QrbTdTQVRsemlwNndGd0c0RzgydTFmUkxRNnBIcjFISnFKTkpKbFN3ZGxKeHNrckwvL1VZcmVwK0hnWThTYXVocGNBZlJQeFNmZkRLM2JTQjlaaXJubDYwUFY5VGZyMVFDRzA5TnFqWjJKR0gxckt5c2lEVE1oc2Z2S0VCRGRtaWIwOHJEekdoQktIR1NEQnI1NFlMM2cvQkdXcUVBRlo5UGd2TTJQUzdsbmJDcVdYQnh3blo4S1ZaN3lyT05lMUZPeWQ2R0h4ekRJMGc3SnlKcjdCMlN3dXVDeXh6dkJSMWU5aENGTm00dGU3bWY1WmFlZWJmNzFma0VpOUtnK2NkU1JaaHk0eWhsRFd6dGcycG1mMW02b1JEL3pKNytobndxU2prOXlUQitZTDJDbDBFNjRIUTRVZ1c4YkNiNzBJNWpWVi9Denk3SHNRUndFOHJSNGhlNisxZnIyNE9DdFhXMkFXNnJKZnE0NGpEVnFlL2x6cjdzZFFGNENLaVRuT1lvMjd2RGpFUXNWUUs3bGtocUM2b2s2cFd1TzlYWEV5VXZ2NWFLa1ZLME9tTTkzMEhyUExKWWdVbnJQZkFZMnJWRkRkeFZDaDcwa3JYcW1SeTFYLzMycStuN2dZb1VvMVlRVGtHSlNPZ1pXbXFjZllqTE42dXhwYVI3VU9zQ3dkRkVmVnZNNzZ1aG9DS0VPL3dBMUE3YjJZZlFTTkJWYkpFeWltSDd3V3NySkVES0FDZ3N4ci9mTHNMVWJkM1BrQmZ1TGIxMFBPUDlnR1QxWUtNR2ZjdDFJbFR4a0NLUDR1RzBwamxyTTNsUDlxcjE1UUR5THlnTXlVOFBlY1lmTmExVU5OZXp0REduSUZMRFJremZLbVlramFkZzRpbklPUTRSdThCYWJRZTVPQzQvVUtOcGlheEhsSW82S29FeFRDcEtyNkUrZEJtczdlZ3dWNmErQ3lCanFvMmFuMlRyekJBSExMMUtjc05HMzRHWDB3OFQ5c014RFhNZUFnTkdsbG4zOXByYUhlNllvVWhLVFArb0hZRXEwdmV3WWZRZVhLdmRlMFBHd0xNa3RFbkVab2lxcmg0SVF2VDRxRnNaL0RicTVub1lNeUNSeDMwdm1kbm40andWRmplbklOY21yNFY3U0Jtb3ZNZm5haGJSZU1qekUyUFMrd2lIa1BGUGhQdjg4ODJkNlBwUWkvZ2gzK3Fid1c3am10YTlrYVo0TXB6eEUweDFMdnNvdDlTRjl6VTIwSCtySGpIcDljdEcrZ2MxaFdwWFloSDNGWGthUmhRdXpxV201RWQ5YitodmtXUFBUeFh3YjF5U1dlSGptZytqRytSRzhTNzVTM0h0SGJSczFwMmRONlF4Zy9qU3B3RUdvb2Qwd3hKREFONy9adkxUSm4rdXRmUGV1RzNza29YVFFCd1R0ODhJWnpDVTVTMkZnMTMxMmJCbUt5Ui9uMkhLK2QrREljdzlCMjQxcmh0TG1wNE10aWhCcVhSQ010VWtNV1hiaFg5bUxvcUhSY1dNN1ZrRkthQ2VrRVEvYWZJcFFtK0dxQ3hSeUwrQVBENUZMWUxEWjF1bkN2bzhnMlYzbHBwRWdNdjVza2N3VVJRbCtXcXpteUpWV0d5d29GVFEyUzkwWjMxd0pSK2orR29uU3NseTV4Q2FSTk1saU9VcDJPU0RXaXpyd1pUVXpRNE4zWjVhTmFsVkdkQi90Y0NjZi9mbytabkVZZzlQcFFRbm1nUlRpZEtEbVZOU3cxSGJwOWx4MmNaY01Jako3b0srRk8vS1p0OXZpRW1oTHdEeGtNR1d4a05xOS93OEhadm1OblpNZS9WSm9KWWFaM3I1TjJUdDY2Z1g4QXJWNXhxTzdyYTBINFhrQWYzZ2ptbHdKbzUxajZoM1BIZVl4ZTBiNUt5K2hvYWpCSVBYaFdjelhnc2tBZmtGQ0NIVi8yYWJ1OE1BSUdrdmFnMU9kd3hVazgzUTVGd2FLZVlka0ljdUJZSTNtRDZoWXhsaGNFYUJDcXBkL2FCdDFzNnlhQ3plckV3dVVvc2FaR2Q2ekdvZ0dseW9XWDZqK0dUd2xTK2E2alFwanZvNFZyeEJmTVpRL2RMdzhXSmgyRjE2Q3J5YWMwK3RBdGNZNEorTVlPY3o0ME51emVOeVhDZUVuSC9aaUdlTzE1NVk5V3RrSExsZHUzamc0TmpkclRoaHpXZUJMRWdZbVJTNFlSanhjZ0EvRVZtUUc4ZFRvSmhDaldjTExQTEdJcTZHN2Q5M055azg4VE5NV1BhSmlpK2NaNHVYamVPVmUzRXJQMEJvL3N5bmZ2UnZkaXFNNEhBVGxrSTFGZWpXVkNNeVJQSm9TaUp0Rjk1QzhGQWR2UXNWazB1U3R5MFNvSU5RRHVtYkxoTUFsZTVNbHdQaVIxNkdCOXJXelk5Y01lWlNkT0VZdHNQVzJFa3VoVkxqU2g1ZmRTajAveGNSVTdjTEw4cmRyeEpZZHYvWTEwVWYxYWZxNXBHUkQyb2I3TSt2ZmtHU2JweitVVEp6ZGp6OUNLTktYY3hHaTFjOHFneEVXTXQyY0dNcVVtUnZQYUxiK3NlTlVXMVpzalFxRHFocXlBMW9QRFBmcWQ5SDVQQkZPdnR5Y0dHckVsUkxQUFp0VGRDYWZpSHc0VXlnZlFpS21HcTJTem8vNnhRejFvVDkvb0NRWFZzenVsWDd5SE92bWtLd251RG5WcVExV2dEeFV4Q2puRHJkMnVSdUpmVTc3dlJXQTQwa24rWXRPOWhhb3BWKzc5TDNoV09MbUszYmJrTmRwZHQxTFhNQkxYczRFWG4wSXdwNVNGZWNtRnAwWFhRa2lzSUFPKzZEZzB1VFRXbDFySE1EL2NFSW81WEsxdlI0amRRNExrc1lOeFhVaDd4Z21wQVpJYXhHODNqUkFSbHRsa3VhK1ZjdStaQ3Z1Q3NTZ2g4YUZQSDB4RFJaTFp3b0UxbmJSVFFBbEZvN01mdTJZV2V5d1hEd3E2dlpBZno3bXZqVmdQNGdhVlRjU3Z0Y0xQZFRHWFUzQkJ5SS9Ibi9nVFpUKzN3M0ZPVmw5WWtzamVXYmlCSmp4QncrS1hMaXBjNllwbC9GbGl5KzlML0hKVUpZOHRrNlJqZjRhaE80b3BPMktsWFNBd3hSWTNLTGloRnQ4NFp4Wml2RVlOT2hHTzI0UTJnR1ZPeWl1alNCTE9GM05hQ2xMYVZvOGQ0aUVGVjh4WE5PZ3YxYlFxS2hFcjZZdmdpRG1WcUlkUU96QVlCSTloZ0VKM3czV0RrNnBmVXlKTDJqSEt0NHhaMHBTbGFxeDFteVN5OWI5Q2hydFZuMlQ1U3pXa3Z5MXh3YmErTjV2Y3llK1ZSWG42bk14dUVYd2tOMk9kcll3QWtna0RiNEFhdHZMMUQrOU1yQWFWNUsyeVd4ek9xZ0Yza0tpandBbms1M1hrWGNuT3pzMW1zZndvemF6MzJteHhlRkwrOGlxL1dkSzV6ZGE5RTZxR0xBL0ZadnJ6ZzUwcUxYRmU5bW9wRys4N3J4ZnpLOEMzMktqbkg1OG5acUxObGUxMThJTHM3bGpKU3JYZGZVK2RHN1hnWlE3YUVoRm5kZmJ0K1VjeGpneXFKcGpENzM2KzY2T1pTOU5Rd1I1VDJqdi9KNDVocnZWRGl0YzNnWXJhVldaeXZzeDV1NHR4aHVUZzFiU1oyN21QYlppakNUSWhIWGp5T3p0NFZRc1hXVzNrSEdPb09hajI0cWZjTmRGdE03VVNGeUNUNGdFcjE2UG5DWTdhZ290cGdvWXdIVXN5VDFWWXA2KzJma25kRmMxdlg5Q2d1TU1zNzVzN2JneUoxbkcxRFZ3Tk1sNk1DZC93NFdxRVM1czRTelBrb1pXN2g4RVNMeDEwZWF1TG1zMGJYTURYZFZ4SEhZLzZ5MWxzcDVJVEZGTnBuRlV2OGJLVVBUNGhtclhlaWdaQVRmc1YyL0kvUVd5OTFudkZvKzdHRk9Oc2c5ZVd2eHoxNlUvRG1lNjJ1MEhudURuRWpwTjNhbDJMNlpuclV0VElsRkIxRUoyV0tIcmFXQUdLZTYrb2VJa0VWeDE4NWhBZHV1VnNya053MUY3TXEzdmtSVTB0VXE1SjZ6MUdaQ2RVaHNSUkNBbEM3UEc3UHU0K0prUnNCZDhLTDJKK1pDc0FqTGN2eVVnTjJiS3dYeUpFOE1BYmN6WVpKVC9mOEpTRGFHM3R4YThualAvU25aRWxNNFptd3dGSkhneEhaMkszSHo2R2RCeEIxYzl1QkczOGJwdFRHblBjRnN4L09kdDdIU01QTVhOL01OWG5PRStaNnhzdTg0QjM1ZVBiOWhYc3pZMjhvZ3puVmJoL296Q2tUWDIzeHJCQitob0wrektPVGZrV1BoMG1qbUhKbTF2R3JyZmFoaTQveGk0Q2JzL0NTSEdTYlh4ZTM3NVlKZmFZOUpOS2NCSURPRmhxWjdzR2hNS2taR3dIRXk5UUZuT0dpVjU0c2V4U3NRUyttTWVFWWZEWmtIL1l0eG9mTzFub3p2T0h0c2ZvOEdDaTdLb200TDNmYTBwTjJGTzl6dlRYVDMyakZCZDdNWTJkK2l1dWVGdldFMTg0bEJFSURSOVd4RnNxbVpqc1hNV3JEQ0NZcmtwUVluQXprRzEyZWdBV3UwdGh0czRkZVA3MCtJQjEyQ1ZkYjIweUx3bkppbHY4bUhwcVVBa2pGUWsxdnc0QlFJS2QyRkdKUHlsVXMxM21KK2p5aFZ5LzJDVERGUS9ieHBHelFTektDTGhmclpUVUpPRDd6dnhBaklHZnZqMmpvRFB0ZTFyVkVTZ2dkVmlFK2l3NDVCT0NTMDVuYnkyell1VTFvZ1pwdHFZbXlMaVgzVUpKR0NkNFdtcFJoNzRWNSt3ekF3Q3FsTHZhZ2x6T1ZXSXh3Z3FENmFlNk4xMnpzQ0JyMkVHckltVUtJbmJCdUhueEFlcklIcTRLS2F0M080UkZWN1ZFVFZTQjhzQm9qNXBtN3FPQ1VQaVJueUJUeHNSM1BpWXV6OXE0bVFkeWUvTEVrU0VQNC96blVrR2kyNnlNNzdIdW5oSk1OQmpwdlRjbUMwcXN2bVJzejRmQU5oMU9qYldNQ1l3Yzh5US9DWDJIZDNtSFRPcTBBam1UN1JkRHo2TURXVDJ3c0gybGRuTEl4emxTZU04ODdVZ3VJL2ZVTHg5TUl3dEkvWmpvUmZLSVJLbHJGaG1wOU5PUnQ4SXowYVJBYmxhNTRyaVNzTGx1TnkzcTc4dFFvSDYvWjlFR0lOdExZQm1KYUl2M0Viak1waG1ETld6RjRLUHFCNlFqOCtkcHVTTXVOd0VabnVwdFU3RHR2dkhRaVRuY0lzMyt2cUFIbjljY3BpWGRjTnVjRGc3dktLS3pPSUFlM0FHVFhVbS8wMVluTVhXZHNVMzZaYno4eU9TOXJMNEhEK0FzNk5BWXZHYUN2WnJ2akZPczFXZzRSVWsvMEFjWjhMWlV0TXN1cHI2djdWbk9icURmOERMbG1QdS90SDYxTlpKWXlVT2hrRlpycmNRSm5sOU5LL09UeDdmZkZvRFhSeE5FakVYSXlVUXYxcUtRSXRMUm1RK0VvTjRacHhUb1pFTmV0ZS9NU1RYOENMU3JRQ1JUQ2xPakVNMzF6NUw2V2RGa0tLV3lMeVplWHhKOUVySnRjZlQwSHNIZ3BpTnRoRFNySjB2dU9hZEJGd2xjWTNyS0VYOUk1ZHlkT3g4VFNxc0hRQ1dPYitjZVFzMlczMDUwQnNDbFBTU3R1Q2hTaXVDVXM0emZkaHgvMnRVWWZUVUtSNnlUTHNrcmgxaFYvQ1RxaVBraVh1aW5KS0MwTE1tWTlxS01KaXo1TjBPSHNVZGdkVXNuekhwWXFUaVVwd09rQTJNb3Eza1RnYjNDQnhhSGVJNXVQYm1ZVzVDTkx4VExxckFHOW5qaEkwTTh3ZTlZZ3VXQUFUeDBhSFBMb3BVaHdMczcxZHVxYzl4MmdpMUJVMzBzOHQ3NG9aSjFSNHNlOStLRUNhWllBR1ZkZXBUNTlVSGRwREoyaHNLVkNQZEFNYjRCTEJFRFlXakVwT0k3QWUwWEoydDZ3TGh0aGN0MWUrSG5GSHlQSjZIMVY5VTBkb09UL3BEQ1htajV4OFVZaExTMTVzWjM1YUFZZWtTdDAwK0hUMzdNL1Y2aFdpZ1A3M1EvVTVWbGZpYUhzQUxlSmtyQXJKbXdSMTlWNklVNWdtVzI4SmhDVzBPeEtBVnJ3Z2dIa09JSHVIWnRjcSt4NWM0VU1uNFBYQXhsL0h4WXowY3ZLTGtlRGZNeWQySUlVS1k1MkdEYTBLa1BxN1JwQ0NEQlJJbDVrdSs0azl0UEZCSER6UzdHQjFKUEVtMmZWcnpRejczd3hwRVAyY3BSQ0lyYjZOYVdsZUtzMkg5M2FyWTdNMTBUU1JwMVhXMDVtZU4xM3pLaHlNbzY0K0trWUdHNVN0OWxPbHkrcUJoQUtkK2s4VTM3TlVzZnRYcENDU2UyNVVyMFF3ZHk2TDBuNFZOMXI4M2FZU244dzFrSEszL0pDSDZFaWdGbjFlVjRuc0FVWDZoQkJJd3Myc0l1SjJMTE9tWkFjTUU4eVBvdFpqSWIyWXJRalhva1djMXgwSTVYVWRQMGNXVTdXUnN6WnZLQnVUVTF0Smc0alBhZHUxYkRIMTJhdHZwd3BnUTY1SUpHRkxwMHhLbW9sSVRzZGs0TUZ3dUZIRXJMNmN0SE5GaFBrcmZHMzhoakk4Tkd3YmQrV1NiLzBqMGp5VVczR2htKzJXdTVDWVFaN3BhSkI0Y3FoaVEwK1BoM3VncDcrbStZKzFjUTd4aGlrS2p3SlY4TGVDYXdYQ2p2RjZrYVYrNzlXQ21uWVZjSG5SZXlzU3VkQTM4RkdZWFpvT055NTZueTVzcUNxbktRN1VnbGFXUjAweUk2VmY4MTBhVW50RHhJbll3dU5RQUpNbXczd1hYeVprTWMybjdpR1lTUDZxc2Rzak1PdkpJa2RXZHlvUURoa294UWRLazZMWUp5clo3ZkNEQk12RFlVc1FjdjhOT0l1bWRNaEdFVlVHUmptb3ZqMG5FQWdjbHJaa3ZrMldIQ1g3OTErd2Zrc0h4NUJnYjlPYWgzMkk4ZnUxd1BmT3FWNU4xRkkvUU1KSWFhbWMrbHJla2RMelF5RUFEYW5jczBOZXFQc2pLMmx2aFhMdktlTzJLN2JQQzFlb3dxTW1mSmFNcTNoZWhmOG5TWjI4Vm1FbklQN1BFNldqRUhxWEYxaU01SnhFaThlc0VmVEdLQ3RmdjJ3SnhPNEdYT3k4WVJDTjFqcXg1dDkvRXNzV1gzZWpMS2tqU1JFZDg2c0xyR0RiSXlIM0Q5b2NzN2Q0eVB5c0lodXc2Y0xrWjFFd1VMdjhveWpJbHJCSFo2b2YwazlPMjdsKzlsMjR5aThwUFdwRzl0QTRQb2tYSWRuc1VnL1JqWDU3dncveFNHdXRET1dWUVQyY0M5VWp1SW5Sd3RKcjhhNGJhTG8xVDNTL28vaFdHcUVTOWxpbXVVWERjQ3JtU2FIL2EwZy8zM3FhMW5HdG1EUzExb2lsM2MxNUFQTU9pVkExeXY2S2hrQjhSU2hxZkRnMUhTUi9lRldWcVFMRldwMDhYNjlIQjRQUFlhQjI4bGFpMkJabU9sUUtrWVYrZVZsOUEzSVIvNWw2SUtmNHBvdVVudGxjd0FGQ1l0VHMwMzduVnIxeUh6R2E2N2Zaci9Qa0FmekMvY3k3VjVCaXpzbVhMVHQ5K0hTRWc4ZWk2aUNpVVVFKzdyWWg2b1hOL0ZyWERpS0FGK0pXNFFWN21NT0NSOUt3QVZYeHNBZ0ZJcERLdGRhV3l3VXFvQ3RJMWh5ZStiZWVhU0ZsNzVtbUxONDNaTWI3QWpvaW5DZ05GUkppRVZxRG54ZmREWUlCU2VXb2Fpek52d0JGQVRCeEhRV1MzUmNmTHhFdGpVd3FHNTNQL2R6KzJCbEVBaDhSVWhmYkNvakxtS1k1dFQ2ejV1blZrbUdjMWlNWUdnMHRRQk03Y00wai9Bcm4vQzh6M3NmaGFYazlOcTlvSVVvVUFRelJVTDdSQjJBek9Zb25CbWtDYTdhdFdab28zanc2cWhtdXNPZk1RTGx2eG9sbkttN2plMGNtOVoyNXlTV0oweGh1N3dzMjA3eElpNlVta014NEd0NVRmTkRhV21xUzErNXJyRlpCSmYvTjhydjY5anZDYmNwMTZXL1dVeTVRK2ZoelNSUnpiOTNIa1NiNkdCVmVCd0ZkU25jZy84SEVKTTQ4VXdFdDJMMWIrS1VQemxCb3hlL0RENThtY3crTkpMRFJNRGE1aWJqMjNQY2tMN0NyTVdOK0x0ZThaUTM3aE5LU1NPMGl5Yjl3eW8vdEpudkRCRjgzbWJnUFVkbXF3SUtLemg3WjE3QmdyTU90QjA3MHB0cjVsQm5nNlB3cE42WTZWcmN0OWxPV2wyRGlTZDBMT2lsRGgwTkdlYjRWZXIrQ24yeHU0WCt6aEs0VDRuMUlSVk92R2Jxa0tUZ3JaL1ZUWlFob0NMMUNINDJyUE03TWFVUmxRdG41L09HY0J4SHdFOXczQVUzOGRrYTZpc2tqMUlQeFFIMjR3Rkp4U0NyQ3BrY1JQaDlpVXlBREZJV2RIVWZwMjEzMjNsSjkvdnF0Mm5pMmEvVGhRU3VZU1dmZy9SMUgxc3JGeC8wcmtqS09zYnN1RlM0bFRRZ3cwODErNlc3eTlWMWpDcUx6dTIwcHAwS0hiQ2d4M2JZcFlCOTBYMWZDSG03cytrTEEwTk9SQlNTaWNQRk43QWJIcURISnBhTmtWSWtDTjUrYzlQZGhyWDF0VmxlQjFOUmI2ZC9hcTBnaGh1TnVwRlpSQ3ZjaUZyc1l3V3hVeVJLWVRIWDBtUnUrdXlHZmxtVXllYjBRbklreXJuRUNHbTlOVlAxdkxESHVmY1FtL2VPY29BRGJyMkg0R1JrNDRZbU4wRThSWjBsbGlDTk85dURaclNIbHRTM3RRU2FDV3JQc2hyczlsYnU2M0lKb09xT00xK05uTytEYXpqYVRNVkhhanpCdHg3eGdrVjMyMThBcjRkQXkzZUZhRk4wNVd5YU5mNEZTd0l6Y3VaRlhFd3NhVjg2ZmpVeDA3K2QvTThFZW5lKzFQa2pxMjQvdm1EVVVlOUpKTEhsMmoydVNEbjhITjdHYzZ5UWlEOERpVlo3RmNtSmw1RFFObk80RVlDVmpEM0F6bytCdXJpM3hxKy9RL0NPYkdGVG5YNjFrOFIvY09QeElVd2FkalFrVUFGY0pqSDNna1Njekg4eDV6OHdkak10bGdyYnJ1c0o4UXZhY3B3cVloQ1Vhb0RzNGtjakFScjI3RUR2THNjYzMzMzQ3L2E2SktMc2xKa05ueG9UUElqQTg1Y1V3Z0hXMW9DaWtlQmFiRHZyOGtNZnZjcEJKRXF5bWRtdFkvUzRkaXUvYkVjKzRBbHVCdFJlZGdxaXlTTU1JWVVwdVBuS3BFcTRmWkxLU0IrdkozWkRNN0p5ckZiMHVtTTBpUWpPRnhzOEpnY2VseWJFeENoMEh1NHIranBmZjZsSCsybkhWdmVHRFFSUUN5bjBwQS9uVWhSOHhuTXpBWGdKRE9VT3c5TnRCVldVb2JQSlFmOWNUcE9kRW5hL1ZOMHJtZDV5Yy9nZlBUZlFJTjlNNXBIQTF3RDlGcFBuUGJTb0hhVjZrOTRmdlNqMTUxaXdlVERpTE1lQXQySS9iNkMvZElXdkVUemVGNWIxaU41c01acFNxOVJxRVhaQ21wMXd1L3lNYzU2M0piak5yOWVBVDBuR0lvWEZERUZPT2lwajNaM3d0Ukg5UEd6dHBVWG9iempvbmFSWGc0RjQzT0hwWWxGQTdLU0NPbTJpYjNKdWxMK1lMeTEvOHZKYkNvSXZIY3NsNWtrZkFqa0lzNkJ3aUZUSXdpMlYwMU5TWFRCWDJRbyt3UDBKRkQ1cTFYQ0ZWYUwyaUFGUS9FWkpSS2RwcnhNb1M5cFJXeUFHeVVHQlJxOHhsTXZ5WFA0ZTRXZXFYVTFESDUzTld4NmNiYm1MelVxUDVpbVZSU20wc3VPRmRlZ2ZnQnVORWJWYXNkMUl5ZDJvVXBXOXNBWlprbWt1NTRhUmZxQkNRUTlDZ0RyVE5FYUJ2WDlUYUk0WTNsdW42NlJMQnpvWnZhVzJWRzNDdlRqZGVOSDlmUjYwc25BcWc0YnRZSHpJcy84QmlKaEdJa3JmV0ZTdHZOUHlKNEhFbVRFeWNlSUlrQXVaOWlsZkJvL1dleDVHRFFkL0FGTXY4VjdTcUt3MjdnQWNYTmhpRzZ0ejhOK0Y3TG1CS24rM3BuTThKdy93TUxJQ1FCaWJ0Uk1KZ3gybXFpTlRWY0FPK3FSa3kxTUllNmlmQzljR2NXOWhncGtsOGduMHVGNjNKU01iUEJ1ZS9QZEdoN0VzaHAyOC9XTHRPUVFjOTdUUHh3L3ZiL0pVZmdDQ3JtS3ZMOTc5RVlrR1hoSW03RVAwaWtxS0UrZkRITTUxLzNkc0t5NndKdTFTdU9ubVRQK3hTOERPUTliRmlTN1J0aytpSWowRDh2dE1lZmYvajRUY1k2VUNtOGFOa1pVRFNtZ2NNTW9ldWI1VWM4T1V2ZGd2eFp2RGRIb1Y3aGY0V3VjVEY2V1pEZGUxMnhkc3FaUjE2WXdYcUEvRFAydzJJdXhaVE8zMExDV3N0QlhDQjdCUnVjZ0krZmd3YkpoRFZnV2F2cUxHTDZSUno4S3kvUlVrb1cxYWc4alplVW9WcVhLSUp3ZWRFb2I5VlNHR3RSTTc0aHFTaHRKT3dyUkRabVNlU2cwTTdoVUh6VlhHWTduVHlkZmdKaFI4eHozNHNMaVFLczEwc3E0Y1RsQVA2T1JtR1N1ZlF1N2g2a2dUYnF4aDU5YnptdmZsYmY2NHpkR1JjR1FrcVdVdnFLZUd6anYyYXVXRlRZRFFJSFFaWFlPRTJFeE9QUExZemZ6SCtnMlNMV3JCL2paQlA4SEN0ZWRUU0xjeDBqdkJsWU4xS0cwS25ndTN3eTE5QnRtSU5HOG1zaUV1QU9kVk9LZmkxV2dqRkpPekhaYUQ3eFZPS3Q4R3Z1YjZHN2U1bzZOeExpRVczT2hUQzFRQytZVGhWUGE1bGQ1SjhRNEVuRzF4YlNhL3RpYzZlR2p2cjk1aFZxNzRCZ3R1TFgvT3daQnJVeURITVhlWWlhL2ZJUDVyYWpmQSsrVm5BL3ZaeHl0VHU1WmIwaEtXQlorcE9NZkYvT25rdGs1eHoyL3pwYXAza1QrN0g3Q1dnMmxsa1ByRTBtRnhEZXJpUzNZekF3SWJsOFVjaFBnYVdGWWIzaFpUOVBTdnoreDRrb0hpTllGdWNTbk8yTHJZemFSRTd5c1NzWC9aTzJIMHVhcXI1eVdHcEdCUVIwckNkdTlSMXBtejhsNy95Z1FwRGFNeUU0b1hkL0hRZmhQaGVkcHJMSzYvbjNydWVtVnFNbm5mdkxrWHppNStDN3hnd0lKRVVSWkdKSGVxbWkzVFQrMnBaYkhLRjFqRlQ4ZjNiREhra2J4aWJ2WkdZd2VYVzNTZGVweG1hV2k0NGNlbFRHMzdGZWpSbCt4MzFZYnluOTZKY3R0cUdlZmdRejlVeHdlR0JtcGJvMXhSVExlejIxYWtCM3BIYjBSQVpOTWpsOUJid3laUU1YNklyL1psWnNaOVBQWnFuUTNvZGJmRFU4V3l4OTJQR2tHMno2Uk92NjVOWXF5bll6d25MSCtYZ1RNVHlKNllGS0FWakphczVxZmtJMDhZRVJCZHZUdkFkVmJUVDBkT2Vtb0lJR0xobXMxdTFCVXd2amwySEZ3ZlVjdmNtT0R1S3J5VzVrM2l3eEV5Z0d2QVNoc0psYmRxcXpxaWZCVW5TNmJqNGlFbVQ4Q2ovL0d1Sms1N1FuSnpxazE1L0V2Z1d4Ymt3TmlpSXFiWEdQa2RaOGlIQVlpYTJDUGtheDNYNy9TamdSenFNOFpxN1ByT3BkeEpWMjVzRzdKRXUrNExSUGRrbE9TaU95OS9saDZSc21sb0FHQnFpM21HTHY0QTlWcXRMUXVnWlpNa09aNExNZWhIbmVpYm8xZXZRZVRsY2w4T2J3ZVBrQ3R0bU1ZNC8wb1ZQUTc4dW9SblgzYnJhN3JObFRaUDhKakM2bHAzZFg3VGpDQVdKU3pXdGhndGx4MDQxRVphcGtkL3hleXpLK2YrWk8vVFJaQkhSVXkwR2QwZ05lMVN2Y1paSkI4aUJIdFNjVlRVckFKaXlSSC9uNmFyQzZsN21BSWc5REc4V0l4NnhMQ01vdGsyeldiNW1PNFNNUFlsYU80Qjh3Q3RzNjdJRVlMUnQxRGNCYTJzL3p3NEVDcm8zM1htRXB0T0dmTU5QRFNEUnZzRW91TzBuQXowdXNya3ZUd090Tm1aSHRYZmg2WmtWM3NVK0VFdTBZYklEQmNha0owMDJWQkVYRFpXM3FLSWRDZGJaQllLRHR3Y1dPWEVzMHIxYURERUJtdHExM1NtUjJYdUxsRWJETFdhR2NOVTFjNjZtQU4zOVBZRm1mZFphbzN0N3JmZ2c0TGVGRi9OTEd5blkrbU1FMEtydmlKT1dVY2ZnaFNLMVR0VE5XS3kvTEVqd0hTYVE4bVYxdmozRjhtQ29aRVJFNXd6Z241bnhkTXNJOVdoMlJYUmhpaTNCRjNTZEQxdUFueUJLTXJabTBJS2RhbzlqSHdtanJHdmM2QXR0TStBZmRLaDAvdEFRT3plM2p3eVBUMVJtMDhoQmRCbFpvMnhKQjNUZWdlV1IwUFVUSTJpZ1BIRTVCNVpKNUVKeDM5VFR2dXV5b3ZrelhGY1htajJDNVRrcU9VRmVCdEFncXVFcS90WWdUblZaZmtFSkMyM21wb2hEdkV0RmM4M3lCYmRlRzd5MHI4MTVVMjc4bG5ReDAwQkxWc2pEak1kc3U3UGZsRjQxek9NczVnVkVoUUp0KzZDTTc4U1hQbTM5ckhoTVdQM2RxVVBmT1FtNnFKaEN0S2Z2SGpKZzZxeWlodE9adHhIeGhGdk1Wa3Y3WFhsVTR5aXAyMnBNRE42clBOZzJxNDhsa0dGV1ZlM3RmeXlFR0RkM0p1MmZwaWJySFVSSE9FZ3BzVFoyZGdxWFh5U1RacVZHdXZ1c04xWm5ZUlZpSXQ1OEVJa0RLREZER0JhZElHR3I2MGd2OFVKeVpVTThvVFBPU3grNitRYkM3ZHJMU054cjRKVlRFNjNmVzVqY3F2N2d3VjZISkk0dEd5QUdBb3kzSm1vUVk5NkZlczdUdVNxdHlwR2FDMThPcm1EZDY4MVJ4U1JyK1A4d2UrQytKMlZLdnd3QmsrbVpkazJPM1BTMk04NkpYY3FzbDJBWHEySFlZOHc4dW1JL3FkOWZIcHRicVI5Qk0zN3VrWXB4NVRIcEMwZDBaaG9MN0J2eW5jUnAvNktoMlV4YlJXU1NacVlHUVdtUGZwL25kckJSSFRlbnZsbWRqdUZzamErY0RWSlprVDhxR1FReW9zNUs0MW1uN1dobllrL28rSVliTjFTbE9ObjJKaWJLZTdWOE5taldBaCt6YlNPRm5LQXNyMVEvUEJmWkxsdUhzanVvL2dWdldLV0M0N05wQUttYS9YS2NsSjQ0U2twbDhuVUJTcXVveTVQMTRjOFpkbmc4Wm1yZVVNRk1xclJXWXJKYlh6VlJISy9qTU01UjdwbWpRYkZCa0c2UDBrK2hqd0JHOUlNZzExNkFmb0p3Skgxdkc3MXBsYWcrekZnZXl0d2tEWW5kd29MeERyZE5KejV5R2hYZ0hwU2o2THF3RUllbVUrNlJkT09iOTh5RHhUZkZJajZ4WUdsZk9aeU83ZlZnU3BDWnVYczFCRUh1bXpqY3ZmcW1wQnBENmRVMUF4eUkzbDdXNVVhQXd0cmFHSWU0V0QwTm5uNk9IYlUwV3Nmcm5pdlZzeEVIUk9wMTJPbSt1OUIra3kzcXg4WVNkbUZFYTlPc3Nkemx3cjlGTTQ4dkM1WjdSRCtqNmVsczJuS1N1UVpWbjNldWNvUDNSV0V3R3piVHc0Z056aVdmRWM5cGZkL3c5aUdsQm1VZWlRSGhONGJSdklQNWx1c2lpTmVveW9ldjhoU1FFSmNHcFpEeFBPOWFyM3lKNXQva0NXeGNLbDl2N2Q4MDA1WnpNR09uT3UvR1o2YTR4d3R3Y1l4WlkvMmRGbkRuVThVSGU3UHJjQ3VGYm84YmZuUWRaQVdEV3BmV3Y4dU1saWpVaEplSkd6OWpwd25FWVJ0a2J5VWJjbTJqaVFOOHVWc3J1bGpKK29zRXdiVEVQTkZ1cXo0Yk1VYXYzdW10QXZSa3JMMG02WDViemdXMng1bUpiYWEzZTBHbHpNNUFMa1kxcm1EM0dFdlNYUllBVXl2YzNiVW0yOU5SSGl5N0VuZCtncDNOYnVNNzBINjFKSEhYeWR1NitzYVFUN0FHVEVWTWpJdGg0M0NiSXJDQThpYWx4eHhkVUdpUkRMZWJmNnM2U3V4Z25ieEw0RlM2cThnZm45WisxTnk5TDd3S0FmTFpMcDJScXFVZEpTSVVlRDhxMzR4QWNNeHREYTZHRlNQOS84VzlXWWJUNnIrcCtSbVVJaU05azVpYUJSRHRVVGdiVjJwejIwakJqYk9jd0lVWVllZzh2TTBRTEw3OTdFU0hxZXdQVUhtL0taR0xJenhLdHNKSXZjM29GWmNWcnRkVyt5WlQ1eEtOd3JnWUMzUnlBU2hyV2tRVFdIbWU5U1AwQlFkRkExdDREdHExVkdVcGVma2dvUzlxSi9ZNm1TbzJvakFvWFhncG9nZUw2K2N3OHJ2cEM3Q2Y2YklNSkl0UTAwUExZVEd5VjExWGRCZDQ0ajlMcTR3SEUyVVB1eUlqb2JMK1NjY1JZZk9DWElZTjVQelQ0UERuZGoxQ2x1SkRGeno2TklXdE95Ry9udHpQUEZnam1CYmZaR0pPQnVEb04vMlM4Ym9hZ3hadHZwWXdwRm5yb011eGJQL0lEdVJBVDNiUmtvY2puVTExWVR2OFAvM3hNL3piazZ6K294Y05EQ2pCdzJ1MEdoTjJ5N2FJSDExa2IxSzBLZU9sVXNCb2tzMHlrK2dTUmxYa2lTTVBrZzlkSlNPNHFzWmtTVnRUTnhCRWxQc09GbW5qRGxXTUJKMUUrSE9jR1JqY0ZWQ3VBQnVjSFV4bFB4aVJsQzR0UjVNZ3h4UndVVFdvNTFySFJxZ2ZmUG85ZGFITTlPU0s5U2ZBbDZLWWYrbVY0QWdQMkxQamJ5OXZWWHFYQ0oreUpkR29VaGJlN1FiM3V6Z3FOcS9jUjRXcE9jb0ZBZGI2VVArUFhmaDhpRUFSY1FIUCthV3VmaktibXRnMGNSR0tUL3dVcEZJUW5NcDNMZDNyNWsyTGQ5Z2UxN2RIb3IyZ1ltRlRTRm4rb0dFYVMwQ0Q4c0pUbWVjZzFNeTltN056WDB6SFpmWkFQV0VYemVVM1kzZzBDeWt0c0lYeXowT1Fua3MxQTFSbmJUUXRTajIzb3BWWkZ2MndvRkR1d21XeExMdmtWWmtXeEpYRFUwWUZUMHBMTGZqR25TMW00a2xxakdMdUpOendpUnpVNGFTajhwcUx3TGtSNDIvdFlHbEk5ZHdVZkplNDI1Z09wVUQ0VW9EaVR3TTFSVmFvMmREV242OVNEZm80VFdlY3NZSk5IMnFNUGYyRmNqNTQ4bkdFd2cyeUxBcXBRd1M2SkE4dXliVjlNMWtRMlVHb3JaVU1FMldEYlY1ckFZUTkzWFJNNDZqTWJCQWhaTG1nR2RFZENibHRNTjFSQ1JTQ2o1YkhuanVudXhTOUVCU0ttd3B0bkd2d1V6TlgxcnBoc1VMVkIyWUZGZ0g4SGQxUVFBdkVBdEFndUZFL201N3R5Tnh3dUZZdGdmck1Yek9RTU5TdTNFaWlJRkUzclNYbGd5VHZjTHFDY2t5WGt0UjZvZGxtdEhrNW5ocjVzVXI1bHU0ZGdFYTVGbk9kcVFPVGt0TlFhUWhUaWRLRHg5M1lndTY5Y0NBRlYwQStMK1dSV1pWVjkxczRhRTd4Z1ZVTGhmY2VPeUsrbWhGajlUbkV5aE5hSHRhaTBNVVd2SEd5dWNlR0tCMVI3M2dOUHpUMXVtVmhQR2pwUmZUR3drUVZXSHpPQ0FiQjk1ekhwT0ZlR1pOWEp4djJjT203eVRZY3dnL1VnaXZnaGduMVNzNlQzZVI3Nlo2a1ZmUTh3bGNqYllHVGErckZTY2FQallGYTJBejdZMXFFb1ErWmRxaURIMVVXZUVuWUlOS0h4K1AzZm9lTU9iRUs2emkxUGJiM1dRRXpsR2Q4eXBlV2lpV3Q4RVRiMkFoc29CSHZvQmc0Wm5zMks5Q0NTZllJR25iTDFTNUU3Q3EzWFE3NXZ4b3Y0SW94T1h1Wk41dzRSOVRqaVh2OEZlT1RzWmltM2pxTmttblZ3TXk4WUVPcHJKS28rdHRrVlRNT3ErUVRFTXpESUpYTzFDQUF0aGYzZlQ1dUtKWk00RmZPZmFMQVBhOXIxNjRZRzAxOU1VKzhwaHZqdVM1di9BQUt0ZWU3QXBoRkZGZHJEMnRoR2U0UlB0TVFTOEVLbzBYTW5QSG9idVVLTnJUbFg3M2tlYmg0Qy9icGRVZDEvSjdERWFDRWFkeEVZdmlacEsrOGJiK2xyQWhVMVFTNWlPYS9LRGlndlR0Z25xUkFwRUVnU29DRWNtbE5aelIvN01VaEI0bnlpeGN0TVVmWVptWGZ0Wit2TXZZR0tiVkFrNUtMZW5nVlRsb0U5RnBieVVia0poa0Uxd25PSzBtVmxWMHM1WkRJbWU0UnBQK1NyOXRVejF5QUhZU2YyQnk1Yk9ZRFZqZ3NrNllmSmRiSU91V3h1SGdsdHk0RkVMZzhnN2Z2Y1VEdUNFdWtlMWJYcUlxYW1JbitGMEFsTzNQUTN2TGc5UFhkQTJpNXJNcjVEdHhLM01RYzNSU25rYkJ3R29iUldjdlovZDJNOEZDWTJydW54SFRmT3ZrY3hHdm9PcTIyUFdySnNYVnRsYUhTcjk2a1Rvczl0NC95N0tGb2U2cVQxTW4zYjdlUWVHRjZGNUxrYjMra0ZTNGlDN2tqUlB4aW5jTnZqZXM1YlQwNGIrdk9ORzBJZVk5UE9kelVGSThpaXZEVWMwblc0TnVVeDdNbGpqOXREN1Z1N1pKanJjY2grYlVuUFlMSVpkTWN1RXJNVnI5ZVdZVTZSS0d2azM4UURxY1RvOHRLWnRqZE1DMDlGNS85QU5jWDBhQy9KZGVCNHVwbVo1eWxvWVdydjZDZG5LY2JHNzJoc3lCS0xXNHVKOWt4WnA4WVZzZWVIR2g5eFppTVE3VzlCdS9hU1pEbHBzaGRGbXZkVks1cVVoUGo1T1Y4MDNKZklTcTdTaUZGZTZrbkxtMUlOTUlnbVhiSnJLZEhmSjc2Wk10a1A0V1BjZ3pOYkFwV1hoT0ppTmRYMm1UMzBIeTh1RTBEWXlDV3F5M2lkQ1hTSkZHV2hRMUNSN0pXdllaeXdiaXh4aWFRVEw2NEQya0VBdFNGTlpMYWZxUkY5WXpmS1R1TlVFMmxMNk9yNGhQTEZwTldPRzJXQk40bGpDYmNDUkZLM2RINmNta1pnajJoY0cwZVlMdXo5L2tlV0xzNjJUb3VrazJOTlJ3blpBNkYzRjR1UDYzWm5yZDdEWEdsZXhHV3F5VnBoQmdoM0Z0b09NemVYdjdPd1ZEeUh6YW1aQmxmQ0tSdGZzeWJyRXJlVE1EcXpzVjFWODVhOW9kNGtEUTlqTU9OaVIvNEdtM3EzdVhOek9lTUsyMGJxTUlqTE9UbWJDYUM4YjdJU05wYWtyV1pFcnkyajZ5QVo4RVNQVWFxYzU3U3pHRFNvZk9KRXBwdklqdm9FMnNCTjhUNGpqNituTTJDd1Yxb1VjS3NhRTBQWHBpVmhTRy8wL1lDQWNMQThYaE5aT3lpQlBPc2NzVk5uWUlNejJwWTYrcmROUm44amEwSEdNZWo5UXM0V3lrcGZxRkFKaGIzbDN3NzZTeGc0d1kydmtXaktQYkozSERqWisxaDlCeFdGTTZIdXNqZDJPYmhteDBQNzFZeVd6R2FBK25WRElKYzEzOFRmMUpUR3FqbVpIK3BFMTcxVmRUSVVaMjJaVlZSc1lHdkEzS0YxeVVhT09pRm1SSDZnSVZTeWdPcUdiV21DYmtlOVJrOUJaMnJud0FKNWRSNzlIU2x4bUVqcG1PaFM2Q2dtQlJoVXNCMXNIQjZDT2JTdjZQeDl0eWtZZ1ZkRTl3aXBINU5HcDEzNjNrOGtqM0o4WEI2NERNV1RRb3l0QXM3VmVidU9Gckw5Y2VvQW81cldNWkhST3Q3ZjJYOUcxdzEyd0dtemFMWEpUSE9lTExKMncwQ1FuQ0htcW5mNmdLVUVVbjkzV0ZRRVk3Vy9teGs4NEVkVWgwcE5IS21uMnZObnlEZm5uQUJuYm5Ib3JQOTRFNmRrMXlCRWJHMW5JdEFwaWt6WkxtZStyaVprYWdjVVExelhvTWZZdVdHbUlLdzlhNFp1K0xQWjJydGRuZWFsNHRjUmJoUjBBTDI2TUczVVlaaWhvYXNscGpCVVF2cWFHakFvMkY5b3RqSnVkMlNleVpBWTRtbzR4WFFrZlFKdlRWd2hBQlV3RVlPMUlWQld1b0VjNVpYem4zV3RkRVBzUVRUQVpTdEF5VW84a1pQZURkeGNpcHJhR01YRCtPYmFjdEhsZ1JKcGdvODhwL2FmMm9PbUtJcEFPTUZmRkxUbnFQczZTYlhRdkFmMnZJMmlMMWUrR2U5WnYraXVUa0xrRkRDZ3FOQXA1ZG9GWkxTMzh0OHVoR0J5MlREY1dSTnJmcCszNHJYTFVZUElTTVUxRkcvdmVXdys0aVY4ZDhkK2lsTlBIU0RDR0l5M2FkTmZyU3N1VXZ1Y08ra3l6V1lhdmpuL2QzbnZlUXFCV0FnQW9ITHlyS0JZUXdrVjlzNnRlWlN0Z0ZLS1FqZEtHUitkbndMSTNhRTZrYk9OMG9URUR1S1ZibXFSNXNVcWdXMzZnQ2VWdXBsMW5LRkIzd2V0VHkwN3NnTytNKytHSTVaclYyYSt6TmRHaUI2alhpckxOWDZsKzlqZFlhdFdkQU8yRnhBLzlTMHBYbngyOVJTWlBoUHdOL2hiYk1KTHFiMEZrc2NYWlEveVFlVlhXZWxGTFBYVGl1TnlFUkRuWDF5R21zajAyK0lRejlJa0Z1b3JyTkVVUitDZ0JmNHFSODlpbnpuODV3c1NhYUVSTlkwUmFnUy9MTHYrNmlWTll1cGh0d2R4UExIanh4U1BlS0dCd3RjMFY3UkVjUENQb2ZvYzM0encyRW1oZlZvNXFQcW5oa2FNTE96UTltc1dLM09GY21Ndm1kZEI5NDVvbkZXeVFKWkp2aDRKZ1ZOL3FOeHBxZGNNbWk5ZlhxaGMxQUkrNTI5c3JxeHFWV3NuVVRacFlMbXRsOTRVU0RHRm5GQ0hEQkk3TVB5QlBHNE1uWWQ5Qm9GTGlsdTlFSG82UDVIZ0NQWlNsTXlDb25meTVZRVd6dnp3LzNJRVV1WTRDZ1RRMUcyM0VteGNHNXNJT21mSllCTURPYVd5S3RDNTFobzBja1FBdjAxaUl1STZMdjhtNWhuRFdwREJnQ200K0pRckdHaWdtWjhFT1ozWDg5a2FmSTZSQ3NTZ05adWtDUi9oSUllZG1ldVh3WVMxR2lDWEpqZTN2a2gyTXFJRjc3ZWg0Rkg5dlFLM0VkY1g2VGNDMnc1dGVuR1E3WWtIWGZxdEplVk1JbHlwK0hLMENVNFJGalNvYkk1K0NpSDVJZklGMTlTVUR0L0hQSm40VjR4UjVpZ2hFb3ZGQkZ2NVNkYTM1SUJCcU9xRmorcjd5cVFxWUhKK3NiUm9Ba1FwSkpDcE1TcHk2eHVURXp0NGViRk9iT055bmlNdURLYmtQZmxXaTBvVlVnM1MycEl5aXVZUk5MenE5UGQ2Y1g4Q2N4TzRMZTNEb3RXQURCdEVYemlkY0hKZDNPRG5KWkRBYzZ2cW5MWXpyUEp2LzMrbkF1SlM0TExNNnNUYU13cG81U0tXTGhGYjFiSzNOOTBUR1VEZmxKS3hGSThSZVprNlUrUFJxRm1PVVZjWGNGK1liU1Vwb0JxaUNsd0R3VzRuaURLNjV1LytXMTBaVkJvR0RaVGVrcnZvWFVsYk1RQzM5OXdtaisxQ0ZSNHFiWE5hNEcwWS9nOTc0WVpZZXVRN2ZsZ3E3Y3JmcVhPajR3RGo3UEF2UWdNakJiRGxhOEsyU3VEUk1xR05LM1dwT2ExV3NBWGlhYWtKV0NWbWM5OXZrM1ROMGxFUWJTVUtNd3ovQmV1QXFLU3Y0STBpdSs1VkpsWDJkRENOVFl6UVFNTU1tV0VtOHJ4bEQ4R2hVaW9GT2plZTBERzI0YS9ocnFKeUVrNkdXSWMyc0JUTGZ5b2xiMkFwUmd2dzc3Y3hoQ2FQSHBLeElvek9lOW0yQUxXZDluRW5xbXpKVENFeUUwTHMveGN6cVhBenArRER3WWZ2V1d1ZUwxL3EzTHU1NWlJWGs2dGgycUhUUm9rQWtPeGZRRXVyL3VRME1tSGMyK0IyeXBVK1dBVlc1eCsxQURyR0U4Uko5c3R0YUdNSHVZVFV3aSt0TmxVVzRUTzZWSzFGc2xnM0Y2ZzdCcEF5NjRVM0tIS2xkYUtMUVphWlNUQTRvc3pyZWRiMHNlS0ZwUGpnVXhJTGo4RmwydDJLZEl1SW5BK25vYmdKYXB3dFRINlF6cUUwMVdvRkpIQ3ZVUVdkT0ZyK1M5MVZOOTRzNHYxc3NtUjBlb29NQkNZWGNSNVBIQWZmbXdFdHNYcUZwQXpuRFVrT1liQW9kYzVYUk5CK0tOdGxZbTl4SW5YdlBpWTlMVHZGNmxUbmJpZEUwN1Uwa2tJcTZBRy9FMmJjKzJtZkliZXE5N0VFSTAvWklMU1lCMnhwSlQwcUxUeGlBd213cTJqbW8xQW9pTnVqRzNCd2FIWjl3SGNVVzN0ZFF5ZkRXNzdFcUU4WVFpMUUrTnR3WHUrNTNNOXArSU4yMy9SVDJJVGZyVG84UFd5Um1uNGtzVTZXWEdoVWwwY296ZlVJSUhSNUtPTmI0NzBxRENOb1k3K2tvcE1kSm1RSTRtSGRTc2xlN0lISkxVVlNRN1JNa2JyVlAzcHJmQ3dhWEV5UUgycWtJVE4xWllUbU4yM1ZGZmNOaUJtRlh3eEpXMWFDTlQ2Wjc2ajFTTmM2U3RrV2dyeWtIMTgrSDN3TFdqUmN1cllFR25SbE5jSzZMV1gvWHJSeVNpYTQxV2JRT1NMKzEyUndCTll4dXRQSkRBalQrOVFOanVhVmRxc2I4NTZ3b2VuMXdlS1JkcDkyR1Q2VkJqK3JZM1VEanpVVldKelhXcFQxaWE5MmFPMDUwQ200OUtPYWlTUWhGUVVjVkdsTWVzQncyYWJyQVM5Z24zWDBzNG5BVzNVTklqT080Y2NKR09lby90WEZvaXZSUGdNbktjdmdyOWFqeFNNaEplNkhWdGpKNXVEWmpmSGw5U2hCQXdaUGk2aU5sbW5NSVlFbEJLdDNmQVZpZnlnYkgybFd0Vy9tYUt2a0hQbUtZMTVFUE5ZejdIUTVRSnh1WnNUT0xnSndiMm05MDI0ZVFkbGJJajBWQWR6dDJ3MzcyUmZNNmgyL0t4ZFAzWlRFNzNXMFh5NWRyRy9YTzhQNWRrQVVhbHhLTk5zbGxmclBiZERCMmozVE9tWW8rYk1NVU5wYnhqMVdFWUY1MXBEUWZQVG5LVXkxU3JrMHJmOHZDV1JsYzdtYncwUkJvV3JJa2Qya0txK0hBVlBSUlhlNllNNTArNUNGbmhZTVFiQ3pxK3pST2NpK050VVVvMXozV0tRRHJGQU9weC82NU5IQ2loRGova2ZCM1hYOGdlK3RHa2Z2VnZVTGtpblBneWRJc0szVW9IL0hQL05HTzl1azkyNzFjVjhEMmN4VnBKZFZsdlZPRDR2a1FHRnpmVmxWQlY3WDRzZCtmUGEvQU8xbG9LTXRXaE9jRXFGNWtaSjlsUHltT1k5WTJmRGV4bHJDZWxWZXVJTFhsVFF2N0pkSGw0WnlaYWV1QmJVUkYvb2ZJMktBNkFiZEFFcEdoVGtlbFQvQmlNUmhrdnkra0RWcXFGWUE4Z00vblJQdmlnSHJjSVR0V3Y1VkRRbllzMFVjT1dRVHBhMUZ2VHlHNWl6aUM5NDlsZm9wU2k4WkpUUlhsQUJxMVZBSWhBenRLNlpnV2dzcGtmeUZwL1dwbGptd210SVU1S2lsOWJWWlZkWTBNK1QyTm5SUFJQZ004bm1hdG1GR0JxdGE4UUNTbmt5V0xDL2hRV1hCd3pIdDVuc1JROEdKNkdBNW9QcW84SGlmSE9XVnJ3VWJHSkRDTFBqRHlicU5ob05vUHpjN3hMa1ZqbENLVWE3QzROcFVoNUFTTDBYcFRSaWRKbzV6eWNUYWE4NWRsYTcvTlVwaDhOcVpnNytvMkdqNEhUVVk5cHl1ajU3QlYxMHNBalRreEZ2Z2JZam1VOXpnU2RjRDBPSS9BMWdsZXk1NndJT3NoS2YxcFlDYkdTRWQrUU11Zm1ESnE3NENtb1ZOZzlhcTV2eGNKNVlKQksyTlF4dU9qc0RRRHByYzZFVTFuaVdJNDBPck93cTViTllIenB0NG5UVVRRNXdPc2NqcGJmVzN2ZHRwYk9TeXlaT2FTWXFYR1BBVEdUU1hRSjFnNG1GSHhDOVZrTkdxUy9paU01Yy9WR1U5RUtxWEdTQmxJbnIzSUdKLytYR2lUMmdqU0RCTnNXdnBPMkdjdXFyVzZJRWRoanpyM2wvVnVET0Z3UmFGUy94VDRIUE1adXBEdFdHM05wYmJwQ1NiZjZvUkhkQXpTNnl6TGlkbWkxa1k0WHAvRjZFMklUc3JreUhibnQrV1N0dmtWb3FYZnR1S3lnN3V6SVNHd253VGtlNDQrNVNsM1RraWwzcmVGaW16Z1plTEY3UWR6VWdoZXoyVERWWTJmYVBERG45TklZZHE4VWFIN0VnMnVvMURyL1dycThkaEJscW5nL2NzYk5JQU93TnJpYnhRWi9FZzFUYWs2Mm9leEVOdDNpMnRjL3JKVG9OQkFsTkR5bWpJakVZK1ptT0JIT0x2VGRCb29tQnpYSWNOS1lNYTBQV0JKODlrMEJ1VGdKdUtaclZqY0s3Z25Ca3pMOUxTZDRNNWRlbWVWNkJtV0tEeGxmeDRQVC9CT2g0clIrbUtKZ09HRVZGVW1aZno5QTdTSTc0SFQxV2NyYnlIUWVhT01iaWFBT1hneUo0UXJKbTJ4MjJ0T3dHcmUzaVNPNytMcnJqL0JkVmVuYTlvNXdvRExueSs3WjFZZ0dURldvYWFTWWJTUWJNRzg3YVpnSnNqRmdEeW9QTnBObldUWVZ3eXByYjlIMmRJRTA5bFozMmpKQnNVUnFDWEJ4SmhXNWtBZGlHTGgxenBhSGs1SUpVSWVEcll2ZlUrMXBtZUxXUlFtc2dwZUNNUysyMHBick10d3ptalVFZG1WcXRFZkpDWjdqajVQOFlGU3VabEw0Q2lxRWtkZlI3ZHRTZUU1YnpyOTM2VnUwUStCbnV4T1QvNVVXRXZWdjdud2NWRURwR2l3R09jVnZ1MW53ekluZlFkUmsyOVI0S1JyNk9ucFo5cGI5dFh6MkpPVE1rMEd5YkFIU1JKYkg1eXlobitYTG53ZGZLbENyREpYdDhVMkhnNW42M0gxZnIvTXJ1UUd2MFZNVkJ5cTNBNUg0RzZ4SlQrOWpQcWlvNVkxZkU1ZkdBSXRDWEoyeURPOXhwby9tT3lrcm83NDZGQ0tFbktIVklhQzBwT2RTaHViSFZQVVFmZFQzUCtkeHBWR3IxT2cwbUxrY09jeTJFaFFGUGNyeEY3QWFSaVpBYWp3a0tQVEtHS2UxTFhBWFpkalpiNjhCVnMwVFQ0Tlp0bzNuZkQ1MWZVWW10OWVSUmdyemhmQmg0SFM2OGZ6enlVcDVhOTNvS0t0ZUdzWm9RakxlWG1rZWxNQ3hVdDJMR0xHcklVZGpidTlVWU9ndnE1Z3FNblo1N0hzNE05Vmo1YjJDTWl1eDB0MFE4ejZvanVhN3pTbmVKM0FxMys5OURmTU4xQS9KTUVsNWdMWnZRQ1VRRm5ZSmhYLzBWWHlZbFcxYmJ3ODNiWmNkYXdQVXdpK1hQN1ZyamVOc2lKQmVKbWlGVnEwYlozbzUrSVcrbDVRdWo4elZWYW9FWjA3RUdMUTcxcllDWHZpakZVMlZRZXZvR0ZKdjJZbnJrN0NGQWZ1N2Q1VS9kc1RXdDJZOVZuTm45OTVyN1ZuS0wvRTB3S0ZWRTdRY3NDeEdXb1ByUjZsZko1YW1CcS95Z3lLSm5uOEQ3RzdtS3BhWWtFNG5BTnorcjBPYWU5RXA4OFRZTmpXcGErU0czZzJXcmtndzFrMkZnOTVCaEYyN3BXNkkwOHVxT0J2WjZENEh2R3MrOENhR3JYM1FLV3FzUG9ucjNobHdRT3h2bWhXN2FvdWNveUdqOVE4M28reXFKTFBxbVVhTnNCRmJYSEhnQUNhRlcvdkFiWXNJajN3QWN6VGxpOUcxUER5azRpQWlWNUNLalJmM2pPZ2NkYTRYaXpwS2pQTWJ2d0xNTHRvSzhXY3VwZFhnc0pPV3YxRmlVc1RvcCtUOTN1emI1b0UwZ2VGN1hPZ21LcEphQ05yYlRQMTdPc0d6VUFZWlZTSVhzbEJnc1h3K0dkR3RkZE1xKzFpeHBaNVVGbmlHMkpXNyttUUpYMzBQaFlmZTJmdkRDOG1KVnI5c1lHYlkraVI4UzU3L1hZOEhFcDdEWVdBblBkd1JwcklRYXFoT0VneUFzSDJJUFArb1RWTzhIRHQwQ0ZjTGl5RXhpc2xGRU85OUw3dWZnVVJ4amVFZXFoWW1vWHB1bDNFYXJkOEpqbEZSWDJFb3pLVnN1S2FzNWVSbzVqL0I5OCtrQ202K1JMdnl0OU9aaUppMEJPaGxCeWdpV2FuZVprdWs2QUtKWGZHdzFZYTYrekxTOUFMaVBML2s0dTlVbk5uU3hGL1pUNGJSQ2toUjg5cCsyRkRrQmVtZ0JWRDdLbHZMVmNKWHFxZEkvMEdWN25ZRnB3VDFYV0FQZHFrYzcyeE1HRmx3dTFTMS9SQXhKdkN3TEhPZnNQaU5EbU5mVitKMW9kQlFQOUNsMHlWV1ltOVVKMmd4cVlkNHozZnpaWEYvOEszN1p4VlovdzdmRzVxYVpqTjVEYjZVUkZZOEUyekxoRVN4TEZuY0F0NGhxMFBGZ0ZyT0JPUEFkbE5GWlRIeDU1dWNNNkhVUHh4YmRQZ1dhYzRHYnBwd3BQcWVJZjhINlFxSnJOYytiWm9TY2VCcVIxUTArVkFjemw5TDlLZkVLTnd1U2REdFhYV2crSGpTQkxOOSt4bDBJU2lxRjNwS3puTk9RRU9jWXJEd3p6SzdUQlJjTTJ2VlVzS0RRMXRnRGp4ZTdaZVhMci9IZHZ5RFBHS3FzSEFEWnIwOHhUdXF5ZHNGTjd3ZGNXMGc3UEQvT1RnenljeWZzOWN0YWFlNzhON2ZBSVNWM0lvNHNGdDk0dmdnWVloaUN6UENqcXVCbVA4ZjQ1eVhieUUxdnc1L3RBWTVGWFdZV2lCY1RmVEpZbk52QWtPYXhna2o0TjFSVXBHcTQrSXVHb0NVRCt3NVhHYjJ5aHlnUHg5djcrZ1NsRmdNKzlUTGFGbEFDUG5PRGtHS3IvT0xBMDhpcC9nQ255bE5DSVYrL3pSUktOTjlpV2kxZk5QY1dQWnlQVmVLQTh4ZTRUWDRGRGVpeDBsV2JkcWV2cStlQVN4NGNWS05MTVhLSEFqYWZwSUlqM1FINWFKQ0VPaUQxNGg1L0VoN2g1U0hUQ3hLNFA1anIyemI5d3FDZVl6T0xqTm81ajlnVGVCV3NPekNXMjN0Uk9BZzc2Y2lCV3BuODZKcXlwSnQzTXhKYUJXdXJvdVgzSFlOQVN5ZHFvdEQrWXlZQWtkbS80b3puMlpxZkVZcm5rbVZ3UFB2b0E2VFpGK2k2d2FWdlgzSU15akZETzF0TzA0U3hBM09ZUU9UQkRpTHhEQnRkY09Ic2dNYXFKR2tYN2NNWGJQdkMyRmJJL2ZYcjZ6Sjhrai9OZmdsQVIzcC9PcGRQWU9UVXJqK1RLSldrWEZlWGJQSlBRWlVFbWg3RXlPYWU2cXdOeVU2c3pjdzRFcFo0dnI5OEt6aSt6WE9nUjN1bzBWU3hqWjR2N0c3ZWtDTGtEZ3VyM0JRUmI2akovUGJyY3l3MUczNFpURlZMRDJjQndYTUozSlBKZmdtK0g2M1gvVmlMSVM4THFIUmRMNmJmSDJoK1dsR3VTVWlsVzhsYldPTERnV0FoS1Y0dGJDNThxZEpVbmd3enJUT3owVU1sT0xMOWxVSUxjTWc3dy9HWHFERmhEc1JwVnNtRFZucExZMXQ0MU9KQmhiMkMyMnFpcEZXQWg3by90STVoeXRadXpUcnhwdVdoUWJhTXFBcFFOZkdrZ0ZLbXUxSldWSkVCY3YySFlRM2toUkdyVitKK0t1SVBBYk9mKzJ3aG5kcDZXMXJzWXZYVWIvZ3FOdi9CVkZLTFlnTHlhdGM5SStCUWlSTlVuWkFWbU5FcmlFb0F6bHMyY2lkbFFtK2k2Y2wrMHpxcXdwZXdXN0ZxYVhQbGZYWG1DRFQva1U3T285cG1wTG9UL2dBN1hmU216WmNrNUZYTWRhNFVRNlRkaEZNdXhLYUFvK1BEVXpEYlJ3NmtMdHZRWXNuY3YvQkYvdk5Xb0lvamFZNVBOUUNTb1pRcUU2UFk1Zy9SSlo5cVJiQnBvWkpJTEJWSmN4dEpKeGRYVzFtdFMwZUNuSlVuL1JmZzZ3MFRWUWpxbjVoQWlNeW1wcTR2SkhrNUxVOStIUm80TnMrc1R2RC9vYVEwN2NWV3VwYUxsMDQ0VnZuaXFSOFg3dUNDaURoQkU4YVRpVlFqSk5uWEtjbmhRc3ZMZjhBV2p5WktyaXBsajhBRERiQWRlemsyV0tFVDVaL0tPZnpId2paT3JvLzhMTUd0ZisxMFp1QUxEK2w0YVE1N1VPcFRBTjFzb0NXUE9BWDI5Kzd1MHVwdFhvWWo0VVI5UjRuYTFpNC9ZbENZeTQyWkRxSlB6a3Z6OVptMFVRc3VvVVppZzB4aUhqVW1WRng3WCtoT25NVUxuYyswSk0ybmJNQmNVbm9uSTM1OUVGV2tjTGdhQXlJRXVTUnN3eWY5YTVMMFMyYWNPalQzSG9wK2hHL0d5aGdZdzlqVWdSN0JQcENDZU5sS05ZV1FHL3JIL01Ic1d1UFRnaURTZ3orallpQi9yQ1BlNjQzVFRlSlN0Y2Q3VyszeG1vVHFscitMMHlFdFVrZk9jUVd0L3hyZWJLWWg0ZXIxZEJjNzhHN2NIRUYvU1dGRzdmTHJBbHhDb0lGekFpLzVuT0lNZlBIeUxMUHF1RWZWVzZERndqVmJ0ano1R1FFYzU4WGZZRVdVNnhpTkFNSHQ2N0FodWVuUnhhV2tGejE1VzhaQmFVTU8zM1ZGSE1JZHJDb0Vjd2ZhZlU0bTh3VVlQRHFaVzlFUmNsZzBRTzVnK0t4dWd4UUxBeGV4V2FSWFp5UXVkRzUvWngyV25TU3lHRjdNYk5uam5rK2lkOWxDZzlDMXZMUHdHNmhZQSt4OXQ1ZzZ0MkIwbmpYaC8xMHZkWDM0Z1Exdlk0NXlCWHRnV084dFFNZ0lEVW1oN2VPRnBBSUx6RjBPUUpZR2ZtYnA4aUNtcjhqK1p4cDlUYzNWNC9xYzRuNk1mZHVuMnVmaEhkNGNjMTcycFIwY3hPRDh0TzE4U1RwdTJqTk5zUFpvYkdrNEc3NkpYMDhXL3lVUC9LNVV1N3VUUUozeXdCK2lxeCsxQ25rWExZZmtNdHN1a0xvY3BXS0MzclkzUTUzNkRDeWkxM0tiWTAwTjZmTlpWekhwZ0VFbWVhQjJiQ3BzR3JuWHdqM1pVZHFUSUJLQkNHVUx4YzkrbmdhelJiWCthVjJCcDZwdDJ0ZHpTV0FnbFJhb0lmZ0t4cjd4UjBRUldsaHZqVk9GRE1YNUxaaE95cVNVTHVYSUhWT0lER3FOcWc4d05CWlVjRWIvSE9xR0I5YW1QNmNJeEFJRGNEZUtqeVhvOTVWbWFDWjdEOHZSaTdRRGJWYmdVbkdIS2RTNE50ME9NOEx4bUs0RWVjS1E5UklraURqUXk1MnhWL2dqNWhWZkJpYWhQa1BRRUsvRGN0S2NBVUdKOVhPMVdSNFdkQjErU1Bya2VtVWEzRUZ0TG5sQUZKTjBYMFhkTUJTSHhUQXdKMXlnYnB2TTRnQnFrVmhYdE9nbEFESDU2eU1tMGZiWmNEZzJyd2l3WmpnNjZ5S2ZDaDl4cWZaeHJSWUxOWnRsUnlxS2tQM2hCRVUwT2F4bmtrck1aVVVHYlJsQTliNXZJcnE5d25GYUt2Vy9XVXFzcUxxWHExZExTN0dKOG8yRkMrMExBZWtCaEtEY1EveW1ka3NvREpKTTB4VEFQVWlIaFhXdUpZYlg3eVFmN2NoVHZhOFc1UU54WFc5eGdreFBrTHFjUS9CamlaUWozRE5DdEo2V1hiN1JkaXI2bWN3SkMvYmFCRjhVZURVU1ZpY3VxbUxUY2hTa1hqMTc1ak02T0wreFNma2paZE9YMGVMSUk0YzdVNGljUUtGSjR4NnUyb3VybmFXL3Zac3F5SFNVWDdwdUx4dVFyd3RHY1lYTUMwemd2NGNQc0pVMk9neDhGRDFxUzY5R1hXcEZHV3FSQ2NCUUsrOWtoL1RKd08xaXZDbG5veFFvUFhzTXlFTDF1czAyTWNhbit3SXFCL2ZLSkZkbVhrWWtKM1A0bnovTitFMkorK1JsejcwNXpZcVdDNXRJWHdtNko1aFVaSUVadi9ZS01uemFSdzlRM29zSDVMa1FpcE53Mkp6WC9kK09EcURUaUE4ZG1WdzdiZmg0ZnVsVWFFSnJyWWFFdTFOTE9nL2sxWXJwb3htUG5VUnRoQ1lOZXJBdzZldnBZM3RoM2ZMQ3puaHUwb1ZEWTZFbTJhb1NsMHVFT2tXSXVoOG83Uk9kellkTFdSaVRtQ3FIZzVveDhLWjJJMWh2ak5pY0kzRCtXaFVPMW9wK2VZeE91OUpOZnIyQnRxOHJEd1pWcFV0amhQcDQrS1ppMkJNV2dlOG5uN0xLRkRvcFZERWlBUUdOUU96YnBVMFhxNHRXaWswSFVhNXRTaXpMQjlqb043ZWZudmdUMU9nTGg2SElieW1rRDVVYUhlMU5MTDk1d1A4NEVlME83R1RFVklFSVY1MldBcktKaUlQNEtKZHgwTE1YZ1Z0UU9ibldNV3dUeGlPYzl4N1RHT1ZTOHRFOGwrbW5OMm9ZVzYzZ1pBdFJRbDd2UjBHUUNEY296Ym8ydVFXU09Gd2R5NFlib2thcDhRMENua2l2Tjkvbjd4emk2OGxFTmVyLzYxVnRSdTU3ZnlOTk5PbWJaTmN3SDFCRlZPWFhKSWxzbzNWcEZhanVvNnJrWnhzSUpDL3p4YnRTWVZrVWdsakQwZ2R3eVRxTlFxUlhFcm5LVWVUTEs0YUNCcGtIK3UySXVEMlRxNmt0S1JRMW1JTDJhNno2ODdIRG9YbXBTaUNEN3lYdDlIMjJEZ3NqWVZvSW5XUEF6R1hZZjlrZTFKVGpSY3BJelRHaTFCT0JTSkNyRS9xVWNEYk5aYUJWSU1HNVNIdWtLYWRYdEMvMk5NeDA3RDZDMzA1d2Q2Zk9vazlCUjhPYmk4OEF0aW4vSVBmMHY4djZkdWI3VklwTnZlLzJJdnR6RFhrS1RMK2YraFZ6NGxXZDRYa2trUFc2RlpNNVhBRE1SeDY2V1pXN1UySk1TclljWmJPeWNmWjJKb0ZnYnhUTGR6YlJtKzd0Vk9RbDIvZUdhemkvNnRDaXNxZDFsUHZBVWhacG8yaHFVcHJtQmhYMWNleUFRZmdpZjZOQTB2akpUbHVyUisrT1RnMTF4aC9odzkvK0NWYThuQnhvL2JoSzMyQXhOdTR6YUtwWHFxTW40NXlyZDJwTDh3UEdBeVl1dEhYWWN3cmJ2c1QrcUJCc0FMVHpVQW5YNHhXajBsMmFUYVFWRnBQR3FYY1dBZUNkVlplL29tT1Y4cnFrRnBCSVRkbTZGaXoveU9DcVBLRDhVOHVGQ21zeWs3VjZORUJ0R3FoQXcycC9nQ1dyWXh5bWFBOUxIaHZxVi9GNWR3RXpwRUQ2Ly9aNndscGl1SU8vcUZRY3ZLck0yYVFEZHdxaDBCbVVGbU9jYnh6ZmhwNVJMdXZlTk1odzh3cjlxb2Y3Wm4vK0Nid21qbkNwWXFPZ3RFSkt3d3pQNDA5ZlJScjREcXlCRlBuWGdSbEh4UDdFYVFpb1RScGVTQWxzQXNXOWRpM3Rld1J0SC9oZ1VuL0tkcnNxMUl2M2pyaWo4OW9yazFqYW5UNmJ0QmU1cCtMR3pUU3hOcklrdFNzajhZT3Y0djQvem5uWGQ2QTZhRGwzZVp4RVN5TENFNmsxVVNSZmdlUkdaWUNtcHJkSUhoeGNMaEUrZXZ1MjNQRXJJYVdpZEp2YVNUNk1SQVJDWC9BdVVlOWxhQTJLeGNCL0FKcXpTN0NCcEZHcnpRN25ZSm0xK1VxVnRDKzc5ZTBFM0VsbGVhS1lUbWdOSU8wa3J3TXhtelZPUUJCbFY0d3kwME9rTmV4Snl2Y3k2ZmplZElPS0xIQ05TZ2FUTFNzTkI3bW1IcVF0OUhJaTREOWZackpyTjhpN01BMjdnSndTeUFLMmk2dUFJODNVOWNMNU15SmljejE5WkREdGpNVFRybDhMK0M2SWNJaWZQNGZXNmN5eC9qY0ZXUzlYVUhXa0J1U1lSZmErRzRMU2JwbHhwRjhjL1ZBbExhK2VhQWRKbExBanNMLzJMTXQ3bU9HZnhzeTdYRGg2UFVKdkpiMGozeGhjN3BtT2ZHdVZwMkdQWVZybzRybVh3Q3ZzTG5La0FudG85NUtpRHc2SU0zZFhsaU9CSUY0NUhldE03a3J0c21Cdlc0VitYQVhuYTRrd2IveTJ4azNqTEl6UllSdGRaV3l4MFk2b2x1RjgwU2V1WFozV3N4TXVNQ0g0SDB6NXVrZWZyQ0NQajc1ZEJWOHNlOXVrN09QNWVSZnI2SXJkVkYyWkFMakZzZE9IRThJV0UzTFk0VE93a3VKblhCeWZxSEdtTlFGOHdwZFg4SFdkK2FpNXAwTlNKSlAyVnF5MTZZTjdGV0RpdjJhMytOZGFRRm9nQndIeXRJdFVRbUpWc3ZNR3Mwc2lKdlNoczdwTVRaSmtTVE1KdWRyK3JXdngwd28weUwwaW9MYWFTOW9Pdm1BR0lBTTEwR2F6QnhUUWpTRkJKendCVkU1K24xSDI4M2FUdzAybDNqKzQrS00xNGRIMU5YZFJPYlRvN1hzc3NFcS9LMDJ2OGQ1NFRKT0NQdDRPRVV5Y3d5Z0haMzdkd1YzclpaZzFrQVliTmZJbkFpSWo3NEY5c0MvcU1Vd2IvRngvbjhaUmFzMzl3a29ZK0tMUmI0SC8wM2ExWndQbGJ1aUltZ3AzVW12SlJ0eEc1d1BZWmlPR2dETW5rbnlqY0VSV3ZrTnJKam9lV0VTSlRZbXEvUkxlQ3FIUWowT0Z2bUR5clpSTFVpVkFsUGZLU1oza1l4ZFJGTW5Hc2FjNjZHaEh3VVNENXpoQnhxNEJvNmNHSDFDeERlTnlJdk0wRDlGalBXMnRrWld3NlhTK2ZKZUdRM0tLS3VPTy91RUJROXlXcDNrbjVMMUdubitHK1JwVzViTGdiRTFyN3cvM0JhemVSWEZnSDZEV0J5OTEwNnAwakZlVFFNalJTZWdGdnY5Y0hiTEp4VGNROW9YWFpFOU8rcUxHNnd2VkpiMXAweURXblJnaTR6Z2ZPSm5IS3pMVDJZb1hMc2dQMDlwMXEyU2lFdVdJcVplcjVncHgzeGdxNEtPVWRlYjBuSVh4NGZzQVd0ZWwvSVovbDRRZVM2SHE3dG1vUkFuUG9nTk1FeHdwSTVSb0tvbzdVMi8xc2RyRFJ3dGNDZ2RHYlZhUWJCSTk1MnB5UnhUMkRnRU44VEJ1VUdNeU9peVFaR1V3eFd5SGh5dHUzY3B2SFVrREQ4b3NKREl5Vm95SEYwQkYxblVWZnd1ZTJDS0FhemdxUmxUbDRMdFh4dmhKbWZQNkFObjE0OTNIc1RtemZ5K1N0K0NlKzQxTUtBTVA3L0gwR2RzVVhidDNXYXRPdGRXNUZKMnZoUWpjTlR0RThpeGlLa1p6Z2MvWnc3STczbUhKTFNKTUhlMzR5Ukpxb1EyaDBZV3RMYkhDcjNTVkIraks3anpxV011eVhLWDllcDE1bi9WbWpaQkQzWTZaWTYyOE5iZmlYSUsra1ZnSnRFc2hJSGJnc3hOU0VteTFDU3h0OXk4dGdsMlJvYmNIaldxYXY4aTYxU0pCZm9XSHpwVHhHZkNVKzMyWEJSNEtZNWhSajFRajBvM3lyZGNkek5OOHNPSHk1OWgvbnl0K0Zjb2pxQWJzK1FQRDRXQ1MzWmJGYTIvVDFKZGs3YnFmVzZpTUtUTFFyeThSQzlId3pvZzRNWXVmVWxXYmxzakw3Q3kweW5hdU04Y3o3MzE3VkhmaGtYMlE0N3U2TUZtNGFMcnVuSHZuRTlNRXN5dE02OWxvY1dCMHppT3BReGhmWWs4Uy9HL1I1ZHlPeE9hR0F5cHkyeGJYK2Q2VHFDM0UvcHUzbjR0Z0lRNTdrSkd0Lyt4MVUzQ2F4b0dOU2hMZGZvQjR3V2xOR2YrRWlGdmgwanRJZEhGRWVzdmwxelV3VkplbUJ4N2pIdVhNSGc1RTE5TGFCY29JQXQwMzVoUGxld1dqb1p0Q2RKUzNzYlkvZ2doN0Uxb3diNG9KcVNtMS80clJvcnNZVStlVER2dWZSTFFjMUlnc1RVWnljOWh2d1dYRVRSNHZTWitIQTZBTElidG9NZjQ3djFVODNBeUhIOUg0TDIzajlNeURWN3dETE9hSmw0MFN3WTg5L3RkZlh1UnNmSWpYUldaT0kzTVN1VXl3R0JBdVhUd3lvV2p6blNQOWs5NTY4cTBWTVBPTjRZQ2pWVTg3eERIajl2MWo1Q0I0UHloTnhwdStXanFMNEVsbW1kTHRZSU9jMlgrM09kVkxzSnIyREYyakp3cmt6RzZ0MWJPSXlwZXZ4azUwaUd0Zjk5Y1k5enBMTjFKci9kRUkyODRUamwyczNCM1JEZHhhM1lvTGRSV2FnSmUrVHArbmM1dTAxU2x5QXV6Q29RN3NWcG1HRkN5MWRlMkI1c05LRUZ6Y1Nsbmw0VGlncWJmcms4THdMQzQ0VzdVTlA5elk4dFRKaEtPaldoV2szanpieEJZTG1WbEtRS0dsbkVRL3NhT3haaXFicVozTEozTmRrZWdMclRvaXNGdTQxYlVjdDJrak1uK1JWL2FqaC9UL2dqNEpzUlFWMlJNREQvRTVDM2xoTDY5dEdMR1l3Rlh1M0VJM0lYdm5FT0RydmU0L2RYZHBPM2VlbzgvMkxoTFRRSEFqTDlET01CYm1OaTZwQVpuSmI2L3VOQllnSDhHeTJVY0VTQVU2ZG1Xamd3TWpkbWRyeWRUN2Y2bTBBeG5WV3ZjbVM4eWhrTEdJSHZQSDlybkhqK1pXbVY4aVM1WGlLYnBWT2V1YjFNd1ZZVk1VQzk0SnZlUXgrWk1UcDJhclZVektnZzhIZ2ViSVZlRTVQS1ZmN1Y4U1NQeHY1cXpqUGkxQXo0OTBjNkFYd1lwRjFnQ0MremhrU0VZSitJd0I1QWJWaTZ5L2k1bnN6OVZDRVBaVGdYZHVFbEdzVyt0Z0NVSTI0am42ZEF3UG1SWnhUNWZnVHZxdUVJWTRpRUZsQzBsbVBhMFlLYmF2RGw4dnJWUTNDelE0QWtEUUlSdnpXWm9uckJmYm1oZEVvc3hqN0t5L0lyektRUGoydVNGbXgzRENqZDdmUmFEaG1GOGJ2RVVpVGJaOHBjR2lQRUYzNXl6ai9CKzZNZ0NwNXZKYVF1cjg2SWgxWEYzYmZETTZLWEEyL0pQdDR3bytSRkF0L0w5KzJIWTRDTWhaREFTTll0dVc4cE1EclduL0RxS2paeWkyZjVpRkRsQ0VXZjN6STRocVJtY2RydDE4ekZtMEZjWVRUdjB3c1J0RlplRm5ZVUQ1MnhkaFpoanZiVmJvc05FU2lWY0h4ek1DSnl0d1NFdTBZdzF0M202eTRtdTNpOGt5OStWbTFqZFVERjQrb3VncGlESXNST1Jsd1plUHdXcEtRVGEwYWJXM2s3dXRVdFk4Q3QwQWFWMnZHd1o0ZkxWV3p4RDk3ZVR2dHU3blVMVUNDc2dkSU45UktzRmJnQTlUY0c3bE9tSzVrNW1TWHNaVExWYVI1WnhpTmpLMGYwT0xETXI5SVYzYzlKUVV2K0IwaFZsYTBkSFI1Ykxab3NMNnpUOTcvQVpLTjhYb292eUFtY2ZQb2k5bG1hTXh6eXE1NTJaeWFmbWIvRkEvTmZVSnVQbXZaUWhYSFRtVVBSM2RaTWd4dVc0NFBOMFZ4SkJheFF0bWJiUkZGRDVsU09oNnlLSk5rOTYvSTNGQnlJYk1rZEI4Qit6VU02RWZoaVF0eEtVdS9qTStIYW9GMHRIS0RSbFVZbnFhR2pqc01IcFBrekpxeEUyYXFtYVdiMTVoZHZNSERkZzMzaEtDcUhZSTNIWkZ2NFNVcy9DZkFyV21OblByQ3pMT2lHZEF2a0UyZk1iZUx0dGQyTlluSXU4K3BPWnhpdHRPL25ycTdnUzFWV2FMWDZzeEszSFhwb285b01YN1V2dDNJRHNnQXRpbys5eEpNVDA0WFg2SlJFVjV5YnpIZS8zcXlxMVM5bWtyZGpodVNaNmxqUHBoUW5DYmszZkFLa0grMkVYd0pYZ1E5ME1qWXdHOGl0aVg3dGVka2JjT2ZGa2E5eUxHU0dzbTIzM2p4aGRHSlE2Q29aaDlBRkQrZzh6QTE1eXc5YkpCdFUvUjRZZ3hlc09YZG1tM0NYR2Z5cjRhYlV4NnJWQWlHU0hJKzBEa1dMODBIcVhsRXNnTVd4RlNaQ3Frdm82R0l5UDQ4NE4vSDJ2OFhFVEoxcHdXZzVKNmtjdGdPTlZYVUdtR1N6SVhGeDkyZW1wN29ncDVRNm1URitaTmFUSndrbml2ZTJSeUVicFZVcTB6cHdNaGF1dTFqbVp1S3dSclE0b0gyOFIxa0hZYzloU1VyMzJNU3NUNGExK21Ca3gzcXBmendjSWM0b3FEektOd2ZaZzd3L2hpQlZ0MzZKci9qaTdndHZ2YVo4SG1DZ3F6andpRzNqNFY1d1FGT1lJVDh6RjkvWmY5VlNzWWl5MDZPQ05nN0dRSDJqZE9hUXpmaFl4b3d2MExNNXVxK015dnBRN09vbFJkd29ESlZ2ZUN5Qm1WalpMa0pNUm9ZYzAxRVNSbTd5VTMwZmNBdUtaQ2l0WjlTOHdvK1Nveis3Q1AvZkV3VzRDdUU3UFZ6RGE0bmwzMDBkRW1zY0t5Nm8wR0xlRytYOExLSkRva0hmMW9OUUNpQVBsdzg4Y3E5WDg3RnJnV3JIYVNGdmxnV2RTWDJyN0tKVTFGNXZ4a25uK1dDK0ZVZ3loUkYyWnp3OVdzMUVNVWU5TkVmUmE4Wm5JZFUxYjl6WWFqU3Y4eWpzWktCTEdEbUJYMkd0Qm5WY1BCUzhiU2tzUzZDWWFTWGRGQmdWOWxxZ28wMHUyQmtIbmFIR3ZKYjhsVzFtRko5NGtRamVLbXdlcVJTdWVIOXp0WjAzMnZkNHBtVURDbFZBcms2aURtaWpyUitacTlITVBHWDdWelRhanVhSW5QUkVNc2ZvREhJb0xOekVCSUMxMjJWRkpPWllWUWlpSTlTN0dHNUJpNHF0NkJrMXcwaS9DOER3R2JlOEZrRWhjTHQ4c2lqU2sxU0hMbzh0d0l1TUZCdVJzV2ZKalA0STh2aitCeHBCRUFMekFDVm9FUkZUWllJRncyZ29qZ2pyOVlTOGlsMk5vNG4rTHJsYXkyUDViYU4zc3EzQjNJU1UrOHhPMGFaVmpzSVJ2Vk5DTDNnN09ySG1xWXAzS3UrQ0hnTkVXNnlWL1ZRbVB0ZzJWenZRRUNYRFlNN3A1SnVnekhrMjZxSFBTQ3FyNm1vWG82L0owa0srUzFMdEVOYmlyaHA5TElaVXdiTWlaV25jbUp1VU1jTURhaEY5SjlDdHdsK09yRTVPU2hpOUovUTdmOUM0dXY3SS9qdURlNU9FTTVMTXVnclAycFdnYUI4bWdidVl4bU1SZGlLUUNESzI3cWNaQU1IczVnTkxkcjZQQU15dnBVdEhqWkdHaGl1cVBMQlJXWTg1MVZ6K01TUDJZdTVaV2J5WGdLVWJhQ1BueVJ6OER6MDRDN1c1cWdjazBjZVVnQWZJQkY1QkYwWTRCUnNiNjh0dVd4bXc0MS93b0NIUFNGTGM0cDdnNlVqRWVTR2NDVDBFVjJjZ09URzhWaTFCdlVOR0tNeHczVE1xVU5tTU11NG5OYnRxeE1IRHJwRGVpZ3NFeU1kNG5CMDFHSkRYc1EvTm1tcHd6SDZiQm1XY2ZZZ2h5U1RxUXlVUWxOWm9Bd2VzcVJCbnM5TTlDYUJONHlCc2lyRlZsVElMTW56UXQxeHVzbUFkRW1jSVVEclVWRFZtUGZabzQ4ODZ1YXBTQUQrLzNBVTZzOEUvSGNlTm82Mk0rcU5BcmEzZ3k4WDZwZjlRU2kxMFQxNXQ2UENSV2hIcEI1Qi94Z0ttOXNmTWd6d3FrTnFqRzl3Rjg4YU1VbUNQaFBTNWw3b0RGdkNPb3BnWjhoNEZvWmgxZTBOV3JRbU90Nk14dDl3K2doWWV4RkJLY2FlNEN0SFhHdW9zYk9kZm5sK0tzZE1FUGxacUpDSXYxYjdqQy9WNjBEUVVzdlBMYXRRUSt0ME1Hak1TdVVaY081dHZSbjJQdGFadG9TNjMvQWZBRitmSnRBdzBtdGp4WHJwV0x6b0RjRkVPS1NVRkRZOEFyR21EQ2NjU0Q4SHUrVDgwclBlMTd6RUFQaWN2TlhxL1N1ODZCZ2RVcHVzcGUrd1RqSnpLOWoydkNLNTFINjRVU1d6bFBCcThsYzlISGRaSVkwa2wwZDhURjFxaWVnZlZRL1B6SjdBQnJZbVgzMGhzRS9kcUQzQmdMMU9FVWEzQk13eFpJTWJSR1hKOEgrckVlS0pYT2J6cTdqTzdUcEFBOGo0UjNOdHJXSDZJT0drUnlMNklZd3F0Y0tSK3p2aFdUY2ltVkx5UGcxRjdUYTZwVmhTR1ZsU2I4bElXaFRnOWdzeVJQSVMybi83ZFhiTjdXV1hGQ1hWUlJMTWVKM1h0cTQ4V2U3NlVoSGNLbVpZRXhqSkZnRDNxRE1uK3NpOEt4UUxLY2tvcjhseUlEQUpSNDJPWDZmR3VsQ2wxK0Uya3lFM1lKd3owQnVwRzFJV1pGaGxIVE91VWZadzRFTWNCeEgrWE1TMUZIdjRib0VEU2pvV3IzTGNtRlJHd0FTMW02T1VUQlJucWVpYTcwM1AyTjRuSk9rb0lwbEcwWEhzSTNGTk5oZWh2c2REU21ZM3YrMENjTDlWRWtqV2kwOFY5ZUkzYTJxb0R0b2pPbkI3UHJ4aHR0UmIxRTVmMmIvSWhBZ29ybVlaOUdkKzNlNGtja3J5YnR0NTNzM2xRSjdKcVNWOUFnblZRMjlDRUdFaEh4VEppeEhOcFU0UmNvRDBxUW95cFRGNXlPM1dtSWFUcGlqbGxvNS9zbXM1OWdTTU5mZ0xDNitVWFdibEhDVjhPR3FJcUQweXRvN3ZONEhiMXRnMENIOUlZZDk5OGZxNUdxRXkyc0l6NWxZT2VjTlRJNmJSWDVBTHZLWHliUkRZNFBUN1ZET3p0K2tEMlIza1JCYjhEampPZzlISitlNDhXRXRJYktKb1EvZlA2Y2sxZmY1aGl0M0k1b0dMczZLNFhtTzJNeUVZYVNCMkdsdnRhWU9NdzBBdGlSOXEwcm5uZE85RWJKdnhCcnV2T3Z6OHpBNmZlc0hiVzk3UkJ1OU53TWh4WlpuUEhaR0NCalU0bjFwNWNxcW04SzJ0a1ZHWkFHU0phTHBtTGtINWtJV1hkZWZOL1U3WG44OWdKZnRRZnhPRUs3SllwamQvRkVuMnlCSnlqSi8rMnQxVE1ENmZVeFo2a3o3SUtkbVdmbE5OL3l4MEZHRTk2M2lOZTFPQVEwaTRHL20zUEttd1dQNnMyQkkvR1lJdTZVSTU5bjJyeS9wSHRORmNkd0o1VmNOb2V5SmlxemVxU1doaFZrVDdLTUFITjRTR2RaZzIyNlpuYWtsUWxHUE1NbkxoZGJMU1E3WTIzTTh6ZnhVNEZySDNJdnZhdTFaTFRhdEo1TmVWT3I2cU84ZHNNRzd0OHA4MzJiU0dqSUpEaEdKWjc4OUIzbjdzQWdrc2E2b1ZxTFQ3OHdTMjBCQm85TmRqT2hSRzF4SWpGa0svOXNRMU9NVkJFNkN5aDExeUlXMGdTY2pOOTcxZUhEU1RTRDlWN25nYzNjVTB1T3U0bEpQUDBtQXZoNi93N2tZSTZ3WHFLZjhITUs0Mjk5OS9OWjN2Y3BFV2FTeGhicHdYQlBKOExMWm53RWI3eGM5TXZKME5RK0lKcnhJMHhpNVdXN21KdUZLRC8zeHlBb2Q1Rmg2VUpIZ09NdFJzNmZhNzdXNkZ6Q29GQjdmNUZlZ2UzZHhQS2RUMEIvZ2lxS2cwMmU2QzBTTkRJdkpybnNOTmZVOUR5OWp1ZzBIOUFlSWx1ekdvY0R4cVRENlQxT2tPL3dyaXltTS9oemFKeGpuaTNlUUViRjlhczZYVGtKdkRGL0prRnFwQzlIeG54WnBDWGNHODJsYkpsZ01kYXY0R3NiRDRQd3RkUVhiL1h5d283bHBqTUZJVFh5NUpvU3djZFJRalR5VVJ5Mys3czJkS3B2WFFZQnZwbUQ5VGgvazM1elFUakQ1ZmNnU1V3Smc2MzdDNzBQbE5weTh6WUdwc2c4WXNNdmNJNXA5L05RcUFlZWxYMi9lL1pERWlZQ0psVVNqTjQ4WXdoRkpQWmhoWVp4RGJOMndRTHBJU2t3OTZDVWh2eWQ3WmVRV3RITXJaRVhrZVlzRFJPc1k5QWxQNUlKR3drNE80ekVoVWYwVElDYWdtQnNSdHBrN1JZcjBJZ0h5bHRPejk3KzZtdmZkQnBsRHY1NmtVdmtiMlB0SVRLVS9yeDRZalRHaWJwek1nMloxaFNKZWdYcmpMZ3BJWit5bVhLNFFVMGdKVWs3bDBvVXU4NWdUeFBrVjVjdVlodms5amR6dHQ2QXhvejBRcFhvQzNMdDVkaEhHSE16WWlUM1E5OGRYWWdxaVlHYlBDQVMwQVB6K1JDdWlTTU5FVW5VLzhrOHJUZnA4TnJ0R2dENUtSdkduOVo3TVV0V0JjeUlPQVBEWW1WeklOemdlSlVuMTNoQjFFMTR0dk9FeS83R1loaVcycGEzVTZDTzdXVXA4RGk1azY4bnJrcVQ0TVBGWjFDMjIrYk41VTBxVldIY2gxVndWZlZ1akVvN3pURFFTNEVtYmpHT2FBRjF5Q29xLzhlYktZWEhNL2Fyb25YSWlncHhqYUE0TFFKUE1DVzJKN05VemNCQmhUTEF5ZUNjejMyb1k5TXQyVHlVYjBoNkpFQXd0VlZ4MUVWTGpqNDdITU5UWlVobGVvcXZMTk5rK2Yxb3JFL0p0TnE4YlFETnNPZDJiZGhVRldtbXJGcjkvaE92eWhudDFPcWpnYTdVeGFYSUszUHJwS3gyNDhBekYxZXh6blZtd0hqTnVqd3BQZ29oalVIOEhKaldFTndLTk9jVXFKOUZ0VjdzN2xkWm54TUZqQmVSZDAvVG5mQ1BSdGtHOFc0U0xOREdETlRCYUkzQ29KZDdKZjFyZXpEYzlmM0pBRkVnMjk5cHBMWitaTWZiK3N2TlI3WnJPUTR5eVIrQ25ySkpvcTVmQkxJc29aVjZtRDFRY09hVWc5cnRRL1lqUnZnN3ZBdklsOEJFMVBEQllZeHhLK0J1bVhiNXdsQmJOMWg4Q3ozOEZxcXMvSzd0MFp0U2dkZFZxVW9KZmt2RG8ySzU1c0xNTzkwYXBqZ0p4KzEvSjM4dGlhTFAyN3BvNXg0amJnVW9mU2svOUFrdVNNaXoyekVIRSswMWJFTHc1RHFteTJOVWQ0R3Mrb1Fqa0ZCNG1JZ3RONVZCRGw2dEV4KzRzNU0wMWdDeFk0MVpsRVNyakYwdjlPMUhuM0VteXc3ZEM1eVprQmNoK0I5Ynp0WDRqWGVDSFljbFZsSEhkb0luSTRKbXNXRnM0S2g0dzhUUkFlTG8rY0J2TkZKelZEMi9zN0VHWkMxaEthblpVN2xnMXNFZ1pVcEo0L01Ba2lSeTI5eGVpUUkzdnpCb3FQR3hrVEpqZzcxbDVOL3JTQnQvZWMwTWRuV240dVE1VnpXRndhUVU1RWhJaHR1Y3V0SDAyZVJoNFJEQXpZVkxhUDFMbWViOWNnLzIzU0RLMWZ6Wlhqa0wvY2VkV1dtL1l6TlBNd3pwc01hSzVtQk01Q1FVanJaelJYdStWTU45anBuTU9ISzFRQ3NsRE5mejNGWHhJalRlSE9BZDB1dkVnQzdZb2oySlo1b1BFaHZNSmZuWXgyMWVIWWRaTVZQUU1nK0RHSXpZR3dSZStTbTN1bGJVS2JLakF0MFM5WGg4SHJGSTUxWWZ6Rno0WUNCamRjY1ExS2hOaDFGMG1DZHdXL1ZlSmxZQVRTUkZKS0pKQXN4L2RkVmo3VjU5OXhCQ1lmdUZRcEtLdzdmVmFUWmZVeE5VV3k1ZUZXMkN4bFl2SmNUNTNlTk0zY1hOdGZBbUR6MmZ5cEc2SHAvWmVSYjNJNTNNOEtWUndhdUYrUlhid05YNFllSS82bWxmNEFHT01QUDZJZmhxSUk1WFEwaXhlU001MWt1NlJEK1ZZRU95S1JWemN4dkR3Z0xMRDhBbWpYV2JSenVzRVlDYlJWOVRsYVd0YVk0T2IvU05LSGREVjYzSEs5cXJxekFPaEdkY3JOTkZGci9XbWdRWTBwVUlVd050UUNsL3FMWk9vZmpMdWNVSEJxSzNYRmgwcG9QMHZkN05OdGtqdTVZSU9TZWtVc2hJVGNiZ2w0TEkydys1ZHlSTXhtS1lqVXR0SzNicDZZZ29PeHJrNjFnVXE4MFRUK3BkRFhFWjgrWEZZb3pPMjFVbVRadzNIdmZmQ2VXZjRzWk5SL0t4NUx1aUZHQTdiY2xJUXVWcFpYOVVEbTFXazdSVFJUVXdLa1lhYVYyY3pleGxxcStkVDh1S3FnSjhoeTFwbURMSDRiZzE1dVdhQWpVcXJJNGNHL1NERkgzUHdKeEozUlJweVhqODJPcVM3VlRHaTIvSkgvVW5rU1hOM09GR2lMTVk4aWJxOVJ0bHUxYThxRW5nZHZEbGRCU0EvUUJibk84RkY2a3YwQzNUM2tVMEFsM3ZqNW5hZjFtOURTT2F3eUZDM1JLTG1KZUI1VUo0QzhzV2VOdmdlQmo2dWN2MmtXL0Z6RG9MbEVSUVlIQVREdHJScndTSzdSbzA0SUoyWlg4S0Z0bjUxUzlrN3pZbW5SZWVrekFFK3l0N1c0VCt6MFlEMDgxWE45Z3J5VXZDNzhjQnBJZ3pDSFFadjA5Mm9iRTRMSEFxdVdQMmx4bENycDJ0NXpjTll5dWVjOEdGUEJhRjV1elk2c29IVnQ5RFNIYXl3S1NGTS9uL0c0TGo4UUlHNExTY3p1aFJDRUR1akRuVVpqWW1yMVNCSURkMzU2RWFabG5YaFZ5cE1SZDBZWUNaWTc1TW1wVzBIdmZtYUs4eERWUytscVhvSkhwa0hicy9TWXhQdFh3TWV6SWJodzhyOGIyd3JBUXpjd3h0eWl2UkhzVzVVOWx5SGJkSVBsOUEyWlZuLzE3OVV3V3FLYlRSbFRYT2laSlZLYTQ0bUVidERYa05Idm1XdnE2bndnU1FCTTBpeDhuQVkxMUoycVJYKzduSFlkK1pNN3l2VktVditBOWI0czNpaGcvTFhWZXd4alNDM3owb0dmY2tkVDRyZ0Q0Nm1QbTk1dXdRWkdmREMwV0JyUjVmYzJQbmxkTzFNQmdEOTBSQmhUdHFBUDg4dGViT0Raa1g5NzVxa21OeUR5TVY3NE5yeU1RT29OVW92SFdWd0lDZk1takR4Z0RrZGtDMUxMUjlBWUxNeGZQMXVRUC84QzNUbEx1RnZ2emNYMDhETzBmRVJIaVdNUkJ6TUZvdW45UHVzNXlQTU9DVkRSRVJsS2ljOHZKWnFpb3JyaXcweGx4RTEySm9XeUJHU2dyZWtId1J6UE5STVVlVTRaaCsxWXA4b2lQTjRGbnRmeWhhN3FLU0xnK08wTGh1eXNOV01zZnErcmlvZjFvNHl1REpXZ3J0L2JZYTduTnVjaGQ2dnppcktReS9oVGZ3eCsyaDY4U0Q1VDd0R2htS1I0QUVFRVV6Z3dxeUJGYXY4dHNTTGQ2WlZTTXR5V0wzRm5wSGEvMElsdzRFWXd2ekFZVmJHenJkQ2pqTHdaY3p1Yzk4K1ZjT1NqaGd6YnB4UDBQTUp4TUIyV0xnUjRWWTl4UmRVblpaVEV5bVpsWit3WjVvdHNMZHBmRVMrWlBYSzRiKzQ0dkxIVk9NK28wNWFzZHVZd2RGR1JYdy9RandsT2dYc1d6b1U0b3RyZ0dBVk9ZVkRrSGZ0bEsra1FheEJwd2swVXU5UUpEdWZkWml2RHphcFBUS2IrcnJsc056WTNJZjhBT3hYRWovUTJiQitMUXRUL0c2OURLV3ZjVndlN1JtVWZOZFRPUGg2M3h0dmZ3SzVoUXg0WVgvUDhQc3Q1RzVab0pqQnZlazFwRzE0a2JsR3hUY0Nzb2xBWExPbVp3aTNjd25YM0R3alFGV1B4cEphdGRETFU0bFBCNnRlN1pCTmZFOWtXUktSaHJKSFZCdWNtaDArTmdWRDZHdzlveG9jOExNV1RIY3ZSTXJPNXRyVEtGb0VFa2gzZzNkOCt1M25tTHplSmlpVWFMMG1nSjFlSkZCMGJ1aHJKZDJnTGNwV3dDM2FVQU54ZFp4SW1LdWNMNTV1K2ZWai9IUjBud3ZIbnd1ckljMEdJVEFjcG42N1hXak1xK0k0bDlEbllHOUdzTlpsdlcyaWZnVFRZNHFpN0dGYjdQdyt1akNnRnE0Tmg3YzNuQlI4V2cyeXdPVDJTeWZvYkQyR2dhRnI2VFZBS3QrWkRncjdlT1dHVFhtT2NJa29xZGs2cjE2T0tLWXJUSHUyM1g1SE0zY04rRFBESjVlSFJlRmQ0ZVJDVm1mZHBvdlpaTUNJL25uWS85VWpoUnV0T1VZTWtJRFBmMFZpc1lnd3Q4cnpRa1dGd2wzZTV3UnJoL3gwMExCT1F0MWV0QjlPR01PKzJmZXdLRDA4WGpYMkc0ck4rWWg0aWhpU2txZ0dYQ3A0S0UvUVd1MlZxSWs5MklMY05veUcxRGNFSlFjZ2RRVVMzc3VsR2s1RG5DTXBObkM2Snl6QUtrRUY3ZHZCanVGTGdWM1F1dE9jOGptTzZIcVNsditpWDdTLzNQMEZLc1NaU09lRGx0TVhXUWRneW91elZ1cSt2cUxUOFBOK2RqZ2JBVzl1ZXRCTnBYVll3ajByTzVoREFveEIxdW1abkdEMkVwcjloY2p5YVpodVVuMWVYaTZDZHY2Z1JnazFFRzJFdENnV094T3VoN2UrQ3R2VlUybVp5T1FPQm1uNjhmMmo4WklSTlRyNGY0OGxJNFpxUkp5Y2VIbXl6amp4TmphV2FPWGFQZVAxZ1dqVzRvRUpZcnJESFV3SGFMWkU1NVNnV3VsKzZ5cU40Y2NKV2ZoOXVsT25Nb3Y3UHU0UmwxL01KUUF3OTBWcnp4cWRTdjl4ZW0wUUZ0Z0dzNVBRSDFCRmNIMEVSZ1dzN25HVVVLQlZXYkx5OG94cUtIY21DUm9WcDlYcUl5U2prV1VrM3hTUnkwS3JOZ0s1dDZsR1U2RGFvRUM5WFRjcDZnQ1ljd1RJcVZ4Y0E3aTRzQXRocGMxYkkvejBlWEVVc1B2TCsvUVI5cVhmRG5EOFdINTl0b09FTmJoSGl2TUI2b1J1VFI2eEcySEFiSUQwOXFkV0xRUmRCUi80a01UUXFlejArN3hSenVLaWpGZ3pBZHg2dUhDdGNKQmM1ZlRBZXdaU3pEZDl1YmU5RURkRWR5QitGMm5kUnJBaC9nVVVxdjlrNWhtSzZpWFp2dzZQb3V1NnFpM3RqdHR0NkRzZS9hazdjb2M5bFlWM1R3dkVsNGxCcFhSSERxN1pKWkZpa0tBcDFxWGV2L09QVkVxL2sremlLZVR3TGgvQWdDYzFhR3NsQ1B6eVc0SWs1aEJodXNjejN5ZUNPS2dsRTNrZnB3NkhEQmlLbnY1anhoTmd3cngrR3lYM1ZrQ00yUTZVeU1FUldJUW92d2F6OW80dktOWG5TV2lRREdEaVVGVHFseUpRUUdURzdLU1N5b01wRytQekpHZWFDN1hqSnh5QjZVZ1MvcThRSTYvSjdVa0FzU1RzenhXeURGbzV5OVVoN0xzTDh2VnJNSFpESXBVdFRrUVkyRmZEQ3Z1eXNGZWs4ZS9zdFlhLysxUTdEazAwenVqNlBQU0M2aGxJM2J0QWpqUnhFbFFuQVkwMU9RMWNJV2ROR2RpQU9QMUVRdDJBYWthcmtLbHdNSnlBUW5CelNGaFp6eGpxemxhY2sxRnpiZ2VOcDUvakxsU0JYZDBJZFg4M0NsbG5XWndRcThuYnVncldQVUJBLzVLclF2L21RalcycFlSdkN6ZWtKb0FTbk1IWUlFUGdBUGpVVFQ1NlBkMlFZdUttOWRsVDlEVUN4TStQWWc0anh6dXVpK2FWWmRwVjhiSnp4cmx3cmtLOVBQWklwL0k0eHcwTkZleWpMTHpYR2dOVjZsQjBPcWZhSHNUWENDOFp6Qi84ZzBhQTZURnRBS2JTZ0RiUnJ1cWd2Yy9aVUdkbjdjMVQ5RG85cGpWc3RvQllIeFpqQXVzYUxvWU1wY3UwRXdyN0x3N0FURlZPd2wxRVVrQ2lydEVBYXRXRC9hNHJvRXdnM29MM0xrWFI5akZ1bFc4czBlcW1tNUR0QnkwQmpFZHk3UnU3bE9PbDJqWjA1cWNzWFJyYVp0OVBKSnZkRjhHYjZPM3dOV2F4Snh1b3dqNkM5M1ZYYkNKcWlNTUswbUUrQWJOTVZhS29iNjlBNi9VRERDMWNZYzhHaWNYUDQ1aVh6dW10Y3lhSVpHbFJEY2ZLVE5yYzJpeExQazB2Y0daSlFZL1FYR2xYTnFIeGZudWRqY1hUczByWlZtQjMzeUtnalhreDZ5aFhpVzBzVm4xUHZlbU9KRnk4WXI1c0cyNXRybXZldWxWOXlQcGdicXNwZi8zTGxVeXIrY05taWJjaG5rVXR1WXgrNHE5OHpzellrVjdHelFWZllqVVFOcW94TlZCbHJyTExab0syU3RpbTFBdkovREpXNEUrOVIwUllEMnplS3hVWlY5MHFQOTVWcHlacTN2eldiQjBlRFQyZUpheTlmSi9OamxXcWtJdUZRK004RStxYVhEek9JVnY1QXhuWnRyR1ZERHZubXVFUFRUMFphZjZ2Zy93ajN4R1hQUVVkNjM0UkgxV2VZU21senRnZVN2VHNzcjRSWVZIdkgxMjBWQWxaQ1U0L0h6bDRyVkpGaU14RGxlYUhJWnRISUNwUXhXQWJqZzVqdUFNejVYVmlkWm5DZG9VM2dYM3Fxb0Y3Vkd1cjJnWmk3UDFjaWFZZlJKaktBcERTM2xFQVF5WWtQUkNvMU01aCtUMDVNYWt6UjhQTHM2MTY2dUJCWVNoWlEwaFpmV3RFZ2xHak1KTkU0U3BnejluZ0hjcVd6d3lIMEtPN3I0WEJKSE9RVGUydExFdWEydFJYY0hTMXBHdWRsVjYrQ1FIVGNJVDZ4dkp0dWNPRlJ3U3BGYkcwbWE1K1dKNXEvVzdHbnFvUWhGR0tMaXRteDhYaWtxd2luVmd3Skp6U3dBNnkyUk95SVFRV1dVU1l5bmJSdW5JUVZ4RlBJTTFHWWprUzRPTkVka0MrVHpWT3dZT05lSHpHSkFtOGMwK2tFZ3MvaXBvM3BXcTVyVzljMEV1amtWR1RpWVI3ZDhEWktnNjJZU3hjL0wrRWF1cDVKWFJuN2J6ZDMxSXA4WmpzcTZMNzlYa0lMQ1U4aUI0NkV3NzhPekQ2UzJ0TitiRUV4RlF5UE42K2FoTWFFenFJd1IyUDZtbzdZYlVnbWk4M25jUmMxbjNQQXNVYkE3Z0g5U3ZPVG9LaHJWUDhob2FRa0I4NFZTN3N1azRSNm9ETHpXSFdVc0JXY0hvR3BhVUdTRmpucGdrbkxEd0hFcDRQcjBLemZtK3lRVEMwMllLRkxnaWVmVjdRM2lwMHRja0xJRHhDVUZoVGUwY2FiU3h3cXlWMHBHZWdNQStDSGpoQis0M2hUeDh4dElEUVNEeGdiTmJYMVFnd0xZclVtNDhRdFkvM29LV1Z1d0dsMDRqVDV5bDFiRVlzWFRvZ0FaZWtjRGJPYkpQb28zbEFNOUhtWXdSaVRCbXpsVzFxcjVNSy9lM3h0WVQ0ZHQ2Y3BFbDFxR0lBR3QrVVVsek1lczVqcDVnV1lzMkdYZW5HZnJQaE1ub2V5OFRDeTM4alYvWGFqWWc4SytER0tXUFJMbjZYRmt0d2VicG45NkxheXpvU09yODNLdGpiL0lWQmtRQTRYMk84c016S2VJcFRLNkNuajhiU1ROMUIyZWY1cC93M3ZYVjliaG4vOFN1RVMwWUwvRDdqT1dxUXVSRk9hakVFc01rUWNnWnFFVGtDd3FPME1OMFBjT2I1Q2hsd1c2Sm5KMGU0cEpzTzFLM0NsSUk1VC9ramlPeUQrdkRqUEFjR1NCckZPbk1Ob2tmNWMyaHVPZmozRlBkbXJVS0Mybnd1NmFrN2dCL1pnRE9zekhKeWRBa3NiSGkrVWVadFd1NFFVU09qVmRhL0Q4UG1vNVBwdkxiUnJIdTN2U2R6cVUwcGRsZ2NYcGtVQzM5WGUzQlhlMlovMUo0R1ZtbDFUaGtIUUlmVTZqYjF4RlF1RzIxZHpDUWQvQ3p5Uk9na3dWbVlKdE9ZWWk3Q2xMUFZNTmpjcUsvOFZISFZ4MGNZa0dQaTdlMmwxeE03L0dpSlJWeHM4WlU3enNNZkpwajFpNUwwZXgyeEZzRHNUNU96UmRWNU9MNkdmaVdlSzg5WWswMjl1M05XQWxPNWQyT2d2eWZNa1prenRLV0txMUZ2QTY3M3BNa2V0eXMwYjQyb3FYazJhdUYyWE9Va0NmV01Sb0N5YVF4NmJuMmdKOWo1RFBabzNnME1sTzVtYTV3RTZBVnZrekF6U1RQUmlMTTdnTTYzVVVYYkt0T3VoZEZmWVJDbWYxVnFKZUY5WHhYTkJPSUlwOVdaMUdmT0pmbyttZ3A0MTNFVi8rM3BJajVGSUErOS9PRFB2MkxtUTRvSkxvakYwOHFNVGh5cjk3SUQvU1B4S2FMa1AvSXl0eEYxVlNFYkhUOUV1RmxKZ0paVzRIMEZvY1ZtTHdmd2JkN2Q1YW95K0Z2bU5kUklkSUs0aU1Dbjh1U1lFNEVMSitNekRFc05VMzI3eFFuL3BCdjQ5bXk2ZytuWVY1aGg3VkxwVGprWUxXTks2My9seHdNWW1Xc1AxQmVGMno0d0lMM3RIQ3hmTkl4MHJCeVdFTFMxOXhRMkl6V25mTE1POXFSZ1l2b1g4b0NoaUVCME5IeC9xMjFCZGFvbFFMc0o1YjRWemNoV1BHeU5sTFErQzlkdUl4Y2NFQm1yR2kwSEJHNStrNEVOanZ6aS9ja0tCaXp5NGNCdFJpV2p3elBmTnBtamZ3SlNDd1E0c1BJNy9PSjFGTitEY3ovZStteUlZeWx5VVp3SDJvQys0VEdxVk5tMzUzYWpBWjRDcGxCUzN6aHJtdStyWjFlU0g4SUszUXlqWmNZS3BoOC9GVzd1eEYxZjg4YXhmS1pvUUZFTzI5RWxRNmx0TnlrNnVYWlgraTVwbEx6MVdoZXhZdCtIWkhzRnVNclFXWUJBNkxlaldramVGMHJWdFRQRHN6VTcvRnVBRDFEVGNxUkNSTHladDVwbWZKTDFLVlJwUzYvYzZsQnp6eGFSSU9iMDVhSlpvU0JqSVZ1N0U0REQ2UlpyZWtDcGpFZkl4YlNuVUVHMFdKdWZEV3duajNhUUhCMzNvaTFoMkZHZ2Q3Sjkvb3dwR2l3RXhGTVRsTmJLdHFpNHlnazRqMzQvUmEyVitlZHUyL1pKUmVWSWpuWHpRMXdSUEFKYWxTTmN1UFRZRkhqZ3lYdjhMK21naTVnRXJXcFRIV0hScSs0b2dwSm82K2NENjJKSjQwSmkvNnlURERpTUlpd3dmUTFzMHlvTlRlbklIYVRob3dqazBrbThLQW1mVnB4T01iMXdDdHhCTmRjU3J4dnNhWjRJSG96WWxLUEs4Tit1Nm5KeXYwNFpTY3RSRUF1bGYvS1JZUFFNZVowRDFGamZmUjhUTzNHVkhtMnd5WlBEdFNvOHlaL1ZKZU1JeVRrNlludXE2Zm9sRmpHLzZ0cXl0c1FWTU9kY0pFR0tpTVhTNjZacFhDR2xTdnM1aTl6eG9zSGZib1BNNngwbzlwcTlDdlh0VkV2UHlrUUc0S2REWHdJd3dxTEtFdCttbC96aWZTSlhwN1g4Y0YydGVWVGN4T3VmSFg1eFpNMXpJcm5ZVWtzRm44cXR4b1Ywa2lmZEdINEIwNEVGaEtyQ1RmejgveVo2TnZKZkVDd0V5UHJpb3lQbnZ3L0w0VHRCK3ZXckhlaUdnNGZSYkJSaFk5UDh3Nzl4V0pqdEZWUHVFZWI5OG44bWg0STR6d2JIS25pNU9TbmVxaFRrOVk4TFYwbEVKWHBhbXczVGplb0NFRDYyTFZtdEFkTFpWMlBjT2tZS0VReG12RHZ1RGVuWDBKbW5nV3p1S0t3M1RKS1ZsNmFpbU5WL2xjbjR1d2dla2xzdnE4NXRFUmJzc0NMRFIvajFLRXZNdlZkUXNDTGJaemRzOXhFY0tLLzlEdlNnTWpMYkF3U3RVM1dlazVpY3R6SThoNFpXWDJRS1FlWElRWHN4QVdsUVBUVE1BdEVJN1MrTTBoREEyMWdZWHp2VUY5Zk9pbG5lL0QxQnRJenVqemEwUUl6TS9IaGVZYXZDTnFHaGtNa3NmYXVPZXZnRlk1WVo1WHA2bjIwVDl5N1NaYklKMk9Hbnd2ZzhwNTBmTElCR2t5ZnpVbG9MdFNEdUpZbGVtcEkrYTEvZThSeklobWI5Y05udzNIREVYaHlEbXpDRDh5VlQ5Rk9CRUtrY2V5MjdPelFab0hFakRRUDZrajdpakxRQjhZMFp4Nmk3N2YrbkE3WWNKcnBUNWZzTVhvWXphRjVZeE0zZ1c0cmRGV21VaEU4bTF5dXZSYStJaE5SS3lYZUQ1b3BwUkRBNE5IWnZOc2ZCMG9yV1pLbjd3a2tvTnI0Z3JPUWZoK3RQd21YMFRBaVJGY0tWNUl5QnFnZm1JZm05N29FSW9KREpyOXRBRndKSCtVWlJuL2s5L1Q4cloxYmdwUGtWU3NxOWtmK2g5aEpINFVlMENGeEFiWTRPZU9NV3RrVjVRaEJpTnNscnZPYWxZTit5WWxzbGx2U3pUc3VEOXpvRUhwczA0UjBJdm9XVjVqYndlQ3pETjdjbGJFdkVKK1JzR2pxOGQ5TDlWY3dUdzVmS2NIVEJnekhjak4xWjFvclAyRUlZTHdHTGIvWkJjQW1kZ25tVnVnQW5Sa0tWWS9VRlhKZ2dzZG1YSUozV2NON05ld1YzMmh5TFczS21KeWJOZTF5WkNSWXhSS2FXb2dVWElJVHhpeFhGU3hEQXE3Q3N0b2RweEJCYnlVRUVYSTBYVTRVRGx3ZzIxekcrUnlybWFuczVJWXRIN2JpNXNIQnlDYXZIT3d5YiszTUZSazFSUGplT0VYQjAwUUUvREtpcWxoWURScE85end5TmZ4OWN6SlZkTmNEbGJ5MTF6dVk3akJMMTRUVFIvZnJXVUhwMnJXczZyNXpNeFhWMlJiYVlQOC84Q0ZHd0hQTHljKy9SUS9ET2lhVnJkMFAyOXVTSGJOZ2JvQkMxTHFJZkpCQzFqa3IyeWNoYXUyam4vVVl0NlZKNlNMUDZoSDlidlFlUFBodGhaT3owNVFHTU9yU1lkOXByNE8zaXFYeUs5Nm1GU3ZibjkwZXkzNUtndVloYzh6VDdqd2tFNVJSRUNmSm1OME43NnZpNHNiZXJiMHhFUUpXQVVmb1IwQ3pUaHh0SklvYjFuRUkwWXhuN0xqNmlTV0QzakhobGxtemlNVTJOMm1rY3hVdzRHR2dYY0JKSzhiaDY0cFp6S0hMTVhzV2diYlRNRjFjekxQWkxDR1B2V3o0ZWxwQzVDUEtVMVA3d2VLRy9rT2F6U2szSUY0RVowc2gzWGdFbStJTXJtNXhnY3hsM1Y0T3d4QmoraXluQzRxQWpxMy9EWHpmZjF6RE1nS2Jydmk2MURvaitnVGFPNENncGZ5VHZwVGxKai9SMkdCWStqYlJGRlZhVjlIN2hMclZFNHJPLzl2VHZsRDY5dmxDZXBsYUFZbkluTjFUS0tpOC9YZTYvdDBvZ0VkMG5PNE9pQjBMR3YxT1BMRDhOWGdpMWRhSERSSGtwNU5XNDZmNytKWUJFNjBxbmVFZzJnS0hNV1lIamk2R0pWVGcxekVTckVYVkJjaDVWRVpJaVd3WjlxY2VSNVVkSTQyOTdGT09yOEZUaEZVZmVJM2JHVG85THYxOVJXZEZ3UXg5UHRTTkpkUk8rWnNOV3M0bEUydGY4NkRPRnJlT3FYVU0vNEk0UWtFYytyNVo5dFFVSWJEVXp2elNnSSs0anJ0KzNpS1pGRVZWWVRnWkhsZVp0SWI3a2pDd2FwU09MNno0RS9PRUQ0N1MvTWlmamwvMy9URGdqODZseERrYnVESHFPT1A5cFFzVkI3S0ZJemllUGJKUnVWRzRJc0x0eTh5TzZDL3B3bHpTaWRrV2RWc3Z0Q2NNMnFsOTRVSUxMeWxxTTNtOHNDQmozL1ZjSEZHYnVIVzRid1V3NW02c2UwdkR2MjdtMW11OThCMzIwRUpnU1h1WU5wVDJMR2NuVnRKcEZjYmtJRElWS1o1QmVhYktEdU51VXpnSWJ2b2NWVHNDWk1RQ0JNNWFVdEVSUDIvVloybHFvbXg5NTFtZHZ4NWtIK1ZiMEprUVdIVEtsbVBRS2lMbnJvb25MSmQvbWdqWVFYSlJTRHJ5ZGhQaDlXazdHMkJrb2ZoRlBYQmY0a2VzQWdhRlBET0Qwc1d3MnVGRVpwNzB2ekp6dnBIbGVuZ0doOWZVUkEySCs2NXVDVU04SDF2c1NZeW15Q2NjS0pKcm9pMm5ZYTI2UmZTbk8rS0lMZGYxVzhsbFJJMlgvOWJRMkE5ZDNuUGJTUVpDeFlpOStGVkpWbUFtOHZMdEpaWjRyZkYraHNsYW1zRGVRWi9OeExXQS9Da3VQa0xucXFZaWJPQzFJalNsRENkNldJUHl2elNqaUQ1dWtrSTFjNnJpYlpCbHppdUVRS01iWXpjTCtEdWl4VE1iZXBKLzQ4SDZxbndEQW9pV2dIYllQUm9Pb2s0M1diaUlLUUpTY0F1NVV1UC83M0Y1NWFXWU1MZTF6Vk5RWm9rTEYwYnBaZ0g3Z2huYkxIeERhcWVFSGdWSkpaZWl4ZE9XYXBmY2lrL2VzZkNiTEF6VTM0Qk1lcTQyYWVkOXYwWE53Znk4VmVBWkEvTlJ6TFBwOTYrMFIvd3BZYXppb2Y4VUEzZFVwZTRyWkUzN2VnZ3hja3BZblM3bWhrWEZBOUJXL0RZN1dONU92c1VIamJ0VC9Rb0dKL1RCUmFRRFVlcXZPa05yek5yUmJ4VVV6eUpEZlRpUmQzc00yUVR6ajRSSWxvVWo5VDVzeTdIZkIzcldOUHBjSFJZSVVpYTZVczIvMWlwOXFoSSs1RUZiMVFhbm8veS85ZzlmbExnTGhBN2x0cnV5a0NtWHlJcWJEWi9DY1pjb1hDdkVPNFJsRDYyWENZZ3V1d1J5a3lJUEU0TVhtQmlCT0NidTZkamFBVzJIN3dtbVRab0VyYmZaWndrWEdJM1FNQWV2eHllc01QNk9nUjhHWW1oeEE0SjJnWkN6amNEY0VmMXU1aVFoQmd6em9wYlc3MmRhQUgyWUtUTEtmdnJmaGluaGM5L0oySGprRENWM0Y5RGtodFQ4MjBrQ29OVFR2RGRkVHVWNktqSGNKUUxEdVlqejRUaUZjQmR4bEdEdTVPdGJ5aDMwdXR6QWQvU2VzRExNbkR5UkxmaDliZDdHdWR2TTY3YmFjcVVnU01RVENUQUdhcE9pWFJUUmVlY3RCUFhJQWlreFJ3T3V1ZzJTa2pNV0VRNGtHTVlQSi9ZSm41MHNHMW5GZXpEVUFzemh6dHMwczJpaXdLZWFtaTFpODExaWpWWjdVanJEdjEyRCthTk9FbzhBdGIrMXdXUElZODJvTXZYTENWTm5Id0U2VkRKM2pIYytsMGtvUGZqUWZEaVhrbFZGeVo4L2dBYTE5VmFTOEJJUHgxcjF4RGNuNUxYL0lvdUgrTlNNK004YkFuZlVncE8xUVA2d0dKK2pJNlFFQkg0YjVFTTNEREo4ak5rK2ZBTzd4aStvMmJsdWlWL2psaUdmcE9hRWNSZFFoR3RuUTFNRmxyaGlVK01kcjhYdG00TzN4UHV6ZTg4TWExelRFYW41dEx3UFhaK3plamRXMG9YUzdiTTFmTHNEcTFtTGRCWGlBNm1SemxwbzQ1YkxWQVdRaDkwZUFMQzB4bHZqSlkyQmNoRHdhcUlyUjRjRXRObXhxZ1pSdlIxcWNUbFZ0SlRMaTNxdjlsMmswNC8zbDd0ZmwrUk9INm5IUy9HalgwVE5qc3RveXNDdEZLWnNFamU5T0VuYjZScEN0YTl1NUVoSVlGU205K2hiK0hRalFTV1IvSkphcTBkRGtIOTRpbmQzUitDK2xTYTdnSWtzZ25FRFpZcWZ0WWk0eHVqM0wzTy9sVmtCRnhoK1JMMTZZTDRYSE9wM3BUTU4xckYvcHRZeTBnT2FIZitlYUw2Z1RqbkgrRU5GSzFIbVBzR2dWRGQvWDRISXFHbFozaDczREdrMWlUWXJyUDJQWSszc0Jwa2pHUXhYSEtFeWkxVWsrWkVGVG9TUEcraVNFV2VMVnJEWE92UjFyV2NtcjJ2OG1qd0RnK1lySEtBaVNEdFE1VkFjRkl0TnExQlpJVnRTQldGbVFEMkVoYVN5V3Yrb0VyV0Vpb3FGUnMzQjhubW9RS3d2RTlzYXlrdkZyaXk1NzE3ZFVlMlI4SmVxK1A0ZXdGNW9zcGpzVjRvazM2VWQweEE5dURaSVBFNGI4U0NkUThZNW51NEQvWm41VmF3OEdMa3U2MG1qUkExMkFhTzlyZm1MNUxQTzlQTTRLOG1UUjhBK1lWb2V4d2g5c2xFcExnTG44OHMzVXB1WThnbFpnNjV6cVVCRFRoQ3M3WDZoR2M2Zk14dDBpYi9kejhKY0wzQXJncGxzM1NHV21pOGFLNU96RWozOENjcEFXWVVjYVFCWTczVW16bTJPb1BiM0ZZMFAzWHZheWtOREYrcHNQaFlYMTdJdGs4WlRwU21aeFBqOUJsbWNScmJpQTJyWkZ1YmU4Vk9HK2FSS2xtTU1RUzdjTE94SVZrWFhYTUNMM24wQktsa3Z1THh0Um1lcFk3TFJ4aEc5VU1LQWwxRjN4L0FuQzM5aTloVllZaXk3ZUZqWGc0UkZzYnhwM1B0Zlc4eFFHaUFoYWhscVJncGd0VGtIR0lSWjY5ZGsrWnA2WDZtU3pEMmRuUkcvQXU0RXIxUmU1OXB4WkI2WThZUXF3RC9mVnZTcUUwcnoxUUk3TEg4M0ttbTg5eFFSTE9xSTRNSGNDeEVQQnVJZVorVXVOMEtjaWYxaUZ5cEhxdFdzVXdnTlYrekN6SnVOamNwN0VuU1lGcjk5UDI3d2dqd2pxYTFyS3VJMHVpWmJSUDRrMkhndWduSXUxYkoxY2FiTEVkRWhNRGVlSWRRWUdrUlJHV0VzMm9vZDZ2QTU2citpSVNQbS9sRnFheUFxeDQzaWs2emk1ZGU2TjhhR3djZmFKU3g4aFVtb0phTVlHQUVnYk9pclFERmI3NXpiYVBZZ28rcUxBc2MzdDhQMlFndE03RWE2MCtkYVdzMTlXMzhBem03cCtzdDkwUEVlcEhNNlJJdGZsYmRIdzVacE83OC95WEtMOGQ1SlZyd3o1TjhxRjQrVlVld2JSS1ZSendFZE5wTExHaHpjR1N0RFJnbWROdW00cVE5TGFmVGhhT0NmOXl3QWdvTVpnTjRTTU5haEUwWnlITTBhVDROS1N2OUJ2NkprYkU2ZFBTcy8rQUdZRXVZc25GTHFQMzh5V2p2eWRkQmY1cEpxOEhkYXZXbUpEWmY2UlJBTGlkRTNQYncvY3V6TUpYTGZWbVhpVHpUQUNGYWYzNitPUHgyWG5DZ3RYR3dHV0ZQRzlwMHErVU5FeHR6eHRONFU5QmRDdzJ4ZG94dzhmS21CMWo2Sk1ESW9YOGZqMWljWWFiemhwTkV6T3grQzFzL3dDZHZlQ2N4SWgvOTI5V0tRUFJNZ0VVNGhVZlBPTUs0YTlyZWFhVGNDMnZFckNkZnJiVExmVXFPeGQyUWdSYTIyVitwemFUbW55L1liNnVTUUlVbFB2YlBVZUM2UE1DTzAwMmhrZG5tcEhpTDNzYVpBdkdzUUZBb3VzMXQveGJuY0VXRnJrR1A1Z1FvenpSUFRGZlgrejJJakdRc1dCZ1F4VURhNzVkVmpiQmJvVW1OWGhxNlNGaFJiNjRqU1dTc21DT3llMDNvV25UQ28zK3FvSkZLdW9YMk1DUWJLb0o5YTNid01lZnJlM3AxWW9LWTVmckgxaFBkem9TSVlEc2NTc0Z2QnoycC9UU0FYQmhyN2FXMUtyakZzTDlRZjJvSUZhdE5YQ09YOUpvQ01aL2V1M1BlVTFhTjlzRThFMk85ZXVPejBFS0VwSnhtY3Z0eVJHVWRLNzl5YWwwNkZ0bm9jWWFzTzlrN2tSZjZFNDFlS2dnazJpbE9vaXZRWWt4MWZ6UjdWT1hkZk1yeThOaUgrM2NVaFVoOUlPVC9VZk1YY29YbG9LV2VzdkllSVE0YkFWcDF4bHd5QjB3VmMvckF1UTYrb0Rsd3VKaG5HSjJrMWhJOGw4T1g0bnFGdVJxSjJReW54MGgwSXd5dHZjZnQvUVdBRzRpOTIxSmU4Yk9wZ2VnRk5RcGVRWGJ3aENmTG5reTVrOXpRTVBPTENLWEpWd2NvZFRwSW1EQXh0L25WN0o2TTMrMXR5NGVIc2RwN2M2VFdpOUtLOXlvUGpHSzU1SXZqRGpTUXFuN3pNRmU1WEo3cEtTN1IvZkFwOHRSL2swU1BweThld0tmZ0E2NVFsaVJ1ak0rRW5wZXczZnZwUUYwM2FJbS9LdFE2aXhSbUdSUklQMjBBY1hqSTd2ZmdtQ0cxN21rTmZXV1lvaW1XQnM2V3R1MGpxQyszODZ1KzkySU5zTGFNaFJCQ0hmZXJsdGY0WkJYKy85NGRIM3dPOTR4M2dDVmM5bExkN3lmWC9VcTNGTHVhOW9RNHpjRnhSNzZSRUx5bW5jTVdDSFk0WUY2Q3lSaDhoZ2dTeDRWcnpQc0pWNUtaelBIOGZUOGxsc3FCRGpwN2NNdGk5emJ5UFdVbXN0MUx4UWRRdCtoNE1nbHplc3ZtbGhkc3BsTDdtdjB3RGFubmM4WFZmRzR5UEFRaXZpVkhkK0lHbTc2TFVsL3VjTnV0UTBkYkZWbCtONTl2bzA0YXY5SlpqR2RqR21XaGJjblZ2THNYTWkvTUxWaHoyemJFaVd5c2NPS0ZPOGVrejd4TmdSak82NUJYcFdJZTB3Sm1pRjNKMGpWN0RLNDE2aWZxZjg1L2hTQlNNSTVFZ2UyN21ZVXNlazZrbEMxeEgxN1ZkdGwyRFFLOXBwbEtDZkk2N0FlczlHYW1nbng1bS9ueFNid0pJSk1jcmdUU1lMNERvelFNelhwcW5uNkdKaUpvQWtVMm5tc0hoMnVkQzlrdnNvTmhqczM5bDRINjlVN1J5VXlNc3FDOURFWjhOR0FCTFJYQ3Q1aVZpTm4yZ0g1U096K0VtVG1UZXFmQWtEb0VWUExsQ2dMVjVRNVJmbEdZSndJWmd5OXFOa3NVeFgvTU5zVEZ0dUxwbytDbDB1Q09wZ01QZUFxS2tyQVhiNWpGLzg5ZTRVeTZLNDdCQzVCQmZXdjJSWGxaN2ZiNEZKTG9EMndzNzBNOUl2L0g4TFBRRFFtWnhWcS8wOUk3aDJWL3NzaWdzcndkblhIc3JHUStYcXhmYTlzdks3WWNBS0lYcEtGbk82UHhVM0hEUUxZTlE5OE4wczgvYnFtbm9McUJPTGdER0h3WGhHYmVLSnk4S2xjNVd2SnNFekFrV256c3JPWlJLNWZKMGl5OUxNWGo2MUlJczV1V0tzTDNaekdRcnFUV0NmQVNzL3p1VEpiZmNoNGo2Y0VBOENvS1RjVHJvTHlEQ0l0UTl3V1crVFdYU0ZJMmo3WU4zZlR0bVArYndGTDFkcU5zTzZZWDNVbHhJeWd5RUhkTTd4MFBSRDRkSmppVmZzUnZQd1hxYi9xYXJxMzNIZ0h4SzJweDZ5TDVFR2hNL1dsSXZiRXZsc0wxUERxelVLeVVrZmRjSEsvV092amN0QVFwblRRUVNGbU9CTmxpMFZocy9obUt6cjVyRkdYZEpmendiOFgyd01JNGRtQ0FaZmxSK05UbkVudFR2eUdpS0lGNmNJZUs2QzhFdTREbUVDUU0xMnZHSDAzU1VLM2pBbzZDaFFZbUlrMkFVRDR2QTBXS0pBelk3ME1GeGZJa3VBQ0Y5UmNYbUlaZG9ocGtiVzlHbCttVUZyRDZkdVcyakdDeFNVWStNUDAyeHpacTRSRjlQSURGUlNWcEplUDdCQzl0czlLTjFadXpIMVZ3SitUaEt1WVFoWEFIa1RVeUFZcGsrdktvNFVPZkNycDJzaTQrcEt5WGFQdUJ1Wkpib2c2YmlCL3dsMGUzZ0RTa0w1ZFBZb0RvdVpTSUdFbk5XZVJtN3ZYSmQyUldIRFE2Q0dDbjNOdTFCeEJ6YS9yVWh4VStkVTFabGozbXJiTEJsQ3NibWRVd09INStNUlUvVE5pU1oxbnBmQ1lvY0NRQ0xUbkxkUi9RVFlpdDBqRFNja2xLUmNvWUxmSm1Na05MeHFTNWdIOS9NVndKalhWN1MwM3dkZXJTcUQzUHdYMTI4UGhFakRIN2pVQ0VIem1XZEFvbzBWTE1sWnVYZnREUmViVFYwUzVNNk5yelZSdHRvMXRXa2YrUWcxQVB3b216bXdWUlAwell6YTA0eEpWbVFQN2Z4bEhtSitHZXBFY3lrYVFxVk9uUUZWQVduekpTYVA3S0FxNjlLMDZLc3hZVmJqRVY3ekd4NVp0OWVWWUJ3R3pHVjhydklvRUpxejBxMmNoY0lyTFZhMHA1Mjk0RnVtK2lHWHIxMXR1UFdvQVVCbzlhcFowQVRZTnBUcGQyQmN4ZTIzM05wamQ3MVY0N2tUdTVscWlBZ0QrWm9tWHBNNzNyTWhCaEJxTHg1ZUJna2VQaEZiM01BTFM3VC9IanJ0VnJsUkRaMU5EQmtpTWp5eGx6Nkd2ZHNCQytwVFFXTWVkNzZxMmJsMnVHMmVUV2VRMm1aZDE5YzVWUnpzQ3pZd0x3WFBPblN1R2N5MTRaUmUrdVdtSy9ZcS81dDNVaVpmMERkdHp0SW9uTVlYUHlZUURIZEMzT2h2ZXp1emZQQnJVSG1IUEdXc3g3YktWNklVaEl4Q08wRmNEbE0wbkVWOW9pQi9TYlFGZFN0eDJIK3h0Z0RmV1BMWW5hcTdIZ05VckhIeCs2MkROY2d3a0k0TkwvQnZuUGVrcTJ1SFRFWGR3NTQ2WDI0MnR6d0dMVkl2d2YrYzFvTEdpVExqakVYV0dRSkRnSFVFamxWdUhIWFRqVFdkTjVRYzdGNy9kZi9URXV0a1B0S0VzcE1xZ1BrTmNyb2lQc0FkUkZPeisxUXU1MzJ0eU5EazVFUUpIV2Y3Z1ozZVBnclNKUXBSN3hHQ1hWdUxyU2hLZTVXWHpJZ2pCdUM4Q2diM3BoY3NqWmQ3SEs5TCtGZHFZL3FxeGdyWkVnaGxzTXNKU0k1T1puRzlOSEVzOEtzWE92QWY3dUY5bk9UM0FUM1hHMW5GS3ZaV0pBOGYrRWUyb0tjdCtYZTdQTSsrUkFhdE1CSHphMmJPYTZrRzFiMXdrZFh6SjQvVG8wZDBpdGhoTTJBbEZxWWlkZFB4WkdDeitXVUF1dTFibUZOcmZ6RmxzOCtPeW1GKzFFTlVBaFNEcUUwOXlHTlpINGp5ZFN6MUFJZlhTM1pwZzZnYjFvTVdGd25sSDZ4dGRMc2NLVWMrc1JsYmtub0xHZEJ0M3FCdHo0b01PVEl5VHpHckVOK2N6YiswdGYvTGNPQ0syQWVZVDNHNEtvVGN1RzErRFRYUG1KVXcvMVBiYndyaUZ1eXJYNm53MWhWYU1idVFSWTRUNUVuTnJXRWd2TUVQZk44UDZuSHUyaG9aWmpsR1dSb2ZvUVJIR2VWTFhBb2dSZmhaSm9ocmpJQ2NkMVZwY1NnQWNpaVV0Rno0Y09kL0IvMHhzZVlEcVlMU01lcjRvRUdoUis0ZWVGRWNYSjg4b0ZUMHpxTE1DNVhPTk1vb2hhdCtNZ0FGaHlLaFlmMjZHMlBmcGx6VFRmVktONG0ySmUrUjFNOG91NnZRSmhncHUweGVjMWQyUTcwNVhPVFh2RTdyenl4Y3NVclR3M1dENHBvRlh1M3lzN3BUeTQxVzJBb09wZTJFYmpJVTg2RE9CUGhGaXExZzFDMTBDVm9Uc3JuQnBOWkVleFowNjV3ZmNxdWZxbDB2N2k0N1lVUzBIRXVLUFREVlArK2dqTExVRkVvNm1leHM5aTRWMWJRR1loeDNETUhiUG5jYzAxNVZFTFlxdWxqYUpQS0d4c2xvSlBpanV1ZXNmZ1g3WVZKY2tTbWJnZEJ4OWdwM0pEc05BZkpqSHVrS2xuTG5SbVhWMXZ4Z2o2RVQxanBKbHJ1TlpkZ2MzZTJ1clVkWXRyZ1VkM21lWmk4VFNSR1ZtM0VNdFhvTFFMckx3MXpqUmZUbUo0Q3pUTU94SEZtc2RvMHRwWVdMalVtQ2ErSi9EaGpSU0pVRWU0Y2twQkwvaU1TOVhFMlNaaVlpUG11dExBS3FmeVRtSXNlcGVzVk1kb3ozTUI4MTBXL01ZUTZsUFNzc3N2MHc3NjlacDZERGtiUnQzci9JL3BOY2tQR3lhTmt4cWZMQktuNHVQUGdQemNjM0hyMGNuQ1NqdXJScG1iODU0MmcyQ3RKSE5vS3pLMDI1TkVlb1hITkk2S2dLaWRJc3hWcllzS3kveGxEYmJSQjhaREs3L1lMY051VTNMV0s3Y2Y1M3Q4T05qWWJwQW9yaEo1c0g0QmliZTdiMDBpK1ZCdVZZRW1ndjNUS1Job1lraHlTL3kwZlNLKzMvNFNFWkN3OUtCbnl2QU9IL0pBdjI1d3U1UFA1WGlpbFZFZ01YTmhIOXlHQzhGSG1wSFpoaU55eitSN2sxOGN2NXhCRDdQeDVKWDN6bG9VWU5EV1VGV3V0SzVnUmJ3YUhRdi9KWll2K3F2Wnk5MVhieXdzcm12dXBvSU1EYnhySmhFbXNnRzBxMWlXTjFZaHErcnd3S0lZTG9qSy9TaXZZMkdsSm9NVnk2c01XbXo1RmhXdjRvb2VVTSthL00weVVZN0hCaWZRQkpOaDcxRW92bk5sU1ROTEtBa3ZiUWo0czYzNk5DK0NLckovR04xcDMyWjh0cUNpaTlGNDAveUQ3UGRHK0pOWDlvL25yVGdiUTZQUlZJMEFMN0RRUDdweTVMZ05NUk5jRFdlaUgvQ25HQ2JYSVA5RlhPVWdzOEJxKyswWEtnNGJPeVE5bjIwR1krZ2hycFE4VkxnUDFORG5wQjRkajAwVkdIZnNjTU5OblNwbnpGbkI1ZHFKdjg3QllkQVhNWVZoN0ZQRysyN09oMUplUk5GOXFkVmRlWVVaNXRHL3dyNHBFa3JIVy9lN0s3enNmdVFGL3lCNU8zVjhLb0RERHdWYkJ5a3RuT1A5ekRXSFYzbmRTcXEwdUtRcWk1MHUwa1V6QkdVTUhETzdueHM5OTM4ZkJiTFZqVmJRWEJwWVpTL2w5U3RiUG1CcXVSM2xScGZLSzgweGJSUDQ2dkk4eTRSc2xxRGFEZHpWNDVWZTRFeVpWQi9odWo0alFwdENac0hxMXdpbVNNUUtzWWFKQ2Y1WXBLNThUQ2RqRy9uTXdnbVdRcnFic0N6QTZ0ajJoN2hNQUJTaXRZZWJQTXZyQWtDTFR2cU1QNEZHNXRFdG92aHBtSFh2UzZjTjlJNlJFQnB5eXI5K05KRFVRc2djbUJ4OWFYeEdEUkMvVU85RWoveXlmaDJsayt6dDRhVndacW53N2RQMUVvcXdueS9GNTQwbm5tWjdTYWtDVmorVEhPYWhGYXF0Q0E4UEZRblBQV2l1RkxxcitocWhWaWx4aGIxNG84TTZNYTJEVFBaQ2l3emVYckdwb202M2pRaHVYUzIwdTd6Z1gyTDdLWTVEVC9iTUVubkdLQjhMaC9UOW50ZVpGWCtocEtJbERQNWRVRVRkbTlTVlFoVEliMkNmb0ZjVEoxb1B1NjF2U3lDUXhDQW1xYjVxMEpLWmtqTjhaOWx4SWFGNzVZbXZ5aG5rZWNGZm1VcEVYY2FUdWYvQ0pMdmprQUdYU3Q0S0NNelNZeDdLYnJnK2cvSFdQUDQvMnJjRzVVR2hKVkp5czZYcFJ0VTcwRzdBUXd3SnBCTmVSRGo3RUxyektqendpd05TWGVqbE0yUHpsdHNvR0xUZGRJeVMrUndIdTdVOVJVaDdOZng0YXJkdE1aeEx0YzhrcytncHhhckhzRkw1SjBJTFhURFY2UzJuWm5pVS9YUTUwNGplc0NFVHo1M1hxdUlmNnZuNWthMzlKTDJIbStRcGhhM2diMUZoTVFvY29FaDJLaE9ERFdKK0hqeDk5M0M4eTVlbHlyL2E4NXRXSlUyZi85QlowOXRqa2E2OEVvM2d6dHVCUTYxTGJHOTlwS2JWdDlFQVg5aUNoNE5EN2I4S2kvampmNDk1V1M3YVBGRDgrSFVRT3ZNL0ZTMytLdlZIeXlhKy9TQ01meVhIOThsd09pUHgrb2hvWE9RTnNvaXBZSi9ZVmNSZFVnWjF3V2l6RFJkR28vYXJkdFNQcFhXYzRubmlIY004eEVvUVZoS3labmhUY0VEQVVHRDZ0SVBPMmpOWlJ5USsxZkNaWTREL0lxcldOZ0UxWmJ2eDB1Y2FuUlhkM3lYeE1Fc0tXN05ucnlqWmZldGFGZ0NpMUwxUGdUSWpKcHRSVWJHdGVDY0hFQ3dwaWFMMU1menpQSWFrU2NIcUxLZnFSQjdWZnZnSU1YTDhsaGxLdmNtWGhwQmRQS2VqTlVHb3dZUEs5WWNTcGpRekFwSGhhWXc3K1lrYzJuYXRXOEp1U3kvZDVVN00vQjRMZTRFQ2I0SmhjV2pxcFVWY1Zqbzk4STNNeDUxallzeDJRZkdydkVLNDhkTm56MlhtTy9DYmNLYy9HKzd4UzJEUE5wOFpuMU9CeFJDT21jSjIzQW9WUk1KSW5iSWU4eTJCbHRKemViOWhMZ1J3VGlsR0lubWg3bThmM20xSHdWN1dSK1oyWndMUjNQbXp5andIVFArSTQzTDFIOElwSndiNnE2YU1zRjl6U3JQQXFQcU1kVDRzWnA5Y3hjWHc4VGp1QndnOEtNdHRmSXhpSmppeG5BdHN0TERXMkRVVm9PNEVPT3daT2FXOHkwRjJwWE02OXFESklDMGNhSFFoREh3cCs4ZzZMcWJ2aE5XYW0xM0p5OGE0aVBvN1RGMUVveVNwM2plQnRZWWxlcFJSYlV4UHJ6d3NjeGVQUlIxalp5a3QwY2I4RU1wR2hnWmRJU3dBa2I5UTFNZ0ltV1VSc0tselJaSXdKeDN2ckVwZFJhb3pPWk1iaUtteUlBK21oMERSalFvc1RGYkxpUFFySEdpZEhwZXJDVWJva0ZxSDA3UDZlSndrYnYrZnJoVVRNdzZSOFM0Tlp0NUkyRHArRnBUVWJpb1YyUmZwVFFYU2lLSDFXaXl1N2FlQkFDaGFSaUxid1lhL3YzcklDZ1BtZXhhN2oyd1hkK3B6U2lYNFpacjUrUk52c3pjYjFVWlFnQkZqSmhGWmtxNmFJODdYekVsTDk1RlFsdlpRVmhYWEMzem1jU0NlRmloWUc3WTFpV0ZoTkZRWjQ2SS9pNVhDbjVMbnZCRUpjUi9PWDRwZ0dBL1V2cTJaaEFGNGJWSzZEdHJ0cWhOdFRXMGRNTXFQY0M2MnMrM0diOStNaUFVeDZ2dFJyTWcxVTlxNFdtMjdueFVDWGd2aC9nV09qZk5xZ0grU3FYV0ZxSEJwT3MxUFZISWtSTFdvcEs1a3J5dDQ2Y3RnbE8zNVFOUElnQ2N5cUNtRWFmd0ZNMXhwK1hPWlczRGhzV0JZekVqVFp1Wm9MV2x4QnBBVmhJUmh2dG84UXRsazV6UWxqdy91ZUhlMVJJaXBBR2FJa0Y5aHpEUzhIbHlsTXRuNW1wUGl0SlJWVlB1Zmp2WjZ4RWdNREd0OE54WW9KWWhUZnIwMlRyUVNrU0hhUkdQT3FkallPOGJjanYwVDJSNGRrRGJyWjk0Qnp5ZkRLc0U1ZkJHQ2FMQjAvMHBKY1Bxc0tJVVVUTldCK1dVTUt4VnFBcVRoK0MrQ3lMYWYrR1ZSaXNiMU55a3dLN2JxaDJwQ09mc2tTUnc5cFRNbFlyVkNGT21MR0dQTFBEb241TzZYWWZxMjBQVC9TUGRHNkZ3YzU5UllMbWlHeXpxQ0drNC9nRUkyVk9EektZZk9iNmY0RDVjTVRQWDNZNmdZeEVFL21OSjhTWk5LOTV6ZUU4OVBFN1RBV0FEYm9DUnZHVFRFY0dKYXR1YmFpVHk3b1pGMlFCNUtISDdnNTVrclpUREY3eTRqZ2pnZElGc2lJSFBvM08yaktveXR0cUluZlE0VWxVVGxiN0VPTllZNE9RaUIzWFQrZUxXUnNvUUREM1hadEJYdXo4ZXpNQVl4a1k0U0FSM3lZbUVXV2tObGNySWIvZWV1Z1ZqVC9mUTdidGxaeENPcFlQWnJhQ3dadTY2TkpwSzF0bjIxaFN2Y1haM2tnSExPTXZrY1hucUJDTmVUdHgzZDBGZERMWlI3WmZYaVJkK1lpQ2ZrVEJtWGdPZnR2V1JlMGNyOUlWWTk1dlVKWHhBdzAvcm9EUlJzZkpYcysrR1djQUNHOStIb29NRTg0MDZZMWpDdk5ZZDFKU21WMG1IaVA3RHJMNmhGODNXdlBTcklMM3VORXk0SWZXT3dMTjNUTzVkUG1GdFRkVnUvQ01uMTZoeERoS2h3Ykw3cUxWVzMyUUVXeHV3cGtCKzNjT25iaStiREZ2TVVuSkZGQzRIUS85RENadFdGYW40NUZuQzc0NmU2cHdpZWczZ3MzRGNIcmxUQUorN2gwUGJVUDlxZ2hoUTZNeCtJYmhPVHR1Z2xqdnBJdmtrandsSWJkdmllNUVUVExPU3FIQnVJdGI4U2NMalp4bXhMTW5pbVkrTkF4MXlCbGk1NnZwRk9mVHhsaTZnZzd0UStxY3dGQUNUenkxa3F6Tkg0STlOSjRlcis5aGJQK3VpT2owSi9SZ1dpZjh0ZjZpcU5oQkxpOVkrdmJhNHprbjZtTFhrdlZPTnFDanhXMnFsQ3N6SXdXMXZTemFrS1RocUxYQ1lvTDNyMVl5QlBycDYvdFptSXR4UkdEZ2ExZm9TOWMxa1B3R01OMVd6MUtYYThnR0tvYnVqZ3NtZXQvOFpBTmtJN2gyZVJzN1VocEZiVjh6Sk5GUWFSNitwWDE0K04wN1FtRThXUkl3Skk2Wkc4QjdyS1l6d2NvMUlDZStobmpkQVJYSjdDSGltN2FDamhxeU9XQS8wUlhNWVdvYktrSmR2bGZYVGdVSHo5bkVPQ0VjeGNXcFhKUlpaTzZ3R1g5U3VOb3p4N3BBMXRPcFpIWmwvTFFnQWZUemhpWDJLMXNKcUgyZW1MWnFxRC84M2pxVXdnbUgyMDM0N2QzZlRjc08vNXA0czgrNlorOWRoM1A2czUyT2ZhWGJoYlJDcTlDdCs2QXZTWHNvczdJTkFSbUVHSVB0SGVMaVd5aTZNRWZ4bDkzd3o4VjJISElrOVVJeEU1MnFEOUxVZ3JNQmZQV3Nic0tWNmRMTS9EekJrejZnMXY0azBMcGVXeU9KWVc2UHd0UUdNT2JpQnl0YlBTL3dGZVQ0bmI3RU9hZGRzMDR4SHdUU3NYNHRBSUdwQVgydjZoY0U2eGI1WGlzenhXbWIxczBpUXc1VTNFSVd2MUhBRFFZZ2hQSDA5OEM2c2k2aTZaZjF2WmFNT1pxYUlrTGNXQk1VTGY2ZFZJM21pSFNCUnNvNDZVZmo0cmR6WW0wcFlDSkhGTlkyQjdXM2VraUFyb3dFVXM1eE9tU2pDUXNKazhVYmpkVVZ2YXlIQlp6cUQ4NlE3QkVJa0RHbVdPL2I4dHl3ZDJENEVraHRMY3FodzAyeTRkeFBrRTI1dUltNW5EVzlheTFwSEVTZk9yOStTSE5TZG9jNVdtdysyMzZRdHVLTHFnNStjeVcvOXhaSCtNZjFtMi92TWN1VEQ2YnoyTHdHUFlQeHZiWFg5N0Rjc0hlcHhCeVlOeDhiaW9SRTF3U3pTNi9nZ0J4UVBCcFREa1ZqdlhtNTBjNStvRWYwcHJCOVQ1TTdlS3NCaUJsekd6dUJIM3BDbE9YMFh0UjBiZFRFNFFjeXFkSC9RRU1LaERYRnpPemZGdmplM0xlTVVvWkZSc3dkaGdXS3FRenJVSElJM0Z6ZE56bFZrNlJFQVF6d25qTlhBQTllVkVrZ2xSbGJwaVlNdkdId1dpQTZrM2h3bTdxS0tPQW5PZG1jSjR6cDNLZjlpSXBVc3BYMnloZjRzUi91bXo5Q3Z5K2JIT0s4WE8vUFNWLzlvYjhTSEdyOC9tZ3gvVjk2cFdlS1MrSWlhOWN0YWpTaE4xR3dmcnJSbnJIa0ZDVUdJYjJ6M1VmNEFhRGV4aGQrR05zN01TeUlITUhQcDJSV0FsMDBZYXVSeE9ySDZNOEh4S2I3UE0yUDJCZXduTEFSc2NLZEtBMnE0VXIvcll3N0FxcmNyWkJRa2w2SU5WYS8zenRxT2o1ejZET25TbmIvRENHK0h0UncwZDRWMW1Pa2g1SDhhUFdERXAzZzMvVTVuV3gvL2VGaTA2bXV5WWx5a2VqR1djOWtiSlMrZktzaUhyOGs0bU50SDUvQWF6dzdoK1dCZ1NIUHliZTk5ZjlObDY0cDVXbDNUYS9ScE9EdDlmVDJTa3d3OHhxeXg1YW9ncis5WElYczJWVTh3ZmNlMEozY2c5dUVWYVprR2dWckNZTy9hZWNydXdPeThocGJldW1PbG9YSFlBVGFoeGZMdk5JL3FJYlR6M0FQMmxac0tnY3JSMFpXT3ZGVS94VGxpUVJKYk82dEdYendDcDVDS0hmdnkySS90Y09SS1FYelNPYmdZamNuSXJacHQ2ZjhMQVowZ1I2cFYyQmJTTTNxdHpuL3A3ZEh6dTNLTEpSVVc1SnRMRG82bHlVQytGenN6VUl1T1VYcmo2SHVlZkdVNHhNMlNob3gzUnQ3blV5M1krTEU2dGEyWUxITzNrZlhrUjlGZFpoZWlaS1NHNENldEVhU0JjaFVBc0lvWW5BZ0pvSUZMQWhWaFB1TFIwUE5iYUg4RjBtYzdhNDFkU0psSGUwZ3UzZ2ZrQXpMZDdKWWk0U0YvREZKbUhOQnN5L0hGakxUNDA1NE1DS016Yzd2OHZpWWsrZ3FiUnMzT2hTakI3dTFxa3E3b0RSd0NhUUtocUwvc3dUREJXVEp6dW9GZXNkWEd0NThmM3JQUGpabi9NNVBkR2Z0RFJTWEducUpIeVluOFpZeUd3MGlwcHdQUnZVOXh6RnZXNEIwV1hsZUk1TXVHOVBXSmphQmovMHJQV0IwYmxsTDBKdDJWdnkxajFxK2t6ckxsWEYxZHArSWFjNm1ZQ0pjRDVQZXlFU1d3ellQcXh5UVpad1h1MGNIMko0NFhmR1Y5TDVwQ3ZNOEVHUlg3TE9CRHJyZnBlY25ESE9KWGhaN0VnS2doVkY0cXN6bmRPYUhGRDd6cFJzeFcvWm5yL0pNdWEzclZHc1YweWFJVXFYVHpJUE5YZFVsYWZvOUtVQmh5QnJhTnZnNHFqV2lJS1dZZ2tkVHlxZ0cxVEFwZ2tvYXV0MWIvU2lzKzRxV1MzR2Y0MEJ3WjU5d2xHeDZDdVdMSWppRTFPTzRHUUMwZFlMWFRFOTBJTStFYWRydVBYMUtDL2pHK2dzMWI1R3pVeUVrNlBhOU52Vm1Ud2tndmFFRG1rWDlSRStJcmNWKzN3S1QvWGI1czFyVGJSYWlKZ3NoblVUTmlzcmFXYi95bUZTNnVjeDJFMUM2SGZ6MEFjYVNvK1Y2Zm1ObjRMbEpvVnNpYnJKS28rczk3dVk3cVE4RVl6K3N4YUN4QU9LcWpUUW1ZYU90NitUL3ZNMFlkWkxWb2hJRDcySm0wcGw3WnpYUW1JSGNQMFhSZlNGdURlT1hzVm9xT2hEWjlzNS9zbjRLMmUvbWZUdXcxR2gwbzlYdVZBQ3FpaEhVRHFidURuMktLdzVwbXVjRU83c0RtMUNvWjJkd1Y2NGJoY3NVTGx4Zk1QTEh1UEtwZnE0c2RsaGpzemY5MGlpQUVtcEFXRWpFTVA1eDFhUDFuSzRQNG9tWUREeUlsR2NlVHZDZFpPS2V5a2dHOUdwM0ZyNTRuRVZaKzVqSC9ZUGxwak9NTzdLOGNVY0M2V1cxVDEvTTRMNFZhQUFSdVY5Z01BbVJVd2NhRzE1WmoyN3YvVmxKUldINmVBc1pkU3Y5dTN3QmxRamMzOHlTZEswTTAraXlJYXZwaW9CemZmaStQT0kzYnVIVnRIa3JVWUV5d09zbktzUmNsbWF1NFdkQ1U5Y1IvK2kvakVuQVZpY3dmRS8xb2ROOVlCRE1jRjRzcmpIZ3oxWHQ3TERnSEx1cG9LdjVLUmxWWHY0VGZHVjVpcS85ZU5Ia1F2blVVVkNLVzIxNkdHZm5mMENnQml2S1VNVVl2Szd4SmRoNm1WUEx6eEJqT1FQUFJzZk53K0VuQkJmOTJzdzk2L0dDQ0lpY2gzWG5PQmZyaXNldkdLRlcxczRLYk5SK3p6eVB1eHkzWms3VXhFa0s1enBWNys3Z0RCNkpNVExPSDl1UDRtVDB2dVdIRjBPR0xMWm0wS2V3dE00MlF1SkhVelZGU0wzVlJ6YUVmUm9xZzJVTHB2RENjWjl2WTRueUxDaEtKYm83Ui9BckV3R29FZldSWU9sQ3FSNThrYnJmNHY3VUUvazdpamovWW8zaVRuSjJmTWZaVmtMUG1RSTNDODI1OGdQMWtPS2tuaHRhU1Yrbi9CbktScWhpdyttTWFMTDhkMGRVeXNIa0JNYjhtVHJwNmloaXJDaWFWWlJ5Y2tSVXJ4dFF0Um9TakRiNnBpeUZ6V3BRMzlkQzlYV3F2cDJhQ1ZnQzJtT3RoUXNLNm5QWUFrd01oMFVwbVN3Ukt5UlVRSjZQT0VKazU3UlN5OThhSEJxYndieGFQTlkyOU1XRXpxTXk2cW53aXlSc2FIdC9qTEY5RGFLOGlodXhsa1VRbllOeno2RlozWUFCWWtpeHpPOTd1ZTV1Q0lvMk1CVXArWWlseDJZR1ZvUzBoRzJMQWRydmp1Um9OVzkrWnhtZUJOcTI2TU5lSVFmbEFuQ2tuWGMxZnZpVWVaOTJLNkFzT1NVT08vbWRjWENRT3d0ays0QTQybE5OSjE4clYxUTQrc0g4SW45VlVWL1lFNlhzbUZGZ0ZQNG1OSTRGdDN2aG5lYzFFblJzVFhGRFJyL3UwMHZ1VmF2ZDM1aUwzZHQ1MHp0RFg0OFk0NjN5YS9hSFNPQUl1a1o5SG0xR3l2akEyQW0zN2lEZW9XeDJXckNvMDJGSUhYd1g2b2xlY2thOVBkdDNCamRnV3ErYUduTlFPVmVYWFluQjhsQSt6by9mMm1uOWhCOHlXV3FycVk4WFlHOURycUZHSExKTkRjdE9aeEpoZ0IvdmRob2V1amNuUXh4NHlKM2duQllrbSt0VkJNbWNVZlVCRzE3YVQ3MUdMbmlvYmRZcGI3K2tiSThSZW00Zm1tTVQvYVA5SHNsQWxVTjdrY0tVQmVkYmxwV0NQY2FUMFZiejBESUxZMStjQ1R6VmFoS0FFbGpPWWd5WEl3QTR5ZzVZb3hRWFdJa3VoNjBFdHRzR2ViZDJDQWUrVnNXVG02L2xHdEc0aUw5Q3h5TmE0M0R4WHVpdEtaQ2ZRV05MV0cyZE1TZHlxak9iQnJObXRjMTc5MUhvVXhVRFRzNEV3NHIyZ1RZYUVxSTRMYVVSTUdFRjdJOTFXNmlTMFhzNERFZ0s0QVA4ZjVQYlhVb2Q2WXVuL2FwN21pRzFrZ0s0SFlVOTJWOE9WejhXRkRwSTBqNTlLYW1QK3FpaVphaytCeUNFYWRNV010OGZDM2VKclcxbGZ3QW5GT3FFODFMZmJiSjdqMmFrMnNzV3Bjc25MY0RtWWkrTitDVmdkb1VLRGRQOHU0TTllaDBxUjVzMk4vM29RTkkwZlhRL3FIbTdBVS9FYTVoSzF2TUhxOStZTlFwdzdOcjBCeTBIZWU2eWp4dkZuUVJBbG1jS0h5em9Yc0oyTllCTnNXZHpiT2xlWkhQRUFkTnhpcS9vMkJXMXFHeG05TWRmZGFMbnp0TUZoMFA1TVE5SG9UcTlRelpRQkRxa0tncUpsbUJnUEdPQTFQOHhKNU9lZEJXd2hUTFJKLzBJY0sxNUNBUHVTamUwTWRPRHpMckVudDF4QTVPM0J4K3pYUHJBL0JZeEczR3g1a2ZFZnBXN2NJL0VtSGtYaXJVTHB4T3h0NWkweVFnWG5wc0RXZmFZMVk5OXhWdHZQK2pOOGxPbWRXcEU4S1hJS1BSS3hvQmxwTk9FeXpSVkh0VXRRdHl4YjNyUDZFVERPOWdXWFRjbk12UUtUWGJwM1BqOHNoRU9CRE5WbTNzTFRoMEJ5VU11eG0ybzNEdWl5U0x1NHJuakk0c1lNSFhQZGZtQWJVV1oxdHZvS09XZW02RnZxOEI4Zys1elpJalE3UG41NG1lZnp5M3pSWE1VTld4Y2Zid1kwVEhxVVpsOTc4UVM3SVlkSTc4LzhCUnBxRWp6Z3QyeDFVSC9JbWU3L08yTUlKN0IybjhKLzJsTXNDclpIWVpmMktIZEJ6Nmo3S0tVS1dqbEdYT0grWDNNenFyemYxdXA0dXAvN2VwMkZoKzlzQ2pvMVVRL2NFNm1CeW83RTVOQ2U1MTl1cmE2MFRGdmRJYlowUGJ4ZUhXajl1cytpS2RaaldKTzRGdXNITmxscXNnaEJhSGhPaFlqeUl5RHZ6QUFUTWowL2VPSStDdE9UajFQYXBZMldhVXlPWFhhbnpHVXo1Nnc1RmovUkhEU2w0N1VnaElJWUUwQURTV0RGMFdoZDRMcG9BUWpQR2c2L3BHK0lPT08yZkM1dGxOVis2SGp1dnljRnhxMVljMStKVklUNHdkUGcxTjlRY0Y4U3VyQkpLRjZoSkJGeW5ZQUhNMyt0c3U0Ri9RM2djYVNjR1FGWVVVNm90QXRJYUIvMGl3WU1DTWRhYXZGSUZSS1FTNmxNb0t2Q25CODh3MTkrNnd3T3BzTzdpVHg4V2RIWXZVN0xsUi9SMWNaUXZXRnI0dnJtQkJzdzhWRk9UcGdhRHprU2IrRzdFeXF1cmVQclRIRTc5RTdadVIxbnFWR25FanViU3pabXMzQmlKdkRTNGRHOWpwbUJvbVluNHVncFp2aHlBT3QySlR1VFZraEtMcG9QdVpXYjhRdFR5K3BYakNnVHcvelY2MzNsWTduc3IrT0lsbHlTVW1vOFU0Z294VHJLOXBoYW1Tb1plQ0gzeHpUTTc3dmpEU2lESHFuSHcrOW9yM1Z2cXFuTXV4M0Q2bTFXc0xQamFyaGRMY2lyN0t1VW5xeEYydGwyQnF3eUtCeGJvV0tPcHU0d29Mdml1MjU4K2ZsNVE1UWF3eE90M0NvZHFaTHJpbnd4M293c1FObFRqQUM3QlViUUFhQmVZa0JJdE42a2tPcmVaTjRsU3U5a05xdk9GY3E3WmlGbzFoUkxiSHpac1RqTWJsd1VUN3VJUnBuNDBjUzlDdVo2bEtFSnpNOGkyNmVDTU9pa3dNak5yUkhHM0g3R1N5WUxZUWthRitzWmEvVm1PdWp4MjFHRkQ2b1E0MHA4SXlnMlJJY3h1TW9mOWhYdHNOZERDdzhvN2luSVhTTGlTbGZDOFJvenJwc2J3NlpIdDQ5VHFrVzBQblZvSVlFVHNRa1l5ZUJnSmo1dWEvbGkybGdvT3RlUHBmRFlRU0lMbnc2blNhUWpTbWsrc3ZDbzE0TUsvczB1YlRCdjNUSUFkamlPWDBicGMvbnFQQjdOcGJmM2hQbmI3WTYvTWVGRks4RTB0ME5BaGpBTUpQdVpHK3hSa1p0bUpFYmVYZUlZQXJtUXFiRkZXUlFYUlRmVzJyN250Qlc3WE9lc2F6ZGdrS05ET3R4b2NrZlNCbnIrNDg4SE9VTE8rVXlaVTBLZHpGSHByY2Mvc3QyMWdQTkoxL0ozeEsrM3NxaEx0V0Y4ck51MEkzRmNmdHE2UXF1N3AzYk5yc0VjY2poMGFRa1lXZ3NZdldEalFWYWRmRE1RVU1CZDhzZkMzNEdwc3pqV0VFNHYvbU1ueTNZRUJuT0V6Zzg1T1crREtuYk9KR3h3R0dUamMvVDh0UFRjY3BJVXNOb3V2Qm1pb0FlVGttOE9LRGxoT2lFWTdwMkdDWmNxUUhZSmxZWDAzakZjc3pLUjdRSWZxNGpaVjRscmlpQ1NDYjBTSFI2YklkdElxdngvZ2lkUE5IWFZGUVI1NlFoVDE4NkIyWWYvUlc0ZXhhQ3YrcFhxMStYbmdjN3pudHN4a1RwUytJVmVuUVdEUytxdDhwYnpScWtRVFljakNPSStmZW84eEJFY1M5OUg4U1NoOHVOSEJic24yYkxxWFZLMnZxS09MMWhFZkhuYzMra0VhQUcyRUY5NjNXUElXaDhtMnJPTm14ME5yV1lIeWlDZ3V5ZmI2RTFkYmFNSlk1a1BpN3laSzNQdkp3V1ZmM3JleHpKcGFTYUUxQkcxN3V6YmlzR21IWFAxZVBPU1BPd3ptOG5hNnNkeHdqWTlVYXhNUjk4eERjbEJTeG9nQk1zMnlzbVo2K25RTWZ5NkRpVDBIa0w0VlAweHl5TmFPVURpT1E5akZZWUVTd1FLMVp2V1NSY1R1dXNmWnAwRStrQ3V0dUpXQll0ODJTS3MyVVplTi9yRHFFZHFwSXpveFozZThjTlZIMTM3ckV4bDA4TW1FNktWb3ZYanlxa0lrNU9SNWFUNDJ3OEd0b2lJTkF5dFFsT0RBTGF2L2VqZFB2SENteThlWmREQ3JtRCtSSnF3ZXVsZ3FGcFAyZjU0UVd4b1JicnRydkE2czREWks3eWdBbklIWTVoV1BhNm82dDgycGYwQXl4Q3lzenRIZXRPQytxVmJFZUtSaWFKNnMrNmhsWDBTV3NycDNwTk5Xc2FHMkhIY1l5a2tBb0xJRnhCYS92UzdUTWdQSElOQzFnT3RybStMZDFFR1grS0d5RDhERmhROHVDcFhFTWxyZTBObWhoT2FyQXpmd2tZUlRqMThzNEpQMzZIWUdwRjZLVy8zTUd5L3lOTXQ5ZjBOWjhuc2hCM2h6dXJ2MWd4QnFCNFV0WS9EL2NONWFMakc3cnl2dnN4RGw1OGFpTytEQnhGYzBzV2V2c2E4SEM4Z2oyYzBJei9jc2ZOSVhFL1ZCOHE3QUJVamRrbUxId2RrWDNCbVpEem5QbHRhc2ZSTGJTNWMzT3pFWlZ4VEdNaWhNUWtscGh1OEZjNjBObUxmOVdGTGh5QTFVTzh1QVZ3THZETVRJV0tsTTMrTGYrdVdkdFRUL296U1RBVHI4MHhUeFBkVjhNTmVEbWtTeWd5MWtDdzdld25rcUpHTFhRU0hRYkQzTUs2MG92dFZsUlNWNWg3ZkJOOS81bnBUdW5HemdWODFkU3R6RUdDdHBoV3QydS9aM0x1d0p5YXFtWThQNGlucTBSTjBiMWJkMVJQek9ZYXBkdDgyc0haSnArZ3lDWGR6SkhIVGhOM3hoWTN3MlQrQWkwMXVQZTk4YS9VOFBocituWlVKcHhtOXVpMzJQR2tvbG5jejdWTkhpRzZmYXVaQi9MQU02c1JTcjRWYmt3K0h2ZkxuRjhydVZKUTV4bmJyclRWdUhEa05RY2ljV2NyRFRrZVU2UnZ4SG9yS3ZyVTVqZkE4UEx3ZlNaZVowdC9DME82UStNT0pTZWxUdXgvZXlhbjJEU3c3emFJRGs1TW9UdzAwaUhzZzdmY3ErRnJSTVRDZDlHNFBDQVhpcU5NSUhFUlFlekMyVlpmL1lKdG1CMGphZ2xycTRZb3cyV2FucVovaE5POTJVRnVxbll1blMyMFN6bmVPa1hFcFpnOWJ5MStyaGliWjhndE1FQXpMbkoyTWhqcXpNbEJXaE14bmxTQ3pJQ21QNXhBckFNMkhqT2J3S2FQOFVwYlphMTJvdVY2Vlkrc3BtWnk5bm9WQTMyaS9sbmNJYVNrNGZUVThJbmFuSFlGeXR2K0gvc3Qvc2c2U0JIUWEweGhIZkxxamQ0V2JpOUJMOFl6ZzJJWDFqN21xQksxMlRaQlB0VXJEMkhLYWlRcVNvV2VlZ01FU3ZySVBnaTMyVXhNa3B4cFV6OUVMaVRXZjRqTTJWU1ErYTZrVnpuNFZDOEY2UUNpa3Rmdk1aQkdSYjlpVmlNSWZCMHVmQklBcHFZTjByYlJLVDEzbUZYanJsbFFwcG5ONkEzZ0tFNVpIWG9CZFFvcUhJbmZPVWhneG1yU0ZHM3RHaW1kTUY0THkwVXQ4RjFQeXJlT3RHQ2JLMGxCeVo0bi9PYjJ2cS9GeG9zcklVNjFIT1dDckI0NWkxeGNTOEtpNWFGNW1SYWpJN0FHSUtzb0VucUtQeGNDVjh1dG45YWlUWjEvOUN3WFdtdURLMGl1UStORnJualVxZUJUY2tMYVBTYVF4NGh5d0ppNG9PNktGUDNXNzNxVkp5TTNQenI0MmRCdHIvUlorRkdZTVJtbEpQVWdxQkhkRXRBeC9LR3phZzJOeVFBbHI4d09nL0FjYUxVQ2M2bGJzWUk4aFpERnp4OC9jTWhHN291UDIvUXhCUzd3U3MyZHpHZkZ3OFNtZkNQUjRDMzhOMTFWTmpqb0ZQRXdxSFoxWDBUZ1N1K2xPbDJUTFhPUUNsTzdZQjBJcksrSkMvb0l4MkdscDV3UmJOQ0NMTkc3Sng5RVRsZFFzRE1uZ25CY2I4eG1kNlVYZkpCNlJsbjFLZHd3cU9PWHF5L2RxZ2RudEljMzEzMzlnNVB0U2RGTENkWmdET3JTMGJSM0JVcWFsdlpna2FwaEpCNE5kcnlyWUtPWmYzbmI4TVorbmFYdHNZa3N0bHFOV1NMdHlwaEdlN2xwRUFFQkgrdTl2Q3ZGUEluNWlHVzcxRHllRkVVM1B2dERJd0xBRFgza3hlem55RUpwYW9aTExhNklybStubGdheUdrUFIxRHo4MSs4UzlzV1RDalJEemdxMUVHNktUcWdWVnErN2o4RkppSE9FS1U1bWtPRFV3alBya0JaTXAvTW9NV3RiWENQUFlmd1RJTWpmQzNydGhTOWVkanl0b3VGMnN6M3owVVVsVGtRR1hEVlZXUExLalNXc1pOZzVwdlFFNUQvSi9ZQmZNRkQyOENuOG1zR0tHa1FuTURDcWVQbGtrSTF1d3Rtb01JVVhYNkl4VU9VaFA4Y2lGUFhoMXVJdUFHa0RpcjA0QkUrRGFiLzhHc2lqNHg2RzBTaEVWSkNYVHpBelo1eTR3ZlZTQkd2cVEzQmR4MnpqdnRxUEYyc2I4WUV2QWRITHRiTWRjODFRZVNlbngyR3IvVERSUm9xeW1HSGRYUWVEellITUdlUGhyMjZHMGpVbDA3ZlZETDhta3h5S3kreTNUMFlKekM4TzRlWEpOS3liWTBLYVZ1cFYzOVNQV3I5MHlnVjNCN3ZFR0VSVys4MWthVzNzRGJOb05kalo1YytxeXl2QkRRMkhQYm1ROTY4eVZuMk1MK1NPaFZURUNkNjMyNWJmUFV3Vjdld0Erb3VVSHl3RUFTMFBYNExhTGF5MkRlSDFHanNiWVU5RVlJVVM0L09CNEJER1dreWZQTGs2SXY3b2ZVclpwYnlDSkRrSTFoQkpNbGFZM0cwalVCQXlqVkNFVUViZVBrZjRENGhvMWxvYjJOVzd3UUpSM0x3b3Z2c0lRWTVnMnczWlJBWUN3VE5QNzBRK1ZETzJKOWxEbC9BYis1VWR4YjkyODNFMG9PYzQrRS9CSHJxekJIc1Y2b1N0bk1OczlsSzdUVThsRzhheDNoU3hrR2tSQmdZM1FZaXQ3ZUdkYVQ4UGdjUGhqTjZMTDFTb2pBN013RmNhdCs0T3cvMlNXWGFpK25JMEgvWU40b0NqN1FVOUUwczIzZ2lqTTJaOGRiUHptdmpNU00xb1QyT3V2WllpQjdPM3lrSVUxVkVlUWhpQ3V1eWxjVEFQS1RzWTM1VkhnbzFKUEVZaHM3d1NrZzVLRXpDc2k3SmdWa0dFdWhMeEU4Lzc4aFhTYk9FUk9PTVA2VnltNzVrc2NxRjQ2S25NOThLVVgrVWJSTUN6SG9BVXdOU3E3MmpjTCtTam0rQmtVYnlZZ3Y3WXEraUVtTnp0U1Z3VEV6NytBcFhzK1kzQzlxWHNRUW9qTi9tWFFBR1VTcWFlR1VMTTBZaFpwVks2UU1jNGQ0Y3BpeFIySjB5R2E3Nmczdi85QW1FQUVQVUpwcFIvYU1BOERLUDdUVC9KS05Qd01LMlBFTjF2dzNIU2tDVmhCNVRYWk40QVlqd1NTV2JlckJVM0ZoeUlsenBUMmFHUjE4WFZITTY0WDYzVW1SbVpLc1dYMHFaaEsvQmtUaGRyUEtOUVZUd0tzQkpRVG93UERsQnJPZ2pST2dJVUo2OUtkOTlzSTI2Ym1xbEN3VEorTU94ZDMvVEd4Ti9OVjBnYmVNRnpBZDRVVUd6dmUrcWxlU2hMSW5henRjM3ZyQ0FqbWp2MlNRaXN6Q3Y5SGM1ajRqaGxPWWpSTndsdHYrY1FIZWczckdxNUJVcXdCbDR0ZGh0S1VuaTMrNE5aZDFPbUxHdndvd2dnR0VORXJsTTNjdk9MeVJRbDYwUFVOYm85VFJ0RDE5M2liVUZ6V1paUXNKM1Q0bmdjcEl2bFJRcll4aXNoUFlieUYyVENzQ3JJSEpua3R3b3EvaDNra3k2WFRYcnp0M2J1cE8rVnZ6ZGJ3UUNXWWhiRjQwam9HVFdTUC9rYTd6MlNwcXBrWlhJV2xBS2kzZUovMnNkU0xZL0hxV1VjUjBZeEZLN0ROQWR0VENkbVRhMkFVVkMvRGF0dlViNHBCSW9UU3AxMEdISVdwUXRqTVMyRkhuaDg2QXQ4dGtJTTBIL21kVVFYSzJKaG5tZWRzdkRza0tSR0tkVXNFb2xWVW9mWGtYblZGR2ZLbEpXSFBiRS9xdjNUTFlyQmt4TG1VZCtJQWp1Rk9QQUprMytBVUNodEpLOS9nUTlyL05ZR21IVHNFS083RU9OU1VXaU9EODZhL25CZUdLeGV1ZFE0QitOSzFtYVAxeXI3cDMwTHBLWjBzRVRtOURwcWhnNUxrcy9RYjN1U3lEQ3hIWEh4NzlRUDBsRjJJcUpjVy9qNE53N0VLTkNvOExKRDBydllETGdSdUhrbWU4aUtIK2NGTmh0cm55ZlMycDIrZEVMM1NRaXdlU2lRSHdHRkY1WVFOSW5TVG5WeVU4Sk43bDhnQk55elgrSXJFTzZFZFBkZjJZbk9qc1JBNmRuWkcvaHN5TlNxak9VblEvSjVodTQrbVo5SFNFZGRGWDJPZTc0aTkwVVdWOFJXLzFmUTNMSlNEVWU1Y0RBbzJaVHBVMTBTaFRqYi9HeEZUWFUxQnVtN1kydE9KeVZ2aTNzYmRPRDNNS1hrNXM1MHVMVGgxd1VYVXpKL0xMMWpOMzRMclJmVTBpcmNoUS9tMzBjNEpUOC9KY3F4RVdBUWFJOVplSThrRDRxcUtVVnpTSWowa1dGSzhLOU43QWNWVWkzeGxlZ0NuYjBCbC9VTzllN011eDU4TzNxdDVjQmZ0VXB1WXh0bnJWdXk0cXUzTmp2bW9xRXlENXRTcFRFZ2hEdWFnbGlEcVB5SUJHWmJrdExSbTBoSkdvSy9MNjZWTTM4Tk9EMmVyRTN2VHBBVjVicVI2Z3VIcUgzeTJXclpCQUQzVEJNa2ZYVXZ1MUYwSzNrK3U3UVZHeWFxaSt3MktOOWtYVEpoZFhVWXF1dG1NMzRGeCtESnUxbWlEQ0RRZW9JK21DWUNpYTZCRStsY0JiOHV6ZkpHa2pvdEt6eEVmcWZLRkFCUEVFaVYwRlcvYk4rSk5jM3V3SkpielhwRlJRaWlXb2RORTlEcVA2VGwxcDNnYTUxN2d0a3lRVHloZk16MkZicW1JbnQ4Rk4wVGd2ZlJlR1dSdm1CWlB3bnFLaldkWnpraWtUdDhLRkFlTHRndE5oc3pHSm5LWXRGUVpjeEpGd0RLL3dTWTl6Tkk5QWpiL2JheVpML2d6em9vVVRUVGJWTkp0TEF6bmhUVzdHZ04xUm1LQit0RjhCYmNhT3FITmJaUnhRdjZYWHBTcjdINEZrTUREdWVWelV6aEp6a29hNGdSMm13WHIremFTb0hRVFVYTlJ2Vm5ib0VpOWo4SEx5U2NJVFV5QWxjd0hBUkladkNqMk1TMEVqWGtZMkNRV2RaYkxYdVNKRUpNZEI2bUNsOVJ6b3lCdG9XUk1GNEsvUUZEWGQzeUNPdS9DRktkcFRmbEtCWXhVZkZUeTJSb0dQYy9PQTArV3FTcS9ja0IwdE81VTZPV1NYS3BJZjhuZXhXK2tsdXFMU0JWcGs3MnAyQmF1MURLZGlUQU81QXZJVEJNUmRYRmVCY2ZhODIvSkRyRGVvTUx4Y2VTdm16RnBuN044dUdwaVVNbXgvaWs3UWQ3YVhBL1p4U0h3NUttb3lqS3FRckFyUDBFQlY1U2tYT0FFK0lmZ0RORHF0cC83YnZUc21ZYW1GRjRkUTRhcHRka1d6V2VlcThIbUREVnR6UGhLV0VtQ200TWFsY2Fqcm1IZ2ZzUzF5WFdGaVNnS2xPeFhIN1IxazZGQy93QkhpK3l2eUloYk53Mk9jeGVObmIzSk1ueTdBWWhnUjJKaFpsTXJpUkh0dkFkcjFHa0VkN25SS2lyUHhxMjFudWxIUDRFTnBTTFdNT1ZTQUlWd3JFN2tBRitEWEl6RDQ4UnJtT3NkTklsVXdaZndGUmY2aUk5Wm1CYjdNNEpNUHJHTEpKQkJVR3Y2QW9aOXBSRmpRY05FSC8yNzZOOUg2MTJRZGM4MjA3bFJZZFVPMFJKN2dQanA4U2tncTFPWUJTcUVkaVR5ZnNScGVOanJaUHJ6c3p0YXNaQUp6QWJkN3VwaWRXZ0xkTVlMbU85VUtBVWR0WmpuS2toYktxeC80UnJHTXJLM0dwMXlGQ3dsSVBYTTk0RTJrYVM0eFZsaU9hb0llNDJncUY3dEdKUWw1UzJJS0tjM2pyS0w5dWYxSzI0blN6OGRUTDVKbFp1QUluVjZzbkVCM040ZE9TaEJQTjBaVi81WWpraHFzV1dkM2xyQXRRVEhHSnR1amovbkREb2J0ckh0MU90TFROdkFHNmVFTkJKV3lqVTBtWlRaZW5JYklDNDVBVlFHckhMRWZFRGJxOFhLck9YYS9OcW5mYlFUc2kwbVNuM1R0VURVNlR2RFA1QVlZVnUvMWh0YVY4Z25GaiszWGhxUituYmo4dm56dlZpOWNlT1JyRjBBVXdUSFZRRE1pVW40WmVRaWxHRWFPeW1TUTZseHE0cm9MbS9GZEhNS01naHNoZTNLYjlyVzhhT0k1SWVnMWM0cCs0Nk15NExaZHZnNWhhU0ROeEVQMVB2dEEyNWI1T0EvYUVBV2xGcVU2NmUwSXM2YnJCbnhUeWRacmoyWDQ0eVd6ZGd6eDBjQ21yTjk5aEVKUXBoQ2V6cUU1SXpDcFpoMXlNRTdYQTRmSGV1SzJ5OEpKckIweHYzcm54WHdxRzRzN2diL1dFVFZYdUxGaGtIRzYvaTRKREV2VSt6NHFvSnErVUxPSnE2ZVlzSlNvUW53QUhrejhRMndQeVpOVG9KTWtXYjZKdVFIT3hGTlgwRElyTWdGZ1NhaVZzai9CS2JRV3U2TEVneEVwZzJIZm0xRmVPVzZ6K3E5TitzZ0MzR1ExSjhkN1ZWelRORFo4L25CQjJYYno1Z21FVEZzSUllWlR5QXNzMXBuSVJrWm50WHMrWnBBMHRSN0pFYVNCSVprR1EydGhBRC9OaDVyRnNpZE9LREM5dHBUd3FDNEtXRUNieXNNc3JhcGh1QStqOHd0UERYUTRmSEU5YWhvZkRSUEQ1a2toRTVjczRqY1NSakpMWjBUZE1JMUtPTUtQQ0VzRHoyL2VpUXhGNVJubU9KTTRNT3M5K0d6QWViR3FUc2tzU1pxbDhGWHJaWFU2K1hMUnNlc3E0c0tldmFHY2dBK1FRbzFEWWRzbVVhMlJ6ZWs4ZGxaeVRqUklvZjlZNmg5SGtNeUtJczQ2VGl6NW5hdDFTV0NONUpxL0dJMmZkRGtodU0zYzV1c29SZElEUkVRTlNvWHFtWjZpeEMzTGlUNm0zN1p5dkc0a01GSW0wRG1SUDR6cnpSV2ZBT0VFU0dPcXdva3dwMW9DV3Z0ajY3L2JTTHF0cHcrZThlV25WNTNXdTl0ZVpIa210eUp6QVdONHl5eWJPZHgwaDNoSGhZTTB6ZVpMaHRXR0ZoSE9QRnI4NmZhL2g0NWxCeitQbFRUbzFYN1VyRCtGV2VTN3l2L2VraU1EbXFxWTcvU25zN0JYcUd2UXhkU0dYWVU4OHBHNUNoLzFpRWtwOXcycjZySERGbTEydjI2YkZNalBaODZVbGdaZjFoRWJtL01mc1JHTEpUTjRta2VSWEhDRFVteTMyV1dmQngwL2tBeDJmR2pVUTZucVRGQ1hjaU5zb2ZiUVRlTW1KNFhqVTh2WERlanRiZ0ltRFZnbllsRGdUb2hiZFdhY0VYbkpNNTV0OTI0OWUvKzl4SDl0bCt5aVRtUzcwMnRQUWYxYVlqaUpoZlp0aFNMUzJrODRmZXJWc3FINlVTUmIrM25vL3lHQTQ4TkowdjU0ZjBFaFdFd0ZTaVZwbzAyc1IzSmNzZldCRFdwQStKSklzOWNNaEtwU3U4V21DbW50WHJDT3l4eWR6dE1FV2JGSGVBdGtiMWV5d1BOeDV6RndvajFWKzBacEpDaDU4TWU5NW03cURwNVRTVDlxVmc1M2ZjS09WVTRWYmZZMnQyZVBRTC9KbWRQU0RQVnZEZTYvWURyMUVORjluM2tkam4zNEFDL2t5dEdzbDViSFVYUmY4eTNKeXgrcGF6MHZoZ21pSVpqSElSZE5OS1hudHVoaVNWNVUwa3BWRjQxeERMQjQ0R3VMQTV4QiszZWExb1ZVQTJMQjJySktKdDg5dHg1eHJlN3RudEpTaDZGZUI2bWt4UUExaHlpZGtxeFo3QmRiWldvNVVBUW9nRlpkdW0yQUQ5RzB6RFMxUFVvTTFTQUtVK3Y2T1oyekkwS0dUYm96elA1Q09qSFVyR2xTRWFSS1lWdHAybWhSYWFYN0FUOStVREpSN2x3TTRVYU4yZHd4MnNUMnZQaE5oNVF1ZzNUM2JsYzlseGsyaVJheERHM3RVREI5Ri80QUVmcll0THlkTllPd044Qm85U2x5eHFtRjNEZWQrcWxPbFNSKzhUd1hQWkVKcnlJc0IvQ2hJbEovQURyZTVpQWFFZ2UzSUhIRHEzQ1FkdGNqbm1teW5wOE5JNWk5bXFLdnl0WE9pcmRCYWlmNHdVUThyVWxYVDJWUFJxSnh6Wno1SURFd2FXMkxEZmthNDJtbEdibWxSbTBvaEt3RUttZDFuaFJDTzl0N3JwMi9QcGpxRDV4amVPam0ySjVETGdkaWcyL0lxNlNJVjBJeDM5SEZzTGtzK3BETHpORTEyTzJvRVdVZXkva1ZkeEZpdDNCdHY4cExRaFVyOWs0OGsrcjFmWmxBOWF0Q0haTysrSEUyTUdxQ2IwcG1uY3F3SFUxRGswL21aUlN1S3BFQkwzbFdjTkJuN0ZzdHJvNlh6NHpIcFFjQTQrM2xhemV0MThuQ2s5YnMyd1d4blViTnZCRFBkcUNJanFjbGNvZnBReTNUZVltWlhMYmtnUjlQVjg3QWJraGNpbjdhK1Q1NTBRQ0JoWXEzKzhLR29rbzNlTThITTIvencvVVFSQlBkN1RsRk9NWVJzWFBxWmxubUhEaWdnOGNRRnorNkh6anlzbUFseEhDc3U2V2lyTm84WlVJU1NsVWdZZXJYM3YxaVJ3QllUbU1BRkpuVXR2U1YrbElNMkFvandvSDdnbmF3aTBYUFl4QWxLZ2tTcG9rNjVicTNrUGpIbk9Oa3l4c09seWY5bnliVllVRVJDOXB0MGNEUjhZSUZSbmRxcDBzVWh6NnFnSDNRTjYyZUluUU4zWHNvMTRzdmdzSXQ1d3htSnBUTjNURFBFU2orV3BsSzc5OFM5bkVXWHRJdjBXSWlINkxrbHVISmJybnkzY2RiT2U4dExyQncrNXRiWlNTY1hnZG1Ub3pQeWNHV1doQytPTWJ0WXU4anRnTFplL0U3bDNvWjJhUzYweEJMTFF1QjN4OUlIdCtpSDZURitrR0Y5MkdQaGh0VGJoWXRnaWlFYllScktXa0RDTlgwSllVUU5ZZC9FMzZvb0tYbkFUT1MrUGl0cHgvOG40ZFloS1Nhamx2KzBuMWZaVlA2TWZzSFBvMlF4U0tFd0luTDloa3RnRTB1QjNoRGk1UEptaUh4YWNkU1pmQ1BydmRRdTFwclBWMWdibDUvek1FZWphcllYdU9qUmo5a3NrWmJFRHpObHFRVHU3VGxkb25zQ1FtMUdySmE5ZEt1ZHJOOGxSbmhrVStOd0srVXJjVTdzWGRFNmhWV0lBb2doU3lCYlNELzE0andpcjZ0YVNQL3dpZTVuR1pramhpaTNIekpETkppTXhNY1Z2a3BmWGYvRHViU3ZRVzVvU3dCdy91ZzR6SWRCZzBVY1NBS21peXZ5RkZSVlhvMlFmWlFwL25PR3pZZTNzRlJ4anR3b3oxc1FIaGFleVRVZ1UrZFllR3NnY2daaDVHZWw3VVYxRjJJYitKWWZsbHl0NnE1VEEzY2FXSktxQ2lNVW5wT0RvaWRoNnRRMEE1TlNsM3VPcnVkMmgyVE1sb3VjVWJGTVlhcitIVzVWUFk3amUwOFFFNUhsVllDeDF4Vi9TNHpPejNqZHZGVnBHUlNqb2xxUms4Z3hGaWJ0TC9KTXpTOWNvTUdMMWRZRVVmdDIydzF2Z2FjTVZVZkFrVW1DaUhEYmNBMytjcEhnTGZHNFRuZUxNMmZCV2hjbUZhczVOb2ZBZ0Y4bnN0MjRBKzJ0ckVWRWM0aGVLTW1FSHBNbXlrcmFvYWswSGhDSVcrVHBRVXZ5dWFhaE9mRFZBNmMyYnN6UlY5SXpiNXRYUDVydlBUSHZ5L05LWGNOenZTaWYwcElPcEZhQjlFbGpaeERrNXZCS0dXSGVxSU81TVhOd0hnUnZORG9XQ2lRZUNwZzh6ME1GMnVKR3haMFc4OThYWWdNQVk5SFVZMjZZNnRZZGJYTDV5S2dmb1I2NXdobVJuNGh4Y0VnNWZlU0gwdU9XUzE4a0VBa3JDTDdtS1JPcEZxc2tSTVJwYjJhaXZSaDlLT0ZXRHV6WVZvVGVUMnlxaUlQK0tIN2YyQXFsV09KVnpPMnBxR1ZrMHlQbm5RM3RkQU9jL2V5YW1kMDdpSDlJUkUvcE1mdFVOOXduKzdxcnBiSFdxQll0SWtydFVaUDJ6Q28ySjhhM2F6d3k4UmRtbUFQaDdPejROeHl0dVREK3FCc243OC9Gdkp2M3NrUGJyL0pVb1QrcGtVOTFGb2hlaFpxOVdzVzNrdTRGY1BjRDdmTGVyZURmTm1ZRU5pNXI1ZENOZHpmNmpZUFlPeHBGNUMzYlpMZEViY1FzdUFmWXZEWlpOUHlLVWtoemRQRGUzMGNFcFJEL3N6Y3p0NFlGWlBEWjA1Z01OUzZ6cFgrY2FXVU42dWtzZEUwY1FaQ1hmQWkxT3hYUlhJT2VXcTJwd2plaG02Q0VJcXdhWWRwTy95ZGNVclArQ3FwckpVOUVZQVNsdWxLZEFVL1Y5ZTQwbjdLV09uZWtCRDJDZDNmSVhZUjBQekkxNG5GQ3ROeUF3dWZzdDI4d2cvTUNIWThWMFQ1b1djeE9HcGZ4T1hHK1NSMXlkV2grRnhtNG9PaEpvTWFPWWx4dFFNSE03ZmRHTWVlakh3YytyZm9KQlhsLzBtbkVkZ2ovbzk4NWxzZFVSK3cyakVKNzRjWHQvdXdTbEhKUy9ZRkl5WWRva0JVUW80dzhObUtSZ1BJYXZ2UG1Eb2JvRnJUZ1NZQ2tiVDgvV2Z4TG9NTHdobjkwTGhGRUg5WUlNZGRUb1dBclRnYVJPRHFacjNlbUUrUmcyZXZFcmQzVkV2YzhjUUUrTGQwYmJSTVdzanJ1VlZPMGhUVmdlcHM3a2pmcXVmVnFDc1FyRDlSMWtGb1RTVzJZMndQeWtEanhZMUNsekRnWGhsejJ0TldTNXR3VFA3cWxrM0tjMWE4d0lkOVZiTFFUL3pqY2RxM3dxNDA4SHQ0L2N2aUVEMGpGQ2pqa0xwdjNZM1RTSnlxOXF0TFR6b201c2dtZTMra1ZUeTdqU3VoTG5pQXF3QmJPVXJxRmhjM2VHbGx5Q25jdU0ycE5kd2Yza3FTc1c4a0ZGSHpPN0d3eEJJcjRiVzZuZVFYL2xwa0NGaWlOQW8zb1JLSGFWMVFmRXNHSGpMUDZSYkhPUXRkUWppcXpINzdnUm5XRlVwcVNjdWdDeSs1QzVTYVJBWGV3UFlzZjd1emZCWGFsNlFPNGI4NDREK3lVcGI0RGhlUFRseHZhVUYyUGJQRTR2Z0NjaU5MUUhmQTNuc2pKUkNWSjF6dkJ1ZHR2Y2ZaTFYvMmpIV0s2Z0VIM1BhZjhCVk0xNHlWT2xQQzNqYjczeVRaRkIySDdya0lsaUg0U1FvdCtheUlsS2JHS3VhamJCdXhUOTMxaklpaHRlVUZseTVpd2k5bndxaVUyR1hJSkEzVXdmd1BZRjlqaFhnVjRpMFVDTzEwS1VQUndGQWJuTW1nVHZkcUpyTkFEUGpwUjVhMHdFSVNoYjErTmNZOE90NXlMYlIzQ2RTa3dOQ2lSVmVKNUFTQXgxOEg5TkpVR2NKRENZQjc2SWZ1MEovZVJqSENxUnNmcW9nWEMvNEZWdDZhcE5zd3BaQnVHaXg0eUF0ODBYMVF1a3MrZnMwVkNHVEtNaGtwbTJ1L2JDQmNSQXdpUFNkTFJJV0VYQnNER2c0ZVpGenI0U2lyZGJNdEt0US93V3FyU0dIRldlaVE5bk5RMzFQN0dvQlRNdHFrd0xWV25HNEVtMEx1QXhyK3ZTTlZqczVlVDJ1dFNwTjFDeGx0L1FuQ3IxQVBvS2s0Y1NmS1VGMEFDajg0dnQ3elpqL2pJZmFsaGlrUEN5SllDaDl4Uy9YR2ppNndFVjc2UHVkcXUvaU90UGV1ZjFreERNbm1CNlJjWVNtUnNyMk1aVElzd0JVTmNRT093dUR0WHdRWFNjazJHTlU1dVVadDdsQkJDUjhCMzBseUlEbGtBNVl4cDRLbEZQeFhVallnMHdCU1FRR3hQQlM3UktSZ3gyREg2ajlPNkpiQWNWS0JUcWt1NlIvWUllYndVV0VYK2JEY1NtbmJxNWRROVFrVFBJVlI4NG5kUlRIS0xIUXJSQXhmU3JpTXJYNlJwY1prQVZqVFNqbVVmRVUwQVBHVm9YV2FYNjRibTAvNDdTdXNRelQ3bHROTHBzckVYZ2JSdzdtb1FYOGJYdUJWWktMUis3R052S0JKYWRSOGNDZGZnTm1hRjRMNWlyc2pNckdySS9OQjZuNzMrZ25VZmpLMnJJMURMN3lPU2Y3ZDFIaFlJNHFjRGVVVkhlcXNONXo2TTBwNnJqaWYyS0RQMkdiSTU5d0xRY3JzMjNTSlJERk5OWXhpKzJMTmRwQ3FTektqK2pEQmFtR0JVandTMnBBNmErYmtkQjliNVoxUGVzaG0rMjhKRnpMWEtFYkk0T0dOUlZuRDFGcXMyd0hBWEcvSGNvbllzbmNWbE1UM1cwOGZzOWk0dVlXek5xZE8wZ2pzOGNsMHN4czhLWEprM1VYTGszWHhUeGQ2UGdZMjBLakpmQjhlSldRaTFuV0ZNOEc1cUkyVkF3RCtDK1kzUFFCOUIrNSs1RXdVdDRSYmdzYXNWTXBVY0JORW5WSERQdmQrVDBjYnlFdEJiQ01DU2pndnZmUUZFRFk4MUhDWFYxV0R4eGttTGxZTll0Umt3RnhsQ3BEZUUvWHIxQnBoZUFFWFVUY3U0NHBBZm5xb2dsVUs0S2h5ajc0WW5tZUppQmF2b3oyekxlcWlJdXlwcVAyZ0I3My9vNlJ1QUhBbnRXQjJTWU5BSGJWK1dQdXQrTEkyODlYTm5rbUFITGpMNWNURFNhY213MS90MzJ1Sm50WDhOWHloVFFGaFpZSGJvSWFXaUd5bHgweTlFNm43VjZQNGovTGEyN3VHNTQ3YnhMYVUzSU5rWlBvT3I4RW5aRnpBVzFZdnUrOEwzaW1DQWNYdDhDeWx5bG9RTlpSTXZsRFZCKzdXYSs5M3FLcTRlbkNNQ202Wkt5MDg1K0FXSVl5QXNpcDgwNXRadmdPNkdWbWlxNTRmelNTY1JFZmdHRWZ6RDNYK3B4d2JOallvZ0d4cDBuOS9FOFJCc2ZmUkNZUWhtbi9HSjZKKzRpalRyL3FwRUYrT0g5TFd5bTJkNXZrUjdWNCt2VngxVVBHa1JVV2taY3FHK3hsUkNJZ0Uvd0JxaUdaT3k1Q3hEUkx4ZEE3MDd2NkNydDN6MTYwaUpEV09Hc0QzVitIS0VHSi95c08yMmp1Y2t5OXp2RVk1NnZza28xbi9TTGlER09PSGRJeTRIS2p4L0FESnRqNmNLYXBXd2xkc2JoVDlWa2lTeVdiU2FKMXZNNnpOYXUwQWRabjVEU21oWkEzUER6L1lBdksrZ25FRnExTDVqWnlldEl0b29helVoaFEzelhTcWwyRXN5N3dGZzE4L1p3UXh2cGlmWkdUekJ2SXVsYWdtUDhpNWFNYzNmY1Q4Rmw0OE9hMVdTaTFHM0JwR0lpVEZUeVNhSjMwem1DWG1IWnBRQmYzTEdPcnpEZ0ZkTHNCb2tOdTR1aTZLY3BEaHFXdnFrVk5DWWJFalhmZW12N3ZWbXRjY25XVFJtOWhGTG9MM0UvcnIvbGNFbFRpQ1ZEcVNDRHZxZlJqcG9qbGZzcHNFYkRzTEhEcndiMStPcnJwRC9mVjBlRzNTQ1M2czBGUysrcWNkZ3VPT3lEUENoTGdRRVRqQTA3UDNDeS9KWm1wRG5pVTU3VENhVVZwbnJjMWFPQmVhcngwc2JmVWQ5cHNJNytIZGszMnNiYWFBUk5vbG0yaituMjFUNFV3SHRnRHN6U1JCOUtxN29aWEJRaU1rckMyU0JRUU13QXVPM0w3WVFIZGJ5bTBrVUxoQmxSa2FLZE9OdEM0bXZSL3RBd294U0dtRnNzdWprZnNERk94M24zenBBZmtGY1dRVzcyRWJYdjhNZEE3UGN3QjJteS9XL3l0cjlaVDVKdEZPWG40SGl0NjhwNzNONllJR3kzWUhjWXlsUVJQUTdVcmV1cDFPcERSUWZ3STV2M1BhZWRjNGlRNFViZ2QwVDRZdkR3VEc2Sk13M2dZSGJYSXB1MXdacmdnNXJ2RzIwL1hPWUlMQWZCYUxjS1VheWUzT3l2TGp0MHZYQkg2VlpNWThQN0U3K0hDNWcxclZPVC9VM0VBZ3NoUEdZZjRIeER5ejBuZnp5MlVnTGpFazhiNjhzTjkxRko3ckN2YXJTeDdBcFVBL3pJTWFlbWpoSjRpbEFLSkdzNUZhTDRSZFZQQytpU0FlNWFwbDR6Y0RZMVR3dVlzM0tCMnZSWXdseFhkNE1uT0trMDRxTE9LSC9nOVRkbSsvMmNqUnEyWDNYRmZzcHlXNXU2bTJmVVd2YnJJVzNRSVlKbC9RaHp5VUxsWVMyTUE5d2IzZWdWc2kxS1hvV0tOUWpDbnRFaGxhTU9PQ3k5OWFjalZ3S21qUVVOUDFuNFgzUDk2R1V6OXJ6YU5BZjNHM2hVU2hGYUhjOXpGNHZtZ0RsTVYreERhTjdqZk1kWHZXOElocnh2M00zMHBpK0YzeHZvV01kWlB3NVdDWTVtaSt4Y1JyNUErbHRvQXBPL1pydFRJaFR2U3RKWjB5bnlBcjBHVFNFcWovcVRpWkJXYTl0aTh3ME0wc2gxOGdjL09GVSs4YUQzQTRNajJMY2FoYzNPRWZ4bUwwbUp2WU05bktrVzRuMTVQYXRBR2VQRGs1YlkzNG1PRjZkdXNKTlNXWmlHNVZkKzR5eGdGdmFicjZOcUxEMEx0TVhxQzV1WGVVTUNsdGtRVUgxRjFKVGNUU1RzZlEwTjdpMkROVWxXTGI1eXNQQlQ4RTRqQ1IzZXRlZmJINnJnVi8zTUt1bHlMOURySzF2UkJKTjlsUGt1VCs3dkovWi9VbGwwSGcvWTZIWjd0MVJEdkllNjByVmNFaDNMdkIvSVBkaHBTRjloa1BEdFpKQmY3YWlvNjY0bFVVQVNpemtsZldXTXZUcmNDQVRncUxhTS9pc0JLcVRSa0xMUEdDeWpZUUZ0eWxSR3htT0JUZWJwZ2dYZ3ZheG5SeGpzR3pKZkhKS2JLUmVTUGZVdEV1UjFJNk04MURnM09ta2dtN0FVZm15cnVtSzltWEV0eUJvR1NiNmpxcW82ZGdRUTdzTjRTS3Bxd0FJR0JBcGNNNTQvTmdjU2h1dHRIVENuNTdnbmllYWVobmxMc2hkTk4rZy8zVmt1L2dVUWh5aUduRmxpVVFaV1NYelRlRlNvSy94UHNyZmhLeWl3WFVzbHNLUyt1bkwzWWZqV2dGdVNpT3RyYW5JN0lDbk9HV1hYays1VSsxVU9GbnR3QTI3SExrUmdoUmdYSFNsRFJpYmZ0N0haTFpoczZsMzJFM1RKYlNWNjFhNDJxeHZUVDdjV2VaWi9HdldUcDJNOEd0RjlFL0J5R2RTRjJQY2RQbVpub0ZwTzdMWVJlZnNuaTVVMmR1MFl1YnpiSEVQdFAyNUFsREFsZTVwVUptSkRsQUkyd2E5RFFEbW1vQlBablNFSUYvcjVVT29WOXBob2tVTzJUVHpsVGkrWHJyT2lOYmVKMHd2eXRkY0RadGRRNC9CRzVGVFZVRUtDZU51N2VQZnh1NFVicENnM21xWXE5VHJFUGVreGFycEd4NW1kcVFsYU5VaWFabGo5eURZSDhicy9HKytkMzl1UmxnTlJMWDd1UllmY2tYNHNUWDBiNWJuWFRHMkhOR1dpZ0liVEVEUTd5bFk1WnlOV0VwZmNuZUFML1l6bCtpOHk5VFdoQzg2dDZwRXJML2FOTWFEQ1ViWjYzZlVoVWZYNy9hOWdHVUVRcm8rYWdScWdudi85cXY0N2tDdFBMc2ZEWVBuTWRZYzZ5TUdBMllvTTZ5Y1Rlc0RGekxxOUtPRkhsT292c1hwclhuaityakpKdGF6RG5rYWFLQVZYdTVUczcveStwU3hDenREcVZYYTBPSUk3YS8wbGFPemp3WDAxZ3hZNkxDKzZnSWsyVThjbTA5ZTdBSWRxOG9lYU1xUEFOY2pId0Q5WmwydjI2MU1RNVJib2VZejI5SmJaUXBiQWgya21CcHlvWHQwS002Yk9OTWROSmU3Z2I3cmpycVFxNzF0Qmkza0JSSFIzb0VPT21MNmhpRzJ4UE8vSXl4eVBBQUlzK3lrUHg0M3laS2FjV0tjUy9LRUtOVXlDakt6QTlRMHhZUlFqZmd3S0Z1dHhKMHVPWmZ3VXZwY3prTHhPTlYxRDZSK250ZmtKOXFOc1JwckhsdGVuTmxDMCtUdnBDZXA4NmlQaW15VGpzSk0ydWlGMG9QbitaZDhtbTdjdllRQVNMdkFRUTZqT0VjYm13UGFBaDFqVHgxQ3JadUFZTG1Tck45T1JkOWVDMElZTXhNWDd1NnczZE15SjVBcUJVWitDU0I5THlJN2NiYUx2NTZyNUV6eHIvQXU3ZGp0OWdRMWJvZzZMeFREMWlXbXdwbHhnVUZRaEFWclVaS3NqRmc1RDNEejZJMndUT3RxcnA1QnFmbzE1Z281RUZPQTlyMVVBS0x5aUdBaEN2YVl5UjlWNHRXSnJjcHY3M2NRQ2NOUmQwZjQ4UmVpWGtLcW53elIxMzRraVh4aWpwMm90dU9sdWtKZlhEeEcwSlAxT04vMEdyWVllYWtKVlVsY0k3cWgrUW9VaXJoTHpSaGpXTG5ZczRSVHNrZy83L1VITWd0RmpJRE5MZmxxVWVDbXJZbVFkVkM3MTdqQjZrRkpUY3lUK1BvOFQzcWw1VW1IMmQrUXo0Q1JUQSthUEpvSWhQRVRSa3pVVHVDOE9PUmxxOUZlREtDaDVDcEVSRkhVckYzV2U5TmxlWHRMYWlhM0xQaW5CdE1ONWgvTXdYQ21tMFp2OUZFaHQ1Rlpua0lBRzE1elRCL0o1eUQzMXZtc0srL2dwUjliWEhWcWlMMEZVQnlYTnBxQm9OcUdXL0Z0T1Qzd2NtOFN1amVrc3psSmtSb1pMTDhrUkF1MGJBOFhDRVFhaDdUcVhGL0ZOUCtjLzdaWmhQQVMrckxIRWFzS2M4RGVsQVgyM1FWWHlQL2R1WmJsZ3hrWjd3ZXdXNmZXejhNV1NXbmowbUp5Y21GdXBMbzFobWR3T1lEMmd2RnpiRWtoZEtRS044T3ZkSDU0ZUwrNGZ2cU1tTHpHOHl0N09VNlM2RHd3OXN2enNHZDhQb2RETHlQN1FESHdSTk42S2FhQ2ZYVXhzdVd6RzdRdXpCSjRiL0IxYkc4aWF2bWtxWGRwN0JlZVBKWHVFQWI5U0dyM240NmZVZ3pGQVEzTHRjWTB3V3g3bEtrM3JsL0RJbngrS1FvbUlQeHZMeE9YcEU3L2QzYW9UMVd0cDJRY29naSsvTVZYNkUwOWpLc1diQ1hUQkpGV2NkOUo4T3FJcUUyMnVRM2tramZGUUo1SmhiNCtERXZWcy9QUEVzZjVuNERLY2R0TlFDY0xQQTAvbXlBbFFMQUVUUUdlZXdURmhHK2JHRlFkT2UrbG9mV3g5eXpNSDFoUWVXQStZb0hqZGpJN3FPNm1iMnhubFZ6SFFzQkc2R2VGbk1pV3NtVzlVQzl3TkNCS3dlSlhSamEwbFRCZk9OWU1GV3NsODE4ZVY0Q21ubzkzVHNudXJPQ0todCsxczUzN2RVeGdhbUx1b0dKeVQxRGlpSXN1cXRxdUpGV2E1amhTeVZpZlBVZHFoWWpBMnJPUjRaWkxKcy9RN1FuT1hPNE1LdmxrSmhsWHFPVzdnWkVJbVljQzBTNGdxYnBIcEl0bDAvbXo0UEk2RnREdE1vd1VadWtmZW1HVzFLcXlLYVd3b1FtZTl2VHJ6SkVMUmRNMDFMZlFwRWFuNEd6bVZRdXhmL080dlAyd0tYUjhjSy9YelB4bk9rV01QbnVtUHo4RmF2cGVVK3lRSW9JZ25LL05LS0wrKzRIZnBLZURwMG1JMXhqWEIremlBSDFKbWNYeGl2UUNGcUswRjNETTJ0SHFlS3Z1VWNzcXcvVGgxQVlZVmtmM1BWd2J6ZWFpRjFXNjc5VysxaC9OSHZOM245VEtjcFZZbGtqSE43SHZnaXpRUFQ2cTJ0dWFSVENITG9zaFB0RkVmYnJLOGxFSEZNRnhBVEs4eEZ2eVJUWGlxV0ZkbHVod2NlOEpIeUs0REhhNkVvQysvNWw1OHlJaVpUMjI5cjdhbnhSY08yOXpFVmtCZG1JbXdHSFBBUmtXYnhXMUVrSXA2UkJ4NnBrM1BWUGNidzcrdHBTNHNlK1htd2ZFSjlUUXFKUjdvSm55bTRjbU1HUXhtRjIyWlk0WUE4aWlQTFlNa1hDYzdLN2FNdjBZRENMd0U2eG04Q05ROW4rMGlzQVdqWGtsblV3Z0d2UGRWd3dVRFRveHdxeWo5amsxYXpuT0NmR0V4ZThPUGN2WmRXQU8xaU5zYlUvSVVPRHJYU2l5c3NWdzROSVBESUlTY1hqTE5jbEpjSjBjM1gzb2lXQjl1Ry95Vk9sZ2lvT2hmMHVqbHlRK3lXaHpDZzd2UXh2Rk5OS1JsNEpIZmtrL0NtY09ySkFtOWp0R1FwK25CbXA0UmlldVFnRUZEeFNvQTJJOEVZM0tlOVNRaWEvWE9VQWY5d1dTcmx4SVRTVDI4SUdKNFlVMnlVSkNsYldhT1RocWsxYnB4T3E1ZFdOd3VyTytFQk9qWXJwQW83bkJ6U2ZCcmgzdWlzTFBNWmt4K3dESUcrcFdERnVialIrQzlBODFJdkJiWmI1MjJndTdhSWhFcGI0Nm5GcWFZZlJFeUNObzBzem9IVE1KMi9lSmMzV1JOaVAzZGVaQ2xQNFYzU1gyK3d2SFJ3cXVBQnZjdlhsTHE0enU3Y2hyZXhmTGZHemNjVmV2cVlhZ1BvQ0oxNnRScmVDSW4vRVQrYzRPeGJuM2xmQWZxWndCUmFyQmwwUXRrdXBpRFptZWdZQWZIbmJCWUpnZzMxVTNRMVRXcjNBbW8zT1JhVEJmaGFNUnVBVzkzUEd1TU8wZy9VMTFKTzZLSFBKRlduZUhYMHRRbmNTcUZOSDBYZUZHSGpmdUM1djQ0Mnk4ZmFNODBybWVRN2NnWENWVlJFTWxxZlJtV3BNZ2E4cU5NRFhzOEIyRzRCWXhQNG9Kend2YW5PQ2ZVTXVjOHhodDBKOU96VG5Kd2thUm9nalBiTHhkb1RzQm9UMzdmZDJOemJHNTk0c3EzNTNoNXdhcHIyb0NuNTllTEFrTEdXeE5KWTk3aXNzNmw1ekZNM0FjK2R5MDRuZlZucG9ZMnMrbExuTEhySmdDZ2pJZlRzTjA5YUcyUXBZOFdtd0hFanJQcHFmZW9Qa0VQcStDSFhRR0srcWV5cmlyZFhGamZsSG1xNlNaUEJXMTR3bjJGU0ZlNlNMcWJNc3VpQm1GRk0vaUh6Y0d2VGJ0N1VuMm00ZUFpNVhGZzBHbmVLeSsyTHdZQlE4MjFweldDUlNadytZNkFNbkk4bXV4SmFLZkY4SkxLQ1p3dlBnQllObTIrWWRxaWZqbnVtNFZYM1l2V1N3bS9BWXFqUEo3c1VkRnJ4OWsyc3lzd0RNbU5qR0NpMVFpMmdaZDdoMWFNZ3lEbStqT01YY0pzNUxlUHFNK2hHNUtkeWxoVmJvdmJURS9MSHZ2dlI2QXRHa0hZaDBkR0hCQ2g1M1hyYkxCeUxHRXVnclN6Ri9OUHprMExIRkF0S0VWR0JYOTluaHAxR3c2OUo5RE50bzBaWHpSOHd4WHdNSDZxTnZXMDBtVis5RDVTRlc3OXI5Rm16YWtXY2llajdzY3Y0cmxiZTNGVStwN2FxSUg1aytiREdqZ3lJR3ZtUitNVWdoL3EyZDFxa1dZODdXSFNHVFdNOC9ZTlBOYjhUMGduQ2ZKalRVeWsvOFVRUFU0MkFRekMxSlhXR21oNG9hTTZMVmRCVzBjQm41QVI3bHpsWEM2Ukkyd2Q2WW8vUHU4YmdNZmpKbDYzRGcvb05RaGtlbDZFSnNVb2dCVnE4NHBjUndadTRyVFFIRjMyU3NXdVdlM2drYko3QTJTdzc5TXhnd0FWQXpFRjhlT0RQWWJtYWk5NkIyVEdleWVJc0pLYVZUNWt3UlRJUS9XYjhOWkNPTk5VWWdWVEhHaVJSMUVldG9WazRMUmxXQTBuZ1NLd1VneDRnR2tlZ3VpR1N5dlZVR2tpQ1FVdEFIVlhMOVEwNHloVHNENnpmOHBpdGhSQU9JcWxEN2pkYjRXSUpaQ1BrVDRYMnduV1ZMSGVQTjh4eEpjWGpQNHdCZ0JmTGVhTW9PcFdyZTRPMk9OOXBaZ1ZhL0tQVEpyUjN5NFp5L2FFSENmRkRQRUVTZ1kzOGpoV1ZiS013M05rWlhFUVFHbFNhSFcvOGlzZ3dvRkd4SmxjYmpwNDhHMGlXaFl0ei92aEJuenkyNlpOT1c5UUhnSndWSUFKSWxCbUdqL0tIcC9HTnlJSXBnWXN4V0tpMEp3V3czQ2l3cHhBSGh2OG9aYWZIOTR6dDlSNFFCTTFSRzZBUkFxVVR1bmhtTXZRUk5HZG1BelJLLzAxNitBZ1ovcVNWUFFpaGl5a21kdG05TFYwWGtNNVdoWXJudXFWTjVDbjdpSk1IdUdLWWk2eE9TbFJpY0VucSs5R0kvbjBCaWd0N3RENEJKQU53SFVlTjlpM2RzcnVDUVlDczFUcWwyci90WnhKRjFiSGxncno5bkJFTnhPckFRQkVMQTd1dlB5OEtTeTJTaHpTUW9JWHQwQjIwdE4xTlRoK0lNR082UWdmRmFWMGc3eWtFVCtPN21mSmlMeW0za0w5ZzZwTDdYbDVYaWNoN3ZuWTdXTm82RW9RUmdTcTVCa0M4WEhIeWRFYUxhTld0OWVET1cwRy9RSE5Uc3FNbno2NXd0WUpjU2d5N2JuZGRYczFGZkpGVFJ6NGU1b2ZNRGpKZ3A3eDh3UFpDd3RKd2wzcHk2L05BVkNoaXhGSFZPcDN1czNYMUYyY3BzZEtTOThvVFQrQWg5SHRNMk9NUXIwLzc1YlN6L01Fa2JXdE5YSm1YbDZ1M3BuMlo0RnU4ZEZFRkJCL1dmWWJQdUJyZWhkYm1OV0Zta1Vwc3RwS1h6N3UzNkc3ZTZYTmNiTjhTTFoyTTI2bVlsRXREL2hWMEJPSjBYN0dKRjQ4RDJ3NE1xdlFJMVlCdHkvSHBHYmhNSS9uN3dHT2x3c0llR2xWaHNKZGE5cU05SFlaVjlSLytka3pvRzB2KzloWWpUbEtxQVJwajVpZ1N5ZlkyNFN4TGZwWTFpSEJkMndzVGpZdmJlb3BBYnlTUFE3aDdtZ2ZHdXVOL3lsa3FoTnhoKzdabXFWQjNEaHlveFFMZ3lBU1ljWFdiYzl4a3FhMnk0bWRITXl0N0Ewdm5rTFBOTWVGSzlCT25sMktYSjNvcVpoZ0dqS29BcmdFemVsTkRvYUZNL0thNmZzOUhUa2xHVFhRYkF1ZEhjUnVyMmpXSkxwTXpNUlhDcEpjaDFBbnVSLzdmck9YRncwbzJsUDArRUw4bjBkTSt6QkZPcExCcDlmcDdpdlV6RlU1Snp2Q2Q2T200U2hzREVRRGh0akxiSnZOYUpGTGRYVTU4aklWY2lnaVIxMFl5S3g2QnY3Y210N3lWMFlrNy93TFZXTEo3ZXJWWlNCdC9ZaFJwSUtOcUw1ZzNNRjZINklHU1l2bUVwMzM4N1pRdWhzaWlXQ3Y0Y3NwTWwwOGNBTzI1TnRweFVoVytiQVpmVENUVmZ1aHJhSU1Cd3lES0JhcmluRlFYNWFVeUp2SEpIZnVVcXAwWTZnSjVOTUdubTc3R1BTVytZdXpwRGFjOGxGb2IyeVROWThtK2NQcXhNWGk1M3FzNzFhRkRTclVTU2JYWUo0TUFRSHhRM1ZnU3BONm5sV2I2bHY4VG9VcGNuYVpOVnhoaVV5M1RDWXc2ck42SHlqRWFaU0pNRGVkaVFtK3ROYkhQUlZvTDhlM3J0c1dtY0doZTRlVXVBVllIajNyL0VPM2xoSUZ0Y2pxWG93d0VoUWM4dW9HM1gxWFNtZk81andnditMaVBOYlBaV1pjMEhqdG9KSUN4Vld0dHFZU0lPRmdQdk9oTitaZGxrVVE3aWhSSFZ6L0t2UTIveTRKSU9TaCt1N1BoRVl0S3hFZXlUNC9XL0gzd21Na1R2eWZUSWh5YS96VFA0YXBjcFlYNFhBL2ZUbFRWTEV6WWd0WW01MHE3TG1tc2JPR1ZLRXM4Y2ZpMkM3ejJ3MEkxKzJENzlaWmVrbStLaHpoQ2w2bHRSNlAzTlkrajFGV3VxOXk3c21yOGRha0xjc2h0WlpYZDhLejRsWmcvN0F6dlcydnhrVnhNY1hUL0lCc3dwb1hUcFZPVzZTWHcrZkJJbWt6MWVSWHZEOFRBSXZsSXpJcVFweU83RldNekpaZi9JZlpSWjlJMGh1c3NXeVZ3dE5VOVBCRnBHajJuQUZjb1A1Vkg2aVVJZ1l5UkozTDFDMUtGQVhuN0dhYW1sazdVVHY5cmVqS1hRVFRnV0VPaUJlTHZzek1uMGtTeW1EVTFtOGZWRzNiWE5pMVhkMVdiVzdoQjFkMWJDcGNhQk5GaXlnOUNjM3RJVHNYWWwzcUlkTmhqTTR1dXBrOWpIK0NNaFF1ZzNVUnE2MG8rUy9XYlM4NjZzem1uWmcrTVdPSDRRZXBjbVNPVUFuWVIyaExzTnRDVlA2ZEtob1RjcnZKdzM1QlBONi9YcDduTFFlaEZ4MGpQTi9aOW5vVVgzS3M3aG1sbHV0aVJsZjl0aTRvaDltK2N2c3pJbTdDd1RZdVQxbjl6NGFDSWUzNWFjRFQ4RmNkVFNhNVp2L3psWi8xR2Z3RzRrdFMzTkdxcHlOcjJmcXBvdC9vYkUwajYvamhyR3dvLzVLV2xLM0VDNmtpd0hza0tBa3M1a0p3akNmcVB0M3c0Q3BGVEJrTjlvQS9iU0E2VzdPV2FTdzVOT1RSREw3V2V6MmQ4WVJDVnlCb0lXZjlETEVtVFpKL2RUOHVTVFBaRis3SHRhUXFyOEdqTHJpczdyTXFQS3E3djd4WHIySWpHYVNod25kYk05WWhzb3BHdnFMS2tJdjlWM1phTWVqYTl4SmlGOUdUU1NLQ3NoNkZwdTdFa1pPeTRtbHUvRkdSUytZQ0tJMWJFMWFqQXQ3RE9OUzJKTExhaXRhc3RFQmdpN3JWYVJ0c3BRTHhDZUJOUzlMcFBpSnJBYlRiK24zU2dIMG1Yd1J4aVZBMjVKRUUzb2YxeVRXdm5udXFYZ0FEUXZOTUVqWUY3bE44OTlMRFFxbGdFNzJZTkF5T0VVK1d0eWVJV3NpdWRUcVk2cDk2NVh3MXh4QVVKRUNWaHBDTHVNQWtjRm44ZHJwVWF3TTRHNEhkd1BhNG1lNjM2WTg2aDd0emU5eCtFT0lPaUNjdS9ualVFN2M2eEFzTTg2Mi91RHZLaHhYQ3BidmlWQkk2cHJ5NW4xYnBkdFJBdUY3UlZHTEpTUkZDU3NlYlZxQXVkTjhSTUxpcmxQa0kzV1RXbWQ1eVJaekdxd0R1Tk8yNVp2alFMYVh5Z1lleWJmajBQZzFZRWdXMjFzbzR0K2VvKzNRdDh2SGEvaGV0dzY2bktkZUp3ZWlENHkxZ3M0TVRxOVBzY0h2SGl3d2hVamMzZk5ibWJ3dW5nT2d1dnprbzE5dnMwVTF1SGNSMTltT25qU1N3U2tvaWlLeno1N0RyemJPODN5a2NvcGFSNDE2bmN6eEdrL3ZQVTdNVUpra1RLTDdxYWI1MVJlQ3Rac0xFdHc1OVVJVHZZU1hRUzl5eWZzNWY5eEZ0c25PRHpTbG8rV1ljSnQ5VUx4RGdkU1ZSbXpCL2UyYkRMVTg1RGVkRWlPb3NYTEY1TGF5WVdlVlIrcVUza08vT1lTdDRubVhxQkdXMklzNWVncFBMMEUyRlRURDZUN0tRTmhPSGNWOXM5SEMxWlBTL1d0RnJRak1sMGpjdDdsamkwbEZqd1BjUzZic25ielVHdVJrQkFGbWljUXltTjlNMVNSaTFqTkZSVk9VVmRzWjBhNE1KSVNISFc2MkNmM0tHanlpQW12cGZzM0lNYWhqWk52Z002Y20xQWsxS0dydHFLdm40TDg2N1MzUFl2Q3EyNFBvbGZNSXBZMkx1anloZW52VHBDL0k4TUtpRDEzUmUwQmNuR1RDWWU2SjYwMDB2Z21ZdTQyM0dTSnllTHVKZ3cwR3dZdGtsazc5MVEwcXpibkNIR0UyU1BseFVrdGJUbDNIVUg0YzF5ME5CY1paaDVoek9Gd2dzaXdtZUFvemF1TDNIUjR5WEkxRTZtdHI3R1gvbERGMXg0dkFwSU5FaXFWR2crbUYrdmkrR2huYVprMzkwYTdHTjRrVjVNSE9aOE1waE5VSTdoelJ2UkpHNUZBcGZHTThYa0RzTEc5Qldtc0pJRHZ6NEZXQTZUd3I3U3NOQjlkL3ZKak5RbDl3bDM5RWQzcXkxN2FhQkVVc3dXWVhQNi9pTVh5VFRGNWY4NmpXaTk3dCtDdzV0dHIwWjNyMzdaWGQ3emJlcGhTcEJiaGhMbHRoN3Q0d3oreHhDY2pqM3NKdXF4NWVmWjFQZDNxRWRKK3ljcVNvWTBPUVZNNHBUdndEZGYrQm5TWjJVZHVpNlUzVGt4OXdPamZpZWEvSUtBOGxPSERUVmF0ektCWW5JTWF3NWJUMGhMVmVvZER1a3pPUFBDdXJtVjhQNG9PUXZqczhZVGxxbTZkZytETExDRFgzUllpRlhod2hYRllTRnFCZ0VqN1FxRkFFeVh5ZXBmT1VyVmlIY1ROWW1mUDlTVTN1Yng0YlBWM0s3SzhrNTdJQytnaStWN2NJUTE5a0dBdEZ2aEs0Y1NZdDBYSzJWY3oyNDMyNFBoVEF0UGtQWS9VbkwvaERzWDRpY2prc3JtKy9ZK2RlTE8rK0hkSXpPSGpXUVBsTWVZUTBtdWFNQVBDK3pxK2VQd0Y4ODdCYkJKN2lnb1dBMHlZVysyQlF1cVVnZTdWMmRXS2ZWNnAzb0dadkowRGlEcjNKL3JuNHNJWnZpVHNiOXRBSUZBUklWYmxBejNESzFnR1Z3bWswZjRhU1hmaWhWUEIwemhZS3NQb1BtRDZQOWJvWXcraFVaM3FueWdDdmlRTlAxSWdMbnk3RDNZWVFaUWhTbVlta3FLVmhUV1RlQk16TXFMbENVcUlicUN5MnpGZDhYcSsrN3ZQWmVzTy9QY2N0emZ0MWxyZlBxS01IV2pndko3TTIwT2JnVDFyc2wrQUJEVkVVOWdweW9BMEVaUjZpTnZRSWdqT24wVmhZYURZdG5hTjVIZWhLQjZMUDk0MHJINitiMHZPSVBWYnVza25DYkFkNXlodDgyMHMwT2E5VUNwbG1YT2libm15T0N4bVBYam9xS1NYWDBsZWFWWGZ4bVh4S0loaGxIY3dzZU9DYmthRzBwY0lyOFZrOSs2VzNmdDNKM0ozcEhRV2JINXpVblJqSVVXTjY5VzMySVByQzQwZHpjejVOMzJPQ1paMExOM0FUWEVtUjIyZVJpQnpzaEsvNEVDNm1oZzFLdnVHMzlzUDFGZzJBZmN1UVBnd0w0VTRXcmNiVHNSdVIvamZneUdmTlc5eTZCbmJsV2JIMDFWUU15UC9NaDZrckRISUgxR01PM1lyLzl4WXhUQllkRWZXUUhZbG9CLytWUTBmWjFJVEd5eDd3UjY0cnV0VkxuTURNUTBPRlV6TXh0VUNra2l2emQxYUMzRUdCTllPQWVuMU1UbStQczVLSjJmU21wRkZUSHZWQ05wKzhwT203dDZQT0NaY2p1QVRCdWxwWkNaMGw2cTJ0NDJEaEF0VnN6aGVLbGR6eXRldkRJcGpUYm9Da3BEMDVuaW1XdHR3UUFYUzNhQldiSEppTUFvdXNnZHNBYXpGL1pBMWNOaGswaGxvaHVTVXBYalpGUXErWDlPZW1nSWVUQmowcHgyaFBDTVdQUGwxdkFOaGJ0YWp4NzBnd2xWdGVLUlEzVnlmVFdveWFoWWlFUE15MFR6Sk9hMVBFN0dmekl0ZjJ6bmxZdUg5akFFdGtPR2Z1SWp3Y0I4a3BPMmdZb28rVUVIa20wbW9mdGQraHBHWG5VZmJNRVZvYWZndUZ0YWhEU2xqdGVHOUNQVmtsMHRxaGxKTlBqcUR6S01XakVlR1cxQStMbytjcnJNSlNqWmFGUjRLYWZuTEhoL1pEb2kyK2p4eHNTdkxGdGRaazRsaEhvNlp1ZHh0azFLMmlUeGRXZHJBMDlndlhscW9yM3ZzY2FieWV1YVdDTXM4M3l6TWtTYjlsQXAwSWVkaHNDUU1HVjQ1V2JjZnNVSzJKalhwOERLNVNZYWFsbjQvTkNMekpHV0c5OFlLSFhLYnJoUjJjVkNwbmEzSGdwZ3FFci9TVzhETHdPWEhQVUhBRHRBQTBQMGV1Z1k3M1A5Skp1ZEo1dHBCaCt6UnVQU1B1d2dqYU1oWG92MUw0d2J2TCtlNDNFU1p6eFAwN0hqU0lCbWVsaUtWS3g2c0ROb2JtWVhydEszY1lZeUU2TlhtTnlkZEZ4eDdLZnNTYXIzU3RLMEFyRENxK3B2QjlhV0VnZ08rYlBCTlNpVnZ5RVQvZDJZaVczS1haWHkzNDM2Tzc0ZWRqazJPaVIyek5lM09GbmlrSTNpLzJaTHJKeXc4RVlGOFFoUG0vTndhZ0ZXK2lESXE3dEZGODlEMjRUUlNNZzNMTmFPaUZxL1V6d2Fiek1hVWhYcmRTaDh1YnNNQjhmcDZERTVyOG9YREFPNUtNajFSSHVoOU96UjV2c2h6NmV4KzVGYUhlYlZZaDNXVkVEZHF1RU84WmRZWUdMeWFFVmwzZHJ5TWhXNEpMYjgxcWo4NEx3ZTRIRWptUzdaZVA5R0g2Q2ZHeFQvTC9peHVtZExjeGJxVzA4Z0JRRkdPTzJYQTNaSE1ZMURId3NkdUxTcUdiV0V0NXIzSm40ckZqMlI3QXcya0w5M3VaN2c4dG1MRWNtSWk1YmNMaTRuekhzSFBoeG1oWnlXN2ZZSkp5NE84aThlUDJzeVZlUjM4QWNGZjJSQVNHc2NaQzlEYnJpWnJERjI0bXo3VlRjRks5d3VVMUx0WGZReUFva0dSU1hqN3JBdmZhRk1TSDBBR2l0cklmVWNKUTZaK1ltRFRSdnA0d3JmaUFYQ2sxRXdIaGlOc001SUxXbFlqV2pJSHFIa2lPVzdhb1puK3VHUUEzVEdUeGQrZUdOV1JyWDdLazh6WW05Tnh6TkdFMVFkMkxvRVcyMXRwdkw0TVJ2YlVWK1o5TC9ubWIxYUxFbW5GL1M4RWx6WXlXcWkxWHZYZjZoNUhvbmxRWVZib2FhdW4vVDFjV1ZKb3cwMk5td3Vlc2o5TWNoM2lMR3hGcTZadEFHQkRRT0Fva0RmbVJENTJNNmgwMG5POTZub2RJVlM1ZERmeDBodUsrVmI5cGdTd0lMUWgycjdPbVV3QUVYL0ZMbHFZc3Y0ekVNTjlJb3VEV0VkdEMzM0JSWU1aUytLVkoybE41eERJSlpreEhNTURnMktMZWRNNlJmeEdncy94T0pJWktadFJFWEI5aUZtNHZRR0t4eWV6bzlHSGlXM2JpOFVNMURhVHZTTUNHN1BtdWdyaCtYRjZjeUlRbHNEenF5cFg5SjF5bmNVZzRGMFRKQ3JqVStWSDJsTDNiWjdENjNBdHBTMU82NEZOb1dFRXFHczFwNVVuY0x5aFFkRlE5ZE12bXNnOE85ZlAvOWpUM2cwQ0ZybCtEVm1QK09waHVZLzRVVW9KMFR5OGx4SnpVOUlJUUJ1QnVrR1FIVGJzbnhoN1F4TzY2b2FsNW9xSStlUUtnT0hYcTVJQUwzeGU4RFhEdE05U01jc0h3TU1KZmxQdDZJc0dFUVUzbjMreDFoZ3lHQkJEcXRiRVlSTUFFU2lVSjJuNVBjRGh3RnhvRWU5aFJJOGd2ZlpOaXlva1ZsUWpqaFlCNzNvOG9zaURFSDJNQlc2QjVDbmNuOE10WFc5QkNRVkNBaVIvbVI0TnRFS2EvdnRyM1FnazBuVzhsRG5SeUE5MUZFZitiY3NiQ3BqRW11RnNKL1JCcHFwVnc1eWlNZjFXZlhicjVEU21lR0lSejg1dU5VWnhEcERsNTFRbEMzNGswbVYvZXJSUkJYTEYrWmF6bGRIVG1lODIrUlhLUmlrT2JxOC9aMFc3K0twb2QyNzFsQXRlK1Y4czhwUW14SE1ZWHQwK2pzei9GT08waEtjWXJpeHMwaGJhR0JlMVF4WkpBbmRDYmZOODNuZTg5TlpDQ0gzNy9nQUcvcVk5UTZCZlNab0hwdmJPSjdwdGtBS2VOM0p1KzdpcEExMHN4TzZzVko0d2dLa0VoQmU1czBpTExVdHB0cU1NRmtscGUwUDBiRGJoZy9OdGV0OTFzMlF4aStjSFNkR3lqcmpOTEp3a3M4cGgrd0RFdjBkMGRKUG41VTF4L0pUWXZTQjEzRzFCUGxHV1grL1Vnbm1nYmsvb01HTnJtVWx1TmU1ZnlCV3NsaSsrSVNYOHduV0ZuYlUyd3dsRHhPZXIvNkFJU3FYcDMweGVlempRcG14V3g4Sm93RXlpTEI4Tnl5MTd6WmI1Z0JZQTlDb3l3bmlGeGtrdVZ5UkRadlo1VVN3NUZ0K29ESGxiTTBSY0J1Mi9NcXFsQkZTcHE3ZGFMUVVJeG4zcjFNUXJSdnBiR3FrbHJzbElVVm0zci9WTTVKa3l4QTdjb01CMkRadWZ0dS9QUFgxU3BYSTF1dlVqcmtiUGFUR3RLZkNkYUJlRTU2RmFRTUxBVkI0b2Z4b1ExcHduYXB5elBNTmJGQmJvSTAwRnpuQTJtOTlxVGV1MDh2b3YvWlpQRFdpTnlOeXFpMjBpbUNKWGZtVm44bStPMWxrQkFrOEMrb0VzbmUzRjMrMzJOZ2l2dDM4MUVmMHM3bGNXaDV3OGMrY3FDeUlFNEU1bEN0bmpJL2x1cDdOdWVPUnFCMnRycnRNRWgzTGNMOVR4MFJ3RmNiMGUvOW0zRnlqU3NJRTkvWWE4NzNkbUVmYkoyZVhIaW5VdHdaZDd1eEN1VzhtYzFuMlJBbjNEZTExVWl2VG0vSnZYU2RCQzRaMWVrSkNGS3JCNW9MYU5mWlUra2ovUzg4eVhHcWI3N0ZncVlXNUJ2OXZsVmVGTjMrQ0NKQkc4S0pVSzEwVTlNUDZKVkM0VG9RaERPekRLVWpQcmxRbzBQZmRITXkweFRGZlJoVUFkM2VnMUtvdmVSd1IwZEprM1VPbEdVVFNpdWEzeFdmN1NWR0FpeU9aNnBzcUx5cExhcHlQbXBGU2ZQVmIxR20wNjRSY1hnUWxxYm9mUVNGOHE2ZlAvT0VGdHNDTllOU0hnSFI2QnlMV1NaSXM0eGE2UUFPN3h3OCtoTVhNYzVJU20zYUMrU0lUZlA4ZEhPaXlVaTY2aVFPelEyZVhUNXFsclJJdjQrWXhFdlRnV2t6bk5CNWYyVEZvbTdmWW1LUE1zQUhiWDBGTDVLcE1uVGF0bDRRc2l3WHpoVCswOVI1UzlmZHlaN3VRR0pTZ0t6VWpPVDRBcnVnajRSd1BEQkdWeTdSZmJwUmk3bjJ0ekdIazZTZk5VbmFLVEk4OFlETm4wZGVRVUEwRWNBbFBnVk1SVnYyN1RWcWZDZ0FXUGo2MC93ZFNGTStzZEt1UnhlNXQ2WkRGVXQ5V0pmanN1NFM1cWRWNUlDL2VrR09mN0NIZ1ZQOE1CZ3oraThTM2ZQQy8xN05hMFUvYzYzTUp3Qm9HYnRPVitwcklScUs3Q2s5d3lMVG1jelh1QnFOdDVFcVFyejNGVk9ITWJySFh1RlZ0K2JEcnJZbGJwN0VwZTBjdTNiSE96UG9iVDZ3UUI1WW1CNGpGSXBCUldJQ0s5YXpsdnhHaGNwU3Z5WithaUhSQTYwZGRENTlPdTI3VjlEWFh6V2FONnZXS0RHbE5VMzZ5ektpOEdxN1JJMXRiZkY2Q2xna05uU2dUZ0dsYWlWZlphTW9GUkNmU25aR2ZkR01tUXNEQ1ZVWHJ5TklnQk92ck81WDNMeC8yN1pOTjJ2Rkt5QVQxVlI4OFB5YzJyZ2lFVUJqR3JxVXk3WjFoZVgyanc0WEU2eDJQVmdhNWk0Uk51c1JHZkpBbURPa1pEbTAzVXpBaEhPNjZuZWExSkhwOVZDTDB3a2JheUVPWTdDQlc0Q01sbGZuMml0ZFV4T3NZNkhjTEppRnFLS1BDSUJvaFZ2dzdGMlFvTkJ6WFN4TlhJSEc0OXNlSVloak9ZOFJ1d3hjWHJ0eDVmUUJOVERFdG00UENrWmE0bEs0T3JBYnV3Y1VXNnp5RklqNHFnbFNsWnlUT01XdFlSYzR2U2NINTRvMnNDbG9ZZVJtZVV6cFR2NlhISlZZMTV1dFdNOHlaSkQ0Q2tuQTBmcGlCUmVSeGtSa3RIeXpDeVlSSVRLeUdhVHRGb1hmYVNWYjYzbHd6RHgxZzJKR3B4dXpIYWV0M2RUWjYrWWdJbWJMN2NSNGhnS1FpWDBiU2tUYVFtQVRuejNNSUZWZmNuYjJBbHZUZnE0VmpaODluMnkzU09zbEVPR0E3UWtvV3V3ak5pZC92empRRUh2akpNUDJBQTBQdFBlSW9PL0xtZ2s2UXhVRVZ3aWpQU210b0dyaHFrWVJTdUg4TytYWXJSY3laNmc3WDUrVWVScDdVdDI1dTBjOGIwanRLSnczcWc2bXh1U0loL1g3MDVIaVNlMitWcTlJK0t6clpWTFJMdVRIQzI2cHIySU1mMEVCRE1YNERsa3hlRE16K1R5ZjFVZ256NFRHMHdmUEt3dWVCbkI4VENQWFB5RjFuZmtBZWY0elNSYXY5aGhxMDRpamVvcjh0bU9nOG1GTGhjSFpnTEN4OW1MOHZ3RWdaNjZudDBGM1ZMaGhWS29OdSt2MFJtK2JLenhGSkREUlBPNW5DRFB4d0FrQ0czNTJvQ054VGk0eW5jYS9oWXVnMkZvUHF3eDl2RThlQjQzdVJNTVo5RUZvVjNrUEwyOTJId0ZsanVMUVF4bVE5ME5FNmJzcUw4ekQwb0xzTWV0bnZPdVVsdWRmditZUHRmcG5PQkljckRMbkdFMDl2UWh5dnhlUmI3VVBiNFZYZnpIMG5tdXRuaSsvYmZsSk1yS0pMOEhhbTZldk9QU0pUdTMyS2ZHWUhEMGdhWUVuQ2FjQkVHdlRSbW5mNDNOaEg5ZHJLU0lvQXgrUXJNVG1CSGVQQ3RyTU5rdDlXOHlsbFM5ZmMxTU81TXVweWgzYVU3amZNVldOR2t3dmdHR1VJSExWaFdEMGN4bzIrWEJwYnRFNURzajBQZVd4ZlVLa2x6d3h5OGdPMVdhSjZlaFJOc1VqN24zdk1Edlg4KzYxMDJtVUdxd1FYSU1ISjMrWWJ3UTc3M29mTXBTNk1MVHZRUll1SWd6RDRuWUJQaEpmL0dwV2x3bURXRlppbUJYNmdKY3oxQ3VKczJhNWZDaVRyZ0E5eU1teUlyV3R2NVpBOEF4SlJ1cERaeDY5ckxINXVSWll2bDdVcEl1N3pYUE1iL2drbmtkdjRqaFpkanBnSnNMVXNDNFBEa2VzaHhyMW4zZ04xQUx4QUtFTkNHdzdlNVozVlcyd2hjWXFFS3RGYVd6cXEwTWh6MHB0Qy9VcWphUkxGWXM2M2NWc0RsOXlDdUxQM1MvMUU1SkhqK2JmOVdGczZzcUVLQysxN1ZDZlNNOXkzN3pPRU4vQ3ZvUkFxYit3TjBGeVlrMXg4VXZkd3I1VGpVTS9wRzlMZ3NMMVkzTjExQkhwQ1dteXVuT0thWVJ0V2ZILzJoblNGdi9uR3RmZEVONUZQb21FNG9iRTFSOVlPK0d6QXUyR3NVcjNHdEVMeEpHT3NZOHlIMXc3WnlTaktPOHJZR3c5ZDlEQjlhKy9zbmZ3TzdiK25kV2J1MFZRaHVKclVnNC9YNkhQSFpjemd1TVZndmJkblBuMk5WcWltMDRwTUNpQXp5aXUwa3JldERSMWM4SXNIenNlclBFZ0ZaT3NLcTVZUFcyWkJGRkd6Z1VwS0NOQ3A1MERPZDdUZVFPb2dER3JRQU5INGp4UlZobmp2YWZ1dHI4b1I2MUhLaWh0bFNJOEkwUGZreGFVTXVrWVA5N1hVMWRNTnZmbXZpQ3ZEOFpOdjRvNnFZcTF1b3J5eEZRbFRDdnBTeXJrTG9MWDV1V2lzKzljMFJsYTBBNVMvd3EyaUV6STB3ZVA1YUFsVmZPMEZDcFJ2ZEdTdnJjN2VBQzlVQTQ5QVhyZjFzeU1SWFZ5RHJBUnI2SUNOdE5lSTdUMW9iaFhNZllRa1NsQXdMK1ZWcWZKMGV5Rk1mL3dOZ1dwWEFQajQ0SGMvNWNtMnIzT0Zqb29yUXJnU0RCdUlFUXVaMnVpajBtY2lXSVpiUWNPT25xcWhKUjFKTG5TTm5nN0FWY1Y5K2prc3ROcUhES0kxVmZ5ZXlqQXZ4QmhBMXBBVlpsWGhYcHV1N1FWSnROcElDci9aRTA3bXFUWGNuNk9BOEN5K0FhR0xkR3FyeWR4N0oyV1grdU9uS25JV3F6WUhIK2lYL25MUmFBOWZtZjhRTnRicDFLRTlEYXU1aHZUMlNPKzFJeXR0bTRuNk03c2FDbllhaTdtUG1PVUFtVEhIWmx6Zm5EUlFIck1oRFFFTFV6cVA4UkM2eWNvNU4xa29HZzMwdDBFN2tJZ2RlU1hsRDYxampNNnBHTld4a2tBWmlKaHA1MWduN1dtVEdnY0txV2M3T0Q0TGtkWW9xMk56MGFZTm90em50U0wzSGNRd0tMRzkyU0d6MW1GTm5TWHpBZGFjLzI4UzJDdXNSbjV5OVA5VlVGNDR1bm5zOTB1TE00UnFOSGpiWDQ4ZkdYTVRCdmpjWGwvd0hNYWxHQ25OWDF4QU5SVjZoWUdxTGxFRGpxQlBIMVloYURYbVB3M2lqUm9SaDlWS25yRWtXZ0Y1TEJRMGZiSzlHd2FQYXJnaDNNUnZFSkw2cWpuVzcrbG1MdHNqZEpPMEc4N0ZSNzFYd1NTVEVGOXNTWXhURG9WMk0wdC85cEZwWjIxQ3VYNHdER2d2ZDM1YWRodGZSNEcyb2VQSW0rN01iSEVQdHdHRUJMVzIrNFYveHN2TDNEVzR5c1ZlNUNHNHp1YjV5OG4wK2hnZTJ6WmpUMWZuS200MFdlUzZONCt5a0FnYWFjQVJkZmZub0hLaFRXZWwyMUNRZ0Jld24vNUNRR0EwSVlzbHEydlZhVXJ0OWd1N2JzZnhnVEI5YnpRbXJrazRIY29KZU1iRnVXN1Z6TTZJamNzSCtNcDhHcXVaVmRGZG9vMEtHOWplSkQ3Um4rV0hGcEVYaEtRb3pIaG1tZzRBZTFVcStiTGNhUGR6S1RKRkZOUTNxYnBQQUZWSWVzbEVPRnRiMHZ1MFJJRnJVRG9OOHVvUzhXc1JLNG02K2N5dWVoeXNyY3Q5VWZTZVFjMkQ1Nzh3Qzh6T2hHNis5ZkVHaDZ3UFQ4UlpJUlJrUGRBSkV6YWdZS250SmFibzRzMEFyK01hRTRkdzZxdzZVZEZIa0dZQkRDUmhmeWdVNUtmS1lrOFNXOVVnZllMbjk0QjMwTFZ0M0ZObHIvNk96MGFBd0o1eEQ4RGE0dFZvYWtQL0hqemZPYjN4UTVqSk1rc015bDNXdjdCS2Y0ek0yVkJLRXFoeUJFdkt4OC9yaGp3aGVKOFhtQTBYcEhtVy9Fckw3N2tyemhRN0VyaGExeWdmbUw4dWtFMm5GNTJVcEF1MHV0cUMrMTRBaXJrUlYvVlV6eElHLzA1ems3R1lIZXF2MVdDQlljQlk5VTFQQk9YVWJjTlVnT3FwZHdJUHBSMHNabDZFZ003K3hhRExMd0xBVVBwN0RodjluVmJpYWM5aTdoKzFjUUhaZytNVGYwYWhPdVVSdkZyTEV0R1BKUWV2UTBKSjJsaHg0U21PK0huazBxSGRVdlJaenU2eXNPc2JzWWFweUE2a1JyOTBYN2FROUxsdGZ3MVI2N1ZrclRwQTVrV0oyc0U4dXpuVkVEb2lpQzdkayt6WmJRTW5lRVpMTE16SmNyWGRmbDN6OEkwM3FKQU03bENuaTdISDdzWUR2ZlNMU1pFSTlrTmJWc21iSkZHOEh5SWFyK0d3d3FBVE80V28vaVJ5N01IN1VPYTY5cmxSMUxEUjFNRTBnc0NBSmpTcll1eWI5TzRPLzBQaTlFWEhtSHJhZGZhbEJpRDl5VlVESTljVEhDOHV4RHp6ajFtQlNRT1JjWG1HYWZJU0w2dVNUbWM0WjNONGZSQVIwaFFHR21hUVdzNGF6QkQzK0dtVmh2SFFRYzIyc3hCZHNmSk05U1JlRTFzZTcvVWUxY0tUTUl2SjZkMStlL2xsZGRkVzFiUDQ3RTlHNnY3Rzdtc2c4dGczUlJrSm9tRzRKNVR3K3U1K2ZyMnpJV2Z4bjVsYzl5ZmpqbVpOcGtVMUdTamhKSWxkbUdkbjVMRUFnd2Q3MVZzckZ4c3Jld2NxRnVkOVlROEVJVThlRjZ1bDk2YTl4dzNDditRKytWVzhwdzJ4TlNxQzNmMVB6bFd5Y281Qk9TM0ZxeU0vaWpyRkw1RFpMMk5BbHZhSzZIUCtqWWJHR2RsZDZPc1JORldKaVhGS0tjZE54QXpNeWRidkJzVmlvdnZTcjZBT0l6YndSdHZzM1h3V3hOUlZWcncvQTIwOS9WeG5URGRPNjdFREw1M2lnbWNZSlY3bW1odlJZMXRNTzkzendIUWU2ZDBqL0c3Z3FFNzU3Wi9OWHAzNit6bzcxd2dydTIzRXVnL1pFanZFU3NrUmd3S0RxSDdkMklwZlRVODFVWmhjWmw4TFIvdUVBMThWSWtJL1Q3SzlEd212UmJkNnM4M1dVZU41ZFhBYnZScUExYVd0TFZocnNHUXg5RXd3cU83V2ZCOUVmcDNUb1EvZklzcW03QXJrekI1NjZBOVpCODRwV0V0OXFnbzFVVXdLMG9mM1pXZ0lMT3lVc0lDeElCYlJXSllOTVRsRWYyVmQzTnNmVnZ0MWFJR3J5TUJBeDl1d3V3OEQydnRpMlQ1cnB3N0s4Tm0wOGhrUWxLbmgxelpJN0RTSU1RRVU1S283eTVSNmpYQXB0bitVTkNZV3pPZXNXMHdEc0dPdGowZWdwTm9Ha2w3S0pWdlluM3ZiTkJieHZCTEJBT3VYYzlwdGxxTnEvVTJyZnI5T09saWIwVnUzaGVQRVlmWHFCUkJsMGM3NWtPZ0E3M1BKOE1JZEc5N1A1VUp0bkRNbGJudUltSEE4YVVITUFHNzNEU2xjSnhHbEw5Q011YXJqV0ZWQ3lXKzh0UTlqeFRKUWZndE1YTCtjRCtoK210d3ljTjgvNFFvYUIrT2J5ZjJSbjhuTmpFRTVyT08xZjRCcWRpQkE2UE16dmRid1lJOUFRQVZwNEVHTTNCTVB4VFlNV0FwQVM3REhKZmZWcVg4eDUxd3ZFRXVSaHQ0c2h5OUxEQTQveFBOTW0wbzBxN2hBRmd0Z1lieE03OVZqK3NyOFRhSlMrMlNXMGpyZExhLzArZlgyS3gvK2M1dFFMREFzMDhJVHUzbTBGSDNZSXJiWDhUKzcvRmZUZ2xXd2lmNGxvaWpyaGw2TWljQk9xNmMzV1llYUcxc2VHblB4MmMwK2puS2VLU2FWMUdhKzcvMXNHOXBralpxbGFLUmxGWjZvc2pJMlhnTjJzNzcwbmxNSmN1RXBIQ1FHeG02YnRTeEVkbllNZ1RlVGcwRCtnUUZsMjdFRVA2VjNSeU5FYzhmell4ZmRyRkhyaUFoY1RtMm8zVUdHL3NMWWg3MWtlYlk0VDBzKzMxTnA2VUNzU0IrNU5JbFdDOUhyWHpCRFY2UlROK3dQSzNJVkU3RDR1dmNKSHBKaDl3eS9vRG1NcndwNzB5Um8xK3M3RmlveHRGb3l2Y05DVm9hTTBNbjI1ODB1dFI2Ni9xcENKMjByZEhsaU0vMzJaQmpyU0toUnZOb21rVFVVR3lNdndmUEJsck13RmdlM1FWeUcrQXhVZHdianFBMjBYZ3RMTGtNV2RCSmphNWtDdytYc3EzK05YVERJTTJCL0NrNlk0bzN5Q3laazNRd1B1ZVh4eCtGN3VsSVFhaFgwK0RZK2JPTkErQnpScGJvWlJIbnRiVTV3dzR6ckFwdlVSeVl4MmhkMEtxOVFCS3JsM2dxZ3M0Z3M0K01vRTdmaW1aR0pHMTFHbXFEYk5XUzdLeDRML1pVMTc3bDBJQWlDWFVjRllueGRYSnpPUVBzWEI1OEVweXY2WnhoMmlkQjJRczYxdUx6RVpFeUNIb1lYaU5Na291NVA3TGtJNGo1VXJMdElienoyZDJtSlVOeXlGcDJDY0RBamxnRFB4MmYyK2pXcnRsWDE5aC9QTnJxRlFZQjVPWENRYmZhU0psazF0S0QzUFJwYXM0Nm5iVlBOaFBDWVdzMkMwRC94Qm01UGc0T3lZeVNEb0JIaGZhS2hXYlNpa04zV1BGczBhNW9YN3BwTmN4cGNxRjlvMWZWeStlak1WOUVKK3RGeDJFVnpnK0RZTjdET3FGalhHQWZRVHFLMURNY2pkbzJTQkxvNGZRZVZsVSt6cFVHSXdhTE12WDZWYlcyenByd1VScXlwQUlRL1hjS2dFUzJ3bDFVY0VQWUswUEw5S3NacUhuTGxmRzhzdWhzU3gzc0d2MFZESnFGMmM0aG9xcG55TDNPWXI3d1hNWFVONFVaWDJqZlMveElTNCt0TXNidkpiRnFwWUY3MDdPeDlsZnZyVjQ3bEJHZE5qNzR3bHlVNXBJd2YxdExWME8xN2xKVk9lUE5INnltZzBTdDBPNVBMdm5JMjBQRnhSTVUxV1Boa2huMzI3WEdNL09oSVIvTmg1U2lPcjJiVkhhSis0RzZ6cWY5aVg3Vk1WOVhzdUh5a3R4amVxcnpVOE5kN3lHcnZPNWN3RmdlNVVCcVF5K2ZOSnBRU0NiZytyeFFuVlpobzdxSmowR2JoaFhIenB4cHFrMnJrdVZqTXhGUktnNWEwNXI5ME5jdkpEN1BmQzhGT1hCNDFlbGxjWHJxSHRRQ1kyV2FOdzBEQ1lUbTZnYUJjMmRHL3Zodlp1YmJzTTl2S3JNRlltajhqdlVQc1RzaWJvM3ZQdUppbFIxV1IvZ2VteDA3RWE0R3ZwRHVnalVhbWFmRjNEaXZSYmlqUWtNaENzYXpacFVsMDk4eEs4SWNYdlpZVWNEYWdITk9iNWJvWk5nalI5RjMzdmtmNU1YRXlzM1hsNmJrRFZmZlRUWk1FNTVrRmROTmt1VkZLRUlEdE1PSWZjY01wb1J2dWxTTDJ3Z3hzekVlUFBqMDNUVm0rNVlzTEp2M2FvUm9FUHVVUEZ3RFl3ZXNkS0JSZ0FXZnp6T01lbUJYWlBiVGdkMzdhdlpjM05KZjNKWGEzK0FpbkFiZjl6eVhvbmt0UkxGZU9hYlUxT3dnZlJ3ZjJnN09wOHlPSVZVVXFXWFI3RkNWaFBWZ1RQN2UzUXJtMUIzd3NxZGJBTzE5bHFyb3Z5dkxVYndGVkJnbHhZeXFObHlVNlFQT3VnTm5MUHg0dFA3bUtnN1RJVjZFd293MS85UHZFVjhTSlkwREZBWVJ3cnhMdDVYSUZmYVZQQ01GWFMyZDI5SkVGbWhhdFgyOFpjZjRGSWErTk1HRkQydGk1c0J0aGExYjFJVlBmN3ZDYkZ5c2hWcWpuTElRMmwzUERMVmI1WFpadkpyQ0h4TmVFODZuWkhCSTZFS2EvTEFPS1VkWkRCZnU0ZHJpM0lBQWo4a0ZBak9kZkdPWHNZZkxybk5qSE9SeGVzcnpDekplRUxnUGhOSURvSkZSSkJHWkRoRmdJT2VtVnNma2QycENhR0xJUThQT1NpMnczZFprazlLallIZytDbTVxMFRwZUIrZUorU3EwbTYya01JekgyTXVTLzhvZ1NtRmdTMUdSSHdqNHhabkJYNnZUdG92eXVDbEpRNXV5c1hHVGQxWFBJSHoyZ3dnK2s1TTRCTVVLYWc5ekNtUWdhYkU5TTFxVExZM0w0Ym9MY0U2K1JXWmpXbnZDR2Y5aFpmRmlZSmRDTTRGMGZUNlUvQitHbHRWaDE2NHhWTlZLRDFCUEpmRWM1SGRsY2xPNzFEZnM5aXJKSTRQdCtaNnpaU1NpY053L1dXRTlScWJ5Z2o3MXdqWnkzVldoOURVS1ZwMnZnQWt5K0FhRjR6NUNiWmxwbGZXRUhoUkhsQmFCWkQ5Q2lBYWFzVW00ZUVUa1U0QUdiYXhwYlBlc1FRV0RKT3VCdVN1S0Fuck1tUU9Ga1YycUVsNm1KYngrSHZpSzRXaTcyZDQ4L1ZJMFdHamlGM1FieEQyTVcydDlYc1BlTlFqbW50cnhhcVJEdStVb3ZGS0tWRm1rTHdpZy9McXhOanMvaVB0T21ZbkpSY0ZHREV2aUpYK2dYQXE4bVVCVFhReXhleDRrcHdGMFoyMlhxSFJQSUhXWWZvbXQ1aVBGUnE0aVlRMjZwOFBVeFJPM21XOU9ZaWY4R0lSQ296aFhOMjFRTDUwWHI1UkRadVFRTW9tMnhsS0R4OFFhYWd1NmoxUjZQbk1Vd0owZ2lydWZvTDk3SHhRZ1ZkTGU4d1lkamVmdjIveTN3d0NDU2o2Q0E1aEljalJZTnNvd1AxRXZUbTBQS21BZit4amtlTXVYcG9sVzRKUXNDcFVWRW1tZnJXSlc4OTB1cnh6YW5jYU1PbWxPRlJRZmNuSXlrUDh4NkpINlRqYWM0NUg5SEdJbHpWUzcybDlZUVRRSnZQcWltTERMUXZkYzdmNUQ4VFBrS2J4bWlsNGtwRGt0QnMwSyt1WHNMcWdaU29QbWsyUWp4ZUJXb2tqcnVDdXQ0WDVIUTRYVXlseHZ3WHN2R2k3TG4zZ3pib0g2NEJoQVVPbXNoZTNmc2VSWGdlM0t2K3dzcE4xN21zWVVDdlBXYUo5cVF6bSttN3MxdjNRMmwrUzlnMXcvL0lSSnozNkJyZ1JjenZONkpXNE8yeXAxcDJxQVZ3c1doNG43d3R3SlBWdnAvRjJsSlNNOWVzOFlxRFlXMFNGRU9mTmZJNjBoVDZoWVg4TnlvVUZOSjZoY1k1R3VGNDZPMGFBMnNieTF4VmtVbmRhUGFhUE9rUjVZb21RWXVCNzUxSXdZY2tEd3FQcmoyRDhYSndBM3AvbVBIR2luN1FJdHIwakFybUJuVXplQllNcS9NRlJwQVMyM0hJakZCeWdMQUF6dU1HNnlWTVcxeXJPZ216dk5zdi9oejMwM3hjb0MrTXNxa3dGWFB5a3ZIOVZUMVVBMGVXNk1LK1lkQmNvYXZndTJnYmMwZlRIZ0dmTmx3MC9MNXMyWVZmZGdaZExNT2dlZnk3cTFRbEVCeDdYN2JrMnFTenhNRjlrMWtDbzA1eStYNXc1eXFob0xoTHhvWjRuZnExRm13TlZUOVA4VkhBS3c2c1J4TlpYUklKVlk4czdMc0J4Mk80UW9SKzRkV1h0cmdiUzNlZnVxQ09zcE8wTlFZVUtHL1dsVXRtdU05WUp2VzhpOFhWTENYc0dUSk54OWl2VG5pYWl5UW5jemlSSmpxRS80aTI3bjFvdDh0aXV0VmJNNXhVODZFNzlmVFZabHQxUmFjNWRiakl2N0p5RU9xOENaVHlpaWJEdEJBWVQzOExucTZHQ2lPcDd6OHpxTmFCeWphYUhzaVp2dUZXb0tVMG9kTDJVVGY1Zk5TaEpSaU1BQlJTUENjcmxnK1N4WlFNR0h6NS9GbEJ5VlFqNFArR3RvckMySjFQUVV0NGwvY2FoQ2RNQTVuR3YxcUNEd2tLTUNCWU5qejN3WTlBbEU3TS84OUJUZDF1R3ZqUlM4WlJSNDN0NjZOWnQ1Q0t5dFc1T29pMkhOZHpPN0JCM1VCWmI3cG0ydGpUbGZMemM1TDE0M21LZlE2S1h3b3RYU25BWnhuYnJLeWVGc2JqNU1yQ3NkZHBSWEpHVjl4bndiL1V3T0JxU0QwZDJ3VHZna3o5V3VGZDRQcmJPcGluVDlJSFBjMjh2S3NLejhHS3M2cEF2SHhaMTdvSW1ld1hjT1NobU1uYVliaHJuZ1haYlk4bUlZa3g2ZVA3bGZ3Z215WmVvYlJVUVVlWkZuc2o0TysrK3plelRVVFd4TkZqWFhUczZmRm85NHBhT3BuQUJOUkxUK3RKKzFkQkltTXhUUW5LSVBwUnRQK1NIcDZDSXZOdDBSQkRzYWdtZFhJRFM1RHU1L2FNMU1ITVNLNDBtdklKTDVQb0RUZlAvU3hYOXp3Z29uajhyQWsyU3ZzWVdXMjZiZnp0VzVWL1FycXhySG1kcUJNSVlObi9FY0U4WjU3OTJTbG5mcFlQREFWelVxVDlxYmNZcXJXaGt3YURKbGp6enl2TUZ3eWJUSVJzVmRzbUdtS2ZKZW9xUmtVMWRzWDRSYlUrd2lsRjBRS01rRWdLdldZR2VGc0lTcjhGYnA2WkhiVTBTRXBITlMrVGIxOUV2MWNBWndpeC9Dc3p3L1BaMjhwVmd6SzQwSHYrb3NVbEJGTFhUT2Ira1ZXalZVUDM4UHZvZGdUUjg3REpmZzArOHJtd0JOMUxhak05TVpvRmZlZGp1djJ4cm5rZUtHbWExMTQ4WWpTSW1BWi9mRmdvZmEwb3pLM0xnaE1yRkl4VGxuNzJ5MEZMczNxV052VHdyZ2xIcFM5Ylp1RGlzZExuY2lYTW1zSFNtdjFmanhzdWxnc1VjVTdLUDVxVFBCZHJmSW41TmNldUlDcWxCMzNYTU1lVmNWYWVyVkFTZ3lZNHpIaVpMc2loVlVEQ0wxeTA0Z1htSi9XMVlJWVZnUUlIQkxpdUMrdnlRUkh3TkVwMGV3OHd6M0tPV3pBMmhrM2pzdTdDcTdrSXVRSjF3MEpvRVdqdnJmT2pEcDVyK0Z1eno4eUlQTWZ5eXlrV1RIR0pZY2JuM1M2eWtYek8remdVd0hQN0dBKzBMVWlKUlVsWWwwUUxKOXZmNlFYcU1DRi8wdU5GTFNNOFliTWxScUxrWS91QjkveEd5bEUzWjhJZGxtMUFoRlVuK0M0WDRmMmV2OGY2SXBjVGIwQ2l2bXlFVXBFVVNRdHRSVzNHdWN2a2pVMm56NXROa0ZVa0lhcktvaHpZVXJneFptZTdZTjNFUDlZWE1GbHY5SERKWldzRjFEK1Vzemo0SHM4T3M5WjdDNHlXWVFKdUtCZjRwL3hCMEdFNUU0UndUOFJNMktxYzdtYkgvc2VKNU1kQlMvek9XWGcvQ1N3R09zSi8zbVFXR3Y1cVphSktTdDZmdlBMdG9RNUZkMDJCNnpJdkszYVdDRW9ZelRYdzZqeGUxbzhzNFUrWEtsTFJzblYzaktaeVh0N1dFTHFEbWFnYzJyY3NGTldJVXZ2MVBoVSt6OVFKdzZDS3lmRGJ2bm5vTW1Xa3F5V2lhcVUrcWU1VkplckFOUnBlekdZd2RtRVAvNzJ1TWJkZkV2VGNSMGpwcCtuUXFzSWxFc05Ga1oxZStZUmx3MGg0TW93a1BVY2Q2aTdEV3B2cHhmUXRRY3AzNm5raStaNjltaVYwK09vektseDJ3K2F6eUZ6V1pxY1NKM3BRNnB2eUtJanFVN3JOM0VVbGdPbnZUOFZEbG5hZk85MWg5S0hET1AzSmE2cU8vNEZwcmttbFU0cVFHaDVNRGVkUGYwL2o3Z0lQTFNzQlFCVG1XMDJLZkUvYXBrMU1GaW9sKzAvS1BCZTNDdGwrMWxqWk1YVWtGaTJ6QklLTzBCUVpsdXp5REdvY2lhS3M5Z2FCUGkxUktyMzVZZlZZazlWT0Z5RnozVVd2Vis3dmt3U3J3dEx6M1p1emFZY3p0UTNUL1dlTW8wcjFlMFRMMG9relEwS2JGRzZ5Y202eHlrb1drSGJHL0Q3UDlxeXpsRXpaQ0RkUFdROWVyaXlNdXpzbHZVOXNRektZOUZjR2RoMVBOWkowOEZmZm5MN2VIYlc5RjBwM0MvZEVreDNZdUh1TXMrM002UllwbjJzOGFQUFFjZ2YvQkV6QkJIRWJUMWdPRCtDalNzVWU1em5tU2w0WCtxRGdMa3pxSytDTzhvUWpGVGw0UWpTeStCbnVVb0F5ZEFFbHRQQkovQ1JsQ1NYZkp1NlVOV1RLRHhsVlZoUGMwKzdXZ0h5RWZpc2hpcGNqbXFpeEJUQzVyWTV0M2I2RlpqK3hsL2ZHRkVWeFYrZFRlcWViNkE4bFVveGlnaXR5QWk2KzNzZ2pJUHNha0VDS1A5RDVkeTVmd0xkVEJiZ3hrazVzNHJCVVhRekNRSWl4SjcxdE9YVjc0ejU0Q096clUzaVloK2lxYllGOFZ0eStDYzlDOWJ4OGgxTEY0Yy9RYTNLN0J4YXczMU02aVFjbTY0N0xSUUpnUVMvejFuM2dBWGQ0OFNQa3dSaEhjVHJiMkVTN3lFWXRTZWhpekN4blFCRHp3aTdiSHp2bFpaVXFiOWFYbk5UeC94VVdyRW15K09yN1JmVWRMcjV5RUxyTkE3KzVKNW8wTFZUS0xtZTFRR1E1K24yM0MxS2ZZM3dDTS96VFlhQUdGV0ptOCtZU0hPaEFWVksxOW1EUTNCT1hCVWpTTHJDNFVVODRkRW1ZVTRXRm5WTE5oRFExL2dWUDl4YjJXa0ViS1NnM0xmNnpqTDFoRlhaSU5vclNZN1EvbUp2Mmh1R3AzQlFack1WazJPbFphSWRqTVdEMnRBY0F2TW44Qmt6MHZ2N2VJeG5iVEV4ZksxUjRYRTJVVm9UdTd1b1dvRTdpRjVvMXJydThnV3NyZVo5dVN0WndURGxnSTFRcWVuZEFOU3lPb05BMzF1SitpelZWOTVpZEQ2YTE5TCtYeExiTmw5dnVtWklGekVHb1U1MXdkRVZmdWJOYUw4aTJUUlJ0SDZwUEJra3lhdkJZZFdMQkFPSmdtVDZodjc4QTlrMmVBWkN6S3VPOVNqSFA1bGhNTElkZWNyN2x3WUhHcUMxS3dzaUxydlFPN0srWmdIVytEejZzRjY0bER2VlZIR0cvMkVYY0ZRRmQzRDM0RXpURDFSbGVCaUxlMnFzVlJueGZSLzhmS0lLNVVRVTlENGUreE1oYllsR3l0TDFBbmZmWXE2TFh6aWdGY3ZqalZ6S0h2QUxObVQwY0RabXdkcm00R0xEQzJ5eVphMlI5RTd6TW00M2Q3Tzk2Njl1V2RDZmhTWDZGSFh2bElvZEVvOStmOWM1NDdqVFFaNEtQc1d1VGppV20yUHFXRE9DT2RVK0VxS1V5Z01jVU9oOWNrT296K0xpWnZVZ1pxWXpLdHV5MnE2OGM2Q3MxeW01NjFIaGZWMHBXYkM2Rm42bnZOaVpTS0NCOUFCUHo4SHJiSHdwWldWR1hUNXh6UjhxUDNFNFBVZWF2UElVU0VSdVloNHg0a3BkTEttSGduL2pNWm90TXRiejRMWDgvVWJibDNaODFxMjZhb1NMaEFsVGJUckxHQUJ0UHBVckxHRkN1Yk5pMHFQc1hZQS8rWXZVUXFCRG9DU1FWU0JjWDVNeGNXeld0V013NEhnTkZadGMxSG1mZkdsU1BpaHgyNUJmQXpocVBJM1NieFd0bTRuQ21kZC8vQzZFTEI0MXI2VXNCK2YycVNFSDYwT2lTSFZ1eFhXZTMxZGRlZUR2eFkzQSttbmkzUzYwSTM2NmQxMTRsUW1aaytFS3Bra2FCTXhyL09ERzF5MVpMekU1YWF4ZVJleTI5cVBuVzNHWHEvaXlnWDFxbzVXbkVuNUJZcDJFdWdkM0UxU0NBZDVIK203S3VmSFRLdnkyZW1QVTdTR3RjYWVLc1NPTmxCc2h3ZHpTaFhUTDluUnpFcFMwRVRyZlZhY0l4RUc3TUhPV2FkY2RSai92SWlJSFJMeEJzTnlFejluekRqQzdqa3FPc3NudlVQeUVWRVFBNXR5eTBlcEE2T21VTTB1NlVrRHFBVHF6WVl6SHEwSmt2cXhjYVhiYUQ0cHRBUk1ubndjazg4ajY5NWJOUE0va0RQRkFKSXdjYWpubWtzTmVDS25iQ3d0MG5wck0vUGtaZStxb0cwekxoaW5zT0RYcUs3dVBxcS9LMXkzeUxJdVhCLzh2SUZZWTJlelJDZ1JoS3IzZy9ZQitoWHJqQlNwVjJTUGUxYmZjd0o0WnpzenphaWtoZFluVTVEVitxZlFqR1paYVdIY1grYkJmMVlQeVI2RkEzbStRUjF2N243TjYzNjlVNDVoMnlDSmhyay9Dbzd1WGdkcERpWE9DTzZnd0wwYmlLUk1mejZnWWxDaFVPQS9jZDM4T2ZIOWRzbkNITkV6aFR6ZDYyeGkrNWJKd1AvS0ErWStSTVNUR3pmR0ZjWmRtR1B6dXkwM055S3ByK0hndmdXbmFvRFdCQjVUck1zYk9HRUtxaVd1MVFZSi9ZcGlRUWNHTE1vekpQdVFxTzJMNWE3Y1FOWWQwTHVUbFBGM1BMaGFVNTBhMFhUV2ZVTDFCOHIwbjczRHpmT2NmUW9ZR25YczNYTEhEK1crcjI1M0ttLzE1MnVTeTFjZlF1MUs3a0M5RUZ4OTNUbkZweEhUdzZWNHQydmxENlZ2WHIvYjJqSCtXRytjRVQwUVVjeTg2dHNoZk5naXdsZ2xGQThTUU9HRXRyTklvbDc2VTFVVmRhWFFNMXJiemM4YVVpbFVKd3dhN0tZRCtCWDVablMrUm1CQ1UzQlVyTTVhQzdGcXFWbjZtYlNGVDAwU2U4NEkreG5zUGFwNWlYY1RuSWVEYTB3NzhLQUtMcDNOZzhTemkzeXFUdlZiVEc1ZU1FcG5OZHhOQnlqSk1iZmsweWEyOERaQ3BmV3BaUVlZN0JJRDNXN3ZDS20wZWV3ZXJkVG1Ha2EzR21wQnA2WHJxVGNCWVY3YVpVb1ZyMytzOXdKeGUvcXJHcldxVEJHZ0xtRFQ0anhpWTdvUWloWmV0VkJsVER5cmpQR0hCQUJFQWh5S1B5YmNRcXM3OHhjRm0wMGVnZ1BUMndLdENrME9QZFlFd1JLVE5ZdENRbG9UL2Zzaiswcm42RkpGTGFEZGFCV0Erck43Qk81RVZwWUpDN2lvdWxxcjRvWWNDK3hmdGRQQTdzcWxjWmpxMXY2cy9Zcm94ekgvK3QraTVOUVVvd2l3UlFjWU9zaXIwbmdlU3FVemEvcXk3ZWV3UjdSNDF2UGNpV3BZcEdsN1Z2V1ZoUmJqd3RmOVRzTGhvNTQzYWdTT0JRWjN1MFdXQXNoQ3YvclV6QWwvckl3VElteGhvVDRicktPQUtMVGhTdUd2a0ljMkdTY2NRMFZOd1pRSytXNFdHUlpGTC9UVE91UEVrRXFDdlYySkh4aGhtR3o4SmtyRUk4dEZSVlBqeHZjTW9Qc3I3aWZPWGZKc2tVYlB3bFpvMDA1RnBLOWxZWVdYTlUvTSt6b0V5bmNaT3VkN2ZubG1KMnp6cit0ejNwVWFqcUg5cS92SUpGYTVCb3I4N0poM1JybnBVRHFRaGZNRGtWZlA3TDlvNjExcG43YklvZXBYVDMwT1huZTVQNDRsT1p6Z2VCb3Y4Um1tYldPaTdQczN4MFpzZ05QU0VsVzU5Nk13MVFVMEtXTWhtSXo3SmNqc0NGTWpHWjYydGhBWTRJQWRlK1gvN093TEl4U2lsNERES084SVlUQlVOTm1NR0JFdXdhblFKQWJQb2RkSTlFTHA5NGtIVldYLzExem92MWZvT3pTa29yZFAyb0dLMTBaL29DOThJTjQvWi9rWk1aaWlpMXVGNXh3T21GMDdOR1ZxUkxNT1YvUTVJNFlaT0wwSGNuMXpmSWRFWDdSMTZqeERENGZwUEU4Q2t0UVVDNzB6UE45L3k0MzNmdXpHb1phQnFvSW9SWVpWa1JrTlJvNm9aUFhyL2hLTVRlMUptL2g3Q1lyVk5NWWY5bU0rcjl2T1BnVEc3ZjZvTU5FUVUxbzJ4YzR4R0dpWW1sVXZDRzJyU2dBYm1JMVF0U2I0OXpPdGZoU1N0NEJFbWFxbWo2ZStaY0ZsbjZjK1FFd01rYU5OdFlldnFVVURXYjA3aU5GeDhsTFpQS2lNYmhrMElqYm1YSTlQejlXZTJaN1ZUQzN0QlU2cVg2RU9IWmxZQnJsWlViNDZaUHAvRnZ5VzlXTmVkUGkwdlcxSEVPbi9VN0JSMWZ2NFhlcnZjWVg5akdONDk4TThKZ3MyTVIwYUtsY3ByanlCZm5lWmU1RWh1UmZnSC93ejZ1VnBMZFpwSUpRYVpNRkxnR1A3Y211aVgzUkFmTGFCRTJTdEFydWxZdkxjUDI3RWFRdWNWQ2NqckxZTzdhbGtiTVZVTEVGWW1qZUlDdFRRWnc1S2hCVkJQdlo4N1NVZjhoNjNmRHlZcHJ6K25OaERadk8wcmlLU2MvM2RLYlhOTmQzZG90MXdxdEFldjhyNmVDZnh5VDJHU0pmOGUySjNHL1BLYzFqRUhWRHpDT2E2b0h2UVBZZmdxelBseFkwTEMxODhPVEFvU0pDRmUzejN5amJreXp1SFZaQUtseTltODJWVWU3QXVuMlhydmUzYkFXY0dxNTBIZzBEeklpemZzSHNvYWYxZHpsYVJGNGdjbFA4b1BpeldNNkJQYXp4MTIvcjlIR2JpdFVoSnp0WldEVEpDcUZRWjhPWEVadUhXWlN0MU95aGNhdmg3bFZqb2tyblBqcVFURUczeTFSWW54QWlqeUF6dWdYN09hV1NDRXZNRTRSK0toVVdFTnNSc2FWK1N1ZVoyVHhqSGRVakJrYmdaVXNsNWFoV1JLdmtiVEFtMjhoMTVyUFBwTVEwZTdZVHFIN2JvcUNMVFRtb1dpWi9aYk9mUlF2azlDQ29ZM3BIM0NDRFFEakE5L0pwbWNML0h3MXI5cmpQQitNYmJkdlU2Y2s5T1k4TVZCM0FvNk1iSmRvNjhybkEzTWo2UHhzNXBUYkpYRjZPUmFMWDhrQ1FmU3FicEcycm9MUm9RNmF1eEdONHdjWnRlNmdEUFpyVHRXengvL1AxWVdpUG0yTWdVUlA4akQxaHc2S0hhR2pNc1JjTGVYOGV3ckFWZmxGS2F1azl5QXFuQ28vZU5Cem1Sc00xdUNqYkJlZVhmaUNyaHpLdjJ5SHRtR05aRlhzMGxCZU5pb1Q5Wkw3SzQ1a0tmOXlDNzQ0bnJ6U28wWk01czExVUt0S240aFhRZ0hUZlpNZmhLN1JiV1lqYVRVdk9LT3VwakxOdlhsWW1QTDFUNjNENjJJakh3bHUyOUdUWHVBUkxYak1jbU5TQjNoQXovOTRzMExicjdhcHNrYnBUdzlwTFl5TEFKOWNOcFJKY2Jwak9kUlJUaHMzd204VndadmZUNXkyRnJLVkNvZTdleWJZamVkc3krL3NJa2F2ZG55SVQwUTh4V0xnNTdvUUV5VDRvS2NnUEVLc3RXenJTMWpoNjdEUlplR2VmSjJiQTFkNHNmeUVmU2dOTHMxaWRTZ1Q3UWJSZDEveVY5WXVieWlhUDVNRVNaaW4xVlk3cTh5eFhQWjBtNGxXNTdMWWZxUnVRZmZId3YvTFBQVTRkd2JlTlIxbFNKYjRkVjh2YTI1ZHlqYmFJTmp2bHFWQys0bTVVaVpZT0VlWDVjMko1VjROd1VOS1RxUFJqU2tod2IwQWpaMjNHYmd6bk5yTVRDeE15K2Y4UnZ0TDU4TzNLdXZDNW0rUkNtU040UVVtZVN4bld0dkRLb0ViaVFxWHZsN1g0b09wb3UrNFFKRDFjekpKakI4SUNpQjRIUjRVaXM1b2d1NlozSmo1eDNMM2E0eGZNY1hwM1Jldm5hOWRXdGdKM2ozL3p4dlM0M1B6OUFYa3ZCYnJReno0RUloT1AzZXZtU2Iyb0o3RVYraXE0SStBbzIwQW1JdXdWbDlxSnl4a0tkYzg5dXZydjcvVTRKR0VmK0J2R25WOXlEelRjaFZMK3cyVE9GSzVlbkowRGZmZDMwUm1WV0tmY0pCR2NEelY0RnlSeGMyVFpubWZRS2FXRStpbkExR2ZEUFVyVEZWMllhUFN3b3V0UmF6dkdsMXg4ZHlVblNxT3hibTJYNXFEWk1LaGpVelhKb2RiTTNya2taR0ZQcVNURlY2RVhsUnlTdFZJbHR2R2xINytwY2ZDZ05JMTBvbXlyWFFNL3NhWnJpUWNKTEs3TXJEVnVlc0FFQjE4UXZnenArVlBxYkh0ZGZwY1JDZEE1cDUxa1hyVWFsN1dpSzAzTVphV1R3SitqYjc4RnZhWkR4VW5FVkJVNE96QVJxVzlwUi9SYjZ1eGlhL1NvZzRtSm82a0RleFdiVFV1TFcxV0NwcTQ2T2hyeTBiWTNORWVZTFlscDRrK0U0YWtUcmg5VjBlRG9zamJ6N2dUa3NYZnlFMHhrRCtiWjdIcTJvc0R1TzRocGdNZWwxTlQ5S1QyYlF2d05jVW55eDEwWkhyemdIOXNHSXZsSCtDTG02aXFUdUFEVStuRlNZa2docnNvVXZqNVgrUFhHQnZvOFUwYlFvNEpkTkhERk1RNWx4QmpWVTMzV01waXU1aDlGSnJzWTErU0pKRUlwejM0K0pxNCtMVnJGVUtEdjgxbkY4V1ByR1gxcjNjWU05eUVHbWx2NHBUN3NEcFFuVHFoc2dEOHlxWDJHRmRQTzZPWCtBS3paYk5BNTlwVlRVMzkrRlNLS0dNdENmaVRVYjJpdkovMFkwVzVBQ3poSFNFMjQxMGU0cVI1RXorZ0RxVEhZamJaZG1nc2c3ek9uclgzUlAxVDhhdEtUWnBCWXVoYkZSUXZUTGpzOHhZR2psRkg2WjdmNS9SeXlFbUk4akRkUXlCNzJNc2NaRTU5c0tuZWtVTVdqWnE4azd1ZlNSdlo2aHFVcGlBTk03ZlR4SmZWRHhvRG4vWVdtTWViZm03dTJUaEdWV0x0SjR6SjhHdk1nU0d4Tkt4NlRBQUdyaFBrSU40bC9SYkl6bzJZQ2ZMQ1J0TTBKU0Vob3JKSC83Z0V0eGxEeDdyRDNRSFZ1dzAvT2VCRVRrNnhKOUxWUUQzc3Vob3BQOTMzSURMZEJxckQ2TWJ2Vkk0bXJzb1gxZUtoOVpuR3F2anVJN0duTUR6Q2ViZFB2TVRIS3VocEVibVZUWmM1RDJoL3FVd09VM1A4eU81R2JkSk9zNWcxdUtadkRlUEcyZWNGTTZqZ0xDYUxJQU5zSG5yRis3QXdCakpXNEZ4NjhwZVorNVBVNUFqRloyaVE0NkVwd2dSTkpMams2bnp4d3VIVE1lR1FYYmxHU00xYXdITmJIcXpHQkpyaFRZejdIa3hQWExSSW1GMjlZMnM4c2pxWWlHbTRKWlh2UUR4QXpZdkJJODBMV0xIanlGQWw1SUNxOHRGQTUvM3VHRDJvMGhTUFA4azJHL0FsTnpFQXE0QXhHbGVzdC9KaUh2SWJNc09mR0w0NnZhUHBBa0gwb2w0TERCb1JKL0hNbUlhTU9kUmVPREFlaWZBeSt2QzBNWERtbnN5NGtvYXdEeStxYy9RdWtrY0t2VHd3MnMyUDBPVkxEU3N4REMrYk1TV1BsUnI2OWZNQmdSN3hRdzlocDZvMXZVRmRnQ0pSRXd4b09HbWFyc2dweUZiL3cwWGE4QTRQWCtoOEw0Zy9WbFJlZnVXSDc5Qm04UEFjWmhlZmRjSU1zNmRZeno2b1J3cXRqZWM2cW11WG9FMGMxcDVjNE91UnpXNVNwQTVVempnK0RhZG93bTBtbnpld041VWx5K1JHZjdHTFhYOTdRSlhsc2o1Qmp3cTNFc1pCR1huTU96OXFvYnU2SHZmRENHaEYzT2NyTHBtTFV2SXRyN0lTNXBhUkxrKzl3bko3MkVSamIvMVZvaFdPS1phdk5uR01YbkZTV1phK1VYc0JZWHBQWThZL2FsRE1aNkxDdVlPQWVnRXNFc1g1ZCtCb2FCbzBKUlEyTitCMXNxZHRob2RaZHc5bXZKKzRiOHZyY2dTYjRCNzgvS3pJZEl4LzBKZy9Qd3JSVlZvby91anhNb1RFcnp2eVVJVmo2b1d0UzlWS2JlZFpIbExsRnZXYXh2UzBoMmRreVZNM1BLRmQ5ellHeWpXbGxydGFtMTU2andkMmRnOEtDSk5OaHRQOWt6c3hITi9FY3NXbHZMYlpRUFlhWDIrSG8vWkFJS3N6aEJIbHh5dmFKRnpnWlkrNE1nVEZKa2JwODlrSG9FWjM5Y3N2OG1zZVJENmFFTVJQWTc5VTBjNk1OODgybWVubzdjYk8zMTM5TWExeWNNYnBpWWMrenhpazJOaXpEVU02QUpRNnVuRDliZ0lqMTIzMUM2YysxNzg3ZEJFc2NIanU1c2hhUVpIUEt3L1UwanV4dGFoZis2K2JJT2V1SmRCV2tZcG9kbFJTTm4wamEvUGNWLzBlK2pFZ01DNFZYRTVFM2VHRG91L0lHY3hYOEY2OEQyOVJBUEN5VEF2R05hNkV6SXNqaXZHa1JpU25SZldGOGZmT0c3QXhPL0tUaG9oWnE1ZW44bS9XUHpFT1ZOcEl5MFBhNDFYcXdidGtKeHhBdkk5OGpMMGQ3R0dLVWJ0UzB4THF3Zm1Ybzh4SFM5dUxncjNkaG9USk1zU2k5L1p4UmlEekhwaWRnK0tmeUJSMHNRbXFRb3FsQlp0bFZ4cHpOa0ZkUWhaSkl6bXlZQThQSmh5dW05ZzlRYTJ1TTBnRXJkNlBoeU9HUHYvUkFZTEpxS3FSRU05K2NKR1YvS2pNN01ncGJGV1pCQ0pUdWFsZm82Q2E5TVd2TG55Wkk5R1IzWkNJdTJLbDJoaUhhMDZRUFN0TnJrUTBSTVpXRjYvT3pSSlZIZ2pMa2g2RStxTzk2OUFyQ0p2OGhrNUlLdmhXY3BVcHF6M2pMRXBxblQ1UUNyZHVvUVNWNmpYSHpBc1FIN2gyOGZtL1FVcXVQckxoeVJwZUpMaXNUSlRlNDBwRG1KVUREWE5lSG1RRC93U3p4ditWNGNWQ3BFbyswWmpQMUo0SW8vekdwbVpiaXFXb1JkT210NnNCdGJmYWptZWVZeEd4NURwSzZxOGVQeDdqdWQ0dCtaYm4rWjF5b28yeXFBck5TRkNLakZkOVhIenB2Q25Zc2dYNUNrQk5RamluWndlNm9wbGdGWjJra0ZFc1pQOFBYdW9nZnRxYUtHYzc1R093MzM5UXZpT0NjZ2dnZXRmSEJmcnpzU2JiVk5qbTU5OHdPMHA4K2FkelhzOWMxNTh1OGszQ1ovcXhCanVReDN4ZC9MaVVQVFFlRFpyWm1BUXNjRUhoWE5BVHh6eDdFT2dQRHdGWlZ1dys2b0txdVBOb3AvTHNGMFh4NFBQTzlmdGRBSjhvOHNpeHMvZk1kRE95WVlub2FTUzVoeXd3SUIzZDZTS1ZtL0FzWDYyNnVwOTJ4WENlWUhUb0F3M1NDeHg3aFhjVXNyYjY4Z3dHMlliVmY5V3ZJZnFhTXpuQXBma0FZUkZ1YlJXRnNHV1R6RG1UUkZGNVkvWHZDVnVpWVZyRGNaTElRYS93eFlJS1J3eXB1dktxMWprcW9ZNTFTNlV6cnE4d2dMdTlFTnRzWG1iVXNIZ1AwYzJzMFVrWlg3cS9uSW1QT2RsUHVEczJwelVpdFRJZzdVcTZQY2Z3SHlYTCs5a0xKWTNoejhCeTlGSnBuV3VGbG14cDZoQ2d3amRrcnR5LzFDUmx6TWZYY1dJRFNzSWRYSTl3KzZkVGhrV2VmWDRITVJHTGs3NTJGWlJFckd4dkN0aE1wREZKYTQyYjE2YWVvc1A5TTUxNzkyZ2kxdFB4dTRjTXVucDljYWN1WGJqYnROeFpIS0MxOUREcU9CVm10QVVvSUFNcjJEeUZDN3Z4cVBaMVNMSUxPVU9TajU0ajJOcHhybitiUGJlTHo2RWFmZlRVQjJPcy82WStWN0JaTG5NcEtkK0M0VEFjVnVhNlJCaUZpQWJTV2RQTW55bnMwOWJTcEVCNDdUYTZkTytCTkVFMEhOell5eXowc1B2b0JyQ2w2cFhFajVjQ3V2dlJxcFpZT1BmZmpCT2o3cHF6dWd5cDUzTUJZYjZSb2xkdTdQaEt4SnQyRlkwYWVMM3hqTE1GVTR4QXVMSFJyMm1uUnl0SGJoTW1QQ2tsWFU3ajM2YlBLOHFKQTNXbSszVjIrdVdUVDlDUjVLL3VnWEYzMG1NNHVKTURLL1I3Y3dWNG5XbmtHUVFLMFJyN3hxaUEyTmF1bWlWcVFJMzAwZFdld01QbFpwdEdnRnpXRFVLa0RLcGh4Y21NdGFISVRDbXRNeDZjSlZDaFRVdW95ZDNGUml3TWRQYkhpTVJCRUg3TldkTmVuSkozQ2hpaXhLRFdIeG5xVjVUYXNnbmJNdVZVc2x6bHZseFdaeHhtS0ZyLzNQVE9Za1JEL2MyRnZDT1FoWElYVG0xT2VDbjZnT0NvR0h4NGxDVlFuc01SV1BDZ05DMytuSFZLTFRmSVhYTHEzMEF1ZE1LTUx2VTNoRU1EaHA4czNBaHdUWHlNUElyWG9sWTFac2g4ZnJVc1Jrd0J2bUZQTFdsMUxGaFVJblVsU2hxdllZK1drdUZMVjc2VVd1cW8rK0pkbzF3VlUrZ0s2QU03QmtNVzMzcitqT1NaUGE0eGo0MDdZK2dnZ2xTNmEyd2REWERKQzhmNU9DN29DakJsa3lPZlFqUEVqR2JPRXVubnIxQ2ZBT3l5bDJHSkR5RlU3cFpFbHdWVTAzKzc1eEpYVlZTYkhPVldIQmtSd0cwZWZGZXZYUTRtcnA3RC9UVlgzbGRnaFB6R2lLZ29LbjhiS04rWm1WdFFtYm1TaTlMb3gzRTRxNm5YUlE5bkhLR2J5WklQdXZBdFJmSjU4eHB0SUxrZmJvYXZnSDI2YVhURnZySmRMYkVTZ1czdHBlYzA5OWI0NjdlYjRLUk1mOG9OS3JUT2Vid05WbHExKzBycG1RVWI4ckRKbnVhTU1QSldDTy8xTWN5bUpFOUJYUEdQNHRiMHhoeEE1MTFycHdwNDFnMHVibGx0c1FucHBlU1YxbVdBekFiSm9Fd1dCamU2TnRlOFcrTVlldWczdVM4eGNnVlQrUVpSY1NzblRkZXpXZFptN1FYUXVLdjc5RVBacHdpRUNscGM3WG9xT0JTY0pielVTVnE3Y2NRek94aUFqR2RFd1gxNzhybkJuY0tlendRMldnSjR3VGU3cVUvVDFGQ21ZWEtFa2tyK2pldUQvZ255THpWeXh3V1cydDB6K2hTZ1N6MExRYTdBVjRyd2l0Njl4NStXTjdteVNCY0xqYmJSKzZTK0JIZTZWK3ZjYkRVWVpiQUlGWXZ5S1VFUDJPTVR4T2VTajRKZ0UyMy9RQ1N2eDhVMXlKQmZEbnBUZytJOVBHY2lZY2cxNDc4WTh5Y2pUU1N0WGZlTFdzaFNpQU9zUUYyU0dQTG9ERXIzRXMyQjkyWGVIWFRBckdtOCtkS29VdjFZNENLSFBDOFUrWFpSMGkxVnRFTlRQckwwd0VOM3JLMnNUN1ZYSG9TaHpKNGtjSkdOWFk4ejc5YUtzZTNJY3pybjFmSkNFRFBMdEdjUEFURzB2UmR6VG4wTEVpdmlHQXg5NmE4Wk1pdDQ0QlUwS1BMRlM2OUxjQlllNEdOQWdvcGpFTU95Tk1uMXovOU4yalVyRUNQSmx1ZVo3UTBRWGJBV1FMcXZHZG9CVnllVGk5QVlEdURqMXJaT3RNN1BoZ0puTnROWjJnZWZRV01KOFpBczNCckkrVUZWT2t2RjNoaXVhQk5PVGdla2N5eUN1VStMRDV4djBGNjBCM1RMVXYxUzJRem1KUmsxYng0MXc4YXZjVFo0cWorY3VEb2QvWm1xY29wa0pvQ3ExK1QxY0t4T3g0c0RCOWR1SnJMWWhZSDh0UC9kbjcrUXpHUVd0dUtRVThKOWpPWTlCOXpXcUJCWlRzU0V0SmlDTURDVDBFTFlaUzRob2themZjaHBseUIzN05PWHBVdHcxaGs0WmVpMVdDSlZRcERmNVp0ajB0WTZVVXhMQmo2Q0lXZVlQcVVqbndZOE5YY05ldHhKMGpmUzgybFc1QmZyYnVHWUtaTnBoY0F3Y2lnNkRTYk1KWUJlVVo2WWpRMHVUWXc0a3lCWDN2L1cyc1VLMzV0SnM0ZnlxaVdnTWhkbFVrNUw0aVovWE90STB4ZXkydHpid1pvSlIrTHArK21nQmRHaml2clNKeUhkN01uMGZGaFFuaURMdEdWUUM0NkorbFBLYXMvcVlVZGNKZGNQWElCR1VKbE1QSnozT2EzRmRzM0pEUmVzRVdXdXFuc0VWSTNZZmRKcEY0Qy8yQU1tQ3laZDlPdDlmdlpIMzY0K0pkWDlCUXo2VU1LZjgyWXZodGljRTJEU1ZEY25nbUwwV3RjamhCa1BkMzg2VnNHQ1h5UTNBTjIrK1J1VWpOdG5qUzNBeDcrc0Jnazc3VmJPdnNZbGVlR3lLZkdtOG9USWlvSytPN2t2eWFOVTExOFRPalpJa0dadlF6RTJUS1kyQWZKT2s3Y2tFeHlBZGNlVU1mQnZqbFZRVmVzK3QzWjFMSXE3Tld5Qzk5V000eTBqRzUwZ3JRZEFuUDNOL25oZGpyMGtkUzJ1cjN2YTFQaW9wZ2h4clJiVTN4Y2ZTQllLRDIyTWxTS1JuTFhpN202MHp3UEdqcSs1dEhSdFRyVTFMYmpQVUxaYnpPNHVzeU5UNVBBQUMwTXU4NWVTM08weVpnVGJLZmF3UHNyb1JqeHMvbDNmUGY5d2l3dXllbUg4TlRxMUVJZGtrY0paNkRrMnBuVmVwVEE1Z2U3ZDZ4cEdQakIxUldLcUx5ZzB1SDVyd1dYZzY0UjkyTmtQY3JNTkt5QXoxd1IrMW5sQ3JwV05SRkFxcmhpeHVNNk1DUk9FTW9zNmM2VkdsbWRZQlBJWDF2cEUyaXViZkdVVzd1TUp6dVVNdjdxOUdZdGtta2EzZThIUlVsY2J5Q3FDQnpyR0ZPZzlSaFRpT25KbWFZNmdDVlV6dm5najhZUzhkaEJxdDlReCtBOGkwYXFNT2kyZHRpYy90Sng3SUx2VFJ0dXZTNGZzaituMzR3ZjZOL1p1citKZ2dHL2h6Tkk0Sko3eTNJRVhGRlJXT0xmTnlVZ2kzeHZuNkd3MTZoRjNiVlMxK09uM2dGZkpTTUJLRjlpc1pLU2RCaTNsS3hRQUdkYUhEMXdaemo5ZEZWb2Z3ZTIrbVlVRVQ2UDQ5dENXS3JOWGVhMDZFSnh5Z3ZTaTh2Tm5kQ044My8xL2dFMEFPMHlocHRSOVZ0Ti9OVUJTQTUwemk0WWF5TXpTNkcyN1h6Q2VzRUNTRTVXbi9BUEZXQ3ZXVm5rQUx2UWlMeVJNblRGbDk0UEFWMThxMlJwaHNvU2ZVa21tbWZNaHVzQytEVG1KMnlac1M2czZGL3FjN2k2VXlOQW9GVXN4NmQ2THJjS1llVVF1REJTek5pN1FMbXRtWTZuaDFkWFNsNjRRZjloN2lsVFdQMWZ2OGFjM1BwSHpCbmVoSnd6OXprSmN0eUh4dXZCWkRyR2hOOE5jWUU4eUpJWHZOUjJ0bVVraGdQanQwNVdKRnBLcUlqcHNTeDMyQzkxaiswMy9zZGUwNDRNeWM4V2tCRTdPLzlBdmxHSVRDZEZQaVNaOVhaZ2FuM0pnSVlOWk1pNDZObngwd3I1SGxDWEhrczBCaGFsTytaM3FFWXp6MGREWjlPR0ErWXU5alBFNE1Ib0paQm5JVXFtNUEvYWEvMjIrSEpjVEF4eldiaWVBbWluRlp6djlqM2puVjBaa2VpWW54aEJsTThuZ1FucWlVM3ZZSTVtV1haaFJ5ZElLTVNuRmVlTUIwTXRwSUpzUUE0V3J3VnB2RFZ3b2VXOU5DWndWSUtvUTVzUWYwOS8zQ0dKQk5LMUsxRnRab3E0WmczeGpFdFRHcloxZk9vZk1MMktvay8ySjBYQ3dkKzVEMFNFWmVSUjd3Q1A0ZVpUcEhsT2VtVit3RkZDSU9lay9UZVMxK0lPQkdUVm1TQWh4aC9FNDQwVmZCeE44eHZBVEgreWhEZ1B4QkFXK1MvemhVM0VGdEl1SEZ3akRCem9Cc1I4Y0FmOVF4TVFiU1FNMDdRMVh4UVMreDBVVXUvY01NN2N0eXpGaXNTc2YrK256MHpvUHRDcDNiaVZSTThXUU1Celh3RXFNd01saVpsTHd5WTh0UE9DeUlzOTN5cW0yODh2d0FLZnUrL01oa3JCT2hXV0FuWVV3YTJzamlIZ3MvRDNBMU8vVzU2UXQvQzBDcTFCR2E4VGRKY3BRSWZxTFZjNERhVTZ6WC9EVURMZ3EyL0lKRDNkV1pjcjFiOFM2OTE4aFdoUG8xdzNwVHpCV2p4b2ZNS0xsNU4vOE1lb05uNXZzRGlCKytMZW11OXJCRExJS2pwenMrTDUwVTJ1Z21ubHpLT2RoQ0xDanUxYytIR2Vmd00rYnJ6b1NsMGNCVHZjeFg4ODhLS3NZT0VNWHJXMHQyb2pXaTRvVUY0YUg4UUFNcnZGN3NqMEh5K09tNWVvd1J1NU1jSHp3OWt2L2czYVU1K3BXTW40NmZoUk9XSk53SDVDbnljc1A5ZEVzZmN4QTArSEs3ZlViQzl5Y294RkErck1WYVlIajNIWWNXa1dFdHlXaFB3VnlMREk1YWpvNWNOZ3E4bTdXQWp4S1dVaXRKV3pra1JSWlcxSk41VUFmQVdWUmtCUk9ReStHd3Z1UXR1eVc1b3FlRTRSS2lIeC91WU8ybUhJYVFvR2Foelk5RlplTHVpUlRYMEtha3EyQUdldVpvWERNcXc2MU1tUDBjQ0VSMUJJdzlFd25FVDBrZDA5Um1rMERqcjlnU3ZzUmxLU0F0bmdVZjkwdWlkSFlEZmxIMnBiTDdNamYyeHBuSjhNMERmM0w5UWhZSmZQY0JKbnFWbmQvcWc2eWI0YTd6RTZISzMvWHJUSzFlcndNUklaV1kyc0JtWkVtUWNwR0ZhUTlXLzJ4RHFBZVI4QS8xTEJTbmMyYldjOHVwT3oxNEhKcFQ0eGVWcmNaM0dWN3JyMHU1ZGpjOC8rbUczRyt1QysrZkFpakNuSDVrRnhRQjRTTmFCemk2WVA1enpoS1hyeVpTdmZuMHpqUnRpclNlY3dOcW95U1drbnQzc2dxVktEVm8rWCtSMzFrWGRuR253cVNvUXliNS9JYllBTW55Mm1DYWVhT2NGZXA4dmNLSEw1NVVKQmxaMXUzVlVLY3BJSmo1a0Q2UjFMSVhuZFFXYnphaGtNTDl3dTI2SWYrYjhWSm9FcmxTZlJBN2JOWHdicFNKcUJFcTV2bTVRcy90dWg5eFk4SGF0Zy9xUzkzam1TdlR4WC9PMjNsMXVydUlabFBPYlF1T1dyVTRxYVFOK1ltREFIUllOL1l2aTVDUXpHSzZGQVpQUS9BK1A4Zmc5bVoxZm80Uyt2cWIrN3dLSTI0NjJnRzcwdVRuTXk3UEN3cXJScGU4ckpwZlFIT1RGRHlGSGgwZHF1RVBZMHRaSGNLVXpkdmRlMUhXdWZydFg1eU1VdHl5Zk8zck9FS28yZjBYL3YwM1BZMkViSkJpUXdiRjA5REFycGY0WFR4b2s3NklDNEY4TnRxK0hmWXkxY2FXMkNoWExkN3RFbk1HUXU4VzZ2Zm5XcE9pYVF0YmlKQStOUXBaSDEzMlhjZWhBa0tqNjFDRXoxWTd3YldUOFhvNkc1S3Ava0w4dDYxRndYNkF6YWpRU0NrWDBkT2p6R3M3MWI5L2djcDl4c2RsanFVU1kvbEhkWXNYYlRiUW1ieExYcUtNRGpCeWVNV3RCakxDcHZRdlprYjJrOVJXakdxbkQxaGZVbjY3aTBHazdLV3hzVVhTL0IyczNzZThIOEZtY3V4d2E3ZElpTTErZ2JhZWNLMlAybkZxQWdMUGtQdHJ5YWZ3TUI3aEtDMkZUZUE4NWNtall6a091V0UxNlcxSGFDUnRRRFpUenl5MXJaMHZiMTJodXA3TkdyYVMrbGhmeUcxSXFzV1l5UUQ0cm5NN3ZxU2xRRTNCeklKL3hSWmNWQXNHVldlaDI3NkVJYUsxQjJ3ZFdFbFNjaHd1QTdZTDJnTkR0VzBLZWljNDhwZGpGVWcvalI2UDJuRlBpcTBhM2txMWZCVCtzbFY1ajFFVTgvY2c5cGtUZ0JNN2hZejRpNmpRYjZmRCs1ZTlaNGoyZDVQWmNzRHc0VjVWYmxXcm1Md2xMOC9sUTVvc0x0aDROUnNSUFh2MWxEbzN3R2pLbjFVWHpWK09LMjJybnZOc09OK1loYzdwajVXTXJPNnBwT0N2N0Z6OHFjaDQrSGtVbjVOdXZsTjF6bXoxRlJGSDlseDVUVVZmUVRuUlJDN21WMUZtaFoxWWVwbnJxNVo0Nm50c1JhRGhnQ3pRbGRNMVExb00xSld2TUk3WFhrRmh1Z01vT1RmWTl0VzdrVUFzMmViQ0lhWWdxdnJLNmhVTmxNNnRqN3Ura2RPSUtsd2x6RllrN0dvOVJYZlZrbHdvWExzbFUySnhlU2p5dFhUNlh0Vm1TaXlQOXZCcHRDODBvQnBlak1nV2NXSkVFSjA0eHY4aVFMZzRVUHhzdGNQY2ZqOXBGLzVWWGR5a2ZxY0J5azJrUXhRZnNDaFo3QURqZWdQRjhTM0c4OXNaKzJlVjU2QVBOZ0s2YWxnQTRoR09HbENGRDFiWjBsRGh1SFhaOWlMRWUxWDBCSDJMVkZFQUlGUmlQbHJBUDcySitRZ2FXTkorYUZQK2E1TnpFRGhucWxLQzJKejh6cXZ1eUhQdDJmUit1MnA4ZEl6aTNUb2JrVWJLUmRiQXhtWXNVbDUxUEp4NEN1d3paQkhiWXpBTG56bFlGb1lCRTZrQlJROTRHZnpzTXdCV2JyeGVBWVp0MFRWd0hHRDgrMVhjODlKUnVUSGFvSzlMU204SWd6MWtSa3hWOU5kT2hzRzhRdlFtTUdjNEpZMDN4dE5LZmxDS0VzMm9pR0pUOVZrMzBWaGF4Yk1mVVNIRGJGSjZKQURybHVrNkV6cUpnY1ZjYXRFdUlIeEVsaTd5elVZUzRJSVFzTktCTXNiUXZPNmVCbXpiT3haQjJQMkxhNHZRREN6L3ZZbUlYTVI4NGFSSStvUWZhNmgvOVFLeHdqMWtTa3YrMjBXNXJtZzE1aHFiQXhoMGpzbTJEWEtiTTVTb2pnTmlmdTJ5dkxjVlNoOXk2TVp2aTFvbXRBT1NDa3hBdjVLYXNkQWduczNKZFJ5QlZDUmN3dEtqV0VxczVpVVR3bExmcERuK0E1eHN2aXIzdFVaQjRrdmZJTFFWcE5mSDFFOGpETXAyNk5sVDNrTHRIZ1lLemtrZEMzK2tBVVRacWdocnR3dDc3elZTQnE1blovUWpLWGgxOFNLeHV4aHdHeFJlVEFjRGZiVXE4bFRZNFpKdEF0QzNXSTJkcWRHdmJyODdDYjFlcVhCaUlTb3QzOStvKzVaQlFWcWczY0huNTl3OStRQUladUZ4ZVZZUFhIOTl3Z1pnV3pxd29kck9rYnB4YlNKQ3F6U2Y2dzVPVHkwV1FRaVVUZlJ1T200RTJhNTZZM0lNdHI0S1QyYVJNNGx6ZGE1Sytldi9uTUJKYlJleDVOcTFLMUpEUm1GQzRNRjFWNkFFUVdvMkp4UTR2L2FWaytCT3VFSXo2WFh5Z0lEaXl0MHJvcGN6c3NNSmNoTkp3T0NHME1tbXdEYVltZ1RkMHA2M2k1SHZTNzBzSkl0cVY0Wkh6TUY3bEdDclN3d2ViU3gvMmlaVUlnd0RuSStxa3QrYkF0US9HK2pKZGN5M2dYa0M0eGtCRVhDa2lTU3l6aHlPb1JOSm9DbFBRRFVhakF3L2hVM2tVQzdKdHJhK2QxSThkWDFTdWdDbHhEam45NkIwcEZPQVEyV1ByaG0vaUYzU0x1T1lZZ0hBM3lHVHk0MkRVMWFpZUsrWVpaTXVjNEF1dXR2cVZqZ3E5a1hzaXRIKzF2NVluZWpwK2xRUDhKOExyREd0aE9SMnhNOURDajd5WXc0R2JucmNROWs1OEYyMWF1cmdYMVVkUURzaVFNV0l3TFRMTGtEeitTbG1mRXpYOUJBeUJ3SE9LWnZQQm53bXNaOVRUMU5rQkFUVFJSR0lXMVlmRlNMNU9Xd2hSa0VrY0ZOa0pEeXgwb3JJRmloSVNVMGtYOGJNRG9UYzJDNCtsUC9KdHpZUFhkSDk2Z2NnbFdIWGpNVE5Eai8zUERkczV4Q1FIaGRiT1ZFNmZJbjZxUE9BQ2ZxVnhFLzMvSVNBMDAwUVRsbWpOeGI2TEFOM2laOWhBblZpbTFENDNqcVoxN2pCQlpsdFFhVVRkalJBdSt2cmxrY2pBMit3OVBjNWdiaGRXM2ZGRHkzSEhxaWpEc3JPaUNCdGVzd1FjRXV6RmNOeTB5N085VG5RNGl1Umo0M3RLK0ZTV0NEanZVenVJdU1JZCt0WW5zd2Z1OFd1dUMxY0lRRmlkanBZelRUWFRGVGxNMHFGVGNWTTFyQ2w3Q0h0TEVwdlpQRlcrcVhlVUJZdDhiOTNPWWI2YzZoSEdLSFZVNXd3WkVTQ2dFMkc1RHNETkFBc0FQb2VmcVNrTXd1amRFemRuWHJyVDBSU3A1S3VQRm1TKy80dDhDWlV3RDFSL2VsRjdVQ1I2Wlo3MmxuUW83WDh3Y0tjaVhid2RzS0Y0Wng3QUVocFVRMHRIWUJsdTRHbmJGQktFWmp2NzJDanpZNkNrV3VlNUZtQ1hWbE1aeGl3Njk1U05pZE5XaVNlSjJKWFdNckJMd0JjV2c3T3dLTnhYaGh4RVhhTzhIRHBPQ1N2ckI2T0ovRDFmbktKUEFjNGMrTmg0MUJrWVE4YnZhUFJZbkNoUnhUNTFMT1dTelh3UlZkbGEzMWdrdGp3WXNiR2FKam1IRU5LblZ2MEdSSjdBblc1REJwNUJqelZUYzcwWDRtWlA2dW9pUFpqYno0bEcvb3FGbHlXdDlnWTJ6WHg2d1pTbmxkWHEyVUQ0ZEZPdWkyV1dZRXdxZlhkM1NKN1A2eGVGVjlYZytPQmREQUNnRWs1Qk9vYndFUUNOMlFIUmNOOGd1dUh4UkJtOFQrYWc0YnRZeUJ2bzRWMkdnYUxaRWdHdjlOU3JUVWR4OEEzWHJBelgrOXUxdE5nL0RjQ0hFU0tkSmpmQ25aSDZyQldGMGpQVkZyZ0VtQW5UYytQQnVTYUtnUDc5dCtZdzFXVldDVE14UXcxZWIxZWRHU0xwNTFncDdWZnVVRVc1emdqbHB5dzFkdlEwOXpySkZtRGtXekZBQjByVEpnTmNEc2pPL2g3Sm9VTVhrRTBZajNMNzhpMmFGZi9US25FUW9ibVVzVEdmRURnaEtSeExpTjZub3h4eHBDckMvV1M4ejFmRXQxTW84SXZCODVsa21OSE5CKy9XTXMvd1JVUnZFTnRDaFdYZmp3VmJGU01qWjRvUE9mNVdmYmR5S25LNWRmNHZSZWhGOHowN3lRK01TNnJVV0NLdmwvZFhHbmY4UFQ5WWtGWm1ybWQyS3NBanprdUQ0QWN4UlZkLzZ3M1Q2akMzWDFLWTNhQXlkSnhlbFFjb1lqcXEvS0VGV1ppZHN5VERWeWt1WTFMdndRajhHdllFVDh2Yks2UUpBWHRoaFc4N3pEMWFQOTB5QmVLdFlXemI4R1M3V0xYWDczb2VZNEUwTG1sSDJrWkswWG10ak5FbWV4dHlmUUg3SmxaaEd5eTNWazhQZkRaT3BDdEZkejBSRWJ3NkUwWC9vVXl1ZktvblJOQnRkM1VQQXB0REFHaExON1NSMG9LUWFvWlkzVGRPS2dIN2tybHphbnJ1Q05udnNWaEovWDFtbTl2eUpPYmhYajJSb0JKNmxhVld1NjBZNlA3QmV2RmZOYS9TdXNQeTVtRUduZVEvV0RJZ0tiV0JMM0dIVkJIMWI0RG1aNUlSV0Jnd0duQjYvS0xla1FNK2l1Y3d2bGttbjFNNDJ2MkxOcFk2UGppeUc5VnBUaDhQU3BoZ3Vsc2I1K2hRakxycElnS2JSV2d3L2xRR1pWZnd3bWpMREFrYjBmdk5hTnFEVktxTmdSeUlJOXVwckFuVjIxTHN2TjNUMVhyWTZGQVQxYlFHbmQwa3RWNkVkT2lpbGZUS1ZJc1B3aEw5Tkg3TlE0RFlLTnVaVWg0R2FkTEY4RUVyUHZQNldyb0dZQjhBU0RjL04xWjdBSGdZRVdNdTI2akNab3VBck9qQ3U0K2hNeWRRR1pvUUtoRjFQaGVQcU8wSU16Y3VRV1dPWHJCRDF4TjVQajdRS243a2hsWm1PeW91V3h6ck92TjJUbkdGZ3cxYmkzQS9uY3JNRG9sODNmNVVVK0lPdHliekc1M3hTK3FQNFlYYmpUcC9xc0ZsVSsxNXZPSHJ3dHc0Z3JaZnNoNXcwR1owbjlqaGMxVzk2VzRJNDR3ckdZbHdPbkVuK2Y4c2hPMHh3SDZBNSt3d0xnU2I0aWNWS0h0QUhnWEZFdzBoV2tmOEw4b0dDaFVwNXVaVVYxYjlvb3F2ZGQ1SkdTWjZNanRhYW1QdUpxVjVkemw0cnZ2RmdpbjhlZnllN3JaaFJpSTR0R3d3cHcxd0tRM0R2TnR2RDRiZHF6VHRycjRsTkZDL05PZTVaSFJrNy9XL3dpZzJscjRnbUxMdnJkd1RuYnpoWG1rK3Y4ekFubWh1R3VhTHBzeEFJN25YeEZUZjFOSDRkK3dtZWdEWElscTZaVys5aVM4TjlSS0FlQWdhckVYSjRuVUN2OWpHUVdPTWpOZWFOaUZ4Uk5LRE5PZ1BkRkxkcC9HZGVxOUhRSGpEaVd1b2t0dFAvSUxleHh2OVIrbU1raXZ0UXNJcVN0MzBPa3dqSDNiZHB0UXQ1bjJ6M01wZkxsc1FMYTFWQ0toUFpqbndERzBWWWJMQXBzaUNSTGRjTFRhS0VzcUlPbzZ0R3hVY0NyNmE2SlUvR29vckRtOWJ5VFZnVGU3OUtzdnFpUmQyQzU3d21OTmVVK0puOHdEeGhFeDcyUE1JaE82MjB1VUFLL2VDQTFJL2NNUnBvbTdyaStPWmxsb3Buc2FlUEp3NWJHbXNIV1NsNkpqVXc4Mm9QMDFFcUtTY1RyOHFXby9uV0V6TmtzcGhwQjZ1N05PNkFnRTAxVGtwRnlIRWZYZmNEVDdITWcrSmZ3SHo4dGNOWk9keEJ3aUpWT3g4V1RPbmdWTlBHWUp3U1Zrd0ZxVHZJYWtnbExQaXY5d3g2TlRqRkVkcFEzYjNqUVE4NFRJeU45a2JqUmJ4WEFJMkx1UnY1T3F2RHNmZW1UVU1TbFdDUkZxeUlDNHdJWDRRUTNwVnNZUEtjYjgwalhGNDcyRktYYTNlMmxTeWt0VkN3NFQyVFNYbExwdkplczkwUmkrUTBCMlZPNEQraTd0aWFad0JXR1dsTC9ERlF2UGNZVk02emVrQ2hJVjJjbG5KYWc2SlZZaEJ4WmZvbWFhUHR1bk1zckRaWjIybEhiMU9veFNIVlRhUTNweGdhS1JKUXRlck9DNGU5a3IrbzY5Q2tBWmE4SkFzRXRWUVNIN3JuenFMUkorb29OTjRzWlNuOVJPeEVTSHBpTzJWVEtMK2NVYnk4TnFFN0FwT2tPdHlxejVXMmMwanBvTGRlOTBWQzlmY3NXczBkbXovT2ViSU1rMXpUMmxyYlRhaU9tSzY4T2tiY21DSkJIQ3BvckhsN0x5cGJLZ09CSU5Va1Y5NFVNYm5sUEdENVFzeElvR2tBNVdFRlk0SDRiZ2NpaDFOd3F2cmRsZjBDdVNySzRTT0JhZ3N1UGhscXpEZ3lpc2Zodm1BOS9lak5ZN2cxbGlEYW9nY3ZNT0tST0RLVUp0cE9ZUHR0aXVzZjB3TGRIK2RCTHhZSkxzbGpUWmRjdmJTVGtVcTJNL2xLeTR2VnI4ckFMQ1dFWTJ0eDVTUnd0VkNpeEcwcFJTYzI5S0V0RlF0NmoxdktBWTIwQWF0M0w1RlprMW5sekhYNmFzT3dqRnl0WnkxNWhFQWpFVFBFYVpoSGNINU55YWw4QWlCZFBqODlTRWVCRWx3N28zTmJuZFFaRWhWdFJPOHVVeWV3cWtaK3lvUkFkVk1WYmdXM2NMM0JkdEdoQlpXS2xVem1Ud0ZLaDVtQWhZakZiZTRxVE1mNE1yNG5QalhBaGlOczNsQ1pCZU5ybnVocnkwdEV3OHJzOTZhTkY2Q2R1QlN2U1FzcDdYb2RQbU43Rko2RlVmdi9LdSt4dU1JWUJScVd1Z3BsRllhQmx2d29XaHBDZ2trWC9RWWxIbkxESDhpd0RIdFZxcEpSZzE4M0xxcWFhV00yeERCb05paWxFck5XcUVoNlBjQUR5REZrM1hjYzhZMU5YaFNXNGY4VHpyOUpmY0ZkRE1GcUNWOFgyT3V0TEpwMFlHbzV2d25ESlJ4Znp3dHQrT09SWXBaS28ydEc1OU9XTEtadzk1VkVHeHZhRU1uUm9pYlUrQU5MeityQ0RnNEMybjhOTHBHU2lYZm9GMHZ5aEU3RmRjbjVWQmorSEp3VjJZNTRQSjRiLzBVeUc2UldvaTdkR3FmU2FhQlBFbUR0a2RYcE5YZTV3UVhFdXV0NGRrSFh2cHI1bS9JK1FGU0tPaTRtS05oNkNGcG5TMWFMbEVteTh6dXpaUXVObk04aW9Fb0JWY3dPQnVONHZ0MU4yY0NYTmxCdUxKY29xTEVRZ0pDNEFLOHdPTTY4eWx2MWIzbllFMEp5UjB0RC9yMjNoVVpWSE0wTWdQSEo3N0hZRWpES1VLYTh4SFRiV05KUU9Xby9OeWg3QTE2WXhMQ1ZudVdKS2NDZ2ZjeTl3alpEbXlEWThDNjZYazQ0cW05QU1PWjQrQmViSVJDNjhKYytFa1hyN3V4YmRjczB0YmliVmlWODdTU3h6QnpwR1hRU1AxbXdUZWMrUkZCalMvZTkvcm5sSU5xelZTd0R4RVdDQWhWemcza2sxR0ZITkFiQXAxbXlsaGxvK1V2SlpDOWVHTVBnQmFaVXBDT1F6RFg1Vk5oK0NObnUzRTByTE9IOXZsYU1VZFZqTUdTREZvZ2tKZmZtcjIxZ1BFcHl2SGpVdVplWHZ1Skl5MXdmZmNLUGpBVFgvcDVNU3pWSFBHOWFXeERyY2x2YXZNc2UrSzllM0FhYTljc3FlcFYyRTJMUFIyU1JtcjN0aVJFQys5alliSnVqZm9wRlBzTTdaWkdxSmIvN3U3T1hJQ2NRYVRMc3pDTW82ejdFWHlxcDVnK2g1L1FuOG9BNXNtRVM0d1B3OFhMZS9VWitQeU1zSHAwL2FqaVRvZnpKejkrcWRDRENpci9MRnd2UEZlcWtnT1RqamN1OXo0bzZyV3QxN3I0OU5VNGRnM0owS1dvb0dvQzRQQjYrTVowaHJMOEphaDlTODJxZGxkMVZmMWVoSEpnYWNGT2xaZzN0M1hpSHZPcE5Sblk1dXhvQzU0UGt3SmlKdUR5SUpnSjRUallFSEZtaHZYYVNYL1puY25SVGNxMXFqZ0VJY3M4V1BrenE4allheUR3cHJCQjFaVlY5eVRrTTBZaDRFeUxRZ0tFOUFZY2pVSU5lYVhMcmVRdk9XZ0ZkNUJjWWI1dGRMTklJM2JHYnFKc1ExRTVQdU9kUG10N2plMnhmaW9aNDQ0bExramVsaGZrNnUrWFFXVXYvVUJLV0VJemhtY2l3TU43SkJDdkd2L2ozdnpqOS8xZUg1QlRSQjNib0N6OXgxZXdPTFV2RE52cmJUa0ZmK1IwMDJpeXRPRjJ4NnVCcy9IM1JzeVVhd29PMFJ2TjF3US9LVEJrVThaT3ZxL01qbEI2d1Z1RHErS3VnWlZDQkx5Lzh3RGtidXgxZHkrSUVUOVZaV1BmWlBiNThuVGNQOCtJOHA4MHhRWW53TWpEWit3SGRzREsraVdhUnhKd2VVL0p0NlRINmZtSGZ2OXNrKzZpbE5ONkVuY3hPeEFyeTU1bFlFK1lwRmpHblRxd1hvSCtYMk5uZzFlS2xOeDFtcjlIajd0bWZNcnJLMzE4SGQ3K0JPdFRENVZQbG5MRDRtNWw4QW1LNkYycHJuVUNVYmgzbG84MTAyVmdQN2VTcDlkNmYzdkhqakQvQWliaTlCVFlQWVcrMDlieVd1OVJBY3I2bk4wVzlRZkhpdk4vWmV1cUZ6ZXVuczR5ekVtQ2JZNHR4WDNWZTRQQVJibWtyMW10WEhpUXhURUxRdVB0ekk3SWl3enkyTVVRakI0S1FXODQrM3l4cDJ3Y0w0bEo0ZjRZYkFiWWpzcHJXTDlYWWpsZjgxOEFCYlh0dCtiUWlxU1dMZjNaM3RlSHZNZzN3YkZXbVRzRzZkUHExZ0p5Rlc1OVNOdjgvWk1pUmVaYW5JUWVGUys1MVUxekk4K0N4WE5uOGp1M1ZxRFJyY0dXN3g5NXM5K2FScElvWTBucTZmaXVnd2dwZEJ2aCt5cFZndWhYVGc5VEdNQTRVcWpCR0tFTFpMbXZYS0ZIWTZVUnhuWGduUWFycnhibTV5amtOMTh2R3lWRUxIdGpnMEVyV0ZmSndOVXFacXlxOXRIUHhKbWkwYlJEV2FMWElqUE1zU0hwbW1EUGRiY3VyTFhzNU1hV1VyVjhNdHdLWTZZb01jQnNaQTUzeFExb0cxSWU5TWx2Sm5RdS9aYjF3Rit0dWJOUDJ5Q2dhYUtHUGFoL0J3cGlEN1JOK3pHaVRZYk5UeFZTcnJCWXpubllTUEtvM3IvUkRrZzVIUkwxZUsrUzh3WmRGbzlHT1pNdTB0YnpSOHNiRTBQcVVvZFFKbi9wc0V4bnM5V29UTU5RaEpmNHMrc1k0UjNWUWUxa2ZHS2xlTXQwTU40aVFqcG9weVVoTUJzcEdUMlJFSm8zOVArRlltR0p5N21vWEZ1SjBYbllxcjZuT3pnVlE1ZURMZzY4QW5FVWFDa1o0Smh2YjdiZTB3L3N4b0VOYkVhZ1EzNGloeW82anQvcEdoTFAxNFJpdno0YXh5NDI1UjJwa09xcmlxMFZSSjgxSGtMWWN6c2dOR3VuUUZxVDVtaTdsTGdQRlQvNjZ4SHFhdDM4MG8rZUp3SnF4eDJMcWVVcmtUM05IYVIvL2Fhek9qVExpQUVTZjZuZ2J6Tm56UDJ4YjZWWVZaMjNjMXFzSC9FZ0c4TmNlYmJCWGFZR2ZrdFlQOXY3dDdlUkFIb0FBaFVrYTR6VVpEN2F6R3k4UWVYYUcrRXl6NUlFNC9XUnhXNko2Y3lDQmUyaUZWOCtzNllKcjRHL0R6RnJKT1V2WHNkVW4xUEpYU2dqQTJrNUN6N0twdXN5bHdvcDNVMnFLN0RTN3JNWEpjT3o5b2xjYXFLclh6ZHllS2NPeGJTSGVCbVN0a0c3ZnlmbWMyU1kwek05WS9xd3NoWkJtc2UxYjJJb21yWGhoaC9kdGhpTm9hNDdnc2QzOUxDWm10WUM1OG0yUVF0NG1TYkdCQnNXaDhJY09rS0ZVeWtqQXpJZlcxcnlvOStOMVZsbnN3V3V5S0ZsUXJoTWFrNnhCdWRaWnZVSTNiWFhJQWFXVXdxRkI0V2cwS3FVTmdkN2poc2ZyS3hqZ0lUV2dXbUNJdlZHWUh1WmNxTVNLNWd6ZXhDbFU4Yi9iTFlZVFV5TStQbEFmVlZESzl0bGZ4dnI3NHNBZUxjRmR6NERVa0hyaEJUazZ1Rm5hanFsblY0R1VUTVlZNWhHclVJVkEyZ0xRV0g5SlZBYzNBdjBFNUExZ2Z3ZmVtL0g0UEZnY1hucDRRRkorN1UrY2J6VXhGZDh6a3oyV3VxNVdUVS9hSEVXVXRPY2lIWTY3REZNYWZNdGk5aUR2MXFMSC9LSlREU0FVaGhDYkkzWndPQ0dESk45ZVlsMnB2NFJKV2FxNXpqQ0Q2aEJab0RZbnRrQUNkM3d3RlcvblYxa1MxR29oMjhZbzBSM0x3VlVGSjAxcDU3UnpBd2NIMlY2ZFdpVnBJWGh3WXRBd0dyMVdxcSt1SkVUdllUci9PNnZsbDNjZ3NTK3RtQTN6RFUraWk4T1NvWUp2Nkc2d0xiay9ZRDVic2FGSmxqcW5EM0V0MlozRkk0Tis5c3dsbWRkUkVEYThHWlJzNEczbDM0T3c3RVZlditnZGNuZjJITVlTYlJFUlM1R0tFYlJkQVZKcENrRnFick5nNEFZSkY0ZjVselhQcENIQ1VLOHFqS044ZGVFMUUrNE82RzdWVzJweGJrenpPVUlUUXlxeGN1ZDZNWjhld1ZtT1dwVHZ1MjU5VkRlaUZNd3hBNUJVaE5TczJkWHY5QUZyZUpMS29NV0tua3BVYjlncW9tVnlvQlBwczZUc3k3V0FFQlp2bzJ1Q1gzam1ZS0NhMk91NDg2cDNiNGovZStjdXlqRW9YRzkzelZ4R0w2QktydjQ4L3lva1RtS1J6VEhFZDdvbXVFMFRMTFVLMkRTTllaWCtwWkw3b1EzZG5iUnk2c0hPRVdZdHY3dHdmZXZ3VUNVS0xsUlMwY21XNElZMmFFMG0xdGR2azQzeE81cFVsSHRSdEZKNE9LUmI4dUVONnNsTURxTVZCK3pMUWpNU2FhbWlQazQrSG9WM05OUXNkYkEyZnhsL0VmRDUrYVBYTG9oQVdzNDhsek5hODhQbEM4aTF0UnA5TkVzQUE3YVgzei9LN0p6MTdIN2FwZ3cySU1oMXRyTVEvZW01aHBmS21WdEljVGYxUmhHeUJCS3ZLc3B4YjltQzJrbG1abmlFZ1lIR2JjYXJRSkVJWU9GdGQwZmtwUkx5YjlvNVptYXFSTWxrQ3hWaFRFa3l1a0w2cTliQytRRHd1RVQwQVBMQ2UxNlJjNGc0b0UyajF5RGwyOVFPUnlMZkdhKzJHZzNsUGVBMzF1Ykl4aDdKandua2d0cnp1L1UxbTIxNkdWcERWK0R1TFIyWWNHVk5yYkNiWjN5NE5yaldxUkg1M2FweGU2SExLRjY1MkI1R3NPOXQ0bW5FS3pFRDF6ZUp2Tmk4R25tRHZLK2tTK2hDaDU5S1lJV0x2aEdzTXg5bWJEanFjUG9WMzN6V2hGSzF1NUR3UzNhbU5oNnE3NDNQMkx0YWtkT3BiZnZ4a1hZdVpISm9LNFNodGo5cnNEcUxuV3dHTnA1N0dXQytIRFZoeXpCZVU4b2Zhd2JDS25DUnliRWZmWTA1T0tPdXRzOFNmdEgwWjJYeWI1VUNkL0hlNU1ZQ3lYWmJzL1poSmErZTJ3TCtGYkMwOHY5akdCeEl5NlNuTTd4YzN0YyswR1pRTFdDaGpzMW12NXgwdkpjUDkrMWhlZVhvOTZSNFp2U3NUNHFxZloycHhTb3gyeHZHbm9YZnhVOHAzL28rTzhzdlZiSjlsUFo1bGY5NytNbExpZEttQzhtNjBGdlh6VzcwK3ZkWFg5VmdZeUUyR0pxS0NOYzkrOG1EQ3J3bTJraHhWdjBPOUNuWVZHN0wvMDZScUtLdDREekhoWDhIUHJxNW11OHhUREt4OFhUT3VBRHZtQkxrb3JrWUdZbmlJZGRUS0lWT2xORzVQeHZuYTZqL0IzU05yc3dVQkpnVy9BcjJQN2FJQ01OblhRRWJYYnBpNmZ1cWtXdjc3NFFLekpSQlpEb3ZyalRwL2lyc2hCTXNpVVRmQ3YzRmtxa3BIM0NuMStyY01ENENFTkxvQkpIalE0OVpaS3V4U3h3Ry9BYjdmamFTdTkrVisrZEdYWVp0b0NoNCtRUTA3TW5tRWpZVEJnN2lVZjIzOVRZelhwK3pheldpd1RvQlFjTXhKL0QrYUg0RzVhZ0I4SjhDUkQzMmNDUTlKUHhxSTZwU1dqL1k2WW9XWTlqb2Q4REV3ZWwxbUIycUZyVXF3Qk5EWXZrQnJMdlBjRTNBZU1uemNzbEV1aFAzYkZUWmtwZmVFVzJoVHdKTTJxL0RTNDg4ZFVBKzFsNjdlRHhLMkNxWTBOZnU0cWRqNVB1eCtITGNZRGw0SzU4Tlh2dlZ1TmFDMGZRUjRRT3pqSitDbSt1UmZiMi84aEVMdDhqbXV2VitSa0M3aVp6dWdVc0VBTHZhTXZjNHQvRXZVbjZCYU5hUGxubldtRDBick5PcjY2ekNyTUlvZ0dPRXRud1M1cHFpUDZ4c1pKNGI1aWJDb3pybHRKL1VkQWJUcU1lRld5dWs4SkVqSERtVEo3VjJCUFB1ck4ySzltTkwwSVlibk5HQ3VWQVcvcnVyZjZZdzhSa3ZVUHBzYW1hNElobzB2bHRXeWNGU2pSMHMxS2E5UjN4RDMxWldhOWZtN2pVK1M4L3NuU1M3L1ZwUWNrK2RGV2t1RjlQR2xlL05VMnRzVTJXNXVBaGZJZldkeVdjZHI0S1JLT1hMK3VEa2RXVTAwV3RHMGg3eTFYWWpzbDkyMTZzWnBnU0xubGhmNmZMVklGVVRjek5ldmRxS1Fib3FqY3RxS2laNDhVYytvVDM1U1hYM2xYc0gvTXNxMVZhSkVlOTVwWDBJeHI4L0ZvQUF4cFdkV0dsUWlSTE93T2tmN3pOMlJZVW9pR004M3doSDdMck9jUEtYVkFEVUc5Z3V2ajE5ZW1ZTHRJK0h1SG9NYlV3VEc2SFo4b2NyQ1hOMHF4S3dWT3prZmpnWGdSZEhTQUhKV2pKQnA5RW54QjJObFNoZmVaVk9lVXRTdVEwSFAycm5aTStCRTFrM0FUcmVtbDRlODUzbGRkNG1BM3d1TTNER29WOVdocGlaTmtDMWhpa2g3R0JkQmQ3dWhSVXNoU3FPT0JmcHZqTllveVdCc0VtbHBSRnhzc1NZbTZhakMwdXJ0ZlU1Wmg3bU8yQnQ5R2xKVGg3SUJKNW5DRlJxYzdHTTFHMnhyMTJYaXZsbC9jRGdTNEFKRDMvK0RTUnlMSittY1E5QkcrNFNTMVJDenliS3NtK2N2Q2tCZENwK3FYTVE0ZVg5L2VtQldSTDMxL0ZwZXJaSzQvaDdic3l5bllxMEJHUnlIMWxsbktSc0lSa2szK1h4NkE5MkNHVUNET1psOGZaUTVSVDZLSjlOWGdsWmJoR3Y0UklrNjFqTkxkM0ZseEJnOHU1d0N5WjZPS3k0LzJNams2bDVFL3JhcFBsOGNiQjFkRGwxL2NHQ1ZRdXY1TVVOcllBMkpIbDBoSEVyekp1OEZLNFNab2pBMWtWVXZTK3JRaDhjWGo4bHdxSk9QY1c5SDJscms5OGhwTmJ1ZmEvUnE5VVhSOXlRS2k0UVp5QWEwWGQ3eUxjUVFEMWNBZ2JvTm5YbjNoNytrRmkvdituMzYrdnBIQUIrbVJRc2lJeS94cFBKMkpCR3RjWUxXNExGVXo1Z0pVdXR0akNDNlZBZE1MU3BWZFFLdDdYTFZYNWxnYmcvSWFIM0RlbDM0SmRvUk16akxxY3VvSGRUKzZEV3ZFamNhMVhjWWRicDJwdzdPMTlPNm9FaVdBRStvOTVjYVNDWG9ydm5SWHZDQmxibzBFenJhUTR2czNlOGhySGdOL0UweDExS1RFY3B1RDU1N3Q1QjNieHlma3Z5ZkJzekJ2dU5qenNsWldpUWVrTVRRVGY2T20yVnVMbW05TVJKWUV1bURsR1M2eXVjL29CNTZVbW55ZW92MGpFRXJvcDdnSXIrdW50VkE1Q2RCZzZmWjMyQXFWb2VNK2hObGtYV3p1aUZ3M0FzcjNFVXh3TVdQRjVQaDNnVGVwams5amJjdmhLNjl5eHVueWY1MU9rcnQ1OFR1dTBOL0pTODNJZDNBN3NvL3paUngwYW5pbzUwZmVSbzZ2aVdsamtmb3dmUERRSTVGSURIL3hWQ042QjRPUjlFY1VqellkaE1uVTk0aHgwME9ubXB2c2oxbUltdXJhdlFCQ2JpQTZCMEkvQ2lTbWtEa0NoRW8xam0xNEpJQTBxbzBwK1NOdzZROUtLRTZJTHMzRm1LZGZTeUpYeCtTand6aitwZFA3Wnd4alpCTFg4ZkpxSkJlU0VTTExGTTQ2Mkk0alh5Ykl2T205cGpaVkVmdVEzSm9VQ3RINnVnbFFMWmhVNERLU0gxSFNtY083US9VKzFKS0g4eERTeStaMW9EaVhyUnliNnVoNlQzOFNveThMckc3eDI2ZEFVTkkvRzVHKzdmYkNHTU5XdFZFU2tzOE41SlcrQlU4U01xdy9USkxNbXo3MjB2MHdZbVlySUpzMXJVeTlURm9namRoUlJIUmhHUWc2cE4zUnhaT0JWQUVrRG41ZzJCSjZWM1BSNWFMSTFrOVVSTElvbkhLR0RrSTZ3UEw4NFQ2OVBabE83ZWo2L1cvNEJ1WGhFcllGTjVXZktRTFAwZng5S0ZTRDZkNVJxWkFKR3VkQ0NSRmZnNy9kYWQyRjdBNFdBZ1QrOFg3TkVJa3lLRjVOWFBmZ3FHeWkwa21ENGJXQTZhdVNFU2M5STdWaEpCSTFmeWFEU0RZN29hNlR3Mkh4dW52U1pBdU5EeUlNZmkrOTAwMGFIWFQxUkhHQndZUEl1elM0OFNIWnVFbWFZc3lLZkpyMWE5TWpXZGRVUytlekFxVDZMZUdia05ibm9PMktvUXBTL1Jib2RpQ29NM3F6eTdDQWxvSUpqNEpZb0JLM01mbTlKRUsveFQ1azU1U3RiQWtyWEZmV0QzY09rWjN3UUZHelFwWHRQT0NtdjIxYWN4UzVMdGMydHZOZ1VwWUtiNmhOYzQ0S1NCWUtoNExxbWdsQm9YWDNBN3NuT0pzeHBlQlloZ3V1TnhxR2VoOUE3SytwWHVqOXRQdHgzVEE5RmgrZHpMeVMwbHQ5ZXVXbldYdGg4bWRVbWJ0VzdkK2FCV0ZUUTh0NjQ3NUpya2kwWkIzSlpWUFpuK1htcENoWkxQOWtHajVJRDk4aW9sK1h6aW81TGpRTUVjZGtLUXZFYWpidC9qK3JybXFycXYxdXdCc2FFTkJQOUlINnpyNjV1c2ZJc1MxbHdRTGVaaERtZWF4b0dRdmZWWVRIcU8yQnpoVjZRWVdDTUc5SlpTMWZmYzMwalFkMzR1YS9hazBLZVp4ZlFEN2hpZFNXWTRKWUdSdWZlY1FzNHdrYmNqZzhVWGZweHBEdnJZU1pTOFdOYlVFU2ZIejd4aDBNREhOemwvVVJMNHFYWXc4T1cxZWFGak5MRFhqcTI5UEh6OWg2SVc0bWU3eGs5Q0dVazROVGRHc0tJNWRVdnBKQ3JlZU1mSHF5Y2ZrVG9VNnBScUxTSTUzaDU0bFpIM1hLSHM1SmZqUi9nV2pDWEIvMGk2Nk1OY3RsUXpGS2pzZ1RtMVV4cTh2Mnl1eVhjcWFVZFBONGorL0FkY2x6c2c0d1dMS2pocXdvalhkY2psR05vbEl5elltbyt0bUJKdkFXZ3RZbzVucGk1ZTFuNDFham1LYlFNMk92RndvTTNaU0lJOXBmeXA0NGMya1JhL2s1dmI4Mmp0WmxvWWdrS0VTVjBoL2E0VnRUa1VrWC9uV3BxNWVyL2JHYWFKNWdtN1Bod1hobTBJUjNSOHJsUXpNSUhUSXVPVGJpdUdScmpOaG9lekJNc2RYZ3FsbzU2Y3FmQ0VmVldoMncySG5LdHU5aXhLcHRRYndmb0NrMVEvekpDV2p6WElLOFp6Q0U0TU1sNk1VUmJ4MkFhZTI3VVgrVXpuRTZSU0NtVjVKOTFJUG1VNUZ4WTBheU5ORXA5NlRuZkdoVjdUT3JUY0RGQmk5ZE0vVEVKNXhrb0NINUZIczVYNDZYVnRiMHNSNmpvUzRaZlJQMDc0dHYyNDhPL1VpOFBnOXhaY2xMb2xMbnJUWTBwVDVPYU1kMGhZcDFLYWFiNkp0MzQ1WjNEamNzZDRYTHJkQyszMDhPYko5Q05FZ2VqRHM2UUlrdzAremxMM21XaXlMazdyaThzM0pLcVBnMG5IYUdHZXgwNDhjQWpreUZnR2JHQndFakZYeldkTUdkSTFEalNpSnhtZ3ZOWXNURHhkUDg5WlM5Q1VzSzRJZ2hDZm1yVU1KQXVpT3lmYjg2aEp2U3IyN2FsM1FZeno0cVFQTCs4bWRHVVhRTGlmMXptbWRpUWtnNVB6M0doU0pEOEVGRmlSOGhueXlXbGVSQ05ZV08zS3VCZmdLekJxNm9oZUxtQkJ5RXlnNzUyVllPTTNyOUNHNElaeWVvVTRtb0FxWkxEWVZJbStoZ3N5bDlxVkRNWE96b0tlWG4ycXRTdmtYeGdkKzgxL2N5VGRBUTUrTmttWXlYV3ZJUk81WnBTVnIxbFRpU05RaVlOWFNqTitveWtGaE9ieFA4ZkI1QXlhcnF1aHZwWkttcmxvT1lJcFpxLzY3TldjYTg0aHQxOE5JNUtIZllkeWxGMlhvR0NhcFFLWWk5VERDQ1M3MUo1MFBLMzd2ZVlCNThZYnVHdVRRcXJua1FVWXYvOEFzMTR5QkZweit6V1pOYjdYV1l2UG1EcCtBQnRTN2pMcTdkaXFzSmVxdHlQdHY0Wi9DNW1lWjFBTDh2NjZaZkZPRXozRXdOaGZid21kSGR2RDlhRjdrY21ydGtuUllWSXhwV1ZDV0dTb0RKcVBFYmZoMzNVTmFzamwyV2hTQWR3Q0JrcGxBUDJVV25lVURSRDQ0MmowVmVIWE0rL1F2Qkc4K2c4OWxlMDkvdTRWRXZLWkRKSHFrQXJHRXJ3ckdqRkFLaXFpbExlU3NERGNHL1d4bFU1d0xSaHZTUXZLdmhBOGQxYm1nOU9iTnEwejJKVFhHdFlaZmlBOUwrRk1TTlY0d0dHc0pqUnVWbTNSM3BDeURYSTB0VFZZNytKbjVoSnYxakt5NWtOdElRU2hBK1RpMElreHBXNFRiV0tWVk5UNDY4eEJXZVhMekhSSW5DSTJPL1l4ODR3YkpTV1dXOFAwa0xYbVpSNlZNOVVLSkVpdUQ3R2taOWxwUFN2SWF6ZEFZalhWUWxtRUYvWjhrNVhWai9EdUpmbTVXZUdjVDc1S3F6clhQSXlvTEdzUjA5SGlqdmhtV3BteGRXN29yU1VYb1o5Y1lPM2pGeTM5YXcrTkp6Nm1NK3V6K0FGbmFNYUdEQ0tuV3RrUlNORFpXSFp2T214ZHBWWTM4ZWhNM0FBVGZaQkxiZThJNC9ReUtneG9KVi9JUzJQNWpkTkgzTTZGZkFLNDc2YWlDSFM5TTNBeHo3czFjS285bStXMTZRWkI3U0hYbTZVL012U3ZQeWptTFE1M0VaR0ExWUNsSEFLYlVTcTF4VDMyQytBUW1Zdk5qOFd2eU82MnRUbWhiMW5HbmxqZEN3QzR0Qy9GZ3A2SXRKZDh4bzBUVHZ5Ylg1ZTZXRXhNYmUrTlIwbHIxZGdMakRrODBISkV2SHRCMFVlTys4WTF1VEFlL09TVlBDU3Ryc203dWZ5MFU4NkRnYVJiNi9MQVRGeTVJdnNXUVFEdzA3ejJzY2Z3NjIvYjc3L0RYWmJQNzVjalBadEtNMEY2NkhHY2NJNThobUlaU0FTVDAxZ0xFQS8xTjNJUkhZRWk5RG83S1hUdXZRK0twenRydmVqMC9nVEJmV3ZDdHFQTkFDbWlMeFV0M3BKVVAxdjdBOVUwa3d4anhxRzJBa2UzUXVTeTNlS0FuNjdQZ09paE1ZMFRweFdEUVdEQWZ2UlpNZldhd1A5V0FrS2VLOEhuZStvZnVzOS9JcVduTHFxNTBiVCtnYmRyVnlZODVKREJYOVpqc1FkT05kWFg1M1p3NXpBK1pnS0VScjFwOEZUZy9Nd01OZmxWb2xucjZHMG94MFIvOGZ3WG9MdXp6a0owSExXNzRIWXRkdjF4NEIrdThUNHQ5S1VvRFFYTWkxcmpsdEkwSm1UbHM4U0JPY2E1KzNWSlBNYzhRdlhrZUR1ZU1qOWJKT3JVZVNrS1F0aXdHelRRMmpPUmFXTXBIaTRFTWJENVFKNUdKd252clpYY2lTOXhkRkQ4WFdZZlNSUk15U1VxT3VrMWZmdU1ta3RrSS85dFdrRDFtblVBY3Nud2dDc2RBL09IYm9VMDNCaVVTR1FjNE5COVdXMmFMTDJPdUxVWW1OS2hON2lNZ2ZCbUtVZ1crM0k3UlNCV3lTK0ZNQmk4bzhja3g0N2J6bVFjRXRlUGYvOUMrTzg1T2ZaM3RsYjZJcTBBaFhOV3Zlc3c0OGN2TUhUU0M2ZS9VaHowclIweTN4eXp3UXhzS3pGcCthS2RTMzJVcHd2aDFIaCtWUE5FdmtpT041a1BPQ0pkanhsUDlQTmtPRzJqMHBib2o3cDNremxQZzJBalB4bEtCalYyakhBU2lFcERKUGU2S0JyL01wUTRZZWFnbDB3RXMxcTN3Nlp2THpaUTk4YkFnTDU4Y2N3TDJ0N3NIYWpsWVZCVkRTa3JxWXBMWGRTZzJYZDVHWjduWHpjbDVkdllnTUIwWkFZV0p6M2cxK1pkcVIxa0lMcHB4a2YxKzgxWUt4NFpEVXBqMjZWOVl4OTNWK2Q1Z1Y1TFdLdnFjRXRtM1hGdzVTaXVMTVMrakxabmhzakZKV3pqVklySkZmUFpwVVo5OXhSQXVCOE8zQUh1Z3Y3UVM4OWx1U1JxWU1ScFdEdVJZT0NvVGJsd2tlZ1BTRlFxWjUxUHl0SjIxQmttb0pWdXIxQllEazErUDB2b201UmI3RzU5a3dpYmNJSHpXN0tpc0lTMkcvWWh4WjFETFlReFRUalZ2VExoRVJIWmY2V0Rla29nSUxmSzVmUWhvSzJ4YmI2Z1JEajZlTEF6MWMzTlBjUFR4bDhQVk1QekNVL3I3VUltaHNYdjFad2xhSGtiZ3MzRnpURlBGbyt1TlFOYXAwd1pOREtWWmlVSEVrQnI2RmpLMEhQMlM0Uk1ZUkZIL1JhWklMcGV6YTRpcnNTK1lDVkxZOEd6REdrbXR3cStIWUZYY1BsTDB3TGlsTlFzNlZmZm1KZVZtcHFMcm5SUUI4aFBqaGJBdklxL1JLcEpSTGJjdko5V2pJYkxySFF5azIzamJzb0FIR0ZmOG5SSHI1N21mUnNZdGVUSHRaU0JoV0pTbFYwdFdITksvWVpsME1uSUVmOXBBZVhMT1JUYnBjRXd4WllkMkR0K1BpSk9xUlJiNm1temJyVGxmUUNuRDl2eUNQTHZNRkdhVzdzVFJTblFPWFRacVA4TDBpWjJvWFQxQ1ZNTXZmVUdHWndnZHgrRnV3SERjUDcxUzlSdm1LN2pPSzFDeFFIT0kzaWFKQVdybEY3QnNGcE5QMkdBdnFaY0hpeHh3Y2xMU0tFeHVqa3FjQXF3UlBHcTlWWDl3Z1p1RkhGRzdQOUp4eU1mZ1BvWVhJMDIzWGkvTE9NdG9xaHhFQ0xHeXpsclhNQUltZHJYZjFCT3hGcUZ5STlqQWhxQ0FXWHAra00zMHVNbHhJQ0w3YmVkK2ROaHBjRWZ4YXJmVmcrQkZ3VXc5MkwxWkpDVWkyWnQveU5xN2pGYzBmRUhweDkzc3l6bjIzQlRndDJqcUEwa0kvRmUvTXJ4aEcrTUI3dGo1MjljUGx6MjUxQU1QanI5Smk0ekFXOWhVWkVXa3BDU040RUxadmVLdU9YL05jSWY2ZlJXaG44N2pPMmdvOWVLQmNYRG1Ca2taa2lwS2k3Q1ZsdWYwdGllZkgxbjhWNjBTeGFhUmZJdjllcElaenloNC9KODIvSzVFRXZ3azdiTFI2dndEYU40UWxqR0U3bFJvUXU0dzRpQUh4bVFYVUR6WU8rTlRVemtIT3BvOGxiSDFveG41RFZnVFJkaUdSRGhwWUdHY25CQUtYU25aZ0RzWDlXb0JSR2VHZlBRU0VaYmtCTzZqeWpFMU4wcDdJNTg3YkRlV2hSb0YvcnBIRDBLalBmK0cvQ0lIcmlCVFlnSU02dzZBMVJXTng4cER3VUVlbWtFcTd6OFFzT3QrOEppSVdlME5YdDRPaTMwaG52cHhZTENsNVpWclFSYkkySlQ5clNLeTVsRGNJajdpeUl2cEZBNHJ3OS9qZFd5VHNzUTJkRVdaLzEzMFlib1BwUWdJc1pYRWpBMXZIZ3FselpjYXNJZzhsMXRaSUZjNGVmMnBGRlVmOFVaY2tRMDFoMmQ1Q0QzZzJwUHpGSGprLzloU2JJSDJScmduYmdhdCtuQ2Nnd1RsRXdGck51MG40VkVkd3QzS1dla2FPcHRZL3VreU1kcEdSdUVHWVZ5RFBLaGFvTlh4a3A5Nzd3S3dnZGVUOFI2NXNZZG1YaEZDbkFzYlV3bDM2dDM2ak1YMWRZTVJPQU9XM2VFRUJnYjNEcE9Vendld3NaNDlIaWdVbGxka0Jya0ZoTUY5d3dXTzBHb3hveGhHc1lueDZmL05VSVpFa25ielo2UkVwLzFTQVVyOEEwN2ttT0tvdHlCZVllQXZLT2ljUU5tYitZOWJPZjFpb0ZTOTFjeGVuWXpsVGpWd1gxQURyZ2J2WnNZWVREVkY4MCtXU2JzZkd2RTdYZ3pSS0lUaUFzOFpoOE9WUnNtb0dQWHJTYmxka1lqSFhwN0RDWjd5UFl5NTFGaFowZjZpRk9ndyt6NytFYlhuYy9TQmx0TEo0NE5DUVlVT1pkeWxzODZUczZhWUNlTWNJZmZhcDNhenhoVnZMckl5YjgrTjdtb0lwU0dBZnovRjBybUowWFF6SlNhOFF5d1g4TFdqZnphMnBrei8yUVVNTFh2cVhLUStpa3Z4RHRCNEVzNGpWVjM0K2dmMys0N2tJemhYOHk2dGVhZUI1Nld6cERTVFAza2FBVEk5VDNmQlQ0ZXZHUzVOSnhaSVpBWmNRWjlaOWJLaTdOSmlqcHdYdE9ucXlCWEFCNzhpRTF4QWZOeHgvNnYzOWFCbU9aYVBKVDcxL3k4bUhjUmUybWhJcXV1alhNRlh4V1V6MDlXWk55a0V4WFlUeTdDd3RyRkw1K0tCN256MHRqeW5CQkJzbGtXZ1h4eGR6MXo3c3pQOGVGdWczaHZrWUNGV282RFArdmlYQlRDQTkzTEcyUjBHVHFRdll6S2FobE1FWDZlTFhJcERWR1FvMFlhdWZ1REkyalVld1pQN0tRdHVhNGlNbGpzYWxGZnhqYXpoNTVHM3BiK1hqa2JlWHdPZ1NWejVHWDNtbDdyd3puRWtsdXY4VlJHOVpzaDRWL0NZK25XZzRpZzY3YjA5cDRkMHFGTkpSYkptWmVuVXF6bnhYOUtMdkg0aW5ON2FzZS9Mem04TldQaWw5YUs5bDdLM1ZLVHVGQVpCcWsvWUFqL011NkEyZVdtM2I3MTU1QklNRW5iL1JUYzY3dGNQTUhKV3krWUIrc1VMMVdhUG1wdEIrRzJGTjYzVnNhOW9yOWp5ejZnVEpNZEtVNThUYXFjTEMvVWp4RjBUbEpQa3NENUl6Uy9lWXNHdWVYSnZtUFVwUGxVQWh2WXZvN2hFc0dVZm05ZnRFMDlGV2cvMk9Gblc3cFpDa08xdUVqNnh5c0xpblUzcCtjVTg0cmNjZHNrYmc4S2RLNFlYdkRBdk9YM01ZS3ZkZVRVeHlPY29KNW0wL3BrWGVwSjVPM2xqM3ZMYVRGRk5EVlltb1Jmc2tiZDgrVnVoVW5EVjZTNS9pZ3FjNzNrdUZEclpDYU8zdktTZFd2M2JTT1FydWZOOTNKY3pXYzNhTkEvS2JYTS8yRnJiUkVSYURKUnNRdTNRS242Z3NRa3JZeldCbC9SazVyUVpxSktIMmZzN0VDUEIraDhTMTRuYWQxRk1RWFNPU1djRnU0NWRNRUViY1pYTjBkU2xDZU5TWGhKcSszczJpMkMveVZlYkUxV1dIYlgzeVRmTzRVNnU0V0t3eiszUGZ0d1BNY0JTNzZXYXk0bkM1NGFySTdIMXhXbU5CTDB1cTJvYVVQOCs2TmIzWStKNEZLbFpUZG5HNlVnT0pua0RFZ0M3TkdmWFVUeGxNZHBVZzBvY29IL2JCYUFodHZ5NGtwNFRoK0JRZEJLT2Iwd0tPUFRBTCtoUWtNQlowUkZmRGtoVXQ5dzdEOFNQbDV0R015cDhpbTRzb0ZkODFvZTNhNW1TQmpIM1JUbUlNVUhWT2hzNjVTMHcrdFU2N1FSbGRxSTY5YXVCc0taa1NQdmlRWG8zdjh2emFDRzFSb2ZEdTBPMzdPMjA1N1gydnhqZm5YRWRFczJaYW43dDBWVDQ0NDhML0pWSi9tTzN0T3Q3MFhlOXVXa3Y5VVZSd0JOaXVBci9DNHExSjY0MFN6T2lObmJodFFjMTFhNlI3WHUwUWpQTzZTWVlvT0FNeExMbmMrcUtvZ25oWTN4cmhaZVVJSENuVS93bVhoSG5McmtwSlduSWEvcnBQQlNMQVE2ZEVuRDJhMlVUUk9taTYrOG5QUWxZd2dDQURXTllxbjMzN3VacDVzNVFmRm8xSnZwb0NxVEpVellsbGt2OFhJeUpXRm83c3J6ZjhFdmZYVWlQenh4bCtVVTJJNmVhZzUxQ1dIR01UVC9QWmlnK0RvQlF0bmVhZHFwRTNsVHpFK2ZsK1ZBNWtMYXFXWi9Sb25VUyt1eTlZdm1BMm8xS1o4dmZDLzloQXhyVjFhZ1JpeStWUzJ3bjhOMGh0aDNQUDE5VFZwcHdsbUd4SUhWWXU1SWJ3UkVyQlZPVGQ2QUhnT1R1YitCbzMwbktESGU1d21kc08wbmlpTGxkRGFnNy9iQXVJaTltZksxS21qbng0aEFTNjJyTjd0V2QrR2pmYURYVVY1V003RDZJSTIreDI5RHF3dHdPY1hLUDBKczdCTzUxdmlsbWxFSUl1VEJXbHhDblU1aElSejU2bFlFK0F6ek44Tmg1T0E2ZXRuS3psWmNTR0NHaUFnaDIxN0UyTCtHK2liOXZFVjlrbHVWZ3UxeDJqUkpoNlFrd2pOSFFwTDdzY1lSbnJ0V2FQc3BXUDQ1SUVOTTlqeTZuOHE5SkM0OWdyMXlkRjMrc3EwOHlkUURhRTdKV1ZiV1MxQUpkZ2JhRGYyUytYVDBLZ1djSjBkSkRrZGIxdk4xWXBJKzIzMEFRTHJDcEFtREsxQVJxeVVXMm9zZXdRMFpiaXlzbEZsQUR5dG5aS1FQRDNkeHFXYU9Ka0tFaFNyK0IvR1IwQXA2YWZPeS9qeE9GdmJoRy9ja2llTUVnQ3I4RW5teFB2cyt0QXFMRlhxZVBlS0NzaHkycFkrVTFYS0dYSHlLS3cwWXJJTHBNYnRXRkFnOFg2Q2JzcS9xNHlRaGlWNUNDVmdBU2NCWDVwTTFjUGdvWldNS3RhamNWRzhaT01LbTUyRDhsd013aFJ0d0NsQ1crMUFIOURQOVZvVlhndzlXaEdCb3FEdmtRQVo0cGFGUlhNbzNGd3ZnV0RScXIyVkc4SmNIN01GakRnS09oUXlSL2pVYmdrSDdJbGFLTDJGZ3Nxd1RCdVR2NFhFT0UvZXRJR0lyakYvOHR5bGprRDVpTXFJMURQWHA5WGtiM0w1SDRBQjEwSXhYSjNoY3RFWVFIMkVIMitlbm5uU00xUHo2LzN4NTJiNVZ5RFpIeFFQaktFYTlNY0ppNTJsVG5zdmQycnNBbnh4dCtrLzJscnZuRmFUZDI2RW1DTFFsQm1vNCtGQ3FtMGRHZkxTeFhxZHdESWZDcTBGUjF0YWNwVEI1a0ptK1FsUFBqMEQrMWkrTWc4ZWgyYURBU28wNDhLMG4zYXJMOHZWS3BSeTcvTnU4YXhXaE1PWnkyUVd2YWhtb2I1dG5YSWMzNSs2RlNUQlB6aUdXZS9Fd1huYnVxaXJXNk5RbWYvYitvZnBWRTZPa3pudm1LVXE2NW4wZzMrMGp1WXBIa2dyRWg0V1pUVDdFMEQzcWZQQjlla1hHQUJVRDh5Y09qTnNpYmgwZm1hOHBDYmhlU3Nuc2hkM3owYkZwR2JZdjc0MFhCdVV4eUx1Ylo0cUU1N1d4RGkvZ1cvVTJWUjRZclJRQTFWSFZEVWpKNEdoKzF5RGdSSFpiQ2FiZ3NhcVg5OHRqTUtaSDZJZjRDQlBkTzRZTnRNK2ExdzNQK0MxcjBYWEFvUFVEY3dwZHhCeG9JRXkrWTc5ZE1UMTc0NHBjK2hGQ0tCQ3J6anQ0U0JCb3pZNW41S0c2YXEzQzAwdzdjcmwvM3B4QlNnbWJuVmRxMXRhTGgwWHV5VW9kdU53T0lFWXpEeXBpN3FwZEY3US9CSHRiM0l6cWhUalEza3Z1SG00N2ZNUk9JSko3RW5WVGRHWW9QQWNvQnh1dlJVWFFvRmpsWHRwc0VMaWhYUEdhVTBwUi9UTWp2eFVsL1ZRcE9hbXN5WGZIdzJnQjI0b1pqc0pnZ0UvV1libUVEYjFZeGRPKzN1Vk5xdy96TlI1OVc5MVlua0pCWU5MYndFVTI0cTJlYUYxd2M1VjJQRGhFMk5od1dqM1d5ay9qMXM3YStxQ2U3TEhxNUZGSTBCS3JTdXFzUFdLbnMybE94VDFPcnNkS0ZENG5Va2ZGSUI1SlVqeFh3RkZNOER6UCtmS0h2a3VJMUpibzhpZTZET1N6UE1NQ3Y3Q3FqYlZadUNxV3FBMDJGc3VNRFVMOFdnaklnRWRLTENpME9FZXQ0TmpYb1UvK0c5U0MrNXNiYjZJMXF0L2lkSkhETTRtU0V3TE5KbXh2UHNPS2lFYXllT1J5Q0ZxcGFrcTVhcVQ5VXg0a0hvbWd3dlZZSXczODVGT2tubVI3ZFZmamdOV1F5dVQrVTF5eGpQeFdFUytFMXQ4NHhqanZiUklVKzlEdDdPMVllLzlXZFd5RnNnYit3U25xaUJWZkJ2SUhRb3NtNytFQ2gwQ0FhVXB4cEZMdHNKWVJtTzBRMU1oSmVSNUlkbWpXK0g4SllTQVMwYStPRG1aVW43S09vOFBIb09CRmhRS2NJMWMrV1k4dnV1eE9UL0JUeFFDQllycSs5cldGS3lsSDBjZjcrb0VvdW91Y0xEeEo2R2RmcGJPZnFRbWRxcjhlWG1SS0NtWFdmRGllOFRNK0dJa3c2NEVYVGxxdEVucjFGSDBYU2x0MjFDNHR3RGF6cDhBTkJrN084R1o5Z3N3STBRcmVLYWlwTDVnRzlGcEp3b3FqSE5DVHJ4Mm51L2JJVkgzTTRZZTAwVGdZRVFTbW4vbTd1bDRMWkZSOFBRS090TGMzZDJha0JpN3RrMkxPZTRBeTlVOHhVVG9PcFV5NDkwQUNyS05DSFQ4SDNSOEk2NnRJRHByNWtpelladCt2TllTRzdJWStTSDZEY0V5bXRuejBmWXJYTGNzdkE4WTNNK1RIMFdVTlViL2VIWERHaHpQZnhCM00ybi9LY0pLM3VUNjdERGpPNDl5TWJmUERPalFFVy84OTlqdEkyVE96K1ljWFdxemIyeTRtQWp1UEhFYnFxME9CTlRpMlJSelF0SzFnWm9oMUJ6Z3NqbWdXNEpEZGtvVTFnVW4yOU03VmVVLzNFQXBSUlFBYlBIcFFUYmRmQ2UwaWdNZnJKWHU1M3dTNDAxbVd0VitYUlFiYVVuS2ZzUEtycFo2cmZmcG15b0YyeURQaDY3eVhGYklrS3ZVUWlia0J1QnBhclRRZnZ4UFVtdnNLd3JPR0F1SFloU0RmM0pJOXFOWStDbHl1VmhWTHk2Q1BVSnlkUDhEOG5wdEU2b0psWUNTamlVWXlaVE9PMVN1SVc5R2hRMDFCSDRpN2pUaFhzWnd1VUY1YmQ2VmRrYkdEakcyTS9IYzVBTE5qeHdKVHc2YUlEdGthS3JRRTBJL2xvZUVWZ3FuRVZHSVYzMUlEK0tocDRxckkvZGlRa1lUWlJTWnltR0ErdmZSMGJwZU9BMDNJQmVYQlhORDl6U29oNkFISEc2c1VpK1NWR291WkZicDlrekJoa0M1MlNCVGpnVzRselNEeGV5NStkVkR0NWNIRUhhcGpEVFZIcWQ0aFZ0YjI2c0o3UngzK2U4MDU0Mzc4Y2hhNE9zVkdPZU5WZnlVU2JFSGJLbGhmTkgxcnEwM0JWOVYxc2p2UUVBOHR2SWQ5dm80Y1ppNUkvSmhtbld6ZWszWjVCc3VpL0ZLZDJRaTZYRWFjeU9SSHRvWHZqeklPbHc2ZTB0YVNlYzkrSG53TDRuU0F0SkF3TEN1MmQwczJMSEovMDNKS2VuckxCbzJsOEhaSW1Db05KYi9rYmM3THhpbkpLV0hWQThUNW8wNlIrQlhXMjQyQjlRU0Y0VnVvbkZUZnc4WjQvVmZEWnFocGpMcmtTdjRNbzNwRlpHQ3RMeWdRclJTaFVXeUw3M3h3ZWFnSFcyN3IySzE0dG85Y1gxSnh1elhJUXkwUG1DSWFST2ZxN1U3TmZZTzZTeEtHRndxcXBoVWl2QWV0VGVYR2ZlOXVFdzhnVlFVaWgvYk1MdVFJYVQ2SkFKdFdacGZtOTUvMk9wRFNGQkpXSzlFZG9sRytZSUxYSUxENGJURnlZRTRrMFQ5U3J1QXl6d0NwZ1FzK0ZWb1BWS2R4TjJ3SUcyVGZWUHBtQW40NFBIdENaSlQ2Q05VZHpwckc4akZOOEJWZFI3TzVGdENjYnIxMHZ0OTZtZkcwZWY5WHRRQ0c1Mks5MW1VQlFCQmJOaTZWT0xHQ1h1dnNUQVAxTm1pVW1zemJvNTJsU2R6U01KK2Y3YnpxR2tqSUtlaWp6Vm5Ed3QzYU1FSVJpUEpWdFBUSEhCRUtoWTRJa0VNUVcvZTV6SVRhRzJPVnBmZ1RNQk1kVEJmLzJRQUJBQm9BUUFBQlF3QkFBQThCQVVNQ0FBQUFBQUZsQWZoQUFBSUFDUUlCQVFvQ0FBTUFHVlJvYVhNZ2FYTWdiMllnUm1sdVoyVnlJQ2d4S1E9PTwvQkRCPgogICAgPC9CSVI+CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I+MTwvTWFqb3I+CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24+CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I+MTwvTWlub3I+CiAgICAgICAgPC9DQkVGRlZlcnNpb24+CiAgICAgICAgPEJJUkluZm8+CiAgICAgICAgICAgIDxJbnRlZ3JpdHk+ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8+CiAgICAgICAgPEJEQkluZm8+CiAgICAgICAgICAgIDxGb3JtYXQ+CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24+CiAgICAgICAgICAgICAgICA8VHlwZT45PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MVo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU+SXJpczwvVHlwZT4KICAgICAgICAgICAgPFN1YnR5cGU+UmlnaHQ8L1N1YnR5cGU+CiAgICAgICAgICAgIDxMZXZlbD5SYXc8L0xldmVsPgogICAgICAgICAgICA8UHVycG9zZT5FbnJvbGw8L1B1cnBvc2U+CiAgICAgICAgICAgIDxRdWFsaXR5PgogICAgICAgICAgICAgICAgPEFsZ29yaXRobT4KICAgICAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPkhNQUM8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5TSEEtMjU2PC9UeXBlPgogICAgICAgICAgICAgICAgPC9BbGdvcml0aG0+CiAgICAgICAgICAgICAgICA8U2NvcmU+MTAwPC9TY29yZT4KICAgICAgICAgICAgPC9RdWFsaXR5PgogICAgICAgIDwvQkRCSW5mbz4KCQk8QkRCPlNVbFNBREF5TUFBQUFNcnNBQUVBQVFBQXl0d0g1Z3dXRGlZWEFIMEJjMTh3QmdGaEFBQUFBQUFCQVFNS1FBR25BVDBJQUFELy8vLy9BQUFBQUFBQUFBQUFBQUFBQUFES293QUFBQXhxVUNBZ0RRcUhDZ0FBQUJSbWRIbHdhbkF5SUFBQUFBQnFjRElnQUFBQUxXcHdNbWdBQUFBV2FXaGtjZ0FBQVQwQUFBR25BQUVIQndBQUFBQUFEMk52YkhJQkFBQUFBQUFSQUFBQUFHcHdNbVAvVC85UkFDa0FBQUFBQWFjQUFBRTlBQUFBQUFBQUFBQUFBQUduQUFBQlBRQUFBQUFBQUFBQUFBRUhBUUgvWkFBakFBRkRjbVZoZEc5eU9pQktZWE5RWlhJZ1ZtVnljMmx2YmlBeExqa3dNQzR4LzFJQURBQUFBQUVBQlFRRUFBSC9YQUFUUUVCSVNGQklTRkJJU0ZCSVNGQklTRkQva0FBS0FBQUFBTW5YQUFIL2s5OTlIR0dBZWRISWFDdWZJMVdCMEFrdmZqZzVKaUJOY2FIdk4xb29PVHM5Qnh2NXZ0b01tbkNWRnVFdEtiRjhJNjlqeEs4RDFmTElLajZkSGlXb3pOUU1uK2RuMlpYZ2wvamF4SjBLRGdIdUJoRmg4Q3cyK0tCRzBnYkNxd3F5WUROREsyY08wRXVnNDZWWXZ3ak1qSythdElZV0R5ak5RWFlLYTMzQmxxUkM4NEg1a2ZBd1VYeVY5azNLdWJET0VsZkgyTnNmWTd3K3h1QTdPN0pFVWhvMzV2TmpKcm9rUzV6TTRHT2R4Yk1IanNXcVVrSWZKa3IzQmphRERTMGtmbWs2aVk5RjczUENKUkhBVkE2R0swUVR3M3ZlVStYandyL0ZkMXYraXVFMVdjcGVLVVlOZC9CUGd5ay9ScWlsNS9aQVRwQXBMbHVGWTZwNmNEV3hGZlQyaCtqbWhScy9KclBUTFoxa2trMTdEZXpwSUc1OVltdGY2aE4xU1VVV3V2cUdQWEVNUnFJQ3dWV3p2ZjVhR3RRM1o1b2hvZWxBV0w4cWIxWkhidUxIQXJIZ2xXcnFoV3BPbXZtWUYvSFJ1T2JuTEtramptVXlNVEZ5WFpZUitseHZhVXYzeTNvZHE3WThUTjZrcTBYVnIzU2JIb0lFSkFXWTlaSk9yRThyOTNwODNSUmsyZUFzbTlCeE1DMms1aWFkZTF3OGppaHZYTThjZ1hWM0RTNXE4cHE3Vm91dFlJTFlUeVY2bVBFMnlYaWhZYWUrTngzSmxmV1M3RUMyYXVNUnY5dThMd1lZWUM3QzJaaERsallMV3pMaXpjdjYrRTlMdUNLZnYvZkMwZ1F5YTErVEpJQU9XUHlIMzhmWnJMSDJhNFErelcrdGt5aGVkTVRKZkhic0VkZWlic0c5Y2RSTDZsaHlKcnY2MkpFa0dGMDFjL2Z6VWN3eEVzNFNFK1hKN09wNWdRelBYYXVQWnVoMUV1K24vT1lBMEZXMTY0T1JiSUVoNm5kY3Z3bXVBSy82czhKazBFUCtsdXNjMVBRQnpueUJwTWtLaFJhcDkzdXlCWm1VTjVXakZYK3F5SkJGelAzS2tWNC83dUhGdVR4Y2l5K29iS01MdGdtTzRSNXNyTHk4U0NVVlZ2Wmd6YkVnem5xOExSQjFVWXhYb0ppVUlQWmJoZExsMnlobHptQWE0eWlaUXQwVE5lajh3MjMrOTYya3JXOURtY3FLZnlRRnZsU0NxeUU1eFMwQnNpcy9ZNVkvZGF1NDIySzMvR3k1VVR1UHNlRExnOGFRNzloYlRXTmhJWHl4UHhtdlkyYUtjQ2NkSWNZQ2U0bWVBU3YzVnV5LzlHUE5acFlHcWlDQUJZUHl4Yk9UTFJnOEJtbmY5TmZyK1Z6aGJJbHp3ZXluZ3hHUHUzR091d1FOdVNWd2kybGRMM2lSKzE5NWNiSHV4OG9LRFpncVBpdGtlZ3hGL09YdmZsQStwRC9xUnBpNjN6QjBHaGlYVlFDZnkyZVQxNnhKOG90eUdxdUxtS0IzRksyeUJtdFJoc0wvZ0RDRmN0VlJYYlZVWEt4Um91SHpSK2Rjb3hWTCtRK21PTTAwRHBKYzloM3hyK2FEdkg3V0dxOC9GOWgvd0x4cFU5TDk3SzdnbW5RVUFOaFo2bjRUbm8xVkhwVTNOZUtiMGhWN3VXS3J1cFozRGVNa3E0cnh0OXNvN2RZdmEvZytBZ1hCdHpFMkdIZG94VW5VQWZwTXhoRjliR2dHQkJCM2IwVmhDU0U5eUJOM3NIdHhEU1dsdkV0dm03NWdHSjZ2VVUrb1lhNXFCTkYxd2loaEc4RnVVOERXeitqUm1oV2NtcWhGYU5pWFNCSmRGV2lYdFZnNGVRWHFHVi9zK3B6Misxcm1XMTVzMnM5Vk1yMzMxdUxSUlFRa0lUWXJvRzJyd3FMVkxVMzRwRklHV2JqQkh0TzhRVDV6WThabWZNakFRdUlyU3N6cGZsTzNqRjR0S3ZFT3g4b2ZpcE5EaDBkMCtsYzNPOGVGNFpubnZxR2JIMXJKK0dTYS9EZUpENVhYVTdTelpLZmJuc0JWZzY5RlpzYlRWZEhqckJONHJMRW5aS2JoMnoybW02OUZXWEpuWUVOY2lLQXJwakRNZTVuVWJOaklVSlF1QjJaY28xUXhSQXlBM1B5SGxHNmFqWGRVamV6blFLdGpDNTBoZkJnT3BEK3hYQkhnTnYzNUQzRThxSzFCcEpQdkVDTEtyQ1dMdkdJUkJ5VEkzYXF3d2hoVG5ZK3gzZ2owZGU5WkxGV0JFc1RaWHR3WmY2bHcyejNZaXluVHVKcXNaNlZjbjh6THZZWFBUT1o4dWRLajgyL3d1SEpubzg5cEhJenVvS1M0ZWFGcG1IYzFNN0ZFSnRXTlp1eXUzTG1rMk44L0wwNUFsT3VjTVhpNkgxcDdyaVNQR3NWN2VYaTRCMnZtRnBaRDZ5Zm9UTXdJNFR5Q1R1K1lHblRxOFRUOGNHU2liSk0vNVBUcnhQa0ZIS1Y1VTZldmlKYStTaVhCclRQdzNuSjJYUDVqRENERmdOSWI0eEdYU0pWZDdMYkIwcFhiSWRJeS8xTG44UXFDMi9LZE5wOENzSTJNRElBMExJdm5OZjFldjB5TTUvb0pPd0I3NFl5eFB0d0Z3eU54akYwbXpxYkxkZXJSUnRZTnd5Wnd6Nk94ZFBXTnFTOTlqWlBhN0tlWHVxTksrMmF2c1p6OStPTVJKZFQybDdNL254NWhCT013cnYwWnJqcXhQT2hGaUVjN2FzUDhrWktFSFJqWTgzUnBmR1hScjVmTklYL0gyK2xmSDJlbG5INGVtY0NGVE5xQm0yMktiSG9ZQWgzcEZOWVBRZkwvRVNiNVdqY1VEWmlGNWVIVlNOZnp2TEdQZzNIQ3JMWkxmOGVqRzI0ODhuUXJoakM1VklKTkxMR3ducndZQmtiM2RBaTBOOE1LV01MTXVRZVBrQTVCaFc1NFJXTGZPWlB4RlNLLzJaMlhTSG1odTBWTGc4RkpYRlZ0OXBuL01MZkk3aVRXTUdpaWN4c0RjdjhPMVRsalE1YUtuVTVpTVNNWVlwWVdoZnhxazA2VGhDWHVnMVE4WDhCTnBZeFdEUUUweUdqQkw1a2lYTUFINzBJeVpQWUloVlZ2MzhlYXBneXJpb013QXNxWG9mVzd0V2tyNFMvMGh6b2ptN0E3NmNIdzBLZGxPcENoL3pWOGxSZ1RpdEhlclVhdFVUVGlWMlVudnp5b2Q1MHVwbmI3R29uU0ZLOEFoKzFib2RoZ1hMSWdFLzBrd3pTaThkZFc3NXZZeUtiQ3p4TGVUU250OHB2UXFaeDRUZ2NvTm1TM05pRys2K2JmRkdMcnJDRTY1ZDhzV24ra1E4Wmp4RndjZktjN1BqeXBLNTBIM004YWV6ZjdYdVhzend0ZEFZNm5TQ1gzQkh5M0thME1VWHdUckh0cjlzTU5WOU9mTXhSVEU0WCtFWlRSTGhWbi93L1Qwc0t4aEE1RU91V0xxeE9manhMQnJTRlo5WmZENnZEVGEzT051Y3ByMTBGRnM2QXRPdW9SRWpPOHpFS1NjbWJCeE1IM213NXlGR2xhYmRBQStyaFF1RENYNmQ1d0p5dFozS1NrOEM4M21zZXJoL3hJU1FVMFdZRExWbC9jdXpXNTk2SE1QMUFSWHJSbWlNMlRhTGlmenh1anpRWFliNEVMeTF2THdaK3lzZ05oY1FRVjNzS0JtUGtjTXpwcDBEbGprNE9zemthVVV0Yk5vSzNlNFNNeW9iZ3BpaDlWdW5laGpLQldCWmNyVHVSdGRKbCtVT1ZkSHdma2J1a0xaLzRNMVViZWpUcjVReFIxTVRNaHlZZGdmT2xMZDJWL0FrOEhaK3o4YXZqNElFUWV1V1M4UkdmQkpjOFUwTFpETlBrSG5sc0dtNkJCY2k5eWNjejBacExHcCtiQm94eUdOMVB0OUdlUmYvWHk5a2VLQ0E5Vm5pcWFVK0xCZzJwMzlHSjdFSGpoVllENDdKMVJpU0hFblE2MXhvS0cwZlFQRzVrb3VVUllaZ1loZkxTdTV3czlPTUJEamFrL2ZPajZkUTBYdXR5WTRuQ2tXL3hYdFZjcnNSY20xenkyUFVSMUMxZVhJN1NnZ2tSQUZIV25SSVdPYjdxQ2dQbWpiZFBLc3QvWG5nTHcyc0RlK3ZzSVJjcGF0bGRlWGVFVGhwMmVocDRIODdIM1dDa1BoNGdZUnROWXM5N2lSWXBQMGtlaXF0dzVmOG1iS0M3V2x2SHJsaTlXZGlhaUNLRXA5RlJ5ajNCM0tzNmFSdzZLMUZIc3ZSVGx6ODIzN2F3YkhTSzc4cGFqY3FyUnY2dzN2ajdkamdLTkJ3aFNNb1pxcDBJL1BZdFNrQWhLVFFvS1g3SHVqK1hqWGh6TURUUjVNN3BMODNGYXRVbzQ0YW1vSC9qdGJaZlVCMWRlcDRMOFNZWGVuTUpEbit6L1hqQmhTTTd3MVI2czlIV2ppZzlhY2NaRVllUUZvMk41cVBadm9EcmdocTZjdWxra1ZjemRVdnZWdzZhWTU3WVpMRWlZcDNNaVdiWHNkUFFJaWFPQmYxTWcyaGQzOUpqcGt2VUsxRlVhSVkwUFZMaCtoVi9lYlBNa0hDYUVQUGkzcTN0ZURyYUczTldQaTJML0ZHbDZQOWpOek9oeU04SFg2MDEydGxkM0ZrakNYREVGNmllTFFnOXducDMybW9rVExVV1cwOGRuNXZuUGgyTDhvSExyclc1WVVDM1ZGZEdWWjFVODUxMG01cWRVK3ZYRUsvM25aZXhEd2c4b0VEL056Ny91Q2RHSUxqOHkrdjNXL3dBTWRNeVlEWU1OcklkZG8yR1dJK1Rpc010TDlqbHpTWGZQZkdOUi9YWURza1lHT284UjZJbmx1UE9kOWxrSnhPRFBzT2FkcDdDM1RnRnN0bDU3VCtYRGpvSm84eVdLQzBIUVByZG9PRm4wd1ZmY0czS05NK0g3UXlJWGw4WC9jMS82YndJVnRoZ3BpeXdTaWpLYVIyM1RVZSs1TEw1R21UWU5SVXBReWVkcCtrVmhGQkxNVUFxY0wzV1lTQ0dtYWVpOTl4cHlITWdhaGoydHR3dDdLTnA5OG5wL0ZQdUI5ZTBDaktRclNIdG9LNWxkV3ZnVUQyTEw0c0djQmNtQTVSUzJFcXpHUTc5L2RWL3UyOHZPM001L2M5Qk0wc1ExQ21tU1ZZamtpYmJiQUpoWUVNQnpzVlc4bTNnd0J3dnJwa3N1a3JPK09Vbzk4QUxDMXhwTWVJVllTTFphWDZWd01lV0o5ODJqNXhaV1ZiUS8xQVV1T2dRdkRVRWhJamZldllBRjBvZ2s2Q3FXTkx1V2Q5cGp4Ui94V25nQUcwaFFaSmpFVEJaNHBMV042RE1heTYvYlo3Y3YvcXlReU5CM1JSbkw5Q0hGY3BUd1F2ZmF0Ky9LaFRwanU2aFUvckM5M0RicjRGelBMQnZhVzVzQnZTMVduaGF5VVQ3VE9sSlhYektHZDZjdlhMWHRzSU9nTm9GRm92Y0V5TW0waDBwc1hiTGlzOFhObzdVRjJWeDZ0V25rY29aMVJacFk4YldwWVJHNnhDNWpndjhhdWVrSzBrWmRaWjEvMzROUGNvc1FSRkN5R1ZSakJkU3JScWZobFNqM05rYVJKYlVUTXRLTGpwS1BGMzRhaWtuN01VbVFHWFM3Q2JrNEZDcEliWVpyTmFKN3F1ZGdFTzY0SHA3S0RoMWNiS1czb2dUSmNWeUZTU2lnc2RvMVp0bGFBUWw4eUtHMVM4THJYaVI3aEZYbjBLSGdhYTN1UHZodGF1Y0ZEYU1Mc2xhTjNGcVNQb0JFSFcwQlB4WTh1dUcyQUw3VUVHbllMOXlqdG5TK0V5RC9jck40b3NSYnNJMkZWdXQ1bFFoN25WSEN6cHFyZmhON0UxMFJybWYrUkhDK216d1BlTWtOVUl3bjlSUThLRkxMTko2K3ZaNEtwSzlsdnQ5L01WNlVFZjk2SE9RRFBjNHI0eGpPVFVwRWtPWkRMSGhlUC85M25sZ2hmOFB3Ry9EUTBoWnBOZnJRaEhaUUZqYjVBNDdHZnVLVTlIOElqUndkRStwckRCMkc0b0FZZTRyL2NlU0NTamxGMHk2R0REVk04bjRJZWxSZENKRFNuK0IyNmxlRE13REVkSjVSMXM0UTJFcVdKaWV1VnpSODJTUUZObkhNMkUvTUtDSXNoL0VwNklZR3FMTm1STEJOOE1JRHpGYk9GTFZXMVZTbnV3TUZyTkZZaHRrdkZCdnQ5VzVjUmJqUHRmSTJjdXhLSnprbExwRnpwTFlITnZjSlA2WlpGMzgxb2lhYmxNOSttVjlzaXZiOWZXZDlmL3doMGVuTlI2Z015LzhiVkQrdHIzbDlPL0FXQmZDS0JDaHFLOGVoWnhzNG9LOFRPYVh6a1lHVTlNMGYzZW1zZUNSL09TZm11dHZsSU4rMkF2UGpNaFRncTdiSUU3THpMQTNMeGdkYVZVcEE2SVY0MkNQMUtlai9RMDJKRS85SnhKUkxodDRPaGJmU2lDaGk4bERSeFJrK1hCMENMeXpaclJzS0NNbnR6bG5Xa2FjOEt5cE51S2gyQUhTaUMvelRRWXV0UmdaUVN2VmpjcGp1OW9RNk5XTzBoUWIvVmZaZTRpd2NYUWRFbEJHSmtWTmNVK2tFWTJwejZrNE96Zm5jNy9UbDhHZHZZdEVJOXMvdk5XVXZ5UDlDem9rL3p3b1hvUDkrTWlScGNpS25HYUQxNFNKNlYzMCs0cy8wUEdRREw1Z0xUdHk5KzhRcnRuR0hjSGxzeU9FeVhndDJKVi90RDI3MnBXSVdPeEwyV2RFcWJVNzNpUTdnWG92VERHcTVRSklIT2Q0MmJKYVNrS05kUmZJV1NuYk5VZkYycDYvVmJUUEdENm9UNUhoa2ZHUTQ5bjJ4MmVwaVVqSmpPNENRZ0grdGtuQUQyK0o2WHRPSExtN0d2WTlqdGtQMmpPOUNYZGdNLzJYSC9mSWVMUzVwQTZiUlJpRXNWMWh1ak50WE0yTjFiZHVUaWpoNUpBVVdaZE5wMnZrcU41RVhLenE3VG5pM2MvWDZ1TWpqbXErVDJvdFNzQnR4Yk91Zkk5MDhwMEhzTXNDV1p2UVpxSnA4RnE1bHBRSDk2ZXdqbWZPbTFKaFBoeVU4VzIzNEQ4NElhZkxqNTFjRVZjOXc4MXl5QitDTUxvVHdBS1BGV3FHSWFKVkFVelpqSTh1UXRFOS9YQlZSK1cvYUVsc0xDV2w0VzRmTW9tdzdkZDFXVDJvWG1Ca1VsMkdkRk9vWXBNc280T3Q0VEhxcDBSS0VXR2RQSUFKaERad2tYUS82d3JDM1hPQUQwdjczeDN3YnZVSGxpM1J0L0Y2WFlNaG0wL0FSdkJmQkF6ekkzdnNLVVMxZmdRYi9OZENjblRrUi9tdEc4MDBYblpUSkl4eU1pTkVUU2lOQWJPMGxoaW4zVU5SZEdXMjFMVmRidWpPU01HL2E1OWFlQW1keExaV3BNRkJoM3h1a0l0Qnh6ckJzOWVnY0Rkblk4bzBvM05OVTBab0NMSStGci9PREZaT0FDb0QvZ2NPak91L1VPamZFaEhqeGdodnlwbnJOL2R2U2FnM0pBa1YvcGQ3ZHRYeWlUK0JjV3lvZC8xdk53SzQxbFF4aXlESWFLbVphYVR4WGdEUk85RTVUZjk2aEpZaG1zWi9WMjRVR0ltYldWMzd3WWhlM0t2UzVFRVpsT0xST3VmWmZGYzlXSVJ0WGNSdU5yOUNkMXpBeHlLRlRQK0VHSm8xdnlwV2RWL1FOcmc2S05QUFcweFEyWURRRnFqREFJY2VXcXE1cEM3STdEMC9mTitNVHE0cXN4WUduczNhWmI5NlR6WUUzL0FSM1hVaDhDNkdUbW0zSHY4cERKUXdRa1BUb3NSNTYrVzd5RmpDaDBOcVhudFl0NFk4QXhoMGFoRTZ3OUZhZ3J2NnVnT1lFQzBNa0U5aERwQ2VpMnBSaTM5MjZVOFFzSjVXR1FuT0V6NzVQOFlaamh4enVUbHAzcWNVcVRDNDJ1TGx6MTBZUEZJSHl5bys2RGhxUndReFMrZWptK1dST1JtN3dxWm1RWXZkZHY3a0xrVVVZYXZ4Rm5kNHk4Vm00ODRmZnZYRU4vZk0rMENtQmdhS2Y4VEhxVjNBUkQ5UUtkaVJHMG5GTzZiZVVNRXM3RFRpZndjZUJ3R1FCZXpuOCtRSHRhcWp2VU9qSXRndG0wTGRVbC80NndHSk1kUDNNL2FMbEhhd0Z2TGhxcDRoNkNibWZoMmRVUDRmTDFsbTdVSzFNaGY3aXJramtRblBXYW84R3l2WndNVGtZclRTTjBxcWxxR0VHMy92UGJEbHRCcXBlVTVZU2NTUzc1M2I3dnNON2svM2tBa3dlczBjS0NVS2NJZkFpYzFqZ0FaZm5OR01IVERjdmI0MGNseEc0eFEzL0phbkJ3MExHQmVDcFpFNTd1OCtadkQ0MGhhRFBBTU9PbFU1Z0pHb2xZUVVnRkJzM1R3ZGNFa2FXb29tRlZQa1hjYU9xUjAybm9OTk9yd2ZnUldRVk96alA1Tk5IclR4RVNzWnpQczZ2MXJNMjFUaCt0SFN3YlRpVUthWm5UaHdxOGhaaWZYUHFLMVlDUU5YMWk4RzJGKzFTVHkrU0o1cHJNbGJHYTZ0enN6U0J3Y1hJL3pKTEVLK2VTVStVbmp1bmtheFpHLzArY05TSWNJVWlXTlhCK2RmYUxPRC9oN242UjByYW4xWTlsRDFGc0labS95WXZqODhkR1RlR09HS1FVRFFuWC9ydWNVUWJuRzJIYmN5aGc0YzduQllSNFdIcUxDa0tWV25aZ3hmUGF2SGY4R1hISXlJaHRweHRDSURhWDNSbjZBbFN2NG1uSjdZL0NvUXFxVWVOMElveWJyQytVYm5jR1NHQm1iNFovYTM5ekJ1ZXAzUzV6amZNWWJaMGNEQ2VWek41QVd2OERZaU5XWXZ2dnpQSzdEVVR2VFJjWGVxVHZmRzh1SUNjUWYwZ0hzcEtER1VYOE5EekVuZElKWm1EYkhHRG82NWNqdlJwRWp4bTdBRnhjaFUzbWFJSGViNkhrVDNGSkMvU013a212TDJxbmhBSmsvelplbFBaTHNRYmZQQStDMDN4blQzWW1SUVFSalhzY2IrV2FzYnZqT0orZXR4UVF4TWFFdlhWQjk4NmRGU3AzTmkwc2x4RjBPUDIvUW0vdDlkQ1BrNkFUNTl5WS9iOUJuZlQ5WmVQazZIWDFYN2grMzZHVDl2cndSOG5RK2ZQdk1EMFRwRm9pdW13QXBVNzViMFpCb2ROenVITk1KNkhEWmt1YmpLd2htRWV0cGYvWGNzTm5adk00UENpaloxaTFOL0pnV3IzVmRuSVhNUk1CVVF5QVN1WGdyVHZINlZacWRMMzdyeUR0LzE3cXVFelY1Wlg4VFM2YzVSanl4cW90UWhLcm96dTVGbEN2QzZYZFhQV3VoR2dWRHlOVW5nMkNtb0tVM0FLN2lOWkhwaXVTaHdSQVRkMU1LQXFBV082TTloM0ppWFNNNXJ2b2tjbG03bmlwTE0wKytxdlVsa1VScGJYNEFnNUpQOU1tZUk2WWU3ak80MFdLaXorN0tDYS9MK2JjblhOMFZWd2hyMUZOL3hscFFiYmJWb3BEUDlvYTVaZmxTeVlnOWVheWZWRDVnQXlib0RLeGovTUVKTC9SaFZidWMwOFg3S0dsWUVod3ZadllhQlZ6T1VpQ3o4cndsQU56b0lGK1lpMG9YQ1RsSnlmNXpqV1BLZjd6ZEo4bm5aTjcxQU5DVEYxOVFyQ3FkdGI3RlFLMGNEaTRYZVozb1FKMU4rY3kzUHdGbllkNEFGRjFpb3lLd1l3MEk0SUZtYVJhQXQxeW1BNlFaemg3NTRjVUlQRnRDOFA2ZXhPa1pNUnowZjdMeVZYdW9OQmxrdHZlMUMwM29iQUl6R2VNM3FBMFZCS1ZMOGRoWjVmQjZNdEFGSDZPenUrK0J0WWFSSzdhQk8rNGdpTVJjVi81VXBURFZzeXFnSkZrdWNCYXZrUXF4QnBXRnR0VDFubytBQlI4NnVpVi9XMFk5R3J0NVVMbUFpMjJZU3VZNXo0bnNicUFZUVB2SElMV3lMeUY2RHkyZ0N5MXVMSENKaGlpSENjcC9WMTV1TjBpZXJ3eno3Z3hsQThOWlFkRnF3anVYdWo5cGlzdjlaalF0Zys3dHJZa3pVeWtkeCtkWHNydE9TWHF1RGNMN0VoMGVxa3ljRmNXT1YvU1FzcnFZZVN6SEY2bFEzMHFCMXZUbUc1Wmw1M0NVVkVUc2l6d2NYSGxoOW8rZUlzMFRJQWhsbzcvaC9TZCs1NHF5d2ZpZnlkSU1SdjB5Y09VSlFLeWJqMGc1WURRb3Z3a0FRRFdBeG9nSk5uTW5BZ2ZzT051THA3cVR4TTNMc0diT205RWhuRnh3WmVpWnBHaWdJbHFOUkxNNHRtQXdFaEp5V3RFaWhMNEFyWEFFOXBWTms1VmhkdUljZExLbktGOXFYdnRML1pibk9mbVJ6dGNFM0I2WlB4bWV4dVNZdmtMS0pmU3BJTzJKaUY0ayt2UWxFV2hsRzZ3dHJTbWZwNEhsR1lveXdWV01oakpLb2p4R3N4c2pObmo2WGpUWDVkY0g5SE9LTTdReDdxMkJ3amVFakU2QXlBYWUwSzRSQUdkZll4cC9JbVMycVA1YUZsbTFvZE9LSHRoU2ZtU1Jqb3dmOC8zY21KRlpZSDMvTVBRTE1ybk9obGJVOTNRaHJ6ekRYNmRkcWxSbWZJNlpQdE9RSkQyR0llM3hPNFhjcDJ3ZmdDNDh0emZrNmg1YkNtUk01c0FTREZ1UVNiSHBmVXNGV1VwY2NRUWVDYi9OWDB6T1h1ZURIZjRaVUFUS0IweWxEcXg4aURMOHJZNCtnWUk3M2VrTnlRUHJnRHBVNEZLYmpMM1o0WVQyV1dHclltbC9SN3BCTEZqcytWNU4vdG9ENk5JclZnMVpzcDNJdm00dklaRzZYOWtwNUc5SWI1d2daclJRbVZRTDcvYlV5WFFCVWNkMmhNU2ZZcXRGY2xtTzcwZmY4SWx4bGw4a3R6c1NEcTR5R0g0ZXZJdjQ3L0pBb0hpWlI1VU9nMjlxK1NzcjdGdkFZMU9ockxnSkc5VzhrRWFRekVheEtWdnNHaXd5TFpzLzhNU2JvUkxTQWNSa28rTVgxTXptamE5ZnowSU5icnRpVHo4RTh0aVRFK0VSa3R0dlRDYk9scjl4Wkw1MHRoYllrOGhza05Md05Majk4VEFMUElSRmQ1WFRmanViZDNvL2xoOHpxSlVGeEVHVzdsTVZwdHEySFFxcGorcGhLOENMSmk2bERmZVpPNmdiRXJmdXRsNW5nWURGZ0E1eTk0TFFoZ2hQVmFTVXpscVdHenFneVFQcVYyakc0bGlFNy9SZWx1R0FON0dUOWxsNXlzd1RDVDBkNzN4NDVId3JWbDRwQUhLb25hazZjNDZ2Qkd4WlppaW5wcndaYm53bStSeXl5TDJSZmhUN2VOR3FrYk03OGRvSDBSMzg4dVVEeUluRTZ6TkluWlUvZGNENTI5RTdxREEzRzhwcEJtek5MSGFhajdlVFRVeTFtdmlhYWxSSFpYbjcwdmFVcDhWU1lmZXQ0UitHR3JaSUNtaTVZYTlHbmkyajFjYkN2cGxzT3hlZDdoRTFZM2l2YWl0ZlZFcm4xL1o1a2VGUytEYTk4VkRPNzdsR2ZQZWhpWWZhemlsb2lDNmlNdmMvQ2VkTUszS04wYklUalBqdmlIUitqSnYxL1ZvNU1iVUhPM1JIZmRnWXhvUUpQMjdQZitQdGYwZDhlVldYdHhYbmY3N01Ubmw3Nm93cnUxOEFPYitaQWN2eGZ6NWFCQWQ0VHhqMjVoVVgxbFFXT2g4cklSdlRCaXpPeTFDVU1mUkk0eExpeG5NL2VQZUpPRUlVQUFyZ3ZmbnlSaFA1a2NNMWJ6NU5aZnkrdzdTRDZVV21LcG9xZ1dBUWdvV3pSZzF1VGlOWWRaeUVhdFhQZTBORTQ4c2xweDJLZW9iSGZmakNKOTBuTWZ1NVliVkZic3BVemlsY2RhNlZZcE5QQTJYcC9IL0t2SUQ2UkplaVNEQi9iU05xT0dVeWZvWDFHVU9DNnFWMTNya3JmSWx2RUIyTzJwbDczbW9vSkZHYjRjbnN2ckRwZ0xNMzJKYlNsSkxVQlFWa2dhbURDdXZneGgrZFFSM080d0c3MkdiWUxlM2VKWS8xSzlUWGU0L05UM2h1Q1ZhUG1ZOVJhV213NzZpUFhRbkJEOHlXSDhLSTh1SzMwd2Nxa2tEaVhaQnZZYzJIZWtHSEFaSUxQbWZ2eml1UjVjZzZWNmw0ZGl5MkJBMXZVdFp5R1B5eTB6QWVqMjdoWFVNeG5jS3hRYXZyK0ZBSVVzSDNOalY1WUZGc3BZTFhXSDdhL2YxclhyYkEvRWUyc3dnVnBsaGFkeVFoQ09PMEJKN3E4T0hoc01NWXJhVjNpRFdmNWthSWZteFZ3UUpQOXVCKzJFQXg2TUlEbFZUdGhiZk5KRlJBWmgwVVdwOUk1M0U2Q3dwcXoyay8zK2tHUHh5YVhKV2hjbU5IamNMU2t2SVFGbmlhVkUvWlZOcFdGS1JBSXQrZlBGMWU3YVJyQzdlaGUwT2lkQ2ZjWEt3U3NPTGhsOUl1VnNTQlBJVFRQQzdkZDNIaFpLai95ZEhmby9USjJoSlp4VGt2blJSMTJEbmtVUURMRE94ZUtsajVNMVVWQWpPbGF3SUVqMGRmUlhEZXR1dlBvSlVBY0JCRXhPMTh3VUdJaUg2Y091V1FCZDVNSkFDbzN3cG9qZzdsL0JrTGNWUGtJVGoyZjJHZU05c1I5QkdtQUI4SnJIT0xIVXRRZkVmRnBHaVNkQ3VKb0lETTVlSE94cFhVYUI3MFF6bDU3VHJab2JYTnZ1OGsrOEdXOFE0U1hTNklGa0t4UnpSZkZzS05mbUdWZVRYSWdEZ25DL1lSYVNIQW5wZ0hURWdjb3MxL1Jxck5BUG4veXhDYU9mOXFYakluOGNlZHU0Umd5Tmx1Nkd2enNoMllaZUkwWmk2bDZIVXNJN0JwYW4yZ0t2SmFNYnRIS0pwamtzYk0za2xyUzJ2ZHFhdUgvaHB6dGhQTnFpaU91SXdmUUVqTDZheW5EMDRLOWdDWnlqK2RrMk4wN3FOVGFneml1UkhkWHVFS3dyOHRoRUhOUlNmTTZZM2Y4R09PeXNoMzZhUjQvdVdoTzFSTUt4RCtKcDVIdFREVnZzRHNDZGRCSlZZWE5RekpGVGVzdG80S0xQRGRQUVRZUW1UaFcrN3Z6b29UNStPWlJVRmhtM2U1TjJRN01taHh4WUkzNTdiUUFmRzErUFFhbGVXbitSbmE5MUxSWEkrMExiRlUxTzEwODRhdEJJS0t5STZja0ZUVlRLZisvVGx5TXhxL290ZVMrZGtGVHkvMGhHZVJHc0xYYUpSTGpNb29XOC80MXZmT0xFQ1ErUGNhenlpWnhWTzRFQVprUklaUUthU2syUnJLaG5NS0ZNK1UySks4R0tOWVhtczVidVFidmdCbnRTcytYZlhNMWZMeENhVG5YQnYyYVBvaTlwQ21KTGswZzlDUE9YQ3JmYXB3NFQxUEtzZTZBelZrSXI0aEI5THdkU1pWbFdMdEQ4ZHJuM1ZsSHNJeTB3dk9WOHhVamZrOTlxK1JqVWtNa1RiaVZTNVRuVTZNVlhPUEVCeVZCM29WbW9GdHBUMDJWbVdOQlNGbit3aGxnMHFkSnU5QTF3cWZ3VHovRG5acmZEN0xNdEo0M0RzQlJHOXppN0ZoTVJtVjNJdEluSm9NYzcxc1c1ZGx3S3BTZlJ0VlBhWThsdjJPV0xNdS9yTmVGN3lybVM4KzZZZnUvWXZjcHplVUJnb2xaL0hSTi9UdnVXdWJuQys4cGdITEpiR0pBcURwOHVWOWNlMXVwRHR4UVVoUmdCRW4vcmMvNXI1ZEZEaUdBMzdwSEd2T0ZXbk9NazRPMG4yaXlIVnZGRTBjdzJGQXdZUEpGQ2ZnQXRzb1hpdUcyZ3lkNDcxRS84YWVMazJlN1NxcVVRNGc0ZUxHQ2ZmN285RWRwWk52cUJrQmV6N2R0bWo4aC9MNzYvdS9ZQktYNUhaZ05GOWM1cGxYNUJBUkhSUk9GVTQwaTA5RXZpMVhUaXNsWEpwb1h1TnNpK0pxWWVFZTZhNjUxNFNxZFBoTjRFQ0tLY21yRTl0UytTVnlFampNYTVWbmRPYWp2d0o2RSt1b0FqZ2FCejVocWFHbFJ2SnlsODhWMjhIdy9lYVJPWk1GejB3UWt0RFZra2NZdXd6cHpWdDlESGZVeDZmZXBzUkJvNTYrajhET3g1a1lrbHhvY05hWFlSRjVucUVpcUMwYXA5U0RKSXdlNElneWo3TGJFandhMy9lQldZSDNVN1VkcXFMMnM5dFN3eFRoSXVJTzhjTElQZEFuM3BBNEt6TFdDZTcxbEhDVjRGSXVFR2I3aExXcmpQWGdONCtKRmJ2Rk1wUTFmc2ZuWlVnYjcxSEhnaVVvUW8yOXR5WTcxeFFsZ1Brc2dNeFZsV1RjbjREUzZOQVQzK3RlV2laVEVZRllIU1l1em1lVFZLaHBSbFJnUUpKS3NyaGhlSEZUTXRaemZCbVE0dVNYVmhMbG5VUlJWSW1XeHdzWVlpZW1YSE1DbkV5UE8xcEtCbmRZV2c1UU9qMjBuc1o4SHRuVEx4Y1N0SkZPQnM4M0prb2dmUm13SWlZZElmTkFQNWp3RVZ1ZUorVkpiaTlXam1CQWgrLzJNNkZNT0J5aW83N2VYTFdzNFZReWRjZXYyR1dYWlduWVJsWEhLaHZlMjM0QlJDQ1JZL0MzYmdWWFNiL2VaSUxiQk1NTTFBeHduQjl4bzYxZERjRExNRCs4NnZrbXI0T1pnVXIvOThlQUFOdkU3Vy9oTHBrblRoSWprRDNDb3BVdWV6V0tHcWduaXpSQ21SbEZsZXE5NTlza0ROWG04Y2t0Sk1DTlBtemJCWGczVUplNm11QXFHRTZjWXpjWFREVlYydnAxRzZsQ0lnK012WllrdmFlR0pIV3RYWFI3V2dFMUFzbWZFRCtNUXJTQzZzZTVPc2hGRmlBU0l3cXhGdE43VHNkSmFWU2ptcXZXUUdSSWZjd1A1cFJqQnhBSWZ4aGZTbnorSGdhbWF1WDVrM3VrSHZSdTVORU5Fcjh0czVWSjhuRElCTWFxdDBlWXFMemU5MThOZkc2SkYyZzRDZzdNZnhleDdSL2h1bEEwWjN0V1UrbUM1ZzZNMzdsWEhxTmNKVys2TzloalBLck1FTU1NeWRyM1I0RnZueGNGUlJyNXpGZmNrK2hKaFY1SXVScFJOVEdORHMrL0FmK2REaXBVR25aejY0MGZmQ2xGYVBwZVFaMmh1UmJoRDMxZTJhQkZ1NDRBRzYwZnAwMXV2Wk5FakhtZHg5dmViWjhBb040ZDdVKzVGQzVVWDhXWm9zVmo1b3ZuaythcUpmei9RTjFoc2NVUjFuLzJHOHhZa0VaeUN0dnBIbkFlb3NYVmhDUXUyWFpHVDBKa2Z5Q0pyMXh5OCtVTGFVRVRCQVFIU0M2d21QRHEyV1RLaHhrYUVCUEdxWTN0WEI2cFVtWlI4RkFOSy9RYnNsSG5vTjFjM1NCSXI4aTZyVm83dldxZUZRNzM3NjQ4WkpadTNOSndORWFoSTdtRjBJL0JBcFBranh2czFMQ2NFd3RkWEFFbjdjdk54bExROW5rS3lpRjE1WU1vbDVCbTg3eFJaY2ZlaSsydGJrVEtJZ2xNdUlMb0RwUVpxNWVqekFBd0ttQXhSV0dsSG83WWhwT3FORDBHOFR5OEVqczRkTEdscmxBUUQ0NWZjUnJoUWs5N0ZqU2tHQ0dqVy9yZnpJWTd0QURnNjRXSlBzSm9GRFQvSVc3eUlHTzN5Y1VNSzVTL3hoa0pJbk9UYXQxUnM5NVVCaHRxQU1rdlV5S3Z0RE9oUmY4NUI3TkJla3lYN2lEWDFMdk9KV0xiSGtlcXFvNG5zQ0M2WjhITE9TdUppOHpCaXVwTXZLWkMwZWpXeEwvV2kzeUplQkMyVFZkMmRJQTlUOW90Z2d3TWNVNjROTHJxUnp1WFRGdXR3UlB3azhmM0xJUmo2T3I1djYralgzTlRhSC9mckxGU0NIUGlBMGhFc3g4dGYxNTJYejFwUW5ER1hWUnRvZ3dER09aYy8waUEzOWJBNnA4aXFNeEloaTcwaUhuTG5zdURPMStETno4WC9pb3ZxRTc2c2xQMS9VWHd4My9rVDlOOWtibEhhcm5QcmhJazZSbEdtdTYxd01kSlNBenQ3WWRGaDU4YkZZZkg4eGF5V0xZUlFpQk5SUFlJMFQyOEUrN3dlLzZPR28xRExhQ2J4cHRWNlhIcWJaK3ZmaDRxL0hES1FLa2t0U3B1bGxrbmdDclpJWkg3akFnOENUUUpYMGtIanhXR0RnRDRCM1lrZjhxWGREbWdaWmYvUldhUS9INDlFcEk1OURxMkJyZ01lUjdpSDNKdExVb1FGRmdldnhDRkgxeUcwTCs0SWVPRENpUk1GamhlQnZtZHZwSXNZNnZ5ZWdUWVhNVEpxTWU0QWIxNEcvYTAzQUIvTUlJWWl0UWM5ajVWTGxLUlc0SkMxWWpQc29idVNqVUQ2ZVBZY3NVK2pZZXdkQTVkZmxjd2VpdmtHOFUyM2hhN1paaGNOSmE3K2dHODFSTjRYeDNlQ3NQcmpHdEJXOHMwNWZSSStYbFplWVREellGUXJkT1cwd1hISzNTNXpQTjRjVUhjZmx2N0h5ZGlaTW8rTTlUK05IMC9ZVHJQUUhiRVV4cFBlM2JQU2h1TGZGMWdURlMwcGk0QXg0QThHWVFFeDRiSUdkTzNCcDBFWmRYNFpUajVxOGx5YUk4eXo5NWsrbW55LzhNYUlpV29PbFdiRHBMT3lmZEhnTG9HUWI1dTFmS1VZME5CNC9YK2N5TnNBeTY5OENiMjJDL0ZvYUZyOTg4bll3b2xTcXkvT3VHSzZrcThnbnVRWEZ2RDBSRWZYWWZSQ0QrN1N0UTJDR1QxQzBHdjFMVml4eUd1aElKZmNvTTNKNUM4SVkyL1ZkNGRJMGtqTlgxS25Lbi9BR0liVVlPTHVlak95TzdkanhWU0YwRTdKQjkzVURXSXdrTUZ6amM5N0JteUpwczlaRmJ6MmFROC9oMG8wYUJ2NTF6TEh1WmVCZUdYQXdIcEh6OW9reDNXRm1VN1JoelJadVNJUWxYR1hjajVJcER2MVRDazluc29USkl6QnlSNnhidXJURW9DZEpudG1idkEzL1FxVGhicWhaL3hXL3JZNnhFWkNFNnZRL0pGeVN3SmlFZUU0VTdyUFFrNFo4U2ZtdzdGOE5mL2c2SlZ2WlRmTW4vY21SZTBwNnRVL3c0Mk5ZMURhaDdjN2RWQTZpSHRkWk9BbXF4T2tBYUJabVNSVi91bU5HTVlld3V0NXBta212QkNzMjhHRzMrL2FwQ3NUaDVXUVdOelozUzM4SG05bnhFd0M2anFKUkVsUy8vQTNEUHF1enhHSmRMcmFidHF2b1F2cFJYMlIwNlZKSHplMlZSVzJnNzJhRDYwcU9GcXVTZ1F1cG1sL3FiUU1kSkUvSEx3RXlpZjlZSHpYako4c0grT3VkeDFYajlsMGNLV2ZFNE43SFlPSFQ5V0dXbHI1aEp0alVXUHN4L3dRcnFyc2w3LzRKQUpMaWdsb3llUFhleUlXTVNCUnZGVkpnU0NnOHNZd2krbzNoR0hZTFpKMDZ5OXJkRFB2MVNjYWZhVHlQUGFnTnJybmJ4aURSazR2TjlTRmorNjNBMkx1TmJ2R1VyTUNRQk40QzVUSGlLTGVYaDNhUzhhbHFTTlFKRzJQSTB2U25FcDIvcEFvTU1CVkpaRTRBYldpZ3BjcnpQVEpUVHhpREVlTGE3QVozWXQydEI4aHMvMlAyTDJDZkdEaWJKUnV6WEZUbFpEUmxQT3FqTTB6OWtXeWZxT1VTeFhlYUNZUW9zMlV0TEFTc05hWDRKMW1hcFBKR1RlNlZzcFRBbVVpTytOTFRBcTdzWmJmYjNMWTZBZGtkek55UWo2QzdKR0JXV1k0TmhyOXJTVFlHZURkWU1vQWpqQVdmVXM2Z0ZmTHVnUnJtYnhua2RESVM4V0svSzZWandWVGZjaERpdHRLdlBkdXVWN2VUZS9JZllORlYwQXV5NW5vSytjeFQyV2VRaEpVV0ZOWS9mUXZyZjluUWRSQjVuZUsvb3ZNbTR4TmI5cXNpN3FvMDN0a0J3cmQ5WGN3VkZmYmo1S08rUC8xU29vL3JwdjdLYkJLcTFOZmQ4aHNqYkZrY1hPZ3FRTkwvSElFdno5NzNQWTZZaGxHd1hoa3M4TWdNRXZNWGpySWVxN1FYaFkrbXlGNTE5K0dZVlpTZVUxL09yckpYaXdlbnRnenVKcEF3Y04zQnZPbGl4TUxObEJaNEYwUmU0OWt1SGUwSmFEVVFpdm9KWEJXVTc2RHVmNU9nREZDakNwdTd2dm9XdHZ6YUpORWhyckcrajFGYnRKSlJ0WGJnOVNEbHVadXNEM3pPWFNEU3J3MnEzdTNMc3JCRGwrSkdSb0RzU05oZEFmeVpuZXZYYTFuYzg4SVNMeHRGOE54SzVyT1gwTnJGTnNHVVBVVldodzNQQjRmdk5hN0x4OHh1eWVuVCtFbGFyMEZ3VFJaNEJHc1M2NFV5SzZ3aE9rTTdja2lxS3o1eG9VNUMvdjkwZzdnRWIvbkhrVEdWU2JZSjNMYjVWdUY5cklGY21NRHN0dVF5TGh0TFNaaGxIY3NlUTZlaENpM3pXMHIwVjUvMnZkVG81NHBDMmNDYVVINk5GZUFWc0dTZW52RkxaOE5TemRUdkE2TTNwalVWTWU4dlVVbTBqMFpoV3ZHak82RjhkSktNRVk0QlVXM3pqV2Y4ekloNWdRUXJiUVJNdDg1YmN6cXZ4QUh3L3B0dFRUYVlYRG9VQzRkL0dMZWdkY0ZaSXE5VzhqK1lsSmN6UlZQOEFZVTNBd0pHOEFYV0Z2MUE2bHNyeDFhc1pYZk5BV01EUmdES25Fd0tWMzIrdjFKVGVmbS95b096YlJKWkVWbDlrZ000T2M1UGM1bE54VmdkQ3VXUjFRaG12QjBaV0xmMEZFODUvT1NxVG5rY2laeW1EcFlYVHYzNElEMExmSXdPaHBUL1lISjZmWjdQMExaVTlqbGdKdlVJNXRaYzFmbU9TMVZ1amhNeU84R2F3SnYrQU5pME1oK1g0ZUVDU1hnNzRSZDFHWTM4dEV1SlZNSzhhbWUrc0NPVDgwTisveDB4cncwdmwxdk1oZElPNGRac2FRc1ZtVWxjQ3I5VVVIZTcySllDVW9rWWZmdXdZUndSVkJxVnpCbWJhOTROTU53TER3OVRiM1loczN3QXRGLzQ5U3FjMXdzQ3ptNDIxd0dLT0pTSEZ0MnRSV3dXeDk4dDc3V3FWY0NHTG43c3VoQzNZeWtxSURITEh0NEoxZ1pOYm1BeTRKYk01QS9TbWoreEZ5MGNmZVlZVWNxT3pFbXRIUDUrdW90cmVNdTJwd1pRWU11QmEvcDF2bjAwYnhlanVhYTYxeE1KNW1tQy9aQ1Fyc3p5QjcxcDVUMWNTUzRHUTdmMXVqcmUveUhDdXB5MnYxNDZuRFptSldCSTEycHhZNmw0cDhMUVZ6Q1pmS2lHWkhsQ2pxN2FaRUczZ2xxcEVFZWh5Wmh5azhuVDlXTzdSc0c5bkVPWGVucTY5TldQZzUwZ2pCMVFhQjdQT2JSUmxvZDVCcGQ5anRqSTUzSDlzOHFqaEF5L3lvMGZXWkVtVWlJbVBWZTRZcDE3d0szWG52U2lmVC9nU1NNcWNkR3RPeUdNYkthSTA0WGpJMVAzVlU1cFdib2pBVjV5M25Va1FvcTZFRVh6bXA3c3BXWVlkNXFzcDBjSVJwaTRENzdFdFViNzAzczJkaDg2MzZwaU5sYjUzRmdCSWJGZFZ5a1hOQTRNN09sQWdkZWRuQlZGZzZxaC9rem5PU1I1MWFlbE5vbTZVdXRSQ0w4VU16MTFXTFNVV2hqdGx4bEdSb0s5ZHMrVEFUVE0wc2FUak5VOXJDeXdxQksvWmNIRzhiZEpwUEdhQXYzYy9XbjdkdTUrN2p6VlQ3c3lxMHE2dW9TMUxGWjRPNjFKRDFJZjFraC9uekdwcW4rVVhWYlZFTlZMUVllMGRvMXZBYVBabmVZa2wxUW5MMmk3WHl6RkxWQUhZcnYvSkRBUFFLYnRqbWdsdG9Kd3c5QW1vSHdjeGc0U2dHemJaNlEvZm5Ud3Z1UGszcHdoTHNkb2EvSENGbUMwQlNoK25mOHd5OXppUGJvRWRiajdCZTVQblNIQU5NaHRiNHdFSm1RUUw1QTdwTThtZ1J4NjROM0RzSlFlcURVZlNrOExiZFY4dEMvZmlHTFdWclZDN1EvQUp2WkhoSnZiNHZRa3FyM3lUVjlIeFU1K3pJZGt6eW9CbHNkZ1FLNUh2ZXl0YmFsOSt6VUs3aVMxS1AzeDBiSHJTaDh5TXFYdjRtSWxFQ04rSGNlK1FoZFo0QlQ1MlEvamUwZHc0NlRCa3dkU2Z6S3o0QVNya1lFN1ovYXR5RWEyaTlXeVJkSmI5dllab1R0d3BsRnFCNWxnZGpLOEZhZE5ySzA3cWNad3ZkUjhjMnAzWDJEWjEvRXRtSEE3ai94dFd2RmRzQXM2L01vWTZleDlGbFd4U2FnRWM1WTVGYm1aQ1IybmhGa2NlQ2w1N0txWXF6L3BDaHdpYTd1amM5WFBlY0FmemM3cC9nYVpLeGZlV0xPYmdXdHJJT1QrZnc4MEpXaTVDVFd1Zk84SkFKWU0yb2t0RDN1d0Y3RHB5Q0JOU01Ed2JCN2dWUUpOamxyUFZ0MENyaS9USFdZSUdoczFTUEhjaEhkOEhyRWYzSDczYWFVRElSeURqcjVvNC9Vc3pWbWppUWZhTk4vK1pkbVExbHJVelh5M2VocmdHTzJiWmFXZUw0UTgyaHh2anRFRFZiL2c0djdHdC8wUlZ6aW5kU1FTRUNNUjFYSkppbGRXVXlKMjFZaVJ3LzdBV0ZwOTJ4THU4Z2ZuNG5ZQVFFc3A3TGJVeG0rdUczNjMrY1d3OXVydW00QzFWWHlDTVdVRTloS1hPODcrQnpZRWdJbXlydVhoYjBXK2htYmIvdjlabFlnUXI5MXc2U2ZNdVJoN3c4Z3QvVFVTRElZKzhFVE43RDg0ekNsbkdIaEhucXZSc3lKaFdPbG9lR0ZxR0IreUg3NnRpclJtUTdmbFZLYXp3R2xzbWNZVFJrMkV0SWx4QTRNQng1MnJGQzNJUHFrWWhOZTJ0a0J1VmZYTllURU1JcS9UZWRVay9QUlNpcWZ1T1dBM3ZyV1dEeWtTaGlsVnNXM2thclZYYUgxV1Y4K2U2c2FRd2Y4SUpycVowMWMrQTd2VVNJRGY5NjFRUUlRcEtYMUdJOE91dmtNeUkrUzJFN2RGV3FJWVVJUkw2aDVjTUtEL2JLSEhpYUxGUFV0S3U5RGo1ZmZXT3A4NGNBaVgrRzBneW91Ym1JSHpaTE9PWStkWE1GVklHdm92VEJTaWtFTXhDSlhZQ2ZqVGVIRnlCckFsRjUvVkE2dUlwS3V0SGlZSjBqRE9YQjB3TkJ5c3NFNmJZZXZUN0JKZHFyRndCV0EvTjVXS1BlVk5pdXZ0cTdzTG1OQ2c4aUF6amtXZUk2R0hOZ3BnSzY4Ym43eWRFa3dqU2U0SkpCdDBiRGc2STk0cUR1Q25PYmVsMndQbVlCQnlEY2c2Z1dhWEhwUnlVRHNjbitpV1FRb2lmZTlOa3B2bUhrbjBUZ21QUStVZFV0T3J6UEx5MDJkTThUMEZodU9aQlQwb0xGTkxTMUQ1YlJZYlExWEdZOVdDRHI1bkU0a1hDV3FFWWd0a2xDa0NmQnc5dWxLNWk3ZzhXU2VUcUlYRy9XazlHNlpiRWtGdVZxYjFaeW9zOXlvM0l1ZlRxRG9YMk0rNWlpaEhyTWFpYVpCdWJKUFlIdWFONjBYd0wxcUV0aElrOW45S295UDVNMWtzZWJOdnd3ZHZ3enlUYW92Z0hJNzZpSks2OEpjaFBrMDB4a3hjOENWUE1Feks4Wm5sT05CUmlJQ3dMMG9wcUJsVEJ3aFoyOVFYTWdNNTh5NnVRYkp6OHNENERMVUhwWFNBbWU1NGJwQ1hCSmlUZldsb2srNE9FejJTWndDQnIvN0JGU3p6U3pXNThuQTBNRUwwbVZxQk0wRTVWUUxJRDFoUGZOUHRQSEpKM0RBN3RSZVhYWFlqdk9uR2ZMQ29RWWk2elo3TmNSTUx3c2IrZGc4c2ltdUNjZHY2eUFzUkZkL2h2ZW1mK2N4N0xISEhOTFJyMXpLZXNXaUFPQmxFQjhIbXVsWFk0RDJWOXBGVVgrY0pwbE12aHBFbkZIMUdubUZ2WGRaR2NXQzE2dGk2NzVPQVV4VzA3RnByUEJmMzJscE16WjRra0JzeEUxU1dTQ0IxVUFJT0xINDVTOWZNUkV2MzFjRUdlK0NkTi9sNEdMMUdRTDZsNFdvVTdoaTc3WEcvZUN0R1hWT0daNUJwNE9zdmpMTnN2ZFBHQjRJOCtrYWw3WmsvSUtSTm9hVk5wc2hBbzhzVDVQdmlQSnNiL0pmRGVyVHZMN0p4bWtQa2ZyNWxHdS95OUwwK0xjVUZsQW4xYUFWRmpSdC9BT01JcDBTSFN4bFJ0T0g4Mjlsb0Mwb3B1dysrS0VtSzEzYVM1NEttTWp1Vy9SQ01uSTB0dUsvVWd4R0JFcnlnS09VNlUyWlhERXg3eStwa3daOEgwMXZGemhXbjcxRU5VK0h6V3g2TnJSaVVWZDVoYi9Db2x0R0dFK0Z3S3VQbjFSOXJXYXVYcmxsSzVyaTFpekV1NUdLdWZIcmNoM011aUdBYXRGeGEvMVlTanNzZzVoTmlxaml4bEtHb0FGczRIVFhvTEw1MDZlUnEvVE5POXJyZDBBazlQQTFNVjlJQ0F0R1gvMW9pNll1TUlRa2o5ZTA3MUhCWlhFZWJISGRlZk5weHJOVjBYQ2pXSnh4ZWZmNjlvMEM4ckk4TFk2WndiRlFhV1p2b1B4alRQRWVzZmU0OTFNMlZGRjA1NUw1WVovcnB1emQyZ1RudURjOE9kRHNsTG1nUmFla2FwWWxuT0VkVE9XcVI4dlZ3WHJOZVRYNS9oQVlEMFJuNUx1M1llL1hWQkVoYVpoMGtrQ0QzWEhxalBVSXJ0UytPanZJcEsyYStRNE9sWG0vN0crWENzZTVycGY5UHJCbnhTQnprd3J6SmJEeTNpLzFJRTdSTEkyTmVBbEd6S1FqbXFlQmthM0I5TEFJUzJMdFYwU1pxRlp3MjJoQVBLWEp0TUI4N05lOEhTc2dHbUF2dnc1U216UEk3MDRkMVdQY1c4WWRLZkQ3aVc0cEVWbUh2WGJ5allxMW9uRFhTbXNPUGR6WTh3S1BaNjl1emtidVIweDdlYldTRnJxNEU2WWR6ZTF2c3lMSi8ycVBRZ1NIblY4UVRRd0tWSksydUxQNm9SKzNLT2VBRlcwNWVMalI4WldLSnpWRzhzcmV4S1VPZSt6bVVDdVc0Y092Unh0eFgycDhkNXc4MENmV3NwY2NtWDNyRldSTWR3VFNBMmlYcXFsM083UXV4R0plVUNwMzdEaHUzZjIxL2FxQVZIeHdHNnJ3MnlUUmtvWGc3Z0NGMGtJYnRaL2V2dkJGd0ZFaGd2YjJJejVKWXdsTWRJTnI0VUNGS2NNcnBxc3I3am9leEUrU1I4TjlrK3l3WjRvSCtEdnNmMko0ZTE4cmNzTWdxOE5IcnkxdVdySmREWGgxUktLSEpRWTdSRzZMWXl6N0JYeG1NbzI5dDVtNWdyOVNQcm1IbGZDM245Y1lqaWQ2QmFScTNXQmdHSWlzOEpOTEZPbk1HaUFmN0p3ckxSc1I3eG5pc1FlVStGYTJWSzJIWERKMGxrOEpNQ2FLUE9FNVRUcWtCbkRpTjlWOGhnanp3RmlqTjQvUU83ZFVaNlYvSkR2QWRmc1NNY3paMyttZEl6NDRFMlRLQzBsVGNTWUpZTTR1THBFNFNVcXhDV254SFQ3Y3h0WWo2amJCVlprK1NUMXFiYUY2WXlPRmJzdWY3c2hiOGs0NkVWZUpid3JyUUg0azZ5K1RJTEZqbHZIMVRGME5pU00vL1RFVWMyR3B1cDY1aExhSVNpeTBnRFhMb256SExaNk1uelBlcDd1UklBeDFTTHBvb0xDaEk0b1F4cTBjdFBTcndNRzVRYjBZQldYSzRXc3VjVmhqRzY1bWtmKzA5bGI1ODM2M3RENzhxNjg3OEtrUytycUhSaWMyRGRET0ZOMUdFYk9vOFdTVDhhWU5kWmFkaHJjNWtTOXFQd1BpWXphckplWmRycWx6bEV5TE91dVpUeCtEcTkrZFkvRUROL2dtZjdqU1VqM29NZnkxQkpRTFRxL3JHMDVKL20xT3JURHcyVDdoTGlsZUx0QVJPL3hhTk4xZ2VvM2owb0djRUhZNmo4bnZwMlh3ZjhkeitxUkdJUWNJNlp1YTRBMGpnK3Juc2JDSVg2MEJML2FOeVh0S0tvTUl6b3dVNFlyczRlWFNlV3VhSjE0eXFLM1FLL3h6dDVha1lVZmZrM3ZNRjNYZ1NteEcvZ3RFUk05YVJ4S05TNjZSblNJM2ZuYWFNUFZoR0J1Y0s2dTRrTG9tOXl2TnhNUVJJdy9IVGF3Vmt3NDRxTGhROTQyaDUveFRWQUw0dXVKdkV4ZjhXRTZQeWd2d3E4WFVVUnptaEp2UGY0MCsvY2JOOG1nY2M4aFJ0L3lJU3ltckhleWwxV01sM0IzcXZSbHQwb0dvL2tvdFRzaVQrRGhvR21FVnZVQW81anhobEhmYWFidlNzRWlWQkNScVVFN015QTZMN3dFNHhnT0haNFp1N28zQndzdWIwNFBXVFM0MmNScGR4d1VuWWd5K3o0Q053ZGVGNmpUcmpGMXpuQi8zRVIrdU93d01yQkcrVVF6Q29oUmw3bDZmcVQyTzVmRlBXTXhVdzV4SzZIT0hxMEdFc245c0FFa1JzVkpVWXRZYTI4VWEzcjhYdHBOcFd6bTY5ZGY1aEdvUWZ5QXZCanlUVjlBTzN0dUNKYlUzcWNiMC8rU2t2bTdpb0U2TkhVTmNYd0hmVFRiU0JWZHArM0RpdWNzVE56cGxScks2WHBmSEM4Qml1NHRaK3dHSHdOZXdScUxORkJUZHR0bC9LVkpoSUVJeEJhcFgxTnFOMU4yNHVvbG1HYmVIN09LOEpwMi82OWVDWDJtNGhVemZTK3RtZnJhUTF3ZEJKSm83VUtPU1piQ0FIcG9Qdnk1Y09oa1VKUFM1K21MVzBxNlJSTXRqRkRQbE84cktFRGpwUUtRbktkQ3dKRVViS21qcVUvaTZPM0I5eDZGUTJjQXYwRitwRnQ3aHRYV0gxcFVhNStXc0lsRzYrY0w0K0lJbzhJNFUwN1I2S25WajhyeVBUejNJMlJ0anB0Tk5LNjRuUHVMUEdjZnpGU1pzUHEyRHdnR0M1SUNJU1d6aVczSllHYVVLSHJ1eldFbFp2MSs3Rm1WOXN0N0tHZzlNRmR6YXRFS2NnSUJsdHBwenhGcVFaY3VjSjBhbHNvNjVlbWo2eXVUQXJZQ2VDQjBBcGt5d0diOG5VdkNFNUFjSEdVZWZvSFMzcHBNZnVHYXhIejlUNGVhZWlMVXFWRjdKZ0FGSU5SamRJU21ZWWdDSUUzeGM1WCtyN1I3aStsNjhLZ1pudk1YY3hsZ0ROWWdPUUEwUHEyejBOT1U1ZGlWUVJXdGtRbUV2OWVQbi9COFZ6SUw3cGdQSmtuQlkxVTJsNWNtVHlGNDRyY21UU1dLVGNUNGxUc2tnd25aeTRVMFFQSmZHdjl1REhzdVVqcHVwM0lRd0JWeEQxY3pucWJ0NWhEbXk0MXJ3WXRtanJjTE1wcEhYKy9WZlpJUGxyY3k4bEFZaW14RzNON0J0cCtBcnQ1WkhKWTUrcmZJZmRuajlJT3NBRGlJbUdud1QvR0FKQ2xYQk4wd0M2ZnVjYnlQN3BQUnNRcFpZYXZ5SnY5OGFPRDU1RElqSXZSbVlVdU9MSHlDZU8yMVJLOFB4cVB5YlhJZ3NqMld3R1M4NUpPZXpTWlVCUVRhVC9RTXcweWhTMjVvbTJkcEtRb0J0TCt6MmJQdXVzTHAyaFU1Z3g2ZUhUN0g5c1JjWEErT2Y5OUc0M2x6WGZ0c05weVlYcTNzYVFxWkw2dUtqdko4SVp0M1VKV1B5R3ZXWEc3SWJGbUFVSmlkOFc5R0RBNlJMajZRWUd2anp3ZHdKTEo3bUZsOFhjUXdPSDFpNHFJSEx2RSsxWEpUNEEvd04rUGVEb1RtMzJsVmE0d09aNHVrL2E4Rzl1bDVsSkd6UnlQQkJxWmg2Zmc4NjY4dXJ6VzRGekNoSFFhaUtnWlFoZGNvRFdWUnZSRWpHVE9wamdlQ2UzVlcxMVYzSEdEeDdhc3NnS05qalpFME51NlJKa2RLNzViZ1FKRXZONTVkZWhsem9hQzBSRnhjR0xQc0pOR0VuRnBRUW85cVROS2RCYjZFWkxxZjY4NXdhbFMzak9iLzVNS1RDYnhkV1FDd0JhM0ZUQ0NhbXpNK2Y3RUNYRXlTWFIrZkQrS3BaNS9sMDc3Tk5EVXd3Y094Nnl3UmRCQWwzZ1RINUNUeXQ0YXhsRStvOGVNb3pyeVNZcTZ1dVQ5MFNJd1NwcGJyc2l6Q255V2ZCSSs5OXBhUzR4SG5ESXVFR1lHUHFPNmIxRWlULzErekhMUFoyVktHQWxUWFdQOWVFMDE5anNpbmV0ZHV1bnE3RW0velhjMVV2NWk0czVrZVRiZDREaUVUTW5DRkpyTUs3QUQ2RnJHZjhMVmtpZk5JQU9oVzVVTTMwdU41cE1XcStqMDZGTHlWZlZCckZPNmZXY0RkemFJSFgyZVU2Z0JYNFY3WW1za1Irc1hxK3k1ZmdvNjZtL2ZaUFpIQWxOUXZrNFlzNXBueHBLbFFxOFVsbXA5SE15dndHZVdETTQwK2hxMEF2Mm5YMTJFRkFEOHRsSTBPQTB2N1lpUkZ6R3I0ZUtoaklRVUx5dEF6NnVVbzFzYTVXeUFJeFJyNWs0Qlh2NXZRcHkyRUtQUVdzKzZCeXNVd0F6VVJhdk9PNk55Q2x1RmVYSG0zeUpKc0dvQzRUWWRUL2JKOWh4aVlybmMvRTB3RXN5bFlWS1grQ015ZDlWNjMxTlNERlh5SnlpTzVrRkRoSCtWOTd5QUd4c2Q1ZTYzRnU1aWIwc3lla1I3VkhGTVZjc1U2MkxPd2ZEakh5YVVneDRyOE85dVg5cVcxZ3hic1R5WVNNdzduWW5neEpaV1ZKVjJoL2lrZUpCTjB5Zk9TTENoNzlKeHp6a3c1OVArOEFrSy80U2NMeVVPZEMvc25Jb2tKeU90cHYxckFkblBVUFN6eGtEL3VlSlFMR3prYUl2NUpCemo3aGxUZWdPRkR1N21yVGhmNVlUNlFQcDFyRTNubmd4Mnk2eDFvd1BKaEhyMjRJZXZobDZEMXhzbDY5NU5XOFNNYnRTdkVZZUFKNnBpQjdOcUtqa2dYS05KMW9mZjN5UnVDTktkSVVYSEZ0Nm92Y0RZcklNSHBKWHJNenBzSVRaOGorTDBkZFlxWGs4L2xZMUFXT1h3WUNDeURHbFpGVlBpRlFmaGlITFg3dWlRa2pYTUhkeCt6L0xpT0dMbDJ6YmZUY0VZNHJiTTVuNFd6bjdTNU5YcCtJeW9BV282Y3FtTFlENUs5bW9KWEdPNXFLRnIwd1E1anRuSUhtMldtYzZXM0JxNUp6d1UxbE5weEpvekF1SEVWcXR0dk1oMTNVZE1qRzBzaWFwYWJlZjlJeUpWV3F6OE1BTTRtZkQ0ZnFBY1Y4Y3BLOVZWM0xlL21lMDA2YVJ0SFg3d0g2YUxhWVFBSTBKWkR2M25VS09icEZSNGczK2l6MXN4YzNtWWdPOGJuMURJenFLUzFkZmVqVmNlWkdqQlpmWmdmeDBNS0ZTOFo0Z2hVYXYwc0hyS21KN1JOOE5MK09CR1h3d2VDQ2V4U2xKcUo0VzZBcnY1eHhqY3JpQ2FrR2tZUWdkeXpVK3VobXlmOWZTUGR1Zjd3UktEOUxHT1J1VGZZazZBUTErRitzMk14aUkxV29DOCtsRDB5Rm5hbXVzVlprM1lqb0lEN2plYmRIYTZmOG1GcXhva0hibS96TWYxSWhFTmFqZzc1MEN2eDRCQnlNR05JQzFURHV5VVVLdisxbFBEY3dCZWhmdU1YUDBmNVlnY0xhbjZKdXFJeTBabFpTWTlGMzJ2MnRJaWo1YnVjSjNKN2dKOTVFTFZDKzhrbmt4UnVuQkVIZTBaeENEY25yellMOFhsdzI3L3o2VkpWNWp2TUZIVHk0S3NvWTFnQ3BXM0IvL2FWY3BJelhsNTYzNVV2VGhVRHhEWFZteWQ1SG9NcHZDM3pZL3RWWVRoYk9IZWI1a0lhM2RkaDcwWUkxRWUvVW11Sy9JclBTc2RSVnFJK3pnZmpRemJCU1ZtZmpxTDVrOUpyL2ovMDBCRXB2VE9QOXN0Q0xtRFgvT3FZbkx4ZHd2QWtYYnYwSUFYdVF4d0NvSjZqQnN3eVAwS2ZycFVTT1BVSnNzYkFiSW50R2xwUEd2TXdTRWpWeGFmSUZVa21wSnp6QTFwbGN5aXBMTGF0TWdHNzYxaUJtaGJ0Y3czWXFidWRnY1RzcnR2NndPcjV2MEZ2TDdNTFBvbXNGaVhlbytrYTF2cDltcUJROW5MWEN1MXNScUVhdzJCZUxUL2hwVjNTUm0xVnZCUTQwV1JPU3dXY2xlS1dpSy9jOFBabngxbkw3T05ObE1TWlo1cGl1MXRJa2NFbGh5Q0xKRy94WTgzNzFFQ3dqRzBmQTAwT2dkMzJrRmpUTnZVQ3BKcjR2TUZyVW5mM3pIRG5SWE1wMm5nTU52Tk9MUTN3TVpDSEJ6clcvYWdnc0xTc0s0VlZlOWpoTWJoRDFpQVFBYnI1ZTBDTUU1Q1dJcS9Gb25HWlpLem9uaVZRYUZGRDVKeVhFblRDMXpNczBBZCtJdmJRSFNyYURseWUxMzFpTitnU0lKemxFZU84UEgzR3F6VzVBcTJTYVkybEZ4RlhnUnpwcUt6S09OYTVYOGZPSTRxSmVCWnB5QXlvZVJLWXphTktRUjc1aHBTYXJnRXozb0U0WWJNcWV2YUxnV0hMVmtNRlhVSXE4S3R5bkcrZVpsYkRBcnpPekkvdzlENjVIZDN3TmpmUUJhbEY2NmtRRDEvZndJWDBmVFd5cWhFSnhPR0hmb1BXSWdTdDVzZDJMRW1aWnIrcDVndlptM1NOdTR3VmpCUHl0OWp3MnFpcW9wRE85SXk1SHFRMUU1ZHJvOG9jSG9XTjV6c0FVcDA5MldVZXRHZ3h6OHhHTFhOanZWSUtwSEs0eCt0TTZyczVrMm96U05oTXJhL3hBdjlhZ1FaWjRtN1RjMzBMbXFrcFZZNW1kOG1idFJ6dDFTazdpNjF3WVdnYnoxSHJyNGZPcTh1QSsvR2JPQU9xZEJ1dGRUS1hQczFDTHgxc3lEd09wL25FY3EweUdkMjVUMnpJRzZTbXAwdCsvcHJJVForbzhpUXVsWVdya0tGeTg2TzBkUUtWNFBadG56RjlIUDRXZ1M1dkZqWDJBcWhLSS9hOUhlQVE5NGRiT0F5Q09YT0JQWDhkS0RJL0NzcTJlMVJLZkJTUkViWFcxZHBUd0s2dE9KaWxjOW1Xd1BZQ054V2Z4K0RYeXNjcE9MTmxFWEowNUhMcmJJUmtQWVJXVVBUR205R0V5ZlV0SkxWdTRZNVFYNDFreUxGU2s3bzl2ZFNIWmpWMEdMMS85ZC8weWFSd1NwTGlBb2tRVnRXY1ZMcTZPbXdvZlgwOGp0WCtlZUhZbU1OWkwxU29vUFE2NkNDckNUb3pvTExSdkJJQWxENWhRR2pibWVwdEZiNmY4T3ErOXFXQ0NodHViR05QRmpNRmJmcEVGUlpQd3dFNkYyZG5LeXhCSERSZE4vVUtYMmNOOFY4R3BVWEJxYnIyQ1ZQdndZRDE4NXllTnhSQ2UzcDgxOExieE9icTkyaC9FTVFHWW0zT0pmUFQvYTdqWkk5SkpkYWhpOXJoTDB3WmR4dEtLQ0drdHMvY1VPaGZ5MyttbHdpRTd3TzBhaTV5ZlJGOEtNbXZLOGU4cGxncGw0V1k1V29QQzFVbE9pZ3BkR1VmUTJyRHIzK0l4OUtUaFc1c0l6cW9FcGhtREk1TUYvZWZpcEpRRVRpbzBLcFdjSkt6L0wyeG42WEtFcFJqODhkaksrUCtmZG1hWXQ0Y3MwWXpLSXJleW1mRStLVEdzcVV4TnJDaTB0Tlp1VWdUbEQ4S0tYMys3YjJUMFBveHRsK1VoVkUvMlVucEl4RWRzRHVsWjhDakhDU2JMSEZrcVFiVERJOEFWKzExQjVYNFJyZUE3dUFNWHFLYlBUbVAybGR4OUV6OUt2S0k0bkJzbnVUbWpkZWlLRUYyWUk4eU0rZFp5bTNkaW8xb25kNS82bjBJUFBuZmhST2VNSWZwVk5CQ1IrTkRjK24yemJnSzRncUVWMUVPZjBOM2FLNVYrb1E5NVB3dzU4bk8vVTJKNTFjU0NZbzFoU3ZYWWxtdzd6djdnWUZhMGplTTRsT2llOHBKdFk4WGNzSEJYUmkyRVJ3REpuRTdMZHhFYTVMOWIwcnZaRUloOXZYbVV2MXRuV2tTNVpwbmFFTzFDZmtlNnIvRzNLY1laSEFHcnJOaWVWcGJPVlVHZGpjd3duR2t3SHhFR2xHYmJHRFliVnJmSGQ2cmNEWDVpRU5rNnlZNVhOYTVSd0UyUU1GQTlXWDBNSFNkdHY1NW9MYldtdHQzUjFrbndrVTBIUytuUFBNeURnY2NwRFl3ZTVlVWpQcFdqTXN1Q3pmcEdNdSt5bzV3RGY4TjgvMnNmMWV2My9WZTMxK3JwYnZuK3NSK3IyRnA4bjFjYjUvUVRuNU5zWHcrL212azdUZm4zUnd6NVB0ZjN6L1pBLzFlMlRmTjZqSjhuMXN2MWV6RFBrK3RYZlA2WE0vSnVEOG5wOTE4bmZMOC9TRGdiNVBxVi9uK21IL24rcmwrZnUvZko5R3o4LzAzTDVQbzkzeWRyTmZCMGQrVHVCdnlkYi94TmxBSXhTZ2ZMVVRpYm1wMmZyOVVIQVBtT3J2WFlCZEE4WU5DWmpVYWFEdjcvU28xalJxdHJBbUJqK1hzQjJuRFNnRFdieWxwQm9vMW9qTURNQmdvM2o1UVFoaERyMnBweldQTHdlUTVIRnd0WVl3UHFpSHh3ejFxQ2JBMXB1OEMxMHAyeHFTOVZoalBxY0NPSmRObUoxTnNGL1JoODd1MFhTc1BjbkRVRGc1OFR6OE9nR29CMDJQdDJTTndpL2hhcG11UFB1bnQrVml0alpBeHlVOHJPNVdDYWxTb1VibXNiRERjN2VzSlhoMkVDeTF0VmRGYjVEZWdHRitEc2RZalNIWGhPeWdFbkdzYTNlaERocm41VWhmSmkva2svKysrZ2l6cnZWVDJiQVlpeC9CNzhZSnV0bXJCK050MTBrQTV2VDR4TmNnQWVWNytaTEZVUUhkbWQvZS8zYUM3QVA2NEFjb1hreHpHWGdPUHpEYkM1d3oycHdoZDRhZGs3UUx4R2hNQ1A3dzAyK2I3ZElGM2pOZzcxeU80dWZnYkFtZFNRWGl6bS8xbEcxa3FjNi9NSlhvRFYyem1XVGxSNE1TWHh1YW83TVlwY0xCVkxGeW42ZVgzTWR0ZThnT29Sc0Y3QzA4UHZ4YVJxVE5mamhyZlZOaXYwemlqL0RGOWZIN0lnTDFLL0tZUnlXSzlBOGIwdXZ1R0FDdjNWWmFwUWtlTTJ4WFdOakZmaEtDdkZ3SEg3ajA1RTdUaFE2Z3J6UEhrSWRaR09LVUlMeXdnU094Q1hpRFBBRStHcmVvQlhodWJPT1F5ZjJ1ZlcwRUovb2RvY3BablZRZFNTTUhJOGZLTkpmQXI1WS9Ka281R0NYZ0E2OUxVVTZaMUFuL3NBS0JLZDZYSGE2ZTRCTm02NGFYazNEaS80U3hkNVR4TnBEeWswTGovU0VpeXA2MjB3MGZqTmZYdVhuU0d0bUgycDMyVWRzV0VUclR0bkJ4SnNYSTFLWXdaWmNubWRMRERKVERWZWdXY0psaHkydHAyblNnUFdnVmt3R0hQVTFJK29YR0orNGlEbHk2NWNYQkZUTHE0K3dCK3FSdXRSd0J0YnJEZkZVSkdsY3pySWY4RDU3YWtBMFRxempKNHNFWGFsRks2RnhUTVdHVkRsSHczVDNyanVEdHZzbTFRWGY1aWZsWitwL1YyOCt4N3dZVDVBT1BtTE1SU1ZiT296ZmdES2pzMXFHNWo3TkM5UUo5U0Z6UXhKTlFpcGVtMHVNWHdKVmFvR2Jrd05QT1RldmZlSTk0SEtaOTBJa096UnZEanZCd0ZXcDZIaW1wWkczbWh4NzRlS05nSW1ETWtnYlVOcFgvbHFGbGlYcys5K29VdDQzM3hsUGd1dFVRbjJrWXNUeXVvOXgvQmNBbGtpOGtPV0lOclpzMjIwTXVwS0xWUTRVdytGdjJjM3RWa0Z6QXhpSlhXL3ZXbDd5VFhqQXVDK3o5dFhSdUk1dEgwZk1LVThiVmVXU1h1ck5TQjcwVGt5NHI3bW1VYUxtVTJvQjRpQnlmOGs4ZmpHcW5oMXkvM2F0RDYzd0F3Y3hxZkVEUjZLS1U2Y0Y5N0wzWDdUSnBRbnRrSXNaZEVPeWl0SXZYK2F6MEcxcGVOUldQOVR3N0tZZXlPL1dldTh3SExoWEhjeHNiajk2SlFManp0K3VpVFB0K3pvQy9zbmZGaEQ0NGJzR3ZaQjFhS2pMQklxb0c1QzZpaDVzS1NtQW1uOCtvOHBrNzJsMndsdW5mZ0VXSlpaeW10aWxjYlJZejVRUkZkN2VYRjAybkdDeFYwWEpOVG1lUU1zZERnKzMvSG5XL2NGYW0wTVhqa3NUTTFpczhoYXZUT0VQbldwZ1IvdTZVTU1pZ0ZzS0pwM1hPSW1kOXBzZFBxQjloS3Q1d2UwaStMWlBhakFpUGh1cVB1UE9kNlExV1Q0c3ZqWEhqcGxYTlNxcEVVMHdsblpZVHJ5cDdzUURGbnV4dHl6eG5kNGFXbi8vQVkxcHRKZndtc2YvSWhGRkZXQVM1dUoyZlNRdmhvcGQwM2VvVVZxSjB5aUdaWlU3TWdHTndnWGtDYStMTmtFeUJxUkZSZ1JRS1phWElhYnNUOGw0dlUyM1I1dlkwbkJVeC84Tkw1ZzdLZjlhMGVNem85aWZXNjNPc1R1N2hTR0FLekNaaE9odDhNeWVFMzQxc1U4bUF6Sm54WDgxLzNuWEw0N1dxeXNJZXZQeEtuWm00Wi9JSm5hZEVaUkt3MkxSSXErT1dicDVIYnJFeHdhbmpuMTBjRFZVUnVtc3BURVhvcHQxREdsVDgvTFFuVXFDcitvMkFNNTNmb2lyRTNjUjRIa2lSa0JTQVFzUzQ5QklyaVZTdkpiK1JHcEc5K1MvdW5FWnVDVHRUZnBrdEFkRmhnemlic1FQdDhSZjExVDlmOUZWcVM0NlFFc3V6NjY4WVNvYmtqOXI0YkNXMmw1Qjc0alUwS1lQaEIxelJtSCtobU5GR1V6elVLNjRpSzgwdUZjeldWemxmWkU5d2s3Q2x3dFE0d3NjSkVKUVQwSklIbHNnMHVDN2VhdGE1RWp4WEt1cWNISHhZQjJ1OWRvWk9VOVY3ZVBXT3lWMWg0VllyUUg0RU4rQXdxa1JTSWxNRDV6bzZOVmIwa0QyZTg4RzR5aGM4Rklzb2RiOHNsWnlaOFVGekpwY2NmQ1FDaHFYbFJGb1pEWHBHZXBRSXdqQXFVWkZuc1h3WWp4NTB5M0V4Q2kvUERhK1g1a2Q3ODkyUG43YWVmbUtzbThwdkRaN1lPTjdHbjVTc0MrMnlHcDB5dlFZKzZpSkl4QTBJZ2tqZElqVi9wdmpmQXQvRCtncjQ0d1RKQmp6ZUQ1WDBiM2taZGZTSnFGTHlVRnhKRSs2WTVla01qWVVvczdnN2czMitPN1FoejNwUm8vMlRWTnhIVnVwSFBObkVmRGNNRFN2dmRpcVBHZS9SbnFHM2RyYnZ3YmRkY2ZXRE1Oc3NNUllod08yY2hiZVIzSVF5SFMxWStEcXh1UVc3c3NBdldUUmdEOTlUSEVDdkd0RVVPWUYyNmU4MHNhcW4zT0oxNEt6eDhjc0RGTkNlNU1xOFFQV1E0K1pQSDYxZkM1ZDZxdmg1QWNPQWJrMTlQUnJiaW9qbVlodW04aG40VHRBTEVzdk9NSWJsMHhYeitpMVNvSmF4QzA5anVRR0xFNjY4ZTlidGorb2hub0wvMWlaaDBYN3orU1RacGZFbFhjWnY0aldDd1V1SzJGakVTMkhPUDhIZkdqaGpycUVNeWwxaDUvRk5CQk1HNmYxZFhjN2Y2Y2tHQ0ZINVA5ZWRCTnFnd2MrWGpzVXVKWlFqc1Y0cFQwcVhYVm1HSFl0OEgreG5qQVU2WDIxSEVPeTBNUFJCVms5bmJOMW5OMFJzZHFqM2ZiWmczN1BCclFpQzA3MUxjd245QzI2TVdxOElVWjQxV2UxVG9JdDd3YkZlTDJIMVNNRk5OdHJmcnNuaWQybVd3bWUxQTNOUzBtMHRrajl6ckVtaWhGZlhEWEpNQnVYV01XQ2ZlK0U2cVVDVGlieEZIMTB5N3VSNWs3QW9FSnhlTzl2eS85UFpTS0M3QWdUc3JNKzQzMktwWFBiOFkwcndqR1FXaUVUUEFCbXU3YXV5aEZDd0dkRWpEcmNiOW5ReHRzaTI3MlJlRTN4SzZsMitxRFhDcWNzeDV3a2h1V1FEMU9HTkg4cmNwY1hpbEkyUzREVE5CMEc4dFg3T3RRR3ZMQXZsd3BXcmsvSHAzY05JUWYvWE5TS3NpWSsvd1E1MDludGRNRnNXVjcyTWdIMUlHUC9Wa0txeXZjejdhcVFXRUYwV0FQTlVqSHJGam56ZndRaXVEZWlkSTlIeTRKbWYwSHZ5MG5INGJQMjRqblRERTlKbWMzYmp0NGFuNkRTWWtXZ29ZVDZuV2tKQVV3eXQxT0tkQWtra09XTmZhZGh6VStZNWU3dCt1K0huQXRGMVdINS9CdGVDL2VKREtLYytYWmNSQVhlcGUrQlcwVkpPMjNrQ3lmZGYxM2lRNWRkR21jSk9hcXUzSGhLcXF4cjdHcGNOMmZGeE1hTjljMG9aQVg3ZXdpWi96SkRMOWtBWXppUDNtazV5d3dPWjQyZ3hJMlBMRUVxUE5aVFBheGI2MU83QkkrYlA3WlREeDdZZzliOHFDc0RkdEhoR2k4bDNkL3AyTVZuQmpTUkg5a0IvZDRCY0dNYldJbVhSSGc5WG1DNHNKQ2pjMllBMGpXTG4rNGJnbndHc1JOVnZDaXd4WWk1UUR1MnIrSmQweDZEd0NiU1J1S3Jyc2k1N0pSYi95M2J6ZFdteDJ6Zzk0L05kQVI2enZuaGFqNVk5Wit6clVFNDRENW1SMnJoV05xKzkyYUZVR1FReXR5NmZvN3NKNWJTNGZkdUljUEtaM2hsb0pqeHhFamk2M0JpZmV2bHpJaERpaUJ1U3c4aWwxRkNRYkhlRWJiODRMbGdEWTdnNUxqNlFXOUp2eGVETWNoNy9XZWN3NFovVndkNzc2cExiVm55Y253NUVtQTY0MDN5K2NHeHdsazVVUGRmZk80VTdGcXkrU1puOWd4MDVCR3BYdDR1K0tmMXdka2U2eWhLcENDaVZVS3cydzYwcTFkWDhRa3NvWnAxNW9SY0NFSVRTMjhDU20xMGQzZHB5YmRFalR6MWdnK2tlUTA0VXBoenZneWUvQ05JbDQ3UlZyMUh3WExnSzh2bW1QUXBwTHIrSFBUUnVXU1M0UmdDSERQcFk0WXZUQW91S1FmbkZJVHBCRyt5Ni92YWU3SGhFOTIzMlUxZysyNGNnNG5BbitTOVlJWXY2elVDOElZZzlleXR1WENEa3loRFJYWC9hV1Fac0UvMmlGVEJvUjdid0NHNnBzRkRjMENoKzUwVFk1dkpjVitvZ1dKVmZKdzk5bzRUWFh1dHM5TEpSZkVuNDFING5YL09jN2JiTG9TT2p6WFVDZHlSSmt1M0F5UWRpblNjMEwrdzFmUCtWcW8rVzQ3RncvV052REFPUjZ0Y3ZEZzh3R0ZEUlJqRitBcjVNWGJydjcvN0VxQmppMUYvb3FPaTlycFlmcXZ0eEJ5NlFhdnNoalhVb0hzRTc1Qk9mei92VERnTThXeUVCRkZEZUtWZ0lKVXBEdnd3dXRFeFpXSkVsTmZ5N2Fsbmw0a05mMTJmVkZucDRFRmdkdnZYUFpMZzdxbVRxdlF5Qi9McnAwMWtRNWlUSWY4QlVaWk1WK3hsRkU1VzVnQmduOGhubDJ0SVpnVjhhYTE0SmpyOEFhRDV5VGRMRXdhdll1NG0zNTViOExsVXprQ1c2QU52U2prMTJpb0pUUnk3S3dtd0Jod3FCM0VPQllXUWVsS1cwdFN5dy9udFU2aHFXNzZMcXR3YTNRbjc2eGU3VEptOTVIbDlXTEJUTU9yOFhuWmVNWmpoWG14eEg1OE14dWF4MDNJZGd5bWtlRFg5bnVORHk0RG9DejlnbEZETnIrYVZ4R2NaNTROd3NaYlpnblhibzd4S0kzaEZoVmtzaWNNck1wTHdPZm1DMDJVT1JNV1paaXJaYkxVUUVNMVl2cVZyMVg3SFBtdy9xdHBPdnE1c3E1NkRTRStKakdQZTR5S2JmOWtSREJXZ011R0k5WEl2ZGV0cTEwS2lrOGJyb0JzRlkvdkFuTTZORGE0NFpCM3didUxncENCRjNMejlRSGFYWVYvUXQ2Y0VqUHcwRDZ6N05yRzV6ak0zbXkrbWFWVjJWaTdCbk1lNEFkQTkvckZZUnJyakRzMURpM3hkYm5QaFJCbnM0MVczSjVlbjZaNHY1S2JVT1BiL1JmS05iVHBqQURSRk1sWjEwczZSbWxMTE5lN09KbTc1QVoxb1djSGQxcjNoSVRtYU90cHJqYkFsVWtkb1B0eVFrVUc2TVpZT0ozZ3EyYkZWTXdYQzNhN3ZxeHNrQWhuS0RERzBDZVp6MGJrbCttR3RMeFdRQW9lNmgybUp4TmduSk12M2s3UzRvYUMzOG5Ga0ZTUGZNQTdKNGcrc0NnUzJkaXFRSWNPNUFVYlE3T1hsc0N5MTRXbFBKZmV1N2JJZ01vZElia2R4UmdEM3o2bngycUo5UjJpWWtTTU0xM0VRbkN0b2dZUVcwWW5CL0t4NnhrVzBxUEIxTWducWl2dDlrTzgyM0FEUUlhTXlSVzNha3didkNNMkNjZUNFQXVCV0RPdWVCalY4aExSS09PbjdwcGM3Z1BPMDhZcmVTYVIrRGg3RFY4ZXFodThsZm8zVWs5SW1FUUw1bmtxWFJjcTBUZXZzR0pFNms5RmxDaDRoVjgzTlJiWjE1dEFsL0hVSTlKdG1tQnVLMDlnSXk0cUZBczlDdUNNTFJsZC8zcjBnTitrMWlkRFpHMy9uSzd3VHpvRSszbnY5WEpnb1pWU1J5WW0rbi9zNE9ESTRScEdZcVRPOFBGNEE5YXdUOXExOFE3dXFKSjg2cncwNXZqaXQ1Mk5TNHJnZmxIREI2Nm1mdnlzVlFaUktoYTdHNStRbDdMSUZta3FxUEJwVUZPWGg3NkxHNDNJUER2UzhJRC8yVjFjRFZBQ2VJRWlaWmIvQkRJcTg0Q1c3MjVreTcrY21yL2xkUStwbk5BdTk3ZHdtdHFxaHdOYkh3SDhQZEhTMnZmQ3ZhbzhmT1ZLWUtqQk42SjhmMFRIb0dvTUdlakRYQ2hPS2N2ZHVMWFBmWk9VT1VnRFM5MURRUXNaVlhCTDlDdHFJZC85bStrRnVtVEMvMndSUUdXTGNpdU53eWUxZmlZQm5vN0doa1ozdW9hak1qTkJUVVVpRVNKb1lhSmJjSk13RHNXaURwZTdlT3gybTdBaW5TY3N1Y2hEa3ZCSnQzOCtMdkdYRWJnNVRzQ3F0RFVaTTk4RFlJTEUvZXgxSFRxMGFpeCtFUzkwUDI0VEpCaXE3ekl4QnJXYmtoWFNoSWd5d3VPdCs4NWdEZXl3Mk1CblkyUXJhWDV6cmY5OXUxSzB5bnh4djJsbnp4L3Y4NGh0UTZ6TkhHc2UvWUtDTE1XVTQzcUJMRGZmU3NYSm84bU05Nm9QUWp5SVlQckpkYW9VZVJDNFIyMS9GTmQ1UWdMajZieE01UWZOcFlyY1BiUmpNUDdJMW9BNW9nUWxCMktJVGdISm9OcU9pbzVCTldxVjRxMUhTMy9nczJRYzBYeXdJZWZQcVFyRlE2ODY5bkJTQm5yRkJlbWt1bTN4RFUzczdRWG9URTQzUHJ2MGhJSE5LM2FiQUhKZnAza3VlZ1JoRFAwcXVROHZmdEcyT0V3OXV0RFlDODUyUGQvQ3k0T0RRVWg4SXBwbWcwdS9URXd0V2FWQys3NEVMU09jS0ZHQXJqNWJNQ01ETFNQanBYVk5YVmZXWVNjYzNEY2xLeGhFM1hubzhRMnVjRzNzY1ppcUNxbDFGWjBnTGVFWm41azRKY0NwWVZVQkRrcnY3WmJjbzQ0VGlSZE9kR3NQOVFZU1ZOcVEzMVB0aDhPTnBzb05aNmxoOXVqcXV2ZlJYbmxDb1hQU2VXWFhPUHUvNnFxQmd6cXJoc0VRcGk0cDl4QVNHT21NVFVsQ2xYZHN0ZlVxcVhSdDRlc2xBcWxtSW1vc0I3NEQxVzlQaHpDamwrckszVFpKbXZQTzZlUERPMVh1Ujk5V3FvRWdEOHFJYkFkamdTZ0c4cEM4WG9uWm1XZlZvSjdaZEhGUlBKdk9Bd0hwS0t4Znc0Tmdjd3hxMmY2VHZ5bHJXN2pTVGxab29JT3M4eXF3UjhUSVdPNGVlYTZMck53a1FMdmkweFRMRFpHa242cmw2Ry9FNjdwR0JwSEkzODgrQ3BKdmZxSWFOZm9sWW9SVTJFczZYYnlhVTNxUzltOFdmd2QvUjRneDR3M3prc2xySngrY1M0ZkJ3emt1MzZkUXpJUG1JOW8vYWJmYWpTSmlodzdvc2s5QmdhTEl2SVpyV3daSjIwZlhsajA5U2lDWFdqTnlYM2J0Z2FYMzlCbG1HRGVZMWtLMWNoQ1BObVNITjhxekh6b1V2YTZyc280cHQyT3czMjU3VFNxZzI5MVJVSDNFMGsxL0x4VkJESnhrUklCVEk2QUlwVzlGeUZaOHp5bVBZajNZZ1loRkdReExWRTR5SHZpMmlLbkNXODVWMGduYmpDMytGRDF5REJKeHFQZVhKVHpPa0ZyMk1XL0xaT2luN255d01yQUhmaVpGbGVjNld4QytHRjV4dzVLWUJ5R2cxWWsrN1VENVhUWnZkZ1cwZ3R2UmR5OXBZTEE3ZytURjVmbW5raXVRV0dVMFoySUdCaGt2cjc2OWo4L3dxSXFjbnJ6UC9LdG5MT3NnZHRJRlgrQWlJN0VKR284dmlPSkZSRnR3QjIxQldNYmFINzRtVDhsS0NlSnBWTno3RktLZXFzcTR0eWFJODRoRlczSUkxQjlWZVJwSWtjaDNUQUFvWURrdlNXSTI0NGNoUFRMNlh2RytaZG1BYzQ5ZDYvbldrdGJ6L1FYVFhESGJPeFhZSDJIMENrbnU5SG1VVU1Xd0pOUWhIbERKbkZTbnBvTDhYNC81ZmZlWTBwT0FIbXBaSmlWTGU0WUFEQ0RyMHVNeUhGaWZnbzd2K3ZYeU93Rk9rM1Azbmt4MzJ3ZEZvNU9kSFIzekNZazMyeDdNU1JRZ2VMOVNaMk5FS3NsM0tMNlhpc0NCaGNXV0NJbDhCdUkxYWdhZUVmRjk0MTJxRVByc3M0bmJhYjMxM3NtMSt4RG5MbGdkbEdROEwrY05Sb2QyUHNxbTNJRnNzQWE0c2h3V0h3TTFUQ1ZkUkgwNmFNSjNaR2tEMHdzUnBpWjA0SWVpeGxGZkhZRDg1cjJCUXFHMUg3QllNeVdET0oyaWYzYmxXZjhGb0NRNTdycURZU0RKalBhZVdCL2FkdHYyMG9OWEsyNkc3YWJFY0xHWWM3c0JOc05DMEt6R2JzTVBzNmJyckFkd0ZRVzM3VFM4UzZrb1FFNjd4TGcra3dHRUkzVVZDOW9TakpFZHdxY21reWVhdjFRVHJKa1lkN0Zudjc5T0Z4M0xwUUVlQWF2VWZaaEIxVm45OXdxL2J0TjFhVlhCaDhMS0pNYXd1K0lDSkszRDNXV0dDQmttVVRURzJzSzJVT3NyN1psOUxoNk1VSWxrWjdQczA5TExNWFJZZk1VdFRiUWVjU3pFT0JTTGsxVHQ2cnhlSEVuRzlwQWgrNzZRVDZxV2piZjI2VnRtWjM1eHRtd2p0TWZUZm9qRHIyNXFKdmFHL3RZRHpqWEhsZUlPWE9uUEllN1E0aGp3UDRtVkhadDdmOUg2WDVXZHBmVUxSZkxzWk1IT2ZTL0kwTGxRVjlIUXIyR2NuVFZBRG14WmhwZ1NyOXcvbVV6dldjQ241dGxzV2dJNVNXQWNkL1hjUE1nR1Rwd24rMk45MWhwS25UY1dMZG9MSzdwMlVMdGhOZTFCYS9WR2NJZjJmbWxLaFN2cytGR3pjWHRYaFlmT0dJK3RBMlBZTkFRcEFVZkhHZ0x3cE05UGthZTBaN0tDVmhuZUZLV3o3KzVzcGJBSVpZZFJuZ0R2SEZJT3FPZXNzRXVBQTNlN290b1BpaG82N2l1Q2srYVc1MUtJMlVka0o2TGxoRVpKME01cWdJWHcxWXM3VnA4NkdsZEptaGlNMjBWc2w4c2dTdGZNZENsMXhnMXlrRUdFRXFEMktnSnBhOHBKU3BQc1gza2U4bUxCRXdoZ1JPOHVUejQzUTdGdkV5UGJSV0ErTWlEbFNDbjhqcW1nUE5ZR29iU1FOVWs1bmRIOUdrdTJwVW1hbndvR1VkT1NyaG5YMlo0dSt6dnJzTzhEYkczYThuOElGNEkzRkUyWDAzU0c0MTV3clFmelhDTXQ5TWJNZlJNSEJnSzd3UWpUeit6QjVZM3dXV2xISnJsTk14RERZQnpXSTdEcS9WM1hBM1puMVFhRnM2Vk4vWTgrYytOYzFkTENQaXA3MnIrU2xoQjQ4OUVJRWoxVG9TYWhKSGJ4NmVPb25aRXUwY3JZcnpWUXhSK1U0NDE5ZXFmMXJmcmNxT3pNdjJ3SW1EWmo1anFQR0Y4TU8xTWp5SkxaZmhYOWk2Ni9LRkdwbU1SbUFkSWJtMERwSTNOVVNod2Y2endNNnNRVkFQRkh6K0pwMmJtSi95Z3c4Z2pXOG9UdXNxUWM1VzVTTHFFeG04UWxNQTI3cncrMzlFYjg0N0RGUE5hMzd0enJzRHNJWHB1R3RxQUFmaGo0OFBUZCtwVVlkQmw1a3hYekpwdzc2YXdwT2EwL2d6b2lpNENZN1FPZjdzZ2o5dU1qN3FLMmxHa1RYMWIyWjlaNXhoanVlaFlldVVzVkJ6eHdVSlloUHBsZmFSUDlkOEE3M1BEOXEwSW13MGY5c3h6OU5yYlFIbnlWdjc1SGRhRklIdytHeGdidWdHOUp2V1FWN3g0ckx2aEczVjdiaGQrSWJZcVJuTDFDWEdIdGY5d0N6RWRYUlZIZStuZGIwWTh4Q2xzOWxNU1F3elpscFVkWEZ5L3ZGQVY3ZllHMnc2NStBbll5WHpiWnNzUnFiNzRlT2xxYWFHaVhzY285c1g3aWFqU1pDZFg3OXBmQnc4QUhsL1RkN0ZJbXUwSGx3MytqNWhkVXppTk5lOFQ0cFRWemEwdW5RMEZsdXRGa3owTlU4elFwZFNBSkNHVERHbmlnbndOQTI5TElXcTdiL0lpZ292U0M4Qk8wcWxjUWoyNVNQaGwrbGpFc3NsZ3VGbkkxM3c4VkdwMW1aRTZPZ1hJRmxva01nMzJ0N0o4Y0pjUXpCSE1UaXRkWE9UY3d5WE81SVF6d05nb0FMbXNWUU02NGhQTzd3b1A0NG01QzJMdEFUNU1sOUpWZkF0UThBVmFKd203VkppbHVEbmhkZGFtbU1vaXlyR1k0YkI2NElENUpRejVNYXp6Nm5nejFibVc0TCtPYzlWdjE5N2VqQnNFY3FmRHg4MzVOZEk2QmpkbU1KK1V3NURKWjgxK1RoQUQ3TnlnSGxMVTVXRTJ6bnhPcGU3bVRaYVl5UWlnL3ZRNjNmTituelV5MldzQkNjUTUrMWp1dDhoSnVjc0Y2a1ZrQkZrSjVqWi8weS9mWTZwWkJUYmQzNjZzaXRaSHZkcHV0KzBsSzBROE5SYWtzd041Zmd1ZkQ5Sk41QldUUmFQSkNDVWpjeU84RnZOTG10UDAyWGhWM3FhVVd2V28xajF2cXBaQm1tSFkyQk1FSFIwU2F3Z2luMzJlcEJpbVppeW41aXpseTJBUUxTczFUbFYvUnhUbmlmT3hyVUtGcVpFRjVXWXZHcjFGWFlCb1VwNmV1aElaazkyVnhNU3JvQlMrZ253Zng5aGpIV3RJcUlXSTNLbkxWRUY1WXQ3SjhmblhxOXlOd0ZqdE0rN3NFcjg1K3lYTjhyWXBpSHp4YVZrNDVHUWxrKytzZkhYZktzRk9BUXplZ2hUQjZFM0R5dHZVQ3NxS0xZTGtweWRueEpqVitIUFhPQXRzWmFTRjVCRWtxcFNSbmxxZDRjanJuaGI3QWRLa1crYXpScGcwcVM5eHgxdU9BL0Z3bVE2ZjF1UFNHWXR2eWw5Q0ViSUdweHp4YVV2ZDY5MDdmT0Frek1QeTc5cmFwMkEwNWFobkMxU2FvT2FKWGY2Tm9hallsVyt6NFZQWmpwVXJKMEYycDlNV24zTVNpSS9VUW5GMjBJNjh0RXFoY2RqUDJldXZIVjVKWXNsdmRIUVprSEZEalpaVzY2aTFoUHQxL0RabjkrR1lHMStEcXM0OWFRSEZIZ2MzUW5mWjA0d3FMOTJGMWwwSkp6bFVtaGxtN3NvL1pTMkQzSmJYQ2t1TXVSeEZTSUxPNjlRRWJJdEUwUHN2MnFkeXVqOGNWaWplRmFJU2l1KzA1em10TDIwckhVL0xvNm5ZeWhoaWJhMjlqeEZ2dVlxZ2xzMkV2VzlBQkFWcUlYNTBqZGVGcDJUY0plakEzOVMrNloyQy9FNlQyaXN4cTNmNG1NUFV0c0ltNDJZblA4YlFKMlFSM1loWE9vSjJNMk4weUp0Z3pYcnc4SzBBNmxHV2RmUDdyeFF3SCtBSVBzUHdIakZQUld5eGY2ZnZCczV2djFoVmZmcmVNb2tqSUhmZFhGL0RMMUpwc29BNGdPcjN2T25uWS84a0prc2ZlRm5nTmFMYXY2aHpaT3F5WENMMU1tYWRIa0lEdU9LcHlPU3paZGRmRVZTajNHY2JjaENuVWxkek8zTWpKZ1VlVXNzc3ZlSzc5M1RyU2dLYTd2VmFFMmdDTTgxRlVUZDlYb2R1VVY1WEFiS1FOVkZLTmtJbzlNUDdaRGZldnZZdUV1RnhUTE1BaTdoN21zVmdjRFJVWld0NWdJYVZpWHNUNkpnL1IvMUM0ZG82UlI5eDJFMmlFeFBsaWxhK0hyQVFCK1FwZHNHVEZUeURjWE55TTFxU2l6TWltWmFJTUd2OGwwSVIyK21RQW5uZnlkWFdlRktLNEZpcmdtVjVJQU9sT1cxcXoyR3ZQSjFISFkxL2lpWnRMeFUzQ1lwem9VLzExTzAwL1prOTRCOE1vV1Rmd0VWakFXUkE2cVdQOHByYkQ0K3dFa3pvVXJTRWZ5K1A4L0tnYWU3L09LL3VmOVJVZVFjeFY5NklMdXIrTVRxVS9vbTJLNCtKcVJPeWtDdXZvTytWeTZGdDNYelJlVXdGamtJR0pwSXRJYmJTYWpjK3dVZm8rSVBjWnhzQUQzLzBFemlNK2IrWWxndEM4eEdIU1NLQ0hRUUVyQTUzVEdKQjl3clZWUE1RbnczVGhYN2JBNEp6UGV3NUJvMGJ4SHQwK3RUV2c1QkpjeFFJUTJhQTJWSW1ldUFJZWxTSFlTQ0ZqM05VY2hCd1gvTkJPYy9YY2wvdzhEQnR0QWQrTzVNY0ZRN1VCTGFmcVFXYzNQekhjNWNkZW5vN3NUQWFiKy91VlRmb25jUEVwYlRlR3lPWkdpN2lIbGwwUStXKzBoY0t2ZHVzQWwwdzMxeDhDVnJEZzQ1bVlzRzJFVUhuL1k1TWl0WW5hWWFPQkFhSlZPUEwxQ0JCNHFpMWpkeklrV0g5RFVoSkJ4L0ZyeFNwSWM5UXdBSmZCT0hYamhOd0FWKzlYbzJiMjJmZXhkeUpsa0duMS8xZ1lwR0oyZWhuRkxZMzREMk16dFNNSzJycVZ2dU1UOWV2N1JvOTZvcUZneWEyUHQrVTZ2M3NJbm5QSVM4dFBmUmE5N2NLZGtUUWl5Y0RIMkRBVUVnMzRROERZRzlrREJwWTVibGhyZEN3TGF2SmV4TDlsczJtcWdOZVJYTkQ4cURlWGt1NFpVemhOS1BCMHZ6SnhzNEhYRmdaalArRW1HL2NGUm5teDZFODExRStzdWpkQ09JcUxBNGJ3QnR5bk1lU09uRWRncElMQTVCT0ZLMjBoZEdWK2JyZkNhY1BwTXB5VkZyV0xZNlpGeGM4ckhvcEhPRVlBQ3hNY0xzeDFMTmVCU2RzTzUwVmlYMjNyZ2NlWUwyajhJN1Fna2NobmxKOTNTZ1dhNS9VbzhWTjBvSTlSeERUdmVFUTlURCthN1o1OVQ2NEl3NVZyQXpLNStJdWJHT3pENm5Cbnk3NWtBZS9YVy9WdVhWU2t6NERReW1vbk1ZQVRQL0VmbVNHdEgxR0ZwbE9KVkgzYkRkUkJhcTM5WGZpNVZQUnFLQzVTQ1ZTVHNKVXZPcEFvRWM1WFBuQnpCY1lIM1FDd1dhdXU4a1ZHQzNlZys0eDYyVVJ5c1hKRnFRajEvS1Y2dWgxdlFiVExLVnNXVzJCY0dWSVM1WVY4Vy90eHlWTmhnV3NkZTNpdWlJeDBWOFVOU3crV0lmK2ZhYUxlcElRQlBzQmtMakJGaTJoNXFDanBBNHU4bFFheUNYTXJiR2dwUkExSE5adEVYZk95R0dSM3Rrb2FCZll3bEM0V21xdEJSQklpcDBTdXhTZDZHUTJQUmw5WXBuU1ROMVNYSDRVYS9vcDRPQ3UvSyttaERQczNCdzVMQ1VkL0I0VU5meWkwMVBCUEQ5K2VNTEIxNU9ZSVBRdy9jbHBzcGRLcEdRNUtUZFZvNzJHNEVTdzBDK2VDNlFHdlVBRis5UCs1TmlKYnJVMloxK1NMSWJpb2VIZE1DT0Z6R3dFL1dMZVFOc010RE5uREhLanBseGFZcHQ3L2wyM2ZEMzJZY0dTVVJwa1EyZGFkeWRxdnJ5VkppMWFQSG1rWWhlUWl4bnZ3VHQ2REdHUUg3emdHVjVUak9rRlZQUzFwTyt0QUd1RUV2WllERFZ6SThpSFA5TjNxVmRyemY2Zm9nTVhyL1BPMllhMlNyUzBwVVZqMkpTK08yNS9pV0NIOGVwTUhwRVI5Q3kvbHN0M2FqOHh0UUhSc2JQZEs5TmdBbk52TUtqdzFRNkRuaEdQVXVSWDkwbjViVmh1SDE5elFGSGhBNjl2cjFDRnJiN1ZCenp1ZDBNMXBDRGtONThYZEpXSUhiN205ckVtaWVUK0JVWVJxNWdnSkR3N1ZWWUI1U1pOL2pNZHEwUUZza0J0Z2lpZVNkUGxrT3NGRHQzdUhOV3NKdXNrSFM5bkQxZWZJNURJZ29BMnVFTGZKRmtpMFIvczhURitNZFRveUo1dkdFQ3VrNzYrOTdvN2FkOWdjeVJYNTF6MGR4RUVwMzhFYzJvRVhYYS9wQ1BPQ0xwNFZTVncwdUEvTXd3N0E0ZjR0aVFYRGhaTC9iZnFIVjdRT0JsK3RzV1RHOE1aODRtSWdsRGg2K2kzOGxwcVljNFd4bzZUanZkUnlnY3hhVzBOVklzL0RzRENSQTROenUrUVVYK3g4N1hUb2ZXZlcxSncyckE3OFRaaFZIMUh5NDdYQyt4OUdYK2VRTlRpRXZkS0lORUhCVU9tcDFNUVhqWjZCR2J5SUhaVjc0cFloSGFzb1NwU2Q2N1JUdmkxNHBaTGNvYSsrYnZacjFvdzZwZ2kyWmM1UmxvbHdFMTNJdE1PWVBudk8yNTN5dGQrS1ZuOVBDb0h3STRHY3hqNHJGVUV3MVZ6WDNYVkJtK29GLytBOWc5N0p2Q3k5WVNXQmFueGkwMHFPY3lsaGpDT1ZyMkJTZkZmQUdXVVJNcEVSTkFINWVMQXMvVGRJM3ZCOWdQSGJDbHFHTmF5ZlY1TVRqMlh2RU5KbzY3ZVJ3cEVGdWJZUHlPdTZDMEtTaC9qYXV3SEJkYkg3ay9DMWFoODg5aEdJcnkvbjRFRkdNZXA5ZmYzRmdZV2loUFFvWkV1UjROeXk5L3JzL0hMNi8xeFNJOUpZdFd0NnZNN3NIV2xNN2xsYTRTTzJIN3FqSTRBZkdFL3NONTZrNC9LZmkrWVNXbXpvUERrQ0huZzRoZ2dUR3JoUDQ3V1RiVVFIdnQwTzJTNVg2WGN3UXJJU1l0UlVrZXZwSTJjTFhoUDRLekc3aDQrT3Bab2x1OHZqa1Qvd3JtTEk2ZDA0ZXkrbjlZWEhaZTUreDB2UmFFYTNoY0lWZ1dZTFVnVkRRMHRVMVRvUVdJOC93dnlrbFpWcE81anBlSk9XSUpUN040T3AvREJWdlJUandvV2szU1VRaDA5RG1SdTRoeGlSQncwRU9JNXJJdUE4ODlMM3BYZ09FaTFiblJOWlVBcFJJN2g3Qm8zYWVPODhYZDM5TDNMREtJclc0b0V2aU00d3ZvM1d6R1p6UlBXYXdnQlFhNGFTSlJHeEZyRENuOFhsUjZFQk9zcC8wNFpsVnBKTC9nYThaNGJrNTF6ZStCbWJKUTNWMVR5WHVKUGZwTTFQZkw1aFpqc01MU3UvVmlkU1E4VW5nTUhtQ2R6Z21HYnJPaUVZcnd4NjZCUEZVUHF4VmFIWkNRVFR3UVZDNnNldE9udjcrY0MwTUswdGFNUGxuZEFMZXRSU2VzV2UxQVRVNWJrbmw2S3FFUWc0eGt0Qk5BYTdZNDloTUExSzZ0QjVkWWIvS0hPdHJoOVJHcFFWOFFRWlVFbzY4b3h5YTk3WjNNWWtUQTd6Sm0zbmNkTXhzazNrV2FJUXJOdURoOWFUcnppZzJEb3ZKZUt0RTBwUWtOSTdFZVBBQ09xWWZqbDhVYWF5Rks2LzFZSG15MDhiU0MxSUFMclp0Q2g2L0VrUktiMndScWtIOTlSL0toUUtlSzRGZzFkWlYwb3dmOUZYU3BzTVY1b1pQUnBhbVFzbWwzOHNSZmlCTGc0WTFCQy9sREh2ekFSdmxMRStuSkt3eUZPRDdpcHhKaG03SGRrald4eXlwSnV4d1hPdWFlK2VaR200NWV3SGc0TFI1M043ZGdmbUUyWUJXQ3hielRTSE1YKzVkWW16Y1hMVTZIVUkyaDY4SGlvNmhUMy8xZVN6b2JIYzZZU0ZYRk05SEtKTmtra0ltM3IrVGdLckVHSlB0bjZ6NDhSckF0bmFId3lEOTR3alNKK3RBQTZHa29hWXFZaFY5WTZDNno4YzEzNDdRZkYxZkZBQmU4WjNCaHJwak5wYmlPQmRrb1A4UjVmS2RGcDNJSzBTUzNEU2JnTDIwYVpya1doS1dVYnZramRHUTNvL0RTelZuM0lBd0NNY2xjenFrRmVEejd4SzZGOGk2V0tETVhhSW12VUwxcUZzdkN5RW5PVFJHNHRPdjJRWlZyMDZYL09SUEZqUWdkV25oVnI5SkRldVVMS2tYc1JVaHZTK2xpeTBMYURxR3A0Wjk0WnZtOGtreFpQWnB0MTlEK2I5c3ArazBLenUzaVJyUDBvMnZnNDQzeWw4NytEbTM1QzF2MTNhakhaUjhFRXkrLzArSkRoQWpFdVdMbW03ZFhQQWgrcDJmd2FHaTF0NmhEeFp2TTJ1WFVieG0ydzVUUjY3VTdGSitmUFZHYTRleFhsenhQRDdsc0RHc01WczFuMFhsV1RpTi9sRUJLdlpUSHJmMCtzU05uN3F1SUZJeXRXZVFaRERQQWlKK0ZWTi9ySmFUSnRRQ0o2VlJvOXg3YmhlekRKMWNQT1MzZVlnRnJmcWttTjBhVUQwNHFRZUtNelptT24wdmNTY0tNYVM2Q3ZlQm50OHI5MTFQWkMxTEpZOW54emNONUg1eWhPSGI0eXRYQ1dndE1hbUFvd0huK1UvOEtqMVBOSHBjWjh3QVZEMnJnRlM4bWZVUmduRStQcjMvaE5Rd0hPVm91cG5qRmlPSGVCWjVWd2pjSmFnYkkwRU4rUVM4QUx4VWpESS9EMC9GMW9ENWF6WmNVN25CdTNORU9DeTFQZkl2UUpyK2NzTnlsN05lVW1CRUtaVHJQYUJZU28rK21taEdUYjZxdVhUV1pUdC9paEh1bEEyVFd0ZmxYRDZBR1NmaVpIekgxdUFMMTBTV2FJajdxS0pQSUdVQkRWM084dTV2aEtUQkl5Z3V5V0hLdEkwSFZHTHp2cXNiZ2FIdlZqdWdFRHdUdWRPNTBmN05GTWJqN0FTZkVUSGNicTNuY1V6UFpvWTZEdjA0ZklnNmhmcnFreUxxS0hWbE9DS3cyeGlRZDcvWGhqNTVBTkFzOWQ2NE5wblV1K2Z0a1pXVEYxWVhMUlVVcHdIMkZMUkxWZW1BMWYyZlRFWUdrVTRySnkvbmtxaVg3cnp2NmJnV0pUaDg2dHAyL3hCZ3ZvYS9mM2c0UWdlbmQ3R0RDVVBNYmQwcmRnT1NqZzlQb2hNNEYrT2RxamdST3lSNjZydkMrazlZbkV3YVFZeWVJU01DczZVYkdZR0VQMWE1RlF3cmhTWGQwdk4xejlvWTkrZ24vSDlwVzMzZDd4NEl2Mk5ZbThCdHhxWTd4anRjRHZTUGJLMlFHSjBnRmlqZzVYanE3TDltbEoyZGtqTTdmMGVFaVQ1L3RILzNlaWN6MXlzb0hTc1NuRCs1dWN5WHdPYmp6c1RIeE5zWXB6WXNBbXZlVVV4WVNKaWJtRjNjZ3RrV3drMUtzT0VRZllhc1RMMlNpT2pWNnhvWTBvcDRXOW1zYy9HOERWaWZ2SHAwN0dEWElDMWFVOWMwRjRPR2NLZlFvLzQ3MEs5T2ZmWWdQK2Zhb3lTK2s2ZjJERDUyQUxURUQzNTBlajZsTHQ2NGpkdmtOaENsUWtoZ0JZK2F6U1pQa1RlNXozYXplK2IxcVhaUmRUaXEveWFPTEl1N1JpWk5zUGlYUVlzalpHTWJnSUFOZ1FuVjZpOExHQmc0TTIzQm1DbkN2S0ozeHpycUxhV3BmVERYaFJuL1RLSlR1ZlBMWmc5OVIzZnBGSmtPN2kyZzZXS1BWd0RkOU5YWktSVkNLblU0ZzVPeVBodzByWGdqUVdLOUNCcUVvMEtxYmlhdUYrNktHWXVuTUdTTUNHWng2a2Z5L3B5eW02aUFQZjJtZXBGYXlZZXdBNHVnZGNGaDlzZktMVk05UUFYRHBrc3lmdzQzM3orWGExWFpoRnNOV3F2Zk1NcGh6NnFlR3FYUWpPZ3BpM0NIQ3lUZkh6eHRzaDNnSkVGZXN5T1dNWWNkdHVoM1R6YkxlQ0RRNThncFpXZWFTS1h2eDZsTENzUjJqNFAxRjl0ZVBDc0M2N1lqdEtRQnNhRGZ3U0pSUExPN1pNTnNmRzFlbHdjUVJXKzgrMW0rM2Q1Qy80OUJDWGhtQi9vaGYzUmFrY0FRVnVkSG9jTWpEUitPTHhkeDlJbU9tUVRMTHhNWkRwVkxabG9OakhBdnIycTFIZHNkVGFBbzZ3NHZhUDFveDFXRVpSWW8vci9YRWkzSWNIVEpGVXdQcCtLby9WdHhHczN5ZnpDWGduRm0yUE1DZHpvUWVtcUtMSmVWbnRqZWhRM2VFT2xtM0EyYU1kbjluZXVEVmVPb283UEJTQXlWakVHZWpQdWY0WVNGckx3dVhubEVDU04walVqeDBRT24ya3Z4dXFzZWVmV0Z2UHQ1VGNBMGZMVjluL3ZvZmxwQWpBUk1yOGxTdWZrT0RPT3BJcWZaUmhtUFY5YTcwYUxEQlFneHhHai9mMDBTSXNnUjJLWjM1ZUZJNDVFOHc4K0tBOHh4cGE1ODZpM25VZGJ5c2c3eThFZENlUW9sZVo2QnFDV05TYzRFY0h2QVIxUks5eGxRYjRBM3dxZW50cEVDVUE4UTBycHRPY3NMU1d1V29jUHZFRlJmR0ZDWFMvaFczRXV6dktQanFnUlZhMDVxby90VVdmczJwa2FsM085SnpiWmx0TmI0WXFUNHg0RHBSUmZRcnJXYlI1Z0VsWDBxd2huZUl6TTFPTVplT3VBKzBOc3ZNYUFYNmJacUdzU2xBNHpQSWh5R2FvQS9PYk9UUmNaV0JzOU5JQlNCbWlFTHRBNWhIS2ZDZVdJYlo2bWxIRUswN1BCUGhxd3R0VTVmWXNmUUtmYWNmQ3d6NXFzZC9PUWV4U1pkVXZRWWJ6S2VkZmhNUTJPNEtNSk80aVJ6M2IrbFo4ZzlzK2dpb2VJMEdNWWtKQjJ5Q3QydnBlRkJrbEpuY3h3STJ4bkc0VHFCNGltMEo4YS90SGxMQ2xWYkdyTGdKWkg2aDhpSFV3R0V0cFJ5VlhyUWo3MTlKUWZvRFl3Y1YzWjFMRUZrKzhkakJWa2lqSFNQUHlQVTcxUHRKVHQ2RFlJZDA5UGdoeGZURjkrMVpqelVOTEU4aHNwU3duaGN6YXZSUHFaQkJZSk02ZHVpMytaaCtYc2RjY0pBTy9iVE1pOVZ4TkNLc1dVVWQrSmZ0ZTJmV00vbDFRR1h3ajRyQWRjSmIwb0V5TmpaN2YxN2paN3B2bTg2cDlZVnNZL01EVlFPZHBSOVFLZWFVSUFuQW1EaFQ1cm9tVnBqWDZWbmt3S0NOVFdFQlZIaGxLSHptZXhUbXY5dmZXaE9sQ3FWVmRQTTFZVjRVVlJ0RW1tZ3BvVU9seDFxWGpYQUNjTDR1SURLV3pScmtVcFJDMkZtUW9FWW91YUpyeFhURHZ0bWNZTmVralZkTTA5N09UclIxWlZTVXlady9aRkhXeDgxR2xuN090SlN0NVFPN2NvZzREeE5FRksyMm5oYldZWlRvcjh4dTJycmk4aExpMGtuZmJRMkI2ZFdLWndpQlZ2VWhNZ1dCakRzQUw4STZNOVpGbmw4Y1BZMk52dnMvUVphUWlZN3N6NTNlM1dod2xVblR0Z2JaZ01LZEVCeUtsUUVGYjZFM1JZQVhlb3BCU2wwNG9oMW9yOVB6QjJCR1RsekUvdUY2ZktndGlzeVY4WERobFRQUk14bEwwVmZhTlNreW1JYVcrK3hzME94Ym1mci9jTExCaEw1OEo3Q0hhcTdIa0V4cnNEN0swRVBHL2JGc0prYVA1ejArS0ZZeE1KbzY2eC80WVJNeStRWjBJWkxjTlpwc2gvNEgzRlIyWW4wWjJ6a2ZXcVYrcHl4ZnRlOURHaHBGSXBGL2lGOTV1TW1kNFk2c1Vlc3cvcU5zcjl6TmZQYTBicXNMRWZnSlJ1ZUUwd3ZOYkVDMzlUbUpvM1NhczhmWEhwVzZudjBVS25sSnFSOS9aNWNRbXp6ditzWFlNVnpxRzVXeWJRQkdzcmdzVjlhbXBsQVFFSmtORGFlWlVyMnN4cmxKc00renJZeUUwMVdZL0ppZjJUa1hyTmN5THYra3c0SGlGNEt1REpBd2gvQlp1cnNZeVVPZnlMM2xrMDg3cFIzVFJZN045MHBoa1VGdnBWVFVkVlN5ekZUcFVDUUM1TU5TZWpMQ09qMW42NkVyOEF4YUJJWWdLNjlPZ1FxVC84ZVo0NWJkS3dCcm9sRXNzaUZNWktscGVxV0VkSk82T2RxUzd6ZTNqSndxZmYraHFwQ0E0MTV6ZnZ4cmpMdUR2aVcveVIzV3FnZXUvVU94U0hZWmY4dXBodTJwUE1wZWRkK3p3bVdpMlB6V201MndON0FubXZldHFoZEdIMFp1MlQ5clY0ZXIzTkZqMG5qQXBOVElxZnpveG03dkFDcURNa2FwcExYblpsdUltMURkK3hTRVNZU0N3YzFHalhLNHB4UDgyaUt6cFYrb3V1dlZJSXpvWjZRbmhhb3VTRkFIMlVHNzZYUkhLM0JsMytLV0RLMmNUTHR5WnFIQXZxaWtDVzJOUDhPMkF6L1MrSlE4NE95L0pjVXk1UG9OK0o1NmpMS1gzaVJtVjhiT3BZNHZKN0lPbitBWkcvNjNTV3puazU2KzBmNkpEeHJDT2thUlNVck1GT2hleVJaR1Y5STlZaXZ4d2xma0d1ek9yZW9YUUhiNDROMWFNNWVBNjNsK1RqQWxWNUcvdGRFTHhlMWdobDhPMzRWTnE1bmdJTHQ5ekJWVHJMSFBjL1pZSWJlcEFmaWdjamFFRllDcmdBNDlpOUlDZHFGUFg1dCt2S0lWbHBDTUpBUkl6K0NwcFlLWG9KOWovOFhFVXAzKzNWVG5Na0E3S25IcW94MjdCbEptNlVhbStFYm00aTRDQWpqMlZTRE1kV3lxa0p3dTlURDRUUDU5VzR0L1ZUZFJjVWltSEtzbnE4TmEvZ0FkejVmWHNoYUx3dUxJSTdZOTZHMWdwWnBMU2FFdTZrZTFBTGxEM1ZOMjlPNUV5MWxSOWswR2ZlZWtkWWtXd1BULzRoanJtSjN4Ri9pNlR4d2RoSkJaUDRYaUhBelBOMEZ3Mm4vR2dtTTd6cjJCTVZQNVVKcTJHSlptZUExUmlXZi9wektUdCtPOVpZNnRwNmg2TU04Z05SZ3hRZGFKaGtKTmZYNHV0MUc1dlVJVFV4OTNkSzZ5M0FZcSs0bkJwV01tVHlxQldGSUlxQzd6dEF1OW54OEJ4US9hVyszTVFIR2RyR3QyRUNsOW5BZ1ZVWVRrSXdXWGxEQXR5ZVpweFcrTkwyOEtBNWpTY3JLbUdBRUZ4UXRqdGViUVZwQmlQcVcwYitOaFBGdUZJdzJZQkFsWEdXZFNJN3ZVOFZySWw0MUo3eUU5bFNTK2dDaS9GMHFQaWVXK29jSngrUGtGWE0vT3JCOTFOQUE5YmpqNjBlcHBweVRRRzQya2FJTlViL1lsZmptdSt2TC94RVdtSXlRWTFKdHlzZkUwdnAyV285WEl0eWFBZDhKZkNpS1JOOFlFRWdxUlhEblNhMmJ5YXF6Nlk2SlNDc2luRHdwMVJYbGFnekpoOTY5ZFNYb3h1aCszNXlvTlpQeEdodFp3Q2Mzd3dWZE43MXYra0pCL0twYm1BUTZxOHBqVXQwOUUremhWWU9OZWZwNnl5aUdXUzVJVTc1WStvT00wUWM5SCtNc1EwaEFVNTVaOUs0VUdRTzd6NDJyUjJpemYrZFFkb2JDc3FjRWhhcXZwemprNG1HQ1ZrN3daM3UyM3RrUXFhTzlVY042WSs1N3Y0ME1wZDliTk50N0JNMDNkM2ZtWTJCSTRCdTM0SDkxcWxlQi9aeVVIVWxoRWpubU9SZFVtaWpvNmh1a3JsY0djUWNDN1FzLzllcmVRZzNtWSs2YXpzcU15aXcrTTJJL200aHBGMU55R1Y2VGM1dUlwVkcvczN6OFNxSWJseGVKclNjOTI0NkhUcGFPMEVFRGdRSnFPZFpEUmt2VUZnVTgwdzVRdVRCSWFGeW1SNS8vZUVCSkIvME82MHJmcXBCclZLSHlYY3VGWk8ydXFTMnYrTHFOYThaZ2ZxYnRWOWJ1SlJXSnlrTzczWGFYbHU3L1Byek14V0d5bE5PR3YxN2RleUc0dUwrbG53M3NNazZPS0JYR3VUY2hCcWFIL2NIcXE1NkZaY3hheVJDVjJQOEl6cVJUUGtuTSttYXBmTTRsU1lsRUlRMk5pNmYwQisrQkY0bzhlQnB4VXExSXZaaXRJclZMZnZNaVdIL3R1dVBoRlFlOFNIYlM4c2hlMmQ2cTFXRUtpYk9MSllzUjE2eTR0eVNJQUNNQmJJRU5Yb0t4R1lFWnpIZEtOeVFUS1BrdHJqRE05Yk9vWUw4RVlOYUdiMzFocEtZc1FzQ2pUY2crbThRVEpueWJsUG9rT05Wc3hzcEpNMDZJZ3VZcHJQbDhYdWdScW9SREdGeE4rSGJiODN1YmtIYmNVWjhuRmtTNUpvcDBYY1BqRDFJaTB2VDUrakI3Q2pIQTBOc0NxL0pyN0ZrNlRaTUhreUY3N3dxVS9BOFlkbjBHTFcxWWc4WUVPUEFFdGR5a0xpSWJKQjZ0UGVlVVZrU3dTQ3N3QnZTY0dkYk1tSW1lbnE1MHE2M3BkK2ZTc2lidlgyd1ZKUU1neDhSYUZpYWoxcGlHYUxDS0Yyb3BiR2FTbmkzQnlVaFlnNncyV0U1cWZVaUJ6OHpBeXlMTjJJbWs4L2xZZzNWK1JxY2YxL0p1UHZWL0tsd2g1a0JBbUxUWjBycFVEZExKNlNDS3JvTEJOQ2VmQzJXdW9CSCtFSDVhOEExREdxZERsaDZEdG01dHhTQkZvUkNCdElLRUJIY29zN3lWNzVoSEE1dzBpUXIrNFdiejl4NHhwQkZQNFlmWERvV2FRQTdrQk1oaWtFckxCVVR5UTFlTVZNQzVJNnV0aWNPUHVYVW0waWlJUzJRaVU0WGlSVXFxRmJaR1JybU1iWnBXSDhXQWQyZldmdWVWRDRzcWxkMFRoa096SWtoc3QreS83S1owaWVzWkJrN0ZhNVA2dk5jSnkydDVpK2N3cXlKUXpVYTMzRUlnMEVzSDRQRXIycVdqNHk1MTRWRlVqQnlJSVpWZWc0SE9qS1N0VUNsWlhmakppZTFDSUZPN0ljbDFEcWcrNEhjT3BZbDdMSUt0OGtuazJLeHM5ZFdReDJSS0lpWTlxQlpkN3BoQklrNnBGb3VoekZBeXpPbkZsSEErblR4ZElKeUZlZW5ETDgvVmtjS1JhWlgvQnpMMDI2eU94dStEdHJmVjQ1bG1zTG9ob3VHS0tia3FyYXRDWmk4NlpFa3BpYkQ5TVU3Znh5Nk9ucllxVlVxTDg0dkVQM1FXU1ArSUtRbjc4alcvRzJjNTduTnFUVVZ3WHNWY3YzcXYvWitKY1dHTmE4SW93K3Vpc1BTSEdDTGI4cGQ4ZDlFa2VzLzJqanJqYlA0WmVnc0RLazU0SE95QzhvaDBpdG42L2xpKys3WmNkOVpVRGpxZ0dwUGVDRnNlT3c0cjV6SVFMbWxqSndpenVpQmpuK0RnVTVwYjBOYWdPSDFVdW1pL3dKbWJqZjVzaFM4OTluUkNsOFF2OUhjZjNWbEJJSHFNVUo0OHFGcVBDcW1leGkwQWdJTVFEeWlFSGN2ajZWUWJqRG0zeUJ6dU9nV0hUZUhLQVdTSVo4ZTFPdkNIdmRhVnpPbFBIR2dnNE5KTGVKRjY0MkNtL3p5RWVwZ2VERVIyeDZRQXQ0WWZOdTh5djF4bjdVcDBSczZBaitnRXJHeFVldy9scy9EaGpmWExqcTVJOHZ0cXo0UTdWbW5VVVJaOVU5cElPWnZNMW5DQ3luaC9MdU9nNVlMTldabVBtajZvSEpUZVpiZjhyN01OWVJyMzJYY3JFUHFUNjVOMlVBVnZkRFRwSjBySGV2b1hqYVozcWgweXhMTVB3MG54RVFqV2dvS1Fla0pzdDI0TFRpZzg3TGFDZHEyUzVadzFqQmxnOHgzcDFOVld3V0lLa01mbEFvQ3Vib3hEdHdSWENkaThwNUc4SURKTzRObTJxc3RnUGZjMG52T3plNlNCakZRUllxMGpuaTR5TVlNMmJOaHgvT0FOY0FZYmplWkxVek1QQk9Pby9NdkNjN0JuTUVDZ0FXbjR0SVJGdEY4MHVncENvdDl6b3BVSVpCU2VPNWFvalBrMnJDd0JLdW01cWZFZFhNekI5TU5zTUU1MWJDS0x6U3lEWjVpRHIzTGxTc3hUenAzZWNZcW4venNzUlBGVnBsYmVDU05YR29CZGRvOCszVUxJQS85Mm9Mdm4vbEhUdk5uYzlaaTVrM1JMWmo2empGUG9jNkdLZkxWRHo4VFJyY3JDUWM0SWQxRThyOUVxTzRMaWRwdEg4L29ubnQ3L0JzM3pIZ2lyMGptNkZWUkMzWTVFcFhqYUF4YkhkUlFuYTZrVTJpTmVTNWd5U0Y3QXF0OENjU1dNanRqL0xmSk1QTHBCZ2FoSGRIUmw0c1Q0L2JMK2w5YTlGUmxEc0pnS3VIeVZ2b1VldUEyaWQ3bmt1STBCT1JwTStlN1IybExLUnU2ZEkxTnFLT3FVUUZYQmFsb2NkRHBNOXhaaVB0eVBJd0RZa2E4M01FcFNsajhLWDllS2llMmlWMHBUd2RGNVhOT04xWVVJc091dkIydEN3UVNtengwUFFuMGlQSG04UjJKSHd0KzYxL1U2dUQxRktucXhxdGttN3g1ajAxZkJibTIwUTZCSFQxZC9LMWl3dWR5N1JBd1NENHIzd1BDR0FCZW8rTnQ1dGRLcis5cGEyVk5GZmZLV0lidGZhRnJtQzNGVDZMb05DSzJDbFFLbmlYRzZTMUFDUUh4dWlza3RhSUcycEIzUjhkZWVNL09mM01GYlpDeHAxa2p5Zzd1Zm9PUnh1ZEJIS3krNlZQc1VsQzljdE5mdEJEaFJnOEQ1TTVKS0tHWXFURjJRVFhDZ3FBY3AxTTM1ZXdKaFIxanNTWXBPQjk5ZjZwa1A5TUs0K1pKSEp1T3NZNW5PUTBQVi9DVkFORFR6Yy9vZk11ajVIQllOVk5aOXRPL0txRCtwNXMzL01nOUJnTEJQTVlGNWNxTkVSMFpxOUlSbE5QTUk3bUNLcXowWFMySWlNVjBsY3JCVlpyWnhqZXhSSEtZQmxxOUZYeGh2b1J3TnN2UXJJV0FuV1I3akQzQTZBSklOY1BIM05FY2NEQTY3SnVnY2ZCM2tYdGU2aDFsc3lON2ROKzVCRGZhbVNuMVBJM0FWeFc2c0JnVWdJNG0xb2hRNFVrV1ArSUJURWh6NXR4WS9jeFZjVW84WVErT05welQyUzk3VDgwYUZvWnpqV2pDL2Vld3NxbzExMkE2K1l2QldYdGc4UnVTUEZ4SUNXa2ZmMXFTeFArb2FnWEVpWTVreDJBWDlENVAzMGpRMHNocGJKc2xyNUIrRkRPQmJxcm9JdTY3MTQ0WkpZdXpaN1dveE53Vi95UGRsaWJ4ejZHTzNkektVVnVDTDVCbFVJUmoyQ0RmNzZyUWNkOUVsWUtvWmJmOVJ6UWg3bC9KM1hDRVNWaE1iMW83V1BTakNKYzVNbldzdlhTbGNuZ0VCakZ3MFAzbVNsNnNHYnFWcmFnWHczOXVtbkxOblYzTWU1UG1GOW8wWWNsL0VTSjFucHdHM3Vka20zcHl6d3BjNFkwaWZva2NBc0xGTTdrUXppRTFNNHVNMFhjSTVheTVCekorUDRRRGJlOUMrTm5vTVZiZldFc2tDaUJnNlpUdi9aWHBIeElMZElZMjdSV080T0xYWU1lWXB1Nmt4RGJ3dEZiWUNJRWJlUFgvTkZpV0o1VmJKbTlRa24zY0tKRUpqb0RmNEcwaUE5YlNPcWdTaEl1WUgrZzhDSnRReGRtUGJnaEdmOUJIeVRDTWUwa2d3T1JVMy9JYVJDZGRPMlFocDNMV2RFT2VWY05tdzFZOXhQOFZlUGVMK1RXSS9zL1JmN3hrTW8yNjJYWVNGUFJkQmU0UlNFLzZiUStXV24vcnU1K2t6Q21hNjR3VlJhSEYxN1FCelJocEMwK3dnRmZLcFZHaXBWMTFoQmRSZ2xMdnBFdnlMOVBvN0tuRDlWaUdxSk9sdWh5enhDNkgxeEhDYVlWbzMzNFhyRnlXQzNXcnJYdVQ5OHZTUGNiNjhrM1l3SnB1YTlLODg2bDhiN2JPcEpuM3N5aWE4VnVwQldycXZDa2NrcDcvYVRlUVhQK1lNQjNWbFdmTEVRV2EyekIwZFdVUVRydDlCODZucjE0ZStEcUI2bEJmL2FFeExhTmZlQVlYaE9UWk9QWGlXYzdvVW5Rck14RTR0Y28xa3AwNW8wemI1SUdJK2w3SG1xbTYwNFZpYkJSL2dva094NWt0dkZPMG5PUXYxMXI3MGxyS3prOXVxUlFRSDBGLzI1NEZyVUxRUWpXbHBVa3RjaEdGbkZsVmtONVZsQ0pDMzJFSEUyOXBjQVc0T01ncHZoWHlKQ1BRYm9XL1B0ZUNYNmpIT09mOUIxL1M0M202d1ZZUGFlNzM2QUlxS1dCbU13blBSaUhrOG5Ed1NvV0krVDVMaHN2TkRCRnJpTkJOUFJISVRmQm5QZ2ozMXRrSVNTTldWOGFjN3A0V2R2VmxlYVU5Nm5zN1dXVHNoSktjYWZpakZMcEt2TURuSjM0UE9qWDR3NEhwV0tCZDJvdWxkL2J1Z001dFVxaE03djRmdVJtbzBVcjRyNEc0eUVKQkV4bmNHTDU0VGlJQTJxOFRUbEI2dEMyM2RjZUtramp4RmdZdjNKcE1lTUdRUHV3NzE2T1NxNVFYZG1HUWxuU0pqVXhGVks3ZzFyLzFEbjMxTG5pVkZHMEhBTEgrL0tQU1NiSWRtenY3Wktvb29SK0xtSGRSRGlBdzNFc3RNdXd4VVpnSDlRRnF5bW5oelFsRVM0L00zT3JGanVvd2hrRXdqVENvd0NvY1ZEa0FCQit6MjVqSUdROUpQZkZoTEkwNmhLQWNvMFc3MUZLRlZDaS9pOGpnRDU0aE04a2tycTg3L0trRzJCQUNjb01CUEpHSngwL3c2ell2eS9MeE9MNHJlOFl3N2Y5YmhvUk5YR3kyMnM2QXZEZUMxZTJ6SDczb05XMUQzUTdaODJWVlFwWjdHM2pLQWRjL1ByVVFGNmtVYVB2Sm9RejBoWmRNTDU3aWxtVWordmN4UUkwOHZFblZ3U3B5Wjl5SjBFTkhwMWN3SmFxN2hCRTJRN0NIQVlqQkd0b3dkVFd4dEl5N0RjTlMzVFNJdnBLc1JGV2NtYnovOUdLQ1pWY3NMTGNEUXM3WEp1Y2V5bnR4WW95YUNIN0IrYS8yVjB1RlAzTm9lQ2RVNFFsWDFmYmZ2SDVyRlJiV0k2STFGRERDNWFjalFIUURmUnV4VnF1WFlIN2dWUWpVVVBITUxRYVUrUVplSjBXcHAzOERtV3JscXVOQ1NoT05YTEl4bjRIRjNXTTA2NWJoMkpQTFoxbC9oMzg1T1A2MXRwb1FRd0tFOHltZW5mVE9YMWtJM1Y4d2xEZVMzU21sTWoxaXNQblowaldZS3F3Tnh5bGYxdUFUcmZtUjl0L3hUaVNNdlRSUWhQcnZkY01zYVFGQkdKbmJ6eHdYcFVibnQ3WUNrWVNXWkczM0R2SEs1WExIOVNhYW50NlJacTc0c2owN2xER1grb2ZuVEpJMTZNalVxbjhNSVFmRXNMTEs4YmF6RTBvZTA0WnVITHVDcDFzempTaTZHWEZpTStRTGNMWnZhTkc3eit4VHBOM21sOGIxOHRwZ0c5aVphT1pBeEF4UFRuVHpHbzc5aVNhMjkxdHFyaEd3c2tBNGt5cGUvOG1kdUNHS2JwdGhYR2dSOUpuS0tpeDVCWDNZU2FsdEFhWW1Kc04yMmFOVDFBOEVZL1YzeFp2MXVNc2cyN2RJa0NJb25rTEg2K0JYSEtPYVMvU2JZZW9rUG1va2JHZythcXBHcnBSaDN1R1dUREJ6ejBJOTR3NHovV1RiN1RMN3ZpZXVpVER3YjZwbEUzRVBvc0lMZ3ZmNXJSd09senNycXJRa0F4UW9lbDdzbmJKWnl6NjR3dW0zZXZmS0xEc3VnTWpjV01NOTIySGZ2d0VKOGRTZTZTVnArRlphZjhDSHZTYzNTUTFacGlEN2kyUHJjVFNjZUwxYTdpaVZvUmJ5YVNnMUFoV2lqaG1sYkNONzJRYnB2b3BLdERzUUZZWW56V1psR3dPckQ4WVZCekNtcHNuYjBHVjE5NzBTTHR5aXpCdUo0Y09yYjJRdWw5WTMvS0RFL1B4OWk0ZW1vbmZZTGtDMEF5YlZxT3dROS9KL2ZFQTBjTmZLQ2xiSFVOTTRNdktmalBpcWxMTERIOE1wcm9nMGY5WTV4dndsVHlUR2liZ1BLSUt4TlkvcFd2bC9wUXp4VlpYMjFEalNwd2RtaU1TaEt0bWFHVm1IdUxGVndRcGFzcDQveWd6OUhrUUMxZGNsTVdlUU13Y0FwU2Y5c3JXRUdPMzgzMmczb1c1bHNnVUhvaFlzMUpsSjJRYmJZWkpuRnV5K3Q2WTU4djNEbDNNRU9CazVkSmplSjdZYlRNVTZXcjQ1a0hIS3lSSnRQZ1VWUk8xRkwyREdTR2kvSkRXTUYyMERWNlYrY2pQWTVsMVErZStHRjh4dUorbVRGMEVKaTJCYit2Z1UwdEtmaGFaMHNZQmFaR1NFMS8ySEl1YnJEVE9ZeDN4TEwvUVdKNVhjdUY3VGtud2UwVE4zV3BRK2h3cXpvZUlFNCs0aUd4WWMxK2tXYWlCTzE5VEF5WkUxV28yRm1OMHZ0NFJhUTh4bWYvT01mZ1c2SGowZmNLa1RWQUgvWWo5WGdMM3RRcHlFUXg5OU81TVI4WHM4KzB5UDF5Yko3TStxalBRbElpRUh2V3BQaHBYRG44TDlvQXlrZ1ZCMkNOUU1taSsycUY3UUgwUzVRRWZLT2t6MWorM1FkeFVLc01MN0F0WjVtdzNnRnpMVWVPQ0J2TEhEWUd1UGhuc1FnTlhoZmJhcTF4Q3RScWNjSlE4aURsN2ZqWjYyaFlpVVg2bXB5VWdndCtNUXF0K2tYNk1BQTE5SnhBNVBRQjcxeG1DMEpRMTFRZGV3ODRzSlROTUZtcnJhZnJwaTlQU0pnYjgxU3Y0WVZQSU5JRkNaYXY2elo5TU1lUXgrUi9QdkNpVHoyeVZLZmpoYjRvOUxFSEJvZ2RaSlkyenp4VTV6b1YyeTRmNkM2ampkLzdYN2VpeERwR01vKzR4MDFIUGZWQ2hRLy90RXNIUEZxbXhua2FEZGpQVnFnZG5xdUpWTGVWbXBSYzBXcVg0M09XZU5zZVlmaDlxdVZveHVLTFY5V2NxOE15TjB3VmRmUy8zQ24rM1Bid1VobFlYdVprSUJqd1RZeVZjdlBCdkxwQ1ZXd1F4TEYyTzVqU3ZqWEtQdlVQT0pkVldlZWhzL1BWRERTbTVZVmtRMUVGbGVvWDZDanF3YVZ3bFo3ZlY3Y2ZNb3NleHVNSWloNkhwZm4yb0FRK2h5TCtaWVFOYXI2WmgxRGpjY0RNVHFoUlkxZFl2eW1Ndjg5dWs3a0tFNDRqVllST2U0VDVrWU5CSEFPbldBaTF0OGw2OXBFUnZHcVJzVmd2blU0N2UzQ2lqSEdRTUhSRFRqbERZS0NCbFZVajR0TDM4aEE0T05yUE10UXdYc2htTzI1QmhtQ3BZUWE2UlZRS0s2OGdRaVk5bmd5NlJNSzB0elk0Vys2UWYwK1orTkpNSnZRSmMyQjltNE50ZUNwc1RDWkZKVi9aRW9INlhDbFZ4RmVINlJaRzNGOGh2cDJycytNa0lFOHJ1KzE3UXU0R2p6dTYySFlCcFhTMkYvNWZreHZVWG5WZlF5ZnRjVlAzL21iV1B5ejF0QTNyb1dzdmJUWmpoZXg5NTBZd0NtUUVrVUx6U24zUDhnR2haVnZyRm0rYzAzTWhXUmw0YUptbGNHSVlPUnduSWlXOHZIcEFuTVFUWTdub0RIZ3g4Tk02VW1FR1Z0dDdnWS90bTZORzNOQ1Nna00wSUNGQjJxYk9BWURNbGdSSGNCNnIySWdKSTRXbVhrRERmdE1UM0s4M3VVQThtNjVOakoxUktLYy9MK290RndvL1lPakxReHNYc1RxeGFkT3BDTkVhZW5ZVE9jRDNUNDkyUTU3bG16Z24wUVYwcXJPRTh1ZWRWdE9ZOTBENUYyRlp6bTZDVXVkWVIwdWlPdFp2czNHcVkvQ0xFcjdsUWJRMDJJTWNwRXhnc0oxQ25ybnk0TlhJM2pYUWc4aFhhS2dHTm1BMVpRNFdsaFNBT3A1bkc3QkppN0l0ZUxjb0w0eGZKY0trRjJ5aTRJRmFKK2Ftb3ZSYTNNdXVMUzljN09xd2pEQWs1V29hMTBGR0xmNi9uWTVsZ01Gd1pieVB3ZTdnVXFEOWViMEtyWXcrdEhtOGIwMlJFNGlUYS9rU21EU0l0alVJcVlDanNZUkI0b2xMR09mWFFWS2xhQndhYWxuTkIyZ1ZRMFozc0R5d3A3UWpGMmpuZVBoUENXRTV1Rmx2dTJMTC9CaEJlRzI2a0JlWEljMW94djlRRnV2TjJHaG9WM2xmd1VQQkszRTY1Yld2Y0hFZk1taEFxZzhDVkJjT0g5UEkxOEtnUjBkRFFqZUp3b2E2QllMWjhRc1VSOEJ4eXZwb3hpSnYxaFJjWlgyU2FNK0FpYVNKekg5UnhXMi94NUxvVGpYSGlUZm1EVnZvZFM3dXhlWjRldXdzQ1BQNGdQN01HdDkxZ1hvd0x1dy9PYzh6SmhXOE1CUlBFNkZnS1Uzbk5XdFBIdmY3NTdwM2grRDJiK3FVWmtvdm1uQ3RNRDRzMXgyMWs4clhjaVFwbFBMT3hHOGdINTIyRVN1cVZyMkYyZWlPcGM1Ui9IVjIyMmVzM1dsa1pMZmJJTlZFMnYwYXQyeExad1FYWWZKTURlRDBwV1FwQ045U2F5Y0ZVSWQ3bWNSaE8wekNnWkVGOXNDZUgvSEl1RkI2SmtDcUUwT3NpL2lock51b3RBZmY4cmhWVWs5L2xnTzRzSlpjbnljaHpiQUZLT1VZbUozZ2lXalpuRmhJUEdud0d4ckhaeHRyeHR2NlNHeEtJY01hMzE4RXMxVnFqTDZ1cnZ6RkU2a2N0L3phcU5zUnc2YVNzdS8rSWtTOG1jbk9xTzFobHNDYlVINStFcXNDRXJZYlorbTFxdHF2SlVTRWUxWVYrUCtuaEdlNVdxamlXWWwvUmNXQ3d4V3pwOGkya0tQam5Sb2hueFROaFJiQ1YzOGVSczJSeGJUb2JRekt2N2xubGlCUFZGNStSODNKSFh1S1JlbElqQThCeE80TzRGVjhta2QxMjRiSUZyZnBBaXRDWXk3QkQ0Z0pNNjdYY2luN1VIcnlwMm5tb0VaRDlVV1B5elFyM0RpMC9zaUdaenhXMWZObkR1RjhIb3JvMnVvTWhxQVVHMHJKT09YQTVyL2F1eWpvMzcwbWhkWnVnT1RTQ3dZSm1tRVVJMFhpNy8zem9WVGpFUW12MGx3djBXNHFOdnYwa0ozSmxHMmVFZy9wZTk1MllvVjNZb2JaMnRwUGxibGZXekVKYXd0VTNCY1NrUlZlOGJrcGthWVRMUmRSa3RreFM2UVlSUmNNa3ZQWDhHd0R1Ujhjb0gvV2cwdmhpNkh0SmpjTVBzbUVaVFdZU3BzTWxEY1VSOWJLU3ZubDN4Mnh6NUpBZ3ZCVXBNb05vaE51SzNtTys5d0dYY0VkT3hzVmFrRFBhb0RrTC9JTkhjN3JLQmVTdFlHc0w4RnpkMUkybXdQNFdaTk9XQktFNUJiUXVpS3BpYUdIZXhJbjludFI5R3BZaDBuTWMrNHlPaTllSElWQUJ3eTZGVE5TS0RvTVdSZTFXTTNrUWhrTStpb0JXWC9Bd2pUR0srUXBPM0wxUkdUakVkOUdLU1JPWUpUb0UwWGliczE0amJEMTM2dFlJbGdEcWtGUlI1TlZqSHovMHpUelZvRFU4ODlyaTlIeUNRWmpTV3lRRm9CSXdxc212eXdGR2c3cW1penpNTG1TTmVrb3FSNlM0dTFia3F2M1pLZVpRK1VaNHFleGhPaW9xTXlGS1dBRkNGSjA0c0dzbHJqbzNXN1FyUGdreEZldDNhenp0U1JOTkxHejQ4c0hpOE5ZR3kxei9XbEtoMFpMdnhvNmNOVHMybStFV2tVc1FWb0JCNFpoU0NxcTNJZEhHYjJPTjZtSzZwWmsrd1F6cWRNRG9FVjZjdlJiVThoMkdTVUp2N3VpSW1uU3hFdlltVmM3NFd1S3dPY0dYYXNkZ2RBMzFoTkxPdkNKOG5Wam9vTTVXODUyYkV0dHVEckwrWERaNVJnby9QZmN0bDdXS1Z3SktNZUt3SW5pYTFjRDhaRU01YXdRWjlBQjUvNzBrS3MyRW5yYTJSUlJmOVpiT2RNMmdjTjVmWlJSNzJnMjI0SzlCYTBUcEtyL1doWDd3QVRQM3Uvd3FDamJzZkhHWkZ6NWg5cWxhdy9OWjA0bnJrZDJhUGJlbFhVeEdrbGttamQ1QXNGRVJRYkI3a0dhemJKSEZ6VW1rcXZMK3VNRy9Yb2RpaElwaWFnUngxWmIvMnZaQlBudzh0bVIwU2RTekdTTDF0eWdVYWF5ZGV5NEZrYWVDYjl1c2s1QklVSkQrOEhIdU5taXlpK3ExRnFqUnJKcGRmRU9vWmhQTEVMcHRKa3VuWnYxL3JJREdzNzhMVnZCR3d4TDJVL0NsaE90dE5HOGxJOVk2cDdDMzdPdW03TE9GU1oyVitpN0t5L2JHUWYvMjNvclJqQ1hqK1ZtRk80WG4vV2JGSjZDOUZRNVRUcXQvTWZ0SGpOQm9uTEdOVXliOEdhSkJEaXJTaHFRN0NtODBEekxiaVo3em9VYXQ1K2lzeGhPRW8weFkxdlFpTW1PMkJHTHFkM1BLd3Z6RkF5eUYvSzEwWFdKMUZnS3BjVEFFbHYzSCs0TkUvMWZFQ0lmTkUyNUgrQkw4MHRtODYzbDRKZ0Z4azA5TlN4RXlzYVpKT1lkY2lKMUFPK2xQcnRWZzFvckhTdjg3U3N0VHBzN0ljcHpsbXhqQmJvMjdUUGtXZ0UxVWM2b3VPMHVYcFFwSFgybEptQWlvQ2k3b1JEaGZXbXpPWHlxTFFuNXpRRHplbW0zcXl0ZWg2WXB2MGtWSTRBaGROV0t6QlhNQU9kb3pwUnhtTmJMV3lnb0xVSStvMmtNTUJ3djJ6eE5taHdTZTZjaFRxalhjOWpVKzVnZSsvT2o3bDlTTUYvVS81bm9tdmdqNkovWWVGRXhud3hzQTZ6L1ZmR1dIeTlIYWRTZkpLalhGVkorUFFXVUxJTS9pcDM3bElpckJYckdnVDhMSTk2M2xaUE9DT2YxNytQdWF2VzZPY0srWlBPY29zRktRTmMvZ2V1NkFiL2ZaZzRNMzcrZFVuUFBNT09ETEVJcWFSZHNITnVWVnQvTFk3TTVYMlAzU2J5aGpJb3RlZjFnUjJNREZaZGJmVEdEM2JoSmdxekFJWDlPWnZiVmU2MkltWk40SXhsaHAyYTJNNCsveFl1aVpBdktDbXlYeHBpOWY5RDcyYm93bCs4a2prdTgxSG5iZWhMa3dmVFJlbVY4MENQM0FnWktVMklOdzJmT0lnNG14VDIra0cyNzlLK1IrSlZMSG5wc2U5MnVtSVdzWVpvM0d6TENkMXo4SisvY296R3d0U0hwYnluM1ZXL3V0OWlNMndLL1dyWkVBMDgzdGpzVmV5Rm1SUjl1T0tFTzRldkhuREZqaEt6M3Zidm5vUVg4dEMvNmR3cnBqWUQ3OXpRNGJyREJ2U0JSYlVFK3FsWDEzcjVZTVVzcCs4U0JpaGp6SWNPNXpucXgyMTAycVJnQ2pPcDlvb1piWGI1eGUvQmYvMnpiMTNVS21tSEZodHBtSEsrejBEVy9tbnFUMmFsMUhxM0tmVzN4RnVrT0tJcG5HVC9lSGdld2EzWEhScnUwQi9mNG9XMDFzaHJKZXhjcDdzbG1LQTdvWWI0ZTM3dldUVGUvays1bDRSS3p1YVdWZnN0M0JpM3EvOGZTTUxhdWZMWnVFSEZ2R00zWUhBVElWZzVzZ1hpeVhrUVBGbllaejRFekJyT2xzWjRCUTk4MVRKNHc2cHpaTSswcUt5aFpPYW5jUUhZL2grcEcvODlXaWtzZ0ZpR0ZQY0hZTnRaT2dpcUNDSVJSVEdEUXYwWVJaeVp0cmkxYkxyOGRaYXBpVFV3SkNXZFEvb2FsY09NaVdoRC9wbWdkVnMySjhrWFhvT3IrUUR5VnhDVkwwcHlUZnZTdmdvSUxnR1lEQk9yanNSZGs0MWN4TXpuSVNtTCtHR1VvNGQ5TUdURDBPVmZpaUo4c0hNYzh3MDJmUGpWcitFdURoQndHMzZJWHJxYUZWMElKaDV3YloxOXQ1OFlmUkJKVkRrRDZxT1ArU25HSWxSSUFtTzVYMHo2SnRkM084Y28xYysrdHVObUtFS0dvY2lNMlZxdWZDRlNMcE9UMzEvTkg4NjJlNEw5ZG5iYUs4ZG9RbHVEajZaYUhjbkZHYUsvckozM25paVFJdFhXRGE3TmhhcHlVdFYveHhCNXZnVTVWUk10TkFUN2hBM0RtVDlIME9rMU1LdDQrck9qdVk0R0dxaXFWeDIxVXQwT0RhZkNWTHp6T0trckRscW9OdjZsbWJNd3pyVGFvbEI5TzNLOG5YdU5PcHZZaHBnb1QvQy83bHhUNDBVSDk0ZG0vT1IrZzdhSFpwM0g2MFg1MTlTbFpFdFduWnEzVXlsamI0c0N6TE5xbmlXcWxLTEhIemRsLzNFRDAvS3krV0VkUmFmNHFVSlJaMU1NVzN4RUR2Um05RG0rL0N3YTc4bkNsdUtCR1k4cUhXY2VOUTdEME9rZ00xZm1uOVVjV05SSEpaT1dUVUwvR01qbVRjY2d5a0p5THVVdlQ2QTlwNFhaUDRsajRtdFU1a2JpSjlVZzFMS3BpZDVHVjhzeGlkK0wvT2tYRlFIRlVtaXdBY1VteS9SQXo4THVrbWFFdDVTTko5Ym9BUlM5aGZyL1VDRlZRREpMSUhhREFGb1Eva3pHVWpJUUgzSTdpV1ZlSHB6Q3dGdFIvVWlJY2hsSTJSek4rQm1za0hVcm1qS2UxQ0c1bngrYXNndG51T0tTVjVoOE4xMTZZZlc2NENLdk5CanptSkMrM0NydHRGbEZ4NWg1RjdRd21zQjZyRTNGeTBra3hVdmtqR0owZDlPd082SGNHU1VPQklwQXV3UjRHd3l1U2dOK0RqNDZBN0xOa0tQcjNaTzluZFYxak5LU3JRSndBalF1NmlIL0JyVTJoeGcvdnV0SlRkQXpGcGVXUmdGVjEvQ1BsdHFja2xhMkx2SWtFYk9IbGNKWlFLRXI0VWxYOUNOMzNlS0JQTEV5V3haN2Y0THNnT0ZKa0xVT1NubkFpRXVoN2ZBN0lqaVdac1I1aWxVYTNzcWovangzejB6WVM4SEh2d1pmUXVXVmV6anNmRitXUVlXVnM0YWpYeDR0L21BQ2hDRXRwM0RNeVlPeHlJRmlWaW83NWFENzNyVWR2L1pQajJOQm1CZDhVR29NVDhXV0xOQmVSQzNMOXVZTnFrdDZpa0hlSnlRZkJxMlkrVTNCZU40Y2E5cDQ2bVllbVFZKzlQdTJlQVlPcUZGdFc3a256REFwRHlWVHFtTnJwSGErUFUvTWJybDVPU05RTWJNV0hxZ3pTQ1dzMFhNSU5IWUdEVk1kSEVDSVZGa2txK3YrTDBmRlVVNks5eGNnNmRzN0EvOXp2TlBKUEMxNDhKRFNXWWMwLzF0Z0MrRnhtZVlKRERqWmlFN0t6R0kxWmI5V3lWYkEyNCtFRVdVV1FORnNIbTN4RUdWQTd6ajRmNG54ZkQ2SmNhN1dsTE9JOEJtOTc4SzcvdHRabXRhY01wT1FjL2RGUzNrRllEbGhhVEpZTGZBWE5CeHJuZVRUdDVJckRYVGhHWkQvVHErWWJMNm14NzZhRWNaNTU0ZkhFdURna0YzaDBxSUx5M0pLQWtTdExTTEtSTno5Ylg4Uzh3U1ZMRk1ES0NoOXJNeTh0RlI1ZmxhQnpQR1pLL1FNdEZUTFV4WSsrZXpFQUNjUm02Y2pEUmd5TTc3SGZabXpEK2FEQjlSRDJFSStsSDNOZnJRc3l1QzJScFFieWhOdzJ6eWV5MWZzRUxKcTJiZWJzcmo5V2c5bjBiOGtUU2YwNWtGdWtBY0xucVRxOTdEc0QzeHlnRzBKNDdvOXp5TmR0ckxkZSsybmtSRWE5QXRqQWxNTjBUSnBhbDVrNkhUZHhObzZJY2lwRTNXSzl0QjZoVWR0Rk5DZkhPOFVlQS91NCt0N05LNmxacUxrRE5hczR4Mnh5TnRBQklTdkozZHpVbUlDa2xWbVZPWnZCUXhXWHFSSnV6K2Y1ZGU2cjdLY2llOVQ4VEg4U1ZoSE9KcWNNN2k4RDJuMW9FRWFPOHBkK2h0REw2YW5PWVBhcFgrRGpaMzA2M00ySDkwaDF6aStyQXY5RXh6OU0xWEcvMWxKaVZPb0dFUDdKemx1NXMrb3Fsa0cwRklqOE90Zk5DdFZ4M2Z3T05vNFZXaUh6blRUTFZjaGdPRzVLai9TdWN4YU9iRnkxaUVyV3Y5dUJJZnp3L1AwY1VITlJhRE9RUTkrd01DTjltdjJVZ2ZZQ1NLejFXQU1Kb3Y2bE1CQ2xBc1RDQWY5UlV3WUdIRS80dk85eTNtRnlvTkR1c29yL3VQVVVLM2RKSEVEUDZWR2s5bStUVTRzdkV5dnU2c0hndjQ0Y3AvcWlTeFVCZFl4NGYzTnhQT2ZuUnMra1Uxd2ZFYTJXdWUyQVZCNU0ydy9IcTVmTCtZRXNUU0Evc2hYWGlSMUY3bUlpZXR3YXBRRUlqY09XQXV4RlZJcUNqN0hTa1FrdS8wbkNMZlEwVWJMVmJ1eUZPcjV5bzNOUWVOcHE0d1hYMEhpS3F5b3JLRHBsR3FQK0VyTHpseXRjTy9SQjVnY0RqM2ZXQzNRdUdPRERNd1RVVmRBQkswZklkV0RrcDlrUk9nUTFJVnJnbHlYQTRQVzRxUXZLdHNqOUtOSHdvTWM3emNhUmhxRHVIRUNoSlZZQVY3Uno2dWQyRndsemkxMXR5b2ZBd3IvVWpCOVI3NjcxaGdtNGZsSGo2b29EaXpsZnorQXVWSjAwempVbWI0bFRwY0RXOFpRUkRVNEdDTzJCWEdSL3d6NU8rdFRkNDJTdDc5VzZESVRWaWVUMXNpbFNWNk5oRU9RUXdBU1pWSldTSW0zQjR6U3A4WU4xYTZBcXVCZ0pzcXNha0hVOFZFdVZGWUtKaVNOUjFkYlF2TjN6ZmJUVENibDNudkYveUNua3hrR0VpencrMWdESXdGZ3lrcnV5bzJhdzBtb3R1TjhTeEFaNVppUWVRMGp1dXlqbHBmdW5CNEpOSVpqNWtaMkV5L1lLa0F5YUF1T20zNi9vUXkrV2YzempNZVIzZXI3NS9GYytTTnk4aE9ybmpES2M3RGxJMTMreitLYWRYNXZzeDh4NEdXTXNVY0Z4SjFwV1ltS0tPRlRTdkI4N1hLSmkzZUhsS20xZUVkSXVDVGJ0K0JlKy9qZTBTcFQ1UElEWDI5SU9FaW04MmgwUlR0Z3A0SENTcExMZFZTU2ZZZUUrN1Vub1UwSG9iOENkb3lRTjF0cTJsaEJMa2xKcGVTN1ROTkM4TW5OcmlNand3RmJFbUdBK2R1V3diOTIrZTJ5WEczb1l1dzE3b2tyZlY3QldYSHZwYnZpY2NZNWFNbTFYUzRhaDJBVGcveWt3aW9iUkJLL2dsQ0g1UEpOMjl3cVJYSWdOamhLWHlCMklRSEEzWFV2bWVtSFp2bWM3bkxRQkk3d0lJeDFkUVMzRXQ5aHhiaDBBcFBlRWZ5WXdqWE4xdmtJdTAvNWJZa3dhRjI2WVBoblhiZ3I3UXlMV2lzK1RMcng1K2UwLzJybHVkenJ0cDdRQmdENHNUbUhtQWVBTFE4ejVwcWI1a1ZrV2NpMWNOK012bFh0Z1BWRHhMMTdseTlNWGJLOThiL2l4WnRWVjZqR3Rud3NVcmRESFJXMVpnOE1GTXlPUW9TZmhaSW9ScytTeWw3QVRpQ0RWbVBUSGhacS9zWE5mNTZpYlNiYVBmaGs3dUsxZVpxaGdDSExTeDJoVVlNWWJJeGV1SXJmRXdYK3lKUmx1Y0huNHdaVlZySVNwUlFXaWI3V01TbjVXazZ6WnEyN2JLSXlnSDNURURRQTlreW9QUVB1Qzd5MlV6eVNtK1B5NFRFL1Q0cHROMGlpdENMMUt6UklSRGtFb0JOQ1R2S29tY2lOcDdic01ZeU1jZWo2dVBVMHJWVUhJYjVFUFZVWk9JUVhMdHJZSkV5Z3FRcmdWbFB4YVcydEZydldnNVl6cU45blFPM2YyOTJheFBST0haRjc4NHNjaVNhekdzQlcwZFVyUTFSdnJ0QnpTL2hScmFvbk91ditoMldBQW1ZTVF1UmF2T0dqRXFPdWhzcm5weVR1bVhqSklxVHNDdVJTQnRYVDFkR3pSMGdkQWt4M3NyMnJ4cFNvNmxZVmxuVXJYOW9MZm9tUEdzYWx3dzVyZ2V0VEtxeUZEZ0I3V3daSmlOdXBWK3N5T2FHUEFWV29xZzdJL2VRamt4SzU4NjNVM1duU2xUMUVJblRxWTBmZEhYY0xyalVIb0RodUl5TXJ3d2QzWEQzUDNZdm9HNXhPN2grMlpVRC9Bc1dycm9aU2xQYlp3TFpUUkU4OHdDdEdmWStkWUs5ZjVXL1AzQ3lOYVFUZVdsWDRNZmQ2bU9oTm5HYVVCRnM0WWRwdDR3RTFlUHdEUW8wZk9NRWpWUk02NmZVZjJiMGp2amthelJEYVFYai9WRDNuZk5iMGVpK0ZZQlVKYU1rSnlmMGtUMFJQNXd4ZXd2emVCanArWG5oZElJTEZjTzNxeGhoOHpGZDI0dTRZRk9OTXM0dU9Tak4rUXczYUswb0p2S3plT3V5bmZIdEtTK3NPTVJMZEQ1aW91NTRNWDd6U1RNQXVaeTBnTEd3d3hXbHVDWVB2RlBaaEx5NDlRMWw0M1Z5Q0ZubWs5enZqUlZldVBnT3B0M1NNcjJQcUxqRkpLRjZGZWRXRkRGTzZYN1VmRDlxL1REcFB4V1lYVExaRytCN0gxS0lzanMzcXlKWEdQanlBYjJrQ0ljbG1sQVN5a25zSlJLUit1SWVvdzFGWnNuRGxOVnNGa0xlOEFYcXM0Ujdjb0dScm9IaWhFcU1ONVMwelc0dVBDNGxoVm1Ed2JPUXRSdnFySzh1RklFQURvT2RGL3pkMGFCZDduSDB6WkZkeGdDU3plRTF4d3ZBa2hPSVFqTEsxcFNBc2VKNytZNWtod1EyZGZYMTV4bjFhaTU2dlhZYVNRUVNoakxuT1FaYk5NdUxiY3ZYeUlxZ0NzZEpaWHBIN1d6bnZYTHovVzFyR0xUT3NVdkZWUlNORmxvdCs4Tk1PNmZRdkVLWGZPdnNzUzdrSHloMlZCaDR0Ry9tekNQMXZhTG42Y3RncGxXd3hLdFA3Mmo3VDBOQTkrMGQ5bVRXckJ0eUQrT3huTklkRGZQRnVULzhUZVEzQUJIMEtrVHFocDFFKy93akY5VThVOWdZSjZodlVIMEx5SXoxUXBrUXBMLzZia1QxL2l3Mi96QWlZY0hMSXhzUVlzd2cyN0g2TzdHY1poY0NJTFBaUE1zVjNaVmduVXJad3JkNU1obDFrbFNpTm9BYWhQemp0cGVsSGJyUGZmYTZsUHdyZS91bXpzU1VmNmxJaVJibkdGOWNGNVNHaTdYRVdpUWdOc280VE5sUGtRMHJZVC94SWRSUnUxMy9IbVM0TG04N2E0WVdRVi9iZS8xdktZK3U4cUFXQlVDTnhvZzZ4OUdwQThScnZVN1BFTWNOSE8xZUduclBaQmJoajZCY200RTF1akhlMERKczhwL2NoSGlmUFJsdHljYzR3eHQ2TFMvWmJQODlJTWZxbUFXTi9XSE9TTTFHbWZKa0tkZ1A5cVBGSVlzSS9qTS8xSFIxSk8vck1XeE5VejNhS29EdjF1QmZ5ZFZ1aDZteE1KbkRQWlVVSEhrZ2pXbVZCbGNKeWdBZGlZckd0SlRnUEdHSjR5cmQ1eGsxbXBEQ0pyVGpkS1laeG5jSzBSeFF0eC9zcXhNcUltU3RMc2VOTmhLUWR3SkF5aGk3Y1doUFd4ajlzTGNmRHBoYTRnTUZoQ2kzeVJldWc3bWNwNGNJNmxXTzBMT1FGeWlMU2h4TGlOTlNabWYzZVN3YUtRejF1VlN0TG1yRXVKREI1OHBWL2Y3R2lHeFNQejR4ek9GM3BxV3NreUQ2TG9ZMHkxempBWWFUZWJKcERPN0pXNXhUUmJjVDRBd1ZGY1dCVWZaVWo1NjM5L25aV2lyajJWS0x1WEVTc01iWmZGcmROd1VxcWE4NHJqVW0xUUswTUJON1NxaEN6OUYrY2R6elhrZ3JjODZaRFcxN2pTclo0WDJ2OFI5U0lzOUlJVFoxR1ZOSGh0ZU5VRmsrK3JubUdLMlozTHJCWnl1MUhSZnE4YkJqS0NVUW1td1k0ZEtNTWNnRGtrN3VqN1RvUTdtdU5vSzlhbUNDVExINWdiSy93Mk5lZ09Cd1hZNFdjWXVPVzVlMkZ6bitwU0hRMEk0YlhaOWtzN2hLK1RIV29FZUt6dXBqaTR6a2RqR25ydXY4bkM1RUNwS1hweXZ5dkV4eGdnRlprMSsrZ01XNTBoWURZMGRUWXJrL1pVTFArU085dzZsUXZFSk9VYWtLUkxnOWtHcUU4aGxkbi8yekNjdE9Tb2kxRFlLa0txYVRNRFJIb3JxWWFMbmc2c1hsejRVYkx2cDRwRzU2R09kVUZVYzVaRVVPYkxuekF5K2ErZWZUbERkSVBnZ0tTVk9xTUxFK0V6THNwc3kwTG9tU0xFdlQxVS8xcXQ3Y2liaFdCdDVwNzFVcW8vUngvZzFkTXNyYlVRcTdTd0FmeTY5TFhZcENYd0xKRUlzYWVlRmx4UGpJZkZOM1BNa3lIaXpCMkROcnRQeEJ5UFpGRzdxWkZNWjVqUTdST1d2cElaSGw3T0JKZzRZVHJORDBqcC93NE96bGdaTFd5RHpMN0hFZXlqNTkzdVJvSVFvbTV4OGdpdGhabFMzdVJXV3FZcnV0bFVIOHJJblI5OHlPNEJ5R1FMbzJTUTBncmJvR3pqUTF1bndqU1FpajYyUE5zNXVqdTgrL2dIU0hodGFTWkRkNm9kOWVoYks0dmE3ZFJWL3JuWC9YYUJRS3lQbzVEbG9wN0MvZTZ1aDF6U0xmbGRTMlZJTGdXK1NRdWdlTEJXdURvZ2hKMnJiZHRPdHpTei96N1RkRFY1Sm9TVE42ZFU1Vld4UEFkT0c3V1hFQTV4U09ZQVFXZGZJaGtTZ1dDOHZZWlRTY0RYbFExUnNuRW1GdEdlT0tiSjl1YlRYOFlnYVQ2cGUvZWhySWZGZlBCSzlSOEZqa25OVFovYTRaL0RBY1BnNklIMGNiL2F5M0RVV3JzNzMzTGp5Q2szVEV3T1ZRYTd0QWI1VzZYL0c0N0JLenNxV2lITE4yVTBXZG5adWFqMGluUFNlaE0rVCtVOE9sdXVzNFVScFJQNDM3alFlTHRBV2dVZ2ZCdkowUWM1WXhPTTZ0QnNyWWUxa3NMMEttS2UwSzFHbVltNVM5Q04zOW0vUXhkYUZxZ2dzRHZwYkh4ZlByQVVxZjZOMTRUbXZWOFhDSSt6endpNURZbTVGVXdNYUF6YlUwTFZpVTQ1VGFLa2xxTG5lN3hJQjFiUnd2VXVhR2xXTjIrdTF3UlZTeTBxcGJjWmM1ZWZuWlVzMHFGUEFPa1dHNG9ESUl0d25MMHlpZDZkSm02aU1XZE0wVnNDOTlvM0wzQXRHcUltdlpqLzBGaFAzdEFXS21BNUJmZ0hPVENLWExYdGkzbkxXQm1HVERCU3NjdUp1aHhFTDJUMlM3bVhEcExFc1J4ZXJ6NGtqUnhUYXBDbFd4SG96SU5YaUcxY3d1WmsrR2ZydURza2Eyd29rdGtONFdEcmpGb3BWaGQ5YmwwWWlKWHNuL1B6YjhUNzd5WjJXdGpma25wTHdpd2tndnU5TVJHb0k1UGNwNmZHNG9zcVJVakJOTzdMS1hiK2NFcDJ6eFJKNloxQUVMZlB3NUpmcmd3dkdBNFdOelF5TFE2eEJiWmMyT2psdmxPeWMwRVNZUEp1ZVZNK2dHbU8xVnJmSzRvS1ZOQzNndmVXbWtIb1dNMlZCTENNWTFjQUVJVGxNQzQvY25PbFJtT0EzTENFbmZXd2tWNUVQNGR2U1h1NTNyZzAxMm54TU52R0tVVkNtdkZsOWhkVUc1SDllUmVIbmJHUk1jUFp0MUxvd05FR1M5Wjl5Z0l0ZFJEQWtEZ1JsSUJLZ3Q5UkVMN2ttRDJVT05GOTN2S0cvWFFNOFdzSjdua295UGZRN0hMQjk5Q1RsZW1DZjhGZzRzUS9wNXo3ZHBhcFZydWNxVm81RWRCVkZHMGk3WUVxNS8wbG0rQVVGb09SOTl5eFlpMitHQVBCS014QWQySlIwQTFJemNnREhqRnVFZ0RpZHJGWjNQQ3k0YTQxMll1U3dtTnNHWUM1OU93SnZYVkJZZUlTTEdLUlQ4ZVloenA0c2lCbGNwZkRmeHhQUnVkcHB2dUlCVTVOZ1Q0YkY5NU9tWU1ZR3FGam9obHRhUTNlY1ZWTXhmZ0lTVjc1elBWUmRKWGR5cExKSExtZm9mNm9SeUE3OE44R20ySWY0MXNUWE85WjRsOWtNeURXUUxFdllGNHhKa05aSG5KYjRtWTczdzdXUjVub3hYczRmdmNhSHpMOVhGbUk1RDJSWW1EQVNJYUdFTTVJNklCWndFVi9La3IweUgzZDNhUWR3Q1RET1kzQkVCbFV0TjZDZ2V4d1hEL1pmWW5jSHpQZEZ0b1RtaXY4NFdLUW9QL0FpYmR3NDBpamVQQnAzV3hYUTdRSFNOc1M2RkZ4NmY2ZzBsUk1FWnVJaEhJZDlpeW1BTlVaMG5zTXl4N1hMRXQxczVXU0RtSWp3QkdrK0VZR1Y3ajhoRVhUUXZLV3hqbTl2U1FaLzBqejd1cStKUzIzRmJhbFZCcjBMbjEveEQ5OTMvdWpaS3pvUlNJRXdtcHZtTm5zMFdBVmUxZUw0VnRnQXpwQnJSU2RscnBPc0NZWHpOaFdTMXFvUU9jVjNOSlkySGdUdmtvaXBlWXc3WWltTzR2bzBNOXo2NXRENS9WVExIUWN1NUw0ZVRiTGdCRk51NFVvSTFDYjlMaGNHSnNySDRDYWNpTFVwR2pZUzdxa2RpclBCUklvaWZIOFNkS1J4bzBvMTdVNmo2VFJpMXY4QkR2by9rN25QcjVnWkR2L3hKaDAwWlpGc2tSZ3dXeS9valBwQmppaEUxZkVMOEUzTFRaTGh1SG1ZSVN5d2ZveVF0Z3d3MTh5NHlKTmhRZzc4eUZFbjNWMmgyNnV6SXNnb2VESGgyNldBVTFQVkxsRFNtaFdaRjUvcEZlZkNvTWV3eU5maERsYktMU2oybmhNNHN4VU9IUVdjWkJBbVBsSndmNWF2ZlhQNkpUb0FxYTEyMFY1VFpEcyttYnFxcjR2RllwUDFNazBHR2F3a2Zub3lTU0szQ29QaUZEaGFaRU8zS1djYnR6N1VSOUdiaXdnKzFVZHJUWjZMbTlwaDFIa3dmWnNZTk9QMlFsTkNhalMxdjlvYU5IYkE4TnZiZzZUVkViN2FDT2pGazAydW5VTWhnelhXSnBlcVMvdVF2YzNWUGY2Q0V5b25FYW1Ub3V6dTFiOHNDMFZHbVh3WWMyL28zMllQVWM4bVR4K2F0MjZJR0lDL1JjNXlja2xPRmtVcU95WnVUQmlIY1JueG0zVDBvandHa1QwQzlIL0xUWXh0aDZURUxoaEJSQndVUWd0djQzWnMrUlF1cng2Z3ZmdC91N1FUV3krN1lIbXdIb3YzWGRSS1QwTDJmeEhqaE1HakpzMXNQSlNrcVNDM1Jod2MyZVA2K3JRN2U2RG01QTdPZU1QSUxOb2tVTGpNTW4ralJybmJSWVI3R1lQMmMwMkZZK0ZtZStaTkd1ZFQ3NHJVN0JkRHlOaTJLYUdQQ1N0Y29zZ3NhNWdZaWk4NEZydFlqRWpyZmxqSDVNTEluM0l5b2U0ME1oOXlFZjZXZW8rVUtaNnlMQ2o2Y2l6eFhMNS85RG9GYm96TjNvekdqemc2bk0zYmZRVDFlK0Zqczdwa1psYkVWdTU1UFVHZGs3ZjNxaDZkZUZDbUNyK1pxZXZ2NzVIQllGalhWbTd5S0o0eDZRQ0VuU3NKRGVKdHBCODN4Rlh4TEVycmtUTCs0TUdwa3Y1b0E4UWtXU3RmTDl2ZFo1TmNTZkhjdTN0S3pFbE4ydWp0SlVSWmp4TkFxSmRDUmRpYVFxbDZyUHNzbzdSSU1QUTJsUjl3b25XMko3Y3E4NmdmVjc5OExDQ0ZwQ0FJNkUyRm9ueFk1bGdDbmJUNDExMHRKRFpxWGptSnJMRVIrU21pTU5CY0xFNUlvV3M5bzdGZjBTbFFZUlgxbkhjZTZPUzZlTVo1V25MSjlFTzI3QmtIZGk4LzhsNGZmM1pxSzZCdTY5amhTZitlVitka2hGcU9VUUo5aVJiVmJDL0xzdlZJQm1VWWFWN2UxRk9OMTc4aEZ5ZEFiSC9HUUpibWcvZzdZZytsbUhWNnRsbmlRdXM4WEowYmNXeGhjVmNkUmUxVDhQa3p0MzNjWnFYTS9EN2pUdGZGb0JCVyt3c2QxNHhuWitxRmFRdWFQV0FmUmg2RjRyNllqUEFPbjBSODB3Y0x3YmVXVXdRcGYvUGl0MHh0YVFHUHQrcmthd1hPM0Z2OERLZTVxVFlHOGtyYkx5RGdyanI1N0R6Vmo1UmloWUZkT3NwNFdVL210Ui8xY0hOdm5kRHl3R2poNkRQRFJOSGhjVjI0YmZ5Ukd4bDF1QXV0cDBvL0hhMStuOW9XSHpPZkxsL3ZxUklrQ0tzQzh3ZVFueHkrSkplREFqRTNsQzBJSXVwYlRJd1A5SERxNFFzc3l6bWFIMmtuMlJyUXcvYzUvL0hHY2hzb1dBYkc5bHd3WEtNQ3YyNjcxVmZlRTJmb2h3ak5NN2pMMGJ5c1pJUXltMlBvTFFRdm13ank5bmQ1N2Q4dVRXNy80ZUpzRlZnZEdyRUNXdzVPWTdRRlVZSHlSTGU3TDJwRUkyTDFMM1FUeXVPK1JYSHlORHdGQkRrL0grNFdKOFpuR2dwWVlNOTdmT25BYlZrS3ZwOUFvNnk2NWdJRWNERGdZZkhtNEhnYng2VmMwcTMvbVNUWjY0Q25TUWN0bTlUMUQ3bGVqc0lvUVJ6dXVpTExmNERkdWJKOGNYMithOVFWcWl3NEs1SHRzY291SU83NFlCRU5OMGVsbXE0RzZMbDR0NVdMWWUwQmVHZGxJL3dyaitPb0MvNlJJbkMrYkxFblg3YWlFU3lDbVRGWXJBdDhlSTlvY1RoWmR3SXY5VVlrWWU0ZXhraGpQZkQwODU0Qkk0MmtCWDFQcnZQNTNMMFMxOEl5VWcveWhxT1F1Mm5FNjRuYjlRS0lqV1BNcWx4a0RwVDU5aytLTmVSQ0p1MVVWVzc3VEJKSWtrTFIzMUE1YTlEekVNU3NHTjNQZUVQWXozYjNLVGlVeVB3SWo4d2RVeXppTDE1cHpIWjE2K20vOEdZenh3NG1SQ3ZmTWlrZkcxS3U0bmNEaDVEZDlNdmxjREROZzh3cHNKYTBpOUJKVHdzZHBxTXlwcjVQQUdMOEtGY0ZlWUFuUUk1NVFhRzU2aVpSTllKRk0yZjUzV1lTQ3VKZ3IwKy94R3lnVjdCeHFMTDZibDZoN1lOWDZadWFqSHdNUjZQOG8vZkhwMHVEenVRbzdYQU9RQ3VuS0pyNkZjVUl0VDF1MWErSGNxUHkvSVRRS3JhZzIzbXpaSTR4UUxadnhPWXlHdm9vOVloOTl1bkdEQ2dFN1JqSGwyU3VyWkRnSjRPYzNmeEZpQkRVcENyV0h4ckxJcEVuczcwcUZxODB4M2N2cDRnL2I4VUNvQ20xZDBnU2E3eFhUVmdwejliTnpGZWVJdzhlZ3hjZFZxMU1kYXMxSHFHNUNOTVVib3dldVpLWVdjdU5LMFM0UXlwWkpnWXFudFo3VXIrUlRHSlZITTVUYzVUU3A3N2J6VisxaEdhd3hPRHM4UVNScWdyUmovSWFCVEJ1SVJFLzJ5d2tuQ3N2ajhyUE9yN0FKTUxQSW9aakN0RFJOWURhZmQ1SEsrNWMxYW0rN1hYK0c5eVBOWDZFVmhzMXgyczBVNjF0cVlSS0lVNU9ONjZzcG8vb3RXSEttT2hUN1lYT2hRWG45TmNhTVk0ZlRyemVSM0NjNDRTNXRpMEloVVJLdElKV0hDb2svb21KVUhVQW1oeTkzUWgrYVc4ZFNEakI3cGVhYTlXcFBjYU1PU21QeWp5bzE2UndSQS8yNmtodHhVZHI5R0xQMUZscVY0d0hPbUxHTFBhTkJOQU90QzBOeDFPVDRYVHIxUzBtczhPVVVrMUZETmZMbkRyWEdoV254RHNybFM3aXYwYVk2R05CU1NTaFNxL3dHNHMreHdNTnFSOWQyK2VLdlo5NGttVExuZ29xelNvRHRZTDB6d0JnS05HQWxOMmE1cFI0N1BNOWVpUHptVTNyU2ZWVGRIUHN5WEV2aG9HMUEvckNQUm1Pck5EMDJaTmF3TDZmSzRHNkV4RER0VkJNei9RMllwckgzZDFsN05ST0M0WnVFZy9qUWtiMU9pOElMUS92T3BIMk5MZVhsYnBFNWtMQmNRd1JLQlRtMVFxNVNKdkFHT0FQdUY5elkxTkU1Z1N6dFZvNzQ1ZmExK1EvSzZWY3RMaUdXc2ZZbE1PN1ROS3ZNMzBJZGpmbVJnellMbXpRekhyVVRGUXh5V2x3UnUzQmVOVjF4bHFrOUZwcWpqU3haUllhZkxwOHAwUi9GL3JCa2E3Yi9DeGZPaU5aNXgrZytCa2tqUXhiRk14UmljSmdZUXRaV1RIaTZwOVZjY2NvVHlyd0EydWVWQnZMVVEvbTU4OWk1K2ZMbElwdUJzQTFxS0YvUmdGWk1iNkloY1NiNExIdHF0a1VuK1VGYmhEU3FWdnB3Si9MbUlQUjB3LzMxR3RrbXN4K2duL0VJekZyM1FBK2lmaDJXaiswbXkxZ3NGWXdJZmZFOXZlc2QxTjl6YzNCMDhKTXpZWXBXaHQvaEhVcEZYdWJnOW96bVVOU2h4VU5VNkVDbURCK0FjQVlaRjhrT1JlcUFaRjBkV1BsSmgreGNLb2VtdDNkaVNmaTRSKzExY2Q1RXZlQy9wcVF6ZlhDZ0NiMkorbWdQTEVlYmN5QXZjOC85bExMTnRXRWdtOHVwU3drZXBkTlRXaUJFWmNmb0xhY3duRWZIbEtRNFRWZFhLNTJ1N1FkZmx6bmpuaTRaZlB6MDhMZThNL3JrWW9sZjJKclpRM0dzRmZUcHNSWWhxM1JIaXY4SHJ1YTMrK2k3SEJQakx4RW1ISVFTQmU1WU1vNVhib0x0bXBkNWdYdEhCZnpnR2V5VEhqU21BZDJqTGxxYXFFamR0VkVmbUorQTA4c0d0alpqR1pnbkF3WWVteERYclpROFFCMnM2MGtiZWl6ajE0YUVjakdQckNFRVkycGlHRmtYZU9IbkVjODBVb0o1NWdqVXZUTTJFQlA1UUdYa1pTc3FpQkhhTGFnVHRCS1k4MUcyb3pqWFM5WHA0a1NZc3BEMTluWjZsVENObG0rQmk1bHd5T2dxL2h4VkttZXJ4c3BycWhaUHo4T3pZb2d2UnJvWHRqM3ZiNmc2Q0pRbTVHdHo5RE9aSE5MN0hXS2V4bzF6VEYvQ2s1Z0t6MWxnREkyNjVBS1I5QnRzOXh2WW9jbms4U29YMmJVQU1OREJUZ3l6SVdTcmVhZGZvbnRJOFdKSW8yMnhISXVPWUtzYUpJcU9aclNSRXhya2FqVEYwWnBvUEI2WlA4UlBuUGxnTnJiR1JwUDIrR1g4WGpTdVNKYisxRlRQaUtVMEVQTkNBV1RLOVh1alRkc2g0WVBENlRDRE0xTjVMYjVidm95U0I5dnZWaUhxeWp5aEc0aWd0ZWVVN3ZHSDlKaUkyaFBoTGJXNkpPOEVjRUloWlRRUXhKWkpPSzNqSUhDa3g0QkE5cElsazY3WkFpeXRtMUNvdmVIY3RLTUh1WFJuOWx2elZ5NUdCQVJWZ3B2c0Y2Q0pidnN2VjVqMGdqWVZEcGFGWVVnQ3FoQzZrekpxbXI0V0xtUzFpUWMrY3BZaTR2bmxBckowZW92QWdZSGFHZ1pwWHN6TTFSb2tLRXFqRW5TQWRubVppcGl5NVhPRXBVRnJyTTZuOTh5M2Rrd1Y1dk5QU2hwUWZpTzNaSGErdXQrUHNJa2ptaTlFMi92Wms3NnBnTlBOTTJxUEFzaHl3U29VSEtSSERPYUJJMUprWStEYnJJcWJRL05YenRjVVpzY3BYMzRkTkhpaTVncFdxSnA0bzFsVXpQWEJ1alEzNFB6Z2JmRHZXOGptdnhBSjJJbEF5WTR1cktDeGZNOTFNNVBkY3BHVE9HNW1ZcCtTbmdMRTQ2MEdzTklpelpDK1RidWVNZmN5dmZoN2JwMGd0Q29KUDk0MGZYWFlGZlE0NUZPY21EYzdjbFZxc25DdWxmcCtIakI4eXJrYVF2TEM4c05ta3VqcTVqTkpFbTRMdnBQRWV6ZHl2MVdPZmVyWitRWXlEYkUvM1RWS04wY0dmdFFTbG1kNE45NWZHZmlMRE9PdWtpVm1sQlVXVjFwdVJ1bUZ2ZVpBQmFvV1ArWDMrangzOU9QRmt1M3dhcGZTOThrUFN2K3hXa013b0p6MnFNM2s5aWZLMkUzZDE5WkdWc2Zaay80RWZEUWNJQjY0UXNuRGlRK2pSMEFteDkwcWhaNWdDNXFnSXJFOGU1cUt6enJDY1I4aXloUURubDZIREhIQUlCWW5zaUFXdDdnQW41eDlzTWR6OERhUzBjUlNDWEhveSsyaGZiTkc5SEtIY3YwNkxqcGFoMTdZQ2dxelBqRDJiY1cvSk01emNsYnU4RkJqQXZidFREWHdWdVpDWjhLZzNRTXU2OUc2cjJickhYV2V5ajdqclhXM2RBVmI0anFFdXlVR3VTR2pFQXNJa0FzM0E5akJueUNVSmtNSE1qT1FJanRxekFXWmxyejI0cEJLdTdSMkpqMVBqbXQrSFBObWR6MHlRS2IwdkNPYUplNFk5Y2VyOElCTDEzZFhQME9iWjFpM2k4L3B6ZWhjTUxGemhMdEN2UWk2c21DeGxXOHBoNTBSWXZ0c2traUFFaWhNMWNadk5VNWFYbFNTWlVmVkM2WXpMM010YTlGMldSLzk3d2sxc1cwWHkxTDRPQUMyYmtMOG5sWG9OSzgzc3FsZzBXd0N0ck95eDZmN1hSWWlxbksvU2cxL0dtaVRrS09GT1c0Y0dqWXhzYkNRZmwwaUtqQzAvY1lrRExrb2J3cEZ0bmtGejNPWU1pYzNjZnlYdHluQVJhOG5YbTZBYStEZktsbFhlKzlwUG5NOFdBQWhlUEI3TngwWUpvakRvcG1wWmR4N0IwT3FlL2hJc2wwVmJQVFdyZlB2S2pUUk1Na21CMkVEMEFqemxQSFJoTUpCTllzeTVnV2hObElPSHlHalZ4Y1doaURPclFHUW5XZjg1R2dmWXpyZ0M1UlBkYjh1MnhnOTl3VzR4L1pld2p2aFQ2NnVNZzQ2d29RaXVKenBSb2RIcHZQblhXeUdIZXhONzdVWXNIemgyb2lOWnFaRHpvQTRlZzhNb3FMdmZhRWNocldrWHNiTjI2clk0MEZlQTdrWVZpeWtQRjV5MTVnY01QY2Jrd3lQcHNZTUR4akFjY0I1a3dob01VdEFmTjJ5MXhpMVp6YzNjb2RIdHNycWFmMDJicUgwdVdJNmxXZjh3dWFRVXM3VTNHT0l2VkxaanZMODRGNVdWVXhzY2NPMzVqMjBoNXI1eVZjVU53b3hmYnMvbitucW40d2lSbUFubmlseklPUm1QWmNEVHJkUHoxZXVWL08rRVVDRHJnQzJEZ1k0RlI0U0lWOHB0UGFqTCtaUzc5YzNOaURDeit6c0ltQ3ZIVUNISUVaUWxqdUxvckJnUmdLSW0zV01GeGFEZlI5aDRyU1VzL2N6eU4rRmo2cldGWjlHajdKUTFnVEZzeDNFTnRoUWVPSjNGRE1lSDZ4aVhxMEcxVmFXQktuL1d5Q1lZWUhvWm42WEo4aW5YOVZsOUJEdGduTmkyUGJsTFl1TkV6Ryt1Z2M0eFZ1empsN2dDWHdIWDFmTzFNcENSNHA1Y3FTWlNqYkFJcEw0bktTMGFDUW8rOUpKREJUQjRpQ3FqVE0xL254ejAzREhtYWtsRXl2VmhFTXRRM3l6R3pkSnM3SWRnRHl2RjN1TFlobFc4cHJsVHdGVWxXQVc3c0dGWjYrVVhRcGFhck8wc29LTEwyRVVoNitvSDVPMUttSnFTVVRIQkw3Zld6UGY3Tlp2ODdNOUJZSDJCM1pWN0NIQ2cyYUhtajVtVFR6eXE2NGtjMjNFcWhVeWFzWFNFNGZGWFhUQjY3cHhIaENXVDBmckZ3OU1PS1o4NjgrN2JMWWMrYjdFSXduYzAvYUQxZW1VWTZSbkhzVzdjWmhwbmJxRiszSlhrekFHSm9ncnJOSEFVanN6QzBNMVBaYlBTcnBlZGxrS3FjWEh3R292aWl3S3FONGdwSlNVbkFtc3VFR0hRa0RRY1YzaElCdytZMVJ2THZ0bktCRmNmNE1XVkRnL1pWbmFKazh5S0N1aTZGUTdwclRZMDMvTEFsbmZNZ0VTRmFYMDlNNHBCbnhYUGxwM0ljeityclJVTkxPZUZRdkVtamNDWDNTNlV5MHU1aDZVN3lESWpQSzNldjBTZ0crcTN1TWZzSld2VTc2aUI0Um1TNUplSkx3dU5VMlBlZUI0N2M1eTZsWmxmcXZlWElJQzdkZnVWRUJ5QTBueCtFMk94R2drUUxiRFhSL0ZRWE5JbWp1Nmp4UmMvUzduTXUzT3hkOG9TU3JBa2hmTXZCTkI1NjdQMXFkZkxrRXM0eFk5QTNOSW5RTjI4V25RSXpnbHV1WmVoeTRobEFNMk1EWEpRYWEyMHJWcGV3bm05aUpPTjFRM1l2SVdvNmxmZUEvMTRNZzZkTTA5SjdmRTR2dXA4YTBCek56VUxBdkg4MXQ5WkpCeFoweEUrSm5TUzZrSVkrK0JiVGVkU3Z1MHBRTXdHV0pIWTdMS3lULzlvVGxXNSs3b3RseU5QcXY5NmNmT3VkbnFyaERDOHltN1FhY2ZEc3F0RVFQaTFOd0lqU0twRk5oTVZmdjE4ZXBnN3RObU1Uc1owVlBIMEY0Z2FOU2ZzQWpxbXpWSzhtMG1ISHVKM3ZLM2FMTGNESWh3SzdBbUl2REZMb0RRN2lNaHVuQURwNzJGM1FBdjFzaW5MRlVseVEraXR5cVlOQkdJa0lxR2F5SFRDbXh6ZHpZMkVwN2RjeHErRkliWUhWNlFTcDV6c0NkeXdTbGJOYng1V2RDTGNZU1VULzJ5alRldVYrclNnQW55YnhPcVJMUzNHeEorbHdrT2pRUG9Md3FUNGR1UU04WERqVmJ2dDZpaDNOQ3ByWjhGRWFESjgreDh5cEV5SEVWakx1bEZidXphRUF4Vks4cEZDdWFJNTIvczAxdWFNWjdRdGtBMUExM0VvRk5IUDMxQmw1aDFpNFN4VUo0WmVSeDhGc0FPUGxUYkJhRjZ4SWVkQVJyNytKOEZzb2RlWmQ5enJFak1ibmZqVEExWHR6TG9HQmxTd1dOcmx3WWhtdEU0OCszTkllNndLcEdzYVFybjVNaEZpdSs1Qmd5TzNqbjduaUZSSVZQRWZMUmhqYURSVnZnWHJTbEkzUlQ2ZXp6SlV2ci9mQzgxSEVwcys1K3NQQm1jWTF0QnhmZEZKZ0MybDNhVi9NZS9WWGF4M3M0MXhlWnVFd1dKVzNOOGlzZngxRmQwcVgxckdRMWxJSmhDdkxwSGRMdTRlQ0t6a3FoTUpVYW16SEQxQnFNT1lSNWhEQW01MWE2aXlicGViTHdyMml6YlVWMlRkSEVYR1ppSnNXMmlBZGlBMTRnNi82OVhWU3dUTWdkQlZUemYrVm56S1daUW95S2laUWRlVjVUdG9jbm9CUGdmOFhqRjJmOXpYN0ZwQVZtd3pxVEE5UEhqQ0pIOWRGUEIwK1ZTYkd4NWFhbDd0NWVOTFZPWTVKbnVBUkwvYVhSUzdTbmpWTXNobkszbTFaemhHNGVXTVd1TUE3aXQ2WTU2c3VmNWZwejhNZ21idDZiMWM3RzloQnJ5eUhTU3FzWGZkOVBsRm5XeFp3Rm8xOXo1MG5LRk02M1g3VmRGV2FDYmhyUllRTVlwemYya3hVaVQ3dGx1RXBsV2pNTHBoVWJRdk4vdTgrbGxTcmdFelZlL3hZNnpnSGJRMW5Rby96a2RBeFRSc3dpd2JRNG51VXBIQlhrc2xZeEJ4Y1ZxYzNOcVpNUGZPWGNGNXFvVy81T21LajlPS1N1YUtRVFB4TDh1d0RyWUJMR3ZwRlJjQ1NlSFp3N0ZoY2cwT0VERzZEUFpUMFZYZ0MrVVJSRXhkb25kRktpUk4vRXFvL3B6VEtEVVNDYld4ckFkazJrVWxYMnlKaW5OZXNSZGJiTzZHcmVaeFN2NUpEUFFoN2xlcXlUVjRERHlneWdnUHhPUFI4QW55U0g3L0ZXNWtoaWV2cW1QeHY2VkNWbExjaDhrWjgrcHhZMFd0eUNxa3hrOGRQcitlcjRhaW10ZGJLTFdzVVVZMm5aNU4yckdScUVsMU5KeFljdFVPejRXamVmZk1hWDNrVmRUbUlKeE1MS1pDWWFQelFhenEwSWNSOGhCaERKd2cxbVI4SUdoR0N3UVpnaHc4dzQrb25aY1VWM0tOeDNoOGdHMjhmR2hzR3hsRDZ1bDY2eWJXS2EyMGhSQ3h6UXdiVGNaYjBoMW05NW1qUWRUMEpJcWpZLzhpcURNVE9XKzY5TnJ1UjFibEJia1k5WnRaeTBLdEpmR1lnaVI5OHE1bDlOSlBUSEpOMzhVamdlSGNZMXYvSFVwTk84cDVHSWxHRERIS3RVb1FqTWExYTI5RkFpQ1BWS0k4N1VqSUNsKyttcUlHd3JxMm5QNXg0SlRqL0cxRUxWVXo2Y0RmbUd4R1dxVGh5V2pGbUsrL3pZdHlRc3lHckNycm1MUUI4NVNiTysvdXhkb3V5d1Vlci8rQ2pXcnNReTg2SjVRWXA0em02WXErSFA5eUcra0QvMzNObmY0NXFFd3FJb1ROUGs1ckJIdnJGd056dTN5WHB3NzFINjFSYzN6RmluUlQ1MndrZHdVb1YyU0QrOFRnZXFJYXdmWGlreWlTQmVKeWh6RGhxWndHN1FJdWswSHdxUllZSTlpYy9QQTZwSE8xR0ROUXpCK3E5VXNBYkFjck5FUW55MlZRMGVmclluVnFpL2tsaDY3dDd0dkNCVkw0TTVCRTFsMit0a2IyZzdLM1R4MHZZQXUwVmt2TVJ5UHpiMmh3c2MzQno2WG1kTnBlNittSjZjZnJrWmFqOUNXUCtRdEhodDlwcXNEbnV3MFp6UDVrcHI2NytMeTQ5bURWaS9jQ3crc2FkNG8vNVhlT011alVReVROanZzR0RleldqY2pGSnlUbXZ4REwyN2c1dTMrMDZvYnFZT0NRUzZ4My9iTnk1UzRGa3NSbHU2V0pBbkFQbGNqTlJtMnc4bEJjS250VHp0d29tUEdXelNGTnJRUXlhTHZXK0VnYVlCLzVEdTJlNzFyWFlUV2NDU0J5Yk0wSlNDZThzWkJMa2tvbzlCVDBMTmREeUczVVhSOTlDdURmRUZobFM4R2JFdVhQNDAzbUFQZ29sNkFRVG9lNXptRVpEMUZLajc1Q05ZWWlmT2NXN2FzL3dBOFFueEJRYkllSUxYS3FGZC9GMmJ3dWNmOTFXY25MbXBMbGVvNmdUQXNkRXZTMzJmR1Uxd1p2WVVJUmYycGE3NzNpQWJyaWk3dFNjVDd5T3dOa2dpb01XNlAwSzZTOENJYWlnaTg1NGZKWGFHbkxCSVdINVVzNDIrV3d5dXpBQjVMeGdzcXdaeWVzQ1FFaDR4dGNiYm5WZFBJMGlKa2U0dXhDM2k5Nk8vejhPV3dJRkM3QXpxVFFoU3hWSTRVeVZxVmh6ekdDZDgwU0s0eFlXcmNmeEdXTlI4LzZ5Z0d1MU5PRkt6UGFxdU9ZUEVtcm00dDFFdGZRdUY1R2ZKNUVNWFJ0cnhHaUZLUmxLaFpSeXVCaU5xNXBBLzBReTIrNVNYTFh4dWdpTVpaNmFZZ3c1Vnc2N2FhWXFaZ0YzMkxURjhHSHcwWTNDaTRsQzlzN2FZUWdqeW80WHU3TEJGTU9NVTVoallqSDV2a2RHcEk0cUwwMVJ3WGtzbWM2RWJGZ2FCNjYyWnlYeFJFbjA5cUhyVjVDZ1daL29RMHVTZVFlZm45UVgvZXRmcVdyWmY5UEw1dWdOV0NQNGJpVUt1cnpPbk9kU2k0VC8wVFp5VlpMc1IrYXFlcFVHWngyUjhNQlhkRGs2N0I4cmlHRHNVQU4vY1N6MmJWaTdqdnduMG5LMkpMMVhKbGxJbkZzTEJhSzN6UkUyWWhZUXBKT2VWZ01KY2Z3VFltSThOQVoraHd2aXA4eStoNEdScFZhVUxHWUlOeEtMTnBWa3FTaEFSRjJhdWlKbU1BSXMyamZxQ2hwdkR2VVNweTd6VGhXb1dKeCtSak9ZUGo3dDZiSEJUUWx5UGl3ZWowckhMQjlZYnZyWmpidWtEbEVHYzN4UmRBM04vbVdTVmRFbTJhY2JlL1hFMU9sZFBaeTZOd0xoaGVyVzNzM1pIM0RPNzZvSERVVG01dEg5YkU5WURMMWRXK0JqeUJ5SkQydTBZM3VCVUZpL2ZzWUxFNGQ1dGhEckRGbW5BVmJ6Njk1U0VUYVBHUERMbUlHR0xvT2xDOHl5cFZLSG4xdS9uckxuZ3pOR21QVXRpOEozSVRxRXp6V2NiakkvY0RIc0c1bWZIV3FocW9zbHRVS08xLzVteFFnSFJCaDRyQTRzR1FETmN2TVRoelkvRFhMSFZIakdremhRZDFLQjVUSm81NThGRzJQaThSVEp4dHpPNWtQeTJaRkYwOGF3Z2tnamQ3RUd3N21SMGU5RFZUbm0vYU01UHBsTlc2NGZzVDRSVG9XYnBseFlFTERRZ29qVkpneGJjeGRWSy9pYUZjSEdpS2ZpMDVsSTRjL2tHN242djV1VUdpMHIraGtsaUdRbEswVzdTcHQ2dE5ZeFVmNFg3V3I0TUY0Y056WG1TUTdBZkpuWlF6SW96UHAydlVPclE3RUtneXRWVXNBNWJ4amVkakJGUVQwKytnbXNpMEJIM0l1Tmd1QjcyZE05VDVTazY0aE5BWExuYVp1c0ZmUlhnSjg5UnF1ZTRpMjNyZVJadVBwTVZLQ2pjVGk4VnR6enBNejFGTTV1Z0JNV1JsM256MmJJNzNsUUFGRUhjY1JvcGhhWW1aelpuMlZYSUw5ZXNyOWVpTU9Yb3hnSXdUNnQza1AxTkpaMzdROFQyU0MyaHZiT29SZ0lvLzNXVDBjVDgyblJYMWhpSUN6Yi90dHMwS1MzY3hSZlBTclBxNzdEREdncEFKNHMvbklobHRqaklzeTUvUCtMR2NFTnZ4ZG9XUEk4LzhMOHg4SHNncXNSYW5ncUFEajFoTU9ZWEN5RGQrTFVUZUNWU21sUDY0S2UyVDhOaWVBWlhybjJxY1VqaGsveWMyUjZFSFpPcW1GZDNBeGU5T2RMZGs1bXVmVlJLQXNnRmxFbUdHK3dDNDRqY3dVNUtoVmZDTHJJb1BTMk8vaFhENkhwOFVZM1FXbnovNTEvVWpvRTZ4c0NJQ2J6Mi9ob1ZYWHh1bEZ6b2NIYmVmMytvQmVPVkdCQ3NoRmFBTFlqc0lEVGprVVIxL0ovV2xLaUxFZi9Za284Z0cvTHFqdUVVbnl6THU1V09ySjQvOTFOd1BtS1laQVdCbjB1L056eXFoOC93QXdaNHptTGxUNHJwSzRqTHYxSGlxcUtlNFdZM3NRTVhqWWdEZjhxc2E3YlZrTTZBSzBoRGlTVkZKWmQraUFEZ0NadzQ4N2pwUHIrSVB0VkhBaU5sdm4wN1NmajZFbVpOc2pmREQ5dUZJM1pmY2FRK2NDK241aVNtRjZ4aHlOSnZHM081YTFadlV3bGd1NmtHTDNZblJjMTRxMXE1UkJ2Uzh1YTRGV1lRLzdUSjF3VXd6czlxUzlDZ1EzbGRpZ2pwMEdCcjRhSmZBdGU1WVNYb2UvMnNTMUJidk43Zm5uWWdvSHpBV081Vml5Z0lBRTgyay9Ea1ViSG9QVGdpYXRsRk1CeW1DTStNUXhRSDFhV1c1TjlRS2EzVmFaQnk5VWh3R2I4LzhxNFdIUzBSWFpJUnFTVFFGNGt0eEJHL084WnFZcklJZkdURDBPZDZPSmRlek5YMkFWM2FFNzBPVnduWFloZXJiNFlXQkMxcXVXZ1hTNzZ6MEF4YVdsanRPRVg0Z09sNmZjdjZYZ3lVT2ZoUTRhUnFKZmd0RXhZTnkxemNuQ3hoL0ZmQlBhQnZ4U3BKS1VGQkh6MmgxSHZ2a2JMWnZNcnpsVXdWTzZId2JHZHlPamJvZHk4QWZBVUdEYzFDTDBzY0JlTjZGWDhHbENzYURuYkgwTjgwbVo5ZDVVOTc3Q0FLTW9PdU5MWHVoaVppMDhNOHlYVXI1WUF0aGgwbGk2anpzaEc2aUhqaytQZ2Q2Y1NwNWk5MUgvTm11cE9uN0RUWFhZSHA0YWR0OU8rWkJNTVhQeWpvOGgya01YbFpuZ3VVSThnVEpYS2kxRzdFWU1EVkY4REwrTlRRWEVidkRuNWVrV0FtUXFmV0hHNEtKR21EUS9aYXNyNisrODVOUVFOVDM2Y1NNODZDcENKVGM2TW8vbyt4eXIxZTBuSmxabmxIaFhTVktvREV5cjRsL1lZUGFmODluT1BKQVdobjArTy9IMDhoNllDc0t6R2hWSzdwSjNUV1lOM1hyclZId1crMWJGMzhJZFd2V2l5QUZWbWhQQ0lzRjIrMEFRVGJiVDYxSjNSS3NuSUJZZ09NV0J5aG44T2cyZHdDUXNhdFZsbTJRODFLTUViMnRqditaM2pScTgvWi9sVytkSzliSEs5KzE0eG12c3B0eVFGVHRsWE9IUHEzYndzakJNbDRMOFk5cmNaRVA1cStlUEk1RjVLaENTVURBanhQOFFFUkpVK2wwcElrYWJidXVlVkNHSlNwOW12OVhkMEJieG0vNjNIeW5jejc2L05MV2VQUzl0ZlFEV3p5eDVpcURsd1A2eStqei9MSGcyWmEwbXpFYnNmU1JLZ1czb3VRbEhTZWNmMVcrUTlsQjkxZzZSbmdqSTZkcndTNUR0ZHRMeTNpSVQ2dzExbmVlNGgrU2creDR4emZ4MlB3ZHljYkczNWxGcDIrQnFneGpyUWFtQXJuUlBybU05Rm4zL0ZFSXR3dzBJVi9mTTB0UE9SWFZUcXR6UzlkaHpWcWNnaHNyMDRwWU1xOEFWQVJPa2tVMXFpa3YvRmkzMUNGN1p5a0FBY0lCSnVzSFBtMXZ5RlFpcFNKVG5XRjV3WVpLeTZaR3ZUYnYrTnZ4eG5lb1UwOTJkQmV3aHg4K3MrdVU5VTlaOVJFWUdpQzBtUFlpdnMzem5pZzJOb1dXcWdZOHBJYnBJOUpXbTNXWkQ2eEU1RnJ4SEZxMkV0bWZFbHV2bHJFTTUwRlN6S2JCSVQ3V280TytmSGlaSE1ZK2xEUGRUckxBbjduL2V3NURZWWhyKzJaZVJmdmJuMmkrSG92dEZRS3RjR0ZWK0RXbXZHaWNWdXR1enNuUnVXLzBscnc4R3QwZ2QrL1BPTitiZW5xMCttbzFpWENQdVdkeGNqT1ExZFlhZml4RExYUVJ6TkVVYWlnK0p1K1l2b0hhZEJMNFFlRHJFenFJWTNxSjlzZ1VkWVJBZWFrVkgvQVU4QjVsYU03UWFNbE5TMWhtTFNPNjU1bjJvdGFFYmlGN3RjWm02SzlBaTVrc081UFAvZHZYT0dmd0hMRXowWFg1aFErcUo3VVlpc0toR2Z6ZnRxaCtWSFl6Q3Z6Q2RhdUdydEJ2d1R5N29qTHAvUWV5bk5ndlo3UithWW1WdSt1RHVRaE5HNnF3NHdzbDAwTVBFU0RHa0llVVhyTjZNYzloV2ZsSkxMdndYMFhwZ3ZZYjg4V1BzU2RKMXcxRzk5NzhPVGhFQWRNVys5V1BtcnQ5QjNSUUc5aXVYaHhXcTNRbUorTmtCK3FubzBtMUlKZGw0M3IydWxaeTQ3ZUR0Q3NZY1ZlTmdOV1l2d2lkVm4rR3VZWVpULzM4Mmc1T0xxQWFiWCtUSFhuVFRzeklXRVV3MGliZ0RNVkkyZVJBY0MxdFJzVlJ6MEJWR3E1aEJTdEFXTXdSdGVjYmdPMnozaG9RZE9xTnJJRS9kVUVNM3BpblVlWlczSlI1c24yMHI2enNJVGhiUmN4RGUydXpiK2JxUnM4QXBLTHNxTEZXN253OHVNYklubzlLaFVLU0syRzMzWldVczkwTDNhNGgxQm5FaHkwMjg3SFd4TnNhNWZwMmJUdGNOSVp0N3pqN2Vxcy9HVldlY3BXSzZXaS9BYjNtQU1hWU5mN3MxZmxFVENUR0pSLzlDcUljTkE1N2NwcnlVWXpzZkFnYmNpdUVPOEpOYVVaUUdPMWpPZ2kzWjM5WDZnWTZaVnI1OWxTekFDT293ejhrRzUyY0tJY2wvcThQSzBFSUI3bS9kUVFSRythUDlkNCtjZUxxN3I2ODJubEFheWJhUTlPd3ZZVDBhL1BUY3NwMDk2dUNTZXZYQWVpTlpXWVJzRGFHaG5kMmVJYVVsTkYxcllpTGRpV3JwbmN6bU1ZL3pNdm5MZi9tcUxtVHJjdCtLNkRUVEVPSi9ha2dFc0dFaWpzakpWQUFybndvdVphOEJDV0xqdmRLNjlERzRsYUpINUNkaC9FeSt6TGRGMXdIb0ZqQk1SZUZPRkhyVzNNcDFObTlJUWZ3TTVrK1hrK1p3WE5JaFRkY2xZZ2hkaHVxM21MQ2RHUk42WUw2NVBrcVdoU00rMk5OY2pFWFN5U1c2R2RDWFhOUTJkU3hjSGFVaGhaRUNNa1hoU0NhNmFvOWk5bVlxVGVBSFRqWUpsYytIT1c1cnZoK1F6V2ZGb2FHL2NPUUtsbkdselVxSk1RcjE3T09kNnVUNXJ3ckltcXZ0RG9XUVlDMTZLZFVhMy8vWjwvQkRCPgogICAgPC9CSVI+CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I+MTwvTWFqb3I+CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24+CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I+MTwvTWlub3I+CiAgICAgICAgPC9DQkVGRlZlcnNpb24+CiAgICAgICAgPEJJUkluZm8+CiAgICAgICAgICAgIDxJbnRlZ3JpdHk+ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8+CiAgICAgICAgPEJEQkluZm8+CiAgICAgICAgICAgIDxGb3JtYXQ+CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24+CiAgICAgICAgICAgICAgICA8VHlwZT45PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MVo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU+SXJpczwvVHlwZT4KICAgICAgICAgICAgPFN1YnR5cGU+TGVmdDwvU3VidHlwZT4KICAgICAgICAgICAgPExldmVsPlJhdzwvTGV2ZWw+CiAgICAgICAgICAgIDxQdXJwb3NlPkVucm9sbDwvUHVycG9zZT4KICAgICAgICAgICAgPFF1YWxpdHk+CiAgICAgICAgICAgICAgICA8QWxnb3JpdGhtPgogICAgICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24+SE1BQzwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPlNIQS0yNTY8L1R5cGU+CiAgICAgICAgICAgICAgICA8L0FsZ29yaXRobT4KICAgICAgICAgICAgICAgIDxTY29yZT4xMDA8L1Njb3JlPgogICAgICAgICAgICA8L1F1YWxpdHk+CiAgICAgICAgPC9CREJJbmZvPgoJCTxCREI+U1VsU0FEQXlNQUFBQU5pTEFBRUFBUUFBMkhzSDVnd1dEaVlXQStJQmMxOHdCZ0ZnQUFBQUFBQUJBZ01LUUFHaEFUa0lBQUQvLy8vL0FBQUFBQUFBQUFBQUFBQUFBQURZUWdBQUFBeHFVQ0FnRFFxSENnQUFBQlJtZEhsd2FuQXlJQUFBQUFCcWNESWdBQUFBTFdwd01tZ0FBQUFXYVdoa2NnQUFBVGtBQUFHaEFBRUhCd0FBQUFBQUQyTnZiSElCQUFBQUFBQVJBQUFBQUdwd01tUC9ULzlSQUNrQUFBQUFBYUVBQUFFNUFBQUFBQUFBQUFBQUFBR2hBQUFCT1FBQUFBQUFBQUFBQUFFSEFRSC9aQUFqQUFGRGNtVmhkRzl5T2lCS1lYTlFaWElnVm1WeWMybHZiaUF4TGprd01DNHgvMUlBREFBQUFBRUFCUVFFQUFIL1hBQVRRRUJJU0ZCSVNGQklTRkJJU0ZCSVNGRC9rQUFLQUFBQUFOZDJBQUgvazk5OUhHRVNMQzBiL1pZWllxVjNuUVZ4TUFXbXpYeHFEVWhlNFhZaDk3V0RISCtoR2RMV2c0bGI0elVrSlIxMFkrUjYzaTBSenl1cFc5N0VXb3RHNnRpUy9TN0JQTW9qMEFKWVpRUzQyOHU5VlJodkJHQ3p4dTIxWVhUYnpqcWpzcVhpSGhBeXBjRTkyRDRrUmxpd3FuSXE2M2l4OU9VNGE1Mm5INVEzVHZKbXVQYk9BTGkxMktTdXFNTXlGZHlqbGIvSDJOOGZZN3creHVCdEU0Ry9lblRvelg2d215SlVBSlltNWZ6SE5OcERmSTdkNWo5NFB6SEJ5eUFqQzBvRCtDeHhtRXhwL3diMENRWktMOFZiMnZyNlhXeERmaHB4ZnpYK0JBMVhUeGJBZjFzdytvOXFkWEdBVkpKRDBwQ3FqSlpSKzhXV09sYmdZSWRzbk1jSS8yaGUweTZwNUhzVVdkb0hUdUxvY1V5YlFBNUU1WUJramlvVXFHckJQVkpmcDVoREdOR3VTUGtVNGc3dlZWa0JEMlgwQWpzZU9IYWFjME1CRHR1bUhobTVMSmZ2NXZUZm1SMzdQRFBGQ3Q5VXdGUDV2VGJhQlNPcG9oUWg4SnBpRmlPSm1aQU56L21uSFoxQUJ2Y29kblArR2tKdzRhNkhENzdOaDJmSk9TRkNKMCs3WStGTGhuVndDQUE3SWlqcFkwWDZWYXhOeHQxbmxyWWJmaWIzSjBJMU1uS0FpZFhNQTBaempBNHN1U0Zkb3g4N3pQNEJqRVA3Q2xGVndlOUt6NnNzSDY3dkpGdk81Z2tBQ3RKQXdTOC9wdlJaUkFKOUJQWDhXbFlsTVNnVkxTc2ZVWU5YNDhxTVpBODZtdW8veDltdEVmWnNaRDdOY3EyK2tYdFRZQnU2MmtEOHozU3NXRTcvZk9SMC8zNVJjQVEwSlRVWXFHSTBNeWhncHlPN2xhblJjcXBpRUxLU2tqbSsveDNZR3kxRXp0a3BDT0FLNGZ6MVJOTWFYdWpoTldhcjVsb2xGSXQxRS9DdUZrbUpPM3IxSWtlOGNQOVFXb1JlT2I1OHJkQnZJRUZBVk9vZzlWWGw0czRPck9wSStPN1NLTU9HNkxkYnFQMGZvVlhPODRtUUNmUUxvdHcrYjcwaUkySm12cUNPRW14aG50dlc3WU8vRGVlOUpPbXFMV0oyVTFya0lZdGgrV25CNGZ2YXJWSmVKY24vUkVDTmtlODJnWUhUZlRWcmdpbTQyT2VBNlFRT3lHZmFtbW9rcmtya2kxUFZiMmdKYkxYdE4zOTVlWTQ3ek1zMU5NUlk2TG5YQ3k0QzVYVlhONDlvU0FFWlZOT01rdlpuR0ZjQk1BUWQrSzlzWFdWV2JNOWZ0MGtNWXJZZHZNRXdqTFpqbzNwT3BnVmZaRWg4YklOdW5jQ2UrQzlqQ0I3TytyT1J5RUpMc2g1UWlVLy9LOFFsZ2Via3VoRjRmSVJrWHBnbXdrSXZzMVBkeVgwWTR4RkFCTWpvMDl0N29iRDVMSVhUQlRhK0hldkFJZWdReWltZWIrSlRWOHhDSUdieVV1b20zOEFsQXJXWkNLTitoWk8yREo5YXNlMWVGcFk4enlUTjJ0UTJCYWxKaU9LK3JmZ09WUDhBOC9Mam5HcTZiakYvTEhTTlhEd2RwNUUvVENUT21aNTFwNHRFdEhScGk2aEFSa1d2NURzSFlzbFRLdk93dG9zdDZJZVEzZzZ4K1VyS0lwNVlmT25SdERjaW9FUDRyLzJ2RUtMaXlFMUJ2TmdsUXZsb05BSXhyVWNpV0g4UFZGOFplb1hHbEhhaEhwclZoSVlvTzRJbFVSZ0RBVkwzeWY1QTNJY2xaemFoS0Ridms1emI4YllpV0hGeEhYMHFsTGFpZGYwNzY2b29VcEVudTdCeDFESW1lTTd0TGdTVGxyNDhGTWN2Yk5YV1ZJeFo0R0lwTWI5d3lKZnlUSzV4WXlNM1NyRXpKdWpLN2o4ajEyaTVvckdtbXAwL3ZNdWQ0NmNzTG1yQkJRRlV0Yk1SOGgweXhmdG1mUFQ0aTdBUW1wSFNrZnprcytWdFJHdkMwbWIvTHIxdjAzRXN1bCtIQk9zMHRIOEo2L1poTUNKOGRhekJvSHpleFpvcWhzWXFqYUticzhJdFJDeDV1UkVaVzFyNm5nVnlhNG1qQlM2R1E2YmRnSVN5UXN3dEJSS0VHUmQyaEdONzliWUpUaU9zVkNpem9id21CSGFORlprUmtGdGRuWXdhKy9YOVRRQ1BFeXJhS1Z3YmNBbk1mVlFUdmlDMzVqWmRXSFM1dklHdWdaRVhJQndOMkptYTU3Smg3dnhXTUJ5M0wxSDVsN21qLzIyTWZCMTh2YXQycGZCdk14YzV0YVJ4TGhkOERyZ2tnNXllVUd0dHF4bXhSS2pIRUVmM0pjVEV4czM3NHMvdVMrd1R5N2ZBL3YxcHhBT2dSOHphem9CdXl2MnlQZGVVZWFQbllacE5JNVJVQXpnWEptY1RLYmRaN3kyMjRscDFjVzg2Vy90RzRTSmhkVmFnUk9va2tnVmQzNU1YYWRBbUkwTUs2eEhYSnNQVkk0ZnlWRExNMzBETkZDdEJjUkFlNThaWDM4dHBxOVMwK1Rya1prdUVVRyttZkhYRGtQWlM2L1lGeXY3c1UxWlJaa204cTNwWWNQNStjSWxZa1VzL29FdXQvM3VLaHBLR01jblVvTG0wUXArdS9sV040SGJIZ2ZwUFZ6YkNmRzNoQ2JmMWRxaGZwZ05ZMDlqdElxbWRNUUxNNC82QlBVdzdaWk5aVk5LQy9IN0U0NkJaTHFuSW1OL0hhOEdNaHNpZ3VsMngwbmhuRzY0WjlHNzNMYU56UUhkRnptZFhvS1JxOVQvUHc5TDJQdDlQdUgyZW5tQjdYSk9kYi9mc2lsWml1TFp2aVYwUUczM0I3dTc3QTM3YVU4Z29ZQklzM2tKUERyODY1Syt4bTJibHZJRTc0YzIwZ1UzZVN1QVhMMzlrYWpBU1Z5cUxzdk0vM2JXS1pmMFlldFZvQUZEQ3F1b212ZHZZRUpmQ2J1VGt3dVB4YzJsT1oycXdONmZtcWVnVjNwNytOZW5pclBodXR6aHpIOEJ2UEV2dmMrak1yOUp0MkJWVGtwbDM4NTJEYnBBL09sQkVMT0h2c0NkMFlUVEExWW5SLzNwTVpHYXJzYjM1WWtSb09PRFJmQjM1dExQU0ZUTm9lQnZEdTRtdXV4RXVEOGhQQkVhdXlXcDZNYUZVMnlFMnJjdnZHeHhZd2Z0Rm03ZEZyWHAwOGlFbDl4dXBsWkhGTDQ5ZDNkbmVxMXc0NDBFWWJVQ25XSCtXVTdlN1lRU292UmNsd2xqTW1OSDhkWExrY0Y4RExWbWJqeDljdUhMRmY2Nk1rTk1lVnhyL1VIVXd2a212TGt1bjBncXd5YlhCcXl0ZGRBN3Z1VXgyRkx6T2krZEhGK2F1OVNKQlg5YU5TaFVZYXJmb2hmREM0Vjk5S3J3K3VySW02alczdUcremRmQUJXWXVadE1FcHYrOUJHRTEyU0sxZytjbnBRV0ZUdHZJbG5yKzQvT0FGTWRJY3J2eXhyd2JDTjlDMXVSV3QyWnl2YXFaSWFVelFxTWhGTlhkdis3d25uMjBEaG1jazY4VTZZZy9CSkxHM0Ywb3JaSGV4QXdvNHdMOG1OSGhMdStybzlVZTM2MUNjdE5lekRVTlVsWDN2dGI1YnUrN0F0VnNLZkVvKzRwbXBjOGszb0VYNlQ3bGI0NEx5TjRyNjN2QkFKcEtpbUIzTndHcTU2c1BiSnR6WnVoSGttMEM0UVF0VjdtajBvR01vSGdXcjI4a0hOb2Y0MVVuUUxRbElMNEtxcS8xZit3YmdrL1prL3M2encxWXZVY08yK0pwaGdYQXNRNTliMytydzdUWlhYbG8wSG9EWGtycmJ0T0xzbXBVR3J3SjdpVzZTNWN3S1FERGRpbmgxcFFQbENwRkFmMDcxRElTcXZFMXdaUmF4ZEFiRWFQVHo1WXE3MFpwd3lFWFBONmg2OHJ6UmZwRDRPTnJsREpqV3FSVVR2KzBuSUEyYjYzQmM2T2JVRWVGUktUUmg1RWt2NThUa0hjL3l2WVFKMklQRGZCS1hVVm9qdk5UVk9ZNER0MHZhWi82d0RLQk80dUc0c2ZFMW9UeFhyN3BteStFUWJXejh2Nk1Ld2RQS0NMZXVEOU12dUNVbWl0ZG9VbkVEMklCTlpKVzdqTTg4YkxQNW0weFV1ejY1NW1Ba2ExeFFMTkJLUU5ZRFhjQmwwSTlwTnpNUm9hMEY2RnZHR29YYmhvTldrTzFrbXJNbTBvZVVyekx3MFBFYnBTRDlMSHo1Z3RNZmdPMFg0bEUxeHJ5MG1BTmhaL0F4YzhMRXJ1SFRESnk1Sjh2YXQ3Vy84OTIveGorMFdtaEwxNDZYRjRkbUZQb2h0VzRVTmV4NVN0bVdxbUdVNGc0YXo0UTUwbjljL0ZQRnBzekoraVNKaTRKR1M5dEF5K09HRGduL0lTQ3VzeXdRZDRPSTNDRHV0VmRHZ2dvZmxNS3ZjY2x2aldlUVZWaHJteFNnU3FqMFQ3T1RsdndvUEEvUXVtUEFvdEFMMTg5Y2J3ZHh2TUhLZTlhWFozM2t4RkhTUUlodVdheWtHeHR0MGRqL1ZYT1NpeE5EVUN3QStRb1Nhb0p5WXBLS2dNTEgwRUd5VjdPM28rQ2licUZ2RExsTWF6VUdZd3FIQWRDOVlSVG14QTdLREhNdFRGeDJXNXF3N29JSkxQSW82ZXdPMnhZQ0pSWFVudzUvdDdPeHZxZWdWT2NyVkgvdmw1WlRzN2JDRU9pdzI0REwrYWpQUkVqVEd3UXFySlhQSEVqUVZIcy81bndpYkcxK3NIVnpuQmEzSW9KTVJ2VG9xT041c3JDSW5RVXU2MTBVTUx1Uk5UYkxqbzRTMDhSKzlGVnFnZzZjQ1ZDQTAxKy9qWUNPODNmQlBWTWxkTHBOUGZTbnRTOHE5V21sMGdFeGNsYkh0R3BOdzZpSUNUemhSVUV5MVd4a2U4bjdBajJDbkpBN1ZCRXJPTlQ4UHE0bEx6K3R4LzVwdmZKcVE5K1FXT3BBQUVZZUdiYkpTMFpEcWg3NFpQOXdOMTlGMmN0ZDY3cDg3bzBLZitzYzJPMTRPeHBoaTVucjRDRHoyaVIwL3dqRllJVHd6enpDM0dEb2QwM1RFU1F5akdvbkZhQlh4V09xVk1Xck11Ty9EM05iSnpqSHhSQnlLcnl5a1lLTVYyeHBIK1Bwbi90OHJMa0lYSEJsS2k1QnhTRXZIdDN5d3NtQ09aL3E4c2E2TWlZeDgrWUduZEJJTmZVS1A3eWJSYkp1U2lCTDVTTzlUaG5OV21hNG8wVHpTMzZMajNPWEltcHZSQVFtNTFnSXp2UmlvQUIwU08ySExpbnhRUUtTa3N1cXMzUjBqT2xZbG1nd3JBQml2endqQzgyQ2M0NmhtNTVqYjl3QXdCY3hUekdCUWdKWG13OUFtZm5WY0tPUzExRXdCdFhXRWxBVmtHQ0JaTm1JVXpzTkVEUlo0aE9xZk1ZamxDY0tsTHB5aVl6UWVJUzlYMkVjM1dEbmNENlNuMzlROXAzQ05rSUhYNkNEL0RwZTRpdDdNYk1YWC9qVVN6ZDBOSFJyZlRIMU1HWUJzM1V3ckkvSWkrc0Y0aEgzS2xKajRseTlzTVpmOUhHcGVMNzZFZ0RhdlBVS1Fuakh3eFdxOGVNRTRvMDhZL05nTnFGdXpqbGRzTmdDbE1IcUVWYUJxa0xlUys1UXgrUjIyVkpwVUEySUxoNmozS054ZEp5Qjh1MFpsdkNXUGw3bVRYcktQYUJlZjRoNU9uWFA3SWpnaG9LZnRyRTB6NklBU01vQjhmQlR2T3hXWmg4UEU2TWlQWFFLcHNDemI0V1V3Y0pWMnBTQ3h6ZWlzeVlSYU1zbWFiWkkraCtYVTFNMFdjZ3lqY0t0TkhjbWFtSjdMMHpaU2ordG9zczU3d0xXVHNwRlIzL3hmY2lDcHBRZ3diZzZ3NTVzRU1EMjNwL3luRXNJUzVhbDdld0RuZWhOSFp5YlBCUjZRcXprb3ViTWZ0S3UrMU95YnE3M2toc244OUdPRm9tbldCSGxiNFpQWFg1emRwbm92aW0wWDNrY3NaZm1tcTA5VE5keFJicEJjS0ZiTjFjUVRIU0YzM3hLeDR1ZHZ6VTBtQzRRNjNCT0w5UUg1eXpVR1VHcVI5V2EyOXJySEpjaENjS3VMV3JZbmx2STcyZ2ZYQjV3K2MwRHpWNzE0NzRCVDZySHJrYXlIcDVpcVJxRFpha3VUVVlVbmRxTDl4WnN0VVlLTXJKelVLcWxmS0xTVmlxKzhHQTlLNTRxYlhMRHlBZW1YMGhNakRsbm5qQXRFdGEvUklkWXRSNnVnL215U25qOEd3UTNHS2VJazFVS256bnBTcE00NnF6UXZOY0hLVGZDV0xBMVNDNkFmNjBRdElDbXBnUVFCM3cyR08xUGgwL0JHZzFvMDVwdzVLMnJocVBoMThqajZYc0ZHQVJudC9kWU56RDRROE5ESkRldWw0OG9FRUNwdXN5Z2tiSWFnSjk3ZVo0L0Y4Q2xtb3drM1o3TXNDU09FV3FuVFZscTJ5Q2IvMkROWGoyMFg5d0tmYUdwYmRuamF5VEJSWC9wc1J5RmpJdndoeWlycFJKdlNJV25DTzZYcTZEUFBsVVJQbW9SbW1tOWl2eVdDQkh2U2JlWWcvNFczNGN3Ylkwak5EUHpOWXVRZDVYYmVFYnZmUU5hMTVwb0Ezb01Yd3RXUUZmMmEwV29YdnNmR0lrZ2xIcU44NEZqd0NWM2xXa3dhUERpVGhTbTh3S0tWRHR3eDVndzh3QzNob2lmNTVtT1dhU1AyMWw2aUdwZ2IzUGhVUkIxaTR3Y1RlNmxGS09XVHJoRUVmREVVTU9abTE5YzJDanBJYS9nUlkvWVJJUm5HdGFDMmNDMXBMQnFOc1lYakVOQ1lydG5mNHZIY2ltaEhjRXhLN1Noa2RUdUJrc3pMU1hCckUrcFFDVHFxcFQwR0gycGdXZ1drNVRFK2cvbE1WWHpUMHRYNW41WU9Sa3FlMGVqMjlVNy9BZUZhRGs0Mjg0ZE9VRUNHd3JZd0tVczAxenlmRWtyNmdlN2g5ZjZWT0lvQW9mNjRlci9QNGQ3TTNnTDVFSFFEVEVRMzl3L0NaWHFvdUpvUkRlbGJXczVpbEF4c2MzWDdmUnRsaURiQ0gwdkVsdFh4NXplaWVwa3JvOVVNczhyMW40WmhwL0c1UldmUWFoYm9GNDZ5ancxeGg0ZG1RWTYva1dlT1o1bnRKaHZBL2wrRWgyNVorSzVHQVJ5SDlRSTVMYWl5cUwrbVViVFZRaW5XNVQ2NjhjRFBOTVlKbUVCMUNmUzlGY3AwYlJUbkVkQ3VUNUVUbnZHVkRMam9XTGdZZDhwWnBtQTNCWCtTa1hTd3dCc1ZLZFhRalpjU3ZEQ2lSL0VyZWlya3EzREFvME5LdzZRZ3ovVU51T29RUDdkM05EZk1VQjlTNWFHUWoxRFhDdEpnVzFuZ3NZbXY3L2V3N2FNdC8yVG1UQXZwME5ZTENXNVNMeVZkVmhBbm12VnBHMEh0S09lYXlOVmtIMzY4OU9KanNRS09CN0FBeU52Tm9CZ2JTaGlkaUZ0b3NwM0dNZXk0QWRjeDBYUDZyY1RBcXB5d2xpVzNmNmMzdmZxeGRmdXdTUG5ic05oTDloalp0emwzRldmYUxJMm03b2dlclRHazhlKzU2ODFLcUJHcDlPSURNZTJFS0w4Z1NUR3dtV2JCZjlnekNCNzJvWnBtelB4Nlc2dTBETnFLa1VjZjVtcExsVXliS3RKZHVMSXNKSzN2b3NYM01uTEYxMEI4UFl5V2ozZ2JGZVM3VEw2enJOZSsvTHZYdjdBa2hUWFdlSkN0Sm1hUHV0MGhLeEtCckdXTE5KYjVXcXRTd2pVZ3J5VngyNTFUSU9OOUJmb05pamZ2THBmWnkyeDZzelJYY1oxZlQ5S0JhZCtmNnhlTTNoU0dBRGVBT1dVMHVhM2ZROGQxZk1GREo5V3g5d3hYN1NYRmRPNTREbHpiY1dEWDBDdlhPZjI5eGQ0d3c0Z2V2WUF2RXBVQzVMcTU0azQveXltUzFWYjFLa1RXN2NXZTJkWkZ0Z1lLUFQvSFNqbVJTL0JHVFZrdGp6bGE3V1A0OXU4MGE1MG5nTkduUFc0TFphZU1OVk84a0t0dGI3OEhscWk2RWU4Q05aMVBkZ0tBM0pYKzZOMDBheVVPVkF3ZWpaZ0NnUWRKaXNHZ0FKcG5LL1pWRWtWV2hVNEdxUThvYlhhK2hGZlFPZCsrRVhUbmt5bnNRVURtVzF0TkFyVUdvZE1GWGwwNWlqRkVmaHdiUFhjcThWdllLUm5GYksycDFob1V2SkxPYTFERnJnN1VGY2pTOWh2SWdkaVNyTlVnak9QbG9yZGhCRXQ5NWgxZW00SFRwcHBCM0pobVpDME5yLzRvZHE3cWwxQnByMEhZdmFPZGdYZE9FaHkzZGtoUFpLMVhjNjB6RDFqQmhlN1kvODYvTE8xb0toemw5S2FMczd2eW5taWVwZkxIYjVDdXJ1VEthS2ZreS9aOTF5UTNwMk5nM2NTeVRrZU5WUHJQbnRZME1hZWdKcnk5RXZPZXIwcUpLYXRtQUNnOHVpWjVXUjRnWmtOQkUyeGtyR08xNm5LN0hjYXRQeUhnRFZDaTFPc2hBOFdCNGE3SkppcEs5SFhKeVlJcHkxcTBObE1MNC9BcGdFUkJCeDVWYkVPVGpMQ2VVT21lQ1dPT2s5djJFU2YrVWtxTTczQnMzQWljdHFyZHd5U2dVV3EzdXFwYlRmZ2JpRU9BMjRSd1pROWFOWXFORlk4Zmh0V2o0TDhjNWlzUUEvU3REbW02dll1QzNXVzZxTCtLREhhVjVyZ2F1M3hWUGE1ZWlZOW5GbllTOWlHUGsweXI3VFdDZUFpQ0l5VUowZU5jVzNEdnhoV0FyK2xYUTM2cFBDYVg0Sm5aM1NDbTJ6SEprMW5mTm5ibEdYWE9MMmM1b2xLYWJvb0hUM2JqM2djNmpjbzZDTWNYdEFJU2w0VzlIWHdPbzIycXV3WmN1eGVKYzhDYXNNQmczc0wycXB5bnN2RHpHMU9GY2ZsQkdiOFJVNGlxSmJERStaT0RpZHA1NUgwT09vRnlCT2lGQjB4OTgraCtBYzV3TFM4UjJYN3MybHNlUmgzeGgrMVRUUDJWOE9uWHlqcHkwOFJFaUt6ZWo5VThWdkp3SU9jQlk1RURMRjVLWldQazkvbFBHYVlBWG1vMFh6aFZQOXR2R1pxNEgrdjBkeGNlVytkZjJINlVBNWF2VGs4VitGRWwwekpoeDRDV1BRSzVJaUFGR1I1Mld1VEp2eHlpTUZKekRPWXJBMmNCd1dVTXVBUktpUWU0N1hBdEIyMjAyMzB5ODBSazdlMEREaE5IbWxXcWlaemhPMUkyVWVUODFVeEpkM0d0SHJNa1dyeWVFSGMwK1AyZlIzWDAvVkpuejlXNCtUWHVQMi9TUmZzOWRQOXV2bDlWbVlmdCtrTC9aNjUwK2ZybGZWWUFNYW9kbEVuaVcvNHFBbkxTSHRoVmg5alZQQ1htRVFGaUZNTVpxZjRDNTZmZS80WkJESzQ1VFdmdzVMVTN2UjVJaHJQQ0w4RGNGeWZlWnVNcEhVc2FRMkFoaXRVbVllNVYvNXJ5c0NvYXdDOEU2ZURZMFl0RmhqT1pWUUE5MFA0TGRuZWJWeFlwZmIxN2NkUkVuN3pnays0cTJUQnJlb2hhVWY0R0RYQnRZeEpzaURCdEJ1cVF3Q1o4TSt1RVl1SGJzUXQ5eFdYdWlwNGNIVFkvQVVNMFlrZlhyNGlwbG5pSUpNSnp3d1lrSDBXVTk4RFlhOThSaUtxNjdoMUpnVUlaUWpRRU13UUZpbTIxS1VzSG91anRlQXYzODdaZzhVT1NDekt4MHI2RDhOcXdveFVXblFubGFNYTNUMk5pQXl4R3JRaTJ0d1pJbnFTaGhWb3NFZXdSaW8reHlwV2EvM0NzL0FiVmg5LysveWc3Rm9nYlhFMmJrNjFKZnAzOVVjbzFiMXRWdWUvN0JnR2V5ZVdnaFlsWGdKS0pOMXMwTDRCRzd4WE9FcSs5eGdjSy9wMlB3ZXFoSTBub3JKZGhRVHU0Q1VibEErZkgwSlRWU2dpdUZ5UXVEZGRDUkxEZ0J1V0lxaXQ0b2NRN3RxNWxnQXVySnQyMlI3UE9WRDNDZ1FuQS9kYW1DVHpGd1hkR0RvakVmOFp5dFhNblBLQTZlV3RKck5VRVg2bzlEam5VNzVNS2grb0J3WkxOQUlEQ1pGQ20vaGJqZ0gya05LRlV2TGIrWE9pbWVZTzRRcVNiVzNZdVBxb0ZiamJ3cGNqMjBzWGNmcTA1Nkx6a3lHUGVnVDNTbDhCSDhkR1IybXFkWldpSmFPaCtqUkI1MjhpSWl0VEpkTlhjRktjcFo0ZHpKV2NrcWpOV1pNWXlRYmcrL3lJVi9uc29wWEgxbE9RQ3ArNVo4N2o3RjEzM0E0YVZHK2kvWWVlMEp3UGVXbVVhbUx0SWdKa0liVEpvTFhoaVBOb1VRWnVMT2VqRXB6eTZTZWdwWWc5eThGZ0huaCt2L2JKVm8xamUvM2Z4UXdEbVRMSGJIdlNpa1BZUGZTQnpxVkU3b2M0c3BqRExleTZya1Y4b2FCbHhETk1EOE9mRkg5bktWc2l0YXJOSzQrczlBNVRGaW9Zdmdxd2NTeUxrbjF0SUlTT0srTXZaaFN0M09UTnF2YkpFck5aM3N1YVp6Q0JmMkpTR0JtdTV0L0psdUovNm56UFJqRnY4aUlTcEI1Z2pWRnRwa0RQa2VGMUkzT0J3K1RjbjZQR21BVHJTcXBNN1JGZzBYOUNGajlBcjhkTzNxMVlOZDAyblJBRlR1TThUclNiOXJzNlRUd09nL21ITU15cVQydVkzMmtUeXFhMU4xK0dmbjRxYXBQYlFJZ012WTVXWkh0YndzOHlac0t4eUtRL2JiYjJncDVlUGxpNWVJTGU4RHNQUXNBdWlZQTgyVU1iekt0TVZZZTk4cU9hL3lObUdTcFRWYXVNbTAyM1IxR3p1eU1YNURlcjZnQzFDcTJLWWRGcko2Z24vUnRDT0N3Rmt3N0FQcmxpV202VDRBWVZ4TUpycXNndVRqYjFKanZtb3Qxdm5NL0YzZ2tFOXo3TEVXMkkyZy81R3gyd29JWFp0dVoyT2FsOU04dVI2OVJTZVNBaENIMEFhNjRhWWVwNlhSV0czdUtFTGt6bSsyTmY0NUxoOUoyempScVZqNXFjZk9NcXl2bFlTVzByMk8rbkhNSTQza1RWVmd5RVFWRHIrWUc1MFhDTERVc2cxV0p5Slo4S2wvY1c5bzM2aTVYYWZwdDF6bWw5VU91UzZxQzZzL2hFQkdPY2dkU21pTE9oNUJIYjFjYS9RUFpnNElITS9Mcy9CZ0NMUTlQL1gveEU1SmQ1a3M0K1FoUDlGdFF4UThCT09oL1VJTDNpd2RucXFXVDZoNUI0dTkrR2tWUnpUYlNCYmpRRVhhRFBUb1pRRS9oM042UHo2ZVp5NzRIaXpRWWt4M1NsZEE1NmJ2bkVyWHNkRk1GWnZNQlc5ZUFnM3pSbnBaTnRFang2cll5dTNYeC81UG56VzVaZzdJd2VtMzV0a2UrZ0pwRG1HQW40Yjl4QS9Jd1ZFUlBYaFJSUmRNVUxHdW96YXhoczlsaWVudGRhWmpDaWphaFlWb21rMGZJNEIrVHNZdFdQdGhIeFJvaWE1ejJsNXN4MnRNRGVCbGl5NWF1Q2VlbTFySC9qWGdxSE9LNzIrVzlrUVYwdjd5b21WYVIrbHBFVGs3VWtaRjQwd3kxcEJaYkVvUnNUd3ZqellvQkh2TFExZnpDeG1HWjJ4R0p1Wm1VVHpCZWFUSVJ6TUhNdlBVVkhvMGJwVG1mMUZKclNuUTQ5QVdFY1R3U2oxTG4xckNHcHF0SEw2REpha3RseC93ZGUrTlFtbFc1Wkwvb1FObjk3cXhLT0ZERGRWYWJZbDFXTjJtR2JNWWhJb1dUMHZ0K3c0YzFnZmlZeDhhVFJSNTFQUDc4aUQvckpicTNuVVdzVHJBNjdESy85RG5rZzl0OFhMOVNyTzJSU2h0R0F3WkxRTS85Sm1EMDVCeWoxT1lBM0tSV2F1QXRpMWxDZmVXSDRHQk1DakxIOURJVDFIZlF6aDhBdGdVMEZjanhRb1ptNHdTR1plU0hudlIwM05SOFZYS3B2WUdpS3JzV0gybXhoL2pqcGpJUmdicC9BSHp3V0Uyc2x4ajBMckZuL0ZYbyt2KzVEZE52aDA5YzA4eC9LZFNIbVZwVlY4L0M1Zk1lczE2aS9oZXl6Rk5za0s5VDVnRXkya0Mvc1FBby95QzZnSkd3eFFObU9oVzZiYzZiVFpJaWl1UGR6bHZVK1Nnb3BEZFJ6RDBLT0lob3JNbkhoeHY4UFZSNG1LWCtWNlY4aXRSQmx6b3Z6WW0rcDJhSWZ3VG9pUmMwenZWZjFPWC83bFUzaXRsZTV2eE1GajRTMlM1ZHg0OW1pbW0veXN6cWozWUN4WUllL1NGRkMzdFNXdHBKVTUxV0hPdEhYa3RSSjBQdklwL1Z0SUVhbkd0b3RvcTh2U2lzbzJkQjFKajF4ZEk3RElCRVNGNlQ0SjIrR0FMZENUMlhIc0hVb2kvek1MZ2tFczd1RE8xeDlRMzk0ZlJPV3lGeXJXY3dwWWlQSHlvbTFET2czZ2tBWXhJM1lYTmlhSFVhUzF4VjFhaEZuUkl4U1NnUjAraGxSMWcrL0ZMUGE2cWZvS3lyVVE2MG1Ob1A1Uy9xbldJeXR3Y2gwZUY0blV5SFkwNG9VRldyaXlaN0J4SVFGcm1XMUt2eWM2d1NZekh0Z3hQN054cW5ab09Ddnhwby8xVGk5bE9BWHgvYTI2cUc1OXVhUEdsVnZWalgyRHRqTTRVZmJyRTFWRzBzWVJwYVFnVythRzZkMnJCMWw2emNocmUwaHliYm1yUDBmMlhCK1FmUlVRZHkwTUhVSlpjYTMxTGN0VFcxdXp6Q1p6WWRxYmVJWU9IOTFpbGFlNDVadGh6VEhuMmtORG1neThWNmtRaDB0KzFHdng0UzNYSlp6UDhCbG93cjFGY0FnL25oblFWb1Z1YjJpTDNuVzF0T3YwRG02THBnamFzd245TUgza0kza09mWlNicHhmZmVJbURLdHYwaFVmL0tvcmJsbkZoYkpkbDRXTnBoRWt4b3Jlcm9YK0ZpYSthU01hTFpsWHFjcU5PSkpGK29ydnFrZVIvbG51Sk05T2NmRnB5cDNHMTJiMlJ3THN5dEFTVllWb3kySGlSc0MrZFJLQU42YkttOVJxd1cydzB1bG1SZjNhWnlaZWhBbndqdk5kbXNqdHVJYXhHN1VzVUI0UWJEUUFZM0pyMEhHbWRKQmxwMVZxWkcvQmplQjlVREZsaGRMRkNMODBjZG5adzdHNEQvZWgyV2haaFlsb1ltQ2d0NmpBemc0d0NRc0FzZ2E2OEtHeXR5dEdmMnNBOVAxVnFRYWxsZEtmOHpvVVhqR1BCaGtwK3hobWEwRDdjK1VYeVZhSGl3RlpUVk5DbkcvbkZiZ2grVEJjYldFN1pqRHNUaDVpM3AwMmxIOXZWTmw3YkJsZllXM09qbE0vRG9iUnBSb1lncGYwZW9TUWFIZFo4NjN3N29RNEF1d1RBUzdXK0tNeFRVUGdvbEpyVk8rcjR5bjMwTEd6bkhXZ2k3S2xrOFU1aStWU2I3ZjNJbXlCZERXdVVOM2xMTkdQNVJaRWdQOGdQaWRZNS9GOEtXRTNHdXBDMGhmcnU2akdwYWUvUnpWVEdnTVo0a3pldmpjaTBLTFNXcFMrUGN2OHZhaU8rVFNaVlI2MU5ralkzellxRFZGemdhN0pXSXVOYytuQjFlNDNlTmxPZHBaY2pHRk5aQnF2dWl3YjB4d0YwQUQ3TzZjd2xqdzZXUCtCYlFaY0QzajJvQ09sMUVNUWxwTGFHL0wxOEkyd1dPYVJtNEFheHlGUnBDQm84T3R1WXBWYTJOM1ZPMnhFa3dyR3ZlUGxmSzVTNDNtbzNMdmtBc0haQ0ViWHptQk1KdzJJSWc3QXNSb2dacHJIUkhtUGc0ZklMY1F3MjRNVm5sem81SXh4b3pQUEZyQUpWbHhmK3Rvdk5oOElMTW1SWHNteGx6cWNYblY0c2FnUFRJTmQxNXZhYUR5OFp6R0dqUUtlbmJ3ekdjUzVySCsvL2M0TVc2M2x1VFZsTWQzZktucFp5SG43M3N4TGlPQVdQYzJWdmRjSHF4SldlR0JwZ0xFSnU0TS9kVURzMEwxTERDYlVsT0E5SWt5d2R6akp5WmU2OFhTN0dsWGZRK3pVODYxQTdrcHFoMjYvWWhHSlF5RWt6ZFZJSHFnWng1WjNPcDR5NHRxZmxFbFlRUVlQM0hCaGZJTTZISDJkc2pQYzMwSGdFZGdCN3ZRM3NvNjlweFFjSWlwYVBRRFVtOUdyeGVNSjg1MFl3QnFvaSsxU1dhYzZ6VVF0NkZFU1JYN2JaUUQzNWswckFTN09SWVdaQ3I0RXUzTEZUV0QrRGNYVmlOZ0lXb1ZTTlpHOWhLQ3JLRDh1bUZSMkNpaDViRkJGUjVsSXJETDgzVWV6RW1OMisvZE9SdzBkNTVoL0EwdUJ5NGV2cUdGcGcrbE8vclhhc3EwRUdJSlBjY3NKMndWN05FNk1WdWcrQU1HditDV04zVFlSUm11emFjdkw5WkVqMGhSYktsTzlpSCtweXhlWEduVkpuZExxUzlHN3JNaGRPWi8vUEt2dGlOMUZNYnVRcGkzaTBqTUV0eTZTQ3M4Mkt5NCt6aWVoVUtpdHZNSGVEVkxYdUs0NFJmQnRrQk9TSHpYbEZKdmpLZHRwWHZqSk1yTkZiQkszN01pT3J4ZFluOEVJYlBSMitPaFhVTTFLQTlUYzlNNitud01lYnBQMCt6YmpyOGpBYVBmVVZVdW1PYzVRb1AyNEI4ZFBIUmlGbTFmRy9zekNHclNycU0vWjJ2NUtJOGVFTWNlRmpySkZhaGJNdmZvc05pSEE4SDZrYkVwMkxZL045c04zYm9hU0hRa1lvT3doUnU3R0NtejBMSkRXNVh1U2tNOTJJdEhlRjRDRmFzQlE4d0hwdEt5bEEzOFU4a3Vjc0ROQytQVHNhN2tKdXprQlR4U1FBK0ErOUNjVkpaWFNhOCtYVndsRjNnZ2YrejMybnpBdlRhdWxuTU5LQTM2TkNIdkRVd2tsOURsQi8wV2luY21wc1RyVExodnY0TExPWWZDamlMc3YxSUhZOTZMR0pGdEFhMXREWnIvbnFMcUhFWERkVDdkWlIwZnJWK2NFQVRGbGw5ck9INmp2VWZRN2VwQ29mcHdibFQ3M25HT3A5ZnRONlBEQzViU0dsSUVQc3IvWlBDRkpEWVRzMDYzOW0xSmdwV3EvVGZCMnlTdkhMdEtRc0lsUFZGQklQTC9vdWNIRWY3VHVnczg1Z1JGTi9LWnVwOEFSZzdaVmNGOE10c2dzbC9pRU9pa2ZJVnl6azhSTWkza3FZeFp2T3h1VFBtWEp5Rzl4TjAyY1RSZ3JFTkNIWXdIa1Rxcm56aUhRT1NxNC9yc2xQNFN3MW0zVVpndkhjdEJtUzBKU3poUnByRDJBdU9KYUVHNmkvbDZ0alZjK0RlcGViU1krckI0NC9PdHFzL3kzMTFYOHZuQTNzenkvNmhOVEpIK1J2d3dGRzNEUzBmRit2eWRJOVFINGlrOCtVVW9KUXQwYi9ZREUvZkoyemxRekg5aWIrdW9GbkN1VFR4Yko4RDZmQ2gzN0xORW5QSHFVVGVBSDk1THY5YWJKWDNEQTlhK0IySkRJUE1KZTJnL3B0VkhYclBjN0FrWVRZajBvdVZ6SkZPUjJlODRSVlpoMVExb0VQbStnNFk0d1VPMWV4RDRYRlhpNWo2WndOdWF0ZEFxTDZzcUZmK09pQ3NJeERnSThCeWRjeStPK0I0S202aldaYWphbmloZjNtajJ4UVk3K2ljbndGa1JWZW02QTRUbmpBbmxzczRzMGExSjRRZVYweFRCaGo1RlZCM20xOUlDdzFtSm11YjRNUEVDVkpHRTIySzFMRmZWcEFzeXExQWpMMHZ0MXFLb2JrSXlMNUx5RFZLYm1VKzl3MVRXYWJOcTh1V0xlblhVaiszYnBTcXF6a1VYOW01dk55ZWJQZHMvRXpraHdjSmNQREhrdnMyTjFGck84VUorckJmZDlldndPRGVPZFM0SElDT1ZSYU9GazdnYUVrdWk5V1JEL1dYbXZJRlBNcUIzdys0VUYrSjZBckJRUmZXMW1ZQU54c3I4SGN2a3k1WGpFTVkxZHN3MjBTclBDODVmOXE3cUhCUHA5U3p1em94RmZlaVpHVmFWOVVONG0zcm8ycU9TVDJxeHdZdlQ5M2hOUk1WMCs3YUVpejVzRXZDQnl4ZURoR1FNYkNrZVN1VTBGZ1RDZnY0Yi9US1EvQ3pya3d5VkIveHhGT2p0Y09IU1lLQXpRYVR4K1ltRDN4ek0xYWFZMzl1dWtqTHA3M25teCtOSFBjeW04MU1tL09VWlVjNEVGa1I5NVFwM290b2M2VkZleHZzcWdlQzB5V05sS1dsU3RRUDJsdHN6M3l5THdabXVNazEwMlNQcWxjTFhBWTJObXJXT1ZEL3paTEhQU3hkQXpVTmdmWmNZVmpBdlRuWElkRVNyYWdxeDdDNGRPamxhNldBOU9Tbk16V1Z1blBPZ2trbXBHeFFJRzA1NnVieFo5akVpQk0rWFhsOVpuZmQ3Vms0cDA0QWxWZXhsVEFwa3AwelRxTURlaTR3TFU1cHo0eFIvRnlwclgxNGxEUGNCSDlsMG0yYUdPMDJlR1ZzOUZFLzhneVgwdFFvcC8xbDNQZjltWGlKRWJON1NDQmFGTEVDVStiZTZ5RS9VdGY1OEl2TWowY3hjWUs4Y242Q012VWtDeHJxMHMvSDJDVjJsOEIwMlFYMWVqcWhtV0NlS3pvN1hkL0QyMVV0Tk9IMjA4UHk3T1ZuOXNKT01aeTFPa2JqeE5lMER0OXdqaDhMVzNjdzR1TllWRi96ZkMzcG14MDdMaWIvaW5pd2lHdEd6MEJDd0dRb1RXcmM0NXdJcnFva2hiNFJXaDNTcHQ5aHpDUVd4WHk1MGQyTWxXU3UrMHUwbWtDeCt6ZXZML1pOaTZ6SGVWdTVKRHQ2Q0RHaUtOa2dCcDN3empTYkJ1a21sazgwb3IzbXNmMlBNZlF1MzhtTU9mdGlwY1hqb3B3Wlp5UVl4RVMrL2pCaTN1R0lpQzdId3B1bWVmZW9Eb2dic0xTbXNSYkg0ckxZYWl3VkJvczVUNUxuSUNpK3prdkFXeWg0UEVKTnM3RG02UXlqWDNXOEtYNUVNajFNNVlqbjRrSzl3Nmk5Y0phOEpGQ3BuL1doM0gxQ2U1RDlhdXhEaVF6eXlxa1UzNHhhZXRxMThSNEp4TWJ2UEFpQ09jS0wxNktlSzBvUTd6ak1VaWRZWDFqU2srWEg1SVFFMFNoRzdoZ0wwS0pYSmlyQ0pNbVJtZE95MDJwaUQvUkY4aWlhRkcwcW91b0RJQkRCcSttSWxTV3hSaHFBZjNHcUQweS9jU3lGMys0ZDd6UzFlT3poRkg0SGpIY3VmNzVrUGtCYURXNWZUWUpvMjVkZ1N3NWI1RU9UQkZ3eURYS3kwMnlPS1U0U1BWSVoyOFk4YmFZeWFBOENHeFlTT3AzMUNRZGJTUVAyQldaSkZ0akRkZWcyKzRVSzNUaFRnVXJqYmN2SVRyZjdlSVQ3RDFjNnpuVDFuK3l5dHl6L3JPcVdhcndQOXpvL3lOVTRlQ0NLZWMxMmNGZlVYNlRvZDJaREU5WDBodzVPcDZoTHArTkR1SktQbGVxVlR3N09ML1ovT0N4Y2QvRmxFUDk0TXk2cHY4elNaWnBhQ242OHk0cEU4WlY3UWVhVyt4YWMweU4vOTJOOXFmajNOTzJDYVE0K3Z4V1hhM0E5WjBqRVpTdjRKOWh5Z3VhYkpUdDRaTmticjVDank5aXpRckkvNUhpN3ZDbzMzVjVJNVlPSW5jTXZCWkZVZXZkV1hkVnZTaXYvOWJOa0hjWjR2UUlaWWloNkY1TktTY3RUV1hBSm1ZaGs3QUR4c21Uc2UyQjhwZkxMQ1A1clVqa2h2TmJZWFJkWlRlV3B6K3plQnl3SGR2TElzVFRJekc1bEhNcDkxN3lwTWFnSnA2UVlpMTNrbEg0emN6aHdRdmRHK1NtNmQ5RXJQd1lvK3IyV2pyMGdkNW9lc0U0VVRFYTN4SVFvemJqVFptaHljQ1JiVDBCNE5Ga2ZGZ3F2V3BucW13dUZ1QXArNXI5eWl4NzBzSFllN1JvZHlHSlU0V0R3TnBEeHJaZy85dm1sNU1uY1kvaDhBZG52OWdwamt3bWRwbkhFRU1OejFqc01SQ2tlS0RPZmtBSDdZRkpveElzajJ3UVZoU0QwY1RKWkVMaytIWGtyL1VodXdGUCtoSHZJQzJtci9Eam5hR1BYOWNVNEdsZExTQ21sdldORXpVZnFMd2lHWHFUU0MraTdYbVg2ckMyM0ZvQnllRGJjRkpzY0llN1BmVFdPQk05ZnQ5SVgyY3hmWDM4UWgxNnJJYjMzNVZlUDdhK2xKNE5UamV4cHNUdmJrVlIvdGF5aFVyekFIc3NnQ3c1cHF6Smg4WFN2dmVGUlNqV1d3QjlVQlRYZjdtaDViTkgwTEI1TlBydlZFdmc1L3J5UkxXVzhzeTRSa0JXZnR0TnhReWxzR3N4SnZzOGxPNEUwQWJZeVIwSVRidm0wODJvRjdaQmxROTNIUlZPZFRMUzRzck50Y3U4V0JySFQ4TWxhakdWRzRsaHNaK3BnbU9mWnhuNTZTQ0hjR1haOVZwd0M2Vzh5bi9HenBhY2MxdUl0NUFCWjJWclRhS0dsUWpJYWgxRGZkWFQxMmg4eUc5Y1p5OXU0MkU2TEtLTWVvWVZsd1NPL01jVkZRVkREM1JuYlFJMHBWT2l4L2Fjbld2dWVOOE9ScGI5VS85eEpoVDhmdDVqNXFyVHA4VG5nalNHZEt4aGEyU3FOK3hHZzcwdXgyTEQyNEFRMUZlck9taHRlNnU0WHk1czBYQ3gvRHoybTN1V25VL3pRWmJkR3RwS2xETnpKZ2NZODNGUWpFck1PRzN0SVFOYTJuWFJnNldZQ0NNMjA4UE5hVnh2VFhPOS9nckVJd3FNZFNSZWRZVUpzK2t5YzVhM3d0a2s5VTJwSk4vSlUvSkI5MDMzYi9qT050T3NwVVRzaVJrOXZIVjB1bVdRVzVXVUtjS0VweU5FSy9BWDhrdlpoL2JkRzh3eEphM29NRytOV2dneENEWC94TURmcHl6ekNTbUFmNkR0Ym93MjNUcFQyQS9WbG1pRVBuM0RWZmt5OFA1WlIvbldpKzdmYW4wVlRiM0RXdCtvWWdtYkFFbnpWOGVRYnduQ1VlZk5sZ24zN3dnUnkwNUZhV3FONlcwV05BMGk1d05ZdFJ4SVIvcnlOQlVaYWFhVk1hbzBmZnUyS1J3ZUxkRHdwbVJqWGVqN0lHb00vU3JQLzAyaHZuRG0zNzBNYlBCcnFBTGFoNHZBcFZCak5lN3RqYTNlWmlqeUZMUnZYeHBtcEhMM1ZOMzFUcFowa25tSy9KS1Qwc09QZEJPLzBUU1NCWHYvRG9KUlJaQ3RteHhDUk9pYzhWdlM1c3V4V3JFc2hmdEtxQ3pCSGhCZ3Z2T1Z3VWJWakt1SUR6UFozSFVHU0psaG5UbHlJSnE4WWZvTjF4ZGtrMzloaEYzcExHT2JIekh5b2FhRFpWQjdmbVpGWFFZemlHNTdFLzF3aEU5MkdKeHNCWUY1eU9mQTZXOE5ERHBHU0xmNC9IRisyN2VYcmpNMWhXd05iNllONVN6VkxBSWJFamFoNm80Yko0eW9OcXlFd3NOeml2MDgyUXJwMUkxWjFrc3lGaFhia1Q1bzYrUVNSd2xjRHRnbWxhY1JzaHhTREs5OEZvazEvbGhGbWtoaEliT29Rdk5tWFdjRVFvNzQrL2JieTFLOGp1TEFmY0JYM25yWVVCWDJ6VzA1bkRZcldTSnZCVDlkUi9vSHVBUmJqbEN5R2x3aHBPTzAxWDltczlFRGJCbUtvYStBMEN4SWhMRTAvOFBaRlBkN3NUb1kweTVwem5PSDhzUklIbTYxdU1ER0N2VDljT1F0VTBnUDAwcy91eno4QWN5eXpnOHFvSkFmcnplZGJnOVh2bzljQW5lMnFNaDFsVU5GeUNtUmNkQW1ndEF3TzhIdkFnWmZQR2pvU1IyTHB2a2MvMlVQYzh4MTRxNVdlQnI2aFRDTFhwaTdaSEZVc1NNWkM3alJ5OFdjSDQwUDFWWlNkR3RrTHdUOWtGelFyVi83WjRUZ3BQcTEyVGZqdFZEZWQ1TXo3TDhIQktwSGQ2NnFkZnRRd3hIbUMzSFJ6SUZpUjN3U3JqVXQ3ZkU3MTlHRklldHV4WXhmZFVmODhIQldvYVpVRVpLakE0M1ZQakRpTkVGM09CTTFsSVQzR21Sa0lXRHJWQ3VvM0x4Wk1FYjY1ZWtHR0N6YzdZRktpTVIrRjE5SUVSenpBRzI5THFpYWZXc2x4TzhaUGtYWjVxWXZqL0krNCtNQnFma3RhSWYrRVczUDZhNEI1NTNSVlNKM29Gbmd0eE9UNEo2Z0pIUWh3QWJRYld0QThnR1BiTUtObW5laEtwUCt1RkMvdERHTGpxRE12UGZOZHg4TDBhaGNFYTVoWmt5eGhSSldTRVNTNWRxZW4zdGRVeFNZUnNPRVY0WlZOc2VoRlIwbzVBTkx0RHM3SnpRc3RrL0dYazAwaXE4MWNsbFZ0YTI5MU9PVkRkSkRvUUQwNEZmTmdhcWhXMjQxTURUVGRFOG4zZjBhMjlHVENKSEV4eGtyclMzNzEzRlA4ZmtTaGI4UnZuT253d0tqSElPNXdObnMwUkQvNEJwQW9nNTU3YVBnUnc5bng3Tm9NK2lHdCs0MXNJRS9tRzNsL1pqZjF5V25aMGYzQ2ZuWElkZ2Z0UzJiNkcwS2t3MEJNQ2lMdElIUHkwVWFOTGtDZXVmYW14bmNXVXZCR2lvVk13bGFKdlVCVHdNc3hYaktXTFFjSnIrSGJEVm45WUxmY29HSnFhWVJBS1FLMHB6U2phYmkxSXN4ekcyQWtza25Vc0tvK2JPaFh5TFZuTWt1TjBqSXNpdDRFN2M0Nnp1WnJBVFM3QlFFOGg5d1hrNnY5ak81TUwwcFN6djYvMU1GUVFpQ1I5cTFxVU96OFo0UXRQQjR3MVhCOS9mRDZvellnNXhUU0RnNTYwMmk0V1NpYlNWenlHcnhZbjlNN1RlekVWM0xwcnplYllCQm5Lc2lHZ1J2OGpZUmMwVWRKU0pTNWRBOE43ajFoOTlDTXRZczF1aVFRNEkvME44OVV0SGk3Mjc5MGk1Tk9ML0dGM0JKbXlSdGc3cXQyVm1pTGpRMDNDZ2xaVW1UeHl1V2FvMmZZZ3RhM0NJM2FTajU4eFBwRFVWOGNta3lJNFZPWTUxQ3BmODdsaTFDYlhlT2RKZ2FEbFN0UGtXR3NIN2t6Y2dZL0pzNHZBV0doajRtYVgrQVdma3Jldk91MU12bnJ5a25OQXErd1R5VkNWRDhTSFNiTXh5a2g5UWtpdUNxY25sTlltS0F6YUYxcUR6bmxHR0tpbGswaVR1bjNuR2hhRUxhbVVEWGRDNW5kTmRSRy96U0dSQTZuY21Zd0JSZTErb0FyZ3ZtUWc5Umpxc2hvMFYwSnllRjZ5eFNQNkdhdDc4a3JFeTY5RHB1WFAvRzZKYVFXUnFyMDJXbjdKaThWbmcxRmtBNzZUNUNuam94REVFMFZIWWEzU0NROXRyUU1WdkV0UFNib0wwc1BwRjI2bmZaRVhLS0lmOHQ1NXFhdFZFTXNjTzRlT1RzNTQ1U012dFlRZENYN3hJK0l4UnlLTUtTa2FGTkFCQURNWEs4eXorUi9sT0owU3h0em13QmtUako0aS8yU0FLUjRLT3Z4aUpkUVRRNzR5ODh3ZFNhWDlaSk1zL3VuSnc2SHg5SlVKNzllNVZ2TS9EeS82Vkh0a2FKaXU5djVweUpCLzFMZ1VKbit1Y241WTVXN21wQ3RneFRXNzBGWWQ4NHdJSTREYUdOZXRiQ1dlOFF1dWFDcit4bXliek13bVBmaHVJL2hpb1RiQUNULzBkUktuSkhIMzJGVjUvellsNVpOd1o3bnlCTGp6dWQvcTlHVkUrbWtkdXovajhiWGdXdjlBL2tuTHZPaS9UQlRjUE9RYUEzNER0dkJhbDY5RXZrVmRaWGw3a2Jac2Rlbjd6YVQ4ZEM2UE9PWkdDamRnWkVhZWNoM2ZDeEFFU3RnSXpuS0tOTmlwOFZGYVFsdE00N0RIaC9PK2RPYVdrK21ZOGo1WGZvWFA5bkxldCtIVnNsRE90dGRhc001MVFEN2hldkRJTU5UWU1uaC83RjZrbGpEeW96d2dLajl3OFNvSVlyRkFVS2VnRE9EcXFndUllc1lIVWN0S2NKOXlyeEQrbFF1bWJHdER1OUZmSmQzenhydGJIaVJmUnNtdGZidytjcHg4aXZQM2JUekt0Q3o1NzJ6KzM5d09aMjJGaG5EcStQeWsyZEdWeHlnYm05WGxrbnZNeExGOUVmWW1SVDNIa29Zc055VWtPZHk1RlphUjF4d3BDZXkvODIwR2p5UENhRHBoV0pGM0FxVmF5czJzQXFUam1zKzBqbjFQdnZ6c2pmODQ4UTlVVnViclJTMkVocWpTdE9Id0FyczNKWHY1OUpwVGhlT0NlM2xQVytVWHlUdTdIS2UzRWdHakQ1bllwME14QW9zdEFlbjZtcXNRZGptWDJxbVJmdEJVWVpFTlFCS2dmeDlBNXlsQS8vQlhWTzRteWhxdnFzSVhtRmpteC9kUDQyL09pSkppTXUxUVhQWDg2UlA5MGtuaFhibHpkNExobUw3T1doNGRyN0NvTDJ2TlVrWUFEUjFrNGFlelcvYnJOdld2L0FFNmxsMG5mSGJ3ZVFLTnBLMXpzNmpURFg2VUlDcmVSRktRdkxRenNjZ3pQWThnLzRvcVY3akFLTituOUpsT3BhM0NtSFZYeFF4SVpucDNWK1poRERWWUtxM2tTNzNxTDBha3EyZ3V1UkFoWHJhTUgrd0ZaNVovRjNmamxuMEJSbFBxTmpjMEhSblpXbnptd1R2bmZJOTg0K3F2STFQd1RCYU45WlVoZlRpd0hjOEZQRU1uSmlkUTBaQnhSTEhzRTNGejVjZnRxeGhCRDBlN1pEZjdRVElBQjdRMzRmMnRxSUliNFZ1ZFpNZnJ0eVNMZ0ErUkdudG5DUE9zQ01zZTZHRWU3SG14TEZ1cit4V09vWEUvc212TTRaSFBqT2NlbDVHcnRRSFhDNE4waXJraEFNbDV6NjFwdFMyazJITEUveWE4ZTg2MFhFcUxFREhxb0RhRG9ZdzEvYkhSbmsvNklwL1ZVV21McWwwejFheW1LU1pVSWQvMG5tMTlYVW5PbkU3dDNqd0tScFF4UXpvZ0Q4elZLSkl5MXhRNERsdStUdTJRQjVzMitZZDRWaWs5dk5OQU54bHBMMDFLNGU4WUNvZHZCREpXWndpQ0lEY3FGNE15NHUwYzlmK0MwYXhwODZ4WmQva3NmeGxlallCWnltMXIrZkdKWllBbERkSVhJM0R0V3UzYnphTlpzNTNSajBCeHAwOFVIQnNsdlFveWgyS1VRdXFNbktrK1dqZGhpOGphd0FxZXVJQTdPQ3FFdFBOYWp1YmpqMU5SalUrSE5NZGQ2bzRyNHZZTEZHdFU2bG5pK3dEbzQvQ0dsVFhtRXJTbmxrMFVWWk9ocDNUczJnVGdZVEJuSk0veFZjV3hRckt3Syt5V3NtWU5FZjVIQSs1Q3NGWUV5MXhmZlN1UmpMeE1ld042V25kNDd1NkhGR1dLajRhZVZhVlQrSGhMOEh3b3Z3MXlNY0RkejVOelYzb0RWb3F1VkVrOU9HaWhWdFM3R2ZlbThkZDVxRmhXYkdJZ0NzSmJoaW1MeC9GQ0ZYVWIrMm1jQnMxaG5NWWMwbmxWbWRtVFJZa292R3Q5Q3VKM0NXMzNTUmMxckliZFRRRjUzT0RKZGxwQU1KM3hKWWFJZUpqWW55clJQYUhpaGFiL2xxUjlHYllScVpCVUJlSGFnTEdWM1FXR1Q4TXdMY2hyZWJqODNrclgwUldlT0dEYnBIT0NnMmkwZjR5dVEvc25hYkhuci9FSk9DUGF6M0JMOEFxVnpVYVNGSGd0TU04VFVmcm1zZ2QydzA4aFFES3czeXlFMktsY2JqczkwR2V0b3lhTkJCak1ZR01XWTZQRUxWNTI5eUFkQmVqTEJjZ1RRTC9SZmdvSVh2QitZL3k2bER5Zy9oWWYrSFFEL1lzak5aS2twT3VEcFIvWUY3MHBYenNGU0lpQkg1QjdpdFZKOEMxT3hSUDhWNmh1NkZpNERPNGx6U2p5QUpRVFNzS1dPSkxoYzVib3c5a3FLRU5XM1BwQU96R2oxQytBanRLUmRTai95ZDNZdW5kT3FZOERPeWhkdGIyWFZQMUQ5U0R4dDNIa0pqRUZyRnJLeFIySU5melc2TjY0UkV5SEl6S2Jrd0RBSHJrUjhIeXRlV1NCS05odTRtbWdyeldYVE1JSWZ4TmZjREl1ajU2cmdnSE01V01aaUNobGc3WHU3RG53T3FUb3FMT3FiWm1FOGxwa0JNc3htNlA1eG9UeWhiRHp0eVR5N1pYT0RsbTRiQkhkUmhQYWZ4dVRLU3BycG9RS0FLMFFScjBvZ0lPdDdkZU13K0ppT2lheE1wbTk3MjVOdExQYzBsSzFKYkxPcmNCT1FBZEtrdUNMbGJlZDBOUXpPUE1ET1Bra1Jhb3FTYU1GUG5jSXBMa3hiQUQ3Ky9DR3J3KzNpTWM1T1MrcGlPUzZqam5ydVNkRHFxNTNXWVF2dE1ZUEh6NFg1QitFM1poVzl1N0hDdzMwb3NzZkhSekNYYkxKUzZJSzVCaXFMVjE0UkRVckdKVEsrVGV0azFrcDdCcWoybXdXNk5QUlJQL2V2cElRMFgwUUZaNzB6akU4VXVoclFNUmtSdllVRUdIZ1FlZ2VnYlFsRFNxUWxyR1Jqclk0cEJqRTFzZDBmSk1zczBBYkhFb1ovckNOU3Vldm9WMWFoU1RJcUdwS0d1YlMvM0N4RXVQTUhYelVBY2s2K2ZTUXVlZkUrdGh0OWpnQ2pxc0JTVmRlQ0pOMmdJVnEwOXZjOEthWitDSWVkMkx0WXMwN2d2TytVOFgvSlIwNU4rTUFvYk5tTHZBOStwcnZ6RVZtSmhUQTRhYW1rSGRYYTIzT3loQmVZeXFrc21ZK1NjUms3Q1hjVFg3bS9leXZZZlZrNHErVVVKT1gvZ1ppWEwrbittOW5jdzFPY21WVEVuUEhMTDUvOG9CeHlvd2Nod0NRdGE4dllwVk1YWkVtcGRiTmZSYUd4ckFjMGZwK0RyUGlNTVFhU0JTUGZJL1JDeFh2aXkzdE84MG9xOFBNbjVWMk1ob3ppTmhsdHZjZ1ZHb09qaGtXd05LczV1bXAyaUFhTjM2RUh0bVJIdVVPZUIxd24rekx5c0tEeDNEZTdYMHlINHdqaHJzRkFFSXAxZHY5TzJScnhDZHllSktpRGlhZDE3ZEsyMWFKdFJFRktVQktDSjFHQk02RjdWWHFIZ3hiTFJLR1RuRDlTWk1HRkI2OWxJVnJWdjdQT2lZd2NpRUk1WXQ3blNWMHBxTkFVR3RCYUdLb2JiYUtMYlJZWDQ1c3hHRlNRY2NIbDZibGV6MXFUSGhBaklyUjRiMjd2dTM0ZHRTcTZSRzNLL2xyRlJnOHhJMGM5d3c0Vk1uZjI0UVRoeFpDU2VkWkR4NzlXcXY4SnVLQ3lWNDlCb0Q5YU9pSktCWmFHTWdFQTFFUm16QlBOdUZsZGZjRkRKNitib0VaQ2JkWGhGNWxQWVZwOHltOThzZ1NleTBFbjRraXRZelZibXBndVVlRWo2VVd2U2ZkdDBLWXlyV0NucWcvVEI0aEV2LzluOElLRk9Ibm5CQnJLdEo2bUVnYWdDWWVpT0I4eGk1czI2VEl3YnU5dVRwQ1BmNXVqYTRKRllaUGdJODJUeTVkcWxiakZxR0FlSjd3VFVWbTRpTkF1ZWVzRFh3WCtiUlR1UmxSV2ZJY2grVGNhWEdkK1RtblJuZklQUEMxUzNhRVQyenVTUXlHY2Z5Q29PRlJCcVhJRHhBdnJxcVJUbWQ4MitTRFFBcWIzTGlISVEvdWVjV3BTTjczVWRGYkhkVjNqakQ2N2VXc2pjQW9xNzBIeDBsSmFFMFVRNitSQ3hTOHFQUkZReWszbWgrWUFEdG5tK3NBSW4ydnJ5SkZWenpYOEJyRVlLUHp5SElYSHlGZlcwUUdPUGJiVWJEMEFGYTIvSURTYlBvR2EzY3p4czdQeEN5STBWU3lwdFdQcTlFWXJwTmhxbWQxWXJtSVBFR1BXZnByd0hXSUFFRWtNVTljY1hhZkJ5SENRQjNDNkRrTVh6bTNJZFE0SVNrK3NLVzNLbktSV3E2UFNoY210UWxUTVh5TmRFQ0duTlNTWktYcXZwa1lKb2dQZDl3NVZVcVdsb0g5YXM2bG0xZDhBSlYwaWtacHlFK2ZFaTFsOUwrWjM3R0R3YkxMY0lGMnlvZ29aU2Y3Y2EyUTRSekdhTXlOZlQ2Sm5lSGNKcWFGVFpKeHMxdUludGVsSEwrOG1VY0hCZ0NUek5pWFZ4eDRWRWdvdC9mZmNwR25WdzVCWFpvc1RDOHFweDB3UEh2S0RVWnRGbU9OM294cEhHOUhTbTVXdWFudWxveExLVGVKTm9mZDdnM0hlb0VTZEZINWtDdWszWS9PYm1tYW5kdjZYUGFGeGUvSEJtUXdSbkZqL0gvbnU0SVJvRk91TjltMWQ0alVhcWVpWXpYdVgvZXlRWnl1Vm9yd0ptSUVzcitXN083VVdhcUJCYUd3dU81ZFRXQ2N6NEtzcDk4dEQ5NzVFbS9BOUdDNXRWYWl4UHBGTmNLMWVKdEk3RzVkby96U1A1TCt0aFRuN1ZTMjFxd2lSK3Ird2d4UzVnVWpnbi9jL0hXRURaQVI0Sm42ZXhDaHlySUxIcTBHVStiOTBZSHBUOFBmclMwMTJPMVJwU3JqTHNBVTN6Y0VWeFhwWTJNLzJwTmYrOUhWckZTMnNFdkxrNlIyMFJhR0VXMzE4REtLNmtIdlFzcjJwV1B4eXFhbUNxUkdTcVVJSlpRSUtxSFhtT3pNdHdLL3FicmliRjIrcTZWZzZOaGhGTDMrSmt6aDFITFhmWWlraW5qM0pwUURRWnVncGIyREl4OFRRYXlGZWxQT2VOcDhyajREUU5ISmxkUEhmQVhGRDRNeE0yOVlPT1F1L3hhRFR4ZnRnYXQwSkpCMUpDcmJXblBCeWhvcFVoTW5SYmRpU0orcVRSVGVsY3E2MEpaQTVaUFFybHdBcGZKbCtCbFdPNHZiR2xwSzRQOFRXVzV1TkFNVjVTM0c5K3gwWWNMNXpvNU9rNG1NYXpCWjFVc1U5bFkyMVZ3Q2dDQlNjOVk1SnEvV0gyZnZvTTJuNW5mTExmcHFIb3ZLL3dTWlAyaEpNdktuOXdhU0xVaHp5cVR4K3lUNmlMeDVGUFlmVlBLeFM0S3g3T090L2lxYW1vTGpHS3QzWGcxbDNrYVRqR0lCV0xlVHdFZzkzbDJiWFlmbUwyYlFNNnVPY0ViU29XUGZqMHpyZktwN2dHRzVWdXZ5MS93Q1U5WG04ME4vZmVMcTFIbmNTWGY3Y3N6UTlXanFUL1haKzNscllYYXg3TlVERnNlNHMwYk5rK0ROZWoxcUtDNVB4YURKYVdzdU1TR2crSnkzSCtsbjFCNC9SQXJyazROMzBmVnhKY1QrWDdISWd5QlZtTWdsaTlHOG0yN01nMnE5NFo2Wjh2TWxwMFEvcjBJVXAxRkNxVFA1M2dkOGx1SHUwZTduRWJqck1HR0Y3c3JYZUxNUmNlRjRqVGdJai9OSFZ4aGZocFM0V0NGZjFhZGc1WXZ2ZWttTXlwc0xPUld1UktXNU9VMVRYUWJjZVFvN1MxeGZZV2NLa2J3b1ZtZ3Z5L2dEN1JoUktDUEpZU29DVkpSZzVFTUl5ZXFDb0xhQzd2RStSNE1teHVXUSszaTB2MlBQaWJ5K0RMdld5aktJL3lZM25GRjFpVHBCVCtNazVvd1U1MVdBcERXZEl4MVN4T0twTTcyd1VhZWwyd1VHUExYZkQ5SWtLZGhvMDNwL1NVVllRY3FhamF6TUFpZWxEMVlTcGtOQWNheFN5ai92bU1PS2t2ZUxKQldEZUxDNFllNStYNUZRRVRLTzM3TWZuZ0d5em85ZE5aY2VaVElpOElmOHBrSjJ1SWxBTWdJYTVieGorT2JwL0RHcVB4b1doZzdKOERuSmI5M09oTjZsVm5xbHAvbEtiMEpqVWE1U2xIRmFQd0pqUXhLRTd6SXJZSWlqZ1loY0N5ZXJDRW1ORk16SmZQRnpDa3FWR1k3SkdzbzdnV1JlOTk5TGpDTFF0Wnhyd0F6SXVqOTNoTkJKeStKNDNrNW1rdnJ1MnVrL3Fpd1BMbm0zQWZBaXBpMUV4K25HQXFIS3JNWmYrWG9XenVSTjF6NzRSSFB1dDNnSDNFVkpnVGNUOE9OQUU3REZWcTd1eWN4dHl2Sk1Sc2RwWG5CcVQzYnlRZUpKSmQydTljM1BueThBekJOUWlCZGVsNlBXc0VMVWNGUElsS0k1ZmV5eHQ2VEdBUGZXVDBCZWZZMHA0cXdPZ0lzNkh2d1dyOUJqUFdDUnU4REtWcnNtNkp4MDhrQy9qY3pGcmhXQmVOWHMxVFNiVWxVU2J0WW5KSStmSzF3T0FtRW1IZEFOWVkxL2ZSM1dDSjh3cHFUdkdaMytuTUI3azB1bDlwODBnL1BwL1kyQ2VBNHk4OEhGeE54NmFNYlRRNmdQWmNrWUZSMWZlaVhhZGhMMFBUbzV5NG4vYmxGWlhPRW1OakZIdzlBV2JVaDdkc3c3WEJyNnlhbmg2Y1BGaVFUSnVCVTYxejlLV0FoVnpNYjhsYVlqRXA4eHgra2RTaVlTL2ZYc2E3N0l2ZWJRWTRPNW44UDl0cklyT3MxVzRXc2xoeGd3S0hLckJKNlM3V3pzb0VvRFhOVkR3azRWVW1GNkpXMjNxYjNyTnVpTVhqNVVITlJ4RWc0NFpjUElUTW45QmRhNTh5MnBoYWE1U2M4enBQd3M0WGtSZ0xRL2tRcDR6TnU2VmdITmtMTWpubjBEL1gvanVxZTlNMER5dUxXNVNLd2hBaGZkMWFFNnNUcDJydWJOT203akdsSC94dFFldnJrRDNqRWhiU01SS3FtMUxsNnVkbklJUHZoalFHRXpRRElFRVJiR210czhQWDV6SDcyN1dueVMyOStXYy8ydnloTGZBZVJrMzFLb2hEMTJHSU1XNmd4NnN3VHJ4TVZuMUNDaWI3WEVHdmpWUTRGRC9Eb1YzSlhFekNLeW83M2NLWEs3WlRJOHlXais5QmlFQitIL3dZekdUQmxNK2Z2ZDI3VTlpZ3l1ODZ1WmlNcWFwZTc2THNLZnhmb2F1aXFCU04xTXg1WlZ1WDMwYUZUTFhCRTN4T05sVk1GUFgrL0FlbWlKaUxkOUVrM1E5c3ZMUkQvV0pOMEJxOUJaMVFSTlM0aktyemQ0b0taaHJ2WTliM2IyajlFMmF2Q3pGUFRuU0tDN0pKeVFoc1hydEVSRWkrTjBmUkFNNUVDMUZMc2p0VmhyQzd1SGt3WWFjRGFXNWRPSTVwNzR5eTMxTm44L2Q5amFWVUY3OThVS1p3NGcreGVwazBMeGFPS2lMYXo1R21IRU1BQjVkb3JHQUdJMmdMS3REV0ZHbEVyUzdQTkVnMERTcldUT2JGSXYzdEd3aFVCQlg1cmZZd0tZa3pFWUtScGh1NXZSOVRzVXg0a1RmL3p4dEtzR2M2OEIvUUJha1dSZFlKN0FXckhjSU9nMVJ0WkYraGdtRE5wYnpPVzVHK2djZlRneFdEbGkxZWtzblVmV3R3OUh1TTFodm1ObGIxSGtrN3FncFFWdHVWcGxhYWNabDZmQm9nZDB6SHRNZW5vRSt6WDlQN2k0Q0hrdDBiT1VSSFZ0anI1T3ZEUDhSU1BEZlpEZkRvQzdXbUc1dWtqdy9RYURFaUJYZFJ3Vit1NkJQOWdnNUt0b0RDTThnbXhxeC8xb1J2YitmZ2I5d1liVTRKOGt4cWlZQlY3NmdMZ0RXYzFaaG9NQTNkOHdIZ0pTN3hWM3FuS3BTSHhRY3E3Yis0QlpsbUpHWUpRcXRUaVlHbnV0TjlrZUI2WXFoZEhSaFZBUzhiRXdUSE5OUDlCSUVxc1RpaUtJWGlSRDRYczgyV1I1SWN3WlR0czdGKzJPcmJLNW5HdUlOUENGTlZUSGFkK1V6dlJtR2xWN3VPNitCWHIwYlZkSDFLLzJNanN2Vnl5M09qMmtRTmxSNlRHVnd1RExXM3ZDOHAyMno3MmQ1MW1MYVBOcEJsQ0xEU3kxenhXT1RybURBelRCV3JFNHFkeGZoNUQvUXlRZlJKTUpmeTU0UVFrSmlwSUN5NmhEa0llUU1xODcyNXY3UWtvR2xIcGxwMTAxOTdzZmc0NkVVa0dCYzNsMTNIOTd2aURKSHRudUQ5QmlKUUp4dG9XZDRmT1ZoSVpnRkZJWDQ0TUt5d3VHNzVGMjNqU0x4N3VkVVh3QWE4dHczeFFMWnN4b2UyZWM3N3d1VlFSa1cvU041U1Y0aFlwaUdQc1hMZWRCQjl3ZGhidVFCUEJhZC92aXRGd3A5V2lNOU1iQmZ2YkpCRFhYdEpkR2d2TGRQZHAxK1ZFSG1mK0o2THk5Q1JsNFZLdzZjOHF5YkhVZURRWVJnV2R2ZjJkRDQ5MHVTdmM5REZHaWVMYUFDbUhMUmY3aTR4NjlwSzVXZmhVV0Vic2s1U1VmSS9zL01vanE5TVVYVEZSU2M2Z25rVE9TY2tVdnhwR0dZNDNiT1lzcjBjRHlaMUQ0N1pjVUM2dkVXYmp5dkxLcldIZG83c0MzejBPeXdtTjhuRzIraHc2eDJlU01IV2pIZnRneWg1YzJOSUcraGROditBWm93ZHV3MDgrdEJ1TkxJeHFveUtHODk2bURqU0xpVnUrRnlPd3RZMHduU3Z2djAxUWxmR1E4b2QzaXpCQWFXelM0azA5SzZmKzU5NURaMnVCdFFkbnZhVERsY3BSVkMrclZkbkhzN2N0MU9DMGFhVFdmNGgrYmtuTWprTjEraFJ3eitEVWkxVTcyOGVMM2NSQ2NXYnBMMm0wWCtkLzVDTEJTN3hxRVYrbHQvZGhrcTR1VjF2Vll2NEpKbjIyWlJyM3FINzQ4QnFBd2pyRHVWQ1VqMnQwdmpCMlFZN2VEd2ZKaXk5VStUNXQ3aGxpc3NYTVRHZHNoZE5QWTJCOVdJbWlXZUkzVDBFbm1zZWdZVCtTNDIxYnRIM045amw1ZzlGZmduNzVuWUt0cHFXRTZtVTB5ZXBldHc0S01hTFR2TWtrci9lZkRueHFSWnU3UXg2Qmc5c2tKWi9tU1Y5MEVDS1ROc3JxSDlvVVR3UE5Ra3A4TXpTdUhJYklCNWRkTWpBcldDcVZNTTJsN2hkbnlLdjhLZTF0WlJON0ErNGdGNW56TUpDVll5dmp2SXJUNTJZQnEwaUxUZUI1aG0rVEgvUEkzdmcyNHNTUGc1WVVqZFhzNUwrVGROdmRLR1NDZlp1YXVST0daaWV6ajl0RDVCNVArREhGK3lRL1dhTG9KaXRiY0JKRzFBdDg3dzBSQnpEL3ltSVpweVI5ZFphRjFLRWhldjVSMFRUY3B0dkpEYk9GRC9LK1VVU1hUUFhyWEpPVU0zRFR2WU1EOERIdHlKVFhaVW4yRndRd2gzNzV5bDZiOGlXTjlXTWFHVlFiMXhzTlJmWExhTGRPa2JxY1piWHpGTlZsZkV5a3FROHFyYjkyQ2ZQUkI2aTdRYkZhZ1RGVnltcC9CZU1tR3ZnNEhnQXhVNTVlUlN0U0QzdUF1QkNUUDB2V1d5ZGJGb2ROT2NqeVBoVlVxVm4yTTZFU3ViN0xaSVpoU3JNTlJmcjBQWDZHRzFtUUpTK3crM0JqL05QaE5FNC8ybjl4a2JZalJVREdDVXhxbnppYWtsQTYzaVVXSzU5TSsyOWJUL1FOOCt4T0xMeWh3ZEJrOURQSmFxTHd0bmFVUlNpVU1lTW0rUjZ5OTZWN0J6cjBpNEV0cDNHSVMzaURBd3VIdjFNeXpuem1kclYzZ1YrRGhqQnhMMlFrSEc3WjJiWmJIOXpWbm9FTFZEQVdHYlorNmsrZFhsR054eGYvR2ZQOXlYOXZzNDUrZjdRZjUrMnMrZjdJVjlYc2FmbisxeGZKMk54K1QwTi9rN3JZL0oyanZoMjNoL1Y3elA2dmJ4L3l2ZXAvVDZGNzUvdHhmcTl2UytiN3Q4K1R2WC9xNmhMNS9UWDN6OTF2MVVkd2I1L3JjL3E5UjNmbitzbmZKMW5ueWZVQ3ZuK292Zko5WDIrVHFKbjVPNS8wbmFMUHg5T3Z5V2dNZHBZdzFhUUtIaXk1UkxtL0U2NVZvV1A5WXFUck8ycHFqdUNHVFVpMVNkRmF3a3V3Y3hScnZLS2Z1eENCVFFQZlc3WGx5ckRWZmcrdkhRSTlOVWdHbklDZzY1RVhERmJJUDZBNlNLY3pqbjFvT1lZVEJ2WGNWam1UUTM5enJoV3pZR0pBY3cyemRNT1MwQytLWkdhNm90bVlmeFM3YjJneDAyeVk0N0pJeHUyenk1SVdkMWIvSHpRR3l1OVhURXIreDNLZUJMTklqQ2F3bXAramNCQmlWQ3RieEYyZVh4MytlNWlORWtpa21nTmFJb1Y0NVZKcDRCR3JVWGhUcUY3UGlJU1BnajhUOHo2QXhMMFJzbm1ja21RTnV1TW5CcHJoc2Fuc0JtcHhYVlVlRG5jeXBHZWQwY2Jvd2ZkMWVjVHo1eTFOSGJ5Z1FHNE81WmtpWUN4WUZ4OWh1cDdWZUFFMUJ3anhSN1ZxaDZxSE9PaW84aVhZOTI3S3g2TzMrMHFUbVdkUklIVERVdTl5T3NxaGVudWo1ZUJ4VnBHamJVOUhsRE9ldE1wT3VCZjkxcE5yUzBDM3pvdUY1TmNvL3pRSUZ3djBjMWloeGFibVM2alE3cnlIaFVDOFNmaTdpb2dWcW1QNnM0b1d6dG03a3BId0Vkdlo0YVlvb1l4WkVKYlg4dUFYaDhsano1eVdobkt4V1J5eXM4UE8rUzFmNVRQLzhuTU5HZlY2eFE0YzdSQXI5eHU3QWppcEc1NnlCVjcxdGRFRHozWmlYVlRUb0RRbGNSaCtSNVZzaW5HMUdvMk5CdnRTTVpPZFBNZEhrOVlkdGtxd0hNeTlGektTZWwva0t1aGFNQllSa2s0SEx6bzlMVERMSy9zc0J5dmxtMTZRQk9QWUZWcVhIcFJvQWdDR3FrQURtZHNuYmJ1SUpEbDA1d2RYQ3V3WmZNMmVpam5FL1B3cnFqZ0lFT2ZseGovZk5rYnR4ZEN1enJWNXhldzV1dWFsN2h3dmtxZFQ5U21GUmk4ZjZVQmY4aEVOMStmK1hFbkRkTFBkekFHeEN4NEorVytRY1g2dWhIcmtEWVpzcloySGlnRHZvSWRtcXl5clJUV2pEYTkvSFdsZ1oyT0Iycnp6ZFpUNUtnMGVxa0VlM2ZIRmFVa1VQdm1YcDJCSFZXNm9wZzJjWFpRei9jaG9YNzRVYUFNTkJQbGxrazQ0Y01uRWwzRi84ejlQQWVXTGhFSW14bDNJRHRwWWxiRURXcldST29wb0JnajRaU0lqa2JXaHVCbHdUbGlIRVhzVzROOFg0ZHl4cHBpekNvWUJ5Q2UyQ1BNV1pCSmREYUl0SEg3M3VlMldSY3NsakpmZzJQeU1US3FJUXgzMHR2TTZ3U1JkU2habTQ1SUorcTRUQVl0TDQxdXMxNzIxaXBpUzRuc3hNY3hFVHlZdmFyUkFhL3NheDVXUnBUaW9rcE93WTNoQ3lHODBLOUZmVnExenVhWWJzOWVtRXVlRFprZHZqcnlKMVQ0NVN1UHJBOUlGZG4vQms1WGVmQ0xIQS9Vc09ZOVl5N3g1bEFNUGttd2JOYjFsRm1RbzMyQ1ZmZll6RXZFdWl0VTlqTm8rcTRNQjV0RStCOFVMNXpaVUJ3SWJMV3kxMG45d2xzTHp2clh3QXRROFVEV0F0NUNzNW5nY2xxZ0crV3AyR3VrNTRJOEx4TFMzUWxUWUYwMXQ1elZZc29ZUVJ6N093M1IwRUNJZjJEVTdBL3VnWE40KzFUSXdJektySnZZb0JobjhvZk9oeEVmOTBlZ2taM2wxcGNvQWFPQmU4RnE0dlQxa1MvOU9JUnhqSWhjRWpWeGZqRzlGdGpKQmNDUEw3TXhBTitQN0RCd3l5QnZ0MmN3Tkx5YS9uZzQ2SmVSOFhIWE1EUUdENWJHWE9GWkhBTnBVdXpQcGtia2tpd1ZrUEtBcmluL0k3VWg2M2xxZmE5U21VY256SFVtZ1p1ZW11eUZHMTFaUFNHcDJIMDhrdHJ3RldCTmo5UENONWI1alAvZmFTSCtHYzNXOVNVY1R2WDBlcXp6Ym10RUNEWmVPTjRpZXVtUS9uSTcreHdpa0hwZ3FLWW5BeU0vZ3o2YzlPT1B1RDIrNGk5SmVIdTdWWTlBcU9hSjlCMVlOVXZrZCtHWkNLS2I0WmN6NE1SYkh2QmJqR0d5YXRUVlRiNjBVNGlEYStDZUlLaXArUGtOa3ExMGc2bGRGbGt1dWR2TVFQMUo1c1JlVlQwK1dqMUVlWEFtVTJMOVZkbytIV25kNy9IQzB1RHZyQjdsSitra1NPcHMzb1pLaVl3T2ZxRVZ3WFFmTWVYWlVFZ0pGMWhLQXZmRkZMSEtSYnBlbG1nVnZsNjg4Y0dXYTBmR3RWOHdCUE5MdlJsTG5RZjl3WWZKQ1hTaS90ZmpIODJQY21yRU1FbWRZRUR0c3ZKcGx0cmJXSW9uaVExNXVpMlRzWng0cFUvdnV3bFliUm5sTUdlM0hHYTdsVlk0UnIzTlo1cm5YaDdIWC8wc0VWb25CbFl4ejlQNlBuZzdIdVR4TnR4dkUzM1ZaRHRPN1JnaEQyWHIrNUdSSDBZL3FoOXhEZ2V2d2hPU2tSZmQvNjI1NTN1YXB1RDIyaFdZUVdyOGZQbWloMWFWc0ZVTUZ4aU9idHhRbytnT3UvejdHcy82VlRHdW9VVGhkQ09HVVhIUmF3M1BPMGhnd3RUUitGSWVTSmNXbFVvSXN2MUtFb25JZE5nMUk0WGtxNUQ2TFRBeTkwamtrZ0NUUldMMVRzSVFjV2lJSEhJTS9oSFlqV2k3VnR1Q3ozV0xuV0ZaTFJrUSt0WUZqOXhsUmFlaEZmSCtxN1F0aDQ3UjkyT2hoNWprRCs3cXVQejN2Z2g1SHozUkZpeXMvbllDZ3FuUjlNTS9UUjROWkFCby9sb2pYL1pEa2svL0l4SFBab0ZLVnJ1OXc3cWJLL1kxWFVnT0FvOFAxV1hDbHN1c0FXQUxLQ3oxVUlFSlZjNk4vd1doZDRIeWl5VjJXc1lMejdjU0ZMTHFGUnBXVEtvdXg3QjAvbGI0ZHRpSGtaV29sck01ZHBDa1JrL2Z4Nk9xd29LanVzTmIrQWcraTJmVlprY3pHWGhGMGdLUStqaGwyaTVvcXNnVkJwUzBDUlkrTTFDQkZwTE0zWWFlbmkzMlZCNDJwUlp6TWI4VEljM0ZzRHRDNU4vSDRsSW5DSWZqanpDcnJCYkRzTzM0SzE5M1lFNGhlMG5RWXUxaVZic25tSllZSXYyWHo3WW1IeGNybVRpblF3OHFuQXcvYkxhNEpqL0poRjU3RDhsOG9oeTdVSWNWR0wwa1RYSDNxVXNiTDRiRE5uQTJxZmlmVVI1UkZVaTR4SzNLeUVUMENHK2gxN1JKMEFwY0dXUFFDSWVaQm1Yd09ncm1rRXFPRks3OUFhWGM1RzZEakhLZXVPSXRvbkZiOWFGSkVhcXVxQXJlNk5xK3IzMFAwQWNkSTJNL1pkZUVJMS9ZcHgxQ1dlQ2dudEZjb2o0WlFnUFZpY3ZwYTFaSHNoY3habzExQ1JONXZvVzNLaUN1UnBHNFkzMGU4QzdPbGVNNGVsWlliTG14dk55R1Z1UDgybGFQQVdmeXdaVDQ4OS9ETjBzYVVpQ3ZNNENvUGsyZVp5Vkx2eWhRMk9yK2lVOHhsYlNuZzB5eW13cjJnWmp2MXZNWW1rSkliRGFQNFcxbzZYd3MyeTVaOU1HV3JyaHBrZW5EWTdHTkE0ZHcxNUE1bjZFMUV6YTJ0b0d0eW5CQWRaaEpZRVpkRnhwTk9ZaUlsUUtJSmZVcGZVTFNaU2pWaEcyZGVOYjJveDhlTVRZSlRqaVFUbEhvdUQxYUoxWHVtWkZmekNrdGlrbzBHM1YxMk5HMURFQis2S1VyQXhSRkwxbTB6bXpHMTlvcUZxSzBNTkhqY3RiZW5WOHBsTlB4QVlzZ3JpOVF6amY3WUprS1NRQW1YMDhoTlBRZGVSUEM5d2l0aFo0aDMwSEFTOStqdFF1M0g0N0tZdkNwNWJTc3pNTDdOY3VSNXdDMk5PaTEvOFpNS3B1NDRvVGJmbWx5dVBJU2tzMzY1N3gvWEZacUVuYWM1NFRqNC9jMHZQZWxaYllWNnl1WWIxRE1IODEwS1BCQXo2ZHJkNTZJaUpxRDdZVXJqMFhiLzFxbU8wNDFyRUVrYzBwYkZFc0pwa09PNXZ4a3FuR1V4K3BDOWpCQkZ6NXZTdzV5c3ZUc2MwckpyUzUvanVDc0NrV3Q1TTBWNUtqdjlhdDErTDliWVcxVzE5b2hCQm9HdVh3UkdtaERKS2pyRVhBRmpXb3VzZ3l5M21vUE9YdUlXTDViWGV4eGgzSC9acktCa2JheGJ5eUY4ZEhwSStUNDk5UG5zcWxqell2cnhpV2kzbUpnaEhYcDdndjRMeU8xZ0VNNGh5Zy9tMHBzQjJmcjd4aVV5TkhxcEQwTnQ1WnpROW5qWFVFL09YV2pHTzN6WFFoK09yN2N6RDlnUk16bkw0UVNta1RPd3ZzbzM0T3NXbmJsMGdsdXNoVVQyWUdxUjUvU0FxSnhLSDdYUHlDUytBMUdWMEJsUlpzc0tXUEtDT3k4MllIMmVVSnhZV2FVOU15ZTdHeExuYjJGbnJzQ01hOGNRRjV3SG91cU90QW16S29ZNjdaYU1aNFoxNGViQnRXMDcvWWdaVkdYekgzSEVGcndyenJFbUlHdzNoYjNUSU1FZFVYdkdqdmVSV0pnY3lNNzFKbTgxLzZlOVNKdmRMenpWWDd2ek1ubzFweUc2Y2dkcmJtNTFJbVRMV2ZxZFFacVg1cnJPdWhDdXd2MUFOcUNmV213MUcxY251dytGVVNnUkg3aDZYOFpWalVlNXA5QkVsejYzb2RUWmtTeld2WHFrUWxIemh5bzJFUklKaGhxa0lvWnNTSlpPa3kwNXgvRWdhUlVkVlRUblJMVzVqcllqdlpyaC9BTS93dGV4YnUwc0k0MXZycFZIRjRGa25UZ2xoM1lNVHJDTGFhNWdUQ05CdE12ZTJSUUFEMktIQXBMOUVFZXJOWFpSd1ROYmdkaG9abFhQYU5qdDJvZjJRNnUzVlpaUjZnWG90WjFwUWdKNHE2UlNGMm0zSFoveTd0M0xZSk96YzZhaFBBVWFYdmRwVnlNeGthS2hIU2lXZHRLU1R0N1VTNTJuT3lGTmN3Wmp3Skg1Ty9DTVdQVEF1dmdJeFVST1FGcTQ0cjFUbWttYlgwNkNvWVdUSUdVdXBNS2pKYTBxa3pkdkZ3K2xIdXJZeHl1bDNadTFMbWQ0SFpmem1xMWJUMm1Ld1FibGQ4azFRMzhsc2prUUtSOEFudDBLRlgyeXB3U1BoaU5CZTFMV1htcXlubFNYb0xiY05sUGF4UTd5TUwzM0g2UUd5M0Nkb0FTRkErSEZjMysveG1OdzRvcWE3OTc1L05sSndvT0tsNDFFWm9qSFN0UmdIMTVWaGNMTVZ6aGJKVmt1K2pDa2hKZHY0WWFWdmtzdnIwRENoMHZ2ZGRZbklLSlN1Yy9IRm05RDU2TWF6QkxYWHdVOWdRb0NLWU1lcVFkRXl6RXRIWE5zL29IZ0hrT1Z5ejU5M21vdHlTeklRUjk4a0xiN2FYb09jUnFSZTNRNU1ENkdwRk1TUjV2bGlRUGJzSGc5YlB0Ni9JUHBoOGxzazFCN284UVZHbFZnSFBHOU5LdGpzYUUvWUdCOWtHajB2OUIzb2orTmlmQSsvYVV1OVBZTFUwdkVEbnY0UjJEMi9qWHRaYXRSWWZUczlxZzM1ZDdCRDJCZ0wxVTF6YmNNTFNHVEV0eVlSeU1GT3FmaDlRd2dsTit3SUdjckRVdThWOCsxbVhCcGNxWFVGUmNDL2pzS3crazRuZGgzM3FYd3NXY0ttazZrdGp3MWMzM0VwZmFoR1lqNXNPVlVnQU5PYzh0TjRTRGRxRW1yc0RoWlNJZm5lOXZSRUtRbjBhNnlJL3FHdHJBNEFXQTNQK1J6WDBoaWpSbzJDdmZBRmdrV01xR3g3Y21WRjFmS3FJSHVadkpwOFhCWnhnRGJGNzBMZjl5bjExR3U4aU9iZm1VeE9XSDFscFEzZXNJb2Vld2NnOXdXUVFLaC85QUJQc1luckJhaHQ3QkpjWnFlbkpIMzhsWjZqaysvQmNtKy9wSENESjN5ajV3VTZVQ3IvZWJXYUYwdGFocEkzR0hTZkVSQ2VxNWJSSGN5bTRPL2Q2SGVEYXpMS0dqc3pJZEV5M2YxMXh5bi92cHZxNVdEQjdFZFVMS2F0bUdINTZGaXpaSmczRG9LYTNZUVBHK295NlF5Y2E4RVB4cEEweCt6c01hWU1CQnlsUnNTbnBCMVliMERJclhQblM2TGliaTcrZkg4dDVHWm94T0RiTVdDNmhaTXNVT1pwYTN3VFkwTnora0d4WENaL3ZERUxUVThxUUFlS0h3NlBJL0p4QjRRY25YSGxJNVV5d0w5bTZoNW8yazJDbnJoSFV2cHZiTDFPZG5tL2RVMjRxWndpam1IaUVUOWxwSk9MNGlqNXp2NTNpUDlWbldSM3dJZ0ZnM0hFb2Y4ZitMNDhodkNuS1cxN1drSForNlB1bll3Tkt0d3ZPU0w3cFcySjVGcHZTT2N2MWpLVWNNUE9lV3VhRGVzUWh0WUlwN29LREpOSzIrb3JlaVRwOXZyV3Z6UmxnM3Z0b05JenNRMnZwZUpXU3JZOFFoaUZxbmM4cjh1NDZ1UlIyODdCM2RGV0xxclN5ZWlYaEVHbnZjbTJpbUZKQlhUVjFzMExsbTUwdDYvOFE4S2gveWVtclIzN2RIMDRkZHlMbUpaZk4zNUlNRFhCVjNpMm5sN2JlSnNEVXFrMkNFYXVnemdzYi9RQ3FXNHRTTExqWWdXVWNLczJ3Ulp6ODI2S2RYY3FmYlU1SGQvQyt1SE5tTHdiOWdiUFFPeTJTMFpLcndmQWJWN2xjOUR3SmdzeW90aHhBTUJkdi9XUmJESTA4OG5WbG9rNExtRFUyd1RZdW9lckNMaXBxUlVzTVlyTnpwSFlNYTJ6ZTVOdmtpYk5TamJ5MTVFbXdNd1Fta1BBdjNHbzlLanJibTVJbktFb1JYelJrWElRdENWZ291Wk45RkN1Um5XZ2JVbi9SQTl5SVI5TWZZMXpHdEM2cElsNW5Kd3dadXlkMHJUanZQdWFRWTlFRkZML1ZIM1FCdm9jZmF2RlhuT1IrUXFYanFhS3ZqRmI2ZzBXN0drZzVTcnRvVVFnY0RxVlFFNVk5WDVtcFErZGF5djJyditiOFZLNXE3dGQ3Z2ZndFMwWm1yY0VyeHpvR3ZaWkxwd0NwWHVEVExhYVpub3dSaVBRc0pCTW5ITFVaR0NhK1N2N3BYeFpKY1NlMmU3VjhHMDlnUUdDWDRkek1wSklxblFGcTl6NHRuaGMrTVlpVWdPWE9lSTNIQW9NVkw4YmR1RThrS2dMMzlXa2M1SDhEb1JHdG5MaXl0MmJnd2hWMGJXYU1tMXdWWG90UzJ4dHVUcUg4RWpUbWRlN3pJVmR2RVREbTR1NG9PalFSdDczZks4TVo5WjFKajRZcEUrQ0FaWWgwUFh6Y1dsWTNJNzZkOUlmSDlsT2Zld2FmY2QwVnYwODlJSkhRUHZrYzIwbXFPSE5JOHdCekxOM1R1b2JBY25hdTczQTBpNUtlNEpUMGg4Y21BakphWklGdVVER1R4b2tRZXBjeVR4ZGlzSEFuZjIycVEyWmJwaTdnSUU1SHkzQXVuVEdmd1ZjMm5uT05VNjFLQWdZMnFaT3dKOXY4NXJhT2FQV0tCR29ac1Y0cUlmUFpNNGc2MG9DTkd5ZGp6SVNFUGZ3WE9KUWRNRmQzWGd1R2tIVEwzQk82Y2lDYUZkK0ZVbWhuemZ6QkJRUUQrZ21BamdBb28xMm8rUkVzVnpmYXZ1TjFMWVE2WVBGMFJhS0ZkOWs4VjRPbzNEclVUakIySVNvd1BmS0JjRlNXQ1d5WUFNM1grS1psdC9RSUtZYnpEQk5rMUo0K0ZYSXVYN0lITGQzNUp6VXJqRVdyMFRUWXJtbkY0dkxRQ205TkE1TFJhZThsaFR1ZE0rYjUrS2wxRi9QcmJWVExJOXVFRXBLRUlKc3F1N29oT2dSWWlDY241NWlCTzZLSHg2Sk4wc291dDB0SG9nWEFjT2dMdUNINmVMN1lhMnNrWk01NXhuSDRWc3hmTGFFK3YvM1lya3RNa25pakwxZ21yV1lBOThSMmg1VWNseVFtMklaMFJBODhGVXFZM0hvWHc4ZDRsMzRrdm11YTc5RWl0OXM1V0JwZndsMVdaQjFwaEd5V0g0RW05Mk9xQjdJOUhnY3pSbitvSHJUT0g2Z1BOQ2xET1oyUDlYbUNHdk1hazF6ZWhOcU5meW9lbjFjUUxIWHBLbUsxU3V3QU1Bek9seEE4WWpCUXpqbTVNVmdlTzdKUGs0UFZpNlJpYTlleFpCbkFFOHVXYmdmVlVKdjhDSUdpRWRKQXNqdXZaNWlBMklaYnF4RWI2Tkt0eDRrRVJhaEQwTXEzQ3FmKzJrOXdUSDlkL29BWXlwL1M2USs3RUFJV1laN0paYndKcW5rVHl4NUZQWjNKeGVuQ2tSQWNvZzdJVUJERC9iampFSGMwQjErdXlBTVhTOHZKM1JkWHN1QUlkV2poOHRKR05RSkFpZ3IzRkhkOVJvcGxZejgvMnNyaGZ3bHJldDkwUlRZUjBqUkh0MEFwQlNSQkFpSFppZkh4b0JYa2s3K2lPcDRwbGhGNFB5UUJaSjBQZytQVWF4SUxHV2FGaFVCUUpsWDFHSlp3U01ldG8rVlZKak1ocWJjRjN4d3djRzlVVnhFUXVRZ2xEMnZuOUpWV3pETkc0WURQckZPN2ZFb1BYajVSNHR3UkhnMlh1N0FENklIeFYzeFN1cTlLUXRoM29lNjFvRWJmWG9qOEFEWktJVjRpVHJqSGxrWXZZSW1neitkVGdnSi9UMFdMZEc3SG1ZSmxNZkFvRmExcmwrTExjWGoxQXlRcVBSZ1JmQXRFUkIrUmYybkRlM3k1d0poZXhuMzFqbDk3cWZoMUxVWmErMmVrd014eVFoVHBmWXA0djcyS29vUjcwVFBQbUE3R1lVcGlPU0t4RUdrWFRRZTlUS1dOU1IvT2g3MFhFQWZCTkRBVlBXQmFXL1BMK01SUVhqd1VpWUhMcWUyMFVlVUtqNzlFdklnaktPUEdreHdnREF6dUZHN1dvMWl5S3VOMnNSUkxjSGRpeEoyVFMxN0ZzMWZzMGdyeEo0NFpVOEkyNHJZWWpUVWRCU0lxTzVHQmZXSWJLcmhFZm9YamtJc3VtdkF3YlNkL0FlRHFnZVlRd2NBUHIzb2pjVHU3eFBEQnZHa0RXQXRZcEYxOU9GQjZpOHBaWEw3d002cHJocTBhNDFTQ2NxcktmVUFrN0N5S1hOS0hrUzAyVnV6R0ZuQ3Jyb1RhUloySFJxODY3NzF0clNWdkQ2V1M0SU5UL2w1SFJoZUhvck0wV2FSaHFrUmRZb09pd2FMb1JGMWhseVV4VitKcjNWVVZoVGRyb0p1MjJNZzEyR2xlV0paL3UyM0FvUndxdkZvSWlaNTJXRjZFZ0hrdFYxR3F3bUxJS2FOYms2TXdXMGpMeitQaGFrU2N4bEdTRmJjVWdWL3czRE5lU1RsWmJtS0ZIK3k2b0MxY1pOU3M1d2RFUk8wQ1JhK3FORU5obEJaZ0dUZUVoTDZoRW03ejYzU20rNDZJOGFNMHQrdmxOQ1paa3hEdTVnL3hjRXBYWUVHWU5MR2ZLekdmbDNkVTA5dlJCMUtEOG5jcGZmUFZGNkxseDFKaXpDUWs3azRvOXRrUStRY2F2Y2xjOEpGVGVYdGwxRFhMbU4vMXMxOVhsRUlhcGtMVFYvNmNmbzBEc3JkWFZUQVMzdnZpamxyNlZ0Um40UmtINnk4UFNKZnQrVmMvZGlkbkJFU0ZSOFpGOFJBL1RhQ2JudURKM1dwWnZYVm1qZy9IMEdDakpJT0trdjR6WHk0OXRrTDRYK1FhcG5iSGFMRnExck9iTDR6czZpTGwxbnhqRVRaaFBWM1VHNWx6b3BlanBWWXBiNmsxNFA5OUFNSjk1MitlUjN2YjcxSFpLcWJaVUtDVEg2WHFvbU1YOExIUTltVDRMU3gxY3lSVzZESXkycWJxd2ZJeEJXM3dxOUUyTVpIa3QweTFiSzhKOVlOY01wd25NNlcyQWppZm14S0JIY2FkUkI5cGd4SmY5bTR3ZjkxZ3NrSVY5dGFlM2R4Rml4RHFpelNid3BsS3NOMXhUQlR4SE41MEJvNVdTZnBCZDlxaXZpQlVWM0svODlSeEMwNWx2b1BjazZRT2RnRjVaRnFKUGpZNWc1djNPbTZpM1M0ajlCcG9sZHhqU0trbXYzWWN2MGwzN0R5QzBMRnFqOHZJcnVGWG9TM2NQOVJTRUJGelFiUXpsVXZNQlBhUUlSZndYUUx2NHBpQ1huMlltY1E0b1RQd0Z0WlJ6ZWdIL05tbHFCYi9KTksvYndaRFc5QVBXUG1lVTJMVWpwS2FuaU5GSGhyNU05d2dkTUx1T0YvU2FsOVBVUG1jRXV6Y0VtMG13Nm0vTENFb3pVdWxFUlhKOExyNVM4VWxabDExZ0tYaEFhTjRsbkdMTldROCthdTZzWFE5NUN1S3VDd0FDRnVSUGQ2djZyMHZUMXNjSEdqaWxraXEzR0JpYzJyajF5QWNWRTZCZmdQQmZBVFpXWEI4Njc1U3RFR2dhd1ZqOVk4dWdGL0JWSEJ6NHAxSjJlYWNtUWNBVXFNMHhCc2tDMW5RdGphbHN1S21PZXN2TVpCNkNFbHExeWNkMExydUJSQ2tGRk43ek5EWlE1dEhDTFFOdXp6NDZBaVlyOFhoWXltTXVYSnhYMndteTlaMTViL2h5VWRzNGZLcGo3SVdXckhUTFNSa1VHZnF1ZjYxdVpucHhtWUtxOURiUU9DeUpmd2xUaXlqYW5uYXRyUlVVeCtKdVNsU09qVW9KQzRYRDJkRkVOamZLc003ZmJSSzFhcVBWN1ZYQlVRNzQ3a1RNMlRhNEpUK2ZoemNmWGJnUmVSNVh2MERvWmVIOFZ3WmE5U05COTN5anJRa1hxUVJjZ0xjVW53Ui9WY3lSajlvQXlOWmxlU3lwMGZxaUFyWStsYUdjL3NQTW5qZ25QMHdPd1FHVUZieXNubEEzeFdDRzhLQ3BydHFTQ0ZWL2dNRTF1UlV3MiswQ1NMUlZpZXd1YVhlaEJKNVN6bm82bVhhMXgzV2tmaWQ1eVdOYlJNaXFXc3pnUEo4TWttUGwrbjJ6Tm1qbnFPSStqVGZkNEpFV3gwajFsc0NLVWdnMXgvUDZkdWxtcm8vWUVEL1MrUWRwbUVhM2plNXNDanNvdnZDRGEwS2ZxVk4wbjdCQlVQdkFnM0ExMG5tVWRWUW1MdHFPOVBrQVhrdVRyb1NyeTBQUTd0NDgzSmlsSGRGNUVHNFMyZndURzRPcVFVMjQyblhUUkYraXJSMGJIN09WbUxWdE9BQ2JQcWxwNVhRY3VhSUZqeTdqNnp5T0w1VDNvRXpWQzR4YWhHMG1JWnFLZFcvU0J0N0o2aXdhVDNWV3FpNnJIQkJhZEc3ZUtPVjZNckZpc2xzMUNzbGxsMEViaExQczU3WjhyTno1SS9wVDZkS0tkWmdkUFgwMk81cEpUM0V4SVh5SzVBZUFDZCt4RjlVb0pyL0ozNTNPZCtnNmtiR2dCNzNPV3J3eFloNWhJRzl5cjlPS2s2Qzg3YVhPZVhaQ0w3ZzlEMHVrN2l3YzBDejNOK25YcEsxb2R5TVBBd3lEWW5ka1c5T2tsei9iTjhHaHNNVWxiUmZITTVIelVYKzZaVnJ6cHJvcW42a2JuVVFMK3Bwd2dTTE9iSEk4V2NkcTlrVncvOHV4eTBMYnZER2pnUUNzT3JoNWhjUE13dGt2aGhSa053NHk2MHBZbXErYyt5U0UzdXZRT2l1T0Vxak8weXJEeDBXQ1JwMDl6RnNQcTRuQVFnT21vR24zTkV1ZUx3cFluTWxyNlZZRzRZYzhsTkg0RjdTMkxYNW9vSm1tdmFaS1BBRVNjUS9PSHliNGV2cUF0ZzJDL25jWDJxaVg0aWVyYWFlaDFiSUc1RkhTbUltekcxOE5NYkp3bmp0ZzRSVHFEcXdSR2EvZHAwNW5Ld2JXVE1URnRHSEpNNlNPb1VHZ0dnSEhuQjdSS3VCc3dsNnFDMVh2U0l3OEpmdU9QMm50Z0JpNWU3NmRaczR1WDZrbjljUlR3WkJJRE9jRTE1VWRRTVZUc3hKZ2twT0V5M3pZVThsQTJPSi9uMW4xWHZxbkdpSWtSMnhCczErd2FtNUhod2tpZGkwZUp3Uk9aSWpscmpsQW03M0VPd2RYN09Gem1WeGMva0M1KzVzWnpraERrd24remJxVGx0ZHJEWXViM2hqRVZmdlBJcVE1NDJET2ZycUNCMUFYUFZyR0FQVTdscTd3MmU1Q3NqczVLbVhSMXlsaXpVRHFudzZ0ZkpFVHpYSFFBTVUydUhqUWJ5U1B6WFhYRWFmOUE5NlAyNDBuUHNKSmJ1cWtqalEzSjhvbTh1TmFUcndCS2ZHaXY5UGNacnRWbGV5MXAyTW5Gc3ZseERyTFlabWRYcVJRWDVqVjhKTEQ1MDBYNjZkL2lMNU1wOG1VOVp1K0FaTExCS2Y0WVZsYVhsY2tWKzVTcVhwd2NXSml5cnRtcTlqdDd4YWZjSnkxd3lDTDJOSnNUdFFqWWdJaVllRmFqVEJqdlhCWWI5UEhhVEFqVWhUcWxzUmZjSldHKzBrMi9SY0hSZmVhL1dvNTRWbVA2UDVxWnUxZGdQSE9XM3YzODZtd2JOQ09EWGF1LzFZOUQyR0R5WkdMa0V5ZDdJa2FuUzY4aThXbU9pek5xKzVyZnNvNWduV0prV2dWSHBIdm5qeEhtb2tpb0Nsa0xERGRkRFV6cXZCcncyVkl6MVJjZVNzT3N1V3FzRVB5c0RQTnlLTHM2STB5bXgrT05wblM5UW1ybUZTOURySkNjZXlGcmFZTDJ0MlREa3lsbHVXUXZyRWZDNkh6UHBCc1ZDTm41N2loRjRuMmNkdFBGSzVqanVqWktHR2s2Z2ZIMmlLSWlFY2dxZUh6NlhDOHI3VTZkUEp3VWFYRTNna2g5YWp4dWltbzhmc2RQZWZ3aXBaRTkzZjVHVnBoN1hqVStSZ1VWbGxZNVREby8wVitBaTRPckx5Vi85T3ducEVEL3VqbWhBM0daRnY1K0R4ODJZVmtpZ240WjFjemtkRXFnUk5QbVAwUDBOYmU0U1VJU3J6WWxCaVBNT2lYK3VoeE1OOE12YVFrZ2hjSTN4ZVM5Wk95NjZuODZJZ2dnZ2xKOHZUeTNiZWMvUXMrem1UVDNrY1QzUWZQWG5BdlRCemxaaEFOUHVOK0paamlXQm9jMnAxbmw3RXNiSUZuZnMvVlBQL0hXTzhEdFBzN0JoSFo1VjJ1eXBGdy9hVUhab21vdkUxckd2L1RyZU5DRDFIdG5xK3NQVlZUdGs1QUNyWnZNK3pNY1lhUmFSTTBYZ2hVNlpkdHdMaWtqWGlXNlEyY2VNMTA1U0ZSN044ZmxPaWNLQWhkZllRTFdTUk1hcUJXYVNEVG9GdUhKL1NHQjFXVGQvaUNZVjNyaVU4cHNHKzE3a2lNRlQ0VXNhQkNjQjRSQzVuQi9ubysyemhXMVVkTnpFZU93R1Nyc2YvZnRKdVA1eGVSWEcxQXpBbk83dDJhVEZaS3pWQ0Y1OWpXS0piUkJjNUEwdVo2K3FBV0NkTXN3M25WT0xTVkpVcmY5WWd5QS8yNHU3R1UrbkNZbG9IL0hHenhCYXlRcnpRamxzU1pZdUNua0U1V2NvMndsMHc2bG1ZYXEycHd3ZzRWMk5XYkJFcWRKSWJVSmxIUlJmZ1V6NGNycVFGa2hFdUh1cDdjSXRJK3d2NDhjSGJZRGx0QWpxalZqVVpNLzRiV3c4c2N3Q2RtMU10WGNQOHM3YWhrUkJ4MWY1QzlvWU1UUS9BV2lPSk8xekgvQ1pOOWdSYktSUlYwd2xRNnp6Yk9talozWkEwTUo5ZzBvNkFHNDNZNHU1K2F0N25SZDdtRjExWFFXQlFlRnh6UE8zU0ZLcE9maE4yUkJXMmRIaW80V3pPeU9TdGE0eEc0TUVaQU1ZYmFLMWZLSGZSenptYm1oeEh0SWVsTkNIUitPZk80SCtYVzlFZndkRk5QM3ozY3VQdFVPVytoWTVMQk9RcWNQOGs4ZnJzWnh0WHJaaGJYVlFyNHY0WWdvejZIa0c5WkxzejRwN1Y4bVIwUVgrV2ZwOGhvT3Vwcnl3VUtNU1ZiVnpIOXFLZmJ0d2h4elZOK3o1NU9peDBuR254b2xKZ3ZYQTNRZmxGa2VidXN3L0VLQkJjOXN5aDl1dkxIVjBMaGd2Yjh2MEtrNlN1NndESkdPSVF0eFBsSm91ZjhWRlJoTGZvdFJzRmQxbEhDWXdFM1VkdW1kenF3eUJxU0kwcDQzbkFXRjhieGZNSDN4YjNTLzRPSGtiRjZTamZaNDhuanNkcVUzd1NhdkR1OHRIdnprQSt1MlZSZGd4ZXRsa3lEMkZVL3V5TjdOaGxvSW1ITythVVluRVhPdXk3eFM0alVQM1VlTGVnb3NuVU03WGlpYnNqS09qamhCVFJBcVVSL0g5VGt6RHRRL1IwbnFsZjRaWGFuNldDVFdvTU1YbC9JUXBNcmpsZlFjVm80c1ViWnRFT2RwRS8vbXovREFsblcxZjNaeHVVN05nSjFkYkdFbU1zbDR1YnpBN1o3T1BHcUh5SGJka29VTDVTYUVJVDNlLzNNcFMxejhzdVlXRGxzZTlrWDVhYTFGSW1sUm5tNjIvOEpQT1Qvei9uNG5sblVTaVAydHJ3eDZPdGg0MWlLNHN6NmJRUWwzdkM5Z0lBYWNRMGFuMWNKcGQwSC9HVHZLU2JFSmlQMmZvYlZYbXphODJsR3BxcVdPY3crU1l3T0ZKc3RYbk0yekFBTkx0aUU4MVFyTUkwZ1VWYTBhRWJqT09oam5yT0h0ZXFjS2MzMDAzbFprYTRVN3k2RDgwMlRBZ2hKbmVjR2tpUHJ0elIrTzhWYjA1TCtnRE9VN2J4ZjU3SG13WGp2S0t6ZHkzS1grOEx2WmloZ1V3eGFBYlMyZnlFQUxrUGNBRm00U05ONGpSTU9TdG51Q0lmWk83RHNIbVNXZjdiaXczbDlCSlVpb2RUdEhGTXpVSElnd2g5eUR5R3FXUE4vWVJuR1hqSHdDMTd6UnR4YzR4NWo0cTkvMjBNSTFmVjZFSkNlZzlCTkRWMk1xWk54dGwvWnJRcXlpaXpSSm85NGEvZk9hUjJHUE1RRDBLYzF2MGM4RkR5Zzh5eVByWXNvLzZDNm9wUk50YW9ab2p1S3ljMVkwSUtpMW9mbzMzVzhTUldTeFNVUU5nWmsxTi8zaDg3MDcrMW9jMFNBOWl1bjVvSDlvaG8xbTYrdi9aZWdOd3ZXL3RNdm5QVHlNVFh2dDJRaThlek5WSVFUcThOdzAvVjdoVVR0U0t3VWZ4ZklUamIrQUVweFY4Si9nMEYrWnJ6ZHBacW9aelFhWUFWdUUyMmU5dmRpY09IM21HOFFOYkR5M2N2c0RrWjRQc0JvMDR0bzFleTJiUXFCY290R3orSmQzd1U4T0JJL2tLY1lPZEtYSXZDU1RIS3VuZHZRSDUweUg1b1Ryc09Cd1JLSXZNVlA5V2Q5YkZ1WGZXWTA5ajRnYndXemh6cmxFK3lmbjhKOTBRMVFRVTMzVHEzYUE5bW54bGE5Y3Y0VklTemhqSEFpcjdLSEdZaEdxNllWWDRJY01sQmxTNm1oUGhid0xuYlVwdURaMHlBcWttZEs4WitxTGR0ZERTb1hDRmxyeHo1MkFGQVE3MWVQL1VaMENaWjlGM01tTFZkWTBxeHEyYm85dGtiNGZkaExOc2xMbGNUcFcxL0ZVQlRwSUJCMVhSQ0tXL2xZS0l1MmUySi9RTFFtWW9VanRBMDJQZ2JrTFNscEZQeStsNEFxaE81MUlPQ0ZZL1pNNXRENTErN3gxNDNqcVVUaDJPR0hUOTdvdjV3ZXVkUVBjTGY2RC9lNXZlbkxTT00ybnM4WVFkbjYzZmhFb1V2ckhKWC9VWWl3QXZQb0RlbkdZcm9GVkxGakdWY0dIeEVSMTA2bURFZDZnVnNTK3BlYm04bEVybHZFWVpkSXAweFlBUFRoQjNuRGZocXpuc0RtN3JGTThMUCtZbmFpeUxvVlNNRnVrVEZOT3B0bXBaZ21pOG9kR0ZQY1pyT2VDWnlpdnFOLzBKektPNEdiL3YyM21xeVIyOW1sNm5PVDdMRkFrY1ZzL0NtYWlVeDNsZ2RhZmRiUExlOUVVYmxnMDFWSEtyd3NtZEZveFhGUFNVcE1GTmxVMDl6amZOYUpjL3NJcVhSczM3aXRJMGh6Z2piU2g1WUZEMGRNcjNZczdBQ1p0bUFMeVFUa1BWVEZscTZidDU3ZnFzMkFBTHN3TGsweld6YnRneVNKWnFEblVzbzRyZTlSQm5VUnFUc2hPQjdTV2RqK3JyM3RhSUdjdU9pc2JDVkxRTFFOdFpFV0N3dFZJaTdYbTVocXllb1o0N3Qrd0paU0NGYVN6bStnS1VLc2RrNWI3V0dxelV3UGVmYlRDbks1OGVDREFodWU5bE5rb0xMT094SkRLbUY3c211bSsxNFJ1K2hmMlZyWUh0UXJ6TWVuVGZQZ2tsOENtQ3E4TmlVNU9xeG15ZTdHeG1icHVPKy9DRDMrL0lRQ3Nud1lhYVdSM3lNQjFHVlFqMU9mTHdtcTVFMm5LN1Z4VUREdU9LeGtMQWlSK2RVN2VOcjZVa3dDM2I3Wit0ZnpFNGd6VFBYZS9DZGVWbzJHSE5DS281WmRuejdoTWMxL3hkUWZ4T3BicGR1Z0EvMUlLdW4wSlVvRU9uc0Z6dmdia0NHZFlDUExaYlBpcDlRSmZVUldSNFJIOXhBaE1NT3NDbVlvM3orRVFYNHltbVFCdEJzdWJDdm0vOGJ2c2MzSmZ6R2hBQlFRSm1DVXE5NHpIYUFicnJyWExYNzQ1RTExU21IMk1WT2xPbVpPWTVGSi8xSkhIRTd5M3J3N09TVmtETFc3L1RuYVlwOVVQS0hvVVFDdjNoY0tzZE5VRUxVRlI1c1dLZUxOYTVSOENxWS9xYlBPeHNINDQ3Y3p6cElSQ0dRVzgxaVdjLzZTcXF6ZHpHUUVjNWpQOGNIekUrV2xOMlYrSlA5dFYwSzJIR2VHSlEwR1YySUxRRCt4M2VJSnE3czVET1FEdnByM1VNTzNacmNzQmVoNWV5OGs2ZkMrVmJ6UzR1K0ZIbElDNGpqbmFTS1lZT2tQSkFqTkVJV3BsNXhJWU1jS09FUy9oZmFVc3c4RjE1M2VydUdhN1I2a2FwektGL21QT0NtSXVMb3o1L2pmdk1qMUZpQkgyU2RnTlZtampzRjg2d0UxcEdWaWkyUGZBUmZDYXhvNURBamZ2QlNnSkJoS3pVZjVLUlpMa3RJMlhaTTUxMWJwSXI5MmV6K2JJTkpBZkhyL0d6ejNkb1NnRE9sQk5WaGd5QmI5SzFlQW9lb1FmMmw0Uk5JT3huMVdmb3VYcmxoYUJoT0lLNkliYktCZWdQS1JXZ0pxc0NBMHdhalZsMEwvdnBzMEo5UTRYMlMzdjkwNWFDeGdHR1EyL3FVZXZTMWQ0d1l5S0VZUzZsYnVzODlCNFozWC9KZTRDcS91ejVsU0FLTHFSdWtOYmxVSjV1MnIxdUdwcVpKcGxrZDRmejU0eURxOVFWSDUwTWFKQnNjdUVqV1BiQkVUN3pBNzZ6bkVvUXB2THJwQ21VTXB6bkl1bzJHYnJISlVyNDlsbWo4ejlLOEVicldicXh6c3Z1ejNYZHFBYm5UUURyOWorbXB4WUpXRXlVbUdOUCt4RUlyMVVlcjRuSlhKckZNNDlhTGFJUHJvbllWcHJoempJMWVKbGJnczAyZWVFaWY1azNCdVI0NG5nQmhHOUFiZFcxRUxXeDlIekZPd1gwSGJEZm9nSXpBRk1DZlB4MkVjL2tFT0ZxdktIdFlDeVlETWVWb1JnOTZseEVveHVTeU5odWtaQ0VHL3dNa1dMMTB6R3lLYnU1ZG5ZeXY1Tk5PNlZzTVdvRnRHV1dFVjVva0NaTmsxbXNSc0srYXA0ODBYcTFPK0ZmUzRpcURGVlhzVytVaTB4OGU0cmEyZzZUUnpycWw1TW9zRTd1OXdiOFpyM09sT0FjanlsUjRxNmJkS1hQSUl1cVBkMy80SEYxbk9BQ2lSMGFlKzNjaUdaaDArUGg3aTVtSmdQRytVU004bGFwd24yaVVhaHpPTzkzSFRnV1pXNy9HY0NZNXNPOS9SeG9iaWMrY1ZTRTRKcUhrNWRHM1VRdlE4dlFGQm5XUEJ0Wkw0azVuQlRLNExRVmpYaWY2eVcvQlJ6Mk9LdGFpbHBrbG04ZTVXeVQvZ0NWZ1Y3WmljYXVQL0dwMWZ3N0NJbXE1MVVlekpKcElVS3MxQmE0MXNvTmxxMjZFZG5GL1NWQlZuS1V2OVA5OU40NkN4OFc0OStHNVQrNkIzR3ZlUWdPeHZ1QUxnbElYdVhWRFpwcEJ5VVdWVkZtVE1xSEN4L0JrWVFDMHQ0QUhQK1paVWxLN0g1em9iRS9mcmpWNWl0Vmczd3JPbUxCTXorTEE3enQ4VEorcFRMb0RleDB2SjBLbERWaFRxVUVscFNXZU96NHpYaG5CTHhYTGtpU0hpNHRUYmovY0ZRb2hVai93TCtIMlRZV1dpS25lL0Q5K3ora2ExVXlsUUhWeW1zWHdLSFFTL2NLWTNOV0s3NDRoOEFNNUhzR2xGMDVBR3d4dGg0amFCRldWOUFrZG1lMmlaMmExVzB3TTFNSVRFTjRINndsM3V0QkNDekp2azllbU1zOGFBM0tJQVJZNDBLVVczeWwybHl2RWE1clp0R3g1c3pZNWZSK3FOZjU4NHRuTHR6OHV2dGNkSTcwRGpPeE5aRDNidzhlMXhZeksrS3pVZ2s2UGswR2cwWk0rNGE0M1dVUnhnUGVocktSUHVDcmFwY0RjSTRJL25wVWxUQ1RHeFVhSjFvckFKOCtEaTVzanl2aDVaRWEwYTUzWEkxaVNjRHJpL0loK3dxOUdoR0wrVzFBYmpJNWVQWDkwb0ZTWnRab1JxQllkK3hJS2tkUnBkTjkyN3podkNlWEtNS2duYWVDNmMzSWVWN3laM3k0RDFIL3BMQnhUeGNobC92VWFkODZBRzZvZ3ZXMkd5UTBLNGxkOWJiY0V6TnBnY1FqTXRzTXdLMEVnRzNuZXliZE8xSWtBUCtXdTU2QVJ4RTE2VGVIQWNXenFueU9ybklsb2dCVHIvMnJxWGp4byt2VlJEYTJjYW15dVpLbnRzbXRDYlpBbHpmdGdmRjU0U1lna3ZhN1BZVWlndVBGdEx1Mkx1YnhMMlJHSE1MWU9PUkg5Mm9icTFYaXRuaWh3ZWkzZG5ER0diMUZHdjNyWk1LWnczdW9iVWVjV0MwQWUwTy9oQ3MxcDh2RWpFYlE1QkRLMkhLclRZMGE0N3RFRi9oVzFIZlJyZVMyR2tQb2U3WS91d3YzSXlyNS9FUXR4dGQrSXBmUXJmZ0tFb3B0L1FOUjVpcllxMGtxRHpvdW14V2FEc09zbW0zQVVKZUlOS2xYME1IaTdTR09taHlBTUhYZEpTSi92UFJRZ3lqTVc5Rk9EUXVNaTJoa2lCVndmVEdDRWh2VThCdjd2aTFGL1BKVzI5d254aTRvazEzeXNYb2tVMWQ4N3htTmd3WUdhVTAxT25qa2ZlOHVXekNGdnVaT2FUUGNIT1JXNlN5L2hHeHBVZDNFVGxnMk9jdlorK0preExKOWpXVERxdVF6eFFBWGxQdzRjQ2IrY0RWcFJWZDFqS3F1Qjl5NGFuMzNmeE5qNVQrcnBabU1ZSUMrMDFFZzhxcTZRQWZVQk1mbHpxS2JrZUFuSVc5czFKSDlIa283TVprazBaUFRaVVhMUWtWMzhCTjRBclRxbHpsb25HQW1YRUVYcUtEbDVhd010OTlEL2VReGNlL2E3RzU1cmEwY0JvY3BqbnAvcjV3Wk96UktBaTBtTkgvOWRSR1hSUnkvTkpKRnVGNURWUndWR2lLbi9ZWjV6U2gvTXROczFVakNMZ3JOK09OenRxVzVTQnhYd1Fsb2ZyQi9WMWFLa2FYbUVuYjVyL3ZOVGJCaVR6RWdQTis3ZDdqSzh6Wi9tQ1ZRY3hJcWZMUXBmRnV3bWV3SXlWQTFOL2JScHFwZXF1azVTQjlubms0NzZ5SmorYk5UTEl5RTB4akUyZU9EOGVha3Z3SlhNUXpXVXVrNDVQdlJkbTRHY2Rud28xTXdPWHJvNmgwektMRDBNQkJJOFdQczJVNWMzSlMrT21pVnZsb2gxWlByTnVBdHdHZWM2SkRWQnhnclhKRWx1MzJjNSt1Z3Q4SGVteWx4NzlpbTFpMUl5aXN2aHdLaHNFQWVpVWhzNjVUOVJKdEZVNDdiK000WTZLYnlLSmtZK29KV2k0UkJMbFJUZGpiRUZpTXJDUWl2VUJONThTWkJwRXpsYzhTbmkwaWR1NThMMUVmUjBjQ0NVSW5SZmZuaElPQnJlenJ6ejRESFkrRnVSZzNvL1d4Z1pERVR4T2hVa0FrcjVKbGJpTkhSQk9RUmloemVIZnlGM0ZLZTd0VEVLY2N0cnd6TFNSVll4Rmd3eTFndUtydDlnb0tQWTczQnRuTHREaVFSeTkydEI1ZVdBdldmZVBETHFvaVIrekxNeCtUTU1JS3FlYmVxbGEvdjNRTWdjT3VaakNqdUJXOGNEMzdySHdqVzZsYUlaYVVwdXB1N3pWNVA4SnJYeUQ2aVpzZUxkK2tyT3lXZzJxTDFIOThhTFBTL0M1V3J2WDUwY0ZEZ2JkUnJ2UWlEYUhlbXNWU3hHeGhHVEZ3NEZmbjBXZDZkaGl0Ynh3Ymo4MUJ5SDNZUWgyK3FUR0hKd2RDTzRUMTZ2TUNRRmJtQXR6SlpKMTYyb2hHTnVQajNSNGZXVmIvMEVWWisvTjlIalI5SmlmMzZJam04ZmNBSTEwNHhyblRZNjFzZjd6RWhhcDZjWUNCcmViS0tXZTJRb1Jyb3owck91OFI4ekNacEd2OUlpWlFqYVNnSXY2N1hrYzZrNU9xRExMM1QrRzh0SGhneHUwWGtvTGhVRE91aDNoODM3RVRUNjlOV2N5NC9ETkRzaGhtaWFrSFVvTUVhMXR0UnNMOW9Ib3plUW83SmxBM0xwZXN0S3NnSlYvbkU4VTUvbXRBS05sbi9IYjREZlBDbDVyaUh0eEltTWtFaE1BQ2c4Vk9sVUNKVDNwSGUreEtvZzBxdEdCWlRuMnBmQ0xPdVZ0aFpSWUI2ck5wbkZBS3Y2MGJENE9CeFZydHNuVjhtVCtwMUdySjVHQVdWMENCMmkzVEVsMnVycEhMVFFSSThjenZ4RVRQbGs5QXMxSUVLdTBhOWlSenREZldnTnRkNlIxSGVuRyt5UGV0cGVGbVZMMXduelpLOHdqQS90bFdrMS9DY0FzRkZFYkpVQVM5NVpzZHdqdHRycjV3VkZyYTdycWFROUU5V0lyTnFZdEprd1ZxdXpDWE5kUW82Y2duNzNQWjl4SWVVcWwxSXVOcHZMRkVGNEFsWElDczBZQlovRWRCREpvN3kyNm5BaC9oSi9vaW1rb3lyaGlJbTg0K2ZsRkNvWG9MaURNTDhsbXlUZFRZWTFFdHo4YmVaLzArYU5IWGRLMXRaMlBoNER5enovRzdwdVdLaGk1T0FZaUVGY2I3RGhPMUxoNm02L2hRb3YybFhtT3RnWjR4TmFBUDBScWxob2lWMmZqVllQQURlM3hhbldFRXlOQ0Z6bmN2ZjVoNEh5akQ5ZTZFbC9EZ1hsSytGNkxkV3lBRmZpaE9xYWhFZVNrNFFNUG90b1pMUDVRdGkrYk00Q2pGMEtOVmNjRHpmWFZVRTZNYkZqbzZyM1M2T2ovUUcyaEFxRnBoMlF1bmFrM3JodU5kU0QxT28vcGlPWXZIdUNjQ1V4d1JEUjJZZGxhMUpweitPa0hlTW1oblBKd0h1V1VwL2pVVk82eG9ocW5GS2dJTWszc3VUVDUvU2pWNTErOHNYcW5td2hQdGNES1FmOUEzYjRxMGdyZDhVd085aFpvRG5SVmdQRlRpM3l5Qi9UcHBJOFFZMFAwb3hybnR2QmtYZDMzbm9tV3ZyQTcwNnd5dkM1UkhPdFNKQ1dza25HR0xSeGxBb0ZOdUJIVmVQVENmbHR3WUEwbzJYZ3VMdXZyQ1dQbHU0TW9jMXVEYjVReThUKzZJUklLNGhjcTkyaGJwVWRyZjd4c1hzb2FPZ2lmT3RITytqY1ZQRWdkTldCTjZkOWNMRCtOeDMzVnhuQ25DSU02STFUTnlLczVlYnVlWGVBeEdCdFFDODJCcUlvdFJFa3RWY0tlcGtEWmtvTm5FWG9aVTVuV3dlMUF5TzdhOUkvMnE2N1JjOW9KNC9kRThUUm9kQTJpdWR1dzZoeG1YRmhwWkJVL3hINWxOZW1WMHIvQkdNU3EzK3lzSWY5MFBzYVkzVjFGeXU2SlNnZytoaGdpUXVOV3IyQnMxZUFUUHJyeE5BaWdLMU5oRjIvaGtLMnVsVXZiNEtmZkRIR1U5NmYxeGFGNXdqS0p2ZWZMdHJRT1hKK1lVWVBaejMra2tMa3ZQVU5GN3F1TlBFak53am80bldoejZpckJyamZvczVENlZUNkFlZFlXbTFoRFRGRjdMT0tGeTNVL3VWWHdwbXkwcTlEcC9CZndwU2xNNE9Wb2FwYXdiWkhTOUFHcWppVFBJaWxZQXBaeThHTjA3ejlFd2FValRQRWJXbTU0cm5WK1BMdTdHaHF0SXdxdGsrOW00QmFDVDJqanNnRVVxODM1SGdld3pNOXRldmhVUkRpOFhRaEhpRSt1TnU5anp0WTAzWGpNalFrVDZRMWtIcEZFM01uczRPQ092ZVgrcUhNVkJ5SHVCT2VBOVR4bjBPUTFJcVJqMUo4YXVhUkJIbUE3TGVsdHpLOFhQaVFvZjFzUmVIZFdPTDlzTXdCdm5NRVZNR1NuNTZJNmMrMWxhWXhCNUNJVWR0QnBqOFZMMVZvdDRUd0ZoZWxDS1crTmlKVDNueHN0aWRkVENzVHlwN0FVM3M3VjJmbEJTSk52WXV3UnFMd2xVS1NQdzBHMDg1eDFVT0Y1ZGxHNk85Ym5WUWtBbkZzNzMzcDVVQ0I1N1NJMElZV3ZrT3pZR3B3NE9zNnhxSUwyVm4rVGZHa211ZmR6ZU5CYzN3Q0w2Tm03cWxYa0FSdG9XMmw2Zmo1U0xCS2d6UUdGK1M5aXQzc29oWlZ2c2EzWExvZGloL28xODdyNE1OUGduL3dlTmZyY0Z2RFdKajVnakl3b2NlR3l0Mzl6SDJzanhYd3B1cWNjM0xxdnlZZCsxTk41WVYwa0Mxd3IrMERnc2txaW1xamdRMllmRU5SRVNlVVN1a1dEdEpCYWlDSTJxSzVhNlVpVTJWUWdnZ0J5RG1mVXZORmpSSWhUOVNDdFRNUjV4RndiVXQ2cmY2KzlKUGdoNFZGckhyU0hkY1FUaG82R1NQd21WUG12ODBXcHVKSEo0Q0l3THoyRjIyZUFHSmp5OE4xcEV5N2EvT0NURFljRkJIYWhCZFcrL2NNTmNjUS9zcE1kZnQyQ1BDS1N1NDJOd3IwaUgxTkNqSG03ekRJcWlpcjlSZGpLUlhoK0k0YjU2NTZ6S1B0ZGV1RHlnK1VJYzl1RCtpWTBSekFaVUdBZWNxR0RxaDQvVCtmM0N5OHlqZ09KZ2lDbXI4ZkdDalZZU1ArU1Q1MHQwSDU5QW9TWC9XbHEwZDhNSXFONVZnRjB4SEtkUWFKUkMxdVJ0dHBuMEdPUXIwTG9TRHpHdUhHM0J6M2gvT2NUZDZyVmkzU25FYk5RSFZjMUF4ekduV25VbjlPN0NGZHhBU09peHFMSVUvWWVZS2pSM0d5a2d0UWs3UXJucVJMZUJvZzFyU0dSVkJwTG1UNS9kSzV1cFB5dHlEVFNnQ2FML0pBNkljR01ZK2EzV0FUdUlPR1NFcEMrcHhxcUxTK3c4c1l4RWJHZCs5KzQ0MWF4akg5UUpOQ0VNNm1rWHRDaklMQ3U3OERkeUlmMVJkb3dqbUNDNjRuOVduVlAyV2I5QmVhSlhkSHRzRlI0YTh0V1dGdEE3eldUK0tVQ28zaGtiSkdJZXRRMFdkbW85QmVhcERRaitadDk3dWgwWU80b2Q0eVN2TGdlcVRNdEp4UEprc0FVZDIyUUxXemVnSHFqd2FwdVlEaVRzWU5SdThRL21kUDZ4eVBDUTBENWpZeE9XaGZwcjhuZ0dFVjE1OXM2anZsYjB3SW44Sm45REZTR0RBbnR6UHVmeGQxSXdRUG14elZJT1dIWVhQWFdnMGNoY0tqMGszbjdDQTdXUEEyQ215eFFuUmplLzBBVzBhd1cxblBsR1RHdlc5Y1J5Z1RQRXVPUEpPVnlrT0hSdWprbi9EeDZyWHNFOFJFOTlxWDBxT2w3b050VDlvK3UveEFEYjNyalVqVlB4bUFRc3JVSFFOZTdrcEV4TE5DVUVaRmlmbXdVZFc2ei9VQjhRdzA4SzVBaExCbld0S0dEMmhTNStZMmJ1TktMbXR2Z214eStRRVAvMUJqYkltb3djejFKaDBLZjJ5cytaN0RjV3hhVUllZlVYUlpDVTM5alRURDNYNkhuYkdVRS9BbElqSGtJMkEyTnp5clJEWFlha3IxSGZUbVI0c2RDcTh1aWpxdG5RV3hsUjhrV1BhdUdLVjc0aW1EZjZXY1FOVHlzYnVyUVRKUHpJeWpYSGlONjV1Z0tkVUgyTm95aldZOWpHTXVUU29VdWRsOGhRdVRKNW1UWmxNdGhYRklSUmhzV29XaHJ4Ym1lWVBGeGprdEhqQ3dCd0NpVGI4M3ZsOTZxU1VkRFExUkZwQWIxdGUwZlpKNk1WVGE4aEl5Qjd4YVMzbzg2dkNGdDErVXlNaWYwN2ZhWmRYbVNic091aVYwQU5RT0lJUGEzYVYyY1Z4eHB4blpVQ3pYaUVuWW5yUFRETFM1b09qdmlIZVVaSjljRTJWNFBLMUVpYTRMclVIajN1ajdlcDZWOVlEa2FGandEOTRvOFNpUldreUswNHNhSUQ1VUNKSHJjdFoyYkNpWWNqR2dRYmdLU21CejFKbDNyUm1tc1FBYldmRHJLRTA4R2dkd3liTGtMbllUOWxCeDJQTmplOURkVVhiRFYxNzFTS3RDdVpvWnhuYWpUMlo2UmJIQ0pmRFV4MEZmWVBnbmowMnFpSlpwSlNQZ21pbXNxSUt2ZGpvNS9TOUExMjJJMTdha2x2WGdYeWxhL2JrL3FyeXlkbTh2NVQ2SDc5SUI5dm1iY0lybjg5SlBxVUhJb0lvY21CaWhkSWJxSFE1NUlZbjZmdWRkM1hvT3hiM3pxWE5rTUp5dmVHdzdHSkVuNDlNNDdMTkVuUFNDMkh5b0ZZZEp2OTF4cmUxTEMva0xyc2RCclVIZ1crZkdoSEovdVNkUWZwaXd2blpiQzd3SVA1a2FqTzhMK2UrVUI5VjlKL3VoVGlYTDZSaUgwTWU3QVdER0lXWVRPeXFyT2cwSUdVQW5MVzRRbG5zazNXeHM5R0xxRWFYbU51QzVyUDdISlFOQytNZCtOOGlCNUhldlNPNE50V1NkR3VRTVptSFpuVkxvUWpIVXF0RGJlZ01nenhBdVlmTlZlYlFWVFJJRHBvUWVhUzYwUmovaDdicS9vcVJEOFhUMytJNGQ2UkxGOWdTVVExNTMweTd2Q1IxdlZ0ZmwwREFWZVJhcStWc3F1d29jeFB1SEJPSjhML01LcDlQUS90OHpyWDhiQjQxdXJRMHpBaVYyYWdnTXFkazBabWxneUpremNMQXBLaVZMLzB6UmhjUVVFOSsyZGVka2QwcmdKTklGcHBudnIyaklIdk9zdFo0aGVrK3pFc1F2blNEUUQ2UzRETlE1SHE2MDlXZXdaZFhzMDVHQWEwOGJ6VmJidVVzQlFHV3R3SU5aZzdNeklDUXFpWi92SmUwQmpRSGR6MDFLNXhIT2ZkQ0ZwVlJBMVhkdU1MNDNNUUxVWXdVMkJiNWtTQXZTQ0wyRHhYdUxrd052TTdwcGFPK3Q1cmZhUzZ0b2J2dW9VU3pralUvOWJnenp6amI5QkM1c0x1Z2JsUnVIT2VqNFFyeWRnWXZtTElWd3dabUoyTW1KejN2YjVOVm5ybUIySjZMeE9ienRZM2hNL21EUVdWVTJWNE5laXZFejREaG4yT3JqSElqSGZqRmNLTlZNWlU2U1d4YnlEQ3pnN29jcWR1MUdJS0doMlp2Q3BGWitkeWJCLzBYdlRBZFRvT09LMDdzbnkrRVVPdEQ2VU1kdkZaZWdnWWNERVlueHlocTAxVlhEQ2Ezd0tWQ1FJVWg4cVBEWngxcGdvV0c5eDFDd0pjQ1RHVkxtSVhKaG1WbGJMbWlJOGlXMGVqcWhnYk1oUlNLeVhNbGZiR0tUOVI3K2FtMnliL1dMQjFwL3FhVlRLNlF3blNrNGNyRGdwdWNRdEhiTDdYbFl0a0xLaWxLSDJ3ZEdTNW52b0RSWHhiZTh1RGIxRmtqcXZxSTlQR1p1MU10S3RnVHU5enp6d1ptWlJzd2Q1dG9HZUV5aWhjWEpmY2M4eWdoMGExR0dlVGhSUmg2dzJpOGJBR05iRHREKzh6a25TdlpJbFVCWUxxVGZTR1JRR3ZFbmwzUlhadnpHUG53L3FWS1paMHBvRWJEb3ZkY2E0KzZMZ1B4WThmQVhKRVN0dW9lc2F5V0dHTmd4QVlIVWhPZEdBTzcyRkpIak5LUWg4QWFyK0tZWmprbkJENllPd2RoWWdVOUh2dkFUVUtaMVUwQWMwL2RRT0krcmh5WEVXSy84ekIwdE0xb0x0ZFZPbnk0RjFHSFBzdjc4NnhwUGFlcUZ0VFdKNEdmK2VVSDlwWjBreW14VlVZcnlKQjVKT0ZIRkNWMHgycUpnZDl2RUVKWlBkVzNOajM2bTVmS1VORWliNlpXNkRRY0kyMGNPSlJLRmEzcEVGdHF3ZHlGSXl3VUhxbmdCT1NXZmxKcklCSjJNcDlaSFJia291djRyU3JGR3R3YkV4SjJDUXBCUGZLSzlyYTBhcVBDN2RhcC8xV1p2M2hYMzFmdDZhT2lEK2RCS2FFOElEZU9WOVZJTk9sNmRZRDVicHNrZFFnZ25tREVXY1B4SFdVZ2w2akdLRGZ5UlBDbXhSVkVKd1JlNUxndTVOajN6MnRJWElvZURWZTZibkpzeFNZOUtSSlpVdTBFclpvQk1VaTV6Zm8yU0hVTXczQWszZXk5VUR5d3F4YWsrTzh6SmxhWDE0ZjkyUGdadE1VTFpVYjZiZXJURTlzVXFOZVdwVCtreGZhSXNwYmJlUDdaUlE3MFNWN0VGNjI3MHpmcExXNmtRRGFLNWU4MHFmRXZUcXllckR4VGswcHQwS2V6K0dnZFdERzUwRVJJMUVKaWIwZS9OdWFzLzVHNVAvY1p6Q2VIaXBlbVVqb2FLRS8wWTNSbGpSMzNjdUo1TUtNRHQ4ZVpicVF3aElMUFNWbE85cXpyZG1aVkhzdFpTTmxVdzlDZGdwdW9MRkxtRXM0TFltb1FpN08zRjBkR2YzbkdpTkhacjJHdjk3OWcreloxaVdPTGhqL0gwLzJBc3ptd1dqWFRLdEVXSSt1QkpvTTkxZXdqQlIyUlBhUDdta2hCMlpsZ1AzUWovZkVTVUFvdG4yV0JELzNNekhSUmUvbGlUM3Vib3M0UlBURGs0NzE1blVnTncycVV6WS9jTE40VENpdXlRaitRc3h6WlMwcjNNUERJL1FVU0l5VWFRR0dxNUZZakpTTWV6Z3FhRDluM3RQYXN0SVBxVEQ0MmIvMlNTU05qbTIreFd3MklUQnVRdFk1alpidy9BTyszL2ROWWR6ZkZEQ3NrTkZBY29Ta09KMWNjVTJVTis3NHpONFJIUmZjYUwwaFNyYVJUR0lJMEJDdGNXSEt0QnNMMUMySTdzenc3cm5KUVNnSlVhdjFueFUwR3JMbCtRdVJkMk9rSVMvanVIZXk5RFBWVktHUDd6TldTSzF3OUFVb21jMnhCMFB6RTlQem16akRUbWJ1SUcyK1dOdFc0NzhFUTVEeml4VHN0TUxKMExyckhpNGFLQzBFeCtpTTVjNllIUEYrNHNuM3MwcXR2dkdGbk43OEF6aFJxNDZob3lGTVFuV05KTjhFTnJBeEZKV0EyRmVJQmdFUGp1L2t1ZTY2Smw0SFY2OS9ldGgvMFhNbHpvRUYyNy9qTGI2akNCY3NDWHlZS0xpcE9PTkc0WjNiN0tJOWc4QmNnbThoTTQ2ZDA0NkJIQ2MyMmxwNnhmdEdxT0dFdkVsc0hJSDkyU2cwRlhZYVJjbGx3b1NnY0JOWENhREl0SFVpbTdpbkVkN2RnUGlORjdSejJsM2cxeTI3ODFTMmplcmQ0dldMSVNTd2s4V1BCUFBoRGNqdyt6WmhZN0c1aVFyV05FSkVuTDI2WjNpZk9DeVNmQ0lGamxnUWVqSmVtbnhtNVJPSmNabnppbGtuc2p3aUNibmJaTERwWHEvVW4vUnNDRFFOK0xRVWp4THNraGRoQ0thcDhVVzRlaTZKek5IVStQYURNNmJXdVI2dExpZ24wcUFvbmN3MUY4RTVsbW9zbjhvaGlyVEFIbG03c1d1Sm1FSDR6dWQxbHdlNDI4UTlwV21PV3AyZ01TZ1YvRFhyZWlGTU1hNTVNa3JHU1lSWVpWeUpNbDFpMTBzZmdBbytnOFdDa2dHbkVib3JtVGQvdWlSNDVlVkVKODYyL013bGRZejhLODJLQ0dHNmdDeW0vYkFnNEFUVnlmWjMrUlFQK0RBTU1tUzVCMEhTSEkrem1WcytVU1hocnppd21HWkFLaE0zU3VBQzJWT0Y5RVpuWkluMlhaOEI2dU53enZqaStpOXBOcG1iaE96UkdoOVVsUTZuejRuaXhJOWx6MWJFbnNxZ241dTV4eGVFL3MybFhVSHFndEZHM2dwRWVjdTRBb0QwWERub2tBSEFqaFlTZzJRWlE0QVJXeGg3UU5XOGZHb1RRWElqejZmUGFwMzRSQVVzTGNxTjk0OGlGTHBORnQrS2ZPcFF3R3NhUk9EUnpJZEhVeHpwQjBaMGljclhWc3RpRk1Yd3cweTZqdG51dms3L1ZGOWNjUGE4MjBPeFJyZzJzSlM0ZGtaV2lQTVFwS0hMb2J2cEdmbnRVMisyWnNLUVErZE1xVkw0RFpkQjZTb20rYTdhZGh1QkxwTjI0R3pmVzdjY0Vrenl1ejAzN3IxcnUyL3pIOEVRWWI3V0FMME55dUlVcWQyUVhxQ2ptZmJ3V001TDVBMUNKcnNTN2pIRlZrd0FWdC9xTTl0UHc3cGFONWlnZmc3bkxaeHRBOHYrRG1VazFGNUR3WU8xaHp4NnBCbmUzREtSTUVWQlFhRjd0dU9uZDRVU2M5cTJieG5LUmhpVXFvY2FjZFNwVTNZeHlhaW4wS2RPMnVCSEQ0THFlaVg5UVlrS09lRHlYemN5WDlXbUZ0TjJvWU0xYWdEeWJjZzIzbXoyeHZ5cTh1WXh5NFRrN25kMmlZYXZsWStQcEFaSDRWVUFJYVJLRXpMT2dPOWJ4ZWVveVhnVnk4UTlaVUx2emdjTXhSNzVOOThtMDRJRUUycForYnRtUmMwclozREl1V1QyS1RsdXExano0ZW9KOVA2WVg3VFBqWHJTUjhNQzhKUTNqOTNSa1hkTFAvVWsxRTRYMkg5SURwb3F6WGZPdzE3ZW52N1g2VFB4dHB0KzhkSVVBNFJaOHI2MnIzYzNSS05kRFZLeGZRbXprMlROUS9Rc0dHeThZQldIem5aY3NNU2htSUovWkhEcjdnS0RubWExMjNYM05JMDNJdTl1VWlLUEZDd0R3SlcvWEtQYlQrWnR4VDBpUittWVV4dVRoWGVwMEU4UHorSzcvMnJJeUZ0RDNWN3FDM1p3NGgxWVo0ZzBncnQyV1ZIeGxWeG5uMDdoZThBcnNSbGNRbWh5ZVdXMnpEc1ZOQllSbEpUSlJNTmNFcDhxQ21ReERQRExMeW5mT1ljRXlRQXc2Ny9RUmlWRU11WFlYSDV1QnBmN3hpaEVXUFlKaTZ2d1YvZHAybVN0aUJkaldLSWpIZzlla2g2b2VadlY2OFF3YmU1RDVBb3RFZWJoaU9yVXlmUXMrdHZVVDZ2VGNVc1ovQThqM3VTa21Td2tlVFpGS0QwWldpQ3MrTVFUQ2oxZXdTZVlmSW5NWTZSTnVKbVZXcENzYUhYNXNlWFJSZjdVZGlCSXQ5VkNnZFhKa1E2OCtHazkvSWpRSlJBTEFJZXliMGhYOVdMQ1V1UUpsL1RXOWl2OXJ3em5GUUo0SE00Z1RmWFRPOXVVcEQyQ1NKTWZQMy94RUx2V1RwZkFlcWduM1VGemEwL3dlc1hmNVFSOXNjb0tIMndsWUNPRTg3MytmcG1JRHhrU25ySVhRd04wZlZ5Mmx4YlFnU0taM3lRR0ozUTJxUTQ5QlFjc0lQb2MxRVVUcExGUUFReHptdHd4d2pyYTJTL2xZR3Jjd0JLcmFpVWI1M1JXSm5IQWUxSXk2SkJaZThlMHpXZWc4Ylp1ODhlU000YmQydmFiWktyU0l4bWxob2NyMXFWbkd0bTdzQ2Y5c21FSEF3aDFNTnJCTlRMK2g0QjhjdVRyejlIM0lxd3dQK2VzQkEwS2lFQ2tkOG42MmFWc0dvb0x2OERFWVhUMWlTSU9ZREF6MFJxakdJMVZDVHc0c1dyUk1Ydis3ZWVoa3JHYk9oek5pa3Jta0FLTHE3VFNzMWcrcVJuNFFsZnJzV3NyNU1lSDYrRFRaVjFnNEFZaGlrYXh5VjkrNXVmSjFIMnIzeTREbm5SZEg3UHFMK3EwVmVIUHVLMndmSG9SRnZ2YjBONExjNFRlUDdQWHZTM0M4ZWphRktoeTRobDRyS3NiZjhQRzVNeE10NDB3SU5ZNTE4d0dlRUpDVlV4UGpUT1kvSWZsb0cvWXQ3UzFnZ0gxOGtVNW02Y2Q0R0lMaGoybWNtK0pCdDA3elEwdFZhQ0c4Wng4WGNMalpwdndUVGN0c3Z3K0JhMDR3T21Sa0VZY1RPT2cycmh1NlRYbmpRcEIzQkFYbmJockZxREw3MFdBV1RZWGpHcUM3akJMTWpzSndtMjBBNDM4Z3NjbnBBNDJTT1ZWQXEvby9TZHRBVUV0N3lQVWZGaWtheUo3cUZpYnptUjIzZmN4bm5PS21vT0Y4dGZ5ODZCU2oyaEN0UjMvZGdXa290eUVvV2FoMFZMdzJBbkFRdHVBdGFlRXNVZ2xtcmxuTjJ3S0ZZeFVFRFpVa0ZWTnVtbWdBT0xxcFRVUTFFeEdXZDlFa3JlYUVhN1ZKZWNQR0Zud3JvYzFMZFFOdUNtMno3RllpQjM1M21JS2dydFMxYXVkWVlTYWsrcVliUVZqUWluZjhJTG9iQ1JEU2IwZStDeTJUZ3lkdUNIaHQwSUlLTjJCRE1hK05pRXpnT2pRK0V6MVpRbG9SZ2piNVN4VkpodDA1RjV2eVlKdWlmYWpYampFczg1RnhVMjZ3OHpwcDJkK0RGZ0FlS2VCb1JDUGZGcWhiRVY3ZkVMcnFmbitKaCtaNnlHTHdaQ2dvQ2NhUGxBZFhoWXZPOTZPVVplTUp2bG9hMjFycUh5akREdEhLRUxMZU0wSG9pMStURm4xbGNnaVplUVZ5NEIydWhtT2YwT05PeVRXRi9yWVVsQ0c4MUZIRXllTTU3cU1zbVlVTWJmeDJNUm92ZVlQbXVsa2Rya1YzTVh1NlN4RFVTVEk5UkN5eVZuYnZPRU9LZUVrcElwVmhNRFZMUENsaFV3TCsyMlpXWkF1K2pBOVVQYTBPSGhSeEFTeU9hWlYzc1ltWTdtd0t0WnlpNWVtclRkYWZ6TzFWTGF0VTlva2w3VmlNMzZ1ZDlUdUlXL2FBTU1rMDhBekpPMUFoT1FDN3Z0VXUrVVhZMXJNc2JTVG9BUk4zaTM4T1R1T1U1UXBzWm1GMzZKb0VNckErU0QyaGpSdy9McUw5T3A2OEZEemJSVTZackdqZlBaS29xZlpENVM1RG9IV0dtUG9CU0JKUkZJVlhEVEVURFF0RTY1M21nU2I4aGpiWUpaOCtCb2VYL01vQzZPd3dHS1lhcVJJakJ2SDR1NEFGSnV1TXhhZE80YkdFYkNmbW1NYlJ6LzBOSVpCVXpYNnJCTEhBbGpIUFdkcFJ1dTNLMEpqbTFLRzhxTU9TYm1udS90ZHhXOXQySHQxTVpvNEVKQ0NSRHA1TTZIZThSZXVFdk1PdThtVUtKSGcxMEpBd21ROE5vYlZNVjdSem5JVS9GRThtcWlQZzhaNUR3NTFFK2JlMytDTFI4K0daeElORG1pZTAxdklWKzdJY2I5bEFjZHg1emYzTmlNZ2Z5Z1ZOK3pMaVltUldjNUlWalIraThJSTdleFdibHFraXFyTG1ydzRKWVdBanlkb2VvWmVnRkk1QXBRdGdSRjVMVkxjbUpHNXNKTk5yVTl1cERhcVNmRFRZQ2U3VldBS3MrWmlHb0pCbkhJcUZOV29TYnhHdjZYUXdVV2NLbno5TnZHakR1YnRYcVJjTkxpNzV0Wnpxb1hqMU50SlBtMDJHU1Z4R3p1SkxJRGxXeXBEenBIT0VaMDJxM2ZKbEZzZHR6QVliODFHU0YzcE93V1VLbk5vblR4QTB2R0Z6QSt1by9rb01QY2lMVG5NVHpadW5rSXFySlZTckIra1FWNXJqZmVOdTU4Y0JocW9EYXNCa0JSTTFDanlrVUY5MFluS1dINkROSUUwbWZlb25BblVQK2FGQUNZZU4rQmFWd3RsSUFuM0sybUFsamVUMnpFOEswUTBQbXBCRERIejRxcnI0dXNNYmwra3lCZjJtZjNuZ0MyOFpzMWtNZmVkYlNUSUh3T0VMdG94bDlKUG1jN21hemRVeEpjeHZSVTZpZHVDSGZnY0xuYmUwMUNPYlFVb3Jlcm1DWEtDWlFRQWNjNUlQTXdnS1lBZmFEcTEyR3h6ZnJVQnFPN0JLSVhDVU1YK0JBTnArZVAvNmlwMndyNXRWVFNXdWRISk5QS0NJR0JIQ0tnNjdnbFNIMXRxcnFzWnJvZlNkakx1NWlGUTFVcmxEZ2c5bE0wOXdBZ0kzUERiRHNKbWNQTXAzenJuYkxGbTRrYWc3WDhPQXZnZTNPdDMvem5oa2VQN2tDbzVPZE9PUFRXeEJYbDhmeWxYVnZqdjdPcEVnZ2JWWkFyWGlNM2RjNW1tV0kwZXlDR25MVlRYMmJMS3M4dU5CNy95Zm10T3A2WTBhTm5Nb1ZqakdITENTSDNTQzJJM1l2enRhVm1BUUNRQmZhTFgvNUpXb2h4aDZRLzNYUHdLODQ2cEJWeS9MbEpTMmdibVBERFdsU29aSzRZU2QvdmUzOWlkTzljM1c0V1V4NU91NHJQWjNSbEZYOVB5VnA0WXBFdVpKL1RpczZyRUNzUENQQTRKWW94Rk9nWDM3cHlaY3lOZDZQUTUrZEZ0WWgzWGdERlg4ZDhSRlV6a09ndldZNzNocFg5RUJIWFlYVWNCUXhPdzZjRUZIUGd2V3BTSzFOTjA4WkpSZm1udHNOdWw3ZlFQRVRhZnRwd0FTV00zdUcxUUFSdHE2U203TFNSV2FzMy9tODVER0VCUUhpSzV2eUppSXR5ZzgyZHpOcFZGbWVJSXJHYmhlTjNwTERweHpoU0svQ3dhRFBkZ1lYS0k2VW4wUExjdGVmSzVqMC8xN21Va05sRVo0RTlWMUlEYlpCYWw2VTl4YmIvM2pkRU45RnpqVFdIclFhZU9td2YrYXFMVHlRejFQVkdEOEVvS29TQUpWSjVKVDA1djFxdlF0aEtlSjVxSUhFZFNtazhpdVRJUW5UbGxzcFJKVWczbm0zalhOQXlIN0IxK0s0YWQwSGlOcDluY0xLNFZrV0NLMEx2dWlqSExmWW1NNDdER2xZbDIxdmJNS3AyMHdBcUt0WG1wdjNWeUJXNk1MNDZOTkdXNkU5QlhsR1pqbncwdnp3VnRXaHI4Vkw0bzZTUWZ2WlpWRjZyM0dIbnRVWGYrbjIvdExKMUFZZ3NtY1NhQ0xYWmlBZ1ZQM1M1OE1jd2g2WUJGbVhlK29LTW9uVUlUUzdLMS9zK1BYZkliZlBJSXpES2dVbXlmYThSMnZ0cnVobjUvOWJDOERrMThkZFUxeFJmc00wY1krc0kyUmhaRXlZb01PdHg1V1l4TVFUZCs2WXhGc05zSGRXSC9wbTlRLzBmVVdiQ3BLS0Z0QngvdVlNOGJUYWYrclpKdlZMTEdpM3k4UDVVb2xIWU9mcklXRDNGRUVqNno1YUVQc0lyM1VYYjNqL1dhVkFobFR0eklMQlNpZmd2M1JXcmk0K0VtNkNkcU9FWVpqc0diUDJOTTFWNmFNQnBmdHhNSnVQdnVVS09scXVJSU5nY2ZsZ2dteHRVV2Q2Tkp3K01hNVgzb0lKaEkvRDRReHRYdTRlYmdGeS9zYTdrU0ZoTlBHR2Y3VzVRQ1hoUndQaHlYNWpJRGQzMGRpQ3h5YnB4ZGpjTGFlcTAwdVdocERvMnF3RkszeTMvQVQwT3B1RzlHZ09XWC8xS090OEN3azN5MWcrRmZPaVFnaXNhVFRFbXlGT3FOVXBlcC82WTNOdE5vZ2c4ZGtJNmhpd2c3YVNDTnJXOWY0WnlSd0l4Ty9uMXdjeEV4TnB1SDgyWVl0M29iVURhbW9jZ0RWa2k1RDBGTWZMT3RWMFJjMVl3UVdMSnZidGt2VktrZ2J1R1NLaHYzQ1NhMjFKdkNFdjBjQkF1Q01tMFE2RUhlQjl2V0cvYk5lTFhTNUR4QmVqNzlaVVZibUxrUk9mK3g4T2d2b2w5TVFMeGtEcDFNUkJ3SjI3R0pickNiZk5wN3RqZlJRZWw5dFJwY2o0N2FMdmNKTVU1NUpnQVpEVXdleHc2Tk1VODRNNU4vd2RxZXYvVmFTRnRpME40MGxYbDM0b0oxNzlaZU4ySzQ5L3puZHNhRDA0TVdLNXRsZUJOMzZ3WWZMV3dmV3FSc2pGWXpwb0dDS096ZjlvcjRnWkFXM3o0TWhHd0RROXpPUXZrUHNqOWtmVkgxeDduckFWTUNSMGVMaGRYTUZnTzlOcWZIajNKcTNxb3hsaDhvbzJwWUFNWlVHUS9HcGtPZktBUjBENGp0a1pLd01WS0dGei9CSGZ1QWVQMFBhSXZzdE90VWJ2SEpoYkV3dzRYVTVYZXkrcHg2clNJdTltV2w1R1AzVHZ0R2xnMEg1d1AxMUxEODFlbHcxVnJYTGhwQzVLaTZYbWh1Z29BaFp3b0J4cHRzTXJKM2NXTjFMZ2RrTGp6UWw2WnpzYXplWkVBN2NGRDBPOU9mY3l1TzNjcUcyWmRoWEJ2enBSTGQwY0ZTME1uMHRRK0dtcnk2Zm0weFdicmhXbnNrd09FRmtZeHBUV3ptNWdyZ3VVZmhKOHJNSE40dnlrV0l3STQ2SzVQRDZybzVHNzlnTWhtakN6ZmQyT2pZMnE3TWFxbnJoYUVzRGl1NFFybGsvUnI1YXNYRDAza3p0QWZSdm9MaGN6ZWFSWWRHM2dsQ3JBZ1gzN1FjQnh0NVhxTzM3M0hwMFB6MDhnMjd0SXdnSFgzdmZyVk02aGJiQlA5bklybjJRcTVxL0lsT0w3VkpuQmE3Q2xuWmx2N2FmdlBkVzJuRmVVRmgzVHNGd3QwbUxvOUtvOWJiK2hPeDlvcnFKYVF4bk9tNitUMlQvM1k3OU1iZC9OTzk3dHhvUzdNWHN1ZDNWZ1c0NWdmSFdzUzlkRktOMmgzdFhKakJ1MWdOYUlvYTlEaThiQ3dDUjV6UGM0SlJIS0UyMUprUERZdHc5QWlpVjBHUkszVXRZc0lOc3JDZ2NaRHVyUnp6dlEzNURyaVRIR1ZxL0JXbFVyMVh6YWIvaG9vcVdnRm1pamxzUFFEaXZ1d1VzTU0zTWIrUU9rZ1NvVEtqRWk3RW8rY1ltdHF2WlBRQUYza1VqWTZldEhFTDNQR0JmVHVhY1dxaXNwdDBpd0dVdzNaVm5UVUUxY3hIZ29lczJOVkorWkM3dlkxSTkzWVlZaFpxRVNXMnk0ZlEyMXc1ekU4QzJNcGNJRzRuK0RXek9EQml0N0hqNVp1ZVR3dXZCbkhCbU5rY0lHSnluS3ZINEkxVThyVjAyVUJyL3hmODl0VFRWY1c4ZWVJMkRtQlE3T3FzWnZuK0NwTmtiRXRMclR6UWhUY0lYU3dhbEpMKytZeGl3Mjc2ZkFLRm85TVBTVmNTOXVvL2xobTVUZ2pVN2xhQllFVE5hZkJ5djZsZDczelNEakhkUFM3a2Jzd0p4OUxvSGNTMTVvQkRMZVFhYkIxYTQ0M2hWam85RUloT2Vsd09TUmdYcW93eFFPTTQ1YnRLTit3czdNUjdndmtOakVIdVRFMnhrVDJmblU2MDRjL0ozd3RSQ2QrbFJYU0p0dmp3VXdGeE1jR05mc0hRd1pRQmIvVy9heFdYeGF5cUwzMXVMa2RZU3p2cEhQY2dpc1dqYkZIdUF2Rkg2QUVrbnlJMFI5N3dadHhWWDBRWWlubXBLRFRhSlV3UUFnYXQ2OUFVUldsQ0hIaDNCWU0yekYvRU5heGJBWjA3cWJ4cmtDMjV0bHdYN2FpZUlpVGNjRDRWcjNpTkFpdkszTjJKUSt4VGpFdlRXM3JhejN3Zm9zR3I5eTZHanF3WFZJMlMwekVML2cvdjlpV2hGTWJ2Y1NaeHNKamcvWERXWWdKQnlDbXNpUGNqTi9lTW05NUpVNng4aVlqZlhRY2gvczV1OGpraHlNKzV0Y2YxWnRVekdOS2I5RHRsS3lwclBqb2xKaENwNmwwa3A3QXIvNElycERVS1VnRkpoYWdXeUpMVHJDKzFGMU8yVEpvdUk3WEtrVlc3dlpKSzdaSHNZOGM0Njk4S252d2hqM1N0OFhjeHpSSjhSeHhTUFB0SFVzQTdRaWRLKytUWExuRXdsMHdxVjROZjNaWmxSdElpdFZyYnI2cVpqTjBlSzY4VXQvaVJIUUFEU2FoOWJXZDc5MVczMmVudWhkTEU3VmRPMDV4cXA4RFB5UmhMc2VOMzVSRElnU2FrK2pIUnFoU2JDK3Jud0J4Yi9iTDRmS0x4WWlyaXBOL0ErKzljSnRQbGVWRm1jUkRjR3d0eUE0WklpbzcwdUJDWFYwZTU5OXBKb2xBSEI2Q0VpR01QSWpqdGpGandEem5rTWN4UGhRU2FnZGQweXkza2hKTEo5SnV0TUpKNURBYURTcXJxZWY5bDVvVkhMNVl4N3FiMDRjMXhPVmhrYlJRVzdOZkppeGEyc2ErWWN5OGVETXFLNzZ2eVNBZ0wwZUZHcTZkajBndk1GVHEzMTNROGJuMzUyMXlCSlRCZkhvd0dNNUNURWdGeitLWi9BNFJCN0hwV1k1TnFkNk9IbTNOTDExZjNQeDhPQnBNMldkbW5IRzBJdFJRTFFvN09acWJpdlNybXVKditYQmdiZlIwaWRqaU8xMFJUWXlNV29GK0RUbzRUb2hNWHl3NEVOK2tPc2duVzIyL2hkNi9Dem14c2Q1QTdENGR3VjBmdE5tTkh1MEJSWC9IVitjcnVBd1BZUmo0c25iSW9YK2VOeElVYXlrcE5kbDJ1dWVkSGsyVzlHdGM4TmN4WkxWdU5pTDZLNm0yQXdkWEFpL0IxQVdiWGFCUDVzcXhOSklNMU5pbEpyOFJ3SFFCRFpFVEVBcnhHVWlVa2RrZmo0WjJVNCs0ODJoQ1NzYkRWV3gyY1pad21EZlQrTThlZGJjdEpzTWxjekkxbU5jbGdZaUxDSDdYekQrayt0L2FMeUx1Z1lWaU9DWWxLUiszS0h0VUx0RjhRdVFOQ1hyYjBkTG1jWllkVyswN1BtUGVveDRna002R1dFS1JKZFlON0lkY2d4aEFwVHJCNjVhN2JUSDlzMVh4d2M3aHhpRE1IMmdaOUl1em4weWl2eWk2OVRJR1J6QlRDZDFEd2JkdjJURlM5MFJlMGVDTGFyUG1aVWwvb0hUWkxIeUw5eEZYNkx6dmh2T1V5bDZtMlFDUXFCUEFBMzB2OW9iTExTbXpwMnMrTU1FdllZdTdwZHozVndTSDdrQktQazZLL0N5K2pvM2dKUlhlMUJQeW5qU3MrZkpoYzJPL29sck5oL2JDQUNnVUFsV2xZbmNTRTJQdHJoOGIxVGV3eHhHOHdraXViQ0VYRk9NV3RJeXFzcFhaa3VpL3ZqSUR5eWx3R21wckV2dkdwM3paWit3RlNJWEpXRGpXUHlZNHBOWEdWaTdtN0xSQ1o4MWswdFRMY0ppQmVCakZvMzk5ZnFFaTRRKzg1enh5S203YXZ4VEJsVDMwUVU2Q2F1MFBvbEFXWnFVTEpCaWk3b3BDbXpVMm1yT3ZIRHFuOHJGNzFnc2NsVXkxWnduY1NvS1FsdmJZcGpzcEt4b0kyMDJHYkUzL3JlQ09HK0NvazlucFpBR2Q4cEMwL2p6U29hekU4OHJNZHRKM1BWdnUzK2FnRmx5VVdHV083V1VxSUUvWUUzNTBNQ011Q1RMNmZpU2U2Vkw1TS81V09Qckp0MEpDcGFSeW11WGo3RTVuWGZ4NUFoTWdienZWK3U5dDhhZlNNWVE3S3NSWFZKNEt1eThIYkZkamVBcWkxTnVhZm9SYmhTR21HNjlkbnFQdzhCcktVRUR4N1lTaWl4RTlpVERyc25UeHpkbXc4UEhHNGdDMXNPRnhuenZyZE8xSS9UdEN4NXhyOEd4dm5zTjI2YnhzNHdWZmxmalROYU1RYUNOT2R1THZPbWE5bnpzMEVla2lhZ25rd1FnWG9GZDZESzVzMHZnZllqYjh2RkpHRmpsUUpNSDQ3bk41eXZqWkVFUkJRcmF3bTFXMFlxamRsckR6ZE5yVm9kend3NW1ZcVRGV1FuODdZOEhvMzNwV3c4ZDFycWp5WVY0aUd5SC9peS8yVERaaXV0ekc5NDg2aDVDOVlkUTlBYmJFa2ZISW5qbTZLQ0VUdmJLRnVzL0VhY3RFT2FoczlBbmlkNjRaTFRqNmFXejVIRTFNdXFZSCs4SzloczhOYlBvNWNtWkNGOFU0d2MrVzU3Z3ArME0zZDJlbG5WUWtNYTZuN1VaM0pBMTlKeUtvL3JEL2cyK1NpZnVQSmROV0N2QXRSdHdGRjkvNzJJWkNQN0RhWFBJaG9FMXFCOUJ1NW9aOUhYdzR2U0hMNFBtVEN0NHdzZS9rTElFOFByRXdSNkxCNUVkNzdiR1NoWU9uREtjRkdBcmk3QUtYSXdpMCttdy94QXFpckdDeTJ3ZmxJMWN4V1I2cUtpdzRFcGxaSEorSFIvYTRSUW1jQmdLL1JWcC9VMEFYOFpaa2JiSGNjbk0yRkw5bWIzZ2xQbVFlOFJ4SEh4bWFYM2t1NkxDZzZyL0JGR1dxWkZpZjRIOWREZmJjcUdaVFJXUjl0SGNnQ1IzNUQzai8yWTVkcm1BWnFMR3F4Q2w3Wk8wbTZ4UWdjZHB2OEN2UEs3SW9sYXNVKzc5ZGVHUllPMEhEY211bU56S1UvQzl3Sy9LMlJJNllsY0RtdGY5YzVLTEh2YWZTNkowK2xvR0tCMFJtcnpsN1RqWXg5bnhKNmk4UUtwNE5WaXJkZnFFZnBYckdsWnF1M0RDYTY2a0RrckhZaGY0N0VIbmZnbXgwQ25GczdWUFROUUZYVVo4SUtkZnJtQzdPM25DK1l2bk1PMFFaTE9nTk9UTTNORHRoN2xsVVkrQU5Xd1BOZE84eW5zazQ2eDBxdUl0azNWcHFuT2ZiY0IvT3ZsVnNjZnc0bnZOS2EzRUlKWEloejZTYkJjSEFQMnRVR1ExSDZHUU9wdzhoSGFscVgwYUg0Y2tvRGpDZndrS0x1MDNuSTlMYU5YZ2N0VGRoT2N4WnlwQUN1U1FuekxlY1k0ZlltaXRzclZmaEwwdUY0THIrTXJYTDZocStxMjBUQmQwMUpsU05nN2RGb2lPdi85L0F0ekk0a1JuSnIxNmk4enk0Z1g3U0pwQWsxMzJkclhITE1lckZuSDBlYkpBNm80THRVbTk4ZU00TFBXS1ZmcC9maHJNS2NYRmNPQUZtV3lZL3VFcmZZcUlPYks1Zm10Z1R5NzJtNTVsZ1BSZUQ0WkRFamZUNGUwVHBRS2FYOHJVWkFtM2h0R3RJbGtlTG8xVWx6YnpjVGpyRkRuSWFrbHNIU0c4RldvUW9vSUhsV0o5cGFoZGozZHJpb1Y0UUpxUUlMdDFSQUcyZStveWdkeUp1d2dNWU1sRnhITGIwTjN2ZTFCbFVyUXBwRE5zdnBkUXgzU29McHo0UW8wZVRzeldsNjlkSjFhTEg3bG1XcnY4TElxZk5vc3NrVnQwdlUxRzNQaHg1cHlWUWRqek02VU53a3hjeG5CcXE0YWtaRmVYaVluWjFUL3FLMzAyYVFGeTRvVDJoSktaQ0xWUDRVZEkvQmVsVmNKQWwybSs1bVd5QzVPVFMyYTFjVTVvMGVxNFJyQ3JLREJjRW1rODJuQ2RhT2JPejcwMTRENi9sbGhwMytXUU1VR0pZUTBzZzhRcjI4RGFtNU9rR2lMZ0xVM3NKdVZITjZuczJmbEpIRHF1NytYcUlnMnF4UWhtRUk1a3ZlUHhqUkVRVHUrWEllK0pYdjNvVHZkd2I2R0lIYTJ0YTM3RDBzalhoUVUrV3NDLysyTDVLaGZ5NVJUNmhjVkNBaWdGa0JZa21XeWdrM0FGOXJQeWRvSFFyVWRzTmhRei9pbUE5SStTQ2RZTGxxN1g1bGp5SmhpNkpQQ2hNaHk4UWNHSnkrWUJrc3gzd0RvZGgydG9JenVjYzRwTVFMajVwSlNYaHJDZTBqQjB5WlNkL21HSEw4UXlTcm5aZ2ZJb0FQZmZCTkxXYmo4dGNHc1hDMDRGV0FJYlpVbmdaQUtwMjNERllEb3FrMjd5dXBsRzEyeWM4Tkg4T1hMQmhINWNRVWF3anpqN2cxRk9lUmNkRlY5VVh0b25yS3F2UmtiNEdveE40S0FTRHlDaUFMMzM4S3dUM2dkaUw1SDF6MEZZazZvaFlZUlU0b2R4ajJKaGxjMGF3UEh6eVpEcXdiS1lzUUR1Q3pUUHpXSURhTzdtNFZGeEYveDY2aVlLbmM4YU1xWlVkY25mTnhCTVBSZ0RDZ1NTcVlMNXlEdDVWejNTd3VDMXRONkJkNlhlWmo1a20zNm9XYVgvSEM3YWF4bGlnWU00YUZRdnVvMmZXYlNldjlydFlJb0RVMkFHU29lbHAyNzRvbkpCeXVBOUZpZnNDMlp1RytnNU9FaU1pVXEzL3ZOeHMySmlmcjJTaG9kVTllOGltcDRqYnplNEE0Qmg4SytaSWRaSC9Hb0ZUa0J0cTBXTHc4RkhhRFVaSXZXQ21HSGplVUZJaS9PWktibkR0M09OcFhVaGJmRmFuUHV3c2V6TjRUTTU4blZhQlFDRTd2Qm5ibTNHVldnUC9JdURhbU5BcmhCcEt4Z0cxZWNFM3c0cjFtajhQb05FK0M0d1NnWGZsQWwvUTQ4dWUzUXJ6OXYrRWEzbmZMSC9RUlczZ2ZoTVBqSkRQcTB2SmIvbXBWUkZyenpGaFBBaHhTcTJzOHkwV2NIenFGS1hQYnNFdE1taEl2ZENOVjFiWmh4NmVpWlI2bFBoV0lsWjhGVGcxdE9uOEROQkJwRHU3SWllNGN1ZWtJcWVQOE03dDZhVkp0STR3Nm5LSnF0RlMwSWlkMTIrelNLZ2Z1WW5UbTl3RlovbDNwckNtVklHZThmaEhsb25iWmNPU3FZQjN5M3kzejh2V0xad0tYa1dKMEJyUnM4YTBQNis3M2Nnb1JQN3hJM2tzWWsxYStoRWV3SGprZllKdlZ5ZEFkOW5NMlRWMXk0Z3F3S1czUmJzTGhSaTNTUTkrU0VGVkYxa0JZZE9kL0ZHTm5KVENEWFdENWJiMG9sVW5ob1M5K3BEODRNa2RpUjJOU3hjRWNDQmI1VUI1U0xwRDlQbC9UVENlME80OWNnVUdvSEtIY1hIR0Q4MVJnaWxaWmorZC9RcnF4UjN1cnM0MUhkTDhPTGg2SkRPVDk5UDhrTjBmeENsWjdOcUVZbkJnaDVDTWxqVVh3TWlRd21aTnJSdEpmbXloZUZrWFhla08rUmRLWlkrRHBwNUdwbW5kT1l3UklxTlFXOWU1elVjelB0ajZwTSthZnVRa0NIT1BQa0RGWVFqTloxV2FTZzFEWEdmeUxsLzBtdmtvTzVFNEJkQlJ2U2p1K3N1RWpNODJSMXhjRkRtZDF6M1R3WEhhbnRac3BpSndjUUZHYUlzbVFxOC9EWXk5d1N5KzBRcVB3SkRkcXM3TGtBNW9reExyMDUvTldLeCtXaGZwVEdhVVA2d25QS2wwdzBCbThKNTRuSUUxZGUvQTNaYUF2dzQ2clcxS084TklLZmJ2dXBRNlNGY3pmNy9IUTlWYithZm9QbWZlNUdPUlBFcDg2K2ZYR0RoQ2hOMlIxTFBsOHQ5RFJzQWpmMEd1eVRQNHZQbE1zL0FQS3Z3UVhxM3Z2dXRMVGFZUnlxdldZVkxNZm5iSW04dC95cjIyWFBsRUJsZENWc1YrL2RxSDFTN3NldjNIZGNxUnFpWTlhRUNmSWpQWXVTa01FNE9ha2VZZkR6TzdqR05RalhrbERWa1lsODlhc2J1bXdQNGlYU0tqSjFCYmVOWDJGdjMyOER1VERlYmF4OUF2NEZ6d2l4M253ek1IbVpuVUJMVmtmZDRGeVVCaUs5T1AyYlZXNldEblNCeXl3NEtSZWxTR0JyQ3V0VHJtNzlEbno5OGQyb1hQamVlVkp4ZEhqdUZZTGVFSGQwR1E5Q1NKOFk0UlJzRmt3TE0za2R5Wng0QzJGU3ZFWXJGandiR1Zjdzg0cDNiUEYrdmhzbVQybmtIczc0RU1zY0NuY3Q1VU0raFVXMHJUWnFaUkduQURwdHNNaVQ3cG9SblNodjdXYWpyMFpFMllKS21aejFmVXdzYWhxNUxodUZ4WnVqTnpRVVBJdmlnd09jcURGQmkrWTNuZDVmdlk0RDdBOXlSUFlFVXQ2ZjZ4S0t5dWp4ZDRwSUd3anp0ZERxSE9RaElJNzNZWjZEbk9XSmZWVmMvWmo3eWRCVFNPMDVJV3ZxRE5WZlRoZWRoWFZHUEd4ampVb1Rzc1BSeXVLeEYyblB6T0o3dlZoSVR0c0VzcXEyM3RjZ0ROaFBYeVFjL0FkNGExK3JlYzRpU0Z0cVAvVm42RlFWMUY1a0RHcmNqN0gxRkZtL3I3QW41QmNGdVJ4L2h6L21FaUt0UHRuWTVQbWFKeWpCbVRBYkZOVU50YnpJc05td1UwUVBvMnpRNGhKRkJSaXR4UU9EOTBhMjRERU42eUpMbzMyL1NoMTBYUjUycXVsbVpXVlp2YzgrYSt1bUNBZDQ2ZnhiRyt4RC9Scy8vTzBNSENEQU4va29JSllabHlTOXh5WSs2VlhESGlxSXUwdWtPWjEwRzhrVWZUWVFpdGozVGtrbms5TWZETzNCTU9lWWtYdFlmRzdaV0FWUXM2UGgrZWtqanREUFM5NmMvZ2Zza2xlYUpLeHgvVnBuRFhkS1NPL2o3QUszZ3l5WnA3YzhvTjIwT2h2a1NFWnVIbVBXZHZWaUZ3M1hyZ0VhSWdQb0pMSEE3UEdLYmFydUl5dkdXNFYzeVplOVZzYmZFaU5veGpEc0FVNmZCOWhiMDlUdDJwN25sM0x4Wm9SY2pKR3pPeGtQeWtjcGVhajRmSU55NVp1UVpIeDgvVDZFQTl1Z0hoL1p2VVJzR2dXLzBtLzRLYlNzSmcyRUN6UXErYkFtOWZqalozNWhRUkRXWWNkbmR6TEg1RXJWeWhiZHlNclU1WWJKUHc0MmR3MTZ6VlpDOVMyemhYSHhzR2ZnRHJiUkJGSTZBRzZNS2ZURVJjQTlPVmk0NjRyQ1ZNOThPd0M0NG5SMlk0NzhiZy9BMUh5TFNCUlowc0VYbXpYaTF0VmhVVUl4Z09QVWFGQUxTUlhvMmcrRnY0SFJsYXAxYk01a3BucHBNUlJrUmQ4eUI4UDFMak9JUEJ5N3l0NTRqRE1jMUp3Mmo4bmlmZEkwRGRVckdHNTUvTEVmRFhvcFlITXBWUUIwenhmYXZjc0RnWVhtZ3pHTUM4aW1DRnBZSUFXMHJMaldydDR5b0pMcmVkS0diY3poYVFjWjZvTDdUN2gzM0lER3EySXg1S1NURExBNGJtQm9FSFVaa0VDa05UZ2d2N3RWUGE2SWlMREVEL3ZUOWhyOFhwbHJNSWtXMUxhQ1dadmttR3Q5UkR6MEJsTEc3WFY0c1ZXQTZZSlBLK0xVQ3ozUHZKUDl6dE9DV2g3czVBYUNSTWY4cTRJeTZvbjJ5NUJ1RGI4QXIrcXVuUGRxdjNJVFBGeEV2aXRMcmZpeHhDaitERWNlVW1ZcEZLMWxOdE9wQmpXZEk5dURtSHNhWlNYZ2dCZ3ZEaEJSMW9qWnlRM0xLei9naDUvOHJGcUs4ckgvZ1hiaVdka1dmUUVtT2I4RDM5b1ZHWW9JbUNjU0NRUGI2N0x1akpJN1MzS2l3M2tPejJDbzJNU1ZaUXdoZlFMeDZWSE1RdkV5OExvdFJKbVp4N21mZ1RWeEVGSEZnMHBBQWRMbFhkSlNSZklEcUhQN2kyUEFhcWx3Z0xtVFdwTlJTTUVuSnNSVnl0TnNHZWxudFBONUNxbXhqamsrbExQTVMrcUZmcjVZK2lrcDljMTZJcnRtREcxZ20zN3FXTVNmeFMwbkZ6ZUluSmRsSGo1SytCNGM4NjFQRm1KbzNNODdnQXRQRWR4QXVrcElZdllVMHpGUTNXOHQvaGtHaklJL3NvbVA0aE1pbE9tQTIrdkRuY1Z1TDdDc1VzN0s5WG05QkcxeWlnejM2QzNuZHhPWXhlaUxxWkROZmpzZ21XSDYvRmtNWnJabVRycW5wcGdxQmNmdXpVamJzU3NXcDlaaXVMMlJOK3krWGtyd1BLUnhZNWNzRWJ0QSsxWmFEZTJrdW5haC9Dd3NsLzE3TmhSMnQ5eE4xMUJlUnR2bzd5MmRTWFhxa2hwbUw0Qm0yU1NFN3hKcDJQcC9RaHFEaFJiUGNEZCt4bXlYQVBaUFd3MmNjeWE3WjZLSWVMdEtNM21aRTdlR1Y3bTUzdkZLakJWdU94bVBSYmNMcGsvaHVHOTVIcFhWNDFUd1lmbUhNcmFhallod2Mra25JMXFWbVpVZ3YvanJXU2VoelVwMEJ2d3lyVmxSSDA3WmJueVp2N0NXcHVxTVo1b2x5M3R3aTlzWmx6TUEyMkFLeGVPeFRkNlR6Nm81MkhVZlFXaGl2SVJBQ3o1cTlLQk45S0JRWmprbnBGYzNXNzFKd3pKa0pmWm9oQlJ0UFlwWHJrWUFub1ZPVldodnBQaGhPQzlzZXB1NHNRNGhzMEtidHcyRVVTN2R2Vmt6K2l3UFFOR2dsay91RGlaQzVxS3p6SFZuSStNTE01NWFaNWxDL0FXWWh0SC9NdVhNZ01mSUlTdjlIaDFkTENSU1EyNHpZM2tXS09XNW41UUQzd051WGEybjh2aUF0Z0s4bUQzK3VKUDkwaWRRSE5La0tGVjVNR3I5UnNtcUl0NmxvMmp3eU82RS9uT0dNY2dTb2JPMWJZMVo1TFlaQm9VVnNoSlAyWDljazJ1Rlp4LzR0aFk2TEh6U0luSXlUMWxCUnRHUlNVa25FazNkSVN3RGxlM25WdzhzdWU4b0ZOSG9mQnUyWEtzVXlIMnJDc3crNlJScTh0WTh6RVV2cVNyNGIySnhMcGJEK0ZjZ0dJQXovRVRBT2d3VmUrZmRwd2RiUk04TWJBT0dKREhpd2FETXQ0QXY3Z2pFMEJYeExtM2VHaUlzVTNuQjNOaHgzUUl0U2ZXeE5HM09zdU9nRmdqQnFyQk9LL09FQ216RnNxZkN2RGRaaXVEeEQ2Wkkyd3hvMDVvOG1xdlFlY2lkZTZBYTNtSisrWnlmd05qZlhwMHVpa2dQY1h3UWpHbVY4TC9LNEFYQVlycDRMSWFaUnJ6YTFOaFNQTmgyV09zM3hWeXFMb2lBNEJ2R1VUR3N0aTU5cFUxSEdHQW03Nms2RkpTMjMrSjdBUU9WMXFFQ3hPckl1QVBFNUNGRjhIWTQ3b1BYL0tDd3I4Wk5XbHNxOHYxOGc0Y2tYbnUwb1ZXNTk3WVh1cG5yMWd5Y1k3RVBWUktUWm1BZTA0b1RJai9jbzZNY0p2Y0tMUFh0ZE9vWTNNWVVkUEFvS3prc2ovVEp0Rjl2ZzB0ditwRkdSNUhpSlB5aHc4Z3N5aUM2VlJVQy91eVVvcDB5YlRqMzdLa0szZjhlWUtMV3FsVjUrVGJEV3I2bTBLWEx5cXhDMmR6ZDZyT1ROWDZYbXRIczUybFgvWUppMk40YklNSEFaTkFIQWkvT3RITC8rMnRBVTNuY0U1Snp6VC9RZ0cvejQ3NGZiUWxJbE1WcnVFeCtDSTNOaWc0dXhwUzVQa0ExZk1mSTZia1ZQWStQMTM1RFpmMnREeVF5eXArRzZycTJxUnZqT08xN2JTSTM4aDJ4TnhWNmdIS1BCSHdJZDBBRVpqbis3cVdFK2hFL2gyclNMM2JSRTk1bDRIblQ4bmhPMTNKNmw5U04zWmhKeGZzeXptSnZSMlR1bHRRMjhROEpkYWZ5RTFGWno1dENXYzMwVUtvRDB3cFdPRyt2THZIRFdLd2p4cHZWNUtwNG5qZkx5cjZYMkM2TWxLdEYweXNyWTRBSnM1d3h2UjBiS0Q3dEFGWXd6dkpyeDJkU0tyMG9OUmU3UUhrcjJhSzNEZDh2M1N5VHFSbExmWEo4UUJ5S2J1ekxoYXJhNkt2cUsrQlFwejVkcS9pQlg5aXlHekNLRjd6ellhc3draGRZTjljMjRCZHdEcCt1WGc1WUtNSlZYa1VZbERLVDE1a2YwOUdVdnBPS2VwR1B2R2VqYTdkVFpkUzNsaHhLN0ZaUDRGS2VUc05wZ2wrTC9Rb2o3eHhJM3ZRcExlZURjSVVPdzFHNUtsdFVOODczMmtha3FWb1VlVXJhdFhPeDlGWTJHaHVBYlpKM0ZOZHdYUUpQOG9EZ1J1NHJ4RDhURFJJWEtaYWQ3MGJNR2l6Q1ozekxIUWNRWUs0Y3RrcjBEMzF3QnNKK3FML0ZqMGxGdXA2NHc5V09BdjdJaEt5bFQxejdJbEtGZFVhZXdrVlFsM3o4a2ZkWERTNGJ0TlJSdXREQWZSQktrTmtzL1JWZmhyTVBYd1lNSncwcjN3TWpJUUpHYXVqdkJqd0xONXd2dkl5b0lKSWovTjM3Wi9kLzdRWkxQVVBZOHZqTzZqbkJ0SFJyV3lEUWJOVnUxclFpVjVSbGpnOGVWc1ZqYTBFdkFiOHdIVFliUlN6ODY0UTlUVktySGlJMjhMZUt5MFJybkdZdHFIdFNPN1VKUDdZbU5aU1k1Zi9JU3loWmJ2ZWZ1SXg2dGdweWxVWTlVWW8yMHJQU2lOejI3MnJoYlptRXc4ZENkRUFBcmc1RnFvOFJBSCtmRnJDa09la2x6eEw4bnFmVDh5THNjQXNUMjlXc1FLTkx2Z0VLSTl6STN3NTJmcjZRcGk1ZHNZemZ4eHo0RmVYY1UyeUxpMk9tV3RZcFVTbEJpMUZvQ2piTGNOU0dmbWFOSGY4NE9ZZHZUdnZtWnlHK0w0eHBtcDBHOGc4VnF2aTJXcWg1MlY3OUJ4Ykc0TkcwRk5CUWN2dkZmejEvWlIxeTlpZWZ0WDZIRTdkaXFqcHVDN0ZuVWtNc3NGdzA3N04waHlIb0hJZjdIRnl4NHVjUkd0cm0wVXYwZkJMQjU4N2FBd1hTTjFRaXBUTkp3TkpmejBxTmVLK2E0MGdKTnRuTm1aNThsNURkSjdpcDdSK2VQb0REVzdpV0duSjg1ajhZaVFORTR6Umx6cUNSSW1xUXVxc20zYTUwMFlLZmdPTStjSVRqSllWaExYNTNRQ2pIenVDZTZWOTZkaEFXMk1TVGZJRE9hdzMxMUZOZU9tN1ZFSHlaUW9OOGtjWHQ4QllUaHNNUUY3ZUdhL2Jpc1REYThWbno4MUNaMXFacWUyUklNVUJOVGpyUkQ5dVpMb3dNWEF3N0c2Y1Z6OXR1OEM1bk5Od0dvRHhKcXM3N2IzQjlGVmVUZGpXRzhlME0rMlpVQWVyeE1icWtoNTh6QjRmZW4rRUUyNEk0bEZmTnlQVitKOS9HdHNvOVEzU0FjNzMwYXUxUS85RW1UekFWY0ppNWRRZzlUM0E0bEo0d1dPVW9kendBVVBPWDJ0WGtwL2hITnAxaHRHdTZOMURBNzZQcTkrNEc3c2prQWJGMCtHd0tVck9WOEVEelp0Y2ErZFZuTDZpdmJ6RElkeWxRTnZpMVQ4azFKMW1vQXhVa0RGQkVtU3hUSmp1QzZXS0J6VjZ0Ui9GdEE1RzV5NHpGR3ZUSzhPRWpwVlFJem16SHdXZHJ3SitEMXZmMHpmbEdhSXh5Wjkra3BhdDN5M1NxR0ZGUU5BMWVXVGhjSkNkSFlNWEpNaDhOclV5eWRlZy9oQS9tamJHL0tKUGx0RzhhSVZ2R1hXRFlxVFhQMHBOcHhncEh2ZGRQdXZqbm1ZdXZGL2dUa01jSWlCQTlJblRpWHJpdFYwWWllTHREZ0ZrU0svcGxyWkVxVVpjSXlvcFdlUGtMY2M5cHdwS2k3UEN5VzA3enJkcWJtV1ozK01rZFJrNEhjVG9iMjZUSFhtN3FveHBIaDB4dTV5Q3hlV0NIWUw1M2hRbW9PRk12bEFqaFdpTm1ocVYzWmVTUDlOdnhFZUdNdi9NSzRzcWdzVUFuV0w0NmF0ZjJVMWJZYWVnbFA0N2VsR0NsTXIvTUNpMGxiVlNqNk9SVjBuc1lhRTVSN0JTd1k2bUV4Yi94WmxFU1BQc2VHb1k3WnJGZHlvakFJWU0wM1kxSUFRVlNaaWpzTGF5REx6YnYxczFDbnBRcXh3RUZ1OG50dGVrYU5OU1VKbExTRW1qUmh3ZDdWd0RGNkhpWWV1VmlwaTIvZEY1M21GQUVsc0dpN1dnQTJZSXBSWnpMQ0g5UkRtRHYrbFFDN1lnTkpvR3J2dXBXSnE4R0hGSmdHNXBCV3lBMk9rSTcwem9zWlozWnU1R0dwR252OEt5ci9WVGxlclFVbHlXV01DOHFObVA2NzA1Y1kwVTMxRlgxRVlFRUdZQ29LbmgyWjRIdTRXVkFWMFNRMjdySlAvR2dRUVB5L1VlSUdLOXpvd0xhZ29vcVZNZ3I5TldwVXY3OEdhdjZEVHJ5M0VFTUNBUDZvcEkxdzYwRjkrVlhPaWN3ZEhBYkl0WUY1MlFDcGZZZ1NFV2s2TnBLVHpSSThOSVU5MUNzU2t4SjI2TWhnYmZlYlB6azN6Yk9FeThjYkl2MEkycTR4Z0pGWWYzUEY5VVBpaGRlbS9lT1pMN1ZFdVFZV05DaUJRUEMyL2dCK3QrVDEwb0ZqZm1EbWNnR3p3c25jUnRITW1MS1RhN09ic2dzWG0xY2ZBeFdLdVJBSXQ2MkpwNGg4Ym13STdwaS9EaDdQenIzMHJoS0FTdmpyS2N6R0dEZkwvbUg1a2VxbnlSK1FGdmNCUll0RXNRQnh6cXVDUWJmTnQ2anIwaDlPZUF3cFlscUtHamlVdkJGRVp1eFhFR1NSUngyUUJaUG91NEM4bnp2R0xYVnRHZ3p2K1UzaitGQnFjWDZIZGJCcmN4ZEt5bFNFWVRPSFVCVVUwOHJqTVlpek42WnFDVnhEY0tBV0ZqaUlzaGxSUWtybDRDWlpHcXkrbkFacUo3dlYyQ3YzTVdQY1FmZWhpeDZmd2piOXdCR1BDNmt6SHFWVU9CVGZrMWQwbWIrbE1MYmdsYkRlaGtOdnVCdEgyS21RVG5hcjVLR29veXRDNFFKTzQ4Z3JpcDJKNFJDZlh4UEg4MlprVm0zNnR0MEVnSy94SW10Ni8yOUYrYnJXSjlMYTg4RE5yNTJTalQ0WkJIWnRiLzJVcDBiR0p1U0Z1aXduS0JsMXY1TzJJcGJMZUFWWkZKV0ZXL0QxckZoUGNuaG5yaStpdnZsa3dpYndYMmN2WlZRR0VNc0o5aXR5d2owQUY5MmdBZGowT2ozeEVyclh1aC95cjc5aVR5N2l0dkJjWEZzdTUyRk0ydktKNzg3TlZSRlArNWxXNFFsWE81a1NFQ2Z3NnFKTTUvNzBHdUZFNnlWTmlWTVUwU2pHdEhlOUxwU3JwUi9FcDNhV1BTUTBEYVNWM2ZwL2lJS2UxRUhqclFKdzFSS3BGb2E4OE81bzVkem1BTkhQTy9YRy90SG94V1U5ZmJ5T293ZUlNRm5qWlBYc1ZtaER5NTRXbE90eFlWSU1udjR3bURVUk14NDhob3Azby9Vd2lweFIxNGtvdW5IMEhoMDJlYUFkTE5zc1BGUEZtaU5qR21aZWk3ekUyTHhpN21xZlFBMzRrVUxqckVzM0JLQ0lNNk1TMncwbWVqL0ltQ3plc2ZwcklmTU9aUkpYelU0MGgzRjA0NjJ6YmVwYk5xc2ZjMTg0cWFSSG9FYm9kRXhwK3BGaGNTWFJYSWtzQmpxTm12MUhiSllheWdBaW9lOG84d0ovRm1QUlpYcmFZSVlQejNReXY0dktzM0YzSERKSXljazFEVmhLNFRMS3cvUnZDR0Y3aTFUb1VHdnBDVXRuQktkT1VOZmlHa2hDMTNQYngyYmRabE80NGcvRlhCZzJwMW1URWR1TkEweFZWNk9jLzJKTjhzT2hwaVJVbXJGTDRjTUxPbGFCZS9Qem9xWXJtQ2lzeUgzUTBoN3Q4bzhhQmpaOVp4S1BPSHJKVzU4UmxwZHVBOFFTOGxJWUg0SnNMUDlQaFNGVXJVQys3NGRBVW5XYklvaUN1NnFHV1FGZDVhUllvaWRvWTJ6akVOSFMwdEU3WVJUaWdKSnVXQXZMZ0RtUW1jYndKd09wRlFTTTVGcGYrYUllV0dEUklUNDQ3QWZUS1BhTktuQ0tQeXBJY2xleDJLWlF0eDdFSFNVV3ErTzhxamtPM2RhN0hDTC9LSFNXVVY2ajhVY25zbFE0UG0vWlNTTXU2ZDFoTnFCVngra1BYZHJBYXlmOFN4ZEM0Q0t0Z2I0Ny8wTGZNejFnTkFDcWd4Y1ZpWHg0NHVlSWJWUzR4czNnL056QWFNaEgveDdHU3Z0Z1B1WnBYY3AwWXFsMytLeTgzY1ByMWxBU3J0YTVJaU1NRjl2NWVmMHAwQ1k3eHhFbE44UEtXOTZXOFdTUy9BRjI3RUNlMEhnT3crOWFSRTNxR244NzZWTFg4Uy9odld1eFhxU083MzFEM25sT2N1eXRISWFlV2s0NlFCT0pDNkc4eVhvN2VnZ3BFTGZNWW5VcFd4ZTVUN0tJY2R6QXBKeVRpdUc3NnJsU3BndHlFRXo2TmgxbytSbExDamlSTTJha3M0bTRGVFNYMVpaVnptTFJZTDFjT0tocjFHb01vMmFCd2dCcWhCSHJSRHVnaVl2N3R4dks1V29wKzlqdHRkRk4xd3BnNWRZK1dNWjZIUnhuRXJib1BwQ1VDQXk5QXhnZ1ZGK2dQSGV1cWhKaVE3WlZHeUx0UUVtZ0JUTktyclF5c05pYmQ1WmNwaDFRQWVmZmpxU1g4enV0WVlheG05MTZZMFV2bFFjNkxobGErTXlnWVNwNVZaOXVFUWpoTGd3SkxGQW53d0E2enJ3bXFpcnNoQWQ0dVNVK255MGlHeE9QMW5sUDJyVk5zd3dFdW1mb1Yva2gxRHQyblJxbGFOMnlDWm96aldvQ3lCS3ROdmU0NGZrYXhlcEJOQ3EyclRBRVVGWmZvUjlmdUcvK05zWlpSMng1MzNhQmdSZUJKRHo4L09sZ3FYcm9lUVZCbjlrUmZDTEhpR0VkZm50cHpkMEpHVHN6OU80eXh2VUw1ekRqTE55VGNPSnNBeWRHYjdibDd2MmVKZWlWRkdybEVvVjc5N2JrV3pTbDZyTTEzOWdUMm05YWdPa013N2oxbVZTQ1BjSmFhcVFROUVHQ2sxSy9WckRWZ3VkZHMwOE1XcnlicHRwM28rRTNtWWxjZ2w1YWIrVkJhd2Foem9IZk43U3ZpVi9mVUtXT1Q3dXBxcS9VME5JeGcrY3FLaTgxRUNicW9oMmIvNFNPcy85SDBtWmhCU0wyREI1bTJmWVRFcFJRZVk2N3puTmJKV2VsdkJYUWNrVS91dnVGZkcwaGwzamIrUGhzR3BTYUI0MTJ3NnlmbTUrS1VhQi92T1NMdTV2VXpsR1J0WGdMZzM0ODFWMlYyWi9Mam9vcVVLYVRGbE5QbXcvQUUwQklGaVVtbGdHRUtBay9ZZGdxQ3JXV2JIYW1YWGNyL09wdlFHVDNYMGt3UVVzSlZRMUdCUFdrd2sybTNOVVJ5ellQc3YwZ2g5bnZTYjBBMS9CWWJ4ZEFJT3NhMnhBaFJDQTFNK2gxWTRjZ1hDODd3Sm5qZmt6S2MxbllCTmhwSGdkV1AyOTlrUDljQjgwcW4rRkwxRElYaEl1VHlLV1FQa2kzRTNJZUl4RDlaOVZkOEdhUEFmZGhVWW14QmRJYS8wTTl4K1phTU90TlgzcUpNSjJBeDN5WU9vaWV1c0pBcmJaQ2l2djFxenRpUzNINGpUZ2xqd1ZFekxhT0FrK3Jrc1BmaDdSYjU0V1pLb0tjNXQvVDVDRjJ0TmE5WTJ3YWJFc3IrSE84UUhaOENOWGNvbHFhYTNPZ0RLN0VQWWNqN0ZJbWd6YWVHYUlmYlFuNStiQjFyTlN3WlRLTVVpR1MxZUlJSmlTcm44YXFDTjI2b2VIQlNDT0c2TWlvNGZROFlIaTV6S0RJdGovTG9TM2Q2bFVJdmZhWmZBcTY1RHQySktLNlpBMFpCMXpUTUdXV0lyNW1oZE1yak9YUUVJRjZPZ2pwb0YwSGZyNk8wUlVPM0hPMWhSSWZybGNQTG9QeTlLdTVzYWlFSHdXWElwYVB1L01yK1EzNkFpZEFyMzlWTDVjQThWSExXaWVKYzltenN6Rk8zRTVVQVJtMWVac05tclNLMlpRdUxTRFlxUXZvbHo3UkEzVExzdEZwM2ZWL2dFam0yNG9YU1diR3ZLMjBKbVhaTGNIUTF2NXJqRWUrVjc3c2FiVVNyS04xbXBFbi8xd05PUjIyOXJReDVRbVB0ZWgvamIwVkJzbjdwQ0t4bzNQeEV1TlF4bzRiQzZ4TnBCVjA0eVRNVHpLbDdkcWE3eDBWM1NXUlNqTVRqR0pYZ1cvNWliZll6Z3gwbld4M01qb1MzZ0Jyb1NSTkNvcW9kOXdRV21NTkRHV3BzalVkRGdqdkNyZ0RZcTBidmZaSjYxY3ZtK2pDaGliNk81aXVtTlEzYzlyZktZdGVDRDJxVGRpTDRwTW56Vnc1QWt1eDJFamZOQ1d6OWwyM2pTRUdBa0UydmhRK3EyK2xHRFgySmlBN1lpQWhLWEdHTWFQajJoelp0MGJMRWZ3b29XTzZBWndMWlRLa3lwUTJUamt3YTl4UVRPRGJGSlo1L3FSN2w4Y005UlY4c3BEWUhpYUN5RGhIdVZab0JKbkZoZFZLaUp0V3RuSEpiRXhYb3lDanVlN29RR2g5K2MzcjFSWm9KYVlUaFlOQTdYZ3JaRFNhSGFYVUtLbEsvMHh1N0wzR0Q3ay9vT0lyT2s3N1dOdEhGLzZOUFl5ZENURzRySGpGM2RVRXpsRjc1TnlFaDFjck1YMVRNMnNxdGpjWlpvMkIzQitGK0xURFFGUkplblNteC8wdmFoNHEweEJYSXVjc3E3d1grc1FyZW8xWUM0cWMzU3pXcnFkTkxtVHdiTEJDMGY1dGtTR3FKY29qK0pnZnFUQUJFMWhGTlNMQldYOGFQa2x2WFZ0L0dzUkJ3VHYzeDdQOFdEaHlBd1BjeDhWOTM0TnR1SDRHMkYzVkZURUtnR21MbG8xUm1yWjdxZG8wN3ZyTkpuVWhtaEtldmQ1cXBoYm84bnh3UUx1MzkzdXQrMFhJbDdpdE9jNFRVYitacEIyS2F3NlhUSjd5K1lKTzFnVmhJd2U0TFpERkFZVzlGdHc0YUhvWmQ3V1dHZWtmK2xWZFZDZGtnc3ZBemhsQWwrUUlpNmJaZWhYTkpmSno2STVCbGFLb2E4d2U1T3dCRnFxVmRVelpiL3orYi94NFluOTJGOEJLU3pJUlFjL3RIOG9lRHhVVEp1YzF1ZnBwdkZYSElqYlF6SWg5L3NpTTEwUkN5MFJJOEgydG0vMktRNUNjazI5ZUowNzdDZ0ZPQ002TndsMDZlck01UHM0NDQ2YStXWHBpQ1VTR3NROXliNVk1a1Q3QnJWQnpKc0hzSkFYd216SjJ3YWoxRnhLWHNCaFdQT0dTNGJ4T3JQUGpnM1h0djQ0Y2d0MkpyRUhYSTJzLzBYc3JmMVM3cVV3eDUwMWFncDdWcWhUUktjK0p0Q1ByMmVoK1NzY3lTdkxjeHNvZ2pwYnhaQVRwOE03RlVudTF1VzdaSVdQUldCZERUeGxRd0F3S01KVWhycUFKZkxzM29nRTlCRzRrS2gxczh4TFdHV2dVMGZJRlp4eHpNNWpQODZxaThHbFhMS0xTNVk1Kzd0M0pvVHMvZTZMVDdNZVpPL3o2QTFDN3RaOG96M0RjZGkwOU5RckQ3Nm1ZTmhLT2F0L1JETTV3Y0FtbXpxK1pFaDVFUnhYYUFqL1NaNEwyaEQ5cXVmWjZBdUVRaEExRk9FUDlFRmt1dkFFdll6Wk9oSTBoV0ZjSFhteElsU2ZsVUhPclNPV0VSbDlRcEcyYTVsZENJRkk3SVNQcEtnSjBEb3YrMldNdExJcUFsSnFYbnRSOWNmNTlGZTVOQ2N2bzFOc1R4WXFlK2NtOEZhYnBVLzNkUFN4N0tLekg0d0NqaC9SZ1pYSGY4anp2N3JCdFVtbUYvenFWRzF1SHBNV0M5by9iblRXVnpZN2ZxdjdWaEp3czNwZndBd1JpdE40R3U4c3dremhzalB0NjJvRFoxWktPTWdyVlMyblpzeWZrQ05FYzN3UzE0MHJ2TVlRalhjNkdSUlVzalRiclR3cVJDVFpETWVIcThlejlTZStiQTlIcEQ4UUFQbTJlY2RRL29CUFlHbzhkK1lqYXo2ckpsbnErV2xFMkJadHIzb3p4TGVnWVJqOXFLWWFkMmQwNW1nZGpvbitDVThmVzVWK3hHbGl6SlIvdE9HQ1ZHSnVFVjIxRlNwTEgrK2pvMjRWbE1oWG9nTnVoM3k0Z2dsYjhhUG9IWnFsWlk1ZDdTTEt3cm1HZG9PemVid3FjeFBxVzlQbG9pTG5zSVp2cjBtdGhwM0xOelQwc2Joa1hzNExIWTJ0RmpjcnJ3Q2YvR3NDVG44UkN1ZTFKSkFGR3FDUUJvRDJOUkg2RW1QOUlBMzRUMzdXU1RXMXV1dWVoMzF4NE9EaTMvSmRJM1dXa3NaQjFCRE1ZWEx3M3VhVkx5WU12T3hBc0FMMXk2cTJaVndBeVZnZHI3bEdvWUNld0g2Nkg3RXVDaWp2OXRwVXA1UzUwV0lCL3N5MGF4NGoxNUJVZ2ZBV3RnanhLYWhvYXZ4MDRjOG9sSXhTSmxUczBqVzk4c0pvT3o0UDRMQklPd3VZUlhtSzdhejlHYjhkZkJxcWhJdytTNnhBMWtkblkveWsvRkxxZ0prUVNOZWpsTXpxUlg3TTVBNm1oMFpXK25NaVNHcnBOZ3E0cU5UUUVPNkpBeElKTEsyemRmd3dOdEQ0Wm93YktFZ3VDM1lQQ05WQmJCMEhBQmxzYUF0VTNnaWI2MWVoOG1zbDBVU2ppb0ZkMFJCVm9wWGEybXRLbkJXSVRJdWJtNjdOSEVCZE4xa3Q3Qno3aWpBUDBkcmJEa21XQ3p5bExkSU9rV2pNa0U1RTBBYUJtTDJ6MVFOcVpXR0Y3UUsrbmFCQ1IzM3VXY2VxcUJaZHE2QmxNZ0hsU2ZoczduVXBBNzRlV3o0L1MwTjJNdzhKT2NrK2loSzE1UjJGTjBCTWZMY24vZVhCNUZBM2dLSlg2QlBqMTFSdmNvY3NSQ0JQR0hpOGJPcCt0ZlBacklOUTdGd1F4VG1DVmt3TXExYU5CMkxBNTRDT0R4dWl5eVZDNzNKTXhTSElQazYxVUlORnhmZ2Q2aXYwcUlxZmpPU05pWXk5UVJITVNFSlJaNHV0MG1ucExDSGhTU1Q0YVRZSUdYdzU2TktkTk5lYkMvcDFZekoycGtKcjhad2REYkx6Q2VpbUh2bm9vaEtIQXlCUkpTUm10T2w3QzZQeHh0K3ZGa3htdk5Qd1pzVWlFZE5sV0l1Q1oxVlBZWVc0QjY3ZHR0dzdIdm1rdDNzTEpTbHUrVEZjeHI4b1crNVRmQ1NkUmNmRk5hU1p6UWNaL0p2K0k4NFFkaWpnUTRSRGlwZEcvbDgybW5jUXA0MnBkRG9uMURCVWFFeGwrVjc0MzZ3dFo4dld3QURObGEraVYzclE2N0pQSElBclJrTzZMeDA0OFFtQXp1SkFRa2tYeGxVZDdxaHB2Q01abk84QVJvdGFhS2s4WFRvSVFkK0FKbW9VNk9XU0VXaFBKSzVKWG92TmZqSTdzQTZtSXMwWVY2elhBTFJCT0dNeE9lNWFMQ1BkTU5uM2ZjTzZHNVFzNWdZNFVob0xRU0tFdG9pVGZ6OWQ2YUdoQ0JEK3hIN0ExcVA3ckd2Nm41L0JCRDI2RnQybVFqeUdFSWlLWXRuU1ZtQWF3eUV6dVUrb0doSVRxeGsvZUJicW5udC9TZGQydmZUNmJZVWJreStpQXRXeWVrQ1lZaDNaUEZFb2ptakFlczV6Zzk5QlFxVVRzVXZNY3NiSmZMeFdXdDYzZEFZdnRoUXB1L1ptY2VVcWJkUFl3Zzc5cGZMOW1sb0NmbFhlZkM4L3NiNzhwQVZ0aGxBbWtlMG4vUWxQUFYyTTBuVUIvMVVEMlpoUWRteE93elBCTWRkWUcyWFNXdUlZZ2JXazFxWVM0OHc5dnU0ejRiaXc1cXFtc1JWbWJQSmczZjlaNUp0bTFFYnM1QjJoSndDT0o0aEFBTG5teEVuZzJFRkV3b2dKMzBzakpCY1k0R1FHR2wzL3c4UEJGNlpsaElZSnJudWtpUHluTmg2cEFlRjBTVzEvSFFDcFJUYmxEMUdIRDN0Rld6VDB6eThoQWs3dktPZnhQU0FOVk5tcFNsMWh4K1dzZ0pRdGgveU5jTHNOUnlxcGViRkQyckk3M2tWdVdBeS9TTk41WEI4U3BkYWZDN2FEZmpUbHJ0NDhHZy9MTStJTDlDSUNnN2dTbVlLQ1d3eDVWd3YyS2lyR09LanhtTkRncHBPb1J2QURyQXQ2S1hEVkFHSHFueHdjU2hhNUZuTXlTVGtGV2psK0Zma1VpdloxOVZGejNVeXdDaVM0dG1PbFBGa1p5aVI0SC92SGJjdjYyV1NaM1lXNFd6b25iZkthaEc1UUpUc2ZHbW9JMXN6R2UyMkJQdEUxMGpFSUwzYk1MbUpoT0RTYzF6WmN2Z3RHRjdpT2phQXVENWhtU0ZyNlR6RWJWTVdNbEliTFA5dUJnVlNjSjJTS2R0MzRrS3lvZlBScXFldjM5eHZBZlFaY2h3VXpXcXVRcExjUGNDUUVFVHpJOVpob1lZNDBBekxWNERuTkdxNklEOU91SzhiZXJIZTRtQko5YUJ6alBpa3NzdTVsSzV3MnU5V1czUVk2YUdGdEt5eVdBUExEa1lvdnlUVHppaVFCbldoOG5GWVlRcFcvUFNQeEo0anpQNVNOS3JYNUFLRDA0Smt1akt4RDFxb3lYM0p1aEhDak5YR3hZR2s4S2Y4M2V5c2p1d0t5V1BWOE05bktUMWE5cktaVkJHRUJoeTF2aVhTL2ZBc1Y5MGpPWm9OZWdRSndhS1dqcUhRaFRwVmE5bWdHaXl1UGEvZHpKb0pnMUhsRmRId0wwNlk0SjBhVnBhY1NtSFJzck5ZQnN4eGM3R3VOTER3UzNDNjRKMnk4eW1YWVhscUdJN2g4Y2JDbHNEZ3EwWTBsOHJsNENITWlyLzE1MWNML00vc0IrV3MrSVllNEJoUmt3aThTMVdYOThjL2tlMWpBaFM0N2FoaVI2UGttSWFYa0Z0bUdjVVZUa0VEc1BoRGQ1bnhGWkFXK0hqL25xQ3VrODIxS3pLWkVWUTVZNTFieENUV25DU0JIdm9LWTVyZVpReFNBYlk4SkI0Y2hXeGhPWlJTeGF5TTllaWpDYVppc2szNWRTeUdweXVod2dLZzB0ZmJzNGdJNU5sUDFSaEVuMWdpOFhTTERXd1JES3N1VzRsMk5HSExtalRoQjJvSisyQTk2M2VCa1pHN0x6WTF5anRVK0FrQ0xiRDczc3hLTkRXT2x0cXZiT25PZDZYYmlnUkxjb1lnVHlGbktxZ2dUbVlHRWNqUnMzN1NERi95VXRFQi9VbWttOVZPR1pRYlZ3dXUydkJJL3RGZjlpUWswYUlvTTBpdkpBemxTVzdtaTFYQUtZTXJkTVdrRENKRVVkNzYzK1hzZzYxN0RRUDNORjZCMTc1OHM2RytLMlk5QU0xTVlsU1JBa3VVUE9uK3crK2N4dE5yV2w2ZXNPSnpPbVZvYklhc2RJVWxhNUxvYmdlQXg1V1l4YU5reFY1LzZ5cjRYb1FkVHdUVXNNcTVOSElFdDVsZEI2K2wreDc5T25iTGtTT05SSjBPRFdDSDZpZ2VuUFNoM1hPSVNXa1k3YzlsZ28wWm4zRGdIVnFSaERVdytDTzF1eG1FMmVkL202ME1WakZoODAvMWhZTUJ1YXp4OHh3WEk5NFlNcFptaW5GdTNpZWpNT1BMZExzbUZEUHJXci92UTFHY21qdFk1QVovTkc1UFU4S2RmS1prek9Ba3JkMHNMeGJZYXRPTUNQbGkwUm9iZHI0dUNreGM4RVlRWjRROUtyK05yWXEwU3J4a0NNemxidU5OS1dZcFVoSGdWbisxejMwNEw3R0NPaG1aVlhSV1lmOER1VHNKQXc5NEJhNU41T1JlYnNkYlUyZHc5djhPbVdNN2tROGhISFdPd3A0U3NpRDZsV2F2QTlwb2ZLeVZMbTU1ZGxQU2FleFppMS9sMTVnUmJxWWFIUVV4bjlDdmU2VkhQQmpQOEtWYnVmTFIrRm1TdGlkM1lLL1g3RXJ1eGU5N3VNclA2VlV6SE5BbGRaQ2NjN2F5ckNPT0pnZ0N5dzBjTkdkWCtGRVpuZ1hVbFhqbTNJNEpzUEl3ZVZYNzhUZHF4a3d5YXA5RVJlaTRyejI0UFBxTTVsbXVoNWlRYTNCQ2Q0Q0JGY042ME0zMG01OFQvcURHVFJNdHJReVdrd0toME1QMDNNMDdnbjRHaEQ4cGZWUjdLNEdha0xIdUw3SEllM1ZVMHFpSStMTEpHdGlqd0RKWkFTRm04Uk9jWnJSdU9uenlpZklleFdNMVlmeEowcHdKSzJVZTdJRk42cnR6VmltR2Nya2cybmw4RDJPK1hzemt3MHI2bFh5aXVUNzBUZjRiU2YwZmpjQS9OMmhZdW9ITnZLbGFOWGd4VGd3VWVSMkxzdmljajFjZEJLZ0dWUityR0FWd1R6c25oU0VaMEFmekpLMG5odUIyTGhRY0ZtZnc2SExST0ZXWGdkZHBpS0hLQ1RUVmE1RjUwcytEL1hTUDdPL05UQks3YUVFaTFzMnVMSXJDRE85RzhFUjdybDN0dHZ1VGE4djVtNFBIcVJ4ek5hVlIvbDZkYlZucGhvald6c1IvWnlTK2dTZFpxK0VuNmg3NkFmUFlVczlwM2VxVk13L3ZnZ2hPN3ZqQ0FXZ25HUVFla0RIdVFPRk5DTHhuRDlJUmNPTVdudWxNUGg4eDF0Vm4wQzlVekVUTEpkR3poalhGYjZUb0toS2lzd3BrNEdPaWcvU3FpS3JDLzJ2Q2VkNUJtZFVQdDRzU1V3cWprdUY5VndCcVY0T1kyK1ptM2lFSThETE1pTmpaTFdvdUVMS0NMQlBabkxLY2xNVm9hSy95NXVuN2V6cWIzNkVrbzJ4d24wQTJNRU5DODF0cWJpNHBhdTRidU9nUzh3VnN6dU9zaUVxZnJJK3NhRXFoYlYyZmxrajhEU21ubXNNNkc4a1JibjBya3JUY1FPUVpHRUVpZWFHaXpMaDZySGdBSEV2SWJjdnNpcjVYVEtTQmdHc2ltNkY1Y2pkZUZKeitiYXJEVDNMZWFPV3hrc0VIRjBqTDAyNnE4WUlHbzBoSWdDNEwyb3lRY1MrWC9hL1B2dm5Nd3Y2SkpxWGJDZjNKMmc0UHFQbkduWVpJcVNPV1Vkcis0N29qS1h1UmNHYjZTZWFkRk9Wd3R1YnJJNWsxNHhpMkJpaVlKTVhWZ2E5cHNTcHNLTXRPZURyUUJnQWVHVUo5cTJ2dDVwelFYRWJBUUtBWTRkYlQ5M2pZRFUrb3gxTWFPL2luQWc1UFBWUzAxa0JJSXl5Nnh6UjgvOWZPc1FCbUp5NGt0QTNpRXdzV0Z6aHh4cnRLK2RmVXhkYnptWURPL25PTy96Ym5lREJBV1VYY0ZQNnlIRWhaK0pjYkFpTVR1eDNsd29za29FRzVIWGo4dTRGM1BIZXZOSlI4Q282QVJzSWczL1NhdFJ5ZXJ4eGZkR2ZRU0ZpZHJab1h1b1I3UDBOcy8vSTdvdUkyc0RJeFdqSDlqSlI4c2FPcVRDQ2p0RHg3VHdVbjIwTHVyNW9Ya2NaOEdhZk9FU2ZXdVJVeFZmaW5RVFRyTis0RXk2VnlLOHZtTTB1MjJSMnFFVmJ6bkM4aS9KUmcraWlBak9QVUpxWGtJWmE5MVU2aDN5WmhCMVFZalN4a3VMbnJtdDB3OXVlZTQ4SXBlZ0J4M2dnT0VodE0rNVJsMUhvdUNad2J4eHoxeEMxamZJREljcm51RUh0VklnbmJJN2tCazlXUzdNZmFacnNsTXB5Lzk4TkN2VENEWVRXYkNyUWFrOXVxSEpXc29lMVdJaldob3d0dStCT29pL0w2NFR4MGlITEtaL0RDeGRtRTRFcGlUYm0wYVlIT2pmZHh0RGI1KzltVXRKTjIxRVhwZFE1M3lWbE9hd0w5SThVT2d4N2RvdndHc1R5UWdCOXRTMFJZUXoyblQ2Y3RlZ2hmSmZlWko4cy9QdlJXaHJhaExxcUtWWG44czdHY3FaZXVwUjV2cjl6YkxTVEJUTHIxNlFIK0ppa0VtZC9YZS9Qalg3bSt0ZUNGUkFzOEgwRDMxOWU3ZlpGZDdud1hQbm1XK2YxN3ZkajdRMlhFZ2RnWGxyVXZLWjRWZFZZM3Bqc0pQU01zanNMajhHTjcrVWlITUFFZm16VXN5cjkrZG52RCs5a09YTU5pazdwMDJzT3FIQkpXdktQdkhTRkY3Z2NFYjlNUEFnempjbE9WKytjUTUrTVhuVnpyUElSTC8xaHFxWkVCQU01bk1Wc1kvYkFicElMUm5PWWkvZytoY2lnNk1qaDdKMFJUSm5xSVhUVTJMRFVsWWlJaXJVOXFseDFsMnJhaDlHNUhGVkZSWkZwdjM0M0hhemZuRDRrUk16ZHl0UDdEOGJOZXNoZlJjUG1ZWUVpMnBKbGtWVkhOd0ErdUI3VlNQZUFndWs5cUVhK0Qxc2xQeE01WStiNURiYkhEU0p0UjN6REZtV0ZIbzg5aVdZT0U5YVdaM0pWQ2lqc0NTN3FhN3BGKzBJZTZpazRPdXZWSjJyU0NqL1FRYzRxSEh5d1BvbEh5a2JkYTltVUdVRUxPRGJHc2llaXQ1SWFNR0NNN2NGM2lCMnNIS3V6Skx2Y29tNzJFeENjZUJTR0E0U1hXNDl5N1F3K1QxMVhBeWZWWncrUHNOTG5KcTJocGpML2dONU1wWGtRRWdIVEJqZzg3VTZsKzQ2ZmZPM01rYVlrTHF1R09nVTVIVHJlYlBxNU9IOVlTM2trNFlhczIzMjBSTzNtd2FkQk5adGp2YXFjVVZrUEk5L0VBbFJzUGtFWXdNM1JNR1d0dG1DWHU0RXpBRUw2amlDaVJpM0Qzbkoyc0hSVDM4WXljK2pROWRESUJQT29iUE5tU1BiNWNMRjZNR2hTTjRrWWlXdlM0cGE2blBGajY3ckZTcGdqYWg3SkN1c1R1TW56TWN3UzJCbHdzaE95WEg2em9yK1ZFZFRpcVdIaGNGVUZMbnFyV2RKc2Q5Y1pBUmtMZTQ4bmxtRHNyTFVVTGVsY3N3bXlvcmM2QXdNZFpxV1Z3Y1gyMnorUHo3aWNzbVRxcFB0N1J6ZmpmTytQaUdHOHBGK1pvR3RUWC9LMEVVQnk3L0VzYnhhcXMrQ25xbWs5TC9tZlNreHRBekdHL24rWThjQ0V2R0RBM0pqcEpSQnJhZFRKb0s0TVN4TFJyRzlwR2tDUTRmeVpxNDg1U1ozMmNWeGRUZ01JcG1XeXBUR1ozTjg1cnJQUlJYMU9RNllmd0w0K3dOZVZWR0hXZS9QUVdGYW5FbVJhbVdmZ0MzcmlRTVhOOCtWR01ZL0dvT3Z5MXUyZkJ4eElEMEhUTjROdkVLL0pSR0FwY1pXSVRJaWtHanRna0dYS2UxS1RHekVZUEFlT1NRdlh3YWp1cWZTMDRFN2dmYlBnQldDMllMcVZiSjNjTXNueUxLU3d6ZFJmOXc5UkFZN3UyM2tNdE1Vb0FmUEhwdVJNQ2NWSzE0bHc4SlplUWhsTlRiRExTQVNIR2dhRmljR0tWQ3o1YjlHZWlHSS8wOVBVOFRNSTFKUVR1RVVweG1rK3ZwZ3M1TWJRd2FBOTFnMm9ySVFPQWhXTDhGZVlYOTArQ2MyYTlvSzk0NSs2a29na0V2T1JubHE3Q2h6eTg0RnJxRWNwZU1HZXJidXExQ3ZlREJTRXlsLzE4U2pRNmdGZDJRUjJjaEFNeDJLOG1HUmdkbHJjUjMzejZXQWg5cnBjQnZCN1RiMUpPS3NvWXlBZGhpMzR6SVp3Z0tMVkRHZkNVZFpUYW93T3gzb3R2Q2w0Zkc2TkMwcHJydlc5RTlkVktld0EyRnBDZUVBeHY2S1RGTXorc0NIRndhK05UWjVyZmJpRjRSemE5NVZSTEpmaFIrOXVlU1R6aWVFa2hwTjE5RDBJdWpGZ0ljTzRjQUY2YjE4OFlrY1pJRzlhbzI0MlA0aDR5QUZ2eXpqK09Nd1ZBYlJpM2o5ZkJrUGkxaHdXdWVWYmJicU02QTdxUVJUYXdBc0RXTDdPWGVYTE1WZGx2YmF6VUMvS0F4UlVDOUg2L28yOGk3TTlERFJYR0dhQjBpaCtKS3JncTdlYUpFb2ZmYktyRVNZa2t2SEMwV3VIbW95bUdWUU9OWU9PbUVOK1h4bU5WMnlVVUtoRE9XU3d6WlNmdzFmaXRZYlJDRlBnLzR4QjFxQStJdFdZNUdrcnljd2Y3REMydTRHTlNsaDBkODdGV0RqSnpsdVJXSytlVFFzOEQvSzFBOUFBRkpMU3JhQUQrWmRtQzRjMHhBd2Rkb2Q0dXlPc29KL3E1RzFoUnBiSU4va0tzY2ZOeHpkOHhTY0FZSzZyQlQzV3ZHS1RaOWovTjdMRWNGQnZqOGpoM29aMzlkWENVYks1WVRLUVFmY29Pd2wybDJTR3ErK1BaK0FlUWlRbU5NZEExTkFHWjBYUVJxbmNydkQ2K29HbWY4MTMyajJ2YVlOVHpWMnV1aUxHaS9Yb3B6NWZnMFFrL0JxYnNjaDd0WS94bmErS3RxMHo4bnd5MmZBaTk1ZXhWMGFFaGZveXB1WTFQM1dUNGxjNklKSGZLZXFIODdwRW9hRjJIYVlkTWJmZC9KWWVMZk1CRW1zRytxQTM5bUtweWI4Z1dWOTYwL045bmdtM0JBY1k0aDRxNFM4TmlkYkREUkZGK2s0Y0VEWjRKZ0E5WTd6OE16b3Q0TlZpRUhtMTN6eU81c2loQ21veC9oeTJnQVhOd2xPemxJeDBVS2ZOeTlDbFpRY2kzSWVvN3N6U3VyTUJ1eWRXMnE1UGxleFQxSWFLV3YvUkNDQlh1bFlGK1FpUTQyT1lzZk5rbmNKOEM3WDFuYjdZOWNFZ0FaaDZFSzVXRVVGaDhBZ3FXNDNQcHJSUkNxeXlLK0VuVEVBYlFKbWkzZVVVeW9wbHpBclU4MVhnT3J6UkRYY3A4L0hZYnc4MjZJNGp0VU1uNk9GcUVFM3JLRmREd0JyTWkrVHV2MUVIRFE5SHFXZ3BBTUlhbmNvV1hCV2N5ZXlNSE9qYkFEUnJjcDNFdS9hbHJLa0FCSGNyVzl2RUNzanVxcmFXZWYxd0k0WllIV0pmUVJpWHE5VWdiZk54b1grRGlaay9CeHNEUm4vUTJ6K3hyUXdwa3YzbXJBUC8zNUxSSWFXUTZpMUk5SlNDclUvUGQ3Q25tMmIvaXhqa2ZTWFl6bnZOME0yY3ptRitmZHViZE5sTXgwVENuemNYOGxxUVFoLzZZVVJ4ZjJrOTY4dTB0L1ZBM3J4MGFXbGIvdVpsZmJpN3Y5eFV0cE5QMnVReTBpdk83dkcwTDF4RldsWW9MUEFWSDRtcFFUTWd1anRnV3RJcFlpNG5lR0ozM3dSZXI0T2lGUDcxVTF0bVdlNy9yMGRuU0p2aitkU0dONERrK3JMa1pVcHIyS2U3ekdhcXNmLzJRPT08L0JEQj4KICAgIDwvQklSPgo8L0JJUj4K + +RkFDADAzMAAAAKWUAAEAAAAAAKWDB+QBBwolFgKKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgC+APwAAAAAAAAApVAAAAAMalAgIA0KhwoAAAAUZnR5cGpwMiAAAAAAanAyIAAAAC1qcDJoAAAAFmloZHIAAAD8AAAAvgADBwcAAAAAAA9jb2xyAQAAAAAAEAAApQNqcDJj/0//UQAvAAAAAAC+AAAA/AAAAAAAAAAAAAAAvgAAAPwAAAAAAAAAAAADBwEBBwEBBwEB/1IADAAAAAEBBQQEAAH/XAATQEBISFBISFBISFBISFBISFD/ZAAlAAFDcmVhdGVkIGJ5IE9wZW5KUEVHIHZlcnNpb24gMi4zLjH/kAAKAAAAAKR8AAH/k9+BmCA4IYU8gN5TphT416Scic6OH2BGPjtmtSjtYf883G/5drL7dduwYPv3j9pLDQ5r0TvPJ8PnRB27hwzg7/yOOzkiUSXpOfPt6ilXzd7nRUUkS77747w2MvPH1EgjmFJ7J7rAnQnjA2qe+iLDyZ3NxHD0DARtelyGRWlndOuXOF/PwMo+0uj8DIAtrQFuyiSZSTCNRWLuiQI1R1FYkHpW8x+MV94eDL29J81i8Ur8W39FRrq85RWE2A3NvR0807NgyGnYEaesb4VKsRS52OcrL7/bXXqJMpcbeBVigt5qqWGeGO988plmOpIV8X0AY3XzunfS9kdy1wMee0p1A/N5L1fncdCKLatpgU4Ii0GhXg1xp+jh86GZQU6aP8HznofUPQPnQBlaUunu7BF9sRYIJIWiywAUxCZbGW2EuXUj6q+Zf0LjFmRTBXMo5Vbb1zzPU6xO41+moFxrxzV8DHgBcz8Aj43v5wS/BAw6U+8WNGda+7Fkmkk4Gne3DGrN7swPwfOeh9Q9A+c8Sp/t9joxsz2XQ6xI5dTvLKAAB9+OhB0a9G7sjLq/Q6cc2k0r4WU9YvDMhJjX1P4hT8Il3SSwChPICf8/ID7uAKFt8UYiSO6rNy4tZu3qm26Er38tqBcnYahzx9tLx9tMx+FPAFVpKWQhg42WYFFufB52wAu84ucrlsfhJKCgW5H9QfYHFRWekR3FGjv73uPg/20NpoFYJnQaMhwNKucIvHdCGytdIqsKzmiB0xf40y4tn/MecRrCxVD8WiUVVVYOb0doQ6ddjjNaxC8gSros4wDW9jW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 + + + +#DRAFTFACE +FACEDRAFTVALUE=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 \ No newline at end of file diff --git a/apitest/src/main/resources/config/bioValueEncryptionTemplate.json b/apitest/src/main/resources/config/bioValueEncryptionTemplate.json new file mode 100644 index 000000000..28a3c9543 --- /dev/null +++ b/apitest/src/main/resources/config/bioValueEncryptionTemplate.json @@ -0,0 +1,14 @@ +{ + "id": "string", + "metadata": {}, + "request": { + "aad": "VGhpcyBpcyBzYW1wbGUgYWFk", + "applicationId": "IDA", + "data": "string", + "referenceId": "IDA-FIR", + "salt": "LA7YcvP9DdLIVI5CwFt1SQ", + "timeStamp": "$TIMESTAMP$" + }, + "requesttime": "$TIMESTAMP$", + "version": "string" +} \ No newline at end of file diff --git a/apitest/src/main/resources/config/bulkUpload.json b/apitest/src/main/resources/config/bulkUpload.json new file mode 100644 index 000000000..5ac0a5552 --- /dev/null +++ b/apitest/src/main/resources/config/bulkUpload.json @@ -0,0 +1,6 @@ +{ + "category":"masterData", + "files":[ "masterdata/BulkUpload/FilesToUpload/user_detail.csv" ], + "operation":"update", + "tableName":"user_detail" +} \ No newline at end of file diff --git a/apitest/src/main/resources/config/clientPrivateKey.txt b/apitest/src/main/resources/config/clientPrivateKey.txt new file mode 100644 index 000000000..2b5f316b0 --- /dev/null +++ b/apitest/src/main/resources/config/clientPrivateKey.txt @@ -0,0 +1 @@ +{"p": "0-40ISxXDmC8SVrudg1e7vQskyWlohadm83RAkUyH6S4h1aTPrNwLVn9WANnyRTqupD1Fr8mYZ7f9nZ2MkMj45UV8uiIjQZr3crMq0YGkzt_LvwhLduWOJ_z9_9zZNHckXei4G8QQFJQYb3TNdGsVVSwff68SSoen8oqvkbkAJs","kty": "RSA","q": "6as88odcbP2MDT9lkahK2z4QIH25zsa_UdLgAtLwDVpekXfJNOQvuqNY1Gw3Jws6uPDLGcEK42MyeOdCFqklFTvDJlJXMFvgWrmGbCUMvJL-rFyO-kCTGnFBX60ozdJbjfBt3E3QYx3G907Ziuu9o0azey1DJtq_zKwearE-xTs","d": "BgdeiCZbr5qZ4haShg9uQinZRYPSUTYc_58YgvQ0WkPKm5fINOgOJPvimdKYBt8OtIWbhojTyn0TKrGPPAqFZCnGY16HkCUN31MbluD2wxYz6SPpZ1zsmP8PbQUVozjEFeLpiTN6nubw_skS_9GGrl1CPb25wTPlZtI3uQ5IiPL_YD5j_w5_J7tejAaRbhlJj48ZDa4CR8BkaUi2QaQmLoyiO_1O-U-Nf17-t1C6zFFKKHQx2lNltE1xFQoHB4WuBA2GnP5LgNFJSLv0p95gQK37nP0TTcuiZVlvFcmbGI_ilWlxRKJUD3mZR6nz25X4SapUWswnrnm7JtUA_UGVGw","e": "AQAB","use": "sig","kid": "1bbdc9de-c24f-4801-b6b3-691ac07641af","qi": "pmL_G7T4OF_pr2RCzkkupi1dCbwRX39bMEIs3uirvkoPR5CENvuvsXQ0Oias3taxzLa4nG5JVXHkyOIX8UsK1NFrzZPRKbfNX3h5EAnl3I7cZMtoYJLnawUqaNTukOmDChPlKx1fVjUwsyNn5HSAnmBiaOmm_RHo36tPhgaPUtE","dp": "e3b2X60ZOoMYrhOPgK7hc4xEu6TfDcLnJvGMpinxvYWVCyNgvNKEs6cNdMznFbpd1TrFze6mSZDpIQh6a2W57sfX9Z-Kjb4D8T5IZi9xfSzYN2MjYTfgGDT3SK9FZqLsQMLV3LJXYWGS-p5AAcaZA01HVN-miWlEVgrNQ_TAt6k","dq": "Yg-BqUoTCI4y6xBS4JieqXlXLTt18YfInF8BsU2yffgRvbxmTPMB8LJCQgsT7iexQhGTOkCgACMN-F0ciAP90vZchEWD34B_G7PF7LZzrOOHSvAg9HaLBUrII424lP-VenCOuihRrna9m-WUN8-MquutwKCTEMg2O39z2FR_wic","n": "wXGQA574CU-WTWPILd4S3_1sJf0Yof0kwMeNctXc1thQo70Ljfn9f4igpRe7f8qNs_W6dLuLWemFhGJBQBQ7vvickECKNJfo_EzSD_yyPCg7k_AGbTWTkuoObHrpilwJGyKVSkOIujH_FqHIVkwkVXjWc25Lsb8Gq4nAHNQEqqgaYPLEi5evCR6S0FzcXTPuRh9zH-cM0Onjv4orrfYpEr61HcRp5MXL55b7yBoIYlXD8NfalcgdrWzp4VZHvQ8yT9G5eaf27XUn6ZBeBf7VnELcKFTyw1pK2wqoOxRBc8Y1wO6rEy8PlCU6wD-mbIzcjG1wUfnbgvJOM4A5G41quQ"} \ No newline at end of file diff --git a/apitest/src/main/resources/config/errorUIN.json b/apitest/src/main/resources/config/errorUIN.json new file mode 100644 index 000000000..e146f2df9 --- /dev/null +++ b/apitest/src/main/resources/config/errorUIN.json @@ -0,0 +1,24 @@ +{ + "URL": "$IGNORE$", + "authRequest": { + "body": "$IGNORE$", + "signature": "$IGNORE$" + }, + "authResponse": { + "body": { + "transactionID": "$IGNORE$", + "version": "$IGNORE$", + "id": "$IGNORE$", + "errors": [ + { + "errorCode": "IDA-MLC-015", + "errorMessage": "$IGNORE$" + } + ], + "responseTime": "$IGNORE$", + "response": { + "authStatus": false + } + } + } +} diff --git a/apitest/src/main/resources/config/errorUINIdp.json b/apitest/src/main/resources/config/errorUINIdp.json new file mode 100644 index 000000000..c666118a4 --- /dev/null +++ b/apitest/src/main/resources/config/errorUINIdp.json @@ -0,0 +1,9 @@ +{ + "responseTime": "$IGNORE$", + "errors": [ + { + "errorCode": "IDA-MLC-015", + "errorMessage": "$IGNORE$" + } + ] +} \ No newline at end of file diff --git a/apitest/src/main/resources/config/errorUINKyc.json b/apitest/src/main/resources/config/errorUINKyc.json new file mode 100644 index 000000000..96c1c0ea9 --- /dev/null +++ b/apitest/src/main/resources/config/errorUINKyc.json @@ -0,0 +1,24 @@ +{ + "URL": "$IGNORE$", + "authRequest": { + "body": "$IGNORE$", + "signature": "$IGNORE$" + }, + "authResponse": { + "body": { + "transactionID": "$IGNORE$", + "version": "$IGNORE$", + "id": "$IGNORE$", + "errors": [ + { + "errorCode": "IDA-MLC-015", + "errorMessage": "$IGNORE$" + } + ], + "responseTime": "$IGNORE$", + "response": { + "kycStatus": false + } + } + } +} diff --git a/apitest/src/main/resources/config/esignetPayload.json b/apitest/src/main/resources/config/esignetPayload.json new file mode 100644 index 000000000..d20391e31 --- /dev/null +++ b/apitest/src/main/resources/config/esignetPayload.json @@ -0,0 +1,7 @@ +{ + "sub" : "mosip-resident-idp-client", + "iss" : "mosip-resident-idp-client", + "aud" : "https://api.dev.mosip.net/v1/idp", + "exp" : "1667833124", + "iat" : "1665154724" +} \ No newline at end of file diff --git a/apitest/src/main/resources/config/folderPaths.properties b/apitest/src/main/resources/config/folderPaths.properties new file mode 100644 index 000000000..ad6bed29f --- /dev/null +++ b/apitest/src/main/resources/config/folderPaths.properties @@ -0,0 +1,10 @@ +pathForValidRegProcPackets=regProc/Packets/ValidPackets/ +invalidPacketFolderPath=regProc/Packets/InvalidPackets/ +validPacketForPacketGeneration=regProc/Packets/ValidPackets/packteForInvalidPackets +syncTokenGenerationFilePath=config/tokenGeneration.properties +getStatusTokenGenerationFilePath=config/adminTokenGeneration.properties +pathForValidIntegration=regProc/IntegrationScenarios/ValidPacket +newPacketForUpdatePacket=regProc/UpdatePacket/regProc_Update_smoke +updatedPacketFolderPath = regProc/UpdatePacket/ +packetForSecurityTest=regProc/Packets/PacketForSecurity +idRepoTokenPath=config/idRepoToken.properties diff --git a/apitest/src/main/resources/config/healthCheckEndpoint.properties b/apitest/src/main/resources/config/healthCheckEndpoint.properties new file mode 100644 index 000000000..f7a8576fe --- /dev/null +++ b/apitest/src/main/resources/config/healthCheckEndpoint.properties @@ -0,0 +1,45 @@ +###### = +regproc_masterdata=/v1/hotlist/actuator/health +masterdata=/v1/admin/actuator/health +auth_idrepo_resident_regproc_masterdata=/v1/auditmanager/actuator/health +auth_idrepo_resident_regproc_masterdata=/v1/authmanager/actuator/health +auth_idrepo_regproc=/biosdk-service/actuator/health +auth_mobileid=/v1/credentialservice/actuator/health +auth_mobileid=/v1/credentialrequest/actuator/health +auth_idrepo_regproc_partner=/v1/datashare/actuator/health +auth_mobileid_esignet=/idauthentication/v1/actuator/health +auth_mobileid_esignet_partner=/idauthentication/v1/internal/actuator/health +auth_mobileid_esignet=/idauthentication/v1/otp/actuator/health +idrepo_auth_mobileid_mimoto_esignet_resident_regproc=/idrepository/v1/identity/actuator/health +idrepo_regproc=/v1/idgenerator/actuator/health +idrepo_resident_regproc_masterdata=/v1/keymanager/actuator/health +auth_idrepo_masterdata_mobileid_mimoto_esignet_resident_partner_prereg_regproc=/v1/masterdata/actuator/health +auth_idrepo_resident_regproc=/v1/notifier/actuator/health +auth_mobileid=/v1/otpmanager/actuator/health +partner_auth_esignet_idrepo_resident_regproc=/v1/partnermanager/actuator/health +partner_auth_esignet_regproc=/v1/policymanager/actuator/health +prereg=/preregistration/v1/captcha/actuator/health +prereg=/v1/pridgenerator/actuator/health +resident_regproc=/registrationprocessor/v1/packetreceiver/actuator/health +regproc_masterdata=/registrationprocessor/v1/registrationstatus/actuator/health +resident_auth_esignet_mobileid=/resident/v1/actuator/health +# TO DO idrepo_auth_mobileid_mimoto_esignet_resident=/v1/ridgenerator/actuator/health +regproc_masterdata=/v1/syncdata/actuator/health +idrepo_auth_mobileid_mimoto_esignet_resident_regproc=/idrepository/v1/actuator/health +auth_idrepo_resident_regproc=/hub/actuator/health +resident_esignet=/v1/esignet/actuator/health + +#The below actuators are not used for functional test rigs. +#regproc=/v1/identity/actuator/health +#regproc=/registrationprocessor/v1/registrationtransaction/actuator/health +#regproc=/registrationprocessor/v1/workflowmanager/actuator/health +#regproc=/registrationprocessor/v1/landingzone/actuator/health +#regproc=/registrationprocessor/v1/notification/actuator/health +#regproc=/registrationprocessor/v1/opencrvs-stage/actuator/health +#regproc=/registrationprocessor/v1/reprocessor/actuator/health +#regproc=/v1/print/actuator/health +#regproc=/registrationprocessor/v1/camelbridge/actuator/health +#regproc=/v1/packetcreator/actuator/health +#regproc=/commons/v1/packetmanager/actuator/health +#regproc=/v1/mock-abis-service/actuator/health +#regproc=/v1/mockmv/actuator/health \ No newline at end of file diff --git a/apitest/src/main/resources/config/idRepoToken.properties b/apitest/src/main/resources/config/idRepoToken.properties new file mode 100644 index 000000000..e8337374e --- /dev/null +++ b/apitest/src/main/resources/config/idRepoToken.properties @@ -0,0 +1,5 @@ +token.request.id=mosip.io.userId.pwd +token.request.appid=ida +token.request.username=ida_testuser +token.request.password=mosip +token.request.version=1.0 \ No newline at end of file diff --git a/apitest/src/main/resources/config/idaDeleteQueriesForEsignet.txt b/apitest/src/main/resources/config/idaDeleteQueriesForEsignet.txt new file mode 100644 index 000000000..0b683afb8 --- /dev/null +++ b/apitest/src/main/resources/config/idaDeleteQueriesForEsignet.txt @@ -0,0 +1,8 @@ +##### DB queries to be executed to tear down the data used and generated during the test rig run + +delete from ida.ca_cert_store WHERE cert_subject LIKE '%O=mosip_partnerorg%' +delete from ida.ca_cert_store WHERE cert_subject LIKE '%O=mosip_ekyc_partner%' +delete from ida.ca_cert_store WHERE cert_subject LIKE '%O=mosip_deviceorg%' +delete from ida.ca_cert_store WHERE cert_subject LIKE '%O=mosip_ftmorg%' +delete from ida.ca_cert_store WHERE cert_subject LIKE '%O=partnernameforautomationesi%' +delete from ida.ca_cert_store WHERE cert_subject LIKE '%O=partnernameforesignet%' \ No newline at end of file diff --git a/apitest/src/main/resources/config/keyManagerDataDeleteQueries.txt b/apitest/src/main/resources/config/keyManagerDataDeleteQueries.txt new file mode 100644 index 000000000..3ecf9f7ce --- /dev/null +++ b/apitest/src/main/resources/config/keyManagerDataDeleteQueries.txt @@ -0,0 +1,14 @@ +##### DB queries to be executed to tear down the data used and generated during the test rig run + +delete from mosip_keymgr.keymgr.ca_cert_store where cert_subject ='CN=mosiptest.org,O=MOSIPTEST,L=Bangalore,ST=Karantaka,C=IN' +delete from mosip_keymgr.keymgr.partner_cert_store where cert_subject ='CN=Techno.com,O=Techno,L=Bangalore,ST=Karnataka,C=IN' +delete from mosip_keymgr.keymgr.partner_cert_store where cert_subject ='CN=Techno,O=Techno,L=Bangalore,ST=Karnataka,C=IN' +delete from mosip_keymgr.keymgr.ca_cert_store where cert_subject ='CN=apitest,OU=apitest,O=apitest,L=BLR,ST=KAR,C=IN' +delete from mosip_keymgr.keymgr.ca_cert_store where cert_subject ='CN=apitest2,OU=apitest2,O=apitest2,L=BLR,ST=KAR,C=IN' +delete from mosip_keymgr.keymgr.partner_cert_store where cert_subject ='CN=deviceprovider,OU=deviceprovider,O=deviceprovider,L=BLR,ST=KAR,C=IN' +delete from mosip_keymgr.keymgr.partner_cert_store where cert_subject ='CN=movp,OU=movp,O=movp,L=BLR,ST=KAR,C=IN' +delete from mosip_keymgr.keymgr.partner_cert_store where cert_subject ='CN=ftp,OU=ftp,O=ftp,L=BLR,ST=KAR,C=IN' +delete from mosip_keymgr.keymgr.partner_cert_store where cert_subject ='CN=misp,OU=misp,O=misp,L=BLR,ST=KAR,C=IN' +delete from mosip_keymgr.keymgr.partner_cert_store where cert_subject ='CN=misp2,OU=misp2,O=misp2,L=BLR,ST=KAR,C=IN' +delete from mosip_keymgr.keymgr.partner_cert_store where cert_subject ='CN=mosipprint,O=mosipprint,L=Bangalore,ST=Karnataka,C=IN' +delete from mosip_keymgr.keymgr.ca_cert_store where cert_subject ='CN=mosipprint,O=mosipprint,L=Bangalore,ST=Karnataka,C=IN' \ No newline at end of file diff --git a/apitest/src/main/resources/config/keyManagerDataDeleteQueriesForEsignet.txt b/apitest/src/main/resources/config/keyManagerDataDeleteQueriesForEsignet.txt new file mode 100644 index 000000000..da5d261d0 --- /dev/null +++ b/apitest/src/main/resources/config/keyManagerDataDeleteQueriesForEsignet.txt @@ -0,0 +1,14 @@ +##### DB queries to be executed to tear down the data used and generated during the test rig run + +delete from mosip_keymgr.keymgr.ca_cert_store WHERE cert_subject LIKE '%O=mosip_partnerorg%' +delete from mosip_keymgr.keymgr.ca_cert_store WHERE cert_subject LIKE '%O=mosip_ekyc_partner%' +delete from mosip_keymgr.keymgr.ca_cert_store WHERE cert_subject LIKE '%O=mosip_deviceorg%' +delete from mosip_keymgr.keymgr.ca_cert_store WHERE cert_subject LIKE '%O=mosip_ftmorg%' +delete from mosip_keymgr.keymgr.ca_cert_store WHERE cert_subject LIKE '%O=partnernameforautomationesi%' +delete from mosip_keymgr.keymgr.ca_cert_store WHERE cert_subject LIKE '%O=partnernameforesignet%' +delete from mosip_keymgr.keymgr.partner_cert_store WHERE cert_subject LIKE '%O=mosip_partnerorg%' +delete from mosip_keymgr.keymgr.partner_cert_store WHERE cert_subject LIKE '%O=mosip_ekyc_partner%' +delete from mosip_keymgr.keymgr.partner_cert_store WHERE cert_subject LIKE '%O=mosip_deviceorg%' +delete from mosip_keymgr.keymgr.partner_cert_store WHERE cert_subject LIKE '%O=mosip_ftmorg%' +delete from mosip_keymgr.keymgr.partner_cert_store WHERE cert_subject LIKE '%O=partnernameforautomationesi%' +delete from mosip_keymgr.keymgr.partner_cert_store WHERE cert_subject LIKE '%O=partnernameforesignet%' \ No newline at end of file diff --git a/apitest/src/main/resources/config/lang-isocode-transid.csv b/apitest/src/main/resources/config/lang-isocode-transid.csv new file mode 100644 index 000000000..7a00fd36e --- /dev/null +++ b/apitest/src/main/resources/config/lang-isocode-transid.csv @@ -0,0 +1,550 @@ +ISO 639-2 Code,English Name,English-to-Language-TransID +aar,Afar,Any-ar +abk,Abkhazian, +ace,Achinese, +ach,Acoli, +ada,Adangme, +ady,Adyghe; Adygei, +afa,Afro-Asiatic languages, +afh,Afrihili, +afr,Afrikaans, +ain,Ainu, +aka,Akan, +akk,Akkadian, +alb (B),Albanian, +sqi (T),, +ale,Aleut, +alg,Algonquian languages, +alt,Southern Altai, +amh,Amharic, +ang,"English, Old (ca.450-1100)", +anp,Angika, +apa,Apache languages, +ara,Arabic,Any-Arab +arc,Official Aramaic (700-300 BCE); Imperial Aramaic (700-300 BCE), +arg,Aragonese, +arm (B),Armenian, +hye (T),, +arn,Mapudungun; Mapuche, +arp,Arapaho, +art,Artificial languages, +arw,Arawak, +asm,Assamese, +ast,Asturian; Bable; Leonese; Asturleonese, +ath,Athapascan languages, +aus,Australian languages, +ava,Avaric, +ave,Avestan, +awa,Awadhi, +aym,Aymara, +aze,Azerbaijani, +bad,Banda languages, +bai,Bamileke languages, +bak,Bashkir, +bal,Baluchi, +bam,Bambara, +ban,Balinese, +baq (B),Basque, +eus (T),, +bas,Basa, +bat,Baltic languages, +bej,Beja; Bedawiyet, +bel,Belarusian, +bem,Bemba, +ben,Bengali, +ber,Berber languages, +bho,Bhojpuri, +bih,Bihari languages, +bik,Bikol, +bin,Bini; Edo, +bis,Bislama, +bla,Siksika, +bnt,Bantu languages, +tib (B),Tibetan, +bod (T),, +bos,Bosnian, +bra,Braj, +bre,Breton, +btk,Batak languages, +bua,Buriat, +bug,Buginese, +bul,Bulgarian, +bur (B),Burmese, +mya (T),, +byn,Blin; Bilin, +cad,Caddo, +cai,Central American Indian languages, +car,Galibi Carib, +cat,Catalan; Valencian, +cau,Caucasian languages, +ceb,Cebuano, +cel,Celtic languages, +cze (B),Czech, +ces (T),, +cha,Chamorro, +chb,Chibcha, +che,Chechen, +chg,Chagatai, +chi (B),Chinese, +zho (T),, +chk,Chuukese, +chm,Mari, +chn,Chinook jargon, +cho,Choctaw, +chp,Chipewyan; Dene Suline, +chr,Cherokee, +chu,Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic, +chv,Chuvash, +chy,Cheyenne, +cmc,Chamic languages, +cnr,Montenegrin, +cop,Coptic, +cor,Cornish, +cos,Corsican, +cpe,"Creoles and pidgins, English based", +cpf,"Creoles and pidgins, French-based", +cpp,"Creoles and pidgins, Portuguese-based", +cre,Cree, +crh,Crimean Tatar; Crimean Turkish, +crp,Creoles and pidgins, +csb,Kashubian, +cus,Cushitic languages, +wel (B),Welsh, +cym (T),, +cze (B),Czech, +ces (T),, +dak,Dakota, +dan,Danish, +dar,Dargwa, +day,Land Dayak languages, +del,Delaware, +den,Slave (Athapascan), +ger (B),German, +deu (T),, +dgr,Dogrib, +din,Dinka, +div,Divehi; Dhivehi; Maldivian, +doi,Dogri, +dra,Dravidian languages, +dsb,Lower Sorbian, +dua,Duala, +dum,"Dutch, Middle (ca.1050-1350)", +dut (B),Dutch; Flemish, +nld (T),, +dyu,Dyula, +dzo,Dzongkha, +efi,Efik, +egy,Egyptian (Ancient), +eka,Ekajuk, +gre (B),"Greek, Modern (1453-)", +ell (T),, +elx,Elamite, +eng,English,eng, +enm,"English, Middle (1100-1500)", +epo,Esperanto, +est,Estonian, +baq (B),Basque, +eus (T),, +ewe,Ewe, +ewo,Ewondo, +fan,Fang,Any-fa +fao,Faroese, +per (B),Persian, +fas (T),, +fat,Fanti, +fij,Fijian, +fil,Filipino; Pilipino, +fin,Finnish, +fiu,Finno-Ugrian languages, +fon,Fon, +fre (B),French, +fra (T),, +fre (B),French, +fra (T),, +frm,"French, Middle (ca.1400-1600)", +fro,"French, Old (842-ca.1400)", +frr,Northern Frisian, +frs,Eastern Frisian, +fry,Western Frisian, +ful,Fulah, +fur,Friulian, +gaa,Ga, +gay,Gayo, +gba,Gbaya, +gem,Germanic languages, +geo (B),Georgian, +kat (T),, +ger (B),German, +deu (T),, +gez,Geez, +gil,Gilbertese, +gla,Gaelic; Scottish Gaelic, +gle,Irish, +glg,Galician, +glv,Manx, +gmh,"German, Middle High (ca.1050-1500)", +goh,"German, Old High (ca.750-1050)", +gon,Gondi, +gor,Gorontalo, +got,Gothic, +grb,Grebo, +grc,"Greek, Ancient (to 1453)", +gre (B),"Greek, Modern (1453-)", +ell (T),, +grn,Guarani, +gsw,Swiss German; Alemannic; Alsatian, +guj,Gujarati, +gwi,Gwich'in, +hai,Haida, +hat,Haitian; Haitian Creole, +hau,Hausa, +haw,Hawaiian, +heb,Hebrew,Any-Hebrew +her,Herero, +hil,Hiligaynon, +him,Himachali languages; Western Pahari languages, +hin,Hindi,Any-Devanagari +kan,Kannada,Any-Kannada +tam,Tamil,Any-Tamil +hit,Hittite, +hmn,Hmong; Mong, +hmo,Hiri Motu, +hrv,Croatian, +hsb,Upper Sorbian, +hun,Hungarian, +hup,Hupa, +arm (B),Armenian, +hye (T),, +iba,Iban, +ibo,Igbo, +ice (B),Icelandic, +isl (T),, +ido,Ido, +iii,Sichuan Yi; Nuosu, +ijo,Ijo languages, +iku,Inuktitut, +ile,Interlingue; Occidental, +ilo,Iloko, +ina,Interlingua (International Auxiliary Language Association), +inc,Indic languages, +ind,Indonesian, +ine,Indo-European languages, +inh,Ingush, +ipk,Inupiaq, +ira,Iranian languages, +iro,Iroquoian languages, +ice (B),Icelandic, +isl (T),, +ita,Italian, +jav,Javanese, +jbo,Lojban, +jpn,Japanese, +jpr,Judeo-Persian, +jrb,Judeo-Arabic, +kaa,Kara-Kalpak, +kab,Kabyle, +kac,Kachin; Jingpho, +kal,Kalaallisut; Greenlandic, +kam,Kamba, +kan,Kannada, +kar,Karen languages, +kas,Kashmiri, +geo (B),Georgian, +kat (T),, +kau,Kanuri, +kaw,Kawi, +kaz,Kazakh, +kbd,Kabardian, +kha,Khasi, +khi,Khoisan languages, +khm,Central Khmer, +kho,Khotanese; Sakan, +kik,Kikuyu; Gikuyu, +kin,Kinyarwanda, +kir,Kirghiz; Kyrgyz, +kmb,Kimbundu, +kok,Konkani, +kom,Komi, +kon,Kongo, +kor,Korean, +kos,Kosraean, +kpe,Kpelle, +krc,Karachay-Balkar, +krl,Karelian, +kro,Kru languages, +kru,Kurukh, +kua,Kuanyama; Kwanyama, +kum,Kumyk, +kur,Kurdish, +kut,Kutenai, +lad,Ladino, +lah,Lahnda, +lam,Lamba, +lao,Lao, +lat,Latin,Any-Latin +lav,Latvian, +lez,Lezghian, +lim,Limburgan; Limburger; Limburgish, +lin,Lingala, +lit,Lithuanian, +lol,Mongo, +loz,Lozi, +ltz,Luxembourgish; Letzeburgesch, +lua,Luba-Lulua, +lub,Luba-Katanga, +lug,Ganda, +lui,Luiseno, +lun,Lunda, +luo,Luo (Kenya and Tanzania), +lus,Lushai, +mac (B),Macedonian, +mkd (T),, +mad,Madurese, +mag,Magahi, +mah,Marshallese, +mai,Maithili, +mak,Makasar, +mal,Malayalam, +man,Mandingo, +mao (B),Maori, +mri (T),, +map,Austronesian languages, +mar,Marathi, +mas,Masai, +may (B),Malay, +msa (T),, +mdf,Moksha, +mdr,Mandar, +men,Mende, +mga,"Irish, Middle (900-1200)", +mic,Mi'kmaq; Micmac, +min,Minangkabau, +mis,Uncoded languages, +mac (B),Macedonian, +mkd (T),, +mkh,Mon-Khmer languages, +mlg,Malagasy, +mlt,Maltese, +mnc,Manchu, +mni,Manipuri, +mno,Manobo languages, +moh,Mohawk, +mon,Mongolian, +mos,Mossi, +mao (B),Maori, +mri (T),, +may (B),Malay, +msa (T),, +mul,Multiple languages, +mun,Munda languages, +mus,Creek, +mwl,Mirandese, +mwr,Marwari, +bur (B),Burmese, +mya (T),, +myn,Mayan languages, +myv,Erzya, +nah,Nahuatl languages, +nai,North American Indian languages, +nap,Neapolitan, +nau,Nauru, +nav,Navajo; Navaho, +nbl,"Ndebele, South; South Ndebele", +nde,"Ndebele, North; North Ndebele", +ndo,Ndonga, +nds,"Low German; Low Saxon; German, Low; Saxon, Low", +nep,Nepali, +new,Nepal Bhasa; Newari, +nia,Nias, +nic,Niger-Kordofanian languages, +niu,Niuean, +dut (B),Dutch; Flemish, +nld (T),, +nno,"Norwegian Nynorsk; Nynorsk, Norwegian", +nob,"Bokmål, Norwegian; Norwegian Bokmål", +nog,Nogai, +non,"Norse, Old", +nor,Norwegian, +nqo,N'Ko, +nso,Pedi; Sepedi; Northern Sotho, +nub,Nubian languages, +nwc,Classical Newari; Old Newari; Classical Nepal Bhasa, +nya,Chichewa; Chewa; Nyanja, +nym,Nyamwezi, +nyn,Nyankole, +nyo,Nyoro, +nzi,Nzima, +oci,Occitan (post 1500), +oji,Ojibwa, +ori,Oriya, +orm,Oromo, +osa,Osage, +oss,Ossetian; Ossetic, +ota,"Turkish, Ottoman (1500-1928)", +oto,Otomian languages, +paa,Papuan languages, +pag,Pangasinan, +pal,Pahlavi, +pam,Pampanga; Kapampangan, +pan,Panjabi; Punjabi, +pap,Papiamento, +pau,Palauan, +peo,"Persian, Old (ca.600-400 B.C.)", +per (B),Persian, +fas (T),, +phi,Philippine languages, +phn,Phoenician, +pli,Pali, +pol,Polish, +pon,Pohnpeian, +por,Portuguese, +pra,Prakrit languages, +pro,"Provençal, Old (to 1500);Occitan, Old (to 1500)", +pus,Pushto; Pashto, +qaa-qtz,Reserved for local use, +que,Quechua, +raj,Rajasthani, +rap,Rapanui, +rar,Rarotongan; Cook Islands Maori, +roa,Romance languages, +roh,Romansh, +rom,Romany, +rum (B),Romanian; Moldavian; Moldovan, +ron (T),, +rum (B),Romanian; Moldavian; Moldovan, +ron (T),, +run,Rundi, +rup,Aromanian; Arumanian; Macedo-Romanian, +rus,Russian, +sad,Sandawe, +sag,Sango, +sah,Yakut, +sai,South American Indian languages, +sal,Salishan languages, +sam,Samaritan Aramaic, +san,Sanskrit, +sas,Sasak, +sat,Santali, +scn,Sicilian, +sco,Scots, +sel,Selkup, +sem,Semitic languages, +sga,"Irish, Old (to 900)", +sgn,Sign Languages, +shn,Shan, +sid,Sidamo, +sin,Sinhala; Sinhalese, +sio,Siouan languages, +sit,Sino-Tibetan languages, +sla,Slavic languages, +slo (B),Slovak, +slk (T),, +slo (B),Slovak, +slk (T),, +slv,Slovenian, +sma,Southern Sami, +sme,Northern Sami, +smi,Sami languages, +smj,Lule Sami, +smn,Inari Sami, +smo,Samoan, +sms,Skolt Sami, +sna,Shona, +snd,Sindhi, +snk,Soninke, +sog,Sogdian, +som,Somali, +son,Songhai languages, +sot,"Sotho, Southern", +spa,Spanish; Castilian, +alb (B),Albanian, +sqi (T),, +srd,Sardinian, +srn,Sranan Tongo, +srp,Serbian, +srr,Serer, +ssa,Nilo-Saharan languages, +ssw,Swati, +suk,Sukuma, +sun,Sundanese, +sus,Susu, +sux,Sumerian, +swa,Swahili, +swe,Swedish, +syc,Classical Syriac, +syr,Syriac, +tah,Tahitian, +tai,Tai languages, +tam,Tamil, +tat,Tatar, +tel,Telugu, +tem,Timne, +ter,Tereno, +tet,Tetum, +tgk,Tajik, +tgl,Tagalog, +tha,Thai,Any-Thai +tib (B),Tibetan, +bod (T),, +tig,Tigre, +tir,Tigrinya, +tiv,Tiv, +tkl,Tokelau, +tlh,Klingon; tlhIngan-Hol, +tli,Tlingit, +tmh,Tamashek, +tog,Tonga (Nyasa), +ton,Tonga (Tonga Islands), +tpi,Tok Pisin, +tsi,Tsimshian, +tsn,Tswana, +tso,Tsonga, +tuk,Turkmen, +tum,Tumbuka, +tup,Tupi languages, +tur,Turkish, +tut,Altaic languages, +tvl,Tuvalu, +twi,Twi, +tyv,Tuvinian, +udm,Udmurt, +uga,Ugaritic, +uig,Uighur; Uyghur, +ukr,Ukrainian, +umb,Umbundu, +und,Undetermined, +urd,Urdu, +uzb,Uzbek, +vai,Vai, +ven,Venda, +vie,Vietnamese, +vol,Volapük, +vot,Votic, +wak,Wakashan languages, +wal,Wolaitta; Wolaytta, +war,Waray, +was,Washo, +wel (B),Welsh, +cym (T),, +wen,Sorbian languages, +wln,Walloon, +wol,Wolof, +xal,Kalmyk; Oirat, +xho,Xhosa, +yao,Yao, +yap,Yapese, +yid,Yiddish, +yor,Yoruba, +ypk,Yupik languages, +zap,Zapotec, +zbl,Blissymbols; Blissymbolics; Bliss, +zen,Zenaga, +zgh,Standard Moroccan Tamazight, +zha,Zhuang; Chuang, +chi (B),Chinese, +zho (T),, +znd,Zande languages, +zul,Zulu, +zun,Zuni, +zxx,No linguistic content; Not applicable, +zza,, diff --git a/apitest/src/main/resources/config/mapping.properties b/apitest/src/main/resources/config/mapping.properties new file mode 100644 index 000000000..1e1908c8f --- /dev/null +++ b/apitest/src/main/resources/config/mapping.properties @@ -0,0 +1,29 @@ +AuthReq.domainUri=domainUri +AuthReq.env=env +AuthReq.keyIndex=keyIndex +AuthReq.specVersion=specVersion +AuthReq.thumbprint=thumbprint +AuthReq.demo=requestedAuth.demo +AuthReq.pin=requestedAuth.pin +AuthReq.consentObtained=consentObtained +AuthReq.id=id +AuthReq.requestTime=requestTime +AuthReq.demo=requestedAuth.demo +AuthReq.transactionID=transactionID +AuthReq.request=request +AuthReq.individualId=individualId +AuthReq.version=version +AuthReq.individualIdType=individualIdType +AuthReq.requestSessionKey=requestSessionKey +AuthReq.otp=requestedAuth.otp +AuthReqrequestHMAC=requestHMAC +AuthReq.bio=requestedAuth.bio + +#TestScriptMapping +#ModifyBioAuth +key=requestSessionKey +data=request +hmac=requestHMAC +thumbprint=thumbprint +#ModifyEkycRequest +authRequest=authRequest \ No newline at end of file diff --git a/apitest/src/main/resources/config/masterDataDeleteQueries.txt b/apitest/src/main/resources/config/masterDataDeleteQueries.txt new file mode 100644 index 000000000..be2ab648a --- /dev/null +++ b/apitest/src/main/resources/config/masterDataDeleteQueries.txt @@ -0,0 +1,91 @@ +##### DB queries to be executed to tear down the data used and generated during the test rig run + +delete from master.blocklisted_words where cr_by='dumbo6' +delete from master.blocklisted_words where word='dumbooo' +delete from master.blocklisted_words where cr_by='masterdata-220005' +delete from master.machine_master where cr_by='masterdata-220005' +delete from master.machine_master where cr_by='masterdata-220005' +delete from master.machine_master where name in ('Mach-Test','Mach-Test2','Mach-Test updated') +delete from master.machine_master mm WHERE mm.mspec_id IN(SELECT ms.id from master.machine_spec ms where ms.cr_by='masterdata-220005') +delete FROM master.machine_spec WHERE mtyp_code IN (SELECT code FROM master.machine_type WHERE cr_by = 'masterdata-220005') +delete from master.machine_spec where cr_by='masterdata-220005' +delete from master.machine_type where cr_by='masterdata-220005' +delete from master.gender where cr_by='masterdata-220005' +delete from master.device_master where upd_by='masterdata-220005' +delete from master.device_master where cr_by='masterdata-220005' +delete from master.device_master where name='testDevicedummy' +DELETE FROM master.device_master WHERE dspec_id IN(SELECT id FROM master.device_spec WHERE cr_by='masterdata-220005') +delete from master.device_spec where cr_by='masterdata-220005' +delete from master.device_type where cr_by='masterdata-220005' +delete from master.loc_holiday where cr_by='masterdata-220005' +delete from master.reg_center_type where cr_by='masterdata-220005' +delete from master.registration_center where cr_by='masterdata-220005' +delete from master.loc_holiday where cr_by='masterdata-220005' +delete from master.reg_center_type where cr_by='masterdata-220005' +delete from master.registration_center where cr_by='masterdata-220005' +delete from master.device_type where cr_by='masterdata-220005' +delete from master.doc_type where cr_by='masterdata-220005' +delete from master.doc_category where cr_by='masterdata-220005' +delete from master.location where cr_by='masterdata-220005' +delete from master.template where cr_by='masterdata-220005' +update master.template set is_active='true', is_deleted='false' where id='1101' +delete from master.template where template_typ_code IN(select code from master.template_type where code='Test-info-Template-auto') +delete from master.template_type where code='Test-info-Template-auto' +update master.location set is_active='true', is_deleted='false' where code='10114' +delete from master.location where code in('TST123','IND') +delete from master.valid_document where cr_by='masterdata-220005' +delete from master.user_detail where cr_by='masterdata-220005' +delete from master.template_type where cr_by='masterdata-220005' +delete from master.template_file_format where cr_by='masterdata-220005' +delete from master.reason_list where cr_by='masterdata-220005' +delete from master.reason_category where cr_by='masterdata-220005' +delete from master.language where cr_by='masterdata-220005' +delete from master.identity_schema where cr_by='masterdata-220005' +delete from master.biometric_attribute where cr_by='masterdata-220005' +delete from master.biometric_type where cr_by='masterdata-220005' +delete from master.appl_form_type where cr_by='masterdata-220005' +delete from master.id_type where cr_by='masterdata-220005' +delete from master.dynamic_field where cr_by='masterdata-220005' +delete from master.zone_user where usr_id='masterdata-220005' +delete from master.blocklisted_words where word='dumbo6' +delete from master.blocklisted_words where word='dumbo7' +delete from master.machine_master where name in ('Mach-Test','Mach-Test2','Mach-Test updated') +delete from master.machine_master where mac_address = '61-D3-FD-12-C9-ED' +delete from master.machine_spec where name='HP' +delete from master.machine_master where cr_by='masterdata-220005' +delete from master.machine_type where code='Laptop2' +delete from master.gender where code='Genderdummy' +delete from master.device_master where name in ('testDevicedummy','testDevicedummy updated') +delete from master.device_master where dspec_id='743' +delete from master.device_spec where id='743' +delete from master.device_type where code='GST3' +delete from master.loc_holiday where holiday_name='AutoTest user Eng' +delete from master.loc_holiday where upd_by='masterdata-220005' +delete from master.reg_center_type where code='ALT-3' +delete FROM master.registration_center where name in ('Test123','HSR Center updated') +delete from master.loc_holiday where holiday_name in ('AutoTest user Eng','AutoTest user') +delete from master.reg_center_type where code in('ALT-3','ALT-5') +delete from master.registration_center where id='10000' +delete from master.device_type where code in ('GST3','GST4') +delete from master.doc_type where code in ('TestDocType0010','TestDocType0020') +delete from master.doc_category where code in ('DocTestCode123','DocTestCode321') +delete from master.location where code='TST12' +delete from master.template where id='445566777' +delete from master.template where template_typ_code IN(select code from master.template_type where code='Test-info-Template-auto') +update master.template set is_active='true', is_deleted='false' where id='1101' +delete from master.template_type where code='Test-info-Template-auto' +update master.location set is_active='true', is_deleted='false' where code='10114' +delete from master.location where code in('TST123','IND') +delete from master.valid_document where doctyp_Code='doc_auto_test' +delete from master.user_detail where cr_by='110005' +delete from master.template_type where code='Test-info-Template-auto' +delete from master.template_file_format where code='Doc' +delete from master.reason_list where code='TEST_LIST_CODE' +delete from master.reason_category where code='TEST_CAT_CODE' +delete from master.language where code='automationLang' +delete from master.identity_schema where title='test-schema' +delete from master.biometric_attribute where code='TST' +delete from master.biometric_type where code='dumbo6' +delete from master.appl_form_type where code='dumbo' +delete from master.id_type where code='NEW' +delete from master.dynamic_field where name in ('TestAutomationField','TestAPL') \ No newline at end of file diff --git a/apitest/src/main/resources/config/masterDataDeleteQueriesForEsignet.txt b/apitest/src/main/resources/config/masterDataDeleteQueriesForEsignet.txt new file mode 100644 index 000000000..736aa7684 --- /dev/null +++ b/apitest/src/main/resources/config/masterDataDeleteQueriesForEsignet.txt @@ -0,0 +1,8 @@ +##### DB queries to be executed to tear down the data used and generated during the test rig run + +delete from master.ca_cert_store WHERE cert_subject LIKE '%O=mosip_partnerorg%' +delete from master.ca_cert_store WHERE cert_subject LIKE '%O=mosip_ekyc_partner%' +delete from master.ca_cert_store WHERE cert_subject LIKE '%O=mosip_deviceorg%' +delete from master.ca_cert_store WHERE cert_subject LIKE '%O=mosip_ftmorg%' +delete from master.ca_cert_store WHERE cert_subject LIKE '%O=partnernameforautomationesi%' +delete from master.ca_cert_store WHERE cert_subject LIKE '%O=partnernameforesignet%' \ No newline at end of file diff --git a/apitest/src/main/resources/config/packetProperties.properties b/apitest/src/main/resources/config/packetProperties.properties new file mode 100644 index 000000000..6b783e692 --- /dev/null +++ b/apitest/src/main/resources/config/packetProperties.properties @@ -0,0 +1,2 @@ +machineId=99999 +centerId=33341 diff --git a/apitest/src/main/resources/config/packetValidator.properties b/apitest/src/main/resources/config/packetValidator.properties new file mode 100644 index 000000000..320f9e5fe --- /dev/null +++ b/apitest/src/main/resources/config/packetValidator.properties @@ -0,0 +1,2 @@ +file1=audit.json +file2=ID.json diff --git a/apitest/src/main/resources/config/partnerDemoService.properties b/apitest/src/main/resources/config/partnerDemoService.properties new file mode 100644 index 000000000..bbb432d7e --- /dev/null +++ b/apitest/src/main/resources/config/partnerDemoService.properties @@ -0,0 +1,8 @@ +# these are the ports used for running the partner-demo-service, it should be same as in ida envRunConfig.properties +preprod.encryptionPort=7653 +dev.encryptionPort=7654 +int.encryptionPort=7655 +qa.encryptionPort=7656 +extint.encryptionPort=7657 +sandbox.encryptionPort=7658 +dev-test.encryptionPort=7659 \ No newline at end of file diff --git a/apitest/src/main/resources/config/partnerQueries.properties b/apitest/src/main/resources/config/partnerQueries.properties new file mode 100644 index 000000000..8d39fa4d2 --- /dev/null +++ b/apitest/src/main/resources/config/partnerQueries.properties @@ -0,0 +1,135 @@ +deletePartnerpolicy=DELETE FROM policy_group WHERE "name"='MOSIP POLICY' AND cr_by='pm_testuser'; + +deleteUpdatePartnerpolicy=DELETE FROM policy_group WHERE "name"='MOSIP POLICY UPDATE' AND cr_by='pm_testuser'; + +createPartnerAuth=INSERT INTO auth_policy(\ +id, policy_group_id, "name", descr, policy_file_id, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ +VALUES('MOSIP-AUTH-ID-01', 'MOSIP-POLICY-ID-01', 'MOSIP POLICY', 'DESCR MOSIP POLICY', '{"authPolicies":[{"authType":"otp","authSubType":null,"mandatory":true},{"authType":"demo","authSubType":null,"mandatory":false},{"authType":"bio","authSubType":"FINGER","mandatory":false},{"authType":"bio","authSubType":"IRIS","mandatory":false},{"authType":"bio","authSubType":"FACE","mandatory":false},{"authType":"kyc","authSubType":null,"mandatory":false}],"allowedKycAttributes":[{"attributeName":"fullName","required":true},{"attributeName":"dateOfBirth","required":true},{"attributeName":"gender","required":true},{"attributeName":"phone","required":true},{"attributeName":"email","required":true},{"attributeName":"addressLine1","required":false},{"attributeName":"addressLine2","required":false},{"attributeName":"addressLine3","required":false},{"attributeName":"location1","required":false},{"attributeName":"location2","required":false},{"attributeName":"location3","required":false},{"attributeName":"postalCode","required":false},{"attributeName":"photo","required":false}]}', true, 'pm_testuser', '2020-05-14T09:48:43.394Z', null, null, false, null); + +deletePartnerAuth=DELETE FROM auth_policy WHERE "name"='MOSIP POLICY' AND cr_by='pm_testuser'; + +deleteUpdatePartnerAuth=DELETE FROM auth_policy WHERE "name"='MOSIP POLICY UPDATE' AND cr_by='pm_testuser'; + +deletePartnerAuthH=DELETE FROM auth_policy_h WHERE "name"='MOSIP POLICY' AND cr_by='pm_testuser'; + +deleteUpdatePartnerAuthH=DELETE FROM auth_policy_h WHERE "name"='MOSIP POLICY UPDATE' AND cr_by='pm_testuser'; + +registerPartner=INSERT INTO pmp.partner(\ +id,policy_group_id, name, address, contact_no, email_id, public_key, user_id, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ +VALUES('PMP-PART-ID-01','MOSIP-POLICY-ID-01','FUN-TEST-O1','HSR','8651119791','hsr@gmail.com',null,'pm_testuser',true,'pm_testuser','2020-05-14T09:48:43.394Z',null,null,null,null); + +#deleteRegisterPartner=delete from pmp.partner where policy_group_id IN ('MOSIP-POLICY-ID-01','TF-POLICY-ID-01') and contact_no='8651119791'; + +deleteRegisterPartner=delete from pmp.partner where policy_group_id IN ('MOSIP-POLICY-ID-01','TF-POLICY-ID-01'); + + + +#deleteSubmitPartnerApiKeyReq=delete from pmp.partner_policy_request where policy_id='MOSIP-POLICY-ID-01' and part_id='PMP-PART-ID-01'; + +createPartnerAPIKey=INSERT INTO partner_policy(\ +policy_api_key, part_id, policy_id, valid_from_datetime, valid_to_datetime, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ +VALUES('PAT-API-KEY-ID-01', 'PMP-PART-ID-01', 'MOSIP-AUTH-ID-01', '2020-06-17T21:15:19.724Z', '2020-08-16T04:23:39.148Z', true, 'pm_testuser', '2020-06-17T21:15:19.724Z', null, null, false, null); + +deletePartnerAPIKey=DELETE FROM partner_policy WHERE part_id='PMP-PART-ID-01' AND policy_id IN ('MOSIP-AUTH-ID-01','TF-AUTH-ID-01'); + +createTFpolicy=INSERT INTO policy_group(\ +id, "name", descr, user_id, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ +VALUES('TF-POLICY-ID-01', 'TF POLICY', 'DESCR TF POLICY', 'pm_testuser', true, 'pm_testuser', '2020-05-14T09:48:43.394Z', null, null, false, null); + +deleteTFpolicy=DELETE FROM policy_group WHERE "name"='TF POLICY' AND cr_by='pm_testuser'; + +createTFAuth=INSERT INTO auth_policy(\ +id, policy_group_id, "name", descr, policy_file_id, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ +VALUES('TF-AUTH-ID-01', 'TF-POLICY-ID-01', 'TF POLICY', 'DESCR TF POLICY', '{"authPolicies":[{"authType":"otp","authSubType":null,"mandatory":true},{"authType":"demo","authSubType":null,"mandatory":false},{"authType":"bio","authSubType":"FINGER","mandatory":false},{"authType":"bio","authSubType":"IRIS","mandatory":false},{"authType":"bio","authSubType":"FACE","mandatory":false},{"authType":"kyc","authSubType":null,"mandatory":false}],"allowedKycAttributes":[{"attributeName":"fullName","required":true},{"attributeName":"dateOfBirth","required":true},{"attributeName":"gender","required":true},{"attributeName":"phone","required":true},{"attributeName":"email","required":true},{"attributeName":"addressLine1","required":false},{"attributeName":"addressLine2","required":false},{"attributeName":"addressLine3","required":false},{"attributeName":"location1","required":false},{"attributeName":"location2","required":false},{"attributeName":"location3","required":false},{"attributeName":"postalCode","required":false},{"attributeName":"photo","required":false}]}', true, 'pm_testuser', '2020-05-14T09:48:43.394Z', null, null, false, null); + +deleteTFAuth=DELETE FROM auth_policy WHERE "name"='TF POLICY' AND cr_by='pm_testuser'; + +deleteMISP= delete from pms.misp where name='MISP_Test0002'; + +#deleteMISP= delete from pmp.misp where cr_by='pm_testuser'; + +createMISP= INSERT INTO pms.misp(\ +id,name, address, contact_no, email_id, user_id, is_active, status_code, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ +VALUES('MISP-FUN-ID-01','MISP_Test0002','Bangalore','9840587080','misp@telecom.com','pm_testuser','true','Active','pm_testuser','2020-06-17T05:10:51.169Z',null,null,null,null); +validateMISPLicence=INSERT INTO pms.misp_license(\ + misp_id, license_key, valid_from_date, valid_to_date, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('MISP-FUN-ID-01','r9YUOi2BvC9QVdZP5snsCeonXqdEZ9rQ0TroekqHMhX3c8mPfrtestfun','2020-09-18T06:53:18.150Z','2020-10-18T06:53:18.150Z',true,'pm_testuser','2020-09-18T06:53:18.150Z',null,null,null,null); + +#deleteValidateMISPLicence= delete from pmp.misp_license where cr_by='pm_testuser'; + +deleteValidateMISPLicence= delete from pms.misp_license where misp_id='MISP-FUN-ID-01'; + +approveMISP=UPDATE pms.misp SET status_code='approved',upd_by='pm_testuser', upd_dtimes='2019-06-19T09:48:43.394Z' WHERE id='MISP-FUN-ID-01'; + + +# updated policy management ------------------------------------------------- + +createPartnerType=INSERT INTO pms.partner_type(\ + code, partner_description, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes, is_policy_required)\ + VALUES ('Mosip Auth', 'Mosip Auth Desc', true, 'pm_testuser', CURRENT_DATE, null, null, null, null, null); + +deletePartnerType=delete from pms.partner_type where code='Mosip Auth' and cr_by='pm_testuser'; + +createPolicyGroup=INSERT INTO pms.policy_group(\ +id, "name", descr, user_id, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ +VALUES('POLICY-GROUP-ID-01', 'MOSIP POLICY GROUP', 'DESCR MOSIP POLICY GROUP', 'pm_testuser', true, 'pm_testuser', '2020-05-14T09:48:43.394Z', null, null, false, null); + +deletePolicyGroup=DELETE FROM pms.policy_group WHERE name='MOSIP POLICY GROUP' AND cr_by='pm_testuser'; + +deleteAuthHPolicy=delete FROM pms.auth_policy_h where name='MOSIP AUTH POLICY' and cr_by='pm_testuser'; + +createAuthPolicy=INSERT INTO pms.auth_policy(\ +id, policy_group_id, name, descr, policy_file_id, policy_type, version, policy_schema, valid_from_date, valid_to_date, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ +VALUES('POLICY-AUTH-ID-01','POLICY-GROUP-ID-01','MOSIP AUTH POLICY', 'DESC MOSIP AUTH POLICY', '{"authTokenType":"partner","allowedAuthTypes":[{"authType":"bio","authSubType":"FINGER","mandatory":true}],"shareableAttributes":[{"encrypted":true,"format":"string","attributeName":"string"}],"dataSharePolicies":{"typeOfShare":"string","transactionsAllowed":"string","shareDomain":"string","encryptionType":"string","validForInMinutes":"string"}}',\ +'Auth','1.0',null,'2020-09-16T02:50:33.344Z','2020-10-16T02:50:33.344Z',true,'pm_testuser','2020-09-16T02:50:33.344Z',null,null,false,null); + +deleteAuthPolicy=delete FROM pms.auth_policy where name='MOSIP AUTH POLICY' and cr_by='pm_testuser'; + +createAuthPolicyForPublishPolicy=INSERT INTO pms.auth_policy(\ +id, policy_group_id, name, descr, policy_file_id, policy_type, version, policy_schema, valid_from_date, valid_to_date, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ +VALUES('POLICY-AUTH-ID-01','POLICY-GROUP-ID-01','MOSIP AUTH POLICY', 'DESC MOSIP AUTH POLICY', '{"authTokenType":"partner","allowedAuthTypes":[{"authType":"bio","authSubType":"FINGER","mandatory":true}],"shareableAttributes":[{"encrypted":true,"format":"string","attributeName":"string"}],"dataSharePolicies":{"typeOfShare":"string","transactionsAllowed":"string","shareDomain":"string","encryptionType":"string","validForInMinutes":"string"}}',\ +'Auth','1.0',null,'2020-09-16T02:50:33.344Z','2020-10-16T02:50:33.344Z',false,'pm_testuser','2020-09-16T02:50:33.344Z',null,null,false,null); + + +createPartner=INSERT INTO pms.partner(\ +id, policy_group_id, name, address, contact_no, email_id, certificate_alias, user_id, partner_type_code, approval_status, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ +VALUES('PMS-ID-01', 'POLICY-GROUP-ID-01', 'PMS', 'INDIA', '1234567809', 'test@mosip.com', null, 'pm_testuser', 'Mosip Auth','Activated', true, 'pm_testuser','2020-05-14T09:48:43.394Z',null,null,null,null); + +#deletePartner=DELETE FROM pms.partner WHERE id='PMS-ID-01' AND cr_by='pm_testuser'; +deletePartner=DELETE FROM pms.partner WHERE name='PMS' AND cr_by='pm_testuser'; + +createPartnerApiKey=INSERT INTO pms.partner_policy(\ +policy_api_key, part_id, policy_id, valid_from_datetime, valid_to_datetime, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ +VALUES('API-KEY-ID-01','PMS-ID-01','POLICY-AUTH-ID-01', '2020-09-17T12:56:17.598Z','2020-10-16T02:50:33.344Z', true, 'pm_testuser', '2020-09-17T12:56:17.598Z',null,null,null,null); + +deletePartnerApiKeyData=DELETE FROM pms.partner_policy WHERE policy_api_key='API-KEY-ID-01' AND cr_by='pm_testuser'; + +submitPartnerApiKeyReq=INSERT INTO pms.partner_policy_request(\ +id, part_id, policy_id, request_datetimes, request_detail, status_code, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ +VALUES('SUB-PMP-REQ-ID-01','PMS-ID-01','POLICY-AUTH-ID-01','2020-06-01T12:36:03.897Z','Need to submit the payment','in-progress','pm_testuser','2020-06-01T12:36:03.897Z',null,null,null,null); + +deleteSubmitPartnerApiKeyReq=delete from pms.partner_policy_request where policy_id='POLICY-AUTH-ID-01' and part_id='PMS-ID-01'; + +deletePartnerContact=DELETE FROM pms.partner_contact WHERE partner_id='PMS-ID-01' AND cr_by='pm_testuser'; + +createDeviceDetail=INSERT INTO regdevice.device_detail(\ + id, dprovider_id, dtype_code, dstype_code, make, model, partner_org_name, approval_status, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('DEVICE-ID-01','PMS-ID-01', 'Finger', 'Slab', 'xyz', 'FRO90000', 'PMS', 'Pending_Approval', false, 'pm_testuser', '2020-09-28T14:17:19.411Z', null, null, false, null); + + +deleteDeviceDetail=delete from regdevice.device_detail where id='DEVICE-ID-01' and cr_by = 'pm_testuser'; + +updateDeviceDetail=UPDATE regdevice.device_detail SET approval_status='Activated', is_active=true, upd_by='pm_testuser', upd_dtimes='2020-09-29T05:59:20.268Z' WHERE id='DEVICE-ID-01'; + +createSecureBiometricInterface=INSERT INTO regdevice.secure_biometric_interface(\ + id, sw_binary_hash, sw_version, device_detail_id, sw_cr_dtimes, sw_expiry_dtimes, approval_status, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('3c0e8f2e', '[binary data]', 'MO.TD.01','DEVICE-ID-01', '2020-09-23T10:29:49.309Z', '2020-12-31T07:00:13.375Z', 'Pending_Approval', false, 'pm_testuser','2020-09-29T08:17:07.944Z', null, null, false, null); + +deleteSecureBiometricInterface=delete from regdevice.secure_biometric_interface where device_detail_id='DEVICE-ID-01' and cr_by='pm_testuser'; +deleteSecureBiometricInterfaceH=delete from regdevice.secure_biometric_interface_h where device_detail_id='DEVICE-ID-01' and cr_by='pm_testuser'; + +createSaveFtpChipDetail=INSERT INTO regdevice.ftp_chip_detail(\ + id, foundational_trust_provider_id, make, model, certificate_alias, partner_org_name, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('FTP-ID-01', 'PMS-ID-01', 'MAKE01', 'MODEL-01', null, 'PMS', false, 'pm_testuser', '2020-09-29T13:25:24.450Z', null, null, false, null); + +deleteSaveFtpChipDetail=delete from regdevice.ftp_chip_detail where id='FTP-ID-01' and foundational_trust_provider_id='PMS-ID-01'; diff --git a/apitest/src/main/resources/config/pmsDataDeleteQueries.txt b/apitest/src/main/resources/config/pmsDataDeleteQueries.txt new file mode 100644 index 000000000..33b4e6f7b --- /dev/null +++ b/apitest/src/main/resources/config/pmsDataDeleteQueries.txt @@ -0,0 +1,28 @@ +##### DB queries to be executed to tear down the data used and generated during the test rig run + +delete from pms.partner_contact where partner_id='Tech-123' +delete from partner_policy where part_id='Tech-123' +delete from partner_policy where cr_by='partner-111997' +delete from partner_policy where policy_id in (select id from auth_policy where name in ('mosip policy','mosip data share policy','mosip policy9')) +delete from partner_policy_request where part_id='Tech-123' +delete from partner_policy_request where cr_by='partner-111997' +delete from pms.partner_policy where label='string' +delete from partner_policy_request where policy_id in (select id from auth_policy where name in ('mosip policy','mosip data share policy','mosip policy9')) +delete from partner_policy_bioextract where policy_id in (select id from auth_policy where name in ('mosip policy','mosip data share policy','mosip policy9')) +delete from partner_policy_bioextract where cr_by='partner-111997' +delete from partner_policy_credential_type where part_id='MOVP' +delete from pms.partner_policy_request where cr_by = 'partner-111997' +delete from pms.partner_contact where cr_by = 'partner-111997' +delete from pms.partner where cr_by = 'partner-111997' +delete from pms.partner where id in ('Tech-123','MOVP','DPP','MISP','MISP2','FTP','111997','mosipprint','partner-111997','updatepolicy') +delete from auth_policy where cr_by='partner-111997' +delete from pms.auth_policy where name in('mosip policy','mosip policy2','mosip policy3','mosip data share policy','mosip data share policy2') +delete from policy_group where cr_by='partner-111997' +delete from pms.policy_group where name in ('mosip policy group','mosip policy role testing groupp','mosip policy group2','update_policy_group','mosip policy status testing groupp with policy') +delete from pms.misp_license where cr_by='pm_testuser' +delete from pms.misp_license where misp_id in ('MISP','MISP2') +delete from pms.ftp_chip_detail where foundational_trust_provider_id='FTP' +delete from pms.misp where name='mosip_misp' +delete from pms.secure_biometric_interface where provider_id='Tech-123' +delete from pms.device_detail where id='device-id-123' +delete from pms.device_detail where make in ('abcde','abcdef') \ No newline at end of file diff --git a/apitest/src/main/resources/config/policyGroup.json b/apitest/src/main/resources/config/policyGroup.json new file mode 100644 index 000000000..d9baab205 --- /dev/null +++ b/apitest/src/main/resources/config/policyGroup.json @@ -0,0 +1,10 @@ +{ + "id": "string", + "metadata": {}, + "request": { + "desc":"desc mosip auth policy group", + "name":"mosip auth policy group 2345678" + }, + "requesttime": "2022-09-07T04:23:38.117Z", + "version": "string" +} diff --git a/apitest/src/main/resources/config/prereg_SendOtp.json b/apitest/src/main/resources/config/prereg_SendOtp.json new file mode 100644 index 000000000..142abe127 --- /dev/null +++ b/apitest/src/main/resources/config/prereg_SendOtp.json @@ -0,0 +1,9 @@ +{ + "id": "mosip.pre-registration.login.sendotp", + "version": "1.0", + "requesttime": "$TIMESTAMP$", + "request": { + "langCode": "$PRIMARYLANG$", + "userId": "robin.hood@mailinator.com" + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/config/prereg_ValidateOtp.json b/apitest/src/main/resources/config/prereg_ValidateOtp.json new file mode 100644 index 000000000..93d22c9b1 --- /dev/null +++ b/apitest/src/main/resources/config/prereg_ValidateOtp.json @@ -0,0 +1,9 @@ +{ + "id": "mosip.pre-registration.login.useridotp", + "version": "1.0", + "requesttime": "$TIMESTAMP$", + "request": { + "otp": "781412", + "userId": "robin.hood@mailinator.com" + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/config/registrationProcessorAPI.properties b/apitest/src/main/resources/config/registrationProcessorAPI.properties new file mode 100644 index 000000000..9d419ce7d --- /dev/null +++ b/apitest/src/main/resources/config/registrationProcessorAPI.properties @@ -0,0 +1,27 @@ +=======API URLs====================================================================== + +syncListApi=/registrationprocessor/v1/registrationstatus/sync +packetReceiverApi=/registrationprocessor/v1/packetreceiver/registrationpackets +packetStatusApi=/registrationprocessor/v1/registrationstatus/search +packetGeneratorApi=/registrationprocessor/v1/requesthandler/packetgenerator +assignmentApi =/registrationprocessor/v1/manualverification/assignment +decisionApi = /registrationprocessor/v1/manualverification/decision +applicantDemograhicApi = /registrationprocessor/v1/manualverification/applicantDemographic +applicantBiometricApi = /registrationprocessor/v1/manualverification/applicantBiometric +packetInfoApi = /registrationprocessor/v1/manualverification/packetInfo +idRepoByRid = /idrepository/v1/identity/idvid/ +reprintingApi = /registrationprocessor/v1/requesthandler/reprint +adminRequirementApi = /registrationprocessor/v1/registrationtransaction/search/{langcode}/{rid} +packetManagerAuditsApi = /commons/v1/packetmanager/audits +packetManagerBiometricsApi = /commons/v1/packetmanager/biometrics +packetManagerSearchApi = /commons/v1/packetmanager/searchField +packetManagerValidatePacketApi = /commons/v1/packetmanager/validatePacket +packetManagerSearchFieldsApi = /commons/v1/packetmanager/searchFields +packetManagerDocumentApi = /commons/v1/packetmanager/document +packetManagerMetaInfoApi = /commons/v1/packetmanager/metaInfo +====================HDFS Connection======================================================= +nameNodeUrl = hdfs://13.71.115.204:51000 +kdcDomain = NODE-MASTER.SOUTHINDIA.CLOUDAPP.AZURE.COM +userName = qa-regprocessor +userPass = Mosip@dev123 +isAuthEnable = false diff --git a/apitest/src/main/resources/config/residentServicesQueries.properties b/apitest/src/main/resources/config/residentServicesQueries.properties new file mode 100644 index 000000000..22381deb9 --- /dev/null +++ b/apitest/src/main/resources/config/residentServicesQueries.properties @@ -0,0 +1,15 @@ +createPackets=INSERT INTO regprc.registration( \ + id, reg_type, ref_reg_id, applicant_type, status_code, lang_code, status_comment, latest_trn_id, trn_retry_count, pkt_cr_dtimes, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes, latest_trn_type_code, latest_trn_status_code, latest_trn_dtimes, reg_process_retry_count, reg_stage_name) \ + VALUES ('10008100670005520200114101900','NEW',null,null,'PROCESSED','eng','OK','cddfbcae-7d72-4c3c-b42c-c000e89c3510',0,null, true, 'MOSIP_SYSTEM',' 2020-01-14 10:20:15.542','MOSIP_SYSTEM','2020-01-15 12:18:08.773',false,null,'PACKET_REPROCESS','SUCCESS','2020-01-15 12:18:08.773',14,'PacketUploaderStage'), \ + ('10008100670005520200114101901','NEW',null,null,'PROCESSING','eng','OK','cddfbcae-7d72-4c3c-b42c-c000e89c3510',0,null, true, 'MOSIP_SYSTEM',' 2020-01-14 10:20:15.542','MOSIP_SYSTEM','2020-01-15 12:18:08.773',false,null,'PACKET_REPROCESS','SUCCESS','2020-01-15 12:18:08.773',14,'PacketUploaderStage'), \ + ('10008100670005520200114101902','NEW',null,null,'REJECTED','eng','OK','cddfbcae-7d72-4c3c-b42c-c000e89c3510',0,null, true, 'MOSIP_SYSTEM',' 2020-01-14 10:20:15.542','MOSIP_SYSTEM','2020-01-15 12:18:08.773',false,null,'PACKET_REPROCESS','SUCCESS','2020-01-15 12:18:08.773',14,'PacketUploaderStage'), \ + ('10008100670005520200114101903','NEW',null,null,'RESEND','eng','OK','cddfbcae-7d72-4c3c-b42c-c000e89c3510',0,null, true, 'MOSIP_SYSTEM',' 2020-01-14 10:20:15.542','MOSIP_SYSTEM','2020-01-15 12:18:08.773',false,null,'PACKET_REPROCESS','SUCCESS','2020-01-15 12:18:08.773',14,'PacketUploaderStage'), \ + ('10008100670005520200114101904','NEW',null,null,'REREGISTER','eng','OK','cddfbcae-7d72-4c3c-b42c-c000e89c3510',0,null, true, 'MOSIP_SYSTEM',' 2020-01-14 10:20:15.542','MOSIP_SYSTEM','2020-01-15 12:18:08.773',false,null,'PACKET_REPROCESS','SUCCESS','2020-01-15 12:18:08.773',14,'PacketUploaderStage'); + + + + +deletePacketRecord=DELETE FROM regprc.registration WHERE id in ('10008100670005520200114101900','10008100670005520200114101901','10008100670005520200114101902','10008100670005520200114101903','10008100670005520200114101904'); + + + \ No newline at end of file diff --git a/apitest/src/main/resources/config/sign.json b/apitest/src/main/resources/config/sign.json new file mode 100644 index 000000000..a54fd5040 --- /dev/null +++ b/apitest/src/main/resources/config/sign.json @@ -0,0 +1,14 @@ +{ + "id": "string", + "metadata": {}, + "request": { + "applicationId": "IDA", + "dataToSign": "$DATA$", + "includeCertHash": true, + "includeCertificate": true, + "includePayload": false, + "referenceId": "SIGN" + }, + "requesttime": "2021-01-07T05:32:31.722Z", + "version": "string" +} \ No newline at end of file diff --git a/apitest/src/main/resources/config/test.properties b/apitest/src/main/resources/config/test.properties new file mode 100644 index 000000000..6eb1e1e3a --- /dev/null +++ b/apitest/src/main/resources/config/test.properties @@ -0,0 +1,16 @@ +# ------------------------------------------------------------------------------------------- +# Properties File that will define all of the test configurations for core systems edge API +# test automation. This also includes all JIRA integrations for automatic defect tracking. +# + +# ------------------------------------------------------------------------------------------- + +# ------------------------------------------------------------------------------------------- +# URIs, URLs, & Environment Configurations +# ------------------------------------------------------------------------------------------- +#testEnvironment=https://integ.mosip.io +#testEnvironmentPreReg=https://integ.mosip.io +environment=qa +testEnvironment=https://integ.mosip.io +testEnvironmentPreReg=https://integ.mosip.io + diff --git a/apitest/src/main/resources/config/tokenGeneration.properties b/apitest/src/main/resources/config/tokenGeneration.properties new file mode 100644 index 000000000..a7ec811fe --- /dev/null +++ b/apitest/src/main/resources/config/tokenGeneration.properties @@ -0,0 +1,7 @@ +token.request.id=mosip.io.userId.pwd +token.request.appid=regproc +token.request.username=110006 +token.request.password=mosip +token.request.version=1.0 +token.request.clientId=mosip-regproc-client +token.request.secretKey=abc123 \ No newline at end of file diff --git a/apitest/src/main/resources/config/updatePacketProperties.properties b/apitest/src/main/resources/config/updatePacketProperties.properties new file mode 100644 index 000000000..479344401 --- /dev/null +++ b/apitest/src/main/resources/config/updatePacketProperties.properties @@ -0,0 +1,7 @@ +bio&fullName = mona +fullName = abc +addressLine1 = xyz +phone = 1234567890 +email = abc@gmail.com +dateOfBirth = 1983/01/01 +UINInvalid = 1234567 \ No newline at end of file diff --git a/apitest/src/main/resources/config/valueMapping.properties b/apitest/src/main/resources/config/valueMapping.properties new file mode 100644 index 000000000..c9b1c8ebb --- /dev/null +++ b/apitest/src/main/resources/config/valueMapping.properties @@ -0,0 +1,35 @@ +# common properties +residenceStatus=NFR +fullName=TEST_FULLNAME +firstName=TEST_FIRSTNAME +dateOfBirth=1996/01/01 +gender=MLE +pobCountry=POB_COUNTRY +pobProvince=POB_PROVINCE +pobCity=POB_CITY +bloodType=BLOOD_TYPE +permanentCountry=PERMANENT_COUNTRY +permanentAddressLine1=PERMANENT_ADDRESS_LINE_1 +presentAddressLine1=PRESENT_ADDRESS_LINE_1 +modeOfClaim=MODE_OF_CLAIM +presentCountry=PRESENT_COUNTRY +addressLine1=TEST_ADDRESSLINE1 +addressLine2=TEST_ADDRESSLINE2 +addressLine3=TEST_ADDRESSLINE3 +postalCode=14022 +phone=8249742850 +email=test@mosip.net +region=TEST_REGION +fullName1=Lisa.GN +firstName1=Lisa.GN +province=TEST_PROVINCE +city=TEST_CITY +zone=TEST_ZONE +introducerName=TEST_INTRODUCERNAME +bloodGroup=O +Miss-TitleFromServer=MIS +Mr-TitleFromServer=MIR +Mrs-TitleFromServer=MRS +Miss-TitleFromServer.=MIS +addressCopy=TEST_ADDRESSLINE3 +proofOfAddress=TEST_ADDRESSLINE2 \ No newline at end of file diff --git a/apitest/src/main/resources/customize-emailable-report-template.html b/apitest/src/main/resources/customize-emailable-report-template.html new file mode 100644 index 000000000..cfeca4d6e --- /dev/null +++ b/apitest/src/main/resources/customize-emailable-report-template.html @@ -0,0 +1,61 @@ + + + + + + + + + +
+ mosip-logo +
+ + \ No newline at end of file diff --git a/apitest/src/main/resources/dbFiles/.xml b/apitest/src/main/resources/dbFiles/.xml new file mode 100644 index 000000000..ae236dcff --- /dev/null +++ b/apitest/src/main/resources/dbFiles/.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/apitest/src/main/resources/dbFiles/PMS_delete_script.txt b/apitest/src/main/resources/dbFiles/PMS_delete_script.txt new file mode 100644 index 000000000..a0100b9d4 --- /dev/null +++ b/apitest/src/main/resources/dbFiles/PMS_delete_script.txt @@ -0,0 +1,28 @@ +delete from pms.partner_contact where partner_id='Tech-123'; +delete from partner_policy where part_id='Tech-123'; +delete from partner_policy where policy_id in (select id from auth_policy where name in ('mosip policy','mosip data share policy')); +delete from partner_policy_request where part_id='Tech-123'; +delete from pms.partner_policy where label='string'; +delete from partner_policy_request where policy_id in (select id from auth_policy where name in ('mosip policy','mosip data share policy')); +delete from partner_policy_bioextract where policy_id in (select id from auth_policy where name in ('mosip policy','mosip data share policy')); +delete from partner_policy_credential_type where part_id='MOVP'; +delete from pms.partner where id in ('Tech-123','MOVP','DPP','MISP','MISP2','FTP','111997','updatepolicy'); +delete from pms.auth_policy where name in('mosip policy','mosip policy2','mosip policy3','mosip data share policy','mosip data share policy2'); +delete from pms.policy_group where name in ('mosip policy group','mosip policy group2','update_policy_group'); +delete from pms.misp_license where cr_by='pm_testuser'; +delete from pms.misp_license where misp_id in ('MISP','MISP2'); +delete from pms.ftp_chip_detail where foundational_trust_provider_id='FTP'; +delete from pms.misp where name='mosip_misp'; +delete from pms.secure_biometric_interface where provider_id='Tech-123'; +delete from pms.device_detail where id='device-id-123'; +delete from pms.device_detail where make in ('abcde','abcdef'); +delete from mosip_keymgr.keymgr.ca_cert_store where cert_subject ='CN=mosiptest.org,O=MOSIPTEST,L=Bangalore,ST=Karantaka,C=IN'; +delete from mosip_keymgr.keymgr.partner_cert_store where cert_subject ='CN=Techno.com,O=Techno,L=Bangalore,ST=Karnataka,C=IN'; +delete from mosip_keymgr.keymgr.partner_cert_store where cert_subject ='CN=Techno,O=Techno,L=Bangalore,ST=Karnataka,C=IN'; +delete from mosip_keymgr.keymgr.ca_cert_store where cert_subject ='CN=apitest,OU=apitest,O=apitest,L=BLR,ST=KAR,C=IN'; +delete from mosip_keymgr.keymgr.ca_cert_store where cert_subject ='CN=apitest2,OU=apitest2,O=apitest2,L=BLR,ST=KAR,C=IN'; +delete from mosip_keymgr.keymgr.partner_cert_store where cert_subject ='CN=deviceprovider,OU=deviceprovider,O=deviceprovider,L=BLR,ST=KAR,C=IN'; +delete from mosip_keymgr.keymgr.partner_cert_store where cert_subject ='CN=movp,OU=movp,O=movp,L=BLR,ST=KAR,C=IN'; +delete from mosip_keymgr.keymgr.partner_cert_store where cert_subject ='CN=ftp,OU=ftp,O=ftp,L=BLR,ST=KAR,C=IN'; +delete from mosip_keymgr.keymgr.partner_cert_store where cert_subject ='CN=misp,OU=misp,O=misp,L=BLR,ST=KAR,C=IN'; +delete from mosip_keymgr.keymgr.partner_cert_store where cert_subject ='CN=misp2,OU=misp2,O=misp2,L=BLR,ST=KAR,C=IN'; \ No newline at end of file diff --git a/apitest/src/main/resources/dbFiles/dbConfig.xml b/apitest/src/main/resources/dbFiles/dbConfig.xml new file mode 100644 index 000000000..e27fb8f56 --- /dev/null +++ b/apitest/src/main/resources/dbFiles/dbConfig.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/apitest/src/main/resources/dbFiles/delete_Masterdata.sql b/apitest/src/main/resources/dbFiles/delete_Masterdata.sql new file mode 100644 index 000000000..8724f6b2e --- /dev/null +++ b/apitest/src/main/resources/dbFiles/delete_Masterdata.sql @@ -0,0 +1,88 @@ +delete from master.blocklisted_words where cr_by='dumbo6'; +delete from master.blocklisted_words where word='dumbooo'; +delete from master.blocklisted_words where cr_by='masterdata-220005'; +delete from master.machine_master where cr_by='masterdata-220005'; +delete from master.machine_master where cr_by='masterdata-220005'; +delete from master.machine_master where name in ('Mach-Test','Mach-Test2','Mach-Test updated'); +delete from master.machine_master mm WHERE mm.mspec_id IN(SELECT ms.id from master.machine_spec ms where ms.cr_by='masterdata-220005'); +delete FROM master.machine_spec WHERE mtyp_code IN (SELECT code FROM master.machine_type WHERE cr_by = 'masterdata-220005'); +delete from master.machine_spec where cr_by='masterdata-220005'; +delete from master.machine_type where cr_by='masterdata-220005'; +delete from master.gender where cr_by='masterdata-220005'; +delete from master.device_master where upd_by='masterdata-220005'; +delete from master.device_master where cr_by='masterdata-220005'; +delete from master.device_master where name='testDevicedummy'; +DELETE FROM master.device_master WHERE dspec_id IN(SELECT id FROM master.device_spec WHERE cr_by='masterdata-220005'); +delete from master.device_spec where cr_by='masterdata-220005'; +delete from master.device_type where cr_by='masterdata-220005'; +delete from master.loc_holiday where cr_by='masterdata-220005'; +delete from master.reg_center_type where cr_by='masterdata-220005'; +delete from master.registration_center where cr_by='masterdata-220005'; +delete from master.loc_holiday where cr_by='masterdata-220005'; +delete from master.reg_center_type where cr_by='masterdata-220005'; +delete from master.registration_center where cr_by='masterdata-220005'; +delete from master.device_type where cr_by='masterdata-220005'; +delete from master.doc_type where cr_by='masterdata-220005'; +delete from master.doc_category where cr_by='masterdata-220005'; +delete from master.location where cr_by='masterdata-220005'; +delete from master.template where cr_by='masterdata-220005'; +update master.template set is_active='true', is_deleted='false' where id='1101'; +delete from master.template where template_typ_code IN(select code from master.template_type where code='Test-info-Template-auto'); +delete from master.template_type where code='Test-info-Template-auto'; +update master.location set is_active='true', is_deleted='false' where code='10114'; +delete from master.location where code in('TST123','IND'); +delete from master.valid_document where cr_by='masterdata-220005'; +delete from master.user_detail where cr_by='masterdata-220005'; +delete from master.template_type where cr_by='masterdata-220005'; +delete from master.template_file_format where cr_by='masterdata-220005'; +delete from master.reason_list where cr_by='masterdata-220005'; +delete from master.reason_category where cr_by='masterdata-220005'; +delete from master.language where cr_by='masterdata-220005'; +delete from master.identity_schema where cr_by='masterdata-220005'; +delete from master.biometric_attribute where cr_by='masterdata-220005'; +delete from master.biometric_type where cr_by='masterdata-220005'; +delete from master.appl_form_type where cr_by='masterdata-220005'; +delete from master.id_type where cr_by='masterdata-220005'; +delete from master.dynamic_field where cr_by='masterdata-220005'; +delete from master.zone_user where usr_id='masterdata-220005'; +delete from master.blocklisted_words where word='dumbo6'; +delete from master.blocklisted_words where word='dumbo7'; +delete from master.machine_master where name in ('Mach-Test','Mach-Test2','Mach-Test updated'); +delete from master.machine_master where mac_address = '61-D3-FD-12-C9-ED'; +delete from master.machine_spec where name='HP'; +delete from master.machine_master where cr_by='masterdata-220005'; +delete from master.machine_type where code='Laptop2'; +delete from master.gender where code='Genderdummy'; +delete FROM master.device_master where name in ('testDevicedummy','testDevicedummy updated'); +delete from master.device_master where dspec_id='743'; +delete from master.device_spec where id='743'; +delete from master.device_type where code='GST3'; +delete from master.loc_holiday where holiday_name='AutoTest user Eng'; +delete from master.reg_center_type where code='ALT-3'; +delete FROM master.registration_center where name in ('Test123','HSR Center updated'); +delete from master.loc_holiday where holiday_name in ('AutoTest user Eng','AutoTest user'); +delete from master.reg_center_type where code in('ALT-3','ALT-5'); +delete from master.registration_center where id='10000'; +delete from master.device_type where code in ('GST3','GST4'); +delete from master.doc_type where code in ('TestDocType0010','TestDocType0020'); +delete from master.doc_category where code in ('DocTestCode123','DocTestCode321'); +delete from master.location where code='TST12'; +delete from master.template where id='445566777'; +delete from master.template where template_typ_code IN(select code from master.template_type where code='Test-info-Template-auto'); +update master.template set is_active='true', is_deleted='false' where id='1101'; +delete from master.template_type where code='Test-info-Template-auto'; +update master.location set is_active='true', is_deleted='false' where code='10114'; +delete from master.location where code in('TST123','IND'); +delete from master.valid_document where doctyp_Code='doc_auto_test'; +delete from master.user_detail where cr_by='110005'; +delete from master.template_type where code='Test-info-Template-auto'; +delete from master.template_file_format where code='Doc'; +delete from master.reason_list where code='TEST_LIST_CODE'; +delete from master.reason_category where code='TEST_CAT_CODE'; +delete from master.language where code='automationLang'; +delete from master.identity_schema where title='test-schema'; +delete from master.biometric_attribute where code='TST'; +delete from master.biometric_type where code='dumbo6'; +delete from master.appl_form_type where code='dumbo'; +delete from master.id_type where code='NEW'; +delete from master.dynamic_field where name in ('TestAutomationField','TestAPL'); diff --git a/apitest/src/main/resources/krb5.conf b/apitest/src/main/resources/krb5.conf new file mode 100644 index 000000000..734dbfcf8 --- /dev/null +++ b/apitest/src/main/resources/krb5.conf @@ -0,0 +1,29 @@ +# Configuration snippets may be placed in this directory as well +includedir /etc/krb5.conf.d/ + +[logging] + default = FILE:/var/log/krb5libs.log + kdc = FILE:/var/log/krb5kdc.log + admin_server = FILE:/var/log/kadmind.log + +[libdefaults] + kdc_timeout = 30s + udp_preference_limit = 1 + dns_lookup_realm = false + ticket_lifetime = 365d + renew_lifetime = 365d + forwardable = true + rdns = false + pkinit_anchors = /etc/pki/tls/certs/ca-bundle.crt + default_realm = NODE-MASTER.SOUTHINDIA.CLOUDAPP.AZURE.COM + #default_ccache_name = KEYRING:persistent:%{uid} + +[realms] + NODE-MASTER.SOUTHINDIA.CLOUDAPP.AZURE.COM = { + kdc = node-master.southindia.cloudapp.azure.com:51088 + admin_server = node-master.southindia.cloudapp.azure.com +} + +[domain_realm] + .node-master.southindia.cloudapp.azure.com = NODE-MASTER.SOUTHINDIA.CLOUDAPP.AZURE.COM + node-master.southindia.cloudapp.azure.com = NODE-MASTER.SOUTHINDIA.CLOUDAPP.AZURE.COM \ No newline at end of file diff --git a/apitest/src/main/resources/log4j.properties b/apitest/src/main/resources/log4j.properties new file mode 100644 index 000000000..93001dc68 --- /dev/null +++ b/apitest/src/main/resources/log4j.properties @@ -0,0 +1,8 @@ +log4j.rootLogger=INFO, Appender1,Appender2 +log4j.appender.Appender1=org.apache.log4j.ConsoleAppender +log4j.appender.Appender1.layout=org.apache.log4j.PatternLayout +log4j.appender.Appender1.layout.ConversionPattern=%-7p %d [%t] %c %x - %m%n +log4j.appender.Appender2=org.apache.log4j.FileAppender +log4j.appender.Appender2.File=src/logs/mosip-api-test.log +log4j.appender.Appender2.layout=org.apache.log4j.PatternLayout +log4j.appender.Appender2.layout.ConversionPattern=%-7p %d [%t] %c %x - %m%n diff --git a/apitest/src/main/resources/mimoto/AddIdentity/AddIdentity.yml b/apitest/src/main/resources/mimoto/AddIdentity/AddIdentity.yml new file mode 100644 index 000000000..1a7b52eb3 --- /dev/null +++ b/apitest/src/main/resources/mimoto/AddIdentity/AddIdentity.yml @@ -0,0 +1,85 @@ +AddIdentity: + Mimoto_AddIdentity_withValidParameters_smoke_Pos: + endPoint: /idrepository/v1/identity/ + role: idrepo + restMethod: post + inputTemplate: mimoto/AddIdentity/addIdentity_$LANGNUMBER$ + outputTemplate: mimoto/AddIdentity/addIdentityResult + input: '{ + "value": "$BIOVALUE$", + "id": "mosip.id.create", + "registrationId": "$RID$", + "biometricReferenceId": "23452353", + "UIN": "$UIN$", + "dateOfBirth": "1992/04/15", + "postalCode": "14022", + "email": "Mimoto_AddIdentity_withValidParameters_smoke_Pos@mosip.net", + "phone": "9876543210", + "referenceIdentityNumber": "6789545678878", + "version": "v1", + "introducerRID": "212124324784879", + "introducerUIN": "212124324784879", + "category": "individualBiometrics", + "requesttime": "$TIMESTAMP$" +}' + output: '{ + "status":"ACTIVATED" +}' + + Mimoto_AddIdentity_Binding_smoke_Pos: + endPoint: /idrepository/v1/identity/ + role: idrepo + restMethod: post + inputTemplate: mimoto/AddIdentity/addIdentity_$LANGNUMBER$ + outputTemplate: mimoto/AddIdentity/addIdentityResult + input: '{ + "value": "$BIOVALUE$", + "id": "mosip.id.create", + "registrationId": "$RID$", + "biometricReferenceId": "23452353", + "UIN": "$UIN$", + "dateOfBirth": "1992/04/15", + "postalCode": "14022", + "email": "Mimoto_AddIdentity_Binding_smoke_Pos@mosip.net", + "phone": "9876543210", + "referenceIdentityNumber": "6789545678878", + "version": "v1", + "introducerRID": "212124324784879", + "introducerUIN": "212124324784879", + "category": "individualBiometrics", + "requesttime": "$TIMESTAMP$" +}' + output: '{ + "status":"ACTIVATED" +}' + + Mimoto_AddIdentity_without_FaceDate_CBEFF_smoke_Pos: + endPoint: /idrepository/v1/identity/ + role: idrepo + restMethod: post + inputTemplate: mimoto/AddIdentity/addIdentity_$LANGNUMBER$ + outputTemplate: mimoto/error + input: '{ + "value": "$BIOVALUEWITHOUTFACE$", + "id": "mosip.id.create", + "registrationId": "$RID$", + "biometricReferenceId": "23452353", + "UIN": "$UIN$", + "dateOfBirth": "1992/04/15", + "postalCode": "14022", + "email": "Mimoto_AddIdentity_withValidParameters_smoke_Pos@mosip.net", + "phone": "9876543210", + "referenceIdentityNumber": "6789545678878", + "version": "v1", + "introducerRID": "212124324784879", + "introducerUIN": "212124324784879", + "category": "individualBiometrics", + "requesttime": "$TIMESTAMP$" +}' + output: '{ + "errors": [ + { + "errorCode": "IDR-IDC-004" + } + ] +}' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/AddIdentity/addIdentityResult.hbs b/apitest/src/main/resources/mimoto/AddIdentity/addIdentityResult.hbs new file mode 100644 index 000000000..ca45b742b --- /dev/null +++ b/apitest/src/main/resources/mimoto/AddIdentity/addIdentityResult.hbs @@ -0,0 +1,5 @@ +{ + "response": { + "status": "{{status}}" + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml b/apitest/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml new file mode 100644 index 000000000..b778650a1 --- /dev/null +++ b/apitest/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml @@ -0,0 +1,137 @@ +AidGetIndividualId: + Mimoto_AidGetIndividualId_Getting_With_Valid_UIN_All: + endPoint: /residentmobileapp/aid/get-individual-id + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/AidGetIndividualId/aidGetIndividualId + outputTemplate: mimoto/AidGetIndividualId/aidGetIndividualIdResult + input: '{ + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "transactionID": "$TRANSACTIONID$", + "aid": "$ID:AddIdentity_withValidParameters_smoke_Pos_RID$", + "sendOtp":{ + "aid": "$ID:AddIdentity_withValidParameters_smoke_Pos_RID$", + "transactionID": "$TRANSACTIONID$", + "sendOtpReqTemplate": "mimoto/SendOTPUIN/individualIdOtp", + "sendOtpEndPoint": "/residentmobileapp/req/individualId/otp" + } +}' + output: '{ + "aidStatus": "PROCESSED", + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTPUIN/individualIdOtpResult" + } +}' + + Mimoto_AidGetIndividualId_Getting_With_Invalid_AID_Neg: + endPoint: /residentmobileapp/aid/get-individual-id + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/AidGetIndividualId/aidGetIndividualId + outputTemplate: mimoto/error + input: '{ + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "transactionID": "$TRANSACTIONID$", + "aid": "$yt55g", + "sendOtp":{ + "aid": "$ID:AddIdentity_withValidParameters_smoke_Pos_RID$", + "transactionID": "$TRANSACTIONID$", + "sendOtpReqTemplate": "mimoto/SendOTPUIN/individualIdOtp", + "sendOtpEndPoint": "/residentmobileapp/req/individualId/otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "RES-SER-457" + } + ], + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTPUIN/individualIdOtpResult" + } +}' + + Mimoto_AidGetIndividualId_Getting_With_Invalid_Otp_Neg: + endPoint: /residentmobileapp/aid/get-individual-id + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/AidGetIndividualId/aidGetIndividualId + outputTemplate: mimoto/error + input: '{ + "otp": "1234", + "transactionID": "$TRANSACTIONID$", + "aid": "$ID:AddIdentity_withValidParameters_smoke_Pos_RID$", + "sendOtp":{ + "aid": "$ID:AddIdentity_withValidParameters_smoke_Pos_RID$", + "transactionID": "$TRANSACTIONID$", + "sendOtpReqTemplate": "mimoto/SendOTPUIN/individualIdOtp", + "sendOtpEndPoint": "/residentmobileapp/req/individualId/otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "RES-SER-422" + } + ], + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTPUIN/individualIdOtpResult" + } +}' + + Mimoto_AidGetIndividualId_Getting_With_Valid_Otp_All: + endPoint: /residentmobileapp/aid/get-individual-id + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/AidGetIndividualId/aidGetIndividualId + outputTemplate: mimoto/AidGetIndividualId/aidGetIndividualIdResult + input: '{ + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "transactionID": "$TRANSACTIONID$", + "aid": "$ID:AddIdentity_withValidParameters_smoke_Pos_RID$", + "sendOtp":{ + "aid": "$ID:AddIdentity_withValidParameters_smoke_Pos_RID$", + "transactionID": "$TRANSACTIONID$", + "sendOtpReqTemplate": "mimoto/SendOTPUIN/individualIdOtp", + "sendOtpEndPoint": "/residentmobileapp/req/individualId/otp" + } +}' + output: '{ + "aidStatus": "PROCESSED", + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTPUIN/individualIdOtpResult" + } +}' + + Mimoto_AidGetIndividualId_Getting_With_Invalid_lenght_Of_AID_Neg: + endPoint: /residentmobileapp/aid/get-individual-id + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/AidGetIndividualId/aidGetIndividualId + outputTemplate: mimoto/error + input: '{ + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "transactionID": "$TRANSACTIONID$", + "aid": "2745538921628455389216202302041241544770230204124154278477", + "sendOtp":{ + "aid": "$ID:AddIdentity_withValidParameters_smoke_Pos_RID$", + "transactionID": "$TRANSACTIONID$", + "sendOtpReqTemplate": "mimoto/SendOTPUIN/individualIdOtp", + "sendOtpEndPoint": "/residentmobileapp/req/individualId/otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "RES-SER-457" + } + ], + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTPUIN/individualIdOtpResult" + } +}' diff --git a/apitest/src/main/resources/mimoto/AidGetIndividualId/aidGetIndividualId.hbs b/apitest/src/main/resources/mimoto/AidGetIndividualId/aidGetIndividualId.hbs new file mode 100644 index 000000000..0fda5feb3 --- /dev/null +++ b/apitest/src/main/resources/mimoto/AidGetIndividualId/aidGetIndividualId.hbs @@ -0,0 +1,5 @@ +{ + "aid": "{{aid}}", + "otp": "{{otp}}", + "transactionID": "{{transactionID}}" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/AidGetIndividualId/aidGetIndividualIdResult.hbs b/apitest/src/main/resources/mimoto/AidGetIndividualId/aidGetIndividualIdResult.hbs new file mode 100644 index 000000000..eec0b1866 --- /dev/null +++ b/apitest/src/main/resources/mimoto/AidGetIndividualId/aidGetIndividualIdResult.hbs @@ -0,0 +1,5 @@ +{ + "response": { + "aidStatus": "{{aidStatus}}" + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/AuthLock/createAuthLock.hbs b/apitest/src/main/resources/mimoto/AuthLock/createAuthLock.hbs new file mode 100644 index 000000000..0229c1ef5 --- /dev/null +++ b/apitest/src/main/resources/mimoto/AuthLock/createAuthLock.hbs @@ -0,0 +1,12 @@ + { + "transactionID":"{{transactionID}}", + "individualId":"{{individualId}}", + "individualIdType":"{{individualIdType}}", + "otp":"{{otp}}", + "authType": [ + {{#each authType}} + "{{auth}}" + {{#unless @last}},{{/unless}} + {{/each}} + ] + } \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/AuthLock/createAuthLock.yml b/apitest/src/main/resources/mimoto/AuthLock/createAuthLock.yml new file mode 100644 index 000000000..533b98724 --- /dev/null +++ b/apitest/src/main/resources/mimoto/AuthLock/createAuthLock.yml @@ -0,0 +1,183 @@ +AuthLock: + Mimoto_AuthLock_Valid_UIN_All: + endPoint: /residentmobileapp/req/auth/lock + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/AuthLock/createAuthLock + outputTemplate: mimoto/AuthLock/createAuthLockResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "authType": [{auth: "bio-Iris"},{auth: "demo"},{auth: "bio-FACE"}], + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' + Mimoto_AuthLock_InValid_Otp_All: + endPoint: /residentmobileapp/req/auth/lock + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/AuthLock/createAuthLock + outputTemplate: mimoto/error + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "authType": [{auth: "bio-Iris"},{auth: "demo"},{auth: "bio-FACE"}], + "otp": "111sss@@1", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "errors": [ + { + "errorCode": "RES-SER-422" + } + ], + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' + Mimoto_AuthLock_with_invalidUIN_Valid_Otp_sid: + endPoint: /residentmobileapp/req/auth/lock + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/AuthLock/createAuthLock + outputTemplate: mimoto/error + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "263738@@#FDCVvb", + "individualIdType": "UIN", + "authType": [{auth: "bio-Iris"},{auth: "demo"},{auth: "bio-FACE"}], + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "errors": [ + { + "errorCode": "RES-SER-410" + } + ], + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' + Mimoto_AuthLock_Valid_VID_All: + endPoint: /residentmobileapp/req/auth/lock + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/AuthLock/createAuthLock + outputTemplate: mimoto/AuthLock/createAuthLockResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "$ID:Generate_Perpetual_VID_Valid_Smoke_sid_vid$", + "individualIdType": "VID", + "authType": [{auth: "bio-Iris"},{auth: "demo"},{auth: "bio-FACE"}], + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Valid_Smoke_sid_vid$", + "individualIdType": "VID", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' + Mimoto_AuthLock_with_invalidVID_Valid_Otp: + endPoint: /residentmobileapp/req/auth/lock + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/AuthLock/createAuthLock + outputTemplate: mimoto/error + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "26DBDB@73", + "individualIdType": "VID", + "authType": [{auth: "bio-Iris"},{auth: "demo"},{auth: "bio-FACE"}], + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Valid_Smoke_sid_vid$", + "individualIdType": "VID", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "errors": [ + { + "errorCode": "RES-SER-410" + } + ], + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' + Mimoto_AuthLock_invalidVID_Valid_Otp: + endPoint: /residentmobileapp/req/auth/lock + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/AuthLock/createAuthLock + outputTemplate: mimoto/error + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "36363gvb", + "individualIdType": "VID", + "authType": [{auth: "bio-Iris"},{auth: "demo"},{auth: "bio-FACE"}], + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Valid_Smoke_sid_vid$", + "individualIdType": "VID", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "errors": [ + { + "errorCode": "RES-SER-410" + } + ], + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' diff --git a/apitest/src/main/resources/mimoto/AuthLock/createAuthLockResult.hbs b/apitest/src/main/resources/mimoto/AuthLock/createAuthLockResult.hbs new file mode 100644 index 000000000..7a73a41bf --- /dev/null +++ b/apitest/src/main/resources/mimoto/AuthLock/createAuthLockResult.hbs @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.hbs b/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.hbs new file mode 100644 index 000000000..3607daaf7 --- /dev/null +++ b/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.hbs @@ -0,0 +1,13 @@ +{ + "transactionID":"{{transactionID}}", + "individualId":"{{individualId}}", + "individualIdType":"{{individualIdType}}", + "unlockForSeconds": "{{unlockForSeconds}}", + "otp":"{{otp}}", + "authType": [ + {{#each authType}} + "{{auth}}" + {{#unless @last}},{{/unless}} + {{/each}} + ] +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml b/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml new file mode 100644 index 000000000..9fe7af39f --- /dev/null +++ b/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml @@ -0,0 +1,123 @@ +AuthUnlock: + Mimoto_AuthUnLock_Valid_UIN_All: + endPoint: /residentmobileapp/req/auth/unlock + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/AuthUnLock/createAuthUnLock + outputTemplate: mimoto/AuthUnLock/createAuthUnLockResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "unlockForSeconds": "1", + "authType": [{auth: "bio-Iris"},{auth: "demo"},{auth: "bio-FACE"}], + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' + Mimoto_AuthUnLock_Valid_UIN_With_VID_All: + endPoint: /residentmobileapp/req/auth/unlock + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/AuthUnLock/createAuthUnLock + outputTemplate: mimoto/AuthUnLock/createAuthUnLockResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "$ID:Generate_Perpetual_VID_Valid_Smoke_sid_vid$", + "individualIdType": "VID", + "unlockForSeconds": "1", + "authType": [{auth: "bio-Iris"},{auth: "demo"},{auth: "bio-FACE"}], + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Valid_Smoke_sid_vid$", + "individualIdType": "VID", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' + Mimoto_AuthUnLock_With_InValid_OTP_All: + endPoint: /residentmobileapp/req/auth/unlock + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/AuthUnLock/createAuthUnLock + outputTemplate: mimoto/error + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "unlockForSeconds": "1", + "authType": [{auth: "bio-Iris"},{auth: "demo"},{auth: "bio-FACE"}], + "otp": "111@@@###hhdhdh111", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "errors": [ + { + "errorCode": "RES-SER-422" + } + ], + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' + Mimoto_AuthUnLock_InValid_OTP_With_VID_All: + endPoint: /residentmobileapp/req/auth/unlock + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/AuthUnLock/createAuthUnLock + outputTemplate: mimoto/error + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "$ID:Generate_Perpetual_VID_Valid_Smoke_sid_vid$", + "individualIdType": "VID", + "unlockForSeconds": "1", + "authType": [{auth: "bio-Iris"},{auth: "demo"},{auth: "bio-FACE"}], + "otp": "11111@@###1", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Valid_Smoke_sid_vid$", + "individualIdType": "VID", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "errors": [ + { + "errorCode": "RES-SER-422" + } + ], + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLockResult.hbs b/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLockResult.hbs new file mode 100644 index 000000000..0e0dcd235 --- /dev/null +++ b/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLockResult.hbs @@ -0,0 +1,3 @@ +{ + +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.hbs b/apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.hbs new file mode 100644 index 000000000..0221d2be2 --- /dev/null +++ b/apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.hbs @@ -0,0 +1,12 @@ +{ + "requestTime": "{{requestTime}}", + "request": { + "individualId": "{{individualId}}", + "otpChannels": [ + {{#each otpChannels}} + "{{channel}}" + {{#unless @last}},{{/unless}} + {{/each}} + ] + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.yml b/apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.yml new file mode 100644 index 000000000..8d63d2a9b --- /dev/null +++ b/apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.yml @@ -0,0 +1,714 @@ +BindingOtp: + Mimoto_BindingOtp_Valid_UIN_All_Smoke: + endPoint: /residentmobileapp/binding-otp + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/BindingOtp/BindingOtpResult + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "maskedMobile": "$IGNORE$" +}' + + Mimoto_BindingOtp_Valid_vid_All_Smoke: + endPoint: /residentmobileapp/binding-otp + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/BindingOtp/BindingOtpResult + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "maskedMobile": "$IGNORE$" +}' + + Mimoto_BindingOtp_UIN_Invalid_individualId_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "@#DSDFD@#", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "errors": [ + { + "errorCode": "IDA-MLC-009" + } + ] +}' + + Mimoto_BindingOtp_UIN_Missing_individualId_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$REMOVE$", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "errors": [ + { + "errorCode": "RESIDENT-APP-011" + } + ] +}' + + Mimoto_BindingOtp_UIN_Empty_individualId_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_identifier" + } + ] +}' + + Mimoto_BindingOtp_UIN_Null_individualId_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "null", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "errors": [ + { + "errorCode": "IDA-MLC-009" + } + ] +}' + + Mimoto_BindingOtp_UIN_SpaceSeparated_otpChannels_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "E M A I L"}] +}' + output: '{ + "errors": [ + { + "errorCode": "RESIDENT-APP-011" + } + ] +}' + + Mimoto_BindingOtp_UIN_Invalid_OtpChannels_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "sdsgsg"}] +}' + output: '{ + "errors": [ + { + "errorCode": "RESIDENT-APP-011" + } + ] +}' + + Mimoto_BindingOtp_UIN_Missing_OtpChannels_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "$IGNORE$"}] +}' + output: '{ + "errors": [ + { + "errorCode": "RESIDENT-APP-011" + } + ] +}' + + Mimoto_BindingOtp_UIN_Empty_OtpChannels_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: ""}] +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_otp_channel" + } + ] +}' + + Mimoto_BindingOtp_UIN_Null_OtpChannels_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "null"}] +}' + output: '{ + "errors": [ + { + "errorCode": "RESIDENT-APP-011" + } + ] +}' + + Mimoto_BindingOtp_UIN_Missing_OtpChannel_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": "$IGNORE$" +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_otp_channel" + } + ] +}' + + Mimoto_BindingOtp_UIN_Empty_OtpChannel_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": "" +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_otp_channel" + } + ] +}' + + Mimoto_BindingOtp_UIN_Null_OtpChannel_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": "null" +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_otp_channel" + } + ] +}' + + Mimoto_BindingOtp_UIN_Invalid_RequestTime_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "2022-11-08T06:35:53", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ] +}' + + Mimoto_BindingOtp_UIN_Past_RequestTime_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "2022-11-07T06:51:30.195Z", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ] +}' + + Mimoto_BindingOtp_UIN_Future_RequestTime_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "2033-11-07T06:51:30.195Z", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ] +}' + + Mimoto_BindingOtp_UIN_Missing_RequestTime_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$IGNORE$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ] +}' + + Mimoto_BindingOtp_UIN_Empty_RequestTime_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ] +}' + + Mimoto_BindingOtp_vid_Invalid_individualId_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "@#DSDFD@#", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "errors": [ + { + "errorCode": "IDA-MLC-009" + } + ] +}' + + Mimoto_BindingOtp_vid_Missing_individualId_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$REMOVE$", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "errors": [ + { + "errorCode": "RESIDENT-APP-011" + } + ] +}' + + Mimoto_BindingOtp_vid_Empty_individualId_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_identifier" + } + ] +}' + + Mimoto_BindingOtp_vid_Null_individualId_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "null", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "errors": [ + { + "errorCode": "IDA-MLC-009" + } + ] +}' + + Mimoto_BindingOtp_vid_SpaceSeparated_otpChannels_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "E M A I L"}] +}' + output: '{ + "errors": [ + { + "errorCode": "RESIDENT-APP-011" + } + ] +}' + + Mimoto_BindingOtp_vid_Invalid_OtpChannels_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "sdsgsg"}] +}' + output: '{ + "errors": [ + { + "errorCode": "RESIDENT-APP-011" + } + ] +}' + + Mimoto_BindingOtp_vid_Missing_OtpChannels_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "$IGNORE$"}] +}' + output: '{ + "errors": [ + { + "errorCode": "RESIDENT-APP-011" + } + ] +}' + + Mimoto_BindingOtp_vid_Empty_OtpChannels_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: ""}] +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_otp_channel" + } + ] +}' + + Mimoto_BindingOtp_vid_Null_OtpChannels_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "null"}] +}' + output: '{ + "errors": [ + { + "errorCode": "RESIDENT-APP-011" + } + ] +}' + + Mimoto_BindingOtp_vid_Missing_OtpChannel_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": "$IGNORE$" +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_otp_channel" + } + ] +}' + + Mimoto_BindingOtp_vid_Empty_OtpChannel_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": "" +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_otp_channel" + } + ] +}' + + Mimoto_BindingOtp_vid_Null_OtpChannel_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": "null" +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_otp_channel" + } + ] +}' + + Mimoto_BindingOtp_vid_Invalid_RequestTime_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "2022-11-08T06:35:53", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ] +}' + + Mimoto_BindingOtp_vid_Past_RequestTime_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "2022-11-07T06:51:30.195Z", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ] +}' + + Mimoto_BindingOtp_vid_Future_RequestTime_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "2033-11-07T06:51:30.195Z", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ] +}' + + Mimoto_BindingOtp_vid_Missing_RequestTime_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$IGNORE$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ] +}' + + Mimoto_BindingOtp_vid_Empty_RequestTime_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ] +}' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/BindingOtp/BindingOtpResult.hbs b/apitest/src/main/resources/mimoto/BindingOtp/BindingOtpResult.hbs new file mode 100644 index 000000000..e3cf37992 --- /dev/null +++ b/apitest/src/main/resources/mimoto/BindingOtp/BindingOtpResult.hbs @@ -0,0 +1,5 @@ +{ + "response": { + "maskedMobile": "{{maskedMobile}}" + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml b/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml new file mode 100644 index 000000000..eab5ca524 --- /dev/null +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml @@ -0,0 +1,42 @@ +CredentialsStatus: + Mimoto_CredentialsStatus_euin_All_Valid_Smoke: + endPoint: /residentmobileapp/credentialshare/request/status/{requestId} + role: resident + restMethod: get + inputTemplate: mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatus + outputTemplate: mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatusResult + input: '{ + "requestId": "$ID:RequestCredentials__All_Valid_Smoke_sid_requestId$" +}' + output: '{ + "statusCode": "ISSUED" +}' + Mimoto_CredentialsStatus_euin_With_VID_All_Valid_Smoke: + endPoint: /residentmobileapp/credentialshare/request/status/{requestId} + role: resident + restMethod: get + inputTemplate: mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatus + outputTemplate: mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatusResult + input: '{ + "requestId": "$ID:RequestCredentials_All_Valid_Smoke_with_VID_sid_requestId$" +}' + output: '{ + "statusCode": "ISSUED" +}' + + Mimoto_CredentialsStatus_euin_With_Invalid_RequestId_Neg: + endPoint: /residentmobileapp/credentialshare/request/status/{requestId} + role: resident + restMethod: get + inputTemplate: mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatus + outputTemplate: mimoto/error + input: '{ + "requestId": "$er45" +}' + output: '{ + "errors": [ + { + "errorCode": "RES-SER-29" + } + ] +}' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatus.hbs b/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatus.hbs new file mode 100644 index 000000000..2eb899690 --- /dev/null +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatus.hbs @@ -0,0 +1,3 @@ +{ + "requestId": "{{requestId}}" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatusResult.hbs b/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatusResult.hbs new file mode 100644 index 000000000..5bd4b5fb0 --- /dev/null +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatusResult.hbs @@ -0,0 +1,5 @@ +{ + "response": { + "statusCode": "{{statusCode}}" + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml new file mode 100644 index 000000000..815e3c5a1 --- /dev/null +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml @@ -0,0 +1,42 @@ +DownloadCredential: + Mimoto_DownloadCredential_All_Valid_Smoke: + endPoint: /residentmobileapp/credentialshare/download + role: resident + restMethod: post + inputTemplate: mimoto/CredentialIssuance/DownloadCredential/downloadCredential + outputTemplate: mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatusResult + input: '{ + "requestId": "ccb87250-aaa7-404a-8d6c-c48dfd25c2fd", + "individualId": "9653041697" +}' + output: '{ + "statusCode": "printing" +}' + + Mimoto_DownloadCredential_Invalid_RequestId_Neg: + endPoint: /residentmobileapp/credentialshare/download + role: resident + restMethod: post + inputTemplate: mimoto/CredentialIssuance/DownloadCredential/downloadCredential + outputTemplate: mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatusResult + input: '{ + "requestId": "hj$", + "individualId": "9653041697" +}' + output: '{ + "statusCode": "printing" +}' + + Mimoto_DownloadCredential_Invalid_IndividualId_Neg: + endPoint: /residentmobileapp/credentialshare/download + role: resident + restMethod: post + inputTemplate: mimoto/CredentialIssuance/DownloadCredential/downloadCredential + outputTemplate: mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatusResult + input: '{ + "requestId": "ccb87250-aaa7-404a-8d6c-c48dfd25c2fd", + "individualId": "$ghg6" +}' + output: '{ + "statusCode": "printing" +}' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/downloadCredential.hbs b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/downloadCredential.hbs new file mode 100644 index 000000000..0e1113d75 --- /dev/null +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/downloadCredential.hbs @@ -0,0 +1,4 @@ +{ + "individualId": "{{individualId}}", + "requestId": "{{requestId}}" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml new file mode 100644 index 000000000..0f0a43c91 --- /dev/null +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml @@ -0,0 +1,26 @@ +DownloadCredential: + Mimoto_CredentialsStatus_All_Valid_Smoke_euin: + endPoint: /residentmobileapp/credentialshare/download + role: resident + checkErrorsOnlyInResponse: true + restMethod: get + inputTemplate: mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqid + outputTemplate: mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqidResult + input: '{ + "requestId": "$ID:RequestCredentials__All_Valid_Smoke_sid_requestId$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$" +}' + output: ' { + "Content-Type": "application/pdf" +}' + Mimoto_CredentialsStatus_StatusCode_InValid_Smoke_euin: + endPoint: /residentmobileapp/credentialshare/download + role: resident + restMethod: get + inputTemplate: mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqid + outputTemplate: mimoto/error + input: '{ + "requestId": "$ID:RequestCredentials__All_Valid_Smoke_sid_requestId$", + "individualId": "965337484848041697" +}' + output: "404" diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqid.hbs b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqid.hbs new file mode 100644 index 000000000..0e1113d75 --- /dev/null +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqid.hbs @@ -0,0 +1,4 @@ +{ + "individualId": "{{individualId}}", + "requestId": "{{requestId}}" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqidResult.hbs b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqidResult.hbs new file mode 100644 index 000000000..6f35f5edd --- /dev/null +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqidResult.hbs @@ -0,0 +1,4 @@ +{ + "credential": { + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml b/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml new file mode 100644 index 000000000..b5ea20448 --- /dev/null +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml @@ -0,0 +1,181 @@ +RequestCredentials: + Mimoto_RequestCredentials__All_Valid_Smoke_sid: + endPoint: /residentmobileapp/credentialshare/request + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/CredentialIssuance/RequestCredentials/reqCredential + outputTemplate: mimoto/CredentialIssuance/RequestCredentials/ReqCredentialResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "user": "abc", + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "id": "$IGNORE$", + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' + Mimoto_RequestCredentials_All_Valid_Smoke_with_VID_sid: + endPoint: /residentmobileapp/credentialshare/request + role: resident + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/CredentialIssuance/RequestCredentials/reqCredential + outputTemplate: mimoto/CredentialIssuance/RequestCredentials/ReqCredentialResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "$ID:Generate_Perpetual_VID_Valid_Smoke_sid_vid$", + "user": "abc", + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Valid_Smoke_sid_vid$", + "individualIdType": "VID", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "id": "$IGNORE$", + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' + Mimoto_RequestCredentials_InValid_Otp_UIN_sid: + endPoint: /residentmobileapp/credentialshare/request + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/CredentialIssuance/RequestCredentials/reqCredential + outputTemplate: mimoto/error + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "user": "abc", + "otp": "4h4hnn", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "errors": [ + { + "errorCode": "RES-SER-422" + } + ], + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' + Mimoto_RequestCredentials_InValid_TransactionId_sid: + endPoint: /residentmobileapp/credentialshare/request + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/CredentialIssuance/RequestCredentials/reqCredential + outputTemplate: mimoto/error + input: '{ + "transactionID": "4dhn@@##&%", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "user": "abc", + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "errors": [ + { + "errorCode": "RES-SER-422" + } + ], + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' + + Mimoto_RequestCredentials_InValid_UIN_sid: + endPoint: /residentmobileapp/credentialshare/request + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/CredentialIssuance/RequestCredentials/reqCredential + outputTemplate: mimoto/error + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "$ght56=", + "user": "abc", + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "errors": [ + { + "errorCode": "RES-SER-410" + } + ], + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' + + Mimoto_RequestCredentials_Invalid_VID_sid_Neg: + endPoint: /residentmobileapp/credentialshare/request + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/CredentialIssuance/RequestCredentials/reqCredential + outputTemplate: mimoto/error + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "$hfg56", + "user": "abc", + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Valid_Smoke_sid_vid$", + "individualIdType": "VID", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "errors": [ + { + "errorCode": "RES-SER-410" + } + ], + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredentialResult.hbs b/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredentialResult.hbs new file mode 100644 index 000000000..b8eed36f5 --- /dev/null +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredentialResult.hbs @@ -0,0 +1,5 @@ +{ + "response": { + "id": "{{id}}" + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/reqCredential.hbs b/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/reqCredential.hbs new file mode 100644 index 000000000..128553079 --- /dev/null +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/reqCredential.hbs @@ -0,0 +1,6 @@ +{ + "individualId": "{{individualId}}", + "otp": "{{otp}}", + "transactionID": "{{transactionID}}", + "user": "{{user}}" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.hbs b/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.hbs new file mode 100644 index 000000000..4540b9d97 --- /dev/null +++ b/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.hbs @@ -0,0 +1,7 @@ +{ + "individualId": "{{individualId}}", + "individualIdType": "{{individualIdType}}", + "otp": "{{otp}}", + "transactionID": "{{transactionID}}", + "vidType": "{{vidType}}" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml b/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml new file mode 100644 index 000000000..803a0accb --- /dev/null +++ b/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml @@ -0,0 +1,181 @@ +GenerateVID: + Mimoto_Generate_Perpetual_VID_Valid_Smoke_sid: + endPoint: /residentmobileapp/vid + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/GenerateVID/createGenerateVID + outputTemplate: mimoto/GenerateVID/createGenerateVIDResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "vidType": "Perpetual", + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' + Mimoto_Generate_Perpetual_VID_InValid_Otp_sid: + endPoint: /residentmobileapp/vid + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/GenerateVID/createGenerateVID + outputTemplate: mimoto/error + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "vidType": "Perpetual", + "otp": "112637338", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "errors": [ + { + "errorCode": "RES-SER-422" + } + ], + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' + Mimoto_Generate_Perpetual_VID_with_InvalidUIN_Valid_Otp_sid: + endPoint: /residentmobileapp/vid + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/GenerateVID/createGenerateVID + outputTemplate: mimoto/error + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "253SDGSH@Y37", + "individualIdType": "UIN", + "vidType": "Perpetual", + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "errors": [ + { + "errorCode": "RES-SER-410" + } + ], + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' + + mimoto_Generate_Temporary_VID_Valid_Smoke_sid: + endPoint: /residentmobileapp/vid + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/GenerateVID/createGenerateVID + outputTemplate: mimoto/GenerateVID/createGenerateVIDResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "vidType": "Temporary", + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' + + Mimoto_Generate_Perpetual_VID_Invalid_TransactionId_Neg: + endPoint: /residentmobileapp/vid + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/GenerateVID/createGenerateVID + outputTemplate: mimoto/error + input: '{ + "transactionID": "$trc45", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "vidType": "Perpetual", + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "errors": [ + { + "errorCode": "RES-SER-422" + } + ], + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' + + Mimoto_Generate_Perpetual_VID_Binding_Valid_Smoke_sid: + endPoint: /residentmobileapp/vid + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/GenerateVID/createGenerateVID + outputTemplate: mimoto/GenerateVID/createGenerateVIDResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "individualIdType": "UIN", + "vidType": "Perpetual", + "otp": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "individualIdType": "UIN", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVIDResult.hbs b/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVIDResult.hbs new file mode 100644 index 000000000..7a73a41bf --- /dev/null +++ b/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVIDResult.hbs @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.hbs b/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.hbs new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.hbs @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml b/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml new file mode 100644 index 000000000..bcc709f1e --- /dev/null +++ b/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml @@ -0,0 +1,41 @@ +GetAllIssuers: + Mimoto_GetAllIssuers_All_Valid_Smoke: + endPoint: /residentmobileapp/issuers + role: resident + restMethod: get + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/GetAllIssuers/GetAllIssuers + outputTemplate: mimoto/GetAllIssuers/GetAllIssuersResult + input: '{ +}' + output: '{ +}' + + Mimoto_GetAllIssuers_Specific_Issuer_All_Valid_Smoke: + endPoint: /residentmobileapp/issuers/ESignet + role: resident + restMethod: get + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/GetAllIssuers/GetAllIssuers + outputTemplate: mimoto/GetAllIssuers/GetAllIssuersResult + input: '{ +}' + output: '{ +}' + + Mimoto_GetAllIssuers_Invalid_Issuer_Neg: + endPoint: /residentmobileapp/issuers/invalid + role: resident + restMethod: get + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/GetAllIssuers/GetAllIssuers + outputTemplate: mimoto/error + input: '{ +}' + output: '{ + "errors":[ + { + "errorCode":"RESIDENT-APP-035" + } + ] +}' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuersResult.hbs b/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuersResult.hbs new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuersResult.hbs @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP/SendOTP.yml b/apitest/src/main/resources/mimoto/SendOTP/SendOTP.yml new file mode 100644 index 000000000..670e7e51c --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTP/SendOTP.yml @@ -0,0 +1,52 @@ +SendOTP: + Resident_SendOTP_Valid_UIN_All_Smoke: + endPoint: /resident/v1/req/otp + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: resident/SendOTP/createSendOTP + outputTemplate: resident/SendOTP/createSendOTPResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN" +}' + output: '{ + "maskedMobile": "$IGNORE$", + "maskedEmail": "XXsXXeXXaXXoXXtXXn@gmail.com" +}' + + Resident_SendOTP_Invalid_UIN_Neg: + endPoint: /resident/v1/req/otp + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: resident/SendOTP/createSendOTP + outputTemplate: resident/error + input: '{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "34hgf$", + "individualIdType": "UIN" +}' + output: '{ + "maskedMobile": "$IGNORE$", + "maskedEmail": "XXsXXeXXaXXoXXtXXn@gmail.com" +}' + + Resident_SendOTP_Invalid_VID_Neg: + endPoint: /resident/v1/req/otp + role: resident + restMethod: post + inputTemplate: resident/SendOTP/createSendOTP + outputTemplate: resident/error + input: '{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$45hgv", + "individualIdType": "VID" +}' + output: '{ + +}' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP/createSendOTP.hbs b/apitest/src/main/resources/mimoto/SendOTP/createSendOTP.hbs new file mode 100644 index 000000000..34cba88fd --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTP/createSendOTP.hbs @@ -0,0 +1,10 @@ +{ + "id": "mosip.identity.otp.internal", + "individualId": "{{individualId}}", + "individualIdType": "{{individualIdType}}", + "metadata": {}, + "otpChannel": ["PHONE","EMAIL"], + "requestTime": "{{requestTime}}", + "transactionID": "{{transactionID}}", + "version": "1.0" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP/createSendOTP2.hbs b/apitest/src/main/resources/mimoto/SendOTP/createSendOTP2.hbs new file mode 100644 index 000000000..a0a1e4fc3 --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTP/createSendOTP2.hbs @@ -0,0 +1,10 @@ +{ + "id": "mosip.identity.otp.internal", + "individualId": "{{individualId}}", + "individualIdType": "{{individualIdType}}", + "metadata": {}, + "otpChannel": {{otpChannel}}, + "requestTime": "{{requestTime}}", + "transactionID": "{{transactionID}}", + "version": "1.0" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP/createSendOTPAsEmail.hbs b/apitest/src/main/resources/mimoto/SendOTP/createSendOTPAsEmail.hbs new file mode 100644 index 000000000..ed98a4562 --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTP/createSendOTPAsEmail.hbs @@ -0,0 +1,10 @@ +{ + "id": "mosip.identity.otp.internal", + "individualId": "{{individualId}}", + "individualIdType": "{{individualIdType}}", + "metadata": {}, + "otpChannel": ["EMAIL"], + "requestTime": "{{requestTime}}", + "transactionID": "{{transactionID}}", + "version": "1.0" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP/createSendOTPAsEmpty.hbs b/apitest/src/main/resources/mimoto/SendOTP/createSendOTPAsEmpty.hbs new file mode 100644 index 000000000..ed641006d --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTP/createSendOTPAsEmpty.hbs @@ -0,0 +1,10 @@ +{ + "id": "mosip.identity.otp.internal", + "individualId": "{{individualId}}", + "individualIdType": "{{individualIdType}}", + "metadata": {}, + "otpChannel": [], + "requestTime": "{{requestTime}}", + "transactionID": "{{transactionID}}", + "version": "1.0" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP/createSendOTPAsPhone.hbs b/apitest/src/main/resources/mimoto/SendOTP/createSendOTPAsPhone.hbs new file mode 100644 index 000000000..c0bfffa06 --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTP/createSendOTPAsPhone.hbs @@ -0,0 +1,10 @@ +{ + "id": "mosip.identity.otp.internal", + "individualId": "{{individualId}}", + "individualIdType": "{{individualIdType}}", + "metadata": {}, + "otpChannel": ["PHONE"], + "requestTime": "{{requestTime}}", + "transactionID": "{{transactionID}}", + "version": "1.0" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP/createSendOTPErrorResult.hbs b/apitest/src/main/resources/mimoto/SendOTP/createSendOTPErrorResult.hbs new file mode 100644 index 000000000..c83688009 --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTP/createSendOTPErrorResult.hbs @@ -0,0 +1,14 @@ +{ + "id": "$IGNORE$", + "version": "$IGNORE$", + "responseTime": "$IGNORE$", + "transactionID": "$IGNORE$", + "metadata": "$IGNORE$", + "response": "$IGNORE$", + "errors": [ + { + "errorCode": "{{errorCode}}", + "errorMessage": "{{errorMessage}}" + } + ] +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP/createSendOTPErrorResult2.hbs b/apitest/src/main/resources/mimoto/SendOTP/createSendOTPErrorResult2.hbs new file mode 100644 index 000000000..1216fda84 --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTP/createSendOTPErrorResult2.hbs @@ -0,0 +1,14 @@ +{ + "id": "$IGNORE$", + "version": "$IGNORE$", + "responseTime": "$IGNORE$", + "transactionID": "$IGNORE$", + "metadata": "$IGNORE$", + "response": "$IGNORE$", + "errors": [ + { + "errorCode": "{{errorCode}}", + "message": "{{message}}" + } + ] +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP/createSendOTPResult.hbs b/apitest/src/main/resources/mimoto/SendOTP/createSendOTPResult.hbs new file mode 100644 index 000000000..7a73a41bf --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTP/createSendOTPResult.hbs @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP/createSendOTPResultForEmail.hbs b/apitest/src/main/resources/mimoto/SendOTP/createSendOTPResultForEmail.hbs new file mode 100644 index 000000000..7fc3005ca --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTP/createSendOTPResultForEmail.hbs @@ -0,0 +1,11 @@ +{ + "id": "mosip.identity.otp.internal", + "version": "1.0", + "responseTime": "$IGNORE$", + "transactionID": "$IGNORE$", + "metadata": "$IGNORE$", + "response": { + "maskedEmail": "{{maskedEmail}}" + }, + "errors": "$IGNORE$" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP/createSendOTPResultForPhone.hbs b/apitest/src/main/resources/mimoto/SendOTP/createSendOTPResultForPhone.hbs new file mode 100644 index 000000000..72659f98d --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTP/createSendOTPResultForPhone.hbs @@ -0,0 +1,11 @@ +{ + "id": "mosip.identity.otp.internal", + "version": "1.0", + "responseTime": "$IGNORE$", + "transactionID": "$IGNORE$", + "metadata": "$IGNORE$", + "response": { + "maskedMobile": "{{maskedMobile}}" + }, + "errors": "$IGNORE$" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP1/SendOTP.yml b/apitest/src/main/resources/mimoto/SendOTP1/SendOTP.yml new file mode 100644 index 000000000..26ecf09ed --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTP1/SendOTP.yml @@ -0,0 +1,81 @@ +SendOTP: + Mimoto_SendOTP_Valid_UIN_All_Smoke: + endPoint: /resident/v1/req/otp + role: resident + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/SendOTP1/createSendOTP + outputTemplate: mimoto/SendOTP1/createSendOTPResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN" +}' + output: '{ + "maskedMobile": "$IGNORE$", + "maskedEmail": "$IGNORE$" + }' + + Mimoto_SendOTP_Valid_VID_All_Smoke: + endPoint: /resident/v1/req/otp + role: resident + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/SendOTP1/createSendOTP + outputTemplate: mimoto/SendOTP1/createSendOTPResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Valid_Smoke_sid_vid$", + "individualIdType": "VID" +}' + output: '{ + "maskedMobile": "$IGNORE$", + "maskedEmail": "$IGNORE$" +}' + + Mimoto_SendOTP_InValid_UIN_All: + endPoint: /residentmobileapp/req/otp + role: resident + restMethod: post + inputTemplate: mimoto/SendOTP1/createSendOTP + outputTemplate: mimoto/error + input: '{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "4Y4B4 N@&&&&", + "individualIdType": "UIN" +}' + output: '{ + "errors": [ + { + "errorCode": "IDA-MLC-009", + "errorMessage": "$IGNORE$" + } + ] +}' + + Mimoto_SendOTP_Invalid_VID_Neg: + endPoint: /resident/v1/req/otp + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/SendOTP1/createSendOTP + outputTemplate: mimoto/error + input: '{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$gyx56", + "individualIdType": "VID" +}' + output: '{ + "errors": [ + { + "errorCode": "IDA-MLC-009", + "errorMessage": "Invalid Input Parameter - individualId" + } + ], + "maskedMobile": "$IGNORE$", + "maskedEmail": "XXsXXeXXaXXoXXtXXn@gmail.com" +}' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP1/createSendOTP.hbs b/apitest/src/main/resources/mimoto/SendOTP1/createSendOTP.hbs new file mode 100644 index 000000000..34cba88fd --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTP1/createSendOTP.hbs @@ -0,0 +1,10 @@ +{ + "id": "mosip.identity.otp.internal", + "individualId": "{{individualId}}", + "individualIdType": "{{individualIdType}}", + "metadata": {}, + "otpChannel": ["PHONE","EMAIL"], + "requestTime": "{{requestTime}}", + "transactionID": "{{transactionID}}", + "version": "1.0" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP1/createSendOTP2.hbs b/apitest/src/main/resources/mimoto/SendOTP1/createSendOTP2.hbs new file mode 100644 index 000000000..a0a1e4fc3 --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTP1/createSendOTP2.hbs @@ -0,0 +1,10 @@ +{ + "id": "mosip.identity.otp.internal", + "individualId": "{{individualId}}", + "individualIdType": "{{individualIdType}}", + "metadata": {}, + "otpChannel": {{otpChannel}}, + "requestTime": "{{requestTime}}", + "transactionID": "{{transactionID}}", + "version": "1.0" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP1/createSendOTPErrorResult.hbs b/apitest/src/main/resources/mimoto/SendOTP1/createSendOTPErrorResult.hbs new file mode 100644 index 000000000..c83688009 --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTP1/createSendOTPErrorResult.hbs @@ -0,0 +1,14 @@ +{ + "id": "$IGNORE$", + "version": "$IGNORE$", + "responseTime": "$IGNORE$", + "transactionID": "$IGNORE$", + "metadata": "$IGNORE$", + "response": "$IGNORE$", + "errors": [ + { + "errorCode": "{{errorCode}}", + "errorMessage": "{{errorMessage}}" + } + ] +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP1/createSendOTPErrorResult2.hbs b/apitest/src/main/resources/mimoto/SendOTP1/createSendOTPErrorResult2.hbs new file mode 100644 index 000000000..1216fda84 --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTP1/createSendOTPErrorResult2.hbs @@ -0,0 +1,14 @@ +{ + "id": "$IGNORE$", + "version": "$IGNORE$", + "responseTime": "$IGNORE$", + "transactionID": "$IGNORE$", + "metadata": "$IGNORE$", + "response": "$IGNORE$", + "errors": [ + { + "errorCode": "{{errorCode}}", + "message": "{{message}}" + } + ] +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP1/createSendOTPResult.hbs b/apitest/src/main/resources/mimoto/SendOTP1/createSendOTPResult.hbs new file mode 100644 index 000000000..bd241fc20 --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTP1/createSendOTPResult.hbs @@ -0,0 +1,12 @@ +{ + "id": "mosip.identity.otp.internal", + "version": "1.0", + "responseTime": "$IGNORE$", + "transactionID": "$IGNORE$", + "metadata": "$IGNORE$", + "response": { + "maskedMobile": "{{maskedMobile}}", + "maskedEmail": "$IGNORE$" + }, + "errors": "$IGNORE$" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml b/apitest/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml new file mode 100644 index 000000000..815639521 --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml @@ -0,0 +1,14 @@ +individualOTP: + Mimoto_individualOTP_All_Valid_Smoke: + endPoint: /residentmobileapp/req/individualId/otp + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/SendOTPUIN/individualIdOtp + outputTemplate: mimoto/SendOTPUIN/individualIdOtpResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "aid": "$ID:AddIdentity_withValidParameters_smoke_Pos_RID$" + }' + output: '{ + }' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTPUIN/individualIdOtp.hbs b/apitest/src/main/resources/mimoto/SendOTPUIN/individualIdOtp.hbs new file mode 100644 index 000000000..b40d7bdb2 --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTPUIN/individualIdOtp.hbs @@ -0,0 +1,8 @@ +{ + "aid": "{{aid}}", + "otpChannel": [ + "EMAIL", + "PHONE" + ], + "transactionID": "{{transactionID}}" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTPUIN/individualIdOtpResult.hbs b/apitest/src/main/resources/mimoto/SendOTPUIN/individualIdOtpResult.hbs new file mode 100644 index 000000000..7a73a41bf --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTPUIN/individualIdOtpResult.hbs @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOtpForVid/createSendOTP.hbs b/apitest/src/main/resources/mimoto/SendOtpForVid/createSendOTP.hbs new file mode 100644 index 000000000..c468ffce3 --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOtpForVid/createSendOTP.hbs @@ -0,0 +1,12 @@ +{ + "id": "mosip.identity.otp", + "version": "1.0", + "requestTime": "{{requestTime}}", + "transactionID": "{{transactionID}}", + "individualId": "{{individualId}}", + "individualIdType": "{{individualIdType}}", + "otpChannel": [ + "EMAIL", + "PHONE" + ] +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOtpForVid/createSendOTP.yml b/apitest/src/main/resources/mimoto/SendOtpForVid/createSendOTP.yml new file mode 100644 index 000000000..164f0a52d --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOtpForVid/createSendOTP.yml @@ -0,0 +1,21 @@ +createSendOTP: + Resident_SendOTP_All_Valid_Smoke: + endPoint: /idauthentication/v1/otp/v4jO2rTUkDglaG7rCkWDnqIT3WpZaGEW9j3FMXwTA5xXKVaDpx/6001/34536061 + role: resident + restMethod: post + inputTemplate: resident/SendOtpForVid/createSendOTP + outputTemplate: resident/SendOtpForVid/createSendOTPResult + input: '{ + "transactionID": "1234567190", + "individualId": "5329487524103783", + "requestTime": "$TIMESTAMP$", + "individualIdType": "VID", + "otpChannel": [ + "EMAIL", + "PHONE" + ] + }' + output: '{ + "maskedMobile": "XXXXXX7143", + "maskedEmail": "XXkXXlXXhXXuXXr@technoforte.co.in" + }' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOtpForVid/createSendOTPResult.hbs b/apitest/src/main/resources/mimoto/SendOtpForVid/createSendOTPResult.hbs new file mode 100644 index 000000000..0668a51b5 --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOtpForVid/createSendOTPResult.hbs @@ -0,0 +1,12 @@ +{ + "id": "$IGNORE$", + "version": "$IGNORE$", + "responseTime": "$IGNORE$", + "transactionID": "$IGNORE$", + "metadata": "$IGNORE$", + "response": { + "maskedMobile": "{{maskedMobile}}", + "maskedEmail": "{{maskedEmail}}" + }, + "errors": "$IGNORE$" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/ValidateOTP/ValidateOTP.hbs b/apitest/src/main/resources/mimoto/ValidateOTP/ValidateOTP.hbs new file mode 100644 index 000000000..05f5d58a0 --- /dev/null +++ b/apitest/src/main/resources/mimoto/ValidateOTP/ValidateOTP.hbs @@ -0,0 +1,10 @@ +{ + "id": "mosip.identity.auth.internal", + "version": "v1", + "requesttime": "{{requesttime}}", + "request": { + "transactionId": "{{transactionId}}", + "individualId": "{{individualId}}", + "otp": "{{otp}}" + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/ValidateOTP/ValidateOTP.yml b/apitest/src/main/resources/mimoto/ValidateOTP/ValidateOTP.yml new file mode 100644 index 000000000..94d06c9f9 --- /dev/null +++ b/apitest/src/main/resources/mimoto/ValidateOTP/ValidateOTP.yml @@ -0,0 +1,185 @@ +SendOTP: + Resident_SendOTP_Valid_UIN_All_Smoke: + endPoint: /resident/v1/req/otp + role: resident + restMethod: post + inputTemplate: resident/SendOTP/createSendOTP + outputTemplate: resident/SendOTP/createSendOTPResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN" +}' + output: '{ + "maskedMobile": "$IGNORE$" + }' + Resident_SendOTP_Valid_UIN_Phone_Smoke: + endPoint: /resident/v1/req/otp + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: resident/SendOTP/createSendOTP2 + outputTemplate: resident/SendOTP/createSendOTPResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "otpChannel": "[\"PHONE\"]", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN" +}' + output: '{ + "maskedMobile": "$IGNORE$" + }' + Resident_SendOTP_Valid_UIN_Email_Smoke: + endPoint: /resident/v1/req/otp + role: resident + restMethod: post + inputTemplate: resident/SendOTP/createSendOTP2 + outputTemplate: resident/SendOTP/createSendOTPResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "otpChannel": "[\"EMAIL\"]", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN" +}' + output: '{ + "maskedMobile": "$IGNORE$" + }' + Resident_SendOTP_RevokedVID_Invalid: + endPoint: /resident/v1/req/otp + role: resident + restMethod: post + inputTemplate: resident/SendOTP/createSendOTP + outputTemplate: resident/SendOTP/createSendOTPErrorResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:GenerateVID_All_Valid_Smoke_Perpetual_sid_vid$", + "individualIdType": "UIN" +}' + output: '{ + "errorCode": "IDA-MLC-018" + }' + Resident_SendOTP_Valid_UIN_Invalid_empty_otpChannel: + endPoint: /resident/v1/req/otp + role: resident + restMethod: post + inputTemplate: resident/SendOTP/createSendOTP2 + outputTemplate: resident/SendOTP/createSendOTPErrorResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "otpChannel": "[]", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN" +}' + output: '{ + "errorCode": "IDA-OTA-008" + }' + Resident_SendOTP_InValid_individualId: + endPoint: /resident/v1/req/otp + role: resident + restMethod: post + inputTemplate: resident/SendOTP/createSendOTP + outputTemplate: resident/SendOTP/createSendOTPErrorResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "asfvgaf", + "individualIdType": "UIN" +}' + output: '{ + "errorCode": "IDA-MLC-009" + }' + Resident_SendOTP_InValid_Missing_individualId: + endPoint: /resident/v1/req/otp + role: resident + restMethod: post + inputTemplate: resident/SendOTP/createSendOTP + outputTemplate: resident/SendOTP/createSendOTPErrorResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$REMOVE$", + "individualIdType": "UIN" +}' + output: '{ + "errorCode": "IDA-MLC-009" + }' + Resident_SendOTP_InValid_Empty_transactionID: + endPoint: /resident/v1/req/otp + role: resident + restMethod: post + inputTemplate: resident/SendOTP/createSendOTP + outputTemplate: resident/SendOTP/createSendOTPErrorResult + input: '{ + "transactionID": "", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN" +}' + output: '{ + "errorCode": "IDA-MLC-006" + }' + Resident_SendOTP_InValid_transactionID: + endPoint: /resident/v1/req/otp + role: resident + restMethod: post + inputTemplate: resident/SendOTP/createSendOTP + outputTemplate: resident/SendOTP/createSendOTPErrorResult + input: '{ + "transactionID": "asdveve", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN" +}' + output: '{ + "errorCode": "IDA-MLC-009" + }' + Resident_SendOTP_InValid_Missing_transactionID: + endPoint: /resident/v1/req/otp + role: resident + restMethod: post + inputTemplate: resident/SendOTP/createSendOTP + outputTemplate: resident/SendOTP/createSendOTPErrorResult2 + input: '{ + "transactionID": "$REMOVE$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN" +}' + output: '{ + "errorCode": "RES-SER-425" + }' + Resident_SendOTP_InValid_Empty_requestTime: + endPoint: /resident/v1/req/otp + role: resident + restMethod: post + inputTemplate: resident/SendOTP/createSendOTP + outputTemplate: resident/SendOTP/createSendOTPErrorResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN" +}' + output: '{ + "errorCode": "IDA-MLC-006" + }' + Resident_SendOTP_InValid_requestTime: + endPoint: /resident/v1/req/otp + role: resident + restMethod: post + inputTemplate: resident/SendOTP/createSendOTP + outputTemplate: resident/SendOTP/createSendOTPErrorResult2 + input: '{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "asvfv", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN" +}' + output: '{ + "errorCode": "RES-SER-425" + }' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/ValidateOTP/ValidateOTPResult.hbs b/apitest/src/main/resources/mimoto/ValidateOTP/ValidateOTPResult.hbs new file mode 100644 index 000000000..689fb082b --- /dev/null +++ b/apitest/src/main/resources/mimoto/ValidateOTP/ValidateOTPResult.hbs @@ -0,0 +1,7 @@ +{ + "id": "mosip.identity.auth.internal", + "version": "v1", + "response": { + "authStatus": {{authStatus}} + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.hbs b/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.hbs new file mode 100644 index 000000000..1a415bc51 --- /dev/null +++ b/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.hbs @@ -0,0 +1,16 @@ +{ + "requestTime": "{{requestTime}}", + "request": { + "individualId": "{{individualId}}", + "authFactorType": "{{authFactorType1}}", + "format": "{{format1}}", + "challengeList": [ + { + "authFactorType": "{{authFactorType}}", + "challenge": "{{challenge}}", + "format": "{{format}}" + } + ], + "publicKey": "{{publicKey}}" + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml b/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml new file mode 100644 index 000000000..9fd032f39 --- /dev/null +++ b/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml @@ -0,0 +1,2953 @@ +WalletBinding: + Mimoto_WalletBinding_uin_OTP_Valid_Smoke: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/WalletBinding/WalletBindingResult + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_OTP_Valid_Smoke: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/WalletBinding/WalletBindingResult + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Invalid_RequestTime_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "asdf$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_PastVal_RequestTime_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "2022-11-07T06:51:30.195Z", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_FutureVal_RequestTime_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "2033-11-07T06:51:30.195Z", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Empty_RequestTime_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Missing_RequestTime_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$REMOVE$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Invalid_IndividualId_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$tyhg", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "binding_auth_failed" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Empty_IndividualId_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_individual_id" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Null_IndividualId_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "null", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "binding_auth_failed" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Missing_IndividualId_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$REMOVE$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_individual_id" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_SpaceVal_IndividualId_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": " ", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_individual_id" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Invalid_AuthFactorType_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "dfg5", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Empty_AuthFactorType_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Missing_AuthFactorType_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "$REMOVE$", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_SpaceVal_AuthFactorType_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": " ", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Null_AuthFactorType_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "null", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Invalid_Challenge_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "gd5$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "binding_auth_failed" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Missing_Challenge_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$REMOVE$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_challenge" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Empty_Challenge_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_challenge" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_SpaceVal_Challenge_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": " ", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_challenge" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Null_Challenge_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "null", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "binding_auth_failed" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Invalid_Formate_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "GT$r5", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Missing_Formate_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "$REMOVE$", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Empty_Formate_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_SpaceVal_Formate_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": " ", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Null_Formate_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "null", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Invalid_authFactorType1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "hy$5", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Missing_authFactorType1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "$REMOVE$", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Empty_authFactorType1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_SpaceVal_authFactorType1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": " ", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Null_authFactorType1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "null", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Invalid_format1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "hju$5", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Missing_format1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "$REMOVE$", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Empty_format1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_SpaceVal_format1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": " ", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Null_format1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "null", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Invalid_publicKey_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "ghj$4", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "RESIDENT-APP-028" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Null_publicKey_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "null", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "RESIDENT-APP-028" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Missing_publicKey_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$REMOVE$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "RESIDENT-APP-028" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Invalid_RequestTime_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "asdf$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_PastVal_RequestTime_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "2022-11-07T06:51:30.195Z", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_FutureVal_RequestTime_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "2033-11-07T06:51:30.195Z", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Empty_RequestTime_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Missing_RequestTime_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$REMOVE$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Invalid_IndividualId_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$tyhg", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "binding_auth_failed" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Empty_IndividualId_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_individual_id" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Null_IndividualId_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "null", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "binding_auth_failed" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Missing_IndividualId_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$REMOVE$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_individual_id" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_SpaceVal_IndividualId_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": " ", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_individual_id" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Invalid_AuthFactorType_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "dfg5", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Empty_AuthFactorType_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Missing_AuthFactorType_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "$REMOVE$", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_SpaceVal_AuthFactorType_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": " ", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Null_AuthFactorType_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "null", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Invalid_Challenge_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "gd5$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "binding_auth_failed" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Missing_Challenge_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$REMOVE$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_challenge" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Empty_Challenge_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_challenge" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_SpaceVal_Challenge_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": " ", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_challenge" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Null_Challenge_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "null", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "binding_auth_failed" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Invalid_Formate_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "GT$r5", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Missing_Formate_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "$REMOVE$", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Empty_Formate_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_SpaceVal_Formate_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": " ", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Null_Formate_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "null", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Invalid_authFactorType1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "hy$5", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Missing_authFactorType1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "$REMOVE$", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Empty_authFactorType1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_SpaceVal_authFactorType1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": " ", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Null_authFactorType1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "null", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Invalid_format1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "hju$5", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Missing_format1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "$REMOVE$", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Empty_format1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_SpaceVal_format1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": " ", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Null_format1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "null", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Invalid_publicKey_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "ghj$4", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "RESIDENT-APP-028" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Null_publicKey_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "null", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "RESIDENT-APP-028" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Missing_publicKey_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$REMOVE$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "RESIDENT-APP-028" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + } +}' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/WalletBinding/WalletBindingEmptyChallenge.hbs b/apitest/src/main/resources/mimoto/WalletBinding/WalletBindingEmptyChallenge.hbs new file mode 100644 index 000000000..646bf0f46 --- /dev/null +++ b/apitest/src/main/resources/mimoto/WalletBinding/WalletBindingEmptyChallenge.hbs @@ -0,0 +1,9 @@ +{ + "requestTime": "{{requestTime}}", + "request": { + "transactionId": "{{transactionId}}", + "individualId": "{{individualId}}", + "challengeList": "{{challengeList}}", + "publicKey": {{publicKey}} + } + } \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/WalletBinding/WalletBindingResult.hbs b/apitest/src/main/resources/mimoto/WalletBinding/WalletBindingResult.hbs new file mode 100644 index 000000000..720501904 --- /dev/null +++ b/apitest/src/main/resources/mimoto/WalletBinding/WalletBindingResult.hbs @@ -0,0 +1,9 @@ +{ + "responseTime": "$IGNORE$", + "response": { + "encryptedWalletBindingId": "$IGNORE$", + "certificate": "$IGNORE$", + "expireDateTime": "$IGNORE$" + }, + "errors": "$IGNORE$" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/autoGeneratedId.properties b/apitest/src/main/resources/mimoto/autoGeneratedId.properties new file mode 100644 index 000000000..f7bbba8b4 --- /dev/null +++ b/apitest/src/main/resources/mimoto/autoGeneratedId.properties @@ -0,0 +1 @@ +DefinePolicyGroup_All_Valid_Smoke_sid=456789567 \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/error.hbs b/apitest/src/main/resources/mimoto/error.hbs new file mode 100644 index 000000000..f4bcb6bee --- /dev/null +++ b/apitest/src/main/resources/mimoto/error.hbs @@ -0,0 +1,10 @@ +{ + "errors": [ + {{#each errors}} + { + "errorCode": "{{errorCode}}" + } + {{#unless @last}},{{/unless}} + {{/each}} + ] +} \ No newline at end of file diff --git a/apitest/src/main/resources/spring.properties b/apitest/src/main/resources/spring.properties new file mode 100644 index 000000000..21fdcd3ec --- /dev/null +++ b/apitest/src/main/resources/spring.properties @@ -0,0 +1,329 @@ +#Please change only required values +logging.level.io.mosip.registrtaion=DEBUG + +hibernate.hbm2ddl.auto=none +hibernate.dialect=org.hibernate.dialect.DerbyTenSevenDialect +hibernate.show_sql=false +hibernate.format_sql=false +hibernate.connection.charSet=utf8 +hibernate.cache.use_second_level_cache=false +hibernate.cache.use_query_cache=false +hibernate.cache.use_structured_entries=false +hibernate.generate_statistics=false + +#otp validation time details +otp_validity_in_mins=2 + + +#Timeout Configuration +HTTP_API_READ_TIMEOUT = 60000 +HTTP_API_WRITE_TIMEOUT = 60000 + +#Biometric Device +PROVIDER_NAME = Mantra +WEBCAM_LIBRARY_NAME = sarxos + +#document scanner properties +DOCUMENT_SCANNER_DEPTH=10 +DOCUMENT_SCANNER_HOST=192.168.43.253 +DOCUMENT_SCANNER_PORT=6566 +DOCUMENT_SCANNER_TIMEOUT=5000 + +#Client ID and Secret Key +AUTH_CLIENT_ID=registration-client +AUTH_SECRET_KEY=c6f69439-f811-4415-8ebc-4c9e447c901e + +spring.cloud.config.uri=LOCAL +spring.application.name= +spring.profiles.active= +spring.cloud.config.label= + +#AUTH_SDK +mosip.registration.face.provider=com.identy.IdentyBioSDK +mosip.registration.iris.provider=com.identy.IdentyBioSDK +mosip.registration.finger.provider=com.identy.IdentyBioSDK + + +#MDM +#host has to be clarified whether nedd to be in config or hardcoded +mdm.host=127.0.0.1 +#portRangeFrom and portRangeTo are mandate,portRangeTo can be same are greater than then portRangeFrom +mdm.portRangeFrom=4500 +mdm.portRangeTo=4510 +mdm.contextPath= +mdm.hostProtocol=http + +mdm.deviceInfo.service.path=deviceInfo +mdm.deviceInfo.service.headers=Content-Type:APPLICATION/JSON +mdm.deviceInfo.service.httpmethod=GET +mdm.deviceInfo.service.responseType=java.lang.Object + +mdm.capture.service.path=capture +mdm.capture.service.headers=Content-Type:APPLICATION/JSON +mdm.capture.service.httpmethod=POST +mdm.deviceInfo.service.responseType=java.lang.Object + +mdm.deviceDiscovery.service.path=deviceDiscovery +mdm.deviceDiscovery.service.headers=Content-Type:APPLICATION/JSON +mdm.deviceDiscovery.service.httpmethod=POST +mdm.deviceDiscovery.service.responseType=java.lang.Object + +mosip.kernel.idobjectvalidator.file-storage-uri=LOCAL +mosip.kernel.idobjectvalidator.schema-name=mosip-identity-json-schema.json +mosip.kernel.idobjectvalidator.property-source=LOCAL +mosip.kernel.keymanager-service-sign-url= + +mosip.country.code=MOR + +#onboarded_user details +user_machine_mapping.service.url=https://qa.mosip.io/v1/masterdata/registrationmachineusermappings +user_machine_mapping.service.httpmethod=PUT +user_machine_mapping.service.requestType=java.lang.Object +user_machine_mapping.service.headers=Content-Type:APPLICATION/JSON +user_machine_mapping.service.authrequired=true +user_machine_mapping.service.signrequired=false +user_machine_mapping.service.authheader=Authorization:OAUTH +user_machine_mapping.service.requestsignrequired=true + +#packet_status details +packet_status.service.url=https://qa.mosip.io/registrationprocessor/v1/registrationstatus/search +packet_status.service.httpmethod=POST +packet_status.service.responseType=java.util.LinkedHashMap +packet_status.service.headers=Content-Type:APPLICATION/JSON +packet_status.service.authrequired=true +packet_status.service.signrequired=false +packet_status.service.authheader=Authorization:OAUTH +packet_status.service.requestsignrequired=true + +#sms +sms.service.url=https://qa.mosip.io/v1/smsnotifier/sms/send +sms.service.httpmethod=POST +sms.service.requestType=java.lang.Object +sms.service.headers=Content-Type:APPLICATION/JSON +sms.service.authrequired=true +sms.service.signrequired=false +sms.service.authheader=Authorization:OAUTH +sms.service.requestsignrequired=true + +#email +email.service.url=https://qa.mosip.io/v1/emailnotifier/email/send +email.service.httpmethod=POST +email.service.requestType=java.lang.Object +email.service.headers=Content-Type:multipart/form-data +email.service.authrequired=true +email.service.signrequired=false +email.service.authheader=Authorization:OAUTH +email.service.requestsignrequired=true + +#Upload +packet_upload.service.url=https://qa.mosip.io/registrationprocessor/v1/packetreceiver/registrationpackets +packet_upload.service.httpmethod=POST +packet_upload.service.requestType=java.lang.String +packet_upload.service.headers=Content-Type:multipart/form-data +packet_upload.service.authrequired=true +packet_upload.service.signrequired=false +packet_upload.service.authheader=Authorization:OAUTH +packet_upload.service.service.requestsignrequired=true + +#Packet Sync +packet_sync.service.url=https://qa.mosip.io/registrationprocessor/v1/registrationstatus/sync +packet_sync.service.httpmethod=POST +packet_sync.service.requestType=java.lang.Object +packet_sync.service.headers=Content-Type:APPLICATION/JSON,timestamp:timestamp,Center-Machine-RefId:centerId +packet_sync.service.authrequired=true +packet_sync.service.signrequired=false +packet_sync.service.authheader=Authorization:OAUTH +packet_sync.service.service.requestsignrequired=true + +#policy sync +policysync.service.url= https://qa.mosip.io/v1/syncdata/publickey/REGISTRATION +policysync.service.httpmethod=GET +policysync.service.responseType=java.util.LinkedHashMap +policysync.service.headers=Content-Type:APPLICATION/JSON +policysync.service.authrequired=true +policysync.service.signrequired=false +policysync.service.authheader=Authorization:OAUTH +policysync.service.service.requestsignrequired=true + +#Pre-Registration Get Pre-Reg Id's +get_pre_registration_Ids.service.url=https://qa.mosip.io/preregistration/v1/sync +get_pre_registration_Ids.service.httpmethod=POST +get_pre_registration_Ids.service.requestType=java.lang.Object +get_pre_registration_Ids.service.headers=Content-Type:APPLICATION/JSON +get_pre_registration_Ids.service.authrequired=true +get_pre_registration_Ids.service.signrequired=false +get_pre_registration_Ids.service.authheader=Authorization:OAUTH +get_pre_registration_Ids.service.requestsignrequired=true + +#Pre-Registration Get Pre-Reg packet +get_pre_registration.service.url=https://qa.mosip.io/preregistration/v1/sync/{pre_registration_id} +get_pre_registration.service.httpmethod=GET +get_pre_registration.service.responseType=java.lang.Object +get_pre_registration.service.headers=Content-Type:APPLICATION/JSON +get_pre_registration.service.authrequired=true +get_pre_registration.service.signrequired=false +get_pre_registration.service.authheader=Authorization:OAUTH +get_pre_registration.service.requestsignrequired=true + +#master_sync details +master_sync.service.url=https://qa.mosip.io/v1/syncdata/masterdata +master_sync.service.httpmethod=GET +master_sync.service.responseType=java.lang.Object +master_sync.service.headers=Content-Type:application/json;charset=UTF-8 +master_sync.service.authrequired=true +master_sync.service.signrequired=false +master_sync.service.authheader=Authorization:OAUTH +master_sync.service.requestsignrequired=true + +#Get Global-Config Details +get_registration_center_config.service.url=https://qa.mosip.io/v1/syncdata/configs +get_registration_center_config.service.httpmethod=GET +get_registration_center_config.service.responseType=java.util.LinkedHashMap +get_registration_center_config.service.headers=Content-Type:APPLICATION/JSON +get_registration_center_config.service.authrequired=true +get_registration_center_config.service.signrequired=false +get_registration_center_config.service.authheader=Authorization:OAUTH +get_registration_center_config.service.requestsignrequired=true + +#Send OTP +send_otp.service.url=https://qa.mosip.io/v1/authmanager/authenticate/sendotp +send_otp.service.httpmethod=POST +send_otp.service.requestType=java.lang.Object +send_otp.service.headers=Content-Type:APPLICATION/JSON +send_otp.service.authrequired=true +send_otp.service.signrequired=false +send_otp.service.authheader=Authorization:OAUTH +send_otp.service.requestsignrequired=false + +#Validate Authorization Token +validate_auth_token.service.url=https://qa.mosip.io/v1/authmanager/authorize/admin/validateToken +validate_auth_token.service.httpmethod=POST +validate_auth_token.service.requestType=java.lang.Object +validate_auth_token.service.headers=Content-Type:APPLICATION/JSON +validate_auth_token.service.authrequired=true +validate_auth_token.service.signrequired=false +validate_auth_token.service.authheader=Authorization:OAUTH +validate_auth_token.service.requestsignrequired=false + +#Authentication API +auth_by_password.service.url=https://qa.mosip.io/v1/authmanager/authenticate/useridPwd +auth_by_otp.service.url=https://qa.mosip.io/v1/authmanager/authenticate/useridOTP +auth_by_clientid_secretkey.service.url=https://qa.mosip.io/v1/authmanager/authenticate/clientidsecretkey + +#user details +user_details.service.url=https://qa.mosip.io/v1/syncdata/userdetails/{regid} +user_details.service.httpmethod=GET +user_details.service.responseType=java.lang.Object +user_details.service.headers=Content-Type:APPLICATION/JSON +user_details.service.authrequired=true +user_details.service.signrequired=false +user_details.service.authheader=Authorization:OAUTH +user_details.service.requestsignrequired=true + +#Invalidate Authorization Token +invalidate_auth_token.service.url=https://qa.mosip.io/v1/authmanager/authorize/invalidateToken +invalidate_auth_token.service.httpmethod=POST +invalidate_auth_token.service.requestType=java.lang.Object +invalidate_auth_token.service.headers=Content-Type:APPLICATION/JSON +invalidate_auth_token.service.authrequired=true +invalidate_auth_token.service.signrequired=false +invalidate_auth_token.service.authheader=Authorization:OAUTH +invalidate_auth_token.service.requestsignrequired=false + +#public_key details +public_key.service.url=https://qa.mosip.io/v1/keymanager/publickey/KERNEL +public_key.service.httpmethod=GET +public_key.service.responseType=java.lang.Object +public_key.service.headers=Content-Type:APPLICATION/JSON +public_key.service.authrequired=true +public_key.service.signrequired=false +public_key.service.authheader=Authorization:OAUTH +public_key.service.requestsignrequired=true + +#public_key details +public_key.service.url=https://qa.mosip.io/v1/keymanager/publickey/KERNEL +public_key.service.httpmethod=GET +public_key.service.responseType=java.lang.Object +public_key.service.headers=Content-Type:APPLICATION/JSON +public_key.service.authrequired=true +public_key.service.signrequired=false +public_key.service.authheader=Authorization:OAUTH +public_key.service.requestsignrequired=true + +#user_salt_details details +user_salt_details.service.url=https://qa.mosip.io/v1/authmanager/usersaltdetails/registrationclient +user_salt_details.service.httpmethod=GET +user_salt_details.service.responseType=java.lang.Object +user_salt_details.service.headers=Content-Type:APPLICATION/JSON +user_salt_details.service.authrequired=true +user_salt_details.service.signrequired=false +user_salt_details.service.authheader=Authorization:OAUTH +user_salt_details.service.requestsignrequired=true + +#SignatureResponseUrl's +mosip.kernel.signature.cryptomanager-encrypt-url=https://qa.mosip.io/v1/cryptomanager/private/encrypt +mosip.kernel.keymanager-service-publickey-url=https://qa.mosip.io/v1/keymanager/publickey/{applicationId} +auth.server.validate.url=https://qa.mosip.io/v1/authmanager/authorize/validateToken +auth.server.refreshToken.url=https://qa.mosip.io/v1/authmanager/authorize/refreshToken + +#master_sync details +center_remap_sync.service.url=https://qa.mosip.io/v1/syncdata/masterdata/{regcenterId} +center_remap_sync.service.httpmethod=GET +center_remap_sync.service.responseType=java.lang.Object +center_remap_sync.service.headers=Content-Type:application/json;charset=UTF-8 +center_remap_sync.service.authrequired=true +center_remap_sync.service.signrequired=false +center_remap_sync.service.authheader=Authorization:OAUTH +center_remap_sync.service.requestsignrequired=true + +#ida_key details +ida_key.service.url=https://qa.mosip.io/v1/keymanager/publickey/IDA +ida_key.service.httpmethod=GET +ida_key.service.responseType=java.util.LinkedHashMap +ida_key.service.headers=Content-Type:APPLICATION/JSON +ida_key.service.authrequired=true +ida_key.service.signrequired=false +ida_key.service.authheader=Authorization:OAUTH +ida_key.service.requestsignrequired=true + +#ida_auth details +ida_auth.service.url=https://qa.mosip.io/idauthentication/v1/internal/auth +ida_auth.service.httpmethod=POST +ida_auth.service.responseType=java.util.LinkedHashMap +ida_auth.service.headers=Content-Type:APPLICATION/JSON +ida_auth.service.authrequired=true +ida_auth.service.signrequired=false +ida_auth.service.authheader=Authorization:OAUTH +ida_auth.service.requestsignrequired=true + +#TPM Public Key Upload +tpm_public_key.service.url=https://qa.mosip.io/v1/syncdata/tpm/publickey +tpm_public_key.service.httpmethod=POST +tpm_public_key.service.responseType=java.lang.Object +tpm_public_key.service.headers=Content-Type:APPLICATION/JSON +tpm_public_key.service.authrequired=true +tpm_public_key.service.signrequired=false +tpm_public_key.service.authheader=Authorization:OAUTH +ida_auth.service.requestsignrequired=false + +#Main Properties +mosip.reg.client.url=https://devops.mosip.io/artifactory/libs-release/io/mosip/registration/registration-client/ +mosip.reg.logpath=../logs +mosip.reg.packetstorepath=../PacketStore +mosip.reg.healthcheck.url=https://qa.mosip.io/v1/authmanager/actuator/health +mosip.reg.rollback.path=../BackUp +mosip.reg.db.key=bW9zaXAxMjM0NQ\=\= +mosip.reg.cerpath=/cer//mosip_cer.cer +mosip.reg.xml.file.url=https://devops.mosip.io/artifactory/libs-release/io/mosip/registration/registration-client/maven-metadata.xml +mosip.reg.dbpath=db/reg +mosip.reg.client.tpm.availability=N + +#Cryptomanger +session_key.service.url=https://qa.mosip.io/v1/cryptomanager/encrypt +session_key.service.httpmethod=POST +session_key.service.requestType=java.lang.Object +session_key.service.headers=Content-Type:APPLICATION/JSON +session_key.service.authrequired=true +session_key.service.signrequired=false +session_key.service.authheader=Authorization:OAUTH +session_key.service.service.requestsignrequired=true diff --git a/apitest/testNgXmlFiles/mimotoApi.xml b/apitest/testNgXmlFiles/mimotoApi.xml new file mode 100644 index 000000000..e3b16cbdd --- /dev/null +++ b/apitest/testNgXmlFiles/mimotoApi.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 385f30b65ff4e19d05e7e78bbb99e86820bd4d44 Mon Sep 17 00:00:00 2001 From: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> Date: Fri, 19 Apr 2024 11:43:44 +0530 Subject: [PATCH 130/860] MOSIP-32084 (#195) Signed-off-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> --- apitest/.gitignore | 40 + ...ional Test-classpath-arg-1659588646071.txt | 1 + ...ional Test-classpath-arg-1659589592502.txt | 1 + ...tionalTest-classpath-arg-1695652238739.txt | 1 + ...ration (1)-classpath-arg-1658840665646.txt | 1 + apitest/Dockerfile | 63 + apitest/README.md | 3 + apitest/entrypoint.sh | 4 + apitest/metadata.xml | 16 + apitest/pom.xml | 185 ++ .../apirig/testrunner/MosipTestRunner.java | 350 ++ .../apirig/testscripts/AddIdentity.java | 178 + .../apirig/testscripts/GetWithParam.java | 175 + .../PostWithAutogenIdWithOtpGenerate.java | 233 ++ .../PostWithBodyWithOtpGenerate.java | 181 + .../apirig/testscripts/SimplePost.java | 207 ++ .../src/main/resources/config/AuthPolicy.json | 7 + .../main/resources/config/AuthPolicy2.json | 82 + .../main/resources/config/AuthPolicy3.json | 8 + .../main/resources/config/AuthPolicy4.json | 7 + .../main/resources/config/AuthPolicy5.json | 8 + .../main/resources/config/AuthPolicy6.json | 41 + .../Authorization/OtpGeneration/request.json | 16 + .../Authorization/OtpValidation/request.json | 11 + .../config/Authorization/errorUIN.json | 17 + .../Authorization/internalAuthRequest.json | 13 + .../keycloakTokenGeneration.json | 6 + .../config/Authorization/request.json | 11 + .../config/Authorization/requestIdentity.json | 12 + .../Authorization/zoneMappingRequest.json | 12 + .../main/resources/config/IDRepo.properties | 86 + .../main/resources/config/IDRepo2.properties | 100 + .../main/resources/config/IDjson.properties | 2 + .../main/resources/config/Kernel.properties | 278 ++ .../config/UmcValidationApis.properties | 6 + .../resources/config/adminQueries.properties | 908 +++++ .../config/adminTokenGeneration.properties | 5 + .../resources/config/application.properties | 103 + .../main/resources/config/bioValue.properties | 49 + .../config/bioValueEncryptionTemplate.json | 14 + .../src/main/resources/config/bulkUpload.json | 6 + .../resources/config/clientPrivateKey.txt | 1 + .../src/main/resources/config/errorUIN.json | 24 + .../main/resources/config/errorUINIdp.json | 9 + .../main/resources/config/errorUINKyc.json | 24 + .../main/resources/config/esignetPayload.json | 7 + .../resources/config/folderPaths.properties | 10 + .../config/healthCheckEndpoint.properties | 45 + .../resources/config/idRepoToken.properties | 5 + .../config/idaDeleteQueriesForEsignet.txt | 8 + .../config/keyManagerDataDeleteQueries.txt | 14 + .../keyManagerDataDeleteQueriesForEsignet.txt | 14 + .../resources/config/lang-isocode-transid.csv | 550 +++ .../main/resources/config/mapping.properties | 29 + .../config/masterDataDeleteQueries.txt | 91 + .../masterDataDeleteQueriesForEsignet.txt | 8 + .../config/packetProperties.properties | 2 + .../config/packetValidator.properties | 2 + .../config/partnerDemoService.properties | 8 + .../config/partnerQueries.properties | 135 + .../resources/config/pmsDataDeleteQueries.txt | 28 + .../main/resources/config/policyGroup.json | 10 + .../main/resources/config/prereg_SendOtp.json | 9 + .../resources/config/prereg_ValidateOtp.json | 9 + .../registrationProcessorAPI.properties | 27 + .../config/residentServicesQueries.properties | 15 + apitest/src/main/resources/config/sign.json | 14 + .../src/main/resources/config/test.properties | 16 + .../config/tokenGeneration.properties | 7 + .../config/updatePacketProperties.properties | 7 + .../resources/config/valueMapping.properties | 35 + .../customize-emailable-report-template.html | 61 + apitest/src/main/resources/dbFiles/.xml | 22 + .../resources/dbFiles/PMS_delete_script.txt | 28 + .../src/main/resources/dbFiles/dbConfig.xml | 22 + .../resources/dbFiles/delete_Masterdata.sql | 88 + apitest/src/main/resources/krb5.conf | 29 + apitest/src/main/resources/log4j.properties | 8 + .../mimoto/AddIdentity/AddIdentity.yml | 85 + .../mimoto/AddIdentity/addIdentityResult.hbs | 5 + .../AidGetIndividualId/AidGetIndividualId.yml | 137 + .../AidGetIndividualId/aidGetIndividualId.hbs | 5 + .../aidGetIndividualIdResult.hbs | 5 + .../mimoto/AuthLock/createAuthLock.hbs | 12 + .../mimoto/AuthLock/createAuthLock.yml | 183 + .../mimoto/AuthLock/createAuthLockResult.hbs | 2 + .../mimoto/AuthUnLock/createAuthUnLock.hbs | 13 + .../mimoto/AuthUnLock/createAuthUnLock.yml | 123 + .../AuthUnLock/createAuthUnLockResult.hbs | 3 + .../mimoto/BindingOtp/BindingOtp.hbs | 12 + .../mimoto/BindingOtp/BindingOtp.yml | 714 ++++ .../mimoto/BindingOtp/BindingOtpResult.hbs | 5 + .../CredentialCheckStatus.yml | 42 + .../credentialcheckstatus.hbs | 3 + .../credentialcheckstatusResult.hbs | 5 + .../DownloadCredential/DownloadCredential.yml | 42 + .../DownloadCredential/downloadCredential.hbs | 4 + .../DownloadWithReqid/DownloadWithReqid.yml | 26 + .../DownloadWithReqid/downloadwithreqid.hbs | 4 + .../downloadwithreqidResult.hbs | 4 + .../RequestCredentials/ReqCredential.yml | 181 + .../ReqCredentialResult.hbs | 5 + .../RequestCredentials/reqCredential.hbs | 6 + .../mimoto/GenerateVID/createGenerateVID.hbs | 7 + .../mimoto/GenerateVID/createGenerateVID.yml | 181 + .../GenerateVID/createGenerateVIDResult.hbs | 2 + .../mimoto/GetAllIssuers/GetAllIssuers.hbs | 1 + .../mimoto/GetAllIssuers/GetAllIssuers.yml | 41 + .../GetAllIssuers/GetAllIssuersResult.hbs | 1 + .../main/resources/mimoto/SendOTP/SendOTP.yml | 52 + .../mimoto/SendOTP/createSendOTP.hbs | 10 + .../mimoto/SendOTP/createSendOTP2.hbs | 10 + .../mimoto/SendOTP/createSendOTPAsEmail.hbs | 10 + .../mimoto/SendOTP/createSendOTPAsEmpty.hbs | 10 + .../mimoto/SendOTP/createSendOTPAsPhone.hbs | 10 + .../SendOTP/createSendOTPErrorResult.hbs | 14 + .../SendOTP/createSendOTPErrorResult2.hbs | 14 + .../mimoto/SendOTP/createSendOTPResult.hbs | 2 + .../SendOTP/createSendOTPResultForEmail.hbs | 11 + .../SendOTP/createSendOTPResultForPhone.hbs | 11 + .../resources/mimoto/SendOTP1/SendOTP.yml | 81 + .../mimoto/SendOTP1/createSendOTP.hbs | 10 + .../mimoto/SendOTP1/createSendOTP2.hbs | 10 + .../SendOTP1/createSendOTPErrorResult.hbs | 14 + .../SendOTP1/createSendOTPErrorResult2.hbs | 14 + .../mimoto/SendOTP1/createSendOTPResult.hbs | 12 + .../mimoto/SendOTPUIN/createSendOTP.yml | 14 + .../mimoto/SendOTPUIN/individualIdOtp.hbs | 8 + .../SendOTPUIN/individualIdOtpResult.hbs | 2 + .../mimoto/SendOtpForVid/createSendOTP.hbs | 12 + .../mimoto/SendOtpForVid/createSendOTP.yml | 21 + .../SendOtpForVid/createSendOTPResult.hbs | 12 + .../mimoto/ValidateOTP/ValidateOTP.hbs | 10 + .../mimoto/ValidateOTP/ValidateOTP.yml | 185 ++ .../mimoto/ValidateOTP/ValidateOTPResult.hbs | 7 + .../mimoto/WalletBinding/WalletBinding.hbs | 16 + .../mimoto/WalletBinding/WalletBinding.yml | 2953 +++++++++++++++++ .../WalletBindingEmptyChallenge.hbs | 9 + .../WalletBinding/WalletBindingResult.hbs | 9 + .../mimoto/autoGeneratedId.properties | 1 + apitest/src/main/resources/mimoto/error.hbs | 10 + apitest/src/main/resources/spring.properties | 329 ++ apitest/testNgXmlFiles/mimotoApi.xml | 106 + 143 files changed, 10726 insertions(+) create mode 100644 apitest/.gitignore create mode 100644 apitest/.temp-Functional Test-classpath-arg-1659588646071.txt create mode 100644 apitest/.temp-Functional Test-classpath-arg-1659589592502.txt create mode 100644 apitest/.temp-MosipFunctionalTest-classpath-arg-1695652238739.txt create mode 100644 apitest/.temp-New_configuration (1)-classpath-arg-1658840665646.txt create mode 100644 apitest/Dockerfile create mode 100644 apitest/README.md create mode 100644 apitest/entrypoint.sh create mode 100644 apitest/metadata.xml create mode 100644 apitest/pom.xml create mode 100644 apitest/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java create mode 100644 apitest/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java create mode 100644 apitest/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java create mode 100644 apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java create mode 100644 apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithBodyWithOtpGenerate.java create mode 100644 apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java create mode 100644 apitest/src/main/resources/config/AuthPolicy.json create mode 100644 apitest/src/main/resources/config/AuthPolicy2.json create mode 100644 apitest/src/main/resources/config/AuthPolicy3.json create mode 100644 apitest/src/main/resources/config/AuthPolicy4.json create mode 100644 apitest/src/main/resources/config/AuthPolicy5.json create mode 100644 apitest/src/main/resources/config/AuthPolicy6.json create mode 100644 apitest/src/main/resources/config/Authorization/OtpGeneration/request.json create mode 100644 apitest/src/main/resources/config/Authorization/OtpValidation/request.json create mode 100644 apitest/src/main/resources/config/Authorization/errorUIN.json create mode 100644 apitest/src/main/resources/config/Authorization/internalAuthRequest.json create mode 100644 apitest/src/main/resources/config/Authorization/keycloakTokenGeneration.json create mode 100644 apitest/src/main/resources/config/Authorization/request.json create mode 100644 apitest/src/main/resources/config/Authorization/requestIdentity.json create mode 100644 apitest/src/main/resources/config/Authorization/zoneMappingRequest.json create mode 100644 apitest/src/main/resources/config/IDRepo.properties create mode 100644 apitest/src/main/resources/config/IDRepo2.properties create mode 100644 apitest/src/main/resources/config/IDjson.properties create mode 100644 apitest/src/main/resources/config/Kernel.properties create mode 100644 apitest/src/main/resources/config/UmcValidationApis.properties create mode 100644 apitest/src/main/resources/config/adminQueries.properties create mode 100644 apitest/src/main/resources/config/adminTokenGeneration.properties create mode 100644 apitest/src/main/resources/config/application.properties create mode 100644 apitest/src/main/resources/config/bioValue.properties create mode 100644 apitest/src/main/resources/config/bioValueEncryptionTemplate.json create mode 100644 apitest/src/main/resources/config/bulkUpload.json create mode 100644 apitest/src/main/resources/config/clientPrivateKey.txt create mode 100644 apitest/src/main/resources/config/errorUIN.json create mode 100644 apitest/src/main/resources/config/errorUINIdp.json create mode 100644 apitest/src/main/resources/config/errorUINKyc.json create mode 100644 apitest/src/main/resources/config/esignetPayload.json create mode 100644 apitest/src/main/resources/config/folderPaths.properties create mode 100644 apitest/src/main/resources/config/healthCheckEndpoint.properties create mode 100644 apitest/src/main/resources/config/idRepoToken.properties create mode 100644 apitest/src/main/resources/config/idaDeleteQueriesForEsignet.txt create mode 100644 apitest/src/main/resources/config/keyManagerDataDeleteQueries.txt create mode 100644 apitest/src/main/resources/config/keyManagerDataDeleteQueriesForEsignet.txt create mode 100644 apitest/src/main/resources/config/lang-isocode-transid.csv create mode 100644 apitest/src/main/resources/config/mapping.properties create mode 100644 apitest/src/main/resources/config/masterDataDeleteQueries.txt create mode 100644 apitest/src/main/resources/config/masterDataDeleteQueriesForEsignet.txt create mode 100644 apitest/src/main/resources/config/packetProperties.properties create mode 100644 apitest/src/main/resources/config/packetValidator.properties create mode 100644 apitest/src/main/resources/config/partnerDemoService.properties create mode 100644 apitest/src/main/resources/config/partnerQueries.properties create mode 100644 apitest/src/main/resources/config/pmsDataDeleteQueries.txt create mode 100644 apitest/src/main/resources/config/policyGroup.json create mode 100644 apitest/src/main/resources/config/prereg_SendOtp.json create mode 100644 apitest/src/main/resources/config/prereg_ValidateOtp.json create mode 100644 apitest/src/main/resources/config/registrationProcessorAPI.properties create mode 100644 apitest/src/main/resources/config/residentServicesQueries.properties create mode 100644 apitest/src/main/resources/config/sign.json create mode 100644 apitest/src/main/resources/config/test.properties create mode 100644 apitest/src/main/resources/config/tokenGeneration.properties create mode 100644 apitest/src/main/resources/config/updatePacketProperties.properties create mode 100644 apitest/src/main/resources/config/valueMapping.properties create mode 100644 apitest/src/main/resources/customize-emailable-report-template.html create mode 100644 apitest/src/main/resources/dbFiles/.xml create mode 100644 apitest/src/main/resources/dbFiles/PMS_delete_script.txt create mode 100644 apitest/src/main/resources/dbFiles/dbConfig.xml create mode 100644 apitest/src/main/resources/dbFiles/delete_Masterdata.sql create mode 100644 apitest/src/main/resources/krb5.conf create mode 100644 apitest/src/main/resources/log4j.properties create mode 100644 apitest/src/main/resources/mimoto/AddIdentity/AddIdentity.yml create mode 100644 apitest/src/main/resources/mimoto/AddIdentity/addIdentityResult.hbs create mode 100644 apitest/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml create mode 100644 apitest/src/main/resources/mimoto/AidGetIndividualId/aidGetIndividualId.hbs create mode 100644 apitest/src/main/resources/mimoto/AidGetIndividualId/aidGetIndividualIdResult.hbs create mode 100644 apitest/src/main/resources/mimoto/AuthLock/createAuthLock.hbs create mode 100644 apitest/src/main/resources/mimoto/AuthLock/createAuthLock.yml create mode 100644 apitest/src/main/resources/mimoto/AuthLock/createAuthLockResult.hbs create mode 100644 apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.hbs create mode 100644 apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml create mode 100644 apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLockResult.hbs create mode 100644 apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.hbs create mode 100644 apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.yml create mode 100644 apitest/src/main/resources/mimoto/BindingOtp/BindingOtpResult.hbs create mode 100644 apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml create mode 100644 apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatus.hbs create mode 100644 apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatusResult.hbs create mode 100644 apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml create mode 100644 apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/downloadCredential.hbs create mode 100644 apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml create mode 100644 apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqid.hbs create mode 100644 apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqidResult.hbs create mode 100644 apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml create mode 100644 apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredentialResult.hbs create mode 100644 apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/reqCredential.hbs create mode 100644 apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.hbs create mode 100644 apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml create mode 100644 apitest/src/main/resources/mimoto/GenerateVID/createGenerateVIDResult.hbs create mode 100644 apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.hbs create mode 100644 apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml create mode 100644 apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuersResult.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOTP/SendOTP.yml create mode 100644 apitest/src/main/resources/mimoto/SendOTP/createSendOTP.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOTP/createSendOTP2.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOTP/createSendOTPAsEmail.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOTP/createSendOTPAsEmpty.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOTP/createSendOTPAsPhone.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOTP/createSendOTPErrorResult.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOTP/createSendOTPErrorResult2.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOTP/createSendOTPResult.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOTP/createSendOTPResultForEmail.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOTP/createSendOTPResultForPhone.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOTP1/SendOTP.yml create mode 100644 apitest/src/main/resources/mimoto/SendOTP1/createSendOTP.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOTP1/createSendOTP2.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOTP1/createSendOTPErrorResult.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOTP1/createSendOTPErrorResult2.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOTP1/createSendOTPResult.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml create mode 100644 apitest/src/main/resources/mimoto/SendOTPUIN/individualIdOtp.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOTPUIN/individualIdOtpResult.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOtpForVid/createSendOTP.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOtpForVid/createSendOTP.yml create mode 100644 apitest/src/main/resources/mimoto/SendOtpForVid/createSendOTPResult.hbs create mode 100644 apitest/src/main/resources/mimoto/ValidateOTP/ValidateOTP.hbs create mode 100644 apitest/src/main/resources/mimoto/ValidateOTP/ValidateOTP.yml create mode 100644 apitest/src/main/resources/mimoto/ValidateOTP/ValidateOTPResult.hbs create mode 100644 apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.hbs create mode 100644 apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml create mode 100644 apitest/src/main/resources/mimoto/WalletBinding/WalletBindingEmptyChallenge.hbs create mode 100644 apitest/src/main/resources/mimoto/WalletBinding/WalletBindingResult.hbs create mode 100644 apitest/src/main/resources/mimoto/autoGeneratedId.properties create mode 100644 apitest/src/main/resources/mimoto/error.hbs create mode 100644 apitest/src/main/resources/spring.properties create mode 100644 apitest/testNgXmlFiles/mimotoApi.xml diff --git a/apitest/.gitignore b/apitest/.gitignore new file mode 100644 index 000000000..defd05020 --- /dev/null +++ b/apitest/.gitignore @@ -0,0 +1,40 @@ +*.class +.mtj.tmp/ +*.war +*.ear +hs_err_pid* +#ignored files + +.springBeans +.metadata +.factorypath +.classpath +.project +.settings/ +bin/ +tmp/ + +logs/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.loadpath +.DS_Store +test.txt +.idea/ +.settings/ +.sonarlint/ +.recommenders/ +/.recommenders/ + +**/*.iml +*.log +src/logs/mosip-api-test.log +/target/ +target/ +test-output/ +testng-report/ +/reg +./reg diff --git a/apitest/.temp-Functional Test-classpath-arg-1659588646071.txt b/apitest/.temp-Functional Test-classpath-arg-1659588646071.txt new file mode 100644 index 000000000..bb81464f5 --- /dev/null +++ b/apitest/.temp-Functional Test-classpath-arg-1659588646071.txt @@ -0,0 +1 @@ +-classpath D:\Mosip_Automation_Test\Docker_Test\MOSIP-19726\mosip-functional-tests\automationtests\target\test-classes;D:\Mosip_Automation_Test\Docker_Test\MOSIP-19726\mosip-functional-tests\automationtests\target\classes;C:\Users\Sohan.Dey\.m2\repository\com\opencsv\opencsv\4.1\opencsv-4.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-lang3\3.6\commons-lang3-3.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-text\1.1\commons-text-1.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\ibm\icu\icu4j\63.1\icu4j-63.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\keycloak\keycloak-admin-client\17.0.1\keycloak-admin-client-17.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\keycloak\keycloak-core\17.0.1\keycloak-core-17.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\keycloak\keycloak-common\17.0.1\keycloak-common-17.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-client\3.13.2.Final\resteasy-client-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\ws\rs\jboss-jaxrs-api_2.1_spec\2.0.1.Final\jboss-jaxrs-api_2.1_spec-2.0.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-jaxrs\3.13.2.Final\resteasy-jaxrs-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\reactivestreams\reactive-streams\1.0.3\reactive-streams-1.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\jakarta\validation\jakarta.validation-api\2.0.2\jakarta.validation-api-2.0.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\annotation\jboss-annotations-api_1.3_spec\2.0.1.Final\jboss-annotations-api_1.3_spec-2.0.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\activation\jakarta.activation\1.2.1\jakarta.activation-1.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\stephenc\jcip\jcip-annotations\1.0-1\jcip-annotations-1.0-1.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-multipart-provider\3.13.2.Final\resteasy-multipart-provider-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\mail\jakarta.mail\1.6.5\jakarta.mail-1.6.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\james\apache-mime4j\0.6\apache-mime4j-0.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-jackson2-provider\3.13.2.Final\resteasy-jackson2-provider-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\jaxrs\jackson-jaxrs-json-provider\2.10.5\jackson-jaxrs-json-provider-2.10.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\jaxrs\jackson-jaxrs-base\2.10.5\jackson-jaxrs-base-2.10.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\json-patch\1.9\json-patch-1.9.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\jackson-coreutils\1.6\jackson-coreutils-1.6.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\msg-simple\1.1\msg-simple-1.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\btf\1.2\btf-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-jaxb-provider\3.13.2.Final\resteasy-jaxb-provider-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\xml\bind\jboss-jaxb-api_2.3_spec\2.0.0.Final\jboss-jaxb-api_2.3_spec-2.0.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\javassist\javassist\3.25.0-GA\javassist-3.25.0-GA.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\jknack\handlebars\3.0.0\handlebars-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\antlr\antlr4-runtime\4.5.1-1\antlr4-runtime-4.5.1-1.jar;C:\Users\Sohan.Dey\.m2\repository\org\mozilla\rhino\1.7R4\rhino-1.7R4.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\slf4j-api\1.6.4\slf4j-api-1.6.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-collections4\4.3\commons-collections4-4.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\jsonwebtoken\jjwt\0.6.0\jjwt-0.6.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\flipkart\zjsonpatch\zjsonpatch\0.4.7\zjsonpatch-0.4.7.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk\1.11.368\aws-java-sdk-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dlm\1.11.368\aws-java-sdk-dlm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\jmespath-java\1.11.368\jmespath-java-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-macie\1.11.368\aws-java-sdk-macie-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-eks\1.11.368\aws-java-sdk-eks-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediatailor\1.11.368\aws-java-sdk-mediatailor-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-neptune\1.11.368\aws-java-sdk-neptune-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-pi\1.11.368\aws-java-sdk-pi-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iot1clickprojects\1.11.368\aws-java-sdk-iot1clickprojects-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iot1clickdevices\1.11.368\aws-java-sdk-iot1clickdevices-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iotanalytics\1.11.368\aws-java-sdk-iotanalytics-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-acmpca\1.11.368\aws-java-sdk-acmpca-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-secretsmanager\1.11.368\aws-java-sdk-secretsmanager-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-fms\1.11.368\aws-java-sdk-fms-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-connect\1.11.368\aws-java-sdk-connect-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-transcribe\1.11.368\aws-java-sdk-transcribe-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-autoscalingplans\1.11.368\aws-java-sdk-autoscalingplans-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-workmail\1.11.368\aws-java-sdk-workmail-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-servicediscovery\1.11.368\aws-java-sdk-servicediscovery-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloud9\1.11.368\aws-java-sdk-cloud9-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-serverlessapplicationrepository\1.11.368\aws-java-sdk-serverlessapplicationrepository-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-alexaforbusiness\1.11.368\aws-java-sdk-alexaforbusiness-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-resourcegroups\1.11.368\aws-java-sdk-resourcegroups-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-comprehend\1.11.368\aws-java-sdk-comprehend-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-translate\1.11.368\aws-java-sdk-translate-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sagemaker\1.11.368\aws-java-sdk-sagemaker-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iotjobsdataplane\1.11.368\aws-java-sdk-iotjobsdataplane-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sagemakerruntime\1.11.368\aws-java-sdk-sagemakerruntime-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-kinesisvideo\1.11.368\aws-java-sdk-kinesisvideo-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-codec-http\4.1.17.Final\netty-codec-http-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-codec\4.1.17.Final\netty-codec-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-handler\4.1.17.Final\netty-handler-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-buffer\4.1.17.Final\netty-buffer-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-common\4.1.17.Final\netty-common-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-transport\4.1.17.Final\netty-transport-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-resolver\4.1.17.Final\netty-resolver-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-appsync\1.11.368\aws-java-sdk-appsync-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-guardduty\1.11.368\aws-java-sdk-guardduty-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mq\1.11.368\aws-java-sdk-mq-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediaconvert\1.11.368\aws-java-sdk-mediaconvert-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediastore\1.11.368\aws-java-sdk-mediastore-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediastoredata\1.11.368\aws-java-sdk-mediastoredata-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-medialive\1.11.368\aws-java-sdk-medialive-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediapackage\1.11.368\aws-java-sdk-mediapackage-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-costexplorer\1.11.368\aws-java-sdk-costexplorer-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-pricing\1.11.368\aws-java-sdk-pricing-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mobile\1.11.368\aws-java-sdk-mobile-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudhsmv2\1.11.368\aws-java-sdk-cloudhsmv2-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-glue\1.11.368\aws-java-sdk-glue-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-migrationhub\1.11.368\aws-java-sdk-migrationhub-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dax\1.11.368\aws-java-sdk-dax-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-greengrass\1.11.368\aws-java-sdk-greengrass-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-athena\1.11.368\aws-java-sdk-athena-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-marketplaceentitlement\1.11.368\aws-java-sdk-marketplaceentitlement-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codestar\1.11.368\aws-java-sdk-codestar-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lexmodelbuilding\1.11.368\aws-java-sdk-lexmodelbuilding-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-resourcegroupstaggingapi\1.11.368\aws-java-sdk-resourcegroupstaggingapi-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-pinpoint\1.11.368\aws-java-sdk-pinpoint-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-xray\1.11.368\aws-java-sdk-xray-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-opsworkscm\1.11.368\aws-java-sdk-opsworkscm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-support\1.11.368\aws-java-sdk-support-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-simpledb\1.11.368\aws-java-sdk-simpledb-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-servicecatalog\1.11.368\aws-java-sdk-servicecatalog-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-servermigration\1.11.368\aws-java-sdk-servermigration-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-simpleworkflow\1.11.368\aws-java-sdk-simpleworkflow-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-storagegateway\1.11.368\aws-java-sdk-storagegateway-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-route53\1.11.368\aws-java-sdk-route53-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-s3\1.11.368\aws-java-sdk-s3-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-importexport\1.11.368\aws-java-sdk-importexport-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sts\1.11.368\aws-java-sdk-sts-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sqs\1.11.368\aws-java-sdk-sqs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-rds\1.11.368\aws-java-sdk-rds-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-redshift\1.11.368\aws-java-sdk-redshift-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticbeanstalk\1.11.368\aws-java-sdk-elasticbeanstalk-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-glacier\1.11.368\aws-java-sdk-glacier-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iam\1.11.368\aws-java-sdk-iam-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-datapipeline\1.11.368\aws-java-sdk-datapipeline-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticloadbalancing\1.11.368\aws-java-sdk-elasticloadbalancing-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticloadbalancingv2\1.11.368\aws-java-sdk-elasticloadbalancingv2-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-emr\1.11.368\aws-java-sdk-emr-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticache\1.11.368\aws-java-sdk-elasticache-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elastictranscoder\1.11.368\aws-java-sdk-elastictranscoder-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ec2\1.11.368\aws-java-sdk-ec2-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dynamodb\1.11.368\aws-java-sdk-dynamodb-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sns\1.11.368\aws-java-sdk-sns-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-budgets\1.11.368\aws-java-sdk-budgets-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudtrail\1.11.368\aws-java-sdk-cloudtrail-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudwatch\1.11.368\aws-java-sdk-cloudwatch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-logs\1.11.368\aws-java-sdk-logs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-events\1.11.368\aws-java-sdk-events-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cognitoidentity\1.11.368\aws-java-sdk-cognitoidentity-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cognitosync\1.11.368\aws-java-sdk-cognitosync-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-directconnect\1.11.368\aws-java-sdk-directconnect-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudformation\1.11.368\aws-java-sdk-cloudformation-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudfront\1.11.368\aws-java-sdk-cloudfront-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-clouddirectory\1.11.368\aws-java-sdk-clouddirectory-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-kinesis\1.11.368\aws-java-sdk-kinesis-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-opsworks\1.11.368\aws-java-sdk-opsworks-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ses\1.11.368\aws-java-sdk-ses-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-autoscaling\1.11.368\aws-java-sdk-autoscaling-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudsearch\1.11.368\aws-java-sdk-cloudsearch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudwatchmetrics\1.11.368\aws-java-sdk-cloudwatchmetrics-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codedeploy\1.11.368\aws-java-sdk-codedeploy-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codepipeline\1.11.368\aws-java-sdk-codepipeline-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-kms\1.11.368\aws-java-sdk-kms-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-config\1.11.368\aws-java-sdk-config-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lambda\1.11.368\aws-java-sdk-lambda-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ecs\1.11.368\aws-java-sdk-ecs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ecr\1.11.368\aws-java-sdk-ecr-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudhsm\1.11.368\aws-java-sdk-cloudhsm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ssm\1.11.368\aws-java-sdk-ssm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-workspaces\1.11.368\aws-java-sdk-workspaces-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-machinelearning\1.11.368\aws-java-sdk-machinelearning-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-directory\1.11.368\aws-java-sdk-directory-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-efs\1.11.368\aws-java-sdk-efs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codecommit\1.11.368\aws-java-sdk-codecommit-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-devicefarm\1.11.368\aws-java-sdk-devicefarm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticsearch\1.11.368\aws-java-sdk-elasticsearch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-waf\1.11.368\aws-java-sdk-waf-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-marketplacecommerceanalytics\1.11.368\aws-java-sdk-marketplacecommerceanalytics-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-inspector\1.11.368\aws-java-sdk-inspector-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iot\1.11.368\aws-java-sdk-iot-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-api-gateway\1.11.368\aws-java-sdk-api-gateway-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-acm\1.11.368\aws-java-sdk-acm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-gamelift\1.11.368\aws-java-sdk-gamelift-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dms\1.11.368\aws-java-sdk-dms-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-marketplacemeteringservice\1.11.368\aws-java-sdk-marketplacemeteringservice-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cognitoidp\1.11.368\aws-java-sdk-cognitoidp-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-discovery\1.11.368\aws-java-sdk-discovery-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-applicationautoscaling\1.11.368\aws-java-sdk-applicationautoscaling-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-snowball\1.11.368\aws-java-sdk-snowball-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-rekognition\1.11.368\aws-java-sdk-rekognition-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-polly\1.11.368\aws-java-sdk-polly-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lightsail\1.11.368\aws-java-sdk-lightsail-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-stepfunctions\1.11.368\aws-java-sdk-stepfunctions-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-health\1.11.368\aws-java-sdk-health-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-costandusagereport\1.11.368\aws-java-sdk-costandusagereport-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codebuild\1.11.368\aws-java-sdk-codebuild-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-appstream\1.11.368\aws-java-sdk-appstream-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-shield\1.11.368\aws-java-sdk-shield-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-batch\1.11.368\aws-java-sdk-batch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lex\1.11.368\aws-java-sdk-lex-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mechanicalturkrequester\1.11.368\aws-java-sdk-mechanicalturkrequester-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-organizations\1.11.368\aws-java-sdk-organizations-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-workdocs\1.11.368\aws-java-sdk-workdocs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-core\1.11.368\aws-java-sdk-core-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\software\amazon\ion\ion-java\1.0.2\ion-java-1.0.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-cbor\2.6.7\jackson-dataformat-cbor-2.6.7.jar;C:\Users\Sohan.Dey\.m2\repository\joda-time\joda-time\2.8.1\joda-time-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-models\1.11.368\aws-java-sdk-models-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-swf-libraries\1.11.22\aws-java-sdk-swf-libraries-1.11.22.jar;C:\Users\Sohan.Dey\.m2\repository\com\aventstack\extentreports\3.0.0\extentreports-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\freemarker\freemarker\2.3.23\freemarker-2.3.23.jar;C:\Users\Sohan.Dey\.m2\repository\org\mongodb\mongodb-driver\3.3.0\mongodb-driver-3.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\mongodb\bson\3.3.0\bson-3.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\mongodb\mongodb-driver-core\3.3.0\mongodb-driver-core-3.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\httpcomponents\httpmime\4.5.2\httpmime-4.5.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\relevantcodes\extentreports\2.41.2\extentreports-2.41.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\jsoup\jsoup\1.8.3\jsoup-1.8.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\xerial\sqlite-jdbc\3.8.11.1\sqlite-jdbc-3.8.11.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\jayway\jsonpath\json-path\2.4.0\json-path-2.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\net\minidev\json-smart\2.3\json-smart-2.3.jar;C:\Users\Sohan.Dey\.m2\repository\net\minidev\accessors-smart\1.2\accessors-smart-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\ow2\asm\asm\5.0.4\asm-5.0.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-model\3.3.9\maven-model-3.3.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-utils\3.0.22\plexus-utils-3.0.22.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\rest-assured\3.0.7\rest-assured-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\groovy\groovy\2.4.12\groovy-2.4.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\groovy\groovy-xml\2.4.12\groovy-xml-2.4.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\hamcrest\hamcrest-library\1.3\hamcrest-library-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\ccil\cowan\tagsoup\tagsoup\1.2.1\tagsoup-1.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\json-path\3.0.7\json-path-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\groovy\groovy-json\2.4.12\groovy-json-2.4.12.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\rest-assured-common\3.0.7\rest-assured-common-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\xml-path\3.0.7\xml-path-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\testng\testng\6.11\testng-6.11.jar;C:\Users\Sohan.Dey\.m2\repository\com\beust\jcommander\1.64\jcommander-1.64.jar;C:\Users\Sohan.Dey\.m2\repository\org\yaml\snakeyaml\1.17\snakeyaml-1.17.jar;C:\Users\Sohan.Dey\.m2\repository\org\zeroturnaround\zt-zip\1.13\zt-zip-1.13.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.10.1\jackson-core-2.10.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.9.5\jackson-annotations-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.10.5\jackson-databind-2.10.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-xml\2.9.5\jackson-dataformat-xml-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\module\jackson-module-jaxb-annotations\2.9.5\jackson-module-jaxb-annotations-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\woodstox\stax2-api\3.1.4\stax2-api-3.1.4.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\woodstox\woodstox-core\5.0.3\woodstox-core-5.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\json\json\20180130\json-20180130.jar;C:\Users\Sohan.Dey\.m2\repository\com\googlecode\json-simple\json-simple\1.1.1\json-simple-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\junit\junit\4.10\junit-4.10.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\code\gson\gson\2.8.4\gson-2.8.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\plugins\maven-assembly-plugin\3.1.0\maven-assembly-plugin-3.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-plugin-api\3.0\maven-plugin-api-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\sisu\sisu-inject-plexus\1.4.2\sisu-inject-plexus-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\sisu\sisu-inject-bean\1.4.2\sisu-inject-bean-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\sisu\sisu-guice\2.1.7\sisu-guice-2.1.7-noaop.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-core\3.0\maven-core-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-settings\3.0\maven-settings-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-settings-builder\3.0\maven-settings-builder-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-repository-metadata\3.0\maven-repository-metadata-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-model-builder\3.0\maven-model-builder-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-aether-provider\3.0\maven-aether-provider-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-impl\1.7\aether-impl-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-spi\1.7\aether-spi-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-api\1.7\aether-api-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-util\1.7\aether-util-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-classworlds\2.2.3\plexus-classworlds-2.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-component-annotations\1.5.5\plexus-component-annotations-1.5.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\plexus\plexus-sec-dispatcher\1.3\plexus-sec-dispatcher-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\plexus\plexus-cipher\1.4\plexus-cipher-1.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-artifact\3.0\maven-artifact-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-common-artifact-filters\3.0.1\maven-common-artifact-filters-3.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-shared-utils\3.1.0\maven-shared-utils-3.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-artifact-transfer\0.9.0\maven-artifact-transfer-0.9.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-interpolation\1.24\plexus-interpolation-1.24.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-archiver\3.5\plexus-archiver-3.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-compress\1.14\commons-compress-1.14.jar;C:\Users\Sohan.Dey\.m2\repository\org\iq80\snappy\snappy\0.4\snappy-0.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\tukaani\xz\1.6\xz-1.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\file-management\3.0.0\file-management-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-shared-io\3.0.0\maven-shared-io-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-compat\3.0\maven-compat-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\wagon\wagon-provider-api\2.10\wagon-provider-api-2.10.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-filtering\3.1.1\maven-filtering-3.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\plexus\plexus-build-api\0.0.7\plexus-build-api-0.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-io\3.0.0\plexus-io-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-archiver\3.2.0\maven-archiver-3.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\guava\guava\19.0\guava-19.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\hibernate\hibernate-core\5.4.2.Final\hibernate-core-5.4.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\javax\persistence\javax.persistence-api\2.2\javax.persistence-api-2.2.jar;C:\Users\Sohan.Dey\.m2\repository\net\bytebuddy\byte-buddy\1.9.10\byte-buddy-1.9.10.jar;C:\Users\Sohan.Dey\.m2\repository\antlr\antlr\2.7.7\antlr-2.7.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\transaction\jboss-transaction-api_1.2_spec\1.1.1.Final\jboss-transaction-api_1.2_spec-1.1.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\jandex\2.0.5.Final\jandex-2.0.5.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\classmate\1.3.4\classmate-1.3.4.jar;C:\Users\Sohan.Dey\.m2\repository\javax\activation\javax.activation-api\1.2.0\javax.activation-api-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\dom4j\dom4j\2.1.1\dom4j-2.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\hibernate\common\hibernate-commons-annotations\5.1.0.Final\hibernate-commons-annotations-5.1.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\javax\xml\bind\jaxb-api\2.3.1\jaxb-api-2.3.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\glassfish\jaxb\jaxb-runtime\2.3.1\jaxb-runtime-2.3.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\glassfish\jaxb\txw2\2.3.1\txw2-2.3.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\istack\istack-commons-runtime\3.0.7\istack-commons-runtime-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\jvnet\staxex\stax-ex\1.8\stax-ex-1.8.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\xml\fastinfoset\FastInfoset\1.2.15\FastInfoset-1.2.15.jar;C:\Users\Sohan.Dey\.m2\repository\commons-beanutils\commons-beanutils\1.9.2\commons-beanutils-1.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\commons-logging\commons-logging\1.1.1\commons-logging-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\commons-collections\commons-collections\3.2.1\commons-collections-3.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\swagger-annotations\1.5.20\swagger-annotations-1.5.20.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.5\jackson-datatype-jsr310-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\postgresql\postgresql\42.2.2\postgresql-42.2.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\slf4j-log4j12\1.6.2\slf4j-log4j12-1.6.2.jar;C:\Users\Sohan.Dey\.m2\repository\log4j\log4j\1.2.16\log4j-1.2.16.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\logging\log4j\log4j-api\2.11.1\log4j-api-2.11.1.jar;C:\Users\Sohan.Dey\.m2\repository\net\lingala\zip4j\zip4j\1.3.2\zip4j-1.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\httpcomponents\httpclient\4.5.3\httpclient-4.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\httpcomponents\httpcore\4.4.6\httpcore-4.4.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-client\2.8.1\hadoop-client-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-common\2.8.1\hadoop-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\commons-cli\commons-cli\1.2\commons-cli-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\xmlenc\xmlenc\0.52\xmlenc-0.52.jar;C:\Users\Sohan.Dey\.m2\repository\commons-net\commons-net\3.1\commons-net-3.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\mortbay\jetty\jetty-sslengine\6.1.26\jetty-sslengine-6.1.26.jar;C:\Users\Sohan.Dey\.m2\repository\javax\servlet\jsp\jsp-api\2.1\jsp-api-2.1.jar;C:\Users\Sohan.Dey\.m2\repository\commons-configuration\commons-configuration\1.6\commons-configuration-1.6.jar;C:\Users\Sohan.Dey\.m2\repository\commons-digester\commons-digester\1.8\commons-digester-1.8.jar;C:\Users\Sohan.Dey\.m2\repository\commons-beanutils\commons-beanutils-core\1.8.0\commons-beanutils-core-1.8.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-core-asl\1.9.13\jackson-core-asl-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-mapper-asl\1.9.13\jackson-mapper-asl-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\avro\avro\1.7.4\avro-1.7.4.jar;C:\Users\Sohan.Dey\.m2\repository\com\thoughtworks\paranamer\paranamer\2.3\paranamer-2.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\xerial\snappy\snappy-java\1.0.4.1\snappy-java-1.0.4.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\protobuf\protobuf-java\2.5.0\protobuf-java-2.5.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-auth\2.8.1\hadoop-auth-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\server\apacheds-kerberos-codec\2.0.0-M15\apacheds-kerberos-codec-2.0.0-M15.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\server\apacheds-i18n\2.0.0-M15\apacheds-i18n-2.0.0-M15.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\api\api-asn1-api\1.0.0-M20\api-asn1-api-1.0.0-M20.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\api\api-util\1.0.0-M20\api-util-1.0.0-M20.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\curator\curator-framework\2.7.1\curator-framework-2.7.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\curator\curator-client\2.7.1\curator-client-2.7.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\curator\curator-recipes\2.7.1\curator-recipes-2.7.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\code\findbugs\jsr305\3.0.0\jsr305-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\htrace\htrace-core4\4.0.1-incubating\htrace-core4-4.0.1-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\zookeeper\zookeeper\3.4.6\zookeeper-3.4.6.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty\3.7.0.Final\netty-3.7.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-hdfs\2.8.1\hadoop-hdfs-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-hdfs-client\2.8.1\hadoop-hdfs-client-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\squareup\okhttp\okhttp\2.4.0\okhttp-2.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\squareup\okio\okio\1.4.0\okio-1.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-app\2.8.1\hadoop-mapreduce-client-app-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-common\2.8.1\hadoop-mapreduce-client-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-client\2.8.1\hadoop-yarn-client-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-server-common\2.8.1\hadoop-yarn-server-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-shuffle\2.8.1\hadoop-mapreduce-client-shuffle-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\fusesource\leveldbjni\leveldbjni-all\1.8\leveldbjni-all-1.8.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-api\2.8.1\hadoop-yarn-api-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-core\2.8.1\hadoop-mapreduce-client-core-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-common\2.8.1\hadoop-yarn-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\javax\servlet\servlet-api\2.5\servlet-api-2.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\mortbay\jetty\jetty-util\6.1.26\jetty-util-6.1.26.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\jersey\jersey-core\1.9\jersey-core-1.9.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\jersey\jersey-client\1.9\jersey-client-1.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-jaxrs\1.9.13\jackson-jaxrs-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-xc\1.9.13\jackson-xc-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-jobclient\2.8.1\hadoop-mapreduce-client-jobclient-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-annotations\2.8.1\hadoop-annotations-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\bouncycastle\bcprov-jdk16\1.45\bcprov-jdk16-1.45.jar;C:\Users\Sohan.Dey\.m2\repository\commons-codec\commons-codec\1.11\commons-codec-1.11.jar;C:\Users\Sohan.Dey\.m2\repository\commons-io\commons-io\2.6\commons-io-2.6.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\zxing\core\3.3.3\core-3.3.3.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\zxing\javase\2.0\javase-2.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\hamcrest\hamcrest-all\1.3\hamcrest-all-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\velocity\velocity\1.7\velocity-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\commons-lang\commons-lang\2.4\commons-lang-2.4.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\html2pdf\2.0.0\html2pdf-2.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\forms\7.1.0\forms-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\kernel\7.1.0\kernel-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\io\7.1.0\io-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\layout\7.1.0\layout-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\itextpdf\5.5.13\itextpdf-5.5.13.jar;C:\Users\Sohan.Dey\.m2\repository\javax\mail\javax.mail-api\1.6.2\javax.mail-api-1.6.2.jar;D:\Mosip_Automation_Test\Docker_Test\MOSIP-19726\mosip-functional-tests\authentication-demo-service\target\classes;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.0.2.RELEASE\spring-boot-starter-web-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-json\2.0.2.RELEASE\spring-boot-starter-json-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.5\jackson-datatype-jdk8-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.5\jackson-module-parameter-names-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\2.0.2.RELEASE\spring-boot-starter-tomcat-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\8.5.31\tomcat-embed-el-8.5.31.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\8.5.31\tomcat-embed-websocket-8.5.31.jar;C:\Users\Sohan.Dey\.m2\repository\org\hibernate\validator\hibernate-validator\6.0.9.Final\hibernate-validator-6.0.9.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-web\5.0.6.RELEASE\spring-web-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-webmvc\5.0.6.RELEASE\spring-webmvc-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-expression\5.0.6.RELEASE\spring-expression-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-test\2.0.2.RELEASE\spring-boot-starter-test-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-test\2.0.2.RELEASE\spring-boot-test-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-test-autoconfigure\2.0.2.RELEASE\spring-boot-test-autoconfigure-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\assertj\assertj-core\3.9.1\assertj-core-3.9.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\skyscreamer\jsonassert\1.5.0\jsonassert-1.5.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-core\5.0.6.RELEASE\spring-core-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-jcl\5.0.6.RELEASE\spring-jcl-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-test\5.0.6.RELEASE\spring-test-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\xmlunit\xmlunit-core\2.5.1\xmlunit-core-2.5.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-swagger-ui\2.9.2\springfox-swagger-ui-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-spring-web\2.9.2\springfox-spring-web-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-swagger2\2.9.2\springfox-swagger2-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-spi\2.9.2\springfox-spi-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-core\2.9.2\springfox-core-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-schema\2.9.2\springfox-schema-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-swagger-common\2.9.2\springfox-swagger-common-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\plugin\spring-plugin-core\1.2.0.RELEASE\spring-plugin-core-1.2.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\plugin\spring-plugin-metadata\1.2.0.RELEASE\spring-plugin-metadata-1.2.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\mapstruct\mapstruct\1.2.0.Final\mapstruct-1.2.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\javax\ws\rs\javax.ws.rs-api\2.0\javax.ws.rs-api-2.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\authentication\authentication-core\1.2.0.1-SNAPSHOT\authentication-core-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-cache\2.0.2.RELEASE\spring-boot-starter-cache-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-context-support\5.0.6.RELEASE\spring-context-support-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\machinezoo\sourceafis\sourceafis\3.4.0\sourceafis-3.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\net\sf\trove4j\trove4j\3.0.3\trove4j-3.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\com\machinezoo\noexception\noexception\1.3.2\noexception-1.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\mhshams\jnbis\2.0.1\jnbis-2.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\sanselan\sanselan\0.97-incubator\sanselan-0.97-incubator.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\idrepository\id-repository-core\1.2.0\id-repository-core-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-biosdk-provider\1.2.0\kernel-biosdk-provider-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-biometrics-api\1.2.0\kernel-biometrics-api-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-demographics-api\1.2.0\kernel-demographics-api-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-webflux\2.0.2.RELEASE\spring-boot-starter-webflux-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-reactor-netty\2.0.2.RELEASE\spring-boot-starter-reactor-netty-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\projectreactor\ipc\reactor-netty\0.7.7.RELEASE\reactor-netty-0.7.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-handler-proxy\4.1.24.Final\netty-handler-proxy-4.1.24.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-codec-socks\4.1.24.Final\netty-codec-socks-4.1.24.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-transport-native-epoll\4.1.24.Final\netty-transport-native-epoll-4.1.24.Final-linux-x86_64.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-transport-native-unix-common\4.1.24.Final\netty-transport-native-unix-common-4.1.24.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-webflux\5.0.6.RELEASE\spring-webflux-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\projectreactor\reactor-core\3.1.7.RELEASE\reactor-core-3.1.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\synchronoss\cloud\nio-multipart-parser\1.1.0\nio-multipart-parser-1.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\synchronoss\cloud\nio-stream-storage\1.1.3\nio-stream-storage-1.1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\springdoc\springdoc-openapi-ui\1.5.10\springdoc-openapi-ui-1.5.10.jar;C:\Users\Sohan.Dey\.m2\repository\org\springdoc\springdoc-openapi-webmvc-core\1.5.10\springdoc-openapi-webmvc-core-1.5.10.jar;C:\Users\Sohan.Dey\.m2\repository\org\springdoc\springdoc-openapi-common\1.5.10\springdoc-openapi-common-1.5.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-models\2.1.10\swagger-models-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-annotations\2.1.10\swagger-annotations-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-integration\2.1.10\swagger-integration-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-core\2.1.10\swagger-core-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\jakarta\xml\bind\jakarta.xml.bind-api\2.3.2\jakarta.xml.bind-api-2.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\jakarta\activation\jakarta.activation-api\1.2.1\jakarta.activation-api-1.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-yaml\2.12.1\jackson-dataformat-yaml-2.12.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\github\classgraph\classgraph\4.8.69\classgraph-4.8.69.jar;C:\Users\Sohan.Dey\.m2\repository\org\webjars\swagger-ui\3.51.1\swagger-ui-3.51.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\webjars\webjars-locator-core\0.45\webjars-locator-core-0.45.jar;C:\Users\Sohan.Dey\.m2\repository\commons-fileupload\commons-fileupload\1.4\commons-fileupload-1.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\mockito\mockito-core\2.23.4\mockito-core-2.23.4.jar;C:\Users\Sohan.Dey\.m2\repository\net\bytebuddy\byte-buddy-agent\1.9.3\byte-buddy-agent-1.9.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\objenesis\objenesis\2.6\objenesis-2.6.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-websubclient-api\1.2.0.1-SNAPSHOT\kernel-websubclient-api-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-aspects\5.0.6.RELEASE\spring-aspects-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\aspectj\aspectjweaver\1.8.13\aspectjweaver-1.8.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\owasp\encoder\encoder\1.2.3\encoder-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\tensorflow\tensorflow\1.12.0\tensorflow-1.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\tensorflow\libtensorflow\1.12.0\libtensorflow-1.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\tensorflow\libtensorflow_jni\1.12.0\libtensorflow_jni-1.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-templatemanager-velocity\1.2.0.1-SNAPSHOT\kernel-templatemanager-velocity-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\javax\servlet\javax.servlet-api\4.0.1\javax.servlet-api-4.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-starter-config\2.0.0.RELEASE\spring-cloud-starter-config-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-starter\2.0.0.RELEASE\spring-cloud-starter-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-context\2.0.0.RELEASE\spring-cloud-context-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-crypto\5.0.6.RELEASE\spring-security-crypto-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-commons\2.0.0.RELEASE\spring-cloud-commons-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-rsa\1.0.5.RELEASE\spring-security-rsa-1.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-config-client\2.0.0.RELEASE\spring-cloud-config-client-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\jai-imageio\jai-imageio-jpeg2000\1.3.0\jai-imageio-jpeg2000-1.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\jai-imageio\jai-imageio-core\1.3.0\jai-imageio-core-1.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-keymanager-service\1.2.0.1-SNAPSHOT\kernel-keymanager-service-1.2.0.1-SNAPSHOT-lib.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-test\5.0.5.RELEASE\spring-security-test-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-core\5.0.5.RELEASE\spring-security-core-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-pdfgenerator-itext\1.2.0.1-SNAPSHOT\kernel-pdfgenerator-itext-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\barcodes\7.1.0\barcodes-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\font-asian\7.1.0\font-asian-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\hyph\7.1.0\hyph-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\pdfa\7.1.0\pdfa-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\sign\7.1.0\sign-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\tool\xmlworker\5.5.13\xmlworker-5.5.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\bouncycastle\bcpkix-jdk15on\1.66\bcpkix-jdk15on-1.66.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-data-jpa\2.0.2.RELEASE\spring-boot-starter-data-jpa-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\2.0.2.RELEASE\spring-boot-starter-jdbc-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\zaxxer\HikariCP\2.7.9\HikariCP-2.7.9.jar;C:\Users\Sohan.Dey\.m2\repository\com\h2database\h2\1.4.197\h2-1.4.197.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\microsoft\TSS.Java\0.3.0\TSS.Java-0.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\net\java\dev\jna\jna\4.4.0\jna-4.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\cache2k\cache2k-api\2.4.1.Final\cache2k-api-2.4.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\cache2k\cache2k-core\2.4.1.Final\cache2k-core-2.4.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\nimbusds\nimbus-jose-jwt\9.14\nimbus-jose-jwt-9.14.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-core\1.2.0.1-SNAPSHOT\kernel-core-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter\2.0.2.RELEASE\spring-boot-starter-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot\2.0.2.RELEASE\spring-boot-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.0.2.RELEASE\spring-boot-autoconfigure-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.0.2.RELEASE\spring-boot-starter-logging-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.10.0\log4j-to-slf4j-2.10.0.jar;C:\Users\Sohan.Dey\.m2\repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\data\spring-data-jpa\2.0.7.RELEASE\spring-data-jpa-2.0.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\data\spring-data-commons\2.0.7.RELEASE\spring-data-commons-2.0.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-orm\5.0.6.RELEASE\spring-orm-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-jdbc\5.0.6.RELEASE\spring-jdbc-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-context\5.0.6.RELEASE\spring-context-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-aop\5.0.6.RELEASE\spring-aop-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-tx\5.0.6.RELEASE\spring-tx-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-beans\5.0.6.RELEASE\spring-beans-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\aspectj\aspectjrt\1.8.12\aspectjrt-1.8.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-security\2.0.2.RELEASE\spring-boot-starter-security-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-config\5.0.5.RELEASE\spring-security-config-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-web\5.0.5.RELEASE\spring-security-web-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\javax\transaction\javax.transaction-api\1.3\javax.transaction-api-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-math3\3.6.1\commons-math3-3.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\bouncycastle\bcprov-jdk15on\1.66\bcprov-jdk15on-1.66.jar;C:\Users\Sohan.Dey\.m2\repository\javax\interceptor\javax.interceptor-api\1.2\javax.interceptor-api-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\code\findbugs\annotations\3.0.1\annotations-3.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\net\jcip\jcip-annotations\1.0\jcip-annotations-1.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\swagger-models\1.5.21\swagger-models-1.5.21.jar;C:\Users\Sohan.Dey\.m2\repository\com\auth0\java-jwt\3.8.1\java-jwt-3.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\micrometer\micrometer-core\1.4.2\micrometer-core-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\hdrhistogram\HdrHistogram\2.1.12\HdrHistogram-2.1.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\latencyutils\LatencyUtils\2.0.3\LatencyUtils-2.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\micrometer\micrometer-registry-prometheus\1.4.2\micrometer-registry-prometheus-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\prometheus\simpleclient_common\0.8.1\simpleclient_common-0.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\prometheus\simpleclient\0.8.1\simpleclient-0.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\jul-to-slf4j\1.7.25\jul-to-slf4j-1.7.25.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\jcl-over-slf4j\1.7.25\jcl-over-slf4j-1.7.25.jar;C:\Users\Sohan.Dey\.m2\repository\javax\activation\activation\1.1\activation-1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-starter-sleuth\2.0.4.RELEASE\spring-cloud-starter-sleuth-2.0.4.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-aop\2.0.9.RELEASE\spring-boot-starter-aop-2.0.9.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-sleuth-core\2.0.4.RELEASE\spring-cloud-sleuth-core-2.0.4.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave\5.6.1\brave-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\zipkin2\zipkin\2.12.0\zipkin-2.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\reporter2\zipkin-reporter\2.7.14\zipkin-reporter-2.7.14.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-context-log4j2\5.6.1\brave-context-log4j2-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-spring-web\5.6.1\brave-instrumentation-spring-web-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-http\5.6.1\brave-instrumentation-http-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-spring-rabbit\5.6.1\brave-instrumentation-spring-rabbit-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-kafka-clients\5.6.1\brave-instrumentation-kafka-clients-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-httpclient\5.6.1\brave-instrumentation-httpclient-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-httpasyncclient\5.6.1\brave-instrumentation-httpasyncclient-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-spring-webmvc\5.6.1\brave-instrumentation-spring-webmvc-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-servlet\5.6.1\brave-instrumentation-servlet-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-actuator\2.0.2.RELEASE\spring-boot-starter-actuator-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-actuator-autoconfigure\2.0.2.RELEASE\spring-boot-actuator-autoconfigure-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-actuator\2.0.2.RELEASE\spring-boot-actuator-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\8.5.55\tomcat-embed-core-8.5.55.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\tomcat-annotations-api\8.5.55\tomcat-annotations-api-8.5.55.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\retry\spring-retry\1.2.1.RELEASE\spring-retry-1.2.1.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\module\jackson-module-afterburner\2.12.0\jackson-module-afterburner-2.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-registration-packet-manager\1.1.5.3\kernel-registration-packet-manager-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-keygenerator-bouncycastle\1.1.5.3\kernel-keygenerator-bouncycastle-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-cbeffutil-api\1.1.5.3\kernel-cbeffutil-api-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-logger-logback\1.1.5.3\kernel-logger-logback-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\net\logstash\logback\logstash-logback-encoder\6.4\logstash-logback-encoder-6.4.jar;C:\Users\Sohan.Dey\.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\ch\qos\logback\logback-access\1.2.3\logback-access-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-crypto-jce\1.1.5.3\kernel-crypto-jce-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\bitbucket\b_c\jose4j\0.6.5\jose4j-0.6.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\wink\wink-json4j-provider\1.1.2-incubating\wink-json4j-provider-1.1.2-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\wink\wink-common\1.1.2-incubating\wink-common-1.1.2-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\xml\bind\jaxb-impl\2.2.1.1\jaxb-impl-2.2.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\geronimo\specs\geronimo-annotation_1.1_spec\1.0\geronimo-annotation_1.1_spec-1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\wink\wink-json4j\1.1.2-incubating\wink-json4j-1.1.2-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\javax\ws\rs\jsr311-api\1.1.1\jsr311-api-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\checkerframework\checker-qual\2.9.0\checker-qual-2.9.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\activemq\activemq-broker\5.15.9\activemq-broker-5.15.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\activemq\activemq-client\5.15.9\activemq-client-5.15.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\geronimo\specs\geronimo-jms_1.1_spec\1.1.1\geronimo-jms_1.1_spec-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\fusesource\hawtbuf\hawtbuf\1.11\hawtbuf-1.11.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\geronimo\specs\geronimo-j2ee-management_1.1_spec\1.0.1\geronimo-j2ee-management_1.1_spec-1.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\activemq\activemq-openwire-legacy\5.15.9\activemq-openwire-legacy-5.15.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\projectlombok\lombok\1.18.8\lombok-1.18.8.jar \ No newline at end of file diff --git a/apitest/.temp-Functional Test-classpath-arg-1659589592502.txt b/apitest/.temp-Functional Test-classpath-arg-1659589592502.txt new file mode 100644 index 000000000..bb81464f5 --- /dev/null +++ b/apitest/.temp-Functional Test-classpath-arg-1659589592502.txt @@ -0,0 +1 @@ +-classpath D:\Mosip_Automation_Test\Docker_Test\MOSIP-19726\mosip-functional-tests\automationtests\target\test-classes;D:\Mosip_Automation_Test\Docker_Test\MOSIP-19726\mosip-functional-tests\automationtests\target\classes;C:\Users\Sohan.Dey\.m2\repository\com\opencsv\opencsv\4.1\opencsv-4.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-lang3\3.6\commons-lang3-3.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-text\1.1\commons-text-1.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\ibm\icu\icu4j\63.1\icu4j-63.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\keycloak\keycloak-admin-client\17.0.1\keycloak-admin-client-17.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\keycloak\keycloak-core\17.0.1\keycloak-core-17.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\keycloak\keycloak-common\17.0.1\keycloak-common-17.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-client\3.13.2.Final\resteasy-client-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\ws\rs\jboss-jaxrs-api_2.1_spec\2.0.1.Final\jboss-jaxrs-api_2.1_spec-2.0.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-jaxrs\3.13.2.Final\resteasy-jaxrs-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\reactivestreams\reactive-streams\1.0.3\reactive-streams-1.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\jakarta\validation\jakarta.validation-api\2.0.2\jakarta.validation-api-2.0.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\annotation\jboss-annotations-api_1.3_spec\2.0.1.Final\jboss-annotations-api_1.3_spec-2.0.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\activation\jakarta.activation\1.2.1\jakarta.activation-1.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\stephenc\jcip\jcip-annotations\1.0-1\jcip-annotations-1.0-1.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-multipart-provider\3.13.2.Final\resteasy-multipart-provider-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\mail\jakarta.mail\1.6.5\jakarta.mail-1.6.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\james\apache-mime4j\0.6\apache-mime4j-0.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-jackson2-provider\3.13.2.Final\resteasy-jackson2-provider-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\jaxrs\jackson-jaxrs-json-provider\2.10.5\jackson-jaxrs-json-provider-2.10.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\jaxrs\jackson-jaxrs-base\2.10.5\jackson-jaxrs-base-2.10.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\json-patch\1.9\json-patch-1.9.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\jackson-coreutils\1.6\jackson-coreutils-1.6.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\msg-simple\1.1\msg-simple-1.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\btf\1.2\btf-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-jaxb-provider\3.13.2.Final\resteasy-jaxb-provider-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\xml\bind\jboss-jaxb-api_2.3_spec\2.0.0.Final\jboss-jaxb-api_2.3_spec-2.0.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\javassist\javassist\3.25.0-GA\javassist-3.25.0-GA.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\jknack\handlebars\3.0.0\handlebars-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\antlr\antlr4-runtime\4.5.1-1\antlr4-runtime-4.5.1-1.jar;C:\Users\Sohan.Dey\.m2\repository\org\mozilla\rhino\1.7R4\rhino-1.7R4.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\slf4j-api\1.6.4\slf4j-api-1.6.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-collections4\4.3\commons-collections4-4.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\jsonwebtoken\jjwt\0.6.0\jjwt-0.6.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\flipkart\zjsonpatch\zjsonpatch\0.4.7\zjsonpatch-0.4.7.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk\1.11.368\aws-java-sdk-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dlm\1.11.368\aws-java-sdk-dlm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\jmespath-java\1.11.368\jmespath-java-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-macie\1.11.368\aws-java-sdk-macie-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-eks\1.11.368\aws-java-sdk-eks-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediatailor\1.11.368\aws-java-sdk-mediatailor-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-neptune\1.11.368\aws-java-sdk-neptune-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-pi\1.11.368\aws-java-sdk-pi-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iot1clickprojects\1.11.368\aws-java-sdk-iot1clickprojects-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iot1clickdevices\1.11.368\aws-java-sdk-iot1clickdevices-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iotanalytics\1.11.368\aws-java-sdk-iotanalytics-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-acmpca\1.11.368\aws-java-sdk-acmpca-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-secretsmanager\1.11.368\aws-java-sdk-secretsmanager-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-fms\1.11.368\aws-java-sdk-fms-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-connect\1.11.368\aws-java-sdk-connect-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-transcribe\1.11.368\aws-java-sdk-transcribe-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-autoscalingplans\1.11.368\aws-java-sdk-autoscalingplans-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-workmail\1.11.368\aws-java-sdk-workmail-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-servicediscovery\1.11.368\aws-java-sdk-servicediscovery-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloud9\1.11.368\aws-java-sdk-cloud9-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-serverlessapplicationrepository\1.11.368\aws-java-sdk-serverlessapplicationrepository-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-alexaforbusiness\1.11.368\aws-java-sdk-alexaforbusiness-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-resourcegroups\1.11.368\aws-java-sdk-resourcegroups-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-comprehend\1.11.368\aws-java-sdk-comprehend-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-translate\1.11.368\aws-java-sdk-translate-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sagemaker\1.11.368\aws-java-sdk-sagemaker-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iotjobsdataplane\1.11.368\aws-java-sdk-iotjobsdataplane-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sagemakerruntime\1.11.368\aws-java-sdk-sagemakerruntime-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-kinesisvideo\1.11.368\aws-java-sdk-kinesisvideo-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-codec-http\4.1.17.Final\netty-codec-http-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-codec\4.1.17.Final\netty-codec-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-handler\4.1.17.Final\netty-handler-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-buffer\4.1.17.Final\netty-buffer-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-common\4.1.17.Final\netty-common-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-transport\4.1.17.Final\netty-transport-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-resolver\4.1.17.Final\netty-resolver-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-appsync\1.11.368\aws-java-sdk-appsync-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-guardduty\1.11.368\aws-java-sdk-guardduty-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mq\1.11.368\aws-java-sdk-mq-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediaconvert\1.11.368\aws-java-sdk-mediaconvert-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediastore\1.11.368\aws-java-sdk-mediastore-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediastoredata\1.11.368\aws-java-sdk-mediastoredata-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-medialive\1.11.368\aws-java-sdk-medialive-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediapackage\1.11.368\aws-java-sdk-mediapackage-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-costexplorer\1.11.368\aws-java-sdk-costexplorer-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-pricing\1.11.368\aws-java-sdk-pricing-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mobile\1.11.368\aws-java-sdk-mobile-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudhsmv2\1.11.368\aws-java-sdk-cloudhsmv2-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-glue\1.11.368\aws-java-sdk-glue-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-migrationhub\1.11.368\aws-java-sdk-migrationhub-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dax\1.11.368\aws-java-sdk-dax-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-greengrass\1.11.368\aws-java-sdk-greengrass-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-athena\1.11.368\aws-java-sdk-athena-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-marketplaceentitlement\1.11.368\aws-java-sdk-marketplaceentitlement-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codestar\1.11.368\aws-java-sdk-codestar-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lexmodelbuilding\1.11.368\aws-java-sdk-lexmodelbuilding-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-resourcegroupstaggingapi\1.11.368\aws-java-sdk-resourcegroupstaggingapi-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-pinpoint\1.11.368\aws-java-sdk-pinpoint-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-xray\1.11.368\aws-java-sdk-xray-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-opsworkscm\1.11.368\aws-java-sdk-opsworkscm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-support\1.11.368\aws-java-sdk-support-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-simpledb\1.11.368\aws-java-sdk-simpledb-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-servicecatalog\1.11.368\aws-java-sdk-servicecatalog-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-servermigration\1.11.368\aws-java-sdk-servermigration-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-simpleworkflow\1.11.368\aws-java-sdk-simpleworkflow-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-storagegateway\1.11.368\aws-java-sdk-storagegateway-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-route53\1.11.368\aws-java-sdk-route53-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-s3\1.11.368\aws-java-sdk-s3-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-importexport\1.11.368\aws-java-sdk-importexport-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sts\1.11.368\aws-java-sdk-sts-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sqs\1.11.368\aws-java-sdk-sqs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-rds\1.11.368\aws-java-sdk-rds-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-redshift\1.11.368\aws-java-sdk-redshift-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticbeanstalk\1.11.368\aws-java-sdk-elasticbeanstalk-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-glacier\1.11.368\aws-java-sdk-glacier-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iam\1.11.368\aws-java-sdk-iam-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-datapipeline\1.11.368\aws-java-sdk-datapipeline-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticloadbalancing\1.11.368\aws-java-sdk-elasticloadbalancing-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticloadbalancingv2\1.11.368\aws-java-sdk-elasticloadbalancingv2-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-emr\1.11.368\aws-java-sdk-emr-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticache\1.11.368\aws-java-sdk-elasticache-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elastictranscoder\1.11.368\aws-java-sdk-elastictranscoder-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ec2\1.11.368\aws-java-sdk-ec2-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dynamodb\1.11.368\aws-java-sdk-dynamodb-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sns\1.11.368\aws-java-sdk-sns-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-budgets\1.11.368\aws-java-sdk-budgets-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudtrail\1.11.368\aws-java-sdk-cloudtrail-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudwatch\1.11.368\aws-java-sdk-cloudwatch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-logs\1.11.368\aws-java-sdk-logs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-events\1.11.368\aws-java-sdk-events-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cognitoidentity\1.11.368\aws-java-sdk-cognitoidentity-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cognitosync\1.11.368\aws-java-sdk-cognitosync-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-directconnect\1.11.368\aws-java-sdk-directconnect-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudformation\1.11.368\aws-java-sdk-cloudformation-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudfront\1.11.368\aws-java-sdk-cloudfront-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-clouddirectory\1.11.368\aws-java-sdk-clouddirectory-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-kinesis\1.11.368\aws-java-sdk-kinesis-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-opsworks\1.11.368\aws-java-sdk-opsworks-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ses\1.11.368\aws-java-sdk-ses-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-autoscaling\1.11.368\aws-java-sdk-autoscaling-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudsearch\1.11.368\aws-java-sdk-cloudsearch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudwatchmetrics\1.11.368\aws-java-sdk-cloudwatchmetrics-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codedeploy\1.11.368\aws-java-sdk-codedeploy-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codepipeline\1.11.368\aws-java-sdk-codepipeline-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-kms\1.11.368\aws-java-sdk-kms-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-config\1.11.368\aws-java-sdk-config-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lambda\1.11.368\aws-java-sdk-lambda-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ecs\1.11.368\aws-java-sdk-ecs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ecr\1.11.368\aws-java-sdk-ecr-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudhsm\1.11.368\aws-java-sdk-cloudhsm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ssm\1.11.368\aws-java-sdk-ssm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-workspaces\1.11.368\aws-java-sdk-workspaces-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-machinelearning\1.11.368\aws-java-sdk-machinelearning-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-directory\1.11.368\aws-java-sdk-directory-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-efs\1.11.368\aws-java-sdk-efs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codecommit\1.11.368\aws-java-sdk-codecommit-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-devicefarm\1.11.368\aws-java-sdk-devicefarm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticsearch\1.11.368\aws-java-sdk-elasticsearch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-waf\1.11.368\aws-java-sdk-waf-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-marketplacecommerceanalytics\1.11.368\aws-java-sdk-marketplacecommerceanalytics-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-inspector\1.11.368\aws-java-sdk-inspector-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iot\1.11.368\aws-java-sdk-iot-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-api-gateway\1.11.368\aws-java-sdk-api-gateway-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-acm\1.11.368\aws-java-sdk-acm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-gamelift\1.11.368\aws-java-sdk-gamelift-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dms\1.11.368\aws-java-sdk-dms-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-marketplacemeteringservice\1.11.368\aws-java-sdk-marketplacemeteringservice-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cognitoidp\1.11.368\aws-java-sdk-cognitoidp-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-discovery\1.11.368\aws-java-sdk-discovery-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-applicationautoscaling\1.11.368\aws-java-sdk-applicationautoscaling-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-snowball\1.11.368\aws-java-sdk-snowball-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-rekognition\1.11.368\aws-java-sdk-rekognition-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-polly\1.11.368\aws-java-sdk-polly-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lightsail\1.11.368\aws-java-sdk-lightsail-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-stepfunctions\1.11.368\aws-java-sdk-stepfunctions-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-health\1.11.368\aws-java-sdk-health-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-costandusagereport\1.11.368\aws-java-sdk-costandusagereport-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codebuild\1.11.368\aws-java-sdk-codebuild-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-appstream\1.11.368\aws-java-sdk-appstream-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-shield\1.11.368\aws-java-sdk-shield-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-batch\1.11.368\aws-java-sdk-batch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lex\1.11.368\aws-java-sdk-lex-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mechanicalturkrequester\1.11.368\aws-java-sdk-mechanicalturkrequester-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-organizations\1.11.368\aws-java-sdk-organizations-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-workdocs\1.11.368\aws-java-sdk-workdocs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-core\1.11.368\aws-java-sdk-core-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\software\amazon\ion\ion-java\1.0.2\ion-java-1.0.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-cbor\2.6.7\jackson-dataformat-cbor-2.6.7.jar;C:\Users\Sohan.Dey\.m2\repository\joda-time\joda-time\2.8.1\joda-time-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-models\1.11.368\aws-java-sdk-models-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-swf-libraries\1.11.22\aws-java-sdk-swf-libraries-1.11.22.jar;C:\Users\Sohan.Dey\.m2\repository\com\aventstack\extentreports\3.0.0\extentreports-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\freemarker\freemarker\2.3.23\freemarker-2.3.23.jar;C:\Users\Sohan.Dey\.m2\repository\org\mongodb\mongodb-driver\3.3.0\mongodb-driver-3.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\mongodb\bson\3.3.0\bson-3.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\mongodb\mongodb-driver-core\3.3.0\mongodb-driver-core-3.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\httpcomponents\httpmime\4.5.2\httpmime-4.5.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\relevantcodes\extentreports\2.41.2\extentreports-2.41.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\jsoup\jsoup\1.8.3\jsoup-1.8.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\xerial\sqlite-jdbc\3.8.11.1\sqlite-jdbc-3.8.11.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\jayway\jsonpath\json-path\2.4.0\json-path-2.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\net\minidev\json-smart\2.3\json-smart-2.3.jar;C:\Users\Sohan.Dey\.m2\repository\net\minidev\accessors-smart\1.2\accessors-smart-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\ow2\asm\asm\5.0.4\asm-5.0.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-model\3.3.9\maven-model-3.3.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-utils\3.0.22\plexus-utils-3.0.22.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\rest-assured\3.0.7\rest-assured-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\groovy\groovy\2.4.12\groovy-2.4.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\groovy\groovy-xml\2.4.12\groovy-xml-2.4.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\hamcrest\hamcrest-library\1.3\hamcrest-library-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\ccil\cowan\tagsoup\tagsoup\1.2.1\tagsoup-1.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\json-path\3.0.7\json-path-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\groovy\groovy-json\2.4.12\groovy-json-2.4.12.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\rest-assured-common\3.0.7\rest-assured-common-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\xml-path\3.0.7\xml-path-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\testng\testng\6.11\testng-6.11.jar;C:\Users\Sohan.Dey\.m2\repository\com\beust\jcommander\1.64\jcommander-1.64.jar;C:\Users\Sohan.Dey\.m2\repository\org\yaml\snakeyaml\1.17\snakeyaml-1.17.jar;C:\Users\Sohan.Dey\.m2\repository\org\zeroturnaround\zt-zip\1.13\zt-zip-1.13.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.10.1\jackson-core-2.10.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.9.5\jackson-annotations-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.10.5\jackson-databind-2.10.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-xml\2.9.5\jackson-dataformat-xml-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\module\jackson-module-jaxb-annotations\2.9.5\jackson-module-jaxb-annotations-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\woodstox\stax2-api\3.1.4\stax2-api-3.1.4.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\woodstox\woodstox-core\5.0.3\woodstox-core-5.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\json\json\20180130\json-20180130.jar;C:\Users\Sohan.Dey\.m2\repository\com\googlecode\json-simple\json-simple\1.1.1\json-simple-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\junit\junit\4.10\junit-4.10.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\code\gson\gson\2.8.4\gson-2.8.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\plugins\maven-assembly-plugin\3.1.0\maven-assembly-plugin-3.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-plugin-api\3.0\maven-plugin-api-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\sisu\sisu-inject-plexus\1.4.2\sisu-inject-plexus-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\sisu\sisu-inject-bean\1.4.2\sisu-inject-bean-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\sisu\sisu-guice\2.1.7\sisu-guice-2.1.7-noaop.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-core\3.0\maven-core-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-settings\3.0\maven-settings-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-settings-builder\3.0\maven-settings-builder-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-repository-metadata\3.0\maven-repository-metadata-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-model-builder\3.0\maven-model-builder-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-aether-provider\3.0\maven-aether-provider-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-impl\1.7\aether-impl-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-spi\1.7\aether-spi-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-api\1.7\aether-api-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-util\1.7\aether-util-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-classworlds\2.2.3\plexus-classworlds-2.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-component-annotations\1.5.5\plexus-component-annotations-1.5.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\plexus\plexus-sec-dispatcher\1.3\plexus-sec-dispatcher-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\plexus\plexus-cipher\1.4\plexus-cipher-1.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-artifact\3.0\maven-artifact-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-common-artifact-filters\3.0.1\maven-common-artifact-filters-3.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-shared-utils\3.1.0\maven-shared-utils-3.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-artifact-transfer\0.9.0\maven-artifact-transfer-0.9.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-interpolation\1.24\plexus-interpolation-1.24.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-archiver\3.5\plexus-archiver-3.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-compress\1.14\commons-compress-1.14.jar;C:\Users\Sohan.Dey\.m2\repository\org\iq80\snappy\snappy\0.4\snappy-0.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\tukaani\xz\1.6\xz-1.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\file-management\3.0.0\file-management-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-shared-io\3.0.0\maven-shared-io-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-compat\3.0\maven-compat-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\wagon\wagon-provider-api\2.10\wagon-provider-api-2.10.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-filtering\3.1.1\maven-filtering-3.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\plexus\plexus-build-api\0.0.7\plexus-build-api-0.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-io\3.0.0\plexus-io-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-archiver\3.2.0\maven-archiver-3.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\guava\guava\19.0\guava-19.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\hibernate\hibernate-core\5.4.2.Final\hibernate-core-5.4.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\javax\persistence\javax.persistence-api\2.2\javax.persistence-api-2.2.jar;C:\Users\Sohan.Dey\.m2\repository\net\bytebuddy\byte-buddy\1.9.10\byte-buddy-1.9.10.jar;C:\Users\Sohan.Dey\.m2\repository\antlr\antlr\2.7.7\antlr-2.7.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\transaction\jboss-transaction-api_1.2_spec\1.1.1.Final\jboss-transaction-api_1.2_spec-1.1.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\jandex\2.0.5.Final\jandex-2.0.5.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\classmate\1.3.4\classmate-1.3.4.jar;C:\Users\Sohan.Dey\.m2\repository\javax\activation\javax.activation-api\1.2.0\javax.activation-api-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\dom4j\dom4j\2.1.1\dom4j-2.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\hibernate\common\hibernate-commons-annotations\5.1.0.Final\hibernate-commons-annotations-5.1.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\javax\xml\bind\jaxb-api\2.3.1\jaxb-api-2.3.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\glassfish\jaxb\jaxb-runtime\2.3.1\jaxb-runtime-2.3.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\glassfish\jaxb\txw2\2.3.1\txw2-2.3.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\istack\istack-commons-runtime\3.0.7\istack-commons-runtime-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\jvnet\staxex\stax-ex\1.8\stax-ex-1.8.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\xml\fastinfoset\FastInfoset\1.2.15\FastInfoset-1.2.15.jar;C:\Users\Sohan.Dey\.m2\repository\commons-beanutils\commons-beanutils\1.9.2\commons-beanutils-1.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\commons-logging\commons-logging\1.1.1\commons-logging-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\commons-collections\commons-collections\3.2.1\commons-collections-3.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\swagger-annotations\1.5.20\swagger-annotations-1.5.20.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.5\jackson-datatype-jsr310-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\postgresql\postgresql\42.2.2\postgresql-42.2.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\slf4j-log4j12\1.6.2\slf4j-log4j12-1.6.2.jar;C:\Users\Sohan.Dey\.m2\repository\log4j\log4j\1.2.16\log4j-1.2.16.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\logging\log4j\log4j-api\2.11.1\log4j-api-2.11.1.jar;C:\Users\Sohan.Dey\.m2\repository\net\lingala\zip4j\zip4j\1.3.2\zip4j-1.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\httpcomponents\httpclient\4.5.3\httpclient-4.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\httpcomponents\httpcore\4.4.6\httpcore-4.4.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-client\2.8.1\hadoop-client-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-common\2.8.1\hadoop-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\commons-cli\commons-cli\1.2\commons-cli-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\xmlenc\xmlenc\0.52\xmlenc-0.52.jar;C:\Users\Sohan.Dey\.m2\repository\commons-net\commons-net\3.1\commons-net-3.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\mortbay\jetty\jetty-sslengine\6.1.26\jetty-sslengine-6.1.26.jar;C:\Users\Sohan.Dey\.m2\repository\javax\servlet\jsp\jsp-api\2.1\jsp-api-2.1.jar;C:\Users\Sohan.Dey\.m2\repository\commons-configuration\commons-configuration\1.6\commons-configuration-1.6.jar;C:\Users\Sohan.Dey\.m2\repository\commons-digester\commons-digester\1.8\commons-digester-1.8.jar;C:\Users\Sohan.Dey\.m2\repository\commons-beanutils\commons-beanutils-core\1.8.0\commons-beanutils-core-1.8.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-core-asl\1.9.13\jackson-core-asl-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-mapper-asl\1.9.13\jackson-mapper-asl-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\avro\avro\1.7.4\avro-1.7.4.jar;C:\Users\Sohan.Dey\.m2\repository\com\thoughtworks\paranamer\paranamer\2.3\paranamer-2.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\xerial\snappy\snappy-java\1.0.4.1\snappy-java-1.0.4.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\protobuf\protobuf-java\2.5.0\protobuf-java-2.5.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-auth\2.8.1\hadoop-auth-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\server\apacheds-kerberos-codec\2.0.0-M15\apacheds-kerberos-codec-2.0.0-M15.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\server\apacheds-i18n\2.0.0-M15\apacheds-i18n-2.0.0-M15.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\api\api-asn1-api\1.0.0-M20\api-asn1-api-1.0.0-M20.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\api\api-util\1.0.0-M20\api-util-1.0.0-M20.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\curator\curator-framework\2.7.1\curator-framework-2.7.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\curator\curator-client\2.7.1\curator-client-2.7.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\curator\curator-recipes\2.7.1\curator-recipes-2.7.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\code\findbugs\jsr305\3.0.0\jsr305-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\htrace\htrace-core4\4.0.1-incubating\htrace-core4-4.0.1-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\zookeeper\zookeeper\3.4.6\zookeeper-3.4.6.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty\3.7.0.Final\netty-3.7.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-hdfs\2.8.1\hadoop-hdfs-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-hdfs-client\2.8.1\hadoop-hdfs-client-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\squareup\okhttp\okhttp\2.4.0\okhttp-2.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\squareup\okio\okio\1.4.0\okio-1.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-app\2.8.1\hadoop-mapreduce-client-app-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-common\2.8.1\hadoop-mapreduce-client-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-client\2.8.1\hadoop-yarn-client-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-server-common\2.8.1\hadoop-yarn-server-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-shuffle\2.8.1\hadoop-mapreduce-client-shuffle-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\fusesource\leveldbjni\leveldbjni-all\1.8\leveldbjni-all-1.8.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-api\2.8.1\hadoop-yarn-api-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-core\2.8.1\hadoop-mapreduce-client-core-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-common\2.8.1\hadoop-yarn-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\javax\servlet\servlet-api\2.5\servlet-api-2.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\mortbay\jetty\jetty-util\6.1.26\jetty-util-6.1.26.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\jersey\jersey-core\1.9\jersey-core-1.9.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\jersey\jersey-client\1.9\jersey-client-1.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-jaxrs\1.9.13\jackson-jaxrs-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-xc\1.9.13\jackson-xc-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-jobclient\2.8.1\hadoop-mapreduce-client-jobclient-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-annotations\2.8.1\hadoop-annotations-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\bouncycastle\bcprov-jdk16\1.45\bcprov-jdk16-1.45.jar;C:\Users\Sohan.Dey\.m2\repository\commons-codec\commons-codec\1.11\commons-codec-1.11.jar;C:\Users\Sohan.Dey\.m2\repository\commons-io\commons-io\2.6\commons-io-2.6.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\zxing\core\3.3.3\core-3.3.3.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\zxing\javase\2.0\javase-2.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\hamcrest\hamcrest-all\1.3\hamcrest-all-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\velocity\velocity\1.7\velocity-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\commons-lang\commons-lang\2.4\commons-lang-2.4.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\html2pdf\2.0.0\html2pdf-2.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\forms\7.1.0\forms-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\kernel\7.1.0\kernel-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\io\7.1.0\io-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\layout\7.1.0\layout-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\itextpdf\5.5.13\itextpdf-5.5.13.jar;C:\Users\Sohan.Dey\.m2\repository\javax\mail\javax.mail-api\1.6.2\javax.mail-api-1.6.2.jar;D:\Mosip_Automation_Test\Docker_Test\MOSIP-19726\mosip-functional-tests\authentication-demo-service\target\classes;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.0.2.RELEASE\spring-boot-starter-web-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-json\2.0.2.RELEASE\spring-boot-starter-json-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.5\jackson-datatype-jdk8-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.5\jackson-module-parameter-names-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\2.0.2.RELEASE\spring-boot-starter-tomcat-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\8.5.31\tomcat-embed-el-8.5.31.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\8.5.31\tomcat-embed-websocket-8.5.31.jar;C:\Users\Sohan.Dey\.m2\repository\org\hibernate\validator\hibernate-validator\6.0.9.Final\hibernate-validator-6.0.9.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-web\5.0.6.RELEASE\spring-web-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-webmvc\5.0.6.RELEASE\spring-webmvc-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-expression\5.0.6.RELEASE\spring-expression-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-test\2.0.2.RELEASE\spring-boot-starter-test-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-test\2.0.2.RELEASE\spring-boot-test-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-test-autoconfigure\2.0.2.RELEASE\spring-boot-test-autoconfigure-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\assertj\assertj-core\3.9.1\assertj-core-3.9.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\skyscreamer\jsonassert\1.5.0\jsonassert-1.5.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-core\5.0.6.RELEASE\spring-core-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-jcl\5.0.6.RELEASE\spring-jcl-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-test\5.0.6.RELEASE\spring-test-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\xmlunit\xmlunit-core\2.5.1\xmlunit-core-2.5.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-swagger-ui\2.9.2\springfox-swagger-ui-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-spring-web\2.9.2\springfox-spring-web-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-swagger2\2.9.2\springfox-swagger2-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-spi\2.9.2\springfox-spi-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-core\2.9.2\springfox-core-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-schema\2.9.2\springfox-schema-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-swagger-common\2.9.2\springfox-swagger-common-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\plugin\spring-plugin-core\1.2.0.RELEASE\spring-plugin-core-1.2.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\plugin\spring-plugin-metadata\1.2.0.RELEASE\spring-plugin-metadata-1.2.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\mapstruct\mapstruct\1.2.0.Final\mapstruct-1.2.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\javax\ws\rs\javax.ws.rs-api\2.0\javax.ws.rs-api-2.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\authentication\authentication-core\1.2.0.1-SNAPSHOT\authentication-core-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-cache\2.0.2.RELEASE\spring-boot-starter-cache-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-context-support\5.0.6.RELEASE\spring-context-support-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\machinezoo\sourceafis\sourceafis\3.4.0\sourceafis-3.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\net\sf\trove4j\trove4j\3.0.3\trove4j-3.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\com\machinezoo\noexception\noexception\1.3.2\noexception-1.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\mhshams\jnbis\2.0.1\jnbis-2.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\sanselan\sanselan\0.97-incubator\sanselan-0.97-incubator.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\idrepository\id-repository-core\1.2.0\id-repository-core-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-biosdk-provider\1.2.0\kernel-biosdk-provider-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-biometrics-api\1.2.0\kernel-biometrics-api-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-demographics-api\1.2.0\kernel-demographics-api-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-webflux\2.0.2.RELEASE\spring-boot-starter-webflux-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-reactor-netty\2.0.2.RELEASE\spring-boot-starter-reactor-netty-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\projectreactor\ipc\reactor-netty\0.7.7.RELEASE\reactor-netty-0.7.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-handler-proxy\4.1.24.Final\netty-handler-proxy-4.1.24.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-codec-socks\4.1.24.Final\netty-codec-socks-4.1.24.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-transport-native-epoll\4.1.24.Final\netty-transport-native-epoll-4.1.24.Final-linux-x86_64.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-transport-native-unix-common\4.1.24.Final\netty-transport-native-unix-common-4.1.24.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-webflux\5.0.6.RELEASE\spring-webflux-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\projectreactor\reactor-core\3.1.7.RELEASE\reactor-core-3.1.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\synchronoss\cloud\nio-multipart-parser\1.1.0\nio-multipart-parser-1.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\synchronoss\cloud\nio-stream-storage\1.1.3\nio-stream-storage-1.1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\springdoc\springdoc-openapi-ui\1.5.10\springdoc-openapi-ui-1.5.10.jar;C:\Users\Sohan.Dey\.m2\repository\org\springdoc\springdoc-openapi-webmvc-core\1.5.10\springdoc-openapi-webmvc-core-1.5.10.jar;C:\Users\Sohan.Dey\.m2\repository\org\springdoc\springdoc-openapi-common\1.5.10\springdoc-openapi-common-1.5.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-models\2.1.10\swagger-models-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-annotations\2.1.10\swagger-annotations-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-integration\2.1.10\swagger-integration-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-core\2.1.10\swagger-core-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\jakarta\xml\bind\jakarta.xml.bind-api\2.3.2\jakarta.xml.bind-api-2.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\jakarta\activation\jakarta.activation-api\1.2.1\jakarta.activation-api-1.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-yaml\2.12.1\jackson-dataformat-yaml-2.12.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\github\classgraph\classgraph\4.8.69\classgraph-4.8.69.jar;C:\Users\Sohan.Dey\.m2\repository\org\webjars\swagger-ui\3.51.1\swagger-ui-3.51.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\webjars\webjars-locator-core\0.45\webjars-locator-core-0.45.jar;C:\Users\Sohan.Dey\.m2\repository\commons-fileupload\commons-fileupload\1.4\commons-fileupload-1.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\mockito\mockito-core\2.23.4\mockito-core-2.23.4.jar;C:\Users\Sohan.Dey\.m2\repository\net\bytebuddy\byte-buddy-agent\1.9.3\byte-buddy-agent-1.9.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\objenesis\objenesis\2.6\objenesis-2.6.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-websubclient-api\1.2.0.1-SNAPSHOT\kernel-websubclient-api-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-aspects\5.0.6.RELEASE\spring-aspects-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\aspectj\aspectjweaver\1.8.13\aspectjweaver-1.8.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\owasp\encoder\encoder\1.2.3\encoder-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\tensorflow\tensorflow\1.12.0\tensorflow-1.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\tensorflow\libtensorflow\1.12.0\libtensorflow-1.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\tensorflow\libtensorflow_jni\1.12.0\libtensorflow_jni-1.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-templatemanager-velocity\1.2.0.1-SNAPSHOT\kernel-templatemanager-velocity-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\javax\servlet\javax.servlet-api\4.0.1\javax.servlet-api-4.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-starter-config\2.0.0.RELEASE\spring-cloud-starter-config-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-starter\2.0.0.RELEASE\spring-cloud-starter-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-context\2.0.0.RELEASE\spring-cloud-context-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-crypto\5.0.6.RELEASE\spring-security-crypto-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-commons\2.0.0.RELEASE\spring-cloud-commons-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-rsa\1.0.5.RELEASE\spring-security-rsa-1.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-config-client\2.0.0.RELEASE\spring-cloud-config-client-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\jai-imageio\jai-imageio-jpeg2000\1.3.0\jai-imageio-jpeg2000-1.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\jai-imageio\jai-imageio-core\1.3.0\jai-imageio-core-1.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-keymanager-service\1.2.0.1-SNAPSHOT\kernel-keymanager-service-1.2.0.1-SNAPSHOT-lib.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-test\5.0.5.RELEASE\spring-security-test-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-core\5.0.5.RELEASE\spring-security-core-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-pdfgenerator-itext\1.2.0.1-SNAPSHOT\kernel-pdfgenerator-itext-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\barcodes\7.1.0\barcodes-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\font-asian\7.1.0\font-asian-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\hyph\7.1.0\hyph-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\pdfa\7.1.0\pdfa-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\sign\7.1.0\sign-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\tool\xmlworker\5.5.13\xmlworker-5.5.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\bouncycastle\bcpkix-jdk15on\1.66\bcpkix-jdk15on-1.66.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-data-jpa\2.0.2.RELEASE\spring-boot-starter-data-jpa-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\2.0.2.RELEASE\spring-boot-starter-jdbc-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\zaxxer\HikariCP\2.7.9\HikariCP-2.7.9.jar;C:\Users\Sohan.Dey\.m2\repository\com\h2database\h2\1.4.197\h2-1.4.197.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\microsoft\TSS.Java\0.3.0\TSS.Java-0.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\net\java\dev\jna\jna\4.4.0\jna-4.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\cache2k\cache2k-api\2.4.1.Final\cache2k-api-2.4.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\cache2k\cache2k-core\2.4.1.Final\cache2k-core-2.4.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\nimbusds\nimbus-jose-jwt\9.14\nimbus-jose-jwt-9.14.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-core\1.2.0.1-SNAPSHOT\kernel-core-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter\2.0.2.RELEASE\spring-boot-starter-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot\2.0.2.RELEASE\spring-boot-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.0.2.RELEASE\spring-boot-autoconfigure-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.0.2.RELEASE\spring-boot-starter-logging-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.10.0\log4j-to-slf4j-2.10.0.jar;C:\Users\Sohan.Dey\.m2\repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\data\spring-data-jpa\2.0.7.RELEASE\spring-data-jpa-2.0.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\data\spring-data-commons\2.0.7.RELEASE\spring-data-commons-2.0.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-orm\5.0.6.RELEASE\spring-orm-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-jdbc\5.0.6.RELEASE\spring-jdbc-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-context\5.0.6.RELEASE\spring-context-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-aop\5.0.6.RELEASE\spring-aop-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-tx\5.0.6.RELEASE\spring-tx-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-beans\5.0.6.RELEASE\spring-beans-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\aspectj\aspectjrt\1.8.12\aspectjrt-1.8.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-security\2.0.2.RELEASE\spring-boot-starter-security-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-config\5.0.5.RELEASE\spring-security-config-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-web\5.0.5.RELEASE\spring-security-web-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\javax\transaction\javax.transaction-api\1.3\javax.transaction-api-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-math3\3.6.1\commons-math3-3.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\bouncycastle\bcprov-jdk15on\1.66\bcprov-jdk15on-1.66.jar;C:\Users\Sohan.Dey\.m2\repository\javax\interceptor\javax.interceptor-api\1.2\javax.interceptor-api-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\code\findbugs\annotations\3.0.1\annotations-3.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\net\jcip\jcip-annotations\1.0\jcip-annotations-1.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\swagger-models\1.5.21\swagger-models-1.5.21.jar;C:\Users\Sohan.Dey\.m2\repository\com\auth0\java-jwt\3.8.1\java-jwt-3.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\micrometer\micrometer-core\1.4.2\micrometer-core-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\hdrhistogram\HdrHistogram\2.1.12\HdrHistogram-2.1.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\latencyutils\LatencyUtils\2.0.3\LatencyUtils-2.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\micrometer\micrometer-registry-prometheus\1.4.2\micrometer-registry-prometheus-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\prometheus\simpleclient_common\0.8.1\simpleclient_common-0.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\prometheus\simpleclient\0.8.1\simpleclient-0.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\jul-to-slf4j\1.7.25\jul-to-slf4j-1.7.25.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\jcl-over-slf4j\1.7.25\jcl-over-slf4j-1.7.25.jar;C:\Users\Sohan.Dey\.m2\repository\javax\activation\activation\1.1\activation-1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-starter-sleuth\2.0.4.RELEASE\spring-cloud-starter-sleuth-2.0.4.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-aop\2.0.9.RELEASE\spring-boot-starter-aop-2.0.9.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-sleuth-core\2.0.4.RELEASE\spring-cloud-sleuth-core-2.0.4.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave\5.6.1\brave-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\zipkin2\zipkin\2.12.0\zipkin-2.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\reporter2\zipkin-reporter\2.7.14\zipkin-reporter-2.7.14.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-context-log4j2\5.6.1\brave-context-log4j2-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-spring-web\5.6.1\brave-instrumentation-spring-web-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-http\5.6.1\brave-instrumentation-http-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-spring-rabbit\5.6.1\brave-instrumentation-spring-rabbit-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-kafka-clients\5.6.1\brave-instrumentation-kafka-clients-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-httpclient\5.6.1\brave-instrumentation-httpclient-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-httpasyncclient\5.6.1\brave-instrumentation-httpasyncclient-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-spring-webmvc\5.6.1\brave-instrumentation-spring-webmvc-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-servlet\5.6.1\brave-instrumentation-servlet-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-actuator\2.0.2.RELEASE\spring-boot-starter-actuator-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-actuator-autoconfigure\2.0.2.RELEASE\spring-boot-actuator-autoconfigure-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-actuator\2.0.2.RELEASE\spring-boot-actuator-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\8.5.55\tomcat-embed-core-8.5.55.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\tomcat-annotations-api\8.5.55\tomcat-annotations-api-8.5.55.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\retry\spring-retry\1.2.1.RELEASE\spring-retry-1.2.1.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\module\jackson-module-afterburner\2.12.0\jackson-module-afterburner-2.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-registration-packet-manager\1.1.5.3\kernel-registration-packet-manager-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-keygenerator-bouncycastle\1.1.5.3\kernel-keygenerator-bouncycastle-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-cbeffutil-api\1.1.5.3\kernel-cbeffutil-api-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-logger-logback\1.1.5.3\kernel-logger-logback-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\net\logstash\logback\logstash-logback-encoder\6.4\logstash-logback-encoder-6.4.jar;C:\Users\Sohan.Dey\.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\ch\qos\logback\logback-access\1.2.3\logback-access-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-crypto-jce\1.1.5.3\kernel-crypto-jce-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\bitbucket\b_c\jose4j\0.6.5\jose4j-0.6.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\wink\wink-json4j-provider\1.1.2-incubating\wink-json4j-provider-1.1.2-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\wink\wink-common\1.1.2-incubating\wink-common-1.1.2-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\xml\bind\jaxb-impl\2.2.1.1\jaxb-impl-2.2.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\geronimo\specs\geronimo-annotation_1.1_spec\1.0\geronimo-annotation_1.1_spec-1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\wink\wink-json4j\1.1.2-incubating\wink-json4j-1.1.2-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\javax\ws\rs\jsr311-api\1.1.1\jsr311-api-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\checkerframework\checker-qual\2.9.0\checker-qual-2.9.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\activemq\activemq-broker\5.15.9\activemq-broker-5.15.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\activemq\activemq-client\5.15.9\activemq-client-5.15.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\geronimo\specs\geronimo-jms_1.1_spec\1.1.1\geronimo-jms_1.1_spec-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\fusesource\hawtbuf\hawtbuf\1.11\hawtbuf-1.11.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\geronimo\specs\geronimo-j2ee-management_1.1_spec\1.0.1\geronimo-j2ee-management_1.1_spec-1.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\activemq\activemq-openwire-legacy\5.15.9\activemq-openwire-legacy-5.15.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\projectlombok\lombok\1.18.8\lombok-1.18.8.jar \ No newline at end of file diff --git a/apitest/.temp-MosipFunctionalTest-classpath-arg-1695652238739.txt b/apitest/.temp-MosipFunctionalTest-classpath-arg-1695652238739.txt new file mode 100644 index 000000000..0fc13dd5a --- /dev/null +++ b/apitest/.temp-MosipFunctionalTest-classpath-arg-1695652238739.txt @@ -0,0 +1 @@ +-classpath D:\Mosip_Automation_Test\MOSIP_FUNCTIONAL_TESTS\mosip-functional-tests\automationtests\target\test-classes;D:\Mosip_Automation_Test\MOSIP_FUNCTIONAL_TESTS\mosip-functional-tests\automationtests\target\classes;C:\Users\Sohan.Dey\.m2\repository\com\opencsv\opencsv\4.1\opencsv-4.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-lang3\3.6\commons-lang3-3.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-text\1.1\commons-text-1.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\ibm\icu\icu4j\63.1\icu4j-63.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\keycloak\keycloak-admin-client\17.0.1\keycloak-admin-client-17.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\keycloak\keycloak-core\17.0.1\keycloak-core-17.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\keycloak\keycloak-common\17.0.1\keycloak-common-17.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-client\3.13.2.Final\resteasy-client-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\ws\rs\jboss-jaxrs-api_2.1_spec\2.0.1.Final\jboss-jaxrs-api_2.1_spec-2.0.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-jaxrs\3.13.2.Final\resteasy-jaxrs-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\reactivestreams\reactive-streams\1.0.3\reactive-streams-1.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\jakarta\validation\jakarta.validation-api\2.0.2\jakarta.validation-api-2.0.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\annotation\jboss-annotations-api_1.3_spec\2.0.1.Final\jboss-annotations-api_1.3_spec-2.0.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\activation\jakarta.activation\1.2.1\jakarta.activation-1.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\stephenc\jcip\jcip-annotations\1.0-1\jcip-annotations-1.0-1.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-multipart-provider\3.13.2.Final\resteasy-multipart-provider-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\mail\jakarta.mail\1.6.5\jakarta.mail-1.6.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\james\apache-mime4j\0.6\apache-mime4j-0.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-jackson2-provider\3.13.2.Final\resteasy-jackson2-provider-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\jaxrs\jackson-jaxrs-json-provider\2.10.5\jackson-jaxrs-json-provider-2.10.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\jaxrs\jackson-jaxrs-base\2.10.5\jackson-jaxrs-base-2.10.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\json-patch\1.9\json-patch-1.9.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\jackson-coreutils\1.6\jackson-coreutils-1.6.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\msg-simple\1.1\msg-simple-1.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\btf\1.2\btf-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-jaxb-provider\3.13.2.Final\resteasy-jaxb-provider-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\xml\bind\jboss-jaxb-api_2.3_spec\2.0.0.Final\jboss-jaxb-api_2.3_spec-2.0.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\javassist\javassist\3.25.0-GA\javassist-3.25.0-GA.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\jknack\handlebars\3.0.0\handlebars-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\antlr\antlr4-runtime\4.5.1-1\antlr4-runtime-4.5.1-1.jar;C:\Users\Sohan.Dey\.m2\repository\org\mozilla\rhino\1.7R4\rhino-1.7R4.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\slf4j-api\1.6.4\slf4j-api-1.6.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-collections4\4.3\commons-collections4-4.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\jsonwebtoken\jjwt\0.6.0\jjwt-0.6.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\flipkart\zjsonpatch\zjsonpatch\0.4.7\zjsonpatch-0.4.7.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk\1.11.368\aws-java-sdk-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dlm\1.11.368\aws-java-sdk-dlm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\jmespath-java\1.11.368\jmespath-java-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-macie\1.11.368\aws-java-sdk-macie-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-eks\1.11.368\aws-java-sdk-eks-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediatailor\1.11.368\aws-java-sdk-mediatailor-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-neptune\1.11.368\aws-java-sdk-neptune-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-pi\1.11.368\aws-java-sdk-pi-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iot1clickprojects\1.11.368\aws-java-sdk-iot1clickprojects-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iot1clickdevices\1.11.368\aws-java-sdk-iot1clickdevices-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iotanalytics\1.11.368\aws-java-sdk-iotanalytics-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-acmpca\1.11.368\aws-java-sdk-acmpca-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-secretsmanager\1.11.368\aws-java-sdk-secretsmanager-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-fms\1.11.368\aws-java-sdk-fms-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-connect\1.11.368\aws-java-sdk-connect-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-transcribe\1.11.368\aws-java-sdk-transcribe-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-autoscalingplans\1.11.368\aws-java-sdk-autoscalingplans-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-workmail\1.11.368\aws-java-sdk-workmail-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-servicediscovery\1.11.368\aws-java-sdk-servicediscovery-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloud9\1.11.368\aws-java-sdk-cloud9-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-serverlessapplicationrepository\1.11.368\aws-java-sdk-serverlessapplicationrepository-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-alexaforbusiness\1.11.368\aws-java-sdk-alexaforbusiness-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-resourcegroups\1.11.368\aws-java-sdk-resourcegroups-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-comprehend\1.11.368\aws-java-sdk-comprehend-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-translate\1.11.368\aws-java-sdk-translate-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sagemaker\1.11.368\aws-java-sdk-sagemaker-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iotjobsdataplane\1.11.368\aws-java-sdk-iotjobsdataplane-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sagemakerruntime\1.11.368\aws-java-sdk-sagemakerruntime-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-kinesisvideo\1.11.368\aws-java-sdk-kinesisvideo-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-codec-http\4.1.17.Final\netty-codec-http-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-codec\4.1.17.Final\netty-codec-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-handler\4.1.17.Final\netty-handler-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-buffer\4.1.17.Final\netty-buffer-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-common\4.1.17.Final\netty-common-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-transport\4.1.17.Final\netty-transport-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-resolver\4.1.17.Final\netty-resolver-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-appsync\1.11.368\aws-java-sdk-appsync-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-guardduty\1.11.368\aws-java-sdk-guardduty-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mq\1.11.368\aws-java-sdk-mq-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediaconvert\1.11.368\aws-java-sdk-mediaconvert-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediastore\1.11.368\aws-java-sdk-mediastore-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediastoredata\1.11.368\aws-java-sdk-mediastoredata-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-medialive\1.11.368\aws-java-sdk-medialive-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediapackage\1.11.368\aws-java-sdk-mediapackage-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-costexplorer\1.11.368\aws-java-sdk-costexplorer-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-pricing\1.11.368\aws-java-sdk-pricing-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mobile\1.11.368\aws-java-sdk-mobile-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudhsmv2\1.11.368\aws-java-sdk-cloudhsmv2-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-glue\1.11.368\aws-java-sdk-glue-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-migrationhub\1.11.368\aws-java-sdk-migrationhub-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dax\1.11.368\aws-java-sdk-dax-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-greengrass\1.11.368\aws-java-sdk-greengrass-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-athena\1.11.368\aws-java-sdk-athena-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-marketplaceentitlement\1.11.368\aws-java-sdk-marketplaceentitlement-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codestar\1.11.368\aws-java-sdk-codestar-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lexmodelbuilding\1.11.368\aws-java-sdk-lexmodelbuilding-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-resourcegroupstaggingapi\1.11.368\aws-java-sdk-resourcegroupstaggingapi-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-pinpoint\1.11.368\aws-java-sdk-pinpoint-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-xray\1.11.368\aws-java-sdk-xray-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-opsworkscm\1.11.368\aws-java-sdk-opsworkscm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-support\1.11.368\aws-java-sdk-support-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-simpledb\1.11.368\aws-java-sdk-simpledb-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-servicecatalog\1.11.368\aws-java-sdk-servicecatalog-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-servermigration\1.11.368\aws-java-sdk-servermigration-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-simpleworkflow\1.11.368\aws-java-sdk-simpleworkflow-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-storagegateway\1.11.368\aws-java-sdk-storagegateway-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-route53\1.11.368\aws-java-sdk-route53-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-s3\1.11.368\aws-java-sdk-s3-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-importexport\1.11.368\aws-java-sdk-importexport-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sts\1.11.368\aws-java-sdk-sts-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sqs\1.11.368\aws-java-sdk-sqs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-rds\1.11.368\aws-java-sdk-rds-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-redshift\1.11.368\aws-java-sdk-redshift-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticbeanstalk\1.11.368\aws-java-sdk-elasticbeanstalk-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-glacier\1.11.368\aws-java-sdk-glacier-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iam\1.11.368\aws-java-sdk-iam-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-datapipeline\1.11.368\aws-java-sdk-datapipeline-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticloadbalancing\1.11.368\aws-java-sdk-elasticloadbalancing-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticloadbalancingv2\1.11.368\aws-java-sdk-elasticloadbalancingv2-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-emr\1.11.368\aws-java-sdk-emr-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticache\1.11.368\aws-java-sdk-elasticache-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elastictranscoder\1.11.368\aws-java-sdk-elastictranscoder-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ec2\1.11.368\aws-java-sdk-ec2-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dynamodb\1.11.368\aws-java-sdk-dynamodb-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sns\1.11.368\aws-java-sdk-sns-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-budgets\1.11.368\aws-java-sdk-budgets-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudtrail\1.11.368\aws-java-sdk-cloudtrail-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudwatch\1.11.368\aws-java-sdk-cloudwatch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-logs\1.11.368\aws-java-sdk-logs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-events\1.11.368\aws-java-sdk-events-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cognitoidentity\1.11.368\aws-java-sdk-cognitoidentity-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cognitosync\1.11.368\aws-java-sdk-cognitosync-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-directconnect\1.11.368\aws-java-sdk-directconnect-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudformation\1.11.368\aws-java-sdk-cloudformation-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudfront\1.11.368\aws-java-sdk-cloudfront-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-clouddirectory\1.11.368\aws-java-sdk-clouddirectory-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-kinesis\1.11.368\aws-java-sdk-kinesis-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-opsworks\1.11.368\aws-java-sdk-opsworks-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ses\1.11.368\aws-java-sdk-ses-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-autoscaling\1.11.368\aws-java-sdk-autoscaling-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudsearch\1.11.368\aws-java-sdk-cloudsearch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudwatchmetrics\1.11.368\aws-java-sdk-cloudwatchmetrics-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codedeploy\1.11.368\aws-java-sdk-codedeploy-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codepipeline\1.11.368\aws-java-sdk-codepipeline-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-kms\1.11.368\aws-java-sdk-kms-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-config\1.11.368\aws-java-sdk-config-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lambda\1.11.368\aws-java-sdk-lambda-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ecs\1.11.368\aws-java-sdk-ecs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ecr\1.11.368\aws-java-sdk-ecr-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudhsm\1.11.368\aws-java-sdk-cloudhsm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ssm\1.11.368\aws-java-sdk-ssm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-workspaces\1.11.368\aws-java-sdk-workspaces-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-machinelearning\1.11.368\aws-java-sdk-machinelearning-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-directory\1.11.368\aws-java-sdk-directory-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-efs\1.11.368\aws-java-sdk-efs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codecommit\1.11.368\aws-java-sdk-codecommit-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-devicefarm\1.11.368\aws-java-sdk-devicefarm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticsearch\1.11.368\aws-java-sdk-elasticsearch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-waf\1.11.368\aws-java-sdk-waf-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-marketplacecommerceanalytics\1.11.368\aws-java-sdk-marketplacecommerceanalytics-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-inspector\1.11.368\aws-java-sdk-inspector-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iot\1.11.368\aws-java-sdk-iot-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-api-gateway\1.11.368\aws-java-sdk-api-gateway-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-acm\1.11.368\aws-java-sdk-acm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-gamelift\1.11.368\aws-java-sdk-gamelift-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dms\1.11.368\aws-java-sdk-dms-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-marketplacemeteringservice\1.11.368\aws-java-sdk-marketplacemeteringservice-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cognitoidp\1.11.368\aws-java-sdk-cognitoidp-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-discovery\1.11.368\aws-java-sdk-discovery-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-applicationautoscaling\1.11.368\aws-java-sdk-applicationautoscaling-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-snowball\1.11.368\aws-java-sdk-snowball-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-rekognition\1.11.368\aws-java-sdk-rekognition-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-polly\1.11.368\aws-java-sdk-polly-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lightsail\1.11.368\aws-java-sdk-lightsail-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-stepfunctions\1.11.368\aws-java-sdk-stepfunctions-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-health\1.11.368\aws-java-sdk-health-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-costandusagereport\1.11.368\aws-java-sdk-costandusagereport-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codebuild\1.11.368\aws-java-sdk-codebuild-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-appstream\1.11.368\aws-java-sdk-appstream-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-shield\1.11.368\aws-java-sdk-shield-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-batch\1.11.368\aws-java-sdk-batch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lex\1.11.368\aws-java-sdk-lex-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mechanicalturkrequester\1.11.368\aws-java-sdk-mechanicalturkrequester-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-organizations\1.11.368\aws-java-sdk-organizations-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-workdocs\1.11.368\aws-java-sdk-workdocs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-core\1.11.368\aws-java-sdk-core-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\software\amazon\ion\ion-java\1.0.2\ion-java-1.0.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-cbor\2.6.7\jackson-dataformat-cbor-2.6.7.jar;C:\Users\Sohan.Dey\.m2\repository\joda-time\joda-time\2.8.1\joda-time-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-models\1.11.368\aws-java-sdk-models-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-swf-libraries\1.11.22\aws-java-sdk-swf-libraries-1.11.22.jar;C:\Users\Sohan.Dey\.m2\repository\com\aventstack\extentreports\3.0.0\extentreports-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\freemarker\freemarker\2.3.23\freemarker-2.3.23.jar;C:\Users\Sohan.Dey\.m2\repository\org\mongodb\mongodb-driver\3.3.0\mongodb-driver-3.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\mongodb\bson\3.3.0\bson-3.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\mongodb\mongodb-driver-core\3.3.0\mongodb-driver-core-3.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\httpcomponents\httpmime\4.5.2\httpmime-4.5.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\relevantcodes\extentreports\2.41.2\extentreports-2.41.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\jsoup\jsoup\1.8.3\jsoup-1.8.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\xerial\sqlite-jdbc\3.8.11.1\sqlite-jdbc-3.8.11.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\jayway\jsonpath\json-path\2.4.0\json-path-2.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\net\minidev\json-smart\2.3\json-smart-2.3.jar;C:\Users\Sohan.Dey\.m2\repository\net\minidev\accessors-smart\1.2\accessors-smart-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\ow2\asm\asm\5.0.4\asm-5.0.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-model\3.3.9\maven-model-3.3.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-utils\3.0.22\plexus-utils-3.0.22.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\rest-assured\3.0.7\rest-assured-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\groovy\groovy\2.4.12\groovy-2.4.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\groovy\groovy-xml\2.4.12\groovy-xml-2.4.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\hamcrest\hamcrest-library\1.3\hamcrest-library-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\ccil\cowan\tagsoup\tagsoup\1.2.1\tagsoup-1.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\json-path\3.0.7\json-path-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\groovy\groovy-json\2.4.12\groovy-json-2.4.12.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\rest-assured-common\3.0.7\rest-assured-common-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\xml-path\3.0.7\xml-path-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\testng\testng\6.11\testng-6.11.jar;C:\Users\Sohan.Dey\.m2\repository\com\beust\jcommander\1.64\jcommander-1.64.jar;C:\Users\Sohan.Dey\.m2\repository\org\yaml\snakeyaml\1.17\snakeyaml-1.17.jar;C:\Users\Sohan.Dey\.m2\repository\org\zeroturnaround\zt-zip\1.13\zt-zip-1.13.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.10.1\jackson-core-2.10.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.9.5\jackson-annotations-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.10.5\jackson-databind-2.10.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-xml\2.9.5\jackson-dataformat-xml-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\module\jackson-module-jaxb-annotations\2.9.5\jackson-module-jaxb-annotations-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\woodstox\stax2-api\3.1.4\stax2-api-3.1.4.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\woodstox\woodstox-core\5.0.3\woodstox-core-5.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\json\json\20180130\json-20180130.jar;C:\Users\Sohan.Dey\.m2\repository\com\googlecode\json-simple\json-simple\1.1.1\json-simple-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\junit\junit\4.10\junit-4.10.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\code\gson\gson\2.8.4\gson-2.8.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\plugins\maven-assembly-plugin\3.1.0\maven-assembly-plugin-3.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-plugin-api\3.0\maven-plugin-api-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\sisu\sisu-inject-plexus\1.4.2\sisu-inject-plexus-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\sisu\sisu-inject-bean\1.4.2\sisu-inject-bean-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\sisu\sisu-guice\2.1.7\sisu-guice-2.1.7-noaop.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-core\3.0\maven-core-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-settings\3.0\maven-settings-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-settings-builder\3.0\maven-settings-builder-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-repository-metadata\3.0\maven-repository-metadata-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-model-builder\3.0\maven-model-builder-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-aether-provider\3.0\maven-aether-provider-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-impl\1.7\aether-impl-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-spi\1.7\aether-spi-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-api\1.7\aether-api-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-util\1.7\aether-util-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-classworlds\2.2.3\plexus-classworlds-2.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-component-annotations\1.5.5\plexus-component-annotations-1.5.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\plexus\plexus-sec-dispatcher\1.3\plexus-sec-dispatcher-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\plexus\plexus-cipher\1.4\plexus-cipher-1.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-artifact\3.0\maven-artifact-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-common-artifact-filters\3.0.1\maven-common-artifact-filters-3.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-shared-utils\3.1.0\maven-shared-utils-3.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-artifact-transfer\0.9.0\maven-artifact-transfer-0.9.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-interpolation\1.24\plexus-interpolation-1.24.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-archiver\3.5\plexus-archiver-3.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-compress\1.14\commons-compress-1.14.jar;C:\Users\Sohan.Dey\.m2\repository\org\iq80\snappy\snappy\0.4\snappy-0.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\tukaani\xz\1.6\xz-1.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\file-management\3.0.0\file-management-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-shared-io\3.0.0\maven-shared-io-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-compat\3.0\maven-compat-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\wagon\wagon-provider-api\2.10\wagon-provider-api-2.10.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-filtering\3.1.1\maven-filtering-3.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\plexus\plexus-build-api\0.0.7\plexus-build-api-0.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-io\3.0.0\plexus-io-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-archiver\3.2.0\maven-archiver-3.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\guava\guava\19.0\guava-19.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\hibernate\hibernate-core\5.4.2.Final\hibernate-core-5.4.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\javax\persistence\javax.persistence-api\2.2\javax.persistence-api-2.2.jar;C:\Users\Sohan.Dey\.m2\repository\net\bytebuddy\byte-buddy\1.9.10\byte-buddy-1.9.10.jar;C:\Users\Sohan.Dey\.m2\repository\antlr\antlr\2.7.7\antlr-2.7.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\transaction\jboss-transaction-api_1.2_spec\1.1.1.Final\jboss-transaction-api_1.2_spec-1.1.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\jandex\2.0.5.Final\jandex-2.0.5.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\classmate\1.3.4\classmate-1.3.4.jar;C:\Users\Sohan.Dey\.m2\repository\javax\activation\javax.activation-api\1.2.0\javax.activation-api-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\dom4j\dom4j\2.1.1\dom4j-2.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\hibernate\common\hibernate-commons-annotations\5.1.0.Final\hibernate-commons-annotations-5.1.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\javax\xml\bind\jaxb-api\2.3.1\jaxb-api-2.3.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\glassfish\jaxb\jaxb-runtime\2.3.1\jaxb-runtime-2.3.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\glassfish\jaxb\txw2\2.3.1\txw2-2.3.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\istack\istack-commons-runtime\3.0.7\istack-commons-runtime-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\jvnet\staxex\stax-ex\1.8\stax-ex-1.8.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\xml\fastinfoset\FastInfoset\1.2.15\FastInfoset-1.2.15.jar;C:\Users\Sohan.Dey\.m2\repository\commons-beanutils\commons-beanutils\1.9.2\commons-beanutils-1.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\commons-logging\commons-logging\1.1.1\commons-logging-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\commons-collections\commons-collections\3.2.1\commons-collections-3.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\swagger-annotations\1.5.20\swagger-annotations-1.5.20.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.5\jackson-datatype-jsr310-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\postgresql\postgresql\42.2.2\postgresql-42.2.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\slf4j-log4j12\1.6.2\slf4j-log4j12-1.6.2.jar;C:\Users\Sohan.Dey\.m2\repository\log4j\log4j\1.2.16\log4j-1.2.16.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\logging\log4j\log4j-api\2.11.1\log4j-api-2.11.1.jar;C:\Users\Sohan.Dey\.m2\repository\net\lingala\zip4j\zip4j\1.3.2\zip4j-1.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\httpcomponents\httpclient\4.5.3\httpclient-4.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\httpcomponents\httpcore\4.4.6\httpcore-4.4.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-client\2.8.1\hadoop-client-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-common\2.8.1\hadoop-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\commons-cli\commons-cli\1.2\commons-cli-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\xmlenc\xmlenc\0.52\xmlenc-0.52.jar;C:\Users\Sohan.Dey\.m2\repository\commons-net\commons-net\3.1\commons-net-3.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\mortbay\jetty\jetty-sslengine\6.1.26\jetty-sslengine-6.1.26.jar;C:\Users\Sohan.Dey\.m2\repository\javax\servlet\jsp\jsp-api\2.1\jsp-api-2.1.jar;C:\Users\Sohan.Dey\.m2\repository\commons-configuration\commons-configuration\1.6\commons-configuration-1.6.jar;C:\Users\Sohan.Dey\.m2\repository\commons-digester\commons-digester\1.8\commons-digester-1.8.jar;C:\Users\Sohan.Dey\.m2\repository\commons-beanutils\commons-beanutils-core\1.8.0\commons-beanutils-core-1.8.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-core-asl\1.9.13\jackson-core-asl-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-mapper-asl\1.9.13\jackson-mapper-asl-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\avro\avro\1.7.4\avro-1.7.4.jar;C:\Users\Sohan.Dey\.m2\repository\com\thoughtworks\paranamer\paranamer\2.3\paranamer-2.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\xerial\snappy\snappy-java\1.0.4.1\snappy-java-1.0.4.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\protobuf\protobuf-java\2.5.0\protobuf-java-2.5.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-auth\2.8.1\hadoop-auth-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\server\apacheds-kerberos-codec\2.0.0-M15\apacheds-kerberos-codec-2.0.0-M15.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\server\apacheds-i18n\2.0.0-M15\apacheds-i18n-2.0.0-M15.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\api\api-asn1-api\1.0.0-M20\api-asn1-api-1.0.0-M20.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\api\api-util\1.0.0-M20\api-util-1.0.0-M20.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\curator\curator-framework\2.7.1\curator-framework-2.7.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\curator\curator-client\2.7.1\curator-client-2.7.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\curator\curator-recipes\2.7.1\curator-recipes-2.7.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\code\findbugs\jsr305\3.0.0\jsr305-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\htrace\htrace-core4\4.0.1-incubating\htrace-core4-4.0.1-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\zookeeper\zookeeper\3.4.6\zookeeper-3.4.6.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty\3.7.0.Final\netty-3.7.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-hdfs\2.8.1\hadoop-hdfs-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-hdfs-client\2.8.1\hadoop-hdfs-client-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\squareup\okhttp\okhttp\2.4.0\okhttp-2.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\squareup\okio\okio\1.4.0\okio-1.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-app\2.8.1\hadoop-mapreduce-client-app-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-common\2.8.1\hadoop-mapreduce-client-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-client\2.8.1\hadoop-yarn-client-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-server-common\2.8.1\hadoop-yarn-server-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-shuffle\2.8.1\hadoop-mapreduce-client-shuffle-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\fusesource\leveldbjni\leveldbjni-all\1.8\leveldbjni-all-1.8.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-api\2.8.1\hadoop-yarn-api-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-core\2.8.1\hadoop-mapreduce-client-core-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-common\2.8.1\hadoop-yarn-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\javax\servlet\servlet-api\2.5\servlet-api-2.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\mortbay\jetty\jetty-util\6.1.26\jetty-util-6.1.26.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\jersey\jersey-core\1.9\jersey-core-1.9.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\jersey\jersey-client\1.9\jersey-client-1.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-xc\1.9.13\jackson-xc-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-jobclient\2.8.1\hadoop-mapreduce-client-jobclient-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-annotations\2.8.1\hadoop-annotations-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\bouncycastle\bcprov-jdk15on\1.56\bcprov-jdk15on-1.56.jar;C:\Users\Sohan.Dey\.m2\repository\commons-codec\commons-codec\1.11\commons-codec-1.11.jar;C:\Users\Sohan.Dey\.m2\repository\commons-io\commons-io\2.6\commons-io-2.6.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\zxing\core\3.3.3\core-3.3.3.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\zxing\javase\2.0\javase-2.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\hamcrest\hamcrest-all\1.3\hamcrest-all-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\velocity\velocity\1.7\velocity-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\commons-lang\commons-lang\2.4\commons-lang-2.4.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\html2pdf\2.0.0\html2pdf-2.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\forms\7.1.0\forms-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\kernel\7.1.0\kernel-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\io\7.1.0\io-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\layout\7.1.0\layout-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\itextpdf\5.5.13\itextpdf-5.5.13.jar;C:\Users\Sohan.Dey\.m2\repository\javax\mail\javax.mail-api\1.6.2\javax.mail-api-1.6.2.jar;D:\Mosip_Automation_Test\MOSIP_FUNCTIONAL_TESTS\mosip-functional-tests\authentication-demo-service\target\classes;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.0.2.RELEASE\spring-boot-starter-web-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-json\2.0.2.RELEASE\spring-boot-starter-json-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.5\jackson-datatype-jdk8-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.5\jackson-module-parameter-names-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\2.0.2.RELEASE\spring-boot-starter-tomcat-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\8.5.31\tomcat-embed-el-8.5.31.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\8.5.31\tomcat-embed-websocket-8.5.31.jar;C:\Users\Sohan.Dey\.m2\repository\org\hibernate\validator\hibernate-validator\6.0.9.Final\hibernate-validator-6.0.9.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-web\5.0.6.RELEASE\spring-web-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-webmvc\5.0.6.RELEASE\spring-webmvc-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-expression\5.0.6.RELEASE\spring-expression-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-test\2.0.2.RELEASE\spring-boot-starter-test-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-test\2.0.2.RELEASE\spring-boot-test-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-test-autoconfigure\2.0.2.RELEASE\spring-boot-test-autoconfigure-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\assertj\assertj-core\3.9.1\assertj-core-3.9.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\skyscreamer\jsonassert\1.5.0\jsonassert-1.5.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-core\5.0.6.RELEASE\spring-core-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-jcl\5.0.6.RELEASE\spring-jcl-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-test\5.0.6.RELEASE\spring-test-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\xmlunit\xmlunit-core\2.5.1\xmlunit-core-2.5.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-swagger-ui\2.9.2\springfox-swagger-ui-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-spring-web\2.9.2\springfox-spring-web-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-swagger2\2.9.2\springfox-swagger2-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-spi\2.9.2\springfox-spi-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-core\2.9.2\springfox-core-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-schema\2.9.2\springfox-schema-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-swagger-common\2.9.2\springfox-swagger-common-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\plugin\spring-plugin-core\1.2.0.RELEASE\spring-plugin-core-1.2.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\plugin\spring-plugin-metadata\1.2.0.RELEASE\spring-plugin-metadata-1.2.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\mapstruct\mapstruct\1.2.0.Final\mapstruct-1.2.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\javax\ws\rs\javax.ws.rs-api\2.0\javax.ws.rs-api-2.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\authentication\authentication-core\1.2.0.1-B3\authentication-core-1.2.0.1-B3.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-cache\2.0.2.RELEASE\spring-boot-starter-cache-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-context-support\5.0.6.RELEASE\spring-context-support-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\machinezoo\sourceafis\sourceafis\3.4.0\sourceafis-3.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\net\sf\trove4j\trove4j\3.0.3\trove4j-3.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\com\machinezoo\noexception\noexception\1.3.2\noexception-1.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\mhshams\jnbis\2.0.1\jnbis-2.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\sanselan\sanselan\0.97-incubator\sanselan-0.97-incubator.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\idrepository\id-repository-core\1.2.0.1-B1\id-repository-core-1.2.0.1-B1.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-biosdk-provider\1.2.0.1-B1\kernel-biosdk-provider-1.2.0.1-B1.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-biometrics-api\1.2.0.1-B1\kernel-biometrics-api-1.2.0.1-B1.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-demographics-api\1.2.0.1-B1\kernel-demographics-api-1.2.0.1-B1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-webflux\2.0.2.RELEASE\spring-boot-starter-webflux-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-reactor-netty\2.0.2.RELEASE\spring-boot-starter-reactor-netty-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\projectreactor\ipc\reactor-netty\0.7.7.RELEASE\reactor-netty-0.7.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-handler-proxy\4.1.24.Final\netty-handler-proxy-4.1.24.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-codec-socks\4.1.24.Final\netty-codec-socks-4.1.24.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-transport-native-epoll\4.1.24.Final\netty-transport-native-epoll-4.1.24.Final-linux-x86_64.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-transport-native-unix-common\4.1.24.Final\netty-transport-native-unix-common-4.1.24.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-webflux\5.0.6.RELEASE\spring-webflux-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\synchronoss\cloud\nio-multipart-parser\1.1.0\nio-multipart-parser-1.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\synchronoss\cloud\nio-stream-storage\1.1.3\nio-stream-storage-1.1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\springdoc\springdoc-openapi-ui\1.5.10\springdoc-openapi-ui-1.5.10.jar;C:\Users\Sohan.Dey\.m2\repository\org\springdoc\springdoc-openapi-webmvc-core\1.5.10\springdoc-openapi-webmvc-core-1.5.10.jar;C:\Users\Sohan.Dey\.m2\repository\org\springdoc\springdoc-openapi-common\1.5.10\springdoc-openapi-common-1.5.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-models\2.1.10\swagger-models-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-annotations\2.1.10\swagger-annotations-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-integration\2.1.10\swagger-integration-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-core\2.1.10\swagger-core-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\jakarta\xml\bind\jakarta.xml.bind-api\2.3.2\jakarta.xml.bind-api-2.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\jakarta\activation\jakarta.activation-api\1.2.1\jakarta.activation-api-1.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-yaml\2.12.1\jackson-dataformat-yaml-2.12.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\github\classgraph\classgraph\4.8.69\classgraph-4.8.69.jar;C:\Users\Sohan.Dey\.m2\repository\org\webjars\swagger-ui\3.51.1\swagger-ui-3.51.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\webjars\webjars-locator-core\0.45\webjars-locator-core-0.45.jar;C:\Users\Sohan.Dey\.m2\repository\commons-fileupload\commons-fileupload\1.4\commons-fileupload-1.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\mockito\mockito-core\2.23.4\mockito-core-2.23.4.jar;C:\Users\Sohan.Dey\.m2\repository\net\bytebuddy\byte-buddy-agent\1.9.3\byte-buddy-agent-1.9.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\objenesis\objenesis\2.6\objenesis-2.6.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-websubclient-api\1.2.0.1-SNAPSHOT\kernel-websubclient-api-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-aspects\5.0.6.RELEASE\spring-aspects-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\aspectj\aspectjweaver\1.8.13\aspectjweaver-1.8.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\owasp\encoder\encoder\1.2.3\encoder-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-actuator\2.0.2.RELEASE\spring-boot-starter-actuator-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-actuator-autoconfigure\2.0.2.RELEASE\spring-boot-actuator-autoconfigure-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-actuator\2.0.2.RELEASE\spring-boot-actuator-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\tensorflow\tensorflow\1.12.0\tensorflow-1.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\tensorflow\libtensorflow\1.12.0\libtensorflow-1.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\tensorflow\libtensorflow_jni\1.12.0\libtensorflow_jni-1.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-templatemanager-velocity\1.2.0.1-SNAPSHOT\kernel-templatemanager-velocity-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\javax\servlet\javax.servlet-api\4.0.1\javax.servlet-api-4.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-starter-config\2.0.0.RELEASE\spring-cloud-starter-config-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-starter\2.0.0.RELEASE\spring-cloud-starter-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-context\2.0.0.RELEASE\spring-cloud-context-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-crypto\5.0.6.RELEASE\spring-security-crypto-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-commons\2.0.0.RELEASE\spring-cloud-commons-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-rsa\1.0.5.RELEASE\spring-security-rsa-1.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-config-client\2.0.0.RELEASE\spring-cloud-config-client-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\jai-imageio\jai-imageio-jpeg2000\1.3.0\jai-imageio-jpeg2000-1.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\jai-imageio\jai-imageio-core\1.3.0\jai-imageio-core-1.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-keymanager-service\1.2.0.1-SNAPSHOT\kernel-keymanager-service-1.2.0.1-SNAPSHOT-lib.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-test\5.0.5.RELEASE\spring-security-test-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-core\5.0.5.RELEASE\spring-security-core-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-pdfgenerator-itext\1.2.0.1-SNAPSHOT\kernel-pdfgenerator-itext-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\barcodes\7.1.0\barcodes-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\font-asian\7.1.0\font-asian-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\hyph\7.1.0\hyph-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\pdfa\7.1.0\pdfa-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\sign\7.1.0\sign-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\tool\xmlworker\5.5.13\xmlworker-5.5.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\bouncycastle\bcpkix-jdk15on\1.66\bcpkix-jdk15on-1.66.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-data-jpa\2.0.2.RELEASE\spring-boot-starter-data-jpa-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\2.0.2.RELEASE\spring-boot-starter-jdbc-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\zaxxer\HikariCP\2.7.9\HikariCP-2.7.9.jar;C:\Users\Sohan.Dey\.m2\repository\com\h2database\h2\1.4.197\h2-1.4.197.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\microsoft\TSS.Java\0.3.0\TSS.Java-0.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\net\java\dev\jna\jna\4.4.0\jna-4.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\cache2k\cache2k-api\2.4.1.Final\cache2k-api-2.4.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\cache2k\cache2k-core\2.4.1.Final\cache2k-core-2.4.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\nimbusds\nimbus-jose-jwt\9.14\nimbus-jose-jwt-9.14.jar;C:\Users\Sohan.Dey\.m2\repository\io\projectreactor\reactor-core\3.1.7.RELEASE\reactor-core-3.1.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-core\1.2.0.1-B1\kernel-core-1.2.0.1-B1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter\2.0.2.RELEASE\spring-boot-starter-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot\2.0.2.RELEASE\spring-boot-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.0.2.RELEASE\spring-boot-autoconfigure-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.0.2.RELEASE\spring-boot-starter-logging-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.10.0\log4j-to-slf4j-2.10.0.jar;C:\Users\Sohan.Dey\.m2\repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\data\spring-data-jpa\2.0.7.RELEASE\spring-data-jpa-2.0.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\data\spring-data-commons\2.0.7.RELEASE\spring-data-commons-2.0.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-orm\5.0.6.RELEASE\spring-orm-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-jdbc\5.0.6.RELEASE\spring-jdbc-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-context\5.0.6.RELEASE\spring-context-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-aop\5.0.6.RELEASE\spring-aop-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-tx\5.0.6.RELEASE\spring-tx-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-beans\5.0.6.RELEASE\spring-beans-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\aspectj\aspectjrt\1.8.12\aspectjrt-1.8.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-security\2.0.2.RELEASE\spring-boot-starter-security-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-config\5.0.5.RELEASE\spring-security-config-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-web\5.0.5.RELEASE\spring-security-web-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\javax\transaction\javax.transaction-api\1.3\javax.transaction-api-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-math3\3.6.1\commons-math3-3.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\javax\interceptor\javax.interceptor-api\1.2\javax.interceptor-api-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\code\findbugs\annotations\3.0.1\annotations-3.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\net\jcip\jcip-annotations\1.0\jcip-annotations-1.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\swagger-models\1.5.21\swagger-models-1.5.21.jar;C:\Users\Sohan.Dey\.m2\repository\com\auth0\java-jwt\3.8.1\java-jwt-3.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\micrometer\micrometer-core\1.4.2\micrometer-core-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\hdrhistogram\HdrHistogram\2.1.12\HdrHistogram-2.1.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\latencyutils\LatencyUtils\2.0.3\LatencyUtils-2.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\micrometer\micrometer-registry-prometheus\1.4.2\micrometer-registry-prometheus-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\prometheus\simpleclient_common\0.8.1\simpleclient_common-0.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\prometheus\simpleclient\0.8.1\simpleclient-0.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\jul-to-slf4j\1.7.25\jul-to-slf4j-1.7.25.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\jcl-over-slf4j\1.7.25\jcl-over-slf4j-1.7.25.jar;C:\Users\Sohan.Dey\.m2\repository\javax\activation\activation\1.1\activation-1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-starter-sleuth\2.0.4.RELEASE\spring-cloud-starter-sleuth-2.0.4.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-aop\2.0.9.RELEASE\spring-boot-starter-aop-2.0.9.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-sleuth-core\2.0.4.RELEASE\spring-cloud-sleuth-core-2.0.4.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave\5.6.1\brave-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\zipkin2\zipkin\2.12.0\zipkin-2.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\reporter2\zipkin-reporter\2.7.14\zipkin-reporter-2.7.14.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-context-log4j2\5.6.1\brave-context-log4j2-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-spring-web\5.6.1\brave-instrumentation-spring-web-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-http\5.6.1\brave-instrumentation-http-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-spring-rabbit\5.6.1\brave-instrumentation-spring-rabbit-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-kafka-clients\5.6.1\brave-instrumentation-kafka-clients-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-httpclient\5.6.1\brave-instrumentation-httpclient-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-httpasyncclient\5.6.1\brave-instrumentation-httpasyncclient-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-spring-webmvc\5.6.1\brave-instrumentation-spring-webmvc-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-servlet\5.6.1\brave-instrumentation-servlet-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\8.5.55\tomcat-embed-core-8.5.55.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\tomcat-annotations-api\8.5.55\tomcat-annotations-api-8.5.55.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\retry\spring-retry\1.2.1.RELEASE\spring-retry-1.2.1.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\module\jackson-module-afterburner\2.12.0\jackson-module-afterburner-2.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-registration-packet-manager\1.1.5.3\kernel-registration-packet-manager-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-keygenerator-bouncycastle\1.1.5.3\kernel-keygenerator-bouncycastle-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-cbeffutil-api\1.1.5.3\kernel-cbeffutil-api-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-logger-logback\1.1.5.3\kernel-logger-logback-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\net\logstash\logback\logstash-logback-encoder\6.4\logstash-logback-encoder-6.4.jar;C:\Users\Sohan.Dey\.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\ch\qos\logback\logback-access\1.2.3\logback-access-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-crypto-jce\1.1.5.3\kernel-crypto-jce-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\bitbucket\b_c\jose4j\0.6.5\jose4j-0.6.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\wink\wink-json4j-provider\1.1.2-incubating\wink-json4j-provider-1.1.2-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\wink\wink-common\1.1.2-incubating\wink-common-1.1.2-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\xml\bind\jaxb-impl\2.2.1.1\jaxb-impl-2.2.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\geronimo\specs\geronimo-annotation_1.1_spec\1.0\geronimo-annotation_1.1_spec-1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\wink\wink-json4j\1.1.2-incubating\wink-json4j-1.1.2-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\javax\ws\rs\jsr311-api\1.1.1\jsr311-api-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\checkerframework\checker-qual\2.9.0\checker-qual-2.9.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\activemq\activemq-broker\5.15.9\activemq-broker-5.15.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\activemq\activemq-client\5.15.9\activemq-client-5.15.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\geronimo\specs\geronimo-jms_1.1_spec\1.1.1\geronimo-jms_1.1_spec-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\fusesource\hawtbuf\hawtbuf\1.11\hawtbuf-1.11.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\geronimo\specs\geronimo-j2ee-management_1.1_spec\1.0.1\geronimo-j2ee-management_1.1_spec-1.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\activemq\activemq-openwire-legacy\5.15.9\activemq-openwire-legacy-5.15.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\projectlombok\lombok\1.18.8\lombok-1.18.8.jar \ No newline at end of file diff --git a/apitest/.temp-New_configuration (1)-classpath-arg-1658840665646.txt b/apitest/.temp-New_configuration (1)-classpath-arg-1658840665646.txt new file mode 100644 index 000000000..1aa22a4a9 --- /dev/null +++ b/apitest/.temp-New_configuration (1)-classpath-arg-1658840665646.txt @@ -0,0 +1 @@ +-classpath D:\Mosip_Automation_Test\Docker_Test\mosip-functional-tests\automationtests\target\test-classes;D:\Mosip_Automation_Test\Docker_Test\mosip-functional-tests\automationtests\target\classes;C:\Users\Sohan.Dey\.m2\repository\com\opencsv\opencsv\4.1\opencsv-4.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-lang3\3.6\commons-lang3-3.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-text\1.1\commons-text-1.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\ibm\icu\icu4j\63.1\icu4j-63.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\keycloak\keycloak-admin-client\17.0.1\keycloak-admin-client-17.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\keycloak\keycloak-core\17.0.1\keycloak-core-17.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\keycloak\keycloak-common\17.0.1\keycloak-common-17.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-client\3.13.2.Final\resteasy-client-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\ws\rs\jboss-jaxrs-api_2.1_spec\2.0.1.Final\jboss-jaxrs-api_2.1_spec-2.0.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-jaxrs\3.13.2.Final\resteasy-jaxrs-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\reactivestreams\reactive-streams\1.0.3\reactive-streams-1.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\jakarta\validation\jakarta.validation-api\2.0.2\jakarta.validation-api-2.0.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\annotation\jboss-annotations-api_1.3_spec\2.0.1.Final\jboss-annotations-api_1.3_spec-2.0.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\activation\jakarta.activation\1.2.1\jakarta.activation-1.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\stephenc\jcip\jcip-annotations\1.0-1\jcip-annotations-1.0-1.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-multipart-provider\3.13.2.Final\resteasy-multipart-provider-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\mail\jakarta.mail\1.6.5\jakarta.mail-1.6.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\james\apache-mime4j\0.6\apache-mime4j-0.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-jackson2-provider\3.13.2.Final\resteasy-jackson2-provider-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\jaxrs\jackson-jaxrs-json-provider\2.10.5\jackson-jaxrs-json-provider-2.10.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\jaxrs\jackson-jaxrs-base\2.10.5\jackson-jaxrs-base-2.10.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\json-patch\1.9\json-patch-1.9.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\jackson-coreutils\1.6\jackson-coreutils-1.6.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\msg-simple\1.1\msg-simple-1.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\btf\1.2\btf-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-jaxb-provider\3.13.2.Final\resteasy-jaxb-provider-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\xml\bind\jboss-jaxb-api_2.3_spec\2.0.0.Final\jboss-jaxb-api_2.3_spec-2.0.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\javassist\javassist\3.25.0-GA\javassist-3.25.0-GA.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\jknack\handlebars\3.0.0\handlebars-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\antlr\antlr4-runtime\4.5.1-1\antlr4-runtime-4.5.1-1.jar;C:\Users\Sohan.Dey\.m2\repository\org\mozilla\rhino\1.7R4\rhino-1.7R4.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\slf4j-api\1.6.4\slf4j-api-1.6.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-collections4\4.3\commons-collections4-4.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\jsonwebtoken\jjwt\0.6.0\jjwt-0.6.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\flipkart\zjsonpatch\zjsonpatch\0.4.7\zjsonpatch-0.4.7.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk\1.11.368\aws-java-sdk-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dlm\1.11.368\aws-java-sdk-dlm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\jmespath-java\1.11.368\jmespath-java-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-macie\1.11.368\aws-java-sdk-macie-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-eks\1.11.368\aws-java-sdk-eks-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediatailor\1.11.368\aws-java-sdk-mediatailor-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-neptune\1.11.368\aws-java-sdk-neptune-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-pi\1.11.368\aws-java-sdk-pi-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iot1clickprojects\1.11.368\aws-java-sdk-iot1clickprojects-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iot1clickdevices\1.11.368\aws-java-sdk-iot1clickdevices-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iotanalytics\1.11.368\aws-java-sdk-iotanalytics-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-acmpca\1.11.368\aws-java-sdk-acmpca-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-secretsmanager\1.11.368\aws-java-sdk-secretsmanager-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-fms\1.11.368\aws-java-sdk-fms-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-connect\1.11.368\aws-java-sdk-connect-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-transcribe\1.11.368\aws-java-sdk-transcribe-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-autoscalingplans\1.11.368\aws-java-sdk-autoscalingplans-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-workmail\1.11.368\aws-java-sdk-workmail-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-servicediscovery\1.11.368\aws-java-sdk-servicediscovery-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloud9\1.11.368\aws-java-sdk-cloud9-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-serverlessapplicationrepository\1.11.368\aws-java-sdk-serverlessapplicationrepository-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-alexaforbusiness\1.11.368\aws-java-sdk-alexaforbusiness-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-resourcegroups\1.11.368\aws-java-sdk-resourcegroups-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-comprehend\1.11.368\aws-java-sdk-comprehend-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-translate\1.11.368\aws-java-sdk-translate-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sagemaker\1.11.368\aws-java-sdk-sagemaker-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iotjobsdataplane\1.11.368\aws-java-sdk-iotjobsdataplane-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sagemakerruntime\1.11.368\aws-java-sdk-sagemakerruntime-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-kinesisvideo\1.11.368\aws-java-sdk-kinesisvideo-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-codec-http\4.1.17.Final\netty-codec-http-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-codec\4.1.17.Final\netty-codec-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-handler\4.1.17.Final\netty-handler-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-buffer\4.1.17.Final\netty-buffer-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-common\4.1.17.Final\netty-common-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-transport\4.1.17.Final\netty-transport-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-resolver\4.1.17.Final\netty-resolver-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-appsync\1.11.368\aws-java-sdk-appsync-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-guardduty\1.11.368\aws-java-sdk-guardduty-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mq\1.11.368\aws-java-sdk-mq-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediaconvert\1.11.368\aws-java-sdk-mediaconvert-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediastore\1.11.368\aws-java-sdk-mediastore-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediastoredata\1.11.368\aws-java-sdk-mediastoredata-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-medialive\1.11.368\aws-java-sdk-medialive-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediapackage\1.11.368\aws-java-sdk-mediapackage-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-costexplorer\1.11.368\aws-java-sdk-costexplorer-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-pricing\1.11.368\aws-java-sdk-pricing-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mobile\1.11.368\aws-java-sdk-mobile-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudhsmv2\1.11.368\aws-java-sdk-cloudhsmv2-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-glue\1.11.368\aws-java-sdk-glue-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-migrationhub\1.11.368\aws-java-sdk-migrationhub-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dax\1.11.368\aws-java-sdk-dax-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-greengrass\1.11.368\aws-java-sdk-greengrass-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-athena\1.11.368\aws-java-sdk-athena-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-marketplaceentitlement\1.11.368\aws-java-sdk-marketplaceentitlement-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codestar\1.11.368\aws-java-sdk-codestar-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lexmodelbuilding\1.11.368\aws-java-sdk-lexmodelbuilding-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-resourcegroupstaggingapi\1.11.368\aws-java-sdk-resourcegroupstaggingapi-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-pinpoint\1.11.368\aws-java-sdk-pinpoint-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-xray\1.11.368\aws-java-sdk-xray-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-opsworkscm\1.11.368\aws-java-sdk-opsworkscm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-support\1.11.368\aws-java-sdk-support-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-simpledb\1.11.368\aws-java-sdk-simpledb-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-servicecatalog\1.11.368\aws-java-sdk-servicecatalog-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-servermigration\1.11.368\aws-java-sdk-servermigration-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-simpleworkflow\1.11.368\aws-java-sdk-simpleworkflow-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-storagegateway\1.11.368\aws-java-sdk-storagegateway-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-route53\1.11.368\aws-java-sdk-route53-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-s3\1.11.368\aws-java-sdk-s3-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-importexport\1.11.368\aws-java-sdk-importexport-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sts\1.11.368\aws-java-sdk-sts-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sqs\1.11.368\aws-java-sdk-sqs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-rds\1.11.368\aws-java-sdk-rds-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-redshift\1.11.368\aws-java-sdk-redshift-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticbeanstalk\1.11.368\aws-java-sdk-elasticbeanstalk-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-glacier\1.11.368\aws-java-sdk-glacier-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iam\1.11.368\aws-java-sdk-iam-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-datapipeline\1.11.368\aws-java-sdk-datapipeline-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticloadbalancing\1.11.368\aws-java-sdk-elasticloadbalancing-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticloadbalancingv2\1.11.368\aws-java-sdk-elasticloadbalancingv2-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-emr\1.11.368\aws-java-sdk-emr-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticache\1.11.368\aws-java-sdk-elasticache-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elastictranscoder\1.11.368\aws-java-sdk-elastictranscoder-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ec2\1.11.368\aws-java-sdk-ec2-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dynamodb\1.11.368\aws-java-sdk-dynamodb-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sns\1.11.368\aws-java-sdk-sns-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-budgets\1.11.368\aws-java-sdk-budgets-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudtrail\1.11.368\aws-java-sdk-cloudtrail-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudwatch\1.11.368\aws-java-sdk-cloudwatch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-logs\1.11.368\aws-java-sdk-logs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-events\1.11.368\aws-java-sdk-events-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cognitoidentity\1.11.368\aws-java-sdk-cognitoidentity-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cognitosync\1.11.368\aws-java-sdk-cognitosync-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-directconnect\1.11.368\aws-java-sdk-directconnect-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudformation\1.11.368\aws-java-sdk-cloudformation-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudfront\1.11.368\aws-java-sdk-cloudfront-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-clouddirectory\1.11.368\aws-java-sdk-clouddirectory-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-kinesis\1.11.368\aws-java-sdk-kinesis-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-opsworks\1.11.368\aws-java-sdk-opsworks-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ses\1.11.368\aws-java-sdk-ses-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-autoscaling\1.11.368\aws-java-sdk-autoscaling-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudsearch\1.11.368\aws-java-sdk-cloudsearch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudwatchmetrics\1.11.368\aws-java-sdk-cloudwatchmetrics-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codedeploy\1.11.368\aws-java-sdk-codedeploy-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codepipeline\1.11.368\aws-java-sdk-codepipeline-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-kms\1.11.368\aws-java-sdk-kms-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-config\1.11.368\aws-java-sdk-config-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lambda\1.11.368\aws-java-sdk-lambda-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ecs\1.11.368\aws-java-sdk-ecs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ecr\1.11.368\aws-java-sdk-ecr-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudhsm\1.11.368\aws-java-sdk-cloudhsm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ssm\1.11.368\aws-java-sdk-ssm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-workspaces\1.11.368\aws-java-sdk-workspaces-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-machinelearning\1.11.368\aws-java-sdk-machinelearning-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-directory\1.11.368\aws-java-sdk-directory-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-efs\1.11.368\aws-java-sdk-efs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codecommit\1.11.368\aws-java-sdk-codecommit-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-devicefarm\1.11.368\aws-java-sdk-devicefarm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticsearch\1.11.368\aws-java-sdk-elasticsearch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-waf\1.11.368\aws-java-sdk-waf-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-marketplacecommerceanalytics\1.11.368\aws-java-sdk-marketplacecommerceanalytics-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-inspector\1.11.368\aws-java-sdk-inspector-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iot\1.11.368\aws-java-sdk-iot-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-api-gateway\1.11.368\aws-java-sdk-api-gateway-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-acm\1.11.368\aws-java-sdk-acm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-gamelift\1.11.368\aws-java-sdk-gamelift-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dms\1.11.368\aws-java-sdk-dms-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-marketplacemeteringservice\1.11.368\aws-java-sdk-marketplacemeteringservice-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cognitoidp\1.11.368\aws-java-sdk-cognitoidp-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-discovery\1.11.368\aws-java-sdk-discovery-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-applicationautoscaling\1.11.368\aws-java-sdk-applicationautoscaling-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-snowball\1.11.368\aws-java-sdk-snowball-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-rekognition\1.11.368\aws-java-sdk-rekognition-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-polly\1.11.368\aws-java-sdk-polly-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lightsail\1.11.368\aws-java-sdk-lightsail-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-stepfunctions\1.11.368\aws-java-sdk-stepfunctions-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-health\1.11.368\aws-java-sdk-health-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-costandusagereport\1.11.368\aws-java-sdk-costandusagereport-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codebuild\1.11.368\aws-java-sdk-codebuild-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-appstream\1.11.368\aws-java-sdk-appstream-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-shield\1.11.368\aws-java-sdk-shield-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-batch\1.11.368\aws-java-sdk-batch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lex\1.11.368\aws-java-sdk-lex-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mechanicalturkrequester\1.11.368\aws-java-sdk-mechanicalturkrequester-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-organizations\1.11.368\aws-java-sdk-organizations-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-workdocs\1.11.368\aws-java-sdk-workdocs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-core\1.11.368\aws-java-sdk-core-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\software\amazon\ion\ion-java\1.0.2\ion-java-1.0.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-cbor\2.6.7\jackson-dataformat-cbor-2.6.7.jar;C:\Users\Sohan.Dey\.m2\repository\joda-time\joda-time\2.8.1\joda-time-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-models\1.11.368\aws-java-sdk-models-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-swf-libraries\1.11.22\aws-java-sdk-swf-libraries-1.11.22.jar;C:\Users\Sohan.Dey\.m2\repository\com\aventstack\extentreports\3.0.0\extentreports-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\freemarker\freemarker\2.3.23\freemarker-2.3.23.jar;C:\Users\Sohan.Dey\.m2\repository\org\mongodb\mongodb-driver\3.3.0\mongodb-driver-3.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\mongodb\bson\3.3.0\bson-3.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\mongodb\mongodb-driver-core\3.3.0\mongodb-driver-core-3.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\httpcomponents\httpmime\4.5.2\httpmime-4.5.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\relevantcodes\extentreports\2.41.2\extentreports-2.41.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\jsoup\jsoup\1.8.3\jsoup-1.8.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\xerial\sqlite-jdbc\3.8.11.1\sqlite-jdbc-3.8.11.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\jayway\jsonpath\json-path\2.4.0\json-path-2.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\net\minidev\json-smart\2.3\json-smart-2.3.jar;C:\Users\Sohan.Dey\.m2\repository\net\minidev\accessors-smart\1.2\accessors-smart-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\ow2\asm\asm\5.0.4\asm-5.0.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-model\3.3.9\maven-model-3.3.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-utils\3.0.22\plexus-utils-3.0.22.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\rest-assured\3.0.7\rest-assured-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\groovy\groovy\2.4.12\groovy-2.4.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\groovy\groovy-xml\2.4.12\groovy-xml-2.4.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\hamcrest\hamcrest-library\1.3\hamcrest-library-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\ccil\cowan\tagsoup\tagsoup\1.2.1\tagsoup-1.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\json-path\3.0.7\json-path-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\groovy\groovy-json\2.4.12\groovy-json-2.4.12.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\rest-assured-common\3.0.7\rest-assured-common-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\xml-path\3.0.7\xml-path-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\testng\testng\6.11\testng-6.11.jar;C:\Users\Sohan.Dey\.m2\repository\com\beust\jcommander\1.64\jcommander-1.64.jar;C:\Users\Sohan.Dey\.m2\repository\org\yaml\snakeyaml\1.17\snakeyaml-1.17.jar;C:\Users\Sohan.Dey\.m2\repository\org\zeroturnaround\zt-zip\1.13\zt-zip-1.13.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.10.1\jackson-core-2.10.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.9.5\jackson-annotations-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.10.5\jackson-databind-2.10.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-xml\2.9.5\jackson-dataformat-xml-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\module\jackson-module-jaxb-annotations\2.9.5\jackson-module-jaxb-annotations-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\woodstox\stax2-api\3.1.4\stax2-api-3.1.4.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\woodstox\woodstox-core\5.0.3\woodstox-core-5.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\json\json\20180130\json-20180130.jar;C:\Users\Sohan.Dey\.m2\repository\com\googlecode\json-simple\json-simple\1.1.1\json-simple-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\junit\junit\4.10\junit-4.10.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\code\gson\gson\2.8.4\gson-2.8.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\plugins\maven-assembly-plugin\3.1.0\maven-assembly-plugin-3.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-plugin-api\3.0\maven-plugin-api-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\sisu\sisu-inject-plexus\1.4.2\sisu-inject-plexus-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\sisu\sisu-inject-bean\1.4.2\sisu-inject-bean-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\sisu\sisu-guice\2.1.7\sisu-guice-2.1.7-noaop.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-core\3.0\maven-core-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-settings\3.0\maven-settings-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-settings-builder\3.0\maven-settings-builder-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-repository-metadata\3.0\maven-repository-metadata-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-model-builder\3.0\maven-model-builder-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-aether-provider\3.0\maven-aether-provider-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-impl\1.7\aether-impl-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-spi\1.7\aether-spi-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-api\1.7\aether-api-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-util\1.7\aether-util-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-classworlds\2.2.3\plexus-classworlds-2.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-component-annotations\1.5.5\plexus-component-annotations-1.5.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\plexus\plexus-sec-dispatcher\1.3\plexus-sec-dispatcher-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\plexus\plexus-cipher\1.4\plexus-cipher-1.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-artifact\3.0\maven-artifact-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-common-artifact-filters\3.0.1\maven-common-artifact-filters-3.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-shared-utils\3.1.0\maven-shared-utils-3.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-artifact-transfer\0.9.0\maven-artifact-transfer-0.9.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-interpolation\1.24\plexus-interpolation-1.24.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-archiver\3.5\plexus-archiver-3.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-compress\1.14\commons-compress-1.14.jar;C:\Users\Sohan.Dey\.m2\repository\org\iq80\snappy\snappy\0.4\snappy-0.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\tukaani\xz\1.6\xz-1.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\file-management\3.0.0\file-management-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-shared-io\3.0.0\maven-shared-io-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-compat\3.0\maven-compat-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\wagon\wagon-provider-api\2.10\wagon-provider-api-2.10.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-filtering\3.1.1\maven-filtering-3.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\plexus\plexus-build-api\0.0.7\plexus-build-api-0.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-io\3.0.0\plexus-io-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-archiver\3.2.0\maven-archiver-3.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\guava\guava\19.0\guava-19.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\hibernate\hibernate-core\5.4.2.Final\hibernate-core-5.4.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\javax\persistence\javax.persistence-api\2.2\javax.persistence-api-2.2.jar;C:\Users\Sohan.Dey\.m2\repository\net\bytebuddy\byte-buddy\1.9.10\byte-buddy-1.9.10.jar;C:\Users\Sohan.Dey\.m2\repository\antlr\antlr\2.7.7\antlr-2.7.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\transaction\jboss-transaction-api_1.2_spec\1.1.1.Final\jboss-transaction-api_1.2_spec-1.1.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\jandex\2.0.5.Final\jandex-2.0.5.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\classmate\1.3.4\classmate-1.3.4.jar;C:\Users\Sohan.Dey\.m2\repository\javax\activation\javax.activation-api\1.2.0\javax.activation-api-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\dom4j\dom4j\2.1.1\dom4j-2.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\hibernate\common\hibernate-commons-annotations\5.1.0.Final\hibernate-commons-annotations-5.1.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\javax\xml\bind\jaxb-api\2.3.1\jaxb-api-2.3.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\glassfish\jaxb\jaxb-runtime\2.3.1\jaxb-runtime-2.3.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\glassfish\jaxb\txw2\2.3.1\txw2-2.3.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\istack\istack-commons-runtime\3.0.7\istack-commons-runtime-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\jvnet\staxex\stax-ex\1.8\stax-ex-1.8.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\xml\fastinfoset\FastInfoset\1.2.15\FastInfoset-1.2.15.jar;C:\Users\Sohan.Dey\.m2\repository\commons-beanutils\commons-beanutils\1.9.2\commons-beanutils-1.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\commons-logging\commons-logging\1.1.1\commons-logging-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\commons-collections\commons-collections\3.2.1\commons-collections-3.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\swagger-annotations\1.5.20\swagger-annotations-1.5.20.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.5\jackson-datatype-jsr310-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\postgresql\postgresql\42.2.2\postgresql-42.2.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\slf4j-log4j12\1.6.2\slf4j-log4j12-1.6.2.jar;C:\Users\Sohan.Dey\.m2\repository\log4j\log4j\1.2.16\log4j-1.2.16.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\logging\log4j\log4j-api\2.11.1\log4j-api-2.11.1.jar;C:\Users\Sohan.Dey\.m2\repository\net\lingala\zip4j\zip4j\1.3.2\zip4j-1.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\httpcomponents\httpclient\4.5.3\httpclient-4.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\httpcomponents\httpcore\4.4.6\httpcore-4.4.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-client\2.8.1\hadoop-client-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-common\2.8.1\hadoop-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\commons-cli\commons-cli\1.2\commons-cli-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\xmlenc\xmlenc\0.52\xmlenc-0.52.jar;C:\Users\Sohan.Dey\.m2\repository\commons-net\commons-net\3.1\commons-net-3.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\mortbay\jetty\jetty-sslengine\6.1.26\jetty-sslengine-6.1.26.jar;C:\Users\Sohan.Dey\.m2\repository\javax\servlet\jsp\jsp-api\2.1\jsp-api-2.1.jar;C:\Users\Sohan.Dey\.m2\repository\commons-configuration\commons-configuration\1.6\commons-configuration-1.6.jar;C:\Users\Sohan.Dey\.m2\repository\commons-digester\commons-digester\1.8\commons-digester-1.8.jar;C:\Users\Sohan.Dey\.m2\repository\commons-beanutils\commons-beanutils-core\1.8.0\commons-beanutils-core-1.8.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-core-asl\1.9.13\jackson-core-asl-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-mapper-asl\1.9.13\jackson-mapper-asl-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\avro\avro\1.7.4\avro-1.7.4.jar;C:\Users\Sohan.Dey\.m2\repository\com\thoughtworks\paranamer\paranamer\2.3\paranamer-2.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\xerial\snappy\snappy-java\1.0.4.1\snappy-java-1.0.4.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\protobuf\protobuf-java\2.5.0\protobuf-java-2.5.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-auth\2.8.1\hadoop-auth-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\server\apacheds-kerberos-codec\2.0.0-M15\apacheds-kerberos-codec-2.0.0-M15.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\server\apacheds-i18n\2.0.0-M15\apacheds-i18n-2.0.0-M15.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\api\api-asn1-api\1.0.0-M20\api-asn1-api-1.0.0-M20.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\api\api-util\1.0.0-M20\api-util-1.0.0-M20.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\curator\curator-framework\2.7.1\curator-framework-2.7.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\curator\curator-client\2.7.1\curator-client-2.7.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\curator\curator-recipes\2.7.1\curator-recipes-2.7.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\code\findbugs\jsr305\3.0.0\jsr305-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\htrace\htrace-core4\4.0.1-incubating\htrace-core4-4.0.1-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\zookeeper\zookeeper\3.4.6\zookeeper-3.4.6.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty\3.7.0.Final\netty-3.7.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-hdfs\2.8.1\hadoop-hdfs-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-hdfs-client\2.8.1\hadoop-hdfs-client-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\squareup\okhttp\okhttp\2.4.0\okhttp-2.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\squareup\okio\okio\1.4.0\okio-1.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-app\2.8.1\hadoop-mapreduce-client-app-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-common\2.8.1\hadoop-mapreduce-client-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-client\2.8.1\hadoop-yarn-client-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-server-common\2.8.1\hadoop-yarn-server-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-shuffle\2.8.1\hadoop-mapreduce-client-shuffle-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\fusesource\leveldbjni\leveldbjni-all\1.8\leveldbjni-all-1.8.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-api\2.8.1\hadoop-yarn-api-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-core\2.8.1\hadoop-mapreduce-client-core-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-common\2.8.1\hadoop-yarn-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\javax\servlet\servlet-api\2.5\servlet-api-2.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\mortbay\jetty\jetty-util\6.1.26\jetty-util-6.1.26.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\jersey\jersey-core\1.9\jersey-core-1.9.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\jersey\jersey-client\1.9\jersey-client-1.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-jaxrs\1.9.13\jackson-jaxrs-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-xc\1.9.13\jackson-xc-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-jobclient\2.8.1\hadoop-mapreduce-client-jobclient-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-annotations\2.8.1\hadoop-annotations-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\bouncycastle\bcprov-jdk16\1.45\bcprov-jdk16-1.45.jar;C:\Users\Sohan.Dey\.m2\repository\commons-codec\commons-codec\1.11\commons-codec-1.11.jar;C:\Users\Sohan.Dey\.m2\repository\commons-io\commons-io\2.6\commons-io-2.6.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\zxing\core\3.3.3\core-3.3.3.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\zxing\javase\2.0\javase-2.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\hamcrest\hamcrest-all\1.3\hamcrest-all-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\velocity\velocity\1.7\velocity-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\commons-lang\commons-lang\2.4\commons-lang-2.4.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\html2pdf\2.0.0\html2pdf-2.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\forms\7.1.0\forms-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\kernel\7.1.0\kernel-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\io\7.1.0\io-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\layout\7.1.0\layout-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\itextpdf\5.5.13\itextpdf-5.5.13.jar;C:\Users\Sohan.Dey\.m2\repository\javax\mail\javax.mail-api\1.6.2\javax.mail-api-1.6.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\authentication\authentication-demo-service\1.2.0.1-SNAPSHOT\authentication-demo-service-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.0.2.RELEASE\spring-boot-starter-web-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-json\2.0.2.RELEASE\spring-boot-starter-json-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.5\jackson-datatype-jdk8-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.5\jackson-module-parameter-names-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\2.0.2.RELEASE\spring-boot-starter-tomcat-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\8.5.31\tomcat-embed-el-8.5.31.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\8.5.31\tomcat-embed-websocket-8.5.31.jar;C:\Users\Sohan.Dey\.m2\repository\org\hibernate\validator\hibernate-validator\6.0.9.Final\hibernate-validator-6.0.9.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-web\5.0.6.RELEASE\spring-web-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-webmvc\5.0.6.RELEASE\spring-webmvc-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-expression\5.0.6.RELEASE\spring-expression-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-test\2.0.2.RELEASE\spring-boot-starter-test-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-test\2.0.2.RELEASE\spring-boot-test-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-test-autoconfigure\2.0.2.RELEASE\spring-boot-test-autoconfigure-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\assertj\assertj-core\3.9.1\assertj-core-3.9.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\skyscreamer\jsonassert\1.5.0\jsonassert-1.5.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-core\5.0.6.RELEASE\spring-core-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-jcl\5.0.6.RELEASE\spring-jcl-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-test\5.0.6.RELEASE\spring-test-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\xmlunit\xmlunit-core\2.5.1\xmlunit-core-2.5.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-swagger-ui\2.9.2\springfox-swagger-ui-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-spring-web\2.9.2\springfox-spring-web-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-swagger2\2.9.2\springfox-swagger2-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-spi\2.9.2\springfox-spi-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-core\2.9.2\springfox-core-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-schema\2.9.2\springfox-schema-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-swagger-common\2.9.2\springfox-swagger-common-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\plugin\spring-plugin-core\1.2.0.RELEASE\spring-plugin-core-1.2.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\plugin\spring-plugin-metadata\1.2.0.RELEASE\spring-plugin-metadata-1.2.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\mapstruct\mapstruct\1.2.0.Final\mapstruct-1.2.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\javax\ws\rs\javax.ws.rs-api\2.0\javax.ws.rs-api-2.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\authentication\authentication-core\1.2.0.1-SNAPSHOT\authentication-core-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-cache\2.0.2.RELEASE\spring-boot-starter-cache-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-context-support\5.0.6.RELEASE\spring-context-support-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\machinezoo\sourceafis\sourceafis\3.4.0\sourceafis-3.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\net\sf\trove4j\trove4j\3.0.3\trove4j-3.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\com\machinezoo\noexception\noexception\1.3.2\noexception-1.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\mhshams\jnbis\2.0.1\jnbis-2.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\sanselan\sanselan\0.97-incubator\sanselan-0.97-incubator.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\idrepository\id-repository-core\1.2.0\id-repository-core-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-biosdk-provider\1.2.0\kernel-biosdk-provider-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-biometrics-api\1.2.0\kernel-biometrics-api-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-demographics-api\1.2.0\kernel-demographics-api-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-webflux\2.0.2.RELEASE\spring-boot-starter-webflux-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-reactor-netty\2.0.2.RELEASE\spring-boot-starter-reactor-netty-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\projectreactor\ipc\reactor-netty\0.7.7.RELEASE\reactor-netty-0.7.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-handler-proxy\4.1.24.Final\netty-handler-proxy-4.1.24.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-codec-socks\4.1.24.Final\netty-codec-socks-4.1.24.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-transport-native-epoll\4.1.24.Final\netty-transport-native-epoll-4.1.24.Final-linux-x86_64.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-transport-native-unix-common\4.1.24.Final\netty-transport-native-unix-common-4.1.24.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-webflux\5.0.6.RELEASE\spring-webflux-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\projectreactor\reactor-core\3.1.7.RELEASE\reactor-core-3.1.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\synchronoss\cloud\nio-multipart-parser\1.1.0\nio-multipart-parser-1.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\synchronoss\cloud\nio-stream-storage\1.1.3\nio-stream-storage-1.1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\springdoc\springdoc-openapi-ui\1.5.10\springdoc-openapi-ui-1.5.10.jar;C:\Users\Sohan.Dey\.m2\repository\org\springdoc\springdoc-openapi-webmvc-core\1.5.10\springdoc-openapi-webmvc-core-1.5.10.jar;C:\Users\Sohan.Dey\.m2\repository\org\springdoc\springdoc-openapi-common\1.5.10\springdoc-openapi-common-1.5.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-models\2.1.10\swagger-models-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-annotations\2.1.10\swagger-annotations-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-integration\2.1.10\swagger-integration-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-core\2.1.10\swagger-core-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\jakarta\xml\bind\jakarta.xml.bind-api\2.3.2\jakarta.xml.bind-api-2.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\jakarta\activation\jakarta.activation-api\1.2.1\jakarta.activation-api-1.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-yaml\2.12.1\jackson-dataformat-yaml-2.12.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\github\classgraph\classgraph\4.8.69\classgraph-4.8.69.jar;C:\Users\Sohan.Dey\.m2\repository\org\webjars\swagger-ui\3.51.1\swagger-ui-3.51.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\webjars\webjars-locator-core\0.45\webjars-locator-core-0.45.jar;C:\Users\Sohan.Dey\.m2\repository\commons-fileupload\commons-fileupload\1.4\commons-fileupload-1.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\mockito\mockito-core\2.23.4\mockito-core-2.23.4.jar;C:\Users\Sohan.Dey\.m2\repository\net\bytebuddy\byte-buddy-agent\1.9.3\byte-buddy-agent-1.9.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\objenesis\objenesis\2.6\objenesis-2.6.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-websubclient-api\1.2.0.1-SNAPSHOT\kernel-websubclient-api-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-aspects\5.0.6.RELEASE\spring-aspects-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\aspectj\aspectjweaver\1.8.13\aspectjweaver-1.8.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\owasp\encoder\encoder\1.2.3\encoder-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\tensorflow\tensorflow\1.12.0\tensorflow-1.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\tensorflow\libtensorflow\1.12.0\libtensorflow-1.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\tensorflow\libtensorflow_jni\1.12.0\libtensorflow_jni-1.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-templatemanager-velocity\1.2.0.1-SNAPSHOT\kernel-templatemanager-velocity-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\javax\servlet\javax.servlet-api\4.0.1\javax.servlet-api-4.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-starter-config\2.0.0.RELEASE\spring-cloud-starter-config-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-starter\2.0.0.RELEASE\spring-cloud-starter-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-context\2.0.0.RELEASE\spring-cloud-context-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-crypto\5.0.6.RELEASE\spring-security-crypto-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-commons\2.0.0.RELEASE\spring-cloud-commons-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-rsa\1.0.5.RELEASE\spring-security-rsa-1.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-config-client\2.0.0.RELEASE\spring-cloud-config-client-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\jai-imageio\jai-imageio-jpeg2000\1.3.0\jai-imageio-jpeg2000-1.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\jai-imageio\jai-imageio-core\1.3.0\jai-imageio-core-1.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-keymanager-service\1.2.0.1-SNAPSHOT\kernel-keymanager-service-1.2.0.1-SNAPSHOT-lib.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-test\5.0.5.RELEASE\spring-security-test-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-core\5.0.5.RELEASE\spring-security-core-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-pdfgenerator-itext\1.2.0.1-SNAPSHOT\kernel-pdfgenerator-itext-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\barcodes\7.1.0\barcodes-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\font-asian\7.1.0\font-asian-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\hyph\7.1.0\hyph-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\pdfa\7.1.0\pdfa-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\sign\7.1.0\sign-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\tool\xmlworker\5.5.13\xmlworker-5.5.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\bouncycastle\bcpkix-jdk15on\1.66\bcpkix-jdk15on-1.66.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-data-jpa\2.0.2.RELEASE\spring-boot-starter-data-jpa-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\2.0.2.RELEASE\spring-boot-starter-jdbc-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\zaxxer\HikariCP\2.7.9\HikariCP-2.7.9.jar;C:\Users\Sohan.Dey\.m2\repository\com\h2database\h2\1.4.197\h2-1.4.197.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\microsoft\TSS.Java\0.3.0\TSS.Java-0.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\net\java\dev\jna\jna\4.4.0\jna-4.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\cache2k\cache2k-api\2.4.1.Final\cache2k-api-2.4.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\cache2k\cache2k-core\2.4.1.Final\cache2k-core-2.4.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\nimbusds\nimbus-jose-jwt\9.14\nimbus-jose-jwt-9.14.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-core\1.2.0.1-SNAPSHOT\kernel-core-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter\2.0.2.RELEASE\spring-boot-starter-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot\2.0.2.RELEASE\spring-boot-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.0.2.RELEASE\spring-boot-autoconfigure-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.0.2.RELEASE\spring-boot-starter-logging-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.10.0\log4j-to-slf4j-2.10.0.jar;C:\Users\Sohan.Dey\.m2\repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\data\spring-data-jpa\2.0.7.RELEASE\spring-data-jpa-2.0.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\data\spring-data-commons\2.0.7.RELEASE\spring-data-commons-2.0.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-orm\5.0.6.RELEASE\spring-orm-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-jdbc\5.0.6.RELEASE\spring-jdbc-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-context\5.0.6.RELEASE\spring-context-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-aop\5.0.6.RELEASE\spring-aop-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-tx\5.0.6.RELEASE\spring-tx-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-beans\5.0.6.RELEASE\spring-beans-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\aspectj\aspectjrt\1.8.12\aspectjrt-1.8.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-security\2.0.2.RELEASE\spring-boot-starter-security-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-config\5.0.5.RELEASE\spring-security-config-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-web\5.0.5.RELEASE\spring-security-web-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\javax\transaction\javax.transaction-api\1.3\javax.transaction-api-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-math3\3.6.1\commons-math3-3.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\bouncycastle\bcprov-jdk15on\1.66\bcprov-jdk15on-1.66.jar;C:\Users\Sohan.Dey\.m2\repository\javax\interceptor\javax.interceptor-api\1.2\javax.interceptor-api-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\code\findbugs\annotations\3.0.1\annotations-3.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\net\jcip\jcip-annotations\1.0\jcip-annotations-1.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\swagger-models\1.5.21\swagger-models-1.5.21.jar;C:\Users\Sohan.Dey\.m2\repository\com\auth0\java-jwt\3.8.1\java-jwt-3.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\micrometer\micrometer-core\1.4.2\micrometer-core-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\hdrhistogram\HdrHistogram\2.1.12\HdrHistogram-2.1.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\latencyutils\LatencyUtils\2.0.3\LatencyUtils-2.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\micrometer\micrometer-registry-prometheus\1.4.2\micrometer-registry-prometheus-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\prometheus\simpleclient_common\0.8.1\simpleclient_common-0.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\prometheus\simpleclient\0.8.1\simpleclient-0.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\jul-to-slf4j\1.7.25\jul-to-slf4j-1.7.25.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\jcl-over-slf4j\1.7.25\jcl-over-slf4j-1.7.25.jar;C:\Users\Sohan.Dey\.m2\repository\javax\activation\activation\1.1\activation-1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-starter-sleuth\2.0.4.RELEASE\spring-cloud-starter-sleuth-2.0.4.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-aop\2.0.9.RELEASE\spring-boot-starter-aop-2.0.9.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-sleuth-core\2.0.4.RELEASE\spring-cloud-sleuth-core-2.0.4.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave\5.6.1\brave-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\zipkin2\zipkin\2.12.0\zipkin-2.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\reporter2\zipkin-reporter\2.7.14\zipkin-reporter-2.7.14.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-context-log4j2\5.6.1\brave-context-log4j2-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-spring-web\5.6.1\brave-instrumentation-spring-web-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-http\5.6.1\brave-instrumentation-http-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-spring-rabbit\5.6.1\brave-instrumentation-spring-rabbit-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-kafka-clients\5.6.1\brave-instrumentation-kafka-clients-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-httpclient\5.6.1\brave-instrumentation-httpclient-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-httpasyncclient\5.6.1\brave-instrumentation-httpasyncclient-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-spring-webmvc\5.6.1\brave-instrumentation-spring-webmvc-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-servlet\5.6.1\brave-instrumentation-servlet-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-actuator\2.0.2.RELEASE\spring-boot-starter-actuator-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-actuator-autoconfigure\2.0.2.RELEASE\spring-boot-actuator-autoconfigure-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-actuator\2.0.2.RELEASE\spring-boot-actuator-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\8.5.55\tomcat-embed-core-8.5.55.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\tomcat-annotations-api\8.5.55\tomcat-annotations-api-8.5.55.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\retry\spring-retry\1.2.1.RELEASE\spring-retry-1.2.1.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\module\jackson-module-afterburner\2.12.0\jackson-module-afterburner-2.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-registration-packet-manager\1.1.5.3\kernel-registration-packet-manager-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-keygenerator-bouncycastle\1.1.5.3\kernel-keygenerator-bouncycastle-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-cbeffutil-api\1.1.5.3\kernel-cbeffutil-api-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-logger-logback\1.1.5.3\kernel-logger-logback-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\net\logstash\logback\logstash-logback-encoder\6.4\logstash-logback-encoder-6.4.jar;C:\Users\Sohan.Dey\.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\ch\qos\logback\logback-access\1.2.3\logback-access-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-crypto-jce\1.1.5.3\kernel-crypto-jce-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\bitbucket\b_c\jose4j\0.6.5\jose4j-0.6.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\wink\wink-json4j-provider\1.1.2-incubating\wink-json4j-provider-1.1.2-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\wink\wink-common\1.1.2-incubating\wink-common-1.1.2-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\xml\bind\jaxb-impl\2.2.1.1\jaxb-impl-2.2.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\geronimo\specs\geronimo-annotation_1.1_spec\1.0\geronimo-annotation_1.1_spec-1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\wink\wink-json4j\1.1.2-incubating\wink-json4j-1.1.2-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\javax\ws\rs\jsr311-api\1.1.1\jsr311-api-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\checkerframework\checker-qual\2.9.0\checker-qual-2.9.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\activemq\activemq-broker\5.15.9\activemq-broker-5.15.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\activemq\activemq-client\5.15.9\activemq-client-5.15.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\geronimo\specs\geronimo-jms_1.1_spec\1.1.1\geronimo-jms_1.1_spec-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\fusesource\hawtbuf\hawtbuf\1.11\hawtbuf-1.11.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\geronimo\specs\geronimo-j2ee-management_1.1_spec\1.0.1\geronimo-j2ee-management_1.1_spec-1.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\activemq\activemq-openwire-legacy\5.15.9\activemq-openwire-legacy-5.15.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\projectlombok\lombok\1.18.8\lombok-1.18.8.jar \ No newline at end of file diff --git a/apitest/Dockerfile b/apitest/Dockerfile new file mode 100644 index 000000000..bc00e7589 --- /dev/null +++ b/apitest/Dockerfile @@ -0,0 +1,63 @@ +FROM openjdk:11 + +ARG SOURCE +ARG COMMIT_HASH +ARG COMMIT_ID +ARG BUILD_TIME +LABEL source=${SOURCE} +LABEL commit_hash=${COMMIT_HASH} +LABEL commit_id=${COMMIT_ID} +LABEL build_time=${BUILD_TIME} + +# can be passed during Docker build as build time environment for github branch to pickup configuration from. +ARG container_user=mosip + +# can be passed during Docker build as build time environment for github branch to pickup configuration from. +ARG container_user_group=mosip + +# can be passed during Docker build as build time environment for github branch to pickup configuration from. +ARG container_user_uid=1001 + +# can be passed during Docker build as build time environment for github branch to pickup configuration from. +ARG container_user_gid=1001 + +ARG KUBECTL_VERSION=1.22.9 + +# install packages and create user +RUN apt-get -y update \ +&& apt-get install -y unzip jq \ +&& groupadd -g ${container_user_gid} ${container_user_group} \ +&& useradd -u ${container_user_uid} -g ${container_user_group} -s /bin/sh -m ${container_user} \ +&& curl -LO "https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VERSION}/bin/linux/amd64/kubectl" \ +&& chmod +x kubectl \ +&& mv kubectl /usr/local/bin/ + +# set working directory for the user +WORKDIR /home/${container_user} + +ENV work_dir=/home/${container_user} + +ADD ./target/ $work_dir + +ADD entrypoint.sh $work_dir/entrypoint.sh + +RUN chmod +x $work_dir/entrypoint.sh + +#ADD ./testNgXmlFiles/ $work_dir/testNgXmlFiles/ + +# change permissions of file inside working dir +RUN chown -R ${container_user}:${container_user} /home/${container_user} /usr/local/openjdk-11/lib/security/cacerts + +RUN chmod 644 /usr/local/openjdk-11/lib/security/cacerts + +# select container user for all tasks +USER ${container_user_uid}:${container_user_gid} + +EXPOSE 8083 + +ENV MODULES= +ENV ENV_USER= +ENV ENV_ENDPOINT= +ENV ENV_TESTLEVEL=smokeAndRegression + +ENTRYPOINT ["./entrypoint.sh"] diff --git a/apitest/README.md b/apitest/README.md new file mode 100644 index 000000000..51b622679 --- /dev/null +++ b/apitest/README.md @@ -0,0 +1,3 @@ +# Automation test + +All automation test code. diff --git a/apitest/entrypoint.sh b/apitest/entrypoint.sh new file mode 100644 index 000000000..b56500353 --- /dev/null +++ b/apitest/entrypoint.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +## Run automationtests +java -jar -Dmodules="$MODULES" -Denv.user="$ENV_USER" -Denv.endpoint="$ENV_ENDPOINT" -Denv.testLevel="$ENV_TESTLEVEL" automationtests.jar; diff --git a/apitest/metadata.xml b/apitest/metadata.xml new file mode 100644 index 000000000..ea66c92e6 --- /dev/null +++ b/apitest/metadata.xml @@ -0,0 +1,16 @@ + + 4.0.0 + io.mosip.testrig.apirig.automationtests + automationtests + jar + io.mosip.testrig.apirig.automationtests + http://maven.apache.org + + + io.mosip + mosip-parent + 1.0.10 + + + diff --git a/apitest/pom.xml b/apitest/pom.xml new file mode 100644 index 000000000..d67e643c6 --- /dev/null +++ b/apitest/pom.xml @@ -0,0 +1,185 @@ + + 4.0.0 + io.mosip.mimoto + apitest-mimoto + jar + automationtests-mimoto + Parent project of MOSIP functional tests + https://github.com/mosip/mosip-functional-tests + 1.2.0.1-SNAPSHOT + + + + MPL 2.0 + https://www.mozilla.org/en-US/MPL/2.0/ + + + + + scm:git:git://github.com/mosip/mosip-functional-tests.git + scm:git:ssh://github.com:mosip/mosip-functional-tests.git + https://github.com/mosip/mosip-functional-tests + HEAD + + + + + + + + UTF-8 + + + 11 + 11 + 3.7.0 + 3.0.2 + 3.1.0 + 2.9 + 0.8.1 + 3.2 + 3.0.1 + 2.3 + false + 3.7.0.1746 + + 2.0.2.RELEASE + 2.0.7.RELEASE + 5.0.5.RELEASE + 2.0.0.RELEASE + + 2.0.7 + 1.5.20 + 2.9.2 + + 3.6.2 + 3.7.0 + + + + 1.2 + 3.0.0 + 1.3 + 2.2 + 2.0.1.Final + 2.2.6 + + + 1.4.197 + 5.1.46 + 42.2.2 + 2.5.0 + 6.0.12.Final + + + 1.10.19 + 1.7.4 + 2.0.0-beta.5 + + + 3.6.1 + 3.7 + 2.6 + 1.11 + 4.3 + 1.9.2 + 2.2 + 4.5.6 + 19.0 + 1.18.8 + 0.1.54 + 1.4.0 + 7.1.0 + 2.0.0 + 5.5.13 + 2.3.23 + 1.7 + 2.0 + 1.5.2 + 2.1.1 + 1.60 + 63.1 + 1.0.0 + 3.3.3 + 2.8.1 + 4.1.0-incubating + 1.11.368 + 0.2.4 + 2.3.0 + 3.0.1 + 1.9.12 + 0.6.0 + 2.0.0.AM2 + + + + + + + + 0.8.2 + 2.2 + 3.2 + UTF-8 + 3.7.0 + 3.0.1 + + + 1.1.6 + 1.7.19 + 1.10.19 + + + 1.4.6 + + + 5.0.6.RELEASE + + + 5.4.2.Final + + + 2.1.1 + + + 10.13.1.1 + + + 3.4.0 + + + 1.3.5 + + + 0.3.12 + + + 0.3.0 + + + 1.1.2-incubating + 1.2.0.1-B1 + 0.4.7 + 3.0.0 + 2.41.2 + 2.4.0 + 3.3.9 + 3.0.7 + 6.11 + 1.13 + automationtests-commons-1.2.0.1-SNAPSHOT-jar-with-dependencies + + + + + + io.mosip.testrig.apirig.automationtests.commons + automationtests-commons + 1.2.0.1-SNAPSHOT + + + + + diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java b/apitest/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java new file mode 100644 index 000000000..de2bc8779 --- /dev/null +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java @@ -0,0 +1,350 @@ +package io.mosip.testrig.apirig.testrunner; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.StringWriter; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.NoSuchAlgorithmException; +import java.security.PublicKey; +import java.security.interfaces.RSAPublicKey; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Properties; + +import org.apache.log4j.Logger; +import org.bouncycastle.openssl.jcajce.JcaPEMWriter; +import org.testng.TestNG; + +import com.nimbusds.jose.jwk.KeyUse; +import com.nimbusds.jose.jwk.RSAKey; + +import io.mosip.testrig.apirig.dbaccess.DBManager; +import io.mosip.testrig.apirig.utils.AdminTestUtil; +import io.mosip.testrig.apirig.utils.CertificateGenerationUtil; +import io.mosip.testrig.apirig.utils.CertsUtil; +import io.mosip.testrig.apirig.utils.ConfigManager; +import io.mosip.testrig.apirig.utils.EncryptionDecrptionUtil; +import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.JWKKeyUtil; +import io.mosip.testrig.apirig.utils.KeyCloakUserAndAPIKeyGeneration; +import io.mosip.testrig.apirig.utils.KeycloakUserManager; +import io.mosip.testrig.apirig.utils.MispPartnerAndLicenseKeyGeneration; +import io.mosip.testrig.apirig.utils.OutputValidationUtil; +import io.mosip.testrig.apirig.utils.PartnerRegistration; + +/** + * Class to initiate mosip api test execution + * + * @author Vignesh + * + */ +public class MosipTestRunner { + private static final Logger LOGGER = Logger.getLogger(MosipTestRunner.class); + private static String cachedPath = null; + + public static String jarUrl = MosipTestRunner.class.getProtectionDomain().getCodeSource().getLocation().getPath(); + public static List languageList = new ArrayList<>(); + + /** + * C Main method to start mosip test execution + * + * @param arg + */ + public static void main(String[] arg) { + + try { + + Map envMap = System.getenv(); + LOGGER.info("** ------------- Get ALL ENV varibales --------------------------------------------- **"); + for (String envName : envMap.keySet()) { + LOGGER.info(String.format("ENV %s = %s%n", envName, envMap.get(envName))); + } + ExtractResource.removeOldMosipTestTestResource(); + if (checkRunType().equalsIgnoreCase("JAR")) { + ExtractResource.extractCommonResourceFromJar(); + } else { + ExtractResource.copyCommonResources(); + } + ConfigManager.init(); + BaseTestCase.suiteSetup(); + setLogLevels(); + AdminTestUtil.encryptDecryptUtil = new EncryptionDecrptionUtil(); + + // For now we are not doing health check for qa-115. + if (BaseTestCase.isTargetEnvLTS()) { + HealthChecker healthcheck = new HealthChecker(); + healthcheck.setCurrentRunningModule(BaseTestCase.currentModule); + Thread trigger = new Thread(healthcheck); + trigger.start(); + } + KeycloakUserManager.removeUser(); + KeycloakUserManager.createUsers(); + KeycloakUserManager.closeKeycloakInstance(); + + List localLanguageList = new ArrayList<>(BaseTestCase.getLanguageList()); + AdminTestUtil.getLocationData(); + + String partnerKeyURL = ""; + String updatedPartnerKeyURL = ""; + String ekycPartnerKeyURL = ""; + + if (BaseTestCase.listOfModules.contains("auth") + || BaseTestCase.listOfModules.contains(GlobalConstants.ESIGNET)) { + PartnerRegistration.deleteCertificates(); + CertificateGenerationUtil.getThumbprints(); + AdminTestUtil.createAndPublishPolicy(); + AdminTestUtil.createEditAndPublishPolicy(); + partnerKeyURL = PartnerRegistration.generateAndGetPartnerKeyUrl(); + updatedPartnerKeyURL = PartnerRegistration.generateAndGetUpdatedPartnerKeyUrl(); + + AdminTestUtil.createAndPublishPolicyForKyc(); + ekycPartnerKeyURL = PartnerRegistration.generateAndGetEkycPartnerKeyUrl(); + + } + + if (BaseTestCase.listOfModules.contains(GlobalConstants.MASTERDATA)) { + AdminTestUtil.getHierarchyZoneCode(); + BaseTestCase.mapUserToZone(); + BaseTestCase.mapZone(); + AdminTestUtil.getLocationLevelData(); + AdminTestUtil.getLocationData(); + AdminTestUtil.getZoneName(); + + + + for (int i = 0; i < localLanguageList.size(); i++) { + BaseTestCase.languageList.clear(); + BaseTestCase.languageList.add(localLanguageList.get(i)); + + DBManager.clearMasterDbData(); + BaseTestCase.currentModule = GlobalConstants.MASTERDATA; + BaseTestCase.setReportName("masterdata-" + localLanguageList.get(i)); + startTestRunner(); + + } + + } else if (BaseTestCase.listOfModules.contains("auth") + || BaseTestCase.listOfModules.contains(GlobalConstants.ESIGNET)) { + if (partnerKeyURL.isEmpty()) + // if (partnerKeyURL.isEmpty() || ekycPartnerKeyURL.isEmpty()) + LOGGER.error("partnerKeyURL is null"); + else + startTestRunner(); + } else { + startTestRunner(); + } + } catch (Exception e) { + LOGGER.error("Exception " + e.getMessage()); + } + + MockSMTPListener.bTerminate = true; + + if (BaseTestCase.isTargetEnvLTS()) + HealthChecker.bTerminate = true; + + System.exit(0); + + } + + private static void setLogLevels() { + AdminTestUtil.setLogLevel(); + OutputValidationUtil.setLogLevel(); + PartnerRegistration.setLogLevel(); + KeyCloakUserAndAPIKeyGeneration.setLogLevel(); + MispPartnerAndLicenseKeyGeneration.setLogLevel(); + JWKKeyUtil.setLogLevel(); + CertsUtil.setLogLevel(); + } + + /** + * The method to start mosip testng execution + * + * @throws IOException + */ + public static void startTestRunner() { + File homeDir = null; + TestNG runner = new TestNG(); + List suitefiles = new ArrayList<>(); + List modulesToRun = BaseTestCase.listOfModules; + String os = System.getProperty("os.name"); + LOGGER.info(os); + if (checkRunType().contains("IDE") || os.toLowerCase().contains("windows")) { + homeDir = new File(System.getProperty("user.dir") + "/testNgXmlFiles"); + LOGGER.info("IDE :" + homeDir); + } else { + File dir = new File(System.getProperty("user.dir")); + homeDir = new File(dir.getParent() + "/mosip/testNgXmlFiles"); + LOGGER.info("ELSE :" + homeDir); + } + for (File file : homeDir.listFiles()) { + for (String fileName : modulesToRun) { + if (file.getName().toLowerCase().contains(fileName)) { + suitefiles.add(file.getAbsolutePath()); + } else if (fileName.equals("all") && file.getName().toLowerCase().contains("testng")) { + suitefiles.add(file.getAbsolutePath()); + } + } + } + runner.setTestSuites(suitefiles); + System.getProperties().setProperty("testng.outpur.dir", "testng-report"); + runner.setOutputDirectory("testng-report"); + runner.run(); + } + + /** + * The method to return class loader resource path + * + * @return String + * @throws IOException + */ + /* + * public static String getGlobalResourcePath() { if + * (checkRunType().equalsIgnoreCase("JAR")) { return new + * File(jarUrl).getParentFile().getAbsolutePath() + + * "/MosipTestResource/MosipTemporaryTestResource"; } else if + * (checkRunType().equalsIgnoreCase("IDE")) { String path = new + * File(MosipTestRunner.class.getClassLoader().getResource("").getPath()). + * getAbsolutePath() + "/MosipTestResource/MosipTemporaryTestResource"; if + * (path.contains(GlobalConstants.TESTCLASSES)) path = + * path.replace(GlobalConstants.TESTCLASSES, "classes"); return path; } return + * "Global Resource File Path Not Found"; } + */ + + public static String getGlobalResourcePath() { + if (cachedPath != null) { + return cachedPath; + } + + String path = null; + if (checkRunType().equalsIgnoreCase("JAR")) { + path = new File(jarUrl).getParentFile().getAbsolutePath() + "/MosipTestResource/MosipTemporaryTestResource"; + } else if (checkRunType().equalsIgnoreCase("IDE")) { + path = new File(MosipTestRunner.class.getClassLoader().getResource("").getPath()).getAbsolutePath() + + "/MosipTestResource/MosipTemporaryTestResource"; + if (path.contains(GlobalConstants.TESTCLASSES)) + path = path.replace(GlobalConstants.TESTCLASSES, "classes"); + } + + if (path != null) { + cachedPath = path; + return path; + } else { + return "Global Resource File Path Not Found"; + } + } + + public static String getResourcePath() { + return getGlobalResourcePath(); +// if (checkRunType().equalsIgnoreCase("JAR")) { +// return new File(jarUrl).getParentFile().getAbsolutePath(); +// } else if (checkRunType().equalsIgnoreCase("IDE")) { +// String path = new File(MosipTestRunner.class.getClassLoader().getResource("").getPath()).getAbsolutePath(); +// if (path.contains(GlobalConstants.TESTCLASSES)) +// path = path.replace(GlobalConstants.TESTCLASSES, "classes"); +// return path; +// } +// return "Global Resource File Path Not Found"; + } + + public static String generatePulicKey() { + String publicKey = null; + try { + KeyPairGenerator keyGenerator = KeyPairGenerator.getInstance("RSA"); + keyGenerator.initialize(2048, BaseTestCase.secureRandom); + final KeyPair keypair = keyGenerator.generateKeyPair(); + publicKey = java.util.Base64.getEncoder().encodeToString(keypair.getPublic().getEncoded()); + } catch (NoSuchAlgorithmException e) { + LOGGER.error(e.getMessage()); + } + return publicKey; + } + + public static KeyPairGenerator keyPairGen = null; + + public static KeyPairGenerator getKeyPairGeneratorInstance() { + if (keyPairGen != null) + return keyPairGen; + try { + keyPairGen = KeyPairGenerator.getInstance("RSA"); + keyPairGen.initialize(2048); + + } catch (NoSuchAlgorithmException e) { + LOGGER.error(e.getMessage()); + } + + return keyPairGen; + } + + public static String generatePublicKeyForMimoto() { + + String vcString = ""; + try { + KeyPairGenerator keyPairGenerator = getKeyPairGeneratorInstance(); + KeyPair keyPair = keyPairGenerator.generateKeyPair(); + PublicKey publicKey = keyPair.getPublic(); + StringWriter stringWriter = new StringWriter(); + try (JcaPEMWriter pemWriter = new JcaPEMWriter(stringWriter)) { + pemWriter.writeObject(publicKey); + pemWriter.flush(); + vcString = stringWriter.toString(); + if (System.getProperty("os.name").toLowerCase().contains("windows")) { + vcString = vcString.replaceAll("\r\n", "\\\\n"); + } else { + vcString = vcString.replaceAll("\n", "\\\\n"); + } + } catch (Exception e) { + throw e; + } + } catch (Exception e) { + LOGGER.error(e.getMessage()); + } + return vcString; + } + + public static String generateJWKPublicKey() { + try { + KeyPairGenerator keyGenerator = KeyPairGenerator.getInstance("RSA"); + keyGenerator.initialize(2048, BaseTestCase.secureRandom); + final KeyPair keypair = keyGenerator.generateKeyPair(); + RSAKey jwk = new RSAKey.Builder((RSAPublicKey) keypair.getPublic()).keyID("RSAKeyID") + .keyUse(KeyUse.SIGNATURE).privateKey(keypair.getPrivate()).build(); + + return jwk.toJSONString(); + } catch (NoSuchAlgorithmException e) { + LOGGER.error(e.getMessage()); + return null; + } + } + + public static Properties getproperty(String path) { + Properties prop = new Properties(); + FileInputStream inputStream = null; + try { + File file = new File(path); + inputStream = new FileInputStream(file); + prop.load(inputStream); + } catch (Exception e) { + LOGGER.error(GlobalConstants.EXCEPTION_STRING_2 + e.getMessage()); + } finally { + AdminTestUtil.closeInputStream(inputStream); + } + return prop; + } + + /** + * The method will return mode of application started either from jar or eclipse + * ide + * + * @return + */ + public static String checkRunType() { + if (MosipTestRunner.class.getResource("MosipTestRunner.class").getPath().contains(".jar")) + return "JAR"; + else + return "IDE"; + } + +} diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java new file mode 100644 index 000000000..97c2a6dda --- /dev/null +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java @@ -0,0 +1,178 @@ +package io.mosip.testrig.apirig.testscripts; + +import java.lang.reflect.Field; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.List; +import java.util.Map; + +import javax.ws.rs.core.MediaType; + +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.testng.ITest; +import org.testng.ITestContext; +import org.testng.ITestResult; +import org.testng.Reporter; +import org.testng.SkipException; +import org.testng.annotations.AfterClass; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; +import org.testng.internal.BaseTestMethod; +import org.testng.internal.TestResult; + +import io.mosip.testrig.apirig.dto.OutputValidationDto; +import io.mosip.testrig.apirig.dto.TestCaseDTO; +import io.mosip.testrig.apirig.testrunner.HealthChecker; +import io.mosip.testrig.apirig.testrunner.JsonPrecondtion; +import io.mosip.testrig.apirig.utils.AdminTestException; +import io.mosip.testrig.apirig.utils.AdminTestUtil; +import io.mosip.testrig.apirig.utils.AuthenticationTestException; +import io.mosip.testrig.apirig.utils.ConfigManager; +import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.KernelAuthentication; +import io.mosip.testrig.apirig.utils.OutputValidationUtil; +import io.mosip.testrig.apirig.utils.ReportUtil; +import io.mosip.testrig.apirig.utils.RestClient; +import io.restassured.response.Response; + +public class AddIdentity extends AdminTestUtil implements ITest { + private static final Logger logger = Logger.getLogger(AddIdentity.class); + protected String testCaseName = ""; + public Response response = null; + + /** + * get current testcaseName + */ + @Override + public String getTestName() { + return testCaseName; + + } + + @BeforeClass + public static void setLogLevel() { + if (ConfigManager.IsDebugEnabled()) + logger.setLevel(Level.ALL); + else + logger.setLevel(Level.ERROR); + } + + /** + * Data provider class provides test case list + * + * @return object of data provider + */ + @DataProvider(name = "testcaselist") + public Object[] getTestCaseList(ITestContext context) { + String ymlFile = context.getCurrentXmlTest().getLocalParameters().get("ymlFile"); + logger.info("Started executing yml: " + ymlFile); + return getYmlTestData(ymlFile); + } + + /** + * Test method for OTP Generation execution + * + * @param objTestParameters + * @param testScenario + * @param testcaseName + * @throws AuthenticationTestException + * @throws AdminTestException + */ + @Test(dataProvider = "testcaselist") + public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException { + testCaseName = testCaseDTO.getTestCaseName(); + if (HealthChecker.signalTerminateExecution) { + throw new SkipException( + GlobalConstants.TARGET_ENV_HEALTH_CHECK_FAILED + HealthChecker.healthCheckFailureMapS); + } + testCaseDTO.setInputTemplate(AdminTestUtil.modifySchemaGenerateHbs(testCaseDTO.isRegenerateHbs())); + String uin = JsonPrecondtion + .getValueFromJson( + RestClient.getRequestWithCookie(ApplnURI + "/v1/idgenerator/uin", MediaType.APPLICATION_JSON, + MediaType.APPLICATION_JSON, COOKIENAME, + new KernelAuthentication().getTokenByRole(testCaseDTO.getRole())).asString(), + "response.uin"); + + testCaseName = isTestCaseValidForExecution(testCaseDTO); + + DateFormat dateFormatter = new SimpleDateFormat("yyyyMMddHHmmss"); + Calendar cal = Calendar.getInstance(); + String timestampValue = dateFormatter.format(cal.getTime()); + String genRid = "27847" + generateRandomNumberString(10) + timestampValue; + + String jsonInput = testCaseDTO.getInput(); + + String inputJson = getJsonFromTemplate(jsonInput, testCaseDTO.getInputTemplate(), false); + + inputJson = inputJson.replace("$UIN$", uin); + inputJson = inputJson.replace("$RID$", genRid); + String phoneNumber = ""; + if (inputJson.contains("$PHONENUMBERFORIDENTITY$")) { + if (!phoneSchemaRegex.isEmpty()) + try { + phoneNumber = genStringAsperRegex(phoneSchemaRegex); + } catch (Exception e) { + logger.error(e.getMessage()); + } + inputJson = replaceKeywordWithValue(inputJson, "$PHONENUMBERFORIDENTITY$", phoneNumber); + } + + response = postWithBodyAndCookie(ApplnURI + testCaseDTO.getEndPoint(), inputJson, COOKIENAME, + testCaseDTO.getRole(), testCaseDTO.getTestCaseName()); + + Map> ouputValid = OutputValidationUtil.doJsonOutputValidation( + response.asString(), getJsonFromTemplate(testCaseDTO.getOutput(), testCaseDTO.getOutputTemplate()), + testCaseDTO, response.getStatusCode()); + Reporter.log(ReportUtil.getOutputValidationReport(ouputValid)); + + if (!OutputValidationUtil.publishOutputResult(ouputValid)) + throw new AdminTestException("Failed at output validation"); + if (testCaseDTO.getTestCaseName().contains("_Pos")) { + writeAutoGeneratedId(testCaseDTO.getTestCaseName(), "UIN", uin); + writeAutoGeneratedId(testCaseDTO.getTestCaseName(), "RID", genRid); + writeAutoGeneratedId(testCaseDTO.getTestCaseName(), "EMAIL", testCaseDTO.getTestCaseName() + "@mosip.net"); + writeAutoGeneratedId(testCaseDTO.getTestCaseName(), "PHONE", phoneNumber); + } + if (!phoneNumber.isEmpty()) + writeAutoGeneratedId(testCaseDTO.getTestCaseName(), "PHONE", phoneNumber); + } + + /** + * The method ser current test name to result + * + * @param result + */ + @AfterMethod(alwaysRun = true) + public void setResultTestName(ITestResult result) { + try { + Field method = TestResult.class.getDeclaredField("m_method"); + method.setAccessible(true); + method.set(result, result.getMethod().clone()); + BaseTestMethod baseTestMethod = (BaseTestMethod) result.getMethod(); + Field f = baseTestMethod.getClass().getSuperclass().getDeclaredField("m_methodName"); + f.setAccessible(true); + f.set(baseTestMethod, testCaseName); + } catch (Exception e) { + Reporter.log("Exception : " + e.getMessage()); + } + } + + @AfterClass(alwaysRun = true) + public void waittime() { + + try { + logger.info( + "waiting for " + properties.getProperty("Delaytime") + " mili secs after UIN Generation In IDREPO"); + Thread.sleep(Long.parseLong(properties.getProperty("Delaytime"))); + + } catch (Exception e) { + logger.error("Exception : " + e.getMessage()); + Thread.currentThread().interrupt(); + } + + } +} diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java new file mode 100644 index 000000000..e450cf8ba --- /dev/null +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java @@ -0,0 +1,175 @@ +package io.mosip.testrig.apirig.testscripts; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.json.JSONObject; +import org.testng.ITest; +import org.testng.ITestContext; +import org.testng.ITestResult; +import org.testng.Reporter; +import org.testng.SkipException; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; +import org.testng.internal.BaseTestMethod; +import org.testng.internal.TestResult; + +import io.mosip.testrig.apirig.dto.OutputValidationDto; +import io.mosip.testrig.apirig.dto.TestCaseDTO; +import io.mosip.testrig.apirig.testrunner.BaseTestCase; +import io.mosip.testrig.apirig.testrunner.HealthChecker; +import io.mosip.testrig.apirig.utils.AdminTestException; +import io.mosip.testrig.apirig.utils.AdminTestUtil; +import io.mosip.testrig.apirig.utils.AuthenticationTestException; +import io.mosip.testrig.apirig.utils.ConfigManager; +import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.OutputValidationUtil; +import io.mosip.testrig.apirig.utils.ReportUtil; +import io.restassured.response.Response; + +public class GetWithParam extends AdminTestUtil implements ITest { + private static final Logger logger = Logger.getLogger(GetWithParam.class); + protected String testCaseName = ""; + public Response response = null; + public boolean sendEsignetToken = false; + public boolean auditLogCheck = false; + + @BeforeClass + public static void setLogLevel() { + if (ConfigManager.IsDebugEnabled()) + logger.setLevel(Level.ALL); + else + logger.setLevel(Level.ERROR); + } + + /** + * get current testcaseName + */ + @Override + public String getTestName() { + return testCaseName; + } + + /** + * Data provider class provides test case list + * + * @return object of data provider + */ + @DataProvider(name = "testcaselist") + public Object[] getTestCaseList(ITestContext context) { + String ymlFile = context.getCurrentXmlTest().getLocalParameters().get("ymlFile"); + sendEsignetToken = context.getCurrentXmlTest().getLocalParameters().containsKey("sendEsignetToken"); + logger.info("Started executing yml: " + ymlFile); + return getYmlTestData(ymlFile); + } + + /** + * Test method for OTP Generation execution + * + * @param objTestParameters + * @param testScenario + * @param testcaseName + * @throws AuthenticationTestException + * @throws AdminTestException + */ + @Test(dataProvider = "testcaselist") + public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException { + testCaseName = testCaseDTO.getTestCaseName(); + testCaseName = isTestCaseValidForExecution(testCaseDTO); + if (HealthChecker.signalTerminateExecution) { + throw new SkipException( + GlobalConstants.TARGET_ENV_HEALTH_CHECK_FAILED + HealthChecker.healthCheckFailureMapS); + } + + if (testCaseDTO.getTestCaseName().contains("VID") || testCaseDTO.getTestCaseName().contains("Vid")) { + if (!BaseTestCase.getSupportedIdTypesValueFromActuator().contains("VID") + && !BaseTestCase.getSupportedIdTypesValueFromActuator().contains("vid")) { + throw new SkipException(GlobalConstants.VID_FEATURE_NOT_SUPPORTED); + } + } + auditLogCheck = testCaseDTO.isAuditLogCheck(); + String[] templateFields = testCaseDTO.getTemplateFields(); + + if (testCaseDTO.getInputTemplate().contains(GlobalConstants.$PRIMARYLANG$)) + testCaseDTO.setInputTemplate(testCaseDTO.getInputTemplate().replace(GlobalConstants.$PRIMARYLANG$, + BaseTestCase.languageList.get(0))); + if (testCaseDTO.getOutputTemplate().contains(GlobalConstants.$PRIMARYLANG$)) + testCaseDTO.setOutputTemplate(testCaseDTO.getOutputTemplate().replace(GlobalConstants.$PRIMARYLANG$, + BaseTestCase.languageList.get(0))); + if (testCaseDTO.getInput().contains(GlobalConstants.$PRIMARYLANG$)) + testCaseDTO.setInput( + testCaseDTO.getInput().replace(GlobalConstants.$PRIMARYLANG$, BaseTestCase.languageList.get(0))); + if (testCaseDTO.getOutput().contains(GlobalConstants.$PRIMARYLANG$)) + testCaseDTO.setOutput( + testCaseDTO.getOutput().replace(GlobalConstants.$PRIMARYLANG$, BaseTestCase.languageList.get(0))); + + if (testCaseDTO.getTemplateFields() != null && templateFields.length > 0) { + ArrayList inputtestCases = AdminTestUtil.getInputTestCase(testCaseDTO); + ArrayList outputtestcase = AdminTestUtil.getOutputTestCase(testCaseDTO); + for (int i = 0; i < languageList.size(); i++) { + response = getWithPathParamAndCookie(ApplnURI + testCaseDTO.getEndPoint(), + getJsonFromTemplate(inputtestCases.get(i).toString(), testCaseDTO.getInputTemplate()), + COOKIENAME, testCaseDTO.getRole(), testCaseDTO.getTestCaseName()); + + Map> ouputValid = OutputValidationUtil.doJsonOutputValidation( + response.asString(), + getJsonFromTemplate(outputtestcase.get(i).toString(), testCaseDTO.getOutputTemplate()), + testCaseDTO, response.getStatusCode()); + Reporter.log(ReportUtil.getOutputValidationReport(ouputValid)); + + if (!OutputValidationUtil.publishOutputResult(ouputValid)) + throw new AdminTestException("Failed at output validation"); + } + } + + else { + response = getWithPathParamAndCookie(ApplnURI + testCaseDTO.getEndPoint(), + getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()), auditLogCheck, + COOKIENAME, testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), sendEsignetToken); + Map> ouputValid = null; + if (testCaseName.contains("_StatusCode")) { + + OutputValidationDto customResponse = customStatusCodeResponse(String.valueOf(response.getStatusCode()), + testCaseDTO.getOutput()); + + ouputValid = new HashMap<>(); + ouputValid.put(GlobalConstants.EXPECTED_VS_ACTUAL, List.of(customResponse)); + } else { + ouputValid = OutputValidationUtil.doJsonOutputValidation(response.asString(), + getJsonFromTemplate(testCaseDTO.getOutput(), testCaseDTO.getOutputTemplate()), testCaseDTO, + response.getStatusCode()); + } + + Reporter.log(ReportUtil.getOutputValidationReport(ouputValid)); + if (!OutputValidationUtil.publishOutputResult(ouputValid)) + throw new AdminTestException("Failed at output validation"); + } + } + + /** + * The method ser current test name to result + * + * @param result + */ + @AfterMethod(alwaysRun = true) + public void setResultTestName(ITestResult result) { + try { + Field method = TestResult.class.getDeclaredField("m_method"); + method.setAccessible(true); + method.set(result, result.getMethod().clone()); + BaseTestMethod baseTestMethod = (BaseTestMethod) result.getMethod(); + Field f = baseTestMethod.getClass().getSuperclass().getDeclaredField("m_methodName"); + f.setAccessible(true); + f.set(baseTestMethod, testCaseName); + } catch (Exception e) { + Reporter.log("Exception : " + e.getMessage()); + } + } +} diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java new file mode 100644 index 000000000..5e6c9ebe7 --- /dev/null +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java @@ -0,0 +1,233 @@ +package io.mosip.testrig.apirig.testscripts; + +import java.lang.reflect.Field; +import java.util.List; +import java.util.Map; + +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.json.JSONObject; +import org.testng.ITest; +import org.testng.ITestContext; +import org.testng.ITestResult; +import org.testng.Reporter; +import org.testng.SkipException; +import org.testng.annotations.AfterClass; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; +import org.testng.internal.BaseTestMethod; +import org.testng.internal.TestResult; + +import io.mosip.testrig.apirig.dto.OutputValidationDto; +import io.mosip.testrig.apirig.dto.TestCaseDTO; +import io.mosip.testrig.apirig.testrunner.BaseTestCase; +import io.mosip.testrig.apirig.testrunner.HealthChecker; +import io.mosip.testrig.apirig.utils.AdminTestException; +import io.mosip.testrig.apirig.utils.AdminTestUtil; +import io.mosip.testrig.apirig.utils.AuthenticationTestException; +import io.mosip.testrig.apirig.utils.ConfigManager; +import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.OutputValidationUtil; +import io.mosip.testrig.apirig.utils.ReportUtil; +import io.restassured.response.Response; + +public class PostWithAutogenIdWithOtpGenerate extends AdminTestUtil implements ITest { + private static final Logger logger = Logger.getLogger(PostWithAutogenIdWithOtpGenerate.class); + protected String testCaseName = ""; + public String idKeyName = null; + public Response response = null; + public boolean auditLogCheck = false; + + @BeforeClass + public static void setLogLevel() { + if (ConfigManager.IsDebugEnabled()) + logger.setLevel(Level.ALL); + else + logger.setLevel(Level.ERROR); + } + + /** + * get current testcaseName + */ + @Override + public String getTestName() { + return testCaseName; + } + + /** + * Data provider class provides test case list + * + * @return object of data provider + */ + @DataProvider(name = "testcaselist") + public Object[] getTestCaseList(ITestContext context) { + String ymlFile = context.getCurrentXmlTest().getLocalParameters().get("ymlFile"); + idKeyName = context.getCurrentXmlTest().getLocalParameters().get("idKeyName"); + logger.info("Started executing yml: " + ymlFile); + return getYmlTestData(ymlFile); + } + + /** + * Test method for OTP Generation execution + * + * @param objTestParameters + * @param testScenario + * @param testcaseName + * @throws AuthenticationTestException + * @throws AdminTestException + * @throws InterruptedException + * @throws NumberFormatException + */ + @Test(dataProvider = "testcaselist") + public void test(TestCaseDTO testCaseDTO) + throws AuthenticationTestException, AdminTestException, NumberFormatException, InterruptedException { + testCaseName = testCaseDTO.getTestCaseName(); + if (HealthChecker.signalTerminateExecution) { + throw new SkipException( + GlobalConstants.TARGET_ENV_HEALTH_CHECK_FAILED + HealthChecker.healthCheckFailureMapS); + } + + if (testCaseDTO.getTestCaseName().contains("VID") || testCaseDTO.getTestCaseName().contains("Vid")) { + if (!BaseTestCase.getSupportedIdTypesValueFromActuator().contains("VID") + && !BaseTestCase.getSupportedIdTypesValueFromActuator().contains("vid")) { + throw new SkipException(GlobalConstants.VID_FEATURE_NOT_SUPPORTED); + } + } + testCaseName = isTestCaseValidForExecution(testCaseDTO); + + String inputJson = testCaseDTO.getInput().toString(); + JSONObject req = new JSONObject(testCaseDTO.getInput()); + + if (inputJson.contains("$PHONENUMBERFROMREGEXFORSIGNUP$")) { + String phoneNumber = getPhoneNumber(); + if (phoneNumber != null && !phoneNumber.isEmpty()) { + inputJson = replaceKeywordWithValue(inputJson, "$PHONENUMBERFROMREGEXFORSIGNUP$", phoneNumber); + req = new JSONObject(inputJson); + writeAutoGeneratedId(testCaseDTO.getTestCaseName(), "PHONE", phoneNumber); + } + } + + auditLogCheck = testCaseDTO.isAuditLogCheck(); + String otpRequest = null; + String sendOtpReqTemplate = null; + String sendOtpEndPoint = null; + if (req.has(GlobalConstants.SENDOTP)) { + otpRequest = req.get(GlobalConstants.SENDOTP).toString(); + req.remove(GlobalConstants.SENDOTP); + } + JSONObject otpReqJson = new JSONObject(otpRequest); + sendOtpReqTemplate = otpReqJson.getString("sendOtpReqTemplate"); + otpReqJson.remove("sendOtpReqTemplate"); + sendOtpEndPoint = otpReqJson.getString("sendOtpEndPoint"); + otpReqJson.remove("sendOtpEndPoint"); + + Response otpResponse = null; + int maxLoopCount = Integer.parseInt(properties.getProperty("uinGenMaxLoopCount")); + int currLoopCount = 0; + while (currLoopCount < maxLoopCount) { + otpResponse = postWithBodyAndCookie(ApplnURI + sendOtpEndPoint, + getJsonFromTemplate(otpReqJson.toString(), sendOtpReqTemplate), COOKIENAME, + GlobalConstants.RESIDENT, testCaseDTO.getTestCaseName()); + + if (otpResponse != null && otpResponse.asString().contains("IDA-MLC-018")) { + logger.info("waiting for: " + properties.getProperty("uinGenDelayTime") + + " as UIN not available in database"); + try { + Thread.sleep(Long.parseLong(properties.getProperty("uinGenDelayTime"))); +// SlackChannelIntegration.sendMessageToSlack("UIN not available in database in :" + ApplnURI + "Env") ; + + } catch (NumberFormatException | InterruptedException e) { + logger.error(e.getMessage()); + Thread.currentThread().interrupt(); + } + } else { + break; + } + + currLoopCount++; + } + + JSONObject res = new JSONObject(testCaseDTO.getOutput()); + String sendOtpResp = null; + String sendOtpResTemplate = null; + if (res.has(GlobalConstants.SENDOTPRESP)) { + sendOtpResp = res.get(GlobalConstants.SENDOTPRESP).toString(); + res.remove(GlobalConstants.SENDOTPRESP); + } + JSONObject sendOtpRespJson = new JSONObject(sendOtpResp); + sendOtpResTemplate = sendOtpRespJson.getString("sendOtpResTemplate"); + sendOtpRespJson.remove("sendOtpResTemplate"); + if (otpResponse != null) { + Map> ouputValidOtp = OutputValidationUtil.doJsonOutputValidation( + otpResponse.asString(), getJsonFromTemplate(sendOtpRespJson.toString(), sendOtpResTemplate), + testCaseDTO, otpResponse.getStatusCode()); + Reporter.log(ReportUtil.getOutputValidationReport(ouputValidOtp)); + + if (!OutputValidationUtil.publishOutputResult(ouputValidOtp)) { + if (otpResponse.asString().contains("IDA-OTA-001")) { +// SlackChannelIntegration.sendMessageToSlack("Exceeded number of OTP requests in a given time, :" + ApplnURI + "Env") ; + throw new AdminTestException( + "Exceeded number of OTP requests in a given time, Increase otp.request.flooding.max-count"); + } + + else + throw new AdminTestException("Failed at otp output validation"); + } + + } else { + throw new AdminTestException("Invalid otp response"); + } + + + response = postWithBodyAndCookieForAutoGeneratedId(ApplnURI + testCaseDTO.getEndPoint(), + getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()), auditLogCheck, COOKIENAME, + testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), idKeyName); + + Map> ouputValid = OutputValidationUtil.doJsonOutputValidation( + response.asString(), getJsonFromTemplate(res.toString(), testCaseDTO.getOutputTemplate()), testCaseDTO, + response.getStatusCode()); + Reporter.log(ReportUtil.getOutputValidationReport(ouputValid)); + + if (!OutputValidationUtil.publishOutputResult(ouputValid)) + throw new AdminTestException("Failed at output validation"); + + } + + /** + * The method ser current test name to result + * + * @param result + */ + @AfterMethod(alwaysRun = true) + public void setResultTestName(ITestResult result) { + try { + Field method = TestResult.class.getDeclaredField("m_method"); + method.setAccessible(true); + method.set(result, result.getMethod().clone()); + BaseTestMethod baseTestMethod = (BaseTestMethod) result.getMethod(); + Field f = baseTestMethod.getClass().getSuperclass().getDeclaredField("m_methodName"); + f.setAccessible(true); + f.set(baseTestMethod, testCaseName); + } catch (Exception e) { + Reporter.log("Exception : " + e.getMessage()); + } + } + + @AfterClass(alwaysRun = true) + public void waittime() { + try { + long delayTime = Long.parseLong(properties.getProperty("Delaytime")); + if (!BaseTestCase.isTargetEnvLTS()) + delayTime = Long.parseLong(properties.getProperty("uinGenDelayTime")) + * Long.parseLong(properties.getProperty("uinGenMaxLoopCount")); + logger.info("waiting for " + delayTime + " mili secs after VID Generation In RESIDENT SERVICES"); + Thread.sleep(delayTime); + } catch (Exception e) { + logger.error("Exception : " + e.getMessage()); + Thread.currentThread().interrupt(); + } + + } +} diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithBodyWithOtpGenerate.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithBodyWithOtpGenerate.java new file mode 100644 index 000000000..1cded4cfa --- /dev/null +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithBodyWithOtpGenerate.java @@ -0,0 +1,181 @@ +package io.mosip.testrig.apirig.testscripts; + +import java.lang.reflect.Field; +import java.util.List; +import java.util.Map; + +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.json.JSONObject; +import org.testng.ITest; +import org.testng.ITestContext; +import org.testng.ITestResult; +import org.testng.Reporter; +import org.testng.SkipException; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; +import org.testng.internal.BaseTestMethod; +import org.testng.internal.TestResult; + +import io.mosip.testrig.apirig.dto.OutputValidationDto; +import io.mosip.testrig.apirig.dto.TestCaseDTO; +import io.mosip.testrig.apirig.testrunner.BaseTestCase; +import io.mosip.testrig.apirig.testrunner.HealthChecker; +import io.mosip.testrig.apirig.utils.AdminTestException; +import io.mosip.testrig.apirig.utils.AdminTestUtil; +import io.mosip.testrig.apirig.utils.AuthenticationTestException; +import io.mosip.testrig.apirig.utils.ConfigManager; +import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.OutputValidationUtil; +import io.mosip.testrig.apirig.utils.ReportUtil; +import io.restassured.response.Response; + +public class PostWithBodyWithOtpGenerate extends AdminTestUtil implements ITest { + private static final Logger logger = Logger.getLogger(PostWithBodyWithOtpGenerate.class); + protected String testCaseName = ""; + public Response response = null; + public boolean sendEsignetToken = false; + public boolean auditLogCheck = false; + + @BeforeClass + public static void setLogLevel() { + if (ConfigManager.IsDebugEnabled()) + logger.setLevel(Level.ALL); + else + logger.setLevel(Level.ERROR); + } + + /** + * get current testcaseName + */ + @Override + public String getTestName() { + return testCaseName; + } + + /** + * Data provider class provides test case list + * + * @return object of data provider + */ + @DataProvider(name = "testcaselist") + public Object[] getTestCaseList(ITestContext context) { + String ymlFile = context.getCurrentXmlTest().getLocalParameters().get("ymlFile"); + sendEsignetToken = context.getCurrentXmlTest().getLocalParameters().containsKey("sendEsignetToken"); + logger.info("Started executing yml: " + ymlFile); + return getYmlTestData(ymlFile); + } + + /** + * Test method for OTP Generation execution + * + * @param objTestParameters + * @param testScenario + * @param testcaseName + * @throws AuthenticationTestException + * @throws AdminTestException + */ + @Test(dataProvider = "testcaselist") + public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException { + testCaseName = testCaseDTO.getTestCaseName(); + if (HealthChecker.signalTerminateExecution) { + throw new SkipException( + GlobalConstants.TARGET_ENV_HEALTH_CHECK_FAILED + HealthChecker.healthCheckFailureMapS); + } + if (testCaseDTO.getTestCaseName().contains("VID") || testCaseDTO.getTestCaseName().contains("Vid")) { + if (!BaseTestCase.getSupportedIdTypesValueFromActuator().contains("VID") + && !BaseTestCase.getSupportedIdTypesValueFromActuator().contains("vid")) { + throw new SkipException(GlobalConstants.VID_FEATURE_NOT_SUPPORTED); + } + } + + testCaseName = isTestCaseValidForExecution(testCaseDTO); + auditLogCheck = testCaseDTO.isAuditLogCheck(); + String tempUrl = ConfigManager.getEsignetBaseUrl(); + JSONObject req = new JSONObject(testCaseDTO.getInput()); + String otpRequest = null; + String sendOtpReqTemplate = null; + String sendOtpEndPoint = null; + if (req.has(GlobalConstants.SENDOTP)) { + otpRequest = req.get(GlobalConstants.SENDOTP).toString(); + req.remove(GlobalConstants.SENDOTP); + } + JSONObject otpReqJson = new JSONObject(otpRequest); + sendOtpReqTemplate = otpReqJson.getString("sendOtpReqTemplate"); + otpReqJson.remove("sendOtpReqTemplate"); + sendOtpEndPoint = otpReqJson.getString("sendOtpEndPoint"); + otpReqJson.remove("sendOtpEndPoint"); + Response otpResponse = null; + + otpResponse = postWithBodyAndCookie(ApplnURI + sendOtpEndPoint, + getJsonFromTemplate(otpReqJson.toString(), sendOtpReqTemplate), COOKIENAME, GlobalConstants.RESIDENT, + testCaseDTO.getTestCaseName()); + + JSONObject res = new JSONObject(testCaseDTO.getOutput()); + String sendOtpResp = null, sendOtpResTemplate = null; + if (res.has(GlobalConstants.SENDOTPRESP)) { + sendOtpResp = res.get(GlobalConstants.SENDOTPRESP).toString(); + res.remove(GlobalConstants.SENDOTPRESP); + } + JSONObject sendOtpRespJson = new JSONObject(sendOtpResp); + sendOtpResTemplate = sendOtpRespJson.getString("sendOtpResTemplate"); + sendOtpRespJson.remove("sendOtpResTemplate"); + Map> ouputValidOtp = OutputValidationUtil.doJsonOutputValidation( + otpResponse.asString(), getJsonFromTemplate(sendOtpRespJson.toString(), sendOtpResTemplate), + testCaseDTO, otpResponse.getStatusCode()); + Reporter.log(ReportUtil.getOutputValidationReport(ouputValidOtp)); + + if (!OutputValidationUtil.publishOutputResult(ouputValidOtp)) { + if (otpResponse.asString().contains("IDA-OTA-001")) + throw new AdminTestException( + "Exceeded number of OTP requests in a given time, Increase otp.request.flooding.max-count"); + else + throw new AdminTestException("Failed at otp output validation"); + } + + if (testCaseName.contains("_eotp")) { + try { + logger.info("waiting for " + properties.getProperty("expireOtpTime") + + " mili secs to test expire otp case in RESIDENT Service"); + Thread.sleep(Long.parseLong(properties.getProperty("expireOtpTime"))); + } catch (NumberFormatException | InterruptedException e) { + logger.error(e.getMessage()); + Thread.currentThread().interrupt(); + } + } + + response = postRequestWithCookieAndHeader(ApplnURI + testCaseDTO.getEndPoint(), + getJsonFromTemplate(req.toString(), testCaseDTO.getInputTemplate()), COOKIENAME, testCaseDTO.getRole(), + testCaseDTO.getTestCaseName(), sendEsignetToken); + Map> ouputValid = OutputValidationUtil.doJsonOutputValidation( + response.asString(), getJsonFromTemplate(res.toString(), testCaseDTO.getOutputTemplate()), testCaseDTO, + response.getStatusCode()); + Reporter.log(ReportUtil.getOutputValidationReport(ouputValid)); + + if (!OutputValidationUtil.publishOutputResult(ouputValid)) + throw new AdminTestException("Failed at output validation"); + + } + + /** + * The method ser current test name to result + * + * @param result + */ + @AfterMethod(alwaysRun = true) + public void setResultTestName(ITestResult result) { + try { + Field method = TestResult.class.getDeclaredField("m_method"); + method.setAccessible(true); + method.set(result, result.getMethod().clone()); + BaseTestMethod baseTestMethod = (BaseTestMethod) result.getMethod(); + Field f = baseTestMethod.getClass().getSuperclass().getDeclaredField("m_methodName"); + f.setAccessible(true); + f.set(baseTestMethod, testCaseName); + } catch (Exception e) { + Reporter.log("Exception : " + e.getMessage()); + } + } +} diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java new file mode 100644 index 000000000..927e8d0fe --- /dev/null +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java @@ -0,0 +1,207 @@ +package io.mosip.testrig.apirig.testscripts; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.json.JSONObject; +import org.testng.ITest; +import org.testng.ITestContext; +import org.testng.ITestResult; +import org.testng.Reporter; +import org.testng.SkipException; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; +import org.testng.internal.BaseTestMethod; +import org.testng.internal.TestResult; + +import io.mosip.testrig.apirig.dto.OutputValidationDto; +import io.mosip.testrig.apirig.dto.TestCaseDTO; +import io.mosip.testrig.apirig.testrunner.BaseTestCase; +import io.mosip.testrig.apirig.testrunner.HealthChecker; +import io.mosip.testrig.apirig.utils.AdminTestException; +import io.mosip.testrig.apirig.utils.AdminTestUtil; +import io.mosip.testrig.apirig.utils.AuthenticationTestException; +import io.mosip.testrig.apirig.utils.ConfigManager; +import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.OutputValidationUtil; +import io.mosip.testrig.apirig.utils.ReportUtil; +import io.restassured.response.Response; + +public class SimplePost extends AdminTestUtil implements ITest { + private static final Logger logger = Logger.getLogger(SimplePost.class); + protected String testCaseName = ""; + public Response response = null; + public boolean sendEsignetToken = false; + public boolean auditLogCheck = false; + + @BeforeClass + public static void setLogLevel() { + if (ConfigManager.IsDebugEnabled()) + logger.setLevel(Level.ALL); + else + logger.setLevel(Level.ERROR); + } + + /** + * get current testcaseName + */ + @Override + public String getTestName() { + return testCaseName; + } + + /** + * Data provider class provides test case list + * + * @return object of data provider + */ + @DataProvider(name = "testcaselist") + public Object[] getTestCaseList(ITestContext context) { + String ymlFile = context.getCurrentXmlTest().getLocalParameters().get("ymlFile"); + sendEsignetToken = context.getCurrentXmlTest().getLocalParameters().containsKey("sendEsignetToken"); + logger.info("Started executing yml: " + ymlFile); + return getYmlTestData(ymlFile); + } + + /** + * Test method for OTP Generation execution + * + * @param objTestParameters + * @param testScenario + * @param testcaseName + * @throws AuthenticationTestException + * @throws AdminTestException + */ + @Test(dataProvider = "testcaselist") + public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException { + testCaseName = testCaseDTO.getTestCaseName(); + testCaseName = isTestCaseValidForExecution(testCaseDTO); + auditLogCheck = testCaseDTO.isAuditLogCheck(); + String[] templateFields = testCaseDTO.getTemplateFields(); + if (HealthChecker.signalTerminateExecution) { + throw new SkipException( + GlobalConstants.TARGET_ENV_HEALTH_CHECK_FAILED + HealthChecker.healthCheckFailureMapS); + } + + if (testCaseDTO.getTestCaseName().contains("VID") || testCaseDTO.getTestCaseName().contains("Vid")) { + if (!BaseTestCase.getSupportedIdTypesValueFromActuator().contains("VID") + && !BaseTestCase.getSupportedIdTypesValueFromActuator().contains("vid")) { + throw new SkipException(GlobalConstants.VID_FEATURE_NOT_SUPPORTED); + } + } + + String inputJson = getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()); + if (testCaseName.contains("CreateIdSchema")) { + inputJson = modifyIdSchemaInputJson(inputJson); + } + + if (inputJson.contains(""")) { + inputJson = inputJson.replace(""", "\""); + } + + if (inputJson.contains("$PHONENUMBERFROMREGEXFORSIGNUP$")) { + String phoneNumber = getPhoneNumber(); + if (phoneNumber != null && !phoneNumber.isEmpty()) { + inputJson = replaceKeywordWithValue(inputJson, "$PHONENUMBERFROMREGEXFORSIGNUP$", phoneNumber); + writeAutoGeneratedId(testCaseDTO.getTestCaseName(), "PHONE", phoneNumber); + } + } + + if (inputJson.contains("$FULLNAMETOREGISTERUSER$")) { + String jsonString = generateFullNameToRegisterUser(inputJson, testCaseDTO.getTestCaseName()); + if (!jsonString.isBlank()) + inputJson = jsonString; + } + + if (inputJson.contains("$PASSWORDTOREGISTERUSER$")) { +// String password = getPasswordPattern(); + String password = PASSWORD_FOR_ADDIDENTITY_AND_REGISTRATION; + if (password != null && !password.isEmpty()) { + inputJson = replaceKeywordWithValue(inputJson, "$PASSWORDTOREGISTERUSER$", password); +// writeAutoGeneratedId(testCaseDTO.getTestCaseName(), "PASSWORD", password); + } + } + + if (inputJson.contains("$PASSWORDTORESET$")) { + String passwordToReset = PASSWORD_TO_RESET; + if (passwordToReset != null && !passwordToReset.isEmpty()) { + inputJson = replaceKeywordWithValue(inputJson, "$PASSWORDTORESET$", passwordToReset); + } + } + + if (testCaseDTO.getTemplateFields() != null && templateFields.length > 0) { + ArrayList inputtestCases = AdminTestUtil.getInputTestCase(testCaseDTO); + ArrayList outputtestcase = AdminTestUtil.getOutputTestCase(testCaseDTO); + for (int i = 0; i < languageList.size(); i++) { + response = postWithBodyAndCookie(ApplnURI + testCaseDTO.getEndPoint(), + getJsonFromTemplate(inputtestCases.get(i).toString(), testCaseDTO.getInputTemplate()), + COOKIENAME, testCaseDTO.getRole(), testCaseDTO.getTestCaseName()); + + Map> ouputValid = OutputValidationUtil.doJsonOutputValidation( + response.asString(), + getJsonFromTemplate(outputtestcase.get(i).toString(), testCaseDTO.getOutputTemplate()), + testCaseDTO, response.getStatusCode()); + Reporter.log(ReportUtil.getOutputValidationReport(ouputValid)); + + if (!OutputValidationUtil.publishOutputResult(ouputValid)) + throw new AdminTestException("Failed at output validation"); + } + } + + else { + response = postWithBodyAndCookie(ApplnURI + testCaseDTO.getEndPoint(), inputJson, auditLogCheck, COOKIENAME, + testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), sendEsignetToken); + Map> ouputValid = null; + if (testCaseName.contains("_StatusCode")) { + + OutputValidationDto customResponse = customStatusCodeResponse(String.valueOf(response.getStatusCode()), + testCaseDTO.getOutput()); + + ouputValid = new HashMap<>(); + ouputValid.put(GlobalConstants.EXPECTED_VS_ACTUAL, List.of(customResponse)); + } else { + ouputValid = OutputValidationUtil.doJsonOutputValidation(response.asString(), + getJsonFromTemplate(testCaseDTO.getOutput(), testCaseDTO.getOutputTemplate()), testCaseDTO, + response.getStatusCode()); + } + + Reporter.log(ReportUtil.getOutputValidationReport(ouputValid)); + + if (!OutputValidationUtil.publishOutputResult(ouputValid)) { + if (response.asString().contains("IDA-OTA-001")) + throw new AdminTestException( + "Exceeded number of OTP requests in a given time, Increase otp.request.flooding.max-count"); + else + throw new AdminTestException("Failed at otp output validation"); + } + } + + } + + /** + * The method ser current test name to result + * + * @param result + */ + @AfterMethod(alwaysRun = true) + public void setResultTestName(ITestResult result) { + try { + Field method = TestResult.class.getDeclaredField("m_method"); + method.setAccessible(true); + method.set(result, result.getMethod().clone()); + BaseTestMethod baseTestMethod = (BaseTestMethod) result.getMethod(); + Field f = baseTestMethod.getClass().getSuperclass().getDeclaredField("m_methodName"); + f.setAccessible(true); + f.set(baseTestMethod, testCaseName); + } catch (Exception e) { + Reporter.log("Exception : " + e.getMessage()); + } + } +} diff --git a/apitest/src/main/resources/config/AuthPolicy.json b/apitest/src/main/resources/config/AuthPolicy.json new file mode 100644 index 000000000..3628348c2 --- /dev/null +++ b/apitest/src/main/resources/config/AuthPolicy.json @@ -0,0 +1,7 @@ +{ + "id": "string", + "metadata": {}, + "request": {}, + "requesttime": "2022-09-07T04:23:38.117Z", + "version": "string" +} \ No newline at end of file diff --git a/apitest/src/main/resources/config/AuthPolicy2.json b/apitest/src/main/resources/config/AuthPolicy2.json new file mode 100644 index 000000000..525415bb3 --- /dev/null +++ b/apitest/src/main/resources/config/AuthPolicy2.json @@ -0,0 +1,82 @@ +{ + "allowedAuthTypes": [ + { + "authSubType": "IRIS", + "authType": "bio", + "mandatory": false + }, + { + "authSubType": "FINGER", + "authType": "bio", + "mandatory": false + }, + { + "authSubType": "FACE", + "authType": "bio", + "mandatory": false + }, + { + "authSubType": "", + "authType": "otp", + "mandatory": false + }, + { + "authSubType": "", + "authType": "otp-request", + "mandatory": false + }, + { + "authSubType": "", + "authType": "kyc", + "mandatory": false + }, + { + "authSubType": "", + "authType": "demo", + "mandatory": false + } + ], + "kycLanguages": [ + "ara", + "eng" + ], + "allowedKycAttributes": [ + { + "attributeName": "fullName" + }, + { + "attributeName": "gender" + }, + { + "attributeName": "residenceStatus" + }, + { + "attributeName": "dateOfBirth" + }, + { + "attributeName": "photo" + }, + { + "attributeName": "firstName" + }, + { + "attributeName": "province" + }, + { + "attributeName": "city" + }, + { + "attributeName": "zone" + }, + { + "attributeName": "postalCode" + }, + { + "attributeName": "phone" + }, + { + "attributeName": "email" + } + ], + "authTokenType": "partner" + } \ No newline at end of file diff --git a/apitest/src/main/resources/config/AuthPolicy3.json b/apitest/src/main/resources/config/AuthPolicy3.json new file mode 100644 index 000000000..d7f53a6ac --- /dev/null +++ b/apitest/src/main/resources/config/AuthPolicy3.json @@ -0,0 +1,8 @@ +{ + "desc":"desc mosip auth policy", + "name":"mosip auth policy 2345678", + "policyGroupName":"mosip auth policy group 2345678", + "policyType":"Auth", + "version": "1.0", + "policies": {} + } \ No newline at end of file diff --git a/apitest/src/main/resources/config/AuthPolicy4.json b/apitest/src/main/resources/config/AuthPolicy4.json new file mode 100644 index 000000000..3628348c2 --- /dev/null +++ b/apitest/src/main/resources/config/AuthPolicy4.json @@ -0,0 +1,7 @@ +{ + "id": "string", + "metadata": {}, + "request": {}, + "requesttime": "2022-09-07T04:23:38.117Z", + "version": "string" +} \ No newline at end of file diff --git a/apitest/src/main/resources/config/AuthPolicy5.json b/apitest/src/main/resources/config/AuthPolicy5.json new file mode 100644 index 000000000..d7f53a6ac --- /dev/null +++ b/apitest/src/main/resources/config/AuthPolicy5.json @@ -0,0 +1,8 @@ +{ + "desc":"desc mosip auth policy", + "name":"mosip auth policy 2345678", + "policyGroupName":"mosip auth policy group 2345678", + "policyType":"Auth", + "version": "1.0", + "policies": {} + } \ No newline at end of file diff --git a/apitest/src/main/resources/config/AuthPolicy6.json b/apitest/src/main/resources/config/AuthPolicy6.json new file mode 100644 index 000000000..fb161e611 --- /dev/null +++ b/apitest/src/main/resources/config/AuthPolicy6.json @@ -0,0 +1,41 @@ +{ + "allowedAuthTypes": [ + { + "authSubType": "IRIS", + "authType": "bio", + "mandatory": true + }, + { + "authSubType": "FINGER", + "authType": "bio", + "mandatory": true + }, + { + "authSubType": "FACE", + "authType": "bio", + "mandatory": true + }, + { + "authSubType": "", + "authType": "otp-request", + "mandatory": false + }, + { + "authSubType": "", + "authType": "kyc", + "mandatory": false + }, + { + "authSubType": "", + "authType": "demo", + "mandatory": false + } + ], + "kycLanguages": [ + "ara", + "eng" + ], + "allowedKycAttributes": [ + ], + "authTokenType": "partner" + } \ No newline at end of file diff --git a/apitest/src/main/resources/config/Authorization/OtpGeneration/request.json b/apitest/src/main/resources/config/Authorization/OtpGeneration/request.json new file mode 100644 index 000000000..7ce05cc51 --- /dev/null +++ b/apitest/src/main/resources/config/Authorization/OtpGeneration/request.json @@ -0,0 +1,16 @@ +{ + "id": "string", + "metadata": {}, + "request": { + "appId": "prereg", + "context": "auth-otp", + "otpChannel": [ + "EMAIL" + ], + "templateVariables": {}, + "userId": "robin.hood@mailinator.com", + "useridtype": "USERID" + }, + "requesttime": "2018-12-10T06:12:52.994Z", + "version": "string" +} \ No newline at end of file diff --git a/apitest/src/main/resources/config/Authorization/OtpValidation/request.json b/apitest/src/main/resources/config/Authorization/OtpValidation/request.json new file mode 100644 index 000000000..800b94ad6 --- /dev/null +++ b/apitest/src/main/resources/config/Authorization/OtpValidation/request.json @@ -0,0 +1,11 @@ +{ + "id": "string", + "metadata": {}, + "request": { + "appId": "prereg", + "otp": "837439", + "userId": "9972388747" + }, + "requesttime": "2018-12-10T06:12:52.994Z", + "version": "string" +} \ No newline at end of file diff --git a/apitest/src/main/resources/config/Authorization/errorUIN.json b/apitest/src/main/resources/config/Authorization/errorUIN.json new file mode 100644 index 000000000..f54f8c7a8 --- /dev/null +++ b/apitest/src/main/resources/config/Authorization/errorUIN.json @@ -0,0 +1,17 @@ +{ + "transactionID": "$IGNORE$", + "version": "$IGNORE$", + "id": "$IGNORE$", + "errors": [ + { + "errorCode": "IDA-MLC-015", + "errorMessage": "$IGNORE$", + "actionMessage": "$IGNORE$" + } + ], + "responseTime": "$IGNORE$", + "response": { + "authStatus": false, + "authToken": "$IGNORE$" + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/config/Authorization/internalAuthRequest.json b/apitest/src/main/resources/config/Authorization/internalAuthRequest.json new file mode 100644 index 000000000..57aa8f2f6 --- /dev/null +++ b/apitest/src/main/resources/config/Authorization/internalAuthRequest.json @@ -0,0 +1,13 @@ +{ + "id": "string", + "version": "string", + "requesttime": "2022-01-13T06:07:20.554Z", + "metadata": {}, + "request": { + "userName": "110005", + "password": "mosip", + "appId": "admin", + "clientId": "mosip-admin-client", + "clientSecret": "xyz123" + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/config/Authorization/keycloakTokenGeneration.json b/apitest/src/main/resources/config/Authorization/keycloakTokenGeneration.json new file mode 100644 index 000000000..cb8ffb631 --- /dev/null +++ b/apitest/src/main/resources/config/Authorization/keycloakTokenGeneration.json @@ -0,0 +1,6 @@ +{ +"grant_type" : "password", +"client_id": "admin-cli", +"username": "keycloakusername", +"password": "keycloakpassword" +} \ No newline at end of file diff --git a/apitest/src/main/resources/config/Authorization/request.json b/apitest/src/main/resources/config/Authorization/request.json new file mode 100644 index 000000000..57831153b --- /dev/null +++ b/apitest/src/main/resources/config/Authorization/request.json @@ -0,0 +1,11 @@ +{ + "id": "string", + "metadata": {}, + "request": { + "appId": "prereg", + "password": "prereguser", + "userName": "prereguser" + }, + "requesttime": "2019-04-10T10:00:00.000Z", + "version": "string" +} \ No newline at end of file diff --git a/apitest/src/main/resources/config/Authorization/requestIdentity.json b/apitest/src/main/resources/config/Authorization/requestIdentity.json new file mode 100644 index 000000000..4c6b94e24 --- /dev/null +++ b/apitest/src/main/resources/config/Authorization/requestIdentity.json @@ -0,0 +1,12 @@ +{ + "identity": { + "addressLine3": [ + { + "language": "languageValue", + "value": "valueOfAttribute" + } + ], + "IDSchemaVersion": "IDSchemaVersion", + "UIN": "$ID:AddIdentity_Positive_PRE_smoke_UIN$" + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/config/Authorization/zoneMappingRequest.json b/apitest/src/main/resources/config/Authorization/zoneMappingRequest.json new file mode 100644 index 000000000..c7e5fbce5 --- /dev/null +++ b/apitest/src/main/resources/config/Authorization/zoneMappingRequest.json @@ -0,0 +1,12 @@ +{ + "id": "string", + "metadata": {}, + "request": { + "zoneCode": "CSB", + "userId": "110123", + "isActive": true, + "langCode": "eng" + }, + "requesttime": "2022-05-09T09:52:11.969Z", + "version": "string" +} \ No newline at end of file diff --git a/apitest/src/main/resources/config/IDRepo.properties b/apitest/src/main/resources/config/IDRepo.properties new file mode 100644 index 000000000..361cd04b1 --- /dev/null +++ b/apitest/src/main/resources/config/IDRepo.properties @@ -0,0 +1,86 @@ +# ------------------------------------------------------------------------------------------- +# Properties File that will defined from ID Repo for specific request and Response elements +# which will be used during automation. This is common place for update +# + +req.Documentrequest=Document request +req.notify=NotificationRequestDTO +langCode.key=langCode + +key=value + +#PreRegistration resource uris +#Make sure all resource apis are covered +ui.config.params=preregistration.login.mode,preregistration.workflow.demographic,preregistration.workflow.documentupload,preregistration.workflow.booking,preregistration.booking.offset,preregistration.auto.logout,preregistration.rebook.timespan,preregistration.cancel.timespan,preregistration.book.days,preregistration.max.file.size,preregistration.recommended.centers.locCode,preregistration.nearby.centers,mosip.regex.email,mosip.regex.postalCode,mosip.regex.textField,mosip.regex.phone,mosip.regex.DOB,mosip.regex.CNIE,mosip.supported-languages,mosip.primary-language,mosip.secondary-language,mosip.default.dob,mosip.kernel.otp.expiry-time,mosip.kernel.otp.validation-attempt-threshold,mosip.kernel.otp.default-length,mosip.kernel.sms.number.length,mosip.kernel.pin.length,otpChannel.mobile +private static final String preReg_URI = "/booking/v0.1/preregistration/booking/book" +preReg_CreateApplnURI = /preregistration/v1/applications +preReg_FetchRegistrationDataURI = /preregistration/v1/applications/{preRegistrationId} +preReg_FetchPreRegistrationByDateAndTimeURI=/preregistration/v1/demographic/applications/byDateTime +preReg_FetchStatusOfApplicationURI =/preregistration/v1/applications/status/{preRegistrationId} +preReg_FetchAllApplicationCreatedByUserURI=/preregistration/v1/applications +preReg_DiscardApplnURI = /preregistration/v1/applications/{preRegistrationId} +preReg_UpdateStatusAppURI=/preregistration/v1/applications/{preRegistrationId} +#QRCode Service API related URI's +qrCode_URI=/preregistration/v1/qrCode/generate +preReg_DelAllDocumentByPreIdURI = /preregistration/v1/documents/preregistration/ + +#Document API related URI's +preReg_DocUploadURI = /preregistration/v1/documents/ +preReg_DocumentUploadURI = /preregistration/v1/documents/{preRegistrationId} +preReg_FetchAllDocumentURI = /preregistration/v1/documents/{preRegistrationId} +prereg_DeleteDocumentByDocIdURI = /preregistration/v1/documents/ +preReg_DeleteAllDocumentByPreIdURI = /preregistration/v1/documents/preregistration/ +preReg_CopyDocumentsURI = /preregistration/v1/documents/ +preReg_DeleteAllDocumentByPreIdURI1 = /preregistration/v1/documents/preregistration/ + +preReg_BookingAppointmenturi =/preregistration/v1/appointment/{preRegistrationId} +preReg_BookingAppointmentURI =/preregistration/v1/appointment/ +preReg_CancelAppointmenturi = /preregistration/v1/appointment/{preRegistrationId} +#preReg_CancelAppointmenturi= /preregistration/v1/appointment/ +preReg_FecthAppointmentDetailsuri=/preregistration/v1/appointment/{preRegistrationId} +#preReg_FetchCenterIDURI = /preregistration/v1/appointment/availability/ + + + +preReg_GetDocByDocId = /preregistration/v1/documents/ +preReg_GetDocByPreId = /preregistration/v1/documents/preregistration/ + + +#Booking Service API related URI's +preReg_BookingAppointmentURI =/preregistration/v1/appointment/ +preReg_MultipleBookingAppointmentURI =/preregistration/v1/appointment +preReg_FetchCenterIDURI = /preregistration/v1/appointment/availability/ +preReg_FetchCenterIDuri = /preregistration/v1/appointment/availability/{registrationCenterId} +preReg_FecthAppointmentDetailsURI=/preregistration/v1/appointment/ +preReg_CancelAppointmentURI = /preregistration/v1/appointment/ +preReg_RetriveBookedPreIdsByRegId=/preregistration/v1/appointment/preRegistrationId/ +preReg_SyncMasterDataURI=/preregistration/v1/batch/availability/sync + + + +#Notification Service API related URI's +preReg_NotifyURI=/preregistration/v1/notification/notify + +#Booking Service API related URI's + +preReg_FetchBookedPreIdByRegIdURI = /preregistration/v1/booking/appointment/preIdsByRegId +preReg_DiscardBookingURI=/preregistration/v1/booking/appointment +preReg_SyncMasterDataURI=/preregistration/v1/booking/appointment/availability/sync + + + +preReg_ConsumedPreregistrationURI =/preregistration/v1/sync/reverseDataSync +preReg_FetchAllPreRegistrationIdsURI = /preregistration/v1/sync +preReg_DataSyncnURI = /preregistration/v1/sync/{preRegistrationId} +preReg_ExpiredURI=/preregistration/v1/batch/expiredStatus +preReg_syncAvailability=/preregistration/v1/appointment/availability/sync + +preReg_ReverseDataSyncURI=/preregistration/v1/sync/consumedPreRegIds +preReg_ConsumedURI=/preregistration/v1/batch/consumedStatus +preReg_NotifyURI=/preregistration/v1/notification/notify +invalidateToken_URI=/preregistration/v1/login/invalidateToken +preReg_translitrationRequestURI=/preregistration/v1/transliteration/transliterate +otpSend_URI=/preregistration/v1/login/sendOtp +validateOTP_URI=/preregistration/v1/login/validateOtp +preReg_AdminTokenURI=/v1/authmanager/authenticate/useridPwd +preReg_GetPreRegistrationConfigData=/preregistration/v1/login/config diff --git a/apitest/src/main/resources/config/IDRepo2.properties b/apitest/src/main/resources/config/IDRepo2.properties new file mode 100644 index 000000000..d2cface22 --- /dev/null +++ b/apitest/src/main/resources/config/IDRepo2.properties @@ -0,0 +1,100 @@ +# ------------------------------------------------------------------------------------------- +# Properties File that will defined from ID Repo for specific request and Response elements +# which will be used during automation. This is common place for update +# + +req.Documentrequest=Document request + + +key=value + +#PreRegistration resource uris +#Make sure all resource apis are covered + +private static final String preReg_URI = "/booking/v0.1/pre-registration/booking/book" +preReg_CreateApplnURI = /preregistration/v1/demographic/applications +preReg_FetchRegistrationDataURI = /pre-registration/v1/demographic/applications/details +preReg_FetchPreRegistrationByDateAndTimeURI=/pre-registration/v1/demographic/applications/byDateTime +preReg_FetchStatusOfApplicationURI =/pre-registration/v1/demographic//applications/status +preReg_FetchAllApplicationCreatedByUserURI=/pre-registration/v1/demographic/applications +preReg_DiscardApplnURI = /pre-registration/v1/demographic/applications +preReg_UpdateStatusAppURI=/pre-registration/v1/demographic/applications + + +preReg_DocumentUploadURI = /pre-registration/v1/document/documents +preReg_FetchAllDocumentURI = /pre-registration/v1/document/documents +prereg_DeleteDocumentByDocIdURI = /pre-registration/v1/document/documents +preReg_DeleteAllDocumentByPreIdURI = /pre-registration/v1/document/documents/byPreRegId + +preReg_CopyDocumentsURI = /pre-registration/v1/document/documents/copy +preReg_BookingAppointmentURI =/pre-registration/v1/booking/appointment +preReg_CancelAppointmentURI = /pre-registration/v1/booking/appointment +preReg_FecthAppointmentDetailsURI=/pre-registration/v1/booking/appointment +preReg_FetchCenterIDURI = /pre-registration/v1/booking/appointment/availability +preReg_FetchBookedPreIdByRegIdURI = /pre-registration/v1/booking/appointment/preIdsByRegId +preReg_DiscardBookingURI=/pre-registration/v1/booking/appointment +preReg_SyncMasterDataURI=/pre-registration/v1/booking/appointment/availability/sync +preReg_RetriveBookedPreIdsByRegId=/pre-registration/v1/booking/appointment/preIdsByRegId + + +preReg_ConsumedPreregistrationURI =/pre-registration/v1/sync/reverseDataSync +preReg_FetchAllPreRegistrationIdsURI = /pre-registration/v1/sync/datasync +preReg_DataSyncnURI = /pre-registration/v1/sync/datasync +preReg_ExpiredURI=/pre-registration/v1/batchjob/expiredStatus + +preReg_ReverseDataSyncURI=/pre-registration/v1/sync/datasync/store +preReg_ConsumedURI=/pre-registration/v1/batchjob//consumedStatus +preReg_NotifyURI=/pre-registration/v1/notification/notify +invalidateToken_URI=/pre-registration/v1/login/invalidateToken +preReg_translitrationRequestURI=/pre-registration/v1/transliteration/transliterate +otpSend_URI=/preregistration/v1/login/sendOtp +validateOTP_URI=/pre-registration/v1/login/validateOtp + +private static final String preReg_URI = "/booking/v0.1/preregistration/booking/book" +preReg_CreateApplnURI = /preregistration/v1/applications +preReg_FetchRegistrationDataURI = /preregistration/v1/applications/{preRegistrationId} +preReg_FetchPreRegistrationByDateAndTimeURI=/preregistration/v1/demographic/applications/byDateTime +preReg_FetchStatusOfApplicationURI =/preregistration/v1/applications/status/{preRegistrationId} +preReg_FetchAllApplicationCreatedByUserURI=/preregistration/v1/applications +preReg_DiscardApplnURI = /preregistration/v1/applications/{preRegistrationId} +preReg_UpdateStatusAppURI=/preregistration/v1/applications/{preRegistrationId} + + +preReg_DocumentUploadURI = /preregistration/v1/documents/{preRegistrationId} +preReg_FetchAllDocumentURI = /preregistration/v1/document/documents +prereg_DeleteDocumentByDocIdURI = /preregistration/v1/document/documents +preReg_DeleteAllDocumentByPreIdURI = /preregistration/v1/document/documents/byPreRegId + +preReg_CopyDocumentsURI = /preregistration/v1/document/documents/copy +preReg_BookingAppointmentURI =/preregistration/v1/booking/appointment +preReg_CancelAppointmentURI = /preregistration/v1/booking/appointment +preReg_FecthAppointmentDetailsURI=/preregistration/v1/booking/appointment +preReg_FetchCenterIDURI = /preregistration/v1/appointment/availability/{registrationCenterId} +preReg_FetchBookedPreIdByRegIdURI = /preregistration/v1/booking/appointment/preIdsByRegId +preReg_DiscardBookingURI=/preregistration/v1/booking/appointment +preReg_SyncMasterDataURI=/preregistration/v1/booking/appointment/availability/sync +preReg_RetriveBookedPreIdsByRegId=/preregistration/v1/booking/appointment/preIdsByRegId + + +preReg_ConsumedPreregistrationURI =/preregistration/v1/sync/reverseDataSync +preReg_FetchAllPreRegistrationIdsURI = /preregistration/v1/sync/datasync +preReg_DataSyncnURI = /preregistration/v1/sync/datasync +preReg_ExpiredURI=/preregistration/v1/batchjob/expiredStatus + +preReg_ReverseDataSyncURI=/preregistration/v1/sync/datasync/store +preReg_ConsumedURI=/preregistration/v1/batchjob//consumedStatus +preReg_NotifyURI=/preregistration/v1/notification/notify +invalidateToken_URI=/preregistration/v1/login/invalidateToken +preReg_translitrationRequestURI=/preregistration/v1/transliteration/transliterate +otpSend_URI=/preregistration/v1/login/sendOtp +validateOTP_URI=/preregistration/v1/login/validateOtp +preReg_AdminTokenURI=/authmanager/v1/authenticate/useridPwd + + + + + + + + + diff --git a/apitest/src/main/resources/config/IDjson.properties b/apitest/src/main/resources/config/IDjson.properties new file mode 100644 index 000000000..b78a17f43 --- /dev/null +++ b/apitest/src/main/resources/config/IDjson.properties @@ -0,0 +1,2 @@ +dateOfBirthEven=1998/01/01 +dateOfBirthOdd=1993/01/01 \ No newline at end of file diff --git a/apitest/src/main/resources/config/Kernel.properties b/apitest/src/main/resources/config/Kernel.properties new file mode 100644 index 000000000..d98d4febe --- /dev/null +++ b/apitest/src/main/resources/config/Kernel.properties @@ -0,0 +1,278 @@ +#---------------------------------- End point(s) relative URLs ----------------------------------# +authclientidsecretkeyURL = /v1/authmanager/authenticate/clientidsecretkey +authentication = /v1/authmanager/authenticate/useridPwd +authenticationInternal = /v1/authmanager/authenticate/internal/useridPwd +keycloakAuthURL = /auth/realms/master/protocol/openid-connect/token +auditLog_URI = /v1/auditmanager/audits +CentetMachineUserMappingToMasterData_uri = /v1/masterdata/registrationmachineusermappings +EmailNotification_URI = /v1/notifier/email/send +encrypt_URI = /v1/keymanager/encrypt +decrypt_URI = /v1/keymanager/decrypt +FetchApplication_URI = /v1/masterdata/applicationtypes +FetchApplication_lang_URI = /v1/masterdata/applicationtypes/{langcode} +FetchApplication_id_lang_URI = /v1/masterdata/applicationtypes/{code}/{langcode} +FetchBiometricAttribute_URI = /v1/masterdata/getbiometricattributesbyauthtype/{langcode}/{biometrictypecode} +FetchBiometricAuthType_URI = /v1/masterdata/biometrictypes/{langcode} +FetchBlackListedWord_URI = /v1/masterdata/blacklistedwords/{langcode} +FetchDevice_lang_URI = /v1/masterdata/devices/{languagecode} +FetchDevice_id_lang_URI = /v1/masterdata/devices/{languagecode}/{deviceType} +FetchDeviceSpec_lang_URI = /v1/masterdata/devicespecifications/{langcode} +FetchDeviceSpec_id_lang_URI = /v1/masterdata/devicespecifications/{langcode}/{devicetypecode} +FetchDocumentCategories_URI = /v1/masterdata/documentcategories/{langcode} +FetchDocumentCategories_URI_withcodeAndLangCode = /v1/masterdata/documentcategories/{code}/{langcode} +FetchDocumentTypes_URI = /v1/masterdata/documenttypes/{documentcategorycode}/{langcode} +FetchGenderType_URI = /v1/masterdata/gendertypes +FetchGenderType_id_lang_URI = /v1/masterdata/gendertypes/{langcode} +FetchHolidays_URI = /v1/masterdata/holidays +FetchHolidays_id_URI = /v1/masterdata/holidays/{holidayid} +FetchHolidays_id_lang_URI = /v1/masterdata/holidays/{holidayid}/{langcode} +FetchIDlist_URI = /v1/masterdata/idtypes/{langcode} +FetchLocationHierarchy_URI_withlangCode = /v1/masterdata/locations/{langcode} +FetchLocationHierarchy_URI_locationcode = /v1/masterdata/locations/{locationcode}/{langcode} +FetchLocationHierarchy_URI_hierarchyname = /v1/masterdata/locations/locationhierarchy/{hierarchyname} +FetchMachine_URI = /v1/masterdata/machines +FetchMachine_lang_URI = /v1/masterdata/machines/{langcode} +FetchMachine_id_lang_URI = /v1/masterdata/machines/{id}/{langcode} +FetchMachineHistory_URI = /v1/masterdata/machineshistories/{id}/{langcode}/{effdatetimes} +FetchRegCent_URI = /v1/masterdata/registrationcenters +FetchRegCent_id_lang_URI = /v1/masterdata/registrationcenters/{id}/{langcode} +FetchRegCent_loc_lang_URI = /v1/masterdata/getlocspecificregistrationcenters/{langcode}/{locationcode} +FetchRegCent_hir_name_lang_URI = /v1/masterdata/registrationcenters/{langcode}/{hierarchylevel}/{name} +FetchRegCent_prox_lang_URI = /v1/masterdata/getcoordinatespecificregistrationcenters/{langcode}/{longitude}/{latitude}/{proximitydistance} +FetchRegCentHistory_URI = /v1/masterdata/registrationcentershistory/{registrationCenterId}/{langcode}/{effectiveDate} +FetchRegCentHolidays_URI = /v1/masterdata/getregistrationcenterholidays/{langcode}/{registrationcenterid}/{year} +FetchRegcentMachUserMaping_URI = /v1/masterdata/getregistrationmachineusermappinghistory/{effdtimes}/{registrationcenterid}/{machineid}/{userid} +FetchRejectionReason_URI = /v1/masterdata/packetrejectionreasons/{reasoncategorycode}/{langcode} +FetchTemplate_URI = /v1/masterdata/templates +FetchTemplate_lang_URI = /v1/masterdata/templates/{langcode} +FetchTemplate_id_lang_URI = /v1/masterdata/templates/{langcode}/{templatetypecode} +FetchTitle_URI = /v1/masterdata/title/{langcode} +fetchAllTemplate = /v1/masterdata/templates/templatetypecodes/{code} +getApplicantType = /v1/masterdata/getApplicantType +fetchDeviceHistory = /v1/masterdata/deviceshistories/{id}/{langcode}/{effdatetimes} +getDocType_DocCatByAppID = /v1/masterdata/applicanttype/{applicantId}/languages +getDocTypeDocCatByLangCode = /v1/masterdata/validdocuments/{languagecode} +fetchImmediateChildLocation = /v1/masterdata/locations/immediatechildren/{locationcode}/{langcode} +getIndividualType = /v1/masterdata/individualtypes +getRoles = /v1/syncdata/roles +fetchRegCenter = /v1/masterdata/registrationcenters/validate/{id}/{langCode}/{timestamp} +fetchRegistrationCenterDeviceHistory = /v1/masterdata/registrationcenterdevicehistory/{regcenterid}/{deviceid}/{effdatetimes} +getusersBasedOnRegCenter = /v1/syncdata/userdetails/{regid} +licKeyGenerator = /v1/keymanager/license/generate +mapLicenseKey = /v1/keymanager/license/permission +fetchmapLicenseKey = /v1/keymanager/license/permission +OTPGeneration = /v1/otpmanager/otp/generate +OTPValidation = /v1/otpmanager/otp/validate +otpNotifier = /v1/otpnotifier/otp/send +RIDGenerator_URI = /v1/ridgenerator/generate/rid/{centerid}/{machineid} +SmsNotification_URI = /v1/notifier/sms/send +syncConf = /v1/syncdata/configs +fetchIncrementalData = /v1/syncjob/syncjobdef +fetchmasterdata = /v1/syncdata/masterdata +fetchmasterdatawithRID = /v1/syncdata/masterdata/{regcenterId} +SyncPublicKeyToRegClient_URI = /v1/keymanager/publickey/ +uingenerator = /v1/idgenerator/uin +validateGenderByName = /v1/masterdata/gendertypes/validate/{gendername} +validateLocationByName = /v1/masterdata/locations/validate/{locationname} +tokenIdGenerator_URI = /v1/keymanager/{uin}/{partnercode} +getRIDByUserId = /v1/authmanager/rid/{appid}/{userid} +syncMdatawithKeyIndex = /v1/syncdata/clientsettings +syncMdatawithRegCentIdKeyIndex = /v1/syncdata/clientsettings/{regcenterid} +uploadpublickey = /v1/syncdata/tpm/publickey +getUserHistory = /v1/masterdata/users/{id}/{eff_dtimes} +sendOtp = /v1/authmanager/authenticate/sendotp +useridOTP = /v1/authmanager/authenticate/useridOTP +preregSendOtp = /preregistration/v1/login/sendOtp/langcode +preregValidateOtp = /preregistration/v1/login/validateOtp +zoneMappingUrl = /v1/masterdata/zoneuser +zoneNameUrl = /v1/masterdata/zones/zonename +zoneMappingActivateUrl = /v1/masterdata/zoneuser +userCenterMappingUrl = /v1/masterdata/usercentermapping +bulkUploadUrl = /v1/admin/bulkupload +currentUserURI=/#/uinservices/viewhistory +actuatorEndpoint=/resident/v1/actuator/env +actuatorAdminEndpoint=/v1/admin/actuator/env +actuatorMasterDataEndpoint=/v1/masterdata/actuator/env +actuatorIDAEndpoint=/idauthentication/v1/actuator/env +actuatorRegprocEndpoint=/registrationprocessor/v1/registrationtransaction/actuator/env +actuatorEsignetEndpoint=/v1/esignet/actuator/env +tokenEndpoint=/v1/esignet/oauth/token +auditActuatorEndpoint=/v1/auditmanager/actuator/info +validateBindingEndpoint=ida-binding +esignetWellKnownEndPoint=/v1/esignet/oidc/.well-known/openid-configuration +signupSettingsEndPoint=/v1/signup/settings + + + + +#---------------------------------- APP IDs ----------------------------------# +#-- When test rig ran in docker, these values dervied from the environment ---# +mosip_pms_app_id = partner +mosip_resident_app_id = resident +mosip_idrepo_app_id = idrepo +mosip_regclient_app_id = registrationclient +mosip_hotlist_app_id = hotlist +mosip_regprocclient_app_id = regproc +AuthAppID = resident +mosip_admin_app_id = admin + + + +#---------------------------------- Client IDs -------------------------------# +#-- When test rig ran in docker, these values dervied from the environment ---# +mosip_pms_client_id = mosip-pms-client +mosip_partner_client_id = mosip-partner-client +mosip_resident_client_id = mosip-resident-client +mosip_idrepo_client_id = mosip-idrepo-client +mosip_reg_client_id = mosip-reg-client +mosip_admin_client_id = mosip-admin-client +mosip_hotlist_client_id = mosip-hotlist-client +mosip_regproc_client_id = mosip-regproc-client +mpartner_default_mobile_client_id = mpartner-default-mobile +mosip_testrig_client_id = mosip-testrig-client +AuthClientID = mosip-resident-client + + + +#---------------------------------- Client Secret Keys -----------------------# +#-- When test rig ran in docker, these values dervied from the environment ---# +mosip_partner_client_secret = vXS7WUyPDpfWYuoz +mosip_pms_client_secret = 5Qj8vn989OL1Vlu6 +mosip_resident_client_secret = SnZQ6nnVwN9YWvdM +mosip_idrepo_client_secret = AeM2TwFuuZygCuvO +mosip_reg_client_secret = DLXygc82rkAkjrwV +mosip_admin_client_secret = Styop9nqkshXMTgj +mosip_hotlist_client_secret = TKyc4cqWymxjiLEsVydX4uME1xU3i9xl +mosip_regproc_client_secret = eyeXdyhO0u2ETibw +mpartner_default_mobile_secret = iCkj8BRZU6hP6MAN +mosip_testrig_client_secret = AonuXbikoWmHP5ug +AuthClientSecret = SnZQ6nnVwN9YWvdM + + + +#----------------------------- minio proprties ------------------------------# +s3-user-key = minioadmin +s3-user-secret = minioadmin +s3-host = http://minio.minio:9000 +s3-account = automation +s3-region = null +reportExpirationInDays = 3 +s3-account-for-persona-data = personaData +push-reports-to-s3 = no + + +#-------------------- Keycloak User Creation proprties ----------------------# +#-- When test rig ran in docker,few of below dervied from the environment ---# +new_Resident_User = 111995 +new_Resident_Password = mosip123 +new_Resident_Role = default-roles-mosip,PARTNER_ADMIN +roles.111995 = PARTNER_ADMIN,default-roles-mosip +keycloak_UserName = admin +keycloak_Password = sMDr9Ainw9 +keycloak-external-url = https://iam.qa-inji.mosip.net +keycloak-realm-id = mosip +iam-users-to-create = 111997,111998,220005,111992,globaladmin,111887 +iam-users-password = mosip123,mosip123,mosip123,mosip123,mosip123 +roles.220005 = GLOBAL_ADMIN,ID_AUTHENTICATION,REGISTRATION_ADMIN,REGISTRATION_SUPERVISOR,ZONAL_ADMIN +roles.111997 = AUTH_PARTNER,PARTNER_ADMIN,PMS_ADMIN,POLICYMANAGER,REGISTRATION_SUPERVISOR +roles.111887 = AUTH_PARTNER,PARTNER_ADMIN,PMS_ADMIN,REGISTRATION_SUPERVISOR +roles.111998 = POLICYMANAGER +roles.111992 = GLOBAL_ADMIN +roles.globaladmin = GLOBAL_ADMIN,REGISTRATION_ADMIN,uma_authorization,ZONAL_ADMIN,default-roles-mosip + + +#------------------------- DB Connectivity proprties ------------------------# +#-- When test rig ran in docker,few of below dervied from the environment ---# +driver_class=org.postgresql.Driver +pool_size=1 +dialect=org.hibernate.dialect.PostgreSQLDialect +show_sql=true +current_session_context_class=thread +audit_url=jdbc:postgresql://qa-inji.mosip.net:5432/mosip_audit +audit_username=postgres +audit_password=2BhgiSpCaT +audit_default_schema=audit +DB_PORT= +installation-domain= +partner_url=jdbc:postgresql://qa-inji.mosip.net:5432/mosip_ida +partner_username=postgres +partner_password=2BhgiSpCaT +partner_default_schema=partner +reportLogPath=automationLogAndReport +postgresqlUser=postgresql +db-port=5432 +db-server=qa-inji.mosip.net +hibernate.connection.driver_class=org.postgresql.Driver +hibernate.connection.pool_size=1 +hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect +hibernate.show_sql=true +hibernate.current_session_context_class=thread +db-su-user=postgres +postgres-password=2BhgiSpCaT +pms_db_schema=pms +km_db_schema=keymgr +master_db_schema=master +audit_db_schema=audit +ida_db_schema=ida + + +#------------------------- DSL specific proprties ------------------------# +#------------------------- We need to see how to have DSL specific proprties file ------------------------# +packetUtilityBaseUrl=http://localhost:8080 +mountPathForScenario=D:/centralized/mountvolume +mountPath=/home/mosip/mountvolume +# Add scenarios to skip from automation and server side +# supported values "S-scnearioNumber" for server side and "A-scnearioNumber" for automation +scenariosToSkip= +# Add scenarios to include in the the execution list +# Empty if we want to execute all the scenarios--- +scenariosToExecute= +# supported values yes or no +useExternalScenarioSheet=yes +# supported values are 1 to 8 +threadCount=1 + +#------------------------ Generic properties ------------------------# +enableDebug=yes +preconfiguredOtp=111111 +usePreConfiguredOtp=true +# supported values yes or no. Assume that by Default e-signet is deployed +eSignetDeployed=yes +partnerUrlSuffix=oYf63Lax0DY2QkYMRHnrmDqhmO3RMWQagwm0ftgLlkuin1KOND/666/576732 +reportIgnoredTestCases=yes +servicesNotDeployed= +esignetMockBaseURL=esignet-insurance. +slack-webhook-url= +serverErrorsToMonitor=IDA-MLC-018 +pmsAuthInternal=true +partner_password=mosip123 +partner_userName=111997 +partner_user_password=mosip123 +policytest_password=mosip123 +policytest_userName=111998 +policytest_without_pmrole_userName=111887 +admin_password=mosip123 +admin_userName=220005 +admin_zone_password=mosip123 +admin_zone_userName=globaladmin + + + +#------------------------- Need to check if these are used or not ------------------------# +OTPTimeOut = 181 +attempt = 10 +ConfigParameters=mosip.kernel.rid.length,mosip.kernel.uin.length,mosip.kernel.sms.country.code,mosip.kernel.sms.number.length,mosip.kernel.otp.default-length,mosip.kernel.otp.expiry-time,mosip.kernel.otp.key-freeze-time,mosip.kernel.otp.validation-attempt-threshold,mosip.kernel.otp.min-key-length,mosip.kernel.otp.max-key-length,mosip.kernel.licensekey.length,mosip.supported-languages +# supported values are 0 ,1, 2 based on number of env languages +langselect=0 + + + +#----------------------------------AuthDemoService Host properties----------------------------------------------------------# +#Uncommemnt the below to run locally +authDemoServiceBaseURL=http://localhost +authDemoServicePort=8082 +authCertsPath= +#Uncommemnt the below to run in Docker +#authDemoServiceBaseURL=http://authdemo.apitestrig +#authDemoServicePort=80 +#authCertsPath=/home/mosip/authcerts \ No newline at end of file diff --git a/apitest/src/main/resources/config/UmcValidationApis.properties b/apitest/src/main/resources/config/UmcValidationApis.properties new file mode 100644 index 000000000..2f8c62c6c --- /dev/null +++ b/apitest/src/main/resources/config/UmcValidationApis.properties @@ -0,0 +1,6 @@ +registrationCentreHistory=/v1/masterdata/registrationcentershistory/ +machineHistory=/v1/masterdata/machineshistories/ +userMachineMapping=/v1/masterdata/getregistrationmachineusermappinghistory/ +valdiateWorkinHour=/v1/masterdata/registrationcenters/validate/ +deviceHistory=/v1/masterdata/deviceshistories/ +centerDeviceHistory=/v1/masterdata/registrationcenterdevicehistory/ \ No newline at end of file diff --git a/apitest/src/main/resources/config/adminQueries.properties b/apitest/src/main/resources/config/adminQueries.properties new file mode 100644 index 000000000..748b6ad0a --- /dev/null +++ b/apitest/src/main/resources/config/adminQueries.properties @@ -0,0 +1,908 @@ +#create RegCenter with ID as teId1, regCenter should be under authUser(cookie) zone, in this these things may +#change: cntrTyp_code, location_code, holiday_loc_code, zone_code, lang_code. update them accordingly. +createRegCenter=INSERT INTO master.registration_center( \ + id, name, cntrtyp_code, addr_line1, addr_line2, addr_line3, latitude, \ + longitude, location_code, contact_phone, contact_person, number_of_kiosks, \ + working_hours, per_kiosk_process_time, center_start_time, center_end_time, \ + lunch_start_time, lunch_end_time, time_zone, holiday_loc_code, \ + zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, \ + is_deleted, del_dtimes) \ + VALUES ('Tcntr', 'Test Center', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ + '-6.453275', '14022', '944945765', 'John Doe', '3', \ + '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ + '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ + 'STT', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ + null, null); + +#create regcent by replacing the id and zone in upper query wit this regCentID(using this center to map device, machine, user) +regCentId1=Tcnt1 +regCentId2=Tcnt2 +zoneCode=BRK + +#delete created RegCenter with above IDs, here role will be replaced by username of AuthUser. +deleteRegCenter=delete from master.registration_center where id = 'Tcntr' and is_active = false and is_deleted = true and upd_by = 'role' +deleteRegCenter1=delete from master.registration_center where id = 'Tcnt1' or id = 'Tcnt2' +deleteCntrCrtdByApi= delete from master.registration_center where name = 'Test Center' +deleteWorkNonWorkDays=delete from master.reg_working_nonworking where regcntr_id IN (select id from master.registration_center where name = 'Test Center') +deleteExcptnlHolidy=delete from master.reg_exceptional_holiday where regcntr_id IN (select id from master.registration_center where name = 'Test Center') +deleteWorkNonWorkDaysUpdate=delete from master.reg_working_nonworking where regcntr_id IN ('Tcnt1','Tcntr') +deleteExcptnlHolidyUpdate=delete from master.reg_exceptional_holiday where regcntr_id IN ('Tcnt1','Tcntr') + +#map regCenter to device, device and regCenter should be under authUser(cookie) zone. here device_id and lang_code can change, +# update them accordingly +mapRegCentDevice=INSERT INTO master.reg_center_device( \ + regcntr_id, device_id, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ + VALUES ('Tcnt1', '3000025', 'eng', true, 'superadmin', '2019-09-04 12:28:11.553519', null, null, null, null); + +deleteMappedRegCentDevice=delete from master.reg_center_device where regcntr_id = 'Tcnt1' + +#map regCenter to machine, machine and regCenter should be under authUser(cookie) zone. here machine_id and lang_code can change, +# update them accordingly +mapRegCentMach=INSERT INTO master.reg_center_machine( \ + regcntr_id, machine_id, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ + VALUES ('Tcnt1', '10005', 'eng', true, 'superadmin', '2019-09-04 12:28:11.553519', null, null, null, null); + +deleteMappedRegCentMach=delete from master.reg_center_machine where regcntr_id = 'Tcnt1' + +#map regCenter to user, user and regCenter should be under authUser(cookie) zone. here user_id and lang_code can change, +# update them accordingly +mapRegCentUser=INSERT INTO master.reg_center_user( \ + regcntr_id, usr_id, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ + VALUES ('Tcnt1', '110033', 'eng', true, 'superadmin', '2019-09-04 12:28:11.553519', null, null, null, null); + +deleteMappedRegCentUser=delete from master.reg_center_user where regcntr_id = 'Tcnt1' + +#create Device with ID as Tdevice, Device should be under authUser(cookie) zone, in this these things may +#change: dspecId, zone_code, lang_code. update them accordingly. +createDevice=INSERT INTO master.device_master( \ + id, name, mac_address, serial_num, ip_address, validity_end_dtimes, dspec_id, zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ + VALUES ('Tdevice', 'TestDevice', '85-BB-97-4B-14-05', 'SZ5912878988', null, null, '165', 'CST', 'eng', true, 'superadmin', '2019-07-26 12:18:40.718295', null, null, null, null); + +#create device by replacing the id and zone in upper query with this deviceID(using this device to map regCenter) +deviceId1=Tdevice1 +deviceId2=Tdevice2 + +#delete created Device with above IDs, here role will be replaced by username of AuthUser. +deleteDevice=delete from master.device_master where id = 'Tdevice' and is_active = false and is_deleted = true and upd_by = 'role' +deleteDevice1=delete from master.device_master where id = 'Tdevice1' or id = 'Tdevice2' + +#create Machine with ID as Tmach, Machine should be under authUser(cookie) zone, in this these things may +#change: mspecId, zone_code, lang_code. update them accordingly. +createMachine=INSERT INTO master.machine_master( \ + id, name, mac_address, serial_num, ip_address, validity_end_dtimes, mspec_id, public_key, key_index, zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ + VALUES ('Tmach', 'TestMachine', '8C-16-45-5A-5D-0D', 'NM5328114630', '192.168.0.150', null, '1001', 'Pkey', 'KeyI', 'CST', 'eng', true, '110005', '2019-07-26 12:18:40.718295', null, null, null, null), \ + ('Tmac1', 'TestMachine', '8C-16-45-5A-5D-0D', 'NM5328114630', '192.168.0.150', null, '1001', 'Pkey', 'KeyI', 'CST', 'eng', true, '110005', '2019-07-26 12:18:40.718295', null, null, null, null), \ + ('Tmac2', 'TestMachine', '8C-16-45-5A-5D-0D', 'NM5328114630', '192.168.0.150', null, '1001', 'Pkey', 'KeyI', 'BRK', 'eng', true, '110005', '2019-07-26 12:18:40.718295', null, null, null, null); + +machineId1=Tmac1 + +#delete created Machine with above IDs, here role will be replaced by username of AuthUser. +deleteMachine=delete from master.machine_master where id = 'Tmach' and is_active = false and is_deleted = true and upd_by = 'role' +deleteMachine1=delete from master.machine_master where id = 'Tmac1' or id = 'Tmac2' + +#create location data +createLocation=INSERT INTO master.location( \ + code, name, hierarchy_level, hierarchy_level_name, parent_loc_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ + VALUES ('TestLoc_code_1','Test_Loc_B_1' , 3, 'City', 'KNT', 'eng', false, '110005', '2019-07-26 12:18:38.523228', null, null, null, null), \ + ('TestLoc_code_2','Test_Loc_B_2' , 2, 'Province', 'TestLoc_code_1', 'eng', true, '110005', '2019-07-26 12:18:38.523228', null, null, null, null), \ + ('TestLoc_code_2','Test_Loc_B_2' , 2, '\u0627\u0644\u0645\u062D\u0627\u0641\u0638\u0629', 'TestLoc_code_1', 'ara', true, '110005', '2019-07-26 12:18:38.523228', null, null, null, null), \ + ('TestLoc_code_3','Test_Loc_B_3' , 2, 'Province', 'TestLoc_code_1', 'eng', false, '110005', '2019-07-26 12:18:38.523228', null, null, null, null); + #delete created locations +deleteCreatedLocations=delete from master.location where cr_by = '110005' + +InsertRegDevice=insert into master.registered_device_master (code,dtype_code,dstype_code,status_code,device_id,device_sub_id,digital_id,serial_number,provider_name,provider_id,purpose,firmware,make,model,expiry_date,certification_level,is_active,cr_by,cr_dtimes) \ +values ('inActive-D1','Face' , 'Full face', 'Registered', 'TestDev1', '[0,1]', '{ \ + "serialNo" "Serial number1", \ + "make" "Microsoft", \ + "model\u201D : "ca3e7ab9-b4c3-4ae6-8251-579ef933890f", \ + "type" "Face" \ + "dp" "SYNCBYTE", \ + "dpId" "SYNCBYTE.TCI322", \ + "dateTime" "2025-01-01T00:00:00.000+05:30" \ +}', 'Serial number1', 'SYNCBYTE', 'SYNCBYTE.TCI322', 'Registration', 'TCI322L1.0', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', '2025-01-01T00:00:00.000+05:30 \ +', 'L0',False,'superadmin','now()'),('Revoked-D1','Face' , 'Full face', 'Revoked', 'TestDev1', '[0,1]', '{ \ + "serialNo" "Serial number2", \ + "make" "Microsoft", \ + "model\u201D : "ca3e7ab9-b4c3-4ae6-8251-579ef933890f", \ + "type" "Face" \ + "dp" "SYNCBYTE", \ + "dpId" "SYNCBYTE.TCI322", \ + "dateTime" "2025-01-01T00:00:00.000+05:30" \ +}', 'Serial number2', 'SYNCBYTE', 'SYNCBYTE.TCI322', 'Registration', 'TCI322L1.0', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', '2025-01-01T00:00:00.000+05:30 \ +', 'L0','TRUE','superadmin','now()'),('Retired-D1','Face' , 'Full face', 'Retired', 'TestDev1', '[0,1]', '{ \ + "serialNo" "Serial number3", \ + "make" "Microsoft", \ + "model\u201D : "ca3e7ab9-b4c3-4ae6-8251-579ef933890f", \ + "type" "Face" \ + "dp" "SYNCBYTE", \ + "dpId" "SYNCBYTE.TCI322", \ + "dateTime" "2025-01-01T00:00:00.000+05:30" \ +}', 'Serial number3', 'SYNCBYTE', 'SYNCBYTE.TCI322', 'Registration', 'TCI322L1.0', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', '2025-01-01T00:00:00.000+05:30 \ +', 'L0','TRUE','superadmin','now()'); + +InsertMDS=INSERT INTO master.mosip_device_service( \ + id, sw_binary_hash, sw_version, dprovider_id, dtype_code, dstype_code, make, model, sw_cr_dtimes, sw_expiry_dtimes, is_active, cr_by, cr_dtimes) \ + VALUES ('inActiveMDS', 'dummy data', 'inActiveMDSsVersion', 'SYNCBYTE.TCI322', 'Face' , 'Full face', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', 'now()', 'now()', False, '110005', 'now()'), \ + ('diffDtypMDS', 'dummy data', 'MDSsVersionDty', 'SYNCBYTE.TCI322', 'Finger' , 'Full face', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', 'now()', 'now()', True, '110005', 'now()'), \ + ('diffDstypMDS', 'dummy data', 'MDSsVersionDsTyp', 'SYNCBYTE.TCI322', 'Face' , 'Single', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', 'now()', 'now()', True, '110005', 'now()'), \ + ('difMakeMDS', 'dummy data', 'MDSsVersionMake', 'SYNCBYTE.TCI322', 'Face' , 'Full face', 'difMakeThanDev', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', 'now()', 'now()', True, '110005', 'now()'), \ + ('difModelMDS', 'dummy data', 'MDSsVersionModel', 'SYNCBYTE.TCI322', 'Face' , 'Full face', 'Microsoft', 'difModelThanDev', 'now()', 'now()', True, '110005', 'now()'), \ + ('diffDpId', 'dummy data', 'MDSsVersionDpid', 'SYNCBYTE.MC01A', 'Face' , 'Full face', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', 'now()', 'now()', True, '110005', 'now()'); + +DeleteRegDevice=delete from master.registered_device_master where code IN ('inActive-D1','Revoked-D1','Retired-D1','ActiveRegDev1'); +DeleteMDS=delete from master.mosip_device_service where id IN ('inActiveMDS','diffDtypMDS','diffDstypMDS','difMakeMDS','difModelMDS','diffDpId'); +DeleteRegDeviceCreatedByApi=delete from master.registered_device_master where device_id IN ('RegDeviceIdT1','RegDeviceIdT2','RegDeviceIdT3','3000025','3000045'); +validateHistory=select count(*) from master.registered_device_master_h where device_id IN ('RegDeviceIdT1','RegDeviceIdT2','RegDeviceIdT3','3000025','3000045'); +validateDeRegDevHistory=select count(*) from master.registered_device_master_h where device_id IN ('ActiveRegDev1'); + +InsertRegDeviceHistory=insert into master.registered_device_master_h (code,dtype_code,dstype_code,status_code,device_id,device_sub_id,digital_id,serial_number,provider_name,provider_id,purpose,firmware,make,model,expiry_date,certification_level,is_active,cr_by,cr_dtimes,eff_dtimes) values ('inActive-D1','Face' , 'Full face', 'Registered', 'TestDev1', '[0,1]', '{ "serialNo" "Serial number1", "make" "Microsoft", "model\u201D : "ca3e7ab9-b4c3-4ae6-8251-579ef933890f", "type" "Face" "dp" "SYNCBYTE", "dpId" "SYNCBYTE.TCI322", "dateTime" "2025-01-01T00:00:00.000+05:30" }', 'Serial number1', 'SYNCBYTE', 'SYNCBYTE.TCI322', 'Registration', 'TCI322L1.0', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', '2025-01-01T00:00:00.000+05:30 ', 'L0',False,'superadmin','now()','2019-11-22 10:11:30.854'),('Revoked-D1','Face' , 'Full face', 'Revoked', 'TestDev1', '[0,1]', '{ "serialNo" "Serial number2", "make" "Microsoft", "model\u201D : "ca3e7ab9-b4c3-4ae6-8251-579ef933890f", "type" "Face" "dp" "SYNCBYTE", "dpId" "SYNCBYTE.TCI322", "dateTime" "2025-01-01T00:00:00.000+05:30" }', 'Serial number2', 'SYNCBYTE', 'SYNCBYTE.TCI322', 'Registration', 'TCI322L1.0', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', '2025-01-01T00:00:00.000+05:30 ', 'L0','TRUE','superadmin','now()','2019-11-22 10:11:30.854'),('Retired-D1','Face' , 'Full face', 'Retired', 'TestDev1', '[0,1]', '{ "serialNo" "Serial number3", "make" "Microsoft", "model\u201D : "ca3e7ab9-b4c3-4ae6-8251-579ef933890f", "type" "Face" "dp" "SYNCBYTE", "dpId" "SYNCBYTE.TCI322", "dateTime" "2025-01-01T00:00:00.000+05:30" }', 'Serial number3', 'SYNCBYTE', 'SYNCBYTE.TCI322', 'Registration', 'TCI322L1.0', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', '2025-01-01T00:00:00.000+05:30 ', 'L0','TRUE','superadmin','now()','2019-11-22 10:11:30.854'); +InsertMDSHistory=INSERT INTO master.mosip_device_service_h( \ + id, sw_binary_hash, sw_version, dprovider_id, dtype_code, dstype_code, make, model, sw_cr_dtimes, sw_expiry_dtimes, is_active, cr_by, cr_dtimes,eff_dtimes) \ + VALUES ('inActiveMDS', 'dummy data', 'inActiveMDSsVersion', 'SYNCBYTE.TCI322', 'Face' , 'Full face', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', 'now()', 'now()', False, '110005', 'now()','2019-11-22 10:11:30.854'), \ + ('diffDtypMDS', 'dummy data', 'MDSsVersionDty', 'SYNCBYTE.TCI322', 'Finger' , 'Full face', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', 'now()', 'now()', True, '110005', 'now()','2019-11-22 10:11:30.854'), \ + ('diffDstypMDS', 'dummy data', 'MDSsVersionDsTyp', 'SYNCBYTE.TCI322', 'Face' , 'Single', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', 'now()', 'now()', True, '110005', 'now()','2019-11-22 10:11:30.854'), \ + ('difMakeMDS', 'dummy data', 'MDSsVersionMake', 'SYNCBYTE.TCI322', 'Face' , 'Full face', 'difMakeThanDev', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', 'now()', 'now()', True, '110005', 'now()','2019-11-22 10:11:30.854'), \ + ('difModelMDS', 'dummy data', 'MDSsVersionModel', 'SYNCBYTE.TCI322', 'Face' , 'Full face', 'Microsoft', 'difModelThanDev', 'now()', 'now()', True, '110005', 'now()','2019-11-22 10:11:30.854'), \ + ('diffDpId', 'dummy data', 'MDSsVersionDpid', 'SYNCBYTE.MC01A', 'Face' , 'Full face', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', 'now()', 'now()', True, '110005', 'now()','2019-11-22 10:11:30.854'); + +InsertSingleRegDeviceValues=('ActiveRegDev1','Face' , 'Full face', 'Registered', 'TestDev1', '[0,1]', '{ \ + "serialNo" "Serial number1", \ + "make" "Microsoft", \ + "model\u201D : "ca3e7ab9-b4c3-4ae6-8251-579ef933890f", \ + "type" "Face" \ + "dp" "SYNCBYTE", \ + "dpId" "SYNCBYTE.TCI322", \ + "dateTime" "2025-01-01T00:00:00.000+05:30" \ +}', 'Serial number4', 'SYNCBYTE', 'SYNCBYTE.TCI322', 'Registration', 'TCI322L1.0', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', '2025-01-01T00:00:00.000+05:30 \ +', 'L0',True,'superadmin','now()'); + +createDevProviderUpdate=INSERT INTO master.device_provider( \ + id, vendor_name, address, email, contact_number, certificate_alias, is_active, cr_by, cr_dtimes) \ + VALUES ('TestDPro1', 'TestVend1', 'testDevPro1', 'testDevProMail', '1234567890','testCerti', true, 110005, '2025-01-01T00:00:00.000+05:30'), ('TestDPro2', 'TestVend2', 'testDevPro2', 'testDevProMail2', '1234567890','testCerti', false, 110005, '2025-01-01T00:00:00.000+05:30'); +deleteDevProCreatedByAPI=delete from master.device_provider where cr_by IN ('110005'); +validateDevProHistory=select count(*) from master.device_provider_h where cr_by IN ('110005'); + +deleteFTPCreatedByAPI=delete from master.foundational_trust_provider where name IN ('TestFTP') +createFTPtoUpdate=INSERT INTO master.foundational_trust_provider( \ + id, name, address, email, contact_number, certificate_alias, is_active, cr_by, cr_dtimes) \ + VALUES ('TestFTP2', 'TestFTP1', 'Test Address', 'testEmail@test.com', '1234567890', 'testAlias', true, '110005', '2019-11-25 11:22:19.799'),('TestFTP1', 'TestFTP2', 'Test Address', 'testEmail@test.com', '1234567890', 'testAlias', true, '110005', '2019-11-25 11:22:19.799'); +deleteFTP=delete from master.foundational_trust_provider where id IN ('TestFTP1','TestFTP2'); +validateFTPHistory=select count(*) from master.foundational_trust_provider_h where name IN ('TestFTP'); + +#create RegCenter with ID as TestUnmap, regCenter should be under authUser(cookie) zone, in this these things may +#change: cntrTyp_code, location_code, holiday_loc_code, zone_code, lang_code. update them accordingly. +createRegCenterForUnmap1=INSERT INTO master.registration_center( \ + id, name, cntrtyp_code, addr_line1, addr_line2, addr_line3, latitude, \ + longitude, location_code, contact_phone, contact_person, number_of_kiosks, \ + working_hours, per_kiosk_process_time, center_start_time, center_end_time, \ + lunch_start_time, lunch_end_time, time_zone, holiday_loc_code, \ + zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, \ + is_deleted, del_dtimes) \ + VALUES ('TestUnmap', 'Test Center', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ + '-6.453275', '10106', '944945765', 'John Doe', '3', \ + '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ + '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ + 'CSB', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ + null, null), \ + ('TestUnmap1', 'Test Center', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ + '-6.453275', '10106', '944945765', 'John Doe', '3', \ + '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ + '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ + 'CSB', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ + null, null), \ + ('TestUnmap2', 'Test Center', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ + '-6.453275', '10106', '944945765', 'John Doe', '3', \ + '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ + '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ + 'NDR', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ + null, null); + +deleteRegCntrForUnmap= delete from master.registration_center where id in ('TestUnmap', 'TestUnmap1', 'TestUnmap2') + + +#create Device with ID as TestDeviceToMapNew, Device should be under authUser(cookie) zone, in this these things may +#change: dspecId, zone_code, lang_code. update them accordingly. +createDeviceForUnmap1=INSERT INTO master.device_master( \ + id, name, mac_address, serial_num, ip_address, validity_end_dtimes, dspec_id, zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ + VALUES ('TestDeviceToMapNew', 'TestDevice', '85-BB-97-4B-14-05', 'SZ5912878988', null, null, '165', 'CST', 'eng', true, 'superadmin', '2019-07-26 12:18:40.718295', null, null, null, null), \ + ('TestDeviceToMapNew1', 'TestDevice', '85-BB-97-4B-14-05', 'SZ5912878988', null, null, '165', 'CST', 'eng', true, 'superadmin', '2019-07-26 12:18:40.718295', null, null, null, null), \ + ('TestDeviceToMapNew2', 'TestDevice', '85-BB-97-4B-14-05', 'SZ5912878988', null, null, '165', 'NDR', 'eng', true, 'superadmin', '2019-07-26 12:18:40.718295', null, null, null, null); + +deleteUnmapDeviceByApi=delete from master.device_master where id in ('TestDeviceToMapNew','TestDeviceToMapNew1','TestDeviceToMapNew2') + + +#map regCenter to device, device and regCenter should be under authUser(cookie) zone. here device_id and lang_code can change, +# update them accordingly +mapRegCentDevice1=INSERT INTO master.reg_center_device( \ + regcntr_id, device_id, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ + VALUES ('TestUnmap', 'TestDeviceToMapNew', 'eng', true, 'superadmin', '2019-09-04 12:28:11.553519', null, null, null, null), \ + ('TestUnmap1', 'TestDeviceToMapNew2', 'eng', true, 'superadmin', '2019-09-04 12:28:11.553519', null, null, null, null), \ + ('TestUnmap2', 'TestDeviceToMapNew1', 'eng', true, 'superadmin', '2019-09-04 12:28:11.553519', null, null, null, null); + +deleteMappedRegCentDevice1=delete from master.reg_center_device where regcntr_id in ('TestUnmap','TestUnmap1','TestUnmap2') + + +#create RegCenter with ID as MapZone1, regCenter should be under authUser(cookie) zone, in this these things may +#change: cntrTyp_code, location_code, holiday_loc_code, zone_code, lang_code. update them accordingly. +createRegCenterForMapMCReg=INSERT INTO master.registration_center( \ + id, name, cntrtyp_code, addr_line1, addr_line2, addr_line3, latitude, \ + longitude, location_code, contact_phone, contact_person, number_of_kiosks, \ + working_hours, per_kiosk_process_time, center_start_time, center_end_time, \ + lunch_start_time, lunch_end_time, time_zone, holiday_loc_code, \ + zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, \ + is_deleted, del_dtimes) \ + VALUES ('MapZone1', 'Test Center', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ + '-6.453275', '10106', '944945765', 'John Doe', '0', \ + '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ + '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ + 'CSB', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ + null, null), \ + ('MapDevReg', 'Test Center', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ + '-6.453275', '10106', '944945765', 'John Doe', '0', \ + '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ + '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ + 'MRS', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ + null, null); + +deleteRegCntrByApiMac= delete from master.registration_center where id in ('MapZone1', 'MapDevReg'); + + +#create Machine with ID as RegCntrMa, Device should be under authUser(cookie) zone, in this these things may +#change: dspecId, zone_code, lang_code. update them accordingly. +createMachineForMapMCReg=INSERT INTO master.machine_master( \ + id, name, mac_address, serial_num, ip_address, validity_end_dtimes, mspec_id, public_key, key_index, zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ + VALUES ('RegCntrMa', 'TestDevice', '85-BB-97-4B-14-05', 'SZ5912878988', null, null, '1001','pkeyI', 'pkeyI', 'CST', 'eng', true, 'superadmin', '2019-07-26 12:18:40.718295', null, null, null, null), \ + ('OutZone', 'TestDevice', '85-BB-97-4B-14-05', 'SZ5912878988', null, null, '1001','pkeyI', 'pkeyI', 'MRS', 'eng', true, 'superadmin', '2019-07-26 12:18:40.718295', null, null, null, null); + +deleteMapMachineByApi=delete from master.machine_master where id in ('RegCntrMa','OutZone'); + + +#map regCenter to machine, machine and regCenter should be under authUser(cookie) zone. here device_id and lang_code can change, +# update them accordingly +mapRegCentMachine1=INSERT INTO master.reg_center_machine( \ + regcntr_id, machine_id, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ + VALUES ('MapZone1', 'RegCntrMa', 'eng', true, 'superadmin', '2019-09-04 12:28:11.553519', null, null, null, null); + +deleteMappedRegCentMachine1=delete from master.reg_center_machine where regcntr_id in ('MapZone1'); + +#return the number of kiosks from registration center table +validateNoOfKiosks= SELECT number_of_kiosks \ + FROM master.registration_center \ + WHERE id in ('MapZone1'); + +createRegCenterWithDifferentData=INSERT INTO master.registration_center( \ + id, name, cntrtyp_code, addr_line1, addr_line2, addr_line3, latitude, \ + longitude, location_code, contact_phone, contact_person, number_of_kiosks, \ + working_hours, per_kiosk_process_time, center_start_time, center_end_time, \ + lunch_start_time, lunch_end_time, time_zone, holiday_loc_code, \ + zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, \ + is_deleted, del_dtimes) \ + VALUES ('TRegCntr1', 'TestRegCenter', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ + '-6.453275', '10106', '944945765', 'John Doe', '3', \ + '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ + '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ + 'CST', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ + null, null),\ + ('TRegCntr2', 'TestRegCenter2', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ + '-6.453275', '10106', '944945765', 'John Doe', '3', \ + '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ + '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ + 'RBT', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ + null, null),\ + ('TRegCntr3', 'TestRegCenter3', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ + '-6.453275', '10106', '944945765', 'John Doe', '3', \ + '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ + '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ + 'CST', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ + null, null),\ + ('TRegCntr4', 'TestRegCenter3', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ + '-6.453275', '10106', '944945765', 'John Doe', '3', \ + '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ + '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ + 'RBT', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ + 'true', null),\ + ('TRegCntr5', 'TestRegCenter3', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ + '-6.453275', '10106', '944945765', 'John Doe', '3', \ + '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ + '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ + 'BSN', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ + null, null),\ + ('TRegCntr6', 'TestRegCenter6', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ + '-6.453275', '10106', '944945765', 'John Doe', '3', \ + '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ + '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ + 'RBT', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ + 'true', null),\ + ('TRegCntr7', 'TestRegCenter6', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ + '-6.453275', '10106', '944945765', 'John Doe', '3', \ + '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ + '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ + 'CST', 'eng', 'false', '110005', '2019-08-27 12:28:11.553519', null, null, \ + 'true', null); + + +deleteRegCntrByApi= delete from master.registration_center where id in ('TRegCntr1', 'TRegCntr2', 'TRegCntr3','TRegCntr4','TRegCntr5','TRegCntr6','TRegCntr7') + + +createDeviceWithDifferentData=INSERT INTO master.device_master( \ + id, name, mac_address, serial_num, ip_address, validity_end_dtimes, dspec_id, zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('TestDevice1', 'che iris 1', 'D4-3D-7E-C0-8C-4A','ceec5f62-77b7-46f3-816b-3e734305a9c8', '172.23.174.113', \ + '2020-08-07 09:13:22.221', '327', 'CST', 'eng', 'false', '110006', '2019-11-25 11:22:19.799', null, null, null, null),\ + ('TestDevice2', 'che iris 2', 'D4-3D-7E-C0-8C-4A','ceec5f62-77b7-46f3-816b-3e734305a9c8', '172.23.174.113', \ + '2020-08-07 09:13:22.221', '327', 'CST', 'eng', 'false', '110006', '2019-11-25 11:22:19.799', null, null, null, null),\ + ('TestDevice3', 'che iris 3', 'D4-3D-7E-C0-8C-4A','ceec5f62-77b7-46f3-816b-3e734305a9c8', '172.23.174.113', \ + '2020-08-07 09:13:22.221', '327', 'NDR', 'eng', 'false', '110006', '2019-11-25 11:22:19.799', null, null, null, null),\ + ('TestDevice4', 'che iris 3', 'D4-3D-7E-C0-8C-4A','ceec5f62-77b7-46f3-816b-3e734305a9c8', '172.23.174.113', \ + '2020-08-07 09:13:22.221', '327', 'BSN', 'eng', 'false', '110006', '2019-11-25 11:22:19.799', null, null, null, null),\ + ('TestDevice5', 'che iris 3', 'D4-3D-7E-C0-8C-4A','ceec5f62-77b7-46f3-816b-3e734305a9c8', '172.23.174.113', \ + '2020-08-07 09:13:22.221', '327', 'CSB', 'eng', 'false', '110006', '2019-11-25 11:22:19.799', null, null, null, null),\ + ('TestDevice6', 'che iris 3', 'D4-3D-7E-C0-8C-4A','ceec5f62-77b7-46f3-816b-3e734305a9c8', '172.23.174.113', \ + '2020-08-07 09:13:22.221', '327', 'CST', 'eng', 'false', '110006', '2019-11-25 11:22:19.799', null, null, null, null),\ + ('TestDevice7', 'che iris 3', 'D4-3D-7E-C0-8C-4A','ceec5f62-77b7-46f3-816b-3e734305a9c8', '172.23.174.113', \ + '2020-08-07 09:13:22.221', '327', 'CST', 'eng', 'false', '110006', '2019-11-25 11:22:19.799', null, null, 'true', null); + +deleteDeviceByApi= delete from master.device_master where id in ('TestDevice1', 'TestDevice2', 'TestDevice3','TestDevice4','TestDevice5','TestDevice6','TestDevice7') + +deleteDeviceRegCenterMapping = delete from master.reg_center_device where regcntr_id in ('TRegCntr1','TRegCntr3') + +createUser=INSERT INTO master.user_detail(\ + id, uin, name, email, mobile, status_code, lang_code, last_login_dtimes, last_login_method, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('testuser', '7234451333', 'Dummy User', 'Dummy@xyz.com', '818876500', 'ACT', 'eng', null, 'PWD', 'true', 'superadmin', '2019-10-21 06:50:27.696842', null, null, null, null),\ + ('testuserdiffzone', '7234451333', 'Dummy User', 'Dummy@xyz.com', '818876500', 'ACT', 'eng', null, 'PWD', 'true', 'superadmin', '2019-10-21 06:50:27.696842', null, null, null, null),\ + ('testusernewzone', '7234451333', 'Dummy User', 'Dummy@xyz.com', '818876500', 'ACT', 'eng', null, 'PWD', 'true', 'superadmin', '2019-10-21 06:50:27.696842', null, null, null, null),\ + ('testuservalid', '7234451333', 'Dummy User', 'Dummy@xyz.com', '818876500', 'ACT', 'eng', null, 'PWD', 'true', 'superadmin', '2019-10-21 06:50:27.696842', null, null, null, null),\ + ('testusernorole', '7234451333', 'Dummy User', 'Dummy@xyz.com', '818876500', 'ACT', 'eng', null, 'PWD', 'true', 'superadmin', '2019-10-21 06:50:27.696842', null, null, null, null); + +deleteUserdetail= delete from master.user_detail where id in ('testuser', 'testuserdiffzone', 'testusernewzone','testuservalid','testusernorole') + +createZoneUserWithDifferentData=INSERT INTO master.zone_user(\ + zone_code, usr_id, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('CST', 'testuser', 'eng', 'true', 'superadmin', '2019-10-21 06:50:27.950738', null, null, null, null),\ + ('NDR', 'testuserdiffzone', 'eng', 'true', 'superadmin', '2019-10-21 06:50:27.950738', null, null, null, null),\ + ('CSB', 'testusernewzone', 'eng', 'true', 'superadmin', '2019-10-21 06:50:27.950738', null, null, null, null),\ + ('CST', 'testuservalid', 'eng', 'true', 'superadmin', '2019-10-21 06:50:27.950738', null, null, null, null),\ + ('CST', 'testusernorole', 'eng', 'true', 'Registration Admin', '2019-10-21 06:50:27.950738', null, null, null, null); + +deleteUser= delete from master.zone_user where usr_id in ('testuser', 'testuserdiffzone', 'testusernewzone','testuservalid','testusernorole') + +deleteUserRegCenterMapping=delete from master.reg_center_user where regcntr_id in ('TRegCntr1') + +mapUserRegCenter=INSERT INTO master.reg_center_user(\ + regcntr_id, usr_id, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('TRegCntr1', 'testuser', 'eng', 'true', 'superadmin', '2019-10-21 06:50:27.950738', null, null, null, null),\ + ('TRegCntr2', 'testuservalid', 'eng', 'true', 'superadmin', '2019-10-21 06:50:27.950738', null, null, null, null),\ + ('TRegCntr4', 'testuserdiffzone', 'eng', 'true', 'superadmin', '2019-10-21 06:50:27.950738', null, null, null, null),\ + ('TRegCntr3', 'testuserdiffzone', 'eng', 'true', 'superadmin', '2019-10-21 06:50:27.950738', null, null, null, null),\ + ('TRegCntr5', 'testusernewzone', 'eng', 'true', 'superadmin', '2019-10-21 06:50:27.950738', null, null, null, null),\ + ('TRegCntr6', 'testusernorole', 'eng', 'true', 'superadmin', '2019-10-21 06:50:27.950738', null, null, null, null); + +deleteMapUserRegCenter=delete from master.reg_center_user where regcntr_id in ('TRegCntr1','TRegCntr2','TRegCntr3','TRegCntr4','TRegCntr5','TRegCntr6'); + +deleteMDSCreatedByAPI=delete from master.mosip_device_service where cr_by in ('110005'); + +validateMDSHistory=select count(*) from master.mosip_device_service_h where sw_version IN ('TestMDS1','TestMDS2'); + +InsertMDSToUpdate=INSERT INTO master.mosip_device_service( \ + id, sw_binary_hash, sw_version, dprovider_id, dtype_code, dstype_code, make, model, sw_cr_dtimes, sw_expiry_dtimes, is_active, cr_by, cr_dtimes) \ + VALUES ('UpdateTestMDS', 'dummy data', 'TestMDS1', 'SYNCBYTE.TCI322', 'Face' , 'Full face', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', 'now()', 'now()', true, '110005', 'now()') + + +createMachine2Eng=INSERT INTO master.machine_master( \ + id, name, mac_address, serial_num, ip_address, validity_end_dtimes, mspec_id, public_key, key_index, zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ + VALUES ('Test', 'Dummy MachineTest', '8C-16-45-5A-5D-0D', 'NM5328114630', '192.168.0.150', null, '1001', 'pkeyI', 'pkeyI', 'CST', 'eng', true, '110005', '2019-07-26 12:18:40.718295', null, null, null, null),\ + ('TestF', 'Dummy MachineTest', '8C-16-45-5A-5D-0D', 'NM5328114630', '192.168.0.150', null, '1001', 'pkeyI', 'pkeyI', 'CST', 'eng', false, '110005', '2019-07-26 12:18:40.718295', null, null, null, null); + +deleteMachine2Eng=delete from master.machine_master where cr_by in ('110005'); + +createMachine2EngUpdate=INSERT INTO master.machine_master( \ + id, name, mac_address, serial_num, ip_address, validity_end_dtimes, mspec_id, public_key, key_index, zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ + VALUES ('TestSpecNe', 'Test123', '8C-16-45-5A-5D-0D', 'NM5328114630', '192.168.0.150', null, '1001', 'pkeyI', 'pkeyI', 'CST', 'eng', true, '110005', '2019-07-26 12:18:40.718295', null, null, null, null),\ + ('Test', 'Dummy Machine', '8C-16-45-5A-5D-0D', 'NM5328114630', '192.168.0.150', null, '1001', 'pkeyI', 'pkeyI', 'CST', 'eng', true, '110005', '2019-07-26 12:18:40.718295', null, null, null, null),\ + ('Test', 'Dummy Machine', '8C-16-45-5A-5D-0D', 'NM5328114630', '192.168.0.150', null, '1001', 'pkeyI', 'pkeyI', 'CST', 'ara', true, '110005', '2019-07-26 12:18:40.718295', null, null, null, null); + +deleteMachine2EngUpdate=delete from master.machine_master where cr_by in ('110005'); + +createDocumentType=INSERT INTO master.doc_type( \ + code, name, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ + VALUES ('Act','Activate flag test','Test flag activation','eng','false','superadmin','2019-07-26 12:18:40.718295',null,null,null,null),\ + ('Test','Contrat de location','Contrat de location dadresse','eng','true','superadmin','2019-07-26 12:18:40.718295',null,null,null,null),\ + ('DeAct','Deactivate flag test','Test flag deactivation','eng','true','superadmin','2019-07-26 12:18:40.718295',null,null,null,null); +updateDocumentType=,('Test','Contrat de location','Contrat de location dadresse','ara','false','superadmin','2019-07-26 12:18:40.718295',null,null,null,null); + +deleteDocumentType=delete from master.doc_type where code in ('TestDoc01','TestDoc2','Act','DeAct','Test') or cr_by ='110005'; + +createDeviceForUpdate=INSERT INTO master.device_master( \ + id, name, mac_address, serial_num, ip_address, validity_end_dtimes, dspec_id, zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('TestDevicePro12', 'test dev2', 'D4-3D-7E-C0-8C-4A','ceec5f62-77b7-46f3-816b-3e734305a9c8', '172.23.174.113', \ + '2020-08-07 09:13:22.221', '327', 'CST', 'eng', 'true', '110006', '2019-11-25 11:22:19.799', null, null, null, null), \ + ('TestDevicePro12', 'test dev2', 'D4-3D-7E-C0-8C-4A','ceec5f62-77b7-46f3-816b-3e734305a9c8', '172.23.174.113', \ + '2020-08-07 09:13:22.221', '327', 'CST', 'ara', 'true', '110006', '2019-11-25 11:22:19.799', null, null, null, null), \ + ('TestDevicePro13', 'test dev2', 'D4-3D-7E-C0-8C-4A','ceec5f62-77b7-46f3-816b-3e734305a9c8', '172.23.174.113', \ + '2020-08-07 09:13:22.221', '327', 'CST', 'eng', 'true', '110006', '2019-11-25 11:22:19.799', null, null, null, null); + +deleteDeviceForUpdate=delete from master.device_master where id in ('TestDevicePro12','TestDevicePro13'); + +createDevice2Eng=INSERT INTO master.device_master( \ + id, name, mac_address, serial_num, ip_address, validity_end_dtimes, dspec_id, zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('id1', 'testdeviceswat1', 'D4-3D-7E-C0-8C-4A', 'ceec5f62-77b7-46f3-816b-3e734305a9c8', '172.23.174.113', '2018-12-10T06:12:52.994Z', '327', \ + 'CST', 'eng', 'false', '110005', '2019-11-25 11:22:19.799', null, null, null, null),\ + ('id2', 'testdeviceswat2', 'D4-3D-7E-C0-8C-4A', 'ceec5f62-77b7-46f3-816b-3e734305a9c8', '172.23.174.113', '2018-12-10T06:12:52.994Z', '327', \ + 'CST', 'eng', 'true', '110005', '2019-11-25 11:22:19.799', null, null, null, null); + + +deleteDevice2Eng=delete from master.device_master where name in ('testdeviceswat1','testdeviceswat2','testDevicedummy','testDevicedummy1', 'testDeviceDummy2'); + +validateDeviceHistory=select count(*) from master.device_master_h where name IN ('testdeviceswat1','testdeviceswat2','testDevicedummy','testDevicedummy1'); +deleteDeviceHistory=delete from master.device_master_h where name in ('testdeviceswat1','testdeviceswat2','testDevicedummy','testDevicedummy1'); + +validateMachineHistory=select count(*) from master.machine_master_h where name IN ('Dummy MachineTest'); + +createRegCenterWorkingNonWorkingDays = INSERT INTO master.registration_center( \ + id, name, cntrtyp_code, addr_line1, addr_line2, addr_line3, latitude, \ + longitude, location_code, contact_phone, contact_person, number_of_kiosks, \ + working_hours, per_kiosk_process_time, center_start_time, center_end_time, \ + lunch_start_time, lunch_end_time, time_zone, holiday_loc_code, \ + zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, \ + is_deleted, del_dtimes) \ + VALUES ('59395', 'TestRegCenter', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ + '-6.453275', '10106', '944945765', 'John Doe', '3', \ + '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ + '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ + 'CST', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ + null, null),\ + ('59396', 'TestRegCenter', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ + '-6.453275', '10106', '944945765', 'John Doe', '3', \ + '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ + '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ + 'CST', 'ara', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ + null, null),\ + ('59397', 'TestRegCenter', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ + '-6.453275', '10106', '944945765', 'John Doe', '3', \ + '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ + '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ + 'CST', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ + 'false', null); + +deleteRegCenterWorkNonWork = delete from master.registration_center where id in ('59395', '59396','59397') + +mapworkingDaysToRegCenter = INSERT INTO master.reg_working_nonworking(\ + regcntr_id, day_code, lang_code, is_working, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, \ + is_deleted, del_dtimes)\ + VALUES ('59395', '101', 'eng', 'false', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null),\ + ('59395', '102', 'eng', 'true', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null),\ + ('59395', '103', 'eng', 'true', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null),\ + ('59395', '104', 'eng', 'true', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null),\ + ('59395', '105', 'eng', 'true', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null),\ + ('59395', '106', 'eng', 'true', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null),\ + ('59395', '107', 'eng', 'false', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null),\ + ('59396', '101', 'ara', 'true', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null),\ + ('59396', '102', 'ara', 'true', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null),\ + ('59396', '103', 'ara', 'true', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null),\ + ('59396', '104', 'ara', 'true', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null),\ + ('59396', '105', 'ara', 'true', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null),\ + ('59396', '106', 'ara', 'false', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null),\ + ('59396', '107', 'ara', 'false', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null); + +deleteRegCenterWorkingdaysMapping = delete from master.reg_working_nonworking where regcntr_id in ('59395', '59396') + +regCntrExceptionalHolidaysMapping = INSERT INTO master.reg_exceptional_holiday(\ + regcntr_id, hol_date, hol_name, hol_reason, lang_code, is_active, cr_by, \ + cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('59395', '2020-01-04', 'Emergency Holiday', 'Emergency Holiday', 'eng', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null, null, null, null),\ + ('59395', '2019-11-26', 'Emergency Holiday', 'Emergency Holiday', 'eng', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null, null, null, null),\ + ('59395', '2019-03-10', 'Emergency Holiday', 'Emergency Holiday', 'eng', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null, null, null, null),\ + ('59395', '2019-09-24', 'Emergency Holiday', 'Emergency Holiday', 'eng', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null, null, null, null),\ + ('59396', '2019-02-28', 'Emergency Holiday', 'Emergency Holiday', 'ara', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null, null, null, null),\ + ('59396', '2019-07-11', 'Emergency Holiday', 'Emergency Holiday', 'ara', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null, null, null, null); + +deleteRegCntrExceptionalHolidaysMapping=delete from master.reg_exceptional_holiday where regcntr_id in ('59395','59396') + +createHoliday= INSERT INTO master.loc_holiday(\ + id, location_code, holiday_date, holiday_name, holiday_desc, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES (20010191,'KTA','2020-07-15','Labour Day','Automation labour Holiday','eng','true','110005','2020-05-07T05:30:46.227Z',null,null,null,null); + +deleteUpdateHoliday= delete from master.loc_holiday where cr_by='110005' ; + + +updateHoliday= INSERT INTO master.loc_holiday(\ + id, location_code, holiday_date, holiday_name, holiday_desc, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES (20000191,'KTA','2020-07-15','Labour Day','Automation labour Holiday','eng','true','110005','2020-05-07T05:30:46.227Z',null,null,null,null); + + +createTitle= INSERT INTO master.title(\ + code, name,descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('TEST4','TEST4','TEST4','eng','false','110005','2020-05-18T05:19:53.996Z',null,null,null,null); + +createTitleDelete= delete from master.title where cr_by='110005'; + +checkPrimDataAgainstSecData= select count(*) from master.title where lang_code='ara' and code='TEST5'; + +updateCreatedTitle= INSERT INTO master.title(\ + code, name,descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('TEST-auto','Master-auto','MASTER-auto','eng','false','110005','2020-05-26T05:19:53.996Z',null,null,null,null); + +deleteUpdatedTitle= delete from master.title where cr_by='110005'; + +createMachineType= INSERT INTO master.machine_type(\ + code, name, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('Laptop-0002','Laptop-0002 test','Laptop-0002 info','eng','false','110005','2020-05-27T05:19:53.996Z',null,null,null,null); + +deleteMachineType= delete from master.machine_type where cr_by='110005'; +checkPrimDataAgainstSecData_MachineType= select count(*) from master.machine_type where lang_code='ara' and code='Laptop-1'; + +createDeviceSpecification= INSERT INTO master.device_spec(\ + id, name, brand, model, dtyp_code, min_driver_ver, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES('744','Cam','Technoforte','2020','CMR','1.0','Test DeviceSpec','eng','false','110005','2020-05-27T05:19:53.996Z',null,null,null,null); +deleteCreatedDeviceSpecification= delete from master.device_spec where cr_by='110005'; + +updateDeviceSpecification= INSERT INTO master.device_spec(\ + id, name, brand, model, dtyp_code, min_driver_ver, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES('746','Laptop','Dell','2020','CMR','1.1','Dell DeviceSpec','eng','true','110005','2020-05-28T05:19:53.996Z',null,null,null,null),\ + ('746','Laptop','Dell','2020','CMR','1.1','Dell DeviceSpec','ara','true','110005','2020-05-28T05:19:53.996Z',null,null,null,null); +deleteUpdatedDeviceSpecification= delete from master.device_spec where cr_by='110005'; + + + +validatePrimDataAgnstSecData= select count(*) from master.device_spec where lang_code='ara' and dtyp_code='FP1' and brand='Techno'; + +updateMachineType= INSERT INTO master.machine_type(\ + code, name, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('Laptop','Laptop test','Laptop','eng','true','110005','2020-05-28T05:19:53.996Z',null,null,null,null),\ + ('Laptop','Laptop test','Laptop','ara','true','110005','2020-05-28T05:19:53.996Z',null,null,null,null); + +deleteUpdatedMachineType= delete from master.machine_type where cr_by='110005'; + +createMachineSpecification= INSERT INTO master.machine_spec(\ + id, name, brand, model, mtyp_code, min_driver_ver, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES('HP001','HP','HP','1234','DKS','3.2','HP brand','eng','true','110005','2020-05-29T05:19:53.996Z',null,null,null,null); + + deleteMachineSpecification= delete from master.machine_spec where cr_by='110005'; + + validatePrimDataForMachineSpec= select count(*) from master.machine_spec where lang_code='ara' and mtyp_code='DKS' and id='HP-06'; + + updateMachineSpecification= INSERT INTO master.machine_spec(\ + id, name, brand, model, mtyp_code, min_driver_ver, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES('HP07','HP','HP','1234','DKS','3.2','HP brand','eng','true','110005','2020-05-30T05:19:53.996Z',null,null,null,null); + + deleteUpdatedMachineSpec= delete from master.machine_spec where cr_by='110005'; + + createRegCenterType=INSERT INTO master.reg_center_type(\ + code, name, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('ALT-2', 'alternate','alternate center' ,'eng', 'true', '110005', '2020-05-30T05:19:53.996Z', null, null, null, null); + +deleteCretedRegCenterType= delete from master.reg_center_type where cr_by='110005'; + +validatePrimDataForRegCenter= select count(*) from master.reg_center_type where lang_code='ara' and code='ALT-13'; + +updateRegCenterType= INSERT INTO master.reg_center_type(\ + code, name, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('ALT-3', 'alternate','alternate center' ,'eng', 'true', '110005', '2020-05-30T05:19:53.996Z', null, null, null, null); + +deleteUpdatedRegCenterType= delete from master.reg_center_type where cr_by='110005'; + +createTemplateFileFormat=INSERT INTO master.template_file_format(\ + code, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('Xaml', 'Xaml Test', 'eng', 'true', '110005','2020-06-02T10:04:43.336Z' ,null, null, null, null); + +deleteCreatedTemplateFileFormat= delete from master.template_file_format where cr_by='110005'; + +updateTemplateFileFormat=INSERT INTO master.template_file_format(\ + code, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('PDF', 'PDF Test', 'eng', 'true', '110005','2020-06-02T10:04:43.336Z' ,null, null, null, null),\ + ('PDF-1', 'PDF-1 Test', 'eng', 'true', '110005','2020-06-02T10:04:43.336Z' ,null, null, null, null); + +deleteUpdatedTemplateFileFormat= delete from master.template_file_format where cr_by='110005'; + +createTemplate= INSERT INTO master.template(\ + id, name, descr, file_format_code, model, file_txt, module_id, module_name, template_typ_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('test-002','Test-template','test template','html','model-1','abc','10001','Pre-Registration','Acknowledgement-email-subject','eng','true','110005','2020-06-03T10:15:27.703Z', null,null,null,null); + + +deleleCreatedTemplate= delete from master.template where cr_by='110005'; + + +createHoliday= INSERT INTO master.loc_holiday(\ + id, location_code, holiday_date, holiday_name, holiday_desc, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES (20010191,'KTA','2020-07-15','Labour Day','Automation labour Holiday','eng','true','110005','2020-05-07T05:30:46.227Z',null,null,null,null); + +deleteCreatedHoliday= delete from master.loc_holiday where cr_by='110005' ; + +createGender= INSERT INTO master.gender(\ + code, name, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('MLE-Auto','Test-Auto','eng','false','110005','2020-05-18T05:19:53.996Z',null,null,null,null); + +deleteGender= delete from master.gender where cr_by='110005' ; + +updateGender= INSERT INTO master.gender(\ + code, name, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('MLE-Auto-1','Test-Auto-1','eng','false','110005','2020-05-18T05:19:53.996Z',null,null,null,null); + +deleteUpdatedGender= delete from master.gender where cr_by='110005' ; + +createDocumentCategory= INSERT INTO master.doc_category(\ + code, name, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ + VALUES ('DocCat00','DocCat','Testing positive Doc','eng','false','110005','2020-05-19T12:46:15.373Z',null,null,null,null); + + +deleteDocumentCategory= delete from master.doc_category where cr_by='110005'; + +validatePrimDocCatUpdatedBySec = select count(*) from master.doc_category where is_active='true' and code='DocCat00'; +isActiveStatusFalse = select count(*) from master.doc_category where is_active='false' and code='DocTestCode11'; + +createDocumentCategoryForUpdate=INSERT INTO master.doc_category(\ + code, name, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ + VALUES ('DocCat002','DocCat002','Testing positive002','eng','true','110005','2020-05-19T12:46:15.373Z',null,null,null,null),\ + ('DocCat003','DocCat003','Testing positive003','eng','true','110005','2020-05-19T12:46:15.373Z',null,null,null,null),\ + ('DocCat004','DocCat004','Testing positive004','eng','false','110005','2020-05-19T12:46:15.373Z',null,null,null,null),\ + ('DocCat005','DocCat005','Testing positive005','eng','false','110005','2020-05-19T12:46:15.373Z',null,null,null,null),\ + ('DocCat005','DocCat004','Testing positive005','ara','false','110005','2020-05-19T12:46:15.373Z',null,null,null,null),\ + ('DocCat006','DocCat006','Testing positive006','eng','true','110005','2020-05-19T12:46:15.373Z',null,null,null,null),\ + ('DocCat006','DocCat006','Testing positive006','ara','true','110005','2020-05-19T12:46:15.373Z',null,null,null,null); + +checkPrimDocCatUpdatedBySec = select count(*) from master.doc_category where is_active='true' and code='DocCat004'; + + + +deleteDocumentCategoryForUpdate=delete from master.doc_category where cr_by='110005'; + +updateTemplate= INSERT INTO master.template(\ + id, name, descr, file_format_code, model, file_txt, module_id, module_name, template_typ_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('test-01','Test-template','test template','html','model-1','abc','10001','Pre-Registration','Acknowledgement-email-subject','eng','true','110005','2020-06-03T10:15:27.703Z', null,null,null,null); + + +deleteUpdateTemplate= delete from master.template where cr_by='110005'; + +createTemplateType= INSERT INTO master.template_type(\ + code, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('Test-SMS','Test-SMS-info','eng','true','110005', '2020-06-05T10:15:27.703Z', null, null, null, null); + +deleteCreatedTemplateType= delete from master.template_type where cr_by='110005'; + +createDeviceType= INSERT INTO master.device_type(\ + code, name, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('GST0', 'GST', 'Test GST', 'eng', 'false', '110005', '2020-06-06T10:15:27.703Z',null, null, null, null); +deleteCreatedDeviceType= delete from master.device_type where cr_by='110005'; + +checkPrimDataAgnstSecData= select count(*) from master.device_type where lang_code='ara' and code='GST00' and name='GST00'; + + +updateDeviceType= INSERT INTO master.device_type(\ + code, name, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('FPT', 'finger print scanner', 'test 1.0.8', 'eng', 'true', '110005', '2020-06-06T10:15:27.703Z',null, null, null, null),\ + ('GST3', 'GST', 'test 1.0.8', 'eng', 'true', '110005', '2020-06-06T10:15:27.703Z',null, null, null, null),\ + ('GST3', 'GST', 'test 1.0.8', 'ara', 'true', '110005', '2020-06-06T10:15:27.703Z',null, null, null, null); + +deleteUpdatedDeviceType= delete from master.device_type where cr_by='110005'; +deleteIndividualType= delete from master.individual_type where cr_by='110005'; +validatePrimDataForIndividualType= select count(*) from master.individual_type where lang_code='ara' and code='TST2' and name='TestInd'; + + +updateIndividualType=INSERT INTO master.individual_type(\ + code, name, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('TST0', 'TestInd', 'eng','true', '110005', '2020-06-08T06:12:52.994Z', null, null, null, null),\ + ('TST0', 'TestInd', 'ara','true', '110005', '2020-06-08T06:12:52.994Z', null, null, null, null),\ + ('TST1', 'TST1', 'eng','false', '110005', '2020-06-08T06:12:52.994Z', null, null, null, null),\ + ('TST1', 'TST1', 'ara','true', '110005', '2020-06-08T06:12:52.994Z', null, null, null, null),\ + ('TST2', 'TST2', 'eng','true', '110005', '2020-06-08T06:12:52.994Z', null, null, null, null); + +deleteUpdatedIndividualType= delete from master.individual_type where cr_by='110005'; + + +# These data is for Auth devices, used by IDA. +crtDeviceDetails = INSERT INTO authdevice.device_detail(\ +id, dprovider_id, dtype_code, dstype_code, make, model, partner_org_name, approval_status, is_active, cr_by, cr_dtimes)VALUES \ +('devIrisD', '1873299273', 'Iris', 'Double', 'EYECOOL', 'TCI322', 'EYECOOL.com', 'Activated', true, 'automation', '2020-10-09 07:10:46.072973'),\ +('devFinger', '1873299273', 'Finger', 'Slap', 'Logitech', '4d36e96c-e325-11ce-bfc1-08002be10316', 'Logitech.com', 'Activated', true, 'automation', '2020-10-09 07:10:46.072973'),\ +('devIrisS', '1873299273', 'Iris', 'Single', 'Logitech', '4d36e96c-e325-11ce-bfc1-08002be10317', 'Logitech.com', 'Activated', true, 'automation', '2020-10-09 07:10:46.072973'),\ +('devFace', '1873299273', 'Face', 'Full face', 'Logitech', '6bdd1fc6-810f-11d0-bec7-08002be2092f', 'Logitech.com', 'Activated', true, 'automation', '2020-10-09 07:10:46.072973'); +dltDeviceDetails = delete from authdevice.device_detail where id IN('devIrisD', 'devFinger', 'devIrisS', 'devFace'); + +crtSBI = INSERT INTO authdevice.secure_biometric_interface(id, sw_binary_hash, sw_version, device_detail_id, sw_cr_dtimes, sw_expiry_dtimes, approval_status, is_active, cr_by, cr_dtimes)VALUES \ +('devIrisD', 'binary data', 'SB.WIN.001', 'devIrisD', '2020-01-01 07:10:46.072973', '2030-12-31 07:10:46.072973', 'Activated', true, 'automation', '2020-10-09 07:10:46.072973'),\ +('devFinger', 'binary data', 'SB.WIN.001', 'devFinger', '2020-01-01 07:10:46.072973', '2030-12-31 07:10:46.072973', 'Activated', true, 'automation', '2020-10-09 07:10:46.072973'),\ +('devIrisS', 'binary data', 'SB.WIN.001', 'devIrisS', '2020-01-01 07:10:46.072973', '2030-12-31 07:10:46.072973', 'Activated', true, 'automation', '2020-10-09 07:10:46.072973'),\ +('devFace', 'binary data', 'SB.WIN.001', 'devFace', '2020-01-01 07:10:46.072973', '2030-12-31 07:10:46.072973', 'Activated', true, 'automation', '2020-10-09 07:10:46.072973'); +dltSBI = delete from authdevice.secure_biometric_interface where id IN('devIrisD', 'devFinger', 'devIrisS', 'devFace'); + +crtSBIHist = INSERT INTO authdevice.secure_biometric_interface_h(id, sw_binary_hash, sw_version, device_detail_id, sw_cr_dtimes, sw_expiry_dtimes, approval_status, is_active, cr_by, cr_dtimes, eff_dtimes)VALUES \ +('devIrisD', 'binary data', 'SB.WIN.001', 'devIrisD', '2020-01-01 07:10:46.072973', '2030-12-31 07:10:46.072973', 'Activated', true, 'automation', '2020-10-09 07:10:46.072973', '2020-10-09 07:10:46.072973'),\ +('devFinger', 'binary data', 'SB.WIN.001', 'devFinger', '2020-01-01 07:10:46.072973', '2030-12-31 07:10:46.072973', 'Activated', true, 'automation', '2020-10-09 07:10:46.072973', '2020-10-09 07:10:46.072973'),\ +('devIrisS', 'binary data', 'SB.WIN.001', 'devIrisS', '2020-01-01 07:10:46.072973', '2030-12-31 07:10:46.072973', 'Activated', true, 'automation', '2020-10-09 07:10:46.072973', '2020-10-09 07:10:46.072973'),\ +('devFace', 'binary data', 'SB.WIN.001', 'devFace', '2020-01-01 07:10:46.072973', '2030-12-31 07:10:46.072973', 'Activated', true, 'automation', '2020-10-09 07:10:46.072973', '2020-10-09 07:10:46.072973'); +dltSBIHist = delete from authdevice.secure_biometric_interface_h where id IN('devIrisD', 'devFinger', 'devIrisS', 'devFace'); + +crtAuthDevices = INSERT INTO authdevice.registered_device_master(code, status_code, device_id, device_sub_id, digital_id, serial_number, device_detail_id, purpose, firmware, expiry_date, certification_level, is_active, cr_by, cr_dtimes)VALUES \ +('2a4af583-da31-4800-8cb9-9340643fd1bf', 'REGISTERED', 'FingerDevice', '1', '', '78467169', 'devFinger', 'AUTH','firmware', '2030-12-31 07:10:46.072973', 'L0', true, 'automation', '2020-10-09 07:10:46.072973'),\ +('9ac2ea4c-6ce5-4558-873d-575d130dfc29', 'REGISTERED', 'IrisDevice', '1', '', '78467170', 'devIrisS', 'AUTH','firmware', '2030-12-31 07:10:46.072973', 'L0', true, 'automation', '2020-10-09 07:10:46.072973'),\ +('097b9460-d3d3-4e14-8ac9-c95a734d5d81', 'REGISTERED', 'FaceDevice', '1', '', '097b9460-d3d3-4e14-8ac9-c95a734d5d81', 'devFace', 'AUTH','firmware', '2030-12-31 07:10:46.072973', 'L0', true, 'automation', '2020-10-09 07:10:46.072973'); +dltAuthDevices = delete from authdevice.registered_device_master where code IN('2a4af583-da31-4800-8cb9-9340643fd1bf', '9ac2ea4c-6ce5-4558-873d-575d130dfc29', '097b9460-d3d3-4e14-8ac9-c95a734d5d81'); + +crtAuthDevicesHist = INSERT INTO authdevice.registered_device_master_h(code, status_code, device_id, device_sub_id, digital_id, serial_number, device_detail_id, purpose, firmware, expiry_date, certification_level, is_active, cr_by, cr_dtimes, eff_dtimes)VALUES \ +('2a4af583-da31-4800-8cb9-9340643fd1bf', 'REGISTERED', 'FingerDevice', '1', '', '78467169', 'devFinger', 'AUTH','firmware', '2030-12-31 07:10:46.072973', 'L0', true, 'automation', '2020-10-09 07:10:46.072973', '2020-10-09 07:10:46.072973'),\ +('9ac2ea4c-6ce5-4558-873d-575d130dfc29', 'REGISTERED', 'IrisDevice', '1', '', '78467170', 'devIrisS', 'AUTH','firmware', '2030-12-31 07:10:46.072973', 'L0', true, 'automation', '2020-10-09 07:10:46.072973', '2020-10-09 07:10:46.072973'),\ +('097b9460-d3d3-4e14-8ac9-c95a734d5d81', 'REGISTERED', 'FaceDevice', '1', '', '097b9460-d3d3-4e14-8ac9-c95a734d5d81', 'devFace', 'AUTH','firmware', '2030-12-31 07:10:46.072973', 'L0', true, 'automation', '2020-10-09 07:10:46.072973', '2020-10-09 07:10:46.072973'); +dltAuthDevicesHist = delete from authdevice.registered_device_master_h where code IN('2a4af583-da31-4800-8cb9-9340643fd1bf', '9ac2ea4c-6ce5-4558-873d-575d130dfc29', '097b9460-d3d3-4e14-8ac9-c95a734d5d81'); + +# list of the query-keywords for the bulk query for device management data +crtAuthDevicesData = crtDeviceDetails,crtSBI,crtSBIHist,crtAuthDevices,crtAuthDevicesHist +dltAuthDevicesData = dltAuthDevicesHist,dltAuthDevices,dltSBIHist,dltSBI,dltDeviceDetails + +# Below data is for search and filter APIs automation, so no dependency on DB data. these data will be inserted just +# before the execution starts and will be deleted at the end of the admin execution. +# below are the only zones we should use for automation +crtAutoZone = INSERT INTO master.zone(\ + code, name, hierarchy_level, hierarchy_level_name, hierarchy_path, parent_zone_code, lang_code, is_active, cr_by, cr_dtimes)VALUES\ + ('TPRNTZ', 'Parent',0,'Parent', 'TPRNTZ', null, 'eng', true, 'mosipautouser', '2019-10-21 06:50:26.445996'),\ + ('TPRNTZ', '\u0627\u0644\u0623\u0628\u0648\u064A\u0646',0,'\u0627\u0644\u0623\u0628\u0648\u064A\u0646', 'TPRNTZ', null, 'ara', true, 'mosipautouser', '2019-10-21 06:50:26.445996'),\ + ('LFZL', 'Child1',1,'Child1', 'TPRNTZ/LFZL', 'TPRNTZ', 'eng', true, 'mosipautouser', '2019-10-21 06:50:26.445996'),\ + ('LFZL', '\u0637\u0641\u06441',1,'\u0637\u0641\u06441', 'TPRNTZ/LFZL', 'TPRNTZ', 'ara', true, 'mosipautouser', '2019-10-21 06:50:26.445996'),\ + ('LFZR', 'Child2',1,'Child2', 'TPRNTZ/LFZR', 'TPRNTZ', 'eng', true, 'mosipautouser', '2019-10-21 06:50:26.445996'),\ + ('LFZR', '\u0637\u0641\u06442',1,'\u0637\u0641\u06442', 'TPRNTZ/LFZR', 'TPRNTZ', 'ara', true, 'mosipautouser', '2019-10-21 06:50:26.445996'); +dltAutoZone = delete from master.zone where cr_by = 'mosipautouser'; + +#status type is used in status list and status list is used in user +crtStatusTyp = INSERT INTO master.status_type(\ + code, name, descr, lang_code, is_active, cr_by, cr_dtimes)\ + VALUES ('TSD', 'Tested', 'Tested', 'eng',true,'mosipautouser', '2019-10-21 06:50:26.054295'); +dltStatusTyp = delete from master.status_type where cr_by = 'mosipautouser'; + +crtStatusList = INSERT INTO master.status_list(\ + code, descr, status_seq, sttyp_code, lang_code, is_active, cr_by, cr_dtimes)\ + VALUES('TST', 'TestON', null, 'TSD', 'eng',true,'mosipautouser', '2019-10-21 06:50:27.193756' ); +dltStatusList = delete from master.status_list where cr_by = 'mosipautouser'; + +# auth method is used in user +crtAuthMethod = INSERT INTO master.authentication_method(\ + code, method_seq, lang_code, is_active, cr_by, cr_dtimes)\ + VALUES('TPWD',1,'eng', true, 'mosipautouser', '2019-10-21 06:50:24.650103'); +dltAuthMethod = delete from master.authentication_method where cr_by = 'mosipautouser'; + +# user to use in whole automation, with zonal admin role and mapped to TprntZ zone +crtAutoUser = INSERT INTO master.user_detail(\ + id, uin, name, email, mobile, status_code, lang_code, last_login_dtimes, last_login_method, is_active, cr_by, cr_dtimes)\ + VALUES ('mosipautouser', '5400020000', 'mosipautouser', 'mosiptestmail@gmail.com', '975366148', 'TST', 'eng', null, 'TPWD', true, 'mosipautouser', '2019-10-21 06:50:27.696842'); +dltAutoUser = delete from master.user_detail where cr_by = 'mosipautouser'; + +crtZoneUserMap = INSERT INTO master.zone_user(\ + zone_code, usr_id, lang_code, is_active, cr_by, cr_dtimes)\ + VALUES ('TPRNTZ', 'mosipautouser', 'eng', true, 'mosipautouser', '2019-10-21 06:50:27.950738'); +dltZoneUserMap = delete from master.zone_user where cr_by = 'mosipautouser'; + +# below device type only we will be using for automation +crtDeviceTyp = INSERT INTO master.device_type(\ + code, name, descr, lang_code, is_active, cr_by, cr_dtimes)\ + VALUES ('TDtyp', 'Finger test Scanner', 'For test finger', 'eng', true, 'mosipautouser', '2019-10-21 06:50:24.840922'),\ + ('TDtyp', '\u0627\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u0645\u0627\u0633\u062D \u0627\u0644\u0636\u0648\u0626\u064A', 'For test finger', 'ara', true, 'mosipautouser', '2019-10-21 06:50:24.840922'); +dltDeviceTyp = delete from master.device_type where cr_by = 'mosipautouser'; + +# below device spec only we will be using for automation +crtDeviceSpec = INSERT INTO master.device_spec(\ + id, name, brand, model, dtyp_code, min_driver_ver, descr, lang_code, is_active, cr_by, cr_dtimes)\ + VALUES ('TDSpec', 'Finger Test', 'brand', 'model', 'TDtyp', '1.12', 'To scan fingerprint', 'eng', true, 'mosipautouser', '2019-10-21 06:50:26.685205'),\ + ('TDSpec', '\u0627\u062E\u062A\u0628\u0627', '\u0627\u0644\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u062A\u062C\u0627\u0631\u064A\u0629', '\u0646\u0645\u0648\u0630\u062C', 'TDtyp', '1.12', 'To scan fingerprint', 'ara', true, 'mosipautouser', '2019-10-21 06:50:26.685205'); +dltDeviceSpec = delete from master.device_spec where cr_by = 'mosipautouser'; + +crtDevice = INSERT INTO master.device_master(\ + id, name, mac_address, serial_num, ip_address, validity_end_dtimes, dspec_id, zone_code, lang_code, is_active, cr_by, cr_dtimes)\ + VALUES ('TdeviceSF', 'TestDevice', 'test mac', 'test serial', null, null, 'TDSpec', 'TPRNTZ', 'eng', true, 'mosipautouser', '2019-07-26 12:18:40.718295'),\ + ('TdeviceSF', '\u062C\u0647\u0627\u0632 \u0627\u062E\u062A\u0628\u0627\u0631', 'test mac', 'test serial', null, null, 'TDSpec', 'TPRNTZ', 'ara', true, 'mosipautouser', '2019-07-26 12:18:40.718295'),\ + ('TdeviceSF1', 'TestDevice1', 'test mac1', 'test serial1', null, null, 'TDSpec', 'LFZL', 'eng', true, 'mosipautouser', '2019-07-26 12:18:40.718295'),\ + ('TdeviceSF1', '\u062C\u0647\u0627\u0632 \u0627\u062E\u062A\u0628\u0627\u0631 1', 'test mac1', 'test serial1', null, null, 'TDSpec', 'LFZL', 'ara', true, 'mosipautouser', '2019-07-26 12:18:40.718295'); +dltDevice = delete from master.device_master where cr_by = 'mosipautouser'; + +crtLocHier = INSERT INTO master.loc_hierarchy_list(hierarchy_level, hierarchy_level_name, lang_code, is_active, cr_by, cr_dtimes) VALUES \ + (0, 'test parent', 'eng', true, 'mosipautouser','2019-10-21 06:50:25.785225'), \ + (0, '\u0627\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u0648\u0627\u0644\u062F\u064A\u0646', 'ara', true, 'mosipautouser','2019-10-21 06:50:25.785225'),\ + (1, 'Child', 'eng', true, 'mosipautouser','2019-10-21 06:50:25.785225'),\ + (1, '\u0637\u0641\u0644', 'ara', true, 'mosipautouser','2019-10-21 06:50:25.785225'); +dltLocHier = delete from master.loc_hierarchy_list where cr_by = 'mosipautouser'; + +crtLoacation = INSERT INTO master.location( \ + code, name, hierarchy_level, hierarchy_level_name, parent_loc_code, lang_code, is_active, cr_by, cr_dtimes) VALUES \ + ('TLOC', 'Location test M', 0, 'test parent', null, 'eng', true, 'mosipautouser', '2019-10-21 06:50:25.31645'), \ + ('TLOC', '\u0627\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u0645\u0648\u0642\u0639', 0, '\u0627\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u0648\u0627\u0644\u062F\u064A\u0646', null, 'ara', true, 'mosipautouser', '2019-10-21 06:50:25.31645'),\ + ('TCLOC', 'childloctest', 1, 'Child', 'TLOC', 'eng', true, 'mosipautouser', '2019-10-21 06:50:25.31645'),\ + ('TCLOC', '\u0634\u0627\u0630', 1, '\u0637\u0641\u0644', 'TLOC', 'ara', true,'mosipautouser', '2019-10-21 06:50:25.31645'); +dltLoacation = delete from master.location where cr_by = 'mosipautouser'; + +crtRegCentTyp = INSERT INTO master.reg_center_type( \ + code, name, descr, lang_code, is_active, cr_by, cr_dtimes)VALUES \ + ('TREG', 'Test R cent', 'Center For test', 'eng', true, 'mosipautouser', '2019-10-21 06:50:25.785225'), \ + ('TREG', '\u0627\u062E\u062A\u0628\u0627\u0631 R \u0627\u0644\u0645\u0627\u0626\u0629', '\u0645\u0631\u0643\u0632 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631', 'ara', true, 'mosipautouser', '2019-10-21 06:50:25.785225'); +dltRegCentTyp = delete from master.reg_center_type where cr_by = 'mosipautouser'; + +crtRegCenter = INSERT INTO master.registration_center( \ + id, name, cntrtyp_code, addr_line1, addr_line2, addr_line3, latitude, longitude, location_code, contact_phone, contact_person, number_of_kiosks, working_hours, per_kiosk_process_time, center_start_time, center_end_time, lunch_start_time, lunch_end_time, time_zone, holiday_loc_code, zone_code, lang_code, is_active, cr_by, cr_dtimes) \ + VALUES ('TRCnt', 'map test center', 'TREG', 'address1', 'address2', 'address3', '34.522414', '-6.320471', 'TCLOC', '0000000000', 'owner', 2, '8:00:00', '00:15:00', '09:00:00', '17:00:00', '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'HLOC', 'LFZL', 'eng', true, 'mosipautouser', '2019-10-21 06:50:27.012387'), \ + ('TRCnt', '\u0645\u0631\u0643\u0632 \u0627\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u062E\u0631\u0627\u0626\u0637', 'TREG', '\u0627\u0644\u0639\u0646\u0648\u0627\u0646 1', 'address2', 'address3', '34.522414', '-6.320471', 'TCLOC', '0000000000', '\u0635\u0627\u062D\u0628', 2, '8:00:00', '00:15:00', '09:00:00', '17:00:00', '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'HLOC', 'LFZL', 'ara', true, 'mosipautouser', '2019-10-21 06:50:27.012387'); +dltRegCenter = delete from master.registration_center where cr_by = 'mosipautouser'; + +crtRegCntrDev = INSERT INTO master.reg_center_device( \ + regcntr_id, device_id, lang_code, is_active, cr_by, cr_dtimes) \ + VALUES ('TRCnt', 'TdeviceSF', 'eng', true, 'mosipautouser', '2019-10-21 06:50:27.732946'); +dltRegCntrDev = delete from master.reg_center_device where cr_by = 'mosipautouser'; + +crtMachineTyp = INSERT INTO master.machine_type(code, name, descr, lang_code, is_active, cr_by, cr_dtimes)VALUES \ + ('TMTYP', 'Test M Type', 'Test Mach type', 'eng', true, 'mosipautouser', '2019-10-21 06:50:25.446465'), \ + ('TMTYP', '\u0627\u062E\u062A\u0628\u0627\u0631 \u0646\u0648\u0639 M','\u0627\u062E\u062A\u0628\u0627\u0631 \u0646\u0648\u0639 \u0645\u0627\u062E', 'ara', true, 'mosipautouser', '2019-10-21 06:50:25.446465'); +delMachineTyp = delete from master.machine_type where cr_by = 'mosipautouser'; + +crtMachSpec = INSERT INTO master.machine_spec( \ + id, name, brand, model, mtyp_code, min_driver_ver, descr, lang_code, is_active, cr_by, cr_dtimes)VALUES \ + ('TMSPC', 'Testro', 'brand', 'model', 'TMTYP', '1.454', 'To test enrol', 'eng', true,'mosipautouser', '2019-10-21 06:50:26.846071'), \ + ('TMSPC', '\u062A\u0633\u062A\u0631\u0648', '\u0627\u0644\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u062A\u062C\u0627\u0631\u064A\u0629', '\u0646\u0645\u0648\u0630\u062C', 'TMTYP', '1.454', '\u0644\u0627\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u062A\u0633\u062C\u064A\u0644', 'ara', true,'mosipautouser', '2019-10-21 06:50:26.846071'); +delMachSpec = delete from master.machine_spec where cr_by = 'mosipautouser'; + +crtMachine = INSERT INTO master.machine_master( \ + id, name, mac_address, serial_num, ip_address, validity_end_dtimes, mspec_id, public_key, key_index, zone_code, lang_code, is_active, cr_by, cr_dtimes)VALUES \ + ('TMachid', 'test mach', 'test mac', 'test serial', 'test ip','2029-10-21 06:50:27.523105', 'TMSPC','testpublickey', 'testKeyIndex', 'TPRNTZ', 'eng', 'true', 'mosipautouser', '2019-10-21 06:50:27.523105'), \ + ('TMachid', '\u0627\u062E\u062A\u0628\u0627\u0631', 'test mac', 'test serial', 'test ip','2029-10-21 06:50:27.523105', 'TMSPC','testpublickey', 'testKeyIndex', 'TPRNTZ', 'ara', 'true', 'mosipautouser', '2019-10-21 06:50:27.523105'), \ + ('TMachid1', 'test mach1', 'test mac1', 'test serial1', 'test ip1','2029-10-21 06:50:27.523105', 'TMSPC','testpublickey1', 'testKeyIndex1', 'LFZL', 'eng', 'true', 'mosipautouser', '2019-10-21 06:50:27.523105'), \ + ('TMachid1', '\u0627\u062E\u062A\u0628\u0627\u0631 1', 'test mac1', 'test serial1', 'test ip1','2029-10-21 06:50:27.523105', 'TMSPC','testpublickey1', 'testKeyIndex1', 'LFZL', 'ara', 'true', 'mosipautouser', '2019-10-21 06:50:27.523105'); +dltMachine = delete from master.machine_master where cr_by = 'mosipautouser'; + +crtRegCntrMach = INSERT INTO master.reg_center_machine( \ + regcntr_id, machine_id, lang_code, is_active, cr_by, cr_dtimes) \ + VALUES ('TRCnt', 'TMachid1', 'eng', true, 'mosipautouser', '2019-10-21 06:50:27.732946'); +dltRegCntrMach = delete from master.reg_center_machine where cr_by = 'mosipautouser'; + +crtDocTyp = INSERT INTO master.doc_type( \ + code, name, descr, lang_code, is_active, cr_by, cr_dtimes)VALUES \ + ('TDTYP', 'Tdoctyp', 'test document', 'eng', true, 'mosipautouser', '2019-10-21 06:50:27.732946'),\ + ('TDTYP', '\u062A\u062F\u0648\u0637\u064A', '\u0648\u062B\u064A\u0642\u0629 \u0627\u062E\u062A\u0628\u0627\u0631', 'ara', true, 'mosipautouser', '2019-10-21 06:50:27.732946'); +dltDocTyp = delete from master.doc_type where cr_by = 'mosipautouser'; + +crtDocCat = INSERT INTO master.doc_category(\ + code, name, descr, lang_code, is_active, cr_by, cr_dtimes)VALUES \ + ('TDCAT', 'Tdoccat', 'test document', 'eng', true, 'mosipautouser', '2019-10-21 06:50:27.732946'),\ + ('TDCAT', '\u062A\u062F\u0648\u0643\u0627\u062A', '\u0648\u062B\u064A\u0642\u0629 \u0627\u062E\u062A\u0628\u0627\u0631', 'ara', true, 'mosipautouser', '2019-10-21 06:50:27.732946'); +dltDocCat = delete from master.doc_category where cr_by = 'mosipautouser'; + +crtDocCatTyp = INSERT INTO master.valid_document( \ + doctyp_code, doccat_code, lang_code, is_active, cr_by, cr_dtimes)VALUES \ + ('TDTYP', 'TDCAT', 'eng', true, 'mosipautouser', '2019-10-21 06:50:27.732946'); +dltDocCatTyp = delete from master.valid_document where cr_by = 'mosipautouser'; + +crtTitle = INSERT INTO master.title(code, name, descr, lang_code, is_active, cr_by, cr_dtimes)VALUES \ + ('TTTL', 'test title','title testing', 'eng', true, 'mosipautouser', '2019-10-21 06:50:27.732946'),\ + ('TTTL', '\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631','\u0627\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u0639\u0646\u0648\u0627\u0646', 'ara', true, 'mosipautouser', '2019-10-21 06:50:27.732946'); +dltTitle = delete from master.title where cr_by = 'mosipautouser'; + +crtGender = INSERT INTO master.gender(code, name, lang_code, is_active, cr_by, cr_dtimes)VALUES \ + ('TGDR', 'test gender', 'eng', true, 'mosipautouser', '2019-10-21 06:50:27.732946'),\ + ('TGDR', '\u0627\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u062C\u0646\u0633', 'ara', true, 'mosipautouser', '2019-10-21 06:50:27.732946'); +dltGender = delete from master.gender where cr_by = 'mosipautouser'; + +# list of the query-keywords for the bulk query +allAutoCrt = crtAutoZone,crtStatusTyp,crtStatusList,crtAuthMethod,crtAutoUser,crtZoneUserMap,crtDeviceTyp,\ + crtDeviceSpec,crtDevice,crtLocHier,crtLoacation,crtRegCentTyp,crtRegCenter,crtRegCntrDev,crtMachineTyp,\ + crtMachSpec,crtMachine,crtRegCntrMach,crtDocTyp,crtDocCat,crtDocCatTyp +allAutoDlt = dltRegCntrDev,dltRegCntrMach,dltRegCenter,dltRegCentTyp,dltDevice,dltDeviceSpec,dltDeviceTyp,dltMachine,\ + delMachSpec,delMachineTyp,dltZoneUserMap,dltAutoZone,dltAutoUser,dltStatusList,\ + dltStatusTyp,dltAuthMethod,dltLoacation,dltLocHier,dltDocCatTyp,dltDocCat,dltDocTyp + +# temp for test, need to add fields in permanent +#allAutoCrt = crtTitle,crtGender +#allAutoDlt = dltTitle,dltGender + +# verifying the status in DB when create API runs with only one language[i.e when record created in primary language] +createDeviceSpecIsActive= select count(*) from master.device_spec where is_active='false' and id='743' and lang_code='eng'; +createMachineTypeIsActive= select count(*) from master.machine_type where is_active='false' and code='Laptop-2' and lang_code='eng'; +createGenderIsActive= select count(*) from master.gender where is_active='false' and code='Genderdummy-0' and lang_code='eng'; +createTemplateFileFormateIsActive= select count(*) from master.template_file_format where is_active='false' and code='Docx' and lang_code='eng'; +createDeviceTypeIsActive= select count(*) from master.device_type where is_active='false' and code='GST31607' and lang_code='eng'; +createHolidayIsActive= select count(*) from master.loc_holiday where is_active='false' and holiday_name='AutoTest user 16july' and lang_code='eng'; +createMachineSpecIsActive= select count(*) from master.machine_spec where is_active='false' and id='HP04' and lang_code='eng'; +createRegCentrTypeIsActive= select count(*) from master.reg_center_type where is_active='false' and code='RegALT-03' and lang_code='eng'; +createTitleIsActive= select count(*) from master.title where is_active='false' and code='crTEST0011' and lang_code='eng'; +createTemplateIsActive= select count(*) from master.template where is_active='false' and id='crTempTest-03' and lang_code='eng'; +createTemplateTypeIsActive= select count(*) from master.template_type where is_active='false' and code='crTest-info-Template' and lang_code='eng'; +createBlackLstWordIsActive= select count(*) from master.blacklisted_words where is_active='false' and word='asshole' and lang_code='eng'; + + +deleteBlackListedWord=delete from master.blacklisted_words where cr_by='110005' + +deleteDynamicField= delete from master.dynamic_field where cr_by='110005'; +createDynamicFiledData=INSERT INTO master.dynamic_field(\ + id, name, description, data_type, value_json, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('DF-001', 'Technology', 'Technology Known', 'String', '[{"code":"Angular","value":"Angular","langCode":"eng","active":true}]', 'eng', 'true', '110005', '2020-08-07 09:08:51.607', null, null, null, null); \ No newline at end of file diff --git a/apitest/src/main/resources/config/adminTokenGeneration.properties b/apitest/src/main/resources/config/adminTokenGeneration.properties new file mode 100644 index 000000000..0668f3973 --- /dev/null +++ b/apitest/src/main/resources/config/adminTokenGeneration.properties @@ -0,0 +1,5 @@ +token.request.id=mosip.io.userId.pwd +token.request.appid=registrationclient +token.request.username=110005 +token.request.password=mosip +token.request.version=1.0 \ No newline at end of file diff --git a/apitest/src/main/resources/config/application.properties b/apitest/src/main/resources/config/application.properties new file mode 100644 index 000000000..c0e9841a7 --- /dev/null +++ b/apitest/src/main/resources/config/application.properties @@ -0,0 +1,103 @@ +## End point(s) relative URLs +internalSignEndpoint=/idauthentication/v1/internal/jwtSign +signJsonPath=config/sign.json +encryptionPath=v1/identity/encrypt?isInternal=false +internalEncryptionPath=v1/identity/encrypt?isInternal=true +encodePath=v1/identity/encode +decodePath=v1/identity/decode +signRequest=v1/identity/signRequest +decryptPath=/idauthentication/v1/internal/decrypt +decryptkycdataurl = v1/identity/decryptEkycData +encodeFilePath=v1/identity/encodeFile +decodeFilePath=v1/identity/decodeFile/?fileName=cbeff +validateSignaturePath=v1/identity/validateSign?signature=$signature$ +splitEncryptedData=v1/identity/splitEncryptedData +bioValueEncryptionTemplate=config/bioValueEncryptionTemplate.json +idaMappingPath=config/mapping.properties +getIdaCertificateUrl=/idauthentication/v1/internal/getCertificate +getPartnerCertificateUrl=/v1/partnermanager/partners/{partnerId}/certificate +putPartnerRegistrationUrl=/v1/partnermanager/partners +getPartnerCertURL=v1/identity/generatePartnerKeys +uploadCACertificateUrl=/v1/partnermanager/partners/certificate/ca/upload +uploadIntermediateCertificateUrl=/v1/partnermanager/partners/certificate/ca/upload +uploadPartnerCertificateUrl=/v1/partnermanager/partners/certificate/upload +uploadSignedCertificateUrl=v1/identity/updatePartnerCertificate +getKeyCloakTokenUrl = /auth/realms/master/protocol/openid-connect/token +masterSchemaURL=/v1/masterdata/idschema/latest +preregLoginConfigUrl=/preregistration/v1/login/config +uploadIdaFirurl=v1/identity/uploadIDACertificate?certificateType=IDA_FIR&moduleName=$MODULENAME$&certsDir=$CERTSDIR$ +uploadPartnerurl=v1/identity/uploadIDACertificate?certificateType=PARTNER&moduleName=$MODULENAME$&certsDir=$CERTSDIR$ +uploadInternalurl=v1/identity/uploadIDACertificate?certificateType=INTERNAL&moduleName=$MODULENAME$&certsDir=$CERTSDIR$ +authPolicyUrl=/v1/policymanager/policies +policyGroupUrl=/v1/policymanager/policies/group/new +publishPolicyurl=/v1/policymanager/policies/POLICYID/group/POLICYGROUPID/publish +clearCertificateURL=v1/identity/clearKeys?moduleName=$MODULENAME$&certsDir=$CERTSDIR$ +fetchLocationData=/v1/masterdata/locations/all +fetchLocationLevel=/v1/masterdata/locations/level/ +fetchTitle=/v1/masterdata/title +fetchZoneCode=/v1/masterdata/zones/hierarchy/ +fetchZone=/v1/masterdata/zones/zonename +decryptKycUrl=/v1/identity/decryptEkycData +retrieveIdByUin=/idrepository/v1/identity/idvid/ +fetchLocationHierarchyLevels=/v1/masterdata/locationHierarchyLevels/ +fetchLocationHierarchy=/v1/masterdata/locations/locationhierarchy/ +generateArgon2HashURL=/v1/keymanager/generateArgon2Hash +appointmentavailabilityurl=/preregistration/v1/appointment/availability/ +validateSignatureUrl=v1/identity/validateSign +vciContextURL=https://www.w3.org/2018/credentials/v1 + +## Auto generated properties while running the test rig(s) +adminAutoGeneratedIdPropFileName=/admin/autoGeneratedId.properties +masterDataAutoGeneratedIdPropFileName=/masterdata/autoGeneratedId.properties +syncDataAutoGeneratedIdPropFileName=/syncdata/autoGeneratedId.properties +preregAutoGeneratedIdPropFileName=/preReg/autoGeneratedId.properties +partnerAutoGeneratedIdPropFileName=/partner/autoGeneratedId.properties +idrepoAutoGeneratedIdPropFileName=/idRepository/autoGeneratedId.properties +residentAutoGeneratedIdPropFileName=/resident/autoGeneratedId.properties +esignetAutoGeneratedIdPropFileName=/esignet/autoGeneratedId.properties +mimotoAutoGeneratedIdPropFileName=/mimoto/autoGeneratedId.properties +authAutoGeneratedIdPropFileName=/ida/autoGeneratedId.properties +prerequisiteAutoGeneratedIdPropFileName=/prerequisite/autoGeneratedId.properties +regProcAutoGeneratedIdPropFileName=/regProc/autoGeneratedId.properties +mobileIdAutoGeneratedIdPropFileName=/mobileId/autoGeneratedId.properties + +## As below are non changble values, move these out from properties file +appIdForCertificate=IDA +partnerrefId=PARTNER +internalrefId=INTERNAL +idaFirRefId=IDA-FIR +proxyOTP=111111 +wrongOtp=123455 + +## +regcentretobookappointment=10003 +keysToValidateInKYC=phoneNumber,emailId,age,dob,name_eng +#partner certificate refId, used for getting the partner certificate +partner=9998 +signatureheaderKey=response-signature +uinGenMaxLoopCount=20 +uinGenDelayTime=10000 +Delaytime=90000 + + +## Remove this from properties file +picturevalue=iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAIAAAACUFjqAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAABCSURBVChTbYtBEgAgCAL7/6eNhBy09qDi6gpjXZSxUU8o/jrfpDmcmY1QAOWhgTswv6sSm8zVhULlgst++8T51IjYNUHdI+4XZHoAAAAASUVORK5CYII= + + +## Check are we using these properties. If not remove them +zoneCode_to_beMapped=NTH +expireOtpTime=180000 +demoAppVersion=1.2.1-SNAPSHOT +AttributetoBeUpdate:Name +ValuetoBeUpdate:Sohan + +## As these will be based on regEx, move these out from proprties file +passwordForAddIdentity=12341234_Aa +passwordToReset=12341234_AaB + +## Need to revisit these propeties +XSRFTOKEN=7d01b2a8-b89d-41ad-9361-d7f6294021d1 +codeChallenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM +codeVerifier=dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk +policyNumberForSunBirdRC=654321 +challengeValueForSunBirdRC=eyJmdWxsTmFtZSI6IkthaWYgU2lkZGlxdWUiLCJkb2IiOiIyMDAwLTA3LTI2In0= \ No newline at end of file diff --git a/apitest/src/main/resources/config/bioValue.properties b/apitest/src/main/resources/config/bioValue.properties new file mode 100644 index 000000000..f40dee726 --- /dev/null +++ b/apitest/src/main/resources/config/bioValue.properties @@ -0,0 +1,49 @@ +#FaceBiometricValue +FaceBioValue=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 + +# +RightIrisBioValue=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 + +# +LeftIrisBioValue=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 + +# +RightThumbBioValue=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 +# +LeftThumbBioValue=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 + +# +RightLittleFingerBioValue=RklSADAyMAAAAT/cAAEBAQABP8wH5gwcDCArAz8AAAAAAAEiAEAADwIAQAIAQAIFAAEB9AH0AfQB9AgFHQERAY8AAT9bAAAADGpQICANCocKAAAAFGZ0eXBqcDIgAAAAAGpwMiAAAABHanAyaAAAABZpaGRyAAABjwAAAREAAQcHAAAAAAAPY29scgEAAAAAABEAAAAacmVzIAAAABJyZXNjmcoAAZnKAAEAAAAAAABqcDJj/0//UQApAAAAAAERAAABjwAAAAAAAAAAAAABEQAAAY8AAAAAAAAAAAABBwEB/2QAIwABQ3JlYXRvcjogSmFzUGVyIFZlcnNpb24gMS45MDAuMf9kABAAAUVuY0lEOkdSQlQwMf9SAAwAAgAJAAUEBAAB/1wAE0BASEhQSEhQSEhQSEhQSEhQ/5AACgAAAAE+YwAB/5PfG2AULPcLs4yzq0CiUOwhdKYu7A0o7WYrxcscUsWp6JKahvgbkiIoxSw0zYo9FfYELZfhBM6rpfOAgIDyiIdxNiJ9caRe9BKmcK4dmfzAgIDxAGbrKpymaYQL+S4Ao6jJ7Mj8B4D9YhBdNT1pKHnwC4QCLAxNTRNx1QD3g25B+SiNAt/HWAAYrXhxx41/qiTVkKumN8LNqDV9lHTwSW+Ao9QR5gAqgnBPbxRV+Fh9bCGTFL2uLAaKa61q/KTAud+mqo8L92giRhgCOwmZiwqnpFq9dSwZQmBjYbLKotYAsukF49FBsi3ADAZvxHHgrlnskn1qECWMLYFT2ftz/vFAxeLigLrK8f1GsDQxLuG965g9x4G4dMAAcIRqzhvsYUoE41OcG5I0ct7/P8gA3EC/e6fEUvj8Zf8Ms+ZwvcEn0t/pL5sl3gFGs0y7B0i4HPIfSZeNQXRPclt+Gr8i/O4pZ2ZqlANnxBDwnz9yBiCs61LKxbOZ7Fq0ICg2QF2k1PFlO3FZPp385JKNQBRCzDiEOpLr0EdqH564R6e3L7XtAeKHgupRLOd9YDkHDWEob2ae3BKLsocDQD5Bn5F7nINSVeQuJPtO8EsYdGabp3B7yUCO5G0a+Kdop1nBUxJ5OHiJnZ1nZP4aQ8zMxSASLrJQHjEziNmzcR3a2pI6tQbG+tfv0XRu6FK+h2LZ2+6ZA0U90IaD1PLQFSyAm6NjBZ/QbyWNxFv6WdSqHmrwLNkJVlytPzXgj3F66sd5V6yxNTWWSqpF5ltzoHhUa7BCztHBVFjlizg/f1NQsOk/6JrQmx+ESDyQ3vSVIWtJJUkTAPXoo7KpnwRta0Mo2+L+6C8CB6RqKX6tg0cAKxXy9wqAhoKP+DQMhLw+PixvEDOo9zKEy8dAo6PoO9cu/PT4nwAInpkye5lfcrBLXxxlEaB2sLd7AMej/zYrSjCEQxAIFtbxSKiWUnGLu+M2f3Ry1KomvoDnUtrI05tb4roD6ld2Zu38mtKETxwU5o31Iy7EFCLojkNG5zSdaqEzJKZ7Rpqw4mTKz+TIqo28QQfu7pUA1EcREmTkYPllVcceu++NTQsSek3/AE0lDtQ8rcXa1uMoTa7N0cXpMVlfEhmXSdnK7fYalg03rT7eHkBrkkle+HcKZGct6KAJ2Ekng8Ye+yLJ7g26KD17Lnn4gES7ZE/HonhAdxRG/HomfQnOCbVeXral8WhZDHYagHwuDOeZPNPhEvj61Bv87q+Y9/oR4OUdJ15ExZQXauPINaxweXQ5uBO9X6fbqyZsVhPyMnRulUtUmKPkSyGeLhgQXGifiiL7nmg1POC4UyqzgvYbvbC/c6T8IVo6L504hPurwP4aDpW84GE4a1RU7XyYxchKQa4Ao2R3OP8SEXB2iPMgtnz/NXpIao9mC/uN8YoRcT2EF2eqObFr0QCt6EqUd1Y14ahCBGiJBMawnkUKENkwcCplEkj3+nXS/genjnCKb9X8nNPnLePSCNlDHJ6cRm+B7dTGKCidUe7AEynFTBnUzEsULioF/q4RE9UqkjvXxHC5IASSEQjac7FH76tGtb2UiKCU15+lJAz5KxbXG1sRPIfvDGu66pDnFMb+Fr9Ory/9DoSaSOEpjHPNiqKXJTrSCrSDTLNoZq3u/ofvgBgo1jMN2dnsTSppM2ba7FughgSzIZmCSjB40cFqdOdZm++QTnJxDI9f+HKKrDjCh1UAaCzBmGtUTBqC2HBlmOtPC2wx5x8YyNONYPhPkkvMICwUgnpfsBZP+CoPdlBuvtPLr0ZKaWYc+RYasfH/a/ucsDSGPgkuinNTXtAIjDT9DIEI8Yd1R1okv8ym8EcrHxkmG/HHA3cdYLO861+U8dKLHGmYOdOOvXmu2pPhE29J8XaB4j+DebI9dK5Flw9syET+wF6VPgsXu/EJ4m2TqLZ9N9PM+KyPNkGVt7o501A1bBSBGvcFHftDhNFxCZimYV9F8oaoc2tPVRXxVo8rbsl70xrqhW7Ny08DSNxVlWximMqRlVsA9OKqvQMKZ6GYIzl3JB+ac2E3dZxulMg5bVcW2GNT4F5AmJXXZeU81cN/UpcZ8xnMTXKi+A6c0j8+T1TsixNSNPZSNj4KU6hlpfn78pYnP9purpcycgTDgPE5mdpyXLEar3IBNu10j1eC+l+pfAHKNh0FESErbQvW8yh5GpkhrvciHmcFYOCm84c0NzcEcvc/0sXYi1DE/m2U93mYrmrhnsatWTmZ+aZfPCPkFxd+2unn2H05+sQCkykIMBwPrugAmlUAyrZO9OsO9M2Lu4TVYbhMhtZTqhX7xtCiRsnsR/i1K7MuH2TmcNUvaBvxYu+fqjcm7oBcsBmWlR+bJ4Dned3VQMYQAaCvdqXoNpml0+3WkI8JwD0iyIU9WaWZkrlQj9MMQukAODxLBra/91qcIdrQHkeVpzDuuT2jE1we7EXJU3bFQlLlK9Z5bLzYT/OCM70KoQOSZvvrOKN+M1Hv4swcZJu7j7UBhuM9W7Fmsytd8cPVffObDbUY+ztJhCAlgHLQSN3tFmOA29d5qUPUV9xl9Nr4y9PK17Q5c7x8g3OkWrlfPWbRJNrDA65SqXC7eRtXLMFCiViF4Mm+upqTWuS1km1AfqPJJ4AxXDSo8V8Q8H8RYTIpHb6SfyI/C2BOq7Y4JZbt29iq2RbASLbVpBxQKNyFG5eGfBsSVTwy/OoX/wqeV0ahHQgGtbIc1pkpANCgJLSzDi4/RV2nuzK5FVRQomJZWvNSSULriIF1H5jBHKh5eAEPaWjShKmwmdVLw5sDkxt+zoJhEGna2zNvCK7VGqOqoCIuahJ4bQBCXMy2fT6SgnwB4FT17C/CyjoCVNqrQZ2ur/cwu/LL0kpRGplpnN4DwbsSLBRYE8eE52UyJqj5qI428DKgaixQAeYHHgBSadQql39zVDojHjFpH5K1qvYXz6Z7fR3TAxLnH22yTgw3eiHaIvgZh6+2+lZdRlCi6oThjeVNnnIfQNEtnJqurknU+M9wc6Q4PPBNBx0y31D4rYep5yDG5xaWeH35ust7NstbNy9Jpur3rXrF5SPG8n/RwPno/VPA6sNeDkPrRswBEcP+EMqYezWKGcF5TalzTzMmNuGHxfuKey0Bt9r4UMxkKCP4RGVGaPWWh+ZXiQaOZsPwmK7uqHJ0Ak7Ug0mT4u7AG71ckZ1q3luP96VthZ5dvY6L9NsGITtjmClKQcVtBy0e4feITJAPjlQPK9bOodMemicjiFBgUazu5u6wbf9Zwf5Q4R28g86TOFUkTkxiJZpxoQwmPfNftCPGCwnbT5UV+ZGMAt6ftQXTUFu5rTwUWfG/UxhMBkLDVX4+eAYEc6y4bKeQwj+twMlrr735YmdHqhJyIhGdLwyRP2efA5epiUQUghRwSwRMXSiLsrqzcQY/pE1Q8xv3utTVVbc8vzJzQQZATXALyzJsLqsmzUaL6VVZcmn3WClP607SwkHdzHkBz178FMqgIMi9sWFCfucVIMgLrwPwMOcmBPA10T19RetNjZCnsAGHh5c+YDMVRMMZssaCVpSm4zWUD4+LnKEaSWoljT3vj2F4m6ZyC5Fs6ExYlKjOpvgyX6z+EKb8a/Seg6nB7mvGTy7aoERy790BYJr6LCE2RYOkxli0w0FvQJfWG9hLWNVSvgevLUN5vfL80jJlcc/nHafdeTHQ/nMsBI9JTzJVIlGHdpOEt1YHJBq1kwfMKBJFTDaFaWVGfTFcH0b+47JY5ZN9k3RMlq7hk6o8hyjxURinfPE+V2VyalqTlR52kzsJg1OuU2ncE5lvN57wWEUH3jz4Zbq+BCcWvE9dLyjRnTU04MnLes8jlN/DH7c3ORIicJjGz2j8M57WKEoajW9Pf8zEB4SssnrVyMFZv6eB/2HpizC9X6z7RXIFbnNjXSqutYuS6oPxV7iWOJC6kQ8ogM5YS5LgNCiNbkKOQqQcaqKwYokqTvBYgFv5piGBR0TNgmnpEyo5Z7jFOmd34cXNvCrDhGuTDnJ419NMiJ7y2dkLPfNvXImddeu8LbFPJTFVM+Wpoc3Ey9RLGUYY9oPHXuvf8gdJJPIhyTu7eNr1KjJMjJ6sMT/l9CMMelHYKvdcGmGrzfFuZADozXoMWaZpPIyefCYWKhLS5uWrq48QrSGMfP73F+D4FoaGWIh5b/b3vCpP3nL0veRF4MmWL5qcLBmKv9PjmUs9dndEck4l44Q+SmXLOdSdvAXnOMv1Ep6XMWsX8oy91Yd/SCDkzvvozu6Qw2SxTav+cBiWKRWjF49U+gqSel6tHU97pt+QxsZ+V9/OKkYgHXeWHJgm5DGfMTUph46kxdVy0DGDlh2dq4smoJeACuhDl6W5cjk+oIvN99eolPAU136Oob8psei9jMWmZHI31Kty7P0Pi+lHr6iUwMF1L6kxHKvwBkD4V29Hy7u2PShPaNmGaDq3XZgpKm0qy2yyxcr31+7Cm6PBlvfAG8MxK965LtxzBRW6F6lDOTmrwu5g2enDKkNURF420cqYRsjCk/oJ7R8DArhwNcCHLLlfB+XLdlXaIMxZYonWRmhQxWODKfj61GB4WYXfHORLpuE5lSvGrItKvxrabdzB/zDz2Y8iQdWUae5yO18k4MqJGasXvQdZ+X6t+0l45zZWcW36U5XN66WL0C1YULymYJ43m/NfCUfi37EeX+7Tm8u0SpY87paKUYvnNYP5jvZu0zjvAfUcDbIdJT2Wc8eySH65JxjtOX20iSfGjtBD5nW7vje4NMo0oH/byTGQLKu5rDkkrlCKMpJ1cMzaAj5NuQW9bv66EcULwMyuyiOSkmxukGdETFoUJKKgosncF9UNSN96sKzMzKSdehy8GBP/fZTeN5YkRz922JLKunb6ljeUvezEfg5kXRaNqmSlg1BkHeHSg0eE10/moTxv2T9peDdIEBdtJ+P+JJmqkHy9YsXFDE8o7SJe2J8CGB4Pm/edpNUc9vU2dTtrWaINZMc4sd6TIV9mnXIHBF3lmwM1v1URf9YSyZcJ/GNxEUzOjso+isCunmUIbRNTdQTVVz07p8uZJQ5lQGGAOzQeDkExsPsVpn3utXuvKje4507l59WfK71R3SQQ8RGxKh8+0dE2nqxWVba1tK2GJ6bteO+xeaUhPS4gcZXYcHXiEiS0zm0i4cqshk3dmykmSLGas/AaApL5vM/VnPHsxc0OCRTf3NEeh+XzYwcayNmvPXroU7gxVB0HJ8lnxmE/Nw7LQVq+VBf2WBrOGqmPlyDM9s13Y6GMl1KVqOxIHaOl1nylm2qbr7plylZmDjNTt9ftWzE6R0EeW8BuxYfHHle1Be4hPEY2H6rm4Yu/sG03GUXDbByUOCkgPrbERPU/dPOLnvxyaG9VilJi/yasABgiHTu4JPMPMivlQPl5AChFURrPlfUH+DGBt52sZ49GpZzMjs0qbgSg/Oot3cpZbdhx441AZ7lo2UcaqYq3MIWDkG5mz3n77MeMIUkhqCe/pYUO3Gwc4F+PbGUs/jPV/dLKZjrvEFeVRh4JVLJcyzwCxDLp4G/cE1zsyTGGnmbHn+HEU7yycwjl66E4xWRZ8HDswAYfrtN5qVUjhjwB4MKoHhgCEzzfxjuL2jZ7Dw+SdNgIR1EG+hW22GotuYzluEOhqTwjQ1yuBLCHxuIrWM3F+Nc27g0bgxY3FB1pS0AsT2dHrPD7twi3H8MRoE8pN8VvbDv0p5ZbDi+EHEsukdJwCjHB9/2Loz7WXqLJjxwLc4grxmYfi5++uEIIzOASi+1JpDZlgOlmcYdnOKBebE7LE8AkkEOr1RckqogHmdRyrIu8bfDkyy0jzLKjsdTHx2sktfmf6AakN1zPPioUzkmZIITHhrEdJsclXSCejfJqgL03Q1YOi3YHw9/QvGz90hERKlD0BNNi+GQz20MNb4qLuP91T2f+MnvhMbI9F1T1w4r4JGqq7gsRmTKNaBZnLajoyqwWnztn7+VpdF0+Wj23KTkLfNagCONzuZwH0khWJWTl0nVcm4nzpmjqZB9YJqiCHNDolcD33aQaRItE9jCNfuz/RQXLvnO9j/I0m/fUTiY3oR8fJ6/SVPuTAR1++f12P2SRyiroeyii+VPc2ZYQ3sBGQtZORK44O743HsUL2X3umOgOzEr1Ez/WuSGPcS0ONvJwcuwVwaUrypVYL57TCh90zzH7+dGt9p55GofumGXXzfXS7xjyOKGlalg56MUpvclY4oJW39LssBlgwdRJ2FpeYgQQNPnkEPWk69wYs9b+qQGOap9t0Vr0Jq+KvbZ9vmKaNsMdhJN/zO3CZEb/P0kQ1wjyhhZ/Hpoq0UN5+7yiH5PHqJLtHq3kLvhdbheJcea0QYsAHqN7RPrhJyI5I9VXIOPNT2b49AL2TMzsOvbwMsye0CK0vVKXWhKGlW7vXd/39OEpU7qs23Jc5AEfbsQh1GpSglRSHk9FO0d3rcFwmMTs5q1fFyQI6EqJKRwpgGp2stb7z1zS1bmAkHrYm1w6TU9bxGhbibLFHMgNvQ93vnedZSZx7a2A832nNMy/J0Wg0H8WqWswuXFY9WufupnO9ths+Wv9NTBmj3+EWw/8PMscRCL94MoP3K1//nc7evBkhgZAK18SQHGgtS6qMuqqP33GxN8YN3KeLIH6CaruweE95e8Jak4kbKnTrwpQiYn98gDCy4PHZZ0ihb12oIizIDJGLJ4fZGGmgNyTaQR4sljrwFu0lP575gjoTd5fOFAcYJlvcAW6du2ndvBCHW07ydjPmCIYzAuQETquk3ad8MiyIz/gdV1C5/Oz9rQ8M7Sf9GedeEcObFRMriC3g4oYZpg5k549LdSfBdILj4KFerXfbOt1K7PTmsnT6BaMTUFE5noKKhBPppwDdkPsxPFkAwoFJftegIP4xb+nfLll5d9NjErx6Py6d7IekIQ+pA8howswM0J1x+24HP9c+S0PF3/X7Si77qozexnwXwodPZ0AIVAOhyl2vnvVQ5Cb8qAnhwUAjDRa9PhMz0WrV9CZhBmM1iQlPMmom84cxTxvxmYfKe0y437qqK2/KsxK07ZYctWRutlPJc4dNPyHDsyOpVut3cFPG5hmPYAcXkcsxIIyIhxq4/mk5u5hsVGR9XLah1QIa8tNDaNTM9v3Eu9c5IrTRkF5JBONw85nhGXBfNPwza/bkntZl2XKDaUhI7kznIVuhm7uD6RAYJW4QLbk8cK6EWAFNY+J/AkdvZEqrXrZHNo2ODxA43xG90tHwHfa7nNoR3X0q+qAwEqjwBXvLZuKHecm9Qx82R/oHeBrrnNkFB6OwM/5QHZqSEjFWfwkHFNk03/9jLrqaKrDaxlqURrtelZNJ4UyPUN25Dd4Wujy3W4oFHYmFgPm2TMhNB0J+axueVNtcKByVQDvr7q8puOIWXxN8WzK5mI2iKPcHpApwjRiGDJZPKFDv0PPH53ISUJOICys+3gI3YNBh4g3buDu6YBqjkPi8+zyhMWxjpUBtFV+TpqXqJM5HT9yhKI2aUVVJigENho/eQEIzhxSe9ODCHRUTANJIdU94gHvuByj07+SGLt79FiHFTXo0UgDcKxv/zqH2NAf08Dk4BkyUn4I1Bmppg0O6EcTCykbgfzA0mCoQhWdedrOC+grjWiKuPIeR8PdxYBPD/rqgHth+f0G0mdSE6ozsDg2uscmNdiT8AWP5ryBwVMr/PGDclQH0+3uJAgXKKUBofiDjwaNOP1Lc8G86HUWAB8egWMvzOliEjnjnPaG5awY+yJRi+MzBrenBgRfzNJI9fclb9/Xm7Np4bI89byxFmNZbPF5diWUTCIOuUp+5+yYopeYK+S5mcKFjwy/3QySDcSCDKc/kS/UPbws06FFknaslWVsR7m65Q4Nfgj0jSr3/sVMj2ps/xR9jEtM28oYzmBBSU9Q+7XF1YGIUMuu6epLnf6K5+/Apf0jOF05xGtE2mOWg0p3aq/ZM9FAVZRl961QXfX6Ry56XZxCU/7kzCDVwmBhNrYoPCuM219oi+cq+mpZwFKW3Ba1jZiLBOhv0dGugNwZ1H8/NcvAfiudWb5k/1hdQn38hagx9RgX6lCdR3xpIgF8EdX1Mh90tKFQJJ5i6XjcNcUcy373v+6P0MQvbgcVkX+Hycn9T4eXvP8XhiCHBw0h/uhc+o4Y5A9P4Bgfx5E2mAaTVaZfQEDDHMYW7JmmqflTCrUU4U8ajAqscTTdkhMxkUdG1a1PyD1ITrVFfnM1lbLZa24QLR91amkY/BBgXLYaOOqblvwbm0iSCOWyJUXPz1PV9m+f86Wqnfn3WGJdNA0clTdBA6+OoigPNp0WVHNQ7B+l7UyPEuSekMeU9NdLEbR/2tsBf4y7s2Wnn8Vhxlbk9TgaPit909U1NMjek4lJSjhmhPKw9XnLBWWbC9eKObs1/1jZ8hmh/lFNHZ/obE3EbMjqZ1+qCfaULN9mh6ffjC7gBlydfuzxzGstUi0G6WQrMw05Lmun1wGFYIOhOWZ1yST9rn0ImOkaW1dzE+ahEBp6M623uzU9N4hGYJ2jqSfOtT/QO4IDIw7E3LIgZGvSmypEIqJswqGSFVnGEFb5yR+nUYaKVyBr6+4NkLWhb37lzbuQEQ2OuNvXerhyL+BODe6thNepoBY61JYWaAClwPss8PYtzPX55Ya4gaYsIkpp/FfjO5TvEsVX2OpSoNgOcMlp9EIwoqItJUX6s9FcG3u4SGGX/uL9x482dFrQlkjAxM7A0/IuVq995ATFio/S6E1IsOxKvda5WVVfM932/tcOPlCd1WntQWkd0vQ7uUo6YOeVKFu39y2pJ4ISTE8lHCA5t3ExmDBL/UaelR7KQXxE/OeLjvOaYMPWw/tLpkl1X4CAgIDm+mgAwMa0yHoi6MGeY1Ccki1YK2l6YlVygWJonQIUtU4sN3tZ6N+6dkewj1MOC8ZaNRQXPFzTLVf96UfBMzZtVFWAoFOjqRYNyWRrTGtrpXJ9FrCW9ZdE1ShpQrdjZbyp4SdZj3kRT1Uf0SCKu/wRpVNHGyv5dmPo0gI/smxbL7Aj1OiWIVATwajE+Gb4k4qMExs8cvDm1FueUKwfMuPoZ56vAPljWhdULny5ibW1maCNg0UbyA/Dx5BRzsw0C0Dmt5mdNzvk+rymMLTVdSAdi1NXAZT2W/x5K8qtx6X3ZfzKY4fRWBl31mhuJbR+uzANii5sfl7g8QmrPs2cQ2ZlLVazhsjJW0sIgkgTAdgrgIhNwk8GzddnWOx0FP9adJUYxVqfz5XJ0vEz5/hcE31zVm2VYFSdGay6zyD3bp9xWoadpUBT8uObAL/WB8glgK1Z1RZOPfibPrOIKVBk1QF4HK8n1SpWEc+FfecAlsn+VW+XrQK6tGG+4i7QIEs1XXlBUZNZ0fwtklG6NGovRuPbqlwzLwKBAdwCI6b1Zw7AC9IdoVVsoWxFVwL8VfTxJlzfJG4xZzaN3wsKSi9W+z9BE/NOxPIak0er5x0QrOUBxEnWuas4CeNCVHUfBZcvGEbDsBZjZCRiSEviuk3r39tWt9+2ZBajToB1AOk0Rnrt4glBG1g19HCPhSVHJUxyy8ignPhxW01+ZLqwd0q9/LAvOOhQ4oZb8LzgogVUJH5OFGe5eBkF1+WUudrxcPMLb9n7sj6CxOUvsUsxBdjjyte9bqx3vefqYDcSFYnlRzGHCWB9v5AcVTYYDQGuTR6dVaeJmIV0HBASZi1yU+20uPsRkwNyDOwlS0/5Je1K9YtSute08CQrY3HOSWiedm/udiLJYAPIxdWky9T0ZDhpqyBPTA8xdGngTZ2fZ5VGj25A8syMvG1D53fjpXm7s9Oj1GfF9Bl2tBl1rjEAxX7nKuP4i/1x3dA7vm4oqqtmHp+ZE/DHEqr+R5YR9+7HDKp2QRWx1UvgV1GCr2nzrm0tXvsoSRxU/bTRYJHdj/E78BAJ4ksVxnhamV+xde2B8ECAoT4jkqmQvpmSrZK84CjK2reUp1jkMie8kiEiS1uN072WykPSay7wlyjOBDyUh9UNuN8DUv0DSHjNkFdrQ6dtgRleLW8Qb2AJTeH01n4Gy+/RV7+OfpjpP/COn3DS67WBwH0kFxNf5u58ENg1axxgpRokPOoov42hr5ZWBH+LdTD/G0rlvuF3ahlYXHrMXkDICLicrNljuWbGN/9mmAMYsARokSt/VhSRPW/1D1kieb/4tTJQXlaWTk/I1UUChWYrgtKFdlLfvPCKEVE7/J0jIrhKnt0t/LIHbQm+azOSaFxYIGsyisX4/M5R5VzWxlM/LMxjjRAuB8HkY4G60WGtAM1WzmSDGp2WwxC6kpjat5X4Jv3WEagA+7Asi66TKZCVIBu9FzTNcAGBXAgImeeelxmh30VKjN0V/L2IO+9f8+eGvKFbe4Cdve8u4lLwEWNdoLHcWI/atSV8PhE+1pkVXx55CJop5clqxU8YWuVzmlQN9/WwH0Jy7gVG8TkMMbNBCEQtF1iqbdgviVscj7Oj5RhCin5MvIzA3NkYtEeJTM1CFX9EgpYSLhTnvR3mlOsnCUsaJAo9uQCQk9aewMLl+I9zNVZujChKFURspZFcYKBzhYnqjAQLHLEROrMNoFBZayX9tB0xmSg0wYxmqiLnPxNNAgYZEYZPy8rsfA7YJRGIoMYicyicLlUMwPQ1KzSPHyjbBAhgUkQmHaEC5tNllQQ6VgU24Ik5eprwwzuafU6c95U8FkUUPreUs1GFX25e9jN2IX/7IYIdxiyBuHh1uIDDJAQOlI1e/tTVw+aVe+atzVmPPaoAprD/VR5WjObMMtL2mfPkNGF8xY54qFn+eMZ1nLLSkyJ7YEivwJhVIbTZrg4zjbAYrrT9B4q1ndVnRxrTqzdoYcvYePPuUEt1TXSbPR4SyfEtIxjfckGEG8hUqfsJm9OuUd6VMFVEcbbhNPk3g0A96qRSAC3X1Ppc6Fpjsop1jHZErxZWl3yXIW0lkeMGuvmw+6cpMNR7EIL+7gITzuaBAdRiD/1f9TlFNcwcx4fBNSlbRvg/W+JBSoeH4U8TtAubolQYu4IsvlKVnFHLqr2ubonvMtW9IuBtx8tvknrnrX9hgpbLD5OuCqQIivU/ofVNpXSil21woDGJ0q5v9rdUDLKCVOq4JlPtBXliTG7nMJvIzDSMCP5VLhPyJ77iKm78uHjZ6BcAs4HaNtXsgZ5HR1oK/dpmuRrRN5FK4OfGGfYB8F6MGKYUWIk9xzQDV8h6/Q2Jn4g6vCTbhfeURaqaw0DJOLCrp7eaN8CyBExEANmU0pt10l5et6D9O59ayf7xC6qzGAyWe9vy8RpXC94AZMn0xdf+9ek4wKcwTlRpLx+BW/rjA+uxoU4X+Mz/FFk0evp4N1KgeuWeBI7b2X7+SiiYQdPcoygcZZ2/OwxdkdAZtaE5Q77i6bdX3HVqDGhF0G0Md9jSzvh9X386IFFAwnjsEZbK/jycom8t7HUWH5+nFaoh0ZSPj2t5S0cE4XQRxU4ytKsiemu/b4wQUVfVRMlkazb6kfkP3JT/FRCDhUF+iuCmEraoF+ck1PxtNfoKLINAUlLvN+FLzQKN2Rofkm9gAkdnU6JvahADK/Xm2cSY6S3hE2oRLyPB1bHvGdu9Tgv4e1VPHon6HBM2oDvgwK/Wz57f2V7eSRndWsX2Gmpc5VsfNNnkyWZ5RqO9UncCE+jALEa9hdEBjpD+bfp3R4CrMtE8SgH8i4qZMkpB/zwSM+M/aHK25LSOISGBb+RiN0OaUPI+2qV42IDojCI38S7Z+CbefMC0gPPvk24P+/OXjQ3Z8aonkAV4CsRk/uPM2fygRrsb5CneqF0mwxLEEQAILEK7iucPaOteauxKAsiclsNwZt0lWmynndsiW9nY+g0yTRre9Qv5qmuOpcmzpNUFxFy03tnn4ZpYrjEK1EcQ64MhB+y5d/LMfBBhq6FwqzpMd20UwXa7Lb8dKnvMia2n6vlu/qMlNmb9ZWR9bj9lyz6y/2xib9dH/WZD+o0fba0X20b/B9AF+9vAxZQka/eZkReij7A6lTEnydqfpAuPxzyQ53uQ9oTR19nDIGkau5QHJIhgX6nWHOjkq1YLQ6zf0HdYwImvCPwh2jBZqvIXjtnw3tJTGLqp4XrG9TWvL1qjOzWZYqw4oBQyQWT6pM6W+mbI7NH3KvVDvcBB/k0RiNa9ijCFg3+Nmx8k3zHGwPTbjwPQVovioSrRo40eIUIyX8HqXrX/OK2aBcO7aXkG552ExoaUQ1PcCJ2Srvp7uE/VbKrvvi5sptXLpVWb6FYkIxvM5zLOJuQ6rV5X9GQpWMUd4WZ2TZDticrxx4sU9GcBzxIhbvJsHzYV2lhVSl02Kvxp18FXCzC4xSEzuwb5AsOMza+qRt8vTViSPlKTlP20Rl98PSqcGQd2V6hknCOBjc9zzAjugomtQNHDrWliSswcvaHD6OODA40XGdPS8HtH7IHZIr0JkOADlF1mllL+DwCxxHi03yyGg17qgAgy2AJSRXTp7x2meG3uqgj0C8KByJhOkRhCEhUu91XPgKtTnoQQTVmM5oHk13G4m2IU2tHiw8kqOp4QtHeZQi8H7oKN4OUuRkXNgLN4Slt7uAI3tcCFnxShJJXGkxxNpqBgzxgwtvYdGNCRidkP2zTFnAO1meBkb9SMYoxX638rMIbx/330n0jluusd688LDtvxcMLGPt2dKtjLobY3B6GDETQd2Q0gkQ2gGoKg2rD+wbfLSkcRv+YowS1pkmWdZ/DexdYXgQkYcdntAJ3natIpS99zbidRlmV2/qJzkU/5sAwGWaB0EKnE5NB+oVbnmBmT2hLzA0cz1qSbgYwFE4DdK2G6weiDsUl5ulTiQM5fvdnFeWvG2ffHFb+NEkfqIWO7VYPVBWCrqt1YQcH1FLf4a9EIcRN4oUWvvi4+1bc1TLCEzp5GS4WpRcMgRHxFaSYvYCEuOSlgKWiKDNGwQum3LiB4BJtiS5XpTJZ3rmcbA/PcPdhSqjlIGYdJhbVx2+eSMELjh/aDDN+x4qO2UiW2EYVmZQ9cvo8sLCJPcThljlAYAOOBQC2XSaeCnf9aNg1uH6LVVEIKqHH35YKG869JfwdvJGs+th1I2Od9+Pge9CKYrmzsZrzFK1jaRiF0a+ILVKZATzBh8XDx+knLn4wJocV2OQ4nRgKKjvWC3ZEjY9f9aPK/5zX2/ECCA9joFejjZ9G85mUjrtpFBRzDp5N10VSmlDv+RHWw9dXfwBWIr7M6gluedOOR8eF/tTlKwGnjZNMf4GFcNKBnxAKFSmCovy+PNw9M5Vp6ubT+Y8SNc9dPxIZ14GxN2yqW7mv9HqUptEEehawgXPKMqno7eBn/Y7yDgQafiBJrs0xxU+gNJ/n2ByQocwV1gx4OGcQwtohcqFhEhAzlWamM1Nw+OtaV2PzMOx+NMOYpWjJ4ulFGipVDoIXUX6Lp67R/qUt7Xv5tk8irN2Q1AUWlTEJphN7WNCp+LIcwOrdsNCLloXAf5m6f5+hu5IbpIoVYc9sYnXn+SwiDYbjp7Wfsq2+I1AHg5rpsPQ+Hy/hjvc3Tw+lZyZiSpkL7ZMV+lcxARSpsmtncu/MsVkDrGkhnzLUppjpxDqcemd74fkbhGvtWz9GLyHX6+gCrZgkY9XoIsMsQPEyLTGqepNXsUve51k3KtrMNddt8QO1ZXo/oiolGo8P180r9u0PoOTkyp6AQ8WVOc5hm4ti9k1OYBt3sHyFuQjvmwEwdTmwB3TYBqBIj7fkSReTo1HUb2L4aCkmD1fwG5BjfM4b8uwS5ja8F3Onbve4jLwiFb9cXGWwl12eGh/JNt73x7OxQ2dkH3AuoeT5yQtmpTaghlaYFbSvDRGUwudS8xiYlwUbpJs9yFR1cVdb1yATOR5YN7PGWJL40T+8BLig88GbfSg1SdZuiy/xRovPp7Q5L2vfOMHTs90gmu0ocAmHjzt2K5scrhHbRBEzUV39a1/qOZNr6Xe0WRmSsfR6ptZEtJmnmZEc9avZb7milM1PNfO2+MEBwUmJ7an4gp5Qo1ADip4TeIjDYGxsils1hnh81GzIcXcVZTzOtJv4o84j7vkF8eZdOMiZBlXPCwwqmYGuVsx4I2kvaD21G3Ud8iRZfi4gc4V6CQefdfWuhax7ZsmGz+M1+zhaFwlRz/wPoTYikQswghXGfz6/BW6YfDrZ3fXmQXPkU77spkeS8w9fOUEMgEywsUibApUYBPkQ/9l49/T83m6vduUQy+2a6RnmYlIEIyN2LWFKANFkXQ1DBAah/xEhHzQ4+F++tuE425oDTBitbZIC2ZOmwKdElgqZZkCbYr9WNwXN6ISh5/eau3B+CpBwYJuJKT+M8xFAGPsdwrDgwYUXusW1Wqd/pEbTDyOFbv459f1SjG34gppUA/X8PYm/z5ZoP3xGxaMBg+aoGrSaur0uyx082mb0pXlZgyx/LAxeFqRW+Vivbc6geIpnfn46iIJG7gQzcsIQG452qo1jCVpsbX1iz2Ue51oubUghkiiHQx81mSIGhdSXe7SNEiiAZ2PYJnR+gNfZRZOH7oNkTH6oT9fLDxnKQ0lzf9hvfmCVBiKqrSQlJpk+uCQxR3XtEqJcaiQkKj3GsPrRZqU2wxSJ5DdrqG9nqLvD0oWw0378Gmitz3qHwMAT99vzgIxVUIj//MFCqGJqK0K9M3dbFMAtPec1iPG2qPa/wavkCDTExsThIUjBKrq2p7Y95QQz9/Z3VpodiMqfLOTb+p1cnTd6lWd9OI/6izjxbcTm9qRkccVzvDDVMBO7H65jNyfJ4EJzpt9h9MXKog/wtrgyBFkl8ZPjWjVmytcObgMLWR7+3afLv0631XKTS+PrtIbCtl7DxmY/VI9E7feOcLgJ2ytn7T7Z61PNqRtF/2kGB44xrbT1/QhI31yUCqf7EKdr81h+hL7vkpFdWNgKoD2fXyL8Rv0DuDfoDKdfJdWj2g14En8YEaKIMBWt9XjTFgj/d0CUP1I+ydFY59jG0c1g13zNYgQPYOeuAfOF5dl6eWKNmxj3zQO/ZclTbfChfIGlIXcAn3HxSeaTmeIvpSecggnKKDBm1CNDmFeJyXPNirbq50s9gIyo9UXKm3YUhJCd/6kXc0c2GZ8AqfhY3LeRPeHCqxwSt5apD39MAjnlds8vHoTv35cM8eE9SFnqB8yC7NiIjTVO69JLhAgJhxhrw4q9VH6M3m8skQETIaHirHsBO3qTICdljIHgAaGJqCe/bXiX2EbfmPZE2iNrmOV+2qIlvVLmr4fZKvycVHh8Bp+r2ewFntXzK7e1oSDUz5QdJqBB5BzqfPkPRXCilJgRTVhinf+iJHHVM/a4VdMI1lPPHEbz5Ay9JFY1xXcB4S1hAwgWPhQG5WsGNK4m22jASQ2hQ2tdncoPv+418DcbINZmYvkAGeDoCismu0+l84KLiwshRDv0jaA4xj74HFd/6upOcLJ0JThqQq4AwaF++9mXUrONKqomGAqQOGVb+ALPZ8dwHSl41hLfRPCQCj1RXf9jdaWGHoEc1+fT4nb7z08USggVFCefMRZ7NXthg/Xx4404yDl41lwA8gQvFQ7HY6e02dXOl1TD865Ib7mg6rww8tX8+kvJSax1j13T14B7SZCcTipiw71BtXtN4lxLdAd2BNaZNU9UEX9vL8cgddBRuEnO/F41VGd/0BFDOfKYoHlHgu4rgzQTqsbfrhj8PHJ5lDejnIiJsz03JvxYnwsB98ulkUdIPLhnsR7UEDoCWaWt7B05I7qOmguNJYikKHHp6veLqX35tyo8BzaWVOaMgRpMBHQdSpFsJ0YU9qIM+qdv5WXD0VL41nuaDm5tgQ+HYaNRepLyUufS4fH0iut+xfF+p6hfhwy7FgpWJFj8+Jzfz75AoCbl4nRfxOV2lCfD08UuCDFhHzINU4UveHdj5dMNCgzQpFjmT4Z66R1IFZMThHa35uua/rUBPotRk4TnQHknUTUO2uSprHFQtFG/n3TutxPXx80f8nrk3HMoShVX76wd00G6BZ5STkBF1Mbqth25CojJrh07fJ44OI6UrOOvtfZTQXaYL6b7+XUNcZXdcKF2wCI9tnB2wY+P94n9YLukHUFMdEgnlyABuAiJpca710GDgPSuGIivKTXXHNMHCI3Pc9e/mdcZHfwHrzpFTzNEXPz4ur2gb7KUCCzmmAFzSJ7lJnqrxIdp3Ix4N37BV+eVQnphOivx3FH9/y9C4xmNadb0f+fxF9npX47GMESRrMUwsd3jKoLCdL9LICIJIyAh+mmSz6WrRbnfZDgjzJ2NxlCGsmhGHMRBMVI6ATDyvrs/wC0mdZ0eZXHK4mlmYS+dtW9krkzutHSe8+6UtDJXq/3VLrveC4lJXmSm5FsRf+nCoFC5gmsbU063qSDRKrcLZV1C82b3ltLG2PNhIRurqHS7YBH14d0irHtSUyIwGcfPB/1WYfJXoqGjnd1mmerF8ctef24toE7iFiyFTnMQrfhN4YSpzdCuAdFbrzbYK4SMC5sf0iwO1lKSr+QaeQgxAPKG3iEgrMFy6HBTP/2QmEJo1ra79qj1Ns3xaZMJxFV/yOi8Sp4YJYDI8uFYd+0Qj6qvb4qHuRg+G2yMPjgdbpuWTBh64ESbZi0E/fCZ049+lH4BNjYfsMxeeQRVnqxjcq/nlqPvce2t2UColpR1Z8TivNyJczZAyf5UR4eRI37IlWlsqkWuoGeQVzHsfSJAMzMeE9QLOicEZkyevDxC3SDsreglEGNY0hOp+9Um2B9VAUXEkuRJCJwnGb56OJIf+CNddzfHXkejmO/RmXqIskVNaVP85jUkCO8quJnBsrQHTfM3ssXORa+bqc+HbbtY2xeI4ibmIAWtA0E4FBBmRl3o9zuzFjOW9VaUxMfOETZvvInr3gTJpO4xR50gMgMRf8vkYLzoim70tTfqphRaWfxn8MqSFCW3pdlqMlKAKwwQOcX9Xs5wOI9oMkIRQDzScwZAMGtM82w+SL1zZFJQi1PswsFVW5om5YcWq713Pb2GDYww1OaF5NBJl0wrDJzz8ZzSUHV8sDN9+K9cqYzuXHjc4s7buzRSNZXTesZ/e42WK7+/OUTo/mic/sbjt9AO3X6hkXu19qXdRG5QcCiGhm4vkW0Sx0hHZ2UlNcxKkfgEqNCB+hiokURpnp9St75kfnv8EY259RUL7Rsj0bS2Ct1QjTTEXtZpxd7bFULlEtVyMG0lhGxi3xrUsEQXUCo7x2+GzrVkEI/r4m2DIDqUgQ4zulcCPev73sEO9UvPhOMNp7afC9d7nesJ9EPXzjOXYlXz5Msn2hFfzvKCKABRsO9X5/ORNJOD3M03vz6LqnDJ0+bUs2T0rrIG8qDx+3vTwoDwA8AYmC2UsuKkPeaKHjIR+8Xk0q7qsQ5vdzGD7H6SrT1H5ty3/EOAYvq2U2yambtGLBvmNiSDDo/RWpm/8PYRlBa57p8pmj7TWfc2MGtOzhkkdy8NOOzhQ8UA7djBhwMBLkb5ONAy0YXgzvj0XIj/1irdtJHQsoG4yhi+wpBkQiDvGfdBlcQeu0hG5CqAUvkMI9lbnlVKXMrySSSPslwlg++2JisfsnWzksXol5C+6SPvQUwkN4jM5t5VpOqLkUK4VT9IzWlydpL9JA5D+E24p/IBIliq/WfMGknS0Y3Ua0P2e/ZSepT2z/1XBYffN+QF4C6BE3ndYgTdLYMbl0UninJivFH1fjWHXPvN87UfWxc9POq+2u45Pv1KcLyZwhgwwbbbYLGTQlNV5WEzbmXb6myWwZYFI5XLYLA0I7rDWKmP/d2M4RsroibAjBfxdup0gTKJcMa/0V61B2/8rrAByedoJbdUOu6TOE+ZIckJsSl5RBzGVqkqCSnEsBbljRfICoFmhap1j7uFObLWvLVBlY+GXulc5L7LdoPTH1ThxVuA4UoMAhy3mlhvirG7wdhlVEFbtI+wipSMuHrLXtFAqu+2V7TTWyEwmiCIG9akQ1o2zBk2Wdx3+UriW3Z9Q5Qh2IR7vqa2IL6MEimpkanWaZVdsZudYMrQHdbzUcEOBD1CE0X7AgUdXrA0k5PxgnJ1DKHt10qTfRyWp60LHbfgOHYLxdi/0X2HnPnGglFhxSEgPFFDorCkM7RHZHIGV6rI0SVSyY7kyX6MscZsK9z/MWoAGyd1M0bwy0NFBEywpuinLv1AgHc+l/biyU5zbEv1XyW/eDIhNfEoVzauoR08Mr52vvW7sxht2YTFM7EFIK6M88ZxG8QN4tEHVbNCWEWVJaqVy1wRfaBcMEmo4ahCp4up4nxNvwWlIP9fgyo5X3IY8PLIsqR0WXns+hlXOVcPITR7IAqFuvkasxPETOGmdtzBgE5ugRY5cvl3MJMzYw2qhaSyy7ebcIU3fn01FfRHlt4kZwGvcakBbYBl7XRjDfIJ3hv4W2i3M2Ml7xT8TAzNDbwJwwuC7lDErmMXqyVidD/zH5eZGpCEiZmwJcq4/qcGF0x5qLPUOMNJ9uIIRk5xQUSdQiWE5x0tVQkn0xL7iZuXxOSmH6Gsh5ViBTpn6Z8hAJdfP6p/ubHSHhj8sg80TMqR8byoMWqbOrTwAyGNHcWgSRpoJXBRtkC5skpZz1CxxTrCTjTlaKEhH+sc9e7TgS9H1DctB0bCNeTUJX1Sxle4lg+6lHU2QAiJu5BwlSdSBOBWkb2/JsedqRsWc7P8oXei+f86xuGpWxiEBzuvhjt2U+zNENdxYnXJpyu/ANSv022voDvBuWD16FwlhYqj1xqq4St6SNAlWUf9syAjgUp3mkBxFYOgsowwn92Rth3yFdeR0GSJTwtBWF2Im5vkIl6V6kMX3wxAgYLyVt3d+aoGjXawRB4T0l3OpP290ZImPlEEkothjgNuEHT/gpej4zR/a88Kz/pRqnfzlo9+XOwNs+lNiVobzO52Gvx2wADIBNJsw2oY+UutJ3fdVg0Elvq9n+ccPvLCf/3ItKEwTe0XhYtrHSDV4gjWnV52hebRqt/9qrD6Mx0dnwlgjaFoqYXrsL6wwGDS93i0Bw3ra+rIaJSHn4P5X1J8BsmaLBGe44rxPpX3mPfHfjAMEU/YmD9fqSaVXBWhSNNDr2y8PsNQtJhYsOv5eaPrU9UcoS8I/jGp7atAqxlmURP6dX6THIPCmRjIgT8bEziZcYd7/W/IJ66MzrgWdErV1kRENoZo01AHymEtHZbk/56kKgeyq6ZT5UAYOiAjZHntGahTy9r9ocofsZvE1446YaQ0NhxWP4R13TG3BHO8IicCoykpMg4q2GPfIW7+QtaHLa3eXlhXLyRMMaWzhnV9UwuNnRFoWvP4F2g/OCTCcM7YKi0vhhXUlGsQkSK/ri4r4l6RlFgmlE7dsjgoaxAUAT/W9cGNBh3Pp6DfPMVKlqAsACi5t1R0luoJnhQn3iuzuoO+GZHQl5pLZG11ezytWCYWzXIRUoFqi8YVaKkN5e4nW4v3EJnrDqTBbJX2/t1MZ8IizUdSLJF+eQGINTIvLqEwo3ZLLIuqjxyeuoHODL5xeYLZ2ekFjoCRLjEsCo4zlYycq00/VEnWDQ917d8WEnFNOVVQk9fVRQ4/yXfxF16GmPxjbmceXteNhXOdVS3twoHDAUbuH35/WDcpUt2lG+jKnC1WNCmnsIsGfYg2nlCwGBFsmx13vn3wNurp3FGh9OXVc5GHbYrWWdnMzoqIlCcjRa0DFajagym4Sfow4ZcsL/xhLM9FnBf2V3Ylk99hwYQw8SutHgIK8aPR/YeOhDDB2uCR92ZF4flK5rgb8Sm/vHeKdhdOYNaPvI0FBwcbvownTJojscTyWA/knkhlw/PuK+EwCUlVWQJQoVzokcG7OTcRMaKZdbms2cfbykMzmG25o16r5J6jPvPbZ6aPw52az9AfkpFPlXAHIkpM7qkkPb0dVLGqIVL4w2vno96UIFcXAMvHnQpdR0zckU4Hhb/dV10PFj512Ch6AQ2fW9vDd+k2cRWiuHhjoasKvdJtHh0B5WERa1ZoAfv6B3D4HeCBKNrt+fpb76D01j1C41tsD1eYYOpypRW9ixmzrYupErxkUJSLATNsyUpUWMOjNof0Csz830xnKrRU22DW4YW+kFs+wYO1u0pJjVl4uwx1IKXZH1bkdr6sghYzUz3cEyuWq5wlyDOvRnhw1s0gr8ezhM74yZJq8O+VDLMTkyhmnTpD7E6LX/z1d8L94sh4AYrWW+hnOLofxIyW3lrq3+ReRtFyqKGvrknOt/wdIZBaXeh2+gf5vIiD3LRX2sdntYglE7JQ09D+dUI66L8BjJsTc3n8PohoowK1GKU8CuJQBhHZxAI0B9nm52/rmO0OCA2mzr6dAOmErrDUkd/xZbiD0WO5iwtJtbvr5Oyf8fkiCyrnRqBMgmR6sZ+PHbn3S4G29/KlbYtzl/w5eP7E5z3aQstbGGlRKAzUEKgY+uOf6FZb/FTDHjJgyxPKfsvWo5LMsnccAiM0+4GBzxq/1ZTm0Q/3XzzK1+C4jOdV5YzyK/gNfZ5f+fAHIc9+0qH4R1CJdHaUkegk+y9IwOSQSjk1l48B/ZShBe/iIA8hl2ZmTesCXcCVaiZu+w28CtuAWo+5fGOvtUiMRL0xRAos9EI/g9IDCqrwk2iBjbsnqV6DJYVBioEKAt+SsWThkijW+r1KFCml7qsNFqJV5WC83/EWrN5fk1dvB+joJl37YRfjcLdlJXkTkAc4eT0TslyXG5aQjhdXp/vOrz6rS7G9TooSXCxIyl+9/NNlgISMHLDOZwTSGBy8c298wfVsnYnXV0rAstlloj0NA8XqqFazouKgHItx+MAXvfk3DWG6aWBuiGQpKN/5j6HuaSVKI1wAuixkQHRCit6o6mlNgjrbYorH3yD/CJJWdYGwdnSaTMQVcciT3qgaWx/Ti55SR725tDZWroz5VZDu/gHweFJoFOcAs01BrSbL3hty0L45+6Nib86bA/FUQFYBPeaPKMDS1bBw4q99e2ywQBdsgU+38nsFt68iUduhzpF0SGMIW/PcdP92d/d75lIx5jdxClXPEpvL6vVTbzPh5exjRpcHxvw07EjaPjtHA+xeX6FeionHS3RQcx5gwHg/UanR4lNrx3iaxSDF/HI6sCXnu+eJnhsyY+mBfhiKlohmySoO8n4QU6TTRMqqqnfraCulj9h3z40jIQOiG6oMoiG7vxPx4FZinDqXzVmili769cZmUylvW10zBnaHZNbGcAnqVY3+L29dEraU9M2VaNP2lPbBRt6ScK4xKvfYNeNC6VcWeHtir8rB/EK+YWIoybYT6Y13JflJa2BqF78lhF3hQlehXcIzoVCbyvKHY2QZZQl2v+SLwhghI58m/gP4XW5HNk/94eOgmgpKrBoln1eEh6bmtGAhNArkOZLWDYvhLWSZ0+f7lOyefnF2m5uYPhHmNDV0PJgpE8TGLpw/AkRfnIxcwuyZCzdHlyf6hDZAeQjVJIGFMjWzpJ3V4GGjAfvsus/1hhOA8NUFDtXXc923fXbccZdsLocxD5tanCjiwr9jDJHbefdKIQJesbFfLY4bIby4CGuIewiVP77mZChCvL3/KEMKmG/MpvbNhUdnFgIVFU2dlJdSuVp1/uW8gLRvibvlkYLp/BkKJ1Px5i5Twr01x753sLu0uslyvvyxBgyPhrgu7sDEonLyYV2mZMvMQaCH27npbj5eOcMmVVj4OjgJcEgrJ1Sv5DPcHk87MeaRFSPd7Az44H/3e/POOPn95mOTVvFwOdwcNe+VR6yrfKFG2ga1WuSIv1q6muk7h+EojuvN5UXsdD37q8QsqLmkCHT6WniBMyG/3o2NfPVI0NhveY7pZJNr+Vu7Hko4qJkeDnhUL3aNsSQ0iEP13Q8PyTBvwTrdl4/I5XIF5qnjFuSxpZ6FEsPh0Ry4RE1RqlNF1/HU41mbdSP3Vzr+3a386raNS83PZF7xNlgY30X59pgRUEUapEXvZZbFj/Z+aw/Bbe6ojh+I5hYSEpBuF3pQrPxAq+iAlBWDBmfULz0mUOKR4zOFmP+pJ71br0xjqr/HJrEl5a4gaJPNLAUtKIhSOknOFOe83HG8NhNl9qzaW6PJufc70jyWGnEJtPyPekz6DnsLtmryuNme+mhrNVghAkKo+VlxqCqISJuAt5kDlfeD0He29YH/TbPg//hMjuS89MWMHTqXd/hfMTnJyeHpqhyNe4W0TAn7N8TAWuRzVuCshcc2ZYaqY1x1vAGsPGd7X7ttKu7ZjKNt5kNuawlOI3VqI7UdNHgs6jW9ugU9V8X7gKbpS7coMc0hfgyxFPviOARmRk30kUABrVt1gamvVPRsEFTYdAhd/kGgAiwFwsr2fkHY6U3E89h7mOS4sw5yTSJavydfCJgLbcvX5t24xGtGas6sKfAZ28ieE1OnYMzw9NBiVNf1vhfxoCcX4g8h2NDX1hjDLxZsQ+opk7vse6eSOl8KjS5W/Fo0m6/N2G/dpaAtiQPGLaMpiXdUhdCPJlWDI7hZm3bXQo3zMnvwtv9F6EbU0oiwnuT50QwhPyUjF9qgS0TIOa/jQacYHSsuiDN+/HWWFaZPeGQ2oGaihvRFpNYNVuNt9LXyhNY0f0QphLWx6WK6VEHvs+LFDHbI9rOUApc3FDSzkJeOTH+fP5liN3Osq35qN/cIt5RzQ2hU3Z7/htzzChO3dnqMp9VCDl8rcz91amzIeZdGpCuLJgE/UfjMZx6pqJ/a/Wd3PLFJpwtTQanWehRRQPZ2g8o5eI7U4UQPxaJcVNksoH9G/Oapdq9l/LslB2jCLV856nZ1mYMGlAJkU+gZsdqYMKn4itpHYiUonIuEHudQb+UclHL83Iy4ww+yQRk1bsK3HUe+Ht6bN9vmBhkYtgNeTbRhlOdDtMbd9n+hw1hUwg4QKnWcYqfmhBxjtbqRFeoABLVzpWa4vDswzD+Y+1umAUJ7oogUoSLzZP1uhFa8gVDNQrVaVxhs7M534jsGedhHd+x0w3jczhY7z5UoF6ATh1f9z6lbIgusuUX+uezy2Xz7EGGKX3k3G66Kv80Bx/G6mBqer9APclY4iMbxUIQQcIvk/JesYblRe1aJLhTe1y8fyAvACeoaz0vY5b7PhAngFFHqQCqx1cilrQ3AVL02uAtTm6Awfe9wRS6UusMZrr1ASCnv0X1G5opyZF+UjKMujqcRfJmhQioEUO7Yk/nVQp6Gre7nX8NOKSVSIxO2vaIpu7qqG6RwL2rquqjU4s2TLe5g0r92HdCrh9DxnlRCovbPsil8TC7lJBJAq8X/0KVBErNBHUM06lDQZirxzuOoHV05H43/jCNGYVwk+4b916jxS6fOizcF3SXwTkuL3B+1Ia4ka13SDBW+jpFx9xRQobkx6s5hhpJnSgiOVxJHBm4xSoc2V3mPzH/S4KxTw7qTCDHO3voB8po9aWIJzV49KJ5VUphol/2L4EYvSq9MDs9geeOCeAe8alrVm+/9ASOFN0PpFbAFAZcvT9IyxdTItO33d0N25RxTrtuiyoRc5hxvuGmxAD+PhMlUtA9ztWRCk5FL+9gSPS/L9i0PtGmLB9pZLH5LkVOu0pZNlKXg8F4pxvNpSYDAC06YAwXoP33CX5inZl/hEiDuYwWt6FND7l2+H6IFfHrmkufe4OufgdR7kinwPtb9rwcLDKza0L7kClXy+Is+JA+oh4D6OigGa8ydq+/v1fCohNS/uI1G0HJ7EvhWaTl9cl3cxpKSKQ/MQbzqbT7mRZhifUaSFaOPa8AKhMqRQU0x3LffW/DWHEQBaxCdWtFI3jbPqEKgq1ldan3EJuAS+jLQiUGjiu9WLIo1Z4fV3LwwO7c2ZgEoXzyWqSId28eylWQKXmi7RtKQsHK3lXj8jigMyTA18UohmZ1+swt4aMnE/4KBrjnGI6SvAhLL4XacOw/qPkJaWKlWeWlDK3EYLKFZ1Sy6B7s5pqbn6ZV+xxeO8VX+WU2n2NBWLx84GQXMEFnrk99VDNloJZdXKD/tVo7fJ6IMuHLq4h+iUSoOksfn23YJFrmfSlSYnqNhb92crang0v87jvGvVOiuQcwZT7MpmScwL7gT4pv6Q/2f1qp0dZK1I4Sk4Uo3UiV8yGuHgVEKRBDVvWsPmSTZqQDQBz61iYFSNSGAobu7S+7IeIqcZMhLVH8zWG/nK/qCTSeEN2uM7aEslJnQ431bOT4Ftg6eqTXLQJsn2baqp3bW8HYR38GTbbuobkCPqAVYNNgtzbi5t6K/yZ3GWpwuqjqLcmma653AmbD2S5vhSIVuNR64VsIqkXB6krfqWQaoFxUHvBsw+YP2fodMeYzfg4HKN1SZLPLxEuUfMWb8JejqrqZ3HVH3eQKPQZa16It4WxGU3aI74T1+BeSBZvLT1wkC7fyx+8DUQUp+4PDhGcaMeTLG1calbwos1wbrneRQHt0IcsPQ/KY/r0FBBbpGmOJhS6peVLn8nfC412sGxE1m9QGNkzL7QjfJnG443rdoEborG6Z6g9w5h54AUHRzbF6eKIlobaCK8NDRJ0VqmuQsB4xOf3jGiKkgL4aLMxMe3GgGYPB/0T6VBknRSCQ8AhCsRQAloOGnL6tr8TzPEpzfagoxiF1dPy4jTTLiyOVgcWPsS5b/+Fxd/kUY1ZLoxl38DhuBrjxFEPXfqWRNWCUo2ndZPQjPQbdZ0vUgR3lPEibDDwsocVie7kYJquVmixS46S8GHX/ZB4miXdc8LdNtYbcpCZmffGm8FcOaax7vEv4q/8pJHrSWUh++SGWxA1awMXHbCU/wrcZvJYxwT0ep01rYGnzGNbOtGb4a22X0jfVMcnc4Le59zD5ahYuotdTZNLA1d2OrDZQS/iXJlcrzq4EOALq/rCa4wBG/fm+Qs0lrVp/lETXEVzrcfl1QE0ag1eQPcnfaGxsjgohRPIjH1+sG9sV/A907KC0l84X6loI61uY3OzBq04pobzduuMkpQ9CVq3oRxhwPGXvQH3WKDSCh5Vij4kE9iXYey4dK9Je5LLLZUAkaCD8DpZBbXO/chifC++RRglOCSa0b1RrJ73so+6P9LBlfw3gimiR+j4xYh/PyFK4/uw54Rwp1P2hzJ20w09p4eDWL/WG9PCXlxzb3V4a+PMudeT510DdrIf4VgWlisA5eH0ark0mjWZfiSYz5ZFVso4AQQq/y3fXX8R11BxJro++QcJBnCNfifREo1ydeoMlvr4IRyV6HSN9Kp1k2djip/XuAMsBBMMxzmi1HqkpbXuMS7k00ZL5gLoiczhYsTcD+NfaEM1dkqK4pCkymFWB4BD7iUyrQYDMjof/l/pUadmEYWJKQLhmifQ7Fp/BAeK2mAbUDpXC1LYAHoMzElBzqXf4ys5gkd/BskhtR7rROQCCu3XSWiMjDc4meYTczsL9PI9ZZKGwUY4UU4zsa8iSkX1Gut0IVo8TFSpYKhZNSgA5fOs1cesWOT66QG2Vlka9v7GGwOhJiidrgWds6kSLdzpJylxT/VELU6QQHUxIu+Me7DAVuSCv0xXJWvGyCBzB6zKsTrXWLpUi/G2cddCAJ+h/FoO/fV1Oq+br8fxTLHkPpOqW8SpsNjyxJ931MWuibGaJhIYZ+Z72CUfwItj2JvlfX2LOKCGZDav4ouSCWtUivTMYxTvefacCu76+r7OVgHv/9axzyIVDSpJzbV9rJF3FhTQNzkyNAjsjbR0gWCzR6CM7W3yJVPzb/38JbPpH7zUC1oh5bcEm3uJm2KuwnuVb7xixGVjymRcGkCxmZNKLIIi33d9HG9ed20lR1XpvdGvqcyFDp0NuM0htoo0zeFLtftdwIi/2fKy5JypmmEWW5EB5JX5+yNAtLHwdMhNCACIIE4j1IIQDbZ1zzT7T6u2qbNCMRjTnrviiif7KB02nHUKuBEqclXyHqxj46XnHHCxXi4GXCZxD711n3bFiBr2mnAurTz/tPlILomZSaazlFSndk9buhTA9Tgg4yNqtaZpuUUZpSWObDMGz6CF3jcwPvF4LE/7b71zVSnylIKQZdArDsvczp1HVkImH0i6i7IFNOtCLLNeMgknqLN+IGhfBzsFlDTycLNSHo74B4bQpMsTjlUEB9QnVFrWbBXc3geoA8dk+dQj1HH4khS6so+wqnJE1OB5ZhiXj2FJaerScpf4nhXDHqo3H5sVD4dzv8W0Wm7M4Fx3JisPSMTDk7xmb29aAPiuOfslGQ0Ow9Ie9JLW2Y4vrXhKrncRAjFQ5xcwjbow0xjIUrXVAHEqROYDTfFzFc/MCNKV+xbvzPSGmbgPtGRVgmiZcvSbeuQQGnZEyDimefKEeb28YdnM2WJIPFG+IAjdbbrv37IGO27x9Go0RUVT2e8tIzRGT1z0oviKZra4xZD4IH0+QjW1Pdl+kfJTaUaiH1Jkg0YPEZlcEu9+q9lvGhd+eL+LQjmQETxOKitgx3evYem0e6nNxfD+3uoLGQKXDobB1K+2ZF89n1X7IhcRBlmtBD4NlANdUC9UG6C4IVVkginel332bqPJUxr2bF9c51tka6KgBEZO5i1JBtggSs4igRI8M5Zzcmdpmkzfsx7E9QiVFznwQvKS5S37Ajs+QNsHhiX3tmcuxVbwDHOJD7hOSFu09BNG1AShHk+lZrhjEbaKRP5Fb9nVfA8R1Xn2wK4ZIKyPdZFtonlqU7wvUHqkecfM+MSbZaFuNOAVG2J+lNjvnhaKPmcty73OrXaqLTuYs4kuGxrHy0nx1mUXDzcRwCvOrc/9Tt2p8ihc95Q1rC1f8N8qcAVj7DeRjo1Qq3hrxRY6DSWZoYa6x9k2i52iM01QYpXSuIXHKXakNGqaVAXRjo65nD/Cmk2hLaPvJHW9uvF3TQnov39hbR3muIW1tmW1ShdKytnT3KBZ3zrI2iZ6p5IEo8Ay+i4XPb20XOGuMP2pJmianUh/3/HahBmHvfbW9Toxvr8J6UBQXCeJ1iuKUZiz6ho3fT2zTnr6a7KpG6ampbeBREK0I+9t8tuJl3WUWZBXmgasU7jNrKfnMw++PDrlCmqFae4FmEKVmT+6N5LALtFMs0b1YQJ0c0yB4P8HBBK6PF4TS/VkJ80eaz78+h0z4VPxvF2K1xGMp4wYtTt670kUtULr33joKjpxWUwq3z+FcOvVYSStM5ED/orna0R07I/mTnWlh6P0ttFCvsaV20JUeMD33xytct+tbVijSYfyMAASoYO63M3YcSODx12kq9kiV67kNwgYvuoFg82uAtmCMTXB421p9Nh6Fb4/GIniXtGHKsfrFQCj9ivJoxFDFGOz0Q6Maf8A54jVZp0MsJKM3IxULBTrHpgmObKZw5Gt6SV42R9EGSdS+O4ea698RE0ZiaswGRAWR4wR/zWXsw7Q1WPX/Fh60EDDqmbT8VeVBHEAGs76RRT24N6oOQpm3hLdsob5N1M0IkIXD6FlhaDA9iC+7WNDOIBpk/KRDpJx4tN78UQkMoesZ0s0ni7JGR8yj3cjhX6kyie0CxUkKIA9SaKww1YEz83oPmsFNdkoCBTd+EDsNczm6Rb9n/EEqu10XXf7gSR76ZzeDRSVXwsPDf9Kox6UV8EXJLsyYE7BIl4GzYri3VsxrU8PDvSu2XuVTeT1sBHsiJbsN6pHB23Ho4TKJrN2LQWmg0aKx7Yw74V6htuDm2yXrCZYT/n3rdXSlPjRkun6ohX3IwcsHDzHi+PtwJivZo9zGCZRKCdWb0tmikvX6fdXK00zXyTk4UhdeFBuaLdSzpo5+0czXFkV6mWyyQhW9gLm5cQk5F7sfWGIW77qoguk31Tgz6soIl+BJ5D2xf6l+bkHXDT/yK8fObhLOWOHzrLq6uyBMpr0flanlFLnE6yGyrPdyQVKr7QrbYDN6Q/X0XY0X3PFPxvkXtqJqHKNKOMgz6QyCh0yCvOMtyiT4WeHaHn/hz362k3R7tYHhVZy9iMZ215Z9woN415v28BpV6NERmxJQW+0baQeuWnernnpnBDOrDMJLaUKcwEo+O4TtrB42bqzSGucZBu69XdkRODQYVt+8DV42i1P9Z6i1TxGnqqafFQsihJxsQ7Akwwut90DKgx8+P3hWF86V3bw1DYZJM43lq6FHlNeucBnAaGncluwJg4QSibgMxTeLixHIl5/UhAWw6tLFOIjJf53I4kuyx6k++jyl7fstSZmLelrIRHgn7FkiF6wb7DFpMAPe7iqO4sr+7zTloTtK64+Lj7mc0zlf9QdbSgC4WQ6h8mVsfUz2op3viPbjagJRmRC4+zPdYxHpIIhXgmvzSGtTSBWlFqufnq5WnIHuZWMF6h9HZ6Umtf2xGOLbT+J8PVIxSlsCVoIUHggQ/8LlvH1cGxJFGsQfiuuV+xW34SlQpYhYwfrHVugj0wmB1gJUOVgOoQX4D16PQZZKsMBzChGbXXYCMoFySHSYhG06S2ZiNHq0RTYA7VRSE7ikrb40uAe64M6il/f4igWAughuzhlncbOlso+oDGUnoyR8+e4KOdYjcW4VEvUttKHvL8mZgsY1jdgi66grasja5hNuLJCofRpyWP0yq5vzyNcYUMcByo99W6iiGks1uBVMde+CGUUZmCOVn1w8a2pQrpcZBV5134UaT8rk54+N43jPxE4nZNOwpFW75VdQvBrqEeGwjc157l6kWBCPY0u/s8sZCebIOE39D3zaPRUyJQpyrM0cYqC5l/DAgPWtbbj/lIqARh1xbevVZXcgbS4k+VMkQ2P7MQYEizOWNaCajAjpz3VFPBSRYAW75QTe8N/G4wbjpB9mpnGfjbNSFtlomLfAjxG48KR3vUi9S/mwbGwrGW1TO36BGFNk1nClxLNNxoEwm0gGkMygfyi+SxBWSEfEcovJrnribzwt0r3blDTYuEuOqhNrffBtxr1XLIEqqmBh5HO/V2TVbYcQE4MZB6DOPYbnnbmiyxGLpUwLdXDNI4uTaZnnYT5txTsCsQ2UZ4rV34F8DOTROZEQLxs40yF1w3IK26ZhOoI4kgUBRszVCg656QMvtOIUw+1yMpac4VjBLPqoAgAsb9GkGZ2D6aEI1EdAgMtMM9vECyuzDrgNSEyGAq/plFWXR1lgFVGEpfQfE9YcH+JVE1pFscTSAHMK/FNH1GfxOnBCgmL4NSHDZkrEmg4xn51pwO6VJE3ZCBoow1rAdyb7Fcu/Cwu5vAzJpDepVqIZpyhN9tyrwpss/NTb8Z6JvWCI6d5Rvn2PIWWN2AfopVMrCydFn6TPwZgfVS+PC3QcgXI5VyIQPJDhNPAXlYdyc1Hco/MMkODye5ZqGenYwsOuD6h1Qu5ko9OKSTJ+qN8H/hNzKCBUG7DQp1WBZx5nJiNe8mgJd3bnXXjNjp1/zpJ56UlYoEwRO7D655Ko79wCbUGZPZqgYqO1+idHCweX+65mVF+4NnG7465HAw0qacf54uBGkkYpJGE27XxLTO/ppMTU4fqoQGTMVKpY1lknrhfDASuLMKjiN05E14mXo8+edpUx9OQHy6/rqLf+F9XiQXAG22vrpl3I4oS4Rd0rGvXlnZbS89mzYLyKHMvpxdi0QiRnZhxNWIOmLCVOlmNclf7xHgngyqUzyr4t+zrbDCcfKt9mf9UWU8NiTsx11mlnNKFlqiHkpHdBgGpSCDldWGTsnO0oYSogSmy2/9ssVZ+GITl1uhtw0aoWTG0z8JERgbQDu4ZsV6DCMpIoY5arOPC/vTkV9CQLAPHeUcoaGMpquvu96DTgfebab7tMlSuZ1nqwBG/1pjx6KaJuVP0/mElFkzx7qCyShJFEVG1FoZogwA8rh/3XdwL5UzeKujbdf42x0R6o4R9IYSzgR8unOqYhb+U3+c2PnqPo+IPU43pzVM8H38vTilCUZrqKAgsU14vzJveiJjPVDB50qnofgV5B5KnAuy24aUmTWLjiYblUhlwoODoGSS9IcNW2bz5wmpAAu+vVkCR0U1hxnb5QDsRe39qZZeZtV6QtA45UTNMgdNarDPj9Kb3dtGxRmdsUsfW8dRpvDewXgFFgSNvmD4FE8KIi1QgvxRaBL5YQpsmIxS5sZtOuTN2bLlufx81jCD4JXc4jITJ3h6XhInvxPS/vnC44ikv5LW5J+7wOyyluBdl1CMw7UU0olYxgmI3TJpYJbuP8vlVvKfKgYhkHEUqh18fZu7KaDqqY0n/2By2cQ0mCG0WpJiQpbj3VCGNXYuJ4APLluIaqfm2K8h7bCCXMEjhVWnrBcZYqUEKXQpXbilwBY+MGkQgAT2y2VR3mIUmOihULprF4Oj44R1PHKzLSpgj/L6hUxmmdbRz3yr464ivaF4A92Js6DXHBfOFGROo6OpylV/6j7yUTfUiAn0BuxGm4vnt2p/sbNbN0YAyyb31O1HHW29a35hUUjBY+4lJpZr0VNOWJKbLvBs2K2bIVJTS2/rJvO7jHBlD4LSfIj9GnrhlEmDjpTFOfow96Yewh60saf8wiy0ocHLc/vAcRS38ubj+O27Om75A2dQ+/niOINHcBhZPmYIp1vM+AluSTUstEYCWptHegiNMeCGIGXDFgeeUb1z/paGaO3ZGs2ys/tB/qO6lM3nszsC8acG0v7cKm+Fd3bbCaQPxyW1dRDdsJcE1JWfnC99LZECFbxUm89fbZ0+/SONmxcItmki2/EI27ueu9KiwpNdGzPf6bsjsjOEsacxOAUFBv7yds27RUbbixgdAb8/aPeXr+YJZQ2hSCRM2Ti3rl6keQV1mRS9ZXrjEiLpxig6l7o7HeNU6pECSAJt729XzflxfPAgdeoChK7ommyyGMQ4jeUYFwsbg/BHZcaKPFFWoCfJzy4UeuzL+3oiIqEWhUdgtF3RSKZLT26+dJT0P2zvExCo471OumHjYwgWyiRYwGsfCFqlNVSTHht54Q3650aaMoItwSGZZS8RpEErnab9sunveDRkygROkh1b1ukxzGdcT88WUQ6v6trrg6YpfpRYHuM+keWt36tLArZtgAfJR71qUZHZ5HI1D4pTFKTvXe6iVoT8HR4aXaXOvlCuap1Csu6Fk5r6nnbbEZQyWaFhxEHHQtBrWPHSr6UAa5K533QKkXC2SfnsgeE33ezVjvOo03gZbDLGfdxleuHvFTpWEwujC0r5wWibX3eFV8r1KCLDn9yNPFe4ei/ASMR2xLnImI1K8QEG1GdMsdrfoTSzedRe8b1MjR7UssPRAqgLnNKuiqnEPndVoELl0hejVkKPOqaIlxAexVk9c/SHnA1mA5WnrqPPoLP3vx7AJkbXrKsuRfBymmgCEgElz81EOfE5b2u7zOGvNljCzc+AXRxCV3sGSSGioESxC5PLZk3tOaygFIiHx2E9NzUmWmJTzUb0Cm0RI5uoaW9NQba590ugh51Pzprvch0dWCYIq0AOt4Xt4fDIzKfFGsAAqxKr1F88HnYg83K6lFtZ0YhGZGyW6tXuInZiNq62qetIofue8gBRuvPvtCbAkAainBvU6diKbNoCxssMG0XBm5x/tjIwTFZCMk+mrfTssCmy9zew0ybp8S5adjXxwsC77NSUGPuhV2yUrEEYreF20rSV1pUCgVa4ZJtlNLBmAxBoYSAz8xS2Wh4Yd51UANXd4HBNv2w6MYNAg39VIBAE3nw3wu8+M+C9ttaPDPX0OiAHX8pHplJHcH5g1EkqSmLx5+B3pPjuicRApdbduYWKUnscWSVESMxsiVcUFV/A4bEqdV+n6q3YD9jqKNLEsB6lr8T+VQOxQoilE3ESxejUZAPkozBZqXY2EcwhEUsgSb5iK5PPAwb9O8/GFnqlcv2u8zaC7RzJhjy2PpoxLkEUDL5MWIKAh4XyZJoX0Oi3wtqBk45TbeboOceOUG3y8GRh4d9L6hHgcY6QZ5zelCVTf6yNPJea0NOLocorxCTpKT4Bep5FQ9SKD5Dmv46l6NjzY69mWe3AZmMRnbjoij40fAWfEb5AGjGjbzsFob4SV6mk0jNCarXgx3GRBv9q6GGuxzekgkpeKHrRvCxb6CbF/RDN23InLS7ddYBMYPtcF8dHi6ltdMkgTvTkZMm+BQ/sW5ZwHaeBK9qcXhcus0NMvFUSehmrmZ+rWHi+LArTKQ3rAMN87c7G5/ZfUVf0LX5RyfORf/GEVtKjUYmfOD64SvRY15t62sUBV/uPOtYCGGG12Orr5pVFSKwkjORWtW2wBFum/MGFXpbGfb23aEH3VmESI/Mwd3ayTuZXSsYXsrmjU7+kOsoZ/P2OhfgJGh3PUPgIzX9YnbugHSZy611xv0EXrUTTngfCgREiijGHuM/ouXuGCpyDWfRgjYBp3nTEIntgWSC6Ek+QRrJSArRsZbC5xuBFWZ+eJ41sW6k3velBA49SvbvB6VJkEfew2HM0QTkt7rlC8iqgYJu4xaU5bq1dB/LWD2fEUgmARe/I77hQqkIMj9MX74b/S3H9pI/9ielZtRLik9VDmwpbqrfIICZE6yw56Z8cy6OFqwGLc+NHe9vntN59eij/RrVDSoPK/sijDJ4iHCinBwrSCStr69qnX/vcQiQd5M8KnpAa7vBFT80pp0qmChFC7MfXHuDWcHzpw0r1m/BipJpNxyQwm/khxihxLRlco5k/rb2x6FtbRPrRha/SaI8eKk4WQdK305+6ZNCghpXwn8xc36tCv1c1C23iOEK5GDjTUA9lseE0SBM8AzfQmDxhj5+5hJMYKbAA2FcTCzPLK1YaYEBthe9VguPVm99rj5j7EWz2gphY2dAYar+/GbNnFDqMHwxliEn0MoTPFRN5gR7dB3Y8FJM8oxhjrezt1nsiBHZXWCQ+tk8AgICAgICAgOJ7RADB9NEhaOxeSBnZGkurrn2mQ9TzQXTicjYiWBz4GsG0E1Zc32/WF32/Rf6fOk+7uF77PuDP2a8b9v1cX7PtUd+3Ub9uif7NbnP8PrK77fpl9PnV/wfZq32faZ/t2H37fq3v2fa879uuH7bq/ZqG4f2/UE/s9/zXzpP2/YLfs+wP/T1L36vplf0/rqd+rSL9Vtfp6NDbXceXtHCTZR7Ufg9pLSwWsq8YPKclgwBQtxR0v/5DNcDXjP9KYKWc+uSJacM99BP8NnYdTCgH54SMCI5I3FcIKBzgUWzVevLqPGO1D1alyz4U+FpIZVqC/2+C69BPDDhBtZomSkfpWewrTQYJf06Q05+lCE3YaT19KBpZw0ypsvHpN/mG5mOnTrO0Z3btH4ZC0uGNkeTKA05DytY2RoVqVoqbfHpE9odGaBlXL5vcLyiHRZM4SFeTa7xYrmAVYafEUwemsbqmltnstCBrCH0gpoXdc7pGr3m4Udsfe72Xz+61/uvfETlHTEoGbscbxNKOvk/MJ0WP+HVA47F3BU/KUXz8ybIH8v0v/3W7kSSidAt/xZmHSFWKRQ5jpOdxJeHT6sUR8GY4swYS5D41/N6ais4hoHNLl7eDLrEzs0xx0tjZ/wfLvdk0YGmAIzP8WL6ZE9t/jtJylUTdNVK/mAHtNQ7OqLK15r55xOWZEal+9qIO6ZH0QHsPYwAwbphz3S0hL58/a4NvzZi68Pqvce4QDMamvd0sdvXSW1ZY9JL7vshi3YmRXGJj+6vsF0dbqg+MqlLHOFe8MsssK12JjZEHk+ZjPTzAgXf4QK4qF7ON8OlHDl7yzEW7LsPaEegbfd3CZtBgluP7NwatNAk5xS96rNlYQC9XwWdFd9+XAvOQPUsBpOjqSjzH44zF1TZJ/u7H/Fw8wbMj5egh7gWrAhMbO7Iv/PCF2X7zgZ2q9UlfWL1o5q7IuUGGeklwzY39l7jQxfEIRzoJrudh8eUZZh4xMDYvkyFteUFcfHbnCMdLRDWNAPxipjKKjgmSeaf/ZN0QCiqhTPJE+xQPuh20rbsGlIae+jOQcZvuyosl1j7nEsIUxZBtGeOP3Jjoy45QDZqaDo/+eGyky1MedMmRsidI2tNqXp0eQimNZ3XiWfTJOWMoVFbRqhRm2pUGJqD8R2NlIONiz0LluPaYneMg7KUTVAEUwCWZlrNap/YJTeQAlOgmjZNNQKH/SrA48653WuIDFlJoVFmetQH1N10f3jJJDyW3zwhh4u+Hsgwkat7QZnDTlLLS5xvXGFiq9bw+7sVCnIt8i7Q8kS/VZmcFdHzoVdZ4Bl6KZNmEyPcM2QtwdKP3DJjAPhFe3I80ce0m3d6iPWmD4TBcP25nOUpBNLtn6g2Nwq3krwDHFw8+59HA9bOwq+kBoTn6ND+hb1758bt0TmVr2XRbjiPRShvgloQOz02Mai+0aIwUvI98oXuHDdiVVBCX89ztf4ZlGnYBLUE8JVGRewIwMmZcLfSBVOWPsWFbC6zHaA5AGIwkrJVrZF82cOCCa9nR8osHTQMz67QqUI1VMVrYgUhLvT9a+YUPGVDid+25iiORQ/BuEiceFYHsI5jHB1o8gX7FwEYiynEvvdVTqUemB2CqcKYHSqOmL/G8cUMftpf53IZNmQFnJWzigb+whi8cMqhIUqXvuHv4tBdoXxeoLmjlPuV2gatpdtCS6AHU+8KUeOgJmwZFXhOTlO12744XjpgHtNuxfSc5knPrAosnTf7dXWq7ST1mEudEruLWaBCthVMWX4stT8TZVSG1+0gYThzxV64Y0H0obnx4NEmczqzrGHZHIL4WIH/W8ziAvldhOuHyGPpUpmUPVgtoYp6TGBzwFNCfM/68/knGlPecmrjLqzY59I4NeW+iuwOGTPgyzq0rkHGrKfxQSCS9yIuzWyuHB3A6uo9SuoesjY70fRZmsYdPOTy8EbOQRBEteLBWfKIxpFzAchk7C2RocFmTML5btu1Vhh7IlKJdkafLM4Gb3cQ6BzBVJZEmvw+ynmidi1WdMi7UKtddqYMRFjP6LhkeBOh6mQh5i/6uaVb0jZb3FdIINw0BH+6atwkT2/OSrmtRDEwQQfKUh25shJDPWBIWqWBb+4t0nLoaXECwUAa/lRzXrYA87PPMcXw/iiEKRK3YoC1BobDD5FUM42mISTbBRvj+WSCvZjWX5ZoLdH00uLT5BF4lUDjDXgwLGlSJs64Tt9pPZriE/XH3nQDyOjV6126aCWVDADut8zR5XGEL1uaFsqPCgj98sNalZdIlElb+Bzpn+vbSWY/Jvqqmb1e9cihNdZf09jKxwfefJmlhHIknhagte0229kcImqph0VLLQ5jCFGRbM3oOtXGVRWmZC0PjkIcSDI2x4wI96xJKpPu74zCpFfXRl76S60hSFWXau6BO6LVM7288DkBVTQ4w0tQj4cJmqF2nstdjfyDIha8xCo8gGX0XMeLOWzcMNP44NbJnAHOqX1jNxcaDmT2qbgDkrMIA1i6Rf7bJ0aDU81zjYygD8eZByBhhGppOKMhszGiDkE7ZlWrXzELevQ6S0yBq5ZXD5HSrXb69d9NA/3y/BU/UdlQlqO0h3nzC79wU34RRZtz5HmLhg3fbDGi2uIByC2grMKVxqMhtlKsjuhn3h8Xt6vYbz/eoPyxUMO38jw08ECKrVVCyKmefIEuT1o9E2x/v1AweooiU+6xttNxz3lqZPpk3PfFyD1TwD+5hVrpOpYAk+sTnE7lon22h6j5m1h+KM5K14Xi2mVh+e0goXZDy0hWFOfxv92+KOhdAuomt/uA6BiGWZTP0cdcPNVDHrAadVcmy7ebZ55fK9HBXTY9iCYehuR4IHfJJ9m57M23vBqER4tcqeHB/U/QATUK5Orfcoh3MKgdxi9SVBV27xooyG1I0T37zsQYEVoOE6y+0epD5ACM4xSnSCfUQsrVF+0hcvgNDbdZJWw9UWVAkKMW8kbOlDb56Jy1jmxxaw9+6Cl3idG62mRrlRfz6Z3FPXJCrFXjc/b0wo1pP2+cl5SXjgYlV8TnQ5EMSJzX3HWaFqtnjA3xtqNBftm1yRm+PZ5ElqUgX67+4v28er30dkZ0lNEqXpp/ac3FdACCeER0oKvhQIwrAMuQ22goz1/NDqOB/lzlTJTGIctMCeGxq6Ih17LzfIgnB64nYPpmYmMEijapJQos/3+EA/Rx5DDxnyrPtQv6waQZL7CHoBANjsvNCki4GwKDfCGrVMp2AvajPX5Bjy3GHLr2/2B2DB82c1w3Mx+QM8jGeb/tZrgr35NIWfpWlosJAK8szV5GornF7OYrELeOxbn/qpz8+ieh8XO4Tfqc3t5Fs8ZgNh27TP+K5TP8cEjK1TppKa6COu4+BCSXVRWwGST9bWdeDmBtcrV7eHUpvxVQzu77TzeTj4Lwkh8IID1hja5gGkRhgocTMQ62YlaoJKK+7nqaZnmb3kZUN0LoX/QqfE92ifAYKQo9/wP3HxwTSzucq123I+aHZXgo4RYcvUoqnq9El34Mu8v3qfz7emuqVCj/Vvw/PIf9BQK4KQiWzZU0lCJ93KQvoTJGjN73HEisdU2o9uILYxBQ/kzBtC5MRnuAk6FpGQtZYrMKUYrJgycsDkMX7JSaTWonaZDMBztEXInx/aIvMheUeNV8NpuIyfEcblozfRN4ROJBraKnM9XIcyfU7PFyrbM7p5qgDpm5KrDmWA/763X+T9P4xBOcB/aMmNvgi3vq8RpSFxsXrmzTPFP67HwwDwQVEatgwp5TQoK8ZHnPC79XaYogsD3W9kimZ9WUpPdO8CWMs43igVY6Mkq4Frkw5plZht4Qtr0h6Sh2YzyEHzfj0UYdGtvCqvwC98lQSgJAutkxkDUgNLi2tthbhlhRMSk3r3cBzFg4aJWVmnneJhUWUtRatqbB/GPnvbGgkKRs4zY/OOwvMZ+X0NgsNmrJOWlegogyF33cHQcZfzMoeetqVi2AgUgPYTy6d0aVaq9kMwWsOwxqzK8AeOV2V4hNYav8cHKuOUn+mIkjJWzCc3P9wp3zABnawZ8J+ThoQBWgNSkl+nTCjQTwSqYB/K/G2KKLacNYJQUMvaZDDR2r3NhOYzrKYaY2lGUf/OV2btWPlDLbxNFyTba9gEBsS4wvMw8wqlY+Eb3O6UAMlm3GVcuHc7wk28/wIoumaGBiZ7/GxR9BxgfcBxcmyJGy2itkjRLJxz4wNyDHs5P1AiIdEHrzefycSjsT3ULCKSz3s9wdsONa6UoFfm4zXj6kt+NFah5Mhqs4Tl1cOo4XLv/wPY1mB/kmWa8c828QX+lZD83Gr+4KiYUabhNJhOTxtg5tpVYqtt3BFqxAzZGuB8uDGs592knrv3tPo5G3dN2nKXDM39NYPqs+Tt+Pcj3suhe8jywowUP8t3JKaFib6g5LZrX9Pludh3eIXVP3C9HySFF8SfbN/nJJMGwGB6yEiEdjRTwa90/hP+5LknDf3EmSz8ueHtmw7/eien9V+BNYGdSceilUMkW4QiVk5G5LhYwlDTzJfGmZMzpT/EtTYvbQMJI59e33INqp8HIGY2AkufEABG+i8WpoIRf8aX0oEU3+QjXB6BEVD0w/qcrK900t1BlDnWFXZkSJDEqCb2+HVQdlhfHyUH8E0W5PFvu13SPzqKHv6GgvKVKKQzoFITCKeGEkTsnAHkqJhLvAI9PqUuwdy/zxl4/nSU9hcf13i88y/+NkextqW9ZdtdpMnfUC/k6xlqKyzo50/+C625sjQxr/dAI/wc1TG1zJCGwnV20d5OEW+rFBbBTgtTNegF9yBMFp8WFhUBwCKgd74rCYEnRwTNF+cWoYnjuJhCD9SWzFW9Rx3FXmSGVRSTBGAHFJe02wRLC4M/XQQisZahv1qYkv4yT+z7CHVK2p5OzJxlntP6rfNAjp6m4sFZDww0W57FILK/xnqR+kKuKYOIsV6KnHnf67bQQkHTuLzBc1N9IHEwtQqAcXF7pNTb3Q3W2NwbFaTKmJcfWPofQ/lvtUv3n39qWVlKEdLrwYnsZTun1OzDS1Sr+0EqCM6kNIgt9ekGN1kDTHP/ZAF6XVbjwaQw1SrqySA1+ZiDLgaTokBn3J/nuJIrEn8R+1UZ1wau3hg2mPnYEupwycTv7ejIY8cfUNicixvqjpRSAVTyEsMgLQXw3oRn9R/gSGpCPNs/GFA6X9fl66NOXqmXF5oDboyu107OULGtvl+r/m9D/S7+B9mwiTK8JUCUwXKm+eyi7iUKJopL81V0tckOhpD6r6qsRhGuQWbsg5JLVwX6bSlrPYGrdL7Q1KmfHAXiunN6Y2JTM+v0DA1RhiL9BocERh3CgTGY3eVvhf+GN6syzkd076lfDu32BWttzOT90DomMeFGbSS2A6ut+kzugHsUnINXIwUgOyxXc4qJ4G0RqV1cc6VterSrMygx3MplOQWmnNRwnXm6LmIFFgeETTHr6a95JQYtDzGEt5BUlMtLuo+MzScpXaRcdXm3LEIFrhx9UO7yHkGQMY5ptUHC1N6YrdEnxgO5bG8adWVxlD5X7G3hcn+0RX/QE6huoXgPPi1WOlfq+oFvmZ0pgt13YJoam6QzezrE3fNNrsrr7HGMKRz9BF86dxdTJCwQTySxeO7KFex4K/gs/c0nQ06Zxv/Rb4dxbY1sPQBjcl+WomewkI1PJAJa9vbhMWD2mFyvtFPnWgjhuHyepqq/q4VYWOazM/BywjdP4FTamwPtvUzqOP38smTqw5mnmZ/MKxOnK08DABVwyrDSQP34lLDfgf24/oBN3sg60D1UAoA6/1H3+T8iq9n+R4ZBcsVXfqbBj/1Qn7n7juEmJ1wPD8WIY9YePTSuSF/GAeXn3GFketceNnPAuq7/Hyw9Fgio2wsKXfEtZG4qIXwl1a5PHTXLeI2zwb4LLJRn1Off3bIwEEMWJHEBggiRKA5zx0Skr5hIVShx/ghBjkVC3nzWpspeDimPGXMNeivHb8JC72XK9LQ458UABtjvM2fxziQZxHVo/+EgRU3X7EiFk8Lu/TwBkMZ7zmRoSwk/mWgZpenz+4RQQKchgezB7ansxAVqhRrKERCsEBoziq/9jsDYdceqqLo33Js7AqKLoIIGlWYi258iq24U8Bf9+Heelg5D3R3ZpsOTi0JfyiqNweYctfStE4c95zhdtbMgemqWK8oxYVGqNPEnZDzEBeRQOVg9FF2IMjYV5Kef3hcCPUgrV5/Ft2uVqZ4Svgk0lIf9e7UpP4A85+cgBPrPpJPJV+v0XvwIhDz2DZjglmq8fV6L3YwiR0QmpbBTLeVcIWDPBszsTky1s/5qnmnyv7sa75xqXNpOytKRshIch4FJNyLuKXyoOeZTLzgsdM0sjgRuDO+wnc+1d9SbXsylefTr+a9y2NQfuDvcM7rbCEpRFt7PeabMqDlUqN8aZ68bxtrgiwshDH1aNiIWCERlzXV3W5zdxGoX5S6mydJP6dK218NFesYUsyWVCJ1o0cjc41K3ewtQZCO4CdqwYAHZgRko0Wakyc48MRV87B/sjm9NGCHvPEGQ0QP2F1thcbk9/khSftIcC6h6q+LErj/ajv/IndnZh2nDo68m7/nE+Inx+/UUlLcZmBAAb94J2o6hPkPz5vfOdNnnc3thH8g1QNPN1fRWoa9qk7Fgc0A0pC9dBYB0n71YRL8ojT/CT83WY+psW7EVfACrEYG9XjZzIu/+EtEBR4/YedzWOAi5w+02ZKEawN6YDp3DEEiX59nUaN6YS4G0lJUao+8L77LXlwmhl4Cj1DI1XYsX2rDiWv4ukRYfp9IvxAGYo0N0TjQcpenMy6LhWJiBjHNatNdVlIPT1VaHohAB4OBtbVOyTrkxmIuZLumWRGaCoXa1R98e6BK795rWxAaICr2ohXvUKURBYBX/GHJ1Ee/p0F1yw5E2jieBww+/xQL0Y17iQpm+o9AcW0iJDT9fLUG5YQ9mbreeMopT6g4TKU/lKiXM43rwi4h/XsnQIra6YcZE0Zs08X0SiLxbhc4k74hI8Y62rp4N281kt+gyp334a/trKhBCPfI9cPeb45QUkCd2rXF7YXPpNTvAo1V6n281tOV8dUWf/KRzFn7V9c8HK8tRi9bBqIXsdBMPYhBhgfM5L2iYs8c1D+nOhP6wycqcpda9OT9SCJTXf9q0dED5kpvHJtt1SwqaYTKv80wBylXVn/zQsC3edbeqlBUaFeUxhJUlXQo5/M3XPWXuF2zuNFVrYHb9W0S0CGF23XzBdFbsHoJKYCd719eT+EeJHDHR/RBmMD0QfjaNE7VS/2v3QqMMdk2rrYR27wVriIruimvGK9x69bVa4OWlGz9iiV23TAk1wyCg/TOGwEaWqc9Oqy95kRae3S6fD5KdtoUHazxQKdLb9Z1+2WKD8S4dzgSbk+HGGz0NX4qQRbfO3BqUWv5AMZCUNbqUdZNiDSy77MYGZjBVZVg6436SuuJBTY8js3Cfe49TZH5EdNExLRmROJpSIbP+IzRnrDtEkhzRA1/6nMH2z2KEP7qTKUbmp2EfQHNLm3dxHT+RLN+Kx5zBNWrGirRdrPm+2TLE1+Bv1Oumg2sfpG0igMh+5fv8uDoiCe7yVhDdI8UZTXjTLYCDKpdTF5uFXHSnEMIuhdDBNHJ2nyZl0+UvWmR/XcdY4/hCbDlkN38Wwb3e5rM0S7k85xxkW6Yclku1Rd0v5hjzkPGRnkzZVem4O3V4Rn21PwmmUQL5yUPQ+znrKfRbxPBojjlYADCl7lqTJjBP/UgZOfAgyGiNpKNP9lAZUcrCvPMkPcaQr1pqBBZtYskyVP6+6OswV3md6cp3NhVnSHEVWIsklEEiyMOYg1pjx619dkeOUYLph/M7UIoXI7ISXzQrFdnNErmer3kCYNNMKE9ILBNrSWdEu2hF/DzEAgox2WHQ91y+Hs0l1TENxlSiVOANfIF7YZ70DeK8kk46ntIgsdP+BR07lqG/yqn/2JvjK5DaRo+fOgoxcBiq9efgNCuugDdnn2HGI54oFwZ5CcX7HyIDgqWYAck/gaDcaTVk78cSi5vtniyQsscq8EQZ0guHKSK8RPdPSr3n3xGYr9X5XZ8pfJdTXNbR7LU7Y8cadJ2epJQdEvRq+YsGzfcgMT+WEwwj92mScksnF90a4PE0fnBOJnLwXUkowRHTyDH04RZpTlPr8OzuKBMTOHetsmvBv9Tyvk3zVHN9AgCylpZVgwEoe2bDW1q6OCaOvOygHuJSonU3qffbvLr+etHid2sY9FnV1IPBjM4OIV+43Qvi5Mv5wwS/en5N0BnR6irtmmFos1q/gLyNpzOq1Obm98F9HFMsdN4P9oYLDapNXVHVcXp/zV1wRlbR/W1Gs0YfNy96yEsfqKpS2gKO7fvQQh7n3RDHALvRH7jBVyd3n2c0TmnFPyKLITCsbITVTOqc3QQMYyquHaJEQ0Xjw3Ln9ajcxeRnM0eCoDfEleqlSHpbg3WCGS/EBM4hNCYMUqGVbhoabIV8tb69CpQY8IA2TpJS7ejtTeFeHdbg2meQtmPHoacOy6ULFnJyOG2GW5TT3/uy6zEVbQlLLFhRKumUeyL5Uet0eqSy1gA7CKffTo25rz2mbCir78GkzSLDnvEHe9ZY1acxVB0GufistUirQ+ZD/bItZKjL7R+u9Rb33FBiVNjKGPtfTlbyZpMbRpxVj63HHfxU7UvY1FN0P4VNrEQYvaVHcQOkfzN6f0C/kv2Zlxy4IIB7H3v3FBU6PALb9ZhyCS1QUZ8ssqGeLWsAjzYY1Ly8Z7uuREP3ipI73bCvnhKZ365aAQJirvLpFEHruFXnK0Am6gNweLfQdZ0PfDP+6rQQT/H2ksdK0t/p4yMuawQgg35n3MEPjZ9XhDIJQDGgroiaoR1cK/ox/NnNJNVfdx8oVsOngUU0E/XiOgS7tk2ZtvUY27QCBCTAPdu/I+3u56HmWYtWH6xe07E+F3KMweSIDEi3xqq0rWQjfFP2GU99b5y5yNJXjW13jnw0EDocSDANlODnrtZwz1/jBTpR7shDu9TeEqXMHTuo4OCuH3hOVGfhNTsE1PeEB70UL0e2TQ3e7TsvzMf5/FmuCeLuj7hBBKqhmwgZIWWw4iJGNETzoHjrm/liXrz7z3CSD/4YozwtS7b0cGV7znRf8CHhvt5PpdlSrHKhn2Ryi78a7+cW6sWeMFE42st0dqmmyNIUP0C7oEScYSWzRhzW+mZAXLf6av4DeaWnvCdEWGvJOxcHMS1qwctqZVo6zlbl3Xeer3MqF31MyfJQmWNHhkUZiY1NdX79diXXZ22p+9MBHQE3OFOroxcLGP1i3vlKz0bKbj/fnMMi+2NKarEhI3ADP3K1IGMKqndtBjUJOwBZmc+GaSX4aUvegClMUXITWBmOxoPAT2hGLUHo4JXPSf+I2mK0NEmxRQxYtbxIquWKggAoVeFposlAo2ln6vFHIbh5Nb/R6jQMVW7XSCumH3lSpdq8vezUKESDsx4N14ZtzlWJF4iTPyLAdl5FJKOj6gu4+n/elPA7buvOqOvjpwZ/2wuK51OVI7D9bI2oD+1mCrpHnkzePux5NMOTA6LHcAY3Aw1GVnbvydheAZ7qnJ7RBmiOPHGaJpjOJQzj66LC62W9kFRii4Vq+7pXbjFJvdS+0V79PiFi3woP2570Kj0/mmEXPuTqg3UeDwEkbMQIomabOrOQBUDg4xA+B8r7m79T/jOdov0NwH4zw/bPNOBPDJjhZWE4yeonq87ZT8/iP47CXTuHRt0XV7boPNRvk+w5N94mZEr/bVDUUiW/rD7FCLCc+g/ws7MzLHnz8dKR53ni0BNQcF8+wic2IITcuffrt6r/e0RPWWfoQVLcKQYQMUgKZ0wL6a7vZU4t9McSSPNsXtFjjayxsb4kSI6nS3p4CRGg7UBy47v1Biz6B6LHuRxpvCGW+iKcbDbttZ0+oPuJTfqsGIrEdKuDuiVO8sia/GgUBpfloetmn6oAxtwlCOpdLTHo/yc6Zq7tRfOdXpYCm7WSZx0o1Svo2Z+H+uLanXOSRb3mrNrEhiHIIeOgjIw7K/ICRKpPxXshEzpcY7yovZkaU5nElKRGUbLKNID8VNc87B/2AzcqTOnhzWCMG1xVOArdJ7lkJ2F81ZVw1buiXpv8LgFQlGTfmM2vCs+zmOFhTmSB2EJ6MeeE7cZcJ4+gm/RAmz0wBfp/U0MQavfqdcIHT4e2N1Gw0ALkIfhYJIP5c9ExNh/ZNbkRGhONapvBr8DvtjwlrMVbxWRb6noxskANVJCoVZ9bd3N2lZLWoNKd8rIMt6Px+Ja6YY9EMyYhkn9BzUproK92xpg99sUxhcdnJvs/bXpGZqntU7dWE8TIDRVvugNf/LmJmQLOLQfMvEb1XqPGYdx7cjp0GEM2ZijHUrMGGt9O9EYojObA4Q5bvAhbu0I/xJOKyPI+wxJAjwu2Wl7sABapAaQYiorXGXF8NFwV/gi9H9NltiomxXIA3iNBl2bY43vxnLd8fdv8+ABmx2QkvHGO9SYKpa/wTIKk5RvuJm1ys3ysU8FPVZfIKcxHS8pL20CtkU5/riD2f1OnxAD0s6b/k40vbm7RrmYF4qox1tJDIDm0qMmZ1DEThAQIGbGvwbXiuj7hz5LJG1mlQiBj0w5ubfisQqI+N+cjY7ObArPJOOST9YYQ7o2KRO2QSevqZ5Dm/sA64WTrDT/VCiUTDd9imNlRsQHmZFZNM2fRrNoTDzzszJIZWmTia4Zz9ZJUbpn+XezO/vJiplv2QXL4me70b2HSjJdbfFCXsLRG9zVdYYVbd9EXCwxyemQf4PeLh8rIg9c+GYSayvoUzrDbMS/Ffh7Pe3o49CwyMQbvRXk/vfFwjmUy/pT8OXeVp5Y9U3cK60noVZhOYUy6QYhN7RPqD5fXQiR+e2cJxNOheD/fOLAYgGfqCKmzoRQwa1juqmxrB/dhCFysRazmG3svvjwhbF0fUTYhsU1KaK+xpofuc1aIMgtcCRUjBc0aMlGuwggFwlmQptkTKcqqKzGSFdRxm72t73Q6jTvfSRj9cMrPqrLHXLqJ0gi0k2aUOyV12ZNqOK7aEgFrRYSU/JBjUbaHcjc42IGj/fiNaJkrO7rAMgyozFCvU3UZ2SKp/wRduBXKxyfQtP0psTX2b2t0cIMna362jIPe8BvMz8dabSnp8QFjJqMHIhAeJ2v3n1iz/6Y7Hr8kVMjbM0sTVllDWbFfRECYNEQVWeMFXQYJSv/TAERI3xIMcs07C9Oa8Nuj+VqCShBNYYhFqKOCAELfYoZXwvz9e/hb5UTKKmvktR+IgpwcwPWOJ4cQJUosy10yE/JeHhV+Pqya/Q0KhFjLKzhVmtlB2ah8xEKu+csV67drTuRQbsIMidGaOJ0lofts/kMFnEB6HJyg1WuE8esMFlrFMkx7PKKw4rjJpNB1LmY9KVZy8I3d+J45d+5eaeTENeILMiyWblGo/AIXkwA5pDklCpvGBAYkm5jLvayPXFSJeeVSTV97kF4vC02BpfpjtB3G2cT8J0JAYBMonWtAzAoY6J5u5jvVhCiqXFC2Kw16rgKe42gUI0o/uDE7E+5M/gJlCAmcg1kM7eBvzdqUaSuQ9wXifRZaP7pEOFPfJ/TtcWTwKTfNue+YqlUaXJ0dZYZV2TuzJh6ny1k0SFoj2Pm2iOfgWgMa0RCc+npwKfyOc/KOiOLhAT3VsnK+ucjin6l5V9a7/g6YzDvjaYnyfeuTQdmKl+PTHOwyXiBooo6Fjax8ePWYGia0netIsHbpuduiHrCE40093xm7tQWscEqEV/gqXt/d5E2oBk/SW8Uu2Jn/067S/5hXnQ3ZYj+nhLmf727St0vJv7njMgWWqANY/oYAJ4TgIjN5L8+VvZKY2bHpc9i1oteF3+PtQNZ2gBSqdTEp0vjbyITVyBtE3Fib5hYIG9jcV2f6JkD76wB7fWrDKbec42PQzR/ENQB1hVfnDR/JPAuIVjn+5/rWXyM1h/RC98ZYxEYe6b69GyB+Bl1rRPLf6+qc1Gw/afq6nW6d+f7cStV/YVPrSD7RGzgJcYEBODBFuDG0wUkKJgNjKG44YvyvtK9Y7iCd357C6KbREO15kSn8wlLw6Fl1FuaEKIG6Lkuv+JeTKli7O2n7/Qqaw4TuRx2CZ36XIKhBEbZ9blPVV/Ly/KhVXA50InoqIht8kTMBkJkbcfDoxNO82hG3IEuWF8v9WMh+A8yLRyQzUBgOznwbqO43HUOoFDQWRfbHVbzhJRJKmKmwDih2A2lhJaHRQ50xvmKjcAkN6FNJtEEYDoGTHSo8a2IAN4+CikExM9uHMjV4EO1Z0DIv/JCpjImmmlyoFxY16Tori/hTgzn7AbHmxgvnwMcJLk9hc5Hc0MHeZT6XAlUPdKobTqHNTLWUV7XDx3Gwq8z6MNsDoRjA7w9JFOkyHQ2ADlsBRDaJDjR1wPi7iGj+YBS+mVw2xVwINcic3VuPvN5y1xFtmzeeWdODaz+KughXmVQ8HGzl8AsMeeCsAjLkCpQF/jSKxaxmNavC9J15UbB4EZPaFCemRPXFE125y9w1W5Nc3+6hK8gN9yhHG9dCXq3G5RAJOUuUTMfeBbNh3XgtMaZvxAzyyXaYbu8itVqjpLaI1XriCFabIgHv3pyKw41NZlXd7Zq63BQcG1CMoni82uR2pO1H4euPmv/LQjMM1I4wfiTsy28Z948iqfHS1z10I1VEchwKx+zqO7ACL79q9Hqf0giwFgG09z9HDxTcC6JxORisp57e5dHU8rIkJPV1snrolYprjQnBfulANszZSSwALkkHZ8Z0QFaC4Ml+f0133sjmvjy+P14rbapSmIe9xKg1pwJZfjqoDMUnMUq+iNFD77Cs1h19nLKaaLFH0qVYqejUhD2UqLgLuU9tgVDaom5xR6DZFNjSi3MZjge3nfREamDepThMYb+tWuhtZmxExGPMuZIrRCbxqKquJXg6U3eQbfaKyRG8MctsUtyvElXVn25FE7/YFqriahC1uHepNHZnVLzriilrZiaAhaBnx3CK5vBYdgUKFcAIvxhQYa8Fa224LM4ilW6xyWxfpwxvc9eLpFSxU+e95ZNea9fH9HTQE44s0lZlGwbLwgJ9iH9lvYC1klp4CxMytRSlLc9ZIvx7d6U+toAkuOVWbxNlYTKXjl37Rxls4hmLIc5+tFJAd0dUmV31jDgdu26iGGJqc0aogAMKdLcDcyrGihMr81QYbH2AqchZAfpJ8nc/kcVLDhFiiZNKN9KpAvVap5AAbDY5Znv0KP9X/0RRIqo08HfGWG46cPB6VSvEFouD3v/YPAwxB5H9y2NWx+KgVLKnq3j2vXARDflw8D0AAP8aXQ3WY+PuVq4nXWbpdHeBZtuKYxTkTidp8nF/B0h462jqdyIs2gtxDnGaMH5OR/aHZ5oBm5vELcmH6aL6DPaNMp1pGAO8zo97yhjfJTjsSDOW7WizlIVCToq2XHAXijPgW0q58hFFEPAUP3I7/Jz703wYGFUSusKeQZxyMRNbG4cgCJpXybvhKOLtdqfmn41+I1kgTPkwJ5IE+h+/1y2QtWKvunkQfvzC3/61OVxl17syYY1FeB5FiD8QDGfZjDZZ2kZlZX/feH7i0/O04sfxUE46cFPkeL/INFWRb9yCVTs9hVHLb+i6kC7elKsqmi8A94kbt0+xHV6qsi6G3p/JILiue08QPpEU7tq88snISqgkQ+9scezsUs8y+wBRqCxiVRDqgwtlViSlUfpO3+6hL1zrHe0h1iHQfhgiYC4NW5gVoSFaDFWIiKnZ1iq+K4Ts4cZOryC1hLfc/pixwn+sKdyzZLQ3X+cX3x2hEtYAtvgqxgzK/o7TIPKImk6P6xuoEK/bNtUT6e7R9qD9BVzsPC8m6XJJFNri0JxNVooCfc1tOBhoVp9bdG39ctjfbJPESKOm4QiTZakaysBAjgq1lpJ3T7mRIbwwnpnYxlEVXtWSCvjzvfbdXqwtIU1sQstoMhuECJGEKJbSv9FAd5jF5vcfFLvLwNbrztZpj4A0DODP/MZz8Qx3SFRP94gyR8UyIN7dWXTUvtL7oNp4mad7VlW2fTIFJdFLO3f+1twh2zzkqaiYHf4PZyIWkPXzQRHbZmgOQqzqkMQxc8XNJySbsfCw8E73W1KoVwOmmRlgSNresedSsp2dG8o4Rzap/PLwfE8mx7yk5zaYv7i8sjQZPEuPuIe54ZqEweKkV4MzutFq/w4YssnzSh/B3O/RN1iFqaOsMJ0UXD1cJ0Zbo+uaGUuQqf4JxSe5Pv7szTouaMRXlGbhbtzajxzH6ubbGbimyYjtIVNAg3q6RxM/AB1/4JhjkuwfO3LDym3ec1zIBEiXM34m77VmDb85l4VNH3uBvOTw1vEddAV5czXq8q30xxBMC+7O6r1Z6OdkXQVDZMIcNvRNnpCK7MLXrAC30NZJSCzWmjix3kiD1W0khrLDFwwpVssZgsgWJsYAaqNcnL4MzYe/sYBs954o6fiTNffNjxvYxi8UDpQcPKwdPN/3HUSgbwqxaj8S28lRNeKHNDiwsHjRaGCxmj/fJm8EYaKONsx+cyRmRHRhnXOXOII9tRkqKE7SPp1SyjcDxTYWg9WVawxacsAdZrU+nMw65Z7UrYxVjkOoyW63uj+l2t7QoXUBgZrr5e3WE43rZ7IDNE2W1KQrkV/tPuQkCUv0p8WKSuUDNBpVgULkZS38FRFLw/o9jY/sw8p1dVf2Lm4ej4yjgRcqV7hj450AyZK4fp34P9N7S4DipNNw1kbb+xvzEaDgEsXFSoLaWbmrwFB/0zAitjz9qd8XYLTFUYPowtk7pWaAk1jTlLoFH194HBKnrGdS+rMkybpvUX72qL3nR8EjwkNo+J2aMrUHJ5N3P6Im5QxWCvHHJYre001R/lUUCaQk7XBbDHcgCugU1kkO3AIuCtU7zt460BnXTdJ5sTvhOeAd7sqGg+mmQvrfbR2HQ57uufsb5DO/ntbpKm2Fdg+308JQTYaN7U6CAo76/ZcpUtblWARQax4kD8HRuXI1z421Xx3pzKArHuSpGqAbVghWtjtWQE+c82dNqDTu0p9pcDXdB0AOGWFdxMaSgrr9d1hMGTcgKvsLf8bvBC7iR0A/l2uisDbKoGqz9T2hqV1Hx/nIjraLvLhO8yeOFioD/1os1J7MCQ3UTIA5ZlvnqVqtFIFI0xDW5FgXvTjmtp9wZs1lVhaicmal5l+QDPfM2w/y+AQQIBAHcFzLUUEzu9ZIwfzL+nmdq3Uk/BGMuWwrJGCqy0a/FMZlHCyyXDQLI8GwS6zcHh0KUNHhAw+qeoQO8jESOdUSeG0CAkkVkGIXkidlOTrhcWcgLfayI+F7Ut+BJtapKlPeDtE4E95HNzgKHD+a5LnAUtE0g4d7DtIhm2o+6ZstfiTGwf0QMBpd+DXdOV5uGv0gsvps/Lyggs9KjvBEQmqXYgDCWwFySQThiq03Nbg+aWHpljA9xiFglifdCn4GPCUd1tQod0zMQ/EnZfP5G+IZ+/7n1BeafZsVaz3nl8zy67honyLZ3CxvLiK16yvug0NPmtdmBTWSU+OPuyoGt9dmqKe6Qw5YBhuU0RMSes+2iTaBqqPp6ehgCxpgRa1cwcrbppxO/B907BPi1moQhkpSW7tGcn/WUiyBBlAAGSAQxpMBAjRYa3HsBZmQMzsERpvPKczvT0lpw2Jvl6CCpoqdhr9uzClyvWHkfmzxWZM4HtZUEQdtltyR5vytfhYxZ1edkFHUIRUytILUARwZCSVQhoe4M0XlJI3MLic0V5xMvT3wEHgI/e0W8VPFbWnfX5AQ29bxQwCVgT+uJn7XZiy0EOcs7lUqO5SxvzjRmWu7a7DvIHxlS65ySWGtdEi1+GYQHbwmn+n3I7X55FicduNPS1EAYPx86z1fbDHvgAePDuVtgajlXX66Ig81vydHFCyPsclhyL+doJIsBna5C6EatJvjQwgPyKQ7W1adtwf7KI36TQOQCN1FJrUFNCJA33ssgBeAijijTwYR2O7vBpgzFy9N3OtR9MgN0R4I4iQuAJCd5X3WUO8Na+rCLcZJAHIMU84UFuqyCAtR6J5Zmm6MbLWCZ43W9fKdqMAwnMX05huqbQnNWJ0aONnkvRbjtA+S+FNYCzNXqyL/Er89gbRww/xQOIshi8Mu7AMRnU0NaVTRl+0kP653Tf/aiV6JXbdGjcjNQOLCtz5PdnPPemsC0LxjT5sJqBtH/dQz1lBia3URlEZP+KueKmfXxvmztWdA8gm+fgHI6TPOMDB9/M0aM0h5zgBp1qFFtZYZyYSZ7LcC4ukAwW3d1In6uM2387AIZztua5l57XQCvoJru7UxXW2c/uTm2kyRA5WDm3t0cj1qWNThzTZXqsMJZWEMKKyAsQbZeRHCXVpzSB9YByShHp5MwqKDfRc6DUpS6OPXJ/lIlRes0sAVrZ1QaL8yfsTZ8TRBmuGaCx1Quw/zw8pSn4oh0m0vfhEgKfmCuJ1azPsKE7bhAOi4R9fPoNkXjhcArRz4Sw7/zxNIQFHvTzK68DClGNbdgM6QqYJrgm7tMQQbdrX4u1EF+znTPlKBGCJNlP1i8BMYNDClaiUeTS/Bo/Pn4xOfkoo/zk57U67svBgcKAoMOUUJDzv2wD9Km/U/mgOy/fyXZkyt8yvFtDuWNHymnqjkaYZhwQ3OPE81elv9DOysf1/4+0YBMkFYBq1Weo8sy0zMvjgflSX3HKRoXaYE5P7WnLpy6mAQTRJL72E8n5YXMuE4nDIYDq0Qn4lJc901PIp+K9KBdws+ur35omdHGTjNnvQDqRPZHFNgN1+pkxJCktHW585swpFIj/GP1IFQqLZBG3UYb0ola+Adhavj6Dq+PSZgOZuvR14LGErhlL2HocDKIWQLd4ZkCxdbjqn592P1ts8mKAY8Lj1409LSp+CiazwUzlU/378m5jwK3OD5xSk1VZERlSNDq4cnL/8y8Lyy0mJkXCk8YYNSNpgFCwWGaWL9h935LEugoTwk1Vr8C9RHH8+plX2OrRfxyaEe++kDneC4Sr5M0WPRXJGpAmnpDVLmUEKx+ojzmz9/b29R0dh3hIDpTSxiwOl4QUHqsZNLsM58N9r49UWYQtS8rkMX4HrwkSSfuY3O8n5ihPTl3QHGntzFN7rCdfRKwh1WlRSKCZ305p31eGPo8duFzWsED/COAd+RkUt1csO+rlv7U1O3O7zRNDRj4ci+XnSIAEcZxER7iusL8TT8EBn+mJ7i9uX+ZwdjiOx2aTUD1NgqqcLKFXXb79UWgiDQAGZz3foftaSMiBuw/jrmmV29yJufNYb7d/l9DqFBsN1wyFZPEVJVuXJ4/qJIcduZ7j5NDgMn9utJ7hRLAoClRl1Mbt8/Q5tlMML05OO+GZnh2uDCxCnEBJKuWLZ5qJpplz9I6mTzN7HHAHVvVn8q1SUDTq5jJ0Bvltqr8z0N4oTp8ddCHDIg6pKDtTR7d9tHxD0qu2pb3vCevKtnV/Ch1Exf2mx0ygiMd+ta+GIl9cc6HpsJNLs5VRSAXGuWDKnqcJp4gsEfI7aH1lBhItkccXbSxZIMM5M+t8FeyuI0lp2+jjBHWT4Vn+nOfdEWv+C8adEiGaukhTRsV/J5Onf7VXUu/R8QLpfFAaaa6zd8qU5PdyqRGyfh8Uub6qEAXwqhAbfFGtFldgSgjYMmTP1g/DkQejF+W+xOTk3OxWrXsnq6VBgExd3yuPveqJl8EOP6j1hp82nMpfDL8PLChKy92DPN2UBnO8zvTXSpTDahEY6PVz3WfnTOQp8STIukvnFhkZ9cnPi4JIpkxsVOE7BVmWKomjGE519y4ES3nrI7yrM+7/M/tOqkr/fbRvdd6gmjIADBRc8cE3/Jd6Btucaghks4MbBbCK0BaaVjtJtd28+Mxc7mdHmEuNl6nfu/fySm0zYnLYWYC3zR48o357b48GIidSriOWLk2HqBsDv2EBEcpvIjmEc9rhqzLOTM/wuHgaUXquFUk95xy3UGcRfQB/IC3HUcD9q6/h22RGmTYgoFcCQ7GVej8DyH/BBIPCOjoVOSGTu/HGhjZAX0ckLmUuyPmKABs0y89ub/fNOTZMsiMxL2QomVOvwdbhWGDx7efAQlrP+S3UcZeuhiEn/S0qgvTdbu1dZKxnSAtpXb3u6BbtI6PuMD+/RA5oqsjEf2EQEzt6kZT9gr02Uydgq690okZI00oqwrq9cWXDYV16N2QzPbYIF5dtDqVRX+CuDvYQRfA1QfETZIo1JBqJsGOTm25dq68lPzmpZCifNeDotuQ8Pci2DKEVBzVGR8OQ4tcamqER7mlxvtukFyFUKlUp5oKqId7dDqKfJPGXSZ1v8FXnSaRt+lj06XwtlIxCIeuqwla4tseZTtGzROXZyjSu1c0BhfSsJyxQO/ku1BsJSWYk+9em5IClDtZCg/SuqYgkMlilHbw67Gbk9JIPxFT81w+nohFltS/DuBujBtMt1T0+33/FF7QyQINfGhh88nKlte9757sShV12IaEf7cQeadV9+0MbGSemJXTs7NVHui2JsxZ6PLVzP6+IYvyOsfpCYx16uOkkyoMNF+iT/L0K++1K94KCtOJSyIY6zM42YaM9ZCexUoIO5QWU05E6ESw+bBiKjkzudYGbBSo4fRkUWecyBJcdz6NzzrClijRd0mpmimFj9z6NPREF6PxjG9e5GdEnWakCO5rYF6EBm0tvH732NMStKsRC7zKWQBUceHqkDDLR7yf8endPWP9hTAHn8S/n7Q7Plk0V97HtarTjjDKiCGUykH0meX+VU+BdUcdryiCQWdXxgq9IvYaojh6iSChkElQOabl2GlH17BZb+wkRao9OJda+D8P4fJyR9n2wSj85JOezXLznLb9zoKyDd/MVIhHidv4jcEinmtLMjh7FnMxQM6DTvaYvWnhmky+2jYwGUBlR0xPgecrPbGN386GgHdwn/BpOkhQ521ppJ+tYU+OP3e/9URvr6I/LDxOl5lpnLCE436EQ/Bu20cjhJTiIsbfsyTu8EGY3u1Bvea1Xm6cjvYMQN8ZSTmN5U1SFan18c222EgnVG6+FUe2HyA6MdgWgJ/SoOt0pGNuiUpRuygZ44LiCUk9/QP5XjSOelmGsURpbuEfY9q3ZWazShdLcTKHb+wrWJ59z0lF0FxnleV9DZ2R5iV5J78JDh1WYdBcoee5o13+njcWroRusBgjCQY0qHEBhJzafD7sNNMU895Ml7eHd8v6n7egmXP5X5S+17vVxakO5DOOWtJW1zOp/t6H7YMPmfMQcNLCTI8JNL/y3rZpBf1vi/tencV5NYFQxFpQr5sZtayh1U86EiJozcOi4Y80RP/Cc1vCR8q93nggQYcAEPBW+c6xLkarJh2Ccx7hxsq8sOMgBXttD/XPr+85AGxvY8IsS9QySqT73dLZoAtvQaaNSKHEPGq/fMawvFC79UG5ZbPbZ9XMFytnIpKzm8GLuSW4uMBHvhufK/KZJgambuPmxd0kq1RlPQpgQ+OL9/gtZwG8m98THfje/pw+gRox+GSht/dqtQq21rlNd8mtA9jowfXiWLnbveuTt83tk8IaG3U4fk9drLbtgKoUFlzIqoBPejTieavgEqgm8pphQHK+DaokAsMq3RHc3dahkJOH+eZ6ZLyT1ReA+mkqTypnTO4Ue9Vj20pVbTP9zUuXe50CkVvuhha39tW0chWmuE4fWsqv6FhkdthmXSYqaqLhyW6RpsQ5hfJRcFi1pUxYpbzqYc3pJlORGQuE7cghKS6QtKwHndfXc6MrSFxjynivGMhmqk0Jcd9kUfQo0A+e0b2pe7HNgnvNmNovZwwOUBdlBtmjozVG8OTQ2YYaybtO+n6fTbQ5TYlckHrRf2rp/oVbHBalu1LgHoQk1pL5hFIhXiXglBy5tOs4u0LGZHEpSTPIeQfO5b98sI5iGkUJHBWm0ujTAV/HDOvoR0u4WTDoULy8Y5XorovZBUZ15KNzhkec/dvVYdPW7cVh5TfWCzfFoSFK6NvI/ZIFKTx6o1SZW8dU0dqlneJMULqNmJLcVEPN0O/p32hJWQ5MQjiQSjRY7YKG+XtQQ73G2axflfejYtXF0Xx/gvb5iFtHvgis4TApDBGf3fst46MDbEEXaDzVsNzqFh5YdLluzTVO9Sd5KK5UMobonn/n/eOW26Nw9UBITdxNA941ucmoaxpoT1FHi8OH80i+h0KkR4UjI6iv9oGLM123iR05o1obaIyUSx9+ty9ZVnncuWfYh+sh2SnMxfVhEIdGy9z6oAXJPK8YGU/TSpDogmJOff/PJqIAkp6ijd/WscgEooesOnaL9VWQLNfII7V9/PKHmF1wp7DQ0bEJMjiTFgYAg/PeCMAlpfUMxfsDSPvF1FOmf90Ntos0erdUMgg0u0WgU+SoRC7CgHpNbEYn3hjXMRBbLUrtwXnC0NBOBvw1C7fH+UWSFOJ2jcaPeGTAIxOzXQcp1n51lORnM9KRoannaYJEqqgbkAtcYuFBm7x9fQ/urprLlvvoD6CMDKkhVCwNTQm3EuwZcdFWfWCJ6v45EEZMfy0ZTLzqqU9qG7NpK3ROlkfEEq8mpahyKEKuPkPBShLl2wZsGvZIGae9jjgxVYvu8IKumj47odEcUPZIzWSkezQaxohnHchYZBs3iBTW9fPdMpLt1Jhs8UinDsZ4j/PHUGFdOMz2Lha1tCjDoPO5zoxmGwHmVbi7gX+tCxIaNBSLAzSi4zOUySxOecOjsZTOZR3toSQPgP9YJlOlbZVBsCEhBIoT3GRv8hwlsXl5jXm1BiH+r/L6ppSS8ILxVULGESyF+5DCkovhewstr47t4PGnAKKQU2L+nCm48qGrlhZUwIrcWQflzfdDFZjhYrQAW2bZg4YhhCxgR0McgvkgjANYN6PZ7MvuQFnZ4IYZnHfAxcOB81BRbhP8ZMVbmp5BA95LzztpY9LN1TNCFWjE+YTSXaWnTSJcPz+fmpPeFSM8TSTCyXG9vt9y+IxyEcQoPZjgdZNcHJ7NQcz8Ra5Ih/WSanXJa6q9v1FL2URHEvpQRoTIpBSOzS0K4pNSThX4Lu5K2Wf5IqKcJA2Di3VsUvep+C4UllrAifVG9wRQfzI85i6rbpPlT43IHdQbXSIrfoCBAzy+/L5cRRkfCMjQYoMJvAmMS+KL72St9u/3YegCeFg9jOTRGx3z81FqLaMijHuNylpiCtifMiqGro/AGPXXnyOMFvjJABLtS+MlRBmEkHIKTxEtCDO/c/L0Qncq8ke39BQyAyNWIJsmmxpibiDW/GJ8wQBwHE3wQ6UVG/ceWUCD/5hXG20sxInh7js+wu+lp1nUzC9nm+i5B1Saw87L02Q39sObDO4tyJU9MLt8SkCStP0cYVkHORZILNYmFYYMpWqPADMX4Y4G89EtSvUof7Ff8EqPLX18GbSiVbbRhFBFO1cSXlXJO6sCrTzibwBDmN+NXCUCTZtlOWbjfqD6Jcg3C8ixGN9nGzkp03lxnXb8jqmqTSa2Q2v/nI34MIZHlVhrhG+6guASY7Kpe2O0gFW8Y75STPu8MvcTM3lAHutYQLtno7ar8YMdRGy5swYvrIG6kqn0nvgDvc8BAWrUZO5N960BS1PPfyJkdtqP3bzcr9JMiJhbMTsnNaFYQynBNf43a2TpN8umWDiVpmMSw8WFIz4pEMrRlXZLAOSvew0PzgtI2cT5ztP85EbPSo9AupfrQAzDAKUbaYCeLD8hn2YhPpbWiq6e0nGjayYtH4Q9Cd5FQcj2EtQqLD1NGL6m7KgKhI8sLf57OT1BEtsx2+CK2iYcqr6BWaEM193Ma9Wrk5/IRHNDLE+A802jLO0AFLReASVYWGyk+nbWhJQ/DRiukTYqBvYYw13Qln9kXQX2s0qZYpSOqNmY7/ViTOnynEvx4XKbC1m9eBNFz9bjgmI5r6XZsxhXqqJMIO8aPBM77v0DTUArC0cjUH6pHsods9D6XEgm79oUcVOlGLrZiGzQmxDqD3y5LUoDsSr8YqWewffi9lET6lX0aHTVDfWn3gI8KyBVEnSSLwHt6YjygKp3qxnPf4fcohhGWA/AOpRntBbubaqlhv2yHNPtA79GeGNH4pJbkqsUEygau7wbOwR0OLUxNVbfgX9uCWlUkA/cVPrlU8ttM0sh0nTQo0CZGapp6WBQ+r8xwSwVGGU4WARhHNieh9+nVR3V/KJKilCzthe+wGs64yt31KvS+JrwbAlKtUS8Xox3OcyRTdb61s7kJib2YW290BTzY9p+qBfERMbSgkObGKpdMGnRef1k+0+04CiqX+lcHfV/dE6kODQvF/RrAzgW5OQbfM0uX6EuG7c1oOc5P2E2U292o7W0oqPMJcMa6KozpWCelcTOM3GgVAu43iTjNKTS6Dm8wHlbpv4McX/rBltYmUZk6XMjtgajQAw/1h+f4Xk60CcysoYinYCs4sLcOZtVQpEF5EgGyuofO+7ihrdwaeCGacNjbwcMC02NneT8M9m9qWtYhc+3QxF5E8Fno3pbyXx9Rat2fyxZVic6i6Ds7WTaHbvvUftmnhGIHjmHRtLbOpbZ6L35qYnqORLhElH9FNI/UNqVjyBl5imJd4YzoqnO71dhd/ibJG/0A0Q+w255r6+WymkT0rovdyXoM1wrDgUTx5VXHeF+s/r3bcoR+y9wzN9LPguBkgoWwyKaWqrZV+u1SKpIbT1hZDepE4Jfkmak0pXUXTFzpZ4Yc8tTaW2XUqvkhQsBKXa0AfiILyBCG4dj6dsNtL4FkqC/XgzA54DJQazSe4OTNzB4hIYXpq/J1RlJ1fImrcrK1cT1dzk1euUh9O4eQDSPHeksFJdDf3EJCxJsJfHaGN1fSSeNpJoBQkkNF85AEK9ZRZX1jQPNxCrXX2en5jIaVTizF7lBpJMhAEoLvQnYg5sOtUmo5TfmpNGWiACvapZbvsVCiaVY9Vic88jO37usWBy4ZFtpC5kZyZsiyAldF/P/BvmkLvdHMfGbK10zGgagkiIQleCIoUxCbomlfdSvS0DBEO57CoqYaspsjnqOKEncNsecw4mEOvZJI9NUn+QnUIUlFqAA6iuRUqHG5xJYvQz3ybOL5xlQLWAaOaWCub16MTCRPa9nJplmnxbVlD0jQ0j3HW6vaFCv8FhZ8DJwq816ErBxLpZT6HgnOIiye9pSslnjYmwauYUt9k4dLgVKJ8jDO/Hc1pMe1mhpVLyCOgapgMhG3ufG/yvh3DXmY3YNl+ufPsffGWQPykGxjSMpbWhd4uxxwOyEg/8Nwo5p39YZ5/kyWWCO4RtgmHuX8liZF7/GaI+EjYoN8JcF2XJ29bogznvd59hDiFly8xIeADTnCNGdj0ruLJpenCWyGHpcA7HHDOGGPVumuPHA2W86TxUakfukCblbQJsR9t8Wng0f+A1O75UjxN+FJ6w+QgtGAwNs+saW7Jzcpv+vrHRcsXEEGP6d0J2gQaKH6OhDpe7AQzlrTRLLY6vxK8KAWGmD/EC6KXwrhwC9K89joieRdLWn7lZMG1nnhA3mYc/xKty8jw+svMl11MvGPhWzOIetAnjuvhM499N+6qqb2QBAUkTn9ngYhQQ8r8mKwrkEAoyyyy87UXpzJjVIPUdzXd3ITCPJ9u8sTVj8/p3aAyMhEW/ylSW9GkNDGLsROCiNOqoR50hEgqkim9xcuyfcCEJLjMfFEuBBBpk7mmHEuGmofYpZ8WRETM5y/9dl3USv7JX5X5gW/3INi+bdQymcYkMVCuHe7C0TyM0u5OrdEx/3B1xpq3Uy550hTbl0ywrr9FeCNYSRyLzfqGjA5JfBhwtCS2zNZymKfTDzPrKOFNZDBSUz4mjX6UHXNVz+xR+J0L6CXgTZSb0pqCC/dWwb0QR+IN+IBNWB5N0L/rKg6SSrIGmsjR7LJ3Ssurk/PYCJj6SFcgDfbmaEmKwkHLOpENUClwiZMK7lQvXY7l6jg5aM5XhGApYfteadPxU1ntrkiBgSKVZMBjN0+ujUR+/YVta9lQgH6KO2oXiDDon5Lxc4r20fSZMpVa1zBDNRi51ffnFLHbupV//xcHTf9kDxKwj7UC49tOPWGJPx4KlDgMtWnHjlZoy/RLTeMYzy/B2JrTX0NoZSd2hzqFAYsg1QWWCpDhAZ4QxWKRquGKEWeo/MPgnBp7RlHVmY9pbSgd6PSGz9ViuvG6+wRa5CRYBXGAUj1Tp28pkI9uAxffk3MUTbLxMoSJN1yB5tVnRFpW7vMU89ASLU5IbUiUcs8M8Ml8eZLnPtMjI4RYmYZiX7Wn7HfXczh1uFskm7YNjc8Q1pdLLkhI8cIZsRvSUKDxUo0xbx7h9pLFUoJAjcwlBYi4Pq6eXofS8NlKmKnCj6M0nKUhIANK91EhQgI5JiEXmqIxh7ohCcXB/xju96DHGkWrbDwuQ/Vxo4/xYoBhV74SVZ1AanVELBHbG7dFh40FHbxboAQ/paNloKRXw2uEaAhJbKEZUMK4ton4kfd1jVMYGbIDsFmKVaCep3r3eIWuxb0mgprmQVMOW8XNuyA8BNilHJLccNvCrkhpeRSkut055iHrhTJEwEs1nwmDo8+Nx0oE+mTBPGiRnRRbk8j4vIA3TXk4qrzA873ph0twnNTQNakY5mhEVEnHGbOqmfojFoIHFMtp8yLQ8NTKcy03VEN6sXyhXuM9lLLLI3kzIIFjfScvQnSzWj9/rdPxfv6gzmnQSjRI4+qbpbxNwsYR0QSDQYsyb1JueKy0ADAPdDnLYd1o1Vp0kTaFXQAgTXwF12yav0pF3ANd4aQB/mJ4OEYgLCVbd/D3ZZOo9SNtNCAkx2w1VMbB/OOnYsFblZyA5Kjgr4yKHMXZKUf8kmf3A+Yx4lDD8t9lgbhxmAVglolQdO1OZWjLBVbJ7jTHTUichEa75HyaYtc42jBVbY3pIn5jLO10DXj2QBpEbd+WCV3FVknLUiIELeQFWXhAbM0uT/k+dkzm/wDI+kNqVVOT02wwTOITFxKMcT006znV8GeM5b6wZBuprWWBorCH0EOzxGX7GQs7843IFm2J2zjfNeVh6HJVNofc9M7By4LQpgqWRPOvwhyvChomeJfX5NOuDjVBcUdSCp30RUUMhN6Ty5VFihbA3SUug0fT5d6s6MWK26r1UXxytOKTWj147qyM29SfOmG4KCXyUugE1NGwKI4KboOfERGNnSRy245Du/8clSU0olmo21aOsKZ87/Y/+c1P4xnt9MePIJHeAdMMOnXd6sROQWfjrdOMitOW7LvLc+XX5p9T5XBoCCZ9fZyhVTpu+nfZjJMlykcCbwcz7X7fIi/iw+N8IYzN2oQqotWWzNfXcZrVXWJZE9WOcjsKvaoQxX5p7YcKxtjUT5Wvru+JdzrXmPXejip8Swk/T5gKDdH0M2Rubvy0vCXQK/49X28Q/JLvhll+ADsPSsQeW0uWjcGQqsewyMpYnuJCilJAm/crHcusRJku+jMCSwqyBGBOZ/PABi8GAelET+Ui0n/iw4i1vYak74yH75yUFQcWr/90aU+Kb1frcz8gZcF1eRHpiddvP0L9d5Z0snAUWLdw2rDjOeD0s80lk7XzFnVxn6PHucIpqjaA7RkhwqqLQ5Xj4ZYLGc4KXfDSl9YWQDvNoJWXw1KeMRVllryubRmGjpuGJngqM3tf/Tyns7hQZdJB02Vf5Bbm4j0usPuReZvk1p42lHeGCTIRlUZpDWO1jpDoiQEkmx91OeW4+x3kyV70y5aM15ZjuE/EndrVvgfkL/w/mPeSbUCptRznAhQtUUEkXho123MncrjP68I5iqzI1jBCf5fcgWbQZHJKJft5CMCBZBlSEd75IYxnKFDoGYovkkKdYGCBesuf6D96XIEwvq1eGpc1TVE0/ijxP7SeIVzhSIGUqu+madoJIwAJ2artD3GaD7F8hf9c5q8YcYZDGx9ipF2rSEq6Y9mmWXFTlFmxqP2OLfnNhvGcAYIP99Y9pUTcyJyq4ouOujEmKhYXt6Jq4ZQQFOfye8aiSQHH02O2DIjusCdSDmn3RVQUE6wOx2QhWR+nrqn9wcQRmlys6aKA+/9pT1SitBTWVDNRcQtI13VPRcoeV2IeXXXRfEfN7Ek/GOEXnP21Uw23MXD9fi2T5ruytRyh4eQsUxONu1W4vErvrtrDYAtDW8iFlN0lUfYSuNuvi7FKlpeNGkeM0i8ZkA4HNxTTiYDqOLAahhLa8u1Y9I12P+f60XYhiiVApRp43/9jQ7AeqcAwYGcLypPLpf29q6J4uDED8r7WboNH18kdTfbzkCkyh+R4Sukj4ooy6yGK7FmrH75ssBR8I3sx1deJWRt/OncJaf8pi+yAeuEut0UCzUy6afP3jfze3mBC023t054R64nxKVXMuKwMTQ3ewdWPgmEORXqfESUXVprrE+JL9fPu+R2PEjkA/fDl4R8b6zzYsxweNgA8fwrDi/4a3BB+6RqBZAX3C31rXZt6pLDJ4N825nH7uB6UBPdt4O8plHXjz+7YbGkIHpZR4Qf/EGvLUPcTtyL62RrpvDZLJlfieYrL3niLVS91TX+6lvtTyZGfI7H3hkB6PsjWMxFapi65qqc2LUnCzcvXRB9xce5tznjdda3HWLp8lArnZnqiwmJxcEWK+jwv0seKqdBYzoeW/bc39oKBL2upw16/y3DR4YjNSwk92DPSV1rj5cDLr4QoWe4mNUtHmnVuqp8/IpNvF5XnNCHaEfwG8A79rg2RMvxiats02yV/tKmaLEHrXLpW8ZqSPe7KKMCMNRaGJejKIDDnc9ad5ifD767G3MdWAPBW8qoiOwgt5TbRUKBxf1HUq1mzGKsEu2MM4ewZb836oENrhz3FyQXBoc2qsKox8DD0pxWUdxtDy9AUwtMDL0RX4mvuCVS/WcTBbzcqqwZ+29VWvfhdoUqWYJRISFCtIHoZWDJs1ka5yvvAUBbDN0uUrJGTvioVBqn1UZLCHPJkYtFLPVIHSYqp488j9D/ISZCS4Q3n5UzZay6KsJ62/gr5X8Hpw0JAXwylrVdTeo3FPRgtykgZZnpb24iLJDgvLaCPLaxWupOxujOHm6xPJXb/Xok4jyfm/NZzA+Erp+qWV9EFgdIgNTZuKCjUGzPg5CJfVkol6cJDhSm4AHbvUdVkdFg1VnV5BwNTfcSadBqePLfUTqth8JQFkhY6yT8tzFhMMvyBVFwlbiWA2yWmfN9BjxXLpSFd8K86LwTGQ2wrTQmcP4sDfgps9dsQQxyzJOYY7RetInUf113sdrKifPLclRDfoctJQZO0fAZmI0NmVmRB2XOFJSZEC8DL/FmtzHxWv+5ujHp0eVZ/ljFdphnLD9jCYAsV6H5d2yXUwhl6A9C8aEfFh2fL/d+10CdBYCAISSfYhsAkuNFhrpgzvrKE+FCVTrVWRTdvjGhxgyFxnRYMnw4KjOPbTNXIBfyhchXTUGLjsGmcT2cwUHwcTcrVDvXIKxnhDURPu8Kg/yq5wlxdpc85AGkQXrjk4Ddz3bZddmCccMrBoRo7svrnjbKHvRsK3dDT8mI3CLBl/xvc1VqNALPalEM7hmZbHEwLP3F1zJmHwZJXuwV+7qussHi1qLG5vxTh0CtydHuiMGi8HrWN+NaYje3FZT8YR1nCJW/PP2H0LkvLvof7jyMdRYqPSNBjuXnFfDoebeDQe/cdrGbcVWdqEwm+Cvt75/0Nwy4R08XfxERCi1/4rE+dLgfH33Io8YHB5J1rWVXfvEwLXsQrB2nMLiebG5+7ucurfFhGU+HjNQmtRauz6Wa33ljmET7im5UrExlmVLn5FItOS6kmpbbd0Y7xVQqj6xdDSX7gDV910Euqv4gVx/Y4p3YcIIN1HvCfm2XcxLxeKNvt45AsKVF6RLWHOyg7+mmUsjUmeIpxqrHgNpoPnVvlaHpyVSi8Tdv3V6+45JfcjrTjqCP/CrrA1wd1wA5XEbW9pIQTkwJ2P1iRtrXNQr0naPva3m2e9MtjW8zftye2E+mdq95uUMP8rkxd8JCeEUsV4BjNfTW0hTkDm58NQWwnRn5SISpA+8fL+bVqcXZo2hHPlGODJFCgXdhEQrQ/JYNB61/84WSaj9v22b2WO0o+Zp1NuyjGmFhRIqO2myrEuGKPfI9ZXD2yIW5Co7YeXavrrqZMtohDR23K0MPXSKhfZ6qLcQj3nrRmyUKvifHq1Vu+4Fr5NYXMwG28PsvU0JrjlL4Mufd61JPAuD9OVB0skysHjGxMlgJfiKOr7AacD9W5kSkSH5pfIr6/MSWoet0V5oAF4n2Z7k1iGSvljPJLrOWabUlyrBJfhdIsm6aTRP7ua5xJJKSRqgTI43hOr7Pfjv4tIiYE7U9qIP7o3a+nJhFr8xDQzdy+t9X5gru2GFbWgoF9BM3dnaE7PHXcUPpLcieOMU+oOmFlLnlvzW7vCfy59oaTBq2L7l6coQOofQp7d+6/RXZj0QzCiAaoVeVuz5GUue3hnvSPanZ3wcaQRBz7Rv2I1TLV4JyehXyVHFh0S9aQy3/WPzEnZxvmf3Pj6onLrnD5n/yftjBgn+irAIT1cZ517pyqZG5k5JW330iri39FaCyLgLgaAjuZpglaOB7L/R+h7zrYkz9FQITsEv8wK9NK02oHfZbE1urlplIwU+7Bi+FDZ2egmjwjsMgNUAIPUOqy1HHj3NJ/YernWCwydTbcXQPukAY1LixTWpZ6csuPLj4vj3GSjysuK4t1EIoCscEA9n9sbJzQxeq+mGKrONKCu3pOSkeT+ixM7vmLcGBZA62eWtOLQYSikyiqRJquI+tkXG7xwOmRH7AsC1wem4+pzjqFh7xo6i+HbX9C7LVkI/BbMo/w3fgjkUnbHiec9oL6OeHuDlxZCVOMZNc7A8mRxUg/+cXjLvEsy0mTJf6w3xHERTU/A/vswkvBNR2CoW+OUkxwyKQeEwG1a2DcYugSEQrNaPTLJ6R2awoSA6FfN8w970AUA16q8fdzejifjayjylxN1GMfoqCoW0o+KDizYE+gUAxkgDYSojKky8gyKT5Qvg9lb3mKr6WZvoVaI3qcSejhWZ02UqwRRJ4eMev5+4vvOUCPjosS3ZQLNtUoDZ9kwln82C2GjN2pI/1nW0Iw+wjKo+oRtQHQbfXfLLBADKqAgmvT/vQ7QmfaKajr/zigsWWCVHMVKy11W+VGr6U33r04PFJKZQRq1HcQo2fOnNwMvK8yndIRALWr01OkJzcNbsYUjior9To02WgtjKJAllC97PtZ7Fey1hKIx2vMfbueMsL477CZW5sK1URW9kRtV10/QMO67HBPX2zmrqpEcsZ5xa8HOVqzknQXJRydqL5r2rf+KM+hieuSBxuNmoNdNhqexM+N+nq8OO/zPUaOwTZ5DW48rck63ZDBCTgGmqBCHk/zVJaYvaZuRGts54SFeSd9pJiD+BAu2UJX9DDHYTMplNLnVd3UvoSbA7LKUdOQU58eyYQu7Fl6Bp+WdWEo5KcSdMAMxcn1n/LQ7OsiDv4Tg598GfTlugrmEGlAThLJmxAeqQPVyyj5QTMv/RdYw8EbSMo7YxTbF0jb9XH5KaYrUT6ChtT6w+iHm6t3gKcFAs7s4HbhUAvcoyqZNcDjCX3lFaGsvFxQYcstxAajWK69sO1HasQbsWWsLNlVPC6KKT3i9mM4OVQ5ZpXT7IggI9FjFplCh4vMS2LRg1Wn/DTl0PHQQ1yqqI6dIefGltLhhxeEFqe3TEWqYIopubSUGg1vq9YcZx/H0f1A4i6cqpIRfSalAK18lMUCjbrDvh/eXQUgHhkgNe79J08sIdLClHId8XPjZD/VdqweEPrd8oqg7tkddIQ9PL7zL6UJ9IHD584vGcfCYMGHvOzJu1m55f0x1B/METqCvsHBs/O/kExOAX3DpL0hXBo4ao2ASn5DmmyRCuVGMPPAcdLtJWpu792EeN2jq6OJPy+H51QJf81wDDr0PCPSxnljnj6Wy55MPdw1gKsQ5KETer870sWHmcPpIEfaBe5H+w8klfSQQpbfcDUNl24soyndYiZYEC0+XSVbo4Lh+ABzZsHeR5zn7qQ3jDfZFBBqN3pL3+xYOWp1dCyBH2PHt1sA36VJuoL/hkYKFnjhnTv0ecir+xk+jSzX6DKKVcqOMY7Ukgv465f5g/ODe8YdOWcinjQPI2BLFMCnRP5liTdoPlY89nyHtV/0Bxce/NXBzuPz3e2EK5L2f4xxkflJkbs7cLs3Klbs/LldFbLPyeg3cfDM5yhJHp9sNvUR1YTZR2KhREWN60IPtD4krbwpuAuSbLpfZItFf+ngtdk74aGAugfxyOn+GnmaumvgL+MavBIpfbYGQBnNyFWyTWQ8tU6zKSgQzq5bP3wmqo2adzwZmLb0AmHC2Hzrrl+daDl1l59BHNbICQFo+BeUCVkbYNq84cwbdfTvKOL+9aN21njaE2zF8ayjoFQVGyaxvFbuuGQQrgPb4mFOdelR7N7qHBdgR5u12uxrzL2kQ7IuMmOJc/e8coduz2Zbs10SAuKH/ZwzQtdvz+obBxoKfl8+LkGpRlrg3/kENJJqvH2quxZ5LkC2q6h0jgdyDMM2KqAUvvt4dN9kOlMQoEGOWwx0mI9kN/mfD+pcBNE2VPc7z25cgL0iu8CaRWS2D2rjiZmtxiasGtl/Gnt1+G/6SopXREa1/ATmTUMUFLB4LhJ19ylTIdXBhxZpWEV7jTtLHI7CM7+ETMG4qw55FNJRnXurg2NxYVL1mxUARJB2zhlyxQh6CTKeOpuY1ZEUR1R+9wMdEXZ0f95QOP9vdd5doREksJ82MMGZI1QZscF8BHPjbAFVdPp8PfacEC8i6+qFCkgUKZMY2QzzomMu2ysTRD6hfQqS70mX7ugPARsHF76QW3GI/x8gPg2pT/VOT7XWn6DvZLKmj+i59m0jn0R4ApinNZzdC3Fxo0OeMbW4MdEwKcZjaTThEn91rFjYVYgRMNWrTCGKNCrYi14Fop2AmNyZMqOyj3fg0fDu+DkpxI9xCpOv9fRtZPTBxCvXBdfzyKL1cr+8G4xcm9omb+AJtKx1WivZruS4DVuO+oFUhMWnIqjy4FXr52gWfH0SVW+h+bG5nEBBqDW4WKSUeEYYZvkDoQI3B6dJeaijjjDRPQ9b170SHiXW30kZK7GckRSkHy+0wXznvCyBauLSsW3NLi9RrX1KhPUKUpnHE1zPBncb42s7MzULbfZR2kNHTL3Dwq3VOrxjwVQ+l6v38ucGkNOOT66XhWa4qknPhRqMsY63WMjrX0oq9WJWFy5SeFO29e4F5l2G8ji3VL/jO/9jW4D7BkS+kSkJyEddhOpfma5zbdkTI9Xe4da4npd/JVPeuOe9lHzcvuEdT5qNHI6ZnfRmDX+S/maVWpZanNGikD/VoFzumqDRYqxQ1tLalKTvhknoOU4wTK98P5w8mFF9sIzES20LGcnYQRH2lcJbpzHHkYyTEPZ6vQjMyhyH4NeaAORzodJEyBGMKETZxWzaYbTxMoFHIBCnlksyFkgbfI60tjtnetGssJAiCEAX/ZpwVF8Qgf6M34cHwKa4EYGxd+Ik7QmkQuy1wudEs21o5ApoxdpmRUCnwDYu8pNifA0LoWJ9zMEYTsSBAt43YQm8dOVCsk77pAR7jByVbVaoKsQfyilr2KhHDSoi/ZEIrEyD09eFiwxECc1bxJMvyGixuwixk47HlS+wzfNmBp5PekPsWZimQtsUTuDfGc/wyKw8620H5/W9K6zHQmEMqwE8DC/z1i8COrfC3kr1AILXuxs9lfRkjbP6L8fM0EinMn9l7hv0zMe4PbU+mpZhpgESVQslqfh6515sc0BE08XqKJPy2Xsc2emEtCD773rl8IXkZmPrIlY8bgFjysq1vv9KFQFvkUWRgEsSs5PCu0lEfoGYMLcrSHu2+BtNvrd6bjRVonMDIYzUMXNOtfb7LEc0ZNOY+UcBByPcBYX0vch9HWtB1gSc3oB3Hav48Nlcd6fZAkMXV5aZwuYl0xDKxIa/vsK39E/NC1rteL/ElzP2h3ie2vjQlWZlPbRdEg/9tV7E5Pt9yX8ujhsIO2RjoL5Hx8QzpN4pGWs68qC0GUhhIkALzC9K7rMkr4zqXP9BtotcTsX36zkV6STlmMCw1y8NbK9kS0cIXr6DDECSdE1pE8IjHmLq1URz5lfxXERz8sK0sxj8IDE2piRdw2QUYhRKbrlHLOoS3fLmQaVHlPYxx6PiCZA0cX0JkwBeg10jb4W5Uo4g9itDbVjcf+7ukJmowz34gYk0K3n0vbb6jh5twmUitmeeTIW3sxF6rbKjq5kUTz5ZDHpyw6s3wJpklrbBVDO95fWIVYdbYTm0EnPeu7VZrkbKNd+5lNIaQ+lhvJwLBugH2WBJ65vWtm0N3n6pfURKtOk68ifJVBOvhwFqXcHF5bwnGx/yo0AJR/33/aaDcss0gpYTTk12wBKOl3WeUd76tRwRRPDlz++Ir5sNnARnCRrWBjKTLusSt7/HL6W4kI6lGhRcK1jLkOQyUGe9VxUxYpVGSX9BMY2Rr+Me0GriMqqUylmLTNebcWUgIaYrlBjGkNoRBXRd26NLWPba986QXhqrVcky4OrmHqoCN832XgJv+oRSjG7lv+xp4hMaSp1/IhiH+yNBozPimpTyT0bpqoNsl23/LSmym6H49h39G3L2yahP7n0ivt8i7OzBxawOcWifqUfYWcdn3RGMWY0yk/rcAtXPQfX0Eely5n+k4Ad2pbXaDJWnlCSBFpir1UKxWdamYlv41GtSeAtBO+tdfK1M9KiXqDYZ+VuXStRhmPx5tuN0A6CbYdBXr3jn/vWmEVOUON+sSXIUeh1vbYL3ZT06VbCgktd4+VL2FEWX8FxhfEsfjJF98zxa5oFhG7EAy9aud2ZlE4mNosW8RR2r8GjoYVqqvvH9LAybpBwhtBCEtkL1Jwj4K4plJ8nHGrmv35WeTQMN+5rla5o4kAEZCyth/cAi8V2Y9Y2JYjUU3gmuymGeqAgRN0o2C01B0OXx9QRneJO04mU3ltL59hR0O0zhxqyH+6HgozbqxpdkYDP2QqmTcgqsVCAlIr6+L7Lvy0Edumat4w/N9bd3N/09SrcXLj5cXJN0TkObiUzwC2pbFNDW6iRRVqdFwfolUZ/Ntj55dv2WzUyNCdjA483CMtKs0SE6vx2wHEOKfuQ6kvhAASQ9KFjq0gLw7X+dWKFQxfRR/ryRBxiRbkG5gtcnRzgDQtl0doRF8qNo5GKqW2vapQLZddhfqPqDBATJRpz5H6tolssTJn3H/Pu1XGHcRPdEnIJY+g6V3vJfJoEdao3YjvoKx1JmXcIZoEd+D3gjQ2FL3yV81yr0C052k8dkMOVZ9QuEr8cYMJnXJfBH8iReXdZaFXsDDUVglRCXFMym5VVDLB6S9GH04eLxl8LjxZdfGMJ92g/J3DZkZzjDZKtN+IQRN2qmSrYKvUt048/tfSsjGfXgsw8LcQxjK3cHplPLGOLiMrqE49oLI158ookXm/UhwsUjiFVASUDoORJgZu0sneau9gb7mbmxP9lOKiZvFLEIUvn3kinXn2k9LHVgj6pbFyKbmBmfKFEbfXT00QpoXo61prDqI+TAnaR3B75bu9Kw8s+zD87CBlcF76OtYpo1Nf5dwS3W2P1C+0tiphCgSGpiaRMQYzy79JX/Y9Jv8nHB4KuHK70sw18M/M+TNTBXJmCF/MvfPH7NcKHJINDGi+gW0Js38g7LBCImPPJINqe2EijNH7elWNEdTc1R0jqUAUxNnFjHCChkMQOjSmDfI5fbyZVr9OymBxztE9fk5A/YRgELhxDkq6YNziYKVq/cWRhe2wfJcnGf7PxEL9rrVHbExA2xcNluD2axIjnx8MdzsJhyFSmpmt08HbYWkSkHVilbcHjkuP6vKRV8T2ILmbET9+7kgym1EtCPxOVR5kxviIprIi01bVKE+AIU6vAi+7/mVV8hYX/0EgKv47EbsTqAOL53r7KlhZPK30e6wA/1f8Z0VQC82eXLgs5QvRq1dM0rrKyHs7bTl4BevRF79Dr1PaR26uDqzY8gLAhfcqF9TybzO0WcRlx6wMjcC1zAewC2dybDzV7Q8HMCWx5cyx0GAYq2YS8gvODWZj1kZFOtlMOUF1p8QejpDZR1G/jG5pypym5zhh8XX4Jn9D+GJiHV2MlYBM/VwCChdjUCX4kCm5/SyjEXrrDUOZuD0j6ySDoFTkQlpmJ5zN/IPBABzFlyrLZlitnVA2MwcsiU2W3s8tOoxSgX+r7F/K+mq/jX32wpm15xYDyzrPopMlvAuIZManMPNU0XXfjdkR9Xx5lRAIX1wyZsNz8ljDVmXPLNxBTiOa1pv1bbIyz9pzst2Vpur654vw0+QIQqD1OZ7cIjfuPN7vRws/7xWqEM2eblOl4eG+bgr/gU155RkuH366itNYwIZWd+aXsGeWjk3Fx7SB2YtNkOMn0L4cm6EFLYCAEDZnRHQBuhqPlJuxuqr9RF2tDQN854jD0Douct19BIS3Z/esjNXOfcGt38dhccqMBrkyX6MnbbKTst8Xj8cm4994gK3s9MGUa+6Y8W8sIdd9Y61TWNIWm3HdS7va0LmSeaKD1L4c1ebF6IsW6eHuMzGD3gban5RoMh+dHvumZrHWByUnUwMNfOWJNhi5nrGrZEjQ/J1QxVhQ3ltOC0OkNmmfsxwybutQv5e10Lkjh7TSdL7NRAgEjIbNWlZbIHVNBNN0K9D9Zgo79OmG39NRT85XiH+yxiB9g0ppeVDHnUmTUzXI4J56/pH7EjYmcPbs6ljNeGCw+srSEh+XDzDxHowQQKgr1UyighhVb+jXvB0iC42OjRC8BiG7RtOBejvF1TX2DhOwFKKX1Y3/bgrbUjZypAxW/DPnFcF87V30xNX1nDDZ78VTk91PLR32s7MNtuV6aiwSNVa7jX3q6X26qiz8AmImyUI+LLyDhwBeKr/zV31DNoqDT31iYeWNV9ef05/psN+lbPJYwQcZTqXqnxnMwwbv3xgKYVrIpgdFV61UagjlZ2br1m0ZJ9jEioih8GfJ/D0cdTjwVaVhfRxU2y1+gn2fOj3LBeTtl8IzevzVDgF5CIxgbu8UZTDkuCv96iVPS7Q6mt7+2qj9zHs8NXGjeUveKnJXx6TGuV5rrc7HGNggFaUC5ATOsk9NqhMs33bSlSXOX9dC2mYFTB2I1BrQbNfR+rC34p5PJ6csm8EVBrjm18TNJonl7hEFuHg3bC0mWfTHfipi8yibbj7HtGZGMYVjEZRPk3NfG4Kdud9DjR1F4eQk1/CEr/hSKSs+xLMwJwUddJF27wZurporjdBjoiLAO9y75YulYHR/5NfodDWMQVsOyL+eNI5Koc+5tS/P9VpJKm+i2nliX64JXAek3Kajs6GhJvgitCMhw9rl95ScSh8X2vqvO1ipRlwFX23iZQ4gf64da/Bv65262eMuU52eG2t/uylDAJwts7jBXu1Z8BoL5HyS4x2BPL4zmH2izPnY30CtRn/AHV8jRRpP0mpJvBo6h7S/lYbhd0DHhwkOpAUfPYE9iO+YkkTzNNTdeXCV8MoYvg5nJHBsOKKbTRnp5gRNCxjtat4PdopyTx2pl7BSEtwJdYu3RQcsJv/jaRx2HA3+0Bl2q+YJJI2FUpYOdpSG4LXjZlz53JHwYRUPxEcxEvdMiHtLpnc+vTQHzNivAM5heI/nxOLz6IMg1QU7wtbj97SS7AfqviJ/c/dJLFeOkkECPKfgYYafzXmLt0upeTepeEl6AWp0/8ybuqWUwTVUxlsZ4fubox22i9/JmxLBwDkVeTOp98MtolnmG1xX614PTYa4mVZ3lFwmdZx5523IyvfvWbBQco4x5R/Vj3pzFx3+pbGXIw2k+P/cbNj589V28joHJUqghrzf1mD/VknLPMHago36MveuystU32B3di0pTFLF3+fzWQoCx2pQlmeRJeMK/ZjUB8AGBqX8G+Ekw2s8tT1PSRUj2mRgbwxACMsAdwbGN4rYUj13WT9ftH1nHqOcTN+YLvbmVZI6aMHm5erB3i1zHH58d4O/6aiOlPU/TdZU+0sB8+q9wYYNngE8pAoqaxfgpxMLIej/cT281jo9W2W+wnKOSz2Hlkm9M1hGSrrO51z6Nrg4v+jy9oE1x6KYDnStfyfgQz5pWnwR5l7HFS4cuZJJe/0LVIg4UdtkvtKnRhlieUbl8xeXFRpZiP+DM+sk4QfzohiRvEXjKUpC5cT+OWkQbiPmY8RI1WtGh7Ib1SEk16NR97USKRCmlwRGqGVk4EXUW1TfZIvVEZpnDeGXRmXAZwcjv97siOP4yo2wzm6FuxiozYDey57OOJo+LP97szzri9Z+vbnxD4G3mjC4GpqeDOWyYrCwCUW8hwc7D009+j5v2GpPGn8S+hR6j/dN+XwK0JGXI2kergDw2AIORMDA9zBMTmlT+wZ1UcKdSlGIzjrbcwEdB7x46BGOmH9z2N++m/XdkbGWhUKlEQH0kTx8JJz/a5jA29Yf2pKIykODUPDzE+EEbNGd6+KNwl3pyq5cXTae4upw9CYc33BrEcU+4aEks5VtJ0lBBA7+e5D37GxwhVDzRybizpanpUb2x7KCp5JxDJvsJ6yDgeOd9w9UTv7ZrvJoFu0N2P7UHofTAocB5RZJu41p675+IizKvhx7U1+ZPvvvkIKvEV0FkrsCtKfrikFdg7X+rJaiE7b7epioRgxfmcyCrKg7+QrLItTrrDo2S7mJJEVTtelJEPYBrReBW+RvTfXAvXeTZipcsn62SRRHM+kMsw1hEnKUvCrgKQIczUOjc27PfLsTxjcUM5EKcsc4dbviIc9vs+YI5WM27XHkFY86WainGPBpbk29ghGe+/oFSF6MEY5WMyEzkF1bRoTrLPGpZrsq0fB509Dxc/xP8BJUH6detN95aAQcIxwEoZNdrFcSWVfIi5GGSSn9DtvWz3VVFiUAPVX1MSrsiQpL+yiYkEfTE01MbOGotRUHnaLaC6qvp1Mpm78LjRfNd27VkxV9qR1vGSHfvDSTTNPTHNojygOY9WTQBHlFzeLVdB0gpwLs0SGr0E5Zmsmfj0uqGU5OLK062ObRGR9jqscDcwlvLEQTQ9kKA8RnINNroQFD1m/Ckqhej9qw5OId9F9AYsjdXYwOY2PWKka/99i9aBPVVYts6iLsj8dQeRP5qcpWFaxXSvd2ADkr0UGFLsO0Ii9mk+dCj3tLhEbvY3jzS8zk+/ZiJ5akr0NQlU0yPZkuAe9vmaISFGvVhrMNftR2Rp3+uDBGjduC1q78bW0e9UfxiI8MTpYgenpHtRl9pELH6Zqp3LCBh6CoariilrRnSncQewT3lX0kixC2e43wvUyaP4sHjWeGKCSzLJ6X/xGn920Oox18yE654DSD9uLUhAImiOBeSqijJAxAgB6QtYFwjTlBWXUPoqmur67zhGJfmOozrX/XVzoipmdtEC9O1uQDgEDQggEO6JijxWYr64zrWNrWUFPpUyuHE8JHZLKbA/HyTgZ9M1tosKpPs4gv8ix81OdTWhBDdbYFEntDwJFfsqmKCSygwbiH3DvUeboV9mzu8xX7PkvNoZlLBVZTKrttmU3B1uiQ9Wun2s+QMeD5zNGLVdPd5zDeTJ5DzFZnD9CJ3UzbFIR088cgx8AwoALu8vPtLFcZ8NV6N5ZKKDYJhHG2Ux842+m7W6gMjtC9nupl84GNvnyYGYSstmX6GnHbr5TcjLt7k0iTRyBQEl26Daw66NfUa1qnbjUWT6KaEI2S9kpnvuPC/0iaLjY2jcSrA1uF55Z1ZMjrDO4tpLv8vTz6XteZjRS9KmxJ27itAL8fNoGRvb47AcvprWFy2YdNsOuYwyE9WnaHrxCsoVQhPaBcZBpzb/giu+7QGAs/AuI/LUicfur1dDUePPStrSoOrlUEqtj3W8BvZd3AgobM9wwVScpWD+vPWYhX+11Kb8ma4YCpN25Isf4kxhiVLaSjMYPb9qDx/s1YmOI22MsKeVZ6Octq7xLWpZj0x8l+ew0TOxwvnivs97/EAGUJNfQS+ETU6kNU2L3UDpdCCOBBXgg2Fr/kzMFzO+Anl9/UFRDsorrsxqKBPQdtXeY5JBnyLiaAzEJMJbU6FwGIGFnREmDP1eX2jwxu7PKJImpQ1audQBNuO5xdbXn+LCWq1IuxR/+sNkErELA7j9/CJXeQ8dIcEUO/VUL/S8gXx7gKJpBTgeQSqo0hbq3MVsW1TXkG1bX/pF97wpzJ0kS+bmHJaiQp6rC86KCikdmuiOD7FSYu5GOKJubf8Uym4JL+D+cAIF7nZO58naCET/XjvNOFGVvOUR6ZfUon9ZS73t5ODYlTdMFtdZEC6gzRRdE78Q6WXaBBKM91h8LznU6KKgZOasknGSEsAvf1iS/X0g1gWNrwO2mmE2gFCtpp/VvqbmVu1suXRGU0QxJ7zyZVmCW26r1cMWxY7IrHK9TeYvY89zMbcXTW3UlAmj9dE0OW+n08o2IOu9J6f3aqHvPsDzRJhHzGOXWTKDY9jpKzNT7xhxC87hSb72sIOk4leDE22cITAIL0iL2xCPCZFX3n+BHL+dz1ZxdzAt7Rdo/DkbgiLbVs8Zxbs9StJQyB1Pn9dp8hOkTlWxm6q9FPvfJKaNOsluEHgSn6KrxDnslRerFcdXTsBgpHZTN2wjpHo036MpEQdmD87wksPxuPj7uJGUJ3StYSNRMEtDi8IHNJxiTnpiRoFuJXywg6YmFkel13H8g/U1AKeFa0hWxOPXaZ/9Y0A7raiGRY7vuqeihUNFfl0v8+180m/7oKOn3eRfmduYpVyi/qdRBJg28cdiZPkdS2BdmEIxAkFYGVuYiQBap9ysfcgrlmAkE5GW89T2twHs3vUv9c5o/0y952BfyCkhJxDKy+zgMp23zPy+PMrjiEge8Q1FrkAnmghE+hRvP4YJmWn4jt+w1GbrIVC3EaLGhxY9UUXHyzZeP/PNGsc5tXpazZRiWV3ChWHqTJwjE6nlAay3NDRDnOqd9gdUEkbAg0DKhMeLKmAIhV3p73qvKjqXiTtUAdZATJD8sMx2n7LMLf6XW7UYxYp8dBO0oAas9wSIUnR0BgZjwmeqkWaCB4gaXFLBdL/lj5ZM2CwckoqEJ8sTpFUSVA2VokbILxMm0UqsIiS3J6a3XC58wRj5geawm/Jkt4Q9zOebJTLvalb2I4V45HqmVg+kq1XFN9m0IyLY5yUu4mSn0aRQW+6wa2yx+Zr5i7Ua0oT5vQGCl84+qqGjaBenY1HS6/Q8kFZgc0Bz5HsVEc3VGFn0T37dpNXSfhX4291D8ggcqZGChBdaDBeoxp0jLQ6lpxeZIcZliqzVbYsCUh130gf/ODnRlbrClVJoQMzIjqP7JybAuPWOuAMJ5uiVc6zKCty8XfUmnC2IMRBl3ztF86pdFZm6HaxC4M21kUtv45MDp7LXL9vG2FegEFPksIrvJ2wuRqLmATV1Mge8WDcCkE/9Z9v/agkzkK2A0kKDswlXjP7TmbpRwGKIFcJ70UD2m+y80ArbcSrwCchrcx5WqARME6PboKJfIpa9GchOdYbLmZz0gTduPmAJzf1aRluEQStszarAM+u3ugWnAmsUkdvvUcgGecWgrj5A4Ot9lYubjv3jEsDAN/PoyosUzroqb+OOu2ZQzc9oDs/eYCtaujWcdUxK54/rABgwpLANvf8nvo1SQ4TdhggpoaBLPOzXCZDItsg1JD0Zdur7sDRfybJvEFZQTkVl+KwIfm2Np8rL8GL3kzzL4+7D60YQV2gg9cK2vIChd1G3+H0vMviEFAl76oJswAdzKso1fY3VWrRpC8I1uv3AR4cAhLeE1qF0LK3QzV8OyDYA+Fc0tJLtHtQfonM0qgc2tS3vh+HoL5MzpITb0enJXJu/k2HqhfIo9J9d/jOy0w0YAQMKXCqQ4clrxDZQnF/l1isfHSOqvV4BsRULjfdIqPIN4ROe6YObXzGbI6DS6UneR3K9sOqHrZ3mUT+SQhE7Z7PPXmCdzf8wJC1HYcF0RV4ORIQ8R81CJ22FmNsnVvEiB0CIQ2pEZyVggnAh/U9fDi3QMvjJbKo6jOD1Nr75VlDEb+TdEWMuIa4IruKtWfYWNdknLq/sTVPJ829cUqyo63AX8DJGDtVf63J/xldqWgGfFsJwQt42EY40vHjwrHtykj6EsTsVI3XdDVHgH9EErPkEfjK32slgWDMuuvtt8hCXv2P0Ks8jvqGlcIQ9p9YgaNBw9fAv2vI+4PpNdUfH2NoXt8SiJ3k0goB0Ct2zSlJWgfA/r2IkRWuaeBRWZycheozbirGEBYEdf/85qlMm0n9KxXcXjiZV3Tifj4VAQv0Wsy/NJJS9hxfznbGTUBzpvsK6BiXEDtNglsg7gFpq3Nl+QVVayWcTm8Boq1kTpgfKC2XxQP0Hi7e6JzgguXMJi/Kj0zAu98YUAnf5xSwFxcWt9G4nq6b1TdM5QSFsZgyUIhKeGvWL+PTQcayMrYEgUBYqmtJykJHsVT5cxopH2OdHC+hOicjoarAbLWrHrYqwzhn4zD2Z5L9sufqnXh+2meGxFiFJA8dY37ceI/5vyL1cpHtaY7sg6Oowx11MUg/3sAt1OGNV38XlwRZTyROXqDqd/S+CG7PjvwyVtlDcYS61OoLtbDR2YZJcevmjssTSKp1+rXTlNWEbVdtonZ+a+j9YgUlK18/Zhyufqoe5BOPfs8wrvnstAjh6lxBJX1G8kOe3dMr5YvcND/DbJVUusbOI3Ql+tblgg/dG6gXv4NHEu/Hu1BhDJXQcVWdhb9i73E38Pr3BTwlarUo0NhhYY2lV9zXAlHeFDkA8Vn2HG4fBJOeCcY411W2gIAXNQglpT6q/gD8jEeVwbq4SYVDhjJQ4uk2UymoPpMRh8/W0G8jilbhxh7Xz/WfVz1Ss2rnlYgdqZpLRyCFuQT7yxhwY/GBaAfcGxxcS3VTnebApCITR/3cS6r1KF6UHWuOv4FHlv06K5xYzSlRShq7yy+8FaM00pFXXBmLPSNQM3oVcKB0XTIxrgd3pRaNr3ldQ+jUEZc15tZ3Wk+j7n8TWWJQ+EMhOV4ziJlr+UasP/eEzjkzE8jMYtmm8ueuoFK46JbNpwUnUujhHpHH0wUdxDBtHpa5NQ3I88yp2MsJfR29PTt0OXtmsPNfPMWaBWWEzf9i62jNcQFD5EKmF+NEDf3nzniSOgme1Y9yU7KPVqNNjqBh5VSato0vv41V8M+zdNdhDJr2lv5R0bp6HgHIph4xQhcrmEzDDek1MeROXC8F8ld5LSRoGmUnQtolpKL2khswDD67K3/G2xYb+NIZYWyahkwRFUt0bqIgZHlW25ql9Uq0842OIESFXRo6D1r0eFD/cmY6/LVT4QLiTRPb/MF21iRbVWG3zS6jWrXP29eWHz8uDEtODcowZ/vbxeE1tyjTFy1F3FS+YxRFOZDHLdEMj0n4cR8CKQgl0UFiUvawIMe+moxP+yUzgeGL4ccaEaAZGFuvty6/ExlHZquudRKS1u+PGehjIqYY7+2YlqWXq4S0OXs2aMr3X9jCftIItCzvdKkTpVfOFyeyD/U8ztJnqpaeKCswt0mgp5jvooxvYukrvuj3q+LlKgOaPctL3WLc0uSYvp/4lIBAsVlHeX/6Z0njiBOSWEDvZc8qeOKzNkgxWg7mxoXJH6cv5/U28AQfmdQck+u1BdLfIJCuMRApve83FPxFIgfdBfUWLSEVD9+2goracZYKKSQXrocx34mkYxM1ahoIOXCuoVYrOmbqFbBxGNkzQPsPGnPfNM30ROC+WJOszc9qk/GCscqXPb+HMbGoVDDZ2gKL3MpR3ft511MxTvue2s5sSyfX96TdVPqP8p4VGQWQc8WCZ6+4YLYGFuRwBdXA+sKh7vVxEcsUMT3aW5/01s8wt+eyxpPtkDEI2HNsWzdB8g9lb+9cS4vildHCbbJHayRfVoP131WrNT3gfBuSIJhQISHtTeVzWkl9KOHDb0WEBGaMoxQgXBSa6mhXGbxqpqEH9X9BPmILNM8bdjQ3hs7obmONgkUQ0OWlQg8SII1qeN2u+n/jbpCgDWbEa5IlFDKWfLfY/XHEYh0NCsj0pTbv/GE9I7ll21S/MK7LhkH9PbeFPIe5kzjExkhvxahcXF1EEhBo8eSCxsKMCzoXx931BoZO5oG9O8OowMRhO6tes8f1iT4bc1v4atQAyItFTSXbBbcIx8hP85OV+KdjN5pKRRAe9Qqodpo6X7aE+tXC9WXS2YtK6h/7CHOSB2q9EKy+pTpAvRu/+ytrNxGoCM5cfWhHpVtCZt5eCJJBQ0Tkui3yYvdau/Z/KOUYzRMheYVuPSOsiw1iyTDCEH+YjeMnnvQfDU/yMuByl7uK5zz+LkWRX07oeDwvap01B5ALemIz/S6mQK1HcjIsiTDDrm4j9iJC6OkkFluFpgnD2/x23HXU0cGlOi6M1hpL+RCJkqyUirW+OxKTCrMJc3x/DDhgxWhPhG1i67t5j7S/5jJkqe3mSr5PI0fAbroBBSZMBkPV7uBzwBk0Ag/vX2NY3fp2kT2d0r2DaXDFbkjS15AjMIixZFJiOJkTiYuMPnz5waQwGw7lp+9u9FCPYLuN157hFyon/I9FYxXTU5kfsJj5HlwClKi9E220aT3JmCXBLJAs4tAo71U8jRONLkRAL1JKW3rnkTeN9RzjtRtwCwnpwoTy4ldvMm9N3DA4xe5/YuAPNfhhyujHXuQU8oxu5hVBGeGMep7ouywedD8jZN8GYjbrG+gQ9m3eVWLvWvKh4Bn1vuFuqT4HZZZKEFyQvSQz6ifKQa6afwfqQyH+1Nd8Bj4oyM1HbljtOlHPvb29c1b6y2CT9RlhOHvTj+ViIrU7AeXpsIgjGVJObkcOAacVBKh2zVNEXNDs/fBmVlPL0/TKxcTqvrI/6KqBaD7tjwnGnwanQNpcU1CRcm6VzQx4toI+065G/FzYp8azTHOF+MUPejqZtaL2zGz83Cpt7KsnsQD5AGkNKqtLkdqpVV3la3d9W0FSbNmZjaoQ+Cs4zKEhCpr9s5DXhdeogkDDGVlOTbR8dNCtaJbxxS1KrhlHuANqxTMKjWsTNj0G3BHI4FyvOvmcxCaGYCkqI3R1G2ZG/5dQ1+NpiYLPrjb1FXjX+dtlbBPyG6GE2Iw32whhx1m+iPWrj5QNqMMZlXf95zpAnaqItOGhB7e8E8TEi+DKzoYYZcM1ALPbu3hMuxBRtBa8LeJMEFFipc9W7r9fHfRnFeg/D9gEKlmvCM0BCwyQ8wIxJa7DYLKScf2Xy8fF7pEN/7i+6Wp1KS3zT/qUb6x9F4vAMjKh3dnn9M+6Ut3k3J43MzGK38C84eUInch4UaVtQ++KPoH9HQ6KUkhH8jY9gClyb5g/YNy9GoGgiQwn2mrruDWKcoSV2q3MYDaukPaxI3xp9kQts7sZkrip4b0SX/2KD8fY7figSLGH8SIP6L/lwEhYWmm+9dIncPbxItCeaLBShzIZI8qFqML+oRi8i+6ZRqio74eB5p1mWxN5eLbUz+kmP0Hl0pdn9cFVyG/rBLjDTb1tuAfkrD6TWEaaH1EqkbYvpO7VGBh1IREVLrVeyw7OnTr++VMD5C9negu7eQgp2HQQVxgxurDKx7+VutpYC0K+DcEEZPZYIZeUzdgxtQ1Uiv4QwP6oOjOuE9uwD+iXgV0b446tNw3LtLXee5hQfGwf42OMnI3gv1RKKo0HlY3O57bz9CmfgFal4V8dCD9Fd6Q7UlvEheS2YVPf7a6hnNcKPENh4K9w1GV70k22JkydhQWJW4OKSEB5GkLKCZzhHBn/9e5gcLfGfRCTl/jhf2QjPWd6HyA70wL8mmM/DUzPEM26lnhYxcJmfeuyJeVdHNv+ATwAerE64Sqs2uVS+Do0HVUiSOgVJ32WFpjYI2QrxLl/rJGbm6GutVCSF/hlURHY+jt4e2OEBcFSbyrgrHMbYgvLuwT+4zSSkq00dxMtQTVRINrC9qEriq0YPOzJS5mYM+Vplidkb9pX1I8l5mRXVG7awyWQYUg2AmAWP3IJSpCBa6fMn9nlqtrt66KwK1BGWLOwsEggHXgQ2xWo9se1ldzB72RPjHIbpWo9l5k/r9HtJrBN9aS8peeSJbEHFKTvDwMGsagySuUA6ziY33RO0cgRuR3GpLjCnyvNSk1Se2hgHIXNEfeQr6P7GwwjrmxE/gCi/WS/URjzsSjLfZDQVt5BvMlURrx8zqJYBRlIJvCvYr86LqyloxZzid8aE147YUgfkQzb3oVOlJRK68GONtIy4LX/pHNRe++6NGr3I4ctwHyx7Gyy9wFOI72e/Spt+WTPVblOXVbw8VyqJFEjW2p48EVLKOCNA5mx56mkmq5U/x7HBbhjT5X5A6YJzCiv03NR9rY9DarQjJ/9MNmVnhaUiPM3qBKlAgpbNLpbONKXyJ9+f96j4KRTcCJITnc16HzEYyb139/U060yDUH6rMeSk72Vvg86AIA2QYQmQzezWqUiCiFSRdNAN9qiDq1G6AV6sC3MQEOVWIFTlKx0e6HkIrvPqzjSBnnnGVhW528qiUY8Hm2VgCivEEiArzf5uUDPTXAFH1Jak33xv6UryE0v/K8BJ0zzdIsexVxMc/iA52jP5sCdEoLqzkPoaZvi1NjUHSGlfw8k5Q21cwBxby03zaOC2CZiKzitvjVzNyRnlgns9n2PmjKQh/kBh8yFQ8eFnTzPBm9PGzB7zx5f2UVbxRyjzIPgp2ziJGXHQMfhm2kh1ZJwApcwhJBuTHkJ3KzzxluO8nMe+MQP+c+k9ycHVxpHdMpgn5IUP0HsBWpmNsItw+/1kfTuxH9YMaYzM8e2dzxNY++r3gKGoolgOiZUKJMy33L8bWazKfDCkgX+5VsgS77iqXMTSa/ybpYGJgBv1IXW29Tb99RV7Or1eV2apAGfP/sVu2K5uT5hfoJsDV/B9YQNxn3aBNw+EZ3JPklA9XdFSjUw9FoZrj+uRo41uJ5wImUNiG2mGFH2YuP8YQIchJc+ePpQKMXUchPvatyDM7Z5jB8Trlc9S9LdB/xofNOLNlKuvdTkzv0sqY/8ZYC/cGvvuSrueWNpxRid+3CfyJPFMsI5cOavrF2tSJRF8RTd/V3dmiOzEo8WVQD5tLJJQVvF7gzve/J2UsA/3nRXou4V67NWmo1TclKD1j058l1to8llOQzkPvItosdpk7P7g1Izt90p8xU3djTkkkNPddJiXBOQhjr8qQv5sIJiam5mWptC0Cz7wZmPrDHW/d9P0lm0olMDxNsO2PwThjuGvJI65gapUB2e8JNSkLQjIylEA/c1ewmmQdgertDraB0EeOf+D2xqpU1ru7hkOEBavbQgyViAKp1GWtI9Qx+ywPTve7vxi9kzxaSg/xVOWHrV+Xm/e+Ow4RHcUsyh2m45Onc4tpkqVahlVoz6kKWqxIdOvPjVbCA8dELt9odvCT7x4cIRhiNTvwx2vqT0EOcFdKxzE7tVXkyISiwi0ypahTXozC3BZsAn58oIc0I2sQSiIQi5XabH98ebrJHNhfB0UyNoK73wILzXrS+I+W13j2K/DtG5yVnuv42xxGBTLhTs0hX1jK+GQkNSSYs+fHNrlMhQou09saZHYHxWkcCLDPlskv/zg0k1JyPpgfnCd8GFTJ4LsQfxAXrnfxWZ14+lphWjaD6Fl+I7rAYX5wZBKAbn8WHSOsw1TR5rApIDupz48B8PZB6Z21S32H7DrFcR/Ys35mIcWbtAIr25p8K+N5eamryDKvCfcQABtmHpiYsgTmIiNjphUoLqCN8gPjh3kVP8mrzmodAdgzTRn5eiDKLCioRR+nlSaYxFysLcuZ80aomYz07w3So2CZ95lqEBb0H0w8SgR6OS5mzPkci4yjxWQ9yxI3vMnjXb5tflbBx1YBMaz7qucuGF2zJkpVAhaDg2oYqnCGQn4zdfXW2E/CmgNA4P9LrBk64UovyaSuiVLq7PLsvNfgzSHW518RWxMkco61vQPoWc0ySdrVwwbzc/OY+ZPWTWWkjy4AvcYjkD9o/BH07F8IcRcjTJ+9jbivI4HbtM7noxAObk8W0vH861QuERT6rdYPkCMfcbkE2qJQapeEOMsnatEqY8yBNUisu1O6KAO8FT6Xol3sNys+cvRxJ3OgxpAmcFx79wDXzQq2sqv6LyqVlB+aZ/mN01Jua/zPfjC9DagVCCF6tQy6AiYbcKaacUXSWYEQK0XaWXrScGVpoxCKO5D352ayk1wzk/Lvi9xKtjl+3rTmwqnz75kFiW8NilC3gTsFaNJe+i1ziRR16ArxJ99EtzUTS+405ofKgtWmGT4DkXy3i0FVEb7K0t+Fd/So48t+TB83BewAm1LHK1m0hg1EpvL/bw8YlCPk52YL8wjMGb7OsZquzLYPRBXeetLXaakLIp9eVnxVf4zzuVZ40B3wOWBmscI9igcyqutCzkVkKlMt/UAqWJmNPjX9Sci2pvWiIhGsc9MpA3UK8Q1o71hOZ6ZAEYfVc12/vgsDo7zaFWgXLTh4TRoPUGEgOboncJhq1CvfWklDSRlSakeomr+T2/5NnQu4Jb1SddV7wZQOFOFrSGjrrDGIHOHSlN3JdMv3/0PUQxWpRWUjpN8nuhyxxnK9/8jKwzl0Mqy/szFxfpbln1JBikV0pCHWR1wwuDEwLB1JJQ6wqFhV1pO1uRopGr8/JjV/tVs+ueDMLw/BCMnRxzqx3t2yIHrLhZhFrSV6t0+HWzGSZfzmd27vsUhGn2FmO0NDUAbBIAtkTQ9Jqay/wkkzcN3kQ9ASC68Tn4U9MD0CY1IGpMSAuut/BZlqxKhvReOFUE+noX1MN2SC4/Ypjf2OhkDyklLON+L4+yqVbJU8dhvc4Qo3c1y31buOkOqtknH4AlxFI+dorrcrjSaTowVM6QuIvM4Jrdkq+JC4Yq1aYIc4diKDqgIUGkD1TC+9Nc7JIkH6KUUeYbr4DZJGO5PHW2/C4seELdF4ztGE6Hb+IexLO0ofxKVT/LOF+W2Wo7OLHQO2Ft0+y1iMatcgY4ds3Vno487pU3opBSw3YX8hOAYJzb38pK63jMVideRgWcmnfxEfxyiv6lsrchAp1htxkgj1ArRCbtdMxKgyhKEV2aaZIDaXA9fC1tgEjbInrHtOxhi6tsFYXNzXFGkdKeT1gCbDOMqvKUJsu+XigMa0tqN1ueenQi7WepKWkRQG0pU/orqLVUL1GYIHLDsbdVeKgNcjtJTdicfF8FS5Yo5ITs6Ev1KrxBRsyoP6YPj501T7MB0rMA//KHqr9MijDqxNf4sa29PjkVXVAu7ym6I/JEa+oYNbdb3IKKdNJ/mUgOTlkWA+y/qIWvgro9FBt6JstQy/U2Kt7WZA1e0dIrKmFEIw3S7ffgbIdtoOoFRXdtQgrjbaMA4OcGleEYuBFi9Ihdz5gsPbn0hk2bXfFpAKQuSjI4j4V7+DNXuuTWZgWECWG9oerLGRmz35msKwQt/buYMwGQ4FZsKCdsdhnwCOuC3fruGDr8xrKqLCDqCbgoTsYXrPv3QTfPeNn10roCPZtXSdEAREClrFWPuYJQgWqGXW34caqMT1VMmpF51qVxSHJ/pgY2vHhVTOkx6CyMLyuUr0hrL6gN0oWyrXvZyKBIocPgnhmsWhH+V+HLZxts6s4MX0W8mhvJKZ4vdkkIzSeQ7m51iZcw9T31aCHIaOwulOwXyAepgFwTl431Row9PqgGkODBCvORhXLJS6OuK1YIEtPjjR1SDW1FZ5s4boPYVZtHQgDaiR7OAy+t7oXQ6OhX98eQMi4jJKIEHqwSmlZT7bSr7ApVdHdpLQ4LwuqJB0R17kFdy8RLVKov2nPhDaMg0lA44iaRcdzRlBNMuAz/Q25m17M3JrC3QFdopgAL/BGY4rwNoWnD0odQ2qMujgDAWbxqYB+TMO4wd3V9wIjrbHRtfPEUp9Y/PkrsBrv1w28takNRQt9k315yIVIL0Y4JfVLvHNCzNydwGlcos+RV6pVQOeOKIigPoRMNDGcDduI+cgk/i7mLqKMvg1Kxs5KhF4ZKvAT7YNIEdvqcpMKImmWEex8aB2Wb6plJneEwsyzNcZpjKeCu/7DlTJdMdpuHdMguypX9tDjMtylhDpFgJtQJM03uRWoC0+HoO2YfstfPyL9kQa0ZxMUQDGBHBP+saCQenTvq/LEprpPQiBH1Uwdkv9vyGqguoZ1LwgbuZPAFiNh2iJneqVlKmIqR1bhlhYlbenITIUa/2fq5sxONB7BKgFPAoetz4IWCDF1V3vedHUE/ZCyWnR4GY+DOZHBBLpkreQ74BCcyedFTNCZmvFfQExGjoGquqK/MQZ5JYHiPtp613K7hIqhgCw9Lluw9WapGKjpamvbK/uU6DVsU5+Q3JY4TH+Cmma9gKZ3g5YfQegff1AIZdqMAvDmijxIMcgZ/qv6e544IwjYKcdR+eQtbXWBAvqw8HB2gGElg+z/c3VcBczAwZPHn/QxvHPNUu+7LJtOUbl/qqH5ebMUn+jVTuIlS1sb/GLW8Js9Kx839ZlQsOe2H04FT4JmQSL8W1K0r5zbnZGTBu1wfW8NUE3ZjKkShzZOJh242IaHnvjvOvkYFX/GngARf9IS95YhZji2yi8NEQt3qN84c5j/EWzbTbKhlMWD1WBwJPcBjPyiasPonAzFNhFOEy0/OCasoZ+zMgGFAsROYZAH5f3yYG+MkGTY8R8TMryZF3rabM9A9BY19Cg086HR1kPSiYIJFWY4dTpqLhJ3DKzcCAL8wlqbWGqTh9AdgurLXK9LGGe9RN4av/EnSF5cyh4hCYaxuucL+sZHhOUr2tdc2MrXHhYmilBPf8bYobMzYEEYe2IH2eqenmF4Czn2zSdE5XoBn+5Lb1dAdAzQi1V17pO1w6b7Xukfst7j7DBhRzwx3ffDXS53smg1Odn2a7Mzpq+mRqRHIGioU3BXttjBt3ECOoaw8y4NhJq/T8TMTvJIFE8VzaaW7hCwIWNTWRJcDwtSijQeWwWoa3SZjBLdmTSnhyERILNJqqeCAS0k+C0jPy4SIAbtp0AI5M9bVYs7twsHz7BChKuFSUQeiWY+rbElkC6tg6+YbK7Xunu9+PQFEK1GR1KSyN7facmkIm0LgdKIxisbw04cKlyAcIgK0NWSLmVuMbHERwexjtVbBozbQrxMjpBV5tfVCr0gDFhm+tmHWnL+lIlV6Wj2wMaRipcgvBt0fzClKXRsezNLO/tXTRgXEqVqMFgXXp3Vw3hYUHJ2M8az7LnV+H5HvnluZTmn4t7frbhd3X20TmMXbooHaQuA9t42BbbglZD5prwFHGQfVIld6ZLoH+kZimXYlE+QY7BuUdz4dMmHdbuCOQz7Wowx/vPD/mDS0padjScNjHV0QQzHmKDkKzW2bT4Kjj96A+8XirnBFbCYMo1hnK0j+bZVx3ZOjtK9z0Iy1pqFoapAfQ9XqHKEId7w65pmPOHCJhrZ5nhuhw8vBZ0koAHTOqqtHpIf9pgy186uTvWSAO7iH5Sfb2qs2a1RMkJH92Yt4gQi24YvzKH6gVHMYjlD3Hhwt/A6viQYZJ8N2/sLTdgz6AWzBJUliuRgRqlZSN6YQki8l1Itz4jLVS2PO1ovNYmo2Y4a9S9UFaBMY35GAd217Mx/nvkv5sSbjhQqRtNR4kFvQj41j9s/9ZT6w7cebzpIcL1inN+sMZYous/mIpLHHPVeDDBGMYwnbWkIRHL4zxPOD9mLD4hL7GfIlNPJPDW/rzva+83okIpXN6q7RnBGkkKZGXGBFSl02u3upUpG938na2mTorDZWbmkuetT+IuYrSUgVXGLhnKp96rUVEze4NwDQCBbUmTpNQb0rPBECKRxljkgwhCScqYz2e3ggQ2quVtpg8GT9ft2j2tW53sriCGVhJGg9skKiqLYTcO9aEMW2SOn4IYfzXI5YQtbyCitEtYzcrw0LyoFiHll4IW76UBtCM5Sr3JstFdc6U+TkXOxDSeu2z6vfhKAt9+IGGKDGg99AZoS5qrFnKu8Q+bixUmv3c+1If97p2s9cyLoNoiwxeZmO3RaMQC7FlQIrD72mxxkTVx6WC5YaEmlAckJmcwa/ZJ5m+VgDFJ1hwtEz1wc0+f7N4KeFx7xIu7pKscUEU0Id5JgizXVMAxyAGnkMRtRTSfr1i2Z7/Y4FUw3ytg/udQyQ4ye49gm4ae490vascIkpCMxYEsub/WCa8vjNHv8yr8ozCPq457rjH8Iw5QRRUs4fbjPRVNzM1QStQjj6nkYh80FnWpuZGeDO9tbndlHaayIdLeOVr3kEHT1amofHvIGKQ+5rgbNTx+MqzzZDtLNF/YNoRJunnXQHdsh/l27Y7HrqsGVuKIB+RgzNUbuZ3Gg1IiSGWp8ePkjxRFXILvTpVpdDkeZZcTW8OapB64/muF7wgF95dW9xIEkTFV8lYq+ripXEsSzlTj6LHu7UhnVgjDnAf13ynnT3Al+CVPzCaZL4EEfg5NoeJGq3whh4gm+4gqKUZeV0C9OmlXyaeISbHxtb7DhGkxFnJ7D9IJ9EauqAoux8OpupircGi8QvL1hq0QIDZGSmraribc6SUlRvVDa1N7W9uqR2mCJOKe7SNvdZhu0jLkcncj8NZB1WdjCWqxVAAbNrj7TalXVHJ9xZWh5XkF0DOoj5mGVXafgtsMfWMyrypOEJUv0kd8S4ZOQ+4wtiwMaK0sFZVMsn9fawxX1nU1Fa2r0Cjp0k7QW+o69Figuj3kwRccySJuUztTYpjZwE5eSLsX6U/xKPM1ir265KX4ATccP0UrDcn5ExA/npbwoO4UoNcYfZLx7RDw7AoOUip1Tv8xO1EcIH9+bXhptGVlbxm3lQ9vqgiFxZbBVm8rwDT5yz1OJkmDlkaNDT/Fxnt11MPvTi+PwyeWXUm65MLKgvMIPplc6Z5bZ4YHCNX4JbG9UB3IcC0LA4a9cOGh73x0B0uNx1dNFESyR93cnP3mmSIigiWHTJm7dDUYBWURvgbVH+iM/5zB9d415yPK+0IOP1N+z6xwx9IOyczp1V3kYQmLMcKyURXg3pJ5CDnex8/YIXYcljdwOUsmCKp+Qt4mpaQ6+IAGGoXZBg7oEatU9DxjFlAJRVJgVfoVNVZ3Z7cEMJq6dmLOfNrRnM5slbVbzZEQms6StjCBc6EIwAOzh6UtwGlqPEFMSKSSel1tSS1jsyMQaaBDiZ7aGbLmTGx0LxXgPEuucWMVwy/0TDLuoEpj9FI7tnQ3PgmoEppj38WPVwkxiSMVDGdpQWXXlj8PUsZjrM8RnZjniS94OSgL7jLuH14taBUdxN2R20koZcHTEX1FJ2DLPggey6ESQ9mRhl0jsIZN8f/WrhcklyqNR+EEGryScpQ73wS4jxJZZDUJgTz4Ry6evTaditFiMtYzWID9T+t+e/o5ZpWKyhMww7OCNWPlnJkls54njrmZkm/e9uIen4iaJ0KHGm5sUwOoRy9doxehm7PDjhS88J4r/oH7e1v1aS2IOh7I6nYrcF/raLlMHKDM5fWZF6o4s6hv+0IGNN/AFgVwyLfoVQi35g21lCDbggtacoBM2H3L9OAIiOYu78swyi+uaiSnKOvhO91RKir6iIgKuO30TZTWtzqRXU5qpKQEtFOMufJ4C7RpaWrOLFjUP3OthO7mFQYv6rv/k1PW1OH6LSlSXkhyoSslyo/icKrGkXYdXY0WDFhefhaUeZDsmboxntK2hWZzyxbyM44CuMmiVmIkrBWbCmFLH0o51lfi3wycuoDsPV+3ZA/6AaoujfgDfNoCvrNVgKuPVsdu3c4oShvZVsB1LO7QZuBNyAiahK0rUAxECCp9EgEAfy6QQtQonujb6jYkqh5QF+VPdM2qHtChgp+YiEZLmV1BaXx6vIPIHfmGgRdUhanFlcKAt5dTCC96TQ47IQsIpaH/uXEASpYOYLxvu3LLtQqYCl0awtPlNYpbDHJECGm9ZgsFLLlCGt8MH+K+IUWhP7D1Cmgb+h2gIVTEwJvkuV5Fco5ixXKeP49wnKQyL0sFAY7Kd/HIRjmxOLnm023A7fqGYz0ngha5ih+LrgvKuhuwyFrtuo6hvlv6rtCb4Mv2N+IEIogfq2+OTdUoPBcC8wHHEW1XnA6mZ+yuImpJ9k7VV98yc6heiq37y0sZBbAhLFv/KbBvgrT3/vO01wc3gOfFDnfFkmd9yFFqqhtE5mNOcDEuWTqIfMlcAMWsPOM+zg8usGO981gR7cp8hbwD/NXeZeXwinkVdRt7CirtS9SVCW+Dg4frN3CSQ5pjNJ5fuarl4d1qiy7L/ltKk4jU9kM5QNX+60n4SrL4Pc9/bmttWn/RrjSzxwdYzJ9gZ77g+lVi4Gdg7Dy1+R+evzpgHTdH3HNmmZkei0lwsymuB+zqZIn0W1DxKHk8g/BQ+mKZiqiKCdtL5smrqwmoarGdGaJDDh0gdf3vBDTgJmC0hs69BuFX83Wwg/v6RoKHbLC5JHPVtBjLxweGGGD4Ts8JE7Su2WJqy8Lh03pFDPQD6Btl32jlW5skqNV32I8py2MaaD21jb/RQTCGPe5lqDUm3+FhD36VPLDYZ6X6lpp+/f+c0tOXfbFOcQ8NRaGe0vUFy34UN9SGt3rOKri+74sPOfTkDc3DTxLY+FKcMby3ahznXgaPvx9i95m6ypId4T90Rp9MjNLJmYNmWPlbcqHvzYD+nNdKcqQ3n2vANFS5q1fxzkShQGUk5yOP+5IGX2GEs05vlxy0HnRfqHHrsTD9x/KvzMCSnafDiqWanFsI5fjOxZlVasdghykSEHvoa/0Bsa2UWpA6r216saPeY9FYf2oz9n4VkikEv0PVevFdbNfzTmyw+kLi7TOHJ1nhfdgHIuqYLGJ4lhHvB4TreK3w2zQtzYw94E53o0L4J/bMdm35ZPwTVBNxjvojJjANa2qzah1lctUDsKwFxcbPlM2fm9Q/yScljD9i/Cv6YZoJfPD6eghxzwnJc9nFRTWzULp92y4A5ReFMzo6mJpjVNuzEeoQHf1BTmVfrdMUcnMi4iWe6klau1hmdXET7ekND8A7rAQy+1sb10q5zIllllagHkrHD0seZy/Abc2o7NiKQavPElHccqnG9KKB7kCaM3vUbo5jsFOm92QYNuRfKZ0NuVvtvk1eeuHe7bJOxOOfH2AgpZekd+D+yJ/8Tx0N1bXjephihyRHVuAwIps/x3I2UpSHXz9A8GOCUOSWxrrePEhOH+s78CdbviZXxX8Bm+YpBCOBjUhXrpPg5F1SJmD3jRNyMO+Bkr6NlIEbvx7p4bxfvmbPCSBiCXBnCLXBq7MwR5CfP6Xh6yt5d/IIGlylh5WORSrCITl2vpyq4tsvE6mDsd8MalhWTYReEWQ4uGXgOvBmnE5Skx3cYlBV37kEUCvTOoNiTqC0axGbLKwsULgrra8lFq/7Xii3YasPiiK0dIj63u6CHHmMuhRYJ+QKuHrf1AcLgvSZ/4j8StNhSEm6kc4L1cxRi4Bhfb8ynp6ITHRVmPnpRpJ6Ww4dRXdqx/CF1CCe0bLK9aWiliY7VmEQw0j5/9q2yFpYVX5VpcqKNfBQVTte8ySUk2Vadguy+AapfPpmVwSietPibZ5V6IbJjo1IfmizyXicjh7aCw5FOmWdZBuHHVUEvC+WvukE1EvbPRSq3YTwF9AQ9FPMRlRNsl1cAktNey4LLmb060aB7cgysFt38BjdFHVAPlfQV8gaiDCxociQuphjPst3sw4XUDUnYJ7ozUePY8r0oTCwQUWiKt0VFznHPIgvZ6z0JpA67c+Yx5xUAgEfqEaMJgGc5oiq7YhZeHV68w7uUozeMbQJVfe0eY+N/6qZiO+dCsd6XcPHEM9LmmeRrIsGJG+R3AD0C4sDpFnfy9/UghmsmZpDtuw0nlIX54s2ALEeBQLWrOSqZNMo3i8AoSYTm+2PlcE9+RBtReiGhhAsDKcEsRIyb5b9Z9n47lrXgqeWB+MyS6uiTcyBxTXN88BbS/U/gKCJpeHduUR0w6sXtpQ5vmVU+RnxuUWNXibR/COCOyiGINzBDHbZSZJL5QxSC4fD3T69OvebXeq2Nu0Yrp29ARTTaRcUaW9wlaD9ngQpUioDS5+7ffOZkrRkC+hphLDgkpmxOxFkfIkSANmaIwGlviEqhARGbQDtXi6ErHmWhyV11Y7x1KBiMBGDwBYiiZA0Ur8s4rqH1s4kliDeJhFjwwAQpOJ3TihMx0gPdsXaoLiUctbwXDWvlGDV1dmSKneFvNwfg9LnHjxnmqIIT8C6sDvQrrVU6hocjqy5eW32X/8puK2GptEDjJUXo+qTduZvJphy0DXn5aL0QGE2rDk271zCi5d55DrNv1/GcSJUMRq+l+5Q/aU2yIqGY8cMGojuAqsG8nNND7gQm8oaMXkZ3rSrOnvyLsyF+aXDjNsLQ5Y7/CxM7YQY540vjlUj2yC2QnAHDkY4EEhZ+N030mcYwLSlH1VLM78CuW63n1EIljfUYZObvUmWqiHTJCAVs8iB+YQaMWhB0fir/4/VwM9O145KbGDxLUKtpbt4d9eW71P0FJ3hWVGJTntv7vyNs+IBXyYN7FRzVHPnHworn9eysPiJh4wCR8exetusE8ftcSm/2zH7NwpZ2NpbSiCnTk+UsTqTkX0wU2EqyQm/0cp+KOVO92BEF9dJpM6jZYii1K/Ror0zleylb7QkJVQRBNZNnX7zeR1SBqYYmKYYkMbh3xrp+gRkx2vmOkThPlhTSNpS3ncxsXyQhFuo2R6TdKQG2Z9wum1G2w72KWBOTnvAsgpsjBJW8eOUK05XKhGx4w1FWoCtKgyY7VMOR4QYoh44GsNd0/zgU7udYTWHHqcfxV4lDZ5tdgXJ/IzziILpxFy6y7fJTI4sjut09QXndlIB+R2XU+SZZV0fYRLAh4QWbNPf0d1CAAbrH0nLpq0vm+itGajLneLe4LscVac91deotom7x1wAdR4AM1Gm6gofMDG0XXoLELzMB3NUjsb+g+TF2d1TrKyiQMFgPe8mSSQsukq29v2PfQWybSlHvRlopx9GSRssv55M6x4atDRVw8KRWXasoZNKcicY6qqrlhxQ9rpCRtYHPLZn2ZLV9HPohKG+OnrH9xHbJgw6xgtVao4JNz1HX4HfrFDRafu5Oze2v79STUlp+hv8RmvZoYlP0Y79a+qup8rdT7Oywk7m4syn1C5BGJPFK073LHnFsbYRvWBMLNfCYCkXITmj7grIwB6Ai9ZYlA1UsnxqwcuP8F2WQFG2XHqsh91viQQeaM6FW3NOTtRB1yqdWDUjDcYNaHxg6bgW36BaF2mx4YdlW8rQYI11yceBcnT3atcldy1SEMSSZU/oNoUxGxSLs6mMcIUUUxlDrxzNqz4Z4z6XnfojQDWeGYNBk9Mhh9/6cyTTK5vK9AOiReyG4/bTrsph/XSYrx4FBdUIJs+s9CqjQodcClGzkG4yH205G46AOHN5tWCkTGU8U1MyzwP2tkraaj14nFi5G2KmAtPxtM1IHPyCz9+MNPGE0djT8FAfP6rPieTnbijP+GKTBu6hG/IztxYXU4cvGOeDVpxt3S7xex6Us6R14p+Qniwr+lyEg8rapXNN8sjPjJyHeMoPKthMCIKJIGCFFnQGPeq80AagfV50o2ZXw2cd6+Zg/h7onspHKEswvLGZBwKBFdrK75YewsLPQ3fRRyk/3NOHcKn1fsVJ+FbXf4UZTXmfUBLVKHvQTvwMKz8AURlTd+6lqZliwzP2AZRZSxfHcHCG5W7Cv1UmA6yuG9OTV/ejqUznbJdy/mwWwVduz3fJuJf6oTlG+35fNEdKcjhW79esO9oppEUJmS82OAkxk3ZgiVmPJeeHlyl5HFpjKu+UUxpF3GOr+9mn2leSGL8n9JkypGQk4URT5m/Xso5lPTGIv0k54CPxRUhHlVYUFTw9kqn4yHCN+ZHbCJOGgQVnknWjWFjl5Ks8caFNMvtka4anVn7lTkOFJrYEOXcXRMFrP8Fcn6bhiQTgyeYWcew5U+VvFrLCBi17p4N0hujFG9RAMv9MWXHBeya3U5YifSW2s3kiPfhEDpospFeIaKJnkWtdyKCd/Qn+bBTO9P4A3SNfnp0J15DMQG1XQWFbtc5CS5GUjXh8qOq65PxzD1GG4AvrmFaFPEoVlFVBlisPTNgM+pr+PLMw0wF5IpwzhesezqxfH4+VCKaiJk4Ix3RB3msktUfupFAV/UyhlEiPiG3ODyCkJmBn83vFK69hC42LdQTG1/JZbeoPK7N3sJ8L/6jzMYlQ0OORwmJRAVFUGpLMPfeFm5nMU/FOKPtGW2h8Te5uslamksJ1O+5i60Avf9HgiYIwHmZPNpIpTl9/SOgpev9pK5rEVyltHbCLWekGDiNwoTKDVL7sFI8FwesKodFN/xLXoLEFcrLS8q9UeBU2iYK7PxD6Al9261cITOniGRfBgdo/iUiAp+oFfIsl+oSCm+NINCcLpvWFar+WFALvikdnUEx33bHxzqlFPS2ZcOLxfWzhdaXXJl/sSS3WbV59kKWCJq0mBkwtkxbFdI/SSbHvBFrkMpb0MdsacZ/FFEgQwE3aGNDAxI2HhRda/tgAq65tsEcAlXGVIoYxu/7pRoUwYxnkxMhpJpTV0IUBd8MISD6xdDjaLOy3EMYaxUDEjf76wIKIvKGiS5LALIL+BE+wKAgIj9MS6pggQWKqzcX2RYnuIBsiKtfm01RZL9gPqAOLk2H6BIPm1jZooIHmTDsfiOdROkzC5udzsv4xyoHSatn8wTepzgEjhipi1aC9/iL7V/6hnu9HE8PL9X1a3dhV7CXm9noF8cgfI9E/12gu14pe1jCaGL+bKxxDHDwgqpXmMh70yA/miWxYexpLStdw6oTApseed5klExsDpo8a3Kcou8CpgyADMu0rQ85VmRpjntlWNpXAHNbzviZVDd49voSQLlnwqX1tHNfSOiBqTAhl4UdTG12HSsOQdCSJl9awS5CahWQNnz5Vx//V/CX1XYhM5lnXgQ2LqECwRUwbcSnfLi2vq/kgZFb/pIPS/EZxYTCbpkEGFG7UvrDGt3AkLCDCeTFXfKhmIJ15pYJCsfuVy/+fsPVySzHg14WyqWGOYI/VA/8fj3HkmpW7gbYovpincGgOJZMcEkp64QquRySVHTGjCRmt02pUHx5/AKjLlABqaKghJezWalezKRzHEKEgWu/53feT65gP0T2RTywbydWvZDC+DssUladOJERzF6dYLl0pEACTKU4aV7qOWFK7pkLUAItWMsGrqSFuhhawSB/9I7RXfuF070qG2gWqyobi3/bc/7Dt04KAGleJZBF98YTklBdctsyApzS8oZHqpJIqOMhmp6X19XhEjoqtM/f7HGJEw5FTHTIBoHUtyEpab2M13Gt0ZFD4HBRAwlFiMC4uSXv/NKZ2Kv5lihXfvpTe8rZspDdA2QFdLPIKYdiexcbn4QAmedffZSFhCDle2fy3/8iNUyGZIi2aJ8/WfbOkUxQoFec7PkmtxDobC/nkzVTceuyctMw6uwZcO6BYA4CfXfPigEKGiQ9vA9H/u2hRdrK7O2sD5DtRJ68VXhaVGfgTgJceu8ybzPgE6GVjHF91iB0+SbDtO393Mi414yPyEE3S2e12UajEj4zZ1Z8+qkBd5fFpTdxNg60B1Is7UZCDYPkwDMUnVjvWeJU8kI7yId9rUsm3BZbKhyzmNsXyxFRxW5sG8GtnEHce81l4A7aXaxCczo6savU054M2O6xqJS/bAQj7heotTQmj1TmKUbPMQc6WRUyHU5gkJo+zt69l57wmUnmnpiVa6Y30MBZrtTMu2dMkhNXI2VnaFIkkbZ+6LzDAChiWvD6w4mS3QER+ysj3gruD2rP85GeTjdnSmCaTmM85cnvOcH1TJzNx68XEwKRDqw0qsdgd+hdiY48v4uJh253GKLPJrEQiQVZTANoMeHKuEIvhVUB2AZF6Do8FBOQA8pNs7GrHW1qk/Bfuh6mjjPWxUOKVUDXzNlMCmTpUNihg8WIieHZtz2bn4miJK/49PK5gtLr0X0btwP2ke0jfBJRkybnipby26XAR7hFIc6kZZLkkxrtvdQX3ViaBeh8AlULApcD/qmhPBfCcb/BB8dXp+nRDn3lO/9+wv9D4rkci3b93y26MSOORmT983Y3VtoOciyUmRVi8hNIhkiO8fwv73baqPARqBCdcggIE2K9aXyKOFuh97yEo48kOZaRLNHP3cCb/Ogk2vcPBDEtMCLTMrMI4FqzUtpIyyEEF7JNuX90M6y2f8WpKEtzp3mNm87+IFRKmJhXn1ZVfVwEUDAfVV4E4oes+viDtfOTeZs2/vMcI6XmRyB+Y31RPi5GHGx2UeHsD7onRiVvHuFQIwJ7SmBYBwraSNGw+wd/kpDEk8yXZ0TShQFe6WZTHRO/cAgN+hbAgMaW9AlffMtW0TZ0cSy6F7mmjqbdR4ZrY3nr6cZYEiK2DWUXR5/m5+JPAIpu4oJ1UWv3VyxBYYqkIZqqmInQV6z00YeNWt44uUujfR3xxEyMMDuJuiYGNVpsnPKk2l/6ozJPbtIQ3Gl86dELFc6t9TN2Ob2aFFm0KopgGV9a1kuwVgWDLOeuV7bIX3ZTOYRqyt6c7vZfB4wle6ew6NJ8PzT/gUfxXwx9DZLpj8qiFH0q529JxwTOwCh5pPjrXzeJvTZpmElK82aRtBaI4Px0g7ok+n/zv2+b18S48Z4m3x3ZegK2l0sCe4tIhOerW3pGRNjYEQwa5uHUuRF2tu6BkrXYHF3p33IsE9SzseAqPBZ3lscLHy7t2z5A3Hk5P+nBas5BSV6AV7ICYxYOy/18a554H+CWw0lFtzp/qeJvF/CD/EcnUJAHfhwNRDE3Y7pRWqAq1DCj1uphLC6d8Pnpx+pM4MlIPpPWWE2BGxFUOLZdJIVQlNVP9dA5ABwB/sOgfT0OSE6HU+Srd1lrzUPgMTatnaPB9fMhDYeOXTZmZvH9DOZJrcVfns4c7xYbOr0yo1bStbhl7uQaNID46OY3AHkioflxQ3vM0NoGuyvjdwEBv5K6mOGHahdGukSY2wNffP2mr71SE7ERZJZUdVMXDZMFZXlvH1TEb6op07JTD3NszOhKMamEZXRzoAUewEJFb8Dou4TKum0caVoO4xlq4cW6h6cAniEKX43J3DjDMUQLNAIfhjeUAV5L7x18znmscaLwscjyizuYmaIWiWRw9KXVnvUbr0ByutBqFMt8+q+KNwqWk7fgHnnwy46QqJjZuuNMtYbZCVFGnLdRfKzPW/Et3TAe05cWGqcI+gRRyNHGY6ggPD//XUTRKM/STYHMQiDUomblC43VWl5UQH2vk1A/HqVFOsjHPyKa8ZVW2eKlR9UEpbXUd4xg4l1kNaMP9SOFSqVJig/N5aq4jCy+CTuM3q1Si8yki0hkDIGXJ8OXJEEvwrcEAPZ/KGXEptU8ABqebcQl17o1HNuACWSpTAwl91NWXuzEQk9Kvls+tnIX/V+fbbYJXy93ep5fRAwm10any9+XaH17U0U4K72vLI2HT8gHluU7vKG5dkRtqyjlYYXtmNOEDVR+gEFKq1YmY1PGXF9xrEMrny96/pgbY9ZCiRvI2Lm8dzXP8k0Etv0vwLMeUmjV7rLG+/redKQh7OvnHh39u64+DW95jGIMyWQunFc8Mg1I2Q0L+kPOzcyGeBKqUJhkXmzHqMiqFiti5/SNcP5TkZnqqgjyPSWVN3hgMxM5Qm6rU2HKyRjb2bFofpSKXH8emwAmflQLKb/nIuYujenClwCLI4/bJ/IhNEOCOzHnRfBM4ZSyx+felO9bVE8MvfLKJxtPVE1G+0x6+F71xAtCPXpiieoekFgzVcsdc0CjNAnQ/ZNr33VmqUAvaSPBnPlohK76l0Zlt9RT81N6M5QegLM7ZrQs6LhMSCzCrbogAQi5Hon20CNS6yEJmBxrI4x2XxkUT9p4s6houwbJ3qSCVAVNe/laQkAchK3v5/99Q+tb5RDldk2ZFk7U9N2j/CMfWcsIkkOfoLEHKuCT05+5t2lGR2jNWBYUzqClbfr2Sf9ZJolOgliRB0jcpyZi/p6jOiJ3MISwk4dBTTA7mtzhsv9hg3/zH0w3tdJmSC4F6qO3BlXcV+zMQw9avnvohRZF+C3aqY6Wqfy37+BG4iQHojuU3175IYb75Dwd/nqWmYW5h9WHotitz1pAKe4+paHztnvpDujUdGvqojXYvmD4DrCwQTcOg2UYLY00/nNdddS+N4af0aZBaJ4htycTqfZ2XsWWa6/iaJL/XPxY3+bnBV26bkgtPnnWpcUaJMT4eM4TsI4dFBpof/aovx49F9OpBVHA+jKTa0VJfk0IxZVvOubisAymRUq6nN4B9E+CIpVGTgvSpI+jQXU1rMYlNTyplRkIDd/KWLefaqQfRTpHDCkC0n/JSI5U1eVlY6GaToMsJrKydWG+4teRbD/59ddo47qwHWh6L7XEG5uuX57pd3LVINmF86ZJ8C1OEfR+c2PoV3cLYqinBJBFaUIFeKHSqoyixFCs2yaDdPosuOA0C92/vI5qJeFOXrwAV74oEiTZov5qc3EhSwlDtZhGzOAxvDJJvs+Rwf2AGG2nYZOvpzzHGcmQxPQ9KLN/QLCCg9cG7gHERfRJuu7StbbqSYidNHApEhL52YoKFZ8+KCJ9VLLgo21jrkhmd0OBdATT/3IzeMhUef2zy+5sgmY6Bl5n0h8ttnDuVJrB6MND9PKfLPJxepSD9dzDgcq7XJqXjNKMpWv1pBN90BrdVcMjgcT/PRnSGPHm7kPQCnDZTtthJU3QPjgeQmyIuFy8h88oSb109MHnT8eP5ZSeL3K3kO9J+UM9nQZ5pDm0UWQzUoAGRPhu7KeZAib1fq2n6F6L98J6KeUlUbVEbRBiv7XUekpxCcvGDesQbRHuydWlqtDy5Y98VoY6NNiolp7Xy4mKsIX9jwo/6Qsx165Sc3vBrGDKgmFO/OrDNF3VcGXaSnjXNNnP8obDcOuy6J5Q0PgOgHkjjBISO2Nh5uPtzSbW4Uf+oibjsE96BHscqyM9gQxinw3uy2PjLRC63F4ObPw7Rw40p7me6TUzFtlaUEE+XOSOmg43Wl0V6iEVBjEhiUhVxCbQaVEmUWZOGqTDERvbFmHpX6cx2YqB2HXg4gZueksFZFiKrM0rUfi4+AFiFetHs2oqCeueLRthe7igk8ljHJZfu8mbo6M5G+15OmJt3TrKhz5zqg2MQNq4Ug2Mo2dBXEW+EeP4w0KSs9glKoygPEVyziBZ2l34t2cw5iUIAhZHGBpCn+NCif0HPJ2htxhRMXrKw4ZB9Uq/VD9iQ83bXaMnNhXRgrZqFtzsY903LvXjiIhesjBMuuehzhbxpMD27jXI7thrUppzhWBYLZVt/WMFiHJaqMvkqvbxQAIq2zWCPawHd6SJJUfyH5aJ8ZPtFncd6tNHHS8qfzy3BBpLkM1LQueLAvQIYowYl9KV5pQXAvyIYkreSVX0E2NzSt3aNYEOJuJooolTr0llfK2h1eO+B8hUmflEsDXehm/aQowbOfp9LKowIYeBldhmjDwWKY/kvP5pweeLSDhnuUh2Zb3n2q1+7Ei8z27/VGMnkcgujPgUZww5L6fOiHVheOftaXQbNvl1zemgnH9kJCsyfdfF5RTzxB6w9rKy6VXD3zzztZSej25PbJSzZRWiXBK+2UoC5ZQqmGdwhEb/QEpy4egj5neMpvPZW51ustwceo0Kr9iLRW30WUtZjjg2Asd2ZGrPzO0jcs0kkwZiroM6iMf9z/E3eiqAhDLybC6PDwjBsp/jUy7KidstlkHnIh7Nnri0vNWvtyFkDVwyKAEOh+DqmxW9trCR/wsZ5r7wyL+UgMpFQZVNFCSaKhhUhSo0YLin0uIpR6DjhGIdAKAYSsJAouOwy9KqQaTGyOIp8rJLA5uci9rw6fVKs4Ra7gYT9cjBgAk8ez3WG3EIonAUy8QVCmKAeOCzx051vU6oWCUHSOxUE1Um3siEZEoJcgYyyx9LqzleUybv5ZM1ZrEPvWismQabi/zOJSGYSkihtqjJLDzDj48NuQhyzk3J0eVlLH8o2lO7tEMg6c0e4IXwlr4Ain9PLuT1i834Qd4uwpOgICM2IqNgpvN0QhshqRXUi1EpFpRVS9B4ulMwkI+trYmxliTjugSmsdMTJbEZRAsA71VY7w4kZqFHal2NXIj45sWrwS5bPItGIpUAZZpRHkjYF9SW17MMJiqUu5oCsxwUCfNW6HRD+Pky+2LNkMoRc7mj90s9F5hS1AvR1+vwHRL0nUK8UD7sKQ3qi8MIUUFmLQr+XAUD3kjVmgQVnNtd67QTvNAqGuzVzWTYl/ARktbjdve51Lq+EiEbaHc2Uuf7WWIrVJLnziJd1SKbmIxYJKBW7P3LmPJoKpjqbqyGLW9g2AN/NyDIjuqST7dTk0oyY8ZHZirCbc4avkZzzLCetPG+W6Q2YvGOIi6WbAnoEPP6yRqn3oIJ82+oQMaRyX8KW0eGB3s0fMzPHrImDdBi1CYlR/xJ5YrBjFCYya9NJx+SB3mq1hkH7cTaH5Kb4TjQAmQVbCGGv4KozFvZvA7F+kbq8Of74a0xYQnOmQ1mddZRWJC3XkJgHNXivs0zguasDUADLEYAsetCOps23Th6qwHCDvWGQt4i4QoNtIm0HW3IjVJtTvPwaZwQqwkavstPp77yagfh7+1mRLDfErGZZp3ClR/fBjN/W8WmXzVP3cAbX68k+8/DYIFQaYhZXdhyQuhW6GMQd11DdwmeJc4MpWaYs99WYk5F0CUVYHkegam18uzbnWM+NBHEnNtFgNdG1R6g8hkUVWJSQcJ9C+PGoFpDuPST8Gti0jVnJd/vWlZIMxVUxpXLmErJ6Lkle5NR6HbcE0udy7r/Stf6C0KGox8rLk2uD0HaGqIZ9KEzllwlFL6W6SkI+5RpI6o3GB3RszDBWhGv+1m1huPyGH4gc2bqxVbIwlDltopBQ+51HcNaaMdj/0yOgaBEest8NjHxTWQFAZWUX0N+BHKBEPh0NMVsm9iSlREKKkFm10sCi3f+3NjcX7fjuqNXVUHu9h91x0w3PDsoWHtqGVex3vPj3QpdwugxLNzH2ETzaPllFTgmw7AApyvzgiJlZFKjEggHQVBRsyCBA/O6Erv1nD3NXRCKhZ+26rF5NDIH9Ik6s4gjASNp23YITyPwwg6CCXlhoPCtQMZ8ZNAoOIgrfiD/U2RtLDS5eU0QkI+X7uhdpt7m2+c6HMqOnUvcAOfG0PN6aMPJfgQqRqmNVetzsR+tJhgv/ZFchkeSedzjyknRpVKzNUldUAWLlPKLpJFsNZeqbBOzafYVyBuKbamBHrn/CmAbfL6ARdDr+MBbN4vLx0h6+4B9xmoPZLIJR99zHQ5oQZJycStKy45NH+C7KtMljxUI9H3u+Lqa5XlM05VifxJgPhTjw0/+h3G4tr6PoAXczFniLSJZ5xjz8OQO+1cqj2RixA7UG8/ywwh7pjbW3mJ5yi8QiWX3889QmbFwJWCTSZXu+vflVqrWnRS2krcKJbGgkYajc1S9oW/Hy1Roko4jj32+/EWJT2H4jdUkdk43D0tUHvNoZxIKGofZP8ROTVmnsyKxnQ859lSPUeU2Jzp0ns9yc4sx62S7SUC0+Zk9OvzxDbMen9YeXnCM/jGbl7+sfm17hlxTW1fbbciUt8KyrRHVGIqYA8LfexkJpLstL4CYUq4WbvYzEIgBqDSHfvrDldCXbY3L7eHB8vyPMzjUKOLxc/q5au9LrblyEid8y09EuuO9+3wbK0CdyEhwwaQkyEmNs5M+hDkV0YqdIMFbelhNAgDCtV1yCgcRav5Ea9JTlpgd34ssqetghJKcMu0Zva+WYhmiKW5Z15qi04hOVj+bn4aTGwsRQasKuOVZIeGfzfW76y+ywZE++ZtaEmWFOtoaj8IHS8rmW4T5vpJ9e2tlHY33TzhoLDoXVM1ZIZgGytqj3A/zTugPBRve4BuvrDNwnoakR89sU2rAxcbNNyi2jQoBCg8aHCgFgvJOZ6JVC6W0Zmpvdhgi+7/8MiESEMupRFw5igBgBOP+kBJ+oHzzjgQYaLyKUUWnq15Y351SZ5qLndKJ5IhXO+zJ46Hu1ohSsUEEtcuUB4Tap/d8OZ0U+8NdYZYBkRXWGKgWsDw3n7ayV5jAufYN7rR+H3rITmk5d7QYVBn4/xBF6ftvfI7nB5Kv8kUX2d6L5NtmVeT1H3iRR7jFNyhJozIaCXCl2HHSZNs5kW4AkWzPSZZu0/bt7R/o4OaH3RLow0nncR+pdDrGSCsoMOsscplmRjWBgOo27Wj7C+LgM2ViKQx1AXAl4WhBsb92ZPRWpBit0YKTvon/ekBarusHluyfxOIPsa+UdajRFlVEdo/M5uu0gQpFosljvblPUpqK3XiYurr25lyIn1DETuIlRX1PLyW8pW/EOxMvEe9enEP8nMA1bdgx3sNvFFNO3Ad6hbv32PLsEzybTJ7cYPgrmX2KDPOJk9wh9PeGTjGbDPmyyUAgKm1LXrwEd5/lu6AcxEjmeU4IYQgieIIkRdT0mxCrX47Bf+HbeavL4vOYTeLgANiRrZ8yxXZcNVR14S18A75tK2tTNwE0dAUs5j9YEvQ9P9xLqmISGtgKGy3b5ZHSNYAIgMDThsyFZ1ZkqIy78E1TWlnvCoLt8LJfZW/8Ak9DH4MEIzQcggHK52ax5wr6EPAkIp5j7/GVf0fRNOXR0BziuXdxZWwGTO79sRVpq32mRspKVVEtbgoKVrJsbQswPwA5xoBlNwSAkzt8xdR9n09VhIUzpcF20hrE/xDS87N4wkDviSUnjqbrRjmOJGS5cGLn3cSo7cVlht1Cn7/UnthwtUQ5IPnapDOympEMHWaWTM47/TWilvQEHynbewjGy1nTPgA0WGfaW9heNqwVjDzL/DoytHuKLsdRGHMCrmNx+gFqRJ61f2+6nGK3/qxLRqKUl+V/p9u+f2O0ZbxwL3ZMWt08uvo1yVO2Z3FKi087pSb9HXTYAt52l1e+/yrMF+x7AA8tntaoKImnYyuoG1Y66bzY6ss9PEemyfAsuWviF3hPZolMlsN+b98MOjL5u8WP01SUE8bf8rx+RGOfe6fiEL83KqHdEOd7cJD8YJn96O2+NdKs1Rvw5Db3p5hlbN3Id3MWnPP8L/NSoRxwKRAXtY5RInBCxJY7sjCvsc2cMSxCOgTNkhIRylTZZkNOKWS9WZ+TkKAZKtV68ouwGrOtBnOGk8K8G5oQllDQxT4vNl2AK3OOw0V+E0Q9Hqasr1rP3LC2fjlWfUaskg8UIftq4G6nbHKdR3e5c9kBjFG4itecwdYIg0Zi6j8vGhbF7GiYmeziir1zmDXI9UzCHJFg8EPrQp4cywAO9sqdiRyGt8ERyXf7jjEhE2SCYU2TK62y/wR1DpmrzM4uQuMxp5/BnEVBsBPuSUb3kI7OPYXq6snaK+7eCDy1sR0DFk1IgHmifyJ+guKOyUXSap2cFdrVtG8CoL7shCgrC1EHuG4zMhxiH+va+ozrXgo2KKq0j/8pqx+ud4/Z9KYlvmaGiu9DRJvyQ0a6SMeIzpw/LieXmMVsengtnGYFqBaKwbu5raOdh2yQ3L37MG+bmBmZofiI/P5nr+cADw7krgRPuktudkt+R+IXyyooNRHEparGRyI0WgonYiRWgjJCsW6c/WwT4a5S5hwXcBkzdKOtTLuq9pa9GEp7byPIrEZPK2f/SpCqp8LAW1E4L5NBasBZHgXXVzdPAF0GA5aoKR5DGlSQ05/XCXvOsjzJ5RRojCT7vbHTP4ab+qA8TNYlB2e8dftv8KDO5tXQ0/e2fRDPbwa+ZPkXsJuJymC8v2z6pIdeEHiOiZbDo3wqKqCoYfnYGliTTzPfp/xut+sJYPhgk7zyeXlWUlop8ZxDOuLP/CafZSSIEM93A88RCsEx9Y6Y9ZFGJS1omYL7kZ9jMGefGJANbjm9FWWBhSxPnP5HUHvCWfFotpZIAj9ziuE/nyrDUNh5D+WpG6VBaiGOjusSSxkZwBAgeM+uCYje4tgNs+7Dtpf6Sdb1Kfn0DwKFdd3u+xeSidqICOIIRTQhJHHCP+ukJ2voHkmfwYvFXnxV9eDg30dSOERuSaooV1g9P75iWVUKEsK6tp0H4sXmVPBOyD4VD/LkYLO1a7KQwg16D1CgVgkgA4f3lbx9JfZ8xoSCsIWqOl8z/LLst0a6QIid67CkOviAyYo9nkDUuXveddnUl0p9S0nnhH73Tnu0FSVmOJ3p+AttX8dEIfq0oS1AKAC2tVAkdjRG56mcsOqkbxW5I4Havvm+PNEoBra10VAFqd8tBdAWnzFkF7LVick/9QN2TZqYWV/Nh4zj/LguQo1Hs5HMUewCssxwq3b6RlECM7Tiic4ZstajxPPjHtfHFsprJehphBnvtp2ZUB+IMflFv9G/Ftr01NW6vl7rwFjmP5M1WGCrySNLMVYGIgumfvmD8T8b88vJlcAl9oYWv+wPw6xBrHBNludLbdEVENcC4saPL+xnj+VArN/Xh8Fz7tg/CZHYEWNYOfOKAONwB6x1AOHPqzgrCdT4zaeZ9sLhCvXv3cTCn5gbxl8VsTA8La/+avbZugI1TXk1U+l/ck5PDkwidCqIkStsptlSZQ+lcrlrR6JeNfCb/Bgr9KMDZ/MMkqEz29UvzDrxTpfRVj2m6Leg87HrnThp1dN+atz7Ta6JbRLqQAGeGkEbiAkFniZNQnwlNsJ/mIqG55IuAcvCk2QZCx7R1G3P9Q+06UWnQwoS2INnkF9oh/VygnTTeGjQXNXGieMfNPzqfoqzy9IiOXTs62ayTIe05J43oYDtJAIT3oE/DV1y5eOq0JhvYJTy1nAdlJ8BHwH9uTBzPXgHi5PwuCngwnF9co0y7ALlqtStRXLSxySIUaR6uvr83PRwMW1qAeFzlNU0PwOsDNChY27Vt6rghuI7mOlSUqGxkE+31pUXcJr9XwEAlrIh3X5mELwIMS1dgT5q0PizeYWvkfMl/VEIxkJliK9y8QELAqSVIu3Mhrgj+gjkpnFQ4AIp8RG7cD8ZkEmilXk018M6xN0vYm/UVrSvV+r7BSAVxUcfjQXgH7l2RBCJfptMRdF1FkbL1R769xnyKvUWofXUgeWhlbw/iLscE6E/ew0IyODGVUEqwT+FW3J4anyojURppNvHs6V/lL7ojmEkbZg9NnVrRwC/GRY27yAItYLz0tTkJiIOYn7qxAwApnrDcXiGgH9xGinB3XhXeM7Op8igMgZp9qYcIQO8KXzg5ZS8emQRoeG2Sx6gr6ggyIHjFYwa9D32MwA4JxIFDbbeZeHdwRKhZ/iaGW6tF4/dOzo7tu1ZCB7OQ3UYPfxZ0Xtn59fFAGXzwJVRFyfySWr4eDxYTvzbEvCSixcqImxM2gIMh0vofDOZ0jcl6gmRaXeUVBGYlvpFbEWiCFIfN1hFM804ftsyQKOABHMPcUcqIXQkAfNCeJ4HsB20vub0YyX9MGg+QiNJUrE7cwWkr6JV6y9Bnk51/qzbK5N5Ix1glJM8o7Ul7wZ8tzLxl2dqNn3Ws0bYut/MNP4jr9F2mDOYkgfgcVqbl7AQEnRNPq9/LGUuYJZ/QPz6Wdkacuc+1M2XG4ZodJuT2KLQ1gel5q+SQ4lQLLzkhpdqZmVMzfXr98aV3+5fzbJJI0P7kkC591bcK2RfCepsWNZ13zvgc755ueENwEI6M0Xi8pBZd+k9Qx+bgMr8FjVpJ27K+NGxdydoJ6qpzTFsA6UrA/ioftpjsFlgFBvkgZFK4b3Uq7UBUJF8/2SzWS6v3Qul8aSdgEVMkx/+C15AClxv6bbD3GwoQpdSEElb6Thyh2B5nWb7o0R8BbddjmiaVO57pWezWknSFopg5Dtc0J5XSkn8oNXOKl6haL/GjlUPQRlicQXR/oojWxkVfEBGAUT2CfcDAAr4haAbA8leDgfRHA2sI0I+9uuIEq7WUgYfDm+l9fnfATOhZwP8DzMspVSyrrljxDF195G7csghFpYFQ80BEjZj3ou2yMRGn9K7crANnQFFCb1zlYHZhndM1EQNzBiuwSQ1WrnzfbdMcK1a4sZWR+XkZoRPhFUg7R7WtXQXrBpm2BF0005IDJSKrw84BeQTsMAGYUbEUDBm4h5/Qw2IWSB3MmmIf2jb8HCGb1aKq0jUkLxMrlyjBFn2zijLb92yQmPkxMZgz/PjBbrqX56Ptni0aUV94oaBEOYVx0/5rcSW4pRx2zAMY62OM7WEVtXMmSRlRHQEhe768WpQN2FNxLWAT+G4PXfLnj23awr78KqQ1pIT48CJpuNe+DJqrx+8Z8P3XUu2+zoWdphkLzyHbkvvFCtvj0mSHPXlqiHOpKI76mZLEch1eRsRnpI57sCx04RNa8ZbfmwmXoGtdtBPP1PqC5k3oOKeaa1ztv98b3L1fvK2m31nhQ05ZQt1+q+X+01tVOBbUTn4/i6SpFqmDC+/MSWsxtIG4RdEGc+BzghQZ4f0YYxPViQXKjgFowgWIc/qe0j2H3/XMbQGFQHSRjZvwIjNlRVDT5YnAw7uhgZsu5vWR/y5I0BpRqutSJoQfNt8nI46fHaWd9KBWdN4hFQ+tk1AeSTduMwpB0RfWL9P9fhfT5sTXurp1Rc9nVgszDT9lMr3S2uV/JXwEOy1lAzbNAI6ypwckBARxPVIMsx0SWJfHJj02WaFxMD6A20r4SBpZVzSql6QSQbizu0nkODegOQb3gTfSAvBmonRBR23jxiHo3ZmEXBhadnPX3biYmZFy4wH2toEjbgTfrK0wVd4gPPuaNYL/3VKacS2XZjndLrbThfEUhEOkjZ4yleH+UiP2HhfQlUIAezztgWOH6oFK0i2M6TzJ66FZxk8I56pzJ5W1WzAlo7H3K6BkTfGI5n4ibm0tZoAw2gcuKIA5E1Pt6dskbM29NAW84NRUfPYFZSMOEglkALi/15m4aReznABONMzIhFm9RPnU2Tokg0/t1pxtvmvupLBQV/ALycl5HP+kPi869RHXU+GdAFpTs6uUZAQ4HnauDffI7k9F898lAQ1YEfpDvhCL3UdhyAekD5nROe0hBik1nWc2AmOopMhmGVJUGPmR6MSAmDVShDPG9RDx50dk88StR17ITMBYL075JgQEQtsDdbXInrLfDapkPJFpTVwgw5Qq1QL9EwtXKdFH5/au9PFWzrkxIDpA2soSc88qL0Or/9BqwaRceHDEPp9/bUNMZjnAUJn06y84UjTSx3ncTjrCZqGmtOL4bwl6SDrvvd0qzh9sPpf6VsFuRwKBdU7d5rmuBam5f9eSDUBDPfMXameK3AuGNVABMJmT9kze84GTMNl6Mmo/0ZteSlRZNNOSiaWafWYyB55vfBeJBnnEYzu6yT7NVd8rdp2pi6NIXYwjWYG8pT3+vlUFZ+2bOdNFxOmHypK49ZCm23yw8YmZ9AS9yqNnGOhENm0rGBYQiJaiGX60cQN206QKZSt9HPfptSPDSSGX2sBGcYhekoSD5ZlLxAv8fh4A+LWfiH4XgukUo5hhMckMk1+Ra/3AigI3ABCldzhXXzqyFreb9fYhWyQJbm5oz3Mk57J7qyA+/m3vs0b6gG2k2kH5+39Ki2QniPJp90r5GyvVJu1rQj/VK67C2n7VbXBCuc2z9PIY5p6PTQkSmVzLgJ68QGjlMVgFcIpx50FhHftJvBbKmSjJtZi5Q1W+ZZzNkGgk+938t5myTfSGyZRHfgUfgjjaVrVxhCmMhalaa1QyCeg35fnf0kT5t8q/w9RtGhPxvxCjzQ9L5QJugp6X0M8ALF96s70PbK2nqSFrgAd6yijnfKO0q4Rkpc9EaqEJMQ6eRZCHyesT0h6k6xe5WPb15Ciico+El/5AKKU0SYLMfpZgJiQi+XGiHRd0SQUdDGOGHkQKhy2SOJ78GF32DK6BCL+hIED2NCZr2MhkECT8RkrFiW8YT1Traxa2MD1CwHLuf9gpmXRcLCG45/KiysNUQ1DgvICAQDN+CMZFYFKHkn+RvsNzYdqGmNs8Mkq8Kyr5Jq2wvEW/RjBj+Mmvl8/ffoEQL1HMBYfVZ4zjcphifcx4vw9zBG+J8dr35nUJG6eZb8Fi4CYE6//S3lZajJ791vF/aLHtmRYBOyeil22ecxbi6BtzQNdXmr3fKgTKgUEjsm7Y33awtL+AcqLNMnqD10nqOKbtcDG+sx0ZwFi1I4nk4cL5VlVu6KEC7Aiuq0bOng+3S+zOHzSK5ZzGwk9gatHbinHT7v4GesU5QBsq88WTsY09aQPejsbHVYuyoTz3N1yK8zWfmZ+qPuUOI1ErxRh9LGjlEt/axPncrZ43vD/EL/Alf3xm5somScWF1tnQ2RoB8e+XEQhb2q2onDCxKfeiDrW+Ax1rBQ8SDJn/zMcBJ5UknYLE5oRushKZMBnZLGboeveC+fOg9kg32na/gBg12wRIu2yyWzZM0IoQFWTv1WzJuh05FfsF9nb1BcGsAnseftAsj4XBGeq+cu2N6k26Kv4+yZnqGq/jhNB/UbvNNuG3GW2hy3STVO4b2BJeN62S+Agv5o3kydndyl1lXnxLUHHCtzRzWtQ8tNmaDZQXoVR8x63WTHxhBv3rGe2mr65+ZLGxPx0tgi5RhhW8k7YMhzAXNP0qq2CumeZqoIgdXzCZCUESy7UdCn2faZcCjObIQ0Bnv0ZNyiQpePQoo87OQL27c+ranLy2yQ4HC3RnAJsJN7iSvSpzRvsCJBfmRQUVQmXxD+gCMZlgJXbe6Fnqt5QNoxuwiWSHaNRs85LXqAojw4b9M5RVONd6MkYlDL6mtu+aAeFuVkn+P80V4E/4dlw/UY7HC96wAu32veid6JOS+0ZRJzYuuuoGZ0is126oTChfn82RTerGWPCMRQf0ATQ7mtLYrZE4HMXJrEgkGESJlzz9aklGEuRZZ9Z/BnkVEaCKhRGhwoH2RgR9iAuod+z0s0QucTiIm7LrseQXAzG1bCc7jvBT+B0LscFKy2HFtQqymq+p1gi+N0uP61WKpf41CYitPDlg46VX2XHFQiKRiJJa44xCMgjotYcjksJA61q1GI+62Jkep5Pw8xbrDsinn/jXbU76qvqv82naq73Gcb1MrwXZuHb74ze3xwb64W31faCtnXFZiypOubRrYvikxXGr/MTvZ6dhgBKe0TqhN5M8KUJ3bUbI+evaU5pL88gUzVaU7H0+YykvG45XCmotX7ENhl/pHy39A4wBlpVrd9NAP6t59JD+ecVoUUctJ59Pz4seRX2S1oB34YHjGam6xPl/U8f3g3K40QMXz8ZWzdG0J9Et/h6tMwJasq+ZU9NF2vr5L5SJO2vpdQBDo8ghiy6+ZGBMM94yhce7HAYo0jac/u6B3Juv0qb1bISbZbmAkKD/0Ij9zTAKBwE4kFh4vdUGuSxnFuxoGf1S0TBLsAZ+vxmm+imhWfW+i6prJ6c6nFm/Xc7AFW1fgxeVPZ6LkuXm6qOx4wKv/OAM/dgDYPIUujx7x+kQMtBZK6i1yw9QT/LNlAtwnuKuj8YToTosccuFvqwwPKeqNefB+lGjLtyWMTw3DLyT2Ij4bhfKgRVYQWkNBBVQrBaMXhw8Wp8wfbUr1dcFwNxL2GgwWTIc+pHCGqn42gfm9JUNw/n8b0ZUHmnpJNv2CNB520ug/3RZH/cflzcLCcUOoSKP/sRD/vIsqE/IAbsMgQFZUZUc98ZtDPBj7XPGLworAboGrqgN6yCoHJa1Q0AYyfxtywxOSzNbuh6CosdyzJQntDlH3dAaEUsAIaWGdd6YCyiUGapK+1mMWHABiNKJLht4dlYJ96ym7qFtu5CVZuTJzMg9ZCHLoR+TrIi2OQ9vMAnXXlrNWYwCPHOpZW7UhCo20RHPqVBe5P4L9A4P28jezPH3FQIoUhZ1NQLEt4h3piWF7kNfmGeK6QGNY+SE9oTa1Mvw7pY863EmHM6QZJE9CqLtf9iIItvWItXoUEdH4dumYBEdYhkrxe5HqoQRIZuzT6lr6HbyQFnTchgCRODy5LLhK6KrqHFwH6EuCcRZQ73shCVAN3I9fs+YZ2qumumhjNc1rwqi2zKwP5t39cWJyPbryo/A3hh8ZCz1KoieYF50vV/gEAjruk+gCxonbsmFp5A0m5VVE9e4/TOFVGrApmS/MvkSvS21z8Eux0+qzwoUtPFidaGPGTv9DE6wCEElNMCYcpGaqA4Yse0C726wX59qmCr7u7+mKKILgYMsO7LBbJImED8r48wdkYQPAvyjvm8akZKQl3p2c4kouXM5EyRcKnA500P1H8s4C7TU8P2cwAYka0a+UQNoCRLsgT4/WpOJVQD0WX8khwpBe0RTDzkQaeTcrgbsMHbejscLuFnTaQwSkJ5FGj3IhVkYv+AI+4urU02n8OvSP0Vlflobn8VFPoRedomqpx/wQmaEevZAKc0dz25TpAXL6dWPpgFLjd3Y7Z5wtxU8hRXgvodK+RuPFfboLw+8Y/m9HSVHgfuqx3yPP9BUiApqKX28mWkIkns3yf+7Jpqc0w0n1rVHK805YKLy9qiLd45v6TUSaMtwW9J8En7U5fXgsLzsKjPJoXWy6bgQYr0lW1O/1mW8L1xCXmuqofDaqf6AsthVbYyfcQ65Xuuua/Gfqjr/1KyLLRG1B6EPIxCdKdRy3tGW8m/0OJl2U4hIoTqH9RvTK9fELFs8GJBZmz3BxwehnmyoAaMus/KCtU0S2WIZWo7knun2+SMbsMcDKA9uEjRDqUE+5Y1doTC46g/o3zthedTVV+Znnz9ONoVU9qHjEpkGd9HlZwyL/cEJx682blGezoHHkTUC0FKv28DUCSCEbBPHoGlMXERE4It3wHShLAnPxTpLAauGVlSkt+4pI/T2q5c2hyvBxeNTtyx4lXda+xrKIMp91jFiIFtXqHoinA6rVkgdflCaxiIDIltb220ctn35g5UeQGkaImBre/UwSFxuNq/YAAPBeuzFykM3BV95SiT7k/g3kJwV5QDGRDZwxQlM6uXLoRVnOdzI1F84bCyx1YZcOtzo3X4zDAJEWboO9NgBmeFAZn0HUE4nMU7btuO+Uhj/b8YANvQPYDoDzTAg5/dn6T6pDbAEnk/0k43d8SbLzPjdbl34VS0U0sNZMPjnfY9z4pcaNANui4gh4H5N+M9hydUQceyE6WfFOVinGUuaIJRvdjjCv0bRKVJcCxGlMBy25qA1+iX8JfCni4F8LmRWWJbGThoqddjxrbKnyIg8jIqav6JURVwN7PxskeMdjqVUrx9nya1euCjnH05fTyuxLjGH9BnIdwEzNVkPYnA10L21gLq2APLxEJTsocabd/244PU/hrHON6AfnU/r35A5SZ8sGEg+BQ8+wDWOBOruYgvmAVduvqG9gBfRXyiqDErUWylUY0dDIrLjzZ4uqzP9ss/QLCI6zcoj447qp+h0xyLliGECLL3Wvyg3YwY6SeVHNtD9Kj2YwKzEcz8elIvlzk2g6Fm9SapYA5lccy7QykCA4yPw1fpkbIbUqzguqT3WefQ1NtTxNWRJigA32aDgFXt423V4ECqCsVIfGe1nXW38XjFpCyMNAGoYAhUKH2sWPt9okmJ1W9jXWZpGfh0qhUN6a0l6J6XjXQGxz7Ln0D6gj6yIggtMDRm7hRLtJamaBwpQh4pXu4V8d3qvBlyqcnRG6JStipLfv3F2Bj7691xs0aZuIX3YscsmmTpNeeT6a3zVLfencZNItLntVv+RRXgiPJOA2TUv1ucoUXjyg3nZ7gskyDgpTLvIJmVEWVUwRUcYkjZzd35OQqXdj/ZJ4qsEnO9mkZb9fxlPtT34pZYBtJrXcoH7rofYldoeWfE+9Yh7kl4Y28tISvznB+bvXQ9iZvt4On/KKpqtQ34j0ReW9osDy3i+B04jflA5bIMbxDfzBKdkz+m/hP9Ql9Cr7zhUac+IzgjjVZqkFeN0SG38u9hfKQD/tlxy68wOnCG2Mo6EtTYqaa4dByufIktpCrLZsCw9R+sWcDo9PDZ+Ti+v6N3xGT5E/Lt+Q6sIBp59F6Da6n9QQRLXXC0yP9TlPEP/NnO9YT4a2BvD6IugRi2duE9aJy03oMjmB1eGeoPr4wqMwtcFuQ8cOtlOJeSoHu5w/wV8i5/8LM5wWSYaywW49+iRmzcbs1CSH2mP1UukUeoi3HEBw1TEuKQLYo+t9as6cNfGfwmR1Zn1I+NVMTKIvh8NfOjJNm5U+wGsw0bPD4JQo0ecTp3NsuAzxA187r7lMJzsuDusmW03kJuBfHOlacXypxrEmO4mwjUm2XqPFSMWizYAS/vwBeHHEJmos55o/n29Ph16oY5ttTI4dvOmEwCVgYbzmdg43lFuYiihGk4oyviZa7rVVRayeOvhzj2xGMFT0Z6jE/Qx1R6SRTW/z2dixAD3r7YHOQ9H6Nposu9ts9mCxcjDMr6sm9pmebJSqpxHF/m3j2/NQTKuU7LR/tT0vxVlytUy1thxUwJH/NgCEJSd3O89HFiB7y6G23ECb+NYwW4CboVKgegybspYJFLzmn6YZYCcUhEMbgdoWbYMi5dztYkDScPb/qKeensPO4WU44D5lYGgvsV6V9mbnO4XiDA2ImUy1mLGaYXzM7jpx5LoXktvDoNvTpQjw0PQX7Nrf8h2HYNo+Xt37RU33Q+YAcQ0+01CrsCcNUSQLgAL35xln4wtx4JUl4TYjawtFip0wfIBg4Kn2RFiTaeoP8ducJlerbjJTumUgbzlcBurInk2sL0FoTf1WTd0DK6LYjqr5kLiYZLQlSLXcwujWb5NEqyUrgLmS4YvML9Ut2fKN7BKlBpvHr4s7Po6OBo0wVyhJSDazirKmk8NXvbxiT6rR2K1uGrQb9L+HC4LudsNGUmEelYO1Jt6FvCKEuID+psAFlqmxypp/ebd48Rbnz3vy6RExAdHn/qhWy34imEUi6x9ZX4UX+2qZCPYhLu/wJ3eHs6JAuIgmuk9GVbwDtpO99St3PmzQoD3KfNkYPoPmU5Gwxyd9QKjdN6MuMf11ZynATIFsH721BUF7mH+dEgqTNyON0/DhNZx3FX2wbX1KXIfCcgo9rusmq5xwtTmpt5iMlNGCounDtHKNDwGZz+JvOcsOLM5BQ4N1xTE7CiSFXTIY8FQLUcDEEjk9fF/NljwhClLHVaselAx/fkbwIpdgX6jOwghvZkXGIdK5lnJzazHn33+if96VeBL0sFwYm7kyTFMw/T6TGS0IU6moFHdvyaYeMpQ0sj341sJXX7ocxw1+TCb1lN8vJ164B41bDNzWJxzifp5YAgM0QqjQNbbecbO7hAEl9+Tc2SD4rZxwksgOFswNJJatnZAAwtaxzkK7+wyp3K0LwnhqW8lK+xOMIsQOFlM6NaGqRIxX2CpFCyVTeKoE2fdtGwOLzgwtxUQs2yZMDwP2TaJXDNeDdrcciv6UJlNHPm7dk9+EQnYdb7DkrANNz5t3Ki+omRVF1h06SnN7wrlQRqbYAYxilC6zuxg5A5gvonXF4fpMo1MVCOPrfCEGOSydK5yyqTnvoGK3pPkrlQ2+IVPjnk8viXqXqDaiOIDAu5/HAiLTPkOWCeMbIcqyKHXs8H9kE1PSmlVChFH/TjwUuDR/m2ANoo07m0jf6MSmVVaQKOkNPzF9lo9kJpvUGGRvwiH4MSiZGMF/C++PoLlVdKkoVDiIu0QPrTyR8MOfLaUFd8Z33F50P6tupefRwb8ZA8PjzKDNXMOaV1SVGGJyO6kdd5Ik4Id3/l/Dxb9h5Dkx0YscNVuDm8nPv/T+Bu+D392h4rwNnQqcoBLS2T1sIakRwbr/YI04tSUIX5Qqi9MKv+5hfPQAAVwF4Jukam1IuejrL2SMcqGVcXL0dLSsvrJvTLdEHGGbTT5kavuzWw99EdztLh2gNq+/IQqHo1VJexpP9//9kAAQAaAEAAASIAQAAPAQUiAgAAAAABEQGPQAACAAkCAQEKAgADABlUaGlzIGlzIG9mIEZpbmdlciAoNSk= + +# +RightMiddleFinger=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 + +# +RightRingFingerBioValue=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 + +# +RightIndexFingerBioValue=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 + +# +LeftLittleFingerBioValue=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 + +# +LeftIndexFingerBioValue=RklSADAyMAAAAYHbAAEBAQABgcsH5gwcDB4PA9AAAAAAAAE5AEAADwIAQAIAQAIHAAEB9AH0AfQB9AgFHQEYAcAAAYFaAAAADGpQICANCocKAAAAFGZ0eXBqcDIgAAAAAGpwMiAAAABHanAyaAAAABZpaGRyAAABwAAAARgAAQcHAAAAAAAPY29scgEAAAAAABEAAAAacmVzIAAAABJyZXNjmcoAAZnKAAEAAAAAAABqcDJj/0//UQApAAAAAAEYAAABwAAAAAAAAAAAAAABGAAAAcAAAAAAAAAAAAABBwEB/2QAIwABQ3JlYXRvcjogSmFzUGVyIFZlcnNpb24gMS45MDAuMf9kABAAAUVuY0lEOkdSQlQwMf9SAAwAAgAJAAUEBAAB/1wAE0BASEhQSEhQSEhQSEhQSEhQ/5AACgAAAAGAYgAB/5PfEvAUO68IdNk2kC1WnQni9/FkOZCSsMRA+Mu1LXXp05XEK+/iKZJJGMvx/I9JKNRFKYDUAM3X7bWltkEngOIAuZE5apk6rr3LiOt8mE6mGgtcXCqA8SAj6H7QTK+vFYnrzf8lrJDHuPn8CAALNqI1AJniG4LUijBr6LtnlsNUpOt+OXdHDLwebg//A8ZsZwBDkpqTID253yRhLBxmJq+opSbplBTQgM1ba8bkgNUpp91Pqa84+5CvA6eVm7mG9ah9/a0h58aFuUC7TE8EWqLCutEvPccdhqWf8p4nqEClDLvxTzfyBzdrX/SdWUne3TmHxk1H7MoYzdxQ9ZNWeIGT3xcCzhkS5efhc6GXfakwj+PhYRe25k9ohZzxgMyeo8UIWSl3KpM4s1i3rqa6sEpIKdPkVFO+aIdyyIscRH5S6d31o/gbnGyuu13aqhNNgQL8Zl8Zp8yCJCxrl3owNppa7DBYIWaSqufgLtZ1IRAeJjt3Evisk6se/ETLjdJQ+Nh+gVHEVQIFUaZGIohb6dS5TzEZBr30X2hIQImpq60wRDqpOXX/MOEOSc4v3tbTYrHmb0ajF6T7jocmJpqzJ8kiHsCMw/uLQZyr+sT+AkzrvOBxVv8NtA1g/353MNrGurJfRe0sS7BEg+fHj6CaNpjQnvYJzF4JemF8IV4qzs6TUC8V57n9ht/07ctDvzaKauCZIP966ptqGC8nViz4aOIX9XWcM86rF1Sgy24vi08eVrwRfrXPzmNit3Dzkj4dGqj7iPF6UWcUGq9d5ZT2eRuA8D75S5tYV/riRHk5Ewtm0vJzq952W+WlIBgTRPxgtcAzf9RqiTTEm18krBcXq4xQarCVBTFCWPUkiyDnrfcoZk+D83GGOWp8lkXL/2MEHRyouZcwu3Rl6/CoRlJ49NsVSLdZvDPZgclSGqROSb86okcD4tk7WNHHCHeul8KYvfH5BWx84AONw6WX1pVyeCQs7BafsbUp5qMFJwS6FRYybklJFvxeHN4/HJo8OuZTj+q3nN28HRBfDb5HG6U/VIJFiwmlfqJL6dYpQYkVgNbSysywzAt28ray4vuzkXol5fwCvSzNcc51NXQ63DwRAqSqcv2v/pjLfVoDphgslRhK04oHKxHfgVCeRpucPva6Sk4NnHvzLrRY3s1hW4VAexip42MGB8xlDGeoxKplZ8vhXJ2VcoZAnpO4tSwEfZLpKbQrZmDt+PgrQrN9iWnGUQetEktHX0T7ACmgBoah8zBT0k9aMSfNr+E41hSD52yD91Jon62y3DAaWUfVyrIyUlBrtf3d2mq4fZ/wKz3jbKmNxKDaWIBNu1arWvcPew0kLzPd4G0yfWUx5WB1YPyoV8yNfQpQUm7sOz85j7Wgl6J7XSRP6OHY6wr9J/InrJZoE1oD6L44BoSFYTzbwGXE53ULKt1ZT3zci+juUCn+468IisXlHrQnBNy58LBxpwbewiRCk3ZGfVO8x8m5npO8uaMHOsV2nezr80z1rT9Ck0YFCSYgiiES+GNsmDRezAkiUG9lSPQbzWE5mE6rjK3AVJ1L2vbUOvOznIutb3hIkKSFx1HuLN3Peu+n/WdUTJTv04zUj+Fi84dTqZJ8u8ZCKubfh/f/KD/LAZTyhmj4vEOISoj956YK/gBwP0I3NWW08AO4V52H4LuibCx8/1XO+eZ6/3XNtgtfTCKDxH8Lwpj81AtzomAnDFJm60p8Iz+VRR5yPIsYOicG4luQURSWTgS9h7GzEizEkjz/CGxKTHpkr3Sgyz8jaeCC6hUnzyz1Kh/H9F/JTcuE9lJ8+zbrJcPg3RdalYyGN2T5Jub9y80L2D6wLnUL1nqcodw9mdfMK3cu4sg49lKDmfHksokCMg1JxgDcCSsrKsHjFJy4pOP3WmA5GtQkD3NO7zW2yqbz/FaHLPdOVRBS35b33dnnNGSKgV/xix9RiM6gD3VdVrzOo5lRVcW21RTsaCjudHEVxYhVeGk57H9GIQCwuerY0+oaskkO5vBId8/nd3I4nB3/RuD2KnongWC1qtpR2cR2veGiRRqe+xyXEr2BSPsT0tZNsnG/AMJkBaxbqJGanKfmhti8tteUfkbPt3RUsMoFMTMzLluXEdQ1bwax8WM3OwzJred/JO5tl3mpL3f9vcB/mb7m+FTpOuVm9x9iU5cbBcon4HmZibScdQ8g/SHVnsl/GMxxQ1xotm8PAziiWqlDt3m4nhr+4upnFtVn0Kzbagvk0BQyMT12HsDGTizP2Ler6BtpVyZqXw5321XjSHcEMuHa76jbEjTGiIOMWuCHeI/nbJpNcAbJHBKHB48vUwPn+jOWkSuPeD7WKtNsCsr8yxVJROkPKVbr4UCQ9ruUILZ1iH/4O9VZVnfDkYLByoQsj+FMWKfAjKm4giWzxoWBaFTZTUT2j89fnJPvMqF/UdJdxO9jZCXNX8sAwFoDSrK5w38b/ytaOmEZwvXmx5QOS2PuR4GKkB2pwgoL6cPP2xYOG5nBlTQ7JlyI/sT0HpEKVm2WaJMpx3N5eaxsxvaaiSuAy9Tl9DicHaKguboq67L7PEBpfB5cuZH7atqkeMZ5HGCsLHmVI4/DJPWqLwXSq0SX2GxjonaJEcxmukijmOXB7oM8IEWgT3Hvdk50ab5pfQXCPJpMf1QDVkbR92oFmKH67NaKwOdXwgH5JpVTvpduI1fkdLU9jf87iDZqT+WL1GngrBNlHVMRzbDPoMLQQc9QgKFfgOdT56fo49W5oDuG6KdAMXkG47blWuFbzttntstpYO/ZRpKo/07yqcqxqvrnHQZEZDBJaGJvbIWE5RZLdM1yTuaZgXsy0bkJyS2SspLsQFbsbeacm57il7cB12xIJ5VyZmjAYbrDLMe9PWxnzJ7D/j5SsZxgdWzbDincjgDZQYbNklclAPXrA3+jbxvVfTWezbltgvbXVEOQSCtIYRM/5YKMIF7ujVgZ7BkwoZ+kNnMuDESuy9JF5MKMvgniqE3mzvdoFyaR4OrXVs7JMtVYfA7Bg7QH9jGGQfKRGIAlfwkwGJr20ZAKBncMBBMKFowa07qK9UAsa0h2ClPvPPeUW4sn6vrvANUghfOW0ROezhbSpRCzFTR4YT21u9NogbQhWPQ/7fpbf8ZCwA0vuK5w+IfN6xcrQky5bLGVTOruQ6KdPdK3cuvXbG8CZpTUgc/kjpVzClWZwCeAvyLr/SoEPGIAJX7nPagSHNby3gBMquNZdb0OVDgFvx/PbJ2//nLkl8RR3hm1OB4QJZ/ECbcphITOxoW+Ylj9WH8fDE/bBoC7+99qw8oSzzzAAcsDPd/woQmPP9XCDJ3C7HfgMp+b+mb+Xo6OAPYVowbOwsIK/ybinhGqoBsXlGnURpcISPnDANQRyznSqzTHMDsGtWZXDdTjAQr2EMFQ4Ol6g642t7/+JQZkLRiNLdIVuSV2E5ijyj8oii1fCXrMWS4Zr6rMsWf8143sD4S+IixEJIhmULoRiwTKphBkSmQQhcYc7p8kkm4LXLgsUiqZkM/RB1VbwE5RHi3sb8VW/VNASAvDjtTIZKQmQZMuI/hMQzvzziJ8gXGkglaZBIxsQKUnmHvsJ/bMdoP5at/puCws763p+/X8q8P7y2PhpqNzYGOIVSjSzbecunOXvXZ02jIml5Gkla0XABi1Ygr+ReXOY2qcpo8lLIDVlJbjxJVjz9uru6cDKkFOE+k6TAtCO3hEUzOM3FlpBtlMshYq2+gQUrxvRlzj+EroSx44MiJiXnnrHs3lRzeZhLgfZAEkEI0JsfAsOwtZkHGO3KTihrBnOA3g/dHTfgUe/MfkREjUnbRCTCUxS7D/SIq4xAPo7iCOK6C7ERwgn5u+n4+K2Y4ktfWDwDROWfvhLNdMFuS4Sr8H373dIiPO4Oy8moVKOO8Q/iP6phyvBhq+ygjuftQxNoaxvrUimnTx8tiTBvemU/jTW/9XQ3o0o8QJ+6MZ9sq6/aqDLZ9vS7/QL+o0oxik2KYh+wpJOE145ggWmfFJ60KJVVE0AHvDJIxtyFdI2ghaBMrpGUX/XKmAvbeL7NsrZlpz54mJV6k0GjCdeYFBHCfQIJbwVKkU6/eKIoQYRhj0pXrsrmju0e3ATUcOfaJzrCKaXLq6ZEiGfNrmBuVHHh+C6oa0WCWIkyhrUvhJJ5rXjCzT2aWKQT6hseuievSZJIKnQep1yV5iHdEi+Sw6gICdmAQVdn8Vdn0cF8PH1JyGp3LcfO6AVSuqizoiaw8TizezvHQFd7BmOU7tmDLuXFFFV1EkSbaFL8AZ0YMTRXh+0hFKSbR+CQnl0yNEAMeHjh/fHqhptgUDDD9lfOHj5mCCFRIcjXWzTzL/Z3/O6qLx0F+N/uNdMJ26LWY+KtzliDUdoctfzMTovqZVU01jS2ycSc1feykAGzgKrnv+H3wyOI2lF5VNIWHr1m6MRn4+8cIzDYHP4YsNYHLgzjdMk6OlrFGOQlLwE55NuZXjyyfHD949J9XU7IP4jKtGy3OTvxMayycTgf0JsDT4VQKPZ6p1UzsqTbcnfAcWwt4DWFfSIch9iFp+kxlDF+9QKEcryatcfX73riQE94sncC3Pi53tuozw9kjl5OOXtHtPkOqEmWEgVCDxGZ5siOBQaYcqKw97KhWaAdf1UTs/F2IuJQBW6wMaK9HqLEthJwnPx7tFcinJFBrNyg0R+o0lqTYHKmHDOBHOdoksagwiOnTnLP9BfMO2N8/9Cjn0KQ/WxcA4a0tC3nGQxVh3Ag0y9iOYYUJU30xbE1hPIOHbEA95+Lzxpl6cKFANWf5KOngDE2FZaalsd3EExqugkPlvBWbiu1OpOUNmeBpCDYnFvDP5I6PSWp7ryX3oRPWoKcnuz2C7TphZuCkqY4UpvjTiw5x6p0cayJBJ/XBaPBZx6dVFi8mS02qIsB9/G5VNq5syd6Wc9FxYGonyoNOUE2Kxx3hd7AUuZnacBCD69jc9hERIk5oiOXOK2IWttygyaOU0G1hLD7c7byWQuAF2EDIbCSwOE64W32/AKB3UEMC/1PKW5aOk998oT+ELcla8gWaL/yjpqooEz5neE5GnuzauwcNr1dNhNc4g6DBUyWluELf/LzUyTJTZidp4uGgRsUssxAlHssDUFORh2380Jpd/aYYYP4A3K0kLpHSyp949pcuEO9AEWz7gkfGULjsX9c85BXlEWShBN4w35MVZVaaIE5aRMiOgv3JO9BrzssOxRRD/Pc2fW9by8UixfCBf2MzgwDtzvaHSGHq3sEVIzQdRrUJ1qZy36SinA9JonHKeDh9YbSX6Gq335F0BazMmBgoqHgwPjI3n+2GZHUZNFGcReRNOAk5SvMlf5eBeV54tHDVJB7DdpmpL5x+RdCC6VCuekYUjU8T2J9k2nrUFP3aTK6FXEx/A4lqDraQe3PdHoX/ndjuov+t843P9yZj6W/5UGFeDoLx3CJouhTyKKAhadxK0MnP5Rk1HERd+hOkBM8PiVbYYpgwRpIFQL/Rjf/l/MVXsOO3ymGVnA7svKlLaLwTBRe0x1krs8Y6IDaMT9Cfcjr7u75GlnkewNNwceW6wgzhSt51RY+OkaKcnhPYRKxee9+j2OhF0JPqJQIsCfhaF1GIfEjPl9A0r/XsgjpCbIvxX48tZLA2e+LU0ulG1AiPOE/bYz2bCy+YpgqRgJz3FwxhoAZ5iok7zQeEb6TZQe3iF6+8BQzdfjC9OlFrGl7d0uTHJCVqlaaVNDkGhdh5Dj0Lw7wlA8l9nK9GP2OD5Pc1mdUBHw2aXwU/zGRVgg42gltl8po9w1XeyYyaHaRzhj2+/2wN/Txl1vMkc0TVuKybvwz9Xem10+CE0KQPDEHxsJjgM1vivAEycTyc/S/8NLnUO7UpwtAm1iV7ZnS1l9RywEEwqU5tPvRnX62LW0QRpJGOAox5m4EFEz7mHwVmhH2evUoeNshsWkm5nvkMdHeYzLrF4x7zZT7bwVSrOPuv0yg+um2YT1YpIkPSThVwCahQ2blSVsKetv6T+VUIIyErfAI+ep7H7LZ6IzNSZgxhUFb9VetkqFTrHCgbVnO2aMB+vGl/Rl739v9wMYM55dro8E+uaKJGTQFGs8KS1HHduWhMmpE8qPpsoJ2T3Z9/W7UNguyd3rUrTBOimHJwyVk51Z3GSnvAmwskkN4Cxedt8HSMeKtrht/O3btO8he2K/4QegBerwNGMpdjEoSeWIXBvPePJKIjQD1AvnEAnQ+Z0aLAXRwZIyPqlOd+pe/gg4LcEeLpcJ68SGCSa9jlXcw1Nix5MwSOMLwKDS8Zs21VbsmjL4Bys6hTVd+g6P1MppSWxaQL5Jplg9NIR7bhKVkVuKsMXIzG0T8dPBLaPoDmwf0yp8/GAAXGBY2gps2BptI2mIQnE7i+QviMpmssAqmZkCGDfwGJVp2ea0FrIhQAPUQ3vtxD6gImezIceclDUvG8B+EZkk7A1T9n60iehC7eE0Imo/3iM6rWm1BezBFfXzwdrRPk6QeoPnr6F2Srd297M/s/ic4MH2FTs8xaw/L5pQdhLb6SGPQ4qZKljl9fJ9mDM9lAsA0vQ0IHODYcKuIs4vwrqvbRXrifu9HIuE+GX2yyj9UPJhUjUa8ONE2M6lrjkFr3AH7UZx5ocOHJUteBihvkUOdtDlGLl7lqS1EYOvVAx/FZ07D26nBZcYziVwEijoQRtrj5UNJmBeUFeuGvim2qKJIXZYQyrT30vfspA+Gu4OkXnFiBaC0Nuj+ymz+xcE8T0Kbd4tiFrxvfhLtB1Hr9l03LrHQLok7BDYFCxQBtORnTyAjdd3Ol6ez9aXmsqChgFxRnXpdAfCWxQW36ngdXpcNs6k3+Xdp8a7wnXv/mpSk/odiCvXKbQAEbwMBYTwv5ov67b4Qf4ono2tJx92EU0h9Ortzb4Pd+v/j9GNVJIl/dTJmw9dTyBWw7Ntdnc47UxLmUimjBomcAjucVab7PEks7BERKAgyf2mW/htzwM+9H7PlsQSenPBF3QnOWqQBfKIablBq7O9wN40TDB2fG+E2yHH821b4nr/TGVH/xhZRZa+4v10exvKobvbyygsQOndaIb8550EtKuVbB/iDXJpPKfW5ZdIoFXkzZd7Xdgg6dZtzCk80N+I0sTAItMz4cOOBAMbAvl1Viz8DpW8+/41GRqJytv/PWEX8lKdeEEV8K52SgmYL0szw9/Dt8ZECZWtLfiXbC4NoAetWZwlTCb+huGVitVSw/72M7O6tkuYF9Kevqc4wqFMTGJax8JEhHPWzFSWoi1CRXHL5XXQku5BLWOZkjY3dj0luujabfZ7zrC5mKQIkhrD1orZj63rzeBp+J/OoouvT3nR1WuOhnpHz0X7ebKlsoocFjZkQfjEdsjtPnMMNGkazslajHFEJg5bc9Yx8u5e1xTXAw3VKYNLXoLfWRIEqy8cPGNjYXNAqKlBMhf10mUkIoWlUrLZhuIO27qIapLQSyylp91OPKi9oHrHNBnAzcum7sgylfcuFVkUNd7h4WcuI5aVGAFUEKvRIMvqGS6ZZvRdA30kzBF35m8G+7V5hAF9k7vJohCLMEUuRIpbhSzHu8WAV6T83s7KjAMemeHujmBeKKYvsplCt/IQ42g9Pn1YPdNi3PTSXLdQeqRuNTUQpPxWr3tbxY1ou4cTg9mWAG4ztZJubTyuVwkMENo/wQURfzAgZKyk0rrxHDf4++IKTdC02L7GfZF2aByVGxNnLs6h83atS+F2TdrswIAfDdxfDA1AYknlay3KD9hagtLLX7wknfqRGSRnn6q6U5hkWaW+E90NoARz5Ks0Bo3QUhW625iW0NCcfUKHqb7LURJtXfTQMKaxmf+ECX6At366tDa2GGsBS/gsPnVA8FERxLPA3zir7GsdqTdQunw8gqFauhhQhQkdiVgv1CF7nPBuEI42IdikkEHSoSo+DCh83IexN1YrdhWAeAMcYXVrFRfF0KHxug46DU8Vz9Zl9+wNsGUzy1nOWpxTRfSNQwetJcp0WQTm4yYzcVGYm6KthmaS15d6boKqd7XK7XkuaQl9T3lx8czL1aPDoQJydUxMD4MHhloV1ZnTOmV1nse14XVbk+w2yuUFqzWffwMyqpm2NVmAWFLjDG7p/uNejD9/Y8HFHumg7GDQH95FXO0yjaRLioVPC4Eba3GGGj8ixowfXh9EhqKW/eh+oK4QbVnXcaNIttYefVFVgTRSWq/zwxb47VZVuw6p5hHpj1BR2R2by9SzriPVyvco+j5Gf8G7n3blhW7qc3ItJ/CsWGNJjlwegFKmipuXvm0Cb5faojaETQpjqY1NZFVrt6n1Vqn92xfZiMYfycRaeOnNysAqE26/SXpxZcaSD9auUXpLA5/LEysjqsIvYJTcWaKlqFK+0wDPV2ZnrbwepdhQ1gBMR5tb85p59q49SXEr3Mlo35VSyAzwJbHe0BoStQMB2EmcftTQ177Vh+v4NMPwKZUe47rSJSSLXOtl0Nwtk3uu5Ftc5QcqFFSuaHECK8TVobeXtb+N+qjL3WbopJD03dxYyj4ESmqUeKwJUsz+5kCzyDsA3yEbJKu86mnCgBXlQkCj63TG0GdV83I/Z/yYKuDEIZmuYCgd3Mm2HxZaLbcfFh7bSMg6wjRsXmjbuIviLYglThIBo9J00BHkRVy3RfonXQf3J1Vmg8csViIcugkmKnPUK1XY7XrRJGaPrDlpchCi1qLjYPDe2kSoeP9G/NAKOfijkUR4OP/bN1fULzkt3tAexq5aPin+OHmGr2I0ZTCT4NsIqufLYtM6nY6P6zQMeCbmH44gW3Zk0gbnLmzjcy6ZU3fk0iIWE2g6uzPsalKTtzyC6m+kMTrPdzjWJ/Q2bnGRCZUiP7ZgU1NkQ+iSJab+dDoEYQbxQp/ZsSIm3v0lxKY863+i75vcGCgIjEBqHcoDQzPguo8LMcGTE3cf3d4oiquw26KYisUfWxNdV6t10tSLqwmxX+1rW+U7k11vHklPI4NcMh+JLW4aYuJwAhH1v12kdIU7sXDFnfLFI1U6u9Fb3Lhn7Tv42mLsKuWpWEt0wxBymjzOVJVWRlu9kGg9qZ92tcKminLY/Q2bMENGKSL8BlI6lpCWlwC0OKxvTQ6y5ityH/mbex9bNAooJ2BoiDgC1wZYZCcey3Oc+baUbGV7y7HEOMLT06+Qx5VTR05HWJFiFnCI9DCu80kS/n7QmQmXM50Ud2aW/nUGcSk/woy9coSiDC8CILHTd75cntg1n7nMs6QmvZ5oPK3bZOlEdwTjAfZDMZX3/f1LGI3GWD2hh5T3erbpHhsaAo1+YIlR42GyFocUeeuMDcZOeVDL5n/Y6SolCpZ57iLPuwSYbBmiYg0qRB9uTDE4Hm+aEqssATiAdLjhWZaZOkOitzCnbo1H9IXa2V2Ge2gSM2jbpLlZED+BEhx40eDC6xEBtakRG703x24lqTJ3sX7uQmwCKL8U4cehRtrDhbWnNAWO14kilFX8MY1WRsvMD5kWSfbvVLjMX9qJzU2zVU2qG6Oq0gJxmOxAegq6aVctxkQjx1WvFqE8ghZObffx1Qm13+Fc+agEhZ1CHio+Qnj3nvz30WQHfHxsiUMRPMX/u7z03MxZSKrvBTlIgS48RivBjGV6NyZQWwBkwiXQWwSaOo8UwSPSH92l9hxRRdBtnsYIdKsiW9UljFqgR+V3zzVbNr2GREmi3ZPfOQmmaekZ9z8KKa03GWn7YC2xCswMhrnko2bTRpL2P6ShuLXPSjh07n70Wl2lqqzEcvbjp4d1ICuolgKb5Ik5xAtNbQlQIIYqnoE2ty2b+hxMFpuDczDXddonjlZ+2cNHaKQxpbNOOxZ8Zd/AF5e93/t6Ew3LwHVwYcXbsKcfvULQKbvf18EeXnyJP5xG04p8S3bJGRCKMECfyr/Sw7ZxVRER0TOJDnLi2Y5sO+/LtA/Ee2Ng2AKk8+PuCZlrfAInh3VB8f0ZGe1UPkmfGcclna93hjk8TX6wGmbu24a4EoalhwbaCCdGGAhFhavxploK1xol1gJl7inKTG0rxquw5EmMgLVHtjfG1Zetn9rTsTxgksev+oU69qwtBzEEMwa2mVlfkN8LP8lzrZ01iwfK99LUoBPk2PpVjthf0axeUL/bRcYQxga8fjiTAeRDqOG+SLRQZ5Ry1vQhAJLcARw2z/CawIv9cB24J+TIdCYVLTOzY6/ots8qP7n1FRrcgO8YgR4PRGw2nRAfBihqMKuCoZ7KVpM9VtLEPnnuZ+woDGSwWYto6Fz0srjU74Y4Q7c/QOqvJMXIrlgwMswPan5YfsJsjDMVxoZo9RR7H2jFazF5GywjT2y4s0JtNlArdbYMqYgUKpzOOGAgICA5vpkAODkjxPZEvXiYQvjDHqL5jEQ+i0bq8z+4QB99bvCLQTRjnN3ICH/aoBVWueZYINogqu0g6RlcqBSGKeyby9Sv7/xqHHpG8sceF7kpB4vRJw68ostRmyiVb/ClpLObmNUELwxmuJPFQ+ixyy1jzQm6lgAaAQlpvCYxmwFllUB1SkwkaKFfrmh9MBvqQpwqhagpozpf+V2XoHdyZu4Z59n29pAJHtCXGYWTKB3CD8+2A/cSJngLx4QaB56IGTusjHbCJoJC05mRMpzxFw92YJ+A2Je0EufQpJhNb6UBcMMHpavbLqZrEMdxdUDZZ5nHBPMEhHgWI1WXuWxCFDlGsJG0ERbAAoYvOhE6O/PFYnpQAYOwY01cpRO7D/5EWilB26Rk+xkIfkhc7Wut8c5ugoWIdYvCiBzs8gvbKOtVmDXT75BL52p1IWxo3CMQgdXpBJfH1rmXNPBMTH6n4MpHWySLsbtevK17qALiA84f6fHc4PHMT62w5AW1ZtceqyFFZMIXr0dpvBFFZvd55jcujPhyyRXAeL49nC+6Ciq3LdRm8dKxxgJeaO6BmcPd7cCWSo9AJJXz0gk18JJp0GtGAV4bWBdJ6z1uTHMUnku5S/BSkHVfTxfesth7ul/Rpko04ChnKO6srIMv2QjpqT3FUdDSaUddNp3SBFt/xRHxfOviLs0QH+dPRwQlROOeD1f61cOq79r3XMJy/I+RC60Hfeej07kWHoYqdst7D6JN0Oc/p4lYV0Osl90yOnNnZcXacGzxv9n69zEswV5uHQIAu1vQo1CyNuWiAtJBSflZWg+q9L56sxzDlyduDZ6GliVUT/E2OHSqewAp6WPj6rU9XBu1B8LQickT7OfD1hOFp42n0pecpm/s6WLiYWFPjlRZ9ud1MQQ5Bu8FQxBzhq1yemk7HPy1JOfa82Znoz5ZlX2kI5obOafNJw0iUJ1Asgec0TyDnCoCktJi6bKdB0LIhrEhBhg4/9tJlLqslXKy+1gUuZmAgh1qgyhVBrqi/Af3iPMxYWyDOE7jrEuopG5POGT/pSotlBf8uvW3FQxWq9yUDXnOYFc38cE1jKLlSTrsm9NRbQkPACMwtBo8JszN8bCT75n0Zw+OnjN2rx0tpZJMb+cORaAwo3CUMkjXln9oRhQEc6p/wnSNpsv9rKilsAW91b5cfzegko/sU1ZsJvfCmPnpjX5AcB5tod4/QPSovc/qPnnVrSY5RG6e2/LETdLzqeNGqM22Od7XrRQSPBFmB5fFtz+jRtd5DwdWcJTbOSAG6hPMJ5Xwp7gIws7x/M3308vjFhQEEeb3Q6sfVGPSO92xN1bJOqIU4g2dxHtulhYxg4iKENEcidB8o5/PZOMR4dITSzkozQzcw0tWLoakp9x8UPen7WnO6XMImtmB3r1fqavxS8PiVct6Xe1IwiyBQzQR/CQ7I6ucjYUScvsqFuGyhyB5hItcolxy5Ohg/9jrs8724uFSN+WpsaAl/JtDgIUyjakSMhZaxRQSyktTxx09xdV2d9mkUIgoLSFsgYUynsqkfV2lD/AsH1OvxqBxSm6fjlEiT00X8V5hKaDty6gdoY5YHv2pOjYGW2oUm8ojznC+Ea7U2GsESWm098KolQKPIkLq2j9ZFtH3POpxnoJZAa1NwsPv28P/x0fUDeU0RBvF9bxV2KX4crVphEuvIDJXXUPYzDj/jT83VX0tbA2eGZldFhD9dLLY/PWbnrfW+aAo8eeWNm2YDMCjZqRyec9qWqmBLwQjXyvlVtNkPlGsQ9KVzRCByH1lkLHqjM73yUGv8l6BIJkTnJEnJSsxkTLm9RuS306t8nbjJ34NLBBfLymzCYQpha7dyQngDQqEuBazoP1UPllpw7zTassQbFWhvHR4Xcwpgezy0TbTbaSUBM9w7+ZjWUyO+zrcvoMQXaOt3x2uFwxINeeDabc1jl3pA9N6mdHqd5GqQUwu6M5GzPcSoomS0ETevzYZRA294SfayvKMmieM4wHN8ibOYfIOiJr9EuAPKT4rQECRl+/BgPu9g4B0PRgPyHU4ylRX7hgzyvZ9Hen8wwgc+wps9jUADWkFph71GMOkS0mspWHqLgo99bxCwjB5Wjtn3mLoB8pKZPjvr38z0HBWhUAdlkjitG2reDwy0MFboLKsB5pxDPjWJAC0VN2FsWR16xGDBlBM7XOuhbY9B5ihpSWr6+zUi5lY2f5aXGouVtxKeZG0z0mdio7CslXbgrj9IlWn67B3sw55ZmGDFffVivJ9a/yatZXs/B61Pwd1EUC6nv17fW6SKZi0vwIge36Z1mlt3rW4FJDf1fY4WX8YOAxTks3cdAf+A7t5Q/142JJk4VhHxibJeH9s5TA5Hne23m3NYmXxz5B7DpvxP6A4hWZQCCjaun04q3vf0f+qRgy7QUVTEK55BchIZaLbKfYXA9k24zsSOkG678wA2+zuV1wdOkrBY0GUHKy9wWori3Ser2YJZ7FQXroGO9xjbc1y8tNszh9g6FGobyoNne7Ju4BSdlUs5661kSjG70qttn6Jg2xJSurcx0OUxRuMnU0KC+/IC69X/pIqhT7TCOAm8MKxt2iiFcU8MLyWxbZ0pQhBefZo3bTTBOTCa9AiXN4/wg3mGMjvghZqYwLDPKWcr+BDtaex1LNsGA/X3Vo9NthMv5F0vSauTVsdVPc3bPZzdee7b3Ee4Fq5kQoDOrZ6ZFOTiG/CHYuR2e2rKa38a38+Kvxa/rh3jcMhurkRBtY5EYu5egQ/wuJVITk5zFBLlbrIGmYMtf1imWfqPjfHs2cZm+fulBYyEx0NiXKANKosYJQB7/vsCZouXrLvjhwpsGneujxl58j02BgZTignzSfjpbGYCbKBzsJg7NchJylzr1/xTHfriNj2owCDXiK7GV35X3v12XSDsHjLVgh9ooaOTMGmbj3yDYGVMYOZe5jQ1OTFJ/4Ia+i5GSyE/vmqFdFBWrrAOvmWRHD/ZwrdnO2zEcBX/GEmpLC4bWVhME1ffR0OxZCW3qOA2H+xSoShsfyBQjSJaDAlQQ+o4YTpk+gO3oHkTp7eiQdJuo0NQU9xzLrpw2yD2reWFUKOEhTwdMBjQx7i/tKs+LSidLIAavCrQyUR8IgT+H3goPfWYcl2rlJAb3bhgDn8nqvkno9VltzS+6dmRdFlBeAvspaizKX88FXc9Y1rWzcjmQbgRfwKgD3LOptt0H9z6Tj9l9vfWMcdsZjxDCAWIDELrpDTD204wIDYqrGIBoX3q1fmvfUNk0OzQe8+l2ZJi9l/d136nPsfRKBR2j1W9sw/wBIQbONpAHGljdoGTvzTdT0ScLiX3RscGNK6v1jgSOD9Z635fjPbTRP7c12xZTwnVKsJ5Utl+GOV3+Z2FAaDc1jNCWmzt2FFnrZ2Pv0aVSTtoVlyKHvodT/XzXwfqW8ELWb2SqbiIQIgP3sEo7XVSBhZsYewuqLqguU4ANGS3NqfdVh31qcuUNbUE7Fpb8FuYJAoJ45L6I/kiX4u91I+CuUnOXWa+ubcw/T/afEZtjntpBWX/sLfXohyjCgWd9q035PPSutezXcchc2kW2m5+imESSgmYyecTVbDu3BeR16CcF7M/fZE3isQ1rBd+jDWdPiEL/sQw39fltE1P2MJfraP1qE/raP2MD/VnR9ieT6i++20uvvvv7dXPfffQDG0yCi92cf1xxpfpxsX/DRMNe6XUSl+q/phoGAXwqx05Xf5/bxs3MIA1Yf34E920Yv+ysrIFfnZV4k2BwEsKMmqi40oIWqBycy9K72rfkC8keNI+M1gjB3vLJsIJ7CdPJnzn4a5snkFuq1nFh/7alJupmGTYRJ5Vh7ATuEAAl78MwnC1Y3Bx/JOQxs3qZFTgLBLfApd9GMiSPdIQrLsg6AEVILuep3PKkFwJzAqfFOhs4ouPoCxpvxFmH/B1u+XbWAiDsMuxKfyHvLF4O1Rx4hx6uYrL1QmCOJ4E5nHUMT5TjQgjJK8xXKj+uzUSWCeh4Wcy6bEAbuGEdjncY448eNDaa498DxxFMde7Zs98ooPTkFIH6631TGEOseGAy2g3H2Pd5boY13Pr9jFGKaOPOPB9gYtOhzBWMdZoGROQXM21Za/szW3KD5H8vIRQ5DyBQ1SxATHyFkAX26Knz/EhbS67dUh7KgF/x5ZtWzZVBnnzhIDMUfXq+7QhXh6ZlRkGzQvtZ0TExuMJ7F+ceNFNiC/buWo939MKt/0wjF8XyRoQDKuMw1zi0W/OlsijKrxf89AbcwY2GPBNW5sJmNvLHiLdTLigWwQuPqD8VxBNz+eOLsMaeuBdgy8W2Kl0KFfPQutKAhoRpRAj1+evDSYPKMM3k4oNAfj2Bpj3sUDuSavgG63D092t9ysNsiQqes3Q63sB3GEsNVTMwiQHLhOYVfp3WpTj7n/seh76ZSysWnDK2ln8cuvmwN5/5qNCE5d3teH366Nvgx6YR4uIz/GDr+h/2pPYiTR0vAz0z+ABHC3EXUM+8uTngxDZElYSTxRkb3McgOmYgeNpN8R7So5iCs9vt1qFvXioYJ5wg4SnNZ03mKCRYtHi6Gknt+ObdOvtdMD5Vgo1mkbRcMv8KXpC8nzwe4dbYvIXSQZJ2+LDCsm4/uiCMu6Kh88b39ogYdvf6Wr9Rx721ANmJM1reW19X63h7rJuwbtqi4t+gDzHRMBAtR7H9WuDhb2PjP6A9AAowvxrf862bhhsI/Xsl28dkTe8p+/YsM2voHhu6RTYAF762oIVJB93q8Qu++CD0l6JDHVzzd9ubB2LmmWPzYcDaB7RuIOs+yGLIfPBuu0IYWqgkiaCU7SoarVKyJiJfYB7x+NwbmTsnQWAYAViENKVqQSS6MlKI9fFe27zJGx+/jDWGHb+kTZsX3WIinFe1WA4NSdy6Qek9CjwPV9dACVGVCnpB0m58pcAY+Dh5Rf8ibPvjvH0HL2dLLKhlM1qWh+y4eRZQIeanfSTR0mUwmudq9y71Rq9KMlZj5LksrQh3WafF+iHYepvzuK+DUqrDooFWYAoh2UkCq8LdZ9Mv/U4IGkDvcRUqKXTmeakKbu8J828LTABInftikMy3IInr9sIAe1XV4d0OX/AbkwEvQQYE9B2beoYZxCiVLtxpu7pSyNMFMSdt4/Ro/ocXM2QFoV/PqV0T/BWhWW4SuoSSwrds/InINlyJlRhgTPzi5svI4hE6zR6XvR8WHJHOL/hx5U3EUrb4/Yg/KS7q/09BpMCSoN+vZfbYJsds+VDIV0Qj73PYZ301XeQtcx1WipwO8z9RNohhcuOOl+Vq4G8x5/eeSQQajoJEG6a68nxuGc8LVtQKLrFE5YxkaepvKXoZobio1FOs3t9VMVw/fivYngd/khHOag+lHIkpI1i/m0bkiFMIczeelixTwNLc9Rgu9h7HdS1kPkuagQauryf8ZiJHLpDLAXjedMjc3Xrl0F+xrHEm+SOSX4wZviLA/kp/wE9QqW9lS9eaePCs9Lw+DZIiy7UF34q01D458P5/VkeywjrmfimUck5seF2KJAL0Yoze5QWdP+bQccK6BwbsKqpJ6iUFABOCStP1yb9I7pjxL02xLarQOo4+aQcMRvjSN01ZEDbFAG1HkRZi+dTl9bQHrol6RQTnMH3lhPA476nRp3f7tRg88VICGiYzsy8O9JeeBOxxSKEX4N7OExdYdwBL9Chfte/ButuggvBGgqWQ6Jp6Ra2a1AmztB37l9ibmCYE0kUpIMNOoNqRLKzoREx2Xg1HcwSTeJOiA/xS+ieB+h2IS+jzaWI3ZvjAsXo13GbQDpi7V/wfJCwI/W38cNtESuaEWc/iHvPpgcNyFpT7XfAya3qNcdGFZ+fnSZ+i6NkIheWafpqb2piJ/7ypRElAvpmkLvvJDqtPK4KkvjdTz/1uPr0I3tNPXpUe+euIfx3exLT1JIi7vtw7PlreOXpFMa6HJ7fimjCyIjr+2bL43ByeScLuacaLnrRZAHsf8zgzmlgYEUDu9niEw1iP4mZ6rYo8PlnUPHYG/E88+vol65MKdGPN0uUDGd1kG7at3ygp5t7chkV9MXXWZKT0Tgbr/FIuoG5VUWDGoNmZpPwuyxTixDJ+z5Cwp6sJKUTyruFQTlFU9BArpZ/oAr3SwyDYaylZxr+gk7CHmA6iwFd8uuMKzHxQkfHtvNQHIYdKKVpfSd0pi8qJ5yGemRUVmXvLTg1+dvlb7BxM+H9HoKUriReLUIwlgHbTrvtOrysWuvH2cl+FZWWkWVCG8lya0ydh2Il+d7xdjp5W3/UVSUjUul8g5s3KcoKws27xm0gPIDcMDEpR3WMRaJGFQo6Cix1OrIru33n5w6vzOcuJERmu0q/UakG18/lymyMAp2OIO0vHUf/qWTLGL7/rDb21mRweO69CsLsMWa79Z0QAyGniOeiRWj1eputBh9SNlNVpnXToIVXrGsALCVHLl56bfwf6+LLmIPun5apKGPOMx1KHvyDbaWZJD8nc0ZmTBCswLBb5pAf4U/iebnrvUzJzN6mJrqNOO52FEErPk2khGBm0Av0IhkF6EkmMv+vndEJZ8vxJX3ARkJk4u1xOYyf8tQosIkJNYxSfXq3ob9aY9v0owNGAMtpWz0fw9ycG7bMF/BAWRHZVrXgCcMEXVvMMkyUfAnuGcYVa6UYXlwezGlLrRiVp+rviyaeCG254yDzZq/y+de8W9OOHHtsV8cGi6dx27wBWDRkoEN5LQcZs1zPDjSPp4BvbJpUo1GRTcTeXXLk45IbWyp1fe/kUFYbzhCEcJAsdmrUKriDOq8BG193kZPkFfTpq3GQrLsSBpLbUOQDmU+0mejHy1x9+oE4/+Ed2EwmoqAJGuDOr0bVLDTsB/Cx0unNHXNldHxnhm8Nkf402BCvEzE61jbDzNHTwReb1I2j4I1Akq08dcD7Lrcgv4B/kOnvlIYcVpu31McogpFcj2pWR0xJR7338rvJCIouVHPsmkE9elqlYQw+JFx5LvL0CyQNJdP7ney7x5pDjUzwvkVTQMd+H3VnoUtCK4bM3eyRvl9mCq5LYPetACAqhj5LrBSm74/fkhRlu6Agx2I8AANWiIpdcwlOhb9tdy9XJWA3ZTT3NJJ0qpFUVpTLt+M3LOFiIakYhZK6nyTUhr3ZIj040ObrJm5j4S4BDYQnjqXPqlG5larxMtYP2YuZBdhBheYdl6MVKMVyyYwqM+HyTd1V9lr1FN5UZIsYb7v2WzqQAtx/kXQ9sS83BfXDwd1d23oWZdnwp5biJdkzknF5sT9HmBHwZTcGQxwStiDq8a2pLd8dGyI/LC+L0R2pyXEuLtCeDqsx2z4Iexcc5i8bXEj98gV2qqUuVZdnekf+S4uuuxAh0sNG/PYBLxfY2dTpx5VWIZ5nNFNN+oXziHPsZbvwNgvrrIlBekGBjcYazTHySI8USntNQfmmnocY4Ov8zBd/JD+p974CGAdfJqshyRgdd1hwZXHhZwEgM+Sa+pIpLCtH4nHn92KmmBjHSrX0F7NvdoMTqvfFgQqxSrT0sY5GXAk6mXhfHRvEu9LnSsykyFQZvjrTUAteSK1gasKU/Y6j3y4kX1UKfhK7Cq3z1o2IDDruKbvfPYzYeA7rJBfpLeo9WE4n/4Uy0gTGaxQp1J6bXooKB0sYjudBEbe5ij6ADDoeroi6LdgoSG+y8nfABnbtzg0QfxRkltaxR49N+DNyogv44a6D2cQdhKlIQQFapKD6ixLtXofFfl53kEf8+5nU9M8GQ+AijKGi7CXcPaLmFlCn2Px1QNQ15koKRoB/A5Cyr3uI0WPAe0CWpi4UApddbBl5ZMKsRNGTP1Av8J6d9zgFD2J98xRiPqIZMHjJjeS3LJl0YF54WHOOa+Tz+jLL1LtZFdvsc+D6Ri/4KqxVIGAB6MbYDTUljgSbuwjqTqA7t9eHCo4NNX3UgA6F37Rhn7NHvzV0Lg8WlfzlqesFozJLwFQYQyyF4J3nZwN7kvKWDTf/rwVJbeXZI4+x1A+edJEBPe5GNWllVNogY/iC32aAMfjR6Kh1C+EJT3ebQj6itf/AZoGskfNRvVKLd+fNnb4Xoas78Qm4FNKJQkO6/yP79gqCF5hhEw9+8xNbuGVnckJSimbMtfbicSYBUFGnw+MBcVk1om7KsgDh6KOMKOXE5+t8sX/3O0FglG1mpc8r+B7lQ/Mzh5R++sZkItF6kjPT+dwms8cShdWlFyNkEiseGRriHlC8zDlzCHnSDfmFnNLiegGkujuSZob7JoY7x+qwb/aRDgeSDAW1YZoxW1LE/ej2NoQxmT5zTHIFcVryYG9m9k4yAxx5K/bX2KrsjM5WpYv0BI24FrlYZkGlTlzXaNPU9fcvk9cEMTRXJmH+5LtLhY8QIe6aFcsojVFgnCtGIFNk4FdW1swUbxNoQIVCw1SNz952w+2VMjoy0G5IPqvNiR4yP/f4CRdbKw8KHH4LjrAz9YOKiT9hkpEGlQQuf3j7J72KeRa4+gW7OTJLBHBxpIVFZF2+IBeHc+3pZP9TpfaF8C5axzC5UZ/1eGlCe3+M7ksMauQbzCoEKCqsi+1gJ8h2x5Tp34UUWXMteDnrmLuIiUgWlcffUQP9+q4sN+xlYj6bpMQqq8CXhc5YSkpt22Nm6cU1nWlhAOKBki5NNol7RY6CSUtnWo5R4c6ZKSCOmujfEHzlVS+SUqpZEC+Qb4j2mEpi2tWFCIvgikfh35ysf6TXb6C6VjGj1LLUd7rEnLb6DKfl3cDn2WjTG4jCUgCBrLGPJXBcY5+0iyHq7aBzLUT87Dmqn0X2AmMjOMo/7rK/zHk5dbyHYga0EseEItYgWkNwCOI9B3f/UraAT1CUxp20P6i4NcBACKpWOPcNxeW9CCsPoeMTMlaKR1LBtc9mem8mJM/sx8EkSv+tgEP9ds/mkeHu03C9J+2r6irHhkWBAht6ZayIMFUuz08+i5VDCYyVhMSUpjxHVYAJ6aAFMZcYOwyMxv3Mg/aU/Smz4qlwKp5algvbCNBjblCKKncBK/PCPseL5ln5EotyJqYmBGjDxpJyM+FlOv3DbX2rccHxoOeXQVVPMbHoa7Ipx3ViqmgYHLOiEghuQmwn6wlp6mU6mdVv16q4Ca0yGWH/JFLXVK2QYm258suJiFOKXr3T25yU8uZMJ5mmhuBCw0LcPVA3Zx80xVg98rWxYPOWKEiW/CVcgGmPtTA1y01xk3plMMOG9wVOlI6mKzjCaQCTlZ21eZvfRZBqUE4dEoRnFlDhVbZ3cfgrlNLWEUIQER84K9vbZj3cOZ/y/MXItgMZHWDt65XJhEooO51PyKzZa/hB+JRu4SD3qel5YtH8AzwESCiogPYPmtCUOgik7UcVVgvawtq+ZMm43hWKqz+4QPLP8qUTmhf2Q6kf804sEhgPWjGNsiA31ZcXJ4HOOomL/aFcY2rXxV4X2G1lM/TMbbpHcMM1wBLiW3a8nk9hulTCamJKrsyuSG171dMOrM+bOFTYwQCchltPQGq8f508Kpjq6GrQtCkn89BWG8pmfPAEmqBFmE5d3e8opIHj99pXjaqvSJwT2Owxdtv0mEvaRbY0Pg/tI5CyQ/LPI15Je2s5d4zXb/d6JWOeBURtWkArMET0V/7aGygieAnLyYJ+kiuiVUS8q4WGKYFEds/ctNGSd7JKyQ/QYwFFCMlz9X/NNuk4ZtXIJlGoQYT0sFVA4MO/hv8pWZPoB90nKVtPKJe0lTwFUUa6G67ZDLSsMxbLkSLBIxtI4dLJeVOmUFtE526FXn3SG9z3f6CxdATSSHLdbcYdhO9Hhh1u5jZ9BBpbVe0T8g0C73gilZpu4bI/2MpiOpK3+iGVrFHFv1Vmqh2hfPSLjrAhZggLGyCYKIMwJz3dYCPYjCeRHio82YwRfm5FnOr3MGIZ9pRl/zIutsndFtak4nCPtyEmschWKC/ll1Fn0ZElaowVqRAB/V1rXRC8NOdSE+LigIbRJr4/LYSmDOMabkNcA0deBn0IcD4hCzS6wlkEnomJsAJOif6aQHxD2QisAla/40yPYCTsdEUtHKVLo/IoeqEmXuAJWi2e6SceoW9HyFWx7sTXai8Yor5O8A5sph0Xlmfiw+GixQ+Wo2vBbeeMJZlaUi9TsHwDHLubjZ/ANq/rLOZ2XUJzPNA0f90oDvMPjhAQ4lodjL5nUGAGgt2RiVNJtUVPIQIOAV4mlwC5WIqyfLaAP9dxoy+UC5lHLlyT+/REnxYyAbnZkXpk8vvD9QD+FFbD46LVitMqojQVaSaJuH3JV+DopPyfFUdA1vWnR2tgacEFF3LiVG/XVxu7cxKiw/LQIDyIIcdygaKMLaCiuuTbAIrSKHOdc6WgZbI3NiROFrnr52t7SpIlHAoppfIT2DIvDvJUJGy6VE22XyRW9UHepEI7oWiyk97aA3+e2GEOk/QTqELl5FrFwAlujyfLmSFyOAdzMNS90/95hwTRzEh1lxT/xxeJPow9ZB50j4B3ziHsJiIDaoU8Kf44bTSsJvlgrKQZBrH2Pw0sV6EvPwVGrBg33NfJghuijeHj8UVn0Agf2PTJl073mnS4kWb5C+/sCdqwEztVXh5HlqdUGpl8fIcaodgDs97fCgDtlPh0lHG6RJgBiWRWFuFqGe0Akccd4CzmtwVmzhukWptFyrPoE2DVdGuRKmiFceNUXN124S8qKiGH1bJBoqII8T1aJUnsCmggjad8yafF+0pGRezUH0cm68Pe+Mu4usVsDlnFbauTNkXIz2HCt72ijjYJfFhzzj7dUthAgLE/kdJ1Nn+WbPGNj6A2suPX7ImbFpJUehC3CzNmJZMmf/WRznUxq25ncqG1Iz4+rhgvHTqMrw2Y7m5MW4RzGtfi826RZ09dF1OMiGeoFqF3cdZLwclGGSWIT/GloMIFrJ93/K5ID/WssA4QhkqhBuuvMlWycExp5M+FCAI8se1ZCxvEnVfo2HS1bwPKYM3qvObVRpRwrmkok5DwExlQaQEdztJze5Bd8p5W0iXKMg8YfpgAMHS1c6RUrgukw0H5JrJDQwcUN1hn93trgsohJu10u3gasdRGRLsSSm+ucmjSMthSOaRLHv1gvu2W8eiU1p9FFiJKrJ/vMR8KabUVfh41AxFZDUgxdk9phOnCoTN0gxOA3K8StUJk/0S/s0sEetudBPCw0eNCKnGKppaNUXz53Xy9+uj6/PfCeDJnqeTQTkWeA61/hA53X5jEYfkA0zR2mBoVoQiLBdzizZ97GMWk6xkuflYPTMGbJx2wSmlYeMtlSCHsboOYmqzGLyO19gdRw5PWDFkgd2B9dKVb2+OXPiiyaD4UWhHuc5IXx9AJMi1ZIY2z3fq/bfKmZ8fQpZcjFMu2GmZ5ZQxV3U0Y/vDqvR8faUNtIFQ1FaQeDdiK9L3xMY4Nklo6tizE11DE5xoFvg1IgUJAEJmH6LoDNgmt1/0ADWbf2vZ/H0chKsY0sfTp0giptO+yS2yCpqKwLFW/91D4Z/n5Fj4qUIBi6lo2J5RU7bJpifiHYhrmI/6CCTGIoYdgFVMkERNdyh4US3d86/KWCG03Czf/pQ7QOZvsjYGpHNv/UpFoylrcWZZDKed7lmjgvJP6VTafw5VtkRl7RDpL2LXBgpm8k5A0v6OUjrjaeGpRfwAg3oM+2VuXzVrqnAWaE2R0Pgt0ezsAiKSaCv+K/eaW8dirBFfRJrsobJ7UX4j29Dmw5Pt3+11lrEn6F+p09ElicMmJKuZkWw2rg0YxbNBIjYD2WpogDucQS3ZuUmMRgzBDRlQvHMVvIeF+Z0qVEuSNWMb2knYYr4IkyHFobzZSPd2dXrhghkNCPlBa721ItpiMhfAwN+GnRvpsgV0JgVRF+5XMLp6y8qg5i/xvMox0YhvUV87VMyxBkYssQQtOu3B9h7Pc6g4g7Ygf5w8LxOd6gXxvS8zpWnFpmv4TDKmuBKiwg1s3as771Y+HoOfw6koQSUeRbEVvIOXsPxYe5/gGbRxy1qzvrQA8xUSITTla4+eZE2hfKN3G+D4go3iT31XtdlflrJRLgV7riDWANTSZvy+/Aq6nEleAkUsT1NHw8zOj9TcMw1huTHSwb6mHWzi8M/gEmCt8jVf/SRzVWHD3BbKAjyTbQLjMJYFnddW0X0AkLhTU4LZlVRKXdtfwLETEqh/JKPrIn12N87wU33cUAFMHyPswqUk00ee+M5D9r5dA68c3HdMNff78Lmm2KzpxYQIJ/W+0jVdDjN2duvvQ0GP2JFf1KXo/pKwjKosIl675+cgeV319TmYEaMoMBk1eI7n0GwV6ssWZB6HHk3uuZLr7n7UAemac6P0g1fBlexyCvH4K+QyLtIJU+LljwWGBjOPohIrnbSRZFejaE5bMhLs298lRdgNhxwq6hwojmuEjAhaD3oSktDVAoOKY5d9+aPq5Up/JfLKFcLSysCcNG2RLwoghsSxW6iHGsgNmYHcEQLYxLrReMxYM+mTPfN2k8DSdRILR3vBXPF4qYdG3Lae/8toEOmXJwFFB0ML00psVjyTvV/8y5CNuXVeBrQ63azZkOiP2F5tYhYVOeE8C5opbMtp1K9WTN3mAwEH2iau6VgA4tGt9GbrhIiHvpliHxGvirDIhJWC+uINZqNFS15P4teboMJq/K2bMkOHQdNSHhhoyb9Tlwet2UytVnGtykg47NGcp0JMIlwJ/FFqF8JBbGCpoUtUl16R9Q2zmV1fTUc08+Jwwm6osLZ/zcWFunZSQh3Dq6RgdjQigHqXCjevsrU8QZ9cY2FZkl+X8GESDe/NKCTM61xieOkW+qf+LnKTNMz5lF+Q9lwF1L4UqblPZrtmik9q9UdzSkc8GXQFtZR7zS0CwkXm59KL0pmeU3VB7clCo3MUmcu8jJRFqqN/dfvbvPFzEVMVeCHt9ysKmHdojZkmQaWRnIinbj+aK9dTyMAR4H96z514OuwulrVPbnKAvO7KD54erdQJDzInSKY28pU6Mu5I4/3nMUIOpqDN60C7rGolsyMsBQe0KC2hzSZFHrK7NUuYoUFugRhZLZI8CXm6rmNJMtKQjdvd8sCUOPOZUcC2MY79SjLcqOaz4V7yh5NzExAoD0YeFPviYYuB623tFVaSt2BtY4ZjXijcJ0anfV+AZLys5rA23mzCVCNcyWhbCPqUOwo2FqnYRXmXBYdosHKKddkrFX/Gj0mRHpB5jdGjfy+3uTRqoSNvSmxupEKP9m1905QTqbT6lqBDpKy8Y7sLV8x0wHEiABlM5XGeNyIVsLeqoQeOY9Aaxmfvt9JmMTTx2PiHeszgRsEp93jGEQb1a26lqIq8P8JB0Rgv2jXtWuharViQhMBCVwdROgsiM5KCmFlTHOTYiU9yZtcMRlgDIT7xYiiN3bATH5r2JYv3iZZF4oZ7wnHKHvmYWXSSuaKSCLLEhcrnOz9vihvUDQkQU34KT/4/0W3HVsD+G4mmnFkz1p/d/g/hMIWK8sYj0GqfkAy1sEQF6zqMWycWdPVCxillm/+IaPNhL8kRm1K/ldNtmTxuCA0qB3KEJCWDSIAz+vPxj1FHO6f542MIhulVEGhHHUHGzPgyV0G30qv3FeIqUMELdyywzQDjWatqqDo43Fbpj/I6bKVOPxt1CJyTAy1PuXWL77KyuKZQcaOgMhDaaS/mvOX2V/ixFCQaKre+3D5ESzTQZEfHo1Wf8YGyPaNJUmc9kvnki8P30U0w9V9UL98sPttOLvNAZi907/2MmrsfUd6meBa2mySEZAF+CQLNOzdATsOot0CujgI1deesDjpkF9Ftk2hQgRqbudxFOuflQkmx/kDtIl97uJ4mrunHKGYqAsRZtRcrcMlq5UPnvpr5GNe0BiBU893bjIqTC7WQkAqfbJc9Y1kptOfFxf5UqHTJ2AQZjk4PiOykbXrimnmJ7Gjlyu8Mo7JRqXtHmdM5okG7l9Tnf5PczRV+5Jk89tk8PzztIC0lujtHGe/E8KOlFiND3GVwv89EboChYGhQtS1bj1agbF7iQtOdzTltQEg/nILlxXeIEySzHclzNCyC9os5/6P1bl9pCOheIXYlchenHYV5/FE7s8MeiqL8kBrJB93NA1sFKpAh3sN8siiq6QyNM3O0hSDsELNKKcyCxMuruc+q+AIxasZuYX8JpX59nMrq473RXqtStTjmGQ5UhfzDs5bSK5U57XYtqanlWvffhBOHueRp5uU9ht3aD7Kp3UpXI5Jpw9rADYLxHAn+QKhm8+HeZwPT02mxfqbAE26KY2Y99R63jDOysSPOJ6G8iW04zTv1qRG+0bDGiftP99LhxhwlKTO4gvx6ebMzejxEOSivUDE3iw0bBBXi3b2/IfGvr8fbVcHg/YFTME6IAuFrfk+oDsuATS3e/CbCJMYy0i9q3u5NNebQZTb/K+5zU6ddkBZzMXz31TzmK24/0nKl2IqwkEXQvyypnjhC10EYBLCMb6ryETtEth8cdEKUour62FxJlMqdkEXjeftbaIAIRkIKeutPJknPy56yQDlcsw7u1f77Q5EHxKFSqHQmSI1ynhisZjYqSe3Lw0mMTimF3mj5T7aFJuuKnATUNmhORtVKYRb+izSznYWRkGRFXH7nvvbfJPW7onT39qBlylZdNg2JkOaw5pk69t6kRqWYXW9g0v5YQ1NtqcEg2VJEWz715j6xxDZ0+o7TmXCVFYgRhj/KAHMdz0adlAMoUg9niG1ZQ31luJDkDlnIwpc3gIlcBYPGz7+Q6dg4YPIspswxCDm/F0acrLH7+M9T2XnoDBXos6gljFRfyFUUucNm73bR3Dk+8M7w4HlbwAG6f4grTNdxk86T31rV5ZZmRKg/rZrAM+msw2vuWc3kBxsheNuys5Oqi/D6bdyjVZf3xv6TdrmZJbkgcNrFvVerPmvd1Yoo4KT7HtxNIHsmZGZLYtbpxgSgGHJy6Ly9kyoAoLGXoFmHz9ub/zx4r+GlD0ODOQipkxda09ksCfc9+x1wSM5cMs6fIw5G0fbR1bFRK1/bSqq7GNJ2Jtqs2B2v04zguSulI9Eo+g0sPdZKxuhZXY7t+YMzokXgsaZRDPVzIp06wbJYX/oeEWTMxecO8flJuiz6nKnt9K6zLx3OgeaHnwrKzFxPyalJ9eAIH4E3FXlamTwkl4vkVcgp/4ewtzQRZ87fnZZt2Z3OiQ9+PfTHTJoKD+fdDO0rQ8+8aUO/DKZf7PyHCgnsKlUeDsyHUZtSLU59mu9qwa2698Ww5dQ2Aoe+Uog2aaU/upWIHRrrfsBJdsKE7qfKL09WkihP/CXQZc24rS6wIPNpphpNJt2hhSU+NUxido49YXhtdy2bE1MooXqBW1bG0S89g4luyyREPvas+fbD2Vbq9kUTJNXRfLv8JJt2QS5ji//EWvH8feqo1S+cFfLMsgMS4zZmhhAR56cY0aICgYC9n4clmrNC+UJ05xpY7C65IdrPZ1hRiaW304bFgONU52mKTxBxfZNfUdlDlXUNriWLzHyjq0ZPruoti31Ckh13oo/oK/QuF4kB+P3i2fqIWrlrVov4BJhD0q+Lt9DvNH242IxpPFXROo7TlnmceLWCwjZAPEQIC0LB3L9RIEOohUS37rVtXaf3wkf0WyGSYyBqf4JL52jlxPBiCR2RZ2niMZL1QrHhUZGAnoLxUDK1lPM0Gy0ZIuG8mZbkvNQBP6ss/LTS67pPHGiNMOaTj4xVZtESALy8cveH9VtVn66wvPBjpSXi1gBkzs3iIVLkJtESbFThJ5N39XQsGNDmCAhwlY6C5cYtaVtZaa2jOfd1gDUXubdZZHm1d2lT9YueljgRKIza+UICqK1yushlOI00JrVhAuBmYRKIuE1V/6dea66ZUGGVZwniqYz+eDR+sDywVqAbkXLhAzjDjQF7DNKvEwS+YsxNWCG/evIBhePiZHHrCWQOw88xOCKOvG83LLlRKrJtyKYtfFfDjLVqU3EryNeXD0NRgr3sKyI3Ib50KVJ7HLGHBlUSsUOMcr4DnYm/Mq/lLmbR4zXUPL3ex00ed7p02J2M8eEeq/cmp4bw3SHqIgAiuXNxBWg363nJWwwd8qQRcjMmZJT/cbt9XjAlXM9abPaRXzgss+7jy7d+94QJO59GEUVaLH2skHUa74lwTL6ybDdUFZA061jPix1LQ28sTM+cQ8PYei30fH2+/EQr/I4SUPSJLJFQk1kzBjH515kZpUEUrtm4Yv7vV+u19+T8ZKSiX7EuKmV+59OzfzK0m0HsNrfi3Fa9aUvLEPnw3osK3x9lIPA5iVhjoHIr5/3HCGTXgsl9k/AhOn5zriwteuDcvXpgB2dIakFFOs2Lr3R9ssOwq67uLzrgtHSpZqpZO9Q2D8TRYOY7HncY8L5WtSMsW+NxiddLIJQt11bxJE8kgXBTgwj0tU7KG2aaRT968a2orbL3hWMxv8XmhPyfVTH18ruuB9pq5/8JAs6uYpXQobaB18hBfro88lKyiQRurDJp6vPjc36c1HU4DB07MenFfZKk3BP4Otc9UNpbSo74Mrvz2iWjBnh6DkAtLYJ68x8ETmDUdPakqxrsuCtZnTw+8jg8MMlyCAuBYhxTjgUMWgZa+/hB80tafnC0alAaa5SBr/tliL/ApylFlMtwGn0WGH737u4GS++OsKgie0yMNt3ApflQp0IT223g+Nvq99x5xSU6VGYdQi9ZQTc/rTDd4FMemBP0/Uqg0mpPkmx0Mz6Nj8DN1TRatz8+nlNG6pdBc2UAP8LSlwlPp6PKaZ9cJdiaPH1Knz92gNwhTzI1zjdwf9qNk2wmh1O1RwE49eVnTaXdRxnfawXZSKMpwK3N3yY3gxYjdeyHKBrXQ96mdQPaXmSuZkWD1KrF6WzSOrX/YS2oInZWeg0TBxendKo1X9/HrTGJTAa5Fqu/NTNITaxQSffVcDh/0MgVGWsdXVE3AWYsbUcAd+Z2w2Ga/Syg35mP5hoMd1coK4Fn+E/jwvbtE3jU0HgjS+gdVaExO7NIw1TvnP4O/k/SIl1nmQuiitC/2F/k+s0nbowXqicnjl0po+JnI423Tit1GB5geHgL5jSX5xA2+8gC5uBGXcd8xD1OupVUE6clfkKAtxAdLD3zsSqk80ouao4yU4vNJ/mvMleV9ieI8LaPOpImpTIUFtPMxbbn8uzrtJMn5DSMqRIH2hv/r2Gaozp/swEvkeReOvPMRgk+xHnf+QW1sLQaB/UwfJOmUw0Ef7JTqDoQG73Eha9AUQWlwGTovclWTNEuW5czl+j5E23U2maLT6atn1wtFmunQZtzxjrfyB/9xLO1ID4PiTZm+sTwQhmlkknbj7y8+hfJnYRo8oei/MG+3rYQ0vVl1n5Tj5UjL2VcykUk3l+RtQnQr9XzYDpsb2e22RFWyI5dTE4tVDI+DBlLBX1aN7TITxu1EcM5VTsxaRopCDH6YddlQUO9dgBUE9oV3rHbec3NZ9q7EOyPjgQpIaFZTsWOSfQnrfpjGPjzF+rqZPPo2E7rTSVtQHEYG0ZOGuGy8VmkGyX7dkhRgET7+l/fvbxx+5mAF1JkjHswozdqKfs9jwlLaiBvtARbikk3l8EN/2aBvPGDktrNvojV+NH0Bd4YCj12xjVFpFoknni1vRZsp9R4nOShZfdgoogsdtKEUaPtjNipWLxA0kmRR7tWUNy2JaoNF4Vq/yChs5o2NMTaERR6tlIZVkbrV8CLmvnvoul6ndTiDtGRpGox0j8RNaPrGpzVb0IW4woqoRftNS1sM9r8iW4Z4cTmzhFdeu2nW2DrIKavgFdGlBQ3jv5XtDwIhBZHW1I8J9rixhzWuHKM1rfEv5NA153/eBHuf2gD36nl31mF96YP7uoK6qaAAX85Eo2TFh39qi+qXplDEPzloUX3o2Gr495V3y+j+NqEkBa9ltmlQwjbIfxfup9yrzQ3Qh8n13lu4XvRkEQ4CE5gP9YcnIl5/UEKPM/JJNXl4T271ep7emAJR4ZGVj35/LDSKKEkyVtwiXWBflVXVrLKy0PV/g6Uhjqf8IjSe88rWaMeHxd90TBMrWUYYhSTSZTCaq5qdrl4rEtvSD+30318YAMxAynMpGIA9fCRCetw73xfxeFgwqTjhrEDSYvgmsIpoBODs1ft4GhuopCIDJrHvvyYs6BE8Wt31d1FLs4otG/ppOhno98xsEcAlPi1OvBXROTKnwy+oLytUG+gEHnMdD8nUR/QH0/deITtPPxiLSE5k299RP1xVtK+uRmgX+PqWWzMlTKgzDchUxtgD5MZN2AJdzzZO0/VHHRUzxFvlH/ERSS7pCKrv8F32go477WCsHVcFJZTHabkp1jzHbmcH/m65DP2qkPRq3iR9gQdPvecnh7eh3qjN0z/v6N2oDQo25rF2Lv4uI4XDurPZaaAdTjQGhRw3vxo+wBpbTsYwyY/AuhLAsqLPgy33BzkTMYos9bOr2/xbzzAeKZgOiGZDAmYXBLJCXxy7G+raB84vQINbOt2eHQw3Qwm/h8SdiW/1r9yrUqdNzfut7DGNIs9R7f5AdfAHxPi0E6qtMpDNerXnIQWdv8FATOgq3oRgEOYnmWqbXnO8XngYEzICIQidbQVl1RpABYmskw9Gt3X/Q5i1rrKmWCeOdOxmS++Lyg63sH2BRpaYpIZhrxt+t+wNYsjxlvmv8kPwjBSoNgPHKpibWPnkGfX3+l3H8Y/LkKhVucfJEXI5QWPnbljRJ7vH3gVNfUoztKlHSQx4bjHrVlTZkySsZI5AoDxQW1tHPrrP8M9Uf2Op/0qTCUQHQbSBDEF9sr0bmR433Ec5v79uNpOx7mWQpkiqdReM9enzWZt+knbFanIi9qg/iYWN+yn1pczT18FP4+RKxcVgr7LZyk7MYcvdS2ReFVt+NdqdzTCHeRmyHupoePsmpMBJjQ/NcYTtLIfuLGQqNABL4pXUAUEPe31SnWcA8r6J8b++LTCE9y65nKPx4Cw0wHIUzaFtHKbSeQQ471jFQQVfIFfTjcHz/2/1+IltjNrN8FUdFib04O+rz7cNEtzxi9/fD1GkNgMieKZnlR8mrhWeFPCC2I3jJGUcxeYtlnIj9juAPZtIWshTuHdct+xDojLlicbHm0lolTF61DBRi9gZlH0w9BN2Dv7lDKspGxcyS1FZUHcvs2WyOWl6SSEczmR8hURVv3fjEMG5pNZUEUUs+rJ9NK/oQOs1pdvzdQgIL7tKbmya0wAFfNrO717PPP3mZV2IXh99f5veSUy6qViwmwZQm4LLABDxoxkqQVbp0jFC+HQu0wi0tAdim2ujAgMshyaLGkZjWZ/1CU12xFz5Bfr3cqHSzK7PgTRagnzeyasNg/VoiE010KvXE1HO4DkZOPDsStzJyEdWiUFQLoelsfRInESYqYkIGFq3E/31w8DjPzK14KUmHjaUXKQDY9/3rHCBY+bm4oohU8wJOFupSiNE9UTCxh8fvz2L9i7LiFn5xPzu2ByYsMXOknkye4N3TCapalkRwzW7nswU/V/gNFewWgmue+Hb7IbhtTuGP3O7NsmCTRHUia4YA5rs0Zn3hquwZHZrZN60qOA4BhmBM1nOU2dYAlCEYAZsUcZEViqrya6/bRgclnKKA/3/NIyYHDDU3YhddHQJwZCNVgp58E77qvo5m9nvyqQ1a8lrMojGEnzJJ1VkB+Ogmgf+mxzNdiy5AFjGIecr+htMfDyRjTV8ppRsNKafQRNMZ42/K8y9tj1O74Wx5v1AagCARYUUL/bG7kMRRyAkfZY0qS0CBaKcn8YF716r3du9B+YvCVmhAzRaXbUwfw4kFFYCQWjAiOp/Gvq3Sq/vFbT3z+hMg6j7IOzF7/BXkr1JnaytVYEo+hchkDkVNmY6BoAObpfaRQCjDbgO3CiGIC3j1/QOta61pDi8XpDCH+Uknx3sUr2DddpuwsoxlqnR9f1LVubhC1PIo5uAHsS62f8T9C7065PBmcshJZfJcTFhrEODT61cDBW7cJhsmbEXAo8XjpZB5APJ2P0mUQu8c57k2mx/Sh2JeZcr9YpMYPQ7D/AqekIn8gvz89ZSC6oKdlxqHFAPTX64xEE9MIkKYSUNls/WuYLlrU+SmsHJHF2vVFuBaChU2TOiPRy4mn5QiBAeAYgEVHTeGGwfxWiAM1h6qG8JeqN73mVb92lnKV+D6n1Q+bzMafhCgcj1p27ZSopI7pUj8kRLRSJpoEfaZFL7fy0MakP3PGm4Muljdecdzl16Dsyl05S62pbLhGdWeEVTsebx+GqlhwAlwa+CSFvDzXmfO8JfNMxO9+HZrlsnUSl9TX+bjPEJNBJMIZSpOb4XWkvfWFBY8M2UqvVGrZqLDw9KawxB8XnnacTFN36BQB1XS7B9bQsjxKCK1vkmTlYHaJibdBSLzwGIbqVi8N5G9pVU8m7ko136T1/Qf8bm9nSCR2mNnWrkk4BayVS0B14Toy9MSq5UAaSW+Mp+TdJlCG5fPTlmPeluqEpENaF2QifCNHpohqTDO+Sx4vXMeUcArTnpR2sqK8vXJVyemHCOAFIb70wYh3PfNXcW8qLQ1K50A1O63R5OpE0iEOmoguZpAAUBh/zzdIDONsAXkuYyYn7HI9PxT22q9Z1hjn1NY2UC3tZt4cN5vvRSCr3A1I3ij8dfw2/IQRqhSzCIv5uztiLkXCvn+fObtTNcor9p7WaCxfgRSSd6WUIDGiKyVNy2VndkdIEL3q88FrfkJStIAe4tIJTRRsRTsObUFIL/2ca/dFy/BC2AXC3GLneVZJRFfvt6MW0ewgVea1zCfGiF+ZlTxMiCbBU+Yst4bdlMelvW8YcgX4Tr8mA+bG2Pdr3B15mbmniQozcmhhskhkPBOkv9waHJx9zWQGPBkQyX6AiFMZBmYugY+yOYqp5jvvskOUzXCKBKcpSG41GHD+bxlXD2qcmDudl9sjBPYkGEcD0GK44GRCj2Prys9bYHCvpPcN0V3R35VAzz756KfUjGY2rX8CsFKotKzjrTfBUBFytDAw5+Mkn3IP4JkryveFuATyfcu5A6c9xMnbb9PLs59JQKF+eSy74pczJkcOKPU4yf8HPhGgUW511+aPqekgemE9j6vsksvPGpCTnBO2Vv8DJrWJt+6vj65kJXaKdE85mb+sSm0rg5tkkGZk+QQX3t0vJNmaG0xmDaGRMWgqhE3lg3cLE1Sm66L8BH1LLeC3WZcysBwhC4dlsN8jJFbVroS9T6mHCQq0aDGwu1mAA6zaqWJgHy3jN6PV1xpKzdZLV7pvMCbEM30CE4/y2C1A7VsTRzdgCSM+7v4/jIw1OiUZwlk1OoXF81LETIV/je//f6jmPnA4bVV59yOfFrnaI0tQkrSjb/LPm3guY7y14KuTOTJuAfiOyJeVzeJ2C5F5I5XEnAdOXLWh3u4iQD4PjYUXbbc0wn0nPKfmFKENGXUoG0lJK/158IQ6NXATwA/hm9GKgJ9kZ6plfkEuYZxCYmmumC+SUYyawv35lI23s9N4Bcim4cA2WbrP6/67GVLcnewEQOI6Iq3da5jgXzaCp9l1MFB6PsHXpY6S9g3iWnB4fQ+JHhroKTPjgL1dGYKJ/nVSLq5lzA1bZMoUWDgWm9t+UCDj9MIvcAR47Na2jkmJU55g49c8UoJhq8uzmGodyHuaV/TN0GuD3dUM+6wx0JrNpS6+HPZyTsoh0Ba2bzVmyeLml4Ep4WUB6k3NecPkEsinwWXvzhnn8a8thn4HTKSKcNznTPN3Efyr3TWsJokglvNqK481+vCLAYX6uUyFWAJQ5o++ZqLo96Own2NfOPaW4oACx7eK9wtiKKD/P0cmtjqgJVrlnha6oUPXlwaAJjdLSE9jUKeX1C6Y6E/obvkNob3jsYMZhE0DT7vUmMEktcsVdcIqTozERAnwHvmIawPUlO/2jMbNkf9O8hRJ7ElL1A88jelkW4H356KPNDDi/2h/GFVFAA2XWlXy3/3zMlVR+piiyYUiUeDTeGP+/HVffIBiXttzagdBkYRXcAgTOYs2xZ9O/mBxeXff1tDDA9X2jBqOndDOQDg2AzWy4zEPuP9hVM44pBsRr2M1naByQgF86By3y67ojEJLzcFV9G3tXAJseCSLI/6RnzhjPmwbyoEvihWoqz22+ihAzWlQwVSfxusvXMkj9x0QGxmpQ4GdAH6TsdklmmzkwaOpHpTnWHU1XRmLHTmdtaTWPyUG6/KRT4cYt5a25hznwNJw80aBHqIyusgj/0ajNcy7/yYcGZP9KXMCT9P0i0000R6mIlKAZoln0W38cwIg6u5ZNOCuSqldiTFTalnIdqVQNW4AofAjnupzQqD/dE2ivbsjZjgTt6vHQg7YfSdYmOsuLywJ1OrQvOghBrwQ0Q+T3Ob968mJkWr2u9+6kqlLX0/fC/2YNxpOD0JidhJfEB6eUx/x2khs5HojiwJ0BNHx8iTQfCAVssV+ZGuKx9yvAPbSPZSlNMYQXGrtgJSqAIplZgChGK61AHGAzZWiw5VglNEwY9JTyMSACycX9jX56UsANgZK7/ebvXiaWGWgVUMlWBKqH4JyI8N4N6qQcbGMKpVNVjq7Bxsj2r6G9E7AmdeY0YRY+AB0i6zEABmNZdpQEB79OG4zSKh4URPixeuekFBoGpsF+BJWn7uzk8DJ0Ow2trPD3W/uGUOtjWlILx8kAsuje5sztm+TqBvGX9tW0OgqGTl235W4sn/v8PE4QpTC8OgYA8o+pC03pnQUNtAUfgZEYdtq1RqAtvRV9WvWG67E5B2VRL27RsfEMa/OJUigpSTkrckDoTK2XgAVRAmIyX84sieXH0v2y5SIhQiTl5a7H3rTPdyAbqpdin8olm8RkmFKcgj2sfMf3rNqjRyIgaf05EGJ834LhXGHYUSx+t4kCv5tnFXSbHrvwgtM1TBKZys9UjalIorxn5ptcBPNSLjGit0FtpWuywkt7CX+LrT6zk8n3840IZ23MY1a1bVG3UfTihr2Yc0/zP7RUZfHAs9u8jxskN8/6D8IxyHHOg5qRVB5FmBatrIDf46uZtoEIlQLbiZzYj8zaJefjjBqRvDwioScTDcalRXQ4HIKWbGmVDE8ew0nKRGVv39pxiPnOxjrAeNGQOpe5K/zvLJRVja5A1jtZwC4r+YUDwVYvCtzzwDyAkaOOXkVofFjd8qmrB0knVGzCh0BLopmCDGA3aKjrZwmCEYbRSpr3wS+WKIlW5bhudOcMFjKIZ7TjYNY5DEG0hQa2AhgDn7FTdxHuan7jcXw3XzneVLeM7DqnUFr/QDgmbbScbH4WgjiLadMpaHNtWZywhz8/x44AvN4nQdtcZY2YfNevCBnd3L9zOcbNFPUoYsf8au7ppoOCF34Mpw98H6iqwQZNypFalO1NCL/PMvB37aSTMHwx0qK152f72WUFV0QirkS/j9N7PmOHq0pwodmZQ1Fsz7L9ERpQUIDtWyTMsHt9kZMMucmxO+BTENaEWrQfr08bUAuYssXQV+C9Bqgx/iOIv6r9TQbWnZsWandGasGKGoY3EeQF5U5iOYOXCvhMpTN4rI5ZcluEUCVqM6jthPbvHgP5fDQtfdrNHixeDxD10vEc6bTeqJRlBp9Tv20Fraycm/asdxGmigPbw0icwNUcO/ej84ZxgLXcfh/rQcp7/ZeXkc5hH1G6+YhXvUhw2F6uvmg75QH83zz+wcSReFzknojsDfwTwDga9dH++xAEgiXzQ/YYCWFmVi891eLd4gu2RDmyEZflWjAX91cGuBySOMtUSHkvhP/ZTTac653NjjTyw/8w6ezV0je53x7dEnfvkOwOGzR9knPAExc7j01UmKqjutKyrmQtHmJ9tXFV1vPZwDFGcfRGCKlPwfOzFBYsvOs9K1juvne5f4LWN/E0F2C4G4/Sy9+H4yAmKzfmEDtGD8yiA8w+EHV5ULCM2Yc8t46T1UpC58b+lE7q2BzDQW8SFVBrsnCOXJYGTcXsqi+vfSy3IbengRVp9ibA+lmizZxDSdxDyXb1iIGZfmo8cy2EpEc0lxwwRUdAhjOz28RgZZrGGCFWywuCbIVSQS2U2xEPbub6m8ysswOltt+j7p1z2983rrRe6VwELjV2CkII1D+3UNDdwig9/QwEgQmvb8Q39Vju2Ykm6+vGp5xxMH7+s0WDRe0r0jFNM8aA14Lt/NwYkd3Pn5bMhds80TgPwOZ5GDVRftX5Q3Cdw0yeByhRGOfE8AP/jJcPn9/X3zxgh8xQcvqTRKYt6oJts6uYnZ8m4FkPLvRcsrHiSO0YB9bgkeNHyYM5+XMvz77nYEaQ2sn54F61hnjcSHeV9ACe9zf6FBtxu9+Tttv6kbWM2/G2kEFG9ZH5u2sGBiy5D9XO2U13zyHd/368S9t9wuv4T9Cm7obHYXQ1xuJWO4XoDpsKDpPEoKZxPBjkqSNaQ9xh5J8B/QJ70rilYBIvJYVk7JNNrI1kWSxFjGEN0oNhPq7zGBsYLDQ8Y8e713FpHW5HRgWxmu9SFhnR2gbNbsIAZEFCytD+68sBiFUZ4YUBTdmAMUD3ZAFPAbZpDhnjMKznRVgYyR+orOejaz6/P9Mfdb0fwPgHw7cuNDsR5R8f888Vt7zPL8rn64xftrp7otSiy5CZqHO0HzFPcCtCbDqwImRG4bnrMW+jO3h9hrjGFNrp2yen1rB5CpAu639PDjRzr0sNsjx7/NRjIm3egfo9Ge9AfazU2cPm6HNJXU2hYrT8m+abvIgmr0CGVTonH5+ztAqGFHf4h5A5wky45k6ax1dhSf8zg7EZRYGJvtw0Kz6ljABw4WBMLHqhm4g/yUQTrhSX+EuOynV4eLiRAEY1P9vEGAn7+uIyLLpUpSNZWY7+hsBPbJGdjdVJ34Kd2fhacAianuOUiWcjW7qMEjp+loMoXoB22F9Ew0yPhJPCKDm5KR1G+WEbfx31S5KfyuPODxYIckBc8kMBPu9Oi72oIePC9B65C10UgGkyvBraMhPZBBLQ19Q6SoboAkO/QE4kcezSajAT5fKQIXInNZj2vzCU88cqzMF71iv/tpKEB7Hr9EKoff5bP3jfT3urKJ2M0AV5NKFB5D7hww/GYMy8oqGU3U+Edy8gHh5jyTbHfmjvkvtGoYzC1u1U10emwTfhqECc6lhVh/QHI1a3+B+ggwZLNpE0FoXUwKFqteBCjQgZmUPp9l6c+wkhgHudkg9/xOsH1ot7HwBRf7FzjZQ1/6XYoDvlQWBmFtSf8kyEbbBQ2MUBcLcZ3aiMrRhjH7GcSGL5VPflgVzLw8cGl6XG7HiHu5b6Xlg1/vbD3tAOxeuKpKoPYmoLi4fEIfaaN0bAst/1Y2bTx6bFvbdf1gbPRHPRkZN7Dax1aQtREDzP/1J6aahIVuG0TYnjcD4sYR/29Jq8pmo8gQvbGJXj9/dKgoTGtMX66Btgl2ZneQm21Y7/Vmst/wDix8YKu4NOnTd2/XorRarR+v5zv3EiU6S4VXd3zVPbTC803p1oLi9ERdJfD3t5em5vYPTUb3QrhpGSBN2pJwB/SzoZAe5Z8muFp+CzSH+VYuCDzmvr+l2RPnxqQ6rm173tKo95Mon1rg2eCIcJ6KH588cG1uEhCDgKJgQBitZqmwFy76McYr9KexMqLmMwi4/L7htZMjW9ILP6kyuJ7hpvVA+teu3TQHmLAEQ5vkxVH29yRZm0eiDpR7cDYyfrtPR/LZjmjwPe2GFglDD9LSQG0hltAS9sGFJPw9nCI+WFbDb9Q8An6twL5FSY4HTnEkVVsBhut2W19vo0Wc3cMLz6MrVN5Z+hJGJ57Yj45AIJ1ulGhs2lrD7gvHJlafMeWs7vBu+FVnsXFz+SGp4Xb1enbA6wQf3akGCURBp8RWTRzE3gvzNevvuqNpqZeHl+BxI9gKbIII84M1oo8qubyaXBRAWFclIxOd6CZVt1Vp8ZKBQfw94uOR1OIl50JfaXa+M7T7sb7bEVX7kbp4rUv8hXphgcQdjFjPeKDcx8OLUKPmCyAM3fpJGfjPKs6z7kz13hk8goteMR6n/Cm/QV4ZTFdxDhX/g2+bICClhsLE2kt79fkFP1IO5akC5fppiEhBEChFIxBfioDx8zVZKIjGZ9acttnn8c3R9zZzRMw9zZriY8ZQvSYqutRYK32M8GHygRYrGB7SsH4mO5UsxLgudTDiCcp+Om/eD9ZqpUn5+LOL9XP27FrbxMuVwhNVsH5S/ZBQHOfHpxGtxN7t7V92p46lAUHA3x1cwlcu2Jg0R4eeJQx29wS4zcKe+/z1Wr7/c2HwYvWttN3VNilXrAerXxuAwsC/sytK9qAn4rHNFQUsnDg8TnuEJiIuyN9d7+pEtpqWMiJlxGkV6E91JJb99H5atNz7gJY+1G2MgOBDQHS+ekFU88ZH3GdFmgs/A/Z95GRLM6HW1c9uf3FNffxTZ6Ba8fO0HBFJn27Z8aFtYLaFYTK1IBLzHwTwCb9ZhmigESCs5o0cArATtW5ChWdmJo9RRONlyNiAFw2d5Z5jRrQQW961hzrj/fYPf8Tm8NaZ+Uklwy8kdsznfquYdSRyonxNZGc4qVFvwV4IJ9wK7p96nmYC4Qwko9iuTDMHsgvJKuZ2y2R0NtQfjbJYPxO+dxaC34RUI5yo2KTzTe11kDk+q7O31rqVtbhDQhUOm0doHOPAJ3HHAUCXZECYZ1DpTOf7wDIijEeQMn9GaSf4V7qcIUd3lIGyVSaiuLwXht3ENOVWwkWFoWZww6LHSr1i2OtOcRIOzcxAH7GelZf8DoEpj78kC8FB8xg/j2SpuJ2s4CSp83dPJzsd5ul1mr9FGF8EfoCYElqRujtFIbBoVx15zCzmsjx85JJQPan/RG0c6JYWsqYlTb056Nb2bwhpEO7QaDoRzQPSaVtAyJTmKhja7NfNiRuDUzdNNrPXg7z59QYWcBdmOWpIVHgV3Lil+FIKb17fhhDFG3rPT+4yIYd5hL+KCwdvBxMDpJtg9+Rm+Wqz0MxAXhn1yyIpWcoIxavQdsfmRrqsYMo60zCKgIeohCWY2juyBT7CcRjUky/GY4W/6EhlZD1V6QzkjATQ0IYg7EsphKv8MPncJA+HSl3fhMLBZLEah9Pk+CBSKsBVujoz3ykfZh7F0KRqio2IST7r9ygNJ6cf1aoQvYetJxOx9Kg0KEgQjaDTHkqfFDOWAnXv1l2NWqb3oPsftjfFgyWEvvEKnuSd3EOWeHZB2S78eEaX8FijVN7kcK8PazSOL8cB1oH6zJWbhWbtaDWDiZXaLpWiFqeoZbvO9Vugos/WgBJBp9sqysRxKA9GRn6UPYFE3EI+Nfy2tBAGrO3Iejk+kZ4maOEctmS3E3k2U216LWmXxdWvBK5j3Xk1oJTsfyipiame1tTtsHCIzNxOdfbumpJrMw1yXeBOC1CT+bzaNfTvADQfszfHkNgsD1tKPiS4ojRI5CAKTo6du7Ib0CRHGdF+2Eqwv82dkKNqvxQaGKXR308DHWKqzvktQsnVoKZqnU3NdtSNW5FIbcobzOVyjJPY9vnvqa3MWedm6gMKLzxjxDJOngtXeQDz2zJ/9FTkvh6Y/m2YqU30CV2YN5m6JUJy3eGmL1B80Z/ccv5iHeLVxErlAnX0qkx6KXihUMDz2shMqcKA6oT1r9lFn5hx15MG+bkrbstw2rxgkmPvpKJnarttNleJh8VV62v5SYcilMjyvsIXHLaYANcSjy6U4niDl4CghM2+VJkyaa/DVST7U4epxutfQMcTlP0XGRHV7XbILJozrNLD1KxhtYjDo2Rj3bT6juEF6rrJlrFjj2hl08yHGBrgp9YuzWKlfvXoI4bHLvaBbXvEuAMp1gQR628Oa7A+Hlq4ExtoL10y/sHE4xVXtje0FHNd8ezlyP2jUxqAbG9PeGsN2q5bsSzO8NN0JGISDlnXFiT3X5KGOF1FbioaeZ7zhvx/wN6Badzih/pFt5y+auh8CoYFhw0aj54VymABgKgW75GaZwr6GY7cGNRtHpJc+d3SEynPNrgdiN4gUlcBKoOlefAcjZAbCefhSRnTSiYJS11WihmkriN3wS4L7l2v2ZrUBsVhr9f05LyWHyYP4eIL+Ej6Bv7hZAkgKxkuILdgoV4uSfMwYzzLfOKkKUIYFY5/a3lwz43s36KOMy9EFcyZ9sRiGSXGzRL+M6UgT1b0XTpyNUgSQUiWGN07aQJvOe+FV3Rvt6vJsSsY8iVQxgARM7CYnAzWFFrTShkR9nDIO/HVax/bvk59A1EMiGibN/E5dgsPgVYQBXNxiB6Vxejir9xGiY5tTgCwPooM03YJQJiJFvD+5G6J4wUm671ytQHeXhx5OWsGZY90tfHDv28PRsyBaya6uAGGZkC1XdBFZBtfo9OkBcKDl2ursYeiTEsHyr35iI3uvfDCQa2gRum5PLFjLFy+pObYaUojciQc0EeSevchNwcFSdY2V4VMSDl+NzfMmwSbsNGJ6aJsbaPOnzh2LQAOUG8nN3t/m6IcOKalR7QEGqdb/a/5QuP0OfYpSxDz4NFSaGcGIi5SEKn0VKupB1WQ2PLt0UmX2dyXzVABTpPCFF7n8Wk30+spbhFjXPkfQRfnsipdTZOu+bBf0tFWTLKLCrQ+c3EPQSOOT9wfMRGurRfmSmelWilaKf/XKNxAiTTUlxDDjMpUZYYdlXO579WcSf3zDiEAnN9H+orGLlIImCuyckFZRCr5o1MnN0SnsLjpHJBynSIppi5uBYFfL7RDXIIACwsnSnnia47wkLgZnhwIKoH8JEO5Y7Exl3Nu+3p7MaRziF6IizrxxGoAUUEoCPnclU27+C0BdBXxQweca+aC+WpUR2hFlSj4+Ttd0JBgSA5+AgICAgICA4nzsb6wAkoqr2LJKgU9rTZ+ihhCvPbu1maMI6ebMFGGmUARKEgzM+xsjg3v14rDFU/krOdYA4lj7IxwG6DECNrBldPW/KfD/KFMM/jDHQJ/I1kx8u5rSJA+0mgJk3YOHyETbxJxwKW25iXeoCckXwyTVxu28OREimRAa4aAdpT9Y32/TAX2/Tza+qyfs2+v7/uTP2dEH3e0u/f821/39Pl9vq3/v9rOfVRfP8Pp8P4fWib9trX2fZo/v+3h/b0Qf8Psrf3/cW79vUl/D1o77Pce/bTPD+z6Jj9v0qm/VXP7PsRP2fY2/q3h/2/XC/s+wS36fRb+30776fsF/qobXPgk1rs9lnaNfwjmbSoL9cPSsq9kGF0siMthDDvZYoly01WwbYT6dFpxSRL1BUu5FuPKEFhGIdh+kLRARlW2DcLhu3P1wMrgM0ZMWhlnal5macHNYXSewZxqF2v4471rUvu9MgnnmYAwmSBrk38CHi0umM6j5GhdkHoxx+Y0qEOP2/NvHgE9unHaXk4cwfIOe+jt6hJlYFtjtpp72c7377K4u9bNQpOthdlVhaUzMBpSaanBx4hYNgY8Igy4HDNmfo8Mytde/eonMRp7G+db1XhXz99eSzHpM4ieWG8TCGKZftyP4xm+nVz1XdIAoQDOaciobsGcUNZO06OdkCXjZoOYwfRcaqoI42z0LirTXR89PB4iBPcBAfU53L18nAlJDcOeoytmfDBhedZW/szjhsdNsRncnXrYfiP8sx1TS2vUdQEC1Ja66ocNlcpQvCFuuhtWabKIRhQtU/i28BTfS2UEbHHqXUJYdCu47MFHl1/nycQqzRG6SG9WntnmrZVi9H7KRkMWSvZOu1W3S8058TBJOQwgirfOBW1ZzD8vFJC/vC7TUZSsx239pzOqX1wx46Df4bcoKHzJrR1+Ctm1gL34JY7EaU2LwoHGU1t8M4/nnBgnM8fh7SQevmkz8UOotV/75vu0jjXSbRGCK/e2tLcku/0z1fdzXcsDt7hmIOHgrgNS2s6ntkJ3TnppomR1hn6GIRGaUBw9xp9hPSSzSlAJ3OF9HLwr1sDbqNNthw8H+P8MZxWwUp5fstzqeJP6Vn14/Ikzm0ES6cdWI1TPcy2kYtSCqt+hfQxQtFSBDy2ZxwPMUcI0S2/K5FeUgzZxy4EjxU4n7rPKAeXEI36cwG8aj8ob80r10aoqwJkn9ovoBKwMuvVN+Kf9hwJlxT3c18jT8BSF+plIZHWmWePjP6JLv7oFkjm2YSleJ8zOJoU3MI3DYhWNlVhQTaW8KSpTMV2gDVbayFD5QtF/uejqmMGlvJgZyST3sZKv2xezkD7sP41jJSpsn/r//e3wl4npQO5yCrlkYl51Pp9Cma9KmluN49gLyBzljXNnbF23MeQ3AZW4OvnPlDm6Ph9Nije/aQOFsTd9bmFiZmDD0JieF7zEmFDF2jTy2yc2D+85XC2K2fULzk59/1F50M5l2hKGN3XI+kh4CcCHaSLgjk+xAus5NOpDS4Ei+CJS8sMDVsFvX/DoDd+PdhmHxE8cTPvcPQN8BvxdQgScAakDOVsps9A7CmxIAdRPG71OKYHAPviLoGwpO7gRNCOKGPgHilr1iSiY0eKnGdphRWav3rz5b5uviq0JUIuWjsZet0rZWmLHuMZzl2rq99W9WU3KDdezNrrxx12Tyd+bU+Ewln5BV7D+xx5WgEl215vyk1L5KHHwc5AfIgwaEW3k3rNixj5kWRNWSb5k5jxNx6CAvVo2auopa+W2SphLua33Nh0KdDMGTL6FhhaURvlXxPq5vRAz1DIQCICkpZFPYt3MA0GtLeDjEI1zp1ey6nr2AuqfAsnEeyUE+GdHqK3ooIBPPrDK5fjNnxzlsUPvD1KxtfXAwP8UGmYS4YI81oATOdmlzM8tOJsz8NaHN2/t0b6hXDT8U+EPtD+Iejt+aKtWISSyPqtCu9reA9X24oGIZgJFj8uqLeC0GCVvenGLuJ0scCjpEBdzLGLrKoAfgZQnmYoe/V0Uf6M3OPQ9MwLFqfs1TvCMtwjllt48ZwZtkJakr4jSGn1GhhbsVeBzs3sWorWks+VRwBKBEyQo3mcpns71x/fKqwWB0cKJm/l1rMcpVg0vv5rD9Nqn34yrlgurgoy+6j/EIjd2k7hAHCrGuLEkWXe9UHUcbbfz2Vg/7I0dJ1aNfJj4bOsFv2+8Vd86iuZR+CTf2ZrMswSTTE/RgjWCo/tYlpWI/UUhDeqKBUqixkwa0xC/e1ZN/pxgCpbUiE3Pt2KMzpwvSpoQ0GJiTha0eKO7RWFT9sJLVafLXfSmGrLm9GMJWRVGjMD3ZceODkCt6C3N7Uoh80UE/lSITROurN+ll2X7vUhLhvRICHoPfnJ6fNC42NWyXm5ZvN9qHtKZUOFwG0M95Vl7NFUtVJCXlfHviwSF6AeIvJhKhFrsS2Xms2LeF7crkXTgNjmZquOe4M4I02vr9lmvCSqNQ56g4a+D8HZ+Lpq+JuJNbDSJSDZ8P4Ckw4ZDZPSSMtLVtnjulm8dB35MgY/IEg9ynKIziaB/lAyxdd8yqg6LOn9LHJuMaI3os/1jnXWevkNBTxQ2S5KKPXwVGrSv8t1ENdDRzxsJiF0tjIa0yWdKLHXNY50PU28TKwtMzXM+YSabIbZLNPeIYQWWL9FwB15hPAfH6uVcEi8Ss7w2lPNk0Wwgp83tcIkSf+IdiwTCv0MsGXT7JMG1X1QbhcygaCfXcCzrMd9M+CSmv34aco9gqZcuQtHNEWsVFc+OoNeEegAbIDiP74EV/NBn/fZdSPvt2p6IuhItuvOZVOOReQeBnJbSaEBlbN+z1Q2cAs3YA07wy3CNu+b5XBBKT0b/ZOK/EPCi0qFGtsd34W3r0NvQsirhTKmYQH5XmT65JUg9VZKtGoG7PMMnb/uY30nqoYQGwMVPcAe7I4YgNtuRAGRGMnQojY0ciwwRnDawaQfbPazJQGZ+SSgi0lvXIFnFlsI2CWHYYqeEtlwBylB0MbDIx+L41F9ni+0RWFcgaJZQC/W1ujO4QMmycWANkqqMIl73iWpMr/oDv91aCqNkdyJ7Kpwn9WZlPOyAfVdvOMu5GW1CKi0uEMXMue7tBRaiJEuzSAjkZKwXePVQWZzpMOuK5HhnUiG6zzsUDrKvgdgI50cgtvQnZNJpc3nByWNTHoWrcf058imBkpjp/p9aKZQV/HSjFBRWy9R2YVGKGSTnSjQqpPfdXasSdQsoRxCyug6/AzxhBJ2QW4t6N2LoQnw1hCKYX43OpEBvrjnSSK5mKLtEt6hY8/PJV+Q/2E8w1654kSAetQg2k4VrkR63qPBi3H+r8hlnQ69dTE3PPslpSb+Tb0DyFUv9OQEX29eB64HNkCOAY7HUIUEEeQxf5uyfoVX7pK4IKCI7WH+blhwMT4MV/rABkeTYKs5A+KY6JtTvi2P6dLv7LBZu5jqiU257IhDTe5/xRgGlWrLI/BlHfQ+HkGmHNOSJsYujmBDf7Sxb9QmOxyX4lco3jmZYmrLd1R07rBLHgdvUGxgH4VgbL87GGLQvMkU9+IQQ7YaQIwrxWQgxxwItCNQWsoSz3fvaO3Hb5lv6xMftR9n7T2RY5g4AObjtfdbZuyiU71BIjPoYQMqR9Vws8qXK7T9xcdxYDgohPvtk9sESyG4cDbhGlgJyMScMMlxMYzEHvYt/taggVTg1ccdP2APzpgT7++/T0abM1oIpHDHAiWK7jc/XXYHj8U/rvTA80LRd2HNW3J7ORWz76XdZlfOCriZCKRoBljYilkUaU9+qmbtnh3qAQTikSHPrqjWFenFzBTip16kwJjyGBARfs+7ywe/l91aGi3YuWUecZI3i7ZK72sJge5cKl3oan2eMKThWP/zwourSpXg4S9x/uMCQtZmDtbroBXjeZRAqXHzvbT9WL1NuT8OU1xnRke1ogI22ES4UUnxPQKHpFmGbgVspR/IASgko6DB+MNhBcSauoX56UPl3JeDPcTU6RPuim5z8AtSJ0JPFnX+HqP9gb0do1LJW+GZvEpCKunfy/l2id1wkW6aO/37oFROpl8dja6OHyPxZq0vjV5T84eAqYj/vixDjJsuD5tMMxlZ7M3Efsnr3IfLnzlsLWqXUu1br2UjMjk4ZIAao7h/Bf5e6kohd0MiuNysO3eor+8j/hUn/CaATLrg+laDGk1qpExblQDFTBeotMKNqWyDVeASUPYNHGrr19XCNagi084YmH1UjCxnHJcoU7NXFa7n6bmT5sTVDF8Ggmi/8sVz6jsAA7oljbt2FcpRImcDKfy3LZyX1Xwquqv9b4rTRA52n9qeB47RxZ1YDbD/ZlGBjWEPIjIPSnDC/AtHIZ2tW3G6L3pYFeqSSNi5gqkI/jd3SLc4eoggtN1dAOZfxHNokV0tfGvCAgSUwLW6HiZqungU1p8LYLZCtjOiTdgOK+eA+QXfN7irlRn8cY7U43BsBa9P1RO90UoiARMsY4bsm1+pEN4k8ayTFbpAT30mh9waQX6gDWwlSRRuwWMAbzRN5t/ZIZ43ZFRMRYIqdFELnYJRXKVoGaCL06tkBjs4cnlNaIVEqqxjwQCWUQL9im55F+xLtSTewedtlR+8UwVsa4BLh7dHUs2mstvkF5CE+mEaNJQa3mfbMz2fNXFepLy237hiY4BiKQ44t1hqo8zQL1fZQgmmpcKQau137p8RpWdTF8iiB/g3aNHrgLsaCauN0dYOMeDwM8DGxciQItTklIVpbDdXmDegiTIFAfU85MOhtDwKWbnHdv5h/AcNC/YeEowsOvYmysXSdvImrDKljy5/KRjS11f89/ZT1bmAXuH1zwfRRq4rI8SOI0ePFjAk9/eCt/xXvke4oTi0rqdRYt38fm7sywklGfua+2ZzsJmLxlDK9otpEONqcYKWqaP2tFLNuG7xDQU/c1HmFBe0HBfvY1lMuCkzA83a1Icm/oxc1Y7tzhbE9mKysex4tU+WVd09gZi2FUgEU1Ibs7QsUdyewzDEoqJC657oGgkBb72KXMHSXkaeWFFwq4YUbxYUC29RlVuusWy6h/n+MZ5jqj98ZXK+vawHLG3nNkvsvQPDtdS8nNDl40kIcJ9CZdg+82sSANZk/IGWin6sqA4xlEtAbalBAXsMq7kDt06zJicT/HSh4faQkQLBKcRI6uIUAFl05HjK45pJY5iLWDETwAKg9grClVy11t8A82pL2s4Jd5cbgLxwo15t1jNyC8QrEoCXZvQaVtp5qiHf74lfHqiymv2wB4dmAIErOhkqC8vW4UJdHR03CQPIJaJ03K6w/ndMo1C6lHfZnbIhsWz/mUEV8ZJ4itUW7tmd/4eZ9XAqsP++A4GB50trR3amgAFTSi7axQbC3x6Ejpw9PNPu+gNCa/j9vKU5HKv5+Q1WpXt5tQG+GR6h5qQi/RP4f8BznbP1H7MdpFMR6CpFMCzSrh01OBokky+KPd5yJgQ6FqqPExikqmYHh1N5ZnyjfdO5ROvefgNl0yxyy9cfb5P5u/0At1sm9eC3GyBncRg6n5qUmotyxYlzWuQ3zpic0vD8ZjkISxSteSZzaLfW9HQJv6lnohVzUWE/wSsZQ4y/jgSP3GrA0lNrjEjEaChO10Nz9MG2C8l/F4P8nRyIiEkzfYTEg2NsepjiT1SBzJRE5tHyys9yjR+CR+3zsUr9nyXKut6cUJk+sa2B2l3qJVVE0ZkToEcgJcXhAq9oHmkjg3Bg4U9LidCf0T0uUq0O4X3ubpc4y36RZUK8FDwKLyHntIp/iIj/lYFVfOpewfL6QhYUvxbbvSi1PsUUnoEqSDq8eGPIPOPMHPJrh0BJDuC1iUUfel7sp3iflEmQfzMj6f1N+SIhnSM+eBy4RFiMJYoR2BY3COGfefN62idNqm90w1yNIF8hDqFMFReo1BXvOAaWpwasuGDqbv6YiO4kNzmxbeZndd9D9DQynldTPAaKLW9T1kppl8MO1cOpcegtZZZc3JopP4uDRSXMojPnjjzjV8WmUAfykBLWIxIwfE18v+99p+A8plNw1Ujd7Nxy0xB+DGDi/bngBksVbFlGuAG/h+G5VMbHUJB0cAtNpTObQHvJceNs21NaLgQlmMt+cDARRof+yuNO545/8nJEBTks4yOrtMxhxGebNxGMU+ae7cHevvvDXOmOwjU+0WZVjCHOS3E3HcbNrBhokhMSSqIhbSIEi1VFrUQeIKroCWZxvfiN7OlB5Rny80D+0JuqkYbCjVxJnKzeUqFjSnYdfUuZSZ4b1lT0NjapXa5cwHfFWfXPmI9YcA1Fap4KAFT8Lrhku1H5bs7WvFuyZTZRICrS2MDztnsvxsW6olkDDQP5z/FPkMNSwYyS7H65Wk1+lYeIwlR27mfNsA8rKz22nbRBWAcVszuRBNZZ5NOuFq/XcnaWIngIKUFumPmrlPBEHsV853FPN+57pZLtRtUnC1MQP88AkbvP0PsXCLqwQqG1lgj1+HIJZJvNBh57FhXlcWVh013bni/jkfdQRY9EdJ4bDqW94YyPq37zgBoQvdeXJeoZIHrFrMlTaliWMDlj0MeFx2GG813vISRGG+Wn/gcM74tW1y963Z+o39VzS8zGWoYzcn4KusDkPymrtK7yJD0QA36Cndp+pfm2c7opfo85rVtlzz5cw/3CJ0Hn/FPa7zsqmNL1axpEYoTGSzBaO+aOZIW4f/Djxc7FYweKMn5WmmyG7t85U3RB75gh6Js7Xk8h/8JGmcFzxsODtM4nttq30JYLMslqcdJsiPPG+QTtBlBjMUhyoFoPPQPd4znQDtUxHHOhJaE4+T83wMO1MGshlj/j14zbOvaFRxUcv5fAfxU/gJxUrJDmW48CjMiSJBL4Be7bpm2uYSrD0M8wMkuxScsOZcUd4tMpgPTrM2Z6Qh7+DNa8x8/jUnbl2t2/AyyZlRxlx6b8JRcJtHwdNF3MWbAL0gfi1/q5/N0QZIgl0bDnJf0rA75CT4g9RPTl+1bvmK5StA7tZCDt9eK3CxWKEAK5VBPn9gLrC1y3axm2eSQBTca61QFGzh8WXgBlT8D+6PaV70mFcf+aoLimmvMsERzcGe9whXlHrQpz5Ha9rxQKM9TtmJFebS6SsBtZK0opT6ZXdOH2gjcCXcHsggl9svxlXTGVnXgPtfJ+TCVzZDVTmY0S6/giXAPFjKcJ6scqe+35f2wuwTBt6sbcK5RoXQWv45NjD0bmwmp5aKyW1P2ngi7/pczWDC5P2P5kp5VglYR2IFzBH5zRj5lcLy+BO4/XNBzVO9feLN+moiWcS4BSs86CKpjA1BVs0asd9CexNstM2YQFDKysQHNf6G/07KrcV81NMAwjTdR4Xa8SEYWAutG3OpJHs2hj1JXLUy8NoFPrMB6PRLcanZ+YEFlMHaaVT0yvGQXjeqAEH1EvFk/IMuXjtSPnCh91n3CkABwGK6boe/CgChdAUqyKlKWclJw/gXbDJ5VA3qcs2RDPK2oF1u8IEfJuhgP98WKTipQXk5tz8XGAkIO/8bbixiQfwNRJ2rzx7hMIW+TfmsQNMCUIs+Dm9/NRtGLMkgESeqHnAchq9zUGWoBv5LSBWuwAQz2iSsVZhW+LsQ3pHjvO5EBTuw0zrNPGkZfoo8y1y3lOuvdoDMg88EUiIAVwnMIAUl+NPQLqCEYKlob5DJSFaoX7C/G2m2kRcVI0HdoadWmKHFfTlYMuPHhQJuq8KoBiq9OROk53+swDCSDFu7Fj2Yqh5RDQRiZ98hCYqLOZEqPXX3DlHeZGuJ7J3sAUp0nrg7aOCahefLuBGaXCk24x7xBZVKT7x4fxeB98chXI1+/SktGt8uCLuL5EhCY58zgXSfK3dATIFDccF6u9xmGWPmFNp4eR8fx4GOBhi9gTRIVZoptWTTjHtJE4pv3iaSaNzNMqLKYqnz/ab3qPmHeU0cv0WXq5duqH4Pthsq33jRV9PF4kCtF0ROQOBbw3paSf8Q28fEHQm5g7bDn2BWf5N8OB1A6ytDFj/bSHRCUPJ9EwKhQ3VOpkAx3uitn9x+fzKahLeV4TJt4WoLo7w+Tzyb/YLOPkxSvTNP2Hz0IyJrb41wputSBPm4j1a7ZxeD6MY/FMXEa5xH2hEWEDGJngrSA2dNcvyM49JieUajT4yKaYvzKfySKl0GtxvwZSac3HQQafJnWyssJQrGa5ntdlDQ4LeZs9YMJFVKxzxA+0sInA/EjMgeGPojOUt+XyG0pvy4o4yspyeU7ezJeUOOPJi5vO7DdSFbq6E7GCkT/axufETtx7JNP0RG5L9vOJe/e+/EgQj0xm5nsYaYceqm7OXlpdpcv18Nhv25KtPSQbAslxBEcopJqWm/nHJ19/nqRSEwKWlV9oh1AzXWv+uT5BLm48yFuoY64Ts2PRLaDUD+SsEwVQ0K8tFE5OiTEKCKyZ6PQmCQO4Ov/aB0SQaivch79yaSE/3mJOIzbA2GWOdL5oGsNLsCGsGOG6pc4UPP+ruy0PHO6oGJQCZsfvXv6IDiCA0o2CRYAUgo61SWAFM/uTru1vsaqVlS8nUVi+FJIT+fGX7hxIc4dox/LMgVaOtFARPQV2jL/adkA2l3nQraOmyTuwPKfE8yxNCEXy+kPpP7UhZYebRMd/vnbAdzh8glRSr0XiqRJbmRM+S5k9ZYhl9mRneL6qhqR3/C+l95MCfD/iIfMt+SJd94F/90Qhxz9idbi48Fr762SL6seCuunYUh+OEtmkAMDJAStqGkHpUr7zaKOSsX3YmDFP34rDBtwuJ1NxAg6heTx2Ewwx0bPlJltHzUvop/G5BSnVKv8u0vOl8aySOACpAKEmxU+RGMT3qcPXsoKd+2kk37mm2Zj7bES5nCoOOHM4OwVlHXuVXQ2aCes3VquyuHkyCkgAEpU4+eJB38YrK4ONhn1cZcxEijUKUDHLMbBDKsOkWqOLWuYuT3DDjJPFSt7+UzfycHOKYSnk1gEVa/pmv9/hiZQnKXUPXIZosr/VJIKPKV6dN9ZQxh14KCiDNBxFsTfkOBnyrXwSMyNU0p0ykYW5EE49Sh8/9VXIPbk2e7NPVCQpmpU+Ur+rA6mA1yi+fk6IORSQqVGgtiMFlnDlKNHSAk49Rwo8z6T4ukTGtXZvGWTOhzth+35QlnCuJweLMvrI0d1cgknPHMa49L59AIOraIOEEarDaaxaqD1OxgHIShI2Of0fx1hUgdIGM1FfIapOxMu/cuzkg4xhDscfLm9YI8a7bCbheltY71HgNCc/ClGUTSLTOFNSLlWcS8YwGDLmlHaaLSJigYjNSObEjEIXWS6030yz7zEjU1BWSRMRmmFHvKEn/OoVw24MlJOVGJJUq0OWRLnHQ/PbLcgO3jKxu5uKRQnIblA1Zf28aTXnqs4kr805byWgO6SnDwNiUiG1hzp1Z6aqskcPR/v9bI3CvVvKvn4WQdj/0Tpdti5fKa7OxRf1GP144Hyz6iikXoZY0pI0L+wdn/MXncQkPYauZ1eVGVFyNbij0IZprCe3q0KylUHDW7pC9dXGJDBHmj495xV0hGXYzs8VRReEjOmDMG0/0jWHhXI8ogbyJsCy1IB3SboW7Cpym6ez4i3H0yqXOHJuTYWghODcBeYNvMPHHd7GqSCe/IGw3rnVCzOtAr2DbhGcyeSL98++t6SbnUk6lLSwe/C/qnr2CYeqGHxDTcSg7MHYgvQrbqRBoCvAelBMEW4ytsW0UTrwc7SeJseO6whV+nc1FWsm4/5iGCeyg4p74OahGmL8Jn6yeHS/2JXiKOcy90wi0mO3TPFa9zKQrUlS+FP3RPQbYhafPTqNzFqlm8G7wwUoXNckZ9DN65kUZUo1llv3o/VLU8GGaIImN54BkqB3fMggl1sSSvtbXdzPfVLM4+43CUkTTsDVP3pPUBkdu/whxNTPnvU+KvjwWZ8hnSspEN+EsapTxpb2g80WNnekT32apfzaG6yCh7FabHUP+Cc9guK62zUnAJAhEYiNJZPw677kTaB32jHCW0TTH3s4pXiMTGOGC53M3aC6SoE/nRgAI22oDr2ehb1bnyUMwNS5s7r7nQWhmzDD0hA90OFOk5FnEZitIVF5/dkGaSoRLIiy8gaMVmmAgFMZ5x+xPDVlLBSvrkXtrEOky7wJMsdUhNTo55+pKxeYuNaSM/P321F+xDug44/yra8GI4ecCmVetOTPyCc6cLZav963rFmzCNuZ0/cYCsayb7jG9cCzxSOJ7v97+Zekpf8eqqnYXBlvH1b0Uic3GiWqpljida6MZKmtIo7j9p0OC0nfq/dXMQDzuYm2EQujWK/336lqpa3M+m8mTU/YUsg11H9gYzUd/oX2codbcdWFJqxeiJsUqdMoo84eKIE0IdnpmF2i8GSbh+K4qw2equ4BY+4vJRcAQpawXHS0nnNg2De9773dwaHKc/K8kHjIV0t7brX6+uRr1NeE+EBzOJo1ApVDlr9IuKrM8nOZeTSWit/Tea0XCMNn89lXJWsJb5lL6ubdFi7j7K3W5m2LPZT/PQw+P+IErn3RXFFdNdaqg4Bjsxf4a71MikQchT1u/R74unUsi747YpxSQ6lctANJnwOZz7CW9KsZu/OpRzi5KdP10InoppqCnioqEoJ3jNh+QnkyiWXmcTs/vdToxg/4AVsmUPTYqeRIraTj03hQvYPgY3tHZtKlHnVYVkdQgWCaM7WF1KTffrTxmO7MUfhg0dJKnltp1vVW2ggCJydI27YcrpkFF/sT5hLlIxa1yPnUStc8TvTNk67kNYTHXr5gWlvUNXL0DXOuLBePTRPHzODK/XltFOEiRbkPLaqYIOAR71LST13Adf0N9zSfFYurh4ok66SiKkZomM2viSesO5Vnm8NC8k+GI/1jyTbwiqEvGLnBANhdyDkVnoPGgtRTJiY7qIYZ5MytjtU1kGcEBJMddrroxVDtLopiVFSDvmmSHptyXdAFQjqdFhFqO6J/ZblpJADjGBr6TCCstylG9T6azEbj0+4hLRZpcHbaLkAisWlNz35LxN/pfJdxl33MQpzSGTzuFPGZJwOf8tplo6w3em91XIvz7bG0QF2qjEpNCxqmv7EqTGyOfgTfKT6el/L0MGNV4mcsylzU0WS5e9zdRihOLS6oegsG4xltdyG1KEoS4UbKDwnGmishh3rqxleALtNLvzd2IqbBpDME5OEdwZwi0oppy73Wq7RNaE3SHFESADILoAe++xN6nEzUWlxpEx4SwPY199yk0I7JRmy4prY0IPBqV1/x0UQFO8KBsFqlHks6flAM9iwy6owR2W0gpOVHgWy8rqpTpk2HE9JEiM1ipS2VGQBuWOjfrv32gx2EIZLFOfNuoHpSWnuVM4R1+DUq3PeGtQCiZ42BjLcmOwG70wMWQGk0GKTXre1wh+xdLDh5CR7Xqj+H6ZRvJE7WV+oqTIoIVIB7wWb4qIC/Lq09KEftyAqLFL9IUOHd21kT5urG5cbC1h9sWgTX34kCEsyfzn5Yzi/JT8fhu+ta9C/pCbjuUM3ItF3ExqfdLQNoxXdYwlHcg1Wa5qidwYlKJubZ1Fv4ubGZPig71WN1FYs7/a6nkU1jPKJF6hSv8jRE/Gvo1LMIg4H0K0phUaWriyII+kzIMIZZ5xbUh/zfnDs3dSLOCkW7eJM6xO6aADwqOCFwdGVDBN5mpfzDv9KwdC5Ps8kMee0u2a5oNcMvVr3qagmw9kYWQBrFDj3pY5RRxGb+nIlIkjeYnwvLlAlEVci09njhpehXKIkhlnfplz9CAfQ7MLE8MVFaZCGPxTz1ZjFGbY5Ts6bUq/fVXkS6poOw77th3NLblEmWO2LqaAa7eabl4OOAH6bCD8l8aeInEKv3g/escWw6dOWg010rCWiZ5XtJrPF5sIock96B3jpKFQDLhPWkZ1JrjeYgwE81ONR5gZDL7QuYb1zZmthHcM/OqjDW9vsfiM12NrmOEpemz/V0nubyrP4p3aa5GReb9t+pF+iOQVLu2kPah7NtLB95hU86wyROwkhuzJ5ibC018Ms4fG1iaQGX8iE2rHdLEKMdtfzNWTOBumtioHTEpZlcZOlgItSAiizwTAtjLegsvdktKFND0rCHGmBBArCPtTFhbZzu1TM5HPThVzDVgoTIxXlHNQgz2D5cPnnH0V7bObv9gdmCNhgVzvWIZJ7eORpTMwxPuZVRxykarHHGvSxR4+sdMtBHAjJI5cGBR5FlaCd2v7M0UDgBIBu/iCuHnMUdDGsnXBX10EjPudslxg2sILIbTTIUzsSvyGkKs8etLEcUiUZsd7hRcfoQ8P5YmdCo22zO9tTkY8+h6Pye9Mepfe9yGl3M/dOhhLeDFY00RWLQ/aSagVQ/DMZWgzDE979OFbEt42xWNGII/EAcAyEVGRta/OGdd6BkrKHmZc7+vOQCCSvlp4aXk7qgUaKUJ2Yq7LixpuznQWMyzC2m/DdIg7/Mq5tIz4cTSZtOBSAJZpGfN5LpvV5PQxRXehKq0xtlSEE8iLRkLSVYDc20Nc6H4fuvH7nvJSw7A8C0aW2dtClzg3awboFuWLwQK74gA7inPH6hugYEqHEqKtKipowNoPQMM3g3+FNZN8h3L5zrsohTHzHZXoVVl/33xhlCAL0pxw1ZorZlJygbZL/CXqk/VprvwZiIxysWOOIy3SibOPvKRTzYaLirnPJkDVCw/jfvanBt02qjttEgc7j+poPAiL1qMfj/XcojB2qrIC261JSqaJp8L6bAJmMKLThPqy+ycGeXjZP2xvkP1pNMB0ZJaSntzQDKw1G06DXHwQOp9wD4RUmhjCRoqOamEW5cFbL6T3oiu5m0z0ZOadRNSxVwuQrlYbTsrCuMGAEV9VuldxzdAn39B2JioU5NG4xIYE3sc4oc1fgUPDQDowzYNzG8/6AMtUmC8zOaxDCQ++0v2pdoYlZiD1olXCZyQPy/3dgRHanpZQlKtYuv5Qm3rGgEPHA3lTzEqmIBOIrlFQ3KdTH5v9LcEyADaK4S/o21i47h20rJur4v5Tjxvv5S2Vs2CYNW1PHwRzDF6JOIxbQWSu2Xbwm/lSOCLzGQY35bqZi52kTu8omSJDaud6Dr8y1AHRK9+2XnV9mbhHbYzOUakvdh/GAHflma6QeVdsnd5RdY4m2XZFJBnh3ub2urX8i2t/S3SAEBuQxstrfrqjWiV0k7q4uLFDXomoqop7w5EiWWz7PfpU2C2CDhoZelLvj1pldj+/Eql7I5Q7SPtFl4jDsl+ZFsopr45L7MvC+4M2fV2G7Ep072NDi6J3lD7hm7o/oC3ZykzWzPCriv9W1yiCEGe7szjDLBVB3Yxur7SiTEwAI0zbKaBYaBteOKvYyljt90SAPkuiHMaSl14fSvNsVsnwtlHRonARnVso/LeUTQZGQsLRG9vgRj4lOYwLghwtVfiYfU2JwsX2g5B+liNC7XdbQ5hsm58WlBpGz8rD1ehU0IuS3Vc1N6a8Qvau3Lsp64LNTeeA8vWX16a7/CeMWH+RBNtgbA6wdlJNW4E15JXhzL7XRzbmG3K9c60ihne5gJTS2oqpluuth7unN9z4YruCv2a74/Hf1qpqCjUBMVclm03DTMeU6pVc7wXRQvPMLEHSx2a8lJMSmmZ62Mt3G5QnO5LOU4MAMfGwMB/N6enaQ0c4cWUYBE4Jym7nZZumXOAgA3STx6eDgUnXWYyHST7/MwTTG+1kfZHUPUXjgFbTEgAU5KlEJH8AVVYlopT8Q+5OwDrQiEDiGd35lJIWsmy/lHpsyLZLnir0rzGUvpiuKvCXmF3geKYIwl+xZj5HjSfrIoP1cixDBn/xd49su0plos5/jTGSMi/IzI8TnINaHm4x+H/tV+DwTQQ/rHBrurWwQuoh9z7FcH1W7QMXz0wQCAE9Gb/O8/Kwe7U22K2NswUZtBBcZW5Ky9l3MjgvGaPnbBF3wNqpn8KjrMB3zR5WRNEBsG41RPepcTOzP+7KjP1cCVmYqrf995RPNKTLFxri0nLMpDYqIpD4mGkYsnrVrHv4IdwGbDZtZy8jbnHldv9cE2BNXPWom3Y2zhmvknZ6vFu7+KZHaNKenaX4p0QvZPROWv8IX5Nfl3rfikCUb5bKQcmlmZ91zxPAh6n5bh2EuFVi1cjwrmuWRyfFh3fos3TERxv0GTJ8q1LJI8XFe5t2u0e+fw5U0EoYDJZQqEJp0eSA7Qdy4NBDmpQ0EP3FJ/MK4vXB2EAgOKLakyVxumqqIWRH3UcYXzMJaUJshIw6Dt+f0ydYMZpTODlWxk2MgReORyOt7WlayasapiWarBO20OtRyxOD988DoCirsb1FRMuu1ppZgC8t7K2oEPN5OaRkO0WiCPFxuK9wxwYCi34gIZt4FOdiKpPYYUhH2LTJWkvTLiVtPMbV2wccRStHFi2EY9M83hm4842ugw+yKL9HtHtc0K/xROtAryJLrmUWgQ0xKWYy0IA+chn5a/cQDzreOUJIA7bGQzotZrVzm7/tj+RsUSsUUinYFOd5OZHBxvbZg6QgcpgptU8MHsk4KzCA9Ti3Ia8/IC4tFapdcKy3jgE7SkaYj/8pQjdSi+/ty1pflou8LB6b9GoQJkHcmkds1BMCvkkpIDRmO92sPUugPZlZ733MICoqrfHjCMNjfCmTZ/U4ody4o+jKOMRywWatpMSscLWyuFN0KWIUsPb2VlLCE9VAlUVi0n9tCbk+JFApuTwkiEoJCujW5vNwbNCwuFN1DojAzvy2V3Sy6GjINNrAbdSbQu7aXxnKR05D7GeVWT6Qk+qCJVWMLjo4g9xOmSlhbZqCOmhzniQP7KRxa1AR0++i0u+DZ5qn60Q0WNCesy9+VOxrM3ZaNG4PMhUgZzxQbfi2z5gKqbxKTQdivQMQvQE+78d14hmnHG4SDQcKY5lZGy1Km2VyO0SDhrEof7XhBgSVcd7jt7xMroK85TuAKygxhoPMUeC9h0wCavKaSNtQSphUBFZkjeEi4g2ZL2itvXoQJu00VlxQ5VeUreWKgS3OcI14l2zTmYgPoi8zTcOFV+xp3btj4ybvj2M/it2m7olv1lBVAa2VUphclW7TFQQcCCcnh7fFMVJ6gbslnU4ArtKEpmIoM2wMhb50VQga8gSy43a9Q6MHaYus1N2NlfM1gvO0V8pilgfVSgQZYNBzOGQQYqUs+/FffL0PSe7QTiPyP0pRul7Cu0QXSffAhiEb6zSwRPhFxLGw+8qRuaaeSIUBmLI2p/rxtzkKIh/jNI1/OpnlRkt84DYIhWgrpQ7JtwawbV03bFBiMv1o+VB/w0D0Z39uZ/8m0bLE+Hxt6BgJW6NSC05e5lPaFqe0vt7wztAePk+5aWXiaheKHlYw6KzY/lz4clJg4BGTHUs2oycztdVY3wsxst/XZ0y3Bt0NzmxrqPfe3o8oYQsvBm356cGvL7RJpg2jGkLpqTinFeA0g4dMNl8X22UH8rMbAersd4LTVvmxLhUS6vRlb8mRWyb/Rqrl6ORxBCWYRtmSOzpRpcB6f9Wo+t7/CGU1MSds3g1qyUysBTi+kt+k97gSsqgHbsF+Xc5A9Znlgm0SmRb1XIy08AH1lRH0zKt7GuD+hFvNiToy08Zw1PJltFQhBHzciCGBV2ZgF/2UYVXX/XAUS8aDZeTDOe3vGLVf+pilPAviyk3yb+ZMGBFRwFQlyy53s+EYWtPaqi0+kOh1wVYh0bhwRa8fot/sxS4ky6I/Ufa/lPCJKJTHQKcxB3ugsqgd6PGPhO+HS7xp+ID6HrjIRltogg8u77fiVseClLO+BqCwFlU82yblq/IF8GqYQ3UkaA/oThCU6hM2xQgoEySwLK1H+S4JpeLf6jfCK2sESIq7p5ePeUP9w3I/H3iN5mzIRZooH2q5SlAv0/AvU+sDtnbS8HdaQD0R566esvfXhqEIhMJeMiA690tYdsWBklosq4rCrUz1XxVBW+xWTMb4mzBijiq6p0oezX6fBT+J4APp98gbsICSjmrdiKoaVYhUgXoqNGGuudP9j/QfSZOTlKH0BlhgC5bYfyG3/iXPQb/whjqrokWWF3Kx64cXTpuFTkrNyaFXqzP+FgwIUtcuaO2L2K5+vmkpN71TweRlypgMUClzhVm3tJkvNCY8MxCPk37POYqw7SBfeNmTMDwXQ9z5m3Nfu0DbSC3Dd4i0FUMSmSn0slbsJgx64oKCcoSIQlhDXsRGXOMvOJQYDHG4F+1y5DgvmE26JfqlNjOhYA3vy/FKp4q6iRiyroUu2xZ7ZJq5lDKNyLAIkS5FTnIKz5rrPTXVY2jXyMep5D/Xcw0euXF83/kfBQvfl+vxaj2nyKWLnNR74xXxS0wT2+aw9Hc//1pMVFMhS24iaxtF6CqvV+X6LRm0kn59TeXGnjg/ID3SHuN4QitQm+LsN53u7oqLOawhKlPh72sA4mUNGEGvkoLXAyF/xWzQ2rR07HpIi9TwrSFLPlts+jRLp4Z5bnLgEHAsXnU+lCVT5QNBxX+7bB6AZsbGcmlHPW52j5Eio47UB96U8wjAcQqkMjEwAzDWtj4GFJeD97k0Fw5EsLCoDQ7Mti/ZdgHcFUVz6hY9MCmei9MPVW21CmmIkG4HQwbAGitUEDewgSGKQzOeZjDCY1l9enQr4ijWKHoMtZbdlutZFgnr8M1BFI3Yyj7+qW0GpRq3qGTx6C8jIWfHa2+/TXgtJKKmsoA7eOVE5tNXLpUxcRD+h8oYvcfeNRirIqMjQx19sTCUAzCXaOLTOwqkE8J2/C6jCLHh3d0mZz1/fZCL2M0O1tF8SmBA6rpeU14DlalQdJCwa5BVFZrQDBdyuXZXcCJvKvLsKJPKmq1HRPn2/dGLl+l4qOLtULg5gft0CEggcNZp0XAcH9u1hK4FkDY1Q3AdFR7eysRxpUR5Ch0bS0Kd7SP4zCeFnoVXHrkxuFk8boHejEXCCho6++psM38nun4LTLjSCgdKIiJPlY5uvFY4U+3rp8OyS27YQx3O7SfqOJN1lG7MNBKKWsaN2Csc2G3ybbdxXMCwhG1fWm7O3y2RGbFxJKM+hiiB/3pXUFuL6HKR4LBCznlU4ZCfrNFluSsuG/qSKDm/FSvgX6wVnXZo9CweXWrckuyzwkUpVDmpeXueI1HX6Vmkk8tR7yYjuU+IemcfATtzEUAWsIkTuCG9+Ex6aUIkf08szDrJ045lC7VgF0Xnxd2EDI4zKildhU0FhGt2ETZTAvboavJ5S21sOCAkWkKJQENwW8sHd20H32JtI3Mx+xR+XoJ8wwrf2Vu1uSgR2YWX3VaRifvCA1FGDgTukhOkCqMvp3IYa7ZbAimo/ns8gnMbiVEceS6UE7w4lZ2bGHBMFwf3ACzln3akhQwn3M+muwQ8D/UqjlDZ2ngT3ypuEX+x6U/BybxYCIc0YGePVMbkhaJpYC8pRby5rHgZ3xksEe6jGwqm8HfZJmSaVuJC+6KhwoOsILhM3l5lMeOe1BzTNl1PCT7nT2NthUDNa2jkDktWgrESbDIl/Y3L61dv7TGIVTHXXJUKK0kmGlNGgVT83E2D+gvoWSc1AnvEdXBP1jg/78zgzqmesc8J5rKIHaGf+iSJ0QB0MRJJ25IGu79Om0NXB1hwFnetKPeOd7oPieY7f2qvCI2BBkWUxHTt8ltkk2y8KCJ6PM+aojJmejBXriqw338SRMYbmWwR5mMJjpZnYn+4RsoXlLLC/x7NYPNvvAfMHQWUwGjEIP1Gsx3sUUclxb44c/yHY5cuxQQ/cJwy3nLn6HBa+CXgbZNy4I8YEbqJU3ZzfWmQjcjfqmqtAOWMt55Y6jJ3EI21m/uNuTNbLy5t02R2D4SENcelbSxLCBDdqMfcTy15oQ8gVprlhX89XRvpJHSH+WdpjL6d1q4wWkmhKovzXug1+VhzdGGbcgOqwtiy7w35tydCBg2fSD6Lvc33H/0mg8zijOcHK3VJzKdYgbdWZZs9gcJKKfDydTnP4NsXzboW+BIi5QXrThwE18HtiaTvWuHWyGNPeFZ6D8+LhM9kgf9wifclR9uc26KNtc9szFHx/Lq3ocJ2sTsDibOsj00TK66tvwSShy6iqg0oxA8hy4iXdc1xzTqDzWH6Ppr1kxRe87kbpWBC4HKD0NnDHFa1df8knrSOUzKm/eeF2cl+xRKmmdXqpHuj2iMwG5weUMN8QtGPHV+3kGRcT+zTb50wC7FsSqE6ocN7ACUIsD9RbKe+aLNfquhOLVZB/G/p8CKUAM6lZ+3YPdQTW4L0amxdRwRs399/KOAkF8V8jZO42Bmiw4Dlk4CtVe3U5VOEu9ur0b6ij+JEe5afDEHZKGtHUVt40Tk5ebSF5YYCONouHWo3zZ4SPvc/oaag15kYh1S+Qs0rsF1NU2VXsGCFrtZ5+qL6cMEaM0N9DgPTtn6V865ry7akXaEJ9p++0tN5KU18ykTFa4+fOA7U579vcV+Aqs+qymowZKwnw5H9Z5a23UL4zP92hmR0VDyRhc+tY2Zi1KIzs7O1SVLBNsGCuYTb3YmAJJ9+AOB10t2ygX6N8HIB6TkDR6xvr2Bvf+eYwv9TzW1W+iAutLj2fWeddCNJ6jrVgEyb0kqUImueDtXmzOPPbnB0LzMw9DBkyXi1bHyBbarBkZpZIHRYLZosbNrOw3rEhf8LFSqhlI/z3aGZ96Gc9dPVPdIzLdRAys2fK9JfxhBJNic/IdWmzwY5XD3+0o0XGAVafFYVGkqpPMWc9pg5+ZScsjlKWv5R3sCIr39UHvSDcAxKGtlqttbjclp4PIO0RLp9Kdh4XrLjCQh4F3fTDSmfoHrCQLNYr9QGiQGSHKxB8Ea40odyQqdrfNBbiDCOZtULtBx6kc92hMV5rQiB9JzZR4as2ZP88Mros8BJg6+52a0KhqogKPLcfVIAj+uRgMwPNkbkzC24DaoYaSsRkYKh8Jk7kTp0K3rg/qDJq+E/lqcChuMEF6PNzUXNY4GkQLWaFFH6UW23koC8RZ3TQZEyrzbTdSbB7rvb6Q/8cKGNdbRpRp7tuGjxgpqC1/D8+FbrOYIUZor4Yl5GcGM1a6Pag6BOXP8sWnH7RCXItNsyxUPpgkrjaUD9rB2BjzXMTaFjY0U4B3OwspGa033BwqhwZb9MBss0WO9z27rJN3TAZquEpk2ua8U00oqAdGm8UbMphm+0FzyxzeWSXnuNtqLURsJXrAtGugzYfC6wmvbY5KyuDhR9focf+em6uR8uVFprtlTIT7XiBzgirlu1gjfFHDqk7XHoKh8VRmBLmxfuRBqSFocAYG3yGIWpP0+hFkkrWdBomBEclWrTVBGS1bsD37TXJqZtNxDasMMMu32Zws/7owWHoUEZa+NE1hWumThSotWEfMKcwNjpl5yZ304xYT+t1OzvW2uv85ZdQmDxRZZOQiwTGB4f/rfBr9lrVvljt4Z0YLIVB4OgOssqRY+bKXgvZ0uEiFUsBfZKn/VmVLtowJKDM1pYv3teIh+bCZvVNOLgH/2CVwEJ3YIbcO0WIEICuRjkuhAzLRiAw1Bpa4LbB1zVw9eWVft1pJdBZu1iwHbXC7/hCqEynH+x+dIE4cN5b93gyQ0crDvC24p2pKf0YONJId4TK73aYofOwKMlh9ph/Zn+/fmR0ZC4jjddFUjXWRlLEF4zYRKG5EQiNczfXtgkfvkmiGXdcyjDj3TF77hXc/MsArVUcYcmMRYrqGO8iqFw/pRwN6zeIrY0DrDveXN5NFTmyq3CWqOR/yIcVdqK4Wal5n5maSLlw/dokVEFLV+qKUtOzmO36uolhz/7iCAuzhT5w2/swB3j+aaZBckGrZ1vHxOHF56Hbq2/KNtTIN0sWt90fdvRIqWcqcQoEWgiEq2YosWgHXJc7PBnQtVCa78Cm3qzcFf5HRrawQWohuAM7JXxWPZ6uYzOG/961HHOzrEnG/44qW3rdA1RrRO+G9EzbXDouXHwhzAIb36Vwge00DLBx1ZNByIyy5CHg7pp/BaZfIPp6SXoaswx9KVquL8kIzF2vM29E7ZAphMJkhkdVDvJmQnwmCcH/zCHPmalz4U5A5H98IoClrdUFC0DRb6k1DG4aUmiEO02Q0yC6Wg7gEM7pp6cWoF3ykOv1fjCdTii+38OJTTc/ZXsOjECHNSC4eg9sy1DnToV0SJwEo6bMy3PsZdJRR2m+Cxnxmo31H9NqsOjijvEkEJ1SQzi2IGnpCri5cGbQ1UIymywL8FsWt2hGTyWIJ04FVn3yvjBUXOIApqvIUwz3Chqv1wRIYwPcssZGYzW3bwnWToYOZBlU3UuJmv31DqMixqN5ijJL/EHbb0KMs5GbaTKEmVumCJR5JnQ3y1mU9tIAoUh7fPODBMP0t4qZtqD/yzGH3eaEU9BWR1BOpRW5lsbWdcTp+4MuOuXxVGudkuWNRSPUDZOUIgO2+M4CRbNXPSjHmBtaTffKlHpinUxjAErnwcqkW10gpicfkm3v25zMylpH9/mayRfVnkj4Qz5zjhwjMz1gZbJkLzuE2NNkH61iBfIhGSK/mKXMkzPdc5PiG1lVd/tz5fO+cfkmjqFsC7XaZTVhwkhaEqC2NK4plMDPWTANWofpp8/lU3klYTq+W77r5OMD9A8n9V+glBBc8g7fSFAxSop7iHZYaygPvEUMxYrUSdnc+B2WzQ1zfG29qFgAV2A8h9VUilRQMrYv9o4vaFNlJP+/M6gjhYeX3lAMoxP63V9+CCox80I5YRzT31nl4zjPbCsVIY0uV2zklXylhbJET0izLkaKRdFf2KPiLwXhrapoowjuKVcK3mChr+P7SSiPxwM0BsK+Wh7yTi6b3si3A7umTVgXX8RZ4t9gGe82VKUesS/ojgdxd2yc1YtOK5MpJuHz5YarvwjauPydG02Lrgyt73/Zc1IYS1NHux9n30MD7K1XQ960coeSnwYJ4rNQmxr6UV6KuK5O+hs91N++skusvTahOdfyqXQcRUQ26CyjCxMGCH7VrpFemg3tnDzFTUHMVIonUGsSrFMJ1w1pHkjcnRE6+jutydVmm3Qo0HXuYY2k9VtbdDhA5taezx099oFj+02kF4WsRLCJy8qI8sPps0ZdG4C9JxJQQwp+TeqnO84p9CqibWlRap8c10jIPBoJlLXPA8v5qWfpygzOU8ZFSdAceAPTDp30+s2Jea2G1GvkT8tLsMjQKR4fZnrmWOMifsTg8KqbpE3+iX7K72ugNivPZLLvDvw9EhSsuzzr3FLdPEzcPfemuFrACYqF8/4/1c0wTZP77kzOptvje7ZFpSs458m8mWK0yqmqypJHaQWcG60NX8exNUTsPmNYN0yM4Tt431dhjTUAB8fNUmeBJLbdDFtL7WS5pXAKOCLCxmC9zTPXN3NPbo23osSPNK+zRh7sq6cEo9QokjsQhFAEf1OnmtS0ovwat6Dgpk6IOszSblmIBs437X1lhiAfLXcyYCS0mMacP8BO8vREpPcpfoksDniY6xkQJMgKUce9g2slRsn0q8dp+37b9INLrO8o+85VjzVmF5h7noEhsJzDn9mPWcW6edZ31c3K+WduuK3TAete2y8wjtyq72Jq5r0S0c2DNYHt4wR683iffaGvlty2uz0gUzEYkqUOMcTc1Sn9pZLekBQIuiDQbHy85ROiIbl4aE0mLvByDWU+z3CKuDq/mYV3iROfJJ7iFX0c6rBPMlQKgfGmwX0Ark9YhnHoJuMOKib5RoOvsbLL6kV3QG/9txCS3GIhLN9uVfNfvZmb3f4PB1CjpJhdXU2/uoc7VsFn6BVGr64Aapgh+bBL/FGKE3IKK7N4A5SXPePdQlIcxrPrvQxaxrYZaCIy2otLn5zAI5NPMWdJMgwzVKQUyWFERkPZpP/GZEL5oad6+tkXv5DsCOkvcA7B6dtfqCSdbNW/KzaSuXb+fdfrTqI1nndP5Iez4za7X7EfznmEfTnjPLCSLlM9GZq3Rj9fns6xj4TxVavvycimFn81MkepuW1lSWfgWMbbnzLg3fs2v4bTlGtolYBwEPNfoTW3uP7gLMExxAYoJDHkpvISMkaO+Lt+KSMVq29xTA2Is1ub0yd2BotlW2KBhyUb9KB3QIvtVpZ8TCfOfK5NI0InGhbvcYhuC3Iz6SxyT6jxJyyhZXqnO2Ffv9F8ZFDmUSJIzJOqHQfGDcOpvIsxzlM4pcO2OrNkXA/byoFmwDdH4ReZwLtZCmgEE/7csoHSw8nQVnv3KA3jD0fyOzNOLf8irpmPr2tzDRzmTATW2jyqdngJmtinE3fXum285QsfkususeEDwtZ2iCDZ4WySi9jk0tvryhJmmSOIq1yFuAOaLNTe15M9IaO403t2fxuOYF9TpzuTlvwH5MnsRkgVDkhoUgz7WY0oad/gPX8DSpMlJvRCzp/jN7K7wdSaOXdcxt6PC+kMiRhyYIz/zrNs+u/kqNMeRHf3+YjI3SRVXONt7yh+KHP+Wtxjvh5wXWq85NaxcxrC6+0tX7T/dioku489GK2huqTQjqhtSVfrgRw+VMPtUYTA0C/Ct4qnpCCo06kyIy8kvfYBj4MaGlWHsmye4DjzzJBMAFuM6aKt0sUV3uDiX+F9gNSsCwL8u1EYYtKPd93Oh0ar70buSm0AgrqH9lRjViyziW6/zcGzDEt3Omxk6ivtthnCuI1hLoiUSG/vm0oT9FqLV1qZLQT3OExl0weotCmaP7UHHQ2+Ft/vw8MNddCVjXUzVbVozZaWta3mAAMmAddyO44UDKXBABIOAcDjPUVnnsNA1cSJpMYnnB+ezQKv7Rtky0kj3WUCx3NfOrc9zaDUHe1cR8XDfaBeoFknIXeEg69xsf6PIYNz9xxBUfICev8a62QLRDIXPvcyS7VHyN1a43DOSIRu499JInMpvaP3I2bSpOVS4Hd49XHCLNxjVxvY5v5M10+dqS9hCbuGDVzlOvVQwXlwnlm3Gb5+o3KLq7rRuZ7zuUnV4Evq2BCCOe8XbUy7yrHcGhW+aC7ngIe18lCRnDurupHVq4Wn9o4dzwbWOJRpFS7q015P6sFPU17Dc8wZa0s7YB2yQJu+Z8LZGRAia9tM/vlpoNDPablAqM1cd7zHPrIiGGIqXrDPr7nCD/Uq9cFhLSK+CW1Gta6M+wOmJxVK64pAMyggdnShTmHkN5wNR/OuujwTIwsPOfOea49VEvZpSPI0lsyRvcQjw9KeJqT3GtxxPO7q4a4cDG3LMPKSNlEbs+UmWzeQZxnetD3zi9+Pm527vW6Ap12ATubPK2ogH2jZnhhsOGuUn8RLTTnu1L4Kf+BV/89f4P8Cf8mNf9maazLEflcKEs2l1LUSYG/WpKntMyDlvIdpjjIZe5hz1UzHCKdVrF1peiAGzhbV3HiDYLxF76Yj119qhuOkMKHVRWAlN4//raodfemBzgDrWtNCatxfbnVwKDrP/KYy93pFhSaXZd5JUDHApY8cGXpIbzgO0VuMqTQRdw+2qlqvVY7yvu4A5zQxQ3nES7NgQ3YZEwq5DelJDfqnTiLoCPGGO8Rq3bq1HX8y/VGiDjp8Z5l2ckobioEzn78hu/ubSBPzDrj8FJUZ63XjDlHI0TpnBICPEXyzi0fYDRoP4RTjy194eCcsTzmg4U0Y4nhI6doT7r40RetHPSHAvM1hwUW2XohSonNxBweG5VMrxcAjkXrQCK3jz3umt1QK/WgKMreSf5OlaxAOd+HF52YubA/LdSvp6hKlYaW52cef1z/d/snMtlcDAJbSkGXFWfD0iPV4MmKKDlG9pKCQwfICNdmE3EP+QA23/0oKElGBtmaMUjrvtADBnhUzmmEuSMutuUhI0KiUOzA2pfrgdoh5dw85seAs4g99OBZW/UtkPUR25G1LZrBkq32qvt1ZQ0eQMv1zakANdkA+SDkHBeoybVuWCl1pL6Myl6cWAHOn73Hm95Ac1UC229S9bwl6mxh2XcZbWK0w86bUhSZH+Ij4PcBoMBetOdYEEfxbVKh7s7m/oZfyHgMmzdmDBkqzrWleqAgPaomamMwOHgJDSDyYF9NIhDnTCUhe+a4lAnkcaBT10RVOJhdk/w/8A5m8i0Z66CuNZCcmIKPJNQGUMDDRH2pS4AY6vGs3nJQzu15kSv5REqxdn5jb3SnlY4iGeYzHnucV8faTUaX8gDrWM5UB5bfAHq0N3Y6wk0ChxTP7Tav3OcblzaXN8C/tBOVQ09wxaJPfjqa21QqBkl3vDz7yaWbQbXSK3con4GcMIfFBZp9EA/QatNTQjDH+E+0WBHFd6dTTcj7zPPCcJZBVla4Xp4+E6fwH6d1csE3ChPGDekrsh0S5qoWyclLlejYt1WPrwmnaBIP1ZOl+/f9dFWlKidrjP2VKDs9E/Ql5JJHXVg5wyjbKwI4jac4NyknKfgdfP8JwiSoLdSVkoRRVo2yqfbE/NA/FIH4U2p7tdG1W2DldDc0SYYKBVNx4nzclRZWOFcG/dd8bl4YldkI6e3Zg/HITvTg4jTQ76AKLRaWJU9I9Z30VD3nAIoQC/tDLD0lmpZSKfl5vsm7kxk+/YKGYEGaQQDkuZBIB54eA5PVIDtmV2Sm+NvvMSUNrZPhTBibnqt7oSqdwhoSm6DYPLISr+dA902kDgR2O3fCvJ0kFqUc4yHdI3tERopZdctX1J3UhedMxkM/wN6O4nyJyyCCc5pmNLHdwAH4CiYVJ/H6WnxUNE/uZhT9sim1XEJueerYdYnbN8Ni9f7MnvTElRGAPQP45P3cPo/Wy8x/Z3in8SGXj85yr+JGoGGZAHA44bX+w317mklHp1GUK96fS+lAvL8cPHkuVN5Qa6zJG0tDrGQWPv23WQeiVaBaXHbA52uib+vZMr4JeKpxuAWgFyL/fxtXXmb881gIM/Q07YMBWAKiTKajVvaFfbZ4bnTzSlMzed6QHBKXcnghvuIWexNqfdPAeczLbz4liNOfdDsk3DIx2UDN9hfrL0wMNThP3Ww8lTrqqUIR/d8zPqSQxdBvQbMgxyW6gg3M0iSWagRrt3ndqEKwxc4/PHv/VYOHMKpjp/cdALKjuyE0ei+hFnOkh8ddkVHGm50hwF7Aiza/4WXAzHI/xOF/9KjCcJhU7iKrKdxb5vjdrsZRU6mR3+OhJSUExmniJDOB4BnBys9qMCd5GGt8ioSp8bAQTn1VBgS43kwX76FehElukvMZTS46iEITNIt8Yvg+vbiY08+dCXjhmP9mnK82K92UKKtaR+68PY6RqA4loATe+fVUefG93Uu/h6m1J4poclF7sNXr8UecoRreCsCj4SL7kJoXmMPfEejk6ZixPV0n7sGygb3e1hSp9/CLtyOSitOGtZEBLCk1rOQQF+EoFcfkNanv+j45H7vsHhFFY3mD1mb3Lbn09dZEZ3KyBoYep8nLA0VM9wVPzjJGuc82Hn6eqxnL2dIRlhfLtDCV7vDxyQjvoVaWYLW9N6twWan9v+C+4Ob976/4qaXNEaUAfof1qxx0Ev5Uc97yIjEfY7ap5YPzmE6IvZJHDKrMAcG5/PXrbDrE4t0Qpn/8iH6VIjwnF6iQCFD6th5v6dTAVfaKda+NzDYe8/DTC785kh1Fl7Rj6ebSuE2BBeqeXSHvSfJk9mLe6ZrkXQpLl+CwrDQEBKB6w2iVv9cLRSJ9gODg2UzqdVuhL9HQyiWIVpT0KbpXnbmziOv9D9/ev8F3sdP16RiSmlEjIsYbyVLo5zh45mSHx3+VptkI4p26mcqmu1vk6JQ2PRPjAygOlf3ia7ATYwKoPFBqXwl1YPJh5gjGS1tHnIJ5I5cPhE40jrRAihxWPnSsomC62w8KqarMPOU/lEYOFcQvtVREibDGswbncz8CK2JWw8hcXWhelQ+1z8ivqaFUVABLe+0eZ9vU0Z5PRnn99dsJUTmA3DuZtFn10bnYCXt/glRO/x0bIV06z5PNhqgaapNXo1Fz/GYDwWvKQ7mq84n+LwfLeIS1bmzQv0ZRH3eObUYY+F7kEzt1I42vohKKoY4XqszGXMfYK1xMhSak9KByUyOrGAvUWUBfoZTO2tEYloDId+ZRyXJSrZ2tGF9EWOH1PvtKqXkBbdagNGEr7Ae1K7jZ3kMArIjPTgKAjvpQujvPI1lEve+IkjawApSvMsFIcKM9864DrLPUuH5ICNfAOIzEoy8ttoZtIPygVHg1sw9pWxIH4Z2/HyyWwYSydm05o3T0MpNx8ToCr3gISSHmzrl5nxcTYJMVH41m0CKUym1lV7nv/fgRw+vYLdnAPIX8dgbEraDkmiycSYAB/fvPfeYF8by1YuJ4Yf97DSP/gxptkUtCGMHQnaK8Va9y8sWyi6PNv1nnH0sj8KlcAW2ZMeiAIqm+j+Pg7tQ/Mes5LZdHL3wkaGLBWKmY6w6z6IP36TPZiLtFwOLJqZEIieZFai/vGJ3uETWj8fx1IxCh7DtkZdZbfG46C8CcC4dm4yV0jwBYwlASweUXMwDe4KfE6xGlhJ+XHb4j9sCoOrTG74MDaq+YD1+tA7jnQU5d3sow0zlwDbOV44vdmzb1+CysKxgxr5k+VTA5hzC6lmHBlWwlOFepIppvng891sBMGEGTNyLQEJsRgs56HHP4Umw3Q2fEmdV8ewYUddiH6Sg4iB/iKM+aGV/CdD48TXDFU/iMDjp1sO0jEEI1iTVp6rygyo5IoH4bmJh51Tc2DuQ7Rzm/1+ZL/r7FGfXvZKe3oqguPvQB0BI97wdOOa8AQ/OQ9ogB/AJ4/bpGz95LDyTYnm3srmDkm7iVdTJxa+8CzfRDeFudo8w4lC2BuGteN3IHhs/bhx2kIsmKlkAFnJDuyi6plydiit0N+VG37BWKmxiif6Hmbfg85juPYorIQLlFU6ZgYzC0CEYhsAlevKBOUTGum3bKjM+T5GWju4xHzzy27yWwY4qn4Y4BBBy4D7lPehWN+W3SokihQ1sQqScTfE637zXXx+GvUgBQs7R+tE0HsxuwAPh4ypMfZ4tnRMkpYbdyVXGkk5vrCp1SvdDT0LkFtuqpdPOcQnrSAKqxZMHqx41jM6UYeGKNm5LQ3rzvAOm6za4TvRQ4NJjHNxytYLetehnvNnfHeaNoF6XI/1UHauzw0jGsFu7DY7cNeOUReNbULpxrxKdJACSAoQIVLo30uw3flpY9YVW234dP/NBLY7rPCYk0kTWJ59dF/EdjaELksrhXzOYqMWovr6ws3lOSNwlRlCbKEPrp8+JAMxfQlkSqkpfyejUgqFplYc2nFzxG17cEW260I00L9lfGSipVk2kiE/EEgwywyERveK0FUm5IhNT3CW9/z6PmW4YFvBLdEZ00C78Bx+jcGjPygYFyAzyX6WJ1tcIjmALGkC8jyf70UEN59ynbIi7Af8wK6DDsblhvyf9GyImRhY/KN7L8zX88eMrZzyw5bXJu1dpjnbsoqhEwlHu5RHEMd6lhmtGPs0YE4CBT4ZARGaewgMJ9L5E/ehT5PMZv6JBxWZ7T5dbpGRHnKMEXHIZLdCk8wydmPfywCxWyOVIsAlOJ/mG7QGItrVLK7aC8090ht7CCkrzV6MSBkR22PdJK9Hkulh38FOlvS1X0Jwwn4vRSfSqJ3uHLozK6yooE4CucbXtHWu2fp7CirmINoriFnTdzw99VWIv2clCA9gYAVMY+jBEu5Bihn2FJGEW+wGpb822YdGXpWaqU9BeqtnWPE7z4x1hmmQ6DolTtYPIsiWOFWXfZrhT0HfF+UIu8yzXu49XXAMWqROse9PD0ew35DMRPSbsu51J0V9Ek0JL+tjZwmcjhMbPlMchLja2QtB1hIbVN8elhY1OpF5HPpgLdfNHM3DWyZDkI0J6Sd7CSmcbDYJODOHcqbnbKAkkO2Z9uRLcxrn6S0eDatdeZ6BxJp+FTqGfV2/v+PkX8ceC5GswTVxylwhzA7XD8mbk/goAcXI3OvFA7qPtp8PLdwDnMfI7kbcJCXEKLpb+9D3hFcnor+ZzGFXsdZynIOeLQxMZBw8ORGsPCWPr59e8x6S4FkP1KIw1ZujJ3j2wXL/BvkVn7/d5lhAsuAcYRfnsNs2JUw1PkI5LZ+xKrMJQ3ErsfynAnM2YLWDrPI28QLE2EoB11nmIipC3DoT7xOyqMUbIckWyuuPylJdeFTtBEkVbiuwRUBBW/N7FSGle10msQu3er7z4FwORx3PtUC/aJ9P14y6wCHpeST8m6bUmloiwZ4jKWYHEoGS2RadYIwgAX1RSKYkTHjb4/ONliGnDX9HXATGsJpzyaAr3no6dxEULBPv61lcmPyjkJz9YAliqA0Hx4zkI7wL0tNJtD9gNji0i5k7Vj9HQG46gkJ/GOBxX5hGhMpNDB0lmFwTJBxZhBrVCaVQ726Z7l8OlBwBPcwtG/pDzVhUw/qk0i+QDFfUvvZq9asDLoeUpIlLw8S2tQVkQYeg7djNhXpVWjATrKvf9FSykH2zjNf0KGtjt6EciIt9v2OaeUkLGREYf2QcgQfFtCf249kL333D4zXuNIORemoKSJDqnaHoJ/Vo+P/z1WkRyFEVmLxOUNVLp5SFYvZhItsPcNTjryQgNpcis8SHRWrzsyNiHjYO6XkRziroBCV/T1Y6kuVEpTbJj3eTdUE8u1s+jCIKpCgxJ2u+Qab3VN2OLcnZfG/WIDYDdVF/KSCz2X/FGvtmOA7OMDvHJaZHy/ZpJU/j8lRqwlw4MYOp4AjcH5BglIq/tKEMVJMgZWlsmAAYyD0gKN8uSyEULQnAZ06t9+fcF0NcDpZjejX5wv6QyozH83NuSblMFbcbkXMCnsixUG7fbshWjjJoBY4RYbG/56YkPymaXPyO+1GIqzHvyEVmACQccLE5RHzwAomFFCIUjn3ov0VEglyOlsXa3ArIcoQnN4QlXItqwP0VsxM6xgvGGoHX5ek3LLURea11FYNXryDNICncpLLhSsa7zN5EcVjsiw0isWuZMAUNZRf/lbImLf4JgLMrfaxQgZJTD1XunpQTS9Sui7G+KjxngH2XqZdQ3JcqXsh8Pg1H3fjt5aMY6mUwyt07oq3KlpNsmmY0VY1fbdzZ1UBG+exlKelvW+Zz3nDwzqpSRK0AbGCx7DO6zNS1INVYGTBhJIRqz+kCxOAwotwmrA1rHT64iS0jklyDXFLBAJKxnWaQg1JwROcOd5xF0vhVCFjV12UtnkN05FxGvYQBODvvxfxpln7NUQyPQW6WlHMlMg9WRb12ptNCuaEDdfVM5u4/dvRbixSiI5yBrKYOQx69UY6E9wCd+zgCrnb/sC1wvJiUJxpLQsRXnCIkLY96M6XHAq/BWVtJ91AU/m62+xACUJFdtUzUYZIRsIPeww73fOndHzYZUSHqmJxXIQ+6aJVHofODcNyYv5UiS/uNK+iIXumqI2A3gqKq2nHF7vBPopEN3Nvnf/NHDA0cDFtSdSbgqJPYARJaylgWjBPB6P679JUkiV3XSq7PFV5wmZbpGhEZDIp80inaOKujnW7P90yiQNqbPrM7C5SwRk5yzzHoLX9VHECPLL++BTm3a7JvUe3PjpJq5WL9KCpoAEfu9hbhOpvQgFM+ubo2G3wJzhLONXcJIvO0hLF0bdqCg9eFjY7wagFcNSvSuZvJiA0SB4tGvlvk6KyD6SNzKOW9gBZ3ZFgq5Wib/kWjkOHeu+IaV5lIlAy6bvgkv/e8NKYrD2qDJQAmydnE3S9Ufz5T4b1uI5k+Z4p3NfsvnHIUfzwSNS8hhIWUDZjut7UYeqlbExSUhOI6RGO+yfVTQTf3bEd4wJhCG3rBM3qlK4/Qe8g0rWUattCkLWOZSZzMzXFrRuxbF0EiIbBugNE0sKJUktjUkPmI7mGKQU3jmrS+ZmadAGNFLY1+UruN65gWA5DUxLInrLODs3KOn3H0299y450hocNdPmweavEtBfdJkxW6XqJY3Z/hXgPdNlFjpwkCGer5y5/xgTB0GQSjZmuBiMhHkukNmxRWh3x12UGgQtRYPyTngPPeQ+gwc5dcwxlg/1sNTtjzx5ueCuJiILQ+eo30W6rqrhiXGJlXhQWzytvOgsDkLZcPDDOn9kSNOJYRNeHOtytNev0nYFet4jHsGQ7n3/Cxog04Aj4Ww003VsJ6OqNf6vA0NkMUTk2D0O2+8p02F+4igt5N+wPhT8UwBSTbaZf8Sc0FqzF09T5bATcz8sATq3nVirODxK2GP6VR602SdVCgqdXFIzGiGQA/vQGfVElQ4qWxKC5E4/8YACjdgJqeo9XOnV2j8gWgvzZp9jLdAb+09lRHl27uYmB76hXN15tUPIGwEncQkcLruaTxagoz6FC6qM+fJ5RyF7unC/HsLkBf0EtYgQ34xKIZh3HPIKSO4sE6Iqzy0kWkB2Rbi4G3TIiPh55/0lAi4ou+pr2AXiktNCR8q+KXEZXkfvUdU7+fUoJorh4PaLWOVdrSKz/XgTgmWmk773I0DMQgLa6yvUGBC6X4F/GoIvwKxqnwEdAzBufb6PPpccJ8lLFWb46c1EjNYzIjE0M5q3DPF60yt6Ve0KuzbAmbWbXged9n5FQgyZ5sbp74vx1jeAU2enbB8dPHmEIWO434OEcVq7CaZOq98+Ajs8eXT81zS4ZLRt1c87BvPsIoVowxw9Xbt7gTIDlSsFC2HFu8qhAV7IJj0ogg/mA+Cz4IvqWvel6tBN/iYuprj6o5bPaPI+DPyTubgLEhc5xwwIe5B/P1WCuQjmVTuVoMY56G21F0XUNwREc+/LRW+TybdpNU06hNtX0UDU7l2ucbXV9uxC6woYJeO6zjsCh7mV7OmyPyNRcTdm+mC9O3DNkON+xXnRYkdUQUqLgQi4JR1AL1q8EWlYF3cx3F++922AKloYB99NAHoCmsUsqjqNUPFojdfN3/eEf7TEbl683a0t46jUxHb/K0XUjasIsPpBJzv4l11nlCk/qQPq3IUkdErleHvlsiksmid82XkYS06YaF/Wt0RAOAKvApflg7e39nxDH/LWsIlvTi0YkDleWRyUIQGxwTQclsAoshz3NTm0F3KKyi/8QQb1R8I1wUOjp8woN6qe99M6+4pUJEjBgHnQTvCOpBh05yplB2rL9MrDvsNkgadrfcFnmejnKvbYAtfhSp3obmZn4r0J9LKo2t/AEdUNDzfIVd1v6IDcxDltR7nyIx+PJMlQjI4hwhgEjR6HSVbs42QWmOuFYdX1lnHrHuUjYemezg8P8jtxxbwDZ9W8ZwzqpbduZRKHOwOC3YaCKUYW8Hlp7B5uSMQ33qvx65OqG1TGuTXCmTITOraXHuQUaD0pAFqYLCs9Vk9k/CS9zXrOZKeQfMPvZmB4aWXGcM6xmLKrIh6eRazA9Y+tfRWkoweB2WYHr/sy59++wocVJ14G3QDbS3V3elk+/clFCOtiDZ0bbCZlwKtif1qbxvtTNtA4HocUn9g+FYsPydp98s4T/UA/Xlj0m9seq2nK2imgFxO4rsHXsPi+sRZ2ytbLigYVk0Ffrz/NpGztcH22u38SPLtQ6ZEbgRJxQQ0lUlqxs1NN9884qWibzcYrpSWaEx4f5ycFD87OpQg5EkP/Ege04DI7HX2c4nwDxY8MPCrXZDdwMEvKKDCA3WVugIf17iwbmUDREjOHzA/EHEk+waPRgO1OY+x3ji89gIp1IKGLh2XXaOX1h6uiV9IFOSBArXsuUn2Xra/piP9KfDpDxXfpYSLhdpxgAFSZT28g4Fo6SFuM3eOG4JoBM6VeErFqAZ4euthZ5TBvt0/lJTQIF9DTC7YS65PrxiEtuPuWMHGqyOoj3+S5br0W6JpWylMf4SluEefIv1C4TOCvbmdejk/+e+fQ68t/L3jAw6PHUAixFCbaciOf0TC8mclfHGmPHP9cKxuurHxc+yBiDMIzGbbc8gS1ABsm2idFitKX+DW5bb0XNX/oAOuH3hAyG99k/FEZ0NwYjsc+IzuwJ2HfClF+T4E2YuZay26ElsRvoPLyzutWfbu39biAbWWGoJlVICfymMAlT5gZBChxc8ujldEHPfAClUC3QSsT2m6HHFbr6UK/nNp3eldqH/RNQnf2OHBBYSMG5wrb4xEWJohip/wMZMYwtkYHtz5T7Qg2DI5i7X0ChtzPod7rqDMWrz9hQvFodLPOQRGo2v77UH+qsbZbNCl5EGYKlN7jz5fqwl19M9rOd5OcShYHsY75BiehdCsX/ie2bGA/DoOqLv2wkKmSG8u5xLP2O9Q2nGCflUnBkucOZ9mXY4zBcpJNSzIMilQOr2ikZzGCDqKZC6dpVILH2JwVRY7cfxSzI/fjqK3nncpwrrtVloutAuLVvB1bI+rrDTYd11USHJ15qwR9RUkf9EUHmDczd0+VEV6/soYmXr0CAjVblGxVVcW5w9Ytkn1E1NaqPZG6eLQqQI57NcQMw8tCI+AE/edUPqfFlGgHR+yblGOKGnmKAthskhJZTohD+doJI7EqNSDZ8EY73f20WuxesPLoV2Nw1jX0QpiCe7A3LHGSqKA51wLw8nHu83fjNCTYHW3HlfuduCfb5W+7mTWRrcyhK6ouyRpqMErPRCrRHgqxTJVXEyCLfsMshf9bztyRqzrspnBzbmpvhLMj6YyX45ojUChdQ4enUMlZqVcIujYAjUCht57G44IQ0FQ0h9PygJfoR+yhRASqNv6UFnRQ1Jf/N0R5arFVMCg7Lq8Ysw6OngYXanRwEIzZdA2wPFOqRF/sWJ5Ui02FsK31qm9aDIWX1Jspl4Bi21nv7aO7t6UjRPjXGZbWQKPUbfeVZiu7KqZ5bcWPHt9CQVVmBfeZ77Tx+sbojZ89lUvWvFSXgO9evTD9xPek/ZbLwkot7Y6TCrXQzJWqthIZR/v2IkQdDF1TCN5FlV0YMe//cH4kGKz9r3kSG4uTO7CdRLdE10P58uQ5AXy5riHne7h1zX5CRK2F9R4KvoqGhM7Qa+03llqEApZw+q7p5/CL4uHKG0PHkdlK2+tW4RzPjIpWVr8ehPcO+ycgSfC1lulHnL9ZsngVS3pMIiqElN/7njzIktkYNYuw1v57OMWSFaFGohTG/SOCLG0PASLdzYFFkNVyXSkmbBCSmDegQBIvKeJVHntMH3MOxT4xTBVZOA75svBkLyqNrnRggb3GTgLTcCbVXD4qQlboafZCAje1GzQ39kos1V+pAez6OfhulxUmyipxm7U3YscDmpw27DKUuLmGSNJsiKOMjXJoDNDIXdUUOBpe573mLqWUi7D11nYBlvIYbuMJdPyQvS0Qsxhm+bXwSluQSj3W/gCw4a14d1PoBKYYX/cA76Dh3qTkvvhvrzdHsYnRf1o/uENMBhYAi+oOJy93bIknFTDkh8tJ1eodCII0dzlf1/IMCXd5KFGcI5+aoCdqS+YaBTqqOH+j4iHhdMqpPCx/9Q8hly1ZsYZmwUO/zO2G3614Q+OH3Uv+6vMVzK1nJtTeRR5hMxQYNH1b1vyDfGq5Ovu7A4JiWepEQmd4IVhxPpjqG5lOUrKb2kA+hUHGX40jEmT+mw7JgN9ErspQvlrLjIOG+UJUt5lrPeNOmZ1Mj9fqxxHzCBlu7qj6zOLSBhD/PQWwcsz5/JMU4glKc7bqVSmP1Ve2uQiSWxrNYW/MrlVXd8DQ8LX033raejxHQns8Rh46xyLzhiLKkkzFk8euf6uPOcagGA6k2rktLO4+FuI38yzuo9MC8v8zLNtoVW+6BmaWaJRfUH8uXIftr+LCRCK6A7j2CUKH6jGGrg1ohHzl/ZQl3DA+OU/12i5kHuGk7XdUdUz0FUNoq1zi4Q0e2Szx+DlFlU/Vft5ZR0+bEXNWc3H4TpbPd+tS5+vEpZj0LMEF/3v2VASBhStopjYmPHZ39eiN4R6B3ZwZPCT7Xky+C9O1TgrMtOMZ+Ey+IgdI08EZOU+l4yga9WwTVlo32bdu79gPxqr0nxFsgQ9pJGQKpc1eHT+utU6oeIdnsb1uueRUW4XR7nW3gkrsOkpeal4+C/mmRAi7TNBMm40ejix+uKrmLNlMtDOxPZvhqRRbf7ruJ3W6G7fOYDlQ4yyICSZ+0qg9ti6OtRo6aAubCKu0pt8krvozAQDtlroIzKhA/kn9G8IvhySdl6WFLhmW5X9DW6UKnN7KPOdLdiqTRQbLbjMikdRPGnm760GUyTIb25cqNjSIje0H9b355dCVk73P+Lm4TkaQtuM63ldRDG645d2RZ5Aa4S7c0DYVCR8WCzkgm4XchKo7PYRXKR+8tsjUZwJZRo3ERcFW/lBws8KzEg0vQiJ96i0Kl30/wprxHnuzp780J+kegxhOBcwzzIyMHToDjQoKPeCExs7D9dfuR5n0Guu5UNygott9wNrSYI2gzHlczSLMFxm+/2wrqtY+XV+IcWDvwX4/k0wf2SrKvz0QT/MHMvhnNKlPCm0tZlYuxAWyw0qvsd0tOupC1KbQAy17fn0EimObU9BfSIFenWHB2rVSnOAz9VssqJy2lZGobODzxryxz4hRLryjDn8FRI3cAlT3g1VKp+wOddj0G/tCi6LbOP6fPoD5J5zQ66APquhwntrSscjtZcwmKHBD4dwU6SQDJApN2cTt+uh4CW0/PGKD7RtXaee60HuZZ3btQ+V0bPDV9uGh2Myb4ZyYxHgfKlVM2vXgEdC0bgt3CjSu4xD7Ynq2dR5WnGmzFeuljGpYSl+dhk7cO8cLc9k3cmlljzdgS7aN5MkjRDCRyFjjZzqeNNel67gQrnOcsoAvFkCfQeZSEnpgHwAsMxAqWR/t8Utrv1nVfZ7x12Kit1NUi36Urrph9YnXUY4sLvEVB5KPgbC7EpoQDEYkMUyOPJArKxkaPDCxmN5A0dkWo0nUM3m0FEMthBDBc+prtMcxP7wxUTEqCFKBZj3radrvNXFMGyznYVdNjoCTjhO2Q2nlQnbom1fbztuKtybDnPOpk0DVON3ANaWTvkiH2312MIEDD3Fo1H7d8TGIxE2VFBClQjBd1d9DNp6Ea/g8Lj/JIgvT9rRbXvO6l9Pr8sZyvy+StB0xmao6pZB7WpNWU635y6ElpTfK41vzYVlVeYYEaUiSH+hYN27wX5kQjSikm88A3alC1Eb32LWxHrQny8ZeWvd3xVsqR/SgxaDwAyIf4tEka1WJufAGIXqUyVz3ez5RyKtDvDZhVhMIqV+lQIJpegfI76JB7VFKmf0/lrQ7sRxQQSyNO28kQsKbEHiy4uMp+v9oCJ9rBCmO4P4lG8bw3DvqugJ1PvGlx1OcSByAXA3OoLOcy7jZ4abuyrkjtdECR0ZFYkPZScZyF5eBh+MD+IFHByqJKYflD6xIunQaEF+1LKxAPTGd4bsxFt8Ltfel8JbVDtGwrrlvyULMq7WrNEuZQ81IDrt4msjfLxLFWb0qyvKM8kkRYb9LZ0AQJKwjVFNa7Km3Q5WyG2zdkkgEV91gn6iiEroeZlhrBgGxYR0uckeegwnLQLQtd9HpaDR3aFB0Hfej7c/GhZvvlsnG+PrCGMivmq/J19BMOh4IygBBx34W4FeyBa/WF1cAr52Hy5hA7hT1wAyV4oleRPjQpCchc6LbEcmTAj+v4wCgxliZbBU2JoBspsLtGjuTVZkanfX+DXRCVvHyNrbY3AkzYNj3Vo8oH0V3yuG09Enbn71y5m77e+N1hXekvT3gj73aCMs1a+LcXuWxwLLJFk+qF8zou5vXRICWpKAHIZoPpl2Po0Rr2a/ahUBNDxy467UjTvlIgz7MuIl9vX42iuaBKqgyWUzpe7qbpyE3ioBJRPw/aiyI0VmrV3GxzvCAUWQkZLdjONIRfD+cKl0BvOtuQctTarv09Isl1v1NQG8/Ea+noVFlw9pp9+XMChZa9AC7z46IbHGwu66TuS7yzmhRoe4/1V8DRz3Err7Y7ajnzDuKuYQhFYwicrf/G4pEcOS+rceDxl8ZG8dfFpOGo/YaB21Q1fH7h3BmlzcisNuIqAAU5rpvWUuoYpc9peLkXLIHTf1tn1bC/bsfwYntNsNsj/IohteO2KkLt2487qe+JbBecQCbcJB1UDF+QitNMRXrcs54F6PUy3+7bYDsQ0wi+UrFhy/KY1HGjWb8nkyDVk7jAF4qC5NpbrW7o17pXDdFI04dwGAAKgu6WXvUaR+0LINZUL/8aXVxF8sxFNLfHWiUF36qYVwWZnjYjsObF1Q1zLpycyPDX9H9gs0qIg5+gsVccuXhpbKDLMlakHuF1FJWp1wsyv1gbigWIo8tp6cLNGn+gCO9BZUGRmWPa0iL0mxht7RrtlMHbSX3K2RPwSK4Gd1mrQDXEc116iAh20wdah7IXFhOe/C9Ge/62t4Ui4UzbXLb2rF9+YDbLtSj48dyFY0rOVimHCsTMi7j8JhstfJDVwaL9CSMgv9xnfWxh9eWGv+JOr6IqzM0+e3DiMPvFsHtPOJXKsHc6wFe8A3X0K2+qKb8X/mxaYABIhFL+yRHnzYWlkAR90uGT3i0vsN/93Rh0ifx6wOUL4cMr/OKGD/vwMGFRYt4Pz4HtLy1NCelXdooaaToz7YZFluixVgKzfc/l8LQ2VbwEapBgxyc0VtcHa7gli9G2546GAMQwtGnjbOCgvUJSwQgVssoJuhf6EHLzB8MZcAkDJlflWcgPuOWf3LRsCPANM7WKaFRVs8sEzAWqBYbqYdc3LN5PJhjS9BXmZdGxwDINaqxx2AafNYuMSlknYd1ZEkip/W/SuP3CXHqBwP8l8rdRTQaELVyUPHR8wQlWwrnyT1iYmDE+OFd1mYTnwdiHmC1/lLA590PdRxrR1EmJMeHI1RmfeO9zJbGvZJCsdtzeNbeGWrA9oECeejVnPGr5hT0DzXNdV8vbHFisXZK1Wy7eLqRLcZIb2VMTAgBAo/h5Kof2iZReSzRV7L7MOSkX4eZycRVcieAGgMgMeh8uGHV8aoiyGnHfyRNBZRMn6XLv4lR3M25AWmsXD9aursoflTwiKKhWScEphvTuPRJXIuAoSRtdftJbor+grbNhAhcelyZXTLYBmbt9sYfDEo2bs1ZI8sM3A6af6EC0yQT4+qa3BwT8H3LyCWp1zetAQ28q+rEpWKdmxVEm3XtAa+YIrk42DF8efg4KSIQYMYqYYMvyt7uyIH1ZMe/XJYY8J8FlwBAGP1SQ94yULV4NZrwKXQAaBlfEeeezN8sy0A6akm/k32fp9yOMZOGOllT9CUGy+qiOP6YJqS2/RnHgxyc9hDmtw/3uNi4thuu8le1KCVCiMfczCLlWxyvsMXVZlqc4TKt3ybLWmkVqh1+epsKAS/z61MXiVpzoPFFvqd3thvhCi6O6tLMwfQbQo0wcykMpcvgjMhck5c/YUzACduwaYJu4UJ1Xm+7OW/XwMd/8FoX+8SyIcdN47l2ExgQlzxuPS9QO8rnsiQOVehYQtZoN8q9pou6jzuHDKIzI7q4HHsa6APQLhjPVELw76dB48pWMiPuo14xeowBaJ76s9cfQ7j8zI2Mg6iF2fD/AcDIug+SY5dPSUpq8QKaR7Gq6WwfW4DQXhLswryoxYxyWdue8TQJeClGBQGNu+Gu4UxH1p/mK+qB+g6VvdlwrddxmKvjfUMu2JPVGAX0BIwwE5wrL4A8wBzUqaN1jKMF1NziDv08LhYsC+yKFjtCBxH+2oT079c+/qCeQVXKlpVZSB+fE8p1ilj8MIVm10WsVC4ecFAAXhUdBy12DGocDnePud/ylflFLOqqLI+QhXsfHc+3Q7JN3JW7yKVkBjZpXnYkxkADgUhZ6oLi/j6xMOEJMh1hyv5yVPygoWNdOn0N00b6+X2WoRoYMOp5vuOC9wJmAe1CzLeB9ieI9a/8cxsJ8Gg/2UKYCYGlO8D681jVyn6zXbH+z0eBIXA2aZZRGp16dFDrblJ3sZ+7zG4nN9c1nmPnQFB/aL4A4m5zguTh4be1O4w5s3/0ChDvPVFf0giyIqQ8XCu86hg9nCzUX0LYKjoezza+sVqWLeWekMYV9d7SOlQCqn/WjFODGOSqukePsY31Umikb8e7smfQt18Alw8nh0HtyA1mffnfHzldaqkxaaeXq6mrQDO0MsludTziTXTu+aP+UvUHyhjAFk+lo3pmUtVjUKhcuXwEB83C/IrJLT1Oa36tgZ6hmXREo5q3/MOdsOeNJZJezBmrQjACKQGUlqQto3zHVkq9jo2VWQFrnaV2NyTdBW+sxrJItswdl+sBdJv3YhhIavBwkICQjFwnfrsynhtSZkmbQA5XipVouzmZlKoHWzZSpd6y2/J1pk83A/VUGqPS3CtQqbOTsqHcEi0sKB+JbtGBMuO2HiVJ8krR2thRVYCSdjhklth+PHG5I80uhqT6fQ1roR8wR1vZJTOLloOxV04lXge6F1kUhwy+eHZYA8IiDVBGx5H5la4ImmvVAU6u9FYQeS8GBTBM92Y5kW0zThE0q4wloSZ3YOM8rbDI+D6vH8UATIRPwIHvISHf0k0y7aVUKbIRMmOR9A2cMfP+jvNTyXv3ROCxDxLIghNtJCojsiA1inYI+Wk0uoka8r0itXYnwARyVjH4HNTSWXo/dOOXXJ8oBlxQcbwR1FNvFlB8T83o9P8CeGrrxLupwZwUnKyyubhXW9VWhksg0vpRE+lWmzHRCLyJe2n2pu4ibz6kN8yOHL4/ROSZ2jfODNwVsrYFM3nDNaVGjbUlhEITEc7AUs0+wXRK/ZLnlOB9vk//Wr5D4I7kjZAa+ZHGAYDQ/387UgF7IyWP3vBF8yEIVpuXCzgt2fjrz3oVw5VUDeaf0Jm6nCDNEhIRJi80ye70m2fIU5pcmy9MHkNmIzKV0T6I9pGTKseWxSO+sXrd/0jqs3MwyiO+yGawwaoLZXFqAzQE5zgsmewLawsEhX5VP0YGOM+RZc4R+ctPyFq/dF94yVzJlRQrWLLZKLXJ35GR6a7dnC+5qfIz+D3IE2E37XdpRkWuj58M6ClOghk7zrXLijWND5exDsIxN9MTduPSy4IcVn3CX7Gl36Vi5HMI6tjUQUY1OIK5hFIFte8FbgRT8/wfHf8HULkQTBlW5QSlsccGR8S/aBdQCUny2Dd0yMks7X/8+JYhlqwhkCf8t9/mwX791ITtp/Qfue7HmAD2e0dlJJt6JTwh5erQm0Hi7PBSjbXrYYuWekGGODz311FtYBXtC6xVy95YiMnFQWZEr+/XcQbFfhZtXJfwGPgyPFUs44W2TKfJKIFbU0gXL2sY2HYbaaNc1NQcuXPOzvvCoxyqSTShOk5ZmsXYeoo4fwNjUduRweVKFpNmaeODNO69sqyWCylRF3MXOtUX6HusfujkyzDH7+7W/yWC/3/Ky4ijq6L8ltB5ko+2g0iUKJ6LYEaVVPdjPRtD0Ygoc75Bpno/OrsbRrdRZk09+IHBNfFvTT1hMc25E7OOs2RONulq754BwgfzYc9ty48NDMfIwFNJP/LSxzzvo88dpELxjgMJAJOkRqD7+OAg0czABf3IuEHta1oVC+LwY6frGZjvbDi0wS9LJb8yz/ZIn5QypTOMrM1Xt5WfTxHrL5TG3vrLgBvJKlR7rhoF2Zxug4Sewg0m5eAI7JSXzfa9iFdbCQiU99LBAA7BdKQx94TjZ6mpyBqHN2cAX7r84424ufY5xBt+31A3VsEQZP1gTTR8CQ2O2+MPEVITlJzP6oVRoUuP+ZLmQKcDmT5QzVCW+Wjw1GBrZ9LfXvzDRXvRLcNe1qfS3nP1C/rVuKW/jATjF2SnWTK8F4OaempFnyAZpBX17JUc2b3xMxZj9db4Bj+pVXZQBtGyr+2tuBHGUO7fnQsGTmFpJOa1MDJHQyBZxhSTwy3CQpDff6l8ibd6bVt9WgO9NaS9cYK2+A/7akW2lrl3R068eRXgqbXgzW1i3+auFI7VTYTtkh1NQbUn1S9b8C63Y5Xn1KWGQBpD2DJyfXFUmuuX2Z4vHAqn8fLk7+W0i4QA29Tlla8yl2F87ZbOX0N1fEiuh4PACwN6TuLTbznMmXIdugzOY54DW0IG+B+X88mG8ptOgVAq2Y1TazACi+xfSQL/Na+Dv3XhB/ottI2UlaEnlJwrY3UExebMlkajOSgUVfVhxivJcajfHjGmdxz2oTEc6IM2ily06LQkKODzIWHCDUu73Rl4EpAhdWCwBnKNoVdoIPBu62Nxd7vMepzAnB7TfbAGr4FXyduCBZWsDj32aZP5ZezpqiWfVWurnHvulq3hQLAq3yfjxERBdC5hhy21j6g3J20Pzw1MQ5e98wtYRV9SQYXArxdJcIvuZioI1haHzcSEl+dlulqZr3aCzs19tB6I2tH7ZkCFY43kUL3/XFeC1+i8EyivTODYByUzEOsmCTTwMFhsHzBpLjVHRRR7/SOnBtmnP/HhnAzPhQaratxAV3qvauLB8+F2k8aNDPrXhtAriphB7Em0bELHy6lClts11Fss88L6+G1gXnvm3fbkEzwkRv9f9WEAYT/BApwB+C6wrhkVi5wQw6HHQI8XP9sbLiFcMl7d2QINOmwuclIF6sXTYtpRRpQ237GrqbkY0Vf+wXTiYVtosM2DbvINSRcz93owUsjg1DB5XobcHE0OlfWTkreH8Up0qli/q4WJmPJL/3dKy+GgKxeLH482LdEWqtP/dv860U5F/xTJ1ltEM/p/XEdGXc+l7nX0ri34NXbXHNEO7njp1bbKf7+tV5n+aPDPU9T13i+jnH7qlRfPF96l12sJrpTdd/8hTnHr/SfMsDdmUsLr7q/xpmcTK9AwMIx6u79hawu2zm7Yh+TRl6TShNJgah9HCDd/JMXOsYOL1dJU5g1/KKp1bNnsJnrMktEXMxqiW4qS8GntKXiutIaj+PN3Kwb5Uuw4ishmF1Ne5dma7AiuaoM08R/6A/NjgkqhJxNVj1YMM0QK6LL8ouAEadMEfPtJhYddZX9Vxgs5H3drCgel0nQxCWAMrZYYcaGMmlB20xA4jQFXABC7ieQ7uaQ52kEFR0qTrwqmhpDLBSB8FwplmhJN3fuvTNrXlEe525oTHPCKhuQeGkUG2DYn3PiNA6gMhnTxHg/9O2jFotK4wi7F7HTm069wjVqIM5+eCr1ottYDqp+7UPONjI57xTwcwwKEhpf4Hs847ht0tBFDWz6lMzwSmSLTDxH2D6PgpySKzbC9wHS2tmAuYqIuakZKLoeEd/J7o0yn995q3DsCyUcaKIIAR7ox2juGMLMLfD0OQPJzw6c+huVzLOYblCLeVR1D7PZKolkUVaEv3uRoVxwGhNR2q3pXRz/Q+kHwXKLQXmpFs6i9Osa/oy+fvHPnMH/pfc6oxQ1P5h4pBHhGBV6SKViA9VRFrjtU4Wge2ev/Vx6p0TLIYpNAGcSqOMl7HL+3/H4ur54V3YeYotgFHvefzdAA7axus0hROZEI1yX2Cvd4oXu5o4XinxbOP50IGrGtmqdlPiHTMWjL9I+Bn9WkMKZYE2BiNH1jC3O4AELdyAW6a04Ytj6YvzW9LhG4jepcQZqRs+C8qa+NA+xTQlqY+rLsWBqnkjZWrP28Tc2uTCuTPZG+pk6yR2qFUR0LicRSrR5/3uteWGrOp/t0Osau4U5Ic0/plVcNlxV9YzWdrMF2tMEF+WAyu4gLkDfPyE0QZbRuxWevBSoLtVCoFD3js0UXSx/g977iA3W3whUL3CWmI9cpVB8ejZYrVHQigbRqlL1LVnKe06aRtVzad3ESWLE3BsqtOuuZpN3RlEEYNSsbrlHchJ3JPODpn9FOGoev3sDMuFo4qRBHr8OUnTUp1/s5ODebX7WPZImjScJjegVYgWcrNvCnQH7iKRTGGme1Xnv7x6MwiBgdOSWDkvWwN/pBCq07UGipIlP6JxeOOsbKo2zqKNUGx0IV7azUYmadVmyh8rYx77f3ylkQcbbMyozWv6/sE68z6/QNWZusliFbdHmsFh1WThJxiRF06wYC0t49JLruvjBhDWnXrk4eCNtH2l/cPM2o6Iy2YOE74sFHjTFmD5XDQs52YZCUHWI/5VdvWYfs718dzCPXQdTU380PgIqzfHbvCxY4zv8ECsgcwsj3/sdqTm+a5ChRFGOKepUYvXA66dA2EKgXNWUeznbkMc1Duepd7PxpaHh8pw16LF5sareYjaGrR6brzPwpwpWjw+98dwqlWOAl4YWJkdrdHb3x+ZlHyR1+rQz7cLivB8+fFi+SgCSXofTlJyttbo8EkmGoj/QogdrY03sL+hDYcwkGU+/Bv+cECPZ1nrjUGb6wgqfURiqwCxrzn/aF4qpuSwjmr6j/ShECh78WIZZK+VyAL4JkQd3qVZt7vfFD+VtoX0aqtlpEXIouP/hmkurfHYgU89ns3gnywgf7TL2mRIw9rnBJY1NZFiiSUa9ma9wtTD2WOYrNyCCLGR3WtSVIRcSf+n8B0Q306npQvNg9UcIk9YrT0GFUQIWZnjSppVkxL87OZ11lyOikyzDWep4DryVNyrd181Lt8rvQMmjdeTgoBH+jgSYakqgOT0BrhS4MI1C3APXVzlk8ZMEgDh7XEE8H8Sd4DhANW/PQiT0w87/331vP7GFpeYcehq2f24GLshqbASzELV44QSM8BMqSfYk2WaVceJ3YQJYMsQMpKzbK6CfPpfoyjUvkl4m9IfqjvA8kf92VInCM2021oqsKTsCkLfryAwhDFtH+xrPMbn0gxwUPdJaSadAR9aslyl8FzXlpnaaG+2dQ8Iyiqc6XahRw10rkkwbPJ0pQWNNKhs4jaj63yApup91r4z+zSHspLPLzKpu3dP6CweDYErF7iP4Nm3YOTn4PaqNZTJ2S5g6MszXFLFWA5qIK4ggPzq1PuPtituU4wpG1Th8QiTAOx8W6fUPADFSwWvpI0IHXRbumJWlEaIwPOWQ6OXn4zUe8sxS//EipLql9LTFQsrrjOpYt7evtv+jwMWVsGAVyhAJ9IflPNQON+R8I6VknEpY5dXz74gMm4yXbDspfZM3Sp5E4XuxG0ADBFdUquSAi/xxoeIz2l2fjri9TRONSaeW7t6GDlc0pD9t6BahnD2kH6gKYo2W9g1SuJ4W5tU5kg5qt7NydJsVNzYSargR0t64nlmogT4Zogn7hz2A/HqLQJtryCOADxje9qPilZIa+p2F4ze2qijzGLQBmao75HWBCfj0C5xeyHHyZqGfr9WsHW7MpH5LZYR6ibkUNHlGz1w5UeBwZuM4lzva9VLIZ53lzMWYgLmThrjiYvNqU+M+V41c1QXs5crjt6+ko6Q0+nvQrX4aKTzQQycHd0GQY/bxdBfEFgv7PPw9EFpV6AJiylSNDl5jKZ+acRaX8BPIIlmKIUh2PSQGDJ194X1ueMZi4nbb/GJcKDaig6+/4yMPYx1d9+GG2NKcEp51uXI1I07KnKfZ+ONHw221m79gZhiuePXJLoOp7FCyQ7j+W0N0LWNSndaRPzju0TWbR73cguXd/gm9rgk8erSAyTul0D/bM/zxefacY0X3h7x+lgFiUssZGzzsubBw+BuyyL+42T6QnEvSA1x8CP8f5J1zdmR4Dqh2N+/rW7Lum/JoFki+L5HDzyplcX7hcwAqAKj+NSdkciuhlil8YI0Xsh6TforiMWYBrP06ag8JO9ojpqzBinMhPgalqrWZgysNmcryRi8MsDrH+kJ52pY/ipAhyx+RR6Ig9EraVunskvrHJ33GbIjOGQoQ1bLg1AuJQDRe490QliKz6cgJ7NI+ylrDGNrmBXXswkGlQ+FdN8G2nrp4IC+qgY+mdbc8b7oogt3VmQIC2iQ6aWI780u+TilwijWlDmLlFwBNcl7eNZmB1P9mT8L1l4SPQtaYR1bu0qT113Vk/HV2H+3i5nELu8EeQAmlpTqiXd9sSzMQNaW6r8Ae4cAjenrJcst4MLWezKuPjRj1889YD3NZuccLAGeCvFDyI06myE3yCQQC+Tzr4hnryYs3QTtf9P9VJ1DxeTpInxy0K/t5PyVtP383kYrS3E2ZuwHFULc92QtSHyAg3MM1vsT8WsZM2XFJMpq2CfkPxJZfIpGHUudLn7bWtNXxVSO9PhXVtJ4IENMxFhLJoiO4Lvykw4FVwZblcjC+IqxcYpey6To11DAPCaL1W0cCLMaYPNzalS3OeIplO4rg9mP4xR0Y4Q3jr3lyBNRIvHg/j7/9A+j6lWkd0UwLmIXM0yEc1vOV3xTdUYt0H5k73/pYM6k3+IbHTokpt1jXsvWIUI7W2QVe2oJKWn/bXAodxQSVu/eIyo5QdUndbuChcxNphrniW1Iy9Xf7i63tUOItXRYFSYHM8RtzSuSTtmO65iYyg+gq4uq7Elc0Fxt+rGjkSUjEkEiWTJWg3/VkOV585fY+n39WuwrmKs3D8HTQF+kYzqeUfBWfclVWtHq26YtJKvpUt0kx72NsOUCGI8ANu9CPOfdtImGbK4PBK6JxlZpupJ2V5gQrQ0mUtly5V7K+9YYOV+SN3y8HYAiKzSucIgIP8pw3inNU7rwUTpTw6L2Svwe4UrEE/XQkRCSgLL6ndRIZq/2zhdDj6Yp1SnEXGkAHC01DDvq6eXOWeL+gBf0kw8KV25xhb+AYOF6+/tFW5htatOxhB6Pfh5SJ2E7RvdOlVOVehy6vKl+rkdfSVltZx+fxLNEPEKFtZON9b0N9fyAd5pnifig4L2cZJL144QV1fl7NZ6fuS7FGLso/3ux5zQL84159aIOkwQBpFo4n2X+FqEt+7f3zLYI8RutNY3XH2nFCD6txMpHyQDXgLVhJvDJlS7ZMfS1izvy5D5MnT39omiC5F1sMzTAa9RSVDgo2ZdhsfFurcOzDjpNfJOgPFo/858fGXfL24xmxudCLK/TC87L2VNTTOJuBPYpsL3lO/BdYpVbK3ozCdloMUhlJa5WVpbRLToCof4e0MC/zx8B0zgCPYcZXvvdT7WHJ1LoxvVPl3XBI40rn4wm4ucjAPbCRgOufy6KtaOgNhmKmB+ewAMDN/rNgDwnDrbQrv54ZZ/S4XyLvrRP8P7ZPo2CcYbW5Hto5zTqlFPItu+XqTPbNhjqqzVVW/acMkbNaXypIFyzc/VhdFNr8/C/76lDPG1YlgoyeFBRJqAYW420VjZFVUWh3l0/QAoOoq/2zb+b5SLrIbaAp9uUWOWNG8C6YJpjDYCzVGevTzmxRCUoy28LcsG+7dhX/oJzesmzW88o2QNRBJXmflnRGcbg+HIf10eK84e/oJKU2CKGMMNiGIQS3tDuTJOkQE0zBQSz37EvdrhFZqI55PsEIty/EnHwTIGf5YN5Bm9dEbQx6+2+Pwxkg1kzGCXTAVLX8nSBTuBl4FlPst86sp4mwGOc58Pim2H4GO7TSZh/vl3V95MxqgOTga4QI2MCg0zVKHuZ3IHicCShomujDOobVCx1UKNwtfabpw4gacSXrDNLjsjCNkYc/EROkkNrwbuCan0dD35GMXuHQFl0+4H0N4/Pjsa39rNCNpp3SodHxLkVhgurbqjU+DU8RLldpTZFbCCGekDTS+kRzQx8cdD5BYsro6+MiWzoBDqN1Fd5uZvqYteCuXKTl53SuUwRilrb36CmwzX9hoPszDdUQTq8JMTJ9BTfC6vSUYZlwAyiPHYjzGVc0+DB15Z+q6VOg2NTWEQPi/7BKXKE7/F1MrbQ9rlQv4+ei1pKt66tCNhaQTOK+g5Kj7lHacEWX2cY2CKY+42d2pfq58ZAGG/u/5mDTNqp3ew7icaGB+vtqrPmBGFb2qygOmlILt8h0fFVQaXTaeoS1HhgvnscBXzZgfuUjPnDrKZ2WP2E/7L69luBbLDieOpBQjvN2ETUkgbohyKmQP9vEpjTTerW3h9IaN2IqwBz01MmkDTZ06G4QeOmspSbzsL+iuOMinOP3MdLjoeWFbQzx5S6c1VzfUhgX5OPNSxfI+Q/ewQgineaGATotAVZs9pJLFFr9DsLDqXuIVeh8qx+BwuOXPQOhx9GIP98rRIRjWzNw3REtiEDP0EtK/Y1ToJZynNTtWfd6FOyyzBlcqB5cGJxmmWkWHQmhiXCSVl2NuLUWeTKVx4qiLaWECSCq8t5d+DYg7jxkQJ9T2w5a6xtvliG1K3nhQUHZVBF4/Gls/R7WkwWvoPb1muNF3W0cykqK5kbya72CVZxBDD5cy62k3fgtGezoKxgk597Vhn1/rRuCjM9Si+kRVCq6q1LJmYyIJ3iDlnGeRXzx0wYBRbnqwNtALnGIKwkcbNX+s7w22+AWFyWgvBi2ivU3gurqKzGUXkgq9zyg7C/0kICu1+cZvp31AerysQTlK8DwEo/H5+Lwnsw1LhVRSOGgd4X94ozsPmuNCLp68CikJvnaj49ltLr+MoRKV4gWDOt4PwJa2KgewgcrDTBOWVTT8fMTDFZCuv4ytKt+LuMvqAK/0cKWAona684GN+vgvXInbmont1Al7oWg6e4PUjpBpnKgXTO5d4LRysLKZJtq49T7GohEkI4ePcNsWpnbJ76b1HfqS5mDHuJLbWwwj7j2pGWxifuJ2TBgoxwRXtdDsX1nuGenOCdYAzxnfOnFTUhOR5URjQr09bm4Fl8qi7tfFDA5gnJiW0f0NU/WmslgQs5y0tbmtULGiAPXqTUBO7t00xMaqfWRTXBtQg7605chuWmuSe7XJN776984u3+qLB4B4b4Uc7/kjMEk+UhlRyEA4VrlnVH9fOhyue1YVtLbX/z4ZDNHrGuiuP/MMxVHxhNGQJY7f1Z4DNKj6+e4MFT/sAkqpfsBtVwFl8IKT2IQay93UjDchXV4mm3+HFC0m52S1kiXIZAFEIP8MLMAyUrqbSqMdoeNUgmva1KSF6v2mWJtaXgA2drm7k8apMr/VLRCREAzDbHR5QCRSdwKpZz/xl5TH4sYIt296y/vpaJ/N57EL4/4pFf4aksm1oD8//jgyEwGyXP3f6CsOxyY0z1xk5zUuvsoe/BwjWggdoVGA+bcUJvqFFLglHrT/P1SsIDNCued6cDugLrDQsUuVriUXLLryFsmX1aBxOUvwCwu+8SUZZsBMF4Cg6OQ3C8dgUGtWmDi1Dev1WD8M/zfxRrwc2rf938YxHlE/EvpOfD9AH2F6P5TDjclWiNN1Bokr0mLHN4hwoqY3lnJzOa4lCqP+6unud8UB3nNa9nvE6pb6QygLStLggaFMIXI0rgFtZdo7Qft/MQtFonwd2+/udApi8nCJnl7l0EXLy0ZPT8iv2n27XgsRIA18Y1RPQJSam7hZvprzcntwdzDl40vD3Ck0Px65BQTa6TPINiIcTc2zzpLeBY+WY2fa6fopHTl8aAyQC5UhD1jmNM8Mo9GRPW6R3xbl2bedbZ6HRuasupSKgES54govf7cAkJPjmP6ali+8CKHIcPhX+wBE7atiz7QH1qELkSenxZhGBiQ6GYq5ZYUmM+ki28CFhn0WlOkk0uddvqbfVCej0bN8OWnZrba/tnwadBJ1XE3AU3qUE6WK5SCGhD1CIELrGKrTcaNlYB461ceA5ZO8G9wtYH9NnoJCz1erGVYSUabv1HyDPqwcagTG2dgy+NWUmcG3bYd4UVIIQBSasjnvw2nSmyHqPf4LGpR4iCKYFuHtI9bMZQo6T1QynrjDGdte4XZlsfJcC58JzRmRzebn0B5kfeuYQ+Bf5twCsZM68U72V8mF32xXmnJ/3O4GpffrFVZRYIHmoS7CE9UqhGOeQprCpzXuW6fu9o7hYsnZQoBlPRUmZy79l+3yB/YOVffBu2ulm38r5fxj45ozPhWeRgxfIem9UG2pEgQNAI/9Ecqt3qsDzO+oq4z0lD6AvQYA7RY7T9We+AxEfYkBy62y1Mmb37e0YV54eFMe3xKBoT8nRB8WtrPl6iMXqPNDfI+MKuWMBMsFtnIJt9rPhEkbPJ0apAAJdoxtjHy6qxsZRH//brBLiXbJCm2SzUYz+F4DmkSMpMbpGim5KwUQlO7C4NxOFKvP9rj+QRDZO4iuOP7dPMcS7rwZckDYiILsthtnDMiFA+gWGFpI3L0ZjNf1DUgu8feAaY15Brj84MtZi5wdIjSl4vOp4Wfh3UvRVo15y9Qk+BDaEnjX48JQp16ZEW/GdidkP1s1o1ZZjx8vV4IR5VhrxLSwP8K8kR34sXqKjg4x4Cqj5+modbrP0+k6ZMD5T00+eUuCinHQub7zMoEZkHQLPwdznRVQPngVhhNJJqRqRRFhKZCsrRjYTl0bIfo7SBc8rCThR3sjZsCC2O4/Zm2JqyBZ4hWmnp2kI5ovYXav9zFUmlN2ppluGGtMXMx41a2HJq8qyVmt6qfo3qYSpm07LR6NF5qxm+uTvfS3YVwgoc7ywUCyzIms59ZbZMPObuu+4jJrWPcgW4z2yWe2PyPprfBaGIOiYrQdrd0TOjbD+m8s9Mbg6oMv10LK5HaTLTLl5TGpizJMkqgZo6UBqFXCHbtCofU35VB+pfjxA+78HEDXxqONpVPiN8vANe1NWmcbp5JUfKwVJrxoCN9qKkhZ1SoEdu0OxtcAKOQEiSGfDQe6qPxSXgRCU6nSxs/oa/1xHr8JiyfydS4IM9JkKN835vMPdfriKHD4h4pnjuA01lBMu2k4yZqwT/zeJNygujp2ZLF3xMU/iXyR2fW87+p+6/pf4mEO+1XnfXCGhryAfQ3XxBDwchA2YCIMT4P3FhhfIunxDRJP9zd4ueZCn8yc7jV7N6/gUFpF4lLvdArmKvH+dr/OCDO/lGfLemCWgNlL9+bxlW1PMLbJ10DrZI3mhqn0fArzFj6cSz/vh29ehyX1Ms13FNNpCs85e83Ghp+MdivaxQKP0zfxkzIcfiByk2RQxRDl5TaVqHQAuQi6z2aCnG3WnX7RHZtosabExXikIwMjcGGXiNEqEF1pXlIdTaAx3tYd20+GD7SbhAA/BJNQ9FuqBumg8J6cZlG0KPkA39Dh3qr5DHwFhydmX9pE3UiSXDg7xheaWezrBF09as9dDld/t7DfEEIklV5iW+rXRtAsBJbrHZlP5nI7EwPvhmPOTXEnnXIpoUbdEha4xvbQ1fVzt+8VdD7yIjmVb7VjN/gmtGSyAvz72yvGH4rOThlpev6do6cATLz3XUdKXelF86enFpHLeIfgQjuLnJQ7daZxvbdP+E90Rb+E26hCrPMu2QG96nOmM0KsupVgsEdVg2QhbFqgTuMJwLlBwrApnUbeK6du+vMg5inCF4zVkGVNiwB2JmwGvrPY8YMU5St9jUgGHpRJefc1PTXB8uswm9Nwl/iLmITRxTZEwjifzabqR6DvRy7yVRSkdm0v9LkPZJzZRWHDqU8ypj1Mi3WrmUixn6z4DaQK0rU2L83SKb/7iq5hm+gF7YvSB8Z7wBmvwTA0+ZUc6lrBHPNcJJ+4NkztorkoUH58puQ2RQ8/6WXKegEImtvsKvUbGVLRcx5fU3jQrhQK77K5GAzgNz1AGxr7s4rZWlr9V6BXnL51Nv11ZxH5KdHfX2STiYqZZmE+ORc92NWvMUVUj/UOJcXzoFPItBvp2dlLP7xTpd2tGZmbIKOLEwmMgF1SffAWfZry7klfn1j14CpkQF8SClydZ+WclhOp7dz+AQni05eoUOtfbNTfqaKjzE5CeyNsuyadlg5l6Gpt3X5i5JCB6Vn8VorNh+hAMJKWlPMXbd1T5gXQ9mqakUeiD+la1QLQhyWWJZ1XTofMNtcD44Pv1hVddIcjKBoN8e8exdAsp7dOdRT85N4vUnlCfcG2jixM4wME4u/dxqZEirYlJ4Y2ZW2CzRWeck33X6O446yn2NxpW3Qnw94oyA6tLhnYi78sDTZOD2SjuqVticNKVtJXd9oIfFBApHVPNJwk0gt8iqkLiMs+HpOSw9lZeMg46bFkufQlPuGxFz3Ez5VNFl7zIZFwrFmwht6LZAIuBFji77t4WlSkCLCH4s7t4FFkowuq99IusIc8NJRS/hDlydRvs3763AGEW4AJd1pg4zKlCvrzEMwM2hQnpS9oTg9VYeu5EPt7A5aVMD+woLDXGHEUfS7hhgrW05ua6eDVAxBokUNX8PGDBo/TUPpXog3ab68MKC0AHKwMC8El6mD5nQOau80in1G1Xg5jjVhEqdCxs8Ol0Jq0bFh4NHgTbY0ssvie2G2qP/8o59IXduBT11TNbXitM0FFM7WTO1iQ4TkUZ2iw3AkWIbymAdXPRnBOZpr/aySzSBe7iUkgi5Ni84eKA2hzxYtXQTTdU8YjFftbFgBisUpBn8AGE8j3Hq3ktWhIbKsxSGhFlCX8fP5kyAwIcwysAhFo+pIOvwNSb8WiSSydsXgZTE/gmyUX4W86yu77HEqrGZc1aGox1FVwb5yrlH0HnF3DKVBLKOAvIXGzFZt9U3X1dzKUsaE4R9kR4wxghxcbOG945qjSJUvR5umsUGNeB+rT4W8WiZ4e1xIy35fkEAEfmBseksDu0D4mriRtYEiVh+s5ox0vimgJnVCHegVTtG+1bAPNmnwtCjOUOm3882c53m8uNLkoQYuocwMjrKFLzjjwnq3yZYv9o0YSO7VMMtJXv9QC8QTssuTu/2mLmeT36/UrfIS2UDHFpP7GpUHmdpVgczB23RWu16cKFIPmC3+v+plV02JbofdD5+NswoemNM3sSq7sZNfURAiIg4ooyKj6+HufwKUg4WQqw0mo/iCwOnuaJ3DreFmvuOjPjfuTcGrF6J46w3UiXeeTXLWPOa2XjZ1L+Ow3W1pa9wGPj/dNvYbmhndnByexWKiQl6nDS/AI2hZf9DLJxHENp2a0feYz2QVAeKSC+X3wuQkE11Ht9xhXjM1B9hDcDwvICFOZI0+4HjiMHQQz2JoFEXBGSoG8jzVrBTdtgPiY2m4cwtdczyUmxwOP3olhqDw4pJ1JvdU0GB3BQZukSEAXp2fT4v7OmKt9AGgEtHQUOUVHyiORDgJoE7t++Kwehtz15q5IljvGmnECW9djjW0Jqn1KTXGsAP0SvxX4zKaMTmcWObdzOBmMF9TaMpbT9GLWiwHsISg4xEWRQmQyJYyFLfoxATHTTACoEX2DdFxr44fCsbmDmbu28ahdwPYpuTZGADj2wnba29AB4itbl+G57pub1sQzqnnqRC+cQoYf8fpcsN47rxCVbhDWGFwafKTrvEjDaxECVauGzv4IisOyjGwz7q+50mnbK0xWcV6Pq4N3ZHaugCXNjTp6AJ26Zgchwk/dzIgKnFHoPuA+PzhHOapCrsWgJ/jR9JXU/Myg3rwp4mylzc92jhTgYS4FfGVaWp48TwpeXE783lFwDtWuRza3+8/SxUYXsFDdSoapNjv3RuJN6ZryDQywyml4tjw8QvOU+U+M4pv81da91DHvKd21kW6RfB8AyJlltyjXm1MxCEK1Z2p302USxiI0AH54jy9AEJC4is3prVgno36m+q5uJEF8noJ4q0EuS90fy/JzijzLy4STlODib7vRtWJDS1E35NADZnRDvFgcegZciBLnw3Zf1fr7p2P/HZzr3Z5TrV9sGLu9VdOwZkw76jyNxl3eZPJOgz+m7C6i3ZCubUO87Ra7dugl87TtLNKdWgBoHcPRF1j8dcSimno9uQlwVC5/o7eao5sfxblKT27NILTKU1x5P3WKxU0F2wZR5aoyQNhEI4OSLLd4SDqyz1ykXfx5mv11+2Vav2M1zvWMmkuWSSmfShO5zin5S9S1Fctx7N0FhJGbs7UkQJiDJkWL5lfpasCNZ0kbJ4FcDqORfBG2adyLwrVzw/EgxQHOXqLPRJpS2z+JI79/YW0NdtrnaoH1E67y2vadblckcRk+a1BIN1xnjyCT4K9T/qQE7SUoDQR6xjOHE1jUAKE+f4HisHL2N+0IBFbSlak3+9ACmMcbgx7li/D6NtP8t+VyBcV2HySLS7MBOzbKppf4j9V4BTE3QARhRxEBVC2O/RXk8ekmS0dPtSKwmsFKv8LUbKiLzp4mSF3YDE4smAK1+E8shkKkjjraMMEirKQqDEQwWbU02FInSLB4ym63MUQm7gWtlR3xv190dy3/an51updjtyrdYzirXc+SZtmMnhZkmOBqpCYRnfsq+/VZVSr9e5PB+jgydS5957Dmt2X6Kho32IKkKOoJ7Q5kY/YLurbk5/3MsF6Zme4hKF+zaSGxMgRBh4QDdAU2X9WVxyENEur+dVqa+u1qtd4PQWuY50heytMlvAS2G9JPtj9pPLA6GJYlq328o01kehRWYMQmWOWK/pjhfbQiWk2z7wTlk4xn3OV1Bfm1lO5sURdYri8s5cN8eggeD4nyyBus37qOIqTImfjMB7Ug+B79WRCIWO2Odh5has9+JCqTwffusm1nyaOYanJvYXScsllwR4qHwA7epuaaw4tHHxWJAWkIHBofv99R1BDcRox/F/vjpkCXf8gGNoih2zvIlP8tO2MtllaFCOQMizJPCl7JfdofIZq3XfdniHpSF9Gh/Bx2myTcRjneN2vWnoUEeM7sb3A50heBMlW5+WCPtUGuiRcGxAsCW0y7xF8yeBycJgm9ssBylnWVKfUc7gU8LSoWWi1jwKUthc/bKIYlRW6SmOgXrZ5M3wEdDccwMKzCfLSrv42BFq74gZy7bzi+Yj13hEtAbhBQIP3psCAWatrHKMzWO2w5ktpEbR6XK6l4GiR4Mc956piQEbNf4fSlsN9w9EApFHaPwuyxsLQHkwNAvC2rsdTeYWHu4D+bI7dxQcecp/bAZl0xPwUlaUcQNNhVN1xN2FfyfVuAMN4AIS3Mvyoz6vg61V/bqujUeVUam6A6J8u6FSaW1F6aQo5gefVpe3Qo523SClmNmUbBk9AiNnkTvo+Yw308vZiW7kyd7CpQ+CU9FpaCps9oW0mZlgWMAk7uRKvP6Z54QYxK9bi+Rz4H+kfFo8/Csc7LgdIcRR7bIFwSlnyFEk160Gh4/geWmpKyEuJn5M4+dW2veGadPHYLJehNvauGB4gTKZdOQaDEOyZ5c9TcM03OU/9P1uUyJpkUjLh3i0lZlMZzdUVSZB1P9Y2QIxQMr4j00tctBq0ybY+0HH5bkPI4Pa/AqvCkXdcTmI87VHEMmqEj1Axa7+bITQnvPVsRUa7VH/fxCqFzFSCTUJUFfoWj9V2j7qO3xaIy7f88d7A4OJRALE9eg0c//M7A5X/5+p4FYSCEDXmWnhYVsf5aEaOppk6xTetvZc7hIPNStGNGmwGJ4U5InV0Vq4s+uhx2XNPOhy4erPEpj5f/Rbi1/HJzlDBCioZ/6Mk+6uCEiLhBGyB1imj2bnhTdkAFy+qCFyCNjIqpNktEyD+Uy2dCoxmskFvtj3fei6jKjcjkBeyPFYIf3GE2+P8oOzjrTl/nG1iw/2fgx8DUZDrYGmjfe9pivuMlFZhXvVI8pqsU1SHbQhIxGtZRnlnX8M3PHRJuPeBdXUv0Z6xl18pao39Gxv9hpeOtmfz8OUUflX4r9ZkTmlaXP2yUPrtu7bcwxIR16sbyEUJo4yyMfw0brlYzhNDK6+35v4Wg0kGDtdd/ks9eYFiWpJWyprGYmbzzdyTmY20KWXE4YS0Qe0gF44miaSNycCehYtaco93GQoLBc0izJ+jWKHSXDettIeEYycwNVTBahMx6151doFobwQgvigxnBvjdevSWcGGi7j5OYmv4QUEDRDncl9L3iHoHOo76ENVbdqimAqvQXzopwGRw5Lft09NOwEbaR1FQo+g6YpZrwv1uDIJsC6V6Fe6aZvz0McdhYCD8sxyQ/xorc6ycmF+TpoAQUkIpizNGV4yizAvMvKbLYAyZC2kt3oRBEdw6+H20jZb+MbSYl1KZ+J53aVSyjPMB6FBMCpECgNQWowVJEZgY7/9/5JsCrWKuLfyqYM+9xYkjh/SrD++Qhvk1Nz23dcb6aU/7xq6qacrF6pBk/bNoItjbRnwTVtadhxQsv3ubOBkge1py38W3o0dYi9I41q2zik2SnIbNP7jRYJILQVSuS01wOIEs3BkjZ5TLGxVpGtZkD9PaLd7bj9klSWVPrCMCH4PGTmGmt7y1KJ2WdqBGaveQEXE66vOCtAyWeVmFE3qOCw7HNxa484TDad2uW7vyelYg8p5c2dSW7s0piaUU18FjP6CclPwV3o+HG/kxm1BImE6OihAWUTVGEpFW6n/QbH4A7RxBY4DlJ7S+hpLjJgB5v6Eo39g0XVzrsqONsTaq8DSmdEX7pxbw8HU+dvOfPDol7JSvd3HO+viOPzB6Y3kAx0SAuV8bNxaRKQ+4pDJ7no8NKB9T+H6i9QjOPFmcO5ffFKhQQtxH22zLWLqVkMfmvK/dsnSNstj2ymmzegSoYjVubYIoRHqbvlGzSZsEHFqdnmGbL/C/vtGn3q4O3X9XD/nEYpcyA24shq1kC4sX8yenytA4iifDtp7f4kEszo1k/JL3CKpgAhpHeMUSbne4bydLxAdlzQ6undKbkSJ10GpDtwWWSoBwV8ETtDRi/wkpFK4r1ni4qWDA2RA9RUTl8jnAkNvjO/Vi60wcqq52FE1vQmXUNwei1ZHMfMuL8N1ZpfCcOpCGy3s5om/Hel2j9lirWKGFh6lFWuPBySsKYDtvUxCd8a5AY6OCQhPuq3CWi7Jdwt0ot/VXTyXNxBq0KOvdmvvnRYesKl5khXCteP9AFLZ6wJOKrv5l+2wIJOqPFchEzAURW25H8kWfStJjzEWOWNRCTe0EzM0pqIFdmmyRjQHtxaEoC6mokpCKzCzPD9Ak4dmVMBktM/aPCkrbi42IV6GQTRYkH9CqnQJmkRVBg4Az5gBGBD9B04bJJkc/rlD7LU5cmzlUzgL8tRNoeIOgY4OcYLJtMIsgq7oJCGRQOHR999EeKbWWeRxqw04gKKIZ5N46kx4YTslZfuluszLfTFEh3jDe/qxxOk7or2Sa9jTEuhJYgR2VGNZcg24vF8rDUqdH2XfrXgklChTmUzGAAWQSPNf2GPMRCwM1FFx2PDqGOP9+CHJD9tB13CTMyQ5NBaIrmuUDAZEZ8DDvd8Fo+mMINlVCxUb1tJETkpiyGnaNjpgacDFvF6UJ8ciycOpkJvhEP6oWQQMjbeZowZknczpk/xB9odMwluWQ4GqJ3u4GOyBo2p83Lka0P0Yb9uGPQ0BU7EYFG3hDYPU8DslrvB7IKzTDf7vmIJImf0ukHEDFyZ/IvTVi+er1ZqBQvqH8ufq3MCgiT5ueli7sx4juPmg1b4rHNT5vOmwPe/JSmtdeSDZnd+KmOpMIlMLyt8YSzd4QmgA2Me5XERVy5A4Tlk5YpZKxzt94qD1QLdLjCs/PxENYQkOHQB5Y/juRsNkGnkCJTL4mbc56NUPN6eHkGM7I77yoF2wJJttQ3fuvYvibPuClbnBpIPeX6bGBWRwRVXwoY1p1u5LI9pMdH3leFLxAsg9UMcdtBcVmye9MOMxCg9ZNZDaZM46uVE+gwUOVexnFoUpoXkMI6IIizVMFtFdIh69COt2VxJzAz6GpVobJ0YQRnFUNZNptmvvhUun4UkWEXZLsJ7EdUwYWF0zG/wPZI3Hziixj86dm0gWb6dgpijKhZ3OLScIR6doa/Onm7oCPPyiz19S1K6KaJSF60Km9SroZzRd6hyg3w3LeeJvWUAKBfwR1fvHRUremeiN6oyRmZ6XlOe+taT9q/IJSaBvaDaLi/uEaWiLV4rFO2e2/SJRiNS4IludWYMPlwIiW+VgO6GV8MqZr6Jd/Mtv3vzXkURXVUjDEvHhkRLHb2bREYe6IboyeWqRvR/f2+lki4dLQGZVMXhlG8sx+53z7kzSVZRlmv+HjS+4K0grVrpJ8CFNCFZueaUzFrhHIJYFq1ZKxT0zL1f022fqMo4k9pxI6dY9SPeqHXfwxHFQ/YJi62HOQwXeVa4z7TQWExuHDHmbQ+4Gbwi3iFpUJpxEXRgjJHp3rwRibX8mhF7AQLVbBgfZTSdcqq2RCIJYXVgLBqDR5nrdj9b2kwZTRh7mDwJfINOROLj5lZIAQqj4MuYPjrIE4qk7UBcAnCWXtnLB8nuZe3Czzp0mGa8q8pn1xF8wGqrMblpoyg3mM0gQdZ4NS7wG21SLSsh+HF4zSKwWN3GTVGGFDQVAuVu8ZLVh3fsMrpMs/Z1tzOuO1Ja6mW5li4lAJ1EOHj76XkWsIaoLqnBMzWOwGNm37ZTvYF43yV+6nL8wm23FrSM68lAaRKTCkUgP7xFePosFc/yvvz6WkkbTSq2qvtX+t2bvthgCBpGBu6wfQfBsD6Ap504gL4OrrK4c9D4L/Oljt+WkkgU+XWetvlnkyxPg/mTVFmrMBmKfPDJLfn1tAhmQ3634chqCmj2VP6wrgVieiFuT4hGKd82WJLqIVOs27K4RlZNTFsotVlxEkAXMnzspMKfZ+hX/Jphg/bpN1zk+4S3AeWRBhjuLGX2w068gIt3/yZ+Fd1bRZ3c5V5eKoOvZY4YWhdQhHh5xrt99Ubb3fQZnLRJnT+RHcFImfe09VUBH0POmAzQX+SES5+Ulq3PFUR6ZUIRC60ZzzprBTYBfMUSsAkC+hO5hqVYYCELyjgeHCmdHYxuk8Gnb1OGFHpE1knUeV69T9A1wTggxt9eV9fUpDyZiPiRMr3DEp1dXcT2lVRQZQT0BLQROQI/VsNivjqICw+J3mZinLaIbysoqJB3TYLOElyk5cwzbKBvjaMZMGAbr/MGDxH97Sc56SnvmP9GgPUF7LA5YYw5IEUOR5Jc9e7LMDl24SpcpQDWr8CtdSm/JDRK6NNrhUWAqG1LBAtIyg9WqEfNMnyDoZ9jVGNYZ1f+uA1UvX091O11maknzb+o44up+DGbbTXhs9js9sObp4G9lOkXvvlFAKYs51x11ElxUUSYKj/zN6yvLcbWKriMoK1K5yEXMRj7xIAv0cPtxbR/dIVtgEhDp64+UDGjlyfec1iO8U5Hri425NdsdZivdF8st2A1TI01ICm5fkEemhfdYzdtA3jrR+xktdaqm6ykalUNh1T8SvTUDCEaNRMnWqs+ybqylaUDqlkHRg8Ur6k2FRRWNKeg/VjrGwKo5JBpMoF8raxhU7SXRHqZMTrLWUGdh4gPiVmClqthaiLJoNmm7g3np98afm/LZL4Qd/rq/J+nKw8S9wm3DCtpDqwk3VTVj5GtK41NPXTVU2vPsazUPuEeSS9REQmhy7/w0B7wYpDcffKuBqHsR4vXgqA5ELS3gkLB26pOcxpxzDBFN55CdzuYL+KkBAF86483I/id5EbTb7VS9dhuSF/L9F46nFUSsRX+rvL2pjeqWsRk88neUiJis/My2Z1bvfFIb9eTyeN4E4/QT6zyslUYJObe4SiQieudzE5YFka/ZBf3+2RyiAyX7u0QRCw+X5+y8VeXlngigICzdA8/wt+0S+I/iEULop5yOz+I6yOC7cPEhGCRgK6DxPlE+bIxhAIpeBWtLE1KdIGhD5rLQCwbCLxQV+lZ3sHRVJPrayIDPDeWg83QDfhNn2h12JB/GVKSiclBwGjkRvKfoatkiVrC1L7lDtVyZ2EbxltifO+WWA5H+tOtPxt4vYuj6TTKY/Nigt/NNdhognkNro8HlZb2mFax2YR6f25LDKk/czPvWSiswzmcWHcSp6zrl7JWO3pQQ8TEaQCtmJUMcb7xc2e7uX+6QTReNiJ4kmHK8147L1AE6KkiI4hpZ5eYrRhZ2qxljQr3Ymg4Q/88NuA25Zj3Hy1qAylZH83W721FOnxTexfMg/uCtUz3gG7jMEsLBgsv0mr+HBIujIZOjXii4d7PJp2aaGlJmtyMFBX6tjhXp4HAcYp+QAk3J60D+y1A6OYQqd0Ibm7e/qY4niaFfyGkJ3r2byZ4pG4C+FKKyJNeaDBxrRlJPTJQaBmGpkz1rTmt4rcoH+GrJ2pmxgRk++o9loChEMWShw91so6cQFl6DrYmCcPUMfiwRoHnXiiCfX7nHFL/oo/adHX+6zxtpa0T9QUibKDyGOFirhAmsFCZsMmv9nXkFVe9M1TY66c2lMBYoDPUShb1q58CFUgqCemtT2EngAKt90ujP9XBk8OvOm+mbwPIcrMuqXHiPlJ6chEaBMqThBg7p+KmiC14tUs5B2nipW31LMIm5dLSteT0umQHw37+nJlQZqoIbTNvi5ZhJOGJ5NSv8apcyPcL9L/r4MNCxYGBp+RSNjZgGJdYdv91McUHQ1KEGA4WfLKJ7ix1HNmrzVHH6A/0QWq40HfcbnAfmMYR+plngegoL+9sdvNxVts0Fcv+ZFEbZgC3UWueunUOogz4pOADcyvH7wO+HkC1+U4U+h2zGwOszAyz9qJol1eLyPEQTQEuJ4jR1QimXEtzMvctJS0vekLSLmLPip2de4b8vkAHeaAchQRmUbkn+E1ctb4rmwqYdgzuD6GEVhqv8xLA5pzQ23ARR2VhS1/tPsCuWvuBCPV1Rkvx2GAd7FnOxKqoUipID/Br2mVgjA+SSQHJ1UC+yQQpC7kFJhx1pmnuaOT7rASSUta806E8IvkvcZS3zaQ04jDngXH6KS52kNlZ79oO4IJTGTnA9iVc846URmasyK+MqeXTj0dqlhxrA4rDFcLum3NGeFl53vjoY8lsoFzd/6i9vKVCSxII/PNhjae55pG1myFSjUqtzxR0GHmPeDfnDQN7nDFZTA+OzK5WgdjGxjEBZ0/NKeLmB5mV6IE9OgxjkY+084JeTSaU4ZHujFQE7MXR9/R/cGH0z3j0M15GAl4acR0znfgzTAm8ce/styGwoGW8jhoYX35gtF2lJcvN8oftxyl+jWWbeHsqF0k/RMSta4Iyijw1bEfM15SmCfOLll7ZKMSaLLmMeWHjcg9dp4OUWwl5frPwzN79nvLElMx/z+XMdmYUryHQYOxXPie2tUOBJ3uIkE2SZ8+uGf5awzsXcIgWhy1Y3ypYUYEw8LOqptOimpMfotDxpX0saXS2V0EUg9XIwDbyVt5z6lt4z319dtHm2rn4kXHcAxjeAZ0q6hJCnng6B2kmJtNK6TRjjnbsB+lzs/bWGqWQxkDIy0ZbnsJwvpUhIEenjUnlYQDUfw2RjFEPX4KFItYhdBkFRsrHbpLpkEoI7x/KnKsr5jBZP2OjB3Al8wDMoQNWWONGMcDNp4SW5jPRLh2sERQ7pfsoNq6m3imY0udUSnYgHXidueiFS74glW+F6BLWHNdVZeCu8bo3Dhp8kaup9rYWWvZCrLEziIrvh39q8U1aB0DQgMY0PfSRPvlKB7xZmW1VNHiZNYX1qHaoGC8dkOpaQAz5Fy2UTWAMTsm/zlY6YcLE5x/Vmb9lgB0Aexl1/XMfmfytO/VF602sU66a2zSnEKk+rNnMtg8XyQshP+xRJ6O/Abf6sYQETmdf89pDmY3EfuHTVpG+0/2L8uhdW88mqHfj/AoScZjkSQDt3JvS1iHB0s4fk5itFr1l1JAyDgT5dsqCLz0Xz08AF+RNz8i2a5T2g48qggkr6nKwl8aDFNxHbBwLEoQd81pYRD9jbbg2NJUO/sfju4uNOisBIMgKLzWx3Gz5CcrG66n7AKYq++1yZhGBG4WWz4DvtwXiOyAQd++4UX3E/3TA2k90yZltmYtUzf6xbdhXkDy4YGuYWF5V5yVY35hf1Iarkx96/tfj7DDO+ebUYc22S1Mb3AY3CLWRyDriGcAzHZYOilEVK3B+vUpbrujPBBZhAKRWYxSuaEFIixmGVvtXN6YkgFCBETLRue/k4H958CxiOMfwxQ0eWaHALxmCTkPpqIA72C+dY3H0VFFUoEim63g5nRunWFt4D0cdkNxUfno7fl3eAnRcHHBNMVnvQabmAdbWqzjmiIAcf1G4vwdFMKGQsP9XUPUkmBALlYJg9H/H2SFuVE29CfeVk078n5mxo0bdfar8noElvbP7K0gJ7F73L9ECBlBMFHhnaiBEwxz3YjYKd88Pal3ATheTQTmZP+gBlm6bFTNShvmcUp+o7IsfdIVav3sTnv62vfiXzjIBnRBRjrlg4lVUVm7MvRCUqoBamR1mPEEzgWwhdVsa6QTX7izNq/pT3+dyZVGmAPGPl9I5+pTfNAJ9x4bpQ+4GCejEdDM17wYDjBP0YLqrJRz9mSlzczhBmpKLLPMIzzKCKO0QVCBWIG1DeiNWasTEQ1CbTUNMHYHUgFssBEtHwrUhJ3Dh+jOuvQ1KWw4BRtfV8rc8HBLjM31tLStMbXM/mSD3lnd7D8RhPPlTP9KVUt6wJb3uTZBJrFtdPIwUQwxaJQCPgjpJGEw6EolZf7ym2FNMtFE2ttPO8G1tqGZnzY/Dhd/FACkOS77uT98eCEE0a/LSui6LwoVuCmHYGspKMsDyDp96nNuDEMFm2WShklJxvq0x6UkEOq1Oda+G9IIrX+69TKZj9dNlUXs88IlKLBEify7kyNdEtqIJj8vutBi7HJ4ZMt7kimjXzYxjLJGwk/XU5/LwvNO0bSP6kEI5W/BoScIIjvpZ+gy912CRTUvbiI9lsWiTz0xP2sNUzUw23OsV4XAIVpP5tqvv9RMoEgYP8JaSKx4OkWwRJRwwXlJSUtAahrrkFzVSLiORhtzc/dJTTNiRO3222/5JvAGy/lo00fPWyPM9QrCegmxpUTrXYfXOKcQSj35O4Tj7XhuP3/a8t7JH79vW+rrZrm7MgtiJAy2CjzqMWguSjSUW+at8LG6OO0Hgm1/xfgEA8y4I/pKAFHXtmypbFiVAHt9Ryo+dRtfrcig5qH88lsrYADbNynu7vp344u7HLlzmdNTgZVByIXptRHKZfr5DnXDpUw6CNbjLEpksJ9uk7GfmV/ORlbF+oPl6t7WJ04fvMdqBRAjhGGfchyrYuoSaGbMvZr15iaS4lRvwkzBmqFyJMwDAuX5sRfrEkw2aMliFuBTb1aGYjxs7ihGj7Ylh0vx1cburH45pkXT2ilC3RJzJ/2HPa9eukMCwdJ8irLIo8eATcYypTB9KWiTayVg/yTNp0bkBNJhAKtlYaRLYAXcYlBh0AU4u122nkBRNE+IOiM8jGut7whPZJrQu6cpa5tynK7rOTTI6WsEBUhqL9RuprAlGaBmZNkADibRDaR6Zk4xc04otMvf/6w7rw6x4ZP3bTuRAmdfn27Eezb7KftJteBCVF/qpdGKPG4jda/B6rZ2VAf9OHTyApDou3pS9Ucbeudf1TsWbdYshhlkjNIeGzLW+TqGhfhKMIgfJ3jt98TNTmAZL1kgMmmlyEgWP6tHRM8pW0WwCqL6q+JIEjUYrGIl1AmQ0/ScWcb3JNUOgr/IaOpinQhrS1U77zd/tbYq+aTlNFRTXM4GnADjnEKRhZHADgqQGpnm8w62coJ5lCBJfeCMff2huxyPkO7CQVvRVbXY3hgK4BZqUUxWDM2cXEwN68PsXFHP+6KioIbxpnw4tei02KjouiuUXsg6OIMEydO5gvZhJ+TWtaPZg9raPX/BpB0HcUS1ka9aGy1uR+F6Bg9VBCKDTrbK0W0zsBZVdJeJ5HPaKsu29djdHkj6FsNzlIS6QAuN98u27RyD2mDbH6vj4WUegu4J2YDI25eo+OC5ByTpxw+GyRoHqg6zcO9leCT+jVxwgWYAKxPHnz8TT+abSR0h9DM6VlRORYYIcUIvn2tSvDtsCMoV9kFxjIxFdouSG25ACsK1LY0IUbWbJQBZ4TGigWacRyDY98XwQJ51/kTT6oFrs+dXgzWE4dZ9u4c8wJWFmvtX971gFCmdiVCfTP9XD4DoVlGOEN+mqu2WItgRwzaKQN6CVjzR5ELOdhMNLAiAJWSmm1BLiTjJjECr7DGhD7pSwFJ84YSzVpZxzeLV9wtmHwd8AS1v3VxlKHUMeZmcCk9UkH1qPI/xe/9qn2wdwzFrcD+iiFDUG0hrBEvmTX9leuxbzvu4qDowBhW2PoPfK7/fHqIsIf83srkRjnMpUlQxxZg3WzY2eAZMgkFc+ffqmqKVzDKEFoOk5sj7n4crT8RZO2VBugNnCBiz/RlfwFM6Ipmep97KPNjQjJv/x3id8e6C+/t/qL+O7yjX2AEcFQu1ViFf7qymZHxLbMu2SH1HgEm6ochMMIfDEgApGu9UMRmDulH4+8MvpnZSKUAsvw9hG++nHEL0+8F4cgsg/TjnLIuuVFxq8bUzN6x3oB+fS4gwhokmn3iItAatPbFU6u0AB8MVetJ5tBLZhtP/K3zigZRDcFlMsUTR1RQYdLaApok9xVkYMJ+CNJjNH1mpvKTOk7yscm2qrb/RRunLv8yzLdVDTPm69dGIfiVHVEIfFi2K0bdFvdy1zGpl7UM3F7kdhcKYPScEVWHoyZNxscxWW2tpvjm/zH0Nhma/LdTRcXLUjSNNCXTZ6sRnWpf5Z+0bn/ZxEZKXaS12z+aoGxjr67ruJjcYy+gq76MOPpU3leYpzFj5oFBYqZJ1+f2OlcCKrrf2ckGndavvitBvENd9bYj7cnRde9ZbI3VZNh7dU931UiCaKSVgxvwkqjh1KjJpCbBVskLINjtEMCvnnDU6ilv9ex/SE1S8DG9ixk3OmRWixfQJUt4mx4av9ibUT0agfIO5Fve3a5uL5OazVlssFeGWEbfu5KHEKEzICs66N2G0GSoiI+HWCPxATqftUWvhma3ULTp3028Jk+lWjazWlBNRbWI2fUOlcx5xX63bqhJYwrxf6J7iaBZ9/q9YpH4IuUX2mq1xMtw/e7nugt2gRBwgeGBGJ5CXtRL4ep3ENL92zoEfnT/MVtneKr0dskrgmsnA8KdE/1BU6ZNyUauBI1K5BXSR8x/PWYda1aAHgp1rox1v8NpJDevPJUrGDkjBkzI5ihrOUH7RMXxmjldyInXrhCKo8Mwptq44XTVxst/ZDuVbW5x+EuWKyP9hXdFcYVI5xvnRMNxnTLmvcxi6LZU35T/QwzfiVVwKI9UkyK0ejGaY3r1bGfb4o1QmW1JxZN1/oUyxzJDCABqW/fhUq0mW5b2sbIdPPW/x+HQMSs7qKbVdsqYaBdF5EO5/Qv+GeSgRydiK9Vpu+FWuBh7+6vjuaLBz3uHEH9p8JJfELaP35dWtseMPBz96Ena3iPqt/h7iBrlcPfd5vlvHaQ+auMvg1bhkwDvaOgdG1tli1AANc8qFFLUiuzSx6ksjoRGjZHbBCxoTh+iwDtl6KyC1C0U7VmurrbpwLOBknxTBabUgPEL/fDMnfX00CzLhmKc210Gju5KaiWJrvnJpinN8UIYRed7M/enOou4CU/obxkIe9+VXs9J24l+94d4TbMS1Z6f76QAgXJ/d3BB+GPLI8YyxyzuFLGXlj0XdjfGxw7PkcVhyszupGMS2I3hdf0jBM0331da2SHkYyFlLQ67ejSAz7sB1xGCmQgKhwYaIq/rFbQ8JZogGkHdswm4tu37PAmOj/F24X6SjVA+FC3pKkNSs74pn15C2XXw0pf58kISk8tvk8H3+bbkh5vrZq65iOPo2KyJbh6Tcnr4v0Pkcjjc51zIZM1NVdGwz2RW93uJuw43TC2Xq9rBMMMuHUJUE4CE4qcYweq2TYwBSVNTss2xNtyGMP2UzFpvUcLPIC7d+w8du01Oq5J613zogHAVJPycvOGIjbskiHxD2h/aA5HhB+43yE3zYnmzH69dBev/E/5LED8ueBpZlVemfj6CCVeMjOYiQErTMCJFjG7XIvShtat5ys5EWL3N9lBQr99JwptGBKS74Cvnnx981k0pCcfdtsX/NqzMuI8YgD0rb3jxpkrlENNLG4lcMx7XHesJn/MDaAp60ncwEwNZukP+iIIF2qV6Whz9Lp4FA7FI19XOg96B8yY1FdZ99TQrwSQAzWdQcwsq18g4aYPIiYntGrUdtcvY/t3W7OBtMQEXiegSJEARl7AYRzOI0kHBkS6K8gr9SaTp4cFNfYF3n/LEXYXTbz9BFcNQA1GELwfBD/P1B8uhXsiT3CzYA7Lp6wpLTmDzWVc2pvktrORVKLN3byLbDx2isUt5kuhh8pXXC+b79fdf+ApB6Tvxd/IEl4MV9ZtMH+O63GMZO/84yV7XDCKvKv6BfDcFfYCjEY/fFTxzk6krkk60UuYjnHfcg+d5gucxuicCM88r9ZNkF7559LnRz0sgcBEUmrxvdybhtXlrLoUR7oikhOOChduG9LZxmkSMSGjZkhv1xzCw4eTfYquqh3EIxfQwVfR7Bk+OV3zK1V/Ix0enRUKIaPGfJO5eJEJq3UlgI/R/PuQhh+439Nrc9lvkX2nYkEG+ey7SM7a4P422aVGrUj9bOXUi/PnP2+q4h2/fXGW63s+iY6kpsN2VUvJn5JSX59OEtqf6Siwog/8Sn5GwhVNYKAc5tBgy+RBG+DKxLLYpr2WDEByy4mCN9YIjX3rDWrWX6EIMMKQEKOpuJgx79+gtr8df4mWp+LQmEUWyD6i7G5RmOM5CvItW0Oht+BFC0aV8CGvBV80s7z01zq9C2Z+uMUxinobCJuiICPaWmmhjtk6ACe5Pd/pqbZ1VdFSHU5qOWt1JrDHPoF6SpoeywTMH8Rd1HlMjaKWQpfBgKJAxRvNZTjqSrC+nYxk5A0MEuziT4N16ECD6B7jwqdCs6JCoknXeP5w0T9x6viwkBn+IlAu04h6vyz6hq8SlXsGYGWOZ8iKg8hxchsZbEYKGl6YRSVOSETN4Lh66n7fhdkni6AfrlxdUs1B39OG0ICgpYv9cELFBJEQYswCqW6uO+M4gkZNzJBRvimOXP6pMmWBU1+12JsG/ve18LqF9/VikL++K8gZT4SH2BvP/bVsfBW9++12xDg4xYurSbiWAmF0epMfifmj63NEnm4NB1Ws15WEkrF7NT+SsbYikdXbJyxfnlQ/X8rrJbP90B1fR5mV5fgs03H7PXeoiCAnIxdLSqIOSQIYMmsKvCk2vy0MIUgqvod8vlt73b9NS0r7MOAZKJu2jA67jBVJTicbRFe9U8uJSNchCJIML2mtK823TpHHz2gVBRAYdd7Z24OoXgZYtfpqwdoSqR01aXbYm2v4rYBFlu/iDs88p0dvYT0u2Eb6fhXNmE/LBrkJrYETQSI4x2R2YyQQes5e4/lxoAElAiBjDN1MSCTxKdUh7oyBigVdmcvkMLmqkpv4APgv6MfXZDxtFeXOAoRagSlGWnnxOX9jYB6DOK+BvSJR/zt192/1fsI8jF8uXZL/d8UUjm3VJg33eT6wtCSPMy6oKmf6OCnGefb+rG6jgnbrB1VNDmcl0QxGlpUPhMve1N3cn645i0e+EKfkv5nR4VMu/KXWynIUZKNFX53GerZklEyTE+KcvVuzgTXg5CSuv9PPN4TSExMadZiN4jUS51lRQq3nernvS93brvbkTN9b9GDxZRaWzUIEGa7FE5eC4SQvsIq270Ld1cJ1OeAkR6PfTEjj3BO/Gsz/uYz0taxawsn9BqTNhsKd9Y9MI0s5EQft5DK9ZcSwNCFbyshK4QTo7XONOBxxCzoCTUDjDc5/IJICiSxzumAwd9pqxulFri/KGfoCOyTosUOv+rUO5r/9OyiGwChy8Ci35l5SAKu+KXxeuPGAyoIkCkITjCgov+ayq/2/rY+sx3Dstk5qs0TdGcaTifNAfDYC1NzdhinzJKam7DnuWo/a/6wDW88D3ey65y7PAid1//pnBmiFy0TvX+SMIlWMoMESQEuffmDk04aJXbYbclYoAg1e5+TasDsjsa/DA6ZfSrXLVA796B+9qthee2/qngCCpXM/r0/J+q5XS/Gt0FeDo97WUlk16aan+H3Bv4XV6Dy9poI/1LOxMRaNVKMo7MgzwS83V9dOmz3r77Bag5C9DunO0QGtviq5Q9Xg8jfxNRVbIxDTB572OWeDa+OUSxPhM4682wk1hhC4O4l828iB1ncVS2ZxyUEwX+l4br7fkVTDhMUkMQnmUIvoPCqQINqiROWr8LFluIK25Z80WyUWiTJnQSdqM8TH0+Gobh3iKh9LUzIGxVrdPoTdcOTUBOIzoKGVFzmTulN2vhL4X68aFcJQayNcGFPh66Yngr4R44fwm2EIUc0sQ5coNUhpbmctK/UofEYwq/io0XTvy0Jgtw60a2bQdcfULR8jgZvmifdJda6XjhgtRxh1sQS6Hl+5TEZKw3cGWinXx2PnkWeaPq+IdbrDztIsVlPRVRwjzCKZgbxpgcczQnqRMigsvhFQmUnvdofOS7Q8no7zHQ1WTC65CBADQQ9Un5i9dUKp61zBW898nIFOloL1vyQlsSSNMZJ3vwuGfaNcwfvrb6e1y7y4jSEIhNj4S+cvyyo162kBacqbMeNCTrvYq5hpnizyy/GKNDfG/UAejG5W/qXLx09x2ldOG/zt6YkTkMk/bHaWReHu2sQ9B2mYmxqxhP9VW+SKer0SpGH1Uk6Pzt6IuxHbSqlkkp7rB8twn3mRZy+syL/8mqjQYne1Nq7Fk/nuM+KFhlp7J6MgOkbqekAywbLh+QwnCHktD1kHuLQ1pLp7yBntfpSSd8KPO+A7iBaUk3WBsWe2viB8rw79ov7ALy2GV+iCVTMRxk6ZIRNMZO0UflvJGLvhVpubPcWcoOMavnlE3k7JSlaZN0FBjMXoLPhki5qteOqjlnXAf8KuUxi3+/bydCRR72+d50B1Ob7zxforlzhwIUk2J87VQO3a1FOzb2LHABGbPoFZ57se/BE4uRhFaHLsF8S/9/VMECwxauDGqGcEqpmpLw5GCn14mE+RDPEI6WIrbSLpw2rlQ81jxrbqZtMuhfN7THbdp3Jkvtje59z1qJpYGxnBp2bdh0xl1sAJQkzETIDhvLK17e/5OrIUTWhm7zXWyG+3F3jXZCvLIPZnijkPbB4iy35ZnPzoPvwiMVqC3ZAqr3hZF+0YxMRtD5s9tjYyorN4d+tbXtDco6yJPJ8y96UPfRMpnZXNl2UmuppbUO6pxfFNyRxaCNUHbEmVTgm/fHKvSLMo9rxUuF0LrhSzjnp/BeVKaofZc4px1RojlXP4rSIAYDEAffjQY2LFVJpG6GBHk9JseHYmzN12VpUDtCwdvFVtgRLQYSQfgQWXsYKp4nl0mTE1SHxoO08a5vtle5w5n3su5mlk4qOVqOSNOMHfDM8tvuhDFDLs+9W+gPwtfWJjBQlp/vAnQCk0Qq0O//fUvAcoX5JC/2EM/4TVpy4KIC37eHt9/nFU+7ilLFvnfB634Ox3y9vtfwIOHDHFQGJzhuBpqP0TCDen6dJ62aUIBxzxs9KerE5Ie1UQPPIx98L11MDDh+uMc2aYioJ7D8abC1R8OGU5XDHfwD15YYjc78OVsr2VVKQ9MNTeT6ZpaloxWss/TxtFq5X3anFyvTZkCV/tjlMKvF+AoKsmMXuvif62AYllAQJMlgK2ucwGvIcLPPVrlmhLmcZNJePFhGoDFDd5cL0s8qjYyt1JdMOG+xu/2nghhiMZ9rRzO7kkK+0YGKCFCDY04uJ7oe9loHOQj025I97giB3/NWuXIrFO5KOR2wlmaHjZADJ8fOftDFEKbJaOdYrCVxx+wN0fQOja038EsWgH9ozwUSPtJgS/AuMVlo8jBbbZhY4iKRrlO/D5C4hcHLvOBPLM+KDALlPd7jFwh12YhAR/N1aUaxSfENaB3yuVlnA7VomJSePZQkGKk21nzLAHt1cL1YADETnafoyfYg/V38HFXmtlPJHZcgDdv/mgjs3Iz7l9ppRAMtEKW+ylBjRfa105zSgvhvOUGX9Z3jLNrquXXQLDFXmBSeTT+zAWQ/alEPLNWOSvVL2O8OEFm2u7qLjQgfKdNnkQuz1wIPqv+y2DGTPyxZq99huCZHe3+52IF0W2kSQ5lkie+92yojwbV0TVfJs3H/W2CNNs2oho5DEeS/wxXbi6bj0LaUMkL5In0eQRQi/Uy0ba8YDj9oxJ247dH8ok7Fj0voHM2uU1xuhGS2hwv+mrrrX4rOkUarahYNmxyexsFsLBzsORKD3Ja8IHvLeNMiuyyJENPuAJUPX6CxB1CEzV9wChpQPH4ZYifCFhLF1IQt86ZPx62fGi1Ed0r7t0nfsVyC1+2wlemPM/aIk4ghjltTKOFHfVI2ncbSdAQeC1TO9vq6pTP6oJ4zXBdKjbq4ss93o5QisPL0Zy5CVsxoyMiB3WIQooTRMqrFQI1hiyHots2Fzyy84Y7WwYLX9zMITrYn7KMjpAi9BCFa8ddVa8MVBsm8G19YAfkeCJ5D/NRCE8AlEXHMkMei9MWDU7YIjtRt4CFSc/aNxcFjlbhv+ZQhFtKjzdoK+vCF82lC66shxpE+tuVJ1ZHmP507ZmkMlCCaiIPqMCqcIZUWRxgVLqV/BRKKtG62y4ckjvpM6DHYayy/Q4bTmJE8aiCDBksGirxBbQJ2PetXGVSY0ZJz3YnFZhbbwCim5yS/urFrqDbnuwJCEaubMwfO/Yg5T3Xc+a7wwKdneDcLG7QaS+HBZVydLT7JUcbPRqufpPGlJLDvs5+cYsUPCT7AYIZkmMMsraPuiQh1PITyIwBC55WANYDB7jtqkhnXUSX5/st8QMi+sIflDfEmb1iAhWgTe4O1rAPgMB4RmGUmGzeUhQVUqdIwEdBuU/zERma2ZOJVhP5acwto1KpcEpygr91Ny8+9xmS+GHIfXq3ZpEAL/ukdRv+Kf1IgMqwDO8iutGJsoEqMHqNQrG58dxirFdW7Hxug+/PMVJQosUnhwagXURJd/8i4EbMqp9nXPhdbrgSNyGrqQ++9imps1u/Lgjp4RQReEvZqaFZw3/2IVLnImuWlwk8Vr/Q+3Zi7knrk2vMix6NOB64ucmyC2SMNuoCffgTYzShj/EcAUmAMTfhlMKZa9WLx/t2cMXgQ906vSJpajokjHg4pN/yO+jhedxuXfzy/ulwZ0wNrmopkwHiGQare2y2hBNCiB6UbdyvSNiFKqy2mvffNNHAKNg0wvZ9HLlfYwZwMBPZU2pu/3NtpOimF/iX9pD71LRNUudUBcg5d1SFzGuBV1SleZ3Dw9PM5Zx0QGHjNqwESu5AVocO5Xj+lElAAKZj8ZHGFguRIxLVHseypyZQ0/94P/DkoLyhXhdojn8v+10L6CpAUbFJowSzddBYTPgV/OUrMd1OEGVlHvUvwDFSc5RObJioMM5vHDaial7ZRVSOw6GW0ofbb2SMCEdI28tX3IMRvoxjxQXJFwspdS/ouI7qjGTf5gTkZLuMi2QIv3dwWIypCNK0AOKJvYsYbEXh9zNm8hHKY9jMDyW3ErTN4XbDai+61lVSvcC3q0bs65qu5q7MrnSKhhH6UGNUmrN+IMkpbYmf9FYjUs+JJ38CktvrbOPOn4i1B/SYopIlvO024RSCdLWejJY2mMe1AliM4Yopjacqr9FaoxP/KsOm97MRqGZHbXzyRdHWKv9eh0+fCq/Tp02GqpKf92IE+nTB8EaP8jqQvURZ7Cqb8kemweHrr9XHqXBw85HMyy+gqwUhqu2S3I8uL3YwqZgytqsQuaYo9DOyxZ+oW/6WBipTs7xxiNq1/CHc5F9qA9zyAkMIitlgTzX5uPcgMOZZbgMikL46o7hESXB/2GdfdNWxVS1v1t1Sh2YIUI2O8pZjBHT01rPkL7SxNTaLAq5suxmWLesrNepmoW+qe/RbGSPNBkhlnBpLiLsyzbKTDyRFQPKK3LH7DYVbafRPEqj/Q1jAX0mSBOypAaQvvUsrb3hYsThXDAkJBrztpf3kSiP2yuEUPut3rnG53zTLdxIoHx/wdVe2Si8M8V6TpizXm+6eQPwAr1on+FfEngHdVWE1BrlHjgGEyIliQFJPxaERO9237txG7X6I5flUInntzYdqzrxlHkgFLyd6AhwjjtlgtLBF+3e3UwbTC69o0LoSDSuhl+EVCmw3fefpjrAkqMQ576lTo1fvYigQGcT53wsnxUMrNUX05xkN4nEIO5LPvL7VKI970bDYQAVc07MQ7PsFjKef+5dGkhPglZww0eGjT2bu9a9ncltL2+fDe5HiY3bLxnQ3fKWvP8ES7bKjD9rn56lEAFlnULsOBwe8KRfwKod9PXJanE8KL3exEqX4U6ZVPV/TG69rOaPEAWSq+9IrsKurDzyjgMKNb7/EFWj77tU+WdNAIBrPHv15oKXza5993EARkDrvBq53vuuFOGzXcKiDoKK+rQ0uY4PskFdO2A1KEdh5EAkSGniF+h3c2ESDICl6T4fxrDN3rVVpcQQloSkh0DKkyB4M85WYQOzZug6X9E07fbvL0eRApshsT7SAmJnWSQmdvyky+xGs5u6xT+Al3kkRm/xUkBASIfhvFI6VlpFL6c04fPrc7i8oEKuqVQtchwSPzJasFpVYv4/izgbEB3AWuf2iFpc+Bx5ROmjKvCu2nVduBO2dwBiWY0U1wuONOASZi6w9mH4eF/cQVPFx9H3mfyBPvvawlnzz+HzGmu5y3pSMLt543QXnqaBAhxrTPLWpX0Pl/HE6s42O5MtYnaYNwZELBBDI3IFzpL3iCNFWeXg22X+JqgI7LqeeA8oIjA22xrpIBHIfyR24KNsU68mSHXAAYKLoojPbqm0y9V0l7ytgt/AELt4cbi4kf4wnicWlp5U7SfJGXteWD2JYUQ4GsUwmlUVLEa7kgzwkrrAJ043GI9d4FapQ7YoX+407EiXh8vEGaXvcROon29evOjvHLsccP4l7ovJiETQbxa4x8IFva31WqMzVXkunTyz1JbLvCpMYwsxTyWzd6nqdn2ucM4j+Qc0mCATe5n/fE3vMVJ8zgotE+rVsyogBRV8dVN+/Sk9d+0ag/XlNqnEwyVkXt4tRDLjkJlfefj0sZpi2uD4qhyTq9EWCRkO+XyoeCTAevy2LnGa3qol7WGd/rUuCl0rxUR+ncyJyKeUsuYcJu2bdc40WNW4ou3EpJ+A9x4SsP1i6YjTccXDXP/B497rirZcJPW9oWZKjWwh/PPDSzr5j3BHlzMAgEXqm72LOln4zU+ActBL8zmHaruBmhbMaRXweI4zuaAazD6aTrSIxixFgYaEZSeY4oMOtBz33DZkgZFfyw9VEPaSw4m5k4HL7O88EsmIdFumY1RBYClfOc94pLv4V1RJ5YM3ZVfWPNjaEE/lx86PJPBSBBC+J0gY6alxVX9zQZDgegtLmwOB0qBa6Iu/uxN+/EoELQS/Vz9PjSWCm2uXCjc89Ib4xtCr9ApnpgisVVBE/z+Ft7bnf4E6z7oLnEtVYoPknXrU/oQA3mG91penkjp4rVf2ZFEjuX227e7THwO1M/TasjoBiybGYRBxbnHuvqgshU2pL06ovYaYbqW69f11E7V/dqT8Bd+pLik+HwuM+sfbWoHlLQ9B2SLGJMQCKJ2Ob5SpCD7tV24MQ1AsKeCoCdd7slBDCSj1tljvJOvyp1PevnNCpZhQlmAeWOpukYznuPmZO9h0KwLwzzARR/AVG2MitQBQHGSxlQBTiJty+I6W/jXcnc4vZyRtHIiY2fLIlyrCFWB8Yaklc6o/41XfGPoKID2H8GRiwU0JqcBWaKajq7lcpPYzsjjUHKfuCnB46VTFvKuGz9tMNlNzAIrGS6qC4bKRAx/6O0sCbBlKPml6bfxUdvwLElFUxsHXWZiCZD+818kOoN0l6dJ0ue2SC3OG+x+vnUryG6U14eZgehO8cWZvME18WDK6b7CU+tBpsaFzTg+IJEXV1UVG2hLR5XXQs1yYVfCuJOVjYaK1oWMqiI6hCe91TSZhONwVRmTuZjKgTiQeYHF0FCKrt+Rc13OAUNCzXoJZd8eVhmEuP5Mf2RohUB+yyZh+mYtkJHw10hGx/6/CswSLI51CmHMxnxbqNWv8Fw5ZuCNsc0cVfMLLbdwcOUHMdGW1di4a99os8fflWW0qF/UhmpIhoCA458TlUZpVYMLoUOrcjZhX9R00YTZMuxAEm8QxBOVObfCZUSm7tgCZXmXdodNYpwNqUdwu/+5OwDNfj73tmrWruPdpoV5d7mNwk4FDs3tbtvi96+JxRMmqMqICI/yG3GJg0Gt+303SZvwLjzWkBiqQkIWSbhPbhaqER8wuWqrXb7Rj8EibU5dn0+dZGH0ajNynImSAaNyQx1vkBY1oHwy7ZF9DgvrZatRm9tAIskHoD2CuzmhvYiTJrBW3/DORBXyjdit5LvNmlnSeYE56V20CudUxQh1inH6MfllgplyJd2XoGEjJws/0hzgXDfgmXCp2QNLvXMt133YN/BUNZ/cJX5FTv3QG+ewd8reaB6Nsznd3sTHe/GtwV3iTEr6Qsz67qO2ywWvk8sC/pZkArfFAddCiAZk/fM9DbF3WhQwCPAUyGSn1XqXvxCYgtJuVSE8odJRcdOvQyWNAmXa75zdTrEqzzuFiUzPtfWE9Y0kf1GFqyruqiboNLytN2tRWxAuxrU8iDnA8M2cIaTlzGoYIAjZY7YUpyRdy9czY3POiefnoNt9W2H5/pS1K6+tUC6rRf2o/o66fvdYlztkbllArUKqFcM9JDB43kQ+/loKzH45SSx7hzmp6z602R1twF/1cxgN/41Wyzwh5XzuEZRxPKehsz/cneo9bnvENTqtWRyQmiJkdZTh1Lrw8FdJzJdpyGSexJKkA0IRI/yP8QUZwjAzv84F6u2hkkKnu4g1nKfjnoRElGuQGjCSNCuuD5T/I3mX/R5quOs6DrTjoORpEZCw74H+BgrT52ZvicZytkzWluQFCg5hgApEsDRKz+gkqyM4weyUjbkJGhNsKofArhhib1oISRIASCuBaSD1O7EDXVkLSqsecw4nbEsDnYtfDa6Co0NNRq6OqBKLTE9KdEuhTmNm1jwX1KUNljtU1no3OowwL1ti4i/GjG+LPR78oH7V4jxZI+w2wZ1zUP61DGh6BBJ1/EOmPquhhSCcYWcGAN6RXvFW84S3jKJcTqhOypWD9sGAf8M+CYUIeVLABzpnW3yxO5zP9llJMCjpeM/R+TQz/w2cIcDulr/xn+0sJBrkho0foWjoBuXpbYw4UMOiwu9YFF2wIOVUFtv9fQ83ZXWH26el6pZhIl477OeEmk3kU54jLCD1do5t7nb6D8UEsmRwzMssbpr3r16LSccDMO2xLPwLyVix5lsirPhnpoJWEyJdPBMO7iIMpF2Ekp5AsFV2p22zLi9mOcyWLHotc0/tq0tYQKwJTt3S/jnY0wqxsXZoSEOTtBwv84/3TC1wHhIJJigWDkECP8ws9yjqzvyYQIO6Gj4AvCve8V7Rl0U8nEfmnECQsucJjrC3TD8izKIPgOfFylwVvYVYO0q0hxbvxIv9lubukij5coxF+l9qc6Y1nNVqJP/CPnZfxKZdG41DTOk5whNTyw+7fg8YWEWPW/RPVutYuCC4ehc2e6ep3uUnu7b/mcUn2Mn+bfgIUNeHtBvd6MApOOM1jMmQk9Scux8ywk2rWOGSmk0MgG+x0oR4OLL/776J01ElFyNVed/vFjk5o3tDmE6q/sXVFT2ficWQFqZ02B0izysdx2IPQDPmR32obNyGqEaaC2cwppJotBdh/16U0UwZsZZKZrcK8fM2Y7yEl37O13qK2sIsjMVtZb9nedMeyopJPGVPuBApIct06ibxCziy0P6ADpaWOTUahNwAMJXhOEI16J0ClXsSui5tvuwRRJVaGC+ffVSxFGP3uYV2dmvxo2YvgLG7MblSSM4/mzU+QdcpE7ku4WBhRTis6ab7maH7tUHKxBjNXb+H8H/2M5UKFJrGyNxd8TiKQOuLjLMNNdSHDbv1tdGZepM04QQ1oeyN0ZSFsZvqLTb50qGVKCRx998pAEoS8jLQ2EvhXJT3vFapVscIo8pTzlk+ATT9p1VpAg1iRN3VGdBPvMg/VPqFQGqjd63ofufcUllGvBMuC4J26TwIJRgRclBSapdWFI8Ro5Ub5OOkHFkGgQOa0YueJgbzAwy3ftSuesqGHn3ADmBA38uGckBbCP+xcns2EnlQNsui+VHI4zOStxRDH6scszsyZakc4iJwhbNad9vwR6/3CJtt6OFjC0ERBQY0ecO/LGKXGWIc1GEPM3lBVXh5yrW4iI0S2+pYd7l0KiA+TFD59w3ZlVsgzYvPK5Fnovl73XdilQlOJAD8UjTM7lWu18GzkLLy6LPn3b6YtK7oggWDaJEN9POKYd+kYIMCE+3VxDnpyFwLCzGF4OEbUEQRIH5u4j426jUxXRRiCc8upZGQ6/zlWlwR0hEDuACZo11mVjs2hkzoX/V4leiXqMIs7x9mcwgir2puV6S0rsCna9619mrzA7bm1u7k7sMx7gFnLJiWDhe0mLlwsctaaXqlltX7IS8Kbz7RSzzstlxHLk1a07ndhyE2NyJRjITVt15uBxSGR63jtZiBqkMAgRm0o8SrXZ54Cx2S4wtxePKtBMEOOgWQwc/jc6CWdTJly+jz+5tQRVST2IIpSzuCpWtivIMYpsYqP6DUnPtwxTw3uxBMoBMA786QmBkHWMC9A1Qky0n3R7FXNRleVCBF7mRPmm/uo6jbU7JNWeSi1gXkNttpjVGuqm9OyQcQ+e/OhbYr6MC4rb7rVw3+Q3ACgInOhKnoNEnRoiUyp+/0e9bcHTx0uUDe02dCAu9BIF2ksjUtsGP/ev1dMAnSOqp0klv5bNjQ4Z15ThS7/r2J3BIn5Q38K9m0O65zHmEdnXxzNLkhAuSX55uPuG1Ys4bCfDkqaAK7AKDnojLula198Tsb8BHOT+IDhRhh7mNmeqkLNW0zWcGpUzWYyCbJawfhRQuvCoj9zEzXRwSLPcWHnJC62R2SAxswuDv9O/6J9XPaTDSHbRDeeJIIX4z73cDw5D7Rrx+Gb0JcNePV4ZdVY3gRwKs3rTn7Ls2dtEIZL6QsleK9XC5NDkljHB3KG2F9mv0SF2YUPGRxv8yj/F/d3M+Duk/uVhrPD1tucgTahlTWZSXJiROEvY5riv8sPlXwZCom0DY4hp43Ry73p+H0XAvtQb7STo2EXPZ2bpDconNMgqGmC7bQbV5w++eHeyFWwCcYNFkPUXaTY1qbPIsS1C2L/Vc8CkRBXouX4eYl5pXSNzx/1Y3doIZU+mGzHhfGse5Wtkq8+pL3avlrh1pULJVzwkUYof+NJPCmqM2yeDH/Gg/YwFiaSZ0PyJLbm/8PturzdfUWhzNI7TLB/QEME23P3pCL12dIGtInbPDfjY1mFs19785K0WqvFDGCI91zaywbYDT4ZZcQc2wtihaGQM8HFzN0fbhdm5yMf+wM+MnxamLOCkeNBWlFoRl4qv6OSOPJuqyACMSAzkJ/AfYF+xXf5zDZbwyu+A3IsvKbOfRevubdcuQdME0iMP1QXZPRkFtsdBoqtkPsXj4uuFsjfImYBl8SPUsNQrePE98JM//GAzX2r6v1KBa4UPO/wPhTBQOIsYvzsEldWB5I5Euk8GmDzjGJob7hNVwz7QLfpbIKJM+sMJI1hwo9c85CNuixaUFVsEeG40UUHIAqngojjlhqya+7o2gttuUhhX9NhFAR/2gjDa6GvZHLaDqnrCZLunWN/nfAook9TJFv7rG26QsXwnwIz2wq5vtW2OC0L585G0wd4UZ9lIbJTrkEEV/twgiwki8+ecUM+LtTyYBwbZS4d9KPWYFv8e09YFdWeXMxwLEYhggMtppoQlKsUdwaa9WuYrh2KgKQKH+eOIa9S2OVkBp/xH4JyDKfEKEoSRfNd6pkPowHlLlvd4hF8Eo6MLhkVvxpYoISpQi37qeswwBXc4ALwCT1ZyB44oWYy3qDF2DXVw8JcdXusjwAgdtrgycSf1bKHSXmvmIW76MZzEx7k0ELeODpL/MmVtY0TS0mis4Dq3r8YegLvLOIKj11MzH30NA7v0uyD+0bxYqNqoRBkpA7HmlunsmHMM7VpSbfYsyxEt0k+k+N09RrMHEbhTU5r9jhxbaSM0YmeRa+jfA4RBF8EeKKpmMIeQD+ObGdp16QmL3EflGZylnuYwpjV78a35JRU+TdS+w+Oe94/0+ICB/i8Pvivmo4NIE88m4qPXMLGqZBxSTPon5LNOu3sinL/vNI/qLVwTMaZRnDnfXBebT0xQyqCN44N/NFVltU/wyQL+zkhpiYEfL2O+Qfw7MoIjFn9r1aTi7VgFAwyJIwGPUrmCN/KPeQqAtiCw1JYRuTKqY63GFlI8INpZUJ3khJfKxNrLW0j0un5xUEf9GKqq578hMDcpLLI+J/rsrM1HRItwHV1p3h2H90iAaoqM0xGZ7t5mPiJBWUTyP5S7XbXj/WG4yHOn3kkGfJ+bDaMmcaQ7AdfiJ17gWMF1DqZQP7DMS7scaWEZxRd/BNoTkO9IHCp/YealIAeXUumJLZ6t9skB5QGaTYrWWCsk4ovptTvWIHZqf9uC95aOiwb7CIrh2UETqtgRY7VCxPaTECwSrnUctezpcb/lh95c36xB5oHKEyNcqHE67D4qODVJbggtdxmR/VwqhWrSgM+5aEn1niubr4euwj1qSXKGUhVV7mCJFRLZcE/N8W9r8fG/63qEFSkr+gjPw2TZLF5S57TXgtrAl/t6gqwUGyJNg5IVMkw5P9AALkX0KiqEvN/L2QqaLIBByyTwCLatPWn09C+e7E/BH12ZqBGgxJsx6HNtXUhILVS3jiPdB9RfmFCB+XFvm0108nkV2q02QAYim5GF18Ea+QiTJjAxOoEEEWKoUHa4JvN32SeMbFzhcuQpCKiQyw2R2ntSnWvHXjwhOkKtIknLCOLoiOKZlyQoTIEfU04s2tcLHKM2hBrZq2iHnyqsg/DBWe2Od72WbkbUwJuLl/Wcug6rL9sTYsWVzzosGKdjHUiaihJSqSFN5thrMZCM1mKmOj0o4COLnDRzJPkm1tYfj8t/+3mFNrlQBCAfz3M2N5bJIOHGt0iHSl+zmQp5/JuGODRBIFnIOUUTrW+TFeerJ8KtDQ7XB0qbiL6YNZbt0Tqmo7NvtTUC0c/OQllfD+axjm9LEdS08elCjy/RkVaTKDZVd5MippwOX9W89cnlpBRzENokr054dlI3CNkNZApuDmd2U2E2j0gpVjl9Vvdgo+i+yCJBajnBSeKPxnuAZMGdRHzi0Gae/w3uc7DqkWL1aVx8uAVehSlAy1lRBvYGJ+P8PnwWQFTIehk1+OMJidZn6daX4+r9Cdc2/xAGIH8vpUuwO6nVYSzAYQrYhpAA2v8cTn9B/akYaL8kr8Se5rJflG/RV971ubnIgNjw5fxiF0GSkSepTzMByVgM/socVftFe9JcohmJWKm6D+KgoAT7LmeFpabsPm5mc+VF3yvN2uGHsucMo34QSDzMoaxSB2PbBROmDA9QQ5kpvAFB12q9F2tnU33+DQAqPc9r+tuS3Sa90UN53PXSnwSnsRpWN0odKy6dQNJsQatdUqbRilnyeKGV7TC4/y5yND6b6zywlbq72lHYLW4WPXPKsXU5xVCSbmWA56kIiXHbU+2ePTnBePkIqvjaxAzgLyg7BpAU+RssplB+yDtUM3wwru9R6Pl29SoZZvkdYW5KPw23GaG3jifBZzsS8Nzu6jEFKz+s+Ld7yfC4l/dm46lNEfa5CvIq1em9RQGEXBP7RMLquuQYMd2Ix/dV5Q0JzOeQskhUqjB0M5w5u6s+dPXoeI3NhMj9V1CkGga9cGb8ELedRA9a2jV+64Aiz6/z3tDWSQItbTuLrqW67TW8lqjAhMhwH7tUZxdOfkMobZo1r/Cn1wP8NHHXPHTOzwOcH5cyXbcgVzerkdG1dffwALkYli5m28zRG0/wvI9ZVSvYLY2j1CaLm3NAA56/C/p6lBY5Pc96/KwZjKENVDEP5tcYTabld40Z9YlXBjcZLT4QNmtNkgVF2CYLG7ZPP333FOEdyLsSrW8DKnI+t5XVhIIb9PQnOpOigqSMiOwxNoeFb4AKEb+FFX+CZLjdLt1N+dPukpi/ALUYaglFEMtwnUwMr3/7Iisj8zFHogzweccwL3NaUB1Kk9C4NIgcvytgZ+gnzBKtskIPGtSFNduT4kPVShVRb5b5J7jToPtn2NERXNQnU3KmCxoS07X8LvNR3GuqBizQ0uFqTcYQ5lWT7VfXwsMidIpBVWqhh0fyFoUYd8XKFRMpNxbq/PUNOsnhu4u4Au1KV/OhljJEbH8sTx8etLtEF2xJ5yddOj7vJIhtOr5gKXuk8E0sLWMrkVkh33EFIDgYS4JVtioEaA/5bY3eq3/kl/SFHyJmHsIj4lKmhNF94eju1PRet5ab9dCQ9ATx+WYeAEU3GZJzd02iLPVtmnf0baVu7f5DiJvmG6h9D7NRpPJBtPikOFGEvKRQ6iFI6BHHtvsr0igw732NWBxLJf9qJVefYy6mFftHJz6LDF85RHuveARa/ZZ0CZXWc2W2pGtLTW1ewI5s7Zn11OZ7MGy3Pi8CHsRWme70YPeRyilQgJxdn3nvM+xRAmg4i3HC5hb9+F+BGSXPZeIzsdBm7LSst3QlbUeQu5+ctyeKRTBtSPxyKnwQuCEpBippNkq9TZl38+Yui9jehe80TeRbfJiAlzfnlI9qlXN9q9+4YITo86hLTxpKFGY3DjVnXp5hM6Xh9iiGFSOH8HOgTzV4iLIcweAzS1dF8eAXYtygzGX/C7wfn9Ta8FCQGYaUqqhHJuriBEkz+zbTZ6cpIHa86VG7ey/zGHf/E4AJHfqPWhJrvIJWK0ncZZv96bMl5IYZEJ/W7pLOkdOgonzK1QlZMjCGsZvQXfYNkyTT470GXD1u1Zx5qFD64mQGZB/34PiwNFrmUHdcqRIFpwljiusMUhQmZIgM6yCMefS4dccmPDPXXKG2S6fIP/t/ZFr92dnsW1PkMMJcsw0KPeHl/zVeWTCxw6XVGsr05GJ6NA8ZU/DKuFJpGMk/6ncFIagx8ylO1DkT6G+Ralez/1VDOP8CKHfY39cIZj0UfiLC08pT+MMlnVLuB0AxoBXMDO2uO300d7vC+phsc2pM6TZizp933yIk7aknd9rcUSZh1Rxq4HEas6PCSaLjGKXmSBdoVkmYUDzyePUcharh9mEpdOwMwYU0vbKRE0wIoWMKhgs24BEJM+oSInZKRuXTGjZxIRAORISXb9uXbuYjz3+Uu2FEhQmXaM8kVNWU7y6lJDlC/1JQAaHqLEIFtOaFN24XwkirpSxfW/L7LeaX6WcJNi96jQUGYW2KC5Apl2o/WnBRLuc1OyzyaH7ynYRrzPK2PNP9Tn8iGSGJxbWxBeafUv4/yxn3/4FciDxiziqo2od4ucW86iy6XHoE0DgNvCKauAttv7YUFiuldCrxHe3mRH3/JaeDAukCPTOBQ9UpeWyhZzT7a5ItBj1qGALRx1rDq/x60wMwSrAF3wSRKaeFROL6BqM97th6zJc+iEVpD6H3h/Di6iCynqfgt7w/YZsbY+1oM6Ajp4C2Y9tN0dDCc5AGRX0t1YUdQCXjXp42Vp3ZgxpQGkAQxkQNu256BvPD57g8UK8WAlq0VGgw98iolgWD2/4nRIBEW59csa4tqZdiWGJ0/roislhpFTn5VSzAYa5pSySYOdfuyNd7Z8RQtR6Lmp91AoPvT3yABCt8S5GBnRHg/pR0wsQMnWWsAKPuD+UX/HqLvwLPDR9nDLO62P5J256Vd1bVBjGmieark2kdmVfmP5c5r+nPRyimwKQVYaYDM0fTKcysSptyrRBj7cbnxK40eo/E1o/g5VnCS/f1nCtdHtRYSOP1aOxiVoisI6XEsX2J8oXqDAJ+4hys4qG5LgMP3G2uF6RNRlFWb2/9z6QlstmXMHpzGeBEc2lSOpu7C5/kOZln+Rv9t+VgjNAmixqO+cFYaIl5Mpqp/wpxZMo1nwMMWSYo4kOEFWZhPV/KLT5QSk/SOjCwHz/cNogzGvwuO+BccnPW72qAxk15QEjm+i6XzBLJfZTrafumfaz0Vy7G2hr2iyWBvxvJKqdNgD/73lemBh40WwCIzYDHXz3JmdySFzARqNfgx30zVOlVZNiBKNEdLNaVfXa6shlbP5r4Vzh0nOW8JblmZWWBNARlEQ6c9o9mvLXXprPP9XnICOsNDHETfU38qHloFUCsZBZuKMbdit8fOu+5RNCulFcFD/8u/kr+Cr3BcQ8f63kGVd5yWri0EWPcjo/7Mvz1g/x4l+04bs0eLeZtBy2PXAa3XcZ+ut0KxrnAalEmAQlFiX+3gzWtPeccLkyK23F30oqbRK990IilVSzEoB6aO2eD9nGkp41wjO+OHE9ChqOwmeiRUFE6pABMap2fn1nNggCmOk4KwkeuogMNxIBpuD5OmkyRSaB62MhJO8e56z2TYj5L/vWhaKx4cUUl5PCY6ut6ITyC+dzOhBNO5iFvUeX+aMDPf/KOm8mfrM4Q8azLroNt84UzdyCtoObUF5xYm+F9LAMqsyq3pOpoyc19xQLQ8a7m0SotqX17Hgl8I4o+tRbH4O6GbkBUwdkdC+OBnlGmF1ja2QNQ8QEKt8mmfKvgNGA0bzNLDNFWz+F0gfePmC4CNlw9WjXUU8yHDWjEcn7qyyTJm1K8uMKmmeOxvOu4v2DtbG+ZG+af4X99RYvMhtLs2od2huKK75s5QnN1333GtbnKfGAfRsP/DDPrm1l83KStrxD6k5fNAlbqpvZp8SJY4X92jV1OEIdN7jF/MeA3kEgG5rxJ15wH99kA1AQcTBT3f8E5M4Y63I1+5NKF+XaPjyuesa9ESLRcdg7+VOZX+ME2yCtUZCYlvJfZ9GF9pWf6IueOBmLUItApIxXlrS3M3wFsN+iXMMWwrqJrYUs7Px4ANYYR6fIVdYT9A6V3f1kb1ZDJrWaqEfEhJPOj8sFpXE2OX2GfeARxtoneML78mAY8ePXsIs14xhWs0cn+beXjBuUuIi3T4gzZY1eCjfdepEdZxbaTtSkG2ABXzX13i2A6vLgpBSwK5NdJFHVX3rrTqeBBPuulvZ59TKLH4fln3+IMemicKYRbp+5r8S1+9b+vS+Zb4s4vARQ2VTgGYcXH47gyVOALgbH+ppQhObrsMSSop7vuAVycaVplsusCtakaCo7gUUc2F+H/EK1NdYVU/e22POq6hFeyohVDMBrdRoiwbRoQX5uXC/FDhuzzf8a6pIYzG2ISXXb4O5BG5CfDb6fWlsJDZkX442sslMwazYZ7360iZjj6e0Sk8anDhTbZ8w2h7WEJ5SYdvPEfv/LxAoGjLkcBr7piZS54QFyvwYz7KIAi/eyclJeX4lDeYgqKGf0TeCTtZ3oupnGIY3EgQD4X1cDKH5t5peXXdVuwqCzB/zc3z5Had/sB86uPFo1fZlZciyyBMgsh4FRCAzGX68fmynyUdklRv5/eiGlfM7gKpYAK/Ub7GRtlvdDJRwnUpsl7ndc4yNCfXPznbyZF6Va1nNBfcikc9kdEDHCXrJihEgbgp96mcaNKYhUZ3jzu7NaAjc3+TuT1Ei7pHI44jcWFuH6jRhnjidTWxC1pmz7tJ0HmIhbY8WqHQ9lYk+6wjUjfDdKwsQ7W5/8gwqTYGaIUtPiuBCScHK713ik4EDPRkl6a8X0qOc6xbqrn5w97s9/fkLiIJFuz7AibbsT11cVYgMuZfzr2hJTnKS/PXIsIbDbXUp+e783ZMfaS3WCIw6CUyMQ7V9GsbVP+a2GteZbTZl4p7hgCBLQ/I8tr1rnbXZ4bnLSp1UPuARUpon6uwn3zeFkE7mf4tSt8kI4lqYzUPoyzOecibb3LPy+5bIA3tziwspzRjHoCipThlyEw0zP+ZIzlDm+FAY5iVbQy645HqbAWj2Xe9FRVCBE1fguL0Xl6774OCOlT2Ctvp/jjdO2EXWFiuvHJDxaj/uv7/BJEuKAlca4/NjhAtKo6Qcln/aHxtK0//PU89vMv9YTtSYVpCKJmytXJ2X9vF80LWcB1C33r8PZqx8qEuxYt2MrNsuOpq7kaHu5SBpQvWhdpdL8NKC46R2o09hBjEcZoczgzZcYyDvmOhOyWkeT03ekeiAv7mzvC2EBlV11o0AXh1zU52FqaPiR1Y553nUzxDQDM2hqdSgU976EnRlBmE+nei6g0Osc29FbjaB5FFG6BUilD5Dhr+bgSyI76l4Ok7Lvr99K+go2HBAYU0m0q4zF9sXAhLcGUCRQQdBj4Ku1szgjtk14UAOt7FhYXcMOgPJUiv+d4TDIfmF9uAXzXRcZnIKbo5z92FV7Wgw9pv9Q9L6kcDx6Flexy7GkZmB3dWnBkKJDmqDdfYuQ82HbQ3svrIniDN1jJClHAJkDzeD1raNY5dAxEq0Rydbcy00P76VfeJd8rmJ8jRHJZ8EzsKu0jt1DI5f1bXZEmIIQiedn/SusZhpADs1wcBhwTa793QX0BuPWtGoarltCNJSSg9XLWuDgZGTjwRs5p5OzcuXE6mLOJP9g2EZg8Eq6zKzSBWSzD4HN6vp0TvoA5NPDMjtoUeoy9xgEWj0aKs/CBhAksv1WFlSHFPDH5SkYnFtLhcpWNqiK0rTNPSgaFvOPH2+o+lB+htIwiUwM44ZXnZ9v3VmpIb5UODcjM5cGMGhk58MX7Cxvb4tGhprAVAKIv8ioQISBR5zqY9okJyqIfOdcrkCOm4WS+Vy+O1aeBq3gxl0SEZZz0KHs0p2KIAISnCbICVyJ7BpBXJ6gmQ3u1Cohu7PudaEqFsObqHKhmJhuShlYm4p3sDasifbte0IA52+ym5TRlIBLLu90ChK0m+FaH3pH45eJeRfLr3O7/VjEx2QB3HTPnB4WtEDxyD/n6jN11HjqDMMIdGcJzeIpL1p0ugx+l0zdoGESfffMo50fFGB1qox+u7PmEsGzFLrJlgK1rrHNOtJurKt+MY4Kykyz6XdcORAjqavydEuOtYXL/Dnomu4Yx02C2wcWDpryQkPoazYUfOko/FxVDyii+UgLZX9QvlCCizDSn/yzkRG1P15GtY9FIF8jiWtVMcy4abZ3eTFi0xKpiK0yNBYG/tqRV1Yx856lZv6qFjmSudA2c0Q8IoQqOTR3yPQ8I/dZke3o96b9yTHGsdKLW99nl44Q4S5QM+WGpvdl91LAtNZoCYemlofdL/UifUmVHCpovfBXQkPHecQQPkrqSWEc0yJl5n2MGH2rnGjdoFDEQotV/NgspWi+7nL50KJ2CZJf4MfVys1tVYFA0nk9h6MHpv/C4ceM/YlO38lZwOdamBCjVC2QsPLmoR8Byyc3zjcJljW2GssYQCU/rSk33g7JBK9ns3YtDI2BG36ylUqkR9KXjlaJhp5iLjTrLxjB13Aa8RzdTUeF2eVqyN7Vreg830iuNT1/a1J5d5Y/EMkylzRBK/ZsPw35SghE6JSgr5nqZ85UyGOw5o6VBb0D5KchZl8bIXYr/aBF85lZJh/vL8D7xWPg/EBu11JewrFWECoZG39VZLlLw7PeHnj4Fv+VRqpc+/jptF8eYoAH76/XuStdYcZPhAOX1VlFpESaewQzOjZJZmUMsspgP+oXFESZuIwsJbNdaT7BMcjYjjbInvyPJieanCy2ASJhhyQr2Yf9YhNsZI8XMrdbVLusRf4Ar9XINpfxu6hx3HySQa1cIO5ibRVM3jsSmRbWZGqyoLcbhRNilKIA95UT3FOy2oikPhJTgfYtshyB9sWlImg95eI99ZaqoHoGl1yOZiW1gswqn6nQyeFfqCLYQRUBAAevDErvvgq4nqffcvHy1XhjpDlVBMwZgJkMKBPpz4zIcNzexfR6c63f+2xB+FR14FAzAAVZ0DEuoBxI69DIypmzbLOD0BPrgFL62SHZ8EAWvx1CGf2BA816ncSyz/GvDig72VlYStyQRMQirJTwuwM2ID/ijl/9l569/EG+f6hgQqS1REoV276sbXfQFyfz6uxd/JwW4iH9hcard1b+KNj7PXF4Jfz1fu4SBno2B/DTMXN23C2ouzmhpSra0FgoKSHd5pqkZhlJwmG0ZScmuA/vCn7rkQ3RpsU7RIzi4fSvRfZorhdXvuPDUrSoEoIOv+EZfs9eK01xjAgETSWWh3DETDbtyxicaM6Ywe0KLew+d4W4S19OQZWuBI6WfzQ/4D7vKGXuUD0fs0sOk+zcvTkPriJl9jcyEJ7ZImVhnbUhmNs/vXoHMCr6e1SIEnSZLTZdMZzH2snb2jQd1Wwm6idvirZz1aaoYttEYWQhoDPYucRCR7lgj0j9u1C0X36dZrVj9d4ql7ZCsoQ5YRjkDoOlf6Z2BFI8rwuxwN2NapNL7EO3yMNODOpLievlb4DWCL+5t4I4JklG7yDrG46hslD8kJfd9raE/uYLfk1RyG4PXypa/uQPXuOD/FXkEZ08FaiKlS/eZJuq3+UtKJ3NxZgAdin4AECqZh5w3xMeE6dyVy138l6hMIJFfSSHW6ImnHeV6bz89ghIh8rLHoloarAxwJhKihRzNFgEl930ZntgdH8JTO3tOgiXxVd9t6xwj0kJ34uANmwjvDecehk8TGGXqIuOt5aYztbw7CGk2XJkug+r5ySmO62pnIcINYdXWVIEnh7ztrJ1lbrnuTa+2VPqZz+V2KiSAcgqDP2WVpT0I2Z4AvV4k2IRL2uoHuex+rsSJC1ZCwHrdRAAuoOnHc47ZZbsPPwGYqYdo62ERXKxhQ/E6Hbge2ZT0CAuev0zcrTtoqwLAgzFwcnM2A/RNpxJNFd7Ed21JxEmyk409a18A+9dAM/8IHWUOhknjtCk8/pgEXT3V5G9ehZ2wwj9Kpls3Z80VK4qctI0cFVP5q6G+T0lkD8V4UNGwYlmzp63JDuLh1dZcd8YQLX7o1yyf8mw0ZlGOnrzPTiuEo1j4LzFLT9kPgWBW9H7kLmfFCoY/flWyOw+zwW6DikYnOgB/Osff1v4Noo7T1c8Eq1qebD1oAm5btOtQ9lX2DDOcciY4wva7WY3wQ3/Z1rw0ReYwXLA4UyaykPt/36xYTAROUjNpsb+i6ivYw8l9rnHyGEvT8tocoHtBh0MGaZtS4/JIgHRihcYbSfChwRzfFwTvFARmixa1LFLokrkNWb0+7bMY7974eE0HD0h+wcRJreXc0w6212bQoYjg4CYrB1gBNJmzJjqnBFH45AI23357NU88Tj1VWZqitNtTpS0+Y4KmfLhWCjouFAgspmEgfg0Ch+jRqJG7qlppbAtSHjUiyf2cvcdkacKBue+M16wYV/nJtspinn5QdQOw92ejctbs7VVq37rGdbHdMlrAURFQmjzSHAh09YaymXa8jd1HIXLm7nuZOJt++mIYxvl4nUGl6LG7nkbYo4VPl09BbpQm7zbMGrmUhMEz4NiOocCBMX/lkqNBHoplzJSDLSReT6trCRJqWtwg/hL0+qpyl+69151m3cPb5dum912k8CnI1EwXwjAqp/o74rQL8VVnn6cwakjq5n7wdzVQE8NeZvv+NMtAITRGF1GpQoIxP+ojZwipxYrBBaPGJQVysS/AFaveF2hlTtDiUEzctqqwcXOSqH+PF2haTCrD3P68Pun+k1UV/nB7MX7oUOKH5+5QpbrqWe+Ae8NXfMAYrrMR3quLsUbIAWwNORDvadEoaUibyCXskCRp/fyD9rCFse9k18EZdsjw3skUS89uXP6iS3NF4OxV4M0zHSP0O+kKHuxqysP9f1vEoKLHLguIQEj0fkCbPUbQ6Adt6sF/rQwNzti3vnjcKHzYhAWB3fkd6lGvIiNsZP0Fjs+g+T+Phlz2uI2CdqVfOtElCS3I7o4bZZL0X5m2R1XzKe8VZN88vtROqhkAgDZafEbpL7KNbDm7zoCZ0w4W/3c5+80gEsSP7WOILwG9CXqClDAyASo5d1eOH+qrAkYrCZpFPiNSuR0eKgZx0r7Vw2k7HmK9n2Dp75gruAV+ueK9Mpz4dc6DQSEBZC/e6GsKfcWCUs9NTNtFG1ZVAREXExhE7s4aSmbYemdc5ZWP+qOk4WQ++teXBp9cNq7NYd8ecGXI7Ez5LB6iSS0nfvC4WsWgvEhf2u9E4WZ0rwqBLEc4L/mhRh4DpAz8j/NbsaYZbEsCcri30uOREe8m5+ihlx9fep0U9z1MEdRGhQJ1G0zwF6XB3/eDQ17PgoqCrqBJ3ls8K3jwU7lJpxVk+fqJUP1crK5+a2LDCn8uJcss7c+J5c8Zj9UiT/FwDmXp/wEkh7RZE5lDKYAht/FJ1huAvIQtwcyH+4H5YMC8obLax65TLTbsb0bcG78mIcnLC8BJf6xaTp8UfySWCMivHM50vLUoi6NjJ8zQ41mNFp6EcveJ+rrE1O7x27AQ3WXY50jvA0rg59JZF8/PhCGlElnfaIwJyoLqTXT3IhrTz4ImagOBz4qxIYh4oYWCttzDOtIvMFLYum/LsTGAasT8WqDUqRZI/TSXHnancg0rNKE/Wd+/BLTWi9wxv1Lg5eQLnxcLOXHrINYW8ykKd6Uv/ReFhBAdturW9pWVjTQGoPF43Dqgr1lcjrc1aMEkvc58TfcuY8P6ssPsmCkdmuXSIS07WPvutPUA6/VZL3u4e+EmmsOnrcyRU1MKdJTWNr7DnFBfIiRVKeYNOCodmEr9owmFdQ+Zl5MnSbR9SLxZOQH9Vd/PraHBLh4MP1Z+NdrCte9GXsP8pDYh2OAMYL3qJShkBKVyuM6YJmk/f3+z2kU8xV3oyCkDSRf2Osfi+CPrxZPWvHiQdDBQ4ESQk4ss5XqAC5mgLZr6Z5eVlkWhucUX+5SsC1X/AU0ibM+FPd5FS9Tew7yGdN2VWBKlTriaIwIXrvzYdUjfn2bPdN994+KY5iwtTi+3bWMDEQ/evYC0Tk9cNmgxsLgURDbNZLw8Ei1PAkmFHb312jey0IpLM75tIS5NLCURglTrtoedRH44on/Xyi0LbSGTMNrmtQLMEFdRt5LlKvlfbLe+8IZsmPKSGBaM88FqB0uib7/V93casNxwYGR1GiP4HtoV1RDFnhX9YITJMITWl/BgWhyzHPyYxJzR3fOl2EpyRh8nQCfEOYSQM/iF6snZmLzkViOeKQknNATO89wOCk60BAbcbv6VeOUSZXlIo0F3XesaOpVOWYAVci/BnMgudcc8IvqMtBQZtz/BSxGTNsXMT2e0qXu47TLAw3NUvX3d3KNnpdXGnVIeNey7dDESiVoSoqFejmAv4w57+HBZfyKBX0+Z5XN+Mka6/E7v+a9s6lOQEGzZ9LTrw1k9w7EijswY1aXpkCqM4cQZrQbqPm5cWA7Jd5DJFhp6DFgzoBZ7Hg7a7VEexlqdsjbOU/KxtdxvyGQiOHYbCXfilbcU83RgpnTTrJFYtrs+WXg9pDV5czjF4XQ0gO6KUP9shqO/Fh9KJvbXqaYH3VgZXV9kIv84fZUzKLHT1EfgsQ3kQNyu5maDH0PBXuDfJwXGCyJxmV/Y1FEYKnojln/wYTgg0V3CTYfxruAImdWyy6GHGSFzOwjMq+dUMpKE8SHzvq/hpog+LOswKnQ/qThJUqqldzhTpKmNmgE6KF3IiqImkxRTKI3BlO7q9kDMgwNJgOULutFZkuSfN4u9D+giuYDbzITZfHWeW+OkFBg5Imw9b1nkIe83ix2lJmMfQk1TSVR2sIdMbzTZ6udrRhhCdwEmpUoQVAtNktdNN6DWnVdHgGsQDvdOT/2+DDsIqaHuAPg5h1IFHKFQi4oNg2A5OWi8z+lbjM9Si/S3KN/yG2w/V7pdlv61xnFXeYRUWUgonBB1EXWrpC+XfWUO76vYqLOIvogCIVC09zSYTqtWwFBMWzeBOoaR36+RRmF7mSz8HzzHKu8SY3zoO4H7re+ucv6AceB+ejZXlT8dN8IrZbRxdu49xnFkPRFYDzSSQlPi1sJ5oWcJwPglsBGbZIAyv1+MpPAml49GHrv8F02561hDqrH5FiR0NxfY321iLRbxlwUUnir55G7iNCjh4SkUQwNKjt4VKES4p1fS+IHLXb2KYhYDMliopuIxqoWeDTfCIfKiHDR+9pvCMfK1+nSsoUJ+tOB85+dWVNFQRT0z/uSZnTzQyLyP6VYgl/vtrcyuWbwAtKSxZ/qrNfdQUvFZ20A+oycaPaNLkXGyNT3c1+51QpeTejV+auzeZp6NWG6ChP8gcMoAqNBwBys5z1/BIg+MawtmES+NjARgPvmMkBwRRNwLh52pd50VcY7HXgXXd7Z65PODJcrj2L0+JP8alxR63nSkgAGgdzcHUolqAOOkGoV49/f+69o7/qgATY3Lx/xofF4xdxuKfUijY+wzS8wm8nwPYmh5HEu43xo4tN7hI44toft4647/c/bF1IUgQGKUFia71vwDVNWOV2Umi3As1ZXy1LyaiKG/4MLjb7atfDl/LIs3wRwIwgdaxlcYPOe1DwELf+iA6J4j0Ymv9TsT8kdfF8t/LbyeKph4nA9AK0dbpUNG7nrYa1Ac8lTF700V5Rar7eh/6vpBES9v06rR2vROPtYJGqYGQbLV/3Awe8UCDLxCVCAk3bSoJl5W24Z8pWWMnl8UlmFnzWWuNHq3UHgBGyzdu/MM/2kLsGTzPQryM0tQvbLGywfrPkKtYRwM853Ev+/4cly3uuwmerdyXSDKjz+zG7Gvxfk+42l29QZk3Ad4GJwez0Jhy6uOxsAEl9WsbWtOYth0PVDYCBKJ+mrhM2MehG5180Zo6ScNblPGcebba11646+TDq/uEMkXOIe3E5YCG5N7YiNbxXd739cQ/oC1eC4/qDp55fIjyiMDtJCubH1P8JV0WmSVIn8V0DWOcjdbWrqLI5aDY1jbMqhZP7/e2WIplnn7j4BPrrSewR2Lhkx020f4mYwUgx/CbLgV66FcwyjsDykua/luMesRYYzvP07iTsxBJJvwUUA/YVgQdXqpw/CtBfu4Cv9fefeT/LzBpRyPfu3MujZhRs+J1Vg0SsmlZjY8fYHHy32taYp1GK0ZZX7AzWiBoSUx4N9QkPOlHkN1NWzvwinBgk2goPCv1VK5N5p05Bt1aAEg1ODkIB+pjLWiDeBs/0594b9dOZ+rgg5/GvA62b0+R8cuS8SBvRyiNkFjoelf4FjmNFu2afhVpgZA2CfMzNKOoprNSeXqFCcB40oo+BJodagSJzbmIoGd2sou6689jJTbXF71r3QB4IFjJLb23t7p0ZF6KLqJxtTGMDTpco4R6yBfwMOze2t4k3ub8M4IKMOjEXt7Idlbx0Mb5qDAboj4mZL+8cTxxa9xF1uWxbv3cPPpJNXGu1L69VsAw64XVw9dbbxEyv0kXTM0WPUh2l+wyI5QHcS2rH+j6XVpCvh+mWBukSM4LlIcX/4II5HrVNtGs82HyCR7NAIh8jYQl20rE5sy9c1CFSo3dw+ZBblsD+Hlf5wMu1BaqVx31ocrJtw8YL72HmqMaDtXx66whBm7bjwZ4DJ5SqxyKF3kpNTC6iZMXUBQkoE+JpPgEzXbJcZ93YXZNU1NPP9BhW1LvAsbJXU7CmtG5Vx/pvspDK3nrvy9hRgddc/BBtUk2AFZGWTsNHLGF8IjCa5mFSWkQtJrvdJZHunIQcuw4RkzuQtlUmFfmsBuAr6hIpT5ZJowtrcj2/vb/tmaltIJH75w6h0oEIVxo7EBVDw+/1LukGli3rWDJwJx9UfOfDCW2GZXQ/YYj60pFjjFCsJDWJtasfsAdyZxLVmURhRa4F5rly2hZUk6GPP6Nj/I3akDhRKAA1Iq+Zcpzn3qykTk/vwBZ8oqiQKuyzhcPvAyzz+HrLed4vRtTTOs83mUL2w8v/p4V8S9bUVDXSDfu/4x8X6+CaNVIy3uuFvkQ/pD1fFJioXDOk/xoJoNXIZEN4iEHRv9aPcgMZOT7Zny4/IyaiLIe4hXmbc+UnYvlqf4jAwc6qqN8s1SgLT3rBlJbL7vlb8foAtEm+8REeTsHaqrfkCoVUYctDxhPlLbfp+eM5ZbngV0rpl+9kzZrbg+DDZj8rAk6rJmCyPpqasUL2Fo6UYBAeaAhNHW+bTnhXI1KlvIJGEjA9VsMsVmq/X9qM2Sv2fPe0Ea0P8Ah7mwEm5pemNDGXKSD9jrdcP4fViWP3WT2HqP3z3eEPX1xGh+QQVIfSwDhSjgjpIr21nFmqeMhQvk8MubV7AnjmRIiMMVplJ/2y5IkFnUOrZa/B4S8i/F9gNHYSE2eC/Gfk50HiuMfNgKSvZJKD9A7wHqNWwmY+bTNluy61SLHdUKBjz2xWUjwR/bvW4U/Tb5S305n0AxRcRt/1gZgsqVho6wSZ2gmZ+MB8r3ro14fQPAjRVsmSOMCTlFnq5frPklfEC4tXSVrnibzQPtOVpSr8uOW4MwScHDu2B4NrD72hHvruidQHfP4JAM8g0cWGqDMzFWJZnsp7BQfBb+Ng0Cgaxe/Wpb3E/HaB5d30jkRsdyOrHGpYamVcxJqhN0lnYQpmnuqqpVPXjMsehvKGeJICN/4yeQ+XcRJaLtGxwgqnxCjBTQqKugNUK+UrEjqBYIAnK7/kpryPmzHq5LRjjsgfZthB+C2WlFT8PvrUkjwj1kUEX+egMWgVj8ny8gJrGOJWvrREGo8dBP/zacVKzncaCsYv83fWbGjAOqDTE3Cvi3BKjN/bTW+AqEj+l2LIjX04K1w8R4nSlW0LwDuIb9fiobwPDdJFu+v15sDqRtG0FcyoXjCv4/zXDNZyYuYZlB2DBFYKyBqofR3Pzo7Z9PQOMOfGn05hIMpqvCrt9jNmrHXxABR0A1YjgV6DhS/OnBo0fkDHueLeGjORsrQnc+kIdmIbgzjjHF9lbkyUjq4siUarYCnYNvvGLbDfFMYyIOqBMbcuxBoI+Tsdb6RjkHoD5sZJ/EwJrEbEk5Zy+l4tgpFjQcKEjKEwSJ/oMcz3ClKLdkCZ6gdiKEd4r3xAPKV3KftNcPcBB4gAwkazrqWvEhgAFpjM5YGSNBWGWQD1VwHCTXVBbb70rn6kUyhJD4Kf6IPfoQ7Q2NOc5mzuNwTgCoMqZJx9PM9EGpgSPF90PDX6R8Yx5e2DUBoLOjCW5N4rjL8/tkfp3FVCBBByaugsA3lxWa0uvZk2IbUYb/MEFtaDlIY17oe7NZPpyBcWnZ/xpX+6TPnoHOEwGrgRTeGsCuKs/eWiVmsFFRwltXu8IxGrenm4qFkKhBjbQkcnx2PTd0+BAzV6sKMdEdB7ICqPKyNbi/x3z3k7nOGGsoqoMhiG02AAze5o5RoF8QfUjaZFOzdF0ZIsQA4sMHvEhRiVrA47h2cJ5WZnpbmH06LlsOY/Fg+UMDKFmMDCCpRNI8wtdj735kES0AnDCVYyfdMyDPE0UIiqxvs/ndvKzdPskkNwi6XMehk61el+/YFS8LCZMdtZCTJT/5adY4zxOOgZaXN8CLMvHnYWhaoo58DbyuL+PSFAML56nMm9t6h4QCXN1lMtrVLazx7owrii2JeJQR9P7GiiNFsCTk+u85EO47GOwls2chBdQiuszChNkcerzEmiPHgAC69I24XQpglxbvtXBen9TzUUb7Lw6oPpYLum2XpkNZW3a+iP1DPEDGzRDTrVwKinnWqpbJlv2Y1fxdUyXg+feDxKxVoIIzk5Am/hwfyTNUrlEBPcgqcB77WRL+6StUWj3m+FkyVlgPZ9BFHE0A4GtrkeUIl3KzVraAwpVlGoJl2U/ODj5RHeCJRxsfkcrmyP6EcpKB5gx0uIcQANz5qtqpzzOcTtbPa8J2cNtJVqHnaXmfm116XG5hzcjU1dl4yPUMTbrB/p2Y5zG85OD0upAKrAkr+UjrygV7YuQQD4mLSoSWeWEhlhvNip27eDoI5HMovykj/XWxuqWa8SQyFRdbBdz+8Ohbv3D1y7O/RbBQpE8ayQ0RgKN4iJXTUftY5aJihSu7UmNMoVLfzhE8PsD6e+pfQgzLc9Nr04aaQyfb+axsa1f6/0WS3wyktQVG3YiDe0jonb0DMN3VsXdFcCoFhil5P2dByxvI/FA/r3Kr69XpNhoObHYi497jXRoYSudBYO0VP8rB4HokbKCGGHq9T9fI4T7b554zkdLUTf8lomnmCsQyXOqxCzUCBNOuCoIA4MOFs0gee+GaWOlBcsQl+p+Y7lx4kPki1QPz65U11ANXoGdlkiwHh0PHGPHPexREhe6ZvO4PNBFBAjenG/sApXJmXXJb24vhZGuWd2E7USB0895bN2fSlW41JGMa1/KiV0jMRen+LaFskLIk4XMs2blG5epPVHhmulZ/sTDxIFnb1eAJ250f+/sUkb6wrX8y0lV900WvzHFINTjxb07vOeZivQfAgT3gcdbNi07dSC69timSaiLNnFefZqfjPOBuEAXNjSzGhkphExP3+Ukcma4xLwPqoV/H1VmRTtyywH6s69+VkrnYPaKj1sLAhHnhmownFqxdfa/5u2lDFCD2z8XX0tV46hYx0R2wAeGkMUzAZKrTahihJElOgRaV8Fn0xH2eiFOyhpaRaKL011TOK5vnhArcKq3iYiVKDL+j/enf1pGfku47Ma88GQAv2NJBW7K+SZP36F//2QABABoAQAABOQBAAA8BBzkCAAAAAAEYAcBAAAIACQIBAQoCAAMAGVRoaXMgaXMgb2YgRmluZ2VyICg3KQ== +# +LeftMiddleFingerBioValue=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 + +# +LeftRingFingerBioValue=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 + +#BioValueUsedInYamls +BioValue=PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI_Pgo8QklSIHhtbG5zPSJodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLWllYy8xOTc4NS8tMy9lZC0yLyI-CiAgICA8QklSSW5mbz4KICAgICAgICA8SW50ZWdyaXR5PmZhbHNlPC9JbnRlZ3JpdHk-CiAgICA8L0JJUkluZm8-CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24-CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I-MTwvTWlub3I-CiAgICAgICAgPC9DQkVGRlZlcnNpb24-CiAgICAgICAgPEJJUkluZm8-CiAgICAgICAgICAgIDxJbnRlZ3JpdHk-ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8-CiAgICAgICAgPEJEQkluZm8-CiAgICAgICAgICAgIDxGb3JtYXQ-CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24-CiAgICAgICAgICAgICAgICA8VHlwZT43PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MFo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU-RmluZ2VyPC9UeXBlPgogICAgICAgICAgICA8U3VidHlwZT5MZWZ0IFJpbmdGaW5nZXI8L1N1YnR5cGU-CiAgICAgICAgICAgIDxMZXZlbD5SYXc8L0xldmVsPgogICAgICAgICAgICA8UHVycG9zZT5FbnJvbGw8L1B1cnBvc2U-CiAgICAgICAgICAgIDxRdWFsaXR5PgogICAgICAgICAgICAgICAgPEFsZ29yaXRobT4KICAgICAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPkhNQUM8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5TSEEtMjU2PC9UeXBlPgogICAgICAgICAgICAgICAgPC9BbGdvcml0aG0-CiAgICAgICAgICAgICAgICA8U2NvcmU-NjQ8L1Njb3JlPgogICAgICAgICAgICA8L1F1YWxpdHk-CiAgICAgICAgPC9CREJJbmZvPgogICAgICAgIDxCREI-UmtsU0FEQXlNQUFBQVdEYkFBRUJBUUFCWU1zSDVnd2NEQjRQQVZrQUFBQUFBQUV4QUVBQUR3SUFRQUlBUUFJSkFBRUI5QUgwQWZRQjlBZ0ZIUUQ4QWM0QUFXQmFBQUFBREdwUUlDQU5Db2NLQUFBQUZHWjBlWEJxY0RJZ0FBQUFBR3B3TWlBQUFBQkhhbkF5YUFBQUFCWnBhR1J5QUFBQnpnQUFBUHdBQVFjSEFBQUFBQUFQWTI5c2NnRUFBQUFBQUJFQUFBQWFjbVZ6SUFBQUFCSnlaWE5qbWNvQUFabktBQUVBQUFBQUFBQnFjREpqLzAvL1VRQXBBQUFBQUFEOEFBQUJ6Z0FBQUFBQUFBQUFBQUFBL0FBQUFjNEFBQUFBQUFBQUFBQUJCd0VCLzJRQUl3QUJRM0psWVhSdmNqb2dTbUZ6VUdWeUlGWmxjbk5wYjI0Z01TNDVNREF1TWY5a0FCQUFBVVZ1WTBsRU9rZFNRbFF3TWY5U0FBd0FBZ0FKQUFVRUJBQUIvMXdBRTBCQVNFaFFTRWhRU0VoUVNFaFFTRWhRLzVBQUNnQUFBQUZmWWdBQi81UGZHeEFPelpINllyNnU5bisrbEtwZ3ZleUxHR3piZjlocHNZSGlHTlNCK3htTWVqV09yS2d3S2dXTDJTbXc2ejZ3SU5oZGdJQ0E4b2pleEZBQ1dON0tOLzBhM2tNS3Fnd3VLNENBOFFBMVBJQldRZkE1bTN3RmxrNzZTaTg4L0FlQUwxWmFNSnlhRmt3Q05wY0xCOVJxbnBNZGw3Qld3ZGJMdXZHdGpRcS9nTWRVQURnZ3FnSWNIZEwrSGxqeXpId1hzcVZ0MzM0ZW84eENxQ2E2SG9qb29ZdnZQeDdOZXIxNnA1azFCMnN6VmovblJoNXZkeTFIU3A0Mi9BSFZKZ0M5M1huWW1yS1cwY3NZVE9sRzBVWm4wMnVZWC9vSThTeWNRSzczNVhTaTJ5ZnhuTHJNNEV0NExGNHZtOUZuZFFad2szSkxCSmdnOStyTHN3WUNxdWNBaWNrcFArcFEyUWMxWmFZRlhoNnU4ZlZLUUFncVdoT0FYc1lBNE9Yd3dyOFM0bUpHdFZ1azBXTEZUSXJ3VGlGOUJXWjlPRkp0MlB3cXZqTGZtUENRUG0xYkRZenVlNThtU0VmdWk1bU9GYXVZQmNuMnkyQ3Nac3UxdkUvdVdRMmpVa05RUmpGZHRyOExwV3RVSDlhaWpISkVtQnZxMXdReGVIcDZoSEhqaHBUaGNhcXEzU0RicVF0MUZUVzQvZUx6U1ZGQ09qRnpBclFpYTA0VlcwR0lORVBlS3BBOFJpZEZKNStnTjh4MUhpU2VYYkRqdWlJV3BPYjZuWXlYbi9IM2Q4eHBvdzhaM2pkMEVpaFQ5dlZJbWRlbXRSYlF1b2RhdkxLTG10UnladDZTYlNwWVBBQ3pSL2RLQ2t0QTBIWSthL0wrWWIvOFV4WTV2UXlvZ1QycFlwY1B2OVpqQ1pOdFNiS0F1bW1EeG5zeUUyS0d2RHVBT00wVVRObCsvdXJPMFlCdE5teG9QMWsxbERpRlBmMS9yVkIwbjdnU2hncHhnSndtQ0o0VE5sMFI4c0s5VXEwRlFtWjBLTExCdkJremZuUWVUSnhIaFFrVUdLMjBZbkMxdjZRRWpjajVUSEdMcnZjd1Q5Qlh3STZ2Nllsc29KN1lxSUxZVGR6VDhja1I4TXNtNGkzZkhINE04dmNOWWRCOTJVVmI0NHVDb2RoREIyVTYxcmpZNll3SzlaczBhcksydG1XeVVvL0FCN2tsMWpTZFZobHpEcGxGdUc4dThNQnFQb0xXdU9Cd1d5T0o4WVFOWmZya1FEaGF5c1k0YTEycjVSTmgyakF3VWJ4UU16bEhYU3kwcm05cHdHMG9OeCtJaEdQRkRHZEJLeVU1YkpJZENWeCtNYnZicWRicGlQb2hKTHRDeVBjNHpSNDJZTlVYN29qQWN3VjVUcDJ5eWlyYldoQWJDV2FjeGJBYzl3bTQ1ZEI4d0ZNK3hmakFEa25kTk91SXh3eHRnM1llTzl0ZmtTWWlQLzE1UVJXRkU1NnB1cVBST1FvZ1dpcUcvcHRMOHc4YWpGb3BzOVAzTXp3L2ZlWlJ5WllLdytWZ3RiNTBVdkVEOFl6S055Zk80ZnhLbVZWd2I2L3pzUDZCOE5ia2tobEVCd09qNUpORkRYdklWakVZNFZhUXk4YjNqc3FtcDRGSFpCamlWZUlNTmNOd0RIUUQrR0RzZi9aSXhKeC9mSHB1OTFpdkFFT1h2UTVaQUhPYmM0MXFpZ0RudUpLOGNOQjVFQ3luT2pqRnBXdDFNQjhpM0FsdFFHZHpQQnViUmViNDhNVkZGNzgvY0ZlcDR6K2FYQlhaV0xDOXo0cW1kcFNnTXFJYjQwRmNtd3k3VDFuNHJEaHc4Y29OeDU0THNNRmhuQlA4aHQvS2Yvem8yTTVpRFI2TGlJRTBTeGo1bnVlYmRkUkplbWxRbE1DbGFGbDlvN3VyZWdRZTBzMC9ieGNzaitjUFFyNWQzRnoxQ0JtNk1GVmhoejV4V1NXV2UvOVNUVFpPNkx1NVZZWi9LVTA3Q05NRTErcWxaejN1YldQRWpjWWxTL0VXdkFLOGJGYmZuQ3VVYjdhbjZPZjF0OVVKYWlRSkVBbWV6aVREVUozRnE1YXZ1TVBTZm1SKy8ycWw4QkZZRTBlek5ObmZlTEpmTytySHFkT3lqeEIvUXE5V01WQVd0T1VjRm5HYkNHdDRsWlJJRHEvZmZ1WHVWdk0xcTVKL3hPdWt2YUxuaHdkOXhBMVcrL2x4MnNFL1JnTnVzV01tMjVPdmlON0o5Tm1MTDR1UzNiem91VU9XNDVwaUx0cGxidDJIS3JKTTF0ekh5eWR6ODJ2TVRvZ01qYW1KMDBSY3RabFV6RDJ0SmRJM1hEOEdueWdIMUNTaWhSdHVvUWNOSWVrenlma2htd0Nnc1dudjRjbEZ4NzMzbVBZUVZBMEtXRFlyeHE4aHg4ZkRNZ0lvQk15V0xmU3VuOFE5T3ZBdE13NmdDS0N3RGVuRzhUZUZVK3R3MGZPNGR2dSs1TG5MU2lvYk5lbTZ1bTdhYzNLaE4rMUpONVVXV2dxNFdQOHFBYnYzQVpjMFJOSFRYcWoxYWhWekZNbG1YWEVkU3daUEFQWFRFOFVNNTlDVFVOdE91VkJyY0RSZEEvYmpRc0hJM2VOczVKSzRHVHF2a1Vud0p2b1YxSGVYcFlHdjFaSkNsaUNCWVVJOXFydGcvU2NCVlhZVDZXY1h0STRWdVYzR3g0Um9aR0JrMk91SVg2azQrcDh0UVc5L29aV2JzSUJQelA0cWo4SHhCeENUWGJocFRzb25BbjEwK0VsTlAweDhLOG9TbEcvd0dyVjFIdVRzYW0xZnRqSjZoWWwyWnhvckxmQ1d5OU13SEZ1eDNSTjI5YjBCTTYvVEwrUUUxSWpmbjdGTUlGaGQ1Q21JckJHeFZlTFFCNDllUDRnMWYvQXQxelRpRlh4MXJlVVVFVk1UcTE2VkFlMlkxWEF1NEpBZHhUUjZWc0FYZEU2Z29SYlI5N3Z6SllIbm5oQlFoQWtHYm54UlhWaWxFN1J6bStwOWoxNlRQUW1aU2F5Z0xJc0FXdy85R0kvanp2TWhzV2F0QWxvZjhjY1JOUzdteHZwcVJYMS80UkJoM1BnTXlMTVpOVXlHdFh0SkJmVnFpMElJa25uUUt6KzZyN1ZNNDg1b0QrWWNkU2pzcUlvM0x0cjYwRkF4Uzdxa1c3MGpuajcxYjIvYTNibTA3cE9BeTk0QWdldzU3c1B0SnpQT2h3QVZMdW0xTkdrdkQwenkxN3lTL0ZZSXdlVkM2VU5HM2cvYlVyVDZMVUhZL3ZpaXNPRTB3clZYTnJCNC9yQVFxakRYYVZOZENMSFY5MlVQaE4wOEZxR2dYSUFtODltNmM3Y0EwdHdmaHVxR2xDamoxQU8vWWRkRTdYNEpCaHlKRHh0bnNQY1FwVnl5RkJuZGUvOWl6ZkwwWUpnNzFoK0dlcC9ScTBZVDZjWUhjZ3QzWjRzc3NiMUtzL1pMbVZjbnkxQm5QSDNjU2JQL0tUMUIyT1Z0SGkxZG91RkJBUDhJTlBuQ21jY3pIdWVoNldmcHNHSDdYNUlWUWVKdm9lemMwL2lzbEdGZ2loRFpTQ2gyS0diNkR6M1g4R0pIcE1oWWd6K1pkT2JvK25zZERVMnhZdm5qRjhhV0Nzbnhxc2diZG81WDV6Tzc4VjNDVDhjSGI4Y2pxYzgzdUg5TTRuL3dZZmd1UXBjaEQ4c1RDeFJ5MG12bGxEMXZGUFNrWVJaelJnSS9NTGthM2x2QitOczJ0QzZ4NXA3SEorWUlDbmlBNm10YWRpY08rVzBWcldRTE56ZmtCanhIV2MxUGpyeSs1d3dQc001OExCeEdxaFNiWmdybXRtS2c1VlpUNVhxNStMSzNQNjhDYms0Sk84RFBPQUZ3aTFWbEhYdnNMMkUycUNEd3VOYTRzMDZvTzdvSVlOd0ltL1dLN2c5SWxEcmtvMkVJMnFwbUpQQ2ZNRFNXTVI0c1poVjdrUkdVblA4N2NMWXQzdlFjaXZDYy9yRFR1a3BoMVhYcVlMcDZKTUdoamxSaGxjUlMwblNHSzlGSFduaklzeDZyZ0RRa2N3NjB4dzc1QkJOSTBRSU9OUnE3THdpRkM1QzVTWHN4NGltYmNPdFFWL2lBRHlMSkxOUnF3UG0vbHJxb0NMMFVvVnNyK01MUjl6cmJyV3FmVm1NbDZvMEpyVElqaDl0TGh3ZkREQWlpVEdzUUpVZVM1TCtIZERHN1I2MlRBWHJCUVVRbXNlbVEvZGJPMXNpOTJNU1V6eEV4bm5UaStjQkpEVGlwWURvUENkeGlqaHFEOGZ2R0lJS3kvTmJ5YjdnNndBUm9WS0xJNlJ5MzJFamxjdENKZDVNejU5RDRBa2hDa1RRS2tuSjQxdTBFMUE4WUxvTVlGU1NGWldJOFUxUjlRSG5waFFhdUNQS0w2MnduK01uRlZjK1RucDNGcWVGU0Y0WkJuSWlpaXp2NTlsbTBhcytGb0dnOFZ4anY5bTNkLzNzempmaVREUWcyNHlteWc2clFjNDhSeGZZUUFURjBZV2EwTUF4dmlkMndMZTlpT1lqUjdISysyeEhvemNaRU5PUmFXMlV0VjRGZVgwc3JPaWF0Y0NpSGROd0plY1BYL3MvaTFLNlJqdCtxZmtvUnhtYURvZWdmTnhlUmZXVmEvQUNIOG52bVNEY1lUN1hKL2xMWXBkTEtNbWVJYkhvWkdacE0wZE1FT2FCam9IdVdFeWxSMjUzS0kxeDNRSXJEZEhnK0VNMHphTUNLbFgybDVZbEp6SGlpejh1bzJWQTJpS0ZsYSsrZjI1dHVidWxOVVpzaWY3R2JvZXdVMkpZUk9yWUExTHVXOE4xSjlaVk5QNnpKTDZpeVBONG14dHl2ZC80WjBWOTcya2lQdFE4NHErWHNSMk9LUFBlK0MxVzliU0RsdklmSEw1YW1lbFUvTkZjOUlEQ2Nyc0NQZDlrRFdVL1ZyYVJSTDQ0eEM3aDNIaUlWTllwMVhkejBDRnIwUW9LWFFidmhuckV1cHBXb3NHOUhFdjVTbDZkemRjNklrUXFKTGtmMjVDNGNZV0N0VDgzbnJOc1JoZDIwWXNBS2N1TTE2U0E3bVo0UTRyZ3lIeXRIRlNES3VUbnpUNG9ucGFqR0JpR1JER0QvZEd3bG5HNDY4WjBURUxCcEd2VERXbWlrOW4xTGtVaSsyOU5yTFVVUmJZNHNoNERZbGIvd1dveGhTRFNXdXQwZ0ljajZyb1Z3TTl2UjVEZGNnV0xqNjhxZE9uZWhoNmJaOGFpdFlkYUR0NGRWRG1oc2JNWEQyNkhGSnVIL1ZDSENyMHZEZHBrbDhmR1JVYzJ5ZC9QcHl5QkVnRDRpZnIwd0FLL09odFJpR1I0aGFQZVROa0p1ZXNUeU1CWFlROVJLMlIzWlB0WU9aemxOMUVFQ0FtYnRDMlIveUY3MkUvcFVSVXdKUkJITEpFcEZnaUFrNGI4YnFjbWhZRnpSTVI0R091VE1xUHg3eE82RHNYM3cyY0t0WUlBd1huSmFrSVZCWmdudHlhcTFjYUlwWTRQVzVRZEpIcG42WjRXdnRrTDhmdkxhVUltbDdPQXVEKzJERnVHTCtWalh0L0pBaHJTTVNzMXN2eG5PWkU2ZWdSVkdlQTcyTFNtOVZkL1NNNElWQlIzbUJyRDE0c0cwTTd6SjBaWjY4elpySE1qL2NwMkRNTllUT0FHL1c2NldJay9rQkdkaDE3S29SL1hBNlEwMDRPbFREcEhNNUs4OTB5ZGVscm5BbkU0U00yQ1IrT1lJdkZrL3U1WFQzTkc3UGw1aklQeVR2ZDYrZ0NJYk12WmhjSVdHZTJhQlZSMjdSR0RVQkRXQWR1YnUrRUpmcElqeEs2d2FCZjk1NHhadTAyWENTZk9oQWJSU1hVZXZMc3dpMjlHQVh0d0x5NFhHZURjYW9nVzFCd2dpMENhTHlibWJFMGdLSGZyRTNTVUhFQVI3MnpKYXFqTTdnWEg3VFdQZ3V5QWRHUWEzbm5sYThEOFJtaXEvcHZMOHZ4Nmw3eG84TjJQbUQyZkVOZDlkTGJCS0hHYkZtd2JFaGlPc1p6YS9PWi9OMFFTWklqOU8wL0luR2twQjJYMWlDYzk2bHNoYnJwRlY3UG9Kc1RjME54aEhvaUxzYXFwMXNSdUp4SUpxek1rVmlQWjBCaG16OEx3K1ZNaWhaZDBsd0t1QUFDUVFNQ2ZxeXlyNWFMVUk2WjRZak9McWNiaktwL1RwaDZ6K1c1S2RjWXhSdU5RR3UrTzR6N0Q2d2dyc3ppakpUS2t4a3N2Ymk0aktwOWpnTzh2SVdRNWdDVVpOaXo0UW92RUxZN0dyQkh5dW5hbFBhNklPWXFRaXpWMzV5M1IvNDVJRHlUZ2RueG1BYnd2OUNFZjBKbGZXVHdDandDUEEwSVM0a2JtTDgzbnJ6S0c5L0MrSTJOQkR2MjF0NGovUXc1VE01ZWhNcHA5bTFkYUNyWlMzS05wMVNObVk1Sjc2bk5ZdUVHREpEblZSOW4xY095TWtCVTNiM0RqdGtEbGtsTEVtY1lKbnpoczZzaGJWK1A3YlF3TXdVcllDdkVHdDBIbXFsY2syMDVEd2lTektCT1NwMDRwQkY2MFRXK2szOXcrRnJvbTk4U2FTMEppaHpwM2ZIMDYvTC9TSXJ3NWRMOGhvNTcxZVNkS1d4emRLRzJPemx0TXczTDFJR0RPbGFueW9pUnVmWEpwc1hncVBhRmZyWEZ1VmJFYVNlVVg3UUNNb2xOTUpTd082OFV3MHVhMkZyZEIvWFpWZ3g2UjRITEtIZTE1UnNzdUd5ekEzQjlhOUVleGJNdWFydzJiRE04Sk1ETUtjMnVmaFducys5dDlnYXdQOURHc3MrbjFCVnRYMGtKbWZneDgzWjgybGUrS2dwUXppU24zaU9YamtTSVZDdmlFTnpQZXpMWDZoZk5DbUtVaU1wUzltMG45ZExRanpDT2pOTWRZeXBDOGMreWRTVndTRThpYVBTNGpJeWRJL1ZBbGUwOTV0Vm5DTHZIVmwrN1JFanFxM1Jvb1dIKzFHRm5hazcrcDNIL0d6VlF0UEU1aFBoNk5Vb2I5WHNxdnA3LzZXNW9PMzBNY241UDVLUy9qbENiNTllQTlCSnRqcnZwaU01VWJQSVk4cEFxclE3YTNQSjY2WDRTUUVBYTYyREhYS2xBQXRSczIwRG9FejF0QlF3NVI3aVYyWjYvMlNwSU45SEQzSWZIaEhZK1hMNG1DOEdsQXByKyt4VXFkcTdRUFhBR2pJWmJKdFR4a0M5MmUrUHByTm8vbE9VSysrSUNSVS9IT3lOMnEyOUZ3OVMrUnlFM3FCa3lhR21pV2U0cjZpOHl3WktwaGdwQ1duU1AzL1h0TVR4SUtXRVFJRGNyS0xYeEUvTExmUWs5TElQTXJSZzYzNlVBcHdSK1RIZTlKSkhZZUg0QWpXQ252QWNtZHRmWnQ5TXJsNFFxRVd3TjcrZXdqeE9SZXlFcjllRjhscEtaaWQ5NmZvZ3kwaWZybHlxTmtscndCUFFzbk13RnpEbldEVHd5TWlFVHovR3lzN0NxZ3gyWldFUVhFNkdubFdHMUcrL09sVzlZeVdUbFE4QkI1eHdUdXRURHljaVlrWmxIcjdvL1FyVHpZMWg0YkY2UVNydGFqTHNDallTSHhhTDJ4T0hXY25lamJpSmRBc1orY0c0MlBNbjBybzFWZVh3NXNEYWoxOHpMS0ZYUW1ZM0tSVGxtK2xYbyt6cDRCUEJYN3pVYjZ6LzNTUDZVVlV0dExSVkR1dkNaN0MyQkZTc2V1YktuK0Nia2lUU0xUMFZray9IOVBiYXRya1JnS3pncjdjT3J4TVU2eDgxb2dsRGoyZS9wWjE4NkdlZEQzeUhiZkcxaUdtdWpqcFFvTEZXOURxWGs4eld6aFFObFBLZDBhdDN6OHh3eFBKTVNkU0VWTHl0WkdodURsbzZKdW56U21CQW5mWjNzTjN6REhjQmZiOFlyS2x4S2xNL3cveHhjRmhaa1FCaXNSSG9KRDZxN2Y4ZGtNOGJKcjAwME93MngxbTIvWUdKUDBtWTN2S3JlQitLblcveS8zTDc5WTA0UW9ybVh1NDdtSURsM1ZRUFVpNVI5NGFNZEQzK2wvSEFYQk1hT2V5QWlvNkpHTG95R1dGdDRSOEZHL0krblFwUHh2NnlWQXdzWThFWlhHYVV1S3EzTy9iUG5nSHh1TkQyNkpOTkVEN3R0UmQyNktSTVNpUkxEZlV4WHJ6bHY5YzhJMHdHV3RUTEhwbGRXMXMzWjdHdldTcGpzbUV0RjZFZGN1Y2ZLdEJZUTd4NHNlMWhPSm1vWUY0eEVyK3k4aEFSWmVIQnVNdTJmUTRaNTZTMHEzbHg4MzE3UGxDVlcxUUkzSXFDZVMzQUFpVTFDaEJ0WXZpbldoQy94S3BwZXp6eG5YRTlBWkd5eWhoZHpsVFBrcWZWbWw4RVBVUitPMVc0cEZmOUVWeDBjNmhxSEVGZ0FCN29JYldSTWpKWndxYllJRGY2TG8rVy84aEVpOUQzU1dJVmx2SXdCTWdMOEI3TlI3ZG8rY2o3V05HeWRzL0lEdjEvalZJUTVVYzAwcVJLaUpZaEpjYVU1UFd1VGhWbVJFWmhYa0I3cDU1cUNOUXNycTZ3QmNPemFlcHNkWVhFODRsL3NqZnJiOUp2dGU4QnVDaW1NOWR2LzJyOUp0eVkrRWI0Mm4yVk1ncTlKOTVCTkVZWVcxYnNtTjdLNDZjSkp3MUcwNXFXOHBhSVN2NTBkZW51Ky95NVdCZitDbjA2ZmtTaXhwdng3b2J3KzVZTjVVNzYydGNGV2x2Z1BsUGdXNVhTMUlsaWFNZU1OaVVZUkJ5YllURGxDOUNvZS85RjYyUkE3aVB2akxEQ0ZiNEVBUGhUbitVSW5HRnkybzhwbzkxUkFTK1hEa0U1QlkvSFhyWFBaRmgwcHVYMTd2NHRjNldOc090VEhSRmp1MllyZGE1SFo1c0ozNTh3cjlVL2M5eHdkMHhnSlFlS3hnSnNuOHlSRlkweUNja0lnREhxV2JWSWtVU2g5TWFlQWhlYmN1Zkc2YlRudGFNekFGOWlqMmhTeWFpU3pGQk1GMFRMT1ZXMGdYVjJIWmM0WElxemJOWVErRHVmSjRQWTR5d3RGRkJUOVV2NThVK0M3aDR5TGYxTTVFWCtPT1h5cjRhTEs5WUM5aTU4aCtCM3d3ekY2U2FRdGxPalBaK2s1WHVxV3hvcm1PK3hMRzlWbXNySHRIdlczV2lpS3RDeWJGQlNKUFJDWWlkM1BaNjJydENkeE5qNUZTem5WSG85djBENCtzWDhJbEd2cXE0T2xMV3ROdFFwZHJIL3pETGlua0ZOMHRTajBSM0I2b0FKMm0yNUNrTkFMY2xIK1Vuam9tRmgwWGdnY2thVkpwYWt6aVZhTGVJcmNLbEpsZlZITHFaeTYza3AybER4cjRRUnhMejdNMmtmYmR1eVZ2QmJLSFhLTUc0K1psT01hYXdzTnI1YWl4dnJmTEZITWV1b2xJQXpUNHQ2ZVFPckFYWWozZnFDR1ZXUTV5dEsyTmFzemJMbXZtYTFoRjVTOXJ3SGthV2pSdU5WenFic2d5MCs3b2IvMmZTQkpzU25BUHFmSmhsbUZaMzUxcjBjdEJQSWRUOGR2TUo0eS9xNnlJSkdzdlQ4aVpDcXMreDJvU0tXNm5zM1VtVzUyODVwOG13aHNENTFtZC9SSXc1QUFzTkJCL2VwQTl6MWhEU05wNjhtL3JhN0MxQ3ZsR1lNNVVXaWpkb2tUYzA2Y1ZsaGljZnhROXM1ak1JRUNXWDFCdnY0eDR4OG1oVWYrbG1SaC9rUTY3WVlmMWNOOGRPREMxbk5aSjBZM3JpQ1MrakJ2M3gveU9KUGwzVUNzb3FoVzgyeGpaK01UVU1sSHh4WmNKS1N2ejF4bmMzQ1pIMm9vYitJQkVaQ0FjRlh6bGJYQ1JtRHl2REhnbE5kM0dvbjBRamNzL3gwYlhCR0hBYVUrU2poNERHa1hPcVducisycE5rSlhrZG9UTDhaWkp0Uit5bC9ZdXBhWXhtQ3UvbGtmRVV1all6ZXBNN2FrU1FoQkVldnFRVDlYK3JVL2ltWkRxUHZ4Qy9XakZmZmVERnVVTkZuNU9IN0UybEl5RXBZVjRBelpYQmFLckhYMTVLU0h6dHBDVFpFeVdIUWtYd2VjQnFQamR1T0o1SEZaMzdsazRoOHVubVZBTERrSndyYk5vNnRtQ3hyQ2FmK2FvTVQybUthajZuQ0ZYQXFhZHo0Y1BkVkhqeTlHZENaRmppMEJYUTQ4YnoyWDZ5N3hUOEpEbU9YNVZWV2VFcUdEZ2tnMW5lNTZua09RK1JZd29KOTNsclhsODdUeVhUd3E0NWJIUHQrTWtTaDdlbVhIQmxkbmtOb3FaV0hhc0tydGpsSDRLNi9MYWduZVlHdEpsRU5BcXhxZG8yVUFMNE5kdXAxM1pmdytubnMwWmdSUFc4L3pXbW9wWVg3aG5xQXBLZ2I2ZVgzanFFaVZWZ1FUZGhJSnBRMUN3NmgvUm1MKzhwQlo0Z3drVHBWM0p3aVdNY3RjYlpaQlRkc3cydHBhdjFrUjNzQU83aDAwNDMvQ1hwL3RwVkRaZDZtT0ZJcjVmb3QxK0FndThzREFHUWljTzgwWTB6Mk1aaEZwN1RVQ3VhM1JQL0Jobk43aHhJaERGcDBhQzZ0SFJqQ0tEeEdqV3N4NnM0Rk83NHdGd09lYmF4cVdudmZ6RlRUaTk0Z2VpK3ZDZHA1bmh4N0drRzNMQ2hRVUVTM1h2TW9TZldFSTlaT1VGZEVKUzE5VmZGTzBXeE5wVmdPdjhvWWJpUVNTTTZ4N0gvUUpuQjhtalQxLzlzZWhmS3dRUGk3WnpYRFJyU01LaDRTYU1yVzc2WW9rTjhNeHkwTEVZbjVOQ0FpNktGa0VvYlBDYUhPNkVZdlY2RWVUZW15dEdTbHdEVmZicklxck51VTdNWng1ZjUwOFUwUUVlOG8vU1RsdkJjT0RpenlnQXZKK0FVQTBoY3JmZjh0TWYwU2Q4b0RNQXhqemNOZm80aVY4dU1jeFZaSUY2OEpTVXhQa1liZ3JYOVZpa084Vmcyb09rMFJpZlRPUGcvUEVmQ05OS2w2R2p3dW9zTkpwQ0tMOUhOdkRpcWtObmhGc04yK1RoZ1Y0dG1KMGhuOUpQdVJ6RWg0andPaDRzL2F5WjBiZjlaWmlocUNYVDBkd21ObzZvZDRnSjNuZXhvMWVOTWE3VUo5MHhZVFN1M2dvNHZPS04rallMNkJMMUpTbHF0RlJVUGF5bXRuRklYTEh5TU41QUxsVjByY01hTjVCc2crVjRFYTlsRUltZVcyZ3ZBT3MxT1NTYzNwcDhjeUlZbHE3MEY3WnBVTGtQbTBQQnZ2N25FUjhHai8zczdScXUzc3NFMDJRVmZITXlMZlVIZmZ3WmVhTWZqNmoxWmlYZWNtdGRFNFd2ZkFnbmhPSXVWN2h0U0Y5UkZiVlozTnhIQzk4Nkk3MWhrSlBqTW9BNE9CaXZoSU8rRGxhTHNJbWYxWUVTTnE0VVZENVd5R1pwTEcrMXhXMjgveGhjR3oyZTh0U21vOHFWTDFMbkdNRkx3V013em1hMVpNQmd3SFY4SkNKekcrVEJ6Qzg3TTNTRVl6dlBqWUsreDBkQnhBWEFBSFc2VDdva0Z5U0NRWnZ5TWlmcWxqWmVmTHVTQWRCVmFBTVV4UFBvaTlPUmoxSnVjK3l2MXVaeEpzZTFFTEtnaDJQOUV4UHlweUIvbWdCYUpGOGpXSjdSWXRSKzA0SnBqVzVmdmxYZXhEb0tXMUtmZ2JPYnlrT3NlWUwzT0kxVEF5NnFiSHdZZXUwdDk4dzVrSmUxQmw4RzlHMW0yZWpsWTgwcDl4b1JRL0dTV2lUWSsrMWFBbGNLZ21jRStkOVNlNFhQS3h0ZEV4Q1BLRCtML0s5ZVNaaEgyNTd3NURoWWFTVVg2cFJrVnYxK2VuTkQwcEJQOTd3Q2JrS0hLRUV0NU8rYy9abWRHa29OcWFhUXc2UjFnWXU1WGc1WG83Y1VlUGJlQ0tEMEhHL0loVm1HSU11Njl5UXo3Z1pyV0lyYTNiVVlCNnlGTFhtQmxJUmhTU1BYRmdaTVArUHpkczdpUFphZ3dRRmpYN3IvZy9YN25XM2lVTVRUc3Jlb3hjdzgzbmorWUJQdmFuYVQ4clF1ZUxtQVdNclI1WFJ0SlgxbFRiZzd1dm9wZnVDRWh4Q2VPSG1RNWlJTTMyTUp6cVNUZEVJaEdMU25uMVNVYlBtOWQ2MFRSbTFTM0NhR2FuTTVOSVo0YUVUd3JxaDdrSG9NS1VGNHJqOWpoWmRvbVppTXYyYUk2VzNPUThzbW5VNmFPbWcraElRbnNBZ0V1QytTQ1liWWVrYS9wQWd2Y0xzQlpsMjMrTWs2enlQMG01N1dQWTdLZHBqT0JTcDJ1S1NrQkhjZ2w5Q1Q5YWxQYTdaYkJzejc0UURleFJHS09TZE8xbk9jQVZrQVJOSEIxdVlCSFBCKzBvS1lHeDVGTFI3N01IeEdwNXVzYTFXWm9xSUtRZkNGaXhUZmUySGgyVlBlempzd2JWR3NLMnl5bVNCcEFTdXRxV1RyTkI0MWdYeURlU1lwYUVDNUtKU29aU1k2VmJhK0FnSUNBNXZlR2JzalpYOEhwZ2RhcmVqelF1akIwcHg3dVpsNmpWTklvVlFVOVdjM3FwdlFpS3NNY0dSV1ltS3d1eis4RDhxSkdML0JML0dWVlNTYUlqTlRCdmhvNVFSdDltc01rdS9yZXN0cjBoRUlxNUF2WDRmOWt6aFkyNEZTUnZXVW9wemZMZXpveWhTOGM1UnhFYytpTXh4K29jRGxoemZZekl2eksrakNIT25nOHkzQnEyOUJkWGpjMXJzL2QrTXh5dktsc2YvcGF4dVFMV295Q0RMZGtjM3NRRml1dlgwQ3pZR3VHdTlDd1Zlbyt4NkFDNkxBYzFLMTFqMzVGdytFVUVtdE5sNFpwd0ZqNlZMc2VkeVMyRytrd0IxTUpnZUhLYWoxa3lMUUFpcFFnSFNwenM5YnJkejZIQ1lHdWdTcXJtU3I1MGFURVJHQzVFSFlub3BDTlFKUnZkM2VnQStDYk5ZNVBRUnpTbDBTRDFROW1YT0pWWno2Uk9mNEJqRnBnMkhwdHJtMGdDQVdMZEQyVkJrRVpvQkdzenhZK0tWMU43MXVzMHVab05Obzg4RzlnK1JkaElGekl5aHRmZDBvZWNJam1RYTNGU0RoekFTamVEdWpRK3FLa0pQdEgvcGZXUXJsUGJsdDhQMGlRRExXNDNZSXhtRENOS0tQdmhYWWFFVkdtK1hhZ0gvNHVxWEpRTkZ0QWdQU0xKOSthRnoveVZtbzN6NVRpbDZVaWtMSlRiT29QVFdOb2kyTTllb1BRcGpFUmZ6bVNFNlVCa01KWGU2Sk5lNUIwSlI4aVRqU1Q0SEFlNDk1M0VpMHNVc1dNTFRDVXZXRDg2Mmp6TFNoRGZLUDRRMWFJYlY0MStrTTRZMWVYSXV2NnJsa0FYT3lDWEdnVkVyTVpnOCtqaDZQaWdoaTE5QWxqS09SdHlZN016MzBDZSsyUUhvdlVyWG5tMHBydnBJME5HNnFpOGE4Y0hsZEpadWpzNVdtWU5VWUozVGpKbkpoeVV6U3BrNnJ0VitqUWdWU0RtSTIxNGpkVVNSdWRpOHk0dTB2bjJkWFRmbzZxRjRFU1F5MjhCUmZkNW0veEFLNCtlQmFsbHVaSEw5c3V4b1c1NkViaWR1OEFSa21zRTU0REF2VmRXdXlEUkZpZWdQY0NzanBqZE1BQS9VQTVWU0RhYXlsSHkrbWhaTzN5MkNZMjBXT2dlNDNZbUswVTNISDBrZDJPZER6SzA0TThqNVVUV1JXZVZaWTJ4T0RFUlk1UFcvTytBbVhvTFJma1ZkZ3ZVQWhpeE9qRDFkeURmb2dqT1VxZm4xWnE2dFBHTTN6SEpBNSsxT0QrZlRveUMvSHhUaG1DRmFLcmtwVTIrTHRja1dhY1NuNm83N3RBYk0yaHZBczI1Qzk4QWMvZ3o1MExzbEhEejEvdzhqaFljQlc4U1l0OER1dW1DOHZXeVE5R0ZOeDVqR05QeW5KOGJKbGNRQkRyMzJvcEt6NnRqRndjY295NHJPdlE1ckhibkIyRjg3U2ViVzVNSUxuZFFPekRNVmpZMEpGaFlKckNaekxFR2Q0Zm12ZWRrQ3dCTG9UaUZyVlRlZ3VUUmxJL0orblNqaCtvUmlrZG9RVDhMcWlHeFVDcGZSMkdYYlpHeVd4dWRZUERPM3hyVmg5Zm03YklKSU9EY3NkS1gwRzdZVXg2UTBrS25QTE1xWlpYdnJRLzJrUHVFeWcxTjIyZjU5MVhMQkQ5QXRjSlNTdGs4Y1RpemM3TGZuYU9NUGlYY280Nk5VYkZwTnJMUEthMUh5MFlhZXlEM1BlaXRSM2pEMkFwT09hQ3cySUw3bEZNTituVjlha09rMFlZQmVTMW1TOHE0eEVFQzNSNzRQUktzaWU5U3dWV0VENWY1a2x4dnRYOHYwdmZWb0QyVHViRW1Qd0l2cWN5enMrdzY5K3Q1ZkRNYWgxemxEOUR1aDF1SjZBUkI3RlIxRTMybDBseFl2Mkd0Yk9lVDFrODVLcGxSR2FseFRRWXpncVBsaW5RNjFuaUo5L0tZUWZnenV4ckNPSVN0aXhFSkZRcjk1eC9EaWplYUNXZWVXNjlFbjdmQ2NWUEJ0TGNHYk1odmRKOUx5UGNsRVJ1S3VkMGlGbTdzMjdGZm5ROERkN21IcVdyb2xsU2NRRXdJVGpxL1FBTEVsNVJvU2s0MDdJM2tmbGQ0UnpRdnljOXhhd0RSTzhLRHJVc2ZCVWtZdjl6VGJsNld0eDhNSzNQa21Sbm9oMTJJRU1GS1o3MmY2Vk9hOWJIbkNEbk5NazRsUkRCUWFMY0N2VnorMkgzN0JnQ09yTitvVGwwN1NmakxGUlFDQTN3TzBaVjVoemxiZkZZMlJYc2NJTU1FcmRXdllSVWkxSVZVNzZNR0FabzVEN21RcUFwOEt6MXNubzJCRWZjVmIxYmhjcmVZMFZlVkFFNk9odlNhOWVGbnZ2YXlBdHgzMWg0VzQ0OFpDb1JKKzUvOFV0Tjh4WXNhWWI3YkIwdWxqVEx6akpwc0NOT0s5VnoveGJWbVd2N1lBRHhLRlFzdGdZRHU1aktaL1U1aW0wSUFPVU50UjFOQk13YUpwYmw0OE1WYXBaVXhXWlU1Sm51M0ZDVU83NjYvTE84cmVnQi9wdG5zV3c0Y3FjSmNvcFEzNFlHWHVyTkRwTG9NTEpKVk03Ri9PREh5cm9ySjBFcGNPTEdSY2xjNmRIUDNFUURSeEFjempja3hrRlJMQUF1dXNYbEsyZ25tckFDTDdwNkJTM09nTjJCWUZFbG0wS1BuckZrd3c4Y3lLeWoyZlRmdHJDeDdVQlNpdERQaDY1M3pmT0VHS1Vack4yanJmd1hNdHBwMGdLYzB2bk1wSGpaTTVIYzlTUis1VUhXcUFCZ3psU3poUHBMOUkzMEFTRUd0OWpVU1dEa2F3azk0WHZKZkhzSGRURHF3b0ZJT25Jdmx2RzcwM1lBUy9DK0NmeGtCNUFkZ2lac284UXIzSXBRdEJrY1V5aDVSRDRHbm9lRjhnZWw4RFZwSmZHL29kcDZDREVLVTlld3pYUG5XN21Hb0FOR1R0ck1PVkZXV0ROVGVaa1U1eTZwQ2krZjZseUhaZWlqNmd5REtjWGsrKzV3c1FVSDZpOXhOWk5EZVpyendOYkl6WkhEeUp2NFgzc2hYNWtpc09xK1BEc1JwUU1CYmxzTkJVRjY2Ylg3bW93U09xZFdOSm5wOVNYTFhHMWZxSC91U2orOWJiV1prMFdmTUVtdFpDZUlUOVFyTGp2TjIwcWVkT3BUR01KM05mUTNjczBUYVRtYW1pMFZZYWM0ejE0a2tBc1g2WTFvU2NNdEFxYVExd1p1bXI2QnRkWThaNklKOUhDRENFZDNGbTZhajNyY0NxczZDRitMb2hwMmFkS3FXUlcxdm9oQ1NoaElqLzhSTCt3UlJFUFlpemdzdmJxZXR4WEtXTVNKYVdVa3BWanlEc0FMVURIUWRTb3BvTStGaGFFTkRnRkZ1SlZZUGtpOGtvVEFoSlY4QmY0MzhLbHVFNDJLQ2xpTnNUQTR6aHNnTTBYQmZRaFJpMmlha01jZEsrS1hIS3Z0cWJvUEVKejFnWUZaejVIdFo0WlR0bEFTRE0wNE80WnBjSE9uWVh6NHcva1JqM0xHWWN4RWowT2hGeVcyYm5HYlZWM1ZKdXFraFJJMnBPM2pVeUxFTTdyQnVlRVYvMjhkWkM5RVhsY2d3TytZa1NQMVBhd1JNaUVmM1V4Tnd6Tll1K3E1WlV5SkxsNVlYSElQZ1FmZVNobk10NEFLcnhyeXZaT3Y5aEdNek42Zm43KzZ5WUtFVHFLS3g5UWhXbDUxY0xXOEVITXJxSGc5NWZjSEpkTHUzdWRaZERzZCtFZndoQWo3MXpxSVdpYVZ5VmZhdVlxZ2Y5TTRyOE9jUDZPbldKUjBHbE10SlF2ZlJxcUM3QlBzdzdibFZ2TlNuTlBzNFdYdXdwaXQwT0R0alpNTmc1dmZQTEhWS0RzRWdvMmVMQ05GNXA0eXpwbUxBektuWWIraEp3VHozZUJXcjk3ellBY2lCTFNjbU90K2k5ZGlpV1Uwa0tHdnJMRkNjcTNVVDI5OHl1cU85ek1tWVliVVI0WjFqWEVmWmlaRHhGUDR6Qk45d1Vlb0lvV1RaQTF6S0lXaWpGaVB1eEMvZC9MMGZPRFJsUUhOazkzOVpQcjlsVnQ5aTZUNnlPbkg4UHRTZjRmWHZpeGM5ZnpMNzJLVVBpYzltazh0b1Z0Z3RWNUNVTVg3M3g4anhSV2I1LzAwS2xSb0s5S29sQ1B4YjNDMXJzK2xoN01DS0VQZWZBT1ZlNkl3SEk5dFZLdUZVVjBhenptWFZGMWFxK1d0azY1U0NwaHlKWGRpYVMwNEwreFZrcWNGQ2VocGxFcFRlemRiTjRjbm1SNE8zYUNwVmJvYlY5V3pnZzlpWFFXMlRpd1FuaTlGd2taUE5aTTZqUS90L2owZXNpS2VxcXhnSnREWjVvSmVqeHI0YUxvTTF2M1RQTjZISXFMeStndlB1Wk5BR3hUL0w4cXVPRDBxdXlOa3NNZGlTWisrS0N4MzdrS1V5R2RiODExc1FwbzR6cTZOeVJSaklUVUJUTDRqeHlLR2JUbjFkYnZoMmF0RU5vRmMwQVVqMGlMWlo5U05NVHhOdHJ2Tkxsci9KQ2xSbHhIbTJXWTUrWlZEQXhMazlic1VtM1A0TysrY0pkdG5DWnRicVhZYitQTk5oN05xUkI3dzVFeTR5L240R3lPa0paZytEQlNPdjlYR3E5ak5tYWd3VjVaUzZVM2c2bnZsSUYyMjhGVDB5eUZucHJ0cFpoYkNGTG9PT2U1ZmR4VkIvVWRjTkRQdllFdjRVbnhkT3ZLSXYveDJNMklEZjY4YXZySmozcTJxUThFbW1uc25aVEFGaXdGSmh0N3YyMkt6Nk1mdkprR3l6eEJzRWlvc25naWNsdW9ldzB5UElvLytoSWIxbG9nenlzaFcwd2VsLzBGU0ZHQUNDb2lPMHVqL0hBSFd5ZUhqUS9xVnRNUlU3UjJJZjI0NlZCdU0wM3ZuR3ZtQTFGd2Z1NDBLd1Y3UnhjdGtQUjVFaVF5NnFRMFZ5YWwzK0tjS3NtL1JiRE9PczAyT0NIU3pjM0JOOElNTXVVQkhKZ05LTVRJbkJuWXhPOElVL011S0EzbHpmVUJsb3BaeDAzdnNnZGU3WEtEb1BKSGlSdlR4SFZGYjRkdFRscFN2dFpHQTNLcmRCblA0MTJaekNtM1o2Z3AyczhNaFFkaUU4amlMbE1sQU9LbGJ4SlNaZWJ5aEhzd2k1UDdwVlpBSEs0M2hwSzUvZjZ2b1FLUEZaa2U1M1hUQjhPU3hUTEpyVXBCVTR0cG1NcHFNWG83MkZVWkp2cEhLNzBTaTVnN2szT29IKzE4ck9iWVBuT0FGMmhhRFN0Titnb1pBcGxYbm40bEh6MGRTVjdLTE1xNlAwalV2RlIwWWlLVmRNV2tZK3NqSzdVaTJGWnprUG9RQld2TkFQWUNJZGJQRUl0OVN1Y3ozSU1EQkJIemJ2Tm1wWWQrY2Q1OExJODg4Zkg5R2FoaTNJUnhia05KYitUTzZ0WjZVQ1hvR1RsVmFhUHNFUWh0SThva0N4QWNVeXpFUlhEYXg4TDNnTEtiNURlNndubi91S2JvTUpHM1dkS2dXVXNpUzVsdHduSE9OODZkbUpCTU5EdzZRZGQ4RUV3dVhqS3FJZDU5VUs2MVoxdEgzckpSWTkyb2s5SEtmNEVlOHgrWncrMDNjY2FkMHFjeXhkaUVLQVpxYm9kR3RocDhRMmFNbFQ0THpYVjd1RWkzd2M4UkFPSldneExzRldMV1FaRG9HQkJmZ3QwQ3dZZ0U2R1pvR09YaDhFdVJFT3ZyeFJTYWNCZTBPTmNKQ2VHQjI2c1QxUjY4TmxNdTJFZEVoZzZ5U3ExME0veXNYcHA0dmJobEFBQy9kck84Sm5ROUFINjdvQ2FyOEdncTlOSm1vaDdRaW52Y2ZqS1JFK01kN0xSNVRPVFM1KzB0bVo2S2dGR0toYlJCeFp2OFVxemhvVlF2c1dWazkxR2ZIWGRUQXJRWEhIWEkxcmdCYUU0c0pRRU02MXh4Mm1qY3dEdlhTQnIvaVdYeTVnTkFJeGd0WUZjY0YwSEMycXZqMmk5T2hlVXNOeW1YZFpXSFZBMldKclFPQ04vVWFzWS9lUXQwOU9lWXYxT0YrU2ZLdmNLM3o2eDh2dEhZamduS28xYXhHMmNVS1VsWHg2aHdSMGpaenl6NWFlbmxpQW9sTFltMkgzQWtMWFZFNWU0dVdkKzRKb21QZllyRkVzamRyYlRFZm1LaStXeWJGVHorTkI0Y2hVQUV5K0xFa0pRT3lMenFHMFMydTNyMCs3Rk1kSXZDTmw1UTY3NWlDcWo0ZlVPNzZrUnVBdzNaV0J1Y1c0ZkhNRjIvaEtpM1FwZ3pST3BGOUFiU0oyOWVtd2RMNTJ1WWJIdnlyQjQ1Z2xEd0x0L1RYTEc3NEdiVlpwZVM2Nys3dDJTQnhydEIwUDBhc0RSOUdLODFyNlhsdWRETnNadEY1S0FZWnROUVpyTk9vbno4M2EzTUEyeVNDUWlCb1BVVlFRQUFNUDJLam12ZFhnRjliZEFqZTRXbmxXQ1pETzUyTTNtQ0t5eW1hSzJTdEpCWmpxdTlPYWJKTFVRRmF0VThHN1REZ2hOdndsYzJuZzVBSXdsSEEwUktXWHZtallwcHY4Zks4TVA5ZE95cWxHMWpPcmY3ZWRNTWYxaWdZdUtMaU9IZExaQjNxZHpIRFNoWWZwRDc3dzFYZFBoOWVGSUw5MkRjckJ2M0JrMDNWdnY3V0FiVXVPSzVENWM4ZEFHMWRZS1pGeEQwNjAra1V0NHgzR0dCMUlmMUtBS05xcy9Vc0JHY3FoMXYwdWdTTE01SGx3N1duUW44ZXd5OW1IZnNaZEkrOTRZSlgwZ2lwNjBrcUNEMU9CcnNBT2pJeGVwRzlZNGFjcFlLdW1POWlMY2YyL0xRenJGakVXa3pBM3g3VmZ3MkNnMGtiOXZzLzJQN0ZEUnZSV29uMTN1dDJ3cjViK1ZBaU1BcnJNWEFsdGxDWWgzalNtZUhtWHRoOXpwM2I2N0ZCc2d5aHV6YS9Ua21PbjlsN29ELzlrb3FHMTF4dVJjalVlWk5GNG5LZDQ2OVNPTTVHeFc0Y1hiOTk5dnNoV1MvdGsrcmdLM1RleElBQkZjd0ZuRzZGMktyZVRQeFgyakZEL2dRTmV6RjBFY1Z2eEtrcmJXTEJyVm9sUkFibkQzeXRkeE9ibUg0RWdJRGo1TXBMbVhSS2c0OXM3VjZnT2xLblB5UWhkRm5COFgrU3gxRzh2Ui9OdzI2ZnZQY0ZBVVVOOVZVYnBtSzh5RVpZdjNTQUNBUEdvSzMxUFMvcmRUV3ZUclROM0w4VVc5Sks3N1BSdVNCS1YrSVN6R0kzN1RJZ01tTnZGWnJlMGZaYkRIaWFiamNuTWI5Vk1uL20zOHRORkFxL3Z4R2N0Q0tyajFPRkxRd3o1MmZGMFFWL3UwUWQzdVlEWFp5NTZ6TEtIOEpDOHIrQXNQeE1QUUwxVmc1TjJRc3ZrbzFIWUk0OVFWQVZacDJhTzFhWmVkZG9jenlIK0F3RTZDNW54UlRYUGhmd1ZTbmVwZzg0OWx1K1dxMjBRdzRCb2F0dERTNWQ1NG5lenhrU3FtQllHeG5iYWF1NzdzSjZ4VlRRYThKdGFEQitrTmR1ZlVUcmkzVE95elBOWkdNUCtOTmM3MU8rbGlqK0g3eVM5MmhxTEQ4TWlRbEFqajVhM0hIT3FZZ2I3blh1N2tOdG43NmRMZENLTEZJcEpVdXdQdWJOaEU4blVIU3pjRHFhMmpwakd0V2t6eW81QmhCanFoWjc2b2FFT29IekRXbmZMbloxT2VKcDBPcytQVExiWkNoZnAyTU1hZW9RSjRIQVgvOGFlbGw5MDdpeHI1SW5xZ1dLSTVzOFEzek53TzNnNWh0VWlRejNHOGQ4ZTlPNU52YTVDekNNQXVwL1NweXI5QTRTMUNCQnZJb3dtM3o5cFkrSk4rYkdkKzZLSmFIWnJBdmt5bjByL3RlM3cwVEJtRXRyOVYzSTljcldvRWQzL1g5aUZYdXVHd3c3blNjdFFWaFNZRE1RYzMzbFp5ZlR3VjVuUWxzVWRNSmV1TjEraTR5aEFzWmN2VUtPUGxadDljNEsrN1NMSStBemRBWmZlWHBLZWl5dkEyWHFscmxJWVdnTGV3cWtwOHkzVi9pcVEwZTZMNk55N2hBSnIxZHdzSjBkUmdUNndsWVJ1WndHRjFlRURHeDhmcU5nSGVDMmc0eGlGUkwxek0wRkpQWHB0Vm9pV2Y3RU9uKzR5RlFCc2ZGdDZpNm16MnlCWU1Dd2RmeHg3cTl4aHNEL2RPRUJEWFhubS96ZUR2Y0s4azFqM1JrSlZpUlRwTUM4b0plKy90cmVtWkRKY25SckZTSzNsR0sreDRhbnZmY25aL0l0NXJNN1NncTlvenJNZ0hsREZkUGFJT2RQTU9Hc2xUd2l3TWZ5WnlaZ1Y4VXdwQ05RVUoxck5JbFBSaTJCb2ZETnh5MFJWYzl1S0ZmMlAzWVZLMzViVEdlQWlINjd6bVZXNVFEWm9ydlBXenF4bUJOZmJiTDQzc3ZpZEhib1JFa01qNUhuVWRobzVFKzdYVVM2MHlZdkxORHE5RGZqTjYyVGhTMmp4ZWZ5YWx1UnpJWFlTRHpPaHdWeXpuZUhtd0J3L0QxR1E4VUpNa1QvSWhTY2l1U202SVJ1SlU5MWdCY2lNZkVFU1hiZ0tmWk9hY1ZBUTg4SytYRjRGYW04RGluS2JhdGE2cFZNMGtmK3lCd1h1a0JQWG1rS1gyK0I5Q3kwbit0dG1QR3ZDcWE4SHhsWjNoS3k0N2ZIUHBwNjhHa3pjdURVWi9EdUUvZFdNQ2VCQVBENnZPa0g3Umk4Qy9wWVN4bnlCN1dHOFpHamZaUTJvOVMxY0VLdXNzWGlGK0VmOG1leFdmcXJ0U3JIZGdLNmlyTE9nT25PaVhUcEpQaWNrRU5US2Fla2E0V2ZIdzREVlNDOVh3Vjd4eW1KaXI5N004a3UvWUF3MUtQNTFoM2tpZmZEbWQzRTB3cUNacXNGTk91d1M0emFJS3RtZkdocjVKdzV2OVdkcUxqWnF3bzEyWkFROWZrZGdhU3pWSWtlTVRGeXNuRWpqQUEyZ3lkZSt4dkVuOVg3UkRGUDVPclFGaGNVQWdNSlBIZW5iOUk1Qytab3IwdXFSdGNiNHBUSEhsYWdVUStsbXIwNDBoWVNiL3NMOHdVS2tTOUEzeUlWNUQ3ajUzRDNDYWNyT0RiekYvZmF6Y1U0R3EzL0d4SDRIMldPZ29tZ1ZwTnhmZ1RDa1Fpc0lnb0pMYXRKUjloS1FURUxlaUFzK1JjaHROaEFTMjJoRWdFdXpQWnlWNTBtVzhGVk05ZWlKRGt1L093YklweWc1RVI2SU5WYUh6emdpN2VnZ2RabFFnSHBtdDA5WVA4OGZEZ01GVmphOHNucElLck1ZbDQ1M3g2R3NFQUZJMCswYlFCSjdUengvVkZZTE9KSDJtTUVQVmZmY0Q2clA0QW5GSzBPQ2pOcEx0UDBiSElUb1Vndjd4aU5iRXQ3R0x1UG1ScjVYRXo3ZWFVWFR2VlBIZVh0Sk0vOTd4OERnNVlzSDVSOWNCa2VVeWsyY0R2dzlOSmlQN0pXazVIcXBmUGRFV1Q5eVEwUlRaRzdaZG9adDNhRitCOFpNSnVNb3hvOHdHNkdrVDVjRFNTdlluUmpqdzVSZFFYaWYzaTVLbDF0NVc5dktWRzRHczdzaTl4aFhZbTJyZ3pmZ2hDT1RieExYelFERHdXZktIK3F6TUhZTWpRejM1ZXVCTjYyWnU1SXIrTVdGeWZ4QUQrSTB0VGFxendCakdEakYyd0tmbHhGWWRyRkxFR3FKY0lsM1pqVHRnSjRwMktoRmFFWkV6N1BCQUJhM0kyQXluR0xPQ0ZPRDRjbGdrWm43UytDVlpCaUYrODE0MTcyT3JNWVVSRHN5SVl2Y1Y3YnYwdnpFSEExcFNtdnVmY2xjQTFBU1NZcjlSOUViSFE3MEs1WFRZaHk1bWJWVmQwMHIrem1yeFByeGx3WjlITXZOS1NQU2IwREVZYldLd3AreDRQT25OdFl3dUdMQm9HcGE5S2xHTWxYVjJVaSs2QXNydjdIUWlaRnlJakIyb08zcW1sclhWbHcrQ0oyRmdiL0J4b0NmakdEbkZvUFJwUEo5QVlFdnl2SGFBTTNUb1Y5RGZnNHZ1ZEE0cnB4VGJBZm50THJsU2dUbXVVYUt6QzVVNWg5YTRacnptK21ndC9jMXUyUDJEOTYvb0tWQ0xZZ256QTRhanFFZjBMOEZRUUtsamNuaFY3WDJqWnNiVUlBVzhSM2VBRktKMDZqekY2QjFicmFRZWRZRUd2Ylo2OWk4aVJIY0xBWFNzRzI0ZWhRcm91V1ZpRTlRamU4dStrN0I3N1c0U0JJSGpmbytnQ0ViQWFJdjlTelNmU2hTNVN1VmNYRHpLZmlRV1ViT1JmTjhLZ2E4Mlo0RlVkckwxVUxNM251aEQyVXptcjdxTkJPNThEbWJuTDRQU2hFT0d6Y0NVTE9CSXg0Q255ZFIraThtcVBDUjMxUkVRWVdITldWRjA0KzFUNC9sOVd4N1p0T0EvUXZxeGhMaUE4YmptdzFKUlFuWFV6Q1pVSFRHSE0yakdLY0JlUFVIb0Q1UjNMWTJBNHNPSk02YTZNdndPM0lWOHRXbVlkSGI3RzVJb004NVRrQmdOVWRBU3U2S0VLVjRYa3JVR2ptZGVTaGRmMWF0aHhmQ1BlY1lIK1prbE5jZ1JSdkdyZG84MndWUUJSa25menNwSUEyeGE5NXJOQW91VUxibGoxeFlvYTM2Q1RIMEl5NmV4aFI1Q0xXNlkvOVdpMzdkTGt2ZitLUnllUTVDS0ZqZmx1Y1ZxL0lMNjVrb0J5N1g3RzQzakNta3phUHBra2ozNTRxU1NXV1RteCt2dDVuY1BwbEF0ZmFnb1VwRm1hK1JPU1l6a0VSdUNJdWwvSnpHZE1OcGpDT2pLWlFFUno2d2JhV2tFeHUvSVZUdTF4WXlTMS9MQ29zdUZhcmlkUWprMXZIUmJCd2V1aWtSU295RnNqQlEzOWhkMEhIeDkrSkpXckx0STI5NTVRa1BOdzU2T0RINHBuYm1NQ0J5Uis0cHc5cDVGOFlnZytGRllYUlYzVjhlb3ZURWwrWGdzSUhnbDZpQ1JrVjg4NTFzdWUxRmU0WVpLYmU0eHc3Q3lZZ0NzYjRSNzZSTitOK09wYkM5TWs5NHVRS0JSUXN5Z2JnUm9VcllLYVlhNnh5WDJ4VDZMODZURDliZS8xaFRReFdobEhqbFhOUVAzamYvY3lyb3hkbzQ1MU5DMnF0VVA3N2pOMkZPVzVQdisybG0xcDdPMTk3Tkd5eGVBd2VhVmNZL0FLSlRyWS9uVnVZY2hzS3dpZEdGNkxCVEtJcDUwSWwvd2lXTmNTSzhCREdxR3JlUTcwckV0cjRDamJmcXVEaDc3YjRRbXdoajhWQ0VKTU8vMUVEcnpTU1ZqWmgvZnBwTWtIUXJOOTc5ekp5OUY3SVdWVEdKNk9SU01rTUlTSzRKcDk2L0lVRE0xVnVrNGhZSFd2Smc5bUxuKzhndm52aGt2aFVrZGtPNkpTNVdYY0c3RWtvU3lyRjIrVDZlb3ZqMXNIM3NtUEorK3VPejlRMmRuVFlDTStDdjVLZHAvbUlmN2dvVnBlc0V4NmNETFlIelhseUdHZmNYbk4wdjBjMCtmaWE4aXl0ZGhVQjkxVkx4TlI4cjkweU90MngvQmdtWXVHVmx4MUtFWEd1MGFEaVh5bklUYk5wT0xQOVBTKzkwWGp0NktLd1B3MnpBRFZ1Y1NoR2daem84VCtpekNsNE5hWjMzU2VpM0Rxei9yOS85YTBuMlluRmJCSDNZYVluSFF0dTgyM3psYzZqOFhzSUxEK0ErdlNwWURhWXFSRGpnejNlTzM3djZzYitLQWY3ME9yZmtYalZhWk51YjEzYWZvM2N0SjZmckYxMVdtTDAyaHVpUno4SlN0RzAwNldLVGE3WmZ0Rm41UzJtQ2N0eDNHem0wUk1TUGpIY0FGVTZsZzk3UzNwaGtvRUxXQjZTeGxHalphdW5ybGZJaTFFOWl1WGd5b1dwLzM1d3prUlZWS0JBTlVHM2VsOWlWR1dVSU9vYVhYcGJlUG1nZG1FbEwzRVlkTjRTbkh5SUdZS3RzWEVCa3QxaTFuUDlzUktMMlcza3NvUVFDSllZTVpoUTZ3TGhUYmNxWlFGeDRBUkVLK3dDQ1RWNC9QSU9RQTBKL1pLU2xrVHY1S0JNOE1qRTkxRTB3ZnpyTytYMEw2cnBmUVhrWkw5ajBvRE91Nkg5UkpLQ2VNSkhLK3FIdWhkb0NPZ0JDdTFFQVV2TUkwOWxEOFhiVEcvVXdxR3Mwb3BtLzFEc0RkOHVYQjVOWkVZS1VhejNPb0ZsUzg2M2NnUlFHV2h5RE5KNFd6ZS8xYlIyV0VScnNaalpMc1JUR3BUWXV4NmRzMnpmQXpuazVxL1MyQ0dZMThYcFdESThYUDJ6OHkxSFNteVAvVU1VWjdXNVJpSFQxbkR3WDVPYnFKTXVyZzVLRVpiMHYyaFR2YU81YzRvTlN5QWN5MkdRaHVOMG1xQ3NnYVZVK3hyR0hxQjRJVGh6dkNMMEY5MWlZRngyQ0Q3Tk9ZNGFOYXlUSklDZ1FXUHJHS2xPTGxPdGVVemJhVndFYzRsM0xqdDhlbnhveTBodW5tV1VOcGZwdFlFek5oTHdmWUNxYkpKUzJlMGtRUlZmODl3a1Vscm85NS9ZYS90NkI5Y3NOcEdld1lTWUttM2ttZkhvZExaMGtNVlRCMlZaY2NIU1pKbnA1OWx2c2lldlpKZ2M0YlJrVjVDWE9sU1B1QmFCaUVjelhoREd0THZ1bkJXL2I5a0xGWWdkWVl4cnVPYTI1Ym1IWTNWYTltZVcvMnY2QWJZcWFKQXdXM2ZyRlBsbWkzUnBud3o5bzEzNTBFUmhBODZhbmFUMkFkOHdmMCtTaW9kWjRNdWNyQk1iY09ZdjZRKysxMDBDN0NKZUNSaFNCRm1QNFlQcHJ6YVlTeVlhVzMvSFFIdlZlc1lOL01ib3RvTXBRSFQzRlNhbi93dVNPT2N2clNySkg4a2tadldhclljTnZZSG1HUEV1c20rdlFtMkpmSkJrc3JROUJQMVFvY0JBZTlRcFZITFJ3U0ZDbU9HbkFpNzZiTlRaRlBzTzVzNHpEMkIzZC9IeFJGcURObnhOZG5pT2c4aUhsc0sxNVlCaWx6cmU1bDVQUld2WnA4S3ZLZXFNNHZDVnR6Z0lGTlR2ejZsblBlT3loWWhXTVVzWFNNK1k2TVNaUWxxOG83b3BIOE1wWm9lYzhzT0VEVVdHV3hheFRaL0p6ZmY1TjJLS05adXhOZlQyMHVNdzFpQnVoQ2d0enVHZ3Bjc3pqYWswdFU2RitmdVQyZVJTNG1MUG00ZlZOVzltS1FMUStNSzVQSE1UQXhRMGpBQWoybWpnUjNOSXFoMFVZNEFEb2JNbDYwOTVqSU5LRHVLRjY4WmFPQ1VRTjVqWXVuY2R2SWwyWktTQmM4ODc1OVVJOElhWXNWUk5GSDJRemg5WVNjbWt1ZkFybGhRRVcxekNIeW1rWEFaQjk0WUlMK1owelNpL2dJbEpwOGdNcXRHaXZ4bUdUSCtIRHRxOVgyNVQ5OHBzbHR4NGZtNko5M3FyWlhJcnJhTDJoRXZiTTloSWkyWGErVlhacWhtMVVJVkdDdHMrOXpsRXplQmI4WXhqaENDVlJZZUdCaGZaYjJjMHBhb2d2aE5IMGIzRVB6OWcvMnFGaXZTRXdZdDY3aGNRdTBkRkdSYmlUSnljRUZYaml4Y3dZTHYzblEyeEE2SzlFdkkyRURobUkyZGxRajN0Zm1DSE5QdlQzY2p0R2RZVWtxNVVCYVBSZ29EbWh3K1p5VWRPRjF5WmhteHA4bWJnWi9WYkRCc21tS2ErMFdxZTF5NVMxNTFMekVJNHBrL1kzNkx0RWk5WE5ZWVdMT2tmaVBxTFkrRmg5VmVaaE9CdHFTOXo2WTdKOGc4RG5aT2piK3N1eWVsR2RJc3ZzQytuMXB6Qis2bmd3MG92blRXWi9XaXBMM05nb214b0EvdWdmRnFTRS81QnBVZ0QzenhlU3ZCUjB1T2NSWExBSHAzNkZHTTVSUUVsSkFFbXlLUmt3b2pnbVVXKzlUenJIMzZWWWhSb3AvcFBsaXQxWG5uR1VERGFaKzhxdTUvNDdtUS9jSnJVSFpyenh1T1JCUmJiODV6Wmx5QVVWZDdjVGdTNUJITXY0aWRCbVdCWm8xZFdTaW9kcm02VXE2RnJKa3FGTkRQeU5Zd1lkeDMyUmErT21jcFhuLzhrVEUzdHB1VjJEd2JhRmxwbGUxZmtCQy8yZFJhT1NSaUJZUFFMQ3ovVWZjaXpoUTlXUm5JS0s1czRjV3IvZ01ld2h1aFByZ2ZGYkdKY3NpUU1BNC82NTR4UzdXYWo0aHh0UzB6cUlJYk5VZjBUbWdZdWVSUVBhSGdxRk5RWlh5SzkvdHV6MWJWUm1WMS94cUxtNFFVYkh3eEtoSVR3TlduVVNJQXVvYlBaSmkxVlNMa1c0T25kSXJUWHFaSzBXMUtLaDArckZyZjVFVW00K1RvdnFuMmYwMmJuVVp0ZEoyVkxnU1R5eFdseUJHTjN0NE9SbW43bmVjMTF5VDI5bzZTWXp2c01MUVZGN0dOQXMvYzRWMElGV3ZEMkFIOVlSS1Z0dDlLME5qcGZLWXRlYXJ0NjhiVk9VZFpvV0JXMFNHdFN6Z2U5QjgyZCtEamoycHlqcUZwSDJxQTR2QnlEdGEvcGNPaW95R09uczR2Q1VPM2dITVpQZFJZZUo0a2k2ZHVuU0xSMWhLU2Y0SzBOYlo5SXZFU05wa3hEM0pGbEhXZEoxT1hFNFJWbEt1OGZvcTVENll3Um8zWXdiNitrckM5amtmV3dyUjM1ZXo3U1EvczlHQTlHOW5McGNaaFROSFh6T2RHY0UwNlJkM1hMcS9wRStSbHBMQmZzZkxrODZuK3UzMVlhTm9mNmZqVm83cGdGb0xxbGVXRHFxei9jaUlyMmp2RVNIcUw4WGUwU0FaMG81WkxtSjhzSjRtQjloMURwVlpmaUJnTy9YcG5KMVljeHc4NEIwcU9obUY4a05kVlRKMjBMOXk0aG4yTXZFd0VoSTliOVhOeVdXZG1jQmp0ZXhDWld3Z2t0bENRcnlYcklEUWlmaUFQN042dlplYlhRY0JZcmw0a1pDTEZVZjVzK0FjQkRMUng1eG84VG9scmgzKzBwaUhxV2svazdLbmNFZnU1Kyt6Unp5WWt5WVIxTHZMRHc1S2ZpMXQyWS9EZkY4RlBEdHdXci9CT1ArOWZ3d0owV3pkSk5acUdTenN5RTZKZFNvSEZNOXpIcWJQbERETHljZTh2UmlnU0RYd1pJbjBJekU0azkxVkFUYS9pRVNQcnp2SXlTcVAzMmhHMjQ5M3dTY2hsaWl2SWhIZTh0VFVUVndJazdoTkxBRTc1QTlBNGRJYnFCcGI4QnVMNzdGcFhrUkFJRXdWR3VVdXVEcDNHVjJNQ3Bob05aWC9QaXRib0ovVHhDVngwUWVpUXA4bHVKRzgvSU4wTlA0U0RBakw3dk1MMUt6YXpzVENxV2FvUEtycFRLeHErVzlSTDBVaDBsWWFaZ0FkWHhESFNqUDlMVkVIVTgvYTB2UktxdGEyTDYxcklUQ0VCL0FwVWwzd2JxbU1hRk9xdE9kRThrYnM0UkhDS3JVNmxHQnpCd1MvS2gxbzBFRm16L1JHQktsRjR1UlZ0RW03akxXQVRZYlQ0SUlRSkxwZkVqbmIrOWRGcUNuMVc1dXpEYSt1NFRaZmsvN3VBZk5GMXJwYTBWV2ZPcVRuamxIMEtDVW5UdVhuLzlpT1FQUGZvczVweC9qL1dpdzdrSC9BK0VtVFRIemxocnRTZkxncEZOK243ZklNSStMVFB3dkNhOXphbWlhYXZNWkZiU1JFM1E4dDZhSktyb2JQZmFnVnRUcTFyczBPdkhYTjAzN1NBS0Zsc1NWSTErRVllUnR0WXNJU1hYTVVIUUNzVDYyRzcxMlRNUEMxZ21SZjhxUUFhK0dlSncwRnptM0RrUnRVVEhZTm9DRy8wWU1TMmFhMzlOVjJtS1NyTC9JVHRmbXArY3pWNG1jNDZHN0IzSmlvanBlYWI4L3dMbUpkSVNiMUFZT0kyRG1XSHBPSnJ2Z01zYnJDeUxWeTEzWm9OaHlTbWtJaWZUUTk5NlBEY1B4SUdRT2ZWOXF3QVcwOStadExxSmZ1ZWZaQW85MG9aYngrMlkwTFZ2Wmdwc1pJb2lXZUs2OW9FdnlWMTg3NDVOdXBWcjFtNkh6bWgzdGtURzNTT0EzMGtGTVJNYTljc2xoZVNuK3YzSDBtS1o3OXFkSElDblNxempHelRjY05kYm1hL3FsdU1ZcFBZMml2VWRMYTREa1hlOElnRzd6M1dvcklzVmhpS25sUGFPeHhpc0N3anhua2U0V0ZTcVQycnQ2Vy9sdEp2QzNTcElnT1VETUpyWkhoUWRReVg0SGJ0VzhWTnVTdENrZmVjQkRjRkd1WFVCb1AwdVpDZzd2UEhXZFZiNGhSVW4zQnpKckFlV2xod0FqSnFIZGhVWlM4UlJpM2xuY2w2NUZlSjQ1NytBZ2JYSC9VZTJyL3VscDlQbXdMNDM3YjdVUU5VU25LTSt5UStMd29NMnp4dTlMKzVnMlEzakNmdzR4VmNVQ01pRm91QmdHQUMxNUR6U1NmQWtSUlR1ZW1oRWgvRGM1RlUwa3RoWTl1aHI5a0N2cWhOUTJFUDFpemxVZUhONzluRmlnckdwbjF3eHIvSldoa2pONnRHS2kyaG91d1FyTnVwWSt2cW9NZnJ2b0JtU2FVSWlIZHBna0ZjN3ZEQWJGdGhyRUlqUW5FVEN0OFhZc1dQYityNVdzaGJYbFgxZUoxV2pQeXJJcXI5bm95bmpHUUFTYTJuQTZyRkdtMnJLRWxwRWhBakN2Y2Job0cxQk55NmlzY0JUdC9QZnE3dGNjNVBFQlQ0bXBLaEpmMTJuZXZBRmUzUEx0eWhyYUc2NnN5NDZzdzNkVXJlVG9qalhFc2laeXUwbEF3aXFsREtjTDRQbXhwNnV6Ym1UWTU0Z2ZoeCtBSkU2bjdhMmFEU3Zoa0JrTjUybFF0OWxlN3ZqcHE3MHptN3JteUJ6SzA4SlRJa0ZoSEZXOW1LM0JKRWcwQ0hvOVd5Rk4wVTloY3hRdGMwLy9Pc05HMmFDc3Y4ZTU3S2hkV0JOenprVUtSV0t5dWhvRjRXQ3ZKTlp6NDlrVWZOZDFZcDNxVFZBTU1ucjdXd1F0MzdDL0ZUUjN5YjMrbEJiRHZaWUE2ZzhRMDEyV2xma2JEY0M2NGxaTmdmQU50QnFab1k4VU80U2JLcnFadGg0bVNjTys4azM5cmxSVnc2Nm1FN0tMdWhHZUZZM3ZXWjJvWnBnNG5mSy9nTE16ZVJ2cFloM1Z5c29OcitYRVdURCtNdm8ycWVhN3V5Tk5YVDJiR2ZhdmwxbGRNdnllcXFMRWxldW5lZy9rbkYySTRnelpmZlZJTHA1VzAzc3BNZlBTZ3Z5MHBzbHZ3R3MvSU5lUCtBYkhKeEM1VTkvdXF5alkxbVR3bTFocjRJVEkxaUttcDNrbjQrREZMQ3hOdWYyMHNMbGdGMFgzekE1TVpUQXhDT1NacklxZVNpOHVGR1Y2VFE3WTJvOTVndnBXMy9hdzhOSHl1Q29qSUFicDJ1U2lBbEZPMXRTdk9mNmcxejVpRVJROE1odzRRb1R2Y3R5dEE5RUprVHRuUXJ5MWQwb0U0ejJUZWpBWVZ2MWtNRUgycVRZUmc3WHcwY3lHM25FNytSYjd4czBCVlhkckJibTdqb29Za2c5V29HSE1JU0VSRkFNNmhpOURiYlZMVXJ5UlRmUWdaZHlyMWxIOFI5NUlSNjNobFRKWkc4OTBzMEtiRHo0TFNIY1R6RGN5dmxzMG02M1V2YXU1MFdQT2t6MDdDNzk4MEgvSU1mVjQxMCs4Qk5HUmhHcitWVlJ1eUNBWnExVmE1bEp1ZURBYkQxNUlUa01ZNzVTcllyVktOaUZCL0pqNkNGSzFLOXZtZnk1MGV3eHAyTE4rVUNNQ2VKaUdvdWpNYjBPcmhnZFRRa1BZNU1ScmwxK3dsWm9lSkdaY09BTVhQd041ZjBjR3psRWhZWjBNMkdUY1VQcjFBYUsrcGttWkJjTTFwOHNTZTh1ZGtkSUsyS0xwQ1c3dzNlWTFaVXgrM3dQcTRMK0dOODFJbkVIcXQ3cnEzNWRlYUNRUHZDN3VpeU5aRWlzK3pVamVkQ010d0FzNVN4LzZQSjdod2RBU1NId0l4SDZseFh0MTEzVWFBWXBKNkVvMDVXaUI0R0grRFlEZUd5SzUzZmpYbTlGV3RFbjVjK0c1anV0TVdaV05MUnl1aUwvSTRCazhCZm1KY0ltWkdOK0YxajUvVW1YcmxyeWlZZzR2eUllaDREQktGUmVTS2Q3dVhubVJsTTc5eVRJYUxvNHJlSC9ldkNaTEVPaHYrcElybkJjaXVwU0JTU25pMlhOY2N5SnNrN1pXSHJvNXJNWk5HN2hIRUVEcEo3SFB3SXZJdmxycllaMkdUb1FzaUxWYjBwNFlab2duU2xCelp4MGhQTk5sUno3cEk3L2Y3TnlLTWlsTkRZSDAvMURNL0tKb1B2MWdjTWZONVFTMXEyN3Y3aUFSMTVXM0JCVWRCQXFma0lZZGxZUEl6ZXhBRUQrb3hqcUozZ2ZhUkhoUmR2eGszRys4bUg4OHlnRzdoZFNuVkFFbEhQajBmS2NnR3lIVnZLU3laYVFxckRKVndYTkZ3SWEwZDNxWlp3c0xyZGJYL3dOZDVoSjhaZHF5clo5RWZlUXl4ZWFzNjNNUm5kMm15YnBRUnlvZ1pJais2R2pZdU1ubFJnVjRQRG1CZEhsQjVaTjlMTFhlQVJZb1k3bkorMnpRY21xNXUwUm14cm0wdFJPNDV1SmdPQzh1dHZ2SUpFVXZxMjYxZWk4ZmNvUDEvaGR5UDM5eDNoM1VNWVJHTUtsYlI0MzFPZDNnZGpsUmtPOEtVWG1aREhnNVBhTC9ZVmRCNVFXOHArQXl0RU1oSW8zTzZ1Q0dRY0o5RHVyRkMwVGVMazZTaFAwTG5COG5xbkhVMkVqWUx2eW93ekhZYXMxUXVpQUZSa2ptT0ZtTEEvUWF6UnNudks2MW5qNnVvRzg4bVljeU0xNnhINjFsNEllR1d4S0NrUHVJRFF4UUl6NFZlVVJKbmhmbzBEamJqTHRTM2EvZ3F5T05QYlJrblZvaS9SZm5hSThjbU10QWZra05wQTd4QjV3VnJDUVBSNTljbGVCdUFmSEpwVnpFYzI0SkRUR3IySHphd1FnQkRjcjBqdmxwakZxcktXeGEvOVN3KzlNTndzMFN6N3Y4U1ZHOWlPem1QVjJnNldLTENIUi9UYTlRL3VqdmF4ZmZMOVpENDh2bE1DT2c4YmorK2xLbCswY2FZZDhlcFlldlZPMTB1MXFhWCtMREhSRDZJRXQxTm1vNEsxR21hTEM1NUpKdWxMZTUvM0NmZnJIZTVrVHNRd0ZiWldyYmV4cWtIRXJYeVM2NmJwZ3Z2UWdnRHZTSnl6RDdaamdLSUdsNXovVFoxYkJ5NkRqclUxQXM5L0Evem1Yc0xxdkpDZjVOY2o3TnMyMkowMk01T1BSTEs3VzAwNUtBMGFZbE1nYVkwRkVDMENTNTFFVVpnWWNaU2F5cjBBbHdHVjN0eWpockpIZkRXcks3N0hoMU1GOVd0czJtTnp3MEEzMUZTdGpHQXZpNXdQSEsraVpCNlIwY09PeTlWYlVTNFVFS21UNm5iY2J0K2hFczdPbmpKaTJmQ3dVZTZtblZBNm56Q2c5dkwyQXlHeWdrRUxIY25NQWtleG5kTFF4dkx6V2JSYWpkODY3OEdHK0lMblZOcU5uZkV3b3VCbGxCU3ZYOW9uNVdRSWVUSlpIVXd4UmtPQkkxVCtoODdVZWErRUZTWjkwL0Q5N0lTWDhyRUxrSGlaa2NrcUQvVVkyNExEVHVmWitiOUhGcXZOWUJhdnp5djhWRWJqZEg0RVhGRk1XMk52UFRFd0wyRXBOQVRtZGlvSjhMZ2ZENEtGbUFHeUJnanNpSEhRbW1jQlk5dkZTUDdHeGl6MzFDUlV1RiszSkRvaEc4bWxzKzVQVWR0OXhQRHN0MVZvYWVYTEdacGs1VVZzU3FHcmZMTnpiYjlUSXF5d1JVQUlodmxRd3VzOVRpVlkxUjBOanJFQXk4dnJCTEVLZHk2OFh2aWZudnVhVlptOGs2aHYvY3dkK1lmY2wrQ0VEL0xENUYxUjRITitoS3pYTzZPSm5UUEdFSjU0SmljeDVLRnl6dzNoL3hVYm1qZWpqVERncVN5c3FBRXJwMFhZWUd6bS9IbXJ0OXJRZlphRjUyRSsyTWI2VGJjVngzL0xXOGtsdmhsRWxhRnRJaVZkVjF0Zjh1TngrQUI4cVFVRERlTnpoeE1HRnc4ckpHVGQ5K1Q4WXRtQytqSm50TkdLK0JFNzFBNmJPVGdudUtyWjUydEt6SkZTZDVtcnNsMk5zc0RpWkdjTmFnTXlrRUhHLzY3ZEhQYUgvYjJoNkhhZzl1MW1Mc1J3MzdiUDk1dEFtZUEvTDFkdUhRU21tK3hLMWtNUUhUb2w0MHZmaDk4UmVSUFBaeEZQTmdSMStLdStIc0dMWlZPYnpKT1AzbkQ0Mjh1WkRsWGlJUDRBYk5yS0NQSE1EQ3JVOFhqKzF2L2xaQU9oeWJyMkZ3L1FqYVcrdUc1Q25Gb2Y0blJwYzM5cTNydFhTWHgyYUtvNFd5Tm1HcC9MT3VjdCt4VEIrVlY3ZjlwbXVJc3ozNDU1Q1ptOVFKbVhiYnFxRFBtWHZEazdINVFoeEQwUUIwR05uZDFDMHgzTFYyVk5pQ3YzUkRzYjZWUUdsd3FnLzZiR3A3K3gwd1E5dEh5MjFlVEZYU2VvQ0FzeVNQRmdYUEx3SjJpQnZScTZJNXNCL3M0S0RiQnJLVTh3UzN0Z3UvY3Q3VURXWThtdmpzd0F5YTFjYitVMElzMHFoMEp5NURDSSt0OFRFY0Y2UXI0Vmg1VEZNdElnVkRlOWk4Ylo4eE9GTnRHczVSZ05XWTc5amVaeUlDamN4TUM2Z0lwdWJtdExZSjA4elZLdG5CVVBFcXNhaXltL21PSi9NTk1iT1pFT2k2Zk1UTHdlMGVIK0Jta3FPMXMxdzRONmtocHpnM3lIRzBHck1NQi83TzI4Wnc0T1pJc1p3TnU4QmVCeEVCeVJObnRyR3FYc1ZZTkNDZGp4ZUhteDAyZzZJVUhYVTg4SmxlTDIwZWgyT0haTjlqbTdLTDI0ZFV1UjZIL1k3K2RPWEV0dlY0WGMvZm1ZZlNXcjBEdXV6aHppYVdHbjdHRUFRTzFZd2dQSEU0dWIxaUVab1JqODZEVDM3c1htWVd2OFc3bmhiZFpLV2xhZjQxaE1JeGRrTzl5Yk1haE9DQ3A5cU8rOHlOeldnMDkySWVBaGZ4L1Q3VVNndkhQdktUb25DTkF1K1RNZnRMZ3pCeDZzbDJiNmR3czQ0akpIRmkzSlE5aUZPMVV0MFltTWY3bVZxTzFOOHBOc0poTXZQazBvR0t1aHBTS01NbG1BSllCR2x5bmhzVDFnVnBvK1RDZzFHekFjNlBkZ2hGV3NmUnBob28vMUVHZWFqWmQvVWVYenViQmVSWW9rSnExS1l1b0F5NHpicHNsMUlXVkJTSUdVaUY1SUtpVG1veE1CQUQyc1lqU2hxcVdHK2hGODJFdTdLZ1ZJM05UeExjeHpWMmVzVVh5Sm9kWVlPK1ZRd0tyTTlFak0wVFhOc0EwOFMyekwxYm5hK3VIRlZVWmFzWW1zWVVvR2Ntc1l6cmRrQW5VQ296WWllaXdNeklQck1FOXpTSmZnZUgrR3JxVi9BNWpjM0ZjenI3RmhaNjQyc3ZSbHIwTWJic2J6OHM0cFF3cXRrMzliUmV1NHMyeDl2a1BMZkVJTEhYVlJzeTlqME9hTTM2RlA1WlVxbm5RcmJmVG4vZXA5c0N3VENYckZPU3JrTlVnek5zSldLUmJpZDdGc2RvYjdQWm1ncEZZdGx1ZGNhR3A2alZFd0FlMjBhTlBKa3U1bFpVL3Nralc4R1hJWE1hRFh1M21reVNwdHVubWNNUWEySHJTeHNaR0hZbXR4RXZqM2UvWWVnc0owRXlzNHYrcmw2ajlka0hTUXJ6SDZMVkY2NTZTZkVzQUxFN0ROeWNWUjhRN1pSNnRjbkhtc3VNeWs2d0FvQnlpUjVsOW43T21nWHBqTmphNUJpc2RMZW9DeWRuRzIzQzF5MEw3Wm5JY2lNRjJBaTNzbWQ3c1BpOXlBTWxmTlNzNllXRUhOandNK240ejE5c0VYbHA2Z1cvWVd2cE5OcWYwOWRDelE4NGZBb3ZuNWxrdUhyQjJlSGxlWlp4MU9FTERoVnN0Q1FVSC80WG9BR1hEYlJqak1PM3dYYUFxbHJvWWQwMDVXTDVxbHNKRUdQR3hDeUZPMGYyTUtQNERZcnhRZDZrdldnTDc1YUR6eXJPaElwaGJUT3NHTGZTZW1TN0h2blBHdW5xOUpEQUE0N29uNW5QQy82OUJ1cmpBbWswNjFxNE9yV29zRTlacFhPcnFwWUtPbVh2UHVKZEJUK1p1c05UZWx5TDQ0UlNEMlFySlJGeWZuNzgybEpNR245SHJnZi9ITVVsbzlkR0UzY1ZVL3dWdStxTGdZNTlEM0J5VS9ZU05JMnBHRFV5eUZ3QWFsUmJLWWRhZ3hsTWdHem1zV1ZBelc1K05IRXliVFE0S3RoUGNvd0dUUkppMmZsUE04MVA5b0c2WWVDSThxcGdpSEx6WXo3RnJ1eWNnV1pKaVpHemtHMU8zN0VnMlI2UDRQd3paRExDeUprNlhIWjRUdE5VRy9NYUh3cGIxUmRIS2dpcGg3MnNwbzFzaTFybXZWd0l1WTRqM1RSOW41RVR6a0dIR2xTcGZQTDFEVzFzWjJ2VEc4bklVbWlxME5tQmJxaUk2UDRoRHpDR3NtY2wycE1aTlRnQjFXWmszdWE3WjhyUzJEN0xaeHJnS3BFbVhNOG9hS0x5OGdJbUIyYlRDa1dBVnA3Rzdsa1kwVXo3Tkx0YU5IeWx6YUV0VXA0Z2dXdnQ2Sjl6RCtBU0E5eEZnYzJFdkZhdkl3MWxxc0lKYWUzNTA0RzFUV1BvMmkwamVPWEI5djd3cjNSalZkSnJuNTRsa05iYUltdnJsU0N3TURGSjNMNzV0ekRqWW1Cay84STdJRW1nVGgvTVZNYndRbW0zbEZJblVHNW9PVWxtSjRyc2tLSUxkd3k5ZDlVazdibjVUZENRT0IwZkg1Q0tzbzRjT1RBWUZQMEFMUzhsN2s5Y2JjZXp6TlhZU0QxNXpiVHB6aEFvMURrbnlZN0lRamNpU284amNyTU90TTFhUjF0NSttODhRVm9PZTFwd0xtUFJyanZiQ1Q3M0NDRjJScExoSnNZa1FNeUFadW9xcmhjYm43ckdPbkxEcFRWcDdqZFVjSUR1Mkx0WVZROWFocWFjUzRpNm9oRU9WVDhhM1lxYXBFOE5rZlZWMjlyMkxWOEdDcjA3dXh2QTFjYUJqY1M0eEZqazJYZEROT0J0MmNJNVRRKzZpMmgvTkZDVmdCUVRQempQeUtBNkw3NlNVMkRiem9pa3lwOWttWUdmN1UzRGJFNFk4UiswMWRhNXp4aVBPVHkzNVQ2VTlTclRsVlJ5UWhkbU1paitUcW9RWHdicTFqVEpNTEtWMjVIaXMxdDkyd1p3bDJ2dlUxQmgvYUtUT29VdlZ2eDVaK0pkVHFYNmRodWdLNWdsMWxvbG1haTNlbjZCY08wUVMwdlZ1c1ZaQXViNVU4dnltUFd5MWh5azNja3h5Q3FhSW9XSVJOK3c4ZDk0V2tLR3NmS2RSL0xnQi8wemxkSmN1VmE0MDEzVFlGNDZKS1RvUEtna3BpQmNha3hXcDQ1YVpDNUY0RXorbTZ0dVVxT0Zza2tDVUY3YW53VkNCMWxSYlc0UTd4azEzOFJ5bE12Z1NXYkFLeUdvTm1keUpoZ3BDTWlpSkhEZmU1T1RKMDJRM1BFajMrTGhrbm1rbGh3VVpIN2swZWpZejFuaDA2dTJPb1c5SHBSTFBzOXVBcjljckhYY3dQVHJ1bi9XMnJsVk1jMDdySEt6WXk1bUkyZzlFcG94SmJxWmRmSytVOHZqRHZwR2xVMnhFQ2RrRHk1cVkyMjhMenRScmhQdVNzZDkrTUY2eTdDY3F1RjhLV0VidlV0VDk3dHBPVUM1elBSRG5lRk1pMXF1dDZRbGlPMHE1My9YdUZsbmRMVGFybG85YzlWS0hEeDBNRlFldy9GZDdQaWNQVGsrWjNHUUVhUGR4VjcxY2s2enFRTDhGQU9ZS1JaRk44dFBFY3BMSjBObExWWmRkaEJobUJrRUdwcmw3TVM2bWtNYmFCbkkrbnNtRFhjUGNpalFFOHNobjFSeTJHTDNwTE5BaWdUL2lDa3crdWRKL2kvdDE2SmRnZ1BjSERFbVB1TlZZUVcvZTBVd1hkaEUzSXFET3ZyMktUMzdOeFMzRUtHdjBuekZUbGdlcmoxNzVGSkZuNkUyUUJ0NEhGTEJjdVZ3Nk1mY3FNOFhTWlp0RTQvOHlyWCtGaXFiQ053U1ljaHJXVVNtK3AxOEJsOHVDNHZzaVBkL0w2VzE3MHphRUZMMC9iUm9qVE8vdEtweVlISXd6UW5qSnQ0YWFxTjh0RGswSVVSWXJ4VzcxeCtaRHVMYzZRUFl2VVZwTDRna2U5RFNzeDZOMUVrTWoxMWxsRmlTeWhJR0NKMnROQWtMOFJwNlBwNnpML003bG5UeEtvVk12TFZ4dm9JZ2t0NWY1dit1NnJUT3N0SEtMNHZUdFpYblZTdnhic1dSSkttSHVNelpuM3gzN1VlMXJSMjZhdzRPcVd1M0xDSFNUZ3RhWWI2YzRnbXBNakR5TUVpdlE3Z3B0Y3FTelJhc0x4aDhGVGFFeEo1alBIMmNtREFFRW92VTNBc0g4VjdaS2p2WkplNjdWWTdJNkxmZ1I1NS9GRmgvRzVtVVVZM3V1dUhQVjBZYmU1SU9PTHR3Rit2VU9jNjNJS0FyMzJ6L25iMWQzdWIyMWJTNWVZd3J2Ym5QeldqRElKenVWbStsVG1yVklsTzVONHhpMnJaMDI4MW1ydTlrV3l2ZC9EWXR4TWl4cEdlZ1FCTVhyek0zN2lNVjBsOFRWVWswQ3oraElSMmVMTlV2TlRwTWhzM2RxdVBuMWZPempLbGRhNEpyTko5elpQdHdrSWkvbk8vNmlEY0VFMktkUmsxUzlnc3BUVFFLZjI1eGR5ZVlOQnNFZDdxa2RlUlNYN0pKVXNZcUNIeEdqcThhM1VnM0hvUk9XT2M4QkxtVGU0M1lNbUZoSm1sOFg1bUdkVmxrK0o1Q2Y4UWpKTGJWK0twSmRPUUE4cFZFbURhVVJEWlhObVRYZTFhdXhvUXhoQ0UvdWo4Tkl0UlVQT2RCRi9RS3hvam9UVzM4WEZBVXNFNEZITE9LQmIzbExFQTBETThtVUcrT3ZzbG5QOGtORUp3NCtqb1FhSThRZGhsTGJ3dzEyeHMxNk14dkhqTVNiYVY4eUtzRmVNUnRnMGhMczFkWER0U0dxUUt1cUtLSlZSM3NjSmVWZ1d6NmFQbDY4N1lsbmkrMUZOMWFLME14YWhoSWw3akpYd3N6dWhyRkRHbmNoR0hzYUQyR3JqbTlqai9RMmtkeVhpQWs3ZG9xYk1uanowcWxhZEtuckdyRTJrM1NGRVYxWkwrWXY3ZnpiTlFIK0dKOUxZL1dwMHNVUkY3YU4xZEZiMjRqME9vcloyblYrQUFrT002TlNnRjBIVVBqclZrY1h0Qzc3aDREQ01BTkZQTDBROWtudzIwNlNONlowV0oveVZZa2dGWm40cHJYR1dNUWxUQk9HLzFLS0p2eFBhdDJpaWM2VlZKNDVVZFVLUXNmSnFoa0hKUmRySmVmK2plUDAvNW50UElTQ1F1TVFYcnVrSFBZcUJpTnB6L016RTlUZ28vRzJ3d0tKTXpUZmI5TE9WTmVIWE10VmhWbXlqcUpZUGQzQ1JvMCtKcGp1SmdqdXNYWVRKRU9DYlZNTnhKRUF5UGMyeHBYSks3UitUdU1mNzY5OXk5eGdkajdnM3h1MUNqMVhHdTlveGd5Q3ZNYUdwZW14SmtFS21oSDdxQ0NLay9iYmRLM3E2TUFjNmVpOGNWakpqRi9RaGJwMUM3Vks4b1VpVnpiV3dQR09MSkJ3ckpYeEt5bSs0aXorZUNMUWMyTTIydVVvVCsxQS9ybkpaN3pkdWloUUZOVldFa29udVlCUUR3cjhLQk9lVTllZ2ExSnBRMVpQTnkyY1JmdjdleS8xVStDUmVOZW1sdHE3bVBIbWJpUnM2cVNNMkZzUVdGcUtoQnVWbGN6QithNE56aVNrNVRybEpqc0V6RzN4T2FSV2VSNnY1ZWZodm0rbmVZeTJ1SnRJdXRmeUt3OUVDWDBCeWJFRk12NXFyS0xPMjUwbE9jTkl2S0I4Qjh2WGZXK0FtWHZFT3dOR29BbGM5QkxKdk5VZWw4NTRubE5VM0ttbStIM0RZMXJRcnB3cTlzZnJZMEk5NklpZFBGdW1aWkZZbnd5OG43NFFjdXpWSHJORk5ROUF4Q3h0a0J5YWdsY1VBZ1hHTHI5WEwxSHh5MWlmV01aSDcrS2UrcU1tREJhcE9IN2JTTG5SRm1uV2ptNFZCc1k2S0JKOWx6cS8zb3BMVm1xdkt1VlFIeDVvL2xCQjJ6SWpnWjRDaW44M0VuZ2tESjJTMm4vTUJhbWg5ejFWcjQyU1VJRU82ZnlaQ2doSGhqSkx3NTZsZllVcE1KcmVMOHI5b2dKUU5RYno2SFdHaUp5RTNOcFZhWWF3RFNKeVdwb0p3UXVUVWpneDdJN0JpQ3lmMzhPNkhDOFV1dStKQ0xwWnhlUGk4U3REa1JqSXBMSlc5b2drU25iUERsYjcycGJUV2s0RFdobnpWUW1VaDFJU1B3VUc5ekplS3d2WTF5eFRIdWMxK1ZSdEhtTjU1T29lLzFhOVBMMzdwanJ4UlYyQUJTeW5SRXBlSU8zdjcyRkZnS2xvS0I4L2t5cjBmU2lUZDVBeUZrMkZTYXUzUGxMdmY4T0lRTnBJaVZKbk4yVkl2TzZieEpLMEFabTBqNkxLOStHaXJ2cVU3UUtZWEMzMnBYUGwrekVidzRBZ21aZ2RrVkhCUWI3OTA0K2FXekRiY3duSEVsYUNEY2JieTNtdVI3MEh0bmFuREFTSnpJVFg3UzFSZ3p2bVcvQmVPaHArb24xKzlWSlQ2NFA1UGloRVRCWExCZ2lYbkdIOTFWeTJmd1JXZ1d1NG91RTg3NWh2VFVYa1RSV0pqKzRUMVRLanI2SXdLZzc1dmUxR0FPbHBnOWxQeEZySHFhQ0E3ZVZWTTdwVlNrNCtzWDYxemdDd0VwUTA1VzRQVUo3OWgrVGdwWG54WmdQMkNjV0hRRGFwREVTTU9qK2JiN0xRZ29RaEQ3NUpMYUVxbi9aUG9kRGFFM1k3RS9xcEszQ0dqTHJkeHh4c04zSUtZY0hNcHFvd0NuK2Nsd0xNMVUxdU9udHA5ZVNhWXFzK0xHVHhxN1RHRWoxL1htdjBRVmtLWW9raElneXAzeFM2amRPYlkyNFZOM3BsZTdoSzljTDZtUE5iNFhsRm1NT2dvYkJWSnJaUWVUNGNSZCtqcjdKbjRpUkFFVnlBbit4NXRVRUpIOXUzK0srUlhDZlBKbXQwZW0vd1ZQRGQ4YXZDU0M2Ym50U0J0ckRoQU9BU2NYMEJGeURDR0NTMkNuWWp0c0dQQURIQkdqR25MYkFqRTJBQ3djUVgwckFxRE5GczdacXZxa2w1SGV1Qm1xc0pZQTA2REhZQ2VWR2g0Kyt0T3duWTZoQ0EwdDRYWlBEd2dIa09kL2hxWTNNUjBUTFJWL0dkWE9UZlc1bndUb1BLMGtQU2pzd2F6SXc4a0o2Y2V3VC9JZDRjSUNpM3pHQm9FUk54ZENEblZaNXRxUnpYWUZia0dkbis5ZGhkWVU0Q2Q0YU9vK0tiZGtUVm9jbGExUmQ3N3Qzbnl5VTFYRnVUMFZnRnBXMlREbFY5TW9sZEFzaWxaSDB0UEZjam1UUHFzQ0U2NGRpakovVW9rZG9sUkNqZ2ZmNGlVR2dsUTVUN05rbTFlTE83K2FyVWVtTFBqVWJCdEVIb05Cd2dkWk1vMHFkdS9KQUJ6ekhGUVgyamVtRnFBTTlXa2ExQTRhWHJuUlU4b00rOHhacWF0RjZMb2lFQ0VVQTdVWTVNODJyd25UZksvemRza1lJSDRsUmJTc2FqQzJZVmN2ekRaYk1pMkJUbTFncCtweW5FVzdZcDRxa1ZaTFd0NmNKM0EyaXkvNjFJUWRibXdsQlNQRStpcGRrS0dzYlpKNytBWkN2R3lkM1liSU50U1FSNzRBd3AxOWhzOHdURkRFNlJNNXV1TFpJSlh1YVBrT1dYMUd0VmpOWityZlBRdDhJeG9rYXRFNU5pelVtTTIyRlU3RndwYzFTOWZqK292RU5RR3pUMnljdG9PWk5sQWJleXpVZ3VteWNBdHFnc2FXRXY1enpvcGl6ekpEUXord3VDbEdFaC80QUpCOUJhalkzNVJ0WmlUN1ZGb0JKeEd2ZDlYVndJY0FXRVJ1UzMrK1NtQklWWWZhNDFPamRtV05qSitQUDhhQ1gzbVNrYnpMeXVkYzVzZEZDbEtHRmQ3Y3A5MC9XWWNaVUpuTkYzcy80cWxhTUFhOHNsK2FxS3lNMndHa3M4MTlQTURkZDRwaWMraElrZUlEMFVrOGVJY0YxcisvbFBna2VIc3BwUkxQaEh5VzNaOVE3SzlXTzJVSGxLSmpTeGt6Ylh4NzR6K3ZLK2djRDB3ajVzOVpPaHlQcGlpa2dCWEpuMUJ0ZFJCSW12ZmRTcGpsL0V5MFFLeWZHT3RpRjFXYy9lS21MK29CQVA3bDZ5RFhFQlhtdU5rNmhvdi9FZnorZEkydUF5QVZLcnJLSU1GZDV4OHRZcUpyTWdFeDBIcDRYd2dERG8rYWNUb00yRlFFUU1PandmU2gwS082b0kwUDhwR0pocm9wTWVMaFdwS3piRklMQjAyVEdQWkRtTGNCeGRmQjBjZ043OU9qaDR1My9TMkQ3V3R4YktOS3g5dmZLaVlwMFE2N2QzOXE1NXp4azVSUzcyODJ2ZE9jMm1QS1U0MnFuVFhyb0UxNk9vOFdaWVhEdU1DR3NXbVlHa0d3QzROaE9kU0oxUVVINkVOZjVjWkR5ZWRTOGpRUHRHMjBQTXA1OGdmQjlud3N2YTJBcTQvVkFvZlY1czlhOHJ2aGtZKzF5S2puUkJiWWY5T2NIbktrSlAxc3V1NVJvWUVNT3FOVDAwblR5RG9hSzczWloxMlFWc0JMVERvWStwWWoxSTNHQkpMeWdOQUE4KzlRZHBMdWxKeGxnQmM2SHB1TTZZV3RWdHljd3VOb0c1WERqcnU5c0RLVnRCcXh2WTlvbEJNN0hFZk10SHg0Wm1tUXRZSjBOOWUwZC9JU1ZEdlB0bCsvQWlHSEtweWNCY3MveU9SU20zTVQ3TjVBYzA2ZkN3SkV0bjkwV1RKUERNcFp5UTBwWER1ZkZZcHRyM1BBaDlKVDRyYWwxeWNVL2ZxMEJZQVJMdUNySStuTWc0bHVJdWJtU1BnYjY3N1lYOVhUNmtobTVnOC9WSHQrMEk2RVk1enBZUVhqUGdaaUFWR3ZQYzRvbEtYMzVMMDU1TlQrUjRsbHZjL0Y2WkFWVGZDbDhVSGhYTWNxbk9FcFFZVEVlTzNwMXFvWkhBYTB0eEUyWE43eTJkRk83dXU2WnNrSnNhc1JBb3YrRFFHVWh5eVFGbENEbmpYMFdqZm1xZTk1YmJvV256eFJVeDk5N2FISkEvUTQ1WUZEYTczckIvRmRhc1JpVlVJWGJzUjJEQ2FqRkJVc2Q4ZkRZcmZmRU9VTXQ5ZDd1SVRGSzNuRGVOL1RyZ3F3dVhxTUJUWlpObUZ3U0RwWkxvMVY5TnQrVUg2cWVZekx1YndOUCtabmJBZTFTZzdIOVRiL1ZBdU5ua09hR3l2NVZrMncwZDJGNjVmQlQ5dTRmclAzeWh4SmYyU1QxSUMzWjBMV3VqbU9QUmN0aTNEdDdBL21BcE5ZUk9uWjJCemFvZGxKaVZGUjhLL2VUZFlNMjFtcTQ0VXBmZTdwRFpOelk0WTVmc3QzbktpTUpiQXZES0I0SW1UczFjY1FaTXhISmRTSEJRQldEek81aWNzbG9ORk9BQlR2VHdaUm5RSzNMb2RUWmc0TTdpRWE1QWh6b1FZMnNpemM4dTFhVExxbU4vMmxqVW5KblFGY3BKMU8rVEFHNm5IaU1Xc1NaTlNZekNvNlhWV1Bpd2Q5UTZneW1xQmg4U3hGUjU2QXNVa1FncWU2eE5KZFVDT0c4ellTN0hHL1h3STNOK3ZHMEx3RGZJRW5vUHN6SkR2UjVLZnlFSTJ5SlV3azByeEliclJmaEZsTjREYm9tZFFBOTkzS3I1N1JNNTI5dXd1NWF4Zk9CeTR2cFo5QjlKMzRORVY1bGU2RXN6OGtkeHZ1RzZDc0ErVWdGdFlzNCtQUkF1eitJRFNQaEI1NGFqUTVCaitiMU92b0hvS3VBcmI4eUh5ZEtTOXozd0o5Ylp2aVN3SDhTVmNrSW5lbXoxN25WYWQ3N2dDVlJyOEJsbVBCUk5ycUQraW5LdE9WZGtGTVc2TldGak9KeVFuUjI0VUFITW5LUFEzQnhxZ3M5V0dIRnlaYmkwZWt5d2Z6M3pxVG9jQ1ZCdmJtcldBVkw1NnRCcVR5VThZYlRpdCtZZVptVTNrR0ZYK2o5bUx5Y0VNQWJ4ZThxL2txU0k5YTYwWmN0R2VBcnRxZHliaWFyZjVMeFY5NUNldjkvci9hSmlOMyt3dnJZSEJjbkc4dXRrZ3YwOEtFVmF6OVR3ekRsMWh4b3Fvc0RMZkVMbi83eEFOUGtJU0VGaEpmQ3ZtQkhJdUUwaE93eHBzNG03M3A3d2ZUK09LSXVveWpNMHlZVG9aaDMvdnczeVFxRzY0WGRQaDhjTWZyK2dlNFhBc0l4STlLaXo1UG93OTUyWVIrUDhtYjhSVjJ4eSswdDlkenl0WnhsUDloYVRFK2MwYVcxdmFjeWRWMGEwWGNYTnRJVkU2dVlvb2lQRnFBdFp2bnhVaEtYU2tJZXArRitNL2NsOHo3OVZsTHZnYkFDSzNxT0NrSi9jNVpsV1NTMHdkRVhIcGFUVzVpOHZidmJyN2hrMDlKVm9Td0NWRVplVDVVSTdSNnZmZmszSFpTVmNqdUtvUkd5UVdPNGNDMGRtdWNSRHp6MmF4cll5QnNONkxUc3A0V3ArVjY0K280VFpSbkhkNTQrR2Z4bks1TUdLdEU5Yzd2bkd4cVpoOEJ2YmdCeUxKVGFZdUR3ZVJ4RjNMc2NRNGxMRmJDV2xRV0lMcjNGOUtjaksxdisySXUrNUV3NU93ZTNzZERnMEgwZ2swcnpyNDNLT2RTK212L2NOdFNEcGtwcHV2aE5zM3dFaUlRQ05qdUhUcjNObEJIT0tpL3NLMXZZM1pwajk4WURjNGcyVU5BS3czQnFKN0lZc0E3QzVDUUFpVi9BekVSMGFVcFRjUkhzVWpSeGtGMEMyNFZyckxtMDVhQTFPMTFVTk54V1NmS0RNU2xIY1d6QjlYZkpMR01qRjNxRU1jSjFHNWZUSXRMREtSZGk1L2Fvd1BIVHczcXBLU3RiWWRZY1RRLzVWSndlWldEOFpWeVp0ai9RZ0Rra1lOckhhVHIxQW1tSHFRRThNWGNQYW1ndTRaTlo5M1FEb2tBbW03RG8yN1g2RXhJb3Y2ajVJQzZIQ2NMY0oxUWdXY1pHSDJibVRIZS92M2lNS21Cc3Uyc2xUb0dUTGU3SnNiY283Zkl0Qys1ek95a3QyTGJIOVY5QWhBNlFFTEttUmk2L3I5bGRnRU5QbEc5aHZQMzVWNmhLdDBVMTMyV1pKendjbEdsWnIrMko1cHpDaDZ4aWNBTFVFUjdxU3VOUGhCSXZ3cXVsVGdHaVJTVWFSMHpqSVFtWC9qcVFaSEpNQUx3SFh5cE5VeXVWNkgxdTZPNnV3MW1pQkM1cUh6VHZsZnBiaHBlTmJ3TGRtcmNTN09CdTJmL2Z1WVY1KzRNOTFLZ1M4M3FZdFlNd1gwY01FUG1TTlRVRGl4UHdIblZUUU5CQmxVeXF3VVhQaVFWTEhscXZpdzR4RnlBaTFVTzg2cjQwWEdaaDlIQkdXUFFwSjdmOTBleHY5TzhoaU92K05xRXFaeUlUZmRDVGkrK1RZa0RVYkcyakRseTl4TEMxaVVXU2lGUEdwQzM0S01OL0ZYWHNyRkF2amtoTWh2d29nUFYvT01vUUhUaDRIeTI0cmlNSTE4YkNveDFuUW1ab0wwRUNqOWpMUkVLTy9QeG84cnZPWVF6Y3pKdXhSQlJwRnNRZVk0U09Sa3h1WGxQTHN5TFZpb3FwcG4rTUVMV1ZqUFBaTG4wMEtRSHRSSVlhei80cmo4MVBjWGUyMCtIRnZ0K0FZei9UY2ZzbHA2U2NqQm5CMVdwTTRjcVJwNGM2Z3lvS2tvcFpqdU8xRFRzQkVxdW1uQXZSRDlQYVZNS2JqUWdTSEdFMGRqQlF1Tk5IQy9yR0o2MlBqeE9tMzdqRkNYL2hjRHdJNEtHUDJwWW13bVFkK3N4L2xBY1pvQmZXQVBXVjRCajNLNEM3dlRqOUxtdFhQV0dOczl6YktoY2ZEQWlyVXRPWkxHQm9NUWdKMU1UNGlKMy9ET3g2d0VTaERwQVlrdkR4bGszRFBXVjFWLzFwYVc1ZGpvR084N3NWQk11aHhUYms2NTdSTXRuckZtcW5PQTFzd2Z3aDFocDlQQUpWTkFaK3RrWHVFc3UvenVFS3E2WlltamNQL0tDT3M2UTRpdXhseFpzUVZZbXJzTVdNcjBVWHNLaWVxakVLQ2FKQW0vdFVxVXRQTVpISDhUTkU4MTVRZGQ5eVZIdkJISm5BeW5GbW9BR0dwbjdqRGFUNzM2bzAyRXpkTlFXb01HMmdENVlwK09pY2wwb05taC9BbVQ4Zmw2YkY2OXJjd0NXRm00V0ZXZU5xbVJNWklVY3FtaHhlTWVWNS9MRUliVzlQR1dtb09tTkZYU2hYTzdKZEpJd2V4eC8rb1gvaFROVjI0bTFyQ3R2SGx6d1JySG9HeHNFN21wcE5ZTk8wV09XQW15NzVkL2FPaUZ6M05abUc0N3ZnYlNQTURLYjNqcktCQzUydEdjdnNwU0lLZ01nVmhlTmV0RUFGWG5HYm9KS0xRcmRzQTFXY2FwT2N1ckxRZmFVTnl6NWNVUUR3V1FFRHNZVUlnYWsxSkl0YjNYeXp5NHcvTld1cGtPU1BCZVo3dWp6OHhlY1h5alRPRHFidkdPTU50L0toTk9xeHpkbktYcUxiWFVVdFZnUWlwblVzZTU2Q0tvQUorQkIxcFJ4TVdHRFUva3hNT1NXS2lldlF2SmNxV3NtUDUyTk9iRlZWOG9KdWphb3UybU93K3lrQndCV1ZvYnVCUlA4Y1JQd2dBbUFjYUorZG9JMlNzUkovYWZZQzR5c1VMRmVXdzJYV2E3Y01nR3FXdm5FNkg0MStJNitRR2szbDRITVRZS2JveGtGSFFWRmVoMlVNSkxCWmFIQi9Dc3M1T0dRTDRkWnlHdHlkOFcrRUc0ZFp3UGpJWlRNbFBtajFhZEV2TThjZDR1ck9WY05VUHkvOUk4Z3BMMHRwd1cva0VNaUpBUmVmOHR0T2piQ0h4ZSszdzlENENiaVZteGt2QTFWUXpOZXV0U0R2b0VMTkhueXZ6b0s1YUdWck9Kd2JpVWxlQThqV21FTDNpTnVKYlJ1UTNxNVlPeWRkVHNqWUpYQ1IwYzI5bUZYdms2NFNEMm5FS3V0bXBZTXZ3WFNUSXVJTEtJekg0Q0FnSUNBZ0lDQTgzMi9RNzMyL1ZTWDIvYUQvdjliOC84SDJGZDl2MlMvNy9mSC9oNzcvTjl2MFN2OFBxWHI3ZnI1YjdQc3o5KzM3RDc5bjJoSDdmZjQvWjcvVGgvWjd6WDdmcGJyNnZySnYyZlh6NzlYMVZQNnZySmYxZTNiK3IyOWdOaUF0TTZRb1BxenRkQlB5ejB1T3QwWjZRVjVLM2szTmRkS0Q1ejRvc094dkMrYjRsaWVXbkR2cGJ2cCt5RzdmUVcvTXo4R1l1djY4aE92SjJJL1JYNkk2UkczZDIrdzVoaE45MUtnR0lxNTZISFErTU13d3RhNy9HR2pQTzloNWtEdkJ3N0pUSGxrMlpCejl4TVJBaDh6MGpyMTFuL1JVR0hJL3lVV0VCVjBvbVNYM1JWQVhrZnZkYjVGMDZoNkMxSmYrcHhvVEREbjJuaS9IYUZTWVdwRmJtSDRDbWF2ZElsOVN6TmxZR2hlVkFTdDQrY3ZEdHQwMTc2NDVYNkZ2cHpYekU3UDF1N3Y0Q0ZwaHRNVVhSa0FTRzBBMVNoa3N0ZTI1bjJPZ2ZTalhQZHpVNis1RHFxdkYyNXpBaFpFWktYamc2TjZWQjJZNVlrZWt4OTVBVnRWSERudTdDUDJmTjVzZnIxcTI2RkFaVHpMdmE1bUtiTHpFMzVsYzBWcnNJaGNqVEZoeVB0cFRPYmsrS1lpZlNram1uR0lCa0xzQTM5N0Mzek1SME80ckxSVEVodGNOdHU2VnZWOE8vaGRPTWdCQmFjY2t1d3RDQmx0STE1RTBRQitPZlhaTUZ6cVIzNCt0N3pvSG1IRDZUZWViOUxpcWZrd3RtVXY5R2U2Um90czliK2d5ZFlrSzdpR2VHNVE3Sk1nTFJhZWltYlRaZkVlKzdaeXdTc28rQ1F4ZkxSL003VmtEczNHQ0tSaUpRS0hvM3ppczdFM2tPcjVMWFhBRGtBVW56UHhCVktiUDNMWDIxZnlTNU4zdXJqMXhTZElJZWxZRXRnaEl6TnBwYnBQQ0VDdnFkekFoUjE3bGVzLzZpUW1CeXlneE5wRmt1d0hhUzA5dXVJU242U1p6cDlrZ1pqbjg1R2dkTUkxV0FUWURhblZWNDFrbktRTzVodzErVndMNTM2N21sTXQzQ09UdUpaOUFjekIzbjMyWXhKbVNTZXdyNW51V2JGVGtrcWUwRXpJNk4rQTUvSSswNmwrREMrNUFxTjU4WTI3eWVBeFJJTGhlU0krVzd6Rk5Rd2FaZVlQN0RlL0RIVjFlYldPMFQvUC80UzhEV1BwQmF1M2NTeDM3elN4Mk1SZnIxNVVrQkI2U0YzaGdIQ0pFVlhFaUVabDByRzQ4ZzhKRENUczllZnFRaWgzSzVVZ29kMDY4cnJZVHJvZURwSkQ0TEo4TGpTTzBpd0tpQjh3c2lsbDkyMElkZFNPaktTUEt0TGpMTjRsNGhpYTRBVC9lNS9VNW1YN3hSa1M5WXBicTlFcjdRcE8ydWpxUVV3cXNmUGxrYXBBUEU3WWRNWjJMNldubUl0dzRCY2hQTWU0b04xQS94ZGFWbjJIbjdCT3Q0R25OZTRVN0RXV094M0tiWFJua0RrTWFuRzRXVWN3bmxka1VMMFdsNzRNSUR3NTh0MHJqOHJLRVBMdzVmK0M3VHdxcXEyYVZYSmg5YWthN0FUUXVsU1hYN0tYTnZ0R1JORGFERnpPSmxjYStkUzAvMitZeWhtV0IyL3MzQ25pYnVET2FmSjE5eCtsVnp5QUdHcUZvUVFFNzRWcTlJaFh0eUJZcmpOcXRRR0xIaGg0eTJjTmZvUXJlMzYwVnhEcHg2amJrd0FobFpzOXRjVnFhaXh1OG1zSTBKZE40VldMMjlMYi9xUnFST1ZiZ20zMWdEamdBOHArWmx3eUpBbGR0ZVh0YjhPZStyZUgwNkZNQW4rWld0dlVRb0Rpa2cyRHhTSElpMFNxMFRaUFQvcURZK3FSNFhUcHlYWkN2WEllMjZJZ0tvMUVubHZaM0doZjlhdHdQZkt6RUdWeUMvWU12QWVZSDBwbTl1TjAxeFpkYUsvWWFqTGJOL2lvcnNWRE9aazJmNHd0cmliM3YvTytoWVMvdW52U0o4LzJQbmxPNnZLRXBmb1EySWE3Y2pCcFBDckxxTzJtbTZiOE9hczdqSncxeHVkSnlrdElNZU9mQXEvdzh6TCt5Rkd1YlF3UkRtUGJuSkxqbVI5UnJqTitydHJNcGhQdVZlNWVkUzhPNEZPN0tDQ0VLbVNUSWZhUk8xT1Rob2hBT0pGUGV1SE9wTGNDVTE5UjluQWJoQWQvT0w0YmptYkZyeHp0ZDYvYnkrUDRsNWhDbWlTY3lmdUJSeUxWK01lemR3MzJsSnBMR1BodzZraUx2dUhJNFZEZW93TEJqZnZYSTRmcTBiSXY1cFJrb2VNOEtDb2tsK3pnUkYvQ3dLdXZSNjl4U3g0NGpyWDlBWSthR0lKMURJMlZDOW4yU0tWTnl5V3NzSFhPdTVLQzQvczllRGt5TXVHejFnNE9Jc2h4NmttYzFqdlRoa2EwdmxLRC9ycVFNWnJPellQVXVhWTRxZC8wQmZPU2ZlOENwVzVoVkdNM3ArTVVPdVY3OGF6Rm1PTTJnU2VqcE0rZnhSeStWMnFCMERIdkwzWEFOcnNaKzk5ZFkrY0dwU1pVR3hUNE5kK2s1dk43blcyTVZjUWhZMUFNb1Q5Zk4wV1BZaVhDZStaU1dnRGthdnNWZWd2NEVZL0VoZTdkMmpqVjV3eVNKOFVwM296YThYS3ZKVnRSd3RjeXlSNkptS0RyTDFDcCtJK2d5aWJEM2MzMGJpZVlzNDExcytkNjF6ZTZxTHVwSStMbWZTdGl4bkZoNzQ4U3RxRVorTVdvNy9WQVZSMHErNGJOTGpFd0llMEJRWGt0L3J2NC9saWdkWjhob0Z2Qzd3cDh4SVZSUEhPaTUyNHR6WVBZcTUzenpiODhYTGxBcmdlbEd6aFhtUS9KampTclhKYmFCMWFIZyt2dWNYeGs4ak1tTUVOeVBWNFFnWFpCRHhZTWxsWW0vb0pBdkk5VmFNSU1jenNTN3puMExaMzh6VkY4RWtqY3F1MUsrenhDWStEaWZ6aDVnUGdYeC9ndk1hc2tuTXVURklxaWFYbkw3L2d1WUhib09kZml4MTAwNmZ5RmJ2dzlBZWJGUGpWeWlEMnZGYkl0NU9uS0pmeXZ3djdpci9CZ3Bmai9WT1BTSTViRGw3dEFuKzEvamJWR1JNTWV2cGovTW1mTUNUY2E3RmR5R0crSWJOciswUnFHWUdlYWRucHJGNk1ZdmI4QlQ1NUVydVJwQ093d1dqK1EveThCNFFyWUorWE93VkVSZm9RMm1ZMVEzYmg4bWJmYU1ScTNqMTVKNFJ4U092OHFXQ0o3SXBvRWFaZkloRG5raXUvT1ZjcGtqOFFUcGdONTFXRmJEeFM3TmNwN2dJQ3hTQTRTUnBTeW1NYm5tSEZvWno0VlgrRnlXcFl0eGlua3BBb3VGZ3QzTlBUMUtwYWhOaEk4eFBkbDc3RFZjSFBCZVBtaVBwaVVlTXFVeFlFYW1yWC9MVi9XOXo2a3p3aTMwdVIrbzZ6TEtWa1VFMDhBODhjanNyL290YW1OaXpkY0x5cnZDS0N3QTVpd2dpVTg3WmV4WkQreDI2TUFsNG02Mmd2SjhyMHRMTzBFRjg4RXZBdTNPVGM0ajhLSzNhaUdPM0VnNEFTRTJyU3dGNkl1dllyU2VSdjVrWC9SUHorc2Vtenhhc0x2cFptZFR3RTVSVURKaXVtY054bUJzdDg2T0FTT09hOGlpOWdwSEx6MU9hQXJKbHBQbVliellEUEhEZEZna09iWWhFeXFaVVBMSzhZdksxbjljZlhveWl4OHdKbTVQdXJtWGdxeUcvb3hwWG1QNlEreVViQnI0L0pwdS9GU3FTWkczMk16MmM2VzBSZkpvZGR4WjlXOXdaZ0ZxYklSZWI5V2kwZkEzVTlhcFgvQXVpakltUFpnMHI1MmxXS1QrRlhVT0xtWnRKOW5RL05DcStYY1RVV0ZYcS9MMDhpcnlCWXA1QzRzVGFUdTE2R2dUeGpEcjRPUy9pQU1sM080N1hIaDRDODhwU0luRUlZcXQrZ29FN0lNSlFEa1pvd3pmYUxsZGZBYWkxVElSSng4SzNyVkUyanZGcTJzMFNzZmpVNTJqUldsR2ovQzNIN25ZWUlRL3cybHFWYmVyTGNOMmpiZjhzaGdvQ2tDTlB5SGJxa1MraG54QVNmb0NOOVpOUFEzRTRUa0dzV09GS0RZVDZmV2NKNkl2eUhabUF2OUlXeFFZU2NIVmZJeEZydVQ5b3RZVFZlaGtzSDFrMllqeG85RC90eU0wSkpZOXlmNzVnTkZrWi9keUo0bmh2ZE1mbW9CMnM5aGU0WmVwZk9DcHlid2ltRFdFd0ZxMVkwbEhaMmt1c2ZhdjRzbTBTTDB4NDhDa1NHRXNmZG9xTVhJTTlJUkwvUWk3SVcveEJiQ0VOSSt4eTZWdjcydXF2Nll3SXJncVU5OGl4cGJveTBwZXhseW51SEZwMklORmtBcUVCTy9pU2lPYnhQemtrTjlwUkthN0VWbmU4VUFuMVpoRHlQK2I2UUdkc1BXdkVpYUlmcWkrVHBrUnlvM09vSXljQzArVVA4aWVoR2J6SjVzM3NLejBGeit1ZGNUNDYwTFZxZnVSMVZYTEJoODExL0NHb0Z3S2pzSmNzMmltVko0NUI5OWQ1dWc2SC9iclVSdUFibWU1NGFET2N3Mld6eTBvZGlYcXlzTzIrUDhXTXBVV0RPSWZKdmpOc1pPZVk4TTFBRjFib2xtOS9md00vbnFFQ0ZEWS82TU90YVo2MGRoS2x4dllrVk5RVTg1Ti9VWmNmVzVvZUdzYmRmUmVTYzhnajNlaWVBbElYVmZ0VVZQRkc2RTlxVTczLzUrWkhoZTk4bWw1dGtrQmVpUXN1dmdyaUN4c2RnZ0tYTkRWazZFdXNmdWJMZG9UQzg4NXc2aUZXQ0JaaVB3ZWwvZ0dqVHhHd1pRN29NaXI2a3NmY1F2VERGOXNSOFZ4OFdiQlkvejBkcW9ncEhkK0RWZzlSYjRYY0NCQmhyUEF3RGFoY3lxZ0pVM0NDQUNDOFR1OGVzSElqYnZ4aXdVTUl2VzNsUU9oRDJBbGdhMG40R1kvVFFaR3ZocGZuWHgwbGNiMTEramFrOU53ZGQzQzI4K3hFYUxydFBrRDRYMzRlVE02YWQ5T1lCZStBSDVXaEp4WnpzQ0Z2bktyVCtySzM4RCsrdkdrNXl5N01raVJTUmYrUlgrbG5OWi9KV0NXNnJwbWtEVzBzTXVISGVScmVsd2NxMFV4cVZIS1h3WlJESVBWZzhHQlE5eXRSd2NsQTA5Q1FyWGtTYjQwKzVhWGI0SXpvZ3F2NTE5YUxOUHh2amNCSzRQdzFYaGxmNjhQb2RUNFpEQTFYVWRPaE1tRmY0anBWTzlCenJqT2ZsS3QwQU9GeTFIMjZXM0lVc1VQTjFJQ0NoYjdwVllzeGUxR2MySHFXSjJNSGUyUC9oRnIzaHVBUkE0cWo1dllTQ0pORGFVQm5pZTg0RHpBT28za3FzK0VoRk84L2c3b2VXcmpaSU81anB5MndxYXU0MFg1V0kvN3B2cHZMS2wyQkNWbFRNSUJ6aGJ0dzNUc3JGeUpIUUcrTWdaSXlHNWhkcmwrMG83RGl6djdsVU1XVnJkbUR0NnJVUEZhb2JWNG9RRUQzc01IMXJRMVd6MUUrWWE2NkZEWXE3UWVPcU1PeUdKSlg5UE56SlNYVTBNT2IwSHF2Mi92cEpDblB0cTI4ZCtJZUw3ZUFCbjREZENZb0pEejd0YVNpTlJXVXYvUVRKWFhVdWRXaTY5VGw5MHpzZm9Ob1RqUWg4bWtBdStiNWtibHF5MkR3MXk0aTA4TWxwY1lOeDd0LzhiWStsS3cyR1JBd3hHem5rRTdQRG5Fell3d3FicUZOQVFyRllKQ0dwYUVuS00yeS8xbWdFd0s4akN0MklWZmdWc3A3UzVMK0pyUzg1Q2lwZ0xtNVpjREtWYXNIWVRVRExRU3ZnUXFZM2Jpd0V2UTlseFhzWnZWdnpSUTNwWXFQcjcxT01iQUpGSjBhWUQ3bVhzZWMwcTZWWTQ5Yk40eHd1ZGFqcWpCSnVtd3hLdCtnS2k1OEFOalU4b2pDUy9qL004elF4TUpvdi9NamVyYXdUL0RCR1ExVUU2c0tTdTc1NDk2aG8wRmc2NDRYbVhkUU1jOVhYOEtuVEZKdlhPMG81bVQyU3NzTGNkWXJTakZLckhLM3pST2xBTDRWblE2MFBZNmZMUjF1VDNSSXcwcDVYTTF5aUJxY09MR0o2U1hBRzdTOUhsM3BiR2RBZUF3YkdCWDVrb0F2UWNqY2YyTTMrakRxZG01czZDRHpxT21OcEczWXZDWkNtbHJLZmZvYi83eEFkK0kwSE51Smt6R2ZaY3Y0cFVCQjZ3YTdoMm9kdXdBaG12S0RoY3VscER6MUhpbjFkOE9UM0psNEVKN0x2aEwrUWdCeGlpNHhxeG1MZHMrc1d1UmJjSy94NXIwaEovczJabHcvTzZZL0VJaExLVVI0TXhtYXJjMDV4Tk1XYWphNlMzbUdhTXFwaExpZnZFczkvdmNnV2VESXI3SzFYUWIyVUw0ejhBelpuU2dvb1k3cDVTMGFoaUNwd010WVk3UUJKNm5RMFltYVhhM3NLRWVNRUp6VzAzcWROazFGYXQveW5iZ2RKcnZwVk5tUGZpR2VCUEQxbEoxay94dkJxdGIzYzQ1TG1Qa3B4Q2VISjJ3ZnAvVU5PK0dNMU5oak1DQlg2aGFCV2ozMlFzdUtqREc0R2Ftb0RVOXc1c3ZFK251VVk4d3pIWnZ3QWJvSExLdVRRL0FiZlZJVitlUlNiTW5xaFdZajBqZXlaMUhsRW9EMnhvWFFVaWtMZjFJOUFuYlcwMkZYR20xYlZkb1hKZ2ZKNWZ0TnRRbDFjM005K0RMMWxDYTVMNlVkUDZRTytabDRjbG4yczUxNFIvdFJHQ05QSm05QUVjMzVrQjV0OUMxblZmL3ZlaVY0Y1g3Y0s3SFV0TUF6NThnZHUxaFZaZldvZW9VM25qbHdmbmlEUHpCR0x0QUF4eXlDUDBuYmViSkdWcXlaL29qTWpzV3l3SXE3a2Jwa0ZVd2duemtuOXpzRlZpTGkzekpZNFhUMXQvRTFna2V6Z0x3c0QwalhYUkFjUkZnZkt1R2xpNkxNa1JaVG56OG56N29UY0JiWlJEWnM3OHdITktucmhRa0htd0YwekZvVDYvRkRZSE9mcVNEbThoNkZVUjQrTzNZTnF1cVYyVzNNZHBDVC9QbnJvaWhxL25NdmVnT3FNWjJKOXFvbHF6ZnoyTjYzNGtoSjVNTnRxa2FGdFhmZnllR0toV21TT1k2MlJhbGRzRnkrNWNYeGEvQ3VFMDQ0YXA2TTUxenVuQVdDYTRNaDgwb1dQeFV0cUowTEVXWXhJOUhMdEs2cytOLzNhODBNQTZVUWRBbUg0eFZaVnJEa1VTME9aV2g0QUNoK1dpbE9BRnFkTFhGdzVrNFlyc2trY25KRTNVYmt3UHNMTXF1cnFpNTFOaWNyQytXUldRRkV0OFdaUGlwVUxQWENQK2g1Z3EzZzlwS0pBZTFvbzM1UUJjMVFwb0RQWHBWSlNjU0VqOVgvWC9IZUo4b0Jkd0pYYk1xanVSNUdUSlZaWkxBb1NuVEtJZHZQckNvbjlxTFNmcmVFR0pmM2hoaG5PZ0NvN0lya0ZpNitjV2s3RFdSbnBWK0VDVE9HS2hVSjVrQ29teUMxTTIva2hwUnlxZDlmZEs3TkxWc0F6dTVoNnlFSExyeFhPNGxLNFgxS1Z4NGtNNWhiL1Z2UFJldUg2MUxzSjlOaG83S3VDUXdjOVZOeWZxZkNjYm1tcUozWUwrWWhwWlVKSWRqdk9hWEpRQkxyMHZ1OHplZ2NDZHN0VEUrM3kzU1ZnZlp2d0hpTHk0d3kycGh1M0NQdFFsaVVDM0tDMlpUMlhacmxDV0Z4M0dTS2pKNjZNZzV3cnVkQ2pnNTQ0djhmYVFibFUwZ2NOOUZocE0xT1I0V1l1d1lDaGozMW51eFVJdXFUZzhGdytQWXNPc0xYU2kyc09XNHdnWm1XQ1FTejJaaHhxQjJLQzVJYXhTZldLMVJHaVdpNWg0QmtDUEpIaVRVb1BCaEhCeGRvT29qNEpaUEZuK1g0bXpBT0dmL2VTRUF1RXNObHNFZ2w0b05aSTNlSm5nV3FZZ3AydVdJTDYrSGNWc0t6MllmSzRWNEJVUXprLzNEQzlWSDZSK3gvV2xPQzVHT05qRUFaRUV6SnpGMmkrRFBSRkNadHAwbzQwbmRBb01mVTlPZm5jVm1qNGc2NHIreW1mWm9NSlFMMHhKOHBGcXlhc1UyNnptYUpOSUZmUUhRWkE5WTNZVkUvbGZXZWkyOGo3Q2RNc3FDR0QxeFNtQnpUVEViZWhFenliUzUyN3Vja3kzTG1Uc093d29CajN3TmRxRUJOcGQzK1dDbXNndW03b0tiR1REM0l4VEtXTWlSMTYzRkxmNzNnMEFoRTEvQUtDV1lHTDloZkRGWWUreGtFV2xiRGZHeTNlRHNhUjNiYkFNeFl1UXBKdXptbXhvM3F3eTBtdGp1Q2RCRkltVUJoeHNnRUQ1ZEI0ZlZjT1c5ZjFjVUU3OEp5dFBiUVJrYUZjMWwxSHc1Um1tVmJPZEdpNUxtSzYvUmVNMlBTRHd3YnJ3NTU2VjRFb0RNWmZBVjQ4SGh3Y3ZxVjVSSFNUQVdVRmlUVjJSeXZOd1hzV0RzMnJFYVBaaWZWUFBIVUFocEZWclRVbEJMRDgwUnk2SU9uV1hDWFlDZ1VCVmhZdUkxcHVjcm9La1dtbzI3ZVNoZk5UUkUrdXpYd0NMVTBIUFBSZ3R6YkVTVmFON2RzbXU4ZjJVeFg1TVJZTC9hdTdBUkNad045RVFXQmJQdGFER2V2ci9ZYjBOeC9acis5NTRDd0cwWVQ3Q1pHZVF4WiszeHFDVTdrcGhDOEpubXBSQ3gyRnNBOEkvUllrbHNOOTYyMnZoZEVyTEFUZUdOc3FoaWhYNXlLMmVyY2hUTEoyQmVmWGZiM0dpMUZuaU1sM0gzMngyY1lHNm9LN1IyaVFxMXFyRXhnRzJOUTZ3bnlNWXVEQ1dWVytOeThsMG5NS2NQTzVETk82Sk1hcWx4eXFUTFUvK01mSG80Um5NbldnZ2h1YXBDMDNaVkEyN2tBMGcvUjFoS091R0FWL1FadDZ0MUthRFBnVnY2eW80WnZMYngyN3FTYjN6V3FXMUNBbHlKS0wrbUZJMHp3K0NEZ3hVeElaSUdEQnhlY2dMM0NRdUE0VE5qUUdoRDc1VWxoYkFob3UyOTJMWHlwSkZYR2FoL3c0czNENzJtLzU0ZXppSmxTemNrbkJCdVV5NlhRUUpKeGxVWURRZmFZN3ZhZmd4eVAzeDZzWXpxWkdOcEMzdUpmTE9tWW5NY3NEWFRodG9KaDRSYlhFS2x5Tkl1RGZkay9iVVNteEFuZjJJMGFyS3NtNEhQam9rcjMzcVVwZW11aGxrZzVxMGtzdkU5MkhZZnBPeVgveUVQelQyR2d2K2h6TGxRZCtCTFF1U2txZHVrTTlPeFFEejhsYmUvMXp6TFFqT1dnOHZMUWJOczB2WGJsSmx2T1dDQzdncXhIbWRXaEZROGVjQ2xTUHJVVHMyblh2d3NyVTc4YTdTUHo5cnhxRXprZ3lvZ3NyN25OUGdpNTZrWSswWHJJWkwyOWV0NXVETHAzd2VOODhTQjdoVXBIcUhab0owT3FzRXBFSkc2UnJmd3d3eGNSVzBwUFFQSThLTWsxUEplRE9KNG51Sk9UYXNpMGNmZ3JRSlArak11YTZabDR5cy9YMm5VNXhHRjlLS1lrQ01CbTdzWlpWbEY1ZFdoQnZsaUdXYVl0Mms3ZG5iOHVZVHlZS0pXSlptYzhxcFZQcTFWTkhWTGVUSm1OMFlSamtmTU9RMU1JZ2wxVS9DZnhoWDZPNXBlSFQ2NS9xWmhvdVBkRTdIV09RUm53bEtYSDVJdHR3UWsxVUZoR3ZOZkNiWmY5dmFpdTVKMjhselA2Z2RxNkNqY1FrWXhjUkNsRURiZVlWYU94Sm1EOVBrcVgzQjZMblM1bStYbldvdFg4Y3hUQ1JSckpCYTArMzJYZzZMUGsxNXlYWjNtR1YrTTVENCtwOVRHNTQzSkxQQi9td2lsS0dJdkhZRFdNOXN6M3VDcEI3QUpSUmJNck96enBuZ2xIRTAzbHNIampYS1BBcjJRTkl5MExWTG5BR3FmaWFqb3JqVFRNYVRCMjJNak5rWVh0NmdTaEd5dFpZQ3o0T2MrbzRUa0ZHNkNwQkpOMU96U1dVNTFPODk2aTA1bUVDUG1zbktoQnZUQUdkck5sdnlFY1c3Qk53UVp0WWFkYmYySnArT0RMNGVNeTZrZERVUUlmcElheVNIbUx5SHNQT0FndFhsdFlWdGZyUElVOFBNaDMrK21QTEhCeUkzd1plREhQcGVSMUh3UkdSWUt3OTRwbW11a0JwRkk2YUdkSUsrNHZUekVOSDdLV2FKTmdySGpuKy9OR2ZJSkMwS2pGaG1QZEdWY2NwNVdrekZkYUFxeUg4V00zcGZMUGZpd2hNN05GUGZqVDMyUFZUaWFxTkIySFJnWEpEWFMwdTJVMk83TnpHMXVLNnI1RmFKZ1cremZwd1dBaC9IV0s0ZUI3eXlDYi9VK2g4d3R1NUNWSCs0SDQ3QWw4eldXSXZQMFFhTU4zNWRGNmJRa3V1TGM2Rng3TXJqZDQrY3JReUM0N0krUHNhSktjTXkxelNFQld4Z1pwWlM0MWlURFRBTVRqTXNUYkVUMTI4a3QxNmNnY2swY2R4eWk1WlRRZ3dGZ1dFQW1Oc1VoOHA3TllXclZoL2ZFb1ZMOHA1Z0ZBYStOYllCUWY0emI3ZGRla3ZUbFR4bWlFVlcvcmRORUhIbDBDY2ZsaDFqK2tVb090NG12NlMvVC9Gd3g4TWZSQ0llYUovbFJPei9ScE1OSkRNZXBhMGEyKy9TS2pJKzNzZ1p5T3pEWndMSDkxNnMzU2ZxU20vaGg1Njh2WVBJdlBEV25xYWZsd0hyeDN5Nm5uTVJWdDF0bjN4dDZNMGhaUFN5V3BEYm5OSzg1aUFVc2VVR1pTbEpRTTV2ZFc4WE83THV1NUxsUzdHeU8yTjBpeVk5UjlIdEMzWmszSXI5Q1lQOWdSRkhoOWFKUVVTSDh3VmZGQk80UGZzVXRrQ1ljQy94YldZSTNBYS9DSnNWSmcydGh4dGdZaEJZYSt2ZDJUSmlvQUFPb3h2SHRTakU2Zld0R2FsZ2VlckxKVHlETmdLSGZ2Y0l5NG9xZWlhR29yNWhseUhDcjRYUkdJYmhNSkh6V2V1WnFvMzBqSlByYmpMdW81ZThJQ1dFa2lxYmV4Z3ozWnpQekJ5NVpHQWE3M1cxQndpbDZXbHl5aDZpcDloWVNWRHArcFVuZHhzRUhSMWpIdlpzZmpyd1hzMVY5M2oycDlXd2pSejBVdCtobDN5b2lWanFydnZNeklTKzQ0Wk1kb2xxUXBmdnltVjFoejRKN0llcTcrcDdQelA2OVcwcWVEb2E0VWJZNStJcms2dERNMnptMGZNQ0MxV1RzN2N2SHVVd09MWlUzUHlicTZ1T3p4M1oyTGdDbDZ3SC9MZGdjdm84aUswNXJHMHNLOFlZWmd3YkhhWk1FbElicTJLUVpNd2VnczFVdTZ5TjVJRHZTL0c2d05uZ2U1K0UxZ3Y4V3dpUzRqWVAyM3BrMThDZUE1OVkzSGlFL0pHWDlDcEhNcnRiOWd4RXpVWmF2SmRjV2lQQXFFdTlHL1p4dkhWZDBPU3dBeS9ReTAyTFJaUTFIbWRNb005Wnhpa2NBd0QwdDNBbFYycXgvVVp6SHRZWXEwOFdydVY5dUVCS2FTNXFYeE9pOTRYZHZkRDVJNU5oZmdCN2srT09GanRBelRyY3d3QlRUT2djU0Qyci9YYzZZclRiRnRNU0pGcU9BZ1V1RkVXK0tDNmhVbWNpUVZXckl5RlRHcUpXcjFTN1RiTmtYZERFV1AxdDF3ME5rS1lWS3N0bldUMTJ6Q1k5L2Exc2hFeUVvOUhkaG5pdkN2R0VvY2Y0VnRQNm1rNkJKL1FwbnhLRkVzWEtRMEM5ZkZHc0sxMnVlNUtVUE9GYyt3K1BaYks5c2VoNFBSVUF4ekozMll0QXBVVENuN1hDdDU1bDRnU1V1QlYzS01qY3BwUFg2ejZ2TnJ0R2FzZjNEQ3BTUDNRZ1lsZFRSakNsWWdsK3g0azN2cFV1YVU0QVJzd1orZWU2Y2hPUE9SekRlY2ZyZUNRNnJWcjRjUjNIU3oyNkVqaDJ0OCtDTmdoRWZMc1ViQ0d6WnV5NFgzL2toMFNheWFxNFU0U1VpVE5GTTBWVzJWbkNBZDRBVFhkWWwxb1ZwQWYzbGRMd3VQV1Nmb2x6OXZRM1hNMGt4WTN6Z2tjSy9GdThCaXh4Rzc2VTVDbGdWS2FoUG5MYUVyNzk5bFpGMUwrbytCSEhGWDdSZ0NnYldiNngvaWkyM1JmR0Fra3B0L1dWWjU1MjUrU1ZjenBLYWNRZHFDdlpiQUJCbEJkdkp2aysvazlGcE5VUmZ2NmxNNzlIemdYQ2tQaE5XNzFJbGlqUXRvcDF1VHFZMU4vVkFmaWNVUlUyNEo5WDhVY1o5OEM0M0Vqc2VSZjduQ3ZtVTF6cktNek5sL0x0Q2IxbXF5RkE3VVkvRWtZbjNORTYwbzJxY0I2eVV1OTF6aUpVcVlsS3p6RE8vUnFId0Jpem1XNHpBTkhKamZ2Z001WFoxenBJRlFTdU5xaEFQSTlhQWhhUUp0TVpyOXBEc3U0eWEzLzdrQzVnRktmbkkyOGt0YTdaSVhXVHpMazFIKzdjRjZYNUxHNDNONG1hcWJkdEpnRjV3ZTQ4bitiVS9vQXUvWENEY25RV1RRQng5bUpHTHA2ZHFzNFJGT1d2U3pRalRlaEEvMHBjUnJvYXpIcFRUb05uSzhwVWdGd21SL0syTndXRTg4WitISVN1VXNhM1o4eDB5S1p6empuOGo1OHlQdVhXenorZDltdUJ5YmxJVks4cHdKN3J5MFA1dSt0Vy9WSGNDR25aR1BLOUtEbFpYNWpKdFpMRWxFbGVoS2Fsa3hlRHNMZnd1N25QMWY0YlNOcXlNcGtQQnFYMFJmYXdyTmxCTCtZZGRZS1RuYUVQYVAyVk4zbTJTZ0l1bmNmY2g4dUxGQlh0cGRaS0pESVFINUFnai8xNzFWSTdUcGh4WUhBUG96a0FlZjdmR3FKaDFESmdXWXJZMVlCNkhvWTgyQUd0TFNROFpZejd0V2FjL25mVWdUSDlFZXJIUW9hdFE4a2ZqZDlEVW9jUXhibzRKYWZCR2Rubjk1QXFHUTBFUEkzTmVKNFpyREVJS2tyQmRkV1ZkdjhJL3Z2eTA3TTVZWC9zVkVFendIZDRZanNaRU11akdPaEF1MDdtcUpYQWdSV3ZaVkNUK1hlMHNLRWhmL1dEb3pRUkFPV3NuaFdwTFBoSDl2akViQ1N3ZDNQa09YK0NkK2Zxd1RLRml5cHEvQXNuZXIzNlBKeG5JYy9QU1dKME5aeFZGdGEreTFoZU04ZUlqM1pGT0dveGN0Ty9KdFMzTUUrR2JrUnU1bmRncUYzNmhGYzIydTBmUkhXRVFyRzFGMkJ1SkZlbWN3ZDhqallwVVJzMnBSbUdBZHA5UHlvK1p2NkkrZ1dReDJoZC9kRjNLUEM5bzdERTZ6QUd3c0pETXhMQ3E0Qk9DaEhEN3lHdG5mU0pKS1loL0xkdzRjSWluL1J1TjR2VzVCaWJUdTliVXQxRWUwc1ZGeEgwdzl2UHhheHNHUmhVQmFuRTU5NTZTeS91S3JzVGpwODR4SDZheDNWakpvNG5DeGU0V1E3YWVmVW52NnpSQkhCWnIrNXlVR0traEdzb1ZUTzZYNDFDOUNXazVCa21udUF4YWhkU2psdHRzQjhxZDVLUXVqRHZkUElGS25ob0U0OG1qWDkzWGpFSXROV3Jkam5zbytoVS9mN09VcE9XZWx2alBMalBHdVRlUVFoVGRqOEtRUnlmcnlYWDAzTk5lTkZLMGVWVkNGSFJuQ3p0TytPOVlhNFVyQnVseThiUi80WE1EamE2SjNHZXBJQUp1ZjkyZE82ekR3VXo5UVpxaVkzVWdqZGljMElPNTFGNUxpY0k1RERFNUxKSkI1WWI3Wk5rNG12NFFpbjBlKzUyYUtQUkowa2Ixb3BsMkxkODI3aGVqamM1T1MwaUVBUFhlVGI1Zk1xMXcrNkV2N2NKN1VEOHduTDZKT0lMbUp6cjAvdzJQUlY3VFRjcmx5RXM3ckkxbERqRVNTbFJkNHJ5cHI3VUVJWUV1NkVCdllLQU5zU1NpbFBvQ1ZKMktIVW1oSWw3aGNTT1l3SU03QkNodTF5aXBWckRqUldUYWcrNUZSUmxQWVBQQ09ibFdERHZMdmZ1YmUvMHNpVi8yQnRBL3hEYTVNeitLYm9jRGhBZHZxVE1WVUlEeEJrRW5XMHVoYStlVHpWcTFteGowTFdha2EyRDREVTU4SEgxaUVoWUJoYkRiUlR3c05yWExxVUhHK050SlRJOTZlc1hLcHVlSm5nNXRuYjV6R0UwbnZvRlgzNVU3TjZUeC8rQllzMFZNRjgzdGl0TjRvK3VHNzg1cElJQW5xd1lmK2hkWjR2VnN1Rm9zMjFQZHRzM0tQZXBUN2t6STBtaGU5WWF1OG11bWh1a2V2eU85b244TG94dENFQU5lcmcyTmlKVDY5QTJJUHBYWmpQaHpuYWxpSnVvSkhOd3NFd1ROS08wcjNxR0ljTWM5RzI0eVdZOGI1QVczbkljb0d5NGZZdGdkRTRra0lpMG12eUlIZWRrbWJBMy8wSDVvbXJDZTZtanNWQ01TbWNmd2E0M1ozTGYvMUhQU2xCODFibG5tdzk5ZDNqWW5xSXVvN1RTaHlpaW5LRzAxMnVxdC9uWTRrSFVTMHZyM0RpdXEwUUI0YmNMMWZhS3NoSm9RNkRNdVp1QU9qZDFWSnhQbmlETmtGQkpIbVptaXpNbVZsSlFKMnI0SWxsOU9tbnMwczBKZUVhNmNINDQyNVBoRjd4dmdPTmQ1a1gxQmxVY0VLd1R4eWdUQm1vRXFCOHdFWXJOcG9UTDZKK3VpaTdmWmZBMlgyQk54a25ETGtwK09WSWFtQzZXNlNucEc2Q1hJSDJGN0dSdVFaSDUwanJES29mU00xbzZmcy96SFRyK0xOVmpLeVVnZDk0UVorQUh0MFdqdU1uaWl5SDJLcXgxbkc3QWdSNU9FenUyZTRadFVPUEw0UGt4NG4xeUxsOGY0Z3ZxbGp2SmF4amNOWFdacW80QUk4QnFoUjFWNGtTOThYUCtlQnRoQnZGdnFGTUR0a2JSemJnNzFSOGpMM1lEOHU5QWRnZVdmcGp6ZW42QzRPbkg0Vm00MDZ0ajBNcW9CaW9UUEF2UFJSREYvVTBndG15QVd3eDJ2TXAvdHJQdWhPakNibDB2MEZueExwTW1KeFZQSDBwOGYwcnZtR0lOc1hQUFZBQkw0bWxLRFlvSEhVUmN3eVUwb1dHVElGdW1VbWNoVGNOZ2hOcDBLVTRxVjZiMVBTT3ZtbWsyVEx5N2hSREhQdU9VL0VKRmRwVjdwQlZwSmN3R0VRbW54RzFLZ09LV24vTGt4VldpQlJsTTZZMXhrbXNTVWVUQ09HSXdldkh4akdHbWtHWUdUUnVSK3Myei9wZjhRS0VKVm93OElqdy9oMlR3UXY4TFJjRks0ejVueGx0NXhYMGI5WVpjZjBrMHRuazhVZEozSGFlc1dhZjNCRmMxVitUcFgrYTBORFVCdmRhWGljWk01Vm1xY1B5NUdpTE1DQm00NllQUG9obFJXd0Q1VG02dEdMT1J5aEp1d2xaWkVFQkFORnNUNzBaQ1phRldQQmFMNG05WnZSK0lNMFZNVEZaT3B1MFVYL3I3cVoyNHNuSlQycUo4UlZYSlJTMC9OSmIyczVuMTJqUlRvOUtPUE40Znc2WS91RmlER09xVkhFalRVRGZvaGpxS2JVYUNNU2QrUWdsUHZPZEFFM2Z0UlNGSGRTZGxjVnJ0Ti9haVJnZlA1VkxTeVhtSVFkZEZxcVI2RGttSThDL2o5TFkwd1lpTTNkdjJVcXBqVndDYjVRREdLY0JyR3VycDgvaWVEcFNWdzcrU24rS0p6STJocGRUenpqbmZnbHo4UWdRTWZsRnc4cmVRYkZKcldiWkNEZzcxMUU3RG1Zd3BUK2lQTWNUSnowendiSkNCVnBFRHgvZFVwRnFDNFRIRzlvMzZTbFIxTmN1VU5LUmxyWVZPZFMyb2RMeW5LU0VnZXZWbWFoUVd4ZG1BamRERUJSaVhQajFjMHZTSTA1VWVyd3NQNWN3VXdkZ2JKR2xITC9ST3RxTjJCYnN0czVYTHpvNWdWUTRHY2R6ZkNNTHlpWkNMVDhGb1JESEJJNWtlbS9nTzI4ZGQzbW5tbU45OTdOc25rWFpKalhwNjhXNFF1N0F6YjdobVdFQ3NiT2lIbmgxZHB5YmNOOVJ3U3RkV0RJOXBOTGNod3dPQVRiSFZzYnBGcnNSSmdGeWs1MzYrV0xHWWNXUm5LWk9lSDJwVktLMFV0U3E2c1hoRmtXK09RcVNHQThpbHA4clo1Nk10VVVqZng1RjZPY1lPQU90TzBRQTJhN1NJWG9qQ1lCQk1LUmJ1ZXRPTTVwWE0rUDhOM0M2eE4wSXNKanRDbUdpK3hnRVZhdHVNN0QzR3gwSHZtaHRjNzlpYWJMN0FFc3RaMitEVXNQRkk4cXBtWVkrL0FHS1A2OFN0M3d6Tm8xN2x3MHJRMXpqbmZDendTV1c3TG4rQSs4Nk9qdmlOUFJyMW96bzd6OVlYY3pjK0hVaXJNbzBMNG9kRWo0YnROakhFMDJDV1ovVU5zZjdUMVByZUxmaTRtSDNFbkhmd01mZjcxS2JNWjRaUnFGdU5DZVZTUndTZFUySFArRDRTSzd6ZG5aUkZFOGphZEJ5ZWVaZFJxazZLRUhIZDNkQm9yQnRDOGRlLyswYnZFOW5PR0VLZGJZM0hxL2ZlSUNyYzNiUHY0Q2dRaWJOQkxZdXdUcGtiWHo2TkZOaVQ2RW5CRVhSczRYNVRrTmROYzd4TjJGTjhjaWdoYVJNSjI0MFlSY0dYS0lKWVc1bWJmMkM3ckV0VXNxaSs3cG1GOVp3NVRnM2tkNHlFS3A2QStrMW5DRC9PaEVqUTFrU2ZWdW9wNXl5bGtpRXc2aDVpSUdUTVQ0dVJJSVJTZmowUW1ueGF5d2MwT0Y5dzFMYlQ4MXNtWEhjcVV6OVRweGtMVlhpblVVQW1pdFYrbGwwMWRxVEhTSmp4MjBJc3N5UkVoU0FIU3VFWlNRN1l5Z25SdzBEdklraDZObHZadWkwZHFIZHZpSFdiNVdBWW03MGxTVXRzcmNtYlpIbTc0cUs3YXRKdjBTZHZZUHBlRThzTzByWm9qRWM4WDF5QU9WVU1GNTVBZDhXSndnOUdMQWYxV2JyTUIrTUhUOTBqdUFQYnMrbHM0dDdHeENyVVl1dW4rSUJ4R1VVOVpHak1DVlFvbVhwMFo4cHNhdXFkbHJEL09tOWJPd1Vub09XQmZOQ2dQTC9tTFJyc0tHakZEb2c2ak4zcU9MVnV0YXhwL0ducVo4UEFuWGpFTldjUXEvU01QM1U0RmgrRitzeGdNK2dWWUVkeGlsYit5MnhBeVRCM25TQlYzYStwc0pqbFFGZk1TQm5pRlN1cFVPNXlkOUlrSTlTWGNHS0N0ekxGOUplM2M1d1NzOFdUeUZPaWpqTG1rOUxDdXgxV3lhT2UvclUranNwK2V5bDdFNk5BL090cjBUbjNJeVN1SlRsSE9CV2dwdnQ5bm9xcDV6bWlYazVLc1VocXhWdnhJRm1DLzE0aWNIRkNQbkp5dno0N1h4Z3hUb1phVUJTUUdqUzV6VGxzVWRBUzNPc3lzY3QvVWRkUjZGdTE1OU5aeU4wYnlkM2Q5bVRHeEI1TEhBZmxXazdPQlhxK3NjYkZyYlRxb29Dd0xITGt5eUVWWHpDaXhYT0NTak9WYlpwTENsa3hOZUpuaDdHZGJsV3BqMloyZGlqQTJYSyt1WFZQa3pKM3U4RVFYa1dCa1NXMFIxeGoyYkJWM2g1NmUzdi9IMlhzY1BVWkN6RFZ6L0J6alk5YXVWbE84dHkyKzhqNHFBYVhyVmhZdUVjdkF5eGJaY0taZnV1ZUczYTd6akJEamcyWjRwMHlVclFmZDUwY1JReVg1K3NTaXNuRE9jZnZzU0Q4UVlRUWZOSmpvcTdza1d0U2pXaVdFUmdPcjM1MmUyUG9uazFGWk9yUzhjTit1d1hycWU5bjVIS1dsRW0rRHlPUXNLcVdxc2dNVC9HdW1FeURZTnJ5eHVCSnJCb1VzbWlUVXZqSXlnNFZWWVZLSDZKRUNiL1Y0OTRuVVM4WS9FVDNDZE1FZ0dtbkpTTmI4bUdham54U25yenR5MlpwdzNaTWNmems3dmJsMmtZTmtkZDNud1hlZ0hEREU3TzZ2cVVqZ295cTIzZWJ4anB4M2ZKVDFsUUNNaWtuK2pIZmRUSGVqcWdjQWUzY0ZPSUlpR2lpMHdYL2RWM05OeTRVcFBZTjFBVXZZdklIY0s2VnZPanlMSktzS2JBZmdVVkdiNGphOUhDQXJSNDNSSzVLNGJCbEh6Q3VTY3VvclFuREVaM1JiZTJzT0l5WXdDMmRGZkN3SUJyNTR1L3c1L0pMODU0QkVKRUJHUDhhbmJZeGsyejMwMm5mbDNTR1YvUGZTelp6SXlXYXVsdW1tMml2VEgzK1ozUlMwU0lHM2o5emk4SDBsbjI0RmVXMzNFc1dvcXRaa0NOS1kzeDRMTGZsdGlUeU01VU1TdlJWY0ZJQkFGdU5pWUwxOEF1cGU2RnVLbGRsbVhQWFlDUnpqR0syOXNRaWI1N1hVVnFzK3NGamVOZVVLS1Ewb0dsaVVvSUlCbnM1SzNodWdya3hXT2czY3JadFdxbDNqUEl0ZkRpbEQxRDVyS0xZU0FjRTc1SnFhR3V5VUFidnp3TEhqcHFpbXZXaTlsMENHOVZRWFBUR0E3VHF3L0ZNaTAwYW5udnlrUzdoYkZ6eVhBWFFocXdSUVU1Qk15emtJRFhQbUZrUi9mTlVEWHhyT1JaeFczMEhoOVhUcFNBRnhuRkNITCtmdWJiUWFoK3dOMVZNNzJ6cGNFRXBQVmFLdFhmTVRJOEJCbmE0S212bm1RQ0s1TW94VDBjSjYzcXF2WHROUzgxQUJna2dkdWhEVFFuNUdRWWJBTmhHNXBLaFZtMHFXL3JRbHdoRGdVTCtWOFlDNXR6M1VvN2oyTDBoK0J1M2xpMTBoSU9aWXVCUUpLZm84NHNIUENvOTVnd0NCUnBqbGFua0FDc2ZpMGNkckp3V2h6UnBWKzdBM1ZleVBoZExvRTc4Rjh5QUFyaE1pL016U04zcU5sT2VscnRzSndieDVmOWJvL0pQeW10bUF6V05mMWhra2JlSW1JSUFGcXdlZW5xZTJ5WnZVSFZSaUs5alNobGtWbDFXUFVUL2NrQmZkMXlFS0JzZVlvbTJWMnJhck5aODVwQkNpeG9XNmtaaitmc2QrODRIbDlGMENFWnJhL0dmeEdrbTdONVZDTmY5b1RDWlE0eVpCQkZ0dER0VzhQNkowNmdDcXZuOHFvY0dodGZ5RTlFMGNRa0lGVWk0TXRSdFNmdW8reThWK3hFQlcvcHlDaGlBaUZGRFhOa3I3QTdSNWQ1SzREMWZiVmtabnZJWWRTaDZ4V21DMDk0Zll4Skdkd0g0WjJYaGI0ZEk5M1RrVHJZa3hLL3FSZytFV1N5NXhkZUJOQXlpMm5GS1JTQWV2R0x6L01UaW4rVUNyQUNQbzRqWkRkTi8wWWtlN3k4d25heWdFS0dIeXFUeWpFUlVGRnFQYTR4Vm01RVdLcDJxQ2J0ZURCSlFhMzVxaEQvSnBKaGdOazQ4NndTQjR6Ym10Z1hjYW5rUEcyQzVVN1FWYjhkdGxjMTVqQUVNREt3TVdUMTU3T3V6T0U5c3M0VUdWR0dsS1hYMktHTXcvSHZGOVZ2dG1OV282Z1E2eldVZ1JvY1dzSnpaWHh6MGZWTHB1MUxOQUI4K2tYVENSeDkyVzBGT0dvRUdGM0ZQVmxSTUdEalZjLzYxUDVIUEV3VWxBS0xreisxVjN2OWd5T2NRU09qUnRjN2w0OFU1c2RvdWY1RHRoaEJMQ1owb2xqOFJDSFlnNDVGRUs1TVRMVmZJS3JWaW5SdmZWa216aWJEaE5CZkluYm9EWWlzQ1BGbkRVclcveHY0RTY0K0RyRFR4aGhRTWFpMFdMa29rQ08wUFBJeHNBSmNZTzJCYkJDS2VnNTVCcW9nRThWdUlRMDE3dDF6VHhSMitSclk0Z0ZDMjN2NVJFTi9tcVdqUGx2UFRyNWZveGxxbWF3U2FyNW5MQnJCcHVNN2VOalkvQ296MUdrTVp0TjU3SW8xMVhDZi9COTFOclZLWWwzMWtENTI2OHRuZHRyNEpscENtU2Nsdm1pWFF2ck1yNEtwem9lS2R2d3FpWDJjSHhNOU9SRnJZblJmdFoydmJRU1lKeHdxdmpoRzJFRWYvVk5vbDU5S01LdjkwNENTSzh3NkhVaWF4cVZPRi9QaWFHdzlYdXp5Kys2ZFRtcXd2YmQzTjNwTXlGRG9NVGg1ZzVaMTFqRGVNUFUrOXB6clVBRkpuUy9yNXFwR1lBMG9uMmxFOGEvQVQySGo0ZytIUjZtUmIvRUg5TUpqay93OC9NUUxzNlc4OFo1U1RjYnN5UnV3SkplTndHYzBPQkFKRitJVW53SW5ncHdXY3RZL01xZnpFUCtMR0lncDVaTTRaNWxTWHhGQk5lbEQwMHVzaGRqbjBYbG1WZlVXUTI4VmV5b3BtRVNiRm5Idk1PSlJ3N1g0Q1V1U0lGOTg3RzhqVTRubFNRbkYwU1NLREowVmlmRTc3cXNLdklwMDVxa09RTm5TYjUwTkRRR2taQ1pkWjBoMXhoRE83ZHZ0d0F4QzRlelZYRm1jUE5YOFZwTkNkMUkzRmQzOHFVQjJMckpBWTdnWnZ4YjE1MXJ6Z3kxMjRNV3JNSEpKblo5MEYwTXNxRmVQWkZ4am5FN2FhNElPVmdVM2dqVnpNY2ltT0lLc096N3VJYWlPSHdkNDJCaEZ1L3JtRTRpNjFrV0lQZEdDUGdudjNJL1JWQjFjL3lTTDh4OTUrQzY4V3lPckwzeGRWdUVHRk9yczVzZ0R4c0tyOFl4ODgrTFR4TWQ5SGNuRjlyTm9FdlNKV1Q0UnNSckRrNVNRbU5FeDNOZjlnTmhVdlZEVlBSNFA3L3kxeFZkYXhhb21adDFhNzlBTGtYUXFhT01aWlJ4MDJzcTRlemVIMkhOL3BWeCtwbU9FSlhMNVBmczNXRU41R2ZEdHowQ2RzaWZUMkZFR1hteE5COXZqUERiVDJIaHRldHI5bDRtQXhBVHhmd1k5Wk9LNVJTU1A5aVZIMVJRZC9lT0JSUEtrSk1FTDNYaFowL216ZTRwU3F5NXR1NTU0anNRcG9TUXFEc2ZVYzh1NmZXNVhZelZWNTdyZ3lQZFhwZFUzQ2UrVzB4MVF0bWhCVnVCaHNiWUtENTVQRDExRmExb09OSUdDelBkYTJkVHgxbUxramZhZFpjdlA0OTY1RjFoNnEyNVpSRHJkc3JrR0pTckFQWEswUVFzcmQ3R24zdDBxMW1mWi93VmxzTExmaHpESkcwZTNpdEh3TFZaaDlTNlNjQmErU2JndjRsL2pYN3lYQVhaSTNNTHhFUWdPL1hzNlgvRmRpUGZiRlFzTnBYL01DbnFGWkVrTTgvQ3lYVDRxL2w5SzdKL3N5VndCdFArRG8yQ3VUVFNQYmVtVzl0OFBwaHdNMDhvNWdmU1dvSmNQV0lLcWwxUXFxWmJxK3lDUTdsK2JsenNodGhoUVNzUmUvRHlWdHNNRlg1Zlhqd052NjluSHB6NFgxY2NSV05DOEg1S212SVNMdndtaEVXZkRmYVJtSmVpZVpzR2ovVHY5VVhNMHpDQlhzcU1nZFJHWkg2OWQxRlBrdHo5cFY1aFhEUTA5V0tUZUFZdEpieFc2NTJ4S3ZOWkdpS3FNMFBaRG94U0FVZ1Y4YlZoeW9yR2FvV1lkYVROWjNZeS9PTU44NFkvNWxjcVF5WjZ3SmxPMWdjNTlOYTNLVEhDbWQwYzNCRjNrUnRvYjhHSDJPTjBKSHp0K2lSSGdTWGc5V3Q3OFk4djBCSjh1WDAxWW03UDlmVE5aZWplMUdZTmpPTGxlMFIyUDh6dG9lVG1aOUxqOXRBb2QxZjlra3NsTmxoRkRCT2Q1VVdkK2lvdkk0bG9IeStDd1k3NXlmTFZOT3JYNHJGeWFJUCszOHFYRlAwQkpDYVF6UUdTTFdvN053cTI2OE1iWGpCQmJ1dnZMUnVpZ1MrVC92SEIrSk5UU1RMUUJ3ZzBBcm56RDMyd0NhWWlLWWdhaTlUakJZcDlzTVNpaUFRUFpqdEE1ak80eDR1ZWl3d0tqVUlWelRHRFVmKzB2cHZZTUhLaFlPajFQL1BJd2d6RTIxQ0pLaDQvUjQ3SjRJMEwvdjZMaG1ha3hvcmRYcEk2WDZXekR1NlpKVWhyVVJuTGxrMVNzaXQrME5CcFBtWkJNRi9aSHZtL25lZ2xENCtwYTNnWGs2d0EzcUR0VXRtZ3lQRkREeEw3TnVqazVQRXJaV09FK3YyRGpaUU1rek9PMU02N0JST3hBYk52OWhmMTJMYzFZR0g0VHU3Uy8reGlMTFBtVGNPUE9NdUlMS0VEcktTQVZ6aE5zNFpaMktqeVoxRlFkUzhiNTdWU3FheWk4SnNhUDdzTzFINWtWMWxaVk9Ia3lGMVRxRzZwdHQ5MHdxaHlYeWF6SjJ1djhuS1FRL1lLWmJoc0NQaUJiN0k5R1ZrZlpNa0dTejFBWGRaMVZoQ1JuUlg2QlE4NnRReDFoTU5mWjVGUi9uaEpaK3FodVVOWXJtNy85Nm44Yk5UUzZ3SnlSNlRoN2svZEdWRnYwS01xMUptVmp5MmZhVTZzWjZNMnRIekg1S0tGOXdoMnNRSkorVlNwT0dma0NpdHdKZS9VUGF5enBiZkFwZmxWb1E5ak5MdjRqMGFGdVBJUmlGd010ZVdna3R6WDdrWktLSU1Ea2M1ZzFwbzlWSWZMa0U1ZWxwKzZIR3dDOWJqUDhoOW93dmwxei9iVkVFVkppM1Y0SEZQa25wRWVRVEcxaENzQzl1QXZDYXlLOVVXajhWZVE0V0ZvazlpME15SVpWN0V0VS9scENhbC9zNGMrWStycXFuVjAxVWQ3b3FjNFZjdldvTDU0QnNTdy8zaGNkZ1hvcDJxVzNSRTRKYnhLNGlOWU5FdzZLZHUxUlphdml2VEowMSsxVXgrRUU2MG13bzJpRnd3RFZWbVNnQzRuSW1KMC9McVFUemtYbU81MklISE41NDRoajlrNG5rTHhnWEkzT3NQa3p5elkyWUtOOXNtMk5tR1dHS3JNSVRuUStHVjBSNFJMSlBtRVBrRkE2a3ltTDY1QTdSL2dBaHlRdWhxRnBpVVJkcnhYSTBrbXRKNE50MXdZV1YvaTgyVmRIRGJUZWRwaFRBM2FOelZ6VkNZTjV6Nk80WGdxRHIrVE1IcmdBZllWbGlkK3BCKzZRU0xzTERuaXBMZlRXMVkwbUI1aG1Mc0pTQnFCWlNaTDFCZnpjMm0zL1JsdkIwbGlnNmdwTVdENFlIV0cwTDFNMnBFYXVxN00rSXpaMC83dmkvSzBjQmNuR3lFZlF2Q3RFZnBPWlF6MG9lNVBMWFZrekdHTTJaVS9Lc3pnMHJlcXQwWkdTYlpaM0g5R2xpdDVpbnJHaTNhdGJJa2loUFNEYllMMFRiZ1RScjVRSkNyVmlvT1lpbjJNUGNncXpiQUtmeW9VQ3JEOEZDUkhUYjEvUkx2WHFaRXpRVXpucFE0S244NGMyaXdmQjJ6ZHNTNTNBS1RZZGZLcXh0RmxhQlBRK2RaRDNzajJpaUIzOFh1Qm9aWWNDMXM5bEFlZ3ZPZlNUaC8ybmZpMzN6WTBqVkVDOFNrNTVoUFo2VGpxZnJtQlRwZjU2TmdCZnFRcDVpbERyUHJlY1B5VThNVnJCeVpGdmRuU0N5ZUROVCtIWnZ1MzJlSStqNThDd2hRNjN1aVhyOGJkY3pmcGRkOTNDMjNYaWJzU2VOQmwrdkg0QjlqWHFKL25SdlRGc1JEWGFjSVRyZ1J2S2dmaU81NlZkaVRPaHJzOGlGSW0zQkpXUCtRQ1FJYnZ0ajIwV3FjMFl5bHUxTkVNUzVpUmE1Wnk3a3ZoQVhKVVRCQktBN3dCb3Y3RlhsL1JtOHBmRmxaNXNXUUJ2U2xFaitLWmtLVVhESDRDdWVKelhVcnhlTGFiNVVFMW5WYjVNRlR2Q3dmVmdQYUVzWUpGYU1kVkQvYUFML1kvNUxmWThFNGJJRWdNYnl5MFpMSERGMHRkOHRNanFZMjNic2l0ZWhkTEJ6d0pyUzZOOXNTZDkyQUo5d29hQ0JXaXg4YjU3bFQvUVR1K05wc0k2YVMxd1BIOHRqMlhDcHFlVGdLbkhvR2srNGprUCsvR0FEZWM4bmM2WDdJK3NnQWhFM2M4bitGUkVqZUtBWmd0MldHcm1XTTl6VEZYbDNicXdaMFQwUUVKT1RLZllUWFFMc3l3NVRFZjZrRVdZVUpSaVRBWml5WkdLVVVPb1VVZjhxQm5sMFBsc1BldHhLSHVmUmgwRnVhd084NGQzQ00xN3RpWUl3MDVOM2N6NEtMNW9peExwd044aDRob3JTUHdidFBNcGRLTjBFNlg1SUVtSU5udEVRZWtHMXYwM29lWkcxV3RVcmVoaHBGdFloNlk3VFoxMDZlS1M5RFh0TlIxb2Y3dnY5eENRMHNrSitsRVdvU0ltODBFVUJMT0JoVTB3ekJqd1dRNmtZT3RsMEI0ZGVYeGFmZEF2cFRVdGRlZ2IyaUhDdzNRVzFJSnVtanJEL1pNUFY3VU4wWTBnQzJtdmRUOXhkY1FrUzEzTm83WVp1REpENi9FUi9zTGlPRCsya1lIc1g0dDFEdmlJU0VML3B4ZnlPbmV1K1E0MmYvT3V1YzlLS3lHa2o5MlZZU3BjRjhQNHZXNHF0bHJsZjFjUWxnYUwzM3NsQWVXaEc5bG5xMWJaRi9CcklOeERWM29KL0t4NUVOUkxqNFJJWjNMc0RnZGFRb2VBWDZTMTh1bS93Yy9UYU81QlcwME85Rk9sUjhWUE1ZL0ZKNXVCVDBvNTVNVW9WQU5ndTJRanJoSWV3L21KUmd2REVpb29nUVBzaXNja09JQkMwRzljZitVbjFPai9YbFRITCt0dmhiZHByQkxQd3V0VGR1MWNsMmdnL2UvaFI4UmN4WkdXWTdYTlJNSWdveng3RmthWldRL3RUemRIajVCbWFhdjhOb0JwZ011UVZXOXhkb3h5VlRuV2JpM3pIc21ZOGpSMVhMUHA4aW5QbGlZck9jQ1FDemw1NThldDhyMXpTc3ZaSzNKa2p1YjY1cXdrMUNIbGF3Z01YdzRMdTFxODFrUzBuMDNackNhRFhzN0VpVzZSNG0vYkhMaHVyQkZSY1pnVDRGNlZneEdWcWRZYUVSeTFJMTg1UGtEaitZN2dBaFU3SUpvSjNYMWp5Ti9ybnF1d1R5QjNSRFF2dk5ENzJDNWhHRHdnOW5uUUxqZ25BNEMydXFYSTB0K0g5MjZYa3FZdEcwcC9iTGZHN0dxUVV2U29QQWZNcFpabVhhTUZyZldzNGRYTEh4Q3FtcU1DNU5xcUpuc0JtNmZ0Y3dnTkhLUG1RU2dBTGRiMnEyS1J5M2V4am90RUk4Q1pYaTRaVi9wYlpERGdBb2lVbmFsNHlmVE1QSHErcE1WNjNmT2JsQnlNdjczRSt5ZkwyMkw4bmdibHlQVzZ1WW01bVBRSmZqaTh2TXZzNnBNY1pFQWp3eUZ4NlA3RmEwVnNYWkUrdk1yaWhqV3JoeWJxZUl5VHJ2dURIdnl5MUhGTWtkdHlRbXVPcUhJWDRxN0hMOElFWkxtaU9yMW1XK0tSNWlYZFJGWFdIeXNiVTFyRWtjSFNCRU8yOVo1Ni9lRnhRRFdiRVQrOGN2YURwSWRDS0h3bys4dGNPcnNpRzhOdzcyWGxsWktnZGJEZUxFMDNraHNzdG0vaWZHSzJOcFJjTnRrYUx2R1RmUHozRTRSQ203OSs4UEs2RklpSERuTDQwL2dGRXBMQ3R4ekIwbDV6ZW1hQUJ4b1VLUStxd1N3cEJSa0pRSy9sUllvME1IbmdoeFR0eGl1dG9uMTdCNENEOGhBUkhSTk5vbEtlaEZKVjcvMUt1anFnQmFBTEJtN24zaWdOSW90ZEFodjN2NitTTVM0ZWN3L1A5aHBsNUozQzFSTkZnY1F5c0gwcXBQUWYrMmxzMm1BVENoYWZrNVVrTGxnOEdZN0c0NUtXV0d6QjZ2OFdvRWFoODBQUGhaakphamhYQ0ZQbVRPaVpMMzJZYUNVeVdYdmlZVTVmdFAvQUlEWjNiRENSNUZna2hCUU1tVk1vQXprc3Voc2o4ajdGL0MrZmprWUlFVWlTa1ZHODdRaTBwTWM1S2RyUzVCczJpbTMrdFE5anBaSGNTc3VqMGRHbkM2VUtla0c3SlVQRjVKQkN2MkwzTTdaMERqMlZHdmoreklXcHY2VXBhOFRXbnY2TlpLbG9HL3dla1pGd2dKQzdjVWczNld5N3B1R3NvaWRhNmpGTmZkM1dvS0pjM3VsY1VIMVA4RmNJU3RjYjJjcUdaWTZENkxhbzlreTNTWXJUdWNQaTN1ejFoRTJKaTdJRGtKRFdsZzY4ckNrWnNiYlUweFlSbzFKdFFFN1k3b3d4NHlzcXc1WXg1eFRpNVhzUW9lRFJ0QXU2UUR4MnBqYnJBN2k1TEhwTTBOQ1dyak41V2NxMldtSnF3VFdtSk9LanpHTkRMcEJGY2F5eEhwbUVoMStLdkdFR0hCQXFnRlRIV3p4ZE5OOW91SjJNZHdGRFNjbzFzZnpVREpIZkhpMGpCRk92YUJOQjJKR0dqcVJ0WGtIU3RrUkRQQzhxRjRlbHdjSFUyRjE2ckI5ZFJjY3ErdUxyczNhK0VHazcrYzk0MGw3NzNCZDliZG03WUMzVnRxc1VDWXpHcjhmUnJQbEQzVTc2eUYxM2hkVksvbzZWNlpUdklRNGVUSlZHMExJc05tMmcwWXlOMWRGb0s4S0IrSlgxUFFxdkhBWjlrOGFNUUJvSUV5QldYdHNGNitOdXdYUHVGdHhkZndUaHVJZTBDcGZScDFNY0xrNjZiNW1CYkdUaUxNNDFtM0VwWXhpRDNyellzZHpibmRBVTRjUkI4TEg1dzF6QkZ6M2k3R0o2OEJaams0bS9kMVh5dDlMNzVNRU91a3h4dW9HWFZUWHkxaHR4dUtDU2hBRzZLOWpWSnR4d0dwL1pERzVTc0JCZXdCTC96ZnZkSFYzZ2d1STIvV29HOXBrSjhVckxyYjFDc0NrTGlXYm56a2JsVUc3YkQrbXVXaXlnMXZvWSsrdTB2NU1VMFZPNW1YNk00OEpwWGRNd3djMjY3YWdKY0RLV2ZabENCUWpkajRZWE9qRitlRTk3ZFNxTW1wNURZSk5rNDRXRGd3Z0pvK0R1SW9GZGlvaW5XdUZOamdrdGtFU0FDeFVxd2VqaCsyUkt3Qk9GaGZWRjgyN0c2Q1B5UmNPcmhyQnRJVXp2em1sOGdBUzArMjlHMS9TWDc2MDVYcHdjYnRGcXBaZ0VsWlNVb3Q1M09PNnFXMzJaRVRuQ0FCdmt4RStWUmxrZkliZzRwWTV5eU9tQ1ZFenM2ODVDT0dhVGlhMFNUTTZLbFp0RktIb2p3WjFGcEprblBZMDJlV2djTUU4NmVzUUR6ck1HNFdQcVRBa2lLOFdSRmtjSnQ3c0lmZnNWN3djNHluRW96eUsxTlNibGoyams1Zm5DdG55RXhIeFN2NGZaRWkzRm44ZndEN09vbFhjeUQ2ZjliZHpDWE5QblBXREtqOEpxZFdnZnpYTExTZ1MwOUgyb0djM0N3cEJkQ3pCUVQ4Nk1Fc01QQWpaUzlhVzdZSmtPb0JmZ09nSHJCZEs2VTRFS2lnU0F0L1V6RGFJNkRmaXk3YVVKcVluNXNHbzhwMG1OdHNtMkxORlpCSWEvUDErYU9lSG5FZkJBdlZTV2VpWk5sVEE0SlRVQTNZUGcwQlZxenFWTytYb1VTaUw1K1h6ZXV6cHdmK3orZ0FPK3VwdXNIQ29MaTJWRmx3dU42NjNka2k0eFdQa0I2UG9SYSs5UlBjTnMxN0ZlTU9hcXhhYld1QVMva3hOeDMySE15Y3dhdDZOVEZQNmladTBwWXRqbnYyQm5ONnJwYXRiVDh1cWx1NmVXSDJkUno4bWNEd25FbWVteTg4TyszK1luSEZEME5lMHhVWDhkNEFhTTlPOGc0Y2E2eWpvWUpHc2YrUFpGeUNsSVNCQ05pTGcvdWs0SWF4WG5Wd2Y4alRZYlErUFVqd1JGOG5CdEd4bW5nNzdjRkhTa2F4VWk4SVEvMmFMUitHU05GMTdxdzlPeU9JUzRyY3UxTDAweXhrSTh0emlaQk0xbGMwQUw4bkpOUGJVK2FkbnNEeHBsOGZic0o5eG9TS25TSnplUUVXcTdIWTFjNTNPMkc0c2RFMFlTWm9tb0Qwam1oYVJCL1hzVEZLd3dxc2JCbG5NdTJ1MnNlVC9xbExld1d6azhWZzF0SjdnQjROOGMxaEdpaWFGUVZkQzQ4R08xWDByd29yZW9IcmVwSFRYV3EwbzdzMVlka0JueGJwRTJWZktveCtaOHhrWkFMNHR1QWFiOE1penZiVU1IWHRVNXV2dkI0cnRZcU1zRkxkNXBSQjJleHIzaTJqc3ZxSGp0M3czZDFiSVZOdExBZ3BGNlo1bkQrcml6ZzlacVF4M05uZ3FZbGdYVERXRUVMOENqRXRhVFBnVjRoR3V5UG5ya2lERUkzNWxCTUUrbHV2d2w0eGxSZzJxeldQRlZPc3c3aUJJdTJXcUYzNCsxeXZVZHJNS3FWRTdoQk91MGN2RVU5UzVaRjVUaGdrYlRJRDdHenFiRHhvVXM1eHBRei9ONklKSElVS1BobGpKUlI5RHgyaEhXemtwL0pEelZLb0Z5bEt3YTBqRWtxaE5UaVJWeTFFaTRSTGQvL0pjVytxYUNKb253Z2lmRnFGZEZQcW9lTnJXNTFiS1h2d0xMc2hpNGNhRXQvM0xBMWViSThCWisrQWxxSGJYZlI3SUJCWXdlaXdYRk02UjMraEt2M3A0blovMGIzOG52cTQ3M3FMUlo1UXdpYS9HbUZYeThxZVRqT1Nidlcvb245REE1N25ZK25kRERsbUFnQzQzTjcwYmtTNzA3S0JGc21rMlpjUlNZdkRUVUdyZkN5SFdYSUxDSEw3M3RuTnVNNjRiTmQ4d2wxSlg2Y0tQODdycTFOM1FHcG9CeVdtRHFvbEswMSsxYTNsVGh1Y2ZFVm5HeUw5NCtnOUsrc2NFTGE2TS9LQVBYL0pWcWtRYkpOelhISjFqTDk1eUJoRm51bEdXamVLYjBKejRKakNRenNES0lmY2x6Z1YzSHlsRVc2NVRyeldFNTdPRjlsYmFhbGthZzgwa0FLaHRMbWJFaTlITWN3NWVuSSthQlArTDBLR2h4dUd6OFZMakhVVktjTU5QOHRlaURFVmFFU2pLZXUxdU9pVDE2bEdVeE9XL2xVRDRGWm5DYld3V2RlcG1GbW1xTVJQZXFQL1d6a2FLdWhOUVFYaFhyNlBUazJrYzZEWGlhNGZxTmY3dGpPWjR5L0hiZG9jNGE2aldPTEdVaXlxb3lxNlNPR05NRmZvaFBaaWlrdjhoc3VNd29SRVUxZjJlMFBOVnV4d2Q5Wko2WisrRFVRNmZhWmh6bWFwTm1IdTQrNGpZQVJIZTY3N2NuSkZ5bnozZG5IRXBwekRNNFdaZExDb0F3NVMwN3hMUk5aRjNrOHVmT2lCTnB1M1FBYmRicDV2T1huZTd4REhybkhhQU5vNDdBMFFHT1pNc2t6cHB0bE5ObTIzYVYra0UxYisrR0VITGp5QnNqZzV5QzRrS21zVGZUZlZSNUluMGlaWjZYZHNBcVZhenhCSG9zUkZhVUdXeXlGUXJSRnFTNExuaEQwTk9vZkw5b2xiVTV6blRKK2R6VU1makZzbGhnQVpIZnNLVFhlUUVPR2RkRzRmZUdtbmYxMVltRVZsbFJnY3g2NmxNOHhmblJiUU9Eb3pJSkRHU1A0SW5lS3MvVDBMSkYvOEp1b2RjUDQ5K1hLMXMxd2lMQlNMbWl2am9aZnUzMCtzNFdRcE5iSzFCZmFMRVdqNXFqY3JxMnB0V0dBMWFGK1BjTUpzK3NJY1ZJVzRaMFpHaVBVdnJKRkRxUmVWaFZQYWFQUGh2V1lUdU1OeHRWenJTWmQvZExJZnczMC9mcjJ5Mkd3dEdtVXlEUnRscHdva01UNmN4RnF3SnFuOGZNZnI4c2lMdkhFdFJsTWRNbWt4cThPVGd2WGRNT0tETnlOVnNxMUdPYUpHV1JqRGJ0Vm9UcXoySFVwUGpvNWhHOGQ4VGNkVUNLajU3NW5MaG1lU2lnQnNBcHNyTEl6ZTJEVXRCOXpPVEdrRWp3THVWQ0o2OVpoaVg5MDczQmdXcllISU5jN0J2UndXK0R4RTRNbVF2b0JXMENFN3JJdGNCeFVtYlRJZGhaUjJVMW55UDhTMC9qWVNYQ2ZUbXZZcmdRMFlROXNla0ozOXpVTDNvQ0hSbklDdzQ1d3NjckIwN2szdHpFeUpBTDR6WHBQdFZpNUlWNXNPRmpJTkQ3MzZGcTBvV2lFcUNRL2RMYkJubEZ0cW8ybGd5NkhUdWUyVjlEYjZhNytQUXFLNWdhWnB5cm1pbmlvdEpWa3N1cUhaNzJWSXlpME9MRDBYbkdjT3NzMUQ5ZEJQNGhQRVdNZE1sU3lyall1TkZKSEFDU2JDM0QxcmdPbWJBK2k4cFpNRmRQYThxT2lwckpPenZNZVpORXF3R3A3TTVJaGxaT1hGVi85Ry85RE9lVzlacktVK3pBd1dHakhwS290TlN6Y3YxcmtibVRsNnJkT3p6WFUyejBzZnR4dERpN2ZxcmlyVUhuMXA3ZWxPakhhSGk3bXlmb3cyWmlpSWlYY0tab2h2WUF4NEFxYUJaSHhrZUtwK3RZMWtRUG41MC90Z01PNVR2VmE1MlpJR0xzUkRoTlR4dUFPQU9vb1k0a0NsdzBjRGNWMTVUYTlpMmhGam9NT3FTRE1sd0w4VnpiTlJzd1RpempSWU9xaXljZ2dIZjQrKzRvNHZnUGJxT3hkZWZ2N0ZZbXdZWFNDMEwrV2RDeGxVdGJFMXpEZGVnN1VXZnM3cE9KQ2RRak5FQmorZVdhZHdpcjhYYldyTGJsUmZQbkt3cmhpUDdzNjZmaktsK05CdlMvZ3lFQmJhMlVMYndTdGZUazk5emZ5ajR4MmV0RWJ5MkFKaWlDcHFGSWtoK2lMUUkrdllsNWxiVjUyTVZwbTRyS1NhenlFM1d4VVdyOTFMbXBwa3paQXpqT2drdHQxdEVJYUZ1UHJsVHhVN0FTM3RzRnlOakdZU3ZRRjR0K2ZNdkc1NjZWaUVqZ3Y2enVZU2o5Y3RUNkhFaDRLSU95djgyYlpkUDBYN1NNa3EyZFV1WGNTYURZZ2ZaTmRWeHZ1dHFzL0w2UFlrZWUzUVZXajdTRXBlanQ3OHc4V3pEcWFyQ1VCMHJzZ0NONDFCUzcrdUZwNGR6NzVLalFwWStBK2Jzd2NlbGQvRDRxZmhxUU9OOVUxRERMcUtuSVRpNExBK1VvMEhmWGRHNnBtdkZiZmtpckZIZlFXN291eDRpMHRydzVRQ3krMG9icEJDaS9sU0dTQkllQkZwN0VQRktNVXlDeUQybkVvMEMyUnpGeWQ5SEc4WWVQaFpTUlRIZW0zMmgrd21GWEJreUdGclVJVWtIRGt5dFdKODBxQWd2dll2ZitJWkZpM0dZb0dCNDNuS0NLU0E0ZGJlV3pVZmZGSzVjekxFVlRsWEF1T3BLdHZYQ0pOSU1UV0hwbXR6eVJXME80SVBxS3hDL3hJRkZ6aWNaZ0VtVHNlQzlDUkxnYjQxczMvWitDNm9xN1I1NXhzSE5kTWN0M05OVkVuY0V6V1BmSTdoV0ZwYjRGMjgxcDd6ekhIM1FIcytTSmJadEJBRjZxVjJTeGVESE9SVTJIZjlTL1lEMnpYODArSlhiOU4zQmNyQkhOY0pETFh4UjZ5REkxN1FJbjV1emhyNE9oK1JIOHVTRUtWTHZNWksvb3U3K1poeGlKUjJiUzljR3Y3L2tJZ0ZtVEpNVHpHWUl0RjhjbnBBZkp6Wno0Tk1WMytqLzZJSlF6blZoRy9PNHRBZDBjaElieVZhVzhlQjEvK2Y2YkE5VE51N0lyZnBRWm54UzZRNVdIRGJ4emNjaU9MeDliVGFYTDFtVVJOK25LVWh5OGlydmoxOTZJQy9VcHlkRjZZU3laZWV2ZmI0aHZyeGlYb3RvTTQrNVY0bnY5SEtjN3VVNVk4cnBwV3lQdE9UU2FlRkxjTzQ0TzAwb3NYQkJrVW5SRytQUzBSK3d4UTdMTnhvUk9PVUhhRE9hZDNyK3dQY2cxM215T1VOYk9CUGRJclh4Szl5dHNGeDNpWTFGeURSMnJKenR6M1NhaGZIRmZ4dmJHMDdyTGlEcHN6RTBQUndtdERrc0lJYzVHYU5DcUhkdjU5OGEyWDZXNStMa0VQVnA3QjhMV245aFphU2ZIL1NJZEthdUkxKzY1V2R4L1dKeStyVFBSeEJaQjZDNC9FdlBSSUFQTFhlNGNSb0dsU3FhSi9pSlY1NEpucmVmaGhwUnY2Z0xkd29MVEJ2ZDBsUnc2TnYzUEZoMjFDdWtKZjBIcnZnODBGak5icE9TbmJuWVoyT2NrenVpVlZydEkxb3Q3UWlBdEl4aSsrUjNpY3pQYWxHNTlqTG5zeFFZR29DV3pZYTJuZUZFdkVBWUdQYmJaU2J2UHN3dVNBdWpidEZkalU5QnN0MDAxR0QwZE5iejN1b1ZPRkVDaVNvOGw5RGEzdDJCOWR4WDhKOHBaSXpKRDZ4WVJJaGxVcnlkVzYyYXVEMEtHZ1pCQldRV2ExRFVPbExmQ2grNmhzZkhqNnFyKzk1MGQraEEyYldYQ0toaWdQeDhZL1pER2hBTUY4NzBPQ2l6eUJXR29LU0dHaDRFUFJQRnFSU3FZZHVCOTdsWnBTQ2F6RENEOXBRRkRnaVhqR2E2RzBTYW1LU3F3RGtzZHgxUWJFMWp1T21scG5INThFNWFLOVFhaDZGdVdRWS9jNHpsSklMemZFc0ZJTzN1U2hNVUJPTWhVM01QdDhoMS9MQVBsRlpkaWN1dlFMdzdJekdORG9rc0dMREFPVXMwbWlMcTZWSGZGT2JGWkRGY3NxK0ZjaUNFRmY2ancveDFsSlV6UGUvVDBheUtXTmZxL0IxNWxYVG5mZzFRcXNOSkxtOHhQcThKdWE0akZIMnp6SGJCaEI0dGNEMUtKMjZnU0d1MEVVMDRndFRtVERWL0dCOWRIR0hzRVZUQlpoUE5MZnI1dGQvME44cmUyUmtQMDF4TGc1N2h2T1hBZXBrclpWRDJIUlcxdW94ZlAxSG5NN09ISUlKN1o1VWc1Rmw2aEs5WHpSTVd0VnBscmc3b0gwMGQ5cHQyQjZQSkhGN0tVeVZ6bFovYTRqNzlKZ3dhVkJRVmhkd1lOdDk0bFovZFQxSm02ajFncVhjK0p5NHA0aDZhWndFOFcva1lxbnBEMDAwcFZBMzFHeVJ6VDJMTjYzQS95TWQrWDd3OFBjUXJNYzhkTjFXenBPNWhMUGpENXJBbTJhSHlQUjZEWlM1Z1F3b1hmeVd6UnRnSDBoKzMzWmNOenlkLzhidWh0S014L3FZVlVMVUFIOTZIbEZTK0xiSWdnRlVXYk1SQkxLbk0xbGhGSVQ2TUEvSmVlVE5tU0U4ai9DTXQ2QlRpV3U0MEt0b1YrZUg5d2hMcE5Td2ZZWEo1dVF4NXNFWVp5cGVRWFBqR2dYb2NORnU1NVU1R1ZLTnJUcTJVQXVLNTYrMUhKRGEraHptY2tCWWFsY1Z3ckJjY3NQL2JMM2pleXU1MmYxUTNMd1l0dElWSEhJa0VXSzFLcnE2blpxVndFMDVPNFcyS1pJNnQrTSt0dG5CUW1kWksvb3kvektNakV2L3RpNFVEUzlqUXBuakRJb3FjV1MvRHAvMXBlUDFsSnhna2p2RVVTSTVidXpTeEYwRDExMGY5NnB6QzV3WUVkVjJJM3ZOK2I1dTR3UTNjUDRta1dNd2ZCSy8yYzhUZnlNQ0pvM21QemQ0Y0pibm1xUkNwV010R0krQ25jNi9CZ3lnNjdmVHZDRUNmNW5KL01xMXMxbTJxNXIrQjQ2QVI3TmRiWGM3MlpJdEp3cmVyL2JxYnpjbHp3cGVzSUFVMGlLRzFWeVBDMmZxYjZKSDd3SC9GdzdJaVNxU3YydThiaHpyWExoUGpyWDluQW56MUxLbjNEL0Q0Z2ViWTVwMFdWdEE4RDJhNC9mNWdscUZ5RkdUTms3T01BY1l1WHVsYWcrVDJzS1JvQ0F3ekk0RU8xR1BoZnUwNEMyS2xEanN5MTkyVHRQVnhmd0Q3ZlJWcXc4ZkhZWjJNWm9qcjFjL1FhRFhCaDROOHpoMitDL2dTUW9MYWdJTnVTTjVBWkRiVmdxS244dkxxdzNBcFRUTDdsMGM5LzJDYUppV2pmbGNEdmNiZ2VIVTA2VkFqWER3SXV2T0RVTFJUZHNyY1cxWExubjBXdmRpUDVON1Q5QjhVR1BGd3o0MG0xTWk0WjBXMnp3K1RMckp5NHBpTDZObGhGZ2hBZ21ob0pFU056c25DelpTdXljaG1GNlY2ekplOUNGK2FXMzM1S1lHZHFxVGdJMHJlWkoycXhUMXdWRHBoYStnbnlNd3I0TU9XR2FZM0JvdUlZUXFDYkp4RG9CSjJ0cjFVSW9hMnFEZUpaSU9kL3hjRHRhdDh5VEU4MkxQUXJ2Ykg0TGxOQWRWMHgvdWU2SVRMTlJWMzA0TFAwME5UYzFpck81NVFudk9XdnRXVWdnTE9rdWRPMDI3MGMzRjdBTERXR2RUMTFCZUJyTHJsL0lTVTE1TjNnUFVxOWNWaWRTNkhxK3NhZFVxdjl5VWxnejVOZ09KSVZQQ1hnaE5GaVIxa2ZYckl4TnZ5UnJJRU10Q3ZyY3JnVE92TDJsZW1VTGJkVERwc09EckkvSmZzS2ZKcEdhY1hFSStyMTlDaW5mYldxa0h5aXVMVFNsek0zN3dwQWpHUnFNWkR0Z0NETGVBN1JBUUI0eEUzTVN5c1FrU0wzeDVjaFp5YkFhOWRWN2IxZGtwNGZYdktyQW5FQ2JJb3Z0T3dpNEtRV1p0eG5xYVMvVzFYUkJPZUFrY3VkUDRNem9MRjNaK3lkNjdFSk1jSllBN1pMcG91M2NsZWZtQUVTMndtVnQzNDlEM3UrTEI4VnJUUXNqajRzUmVMRkVtVTE4V2tXcjhmOUJNMG5IR1A4eE9UK05mYmkwcGxwZUpCRXZkWkltYmZucjhyMzMrZDA2UHdMQXZncmJHWXVjWTNLejlUYnp3Yk9USTlib2w4RU9HbXc2NFlEd2tWczFucnZ5U0xiZ0FNdHFINUpQWXlteEx6TS9namFHczJ1d1N5NE1aaXFnUE5lczgxWGJWeWVSdlBKU3RqMVNPM21OWDlaNXJhUEFCR2hLWmJ3RlhFcTA2VnJQTnNmRVM0cDczZmhyZ203SDdtOXlXL2h4d0FWeWx6TGJBbTR3Qzg5UUxub1VJVnpoYlp3Qk1Ra1RIalNLZ1JWUEtyblNVUklNeFAyYnkrcHdtY0tXVFF0dWF4cDlOc3NiWmFMMFd5TitIdk1lZHduL1p3bXpVWUt5ZGJiUG5ZeEVTTjJCWXZUald4TWtCUDhnQ3FSVFFTdXdUbkU5WUZpOGJFcFEzRElZenJZR3lCLzBNOHN4UENKYTB6a3hud01wWXhtNjFKazVLcWF2THF4YkNrbjhHQjJlNkhJcngyZVc3V2hoZ2tlcEJ6VGlySlM5S2VLWWY3UTJTckZTZFh6aW5rVEM3VGdQdkxEL1NGUGRseGNrMkxURnFoZkVCNGVxOTJQdncxRW83dzl2NHF2TUZxeDY1TktMSHV3Z2ZUUDBmdlRtMCtHYUl1czlETEwwQmpKd2R6TTB0cUQwMGtsUE5CempHcG9DaTFRd0xka2xVWHRpRG8yM3dPaU9HNUo3eHFxbzk3anRma1kyUjFhaVRkWjd0WWhLYVlQQXlqbnVETmtRRmtFdG1IUWluSmJrNnBDS0ExTTM0SnMyenBHSzJEcnVnWEFkaVdlYXNRRDZnVHpYRGRQWFR3NzJnRjF2Uk50bWl1YUZkWlFkTjBPYy9zQ1NYNFUvRm5pUFBrd3hOenhlYmJodWhXeWkxSmRObC9lNzJNY3h2YTRqcE5qNVZZRkpRSDdPWkV1VXZ2aUR4akdLQzZlMkJpOVh0bHNaalkxSUtxMFNDM0ZwaUJhTjNnSnFPT1IrUlJGYmNROERHL3VVSitheGpyTTczVXRvOWFGRTJyNWc1Nkt4MStDNDRuTVY2cWU3ZzRNTWJwckp4TDR1Q24xdExGa2czUGpaQnBCNnlBV3FqWDByelBoMWQxSk9PQ0tYb3c0SVU0aUlRL00zM211WEhvejhFVndld01GeUhOVEF0NTRhd2xVejZ4R0MwNjBHUlhiSDEzT2puQ3VvbnVOYXRDVzduSlhxbUFlalczaWs4TTNjOUpiK3dlb1QwSklSMUxrQ3MzYlJ4eXBGSVZXNTJVajQ3clBBalpDaFVJaitMWUhaaDRSWkRaZFJDTmNLN25iVlp4NzgvbUM5QWI1OXhXaExxOVZicWV0VHFFdnEwclBXTVJneTR2QXJlN1I4Y2s2QkRSK0owTlQydnkySDNMYmZNWVd4Y212MlRYUTRDQ3I0YWdxRU9FMVBGaW8vQ1pqSjJpWkF0YTBvVE81UFJ5RTk1SnJ0UENZdUg5QlBEaWJXeG03WDEvOG5wTHhWZC9WM2JCamw3VEN2R2VIWDFtaWhKNndGOXl5bSttcU92MGlMcVM2OTM1WFpMYzJ3Ui9VWWExM1dSZHBoVm93OUh1M2g3Y1hubFVtNXB2bVY0NHRMNnN3OHR6endWNm4yZlEvTEY5bnovUDhKSnZYeEdCdzlqWk1HeGF3M2IxZUtHb1JkZTZIOEhPUmxlaFZVaEsrNHY4VnBZbXJYMXlvZ2lONGJocDgrZ2VkeVlXY1dZMGVzS2JQc2JpeDdUM2FyYy92SzhFZEZPK1FPZGRHMGxra2lQMzFFVk5Oek9oMnBPQUttNkV5QmhzLzVnc0k3c0hkVFIxY0l0SkdjN2pkUXVWR0g2aCtPRGJFdFZsWWphSUFhSDNLc0FnODE3cTlSVU5zdzhMSmxaMzY2VTFGRFBYcm8vWGJrbHZnYTF1RFZqb2RjVnBhUTlsYnlPem1MeDlLcmlaQnh4dTk3U2ptMmFiUGdHdjlJSm1PalUyOWdxTEpmbTVtaENpV3FmU2NPSldyVVE3WnUycmxndTJkc3l3Tk9TSVR3SHRYTVh0a1BYS1pJNEpBcU5veVJCUVdqVjBPWVFtVFNwemg0Sys2d0NFMjBZSFlRZUlrYWdVWE5oV2g3bG1wcUFDWmc4VUlneTYxa2UwYzROUk5JTGR1c1MwS1hrYnVvR21LUWs2bUZRUDkvUy84K1YxQmlmOXZwVVd4aktMODYyenNmR08vL2VKbERpTitEVkNxMmtaemRiUHZOTmxYRndxdmVxdnRtM21RQUxxSXpXMnR2bHNZSWEwVW5oUlpiemp4aXNMUm9sOHhzVnBUWUZsc25GbFhmQ2VsdUtMQ2tVb2lOSFM0MDdsTlliN1Z1L0tBbVRyWXZyNnNQSVhRQ0hpK0NZUVRjeU1aUXpHdW53QllEVGNNc1FheEVFSC9WM1R5cTZsUmovakhEQU5KMk5yWnp6QitzWVo3RzFNcnRJUmp0MXNRZmY3c0hxL1hrMEp1SGNUbW4yLzVVMTdCRktrdGV0ZjJ5Y1EwbHNOME0vWEJxQVB4and5OXBId2VMblJCN1hKYWJOY2lSeGRvREFiSVhSdG5Yd0VYSkpjZk1uSVNJaGt2cGZXWW45bzVpTEhWVXQ0czlqcEJJNXYwMng0VmJ2RTQxcHFPY3RaMUZhbGptc2VSLzI2cmxBbmpwNTNxNXlCaDFrQVlBYXNFL3ZsMzNjbHIycnNDSzZ6Y1F5ZmgvTE0vVmZoaVQ5UzViemV4Q2ZodUNBNDU1Mk1OZmZpVXdXOWpvOTdhcEZjU1QrdllGbGswRW9Gc0liSmp2RUpid21YU3NRWG95RXJoZzBWNTh2Y2pFUTRWL1JiMkhRR1AwNjluMlV3ZHc4TGpnSE5iUjlDbGdaY0VUdDNEK2RHN3RIRHRLLzFsaU5xeW8zdjlIU1ZxMkRnU0JTU0xwcGQrQnduQS9WczE4RWxmNUZleDVrYVNDMGF5anI1RDJiYjlzWTdUZm56bjlWSGY2WHkvU2REcnVCUjN2aENYZUU0NU1FeThDY1lGZ1NhRnhqNXE4UGZDSzlYcGFUUmNuQnd6M3pQNENGUnZTTys0ZEoyR054SDFaenh1SGNPNEhYL2ZpQnhtMHVldFh1d2sxRDlPamhnYjIwK05KaVpwbFRYeXJ6NTg4UTh2akJvaTFiOFFSZCtobUliZTkyeUJhaHhtbC96bklmSDA1VzVFZ1ZKWERPYjZUUTdROUliMnpmUWlNZmZVQmRMelBtL0dKYVVzQmsyUVFoQU41RGpKUThmWFV3R3BoUGhiUkdLVzIwYlJHL2krdGE1YWN5ZnBJZUJWRXdPMDcrRVZDc29pMGRuMVp1Rng5Z0lqMTlneWdUTEpsOUM2cGVHMlJuc1pzKzY1OHJ6Vm1nQ2dTRmNTZjBlTlgyblAyR1FOV3kzb0owbW1YZTBzS1NJYXZobnNrUmtwd3VzRkJDV2hZbGREd05RSWE3dlV3NWg1THVvZVU2dVQvT1VVMzFRQXZFYXI0bGIvaFdXVnYxcnlOK1pmSWVsR2lXV1dxZWE0dmVTV1lXUDhXL0U0YzJFS0I1Y0E4aHQ1WHFIM2NrQ2hEdnFOcEQ2S1Y3bC8zZm10STlEL0dCbDF4SVczMUNFSzZGdmhPSDg5UTYvRFNndVJ6cHczN2RXM1JqODZpYTdKakF6S1cweVA4SUQ0VGFXR3J4REhTWWd2eVZCMkhsT2ljb1NCNUFqYkh0amk3b3M5cU9MWUpTRFB3dG45cXdKTllaNzVDMnNSSHZzNUY4RGp4YnJZNHdra0JsWGNsMm5BS2gxOGJaQ1RyWDRMQ2xWUXRQK3JkSVlhQnMrd0tsSXFITHNGVll3TUV2TDJ5M1lYU0g0dndUcm1QQzRCMWNFR1NTSnlnV2RxeEZQbUo3enY3TTUvS0R5S3dlZ1ljOTJxYUl6RWlMekx2dXV1RTZCOFBqN3dDWlo0UUhyUUVDcHNIQTVQa29Va3p1ek9SODQxdjNkR0pVRXowQllxYVN1VFJQSk1WTXh3Wmc3enZpNG5SWlIvU05RMWRncFN3RjQ1QkdxU2pWekQ5dzVKT0pxSkZGTzg2dGVxMnFBUmMycUJIbXEydit6M1AxeVVQSG9rNTdNL0IraFNtMXkwby9OS0ZQa05iYlBrRVkyT05Odjd0SjI0KzhZZktZQjJ1S1JBU2o2ejBCQ3JOWWwrOFhPeS9tZzBKUWNGWGhUZm9NeU13QVA1RUtSNU81QVBxejVCVXRNbmRjTG1hN2sraExHRHM5Wm1jZWtFVGFqdkRMa3E5K2FkTHIzZ3JxeEY4MWNzcDlpMkQ5R2JlNW94QXdqREc5dXpsUmwyNkl3dXpYM28yclRKTUQ2MCtBK2JsTWtUckxpcGRMeVp3NzM5SjBtcjV6R2NzUVNsM0lwNFdueFlwdVdtSHNDaWVKekJPQjNob211MjZjQzdtK1lqQmxKblA3SVoyUmM2bTZSbFZTMzdYNTJBWi8wUmdZd1RHWlRBaEFzLy9SQ0xGb3VQQ2F1dUw3WXpocUZ6Y2JpQVA5VVNPYW4vZERpQmZNcEZ5RmxQSnh3aXJCWVppbnhLOERTMGp5cFNvRnZ2dVFOTWo2czR5eUxjSElZcEd1Z0Z2ZGlJcm9GZGExM09KZ0Z0WGVobFp6QjduS2pmbmF6RThJdFIvemNDNU9sMWpraVR2Z1Z1YzJPK0o3dlFkekFCYTIwdVh4M1piYU5LWXpLREVjejNhWWpTODNuVkhYUzhXb2lHam0rSEszNDAvZnVuVzNaKzFTNE9rV0lLbm1EczVZQ2ZpYWl5SDFqVm1POUVOejB5SXdPRldkdVd6V0RDazhjNENkVTdyS2o5WDJuYitqQWdKRHJaanlHbmY0MFdBSVNEdG1DbE5GeU9ZN09mOGc1TFozNDdhU3FFZDgzREcwZ1g4QmM3WnFDYUF3RlVvWGpFSm5ndEhoNk04UmI3MUlvaWwyU0dqcWxGMnV5dXVrbEprajBqS0FBdHJVcHE4cUJveG9WUVJ2USsyZ3pFWjlESUNPZXVGZkhrWXNkK1k2K3F4d2RVNXNXcVlta2V4LzN5VVhoc2trbEpYM0xjY0RFakZoZXRIV0tyL1pXc2Njam1ZK3c1NlBPZEdGdUhzYkdTZWN5TC9QL3ZMMFVMMWpRVFgvaCtXM3k2cnJqejRHNDlFblZ0SWdEUkJza1dXd2NOaTgzY05CVzVYaFhtR2ltTVh5WStkb010NlFmcFZCQjNNVnN0aE9CZlE0NmliV0p3WDV1WjJCcEJEZXlJZzBPWWVQeU8rY01Ka1dLdWlHWWlLMW41WFQwblQ4SW0ydGhjeUV1VjZjN2NYVXNteEpSWFg3YXppSGV5aDBGOW9KRmJOUExVZTV5bkw3bHRqV0RLMzJqSDZ5bmtGKzBPbmdsMnVQWURSbDZ5Z3BWTkFkNitKMTl0MEovTE1pNG1PMTloZHc2cTkwazBxU3BaKy9TeGxNMFE5VzY1MTJtRlhZRUZnWUNxYlRzSy8wYlBxa0hCQlBtVSs4ckRjWllaVlZiY2dHWjFyZGZId2FxYXd3V0VmeU81SUw0WVNtNXZLVmtpUXI3WnJUZmRaNTFYTndFSDlxdDZ0cEZhYzFOYjZUcHlJV1M4dXJuSDNNMzNFNHdoeWxzM0g5dVhhbkJVczJLaGhZYjFjeHdnZnIvWG8yR2swdWgwSGQyNkx1cWlYVHREcTM1LzVBRlI5OE1EVGFrUFVpVXhBZjZVaU5IVU16Si80WVpZOE1PS0tKMnY3Witqa3FDaFBqM2ZCSzdMUjRLYWNVdGFCZkhJSjdSYit5NmUrQzVKVHdvZkI1eVhlbkNSU01pTzZ2ek1DNVFIa3NXZWxYa09PTmQyeFFmVExXVHNxRkpGWFpLeDE2QXFocktWcml5Yyt2U2lyK0dhN1R3NXVMaGlVZDZqT3ZNeXBhK01CSWM5M0tvRkQyK2RpVlF3ZmFmVFRZMXcvUk82dTBiWitrTHpPSnFTTktUODhPcHd5VmpnWlcwVGVRYUNqM042Q2NueTBqUk1EcVhRWGxXU0l3SkNRS0NjUWFpMnlNM3ZoNTdObk1KSDQzMjJ3RlV5eWIzVCtKaTlZNWJxUWh4cGRUK1YxWGh2ekoxU0FoNmRzdXFLL3VHUGRSdVRaMGkxL3pHT3V1ZE1wdXFJSFBGaEV2anpJbHNUYkx0ZTJqOFk1VkgyR1hKRlpYTjhWWkxCbTA2OHBhRjVINzNTSHd3V1VQUEw1SVJ1aWZrSmhyWjJRRksybTlzRlllZ1FSMW5yR2dic2RUNllldE5hQ2VWZUdTMWN3MjMrOFhYMUR2SXVsTkFaVExnVmRybWRmQnp1azBKN1VURUtkaEk1azhFWXViVFdvV1V3dXg1WVEzejRkQzhkVDczbHE4anFwOWNNU2lFTzgrN2oxNGFFelpiN2xEZVkweXBLR2xqcG1pSmRuS0Y5bUllSW9MS215UHZBVnBDSFlZbE5jZWlrUkl0dTJZYnc1bXpVU0tjMm40b01GMzQ5N2JyWlI2L1NOR0tNT0IxSVM5RlA1VS9iNWJRNVJrOWp4bVdDODh4TnF3VHVlVmZXYS9TdWxnWm0yaW5CMUEzMjNVYzZUanB1UTZocnA2YzludGpkVEREdkZ1WXJCUjR5NlRuWkY4RVhuTE4rUk11YTdrWFhIaGpIbVVkU2N5eW13cFZ5bjRzUlFkNjJwSXRIdFRpL1B3M1VlUjdYWWNqdzh5SWdBekFlbVlITWh3d3FQSlh5MnI1MmVpbmpxWmZQNklPVVRmaENTQkxzeHNVZzdTdVJnTW8yaGR4RmhCR0xxbFBrTHgvQk9oME5UUjNWbC92STZzUGNwQ1V4VDFMTktYTUpTak9DNStFQWdQNk1BT1llbUlxeW1BazUxTlVJRlptbTdRaS9kdHh4Z3MyVThFZ1Q2d1YxMWp2Ymw3S0xXRGFYblI0OUgwenJoQ1YrNWFFekJ1UVo5M1VqdHpnQ3J6QVpvSVJMcHpKZzJpUVZ5cUM3Mkw3VDVsYndvOTRXRjQrQ1R4YTZZOStGcmJGVzBDbUVPTDF2RnhXVXNXR2JTanRHL013MXV3ckU1TUp2eTNhcUZmZ3RhcG9ydXplRnZZSkJoVTZIT2F4RUw2UlAvQjVObFliUXQ4RVIxU0Z0MTNIdmVVQkp4SUlzYnJlTDBkNTUzYTZYck1ydmI2YkQxcUdlWVN3Z2J1UHQ3N1hsb3l4Tm1vWGFucFZTVW1RV2xFa1hsb1dZVGQyV3ZsSGJDTUYxbWdwT3o2SDRBemw0WDRIa1BzR2trOG8yM25zOURKTHZNQkZ4dFNIQ1V5d1E0N3hPTGxkejJEam4xSkdGNjRKbFZwOHk1dHNlQkJXNXg0cE53OSsrWGVYYjRUU0psMXZPY3FKSWllUTJMS0dHZjNqZXVrbmZkR2wzQldBa1pHLzFYaTVHeEdKc1RZZnFGVGVIRzFsNDI3UklYWXNCWEZac2Q0aEJpd1F3RTZOQ2NqajdYY3FEK2pWNkZZNnA2WDJtYmRJdGRBcVk0MEJRcjhkUVQrMU02RFFNU3lnY3pZVEo3SVVwN1pUaXBPNklkQjdXcHRnUFFmazgxYWpINW4waGRUdXVYZ01pbVY3Z2c0Z1FkTWtLQWpDUTF0L1lLbFNCSjlUN1BzWjBmN0oyOFVlV2pMN21hSXdWdWVVUm4xWHlIdW9nYWJHdis5SVNEQnFnaldKQWJ2ZXJKemo4cjh3d014OWs2RkQwWmtaRW82bkJoNFpKUldDVUcydTJYOXFBN2RJeHQ5Mm5UWkwrZTdNd05sRnRuME4yd0U1dmJsNktDTzJFVXMzV2FLSWlHaW5TQ2Roa3k1S0RYdG12VDNRTHZDczM0dDFyM0NOVk15alNGRDE5MVBaQUdJaTBYdUhsTUd3enFTTmtZRjRTM0NNRVRVTjM1Z2xjdVdwU0pkREVzcXRUM2ROcUJnbjgrT3dFWWM2OW5qSTZPbG95N2ZhSkV0VWtWcEZrQnp0S1BLZUFhZU56OEdrei9hZXpEL3hJYmFPK0dKajZxc2g0cGUvVDJicDBtb3VVSUg3ZlhDa0dOdjZ6eGdsMFBaRlVsRHN3YWlGUytUc09aQzRhbWt3S2FITHBjQncxeC9Ncmg2ODNQc2VzQ3Y1TWw5ZFFZRHVwamJpbDZCOGRhcUJLWGI3SmVqRjZOS1prbjVoem82cmVISW14Umd5akRNVUw2QmFyNmtaZHI3K1ZZVVl6WngxZk5ZdUZybGl2VWp4dWc4K2g5eUtBVWNyUllYMXl3VzBpbzZMQjdteFJSZy8wZjdubnNjQzJkM0tFdnVFRXA4dXhOd2g2d2N1K0ZlM0wwS1E5cXNKUU82NElrUVFxU1VBTHdsT3hMdGVUeVVzY0VjdTUycEF4WndjZ0RrNVpyVG9WNHJ6TTNMVEo3aXE4Znd5LzZBTVNsSGtLaDhCYkRVM3k4bVZ1czZjRTRSQ3BzZFZZVG4vQUR0ZFhzbEo1TDVvT0R1VjFSdGliVDhSYzQ2YXZWbVBHQmgxRzVjckFlbTRqc3FJbnZ1eEt3bU56TTJSQ3VDbmxPK0JqUGRZai9VNndIek5KakRKelRHbUhtV25uTlZySkJxOXhkd3k5Q0NBRjlkazVKbFRlWkZwNmoraTB1T1RVbDJqdmJ2RzdYSE40cVhsRHNFRkh4bjY3VXlOZUYzUVFUWnU3L0g3WWloSUJzaE5wdHI5Rm81UFV3cTZJV0E5dmgwWTNSOTVOMDNadUxWdFhrTnZEditPd0xkTWc2NGp2NUtjRWxhVFdvK2tkVU1IWkd6NlkyRmxScDVWWFVqZHBhSmY5RFB5QVJxN3dNZzJBODVNRHNVZ2JtdmNHRk1tQkRQOWZKSGhqcUI3VkpqTy9NQ1FPTlBlOGhsQnRYL0lKcFRXOGhCRFJyOHlBRUtqSUcxZm9OT3JLZm5MYTFaRHltd3lMWDdwVlV4V0RaVE42RytweGRXUHlVK2dkTkN1aEpxbkppOG8yYXVrTk1lbUVPMVQxNGtiL1VRcGNrUmkxbFd1anNvaUNXcVA5TVc0amUwblpWNnhoZ0JlNkJTanU0ZW51c0g5Q1FZWlhLZ0JUVVVQZmM0TWRSdDlmOWRqaWdxVDdWUjBKR3hXVWNLcUYxZG9mL2VtUCtaZ21ibzVrUE5id29SZnpQcUIrbzczZERiU3JxTDJRU2ZwMFBFaE1EMkxmVzdOOFlIT283a2x1blZ5VlZHYzdLZnE4N2h4MlZBb1JpNW5qd3VCWE1KQkZoL0lydlh0T2pkUklWTThick9FSTVYNnI4S2lPQTRWK3NjUFA3d0toNHBPalE0YURTbWRDYUtHeUNnM2xsWm9aVVM5eUp3NHhkeWxoZXA0THNPL3p6cGpkVlJuK0lIbGR4R0JRdzB4MXpTMGdVeHVyY1pjTXFMMW54WXlYK3BaWDdkZmE0clg0c3IzZ0tTS1VTRHNoK0NxSlNxbHN4bGRjZmhTSlJNWUJjdUtZa3BVeThkbm9KZERLVDV1QXNLV0lmaEdhdnVxTXhGckYyd25ySUl0TzRDL1ZPMEtQSUpWRkI1VE1ITmlrQWFXZmd5bWxXaFVMd3JERXIra3g3YXhaZ1pCTVdzcHN5bUh2ejRnRHYvZkZJTGgzTGE0TlhwZ04xZ1dGMExwSWVXVWpvMElOVXJMTHRUbVpMU2wyanpXRUdUR0xTTVpJSjlPUW9FcXFmTjlab21tRjFQQVdFUGV2WDVIKzFiSTIzV3hacXNDY2Y3UXpTSENNZmdpNGZvcG5tRGIrd3NxVTJOT1pCdS9lUGdXMWxlTm1mYWRnK3FwK3VKUlo3WjQ0blpnRWhpQm12TjYzd1FiaE9wbGQzZHpTbGxCZDlkeFlUNlVHRktrbmNLR2hBWEJOVEZCWlJFcEhieWdRaWR5bGF2d05NaWRBdHF6U3JiNWJLRit3UG5YNVZ0Y2E0cGkrMksyZmRlbWpBUjR0dEM5K0V4K3A0aDFSV2FEc2tmbyt0YVFpOC9RK1pPbCtGdU5IbkRmMjlLM09iRlpqaTNQeEM1a3B0RnVkcytOWEg1WTU4bnJJN0JTMnFaeGR0M2NoR3FCcW93NXo4MDc4VDFHclpRbVl1VXd1NFU1Q1BrbVF2Vnk1UGtmY1NUOVJLaWZEK08wTGl2NzBTZW9pSXpJSE5qYmFvNWlwUlAvUnNGZjVQMzk1M2cxY3BWNStmMlRjQnlJcUFZc3RDM2hpdVFmbkd5TElRdHFiYXIzQ3ZYRC8rbXJEQnduZVg3UmtCTmt3L0IzejM1djJNc1E0TDNkaHpHQ0NRM1ZpeG1hM0VvWXk3dmVZdmdNRGVqNXRBdkUzMXhyclBKTG9kUlJQYUZoWVFzWUVqUml6Q3N6U3BaSkpQcFlQb29uRjFmUE54eWdBZURQeU4rQlY3bFh6dE1YVy92WW5DMHcveGhvZ3NlL3UwVE51QkdONXgwUytRbHRtcEtyUFVyWUNoZWFpbGw4TzlEMW1BWjUzTlcwa25va1ZQaUg2N24raXdIYnN1T1g3d0xTN3ZLNTVNUDdxNytUVXQ0V1JOUGpxUmI1bk05WlI5NzlYdlFjcjF4eGNyblR0YmpKTzRiRGYyRTVuZzBveGFPcmQ2VzlyQzJvOEQyd1BLMXFYRHU2UGN1dVhBd0UxeU5JUzVVU0pvSjlqSTZYVG5LSmNqVnNZMVpTK2UrTVEvNGpvdHNkdkFlT3FvUWYxUmFEa3ZnTndDUTc0RUZzY21XaC9SK1g4NWJnR1I2WitocWpGTGNRaUh0YklvRlZRdEt0ay9ESCszV0J3dEE5QWlxTC9sK09mbHRSZ0Y2SGdxU09tVjVwOG1rNkxuV2kvWWl2NUFoZ0dxSHM4ZmlhcXVuNmFGU0lINzI4dzRDczlFL0ZiK1R1Qzl1ME5Ldk91WnU3aFZtSk9lRFB6eDgzZEpnd3pTZXdsaFVnVitHLzNvMlQvRU1UcVZzNVZZK2RHVmN3cXFnZlRqMFNOUVZpZGpqYnltQUY0TjhjNWNHb2J1ck92WjArUnZveGE0RURLdCtBNEh4dXBWbGw0S1dwYndkMmdWR3Y0R3l6OGRBZnQvUVNOYWgvSE5zV29UelFrVDVQVWVQNzEyaTkxa2I1VDkrV2YvSWNGV0JsUFhUTFViU2FTU1NPZVB6YjZOQ1BxWFUzWEZPRXBjSnNlNzlaOVFPS1BYbU9kcm02eEc2cUx1TnZJeU1pVnJYRkFNOUdWbTM3VjJpczFXdytXNStIWlErc1pXM2FERmpDT0o2ZUpBNXRoTGg4bmJUZC9JRzJDWE9rTXltakhabmlvK09qMW9hVGRPNEorZGR5Rks2MCtwQm5ESFJpWExNcjlyWVE0OUVGN1J4Y1NwWURaTDFqWTBxdWkzc3YxUVV3WnlKREhGYlB1N1BpK1BhSnN5NDRJdEN2SDdsYlJnVlpBWWRyeC9PcGl0L05tQzlLL0xpQmpvekxCSnZpV0lRYmFxQUpRNWl0KzJjdVQrc3hVQjYyWXphQW10YVNpZFBmZ1c5eHQrZmJqWUhzRnhaMG50eGYzbjd5a283bUhmZmFKMm9WRUZxckRvNTY5NlpyRkkxTXZOZGNRdHBYbHplWWRJT2FQVk0wTjJ0NFZkMXJ5NzgxbjZqVGRHOW51eDhsSEM1RnpSTWhQK3c5MTNHOUYwWWNEU0cxUEEvQ21jTW4rTGtyYW1SMDRlV2NCMk1HdFhabnZHSVFPa1ZSMnFtSTh6QTRSZlY4UkluWTNCTHF3UTcrVFp4NkI0eWNqM3pOME1KVzRlS2k1M09WdWNndU1TNGdOY1RRWjZFRVVrcld3SlltR2F3SWhNaWFZZTBNaXZxaXJkV0ZCSml2Y1NWY2ZsZW1CVldudUVSa2w5UHFiY05WWWpRYjhDR0lJQjJRVVFFYUI0elVtNysrZENjUFlTcVJpM1l2cTdvczlXQjgrYVUyQ0h5L0ovNmFFTVd1ZGF1VUtFcXI0TGZwejBCVEg0dkJNU0N1NzQ3QXEyb1VvL2oxTmJaVElFdFhER2lubTVmQWE4UVpML2NoenZXNlNOMGdPTDlhWGtxdWtNV0t2VE1QWDEwajR0UzhORmVSeVpSRHo4T1BkWldrTmlBWVMrYWtQSjVER2NFMk1raGk0dVVCc1pvaVVjczFLd1ZScTZBdWFyeGZhMnFjMXV4SW80QWMxLzRGZzhmcmE2djIyOU1iZjJDcm1qRFFCcXRlRERvNnpIMTN0cnd1bFlrZ3ErU3oybFNKelFWdmZMVlF2Z01tNjA2MHlVWnlrRmprZFhJclM1SXNvZFROY2Q1bENnc0Zobit4SmxMSjV4VEVYeE8wNzlCMUFXRk1Xa0J3QWh3dDlvUEFaZUhRUW5qSmhWblJ6SFpnTmdpcll3SkhTSU9wS05wUStYdEJXZGF1Z3B0K2thWTBNbkkwMGlka3k5cnBjd0VaQVRRWkxjZHpKVHhTd09EaXhIeTZUTUhzQUhzTXQvVWJHZkE4RWtVbWR3a3g5cllOS2tJR0VEQmlIbHA4Qkp1L0puN0xCUlhMcUlTbk5uUjdWSHQzbGNwVWt6TlFGc0cxQkI5NlZodFVINFM2TytYeHZSWWRpVmhSWUNHYm9NTkdPdE82dXZsbmgyK1JBMnVCT3dNOFNUaXRKb3lodmhycnVRcmNDZjIzcXBGSzd6QklMcStvNlluL3R6bGtsUmF5c1RwTCtYNWE5RjlQNWdtSGV6RGt6bnZ5SVdRNGFSaDNHWmhzY1V6RDZlM0tkcGhLT1NnUWhiN28yWWh1YlZwL3FHcUNmalpQYXpsNzZwUXRZTExSNUdsbmUvdUo0YWsrKys3VUlra3pUejgydUtLbE1qaitnY3U1RVFPUnRtWllTV05Wa2lnUzJsckl1eHUxM0p1YW4vSm9XQzJWRWVaemU2SVBIQ2E2SUlaa214U2hWSC9vdUhVS0FXMG5VR1VSVzFNblM4eU9PSW9lOFlUSWZJSjVRU2FJaFdqSXhqOEhGVlVOb1MxZ3dzU1o5dzJySTBKUFJ5VTZLaGxHNm1YZSt0Znp5NWVjV0IrazlCa0xDYmI5TGIwMnVCU3c2OXRwUGZhVXU5MWhRd2dheHVUQ096U2h6TThsdFF4bTZQU29FNTlQNVBEdnkwZ3EwQWV0VEJCWjFZMGRSbEwxdlpXamtNc0gzWmJ3UGdiMHBOdjJPM1RJdmtkRnpDaTh5UDUyUXV0bUlxakJONDc1ZUFMMjN4OGhYSFB3dVg3MUpZajdkY0F6U0FpMC83ckFwdERHaVVQekM0YmluM0ZlUmlpTnM3RkxiTUZaZzc1QUlWSmVaVzc2UFh0Ymo1QzdlbmlwTysyRFVPNVhFSXJVWGxTK0RHSEJ3RUFYNjNkaWtzbjlsWEp1cks5aTMvYmxMVnJURVNDR2V4bGZOWmZteE01MnZUeW9va3QxZnQ2eUxqNnFWNUZnY0NYZVpsWjBsSisyS1MwcFV4Z1ltcWIyNUI5WmhYVmNHRGVkSjZxZ0psSjJncDkza1EwU1UzUUo1YzQwM1NqbXYvRld6TFNtbXI3dTkwTGhpN3hTMHVPZkhNd1QxWlNlQk53blpjWHZoYTFVV01kMmVzQy9DOUVlRHI1UmNlV3dySlFyU2hPU0pBZFU3NlZYOHlha0IxaFo5TjVicnN0cDFPdUxsZGdmeVlVT256eXNoQ0ViMGZaY1NrK3ZRZzlITk1qRHJobjZvQ0xNNUF0aU9nQ29tWGZhSXpyU1ExQjhyVXVuU1RKV0NpY0pPL0sxMjNMYkNnakZRdi9yZ21IQTAycFNZU0FhcWNrbUVhQXdWRDBWVUFKZ3J3RmRDZWxISmJUZVkvQ205WWFYblM4ZEZ6dTN1dU96UkpEQ01ZVzlrb1B5ckJCZ0R6TEFoZUxXRlFPYTljb3Z3cWt5SU1QNnR6VXJBclZlRTVLNURrblZHNDJsd21EYjBTRnFBNDQ4TjAzTmJOVU1EZGZRTXZ5WWt5OFVhVU5XTHRhdjk3REllTGl5TDJqT2NqQzlBT2Y3RU5rME4wczE1dUFuRkwySitscjZCWjk2cktESEJjd0RhSlhVc3FhU1IwZDBRS3c1N1k4QU1OYWpmdlhDMlQwYVNYQ3pYMm5iSko1VkVhQVpMWW5QaHFnNE1yeDRndFJXSWdaMDN0eElnWGU1YkJHTnR3eGpKdU40S1hkRmROd2ttS0w2eXVwSjhMRERuVlN1a3RnY1lGaVBqL1lNRENxR1ZseTJ2VmZ3NmU3UjBtbWxmdTBJN202RlFWUDJucGkwNXFCOSt2RUc2ekxhVDllbTd0M0dMK2VsVHBqZXFETCtGdmtwdVd1MUtZTnNoT3owZzJLSi9ZNWlTWEpGWnkyWWkrd1pBMVBMcEN5UnFwVDB3UGRReElkN1F5L1E4ZW1aOUlKVGRzRzZ5bHoxWXJpZnJ2ZTd3eFRqUmFsT3pvVjNDdXFMREJDWWViRFVOaXY1UW5Nam5BU2FzL1Vac05QUXZFdVg2YmZJVXJYZ0ZiV25FZzcyTWZzM0tZS1F2S0czUEVCVGJEeU5UcUxWcytmS2syeE5DS2RhcTlNcGVXWjZiYkNqblNWc2dHeXVPZXFhdURTa0hqbWxhbUhXYzhvRkF2bTVnRnVZZHY3MUhPQUx0RW90NjVJNHgrZXltSEtLVGRZTVViUzhKRncrb2h3WFdVNWNudUVkNm9nMEZ4SGpRYlpGQ00zb0VMT3hUZDFTRS9zalpXaHhQdXlwSU94SGhSQVFXdjZxWW1oZVY4TEtQc1pkOVo4QUoxTXE5bmg0ZEV1OERoZGRrTWJRb3RxeHVUUm9KV0c4NXZJMjFNVFN3Q09vN1B0MGROQ2NtdmJYUUxRajEzNzJhSEtXUGRNU0xReFAxaXFBdzlZdENiT2VOek5XR2JBOEpPWWRMQ2pqM0pPWVhLcU4xeUlGNytMMS9DOEVsTk02T0ZzSnZzYmM5VHBES3daVzdkQ1J3OUhFK1FTVElxakZmM21MdTlaK05PZlRObElUWStIK2ZJY2RCcjhlRlVUVlFMaEZxMTE0Zm9yVlVadU9DdXh3RkhDb1M1RzBvSXZ6aEpla3RLVjUwRllLQk4zLzVBVHJpczZLcVBETjRqYXFxWVZUNDNtSitqRDg4dUROZGx0VmluY24xMzRyUG9vQ1lzWnoyOHpoK1A4ZkQ2Q3ZtTk5zTmpBSE16UUJ0c05NVUo4dGxRZnhlVnVoMEFOajJOc2xjek9TejdWcFZnOERZSm85alFZdzFZNGcrS2E5K0phdUJSeHVNVlAzSnlNalZyOFAweG1XOVJETkFDQlZvWkFKblE0M0xBNmtSelh0NGNOM0orTENFVEFyZVM1T3lQVDJvendFTnMwYjgwdGNTZnQ3Wkx3bVM5elVKMXhFdWdiRmRmSUxRYXl5N1lrV0l5dm1PWExtSWRYeFpCczIwZTI2a1FsUHFzL3pScW0wMG1IdDZNeWRaOUh1LytOZncvTkt0UlFCM29FOWU2K2RkQUV1SmJLZFdWdERwMzhVaVlITWtZTW8yc1ZncDlHVVgzSFFNL2hYLzNjZy9CcjI3UndkWlE3Y1ZvRkNPQnpnTTI5MlZsM3NmcFlKb0loamF0SGc2c2cxeTFTaGNORDhtdkRRbmR6cXZNQ2xsNURuVjJpVlFVUWs4S0ZpOUVwNDJ5aE9NdUttOTNrckNqVktEUlNla0lrWTg4elNjLzNuOXRCaDNEcjJuZ205VlZCN1RHNm5TUUR6Z29TUlZtVk5LdE4rY2wxZnFCT1g4TDFNVEdOcU1zN2JObncwY2xHSzA1Z2ZCTTk4MzRnUGNTZm5qNEhqS1VMV2JTblk4TVlKNytmaFNXcFNjZXQ2Q2VVaGticmFyRDM3cVNNQzVlUXBsdE9ubEUxeVlrdk51OC9DcXlFMVZORitWbzgzRnAwaE5DWHRiVnZzYnc4SFZORFVwR0duUDh4ekYxZ1lUV1JsZkpTZk01YnYyTnRRT0JSWjlYMUZzcEdJcVVxNXM2THBucG9FYThlTE9ocWtXUkRmak9ibjhHQ3dBeW5oK1RJcmNkUUtBU2JUOXNXRU52SWFuM1RDSVViMXgxWGd0b01FVkEzU0N2SVNLZUZ3bU9HbFdpMVY4NEJ5NEJhQUkyVTU4YmdjbGNza05RVTRycUpFM0ZHUDIzUjBNMnMrSnhlQS9xQjEzc3dlNWRZbVU5bWgzQWsxQnEzczZjUFR2L0kyTXJtZGpzT1B6MVpOb2UxR2ViS2xRM1NFcVJGL1MzdE1mM2g5YiswRGw1a0FWd2cyUVBjTG1JTUdRMEhndlZ2VVlYU2RHQTJYN3ZSTHU0Zi95UitCd2t2eUdjcnRNUjcwVXlsK0pDSXBsbGN5b1FvSlZGUG9JT1Fkc0wwSmRnaU9iWUs2Q1lKT0lPYStqUFZRQXVneXkwalh0YjlKbmQvRlNQTlpRbXZicjB4ak5tRElONm1RazlXTGV3YTJGOVVaeFRqODF0b0FCRVVmd3prbUhVWGx1amQrb1lleUxMT3NlOXpIczVlR3ZWczlQNzNOMEQ1VkdxS2pJTk1uUDBsMmxFRkh2ZG96MlRYVGlFVlZVanVMWE8rRmtlaGh2QXR3RDFib3RnR0xlSTZENkxHdXNwQ2hkaTdiSGlUSDRDM0lldXZCaEFFQ1lOOXp2SllSNXVibkVnUGNVNmVMNEdNY3IwRThHY2hXYWVRbkxxTTJUUTNsZFJlOEZva2l1Z2ZyWCt4MWtiaXVhRWVHYi9GVmpPZkprd2FCcHE2U3NUSXE0VDBMY3ZJdGFmTS8zenRXT2pRZm9VSzAxNENiQTBUQlRZdlAzVkRQQjM4bXUwNUFRSGZ0M2NtQmU3M1JlenM4Y0pscFJCaEU4Qm1hY1Z1bzhmaTloQkdLNmFqYUpiUTFjT3ZjSzZqOTJVVit3cFFLYjRkQnluRFRBSnBVNVRwQlVSZzFTeVpDeTdWWi9iTGkyMHc4K1dydlFuQTlNbVZ6emR5VExxWkcyWUlLT2lBTHVOdnhTUXNWekRubjN1TGZPa0JhYnJtdUVCSWRDMGtCT0hmY3ZJQ3VycDd6MUNjTDBSTE91STdkNUlIUXI3eEtUbVcvT1ZocUJYMVpGWmNKdUwxSTl6bnlEZ1NPa24rOVVIc3JQOXp6d1daNFJxQUdtRGJ4Q3RHRzZ4WXJDdlFFMWQxK3VZYU1KQ0xpRXlUWlNxSHIzdzJrUnViaHdpN2FTd1dVQ2VJaFdBUHJEWnMvdXZoZXhxc2lONXpVbFBpYWd3T0hKenh0cmJKZ3B6NmFjWjMzK2E0S1lSeS9hNGVLNDJyWFJwUHRQTzVaK0F5MUFBYkI1dExTcVBmNE9vMk9nRnJPVWt2Qld5VVpLN2xpUEdINm4waElpY29MUFR1K1BuSjRDNmNmc1owRjlHdTJSN3N5dEt5eldFUTd4Ti93QlFoT3BHNlFBMXNQbStEejgyYVluTng4TThoSVhsNCt6Q3RWNXZ1ODhSRWdCelpaK2ZUeldHTWM3UllWeWtOc1JqVHFXeFI2UCtLVVAzWHlFL25EQ2U2ZWtYUTg4NmJiTGlQZTlUZWZxdDQ2TVUwcmszNkJRcm8zcHlyTjRCZUpaTGx4blNYYWYzWXpaT2g2R3BiMThtZlBQY1lBN24weS9sZjNIbGpBZjhCWXNLOS9kK1NOODFGelN0K1l0RkV3MnNyUHVNZXVITXQrSGRvdktsaTRobTFGeWd1L3I3NWMyQWN2TE9OT1hNL0tvaW9SYjB2dXFDREV5MXVtUnhzSmZpOU95NEVBd1hNZ2ZuYXhqa1FiMFdmejB5WFBub0tVSDArSUdPekd4ZUxITFloT3REa0pRTXEvMkZRSjRRdVBuRzBndTZIU2p2SGNKYW5lck1mREpVYlAxbjU0YkhsZ0V5U2E5ZE54bVV6TVdWMC96U3grMy9ESFVpczBzcmhNYjV2NUxIU3Erdmw4UXVhbVFQeDBrdnhYS3ByOXlwa1Z5VThWUmNwZmpBVnpCM0FNa3kzNGM5K1NrNEErVmtUNlBEYlhDSklVdkgzUkduSFB4amRqdDBJdzNvbHg2dUVOS2tsZmdNdU9OSkV2SXltRGhFcWx0SnZwQjJ1bWZzVVl5Kzh0K2Jva3hXOElQSnRSRllCdXNLMjVORktIcE5xdXRhVlF6dFFSWm5idEVhenQwYVoxbUZZMjZXNlQxQVovaytobi8ycEZjN2lrU2VzK2Zoc2dCZVhHa0ZkQVFlOEN6QnUwZnlIWXBXSWFaWXJYVlNJczN5V2lNY0dIZ0I4YVhEeU9EVlc5VTJ2YVhvY0RJa1FzUEpVeUlNU1lmWHZtd1JaUDc1Qm1Xd1hNdDA3dmlGM29xT3FPNlA3U1ZGKzFLOFU1eWNQaXAxN2ZZdW5VSHA0Z2RPNSt5RGpEZjJUcW9MRUpIWTZ2UFRZWnNOanBRR1FHTXZYTnJma0V6NmxTSnBFUGtiN1RNV1dPWFdVamIrbHhjSTF1MHJCRXFYMmE1M0kwNkcvMVdwOXN5YThtVWlyNDgwQW1iV1VUTEhqWFpOSXNMNXpMWkg3M3V3bHJsS1lMMEQ0L3RTWVhHa0psbWRZMnZ1N1d5SFl4T1dMSmt2dzFHWm5lZi9iOUJNbk1VUWlNYkQ4djdkSFNNZHVMYTM5QkdjT0tocWNwdHpUWXNjQW9XMlRtMWQza3pXN29lMW82NzM4TTh2SnBBOTMybmwzelpkZHEyVGUrM1VGaEU2R0xndGNNUnQxL1I4NEJrcDErWXQ0UlBFM0Jibml0L0t2aGVkLzJwTWNzMnlmSFN3NGNNQlNyK0dLREJCcGV2SStqTzVyeXN4TFZEckRjZ3lxTHpwTGJ5S3RCOStzcE0rK1NMY0F2RUZ6QVp3VHNNNU41QVhld1RIeG1yMXM4MWFHVHZ5bDh6Snpna1pqQlZ0NmRtWkJlMUY3d0JGcUI2aTI1cmZ3Q3g4Z056czV5Ry9FYUw4UlBVZ05GSi9Jbit0MWlVUHordENza3lKdFl6TzNvQUdJSlRXdDBZN3dJVUEzMGFoYVY5TS9zY1IwZkNSZEdOZ2JxV2xSdVlLT01nS1BQQ2hucVJUQkRUdXpVb2FWQldHTWtzcXI1bHJzU1MzSVc1K3JZYU5zTUdZdHZrUHU4MnIzY3E0WUREck1yWU4vSStJU0gxVUVudlZDQitzSWZ2NzRZU1pXbnlVdkw3b1ZOSjNWV2xBMlBCa01BeHM3cVJWNjJXTEZlaGpqazhWcFdYMHhnWWY5UTBsWE00OU55WlRtY3VTcko1bUwvejd4Z3N4cTAxdWYySVpxLzNEZkpidlpBeDlGbFNFSHlwQVlYd2dZSDJ4a1hmNVF6cDJQb205UytET0k1WHdsc0hXYVZzd1h4a3NhZVUvaURpVmt4bmRWVHNiWUdleE5vMG1yRFJyVmFWMzRCQkNxWGcrMlRxeC8xNEt6TmtsTmk1M2VJeHVhZ09UWnZleS9aVGpOZFFwNVZTeURMMU80RVR5TDNPcHc4citJWi9BNE9aNGJxdytpc3VDNzJBTUZBRmgvQkZ5ZCtVMk90K2tWV1E1ekJ6VnVnMEs5MkNMa0JzazBEbkQzWWFSeTJaclpwUm9QRTBMWjhvc1YvaUVZTmR6VytFV1BvalJReWRiOU41SXk5VGl1UnF2Nk5PNEtWazFnUm1TT2s4V3JnMWZ1eEdadVhidzl3UHpVbkZmRGtjRXg5dktxZzRuQkNUSW5TWEozZkE0ZjB3c3VsQTMvMW50a3hUYU1CTWtoWndLTmdtRlhCMTg5Z3JpZmNxNGMwZDlMenpNYjZ0dmlwNEhoRk9sM3h5RHRVT3NZL3plMlRqZDRtT0dKWmVtNktyZFZYSFhFMlRmbEYvem9EQW0vbU5tS0lnUGU3YzRzMnovZmRCK25DdWxxY2tGTDhNSUg2aHVONWh0Q1l0TlFTZzZqZE4rNS9FTGFzd2JOelo4aEYwbTZTdjVWMENkcTR1cUlUUWg0Z2dENjV6VkhFQU1JMW9XcExoZmkvOE1LOEZLbXBMdDdaMldiWFRVSVpYMGwydXA0anJ2TDRXYjZDZEMvS1VkTnJsRGtmS1N3NXVGY1ZkcUpuYWFJdTFTUjRTbzVXWEM4SERTWC9UVVlCOUw4cU85WHJKK1pvaFR3RGZiREZOaUFtdXVaVEIzV29ud2V6WkpNOHFnbm1qTG94Q1FDV29nOW1ZL0hSUFYvbzM5VTFKakNMYWZNTWJyeFRvY2NuQ2U4Nngzbml5dDA5Ti9oNjZYZWRtRDJsWTRJRHlkUjcxNDRnc1cyQ2daWHoxSlJUZjRTdGZ3ZHRwMkt0WFBwdmp6UWlFNUhQS0RVOXY2TTdJTFV1QUtxMWd4NmZBZGxnU3JSc1JFMHF6WjAvWDdzQlpaSUtpOG96TzE5K1ZmK1ZXRTd1c2IrS3lOam1BOGVJZGZVV1ZQc2dreHhsTU5MSjVxZmJFYlN1NUxYeE5RWjVEVGh4OG1ndTJTbGw4MVRaaHF2dzlQOGVLUjBqa04vUzdSdmgxN1BGNThvUk9qSHFOdEpZcDVmM3JvQU1IeVk2bG5lQ3ZZZXJBYjY4MjlEcTFlZVJzUEJJWFZJbTVaZmV4ZGJzRWpLUzNScVovZWozL2xCbzNCanZCeDR2WlB3WnJsdCtDRFRKblNpWExzVFlEbHVNL3ZrZjE1L2VxZkZIa1cyMVlMVDRzYW4zWnBkSFM1RHBzZklVTS9OV21kWWRKY1gyRng4b01ob1h0VHdHWDFLcUxNUEtQN1BETkdxaUxvWkV2MjFDK0VpRnh6aUVPQk9KZjMyT05QbmdiL01FcE1LakRFZ1hUbzNDZTBzV2lxNjVWQlRtUjY0YlB4SElHb2g5ZnYxYWQ4bGFmWkdqNHJWaGZjQkdiRVgwQzYxQ1NIdE1XbGxrTTRvOHhPS3NPQ0MwUEZVaG9YOEFwV2NpSjdoNjhPMURQamMwbWI3NVBEQnVZa2JFak1RMllvMXNqNjdOdU54TTh5NnJ5ai96eTBnT0hVMXdkN0lEY3dIdjduSUVqN0U1eGQwTzdhMm9nV3ZRRU9kamJPMDMvR25OdUpUTThJMVl5S05vcWw5T0tVQnBnUVp5OHpUaDM2aWZZZDJSRGlKRWZXKzUybnNWTXBLTkJkcllOaWRYMFgzTXpKSmxwNHVjdjJvWWRhTkZiVHNIM2w1WGxleWVEMmxyK2NCcFBIQW1VL1BVOFdTQWNET3QvZ1IzZDBhS3pFRmZIRC90c3htL2ZTSk5KdzB3bnNtWjEwU2lROWlHbG5BZklXUjBsaEZDR20rRjhuV0JoTEljZEZWMTJaZllGUWdjY2grTlNaYnVpM3lKODl2eHVaV0tXcnd3NkEvaE1vU1dsVzRHdzFOeXhFeXVKQWp1OG9TU1Vzd0hKTmxyRkFPMG1tcHg2Nmd1K1o2cDR4N3JxOTRPcUQ2Sll6SURhSVhQc2pDUDhyTjNqOE5kSkIrY0JYWjlDdlViNDZ3VEFSM1I0UVdqYjI1QUlNeTdtd0RjZEUxcDkrcmVKbjFDY0FMYk55N1B4eGk5cVJSVnBSSTNyTFRLR0VtLzlrUTdSckNWb0dmOWhKa1d1bVhNTDloTDB2bnhwTTkzbmliMlRPV3BUL1U5ZUcrUXh0ZHdOVm5NSHA3bzhrMmR0WnBsbFoxWkJTb294ZzhUSDZKZXFST2s2NGpNZzN0RDFZYVNrbXRZQ2RuaVVycGRtaStQRmk3dUpWR2dVRzZybTNYZ2xNT3ZJYmJzZ3VadmhSSnNRa1BONjlWc3VQRms3akdLanMxWlNhUnJkOThtcDFPbzJ6M0FzQjZxbW1tTCsyaGx2WGFFcXVKSWhpOXgwS0ZBMm5mdHRXL2o3QnJnN3R3MG43bUZqMm1mVE4yNzFtaUtUSCtIU0pvRkxMdnd6WXRqTEdDaXhuWTZZOFdma2VQYzZ2SEw1VUZFRkVXR1pCcHZCWE0zeXBlMkJrSVRwRlRJSFkyRjBPbnFqZ2Z6YnVOQXhIQ05OV3JkRDA1aHhOa2xGMitkZEc3cE1CYllIYThqZUdZU25sZGVPRnRqOG4xYmhidVJVYmRtckROM2VWQnoxcmpPeDZsaU51a21lYXJRN1RKeGNvUjB4dXVaSVNNUk8rK1N1SFRYYktnU1VVYUo2OUFEQThoOWFTOHg5NXVtQkl5UklRKzBJVkZHWnpyY3plMjU0Q2VqMVRYMjJKMU9rSGR5Q0szQktYZ2lSM0dqaGVYdlppdDFmOVZOcUtYUjJvcWMyRExva0ZqUXZoVjlKVFl4aUQyckZOSUp5eWdWMVBFSjFLenNBbURZcFVSUzE3ZmlPV3M0VllJb0VIVUwxbS93amRHbTFZL3hzL0hEZCtoOUVSbi92OXlsQjc1Zm01SUFwaDViRlZyWWluTkoveGQwMHgxUWVCUk5PSkwvR1RqVkpicmNJR2lWaVA1ZlpQYTVraWNPUW1XNEVLNncxUC96YjFMbDc5dlIyQ0VSdVZxTHQ0cnJOSzFNQmxRUUgwUm9VUHpUOWN6eWlHalQ3ZERxbTN5d2xSQlV0SFphdDdzWWFSTlJNRTJyZ1Z3V2pTeFJtRFlMVTJkanJ1QlMzUGlCeGE4ZlNTdmlDY2hMRWhkNGxZa3d1NFpQVkhxRnVqQVZzdmNlZXFNdDZmNysybUducHI3T0pTRTNmR2FrUkRTVGViRGIrazg1VHcyeUtWeFFocnM3eWdIeWtadEpSdEZyOFBEUFd6Y1pscXMveStIV0xiNVpCRjZoeXREd3lacWZXVVV0Z1dJamdTN0VpL0NDM29Fb3BYWGgwbDU4MElyM1BZcTNhY2Q1MkpxeGV3eXBuZVNBaVU1bisrbkpYRThFWlpKNklIUXRGSjF5cG5SdzNabmJIY3VVazVXeXRFOHQyN2xKV201bGFnMStIQStGR3l0UjMzb1NPMVN5UTVhY2dOdTFjaDlzaGJ5SnpnOHhtZ3VrSjRoTCtsRW1Ua25GbEZZS0VCSjF0MitqaThlMy9McU9sZkhvOVRRODArdUFlL2ZIcGl4aVpHZlMza291bngzMWdHeWZaYnpsOGQ5dGE1NVNjd3pWQlJ4RmNPRFNWbk8yV1NYeE9xUTJnTnIxWFFZemVSRE05aGY1S1UwWHVyNjVIdms1blF6WlFlWHV3dmRsb3B1M1l0YldZRldvYU5hUSsrbkFrYnVtMWdFOERWUWUvQXRTM2F2emRTSEdCUUh6UUZhYzc4UFkxWDdHc0hCT240d1hFbFVyUG85MzQyN01LQnNPaUhBZkFTUTVOYlJWS2l4U0lNc2wvM003dGhjQTlxRnE4SExUMVNQN2l2YWhLbXFicGl4eE5HM043NGRVWGgwRDdvZWdqS2dqNWcwbkVtT1BOOXhXNkhLQys4bnBBWmMyU01VSSs4NU5aeWpWeXNQajdNUVE5dW1nRFh2Z0NsZVVuclhMN3dCblBOZ3ZGNkJJVXBJbUZ6NGxFWi9mOUdySE9HSy84NlZldlV4bFIrVkI0aFRzQkplRFRweXVLazlRL3QwaG03djBNWlN1bHgwWERuRzBTQm51RXUrWEllTmlkRFJXV0cxU016N1JkSFYyUW90TXpYYkFqUEdRU2dpNjJ1YmVnblpYbXArYW9aRVIvRU9JRThZL2VVWWp4dE5HWHJVNURsakJZQkJocTFlRDVRamlrWWpOZHRFdFgvWFlaY0NoRHJ6MFVIV1ZEOWhFdE8vZVpvY3o2dFZ2OFppSjRUR29yZzdUWHhaTWQrYWVJamFuQ3ZGRDBSTU54eXlRSlhRZU84dktNVmJkdzBmRXpQRWk4NElxT3RpRUlMTmNZemN5OGhqUlFEakRPSXpKelFnYzlYejFTMnR5WnBSOW1TNkdibkdHQmwvVk5PTitYRmhFSFpFVzJJTXozbk1DTE9ybmdqb0RYOFg3Ty9DZkhTVHhwampJRFNxeSsrLzBvcnU3dW5JbUtmTmlWK3BQWE5xSGU2eXF1bWFOcXBjaDJhUlVyN3g5M2VkZmdDMm9XejVYaHVwN09QMnQ3b1BPU1kzVVVzdEJaUy80Q1RJeGJGTmR0V1VNRmppYmhOQUlEMDI0eEw0cEFaWWJPMXQxSkYwTHNLUmw4dGJQRldSdEhuQ1JFUmF6bzVNTEkzaTNNQ0JGNVNoN1ZCZDJ6N2ZXY3l2RzFQUFZ5MUx3OU51QUJzcDlMNmxiMnRPTExaTkUrczFBKzBXUTBGSURmZXgyK0ROQWpjS1VGSjVJT2I1UUdqUzRJcE1Uc0FHQTVvcmFpdUVlNHkxS3JaM3J5bHJQQkNNK1FvaG1sV3NPVjh3WkNlOFgzV1Q4UFNxQ0VEb3dxWEl1NTNObFZ1aE0rQnExUWVMTzI5R3FzSE5VWndEZkpuNWx6R2FLZFhVU3dNaUlCVTRYeWtOVTVoUkhRS0J4M2VXSlEyYTFxZlg1YXRKYTd0ZjhlRGpwcnR3VnJLT3FkNjZMZnpYdXBLT2U1aklrTW9lQWdCZ1RvZkRSRGlVTXBVQUhNdmtXN0JRaFZhbEh2RnpSVUI0OGhtOUNXVUIxSnIyUWI2M1REVUgyWUhyeFd3TEl1NTh6SnhmanpnVUN4Q2dZQk03ZWxjT2M2MlFhQ1djWG9CcEdPR0FScS9iVHB6eHZUOWs3MkgwU243YnZ5ZWt2aWJrUXE4U1V5U1hqamltWm9XMW5EM1RLU3pzRlFPZ0JoNWh4d3FtZkYrU1hybmJoUXFhamUvWTMyMGRpSUpaVUJyT0tWOGR0Y3FnWUJHUklOTUhSSWZyYUt3UEtQOCtLSFp3V1Z5OVBuQ2lOcFJZa0VZTm1zaUF0SDl2VTZDRzFjamdxalFxL010Mlg1VEttamU1OTB3dHhnT3pFVll5VlVKaGUzSjltNUE3TXNsK1VoTmRrMDc4UFg5VFB3aEpPaGxBV21ZOGI3ZWlIMmR0aDRxMS9xRXJRc2FFZXNGWkpBU042cmRLcnRmbWtiNFhsMDNVWHpTZlhSdmk1NXZZTzFoNk1wUjJSTDgxRm4xQkdiTVpxRkZVdmNrd21va25SN0dZWldObSt6QjU1N3JGUDFEUVZsZ0ZDbFlRNHhLaTNlUGlBMDRodDNqcVhkd1VzNmlGWnVKbGtOZG00WitFRGZ0T0lNVkFKVW03aXdTdkdLcVhXWk9HR0FjSVg5bm1NdmFWcThhRSs1SUN3ZEpJVnpGdVdHZzE4akZOQ3BSNG51WjZkaXdFQlIrd0lNOXJkenBYemJZZVdZVXFoSzMvTGQ3NWRocnFuR2dFejFCM01hNWw0VmV1ajNQeENzMkhWcUdvQzFlU21vMGI5b01LeWJXdzdtWmg0Ukg0ZnE2bk5LRXh2ZFR4QVp4VjJEbFpQWTh2bkhZL0pEV0l4RmNqL0owY3pCejgyVld3eG05REtyeW4wb1BwR250Ulh5NHd6ejV3R3hmdzRldlBCUktrL2RFQmpGK1N0RzZWMFYrZk9PWnlJeHhxWFYrSHhyQ1BVY0ppQ2Q4OURjRVVtblM2YWRrMzFqNzhXL3JRWXRBZDF6Z3RzQkpLWHBkMTV1QzQ3Ulh5SzJyWTU1MnE0VTFwVCtid1o5ZG9id3REeXBndE5QWHBQcjZSR0VJSFZiYm9taHprVjEveExVOURrWWdsdk5NdFdpZ1J1VHUxeVY1TnZIT1Vtenc2UER6UHNDalJlSmdaeTFyZ25EMFd1ZWZCSmc1Unc3TllyVjBlWnpRZWJPWHVPZFlMejFZOU95aUNkVEpMOU9pV216ZCsxeDNvcHJsRXYxbjU2RVVsWE5IcnhJSFphNW1FYlVzaVhHUmhkUzA5ZUNka2RqeHBMb1hyVlZ5UGpvL3BaRTFrQXc3TWhqVHFZUkVrZUhkYkQ1NXNzNkxpSXViWWJqeVF5WTAvaklzdmwrc3lIYXNVNGdwYXpxYi9vSGxJRUlMK0g4WFdHQUZOM1h6L2E5c0MxRkJpcTZxVzdnUTRqMlVETnVnejA4c2kxSXVFZ1VhVkR4ckljMURXQVNEVGNDblhFdXdwVG1aZjBSY3hiTVhld1ZHV3YzWVJEL1UrVy91WEpGM1M1R2pLZDNyN2ZpeTFVQ0N6NHEvTHNkaUNZT3RrK1FKNFErbHZVNEZRcVhYeFFjemZUbUVXYUE1VFlvMmQ2dWl4WktPLzB0aWtHNmkvb05ZbnNZcmhMRTd6NElrUDVxSWhRWU0wek1SQSszZ3Z1V3pHS3pwVHlhRFVPV1BYMmljQ1VTMHZock55NDBqekF0MlQzajR5aVBSUDBBNDF5a3U1bE9ycXQ5ZG4rNGNhbnJXY0RkL2FFN016YjVTY3ZzMkRKRGhmUVlvdWNHcXB4UnZrUXYwN2MyY1ZCNHUxRzNSV1l6elNBbHdSSFN0WWthemRqY3VKdUtwcFpRTEc4QTNDR0Vnay9CVmx0UGJVTys5TWpFYTRJZE1NSTZscmFFL2RjOU1NNVV6NnhTUjJuUVErdzBCWlFEWUJnUGF6cDNPeXZET1N4cyswVXdhMkt2eThWalB3eVQ5TlFNd3VWd3d2Z1RYTWY2aFIxSmw1UVdMU2EySWhHM0FKd3ZsMEVFbkZleTlyYXVleXhjZUtXZHQ1QlRVWjdIN2tsb05TL1lkTHpUUXVyTnNsclI2eWJaY2p0QVVtRDBXV0hwTmJJNEV2MmsvelQ4UzB5QSsxNGRTdWhFcnpsM1VTSTN0U0Myb0VINzZITnVWdlcvcXNxOXo4dE5wOWtwUFRPYnZKR2JxOVJPWGx1SUVocWFobStpeDg2VDY3NFJiMFpPUW1zNk5wa2ZYamZRQnRxbTdDUWhPejZ5dmpRNzdBdUx4SWJVYW5GV0VSSjBobVhEKzFqMktSVGpWby9FUVBFaEpOdFJNN1RmenVQMG81UnMyVlRRNG9QV21WWE1GQVA5QllBc25xai83Ym9pSTIxQVJkYkdwWXRRTXEvQ0RqWHc1ZEF3ZFR3ekZyRHpoME5Fb2VHanVIVWVBckpyZFp6YllmajJXRjFHbjE5UHdlL0h4YmVVTm00SlZERlVHeUtESDFJZk9FZlJGdkxVNnJCSzFCWHY3U2ZGb01ZWFJrWkRjejdKcFJGVmJ1VTZmWGhKY0hHWjhhSWxPTnJJZVhTVjhTSWVZYmNWWmVNZXlHWk5mUjVEbGI1OWFkdTdTclNKS3ZiQmVUQ1hzdlRwMTJpTjFqZUM3V2RzTmNiWHVkUWtaOEhLMG9kVVp1L0tyNEZqT3YyZUFGdkJiaXUrQTZZMlpkSEtXbTdOTGQvVkcxMXRtUGdnVS9zMUVUNGYyTTFOK3l5elprUlp2TERmaVQwSjBTWnh0MkMvRENicSt3Q2N5bTE1elR4VlZqdXR4c0RWOFY4UGdzdDhJZ1JDTEEwMnpsSm12ZEwzL2hnbmtXS29SNEd4dEMxcityQnhBQXIyc2lrblhRRHFQdzNzWWluS2hEZFVENmxlU0owMHFqV1kyWHpiallhVHhUbUQwQTBoVGlNZVEzWkpqZFZ2Q2FLTWJNRUNIZkF0MzFTeTAwVVhSbmJqQ3FZMGowNDArQWZ1Tk92c1hhREVicXR6RUVSQkowSjF3Vm1taFE1VTJzc3RKc2p1ckZaVGtvbGJNdFk4RjZiNHd6VWtKYktHYWRIazU3cnkzN1R0Zm4vYUhzaFNBS3NZekpZUElZMzJkdXNBY29ubXlJcGttNzhFWXhiOXhSOTkyZW9NRDFZRHJPMWozeVdnNElDVzdYSUdHb1l4SUo4SjJ2USsxazhmTEI2K25PVWdXRlZhU3VVRG9VSXU0a3RGR3hUeUwvd00vb3NqY25HMk81aUQ5NWlmZ1hzcS9KemtwZkFjY1ZRc2wreCs3a096SGtjaFoyUWlDazJxMld5YUkyUDh6UlMyQVN3YVBoalZjd3NGODg0dzR4Y2FNemcwTW4vZTJuL3hYUkU1SFM3aHdWZWhkcjRzV0dNT0RSbks2TjVUNW9nRjVuNFNQcGxoZ1BsU3VPR2RMK1JRdDhoZ0dRZG5wUGpYRGk1TEhOUGNJN2RsMUI0TXM0UFRUdm9YMER4OUtLRVFtTitoYUZDN1ZIYjNESlBLMWU4aHVYRmgwSnVUcDAwVFFlQnlIWko5ZzQ1S3MwZjVmczZIZUNFUnA5OXlVSjV2SWxmMEJFanZTMkZ1dWdkNTBYbzFKbjQvV2hiaUlYSmU4d2JpMzg1TnRqaU44OFYwWVRGcnloeVg0bGwzMEhsMk85YlVXUFlQZU45dzFFQmd1UGd3S0hIMGpjVjdWWjJpdG9hc1FvUEdGb2l0VzRyN1dwRTBaZWtsMGQ0aHM4Wjd6c1ZHdk1uQXJEdm83NXNqUExGcFp4ckgyZWZWTUpRTEU2MzlFbUM3YnpGdGVMNVFwWlQ1K1pua0cxNGk1QlAwQ1Q1NmFZc1U5a1AzR0FUSkFBYUxJVkM1V2lCcTdUM0cwUkpPbXEyT1EzR3puVUtMbWtXSDE2MyswOHhkdzg4ckNrazE4U3V0YjlVNHdRdXJ2S1dLdndBc1FDY2NvNDhEcnROM2xRU3JTNytwSGs0ZzBFRjJMTGoxTS8wWW5BZ0JhWGNmanI3U3JldDdoZ2s2ZnRqbUY5T3BLT0VycmIrd2FHK21kbmE1R1lROGJMTzFzSGtLajk1eHlXdm9Fc0IwUWZXaytkZERGTVAzRHBDVTBUVm9XU1U2blpVbGFmNmdIeTVQRExLRmc3OE9JUWFackJsUEFRODlDQTJZTDdlKzNzL3dib3NCcnk2Q1pyRTBWZ1ZZWldNZHQ1cXg5bVRDNDVOWFFLQUhIbHN5bDJpQWVLc0diL2Jpay9zRUVlZ29rMlJZS2tJVGpCdE9pdUd1cDR3amwxSys5WmdmbEV6WjdYa2w4bnp2OU8yZWQ1NGxjd3YzSzZVRVQ3MllSWGhrdE9LQjJrOVJIMVRDdjBPakVDSXY1UHFVbndNN3ZkUUZKRGxlazB3VXRuQ0NOdWs3QTJiOTdOWmhTU2pmZzhEeUw3M2JwRGV2OGZOeEhhY3NUTHUvWG13UmdvUXllSWRvU2cvQVByRlo0RkZWOGRJT2NxZk9EZmhKT21uY0xuTEcycUFvR005b21nVFlLKzE4SVdxUFY3ejNKeWlYM2Q0bnZDeTlsU1JrTWRDdSttYnVRa0xYNnkwMWhvTVUvbjR1WnlNN05jcHM2bEZaOWlZbytCZnE5aWwvVlZLczRZZ055TVFxK1lQNitOUlZrMGwraW9jRVREa3Z5dlJOZ0hCR251OU9jeVV6MzhSeEFuTE9qYkM0WDl6KzNZRzJQV1RsSmxKeEdyWFQxSWdzb2ptZVBDRndsY1JSVFdncWFnRTNTOU1tMGkxTzJtVVVqYUVwYVNZajI1NTlDTFN2OVFhdlRWYmVQcmJkajZqWEVLc3RVWnp1Y3JqSm1BOXQ2S0RTNFBMWUpZSFRITWt6clpncHZ2SnhuaENHbnl2QlJNVWwrZVNTOXFidDJZd0o4dHpFVGpqK0JsdmdvVCsyOHdRY3Rldm4xRk9BbVBFWFh3dlltM0tYSHl4cDhUR1ZnR2h4UFNLZk14NWNST3dJNTRuSlNYTW90dEhLTWx2VG0xU1dEdkxRa0VOQnJwUDJoZ0VmWVBMWmNJWlZDVmRVS2dLZ0xzbWVDdU1lSFlNVGZvN2FvcWhvQzJXZTN3d2lnZXdNTEp0Q1dYOHFhdzU4ZHluV3IrTlcwckhrSEIyZzBCd3JxNHZ3Wk5IVHJXa0d0Zk1DSDhrU1FwRXdpaFp4VnEzT0lSL3RRY21LTmNvL3VKYkc2Ym5IdkhpSUNPN2VhZm1zK21pcEE1K2lQalJaVkpjN3ZFZkhTZFJuOUNkSWdQZVRiaGhyMUsrQ3lGK2VreWU5M2ZSK2V0VjBBSS85T3YxazdnSHN2U3l2aG9rNmFjVFJYM2I1YkRJQlRPN1RLUys5cm5IUXNhYVBSNjVjSk9qdzNSWlo3VzBBTEUrQUNkcWxSS0lYUk10dGZ0Q05tQWRqZUQvNWMrYWFuMTBkOWplQXFaOE5WeS84eUxjUWZnQlF5UEV5M2duTmFWVk1mU3hjOENGcXlaM1JGSHlNVXk1UElQV0tPQjlVeVZIczhqK3llMkwrZ0dmclRod2Rpall3cUtkRTErMDZsbFFCRnJiQ2ZqVE85STVsQTF0NUFacVlGbENUQ2dNSSsycjFBN3ovdy8yVmRxZkY3M2RZZ3R0eUl6S2w1M3RtV2hRWkRSRXNJMnNHWFEyUDU2ZnYvWXFuektxT0MwR0lqdkFJYzU5YXc2endNQjBjN0tuT2pnd2M3K0IxUDFvcytvOG9NWDVqSmtHMWh4YmZZc1dNRjFzK01GRkduNU8yOSswcHcxZzBhbkpMdjNuUW0vVDFrbzQ0QWRicUw3eERLYzRZUUhlRldWNkVDdTBVd3BKTFRzTTRWM0pZVG8zQWNoTWhncnB4b3lsd1lLR1hmMGtTVTF4NGJEd1FVRzVxaFA3Zk1jNkFsdWZGTDFUYllhclZNSDAzZEtwQXZabDgweEpjT1I2b0Z2cXVkVEYxaExHNVc1S2RnV05mSVBpNEVwZTB6V0s0YjhRV0dGL2xHbDBqUTJpZXZ6SWtzcGhSM0ZOZFdpc1o3eUNVSEVMWHNaOHl4cXp0THpzemF4dW4xT1I4dnJXUVcwM3dQLzNmQjdwT28zK3lwdFFEdlFFNnIvajBRdXJiS2VTZTJqREJQdUYxREJYYVlEWlpUTEp6R0ZSOUI5Y3FqY0w4RklJSFNaR29vQVh2QWFTem5NMjVmQzFnY0s3aGxFYm1Jb1IzdXRDejJOOXFGemNSV0VrTnlid2dLSExzMmxhR2RkWnJhS2ZFdGJQRUVjREVVMkJrLzVCNEgyVjg5SU9vUFduMy9UK1dPdkVFT0dycDM2azQ4Zno2elpyWnJNZk4rZ3lub0dSbzNoQW1mK3BYbnh4a0Z2bjZhSDRhNzVVejNpMk5ycG9heW1BR0VuRVRrRlgxM1l4U1N1YjJPVzFmdlFyZ0ZDQjlIbjk3MUs0WnRPQXd6VVNubWtQRVdqZG0yNWVvOHg1OHhJek5wVzNpWGoraW4rVlBVUzVYajRLRUpyWCthcVZ3S015Y21yMjVPMVU1OUtEbzBMdzFTdTAzeVh6bldYN04xR2VqcUIwRmx6WjBCMWZ4QTB5ZVlmOTFTUFgvYmpNN1hOMWdMalVqWWF4eWpNWEhzbGlJNXdHak52eDVJMWdSZXRjVmxLMEtaeUVFbUozeFgrcUtiaWROUXZrdW4rU0l5c1B5c0hoSUhIWTlFZmhUaFN1OFlRR1RxNFhSZ01DL28rUmZESnVMTGZtdHJFOEFIVHE1enlFcTNYd3dqdy82TzB0bHVKSE5lUWpWeGhlSUl1U2p4MVlzbmJXZ09ScTcxODA1YStpeEZraEJ1S2ZiL1JreWtZMzlNcGdXSE5mU1NTelg2ZkRxSVlQSzlwQ2ZBRC9zMU96WG9FNkMycjhady9rdG5WcUJ1UW5OOXl1eUx1Slg0Q051dzNtcmhXRUcrbWtDWk1pZUMyTDhvc0dNWktBNGZDZFF3YVNxZDdKSk9tZncySmNMbG5QSEw5dTVCUmFoM3I2YS8xeDRRbzdnSk1Qc3A4VGFEL1YxL3d0b01OMjNDT3VJUVFadkxEUzVTWXFnWTY3UUpTMzVRQ28zbUpOdENWVGRSNDQzVHpBZnhFcm5oc2xKc0NQa3NuTUx4SjNoU1RWZG0wMkJZbG9BaVc5bC9KUTc3aGlBaVprMks0NUUvRXdycGRFaTlqY1Arak5SSkUzckYwd016ZFJ6QmpSZStPY0xOMUFXdFFQaU9hNXQyelVWUnNQTHVrSUJONzNnZERieUE3WFNrTnVleUhjM0JzZ0wza3NLOFczVVNqcDVMMFRHNThMcEEzS1VLYm05S2FmTUROR0txWWRDZnY1OHZselVCN0RWRlRJdmtGOCtkUldmalAvZWNueU9laFRRalVkNVJXT1M4eGNmNHArMmFBdDF1MFpEeTE0ZVBOWHNjYWZGVnFBekVSYnV5bjBWTS9oYnJNNmhPVGE0b1QwZk9RM3VHN2xxYXJvYzJmR1oxN2xIYUhEbjdLSXlZeDl5ZlJoQjFVbzY1QnFhb0QxcTV1K0lhZzZKQjdZb2pBV21veis5TUVKTENYMFBCN29sd1FkTTNRUHVGVnZiRmRXN2ZvVElpcEdUckI0c0UrQzcxQ2x6MXhlUmpLVnFvUTA3NnRlcmFZVkNBQi9ZcFl6QTE1dHRkMk53cWRBSmUvaXF3cngyeUlncTNnOEMvbVM2bjZhVGtCY2dMODR0bDlHby96UzQybTg3emo2bGpDM3MyQTNtdU01djZaMmNoWmp0VFBiMVppRVVLM2RoUlRhSmFaRkhPYk1ucm9QMWJaQU1jSUpqNkhmWDBxR3lLTzhtUlpGNFlRbElzVjlYVUpzSjNsNnNaK0Z2dE1maE1uSUdRNU9TNTlPVHZMUkxjbi8yYVU4MVo4QUk3ZDUybG9jaHRkem5QYkRIZExGc05zU1k3Tldka29vWi8yTG1lMjI2RWdFNHA3UWhsdnZ2U3ByT2tFbE51MU9acXo3eTNSa3lrVTg1RkNZRm5ybHgreVU0WHFyOGVnQlNxOHpySDlYQVV1R3JVcjN1VlJNWDJjMnNNZTkzVGlVSEljREFtNFlBSS9wYTArZTJHeFc4T0dHRG90N0l2ZXh6eHZOdkcwTmorTElmS0xPZ09iT2xmVjBGR0JZZlIzQzJEVXk4dlRaMlRQSVdxUG5uaHJTVk1Lak9JYVhLclhJS2pld2hHOVVXRUpNSUJPYUpCbDFYTWZSNXkvTS9ZTjY1VHJVNm1uSjRiM0tTc1FrK0tSZ2hhYVBWaUp3YzczRG5mb040M1dka2U3UjlibGY3UTBKZE41OGtoZ1c2WG1hOGUwb1NGZk5ZRy9uaC9SOVNZbGVvZzNVL3IvZTY1Y1RaNVhzOWlad3RHM2l2UExIN0wzMml0S2F1Sk5xWDBGK0t0dDdEVVE3ZkhoSGs3WExMdlRnSFNGUE9sRGRQUVFZVG9QbFdlZlJxVUEzb2V2SWZpM1BheVltV0JpTzBBd3J3dzJaSEhHQk1OdGl3eGV4RTJXYVhuVGZ4WEo5R1VGUG5kWkw0OWpEOXBXSXdJWjE1MFVIaU52YWd0WmpQL0ZHam1xZEc0Q2xLYW1OVHkrNlIxd2lEM09BL3VSdTJTUmNkdlVBWXZhUWtyTDZFeVZJM21uOEhxWm9qN1JZMWE1N1FVcmN0cXpnNVltRXI1KzRJcUtCTmZMOGhaNExMTDc5ZjcyMmU0WEd1OHdkWTI0YnpKZVFLOXpFR1ZpTzJPbG9VelRyVFV4eUM5RG9wUS9ORkVzd1hLeVNrSnBPL0RvYmlVS2pEQUVaamJWMGxydmp3KzJsdWpDL2s1S2VTTjFoTGprbG94UFVDcEkraEtaTCt4UmV6cUFhMkRXd2pHd3NrR0ZreUFydXZ2YU4rcTRFL21iMG1YdG01dHVEajFoNmkyWjYrbUJHRUZGdXFqZE5XVEJUeHhxcVpRbEdEY0d2T09qMGpuaWpOT3hMWE16V1VpUjdBbWhqcDgwQU53U3JsSEI0L3VINzFRQ0pnYjFXYTlmVjBXdWlDOEsvOFNUeTBkVVZ1RFJ4bVp5aTNxTk1pV1VvcG5xYWVqUG15emdOMlY5YktJOW9zL0JRMzVQcGxDNDFDQS96WHRqR290aEdQd1ByOEJnajkwOEdkQXUzcEs0WmhwWnlwRWMwQkJtdCt6YjMySFlIZmR4QzNBR1c4d3NFaUtwZlRyVVl6WnZ2ZTg1dUYxUlI1dWNGcXIySjZadXgrWVNxMEtaV1hiV0FzQmlDcnBQUWxnd3NKOFlhdDdvOUF2bm5jblRyTms1SXF5SzJpQWhYZkhWcmxuU0xUdS9xWXFxQjhrSC8yTWVIdGJ0OG5vWUdSaDlzSmlDUGwxdFBGMTZEelNYQ2xMWkdzdVBTWEp0ejdSMjJiN0tHUll2eXdzcTZaNFdvR3RaSTB0dXBLRU1CcUROZXZZaVdXQ1l0KzZIZ1c3UjRJNGlhSzF0dkRuTWFqaXZ0Z1Nrc3NFSnVIbGNXRi9DVlc1OTJ0d0pEL3F4UE5ya2RZdzNIYUhoaGN4WlRxVmZOdzg5ckpTdmxyenJINUlGUHM1SWQ0VHAxYS82elFzQUlHNDBuLzVCb0hCbDFlbkhBUEJ3R3NlQUorRkQzbGY3K216dUFnSy9DbG50QVpJeHo1Yi8wcHp1QkxZWW9uVUVJRXdVUGxLTHJ3VjVDNTZKVDNLQm9sUkdoUDhOSVR1UVhqaUZYNVBoSXdYS0REcnVaZWxFR3VZSUJ4ZjR4SGR4SDAvaHZ4NUI0UjRaMTUwVXRmSlMxZnFXd01Fd24yc0ZDVnB4YTQ0NngxUEUvcGh5RzVIV21Vc3V1cFd4R3diQmgrMDNEaHB6cnh0amxXdTdkalZhMGdJM0VqcGVOTHhveDhyeFdZekhnaXNFd0wrWGlvdGVSRjFySDFUQnUxcEFXNXhXMXFGcGUxWDQrbWlTT1ZSRGs5dFhCZ3d5VHh3L0kwTm9TWnFIbUl1SHh0ekVESVdwYU9YZUFIN1pkbGdVQjBJRzB2R2FWa3hJU3RpbzgvUkQ2L05WaXIyM09rVEpxSXlQbVJnYzdOTStSVExxV2htYzlxMXJYSkJUaGN2MVBucFVLQlpsYWhCNjRRV3FGY2hGSk9Xd0RCb2tXeW5pYmhjZW5nRXJrczUyY0wrUGkzVnNCdVExM3ZsejI5UW5YU1h2M1JWOTlCeDdmeHIrVlROWjJCS2d6WW9wNDczdDRnR3Zqb09hTHpONHB1Q3h1V092YUJDQkc2L1dWalBuZ3ZJM3hxeHlMYTY1bjBlcGFJajcwMUh6TG1BVUkvWXRnQ25zckswazZjL2xienBjeTV4Ym5lSHQ3NTBGRnpSdk5ZUVVBak5YSjlqS3NjQjl4bG1nbkNKZDNJeE9IMGs1dWN2b1FZRURIMzc4SytXMUQxQmM0aisySkpLaEZxNmZZNlVURENIUGIxNDJoZDBxczV4QXBhemZXYTJPRGNKN2ZJNUxYSUFUWTVSQVcweER3MTVQMTBrNXEvc3dYRmFlUHBIblRrbklCZml0Vjd3eDdxTU5jdzd5V1VXbElxQlowRkU5bllDNXdZTEorVkwxclN2K0ZLZG45NmpJaHdhWi9Gb01lWHFUNm1pOUFMSkFZTmFHNlduLzNUZk11MDR6N1FHTnF3WXU5dTdKa2xIZnpoaUhQdGdxZXNkbUYvTnZTOUtkK0JRS1NIdVRmRHUwa0lXSm4rTFBUSjZ2L2RNZWVxRTNXNFFJVjA0WFFLQUoxcWFYNTJ2Z2p4Qm5WK1BzK1Q1UVgwbEpySi9DVHBTL0FYVU9RazJLN1BKa25tUzdNSkdFOXd5TFYyRC9GUUEydFQ2dDlMamp3djlNVXZWcXZBNTh4MjhkS0QyVys3U3JEMi9VTitMTGJQbGwvbHIrY3RGVmdzSllVb0RjM1NvVS9kM2VVeTRxNkU2NkIyQ1ZObVRoWDY5TWlub0dlcFdUOXgwMWxHQmp6TlJDSUZSL29tZXcxMStQai9JeW1WWnpOU0ZsSTRjbjJxYVVNbFhqQlVhQ3RnMkk5amtIWndMNjE2SUs4M3VNQXRGR2tRd05Ob3hQK09jUyt3R2ZVUzVLWUNPRWJhRVNvUGc2VE1nMldQUTNwVDhaTXl5QUs1b3pZV1ZRN2ZwYUs0YnprZmVEV1B4TFBZcE9zdnhka05VYXdpcWxSZmxQVko3a05LZnJlVVZTVkRCSkRqaHRsL24xV0pYZ1gzVXBvOUhkWUlXbU9aeUFKcm9Pb000Z2wzNzhJcThYMjJScTNMdkRqMDR0WlJaRGtqTTN4Zk5jZ0tjT2NVY3dCaTQrMCtWWnhhZnJTbFVaK1R4TkdMZVNqRXRBV05IUTBMWkxuUWg5ZjgxMXZWckorcVhKMzBrTTNTTmNsRDk3bEtrc2FidThQS1hCUkNMZ0NSdVlOeU51dGNLM3FNUStOL3hpRlpQZk5kTkRueG1OaU5haE1mRzZmVkorQkZHWEIzQVFnMnhxQklPQXZ0REk1SmE3UVpzOVJENUFHU1FPME5JR3BNYzJRTVY5MDM3bE1XUXMxSURRQzVMTlJQbFlBdDdpU3FSRk5OdjhZWHNOYTBQT1c5QXh5NkFWcjk3aVpKVHdRVG9mQU53cHRaVzQ0eldjeEthbEtVdkN5bHNxdDY3bXpBL3A1dWlBZjg0b0hRNmkyOXFXejVVYUR2VHptRll2cDFvM2tEOHUwOWgvV29yVVB0UzZrVVRwOE05REVJaVV1YXhYN1NxYk85VVhCQlpQcG5rMkdaT0E1bUNDdEI3UGEvWGF2Y2FwYllnWjZ2VzJRcE9nekx0b0ZjUUwybE5QMC9tbUJLNnhMVzA1OURwazgwUFpCdms2TmZVeFVkemlRc0EwWkZlZTE1RVg3bjVFdjNFQkt1N1dpYnZobEdiaGhQb3ozMGZVdzFiSndwR29McmkrMlpacTM5c0R3eldESVNTOWw3R2dmU0tBSkVta2IxeHc4S2dCMXJxdG9kNldYYW1pdWx4ZzZvM25JcmdXUTV5MWUwNndjVitnbnVwTTMrTXhRd3JYVWFGUmhsQ0pCOWZhTno0ZXhjOUFZZm9OeGRMOUhxcWVQTGZDWUpOSGNDNHN1eitzR0t2bnF3ckxLc2tWRTNaV1hERjAySFhrb0xCeDlYRWZKSnBCeko2aDBNYlljQnQ5ZmRuMXNLaUxyWUV4V2g5d3dsajh5NGFDY2dxL1dLTnArTGNtSTM3YWttbG5XTk51RTFRKzNCd3FJYlRsZTU0MW0xa3lzSENxcndUSlZxZERzTFFiejlpazRYZEMzVlNZS2dUalVrdVJjY3drS3dQU2xGbGtnbm5aOGJ2bk5mNzlCajdXMSsyM2M5UFhYamtDV0VuR0ZxNXlvd1RqRU5zV0NSNFpkYnBnZnpMOVdSYTZnS3B4VGtlNVN2dE9lV0dlaVVpZGM1MldXNWFHYmNSNThBcWs3M28rc28ySnpReWQ4VDJmdHFSd3J4UjAyZHVEZ05DZXNtWitNWkpDN2ZodWlDTnVUczBqcmJMZSs3aGZ0ZmVYOEx6eG00UEdGNVFna3p3bnkzOUNoNnNRMlRhQit2cHcxUmIyTmRHTC92eURnNzJ4TzhsME9YcXVjdGczQ3VBSnZQbm55cll1eTI4Ry9KS1dkcmdOZTgzSHNrYmEzamwyUlgyby9PM2JrZDJxdTluL1dwN3ozdzF3NXBHWGdUQmhmU1h0bnFMNWthdmMySzgzSGhpRExGSDBBNmgwUjVYNm0xem1GYmZrQTlvVXdPUEt1aFBKSzArV0xqTXA5NlUyV1ArWHU4eEZ3VGNQRWlpdEMyWWxqSW1RTEI0VjlaWkQzWG0zc3JDS1dzVmtkUUQzVTd1aGRPMGZjVnI4cnJVeFplNDRSdm1TeFl3YkVKR1A0SDlpUzVMQkplSnU0VGJhMHdaM01iWStXTCtzRVcyT1lqODFMM3AwdC82SEJORmRkNEtBNzN6YjVOSll6VWU5V0RtM05vTHcyUkxtUGFud1hqYkl4TkRwdnN2bEsvdWRHbGVpZVBocklNVjQyUjVIVVJOVFRESUVGTUN2akVBUk5Rb250MjZHdVJRcGR6NXRlbTJENHFLdlVVNVBwWFo1WWtvUDRtN2doMjVQdW5malBXbmtxK1NOYmlJUHBuWDdpVnl2bGZSTTJPN2dDZ3VKYWlJRUpvMXgwNVB0TDUrUEVJQ21rTmovZjdvdTlyd3diTFN1ZlJUQldMVkI0UC9aeUw0bk56cWVacXNVSkFhdE5Ma1RqUVBUTzZreUtlSTQ4WDNNZkZDU3J0dWVRSUtxUGtzcldEREttU2RYUzVNajc0NEx2MGt1T3c1TWh0TzVyWVMyTFdBeVhnWWcwd1FIYUZaaVlHZnlMeVlxMUV6N1F1UkFsSS9sVktUcXM1cDM0SHgyWG9OOG4zdWlBREdkNU10bHNwTncrWUgzTUFVdVJyUGh0bWdWTVhkV0d4YjdPSHlTWkhRSDVhYTlha3R2NmpodUZHN3JxalcrSm9lU2tnd0plYi9mdmR1WW0yakFHYWppNjI5dmc5dDdoZzJDZkhnTFdoMXRTOGU2YzUyckNCbzdOa0tnbDJub1BIbTlXM0RJUWJYai9ta0tKWFRlRUN1a3dhYzhJZm50ZzJYODFHamx3VThHcVErdHE1OFArL1AvbGd5eTZ0dzRZa0RjaURMSkpuV3F2dmM2MUg0Y3hTb0xEaTAyTnBScEtBTklDVjNYcmhUV2Zjb0I2ck43dVNjelU3d0hidW43cVk2VVJpNnNhVTNDR1JUMUVESExacmdpQWE2dnJ6L0RGTWZZTW92WlhJU2M4VTZPWjI2bGlxTjFwTzYzRDFBODh0dXcvdlAyaDZYZldoOVZGNWR6cjdNclBNdWFrYWxaSEdEWFZQMDRzNjVHSG8zY1MzbXZOdTRUR2pZNXQ1bEswVFBuSXJjMCtCcEFrY2NaYlY5QlZJU1EzSUNDYUVVS0xJaFNXTis4YkExaTZZeU1sMW9XRXhNNS9GNjhlSDBGTDR4STBsWUZ2OUovTEU0cGFBeEVoZHFSZXJxZEVvZk1yQU9HeEY3WktMaHkrMVM0VmUxNkdTMS9DU2w1VlFTR3RWeFc3REdtVDJpRHlkQVZsSjhVNnJCMXJLMnhINGo1Vm5tWGZhK3l6elVRT1NSbUl2L1RWRUpvWHJYek9LdDZFcXFyTFp5NjFvRnZvME5YVUVudUFMa21hc2dPNlI1MlhZTWU1RGN0Z1BsSXBKSkFxZkY2cFZRSUVpM1drSEljdG45anAwVGJkaktQdkJDRXBwdWpkRGVuclA4QUI1QjFBdmN0Qm9vRlY2NmZiUkFOaTl1ZjlHY3FBb3E4L1NGRExPenJkRjM3Y3B6eXRXUHhaN2hVSGtQcGRkdytCemJBWmhTeXJ1TEhyOHBhZytIWEM0TWZGdXgxcFU3V0dVWmpBK0wxaSt3V2VkL3dXcGZOUk56T3d3Rzkrc1p0ejRGQjc5aktZWk1yd3VEbkJSeEVhc01VRnRQRE1kVW0yTGtjM0Q5MS9vTEorUU1OZldwUWt1cW9YY1AveDlrR3c0a0dRbFlnMWZ0dUVHY2x5N3dabFRRbTUwQ05oVm01Myt6Wk05QzdQcWFYWngwNmlyZmlTbmNETlRDRjQ5akRHRFlZVGNRWUh4cmR1TzJ5QW9BMWFCZk1lZnY0TlVTa3JrSjNYbkFsN1JXdDR0bGFRcURqY2duYk9Cck5qSDhWQlhrM0tJeXdBSEZwc2I4Z1k5cENxQy9OMHZURFVkZ3lZS1Fic1lmQ1E4N0F6NHQwREFEU01JNHFrWGoyQkZENzN4c01tRGtRaGFaMkVTcHhqSGdmMUF5Q0EvOU1UR1ppa0lPRjdvS1pmUENETDlQV09pNEJkU3lzcFNmZE5rSkhJREt6SWdSTEdQdGZadTlLQjRBUmo2NVNUYUlqUkhLTE1Ja05KL2VSZkFJaXlPSTh2Mk83Z1NVRDNmQ3R6dGs0amZEZ2t2a0w4Qmw5UWtvSnNLbEhOVmpnOGE1K2tMOTRQcForQis0Z3UweHFjeVFNVm1Vc3ZXMUZSdndQOEJYOUQ0STFZaDViL050WDBIRmZ0QUt0Und3MHlWRUFTcFpaeEtkc0JYQ200dFBPQkVLYnBQM2l4dUpGaDJrQ3BSRmxsajVpQzhiZHFab0Yrb3NzUWVjTUxPNk9oN2lBcGlHSEs3cS9YVkpXVHVDZW1mSjRtZmEvWU5FSE16ekFPK1AyYWhYcE9nRTNSdnZ2cExlZzJNRERyK1JVOGkveENuTU52MUFIWnBvT2wxWnlockovMmNMS1NUdU5FQTRHRCtXRitod1lLOFJPUXZIeThjNVg3cTRyejNwWE0wSmlCRjJxTGFBakpMTGI3enowK05iREcvUWpKQ1h6ZGxnZ0xnalo4L3FGSVpmUFRwTnVJQVZEaU42RlgreTBwYTBmVTdwa2dhVzlyVjJOYUdtak9wZDJZZDlTdU1BZE5MS2xBbWlwM0RVSG9mcWIyMGk2Ry9zQ1l2Y05YS2M3ajNuYmJOOVo1bGY0Z0U1NThYUjFHUFB5REF3N3BtdTRTMHhScmhvejZuUmZncndhT3FPdnhtOFFFVjFlVnJSSHlVK09JOG8wV0pDZllOWk9SS1FoK3htdjBKbkhNNWdHZzJydHg0cUpscnZEMmMwOGc2V25aQWwzWTUvZXVqMzlrN1dNTG1iT0Mrb0tLUlRlRE9OS1BiZndReEdNbjdoSC91ckEvVkdCRGFLSWRHWUQrdkw3dW1sZ21PbldnM2VPd2dUL0lNdXM5REVoaW9jRncvN0Y5a3dyaWFFK2ZEdEJSMmRQQm5Uek9OWXhkRWt3Zm1HS0QwSEpRaFFSVW5HWjZ2SUlyV3NBdUZ0dncxK1NvMmRCRW1kd2EwQTcvd0V4L0ZkMi9YOUhVaXJXWlozaHhkTEVlcndvS3Y0d2RzbmZab2hmdGtvWkptU3VlaXVHVlRjYllWejBoYkcxTUJSeFpXMzZ1b2hDSXlGenJ6K1lBZlBCa0dPRjluZm1KVUZQc2JBNWw1d0dGdVcwbjFEUS81M1JpK0x5VnBIYURvY1craUp2SGQ1a2xhSE5meDNvdlFCN3RnZ1didWUwWm8reFA5NFVqdDk0bGFIT3R4Z1FmU1JJUy9kaDBTNTZyNS9FSkZIU1NjNGN4TVVnZktFOUVvc1J1YVB3ZlFZN21uNmo3dFB5TnNQVEdUbHJNQ1h6R1pWOWhtL013SGY4QmZHd043bTY3UmoxM3FoSGFZZWpvQ1JUclFab05mRDlBbHZTS1U1RllGYzNnejVaOFEveTV2OXJxWkhnSmpMUFdkeXg4L01Ca2RLUEFsNWJiRis2cmZIS2FKS0VwS3E4S3dCMkVSTGlSTTVpa2N2OHJtREVpRlBUTVlwOWZvdGJkOGIrbTU0MnlReWNkeTZXU0hrc2xlekhVSjljT0NjWjBTNS9xWjdpSkdFWFRXbmdheFJ2cTFxdDFPZDVwTUpKU0pPdmljeXQxM2xQWVFYZG9hazUxTHdHM2YzMFAyVlQvaHdsZ2RuUVVXVkdmWHFYTGZvNk1HdWVFUTFDekZCeUVxVzAzNkoxeW1aRnEreWdzUklYRnJTRXdTckpCZHJOS3piVTlKaEo3eVZ6NmIvWFdBOGxsOFl4SUxQaUZ4SklMUlBGZGI3WGw0NWNscHJkZmh1V2FSZFozQ28zZ0dPTmFxSndOSTdSaEZ4S3Y2YVdCZjhkR2JWaGJqZ1B0cTFrS0FkTGZYMVhWZmhHcjA2bHFyK0didTJPQlFVTmN1WjdpQVl6ZldURWkyU2QxcjNxWXNLRFFYRnpXUS9pd09PZldhRlNyQUM5V0k0MDl0Tkdsb3o0ODR0ZmlhSnNRSWlTc1pqS3dzQ1NxZFpvNEl6ZXd2RjBteTFQejhFRFl2QXR4U2FCTjhwQVhacXBITlBjTURTZW1iYlZrNFNCd1lyM0hhTkRGZkZOa1FNNmZuVHNRQ2FQRDNpTitJZy9rZ1hpdGw1ZG9HWlZ5L2Zza00xTTVsWk9KeFF5ZXhvUnBSNFNDa3E1UW1EVHZLZi9jaE1OOWtmS3AxRVlmZUY5RUhoY2h5OXdQTlJyNGwzbStLR1NUTHE4aW90dFV3Ny9OaE5PSGNoS2ttUkFxWjd3QTNlNUdhYXdtaU11ZEZsdkRGNjVBZ0hNMElVSEp0M0NWbnJ4ZS9ZOGoweUJjd0dRbFpCckdnRE9wYm9ta0pZVFovMzZ3T0dXYXNaOHFkSDl3UXZxSEtCT0REcVFPa3ZNS3JpWUlCRnU0K081Y3hiRzJmUUQ4ZHA4QzdYVk50VEY2M0pnbzd1alMyNWlCRjdlSjdOYlQ4NG5uczJIQlRWM2hrZ2Z5cFhHNlYvVlNldkQwVWQ2d0U0SU5Rc0RaZkpqSnlGbGFKbDNrMitGelhLOVFTSFdHSmQrVXpJK2ZMQ0dYa2NOWnNpNXRqcTNyMElxYnQ5bTVPb05GQXRKZ3hwZnVRMC95VDdpU1J1RlFjK05PY1pKVnNxYlJiWENUbFJhNCt6bnUyN3JOUzI5R1E0RFl5VmE0Z2F2NWk0UThYdFUycyszREh6bVVWcmdZckhhSGlUVmJYYVY3dFFjNzhlMXBvU0ZSejdXN1phM3ZjbE5xZXFqbDJML1p1Sm1MOTJJZUtxb2ZtZHhYLzVmem5xZm5YRElKbFFIZEMrUkFOYnZhVjFlaVIwdkM1OHZBWVhzNEZIT1pFN1ppVXdZbVpDWmloWTdjWkgrdXMxbWlyMm1vUXk0dWdYSDRLNVdXU1I2ays5YnJFWStsZ2FNU05sdzJXSTFUSFViMS9WUnRnZWdBRjZGTWZ4T2JWeWJTOWFZM3hVcmNrV0JxUmRXU0w5aSt0cW45LzBOMmJHL1lNWTNvS29oaUx5YTJTcXFhbGNpVmdXYXEyd2NFOFdIc3dQOWlKSzFNaUtsaW43R3RqMGRTYlBHK2tMdVNQT1VkM0hObEU1Q1VWMjQvRHhPVDlyWUZXUEIxZnhnUEpvajdDbSttUTZ5dFNhRFZsZFlLL3hlQndsbVVJS3RBMEdCTHZLUkdkc2VwM2lncFNEbHlxS3Fpc2taaDJrY1BTME9nKzJFc2JqYU1XR3VTeFl1amtERGxUbXJnMDd4WGVuL3liaDFUY2N0YXhDdzNWUklqMXdxMkRlYng5MmJNYjZyODlzOTVNZ3hBYWJ1NllJT3lmNGtDeGlGbWN5c0JFMWNhY2hNZ1FsWnY5NDhsMnJwRU95Rk4xMTJpU09EWjhQNnpHb0hBbWdMYzN3SVA4ZVhUMDQ2bjdYbDIzUzRsK1NUb1N5U2lEdFRNb2xRWG1qVExlUHBobnNBMFZ6aDBZcjEwNCtMNHdIM2k5bVlQd2dvcmloak1PMFZnSnlRcHZmbFdGZmM2b0hWeGw3MTVVczJlNktPbWN6VUsvWjU1QW55TEw2RGU5NkNaeERpRE5kcnNDUUJIUU4xSWJJOWFReDMxbG1jVURQUHQ4L1JQUjVyNXFvUzdCNllwbS9XVmttU25vZ1BoWXJGSlRKaTA4bm1CTm40RVBJVWYzWlR0MWY0TnhoMDFEREJ2bkp2MHRXa1ZYNXBJdkRvTURlVTBzVExyL3MvMm1tNmYwVHJ4cDBQRWNKK0xUTHpxT0xreFlhcEdMdW9GY3d5N0JheGtGUzdYSUduNktRcDROcGswSnIzNGgzRG9Dc2VPajhuaDdiS2ErMExRQWlvbFp3RDNZbGFBRU9XRmtrcnZROW9yRm5KaXBmUm5TL2QxenllL05UZFRNS3lnK2xhTnNzTmpnTGZ3VENuMUpTeUNpeEtRbXFuVS9CNFErdVdseElUYzdPbHpMSGhqYWYvWEtWU2tqcG0yMDg1a0huK3dLOXp2QUdka3I4dkVvdkZCSmtzbFdGVkZXY0NVQWRMUmFLL2wwL2ZZT1g4Z2N2aXRKVkVRT0c0bi9DWEJtTmpqaVQvMlYvRk92QXZRcUtEVHU0RFJHT05BQTNKenNvTGdlMGJocDNDcEJZN0ZnWGpuTkl0ME10VitkVk96R2NVSjF6SU1sdDFQOHJnOVJaQW42ay9XanRDc1VOVDRIUkhvUXE3YUhqTXMwUzRxdTVXVjgvSU5aQ2tyaGdMdWtDSkxlS1pRajR6NHNwaDdJMlZHRVVvTXN3b1o5allkMERtY21LU05HOXMvcEl6N3NqamdSd2JjWVZVdHpNUGFNNmtOYUdiV1k5SjAwQis1eGxWdWQzVmtUTGtXRTdqbERPMHBqSiszYVBTbEdhaXF4ZlgrRXhBbkVOa0dpSW8xQ2lYeHJ1U0liR2FiZGpHTlo3QU9jWFcyVnNsbUFwZ2w0MnFrTHhzRzRPV203R0lkZjdrNlpEZVdibFdGdUl5TU15V3B3UHhzdUJqTDUyYmNybmthaGFrT2U3Q1cydXM3WGRHVzNOaUVzOVhYbm5yemhxem9LS0ZtK1RBTEFPbjBVK3o4bjBoWGN2M0JxVSt4RmduUW14Rk45eG5pbjBsR2RxNmpxRmhCZDRySEI0MWFnMCt6cEdhSGNnalcvOGhvZkZCS2U2SG9COFErbUVTK3drNEN6NEMrZUJDTnBjQ1JtdDlxOVlkeHFpVnZlUDIzWVo3RlZZMEtyMWNxTkhma3dLelJOYVg0UkdTL0JOb3loUVo0SzA2cllzbnJFZU5tQUlYQ1d0ZmFCT3loNnFLOERYY1NzQWxtcWt6aXpOUTFuNGJENGhyandkUDNkMi9MRjZWbHZXTTNJdHRjRmQxdkhVa1NMUzl0TkdQTkhqQzJaajNRMXpTRkloK1dJRndoM0tqVVR6eVBQVmZFK0t0cnVxdGhySmo2TkI2Q0FEcUcxdUY3dWtHQTgzS1kzODhoVFAwYmwycnZNT3dMQ2JSdXl0MlptY3Y3QW9CUVdvU0FpaWZXOEphREN4WURIZXZabCtUOGVYbDNOdkhNaUJqMURaaGZhZk11NDEzeHpMeTQ5Z3J0T01IdlRwbEQrclJXbCtrc3NWK1g0MjBxRGxqYzh2dlZ0ZlNrT1RCMEN0ME9aV0NBdHNzV0dBbWYyYy9IbXFQYmFVeUVmSGhiUk5zd3BRNTVsb2NCTmUzczRuVmcyZFdoVE9oOHZDZFJtMHF4NHcxTTlsSGZlc09WOEJmTkR1M1czUTUweUc3WGorYkFJQmdCdmNFcVVINDZ6cmE2Q3BNa3Y0K2kvSHdHMDVFNGhsNGhTK3NtdE5kdFJicHdFRFIzdTZlUG9oNUNFZUJGT1l1MnVnaFNJSjg0bjJkckl6K0FlUG5HTE1PWUJmMHhBRmpOc1g2UGZDbS85Ry9VWnBPd1d5MTkvRWdBUk5ib25YaVJaN2UvbnIzcnBFQjRZbVI2dTc2cFRJdGV0MTZvZTlmTmNnVWlpVWJYVnRwR2tJUUFKSE5DSnJqSGJxOEFPUERGZkJuLzJoNWpmaEU0VDhJVGhHZ0FPL29kaGxDQUZvK0dpVzhUNElzNlFmbEFmTGxpd3RHQXZLK3FEc05vV3ZuT2RnajVTSHRFdHhsTjNXb0VkZlNydWJ1ZW9Najc2UW9jVThKRHVTVE5ZWnU1Z2J6b1RHUTlpNVZyTzFYMHBxTE9HaG9vOExKSE11cG9KSGFZYnRYRWprZW5qZE1PbGN4OTBncUh3UEh5Qm1vWDR5bUhSZXBuZ0Z0NUk2L01xbEZKTmVYSzBYVS93Y1BwMXd6Q0FGQkNCVmJRZldSR25PZWhzSGF6SFFYSE5HK21jSUd6NmltOVI1eWdpMzBWQlRMYXg3UUxRYUZmOVhySzdnT2w2RFRkMkoxRUk5N2dxN0x1T1NyVzRySlJCM2V0cjQycGpldDMzaDk2RGNLZlMweWxwWVRmR3dZT2JidU0wMVZqZlhjbkxKZU8yT09VSEFUcERaN2c2TU5zeENnaXdPdjlRTHo0TnJTTzlhR0E4d2JkbTJVa1VvVUNlUWpVeWpqb3phbTI5RVpDQllteWNJcUNYZWJNcXNGcWhZZmhCSG9mMXdacjJPV0hCRDd6Q3daZ01URUluVVlOSURVTDlrQ0pvWUF2cTF3akhjR2dNVTlJVXFBTVdPdWxRRXlxc21SQW9oU0loREJtS1NKUm91NlFxY1Y3djBzNDBWRDNpR2J6eVZwL0VXdTRad3lpR2VWWlhxTjNqSzZodVFyN21ZRkE1S091OHdSZjR0UmRwYVhxMUxpQzJBc2ZWYUdtemt2Tlp6Z1cyWG1JMXV4V2RUTTRhMEh5ZFlJK2U5ck93RTd5ZFhlTDlRb3pralhtRllqQlJnNHdqTi9qZHVJWnBLL29HQkJkN3V1SDUydURqN2g0bTgyb2R5OGJyZWNodjRvWENaeFVZWHhObEo3dFg0cHR3RE5hVTNJQktiNWgxY01NS3EwUE1wY3JPc0gvbzNPY1p0L1RGMzY4YzhCMGlZYXgxS3NyQ0R5YXBMelRpcEszb01EbnlpOUFmT0ovYUx4TmJLblhKT0tBSHQxekh1aVh3V0VPTC9iYUd6b25QYWE3dnU1SkNBUkhxaUROLytGb25aUld1TE5KYUUrTkVHY3dyZHYvc2ZxZWZGcWFGQ3Q0L200cUFySTU1a0owZkh5R003SzFEN1RYRTJqdjdWMkgzL1pBK0RGRThDUlpZK1VPSW9RakN3N3poSnhsTzNMUE5LVERDTXM0YklVeFFSZlN5Q1pTbnEyMG5aUisyUWI3VWJpRXpnbkQvUjgzYW03bFphUzZnS0MvaXFlZlpnSnJ6WHl5OUtteEVNKzRMMFA4TDQ1K0lhaUp1OXRiaGFTOHBsNWdSTnp3NU9rYldoTmJaWDZwZlJLanp6UDB1Y1ljT3luUjh0L2EzY2wzTUh0a0NVUm00NmRXUHV0aVZDdHo2RXZHOHhZVFhVN0ozeUR4ZTIrT0xDNXd6ODErck5taEtwdDNLUEdnbTlNTVhNSnpmbVNwY01qS1h5dk5VdmlxelJOOFhEYlRnSXYwTHB0ajJQVC9YTXRiWVorTEZVTFdmR1VyL3pNcHFKSDYzQ05Ta1NQazY2NUpCd2xwOXR5ajlkOEpZS1hhaWY3NlBybmNJYVY5cENvaWhOUzBEbERRSVMxbllIVDJtQzJ2eFNNZjgwemVEOGYvbmRlczF4QURIRUNzZmlqOGtZT1NvK3A4ZFFjOHhzNDBTTXo2M1Zza00xakVkYkdjczBSbFlzbVRWeHFSUmtuR3JzVTVxZVdYNnF4ZUVqY3cxcG1LMk1lRmRrTzY3ZHZxK25samRQbysxMTczVnUxZy9QcnRvQm5wMTVFK3k1L1VlNmxpMGxSL0FYZGp1a3FxakRod0w4eUl6SVYxWkRSRnF0UzEzNWM5SnB6SWFQRE82aEJoQk16UnowaG9JMVhabjBrVUk5eUhpOWlQNG1jWkU0elZ6OE8vdWdJcVN6cVBKQWRTQWI4LzVwV0dDUHliNGY0S1dxYU9tMjBTS2w1bmFZWUNPMUR4VW0vS0Fyak1oZGk2cUVYZnYyTWJxTUE1Y1dNdHpRR2FnYnNZTmhwSEFkVHY3TUZEK0dPQnZIa3pnZHpOOVUwek56bVpUVU83TEs3MEJnc0NNQmNuZ0FKU09vWnFUaFk1STk3c0FwNXN5UUVsTHhSMWFqOXVVbXNjTU5qaVJJUnp3Y1dtdE9UREdBbGJaMy9oSERBOEVZMEdheUo5RFQ1SU1sL2ltam9oK0gwS2Z4L25YMVFOQ3E2aTNicnFVYmVyUENteE9CNkFidTQycnZQMmszOEpZWTlZUFpYSnV3MXp2Q0NIQ0V3TkZ0eUVKeTl6SklNSlVHVWNvV1RrcndSVFo2Q0VpRWJ6MlQvMjMyYTBrK2hoSkc5akhoa2RLWnVDanNrdkM1cGxTU0RuMVlHWFRjSkhneExkWHcyZDZOY1BuVlVZV3EvMm9pMGNYNCszWnVUZFZObmZybGw4a2JtRVlpTndqK3pGRENUVWNuVFBiZU9PbUx5ZWxsMDFFdktnSy96a3R3MWdXSGJRUlNoNm1TTVR2L0VMcHRaYTNwL3FmdE15c1BEdC9tak1kRkR2YTI3M050dnlNZit0NjNxM2I3VUx3ZzAxL0pobVV5VlhtQVJWU0w4bDFBUlpjTFlpSHFueWJXTzVNaWc1WnBkaitRTFRzbHMxdmdrY0tzLzB3OS9uQ3lSaUE1eGVqOFJPM3F4Tm5FVktkMDV2NUUwZEgrZ09GSjlQcG0wU0MybjJSZ1hESnhacWZBR3Z2WUZOOVVCbVJBTVZXbUFXOWNZeXh5ak15L2FCUHdqUEo5ODBYV1NaTTlTdU5HR2QweFduWFhHTXg0UEZhZXBrbTFmNEVXSG1iZEZJWmhMSzFwMklFeXYzTmhmV0oybWQxc3NTcWVNT2JjVjN1d0NkQ01qcjBVek0zMnJRRDJzU0xNZGNGeVJnV0FLbkN5MGdQNEpDbEZ1Y1FYZy9KbWlUL0s0UlBiQkFXMzlIVlhvYVVnQ3hFZjVtVk1zNzFoeWJQQzJDMTNoR2VwbktJMjllN2lvTWZCaGFMSlhKRVk5RE83MXVpT2tpWXpEN1ZIdk51aXo1SC9ORFBhZENCR2ZtUW5PMi9FU0dsVXFONXQ3VDBrZ3hCK3pDRm9McWVpT05yc3NKZHZ2Mnd4Q2VJNEw3M1ltMkkxVVV3WERCTXpidTZCV2ZCbkxtU2hQazhmR1hSV2N1dm5KdGdTcVVFMnpHTU5DMU9KL08wUlhrYnJRNElzQnI3b3IrQ2xUUU9oZm81K3B2Rkg1TStKa0oyaGxrbzMvSzF4TWVjUEthaTZSRHhKQWFaYlpyeUY1S0QvZE1GVzlPWm8rSmhKamVmYTIxc1FGUGpBb2FTWnh5WmRWWlB4QWxRUmpPRlJ0OEdUdjhEQjQ3WnJuYXpEbTJ5UjVaTVRrSWtkSXc0ZU5zYzg3YTBHVldnVVl2QnEyNG5uMTVLeTJVNlFrb3dxYlBqMVdVMXg5YlZQNDc0WkhqeXFHM3BkSUJTUGVselhtUUtRTVc4TSsyak5aZ1lrS1MycG9oa2tIbm5qVVRmUW56YmMwSlFHbFZCY1htRW8zTmo5bGlaTml1NzNVbTJXeE8zMjBBSnViL1ErY1hiV1RKekdhM3N4b0szeU9HYmM5aElnMHduMlBpOUdrVVlXWHY5aG4rR3A1Tlp0QTVrZHFDTXF2NDF4TzNFZFR4S2tlZ2MxejBNYjFFenlvNGJ2L3cvMnQvc3FwTEZOYVVUQVBQdURYa2JWYVNBUEhoY0JGeVJwSWw1NzdHREhsT2dMNEx2bXkrdzFKdVBVSmtHdUVscHE5dlVoR2k3VjNxVktpTVNuSzVQUWdYQkVySGUwR01NelNoWmtPWFpWNWZLVzZSMWR0cHVkdzFneWhQN0Y5NytKUEdyY0htbmRtVlo0R1NXSGdPUEV6WFplQjU0NW1MbStjUk81MlNSeHhIWGJJTDA4VXFoSGk3NjErbXZ6VTQrNzJWYzAvcDVCNHVnZ2hIaklmQ0tpTWlBVFdPdWZMTmV4Tjg0U2M2UDR0K2RFdmh5eTVoZGJaU0lTL0wza0V4ZUZadE9KMmtnVVk3aUZWMjdFa0diTi91MlRieHZCaUlZQjVwRnpuYyttcitPNFZKdkE3QjAwbjVib0tNMDArbUhYNDRLRlBJd1kwalFEUUlUYjhqQ082d1pDS0NOWkdPazBCSVVCbTNhM2hCdHFXS3VRS2J4UHdTbGZORTBtajhiOXo3UU9kYUw1ei83c296ZnVhT3hWN0xkRDZJL3RXbzkwemVzYnBBWkw2Q2ovQ01FSlUvSWFLb2wyN2FJNG5sSGtjbE9SYjZCTFNrV0psMkgwamJvU1dDd0h6VXBmOGtzcFBzZ3A3VFdRY2RVY1JIUXdsOFdZYlpQRzVEUnp2SVJEWHMzbklmdGZzRjBFcWt2K3dtOVhQWFd5ZzFON1ZrYjdiV2VXN1VUKzFFOEJ5UkxzMmlzRG9zeXAyUnEvRmxYaTdsaHZPRUdCenZpM1dSM3ArbVdhUlpONlJIUVFaZDVnQzc0bEx6MEtRSjRIeG1FL3JSV2MweWZvWDkrTVlxbXZYMGEwRGdFWDdacEgybUprbnkwa3k5OTF3K2VXQmlHdXhEUnEzTWFlVnhHeE0wKzRVZCszVkRYclJGZnVOVEIrdCtIVWxlNXdGWGxleUE4MUwwZW1ONzVMNjZvcEVCNlNqMkJBTXY5aEhEMGFaYXVLazJPbHcwR0YxbmRZbHJxZ2JEZmpMSWovRXNOWTFmaW5tb3E5aHI2ZGt2cGJXZGJXY1hLU0dwQS9ZVUtDeEFPWnUxaDhnWmpwQ1VJcWJEbW9iWElUM1lGcFo0enNncmtDOWtHT0hZNEVwR2dRZTBpa29IdE5XRGV5ekNIWlBWNFhsYUFCTHdEZFE0N0tscXVHYmlZUm1lMUM4Z3dvRFp2dGZnYjlINUtrQVVLR0JxZFJmSHBvVVBkbCtERWpWQTVzek51dHFlaE1qZS8zemtEM21GRGZvYTRMallPbXpGNmdzd3RlQ1JUamVOdWdKbWhiOTJ3NUJuSkZMTld6MXpSTlN0ZzhwRlNWakdHNFN4dWJOcDAwdDNXZU5kSnNUUzlpd3hrSUwyN2U1OTRWT3RwaGxTREFnS3ZHVXovSVpiRXUzcFh6NWdkeGRsNHdUWjAvQXFiVnpRbXMyeXp4bGJZNXZQdDhZOWpMa0kyaTZRNlUvMHhPc1cwKzg4b2hObmlpZXkwZ0YxTG9LSmdBM2lLUTFzS04xR3pubkJIN2FTSXp6UForbGJRaldsdUxtb0lZVndwYUcwSmVBMGc2SUV3V1VVanpaTnlRemFmWDhpZ2dPUnoxS1RGUk9LVzdtZ2hNd3Y5WVlpcldHYS8wb0hiVmFyQVloeWk3UVI4WTdTaWlIRHAwa2F5NU5LSXM2SC92aG10MU9wV252VS9kbjUyWC9ucUEyWUxmZlVmOTBHa1U2ZHRjK0VyZlVNMWtCdXVlZWRLOTBrYlF0QmpyWjZoOVVYRlpsSCtCUXIrUWtGV244QlptRnhmZzJFL1QwSE1SQi9idDdqSXl5bEJRQ1lsYVo5aXVkazV5d2tqd2JZT040WGxsNUc4RXhobU9uL0NvbHg1L2JuOURhR3lvWXpnOUd6Tmw0V243OGRWY3VDYnAyYjlMeWZFb2k4QUZTSFJCMGY5YzNQcVhmWjNSTUsvQW9lWUxGK1JTcFVCMC9DOXlCVG1rMFlBdHVRZHFmZEFZZmdIKzg0RXhWMUZLWEZONHRLRWhjTmZjSndUaWpIN29lMVVwME9vdE5QUXFTWmttZ2YwQVR3SUg3QlVnUGpWS05JbTFsdG92SEZsRVB2TVEzMnNMUnp5QkEwOVAyZTE2QXR2UmxTVGdKaDFiVUZhMmVITXlKeEEzSjFFNlo2eENrTW1rQVVYTVFRQUo4MzNxbTlNZVFKa2xUYUt5RGpBY0hUemRxcThEZWQrbGlsL2ZRYUR0N1pQMStUV0RPSnd6SDNQV2FWY3pSUXZWczBQYTJTYnhnSXoxOG51ZXc5WndDd3JQZjVZWm5QY2ExaGV0UFEvRVVYa0JFZDAwc3lPdHp2UGszMERoODNmYmRnZTMxeVVQNkpVbENQRXhEWkhTMmF1MG81U1MwRFVNT1pSNGxVa0daUVpFSjFvNTZ3WXErY2ZoWDE4ZnRvZzU5UGtad21ZNFdCWThOSTd1TmhOekl6VWIzbGtwTnRKdjVtTndOU0NBK3UyMFJNRExob3gwNk50WGt1UHZPeUFvTGZFTTdocGhyYldGSTlVemQ3ZVVIVThObEtzd21PSWxXZEdObS9HUFZjS3BzV0Nkek4rdU9Lem5SRmFmVW9UOGlDU040MnJHT0xHTDJrRWpDS1F3ZmRtNmhrVWIySzFHajFlQ2VzNmpxWjYyd1lUenkzVFlIQU1TV0REQ3BrYlNuTVdkdFhYVkpwTWx6ZVptTkhVZXhJU0JXMkVCWDdkUy9JdE5CT2N4S2ZJWGVZQlduTEh1aTduMXVnZS85VkxqdllsS09HSjkxWHJPUng1aUw1UFJza05USTBqV28zTXptdDA5V2ZBZU9wT0ZoZTREdjdNckJ3NG8ySDlWRWsyeXFGMStOc0NjbUtCL3kycEVoWndLc3cyMjZHamR2b1FBdnRPVEo2QVFHWkpVSnJkdmdRTVNzRDdpRi9mUDQ2Z2g2NWpQNGw2VzBGaUZNWkVaK0FkQmNXeExtYkpRMnlUelZtRXlwWnlKQWhGWi9VbDUva1c5ZFRBV08rYTJvUDVMRGNjSURMRndmZ3RQa0h3T0xLWVdVNHFpNStyRjIyUHAraklKZTlLOUdRQ205eEhLd1VLRU1QbHJqWU1KTTFhc0xOSkFkbHBTMm11eUR0RlpZcTRIZW9raExHTGFqK2xveFhqajdDajI3SE91TzRvY2VFZmp5b0tpeG1mRzZtSytLLzErOUxJeFhaK01Mdk9iZ1J6elJ6MjZvR3VSNWtGaGJEelVSM1FseDBUdXVJVnUrbWlYeDV2U05CRG9Pa1ZLdXhlNkNVcjFtODlGTTQvS1dPL0RqRUp0MlcwYmRGdE4wOHhWVEYxdDZtQkpFdjhxMFYyM3g3cktpck9rdkNnRFcrRnV1Tlloa1lFVkE4QnNTVFBWNjc0eEhwek5FdnJ5VWV6R2V5OTh6N0VrUGFvZkM5c20rZ3ZxL0pDaldiRVZGaWpIOGpOdkhsVlRkY2xHaW5wYjBpYUJOZ05FajBTY2dmOUxCeUNPc2ZhQkI2TGxPbldKMkxMeWRYd2J0UzNpaFlZMXg0ek80dDZNWnhSWHovUytyVUdQZmE0SFo5cHZPUGRXcGwvVVRGT2VFeGFlVE9lcUg5SitUQjFxWWdlblNPUmJweEFrQS9wN2dDS2QwNi9tT1BuYkZOUjZpQWhoWTVESUY4WVViREpZZHVoSjZlS1ZzYitFMWx1UVlLdHg3ejZEZUFPNCt5WCtkYnZjS3FpOEFZNlF6Snl4N25pbWduNCtDZnlIUVMrYlcyemNRS1ZnYkRwTDJhNzdOdkdyUldXQzJ5Rzc4bkN2N2R4OHl4alRRUWJqbVp2bXg5aisyZ1YyU2dRNWQ0MzhtSUZoOHljaXhWODFiOXZ3N1JVN3F4UUNFUjRZMkNBbWhZUHpRZGs2V1ducGtyUWRwSDZPcHVhYUhnUCtOL1dMdk5vOXpCYzZVWHNuWEJUbWJ6eEMrcW5XVStDdkJNNVVOdndnck44NTgvSkttejV2VUdnLzE3bE8zSVJ5d01lMEJ2UEdoMHJoTG9PSnBqZzR2ZVFPdmFkYXZ1Zk5QT1RROUdyRURZdHhDeXViSnljQ0dTbWVDZHludG9BSDQyZVZIZVhmYjR5a2VsWDBGSzYxTDNFTWRFMDM0RHo2cDB4cnlPSE5aazNWYTk5WkdwV2hLRXJ2UEhUYkpiNmdGTHJCRlBmNkdRUVY2bTQ1MVdpMEg1ejVaWXVtSGZtQ3hLQ0NvVjNVb2M3VExuanZBeDkwcUx2TE1UWFBIYisxYUhBMHZsMGxBaTRJR2hlT3ZMcjFTZllCSjIvZXlPTHB4V1RmNUlWY3NIOEpTb1I4RjF2eDg1bjc5Q3NXTkhoVnUySXMxeno0cmpLZHJvN0hObDZaVlpHK1prbGRSOS9lR1JQb0EwV2Jic3ZCdnA5bXdtRHZ1VmRBcWdNamdFbG1NWmg1QnNLV3hKdUVoUW52Qnk5Z0I5QjE5Y3RVc3FCbFhBMi9BcnB6T29YT1JQZ0FGZWFCWU1hc2lXazlLNnRKZ2RPdDJ4SkxyTmpNT0kybTNsL2UwbThnbXRSdFRvN1NORmI3RTRQVWFiWXhmR0trWTFiOXhkYmo0T0srT29TYnBzKzc0QjE0M2pnK3I5ektnZnBCRVI5di9tM2dTWVNwU0FTYm5iMGRubGNUSHN1QTJZZzV3K00wWE5MU2syZHdZUERZOEdSMjVzZmRQcEgzb0RPZ2F2SmxEQkZJYTZHWEFJWEs0VnVtanE2L3U2bHR6ZU4rYUtRa3hNVk9wWHRkclgvdWtBTkNLS2hWbG5PdFpsTjB1b1ZnMXhiMlU0QUZkaXEvU3o1MFVjY1BORFUwc1grREZEQ0RmN1Zpd2d2TnVub0k3T3AzQjdHaGtsbjZORFBSNE9zV1ovYWZXRTh0REJjTUVHeFdWVGQxQUM3SWJWY2c3eWdSWGtCcEVTclRybjZERVBlRmNjRU1nTHJTQ2NET1hHaGs5aEVGUE9kMlJBS3BJem1sb05VWkc5UW96b0hxTHZBdFQ1Y2ZIRzZTUWtoK1J1MElyU0V0R3ZsQVJ5WERTVlZaZURzam5yS1FXY3VSNnQ5V1VDU3JXeFdFN3NGU3ZXNk9JcUlEMXBUTk5wT25jcWIyOXd6YWhhVm1lOGlTM0toL3l3M2tSS3V3YW5aYzJlem1ST0JYcXltdDFZQnpBWnpMTnJrRDZJeDhlajBhc0I3Z2VQaE9wTDBEajUrUm1jWGJMT1grMzl4OHNpb1NmMXN0MG9pNFNnMlUwZDE1Z1c5c09ncS94R3hXb1hMbWR5c2FURm1kQU9vZ0dueXZscXJvckhMeTIvTndSc3ozUSsxeFZTa2tiUVpleTU4dWszK3JZK1RkL0pKZUdtaG1aMlZzTk1YZzFpZWdlYmg4NnY4ZXJOMm5GYmNLQUliTFN5cnpDcWNIOEdiRXY1elkxT1RmZkVmTTQ3Q2RTTWRiSkQzMGRwWEFaRThLZzY2cFhQd3ExdzlHWjZLWFE3WmN3VW5wbWFtNk9ONzlxN3ZvZmpXaEtyczZUZE5iWFBBdmNmV3hoRVJvWHpwNDNDeVJBeEJnZ0ZaMXgzdENjby9YUFFFV0ltZy9qZ3NoM1IyQlB3eEFZQ3drYytCcTQyVDB6cXdISk9pSFdWbndRSjZZYzE0SXdpdWlsUWhZcnZwVHFkNllGa3k4SFhkVHI4cHozRE90ZWE4a25xY1pEYzN5QzBBWkxlZDZ3RDUyMGd5bVpTaUMzS3c0YWdBY3owRFRTMjA4ZzRjSm9SUTZ5TTBBczhmdTVma20xRERVSWFqL0NSZjNBT2QveWJiZTNacnZKTUh4ek5IcVlQMHkwOW84bERXRWl5TkZsU2luMXVGckdKSk5ZVHNaaHNNNFg3Z1orMTZQbFZwMlRjQUZvRENBVXZYb0VTQ2IvRGVQdG9kb3AyY1Z3M3dyai9RMFo0ekhKL3BoN3RQVjBKNFU3UEsrRkd5Q2k0NFJySlQ0QUxKemduTW4vTDBwN0ErS2NRYTZBc1hKM0VFTkhvR0txVVY0cjA3dGVwc09xOUMrczhZVEgrbCtUSGtpekpNZ2gyaTVUV1gwMTlpYitCTU1YdDhPM0drYlAzV25nM3ZFRnBmREsraE9nRFRQZkxOVnJHRmx1dGlQQWJTM0w4NnBjenRXbElHdktySEwzK21jNlY3U3RCc1RjM2ZvaVQwdDhrQ0Eya2kxQXRxL1Z4bFhudzlGWTR5S3g4L3RMMUFvaEs2bUYwOC9hNVdnbUlONkZMRWRrQzJ2ejJaMVlqNERJY2x1TURIUmxoL2VXb1ozSHNwSmEvOXk5cWEzM1BJWW1sVXBQYm5sM2RsdC9BTlp2WjE2OURUZjFUUWFFem9BTCsyS1lRaUVnWWxlL0ZVRG03UXNPYjdoRGFjRWh2YUdFRFpQdWZzOVF6MUFFeUZNY0hwaTVQdFRxaXRaZUN1UzdNTmZsOWRJbmFLOGE2QmROS3R3aG9RMDlHM2tUK2pnSTJlNi90UnBUOU1tYXZKMTZXRDd6dHVVYm9nR0RGblRXblUvVWVmb0k3K2cvWGludlYya0RDaDBWUS9CbXZsQmE3VHkyZmNHaWZIVkhXU1ZCTzEyYUVrUUw2MUJwZEgweEprL1FJcjVqb3RiT0k4QnJ5VXduS1Y3U3NqTVBWcTVTZThldWJQZlJKalZOTXBPbm40MDVLMUxpVWdCODlNeERaNmFWSXkyMjBVa2RIb211L045QjFWUS9lLzdBekF6N2VHQld6cW9KbjlNUC81R3BueUY0UDhGOVgvNENBaVlIVGg3Rm9HYm80dDlmckFLMnU1THZkd0dXRk1EN1hRV3Z5QjBTVDZqQm9seWNUVUhPZG1lQzM0ZkRaZVJMUnh0YWIrdEJhUWloY24zUDhiSVd4d3NGVlM1WDBhZ0pHVWN3RlU5clBnMDZEV1QzemFUQzhMbDJrQWU3Z3k3eVB6ZmlCcEtCNE9URUk1cURVemhrV295SGtnbG9ZbnF1YSszUmwwaTVtYmZlQUovUDUvdHlHbTBsa1FySnZZcWpiUTl0TjBFbWxzdjBQejc1b2ZRMER2WXdTalc0VFRFWElFNm9hYjFlazhXYmV0WGdwMm9PamlSQk4wdm1hWGt0US9TVm9oc2NxVVVXNUFoRDBrc0xZYjlUR3JLTE84ZzNyUmNIbDFNQU1kcmdHN2dJYURCYUJCdGpUUGxyYlNEc1ZhcXN1N29SdTdldWRyYXhyRTdyUDVRU0RRYTE5aXAvSUk1K1J2dkdSSlBsWnB2azRlM0dPRnJXdDhRT3pxSzNvSjFUUDlSVWptaFludm1WNjJIODZFSTg0TU9QRXRNKzErZVV1WnFIRjF4UWd1d0FFeFdRZDBjOWM1RnJqWWJIcXZWV2JTaHNBRXpsSS9OM3BHYmFLZ2M4QVN1aHZFL3hTdlEvcmdPbUVGZHM2RWVZeWVnY1hNd2JaQ0YrellIRDNwNTB0WHp4cFFrQkpjQm5CcFR2N3N1T3dxWVNsSkRuQ3A1OFNRdGlNdVdiSUdFZFpXaU1aNHU4N2xUSXJrYTdMYm5Ib0xKT3F4VkI2SU01WjcxMVMzVmNoUndBUmp0MU05aG1KMlZJSlY3NDErRk1PY1NhSTFyUmlUMDRBTndCQ0NacEs0V0MwaGMzWTRweDh2ZzVKQ2wvWnFsU0g5VEdtR2xMR2haWmV2elpEZXJvcFhvM1REbkcvalRlRVRwVVlCMzBVWi9lejFUS01jTnkrK1F1OEZTK3NrVm9GcnFaYjhad0RGc1pqVGxNV1N3bXJMODBxbHpkK3ZnMlhITm8wTUVBS2czOTg2Q3Y1dVp4b2JzeTIvZWprMFp2RElEWVMzOS9vK2xFRUNhejNWNHpaeUdKT1A1YWl5VkVlMTNCS3ZlMWN1dW1rU2ZuV29VUzdnY3FMdVdtd0tGSzcxTG1IcGxxcyt2M3FrMjBKZGNSRXZNa0ZuaGZJU1F4SjIzYWYxak5FeTBjMjZLSUFZQXZWWUtvT0lpbmFMUnJqZkw5MURrV28xcWUwMEkyam9TWklvclBwbVgweDVJWlY5Qm1nNkFvV0orUTZWMEdHRFA2OVYxRnpZTzhaZzRUU3NYa3NMeW8raURtVnAxRk1PY3VlazNyQ0daNGY5NG40Qm1maUd1V2pnSVRIQmhZNTgwMmk4WlFrcHErS3U0NGpNOFduWWlLWmJlZmpGMjdaS3JLbE9PUFJHK1lTU1hTRjlFQ2N5cnFRS2dFYnlGNVQyeVFJczdNVUhiMG9lbGxGQ1dXanc5RmNUME50SElGbjRzY1c4cGNQOCtGVkhPcnhsby9FU1dUaDN5NSthbGphQlNyeHpBRWVUSFJBeko3bWUxYjhDbzMxSnZMTExmODJDRUJIdEwvcTM1SWQ3WlVsY1ZhU21KMXRrTVlJdnp0QjFhelpwd3RpcVlwcGhTMXRENlVobWtFS05vVXhXYVJMUGtXQjBKd2hIaVZ5MmphZmRaMEdCUVBWODY2eXpYZE1UdFd2c2srNWhJNHF6RkhjVWVJWU5JUmNMMUVtSVJQMWxFQmFuZ1l2b3VjVk5aOTNqUnM1TlVpcTNZV3hwaFdiU0JCQmU4cGpTUldpRkZLd3N0WXpFWVFxSlZpYUFGdUZKQXljaHJORE1lcnIxWG43Mzl2QWRsVzJHRmg0YklLRG1DQkFGU1B6YUFZSnhhNjRCbE54QUN3NllvbVFqZGFFSytOMHFyNW0zeFd1QUZYYUlQeGxZMHlrT2UwWW11cXdkMytBeHBXb1dtWHF3V3djNHBzYU9SVFN0YVlsdmpxS2l6YU9LQTYrSUswYi9OdWFDLzhNa0NkVHlEL3RjNlVwcWVubGxvUHZ6cyt5TTk3ek5NZEFXSFVVYVJjNUROSFhQWEVqSDdITUhWQXNtRGpQc0ErNDkrRWswa3VwS2o1TVB2b1I2TXpqMGd4WnNYOTdsWjlPazFtaEoxYW85KzNjUitycmtuL2R5cnpnWG5qUE1QVTh0Y3h0ZDFtUkJmSzFxenZJOG5uVkdyZVh6NjVObVRDQ1MwRDhkcHdrOEhwWC9UT2Y1Ym12eEMveC9UNVBiai9SS2xVYnpZMFQ2RnU0YTFWTFNJbXlZVTNKK2dDNWVvY1pKV08vZEJRTkJRRU41VHVpcDViazhidW9XbkN6WG1oQUYxc3lJMXo1d3hYd2dmQ1Baa3U0KzFoeThyZFNta0l4aTJIWXVnUWQyS3lRaXF6R09DRlFVRVhWNmN6L09mMTNDNDNJRzNLcDQzMjlPREx3OWJPZkVqbGRUeVNuRlkrU1dBSWxyUml0WXoxMVkvTzV2Zm0zRXFaNHBtekZYaU1mVzRoRUJzRksvejFidDNLY3RmV3ZMY21TKytTeUs4VThlVGZ5N1dPL0p0NVhXWUV6RDE5SDQ4cmVub091SnIyNndjcGwrMHNXbncwUlA0MW9tMDdBM0NhZ1pRSUlnN1NQSklBWkFIS1MwSjJSVmpnbm5MQ2NNQ3ZrSmtLa21RTDBvNFdaZDhIcG1LaTVmVFdHam5tb0xOdnVnREZaeFpGWEZWTUtuaDcxVHFFNHNGS1JBZXFaNWoxcm5EYlNHMWV0dkIxRUVHMDVsT2FqVVJZeTgzVmJVQW1WelM5ZjVmYzVUTUJWQnJrZ2hNc2ladXR6cVZTbzNrdDQ5TkE4cE82ckpZVTVpYm02aitFVVdBU1N4YUtGV0I0bmJYRDJiR0pzdE9ZYjJTUTNZR25ZZ3dVNTkrOEdhcUx2a0MxcVBMWjNaY2MvQWlCbXdubldKTTNqWW1PQ1RhaEdJWmZvbmt3VmlJNit1OUdsQkVGYXc0U29NeWJwekdOL25MNDgrenRoMXNXbWhHektyWGROeC9FdEFVMFIwd1N3eDVBYjV4ZUdQdDd2YXFnR01FbGc0VTIvaUc2SzQwRnlLdjlQZC82NmloMS9sekhqZ0dKbUtZWVYvcGRwcHBpN3d0NzVHSi90RnY3VXMvMEUxR1pZcHJtVFQ0dkMxMU42bnBzYWtJOHF4OUFmV1dMSmJ5TkRiUjlYb3JHZDh2Ynd6TnFia1FFVHRuTjBaamtzNGs4bTAveFNhK25zKzA4NHE2V092T1V6M0ttc0ttRjh5TUdneHFxZCtoVDVyMndldEhDZm9QSGZtNTFtd1hEV0JManBkdGNMNnJiRzN1WnJxSzBxenpCUEV2cnlyZU00TFdiREtpUzluTXpxdTRpVVNrWUpkcy94dm01TlFJaTBCN1Q3NVZzT0hpM09RWVpqMURkM3NIOS9NdDh0a0o3VWZiUUtDVEtWR3lZYjBjK0VldEkyYTFDSVFxWFlGbDVpWXp0cUJKVXZYcEk0YWNBV3BwemVNbjlzWk83VUxIZHB1NXBnQ1BOelB0aTR3OHcrNnB4MlVmZkZCSGFpY29MS2NjeHFvMXFuT2hUbVdkamw2YTRJSHpFakxzVmNuenk5ZDFiWFRabTVGUjNPL3BISkhxc2xpR2FKVUw3Q2lraWtjajVOdmRjZXpiL3ptWGpqMFE1WUxWTmI1Yk4rNnRWUHRwS3llUGVEYWt3a1J3cXU1dkU3RGFUOTZCb25UK2svQmsrM21vQVlCWUhCRnRzYU5sbmYzQXEvVHdDRjFhaU1YaVJMcG1PVC9JajAwVzNoQ0ZBbnBPWmh1cUN0enNEc2ZIOXpYU1B2MTNEWExjQ25QUnNjZjR3VjR1RTFUaENGOExHKzl1NGFRMmdTSG9ZSEhYdVg5eklCdThsV05aS0hiY1R2MVFoTWhtZFFkS090V0twL05oUzRVTWFRSHovUm1aSDhkN000a0VmM0VMeStRUGUvOVFMOFdKMnNGNWdIZTZRQmtmWUc0Mkl5WTUrazlUdmZ5N2ZPemNsMkZWZmQrS244MFlFZ0M1QTN3S1lQai9QbXllektBa3NYV2dyZTE3cndSbnNuU1dvbGRWTFFaVVRpYlBOMG95K2U4MXBmTlJSa2FUbHVJVE1ZV3g2bi9rcjFzeEh1dTRFWTNqNXhvcDQ5ZjlYVVlaWWFCbnJmOVQ0NmQyY0lRM3QyZmxsZEJmY3lnRUljdUFIVkdxTlJOQmFwZlEwOVpBcll4VlFhbktRQzBiM3hCSmJ6dkczdVZaUlU4c29YR1lxRXh2MU84Vis0ZS9zYSt6WitkVjltbUtDbDZwZmZhTDIyQWh3WGtPV0pzY0h4WnZKVzJyTDVQSzh3MUJBVUNoK21oMlovTGZvTTdrL3Q3M2haRWtIYW00ampOaW13Zkl2WHVRRGczZUVPczNyaDVRd3p1eW1MRnRUdFE1ZEFabklMTE9VamVwRytnbkhRTngrMCt4dnRsbjFrVi9UK01SdGxSUStKNVR2RktzUFYrZ1YxSkhieXJJdm5zR2g1Tlg4Si9YaFNEVHNFWGs4WWVpS3drU1dKRkFmdnFwUmkzQ1pUaHZLSkt4b2h4NmdkNE1yRUd3bUxSN2taUzJpRXdXR29VYVljQXMyWjFMOXJRbW9kMUI2bGgxNmFJSTdGZC9SUFFCNEx1R2xkT0p5WGlSdkJnRFFMbHdVY0laREtnOXVwNkJmMHdGczA5ZXZ6b0o5TFdvUTZkOXQzNUJHeDQ4alFYL1kwYktjMnlEUGFya3dMVzFUcWJnYlVWRmRtQzdjeldWd1JldXZjUXdzVlh2Vmw1VkhwZ1NLUzZISDBEMjBQczI0dFhnQUVYNmxhL2ptL3NDbW5OZ20yRmhSb2NmVy8yclAwY3FNSnVoc3EvS0pmRGFGSVVzdkdyNjd3VFAxK0hBeUhENU1wdjZkYnozMUg1dzhVUHRSRDJ4b0VnM2RVRVIrcmYvWVZ3aU14c09WNkJNUS94NXBycWhBb3pzeUpDYW43THpqNFZ0RTdIelI0SVE1Rk1SYWpsVFpaVXh1MlVNY0RUcE9VdUJUUUZoMDVhY3owekNIbldHRWZDb2g2QkJadEFFN0cyUU85ck9CTkluRG9GL1RIU21qUXhLcnZZQTdsM2llWHNIUERlYkhWWGxLTEYvcmJ6VndqNEp3aCttN3hBck1BS3RlQVRUVTBKT2ZDaEl6Q041aXpnU2RGWXc3OE5uYVROeGlCTFp4L3ZoZy9jaGpTMkk1aFJ1dE80WEV2WThHeG9FOVVtV2VqTzRDZUZjTzBPRjJsTG1FQ2QxMmNCL0hCbzkrYmVrbk93RC9Db0ZrSlZIamNvN2FFQkxvWDV3Z3cvOUZ0d1hEeFJzc2lhdHpLOEJRVXk2RGNkcGZQRmFuRUtJVGdxUWFvVWdtLzIzNEwyVVQzMVZpb3ZqVFJuK3hZMHp2Z3JJR3pvcFJhdnhILzkxRU5CY1FvK3Z4dDlZRjY3TlF4bzJuTUVmUmlWRGZmUmdxMW9yZXQwWkxTY1FuNmExVldPYTZBeEI1MHRsTHB0KzRDSHZHQnI2cTBhckVaZ3A5NzlHK2t2cG9EUDg0R2MxZXdtbitCUlg1UGtjbGp6ZzRRWWY2dHBYYms2Qkw4NThtUk1xSkJZWHlXU0FyYkpvN3dycTBlOFZOWGZFL2hHUE81aHdCa3BYbUNRaEpBNUUvTnpBMS9aZWRoT0luOGt0TGJkMHQxT0diUGQ3UDRzN3J0cEo5dlpSNS9ORlk5S3ZZeXVNNm1SWm9QeUt6OTFiN0hpTjR3ZXJPdFBlL21pdE5lYWhwQWhYcVFuWk1zREZwc0pFNFpYVGU5RGpRalo3bHhJbm4xdUs4L21RZmRMaHBlNVNTNjU4dkpucE84NFJINnlSOXA4aFA0M2VKMDJ4OUlvUmpTZ21jRUVDMjlyTnJzejF0VitWbEhsK0lySkZwdjRrbXlwTTNoWEpXbEF6ZlpRb1lBRjd2NTBKbjg3bE03eVViTkg5ajdHcS9XZlNnSFBPekJvazRzaFhkK21OdExIYWdrUE5YQ2hlRVJSVmJ6Wjdad2twL1hqTzE0TllSQm5SQ2tWaGpmUlM1RXpkOWUzWVJEMFYvRU9QdU1BZmJDMEgwRlh2V3BZMlJ1d1Nqb08yTzg5Snh5bWdwMjdRUk1KakxLck5EeG10NHV1VXJkVFYyc1llUzhja0IwM3ZobllwOSsvYUxNOGVoaE45TFpHVUszQlV3Y2ZnbE41Q0ZkcUxYWktLYnBwelJhZ0tNWHlSbUtCRk54U3JBZzVBNUtoNU91M2Y0N2tCVkRCWkRndEdBOGk5dUpGTkpQWkxXZXJwbHp2T1JTSW5VTXJScW5wRHg4NDFiZjlsa092YzBxWUx6eWQ0cWIrc1IvcHBkSGs0TGJGRkI5V2lhaE4wYkpmVkFtWDJzR283UW1UNXNIYnFnWnNBTkVxYjdPVmtUb2I0S0k2UVUzcUNUVG1zUEU1UE9mOWRvMW1zcWtjSjZyZkgwdVBSVDVwTGVVcWVkamwxZ21OY3lwam5CRldJcHNZK3VjaXVaZzZObTE1c1hhVXVFTFVxUktEcmxyeHJIZW9tZCtPOTRGbldIVGZBL21lSVE5Z2YzSVVSZXpsVFR5ekY3L3Q3a3dmOHg2RmFKanVFNHlkVEZXa3o5MXpBSExzc09CRTFaNWIvVUxqc2d1RFlKNC85YW9yUFQxUEFmN1V6T0JpTlpBeEZnZ1h1K1h6cjdqcG1MTWpvVHF0ZGNSRS9GRUMwSktKZUJoYmx6cStiN0RVdnFTY2pLZ1pGd2FRTVExRDdWN0RFM0E0cUl6a0haWDZkU1k4YnZHd2NaVjlOZTJxRFZDMVZMSEt0YkJWdWV3NFZsYTdtSE5iR3lWNmYwYzEzbXRVZE1HeDNWQ3MxeVlqd1ozYWdlcTFSK3JlWEN6T3pMNVpaZlBYam00ZEJkU05Lc0liakhFT0xjTEZ1WHBtZkx4ZzdSTVBJZUNxZkhlTWlEZE9Gbjh6UjIyRUZEeUI2QUJMcHdPOW1yNVhTd09Mb0FOa3VrQ1hYUTNWQTkxK2JmL25lcUpqZS9pTGN2SDF1Wm0yaUt1d3NwTTBBaFZZZmhrVzF4ank0YVc1S2tqcEJuWFFqWitjSUZFVWJ3R1JZMzhML0NiczJhbHBQdjJ1TjJ5bVlzTGNpRDRJZ1ZPREZqTUhUWkw4UGVHNms1TC96UnB5bVlrNE83eXF5cDUrM3pjdnlnTWVJeVp4VGtxVzVPOWV1c093Q2VMdE9DUm5EU0FpZlRtQktoUW9HdCsvMjVYMG1FcTJzR050dWZZMnRsVmtGc0hvRFdTWFlWUGZkTnBUNjEwU2pmZHYvZEZlVXhXbTFaeHRLaXZjVnE1M0hnSVhQRVBubGRVQlZBa2hPYU5PWTlkR1FxUmhlaEdEcWNzVDJnbHpHZXRYZVlBQTV2VjJ4a3Q3V0JkQkp3ZTBJT3pBSTgrNGQyUStaM0JVZlBHN2VVSk12U05BRnUxU1owUkZOWUlmbkhyY0ZCeXQ1WXNPNEV6d2dTSVlnOFBJdVJPSVltMEgxL282Nmd1eVp0SVJlYzN1MkxuSEVtZXREb1NZdlBZZnJLdDBPMndEZkxxeVBUUG95d2U5Q29jdzVZMFNHWVNnUVdxSGVJVzBYMk5oa09BemVqZDNrVzBMRWg1bE1UeUZmVWwvSml6OG5pdW9VWjFNRDlZK0F5SnVwcHVndis3UlJQSlExQ3JOZE1ueXQ0eVE1Qi9XWTFTZlR0UUhGajVjZ3Z5STg5TkVLaTlOSTA4VXRGdzZRNEZkcWZZdEV4emNFZE5lcXFSUmhzd2dOS0dWcVgyYXdSc0ZnQkxQY1ZzUXhxSWp2QVhwUGVPVXVZcENLNkc0alZjQy9zRjg3WWtjUXZZQ1l2MHFOODI0UHIvMVBTcmhvNmgvUEtycmZpSEtBTyt6RHJDVnpCYThCblpnMVY1cjVwZTJBNFY1NitKTXI3OHRlTWpZcGE0YUVEWmRqamdNaXp0VVhIL0huckFoSWljMm9uUFBtVHRLQm9vWHFLdlVnRncrWFZsWCtqeGo4VFI5bmlWcVVValVQcWN6cUd6S0o1NmQ2Sy9DV0R6M3NoRjFxYUF4YWhPaldtdHkyNE1mYjNDanhJNW1aYktDZ3BlWnI2dG5ibkE2Slg5UjNMbnZnRDJ2Q0x2QnhFNVJmUmZYR0x0U2NRMjdBdEN0QkpSQ2Z3aFhtUmdjL01mUHJWZ2FCT0UyeFlLS2tNZXlwSGx1bitzMmRLL1FtRElvTmdISzFBMUdRY1c3VGFIVndZZWRWRnJDME9oanBGa0xpUU1kUEdpZXNhVGxpTTVUL0VJUmVDQ3VBRDQxc2k5NTBSYVRMTnJqSnRFU0UrRm43UG5YRGhxd0ZJNlVXUnRzaGZZY1hTZE1TYnAwNzBpRUNFSGZ2UFNGVmV6WFUzZXR3dUVzTjNLSWVlbE5HNjBjZElBdElEUVdwaytKbFA4N0d6Lzd3cmZyeENiMUN5TmxyemFXNkhJemYvbm50NVZhRWtXa0dMcHViQXdNTmxZb2FXaE9reVcxdTl2Rjk4VXZMc3MxSkwrVWZDUlFaMm53MVFaYm95ZHo5aGlJMWZRN0lmdTM2TTJJbkkvTi9xcVg3cFdTNkNRbFFpRmtEQmxBeGQ5OEJEL3lFQzh0UTVGTy9EaDJ1bk9pZlNUeU8rdUxWZkRNUG9rdS9UYStBb3ozZ2ZnalFVTkI4NysvWGM0VHRWTXZEcTZQamRDcHJHUE44S3NuRitwaHdSMmdjWW9jM1Q3V1lIL3BKc1lsS2RMWWViUDNZN0pQYUlZeGE5Qlp1RGpaZWxZdGZMYk5uRVhuWjVnU24vRU9wbHozOFFGK0dOZWFsZDU4RHBJMTNFQSttczhkSmJEZW5jZVk5NzJ2TGhIblFaUWtDengzVnBuakNEWEJrOTgreW5EQ005cnltR09RbkE0TEp4cjQwRzJ0RWtjRyt6Z1ZMeHZBczZWSXN5Z2VmMGNvb3Q0RDhkRGNDV3V4YWEzK0czbnlUcE03d0psZFZDSWdFSzFzWUVEcy8xQzdNV3NPT2hCWnpPQXNQL1VVcjJQSDJmbzljVU5ZN0d2N1RBN2JhN0k4dk91YXdpMktEMVd3RXFYcTVpYUduNWdUbU1sVG9WeG1xd2FobXJOZnA1blQ4c2Q0NkJIN1Fsb2UwNW9qZG11c21KOUV5UXVKVmpkTW0zSll6UG4xK1cxREZaT0NRaTY0WkNNUTl0bkdOVEk3cjBKZlBvNHNqU0pPT1pvU0hzOEFxZDNoVktXUmhibitDd2RmWXRNWE53Zm1zU1k3RjRTaWkwOFpibTc0WFpld3JoQStLdzRzV2xhVk1COFI4SFY0QmR0ZHVyNEdWZFdjOFZSUmY4cUlNbzJGRW5VVHpPUDNoajBUUzNoY3JmSFI2N2xPV1Jvc0w2WHR5Tm1ZMlFzaFNZNFRSMHBzNUhIZ1JYaHcySUxYQWZtVUFqOGtVTU53MTRJVEFqY0NwazlXOUdDT0ZYVWJ6VG00aVV0NXJBaHZ0NElva08zdzJzaWdGYlNUWWVuSmU1OXV1dlNISEQxY1lROEF4ZSt0c1dxdlpCMjhjUjNZSnc5VlJOa0pnNlhuaWk1dHZUTzc1NENvcDFwVXRhUGR4S0UvY0xkMFY4bDI4V2ZCUElkRStPc1ZkNjdoTEJkMlhJelg0Mno4RUxwcFZtOU1FZllhYzhCRnExQWhRRC82dENRY1I0M2F2d2RlYytqSDRYT2Z1ak5vVCtoWU53d2Q2L1hLSHQ5YjV1OHVWaDJsMVJjUlhNT3NHVlBXYWNSSVUxcm4zWnNzcDZydUFITXZBRUNsV0c1aU0wM3I5Mk9RNGFFM2dIVjVRdlpwMUJXTDh0OUgwcjBzQkdieVc2S0QrK1Y0WUkzRGtISzZmWit2dmJsK0J5M3RpaGV0eXVwNHlSZ0dmQUtaTENHelNMVXA3bDZBbGJscU9uUTBOSkdIb1ZLNlpnL0t6ZUJ0TXNhK1cxeU84K3pFdHdSNkVBc3hJdWVkVXpzM2JSRVZaMXpOcnJFekpIQ2Q2WVhTZDZHVFVtK3VzNmtkY1A3cjhoR283UnU0eWs5NWdWa3kxYzVYZml0MmpmMzJqTk04NEI3dm5lYngwVzBjOGZHcUZPeTJ4ZExIZmJDRXk5a2NGR2x4SXJpNGFvK1p4eExhL0VGNkRBV2lVbmh6SUlMMnN1RjA3VUUrUFF0eWpvNTUxbTBnZGpwU0hkQ05zOTQrZnhlM2VnRkd1RllwMUVORVVnSjRHelU4eGtZZGdyT1ZkVDJEQiswb09icERFRjVpUWRXcjZGNWtTNXVocXVkV2lLNUlMTkhMM3hESENISUVPUDhFZnhRWkN3TGluZmdXNFZqUDdzckorTTBzb0hmQUh3M2tCSjRkRlZjZTBmYWw2RTRBa2lDREd6RHVZZnpYbHBObXk3cjBPaFdLZm9CTHRXUXhxVmliaXZOTDA1Z3dIakNsaHhXT3EydnF1Qk9nNFBNMTdLSGpzQzdWVnpPTjh4SzRmVzZNMDd6cVZOUVZPQlhIbDFkbHJCTlNVcytIVS9vZTZlQ0NLS1RVbEd0SmtmWW1QdEVxL0Z4UDJsTmRrVHhZcUY3YnQ0cTc2cjNJNWREb2NqdTVTMjhqTlZNNitIclB4N0VyajRlM25DdGVuSjc0ZWh2TUNPZkFRbkxZN0NiditSKzBTMlNQd0RqMGRUd1RMMG1ZSm5zeXdEaXloZUlqaGhDK0xWL3AvV1I3K2hlaDZ4THZrb0tUbE93bFRUS0ZJSDRoUnYwSDR3dXBlVHV6a2lGVDEwTU9EUkEwZ3JscGJEQ1pZMVdIOExYZHZYU1d4bVBvcnViMDhwL3BXaWRVZkFta25JUER2ZUcxclJ0blc1bmZLOWFTR0ZtbFdMR0RSNk1DQ2ZyMSttS29PWG81dmZSYWRHTEFLL0h5YnFDMjZ1a2Q3T2daYkNPbnU2L2ZTZkFjSWVja3REYlBzMi9teDZHVnBxb3FDOWZmV1hWVEdXK2hpam9HTzdpSWlSaXh6Z3JxbWRDakh6cDgzOFUwbjRsSGZ6L0hvZy9SZ01mcTdEbEZ2TzQvdGN3dXo4ZW5CbytvMEJvdHNNNXVqVzhjVUgxWTl0SHRoZU43NlVBdUFVcFNoVFBDN2Q0bTNwMEFPK1hIZnlYUmpyTFJHNTZXN2NqR09CVG9jUXN2cStVUm9Na284bXcwQ0tZQmxrWVRIamlJMjVpeE1xYXFrTkxPZmE3Rk82UXNENnBrM2NXQmJhT1h2UzJNdmRZVmVmK3BFT3lrTnZXclRDSUNCaDF6VFhjMmE4aDkrdUMzTXJjbFVuSC9IMlAxWUhSL2IwaHl2RklrUG1OMlZKWFNvcllNUFVRM0R6eHFGdTkzbmxVSGJKOXZNU0R2RGtZWVhQMUpEZnRvWWt3cDllUnh1SUo3SDd0VmJCUEREMjhWeERSTzBteFgrclFKLzZrVnhpQTVFU0h0Z2hJRkpnTzdpMmZ5Z1R3K1hRemRHeHZkNll5eHVJUG9hM1VXSThVbHdUcVVaRDNnUUlSUXNFUUwycm5oWGx3WVY0bWtyWTBZU3V6d25xQjhLblNoSTk2RExmYmlybFAxSXRoMFJPOEJqbExJd0pnbExpTmJhV05oNXlwL0dpTWMwc2lYWjZ0RitXY0NhN0R0WVpVRTNtZSs3aDZmT0JOVlFkNnIxZ3kvWWEzWGs3Y0VSeVZ4N0kyMnZaNWFLSWxldC9va0NyTWJ2NVN0bGgvRjBlaDc5MzNKMDBsbk5MRWo0ajNLQXV1YXoyOEd6NXc2SHVPVVhJbkhaK001WUgyMCtrZko2ajFVVnpYejhsQklIeUpXZkRzbkN1YWs5cDAreWVNSUh1NzFnOExHbk9QWlptTTg1aTFvM3JUVGE3QitreDdYWnNwUmQ5eE94azY3RE42MzdxSlVKQVNoemtUWkRtNTEwb3pSZVRjdGl2eTJHcm5rSk1xdGw1bmRpdjd6bnhOcWVTdFAxa0tnNndKYWdhTmp6amQ0QVdhTGl3ZUFlZnhwTmtESWJ6TXp3T2RNZyt0R29rZzV4cGp2b3NaZzQzbm9JYkI2YndrS3JYQVJxNm0xMEZhM0dSb2N5aFRPS29hMCtValdwSGczM0hJZ2RVaEU1SGFQaXhSUDJkL2xicEdMM0VSQ3hNRWlkMllEUXVJWVpoR1JOMjNQSUZrQ2hoY3ZIZ3B4ZzRlaU9iTEJrZ3RMU3UzdCs3STRmcXlyNDFPREkzODhpWDJLZ2hHVGhnRTNyMEk1MmxMamU5K0ZuU2NTWm0xSzRuSlBOZkQ0R3VyR2RaeGhSeXRCTVNCV2ZYL3k5YXF2UEpYSXNNVjRjOTh3TVZ6MzhJTEwwZ3NyY1lYWnppaEdFNXZBWFJvcE1XN2d5MXpoWllrVytRT2EzUmNFd2ltc0I2dmxLTFFRcVVEcmZ1TTBpSTd5VzhIZTB2aDB0RDBQV3llVWdITkpBMVQ4VmsvV2wrQ3RQb3M1ZjBKY3FudENESEpDc2h4MGcvU3V3QStUaGtlMnl3dlBLcGVRSFNXaTg2eGFzV0xHUFo5aXRSS0V1TFB5dE84NjVBZzJCYzFrcllqcHZvZ2VlK1NyWkNtVWI4T2lWQVFaa1lrUEEyWjcwRDh5Q3NHQ2M0RzRuNVFJdUZhTmI4UVdLQXFSNHh4WDFQQVQyNXVHYUE1NmxFV1JsZDQxQzcyamw1cTlCUkVUcGVROGdSTktjWTN6ck1zcE9tc09RRm1ybDhtZlh6eWNNQWU4QkhMVmNuY1F6clRITHRzTElVeHFya2QxVnpKVDF4NUJJVHF5VVZmNDBvZXRMd1hFQkltMDl1ajVHSmQzUEU5YTIxT1A4Z21BRDNOMTE2YjA4MElqeXNyWC9CZy83bzJmU29Ia0RIcjZJdC9RMnA3b1BJV0dWNWQ5WDZFTVpSdmFldUdsdXhUOEl4U09xNWRvK0dFNFAweElNSDdwR1J1b0R1eUZjZStNMXJUYTNDTFMzdnBPb0ErUzhwV0paa0t2QjI5S3M4YmdoQkgrc3J4Q3c5T1h2MERwdEFobkJUYmdESUYySkpzeVNaQ2NGcmVSbFZOOVVLcUp2Z2FKdTRWR25IemIvQlNKK2dLT3U2dnhxWmpCWkdsSitHRTVaVnZmVUtBVGtpL0wwQk5MaTZCbnk2eW1JRnNjN0owQ0gzUzFmOGZJTE9CdlFuWE1NMWtadklvRzNuSHhtS1FCUVVQODJBazZaRWhmYWtkTjRpbmsydUU1Y2lCWjZtWWFCS09udEd3QWg1UzU5V0thVlZ0VS9tZGYxaDNjTnlSZDMxN01jdXNQRjFsWDFIMFRjVkV6aldLUi84NUt0RXBOREhHVE5BbTQ5MlMwdDY1WmhtVk9oMjkyclE4THlOUnh2aWZ5TlB2TUd0S24yS3hqM1g1N0dMcVhEQXA4clRzVUFRZGg5N1p5MUFVMVZ0SDFJNGN4VVl1MEhYem5iRFBQVDhPTDBzUlNUbTBNcVp3QzF0RzM5MFRrR2NXckZUM0llS0dBQ2JQRWpwcjRMcWdKZm9oTW1CZ1BXeDJIZmtXRUtSOWp6Q1J6cjZwWkZGdjZCaFBWV0hsQTFTcG52V2hEejZ3eUVWc2JIREdnMzBVR3BYOWFOSjBpRGFtVk9sU01heHVsY2Z1ZHRjdTR6c3I3N0xRdzdHb051MnJnSjUzYTZ3QlU4VzlVckpLTVBlRENRQi9LbHMxWlBEd2h3OWJLMWM2SG52TUF2c0VGUWRlNlVUb1BVRkNmUDBIa3BRYUROY1NFYkYwU3dzcFdXRXhUUGNIVERmN1hXN2R1ckNrVm1qOERuNEVyaURZT1lxSmFibGgvckJ6eW0zVlExZ2V3dnFMS1VQOGhvUVQzUW1jODFWK2EwY3d2Z1o1Y1NTU29oaUZhdnBvazRGYjFRT3J3NmtPeVNKQVJNWXZqYktubWN5TjZMR3pHcGhkWGRDbnFoVllmUmR4ekg2NXZrR2pyR3VGVXRhL2NSL0NaS2Vkb2QyT0l0RDloTTJyZ1Z0a1dUaVpuY1FsaU9ndkZPR1didHVEcjhwSktrYTA1ZERFVWowWFFYUUd0Wi9nQjJxenVjNXhnS1FkamVsYlA3YTZEMFF6aS94ZlVVbThJRUp3ZDQzZ0dTaUZwM0ZXcGxmeTVuTU1kbnY2VkdCUDNEalNqd0lqbENITDQvRFhTZkxrMXVzWS9KZ0xWUDY3Ukx0dFpHMUJpT2xIY1Rxejc1ckZjZjVEQWF5Zjd6eHVzZmllVTVtSzh3MWRtNWRSMUF4VVAydnZ4Zm5XdHBSeXNJR3lEc0dIN3kxczl5VlJXOUFaOTZORHhPZ3JnbFVTbDhQS01YNXQrbkUyeEQyUjJ1QitxbXRJdDNHVWNEUWxyK09uR1ZiSWtOYklST0kwR2Zyemk5RjJ1RzRQdHBIT0RaNFJKd2k4SHAveWg3RzRwb1kvaUVjMi9YTTVyUXNrYVR0V3JFd2ZoTkJETG1BL0JmdGdyWSsva0xORmR3bUJzNkNnWWFDM2kxUjVqaTVkZUV5SFVWMGp4T2FQdjdPQlBXVUFmZVU2dEhFS1FwZ3RJNzVtZXVCZnZPdmNwMWxFaEZNcENacXNhakoza042dlI1TWIzZG9ZVGdHZzIxcXBnT09KMm5Fd3REUG53dFhOUkFSdlc5VmJrRGlPN25PTVFKNHQ5U2ZTa0dVQmQrRjZ4OFhGTjhwWGFCM2t0RUI1elppdlRFS0FKZnNHeFY1SWVYOVdvK2NlNVlUeHJFUHJzQWZrVEgzUW8xNFFpSnRRS1dEeGt0Rml3QkVoNndmcERwOVRDbWZwQTVKbE1ONEVaZEwyaDZ4RElqd1cybHlSK01OKzRkL1pUNHl5V3ZXci8wRTZRQzMxWFBUMHQzNGREQWVLZGVaY2EyYnNQWHE1eWFSSUhScDR3c25vbTFiWHlHSC8zbGxjTStHNlRPMWpVMmwzcHQyaktIT1RkSlBkWjd4MEZMclhMcmN5eHd5MlJXSnpHMGZWbEJaZVNZaXl2V3Mrb3J2NWxFaXBlb0YrU09pZ0x3V1FNZ3YvZlZITTNCWTFKOUZrOWg3UXd3VkZ5elZOK2w3UloxVlhCMmV2OGY3U0xJdUs2WVFkeEoyMWJZYmFFdXp0VlIxTGFmdCtSQm9DUHVkZ2l4M2xwMlhHQjdYa2pqV3JkQWZkZUJ2WnVSSHBNWXR6Unc5UUY1eGpIbTdRekRyTjhOa0xDYi9KaXFDajZEcWdkOVE3bmNiNTNEMjlBWE94OVNwTEVVZVdjS3dxdG5oL2lxQ2hiczVlbVdkc3JZY1ErSjEyM2Eydy94aGpCNlI1elBDb0tjVi9rNjQ2dng0U0UxQWRVVjZrZ1hlYURiY0ErMERWeDdrdENPazhpSkhHMTdkc09CaXRsVDRxS2tPY2ZRdEZUTVo4d2FqcTgxY1paWDBaWE9GV0luZ1lMUkViZ2ZsL05ZTmN6a05lL3Y2N1A1UXg5aUJkV0I3anZiN1U2bXpZNTNZRm02TXpOa3gwT21Rd0ZrTkZVR0ZJSjNLb0Q2RzZMbEs5VVNERWswMUx0Y1h4VWpPck5WcVJ5NzZ0eFpSbW5ia1Iyc2dZVTNmNG5DaVgrOGlqVE9SMXdzQm44YVY3UktKWVJINURiRXk4Zm9wNk04NzV3RTFYQU5RRWlaZS95bk9HK0Q2elRLSnVCZHluTDMvNEl5Q1VyNmF1czl3d1RXVElXNUZEcCs1MFAxeUFpd0tnZnpacExFcE5BU1FsbDU1U0lSY1c4UFJUdG5SZWZYLzEzUDEzZWYveERGVkI3OHJ0Nk40SmJhcGN5aGpFaFZYeWJWWjRoMktxZDVRRExIY2ZKejlpY0k1aXNjamJQdWJZanI3L1BXMnFMMmwrRzRIVUlSU3pIS1VuTWdKOW1nd2dEeklUaXVDOXkvQ3BPY0J0ZGhEMVJEU2lPeTY3Q3JDdEFSYzE0TW90OTRpZTVnZnZFOGNZUWliNXZ5cUtGRkJqa3pFSkNBaHdXVVFpYi9ZcE5KUUpxd3llbHIrSDBKcDNuaEZ3SkVnL2lBK2JCYUl5d2tYbkJmVlVrTGkvSUV2ZE80TllRNFc1REM3RVdDNzExVmJnQ1VLSFNlRXFveUVVZTJDSTZPZWp0STQvMTF0UGx1bTJ1elJSb3RId01nN1dMUmd3R3FhZ0FzLzRZWStMUmlEaDhqWjc0NVRkcDFpSGJPY0N0ZURRdE1JSUE4NkxBckxPeGJ4b1VSNDEvMFRQT2JRejJyaDhMR1g0ZkJLVXNJaXFJT2lYU0VQTVdjYUhsUUJ3Tlp5bURYYU5IS1dVNTFYa2p4TlZNTFhtaUxLVUFzbXdYdmVuNTlOL0E4WCt1WHdTZWRsclh6NFpVOE0yUTJYMmtHa2hZUTUwT0tuQ3k2YWpPUXB1bXBjZWRuY3Z3OURNRHJDL3NUOU5SNFJEMTRvU21FOGlZTnA3QjJEZVBtckQ1a0hWL2VHQzhjWmlxOUtML0hzM2svSHZIKzdoNW5yWHNPenFNZUZ2QXAvemdZSHExRUhlMkErYjkxV2E4OFZ6Tkl4UTE1VHl5TkdIV3ZFaWpJWVIzd0Ywa1ZURFhyWFZXU0tCVC9aTkNjY01jS0xkazFlRTR3V0hTNW1aS1lVYnFWcVZrdXZYbm95dGhXSlNuWGQ5aWh4Q0dRWVFGaW9abWxVMWxBaFd5L0psY0VCZ3krWlhKVm5zaVZLaXB0VUtWZU85L01RV1RUL1VVSEEyQ2x4cU82NXZQNlRGT20yb0xFMTJBTTl4QzZpRUFtTTF0aGlvdjA4VjBtZTZKVTNKM3dOL3UyR3Z1YWx2cGRlNGI3bi9yM1hjWGRZRjA1UVd6MjZUQzl4OENHRithbFEzMVoraUdSM3F5bU1Td0N0cWRvak5KY25sR2ttQ05IWGVsdzI1dkFKVmFodzRkdEp6Zk51TFVZcmhCbGp4UmVmbHBTMkxLWk1aZnpwbkFzaG1oSEVRS0c0UFBLYnZaZFdUYkhlaDRmc3lOemxOUFdXd21GTHNEdi8zRUN6Sm9aZjBzdTFqS1NhYnV0b080anFFbHJaQXhWcCsxcGhFMERWUG9veDhLRUxRTW1aQjJHVzBjbjg1ODdLNFNZbnlpTXBkSHdpUTA2VVRvcnQzb2J4UmE0cGh2emZIaGd2bGRDSU9zZllRWTJ4MVlVK2w4RlYzc3Roa2RtKzVtamVwTDJJczlhTVRyenJLanhzbW10UkpDQ1hrNnl2K2k0Z1ZyQVFYZFBCVE0remFkLzFKR1Y1c0xZaVdlS2pxM0p6LzB1aytCYnFnMzQvbXI5MnREcGE3WXpLdmdRb1NCb1hvbG04eTJqc251S3NodThFMWlqWVI5L0RGMTRoNThkVnpPTjBFeEZkdXJHK1Q2NDRqSmdMMFlYK3lkSUNzMmNoL0F0OTF3S1JVOUNQbGRsWW05c0cvR2ZJYThZTVBqYWJPRW11SEJUcytyVzZmcmhIdWt6dE5IZ1dHZnFEbmFONjhtODl4blpTMXNIYWU5NForSExYQS83N0YxVTFsR1lDK1l4ZEtacTBQTklVSmM1SjZMMlE3TWlBREhwMTJkbXhmV0J5VHAwYlBnMzUxajIyVytrd0pOZGRrQXgrV1N2ZUFWeVlocTRHUExlNlBYL0Q5K0tIbkN0Ykh5bE9BZDY5OEYzWm9ZRksvTmJORmo1SlRKbE5Hc3hWWkVWUG5QU3NzOHE5cVdpZ1FVcUpxNVBGYWJjbXBxdThKR0pDc3hmUlZCV0dZMUhMdEVTRERZeTM5WFFuZmdsY25BdEI1KzZaWEZFRkJHUk5qUWtST0NoQnFTWk9lMHAxNjlqVkJmK2xra2tnWjNHZkdkYmczQmZVb3QrMWVtOFc4SWt0dk1mZFJwOTVTWkM4L2pOdzBpTmhwTWJDV0pJSUlCNDRjSDJvRHVFbnR5N2JQaFpsV0hiZ2ovMHZ4Vm5ySlE2djIzS25LeE9SeTFzZC9sdThvZm1BeDR1L3NjcjE5MTRqb1lFVlcwaXRESmRlUzFPb3k4K1o4M0dDZVdIdGNleEk2K2N5ckRIc1ltekZlUy9GV3FyOUU0UGlkZ1NkKzVGUmdpZlU2Q1A0UG5OWFp2eFJ3Yms2cDdNNFBsRXV4RWNSRGtyRWlnR0dwOWF0aXk0S1JJSlVTdHFISzM1YitKayt5SVJWZG9KVWRUREk2S0JhVmgvbmovdWtwSXE5WVh6cGFiTG1RdUFPOVlqTTc0TSt6R3VlUk5ESkZ2bmt5WWxPWGJzbVhmNllwSE0yRk5FVnkwQVhwYWthTGE5UHpDZlJTUFlwQnBDTTV4VnE5R2FIMkdsM0ZzT0ZOM2xybiszcnREZlFoc2JxMzNpb1o2MW5hTnI4Y0JuaEJFTUdXS1JrWkZ6SnczbXBNSGlUZTlnTHhGTmtsb1M0SlpOaDlYSU9WaHJjQXMzYkhpelN3bmJqWFJvcUlEeHlBRDFHT3NkbitSU3FVTnlObFlpbGJiSWJDdGZCbk1uRkNwVjJlN1dSNU9WRmhyZXdCUGk0V2VsOTFudVZWY2F3MVpMbjhVRXpheWIwV1VucktIRU5DcjBXcFJ2LzMxemM3N2pROG5uUnJoTkZKRmtsdVZVUUl1L24vclRDL3dKTzFiSWt2WDBHY0d5SkNWVXgwaGwxbHB6aFFNZGJZc2lVbGsxVjE3QzZDT3RQeWswcENqZzAvRytNUXlYVGZYNW5xMFluejF3bzVuZVp0WkJ5MW9IcVV0Rmc5VS9tdFl0R0dTekROWWpNZVpWSko0V1ovcy83anFNMFlsTnpMamppMytyWWYzRHB5MHMydEJXRWZONXZWSFN4THJPVk5NV1NaT2x2Z09zQUNrTW04K2ExdjZPeGFRM0J2OWRrcFhRUmFjVjhnNlo0Nk1CMzcvTWl3YXY1bnZMQVl3MW1OV3BXdEJOTm92YXo1TE4rZFJGSW5TNFJxUDV6V0htN0NoU3dLT3g3dzJSYVM5eEFrbHlmZzUxMkYyQjdBNlk1amhTQ3BGQXcxakwrRnBQUHRQbnVQVTFCRnhkSUlrWkhZQ0NCY01ONDkyWmNrSUVUVlpHRnorSnRnVDUyNEpVSWM5M0Jxdktnb0xOeldkTHg1OEYrNHNldzlKUVUrdTVyeldVVSt0V1EyYWlKVldQNjQxU3ZmRFZFV2VPNXRkVG9VLy9Qb2NDd2FnbTIyMnJWWE9Db2Q1SCtCdVRoSE13d05tdXhlT1IwSXFZNGVodFF3a0VaV2hoVzlVV250WU5kb05zQmROSjErWTVQdzRCYUZBM2hOK1BxV0FFdEhWaXNIckdkZnJPQUY5eXkwUlV2TjhKeTg4MUoxWi8rZCtNMG42YnoyVmltSjBsbHQ0cDZQNFJ2WHlEZG9TVWFRNmpTc3dmdHU0WDRLN3pFb3hBa1dzZ2F6ZXl1TzFxa3BjdFNsK0FUTHNRakRpWmRJRnptZW5tTk14UmFKaFBpMmtndGxvSjFXc3krdDh1b2IvNDlmVVVXUi9sZ3FSSStkRlpTNEVxdnppQVpueWZiVlU5VlhyNkxXVU9wY3R3ZXl0K0Fsd3ZsS1phVTY2Q1RRWm1ZRDhNTmJtOWpTVnVaVWRiKzFnV1hlS1ZmRHRqS0dDSUxFajNBcVlYMDM0ZktlSElLQ04wcTA4d1ZmOGR0OGNOcDNhL3NwanR3cUxaM3U4WWJBbWNOZ1hoaEhwT3NNbFh3REowWUhxSFliLy9VQ0ZQWmJIYS95OEZyRnoyWWNPRHU5c2hXc0VUQ2RxTnE2bHYzZXgvdmRReDZPNGlOZVNocU8rNjd2ODMrYVo4OEdZNXpVcHpwQXlxKzZZV0hyaTRhdkNsV3NlMlJvUkk5UnJRaWlHM1I3UllueE85OXVxMjIyQS9KMG5vZ0k0Sk5vTHphOGxIUE1ndU1WRWdUb0t5OVB4cXI5Mjg3YVVYRC95UGJYUlBUeEdjQjZqRE50L3JyVitoU2t3MklXMWJUelhsaTlOblR0ODBLQzh1cGRUaGI0emdKaDBJa2FVcXY0WUZRVnBJY1h1bjZ4dHc3T01UOTR2TWE1alRYTTZneFBKYXJSdVBIWHBucS9wRjNzcUNwYS8zbytOaEd2Z1lVVVBtcW9jNDdCYjJoNXhmL3UzYi9DYWYzRFBxZDVhaTBCQzdoUENWRXZCaGM0c2NyVmc1SjRXaUduUjhHVWNoN0RTTUZrR2ZwTXcyOVcvbzBhMzNOdjlacThYbmR0bWsrWEVvOXliT0hvZ0I5ZHdHN212bWlReHJKUk52ODlndmNqZ095eEdmdGRPUEJ6Mmo1MWM4TkJQSXJtam5URE9XcHZHbXg5RWZZZFFrc2Q2RUZHSEFKWm1VdHkvbEVOVENjcUlYZEEyY24va0dBZkdTYk8wSHJGZnU2R3pXS1oxRHhOOTJxV0ExODVqZy90d0RvRE9reGNBRGJkbVA4dFh0eEFyR1lkV1NpYnd0YWRGRERwM1VkeDhmc2k1aS9oaDRtdjd6dUR5NmI4L2Q4NmxpbDliOHhUSmpoWWtPR2c0Y0tYUHVzdDhmVVhhWmpudU9xVC8rcXM3SkNMdm5mN2FWd0lIcHlENkpVZytCZ3JqUlV5TTUzMXYvMlFBQkFCb0FRQUFCTVFCQUFBOEJDVEVDQUFBQUFBRDhBYzVBQUFJQUNRSUJBUW9DQUFNQUdWUm9hWE1nYVhNZ2IyWWdSbWx1WjJWeUlDZzVLUT09PC9CREI-CiAgICA8L0JJUj4KICAgIDxCSVI-CiAgICAgICAgPFZlcnNpb24-CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvVmVyc2lvbj4KICAgICAgICA8Q0JFRkZWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L0NCRUZGVmVyc2lvbj4KICAgICAgICA8QklSSW5mbz4KICAgICAgICAgICAgPEludGVncml0eT5mYWxzZTwvSW50ZWdyaXR5PgogICAgICAgIDwvQklSSW5mbz4KICAgICAgICA8QkRCSW5mbz4KICAgICAgICAgICAgPEZvcm1hdD4KICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24-TW9zaXA8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgIDxUeXBlPjc8L1R5cGU-CiAgICAgICAgICAgIDwvRm9ybWF0PgogICAgICAgICAgICA8Q3JlYXRpb25EYXRlPjIwMjAtMDEtMDdUMDI6Mzg6NTIuNjcxWjwvQ3JlYXRpb25EYXRlPgogICAgICAgICAgICA8VHlwZT5GaW5nZXI8L1R5cGU-CiAgICAgICAgICAgIDxTdWJ0eXBlPkxlZnQgTWlkZGxlRmluZ2VyPC9TdWJ0eXBlPgogICAgICAgICAgICA8TGV2ZWw-UmF3PC9MZXZlbD4KICAgICAgICAgICAgPFB1cnBvc2U-RW5yb2xsPC9QdXJwb3NlPgogICAgICAgICAgICA8UXVhbGl0eT4KICAgICAgICAgICAgICAgIDxBbGdvcml0aG0-CiAgICAgICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5ITUFDPC9Pcmdhbml6YXRpb24-CiAgICAgICAgICAgICAgICAgICAgPFR5cGU-U0hBLTI1NjwvVHlwZT4KICAgICAgICAgICAgICAgIDwvQWxnb3JpdGhtPgogICAgICAgICAgICAgICAgPFNjb3JlPjY0PC9TY29yZT4KICAgICAgICAgICAgPC9RdWFsaXR5PgogICAgICAgIDwvQkRCSW5mbz4KICAgICAgICA8QkRCPlJrbFNBREF5TUFBQUFYNUVBQUVCQVFBQmZqUUg1Z3djREI0UUFQRUFBQUFBQUFFNUFFQUFEd0lBUUFJQVFBSUlBQUVCOUFIMEFmUUI5QWdGSFFFZkFiSUFBWDNEQUFBQURHcFFJQ0FOQ29jS0FBQUFGR1owZVhCcWNESWdBQUFBQUdwd01pQUFBQUJIYW5BeWFBQUFBQlpwYUdSeUFBQUJzZ0FBQVI4QUFRY0hBQUFBQUFBUFkyOXNjZ0VBQUFBQUFCRUFBQUFhY21WeklBQUFBQkp5WlhOam1jb0FBWm5LQUFFQUFBQUFBQUJxY0RKai8wLy9VUUFwQUFBQUFBRWZBQUFCc2dBQUFBQUFBQUFBQUFBQkh3QUFBYklBQUFBQUFBQUFBQUFCQndFQi8yUUFJd0FCUTNKbFlYUnZjam9nU21GelVHVnlJRlpsY25OcGIyNGdNUzQ1TURBdU1mOWtBQkFBQVVWdVkwbEVPa2RTUWxRd01mOVNBQXdBQWdBSkFBVUVCQUFCLzF3QUUwQkFTRWhRU0VoUVNFaFFTRWhRU0VoUS81QUFDZ0FBQUFGOHl3QUIvNVBmR3dBVGZON1VUZWdzTForL0RQakRqTXp0bGtmeWtvT1Zza09PNnFhR1JlSWpaZDFJc2xJZ0s5RENqTzVpQUFlRzg3MkE1SUE2RVJkLzdTcEdmaW1BZ05TQUFaZC9qOW1pekJDaDRnQjVEMVoyQ3VheEtzemJZdFdXRGx0amJ6aXFNOC84Q0lBOW4zVXBSb0hKYWg3eEYyUTlJQWYwdGV3RlV2dVdQQVNGODd2QU13TVJhZWgveFVSbGdFT1NvWWhacGtNaklqMWkxbFNLVTNZYzFEUHcwT1BFcGRoTVU5Z2Y5UzE2V29HeVk2aUE3ZHhnTjlEVHdRMzRQd25yUmh0SXNVNklJVVB5aUEybEdtR0E4VjFIbElEczJrWmJhZklnVDJqTUhTQmp6M01Tdm14cVIxMW55ZUE4SkhrZy8wSXZhMWZMTWFzak5KQm1mWEwrTURlSWxWZjFOc3JTck5BMnJzdE5teHRMWlVaNUkwSmFaYXFsRTMwVnNlV1ppekd5ZDM2Z3NnQThMUFFKSFhmWWRxMUR4VDFDeEtON3g0L0RnQ1VvQzZ0amlDelRTWmoyTXFVc0lkZjc2TDM0dmRMWWlDODN2elA4Wm44WnA4aDQyVTZWOHFxQVFRV3FaZWgvS2wySzhVNlhKYnltc05yQnJVZFJ6Y2xKc1kwbWJqekhBU3dheC9adGlJVG54MmJpSHM2NzRUc0NseGlhWlBZVUtzZk5HNDhqdW5zeFNWeWlmTWFNV3BOQUpVWS9MK3NXeXJ4NjZ0U3VlM2dDNnRMbFBKRzJ4UkxsdWl1OThYWHZOV1owVmZPekFXZXhoLzhBbjEzNkhUZHZlSklDbGNYY0EycHdEOUE4bld4Rk1McmlGeWlDRE9lQlNJUE9pN2RuVlpOQnYwNTdqNENtU09BK0pmdTlBUXBQZk03VDY1RnZBS0w0ZzRHYUMvNG5uYUwrcTNISmxDQjFMaFlzVFVtZTdUTEFVN3gyZm05ZGhtaXFzcjVtdHZscjJMNkpKaldmMGNrR1ZYTWhlODJER010U240NG9jdUcvZWZBa25hUHJ1OUJ6bUR4MXkyVE5abDVFcVZQYUwvbHZHaGRwWW5RenExYXRHSnB6cHFSSHQwUldoZjlWTnhqVUNXZXpBK285enNLNVUxcGRUSzYwcjNJL0ttdkM4djhIZU9oSmhQQlVYWUZFa21SdVRKNHZsUmdwY3JMSFZsM0N4czdjTWRlZy9nZXpqaFJjVmZPZGx6UFd0Vm1ZaW9KZVFSbzRQOTBCSHpORG9MTmhwVW5XQytuVWpENmFTTjFUcC9pVHBoSmVCNWpidHY4SERWMnVFbXlnSjJHVHo5RWVlWG82dnFGUjR0UEpjbThQMlQ3ZzJ0bDZMdWNRVUlwV0xOY29URmpuWGRyUmxuYk81aTZsTVMxVUs3eURicDZNREt6ZkpHZHdYYkdWdUpkYVUvOWViSUt6Qkh5Z3pVVTVqbjB6MGwyVHpzckljMnQxdUxxOXQ4UTBCQkJzNmMzazNuczdqRnVCQkxpakwzL2FpVlAxNU52WFUxaDQ1eVlJNUkxS05yUTNtUTFIckorZTZPNUZJOHEyUW1uVFFnUUtGVnk1NzRGTVVYbHo1V2dZMEJRUFRjVG4xaHliWTZXRGFYNTFrbmZqK3hNQzJrOVNTdFZCRmlHM0NzVStPeVpyVFVGT1JpaUczbDI1eE54d1JyRGhqWEZ5VnE2T2x6eGRrdDNYZTAzc0ZkNGQvdUg5aFZWTzg2UGNXdkwyQTduaVRnQy94U0tndUFETmtveW02dTZvYTZyY09KUWVRSG10VWs5TTcxamxTY0JhalhpQXJNUUNrMzQ0ckN1bG9Uejg2TmZPaVAwcXFGRkI3bkY1bS80M00xZWdvR1JzdFBWMFV4WndSVEp6elNSVS8xTmJoUkE4N0Q1Q3BrQlluL2xHalR5OXNPRG5vdFJGV3ZNL1k0OEgrU05UdXQ4UVA0YnM0N1dnb3dJL1EvVEd3UHJGanprSlpPYkY2QWRCQUgzc0xFdGZ0MHlqMDVPazFHemQxZDdKeTRHYXlDK3VIc25LRWJzUVJaMklvR0Q2MVgwamljUE92ZHRiSHNEeGNJVHJoQTZBTXNId0tFVnBXb3FVRmtrOTlvZmhhbm9hd2JKQVV6Y085MTlkKys3YkxUVEdEQjZqbmhKNDFYTzMwYzc3dWZRNzZSNlAwR1JLN2kzM3JBKzY3VUNYN25VWjhKN0VBem1PNnd0T2JRcDd0R1JXY3BHeGNCKzZWRHRlRit0eE9GZGlXaDFCcDhWRFM0SmVRaDNxcG5raVNSdWcyUTNBTUhOR21iTXgxdEdSUUVRaFJWS280dlYvWFJwN1JRVUJmd09CRkdMdTZaOVh3MG9SMmlrYUJVQ05RTnpNaHNOcFl2dlZkci9BblFsVjloRzdoNjJETUJFTGFNMTdiNVlLckFCTFVGL0NTMW1FMHJONjczMksvekJ1M1Foazg1UVM1Vk1hL0pJK21TbzJjM2RTbjc5NStjS1lWdDNBYjUzMjdrdVArbVk0WjB0c3lDZDBEZjdiUGdxdCtJQ2x0SDV0bmpSRzNJSnBzTitaeGh1OWFoUnF6OWlMZlMxMWhXN05ONkZoRDVacWkvYVZ3MUhDOWFhNXEza1Z6UHlmMGZhdEk3MU5lVXdWMitnL1ZpNlhYRmZpbmh6b3BmNUhuK281MDBFZ2hXcFR2T3o4eEdLdXUvS2ozL1FPQ1Q1RW1sSzJ6V0p6MFduNEhvTCtwTU1xbXg4emh4b0ZycU9JVEFkVGRnejlGbTJlcXRJZjV0TUN3L1dGMHpqUzBwak1xbElKZTdsVkF2ZjZrNS90SDArWlBGbjZJMm9NQVErak14ZEYrYUNYcTFYYTBjc2ZHQnh5UzNIYnVjTXpsQWZFK0JXVG56Mnh4bFlUdHdvVnRxeEFveFVBcVlUUlp0Qk1JWlNTbVhNN21vVk9VaGlFMlhtV05MNlpCR2w4UElHb0wydm56N0YrSG9qQXczYk5UUTY1c0psazdWZUI4c2RJSjc2VVFqanppMlJjc080S1gzUzM2TG52Sis5SWh1QUQzSnFtS3JEdUlNOWFGUTVmYXVkMEpXMjFuOHdZYjNVSnJIUHc1djAyVGsyUmFZL3NsZmcvOS9VM01PRWN3aXZmR2NucWowczNiZ1FOczRKR0JmdVk0R0p2WWpLWHVxbDh6OXZ3SVNOMDZzQkk0WDFoSlUzUWhuNXJoTlE5UVozVTlDeXdOU2dGYmVFcXZEVTJzOEFPVWdsMjFScm05SEY3TzJ4ODVhbFZyRUE2VnRVZmN1TWhZdmljQU0vMVNwc3B1L2tUazRXc0JvekVSSVZxL09Ta0lSWUVoR01TVUlpd3FncHk5ZldHL0hPV0NObnlra1U4TXFFUWdieHBxV211QTJ1TUEwYkFtTU04S0ZDNmp5Q2VlcG5QZ04zcGNOSkNvbi9rT0Z0T3FUSUZuSjVBM0FnNHBqSzRMZFRkQzdFODd5UmhvNHpRaFJqNWdiZzhPM1o3UVkyeS96MWVGVmU0NmFoVU1WcTdpYmZsWmh4NnBPNjdWd1lPNHgzUEg5bFdUL05MOVZsTlM4Qno4M2JHWE9sVlpibzNrK0E0Rklxenc3aUExamh2RWo0YTNGc0JVQWdoTTg5M2RzMk0vMXpENWorY1NHeHNvZHprSkIxWXU1cW1ydGJ5TGEreE13V3VVQUE1QzV5dTdTRHVSWDV1c1AxZTk2S1UvanpOMEZhM2pEakxyUXlYdWRNRDNHa3ptZGVIaG53VnYxMjVPU0R4M1VmVTVRTFlVemd0VlFybDFaS2ptdHNuVmp2WXdkV2t1bHFJZFlUWWRVZThiZ0h3VU04RDIyVG0rbkx5M0NvUU0yWkYrYjU5YTN5SFc1Wmxab0p3SVhyWHJhSG02R0FFMENnQWlDTlRKVmpMUiswODlocXkzQ3NEeFlrK0dLZ3NJNU4yeThzTEF0YW5lemdSQ3FhaXhKTjkzZDJZYm1OMFFtRENhUGlsb1hxRGJjYmhzTXczNVJHcHNRTjZJd3VjRHIvTFpOMm4yNjJya21tWFlqMTQzUFZwaUFsUisrandNUkdlTHIxdEl4T0ViY3JHLzNvUlFsREhwcEpoN1VrNXFXVE1CeERnak9nUVUwWTBPVDhnbk5ianhOdTkyUGZNZEVPa2VNUitodEVrN05ORUttL21tYy9tZ0dSRXRwWlQ1bEtQU0JDbkIxK0pDTks5dko4cmpKTkxsTm5ibXcvMGVMbHE1SW1hT21LQlI0SnMvUk1RME9malRqenoxMncvT25ZajJGVklsWW9seFJyaDUzL2o0SGdBQ0hjL1ZCT2tUem5rcU9uY3A5bGU5NzFPRzJlci9renBLWml5N2lidkpncmh4VVNsRWpGTmg0ak51YTF3RnZrdlZHQU9Ja29aN2ZNYzlkRVdpenR1TkQybVhudFVnUW9JSU1GcmZ3eGQ2RDFWS05aMDltNTRBR0RpWklXYWdGN1dJSkNSM0QzaHB2MEJKek9xL3Q4a1RvZjNJeHhJdWtZajVQMkxyWG9NTTJRb2xrL1NJeGpjSW1EZGZncUdkMEIrcjI5U2NPOGpxVUR3VGlyVUJKamVPWUtUMzRyTkF4K1FDaGYvQVZ4cXNSakk0cUFtYkJpWWQ5OWJpVlNwNmJQSE9EQlFSeUtjM2pCNkRvY015TUN3ZjFndmh1SlZ3bXhzcEc2VWxDNzVTQU5Tak1qWGZLS2huNGdvRzRIQnNrbG80RXJJMGJPdnBIOFFyMFh6d3lmWHhORzBPdENxTGNxZUplQndlZ2laTU9mL1Q2eGZzU0VpRUlld3RYTFkycmlkUnJVOU5UUWNoaEsxdzRKZ2JkZTVSQnp2WWw3aFhQVFowR3JKRmFtMmFVaUVjZFJMc0VpSkRIU05YMWc1STNEUjljYzB2K3BibHBVbjgwekg1S0h4OGxvRENyMEk1UnYwL3BoQzhQOHRhUVpQTk50d1I3ai9MTVh0YXd2VU0xQ1VQbnBacDM0WldJeFJGZnFzV1J4TkRjTGZxRGZ1YklZNXZSWmRjV3kvYUJ6Rndla2hJTVJ1RUQ4L1hFWjB2ZzNaNVJScXRpNzF4b3E3VU5NS1g4MHl4OG94dGs1M1VjdXJJcElWbTNaRzQrb2hSeWQ3WGpSZU0xMFpzTHRFd2ZjYkZ2NGZmOVpmSUs0cnBFMHZMdFN0VE9GNHF6YWVjcG9QNmJMK0ZPR2JrSm9GMnJsWDFwNWwzL0pSV1o0SEdmTzV2VE9RTkNvZUt6ci9MdlluNnlHWUI0endObS82U2tUM2VBVDhEdXNYL1RlZmF5bEpNcFdMR0kxMlJFZWw0dkhtOTgzYlVudFFaMGZDdGp6YTZ3QVN4ZEFhdHJFVXUrSldKdk1pTkNZNXZPUWZLMUorb1lGV0RTMXNlVEw2ckhva2p4RWpqcit4Zi9QQy8wL0E0OTN2TEJxWTFlbmVvaVZrUFNjaHNRN1pCN3h4Y01LQURGZjFBWlFpaTkxaXJnWmdseDgwazdkOCtQbjM5cWFhUGxCM3JZZWtiNGNUOVFicnNJc2pVeGxydkFkNDMwYWRkc245b01RZHlCdUhJSENCZkxwbld3STdBTDFwcWVSbFVPV05xbk5CakpnUTFYbVlGdEhVUU8yc2JqK2RWWUcwSTZOelZFdlR1cDJqRVlZTG9nQkhlS3ZWeVhJWjM4ZnB5REVmVEVuVmw5VzhFMzRBUXBHOWlzVDFSR05IYzZVVDBWd29Nb2tlakp6dkJLNGpIK0ZjQmdCU3JsZkpKekdjTU9MQkJZaDJSWkdHMEduRWNwTXVHTERualorMEhUbXhORG9WQW5hN0pWWDdzMjZDUUw2RTk4MFAyS2hNSGhDOXkxOTdQY21KVUJlUFhncWFRdDZMVVlpVDRkOE5jc2dkT2tuZDhHcC9JWDFidEc2L2xIVldNTCtwaEJNTnFWNjdIVUZUUUZZTUFrbHluUVROajgzeHU5NkI1VHh3cVNXOE1jS1BRb3lrWjRKVVZIdXNWRTJlcDFNa3hCVWFlM0h5YkNXb2RlaWtDZXpIa1A2VUYvcDF1NHd1WklOT0JValEyWkUvOGhTS3BVRllRZFlLYmE1MEVvaVcrWFpxSVhvWXFmd3JNS0RuWDhtWTV6eWlWV3dOa2lIb215U2NGU3ovSUNUV0cya2ZTbWdXSk4vb0hjdFhiMkdwQUdLdVM1Y0R1ME9zVzFSRlZKbHZVZ1lEZkhESzNCVDFwcXJNWFhjNjkwUEFHVXB1U2JyWWdlcm5DcndBUlVTMnFQYW9vTWtpL1dIaTVWVHdPaW5QQ3MvSk5pYlZjVDNyTDhOSjBSV25mbjJiTkROWE91S0pkSDhicGFUT09WcDlVbGdTY2I1TWN0Ly9BZ3dVdUlWWWVCKzBzSVh5N3htTktSNUpEcllsVHJoZ051T0JZOWk0OTZ6Wi80VkY5TDZRSVcrM0tjOXdWVi8raUtiSFcrNzBqdkR3VE54cmUxazJtb3dEdU5vc0ttUUpBSFlDZC9aUHhCYnhhOXZrOFdueFpPUCtCa2F0SXl4bTFFdUVwVW5UbnExRWlqUW02aHdVckhGSjZoZi9GOXRITDY3bWdwWVd0dXNyZTc0Q2hSaUUwdjBLWWZTcFI5UlgwSDA4dUtvZzI3VXdBSFEwYitCNFNYaUQ5ZDNveVp3Z3RTNlhKUHNScUhVNTRQY2xMbnJSRU9BUEJpbDVEZVZNU1Z2bUllWEdPUWRqVUxnUzJzWFJmSW9YNThFc0g1cUk3OElqVWNib2FyTVRnUEkxYWZ3dzdvTUh4MHFMWmZseXZzYU5STFVhb3cwY2NtKzlWaDJvMVJmS0RxUzlXdG1VS1hLSjNMMTcveXNzSmd6UCt5NEQ4OW9ZK2psbmJQS2hJb3Vlakoxb1NlS2hvYWJCWHlBSWVmWmQ5ZzFFTGpjcUdlNEN6WjBKSTJaYktSTTJDdG5RQ0Z4RmorY3pUVEw4UHBjeWtGQTFKZ0l3NnB3QVRzbi9lVUJ0K3FHWjJWeXJBZHhRems2SFlDVFEwODVPQkcvbmhmZzlUcU90U2NQRmVkUEJTV3MvNE05bVBkcmVFcjdFZ2M2SCswamNQUEQ0SXJTRE03djhYZTc3RVZWWncyaHJnMm5FUWJtaW9nbGFtUGdPTllpMFltU2UvbmR0T0RMQ01nZjF3TTZuNVNzUkQzZmhORVhYYTRaNllkMC90VmFtYTNvWk9PWWZkcDZRT012K2MxYVlsRzNtT0I0dkY2Uzh2RXE0UEFoNUtWWm44MmlzWXBEZkVnZzBkMG1iQllIa3FXbmhha3FVL0ZNN2tWaVhMdUJ4UjI4a0hwY1EwQWVUVlMwUk0rQ2lleHlnd0lPczErVUJrQWw4dDd0Y3dXb1FVK0trWTJtVkxBRDNrM0xLNXliMHc3bDFmRjZ0alM1Sm9XQlJQMlY0c293b01ZdzQ5QXdsTXNpY3FBZVZtUis3Wmc2NDZ0V0lhNmFwS3NXUDRSeFZnWklRMHpJRUgrYlZlZU9nTzEzSk1KUTVqT2lNMjRReU1aTzNlc2lVZmp1eTF4WXBzbFVpVnZ0cXp1MEVwMXFrMHdpNDZJOUxqTkFxbDgyTlMzMGUrTGhNYzl4SjdzdnBFVzY5MmFHUVRWUyt2Tm5sMHczSG85ckpzbVFPOEUzeGt2c0NIQnE0Mzh1cUo4Q1lWZnJEQm1zRStMbkZzd0NMQkhJTWswWXpGbG9wMW5tNC9SeS91OEJMaTlvd2tVT1BXS3dMUXNLZkpUODBRNEtQYnFvVnhBekpnd21rc1FxVnJiRzVnVmJIQlVlVjdNSDVUdHdsZmtYUlYrZWtmczJuSzhpeS9ISktGaTI4Y2xPZktjYUZLU1ZEQTBnbXl1Sk9zS1VQcHZDUnF2TUREZmRzeUF6dlIrVjIrd21VYlpEWkdpb2x6UlFZVnZNYkt2dnp4OVdTSTRjLzBObEFSdnFOZ0NNQnV2OXJlRDB5amx3RzAwMENwcmpXbXM5bXNtLzhHL2t5Y2NoSkE1enVsdTRjOU5VcXBtU09aOGtVMWJ4Z2pMRzl3OUtBYitRLzJZbkwzdWF0bTNNR1VWNWdnVWNRblVpQ3lGeUtkTjZleHhhdzltU1phTFdnam03ajQvZ0RZUU11UHNpL0VWQWc3M2tTcGxqSEFuL0FBS3hIcWVmb2pHN3orYTRzanlmRVo5a3A1cWdXQmtiek1BRmFXR29ZV3EwL0xqNjRNYU5rYWw1T0MrMXRmbHgvTzJHMFJvaEdqQnJ5NVVYUFdmTEhJc3ZuRXY2MStnWm5JbHN3dURSK2tpaTB2dkZuQS93UEJxbjJ6S0ZPazVmN1dNbjN5VnJROHFlY0huRUIvWUE1bFdZWnpNc3dsUzJzU2M4Z2d2ekNYc3NQOGtHcWozSzhCdmFCNWx1amJNN2hTeVhDbW85WmpHRnczWjJZZGNycGNEUTJVQURMamU0MDI4M0pRQUM1d2o3eXR2Y2QxK2RhcUxncUJhSm01bkpoM280d2lqL1p6cDBnYldjWjZiT1R0RHVyVkJKSmRubjBTQ2tQOW81YVc2ZzNlTlVzNzVzdFJ0aDBwOSttMnhZNE1Kc00wV3BJbmpaZXNzVGFVdU81c1dQaTdpRTVvc3Jzcmt2NHZqdjMvdW9ndVA0VFhsQTZrbE8ybzB2NVQ4MDVCQVVkYjdPVklNaDRrNUVXWklKMFNaTjk0NVJHVU5UeWFaS1FBY21EcDRUK0hNd1RaeXBlN0ZTUmkzTVIwNTJ0azVWRlFuVnUwdXJYalVuTC9kTEJZaHZkMkt5RW12Y0Z6ZUIrWW1SYlJ4ejIwZjNwOTFBUmw0eUJBQjBkZ0hHcjBZRDFNQy9PbWFqWnp5WjEzU01JNFRuK1YxMzZjbWJac25MTXpHNlgwVk1KSjVMdkNxaHNWVkl2eDR0R0pIeklONG5xdk8wUVRGd25xR1FNQnY5UWVqeVFHMy91TUZiOUl4ZVp5Y0Zab0J2SCtHZTFsejRnV1ZSVDNXalRVY2ppOCtYZ3VFY0h2ckx1VFc1YzlPODlEUkxlSitJaElMQmt2dE5TclE3bnpHWVdVWXdMTTNnZlhqSkdRUVRWb2VIc3F3bUJTUEtjaSt5RE9Kc1Q5aEtQMUhWZkFTcHhmVnR4dUlqbFNxZDdFK2x1R2thc3RxeE0zcHRqWmZ6aC9wSCsyRWlQOHlHS0lnbzA3K1RReEgzdHRtTUFWYUV4N0FVT1UwQXp1M2tpS1UveXh2b0Z4NXFUU3lNOWF5OFRscS9FdE5idU1lQ3M4aDFRb05rZW50RXF3YmM5dk42Tld6dUxyeEZENHYzZmluWDFtNTl6bzJOaTZ1cHBnOEpwcjY2UmMvNDlVUlJQUmpNaWZWVXlpaVo2Wkw3RElacVdYYk5pK2RoV20yVTlkY2cwcndRSnZqb3duL1hOaFE0dkNJZGt3aHVOSWpJUUVmVmlwSkNnU3dMc1N0d0RKdUJvTllvUE1ERFozSnIrc3Q1RC9PRmRTYXZnc0pKUlE0QURDdkx6V1FXMkVwOXVGMHBZamh2ckxHcWFYdHh2OTZZQllSWEZqc01ocWFXWk1VZEJUU1p2Y1dYdDQ0UjlFdnZjYThDQ21yME1STUxrbVpwazJRYWRuTjVlSTNOKzRRNE9HODAxSWZJbXFiNzFjZzFYcEtFdXR5Y1prVWJLU1ZNNk96RTBpK3BRTDBtajhGcUdIMHV6RW1oaU9FYXh4TWJlR1poRXdxYVlxdytYeVQvWWg1dThXblFWV3Z0TDRrNDdnb1ZLUTZIUVBvNGM0aWx5ejU0MHBRZCtYb3FwN0NFTHdQTVc3Ny9MUHUxaEYzYWYxaFN2MllIOVZBRDEvdnlISWUvT24yZnMwdDk5R1JUdklka3NxNFF1NzV4LzJsbDY2L2lZaGFNNEFkaE9DdC9QNGIwUHREbDF3dHY4ZzgvVVBsT3dQRm00U0pJc1NOUzVtWUI4RzM1VzZrZ0wrcFM5WGFNVUNVY1VFN1RwU0dwWGZMcnNhQ2xkRy9mUDlYakVCRE51M3dFQnZvQnllVDdhemhzUCtvcW14V2dGWWtIWWtLbUZNNG45TmR5UFV1WDN3VkFtcGcwSmFaczZVeDhxYjg5SjZrRDVzS0tKT245dFExRXBHakpIMVRKTlpTb0dQelhKZExuRUZTR2NTRG5WTnB1eThmUTJnUVFseFBjc2NiajhWbDU1emtIWlllUHdWTjA1WnQ5SkFVcWtYdXZySHN6d01kWjFib002U1MrZGsxd2tvUG1xbTNvUk50WXZTV29STmNhQzBCSzZidENqYmtZSkYvd1UydFZadGQ4NnU2SGRGZ1lrSzAwNHZBMUlkRW0zMTlHMjVkb1Erayt6RFo4WWZNbStyam1IREs2MUh6VFNneDNTNkdrakxZL1lhU1JQbDNjMVVEUjM4Vm9KMUJOd3NJZWEyRGJ1WjRWd1YzNjQvc3d2L0N6dXVFQ3pMMExucnVzOWxmcGZ4VlJ3VDJoQmwwRUdWZVNJREp1YlZEYkIrUHBjY2xqYlFSOHFYemFmdGVlZG5SbUhJSDZqcnpWSVNDdEkzNFJUOEllbUxWRFVFV2prZXBRQmNzVVNRN3lnVHBNS1dzbWNkbVBydjNvak9MZWY2Uit0SHFwVFNvU3VqRFRIZ3EyQ3BZY04wS1ZFUDdIdGFOMjI3Y1hJNHNWUFZRM2JhLzg1YmtRT2Nucm1HQjdMM3VxVjRZeDVyZDdOTUtEcm93TWdMTDZSU1VOYTFiSmsxU2kvMnBRc0dNOXVrMkNTbWZla0xIVGFBWTNJaFUrV2RQUm9QYTlqNS85eUxXdEpBQy9SMVNzUzN5K0EvZXh6UUJCaWhIMUc2Zkwza092TnA0UWJuRzZROFdiL0NHK2NSNTFnREthNVVXbnZTbjc4OUVCVERFQlBMa01BOEd4MVY2UWpjZklESmRSZnlUR3dIMXQ0NXFBRTRJZ085MER0bTdxK3BGUDNvazhiR003MkNtS0ttcVF5emhFdXV5YnZ5NDFiVVUvS3VkYjB3c0RBbm0zQXZlNFJDVUpiK3o0cTJFaVErSzMxdGdMT01SQWpsaEJURzAvYlF4eEJ0M2t1ZnQwSUFabnpTZEZzVU9NcXRmRkROSXZrVDc3ZGlVWnNKallYQlR6MWh2czNxeitCbDFwZUdOckR0SHZsL0grNStHaEdJMUd0OGJlNDhOWkFhSit3b1JXcE9FQllBVmtJK25YRExVUGpTVUkvc2s2VVM4TklmcS9iTlN2SmIxSGRYSHFvSmtDUXptcGc0MHF4dG9ET3RIelVoZG40QzVsVDQrMEZIZ3NUNGlNVUhSOFZFZENwRVNtSHlhSHdCR1pNUjRQYkVYTXVac24yTkEycFZHLzRHYmZMdzg4ZE0wQlhNQm11U0NjM3JpOUdJL3p0MEpqbkRVSDJscDlGSnFzNWVmblBqdk80WEJvRkRiMi9IT0J2R0QwWS93U0VXcno2L2xwbzZzczNRQkc1ckJWYWJnNXdMVzh5WktaYXlwZUxaK3VuR1VZVU9YRDFQWWpENXdVMk55dVM3bFRqd092b0NUOHBFOGZuVFc4VW8wUE5mRFBvU3kwQVJpWmpPVi8zN1BDNitrWG4wbzFtM1RtWUZPV2ZXYzROWUQzc3lvMVlrazU4SSt5S002TFVVRHIycmJwRE9NWElZK1NQR0JMMGVxbWIraVNqYTNwQWhXMG1icll1ZlN5Y0NWdnM1V0VqQlNRQTEvTEY3ampTUmFmQ0tiTkVpOHNyWFgzQ1VSS0lxeUhtSWptb3Mwdk8rY0licUNvTFFjKzlYMUZsZHpXQ0lJVGFZSEtaQ3hBdEV2b01OdWQrZmJzR0kramgySDY5MFNneVlkcWdJQU5HT2dxRXB0Z3V6cDNxUWJrK3paWnRTTjlVU2x1V0hUNzg3QUZEU0dXNzRyZ2NHWGlQcWI4bWdQVjlKaUttVndwKzJaWnhBZm5EbFhPNUpFRDVkYUs2WmxBVnNpVXZzaE05eDdCZ3RzZ1JGUlFVN1hrc2Nadlk3dDFvQ0RJK1NHNEpPUnpRdzZxWWhFMkI0ZXoyT1FaQ1lBMGdGczZLOEU2M1QzQWdveDN4V2k1cmJ0NlBRd2tpZEUzY0s5cjV5YmpHSnVxM01Tb2hOZWVqMlVtNWJHRmkvUW9wSDRKV21Vemk4OEFkUkl4aURLMmp5RisyNlJGZWhLNXZSNEZWbUhrbHhzR3ZURmR0WEFNU085b0tpbzBSYWVWYytaa1pmRmdDelN6dDBxNTNVQ0hPRjljWlVNdTQrckhZc1l1NEZTUDdrbitqYmF5ZzhzS3RMQnloa28wa3Y2cHhJZ2pEN1V0Z3NFT0sxVy9HV1lwbVRKeHRpa3JJbGtLUTRTSjlzbWhxMjZESXNLZjRzWkd4L2ZGMEhReUZ4TG1nb0M2Q2NycGpwZTNPMldZbk83WkZCdll1T3hRUTdkNTYrNkxCc0FtYnZWck1CamxQaWFSMERsclU5MUw2UnYwZUNqUGNtMEp2ZTl0dFVuMUdoTU14Q2VwRXJyZjN6d0gvWWRVV25HRUtCN0l1Um0yZklHVExJRG1KNjcxc2NPbkd3V2RnL3dpUlFIYkdYWkluMk96RmI5TG8rbmxHRFZaYXg4MTM4bW5MaXRHY1l3TnlWR2JzTm50b21FVFI2a1lOWHZ5cEFBaHdjU2FUNkZEWVBCTlcrMXZGRDlLbXloMktGV3A3YVJYcTV3VmhmUEdKZkZNRFo3S2hPOWNtQndwZ2w3SnpHb3Rkb0hwQnY3Z3NESUk0UjE2d3lSQzhURFk0ZTFjN1lMRi9FcWZGZk40RG1aRjAvM0hQcUQ2SnNLY3BDVmEwTUNWSHZ3eGRhUDBKaGdZYVI1RGxDQm5lenFlc0tYVzFHd3VycVQ3a2hmcHJ3NUQxMldqbW9FRklmM255d2o4Nm8yNUw2R1ZlQnQ0QUVBVk15d1k2ajNZME81NG5ISk01RmJoY3NBVXBKUkdUVThKRGIvaU1yVDFWKzg4S2s4NXg1amlTMU5qOUdpaVIzTTdBMzNuNG5VRkl2akpCMURYY3ozZHNwbTNsdXVVWjlsNVNiNGxhT2w2RXpUUElubHBiUWtZVm9UcnJUY1lyVmtpOGRVamV0R2ttYUludVRtRmR4eVQwaFZrNWY5bzRvWS84eGVlNlBEakQvUWhqeGNQQlUrY0ppMWNoZmtCaGNqYkRkQjJmd3AvUVdjVk4wNy9tdFZGWEhyK0tzUVNyVmM0ZFhOOXpSMitOZkZjK2xnTEluTW00VkdyejFvZUlmTFpXZ1VnSVI4TkF6YTVYWlBWNDQvTjNCd2dlSTNtMFBRVURicWxtSFl6ZTA5SVlURG5UVTZmQzVtd0hzRyszNi9SKzdnRkQ0dEo2ZjF0YmF3T1NSUWJQbFl3amVCSnYxVHdvOFdrT0tHODRnRjFrRTloeThraDd0NFNaYlViWkZmTG5jNjYwdGd1NTQyczNseGJaOUt6eUFsc1dPMzhrOVQzNHFrRDlXcEFxYU5KYWRibU96czNJYUFKYUJQYk16a05Gb0RibjQ2NmdUMVllZEdMcStXTy9BVU9UeTlDTmhOaUUrbUp4MkljT29FQmdjTWlkRkh3UjZvY0NGdDdvazlxRXZmSTBSRTdWbjVxRFhxbnFocUkvcXhWOG1KVUtBTVBvM0VEbTB1QnJYaXFsMFF6MWNpbjNJdzU4UVlrVlc2ZEsyUjgyK3J0U3UvT3NZRnNRM2w3ZkpQQVpBWm5yUjRUbGNrNzFzVWo1VXZEMGtJNDNRNFc1bVJURDJna2kyL3FuaElDQWdJRG0rclFBNUxGVVhzNXY2R0lNeTROYzAyZ0lEVlA4TEJKVE03M1lDMk8zUnNETzIxbFg4bzUrZ0tYUlMxU1J6SG1SREVMaG0ra3cvZkw4K3BpVW8yUEhQN2RaU3RQbldSbTBxSG1BSEZSRDZpWlNCRFBIeXQ3K0lZcVBoKzlyWkF0aUhlOVlidEhEdURNcHB1YWMxUkxBa25vYzEwTE1ZVzdlMG9NT045YlVXOVJtQ3NwU1dZckIvSDFBTUFQMExOK2h5ZDB4NDA5andlVlNFNDVMT0U4ZUJ4NnV6eXM5SVVTeDdkRVlLZE5kZWZqbEdicVdidjI5UkxmbnJNUHFyM1NmaURIQXJkTTVScHVnK04raVVpeVQ3VGpoUFV1Y1hsRmFRRE5kcHFCdkNRcXJsNHg2WGhwNzlrVkpYeXNBSGdxdGljNjhhYXFneEl4M3BDWkpVV1NVOGJCQUwyVFlEZ1IvM3BIYllIQXRTaHZGSEtWYXc1U3RTaDdMblhjTWVZZkIyYkVoSHJOckFYWEdxbzk1UGdDdER5UzdaWlo0TVNpeWlPVHdrOHFJTXUzQ1dtMGNpRmxLSisvSXlYZHJ3Q0MzTjBDeUZTVTlBdXBpaUZ6QzdIWUI4dTBUbC9pVFoyZ1pKc0JZNEtrZitiRkhHTVdSWCs5Mzg2UUF6WWdqNmhLVXkrM1FnUFlDZFlHd1QycEE4c0t4cHJyTFJWMmxrQmhZcEgvbUw3bWt4L1dvYStMcHF4enMrbDE5SCs3M0VVeGVwY0pXTUJMRFVlVHFnUzhjTkIrS1hxNzViMDZvb05ldTE0THp4d29hWVhxQzlrTWZVMTBLL01YZWJIeFczUVo3UTFtSnhuazBsamlRUWhGOG92dnZJRGpLU3lGUWVCUHRBNUQrN2pGZUpCTVI4NnM1SkQ5c2swY1RUczZPcjI4Sm5DSXhjNUU4RHQ1d0J6RkprUzBCQWY5RXNxZ3JyMmFPeFhWa01KaW5JVEQ3bjRibFRreWRwdHdFSDZvTTJYcWRjNHMweFB3RVc2eWlaTitSMkZFZ0tQaC9oOE84OS9pSkVxYUZXWFM1ay81ZlIxcUM1b2drSGYxTDQyOVVTS1RsbzFIRDl6bkZ0OXBVSHVsbWw3eE9WLzZFaG5ReU5iWkZLU2JGSXdiOUdTU29IODJYbExXUVlTMG9WNXpuRkN2ZmZteklPQVdhdXdocms5NHIxMDR0UXdxeGx3QzFvMGpLZjJ1NWR6TWpsU3ZYd0FZUEdTNHJSTXJMWms5elVNeWhNcEkvMlJTZW51SlZrWk9XekoySTNralFTTVhqbmdVRE5sRk9xbHBzOTRaT3krTWs3OEFUTWplUjdzeUJqelBuNzFUOHAzMnlrUG5rT0JjeTYrTDBrc2xPOE9VaW5jajI5ckJhRmplVmszVlBGL3I4T3ljc2ZlSXo0YjVEMFFWZnE4Ky94b0ljd2ZFY3pnSEhKcmRVNXUyRndCbE9WRG9JOUxTa3VoWmFyKzhvQ3lpUnp1eFpJZGlETzJTSlV2c2MrS0pkQTZTUnpZaDFxRUFuOTVoYml5NjVQOU5qSndVR21XQlA0aExaUGM4WGZkT0hmK29MQ0VMdWdRNXl0ZEVFZTh3UjZjU2JXT3FuUUVTUTFaeFhYcW56T0pnSzZMU1B2SGxaVVk1Q0dVc3E0dWgvS08rVUJkcFZ6Q01rRUowVGFxRHhDRXp4Y2xiTU5sK0I3WU5kUVlKbjVIZTUzbkZOVUd1dXkyTUNueENSaSsvL0pHdkRVRld4T25hN3I5c1IzYk5HaU9Tei94RE4zSnF3NnEzdlprZ1MwNEY0SVJ5dDFzV3F5eXpWcURmQjYxQlNxaWUwSGVmK0RQMnRhY1ZvOE4vRkRYcHhLR0VKcFNMS2pvU0I4SnVVNWJ2VDYzc3NqY1JSZTF0ZzU1dUtCbGNTUjUrMXEvOXo2NmF4TnlUcTdjeSt0TTFORFBtYWhqRDI5TVJseE83bVN1cERvc1dKQUI2S1I5TFoxNC9CbkUwK250MmMwcTFBMjZPZG0rVU1RblduejM2Q2hwTnJOMmd0UWROeExLMkR2dGJkYmh4aHpsTkkxdGhraldKZ1lIWkhVdjhZL052cTlIY09jQzZpaXV5UXM3SVNVekU4bk5qT3RpdmZXNnE3TTJmK1lXSXAzUFRjbk9RajB6OVVuM0ZGcWhwK0gyRDI1eURYbnR0QXVmMmgxRDVZZ2lRaWw0MDM3a01MYWZGeEk4M1k5RmNoeGlaWjlMTTBhaTc5bjhwZ1EzbGtkYUVuR0xrb2d1N3kyUkVzWCtRck1lUW1nVUl4K2c0YnZONHZjTzAvRUxvZ1dPTThpUU4wWWl4bWJrYk5kTzVjL3k1VGdkVG9YcVdMbm9PRWtxV2R6ZG5penJPOE9FY1Uwa1R0bW5sVDQrY1pNeFNPanI2S2pTNXd0WkdVUGhOZEY0eTRmQzJRWDBLQis4YVZSWG1aZ2VvYmRnU3hjeE5pQXJTWmM0eHB1OGIwRzh2Tm9iSWc3UUlIdjRZa3ZqbVo5ZWk3L3dZcFpvTko1TzJBWFlCVHBKcHlmUElRTUpaanVaQXp3OWp5STBUdWpoTWptV0N6VEJIRGh4NGtmV3daLzFmcVlRbEkrak9NT0lCUUdCYjhITmk4czRQL2JuUzdVTjFld0lycmplN2dtMm12amhHMWxLaUIwbExwZDA4SGlqZWorRG9XZFpZbitWcjZrcU5CbmVEMGZNQUZ5RmRJWndZUE1XUkdXcEFQRnE5RCtFVWgxdloydGM4UzVJazI2ZC9Sems0UlRPa3N3N2pNU2ZDNHJiNHVYa1lwTG94SzVIMllXd3hTL1hsWHowblRGaWFXa2NQcy9kWGF0SzByWGRhNjA4ZWVvVzZrZEE5ZUVyWjR5R25NSFpvbVBVNk1hYmIwVlhCaXl0bGZHT2oxK25NZm5QcXBuRmp0TjdDcnpKMnhNYkFiN0Y5S0VCTHkwaUZ4Y2hiZEZ1QUhaelcrZDJ6bGZ6S0FIL0U2UWF3bFR3ZkpKMFVoRDZuRm5ZejJ5aEtTVTdPL0FCakhZaTNwMGtvZTdGTitFeWN5cVB1aUljSTZOd3N1QlBmaXNRQzRBd3lFWEE0eGNGM3RGdUQ0RzNZZ0R1NzRmWmtqR0FOUzdrRkxGQ0E4dnVPL0FKZ3hjR0pLV3F3NUUwZ0psVDhmQWg2MkhoNzNMRDBkWXVEcVZkdTZsQTA4N082UE9MMzZTcHlDYWVaS0lKWGpvZFF0a2F3b1U0VkxrWGVrU2hKWTV0OE5naWdlSnVWVzNrVUNyMmRoamNreHE5Z0lFR3Bja05pYzhVbEFPWmJoaFhkS0ZjeGo5emxxTVNaK1RHenRnNHJQV3YyUkNjbG9iQkN4R0hGTzRWRzhudTd2eHIyYmwveXRpY3BpREYwTm5MSFJndFRZSkc0Vk00ZStVVlRRbjB2WHBMQ2JSTnlvVWJSU1BRQWZEWUJSWDk4RHp4enZJd0cvR1pXZGNuS2crRmwwV0w0QW4wWjRWNzlFV2ljd2JSQ1pBanVKUkZ4L2ExQnEvUkFFQjhsYzhHNDlnN2NuMFFNRW9ybGwyTFRzY0NaOFRSU3R0WUtST2NJQWdkbUJqTCtXUWJXRWZTVndVbFIyaVZFN2d3TDFiM0ZsbkdpRUtqTWcyTG1rR1Z4UzlzUGNabG1LeC9nNG4rSGhWSDFvRXVxR3JrRmRSSksrcnMySGdvYXJEbWJBR0ZMYVRTaHVrUWc4Z2FPY0F2ZlRBdm5yZ0k5R3RRdVdleTBySUNwdkpBYmVSRjZlMDk0MkdFVVF0MEFoQm9YQlh6cHd3emFJME5IT1IwaU1neGFUaUU2ZUt4ZGQrNXJVU2x0S3FHRTVZckMwTnlHMG9FNHpBT2xtdDY2cE93OHNPMEFsWC9ScU1lTjdzV2ZMTllQZU5FeFM0QVRUNXZjRExiQ2xpL212YlVLTVVDSVY4OVdpcmlUNTUycStBRmJSNUExcVVyczJRYW5zMTlpZ0RsOVNpeERJemF6SjIrV05pdGFNcCsvQTVxR3U0dFdabE9WMEZvZm9OanE4dFlmRnFuM2d5R2dwbGZlRy9GZTArWTlTajBPNjlJVWF2UG9ESkhJc0dEYmpEc2hSY0JRRVB3SkdBTnZSVlh6bFVXSnJqLzNYRnhXcDZQWGxlNjhqVGVPV3hDME5RRmhhTkVqWGhRZlJLVXd3WXVGcHlUYzFzWCtMMnlMOWVmNzFzblNNNjZ2WWNzMUVRTTRYVlNDSlNwSWRQbGJkeG93VjBNeC90emw0NjVFcnpvK21XWU9sUE5kWW1NS2h6VjNJTEhmbWovVGZiMVVDS1ltamxaY2l5OWxZbWVmeWl2alhTdHNPTWh0SDJCVXR5VEh1TDh2SS9XV0QvV2VYMlV3UDJHSjlqTUQ2MHY5V2xFK3NxL3R1RS80YWVmZnFmUDRXdUhoZ2pzSmZxd2pKck0rdEdoYUIvenU3ZEFoRHRoZW5vUWl2MzVJdXVZcXRmUFMybVJBdmthSkJnbmZma2dpZ3d2bG10MTJGWXMzTHpIczBFNkdMcFEzSHVrQWFQMnN5WU5NOVJ0cjhVaTB3UEFTaFE0L1dQZFNweHRiREZJT212Wkc1NlVYMnpvNmhWd0puR1VOMFBIanVIS1RoeS85dDhqRWxoRzV1T2NtWFJNOWRnSG9CRTJKTmo3QmNrOXk2Y2dLUEtPYi9Vdm9MUFhiMkRWczdSL3YxekxoWWJDNGJKWmM1WGZQbzFsQVNrUDV5ZEhXQzRrc3BZckM1c3BhRVFGeXNnSXBnVzU3K2Q1MWoxWGNUYlNybE9XSm5LYVBVUHJhNm9aV3ZkalJPREpjbTh1OTNXQytuOFF1RnptMDhmby9vcWF3WithTlRvZDMzWDlzdHQrYjRYKzk2dFhEaGdySWpobzNGR21udEFNVzVXVTIyck5lYko2SG03OHFkQm40MkhJbDFEQnVZdTllM1JOTkpWaGUwdmFFNGFTSVVFc05WV2ZwMTl0cE4wek5ybFJxaEY2R3pBOVpFUTBrQXMvaU03TEdkaUxIc3hjVElTM2IvSVRKYWp0eVR5VUJYcXVqRVprUjB1UWVsYWpscXhDd1NXaXJDeC9ueWpBK0lNNHZoZXQrUSt0S1hZdTVCSE12WWxLZ2hqRncvRFJJOXluWndqNWk2WTQ2Z1QyNklabVNHcVhleEgxMXlTNkx6QlJDNDJBaVRkUEN6WElnYUhYTDRjVkhEZzl3TlRpd1ZZLzFKQUlGaDdiTmtrdkkvUDlTQUlKNkpKWHBZS1daaTdXQlJzVmt6R0l6NEZQTVA4M1ZRYVQybXVnSjhjc2drM0s1NlUvVE00NmF0U2xvVk03YkE1dW1QTURzTEIySzZBaDF6Qy9RaDlsQUt2b1dBQk4xOEtKTTBWUTY3MjR0eUlNeEFnUGNQREthdHZ4Z1RRSEZpQkpnajk2M1h2MUlGc3lsQzlMT1UrMFNBeERQOUNsLzA0WkRHeW9UWXNQSHREZWpKNWVQaVd4QS9EQkd5VEJad05qQlpXSXFwSTFkRFpJRDdYaXlSZGQ4MU1sLzdkNHpxS2E0SDNxN2orMm9reDUrb201OEtpSTUxM0Fldm5xb201ZWliUFk0dlNVSEN4YnJ0czRDZ2NKNzExS0FkSXRWaVZIUGVEbXE2SU5uaThjYnZaU0RuOG9VSTg2bGx6K2RINDdZeHYvcmZuT2dCUFBtazZLUTUxZ2p3RU9LY1phNUl0VTNWZnJrOGZKYzBMQ2pCV2t5M0hFZ0hLTFlZdk5hWUdxOFJhbVpoRGFRSjVpN2tSS2ZveFIyRHk5S0p4Sm9EMHp5b25Bb2JlMGlVamF6T25LeE9LNzI0M2NqNDFTR3ZHUkV0djIveFF0YTNMcHFFMWNPYkUvNnhlcXh0emJid2x1MGJsK1cwRmJqNmlRUzRnUkNFdFNjVVJwK1YwbVRpelNCaEUrQlZTSTFWY2NLN0lBNjFZME9UbWZoeE9KUEk4Vm9jQXVhNmkvZWtXdE5mb2o1RlNnVlQ3d3g1T1hINWczYnYveEJGamFRQlV3eXI1SmEreW9WelduMmdNNXk5YlBHMW5QWWRVQXo5WHNuMGZLZnNQcXcyaDFQSlMzaEdwbkhoSXBsTks3emNqM1RWVUV2elFCY1FxSFhMQ2dBNDE3empTTVRzVHpzU0JibHpKRU5ISVFiVGwxU1FRelR3NFBsUnQ5MW1RZFVvNjJqdFREZUdFZkNnckVtbEIvSHBEc2ppbkt3aGJsL3lkd3paZ1htaHZmc0UvblN1SEtBcGVYTUtnRDNaSU4raWtuYmtQWmtFcTE5Qk9UMzV2bHRDcjlqK0RDcnFYYTF2a3RCaTFic254MmV6OWh2enZ4eHRvUWQ5OElwTWFJMzVJZlQwQUtYbDZYYkpOVXg5UFhvMGo1MzFDOHFWMjVBa2h6MklEOGdBcnE3YUhZVFkzcTFwd3Z5NWhkREZneS9YTzVwZGhzTnQ5UjNhcEZkOXVqa0t1UHJKQmVxaDMzSEROZW10bzhTdDgvU2Y1VWE5eHdONWRGZFJlMnQ3clNGbnJ2a1RYa1dCVlhNV3A1Qm8zMnhFa0hwRWJYeW1kcW9HVU9GWTNJdE15Qzhydm84SnplMksyQ1A4dXRmTkxaMThVUExMOWgzVXo0TW1PQVIvUENsLzZWemVqclVycnRtb0IvOEtRa1d3Qld1YVRRNWx6Y1FpQ0FwNkYrdENYbk1sdXhocHNBd0hiSXZqcjRDVXltalM5eWNvcHJIZFM5YmpZVmVVTWI2S1V2S3ZQM0hDRXFTSmZrZjh3Z1cydjdQYk9zeVVmUXJNcW53dkFlNENyTVJqY3RLNWxuUmhEK1VXbm4zUlE5V1cySkFhOUxYdWVzOHpITTFVaWJCMkJWM3VRNVMrZ2g2RDdGK3pzVnM3SXVhSDg2UHZTK3lxT0pJZzZOb0VUZGYzY3dFWVlTVWIweXBpTHo0MEpYYjNYQUZVMFNHYnBEQ25xUkRkbjFGVS9ya0k4Q04rOFhsZjJhbklPMW1BOFZTc1FibkJrdjZ0cTRMV0RISXB1dVBxNXJEN0RLYkVrbU1yYkNJa1R6bmEvMWJxN0g1K0tYOEd5dTlERDhneHJHbHBUZUhsSjhoYTJSeDBvY0lXV2tQTlE2UmFVcFVxN2QwM2hrRXJCS0c4R2h3RitmOWpLek80bUIrUG4xUCt2clVkeFp1RENCWGNSMlVIWjcydy9TdExNY2x5SFc2clBVMlp3OWJ3QlM3R0ROOGtvTDRUY2hJVHh5em5FMVRKdGlGWDdSajZJZmEyTFNJY1JBRUVuVkZsL3kyZXlSUGVzcU5OOEZFenRwQW9SSkhhU3F5VTkvRHc3bzM5M3luVGhsYUZQdktEc1YvWmpwOGdOSkNSZlF6bW9VVEFxYi84SHRrS01YVlhLQm83ak0xa2wra28xUlgzYTZiU0kxNnVoNVdOTWdwai9JMzdVam03TTlQdFhCdVNCdGNYa3FhV1FxbUQxS25ab3hwOGQ1Z0F2WDRUMVFHa254TTVFWGRGQU9FMEEzOW41bjVjOUVhTUJyMFRvYWZiNUZCVmx4eVNpTjhxQU95VXAwVUYydWVaTkFLMUZNRmhjRFN2d1dqem9hQnhDeVQ0YU5KVndTM0tWS0xFdEpWN0tRRHU3ODRPby9SaEk5Ly9mQWQ0dGZlUEJ5aTZNajdPYlcxNUkrV0xOK25iWStIRytMdkFvRW4yZmRjRlNJczQvMUg3MUphS1REbGVZMER0STM0d1grcS9OTzJlQ29uMGR1M2pRdDk2NW9HNXpTUVBSN1JZRDZqQUkvQ1ovSnYxWDkxSUlJbDZCOWJpN3Q1RGpzSjZrQ1pWQjA1aisrc1VSc3FrVFJxYWcyWnZFY0JWT2lDMGZVN1BIVys4SEJ3TzlYWFpzVFVpN3JieWErMkZ0cFRuLzM1MWNsZWFVYXI5MWl6RERJRW8vWGkvQlNNbXMvWEJJamRMeHlyV0g5UHJVc0pFc1ZzU0wvTEU2T3R1STQrdXVEMWIvQUtoMWhad2lWTm5xMnk2ZVJYVCt5SEFaVmxpN3dWcjZlSmEweG85Z1NacjhiK0FIOFJJa3Y1WVRTK3hCTzJKN3BWL0VZNUkwK3lnNEsybkdaOVc4enUxT0UvQS9Ea1diWjFHRkg1LzZqa3lwcHNrVzVmaUZyMG1mVnlaMFF4SCs4VXJVYnk4dHNlN3VkT3NoSGdkVHFMbHdyOVA0SGM0MEJCWkdwNmdpYjUyUERYcW1KU2hYa1ZTdDdpMDBEUDMwTnFEUGJkSEdvNDlaUTZmdjVOTVE0YndwTUV6OWFPQWhWaUxTbXdDV0VRUG00TGdUek9BVnQxSzM0dHlwQ054NFBXYjJ2WkNqdXJhNG52N090TVBGdUtFM1E2Mmg4T3VwdzJlTm1sUG9NYTF3ckQ3WUFCL25OUnhjcHZLczVMWHVEYnFSRmtLSmVTdTJMbFc2djh3OVY0a2VVSjMrZkdtRXQ2MGFBT0d6S1kvZm5NL0RsZU0yMmNVRDlpbmI4YUFvUGtZV1NBS0dqUGM2Q0hVQVYyR3E3ZUxYblFIRXp2MW05RktuQWk3eTUyYXFyK09pTFZ5SHI3d01SMjNscUVia0ZTeFkzVkNROEYwb2UzaThlelBDNzNmSnk2a0Y5Zk5OYlZxYmJoWjFuTTRaVmtHMTNCWFlZdVc2emJ5YUNxeU5xaHlHZWozUVlFcitEVkRvNWlUVWZpWXBhTUJQOVowdG9sNHBjNk5OZlAwWkVzbTllRllHWDVNWTFEQWxQRjRWbHpiYzBZN1RzbEx3QmswbUZUd1hSVFBLeTNYeHBMWmc0WklXTXo5dTYrcThmRExXVzMyRFBHNzdzYzJJemMxVzZqaHREdkdTWTh0bkdySWNZSktmVmFQbUxESzVJNEJYNTdpYVJqSmU2cDRQdlNVdzBwTlg1K2d4c0dMMmh3aHJaMWZRYXlDeGlYUS9PdG5FQ1V4TTBxSkQxa2poYVhEYmRTUUhNRTVOZlNpSmNjR2NGOVNBUjg3dHdSRzh0Sm9CQUI2WVFGRFRRVUpnUWZ5cUgycnQwcU4vZUtNQnJ0MDFhNFFJSDBwcjNvRmdlZzgxVndiWlE0NEJPZEhaL3dSVG1zYjFOM2plWGdhQ0dyUlMvSEw0cEpXdmovVzhEQk5FWTU4azdJS0M0SWxld1pPV1BQY3J1RmRYNDNRcERnN21xQ0dYSkZad1ptdnFaaUZ4d01YUFMrSVdtTFl0bGVHSEZWU1laVUIzNEl0TVo5REwrNy9MZGQ0S0ROalNkNTNjM1JDNElxd0xuOEswMXlxdnhab0xqYkNzenowQW1BUWxRbVVIMndnQ2VHUzM0WmpiRG9tUHhzNHNkeUlidFAvTTNXZ2F5L3BWUlNud1NTeWs5bUtvaXFkaGxhNlhPc2hyemMyMVREeTFldVUvMzBPaHlwQkhDUTZyWnZLRVg0cEtWMDkycFV5bkZadldObUNKZjgzWnNZckl4NTVBNlhkWnV6NGNDaFBTd0hlOGNxbVRlWFBWQmVSSTVaTXFHTXVuUktQV2xlbUE5bUQrM3FESHozbm5yVDFSZGFVbmNrVTBBbktnbGowNGIrakJZWUdWNDBLWkorczQvZEsxNytZRDA3N1hBcGpCRnhZMlM0WkRkZm0zOXYwRkJ6NTd3N0NrRVV6eStVRzNqMU9KaE5FL2kya1pqM0ZsQ2U1VU12MkFVSi81c0dKbnoyN3FUakp2d1ZzVU4vMzJnQnB0dUxqeFhTMVVVbFNTajMxYVhCbVQvMjZhMUc2MWRuUm92c1pRUnFlTWlQMVZuZWhKZGlkS3U5c0kyRlBGRktDVElld24yZC9rM3o3OVJ3YURhMDBJVXdyUU5KbmQ2dHZtZk92eENHZ3M4NzYrYWo5QnNlZzNtZ1ZxQ3Vwb3d6cEN0OGJuRmdUTWs0NEpicW8zQVdwams5NlcwcU5sQjMxZCt4YW1oU3B3V041Mk54ZXlySnllVnA4YVlCeG5EVkczZkE5UVNoVjloTW8xRHpwS3JURjQ4VEZtMEN2a2FuYXlISkZ2VThBLzNLalF3cEEzSXloU2hNUStLZVAzN0p2S09Rb2hQcmxhKzBQNi93S3pEUWUwanpEWTBjVVJxQVBlZms0WC9kWXRnb2VtemVrK0xxVEdob1UzRkRkODQydzYySGg1Y3dTMmlOdzV4RUw2UXdVODFwMi8ycTA1RWJJOTliaTd5dHVyYlp1VzJjS0tuUWxqU01tZUMxT0tyR29VdVhTRWQydTZQZHhTTHpWOURjV0dWK0xnd2Z1aFYzTXBySk9mTHFJODhtbGtjZE9MaHowZWdSUW9XYVhvYUZnbFJMWE5JaDdCMDFVYVcveTZ1eDNvN2pEOGpDdG85RFRuZkE4aFdvR3ByTiswYVVqV0F5cG5YVXRJWGRwbUVhanc5MkptQlBYNXliRElxOXBHZ2VBK3VTc0MxQllpQmkwTkZBSnQ4bmF2NTVKMlNVUnJvRytGdHRXYWRuQzJlMWowbzQyQ0pndEYrVnB5SkZ4OGlTRHgwNmM4VFpkSElpYlRLRTBXWXp6ampOSjBNRDRiWmtHbGZKVlN3czhUanp6ZXdmMkNaZXFXT3JxaDNzKzdEWjdCRWl4VlloeDkxWTNGR0dvODJZN09DbU5nYUZ3eU1Wd1Q4WDFtRjZqWTBua0pCWFdaVFN0cEdBMGJJdUZYZnczSmZsSWdKODlJNXFTdHpOTzBPMTV0TUxkZDlXZDlWRW11MFR3WmppNzgxRE95WkN2bG1STmNjcFowN0wxOElnY29lSlNSZ3hZcFlpZDJzNnFhNTBYQSt2K2l1YVVTQ1duZ0syOGlmQU00ekhrOVIrZDRzd2U0QnpCUWs1NkNBaEdRdDRjQjZhVi9mNloxVWtUUm9JTGV3NlhDbFJpY0YxSDJTRnhpaDl2SCs2M0dDcDZySGx5REhDZU40bFY1alNnUC8zblg1cDdXUncrTTk5MzhiWGtyMVNDZ3F1Qitxa2FZQ2wzdHNUdjRQMk93YittcDVSajNpMStmOEhVSVRRVG5MbG9WWHFEZWozRFIrMmw2TU1LNWorWnJ6WkN3SnVTYThxa1NHTlNaWlAwTHJSaEJndkxIdnR3cldVNmZBVDlSRFNuUXh3MXhJVmhTUXVSYlNJb0hHc1RGTTBFekpGZ1FRd0NLU0NPTEtUaHBEam9ZekpHQ1NUTWJsb2tsenk5THhndUxXeGRYTEpjVEJrTWJxSFA4ZzdTeXY4TGxyRzBtbUVjMjUwd1lOUmMrekxNdTIrTUpVREx2dVB6TkF3T1JnN0JDVnlMTnRLTzVXUit6d2RnZVNkU1Bja201VThIelN5eXVDTEluTlhpY1IvK0V6NmtYTGhwemREMVFCK2dBYk9YcGxCc2JKcGVTUExDNjhIeTQ4M00xZkR5Y0c2OXE2QUlHWXlaUUhRandkdE5Zak5aRGZ2RkdaUlRoZnNobFpDaFZ2YTA1Q1hWUWtXVkhjb2lrM1pIMnlhSHJQMkIvREVaUjBXNER1aCticHVqTTZnbEpxbklKVjlNZDZkdGZ2UnpiQWZ1UkF1Y1hiTWVCN0V5UWRYMlVDSkpBbnYwdll1dndnbVpvdE1RK1VORUNlc01adjJDWDNDYWZyTVRveVBiTHhxc01UcFdnc0thWEJhS3N2TmdiemhlUzVpVHBKSXdXNlczTE0vWWpxN25pMXY3cjNMNlgwR1lDWUIvNTZwaUZ5b2ZhRXl4cnd3eTFlREI2MEo2dEhmaWJZQlkvZ0w5azFoZFM2dW5RcndBM0JxTDBJNTJRRCtKRG5QQUh1Mk1hcFVBa2RsS3RJR2JtZlFxQzN4dFMvbS9JamNPVHBjY3g2a3RpeU9lQVJZRzJDRjVKUThlQmtQbVpOdm9BMmtZNmk3bVJYMUVqeVhTWEZqby9xTCtqRDdyem8wY2x6MDljQVNBdUlsNGdPWGxTaGFCbUZoRXNRcTVFcWppaFpxQ09yUitQWXpQRTBWOHVWRmw0TERGYmgrQVVIZmt1bElpRXg5QlZQdUwyTm9ScVhoYWJWNWRQMnBQcThQYUhwUTNzRm5IcS9xWU1hQjF2U1drUGVEbnpwMERhVWxnSXc1OWRiT3FKK1k1L3lNd3UzL1JMNGJpR2k3UHZuK1JNeWd4MytkMXV0VURvRGFKZU1ucW51U0puSVVjNmkxLzZOT1ZOWXAvWFF5eFZWRTZJMlZJbUlnWVJhd1ZMSHJtMmZwSU4zZkg0QUk2QSszKzZ4NmduNkFNTEZlTnNON1V1ZVFHZEJHOE9vemVaNFR2UmdmeFYvMkxJVXU3RzR4OHl6Q1ZVa2dkZ1VPV3poNXZXN1RHeXpBWTE3NzA1VzVtMDBZMWMvZFRMdFBwNW5yVDEyQmo5M0RwM3VuUjBuSmhXaWw3OGpCTWVuMlU4MFA1VCsrOTRxM3ErOVdDZVZYSnc3RXVOZjlDUTcrdzdHMnBJMU9NcWlBSUhwZEJVOVpyQlEzRkM4OWs4OVlMRmxOQkVkSWtMajc3VThOSnh4QWNKR3ZhSXlmVTJRSzJnNk1BTENqQnZuK2poYlM3RmlkRHArbGZiUXdJUENmaVBZU29yZVdnc3dHNEN2R2hTQ0p3NDh0L1JtRFJPU0hsSGE5M0pLMTgwUTkzTCtiZW1KVU51MUpOMkF6RldmNWJENFl0cll4aEJraGE3Rm8wRXRFSkt0N3Fqcm1NbWcrWW52d3FkM0Q0bFdjTzI3eUpkemNXN3Z0eHJVeEJxaFh6cklIdVo1YlhqaU5nTWJFRlZGVmxNaTFpRGo3ZE1WMEdLYkwrQnQ4VXVFSS9kNy9iMW8zUDdPbFo1MEcxZWowYXpEZ3hrV25WM1grNHFueVk1Tld5blhrM21jdTgwMjlkVlMzRFkrOWY0T1lEOUVzTXdSbjc3TkZiMVNSS2NIdEZXeVBYMURYL0FTU05vMlN1N29YYVdCdkI5TC90UmhXdm42WGQ1anAyQ1Q3YkZSdzFpY05jSVdmeWFsbWZVOWY5T1NMNTlsSkhJcm5NSHEyTjVjMU9RcCtOeTBoMmRJSTB2NHhlMEZwZlBIc1VFN0pvZmV1cmxLTG5SWktZZjlUMkcrUDU0YklncTgwbWQ0QkYwdUdZVUE4S2Z2ODdNWG5yZFV6MEora25GUU56RXNNekpCVENuZFhLaUwzbUFMTVg3WHZCZzdUVFNvMnhHeTVoTzF1ZGhINlJLcTRYRC9OcEVlTFlRVkdMRmpoL016bEFaK1BwZ2JzaDJEVXdOSW9GTHhhL1hCUlU5ZG9wUDU3d084QVhsQ2hVTjRUQTRwVXVSRzhRZm43TlNQdWUweGhuVlpPc0V1N0x2ZVpCL0txOWFFUjV1UktzeXMvTlFnOStSR2RabXdEdHlRWE9BRTFaOXZWRkU4Z25lKzNiRGppb2k2bW12RFRqMFpDblUrenhadEovMWlKbU16S1pYYm1SdmUzeW1YdklFdld3RGlMakw3VXdwbGtsczl6TUhRbFJDTFgzYzJxYk16V2J0T3pRNzF3ZlRzWE5hWEhmR1BBRkZCZ200Z2hwZXdjV2pjc2FxL0grZzhGK3ZpaXR4YTlBSjRCR1hrdWJDZlY0dlZoYmk3VmFnWHBSWUVpV3R6aFZKQTlySHVZU1VlMnBIMGNVZ0dhc3BTZDNVNGJDQVlzMkdwb0FXcFcwYzlHQWZ6YW4vandsUVQ4TmpDczExWmhpUndPN3J4SS9QNzJhRlFXd2luY1hJVzB2eG4wSkxCbytCY0c4SC91MWllSnl3ckV1RHU2bXBkMmpUTmU2QWhjelU1ZGE3d2U1T0xSdUdkUnZ2UjV6S0krWERRVU52aFhRN1ZGQ1RkcXoyd09EQ0FRSUlwL29HbFVyd1ZRKzl2ZTIrSDVOK1hNQ0tjcVhHWXVuOEdWWCs1anlIVkQrKzdlK2R5YjdkSUpROTJPM2hGT0dKZGJINzloMERBcWVVcjhJVEtaNkpqNktYVU5ONlN5UHNuNTJPb2c1bEh6dkM5RVBwOS9RKzhrUG02cHFTcHhhUEd0R1lhTDdNMEpBb3BvSFI2QmhoRWlLd1NjRnVMcTY4UDJmZjNzNitabUlXcEdpUUpEdHpJMHYvU0JUNnVMM1pTbXVtSkplVmhvRU1VeVJYS3BUQUhmenY1NS9vQXNEMFhzR212YUdKT0xLa2RzWERiWmZPWXBuR0FHdEYzMWtMUDhPUkdiQmJvOXFhdjNVNXVsbWZhOGliWGRKdmE2NHlmaFNqdG85Y1RPSlRvNUR6L3FZWFBVelJxWDQvZUlkejlHa3p5ZEVPbjBmbTRxNWhWY3pGT2N2Zm1lUUY3TFJtYzdlSDhReENralF4Nk9YdmpNbENRVGdKdXBKejR0WHA4VUZOb0NCYnVVeElOanh5N1h3MWJzVXpJeTNNcUlHWGtFcGlLNmZsa1dpQVRiWWRVb1Q2alU0TFlUcGpXd2FianpwS0dFK2o3TlVDWWFpOTM2c0JrYkJmejVJRFU5VUUzZUdaN040NFNOVUlYeFUrb01WZkUwZHMxSmZWakxtdytpMkR1aDdGYnV2NHJSdmpDSXVqTVFVb3R2TGg3QXZ6WllHR2NucVpWeStwazdZdTlVK0hnbUxyc0Zkdmx3eGcvdU5zS0k5NG1KaHYyOVpHa0xUdXRyWGsyYktoMGkwUnpCSmZyVzR0VXRBSnFkNWo3cnoyc3h1andVek83SjZRTE5oWm8vSGpRdUZoQUgyQnhsUGRJakhaL04rRlBIb2dmN1M4K0xUL1loay9wTERweGhaWUQ3QXJPYUdBdzludDJmWjAzSzlrU0FtQkQxRDF1dHF1SGg0NWtzWWZSK21CL3N1eFJXN2N1bGV4VjhDeUFXblY2VnB2alhNRWF6WGQ2NmUxNk1xZlRpQ3ZSUlVMUHBrbndONXRLU0E4VjZabnlCMGEzdUVEUHNJUXhkYlI2ZG9sdkhPRi9mU2JLQjBVUHV6eHQxbDdTUkRNOWpIbFdaQk1RMGhRQVhCWDBLRlFaczBMRGltMW14K2tnR0Nnc0lwUTh4cGM2VHZ3NHB2YjRFNVE5dklSQ0ZRNUNmbTR2MklHR2NsbzUrb1hubzhJMjZkWW9aTTRtVXU0dlV1blR0bXJNNEZMbW1PejM0dlZGNUpHOFUrVi9zcGM4SUxyUlJtazJDdVIvNEoyTHBUMU5ia2lyUUlCZWgzYWY1NGJRRkJuNVc5Z0pDaFkrTGlJbWdNS1J2dUR2M3crK1kvVE41alFBcWQ5aCtGTHNaejZ5NE1lWm5vaFhiZDBhNW4zMldNb3ZlVkh5WG5KTnZEb3VYZm91ZjJUK1JyMkp1RHQ2TGIxOS8wNEhHc2ZjQUFMODVoY3BqTGRWTmhSYTNXMlNhWjliam84aWFXU2lpYU54MnVnMGFNWnFGeE9RMEczTURweGRSblJmSU4xNG54RmowdUorWmpNRWw4Y28rVTJiVUE1bGxUT1pOa2lXRXV4MmVoTndQUys0ejlFYjhsZEN2YWJMQ2FlcmVOUkJCb1ljaEt6WmZGREtSb2lvNzY1cTV4eWNBbjA4R0pqUk8xeC84ZGFkRyt3dXBBb2tMVTNZd1RDS1pNakNHekpJSUdqOEFoR0NDTURseHhxUXl5azhuZTBFRWxlRkNxK0JYU3BzWHdoODd1MS9ydHNEVXFnV1V1S1NYenJsV3JkOTYzMS9xcVVucjlKaTBkeHNSVWxMY3lrNUJ2ZkIwa2RqRjBra2lNOEFmejF3Z21mTCtNSElndGNPazR1V1JubS9PdzRNSm1lVGtDTFJiSThWVWZWT1EyZDlPZEx0MGdZMXVKSEVNOUlDK2pwR3hERTM0aGYwaHdHbVcvWjR1YjRqNWJBMG9KakpXTklQbCtqMmo2VXBTZVNHbUZiQlorNnV4VWNxYTdKQm5lUmJQTzVSTWdZRWhGTGFzOWdaWkJsbit3VlVUdGJFRU1CVi91dVpZMHVLQ3RkZjNoWFVHeFgveDhZVm5SREQ1N2lqNFlSVTNKbFhWemVFd2J5bm41NXVuRHZ2Y1BzVkw1UXBaMWlZMXQwQmpqTzIzRnFxdy9nNmRVelNMdUc0RndkM216bDdwR0VINGkyNXZaNkI0NjlaeEdRSnNiQzdrTXA3cDlKcWpmNGNWazhBTmFsQ2RvZGFwcDV1L2gvSHZoUXVPQnNLMGZ1am84TnB3cEpvZ1U4dkdtQ0Y2cnNUMUxOSjkrUFNQOElSWTdTMnkxckhweXZlYzhrQnRNTzFyNmozYTVISmF5c0xqL2ZDVzIrVXlVbjBaRTFsUFQvbjBnL1FDSDVmZDQ3cHppYTV4bEUxNzBuek5ydFo0ZjFrbnBsU2c4WXBka2RKbkhxeUhZUlI1VUI4MkhMRFBZN2hUWjB0cDBDN2E4RHRKRm9mb1lRMCszZmhDRlpSWTMwTVRWeG5ZYXRtZ2gra2JyclZkV21adko3QWJOeHF2NWx4ckl0Vm85azZWbllEWHdGbCtTc1J5RWo2OUUwTG1hY2s3emFYVmZrNEVnWTFoTnJCMWYvd0NZbm5RdzZ1anpmVFY5NHVpeDlXUmY1M2Qxc0JFNW9qcWNNSi9xeWZVaGpLMUdiT29wdXJKdmhLNG5kNm1CVEQxTjdVdWgram11MFlobCtndHJsRHl0Q3Zkb0JXamRqbUFzU2x0cWlFanNaQld0OVRHLzJSRzlhQ25xdVB4aHc0WXBxWE5NZm03TlZ5dk82UTR4cjhDd0FuWXR4RnRidGd5TDhxQlJ1TnkrbjBxSXBDdjZidVJDRkxMaHhaT2IxUERHUlB4SXdXeWVENTdkNEtZQzN3eHlsMG5ycS9KcUU0MkdBY3dkTVBpZ0o2VDkwMW1qTVNlYW9QdUZUdjNZWCtNMXBKdnBjU3RWMXpjVVFDQytjVVkrV1FPTkxUNWREZjNMNTgxYmtMVGJKMlJDbFF2TkU5MWlvREhPbkN1dDhiUzZINGdKT0VkeUxpNi9nUUxhdU5POWgzYWpGUk4xVTQ0UlJVc21SSmEwODJMTHd3c3JkU08veTVPY0tCN2JRT3lOcGZLUHNVQlZUVE92dEF4MTVwaE9vRVhHeUNndk51K2lCNnlHeTdZczZWUW1wUGRLRDhjeGY2QmU0aUZtOWNWRmN6MHQwaGtTRVp3ZU96UVVuTFVoQTBqbGtud3hqQVprbGVvWm14VGUyTUgxVkl0U1VacExScnY1YmYydEY1VmNIVHo2UDZsQ2ZsMHM4Q2xZTjdrK2RPVGUxOGhseG1ib1lMNkRaeU43L3hNNGNlenh4Y3V6M1IyblFlRk5wMThVRmVyaEhKTW05N1lqRHEwaWY1N1Yvd2ZxaVZnaWdPTHV4OTZVL2FCNFA1aTE4RytKZldaclFqL1doRTZEa2podzhGdHRINmJKMHorQlNLY05ZYkFTZ1pjcHR4ZFMwMjN6dUZFUk5EcHkyWmZYTm1zVVZZc0FIakFVTWU3U25BcDg4UVUwYkRkaGhkRFZJNHJrWlZGV2ZEVldnZFY3dTI0NnlrVzVUSUJZVlRYWnJ1aEFaRCtWdThNRGhpS0R3Z1JUeGdYTGpjR2pLYjlNRXlmK05CNFY5aWsxSGw4VWNZTjhmbG52dTROM3JHL3U1bVpySnMxdTBoTVVlK1loc2hmTFNlWDN4Y01UZmFOMDBNS2oxMnU4aVRkY0ZlN1NBNDY1ZXo4aGNkYnBkSEx5aWNPaEdLSk4wdUQwVkNzaXVhYWdKa3RKTVFkSHJxeW5QK3g5Wmx5R0dyUVBJeW16ZHk0ZGdrZXplWU9EdWMya3ZYYlIxUUhtZ2VvamZ3Qm1JNUI4STM4cS9JVVU1RXJ1VVdiYmU3TDdmc3ZqQ3RCNkJpTVdTaTc3OHoyYmluSkdZY3FjdWd0aWhvV2JQeTdLSU50K2VWYWZkb0U4cXBIMzBmWkZEcDBRcXhuMWpDUFVLcmlpOGpNdVE4dURVejBieDJOdHVDeHY4ZGl1RFJsWDdWb1VPd0FNbTBROUdmSHBzeTZ5Qy9WSWpNSi91c1E2eGFoRWNTMW4yU3RvOGRrYUV5N05IdFBlS0drN1kyYmFjNEZkcytIUjlCTTU0WVpuZ2RTcWxJYVRIdVFwU3p5ZDRDckVoSkpxSkhhbjV3VGNwZElvZ0IwV2ZxbjJVbWQzRjdpQXJEblJFLzZNWmg1YlAxVVJ1OTJERlRHc1RmRU9YNGNyOFRqb05Tc1dGSkljUTdtOXIzY00rUEV0QjZ5MEUxTVJjK0pjc0d5OEJUSUN6a0REdmRtZ1ZXUTkzNjFrQm1Cd0RyRnRmTzlHSFJ6elR3emFQSzB1YXBnQVpVV2RUdTZwT094MGFPVThSYWh0WHhROFN6UktRUVNuYU1LZVUrTXQzRytDYVh5MzZWb3I0bE05eEVWWm5mTER1aU95RG4zSmZEc0hkWHVvTFlLeTduamNzU1IyZnlTRGNaVU92USt3cWRGODBSV1BneC9VUnZRMDhKSk9hdDNpVXlpS05USXRqaU1SeXNMK2Z4bFJBTzRpc2JaVW1TVkc5T3RPTS85a2FhZTliTDdwTjBiTGYvSkpMamhkemVnN1RSaVNuREd2U2VmSXc1T2tGSy9vTU9uR2lDeDQzcW5rTVJLZ0c4cGI4ZXVFK3dvby9ncWFTc0xVVGErY29RSlB6cUtzOTNvZDZNTzAyNndiWlV2TFhXbHE0QUJQZDBmT2pFUXdrYWZtSTA5Q3o0S2lXNDhBSURhOFpQNDBVUDkzd3JIWWZ5U1VlYTNHSkppWEFJNmdDd3Y4TUhGUUhzeXZLSjJSc29iYVFjK3hWdDJ6L0dxakpXVzFROGUySm9CbVRyd3M1UmJnOHJoT2pIa0R4V2JPamlWb0dDSitaYjlLKy91amhRNGdRWUIzWkxRMmJUK1dJdUJxOHlmVURKeVl0cDZGQkMzUW5nVFdnQU9rNnBtaHFqYVpSeTliTGJiUEw5U1FocjdqYlZEZFR1bGRUU2c5cVhzeHJHL1VwZy9WQ2pXelVuV3d3YXN1THlETnVyT3QzV05ySUY1M1EzT2k2NnJuSFVqcmYyMVE3UGNXOC9RZGc2eWtrVDhwb0VWYTBIZGRUdnQyZVZPZDdaU1BGVWx5VXZyK2NrM3VPTUg0TFdHNWwyRTdVamhtb3BVME5BMXVoT1prN0hubXZ4bHdSbTlNd1dEa2JjU0RBT3ZaaVNIZmcwcFNLY0hLeElGd2lkZ2hFWjVEa1dCOU80d3FsTDNlakZ5TGNNL3FqMitHSzVkK29XaEJGWUdwYXlaQ1dpcW1KbktRQkNBMXJoS2ROc1Fub2lPQVRHR2tQdjk0K2dlc3ZMM2JId2hNM3JJc3JaeXpGd2k1RG95WEYzU0RUSktXRGptR0hzYXFUM2s3dkNzSm4vSGRZZm1yeG14SC9Gc0hSRjBJVG40N3ZtM0Z5V0I3RTVrMXV4MXFibmpMU0x1QTQwOXFQR0kxNnNxSmRBZWdrMU13QklRSHlGb0RFMGlBY0hJRk9tc0grSklkdHE2dWtmUTdza1JCNFBuZHVsQUdIWktTQWF0akloYkZ2R29xeGUyMnhINlNVMWNmZThXY2Vac2RzaFhscTJQbnp2UXBGbExCRUdYdnJSalFOMjR6blRjWnhSQ243elByNjlseFdUUEpRaFNkbDNTNDdBdzJTdmhWbzAwK3hQT3g2MUczNUxmazlBaWdUR01IQzJuV1JtTDdESnpTbmR0cG9NKzZlMkxFUUhrbzBTUzhYTEp4VkVKb2VEWW4wT0htakdLSzNrdGtIRitHclJXQWdmNHZDbE1HQ09OaWpMM1R1ZXExaGptQWR6WlJ6cFlaeVpiODk3NGFRa05DNWI3cVJvRWM0b2puSktCblBaMVl0ODd0ZGJrb1BYUm5XaEcxRWtsWGc4MHl1L2ZNL05TbHlIY2owdzVXQWZvelU4K2NTZHduSFNNUURDQmJqMGRwc2VDUXpzYmFBTXRINWZXelo4YWNVM2xSWDZUUWljUE1uZFczUFRLWHBvTWdJYk83Znl2d2FCU0x1OTVjZkhWQWovdHptSVd2YTJKd1dYK082Sm9Bd2VJeExBZTVxOGJqYnc0eGNkdWdVZzByMFdYamRGWVFra1RQYi9jc0FHZ1p6NHVsS09Pb21vRXhBS2QvVFd1OVI4aFg0VVQ4N2tzb2VDMkFtMVVnSGZqOE00N3JXNUZEY0hMaHFqaUdydTBlOGVuQmpRTWdtOWJaYmFtYVNrRkZDMXBIais3S3ZNcHpNS1QraUV1YUZiQzd5eS9IY0NzL0QvVjRHcHUyT3FMcWtYbTR6aVJWQ3BNTFNoRVpyeklESTlVcHB4RDc5TjY3MkxKWjBURWlUZmJNYnpKRmNWTDhWRnlhVHczOTVKbFV1Y1htaTA3TnF5OVI4RzQ1ZTBwMHA2a1JZYzdJRExxSjM1OWxzcTY4U1l6aDRsbW51N2p0bFJkdCtFdTF1VWZsYVo2by9ydmE2YlRiNTBWT1JqVGtMWStCUThVSENSSEdRUDRvTDNiY3FyeG9vTEdQWFRsY2l3SXA5RXNvd3FxYUM2SHJIWjJCRXY0RGZTZ2pMNnhEZEduQ2pjWDF2eS9hRFFvSThhejYvUmJpWWpsWE9HTDVXaTR3aGwxdk4yYUErUHdqNlBqWFRZSXhyUDZIRnBxYkRob2RhM3dGQWJqOE00ZEVxakRmVzM4ckdhRitkZFN5T2FrKzJxcjdMdWYrWFE2N0taK3pOWVZnUHRUa1BKdElrdGg0ZkNqL2JVWTJqV2UrNmNpbGF1c0JkQXFES2pkMFp6eW1kRG92cjhLUUIySXlYSEQ3WE1JWlI5OW9kRlI3TFpZRWJJejRxanlGTjNRSTNvblB4SlFsa0pxSXdacG9OeStkYkhCQ0tTbWNNVU05eHpjR3kxS3ZWS0M1ditEMmQ1Q2VkRE4wbFZIV2xYM0daNGE1VmJJR1FibHdyM0ZEV3J4RG83MDB5OUNCM3pyUFRQeCs1S0JVNGJVbmJsUWY1dnBBb0ptd0dtck1QN21aeTdMRnFyRUw4c1h6ZmhGOVR0QnY0V2NubjNBN0dJVVE5cHVNRFVWLy8xdFRpRzMzbEF3bmZTVGl6UFRubUFMcEw5VzBia2lWc2d6YlB2TUhabU84d2k3ZnhKM2t3eVhZRzNlTWhUcnROUFpwSG9lUisxMmM5YVRiTVBKd3NBOFRjVms0RnQ3TUZIRDNoWHpDZVFnK20za1p0VzNRUGQza1dndmlzd2lMdmEwak1hOENVUTlqMmRFRUtUOC9MWm9WclFWeXA0N0R1SDE2T1g0MGZiQWVYYW5GTDFTUFpPUEpCS0hkNWFnNlpHM0NjZHROMVZLaDdrSWFUTVNvaDB3QVkzUWMwTU1zazdBdlVEcDgzbjMvWDNOS25nUFRoYVFldGtHRGNPekphMHFiUHNpUXdiaDY5V3RmL0luM0NpVEdSWmwzZndLYW1nOC9aRGRFQk1lUDM2em81ZGc2OWxlSFZ6U2ZLMVpTYi80T1dlanJPYjVMd1NtZXoyUW9UMmNGVHN0VW1yYmthdUY5RVQ2ODUzT0FqRzA5dVJiUzhNU0k2ZVN2d1dtcDVwKzJPbkc4UmsxdlowZnF6QVQ5RjRPdXBlRmF4cGk5bERTa0ptU1VqTkRKOXJmSnRDOXdLV1l4ZVNreEV4eCs0ajllZVpXTkw5d1VqdmdlZHBMaXQ0TndCRFVyMjBFOS9lMm9pVW9VWm5VNzBnNEhNdEFRRHFsRFI2QXN5cjZybm5Ra05odVBoTFlwSC82M1VFaTR3OFRGUHUrQVZabG0rdXFweFJzaXJCTlgzWFRNTE9hL1pVMkRLV2dYbkZaeEl5R3I2SjQ3YU5SRFQwdkR0ZVk3S1lxaFZrdzh2eCs4S2VITUIzcDd5cDkwandXanFnNjJ2NVd3eEg5TUluOGxpbkNhUEU4bTRJS3VDSE1acTUzbFI4RWV6Qmt0VWR0QlhpSTNUTXkvUVZBVjl5UjVvUzQ1MWVEUDRNVERYeWVJRGMxNTlQdUVia2E0aHBOTVRLb3lpRnY4dnhUbWRzdVB0ZUxGdlNYeXd2NXpWL3V0cjNjaGdRSjlnK29SbGpGVjlxdlA1bHRmaElrMngzNk5QNk1yUFg3enkwQ1RKaFdXMHo2RnM4anBXK1RpVGU2cWFHVU9WVC8wNENRc0F3cGtTU0FYNDl6TnROMFlVd016bTl4bUpEZDMvcjBreWdmeUZkakJOTlVla3FQam1HUEhFQ2E0aFdaYnlQTzJPTWp4eDNDN0ZNZC9sT29nKzcwcjI0UGRQSktvZWZrSm1iSWY5Mm11d2JjdktVMDlxOWlzby9lSFJRcGZ1OUlxVndFNkZWVjdCeWJnQVU3ZWpURjRXbGh2K1dBTHh5ZGd0M25xaHNidElZNCtEWTJNdlljN3FveVpqOW5wcS9MUmRod3F0clEyREhFRVBxUmdERTl6cnZYNDRvUTlwYkFsQ0V6SVNEemdXL2ttMXpyYkJpYW9pK3FMUUhKaVF0UTZrZkd4ZWFPclJVREZwcVVWdWtkcXl1WTN6V1lvUDdYeXpGZ2RRUiswV2JnVXhrZGpQMHpwWEdQbEd6dmZtais0L0ZmVjRtNWNtd0M0OXFNeGErbFpYNDJEMjE1TStaVFpzS0JBMjBkQUZIWXVWMVEzUEZ5cTZDM0JWaGhLT0RmTzNEb01mY1dWSTlrN0loZitNanlwSUhpWFk4d0t5ZnJLZCtjM00yU1piNEpEY3BFQkxyQmV4eTlFSVNweHo3STdEWHZvYlBEelNWVVEwSXQrcmRqeEpKSGUxelNSd0xIN09WWk9MZ2FIaWpyTWtlY01ZYzZ2bkhBcTU1eC9MZ2s5NzJVQWtoVnorbFJMT3plbDdodDAwZW5nUVcwanp0Njh5RU11ZGNsK1I4bHczM09taU1XMGlsSUcxRXJJTnNJUW12bjRDREdrNkdOR3k3dFA5K0F3aWVyN3B2VlNGeld6NUZBa0RVQlpOQ1E1eThVaTZKUHZjNGJvR0dMWGhybm5QZHp3SXdrYnlzblJOMnZna29BZWtERXo4UENkRjJTVUoyaGc1ZitBVEk4eWZBRnYzYWlMK0xpU29hRCtnaVVyV3JGVVdVNjRpaDlwamV5aVlIS2hnaWZwVDFSdFRESjR3bjBaSFRJQzM1QVd0eDVLb0krVmtzaVU1RHVudHJKdWtGTlQ3d1M4cDFhY29aemlkYWgyNVQ4SzRKbzN3VXhaMFprWnpYUXpoTmM4bTBhSFJSY0h1Y1B5YnZUQk1pbWZRQ1RIZngra09NVWsyQllaelVXWmkvbUtKWHBIRXB6V2wrVnZNaUZ2TERERC9tT3JqMVBjelI1WER0ZnRoM3h0eTdzbU1nWEQ5aWFVN21CUGpYYlE0aCtjUXdKZi9RUGlzak9iVVoydXlaNi9UU0R2bFJ0LzZ2S0NJQ3R6ZmlCTXFRNmtKK3dxamhuTENvSXdqa3VYdEwzTXg4QnZTSVdXeWVwOFdrZzRUdjltUjhwaE04bkNOWWhnWERiZlJFMGhaSVpZS2F1UGdlMlNNTzd5bVZBOFRoUVBPdDRwM3RqVlI1SjVIOUQxczAvU2xRTCt1ZzdFVUduRkNld0Rhc2o4eXlYbEx3WDNPNSsrcXJDU0s5alRsLzRhTEttdG4zQW9uVkh4QTl2Z25VeElWT2RqWkZNZjF2c2p4SUhKMysvZlBQWVZSVDZ6TS9Bc1lLRll5N3RFZXJ6V1BXOXpOVFVFWW42WHJUM2l0RTlkMEFkY0p4dW5HRkZSOGxGZ0NLYkZBYjlYTnlqcDVCa2xMZkdSQlVwOFYyeW85b3dhcWx3QzJhQmRjVHNJanJXTFVzdmFrOUx0YzFwc3FzOE8rY0s5YVZMcVc0OHc0T21Da0NOdDFxc3NPK0J1bWhlcW1lTW1SL2puVnhjdXF4a3oySWdoRk1uUW1OSmJtTlpuVFdyQmF5YWwzWHp0KzdhWUVHcHgrTFFUVzJkTm1GZDhOUVZYd0QwTWZUbURwYm1Xc2VKWndBMHhHRTFYODRLVzRWcGMzYmFKbkVlR2djditsWHBGZzZSMnFGS0pMQlR1bzdoTEJhUWR0TXNZemxraVU1QkJWN01sTHlMeTE0VndONWdhbW41UnBTWWRud1dGdk5YdGpQQmgyOXR6SXNtZGxZTHpFNDYwTzhCbmxHdmRsYU5uT3BKVUtLTUxTT2JaUjlsRnZFTUxZVXB6WTVnbFc4V3g5V2lYQUR1aFhFbittNVJOcklaRDNBVkF2aWVaWlFJVXhOWGduNVdTQ2ZDbDdXL3poNHRlRFZ1Q2NiREVqQWJZQ2Y4eU8rNGR1VnRrb2hsTk9XNU5JeWZnQzJPZGUrQzFpSXZnY0p2QlRiZ0hPMDF4L2pJejhROFN3alpnQ1hRUDZoMnlHRjRLN1lOWDI3aCt4c2ZUZGc2OTJ4ZENrbnRrcnEvM1VtVlY2RWNXMk1OQWhVZEcyRDhNZVZhNUwyVGVsdFphL3lXN05yQ3JmVGx3VWtDOHE0YjhzSXczeHMxN3FNd2l1aktIT25rRHFNdGhRT2V5RGRWVDNLQk95UTBZUXhLa2pRalcwOUVraFVBb0NMcFNuejBoRGtFVmVQODgxU1pWMGZHMXVKckNXb2ZZSkpvbkIxd0lsUzN0L2VZUGhsTmduQVRrelBWL05sNnRYREpSanRFNGIwckgzQUk3eGVUcHBwaHZuMFVJWmJpTDB2ZWJXVlFrSW5adGxFMHdPdGFmWUkraGMvY0ZwcGF1SjFPVTlFUnM0bTZPNUl5VUdzSEdnRmhyS1gvRGoxYytKZWVwQkxJOEdWYmxjQnVmZ2NQYXh2WW9aWFVMbTkraFQxUXVxaXo3Sk9LUUEvQXZZSk0yYytGQ1ZaN0p2NXhrc2pqMkpOMmRpa1VKNWZJY3hRZm1pNnRzMHdMTGlucFdwZndidkZGRUpjU3B2enBoSmtqQXdreGUva1U4a3FYZ2RieEVDRmdQajhjbGJOdTBUTE0wVHZQN3RTVWYxTTN1cUNUSXdkNjk4c1l5dzlxdFJqaHNyWVV1OVBqdzNHR2FVU0tOOTkwQ2cvaWRYQzhpUTNXWnZlM290ZVIzeGJmTWduMzc3bzVJNGpWNVZCVFVoUmgvUFlMbEcybWU4VTgwZ1AwTno2dWxmN3NIbU0zT1ZWQUE3M0todDBYeFQxTjFEN3hKa3NoWW9jeU9IdVNidVg1Q2xsUmhJMS8xM2NXb3BNNHFsYzlCaXl1V2dRbkszZ3VOcE9tUTRtSHJWTWRyTVJnVDdOc2dRSzhnallDcjdTc0ZKeWpoTEhpM09XejJqSUhhRTFTbUNEaVFycSs0eE13S20xd0tQQ05iVy9vRzJEOFVDSit6SnVBTG9kTHRwRG5oRmRPTWxKRktvVHJKQVNkdUZVUHpUNHVlcFI2ZEp6NjVzeTBKbFZLa3h6QnVwemw5TUdUbGZ3czNqMU5uSDhJYmpzaW5XNjhhdlQ4bXMyMTBmU0E2bGFFZjFDSjNENjR5SFh4a2t2d0swRTNvSmdRZzAxbU1YWjVxbUlNSmYzaE5lajRUUHhjSWhXZUN4Vi9NdFc3bTNNNnB1enFqYjJUT01wbll5WkxEa2lLY2hidFpNMjZVWGFObEV6emVObnZzTzFZUEIvcTZWSVFWbUpMYjUzRUNxRmRncUZWVzNUamxKSzREeTBUZkZOMnlLT1hnNFo1dytmZGN3NldYM1FqN0x5am9BcGlIdHY5Y3c5MzRoNzUzaFhFd1V6TldPNmpFSGF2U3JDMElTejd3c054alA3R1F2aGl1cmZrUHNIaHVqNmtPL0lWdmI2SUlZWnkyYS9DZUZIWnhuUEtndWxqWVNUZmRrU1U5UEdoSDdyVCtZcnJ5V2d6N0gwalE0dW5oSmNzM0VLaTYya0g4RkhpSmlZcG9qSWJtSGJjMnNSMCtPVUtmRFBXSVAra3N3eURGcVBiQXVlSUg2UVpZSy9HbGowc0VmbVIvZXVNN3NycmN4RUU4RFhjeHNDUUk5RmpobDUvOGNRRXljTEduTWI1Rk85bndaT2d2WTRRbWRlYXZVQlBLbFVDUlhWd0RYZjdrWUE3N1lyRFE1djl3N2VoVEdOMmNraWM3MTlqeW1CR1ViR2xjMDE0cHFrUjRoV2dnZmlHWVk3aVMzV0FYcU1wUERJZnkzb016cW9kclh1dEg2U0RiRkQ3NDVJb3lkd2xPcWhYc21Ka2hyRHhNcGI1a1V1N0Y1ZTdEaHZ1cWVaTVRoT1V3SnJKT2ZzMWtGSmg5QXQ1S3Q1d1lKUitaZy9TTFNpeEVWUUdnOTVQVE1kaERsWFdkK3N5eUtpbWJpK0E1SEJRVjh3YmVXOUY0MHFrM29oQmlIMVFUS0ZVaGJidmFTU2M0ckxYRnMwSDlxZ0c2elFSeTJYalhSOVI3TkJPbUxldWdOSU1lVnNkWldTZmVlUlV2bnVIcGd5T0k4TVlrNWZ5b2tlVmY3M29ybThhZngxd3o5S0hGSjc3VG9BTEhoN0VrV2tlWUlWOXF3QVcxQ0wrNWp3VllKR1hRV0xBUFVRSDhlVzdhTE1kckNqUDVUVkMxYkJpaUhLY1k5SWg1MzRWLzVtbm4vVTVET3A4THV4VmdyaWFPSGJ5aC93TGVVSkg4N2VBTElMeFdrWHI4L1ZPb3NFY2g5S3JtbmdUa2k5ZzcxQWtvdkVzdTdQMWJnaHNwdlo1bEJ4S3VIUVJLM0wyNnhaZ2UzaXNTSnJsWmpLbkhQNTNwSDRjcWJsV1dpNXE0SGhkT2YyUzB1MnVkdWhVM3hPeE5PMkhRQ1UrTkdxZlZtRTJUajh1TGJwN2Z5TGcwYzV4TTlGRXVqZnM3UUVkYVJUak5hQjZjZC9NekUwR24xRlpYOVBIdUcweFNUN2hScFhxbzExRGZsNkNrQm1LRWpsYzZNeVJxWXhSeUJuTGhJbHBjUTZMa2RMaENDd2JwNkxId01kUmNJNUo1SGVCME02VVBua0xrNDNLbG1ZZnVXQU9UbXprSy9rWFNGYjhKRC9PaGV1REQ1WlBreHhrOUI0NnNibFJYYk5RS0M0YmR2MlhXSkdrcEJ5VWFoNGhlUjZIVW9TN05wVjlGaCt2bUg4WUZPZFlQbXBTTjFHUE1Pc2xBbHdwMmZXczIxcEw1enFIUXpneHVPbnJrVWpoMXNZTzlyMFlHVUtZZElES3hPS1RUVm9vNnZIMm1oT0h0Z0NFbVhMSHlNaE51S3BTMzRRU2M4c1hwaGw2V3Yvb0h5VW43SVl2akQvYmFvdm5QTlRsV0pOK0tEZ3ByZ2Q4RVc4aVVDS1MzN2pmcERwcjUxUWMreEt5RmxOV2tCU1g4dXgyL28zQWtzWTNHOXl6cEhSVk8rTjIwTGJYRys2ODZSUzF1NDBScXJQZzczZ2JCa0hlZlBNRndmclVLdlVMOW9jMS9ZWHp6d2JVL09UeElyYUtCSkRzUGhodm9lem01dFFKaUJVVlBMUXJpS3pjZEpwQWt1Tkd5VzdBMHBQOUtmT2dId0pLR2xxK1BWZ3kzVEFTUHRUQWpjZ0xWaGRIQ3AycEtuSlpTdGdVWHJNQllZYTM5WnlEMXpIUWtLUUo2Z3dSSElldWxGbjZERW9TUUtiM0JXWnBwV0NncWMxZmNhaENrMEZWWTBrRHViNTgyQkVYUHZKTHd2dzRnbE0zUXNiYkR2SVZvMlRUVWFlZFJ6SHcyVEhpZnZRWUxydm1wZU9UVnNGYzRYcGFYSlh4NmZqOUNTU1lzcWRRNzF5aGRPSGQ0b1pGZllKZndmNHNVMysrWTIrZVdwdGhTeTVaUUxMK1BYQ0dNVGhBMm9BZHdReW8zdDRqVk41YmpuejhqUjUxZ0V0VWJ2UTltazdMSFd6dnRVLzgrZHB0b3NRMmNiV3FTOVBVMGxtV0Eya3RReWg2VmZWdTlXM00zUWdETEtNQXozQStQMkZ1am5MN3N3NjB1dnQ0R0JuV2FGSnpnZlByNXdpbk5NVk13ekQ1UGQwZXE1RTZHbUxHWGNHWEE0SUQvYTdmQUpmU0R6cUxVUktET09scVhWUmNob3VkWktYU0pNb2ZqRDkzYkxUVVdmZTVUcDdkc25DRmlYYkEzbWJ2emx4VkVEUm4wQndDZDBNTXU3WThHa3Jzek5STDR5cVR4RFBoWW14Q3BYRlRxOHhNZDhGY3dPSnZneEprNUc5eTVIM2tlbDY4UUNNY1ljWFhQUnlhTHA4cnFYK1IzZFc0RExSeENpVkF0alFrSVEwODdmenBCZnZQOXBBVS9rNzk5MlJUK3Y5T0NIMWFXYXQ4REdwOGo5SURPVFc4Z0V2SGc4RTRHbkgrY3lDeGFFOC9nTjE1cTQxcktpNzZPM2psRDZQMWpUaGljRW5UK3l0Z1l4OGRqWjA3M1dTYXVLN2t0OFR0TEJNTktvR013QWVxV3lkSHg4aUZVaXhvZFFaZ3VmOWpBMU1WS295L3Q5QUJpZzc4YjhLcFZ3YjdETlVqU3h1T0RMZ0dOalA4Tnl5dzNmeVRiQzI0K0lwNXVmUlQrQ2Znb2hYSVRWNXJzQWhvbndQWUpkZFlhcGVMNVptM3Vodyt6ZnhYTUY0eE1MbDhXcmhWM1YzWitFR3RWRDNOeVZ0SUhCa0ZJcXNBS3ZmUWs1aENDVk9XUDRTT3AzMzl0dVo0bVYyMGJieG8vOXFHRVpYbGN5VWJuOFRoN0JJdnZEaUFjejd2ZDZPOE1vU2NlNjZOdVQ0WHY2cUQ1QnBseWdzY3p6T0l6RkhzdnJkQXNKbTMvSVpKUDRWUXpmcTVMQzByM21QOHQreHVLSmtTNEpES051Z0JrSy9wK3RXbktiVGMwMnkvOFJPRDRsYU5CSElPd2J0a1BDaHdFbFRYM3EvU3RkdWtyMDdVQ0RkVmoyZTVxeGJBQkZESmNoVW1UQzJzcGdmd2I0UDlkVVNTam9vMWdkT0JVM3k3czA2bjhyMXl3WnB5MVVaWXpoYU0vcTVmMlhhU3hidzU3MnhNTmYxTjVvZy84RGpmZGpJODRyTC96SFpCODdoWjhYR2hUVThCL2QvVzVoNjZXRzhmaVlJNndlWGtncTBvWVVWamYvMyt3V0MrRTgycXlnVWwxQTVnZmlKVVdKbldNaktTSmhiY05PcUNoSUhkQlB5K0l5UVNGdWkyclJWalQwYzFGcitxRGhjVW9wQXlGK3hBaEJITVRlSDhwak5XWCt2cDN6eWpmM3dqSFpCNGdXZnNURFpMM2pGN2pubmEwOTVrd203RThUTTQ2Q2JmNDJ2RVZDcUdWKzNieU9GeVpWQ0FiSHpDVjdUSyt3QmVscGx4ai9zNFZycGpNM0VsaTVnV3JnaklTMHhDTEh6QVl3NzNDbDdOK3FYbDhyOEJlbkpXbXprc09YSkRjbGEzeU9TOVZIcVNFTjhGSm9sdC9mMmJLM09QSGt2NEg1VVpEMFRidnloaXE2T1p6bk9XYzUweDZvbVF2WHJqaXg5czdyRXhNcDEvcG1tYmxEbnM3aHAxWi8zRkovbDNmbk4xcFJSUWVrUFB6YnVIQVFDRGp1dXV1eG94R0J6L3BvZUd1R3FhWW1ST1FlQXZwZ2h1ZngzOHBQSzlFV3Y3T3dWVTR6U2ZsQ0JJVGRuWitldS9KNWNNMU9LSWxteE0zanFKTjk1TCtpTEJjcVQ5bkJaaDZUYkdRVk8xTVdzNFNuai9RTGJlY0hHYmpJZUR3WWhRdjB3dEEydmo1UkJ3MTZoK1NBYUlSc3RQVHlqTlFPaEtrc3VXQWNGdjR4eGdocElEVHk5UGJQRXBPZ0FOK1FDK0ZvTEZpR1FPUlk0S21nb2ZiSFNydVluL0FOZ0FmWEgrcjJvdmViWmZicUFZeC96VXhaMGwxczdLY3pldVhRMzR4bnIxdDNBU0lBK0I0SXNqaWcvUGUrd2pGRVlMbWVFWDNUNndYY0RHcVBnVTc5M2sweUx4TnRCRGgyMFNhcUZDNHIrN2taVGhpY3N3QmV6QXAxOGMxYXpNRU5LQWF0QkRsZnJKRkZ4NzN0Y1owUHBSdjNKYUw0ckM0bU00Yi8zK1VtbkpwMTdUTFY3clM0V1ZQSUZRejFDaTQxVDVySzlDYkRIMmdrWUhJSnFtOExkWDhJcmFjNjlLTGpVME41ODBLUWtGdW1DUlIyZURsZWJnNk5ad29VaVh5ZUZzUG1lbVJiUkw0RlMvS3UwVWlxbzNqWjZvdTYvUDNyWUp0STZBVW5BTU1pRE9xRmIwQkFQaGViY3BZRGt3dENvL1BFdWo5Tng5SmZ4MHlteTVpWWlXRW1xb04xdjhDbm9yM0lOWGRIbVk2aVdCYzJGVDYxSzNRTzU3bnNKcnVQU3FsN3lJaUZYVStlYkxaNnJMa25TeFJ5SDZ3TEwrbGd3c0NLbGRhZ2dBVWRRYlREa3BXaXBubytiRDZ3Yy9XcXBGeGU2bUI3RTFabjBDY09NNDlneGh5azlMaVRuQ1Z5SDhKREgrYTJ3VzR5SzhaSHBuaDZ0Nmo1M3ljRFdtU0JTWmtBU280OXZ5UTFVQ2NMY1NBQUk2WTlVY1IyQVJ3b083VkNLNlhkYk9pV3I3REpKV1Y3SVVISTVpeEQ2MVpaVEdqNHFHZVh5S2ltZGIrL0NWY3ZqdlNEUGoyMVV2TmozLzBETm1ieFUyMnJxYnQ2blhUdFV6REZDWWVGMDdVZWUxUmtIQXhGcXFPOThRclFEcE93RFR2b1FWdXZDNnRpN1NEMExQVjIwN3ZxZDdKcnVOYWxKa3ZZMUJxRFRmekJReXNjaVU1U05WYVNucS9aU0UvRHVKaHJkTXpKNE13eG5tWnV6UEZXL3FBRm1zbG42bElZV3FKVHV3c0dZUm1pMStkVHpLMFpVcFh5Z3FrdGpreVM1QWY3M2hzNG9paE8ybG10bjMyeFo2RWxXUmZKOHByZW5EczVvRldMSFdlbTNsV1RtM2FhWE5wNGwzSE9ITi9rUTJWWkdEV3N4UWJ5eGhpeEZqYUE0c2YrclFGL2piOU5CSW5nQTN0QlZDUzZTeVVkVDhjTHNGeHB0VjhJSzFBMERxWEdqOFBuOHdHNkJJSkc1ZHhMRXh1SU84MUw5c1FMVkRzL2hoRmdVeE1BNEd6UTVuZWFXRGg4VW5HeWxoQUNpaWxmUG0zaHdaVUNndnpFVllkeXZ4dGw1cWhZY0VnVlM3WG1PUFFBVmN4ZzV4MHRDaVM5dGtmTVRiaHZxZXRSeVFRQVZQa3FjNGMvRjdCT0ROZU5jYkorZDlrTE5VSFM5cFZoa2xybHJXb3FYT0hZSHgrakErbXRkSU9KM0hEOG53QTdWbENUM2R2SlhFZnBLZE1hTUpuR092OHNxNHVzbmpOektkbmhRV1BycjU0eVdENkl0aUo0c0VrSVkxeHdtVmtkVnFOVWtMZW1YSXNUd0lPMitRZFpOYTJlNkVQL0dxSkhzS3JrMVVnS2tITVJBWllvbVhTTnBUejRsQ2ZpSXd0cUJXYWllaGVnV1I5TE9GaG9CL1FNU3FrS0VUNUxCS0ExYTZwWlRzOTNFT0VIUmNyZE96aGVUTkVSdUFpcUVlTTdXY1BtdnY0cytGRjZobzlwSFdRci9WbDF2TzUwcjhndHIyVnEvbXNxdkRjSXQ0c3o5M1MzaFVtM2R6WjdWSWJudFZadGpva2MvWVdyYi9uNFRoYWhoUHE4djJ2d2srVCs2eUhJUU92R0FpaEN2OGNBNGZuY2hXcjNTNGU0ZVhxb3NuSkNQWGtqYVFEdVZsZnp5dTNvbldpZVhFOUNUV0pWSGM5ckt0RnFNWWl6ekhtY2hMb2s3NlJyUEprRm92bUcvT1ZHZ2NLNmJkWlE0aFl3ZUZvenZ0MllDWXB3YjJCMVg2emh2M1dOMmI3dDhNS0ZGS2dzK2V0UG1MV09NR0hxRUI0dGx1cXVyb3V4dE4wV29pekF0TytOVmw4ZHI3VXlPekVQcVZHaWxjeDNEbWZPUHdkcFVUckplMmxXcmdIempmUmxDR2xNNGpPMHVxb0ttcktUMzdhMm5ob0ltWm9DN2NuVjdyNWVCLzkrL05IdXU4WEdGZE9TcFJFU2VkQm0xUTZweG9hN2E2dEV1Q29tRkJtdEMxQ1dXWExSOVBRcVBBS20rbGxnMXRHTXBYclozbkViTGp0MmF6b2owMWxEMTR2OXpSNEpHQTdtaTc0cCtVSFJEUEpzbEZvT3lDV0pDOVU0ejNGcGdWeUlZREFieEN1djZaQ3Q5a3Z1T0oxYVhVRU1DK1lhMjZlT0JEQTlCd3ZSNVMrUEhaZzFVVFNES3FldURSOUJzdFE5REJISnhFN0x5SHRRL2tzckpicVhhUnVFR2FFTUF5Y1I3UkVOVzAvYzVHMElYSCt2Vkc3T2dyc0hlT0hDZUtycURCaEhUVGQ1RUtoWUNFejZLZjE0WTNQYmJ5SDd5a1JTa1ljVUYxMTFOYWpxaDVQdkFMcnJ6ZW5tVm9pWUgwQzB0cTdHNk1tUU5qOTVOL28rckM1ZDA0eXZkREJYcTI2aERuYW1QOGhTbTRlOWRXUEo3OW9lU2psK1pOM005RGFWREk4dEFRLzk4WjVPeVNFTk1xcUlXdm9zdWYvTThSeG55NmZMQytuTENlOU1FTUlMc24yVzhScUo0RlhCSm1IdGJIWHVkUDk0THdQMHVhSTZhUzBzcnRRQ0EzUUNKeEdFcmk5NWRaZ2ovcjZveUZCbkJtS0RURlI3b1FQZHJyOWpWUEF6TzlzZCtmWmdCYzlidldRajJLRDN6TklNalEyVmhUa1JtRUY2djBqbU1aV1piZER1dVRBWnVPUU82bk43bHc4VHRqMExyVENDTEcrMGx1MGRlY0pNRnlBbHpIM2FBazFXOVVQbEI1eGNlcGV5VEhPakFnbDhtWkJDRlpnVXJTVG1WY0tTQ1lrWXI3SzFyZVVza1d0YXZvdlAzbGdTRTE2SGRHeGl6VzI3cThZLzNjTnRHUG1HK2E1RkJJdG91YnVQeC9yME01cVQyV2trNS92QlMvSTUyRkRHSmJ0RXBmZjN6VytWWkZDZ0VEMW9EZEhrTVVlOVFqVDZBWHEwNWJGbFhLRTlaM3AvZ1pYNlRBZ0FuM29aTDJsMFA1ckQxQmQ0YmR3U2VNQ3NXNFkwK3ZscVFwbi9aNS9XWjdoQWozRDM2RWMyUURnWENTdE1Gem11VHU5WnN5M2EvcC9PbVNFUDA2TG9ESVlNVHBnaTZxQ0hycXV5RnVxM3hOaWczRzZnRlUzZ0srTTlEUk1uWXRWNWh0b1JONTZEekRkVzM5OWUydThOelpBVFA5WjVaSEROOHFrZFY2b2FZWGJXYlZ1b0V6OE1CM01RWmUrSkVRa0JXdUNPUmZsMHlRb2ZCQzd6aHpDQ2VpUUN6d0VJM3JGUU5UYlBManB2MHBySm5QYVJyOG1vRUJMbHRVK2NtTUpxeXRMZGpSaUNKL3c0SWlBL1g5WHJzUDZxK0lrWm1HQVdMN0s0S01UdjJSbzR1bUZhODRaazhlb2IveUN5Qjl1dkdvazAxTW5qUTNLK1JETEFjNkd0Q0JISkl0Wnp1bFJJd0RXd1hOVXh4Vit4RkVrZllYNDVXY0ZuV0xzY3dxVVRlN2lEWitsQzNiRlZHWUxvYllXblZQc0RFNk1USVJtdTBwRHl5R2dkcEc3QmNNbnFBTTdLbEQ4TjdQeDZITFRlRjg4WHpGeEppcGthbHN4Qkl4bWg3OGxWRVRjdlp1TzEzaTNNZTFDVjh5MDZ3b2s2RENCaFpkS3JKREFEZUdtaUgxME9EYml0Q2M2bkxxZjZGYjNBSUhWK2Fvc2hsTnFOdzdubmJmVG4rVmprd0svSURzZlliY1lCd0hFR0pVNnpnWnVTQU11TmEzSTJuRDhuUEVrZ3o3UHgwS1E5d3NFdDNUZzFDbUpINmZLRUFuODhPSk16R1E1dkV3WkhwcHFWOFEycDA2UXBUNXR3eEFBZnZtL2ZxUkp3WjhDRmxta3dQTG9RSWFzdFNEUWZ6cU0wSjNWQ2Y1bWxNUFZyRmR4RDJwVWdDeVdJVVE5UGVuSzRHL29kczJydVl0N3Y1RmFuWUpsc1hLR0s0d3d1UDhqLzJxaGpiT0creW1sTVlLbmxyNmUvV0NrQTQ2SWVTcjZXZ204dE53Q1J6ckZINUZicHFudWE3N3plRU5FSExodGJHdThqUXBJREdrRUdMNlJOQUhvQ3VGcnpCY2REMHBTYmltM0JBUnp5VjBXNHdIRG9kdXZtNERsN3NEVGNnWTNUSjVLZEx2U28wRXBBbG12TDhteDNhK1hRYUhRRUZhaVJKdUlRVHpvZjdLTDU3dTIyQ2RoZ0xkcENzcDF3M2FtVmh1bm1wYndHUTg0ZVVBWXJZdWROK3NlMmV2aGxwZkVITXFTMXRWTWRuQnJCdFUwTjdxM2k0bEFHVkN3WHpUMG5EK0N4YU93bzlIUEwweHEyWVYrc2RoM3RoZE9WTkVyMjBUR081WEtzSDhjK1JDeHBTQ01QNkt3cTI1WklSYmVNZ0tDNDNpOU9kUVVaODdwNEg3d09SL1hhczBUWWp6RVRvNTg0SGoxaURHbDJnVkJJU0RwZHlGaUtrTzllMGw4bjJ4Z0s2N2g0UUVKemwvNDFjWExvQVNOSCtLMEduYVFaeVJhODFRY0ZJWXdTUTZoMkZLZHZxUHMwTE83dStpRjl3UkhaZldOVmVVWG50Qld1Q3JENzg0NUtxKzZYK01YKzFWL2Vic2NONWpYNjdCcWh5OG1lbEovVUJwK09vVG9xUVpxUXVVVlJ1b3pHTlAvT0hNbUhrSHkxK1R0dFhzWVhyWElvR2tSOXFVQk1NV1hjRDMxcmY5MGNNUTVlekRIZkxzM2RHc2JZZ0UweWxMdDdUYU10TmhRYktlUGRWMXl5Z1VHdDF5ZFBvaXZHSm9NSjhPTG9GZnZVWHBicCs4cFZoZEhhdHNZUkhQNWN0ZTJhZFN6RkhITVR4Q0pBejROR0ZjaE5RNGJpbUhDM0R6aVdLbytKbWpPMlIyZ043RTdSdEthWEhveVBLS3FScDhVVWhrMG9xNVM5N3BHWm0ycHRKeDVET29TYXlMTUNOTkZDWTc1UGNOSURWUnFaYlJQRjBvRnVTdm95T0ltZXRvOXRTVkZLQ2QwaCtiZDlSM2VkaUYxZUFiOXdtRXRRb1pYSW1qdlpsaVJ2NElIWGt1aFcvclpIRGRtVmdwMDViQVdMNW5DK2VwOFlldWprTmdac0JteUFVRTVlMFdBTGpVT2VxOXpSVlExeEM3WnJ4Z0c0RkRvWkU3cFhCNlVieUJJZ1BLSUU5dEpVQzlKbTFtQTIveFpkS2M4T3lxcTIxRWJFeEhPbDlYODdiM0IzdVI3Ni85UGtRZ2lpVGNxMFZISTNsWXlTbHNvMFdhcHJlZjllb0dDcFV6MTdGbFJNVkEyekhiUXJLNExjSXhjcjA3Q0ZEYUduMlBOMGFyVmFKck84N3FBSEN5OHhVK0ZhMC9Ld0pYQy9rbm1Sekd0c05nbWN2QWI3dytHL2M2ZTd6YTdKdDd2Q0xOUGVrRGZLNE8yS21hMm1hK3FwWmZ5d1ozcjViSW52WkEralFJNWxUSjNQQjY2SXl6M2VDaG8vM1NPU0pLOUVwOUxpQ202RzRETWF0N1NITFBxV1dPWXdvM3lGNzFETHNnbVhUQWd1SmFIeHV3THVOQll2WW1HTllMODY5clk4WnQyR1FwK291VHdaNVJuaklsWFBYYUVoc0p4b1N0eXgva3U2UERhcXAxbWVxZjNpR21GOFNOSzUwbUFrRk1JTnZYcGdtL2tlbjlJeTRvMVI4d3p1L21xZ0ltUWJOanY5alc2UTRIL0ZCOG9ZVjNkd2c3SGFoZzRqR2dUYzVOTEpSTEFlcWFwV20rcTRUUllaQWlPb3lDWjZ6djRnY1g3SW90MGxaTXBKdTRZamN3a1FEbkVKQ3paQnlXNGY3UElObDQ3SkM3MkZBQXk2RzNJQ3NBRFR6ZVJpZXhEb0R3RDlaYjd2bUdPOHVydWEzYXBldTVoL0ppeEM3akdSS25wUHpqMUdyVkp5QzM2L0dNOXhya3JQTGRVbFlwSFFrM2RveWpjbEthYXd2RGtGbEFCYTFyM1pxL1QxUnZKZGlNbk11V1V0eXdHWi9iMmRacVVySUJUUXJINU9Vd25BYlY1TXA4VUVjWXRYMDNqd3lLS2RMaUNhM1JqVTBMaGVDYW9PTHhES2FScVphMTZKTlBDSHFKZWloYS9jOERmbkxUT2VKVDJmWFdaSnl1dnJ5UUl1YW5tejRrMDd4VHY0eXJXYUtNSXNoaVkvclJ4clo4TTNTT3haay9jN0tWQ3l2SnNhbGszQ3dQd1BBdStWMHVRYk4vNmhqbXFwYThmWjc1RllJTmU3SDNZWnVWdDcwWTNXT20xTS9BM2J6OGlTcExRaFdxZFlRTUdlRkFnbTNNUkVxY1pCZVdLWlpWN3RIcWwwNFoxak12dTJwVkVCRXBkSjUxTXArWjFIYzJ0aklEZnd6YktxMXdQWnRiNjYzUEVKeWVFd1pubHlMT05MM1ZlYTdUTk82aFVpMnE0N3huR3BZUXM2cTAyWUUvenhGOXUxbEVrMzJYcDF0Uk1WTTh5UHFITG5uWDVNaHYyRjdnZmFVK0U5VnlscFlYbUJEYVo1ckhqQzROTVI1ZWE5VlBrTTZHQlJxemNVKzM1ZTlONGJJbG05dzRVYmxDZXhSSVdjdEEzVzNZcU9YU1NwaTMrOXhwNlJIdFBGNW00ZTB3cHIyUklMWlkrZERoalh3Q1Uwek5NM1ZXSVNKa1o3alRBejJyYWxkLzdKZFlnbUdubDk4KzY2UHRka1lOOG53d0FOUW8xbHZRL3JNMEkxUzBrdUJYV1krNjByTlZ5SUx6NGc2MWpZZG1yVTJtMmpEaG5Xa2FBZ3MrVTZ6N2FncEdtZHdBaGQyMHNMb2dLRTE5VythdnZrWm9mVENOYTVyV1RpY3p6WWdmZkdLejZYV2FGelpsRm9JNHVHRFE0bThFemZtaVprbnNVeTI4THpUazBEWDJqUnJ3dFZIdzdsZDQ2UVFNY3Q1RXpDa0JXR1EvOFRJeE1QSmZOOFVkMlRmd25HZjljYzVTa1FySlhxTjRURU5EZ0tmREtTZWVPN1BUWHhZWk5Fa2c0ZmpDWUovdXpmaGZkQ0VRdTdIaU16OG9FNE5mZWtGa09YNFd4cmljSXpIVWxDSmduL0VWY1JTUGxxRmVNSitQVzdSYjQ3SkRTSzJ5a3lnMGtjbFlWQXd5NzZkdW53S2Jrek5PK2hIUGV6dzBPRFFFWHl6eDVQdjZFRTBvWlRLUnEvMm5CeSszQzk5SldlS0M0eitWb3hscExtdm8wdE0yQWdJQ0FnSUNBZ1BQOFBwcTc3ZnNjdCsyN2Y0ZmNEL3YrNnAvWjFSOTl2MldmNy91SDkrM29pdnQ5TW0rMzA4cjZpWG0rMzZZYitIMmt1L2JmVjl2MmU5OW4ybTM3ZXFIdnQrMUd2cyszbDM3ZWsvOUQwOS80ZW94UG5XY1A3Zm9mL3pmckhOK25aLzdmc0Z2MmZZLy9WZExmKzM2MUMrbjlpTHYxYjMvdDlGQytyMFo3NTBiMDhOVXFxTERvMTNwK05RNzlIVm9OM0dxR1FBc1FRR0tMMnhaODFyeHhOUFlDOEhmY1NtTDZTYlFoZDBBd0pQeElqM1RPc0tmbzZQZFBtRkJhakIvTjdkdzRTKzZyd3dGc1lWZ1pvaE5mNVZ2WEdpcDBWKzRvcDN6T3hmYnQ1amFncjBENjFyQllOK01lUkFuNGN1UncxVG5uYkRoWWx4cllDRG9sajloV1NaTGYvSG9zcE5lcW9zY2FqTTFWNG9DVGwxK1pJc3NQb0tneHVKMmZIaVlaSWRnRmllRStyeUxFMmRsbFVZVkV0dWdkcXorTGozTmFpenllZnk5MTcxSHA4QjNDaEMxblhFRS95bE9ObFo5bWpzMXlOY2wrR0lDellBUDJ2cFVhdklrdSt5UjllbTQ1bTlVdXhZcXZTYStjNjFNNHA4N0VONFpDWnVSYkZtd0JUSWsydm5VSkVvQkMxQXFWYTZYVkFyMjRSTFFuVXI4Wllpd2x6aXNZQmg1aTZPK3R2ZEJNby9ROXh6WXcreGx1TDQrWC9pVEVUd3Z5WjVlbXA0cWNIcDlkcWlaaUhHU1lOZ2x0bDg4ZTA3NEIwY0tOcCtvOVM4dVFQNFpydzgzQm9SKy8velN0cHdTLzEyc3RmTDY5SDNZTm1EYTg4a1IweDA4VEFocTR1SFZJNFN1Tmh1Z1FZYkFSUXVkc2VHWnNHRTJyTkxoOFZXV3ZkOENOWTFhNktEejZ3N2pibFBQTmVzYmJXNXZaY0cvSkswMUlzSFdlVVN3Mng3ZkVmdEd0SzlIMEl1dVkvWVlTQnVHSnhCOE1QT21DRmFUUk5KY0d2UlpoVmdLZWJUZTRQY3FyOFIzdWoxUU5URDdtMjROM21FcEJaTHJ5WEM0UjI1WnZPWWk1d2tQVjVUcXJtRTZSSlBkNllEdHFZSmRkQzhYUG5ld2c2elkxbEpLRnpzaHVrditCUFNnRnZrVTdNL2FCZllhL3lHSVg4Y0F5ZEhFYnR3QitDd1FUQzFoajRVdUR5K2REKzZWb1FFVzQwb0FVZUh3S1dHTGxxZ0FQZkh3VGxrVHhuOGJvcWV5dzN3dDZpN2dFYUNSc0xNeTkyYWxBcUs3cm5uR0w2eTM3OFdzNnlFRmc2ZU9RaU5uTHplOHVqM3F1ZkI0MVlWNkU4ZWxaQVJxY1pxNitsNGtXTWlUcEtiaExFclV3L3EwZm9Sa01TQlRIbkhtVFYzbWs5bHFGQUdWQUxZcGY5LzdhbGprc1J6TTVEVDZUSUdEcisvVGRLeDRpVWFPYUF3VXlnMWZER1pXUnh5QVA1L3FENkVOZ1VFS0NXNlZiVnpVSm5OOVNidk4vQWtjNERoTWZnR1Jnb2xucnc1ZUp3SXZKcm1tZ2hKL3dpRG5LNXo3M2JtaHdQcmNmZWw1Vjh4QzUrVldneGYxK003c09kay93clF6d2ZjeDRINnRVV2gxa09BNHVVNS9odGhMYTdFQjUwNTVHZmdkaWhCb2FxUFpFbHBvbFFQaTRDdHlvT0tpVHBDRUJGYUlpbk1qOHpSaWRaZjlCK2hIcXdSTWhoeHA0cUUwRnRDR2hBQmxBSlBtWjZLYThkVXpMdGNlN2J1STAxWmw5bmxENkwyRXErR1crOXZtanpaK3laQWhnZmVPVnkwTk1JZ3RlQ3hsMTBFR1BQZWpWVXU1bHpqSXFPdGd0cFJvSzArWGlMeDZRbVZyOHhlNDdsTndIYk4wZ1JRYTNHR0I1MjllcjlLcHIxVzk3dVY1N1JqbFRvaXZYQ05pUUxWWFpOQXIwbkxoM3QyaDl3ZGpIQlJvU0lGelY2TFNjYmY3MWZOa296eFg1OGU3enE4eTBSa3ZQV0lCTkVOcE5DUjU1dXh5K0FNd2VwSEZJTHFvYks5RW5LWmh3a1k2K2xQeWZrYXVzWk82UTN0RmRqWmZ2QUZMbVhPMnpnNWpESDVaeEFuSXFRaWxaY1RSN3RsT2V4OXBodXJ0RVhyNDZuT0phdFE5NWZOVmVuM1BqOExMSG5ZZ2htL1dFL1BZZlF3WXE0ZEZTYjh6NlR3RTJ1N2o4bW5kZm9PL2ZmMmFzSjVTeFVCRjg1b2NRVkw5MVVVRG9lV0FFNTlXc0JORjZBSjJLNzU3eGdNMXdqWGlVemFiMGFaNzZRbG9PUVpSdWN0Y1QzcnpJbkM0N2J6aVNrN3VLWW5GRllselpSNXMxWThkQjc5U2F6Ui9sUy9raHFVbkY5WTkyL0pYQU9CTWpkZE5ndDZnRGVlNndoMVFFaWtmUUN1bEs0bzQvWWJkbSt3TDYxWUF2M2tzeklrZ0pvNVkvL0xZQU05NzdxSEd4NkI2UGFIWlIxLzZFZ1NjRDdOTmg3eEljcFo1dW1sUTZQOXNrakgxa29GRDhXNEpEZzErSWdCRUlYU1hBRXNkRjBtYWJFdW0xTGVJWlJRdEFibWgraFlCaG1lZ2pmcTBHbnNmWVp3NGxZUTU0b3htUHdZK0xKUHNkU2xBcFVZMG5ZaGRuT0sxSlEwRElha3htK3BmMlk0NFlHT2p6WXVvRFFIV0lWenFXWmhiSkRQd2JMREt3NjFKVllPQm9acFF3Q1VUdE9VbDc3K2p4aVlsNnhIck14WHAwU2dTcy8yNEVJb2FOVTlwVElBRDBhRVQremRGTEtRT1hKNXQxNTdTam5COURBL0tNYlJjWlVVYWRlWC9YZ0cwSEJKYlpuTGVWc0g1T25jencwc3FhNmxTVGg5aWFoYmJ4VkJCQ1YxVG4zNGk0bytsaXhTZWsybWIwc2RzUExiQVVrWlpKTDNZVEZtSE03Q2R3VVZEczlnbHF2dXhvamVKL0R5UkplOWw5MWN3N1BjTVlwK0t4UUhqb3cyWDJRWllKTjBScCt2NDJNOFphaW1Edkl0UktsR3E2RzZXYUZtcmpXRzhNWkh1aTdSVE5vRGNaU2dhWGpFVmJ0TFlxY1J5dkJobnd2a2E5NTdGTW5ucCtlZnBvVVROZU5WMnpFVXhnNmlEMHpRdG5jQ2x3NWlqWUlndE9YYytSVVNCbWxVOWl5ZEYycXROZW50VWFWQ1NrNDNpdzRFMG53bzdKQWtMSkkwVk5TU2NPeE40ZTh6VnVUUjdNZnduZXFMcWQzN0owNktNMGZUM0dYL3Q3T2JrNEVEOTNRdHNDK3A4NHFKelJXelZOVUhIcUh1Z2hZV0JMTXo0RGMvd0w0N3Q2Ukcxb05WWURSNXIxTndQTUdmNExOWm8vL0NSVWpGZVVCVVhUTXZZcTNPYlBkamUzRFFtcGVZOU45UFZFMHpUOStONHcxejNabFE0bnJXWHd1NDNyTU11VllRUkpwMUNZSXRaZFNzWVRiZmZ5UjZqR1VVMFhSZWxyYW81V2UzTTl1TCtzOGdwNS90U3hqR2l2OE5XOE9DSWliMjYwVzZjbjJpYUVCbUk3OXBEOVhtb3FyckM4TGFVeVdlZmYwSzZ2VUFMUFk5YzlXVlRoNVcwVGF3b01aTEVhaS9rTnI4WlBPalhBMEJiNGpUakR5NW1hOFF6OFVPR2F0R0Mxdlg0Q1krS25IS1d2WmFhb056MDNIaGxQL21jbmc4RWp5TjdERDB6YVJOY1lCTnZMOEs2eG9Wdm9jOFo2SG1GcExwR0FrUFlyTm1xTTcxa1dURUNqRG1nSVY2aVRnSWl3cGcyVkhyZEw1RlJ0My9QMGdpTlR4dDdwNzRPTGpYQ0ZjeWF3c1QyUDJCRkVxdkIxZGxUZ3pJVXdFUWpMUVhJT1NZMTEvUlRFcGJ4c3V5SGRDZ2xwZ1pYa3J0V0xKRGVUVnVpSmdpOFRodHNzZjRnc0xIMEV4dmQrbWRiZ0tiWjVyclc1UUo1c1BKNVZ0N25wYktFU09VditLQTFqODhaSjl1VUFsMHgzYndGVFMxekdyTE84c3ZqTFQ1VVZ2bmRrQkZLclFVc3RKbUhyRE1UdUpqdWpmRDhuTmZ0QUZYRWFJaDh3Y2JIQUNwWXdvMmQrdXBSRGtoSGFEcDczVlFxM3d1ZFpZQlNLNERCSUJGMks2ZXJnL2NGcjBXSFBDL0JlcGxldWNNTmloVm9nSWlKckYxd05zRDhVSGNmVzFqZEYxTjhDdXNiNzBDQ2pzYWcwaVZsQWRsYlJqa0wzWDhPWko4b3BxVDlJOFR1bUorL05CNmdVMjlUTS9RcHBMQ0tHNitnNUJIMDlIWE1mNnR3QXVOVUV2a1NrTk96d1k5UjVudjlCcURVa3RNZzErT1hHTjVROWFiQVhXNFJEaFcrdzdZVkxUTFUvT2FNY1Q0K1hwclZTcUx5cWJMNGtuWGlBbWRjdEE4YXIySHhuS01nUmtkUWNGSlAxZWFTWHhZNWhrVGZJSmtqcHJlOXMzazY0enhEU0RuVlRvSkRDTHNoZlZjclZIVE4xYnd2UFhLZTFYdmd5eXdFN0E2QVBGaWRDeDQ5am9QQk9ueXU2SVNycVcyUlhDbnFEWHhsWXJ4VlgrRURRa0xHdkQ0eVJaTVNlT3VvYjZCUStiSm9pTlppMlJ3T0tlNlJadWtCNVZqdm5zMk9nb1M3Rm9ITlp0bkFyOHRLZ0hQOHdHakFpRXJMeUc2U2JDZEd4RXlmbTN1NXhxdUZ1Y2JVRUxhTkZNdURNRmFnUVVqTWpnWTlBcXpLOHdPN21BSExxUm1uVkl3b2JzdU5QVGZCSjdOU3NkL3JRUkF5N3pLSjUvcHg2cHNHdlFWbGdlYkdFQUltOERPcVJaRVJaMnhFYXVhSEt4R1hja3NTN3hmb1g0TGhwZy9uQjZLUXZuOVpnV2VJN1V3N0xqeVNqR2VEYkRaMGtaV050UFdFNENUOUZ3ZEJHcStYL0VHZlRNZ0R4Ujdla3p3Wjl3anVpczFiYjhWSnRFWkMxR3psaU1oZWN1UzZDTm1xeVM1SEthTnU0VTNIa0t1dzgwQWZOMFJZNHR0Z0xpdFFyWGpPaGV0N0lUcTc1Q0VnOWFXNytvNVFxanJCcHdpbWplcU9Dcyt4cTdPWDlCMHRiZWxheTdsd1JJNjBueGovTHRiN3NvWFJvSEJwVGtuZE12R3JlNkphZmVRNk9WV2dhWVI1Y2Erb2pXUDYyOGFrb1FMa1JVejFXamI3akZESUxERzIvMWhVSGxmVkJScUlGaThSMHlqaFJsQW03bStPVW9qSVAxSnl0dlpsNGZCa3JrQ2NyU244MjJUaEZraXN2aHBiK2VFNXNhd3hwdWs5T1ozeWpGNDNKTWJhc3BNemUxeVc3Y1FubHIrTmZHN1FaQi9maVVhTHFPU3I2SFZhMXEvd3ZEQlNGbFVhbjAxc0FsWjdBRXZ1bng1d3RqZ2M3clZ3eXVGdTA5UXNIaG5vcHJuajEyL2tpMEVUSXBkWTNtNWxtQVo4aTVObUJqNnRGNUlXVTBjSENldUlBYXBCem5WNDFTOURzemVldE42VlhEeHdqODR6QUdJNUtSVzBremRCaFhGQmw1QzloNU5JNjAwRTdNTS9sSzl0RmxkQlVqMm8zUDJZd1JsRlhXQ3pyajAwdnFla0tEUEorZUFKYkRYcU9CWmRYMlFrM2VNWklaTVJJaHJOK2UyS2hDYXBaSEdVbW9DNmFnQzNrU3J3WGNTWENOSFF0eHNZb0loZTR0UWF5b3R2UnVYWTlrb3lZbTJCb1BodUVKY1pMZTl3S09BSi9uSjNweTBGczI1dnZldEF3SG04REV0VGxNYkN5cytnM1MrZVZwOEdPY0lGb1NGNGFCUjdzWXVoQVN4RzJPaTFDY0RhazE2Y1RLenI4OUUzZ3FmZ2R0bXk5MCsrTmxvaU1wbFIzd1pVc1lQOHN5N3Zoc1QzYlZZWkFKMzNKaVRUY0NMNzNuSmlzck1TdGc0U251ODZ4OEdIT3lzYjZWM0lCbmZsSW1uQzE0OFpYNGdDUGF0TmswT3BySjJCeldRQTVwS0NORktmcHA5djVuNytIV2FoZzNzV1ltZE5yalJVQmFlYVBZSktxRXhHVFZMSmRBenFDdFNuK0U3N1JXSWprVDN5UjhVNjcxNUpYS1I2cUZRRis4UUppNXhrMGs3Ny9hMkhqcTl5N1ZmN0FqbE9jOEZIb3ZUekJpNDhFcXFsQjYxditqRkZRZFkwNitjNCtoWVEzVDFCSWRRcUltaXZnV0hYWUZhbzRzMXk1cStRTUg3NFZ2N2EzYUg2emxrcmR2QzB6UDJXeUZGN1VsSSs4Y0huRDVIUmZLZ3Fra2hZT2hNNGl0ajJKQU1EZkgrOTBXUElRWHJUOXBpVlFCajlqZXFHQ1ltMVRvSlduNWhmcjJWN0YybVpkNFZqMUhxT3FPTFlsaDUxN25qWWFwRU1PTUYrenFqOE1QRHhqSUw3SDBLcUJNcldxVVhYaGM4SFRuSnp0Y1pua3RkZXV0aFNXZkg5ZkRITlc3RklXTTdodkxpOHY3THZBaWR2K2hmTFRTZGk0TnNzZDZ4RklBZEJ5c1dMQ0xub3R2NmZpYXVUL2lSVk9OU0FSTjlwNlRXR3BKcm9KYWsvamsvVHR4ODdmbmFBSXN2M3hYT3hrUXNmY3RBckk2aUtxSDg4Z28vcEJENEJoSEY5OFJlK1doZ3ZHVUR6OGo1a0ZiTTVaWTFPUktXUktOVWpYdnlkYjVMOWJMcGRaVTVjMzROS1NqeUYySnJCM254MVpCRXM5cnNoZzVsK3pFQkZpRE04MTQ5amY3TnppaDhxTndndkkzcVFiSkZMRDBlQ2tyZUsrV2t6QW5SMG40ZzVUcWhrQ0xTK2dmcjQ4Z1F6cG1sTGhqUzJ6Njd0SktKYTZmK1crSkIyODhyK2YrSFpWRGxzeUNtNkYrS25MOExWa2VvV1k1YXFJanFHeHVzbDIwWGdINHlCczljZFlpNldDNUdxSlFaVFRVZXBndy9MR3h3anE0VEZQMzVucE5TbkdtdVE4YkpyeFJkWjBmbEhMQU93djllK0pvSU1NOW1qWHdFTEtWQTdDZkJoTXJMM1hBYTQ0dkw3RklpS095VkF4SklJelpoOFVRZGtJTlRQSm5iRmFBUTl3cnk1T3pjRUdlQTErNyt0L2E1Q1dsL3FuRGFvMzZwR0FLc3R0aC9NdkNSWXVVUG5BcWlSbG5SalF4NFNnRytwVThEa0xFQldWMHEvdDRpV0d6K3haaTFvQjdPUlluZm4zSjR3bVh4aHdwczVVTnNuYStYb0phek42WDBKOGF5MUpZbFhiVXFmY3ZUcllrWWNULzFIZkZHaitKWlRNdzZwSE5pem1hTEtLN0NXNGltTXphN2xhTktKQkFIUmh0SkxCK1BkZWpXNmc5MnpzRlhJOWZzY0gvQkZuTDdkL3FNM0tzclBPNjQyZ0xpUU8rN3lTT2JNN09uNHU4VDRmWENEMUEvYVZzS2tSOU5SUkRMelpNRitsNTdOb2xnSlIvdEw0dlhLVTlmaVlGaWl6TjhQb3BkYnRNTzAvSTRYMUJqbHlRQUxPTjdCZmxGWlNZOWp6c0lBdE5jN1hNRk1idHNaM3ljeHFEYmdZUDdoamIxSW5vK0p1WTdZb1U1REhxREI2ZjJzbjhNeHFRYytyR3Z0Q3NqelBQd3I0bjN4dTJCd2tHS0MxMkhqc0tUa1NEREQ3TGRobDFzVGFRM3NTMDVINXExYTZJTDFEbjgxblNDTTk3V1NURS9UNkgremUzYXV0eUNIMmZkNVN0U2ZUSmJNV0ZmbjhkcmRhekZUQnUzWDlGeEozRGhrTElWeG1UZ1lpcUJLd3ZuVmRYSXdBSCtJbXBnK203ZEl6YVRYMDlSeVI4OXNhRERBYzkvV2kvYmJpbVMzTG1iaGxtV0pvU291WmhZTUgzZFlMTVNmRTByemtEZktuQXVGUDhMdVhUcWpVTVZYbUx0TzlKdEp6UHdLSDI4bXBTOVRmUy9lVHN5Y2RnRzVKUlBJaG9OMHg1WHJwZFh1cXczUVh2d3FSZTgwaVJET1BBSWxOTWx2MUZDd0dSV2xwaGRhdy9yK0ZzaEc5RE10dGVPRHJ3eHdkaXVZVWxUbldpbVYvQ2FIVEpiblFCYWJKMEJUSUZuY0l0bHppL2E3Qm4reDJmRnZ1bnZWTTUrcXJTbUNvNzRVZnAvTVhOdXVmYytsbHR6TFdOZFhqUlZkdnRwUkN5K2xEdTlZV1JQOXJ4T3I1YXMzekgrd0kxWEtiWXdjckEvODI4R3kvL1BqaUF5Z1JQZjhzTEZmVGV2UUNJN2hJaEhwWW41R1dudWR1VzZMek9DNGQwNk9uMVlVVUZVM0hyOVNOM0tHMTdvaDVNclZ4N2lkQkcwWGZLcXZzc3ZkY0g0UDVZQW52YUluS1lOb0luRTUxK3Jia3NBZDBOUllvcnNYZ1JGQ1ZYT1FiajFKczlhTkxQVXFTOGkwY0ZVUGt5blRZR2Evbk9vRzlCZDB5em82Tnora3NCb3UxMHdKYUlmQUlyN0w4cjROaXpZanRxdWhPcHFMWWlkUlR0c1hBUUNkT2NqK2tCVVFsQWI2Tk90bHd2Y2RmL0JXSmlzRmZmdVNjVFdmbUgwMlF6WXJWNkgvZG9OOFpleHN1YzVYYVJXSnZYZDd2UzluQkl1RWRZbThtQkw2TUpOVnduZE8zV3dPekhOUmlPa2cvbUNOOXVveDFETFo5OTIxeUlPUWZiZTBOYVJidVRnd2ZjcFFPSlpHbnVOSjNuVDVCbzh3MG5CVXBOMGthM1NwcGZDWGNVOWZHT3FvanlqRTVTZWJENVN5UDRQenprTGtkaUxjTGx4eVhKbURtSVN0VGxuZkcrV2lYYzZINThSaFlqckc3V2U4U0lPRGZwSWsrZS9Mbkh3SW5DYjYvUVJkWmJYUmw4eG8yTjFlQVJaekpoVUplMWJYSjY3OXF3SGhpSGJjbmZqU3pLVkRsenVSaDVaZXVyOTBWT1lLcDF0bTZsdlA2QWdyMWtOK1hvSXV4aWdENlVnaTJzL0FDbG96Szc1Vk5ESjNEdDlEUFlqRE1ndnJyaEN2VlFXUXdHUGd3dC82L0pGdHdjbnI4VDJVOWhFVC9HMzFLQThHLzhkeVZ0VlZWNE9JL0hQbVV0aGpPTHM0VktYTldPNTFCUzJSV2VkTEd1cVU4S1lSWmFTaWc1TmpqWWtudE9TcDF0TkhaOU5SV3dJajBjNmtPL0p2ZW9HMXNhUlJ1RWE1Y1ljSUUzQWhsZWNxcElRR3dkWUw4SXVHd1Z1Y0xNUXVqbmMwY0hGUHE3dVRMTmUxRlh3VGhuTUg1VGFRdWpVTXhGYzc2OTdkS1ZFbUJQM1J3QlQ0WHJ3U25vajcrMUdjcWJ4VjU3dkN5cTl3cWNtRlZpdGsrUWtXZDhlSUhoTk5XQnRQeWYvTGdSek8yWjVKYi9uTjBDUEI2aGtHanBXamRQWndNTEFZQ2lQTExzSTIvcFZIRUdJcldqdzdtbGtBY3hhSTZ1VTFCWml2dUQ3a0NKRnJKWkMyWDZaR2RKM0htUk15SmhEN3dkVDVVdHpJVHBmYUFqcmc0ZEtPRnhuVHJMZnRvRFFBUjdjTUEwemdJdDZIVWNXcXZQd0pPbUY5d3FYVkZCcVhtd01pOFE3Tm54NVNIQnZJbFVtOW9WZm1LQTJMNXFEZis3RXYvZWthTEordnhaV1BtcHRZTXMxNWhHUkxlenloRmJXQU9ocENGTXlJYU5LOFBRQkNadjErQnYxVERhWFBmM0tkY1gxell2eXE4eDFhTUo0VXpIZGZZWFZaei95WXR3NG4zeC82MDNvaTAyeWRQMjdPODlRT3ZJWlY4TUJVQ01jczNxVTN5NTY5ZUsyU0djN202M1lIa04rTWxoeXR2ZGVSL0QvdUVxZnIwaGl2Y0NYMXdLaEVJR1NaWTMza1MrMC8yTWxqSnpObDZpeXJKMjEvZmtHdEZyZHZKckYrbm80ekU4U3plTzhXK2VIYzZmK0dmaWhGcU9DYStoekV6eENRbjlDMDZzNnFyMDJ3NCs3ZlkwVzBwVDBHTFVyeDdYZ3FCK2h2SG92dU5adC93U3lyUnRZSlA0S0VMV2ErUkJWTitEWWdaeHJLWEJidm5LV3VlcnFaSHpiRVUyVlNXQXN5N0xCSllCcTN5UElXSGZ0QzNRYnNQZmJqMlhzQ0YrbjMrQ282S0ZvMGJJY3NDaC9RLzRlUlUwb0pJMG1CVys2alR0SWR4STBTUnR6VkxaZEdwaXYyM3JyNTNXQUlhNUpIcFBtMmxLRWx6dTZaVlBuMHc0NHNPeDVBQXZQaWdKZ3AzN085N1RkOEZSY093T3F2WmZ5WG5vd0hKcWpFR3dyU0RVQWVkeVA1ZmFwZGEvb1drVEJJbWVIRFhlUy9DbFpFbzBSZVFYS25FbEdLVlZkTXdxTnlybVY5eFFaczJkZ1FtNlpoOWRwN0tmNWZWTmJUUEViY1lsaFdhVjNFWWE1TkxFbm5nbmdBb1U3eTZxbEszQ2lSZnpCdm0xZmpVQzRhb25XSHFyUDFDbVZTSEg5eUpVK1NQYXc5QVdPTDY2YUd0bkdqbEgyNVVnQjVpQnN3cnZhblROYlFLVU53UUdlQWcxWTZvREh5Mk1VZUJaN3ByY3NKYkZqVHBlQzNrSDVTeTQ4cjRjZk5XNHpNWkxEN0UwWEgwTmNxNGFjLzBCN2hyRFZOTzVvME5iYVd5RFhMVjczQ1hkNG5rRlhhZmtRb2FLWEIrOHVkckpHTkg0SDcyL1YwL29oVnBvb3pnM3lCWGhvRlE1dXA5WXVqWExHdHpZZkw4dWt1bFZERHJrOGVaQzFZRTJha0d6czdzYmNzMEQ4OWFCWXRYYjlPOVJtSW91bDJTajRaWTMrM0FHcVg3ZlpTczdnY0NNVjdnSE9YRGJaMjNFS21Namw1N1VqRmNSQTg4NncxZk1ZMGlBNkI2aWF0U0JmOFl4SlFWaWh4QWFsVDg0ZXhHSVROK1ZLdGUyOFB6VVRVRURPbmZZME5jN1RWWlFpVjlpemdNcHk5bmgzYURET0pFb0VyM08yRXgwRGVhVFMrdW40RW1sdVFVWk9tNTZjbG1ZM0NHeWU1ck43V3pLNXRKZHAxMm80RjMrQU96bCs2VVh4VFZHdjdOenllSmxPRkVrY0ovQTVFSXpWYnJNN3Z1SFk2L0J5WUFjcWpSWk1vcnJLNEcxOXRyQmRUTUczbnNrbWZUUnpGRmRrMCtkbDNEektLU1pyZzhQNXVHdVZJQVp4cVl2YmgwdXpUUm9GVmNVSTFzbVZId0s0VTFwSDAzK01YZWoyNitNZXRTcFQwOUZFYWgrZUJNUXdYbVVSU3l5dHJMN3RGdHFLTmQrTDVBa3cyQUN1NGVDT0Mrb0pseFVWMnlYZEdaZ1N2Qi9VaXJ2azhta1pQejhUTXJHcFBpbG5NRUxDZk9lSmdSUTBXQ2R6enFRbmViMXZwWW56UWxQaHYxa0ZXbUdsKzY1Nkp5MmlackxTVHdCZnI4Zks5eFc3QWRMY0dIS3RIVzh5YWVuc2RSQ3QzNm9vTlNwMFNzUEdLZDZaVDVNaXFkeDczVXpKMFBRNGVMNFQ4UEFZSjdhb1h5WjFxdkJZMk83eENka3VQYjNxdW9nMUNWL21oV3V5bW5Lc05FZmVJelFqeSt2c0psRlQ5STFRRlRZK0pza3dVVDJKaUMyVTN2d1RPSHgxMWN4dDd0akhIcnZydEFaYlVWa0F6eUxybWJOS0ExcjFPM3pGMWlzWWxJTEF4THdkMjZzL1h0ZllVSDMyVjNqNUY5QmR1c0ZtV3RlY0RQU2VUS3AzL1dTRnZXZUN3NU9iZEoydU5IZXJ4NllRYll3Ty9XYTd6WHFHS1Y2VGNnRisxbXhtTDJ5S2FjbTBES1pBaGpyc0dBZ2ErV3BpZGV4aGRzd2hBbys0dDlPKzFGcy9qZ2Q3b0xmUFgyVjQvNWY5MXhWbnVSYWlzaFAvTklUclo1TndTMVdWNGp3OEdmMXRndFhPQVR5VlhtVWxEeUxDRFZlbTRDelZ5SkdwUDNxRE9CY3h0N0lFQTM3ZW9GeUZKSTZqNHBVMGZtQVZ1WTVwaEhUNTJQcVNyQTdoUEZjY00zeHpCdFN2NzUrU0dRMUdBbUh0TFlSZEtIdUJHY3dlWGpXOXlDeU5sWHo1Y01pdWdETnhDN3FrVk51d21JbzN1WUtYUi8rSkhVUkZOVk1YU1BrNHZYWmE3bFZkQWwreDV2VElVenpXQ2FTYjNIWXhLdG8vbzJvM3NDQW83OGZyVDB5KzUxb1NjQmF2NTk3NjdDcVJyaTNZT0Z2U2hMcHJGOGpoMEF0aE1STXl5cUZHVE45amQ3Y21RTUVtSGxwMEtHQzk5OU9ydW1JY2tuL1NWWGFJU0liQlRiZ2pxdUdVZnhWT2hqbTZ5bno4dlI2cHRMdFowMy80TndlYmVreDk4cVhkSWlIL09udEdySXBuK0Evcmw4cEdkSHkxTGtGQitWSlhnYUk4N3hVU29od3lhUUU2b3I2OGhzd3RoMWd6VHo1aVM5d1MwM0NiQ3NwTkViSHpWSmtMeG1ia1U4SHdETUJRSDRKU2NBbTlmamFBbXh2QXpGTThBb1dScStPV1drM2FrNnhGTWlONGluVVl1OTJ3ZU1EaHg4akRZb1didUZoR3lKeHdCUE9QdnNJQWRROHZ1NHVYclB1bUpxcUxRZmtobEtKc3UrTDh4Q0tVQ1NtUFhqZkIzRkpTclRzMzFTdWV6bGFlVXRiNmF4Uy96L1lmTElsRW5UN0lTWVc4Zm9MRmJOVnYxZnVLZkEzQjh4bTM2ZXJUMG5pb3NxWFZ4SG5nUUowZzBhWk4wYkloeEZmUTB2VTN2TjJuRWtXRGsvMVdRZU8vTkI2aFQ2RFpiS3Zybmllak53Vi9xMDRrSlhlNWZjVGpZK3ViMzRuQ2FyYXVPQ1dDMmN0SUt2MFFuV3RKdWt5S1ZvYmtkT1lwMWZpM0NVN2wydHY0bDFZYTVRVlB1a0tPTnhnNVVxbklOT0poZDlsSWJlVktYOVp2TDdWczBRVk9FdXFCZ0ZMNWptNG50QURNRTBxVlBxb25ETm5pVlRMM3RrRC84SE9hM2VMRFJyUW5wNldnaUNNb0RsYU5uTW14dkFJMjJtNFc0TVd1cEljTEJpK3o2eEZWajJqRDJzaGttQS9aZDJsbEdZemg0WGpKck5vQkFHY2psa2lmRXdOQmtCM0lLVXJPbUVaOUk1REZ5SWVkb1RuSHhUK0tqdVNNaXduam5ReFllekRueE9BSStSdEZldU1PYW5VZDdOMDBEbFg3d3BJMnBDYVhyeG9mUHpPZHh1QXNIcjM4aGNObHhwTXk2L1NuL3BvenZiaHA2NXR5YTFTMGNuMXdGWjdmNjFDNE93bi8zb1p0VE8yQnNUTkR4dzY0WUtqbTJNN1pBRkRvbFdpQmRmanlHSnZjaGkxM2RQUmh4Z1haYWthYTNxQjgzYnJDS2hCNit3K0VkKzNFbkxXU0loVG5DT3NwcmVJSWJYYXpJY2NPaUp0U3pzaENGT1EwQ3FhTXJHeUYrQWV6TythbWVSc2g0UDF2OHZrOFBWVjNtcFJVNmJjcE1EMlhvZ2JFSklQamphbUQ0ZTJuZkd6NStvTWYwL2REb0ZIZEZuKzE1SzdjVG5sOXZKOTN6cTVUaG00aG1NakZpMFBmUnJjNjR2SWFOWnlSa0p6VGxMMW5DWlJkUkl0aWcyTVA4Y2hzSnM4dXVDODdXSnZ3SXlSWDZ3TlhJakhhdlBzeDZ5Yk96cTVUblduWHo1akpaK0VYa00waE1ReVdKclROZWcwSFJuQ2wxeldBNkEzZHZvMTBWUWJRMGlQYUpwaU51OVozb0RPMHd5MnVZdURncERmUjQxM0MrbWpZVWJLY2NhakVVQ0NPazZRaisrZ1VSTHRZb0N3MC9mQzJiYVg4bHRWbTF4ZnBVeVF2Y2hHcjhmc1dxYUs4eFdtbC9hbytDaTZuSlJtcGxxaSt1czhVRnhLbzlRbDBrSmdEcWt4RDhxbzFlNVRDQStNcExQV25GUUxESFJpbCsvaVNuTUZBRGVvWE9VdGYzUGFMQVVhT1lOdUdXVUhjQ3FqQU5yWkRyRCtLRHRRQW9uNFpRRFlrUTFBd0VGRk9oWTR5aXcwci92Uk1qRVBlTlMrS3RXay9wdkVRQ1VEc0dIT1Zoc3djdFcxdTU5UTd3bDd0ZHAwa2NNa0RhQ1dkZ0xKWDN0L3JCcG1VTElFeDlPaFRTYkd0Z1E2cjFKRzdoQXVvcGNRdExFRGhJZmxBU2luMklOTUxHUkh6b0xwV01qWFAydXNMdjNMSy9Xb211RFd4RWp6eGgrS1doZmVaVVYwR2ZOY21RZHZrQTc0b0NzQ2ZmQStjbTJuS1V3ME1uWEMxY0ptYlBncFhwbkR2dXRBeERwU0JHV0NCT2NScllsOVNkK25HWWZvSU9zT3Q5dUk3MkFWMG9nNVl2MnJUTVNMUUdXSWFxblMyQTZYWGpSU0tweFkxWDZWU2twVnZ2L1NBWmVIUXVCMTRvREE4Snl6VjVYTU9NUFVxZ0N1Q1lveDVEb2tIL1RUeEJiaGJrSmk2ekNsNmZvb3FETnFoQmNreVNvbWVRVE5OVjlxR2hrOUVVUXd6L1VGODZ4OW1Pd3c1dzhEYnBzeUpremVhVlhKUmRndW1sVFNLbGxwcXJObHZrSGMzZUtpWmVlNXNnMHp2YnA5a0VYUlpLVjExdzZvY0NNVGJlM1RQWExUN1FpSUtXZnZUWTU3Vnp3WC9GMEs4WlUxaW5JcDNodW5WQ3dZdlUzSzBZaERpZC9qS2xRM3BocXR2aTRpUHNERUlsZFNkQTNWSWxiMURCbDZSRW5PNHEzZFhRanRDUm42eUNhL1JjQkxTeXQ3T0gvRXpwZktzTkdsWTNuUGpqN1MyMFdHajFEV3hTRk9oNWJtS2t0ME5oY0Z0SnQ4TFJtS0RJNUhkYlZ6Q2VqYzRDL1hMUk5ZbGlJc3hKZEkvWXkydVE1cDlpa21KcFFhQ2o3bkxnUGFraFlXSEZGYnVyYWVVWlc0Uk4rcHVOM3hJSTZRMjJtdk1SNi9mRG1ReVBYNWh1WGdYYXhJWHdtaTRpbjNzUkEySXZzNlpyQ1QyOEljbDhYcnFHaC9MdjF1OFZsWWpORmxBZnRQbW5MNlNGNFNWSmp5cHpYMkR4SldvVzV5QThrUWVIVFVab3VINXR4aDFRYmV4VWpuaXI4YkJLZGlubkNWZ0VNbEpKaURRc1ZJZ3pIdkhZSG9nc0kvREZJTkc4VWthWFFXMG9nTVdTRkRFQVp2cFBKQVRTSTVXUFAwa0V4R1NwTzVJalVGdEszZEY4dnI5cHRUa3NkVnlHOG11dzd0TWUvM1BvZkFvRmJhMjExMnlyVC9xR0JQcnZaMDhDSU9OMW1DeHU2b3lKQzFucXRlcVcwSlg5c1R1RVl3R1NqQU5PT01XcEl5QmQ1eklDb3FFU2Z6WDk4bE1EUWlzaFlGRXllQ2VkNDIwRmsyVFpWUnhvdXlncWlrTHhPUEdKSHFlL0xjVlc0ZVhVbnJVUnVhN21mU0QzUVBhK0EzWlIwU2lzTEZGdzRObmlPTFBVTkRHSEcrWUk3VGZlc09Pbk5tcDFDd1pkeHpVM2RvYmlOcUl4Ny95VkEyTUJXZTN1VnZ5MXZqL2MrajVpdkxaVU5EQXBKN1RmcUFzT1phVWZOa2FGbGp0dFhvVkxNTWdRYnpJMHUySGUwaE9aUTRXMXFWa0ZWejBxeVRqbXNXUlVwSDBYZnZuODVPSEhWVmZlWmdTRm5PSDVGbit6dlZkYjF2ZzdublM1ZERWZlliWjhybXljUmlHczhzSEFxRzI0Zm1qRGxiMlVSZVdRN0Fna2RaeE5GZ3hUYnRmZ0YzdXkwUVdHSEVuWEtGQ3hsOFRhTEthTHJtYzUxWHFiS291c3lnK2E5dVozL2RPaEdJbFRyS0llSWJWT0l1aUpZd0w4N243MjM4cXh4VWhLTE5NRncxWVBPclZKcGx6YkFDTHdMSkN4RWRjb3hTY25FVjlCWFVCKzYxcHFIaTB6TTc1U1pHNVZ1YlpLWWlVR1RvbkI0SGtnbFA3VFd4aVVWRm1ySnJBalNYaXN4a3BJZUxDaUc3a05ua0ozY0dRR2JudHZ4MVlKZy9VYTZrRkJqQmJlcVdoOGJWMmFSaXBrMWFpditFK2FjMnRxK0t4ZGw1dnU3L3hOWWFwM00yc1dJZk9xRFBjaEF3NzNuSlJORzV2aVZoWExTZE5ZWUJ2UFg2Zm01N3BiUjIxbWtxMWRaMXNLZk5xYnRyT0ZjQjgvaDExSDFNdWFaTzdLR0ljM0xwajRQV2pZQWdLRTVCTHo1SmVvVUtxYVYvcExyUWdPc3lYT1QvTzV1dkMwT1VHcEdROHV3V21FNVZrQndwOFRqclJKL1VCMEd5alhXd1Z4UDcvc3NwYWl5NzA4SnZJQ0dVMFN1M202R0FPU1RxZVJabVptVUI0WjFTdFplR1Z5UzZCN2F2enhKRWhESHBrZVNEb05VNGhBTmcxcE9EUmEwdDB5c3c2TE5nVHUvWjhDU2dna0dpeHlEOW5kMzlRVkdFRHE5bWNQZ2RsMkpSOFlwbDU3ZGR0NWphYnphVHhsUWRNTVdiWUR0cWd4YmV2SStubkp0Um0yLzBPeFplSFptMk1QN3FYL29iOVRKNDA3OXZjQ0RBNUpLblNRQzBlcDdpcG9BUFNCb1dzMWxYRFZ2MkluYnJHbnpJeU5lSmd5OGlVRk1yUjZINnpBMzhMNGYzMytxSjFqb0JHdFRNRlVHcGdXaHI3ejN0Lzc1bDhIbXE1bzdkMGpMNDhyc3dDL2dvaXhhbEdsN1Y2NzZSdG15NUZQeittdy9PRXpIN1FIUkU1K0J3Q3dWVVk5TlZxVEFGcXk0cWlmVFZIdEJGSUliZUtHeDJEMmQwSFlZNmdPb1NrdUE4cmJoLzA1UnVOaXU0Nm9talNwYVZQVUM1VXZPMTBLUGpZL0JxcU91UDRTbVhEVXlkVVFDV3h5KzZyTEFsdUhxWVdaSnIvREY3aEN2Skx2N3JpKytnNzUwdEJXUjZKMEs2YURNd3o4T2g3V2hGNmIrQjlvdHBOME5vQ2h2Mk5lVEpVbXlhbGFqVDRqS3Ayc3V5SXRRMmNORXhJYUk5cGRLMW81aXo4SmFWN09hK1ZyR1FZNzdYdlU2cTdySkJ2ZktNL1p3Q1RvVXJPQ25IL215c1BNYmJ5eHdXTXhscUJuOCtQcmlCMkFZYkpxVmRPV0hHcy9NZURmMHY1VWwvVXhDQy9JRTB1bkllNkk3UklOM05WUmtiUFpGODNrK2oyanRxUkU1M3dQQ21NdFljbzczM01vVWh6UktwV01wYVVPcFIrUXZqRk9hM3M5bDhnZ2pBYTQ3alU1ZnZRbWUrMHNBKzVIN0dOamdpYkNzazZIQVVaTmhIQUZPdkdDaTlPeUNHWHA5R0J2cTRYdENJZDVuQjRwVDZFZlFmY1VIQXRjaENVUkpYcnRXWjdpcWp6ZnkwNWtPbkJMb1ZCbUxGOXJnVXRoWjU0VWcvSTBmaFJCekQ0dUNIczdxOFlmaXlVNjBvOXB4RFdVR0hOZkREcGxydHNhNk5nZlpGMkQ1RWhJb28wcWNJaUJScVFxRUhEdTZjbUE1MFpKcEZuVml3TFVSTUxxQWF6VStua1Zya3BGUUJFYzVIN0NrVVRWMlZOTXFHYlpReEVpOGlDRS93RDhZQUhUelZIRGlhQUJzYlg3YnFZdEFyYTQ4Nmo4bGlKT0Jlc015MnpOdE1MNUZXWWcrei9DVmNUakVKaU9DS0d6cTAzdzRKeXBCY1UxZ1IzNlQ1NUFmUzNic25hdmhIUFVyY29ZRGxFSks0QXkzSGFkYUdwWmlyVHJFYlFiU2krQlczQjhjUE04TWtONmhsQVVXWmp1MkdjNFc2cHpKLzFKK1dReUM3K3JSSkpRRXVLZ3MvUlRlQXZGbjZwbzFFcGN5TDVzUm1SMzRNUlZZL3o2bjZraWxUZlhqeTlwMDR1UDlVMldmVVJTMEg2Tk1wK0Fqa09GdUEvVlhHeGJrUmh1TFdrdjZyUGR5dXg3R0RwMnJ2bHpleFNJTHRIclN3R05LQ1lNc1I2QnV5aithNnd2L0wxQktVZjlsT1VNOXdGY1JsKzg4UUNRaFRTRGhndHBxdlFZaVczbmJlMmhyb1lDaHpGL3Z1Y0JJOHEyMzNuQ085T0FHbUJqclFPZ3VzbmdYY2JycXA2SGp1N2daQjRybzd2UlU2eHdWd29NUk5JWWx2a2UvaWZ6cTFKZlEwa3hLSTdXblJVVjFnejNoZkFORG1oblpDdGRUK3luTHIyRTBwbUtRcllGR0tHU3ZQNExFbkdUY05VbndvaDFOSUgzbXJKN1RRb1kzbHhBZFVNbHhaaEFFR1FIZVRrbE12dTBrd01wM3pjOHRmazVHdXgxN0ZacFZhL2thWlZzTGo1b2JrWHpMWk5Dcmg5YmNKNnhpeEk0cTgzdUgvbDFJaU95YzFhWFFyQlFWWTlmOXdWWk9wTnpqbWNXeVdZRXN3bG9ZNHV1ZmlkOUEvUFppbTBYcFRvY1JibVJLTWlKcjdYb3pjNlZZNjRQMnpOK3JRSndkc0NhRlZHRGpOVVNsenh3WjhlVDU3MVplN2RFZXRGTHR5TXNwM2s2YUZqMFlSYWI4NXlseGVGNUVTQmtqQ3VIRTZJZmo0dlBGSWNOT0phWWZqbkNkSWtMcWNndjN4azJEcmlpMTk4L3pmV1FyakJid0NpZUl6dHFWUFdDRTdsamV5OEFoSVZVN292cnZkakVZNGYwVVVtOWdPSjg5K044VXhJWWZpRXdiZFJLVUlyMXQySENGQ2o1SEZHY1BocXppZnV5U1pjZ2JhWC9ldis3TUpiSS9ZQ1hGUEFubGxSaUJ1U0trWVk2Tk5SQ2t2a282SE04QU41OUl0V0FTckxVSjFVYU9ZM0N1R1pzc0g4WFI3M2xBL0k0dnJISFJab2p4ZlR4ZXFKc1RHMGYxYlpkNUlzbzNyVElQMjlLbmNJYUNPTEduVzJYaXA5Vzl2QktoRm56am1jOTEwdGxUN3YwOXFHZ0kvR3hNMWRwUzJxSkVyS3VUbzV1dXBoeU9jTXpSbVBVVXRKbEI2VTVPRWtOK0dJQmlCeVBJVzQ2ZTNmVjl5T0RRMVZyVmtxRnFaQlpwWXd4eTlKQ0hQWGgrZmhoaE5TV2lZWnQ1YXVUT0FFUHBvanYrc09YS3VQOTF5b3gxT0pRTzBUNmJKTGhVY1pOZWYxUHA4MG10K3c1K0EyVWZvcm9XVGowbWJkaVB0OWFsSGtiT2hENGhOM3BOQ0o4WEFyUlM2S0ZKUzArR1ArNXdVaTBVL0p1WEtybGdhaWFjUklOMFJzaFo3S1U0TS9MZTNZYjRrT1pDdVFkd1hxRGh1emNpVkFDYUpYOUdlSVNubWRySVcyOVN2SHgvdTBML04vWXI1UEI4UkVYZjR4Tk5hUUx4UW0ra2lvWUVYdlZkRis3cW9pNThvcjc5TXZaS01aYmdEMk5NYmUrdXVEVlc5V3BYRTcrVWFlWWlIV2dLdW91QXhSY0ZxMFJZdVJWcGVsVEJxUFJoeCtidnFTZ0syMUFZeTRRcExDR1R2YTRUakhiYVFUUndFS2JFb1lEMjdiUU45MWcvNGl4d3FwZW9YM0F1V2NtbEFFUnBwcDcrU2hxVXRDRUlTbTREdEtNV1NMQUZDcDJmM3A3UlU4MGVrWXhSREhyc01DQlBGQWVyWmJiUnZtdnNkenZpbVF4cFcwc0RENGR2WkZzeXQyREJmbXlpVURRV0Eyam1xaG9pVU52MU15dVQ3T281VG1SaUtJZVl0RGF6c1gwUHBRK0hmYW5FY1B4eURoQ3pqaW44Q0p1dE12cHF2OWl3QVBHUmNaVXVZTHhheFRZVmZ2ZlBlNW9mdDkvNFZSbWM0MnV2RGVZYitrNjg0UXljWG4yMlo5MjBoQmw0SHFyUXA5NWpYaXJoYWxiRk14TVA5WHE5bXd0WndVTVpCdkpGTWZlMnhpUDQrMk5ReGFYcGl2ZWRHMzhSTVdUVHRZWHpFN0c2UlBjNWc0RU52N1VYbnExNjZDdll4L05ZcDBzdTNubDZzQ3ZsRTJXU3V4TVcweXhIMzlaMU5RUlZFNzdEcDI3U1VRRWo1c3FWVGpzeklBTmpROXVDN2VXQ2RGUHErdVZ5YTRjSWdRS2FyNFovRS9NSkhlTU5HR0xpUWNiNk5jdkwyNmZXTVJDZWo3UzN2WllRdk1FTHQxTHhXMytTWHZRZHpXWUE1TVBiNHgyU1EzV0tlRW4zdmxSazFXUEQ3bUltNFhrcjRrbnh5ZURyNGZIY3ZVNnZRZGsvbzIzSnFzcXFlRWRucjhGVFUxMXh2bFZGMFFJOUx1TG1pbVNDWkpvQ0xtaWFVK0YxdmoveUFNOE9ncENCTDZPT2hMa1NlZ1V0Q2ErbXk5Z2wrVnorOVBmd3lZb2diRVdSbEtlVC9QMjN1Qk5sOWxmNTV5MXVVc3JlOEFxQVdCai9KNmtzWnJVeWxWSGVnTndHbXlmbzNJZlBmdTBnQzE4cnptdVUrck9LbWJ4ZXVnYWNRNHIzb2hxdmVQOU9pT1JHQWlmMWVlWjdFeFZ4T0NjU0VWUmRWSW02WnJtY3V6d1l3TWp6dXZlY3VxTWw4UUkxdzJuY0lKcDBSTTZFdDd6N05Dd00walorMWlxdTh4ejdPS2Z5ODV4VzJBWUtOWGFGcUJRRzBEQ25tclBwSlBSM2JiTXlkUHpFZ21DSkpoSG9ScmFMcVM4UnBoYmc0bzE3THczN0VONUE1b2MraUdOeDVFRzBBdmdTM0ovNGVRd0R2Y3hPMkkzaXl1MGtpeUZ6NUk4RVJjZzRIR0wwRU9YaytDN3RkU3N2d21JTkNzZUVaaHRWMlFhSzRHODBvRVF6U09jWGIrZXU1SmZqS2V2YlFOY3U2UzIybW9vOEtWaGR6QVVscTI4dlY5OXJBMWM3N1cvaGhGK3lKdzVXZzg0dXlLS3dpZGtLSVRjYzd1NkxFVXFZQzNVdXlPN1l2Kzg3bnhUb01wSDlqY3FXNTlVU1RjeGRhYjFOK21NbUFIVS9qNG1rWDAzU2dzcUR0Y0lHeXpYY0UyVUhvQ1FLRGNWbDVVM1ZDR2NtdnFLUk43VTE1Q2ZrTVlJSjhwVUZJRXdiZ1h4aHV2YmV6bjRtMCtWVHEyeDNRU1ptekxOc2tMbUIvSzV0ckJCTUR4MmhDeWFlNmtGK0JTamRNOWUrOXhoYmJIRTIwQW5oRlJVZVpXLyt2bDEram5YT0JzcVpvL3BKV0xBSkI4bVVxaEZ0b3pQNVlzbnFCUGZWNnBkZXd6RVRaTHBkeTdWOGNHSXoxNHBtU0RRY2NrWlVqTkVHa2Z0MWlhckwwb3RxWTJBc2c2eDBrem5UcEE4OVNDbzFCMUVJM2M1Y0tLZzN3blJlanJNR0c3ZDh6SFBraWw4WFBIS0F1dHhwdW81UEZKbG1VdVN3RGwrbWtmS1Rva0ZoMXBFRmc3ZHJLLzBkRG9rYVg1RGsrZmJlSzhydGp5cnFmNWl0SDd2Z1NZZmhCcEV6eVhkaWlCY2FGWEpaYlIyWnBMekdlRzBoUWc1MW1kNTMzNVlmVVc0SVJVSklxTmVndGRhamZHMnhKTWRtN3hkbEg1dFI3ZDhnWFVtQjluQmlldmsyNWJ6K1pCcis0QndHUm9iZmtobTl2ckpQRmRPRVJPbVZVdEF1c0c1YVVJMFRyWkNnZCtzb1UyeTVib2lCeG9xVDAyK0szZ3pTcmZXaElGb2ZJVmpMbXRYbDFWc04yalYySlRTa1BQVWVPbFVCSWEvUVByTW5VLzhFeWNxdFNCc1NqN3prcG1jbko1RGNXc1VTS2g1NkorMXlSU3FXenlDclBZZG5QVllSVlZQSThlUkVmTkhqL1JtWFJzUmVoaWZKVi85dzJyTDZmWnVPYjdnNFpUemZJbHluRHBKWk9IdXg1NE5LNnlDTlBGUUZXYlBSUzBWQ3d4WmwrNXozQlNJT3dRVDM4WWluQTZidE00aFkyNjUvQi9zR014dW85K0VjUjlJdDJPL0lzSllYSWNLdU1qK3VKM3dHYzQ2SC8xR0ZqVlJQZU4rTCszS2ZmSjQzTDRkS0NiYjJMdkZxblBvNldNQnlwVWJtV1ltS3hDeFp2S3Eyd3BKQndZZEltUWZIZU51d0RSa0VaMHF0Y09samNqUUNsWGkrMXVKZWRqcGgrYzhXZlpsdUI2Q1doSzdPTU1Fb2V6VHZSZFp3ZTVYa3d4ZStmcmNSaVlRVWtXWFpwQklwcSsrbHBiNGoybXJhVkI1NTliTmUvVmgvYVY5NVJsTmNpVVZzVlN4ZDl6ZzRlT0FYQmxvN2FyaUp3dUo4ZHdJb1lnaWNFZ0FTUEdrYlFyZHNjNUM5UFVHYUs4Snkzc25ldldtd1I3djhxSnRLK3B1bEVyODRoT04zWWs4WjhuVjNFaUJZTVVKZTd1K0QrdTRYb05KOW93TVNqZFJJOUplMXB2cmdWRnBlSCt5U3cwazhOMU5JVEltWVAyaVFRblJ0NTRDci9KSDJFanNUTEUvWlRpUllIT3dUOXVkaHgwUDQ1ZHExV2hRb3IwUDhlTTZKMDNtRVcwSVo0NlVjQmZQVm5IbS9oVmtnL0hoRVZHcVEyVEN1Z003UW1hK3VkQlYyT2l1MkdVQ3VWcnhjc1J2NnRab3VRWjlheUEwR3ZoWUJFQ1NmdlVjUDI1TUttMU5idmU1ZGNzVm5IdUhjTTFHc00wQUVoUitpRUlTZnl0R0JZZGc2b2ZuL2R2ei9NYXBtcTlCSEJqUnB6eWhSSU9vZEVNRFFRL2ZBR09XZllmRFptU0ljVXN5aGdidjhTNFpXQkF0c1RCQnF5Y0l2UFIyNjZ2R3BJa3JIdUUyOXNGZk1pdDkxTWM2YmQrbUFDWjVRdmtOOHhLd2hiUGNOc05DZ3lrTGtneGpTbThQVHhTWEc1YTFwK2RsUmxiMHQ3VUcwTGdldlViNEkreXVJTjZ1bURoTVVtUlZ4clZmL1ZWNlo0UWE2UENLWVdzbHNPcnZneVBpdkhoNFN2cVhvNG9zenRTQlkyUUNscXVIL0RwazlTQVE1WjZMUTdnUmZocFNjaGZDZFVDdWNJNGgxWFJIUDA2NjBLNWt2YUI3N1JTWGNiU3RVWEFvTlVKNUpCWU1XMiswUnJwcGVMejdTdXQ2UHhJbWNRWDlFVGQ2SUhuZmNnMm04QVR1UEVObXRodzdveURvbEl3OTRyS3R6NndxU0JBaklZemFtbGZScnV5ZnI3WGJ0M1lIVTlEZjN0Qm1jczdCUllGYnpqTGt5TVZZTDVsSDAxUGFxaFdZRXl1YUdCMmllZWZxelVYK24wOE5mR0hXaEYxbHprdlNzaENodEpCTWhld1JFWWY3TFpCcjcrN1B4NzZyRDNsSUVEMmVuREhIOWRpY215RERoRGxQZ0FudWQvYVNpL0Q4N3FwNGEwWkFoMlk2REJpQ2xOSUNtZWNlYW1FWFczVy90dU1jNEx4VERYbHBRc3RlUEUrODhKMElCRmlYaVlhMVN4NERDeU5JUUEyai9ibU9LeUN6UzNzKzdCTGxodkVLTE9YNE5oUEp4QWtrdEExMmFJRUtmUUpHZDFDM2w1ZjdDQkFES2VPNUZhWWVxbFpWak93bUFFWGUvNU5SOXkzNmxLVFkrK053cUVTY2xLL1k1V3N1QmRBWHF1R2Z4cHVPT0RHaUNROHU5eS9rRHV6RExQT2wrbFBhTldlZU9uR0NzcVdBOFdiblFETzZDMng5MGZqZTFTMU91eVNKNERsSVpWaDZZY3hXeURsT3d3Nmt4Q1p4WVNBd09oVVU4aFJuRnA3RzdqeXlSQ3RoM3NTRnU4bFA1ZklDNXJnZVpnbkVhc2dneUlaVVRscFI4dC9PbHpOc3RLZVNMenI5SWpXbnN3V1RBL3VrQkZnaVBDZGxxb20veHJmNktGdm54WTlFTmpZYmUxenhodWlZUWd2TUh2U29FR25MRHJrVkNNMTZCeWlkbkZBbFBia01jWGpHdnpXcFBBS3lTVWhZVGQyUXVwZWt2SGFSazR1MllhMlNVcU4xN2FUWjUrMGRiREhFQUV6WmhTZ1J1QW9pZDhyaEZYS2RhM3MxSkdWbWpXclpRMlBwZFNQWnBueHdJL2VJbzExcjdpTkZyRndmQ094em9IVTJlSXFmNE9mZWZDWkZZMHBqMnh0U21XUEpETkRHRnJ3dVpVNC8xNmU4V29OL1llMUJzNnZIblVhdHhDUXM5WDk2dnRHTm5PaEdFKzd5T21tTm9XbEFRbGNwZHRZSHNRNm1TeWdaTnh5b2ZPdjI2SjB0S01MWXFKRUlUNVNlMU90TldSd2NMQTJpMWhIUUU1TTJjalhuYlV5b2xOMUp4clE1MVdOeUdwT1JkRmRmSEl1aTN5NUh1MThva1NVak9heFlKVTNDNG1ac1oybFJyRG95U0VmMTJDeVo3eld3NHpnelJpeUl1dW1nV2tyODlzZXN5SDJFQXR4VnNraHNablVmdnhNb3Z5S2VrOUNZS0hFTFZ5TXVuWUtOUDV5NVFUVjFDaEdIUlVCMFVsZW1LRURMSENZYXorUnpmSmoycEhxT1BWZFB3cDY4YXNac2RrTVJuZjBRckJvOTZ5SStzck55cHU2OG1ZNDRZL3lCSk9SK1RxY1JmbXNxTllYeUlqelFkQXFTZm5HWUNKQzBrWEdlYkVBcFRQY1JxaHo1TDB0M3ZpM2NVclg2NkdxUVlXSU9sUFFPRkZQd0xnVll6Z20yK2VveVpPck1CdkNlYlQ3Z2p2OVJlMXRlYzZhbS93UG4rYUtXL3h0bzQwMDRrR0pZM0JsbXdtM2lGSnl5RWVKN3YrbldZZWtrL3U3OEFqcGdMUFQ1NTFqaC82VG94NjdUQ3ZkTEw1ZGRlOUNBeldzWWZpRmIybHhZUTd2UitSLzVtNWdlcGt0WU11NkVqRTlRbmUwaVVwRCtaWk5aT0duTm5PeVNMWXYyS1FmS2xjbHBmSzhCM2l4WHU3M3NoWllwb21TUVgrMUxhSG1SSUVWcVJIeHc0ZVFjd0wrQjJmclVkVnNrRnFvY2g5dVRRWGViQWdvRExEQ1J1TndIQVNLQUxmR1R3MmdmTmFLWHhPMVMyVkxSdGV0cWgvVEVaeklXZEhLc1hkY0ZoK0F0eGEwMjV5T1NVcUY1dGk1N2I0S04raGY1MW1VS29RSEJlZmI2ZVFrVG8yOGZNbGtDaTQ0bEdxMDF0T1p0czV6YW5yVXVQcllGOFRFRDJBZjk1R0FicTcveW1RQ0JzTytCK1dMTFVyaERsa1EvZXBZZVgrUVdMMGNMdWVPTHR4ekZoNi9TdVhMWTFMSzF1U0pnQmc0emc3a0p5bnk5Yk82YXRpTC9QMjB2eGxhRWYvZjcwY3Bqb1l3L1pwN0VYL3Q5NlNWWjRiL3FVTWNzL1lvZWdGL0hsaHRGM2hUbHhpUWxUbzdoWDRPRkJPQnJIOE1JS0swVjNEOG1NdDdQMElWZGJJd0UrWXBYOHFnVG5hblo2TS9nN2QrOCtxWkxhUDdQdXZkUTlrNkRKU0hENGFnYStFK2xBeHlZVm01NUdSSTl5VUJHc0ZYVGE3Tm5mNTlFendPLzl4dnBUbmpObWp3cThDN203Nmh2L1kzdm9mS1NhMDdvTk55V1liSC90cWlpWnJaYVNzd1phemhYMHh4TC9HRmtYcFFQYnJxb1FOZEk4bHZJWG5MejZxQ3hIakxKRG1tWXlCMEhtc0dPcUpDT1ZFT2dGK1U5SDNyQ2JWcFBWZW4xYk9TUWdGTThKMmcremZHU3NmdDcrMDRlUW1HbTZEd1hZeXkzcTZYbnJuN2o3T21XUjlUQ2s1a3FhQkRuYk9nR3FZNHoyUmVQMW5GNDkyVVR0c2RVaWt3MVJ4TFVvcWhhT3M2NXEzM1lzK2gzY3RsbG9XVmczZ1hmYkdWUHladGVHNUFVbWhVVWgvdU9BYy9FNGhvaXBsa3NuQTRkVUJDaDBzK0Nhd203OHNwWTF6S3ZnRHQ0VTA2SEtteEdqUmRFcWlhZDgzekNyRy9xcHNEcE01KzhldWZEZTNtTWd2YXBUNmtGUnN5VDRGS3FxdHVBRngxVHNZOUxzK2dlTytyQ2RZcFViRklyeVZTdjhVMlFkdjlwUjBjQm5ncDhnb3N5UTd1WlkrckFRQzgvT3lRQW41NmV0S1NMMWR2bmJ3VVc5eG5wcEppeStINTNVRnhESUpCWWRYVFMzRW4rbXFTNTcvd0w5bHZoQmdFY0FQU09tV3Y1Rzk4V3daLzMzSHpqbWU3anZOVjVXZWcvQ2o2QUVMMXR5Z3AvRVN0aW91TWtndytaZ08rdVp1MXFoR0duVUM4WW5CVmVsay9HdkMycTJNZGxTYlBWUTNCWDBWOE9qUnh6ZHR4S3NUMEdsUGNoa3VEWE1IakxlYnlLWmdQdU9wUVByZVRCbU5ud1NVSjUwKytFbXBFSkFSOWZJSlpaMk15MnR1ZU0zM0MzNklNcHVGeFJaaDFuNDlCWTNYVllSaFZsYlJyTUNsTkhtS0RUTDZubktKZDRIVi9GWityYmplNVE2dk1OR0hCK0NQVUlIblFIb0Rlb20vaXNldDBmOWxFbVB4SXVjSVpnZXNaejJad1M2VTZJdi8zL09KN1lpY2VIc3hob0xqeUVXT2RHdkowVkI4YVZmamJJM0pZYWxXbUVRUHZwa1FSdWg3S2kyVEtQUFBic1hSeklvMitBSTNiU3hKVkk0MUtyRHZiS2RMeTlrb0cyeWM2R25nV1NlN20wVjlDVVBnY3doS3lsMGQ2K2Z2cHltbUpPTTZSd0VoS0tyUm5PcUlDUXRrdjArTVpYZTZrbDBUTHJvM1kwMGxwNk5RbXJLcVZGdjlWZXdEVEE3NW1KcldZc1F4TFluZ2ZLQXZzUkI2N3VyaGtvTXF0REJHSzhyQ0Z3blhyeVVZdVd2Q3pWY3JEazNBTEJJaUlCaVpmRzJhSkRBb0lSdW9Sd2RVdnFsZ2lxNStxbDVWZ2VtTERYRFIrUFNTK0Z0cFk3eTlERktLMGdtbkZSN0FoS25FN21oQkV5RjBRQUs0Q2FUMVJ5WWhFcXVjY3N0UnFXbHY0TUNaQVVpeUxpWllOckE4WGtuMGw0OHk1bWhoOGpIMlhRWlVrcG9oQUlkOVo4N2lkS0VJSVEwUkhjeDZnakZ5UE1PQ0p2ZXg4anFPV2J4UU9yRTFtVko4eDNVZ3Y0YUg2ZU5uUDRMamdRWnNhQ1FCLzNUa3prNXRFSUY5OFRUYmlZRmswUUd1S3kxUmR4aGdJQzl0Q3RJb3F0Y3JIaWhhMmdJcjdaMlFXRFZheHpYVXFNMXhzTnVKYVBvakdrK3RvSkJQRXRRTGtMa09mR0ZKNTI3WENwMzIrd0kyOEVXaE1QZ1g2OXdVd0x3ZnRzWWpQSGpwdzUwS082Ujh1Wk90WlB2WDBNenV2eERWUkRKYnhwN2F4UnE3TzBRalNFTnhxOXkweERlaThQcWJKUDVpYzQwVlgrbWg0Vkkzdmlzc1RjWExuRzNZbFY4a2xIQ0IrcEVDbDBRd3FzMEpqUi84MHN6bXhjOVBXaWlhbUhteS96ZDcxTnpaZXRRV3dPT085QkJLVm5VYmdSUnhRVndnc2N2Y0JER0V2WGkzazRGT1hDRXdOQ04wU0lpZnBLWTZUUFV4VmRjdndndWd5TTFVUUlMcEpSL1BLWWdHOVQyaTRJNWhpQnZEbzNvTStZKy9kYTZ4TGJ6dk04b0psdmhUeldKM002SXBxbDRMT3NlSmNKZDdZZUs4ZjFpcWlTMU1VQW50ZTVPckZpQmF5SUpzNUVHeUdoekZtaXJwRVUvNEI0SFRHYlo4R2ZDaDU4TUN6cGFoVHNCZmpjRVZheXdnYzRYUVFkWGJIWlJLVjdhdUx6bDVBOVBoMldZV3BRaVd3blM4U24rcFlUU2lYMXRzSlJheTg1a3RqWFNGVGxuU2dscDltNGZSQXBhYnU5VzlFUFZLWk9zbE9SZnlGYnlqRndoVmZhZVJmakJIWTd5eUNxMW9QNGx1WmhHcWpkcmk0Q0ZxNTRCVmNrQWpoOXJDU2libVNLdi95SXR5YW1Xa3h4ditQOThWNm9wREhxVnhwOVYxTXVlZHhvWm1IWlk5RTQrUkdBYkNLa3F0YnBidys1ZUVMZ2x0MjVzajVZY0czNWExWi91dTdyanlsTXVldWg5Znd2ODJiczE1eVd6dkhSUHpoMjdlTUxGdWp2ZWlGUm4zQUZ0aWFSQ0gwYkZ0N0VGVlBWUzJjRTRkMUdZQjBaZUV5Qm12aGUzREU1TFlycEpBU2ZMV0VwYW9CbGRJaTV4ZFB3YWxsMTJTNW1lbzV1UnVpZ05reVl1U2JEQjh0QTEzL2V6NTNPRGM5RlBGUDZhVVljc0Z3RkFFb050YndaMDNyeHlvMmpHWVc4cFpWeHQxWDV0a1RTRmRrWWhCTjJLVTdXSWpGSWNyUUl5dlliMFQ1U0tDb1REWm9OclI2aUVyWW55YmNxV0ttdE5oenNHS3cxM1l0YjZqL2FUY3RKU2F1NGs5SFBVazUvZmxPT2RNSXltcStWeFpaUmQrTEZlUDZpK3Q1RVlZS2tmYURmKzdPdWs2TzlRZFhqVlo2NThUaFo0VzFic2paZlQzbzFrMG1BOE1WeUpyMmMxN1N2SEFMOG56M3lZbkxVZ3doemZzR09iYUEraEJHSDAwYTc1dG5GbUJKOU1wYTNjYXZlYjdXRkFLSkRnWHlwTzhJZjNVekh3RE83dUpzaU5IajZMRUI0QlNRMUh4RGVKUXFld0s1NGpBUTdjN1dxM3Y0M0grdTdQaURBR0Z6THNMK3NIeW0xODA1cTdLdkJIcHFVU2FxMEZ1U1k5TlFSTEhqUERqOVpaQWpVdTQvdUhlR3kyaGsrdnkyNVkzeVA5c1NiNzRPZzIrMUljSHoyTzNrMkQ3N0pTR0owbUV6V1RBZndJRjdjNUswdzkwQi8vZ01wYnV5SXplL2JzYWtUbUI5VVkwTUwvQXlBWktWQlRZMGNucmtPaTVBSWNkZlV5b0h6SHBsdTRaM2hlZW1qWTRsODNwak80S043T1RkeTZFbjI4M3dibU5aNm1Nd0NHaGc0eHBzTldDa3h0UGxhU3Z2RXVTSXpnVEs0S2kzQ3JuZSs5UlpFd3RUVHpWckVLaGlac3RkSTQ3K3FpNCtad3FQYjR4SWNSYUwyMVoxV0NHOE9NeUJ5amp0MGJLQjJUTVFzcDRtaXFhM09hU2NWVTgzV1BBVmRHbGU2MS9FVlI5d2RoUWJFK0JvWUhQSTE3SHVKQ2JTbEtPYmF4TFR4aWFvRkVLZ0I5TElXUnQvSE9iZkJPWEpwbnk1Y0tGdkpiaDA3alJmOHVuam05aC9zaWtKNHNrZ1VnTHU0enF3ajFTTjZxOHVZNEtKRUluNkZ6RVFnQzhDQ3BFYnVTUndldFVmRzBmR2prNmt1UGUwQzhxVHBLL1E3UmlkdndPY1F5eDF0V3JWaWpya3hNTzhQZnNVdEVsdUQ3VjdUUzUxNExQcDdzYmZaWWdycjY3Vjg5UnN2ZWN1UHdKbUVRZ0tLa2RFQXVSRFlqbUM1WGtmYnI3M0xTNTA5U2FGNWdPeWNtY01vb1hNcnZCQnR0eU1Zd0VVaE9QNUxZd2s0WXZ0QVd4RWp0NUVlYjFLU2JTeGY2WXRBMW1zWG9KVGhFVzBqNW5OMzRwTy95eEhoSHorUEpwNWx2T3FqbnNQaERBWDhwWVk5WUQzYWNOSVFDTHVNOUxVMEViQlB3WHc0UjlHMHF4TkV2MTZDclRHTHkvanp2NVdKVXhTVkZoSUhMaE1xb3AxbDNpZmx1cDkvRTF5dDNBRXJYRU1jRXArNWgvZ0d3a3ZVNmlocHhCc2R3cWNpek1KdSt1cExoQ0RlL2pUREpsaUNKa0dNTjJWbHZvYlV1WDRFM1dsSzJDZnA3N0E0bUJNYWZKTnM4TnRmaHNYckFqMUxGenZHZlJZMGtmSXhFRXNNU0YrNDA0U3NicUlZTUFsRjJBTDJaY25pMzd0b2RkQ1kvMFJxd3hLOHNTRWdwUGROY3pWSFIvbWFycytrekhyWXUzakxraUtWK091MklKc011RlZWZWliSWI0dFFmK3diTTBNRFIxV2JNc1g5a3JDM1VVOE90aGxQQlF3ZEZVM21xT1VBeXpnY0hUa0J0L2djTzNkTzh2UkkwczlnT29nVjl6SzNmdFJpMnRNUGdaNDJPS1FmaFo3c0NYN2s2bnVvaVNTRVFFa1lZSmVnL1V0eDQwbkoyelNSMldkejJ6RzBIQ1N0bmdJZmthSStaQU8vdDRaSldSL0gyUHlkallJVjd2WDlWZ1VoUEZ6bXNlQnhXY3JhelNnaUJQOHZ6VnJWc0R3N2VnMHNOSVBkNFlpK09mUDkyNnE5MzdMMFdEUStYQXVpZ3FrbmpwTS9XT2ZRd2pxQTJaNXdXM1RlWUNCVEl1K1U5YU1HTDdWMlRqQ0p3Z2VXQmlCeGEzZTI4MjZJd3hsQ0VVT0lNa3lVYk83VGovUDhUZmpsVlcxcTJSalJjV3k5bFhCVTVTcnJLK21QbGpVcU45ZjFNUnpLQjZRa2VRL3ZYQkFpdVhpbHpGb2l1TExyV2l0b1hLY2p0c213RVNmWDdjdGVBT3JOT0RuTXliS1pWWFIwbUgreS9uUHZZYm9tOGxWVUlIWldURkFBR1ljR1YwYWRFeVV6bGVMb3BodG1POTRYVW1GdEJwZTFzUmo1Y25BaDBQWndKUCtBRkV1T2U3SjNFZGkxU1dpcXBIdzVMN2hDd242Y2VTQUlLOU4rcWdMdTNOdXB6U0d4ZkE3eUhlWUo5R28wK0IvMnBNUG9zemc3MkRkM0t2VUJQVGdiMi9hMlF2SWd3eWlObzB1T0VVTjdPRGpOWlBSK1hVclBLZXpXZXFIY1lEUHJ2K3d4cGFqeDgrbDFWS1V5Uk1MQ1kzcVZXNy9LeXZEVERRamNTZ3NJdjdSVG0veHRxTnNmK0V0UldkenhxamVKZkhDQjJQWjdveldhcHpWeXhtM3pFbVRZUGhSTmtBWG4rdWV2L0VWaUdFdDB2VGRrYXhpODN1UGdCU2VaQ0h5a2g0VUN6N3V2VVhkVXBvbEVSUTRjVTVseWNLRFAydzBwU1poS1crNEJmRzdXZHUvM3laNkVrZDQ4dWYrN3owYm9ETmF4VmxGR2pJbE84cDhGOFM2cnhJOCtsVmdmZU1wVk1jd1lvZ2F0QXVnaDdQRmxUMXpxaHRZMXVpekM0dG9TbzAvck9lbXN5b09USlNBSFhKcVgyYU9ZcFBSNlFWcDdVQXpRWmV4OXc2TFh1aFJqRld4VnIySmUxUVZpMWZuL1RlUks3aHBscG8xNXhocXAyRXJwQ2FHLzRqQ0hEcU5XdW5xUDdLOHhSeXVZekJSei9OU1pvU2h3NWo5UysxRUI2RVdCSUU4RFRvSytxMEFudk1jZGJnT0c4UFpFWWNlOWVHYWMyWVU4RXlyV0ZpTzF0bmcrZ1lMNHFoZWNvNzNUQ1JCTFl6Yy9yKzBIeHN3R29lem44c2g2c29LWll6ZjAyV0xZeVdoQW9BRGtGL3JQTmgwV1JaUGhyTDJ6VEtNbTJveExIM3ZQTkVWQW5lOHZJWWRQaHU5Rkx5Vi9jQ3lKakxlSXNvMG5SV3hublRMTDBmRFRRVjVBMk9JVkFlWUtqUWYzOTdMWC9IdFc5bnhzTnVzcGhKYlkrY1E4eFZua2pMS1lkRFMzYkxnOHZUTXJEcVNJZnFKeEkrNkpSSjM5MklTektITmlvRHpYQWVDRFhVNFM1YzRkYVlreGtZNkY0VHNLbjJFMjVPNVZBanFTZ2VtMlNvVEdidWQ5bGUyL3RGY0VCb0NteXRjK2dDUjEvWk91eHpPejRtWlFHUjg5WEpPaGE5WXkrNHZXemRPaUU3Z2RNa0JnRExPa1ZHV013UExCbWdvNmJHaUZHRWo0U1hoS1Z5Q1B4OHdzRlNVVm9IUVI2bFVyaE5RaHM4RThYMm9JTUZWRDUwVVEvNG1zODY1emZoejEzQWRBV2RtZGh3OHpUaGl0RlRqcFlBbEZoRWZjREdjdzBVQmpxT1h4Kyt6a0xtdFBTSmVySno2TEZyckNkajByVVl5UWZGS0RkT3JaNEdUMlJ4OG1SUGhVbmlsMTlvclU0Vk1UNklSVVNkUEhLUmVyQy93eFZDTTVSdDVHZ1NPbUxTRmpHNWx2RXdhSXE5VVZLSm50bHNONTQ1K1V4N0ZXcjBoTTVxL2Fyc3NENnNaYzZzZTNzZ0paeHRQUmcxWnJ4dEUzc0RKeEtkSUZlcnVWWnVobGxTeWVLMkFOWFZueXBjK2xESUhlNG92Rlk3VDd0eGI2MWZzL1pUVnFCK3RVelhxK1NjUlhYL1IwekUyNWdQQTducjI2clRYVFUyOVRNRHNBU0h2SDZwZy8vUkhGTlAxZTRMOWlzS2FnSzF2ZjEwNklUQ0xPNjBHSjU3MUcwcTc0WWZUNDM3ZTJaMUpxTlFsRWlzc1hUSFhkU3QvWVhUQTRFanBTS1NVYXZZNlBVNkloWkR1bUZjRWFuMVJXMzFaSDZ6VnRNN051R2w2dnFqSjdTVVh3SHBaV1RlS1hZZDRBazZ1bkUxTDRkckZPOXpJNW5sZkRBVGRYOVRpOWd3ekdWSjAwdG41TTc3OVVTVUtURzhicFQ3bGYrcm05OTk0L2FlN3BXc3NUTmlsN2FzalFmZjIydGFkcXZYcGlPWkxpUzU2R2xycTQ2M1crcFQ0YzY5MTZ0R2EwT2NkL2loamxuak9Jblc2SkUxdVg0ZEdYY1l0bkNFRDROcjVzbzIzcUZUZmFFOG5yK0V2akpNSUNmMERTY09yaGtRWkxPZXhqNWRjSzN2MDErYzB3NHJhRDdpQmZRN2hLY21QUXhIUjE2c1RjSnIzSVdYMFpTV1FPbmlJUS9vcEt6Y3NkaDVhanJEZE8zRXBlMWhiMnFlY3lSYmdCRXNleE1XZzJYZVBoZ1dHdlBCZ2pMS2xGU3BoMGdqSFJLZjZtL0djeFRyRnQ0dmVPUnl6N0xFTkl3Z2lad1FRM2M3cldJKzJ6aEhINm4vc1QxcEp2TXZSZWtNdkFLTW1NRCtUMEt6VHUwa1hIdy80RGtNU2pQTjBIRGhuT3BHUTlkR0ZGTWhtSmJxMTEyeUJWRWQ3WTAwcldrK2RUaHc5SFJmcm1XSFYvOVV4VFBjM04yZ3BONHlseHhCa0czVkJKMXVLUFVpdUtaK1BOTi9xTWp5RXEvQzhqbm1BRUVZMFhuNzc0bmJaMFRzWkgxdjZtMk5uYkFvQ1ptcnY5UmRHelBXbWZndUl3RjErM1psanZXeWk2NVUxM25NbndIekdkbzdEK3VBWVRyUHN2cHhuK3pNSy9wUUNXVnFqSmJ4SFRNTVpkalRQemg1TmdzMSt0cFJjR1k5NWk4Ym5XeE9nYWtWVERBTTRqbEFJM095WlFYUE1tcWNaUVpZWnQ4ZjNBejRtcnJVMVMwTnM1UFZoc0ZWUWF4eFRlY2UrNXBOa0M2dFlKWWJIVk1rWWM0a1FmN1IwazJpc2ErTzJGKzB5L3B3c2pqejFwN1VKeDQ1NDlMMVV4b3ZWU3BnOXYxSGxEK1pUYWJSMS9yMnVQb29LUzRDWHBYTTJlVk5LU0g5VXJpdWZJdVZ1cUhSY1B2RHpNaUEvZmN3Wi9BUEsydXBNczdaWnpHU2cyQTJlQnZudlNhY3NsamE4VkhQa2hQa0VteFFJY0tQSnplNzhGTE13dEFxbDNQSGl0ZjI0M0lRcndOcTd0ZER0dTFONkpFTzJtZ01OZnRZYVdFcWc4N0xXaFNXaWRGTWo4SWQ3M1oxZDdVOU1PTTk3UDBqNEVmSFFPNHlZSVFqczJGRitOaGI1TjAvVlVZZTVKVVRYdlJXZTJwaU5WNE9uV3FYcVpSNFltQ1k5Smxpa3UyUG40RS9vVW5GNlp1SU03NHJzaFVKSXFKQzhWcXVKTHVEZEJSMWMvQVZ0Rk9kZkVhTUJKalNaQ2lMWU9nL29WYkVISE43eWRRQkF2b29FTUQyUU44endWMzV3TnFsQThtTzB3NXZaNktndER3SzMzL1dVVFlVZlNwVTFmRk5HaXdJYmZKeEtlWGV4VFh5RC9WL0c1Z21KS3lpb0p6Z2liSFZRK0hkeEZZQTdNUGZzYWs2SmE0VnRJZ3RJVUZFdUVPdzRTdnQ3Y3o5eDFIeDM4aFozbXNSZERCdkplWWx1OXFrUkxSMEl1bERUUzVzNm8zM29SQUtEai9CK1VxUExOeEM5WGg5SU9QbG5wSnpYSlJpekRrck9Rd3orOW4zaGlmUGJISWJmWnJ6S0VaYk9hRUpCdHpHS2VoUTM5ZDJiNGdaWHpTQmlocnM0ZTVWTXBmTUxpbiswaU1qbTdEb084b2xEUFY0aEpjY3pGZDJqTlByRUNjT0lEVk9RZjAwME92R20zNWYrUktJMlJPS1M5bTZ2WVpPejMwSUVvdjdTRGY1U2EvbGNZZnJIeTYzeWduYUh5SEtqMndwNmlhOWhScldDc0xuV3N4ckxpTmhKZytNaHI1aDdDTHg2R3VKWkM2UXloYWYrVzl2eWlGVGEzRlhvMTV5cjl4NC9LOGpja3FRL0k2NDdyUi9vYnFpVTlvRWdWWkJDc0NIR2tkRnlKVG9qTnRUek5neElTS3NjMVViMExLV2R6M3hldzJzWk1aRUJiNzhmZEJOK3NLNG1STTA1a25xOG5DUnE3Z2ZOcWR0dk1Gc1lEMW9GSm4rZDM2eUhQUkRUV3lVNHMvTTVncG1QMjlpdFliVmtrVTBReXQyK1EvSnBwRnM5UGJ1eEpQVWp4TnVia1oyeGhFVDlsZkc1dXAraWpFVGU2ZUpNVWtvTEhSQmNtc2RtKzRqK1FjbFVXeXFGQUp3TVpVWWNCdktkQ2IvaEYwRWxoMUxzbmRUcFZrd2VhV29vZTVrMEhUam1SVlFZV1VMWmRUZUlBbWxrKzNaQlNMVXdyekpIeEtLN2d0ZGVNdHJxdVJjOTA1YmZhUUlxMDNCMWNRdmRsaUVTRTU5bTYraDlyalZUVmdXZ2pYTmVqRDFNNnVGU0RVVWl2clFwamJIVVZXQkhkdlYxYzg2djVZdmMrcTlDbmVxN1NVY1BhLzkxYlNpUVN3RTVOQ0U0UUlWbjJ2aHZiU3pQOUQydncvcFkwV2hVYjc2a3M2WmhWOXVEaXlSUjVWekYxUDBvMldRN3BWMmRxbEtMTHFZNjgxM0h5T3NFdG1QRHRaQWRIODUxU0Y4QXo2V25HUkVHbTVSQXlNeTNqWkZISXF4R2h6NTdoRHZuQmxVY3hGekJQR0RXcXEyVEZ6M1JSMFBIczRiYTRxckVKdkhFSktyN0J2OUNLbFdrT3dWR2JsU1p2R1d3QldqMDZHOGhWVXFZRlZ1Mnc3N3pmb2I3aThqR2RhdVlYOE9iU3loamk0ckdoTmhMVjY0T3FsOC84cnlHZWhabXNhbTA4b3FZMVN3UXRYWmxIVXVoNTRWQW14ZFpOdWFCUjlFYzMvUGI4WWtXbEUyWjRScFBnajJxaTl5czl3bVBlUm1KamsyZXVJa2VLbUxBQUdZckpYZzNGUy9yQ3lCL1ZYQkJjSFpWUWpySWxPTUExeFNyTzZJMFJBdUd1YlJEbkRUY3FlR05PaGY4VktselRMSHJEYjRTYk9NQzdsM0w0WlMwM3k2Z3ZBb09MZnA0djR0MnhOV0I3YStrMGhKUitYNG4zT014cXRPbFpLVWZRdU8zQmZVRDJBblR0a2lYbllQdFJ1bnNOVFVjTGJZd0dVb2ZzM2tRaW5Xa2VwNERSVGt5Q2dZaUNBSUR4NFUyV2kyWVVyOWFGdG5XWWRTWHF6RHdaeUZCNW53SmdObVk0NFJ2NGdFOHFvTXNuVjlPSklNTzBseFNEalF4enNtRWlHZXRFQU9Uckt0SVE2eTRJRVhoQ25WY1hmYWt0eXdTNTZNdHRjMnpDVlFmOE9XVHRQWWRhMFFOeUNjMklNRGdicnRTM1hwWFdRcCtlRE5DSCtGd3dlemhKL1o3UnhHR0VQRnZOWkx2TjNEcGQ2MXd1NjlwSU5IZFJMU01mUHZGbUhNbU9TZTBaMHRadkNHQ2l5WDRvQk5mNUpkeGJjRURkY2hwNG1MY0FpSXI2ak1iSXNZTjhucWk4aGRFOGkyY1plWTNGMzNtTDdRMkpRbmcvclFwM2cvUHgxKzZpMjI4SUVDZzhxenorVGJSVS9uelJYTFZSYjRoWHcvd3ljdEJNVkRIWFhqdk0yZHlRZXpuSmpWaExTbzBCY1BFbXJ0bWFsTVoxeTNCZjZrWFNIaHVtZ29kZisrSzJGa29KR29sY2VnVVpTLzNHcmdWcmNvd3o0U3BScWM0TXh2alJPenRrUEhFKzBMUFRUbHFITFp3Tlh4YnpGUkU5cG02dWtWdEZaM054ay9qM0JJOElHSmcrSDBjWDBCblE4SVQ2WERZOVRJZW9NVkhVWWc1d1BVaTlZTWZVWXVtSDFNZGxHSUcvSUdOTUliSHUrbGQzQWswNGlDMDZEQndNMnVJcmxBWU9CYnVNUTBNMWtuN3ZRaGxxK2xjZitVVDZyTWtxOWliNTM5WEd1cGs0aUhxRG1KZlVGMFkvb1VzaGxRaU80MzFDaTJKSGkwaWpPdW9TK3piMmNuMWxCdTRudDBPeTRJRTAwNTkraGZ5YTB1VFdJb1I5TU5yT2ZScTVyNGNEUlc5K3l0ZW9zZWhDT3BtaXcxbWtOT2lTeHNISkgzWUNTOGRoV2UvVUUxb1JHSEFFQjlUZ05XcE1jSG9yK290Z0N1SkpSK2JVNzk2S3I5ZTNHWDEwZW5rRFk0eGxJaS9LT3F1LzYzNHVPR2FmZ2Nud1A0ak13U1FpN3JjTWxCMU54RXdVM3hIdmI3NVV6KzNtQTBTM1gyeTBtaStxSmI1cXVpaTk1dWhEMFE3YmpyZktiL3lRbXRtSkJxdjZVVkIyTjk0V3NjUmdJdjhHaFpoRjhTRjY3WHA2a2xWSWxnMW1Fb2N6bE54YmxDeWhWaCtqczl3QkVhb0ExRzlHb0VFYm9EMXRkaHlubnRQZ1RRYVlPbUEvcFRUMFlOaGFtQUtVMlBPRGF4UlFHQ2FrTWhIMUd4bzhxNWxhT0l0d2kzYmY3L2hZR3FYZzcveUsyN1grMGo5ekpDMVNpc0MvYjQ2OFExcEFmNGxDQVNMTGFtaGZaYVA0enBoMkthUFQ4Vjhzd3B3OWdFR0Z0ZWRjamV1YlVaeXVCdXA1MmJ4TnliWlpqb3dyb1IxN3pNZEMxYkhsejBPOWdGZXIrS3M0L2NyVGQ2aFhMMTNDdkhFSnNXaVVsbVNIWUZiSTRlRUQ3c1VRaWgzVlQ2bWxCOHZMVUQvQVFJQndhRVQydUphdW4vcTEvbzhyYlByVjVmb2I0eldIM2VubllSbzd3U0xNN25zNWZ4NWptNGViU3FBTEtaeW1yQTJ4ZWdrZWoycHRtbzFaQjZFbTEvZE1uVFNBeUE1N2VhNEpXY094N2E1QVloNGRHalVISmg1Sm9DZ0krODN4NDZBTUZwRWQ0UWtKNmorVWcyRDFyY1RTSU1rRi9RUnRId2JyZWUwUUdyRC9UOFpwRHpnZnY5bVk1WmNXc0pNVnBpZ1IzbVVRT1JKb3pNSDlnZjQzaSsrSFZCT3VZeUpIVzFlSEFFWXBzRDVlV3ZISG1SWUFtY3paS0NQMW9ra1VpZER4SlQ1UHl6YzRZVlFGam14R2FNUWEyMHRJQzg0TGl0WkZIU3VwUXdGM3UvaWdXbkg3dEQ5R25zUGNpU2E3SE14NFNjL2dtMHE5MGhoUVlyODNmOTJLTG0xakNUUEVVTzQ2MGRSZTEydldDdWV1aDJlVHVUc0V6RVJnRGJUUGJSYzIwRmwwL21XVU1OdUNXdFlwTDgzTXY5OC9Pd0tpNVk4Q2xrQTFhNmVocGlXQzN1cDdVUStuZDh6SXF0ckh1emxHUllEdkdDRDdEVmI5by96Z0hNMW52MmJzb0JkbURSOUhSSEdONzR0QkM5YWg3NWEwTFZQVEFYR1pZUjZDYWI2ZVpzYTd6TWI2UWtmaHhPbTFOT3UzTkVoM29qYzNmRzZaQzhMVk9VUDFnUWRjQWp1ZkhJOXBkWlBTMlpacnJmdVZyVy9ZalRhWFFKbjBiVzRqRmI1OGR3YXNRTVh2L0M2ZkZvWTlQMTNId3E3RElyYmFCc3huQlRFQ2FFNmVFRXI3bmxKNVFRUWhnOTN6ZmREZzQ0a0xrWjFRaTQyY1BiSWluYTJFdm9pdmNETHlZZ2FoWG5LRlA1aFdGaWE5NUJmSFhNNkV6aGdDckc5WCtBbTJucTFzUzBWMnp3Q09QS2tHdWpzbXppbkQwRWNRbzJGei9TTTlQak02ZS9FK1dEQWxHZ2RLRS95RmowckMyU3I0QVFJSjV6WlE1S29LTnh5S050L1liNnRlYVYrM3MxVE1qaFZQRk0wcXdLQ0dVY0FwaWF3ZGV3YTh6MEJxUjZnd3lwUHVwc2RJZDViZ21TMUEvTHBYRENYcGpSRnZIZzdKdHBFLzF4SStZRmY0VFdXd1VBOU50S2dqYU0zWmRkRFVOTDB6clhZT1loeEtXMXVNdnZvTGFmWVZwSWx1Rm1uVGNaWldXZkMvU25NMzNTQ01Cb0d0L0NyUGFhMnhxRXNqaDRnTkFJUTlHaFp2YXZxZkpRVm1vT3B6SDlvUVh0dmtMdDZOWjNsMTV3VHVDN3dwV3Yrdkl1bG9rdmo4N3RUZTdTWW53Zi9OMHVEbUN1Zzl5MTlVQ1hselVzanhBcDltRzMzamQ4RzlxMWx6bW1OKzd2TUUxUmMrNEpBVzJzbUIzL09FT2pYa2luNGVjanprSkFrNnVsT2ZIZEZnKzNqWHdVMEY4NXNQd2pibFJNWGI2MHRITUV4UDJzamFhczhwc0xQOTJjd0NaVE12MmVBWGxYUGE4S1BhaU54YzJQa1dBcmszYys1Y2xoMTVXMndod1B5eCtBVVM5aGxnUDdxeGJuazNUaVBVTG8xdGNoQlZvamFtVFowMnR0dnlVQmtNb3JSaVI5S3NxQmpYR3NrRllaMDdGbEo5cTdsUjVyVGZacXB6Zmt0YXdXKzFmMm1pYWZYODBMdWJidnpSVHRWOGF0QVFvdkk1QURBdmZ3bXluTkI0enVVSnIxOERLS1lDTC94Y1Q0aWd2dURZbkVuRVhZZDhKNzB4b3pRMi9yL3hOR21QaFpnUzRQOFJsaDd1NmIyaWNFenNGc2ZTaDZXc2k5c1loM0VoVVRyR2kxLzFRRTIvRDJOT3QxSldqY2VHZk10eFBaeTlBWjB4WTdxYzI0VUhWOWhrQUh1WUF1K2ZxTUdDNWc4TWprOHo2TytRWU5mYjJ0UVJIOHpZM1VNaWsxWlQybHJSMnhvV1plOHJ4TE9kUXZYRllIV0xGSDdWeW92QmRUaUltbFZOTFNHTHFzTTBlS2hGM2UzNyt4ZXBUd2dNUVpYRU5Ib3UwQlk2c3V4TUdpamR3NkJsVnJjbHZMc2ttMEJjY0lNMi9NQ3RJN0lVVHFuS2Z0cWNOQlhjTG1XbVJVRk41N21vUVYvd3h2cE5UWkovNVpkUUc1eWxFUENRQzExMzRQdXVOTndRNU8yRS9FSXI3cG1uVjRabHkvZUR6NzM3aGt2dUVxZFgyM3FnK21YemoxOTdkWGJ4b2ZlUzNxSE5IU2crZVNsVThIR2ZlNFB0akk2V0RBa0dZZFFJODR4UVBhS0NSTHcvdUduTGMwS3dxanVUdm9pVlpDZjkxWmNubGVyRitMcURDSGttWHM0SW5DNzlzaGd0Y0RmWTRBZngzSCthN2dNNXBadkltK1VJcENPTWM0Q2VlMmNteHpwQ0xIbWJSRHFqMkxTTWQ3NUg1aWNHUmxXcGo2TU9INU1tM3NHTkRqQVBPOFJYZjRoMmRrTXVxbDJYcXFWV1BNVERNbVIyNjV0dXJ3Vjl1WWtVN20zTjY2UFg0RGxkTUlCdXNiemZrdHZPam5xVVNQOStjVWhxdlR0TzRxQUJScFI4Y3VLWmZNTlZuMkQrOWtMMHZldnFieENFMTR1dGp0aEx2M1QrWVpIdHdmSUxOWVVLN2J0dnVSNmxUTHlGK24vaEpjSmJuYjZkTWdJSTdxcDFxZVdLZGN3djJJRUdIckM5U2o3MDJjRDFsRXZLMmU3aEJvMDVjYVkwRFR6aUFZNVBCSnVpOHowUUFKOE9YRk1LaGdJeXdIclBWTGNoK045YWU2b1pUOHhTa0twUWN6NE9VZHhqTXJJUW14bkZaeGxvTnFzc1FUNXZFRGhVTWY4bUpmZTg3c2orSy8wN0NoWHRLM2dDbmhCdWFpamdPYlJocG9mM0Qzc21lVG1YVmpsdGxiTmVCajBhR2N0Rkg5VUowRThGNTBIc0xvZHl5bVlLVWMxT2hIM01GY05qUmpaWWZzT0NGWmJiNDEwNVltZ2tJVDltTyt0bm5OQmY0Sjh0eUhDbUpKYzd6cWk0VlZsdnc5YW92Tjk3R2d1U3IwQzh0aXZiZ1BTZldqZ2Y1cEU5QXJmM2tEb0pDdCtSQnJ4amU5OGt2bVQxSGxkY3cxMCtkZHFJNTRRVjhURnhaYndSU1cyQlRjYll0S0EvNjZmcHhKMmNKejBYUXcrUWVGVnpmUlcxQXV0NXhxQURHcWd5MEZuZmZiOUtzcllpODJJZFg0Nm9USTBjVUdPb2NURlpaenROZG1DcHoycWs2QlVVSmpwb09UUHd4ZDNsdGxvVHVVSmtsaFZ6ckpzbGZWb3RkUFBaNUFHQnA2RGx1bE1QQ1MrUmNhdlNES1dTaVpDaGtLREtOMkVJMkFwV2hTSFpGUkV4a0VGeU1QeWhyV1Y2dGVxOUZFV01qSzNYVGVFaFhpbHlaN3BxMVYza0ZrRlJ5STNBYVlUN3RCeVdwc1NrWnVjM1hJczFVM0k3THRPbGluWVhqbGdIVzZGaVk0bWRmQmZDRWZoTXpPYmVrU29iNkFLTk1SVFh0YlpOQlZiKzN2aC9VejAzdFBwVWhCaXJqcFVxNGlKL2VjTmRHZ0dzTzZqUXF0QldsMFV4R0xNTjJ0NnRab1pjeUNZVTZEbVNIL1Bsa2V5VGJGeGJac1lrblN4WXJPcER1MWtoZU9XOHQ0OVhkY1AzQ25HbkZpb3BUODY2dkFVODJ0eEUzc2N3RU5oQ2pFeHlYTExXMUtaMFZMV1o5RHVMK0c5bDAwQnZ6TDl0UFA0Z252cmlnRnBjc0dEMC94eWtmQksrUXMrdE51b3dudzRBQU83SUlld29CVXh6L0tLbVMvV0Z4RzQ1YmQzZzEybkRsZXY4eEdGSVF5K1hpNFFRanIrVU04NE1rRkRLa3pXUmc2aTZUYXFmTk9waUowWitGUnU1N001dGE5eXBEcE03Y1dUVnA4eTVEeDUzSWg3dG9XRjJDbXVKckRKczd4K2RsUDNHbDk5MDlFU0RrNlJnaGxWUkdVeGl6RElyNHphdWI5cTVQdDZuV0t5VXVmdDFtZEJZNnEzVlZoUE96OXdGS1dmek4rMndKd1B1SlN0bWl2QTI2MzZYV013VFl4REJIYWprVUVVY1FrNDd4c2UydThZWm9vaDY0eS9iN3dPZGV2RFVqbVkwcXYxZVdJOVhnYVFPdHM3ZGRKa25VeG9yanRnakFUNHMwVTlKYnR0U0ZJTFFlLzFZdDNxVnZZQVZucExBYW5DQ1ZWYks4OFVuMitmdE1YVGUvVTJRT2pyRHNLWDRyT1l6RE9PQXJTb3hLVmJEVmxoOHgwd2F3Z0lXR1RsU1BDbExGN25oM24vOUZ1THpGdUxWay8zdFBsalB2bCtxeGpMOEp0UEpQUmgrakMrZ0twNUdSdWVOMzJhRklXRXBta2sxbll2aW0wbVQzQ1ExRDVtUHowNUZueUQ1a3Bzb0dYdjkrQU5FbDZZWGFSUGdiYW04TDh6VW9ySElaeVBnb2lUUFZhQmpqR2xQS2ZFditWQ2ZFeElXbGZ3aWNSZ2ZwM3VscUQwZlFNTkdqL2syRGxyZUFWZ3pFRTl4TmNjMVdzVCt3dzYxNytPa3k0MDFDMCtNUHd3TWduclVtY2JxcnBlYkY3VTRST2MyWkFtbkZqVWI2M0IvUnRuQ2Y5VFU4WXBqNVg5dTlsajcvWlc2SjkveWJVMkhmeSsxd3QyOXJOMEZja0VJREorKzJpb0dheHlGc0hEWTdWZTVEajlEMTh5Zmo4L1NXYS84c3gwbVJMMnlaRHZ4VDI2elo0cG0vTUFzcmJLdktDajBYYkRFRDRiNmcydzd1Zzl2QW9udjc5ZXhIdUFZRHlEMU5mcytDaXlpNWMwRVgzcnEreE1VckpGem5hc0NpelRCcDA4U0svMGtsd25aVDZsaDhKVmZmYWpRdDR0MUlTc0pLaG5jWjlrVzc0S2x1SVRERXNXbHRUdGNlTVVxV3NxNUM4amFERUFOZlRkWXBxWlZKdlZNdDBNNmVzNzRDdkQwWFBKQ0E1SG82WlVkeFJVVGF2RzNPc0lncFNidEZZN2NlVEtVNWVqNlgyQ1gyRlNXM1RCY2FRTkVsMFhnQ0RVMUtvWFdROEoyeTdKcGxLa2crWjhhTUx1b3p0K2NoZDBEMkZNY2IwdWtFY3NPcjhHRzRxaGJYV01CQ0FET1dNSHpzNHFpRzhUWE52Y3FJbmtocXZvc0pjZm9sb2FlSTdPR1RiOThoN3lRQWFCNlVwUE94YWpJTTRLZGtNZUF3S3dzTDNxNE16MDNwWGk1czRiSE9GOGlRVXhwZ2ErUFYzN1h0R05ja2VyN0RUMWZVODlGR3lZa3N1eGlhTG9pZUhTS01hRDhXVEFuUmFxWjVDQ3VuM0l0dnhQY2UrZExMWUp4Rkp0WHVoYU5tY2ducEY1VmxVRUhkUXRTRVBicFlJb3EwQzBETlF2aFRHRXpoV0gycEQ1VWlZR2NGSnFMYWRrK2FIbk54czlwZWlnWFkwSEVGUU9aODNuZ3g5Y2lzdUxwUFhyNVNhd0c5TE1OL1BrSFZRdDUwdHIvaWI3aVl3VEFyY3BBV1hPTmF2S2ZueUg2QWg1T2lRa0NKeVJyaFIvWXFTYW9rcDVITnVZb3FBeXE2aCtQeHhzYmxsZUx5ZVZTdE1WSEJxb1NPbkFSS0g2c2hSMERBbmIvTWpsRTVLTi9LbEI0eXR3bmtTMkVsOExRUEhKZythejBwTVJ6ZlY2WXdnUHdSejlGRzFTRWRTZHUwQTJxSUdUUm9keXJiVk8wNFBPM0YvZjBuTmxaV3QwMFQzSkJtVDZha0VUMWxZWVduUnZlZGlxdFl3RWFaajc0WXpISUtjM1RiUG1ETUQvdXRpR1BuUkxLOFVaNllDVmkwL216d0V5QmhNQjBOb3VjUjAxYWNnOENLa0pGNVFWTFpnVEp1ci84QmhIYTBWckZEc3NndDUzc0FJdVc4RHJhR0VySkcxN3BpRFc2YzBwRVBYd2VZWDVWcVUyY2xsQStRdGNUU1I2RVorek9SV2FUTjJoTXh6SjlMR1hnb3pKUldlNkxGazRrelA1Q3pmbkZBNkJ4ZkRlZ3Y1MzRoU0d0OG1WQ0Z5Q3kzOW5KQ3hGamtmTy9kd3BsL1R6SnpBdkhhVHFJUTFCNVFaREFNV09qMTFtRUNkS1FqcCtNdEtSU0p1amtmRnh0MXVqUXdzVTZBWTh4YmY4V3JtcFJTQk5UWW1RZERBNGQrbTZGRDYvNzBQcSt3eWNaNXg5Sm9McE0zaGRvcjBsa1QzQmJhZE5VblVGMGtwNUhFMFh4L2h1Q1l6SnBrU0trcW1FbHpZdWZyUlRLQ0szWUhDamZhZW94Uk5PcnhtUXdJb2hLUzJmc3ZXMjFYOGc5eWo1RHFlRHhrMjhocFQ4MzQ1S3VNcHNTa3V5aU1pSnhSaXJKMU1jNVJkUnpBS1dzZkxLOTNjaHRyekI5OHB2a09lS2luclNvM3BWblNoRDBoVTVmK1BNcDV2dTRTMEU5Z1VEbDEwbEhITVlkQjhjSnlvQS9qTUFwMG9oam1mVW93WkQ2MERmei9SODlaMzlaTFdEKy9hc0t0VHBnOWNhVHJTbjdsbUlyMDBMZ2VMNUl4MmllMGtzd1loSld4Z2tMSG5BT2IwSHNaQUxEQ1BIYnVIZzVXUXJFbG4vRFMyTmczeko0ekVZdVMySUpaMFAwNlI5VmlqeVQ5Qmgxbysxb0d3Q0hyQ0QzOWo0eUJZZlhteE9WTk5tS3laZmp5N3JiTnJKd0xTbW14d1dEN291NnhaZDV6Q1RlSXI5aXExUVBmVDR3OW5vMWJObVBuM0dNU0RFQk9aRUtaclorc1hodVk5ZFYwanRRMWVVcHhoY0p0ZnpBc29CSHVncWhPNkxuWGNoZG9FeW13Y0hVQnhJV0tzdlBOMDV2ZVdsM3Z0ZVJTOVd3Mlp5NGMzeThZUXVkVDhiR1I4VStsck8xdkVyektuYURUL2pNbWRuRis0a1prZTh6Sy8welorOHdSSmhNNXhjS250dVFaSW4xczdEOHU3ZjlyZlFzTUY1K2ZSc2RsYmR6WXNjL2liY3hsUGRvU1lkWGtyTy9SWk4rUUVNSUJWc01tZEFtbDRpdXp4Q3dkL2F6QnVzM2IyMFVwUi91UlMwUW5aLzQ1N2NsZUV4a2FWa1g5aTFKOWl4WFVraEFWRGJuNk9hOExHSkFvQzMya3R1OVZGdEhZbEV6L0xtTmhVTTNVbW5NVzZSS1c0ZFJhTHkzNXhJSU9jb1JmNWdQYjd2amJ6UUcyalVDQVJUcnp0ZVpQanNjbmp5ZGJITWdWMmJpc2FrNDNXcFBuTkhtYk84VEViTmdBUkxXZTVrSG5kbEtCZkwzWDVETS9WVnl2WkJyMUhxZGhVcjVCOXZMMHdyRHd5WExFWUwzR0tXd0NMWFJDa0NGZmFuNUl1TXg1NTY5QzFrTVEyb0ZqaGl1QTlRa2J2dVB5OXlkY0c1elo2UVVkVmcxR3liaFFaNHk3QWhpRGZLZGNnbWlNdWFaR01QUEZKcDUwS3JnanFIQVhLSGl5QVgzZUVDS004TkNIQ0tyKzdLa1liMHdMWDNUczc2Q2I4bWkwN2F3Nkc0Z293UEdIaUVCV2lvaFlxa1VnRWM4dkN4VDFhMmFaZHc2cXIrTGs0dnJ6OE9XOE1OcDJuZ21pQWVqVkdST0FIN1g3cWl3UFlJVmw2cXJnc0p0MnQ0MVJnS3A2V0YxWFp6eDZlcTdhUTQ1c3FsQzZ5TWhUZWtQREhMS1d1cUxiUzczMGZCQ1hnVGRsNmxPckUxN204VEhzaldxS3NuNzR0S2o3NVpWSHdWMUg1NUJWaCttWDZuRTgzV3d1VDg5S3djemsyYVNXcHNDNHdnNDlYVlVaR09BQ0RKN1FUelpXaUJYSDBlRnZ2aVIrUUxMRHZJU2NjS0t6MXA0dGtnamJ2YnNiVXc3MlV4Ymc0b2lwdXFhUHZXR25oQ1gwa21lR0ZtdjNycWtQaXptTno2WTVWK1psblp5ZFBQWWtPYlFQZkZEVll2WUM2SVRhNS9FWStBbzBscEV0STQ2ZEk0ZWdRRWNiTWtwZ0daeFRLSURLZ2p1d2lqL3RPNnNGbnZtUUFhRmZuNGhkZXZTcWpwOTN5c3d3VVdoekZxSUtoZ04zWktZUFZrZHVZWkJ0cmdOQlpvdjJvV2J5UFF3aHVjcWRPTDBPOG5WRlN3Z3ArYWFSdjlQL1d1cXoxQUtHQ09HSTgxMWhiWHFpbmJ0M1R5eVd2QlQzTGNmZUtvMnN3Tjh6UVViUFFTa09UYkJDb3FxWTZoZXVEVk9tQ1pBSDBMU1VSeXVSUjUwTDZmZTVCMTgwdS9mRm9MNzhIMnNYUk55UFo0cnE1L0RJK1BrTUdKNEhkM2tLdGVKRzd5NjFJZmZuZnN4UlZFSituc0ZCY3RuUHNqckdaRmdIZHkzU0RxMWcxbmNOWXQzcHBaLzJsNnl3WElTT0gzRVJrMU5LcnZTd2FWV096Tk1BQlB4SVZLR25yeVFIY1AyQXRKNkJIb25xWDB6eiswTmxPdTMreUFSajdrQzFURjd4TkpHMHlzNCtVMTFDK0ZweXJkVjg2cHJ4blEwQnMxU01Oc3lnMmhjcDVYZkl6RzNRRmxmalhHQzY2UDUydk5oMm9aRFhQNU5oVEw2QW1IUjIyR2dhbjNLYVl5RTE0L3NPU04vUVdjbjRuN0krWUl5TkJTVitoTHh0VTdBZmxLTVhGa3ErcW5BNVRuUHkyVE11eWZia3kycEdsZDNjUzJONDNKUVZRSExSMjNwTWRTZmo4NTQyNFdLcmlOWW1LU3g5Y3gwS1dvWkZzTGZ5elpLMGZmU0h4MDNlUkU4eUVzZVFGTGRGWWxFdmZ1dXR1clpZR2J2YlhEVWdqRmFXQm5aSEI3NHVKRERySFVpNEZFRkEzeWM3VEFOeVZub2Qvd2prNWdIcWExc00rQjVzNnRJem5sUzlxb3VYMmlxMUZNakpWdlp1Y1JnZjVvZ2ZOUlpZREQwS2IzNmJzd3VrTzYrVzUrYXIvdFFUSjAwdzNDdU1DTmwxUnQ2b0RqdkNaejJRakR3NVFvMHZBNnVRSlR0TnVKNkhVRm5ubjcvRVZqNm5na3lJQk9Eb0hEbXVuWnlDd1BCNFBrWkFUUDFqWXVRanRBcnJVcWc4dmxuOVh2TTlVM3RoSG82UE02UlpPSFVSMG5iSGNQQUtJaXArMmN6K0VOOUJXTzBqbGJuK2NsbkJBdDlZRXh3cXN4NmYzeWppVmoxU2VITE1XbUNKOXpVL2FEOVc5alZRTEZ3c2ZISXphQ0s0Vy9FSnd6Rll3REVjcHh1RjBpSEpsUUNubXgrTHdvY1BrWjdteHorelYySlJ5QnU4VDc3aU1nNGJDUWw5T0U2aTg5SktRMlMyNWxiNVNyT3FibkFTTWhDaHphc1JiRkN1cnBUbXlSWUN1TVpTSGZScnpHd1BkTnpYTDAvdE5VNmRPTXRqQm1zR3JIQ2w0L0xwN0VrV09zeDUyQ0hkRWgwRll4c3NDOTNQdGJZRVRZR3EzeWlZd0hPTi9DMEtpTkNHR1pqbENVb0lXSURLbzBLVlFWZEhZTmduMC9LYmdJcmgxaURGRUFwQmdZODNTRVZDZGtGK3JPcGYwSE5GTmtxa0NLb0Erb1plSWxaeUkvd0Q2dldIbXlUbW45Z3ZZK0V1UTNEUkJ6MU8vaWZGNVQ4SkpiVlE1bm5RNENFMDNaeUJ0QjRMcU5JRzlDT3gremN3Mm1IbTk1T1M4RGlJUFg0ODZ0UnUvaG5KRHVUemxaRGUycjdXZ0xNbTFQTHFRbzlSa21CdFFiaWY1QlpvY2JIS3VVVlRyK0ZTSTZpTndBTTVzNjdGbHNPQ3Vmd3BuMWxRa1Z1YThjRk9obnFPZktqYThNd1FHeTROTDBGMUNTWS8yTUFPMk1DSmF4YnpMc2h5TmtXY3Z2YlhWSVp6OCtabncxdCtKc0Q4YWlFWitmMS91Y3pNemt0VGo1OTY3cGdkczd6VUkxSTYvaXQwVVRzT0lnNnNGM3lINUNQSjRnZ0RpQzM0dDJxQUZZQWdRVExBMzhHUnpQOEV0SEcxSS9pOXc1MVc5TXU2NlNMbHV4M0t5M0tYMFJzQW5NVkdITEhpeDZGYnlRajBDVWdYcWpvYnVFUUh6UzJlYnN5OVNWUkorQVJxQUFSVnM3YmZXYjcvQnV3cEtJYm8wQ2V0SXJiYTlhV1h6dUhpeGRSQUlzM0xXSVd3SUtZSWcrcS9OMHdRMXpBaUxRZjJST1VYQnNBWE15ZHJpc3RTdlhHaUgxdWVTODB0dHFkcGlMYyswaFN0L0ZNalNpbStaM3VFZG9aL2VIbXplTGxzVk0vUzZqRncxMU5PSlptZzQvSHpPclRPVjE5NlBMK1h0YWNCNkhYb1c0T1NBaW83REZyMzVuSnNrWDBrQVB2WG1idTRTSVc0THBsR2NkdXhhTlJGMUx6ZHljcTVRaTR6a2RjTGp0UjhVTXZDK01xRGY0ZjloWUFhTXZ5ZExqRytwU2o2VEg1SGlIeDZpTkNYdUliWjVrTmRDSTN6OW1kYTNrNmJIRW80amJtR05aZHQzdVMyci9jRUc3NWlFRHQ5d2NxOHFHdmQxY3dnaWhtZk9DbEdQSW5FNWdtS3VkamtjV1h5ZFhxd0ROd3I1MVUxSkYyV01TVExESHplZ0Qwbm93TlR0V1dpTWZiaG1RVDFiL2lMVWcvZGc4ZTBJZnRMdEF6OTBEbzNFUFlYYkJsUFl4aWZjSE43dzhodUQwaHZ4eGtjNml4Tm1Kajg4RlpMdXY0SFNLMHprVTloNDlvbjd2aktudmJMdk1pa082Uk1xMjJkbjdadnN2SWprOFozZU01OU1BQ3hZdDk5RWRCL0p5eVdobVRVMitxRUN3SS9haU9Jc0pqbEdpNUdCMnVPNDN0MDloY3pLSWVqaFhUbit2UmJxUXI5NmxLeWZ1b1BQZm9Ub1UwSmZsek9sZnN1SW5VZ0t3cHNxdThVbTNRdUllZVd3OTlKNDgxN3dUTEcyVzIxcmh4MWlSRURTd1VnVVUyU1lGSy9KM05PaHp0SFc0bEFvREhCejJKU2hoMW51QjVrQ3hFUVpLYUhJSzZ6VHRhRFllRFFyRVczYVk0UjBkR2ZzRlppVGY5VDlPemtaR1kvSCs2NXp6S1c3ZzRadGVJVkFGT1Q4bnZyWTNuNVJTRHBZazZob3FJUWJoZEhwTVNzTXBxb3hVMVh5STd3OVgzSmZkTUtwdkdSU1JmNnphbkNuL0NUNXRxZy8xVVA0Z01FM1IrMG1VUC9nbGdqdXB2ZzdnRmRHbUtVdUZKK3Q0VkxXZ3BFWVZnNUlFUTNrNVhDRlRvSVRRYmJQaVVGL3p2bDZrK1Buby9XMktqK1Q2czJGRDhuY0I0THlXKzJGeGhuMnpmaUxIVjFTNmxaZFhaS0tPaWpncHdNQWh5Q0RPVU1jNGFZRm5oOHNjYTdKbjVKVkQwTXNlS3lRcEJwTWh5VkpzSWZrSWNUVXBCd21rakxMbm1zZlUrcy8xdFExZm1YNHlUeHpyeGZYUFZZNnJJelkzWWRhMDFGVzBqNk5GMmZneVhZQ29WUUxlUHZUMUJPVStiVmpBUldmNlZEYTdGaVVWZGs2ZDdFajJ1dTIyMlNVc3V3NE4xSnc4cU9VeWVKaVBmUmx3Q2hEeDJQOGViemhtUkZaREJwa3V3alRHMHN2eXpKdjFxbGtKWWxoajN2cEEyb1BaMW1NZVdHeVBuRnU2dWhkRTBLQjNqdEE1eHJjOUNrc3kzeUJmVFFuTVNLVmkxaEZUM1o3Y1dhWGtVNTc2elRNNUJXVmNJaGJxalBVMU54R0crSzVXNm9Ea0VSMHRsMU4yRFl1UmxqUjA1c1RVYVdjZGpKTUdjaFZwRUN5UE55VVR1dDJ6cGtlRHk5NENOVHFhczBOUXkyaDBvNzVPcHNyWmpGTXBnUlczZ09vKy9QdWg1M2Jacm1rVjlWQmpaK0NNZVlXK0p3NGdXQWJYaU9hOEVSRHBSRnZWMTRMU1JCUXg1bCtEVXJBTWE5Q1FKV3dnWC9RbGNHZ2d2aVBDRjFCa01ESG1lbGU1NklWWlZaYzdYcURRTDZoU0JUTE5WTG5lWmxjcmlhb2lDWDVBTjBhS21Xbkh4bXJtbjh5TU9yaHhVSUgvMmZmVzUxczlzbk4yaHRwT1FlY3BNSnAvYWhJMVNHdGlMUEZYMnhpcVBiWVhTdHNpZHpGZVUrUTZmaCtIaWo1YklLRGxYbklKa0lQTW1pQWVkL3N3cXZCL1cwQ0lsczdNV2F4aDMrTnVwcURNSVp2V3BobUs4cHlucHlKNHB4VS8xRUxtOGtLUVFGMXF6VWJ2MWV1K292aUV1VjBQM0R3RCs2YVJrTERtOXJqSEFqaDVWbndVM0t0TmN4MVVSd1B1b2ZsQ2M5RmtVaWFwdHFXUyt1MGsrZDN6MEdlcWpOYUZCdjArMUVxaDEyU2lkYzhKOFY1ek5qZThHTjFLZUFGWm5udmdXdFRUSndmVVpUMWNPVWs2eGEwRzAxZGlQRURFK2RBZ3NDcUFZOVRUMFNnc0U3Wk02ZSs5Z1JidENSY2ozRW5WODhNVVRBSnR0QmFpQk5mK1MxVGlDcEsxMnkwY0VibVB5bDZzSEh5OFJKUDlXUlBpc2YvaTlqcXRXd09HeGdwaGFUN1UrTFJiaWR6ZC9qOGRJcjE1MkFtZGNiKy85VER5Q0YvMGExTmdNOVRvbVBVam5ISk54ZStDYU1mbG5NNjJ6ZEUvWHhvaGZ0UWp5Y09WcG9Hd3RNYzY1ZUJYU1VkRVN2a2VoaVBZbDhXODdYRFlVeit4Si9jS3ViVEFrZXZoODZaRGNtOHJVbkNRTVQ5UHgvRnZYRE9LUUhRc0YzWlRaZ0FGVEtzVWJya2tsNXAwZXFRSXRoSWFUdzc4cXd1RlYvRXlZRGQ3UTRZQVhnR0N4MWxMSlVSL0IyY3UrcGN5OVZJQTRRaERWdHF1ZzZJb1A0dDk1V05PZHg0ZkhIZUJ2OU1WRGQrVWM1QkpEWTB0NU1QdEQ2U1N6RGcxeEkrdm1zQVdlZS9ucU44M1JGZDVVOVVJTHMwMitXL2ZuRkJnWkxPUGJWc0JqUXI4MVdtZEpvdjBoTE1jM1NxMlNZOHRNdzhrZ0xHcXU2bmRGVTM3SytIVzNETTVuNmtvRDk1dlp2QVJJYmVyajZFNUllL3hUQTk0c1JqSVFLQWRyeUdpNDZnV244YS91UUgyN2l1YzRCMEdOb1BEWXJvTjVjcUJJWG0wVVNFNms0R1BpU0hMeG50ZHFDVFY5Z01oQi83WnNTeTZ1UGJsQWNnS2VwK0l4bDIvY2RNUzdzeVVkOURHSEtSaFpRMkkyQVpWaVFoeFZSa1YxSUZKK3pvdExYL1NaVDMyOGhVa3J6RUxvNlpLOGlRTUFBWTBCVm9ES0o3NGFoSTFXRFVVUXUvWVF0d3BsTXdadmlwQTZEZlM2S3YwQS9CZGVMS0xDSTduRXd3RFVlRXNUSnpHSzlOa2xUZGpUd1FqR3lSdzBRQXN3SmhSbW0vYVVWOFJYTDltczROWU5seDd3ZmgrZks2Z09OY0FZdXBtQzZFRVhrd2FnbkZaSGJkeDBtclRUNzFyaXFHZHBhODMvK24vZ1JlU3puWTJVL1c3a2FXN2RXQTBtRm9pdVBBZzFDUVl1Tyt0WkR1YXE0RHRyQUgyclQ0ZG1YSHZYTnVvdTNMV1RiMW9rcXI0VG0wZWJCTGplQkx6cXNlY3F5RjZ1VmJJVzJSZEJkeGRrei9WTnUvTHFDM3NzS0FHU0RGVjB6dnVjVW5DbE80VmdXS1RHZk4wc2RaWmsyeDVyS2pVM2NYZ2NCMFp5UVBKVTFyWitxcDB2NWpUYTRmWDcySUNuamRhWDVPVFBxek9aYzVFdHBsN1c1N2lCVDR0Ry9FOTQ1aFJjS1pSMlBjd1Z3ZzQyK2o0R1pjcEVzT1VRRTkyeVJVTjBuTmg5NWRzdlI3UXdRWWpFY0F3TmRBTjljdFYwbUlwOG01b3E5a3J4aGJsYmtiaU5ZT0Q2M1dQb1ZpMEMzU3NncTE0VENRRVRTci9CTmJkcFdTZjhzSEcyOXcxcTdyb041aG1JVEEydXpKZVR0d0d0N1BDUXVtbVFlSEVjVmtjR0JQbGN1WlRxWEZsNFdKMlRWQ1FVVnEwWFFydWdUakk2MDhtN1Bhd2d1MXZLS1pEQkRtZnlnMDM2OFNvaGZCUEVnNnBBcHZnZDhXenF4Vy9tZ0xNVmRlNmIxbTRaYXBnSFI4TEVQeVV1MytYWU44dVdHam5XVThXa2N4WFIrYjdCTWxBalowUjF2dXo5d3VnWlNyRmtSdDNETUtqZ2JtcjJxMXB2YkRwQ0tHbW5wQ2ZkWThkb01Hd3hYN0dkU0lyWlNRMGt0eFlFaWE1Q1lxbnBsSzlmaXcwM1Jld0s3MUFqT1F5KzdDdkhNWWFGVjFlYlJyRTVReVlxVG5iZTgvS0RLUjJWVGI5aDY0RFJQQXBuM3hsWGRHVXlYQU1NdFVweW12cWUyS3lrTEpmd2NHcllXMVdudFdXMGVSQ2hOckhlR1B4UnJ1VmVsak4vMFVZUWNvbHFKd0p4emJuMWdMZW5MVWZMVVhpSVM1dElCalpqNGNqMlFDY09ZRkkwNlU1NkNlWGlLVDZuazZ2ZTZBR1Y1Yk1SSEJORURjZm83aG1ZMEphZ2tqMmxsTU1Wb3djU28zV3JzMmk4RTJGL3VmL1RQVnRiK3RnN3hEcHJEUFVWbWJkZE5vY2w1VU5aYlRZMFJ4dzRtbVlJSDg2QWJzUHhMdkFUNVVIS3FtVzBvbFBYckNhQmF6MHNYSEdXZzJmWVpTUmlqcFY5VDhLejl2OUtqVUtQSXdTSHZlaHpYb00xeU40am0ya2RudVV3Nyt2OC9VU2FkRko3UXdkK3JvNTQ0ejNNRWJ4OHVLaGEvL0p3NDNWbzdKWm9GNUVBSmNNYmFWczVvWlNaajVpbUdTTld6S1N1MmtIOVhyZzFOVENaMEx1VjMzTU12SEQrYWYyanlncVltMnhkUEJuZ3NQeUtod21DN1Rab1Q3ZXR0eDh5L1RvcjNZWHFZNFBQSnBMZ0Y2TXNEVUFjc01zbXhYZU94Y0FqcitEVTcveU9UQ2ZLekNMN0p6VnZuTmFycmh5MUpWWkt4NVFRUlhLWndIWTVlOXNVQmlRdTBnU1pBNmcyR29DaVV4Nm0vTkN1RUsyb204WDk1UnBxeUZmYWxPQm5wK2h2dTRPbGtxZXdrV2l0RGR4OXRTOWxLRDdvQkN4T0xpck5YVDRuT3RvZUFYN2RnYkE0SmtzdnRGM01pTE9SOVFNQXM4ZEdoQU4rcFJWOTZYR1hCUk8yUTZLb1VwTVJ2QVF1WndVbEVzVTBpT3BtVXdQTnErS0ZvMEVsc2t4NXYzalE0aXV0c2tMb2JUVjVFaGFCUkxUVkxFMHBERDdaUlB3T2JxUEFjaDNHMGErSGhlbWNhcW82Z0kvYm90UWU5S1BoaVpORXBIM2NTTHFkZ0hwLzlTWU4zWERVeWJEWXN0OS9SV01OL1BkMm1QN05CNUdTS2hRZzJtdFl5SHRETmcxMUpwYy9PZ2dHNWdRdFg2N3JTQlNtM2pKYnREUnpiaTQ0S0pQM1d2eFJVcElFVUJCbkRqZTRHbnR3UGRCOTFGSC9jbm9CSkZUVnBOSHFyU0o3WkFUZS9PY05ka0Q4T2pQTjhsNS9KakFqeWkwNWRVamVnNHVhZDU2blROM1JwYWRNT3NhaWprQStxalRHbE9Wa1N4RWtpblRyMnhNOE1ycGJRN2xLdzJKbmkwR3hzck50MXY4TkpBamUzYnZCOHFyWW1lQVc2VUpCUFZnN3RFNGdwTk1nTnFYTnBaR0FtTVpKQkNMTS9rVGNJZGN0Zk0xYnVDYzBZcFJUbjROYzNKSWdMcWgrdHlSNE9sSGp1RTZLSmVaOEkrWlJsekxmOFlvM2dldGUxakFOb0tFRU13Z2QyVDF2aldsdEZQOVBlUjNuMW9jM3ZmclNPbks0USsrODJoWWdlMFdMc2xtMGc0eFJUa1liUEFIUHp2R1VwVTd0LzhQOUR2UHk4ZDZwUUJ2d25qeU9oWGE2TVdkUFZpSS8yR2R4d2RodkVJUFoyMFI1UEhmSjE3MmNWUDJ2NDdaOThWVGVGcTNqZmtwc25jWndZbHI4dVlzeEpLdzRZME9UL0pMa1dQTTNFN0kramVBTlp4d2d4RzdoQm9iL2NMVzVHbTZlUEI4dTVJUjNwMEtHUjZKSE4rcDlVSjlNZmtSMnRFaTdodGU2OFk3UE9ieWZjQ2FjVEpENzZWZlh1TEsvWWhVMm5tSVF1SDVNem51YmhRbEhWQm1RZkFTZW1XM2R6b1FkbHdjZURmUnMrSjFkOGJ2ZFlpdUVObEtFYmZpZElHeDBZZjUzUmx3NVRxRVNydzY4b1gyNmxwTzNxQWpheE5sdSt6OEN3QS9mdzFXZ21QZEFsMTdCcndWNzJtbHpieGJxaG4wYWE3MmRMSTMyZXBrcFRHZnRmY0IvT1ZSNE5IMnpHSklud0ZVSnVtQkFsdElxSkV5TEYxL3g3UmQvVGhSOTRCL3U2RWZ5Ym14WXdyZjl1S0ZBOEkvRzlsaUtQeTdZU3Brd3ZjM3NOSjh6YjRZcXdtNUMxSUhIMmhPT2RKRDMrTjdDWUs5MUF1c2lJSXJhcGVPK1JST2NDWVVSbi9iWkZRVEloRDFBRnkzM0FrRnpSejY1aUF1UXdVbmw3WWt1UGlmVkZ3bm9zU0d6NXRLS1B2emFVT24rb3Baek1EUExFZElhNkxuRklOQWRzc0xxKzJvbXJpUHJzejlBUjVueVFoVStORTNzWVUwZW9tUEFpOUs0VnNLUzBvMVB2Ukw2RHl1RlZKOGp5YjNGdjhFUStXbERLZk5vTHMrUUxlelR0ejI5OVljemYxejFiWmdHd1UwbzlyK0tjdGlPLzZZRDFPQXk2b09zS0RaU2tGVHJtU1pWbjQyN2hhQ1VIWUZpZ2FIUEIvUW9aRzBvTU42UW9Za05QTXhNbUhXMU53bEhUUkRNaDRsOC9BS0ErWE5ZVTkvS0tpUmFtQy95V0syNE1YYWZlTmF4OWNVT1M2YXkxNWc2Z0xQVTdNYlVvZ3dyNUxtdU1hcCs4c0c2cmYzV1lFZ1ovR1RLTGZqTER2Q1VHa2d5eDFMbGovUHBwWVprdVc4QkY3R2ZzcWxvZW5LaUZjWjFKY3FnMGdOU2pRQnowUW9UQ2J2YlJyNU9aNVpyVjJxWmVwSExOT2d5d0pScmtCNUJXcWlqN3RBNVJ5QWZtQ05wNUlVelVZbjY1S2dIcUFXbktva2M4RkdvWnh3OFhtOTJzKzBHb2pLRERTVFNaYk1uUHd2OUMyamxMZ0hxdUEyWnR6Z0NNOG1nTTNVY1BHalZFNndaSG5jSTFhcGx1VzFqdWJubEo0dWRiSDhWSXRzUENxWHQ2MURtTVNiR3VLZkxjYTBKUXV6V014V0dHdzNMWllGUXBHZ3F5Q3A0OWxuTFZHcG5rQmJoTGNGbzYrd0Y1ZlVKU1RieWZmTVJCOGxRemlKRGxLUWhuYS93ZmJKU1BENzZMOGFqS1d6NEJhWndiQUV1ZVhmbUFNV2Y0M3E2aGdtZUZaY1dQUk1qckwzbUs0QmlZZTQ3R3k5M21MeWZFZlM5S3ZjSnZTbFV4Ny9MQVY0Mk4rbUI5cW16ZGJwVWRVUWtvZlhwTzMyTjYvM3oyZFQ4bXFsWlZhOVlrMUFhNHpMbElZeklkczU4TFduNy9Ca1RlNG16YXB1TjJ3MWY4SkpvTnhEd0cyVVJxZlVma1ROZklBdHFPRlJUUzZ5UUJPclJMSzVSV3BBRzVkU2R6cHdxVXdjelkzRDhPZ3BTNndDOFFDNVRNVHZzeG9ycGpuZWp2UzIza2dBekxlMDJnN0p5akh6YUIrSjRxZmNVdHB5TWVRY2xadXJocXpobHg1cTNtNXgzMkJDdWNFUlJ4cHNHSEI3OXZnTENUd282aHV1MmcxVW8zWG9kUk5Fd1p0RjhmazNOeGlMWDVkZTVBUkZIMExmckFsRGxJd3AzUmNEMGxkM1hoYU9Id0sxYnp5SWdUZFJVSUxDV3RMbEh6Qnk0K09tRW9wbTVLM0dNeVJFV0RQVmxzNkV6OXllcVhNSS9NVXYxcmJwTWVGalAvSjU3emlJbi9KemlxaEZsM0NNeWJJY2ZTRFdCNG15ellVbDFycGswcjI0b2xEcXpYbUJPZ3BQMUtHcTd3eTJiYlBoZ3Vvd0hnWm0xaUdTbjF6b05NK0h1c04wbmZtaUtla1hHTGMyNmk2bU9tc0Uxa0ttTHNMZjhORnRiRnlIMUx0TythMUVZcE9NaXlDNWZoKzNOd3VYWUh3R3VZZnVJVkFlSEZ5N3hyQUFrRWF4RERXbHU3c3RSclNkMnp2a0o1V0s1NzRNdE1qU1czS2RNd1RSVFFGaEs2dTJpaldpcGx3Si9jU3FOdWZqQ0NuWG1PNDZ3U2t5MmtibnNRU0RGT3d4ZzA3NmR6WWxNTDZUbkN2bGNHcTV6SjMwT0g1VldGYVI1RHFuUUlKck9WbzBvMUh2dHpwdHoxbHlXZlVNbW1FS2pRdnMrajBaa09scDFWL0ZsVEl5NHNucmlhWUFpcis0NFIzSnkwaExoN0tabC80NzRyZVMwNFhuc001VEl6VDEzdUdFWVB1NHN3eVRUNXNRTFpHWC90eitRTkRiRWVXTzNtbTZhSU5vQkw5c3UyWWh3VG8rdFBCTndjMFNqZjJ1MzI0N1FHSzBnL1VhakVKZkZzQjlSTWs1QjhMK1ptOWZKVjJCdjhDbitBWEF2bXZrNXg1R085aVlUcVpqbHZhY1ZUZEdMVFdPMmZ5UW9XK3BST2dybzFzMFB0TGFwazVaS0xub1g2ZjdGMVl2SEI4SUpvNjhUMnRBVXdpaHhiT3crMHh1QlpEUVlkaHdiNzhDQnhEQi9vYnVWME1hY0JEenVFbUVXMVdqMk9vK2J0VkE2cjVKczEzZU03WUVCNHVGZmRiZHMxVk9sWDVkZ0dYcUtCV2dNRlVNdzZCTlNGS2dQY3EvVVdmQksxT3NXcHIzOThubDVwZU9yK0YwZGNZV0w3RXovTUVtckpkS2tsS1VSUVFiakc2bHF2L0l0ajNwU1JoWVpkT05xMmJDSVI0Z0lxU2k2VSsybHEvaHpZazZFMTZGTzI0TmZMY1Y0SUhGcjlscXhoTDRzNlA0eVFCc0JlOCtjRTdUOVRsOTJia0JzN3VNdUZ1dGVtelBBZzR1YnBGVlRCYmlzMEZFM3VRMis5bUJ3M0o4RG5ZYzNtL3FWV2llcmpBM28zcHJ1dFhZTENhQTFSYnJJUjFkMGFtYlVGWGV2ZCtPWUZNV0FQblFPMTB2UGVtMVZHKzFDYytmWWRMWkpmNUY0MnU4U1BOa3NTNnZuMUhyMmhVeFluMThSSFNBUERLcFFZOVk3NUhRT2VxcjVFd0hDQ09JODVneFVlclAwM0hzbndRV0ZUWEt1OUFsdHJNYzNaanJjOFMvaEtrSXVIT2ZDdnBNdTdhQkdpWUpOQkNzaEVONXVxS1FpcGE4WWFzblZML1FrM2NXSGtuN2JYckQ3THQrNFhUa0RMSktzZkxFZzJlbk9JQUJRbGZkMlpMbEVmektvZTdZOHJ2M09Na2duSThlSEJ1SDAvT1B5SEU4ajVBTTJCcUJDZXRPNkdaZ1k4aGg5QmVZWUtZeldoMnh5bkVvMkptTWNlS2hBeTkvTjJoQm5GUDczempKL1RXS2VKMlpBUzdIVTRBY0tzNWtWTDNNODFKMnNSTEVrenRUM3RkK2ZBalhWc0prQWFocGJFb1F6Zks0QTNQWE5xdzRxUUJwQ25ZWWNzVmt0SlpnVXFndmRrUzRVRldwR2dHaGJmUk5QQThJSkNGRVJDMGdvWk5nbHZ0M1JIN1pwSzVrVmgvU3FvQmRoZjlQMjc3cHovRnVxa0lCUDEwNU9aYWxiTHM1cnFyR05zMjRZLy9pYnM4RXRpZ2k2ZXl4amdsZDl6LzBCZTN0Z2RYejQ5TEJKQ1JQNi9semdaSFlrRm9jOFo0a094MnNhUVBjUmRVZjRTZVgzKzBsbTVSVHZSQ2EreVVWZnJpNUZuOGZSR3BualFkNGZGaGlKUGorOTRONVRyc3hEa3liSDJFZ2M2SFMxOGVoc1ZPYW9zNkM1MDJKcEc2YnJmem9lajQvV3k4YXROeTFwRmJSN0lHckRqc3Z4L1JzWWhlUS9NQWNOcEFBeG1qbGppUjFOZmlZWUc4STYvSXJDNXVjT2JISTgvdTdWVjVpMG5Pb2pQRmtNZmhhSjJwVWFOUlQyQ1Y4dHQxelh0anA0a1hmZUFoYTlvYTRnbU1QUEs4T3RsMllQd2tNc1hQaDQvcW9VSFp4dWZjcmQwUHR0dTEwU3NSVGpOMVQ4M1FNS0VoMXNoOGJybWFzY1lkcTFRbTBSaVVSK29PVkxxb3F0RkxnbmNNQks1djVGaktpWkoxMmhlT1BPcm9QWTg2MGk3UG9lTXRMRlljWmk4OTBYU3A0c0J3OWdHRUVINFRpWXJFMEdHL09JZm4wdXN0cUdYdFhtWXFZZzJ5UDg0eElJKzNRdVJKNUhXQ3V5UUl6blR6T3FFTXFPTmJSYjFNQWdPY3dIOWtwVjdSelo1UGxCZURnM1F5RitUTjIrM2F1bUo1MUZsOU1zQkhxaDNaUWlJVlJyYnlXMDlUaDcvRFJDSzlua2RaZzIwVnJleVZQZDRicDVQZWpSQnhVdEpNZzE3WXNKK3RsMnhpWXczL1dWNGNhbkxESnZMakF3bUVOWE9RTktwczNUUzZlQVhVaGtBNTdEanhtWG9CRFBsdER3VE56TkhnV0FET0NXeGpZaDMwNC9wWDFOMThJLzdSVVhtN2l1bHR1RFZCam81UHBsUmlOOGNOTFFkL0RkeDFyejZWOVRtYkZIRmhJR3hpRC9FNFNaSTlOaW9Ka2VGSmFaK3VZTkM3Uk10UWgxN290QlhzUWJsQThwYW01T1BzNWhmcUl5UFhEcUNTSGdycHhwRnlPQUNxRHVmTlR5cFhYUVFlVFhzTTQ0cGJ0Q21WTklTVk15L1o4S2F3RkZ6d0d0dDdUZDhNMTZsbkVOei9SNEkwTXd4dVdzZk1hSm41RVd4aTNZTXhYYTY2VEJPMENlNzVVWEcwbjBoSTdxQUhJUXV6S1ZnTnp3WjVMQ21Yb2pQVkNPaDVBb3VBQkwwR0l0Q2lmVnI0dVRRa0JqS2JqeG03YWZLdjhOWTZua1dpZ2hKekRHQmpobU9xSjJHNkw3UkpKa3FuSHRGaVZ3Ni8wNXB6aFE4SVQ4aEdJMVN1UDZtdWVlVVNwandJTXd3QWpzRFhSWlhhRjBDRWlqS0tRYzgvSHFpa1V3SysyQlpIb1djUGd6UnorN2M4UjVxSFR4UW1ZRlN0b3Q0U3NDYktBTjZvMDN0UU5teXJCNG8xSjZQdjRsN0htblNwLzUxaWNPUHZlbVVyRC8wdDRsbFBFemNRdWZxeDlWWkpHM25pcDRoV3JZdmE5SFpURVhEeDlMUE9QZVhzVy94MnY2aFJLdlF6SHpZZkpvMTU5TUZvN3VLZVdKdWZsZm5OclNqYUxlZlllZm1QSkk1c3VvMFh0S0U2VlhIQVczSjRpVVAzTTBJZ2RJcm4wNGhaUnhYMGswZjVHTE51T3JJdDhaU3JKUFlyWGs3RlluT3A2UXp1U1Z3WWZ4OHZVSVV2cHRoaWZXcTFuY0FhNkpCZVlaQ2dqMFhWd3VXU3lJUktkTVR4WVcrOUk3bmhheTRaTjJiSExpR3dHYWZjeC9yazNaTE9uL09QM05tak1Wbld5RlZUa1BXNUJTVk1Ub2RYTWxCRUkrSDcwNnAxLzVvM2RQODJYRGFOa3MvSElQV3pCVHZFUURka3FGTEovUkZpNEpiWmF2c2lLdnpaVVdVYUVyVHJhaHFhTm1NRVRwNmxRaUVMQmVhbzFzN2ZKWUhSNmNlMWNIQVYyNFF3OXY3L09qOTBQSWE1amJqajRhVHB2eWgrK2RYeUJ1aUEwaU1WVjU4RUI4TFhhMXpiKzZzVUtSUUYyYnV2ektZeUNnWHE3cE9TeUtyN0dXZWNqbWhsdjZyZUh3SXhuTzcvc0pGa3FCMU14UHh4bDQ4bkFYbEtsbXNET0Z5d0R0VElxdnlMa1FnREZhS0kxektrSkVnMTlvOEdoRStqZVJFc1BsM1RkbEhNTTI4NC9tYVlsaS91NE1xK0YwUE5KUXdQMTZBQXpBRU5vdUdOSEg4amt1cTZ6NjJkSTNQWVlNYzJrSExnYTJ2SkFnK1l3bWVMWU5WYy96UThZdlVGZUNZK0JaYWs1VVUwNnpiTXpNQ25TNE9CaE1CWFFINWUxeFJFbDVhbHB5c2lxM1A3Zlg2N0Q2ZmFDd21PVVRMM2lqYkVOY3pFbzFod1NvL1dXTjFMZVV2aXZsaGx5c3EwSVU2SSt6OGI1bUNXWmpKeVN0Tkx5NE43OFZBSGVyWjFJRmJmajErMW00akQ1dTFGYUN1a3BvWXBJa3VQWmExVjQrdFVFVTVQRjlPU1hLUVZUT3piZHQ0R3BrU2txS3dRTGhQZjV5RlVuY2V3RVRoa2s1NUROdUJXVHoxcW4yK2lZdmdibzB3RTZxYzRCT00xby9ra3Yyc0VUZWtCRlYwVWlpV1dGYzkwcGVhVE1vaWoxOEQyZ25wcThDdnlvSStKYk1RbnJicEhyWjdCQlVhVFNhekZub2g4Y3dsWHpOcU5EcDJvQ2ZpYmNMSlpKZllsWFNIcDdscXV1cDh6WHpialJaNDJQclBwMm9yM0JqL1JnLzVKUW9IRXJPdVE1VGtGYkxqaHFBeGF0N25aNXhUcUdINzFNSDNlUm9OcTYxOWpMSEhEZ2kvOHRXRi91NGVLcXV0a0dCbGRFeTN5ekNUbmE5YTlrb1ZvL3NaTHNvYmlYcmxTcjNTNjNCWGRVZ0RyU0pPSjZvUTVoT2RCbmRSZFZGck1WRzBmUkhTM0xSdm16MWJVVk1wQ0ZJMFg5eDdBaXRibnFiT24zbDZWcyt2b2plVmdZZGU0cGxoZEJMOWZyeDBpeW9vdFUvcHNnZ0JMeGEwS1ZTc0lIS1MvTE9EM3J6MFN3L2FxSjhxVStCdmlwcUF5VFJXVWttcWNtTFdpZEY4WVYveVBEYWVoWUwvT1JtNllXa1Q4OThWTTI5N283aDdjWG8vcjlxTEVQRUt1Zy9GMXpka2VVNWlDaVk5RmJJSmtMUEhNVCtMbVp0eHh0MCtMTE5SdStIdkt4TjVNVXUxdkVpZTJTbVJkdlEwYjMvUlVSNGdqWjRHdWVvUlJucUZ6VVBvRDBJSDhyaVMvTWs3cVdtSDlFNGE3VnAxUVdPekY5WFA0bGNuYmV6TkxpNU5aeUQ1MEVETm8vd0RqRHRFL2IvZFY5WG9wWTZleUpaYVB1R0xuUy9KT3dXWDh1N2hiWW9Kb1FJRVZnNUZoZ2o1QVdBK0NGN1ZJMmFCLzNubEVQVXBzRGdLVUt4dkVWOEFpSjFoazF3S2crdWRpSXlueVRXYUV3eWp5ZWIyczI2bUtINGZxeVpiT0ZWRVNmU1ppemVlREdBSHFaUk9kRlBDSFhLVlVOWmtvMTROQUd2N3VpU1Vsd0s1SURURkxYSTN4N3NUSkJuMnRDNWoxYUloNzhtR3ArUFNzcFpBMmlhalZuRUhvaWkrU2JJMVdIYTliTzlIeU9TcjB3QjZUazN6VFZaM0RkK3hqdU1pVVFaR3ZLQlpMQWVFeWtpd3NUTm1oUUI5cmIzcHdkOXh1ajR3bmh6VE94QW9wUUhrc3FsRGtkWUtFYmluVnFMZ0JRekRNMU1SUkJWdk80Q3pPeVAxOXVHT0hNUGdpWXYvQStjUlNpcHZzeG84WThVS3lIVG44WnFSb1JVVWw5clZvMTVoVWVBeXFpd2N0aXp6ZEpzYkdoNUpuZHgzMlpJbURWQjNUR0lsYTkyS0hLK01WdjhJNElHS3BvNWtLRWhkMDNrUkNqRU05czE5VGZ5Ui9NZGxBYnZiSkI5MGJEK2g5ZXAxSzA3Ry9yL0tybzB5dytBWEpjMmlSWm5uL29Cd3BvQkdxNDFrODBOMGpJVGZMN1JpQnh3MUU5aHN5bkpZa290MTdjeWtsclM3Z3pXQ3pub2pLajM5TGZvaXppQnRHZ0xzSkk3cEZpS1JHajBQTFBFWDRzWkJKSUFMTHlEdVVHMFlkMi9UUUZpYUNyL0xScVlEelFLYTgvd2wyT0FOWjViMGI4dHIyZnVkRkIwUTEzR3ZHM2t6MkU1c3JPN284OUhuRXJKazcxcDRlSERxYTlFbmcvZHNaSUhwVTRYcnNzOVFXaU81R0JPK1lYc0NYemJWb3hUTVAwSGRJZGVVem9tQnRaSXc4OEtyL0F5Z3VJZnFPWUJ4bmNGcHFFbkpVN0JtNmVpQUp6MnJvc1hvc2lIdGlvc0NZSGltMXRiTzgvT2ZEV2FMeUF2MFhtdGg5cFNRN2I5NlJqRXgwTjlOMGw4L1ZwT01LZzVSd2FFMEpOUTkvdDVOL3lRVVlGZC8xSmlQcG5hMy94RmpPUFdheStPZjRlQ2lMVkY5ZUttYS9uTXdrejdmNG90S1FuV3o0ZFFwY3hRbWJ5cGh4aGUvVXpEL1QzWnY3SGg1YmRpMXZqYmVab1B2VDh0L284b0l2eTBqLzJUdm5HNDd1T0Ztbm9ITEpzK3FOYlJIY3M5My9uLzlCcDAwWC9BVU1oSGZraUx4dktLajBsMEhBaXVCbWozRmxxcVJVSVQ1YzdwL3ZDTGJwaUN6YmUzemFicXo5WCtYclhkWEpCZnZpRFBOWkZ5ZkJNNEdtVWZTT2JIYkYyb2EwaDY3VGRybTZudGtjaVZOTmJKck5uTVZONXo5cmU2NTdyQTdzUFFEbExZTHpkQ2FOSkVWM3VhK0l0R2IxVlF0SkdleVZXaWh1M3hacFZ4QWpURDRLbmtLcDlaU0M5MlNjdVFuQ3dYTTl5VUNkT2R5U3hkR2ZmY2VtMkM0TnduV3U1Q3EyNTJiY0tNOUNUSktaVVhGalVGSk5qWFducEorYkhlcDE3aUJlQkFQSWxaM3Roa0VUMmxia2RoMnFEZDdSYmduOTl2d01CZGozSFdJTVNmTkhiN2hEUThGQVREVWhTak1PZkxBV2lkSXVyQ1cyb2ZJTGlwNTFFcDFRck5YN0h3VUtLbVlYMjZmaHVxWGNnTWNkd2RMaUdXY25YWlE4azRhSlpzQlpPOEhWVHFYTGRIdGZLeGRKVmdIZDVRTmNha05hKzVIVDdNdDhNTFZjZE9xYVhUY3R2dlZVaGNvUVJ4VHVSNFQxU1JadWllSnoyajc0Y29UUDZWQUpINGcwNlk3Q1FHd0ZVK3lHWUd3elA5bVg3Nzd0V2dmcmJ6NEptK0FTMjN3T05pamZCRzV3dUxTdnhvQ2lNTlZuR1ZIWlNTcjdBVHZyYnlVNGRnVGJUaDRsWFQwOTdWM3BFVVF2UkJzaGYzK29TSENXVUlFUHNGV0JBSXNuUXRGT0pZVnhoYkxzZCt4SVFrMm1KckFiS1JvZmpoRDJhcnBOWmRPaERnMFZrdDkwbmtRTCt3VlllWHducUVOY21NM3p5TkFjR0RMaG1GaGwxWTU4NVdxWFRqRHN6WVFpUHQ0TzNQUWJXaTI2Q2l2bW5PVmNmNGY0L1FzRzZsd2UvY1JVVDZXa3hwVEs0S28wQzhlR1M0Q2l0SEZNRGpSc05rK0pTMHJVOEE2NmtHTFRWK2xZR3JrNU1nRGp5WTcxUW1jczZ1SGJkUU5ua0Q5dElJanpaUjlTclUzNVMyQjBhbC9mZzZxNnF6TmdqUHdWSDdmdVl1eW5iUjdEQlpkQXFMREJLYjcrUHNWQVMyb3RQU3E2UlJhVE9YdlJLWUgyekRDVDcrSS9uRklaRThQUUVQelFJbGp3cUU0ZnJhbWoxUENFWjR3TjZNb0x3ZEFkTHViRWp1aUpialVwLzloMmNvRStJNGJRZnZtYm96TUY2TUgySzVEcHAwaGxvUWo3c2NKVjNXZVIyK0swT1ZhZEhNL2EydjcyYnY0SGdSUGhrZFR1QklnNHhpNkJJc2R2UjBML2FPV0xxNk9XbWJjbnM2WXR4ZUdxbkNGa0hUakdPUlplSUhBUlVzZkZPVTdqSlUxenJuN3JXaFVHa2ZITlcyN3Z1UEduaU12VFF0S2NHdVVXMENhTDBITG15QlpjcTdEV2J1bVprWFhGT3hCaGlUZmo2UzZqNkpGY2tXaTNpMjJQNlFOT09UaVV6MjFzbmlMaXhlOStGbWZtdGU3d0t2RXowNDQvbXNzSERqc1cwVkF5UEZzNkh2ZU5XK1h1TGNvVU1tWmlqLzkvMko2TEFZMFdPZm1iUExCallSTnZaTU9oYmYrZ2MvdmlJV2ZwOW4xa3M1aFN5dk1FSzlkcmFhRWtYRWh5clZFTmRmemQvclgwL0syejBIMTlwaXBuVkl0SlpDQ0h1ZER3ZnZ1dXNaa0JqL21PeHBJNVBBNFNNRU5WOTMxQ2RaUyttL0ZBSXgzN1ZZOE82YWxwQnRFSS9Ob2RNZmxiN045Yy9DQnJrT0ZYOWYyTEN6dXJRTU5LSlM0VFNJcGQyc1ZsRXZJTjFHTnZTR3pmVzllVi96aUtRcjVQaFJLeFU5RG4zaGF1blorditBelBaV2JlZ3NyS20xNytUNGtrQkk2S3RjalJQcjk3VGhrUlBZVVdGWTVFR2hiZXFGVXcrN0RUZVBRUTcwdlBZTVNjYU9CQXZxWTNETDdlRmI1Y0ZzbHoxYzg2ZXZESlJZU2p1d3loWm5wYXgvYndvVzRKejNEUEYwVE9XS21iSHo5ejBRYjFGaDcxRWlneERLbUFCMFd3SlRMZXExcCtOTVdUM2ptRHNGL2VKOXZubjJkbS80aTRidVNOb1V3bmJneGgwNE5CcU0xdksyK2VlY0NGRng1d0trN0hSMThmVjJrN1BQNCtEd2ZHWnFEL1VrRTBvYllyWjVzWEZGQ1dBZ0ZvKytTaHM1bXJKWHY2dmtqRGlScFVncWFLTlhkZzFVd1NEeGo3NjdCd01vcnowdEsxVUtGRWxFUG5ISXoyQUxraTNyUC9PR3VheUlxenAzc3RYWEE1czFreVpMcmdoRkhzVzlwL2NSZnU4VXptamNYSktaSm5TVTBiZnRzL0NmT1VQNmgwbDQxYThpVjRra1JReVRQd1Q2OTQvWFI0MDFscTVNZkxVZFpHcmRTbElEQkQ1Mk05cFkzd2k0M0FnV3QweGE4SUkybVpJQUYzWXRPQmlOdDJGVGU5OWdyL3ZhTnJWcnBBMkxneWcyT0U1MFhydytSektJWndVa3RIU0VEa1V6OTVSUHhkb0hpR1NoV3RoSXVZem0wVDZzQ2YwWmZRWjI0MTdINzJENE5xbXhodUZtNGQwa1licTFXVmhyNUFTNlgxMEVXdm9SUFpIbHJ1aXZ4Tlk2Ullucm1TbEJMM1orVkxwZHNRTjAwK3BSa2xvRXhBd0NrazZHVTIxM0dEV2lVc1pQd0J4OE5YcFJsbkZqZE4rNlYvb2E3d3pFY3cwZ1ZGQmhOWVdQNTVacUNDTWtNL09XT01OQy9Wbko5K1kxWE1jclBoNmlYYkdnNWdVVU9hWlVZM0dRdk83LzRkVXYyRGNmTk1NY1BTZXN1c1ErRGpRYlhRTmlqM2gvRmQvbitTQ0F3RU9JNTZ0YlpReDB4ZjIrdG9VcTNieHhING41QWowZXhKWHM2d2Y3dXRoRWs0VWdubEIrc2t2cVBqalB1WEp3V0tRWlo5aEZ5RDRtNXVzUHdoUFBaa1Yyclk5QmprbW5Ta3ErT1Vrd2JhbnNjV2dMWG91b0xLM25rSitVUEEzOVVEYWFuZklMVklqeEtldXI5TExaNnFseGdNNytDMm1uZFE3MHozd0Z5ZXV5dGhWcHdHRGZ6azJEck9xSXlYK3ViTUkyaEdpREFUdnkyY0FSbEtlR3hZb2ZWLzBiZURVbC9MQUFiMStxTWVvY3N4N09UcEhKekpGNjNRV1hiVTBWSk1CTE9nQUI5bkZURFZMTFJoMW9vR2VPVkZPcW14dUNUcThsRDNwdEVHTDRQeXVGbTNhaWZPYlkyVGlLT1licStXRDUrRW5jZ1ZEc3FvRnk0dFA0ZlpTQXg0UFpYZllJOGVrbGxoeE15bkVmQndPczA3RUlJWm5pTExJMFJ2Rm5pckswcWYrSVZRYit3SjNJMEVqZ2ZSNk81K2pFRThFT3RZMURLT3cxZm1ubFlna3BBb3NHeXViVC9VY2N6aWRvYjc2ZEpwY2J1d2Nsdys4TFhNQXhZTGNUVW9iSzNPTUNPdzZMYk8zSTlpQVRHNElhc1FOZ1ltcFdkalNkbmxQWHd5aGIvY3VKQVd5cmdiZWhVZHpjRHhvdUx5VVM0blEvMmwwcm5nS1hUVU43ZG8weGZhWFV2eHZERnB3SjROMzJaMm91RGNOWG15L0F4Z3NBcmdxRVJVWkM4RysxUXR0WVJZazFwWDZPVW9Ga3JjMlpRWTZsY2NPeUhiejN4YTlnSVhGa3NSeFU0Nm1ETWpnZ0R0R096b0xlL1NIS1NFNWJFT21rdWNlTlJDVVNLUkVoLytJbGQvQ24vTE84VWRMNWV6QWw3VWN3dE9iN3dtWFVDUk0ybGJMbW9rVlhCK2wwV3FRZHI2Q0NUT1p4SU5xQ1Yrb0czVXpHT3JrY2hrb3oyUlpseDdhSEc3RCs2c2pjWFJZa2hjckNHZk9pano4OTZhRkU1aDEraWl0clF6anlMQ2lBWGd3YnNTVUh4UUp4cTFra2dZZmU2VmgyRlFTbjkwQ3d5ZU9ZTU1vRGdNUGxURGNKTTFVbTlYMll0eGtTRkdXaTgwOEpMS2ZSZkcvbmFlOFA4djBUUEkvSHlzL1pGUHV4aS9OMjA2NjdrbXpCSkNKVC9jaXJCWGVCSXM0SlhrWjlJK21BUFAybTcycHpwQzVscDgzYUJCOTBpb1JDTUowV3RSUk41RFlHYmsxTDk0T2IrNzNSWkhhc3MwOXdkM2IyWm56ZDRIUlU4V1dQYjIyTXk1Mzk3cmxpL2tiRDBQNlRwKzNXRUxHc3hUcEFTRVZldzEwUlJIU05NZTVUWEozVUFJaDlCSms3a085UFArb1VpVWNNQTBla1grS1JaRC9qcVFIWGE4N3V1OGNOc2pkYzUxNUlGb0VvWlBFZHIrdjdGM1A5NGZsc2kxOTBPb0NjNXQ4aFZtaWJRYmlrT3VVOW5rSVpDVDIwUnBMdFIxUVBGeUNGMDE0L2FyVi9IdlNIUmJid3dJWThQaXpCSnRmOXdBaHVhVERMWGZzNnhWYVFoeElUUTQwVlhKcFJFd01GSTlCNmdZYXYrQWw2NUtUM2dDVnRRSUEyRWhhamdWcjZWNFR6ZWhpZzdNVnlGV0ZoZWlaQk1MQzZqdG9LTnFIUTUwMG9wZE9reE1VZGZwM3k2bkhvNGpCS1NwRjB5cWFtUXRSMnJ1SlZ2Z0EyaEtZZjkwemFwTENjVGduSzZDK1FFWFlCOVJ1c1pSakJ2RkhqZWdrTFpMZndLeUNiOW1CTGNkelBMUjZsVHI1aFR5NlJwRnE5WkllbFR4SG5TOGdqWWgyNXpnVWdBeGw5M1prZk0reU1RY3E0aXNhNDFWREY2Z2lpZWh2c2tKMFRRMXEyaFJVbkV0VTlNYjB1RmNCd2NWNUdIeXd1RlM1UzNBVHhrQWQvdFRwN3hnWHMxVHBSQmdrQ1dRdUR0TnQzWnFJaWxvaStjZHlxYUxwTE5XdXh3cTJUU2c2RDhLUjJqSmNxOW9VK0pYUVFub0l5eTU3VDZRUW1VR09sMzdkWHkxYk9oTEo5TVhFZ0tsdjFlMFBCUnRTbVMvSVRPTy85dFVoc3hxajBZMUtOWWNVQlh2RDd6V1VEbEQ2YkpFZlp2bjd1Nkx1clUzcTFqK2QvMDJFcFpYalg1Ym9zTUt4R3dKQmd6QUR4T2pWR3FWVUx0MlgrWE85eUlzMmxoMzlpMjhCRmFZWEVPay9mSmIzOURjT3B2WWwrWThPanlCRVhYOFFsRUZqeDV3dytuTVVOcFVQeEh4dzc0L1NjMzJ5S3BMQW4zY1hRWTJWdG9mZlk1aFQxb0tVZEdFSWZVRTNKWnNORVY4aERaUmtRNFRoR1VTQWw1SzUyRmhmT0JtaUY3Q24zRVAwNEpLSDZ6RXZ5NUpRQzhBN29sWmJ4bzJlZVdUK3M2a1FPV1l1bkJIc0V6WEx0SEJ6WWVpbFNmYlgxWXNMbms2TlQ2OFRYa0h3Sm95NXhjVlNTR21EMDRBcmd5U3luK0ZVdWMvQ3RQcGRiN2ZTeTdsS3c5YmY4cWxFWi9QTWVPTjhDZkk1TFBySUlPOFd0cFAwQ09nb2hWYkIrZGRsTjJ6TXZkZTdqYjhPSFRDbFBhT1d5T2VrTEJVTU5zQXBVSjZvdlpGRlU0ZE4vaGYrQTMxRnlseXp4d1VSeFN4Qkw5M256dGlXbWNGYUpXamtGWXR2Z2MzT1JyNXFKK1VVVUZMQUorcFgvY2MwVmR5ZGVwT2dGQXNqNUhTbUZlVW5WWHd6ZE54Rm5yeS9GMi94Y1l3ZDBNY0c3aVVVUUFqU0VFYVJNamd0NVYzUGQ0OGowb1gyYXk3Szd2bWxvcm5HTnR1a01Kb2xyUXNzVm1LMmhpczYrcHpmYXQrUEljT3VIUndpUDF6ZDVnVis5c3Z4QUJxSnF1SmlyL2RTSEY2RnJPa0dxdFlFZUlwMUhCU0YyZU9rT2pFVGVqQkhhQjFoT2tRdHJRRk1XdnhLSXo2MmNPOUQ0QXVOKyt2VFdnengxNHhFdVBvd2U1a2kvczNSVVdJWXVjWnY2S0hST3F5dzcxVldmbDVpUUwwdHZvcGQxa29obWM3YWc4QW9XL0kzdmJFQmR3OFZkKzlqaVFPaG1IRmROc2ROVGtKTTdUeVFONVl5OXVDSUdTdWNMaGd2QVpQUFhkaFdOaTZmckRBbWFTSXM3SXBGN3VML0ZzczdjRDBnWkRtMjRRUEFlS3NabGVPM2lyZ0FJNGJNbzVseGM3dm1kbkdabEFYKy91c3I4ZU94eEc2LzBzM013WDlKWjNTUnVaVm1yWk0rVksxdVBURmtKWUJTM2ZLSitoMVZnR2V0QnF3ei9SNy9FL3pRcjRvSGRRSDQvNU1Mb1FnTi9NcDIyVUQ2c0tpSWY1eU9jYko3R2wwbVRDcnhYZkZsbDBTbDZoa2hudmMrZnBaZDZJaW96RE9pV0x0bzZMZUNyZEJ4OEFVL0ZrcnV2NnovTC9TY1B2VjdxdFFaUXVMZnBwSFU0ZXZRUHRXdnRnYWxHdzFmWndCSkFzdzM4QTF1eGVaWTVYbWxuTncreklZZWFiSzgyVnpSQnRPcWZDdW5mb2x2aDFyRng5cHM3QWhZaDdFcTNuUnc4WDBtN1BhdHFhRHJHejl3b3hmL0tMcklTQnczUEtCQVk0NmJUdXUyUzFOb3hPTmV0VktUSG9XRUFtUHlxcTJmMmJOUDhoTUw0blhmU09sY0FHUFNhTVJGUzkxRWo2UFh3RWJvdkx5Z09IanlraVZTTS9SQTF2L2NwWSsyUlZhNjMxMGlvaVNvMVpNU1I5MHVGMnRmNlJCUERCTnFHUXJ1bVNzM1poS0YzZjJIVFdkNThWd1IyTjRPNHpPQXFPSkZBUXNTUWRWeXNMRzRMRG0wYkJaLzlSOVJNN1MvU21nVGJTQlJLTVF5WWY2WEl6K0Z5dWp0aEprdlpmWGUrOTd4SSswRnJ4dHFXMC9jcTRjSUpnU1NGSlZHRDFHZm0vV3l2KzhOOXRSNUhCZ1RNQ2YrMDBkM2hhYytxampXRW1ZV3lIeGs5UHFQczhiTDVYUGUrZWtJQVVsSHRPR2JJQ09UMW5tbHFvMmdmNytkakhpUHd6Q3BDUkM3TGVYa3oza1RZWHpTb3F5c1BTNEp1ekhBM2ZxaEFJRzJWTWV3VWQ2TTVKQ3ZFeTNyWkNwdXYwOXB0T2xPb3k4RHYycWg4R2pWMktpdmk2S1RGQzBwVFM3YTNCbGNEY1BjL0Y3U2RJbDR1VUxTMTNWZ2xKc1hXTlRVMExTN1dwQ2l5MG1uSkk5dy8weUdJcXZMMFBlakRmQ2RoSVkwaVM4NkxlN2I3NURrV0JuRFdFV29vUzJmZ3NWQ3J4aHk3Umx3NGV5OHBZQnlaUzAxdndibHNHRW9QdkdPcTVKSmNpRUNZajFFVHN6b1pxcjQvZm5pVFBCc3JYd29tOFlnZXFmR25QUFA3L2YxQm1RaklWcENtak1DczVBaXFxV3dhbmxKVnMvemhBWFlzVTQ4WnFyZGhCVEw2Q1ZHWURSRk9iT3J1WlJqZ1BoakVyMTFyQ2J3L2p2aEt2TG5sZUtqVFRqMXp3N29XZk4xM1BFRXpTRGwvaElhbzFrcDJDTEpBNXhKeW9rN21qZnp6cUJXMEhBNGN2d0VkUkdTUVNoM09kUG9sMDEwZlRKRFE5RzRnL2poRUxreFVJQWpWS0F6bmcySUM2dG9vTVRqSFJaaW5ZajQ5dGM4dHFqU2tlTlA4QWNZK2M4UzM3dGswV09qY1c0eitxMGxxNVE1MzJubGhCRlVKMTNVZHJaKzl3SlVoNjh1ZjBMZDZCWEF4czh6cWozaHIwWUsxZXMyc1lrQytYemszK3FISmF5TXdRNjJYdFhPOHlHaGZoUHZqeTI3clp3Y2ZEVWNmbGoxeDhwb3dSQ0IwZ3VSQ2FoL21aWVpIanRmdmxtM3ZDMUd3R0dxbFNvVGZLeVErRGpnblozeXYrc09YNEtYanBQMlpXM1l5eHJLUnV0Wmlja1ZGQXlVNGlzbkJGSHdiTmdxYmVjWmh3WUZXT2RnQVI1aVp1NXlLa3hKYkF2c0RyWk9DMXRNTDhSNGJvTGYwVnRKcVNNZTNJRUJod0pPaGl1Znp2OVd5UmJZbHNYUTdoOTJHR3gvdEkrL3BGMzN5Sm1GUHNUTk9SRW01WFZDL2dpbVJDZVlyL1hua3dWRFdSTUdRQzE2a01XN0ZSY2FPZDh5bzJQTkMyRU4vOWdWdGtZU3lNZis5ekdXTHk3OE11M3N4cVFUQzIveXpRNXFwUjdIelB5VER0cDlhRFNKK0MySU5ZZE1zcnZVdmZqWG15U0phWU02UXFySEF6UE1hcXk4dnducml2QVVzNnhtSkVDMGtoaTlubTIrdXZ1UHVaTHMyK0F0T0tjbVFxV095TjVJMVVyQWZXQmZFS2U4VldNb0lHTkNkSzN4ajNGUWVCN3Vyc0YyWElTTVBHZzdMYk5mbGRoME5ZL0F0VVBHSVduczlpS3diT1BiQnh6WTAyTk1kK3d6U2c2bWo2eXhQbVNxUUFjanFhSktyY09kamxkbVRORHdQd3YyeGtPcDlva1MrNGpXS1F5MVd1dGt5ZHJXKzlMbVlaUWcydllETUg5U2tPQkY5WW9qUTFWcW00R1JtcmJXSjVKR3hqUUhIanV1cDJuWWVKOFJITGdLRTV0bVpkdTdHbStuVEd3cXN5ZzJkeHBEaDYwYzYrdVZ1UVpQU2o1aThyNXM3aGxnU2JvdXJBdXRUWUhadnlQU0pTQ1JIQkcwK0Y5d1JUZXR3bzk5OFNhNkt0Z3A2Sk8xMnpwMmlwVEY0T3ZiNk4xaWxNNXVKbGpKVHVCL0psUFd1NXZENVdYelVaNFdEMGpNb1VMa0MzbUhtbjM0SFNqVnk5ZEI0S2JDYkhYSTJ4VUlXUDVKZ3oxV0ZQanl2NFpuQ3l0QXdDNlVmRTVZcS9ZWXBrTGxWZTVFdVovSWQ0dGh1a3d0eXUwUlVXREp0NDBtUURWNmpaUyt0Qlc2UGtwQlFuK29oYWhxSmJkT2lMUUpGUlV2RkNEVkpBM2V3TGFYN2FPS2lXMEg1WnVaMDYvVGZ3azI5QnlnL3dYTkN4Wi8xUXptK1ZacjYvN0Q4K29UUXAwem1IcTJBWlFyMzk5OCs2NldacVVsc0hIenFucG1YN2grMnJFb0IySmRNM3BzN2x1MFc1Y01TcUtiNCtsSDlidUovY1pwNWxURjRXVlJsSm5rbHloamhuaFUwWHZkbjdkeUZicnJFYWVIVU5EK2lwMWRkRm5hQzFTeGVSVDBsSmdGeWVNbGM5QkRpWGd5bUlqRUFkZTE0RVJRbVluOEZ0NUtkL29zUm5JZzRTU0E4L1hsNnM4c05HaXdiU3ExYVNLWUJOSVlNTlJhQ1ArUkJBdE5pSXpRVjlmZm4wRExrclhvY0xkZTFvZkV6eFhPa3lDU2NMVEhDajFsRWRwdHFiL0lJbGlNc2YyUnN0VHZmM3N0eXB3eWExd0h0Ny94K0RYakZJbXVHWHFNdVpaZnN1N1VOQVBoT2NoVXdod01LSm9XMGwwaHgyTS9wdVcrb3dXVmZ5cFB5OWpjRCtLcXRjekZzRzlTV2lrNVpQbkdPdzR1QTEwZ1V0NDg4YVJhQmtiSG05WHpPZ0xqVTdiT2x1YVl5UEhMeVUyTTkrV1JxVlVBSnJTNVNIVnJvMWhkbGc2ZGdmWGxGZkFlZjM1cXQxRWwvTkVGWXVGZEtWUGtzbGFPZmdDRnB3Q05yS0RHSGdyL2hMTUMwQ3JLaWZJaTc0QThpUENsdFZvd2VlWi9Ld1cxRTA2RnE0b3V6QTMyRjN2ZDM4MzAxRjJYeG93TmF6ODg5Vkl3WHY1STlBc1dDTE1TYXRNcUVDcno3dXQxUjU1K1ludjRpU2tVR0dENlpBUWZGSTVPaEZIQnZmSzNOVEk5QjlIMzhka0NiVWFTMm5oeFV3Z2huWENsb1VRSHIxVDFaWUVJWklTQkU0SE5KdFJHc014Q3VUOTlMWjl5MUcrQll4MWMyR1JHUElEL2xtWWJ5QVlEbXlCY003RUpEaWd4SlVoYUFBTm1PMFdTRFJaK3haWnQvK3h6UlNJNlU0Njg1L3kxZEF2dlNyL0xxc2ZPSS9zOXVRYk1YQXhSSFZWYVNTY1VaK1N2TXhST1pra1NTa0wyajF4WFhOaW9VUHYvVStvMjIwYkV0amlkV1Q5dFp1VG5EMnRTdk1iN0dibnJNVkNOaUJnK3JiTWJwVURYREZFampudmh6SVhKWmEvcm1VZjVEeXhid1lrNk9wclJxQ28zajFOWFBkOGpjWDVSMk5kWGtkSEhrbm9kb1N5aWlqYTdDOVRWSTdPeDd1dU9rbXQrNEo2OGlEMm1VK2oxdEZ0Z1FySWlaVjYyOFkrZmwzYlpjUDYzMWNGbFVtYUIrRnIzaHdMOWFENXZzdFhZS3c2NmFMbEFBZlVtM2xKeW01TWVxc0ZKV1pOR1Q3RldaczFOMFpTRDRJQWxDdmZHbzZ6QzZ3c3A1M3FiM1lSRUJNK3hzUXVIZ1d0OWY1d1JyUXcrcnF5MFVyM0E5TWVHMUlsNkZOallWK3VUNWt3aENSalYrc3U4UWZCS0I2eVVuS0p5czdMNmtZYjgrOUN2ZHUzazJuSm5lN1BVcnY2ZHhlVlNON0JOUUpEY2d5Zis0QWo3azEzZE54SlY1aWUrZTZlQklhR2hmSDF2M0dRdmZxODZWYXp3NmVMV1pkdCtnZUMxSU1teVJQT2luN2F2aWUzbWVtdSszTjhXZHlQVlg0SkJ3YS9CMG5lWFZEcUxGeGw2Z21BWnVnSlVXTC91RDZCWHFDWGVTZHpKOHA2ejRkb2lDdGxNRjBIZjJiM1hWdm9KQ2tJZUM2dWVCVlRPaWk2MlVCNHd0a00yN0NMZVFNeHNDZTVlcjFjdU1RQTRHQktmeU84RkZsV1RrZnFOenMvT1gxT2ZQUFJVclB3VWF2dVdNeDRDV3RBZEoyYTIyNE5EUlQvSndWWFE0SEg5azVqR0grazFUNDFtaEFQVnlLK1hSYXE3Y3l1eDdpTjQrMmV0VlpwZ0FCMlFNR1JET0k5K3p1MHpHRmsrZDZ0Rk5neW5xM1E3VlI3RjA2MUJuUFY3aVgwSGFzekRxa2ZNTkEzNnA0a2xxUHlsbjhaczdqSXgzakJrRlRtZmpEdFBETkt3KzU4R3J2ZWV3T0w0V0l2U1dFc0t0L2RJZ2tPSGhEVGUzeEtlZmI4RFVqUGdHRnBFOGxsVWZUUFpDNXFpaUxoT0VuRForT282RU5OZXZSUmE1ZzhjcE8rZXNlTENjNWNZa0JwV0UxSWRBeTBXdEpDWU9yT2gzYVhTd1JHSjNQOHRSeFlaV0FZUiszM1pGNkpyUC9RT0I5VFVBV1l2bW54b2NrdHNKR3lwMFlJWnZIYjlXalhOcklkdHBOY3pwUEpGVEV2eUtObmFJY3pldCtoMWQ4c01Ub2VXRDc4cGxCZ0xueEdVYTIzSHA5YmlDK2w0WGw1YXVXcjVQNUgxalN2MVdyaFlwa3BvU2NSRUQ5SzZaSlplVUtZSHRIODBUbWZWc0VRaHlzS21uUGVCZFZ1dmVpOHQrcDZwdzZJcS9hVWVZb2IzN2svUU1Oa1VVQ2pyQ3JpbXZnUWxYVDNZMnkyWkNnYk5EN0l3MHpYUklKdW9IdnpwT2J5akM5UVZkWUFWNnZVTUxybytYZERySHZPTy9LcmQ0MUN6eUVBVkNjUmU4cjNmY1NINFdSWDRjWmVWeUUvUTRVV2RyTU1IdzVDTWhsVXNudDlZWWVoWXN1alVmRkdMOWJ2SjZxL3pkQ1NXbGpna0M3NmpJMmY1WmpFbTU2dG56MnM3dzkvZXdwaHZQc0FUWVZhSUUzODlValFBZjFZajdFWE5FOTNVNDcwNlFET0o1dlVMZXRTckFtNlkycjI1NG8vR1BxdDhhc2tab1NRdUVIU2Q4OGxwWEZZWExrMVJTbXJRWFkzTktDRzFEUk0wd0MzaVpKTExERW84MzgxM0pUNnJXbkMzTUd2Z0JtbDJLejZUU3dkMXY0cUF2SWZXVEhCV2dtaVdyWEJjOGQ4UElZd3p5a2R0Q3pjMUdFUTdhWFNEbmZ4cFdERXZNY1hjb2lPVG5FcjFHNi9idkVhVVdoclByekVFZUdjTllxY1ZiaHl4L1UxRnBVVnpSSVl5QzI3MnRocW1ieDZnQ2lHQWxmNmJoQkdrRnAyOERDbXlIQWQ2a1BDZWNSRWVqTXRIT3pORHB0VThNWDFLZHg5amZKTDJjWHR1eEZoZ0Z1UmNHT0Z0TjJabTNqKzYyaDRLQ1RDMjRmSUlFRGdDZDNzRGd5a29FbTl6SVByU1V5ajlCMU56SGMzMkQwV3A1aEsxMFhHSjRiZGNKWEpSREJHeFQzcFBtNW1aWjk4RkFWNmI1MmZSYWlSQmk3cjhUbng5WEdLTFl1aUptTmRJNkw0VkFNRjVoMTZZZ1R0Zlc2eTJhM1JhV3VST1dmeHFxcEVCZDR4bXIwN2xyWjZQd0lyTXd0T0tXMVFxQ1VyVUJqb3UxMjE5OVZ1L0RzYzg5am9GRVUwZ1JENE1PRDNucmh6VHhUdWFtU3dQWS9hdUtvWTJJVzJzOUt5SlZkNXFHMmppN3VRZkt5TkNIWTBoV1RTWit5K09LV0tLdFYvTGlZSHJlcXJySDg0Ri9PSTNnakZ5eGMrMzVOVmNpeVNBUzFDa24rYnNIWVI2YzZxTVBiR3JxYXY0SXNYM21kZGJ5RFBDUi9oeUdMbzB3VHBIbUFVdVhmVXJ2ME05SDZyRXJBdHkwL0VlQXVKNElRVmpWRFlHTDBaMWR4cHExb2hjWU1iODdEdi9sZjR0ZTIyRnA2NnRvM2RsTGJIY2N0M1VPZVlubGhZYTNLWW11WVVuaGw3VE9RMzgzaklGd3RRWHpXejJuTmJvN3FsZ05PZlprYUcyN0FnY2tIT3Qvck9hOFJMdlpaSWJwb2RuTXZJc2RQcnArMDR3RG1zQXE1YXR0ai9JYjc3TkNuaTNyNmtZM0kzVGhPQ0pXSFBYS1NlemMyZ0JwbjE0a0QzUTRRZlBCOHVpbEFVRWF3U0htR0JvN2JUb2s1WXVxSmhJLzk4ZHRqSW9hb3pRVjNFNmhXdFJCdHdqZGN2RlkwRWFlVXBSZThwdWlER002QjY0bFZSUHE2Q21NeDdaa1g3M25GM1NuTFkxN05XMmpoUUNpdENDanhTc3l1SnRIaS9SMllCVzBNME5QTWx0dzk2aEdaOWRiYXNzenhZWDNDM0k3dlFjNWwzNTNuVDVRdUV3TGJQVEpkeDhvcmdlamY0MVExVzFUSjVyRzhvdEJKZzRqcmEzL1ZsWTN1anJwODVJOThpVWkxQWxZbXY5TEVSRjRrNXNFYk5aaE5uSitVajBPV1lrYWk5eE9lTUlvUk5FOG5pN3lDWHVzcUxzeEE4LzFiSi83NE50Q2RoQnhMWTdVeWkvTWRUU0gwdmZ4UEVaK1FQU3BpQ0hWcE1VTUY5M2dhYm83azU1TkkwN1BOaGlqcmtmVTNzcmc0c2FLZk1QWkFobGdVdWErMTNxdXpBZXhIVmlMTXFJZHNqSTQ3ckRZSElXd2tVUEJJV2Rab3VhQlV5VGx5V2IxZEZBWEFLa1kvMDloYXpESFZkRHVlbStWVnNRQnVyMW5MUWpGejBlK292bTlEallFdjhXY2VMYVhNRFpTMGRWRTIzOEE0djUyazJPVTluaWcvZWp6UUNaNFZPZTRhck8xaGxsS2Z6NHNjY1Z5NjhjUmh5MzlkRWxEZXNwYUhQZndlY2VXWDVKa1QvTko5d2ZWd1praWRFdWhEaGh5NTREMTV3aW1jTGFzaDJhRHVweUVqQnliZk5EOWN1VGtZeGZ6ZmIxbmljZTRLS1Q4ZVJ0VXppVFFzRjJYM3ZSeTEveU9HM2RvcEwvckRleFNYMEhQYUNXS2pVOUpKUXM0dnBsOUJ1Kzg0d3N1VkFTYzlOT3p0OEU5L3JlS0RreVVjd2dYTnNmdTVSbmplZk5KaHY0ckVRMldyNElHdWtyMUxLU3VyR2t0eSs3MVNnNmtsdUJmalp0R2Eva2cxekxNc3VaR093Nlk5V3krUlVDTmRlYTluVVJMbERBanhpTTZIa2h0UHVDOEJRQ3ErNjBHYmJrdGpCcnFpbkN2RUpveDJOSkVHY3I5OXdyNnpuWnRlUGVRZFZtTTNYeHY0ZWY3WGR5dkRNKzBxSC9NTzlIUmJsVzFOTHJRM0c3NHhFVzBuRnFRNThGY1U3VE1KYkVRNjdaZ1dac0lRek8zb3NFYkovc2hjR3hCc3F2bXVCWUsvM3RxVWt3NkNTUDVrS2JtMHFpT1IzYU1uR0ZoK244dGc4bTNYQ0N0bWd5WndnRDhhSVpNY3N5b1YzUi9hb2pDMi92eXphdXBKVUduNWZrdG9HcWFUbEtGNjd1OFZQd2xZb09DMkx0Nm1mcnJJL3k0NG1uKzdtTXB2YWdITTllbEdSUGJTbGtMbnF1eXh4UzIvdHA0M3cza2xwNlBYTUlhVGJWbm5COE9UT1l6cjBoQTFlSUlqZzJ5Tk5rQmplSk1ySHc4dUNUemZGU2tNTmY4WHJtTU9XeWVpSFN6T0VGRWxCSlZ4ZG5UVDc2ZzJyMU40VS90cU9LZ3NTUklDSjArSVBLOVJYZ1JxSFkzdnpnUU5DYmtjaUtITzh1UjhVWW1RNmgwVTNsYkMxL1Q2czJ0UlZhc2EveWdyU1lHdGlRNnJQREFFVEdZeEZ3WWtIUFdKZXhUcktVVEY2d0s4ZEtwcTQrQm9MakpnWGFUMDNIMnMvbHJ2TmdGcGc1MzJ1VSswZExyL1VKaWhrZUlYVHcvQjVUdEN0ZnhGZHdYcklTelNsd3dtTS94MnN4b01TS0JCTjFZenhHR1A3b2M0akYwdUpMNVlVWWM5NGJPMDdhK3JLWW0zclpIcGFxd3dqV3F3MTNpekhZbHExa0poS1dhQzRSbVRBM0U2bHAycW80WEUxNlo1aUhaRWFiSWpiL2FhWFdUQXk1TkNRVVdRSS94ejRFSC9WbWttSVg2QlNmbUpEaE1OMDRIYnJRMzhrcFVrMVBncWZTMmpJNUpMczhKb1BzUXlTcGlqdGZ1K3g5S3UyNW5JS2N2ZlN5eENVdklHM3F6WkRKanA0TzBrNXFiM0N6RFVPaGMzcVVpVXhiY3hjU0dvemFyejNVQUJ0b3hRcXZ4OC9IRVQ0cWFERE54UWRuMXdHa0Fnck5INWtaZTlOa1JxbzNRaGVKVFY0N2lPRWQ0TDdLQmN4aldXTDJYT2YwOVBIRGJXdWw4MDdkSlpTOGVUeFIvc3ZSSWZxcG0zOUJ6QVkwNVdja3VuRFJYUUIzaStSVHVnMTVoYXhzalNwOFoxcHRlWkc4VjY5eUtQTnVROFplYXVjRllBL2ZzTUxwZ2ZBNUxWcEV6QnZCbzZRUkJweWdZUFpHWGN5M2NuMGRpVjRXcmlZNGw4UXlSUFR3YlhwMFVKZXpnOGFiRkU2NmtTbXhyK2ZHRDVSQlgwY0dKYXRuN0Q1cGIvVm9PSXJyTjBWRzE2R3lzdHBzSU5pWW0wV1dCY09NMW43aUE2c3NLWkRQcEJHUXNBenZXVEgwYWtsOVpXV28vQUF0L2xHekF2OWpoQlF3T0hYdG5FR3VNbDFKTTJ0UUVkMVpYRHRjVFhSUE9xS244RVVBM0FmbjJXUXNPbHZDcGpaUkkvK3RhaEg3TW9WSHN0REhtU3FoRERoMitFRXNHQm10NmNaWFluMjUyVGxyZXRJL1JuWVlRNURyTFYyQ0FkOHF2STVLcGMxU3Y1cXFEYWFqOU8wWnJvOGtnR3FzZnhqSk5KUDZzRHlPZnZGQ2hCWmZOaW9DTzJWZmxBVTNoZHNyN05ITWJrQ3d1T2JTQTlqUG1GYTFTOWlRaXlKOVNDS3lua2lIVkFGRFlNaW50TjVEKytlaUtEN3lTbU91ZU9iKzZBQUJPdExheDVHSk1BcEkxUFJCTjVFcUN2OUdLUHZscXc0TWoxaEZIWUJZcjdHY1ZVZGhWa0wrUk9XcFpZYlhIdm4vWkhjMUhnRHk2QmxPQU1sSk9xMEl5bmQxY0FNN0g0clg5Rit4Lys3TzVhc2JjUGVSdll0Z200VUxCZGsyMjBVd09vVWYyYmsraVh1WlNxajNMS2tpUDc2SGh5RmhRNFNRTjlmaE9ScGdFUkkrMzVnTHU1eGtLSjFXOG4xb1AyNnZWdExja0VsVzR3ZTFxTFZVTzBCaWUyM0cvWGlyb0d3a2l0RDJ4cEhYUWRtWS9HdzQrZGNpM3JpSzhaR0M0Y2pwQ1JZUVIzZHkvSDcxYjMrU3llUFl6cEUvcDI5aGZKbjcvd3psc2VxMWc0ckZlMGp2REVSRjRsU1lOR29KeDAxbURRRStGc09FS2x2MXlZbTdxdzU1R0NZTUV1STZmZmJCUzNvLzRrN3o3cHlSVjU5M0MrVTAxVzdoa3FVMkJaUXlUM1JuWGM2NXd2d1hMSHBFRTU3VVJMcTByZEE0aFIyUzczVHBNcFpTbE1aTC9CaUYxMFYyMXZDaVd0TmJFOG13Y09KNlZHczdEbnZXK1ZSYnk5bTlXdTJ0QXAxRTVXWi8zOHQzYWpNQzRIVE55RkRGWjd1blVYek9WZEJRblZGUWxldzJhT0hCL2lad2pLdmtmc05iTUFNOHFLd3NwQkM5bUZSNmJFNEVGMzd4RWdYTkNyMnprT2t6WFVxU2x6a1JtV3FKcW5UU0JyQTNMaGhkVkpuWEZhK2RROUVUb0xRNmdZbnM5MzgySUlCaUdDZUl0Um9PL2gveTFZN1QzL1RXck9BbnlSY3ZuT01tOVpqVHI1bkZPYWs4R1BiU1MzanNrMDlualN2SFM4Q2NJNHcxbnRkdmg2cm5ITmZsK3Nka1VNQS9DQUZscmdEWEhZZWtUZGV4RFZkcmgzajN6SGhuWk84R0dSRnd3TFVEWjFrYjZzQWwxWnBvUzN5NGxmbTlLM0VLcE5tRDJBZHhqMHAvUWtwaGozY0RpRXZSRjdHZWs5UXBjbXZ1bDBLS2hoSEZ6YTNyNFQrY0s3M3ZrakVHYkFUMmlJcVRJV09PUGtSNmdMTzJrTWpWTjdOR3hubXo1aXdRNXgrbmxiQnNvSnFlTlU2UFh6NEJjMXY2Z1BrZkNxemNVZ1A0WkNuMDlsL3pLNXNybmh2ZWIrcm05b09najZqUXZncGczUmxXTlk3UEI5NUFIOTRpbHZyZ25FMWpFeXdmUEFCcVMwK2Z6N1JWcUJsYWJRSm1hUy9NWndrd2pJOUxhOWpSWGo1QlNmVXRVWkhzbXp1MVFPbjhBWmlqVGlVQm92TDcvajRNNmNXY0Z2QkNBV001Q2hybEkycmlqV3VOSUdPc1JuTldvZ3NRNEgvcGtwTG9QM0ZHY2UrSFlTV2hvVWRBekJzRUE2MVA4ZUtPSXlqdTdDL1AwM1p1Q2lXdndDSW1xanMwQXRjelJzV1dnalBmbXNWQTNJemdzaUNHeG9naWpoRXgxeTJpcXM2NitCVzczSGJuaVhGK0tyWi81ZVdROWpZb2RMMXZRQ0RVR0NJU09lZDNIQXNBMlNaYU42eTdVN2k5RC9YNllNRWE2UHdENnpjazdVZCt4SXI0REljeDJkQUpnSTU4d3hxQk90Slk4MnVyV0lnTzQ2cWRyZFFmQVBVbVFtdmUwdERIVFhQaEpUMkMxQllyZExlblJFUFllcDRudXBWUXVqNjZxTkRQaSt6cTZxdnNKanFOcThwZlVpMkVCNG40N050SEpsRDR6bVdyMUpSYmUxRkoxZnVlTmV1aTZRSjRrd1ZBd3NBZGw5UmFQek45eWszY2hudWtiT2RUWm05ZXlxQ0JSUWJJM05LeitiemJrRHNvcVFydDhMSHRTSHN2MmVaQVhIUVhMbUdXWU93MWlaN2xxZDk1MnBhTVFVTXc5YWpSNmhYc3VPZ0U5U1F1VW53Wk13blUvWnA0RmFpNVc2YnRzdFN3bU9HRTJtLzFBSjdyZkZjWDdZTk10ZHRNc1RWeGhSQ3BxekVKZ2tkZE1zSytzdElvTjJHTEh5b3RJTnRYWUwydks1YVQxSzQyN0pxNHY2bXVZU1lmenJ5NEtzaUxTOEx3UmpJRDU3LzEzcTZkMEZmSXlZaWdGMkFPbEIwNStkWHZ1MmROQk1ydnNTZG1WbkdOMjZMaGdHcUI4ZDJwb2hVcnQ3eGI1YTlxSDZGZUtydlNYZ1ZtNmlDakRPdDROVXNyQWwxT2JqVGgzNlQ0alIramJOWFVvdEsxd29zb2JyRTlLeXJhVEw0QVFYZDExT3p6c3E3dTh4WTBaem15MnpERWJnNjgvSUgyZm1ObVNPTmpGWTlHVEU4bVRMK3lKRCs5aTJxbnpBU20zeUsrN3FkY1JOd3g4OU9tNmc4UGpDaW9HcStYM1p1ZU9XYkozL0M5WVA1Y1ZJQkZFeUcwQWV1RW5DRFUyQksyTmJhK21XaVFOcWxJQzN3U1l2N3VzOEFMb1p6bDdHUVI3bkxyamlVTmxQcndGTmJLSTgyWFI5R214WjdYQ25VcWhTSzkwb0FVb3RaM3RQcWxOQ1Y3dTA2eFNYdTdBL2F5WmsxbW5nN1JoUTR5dG5BamQrQmx3Vy9nU1ZxVkJJN2plZ2tlaEw2M1h4d2JpdmN6NEFZSmtWVlRNOVFnZkRYZS9hcDFNNm9jZ0VUdjBKd01RenZ4K25Pd3pmVUNINTdxdDBsR1ErdmU0MzBUN0V2S0JKZ0RiditmQ2JRdE9wQjhUMzkxUHl0TEhYbHlWcjZ0b0JGUk5aK25USXltaWxody9mekJ6Qmt5ZFBXaTZmdWVENzV1ZzdDb0ZocWRML1diZmJHTStJQzc3bTZORmNMUnQ0c1VSSUtwTkZpZlJYRmcydjB5dmtTRXU1RG1DVWIzUEsyVWsvZk1FdFdXUllmU2tXaG05SXJNODdmWFZscjF3SjZ1T3VGZ1U5ZnZSekovMDNIZEFJSm9QNTRCZkVoQUg4UXI3anNyOVl2VkVLRE5BbXNYL3grUTZQVHRGS1RNUnFMeXdxY2dIMEkrNHpKalhEZ01HQkxjWG8zeHNOYjgxRGIvcmNvRjN3OGR3UmlqbGF3ZVovVDBKMGRUQ3NZUXZqM2p3OS9mRkJURmxha0RUbWwvNzlPSW5lTURUSitWWFpRUThDczU5R2hNR25uVnRIMjZqYU0rQlF5M0NHVGFQcnhDTG1IZHpxNkhkblEwQkRpcmdPazlHaDByclg3aHJ2NkxtcGFNTUpjb0xYR1JHQk1WT3FjajhocjlZekw4bnVmVDAwamNuT0w1RGwrWTNueXI1UEszYTJkaS80RUN0bjRYbFJFTDBiQjlIK0RuL3VCM25zT204YmorUmc0b0preEtRWHpEWDlEWWxaSzRpOTBlNGwyT28vZGhrclp0NStyRlFheTRVZzU5NmZaREZ2UnRHZkV3Sm5VYlNrTll2bDd0RzM0cUt3d3FicEZSdmdkZEhZN0JwN0xxOWR3SXVjczEyZDBjUCtWNE0yQW1ONVJ5VXcrVDcxODhwNHE0QUlTZHVWa3Z6REI5dUVNTEJlTGJHbGFHQ3d3NEQwMjYxcm9hL2t6d0laTEpUM1pJYzRHNEErUVVmMmw0cVRXY1I2NlBQbEM0MFhwS0tHZllpMHl4Y2lUaEFKbHJZbmM5b1picFEvNXhUb3hmOTJwK0xaU2hKQng0ZE9pMnQ1ZnNxQ1lPQnQzTVd0RmhLcG9sL2tUR2hZR0VHY0Q3R2wwRTl4WUdGTWt4RWF4d0VpbVFrOVZYcjVnT2tGMk9adWgwTW4yVHU4NTZvL1dYeUNjVUlZWEliOHVHY2N0Tkl0ZWVvSFczRGd6MG5xbUNCbEIwUC9VSWYzUlRxbTNHTlFoVFRZekV5NXVWQVlyTmJYTHoxNVUrUGZ0cTJYb3RaOHR3dUxpUVQ1aUE0UEhYeTZBQnY2R2VhMlRKM2pVSTd5Nmk5VWhobUNocWhieVdla0RldVB3OXcxRDhxaGJNZVRCRDM4QTBSaWxoelVlcXI5QkRZTytvU3VkeUFxTUhEUWg3UmdoQ1Azd2N5SFpVWXY2V092MS81Y0h5WC9YY2RIWlpLQkxrUHBBODYyWDJ0aGJ5c0NlWWhhZlc1VEZoSUIwRXc0MTlnUXpzVHk2VGdlVSt5cHg1ek9iNlNzK0xRUlNwNWEvMXpTQkhvSHpuWWlZbVJhcVljamtCWU90ejdwQ0xNUzBJSEUvdDJGVEtyVm5mU3JPRmtBM2IxeEYveW5sZDZPUldxUUlWK2Uxam9OQWpDVDA5RHlMSzJTaDBlb2ZhTzhiQ3ZjcDZIUGhqRVV6KzBIS1AzS3BsT0FQcS9RdDFNNlZ0TVpzNWFrWkFxMFZiWEdsaFp2dVR2VzFaM1NGWlp0MWtPMnpaNnhHeUxZblNMMUpPdE1KR05tYlczZDRwWUxCZlFjcXQ3R25aUmNSU0F0aTc3aDVQRGs4ejlzV0JEVWFISUdCZmJQR3VndHZtZFF2dVRHZGx0OVdIVkZOVFgrdU1PRks2VGlhNTl4TDRWYUFueHdKdXNJcG9ybGd1WWRMelBRZjY1WUoyOUdEaDkwSHZyb3hRaXpSSjMyallqZUkvdStLaWNxaHZKcUdyQkN2YXlFZzBkWTl3WTh4RzlqT3dOSk5TYm9aeXBDcEpWVUEyYjRKc2tTRVg1dEJlRTFta3dmaUg4dzBEZGU5OEFUQUtPRk9qWWhEUnVzSWtFR1BrNFBYNnFONmpvZy9jWEI2NnBGbDdsd0pCZ0FIcU95SDdPb0tvbGJFYVJmNE5qblRKZ21ZTDhZTmczRXZjMTdiTWpGUnV1aTgzSjJkK2F1QVRqZGo5OGFNeFFyYmgrWS92dno3NkVwdURRWmw1K2NvN1NKY21BeUFJSTBQeG85R2pEWjdDN0lpbVZWL2kwVkVnSVVwMjhuUlBEM1BmZisyYit0VmU1akRYU3dXQ2FMS0NXV3JFTGUzQUhROHQ5dklqZEpqMTU4LzE4b0tvZkZObFMyWFZ5Qm1aN3RtcXZSemVSM25xSTFtUkZrS0ZLSXdvelIrSmpwWWpKVnM0Q29Oa045Tmk5ckF2UjRUcjNaVFk3aVIrNVMrQ3g3NFNhWEI2RElmdkV6akJLamYwOW1jOE9qbmU0ZWtzaUVodTVmZmNNWjZDdjQyUDZ6eTBZM0lTQ0xicWNzRW1WZmtUMUxMMnhmTjFUV0tER21SMEJ5UUpNdkVNVXpmK0EzbXNtdjNSalBXR21Xbm9raytLalNQenN3Z1pUK3BmYy96eGJnSko3dFJ1WjBRelp6WmtMRWhyaEEwZXErd1gzVHY3VmJXWXUrcWNRbnd3d1BhRGV0TnQxTFZLeE42L1B6VU94dVlpYzFkSHNaU1p5N3IzOG1pWWVIV1lpUDlnU1ZTTkp4MXVYcUkybnBqMFAxQWdFZkJiUWcvbTJvdFdQV2lnU0I2WlFrSVdPaFVnNGZoQk55dVd2NU0yOHAreHp6VGViemw4a0U4QXhCRHpLeXYwaldHSStiWExQclVvSVc0VUNRWkQ5N3hwaHdUdktpMHo2bEp2amRTemxOd3NjZVJlbzdFSWJGcTBxNTljTWlxWE9pcXNWQml4QnNVdWU5ZmFpZE1oRENvdGdQcG9xYU4rTnZicXY4UkhKREpmcFErS2w1SWpZcDJuSDZyUHhMY2l1VWx1bEtxWjBZaExyTEVoMHJETWNnNnkwQVp6TXRQbFZjOVFZcE1keVhlOHRtcnFJRThpT2ZjV2Z1UzQ2ZWVwbXFjVGNySG02b3RsMktaZVc4ak80czRTZjM3LzJ4d0pITGo1eWFnSjREUGJNQVNacmFWMzk0aFIwVTJPY2grVGN6QlEwa1dqU3h3UXQxSmY1andiL3JkRDVqWUwycE8wR0JOV0RYbnV0TjdhcnQ5TGtxU3FtRFA0Nm9weHJISzZha081YVQyVUlmeXkxWjgxZE95K1J0c0RCTFdXejd5eFJheWZxcnd0c01PVk1hQmduWjgrVjVGYzROQVZVYUcxYXVzRngrZDIrNFBvN1hLR3V5QVlUWHpIVXVxODB1T1JKTGpSZkdzUWJWeXVXdlpFZUVuT1Mya0VnbTZ3NXIwOUViYmI2djRGUFJxK3RWWTJkN0t6ejFoa0ZIbW1heGNNMXRteXVNaEZBSm43VnYxVEJGMlRHVmh5dkI2elozKzdIT3N5V1lwZUM4WllTT1pGRC9EWFZIOTJaVWEyR015WHpHUU5NNnZkdlBLN1dNSTBWMlJiaTVPUDZCcWx4SldsejZ4K3dza1JDTVFSUzJrb3RjWWZqRnZOQXp3ODFuL0FaQW9FK3Z1ZVpqd2JiZk13R1RiL3dkbFNPOEZEQVRObXFkdlNLUWtjVVZiakhuQW1IVFBmOS9UazZRbWluOGY4QkEvMlpRWXdNVEJuQTZtOG9FclNDMERRYzJPMmtuODV1T0ovTkNXWXppcVVFNE9PNWtURkNTenVsNGlaSXZnYU5IeW4rbmg2MWNNbCtIT2lMQUp5VWozVDh1em9RWUNzUTA5YWJoeFREZkxqRGFCQlNCMkNVNnljM0FUY2dONWEyRmpBRWdtUEppRmVCRlhwTmxTYkczSHVoQktVOEx4VDBBUFBlOWN4VFUwMEhDNmpPcm8vVGg1S3l0SUFpTVF5dWFFa1prOTRWeTcwWjMzK21oYzVGVzRvTjhSOENJQm9ZYnI5RlZuS1pldlVvaVAzRmYrSlV2V2VRMXA5ZFBRYXNjTkI5Q1lrcXhKdlFpb0xXZDkzUW1hR2cvRCtyYmxaanZUdHlPOW5wYkZQOWVpTEFybFgzSUZJOVB0aHp3bklZc0E2aHVjT3oyOG4vTmJ5Q0RKdjFwRks2eHQ5eFpaUDZKZ0tQL0Y4NUJSZlFyY2xpY3hUVmRMSE9hb2xJY1VBT2NRSjB2WHA5YWlOUEc2RmJ2a2tLakdHMUQ4SlE5ZmZoQnRDRzZEVlRReUR2dExVVWhpSFdIandMNDVOak5tTkVxTlFLM0RyV0FZb3RvNUdTMEtCalN4a3JCQXdpd2RYUDExZGU2WU9EWVZWWllQc3ExV0VlSVBHWlJpbFo0OHlHUkZQRkNBN1I1ekZUcjU3TlZZWGVMK21NWFBFb2dVakl0ZlNNTUxlNjczblpBWk91WTl4ak1ZeFhpZXY4di9uQ3NGVjVraC91dkhIR1FmRjEyL2hheXgvcmdNL0pTTHZmVS9FVENvUjZzb29OYjFOanFCZFd6eXpPWTFyQzZGaHh4bENWR2diaU9WK2J3Myt1MExEdkEyNzMzc3lDb21PcFVUZ3JNMjBYVFNJNWhHWDlHdUpER2thdnpqNkd3UVVzQXlJY0tRTHJ1WHRYSzR4VW5BSEQvTHU0RDl1N21CV2NBNjV0UmhXeGE1M1lKZ2ZxbklCalFWWjRqVkgvWDRNYXp3bmQzQWJXRnVQa1B3dW1nbFVaK2dMNFEyR1pHOGNmVEtBZFF6V0pIMkM3SGNXOHErUWFHSzIzeVA3QnRTQVkrWWwxd3lYYmVRYW1IR3dKK1k2Tll4SDVVc1ZnMW9NSXppK0RVcFpHNU5LK1pPZ296RGFJU0NaVHg5SWFlTjdoTERqT0ozUGFhb0dhQnlIcGhQc0R0QjBGR05TQTZOc2p3THBoemhGOXU3eW01d0UzOEwzYS9ZcXE4NHNyZkFuYUx0MGFEeWIyQ3l4aHZab0pXMmpUbVp4ZVJsam9jMExQdWdJNjBlKy9EcHBSK1Nvc1pVMXUvalpmVGpzRHM2NXprQ0F1K1NuL0VSa3ZTYjFvbXYxRnA4RTBsUEkrWG5KL2htTytCU0ZMaHJQUjh2UDBDb3AwRGJhU3JCKyt1ekJOSjE2VmdVRnRkZXZKNmoxTlA1Y0o1a2hJdE5RR3E1SldHemtDUENwSjd1b25VcmdXenVKQjBzS3F2S3hQSmM2VFg4RFpDU2l0M0pwblptOUZmZFYwRUFOaVc2QUJKOTM2MkU1ZGRKZjN5K0UzaTJTZFIzQWliWnJreDJrVW9ZU21pcXdWTERaS2ZvdTJaaktuNE91K3pqaUY4Z0R1Wk55L2NwQUhIRGpoL1UzUGk4TmlWUm95cDY0UXFZOXh4RmNOMEN0NS9Sb0NpMXBrR2JlZVZrSnVsdm9ObUxXT0thbENzRktEUGJrMkRYKzFIODFFZ0JLVk1UQ2pzRHBHRmpiRXREWng1eE9QVEhJaGFHazY4aXFKZlV3Y3BMbXhuVzhrTGUzdjhEL0Y5dm1aNkQyTmdSSkwrMjZUSEdTNndCbTkrdmVwdHdlOEFhYkN3dUUraHFYSXJKNVRrTXU2MHVrb1FWNXZmSDQzaHZnS0RIQmljY2ZkVm1rYzhpa3hFajErTkxLZXVWME1uUUpQdGd5QmFUem1YQUNFc2ZoSTJEUnp4ZFJJWE5SQnNTYzA2OTZ1V1p4c1I5VU5Wb1daV3BBSFhLZmtXRnNPNXlubnlNbUNRWENHL3ROUXJhUXQ4Tk9VU29RYktwZ3paR0c0cktnQ0xCbzhXMXBkSnBIeWphclZmWDU4eVY3S1orVmxLZUloYXJLdit5YkJYZ0FHNHJ3eGxuYkQ1aVdadkg2QWFTa3dhakZsU2NhMmdiSnFSaExnV2RzNU1ySEF2eFhjM3ZyeWovaEhOVEVjUmIzWDdEMWc3bXVqb2R2UXFFTThrQisvNk95ZXU4MmFFWlU2UVF4MFNNcDZMTDlDU0NTdCtGRXhvT1ptTHgvYlh6WjZ1YWpPU1VjMGFVV1pSd2tlTzZmVTU0Q0FLRTdTQXhYaXJzUHd4cTAzeDdjckRyd0M4R0tBaXJOaGZ5dkkxTHBHRWthakRCOE1QL3BxdWoxQThFT1hoc0NjK3BiTDFzamNHUGxtcUdTaFlNZ1pma1FZTmJmTWVDOEJRbTRrUE41VVpJQ1UxN2xJamhvQ0VxNnNSQnV4OTBQNFZDeTZ2V0lqVjBjR0tLZ2lOMVEyeTVhSlZtTWRuR3NQek5rVXQ5VFB1ZDlDc3hiN0UrcmpMVjNFY1NOeDI1RWRIU3U4M0t3cEU5cC8yM3lCQkFSUlNtckxSUUNGdSs2Y0tOdWNQZUpySVV3TU02V0p3eWpTSWxpaU5RTFRLMmxqOE8xRzlrZUJ0TTdtdjZ5NEVyeDk2NUpRQzZFVmdrUnFjWThYNm9CTHNQQmdIZnBUaG5nTUY2SzFIdDRiMVRXNnJEUnhDem9PQjNlY0R3MTBpSTlmMmR4Q2o4cm1uWEhmVzVvVE00U2FNNWt6c1FXbFhzaTlEWXZGaDRrYkhUR1ozdkNiRjVGVTdOT3dVUitaWjlZWWxtdmtsTzdYV21iWUdoSXF0MVlUSGdEa0J0dExxZDE2QTRpQVI1Z3ZWN29ZRmVGY1dUSU55ajU2cFdJbGFSbVNIdmdhQUZ1ZnVyekhmcDkzV2VoMm1meEtGTWgrRExkRUdwUGVGMlhZSVVvUjBWVlgwQWF5Rm9TaCs1b2lQQ29NZFh5cjNaWStDSTNqeGhTMmNWaU5GdUV1ZE9MY2RSMWtaMGZsUDFzZXp4ZmJoMmFkbWpBMDVlNm92ZndobmZIOXEzRWZESThMdjFGbE9BeitZZFZwUGFlNVdZUUZUL2YwYlMzR0N1WkdBZ1ByaXcyK3hwYlNVTjRSRVdBUmtpZ1YrRmZSQkovZWlLVEVTdm41d2RNRUt6cWdlR1paUzl4OVM3OW9YUkhBblRLQUpYN1VXZ0tteUdhS1ZpTTZKRFFISVl1RGMrUk5rZjh5c3pNdXJnN1VPSlNSSlZFYTJ6cTh2SHdrb0tIcWhLSGZCUU45SFNWbFBmRDlha1RQa0RLNlRyK0wxQkJBS1E4akRTNC9waXZBVCs5WFpCd1lSa2RLTEFzcTRwaDRKY0tkZis4aHZ0RERRWGt6MmlFRHhZTWR1V3JiK0Q2OUJCMEJoYng4MW5iR29IajBVQnpQSVRQRVJpR0VQU296eXJKS0xweTk0VS8xR3dXWjBzVVVxWjRYV3I2cG5WUFhVNXRYRWpFQVRNTk9PUmtCOEJrMzJUSGFtUlNoUWxrOGNPQTltTkNrOFhzVzdPcWo3V3hQYXdSTDhNVnk4WkVWU2FuMGRPL05IeGZ6WjNxM21HK1JiN2cvekUxRVpTSFpBRjlvQTN3MmtGbnpXQ1BXVGY4N2RGN29mZVA4MnozUUQyQjdSbjZRcmo4a3FTcTJVK1BYWFpHbWdscitjSjBsY3psM0t2QWcrYThETVNDMkhSRzg2eGpqYTRyOTUva29zZzZLMXNMREZUMW5MTUhhMDhlUW9rd0kxdFVTYkUvV3hBaUhZV2Z4YUFsT2JZUGZaMys2a2hCNndRcVZkQmQzeTZZcDF3aWYxdUZYK3o0dStSdW5wWDl4eWdudGZnYkgwOVgrR0xVR0E4aTlXaDFwVVpsUHJENGhKMnRKMmVnMTZ6bkdJaXhXTklMY0kya0ZpRFhxQm94NWY2eklXdUl5MnVrNFF5MGhWZDNEZWk5UzB3UE13dGRqNDJzNUwvM1EvdlJBK2tTUHBkaFloWlc2MWF3akZiVEZWMXdoNm5aRFoyQ1F1bmNSdlQ1VTNZQlBZOW04MlFtNVVSenVSVDE1UGN2RGd1TjI4OUxHT3BySFArRDF5dkh1NldTYXpkdVhiVnRTTC90dEROU0lzdHQyMVdMbHkwaWZtS2E1RDc3R0h6SzR1TnduTkRLd1A4M2plbVN1Q2xETGZwdjkyREhWd1dTb1pOTjJnMWNSWVBSeXhIRWg0dzlnVzh2T3RVME5EdmlSUVBNMkZZSzVUYTJ2VjczYXA5SkRCcjhTZXNuVlFrL3lUeDRGK3RNV3g1dFI3Ty83dzBST0FvVllvYWlpTk9oaWx0QkhWRk96a3FmcjlkQVNiSGNqQ0prVGIrNDZ0ZjU1SkYyMVFIbDdwNW4zNktMdVVyUkplcE5mUXYxaFZ2SWdVQ1R0Y25BdW5nZUNiRktzVXJKeUdyWVZYZWFNSERZT2ZzS21hWSt4a3dNZnJsbzJCYldJbGd6dm9PaWpKS3Nac29oVWVXTFFoeWJiSXRtT3FSek1ITzdGNWJRVjRycnBqbzUwN0JqMWJ2UHA4VHVSL0xIL3hGWnZqNkoyb0taMVZuc2g2WE4wVmVLbnc4eThlWnZRZUVJQXF1Nm5WRjA5MFJkdVF0WitzVlExNDlwRXZkMlBuNDJWR3dNcmhocEovaEtjUGpueDZWQTFxcU9HcjRiNTR0RUhFZnFpcHNqc3IxRU5DanUzc1NNUWNwQ21neE5yWWpXczZDVEF6cHpxMUdwRjB0Z3BneG05QytoMVZlVVV3QnZjQUZnbzJsa1hmc3Z5MzhjQklkcEtnRHkvQzA2QkhIQnpIbkpuQnhocWkzTEdoMm1XYnBpN0x2QXJVcHJ4cmpKUXhhZWtSRHBZcEE1TWxqWDhETVlVTHpxV0xCak00elBNUzFkVXhJajdwK0cxQ3ppTXhlcXl4bmtTZHNZaEZrV1JLTnV4OEdTWGMrY1Z3aVo4aGV2Yk1lM3pFSG1ETFdndTRxajNRbFI3VnN0OENoNlYxZzBqeXcwR3BDRWpOcHpNWFRjaXRlN0RmeFg5VXM0ZVpGT3BJTGdBeEQ5NVdXMm00dVAwZm1rS3Q5WVpJa2o1M0ozQkNiL1lXR0plaTdXZHl1em1sbWVHTnE3Ukl5RDBrSjk2TklCMGhRQW9uUkN4ejk4UjFTZEFHVHFUUDZVSjJKSyt6R3B6NTlja3U3UU9hbEdlV0pIUE5HbUg4Sjd1Ti9vTThwNFM3YUJVK2d5REd3VWdHSUxlYUpOVERiN1REN0JyMk95UjA3cFBhd0ZuUnhUSjZjWmRMOHA5Vk5zUkw2V0MrOURNL0RuWEFtc3ArZTF4TVIzM29reGJSN1o3em9TQk0vMld2S3NjblJBVTlLVjczVjNjL3lMTVcxejFkY0VhejYwRXdmU1YwU1dMTWdHM084a0FSOFMvOElzSWc2eEFCM050dStvaWI1Z3k5SHdETlZnODJrYkdueXIwbWw5THo3SCt5TDZucjEzSEdOQko0TGVyeHh0K0taVnVTdUlyblZuRitaMjFKNldPdnJydFZVR2FsclJ5aVRoWW1aYWZjaUpQRlNjams0c3BDc0NiOGhwLzY4N3ZWOS9xUkZ3ZDNoYzhXQVdrSHgrajg4dHl3dVUxajQ0ZmtPOVo5dUI5UDg0dG1HU0lMTnNReUpLZlNqbTJueU5LRmo4NjQwaGF5MDlzRXpYNm4zUFVKT1FXSnFPVWxYWVpYbzlDSFNLcWIzL3FpVjF3anQrZlFhMjRtVnZzdWtDZXh3TnVCdlZzcDFoa0tjajBSL3liUGdIeGo1RHdOaXYxVm5sWkVaZ0JWbzRYVERyWXdJYzFnaGRFRzBsekxWMllFUnZiK1hNVENWRHNYazd4QXBPYitRcE50M2k4dEdXVUxhVVk2Y0JvaGRpSG9KSm5TTTQ0Ti9OeS95dzdaTldZQUpNNWNtQXRJenpOSWxMY0lyQ1BnNU91ZGdlUXhoR2k0NFlNOTN2QUNuOWJDY3h0OTMzZ0t1bHdGQnRER3hmcFFTS3E2SldSeUNpUkduWkRubmhIVmhjUXo0L1krbEd5ZEtYb3N6QzcvZDlFSkxxUnNLU1djbVNJa1pMOU9nelhOZ0wwRTJXaXBRc2VKMDFwK0tEWWtlOExudTIzSXozNi9RcjVaM2tJYW41Qm5yWGppM0hXTjVKK3dzYkl4V3M5bmxXamNqaEpHcFhGcnZnMnB5Q2hwNStPb2E5UllrdTBwMG9ucHhRQVpScmw0QlpoYmRRYU5EekZHeXQyTks5d3p3UStGeGhOQ01NazI5R3hHVnlhaldubjB1OVJqQzJBZzhpcFdjMExyajFSaDI0OGFSWVJFbHJRR2dROW9LQ2xqZWowK29Zb0ZrVHBKWTNYemZQOUk1bTVSalNyZ1ZDb1lIcDBZTWdoT2lLQ2xKNGdwanNIYS92VFBYNmNGaXFpOGt1RFNydGZjenNlVXloSE9OR3lXSCt5ZHZ1WDMrMjJhanJYelJITEFZOVBMZlFyblN1VXhCa3UydVlCNm5vV3VjWDVJbFBTcURuc0M5NmlaQm9Gb0w0YlRram5rbTNlSld1NEY0MjgweE9HVExPNWRUeXl3dmJmWDk1eTJhc3FjU0R3UklVbEV0TnFiN0Jqd2RzNUdvWHBEZ2kxV2JIYjk3RjhFY3JzNXhGUWtPTjZSNkUwOFB4SVZYRkI1ay9JeVk1WmQ4TG1BYWVwWGltMytNbExYMDNlQXlsbUNOS0dQaGgwSlJSVUpBSUk5dnR2ay9uY013b0d0a1VCRGRYQWpPdEo5Y2Zuc2hHenVHTnBzQ2d5aU1YcGc3LzBkT1JhaEZWZzFnVml5aTRkMTc1K3grY0xxVG0wZFhxRlN2bVhWNjh4a2xEUWZlNDlVbHZWbGs0RnAxN3ZZNVBMYjdTQ1lzcnZuMnF0VXJxVWYxU3BCYmpVa0FNeElOeTFNTTJyejNFeGFFTGY5TnVXQXFhcXVVV1BEYjl3d2I0dTMzc21rN3U4dFNnQnhPUGN3RDRHRGF1TS9CZSs3RytNUkRoZy9WM0ZkZ2t1dlNwY0NMcE9jd1pjS3FtNHBiZ1RVazdBSUVaY2RVR2VLaXpQNG9UbVpQRjlyM2RhMWNiOXI3S0VldE1oY0ZBZ3diN2NVZFhNbjMvbXZOUkJZOVh0VlUxY1g1YmF3dGFjcGJ6VWlEVTRZSWtBQi9WMkdwSlpYU2RyRU5xOTNjdjVxS25udDhLZ2tJMDFNcXNuTG9DbTlOblROb280cEhJUDFXb29BVGp0RWJva1dhUHMwa014K0JWZmF6WnJuais3ZjZ2WG5xTmlXUHJyWHVxNjRjSGZjQzMwTzQ3aUhyUVNPMFJDTzdXZlZIbUpNRmpnNHBoK2V0UXQ5Qk12UUd5c0NUcWdTckQvcUdnUERCNldSa1B4VzV4ZUl4eWNWK000SkVxQ2xKK3NmSHZIbWIvbXlETVc3SkZMR1MyQTFtQmZ5VENtWERqZmZGS3ppS1p6dlF5eWxMMzdtNTQ0L0Z4eE9UdDlja0cwUVNRSEljQWtQeDFaTDBkYU9lVzRrUUdjR1FDaVVpMzNENzNtbWhUTEdTcU1vOXYwMHFuWlZNLzY2ZmwxUkZncGp0aHpaRW1mRmpXaDJONGoxWk5JandGWGRjRTJDN1VyelBpM2gxODRUTjV2TFFmZExEZEJxZjJBTjZwK1Z1ZG1CSUpONFZMU3hldFgxdnoySnJjS01weGVJTVh6SXplUkRDZng5ei9pbEtsM0l1Zk8rZ21hN1BFTHpmektZSWxET3ErUStpWUhKN2VJNSsxQzFFdSs2Wlh4bjhUWktuOENnWS9MZU9rOVB3eTR1N1RNZFh3VDJyVDVDOGxUMHNoSytxTm1MTXBvbEFPd0FrSVZBYysweHJUZHQvZUFZSTR2UzNNMXNId1N5L2xSQXpqQ1NoNVBBQzlQejM5QkVlS3RweitZNzBUcEJjVnJMWTdmQmkyclpmRmNMUm1tVHpzZWdBVTJWR3dpZ0YrQ1lUNThjaUhPaC9nV1QrTjUrNXhyemxDU2dhYkxDVWVoTENJZi9HQ0lzM2ErMDlOeWo2MzVDQ0M4NzdPTWpKNlhUM0NNdTZQaHk3SjRZeHh4WkFHTlltemFNN09UdDQ1UUJvYXVMb2J6aTQwckJMRjZRbEVSTXVkaHZ3OUgwM3NSMjBTaVRLczlvMXpyKytpZnA5eVBjeUFRLzU0R3JQRkg2SitZcVFLVHBYZTJGT3grSVRBRzJYeURNNUJ2S0hqSm1zWlV3T2o3U3c4bHRYSCtxN2VvWlhoZDNVT043UXlEZVhveUdHWlRMbTJzR2tQeEFyV00vTXl6dHpQZE44SEN6WW1JR1ZZTGZZWE1MU2hJMFh2cTF6bnNkUkIyMWVvNkVtU1lMY1VTNGFDanhkRDRtNDM2b201dWpiam5USXhDV2ZEYllyVWc3M3lsK0ZKdGxhcm9hSlBObFZiMEtYUVlLdW9CZkZEMDNmTmNlL3JHSUo3ZVZLTVFtYUJLK0FVTzdmWitRVzlNWnIyWW9jTVNneGIxT3htNi9Bay9teVFWNWtQQ29CbG03YXRiekFMZktINjZEZUxuakZyeHZCOEpoMExCY2F5WDEvMGc5bVNVaGI2RGpzVXBWMkFPMStWelNBVFNNVmQvOHg0RUtkcE5TV0FkM2cydm96cmJyUUJmQWxValY3WVIwK0wyWnNtQ0FYamY5UjJEMytTdkxmOU15QkdqdkFVNFR0Z1plTDd0UVpldVJOQ1diL3pEdjBzQ0d4SDRjZVVUL04vTzQ2cHM2OGxUVW56QzMzbmwzRHNmYmlPVW5PL3lmV3N3TFVLSVBFc1BKR3BjRndTem8vMkowd3NTcHlqS1psZ0ZOeVQyUE5oZU8wRWZqamVaOHE2Y2o2OFM2UURRU1NNbmpBZEZiMHdWeE9KTHJFUjlrSUpNUjloSW8yOUVnSkxSVXIvNTJjVzlwWmxIVzZ0ZHVwUnB2NHZKbUFISzRDNUlrUUh2aG4zcjVsY3V1UUREUWtHMEFkRml0Sys5Vkt3Qy9FSTRNbCtSbitmc2YrMXhWK0ZKNlBoVmgxNndpRXFOc04vT3Q1MGFlTU9BZmt1L3liYnlIZW4yLzJ6YUlCYmRFeXd5TEhlSVZnUzFWbW05aUhmVklRVDVFdnhocWI2MFRRNitLWVM4UWR6S215WEtDNHBGSlZrNWFkNmpnS05XazRtbGdCbVNJcDlOV294S04za1VXdEtUVGE3S3MxT3pNUnliMmFCT1IwN3JFSm9nRmhzazFwTzRNQVJKQmlDWUI0VWZFWlRXaHFhZVFGcEYxdXg5K1NLWktwcUxhY0VwSEEyU2VpVS9OT1ppNEhiVzRkYUJyc3dGOG1iRnBLaTF4b1ljVVpxVXJSVU4xMy9tcnNaZTZzQ0I2MHFDVWtCVTN0WVlUa0xKaVBHMVpoa2oyQ2RPK3MrMGpTTHRURVVRR3NyZUhvVDJRbG9yVkx6YmFQUlhYM0RiNG5TUENwQnM3cklId2JQOWpTZ3g2bW9uR3R4NmMyYTRSL3hCMVlycnpNdktialVOSlpBdTlVb2gyazRLTWxUcitDQ1pxdElMbUFWUXRUekZQYnN0RlZHdkNDZlJEYmNYRDlYVi9XWC9WRXowMkdqY2Z1NUpJc24vNHRnR0xObTdwSnhxeUptZ1BuUUhJRkl2R3JZMHBVc21ScjdSUkRvRllSZkxVR2xvY2JUdU14Q2pFWTFtM2hEZXI0R05uakNoV3dIQ0thaEo4a2tibjZ2SDVJUWxucmZQaEdWL0g2Q1pvMHBaMXowU0VqcTdFaFJuMjR5dDYxM0U2QzVTdm9qWkxPUi9TeWpYS1Nha0xCUWEyMmUzMzhuOE5Ea1pkdGJIZmZRMHd5V3RlTUs4dnNENjNNMTRJTW8xYXdGZWlteElMNWVUL0ZNVjBpNmdlVmtidXY3R24xSGd1eENESk5YZGpGeStmVnY3NVBPVWlGWWZsME85amdiT1ZCb3ZSejZGU2hBT21qcG5FTXRXSWhiNEEwYlhVa3ZFY1lUY1NOTmJGOUdCUUliTzhtdjhjZmVSL1Fpa0ZtRHZEaGYzVkJZU1FPQ1ppTDdXYkJzS1VIZjFLUWFzYTRMdjlNNHdCVjJ3RnJOdVR2dDNaK0lRRXhGaDlhYWpVaElDNGhNMzhRN2liZTRTcFhBbUUyOXVFTGRvbkZqczc4V01wZy82bTdpZkhVUGJzODlkMkxoK2hJdkpvdkRBd0k5bDhlNlNZbVUzMkZNUjYvakdQMU5xVDBOckdyNk9aTldlT0ZjWWJvdWw2WGE4SytLbmtBbUl4bTlaemtYTVNORHE2TFZLcXBiUmxzcThiWXRLbjc3SDRqZ09EQk5PTUJDWG1ickh2dVY2aUhValVkSlhVZE5Qck51RFdCcUYrNXczRGpocElIRHQrMk1sNVIxREVnRHlka2xIWG5nL2JxT1JXSHpqYmtmS3kvVXFNRWh6ODBHTFg1OVRDQWZJMXhpTi9Tb2txdUQydGNZR3A3aFRPbThaeVpkK2lHU2pIQ0UzNk0zbWhPM3d5OXY4UkVFL3JybVUwRm9iaFlZMXRTM2lsT0xDcFZVTi9MQUQ3d3FLYTB6blVFejFKMnlSTmFGQjdRMmI4dkM4aEhIS3p1MnJxNE5VcVMxV1kvRTZiUllBcWx6VlFqcUlZdGUrd0Q5azhkb2tFcWtERnRoWmEzZnJ3Z1dHZTR4ZGJSVHYxYzIwU1dZV3FVNFIzU1FLRVpsQ3dOcVpvVGZKVDhuQVVQbE9uYURqRnlOdGpiclR1QTFsQ1dCelBFSDhMNURKYmJnYlVYektXTGV5VmtmQThaWVQyVFpTL1Rwa1YwSGdDMkl5MjRTMXZIVzZTNktaV0x5VTk1UkQ4R1gwQllRMkRPaGxDbURoSFRnanl4NmVOdTg2eGVkRnhYVG5LQlpvcGRUUkJ6YWZLdkRIeE43aEdyWVBsMGVyZjh0MFVwUzZpWW9SZmNDaEdJbHI3djFLd0p4QjJIMHBBc2NxTXVGWmNYRE54Rkg2Y0l0TXJDTjZCcVgwMklMeXczOS9jbGRLR083WGhXOWNlZWFVbTE1VEtZbUEzakxwbGF3Rmt0WlB3ejFCaWRNU0d4OUl1VnRNaXdvbXg5ZE04a0VnMmN2bU01QzZYdFZJRnNMNmdDMlJhblBENUlqRldxYUVDWXJlbm1yaFp3dTZxb0pxNkpkZDdYdW42R3JuR2k4U0czNHV1dHlMV0lseERaODNCblV6RXpTbzFkZUhXVTBVUUhUWDQyL2VJakNDSmNuNWZLNzZtaUJyVHkrR1BxWHRwTWwrcXpKM3M2OWUvVVhZT2hSSVZqRlJLNVdqVXd4KzN1V2lrWGVrWmQzU203MUJSQ2tWL0FNZ0VodFQwaWg1dHB3dFVSU3FmMkhiNlNsckhsVUZ2WjRsays5RmcwMUFDWnZ5Y2paNXVySk5GWmUwOUtXejJ5Ym11bm5pRi9QOTBjTnM5Z1U1WmN2NXlVYVIvMVZQd1F1Q3ZhVHhlTFVXKzBxRUlNd1dDNGlPR0w2MWJUT0FQNzREbUEwcVJ1TlRVTEJRaXNkOEFOaGRoOXN5VFpUa2ZCWnJKakRaRmQ5bGF1ZnpkbTdMTmdscDViZGxLRU1GSnBEQkMzazhUZzNkTUNvT3BMdzFHcDA2YjgzSVNJQ1M5ZUN6eE1SZU43WXYzYVR0REZUSWJXSWlXMjBqNmJ5VnlkNEtSdE5rVXQwb2Y1VllueTYyTjlUd0RsOEJkWmwvcGpUVytRVGhYdGdVTnlKZ2hXdno5a3NNOFUxWFlyNWliOEJleVpVTEZTMVBJTnlIMnd2OVk4Ry9CdmIvYk1PYWtCSE0rVnE1aWFMeTNiZW16cEg3Z3lLdFUvbXJ1MldydE5waXpjdll0ZHNtaHpoZDV5QXFGbVhveGxQQnQyaXM4U1dtR1R0NUh3by9XVEJJUEdJR21ySjB3L3M4Q1pRbGxFRFVRV0k5WFMzUE5vbENlMVoyNEp1RUdZYktDQVA2TjBSQkx5TTl2OEhSSXh0SGhVNzd0cjJRWkxjT2Z5amptRkxVZk9Xelk1eWpxSGtRZzBucHQwUm9MSzhrRlgxRXRzQ3JKUUdnbmdmRnV4YWRDeU9jblk3UHkvekk1dmxjYndTR01yYU5vQ1ZXTmE5K1NhUjZtV0RNeUE5UC9mbVp0bGRUTEZ1MlJTVzllY1FLL29PeHRQa2RPSmh0RW5xaGdlTk9jZFhQQ3E5OG91dm9FNDRCdTdDTjR6b3BYR2lpaGpuK0U4OUhNNGJMcDA2SjYwZlpxVnFlNVIyZWVpbWF1UGNXVVA2ajlhbHN5UWw1MTdDK0MzcjNycWhsR2plQkxiVkw4aEhSZThjUUpKUHJJVmE2YTRQODA4TkJTY2xJWGlpeVBGaFFXc3JNRmRLVXE4YUJYSnJRMUNYenBIODN0dm9IRnBvMUcxKzNOT2UySGtpK1N4c3djTEJUVHIwMmwxUGJNRERoOUlraXhrM05tWUZBQ1RUQnl0SFI2Y2tQTU0xQVltTERxZEtEK2E2THd5aHBGSy9QTENHK3VXNkRXWmg1c0JCWEZaZ3BqK2svdTVkTTF2cWEvd3Z5cXVRSTFZMWlzTXBjRUM4RC9LMDYzdCt3YWJnbmpFZ3ZMdW9SalY2N09YeU9nRlJTWkM5NFVsbnR0dmlKYllBaXVTZ01DaWRwbW5BOXp1TzdmTXhZUmFhM25ZRDhFb0VFZTNzNUdXL3M3bmlzS3oxMExpY2g3ZTdJM0lrY0MydHRQYWVUNDBiYVZDaG5tSE5VZFBLRjlsZjY1SjhmcC96YkZRajcrZUFSSVlvcmdYWVc4VjlwMUkrZ0pIU0xkK0pQTVFKZWNjNWlNNHNGeWJUWHMvR2hDeFdYdXpKd3ltK3ZlSFlQc205M1dTZnpiVmpUeFR4ejJpTzRwb0p1cEFNekRZK1Nac08waTRJd2ljQ0g4SXEyVFZmdzNwc05yZDZnOERzLy9XYUNnMnFxeVJyS2REd1p0aU1ObzZla2JrR1B2ZWduYXpUa0JUYWRnc04wVllBOFdpNmhZTkQ0WDVmN1hVL21YdHRFTVF4eExaaHo1SlBDSTJrS2dJRlBZYjYwV2pIMDRaTTZ4Q0dMdVBqRTZVU0tDbGJBYmZIenZFc0xVckx0MDlIWGw3RUZpTmxCSm9ydVZMZmN0bnNDbWdYaTB6dFpHR2lBNHE4MSsya1BlZXV5NDVWRWtrUktMc3JZOEFjYTBtcm1NSllJK0EyVy9EY0tIU2lCQ0ZicWsxOXNqcUNQV2ptTmhlNUZ6NEEwcmM0MGpwUXl6ZzREVzVTUERudzYyYlZKc2ZyNFJyWWZNRXBKcDI0bW9uQWpObG05OWJGS1hkUHdjd0pRdDNJS3lZdGhTbXpGODYzeHJDSTFVaUtxTnFYN2tlOFljVGxVN080c0NNdGhpR0IzL0VzbFRVdUJYQldLNkdjazFobVJwT3VtTVF2Rk1kTmV3UXNNVFkyWDNOOUdOc2I2Y0VucE50ZFVvNjBPNUV6YjFGaTBHTFMyMXRSSVRpRXlvTmRqNWJ4WGt2L0o2amJvS0pMVWw0L2xYRkFuaS9BUEtvYWxBeUlEbTlMeDd1QytBcExVYU53U0RzOThXVTAxNXZnQ1M4aGRsOE9CNEYvV3NqTDZHNlZXOEVtRUw0M21MbDdEVGNOWVFaOE5vSlpJeTcvbTJuQVFod1VjZWYzb2IwS3dmdGdPdU9FcDlFQ1FrMENJSkhDSDd1UGFuMFdLTFVYSittbnZwOHpXL0Y1Tm9NNFYrdVZGMXZpMXAwYUxuUHlaMlZNY2hWcEJ4ZEVET0lPV1Jlb0lMeEpiZk5tSWlvYlpqWGxsWjlxWDNPdEtqb3JZWDB6VTlkUVJ1MmFaa2FNaFR1RzZOaHJQOVJTOXZEeHlBWG9XMlBJUFpGSmNycDR6V2t1dTN4QUJxcWV0UEZ1ZWcrRWp4UEZLVFNRNjdhVHRsY0l6Z1B5S3F1QlRYOFBPU2R3eWVmeWhzdHdNTStkQlhlOXRCK1l0YlB2UE1CV09HU0ZKWDlWek80OFFSVUNERFF3R1lUbGtuV3haeVhvaTRnVVZwUXprSXBybTFOdjh6dGRGYmUzM01PaEZIaU5FaDFwMjhZNzNxeDhLYU5pZ1JtY2RkL1pWckFxZGtVWkNIQlloUVkvOUFWT3BPcEZLYTR1TVZXUmw3aFUxbE8vOThRc2I3Ulk2eHowZlNvMHpzTldaMElxUWt6ZGg2RXYwZHZva3RiVUlPWWFsYm0zN0xVblQxUDBSZG9wamgwZjdBd28vM29aWTNUaUNHTkp3RHlGTEZwZGk3U3h0MzFsUWtoSDBxaGx6SHIySDBQUWp0dEZFaTBXcTlLaW9ET1BKWTFJUjVUSjBkSjU0NDhUUTdOam5Wa043SVhRZzBEU0V1Q21kODNLRUxNQ2hFUTFxSnJXL0NCWkRoTFhJQlJLakNxbkkzVkQ5R0Y3cG41cXNoU3hBWFJhQmMraURwOU1sYlJiUnExa1ZneU8yNzJOMEhpNml1Y1lvMVpGd3NnTlNNYlpQNmZ0SVpTTytEdGx1V2E0b3pYL1AwTVd5TEFzbDVJWmNoT1JNYWtUanUzejhCdWZPL2hTMlFUUExVYi9oSFM5UWVLM0xsS1VMeW1FZEg2cE5BdlU1MitIeHZtU1VYZkFiM2grOTJUeE5VL0hsdFF5NkZuTkJQbi85Sjc1Y1NqbTRROS9VOWppcGtTUTVnMERENGhHZG5HdjI5T3FRUVk3eis0UVN3alJpZnNONUY1c1dHcnVsQnd5N00raHdsQ2xlY0lLTWF1SDl5UGsrUWZQQkV1NUJXNHNpNWdPVTRWc0tRMXV1YytBeUNjazUxQkd6c0RxNmZPbDdoYmJjV2xSOWg1c0U0U0FPZTFiTm8zN0lQa0hnYzFMK1pjTzZ2dCsyYVgxeEIrRjlYUE1OOEdPekMxeHlDb21DRWU2OTJUMklIdVlsU0F4QWpQMVVSeUFMNC9HQzJzTDgrUHAvQm5udTlhaUdWV2p6WFJFR0FwKzZGTjhEQ3hBb3UvTG0xcjRCemcza0c1U2dYcGdKQmU0d1hLM1NuRFdKaE4yV25Nc0NsMEFKc3lMeVgwUmJualA1dk5IdEVuQ2ZJTGRibkhLQTBhQi9GS29FcWV0NlZBWXduRUFRUFV6ZTQwV0k2SWRFcnJoNXRleXZDQnd1R2p3YzYxZzJOTDBnVnpXSG9GU09YSTlhV3lCMFljNmFuYjZUWGF6d2pGeEVrSGdKZVdVQVlLYmhzT1lMMFZ6dDZqYzZOTFIwYW5KYVRueEUrT0Q1WU4rNDJhQUd4WFdVQkx4Wk5uODZiQ1ZjVFF6L0FZWnhsUi9wTGMxbEZvemNGYnk0QTVQVDV4VFg1TlU2WFFNajhlMVIvVGI3YlAya3lXYUVpNy9BRHh6aVU5UW82ZFYzMzRaUW0vekdvcjdmSURFRmFiMEJuNFR1YTI3KzJYdWpUckdxSFBnWlBUaTRZMDdsR1R5UXNFeGk5cXRpUUxhUCtMdmxMSzlKR3ltUjZ0SUNQTE93MGd6SEFieUNTbWJnZjVmTnNhRE50b2c0QjdoM2hjVjhLdHFWN2R3NXczSXFjOTJoQk5FUDBPcVFpZEFWbTdkSWZPSG1zRmpHaWZseUdLUXdLVFhsdXU0YzRBd0RBR2QyTm05SXpGakN5Z0VQREpiaXRPaWpxN0JRUDBVYXRCWVI2b25NMnZZNUw3bzA0Z093MVo2Y3RUVkhrSDZ0N2ZGeGxCZm51d0xMY1llZTZLYWVJZ2dybW4rYzljMGszZ05IckRKV0dmYnpXTXJ2V3l2WnBpNXU3UjB2TVVaeWt2VUh2dEp2NG9TZSt2MXFCMWl6QTRTSHYyQXpHOXM4bFVrYnByZEJyUGpxUnI2QW5mZHpmb2NyK3pLRDYvSERQUTBDaHdzZm1rQzA2WmtKT2VzQzlnWEVLaFRRU3RWWmJiS3ZGcUhjNm9mdzZ4Z0dYWHRocVUycGZiMlRiTWJLb0lPNGp2TUU3TStCN3EreFh2YVg4OHBSN0NQRUx1cE5oTldFa05BaUZlckh5ZkpEcWZBQzRZUG84cFFMeDhhR09jczJRc2ZDSmR0WTN6ZEFjVTA0c0FPb093QWxKcGFxSFVSdFhuNjZwR0VObS9HQ0lTTmFnTWxXdzc3QjRSL1dOLzFCYVFtSUl1K1NyNEYreGFwaHFKMW1pNVcvdERMVVZQZTk2NXdxMEd0TXpOcFI5TTNZK0JjYUhUd0N5Tm5XM3dqUFhLV05Oa0l4dnhxVkVKaW81V25MVmhxV25mRUJnYVFsQXJIUHllQXZ1MnJKS3B2elVBQWp0ZE9CTXpOTHk3K29uZW0yT0pjTEhXOUFsbnVKZVp2R0s5Mlp6R2toQzBENE5Ca0htY0hXKzdFbFZrMHZPN09aNmZubXBFYzBiUjEzMWc4TTc4K2dBYTBaQ3dyLzZpeDJpMTBKV0EyNkFWOGVaODhvT21FYnVsR0ZXaWdHcWhIMkNCS0prR2dhQzV1WW56YTczSFB5UEZQYjNyWXpZTlE4Q3FNWWRyY3NDWXFxRGZTUkkzV0dHUmFXa0E1d2FsbXd0NDNWZ0ZrUVZLallZdVYwangzR0U3OHdXa1EzMElsWGZZUFBwRGlIZ2RVa0lsazJ4aldzbTVTZUZtVmsvRTd4VG5BNFVEVnFacWpZZXlheEdaMUd2dXlXMVJGdTJkdk9xSWQ0ZFpiTUV2QjFnR2txWUtyL2sxemIyTWJkZHl2d05VTWMyeXNReVJ1VzRpQll6UHBsMWQ4ZnJlSWZYRURGY05QYW5DMERrMVZzZWUxakdua0xqRWJFTU1DNDZMRFg4RkFveU9Fb1FKejVnWnV1R0N5cjgxRG5hMlcrN0Z6Zmp5Uy9EWlVubk12ODYrSE1hckc4MU96Ym9EL25uOXRRWmtsbGNVNWVpcytTRGJZRURYYjNRRjFuYlMydmJPdW9zdURQVGRoSVJGQld0SndNSmdGKzlJZ0lTVWg5WE53aWNjOUhHNk9MUFl0NUtNM1RmSHd2SkhneHdtM01EUzlRYjBZeWxYcWtrZ3BGM2d3MUE1ekhBaXVEY0Q1WVVFanJnUzB6N2U5bERWRmkxMUxiVUhZSnp3Q3BXbUVPMERKejJtZjRwd0owVi9nYmVpUk5YQmlDc3JDSWJuSnprVzBkUFk5blJKNXNHUmlDa2h2dHc5eVE2RHVobjhmbUNxZ0hoK3Z2RUhtSW56cGY2REdnVm9yWHlrSE5aTzdJSzBZbUFPWGhMWDV6YnVPTkYwdUh4cC93OGxPa3FpVUV4TkxTa1NYOWVnaDdzODAzbUorNElla3Y4bEpmTUZtcjZLRXFhWjBXYkp6dzdTZU1RdWJSZDFQa3JzKzQvRWU4WjJGdjVvaDlnczEvdE1ocVloMmNYeXVJcDRPWGt3WkZsR0lCaTFoeHV1aFBER0lMOUV0OXZpK0gwbDU4N0ZmVmVkZ1dHK0ZKREZMM1ZPZ25wZWs3WlkrSXVPY2w2dXBwRTZDTHA4MzdsQXh4c1hJOTdENTFsRWhrdjk2YmpBZno0aG9HM0haTFpUNnRjdUNDRVZRL2kzdElqYk1aQ3RIL0NyK0syUytETTlzMWFmS0dsNmFzZ3JzQzZlQVRiMGVuakJYeGVuZWpsbjV1a3h6VDRrOWVlVUhwVDRmd3hhWXRoRS85OHhuMDZCRXZKLzJpRGUveHRiRG85aU1iZzBzei9SSHVRSUd2d2ErblVFUk9yZWpCSmU5V0NIOWZTNm4vYUdWZTIyRjROU2tyZ0xYM1FsYURhcHA2Y3o1TWhJTGs2ZE9EOVdoZHZ2SXpkeWRBY3BHbjE0VUFvdTFBWHlzNXU4TUIvYlYycnFVck54cHVuRXlWNS9Yd3MwYWluYmJjdWE0UGVac25yVk11UDZ5Q0V2TGIyRk9tQ205NnNzUkhnSjZzanVaZG1kdndaMWpBenNiczFCYkFJaSszdld2OVFDdllyVkQ1QWlua1dtUzNpS2xLUVhsQWV0eXdRRm9QUjM2dWdmTXJSZ1dpVnFaNUNObjZsdzB6WFlpUVZCS3NIQjJTWjNJa2YyYjRIOUFGYjdyanBaSStJR0YxMVdGU2MxOUw2dHFEK3dEenpFWERBK0Nma3dLMlVUWUtBZkpaSW9GMGtaQWdvb2ZjMGZqS3loS0NaNTNrZVpxV3kyMUtzNHVvaTBEQlhPREpjNFlkVzl4UGVQQzNCaGVHaGE5L1hXYnk1aVVkaWNTdVZPY0RHdDY5RVBUYytMSFZWcldzRGN6T0ZwalY4TGU5YzlqVTk4bzBCZzZRSW1paStVdzZ4aW9IYXV6MUJmajJRL1A2SFJZTmxZa05MK2F3cGdzd3Y3SjV2MEgvcnY2dUtETDNhTnhVWU1QUFFMSERRaTR6cWs1b0Q0aDg3cHZUV2VGc2dPV2h4bjhxTFVucDg0emUzKzdocDRKWFFsOGtMSzYvQysvaGx2Wk1LV0t0dkl1V3RHTTU0dmxvRXY1TFpLN1JaS1Nod2VyL3ZxQXBxNUUrenkvelRUclc2TDJtdWE3d3FzeVgxUENpNXpEQzZ0TVpCOVFpY2VvYmN3QzZmMzZKT2ExZGk0ZlpGYjhQNmlPRlBXMzM5cUU4bTZxK2RqaVphYXdyWWZZSFM0NmJYL0ZqTGY3SGZaSllySEZiL0ovallVY0xwZnlsWFBoS3lMdUVIMGJPaXVQSzdVT3Y2cDRMNHZGeVpYSExma1c0QzBhdEpjWmJKdlluTGFaTitLS0h5bzE4TWQrZk9HTXJkeE4xdUJNR3VYZ0J4b092bjF3TVUzdElrRFRCUk8zN0sxS0c3bU42VDJOREk1REtUeGNmTGRrNFBPM0d4NHlkcWRjUTFLREZoRis5MFVINzRTYS9IcjhSY1h2cjg2YlR6dGxmN0dhK2YySTN5cFdNSmhhdnEzS1dOWVNGamkyZ1QyU3VXOXZ2d3NOZE5zdmlWczdIajVlS1B0bEc2RUtHMThqbGxXaFhhM0lsZDlxcHd4bzl5N01vcE0wVjFydmxYQUk4ZENLM3d5ZGQ2dDhCaE1pVTdzcFR3NVJZUzF6MmU2QVNLOXJzK1BEMmRIcDViL3Bpdm5nNXFvL014TFpZc09lNElwNkhiM3VtNWRJdkxad0lhSUxadHU0aWMxeThJNlBNSmgzbVMwL1hjMkJ4UnY0TXhBY1ZJNDc4Snp5cytqcTlMNE1LcFM0enZKS3E5R2ZkaS9PUlM5T1hQdHFFdENKSXl6dEY5bG00Snc1aEJMcUhRWUM5NStKZUhHVHRtMVc3eWtGY2poQ0Vuc2pKWTgybm1ONitaYW9vWDRTbkcxMlQ4VWFuV1lpbjVHT0ZOMGJlTnB5NVRLc1F5QWM1UWs4QUlsWUJzR2lMdG16SDc3NWxXTTBBeTZTYXRwV2FONHd5ZlhKeU1ONHM5RDgxc3NwaXIvV3Q5QTZnSU55ay9KaVJTU2FKaEd0SmdOQVdBSGo1d0ZiVUNoT0RiV3pSUlJzNzRmamhCbE9yMDdwNVpjbVBRdXVFVE1GTjJSN3U5azVENk1OQXJ6dFV4QVo2WEpKQkh1RjZWUmplZjc3ZS8zaUZLU2RSRUN5MEs4NjZSbFVERTU5ZnFZUDREdmxCMFFMRE80UEpGYnBJQXFKVjhjMXpPUDAyYkExQ1JYTm9vQTVyeFlFblhpYVZTMVhpbGVydmtORGQzTXd0SU5pck5JNG9WaG5nTWVqZ0JOeTVaUkQrVXRrN3FQSlk0by94YnFWYnVucFNVRmhZM090Q0d4TjF5T3NNRUF2U3lSTEJJVHYxNW5CcDZPNEc4NThoTVNHbTFSVWhWcXpDbmNDTE9ZQ3U3d2EzbUpvWS91R25rWTdzYmdPbktDUS9vTEs5SXA4dCtzclV1VitLblFORTl1VTRFRTY1Nyt3NlR6ak9pSUthQ0FDZ2VOaHllWncxTWlLS2NBTnlvWUpUVUEvSS94dmU0cmU0ME5CeVBCSXhQbFZhaHFWMStXK3VEeWNzQW9WSWw0WXRUQmlDSWxYQlhNOWdpZHVhMjNXN2dFekNCQkRRVkxaWndwWHE0UXJQbHpMbHhUMFV5ZE9hZEI1QzRYU2JpNWVsL3pLY3VYcGEyTlNFeHlId2I0bnArSmxqL0JaSkZNMjVadzQ0U0V1RFlRMDFReitEL1M0L1dyZWVxNlBLQ0l6dEZ2K3BUa09sa3N1aS9ad2RpaUJadzlOS3lLSWZpZjJzM21iVkE0QjJ2c2NmQVE0eUZnNXdmdjUvajhyc2hRaUJSNTd1bGttbm5KOTN2VzE4bmtTMGpyZlhqWmtJVGlFT2lzVVhYU3YwWVRHbzgyL1JpbU9YZFNiOEJTRzhDcndZVTlLZGhrQVdkMGZkTDlzN2pZY3FmTk5CZFBORmREZ1JzeS9RMEFXQXhLWmNtWGhDbGU3b2oxSU5yZjd6THcyNldIVnAxdWxLeGRuOWFWMURHd2JOMzlQZnZQRUtVM1lmZlROMFNSWkJ1V0x0eUJPNVpPUTVmQzdWUWVCUklqUTJac0N5U2FabDBaUVlVeExwZTZac1d2QVdqd2tKempaRFhBOW5XejZBcFFnS0twL2ZobE80cVE1R0J3K2llRUdQMkVEZWtVVURTdTA5WXhjZ0drOWZ1K0RaZUluaVE1VWt6L0xLaFhrL3VCd0ZHZVhMOXVpd2tNVzJsRSt5Mk1kYzFNK1RhdVpRblpjNlpQclhubHZmUTBxVkZpTzNSeUxJTzRZYTJsYWNOUW1BNmlDTXJTV2F4aWdsOEtVZ0x6eWJoTXRtR2x3RUtKM2pNV3NtNldkejBVR0tPOHFLZjFtNEsrLzRQQ3VoQWxSbWJ2Y0xlN2dTamZhT3FZb1FzQUpHVURFUWl3Z1Q3MWUrZ2pmS3ROcElOM1BIcU1BazM4SGszS21yY3FxNS9rL29JeG41Y0k2aWh4RnEzYkZBZEpCMlM0VzJiU2RTeXNCZHhkUXg4VlFVM0xvVzBTbTErdEdKNWtjRU5yTlJzQVVxelUrRWxLNFJxRllpWGhTQnhhUVE4WW9VcmpyalhhNjA0Zy9mdVNuT0NHT2N0MTJqZlhObERIOFdnV3NjZWd0WW5ZS2tTNkxjcWkyWG1MQzNDZ29OWitxV3dkdDFpRGJYdW1zMzM0V3JyZGJBeVF1VDhEQkx1YStCSjhqd0ovZ2NFZXBsRytpNUNrNitGTFlTSGdDYkMveFNHcWtYRTlwQ1VkUGJGUjM1aExDbkNDTlJMYWZBRTl5a2VNN1pOYmo2bmQ0QVNXOU5XUFV2ZlVYelJCbEdObDFESVV0dlJKelIzTzFtZjJqVkJRNmpvNXpBL25OdEtpZklVUS9SOU14Q1JROHpQR1lFb2h4VWZWejh1RHBQcGxLZFpVVERldWJDS21vcGtVbU5saUNOUFpEWisvdjVGR003V2JTMlU5VkJCUkY5WUtHS0sxay8xa2ZZV2ZJTlJpSkZoYlNxOWxMSzhqdDZ3QnRZUi95OVhTWDB3bW5GRytvRzkwNFFmSnBWaEFCaGVWSmhaQzdHbTJza1E3WlJ1U1doajhkM2tuRFZpei9GajRPbzRpM25ZaXlFWTRnUG1ZMmlRN2JPVUlnby9HNERITG51K0NRYTBwdjNJYUxIUlYrZ3FyUjJMbG9XakxUbTBsV0d0Vy92NFk5NndQR0s1V1dEMFpxalJwMDZtbElranVtdmhoZkxIanZPaUl0c2VneXVWcjF4RHFYait6L0JId2hCUnB3RGF4YkkyQTdCdlAxQnIwQWNTbXJhZ1VLWlpPY0c3T2wxUDBFM201a1R3c2ZGSTRac3VVZTFZczUxblJ0cVNPVU9lNFhvU2hmM2hjS25FR3ZDdm14UFRQdGxkNGRaK2RDWDU4MlRoQUJnekpTWEtIYndQTStCU053Y0pTUjREMlJldFl6M2d6Vkh3M0dub3E4MUo1b2g2eUgvaVF5T0ZHQ1lqWHIwR1ZoVytoYmdiNzVwWUI5Wm1XZlY0Z3R2SlFFeEhoMWVuY2t5VUhPUzY5L0lxSlExTmlOKzA4K3BxdGVmdzlNWDd3K05RZ2pMMTBVODhHYVh0OU1uUGIvZWdSckVnY1JRckxFaWxjdldTN09FNjhVSlRFTXBjSXBDaFZTT290eFhDc09CMktaTDVOQ0xRZmk1NUpVYmxPNUZ5dlZuS0NMRklvL0syZkZPcnJMWExodlJkdG5oSHZhUExIRndYNnJ2MWZSd3RuZmxneEZlSVpBMW9jdkU3bm15ckRldE5zVzZRMTFWdXd0Y2U2U3pyRmNGekhRaU1DQWVRUTFIUnFieHhiQmVGUmV5eTF5RmdRWDg3SmZOS0poNXROZWNNYm0zZ3kzSkhKeGlNcHFaZ0crelhVRHJIQ3Z4eDdhcmxOT2FJZzhzZGw3NFdnMnBRclFuZGg2Q3lqR3NZdFNPdGZOMkVJQWlnL2N1MWxSb2pZMGhtSVFiUHJJZ0xLQzN6UUw3ZjBrRWpmeWZwd1cxL0ZBU0t6UlVCVC9uNTloWEhlOWR0cFF4QWtTMzRScHhqUS80K09hVm1IUWZqdG9WcE12S1JoUHBBbk9hdVpZdy9LT2xWcHZtUWVMNHhhcWlSVy8rQjdIK0phQkFEYmwxbmpJRUlZQ0pCL05IdW9hWDR5cUlPek9taXBXWWJwNnNKWVA4bWg3VEFpdXdqTDFYbm9RN3piN1BZQUpTOUNaMm5COWMreTVZQk9xVE9JZjZkMjNoQUhYbmZnYkVwd3ZBdnBUcEdrTFFNUWl3Y1VEQ1R5a3hIZk5uZk1CYWdNL2Q2YTZJSWxGUE1Wc0t5U2NzaHVNOStXeFQxakx6b013a3JvUGFUL2U0TVdsY3dOcTJ1UE1tODFaM1BrNGdjN0h5UFluQURscmd0NVYvcllhY3ZMWmtVQmFSeE0xMnNpQXRVaGo2SHJJei9NR2s5TGZqaXFITzl1dEU3THQwS1J3NVl2T0FiRWVVOFBwdm1YK1hScml1TW9ZdXkrUlBHbEI4dmNLWDlxTUkyMGxqeHBiWW95aFdaeVJ3a3NUNGFGMWVwQkV2MWVDOWtabXB5d2pOdGZ1NWkzNVJIeEcxenhRWElkbS9ZV21EVmF3T2lCMzkrbk5LM2kxQllrMTVkUDRvOTk2eUlzL0N5QXlxYUVGTUErMjBOZWJwNit0Mk9xdU9KY2Fwc1gycU9yTFp2ME15RDhabytmTnBXTTR4c0k4UE9wUDJsVHZUV29CU2VXNytxbWZ1Y1dkeXZsY1NOYU4veVdjUkQwSUdaY2NFNlhuNVNnbTVmaFlzamlpQ2xTYXppQ1dtaXZFNlJRV3hWRzgvQ1R3MXhVc2duN0VTaExIUmRXcmVqdldVVjdUTEh5bFBSUFpSTCtMNVJRSTloTVpHVlVDelBneGRKOGRNK3VzWDQxRkdrNE5SeXkzTnR5dE1oL3V2MzAwQUM4WXNEZG9WaGkrM0tBb3lrS3VweW4yQTR4ejM5dExXS3NjQTRlMUN5QjVnQ2VsSVc2Zm9aak1LZWNJNjNVWk13YjBYc0h1UGlKWmpXeUU0aXQrWmpjVkMyR09ZQ1liVlc3akhXWFVES1ViVTZzazBsS2luckdDYUlyNzI0c2RpZ3dPeWVzS25DNG5hdnFHVllGWU9GM0RGVUhrQXg0UnlrVW50WnF1RS94VXh3L0ttT3ZhN3pHUnR1UG5mbnljcUFQaDdzSGVVTWVraS9zRUFGWTFZaGhMdnV2dHVkbjFSTW56b2NGK3RZSjJaZ2JCb2RGbHkzWi94L0xOaDR0WDlHYWpjZEVPQ05JTnRXTFNXODZoUzRIRE1Bb002ZjlvT0pzdVFEeXhDaVNXcEgxTG83UDlUSkExa21ncHpaRXU4YXhWQTBBVUdXZXp0ZUlFeUFKOFlvQVNFZ0N6TGszaEwvTXpnUDNnZXoxWHZhbWcvakU2aUoyZ1l0T3FxQkxuTlVDeTVYWU5BUHBpejkvd0xsUVZsNXFGU0NDenJydDZJNXFscExrTTZacFQ5WTBvUTRncThEalh3R0pwblk3VzV1bzVJV0tLcitxZ3ltUlg5UjcxNzN6RmUwM3ZERm4vRXJES3pTN1hYSWthWkxmS0d3bGwrNHlGUTFON01VV1BOYnZDYnZhbTZRM2wzemt6MVpQbEtWSGFGVTRHQ1RRaFhOYnBMY0V6T0Q3RnJJbFdzblcvaWJ1eW1qQnBaUU1mTEJsQis2YkRQVFphalJRdUY4cnBid21OM0Jaei9pekdHYy9BVHliSlFCZ2g2UkxUMm1jSGhqY1d1U3pkT2ZieXl2UVJweXdPZzRPMENBdXh4ckRMR0VCZTJ4bHA1WkVBaWxQckV5aUdzZUNORzMwTERlRGdEbkNJNnRIeUVzdkFLMkFtenRhaVlzWTJBUk54Ri9acndYS3FiNVB0bitlSFZycFdLN3JRU1lKc1pseU00SjluTjR4VTVjNy9NcGxUcFpud0VrRWVCTGpNMXZQNS9TTGczOFE5S2lJd3V5dnQ2dzBTcm9IdEJRTnVyS3V0VkFmeUZVZForNU1XSi9YQUIvMEZsZEkyZzRrZ0V2VXRsVVQzOFVReGVxdHVRaHJuNDF6RnBQeDF6bkx4RDNOMHExbElGVkdzbnkveUNFR2M3dWVIZFhZSGZxcU1GQ2dscHlJREFEOURpbHVzeHZpNS9aTnM3L1VnZkV4SEZveHJKeVl3NHZGRVFGdXc0UGJkTXpVWkUxeTZKT2RyZHlwWXdYOXE3QldGb1RWYWhWSno4UTRIN2JJWldTS3JYZERQdzhxVW01NklZNDNUcm53WnU5VmFLWmptTGR4STNmZDBvaHFIY2pid1VxajdEMkQ3ckUzVmUyaU80aWVta3pOQ0l2Tlo5RUdVek9mQk42akowa1J3OXdwdTlDcmVQcDN6a3NacDVEYmR1dUlkRGVUei93cTVXY2R0WDR4VWQ5YmxGUWpyT2c0b1JiRVFxakhBdzJkZ1VXUkgyaTREQXVpU2V1aHAzNE1HVEtoTVRYT0tFSHRFZ3IrQ1NydEJqb3krcUJpZXZzTkxaaVdtQWVVUmEwayt0eVN0NndnTUluV1hiZG4zRXZURDhzaEhZUTYyeWYyLzljdG5qc29UNzA5dVl0QnJOYjFBdVFQZ2JlOTlRK2JrOEI5MWErS09LZFZZQ2p2a21MYzUrYkdmY3FlbDgwNWIvUFlLdWpyTzVYcmN3Vnc3MzZiYXNTcWNzTy9nOGNuNVNBcEs0M0oyeFVtclF4Mlg2L2NMbkdhZUdTMEdDSzJ6V3hhQUJWd0N4Q2xQWVVsVmZZMlQzTHd4c1lSejJscm9wUThDN045SEE5dVZGMFJtbjRIbjZ0RjFBMFAwS0U1a2sxcHpPUUtCcXkrb2pnVGkyQ3cyWUFVaTgva2ZnbGpoeDMyT1gzbFN6TlRTcGJDWXo0VzR3Q1dndThXZll0ZkFudTdvR2I3dW1jYnlnbkJQZ1Z4cCtINU9zQkViYnFuMkZQdTlidnljZXNFWEwzNUZZY0N1a3VoU1plTEpLRFQvaHVCanJveStjRjZQeitSTzU4dUFJV25hUE5YRlhvcm55Ri9LdHFzVkJ3REJibjhIR2tIcVpaZHlsUTNCS1AyUzYxK1VPSUNpclhKNFpxcHZqbnJxbHIvQTN2UGlUUm1OMjRLZG1vd0tyYTZBeCtTUVRyUGNKMzZkeTdDQkR2RmY5b3hhWm91Z0RaRUFWUksrdjFYYjdUbUhtZlFtMVkwZnl3WlBROEoxSEVLYjhIVlZCelZ4dXllMXdzRTErSkxBOGxQekQxNjM1VWdkZGZkMlN6RUhmNWs1VUdIS2JaYjRlS3ZlME5WQVZtV25VR0FzMUZmVFZvOWlOZFMzOUcxd0NHUlN3VjdFY0dQdzJuYlpObGtObWRzdlhqVDlLWTNxeTFJSHViK0JpRysyNkhqdytON2s0RVJGTzhEZEx4TXQ5bG0yTnpNSTVIc1RkYk1zdW1sNDVES1pMOTA1elBQWG1WSWRKUW9UNEcwbUFmanAraGo4MFRqQmlZVUpoSWhWMzVmbFl1azZPdXFNMUpOYmVadkt6dklka2RQblFaYkFRcG9WSkg2VkZOdXBLbFZnWkFXaTExU2R6bXEvVFBVV1dWYlQvYUxNZ0dPRk9KSXI1SWVNb0VjZ0hnTXJOcWVkL01BaU0yZEJTOEFLZndubjNlR2xFaWN5ZnQxL0JmbE9FZEoxQkh6VVJidmZWZVRrWk14Zkh5cW1NT0lqNnBBMVBvOS9TdkdLWnlHMmQvbGRsN0hRZ2xOQTZVd0J0MXFBNGVqL0dTZnZhUnU3RTlYMFllendCSDF5VU5sR3BsWlQzbEZycmZhbDIzdEtOd0NXUmNxYzR2S2RCZTNtbTh4czU2Y2gzbWNWT1pBKzgwZndoaWhmTlcxOGJndGt6cmdVellIRzRBeDlxbmxka1I1NWNSUDN6SkxTTXdWdFNOaTlocUxpelRnZ0dFdGVMY29ucnpmeE4xQk41V0dqNWw3TVFpVFZNdFR6YmFYbkJ6WExTV0RBUnQrSjJ0cEVneGpNZ0lpdXJlSHRZc2RWN2h2bDFqcjZNb1NueVNpRWNSUmd4aStkTHZtYk5LV3BKcnJzZ2N2R2pnS2RPZVptRTJGb3YvRWZuSWVPTTYzM2ZTUUMyYktBemU3THJmSXo0M3E2YTZFTlR5NFNPYWdqbzFGTlVkaHJpMDRtTlhDME10NHlReno2NHNHZFJxSit6SnUrRVUvdmpZWVJlWmtLVHI3bDVqc2ZMR21UNlVWbHpKRTQ0STMrZndpeXBXMG45bmxIc013UTMyeTQvZnFNT1ZNSDlra0xMZVBmSEJQVHFTaGdrczQ5WUtDVnZGSUxaYjlKREZYZVlXTjRIL0ZlOUtuZnNtSlZlNmRMbkdYb3k1VVMzaVhtTzhVeTFlSjhLT29BUGVEejR0b1M3dmFKNmdadWhsREpKRXoyZ2pBQzBoYnpjMHArMlVtMmpFTStrbklSV1pqK01WSlp6R2lxMmxySDRVeUhOaE1oaDd5eFlUYi9jeUd0eVVZQTIxTVF0OU1oMkNwOVVsaXlDMlE5ZlZLUzhZZkthYTQxdHc3WUJXaEhqNXNMT0lRdndNNnZXbVh3ZVNQMUNwMno4b2M3MXc4MTFncHNmMUJzSkl6UnlCR2NmYmVoRVkrTGVNeWFZSzR6Q2pPUG8wcktyM0ljTXkyaG1ldENIUnNGUVNuSTY3R3UrK3hZZDFQYllOT0hRM1FOaWRrK01MQlBGdzFTSW02RnA1di84WURCMEpwMG1UVTNmWTh3Zk9QZnZGTWN3S3Q2b3dBbGFLaGVXQ2xwN2VZRDFYY09wYTJXbE52R0VWL3hxRXMrKzZLOFlYSWdZeUQwb0IwUUxEalEzVkZqWE0rUFRxQ0RWL3ZtanJmbWtsYjgxRk83U1BKSHRWd3UrbWt2Q04vdFdiOU5lL1h1QklUN2VIck9PbjNzK1BnVXFWRDRteWRZb3MzcDdZK2xSSlAzdXJxTHR5WENXUWd0QUloZDBtQ3ZRczdaeHVMK1c3MFFyenZZdGlMWVN4T0JoVWlwNnRWSWJuaE9rUlZKYmlGTFU3UkhJMkExTFFETUhlRkpXbmJhcTdPU2ZPNm1EcTBHZGpnZ1ZUTTNlb0ZGM2sxOUcvWURESHFXc2EyWW5IZzNIdWJ4aDlGM0tJSXBTd0JQalB1NG9mR0lTNUxCSy8yakJjTlA3UHd5YlJucUJZUm9vaHFRUDNMY1JXTkc1bUZaWFVKNDY2djNxOUNzbnlHRlRDQ2hKL0dnWDBvSmZtM1RCUzFWbHhCU0VJTE5uSXZVUCtOVjNPZldFNEZCTkhsUG1sS0FMaU5aU0ZJVndEeUxUeUtjczY1QTVSOGQrQ3kvVkNjaTNIR0xzQndXSmVZM0ppMk1GRWNNWTdUdGcxc3UzRDRBTUhsaU40L0YyOTJwdjVpTEhHRDFXTmFxM0hEdmNjMFU2RjVGSFJockUwb2RmSCtZck9xWFM1RTFvWkFNVmQycmx1RFBIUERZcjNEL1FnMWNnRE4xRUFqb01nUmdob0h4aTdNc0ZueUxUUmpQQjZNVUZWc1liWTJuK0tLbXBBMGJDRW5Fakcwc3g1NnNNdFFPeWtlN0Y2VHV1c21HVFo5VjFncytXY3lVSmxUcGdUbkg5ZktFZnd6TEJPVUZTV3RsT0llTXZxVmJIMTA0MXdPRVhCbzdRUS8xclVNbWFHL1poMi8zdVBiNE9xQWIxcEpNWXp0bXFseWpqakt2Q0Rxd2gvYVYrNUdnMDVXQmJNZzdHbTJFbnFueTJHUjk4blJCbjY4eTFqQU9NUjY0bkQxd2h1TFJvK3BWRXV6TXI0K21TS0RjOVpyNnpjN1ZYU2tiWHhSaXEzeU04ZVplYUFsSXh6cktqd2toWURjY2VCY3dCbUpVUWVuK1h2VlFnSjRJVTd6a3FJN1luRDBMcFk5UWFZcHQwdHlhVW9pUzlkQzRSVmRodnN4ckEzN3dEenB2dDlwdkFXTUpjTmh6OTF5anZvSy9leVJiRzJlSkdBR3FFbTF3bnd6Sk9TMC9OZ2pyeDQ0M0c0Z3NUZnNzYnpUSzlObGJEYzVFdUpPNnBrbzVHK2wvbGZOTjdSTnYyc01qYXRtNE92UjlRT3QrYzUvTTNwQk16L2NoRGJVbVpEb2VkN01hRytrMUhIWkhjNW1yWXN4THdscmtuSW05MlBLMWk5dm56SDg1UnBCVDRmVjJic3FrM0JCSHlaYWtkNFZzTU44aktkL1dhc0RNLzVSb1c0dEhieElzY0RSblh4M0pwWlZTb1h2MXVzOFJ4RW5EdjU0VHpZTzNrR2hRQXBqTXd1WDlzdU9maFlMQk05V2huUUlUUlNnQVV6OFl4aG00d0FKNk5kNTFTSzhGaVJpenFKcFdjYWZmSHF4Uk5QcmEvY1d6QWgrTmVLVEs5eWdnSDQySkdzcmNNTnNiSFZFVmlONlFGQURnL3ZhaHJ3bWtTV1htQ3NKZnh6QldaQXF1a3FmYUtUN25hYkVMem51TmRsNGpUbEY4SFp6cWlQUUl0bm1UOHB5UjVYOWZ1Q3dpUDZ2L0VHVy80SG5sVFJWcUVJU3k5RGMvYzUrZnJQUVRjQVNJSUJaTTNEWFFGd2JWS0cyaEN4Z3RuOFNKSC9lTXZnY0wrNENxSlJrMnJzWlVqTUFZTTJZM2xLZGpZSkdDRVluaEFtY3EyTmN5enFXc05BMUxlTFNZNE50VFg1R09GOVJFL29Pd3FSN3dZT2VmMkdDYUVUSWFzRVpMMStKd3ZmaUh5VUJTQlNlYUZ4ZlN5Y29ZVExJVTRaVlduNGJENFU2ckwxTnpDL2dYZ0VuR3hhMUg4bjhZNld2bGg3TWpGMzd4U1RjNHNZTE02NURJUlA0OUFBMWVVVUhYa1NNRG0yQTdjN04wUW56eEtNdjY3bk1WMU9YNm1kN29UOXZKL0xHUUpNd3pXV2ZHUzFHYXhHZkNhQzU1TTE1S0ZGZ2lNcFlEOGEwRjZjbzhIdytnQU1wMjVYWTRVUG5xRUdrTXdHSDluQlBxT3NnaUFoOVkzTkR0ZE9rWkFVN29CTFM2MzBBdy9vd0NBN1lneGNIYTI1VWdwYjE3YkZYWC8zbkR0S2ExeGl1Vml4OXdTT1Fxd0N0bnVGNTJ2bEdoNTNURENDMm5yRE1pcFBuSmZaUjdKdG93WGZPZUFRc3llUFNNWXdNWkcrd0YxWWtycVdkYnV3b0lKaFlzWVl2QVRpWFc3dktBb0Q0N2lKb1NIQzFIRzVSa3Ewc2NuYVgvMHdtY3Zsbm9kNWRlZHJxSGIwT3RYV2NaS1drWkZqS2YzYWh5d3gyeUhwQU01L3BsdEE1MDQ4bFNEd0JwOXFPZndKL3pCbU94K0RLeHowcmJhd1dtZEZsWW95WkhscXhBTC9LS3NFbmFrWEw4b0dIdEp1RTJGdGM2REFLNlhTV1FuVmZxQXE5QmRsRnFGSFowcFV5TkdUaVY0dEVNUkdwZ2I1c1VGcjNDcUdkblJLNGdYbGxvQWhUZjhBendlYXFBT3M1SzhPOE9TdE9ISzhqbE5ubWIxa2VGU2x0Sk5ONHYzUGNYVTlpS3ZyVzlKV3JBMGhiK1hLY04wS05aQ0ZDdU8wRkE2bXdzRVE2M1NkMTZzSGpRVGRYNVdzSHJiU0FxdVFiUXIzVnFHVm8wbXE4Q29EandHbUs3QjI5OWhMZFdkWGs2N0FLME51ZVNJbnM1cERoY3YyQmFaOTdDNXVDOURUU0NQdVNYTXh1c3lQTTJyTms2bHNIcEJVZlEyYVM2d1k3MDFGcmtsWXN2RnpoSlZVTmpwVHhwM0REeTRzS1R3dUFqOTlXWFB5MUJtOFp6SHpXdk5aNi9LMHVMY2VUcWZZMkVUbmM0YndONWRCWTZRMGxlUUsrT0lVczZLcExRVzJlU0NhelV5S1NnVmZWMHpBdXNNc2tHM3IvRGYralVqN0E4Qk1pb2xNWTM4SzQ1T1N5RnIxVG1QV3ltd1pseFhpcm1HV1ZjWlZzb2JRZGVPSzVKZkRXNGdzQklNYXJvV0RJdWhreGlWenRNUFdnSlljdTdxcHR4REhWZjlod1VNaHloTzZJRWVML2paS2NMdzgvMzZka1hHdmN4dkxIRUFGWmJkZHRlZHJHZ3pBd3l5d3dEWWtyUVFhUE13a0t6SmtFWkYvNkwxcnBnOVNmd01OUDRCUENKMmxoVjBLM2YyRHFJT0k1NG1LcTVxSXNWRlRpMVRTUHV3ZE1PUzVIWHEvelIrYkVEbXIveWk1MGJnNmFFSW5TQTd3MncxNG5jTVlXV2dXZENucjNydUdWdmRpTDdSelRHT3lvOUVpWHl6V1R1RERzSVpVWWFmSCttV0oxMWp1T3pQTXUvNERFN2dnS3pHbmNFN3lFemhGTVllS2JTeDBjU05VSUhZN09aLzhtTGEvTzFzaWtSd2RRUWRpcHptNHlxbTRJTSs2MkdYNmx1aysxK1JidVdFditTMTdMN2paU2loVkdRdm5QZUVnQmVyazR6N2hzUGZUc1Eya2czUCtzaXEzZFFpR1ZuNng1TE1SaDBoRXRhbVdhZFRLcDk2ckFid1dKemhaYjlvSkFWQ09FQTdHejhjdjA4SkRkU01TUnJNY0hjUDdzcjJYUDdzWnQvczl3VjVRQlJDQlc1dUlFTVpJU2xIYTRyaW51L3QvTVR4V1ZzWHVhVUd0M3BMTTl6RG82V2dXTEVuY0tGOGk5bWM0YWpnWlZPNmpoaExzKzlOS0N5VXZvNzBhSWd1MU9IclVQMFpTRU5oMlZrbkZ3SFRmTWg1MTRTdC9mMWxjRTUyNDFLNGYvM3MrTVFBbkpRNks2cGV2NVJ6dklOalRsUnpXSmFyZGdhSVdXTUY0MUg1NEdkZ1p4bGpBT1hkVkt0VGxkVjd2MnFoaUkxem9uNTVWOUMwYk1EbVFvcy83VW9odU0yUUlQR21FT0tIcnd2cnV4UU9Ua3p2bE92VFVGNkFVVkRnUTlYSTRiWUgvS284ZUdDcndEam96WkhVZm1Kemsvc3NTUnNRQkdXK3Ivd1E0b0FubVloQms0QTVKUHNEL1Y1ZDFmTzdiWWpHajg2amtJQzR3RG9vOEl4OC9MTjNzcXAxbE9oYzNQbUs3Z0xoNkNrcjdDTGw3ekFYcXJxZktOTE9tbTBNTWc1bkQ0eHh4K0l6bmdvUjRoaFNSTXdRNHVsRE1TY2ROUFM5OEd1R2pWcC9NYnVNU09NRmJESUxmMHozZFdLbVpUV015d3dxM1ZkUmR5Y2IyVGovbW5UalVVbU5ZQ0VmK2E1czAreXc1Nmc0MzVvaU1EZ1pnTUdmNjRVYTAvUTgwdE9QVUFKSWdlNmd0aHV1UW9DMitSamdiWENJMGFUYS8zekFOeTVkdE5HNHBXTTErT2Q0cGNHZE92cElVVmRsekdNVEhGcmVNblVXaXdRcHN0MEhYS09TTUNQNGlsZDkyaHY0L3IxNk9HR095c2ZXN2dPSzFwVTNuNUI5TnMxL0trYkM3eENIU0MzL2ZsbnkyZmZSVThQa0tleEQ0Q2I3WnAyQTBuMVphbDRYRE1kbTRmMU92RGVzUFBTdmZzUXZpUkVTNWdWeVVhaVV3Z01lUzVWWDVkRFBPSmhvQ3VXMFU5ZmJlaTRLK2ZIUnAwbWcwRjZKMW9XeVptdUtpY3FLWjF0MlZFYzBDbDhYSmVkUnZ3ck9RVWt5ZVkrdSsxNWpqeklSQmR4cmozM3hoSWZnd2pVL3BSZVB2VWViNXBQT0dadXF4REp4dVMxTjc1emJOcnFyL2FVK05lTlZOUU5DZGVxRVJXNjA3Kzl4cVpIMnB1a25YZ3dxNm1UUHJoaTBSMmNTVHJOZjk4c2xsLzE2bTRhUUlSMzJDREFuMDhlSUUyVG1BbHNTSDVhTXRFM0FETEN4YlloTHVSakVuT3V2eXJ0ZWxjeEZGUjdINFlHYTQxZEQrSTJrTXQvWG4xb2xvWjhpL01ZRitqWXNDVlRpb0tudHNYdUhrWHlNOGszWmVrckxZNlVmS0RaUmQvQzV6bEppczNESVplb09xaXBxNHI4cE13VFhDL3k5R3FiS0prOXlrTXptN21BQ09IRzVxWDVLMTdPMkRRRGVpMGMvK2RiUUNLTnVXbnRBRXZRb3oxYTdXNE1rR1Z1V0NhMXVrV2FpRS9pSDdwd3Z4QVlMTFVJQTlHQkxoM0pvRDNGUU5qN3JWOHlOSU9BbTZKaUpYNFloVUJZR2lsaXJzMWI0c0ZzOHAvYkRTR2ZjQXFDWDMyQmZFOFQxclpnRnVQaEdoRXVQVXN6dFFZOEFISG5ZQUp2RWNKMzFjcnhmUkRTNWFEVnJQQ2txUlJyc0lxMFVaNnlraVdlMmluekQ4TEZmVFhET1JHeiszOTJoUDJYRVRkajBPOEZ0NEcxY2hXaW5HWVdKMXQ5NUIvY24vYmhnZjAzL3dqVnptOGVVVFJxdnpDSmN4dVVPQ2crd0Z0VVA2emRRb0NVTDJOek1MYUxBMWt0d0lvTS9mVFlGOWd6NFc0eEpGWCtiaC8yWU9sWjhEU3lsMFVXRG9QU1JKY0d2bms2MjJ4VUE0QnJJK2hmdzhDS2MzU1h3ZUJYTkVXQVhtUHBqaWkvdGRmUlB1MVRSN2tDeHhEL2lrdk1CSFB0S3o3NGwrbFhDMHJqenZGLzBJKzdNaEQrdDZxWGhTVFZndUxmOWJUaG9WRjhaem5SY3RXRG9JU2hCdGlQOUFNdWFoWCtBVnhPU3hBRERXbGJFTFpxNi8vdzJabmx1SjltbVl0Y0RYOWorR2dVZEx5RURId29zSWQrWGVXT1dNWHVBY2pwYWRQY0xEWnhBMHpkUFIvVENXUmFBZk5TN1AvdlJCa3loaThtNEdwaVN3WHUxcC9aWmdhZXlJdjdpRUhyUzlyclZBeXdqYjVuWjhrQktJUUxVMzJmOHliS0gyQVlPcTNOOXQ0b3UyQVFCQ0dMTkl6NFc1Y1JiMkR6ODNQWnRPRjNWOEVWRkZrVE9hMXNJMnNLUnBXUm1GczV6cVhqZUJscnQrSEhka1FzZTJpUGgwa3JRcXpFcTJFVlV0dGl6V1cxbnNZc1RtcFVMWUpmdldDK0ZYaWsrWGsxVm5rbGREWmpoS1RRb203OXhESSt3SWZGaTJ5Uy9tblhJczQwRmhwTndmaE1uZWJoYXdsTXY0azM5QVAybHYyNVNEakpvNGE3QnJqaGQ2MERoUVlicGlhU2lkZ1RMZHBWNmZic21XOFd3ZzVXVFBYQUphUi8wc3NNRU8wbWlOcXZGVDd6K1MvaW44c1BtdlA1cjQ3dk9PMXV4UTBHSFZrSlByeSt0aUs1UFJoWk5XZmNyRyt5N3RaU1ZRRE9XOE9CTVJzaGZlUkEyQ08rT1Z2S3I0ZGZndkR6N013ekJkeVhMa3ZTUmlmUzhwN3dOUXp0L0dwSGlvT0VFUkpDd2w3ZGFNMXdSN2NucWxNbUFtZ1Rnb2dxSVVBL2xGNkg5b3lGODZMdW5LbUUxaUpMa0dISFRHWit3T05hN01LRWRJREJzeHRja0pEZFlIcTBNZ0JydkVCUVVHeTFvOHBEbWVuaXM4TWlzbTMxYXZzV2N0RUEvS1JiZXlUelMrREZORDl5aXloTno3VEMvcGNhOUFwY2lXSDVuaE8wQklmcVhzRGMzbXlmNEdCL0ZtSlorL0I1ZEZXVEFlcDFmVDRwNFBSMGhpRHF6c1lDNXV3REVLVmlZQ1lDUS9nQm51M2p0enpab29jWVpQNXZNOFArL1NGRHZRMG1ZVUptWU14N0xZbkhSNm1abHlTQlJZWW92Rmp2ZjhuMURiakUwbWI2T0UvdDQyOVVFYTNLK2lFcXp3TkV0SEhIMjVzOXpTaUcrSG5PVnpaK1R4VDR0VWxsRVlVZzIxbnhzeDZjbjlLdDkwTzVFc2p3WTVvUFBxODFxVFFyNVJvYUtlT0g4a1dETWwrT1A1azJtVU1RSGMydEtZVFFDNXEyZkRlT2hDUHhFdzdCMnY4cURlMnBNc3B4ajV3d3dQOUNIdER0QWdPMFhKUDV1clZoT09CNTJSeC9kSDZEajluRkdkZDNCWmFKaVQrVHgycDdpUzczNHlNMGxzekdWQ0FtNGxIdEthUHBKWWlyaGNoYnJmWXMyWU1sc1pxeDNPUFJEdmg0Q2JGQ29HeTN4QkRoRkQ4d2RKYkpCMGVYdzFnbVA0cm40L3Q0MUwwZzB2UG1pbTRUNmVEblJ5RWlTT1A5RE9pZGxDdDZtamFseS9uZC9vbXJaM1FKTDRubmw5WFB1VjlXK2Y3Nmw1dWNxcWNxbjc4U0J2U1JodkxqeW5yU3VidjJUa0VkdmdnTlpIeFdMM1BuOVhjYXFET0F0UVNYVmd0VURwRG1lTVRJOE9ERExVM2ZTOGtKbEMxZEFtUVVlWUJhcWZTM3RDWi9DRHZudXExeHc1aHkvU0t0L2FaKzd1NDlQcDFwVXhDMFYybkxaYXRGSm9wZk9BcXVWbnpqTWVSVlUvR21oQWZ1cGtvcWQvMW1SZ0F0WmZmNFo0Y2M2dFdjN0NwRndLSHFvdzJ2WDhJVjB0OC83THprUC9IYVB5UjlFRzNmMDU0anZZS3dwYWczTHM4dU9jNnZKYUpxd3pOSWI5bE9zT0lXZXN3aVJIMlpjUExnZWhUbk02OWRMZE5NVTlvQzRaZFExTW9oVnBncmZqSE1sSm1kN3pDSVc0a1JuSVVGclg2VE9vUnA1L2t2V2tWVytmRUNRckZrRENPUyszS1YzSjJOZzVlV0E1QmJ0TzA1ODhIZDNyQjFLcEdha2tKMDY5aXAwaTFERGFNc3MvM3lEdHE5ZHl5czIxWDRiTlZRQnBTMlZicjkxOHNDUWNZK2FjY3V6ZEYwSFhtc0FIcjc4TGxEUHpKNmQrcHdENEtueG5WUGsvMk9TSUx1RU5FcC9uaUt4L09DeUxLK0RwdDZrbDZPbjd0eGZPdm5Bc3duMS9RS0JZRzBWeVphWXBFaDVlUkJXUDdMbFRFaU5YTkdjcGo3RE56SGlaWlhRNWk4WGRQT1NWRnBTRG5tcGZJMVh6VmJPQklEMGV4YUtjRTJML0RPU3NwL3dOeTl3Sy9lZ3BZa0x3cGI2d2xPVWdqVmxGcUlDQWcreStjMnhnMmZsYzB4bngwRi93UTR0Z3ZLc1ZNalpJYk9qb3N3NmxkR1gvR3RKdmZodkhLWXMvS0g2RG4vQzFkSDB6Y3VOaFdtMHFJZERkU25JaUdBdjByZU5OTTREcUNmQmdyU2FZci9BbUlHZmo5dmhGOUM4WXpPdzhsM09ZNkRuVmVXRlRpZi9aQUFFQUdnQkFBQUU1QUVBQUR3RUlPUUlBQUFBQUFSOEJza0FBQWdBSkFnRUJDZ0lBQXdBWlZHaHBjeUJwY3lCdlppQkdhVzVuWlhJZ0tEZ3A8L0JEQj4KICAgIDwvQklSPgogICAgPEJJUj4KICAgICAgICA8VmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I-MTwvTWlub3I-CiAgICAgICAgPC9WZXJzaW9uPgogICAgICAgIDxDQkVGRlZlcnNpb24-CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvQ0JFRkZWZXJzaW9uPgogICAgICAgIDxCSVJJbmZvPgogICAgICAgICAgICA8SW50ZWdyaXR5PmZhbHNlPC9JbnRlZ3JpdHk-CiAgICAgICAgPC9CSVJJbmZvPgogICAgICAgIDxCREJJbmZvPgogICAgICAgICAgICA8Rm9ybWF0PgogICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5Nb3NpcDwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgPFR5cGU-NzwvVHlwZT4KICAgICAgICAgICAgPC9Gb3JtYXQ-CiAgICAgICAgICAgIDxDcmVhdGlvbkRhdGU-MjAyMC0wMS0wN1QwMjozODo1Mi42NzFaPC9DcmVhdGlvbkRhdGU-CiAgICAgICAgICAgIDxUeXBlPkZpbmdlcjwvVHlwZT4KICAgICAgICAgICAgPFN1YnR5cGU-TGVmdCBJbmRleEZpbmdlcjwvU3VidHlwZT4KICAgICAgICAgICAgPExldmVsPlJhdzwvTGV2ZWw-CiAgICAgICAgICAgIDxQdXJwb3NlPkVucm9sbDwvUHVycG9zZT4KICAgICAgICAgICAgPFF1YWxpdHk-CiAgICAgICAgICAgICAgICA8QWxnb3JpdGhtPgogICAgICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24-SE1BQzwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPlNIQS0yNTY8L1R5cGU-CiAgICAgICAgICAgICAgICA8L0FsZ29yaXRobT4KICAgICAgICAgICAgICAgIDxTY29yZT42MDwvU2NvcmU-CiAgICAgICAgICAgIDwvUXVhbGl0eT4KICAgICAgICA8L0JEQkluZm8-CiAgICAgICAgPEJEQj5Sa2xTQURBeU1BQUFBWUhiQUFFQkFRQUJnY3NINWd3Y0RCNFBBOUFBQUFBQUFBRTVBRUFBRHdJQVFBSUFRQUlIQUFFQjlBSDBBZlFCOUFnRkhRRVlBY0FBQVlGYUFBQUFER3BRSUNBTkNvY0tBQUFBRkdaMGVYQnFjRElnQUFBQUFHcHdNaUFBQUFCSGFuQXlhQUFBQUJacGFHUnlBQUFCd0FBQUFSZ0FBUWNIQUFBQUFBQVBZMjlzY2dFQUFBQUFBQkVBQUFBYWNtVnpJQUFBQUJKeVpYTmptY29BQVpuS0FBRUFBQUFBQUFCcWNESmovMC8vVVFBcEFBQUFBQUVZQUFBQndBQUFBQUFBQUFBQUFBQUJHQUFBQWNBQUFBQUFBQUFBQUFBQkJ3RUIvMlFBSXdBQlEzSmxZWFJ2Y2pvZ1NtRnpVR1Z5SUZabGNuTnBiMjRnTVM0NU1EQXVNZjlrQUJBQUFVVnVZMGxFT2tkU1FsUXdNZjlTQUF3QUFnQUpBQVVFQkFBQi8xd0FFMEJBU0VoUVNFaFFTRWhRU0VoUVNFaFEvNUFBQ2dBQUFBR0FZZ0FCLzVQZkV2QVVPNjhJZE5rMmtDMVduUW5pOS9Ga09aQ1NzTVJBK011MUxYWHAwNVhFSysvaUtaSkpHTXZ4L0k5SktOUkZLWURVQU0zWDdiV2x0a0VuZ09JQXVaRTVhcGs2cnIzTGlPdDhtRTZtR2d0Y1hDcUE4U0FqNkg3UVRLK3ZGWW5yemY4bHJKREh1UG44Q0FBTE5xSTFBSm5pRzRMVWlqQnI2THRubHNOVXBPdCtPWGRIREx3ZWJnLy9BOFpzWndCRGtwcVRJRDI1M3lSaExCeG1KcStvcFNicGxCVFFnTTFiYThia2dOVXBwOTFQcWE4NCs1Q3ZBNmVWbTdtRzlhaDkvYTBoNThhRnVVQzdURThFV3FMQ3V0RXZQY2NkaHFXZjhwNG5xRUNsREx2eFR6ZnlCemRyWC9TZFdVbmUzVG1IeGsxSDdNb1l6ZHhROVpOV2VJR1QzeGNDemhrUzVlZmhjNkdYZmFrd2orUGhZUmUyNWs5b2haenhnTXllbzhVSVdTbDNLcE00czFpM3JxYTZzRXBJS2RQa1ZGTythSWR5eUlzY1JINVM2ZDMxby9nYm5HeXV1MTNhcWhOTmdRTDhabDhacDh5Q0pDeHJsM293TnBwYTdEQllJV2FTcXVmZ0x0WjFJUkFlSmp0M0V2aXNrNnNlL0VUTGpkSlErTmgrZ1ZIRVZRSUZVYVpHSW9oYjZkUzVUekVaQnIzMFgyaElRSW1wcTYwd1JEcXBPWFgvTU9FT1NjNHYzdGJUWXJIbWIwYWpGNlQ3am9jbUpwcXpKOGtpSHNDTXcvdUxRWnlyK3NUK0FrenJ2T0J4VnY4TnRBMWcvMzUzTU5yR3VySmZSZTBzUzdCRWcrZkhqNkNhTnBqUW52WUp6RjRKZW1GOElWNHF6czZUVUM4VjU3bjlodC8wN2N0RHZ6YUthdUNaSVA5NjZwdHFHQzhuVml6NGFPSVg5WFdjTTg2ckYxU2d5MjR2aTA4ZVZyd1JmclhQem1OaXQzRHprajRkR3FqN2lQRjZVV2NVR3E5ZDVaVDJlUnVBOEQ3NVM1dFlWL3JpUkhrNUV3dG0wdkp6cTk1MlcrV2xJQmdUUlB4Z3RjQXpmOVJxaVRURW0xOGtyQmNYcTR4UWFyQ1ZCVEZDV1BVa2l5RG5yZmNvWmsrRDgzR0dPV3A4bGtYTC8yTUVIUnlvdVpjd3UzUmw2L0NvUmxKNDlOc1ZTTGRadkRQWmdjbFNHcVJPU2I4Nm9rY0Q0dGs3V05ISENIZXVsOEtZdmZINUJXeDg0QU9OdzZXWDFwVnllQ1FzN0JhZnNiVXA1cU1GSndTNkZSWXlia2xKRnZ4ZUhONC9ISm84T3VaVGorcTNuTjI4SFJCZkRiNUhHNlUvVklKRml3bWxmcUpMNmRZcFFZa1ZnTmJTeXN5d3pBdDI4cmF5NHZ1emtYb2w1ZndDdlN6TmNjNTFOWFE2M0R3UkFxU3FjdjJ2L3BqTGZWb0RwaGdzbFJoSzA0b0hLeEhmZ1ZDZVJwdWNQdmE2U2s0Tm5IdnpMclJZM3MxaFc0VkFleGlwNDJNR0I4eGxER2VveEtwbFo4dmhYSjJWY29aQW5wTzR0U3dFZlpMcEtiUXJabUR0K1BnclFyTjlpV25HVVFldEVrdEhYMFQ3QUNtZ0JvYWg4ekJUMGs5YU1TZk5yK0U0MWhTRDUyeUQ5MUpvbjYyeTNEQWFXVWZWeXJJeVVsQnJ0ZjNkMm1xNGZaL3dLejNqYkttTnhLRGFXSUJOdTFhcld2Y1BldzBrTHpQZDRHMHlmV1V4NVdCMVlQeW9WOHlOZlFwUVVtN3NPejg1ajdXZ2w2SjdYU1JQNk9IWTZ3cjlKL0luckpab0Uxb0Q2TDQ0Qm9TRllUemJ3R1hFNTNVTEt0MVpUM3pjaStqdVVDbis0NjhJaXNYbEhyUW5CTnk1OExCeHB3YmV3aVJDazNaR2ZWTzh4OG01bnBPOHVhTUhPc1YybmV6cjgwejFyVDlDazBZRkNTWWdpaUVTK0dOc21EUmV6QWtpVUc5bFNQUWJ6V0U1bUU2cmpLM0FWSjFMMnZiVU92T3puSXV0YjNoSWtLU0Z4MUh1TE4zUGV1K24vV2RVVEpUdjA0elVqK0ZpODRkVHFaSjh1OFpDS3ViZmgvZi9LRC9MQVpUeWhtajR2RU9JU29qOTU2WUsvZ0J3UDBJM05XVzA4QU80VjUySDRMdWliQ3g4LzFYTytlWjYvM1hOdGd0ZlRDS0R4SDhMd3BqODFBdHpvbUFuREZKbTYwcDhJeitWUlI1eVBJc1lPaWNHNGx1UVVSU1dUZ1M5aDdHekVpekVranovQ0d4S1RIcGtyM1NneXo4amFlQ0M2aFVuenl6MUtoL0g5Ri9KVGN1RTlsSjgremJySmNQZzNSZGFsWXlHTjJUNUp1Yjl5ODBMMkQ2d0xuVUwxbnFjb2R3OW1kZk1LM2N1NHNnNDlsS0RtZkhrc29rQ01nMUp4Z0RjQ1NzcktzSGpGSnk0cE9QM1dtQTVHdFFrRDNOTzd6VzJ5cWJ6L0ZhSExQZE9WUkJTMzViMzNkbm5OR1NLZ1YveGl4OVJpTTZnRDNWZFZyek9vNWxSVmNXMjFSVHNhQ2p1ZEhFVnhZaFZlR2s1N0g5R0lRQ3d1ZXJZMCtvYXNra081dkJJZDgvbmQzSTRuQjMvUnVEMktub25nV0MxcXRwUjJjUjJ2ZUdpUlJxZSt4eVhFcjJCU1BzVDB0Wk5zbkcvQU1Ka0JheGJxSkdhbktmbWh0aTh0dGVVZmtiUHQzUlVzTW9GTVRNekxsdVhFZFExYndheDhXTTNPd3pKcmVkL0pPNXRsM21wTDNmOXZjQi9tYjdtK0ZUcE91Vm05eDlpVTVjYkJjb240SG1aaWJTY2RROGcvU0hWbnNsL0dNeHhRMXhvdG04UEF6aWlXcWxEdDNtNG5ocis0dXBuRnRWbjBLemJhZ3ZrMEJReU1UMTJIc0RHVGl6UDJMZXI2QnRwVnlacVh3NTMyMVhqU0hjRU11SGE3NmpiRWpUR2lJT01XdUNIZUkvbmJKcE5jQWJKSEJLSEI0OHZVd1BuK2pPV2tTdVBlRDdXS3ROc0Nzcjh5eFZKUk9rUEtWYnI0VUNROXJ1VUlMWjFpSC80TzlWWlZuZkRrWUxCeW9Rc2orRk1XS2ZBakttNGdpV3p4b1dCYUZUWlRVVDJqODlmbkpQdk1xRi9VZEpkeE85alpDWE5YOHNBd0ZvRFNySzV3MzhiL3l0YU9tRVp3dlhteDVRT1MyUHVSNEdLa0IycHdnb0w2Y1BQMnhZT0c1bkJsVFE3Smx5SS9zVDBIcEVLVm0yV2FKTXB4M041ZWF4c3h2YWFpU3VBeTlUbDlEaWNIYUtndWJvcTY3TDdQRUJwZkI1Y3VaSDdhdHFrZU1aNUhHQ3NMSG1WSTQvREpQV3FMd1hTcTBTWDJHeGpvbmFKRWN4bXVraWptT1hCN29NOElFV2dUM0h2ZGs1MGFiNXBmUVhDUEpwTWYxUURWa2JSOTJvRm1LSDY3TmFLd09kWHdnSDVKcFZUdnBkdUkxZmtkTFU5amY4N2lEWnFUK1dMMUduZ3JCTmxIVk1SemJEUG9NTFFRYzlRZ0tGZmdPZFQ1NmZvNDlXNW9EdUc2S2RBTVhrRzQ3YmxXdUZienR0bnRzdHBZTy9aUnBLby8wN3lxY3F4cXZybkhRWkVaREJKYUdKdmJJV0U1UlpMZE0xeVR1YVpnWHN5MGJrSnlTMlNzcExzUUZic2JlYWNtNTdpbDdjQjEyeElKNVZ5Wm1qQVlickRMTWU5UFd4bnpKN0QvajVTc1p4Z2RXemJEaW5jamdEWlFZYk5rbGNsQVBYckEzK2pieHZWZlRXZXpibHRndmJYVkVPUVNDdElZUk0vNVlLTUlGN3VqVmdaN0Jrd29aK2tObk11REVTdXk5SkY1TUtNdmduaXFFM216dmRvRnlhUjRPclhWczdKTXRWWWZBN0JnN1FIOWpHR1FmS1JHSUFsZndrd0dKcjIwWkFLQm5jTUJCTUtGb3dhMDdxSzlVQXNhMGgyQ2xQdlBQZVVXNHNuNnZydkFOVWdoZk9XMFJPZXpoYlNwUkN6RlRSNFlUMjF1OU5vZ2JRaFdQUS83ZnBiZjhaQ3dBMHZ1SzV3K0lmTjZ4Y3JRa3k1YkxHVlRPcnVRNktkUGRLM2N1dlhiRzhDWnBUVWdjL2tqcFZ6Q2xXWndDZUF2eUxyL1NvRVBHSUFKWDduUGFnU0hOYnkzZ0JNcXVOWmRiME9WRGdGdngvUGJKMi8vbkxrbDhSUjNobTFPQjRRSlovRUNiY3BoSVRPeG9XK1lsajlXSDhmREUvYkJvQzcrOTlxdzhvU3p6ekFBY3NEUGQvd29RbVBQOVhDREozQzdIZmdNcCtiK21iK1hvNk9BUFlWb3diT3dzSUsveWJpbmhHcW9Cc1hsR25VUnBjSVNQbkRBTlFSeXpuU3F6VEhNRHNHdFdaWERkVGpBUXIyRU1GUTRPbDZnNjQydDcvK0pRWmtMUmlOTGRJVnVTVjJFNWlqeWo4b2lpMWZDWHJNV1M0WnI2ck1zV2Y4MTQzc0Q0UytJaXhFSklobVVMb1Jpd1RLcGhCa1NtUVFoY1ljN3A4a2ttNExYTGdzVWlxWmtNL1JCMVZid0U1UkhpM3NiOFZXL1ZOQVNBdkRqdFRJWktRbVFaTXVJL2hNUXp2enppSjhnWEdrZ2xhWkJJeHNRS1VubUh2c0ovYk1kb1A1YXQvcHVDd3M3NjNwKy9YOHE4UDd5MlBocHFOellHT0lWU2pTemJlY3VuT1h2WFowMmpJbWw1R2tsYTBYQUJpMVlncitSZVhPWTJxY3BvOGxMSURWbEpianhKVmp6OXVydTZjREtrRk9FK2s2VEF0Q08zaEVVek9NM0ZscEJ0bE1zaFlxMitnUVVyeHZSbHpqK0Vyb1N4NDRNaUppWG5uckhzM2xSemVaaExnZlpBRWtFSTBKc2ZBc093dFprSEdPM0tUaWhyQm5PQTNnL2RIVGZnVWUvTWZrUkVqVW5iUkNUQ1V4UzdEL1NJcTR4QVBvN2lDT0s2QzdFUndnbjV1K240K0syWTRrdGZXRHdEUk9XZnZoTE5kTUZ1UzRTcjhIMzczZElpUE80T3k4bW9WS09POFEvaVA2cGh5dkJocSt5Z2p1ZnRReE5vYXh2clVpbW5UeDh0aVRCdmVtVS9qVFcvOVhRM28wbzhRSis2TVo5c3E2L2FxRExaOXZTNy9RTCtvMG94aWsyS1loK3dwSk9FMTQ1Z2dXbWZGSjYwS0pWVkUwQUh2REpJeHR5RmRJMmdoYUJNcnBHVVgvWEttQXZiZUw3TnNyWmxwejU0bUpWNmswR2pDZGVZRkJIQ2ZRSUpid1ZLa1U2L2VLSW9RWVJoajBwWHJzcm1qdTBlM0FUVWNPZmFKenJDS2FYTHE2WkVpR2ZOcm1CdVZISGgrQzZvYTBXQ1dJa3loclV2aEpKNXJYakN6VDJhV0tRVDZoc2V1aWV2U1pKSUtuUWVwMXlWNWlIZEVpK1N3NmdJQ2RtQVFWZG44VmRuMGNGOFBIMUp5R3AzTGNmTzZBVlN1cWl6b2lhdzhUaXplenZIUUZkN0JtT1U3dG1ETHVYRkZGVjFFa1NiYUZMOEFaMFlNVFJYaCswaEZLU2JSK0NRbmwweU5FQU1lSGpoL2ZIcWhwdGdVREREOWxmT0hqNW1DQ0ZSSWNqWFd6VHpML1ozL082cUx4MEYrTi91TmRNSjI2TFdZK0t0emxpRFVkb2N0ZnpNVG92cVpWVTAxalMyeWNTYzFmZXlrQUd6Z0tybnYrSDN3eU9JMmxGNVZOSVdIcjFtNk1SbjQrOGNJekRZSFA0WXNOWUhMZ3pqZE1rNk9sckZHT1FsTHdFNTVOdVpYanl5ZkhEOTQ5SjlYVTdJUDRqS3RHeTNPVHZ4TWF5eWNUZ2YwSnNEVDRWUUtQWjZwMVV6c3FUYmNuZkFjV3d0NERXRmZTSWNoOWlGcCtreGxERis5UUtFY3J5YXRjZlg3M3JpUUU5NHNuY0MzUGk1M3R1b3p3OWtqbDVPT1h0SHRQa09xRW1XRWdWQ0R4R1o1c2lPQlFhWWNxS3c5N0toV2FBZGYxVVRzL0YySXVKUUJXNndNYUs5SHFMRXRoSnduUHg3dEZjaW5KRkJyTnlnMFIrbzBscVRZSEttSERPQkhPZG9rc2Fnd2lPblRuTFA5QmZNTzJOOC85Q2puMEtRL1d4Y0E0YTB0QzNuR1F4VmgzQWcweTlpT1lZVUpVMzB4YkUxaFBJT0hiRUE5NStMenhwbDZjS0ZBTldmNUtPbmdERTJGWmFhbHNkM0VFeHF1Z2tQbHZCV2JpdTFPcE9VTm1lQnBDRFluRnZEUDVJNlBTV3A3cnlYM29SUFdvS2NudXoyQzdUcGhadUNrcVk0VXB2alRpdzV4NnAwY2F5SkJKL1hCYVBCWng2ZFZGaThtUzAycUlzQjkvRzVWTnE1c3lkNldjOUZ4WUdvbnlvTk9VRTJLeHgzaGQ3QVV1Wm5hY0JDRDY5amM5aEVSSWs1b2lPWE9LMklXdHR5Z3lhT1UwRzFoTEQ3YzdieVdRdUFGMkVESWJDU3dPRTY0VzMyL0FLQjNVRU1DLzFQS1c1YU9rOTk4b1QrRUxjbGE4Z1dhTC95anBxb29FejVuZUU1R251emF1d2NOcjFkTmhOYzRnNkRCVXlXbHVFTGYvTHpVeVRKVFppZHA0dUdnUnNVc3N4QWxIc3NEVUZPUmgyMzgwSnBkL2FZWVlQNEEzSzBrTHBIU3lwOTQ5cGN1RU85QUVXejdna2ZHVUxqc1g5Yzg1QlhsRVdTaEJONHczNU1WWlZhYUlFNWFSTWlPZ3YzSk85QnJ6c3NPeFJSRC9QYzJmVzlieThVaXhmQ0JmMk16Z3dEdHp2YUhTR0hxM3NFVkl6UWRSclVKMXFaeTM2U2luQTlKb25IS2VEaDlZYlNYNkdxMzM1RjBCYXpNbUJnb3FIZ3dQakkzbisyR1pIVVpORkdjUmVSTk9BazVTdk1sZjVlQmVWNTR0SERWSkI3RGRwbXBMNXgrUmRDQzZWQ3Vla1lValU4VDJKOWsybnJVRlAzYVRLNkZYRXgvQTRscURyYVFlM1BkSG9YL25kanVvdit0ODQzUDl5Wmo2Vy81VUdGZURvTHgzQ0pvdWhUeUtLQWhhZHhLME1uUDVSazFIRVJkK2hPa0JNOFBpVmJZWXBnd1JwSUZRTC9SamYvbC9NVlhzT08zeW1HVm5BN3N2S2xMYUx3VEJSZTB4MWtyczhZNklEYU1UOUNmY2pyN3U3NUdsbmtld05Od2NlVzZ3Z3poU3Q1MVJZK09rYUtjbmhQWVJLeGVlOStqMk9oRjBKUHFKUUlzQ2ZoYUYxR0lmRWpQbDlBMHIvWHNnanBDYkl2eFg0OHRaTEEyZStMVTB1bEcxQWlQT0UvYll6MmJDeStZcGdxUmdKejNGd3hob0FaNWlvazd6UWVFYjZUWlFlM2lGNis4QlF6ZGZqQzlPbEZyR2w3ZDB1VEhKQ1ZxbGFhVk5Ea0doZGg1RGowTHc3d2xBOGw5bks5R1AyT0Q1UGMxbWRVQkh3MmFYd1UvekdSVmdnNDJnbHRsOHBvOXcxWGV5WXlhSGFSemhqMisvMndOL1R4bDF2TWtjMFRWdUt5YnZ3ejlYZW0xMCtDRTBLUVBERUh4c0pqZ00xdml2QUV5Y1R5Yy9TLzhOTG5VTzdVcHd0QW0xaVY3Wm5TMWw5Unl3RUV3cVU1dFB2Um5YNjJMVzBRUnBKR09Bb3g1bTRFRkV6N21Id1ZtaEgyZXZVb2VOc2hzV2ttNW52a01kSGVZekxyRjR4N3paVDdid1ZTck9QdXYweWcrdW0yWVQxWXBJa1BTVGhWd0NhaFEyYmxTVnNLZXR2NlQrVlVJSXlFcmZBSStlcDdIN0xaNkl6TlNaZ3hoVUZiOVZldGtxRlRySENnYlZuTzJhTUIrdkdsL1JsNzM5djl3TVlNNTVkcm84RSt1YUtKR1RRRkdzOEtTMUhIZHVXaE1tcEU4cVBwc29KMlQzWjkvVzdVTmd1eWQzclVyVEJPaW1ISnd5Vms1MVozR1NudkFtd3Nra040Q3hlZHQ4SFNNZUt0cmh0L08zYnRPOGhlMksvNFFlZ0JlcndOR01wZGpFb1NlV0lYQnZQZVBKS0lqUUQxQXZuRUFuUStaMGFMQVhSd1pJeVBxbE9kK3BlL2dnNExjRWVMcGNKNjhTR0NTYTlqbFhjdzFOaXg1TXdTT01Md0tEUzhaczIxVmJzbWpMNEJ5czZoVFZkK2c2UDFNcHBTV3hhUUw1SnBsZzlOSVI3YmhLVmtWdUtzTVhJekcwVDhkUEJMYVBvRG13ZjB5cDgvR0FBWEdCWTJncHMyQnB0STJtSVFuRTdpK1F2aU1wbXNzQXFtWmtDR0Rmd0dKVnAyZWEwRnJJaFFBUFVRM3Z0eEQ2Z0ltZXpJY2VjbERVdkc4QitFWmtrN0ExVDluNjBpZWhDN2VFMEltby8zaU02cldtMUJlekJGZlh6d2RyUlBrNlFlb1BucjZGMlNyZDI5N00vcy9pYzRNSDJGVHM4eGF3L0w1cFFkaExiNlNHUFE0cVpLbGpsOWZKOW1ETTlsQXNBMHZRMElIT0RZY0t1SXM0dndycXZiUlhyaWZ1OUhJdUUrR1gyeXlqOVVQSmhValVhOE9ORTJNNmxyamtGcjNBSDdVWng1b2NPSEpVdGVCaWh2a1VPZHREbEdMbDdscVMxRVlPdlZBeC9GWjA3RDI2bkJaY1l6aVZ3RWlqb1FSdHJqNVVOSm1CZVVGZXVHdmltMnFLSklYWllReXJUMzB2ZnNwQStHdTRPa1huRmlCYUMwTnVqK3lteit4Y0U4VDBLYmQ0dGlGcnh2ZmhMdEIxSHI5bDAzTHJIUUxvazdCRFlGQ3hRQnRPUm5UeUFqZGQzT2w2ZXo5YVhtc3FDaGdGeFJuWHBkQWZDV3hRVzM2bmdkWHBjTnM2azMrWGRwOGE3d25Ydi9tcFNrL29kaUN2WEtiUUFFYndNQllUd3Y1b3Y2N2I0UWY0b25vMnRKeDkyRVUwaDlPcnR6YjRQZCt2L2o5R05WSklsL2RUSm13OWRUeUJXdzdOdGRuYzQ3VXhMbVVpbWpCb21jQWp1Y1ZhYjdQRWtzN0JFUktBZ3lmMm1XL2h0endNKzlIN1Bsc1FTZW5QQkYzUW5PV3FRQmZLSWFibEJxN085d040MFREQjJmRytFMnlISDgyMWI0bnIvVEdWSC94aFpSWmErNHYxMGV4dktvYnZieXlnc1FPbmRhSWI4NTUwRXRLdVZiQi9pRFhKcFBLZlc1WmRJb0ZYa3paZDdYZGdnNmRadHpDazgwTitJMHNUQUl0TXo0Y09PQkFNYkF2bDFWaXo4RHBXOCsvNDFHUnFKeXR2L1BXRVg4bEtkZUVFVjhLNTJTZ21ZTDBzenc5L0R0OFpFQ1pXdExmaVhiQzROb0FldFdad2xUQ2IraHVHVml0VlN3LzcyTTdPNnRrdVlGOUtldnFjNHdxRk1UR0pheDhKRWhIUFd6RlNXb2kxQ1JYSEw1WFhRa3U1QkxXT1pralkzZGowbHV1amFiZlo3enJDNW1LUUlraHJEMW9yWmo2M3J6ZUJwK0ovT29vdXZUM25SMVd1T2hucEh6MFg3ZWJLbHNvb2NGalprUWZqRWRzanRQbk1NTkdrYXpzbGFqSEZFSmc1YmM5WXg4dTVlMXhUWEF3M1ZLWU5MWG9MZldSSUVxeThjUEdOallYTkFxS2xCTWhmMTBtVWtJb1dsVXJMWmh1SU8yN3FJYXBMUVN5eWxwOTFPUEtpOW9IckhOQm5BemN1bTdzZ3lsZmN1RlZrVU5kN2g0V2N1STVhVkdBRlVFS3ZSSU12cUdTNlpadlJkQTMwa3pCRjM1bThHKzdWNWhBRjlrN3ZKb2hDTE1FVXVSSXBiaFN6SHU4V0FWNlQ4M3M3S2pBTWVtZUh1am1CZUtLWXZzcGxDdC9JUTQyZzlQbjFZUGROaTNQVFNYTGRRZXFSdU5UVVFwUHhXcjN0YnhZMW91NGNUZzltV0FHNHp0Wkp1YlR5dVZ3a01FTm8vd1FVUmZ6QWdaS3lrMHJyeEhEZjQrK0lLVGRDMDJMN0dmWkYyYUJ5Vkd4Tm5MczZoODNhdFMrRjJUZHJzd0lBZkRkeGZEQTFBWWtubGF5M0tEOWhhZ3RMTFg3d2tuZnFSR1NSbm42cTZVNWhrV2FXK0U5ME5vQVJ6NUtzMEJvM1FVaFc2MjVpVzBOQ2NmVUtIcWI3TFVSSnRYZlRRTUtheG1mK0VDWDZBdDM2NnREYTJHR3NCUy9nc1BuVkE4RkVSeExQQTN6aXI3R3NkcVRkUXVudzhncUZhdWhoUWhRa2RpVmd2MUNGN25QQnVFSTQySWRpa2tFSFNvU28rRENoODNJZXhOMVlyZGhXQWVBTWNZWFZyRlJmRjBLSHh1ZzQ2RFU4Vno5Wmw5K3dOc0dVenkxbk9XcHhUUmZTTlF3ZXRKY3AwV1FUbTR5WXpjVkdZbTZLdGhtYVMxNWQ2Ym9LcWQ3WEs3WGt1YVFsOVQzbHg4Y3pMMWFQRG9RSnlkVXhNRDRNSGhsb1YxWm5UT21WMW5zZTE0WFZiayt3Mnl1VUZxeldmZndNeXFwbTJOVm1BV0ZMakRHN3AvdU5lakQ5L1k4SEZIdW1nN0dEUUg5NUZYTzB5amFSTGlvVlBDNEViYTNHR0dqOGl4b3dmWGg5RWhxS1cvZWgrb0s0UWJWblhjYU5JdHRZZWZWRlZnVFJTV3Evend4YjQ3VlpWdXc2cDVoSHBqMUJSMlIyYnk5U3pyaVBWeXZjbytqNUdmOEc3bjNibGhXN3FjM0l0Si9Dc1dHTkpqbHdlZ0ZLbWlwdVh2bTBDYjVmYW9qYUVUUXBqcVkxTlpGVnJ0Nm4xVnFuOTJ4ZlppTVlmeWNSYWVPbk55c0FxRTI2L1NYcHhaY2FTRDlhdVVYcExBNS9MRXlzanFzSXZZSlRjV2FLbHFGSyswd0RQVjJabnJid2VwZGhRMWdCTVI1dGI4NXA1OXE0OVNYRXIzTWxvMzVWU3lBendKYkhlMEJvU3RRTUIyRW1jZnRUUTE3N1ZoK3Y0Tk1Qd0taVWU0N3JTSlNTTFhPdGwwTnd0azN1dTVGdGM1UWNxRkZTdWFIRUNLOFRWb2JlWHRiK04rcWpMM1dib3BKRDAzZHhZeWo0RVNtcVVlS3dKVXN6KzVrQ3p5RHNBM3lFYkpLdTg2bW5DZ0JYbFFrQ2o2M1RHMEdkVjgzSS9aL3lZS3VERUlabXVZQ2dkM01tMkh4WmFMYmNmRmg3YlNNZzZ3alJzWG1qYnVJdmlMWWdsVGhJQm85SjAwQkhrUlZ5M1Jmb25YUWYzSjFWbWc4Y3NWaUljdWdrbUtuUFVLMVhZN1hyUkpHYVByRGxwY2hDaTFxTGpZUERlMmtTb2VQOUcvTkFLT2ZpamtVUjRPUC9iTjFmVUx6a3QzdEFleHE1YVBpbitPSG1HcjJJMFpUQ1Q0TnNJcXVmTFl0TTZuWTZQNnpRTWVDYm1INDRnVzNaazBnYm5MbXpqY3k2WlUzZmswaUlXRTJnNnV6UHNhbEtUdHp5QzZtK2tNVHJQZHpqV0ovUTJibkdSQ1pVaVA3WmdVMU5rUStpU0phYitkRG9FWVFieFFwL1pzU0ltM3YwbHhLWTg2MytpNzV2Y0dDZ0lqRUJxSGNvRFF6UGd1bzhMTWNHVEUzY2YzZDRvaXF1dzI2S1lpc1VmV3hOZFY2dDEwdFNMcXdteFgrMXJXK1U3azExdkhrbFBJNE5jTWgrSkxXNGFZdUp3QWhIMXYxMmtkSVU3c1hERm5mTEZJMVU2dTlGYjNMaG43VHY0Mm1Mc0t1V3BXRXQwd3hCeW1qek9WSlZXUmx1OWtHZzlxWjkydGNLbWluTFkvUTJiTUVOR0tTTDhCbEk2bHBDV2x3QzBPS3h2VFE2eTVpdHlIL21iZXg5Yk5Bb29KMkJvaURnQzF3WllaQ2NleTNPYytiYVViR1Y3eTdIRU9NTFQwNitReDVWVFIwNUhXSkZpRm5DSTlEQ3U4MGtTL243UW1RbVhNNTBVZDJhVy9uVUdjU2svd295OWNvU2lEQzhDSUxIVGQ3NWNudGcxbjduTXM2UW12WjVvUEszYlpPbEVkd1RqQWZaRE1aWDMvZjFMR0kzR1dEMmhoNVQzZXJicEhoc2FBbzErWUlsUjQyR3lGb2NVZWV1TURjWk9lVkRMNW4vWTZTb2xDcFo1N2lMUHV3U1liQm1pWWcwcVJCOXVUREU0SG0rYUVxc3NBVGlBZExqaFdaYVpPa09pdHpDbmJvMUg5SVhhMlYyR2UyZ1NNMmpicExsWkVEK0JFaHg0MGVEQzZ4RUJ0YWtSRzcwM3gyNGxxVEozc1g3dVFtd0NLTDhVNGNlaFJ0ckRoYlduTkFXTzE0a2lsRlg4TVkxV1Jzdk1ENWtXU2ZidlZMak1YOXFKelUyelZVMnFHNk9xMGdKeG1PeEFlZ3E2YVZjdHhrUWp4MVd2RnFFOGdoWk9iZmZ4MVFtMTMrRmMrYWdFaFoxQ0hpbytRbmozbnZ6MzBXUUhmSHhzaVVNUlBNWC91N3owM014WlNLcnZCVGxJZ1M0OFJpdkJqR1Y2TnlaUVd3Qmt3aVhRV3dTYU9vOFV3U1BTSDkybDloeFJSZEJ0bnNZSWRLc2lXOVVsakZxZ1IrVjN6elZiTnIyR1JFbWkzWlBmT1FtbWFla1o5ejhLS2EwM0dXbjdZQzJ4Q3N3TWhybmtvMmJUUnBMMlA2U2h1TFhQU2poMDduNzBXbDJscXF6RWN2YmpwNGQxSUN1b2xnS2I1SWs1eEF0TmJRbFFJSVlxbm9FMnR5MmIraHhNRnB1RGN6RFhkZG9uamxaKzJjTkhhS1F4cGJOT094WjhaZC9BRjVlOTMvdDZFdzNMd0hWd1ljWGJzS2NmdlVMUUtidmYxOEVlWG55SlA1eEcwNHA4UzNiSkdSQ0tNRUNmeXIvU3c3WnhWUkVSMFRPSkRuTGkyWTVzTysvTHRBL0VlMk5nMkFLazgrUHVDWmxyZkFJbmgzVkI4ZjBaR2UxVVBrbWZHY2NsbmE5M2hqazhUWDZ3R21idTI0YTRFb2FsaHdiYUNDZEdHQWhGaGF2eHBsb0sxeG9sMWdKbDdpbktURzByeHF1dzVFbU1nTFZIdGpmRzFaZXRuOXJUc1R4Z2tzZXYrb1U2OXF3dEJ6RUVNd2EybVZsZmtOOExQOGx6clowMWl3Zks5OUxVb0JQazJQcFZqdGhmMGF4ZVVML2JSY1lReGdhOGZqaVRBZVJEcU9HK1NMUlFaNVJ5MXZRaEFKTGNBUncyei9DYXdJdjljQjI0SitUSWRDWVZMVE96WTYvb3RzOHFQN24xRlJyY2dPOFlnUjRQUkd3Mm5SQWZCaWhxTUt1Q29aN0tWcE05VnRMRVBubnVaK3dvREdTd1dZdG82Rnowc3JqVTc0WTRRN2MvUU9xdkpNWElybGd3TXN3UGFuNVlmc0pzakRNVnhvWm85UlI3SDJqRmF6RjVHeXdqVDJ5NHMwSnRObEFyZGJZTXFZZ1VLcHpPT0dBZ0lDQTV2cGtBT0RranhQWkV2WGlZUXZqREhxTDVqRVEraTBicTh6KzRRQjk5YnZDTFFUUmpuTjNJQ0gvYW9CVld1ZVpZSU5vZ3F1MGc2UmxjcUJTR0tleWJ5OVN2Ny94cUhIcEc4c2NlRjdrcEI0dlJKdzY4b3N0Um15aVZiL0NscExPYm1OVUVMd3htdUpQRlEraXh5eTFqelFtNmxnQWFBUWxwdkNZeG13RmxsVUIxU2t3a2FLRmZybWg5TUJ2cVFwd3FoYWdwb3pwZitWMlhvSGR5WnU0WjU5bjI5cEFKSHRDWEdZV1RLQjNDRDgrMkEvY1NKbmdMeDRRYUI1NklHVHVzakhiQ0pvSkMwNW1STXB6eEZ3OTJZSitBMkplMEV1ZlFwSmhOYjZVQmNNTUhwYXZiTHFackVNZHhkVURaWjVuSEJQTUVoSGdXSTFXWHVXeENGRGxHc0pHMEVSYkFBb1l2T2hFNk8vUEZZbnBRQVlPd1kwMWNwUk83RC81RVdpbEIyNlJrK3hrSWZraGM3V3V0OGM1dWdvV0lkWXZDaUJ6czhndmJLT3RWbURYVDc1Qkw1MnAxSVd4bzNDTVFnZFhwQkpmSDFybVhOUEJNVEg2bjRNcEhXeVNMc2J0ZXZLMTdxQUxpQTg0ZjZmSGM0UEhNVDYydzVBVzFadGNlcXlGRlpNSVhyMGRwdkJGRlp2ZDU1amN1alBoeXlSWEFlTDQ5bkMrNkNpcTNMZFJtOGRLeHhnSmVhTzZCbWNQZDdjQ1dTbzlBSkpYejBnazE4SkpwMEd0R0FWNGJXQmRKNnoxdVRITVVua3U1Uy9CU2tIVmZUeGZlc3RoN3VsL1Jwa28wNENobktPNnNySU12MlFqcHFUM0ZVZERTYVVkZE5wM1NCRnQveFJIeGZPdmlMczBRSCtkUFJ3UWxST09lRDFmNjFjT3E3OXIzWE1KeS9JK1JDNjBIZmVlajA3a1dIb1lxZHN0N0Q2Sk4wT2MvcDRsWVYwT3NsOTB5T25OblpjWGFjR3p4djluNjl6RXN3VjV1SFFJQXUxdlFvMUN5TnVXaUF0SkJTZmxaV2crcTlMNTZzeHpEbHlkdURaNkdsaVZVVC9FMk9IU3Fld0FwNldQajZyVTlYQnUxQjhMUWlja1Q3T2ZEMWhPRnA0Mm4wcGVjcG0vczZXTGlZV0ZQamxSWjl1ZDFNUVE1QnU4RlF4QnpocTF5ZW1rN0hQeTFKT2ZhODJabm96NVpsWDJrSTVvYk9hZk5KdzBpVUoxQXNnZWMwVHlEbkNvQ2t0Smk2YktkQjBMSWhyRWhCaGc0Lzl0SmxMcXNsWEt5KzFnVXVabUFnaDFxZ3loVkJycWkvQWYzaVBNeFlXeURPRTdqckV1b3BHNVBPR1QvcFNvdGxCZjh1dlczRlF4V3E5eVVEWG5PWUZjMzhjRTFqS0xsU1Ryc205TlJiUWtQQUNNd3RCbzhKc3pOOGJDVDc1bjBadytPbmpOMnJ4MHRwWkpNYitjT1JhQXdvM0NVTWtqWGxuOW9SaFFFYzZwL3duU05wc3Y5cktpbHNBVzkxYjVjZnplZ2tvL3NVMVpzSnZmQ21QbnBqWDVBY0I1dG9kNC9RUFNvdmMvcVBublZyU1k1Ukc2ZTIvTEVUZEx6cWVOR3FNMjJPZDdYclJRU1BCRm1CNWZGdHoralJ0ZDVEd2RXY0pUYk9TQUc2aFBNSjVYd3A3Z0l3czd4L00zMzA4dmpGaFFFRWViM1E2c2ZWR1BTTzkyeE4xYkpPcUlVNGcyZHhIdHVsaFl4ZzRpS0VORWNpZEI4bzUvUFpPTVI0ZElUU3prb3pRemN3MHRXTG9ha3A5eDhVUGVuN1duTzZYTUltdG1CM3IxZnFhdnhTOFBpVmN0NlhlMUl3aXlCUXpRUi9DUTdJNnVjallVU2N2c3FGdUd5aHlCNWhJdGNvbHh5NU9oZy85anJzODcyNHVGU04rV3BzYUFsL0p0RGdJVXlqYWtTTWhaYXhSUVN5a3RUeHgwOXhkVjJkOW1rVUlnb0xTRnNnWVV5bnNxa2ZWMmxEL0FzSDFPdnhxQnhTbTZmamxFaVQwMFg4VjVoS2FEdHk2Z2RvWTVZSHYycE9qWUdXMm9VbThvanpuQytFYTdVMkdzRVNXbTA5OEtvbFFLUElrTHEyajlaRnRIM1BPcHhub0paQWExTndzUHYyOFAveDBmVURlVTBSQnZGOWJ4VjJLWDRjclZwaEV1dklESlhYVVBZekRqL2pUODNWWDB0YkEyZUdabGRGaEQ5ZExMWS9QV2JucmZXK2FBbzhlZVdObTJZRE1DalpxUnllYzlxV3FtQkx3UWpYeXZsVnROa1BsR3NROUtWelJDQnlIMWxrTEhxak03M3lVR3Y4bDZCSUprVG5KRW5KU3N4a1RMbTlSdVMzMDZ0OG5iakozNE5MQkJmTHltekNZUXBoYTdkeVFuZ0RRcUV1QmF6b1AxVVBsbHB3N3pUYXNzUWJGV2h2SFI0WGN3cGdlenkwVGJUYmFTVUJNOXc3K1pqV1V5Tyt6cmN2b01RWGFPdDN4MnVGd3hJTmVlRGFiYzFqbDNwQTlONm1kSHFkNUdxUVV3dTZNNUd6UGNTb29tUzBFVGV2ellaUkEyOTRTZmF5dktNbWllTTR3SE44aWJPWWZJT2lKcjlFdUFQS1Q0clFFQ1JsKy9CZ1B1OWc0QjBQUmdQeUhVNHlsUlg3aGd6eXZaOUhlbjh3d2djK3dwczlqVUFEV2tGcGg3MUdNT2tTMG1zcFdIcUxnbzk5YnhDd2pCNVdqdG4zbUxvQjhwS1pQanZyMzh6MEhCV2hVQWRsa2ppdEcycmVEd3kwTUZib0xLc0I1cHhEUGpXSkFDMFZOMkZzV1IxNnhHREJsQk03WE91aGJZOUI1aWhwU1dyNit6VWk1bFkyZjVhWEdvdVZ0eEtlWkcwejBtZGlvN0NzbFhiZ3JqOUlsV242N0Izc3c1NVptR0RGZmZWaXZKOWEveWF0WlhzL0I2MVB3ZDFFVUM2bnYxN2ZXNlNLWmkwdndJZ2UzNloxbWx0M3JXNEZKRGYxZlk0V1g4WU9BeFRrczNjZEFmK0E3dDVRLzE0MkpKazRWaEh4aWJKZUg5czVUQTVIbmUyM20zTlltWHh6NUI3RHB2eFA2QTRoV1pRQ0NqYXVuMDRxM3ZmMGYrcVJneTdRVVZURUs1NUJjaElaYUxiS2ZZWEE5azI0enNTT2tHNjc4d0EyK3p1VjF3ZE9rckJZMEdVSEt5OXdXb3JpM1NlcjJZSlo3RlFYcm9HTzl4amJjMXk4dE5zemg5ZzZGR29ieW9ObmU3SnU0QlNkbFVzNTY2MWtTakc3MHF0dG42SmcyeEpTdXJjeDBPVXhSdU1uVTBLQysvSUM2OVgvcElxaFQ3VENPQW04TUt4dDJpaUZjVThNTHlXeGJaMHBRaEJlZlpvM2JUVEJPVENhOUFpWE40L3dnM21HTWp2Z2hacVl3TERQS1djcitCRHRhZXgxTE5zR0EvWDNWbzlOdGhNdjVGMHZTYXVUVnNkVlBjM2JQWnpkZWU3YjNFZTRGcTVrUW9ET3JaNlpGT1RpRy9DSFl1UjJlMnJLYTM4YTM4K0t2eGEvcmgzamNNaHVya1JCdFk1RVl1NWVnUS93dUpWSVRrNXpGQkxsYnJJR21ZTXRmMWltV2ZxUGpmSHMyY1ptK2Z1bEJZeUV4ME5pWEtBTktvc1lKUUI3L3ZzQ1pvdVhyTHZqaHdwc0duZXVqeGw1OGowMkJnWlRpZ256U2ZqcGJHWUNiS0J6c0pnN05jaEp5bHpyMS94VEhmcmlOajJvd0NEWGlLN0dWMzVYM3YxMlhTRHNIakxWZ2g5b29hT1RNR21iajN5RFlHVk1ZT1plNWpRMU9URkovNElhK2k1R1N5RS92bXFGZEZCV3JyQU92bVdSSEQvWndyZG5PMnpFY0JYL0dFbXBMQzRiV1ZoTUUxZmZSME94WkNXM3FPQTJIK3hTb1Noc2Z5QlFqU0phREFsUVErbzRZVHBrK2dPM29Ia1RwN2VpUWRKdW8wTlFVOXh6THJwdzJ5RDJyZVdGVUtPRWhUd2RNQmpReDdpL3RLcytMU2lkTElBYXZDclF5VVI4SWdUK0gzZ29QZldZY2wycmxKQWIzYmhnRG44bnF2a25vOVZsdHpTKzZkbVJkRmxCZUF2c3BhaXpLWDg4RlhjOVkxcld6Y2ptUWJnUmZ3S2dEM0xPcHR0MEg5ejZUajlsOXZmV01jZHNaanhEQ0FXSURFTHJwRFREMjA0d0lEWXFyR0lCb1gzcTFmbXZmVU5rME96UWU4K2wyWkppOWwvZDEzNm5Qc2ZSS0JSMmoxVzlzdy93QklRYk9OcEFIR2xqZG9HVHZ6VGRUMFNjTGlYM1JzY0dOSzZ2MWpnU09EOVo2MzVmalBiVFJQN2MxMnhaVHduVktzSjVVdGwrR09WMytaMkZBYURjMWpOQ1dtenQyRkZucloyUHYwYVZTVHRvVmx5S0h2b2RUL1h6WHdmcVc4RUxXYjJTcWJpSVFJZ1Azc0VvN1hWU0JoWnNZZXd1cUxxZ3VVNEFOR1MzTnFmZFZoMzFxY3VVTmJVRTdGcGI4RnVZSkFvSjQ1TDZJL2tpWDR1OTFJK0N1VW5PWFdhK3ViY3cvVC9hZkVadGpudHBCV1gvc0xmWG9oeWpDZ1dkOXEwMzVQUFN1dGV6WGNjaGMya1cybTUraW1FU1NnbVl5ZWNUVmJEdTNCZVIxNkNjRjdNL2ZaRTNpc1ExckJkK2pEV2RQaUVML3NRdzM5Zmx0RTFQMk1KZnJhUDFxRS9yYVAyTUQvVm5SOWllVDZpKysyMHV2dnZ2N2RYUGZmZlFERzB5Q2k5MmNmMXh4cGZweHNYL0RSTU5lNlhVU2wrcS9waG9HQVh3cXgwNVhmNS9ieHMzTUlBMVlmMzRFOTIwWXYreXNySUZmblpWNGsyQndFc0tNbXFpNDBvSVdxQnljeTlLNzJyZmtDOGtlTkkrTTFnakIzdkxKc0lKN0NkUEpuem40YTVzbmtGdXExbkZoLzdhbEp1cG1HVFlSSjVWaDdBVHVFQUFsNzhNd25DMVkzQngvSk9ReHMzcVpGVGdMQkxmQXBkOUdNaVNQZElRckxzZzZBRVZJTHVlcDNQS2tGd0p6QXFmRk9oczRvdVBvQ3hwdnhGbUgvQjF1K1hiV0FpRHNNdXhLZnlIdkxGNE8xUng0aHg2dVlyTDFRbUNPSjRFNW5IVU1UNVRqUWdqSks4eFhLait1elVTV0NlaDRXY3k2YkVBYnVHRWRqbmNZNDQ4ZU5EYWE0OThEeHhGTWRlN1pzOThvb1BUa0ZJSDY2MzFUR0VPc2VHQXkyZzNIMlBkNWJvWTEzUHI5akZHS2FPUE9QQjlnWXRPaHpCV01kWm9HUk9RWE0yMVphL3N6VzNLRDVIOHZJUlE1RHlCUTFTeEFUSHlGa0FYMjZLbnovRWhiUzY3ZFVoN0tnRi94NVp0V3paVkJubnpoSURNVWZYcSs3UWhYaDZabFJrR3pRdnRaMFRFeHVNSjdGK2NlTkZOaUMvYnVXbzkzOU1LdC8wd2pGOFh5Um9RREt1TXcxemkwVy9PbHNpaktyeGY4OUFiY3dZMkdQQk5XNXNKbU52TEhpTGRUTGlnV3dRdVBxRDhWeEJOeitlT0xzTWFldUJkZ3k4VzJLbDBLRmZQUXV0S0Fob1JwUkFqMStldkRTWVBLTU0zazRvTkFmajJCcGozc1VEdVNhdmdHNjNEMDkydDl5c05zaVFxZXMzUTYzc0IzR0VzTlZUTXdpUUhMaE9ZVmZwM1dwVGo3bi9zZWg3NlpTeXNXbkRLMmxuOGN1dm13TjUvNXFOQ0U1ZDN0ZUgzNjZOdmd4NllSNHVJei9HRHIraC8ycFBZaVRSMHZBejB6K0FCSEMzRVhVTSs4dVRuZ3hEWkVsWVNUeFJrYjNNY2dPbVlnZU5wTjhSN1NvNWlDczl2dDFxRnZYaW9ZSjV3ZzRTbk5aMDNtS0NSWXRIaTZHa250K09iZE92dGRNRDVWZ28xbWtiUmNNdjhLWHBDOG56d2U0ZGJZdklYU1FaSjIrTERDc200L3VpQ011NktoODhiMzlvZ1lkdmY2V3I5Ung3MjFBTm1KTTFyZVcxOVg2M2g3ckp1d2J0cWk0dCtnRHpIUk1CQXRSN0g5V3VEaGIyUGpQNkE5QUFvd3Z4cmY4NjJiaGhzSS9Yc2wyOGRrVGU4cCsvWXNNMnZvSGh1NlJUWUFGNzYyb0lWSkI5M3E4UXUrK0NEMGw2SkRIVnp6ZDl1YkIyTG1tV1B6WWNEYUI3UnVJT3MreUdMSWZQQnV1MElZV3Fna2lhQ1U3U29hclZLeUppSmZZQjd4K053Ym1Uc25RV0FZQVZpRU5LVnFRU1M2TWxLSTlmRmUyN3pKR3grL2pEV0dIYitrVFpzWDNXSWluRmUxV0E0TlNkeTZRZWs5Q2p3UFY5ZEFDVkdWQ25wQjBtNThwY0FZK0RoNVJmOGliUHZqdkgwSEwyZExMS2hsTTFxV2greTRlUlpRSWVhbmZTVFIwbVV3bXVkcTl5NzFScTlLTWxaajVMa3NyUWgzV2FmRitpSFllcHZ6dUsrRFVxckRvb0ZXWUFvaDJVa0NxOExkWjlNdi9VNElHa0R2Y1JVcUtYVG1lYWtLYnU4SjgyOExUQUJJbmZ0aWtNeTNJSW5yOXNJQWUxWFY0ZDBPWC9BYmt3RXZRUVlFOUIyYmVvWVp4Q2lWTHR4cHU3cFN5Tk1GTVNkdDQvUm8vb2NYTTJRRm9WL1BxVjBUL0JXaFdXNFN1b1NTd3Jkcy9JbklObHlKbFJoZ1RQemk1c3ZJNGhFNnpSNlh2UjhXSEpIT0wvaHg1VTNFVXJiNC9ZZy9LUzdxLzA5QnBNQ1NvTit2WmZiWUpzZHMrVkRJVjBRajczUFlaMzAxWGVRdGN4MVdpcHdPOHo5Uk5vaGhjdU9PbCtWcTRHOHg1L2VlU1FRYWpvSkVHNmE2OG54dUdjOExWdFFLTHJGRTVZeGthZXB2S1hvWm9iaW8xRk9zM3Q5Vk1Wdy9maXZZbmdkL2toSE9hZytsSElrcEkxaS9tMGJraUZNSWN6ZWVsaXhUd05MYzlSZ3U5aDdIZFMxa1BrdWFnUWF1cnlmOFppSkhMcERMQVhqZWRNamMzWHJsMEYreHJIRW0rU09TWDR3WnZpTEEva3Avd0U5UXFXOWxTOWVhZVBDczlMdytEWklpeTdVRjM0cTAxRDQ1OFA1L1ZrZXl3anJtZmltVWNrNXNlRjJLSkFMMFlvemU1UVdkUCtiUWNjSzZCd2JzS3FwSjZpVUZBQk9DU3RQMXliOUk3cGp4TDAyeExhclFPbzQrYVFjTVJ2alNOMDFaRURiRkFHMUhrUlppK2RUbDliUUhyb2w2UlFUbk1IM2xoUEE0NzZuUnAzZjd0Umc4OFZJQ0dpWXpzeThPOUplZUJPeHhTS0VYNE43T0V4ZFlkd0JMOUNoZnRlL0J1dHVnZ3ZCR2dxV1E2SnA2UmEyYTFBbXp0QjM3bDlpYm1DWUUwa1VwSU1OT29OcVJMS3pvUkV4MlhnMUhjd1NUZUpPaUEveFMraWVCK2gySVMranphV0kzWnZqQXNYbzEzR2JRRHBpN1Yvd2ZKQ3dJL1czOGNOdEVTdWFFV2MvaUh2UHBnY055RnBUN1hmQXlhM3FOY2RHRlorZm5TWitpNk5rSWhlV2FmcHFiMnBpSi83eXBSRWxBdnBta0x2dkpEcXRQSzRLa3ZqZFR6LzF1UHIwSTN0TlBYcFVlK2V1SWZ4M2V4TFQxSklpN3Z0dzdQbHJlT1hwRk1hNkhKN2ZpbWpDeUlqcisyYkw0M0J5ZVNjTHVhY2FMbnJSWkFIc2Y4emd6bWxnWUVVRHU5bmlFdzFpUDRtWjZyWW84UGxuVVBIWUcvRTg4K3ZvbDY1TUtkR1BOMHVVREdkMWtHN2F0M3lncDV0N2Noa1Y5TVhYV1pLVDBUZ2JyL0ZJdW9HNVZVV0RHb05tWnBQd3V5eFRpeERKK3o1Q3dwNnNKS1VUeXJ1RlFUbEZVOUJBcnBaL29BcjNTd3lEWWF5bFp4citnazdDSG1BNml3RmQ4dXVNS3pIeFFrZkh0dk5RSElZZEtLVnBmU2QwcGk4cUo1eUdlbVJVVm1YdkxUZzErZHZsYjdCeE0rSDlIb0tVcmlSZUxVSXdsZ0hiVHJ2dE9yeXNXdXZIMmNsK0ZaV1drV1ZDRzhseWEweWRoMklsK2Q3eGRqcDVXMy9VVlNValV1bDhnNXMzS2NvS3dzMjd4bTBnUElEY01ERXBSM1dNUmFKR0ZRbzZDaXgxT3JJcnUzM241dzZ2ek9jdUpFUm11MHEvVWFrRzE4L2x5bXlNQXAyT0lPMHZIVWYvcVdUTEdMNy9yRGIyMW1Sd2VPNjlDc0xzTVdhNzlaMFFBeUduaU9laVJXajFlcHV0Qmg5U05sTlZwblhUb0lWWHJHc0FMQ1ZITGw1NmJmd2Y2K0xMbUlQdW41YXBLR1BPTXgxS0h2eURiYVdaSkQ4bmMwWm1UQkNzd0xCYjVwQWY0VS9pZWJucnZVekp6TjZtSnJxTk9PNTJGRUVyUGsya2hHQm0wQXYwSWhrRjZFa21Ndit2bmRFSlo4dnhKWDNBUmtKazR1MXhPWXlmOHRRb3NJa0pOWXhTZlhxM29iOWFZOXYwb3dOR0FNdHBXejBmdzl5Y0c3Yk1GL0JBV1JIWlZyWGdDY01FWFZ2TU1reVVmQW51R2NZVmE2VVlYbHdlekdsTHJSaVZwK3J2aXlhZUNHMjU0eUR6WnEveStkZThXOU9PSEh0c1Y4Y0dpNmR4Mjd3QldEUmtvRU41TFFjWnMxelBEalNQcDRCdmJKcFVvMUdSVGNUZVhYTGs0NUliV3lwMWZlL2tVRlliemhDRWNKQXNkbXJVS3JpRE9xOEJHMTkza1pQa0ZmVHBxM0dRckxzU0JwTGJVT1FEbVUrMG1lakh5MXg5K29FNC8rRWQyRXdtb3FBSkd1RE9yMGJWTERUc0IvQ3gwdW5OSFhObGRIeG5obThOa2Y0MDJCQ3ZFekU2MWpiRHpOSFR3UmViMUkyajRJMUFrcTA4ZGNEN0xyY2d2NEIva09udmxJWWNWcHUzMU1jb2dwRmNqMnBXUjB4SlI3MzM4cnZKQ0lvdVZIUHNta0U5ZWxxbFlRdytKRng1THZMMEN5UU5KZFA3bmV5N3g1cERqVXp3dmtWVFFNZCtIM1Zub1V0Q0s0Yk0zZXlSdmw5bUNxNUxZUGV0QUNBcWhqNUxyQlNtNzQvZmtoUmx1NkFneDJJOEFBTldpSXBkY3dsT2hiOXRkeTlYSldBM1pUVDNOSkowcXBGVVZwVEx0K00zTE9GaUlha1loWks2bnlUVWhyM1pJajA0ME9ickptNWo0UzRCRFlRbmpxWFBxbEc1bGFyeE10WVAyWXVaQmRoQmhlWWRsNk1WS01WeXlZd3FNK0h5VGQxVjlscjFGTjVVWklzWWI3djJXenFRQXR4L2tYUTlzUzgzQmZYRHdkMWQyM29XWmRud3A1YmlKZGt6a25GNXNUOUhtQkh3WlRjR1F4d1N0aURxOGEycExkOGRHeUkvTEMrTDBSMnB5WEV1THRDZURxc3gyejRJZXhjYzVpOGJYRWo5OGdWMnFxVXVWWmRuZWtmK1M0dXV1eEFoMHNORy9QWUJMeGZZMmRUcHg1VldJWjVuTkZOTitvWHppSFBzWmJ2d05ndnJySWxCZWtHQmpjWWF6VEh5U0k4VVNudE5RZm1tbm9jWTRPdjh6QmQvSkQrcDk3NENHQWRmSnFzaHlSZ2RkMWh3WlhIaFp3RWdNK1NhK3BJcExDdEg0bkhuOTJLbW1CakhTclgwRjdOdmRvTVRxdmZGZ1FxeFNyVDBzWTVHWEFrNm1YaGZIUnZFdTlMblNzeWt5RlFadmpyVFVBdGVTSzFnYXNLVS9ZNmozeTRrWDFVS2ZoSzdDcTN6MW8ySUREcnVLYnZmUFl6WWVBN3JKQmZwTGVvOVdFNG4vNFV5MGdUR2F4UXAxSjZiWG9vS0Iwc1lqdWRCRWJlNWlqNkFERG9lcm9pNkxkZ29TRyt5OG5mQUJuYnR6ZzBRZnhSa2x0YXhSNDlOK0ROeW9ndjQ0YTZEMmNRZGhLbElRUUZhcEtENml4THRYb2ZGZmw1M2tFZjgrNW5VOU04R1ErQWlqS0dpN0NYY1BhTG1GbENuMlB4MVFOUTE1a29LUm9CL0E1Q3lyM3VJMFdQQWUwQ1dwaTRVQXBkZGJCbDVaTUtzUk5HVFAxQXY4SjZkOXpnRkQySjk4eFJpUHFJWk1IakpqZVMzTEpsMFlGNTRXSE9PYStUeitqTEwxTHRaRmR2c2MrRDZSaS80S3F4VklHQUI2TWJZRFRVbGpnU2J1d2pxVHFBN3Q5ZUhDbzROTlgzVWdBNkYzN1JobjdOSHZ6VjBMZzhXbGZ6bHFlc0ZvekpMd0ZRWVF5eUY0SjNuWndON2t2S1dEVGYvcndWSmJlWFpJNCt4MUErZWRKRUJQZTVHTldsbFZOb2dZL2lDMzJhQU1malI2S2gxQytFSlQzZWJRajZpdGYvQVpvR3NrZk5SdlZLTGQrZk5uYjRYb2FzNzhRbTRGTktKUWtPNi95UDc5Z3FDRjVoaEV3OSs4eE5idUdWbmNrSlNpbWJNdGZiaWNTWUJVRkdudytNQmNWazFvbTdLc2dEaDZLT01LT1hFNSt0OHNYLzNPMEZnbEcxbXBjOHIrQjdsUS9Nemg1Uisrc1prSXRGNmtqUFQrZHdtczhjU2hkV2xGeU5rRWlzZUdScmlIbEM4ekRsekNIblNEZm1Gbk5MaWVnR2t1anVTWm9iN0pvWTd4K3F3Yi9hUkRnZVNEQVcxWVpveFcxTEUvZWoyTm9ReG1UNXpUSElGY1ZyeVlHOW05azR5QXh4NUsvYlgyS3Jzak01V3BZdjBCSTI0RnJsWVprR2xUbHpYYU5QVTlmY3ZrOWNFTVRSWEptSCs1THRMaFk4UUllNmFGY3NvalZGZ25DdEdJRk5rNEZkVzFzd1VieE5vUUlWQ3cxU056OTUydysyVk1qb3kwRzVJUHF2TmlSNHlQL2Y0Q1JkYkt3OEtISDRManJBejlZT0tpVDloa3BFR2xRUXVmM2o3SjcyS2VSYTQrZ1c3T1RKTEJIQnhwSVZGWkYyK0lCZUhjKzNwWlA5VHBmYUY4QzVheHpDNVVaLzFlR2xDZTMrTTdrc01hdVFiekNvRUtDcXNpKzFnSjhoMng1VHAzNFVVV1hNdGVEbnJtTHVJaVVnV2xjZmZVUVA5K3E0c04reGxZajZicE1RcXE4Q1hoYzVZU2twdDIyTm02Y1UxbldsaEFPS0JraTVOTm9sN1JZNkNTVXRuV281UjRjNlpLU0NPbXVqZkVIemxWUytTVXFwWkVDK1FiNGoybUVwaTJ0V0ZDSXZnaWtmaDM1eXNmNlRYYjZDNlZqR2oxTExVZDdyRW5MYjZES2ZsM2NEbjJXalRHNGpDVWdDQnJMR1BKWEJjWTUrMGl5SHE3YUJ6TFVUODdEbXFuMFgyQW1Nak9Nby83cksvekhrNWRieUhZZ2EwRXNlRUl0WWdXa053Q09JOUIzZi9VcmFBVDFDVXhwMjBQNmk0TmNCQUNLcFdPUGNOeGVXOUNDc1BvZU1UTWxhS1IxTEJ0YzltZW04bUpNL3N4OEVrU3YrdGdFUDlkcy9ta2VIdTAzQzlKKzJyNmlySGhrV0JBaHQ2WmF5SU1GVXV6MDgraTVWRENZeVZoTVNVcGp4SFZZQUo2YUFGTVpjWU93eU14djNNZy9hVS9TbXo0cWx3S3A1YWxndmJDTkJqYmxDS0tuY0JLL1BDUHNlTDVsbjVFb3R5SnFZbUJHakR4cEp5TStGbE92M0RiWDJyY2NIeG9PZVhRVlZQTWJIb2E3SXB4M1ZpcW1nWUhMT2lFZ2h1UW13bjZ3bHA2bVU2bWRWdjE2cTRDYTB5R1dIL0pGTFhWSzJRWW0yNThzdUppRk9LWHIzVDI1eVU4dVpNSjVtbWh1QkN3MExjUFZBM1p4ODB4Vmc5OHJXeFlQT1dLRWlXL0NWY2dHbVB0VEExeTAxeGszcGxNTU9HOXdWT2xJNm1LempDYVFDVGxaMjFlWnZmUlpCcVVFNGRFb1JuRmxEaFZiWjNjZmdybE5MV0VVSVFFUjg0Szl2YlpqM2NPWi95L01YSXRnTVpIV0R0NjVYSmhFb29PNTFQeUt6WmEvaEIrSlJ1NFNEM3FlbDVZdEg4QXp3RVNDaW9nUFlQbXRDVU9naWs3VWNWVmd2YXd0cStaTW00M2hXS3F6KzRRUExQOHFVVG1oZjJRNmtmODA0c0VoZ1BXakdOc2lBMzFaY1hKNEhPT29tTC9hRmNZMnJYeFY0WDJHMWxNL1RNYmJwSGNNTTF3QkxpVzNhOG5rOWh1bFRDYW1KS3JzeXVTRzE3MWRNT3JNK2JPRlRZd1FDY2hsdFBRR3E4ZjUwOEtwanE2R3JRdENrbjg5QldHOHBtZlBBRW1xQkZtRTVkM2U4b3BJSGo5OXBYamFxdlNKd1QyT3d4ZHR2MG1FdmFSYlkwUGcvdEk1Q3lRL0xQSTE1SmUyczVkNHpYYi9kNkpXT2VCVVJ0V2tBck1FVDBWLzdhR3lnaWVBbkx5WUora2l1aVZVUzhxNFdHS1lGRWRzL2N0TkdTZDdKS3lRL1FZd0ZGQ01sejlYL05OdWs0WnRYSUpsR29RWVQwc0ZWQTRNTy9odjhwV1pQb0I5MG5LVnRQS0plMGxUd0ZVVWE2RzY3WkRMU3NNeGJMa1NMQkl4dEk0ZExKZVZPbVVGdEU1MjZGWG4zU0c5ejNmNkN4ZEFUU1NITGRiY1lkaE85SGhoMXU1alo5QkJwYlZlMFQ4ZzBDNzNnaWxacHU0YkkvMk1waU9wSzMraUdWckZIRnYxVm1xaDJoZlBTTGpyQWhaZ2dMR3lDWUtJTXdKejNkWUNQWWpDZVJIaW84Mll3UmZtNUZuT3IzTUdJWjlwUmwvekl1dHNuZEZ0YWs0bkNQdHlFbXNjaFdLQy9sbDFGbjBaRWxhb3dWcVJBQi9WMXJYUkM4Tk9kU0UrTGlnSWJSSnI0L0xZU21ET01hYmtOY0EwZGVCbjBJY0Q0aEN6UzZ3bGtFbm9tSnNBSk9pZjZhUUh4RDJRaXNBbGEvNDB5UFlDVHNkRVV0SEtWTG8vSW9lcUVtWHVBSldpMmU2U2Nlb1c5SHlGV3g3c1RYYWk4WW9yNU84QTVzcGgwWGxtZml3K0dpeFErV28ydkJiZWVNSlpsYVVpOVRzSHdESEx1YmpaL0FOcS9yTE9aMlhVSnpQTkEwZjkwb0R2TVBqaEFRNGxvZGpMNW5VR0FHZ3QyUmlWTkp0VVZQSVFJT0FWNG1sd0M1V0lxeWZMYUFQOWR4b3krVUM1bEhMbHlUKy9SRW54WXlBYm5aa1hwazh2dkQ5UUQrRkZiRDQ2TFZpdE1xb2pRVmFTYUp1SDNKVitEb3BQeWZGVWRBMXZXblIydGdhY0VGRjNMaVZHL1hWeHU3Y3hLaXcvTFFJRHlJSWNkeWdhS01MYUNpdXVUYkFJclNLSE9kYzZXZ1piSTNOaVJPRnJucjUydDdTcElsSEFvcHBmSVQyREl2RHZKVUpHeTZWRTIyWHlSVzlVSGVwRUk3b1dpeWs5N2FBMytlMkdFT2svUVRxRUxsNUZyRndBbHVqeWZMbVNGeU9BZHpNTlM5MC85NWh3VFJ6RWgxbHhUL3h4ZUpQb3c5WkI1MGo0QjN6aUhzSmlJRGFvVThLZjQ0YlRTc0p2bGdyS1FaQnJIMlB3MHNWNkV2UHdWR3JCZzMzTmZKZ2h1aWplSGo4VVZuMEFnZjJQVEpsMDczbW5TNGtXYjVDKy9zQ2Rxd0V6dFZYaDVIbHFkVUdwbDhmSWNhb2RnRHM5N2ZDZ0R0bFBoMGxIRzZSSmdCaVdSV0Z1RnFHZTBBa2NjZDRDem10d1Ztemh1a1dwdEZ5clBvRTJEVmRHdVJLbWlGY2VOVVhOMTI0UzhxS2lHSDFiSkJvcUlJOFQxYUpVbnNDbWdnamFkOHlhZkYrMHBHUmV6VUgwY202OFBlK011NHVzVnNEbG5GYmF1VE5rWEl6MkhDdDcyaWpqWUpmRmh6emo3ZFV0aEFnTEUva2RKMU5uK1diUEdOajZBMnN1UFg3SW1iRnBKVWVoQzNDek5tSlpNbWYvV1J6blV4cTI1bmNxRzFJejQrcmhndkhUcU1ydzJZN201TVc0UnpHdGZpODI2UlowOWRGMU9NaUdlb0ZxRjNjZFpMd2NsR0dTV0lUL0dsb01JRnJKOTMvSzVJRC9Xc3NBNFFoa3FoQnV1dk1sV3ljRXhwNU0rRkNBSThzZTFaQ3h2RW5WZm8ySFMxYndQS1lNM3F2T2JWUnBSd3Jta29rNUR3RXhsUWFRRWR6dEp6ZTVCZDhwNVcwaVhLTWc4WWZwZ0FNSFMxYzZSVXJndWt3MEg1SnJKRFF3Y1VOMWhuOTN0cmdzb2hKdTEwdTNnYXNkUkdSTHNTU20rdWNtalNNdGhTT2FSTEh2MWd2dTJXOGVpVTFwOUZGaUpLckovdk1SOEthYlVWZmg0MUF4RlpEVWd4ZGs5cGhPbkNvVE4wZ3hPQTNLOFN0VUprLzBTL3Mwc0VldHVkQlBDdzBlTkNLbkdLcHBhTlVYejUzWHk5K3VqNi9QZkNlREpucWVUUVRrV2VBNjEvaEE1M1g1akVZZmtBMHpSMm1Cb1ZvUWlMQmR6aXpaOTdHTVdrNnhrdWZsWVBUTUdiSngyd1NtbFllTXRsU0NIc2JvT1ltcXpHTHlPMTlnZFJ3NVBXREZrZ2QyQjlkS1ZiMitPWFBpaXlhRDRVV2hIdWM1SVh4OUFKTWkxWklZMnozZnEvYmZLbVo4ZlFwWmNqRk11MkdtWjVaUXhWM1UwWS92RHF2UjhmYVVOdElGUTFGYVFlRGRpSzlMM3hNWTROa2xvNnRpekUxMURFNXhvRnZnMUlnVUpBRUptSDZMb0ROZ210MS8wQURXYmYydlovSDBjaEtzWTBzZlRwMGdpcHRPK3lTMnlDcHFLd0xGVy85MUQ0Wi9uNUZqNHFVSUJpNmxvMko1UlU3YkpwaWZpSFlocm1JLzZDQ1RHSW9ZZGdGVk1rRVJOZHloNFVTM2Q4Ni9LV0NHMDNDemYvcFE3UU9adnNqWUdwSE52L1VwRm95bHJjV1paREtlZDdsbWpndkpQNlZUYWZ3NVZ0a1JsN1JEcEwyTFhCZ3BtOGs1QTB2Nk9VanJqYWVHcFJmd0FnM29NKzJWdVh6VnJxbkFXYUUyUjBQZ3QwZXpzQWlLU2FDditLL2VhVzhkaXJCRmZSSnJzb2JKN1VYNGoyOURtdzVQdDMrMTFsckVuNkYrcDA5RWxpY01tSkt1WmtXdzJyZzBZeGJOQklqWUQyV3BvZ0R1Y1FTM1p1VW1NUmd6QkRSbFF2SE1WdkllRitaMHFWRXVTTldNYjJrbllZcjRJa3lIRm9ielpTUGQyZFhyaGdoa05DUGxCYTcyMUl0cGlNaGZBd04rR25SdnBzZ1YwSmdWUkYrNVhNTHA2eThxZzVpL3h2TW94MFlodlVWODdWTXl4QmtZc3NRUXRPdTNCOWg3UGM2ZzRnN1lnZjV3OEx4T2Q2Z1h4dlM4enBXbkZwbXY0VERLbXVCS2l3ZzFzM2FzNzcxWStIb09mdzZrb1FTVWVSYkVWdklPWHNQeFllNS9nR2JSeHkxcXp2clFBOHhVU0lUVGxhNCtlWkUyaGZLTjNHK0Q0Z28zaVQzMVh0ZGxmbHJKUkxnVjdyaURXQU5UU1p2eSsvQXE2bkVsZUFrVXNUMU5Idzh6T2o5VGNNdzFodVRIU3diNm1IV3ppOE0vZ0VtQ3Q4alZmL1NSelZXSEQzQmJLQWp5VGJRTGpNSllGbmRkVzBYMEFrTGhUVTRMWmxWUktYZHRmd0xFVEVxaC9KS1BySW4xMk44N3dVMzNjVUFGTUh5UHN3cVVrMDBlZStNNUQ5cjVkQTY4YzNIZE1OZmY3OExtbTJLenB4WVFJSi9XKzBqVmREak4yZHV2dlEwR1AySkZmMUtYby9wS3dqS29zSWw2NzUrY2dlVjMxOVRtWUVhTW9NQmsxZUk3bjBHd1Y2c3NXWkI2SEhrM3V1WkxyN243VUFlbWFjNlAwZzFmQmxleHlDdkg0SytReUx0SUpVK0xsandXR0JqT1BvaElybmJTUlpGZWphRTViTWhMczI5OGxSZGdOaHh3cTZod29qbXVFakFoYUQzb1NrdERWQW9PS1k1ZDkrYVBxNVVwL0pmTEtGY0xTeXNDY05HMlJMd29naHNTeFc2aUhHc2dObVlIY0VRTFl4THJSZU14WU0rbVRQZk4yazhEU2RSSUxSM3ZCWFBGNHFZZEczTGFlLzh0b0VPbVhKd0ZGQjBNTDAwcHNWanlUdlYvOHk1Q051WFZlQnJRNjNhelprT2lQMkY1dFloWVZPZUU4QzVvcGJNdHAxSzlXVE4zbUF3RUgyaWF1NlZnQTR0R3Q5R2JyaElpSHZwbGlIeEd2aXJESWhKV0MrdUlOWnFORlMxNVA0dGVib01KcS9LMmJNa09IUWROU0hoaG95YjlUbHdldDJVeXRWbkd0eWtnNDdOR2NwMEpNSWx3Si9GRnFGOEpCYkdDcG9VdFVsMTZSOVEyem1WMWZUVWMwOCtKd3dtNm9zTFovemNXRnVuWlNRaDNEcTZSZ2RqUWlnSHFYQ2pldnNyVThRWjljWTJGWmtsK1g4R0VTRGUvTktDVE02MXhpZU9rVytxZitMbktUTk16NWxGK1E5bHdGMUw0VXFibFBacnRtaWs5cTlVZHpTa2M4R1hRRnRaUjd6UzBDd2tYbTU5S0wwcG1lVTNWQjdjbENvM01VbWN1OGpKUkZxcU4vZGZ2YnZQRnpFVk1WZUNIdDl5c0ttSGRvalprbVFhV1JuSWluYmorYUs5ZFR5TUFSNEg5Nno1MTRPdXd1bHJWUGJuS0F2TzdLRDU0ZXJkUUpEekluU0tZMjhwVTZNdTVJNC8zbk1VSU9wcURONjBDN3JHb2xzeU1zQlFlMEtDMmh6U1pGSHJLN05VdVlvVUZ1Z1JoWkxaSThDWG02cm1OSk10S1FqZHZkOHNDVU9QT1pVY0MyTVk3OVNqTGNxT2F6NFY3eWg1TnpFeEFvRDBZZUZQdmlZWXVCNjIzdEZWYVN0MkJ0WTRaalhpamNKMGFuZlYrQVpMeXM1ckEyM216Q1ZDTmN5V2hiQ1BxVU93bzJGcW5ZUlhtWEJZZG9zSEtLZGRrckZYL0dqMG1SSHBCNWpkR2pmeSszdVRScW9TTnZTbXh1cEVLUDltMTkwNVFUcWJUNmxxQkRwS3k4WTdzTFY4eDB3SEVpQUJsTTVYR2VOeUlWc0xlcW9RZU9ZOUFheG1mdnQ5Sm1NVFR4MlBpSGVzemdSc0VwOTNqR0VRYjFhMjZscUlxOFA4SkIwUmd2MmpYdFd1aGFyVmlRaE1CQ1Z3ZFJPZ3NpTTVLQ21GbFRIT1RZaVU5eVp0Y01SbGdESVQ3eFlpaU4zYkFUSDVyMkpZdjNpWlpGNG9aN3duSEtIdm1ZV1hTU3VhS1NDTExFaGNybk96OXZpaHZVRFFrUVUzNEtULzQvMFczSFZzRCtHNG1tbkZrejFwL2QvZy9oTUlXSzhzWWowR3Fma0F5MXNFUUY2enFNV3ljV2RQVkN4aWxsbS8rSWFQTmhMOGtSbTFLL2xkTnRtVHh1Q0EwcUIzS0VKQ1dEU0lBeit2UHhqMUZITzZmNTQyTUlodWxWRUdoSEhVSEd6UGd5VjBHMzBxdjNGZUlxVU1FTGR5eXd6UURqV2F0cXFEbzQzRmJwai9JNmJLVk9QeHQxQ0p5VEF5MVB1WFdMNzdLeXVLWlFjYU9nTWhEYWFTL212T1gyVi9peEZDUWFLcmUrM0Q1RVN6VFFaRWZIbzFXZjhZR3lQYU5KVW1jOWt2bmtpOFAzMFUwdzlWOVVMOThzUHR0T0x2TkFaaTkwNy8yTW1yc2ZVZDZtZUJhMm15U0VaQUYrQ1FMTk96ZEFUc09vdDBDdWpnSTFkZWVzRGpwa0Y5RnRrMmhRZ1JxYnVkeEZPdWZsUWtteC9rRHRJbDk3dUo0bXJ1bkhLR1lxQXNSWnRSY3JjTWxxNVVQbnZwcjVHTmUwQmlCVTg5M2JqSXFUQzdXUWtBcWZiSmM5WTFrcHRPZkZ4ZjVVcUhUSjJBUVpqazRQaU95a2JYcmltbm1KN0dqbHl1OE1vN0pScVh0SG1kTTVva0c3bDlUbmY1UGN6UlYrNUprODl0azhQenp0SUMwbHVqdEhHZS9FOEtPbEZpTkQzR1Z3djg5RWJvQ2hZR2hRdFMxYmoxYWdiRjdpUXRPZHpUbHRRRWcvbklMbHhYZUlFeVN6SGNsek5DeUM5b3M1LzZQMWJsOXBDT2hlSVhZbGNoZW5IWVY1L0ZFN3M4TWVpcUw4a0JySkI5M05BMXNGS3BBaDNzTjhzaWlxNlF5Tk0zTzBoU0RzRUxOS0tjeUN4TXVydWMrcStBSXhhc1p1WVg4SnBYNTluTXJxNDczUlhxdFN0VGptR1E1VWhmekRzNWJTSzVVNTdYWXRxYW5sV3ZmZmhCT0h1ZVJwNXVVOWh0M2FEN0twM1VwWEk1SnB3OXJBRFlMeEhBbitRS2htOCtIZVp3UFQwMm14ZnFiQUUyNktZMlk5OVI2M2pET3lzU1BPSjZHOGlXMDR6VHYxcVJHKzBiREdpZnRQOTlMaHhod2xLVE80Z3Z4NmViTXplanhFT1NpdlVERTNpdzBiQkJYaTNiMi9JZkd2cjhmYlZjSGcvWUZUTUU2SUF1RnJmaytvRHN1QVRTM2UvQ2JDSk1ZeTBpOXEzdTVOTmViUVpUYi9LKzV6VTZkZGtCWnpNWHozMVR6bUsyNC8wbktsMklxd2tFWFF2eXlwbmpoQzEwRVlCTENNYjZyeUVUdEV0aDhjZEVLVW91cjYyRnhKbE1xZGtFWGplZnRiYUlBSVJrSUtldXRQSmtuUHk1NnlRRGxjc3c3dTFmNzdRNUVIeEtGU3FIUW1TSTF5bmhpc1pqWXFTZTNMdzBtTVRpbUYzbWo1VDdhRkp1dUtuQVRVTm1oT1J0VktZUmIraXpTem5ZV1JrR1JGWEg3bnZ2YmZKUFc3b25UMzlxQmx5bFpkTmcySmtPYXc1cGs2OXQ2a1JxV1lYVzlnMHY1WVExTnRxY0VnMlZKRVd6NzE1ajZ4eERaMCtvN1RtWENWRllnUmhqL0tBSE1kejBhZGxBTW9VZzluaUcxWlEzMWx1SkRrRGxuSXdwYzNnSWxjQllQR3o3K1E2ZGc0WVBJc3Bzd3hDRG0vRjBhY3JMSDcrTTlUMlhub0RCWG9zNmdsakZSZnlGVVV1Y05tNzNiUjNEays4TTd3NEhsYndBRzZmNGdyVE5keGs4NlQzMXJWNVpabVJLZy9yWnJBTSttc3cydnVXYzNrQnhzaGVOdXlzNU9xaS9ENmJkeWpWWmYzeHY2VGRybVpKYmtnY05yRnZWZXJQbXZkMVlvbzRLVDdIdHhOSUhzbVpHWkxZdGJweGdTZ0dISnk2THk5a3lvQW9MR1hvRm1Iejl1Yi96eDRyK0dsRDBPRE9RaXBreGRhMDlrc0NmYzkreDF3U001Y01zNmZJdzVHMGZiUjFiRlJLMS9iU3FxN0dOSjJKdHFzMkIydjA0emd1U3VsSTlFbytnMHNQZFpLeHVoWlhZN3QrWU16b2tYZ3NhWlJEUFZ6SXAwNndiSllYL29lRVdUTXhlY084ZmxKdWl6Nm5LbnQ5SzZ6THgzT2dlYUhud3JLekZ4UHlhbEo5ZUFJSDRFM0ZYbGFtVHdrbDR2a1ZjZ3AvNGV3dHpRUlo4N2ZuWlp0MlozT2lROStQZlRIVEpvS0QrZmRETzByUTgrOGFVTy9ES1pmN1B5SENnbnNLbFVlRHN5SFVadFNMVTU5bXU5cXdhMjY5OFd3NWRRMkFvZStVb2cyYWFVL3VwV0lIUnJyZnNCSmRzS0U3cWZLTDA5V2tpaFAvQ1hRWmMyNHJTNndJUE5wcGhwTkp0MmhoU1UrTlV4aWRvNDlZWGh0ZHkyYkUxTW9vWHFCVzFiRzBTODlnNGx1eXlSRVB2YXMrZmJEMlZicTlrVVRKTlhSZkx2OEpKdDJRUzVqaS8vRVd2SDhmZXFvMVMrY0ZmTE1zZ01TNHpabWhoQVI1NmNZMGFJQ2dZQzluNGNsbXJOQytVSjA1eHBZN0M2NUlkclBaMWhSaWFXMzA0YkZnT05VNTJtS1R4QnhmWk5mVWRsRGxYVU5yaVdMekh5anEwWlBydW90aTMxQ2toMTNvby9vSy9RdUY0a0IrUDNpMmZxSVdybHJWb3Y0QkpoRDBxK0x0OUR2TkgyNDJJeHBQRlhST283VGxubWNlTFdDd2paQVBFUUlDMExCM0w5UklFT29oVVMzN3JWdFhhZjN3a2YwV3lHU1l5QnFmNEpMNTJqbHhQQmlDUjJSWjJuaU1aTDFRckhoVVpHQW5vTHhVREsxbFBNMEd5MFpJdUc4bVpia3ZOUUJQNnNzL0xUUzY3cFBIR2lOTU9hVGo0eFZadEVTQUx5OGN2ZUg5VnRWbjY2d3ZQQmpwU1hpMWdCa3pzM2lJVkxrSnRFU2JGVGhKNU4zOVhRc0dORG1DQWh3bFk2QzVjWXRhVnRaYWEyak9mZDFnRFVYdWJkWlpIbTFkMmxUOVl1ZWxqZ1JLSXphK1VJQ3FLMXl1c2hsT0kwMEpyVmhBdUJtWVJLSXVFMVYvNmRlYTY2WlVHR1Zad25pcVl6K2VEUitzRHl3VnFBYmtYTGhBempEalFGN0ROS3ZFd1MrWXN4TldDRy9ldklCaGVQaVpISHJDV1FPdzg4eE9DS092RzgzTExsUktySnR5S1l0ZkZmRGpMVnFVM0VyeU5lWEQwTlJncjNzS3lJM0liNTBLVko3SExHSEJsVVNzVU9NY3I0RG5ZbS9NcS9sTG1iUjR6WFVQTDNleDAwZWQ3cDAySjJNOGVFZXEvY21wNGJ3M1NIcUlnQWl1WE54QldnMzYzbkpXd3dkOHFRUmNqTW1aSlQvY2J0OVhqQWxYTTlhYlBhUlh6Z3NzKzdqeTdkKzk0UUpPNTlHRVVWYUxIMnNrSFVhNzRsd1RMNnliRGRVRlpBMDYxalBpeDFMUTI4c1RNK2NROFBZZWkzMGZIMisvRVFyL0k0U1VQU0pMSkZRazFrekJqSDUxNWtacFVFVXJ0bTRZdjd2Vit1MTkrVDhaS1NpWDdFdUttVis1OU96ZnpLMG0wSHNOcmZpM0ZhOWFVdkxFUG53M29zSzN4OWxJUEE1aVZoam9ISXI1LzNIQ0dUWGdzbDlrL0FoT241enJpd3RldURjdlhwZ0IyZElha0ZGT3MyTHIzUjlzc093cTY3dUx6cmd0SFNwWnFwWk85UTJEOFRSWU9ZN0huY1k4TDVXdFNNc1crTnhpZGRMSUpRdDExYnhKRThrZ1hCVGd3ajB0VTdLRzJhYVJUOTY4YTJvcmJMM2hXTXh2OFhtaFB5ZlZUSDE4cnV1QjlwcTUvOEpBczZ1WXBYUW9iYUIxOGhCZnJvODhsS3lpUVJ1ckRKcDZ2UGpjMzZjMUhVNERCMDdNZW5GZlpLazNCUDRPdGM5VU5wYlNvNzRNcnZ6MmlXakJuaDZEa0F0TFlKNjh4OEVUbURVZFBha3F4cnN1Q3RablR3KzhqZzhNTWx5Q0F1QlloeFRqZ1VNV2daYSsvaEI4MHRhZm5DMGFsQWFhNVNCci90bGlML0FweWxGbE10d0duMFdHSDczN3U0R1MrK09zS2dpZTB5TU50M0FwZmxRcDBJVDIyM2crTnZxOTl4NXhTVTZWR1lkUWk5WlFUYy9yVERkNEZNZW1CUDAvVXFnMG1wUGtteDBNejZOajhETjFUUmF0ejgrbmxORzZwZEJjMlVBUDhMU2x3bFBwNlBLYVo5Y0pkaWFQSDFLbno5MmdOd2hUekkxempkd2Y5cU5rMndtaDFPMVJ3RTQ5ZVZuVGFYZFJ4bmZhd1haU0tNcHdLM04zeVkzZ3hZamRleUhLQnJYUTk2bWRRUGFYbVN1WmtXRDFLckY2V3pTT3JYL1lTMm9JblpXZWcwVEJ4ZW5kS28xWDkvSHJUR0pUQWE1RnF1L05UTklUYXhRU2ZmVmNEaC8wTWdWR1dzZFhWRTNBV1lzYlVjQWQrWjJ3MkdhL1N5ZzM1bVA1aG9NZDFjb0s0Rm4rRS9qd3ZidEUzalUwSGdqUytnZFZhRXhPN05JdzFUdm5QNE8vay9TSWwxbm1RdWlpdEMvMkYvaytzMG5ib3dYcWljbmpsMHBvK0puSTQyM1RpdDFHQjVnZUhnTDVqU1g1eEEyKzhnQzV1QkdYY2Q4eEQxT3VwVlVFNmNsZmtLQXR4QWRMRDN6c1Nxazgwb3VhbzR5VTR2TkovbXZNbGVWOWllSThMYVBPcEltcFRJVUZ0UE14YmJuOHV6cnRKTW41RFNNcVJJSDJodi9yMkdhb3pwL3N3RXZrZVJlT3ZQTVJnayt4SG5mK1FXMXNMUWFCL1V3ZkpPbVV3MEVmN0pUcURvUUc3M0VoYTlBVVFXbHdHVG92Y2xXVE5FdVc1Y3psK2o1RTIzVTJtYUxUNmF0bjF3dEZtdW5RWnR6eGpyZnlCLzl4TE8xSUQ0UGlUWm0rc1R3UWhtbGtrbmJqN3k4K2hmSm5ZUm84b2VpL01HKzNyWVEwdlZsMW41VGo1VWpMMlZjeWtVazNsK1J0UW5RcjlYellEcHNiMmUyMlJGV3lJNWRURTR0VkRJK0RCbExCWDFhTjdUSVR4dTFFY001VlRzeGFSb3BDREg2WWRkbFFVTzlkZ0JVRTlvVjNySGJlYzNOWjlxN0VPeVBqZ1FwSWFGWlRzV09TZlFucmZwakdQanpGK3JxWlBQbzJFN3JUU1Z0UUhFWUcwWk9HdUd5OFZta0d5WDdka2hSZ0VUNytsL2Z2Ynh4KzVtQUYxSmtqSHN3b3pkcUtmczlqd2xMYWlCdnRBUmJpa2szbDhFTi8yYUJ2UEdEa3RyTnZvalYrTkgwQmQ0WUNqMTJ4alZGcEZva25uaTF2UlpzcDlSNG5PU2haZmRnb29nc2R0S0VVYVB0ak5pcFdMeEEwa21SUjd0V1VOeTJKYW9ORjRWcS95Q2hzNW8yTk1UYUVSUjZ0bElaVmticlY4Q0xtdm52b3VsNm5kVGlEdEdScEdveDBqOFJOYVByR3B6VmIwSVc0d29xb1JmdE5TMXNNOXI4aVc0WjRjVG16aEZkZXUyblcyRHJJS2F2Z0ZkR2xCUTNqdjVYdER3SWhCWkhXMUk4SjlyaXhoeld1SEtNMXJmRXY1TkExNTMvZUJIdWYyZ0QzNm5sMzFtRjk2WVA3dW9LNnFhQUFYODVFbzJURmgzOXFpK3FYcGxERVB6bG9VWDNvMkdyNDk1VjN5K2orTnFFa0JhOWx0bWxRd2piSWZ4ZnVwOXlyelEzUWg4bjEzbHU0WHZSa0VRNENFNWdQOVljbklsNS9VRUtQTS9KSk5YbDRUMjcxZXA3ZW1BSlI0WkdWajM1L0xEU0tLRWt5VnR3aVhXQmZsVlhWckxLeTBQVi9nNlVoanFmOElqU2U4OHJXYU1lSHhkOTBUQk1yV1VZWWhTVFNaVENhcTVxZHJsNHJFdHZTRCszMDMxOFlBTXhBeW5NcEdJQTlmQ1JDZXR3NzN4ZnhlRmd3cVRqaHJFRFNZdmdtc0lwb0JPRHMxZnQ0R2h1b3BDSURKckh2dnlZczZCRThXdDMxZDFGTHM0b3RHL3BwT2hubzk4eHNFY0FsUGkxT3ZCWFJPVEtud3krb0x5dFVHK2dFSG5NZEQ4blVSL1FIMC9kZUlUdFBQeGlMU0U1azI5OVJQMXhWdEsrdVJtZ1grUHFXV3pNbFRLZ3pEY2hVeHRnRDVNWk4yQUpkenpaTzAvVkhIUlV6eEZ2bEgvRVJTUzdwQ0tydjhGMzJnbzQ3N1dDc0hWY0ZKWlRIYWJrcDFqekhibWNIL202NURQMnFrUFJxM2lSOWdRZFB2ZWNuaDdlaDNxak4wei92Nk4yb0RRbzI1ckYyTHY0dUk0WER1clBaYWFBZFRqUUdoUnczdnhvK3dCcGJUc1l3eVkvQXVoTEFzcUxQZ3kzM0J6a1RNWW9zOWJPcjIveGJ6ekFlS1pnT2lHWkRBbVlYQkxKQ1h4eTdHK3JhQjg0dlFJTmJPdDJlSFF3M1F3bS9oOFNkaVcvMXI5eXJVcWROemZ1dDdER05JczlSN2Y1QWRmQUh4UGkwRTZxdE1wRE5lclhuSVFXZHY4RkFUT2dxM29SZ0VPWW5tV3FiWG5POFhuZ1lFeklDSVFpZGJRVmwxUnBBQlltc2t3OUd0M1gvUTVpMXJyS21XQ2VPZE94bVMrK0x5ZzYzc0gyQlJwYVlwSVpocnh0K3Qrd05Zc2p4bHZtdjhrUHdqQlNvTmdQSEtwaWJXUG5rR2ZYMytsM0g4WS9Ma0toVnVjZkpFWEk1UVdQbmJsalJKN3ZIM2dWTmZVb3p0S2xIU1F4NGJqSHJWbFRaa3lTc1pJNUFvRHhRVzF0SFByclA4TTlVZjJPcC8wcVRDVVFIUWJTQkRFRjlzcjBibVI0MzNFYzV2Nzl1TnBPeDdtV1Fwa2lxZFJlTTllbnpXWnQra25iRmFuSWk5cWcvaVlXTit5bjFwY3pUMThGUDQrUkt4Y1ZncjdMWnlrN01ZY3ZkUzJSZUZWdCtOZHFkelRDSGVSbXlIdXBvZVBzbXBNQkpqUS9OY1lUdExJZnVMR1FxTkFCTDRwWFVBVUVQZTMxU25XY0E4cjZKOGIrK0xUQ0U5eTY1bktQeDRDdzB3SElVemFGdEhLYlNlUVE0NzFqRlFRVmZJRmZUamNIei8yLzErSWx0ak5yTjhGVWRGaWIwNE8rcno3Y05FdHp4aTkvZkQxR2tOZ01pZUtabmxSOG1yaFdlRlBDQzJJM2pKR1VjeGVZdGxuSWo5anVBUFp0SVdzaFR1SGRjdCt4RG9qTGxpY2JIbTBsb2xURjYxREJSaTlnWmxIMHc5Qk4yRHY3bERLc3BHeGN5UzFGWlVIY3ZzMld5T1dsNlNTRWN6bVI4aFVSVnYzZmpFTUc1cE5aVUVVVXMrcko5Tksvb1FPczFwZHZ6ZFFnSUw3dEtibXlhMHdBRmZOck83MTdQUFAzbVpWMklYaDk5ZjV2ZVNVeTZxVml3bXdaUW00TExBQkR4b3hrcVFWYnAwakZDK0hRdTB3aTB0QWRpbTJ1akFnTXNoeWFMR2taaldaLzFDVTEyeEZ6NUJmcjNjcUhTeks3UGdUUmFnbnpleWFzTmcvVm9pRTAxMEt2WEUxSE80RGtaT1BEc1N0ekp5RWRXaVVGUUxvZWxzZlJJbkVTWXFZa0lHRnEzRS8zMXc4RGpQeksxNEtVbUhqYVVYS1FEWTkvM3JIQ0JZK2JtNG9vaFU4d0pPRnVwU2lORTlVVEN4aDhmdnoyTDlpN0xpRm41eFB6dTJCeVlzTVhPa25reWU0TjNUQ2FwYWxrUnd6Vzduc3dVL1YvZ05GZXdXZ211ZStIYjdJYmh0VHVHUDNPN05zbUNUUkhVaWE0WUE1cnMwWm4zaHF1d1pIWnJaTjYwcU9BNEJobUJNMW5PVTJkWUFsQ0VZQVpzVWNaRVZpcXJ5YTYvYlJnY2xuS0tBLzMvTkl5WUhERFUzWWhkZEhRSndaQ05WZ3A1OEU3N3F2bzVtOW52eXFRMWE4bHJNb2pHRW56SkoxVmtCK09nbWdmK214ek5kaXk1QUZqR0llY3IraHRNZkR5UmpUVjhwcFJzTkthZlFSTk1aNDIvSzh5OXRqMU83NFd4NXYxQWFnQ0FSWVVVTC9iRzdrTVJSeUFrZlpZMHFTMENCYUtjbjhZRjcxNnIzZHU5QitZdkNWbWhBelJhWGJVd2Z3NGtGRllDUVdqQWlPcC9HdnEzU3EvdkZiVDN6K2hNZzZqN0lPekY3L0JYa3IxSm5heXRWWUVvK2hjaGtEa1ZObVk2Qm9BT2JwZmFSUUNqRGJnTzNDaUdJQzNqMS9RT3RhNjFwRGk4WHBEQ0grVWtueDNzVXIyRGRkcHV3c294bHFuUjlmMUxWdWJoQzFQSW81dUFIc1M2MmY4VDlDNzA2NVBCbWNzaEpaZkpjVEZockVPRFQ2MWNEQlc3Y0poc21iRVhBbzhYanBaQjVBUEoyUDBtVVF1OGM1N2sybXgvU2gySmVaY3I5WXBNWVBRN0QvQXFla0luOGd2ejg5WlNDNm9LZGx4cUhGQVBUWDY0eEVFOU1Ja0tZU1VObHMvV3VZTGxyVStTbXNISkhGMnZWRnVCYUNoVTJUT2lQUnk0bW41UWlCQWVBWWdFVkhUZUdHd2Z4V2lBTTFoNnFHOEplcU43M21WYjkybG5LVitENm4xUStiek1hZmhDZ2NqMXAyN1pTb3BJN3BVajhrUkxSU0pwb0VmYVpGTDdmeTBNYWtQM1BHbTRNdWxqZGVjZHpsMTZEc3lsMDVTNjJwYkxoR2RXZUVWVHNlYngrR3FsaHdBbHdhK0NTRnZEelhtZk84SmZOTXhPOStIWnJsc25VU2w5VFgrYmpQRUpOQkpNSVpTcE9iNFhXa3ZmV0ZCWThNMlVxdlZHclpxTER3OUthd3hCOFhubmFjVEZOMzZCUUIxWFM3QjliUXNqeEtDSzF2a21UbFlIYUppYmRCU0x6d0dJYnFWaThONUc5cFZVOG03a28xMzZUMS9RZjhibTluU0NSMm1Obldya2s0QmF5VlMwQjE0VG95OU1TcTVVQWFTVytNcCtUZEpsQ0c1ZlBUbG1QZWx1cUVwRU5hRjJRaWZDTkhwb2hxVERPK1N4NHZYTWVVY0FyVG5wUjJzcUs4dlhKVnllbUhDT0FGSWI3MHdZaDNQZk5YY1c4cUxRMUs1MEExTzYzUjVPcEUwaUVPbW9ndVpwQUFVQmgvenpkSURPTnNBWGt1WXlZbjdISTlQeFQyMnE5WjFoam4xTlkyVUMzdFp0NGNONXZ2UlNDcjNBMUkzaWo4ZGZ3Mi9JUVJxaFN6Q0l2NXV6dGlMa1hDdm4rZk9idFROY29yOXA3V2FDeGZnUlNTZDZXVUlER2lLeVZOeTJWbmRrZElFTDNxODhGcmZrSlN0SUFlNHRJSlRSUnNSVHNPYlVGSUwvMmNhL2RGeS9CQzJBWEMzR0xuZVZaSlJGZnZ0Nk1XMGV3Z1ZlYTF6Q2ZHaUYrWmxUeE1pQ2JCVStZc3Q0YmRsTWVsdlc4WWNnWDRUcjhtQStiRzJQZHIzQjE1bWJtbmlRb3pjbWhoc2toa1BCT2t2OXdhSEp4OXpXUUdQQmtReVg2QWlGTVpCbVl1Z1kreU9ZcXA1anZ2c2tPVXpYQ0tCS2NwU0c0MUdIRCtieGxYRDJxY21EdWRsOXNqQlBZa0dFY0QwR0s0NEdSQ2oyUHJ5czliWUhDdnBQY04wVjNSMzVWQXp6NzU2S2ZVakdZMnJYOENzRktvdEt6anJUZkJVQkZ5dERBdzUrTWtuM0lQNEprcnl2ZUZ1QVR5ZmN1NUE2Yzl4TW5iYjlQTHM1OUpRS0YrZVN5NzRwY3pKa2NPS1BVNHlmOEhQaEdnVVc1MTErYVBxZWtnZW1FOWo2dnNrc3ZQR3BDVG5CTzJWdjhESnJXSnQrNnZqNjVrSlhhS2RFODVtYitzU20wcmc1dGtrR1prK1FRWDN0MHZKTm1hRzB4bURhR1JNV2dxaEUzbGczY0xFMVNtNjZMOEJIMUxMZUMzV1pjeXNCd2hDNGRsc044akpGYlZyb1M5VDZtSENRcTBhREd3dTFtQUE2emFxV0pnSHkzak42UFYxeHBLemRaTFY3cHZNQ2JFTTMwQ0U0L3kyQzFBN1ZzVFJ6ZGdDU00rN3Y0L2pJdzFPaVVad2xrMU9vWEY4MUxFVElWL2plLy9mNmptUG5BNGJWVjU5eU9mRnJuYUkwdFFrclNqYi9MUG0zZ3VZN3kxNEt1VE9USnVBZmlPeUplVnplSjJDNUY1STVYRW5BZE9YTFdoM3U0aVFENFBqWVVYYmJjMHduMG5QS2ZtRktFTkdYVW9HMGxKSy8xNThJUTZOWEFUd0EvaG05R0tnSjlrWjZwbGZrRXVZWnhDWW1tdW1DK1NVWXlhd3YzNWxJMjNzOU40QmNpbTRjQTJXYnJQNi82N0dWTGNuZXdFUU9JNklxM2RhNWpnWHphQ3A5bDFNRkI2UHNIWHBZNlM5ZzNpV25CNGZRK0pIaHJvS1RQamdMMWRHWUtKL25WU0xxNWx6QTFiWk1vVVdEZ1dtOXQrVUNEajlNSXZjQVI0N05hMmprbUpVNTVnNDljOFVvSmhxOHV6bUdvZHlIdWFWL1ROMEd1RDNkVU0rNnd4MEpyTnBTNitIUFp5VHNvaDBCYTJielZteWVMbWw0RXA0V1VCNmszTmVjUGtFc2lud1dYdnpobm44YTh0aG40SFRLU0tjTnpuVFBOM0VmeXIzVFdzSm9rZ2x2TnFLNDgxK3ZDTEFZWDZ1VXlGV0FKUTVvKytacUxvOTZPd24yTmZPUGFXNG9BQ3g3ZUs5d3RpS0tEL1AwY210anFnSlZybG5oYTZvVVBYbHdhQUpqZExTRTlqVUtlWDFDNlk2RS9vYnZrTm9iM2pzWU1aaEUwRFQ3dlVtTUVrdGNzVmRjSXFUb3pFUkFud0h2bUlhd1BVbE8vMmpNYk5rZjlPOGhSSjdFbEwxQTg4amVsa1c0SDM1NktQTkREaS8yaC9HRlZGQUEyWFdsWHkzLzN6TWxWUitwaWl5WVVpVWVEVGVHUCsvSFZmZklCaVh0dHphZ2RCa1lSWGNBZ1RPWXMyeFo5Ty9tQnhlWGZmMXREREE5WDJqQnFPbmRET1FEZzJBeld5NHpFUHVQOWhWTTQ0cEJzUnIyTTFuYUJ5UWdGODZCeTN5NjdvakVKTHpjRlY5RzN0WEFKc2VDU0xJLzZSbnpoalBtd2J5b0V2aWhXb3F6MjIraWhBeldsUXdWU2Z4dXN2WE1rajl4MFFHeG1wUTRHZEFINlRzZGtsbW16a3dhT3BIcFRuV0hVMVhSbUxIVG1kdGFUV1B5VUc2L0tSVDRjWXQ1YTI1aHpud05KdzgwYUJIcUl5dXNnai8wYWpOY3k3L3lZY0daUDlLWE1DVDlQMGkwMDAwUjZtSWxLQVpvbG4wVzM4Y3dJZzZ1NVpOT0N1U3FsZGlURlRhbG5JZHFWUU5XNEFvZkFqbnVwelFxRC9kRTJpdmJzalpqZ1R0NnZIUWc3WWZTZFltT3N1THl3SjFPclF2T2doQnJ3UTBRK1QzT2I5NjhtSmtXcjJ1OSs2a3FsTFgwL2ZDLzJZTnhwT0QwSmlkaEpmRUI2ZVV4L3gya2hzNUhvaml3SjBCTkh4OGlUUWZDQVZzc1YrWkd1S3g5eXZBUGJTUFpTbE5NWVFYR3J0Z0pTcUFJcGxaZ0NoR0s2MUFIR0F6WldpdzVWZ2xORXdZOUpUeU1TQUN5Y1g5alg1NlVzQU5nWks3L2VidlhpYVdHV2dWVU1sV0JLcUg0SnlJOE40TjZxUWNiR01LcFZOVmpxN0J4c2oycjZHOUU3QW1kZVkwWVJZK0FCMGk2ekVBQm1OWmRwUUVCNzlPRzR6U0toNFVSUGl4ZXVla0ZCb0dwc0YrQkpXbjd1ems4REowT3cydHJQRDNXL3VHVU90aldsSUx4OGtBc3VqZTVzenRtK1RxQnZHWDl0VzBPZ3FHVGwyMzVXNHNuL3Y4UEU0UXBUQzhPZ1lBOG8rcEMwM3BuUVVOdEFVZmdaRVlkdHExUnFBdHZSVjlXdldHNjdFNUIyVlJMMjdSc2ZFTWEvT0pVaWdwU1RrcmNrRG9USzJYZ0FWUkFtSXlYODRzaWVYSDB2Mnk1U0loUWlUbDVhN0gzclRQZHlBYnFwZGluOG9sbThSa21GS2NnajJzZk1mM3JOcWpSeUlnYWYwNUVHSjgzNExoWEdIWVVTeCt0NGtDdjV0bkZYU2JIcnZ3Z3RNMVRCS1p5czlVamFsSW9yeG41cHRjQlBOU0xqR2l0MEZ0cFd1eXdrdDdDWCtMclQ2ems4bjM4NDBJWjIzTVkxYTFiVkczVWZUaWhyMlljMC96UDdSVVpmSEFzOXU4anhza044LzZEOEl4eUhIT2c1cVJWQjVGbUJhdHJJRGY0NnVadG9FSWxRTGJpWnpZajh6YUplZmpqQnFSdkR3aW9TY1REY2FsUlhRNEhJS1diR21WREU4ZXcwbktSR1Z2MzlweGlQbk94anJBZU5HUU9wZTVLL3p2TEpSVmphNUExanRad0M0citZVUR3Vll2Q3R6endEeUFrYU9PWGtWb2ZGamQ4cW1yQjBrblZHekNoMEJMb3BtQ0RHQTNhS2pyWndtQ0VZYlJTcHIzd1MrV0tJbFc1Ymh1ZE9jTUZqS0laN1RqWU5ZNURFRzBoUWEyQWhnRG43RlRkeEh1YW43amNYdzNYem5lVkxlTTdEcW5VRnIvUURnbWJiU2NiSDRXZ2ppTGFkTXBhSE50V1p5d2h6OC94NDRBdk40blFkdGNaWTJZZk5ldkNCbmQzTDl6T2NiTkZQVW9Zc2Y4YXU3cHBvT0NGMzRNcHc5OEg2aXF3UVpOeXBGYWxPMU5DTC9QTXZCMzdhU1RNSHd4MHFLMTUyZjcyV1VGVjBRaXJrUy9qOU43UG1PSHEwcHdvZG1aUTFGc3o3TDlFUnBRVUlEdFd5VE1zSHQ5a1pNTXVjbXhPK0JURU5hRVdyUWZyMDhiVUF1WXNzWFFWK0M5QnFneC9pT0l2NnI5VFFiV25ac1dhbmRHYXNHS0dvWTNFZVFGNVU1aU9ZT1hDdmhNcFRONHJJNVpjbHVFVUNWcU02anRoUGJ2SGdQNWZEUXRmZHJOSGl4ZUR4RDEwdkVjNmJUZXFKUmxCcDlUdjIwRnJheWNtL2FzZHhHbWlnUGJ3MGljd05VY08vZWo4NFp4Z0xYY2ZoL3JRY3A3L1plWGtjNWhIMUc2K1loWHZVaHcyRjZ1dm1nNzVRSDgzenord2NTUmVGemtub2pzRGZ3VHdEZ2E5ZEgrK3hBRWdpWHpRL1lZQ1dGbVZpODkxZUxkNGd1MlJEbXlFWmZsV2pBWDkxY0d1QnlTT010VVNIa3ZoUC9aVFRhYzY1M05qalR5dy84dzZlelYwamU1M3g3ZEVuZnZrT3dPR3pSOWtuUEFFeGM3ajAxVW1LcWp1dEt5cm1RdEhtSjl0WEZWMXZQWndERkdjZlJHQ0tsUHdmT3pGQllzdk9zOUsxanV2bmU1ZjRMV04vRTBGMkM0RzQvU3k5K0g0eUFtS3pmbUVEdEdEOHlpQTh3K0VIVjVVTENNMlljOHQ0NlQxVXBDNThiK2xFN3EyQnpEUVc4U0ZWQnJzbkNPWEpZR1RjWHNxaSt2ZlN5M0liZW5nUlZwOWliQStsbWl6WnhEU2R4RHlYYjFpSUdaZm1vOGN5MkVwRWMwbHh3d1JVZEFoak96MjhSZ1packdHQ0ZXeXd1Q2JJVlNRUzJVMnhFUGJ1YjZtOHlzc3dPbHR0K2o3cDF6Mjk4M3JyUmU2VndFTGpWMkNrSUkxRCszVU5EZHdpZzkvUXdFZ1FtdmI4UTM5Vmp1MllrbTYrdkdwNXh4TUg3K3MwV0RSZTByMGpGTk04YUExNEx0L053WWtkM1BuNWJNaGRzODBUZ1B3T1o1R0RWUmZ0WDVRM0NkdzB5ZUJ5aFJHT2ZFOEFQL2pKY1BuOS9YM3p4Z2g4eFFjdnFUUktZdDZvSnRzNnVZblo4bTRGa1BMdlJjc3JIaVNPMFlCOWJna2VOSHlZTTUrWE12ejc3bllFYVEyc241NEY2MWhuamNTSGVWOUFDZTl6ZjZGQnR4dTkrVHR0djZrYldNMi9HMmtFRkc5Wkg1dTJzR0JpeTVEOVhPMlUxM3p5SGQvMzY4Uzl0OXd1djRUOUNtN29iSFlYUTF4dUpXTzRYb0Rwc0tEcFBFb0taeFBCamtxU05hUTl4aDVKOEIvUUo3MHJpbFlCSXZKWVZrN0pOTnJJMWtXU3hGakdFTjBvTmhQcTd6R0JzWUxEUThZOGU3MTNGcEhXNUhSZ1d4bXU5U0ZoblIyZ2JOYnNJQVpFRkN5dEQrNjhzQmlGVVo0WVVCVGRtQU1VRDNaQUZQQWJacERobmpNS3puUlZnWXlSK29yT2VqYXo2L1A5TWZkYjBmd1BnSHc3Y3VORHNSNVI4Zjg4OFZ0N3pQTDhybjY0eGZ0cnA3b3RTaXk1Q1pxSE8wSHpGUGNDdENiRHF3SW1SRzRibnJNVytqTzNoOWhyakdGTnJwMnllbjFyQjVDcEF1NjM5UERqUnpyMHNOc2p4Ny9OUmpJbTNlZ2ZvOUdlOUFmYXpVMmNQbTZITkpYVTJoWXJUOG0rYWJ2SWdtcjBDR1ZUb25INSt6dEFxR0ZIZjRoNUE1d2t5NDVrNmF4MWRoU2Y4emc3RVpSWUdKdnR3MEt6NmxqQUJ3NFdCTUxIcWhtNGcveVVRVHJoU1grRXVPeW5WNGVMaVJBRVkxUDl2RUdBbjcrdUl5TExwVXBTTlpXWTcraHNCUGJKR2RqZFZKMzRLZDJmaGFjQWlhbnVPVWlXY2pXN3FNRWpwK2xvTW9Yb0IyMkY5RXcweVBoSlBDS0RtNUtSMUcrV0ViZngzMVM1S2Z5dVBPRHhZSWNrQmM4a01CUHU5T2k3Mm9JZVBDOUI2NUMxMFVnR2t5dkJyYU1oUFpCQkxRMTlRNlNvYm9Ba08vUUU0a2NlelNhakFUNWZLUUlYSW5OWmoydnpDVTg4Y3F6TUY3MWl2L3RwS0VCN0hyOUVLb2ZmNWJQM2pmVDN1cktKMk0wQVY1TktGQjVEN2h3dy9HWU15OG9xR1UzVStFZHk4Z0hoNWp5VGJIZm1qdmt2dEdvWXpDMXUxVTEwZW13VGZocUVDYzZsaFZoL1FISTFhMytCK2dnd1pMTnBFMEZvWFV3S0ZxdGVCQ2pRZ1ptVVBwOWw2Yyt3a2hnSHVka2c5L3hPc0gxb3Q3SHdCUmY3RnpqWlExLzZYWW9EdmxRV0JtRnRTZjhreUViYkJRMk1VQmNMY1ozYWlNclJoakg3R2NTR0w1VlBmbGdWekx3OGNHbDZYRzdIaUh1NWI2WGxnMS92YkQzdEFPeGV1S3BLb1BZbW9MaTRmRUlmYWFOMGJBc3QvMVkyYlR4NmJGdmJkZjFnYlBSSFBSa1pON0RheDFhUXRSRUR6UC8xSjZhYWhJVnVHMFRZbmpjRDRzWVIvMjlKcThwbW84Z1F2YkdKWGo5L2RLZ29UR3RNWDY2QnRnbDJabmVRbTIxWTcvVm1zdC93RGl4OFlLdTROT25UZDIvWG9yUmFyUit2NXp2M0VpVTZTNFZYZDN6VlBiVEM4MDNwMW9MaTlFUmRKZkQzdDVlbTV2WVBUVWIzUXJocEdTQk4ycEp3Qi9Tem9aQWU1WjhtdUZwK0N6U0grVll1Q0R6bXZyK2wyUlBueHFRNnJtMTczdEtvOTVNb24xcmcyZUNJY0o2S0g1ODhjRzF1RWhDRGdLSmdRQml0WnFtd0Z5NzZNY1lyOUtleE1xTG1Nd2k0L0w3aHRaTWpXOUlMUDZreXVKN2hwdlZBK3RldTNUUUhtTEFFUTV2a3hWSDI5eVJabTBlaURwUjdjRFl5ZnJ0UFIvTFpqbWp3UGUyR0ZnbEREOUxTUUcwaGx0QVM5c0dGSlB3OW5DSStXRmJEYjlROEFuNnR3TDVGU1k0SFRuRWtWVnNCaHV0MlcxOXZvMFdjM2NNTHo2TXJWTjVaK2hKR0o1N1lqNDVBSUoxdWxHaHMybHJEN2d2SEpsYWZNZVdzN3ZCdStGVm5zWEZ6K1NHcDRYYjFlbmJBNndRZjNha0dDVVJCcDhSV1RSekUzZ3Z6TmV2dnVxTnBxWmVIbCtCeEk5Z0tiSUlJODRNMW9vOHF1YnlhWEJSQVdGY2xJeE9kNkNaVnQxVnA4WktCUWZ3OTR1T1IxT0lsNTBKZmFYYStNN1Q3c2I3YkVWWDdrYnA0clV2OGhYcGhnY1FkakZqUGVLRGN4OE9MVUtQbUN5QU0zZnBKR2ZqUEtzNno3a3oxM2hrOGdvdGVNUjZuL0NtL1FWNFpURmR4RGhYL2cyK2JJQ0NsaHNMRTJrdDc5ZmtGUDFJTzVha0M1ZnBwaUVoQkVDaEZJeEJmaW9EeDh6VlpLSWpHWjlhY3R0bm44YzNSOXpaelJNdzl6WnJpWThaUXZTWXF1dFJZSzMyTThHSHlnUllyR0I3U3NING1PNVVzeExndWRURGlDY3ArT20vZUQ5WnFwVW41K0xPTDlYUDI3RnJieE11VndoTlZzSDVTL1pCUUhPZkhweEd0eE43dDdWOTJwNDZsQVVIQTN4MWN3bGN1MkpnMFI0ZWVKUXgyOXdTNHpjS2UrL3oxV3I3L2MySHdZdld0dE4zVk5pbFhyQWVyWHh1QXdzQy9zeXRLOXFBbjRySE5GUVVzbkRnOFRudUVKaUl1eU45ZDcrcEV0cHFXTWlKbHhHa1Y2RTkxSkpiOTlINWF0Tno3Z0pZKzFHMk1nT0JEUUhTK2VrRlU4OFpIM0dkRm1ncy9BL1o5NUdSTE02SFcxYzl1ZjNGTmZmeFRaNkJhOGZPMEhCRkpuMjdaOGFGdFlMYUZZVEsxSUJMekh3VHdDYjlaaG1pZ0VTQ3M1bzBjQXJBVHRXNUNoV2RtSm85UlJPTmx5TmlBRncyZDVaNWpSclFRVzk2MWh6cmovZllQZjhUbThOYVorVWtsd3k4a2Rzem5mcXVZZFNSeW9ueE5aR2M0cVZGdndWNElKOXdLN3A5Nm5tWUM0UXdrbzlpdVRETUhzZ3ZKS3VaMnkyUjBOdFFmamJKWVB4TytkeGFDMzRSVUk1eW8yS1R6VGUxMWtEaytxN08zMXJxVnRiaERRaFVPbTBkb0hPUEFKM0hIQVVDWFpFQ1laMURwVE9mN3dESWlqRWVRTW45R2FTZjRWN3FjSVVkM2xJR3lWU2FpdUx3WGh0M0VOT1ZXd2tXRm9XWnd3NkxIU3IxaTJPdE9jUklPemN4QUg3R2VsWmY4RG9FcGo3OGtDOEZCOHhnL2oyU3B1SjJzNENTcDgzZFBKenNkNXVsMW1yOUZHRjhFZm9DWUVscVJ1anRGSWJCb1Z4MTV6Q3ptc2p4ODVKSlFQYW4vUkcwYzZKWVdzcVlsVGIwNTZOYjJid2hwRU83UWFEb1J6UVBTYVZ0QXlKVG1LaGphN05mTmlSdURVemROTnJQWGc3ejU5UVlXY0JkbU9XcElWSGdWM0xpbCtGSUtiMTdmaGhERkczclBUKzR5SVlkNWhMK0tDd2R2QnhNRHBKdGc5K1JtK1dxejBNeEFYaG4xeXlJcFdjb0l4YXZRZHNmbVJycXNZTW82MHpDS2dJZW9oQ1dZMmp1eUJUN0NjUmpVa3kvR1k0Vy82RWhsWkQxVjZRemtqQVRRMElZZzdFc3BoS3Y4TVBuY0pBK0hTbDNmaE1MQlpMRWFoOVBrK0NCU0tzQlZ1am96M3lrZlpoN0YwS1JxaW8ySVNUN3I5eWdOSjZjZjFhb1F2WWV0SnhPeDlLZzBLRWdRamFEVEhrcWZGRE9XQW5YdjFsMk5XcWIzb1BzZnRqZkZneVdFdnZFS251U2QzRU9XZUhaQjJTNzhlRWFYOEZpalZON2tjSzhQYXpTT0w4Y0Ixb0g2ekpXYmhXYnRhRFdEaVpYYUxwV2lGcWVvWmJ2TzlWdWdvcy9XZ0JKQnA5c3F5c1J4S0E5R1JuNlVQWUZFM0VJK05meTJ0QkFHck8zSWVqaytrWjRtYU9FY3RtUzNFM2syVTIxNkxXbVh4ZFd2Qks1ajNYazFvSlRzZnlpcGlhbWUxdFR0c0hDSXpOeE9kZmJ1bXBKck13MXlYZUJPQzFDVCtiemFOZlR2QURRZnN6ZkhrTmdzRDF0S1BpUzRvalJJNUNBS1RvNmR1N0liMENSSEdkRisyRXF3djgyZGtLTnF2eFFhR0tYUjMwOERIV0txenZrdFFzblZvS1pxblUzTmR0U05XNUZJYmNvYnpPVnlqSlBZOXZudnFhM01XZWRtNmdNS0x6eGp4REpPbmd0WGVRRHoyekovOUZUa3ZoNlkvbTJZcVUzMENWMllONW02SlVKeTNlR21MMUI4MFovY2N2NWlIZUxWeEVybEFuWDBxa3g2S1hpaFVNRHoyc2hNcWNLQTZvVDFyOWxGbjVoeDE1TUcrYmtyYnN0dzJyeGdrbVB2cEtKbmFydHRObGVKaDhWVjYydjVTWWNpbE1qeXZzSVhITGFZQU5jU2p5NlU0bmlEbDRDZ2hNMitWSmt5YWEvRFZTVDdVNGVweHV0ZlFNY1RsUDBYR1JIVjdYYklMSm96ck5MRDFLeGh0WWpEbzJSajNiVDZqdUVGNnJySmxyRmpqMmhsMDh5SEdCcmdwOVl1eldLbGZ2WG9JNGJITHZhQmJYdkV1QU1wMWdRUjYyOE9hN0ErSGxxNEV4dG9MMTB5L3NIRTR4Vlh0amUwRkhOZDhlemx5UDJqVXhxQWJHOVBlR3NOMnE1YnNTek84Tk4wSkdJU0RsblhGaVQzWDVLR09GMUZiaW9hZVo3emh2eC93TjZCYWR6aWgvcEZ0NXkrYXVoOENvWUZodzBhajU0VnltQUJnS2dXNzVHYVp3cjZHWTdjR05SdEhwSmMrZDNTRXluUE5yZ2RpTjRnVWxjQktvT2xlZkFjalpBYkNlZmhTUm5UU2lZSlMxMVdpaG1rcmlOM3dTNEw3bDJ2MlpyVUJzVmhyOWYwNUx5V0h5WVA0ZUlMK0VqNkJ2N2haQWtnS3hrdUlMZGdvVjR1U2ZNd1l6ekxmT0trS1VJWUZZNS9hM2x3ejQzczM2S09NeTlFRmN5WjlzUmlHU1hHelJMK002VWdUMWIwWFRweU5VZ1NRVWlXR04wN2FRSnZPZStGVjNSdnQ2dkpzU3NZOGlWUXhnQVJNN0NZbkF6V0ZGclRTaGtSOW5ESU8vSFZheC9idms1OUExRU1pR2liTi9FNWRnc1BnVllRQlhOeGlCNlZ4ZWppcjl4R2lZNXRUZ0N3UG9vTTAzWUpRSmlKRnZEKzVHNko0d1VtNjcxeXRRSGVYaHg1T1dzR1pZOTB0ZkhEdjI4UFJzeUJheWE2dUFHR1prQzFYZEJGWkJ0Zm85T2tCY0tEbDJ1cnNZZWlURXNIeXIzNWlJM3V2ZkRDUWEyZ1J1bTVQTEZqTEZ5K3BPYllhVW9qY2lRYzBFZVNldmNoTndjRlNkWTJWNFZNU0RsK056Zk1td1Nic05HSjZhSnNiYVBPbnpoMkxRQU9VRzhuTjN0L202SWNPS2FsUjdRRUdxZGIvYS81UXVQME9mWXBTeER6NE5GU2FHY0dJaTVTRUtuMFZLdXBCMVdRMlBMdDBVbVgyZHlYelZBQlRwUENGRjduOFdrMzArc3BiaEZqWFBrZlFSZm5zaXBkVFpPdStiQmYwdEZXVExLTENyUStjM0VQUVNPT1Q5d2ZNUkd1clJmbVNtZWxXaWxhS2YvWEtOeEFpVFRVbHhERGpNcFVaWVlkbFhPNTc5V2NTZjN6RGlFQW5OOUgrb3JHTGxJSW1DdXlja0ZaUkNyNW8xTW5OMFNuc0xqcEhKQnluU0lwcGk1dUJZRmZMN1JEWElJQUN3c25Tbm5pYTQ3d2tMZ1puaHdJS29IOEpFTzVZN0V4bDNOdSszcDdNYVJ6aUY2SWl6cnh4R29BVVVFb0NQbmNsVTI3K0MwQmRCWHhRd2VjYSthQytXcFVSMmhGbFNqNCtUdGQwSkJnU0E1K0FnSUNBZ0lDQTRuenNiNndBa29xcjJMSktnVTlyVForaWhoQ3ZQYnUxbWFNSTZlYk1GR0dtVUFSS0Vnek0reHNqZzN2MTRyREZVL2tyT2RZQTRsajdJeHdHNkRFQ05yQmxkUFcvS2ZEL0tGTU0vakRIUUovSTFreDh1NXJTSkErMG1nSmszWU9IeUVUYnhKeHdLVzI1aVhlb0Nja1h3eVRWeHUyOE9SRWltUkFhNGFBZHBUOVkzMi9UQVgyL1R6YStxeWZzMit2Ny91VFAyZEVIM2UwdS9mODIxLzM5UGw5dnEzL3Y5ck9mVlJmUDhQcDhQNGZXaWI5dHJYMmZaby92KzNoL2IwUWY4UHNyZjMvY1c3OXZVbC9EMW83N1BjZS9iVFBEK3o2Smo5djBxbS9WWFA3UHNSUDJmWTIvcTNoLzIvWEMvcyt3UzM2ZlJiKzMwNzc2ZnNGL3FvYlhQZ2sxcnM5bG5hTmZ3am1iU29MOWNQU3NxOWtHRjBzaU10aEREdlpZb2x5MDFXd2JZVDZkRnB4U1JMMUJVdTVGdVBLRUZoR0lkaCtrTFJBUmxXMkRjTGh1M1Axd01yZ00wWk1XaGxuYWw1bWFjSE5ZWFNld1p4cUYydjQ0NzFyVXZ1OU1nbm5tWUF3bVNCcmszOENIaTB1bU02ajVHaGRrSG94eCtZMHFFT1AyL052SGdFOXVuSGFYazRjd2ZJT2UranQ2aEpsWUZ0anRwcDcyYzczNzdLNHU5Yk5RcE90aGRsVmhhVXpNQnBTYWFuQng0aFlOZ1k4SWd5NEhETm1mbzhNeXRkZS9lb25NUnA3RytkYjFYaFh6OTllU3pIcE00aWVXRzhUQ0dLWmZ0eVA0eG0rblZ6MVhkSUFvUURPYWNpb2JzR2NVTlpPMDZPZGtDWGpab09Zd2ZSY2Fxb0k0MnowTGlyVFhSODlQQjRpQlBjQkFmVTUzTDE4bkFsSkRjT2VveXRtZkRCaGVkWlcvc3pqaHNkTnNSbmNuWHJZZmlQOHN4MVRTMnZVZFFFQzFKYTY2b2NObGNwUXZDRnV1aHRXYWJLSVJoUXRVL2kyOEJUZlMyVUViSEhxWFVKWWRDdTQ3TUZIbDEvbnljUXF6Ukc2U0c5V250bm1yWlZpOUg3S1JrTVdTdlpPdTFXM1M4MDU4VEJKT1F3Z2lyZk9CVzFaekQ4dkZKQy92QzdUVVpTc3gyMzlwek9xWDF3eDQ2RGY0YmNvS0h6SnJSMStDdG0xZ0wzNEpZN0VhVTJMd29IR1UxdDhNNC9ubkJnbk04Zmg3U1Fldm1rejhVT290Vi83NXZ1MGpqWFNiUkdDSy9lMnRMY2t1LzB6MWZkelhjc0R0N2htSU9IZ3JnTlMyczZudGtKM1RucHBvbVIxaG42R0lSR2FVQnc5eHA5aFBTU3pTbEFKM09GOUhMd3Ixc0RicU5OdGh3OEgrUDhNWnhXd1VwNWZzdHpxZUpQNlZuMTQvSWt6bTBFUzZjZFdJMVRQY3kya1l0U0NxdCtoZlF4UXRGU0JEeTJaeHdQTVVjSTBTMi9LNUZlVWd6Wnh5NEVqeFU0bjdyUEtBZVhFSTM2Y3dHOGFqOG9iODByMTBhb3F3SmtuOW92b0JLd011dlZOK0tmOWh3Smx4VDNjMThqVDhCU0YrcGxJWkhXbVdlUGpQNkpMdjdvRmtqbTJZU2xlSjh6T0pvVTNNSTNEWWhXTmxWaFFUYVc4S1NwVE1WMmdEVmJheUZENVF0Ri91ZWpxbU1HbHZKZ1p5U1Qzc1pLdjJ4ZXprRDdzUDQxakpTcHNuL3IvL2Uzd2w0bnBRTzV5Q3Jsa1lsNTFQcDlDbWE5S21sdU40OWdMeUJ6bGpYTm5iRjIzTWVRM0FaVzRPdm5QbERtNlBoOU5pamUvYVFPRnNUZDlibUZpWm1ERDBKaWVGN3pFbUZERjJqVHkyeWMyRCs4NVhDMksyZlVMems1OS8xRjUwTTVsMmhLR04zWEkra2g0Q2NDSGFTTGdqayt4QXVzNU5PcERTNEVpK0NKUzhzTURWc0Z2WC9Eb0RkK1BkaG1IeEU4Y1RQdmNQUU44QnZ4ZFFnU2NBYWtET1ZzcHM5QTdDbXhJQWRSUEc3MU9LWUhBUHZpTG9Hd3BPN2dSTkNPS0dQZ0hpbHIxaVNpWTBlS25HZHBoUldhdjNyejViNXV2aXEwSlVJdVdqc1pldDByWldtTEh1TVp6bDJycTk5VzlXVTNLRGRlek5ycnh4MTJUeWQrYlUrRXdsbjVCVjdEK3h4NVdnRWwyMTV2eWsxTDVLSEh3YzVBZklnd2FFVzNrM3JOaXhqNWtXUk5XU2I1azVqeE54NkNBdlZvMmF1b3BhK1cyU3BoTHVhMzNOaDBLZERNR1RMNkZoaGFVUnZsWHhQcTV2UkF6MURJUUNJQ2twWkZQWXQzTUEwR3RMZURqRUkxenAxZXk2bnIyQXVxZkFzbkVleVVFK0dkSHFLM29vSUJQUHJESzVmak5ueHpsc1VQdkQxS3h0ZlhBd1A4VUdtWVM0WUk4MW9BVE9kbWx6TTh0T0pzejhOYUhOMi90MGI2aFhEVDhVK0VQdEQrSWVqdCthS3RXSVNTeVBxdEN1OXJlQTlYMjRvR0laZ0pGajh1cUxlQzBHQ1Z2ZW5HTHVKMHNjQ2pwRUJkekxHTHJLb0FmZ1pRbm1Zb2UvVjBVZjZNM09QUTlNd0xGcWZzMVR2Q010d2psbHQ0OFp3WnRrSmFrcjRqU0duMUdoaGJzVmVCenMzc1dvcldrcytWUndCS0JFeVFvM21jcG5zNzF4L2ZLcXdXQjBjS0ptL2wxck1jcFZnMHZ2NXJEOU5xbjM0eXJsZ3VyZ295KzZqL0VJamQyazdoQUhDckd1TEVrV1hlOVVIVWNiYmZ6MlZnLzdJMGRKMWFOZkpqNGJPc0Z2Mis4VmQ4Nml1WlIrQ1RmMlpyTXN3U1RURS9SZ2pXQ28vdFlscFdJL1VVaERlcUtCVXFpeGt3YTB4Qy9lMVpOL3B4Z0NwYlVpRTNQdDJLTXpwd3ZTcG9RMEdKaVRoYTBlS083UldGVDlzSkxWYWZMWGZTbUdyTG05R01KV1JWR2pNRDNaY2VPRGtDdDZDM043VW9oODBVRS9sU0lUUk91ck4rbGwyWDd2VWhMaHZSSUNIb1Bmbko2Zk5DNDJOV3lYbTVadk45cUh0S1pVT0Z3RzBNOTVWbDdORlV0VkpDWGxmSHZpd1NGNkFlSXZKaEtoRnJzUzJYbXMyTGVGN2Nya1hUZ05qbVpxdU9lNE00STAydnI5bG12Q1NxTlE1Nmc0YStEOEhaK0xwcStKdUpOYkRTSlNEWjhQNENrdzRaRFpQU1NNdExWdG5qdWxtOGRCMzVNZ1kvSUVnOXluS0l6aWFCL2xBeXhkZDh5cWc2TE9uOUxISnVNYUkzb3MvMWpuWFdldmtOQlR4UTJTNUtLUFh3VkdyU3Y4dDFFTmREUnp4c0ppRjB0aklhMHlXZEtMSFhOWTUwUFUyOFRLd3RNelhNK1lTYWJJYlpMTlBlSVlRV1dMOUZ3QjE1aFBBZkg2dVZjRWk4U3M3dzJsUE5rMFd3Z3A4M3RjSWtTZitJZGl3VEN2ME1zR1hUN0pNRzFYMVFiaGN5Z2FDZlhjQ3pyTWQ5TStDU212MzRhY285Z3FaY3VRdEhORVdzVkZjK09vTmVFZWdBYklEaVA3NEVWL05Cbi9mWmRTUHZ0MnA2SXVoSXR1dk9aVk9PUmVRZUJuSmJTYUVCbGJOK3oxUTJjQXMzWUEwN3d5M0NOdStiNVhCQktUMGIvWk9LL0VQQ2kwcUZHdHNkMzRXM3IwTnZRc2lyaFRLbVlRSDVYbVQ2NUpVZzlWWkt0R29HN1BNTW5iL3VZMzBucW9ZUUd3TVZQY0FlN0k0WWdOdHVSQUdSR01uUW9qWTBjaXd3Um5EYXdhUWZiUGF6SlFHWitTU2dpMGx2WElGbkZsc0kyQ1dIWVlxZUV0bHdCeWxCME1iREl4K0w0MUY5bmkrMFJXRmNnYUpaUUMvVzF1ak80UU1teWNXQU5rcXFNSWw3M2lXcE1yL29EdjkxYUNxTmtkeUo3S3B3bjlXWmxQT3lBZlZkdk9NdTVHVzFDS2kwdUVNWE11ZTd0QlJhaUpFdXpTQWprWkt3WGVQVlFXWnpwTU91SzVIaG5VaUc2enpzVURyS3ZnZGdJNTBjZ3R2UW5aTkpwYzNuQnlXTlRIb1dyY2YwNThpbUJrcGpwL3A5YUtaUVYvSFNqRkJSV3k5UjJZVkdLR1NUblNqUXFwUGZkWGFzU2RRc29SeEN5dWc2L0F6eGhCSjJRVzR0Nk4yTG9RbncxaENLWVg0M09wRUJ2cmpuU1NLNW1LTHRFdDZoWTgvUEpWK1EvMkU4dzE2NTRrU0FldFFnMms0VnJrUjYzcVBCaTNIK3I4aGxuUTY5ZFRFM1BQc2xwU2IrVGIwRHlGVXY5T1FFWDI5ZUI2NEhOa0NPQVk3SFVJVUVFZVF4ZjV1eWZvVlg3cEs0SUtDSTdXSCtibGh3TVQ0TVYvckFCa2VUWUtzNUErS1k2SnRUdmkyUDZkTHY3TEJadTVqcWlVMjU3SWhEVGU1L3hSZ0dsV3JMSS9CbEhmUStIa0dtSE5PU0pzWXVqbUJEZjdTeGI5UW1PeHlYNGxjbzNqbVpZbXJMZDFSMDdyQkxIZ2R2VUd4Z0g0VmdiTDg3R0dMUXZNa1U5K0lRUTdZYVFJd3J4V1FneHh3SXRDTlFXc29TejNmdmFPM0hiNWx2NnhNZnRSOW43VDJSWTVnNEFPYmp0ZmRiWnV5aVU3MUJJalBvWVFNcVI5VndzOHFYSzdUOXhjZHhZRGdvaFB2dGs5c0VTeUc0Y0RiaEdsZ0p5TVNjTU1seE1ZekVIdll0L3RhZ2dWVGcxY2NkUDJBUHpwZ1Q3KysvVDBhYk0xb0lwSERIQWlXSzdqYy9YWFlIajhVL3J2VEE4MExSZDJITlczSjdPUld6NzZYZFpsZk9DcmlaQ0tSb0JsallpbGtVYVU5K3FtYnRuaDNxQVFUaWtTSFBycWpXRmVuRnpCVGlwMTZrd0pqeUdCQVJmcys3eXdlL2w5MWFHaTNZdVdVZWNaSTNpN1pLNzJzSmdlNWNLbDNvYW4yZU1LVGhXUC96d291clNwWGc0Uzl4L3VNQ1F0Wm1EdGJyb0JYamVaUkFxWEh6dmJUOVdMMU51VDhPVTF4blJrZTFvZ0kyMkVTNFVVbnhQUUtIcEZtR2JnVnNwUi9JQVNna282REIrTU5oQmNTYXVvWDU2VVBsM0plRFBjVFU2UlB1aW01ejhBdFNKMEpQRm5YK0hxUDlnYjBkbzFMSlcrR1p2RXBDS3VuZnkvbDJpZDF3a1c2YU8vMzdvRlJPcGw4ZGphNk9IeVB4WnEwdmpWNVQ4NGVBcVlqL3ZpeERqSnN1RDV0TU14bFo3TTNFZnNucjNJZkxuemxzTFdxWFV1MWJyMlVqTWprNFpJQWFvN2gvQmY1ZTZrb2hkME1pdU55c08zZW9yKzhqL2hVbi9DYUFUTHJnK2xhREdrMXFwRXhibFFERlRCZW90TUtOcVd5RFZlQVNVUFlOSEdycjE5WENOYWdpMDg0WW1IMVVqQ3huSEpjb1U3TlhGYTduNmJtVDVzVFZERjhHZ21pLzhzVno2anNBQTdvbGpidDJGY3BSSW1jREtmeTNMWnlYMVh3cXVxdjliNHJUUkE1Mm45cWVCNDdSeFoxWURiRC9abEdCaldFUElqSVBTbkRDL0F0SElaMnRXM0c2TDNwWUZlcVNTTmk1Z3FrSS9qZDNTTGM0ZW9nZ3ROMWRBT1pmeEhOb2tWMHRmR3ZDQWdTVXdMVzZIaVpxdW5nVTFwOExZTFpDdGpPaVRkZ09LK2VBK1FYZk43aXJsUm44Y1k3VTQzQnNCYTlQMVJPOTBVb2lBUk1zWTRic20xK3BFTjRrOGF5VEZicEFUMzBtaDl3YVFYNmdEV3dsU1JSdXdXTUFielJONXQvWklaNDNaRlJNUllJcWRGRUxuWUpSWEtWb0dhQ0wwNnRrQmpzNGNubE5hSVZFcXF4andRQ1dVUUw5aW01NUYreEx0U1Rld2VkdGxSKzhVd1ZzYTRCTGg3ZEhVczJtc3R2a0Y1Q0UrbUVhTkpRYTNtZmJNejJmTlhGZXBMeTIzN2hpWTRCaUtRNDR0MWhxbzh6UUwxZlpRZ21tcGNLUWF1MTM3cDhScFdkVEY4aWlCL2czYU5IcmdMc2FDYXVOMGRZT01lRHdNOERHeGNpUUl0VGtsSVZwYkRkWG1EZWdpVElGQWZVODVNT2h0RHdLV2JuSGR2NWgvQWNOQy9ZZUVvd3NPdllteXNYU2R2SW1yREtsank1L0tSalMxMWY4OS9aVDFibUFYdUgxendmUlJxNHJJOFNPSTBlUEZqQWs5L2VDdC94WHZrZTRvVGkwcnFkUll0MzhmbTdzeXdrbEdmdWErMlp6c0ptTHhsREs5b3RwRU9OcWNZS1dxYVAydEZMTnVHN3hEUVUvYzFIbUZCZTBIQmZ2WTFsTXVDa3pBODNhMUljbS9veGMxWTd0emhiRTltS3lzZXg0dFUrV1ZkMDlnWmkyRlVnRVUxSWJzN1FzVWR5ZXd6REVvcUpDNjU3b0dna0JiNzJLWE1IU1hrYWVXRkZ3cTRZVWJ4WVVDMjlSbFZ1dXNXeTZoL24rTVo1anFqOThaWEsrdmF3SExHM25Oa3ZzdlFQRHRkUzhuTkRsNDBrSWNKOUNaZGcrODJzU0FOWmsvSUdXaW42c3FBNHhsRXRBYmFsQkFYc01xN2tEdDA2ekppY1QvSFNoNGZhUWtRTEJLY1JJNnVJVUFGbDA1SGpLNDVwSlk1aUxXREVUd0FLZzlnckNsVnkxMXQ4QTgycEwyczRKZDVjYmdMeHdvMTV0MWpOeUM4UXJFb0NYWnZRYVZ0cDVxaUhmNzRsZkhxaXltdjJ3QjRkbUFJRXJPaGtxQzh2VzRVSmRIUjAzQ1FQSUphSjAzSzZ3L25kTW8xQzZsSGZabmJJaHNXei9tVUVWOFpKNGl0VVc3dG1kLzRlWjlYQXFzUCsrQTRHQjUwdHJSM2FtZ0FGVFNpN2F4UWJDM3g2RWpwdzlQTlB1K2dOQ2Evajl2S1U1SEt2NStRMVdwWHQ1dFFHK0dSNmg1cVFpL1JQNGY4QnpuYlAxSDdNZHBGTVI2Q3BGTUN6U3JoMDFPQm9ra3krS1BkNXlKZ1E2RnFxUEV4aWtxbVlIaDFONVpueWpmZE81Uk92ZWZnTmwweXh5eTljZmI1UDV1LzBBdDFzbTllQzNHeUJuY1JnNm41cVVtb3R5eFlseld1UTN6cGljMHZEOFpqa0lTeFN0ZVNaemFMZlc5SFFKdjZsbm9oVnpVV0Uvd1NzWlE0eS9qZ1NQM0dyQTBsTnJqRWpFYUNoTzEwTno5TUcyQzhsL0Y0UDhuUnlJaUVremZZVEVnMk5zZXBqaVQxU0J6SlJFNXRIeXlzOXlqUitDUiszenNVcjlueVhLdXQ2Y1VKaytzYTJCMmwzcUpWVkUwWmtUb0VjZ0pjWGhBcTlvSG1ramczQmc0VTlMaWRDZjBUMHVVcTBPNFgzdWJwYzR5MzZSWlVLOEZEd0tMeUhudElwL2lJai9sWUZWZk9wZXdmTDZRaFlVdnhiYnZTaTFQc1VVbm9FcVNEcThlR1BJUE9QTUhQSnJoMEJKRHVDMWlVVWZlbDdzcDNpZmxFbVFmek1qNmYxTitTSWhuU00rZUJ5NFJGaU1KWW9SMkJZM0NPR2ZlZk42MmlkTnFtOTB3MXlOSUY4aERxRk1GUmVvMUJYdk9BYVdwd2FzdUdEcWJ2NllpTzRrTnpteGJlWm5kZDlEOURReW5sZFRQQWFLTFc5VDFrcHBsOE1PMWNPcGNlZ3RaWlpjM0pvcFA0dURSU1hNb2pQbmpqempWOFdtVUFmeWtCTFdJeEl3ZkUxOHYrOTlwK0E4cGxOdzFVamQ3Tnh5MHhCK0RHRGkvYm5nQmtzVmJGbEd1QUcvaCtHNVZNYkhVSkIwY0F0TnBUT2JRSHZKY2VOczIxTmFMZ1FsbU10K2NEQVJSb2YreXVOTzU0NS84bkpFQlRrczR5T3J0TXhoeEdlYk54R01VK2FlN2NIZXZ2dkRYT21Pd2pVKzBXWlZqQ0hPUzNFM0hjYk5yQmhva2hNU1NxSWhiU0lFaTFWRnJVUWVJS3JvQ1daeHZmaU43T2xCNVJueTgwRCswSnVxa1liQ2pWeEpuS3plVXFGalNuWWRmVXVaU1o0YjFsVDBOamFwWGE1Y3dIZkZXZlhQbUk5WWNBMUZhcDRLQUZUOExyaGt1MUg1YnM3V3ZGdXlaVFpSSUNyUzJNRHp0bnN2eHNXNm9sa0REUVA1ei9GUGtNTlN3WXlTN0g2NVdrMStsWWVJd2xSMjdtZk5zQThyS3oyMm5iUkJXQWNWc3p1UkJOWlo1Tk91RnEvWGNuYVdJbmdJS1VGdW1QbXJsUEJFSHNWODUzRlBOKzU3cFpMdFJ0VW5DMU1RUDg4QWtidlAwUHNYQ0xxd1FxRzFsZ2oxK0hJSlpKdk5CaDU3RmhYbGNXVmgwMTNibmkvamtmZFFSWTlFZEo0YkRxVzk0WXlQcTM3emdCb1F2ZGVYSmVvWklIckZyTWxUYWxpV01EbGowTWVGeDJHRzgxM3ZJU1JHRytXbi9nY003NHRXMXk5NjNaK28zOVZ6Uzh6R1dvWXpjbjRLdXNEa1B5bXJ0Szd5SkQwUUEzNkNuZHArcGZtMmM3b3Bmbzg1clZ0bHp6NWN3LzNDSjBIbi9GUGE3enNxbU5MMWF4cEVZb1RHU3pCYU8rYU9aSVc0Zi9EanhjN0ZZd2VLTW41V21teUc3dDg1VTNSQjc1Z2g2SnM3WGs4aC84SkdtY0Z6eHNPRHRNNG50dHEzMEpZTE1zbHFjZEpzaVBQRytRVHRCbEJqTVVoeW9Gb1BQUVBkNHpuUUR0VXhISE9oSmFFNCtUODN3TU8xTUdzaGxqL2oxNHpiT3ZhRlJ4VWN2NWZBZnhVL2dKeFVySkRtVzQ4Q2pNaVNKQkw0QmU3YnBtMnVZU3JEME04d01rdXhTY3NPWmNVZDR0TXBnUFRyTTJaNlFoNytETmE4eDgvalVuYmwydDIvQXl5WmxSeGx4NmI4SlJjSnRId2RORjNNV2JBTDBnZmkxL3E1L04wUVpJZ2wwYkRuSmYwckE3NUNUNGc5UlBUbCsxYnZtSzVTdEE3dFpDRHQ5ZUszQ3hXS0VBSzVWQlBuOWdMckMxeTNheG0yZVNRQlRjYTYxUUZHemg4V1hnQmxUOEQrNlBhVjcwbUZjZithb0xpbW12TXNFUnpjR2U5d2hYbEhyUXB6NUhhOXJ4UUtNOVR0bUpGZWJTNlNzQnRaSzBvcFQ2WlhkT0gyZ2pjQ1hjSHNnZ2w5c3Z4bFhUR1ZuWGdQdGZKK1RDVnpaRFZUbVkwUzYvZ2lYQVBGaktjSjZzY3FlKzM1ZjJ3dXdUQnQ2c2JjSzVSb1hRV3Y0NU5qRDBibXdtcDVhS3lXMVAybmdpNy9wY3pXREM1UDJQNWtwNVZnbFlSMklGekJINXpSajVsY0x5K0JPNC9YTkJ6Vk85ZmVMTittb2lXY1M0QlNzODZDS3BqQTFCVnMwYXNkOUNleE5zdE0yWVFGREt5c1FITmY2Ry8wN0tyY1Y4MU5NQXdqVGRSNFhhOFNFWVdBdXRHM09wSkhzMmhqMUpYTFV5OE5vRlByTUI2UFJMY2FuWitZRUZsTUhhYVZUMHl2R1FYamVxQUVIMUV2RmsvSU11WGp0U1BuQ2g5MW4zQ2tBQndHSzZib2UvQ2dDaGRBVXF5S2xLV2NsSncvZ1hiREo1VkEzcWNzMlJEUEsyb0YxdThJRWZKdWhnUDk4V0tUaXBRWGs1dHo4WEdBa0lPLzhiYml4aVFmd05SSjJyeng3aE1JVytUZm1zUU5NQ1VJcytEbTkvTlJ0R0xNa2dFU2VxSG5BY2hxOXpVR1dvQnY1TFNCV3V3QVF6MmlTc1ZaaFcrTHNRM3BIanZPNUVCVHV3MHpyTlBHa1pmb284eTF5M2xPdXZkb0RNZzg4RVVpSUFWd25NSUFVbCtOUFFMcUNFWUtsb2I1REpTRmFvWDdDL0cybTJrUmNWSTBIZG9hZFdtS0hGZlRsWU11UEhoUUp1cThLb0JpcTlPUk9rNTMrc3dEQ1NERnU3RmoyWXFoNVJEUVJpWjk4aENZcUxPWkVxUFhYM0RsSGVaR3VKN0ozc0FVcDBucmc3YU9DYWhlZkx1QkdhWENrMjR4N3hCWlZLVDd4NGZ4ZUI5OGNoWEkxKy9Ta3RHdDh1Q0x1TDVFaENZNTh6Z1hTZkszZEFUSUZEY2NGNnU5eG1HV1BtRk5wNGVSOGZ4NEdPQmhpOWdUUklWWm9wdFdUVGpIdEpFNHB2M2lhU2FOek5NcUxLWXFuei9hYjNxUG1IZVUwY3YwV1hxNWR1cUg0UHRoc3EzM2pSVjlQRjRrQ3RGMFJPUU9CYnczcGFTZjhRMjhmRUhRbTVnN2JEbjJCV2Y1TjhPQjFBNnl0REZqL2JTSFJDVVBKOUV3S2hRM1ZPcGtBeDN1aXRuOXgrZnpLYWhMZVY0VEp0NFdvTG83dytUenliL1lMT1BreFN2VE5QMkh6MEl5SnJiNDF3cHV0U0JQbTRqMWE3WnhlRDZNWS9GTVhFYTV4SDJoRVdFREdKbmdyU0EyZE5jdnlNNDlKaWVVYWpUNHlLYVl2ektmeVNLbDBHdHh2d1pTYWMzSFFRYWZKbld5c3NKUXJHYTVudGRsRFE0TGVaczlZTUpGVkt4enhBKzBzSW5BL0VqTWdlR1Bvak9VdCtYeUcwcHZ5NG80eXNweWVVN2V6SmVVT09QSmk1dk83RGRTRmJxNkU3R0NrVC9heHVmRVR0eDdKTlAwUkc1TDl2T0plL2UrL0VnUWoweG01bnNZYVljZXFtN09YbHBkcGN2MThOaHYyNUt0UFNRYkFzbHhCRWNvcEpxV20vbkhKMTkvbnFSU0V3S1dsVjlvaDFBelhXdit1VDVCTG00OHlGdW9ZNjRUczJQUkxhRFVEK1NzRXdWUTBLOHRGRTVPaVRFS0NLeVo2UFFtQ1FPNE92L2FCMFNRYWl2Y2g3OXlhU0UvM21KT0l6YkEyR1dPZEw1b0dzTkxzQ0dzR09HNnBjNFVQUCtydXkwUEhPNm9HSlFDWnNmdlh2NklEaUNBMG8yQ1JZQVVnbzYxU1dBRk0vdVRydTF2c2FxVmxTOG5VVmkrRkpJVCtmR1g3aHhJYzRkb3gvTE1nVmFPdEZBUlBRVjJqTC9hZGtBMmwzblFyYU9teVR1d1BLZkU4eXhOQ0VYeStrUHBQN1VoWlllYlJNZC92bmJBZHpoOGdsUlNyMFhpcVJKYm1STStTNWs5WllobDltUm5lTDZxaHFSMy9DK2w5NU1DZkQvaUlmTXQrU0pkOTRGLzkwUWh4ejlpZGJpNDhGcjc2MlNMNnNlQ3V1bllVaCtPRXRta0FNREpBU3RxR2tIcFVyN3phS09Tc1gzWW1ERlAzNHJEQnR3dUoxTnhBZzZoZVR4MkV3d3gwYlBsSmx0SHpVdm9wL0c1QlNuVkt2OHUwdk9sOGF5U09BQ3BBS0VteFUrUkdNVDNxY1BYc29LZCsya2szN21tMlpqN2JFUzVuQ29PT0hNNE93VmxIWHVWWFEyYUNlczNWcXV5dUhreUNrZ0FFcFU0K2VKQjM4WXJLNE9OaG4xY1pjeEVpalVLVURITE1iQkRLc09rV3FPTFd1WXVUM0REakpQRlN0NytVemZ5Y0hPS1lTbmsxZ0VWYS9wbXY5L2hpWlFuS1hVUFhJWm9zci9WSklLUEtWNmROOVpReGgxNEtDaUROQnhGc1Rma09CbnlyWHdTTXlOVTBwMHlrWVc1RUU0OVNoOC85VlhJUGJrMmU3TlBWQ1FwbXBVK1VyK3JBNm1BMXlpK2ZrNklPUlNRcVZHZ3RpTUZsbkRsS05IU0FrNDlSd284ejZUNHVrVEd0WFp2R1dUT2h6dGgrMzVRbG5DdUp3ZUxNdnJJMGQxY2drblBITWE0OUw1OUFJT3JhSU9FRWFyRGFheGFxRDFPeGdISVNoSTJPZjBmeDFoVWdkSUdNMUZmSWFwT3hNdS9jdXprZzR4aERzY2ZMbTlZSThhN2JDYmhlbHRZNzFIZ05DYy9DbEdVVFNMVE9GTlNMbFdjUzhZd0dETG1sSGFhTFNKaWdZak5TT2JFakVJWFdTNjAzMHl6N3pFalUxQldTUk1SbW1GSHZLRW4vT29WdzI0TWxKT1ZHSkpVcTBPV1JMbkhRL1BiTGNnTzNqS3h1NXVLUlFuSWJsQTFaZjI4YVRYbnFzNGtyODA1YnlXZ082U25Ed05pVWlHMWh6cDFaNmFxc2tjUFIvdjliSTNDdlZ2S3ZuNFdRZGovMFRwZHRpNWZLYTdPeFJmMUdQMTQ0SHl6Nmlpa1hvWlkwcEkwTCt3ZG4vTVhuY1FrUFlhdVoxZVZHVkZ5TmJpajBJWnByQ2UzcTBLeWxVSERXN3BDOWRYR0pEQkhtajQ5NXhWMGhHWFl6czhWUlJlRWpPbURNRzAvMGpXSGhYSThvZ2J5SnNDeTFJQjNTYm9XN0NweW02ZXo0aTNIMHlxWE9ISnVUWVdnaE9EY0JlWU52TVBISGQ3R3FTQ2UvSUd3M3JuVkN6T3RBcjJEYmhHY3llU0w5OCsrdDZTYm5VazZsTFN3ZS9DL3FucjJDWWVxR0h4RFRjU2c3TUhZZ3ZRcmJxUkJvQ3ZBZWxCTUVXNHl0c1cwVVRyd2M3U2VKc2VPNndoVituYzFGV3NtNC81aUdDZXlnNHA3NE9haEdtTDhKbjZ5ZUhTLzJKWGlLT2N5OTB3aTBtTzNUUEZhOXpLUXJVbFMrRlAzUlBRYlloYWZQVHFOekZxbG04Rzd3d1VvWE5ja1o5RE42NWtVWlVvMWxsdjNvL1ZMVThHR2FJSW1ONTRCa3FCM2ZNZ2dsMXNTU3Z0YlhkelBmVkxNNCs0M0NVa1RUc0RWUDNwUFVCa2R1L3doeE5UUG52VStLdmp3V1o4aG5Tc3BFTitFc2FwVHhwYjJnODBXTm5la1QzMmFwZnphRzZ5Q2g3RmFiSFVQK0NjOWd1SzYyelVuQUpBaEVZaU5KWlB3Njc3a1RhQjMyakhDVzBUVEgzczRwWGlNVEdPR0M1M00zYUM2U29FL25SZ0FJMjJvRHIyZWhiMWJueVVNd05TNXM3cjduUVdobXpERDBoQTkwT0ZPazVGbkVaaXRJVkY1L2RrR2FTb1JMSWl5OGdhTVZtbUFnRk1aNXgreFBEVmxMQlN2cmtYdHJFT2t5N3dKTXNkVWhOVG81NStwS3hlWXVOYVNNL1AzMjFGK3hEdWc0NC95cmE4R0k0ZWNDbVZldE9UUHlDYzZjTFphdjk2M3JGbXpDTnVaMC9jWUNzYXliN2pHOWNDenhTT0o3djk3K1pla3BmOGVxcW5ZWEJsdkgxYjBVaWMzR2lXcXBsamlkYTZNWkttdElvN2o5cDBPQzBuZnEvZFhNUUR6dVltMkVRdWpXSy8zMzZscXBhM00rbThtVFUvWVVzZzExSDlnWXpVZC9vWDJjb2RiY2RXRkpxeGVpSnNVcWRNb284NGVLSUUwSWRucG1GMmk4R1NiaCtLNHF3MmVxdTRCWSs0dkpSY0FRcGF3WEhTMG5uTmcyRGU5NzczZHdhSEtjL0s4a0hqSVYwdDdiclg2K3VScjFOZUUrRUJ6T0pvMUFwVkRscjlJdUtyTThuT1plVFNXaXQvVGVhMFhDTU5uODlsWEpXc0piNWxMNnViZEZpN2o3SzNXNW0yTFBaVC9QUXcrUCtJRXJuM1JYRkZkTmRhcWc0QmpzeGY0YTcxTWlrUWNoVDF1L1I3NHVuVXNpNzQ3WXB4U1E2bGN0QU5KbndPWno3Q1c5S3NadS9PcFJ6aTVLZFAxMElub3BwcUNuaW9xRW9KM2pOaCtRbmt5aVdYbWNUcy92ZFRveGcvNEFWc21VUFRZcWVSSXJhVGowM2hRdllQZ1kzdEhadEtsSG5WWVZrZFFnV0NhTTdXRjFLVGZmclR4bU83TVVmaGcwZEpLbmx0cDF2VlcyZ2dDSnlkSTI3WWNycGtGRi9zVDVoTGxJeGExeVBuVVN0YzhUdlROazY3a05ZVEhYcjVnV2x2VU5YTDBEWE91TEJlUFRSUEh6T0RLL1hsdEZPRWlSYmtQTGFxWUlPQVI3MUxTVDEzQWRmME45elNmRll1cmg0b2s2NlNpS2tab21NMnZpU2VzTzVWbm04TkM4aytHSS8xanlUYndpcUV2R0xuQkFOaGR5RGtWbm9QR2d0UlRKaVk3cUlZWjVNeXRqdFUxa0djRUJKTWRkcnJveFZEdExvcGlWRlNEdm1tU0hwdHlYZEFGUWpxZEZoRnFPNkovWmJscEpBRGpHQnI2VENDc3R5bEc5VDZhekViajArNGhMUlpwY0hiYUxrQWlzV2xOejM1THhOL3BmSmR4bDMzTVFwelNHVHp1RlBHWkp3T2Y4dHBsbzZ3M2VtOTFYSXZ6N2JHMFFGMnFqRXBOQ3hxbXY3RXFUR3lPZmdUZktUNmVsL0wwTUdOVjRtY3N5bHpVMFdTNWU5emRSaWhPTFM2b2Vnc0c0eGx0ZHlHMUtFb1M0VWJLRHduR21pc2hoM3JxeGxlQUx0Tkx2emQySXFiQnBETUU1T0Vkd1p3aTBvcHB5NzNXcTdSTmFFM1NIRkVTQURJTG9BZSsreE42bkV6VVdseHBFeDRTd1BZMTk5eWswSTdKUm15NHByWTBJUEJxVjEveDBVUUZPOEtCc0ZxbEhrczZmbEFNOWl3eTZvd1IyVzBncE9WSGdXeThycXBUcGsySEU5SkVpTTFpcFMyVkdRQnVXT2pmcnYzMmd4MkVJWkxGT2ZOdW9IcFNXbnVWTTRSMStEVXEzUGVHdFFDaVo0MkJqTGNtT3dHNzB3TVdRR2swR0tUWHJlMXdoK3hkTERoNUNSN1hxaitINlpSdkpFN1dWK29xVElvSVZJQjd3V2I0cUlDL0xxMDlLRWZ0eUFxTEZMOUlVT0hkMjFrVDV1ckc1Y2JDMWg5c1dnVFgzNGtDRXN5ZnpuNVl6aS9KVDhmaHUrdGE5Qy9wQ2JqdVVNM0l0RjNFeHFmZExRTm94WGRZd2xIY2cxV2E1cWlkd1lsS0p1YloxRnY0dWJHWlBpZzcxV04xRllzNy9hNm5rVTFqUEtKRjZoU3Y4alJFL0d2bzFMTUlnNEgwSzBwaFVhV3JpeUlJK2t6SU1JWlo1eGJVaC96Zm5EczNkU0xPQ2tXN2VKTTZ4TzZhQUR3cU9DRndkR1ZEQk41bXBmekR2OUt3ZEM1UHM4a01lZTB1MmE1b05jTXZWcjNxYWdtdzlrWVdRQnJGRGozcFk1UlJ4R2IrbklsSWtqZVlud3ZMbEFsRVZjaTA5bmpocGVoWEtJa2hsbmZwbHo5Q0FmUTdNTEU4TVZGYVpDR1B4VHoxWmpGR2JZNVRzNmJVcS9mVlhrUzZwb093Nzd0aDNOTGJsRW1XTzJMcWFBYTdlYWJsNE9PQUg2YkNEOGw4YWVJbkVLdjNnL2VzY1d3NmRPV2cwMTByQ1dpWjVYdEpyUEY1c0lvY2s5NkIzanBLRlFETGhQV2taMUpyamVZZ3dFODFPTlI1Z1pETDdRdVliMXpabXRoSGNNL09xakRXOXZzZmlNMTJOcm1PRXBlbXovVjBudWJ5clA0cDNhYTVHUmViOXQrcEYraU9RVkx1MmtQYWg3TnRMQjk1aFU4Nnd5Uk93a2h1eko1aWJDMDE4TXM0ZkcxaWFRR1g4aUUyckhkTEVLTWR0ZnpOV1RPQnVtdGlvSFRFcFpsY1pPbGdJdFNBaWl6d1RBdGpMZWdzdmRrdEtGTkQwckNIR21CQkFyQ1B0VEZoYlp6dTFUTTVIUFRoVnpEVmdvVEl4WGxITlFnejJENWNQbm5IMFY3Yk9idjlnZG1DTmhnVnp2V0laSjdlT1JwVE13eFB1WlZSeHlrYXJISEd2U3hSNCtzZE10QkhBakpJNWNHQlI1RmxhQ2QydjdNMFVEZ0JJQnUvaUN1SG5NVWRER3NuWEJYMTBFalB1ZHNseGcyc0lMSWJUVElVenNTdnlHa0tzOGV0TEVjVWlVWnNkN2hSY2ZvUThQNVltZENvMjJ6Tzl0VGtZOCtoNlB5ZTlNZXBmZTl5R2wzTS9kT2hoTGVERlkwMFJXTFEvYVNhZ1ZRL0RNWldnekRFOTc5T0ZiRXQ0MnhXTkdJSS9FQWNBeUVWR1J0YS9PR2RkNkJrcktIbVpjNyt2T1FDQ1N2bHA0YVhrN3FnVWFLVUoyWXE3TGl4cHV6blFXTXl6QzJtL0RkSWc3L01xNXRJejRjVFNadE9CU0FKWnBHZk41THB2VjVQUXhSWGVoS3EweHRsU0VFOGlMUmtMU1ZZRGMyME5jNkg0ZnV2SDdudkpTdzdBOEMwYVcyZHRDbHpnM2F3Ym9GdVdMd1FLNzRnQTdpblBINmh1Z1lFcUhFcUt0S2lwb3dOb1BRTU0zZzMrRk5aTjhoM0w1enJzb2hUSHpIWlhvVlZsLzMzeGhsQ0FMMHB4dzFab3JabEp5Z2JaTC9DWHFrL1ZwcnZ3WmlJeHlzV09PSXkzU2liT1B2S1JUellhTGlyblBKa0RWQ3cvamZ2YW5CdDAycWp0dEVnYzdqK3BvUEFpTDFxTWZqL1hjb2pCMnFySUMyNjFKU3FhSnA4TDZiQUptTUtMVGhQcXkreWNHZVhqWlAyeHZrUDFwTk1CMFpKYVNudHpRREt3MUcwNkRYSHdRT3A5d0Q0UlVtaGpDUm9xT2FtRVc1Y0ZiTDZUM29pdTVtMHowWk9hZFJOU3hWd3VRcmxZYlRzckN1TUdBRVY5VnVsZHh6ZEFuMzlCMkppb1U1Tkc0eElZRTNzYzRvYzFmZ1VQRFFEb3d6WU56RzgvNkFNdFVtQzh6T2F4RENRKyswdjJwZG9ZbFppRDFvbFhDWnlRUHkvM2RnUkhhbnBaUWxLdFl1djVRbTNyR2dFUEhBM2xUekVxbUlCT0lybEZRM0tkVEg1djlMY0V5QURhSzRTL28yMWk0N2gyMHJKdXI0djVUanh2djVTMlZzMkNZTlcxUEh3UnpERjZKT0l4YlFXU3UyWGJ3bS9sU09DTHpHUVkzNWJxWmk1MmtUdThvbVNKRGF1ZDZEcjh5MUFIUks5KzJYblY5bWJoSGJZek9VYWt2ZGgvR0FIZmxtYTZRZVZkc25kNVJkWTRtMlhaRkpCbmgzdWIydXJYOGkydC9TM1NBRUJ1UXhzdHJmcnFqV2lWMGs3cTR1TEZEWG9tb3FvcDd3NUVpV1d6N1BmcFUyQzJDRGhvWmVsTHZqMXBsZGorL0VxbDdJNVE3U1B0Rmw0akRzbCtaRnNvcHI0NUw3TXZDKzRNMmZWMkc3RXAwNzJORGk2SjNsRDdobTdvL29DM1p5a3pXelBDcml2OVcxeWlDRUdlN3N6akRMQlZCM1l4dXI3U2lURXdBSTB6YkthQllhQnRlT0t2WXlsanQ5MFNBUGt1aUhNYVNsMTRmU3ZOc1Zzbnd0bEhSb25BUm5Wc28vTGVVVFFaR1FzTFJHOXZnUmo0bE9Zd0xnaHd0VmZpWWZVMkp3c1gyZzVCK2xpTkM3WGRiUTVoc201OFdsQnBHejhyRDFlaFUwSXVTM1ZjMU42YThRdmF1M0xzcDY0TE5UZWVBOHZXWDE2YTcvQ2VNV0grUkJOdGdiQTZ3ZGxKTlc0RTE1Slhoekw3WFJ6Ym1HM0s5YzYwaWhuZTVnSlRTMm9xcGx1dXRoN3VuTjl6NFlydUN2MmE3NC9IZjFxcHFDalVCTVZjbG0wM0RUTWVVNnBWYzd3WFJRdlBNTEVIU3gyYThsSk1TbW1aNjJNdDNHNVFuTzVMT1U0TUFNZkd3TUIvTjZlbmFRMGM0Y1dVWUJFNEp5bTduWlp1bVhPQWdBM1NUeDZlRGdVblhXWXlIU1Q3L013VFRHKzFrZlpIVVBVWGpnRmJURWdBVTVLbEVKSDhBVlZZbG9wVDhRKzVPd0RyUWlFRGlHZDM1bEpJV3NteS9sSHBzeUxaTG5pcjByekdVdnBpdUt2Q1htRjNnZUtZSXdsK3haajVIalNmcklvUDFjaXhEQm4veGQ0OXN1MHBsb3M1L2pUR1NNaS9Jekk4VG5JTmFIbTR4K0gvdFYrRHdUUVEvckhCcnVyV3dRdW9oOXo3RmNIMVc3UU1YejB3UUNBRTlHYi9POC9Ld2U3VTIySzJOc3dVWnRCQmNaVzVLeTlsM01qZ3ZHYVBuYkJGM3dOcXBuOEtqck1CM3pSNVdSTkVCc0c0MVJQZXBjVE96UCs3S2pQMWNDVm1ZcXJmOTk1UlBOS1RMRnhyaTBuTE1wRFlxSXBENG1Ha1lzbnJWckh2NElkd0diRFp0Wnk4amJuSGxkdjljRTJCTlhQV29tM1kyemhtdmtuWjZ2RnU3K0taSGFOS2VuYVg0cDBRdlpQUk9XdjhJWDVOZmwzcmZpa0NVYjViS1FjbWxtWjkxenhQQWg2bjViaDJFdUZWaTFjandybXVXUnlmRmgzZm9zM1RFUnh2MEdUSjhxMUxKSThYRmU1dDJ1MGUrZnc1VTBFb1lESlpRcUVKcDBlU0E3UWR5NE5CRG1wUTBFUDNGSi9NSzR2WEIyRUFnT0tMYWt5Vnh1bXFxSVdSSDNVY1lYek1KYVVKc2hJdzZEdCtmMHlkWU1acFRPRGxXeGsyTWdSZU9SeU90N1dsYXlhc2FwaVdhckJPMjBPdFJ5eE9EOTg4RG9DaXJzYjFGUk11dTFwcFpnQzh0N0syb0VQTjVPYVJrTzBXaUNQRnh1Szl3eHdZQ2kzNGdJWnQ0Rk9kaUtwUFlZVWhIMkxUSldrdlRMaVZ0UE1iVjJ3Y2NSU3RIRmkyRVk5TTgzaG00ODQydWd3K3lLTDlIdEh0YzBLL3hST3RBcnlKTHJtVVdnUTB4S1dZeTBJQStjaG41YS9jUUR6cmVPVUpJQTdiR1F6b3RaclZ6bTcvdGorUnNVU3NVVWluWUZPZDVPWkhCeHZiWmc2UWdjcGdwdFU4TUhzazRLekNBOVRpM0lhOC9JQzR0RmFwZGNLeTNqZ0U3U2thWWovOHBRamRTaSsvdHkxcGZsb3U4TEI2YjlHb1FKa0hjbWtkczFCTUN2a2twSURSbU85MnNQVXVnUFpsWjczM01JQ29xcmZIakNNTmpmQ21UWi9VNG9keTRvK2pLT01SeXdXYXRwTVNzY0xXeXVGTjBLV0lVc1BiMlZsTENFOVZBbFVWaTBuOXRDYmsrSkZBcHVUd2tpRW9KQ3VqVzV2TndiTkN3dUZOMURvakF6dnkyVjNTeTZHaklOTnJBYmRTYlF1N2FYeG5LUjA1RDdHZVZXVDZRaytxQ0pWV01Mam80Zzl4T21TbGhiWnFDT21oem5pUVA3S1J4YTFBUjArK2kwdStEWjVxbjYwUTBXTkNlc3k5K1ZPeHJNM1phTkc0UE1oVWdaenhRYmZpMno1Z0txYnhLVFFkaXZRTVF2UUUrNzhkMTRobW5IRzRTRFFjS1k1bFpHeTFLbTJWeU8wU0RockVvZjdYaEJnU1ZjZDdqdDd4TXJvSzg1VHVBS3lneGhvUE1VZUM5aDB3Q2F2S2FTTnRRU3BoVUJGWmtqZUVpNGcyWkwyaXR2WG9RSnUwMFZseFE1VmVVcmVXS2dTM09jSTE0bDJ6VG1ZZ1BvaTh6VGNPRlYreHAzYnRqNHlidmoyTS9pdDJtN29sdjFsQlZBYTJWVXBoY2xXN1RGUVFjQ0Njbmg3ZkZNVko2Z2JzbG5VNEFydEtFcG1Jb00yd01oYjUwVlFnYThnU3k0M2E5UTZNSGFZdXMxTjJObGZNMWd2TzBWOHBpbGdmVlNnUVpZTkJ6T0dRUVlxVXMrL0ZmZkwwUFNlN1FUaVB5UDBwUnVsN0N1MFFYU2ZmQWhpRWI2elN3UlBoRnhMR3crOHFSdWFhZVNJVUJtTEkycC9yeHR6a0tJaC9qTkkxL09wbmxSa3Q4NERZSWhXZ3JwUTdKdHdhd2JWMDNiRkJpTXYxbytWQi93MEQwWjM5dVovOG0wYkxFK0h4dDZCZ0pXNk5TQzA1ZTVsUGFGcWUwdnQ3d3p0QWVQays1YVdYaWFoZUtIbFl3Nkt6WS9sejRjbEpnNEJHVEhVczJveWN6dGRWWTN3c3hzdC9YWjB5M0J0ME56bXhycVBmZTNvOG9ZUXN2Qm0zNTZjR3ZMN1JKcGcyakdrTHBxVGluRmVBMGc0ZE1ObDhYMjJVSDhyTWJBZXJzZDRMVFZ2bXhMaFVTNnZSbGI4bVJXeWIvUnFybDZPUnhCQ1dZUnRtU096cFJwY0I2ZjlXbyt0Ny9DR1UxTVNkczNnMXF5VXlzQlRpK2t0K2s5N2dTc3FnSGJzRitYYzVBOVpubGdtMFNtUmIxWEl5MDhBSDFsUkgwekt0N0d1RCtoRnZOaVRveTA4WncxUEpsdEZRaEJIemNpQ0dCVjJaZ0YvMlVZVlhYL1hBVVM4YURaZVRET2UzdkdMVmYrcGlsUEF2aXlrM3liK1pNR0JGUndGUWx5eTUzcytFWVd0UGFxaTAra09oMXdWWWgwYmh3UmE4Zm90L3N4UzRreTZJL1VmYS9sUENKS0pUSFFLY3hCM3Vnc3FnZDZQR1BoTytIUzd4cCtJRDZIcmpJUmx0b2dnOHU3N2ZpVnNlQ2xMTytCcUN3RmxVODJ5YmxxL0lGOEdxWVEzVWthQS9vVGhDVTZoTTJ4UWdvRXlTd0xLMUgrUzRKcGVMZjZqZkNLMnNFU0lxN3A1ZVBlVVA5dzNJL0gzaU41bXpJUlpvb0gycTVTbEF2MC9BdlUrc0R0bmJTOEhkYVFEMFI1NjZlc3ZmWGhxRUloTUplTWlBNjkwdFlkc1dCa2xvc3E0ckNyVXoxWHhWQlcreFdUTWI0bXpCaWppcTZwMG9lelg2ZkJUK0o0QVBwOThnYnNJQ1NqbXJkaUtvYVZZaFVnWG9xTkdHdXVkUDlqL1FmU1pPVGxLSDBCbGhnQzViWWZ5RzMvaVhQUWIvd2hqcXJva1dXRjNLeDY0Y1hUcHVGVGtyTnlhRlhxelArRmd3SVV0Y3VhTzJMMks1K3Zta3BONzFUd2VSbHlwZ01VQ2x6aFZtM3RKa3ZOQ1k4TXhDUGszN1BPWXF3N1NCZmVObVRNRHdYUTl6NW0zTmZ1MERiU0MzRGQ0aTBGVU1TbVNuMHNsYnNKZ3g2NG9LQ2NvU0lRbGhEWHNSR1hPTXZPSlFZREhHNEYrMXk1RGd2bUUyNkpmcWxOak9oWUEzdnkvRktwNHE2aVJpeXJvVXUyeFo3WkpxNWxES055TEFJa1M1RlRuSUt6NXJyUFRYVlkyalh5TWVwNUQvWGN3MGV1WEY4My9rZkJRdmZsK3Z4YWoybnlLV0xuTlI3NHhYeFMwd1QyK2F3OUhjLy8xcE1WRk1oUzI0aWF4dEY2Q3F2VitYNkxSbTBrbjU5VGVYR25qZy9JRDNTSHVONFFpdFFtK0xzTjUzdTdvcUxPYXdoS2xQaDcyc0E0bVVOR0VHdmtvTFhBeUYveFd6UTJyUjA3SHBJaTlUd3JTRkxQbHRzK2pSTHA0WjVibkxnRUhBc1huVStsQ1ZUNVFOQnhYKzdiQjZBWnNiR2NtbEhQVzUyajVFaW80N1VCOTZVOHdqQWNRcWtNakV3QXpEV3RqNEdGSmVEOTdrMEZ3NUVzTENvRFE3TXRpL1pkZ0hjRlVWejZoWTlNQ21laTlNUFZXMjFDbW1Ja0c0SFF3YkFHaXRVRURld2dTR0tRek9lWmpEQ1kxbDllblFyNGlqV0tIb010WmJkbHV0WkZnbnI4TTFCRkkzWXlqNytxVzBHcFJxM3FHVHg2QzhqSVdmSGEyKy9UWGd0SktLbXNvQTdlT1ZFNXROWExwVXhjUkQraDhvWXZjZmVOUmlySXFNalF4MTlzVENVQXpDWGFPTFRPd3FrRThKMi9DNmpDTEhoM2QwbVp6MS9mWkNMMk0wTzF0RjhTbUJBNnJwZVUxNERsYWxRZEpDd2E1QlZGWnJRREJkeXVYWlhjQ0p2S3ZMc0tKUEttcTFIUlBuMi9kR0xsK2w0cU9MdFVMZzVnZnQwQ0VnZ2NOWnAwWEFjSDl1MWhLNEZrRFkxUTNBZEZSN2V5c1J4cFVSNUNoMGJTMEtkN1NQNHpDZUZub1ZYSHJreHVGazhib0hlakVYQ0NobzYrK3BzTTM4bnVuNExUTGpTQ2dkS0lpSlBsWTV1dkZZNFUrM3JwOE95UzI3WVF4M083U2ZxT0pOMWxHN01OQktLV3NhTjJDc2MyRzN5YmJkeFhNQ3doRzFmV203TzN5MlJHYkZ4SktNK2hpaUIvM3BYVUZ1TDZIS1I0TEJDem5sVTRaQ2ZyTkZsdVNzdUcvcVNLRG0vRlN2Z1g2d1ZuWFpvOUN3ZVhXcmNrdXl6d2tVcFZEbXBlWHVlSTFIWDZWbWtrOHRSN3lZanVVK0llbWNmQVR0ekVVQVdzSWtUdUNHOStFeDZhVUlrZjA4c3pEckowNDVsQzdWZ0YwWG54ZDJFREk0ektpbGRoVTBGaEd0MkVUWlRBdmJvYXZKNVMyMXNPQ0FrV2tLSlFFTndXOHNIZDIwSDMySnRJM014K3hSK1hvSjh3d3JmMlZ1MXVTZ1IyWVdYM1ZhUmlmdkNBMUZHRGdUdWtoT2tDcU12cDNJWWE3WmJBaW1vL25zOGduTWJpVkVjZVM2VUU3dzRsWjJiR0hCTUZ3ZjNBQ3psbjNha2hRd24zTSttdXdROEQvVXFqbERaMm5nVDN5cHVFWCt4NlUvQnlieFlDSWMwWUdlUFZNYmtoYUpwWUM4cFJieTVySGdaM3hrc0VlNmpHd3FtOEhmWkptU2FWdUpDKzZLaHdvT3NJTGhNM2w1bE1lT2UxQnpUTmwxUENUN25UMk50aFVETmEyamtEa3RXZ3JFU2JESWwvWTNMNjFkdjdUR0lWVEhYWEpVS0swa21HbE5HZ1ZUODNFMkQrZ3ZvV1NjMUFudkVkWEJQMWpnLzc4emd6cW1lc2M4SjVyS0lIYUdmK2lTSjBRQjBNUkpKMjVJR3U3OU9tME5YQjFod0ZuZXRLUGVPZDdvUGllWTdmMnF2Q0kyQkJrV1V4SFR0OGx0a2syeThLQ0o2UE0rYW9qSm1lakJYcmlxdzMzOFNSTVlibVd3UjVtTUpqcFpuWW4rNFJzb1hsTExDL3g3TllQTnZ2QWZNSFFXVXdHakVJUDFHc3gzc1VVY2x4YjQ0Yy95SFk1Y3V4UVEvY0p3eTNuTG42SEJhK0NYZ2JaTnk0SThZRWJxSlUzWnpmV21RamNqZnFtcXRBT1dNdDU1WTZqSjNFSTIxbS91TnVUTmJMeTV0MDJSMkQ0U0VOY2VsYlN4TENCRGRxTWZjVHkxNW9ROGdWcHJsaFg4OVhSdnBKSFNIK1dkcGpMNmQxcTR3V2ttaEtvdnpYdWcxK1ZoemRHR2JjZ09xd3RpeTd3MzV0eWRDQmcyZlNENkx2YzMzSC8wbWc4emlqT2NISzNWSnpLZFlnYmRXWlpzOWdjSktLZkR5ZFRuUDROc1h6Ym9XK0JJaTVRWHJUaHdFMThIdGlhVHZXdUhXeUdOUGVGWjZEOCtMaE05a2dmOXdpZmNsUjl1YzI2S050YzlzekZIeC9McTNvY0oyc1RzRGliT3NqMDBUSzY2dHZ3U1NoeTZpcWcwb3hBOGh5NGlYZGMxeHpUcUR6V0g2UHByMWt4UmU4N2ticFdCQzRIS0QwTm5ESEZhMWRmOGtuclNPVXpLbS9lZUYyY2wreFJLbW1kWHFwSHVqMmlNd0c1d2VVTU44UXRHUEhWKzNrR1JjVCt6VGI1MHdDN0ZzU3FFNm9jTjdBQ1VJc0Q5UmJLZSthTE5mcXVoT0xWWkIvRy9wOENLVUFNNmxaKzNZUGRRVFc0TDBhbXhkUndSczM5OS9LT0FrRjhWOGpaTzQyQm1pdzREbGs0Q3RWZTNVNVZPRXU5dXIwYjZpaitKRWU1YWZERUhaS0d0SFVWdDQwVGs1ZWJTRjVZWUNPTm91SFdvM3paNFNQdmMvb2FhZzE1a1loMVMrUXMwcnNGMU5VMlZYc0dDRnJ0WjUrcUw2Y01FYU0wTjlEZ1BUdG42Vjg2NXJ5N2FrWGFFSjlwKyswdE41S1UxOHlrVEZhNCtmT0E3VTU3OXZjVitBcXMrcXltb3daS3dudzVIOVo1YTIzVUw0elA5MmhtUjBWRHlSaGMrdFkyWmkxS0l6czdPMVNWTEJOc0dDdVlUYjNZbUFKSjkrQU9CMTB0MnlnWDZOOEhJQjZUa0RSNnh2cjJCdmYrZVl3djlUelcxVytpQXV0TGoyZldlZGRDTko2anJWZ0V5YjBrcVVJbXVlRHRYbXpPUFBibkIwTHpNdzlEQmt5WGkxYkh5QmJhckJrWnBaSUhSWUxab3NiTnJPdzNyRWhmOExGU3FobEkvejNhR1o5NkdjOWRQVlBkSXpMZFJBeXMyZks5SmZ4aEJKTmljL0lkV216d1k1WEQzKzBvMFhHQVZhZkZZVkdrcXBQTVdjOXBnNStaU2NzamxLV3Y1UjNzQ0lyMzlVSHZTRGNBeEtHdGxxdHRiamNscDRQSU8wUkxwOUtkaDRYckxqQ1FoNEYzZlREU21mb0hyQ1FMTllyOVFHaVFHU0hLeEI4RWE0MG9keVFxZHJmTkJiaURDT1p0VUx0Qng2a2M5MmhNVjVyUWlCOUp6WlI0YXMyWlA4OE1yb3M4QkpnNis1MmEwS2hxb2dLUExjZlZJQWordVJnTXdQTmtia3pDMjREYW9ZYVNzUmtZS2g4Sms3a1RwMEszcmcvcURKcStFL2xxY0NodU1FRjZQTnpVWE5ZNEdrUUxXYUZGSDZVVzIza29DOFJaM1RRWkV5cnpiVGRTYkI3cnZiNlEvOGNLR05kYlJwUnA3dHVHanhncHFDMS9EOCtGYnJPWUlVWm9yNFlsNUdjR00xYTZQYWc2Qk9YUDhzV25IN1JDWEl0TnN5eFVQcGdrcmphVUQ5ckIyQmp6WE1UYUZqWTBVNEIzT3dzcEdhMDMzQndxaHdaYjlNQnNzMFdPOXoyN3JKTjNUQVpxdUVwazJ1YThVMDBvcUFkR204VWJNcGhtKzBGenl4emVXU1hudU50cUxVUnNKWHJBdEd1Z3pZZkM2d212Ylk1S3l1RGhSOWZvY2YrZW02dVI4dVZGcHJ0bFRJVDdYaUJ6Z2lybHUxZ2pmRkhEcWs3WEhvS2g4VlJtQkxteGZ1UkJxU0ZvY0FZRzN5R0lXcFAwK2hGa2tyV2RCb21CRWNsV3JUVkJHUzFic0QzN1RYSnFadE54RGFzTU1NdTMyWndzLzdvd1dIb1VFWmErTkUxaFd1bVRoU290V0VmTUtjd05qcGw1eVozMDR4WVQrdDFPenZXMnV2ODVaZFFtRHhSWlpPUWl3VEdCNGYvcmZCcjlsclZ2bGp0NFowWUxJVkI0T2dPc3NxUlkrYktYZ3ZaMHVFaUZVc0JmWktuL1ZtVkx0b3dKS0RNMXBZdjN0ZUloK2JDWnZWTk9MZ0gvMkNWd0VKM1lJYmNPMFdJRUlDdVJqa3VoQXpMUmlBdzFCcGE0TGJCMXpWdzllV1ZmdDFwSmRCWnUxaXdIYlhDNy9oQ3FFeW5IK3grZElFNGNONWI5M2d5UTBjckR2QzI0cDJwS2YwWU9OSklkNFRLNzNhWW9mT3dLTWxoOXBoL1puKy9mbVIwWkM0ampkZEZValhXUmxMRUY0ellSS0c1RVFpTmN6Zlh0Z2tmdmttaUdYZGN5akRqM1RGNzdoWGMvTXNBclZVY1ljbU1SWXJxR084aXFGdy9wUndONnplSXJZMERyRHZlWE41TkZUbXlxM0NXcU9SL3lJY1ZkcUs0V2FsNW41bWFTTGx3L2Rva1ZFRkxWK3FLVXRPem1PMzZ1b2xoei83aUNBdXpoVDV3Mi9zd0IzaithYVpCY2tHcloxdkh4T0hGNTZIYnEyL0tOdFRJTjBzV3Q5MGZkdlJJcVdjcWNRb0VXZ2lFcTJZb3NXZ0hYSmM3UEJuUXRWQ2E3OENtM3F6Y0ZmNUhScmF3UVdvaHVBTTdKWHhXUFo2dVl6T0cvOTYxSEhPenJFbkcvNDRxVzNyZEExUnJSTytHOUV6YlhEb3VYSHdoekFJYjM2VndnZTAwRExCeDFaTkJ5SXl5NUNIZzdwcC9CYVpmSVBwNlNYb2Fzd3g5S1ZxdUw4a0l6RjJ2TTI5RTdaQXBoTUpraGtkVkR2Sm1RbndtQ2NIL3pDSFBtYWx6NFU1QTVIOThJb0NscmRVRkMwRFJiNmsxREc0YVVtaUVPMDJRMHlDNldnN2dFTTdwcDZjV29GM3lrT3YxZmpDZFRpaSszOE9KVFRjL1pYc09qRUNITlNDNGVnOXN5MURuVG9WMFNKd0VvNmJNeTNQc1pkSlJSMm0rQ3hueG1vMzFIOU5xc09qaWp2RWtFSjFTUXppMklHbnBDcmk1Y0diUTFVSXlteXdMOEZzV3QyaEdUeVdJSjA0RlZuM3l2akJVWE9JQXBxdklVd3ozQ2hxdjF3UklZd1Bjc3NaR1l6VzNid25XVG9ZT1pCbFUzVXVKbXYzMURxTWl4cU41aWpKTC9FSGJiMEtNczVHYmFUS0VtVnVtQ0pSNUpuUTN5MW1VOXRJQW9VaDdmUE9EQk1QMHQ0cVp0cUQveXpHSDNlYUVVOUJXUjFCT3BSVzVsc2JXZGNUcCs0TXVPdVh4Vkd1ZGt1V05SU1BVRFpPVUlnTzIrTTRDUmJOWFBTakhtQnRhVGZmS2xIcGluVXhqQUVybndjcWtXMTBncGljZmttM3YyNXpNeWxwSDkvbWF5UmZWbmtqNFF6NXpqaHdqTXoxZ1piSmtMenVFMk5Oa0g2MWlCZkloR1NLL21LWE1relBkYzVQaUcxbFZkL3R6NWZPK2Nma21qcUZzQzdYYVpUVmh3a2hhRXFDMk5LNHBsTURQV1RBTldvZnBwOC9sVTNrbFlUcStXNzdyNU9NRDlBOG45VitnbEJCYzhnN2ZTRkF4U29wN2lIWllheWdQdkVVTXhZclVTZG5jK0IyV3pRMXpmRzI5cUZnQVYyQThoOVZVaWxSUU1yWXY5bzR2YUZObEpQKy9NNmdqaFllWDNsQU1veFA2M1Y5K0NDb3g4MEk1WVJ6VDMxbmw0empQYkNzVklZMHVWMnprbFh5bGhiSkVUMGl6TGthS1JkRmYyS1BpTHdYaHJhcG9vd2p1S1ZjSzNtQ2hyK1A3U1NpUHh3TTBCc0srV2g3eVRpNmIzc2kzQTd1bVRWZ1hYOFJaNHQ5Z0dlODJWS1Vlc1Mvb2pnZHhkMnljMVl0T0s1TXBKdUh6NVlhcnZ3amF1UHlkRzAyTHJneXQ3My9aYzFJWVMxTkh1eDluMzBNRDdLMVhROTYwY29lU253WUo0ck5RbXhyNlVWNkt1SzVPK2hzOTFOKytza3VzdlRhaE9kZnlxWFFjUlVRMjZDeWpDeE1HQ0g3VnJwRmVtZzN0bkR6RlRVSE1WSW9uVUdzU3JGTUoxdzFwSGtqY25SRTYranV0eWRWbW0zUW8wSFh1WVkyazlWdGJkRGhBNXRhZXp4MDk5b0ZqKzAya0Y0V3NSTENKeThxSThzUHBzMFpkRzRDOUp4SlFRd3ArVGVxbk84NHA5Q3FpYldsUmFwOGMxMGpJUEJvSmxMWFBBOHY1cVdmcHlnek9VOFpGU2RBY2VBUFREcDMwK3MySmVhMkcxR3ZrVDh0THNNalFLUjRmWm5ybVdPTWlmc1RnOEtxYnBFMytpWDdLNzJ1Z05pdlBaTEx2RHZ3OUVoU3N1enpyM0ZMZFBFemNQZmVtdUZyQUNZcUY4LzQvMWMwd1RaUDc3a3pPcHR2amU3WkZwU3M0NThtOG1XSzB5cW1xeXBKSGFRV2NHNjBOWDhleE5VVHNQbU5ZTjB5TTRUdDQzMWRoalRVQUI4Zk5VbWVCSkxiZERGdEw3V1M1cFhBS09DTEN4bUM5elRQWE4zTlBibzIzb3NTUE5LK3pSaDdzcTZjRW85UW9ranNRaEZBRWYxT25tdFMwb3Z3YXQ2RGdwazZJT3N6U2JsbUlCczQzN1gxbGhpQWZMWGN5WUNTMG1NYWNQOEJPOHZSRXBQY3Bmb2tzRG5pWTZ4a1FKTWdLVWNlOWcyc2xSc24wcThkcCszN2I5SU5Mck84bys4NVZqelZtRjVoN25vRWhzSnpEbjltUFdjVzZlZFozMWMzSytXZHV1SzNUQWV0ZTJ5OHdqdHlxNzJKcTVyMFMwYzJETllIdDR3UjY4M2lmZmFHdmx0eTJ1ejBnVXpFWWtxVU9NY1RjMVNuOXBaTGVrQlFJdWlEUWJIeTg1Uk9pSWJsNGFFMG1MdkJ5RFdVK3ozQ0t1RHEvbVlWM2lST2ZKSjdpRlgwYzZyQlBNbFFLZ2ZHbXdYMEFyazlZaG5Ib0p1TU9LaWI1Um9PdnNiTEw2a1YzUUcvOXR4Q1MzR0loTE45dVZmTmZ2Wm1iM2Y0UEIxQ2pwSmhkWFUyL3VvYzdWc0ZuNkJWR3I2NEFhcGdoK2JCTC9GR0tFM0lLSzdONEE1U1hQZVBkUWxJY3hyUHJ2UXhheHJZWmFDSXkyb3RMbjV6QUk1TlBNV2RKTWd3elZLUVV5V0ZFUmtQWnBQL0daRUw1b2FkNit0a1h2NURzQ09rdmNBN0I2ZHRmcUNTZGJOVy9LemFTdVhiK2ZkZnJUcUkxbm5kUDVJZXo0emE3WDdFZnpubUVmVG5qUExDU0xsTTlHWnEzUmo5Zm5zNnhqNFR4VmF2dnljaW1GbjgxTWtlcHVXMWxTV2ZnV01iYm56TGczZnMydjRiVGxHdG9sWUJ3RVBOZm9UVzN1UDdnTE1FeHhBWW9KREhrcHZJU01rYU8rTHQrS1NNVnEyOXhUQTJJczF1YjB5ZDJCb3RsVzJLQmh5VWI5S0IzUUl2dFZwWjhUQ2ZPZks1TkkwSW5HaGJ2Y1lodUMzSXo2U3h5VDZqeEp5eWhaWHFuTzJGZnY5RjhaRkRtVVNKSXpKT3FIUWZHRGNPcHZJc3h6bE00cGNPMk9yTmtYQS9ieW9GbXdEZEg0UmVad0x0WkNtZ0VFLzdjc29IU3c4blFWbnYzS0EzakQwZnlPek5PTGY4aXJwbVByMnR6RFJ6bVRBVFcyanlxZG5nSm10aW5FM2ZYdW0yODVRc2ZrdXN1c2VFRHd0WjJpQ0RaNFd5U2k5amswdHZyeWhKbW1TT0lxMXlGdUFPYUxOVGUxNU05SWFPNDAzdDJmeHVPWUY5VHB6dVRsdndINU1uc1JrZ1ZEa2hvVWd6N1dZMG9hZC9nUFg4RFNwTWxKdlJDenAvak43Szd3ZFNhT1hkY3h0NlBDK2tNaVJoeVlJei96ck5zK3Uva3FOTWVSSGYzK1lqSTNTUlZYT050N3loK0tIUCtXdHhqdmg1d1hXcTg1TmF4Y3hyQzYrMHRYN1QvZGlva3U0ODlHSzJodXFUUWpxaHRTVmZyZ1J3K1ZNUHRVWVRBMEMvQ3Q0cW5wQ0NvMDZreUl5OGt2ZllCajRNYUdsV0hzbXllNERqenpKQk1BRnVNNmFLdDBzVVYzdURpWCtGOWdOU3NDd0w4dTFFWVl0S1BkOTNPaDBhcjcwYnVTbTBBZ3JxSDlsUmpWaXl6aVc2L3pjR3pERXQzT214azZpdnR0aG5DdUkxaExvaVVTRy92bTBvVDlGcUxWMXFaTFFUM09FeGwwd2VvdENtYVA3VUhIUTIrRnQvdnc4TU5kZENWalhVelZiVm96WmFXdGEzbUFBTW1BZGR5TzQ0VURLWEJBQklPQWNEalBVVm5uc05BMWNTSnBNWW5uQitlelFLdjdSdGt5MGtqM1dVQ3gzTmZPcmM5emFEVUhlMWNSOFhEZmFCZW9Ga25JWGVFZzY5eHNmNlBJWU56OXh4QlVmSUNldjhhNjJRTFJESVhQdmN5UzdWSHlOMWE0M0RPU0lSdTQ5OUpJbk1wdmFQM0kyYlNwT1ZTNEhkNDlYSENMTnhqVnh2WTV2NU0xMCtkcVM5aENidUdEVnpsT3ZWUXdYbHdubG0zR2I1K28zS0xxN3JSdVo3enVVblY0RXZxMkJDQ09lOFhiVXk3eXJIY0doVythQzduZ0llMThsQ1JuRHVydXBIVnE0V245bzRkendiV09KUnBGUzdxMDE1UDZzRlBVMTdEYzh3WmEwczdZQjJ5UUp1K1o4TFpHUkFpYTl0TS92bHBvTkRQYWJsQXFNMWNkN3pIUHJJaUdHSXFYckRQcjduQ0QvVXE5Y0ZoTFNLK0NXMUd0YTZNK3dPbUp4Vks2NHBBTXlnZ2RuU2hUbUhrTjV3TlIvT3V1andUSXdzUE9mT2VhNDlWRXZacFNQSTBsc3lSdmNRanc5S2VKcVQzR3R4eFBPN3E0YTRjREczTE1QS1NObEVicytVbVd6ZVFaeG5ldEQzemk5K1BtNTI3dlc2QXAxMkFUdWJQSzJvZ0gyalpuaGhzT0d1VW44UkxUVG51MUw0S2YrQlYvODlmNFA4Q2Y4bU5mOW1hYXpMRWZsY0tFczJsMUxVU1lHL1dwS250TXlEbHZJZHBqaklaZTVoejFVekhDS2RWckYxcGVpQUd6aGJWM0hpRFlMeEY3NllqMTE5cWh1T2tNS0hWUldBbE40Ly9yYW9kZmVtQnpnRHJXdE5DYXR4ZmJuVndLRHJQL0tZeTkzcEZoU2FYWmQ1SlVESEFwWThjR1hwSWJ6Z08wVnVNcVRRUmR3KzJxbHF2Vlk3eXZ1NEE1elF4UTNuRVM3TmdRM1laRXdxNURlbEpEZnFuVGlMb0NQR0dPOFJxM2JxMUhYOHkvVkdpRGpwOFo1bDJja29iaW9Fem43OGh1L3ViU0JQekRyajhGSlVaNjNYakRsSEkwVHBuQklDUEVYeXppMGZZRFJvUDRSVGp5MTk0ZUNjc1R6bWc0VTBZNG5oSTZkb1Q3cjQwUmV0SFBTSEF2TTFod1VXMlhvaFNvbk54QndlRzVWTXJ4Y0Fqa1hyUUNLM2p6M3VtdDFRSy9XZ0tNcmVTZjVPbGF4QU9kK0hGNTJZdWJBL0xkU3ZwNmhLbFlhVzUyY2VmMXovZC9zbk10bGNEQUpiU2tHWEZXZkQwaVBWNE1tS0tEbEc5cEtDUXdmSUNOZG1FM0VQK1FBMjMvMG9LRWxHQnRtYU1VanJ2dEFEQm5oVXptbUV1U011dHVVaEkwS2lVT3pBMnBmcmdkb2g1ZHc4NXNlQXM0Zzk5T0JaVy9VdGtQVVIyNUcxTFpyQmtxMzJxdnQxWlEwZVFNdjF6YWtBTmRrQStTRGtIQmVveWJWdVdDbDFwTDZNeWw2Y1dBSE9uNzNIbTk1QWMxVUMyMjlTOWJ3bDZteGgyWGNaYldLMHc4NmJVaFNaSCtJajRQY0JvTUJldE9kWUVFZnhiVktoN3M3bS9vWmZ5SGdNbXpkbURCa3F6cldsZXFBZ1Bhb21hbU13T0hnSkRTRHlZRjlOSWhEblRDVWhlK2E0bEFua2NhQlQxMFJWT0poZGsvdy84QTVtOGkwWjY2Q3VOWkNjbUlLUEpOUUdVTUREUkgycFM0QVk2dkdzM25KUXp1MTVrU3Y1UkVxeGRuNWpiM1NubFk0aUdlWXpIbnVjVjhmYVRVYVg4Z0RyV001VUI1YmZBSHEwTjNZNndrMENoeFRQN1RhdjNPY2JsemFYTjhDL3RCT1ZRMDl3eGFKUGZqcWEyMVFxQmtsM3ZEejd5YVdiUWJYU0szY29uNEdjTUlmRkJacDlFQS9RYXROVFFqREgrRSswV0JIRmQ2ZFRUY2o3elBQQ2NKWkJWbGE0WHA0K0U2ZndINmQxY3NFM0NoUEdEZWtyc2gwUzVxb1d5Y2xMbGVqWXQxV1Byd21uYUJJUDFaT2wrL2Y5ZEZXbEtpZHJqUDJWS0RzOUUvUWw1SkpIWFZnNXd5amJLd0k0amFjNE55a25LZmdkZlA4SndpU29MZFNWa29SUlZvMnlxZmJFL05BL0ZJSDRVMnA3dGRHMVcyRGxkRGMwU1lZS0JWTng0bnpjbFJaV09GY0cvZGQ4Ymw0WWxka0k2ZTNaZy9ISVR2VGc0alRRNzZBS0xSYVdKVTlJOVozMFZEM25BSW9RQy90RExEMGxtcFpTS2ZsNXZzbTdreGsrL1lLR1lFR2FRUURrdVpCSUI1NGVBNVBWSUR0bVYyU20rTnZ2TVNVTnJaUGhUQmlibnF0N29TcWR3aG9TbTZEWVBMSVNyK2RBOTAya0RnUjJPM2ZDdkowa0ZxVWM0eUhkSTN0RVJvcFpkY3RYMUozVWhlZE14a00vd042TzRueUp5eUNDYzVwbU5MSGR3QUg0Q2lZVkovSDZXbnhVTkUvdVpoVDlzaW0xWEVKdWVlcllkWW5iTjhOaTlmN01udlRFbFJHQVBRUDQ1UDNjUG8vV3k4eC9aM2luOFNHWGo4NXlyK0pHb0dHWkFIQTQ0YlgrdzMxN21rbEhwMUdVSzk2ZlMrbEF2TDhjUEhrdVZONVFhNnpKRzB0RHJHUVdQdjIzV1FlaVZhQmFYSGJBNTJ1aWIrdlpNcjRKZUtweHVBV2dGeUwvZnh0WFhtYjg4MWdJTS9RMDdZTUJXQUtpVEthalZ2YUZmYlo0Ym5UelNsTXplZDZRSEJLWGNuZ2h2dUlXZXhOcWZkUEFlY3pMYno0bGlOT2ZkRHNrM0RJeDJVRE45aGZyTDB3TU5UaFAzV3c4bFRycXFVSVIvZDh6UHFTUXhkQnZRYk1neHlXNmdnM00waVNXYWdScnQzbmRxRUt3eGM0L1BIdi9WWU9ITUtwanAvY2RBTEtqdXlFMGVpK2hGbk9raDhkZGtWSEdtNTBod0Y3QWl6YS80V1hBekhJL3hPRi85S2pDY0poVTdpS3JLZHhiNXZqZHJzWlJVNm1SMytPaEpTVUV4bW5pSkRPQjRCbkJ5czlxTUNkNUdHdDhpb1NwOGJBUVRuMVZCZ1M0M2t3WDc2RmVoRWx1a3ZNWlRTNDZpRUlUTkl0OFl2Zyt2YmlZMDgrZENYamhtUDltbks4Mks5MlVLS3RhUis2OFBZNlJxQTRsb0FUZStmVlVlZkc5M1V1L2g2bTFKNHBvY2xGN3NOWHI4VWVjb1JyZUNzQ2o0U0w3a0pvWG1NUGZFZWprNlppeFBWMG43c0d5Z2IzZTFoU3A5L0NMdHlPU2l0T0d0WkVCTENrMXJPUVFGK0VvRmNma05hbnYrajQ1SDd2c0hoRkZZM21EMW1iM0xibjA5ZFpFWjNLeUJvWWVwOG5MQTBWTTl3VlB6akpHdWM4MkhuNmVxeG5MMmRJUmxoZkx0RENWN3ZEeHlRanZvVmFXWUxXOU42dHdXYW45ditDKzRPYjk3Ni80cWFYTkVhVUFmb2YxcXh4MEV2NVVjOTd5SWpFZlk3YXA1WVB6bUU2SXZaSkhES3JNQWNHNS9QWHJiRHJFNHQwUXBuLzhpSDZWSWp3bkY2aVFDRkQ2dGg1djZkVEFWZmFLZGErTnpEWWU4L0RUQzc4NWtoMUZsN1JqNmViU3VFMkJCZXFlWFNIdlNmSms5bUxlNlpya1hRcExsK0N3ckRRRUJLQjZ3MmlWdjljTFJTSjlnT0RnMlV6cWRWdWhMOUhReWlXSVZwVDBLYnBYbmJtemlPdjlEOS9ldjhGM3NkUDE2UmlTbWxFaklzWWJ5VkxvNXpoNDVtU0h4MytWcHRrSTRwMjZtY3FtdTF2azZKUTJQUlBqQXlnT2xmM2lhN0FUWXdLb1BGQnFYd2wxWVBKaDVnakdTMXRIbklKNUk1Y1BoRTQwanJSQWloeFdQblNzb21DNjJ3OEtxYXJNUE9VL2xFWU9GY1F2dFZSRWliREdzd2JuY3o4Q0sySld3OGhjWFdoZWxRKzF6OGl2cWFGVVZBQkxlKzBlWjl2VTBaNVBSbm45OWRzSlVUbUEzRHVadEZuMTBibllDWHQvZ2xSTy94MGJJVjA2ejVQTmhxZ2FhcE5YbzFGei9HWUR3V3ZLUTdtcTg0bitMd2ZMZUlTMWJtelF2MFpSSDNlT2JVWVkrRjdrRXp0MUk0MnZvaEtLb1k0WHFzekdYTWZZSzF4TWhTYWs5S0J5VXlPckdBdlVXVUJmb1pUTzJ0RVlsb0RJZCtaUnlYSlNyWjJ0R0Y5RVdPSDFQdnRLcVhrQmJkYWdOR0VyN0FlMUs3aloza01BcklqUFRnS0FqdnBRdWp2UEkxbEV2ZStJa2phd0FwU3ZNc0ZJY0tNOTg2NERyTFBVdUg1SUNOZkFPSXpFb3k4dHRvWnRJUHlnVkhnMXN3OXBXeElINFoyL0h5eVd3WVN5ZG0wNW8zVDBNcE54OFRvQ3IzZ0lTU0htenJsNW54Y1RZSk1WSDQxbTBDS1V5bTFsVjdudi9mZ1J3K3ZZTGRuQVBJWDhkZ2JFcmFEa21peWNTWUFCL2Z2UGZlWUY4YnkxWXVKNFlmOTdEU1AvZ3hwdGtVdENHTUhRbmFLOFZhOXk4c1d5aTZQTnYxbm5IMHNqOEtsY0FXMlpNZWlBSXFtK2orUGc3dFEvTWVzNUxaZEhMM3drYUdMQldLbVk2dzZ6NklQMzZUUFppTHRGd09MSnFaRUlpZVpGYWkvdkdKM3VFVFdqOGZ4MUl4Q2g3RHRrWmRaYmZHNDZDOENjQzRkbTR5VjBqd0JZd2xBU3dlVVhNd0RlNEtmRTZ4R2xoSitYSGI0ajlzQ29PclRHNzRNRGFxK1lEMSt0QTdqblFVNWQzc293MHpsd0RiT1Y0NHZkbXpiMStDeXNLeGd4cjVrK1ZUQTVoekM2bG1IQmxXd2xPRmVwSXBwdm5nODkxc0JNR0VHVE55TFFFSnNSZ3M1NkhIUDRVbXczUTJmRW1kVjhld1lVZGRpSDZTZzRpQi9pS00rYUdWL0NkRDQ4VFhERlUvaU1EanAxc08wakVFSTFpVFZwNnJ5Z3lvNUlvSDRibUpoNTFUYzJEdVE3UnptLzErWkwvcjdGR2ZYdlpLZTNvcWd1UHZRQjBCSTk3d2RPT2E4QVEvT1E5b2dCL0FKNC9icEd6OTVMRHlUWW5tM3NybURrbTdpVmRUSnhhKzhDemZSRGVGdWRvOHc0bEMyQnVHdGVOM0lIaHMvYmh4MmtJc21LbGtBRm5KRHV5aTZwbHlkaWl0ME4rVkczN0JXS214aWlmNkhtYmZnODVqdVBZb3JJUUxsRlU2WmdZekMwQ0VZaHNBbGV2S0JPVVRHdW0zYktqTStUNUdXanU0eEh6enkyN3lXd1k0cW40WTRCQkJ5NEQ3bFBlaFdOK1czU29raWhRMXNRcVNjVGZFNjM3elhYeCtHdlVnQlFzN1IrdEUwSHN4dXdBUGg0eXBNZlo0dG5STWtwWWJkeVZYR2trNXZyQ3AxU3ZkRFQwTGtGdHVxcGRQT2NRbnJTQUtxeFpNSHF4NDFqTTZVWWVHS05tNUxRM3J6dkFPbTZ6YTRUdlJRNE5KakhOeHl0WUxldGVobnZObmZIZWFOb0Y2WEkvMVVIYXV6dzBqR3NGdTdEWTdjTmVPVVJlTmJVTHB4cnhLZEpBQ1NBb1FJVkxvMzB1dzNmbHBZOVlWVzIzNGRQL05CTFk3clBDWWswa1RXSjU5ZEYvRWRqYUVMa3NyaFh6T1lxTVdvdnI2d3MzbE9TTndsUmxDYktFUHJwOCtKQU14ZlFsa1Nxa3BmeWVqVWdxRnBsWWMybkZ6eEcxN2NFVzI2MEkwMEw5bGZHU2lwVmsya2lFL0VFZ3d5d3lFUnZlSzBGVW01SWhOVDNDVzkvejZQbVc0WUZ2QkxkRVowMEM3OEJ4K2pjR2pQeWdZRnlBenlYNldKMXRjSWptQUxHa0M4anlmNzBVRU41OXluYklpN0FmOHdLNkREc2JsaHZ5ZjlHeUltUmhZL0tON0w4elg4OGVNclp6eXc1YlhKdTFkcGpuYnNvcWhFd2xIdTVSSEVNZDZsaG10R1BzMFlFNENCVDRaQVJHYWV3Z01KOUw1RS9laFQ1UE1adjZKQnhXWjdUNWRicEdSSG5LTUVYSElaTGRDazh3eWRtUGZ5d0N4V3lPVklzQWxPSi9tRzdRR0l0clZMSzdhQzgwOTBodDdDQ2tyelY2TVNCa1IyMlBkSks5SGt1bGgzOEZPbHZTMVgwSnd3bjR2UlNmU3FKM3VITG96SzZ5b29FNEN1Y2JYdEhXdTJmcDdDaXJtSU5vcmlGblRkenc5OVZXSXYyY2xDQTlnWUFWTVkrakJFdTVCaWhuMkZKR0VXK3dHcGI4MjJZZEdYcFdhcVU5QmVxdG5XUEU3ejR4MWhtbVE2RG9sVHRZUElzaVdPRldYZlpyaFQwSGZGK1VJdTh5elh1NDlYWEFNV3FST3NlOVBEMGV3MzVETVJQU2JzdTUxSjBWOUVrMEpMK3RqWndtY2poTWJQbE1jaExqYTJRdEIxaEliVk44ZWxoWTFPcEY1SFBwZ0xkZk5ITTNEV3laRGtJMEo2U2Q3Q1NtY2JEWUpPRE9IY3FibmJLQWtrTzJaOXVSTGN4cm42UzBlRGF0ZGVaNkJ4SnArRlRxR2ZWMi92K1BrWDhjZUM1R3N3VFZ4eWx3aHpBN1hEOG1iay9nb0FjWEkzT3ZGQTdxUHRwOFBMZHdEbk1mSTdrYmNKQ1hFS0xwYis5RDNoRmNub3IrWnpHRlhzZFp5bklPZUxReE1aQnc4T1JHc1BDV1ByNTllOHg2UzRGa1AxS0l3MVp1akozajJ3WEwvQnZrVm43L2Q1bGhBc3VBY1lSZm5zTnMySlV3MVBrSTVMWit4S3JNSlEzRXJzZnluQW5NMllMV0RyUEkyOFFMRTJFb0IxMW5tSWlwQzNEb1Q3eE95cU1VYklja1d5dXVQeWxKZGVGVHRCRWtWYml1d1JVQkJXL043RlNHbGUxMG1zUXUzZXI3ejRGd09SeDNQdFVDL2FKOVAxNHk2d0NIcGVTVDhtNmJVbWxvaXdaNGpLV1lIRW9HUzJSYWRZSXdnQVgxUlNLWWtUSGpiNC9PTmxpR25EWDlIWEFUR3NKcHp5YUFyM25vNmR4RVVMQlB2NjFsY21QeWprSno5WUFsaXFBMEh4NHprSTd3TDB0Tkp0RDlnTmppMGk1azdWajlIUUc0NmdrSi9HT0J4WDVoR2hNcE5EQjBsbUZ3VEpCeFpoQnJWQ2FWUTcyNlo3bDhPbEJ3QlBjd3RHL3BEelZoVXcvcWswaStRREZmVXZ2WnE5YXNETG9lVXBJbEx3OFMydFFWa1FZZWc3ZGpOaFhwVldqQVRyS3ZmOUZTeWtIMnpqTmYwS0d0anQ2RWNpSXQ5djJPYWVVa0xHUkVZZjJRY2dRZkZ0Q2YyNDlrTDMzM0Q0elh1TklPUmVtb0tTSkRxbmFIb0ovVm8rUC96MVdrUnlGRVZtTHhPVU5WTHA1U0ZZdlpoSXRzUGNOVGpyeVFnTnBjaXM4U0hSV3J6c3lOaUhqWU82WGtSemlyb0JDVi9UMVk2a3VWRXBUYkpqM2VUZFVFOHUxcytqQ0lLcENneEoydStRYWIzVk4yT0xjblpmRy9XSURZRGRWRi9LU0N6MlgvRkd2dG1PQTdPTUR2SEphWkh5L1pwSlUvajhsUnF3bHc0TVlPcDRBamNINUJnbElxL3RLRU1WSk1nWldsc21BQVl5RDBnS044dVN5RVVMUW5BWjA2dDkrZmNGME5jRHBaamVqWDV3djZReW96SDgzTnVTYmxNRmJjYmtYTUNuc2l4VUc3ZmJzaFdqakpvQlk0UlliRy81NllrUHltYVhQeU8rMUdJcXpIdnlFVm1BQ1FjY0xFNVJIendBb21GRkNJVWpuM292MFZFZ2x5T2xzWGEzQXJJY29Rbk40UWxYSXRxd1AwVnN4TTZ4Z3ZHR29IWDVlazNMTFVSZWExMUZZTlhyeUROSUNuY3BMTGhTc2E3ek41RWNWanNpdzBpc1d1Wk1BVU5aUmYvbGJJbUxmNEpnTE1yZmF4UWdaSlREMVh1bnBRVFM5U3VpN0crS2p4bmdIMlhxWmRRM0pjcVhzaDhQZzFIM2ZqdDVhTVk2bVV3eXQwN29xM0tscE5zbW1ZMFZZMWZiZHpaMVVCRytleGxLZWx2VytaejNuRHd6cXBTUkswQWJHQ3g3RE82ek5TMUlOVllHVEJoSklScXora0N4T0F3b3R3bXJBMXJIVDY0aVMwamtseURYRkxCQUpLeG5XYVFnMUp3Uk9jT2Q1eEYwdmhWQ0ZqVjEyVXRua04wNUZ4R3ZZUUJPRHZ2eGZ4cGxuN05VUXlQUVc2V2xITWxNZzlXUmIxMnB0TkN1YUVEZGZWTTV1NC9kdlJiaXhTaUk1eUJyS1lPUXg2OVVZNkU5d0NkK3pnQ3JuYi9zQzF3dkppVUp4cExRc1JYbkNJa0xZOTZNNlhIQXEvQldWdEo5MUFVL202Mit4QUNVSkZkdFV6VVlaSVJzSVBld3c3M2ZPbmRIellaVVNIcW1KeFhJUSs2YUpWSG9mT0RjTnlZdjVVaVMvdU5LK2lJWHVtcUkyQTNncUtxMm5IRjd2QlBvcEVOM052bmYvTkhEQTBjREZ0U2RTYmdxSlBZQVJKYXlsZ1dqQlBCNlA2NzlKVWtpVjNYU3E3UEZWNXdtWmJwR2hFWkRJcDgwaW5hT0t1am5XN1A5MHlpUU5xYlByTTdDNVN3Ums1eXp6SG9MWDlWSEVDUExMKytCVG0zYTdKdlVlM1BqcEpxNVdMOUtDcG9BRWZ1OWhiaE9wdlFnRk0rdWJvMkczd0p6aExPTlhjSkl2TzBoTEYwYmRxQ2c5ZUZqWTd3YWdGY05TdlN1WnZKaUEwU0I0dEd2bHZrNkt5RDZTTnpLT1c5Z0JaM1pGZ3E1V2liL2tXamtPSGV1K0lhVjVsSWxBeTZidmdrdi9lOE5LWXJEMnFESlFBbXlkbkUzUzlVZno1VDRiMXVJNWsrWjRwM05mc3ZuSElVZnp3U05TOGhoSVdVRFpqdXQ3VVllcWxiRXhTVWhPSTZSR08reWZWVFFUZjNiRWQ0d0poQ0czckJNM3FsSzQvUWU4ZzByV1VhdHRDa0xXT1pTWnpNelhGclJ1eGJGMEVpSWJCdWdORTBzS0pVa3RqVWtQbUk3bUdLUVUzam1yUytabWFkQUdORkxZMStVcnVONjVnV0E1RFV4TEluckxPRHMzS09uM0gwMjk5eTQ1MGhvY05kUG13ZWF2RXRCZmRKa3hXNlhxSlkzWi9oWGdQZE5sRmpwd2tDR2VyNXk1L3hnVEIwR1FTalptdUJpTWhIa3VrTm14UldoM3gxMlVHZ1F0UllQeVRuZ1BQZVErZ3djNWRjd3hsZy8xc05UdGp6eDV1ZUN1SmlJTFErZW8zMFc2cnFyaGlYR0psWGhRV3p5dHZPZ3NEa0xaY1BERE9uOWtTTk9KWVJOZUhPdHl0TmV2MG5ZRmV0NGpIc0dRN24zL0N4b2cwNEFqNFd3MDAzVnNKNk9xTmY2dkEwTmtNVVRrMkQwTzIrOHAwMkYrNGlndDVOK3dQaFQ4VXdCU1RiYVpmOFNjMEZxekYwOVQ1YkFUY3o4c0FUcTNuVmlyT0R4SzJHUDZWUjYwMlNkVkNncWRYRkl6R2lHUUEvdlFHZlZFbFE0cVd4S0M1RTQvOFlBQ2pkZ0pxZW85WE9uVjJqOGdXZ3Z6WnA5akxkQWIrMDlsUkhsMjd1WW1CNzZoWE4xNXRVUElHd0VuY1FrY0xydWFUeGFnb3o2RkM2cU0rZko1UnlGN3VuQy9Ic0xrQmYwRXRZZ1EzNHhLSVpoM0hQSUtTTzRzRTZJcXp5MGtXa0IyUmJpNEczVElpUGg1NS8wbEFpNG91K3ByMkFYaWt0TkNSOHErS1hFWlhrZnZVZFU3K2ZVb0pvcmg0UGFMV09WZHJTS3ovWGdUZ21XbWs3NzNJMERNUWdMYTZ5dlVHQkM2WDRGL0dvSXZ3S3hxbndFZEF6QnVmYjZQUHBjY0o4bExGV2I0NmMxRWpOWXpJakUwTTVxM0RQRjYweXQ2VmUwS3V6YkFtYldiWGdlZDluNUZRZ3laNXNicDc0dngxamVBVTJlbmJCOGRQSG1FSVdPNDM0T0VjVnE3Q2FaT3E5OCtBanM4ZVhUODF6UzRaTFJ0MWM4N0J2UHNJb1Zvd3h3OVhidDdnVElEbFNzRkMySEZ1OHFoQVY3SUpqMG9nZy9tQStDejRJdnFXdmVsNnRCTi9pWXVwcmo2bzViUGFQSStEUHlUdWJnTEVoYzV4d3dJZTVCL1AxV0N1UWptVlR1Vm9NWTU2RzIxRjBYVU53UkVjKy9MUlcrVHliZHBOVTA2aE50WDBVRFU3bDJ1Y2JYVjl1eEM2d29ZSmVPNnpqc0NoN21WN09teVB5TlJjVGRtK21DOU8zRE5rT04reFhuUllrZFVRVXFMZ1FpNEpSMUFMMXE4RVdsWUYzY3gzRisrOTIyQUtsb1lCOTlOQUhvQ21zVXNxanFOVVBGb2pkZk4zL2VFZjdURWJsNjgzYTB0NDZqVXhIYi9LMFhVamFzSXNQcEJKenY0bDExbmxDay9xUVBxM0lVa2RFcmxlSHZsc2lrc21pZDgyWGtZUzA2WWFGL1d0MFJBT0FLdkFwZmxnN2UzOW54REgvTFdzSWx2VGkwWWtEbGVXUnlVSVFHeHdUUWNsc0Fvc2h6M05UbTBGM0tLeWkvOFFRYjFSOEkxd1VPanA4d29ONnFlOTlNNis0cFVKRWpCZ0huUVR2Q09wQmgwNXlwbEIyckw5TXJEdnNOa2dhZHJmY0ZubWVqbkt2YllBdGZoU3Azb2JtWm40cjBKOUxLbzJ0L0FFZFVORHpmSVZkMXY2SURjeERsdFI3bnlJeCtQSk1sUWpJNGh3aGdFalI2SFNWYnM0MlFXbU91RllkWDFsbkhySHVValllbWV6ZzhQOGp0eHhid0RaOVc4Wnd6cXBiZHVaUktIT3dPQzNZYUNLVVlXOEhscDdCNXVTTVEzM3F2eDY1T3FHMVRHdVRYQ21USVRPcmFYSHVRVWFEMHBBRnFZTENzOVZrOWsvQ1M5elhyT1pLZVFmTVB2Wm1CNGFXWEdjTTZ4bUxLckloNmVSYXpBOVkrdGZSV2tvd2VCMldZSHIvc3k1OSsrd29jVkoxNEczUURiUzNWM2VsaysvY2xGQ090aURaMGJiQ1psd0t0aWYxcWJ4dnRUTnRBNEhvY1VuOWcrRllzUHlkcDk4czRUL1VBL1hsajBtOXNlcTJuSzJpbWdGeE80cnNIWHNQaStzUloyeXRiTGlnWVZrMEZmcnovTnBHenRjSDIydTM4U1BMdFE2WkViZ1JKeFFRMGxVbHF4czFOTjk4ODRxV2liemNZcnBTV2FFeDRmNXljRkQ4N09wUWc1RWtQL0VnZTA0REk3SFgyYzRud0R4WThNUENyWFpEZHdNRXZLS0RDQTNXVnVnSWYxN2l3Ym1VRFJFak9IekEvRUhFayt3YVBSZ08xT1kreDNqaTg5Z0lwMUlLR0xoMlhYYU9YMWg2dWlWOUlGT1NCQXJYc3VVbjJYcmEvcGlQOUtmRHBEeFhmcFlTTGhkcHhnQUZTWlQyOGc0Rm82U0Z1TTNlT0c0Sm9CTTZWZUVyRnFBWjRldXRoWjVUQnZ0MC9sSlRRSUY5RFRDN1lTNjVQcnhpRXR1UHVXTUhHcXlPb2ozK1M1YnIwVzZKcFd5bE1mNFNsdUVlZkl2MUM0VE9DdmJtZGVqay8rZStmUTY4dC9MM2pBdzZQSFVBaXhGQ2JhY2lPZjBUQzhtY2xmSEdtUEhQOWNLeHV1ckh4Yyt5QmlETUl6R2JiYzhnUzFBQnNtMmlkRml0S1grRFc1YmIwWE5YL29BT3VIM2hBeUc5OWsvRkVaME53WWpzYytJenV3SjJIZkNsRitUNEUyWXVaYXkyNkVsc1J2b1BMeXp1dFdmYnUzOWJpQWJXV0dvSmxWSUNmeW1NQWxUNWdaQkNoeGM4dWpsZEVIUGZBQ2xVQzNRU3NUMm02SEhGYnI2VUsvbk5wM2VsZHFIL1JOUW5mMk9IQkJZU01HNXdyYjR4RVdKb2hpcC93TVpNWXd0a1lIdHo1VDdRZzJESTVpN1gwQ2h0elBvZDdycURNV3J6OWhRdkZvZExQT1FSR28ydjc3VUgrcXNiWmJOQ2w1RUdZS2xON2p6NWZxd2wxOU05ck9kNU9jU2hZSHNZNzVCaWVoZENzWC9pZTJiR0EvRG9PcUx2MndrS21TRzh1NXhMUDJPOVEybkdDZmxVbkJrdWNPWjltWFk0ekJjcEpOU3pJTWlsUU9yMmlrWnpHQ0RxS1pDNmRwVklMSDJKd1ZSWTdjZnhTekkvZmpxSzNubmNwd3JydFZsb3V0QXVMVnZCMWJJK3JyRFRZZDExVVNISjE1cXdSOVJVa2Y5RVVIbURjemQwK1ZFVjYvc29ZbVhyMENBalZibEd4VlZjVzV3OVl0a24xRTFOYXFQWkc2ZUxRcVFJNTdOY1FNdzh0Q0krQUUvZWRVUHFmRmxHZ0hSK3libEdPS0dubUtBdGhza2hKWlRvaEQrZG9KSTdFcU5TRFo4RVk3M2YyMFd1eGVzUExvVjJOdzFqWDBRcGlDZTdBM0xIR1NxS0E1MXdMdzhuSHU4M2ZqTkNUWUhXM0hsZnVkdUNmYjVXKzdtVFdScmN5aEs2b3V5UnBxTUVyUFJDclJIZ3F4VEpWWEV5Q0xmc01zaGY5Ynp0eVJxenJzcG5CemJtcHZoTE1qNll5WDQ1b2pVQ2hkUTRlblVNbFpxVmNJdWpZQWpVQ2h0NTdHNDRJUTBGUTBoOVB5Z0pmb1IreWhSQVNxTnY2VUZuUlExSmYvTjBSNWFyRlZNQ2c3THE4WXN3Nk9uZ1lYYW5Sd0VJelpkQTJ3UEZPcVJGL3NXSjVVaTAyRnNLMzFxbTlhRElXWDFKc3BsNEJpMjFudjdhTzd0NlVqUlBqWEdaYldRS1BVYmZlVlppdTdLcVo1YmNXUEh0OUNRVlZtQmZlWjc3VHgrc2Jvalo4OWxVdld2RlNYZ085ZXZURDl4UGVrL1piTHdrb3Q3WTZUQ3JYUXpKV3F0aElaUi92MklrUWRERjFUQ041RmxWMFlNZS8vY0g0a0dLejlyM2tTRzR1VE83Q2RSTGRFMTBQNTh1UTVBWHk1cmlIbmU3aDF6WDVDUksyRjlSNEt2b3FHaE03UWErMDNsbHFFQXBadytxN3A1L0NMNHVIS0cwUEhrZGxLMit0VzRSelBqSXBXVnI4ZWhQY08reWNnU2ZDMWx1bEhuTDlac25nVlMzcE1JaXFFbE4vN25qeklrdGtZTll1dzF2NTdPTVdTRmFGR29oVEcvU09DTEcwUEFTTGR6WUZGa05WeVhTa21iQkNTbURlZ1FCSXZLZUpWSG50TUgzTU94VDR4VEJWWk9BNzVzdkJrTHlxTnJuUmdnYjNHVGdMVGNDYlZYRDRxUWxib2FmWkNBamUxR3pRMzlrb3MxVitwQWV6Nk9maHVseFVteWlweG03VTNZc2NEbXB3MjdES1V1TG1HU05Kc2lLT01qWEpvRE5ESVhkVVVPQnBlNTczbUxxV1VpN0QxMW5ZQmx2SVlidU1KZFB5UXZTMFFzeGhtK2JYd1NsdVFTajNXL2dDdzRhMTRkMVBvQktZWVgvY0E3NkRoM3FUa3Z2aHZyemRIc1luUmYxby91RU5NQmhZQWkrb09KeTkzYklrbkZURGtoOHRKMWVvZENJSTBkemxmMS9JTUNYZDVLRkdjSTUrYW9DZHFTK1lhQlRxcU9IK2o0aUhoZE1xcFBDeC85UThobHkxWnNZWm13VU8vek8yRzM2MTRRK09IM1V2KzZ2TVZ6SzFuSnRUZVJSNWhNeFFZTkgxYjF2eURmR3E1T3Z1N0E0SmlXZXBFUW1kNElWaHhQcGpxRzVsT1VyS2Iya0EraFVIR1g0MGpFbVQrbXc3SmdOOUVyc3BRdmxyTGpJT0crVUpVdDVsclBlTk9tWjFNajlmcXh4SHpDQmx1N3FqNnpPTFNCaEQvUFFXd2NzejUvSk1VNGdsS2M3YnFWU21QMVZlMnVRaVNXeHJOWVcvTXJsVlhkOERROExYMDMzcmFlanhIUW5zOFJoNDZ4eUx6aGlMS2trekZrOGV1ZjZ1UE9jYWdHQTZrMnJrdExPNCtGdUkzOHl6dW85TUM4djh6TE50b1ZXKzZCbWFXYUpSZlVIOHVYSWZ0citMQ1JDSzZBN2oyQ1VLSDZqR0dyZzFvaEh6bC9aUWwzREErT1UvMTJpNWtIdUdrN1hkVWRVejBGVU5vcTF6aTRRMGUyU3p4K0RsRmxVL1ZmdDVaUjArYkVYTldjM0g0VHBiUGQrdFM1K3ZFcFpqMExNRUYvM3YyVkFTQmhTdG9walltUEhaMzllaU40UjZCM1p3WlBDVDdYa3krQzlPMVRnck10T01aK0V5K0lnZEkwOEVaT1UrbDR5Z2E5V3dUVmxvMzJiZHU3OWdQeHFyMG54RnNnUTlwSkdRS3BjMWVIVCt1dFU2b2VJZG5zYjF1dWVSVVc0WFI3blczZ2tyc09rcGVhbDQrQy9tbVJBaTdUTkJNbTQwZWppeCt1S3JtTE5sTXRET3hQWnZocVJSYmY3cnVKM1c2RzdmT1lEbFE0eXlJQ1NaKzBxZzl0aTZPdFJvNmFBdWJDS3UwcHQ4a3J2b3pBUUR0bHJvSXpLaEEva245RzhJdmh5U2RsNldGTGhtVzVYOURXNlVLbk43S1BPZExkaXFUUlFiTGJqTWlrZFJQR25tNzYwR1V5VEliMjVjcU5qU0lqZTBIOWIzNTVkQ1ZrNzNQK0xtNFRrYVF0dU02M2xkUkRHNjQ1ZDJSWjVBYTRTN2MwRFlWQ1I4V0N6a2dtNFhjaEtvN1BZUlhLUis4dHNqVVp3SlpSbzNFUmNGVy9sQndzOEt6RWcwdlFpSjk2aTBLbDMwL3dwcnhIbnV6cDc4MEora2VneGhPQmN3enpJeU1IVG9EalFvS1BlQ0V4czdEOWRmdVI1bjBHdXU1VU55Z290dDl3TnJTWUkyZ3pIbGN6U0xNRnhtKy8yd3JxdFkrWFYrSWNXRHZ3WDQvazB3ZjJTckt2ejBRVC9NSE12aG5OS2xQQ20wdFpsWXV4QVd5dzBxdnNkMHRPdXBDMUtiUUF5MTdmbjBFaW1PYlU5QmZTSUZlbldIQjJyVlNuT0F6OVZzc3FKeTJsWkdvYk9EenhyeXh6NGhSTHJ5akRuOEZSSTNjQWxUM2cxVktwK3dPZGRqMEcvdENpNkxiT1A2ZlBvRDVKNXpRNjZBUHF1aHdudHJTc2NqdFpjd21LSEJENGR3VTZTUURKQXBOMmNUdCt1aDRDVzAvUEdLRDdSdFhhZWU2MEh1WlozYnRRK1YwYlBEVjl1R2gyTXliNFp5WXhIZ2ZLbFZNMnZYZ0VkQzBiZ3QzQ2pTdTR4RDdZbnEyZFI1V25HbXpGZXVsakdwWVNsK2RoazdjTzhjTGM5azNjbWxsanpkZ1M3YU41TWtqUkRDUnlGampaenFlTk5lbDY3Z1Fybk9jc29BdkZrQ2ZRZVpTRW5wZ0h3QXNNeEFxV1IvdDhVdHJ2MW5WZlo3eDEyS2l0MU5VaTM2VXJycGg5WW5YVVk0c0x2RVZCNUtQZ2JDN0Vwb1FERVlrTVV5T1BKQXJLeGthUERDeG1ONUEwZGtXbzBuVU0zbTBGRU10aEJEQmMrcHJ0TWN4UDd3eFVURXFDRktCWmozcmFkcnZOWEZNR3l6bllWZE5qb0NUamhPMlEybmxRbmJvbTFmYnp0dUt0eWJEblBPcGswRFZPTjNBTmFXVHZraUgyMzEyTUlFREQzRm8xSDdkOFRHSXhFMlZGQkNsUWpCZDFkOUROcDZFYS9nOExqL0pJZ3ZUOXJSYlh2TzZsOVByOHNaeXZ5K1N0QjB4bWFvNnBaQjdXcE5XVTYzNXk2RWxwVGZLNDF2ellWbFZlWVlFYVVpU0graFlOMjd3WDVrUWpTaWttODhBM2FsQzFFYjMyTFd4SHJRbnk4WmVXdmQzeFZzcVIvU2d4YUR3QXlJZjR0RWthMVdKdWZBR0lYcVV5VnozZXo1UnlLdER2RFpoVmhNSXFWK2xRSUpwZWdmSTc2SkI3VkZLbWYwL2xyUTdzUnhRUVN5Tk8yOGtRc0tiRUhpeTR1TXArdjlvQ0o5ckJDbU80UDRsRzhidzNEdnF1Z0oxUHZHbHgxT2NTQnlBWEEzT29MT2N5N2paNGFidXlya2p0ZEVDUjBaRllrUFpTY1p5RjVlQmgrTUQrSUZIQnlxSktZZmxENnhJdW5RYUVGKzFMS3hBUFRHZDRic3hGdDhMdGZlbDhKYlZEdEd3cnJsdnlVTE1xN1dyTkV1WlE4MUlEcnQ0bXNqZkx4TEZXYjBxeXZLTThra1JZYjlMWjBBUUpLd2pWRk5hN0ttM1E1V3lHMnpka2tnRVY5MWduNmlpRXJvZVpsaHJCZ0d4WVIwdWNrZWVnd25MUUxRdGQ5SHBhRFIzYUZCMEhmZWo3Yy9HaFp2dmxzbkcrUHJDR01pdm1xL0oxOUJNT2g0SXlnQkJ4MzRXNEZleUJhL1dGMWNBcjUySHk1aEE3aFQxd0F5VjRvbGVSUGpRcENjaGM2TGJFY21UQWordjR3Q2d4bGlaYkJVMkpvQnNwc0x0R2p1VFZaa2FuZlgrRFhSQ1Z2SHlOcmJZM0FrellOajNWbzhvSDBWM3l1RzA5RW5ibjcxeTVtNzdlK04xaFhla3ZUM2dqNzNhQ01zMWErTGNYdVd4d0xMSkZrK3FGOHpvdTV2WFJJQ1dwS0FISVpvUHBsMlBvMFJyMmEvYWhVQk5EeHk0NjdValR2bElnejdNdUlsOXZYNDJpdWFCS3FneVdVenBlN3FicHlFM2lvQkpSUHcvYWl5STBWbXJWM0d4enZDQVVXUWtaTGRqT05JUmZEK2NLbDBCdk90dVFjdFRhcnYwOUlzbDF2MU5RRzgvRWErbm9WRmx3OXBwOStYTUNoWmE5QUM3ejQ2SWJIR3d1NjZUdVM3eXptaFJvZTQvMVY4RFJ6M0VycjdZN2FqbnpEdUt1WVFoRll3aWNyZi9HNHBFY09TK3JjZUR4bDhaRzhkZkZwT0dvL1lhQjIxUTFmSDdoM0JtbHpjaXNOdUlxQUFVNXJwdldVdW9ZcGM5cGVMa1hMSUhUZjF0bjFiQy9ic2Z3WW50TnNOc2ovSW9odGVPMktrTHQyNDg3cWUrSmJCZWNRQ2JjSkIxVURGK1FpdE5NUlhyY3M1NEY2UFV5Mys3YllEc1Ewd2krVXJGaHkvS1kxSEdqV2I4bmt5RFZrN2pBRjRxQzVOcGJyVzdvMTdwWERkRkkwNGR3R0FBS2d1NldYdlVhUiswTElOWlVMLzhhWFZ4RjhzeEZOTGZIV2lVRjM2cVlWd1dabmpZanNPYkYxUTF6THB5Y3lQRFg5SDlnczBxSWc1K2dzVmNjdVhocGJLRExNbGFrSHVGMUZKV3Axd3N5djFnYmlnV0lvOHRwNmNMTkduK2dDTzlCWlVHUm1XUGEwaUwwbXhodDdScnRsTUhiU1gzSzJSUHdTSzRHZDFtclFEWEVjMTE2aUFoMjB3ZGFoN0lYRmhPZS9DOUdlLzYydDRVaTRVemJYTGIyckY5K1lEYkx0U2o0OGR5Rlkwck9WaW1IQ3NUTWk3ajhKaHN0ZkpEVndhTDlDU01ndjl4bmZXeGg5ZVdHditKT3I2SXF6TTArZTNEaU1QdkZzSHRQT0pYS3NIYzZ3RmU4QTNYMEsyK3FLYjhYL214YVlBQkloRkwreVJIbnpZV2xrQVI5MHVHVDNpMHZzTi85M1JoMGlmeDZ3T1VMNGNNci9PS0dEL3Z3TUdGUll0NFB6NEh0THkxTkNlbFhkb29hYVRvejdZWkZsdWl4VmdLemZjL2w4TFEyVmJ3RWFwQmd4eWMwVnRjSGE3Z2xpOUcyNTQ2R0FNUXd0R25qYk9DZ3ZVSlN3UWdWc3NvSnVoZjZFSEx6QjhNWmNBa0RKbGZsV2NnUHVPV2YzTFJzQ1BBTk03V0thRlJWczhzRXpBV3FCWWJxWWRjM0xONVBKaGpTOUJYbVpkR3h3RElOYXF4eDJBYWZOWXVNU2xrbllkMVpFa2lwL1cvU3VQM0NYSHFCd1A4bDhyZFJUUWFFTFZ5VVBIUjh3UWxXd3JueVQxaVltREUrT0ZkMW1ZVG53ZGlIbUMxL2xMQTU5MFBkUnhyUjFFbUpNZUhJMVJtZmVPOXpKYkd2WkpDc2R0emVOYmVHV3JBOW9FQ2VlalZuUEdyNWhUMER6WE5kVjh2YkhGaXNYWksxV3k3ZUxxUkxjWkliMlZNVEFnQkFvL2g1S29mMmlaUmVTelJWN0w3TU9Ta1g0ZVp5Y1JWY2llQUdnTWdNZWg4dUdIVjhhb2l5R25IZnlSTkJaUk1uNlhMdjRsUjNNMjVBV21zWEQ5YXVyc29mbFR3aUtLaFdTY0VwaHZUdVBSSlhJdUFvU1J0ZGZ0SmJvcitncmJOaEFoY2VseVpYVExZQm1idDlzWWZERW8yYnMxWkk4c00zQTZhZjZFQzB5UVQ0K3FhM0J3VDhIM0x5Q1dwMXpldEFRMjhxK3JFcFdLZG14VkVtM1h0QWErWUlyazQyREY4ZWZnNEtTSVFZTVlxWVlNdnl0N3V5SUgxWk1lL1hKWVk4SjhGbHdCQUdQMVNROTR5VUxWNE5acndLWFFBYUJsZkVlZWV6TjhzeTBBNmFrbS9rMzJmcDl5T01aT0dPbGxUOUNVR3krcWlPUDZZSnFTMi9SbkhneHljOWhEbXR3LzN1Tmk0dGh1dThsZTFLQ1ZDaU1mY3pDTGxXeHl2c01YVlpscWM0VEt0M3liTFdta1ZxaDErZXBzS0FTL3o2MU1YaVZwem9QRkZ2cWQzdGh2aENpNk82dExNd2ZRYlFvMHdjeWtNcGN2Z2pNaGNrNWMvWVV6QUNkdXdhWUp1NFVKMVhtKzdPVy9Yd01kLzhGb1grOFN5SWNkTjQ3bDJFeGdRbHp4dVBTOVFPOHJuc2lRT1ZlaFlRdFpvTjhxOXBvdTZqenVIREtJekk3cTRISHNhNkFQUUxoalBWRUx3NzZkQjQ4cFdNaVB1bzE0eGVvd0JhSjc2czljZlE3ajh6STJNZzZpRjJmRC9BY0RJdWcrU1k1ZFBTVXBxOFFLYVI3R3E2V3dmVzREUVhoTHN3cnlveFl4eVdkdWU4VFFKZUNsR0JRR051K0d1NFV4SDFwL21LK3FCK2c2VnZkbHdyZGR4bUt2amZVTXUySlBWR0FYMEJJd3dFNXdyTDRBOHdCelVxYU4xaktNRjFOemlEdjA4TGhZc0MreUtGanRDQnhIKzJvVDA3OWMrL3FDZVFWWEtscFZaU0IrZkU4cDFpbGo4TUlWbTEwV3NWQzRlY0ZBQVhoVWRCeTEyREdvY0RuZVB1ZC95bGZsRkxPcXFMSStRaFhzZkhjKzNRN0pOM0pXN3lLVmtCalpwWG5Za3hrQURnVWhaNm9MaS9qNnhNT0VKTWgxaHl2NXlWUHlnb1dOZE9uME4wMGI2K1gyV29Sb1lNT3A1dnVPQzl3Sm1BZTFDekxlQjlpZUk5YS84Y3hzSjhHZy8yVUtZQ1lHbE84RDY4MWpWeW42elhiSCt6MGVCSVhBMmFaWlJHcDE2ZEZEcmJsSjNzWis3ekc0bk45YzFubVBuUUZCL2FMNEE0bTV6Z3VUaDRiZTFPNHc1czMvMENoRHZQVkZmMGdpeUlxUThYQ3U4NmhnOW5DelVYMExZS2pvZXp6YStzVnFXTGVXZWtNWVY5ZDdTT2xRQ3FuL1dqRk9ER09TcXVrZVBzWTMxVW1pa2I4ZTdzbWZRdDE4QWx3OG5oMEh0eUExbWZmbmZIemxkYXFreGFhZVhxNm1yUURPME1zbHVkVHppVFhUdSthUCtVdlVIeWhqQUZrK2xvM3BtVXRWalVLaGN1WHdFQjgzQy9JckpMVDFPYTM2dGdaNmhtWFJFbzVxMy9NT2RzT2VOSlpKZXpCbXJRakFDS1FHVWxxUXRvM3pIVmtxOWpvMlZXUUZybmFWMk55VGRCVytzeHJKSXRzd2RsK3NCZEp2M1loaElhdkJ3a0lDUWpGd25mcnN5bmh0U1prbWJRQTVYaXBWb3V6bVpsS29IV3paU3BkNnkyL0oxcGs4M0EvVlVHcVBTM0N0UXFiT1RzcUhjRWkwc0tCK0pidEdCTXVPMkhpVko4a3JSMnRoUlZZQ1NkamhrbHRoK1BIRzVJODB1aHFUNmZRMXJvUjh3UjF2WkpUT0xsb094VjA0bFhnZTZGMWtVaHd5K2VIWllBOElpRFZCR3g1SDVsYTRJbW12VkFVNnU5RllRZVM4R0JUQk05Mlk1a1cwelRoRTBxNHdsb1NaM1lPTThyYkRJK0Q2dkg4VUFUSVJQd0lIdklTSGYwazB5N2FWVUtiSVJNbU9SOUEyY01mUCtqdk5UeVh2M1JPQ3hEeExJZ2hOdEpDb2pzaUExaW5ZSStXazB1b2thOHIwaXRYWW53QVJ5VmpINEhOVFNXWG8vZE9PWFhKOG9CbHhRY2J3UjFGTnZGbEI4VDgzbzlQOENlR3JyeEx1cHdad1VuS3l5dWJoWFc5Vldoa3NnMHZwUkUrbFdtekhSQ0x5SmUybjJwdTRpYno2a044eU9ITDQvUk9TWjJqZk9ETndWc3JZRk0zbkROYVZHamJVbGhFSVRFYzdBVXMwK3dYUksvWkxubE9COXZrLy9XcjVENEk3a2paQWErWkhHQVlEUS8zODdVZ0Y3SXlXUDN2QkY4eUVJVnB1WEN6Z3QyZmpyejNvVnc1VlVEZWFmMEptNm5DRE5FaElSSmk4MHllNzBtMmZJVTVwY215OU1Ia05tSXpLVjBUNkk5cEdUS3NlV3hTTytzWHJkLzBqcXMzTXd5aU8reUdhd3dhb0xaWEZxQXpRRTV6Z3NtZXdMYXdzRWhYNVZQMFlHT00rUlpjNFIrY3RQeUZxL2RGOTR5VnpKbFJRcldMTFpLTFhKMzVHUjZhN2RuQys1cWZJeitEM0lFMkUzN1hkcFJrV3VqNThNNkNsT2doazd6clhMaWpXTkQ1ZXhEc0l4TjlNVGR1UFN5NEljVm4zQ1g3R2wzNlZpNUhNSTZ0alVRVVkxT0lLNWhGSUZ0ZThGYmdSVDgvd2ZIZjhIVUxrUVRCbFc1UVNsc2NjR1I4Uy9hQmRRQ1VueTJEZDB5TWtzN1gvOCtKWWhscXdoa0NmOHQ5L213WDc5MUlUdHAvUWZ1ZTdIbUFEMmUwZGxKSnQ2SlR3aDVlclFtMEhpN1BCU2piWHJZWXVXZWtHR09EejMxMUZ0WUJYdEM2eFZ5OTVZaU1uRlFXWkVyKy9YY1FiRmZoWnRYSmZ3R1BneVBGVXM0NFcyVEtmSktJRmJVMGdYTDJzWTJIWWJhYU5jMU5RY3VYUE96dnZDb3h5cVNUU2hPazVabXNYWWVvbzRmd05qVWR1UndlVktGcE5tYWVPRE5PNjlzcXlXQ3lsUkYzTVhPdFVYNkh1c2Z1amt5ekRINys3Vy95V0MvMy9LeTRpanE2TDhsdEI1a28rMmcwaVVLSjZMWUVhVlZQZGpQUnREMFlnb2M3NUJwbm8vT3JzYlJyZFJaazA5K0lIQk5mRnZUVDFoTWMyNUU3T09zMlJPTnVscTc1NEJ3Z2Z6WWM5dHk0OE5ETWZJd0ZOSlAvTFN4enp2bzg4ZHBFTHhqZ01KQUpPa1JxRDcrT0FnMGN6QUJmM0l1RUh0YTFvVkMrTHdZNmZyR1pqdmJEaTB3UzlMSmI4eXovWkluNVF5cFRPTXJNMVh0NVdmVHhIckw1VEczdnJMZ0J2SktsUjdyaG9GMlp4dWc0U2V3ZzBtNWVBSTdKU1h6ZmE5aUZkYkNRaVU5OUxCQUE3QmRLUXg5NFRqWjZtcHlCcUhOMmNBWDdyODQ0MjR1Zlk1eEJ0KzMxQTNWc0VRWlAxZ1RUUjhDUTJPMitNUEVWSVRsSnpQNm9WUm9VdVArWkxtUUtjRG1UNVF6VkNXK1dqdzFHQnJaOUxmWHZ6RFJYdlJMY05lMXFmUzNuUDFDL3JWdUtXL2pBVGpGMlNuV1RLOEY0T2FlbXBGbnlBWnBCWDE3SlVjMmIzeE14Wmo5ZGI0QmorcFZYWlFCdEd5cisydHVCSEdVTzdmblFzR1RtRnBKT2ExTURKSFF5Qlp4aFNUd3kzQ1FwRGZmNmw4aWJkNmJWdDlXZ085TmFTOWNZSzIrQS83YWtXMmxybDNSMDY4ZVJYZ3FiWGd6VzFpMythdUZJN1ZUWVR0a2gxTlFiVW4xUzliOEM2M1k1WG4xS1dHUUJwRDJESnlmWEZVbXV1WDJaNHZIQXFuOGZMazcrVzBpNFFBMjlUbGxhOHlsMkY4N1piT1gwTjFmRWl1aDRQQUN3TjZUdUxUYnpuTW1YSWR1Z3pPWTU0RFcwSUcrQitYODhtRzhwdE9nVkFxMlkxVGF6QUNpK3hmU1FML05hK0R2M1hoQi9vdHRJMlVsYUVubEp3clkzVUV4ZWJNbGthak9TZ1VWZlZoeGl2SmNhamZIakdtZHh6Mm9URWM2SU0yaWx5MDZMUWtLT0R6SVdIQ0RVdTczUmw0RXBBaGRXQ3dCbktOb1Zkb0lQQnU2Mk54ZDd2TWVwekFuQjdUZmJBR3I0Rlh5ZHVDQlpXc0RqMzJhWlA1WmV6cHFpV2ZWV3Vybkh2dWxxM2hRTEFxM3lmanhFUkJkQzVoaHkyMWo2ZzNKMjBQencxTVE1ZTk4d3RZUlY5U1FZWEFyeGRKY0l2dVppb0kxaGFIemNTRWwrZGx1bHFacjNhQ3pzMTl0QjZJMnRIN1prQ0ZZNDNrVUwzL1hGZUMxK2k4RXlpdlRPRFlCeVV6RU9zbUNUVHdNRmhzSHpCcExqVkhSUlI3L1NPbkJ0bW5QL0hobkF6UGhRYXJhdHhBVjNxdmF1TEI4K0YyazhhTkRQclhodEFyaXBoQjdFbTBiRUxIeTZsQ2x0czExRnNzODhMNitHMWdYbnZtM2Zia0V6d2tSdjlmOVdFQVlUL0JBcHdCK0M2d3Joa1ZpNXdRdzZISFFJOFhQOXNiTGlGY01sN2QyUUlOT213dWNsSUY2c1hUWXRwUlJwUTIzN0dycWJrWTBWZit3WFRpWVZ0b3NNMkRidklOU1Jjejkzb3dVc2pnMURCNVhvYmNIRTBPbGZXVGtyZUg4VXAwcWxpL3E0V0ptUEpMLzNkS3krR2dLeGVMSDQ4MkxkRVdxdFAvZHY4NjBVNUYveFRKMWx0RU0vcC9YRWRHWGMrbDduWDByaTM0TlhiWEhORU83bmpwMWJiS2Y3K3RWNW4rYVBEUFU5VDEzaStqbkg3cWxSZlBGOTZsMTJzSnJwVGRkLzhoVG5Ici9TZk1zRGRtVXNMcjdxL3hwbWNUSzlBd01JeDZ1NzloYXd1MnptN1loK1RSbDZUU2hOSmdhaDlIQ0RkL0pNWE9zWU9MMWRKVTVnMS9LS3AxYk5uc0puck1rdEVYTXhxaVc0cVM4R250S1hpdXRJYWorUE4zS3diNVV1dzRpc2htRjFOZTVkbWE3QWl1YW9NMDhSLzZBL05qZ2txaEp4TlZqMVlNTTBRSzZMTDhvdUFFYWRNRWZQdEpoWWRkWlg5VnhnczVIM2RyQ2dlbDBuUXhDV0FNclpZWWNhR01tbEIyMHhBNGpRRlhBQkM3aWVRN3VhUTUya0VGUjBxVHJ3cW1ocERMQlNCOEZ3cGxtaEpOM2Z1dlROclhsRWU1MjVvVEhQQ0todVFlR2tVRzJEWW4zUGlOQTZnTWhuVHhIZy85TzJqRm90SzR3aTdGN0hUbTA2OXdqVnFJTTUrZUNyMW90dFlEcXArN1VQT05qSTU3eFR3Y3d3S0VocGY0SHM4NDdodDB0QkZEV3o2bE16d1NtU0xURHhIMkQ2UGdweVNLemJDOXdIUzJ0bUF1WXFJdWFrWktMb2VFZC9KN28weW45OTVxM0RzQ3lVY2FLSUlBUjdveDJqdUdNTE1MZkQwT1FQSnp3NmMraHVWekxPWWJsQ0xlVlIxRDdQWktvbGtVVmFFdjN1Um9WeHdHaE5SMnEzcFhSei9RK2tId1hLTFFYbXBGczZpOU9zYS9veStmdkhQbk1IL3BmYzZveFExUDVoNHBCSGhHQlY2U0tWaUE5VlJGcmp0VTRXZ2UyZXYvVng2cDBUTElZcE5BR2NTcU9NbDdITCszL0g0dXI1NFYzWWVZb3RnRkh2ZWZ6ZEFBN2F4dXMwaFJPWkVJMXlYMkN2ZDRvWHU1bzRYaW54Yk9QNTBJR3JHdG1xZGxQaUhUTVdqTDlJK0JuOVdrTUtaWUUyQmlOSDFqQzNPNEFFTGR5QVc2YTA0WXRqNll2elc5TGhHNGplcGNRWnFScytDOHFhK05BK3hUUWxxWStyTHNXQnFua2paV3JQMjhUYzJ1VEN1VFBaRytwazZ5UjJxRlVSMExpY1JTclI1LzN1dGVXR3JPcC90ME9zYXU0VTVJYzAvcGxWY05seFY5WXpXZHJNRjJ0TUVGK1dBeXU0Z0xrRGZQeUUwUVpiUnV4V2V2QlNvTHRWQ29GRDNqczBVWFN4L2c5NzdpQTNXM3doVUwzQ1dtSTljcFZCOGVqWllyVkhRaWdiUnFsTDFMVm5LZTA2YVJ0VnphZDNFU1dMRTNCc3F0T3V1WnBOM1JsRUVZTlNzYnJsSGNoSjNKUE9EcG45Rk9Hb2V2M3NETXVGbzRxUkJIcjhPVW5UVXAxL3M1T0RlYlg3V1BaSW1qU2NKamVnVllnV2NyTnZDblFIN2lLUlRHR21lMVhudjd4Nk13aUJnZE9TV0Rrdld3Ti9wQkNxMDdVR2lwSWxQNkp4ZU9Pc2JLbzJ6cUtOVUd4MElWN2F6VVltYWRWbXloOHJZeDc3ZjN5bGtRY2JiTXlveld2Ni9zRTY4ejYvUU5XWnVzbGlGYmRIbXNGaDFXVGhKeGlSRjA2d1lDMHQ0OUpMcnV2akJoRFduWHJrNGVDTnRIMmwvY1BNMm82SXkyWU9FNzRzRkhqVEZtRDVYRFFzNTJZWkNVSFdJLzVWZHZXWWZzNzE4ZHpDUFhRZFRVMzgwUGdJcXpmSGJ2Q3hZNHp2OEVDc2djd3NqMy9zZHFUbSthNUNoUkZHT0tlcFVZdlhBNjZkQTJFS2dYTldVZXpuYmtNYzFEdWVwZDdQeHBhSGg4cHcxNkxGNXNhcmVZamFHclI2YnJ6UHdwd3BXancrOThkd3FsV09BbDRZV0prZHJkSGIzeCtabEh5UjErclF6N2NMaXZCOCtmRmkrU2dDU1hvZlRsSnl0dGJvOEVrbUdvai9Rb2dkclkwM3NMK2hEWWN3a0dVKy9CditjRUNQWjFucmpVR2I2d2dxZlVSaXF3Q3hyem4vYUY0cXB1U3dqbXI2ai9TaEVDaDc4V0laWksrVnlBTDRKa1FkM3FWWnQ3dmZGRCtWdG9YMGFxdGxwRVhJb3VQL2hta3VyZkhZZ1U4OW5zM2dueXdnZjdUTDJtUkl3OXJuQkpZMU5aRmlpU1VhOW1hOXd0VEQyV09Zck55Q0NMR1IzV3RTVklSY1NmK244QjBRMzA2bnBRdk5nOVVjSWs5WXJUMEdGVVFJV1pualNwcFZreEw4N09aMTFseU9pa3l6RFdlcDREcnlWTnlyZDE4MUx0OHJ2UU1tamRlVGdvQkgramdTWWFrcWdPVDBCcmhTNE1JMUMzQVBYVnpsazhaTUVnRGg3WEVFOEg4U2Q0RGhBTlcvUFFpVDB3ODcvMzMxdlA3R0ZwZVljZWhxMmYyNEdMc2hxYkFTekVMVjQ0UVNNOEJNcVNmWWsyV2FWY2VKM1lRSllNc1FNcEt6Yks2Q2ZQcGZveWpVdmtsNG05SWZxanZBOGtmOTJWSW5DTTIwMjFvcXNLVHNDa0xmcnlBd2hERnRIK3hyUE1ibjBneHdVUGRKYVNhZEFSOWFzbHlsOEZ6WGxwbmFhRysyZFE4SXlpcWM2WGFoUncxMHJra3diUEowcFFXTk5LaHM0amFqNjN5QXB1cDkxcjR6K3pTSHNwTFBMektwdTNkUDZDd2VEWUVyRjdpUDRObTNZT1RuNFBhcU5aVEoyUzVnNk1zelhGTEZXQTVxSUs0Z2dQenExUHVQdGl0dVU0d3BHMVRoOFFpVEFPeDhXNmZVUEFERlN3V3ZwSTBJSFhSYnVtSldsRWFJd1BPV1E2T1huNHpVZThzeFMvL0VpcExxbDlMVEZRc3Jyak9wWXQ3ZXZ0ditqd01XVnNHQVZ5aEFKOUlmbFBOUU9OK1I4STZWa25FcFk1ZFh6NzRnTW00eVhiRHNwZlpNM1NwNUU0WHV4RzBBREJGZFVxdVNBaS94eG9lSXoybDJmanJpOVRST05TYWVXN3Q2R0RsYzBwRDl0NkJhaG5EMmtINmdLWW8yVzlnMVN1SjRXNXRVNWtnNXF0N055ZEpzVk56WVNhcmdSMHQ2NG5sbW9nVDRab2duN2h6MkEvSHFMUUp0cnlDT0FEeGplOXFQaWxaSWErcDJGNHplMnFpanpHTFFCbWFvNzVIV0JDZmowQzV4ZXlISHlacUdmcjlXc0hXN01wSDVMWllSNmlia1VOSGxHejF3NVVlQndadU00bHp2YTlWTElaNTNsek1XWWdMbVRocmppWXZOcVUrTStWNDFjMVFYczVjcmp0NitrbzZRMCtudlFyWDRhS1R6UVF5Y0hkMEdRWS9ieGRCZkVGZ3Y3UFB3OUVGcFY2QUppeWxTTkRsNWpLWithY1JhWDhCUElJbG1LSVVoMlBTUUdESjE5NFgxdWVNWmk0bmJiL0dKY0tEYWlnNisvNHlNUFl4MWQ5K0dHMk5LY0VwNTF1WEkxSTA3S25LZlorT05IdzIyMW03OWdaaGl1ZVBYSkxvT3A3RkN5UTdqK1cwTjBMV05TbmRhUlB6anUwVFdiUjczY2d1WGQvZ205cmdrOGVyU0F5VHVsMEQvYk0venhlZmFjWTBYM2g3eCtsZ0ZpVXNzWkd6enN1YkJ3K0J1eXlMKzQyVDZRbkV2U0ExeDhDUDhmNUoxemRtUjREcWgyTisvclc3THVtL0pvRmtpK0w1SER6eXBsY1g3aGN3QXFBS2orTlNka2NpdWhsaWw4WUkwWHNoNlRmb3JpTVdZQnJQMDZhZzhKTzlvanBxekJpbk1oUGdhbHFyV1pneXNObWNyeVJpOE1zRHJIK2tKNTJwWS9pcEFoeXgrUlI2SWc5RXJhVnVuc2t2ckhKMzNHYklqT0dRb1ExYkxnMUF1SlFEUmU0OTBRbGlLejZjZ0o3TkkreWxyREdOcm1CWFhzd2tHbFErRmROOEcybnJwNElDK3FnWSttZGJjOGI3b29ndDNWbVFJQzJpUTZhV0k3ODB1K1RpbHdpaldsRG1MbEZ3Qk5jbDdlTlptQjFQOW1UOEwxbDRTUFF0YVlSMWJ1MHFUMTEzVmsvSFYySCszaTVuRUx1OEVlUUFtbHBUcWlYZDlzU3pNUU5hVzZyOEFlNGNBamVuckpjc3Q0TUxXZXpLdVBqUmoxODg5WUQzTlp1Y2NMQUdlQ3ZGRHlJMDZteUUzeUNRUUMrVHpyNGhucnlZczNRVHRmOVA5VkoxRHhlVHBJbnh5MEsvdDVQeVZ0UDM4M2tZclMzRTJadXdIRlVMYzkyUXRTSHlBZzNNTTF2c1Q4V3NaTTJYRkpNcHEyQ2ZrUHhKWmZJcEdIVXVkTG43Yld0Tlh4VlNPOVBoWFZ0SjRJRU5NeEZoTEpvaU80THZ5a3c0RlZ3WmJsY2pDK0lxeGNZcGV5NlRvMTFEQVBDYUwxVzBjQ0xNYVlQTnphbFMzT2VJcGxPNHJnOW1QNHhSMFk0UTNqcjNseUJOUkl2SGcvajcvOUErajZsV2tkMFV3TG1JWE0weUVjMXZPVjN4VGRVWXQwSDVrNzMvcFlNNmszK0liSFRva3B0MWpYc3ZXSVVJN1cyUVZlMm9KS1duL2JYQW9keFFTVnUvZUl5bzVRZFVuZGJ1Q2hjeE5waHJuaVcxSXk5WGY3aTYzdFVPSXRYUllGU1lITThSdHpTdVNUdG1PNjVpWXlnK2dxNHVxN0VsYzBGeHQrckdqa1NVakVrRWlXVEpXZzMvVmtPVjU4NWZZK24zOVd1d3JtS3MzRDhIVFFGK2tZenFlVWZCV2ZjbFZXdEhxMjZZdEpLdnBVdDBreDcyTnNPVUNHSThBTnU5Q1BPZmR0SW1HYks0UEJLNkp4bFpwdXBKMlY1Z1FyUTBtVXRseTVWN0srOVlZT1YrU04zeThIWUFpS3pTdWNJZ0lQOHB3M2luTlU3cndVVHBUdzZMMlN2d2U0VXJFRS9YUWtSQ1NnTEw2bmRSSVpxLzJ6aGREajZZcDFTbkVYR2tBSEMwMUREdnE2ZVhPV2VMK2dCZjBrdzhLVjI1eGhiK0FZT0Y2Ky90Rlc1aHRhdE94aEI2UGZoNVNKMkU3UnZkT2xWT1ZlaHk2dktsK3JrZGZTVmx0WngrZnhMTkVQRUtGdFpPTjliME45ZnlBZDVwbmlmaWc0TDJjWkpMMTQ0UVYxZmw3Tlo2ZnVTN0ZHTHNvLzN1eDV6UUw4NDE1OWFJT2t3UUJwRm80bjJYK0ZxRXQrN2YzekxZSThSdXROWTNYSDJuRkNENnR4TXBIeVFEWGdMVmhKdkRKbFM3Wk1mUzFpenZ5NUQ1TW5UMzlvbWlDNUYxc016VEFhOVJTVkRnbzJaZGhzZkZ1cmNPekRqcE5mSk9nUEZvLzg1OGZHWGZMMjR4bXh1ZENMSy9UQzg3TDJWTlRUT0p1QlBZcHNMM2xPL0JkWXBWYkszb3pDZGxvTVVobEphNVdWcGJSTFRvQ29mNGUwTUMveng4QjB6Z0NQWWNaWHZ2ZFQ3V0hKMUxveHZWUGwzWEJJNDBybjR3bTR1Y2pBUGJDUmdPdWZ5Nkt0YU9nTmhtS21CK2V3QU1ETi9yTmdEd25EcmJRcnY1NFpaL1M0WHlMdnJSUDhQN1pQbzJDY1liVzVIdG81elRxbEZQSXR1K1hxVFBiTmhqcXF6VlZXL2FjTWtiTmFYeXBJRnl6Yy9WaGRGTnI4L0MvNzZsRFBHMVlsZ295ZUZCUkpxQVlXNDIwVmpaRlZVV2gzbDAvUUFvT29xLzJ6YitiNVNMckliYUFwOXVVV09XTkc4QzZZSnBqRFlDelZHZXZUem14UkNVb3kyOExjc0crN2RoWC9vSnplc216Vzg4bzJRTlJCSlhtZmxuUkdjYmcrSElmMTBlSzg0ZS9vSktVMkNLR01NTmlHSVFTM3REdVRKT2tRRTB6QlFTejM3RXZkcmhGWnFJNTVQc0VJdHkvRW5Id1RJR2Y1WU41Qm05ZEViUXg2KzIrUHd4a2cxa3pHQ1hUQVZMWDhuU0JUdUJsNEZsUHN0ODZzcDRtd0dPYzU4UGltMkg0R083VFNaaC92bDNWOTVNeHFnT1RnYTRRSTJNQ2cwelZLSHVaM0lIaWNDU2hvbXVqRE9vYlZDeDFVS053dGZhYnB3NGdhY1NYckROTGpzakNOa1ljL0VST2trTnJ3YnVDYW4wZEQzNUdNWHVIUUZsMCs0SDBONC9QanNhMzlyTkNOcHAzU29kSHhMa1ZoZ3VyYnFqVStEVThSTGxkcFRaRmJDQ0dla0RUUytrUnpReDhjZEQ1Qllzcm82K01pV3pvQkRxTjFGZDV1WnZxWXRlQ3VYS1RsNTNTdVV3UmlscmIzNkNtd3pYOWhvUHN6RGRVUVRxOEpNVEo5QlRmQzZ2U1VZWmx3QXlpUEhZanpHVmMwK0RCMTVaK3E2Vk9nMk5UV0VRUGkvN0JLWEtFNy9GMU1yYlE5cmxRdjQrZWkxcEt0NjZ0Q05oYVFUT0srZzVLajdsSGFjRVdYMmNZMkNLWSs0MmQycGZxNThaQUdHL3UvNW1EVE5xcDNldzdpY2FHQit2dHFyUG1CR0ZiMnF5Z09tbElMdDhoMGZGVlFhWFRhZW9TMUhoZ3Zuc2NCWHpaZ2Z1VWpQbkRyS1oyV1AyRS83TDY5bHVCYkxEaWVPcEJRanZOMkVUVWtnYm9oeUttUVA5dkVwalRUZXJXM2g5SWFOMklxd0J6MDFNbWtEVFowNkc0UWVPbXNwU2J6c0wraXVPTWluT1AzTWRMam9lV0ZiUXp4NVM2YzFWemZVaGdYNU9QTlN4ZkkrUS9ld1FnaW5lYUdBVG90QVZaczlwSkxGRnI5RHNMRHFYdUlWZWg4cXgrQnd1T1hQUU9oeDlHSVA5OHJSSVJqV3pOdzNSRXRpRURQMEV0Sy9ZMVRvSlp5bk5UdFdmZDZGT3l5ekJsY3FCNWNHSnhtbVdrV0hRbWhpWENTVmwyTnVMVVdlVEtWeDRxaUxhV0VDU0NxOHQ1ZCtEWWc3anhrUUo5VDJ3NWE2eHR2bGlHMUszbmhRVUhaVkJGNC9HbHMvUjdXa3dXdm9QYjFtdU5GM1cwY3lrcUs1a2J5YTcyQ1ZaeEJERDVjeTYyazNmZ3RHZXpvS3hnazU5N1ZobjEvclJ1Q2pNOVNpK2tSVkNxNnExTEptWXlJSjNpRGxuR2VSWHp4MHdZQlJibnF3TnRBTG5HSUt3a2NiTlgrczd3MjIrQVdGeVdndkJpMml2VTNndXJxS3pHVVhrZ3E5enlnN0MvMGtJQ3UxK2NadnAzMUFlcnlzUVRsSzhEd0VvL0g1K0x3bnN3MUxoVlJTT0dnZDRYOTRvenNQbXVOQ0xwNjhDaWtKdm5hajQ5bHRMcitNb1JLVjRnV0RPdDRQd0phMktnZXdnY3JEVEJPV1ZUVDhmTVRERlpDdXY0eXRLdCtMdU12cUFLLzBjS1dBb25hNjg0R04rdmd2WEluYm1vbnQxQWw3b1dnNmU0UFVqcEJwbktnWFRPNWQ0TFJ5c0xLWkp0cTQ5VDdHb2hFa0k0ZVBjTnNXcG5iSjc2YjFIZnFTNW1ESHVKTGJXd3dqN2oycEdXeGlmdUoyVEJnb3h3Ulh0ZERzWDFudUdlbk9DZFlBenhuZk9uRlRVaE9SNVVSalFyMDlibTRGbDhxaTd0ZkZEQTVnbkppVzBmME5VL1dtc2xnUXM1eTB0Ym10VUxHaUFQWHFUVUJPN3QwMHhNYXFmV1JUWEJ0UWc3NjA1Y2h1V211U2U3WEpONzc2OTg0dTMrcUxCNEI0YjRVYzcva2pNRWsrVWhsUnlFQTRWcmxuVkg5Zk9oeXVlMVlWdExiWC96NFpETkhyR3VpdVAvTU14Vkh4aE5HUUpZN2YxWjRETktqNitlNE1GVC9zQWtxcGZzQnRWd0ZsOElLVDJJUWF5OTNVakRjaFhWNG1tMytIRkMwbTUyUzFraVhJWkFGRUlQOE1MTUF5VXJxYlNxTWRvZU5VZ212YTFLU0Y2djJtV0p0YVhnQTJkcm03azhhcE1yL1ZMUkNSRUF6RGJIUjVRQ1JTZHdLcFp6L3hsNVRINHNZSXQyOTZ5L3ZwYUovTjU3RUw0LzRwRmY0YWtzbTFvRDgvL2pneUV3R3lYUDNmNkNzT3h5WTB6MXhrNXpVdXZzb2UvQndqV2dnZG9WR0ErYmNVSnZxRkZMZ2xIclQvUDFTc0lETkN1ZWQ2Y0R1Z0xyRFFzVXVWcmlVWExMcnlGc21YMWFCeE9VdndDd3UrOFNVWlpzQk1GNENnNk9RM0M4ZGdVR3RXbURpMURldjFXRDhNL3pmeFJyd2MycmY5MzhZeEhsRS9FdnBPZkQ5QUgyRjZQNVREamNsV2lOTjFCb2tyMG1MSE40aHdvcVkzbG5Kek9hNGxDcVArNnVudWQ4VUIzbk5hOW52RTZwYjZReWdMU3RMZ2dhRk1JWEkwcmdGdFpkbzdRZnQvTVF0Rm9ud2QyKy91ZEFwaThuQ0pubDdsMEVYTHkwWlBUOGl2Mm4yN1hnc1JJQTE4WTFSUFFKU2FtN2hadnByemNudHdkekRsNDB2RDNDazBQeDY1QlFUYTZUUElOaUljVGMyenpwTGVCWStXWTJmYTZmb3BIVGw4YUF5UUM1VWhEMWptTk04TW85R1JQVzZSM3hibDJiZWRiWjZIUnVhc3VwU0tnRVM1NGdvdmY3Y0FrSlBqbVA2YWxpKzhDS0hJY1BoWCt3QkU3YXRpejdRSDFxRUxrU2VueFpoR0JpUTZHWXE1WllVbU0ra2kyOENGaG4wV2xPa2swdWRkdnFiZlZDZWowYk44T1duWnJiYS90bndhZEJKMVhFM0FVM3FVRTZXSzVTQ0doRDFDSUVMckdLclRjYU5sWUI0NjFjZUE1Wk84Rzl3dFlIOU5ub0pDejFlckdWWVNVYWJ2MUh5RFBxd2NhZ1RHMmRneStOV1VtY0czYllkNFVWSUlRQlNhc2pudncyblNteUhxUGY0TEdwUjRpQ0tZRnVIdEk5Yk1aUW82VDFReW5yakRHZHRlNFhabHNmSmNDNThKelJtUnplYm4wQjVrZmV1WVErQmY1dHdDc1pNNjhVNzJWOG1GMzJ4WG1uSi8zTzRHcGZmckZWWlJZSUhtb1M3Q0U5VXFoR09lUXByQ3B6WHVXNmZ1OW83aFlzblpRb0JsUFJVbVp5NzlsKzN5Qi9ZT1ZmZkJ1MnVsbTM4cjVmeGo0NW96UGhXZVJneGZJZW05VUcycEVnUU5BSS85RWNxdDNxc0R6TytvcTR6MGxENkF2UVlBN1JZN1Q5V2UrQXhFZllrQnk2MnkxTW1iMzdlMFlWNTRlRk1lM3hLQm9UOG5SQjhXdHJQbDZpTVhxUE5EZkkrTUt1V01CTXNGdG5JSnQ5clBoRWtiUEowYXBBQUpkb3h0akh5NnF4c1pSSC8vYnJCTGlYYkpDbTJTelVZeitGNERta1NNcE1icEdpbTVLd1VRbE83QzROeE9GS3ZQOXJqK1FSRFpPNGl1T1A3ZFBNY1M3cndaY2tEWWlJTHN0aHRuRE1pRkErZ1dHRnBJM0wwWmpOZjFEVWd1OGZlQWFZMTVCcmo4NE10Wmk1d2RJalNsNHZPcDRXZmgzVXZSVm8xNXk5UWsrQkRhRW5qWDQ4SlFwMTZaRVcvR2RpZGtQMXMxbzFaWmp4OHZWNElSNVZocnhMU3dQOEs4a1IzNHNYcUtqZzR4NENxajUrbW9kYnJQMCtrNlpNRDVUMDArZVV1Q2luSFF1Yjd6TW9FWmtIUUxQd2R6blJWUVBuZ1ZoaE5KSnFScVJSRmhLWkNzclJqWVRsMGJJZm83U0JjOHJDVGhSM3NqWnNDQzJPNC9abTJKcXlCWjRoV21ucDJrSTVvdllYYXY5ekZVbWxOMnBwbHVHR3RNWE14NDFhMkhKcThxeVZtdDZxZm8zcVlTcG0wN0xSNk5GNXF4bSt1VHZmUzNZVndnb2M3eXdVQ3l6SW1zNTlaYlpNUE9idXUrNGpKcldQY2dXNHoyeVdlMlB5UHByZkJhR0lPaVlyUWRyZDBUT2piRCttOHM5TWJnNm9NdjEwTEs1SGFUTFRMbDVUR3BpekpNa3FnWm82VUJxRlhDSGJ0Q29mVTM1VkIrcGZqeEErNzhIRURYeHFPTnBWUGlOOHZBTmUxTldtY2JwNUpVZkt3VkpyeG9DTjlxS2toWjFTb0VkdTBPeHRjQUtPUUVpU0dmRFFlNnFQeFNYZ1JDVTZuU3hzL29hLzF4SHI4Sml5ZnlkUzRJTTlKa0tOODM1dk1QZGZyaUtIRDRoNHBuanVBMDFsQk11Mms0eVpxd1QvemVKTnlndWpwMlpMRjN4TVUvaVh5UjJmVzg3K3ArNi9wZjRtRU8rMVhuZlhDR2hyeUFmUTNYeEJEd2NoQTJZQ0lNVDRQM0ZoaGZJdW54RFJKUDl6ZDR1ZVpDbjh5YzdqVjdONi9nVUZwRjRsTHZkQXJtS3ZIK2RyL09DRE8vbEdmTGVtQ1dnTmxMOStieGxXMVBNTGJKMTBEclpJM21ocW4wZkFyekZqNmNTei92aDI5ZWh5WDFNczEzRk5OcENzODVlODNHaHArTWRpdmF4UUtQMHpmeGt6SWNmaUJ5azJSUXhSRGw1VGFWcUhRQXVRaTZ6MmFDbkczV25YN1JIWnRvc2FiRXhYaWtJd01qY0dHWGlORXFFRjFwWGxJZFRhQXgzdFlkMjArR0Q3U2JoQUEvQkpOUTlGdXFCdW1nOEo2Y1psRzBLUGtBMzlEaDNxcjVESHdGaHlkbVg5cEUzVWlTWERnN3hoZWFXZXpyQkYwOWFzOWREbGQvdDdEZkVFSWtsVjVpVytyWFJ0QXNCSmJySFpsUDVuSTdFd1B2aG1QT1RYRW5uWElwb1ViZEVoYTR4dmJRMWZWenQrOFZkRDd5SWptVmI3VmpOL2dtdEdTeUF2ejcyeXZHSDRyT1RobHBldjZkbzZjQVRMejNYVWRLWGVsRjg2ZW5GcEhMZUlmZ1FqdUxuSlE3ZGFaeHZiZFArRTkwUmIrRTI2aENyUE11MlFHOTZuT21NMEtzdXBWZ3NFZFZnMlFoYkZxZ1R1TUp3TGxCd3JBcG5VYmVLNmR1K3ZNZzVpbkNGNHpWa0dWTml3QjJKbXdHdnJQWThZTVU1U3Q5alVnR0hwUkplZmMxUFRYQjh1c3dtOU53bC9pTG1JVFJ4VFpFd2ppZnphYnFSNkR2Unk3eVZSU2tkbTB2OUxrUFpKelpSV0hEcVU4eXBqMU1pM1dybVVpeG42ejREYVFLMHJVMkw4M1NLYi83aXE1aG0rZ0Y3WXZTQjhaN3dCbXZ3VEEwK1pVYzZsckJIUE5jSkorNE5renRvcmtvVUg1OHB1UTJSUTgvNldYS2VnRUltdHZzS3ZVYkdWTFJjeDVmVTNqUXJoUUs3N0s1R0F6Z056MUFHeHI3czRyWldscjlWNkJYbkw1MU52MTFaeEg1S2RIZlgyU1RpWXFaWm1FK09SYzkyTld2TVVWVWovVU9KY1h6b0ZQSXRCdnAyZGxMUDd4VHBkMnRHWm1iSUtPTEV3bU1nRjFTZmZBV2Zacnk3a2xmbjFqMTRDcGtRRjhTQ2x5ZForV2NsaE9wN2R6K0FRbmkwNWVvVU90ZmJOVGZxYUtqekU1Q2V5TnN1eWFkbGc1bDZHcHQzWDVpNUpDQjZWbjhWb3JOaCtoQU1KS1dsUE1YYmQxVDVnWFE5bXFha1VlaUQrbGExUUxRaHlXV0paMVhUb2ZNTnRjRDQ0UHYxaFZkZEljaktCb044ZThleGRBc3A3ZE9kUlQ4NU40dlVubENmY0cyaml4TTR3TUU0dS9keHFaRWlyWWxKNFkyWlcyQ3pSV2VjazMzWDZPNDQ2eW4yTnhwVzNRbnc5NG95QTZ0TGhuWWk3OHNEVFpPRDJTanVxVnRpY05LVnRKWGQ5b0lmRkJBcEhWUE5Kd2swZ3Q4aXFrTGlNcytIcE9TdzlsWmVNZzQ2YkZrdWZRbFB1R3hGejNFejVWTkZsN3pJWkZ3ckZtd2h0NkxaQUl1QkZqaTc3dDRXbFNrQ0xDSDRzN3Q0RkZrb3d1cTk5SXVzSWM4TkpSUy9oRGx5ZFJ2czM3NjNBR0VXNEFKZDFwZzR6S2xDdnJ6RU13TTJoUW5wUzlvVGc5VllldTVFUHQ3QTVhVk1EK3dvTERYR0hFVWZTN2hoZ3JXMDV1YTZlRFZBeEJva1VOWDhQR0RCby9UVVBwWG9nM2FiNjhNS0MwQUhLd01DOEVsNm1ENW5RT2F1ODBpbjFHMVhnNWpqVmhFcWRDeHM4T2wwSnEwYkZoNE5IZ1RiWTBzc3ZpZTJHMnFQLzhvNTlJWGR1QlQxMVROYlhpdE0wRkZNN1dUTzFpUTRUa1VaMml3M0FrV0lieW1BZFhQUm5CT1pwci9heVN6U0JlN2lVa2dpNU5pODRlS0EyaHp4WXRYUVRUZFU4WWpGZnRiRmdCaXNVcEJuOEFHRThqM0hxM2t0V2hJYktzeFNHaEZsQ1g4ZlA1a3lBd0ljd3lzQWhGbytwSU92d05TYjhXaVNTeWRzWGdaVEUvZ215VVg0Vzg2eXU3N0hFcXJHWmMxYUdveDFGVndiNXlybEgwSG5GM0RLVkJMS09BdklYR3pGWnQ5VTNYMWR6S1VzYUU0UjlrUjR3eGdoeGNiT0c5NDVxalNKVXZSNXVtc1VHTmVCK3JUNFc4V2laNGUxeEl5MzVma0VBRWZtQnNla3NEdTBENG1yaVJ0WUVpVmgrczVveDB2aW1nSm5WQ0hlZ1ZUdEcrMWJBUE5tbnd0Q2pPVU9tMzg4MmM1M204dU5Ma29RWXVvY3dNanJLRkx6amp3bnEzeVpZdjlvMFlTTzdWTU10Slh2OVFDOFFUc3N1VHUvMm1MbWVUMzYvVXJmSVMyVURIRnBQN0dwVUhtZHBWZ2N6QjIzUld1MTZjS0ZJUG1DMyt2K3BsVjAySmJvZmRENStOc3dvZW1OTTNzU3E3c1pOZlVSQWlJZzRvb3lLajYrSHVmd0tVZzRXUXF3MG1vL2lDd09udWFKM0RyZUZtdnVPalBqZnVUY0dyRjZKNDZ3M1VpWGVlVFhMV1BPYTJYaloxTCtPdzNXMXBhOXdHUGovZE52WWJtaG5kbkJ5ZXhXS2lRbDZuRFMvQUkyaFpmOURMSnhIRU5wMmEwZmVZejJRVkFlS1NDK1gzd3VRa0UxMUh0OXhoWGpNMUI5aERjRHd2SUNGT1pJMCs0SGppTUhRUXoySm9GRVhCR1NvRzhqelZyQlRkdGdQaVkybTRjd3RkY3p5VW14d09QM29saHFEdzRwSjFKdmRVMEdCM0JRWnVrU0VBWHAyZlQ0djdPbUt0OUFHZ0V0SFFVT1VWSHlpT1JEZ0pvRTd0KytLd2VodHoxNXE1SWxqdkdtbkVDVzlkampXMEpxbjFLVFhHc0FQMFN2eFg0ekthTVRtY1dPYmR6T0JtTUY5VGFNcGJUOUdMV2l3SHNJU2c0eEVXUlFtUXlKWXlGTGZveEFUSFRUQUNvRVgyRGRGeHI0NGZDc2JtRG1idTI4YWhkd1BZcHVUWkdBRGoyd25iYTI5QUI0aXRibCtHNTdwdWIxc1F6cW5ucVJDK2NRb1lmOGZwY3NONDdyeENWYmhEV0dGd2FmS1RydkVqRGF4RUNWYXVHenY0SWlzT3lqR3d6N3ErNTBtbmJLMHhXY1Y2UHE0TjNaSGF1Z0NYTmpUcDZBSjI2WmdjaHdrL2R6SWdLbkZIb1B1QStQemhIT2FwQ3JzV2dKL2pSOUpYVS9NeWczcndwNG15bHpjOTJqaFRnWVM0RmZHVmFXcDQ4VHdwZVhFNzgzbEZ3RHRXdVJ6YTMrOC9TeFVZWHNGRGRTb2FwTmp2M1J1Sk42WnJ5RFF5d3ltbDR0anc4UXZPVStVK000cHY4MWRhOTFESHZLZDIxa1c2UmZCOEF5SmxsdHlqWG0xTXhDRUsxWjJwMzAyVVN4aUkwQUg1NGp5OUFFSkM0aXMzcHJWZ25vMzZtK3E1dUpFRjhub0o0cTBFdVM5MGZ5L0p6aWp6THk0U1RsT0RpYjd2UnRXSkRTMUUzNU5BRFpuUkR2RmdjZWdaY2lCTG53M1pmMWZyN3AyUC9IWnpyM1o1VHJWOXNHTHU5VmRPd1prdzc2anlOeGwzZVpQSk9neittN0M2aTNaQ3ViVU84N1JhN2R1Z2w4N1R0TE5LZFdnQm9IY1BSRjFqOGRjU2ltbm85dVFsd1ZDNS9vN2VhbzVzZnhibEtUMjdOSUxUS1UxeDVQM1dLeFUwRjJ3WlI1YW95UU5oRUk0T1NMTGQ0U0RxeXoxeWtYZng1bXYxMSsyVmF2Mk0xenZXTW1rdVdTU21mU2hPNXppbjVTOVMxRmN0eDdOMEZoSkdiczdVa1FKaURKa1dMNWxmcGFzQ05aMGtiSjRGY0RxT1JmQkcyYWR5THdyVnp3L0VneFFIT1hxTFBSSnBTMnorSkk3OS9ZVzBOZHRybmFvSDFFNjd5MnZhZGJsY2tjUmsrYTFCSU4xeG5qeUNUNEs5VC9xUUU3U1VvRFFSNnhqT0hFMWpVQUtFK2Y0SGlzSEwyTiswSUJGYlNsYWszKzlBQ21NY2JneDdsaS9ENk50UDh0K1Z5QmNWMkh5U0xTN01CT3piS3BwZjRqOVY0QlRFM1FBUmhSeEVCVkMyTy9SWGs4ZWttUzBkUHRTS3dtc0ZLdjhMVWJLaUx6cDRtU0YzWURFNHNtQUsxK0U4c2hrS2tqanJhTU1FaXJLUXFERVF3V2JVMDJGSW5TTEI0eW02M01VUW03Z1d0bFIzeHYxOTBkeTMvYW41MXVwZGp0eXJkWXppclhjK1NadG1Nbmhaa21PQnFwQ1lSbmZzcSsvVlpWU3I5ZTVQQitqZ3lkUzU5NTdEbXQyWDZLaG8zMklLa0tPb0o3UTVrWS9ZTHVyYms1LzNNc0Y2Wm1lNGhLRit6YVNHeE1nUkJoNFFEZEFVMlg5V1Z4eUVORXVyK2RWcWErdTFxdGQ0UFFXdVk1MGhleXRNbHZBUzJHOUpQdGo5cFBMQTZHSllscTMyOG8wMWtlaFJXWU1RbVdPV0svcGpoZmJRaVdrMno3d1RsazR4bjNPVjFCZm0xbE81c1VSZFlyaThzNWNOOGVnZ2VENG55eUJ1czM3cU9JcVRJbWZqTUI3VWcrQjc5V1JDSVdPMk9kaDVoYXM5K0pDcVR3ZmZ1c20xbnlhT1lhbkp2WVhTY3NsbHdSNHFId0E3ZXB1YWF3NHRISHhXSkFXa0lIQm9mdjk5UjFCRGNSb3gvRi92anBrQ1hmOGdHTm9paDJ6dklsUDh0TzJNdGxsYUZDT1FNaXpKUENsN0pmZG9mSVpxM1hmZG5pSHBTRjlHaC9CeDJteVRjUmpuZU4ydldub1VFZU03c2IzQTUwaGVCTWxXNStXQ1B0VUd1aVJjR3hBc0NXMHk3eEY4eWVCeWNKZ205c3NCeWxuV1ZLZlVjN2dVOExTb1dXaTFqd0tVdGhjL2JLSVlsUlc2U21PZ1hyWjVNM3dFZERjY3dNS3pDZkxTcnY0MkJGcTc0Z1p5N2J6aStZajEzaEV0QWJoQlFJUDNwc0NBV2F0ckhLTXpXTzJ3NWt0cEViUjZYSzZsNEdpUjRNYzk1NnBpUUViTmY0ZlNsc045dzlFQXBGSGFQd3V5eHNMUUhrd05BdkMycnNkVGVZV0h1NEQrYkk3ZHhRY2VjcC9iQVpsMHhQd1VsYVVjUU5OaFZOMXhOMkZmeWZWdUFNTjRBSVMzTXZ5b3o2dmc2MVYvYnF1alVlVlVhbTZBNko4dTZGU2FXMUY2YVFvNWdlZlZwZTNRbzUyM1NDbG1ObVViQms5QWlObmtUdm8rWXczMDh2WmlXN2t5ZDdDcFErQ1U5RnBhQ3BzOW9XMG1abGdXTUFrN3VSS3ZQNlo1NFFZeEs5YmkrUno0SCtrZkZvOC9Dc2M3TGdkSWNSUjdiSUZ3U2xueUZFazE2MEdoNC9nZVdtcEt5RXVKbjVNNCtkVzJ2ZUdhZFBIWUxKZWhOdmF1R0I0Z1RLWmRPUWFERU95WjVjOVRjTTAzT1UvOVAxdVV5SnBrVWpMaDNpMGxabE1aemRVVlNaQjFQOVkyUUl4UU1yNGowMHRjdEJxMHliWSswSEg1YmtQSTRQYS9BcXZDa1hkY1RtSTg3VkhFTW1xRWoxQXhhNytiSVRRbnZQVnNSVWE3VkgvZnhDcUZ6RlNDVFVKVUZmb1dqOVYyajdxTzN4YUl5N2Y4OGQ3QTRPSlJBTEU5ZWcwYy8vTTdBNVgvNStwNEZZU0NFRFhtV25oWVZzZjVhRWFPcHBrNnhUZXR2WmM3aElQTlN0R05HbXdHSjRVNUluVjBWcTRzK3VoeDJYTlBPaHk0ZXJQRXBqNWYvUmJpMS9ISnpsREJDaW9aLzZNays2dUNFaUxoQkd5QjFpbWoyYm5oVGRrQUZ5K3FDRnlDTmpJcXBOa3RFeUQrVXkyZENveG1za0Z2dGozZmVpNmpLamNqa0JleVBGWUlmM0dFMitQOG9PempyVGwvbkcxaXcvMmZneDhEVVpEcllHbWpmZTlwaXZ1TWxGWmhYdlZJOHBxc1UxU0hiUWhJeEd0WlJubG5YOE0zUEhSSnVQZUJkWFV2MFo2eGwxOHBhbzM5R3h2OWhwZU90bWZ6OE9VVWZsWDRyOVprVG1sYVhQMnlVUHJ0dTdiY3d4SVIxNnNieUVVSm80eXlNZncwYnJsWXpoTkRLNiszNXY0V2cwa0dEdGRkL2tzOWVZRmlXcEpXeXByR1ltYnp6ZHlUbVkyMEtXWEU0WVMwUWUwZ0Y0NG1pYVNOeWNDZWhZdGFjbzkzR1FvTEJjMGl6SitqV0tIU1hEZXR0SWVFWXljd05WVEJhaE14NjE1MWRvRm9id1FndmlneG5CdmpkZXZTV2NHR2k3ajVPWW12NFFVRURSRG5jbDlMM2lIb0hPbzc2RU5WYmRxaW1BcXZRWHpvcHdHUnc1TGZ0MDlOT3dFYmFSMUZRbytnNllwWnJ3djF1RElKc0M2VjZGZTZhWnZ6ME1jZGhZQ0Q4c3h5US94b3JjNnljbUYrVHBvQVFVa0lwaXpOR1Y0eWl6QXZNdktiTFlBeVpDMmt0M29SQkVkdzYrSDIwalpiK01iU1lsMUtaK0o1M2FWU3lqUE1CNkZCTUNwRUNnTlFXb3dWSkVaZ1k3LzkvNUpzQ3JXS3VMZnlxWU0rOXhZa2poL1NyRCsrUWh2azFOejIzZGNiNmFVLzd4cTZxYWNyRjZwQmsvYk5vSXRqYlJud1RWdGFkaHhRc3YzdWJPQmtnZTFweTM4VzNvMGRZaTlJNDFxMnppazJTbkliTlA3alJZSklMUVZTdVMwMXdPSUVzM0Jralo1VExHeFZwR3Raa0Q5UGFMZDdiajlrbFNXVlByQ01DSDRQR1RtR210N3kxS0oyV2RxQkdhdmVRRVhFNjZ2T0N0QXlXZVZtRkUzcU9DdzdITnhhNDg0VERhZDJ1Vzd2eWVsWWc4cDVjMmRTVzdzMHBpYVVVMThGalA2Q2NsUHdWM28rSEcva3htMUJJbUU2T2loQVdVVFZHRXBGVzZuL1FiSDRBN1J4Qlk0RGxKN1MraHBMakpnQjV2NkVvMzlnMFhWenJzcU9Oc1RhcThEU21kRVg3cHhidzhIVStkdk9mUERvbDdKU3ZkM0hPK3ZpT1B6QjZZM2tBeDBTQXVWOGJOeGFSS1ErNHBESjdubzhOS0I5VCtINmk5UWpPUEZtY081ZmZGS2hRUXR4SDIyekxXTHFWa01mbXZLL2RzblNOc3RqMnltbXplZ1NvWWpWdWJZSW9SSHFidmxHelNac0VIRnFkbm1HYkwvQy92dEduM3E0TzNYOVhEL25FWXBjeUEyNHNocTFrQzRzWDh5ZW55dEE0aWlmRHRwN2Y0a0Vzem8xay9KTDNDS3BnQWhwSGVNVVNibmU0YnlkTHhBZGx6UTZ1bmRLYmtTSjEwR3BEdHdXV1NvQndWOEVUdERSaS93a3BGSzRyMW5pNHFXREEyUkE5UlVUbDhqbkFrTnZqTy9WaTYwd2NxcTUyRkUxdlFtWFVOd2VpMVpITWZNdUw4TjFacGZDY09wQ0d5M3M1b20vSGVsMmo5bGlyV0tHRmg2bEZXdVBCeVNzS1lEdHZVeENkOGE1QVk2T0NRaFB1cTNDV2k3SmR3dDBvdC9WWFR5WE54QnEwS092ZG12dm5SWWVzS2w1a2hYQ3RlUDlBRkxaNndKT0tydjVsKzJ3SUpPcVBGY2hFekFVUlcyNUg4a1dmU3RKanpFV09XTlJDVGUwRXpNMHBxSUZkbW15UmpRSHR4YUVvQzZtb2twQ0t6Q3pQRDlBazRkbVZNQmt0TS9hUENrcmJpNDJJVjZHUVRSWWtIOUNxblFKbWtSVkJnNEF6NWdCR0JEOUIwNGJKSmtjL3JsRDdMVTVjbXpsVXpnTDh0Uk5vZUlPZ1k0T2NZTEp0TUlzZ3E3b0pDR1JRT0hSOTk5RWVLYldXZVJ4cXcwNGdLS0laNU40Nmt4NFlUc2xaZnVsdXN6TGZURkVoM2pEZS9xeHhPazdvcjJTYTlqVEV1aEpZZ1IyVkdOWmNnMjR2RjhyRFVxZEgyWGZyWGdrbENoVG1VekdBQVdRU1BOZjJHUE1SQ3dNMUZGeDJQRHFHT1A5K0NISkQ5dEIxM0NUTXlRNU5CYUlybXVVREFaRVo4RER2ZDhGbyttTUlObFZDeFViMXRKRVRrcGl5R25hTmpwZ2FjREZ2RjZVSjhjaXljT3BrSnZoRVA2b1dRUU1qYmVab3daa25jenBrL3hCOW9kTXdsdVdRNEdxSjN1NEdPeUJvMnA4M0xrYTBQMFliOXVHUFEwQlU3RVlGRzNoRFlQVThEc2xydkI3SUt6VERmN3ZtSUpJbWYwdWtIRURGeVovSXZUVmkrZXIxWnFCUXZxSDh1ZnEzTUNnaVQ1dWVsaTdzeDRqdVBtZzFiNHJITlQ1dk9td1BlL0pTbXRkZVNEWm5kK0ttT3BNSWxNTHl0OFlTemQ0UW1nQTJNZTVYRVJWeTVBNFRsazVZcFpLeHp0OTRxRDFRTGRMakNzL1B4RU5ZUWtPSFFCNVkvanVSc05rR25rQ0pUTDRtYmM1Nk5VUE42ZUhrR003STc3eW9GMndKSnR0UTNmdXZZdmliUHVDbGJuQnBJUGVYNmJHQldSd1JWWHdvWTFwMXU1TEk5cE1kSDNsZUZMeEFzZzlVTWNkdEJjVm15ZTlNT014Q2c5Wk5aRGFaTTQ2dVZFK2d3VU9WZXhuRm9VcG9Ya01JNklJaXpWTUZ0RmRJaDY5Q090MlZ4SnpBejZHcFZvYkowWVFSbkZVTlpOcHRtdnZoVXVuNFVrV0VYWkxzSjdFZFV3WVdGMHpHL3dQWkkzSHppaXhqODZkbTBnV2I2ZGdwaWpLaFozT0xTY0lSNmRvYS9Pbm03b0NQUHlpejE5UzFLNkthSlNGNjBLbTlTcm9aelJkNmh5ZzN3M0xlZUp2V1VBS0Jmd1IxZnZIUlVyZW1laU42b3lSbVo2WGxPZSt0YVQ5cS9JSlNhQnZhRGFMaS91RWFXaUxWNHJGTzJlMi9TSlJpTlM0SWx1ZFdZTVBsd0lpVytWZ082R1Y4TXFacjZKZC9NdHYzdnpYa1VSWFZVakRFdkhoa1JMSGIyYlJFWWU2SWJveWVXcVJ2Ui9mMitsa2k0ZExRR1pWTVhobEc4c3grNTN6N2t6U1ZaUmxtditIalMrNEswZ3JWcnBKOENGTkNGWnVlYVV6RnJoSElKWUZxMVpLeFQwekwxZjAyMmZxTW80azlweEk2ZFk5U1BlcUhYZnd4SEZRL1lKaTYySE9Rd1hlVmE0ejdUUVdFeHVIREhtYlErNEdid2kzaUZwVUpweEVYUmdqSkhwM3J3UmliWDhtaEY3QVFMVmJCZ2ZaVFNkY3FxMlJDSUpZWFZnTEJxRFI1bnJkajliMmt3WlRSaDdtRHdKZklOT1JPTGo1bFpJQVFxajRNdVlQanJJRTRxazdVQmNBbkNXWHRuTEI4bnVaZTNDenpwMG1HYThxOHBuMXhGOHdHcXJNYmxwb3lnM21NMGdRZFo0TlM3d0cyMVNMU3NoK0hGNHpTS3dXTjNHVFZHR0ZEUVZBdVZ1OFpMVmgzZnNNcnBNcy9aMXR6T3VPMUphNm1XNWxpNGxBSjFFT0hqNzZYa1dzSWFvTHFuQk16V093R05tMzdaVHZZRjQzeVYrNm5MOHdtMjNGclNNNjhsQWFSS1RDa1VnUDd4RmVQb3NGYy95dnZ6Nldra2JUU3EycXZ0WCt0MmJ2dGhnQ0JwR0J1NndmUWZCc0Q2QXA1MDRnTDRPcnJLNGM5RDRML09sanQrV2trZ1UrWFdldHZsbmt5eFBnL21UVkZtck1CbUtmUERKTGZuMXRBaG1RMzYzNGNocUNtajJWUDZ3cmdWaWVpRnVUNGhHS2Q4MldKTHFJVk9zMjdLNFJsWk5URnNvdFZseEVrQVhNbnpzcE1LZloraFgvSnBoZy9icE4xemsrNFMzQWVXUkJoanVMR1gydzA2OGdJdDMveVorRmQxYlJaM2M1VjVlS29PdlpZNFlXaGRRaEhoNXhydDk5VWJiM2ZRWm5MUkpuVCtSSGNGSW1mZTA5VlVCSDBQT21BelFYK1NFUzUrVWxxM1BGVVI2WlVJUkM2MFp6enByQlRZQmZNVVNzQWtDK2hPNWhxVllZQ0VMeWpnZUhDbWRIWXh1azhHbmIxT0dGSHBFMWtuVWVWNjlUOUExd1RnZ3h0OWVWOWZVcER5WmlQaVJNcjNERXAxZFhjVDJsVlJRWlFUMEJMUVJPUUkvVnNOaXZqcUlDdytKM21aaW5MYUlieXNvcUpCM1RZTE9FbHlrNWN3emJLQnZqYU1aTUdBYnIvTUdEeEg5N1NjNTZTbnZtUDlHZ1BVRjdMQTVZWXc1SUVVT1I1SmM5ZTdMTURsMjRTcGNwUURXcjhDdGRTbS9KRFJLNk5OcmhVV0FxRzFMQkF0SXlnOVdxRWZOTW55RG9aOWpWR05ZWjFmK3VBMVV2WDA5MU8xMW1ha256YitvNDR1cCtER2JiVFhoczlqczlzT2JwNEc5bE9rWHZ2bEZBS1lzNTF4MTFFbHhVVVNZS2ovek42eXZMY2JXS3JpTW9LMUs1eUVYTVJqN3hJQXYwY1B0eGJSL2RJVnRnRWhEcDY0K1VER2pseWZlYzFpTzhVNUhyaTQyNU5kc2RaaXZkRjhzdDJBMVRJMDFJQ201ZmtFZW1oZmRZemR0QTNqclIreGt0ZGFxbTZ5a2FsVU5oMVQ4U3ZUVURDRWFOUk1uV3FzK3licXlsYVVEcWxrSFJnOFVyNmsyRlJSV05LZWcvVmpyR3dLbzVKQnBNb0Y4cmF4aFU3U1hSSHFaTVRyTFdVR2RoNGdQaVZtQ2xxdGhhaUxKb05tbTdnM25wOThhZm0vTFpMNFFkL3JxL0orbkt3OFM5d20zREN0cERxd2szVlRWajVHdEs0MU5QWFRWVTJ2UHNhelVQdUVlU1M5UkVRbWh5Ny93MEI3d1lwRGNmZkt1QnFIc1I0dlhncUE1RUxTM2drTEIyNnBPY3hweHpEQkZONTVDZHp1WUwrS2tCQUY4NjQ4M0kvaWQ1RWJUYjdWUzlkaHVTRi9MOUY0Nm5GVVNzUlgrcnZMMnBqZXFXc1JrODhuZVVpSmlzL015MloxYnZmRkliOWVUeWVONEU0L1FUNnp5c2xVWUpPYmU0U2lRaWV1ZHpFNVlGa2EvWkJmMysyUnlpQXlYN3UwUVJDdytYNSt5OFZlWGxuZ2lnSUN6ZEE4L3d0KzBTK0kvaUVVTG9wNXlPeitJNnlPQzdjUEVoR0NSZ0s2RHhQbEUrYkl4aEFJcGVCV3RMRTFLZElHaEQ1ckxRQ3diQ0x4UVYrbFozc0hSVkpQcmF5SURQRGVXZzgzUURmaE5uMmgxMkpCL0dWS1NpY2xCd0dqa1J2S2ZvYXRraVZyQzFMN2xEdFZ5WjJFYnhsdGlmTytXV0E1SCt0T3RQeHQ0dll1ajZUVEtZL05pZ3QvTk5kaG9nbmtOcm84SGxaYjJtRmF4MllSNmYyNUxES2svY3pQdldTaXN3em1jV0hjU3A2enJsN0pXTzNwUVE4VEVhUUN0bUpVTWNiN3hjMmU3dVgrNlFUUmVOaUo0a21ISzgxNDdMMUFFNktraUk0aHBaNWVZclJoWjJxeGxqUXIzWW1nNFEvODhOdUEyNVpqM0h5MXFBeWxaSDgzVzcyMUZPbnhUZXhmTWcvdUN0VXozZ0c3ak1Fc0xCZ3N2MG1yK0hCSXVqSVpPalhpaTRkN1BKcDJhYUdsSm10eU1GQlg2dGpoWHA0SEFjWXArUUFrM0o2MEQreTFBNk9ZUXFkMElibTdlL3FZNG5pYUZmeUdrSjNyMmJ5WjRwRzRDK0ZLS3lKTmVhREJ4clJsSlBUSlFhQm1HcGt6MXJUbXQ0cmNvSCtHckoycG14Z1JrKytvOWxvQ2hFTVdTaHc5MXNvNmNRRmw2RHJZbUNjUFVNZml3Um9IblhpaUNmWDduSEZML29vL2FkSFgrNnp4dHBhMFQ5UVVpYktEeUdPRmlyaEFtc0ZDWnNNbXY5blhrRlZlOU0xVFk2NmMybE1CWW9EUFVTaGIxcTU4Q0ZVZ3FDZW10VDJFbmdBS3Q5MHVqUDlYQms4T3ZPbSttYndQSWNyTXVxWEhpUGxKNmNoRWFCTXFUaEJnN3ArS21pQzE0dFVzNUIybmlwVzMxTE1JbTVkTFN0ZVQwdW1RSHczNytuSmxRWnFvSWJUTnZpNVpoSk9HSjVOU3Y4YXBjeVBjTDlML3I0TU5DeFlHQnArUlNOalpnR0pkWWR2OTFNY1VIUTFLRUdBNFdmTEtKN2l4MUhObXJ6VkhINkEvMFFXcTQwSGZjYm5BZm1NWVIrcGxuZ2Vnb0wrOXNkdk54VnRzMEZjditaRkViWmdDM1VXdWV1blVPb2d6NHBPQURjeXZIN3dPK0hrQzErVTRVK2gyekd3T3N6QXl6OXFKb2wxZUx5UEVRVFFFdUo0alIxUWltWEV0ek12Y3RKUzB2ZWtMU0xtTFBpcDJkZTRiOHZrQUhlYUFjaFFSbVVia24rRTFjdGI0cm13cVlkZ3p1RDZHRVZocXY4eExBNXB6UTIzQVJSMlZoUzEvdFBzQ3VXdnVCQ1BWMVJrdngyR0FkN0ZuT3hLcW9VaXBJRC9CcjJtVmdqQStTU1FISjFVQyt5UVFwQzdrRkpoeDFwbW51YU9UN3JBU1NVdGE4MDZFOEl2a3ZjWlMzemFRMDRqRG5nWEg2S1M1MmtObFo3OW9PNElKVEdUbkE5aVZjODQ2VVJtYXN5SytNcWVYVGowZHFsaHhyQTRyREZjTHVtM05HZUZsNTN2am9ZOGxzb0Z6ZC82aTl2S1ZDU3hJSS9QTmhqYWU1NXBHMW15RlNqVXF0enhSMEdIbVBlRGZuRFFON25ERlpUQStPeks1V2dkakd4akVCWjAvTktlTG1CNW1WNklFOU9neGprWSswODRKZVRTYVU0Wkh1akZRRTdNWFI5L1IvY0dIMHozajBNMTVHQWw0YWNSMHpuZmd6VEFtOGNlL3N0eUd3b0dXOGpob1lYMzVndEYybEpjdk44b2Z0eHlsK2pXV2JlSHNxRjBrL1JNU3RhNEl5aWp3MWJFZk0xNVNtQ2ZPTGxsN1pLTVNhTExtTWVXSGpjZzlkcDRPVVd3bDVmclB3ek43OW52TEVsTXgveitYTWRtWVVyeUhRWU94WFBpZTJ0VU9CSjN1SWtFMlNaOCt1R2Y1YXd6c1hjSWdXaHkxWTN5cFlVWUV3OExPcXB0T2ltcE1mb3REeHBYMHNhWFMyVjBFVWc5WEl3RGJ5VnQ1ejZsdDR6MzE5ZHRIbTJybjRrWEhjQXhqZUFaMHE2aEpDbm5nNkIya21KdE5LNlRSampuYnNCK2x6cy9iV0dxV1F4a0RJeTBaYm5zSnd2cFVoSUVlbmpVbmxZUURVZncyUmpGRVBYNEtGSXRZaGRCa0ZSc3JIYnBMcGtFb0k3eC9LbktzcjVqQlpQMk9qQjNBbDh3RE1vUU5XV09OR01jRE5wNFNXNWpQUkxoMnNFUlE3cGZzb05xNm0zaW1ZMHVkVVNuWWdIWGlkdWVpRlM3NGdsVytGNkJMV0hOZFZaZUN1OGJvM0RocDhrYXVwOXJZV1d2WkNyTEV6aUlydmgzOXE4VTFhQjBEUWdNWTBQZlNSUHZsS0I3eFptVzFWTkhpWk5ZWDFxSGFvR0M4ZGtPcGFRQXo1RnkyVVRXQU1Uc20vemxZNlljTEU1eC9WbWI5bGdCMEFleGwxL1hNZm1meXRPL1ZGNjAyc1U2NmEyelNuRUtrK3JObk10ZzhYeVFzaFAreFJKNk8vQWJmNnNZUUVUbWRmODlwRG1ZM0VmdUhUVnBHKzAvMkw4dWhkVzg4bXFIZmovQW9TY1pqa1NRRHQzSnZTMWlIQjBzNGZrNWl0RnIxbDFKQXlEZ1Q1ZHNxQ0x6MFh6MDhBRitSTno4aTJhNVQyZzQ4cWdna3I2bkt3bDhhREZOeEhiQndMRW9RZDgxcFlSRDlqYmJnMk5KVU8vc2ZqdTR1Tk9pc0JJTWdLTHpXeDNHejVDY3JHNjZuN0FLWXErKzF5WmhHQkc0V1d6NER2dHdYaU95QVFkKys0VVgzRS8zVEEyazkweVpsdG1ZdFV6ZjZ4YmRoWGtEeTRZR3VZV0Y1VjV5VlkzNWhmMUlhcmt4OTYvdGZqN0RETytlYlVZYzIyUzFNYjNBWTNDTFdSeURyaUdjQXpIWllPaWxFVkszQit2VXBicnVqUEJCWmhBS1JXWXhTdWFFRklpeG1HVnZ0WE42WWtnRkNCRVRMUnVlL2s0SDk1OEN4aU9NZnd4UTBlV2FIQUx4bUNUa1BwcUlBNzJDK2RZM0gwVkZGVW9FaW02M2c1blJ1bldGdDREMGNka054VWZubzdmbDNlQW5SY0hIQk5NVm52UWFibUFkYldxemptaUlBY2YxRzR2d2RGTUtHUXNQOVhVUFVrbUJBTGxZSmc5SC9IMlNGdVZFMjlDZmVWazA3OG41bXhvMGJkZmFyOG5vRWx2YlA3SzBnSjdGNzNMOUVDQmxCTUZIaG5haUJFd3h6M1lqWUtkODhQYWwzQVRoZVRRVG1aUCtnQmxtNmJGVE5TaHZtY1VwK283SXNmZElWYXYzc1RudjYydmZpWHpqSUJuUkJSanJsZzRsVlVWbTdNdlJDVXFvQmFtUjFtUEVFemdXd2hkVnNhNlFUWDdpek5xL3BUMytkeVpWR21BUEdQbDlJNStwVGZOQUo5eDRicFErNEdDZWpFZERNMTd3WURqQlAwWUxxckpSejltU2x6Y3poQm1wS0xMUE1JenpLQ0tPMFFWQ0JXSUcxRGVpTldhc1RFUTFDYlRVTk1IWUhVZ0Zzc0JFdEh3clVoSjNEaCtqT3V2UTFLV3c0QlJ0ZlY4cmM4SEJMak0zMXRMU3RNYlhNL21TRDNsbmQ3RDhSaFBQbFRQOUtWVXQ2d0piM3VUWkJKckZ0ZFBJd1VRd3hhSlFDUGdqcEpHRXc2RW9sWmY3eW0yRk5NdEZFMnR0UE84RzF0cUdabnpZL0RoZC9GQUNrT1M3N3VUOThlQ0VFMGEvTFN1aTZMd29WdUNtSFlHc3BLTXNEeURwOTZuTnVERU1GbTJXU2hrbEp4dnEweDZVa0VPcTFPZGErRzlJSXJYKzY5VEtaajlkTmxVWHM4OElsS0xCRWlmeTdreU5kRXRxSUpqOHZ1dEJpN0hKNFpNdDdraW1qWHpZeGpMSkd3ay9YVTUvTHd2Tk8wYlNQNmtFSTVXL0JvU2NJSWp2cForZ3k5MTJDUlRVdmJpSTlsc1dpVHoweFAyc05VelV3MjNPc1Y0WEFJVnBQNXRxdnY5Uk1vRWdZUDhKYVNLeDRPa1d3UkpSd3dYbEpTVXRBYWhycmtGelZTTGlPUmh0emMvZEpUVE5pUk8zMjIyLzVKdkFHeS9sbzAwZlBXeVBNOVFyQ2VnbXhwVVRyWFlmWE9LY1FTajM1TzRUajdYaHVQMy9hOHQ3Skg3OXZXK3JyWnJtN01ndGlKQXkyQ2p6cU1XZ3VTalNVVythdDhMRzZPTzBIZ20xL3hmZ0VBOHk0SS9wS0FGSFh0bXlwYkZpVkFIdDlSeW8rZFJ0ZnJjaWc1cUg4OGxzcllBRGJOeW51N3ZwMzQ0dTdITGx6bWROVGdaVkJ5SVhwdFJIS1pmcjVEblhEcFV3NkNOYmpMRXBrc0o5dWs3R2ZtVi9PUmxiRitvUGw2dDdXSjA0ZnZNZHFCUkFqaEdHZmNoeXJZdW9TYUdiTXZacjE1aWFTNGxSdndrekJtcUZ5Sk13REF1WDVzUmZyRWt3MmFNbGlGdUJUYjFhR1lqeHM3aWhHajdZbGgwdngxY2J1ckg0NXBrWFQyaWxDM1JKekovMkhQYTlldWtNQ3dkSjhpckxJbzhlQVRjWXlwVEI5S1dpVGF5VmcveVROcDBia0JOSmhBS3RsWWFSTFlBWGNZbEJoMEFVNHUxMjJua0JSTkUrSU9pTThqR3V0N3doUFpKclF1NmNwYTV0eW5LN3JPVFRJNldzRUJVaHFMOVJ1cHJBbEdhQm1aTmtBRGliUkRhUjZaazR4YzA0b3RNdmYvNnc3cnc2eDRaUDNiVHVSQW1kZm4yN0VlemI3S2Z0SnRlQkNWRi9xcGRHS1BHNGpkYS9CNnJaMlZBZjlPSFR5QXBEb3UzcFM5VWNiZXVkZjFUc1diZFlzaGhsa2pOSWVHekxXK1RxR2hmaEtNSWdmSjNqdDk4VE5UbUFaTDFrZ01tbWx5RWdXUDZ0SFJNOHBXMFd3Q3FMNnErSklFalVZckdJbDFBbVEwL1NjV2NiM0pOVU9nci9JYU9waW5RaHJTMVU3N3pkL3RiWXErYVRsTkZSVFhNNEduQURqbkVLUmhaSEFEZ3FRR3BubTh3NjJjb0o1bENCSmZlQ01mZjJodXh5UGtPN0NRVnZSVmJYWTNoZ0s0QlpxVVV4V0RNMmNYRXdONjhQc1hGSFArNktpb0lieHBudzR0ZWkwMktqb3VpdVVYc2c2T0lNRXlkTzVndlpoSitUV3RhUFpnOXJhUFgvQnBCMEhjVVMxa2E5YUd5MXVSK0Y2Qmc5VkJDS0RUcmJLMFcwenNCWlZkSmVKNUhQYUtzdTI5ZGpkSGtqNkZzTnpsSVM2UUF1Tjk4dTI3UnlEMm1EYkg2dmo0V1VlZ3U0SjJZREkyNWVvK09DNUJ5VHB4dytHeVJvSHFnNnpjTzlsZUNUK2pWeHdnV1lBS3hQSG56OFRUK2FiU1IwaDlETTZWbFJPUllZSWNVSXZuMnRTdkR0c0NNb1Y5a0Z4akl4RmRvdVNHMjVBQ3NLMUxZMElVYldiSlFCWjRUR2lnV2FjUnlEWTk4WHdRSjUxL2tUVDZvRnJzK2RYZ3pXRTRkWjl1NGM4d0pXRm12dFg5NzFnRkNtZGlWQ2ZUUDlYRDREb1ZsR09FTittcXUyV0l0Z1J3emFLUU42Q1ZqelI1RUxPZGhNTkxBaUFKV1NtbTFCTGlUakpqRUNyN0RHaEQ3cFN3Rko4NFlTelZwWnh6ZUxWOXd0bUh3ZDhBUzF2M1Z4bEtIVU1lWm1jQ2s5VWtIMXFQSS94ZS85cW4yd2R3ekZyY0QraWlGRFVHMGhyQkV2bVRYOWxldXhienZ1NHFEb3dCaFcyUG9QZks3L2ZIcUlzSWY4M3Nya1Jqbk1wVWxReHhaZzNXelkyZUFaTWdrRmMrZmZxbXFLVnpES0VGb09rNXNqN240Y3JUOFJaTzJWQnVnTm5DQml6L1JsZndGTTZJcG1lcDk3S1BOalFqSnYveDNpZDhlNkMrL3QvcUwrTzd5algyQUVjRlF1MVZpRmY3cXltWkh4TGJNdTJTSDFIZ0VtNm9jaE1NSWZERWdBcEd1OVVNUm1EdWxINCs4TXZwblpTS1VBc3Z3OWhHKytuSEVMMCs4RjRjZ3NnL1RqbkxJdXVWRnhxOGJVek42eDNvQitmUzRnd2hva21uM2lJdEFhdFBiRlU2dTBBQjhNVmV0SjV0QkxaaHRQL0szemlnWlJEY0ZsTXNVVFIxUlFZZExhQXBvazl4VmtZTUorQ05Kak5IMW1wdktUT2s3eXNjbTJxcmIvUlJ1bkx2OHl6TGRWRFRQbTY5ZEdJZmlWSFZFSWZGaTJLMGJkRnZkeTF6R3BsN1VNM0Y3a2RoY0tZUFNjRVZXSG95Wk54c2N4V1cydHB2am0vekgwTmhtYS9MZFRSY1hMVWpTTk5DWFRaNnNSbldwZjVaKzBibi9aeEVaS1hhUzEyeithb0d4anI2N3J1SmpjWXkrZ3E3Nk1PUHBVM2xlWXB6Rmo1b0ZCWXFaSjErZjJPbGNDS3JyZjJja0duZGF2dml0QnZFTmQ5YllqN2NuUmRlOVpiSTNWWk5oN2RVOTMxVWlDYUtTVmd4dndrcWpoMUtqSnBDYkJWc2tMSU5qdEVNQ3ZubkRVNmlsdjlleC9TRTFTOERHOWl4azNPbVJXaXhmUUpVdDRteDRhdjlpYlVUMGFnZklPNUZ2ZTNhNXVMNU9helZsc3NGZUdXRWJmdTVLSEVLRXpJQ3M2Nk4yRzBHU29pSStIV0NQeEFUcWZ0VVd2aG1hM1VMVHAzMDI4SmsrbFdqYXpXbEJOUmJXSTJmVU9sY3g1eFg2M2JxaEpZd3J4ZjZKN2lhQlo5L3E5WXBINEl1VVgybXExeE10dy9lN251Z3QyZ1JCd2dlR0JHSjVDWHRSTDRlcDNFTkw5MnpvRWZuVC9NVnRuZUtyMGRza3JnbXNuQThLZEUvMUJVNlpOeVVhdUJJMUs1QlhTUjh4L1BXWWRhMWFBSGdwMXJveDF2OE5wSkRldlBKVXJHRGtqQmt6STVpaHJPVUg3Uk1YeG1qbGR5SW5YcmhDS284TXdwdHE0NFhUVnhzdC9aRHVWYlc1eCtFdVdLeVA5aFhkRmNZVkk1eHZuUk1OeG5UTG12Y3hpNkxaVTM1VC9Rd3pmaVZWd0tJOVVreUswZWpHYVkzcjFiR2ZiNG8xUW1XMUp4Wk4xL29VeXh6SkRDQUJxVy9maFVxMG1XNWIyc2JJZFBQVy94K0hRTVNzN3FLYlZkc3FZYUJkRjVFTzUvUXYrR2VTZ1J5ZGlLOVZwdStGV3VCaDcrNnZqdWFMQnozdUhFSDlwOEpKZkVMYVAzNWRXdHNlTVBCejk2RW5hM2lQcXQvaDdpQnJsY1BmZDV2bHZIYVErYXVNdmcxYmhrd0R2YU9nZEcxdGxpMUFBTmM4cUZGTFVpdXpTeDZrc2pvUkdqWkhiQkN4b1RoK2l3RHRsNkt5QzFDMFU3Vm11cnJicHdMT0JrbnhUQmFiVWdQRUwvZkRNbmZYMDBDekxobUtjMjEwR2p1NUthaVdKcnZuSnBpbk44VUlZUmVkN00vZW5Pb3U0Q1Uvb2J4a0llOStWWHM5SjI0bCs5NGQ0VGJNUzFaNmY3NlFBZ1hKL2QzQkIrR1BMSThZeXh5enVGTEdYbGowWGRqZkd4dzdQa2NWaHlzenVwR01TMkkzaGRmMGpCTTAzMzFkYTJTSGtZeUZsTFE2N2VqU0F6N3NCMXhHQ21RZ0tod1lhSXEvckZiUThKWm9nR2tIZHN3bTR0dTM3UEFtT2ovRjI0WDZTalZBK0ZDM3BLa05Tczc0cG4xNUMyWFh3MHBmNThrSVNrOHR2azhIMytiYmtoNXZyWnE2NWlPUG8yS3lKYmg2VGNucjR2MFBrY2pqYzUxeklaTTFOVmRHd3oyUlc5M3VKdXc0M1RDMlhxOXJCTU1NdUhVSlVFNENFNHFjWXdlcTJUWXdCU1ZOVHNzMnhOdHlHTVAyVXpGcHZVY0xQSUM3ZCt3OGR1MDFPcTVKNjEzem9nSEFWSlB5Y3ZPR0lqYnNraUh4RDJoL2FBNUhoQis0M3lFM3pZbm16SDY5ZEJldi9FLzVMRUQ4dWVCcFpsVmVtZmo2Q0NWZU1qT1lpUUVyVE1DSkZqRzdYSXZTaHRhdDV5czVFV0wzTjlsQlFyOTlKd3B0R0JLUzc0Q3Zubng5ODFrMHBDY2ZkdHNYL05xek11SThZZ0QwcmIzanhwa3JsRU5OTEc0bGNNeDdYSGVzSm4vTURhQXA2MG5jd0V3Tlp1a1AraUlJRjJxVjZXaHo5THA0RkE3RkkxOVhPZzk2Qjh5WTFGZFo5OVRRcndTUUF6V2RRY3dzcTE4ZzRhWVBJaVludEdyVWR0Y3ZZL3QzVzdPQnRNUUVYaWVnU0pFQVJsN0FZUnpPSTBrSEJrUzZLOGdyOVNhVHA0Y0ZOZllGM24vTEVYWVhUYno5QkZjTlFBMUdFTHdmQkQvUDFCOHVoWHNpVDNDellBN0xwNndwTFRtRHpXVmMycHZrdHJPUlZLTE4zYnlMYkR4MmlzVXQ1a3VoaDhwWFhDK2I3OWZkZitBcEI2VHZ4ZC9JRWw0TVY5WnRNSCtPNjNHTVpPLzg0eVY3WERDS3ZLdjZCZkRjRmZZQ2pFWS9mRlR4ems2a3JrazYwVXVZam5IZmNnK2Q1Z3VjeHVpY0NNODhyOVpOa0Y3NTU5TG5SejBzZ2NCRVVtcnh2ZHliaHRYbHJMb1VSN29pa2hPT0NoZHVHOUxaeG1rU01TR2paa2h2MXh6Q3c0ZVRmWXF1cWgzRUl4ZlF3VmZSN0JrK09WM3pLMVYvSXgwZW5SVUtJYVBHZkpPNWVKRUpxM1VsZ0kvUi9QdVFoaCs0MzlOcmM5bHZrWDJuWWtFRytleTdTTTdhNFA0MjJhVkdyVWo5Yk9YVWkvUG5QMitxNGgyL2ZYR1c2M3MraVk2a3BzTjJWVXZKbjVKU1g1OU9FdHFmNlNpd29nLzhTbjVHd2hWTllLQWM1dEJneStSQkcrREt4TExZcHIyV0RFQnl5NG1DTjlZSWpYM3JEV3JXWDZFSU1NS1FFS09wdUpneDc5K2d0cjhkZjRtV3ArTFFtRVVXeUQ2aTdHNVJtT001Q3ZJdFcwT2h0K0JGQzBhVjhDR3ZCVjgwczd6MDF6cTlDMlordU1VeGlub2JDSnVpSUNQYVdtbWhqdGs2QUNlNVBkL3BxYloxVmRGU0hVNXFPV3QxSnJESFBvRjZTcG9leXdUTUg4UmQxSGxNamFLV1FwZkJnS0pBeFJ2TlpUanFTckMrbll4azVBME1FdXppVDROMTZFQ0Q2Qjdqd3FkQ3M2SkNva25YZVA1dzBUOXg2dml3a0JuK0lsQXUwNGg2dnl6NmhxOFNsWHNHWUdXT1o4aUtnOGh4Y2hzWmJFWUtHbDZZUlNWT1NFVE40TGg2Nm43Zmhka25pNkFmcmx4ZFVzMUIzOU9HMElDZ3BZdjljRUxGQkpFUVlzd0NxVzZ1TytNNGdrWk56SkJSdmltT1hQNnBNbVdCVTErMTJKc0cvdmUxOExxRjkvVmlrTCsrSzhnWlQ0U0gyQnZQL2JWc2ZCVzkrKzEyeERnNHhZdXJTYmlXQW1GMGVwTWZpZm1qNjNORW5tNE5CMVdzMTVXRWtyRjdOVCtTc2JZaWtkWGJKeXhmbmxRL1g4cnJKYlA5MEIxZlI1bVY1ZmdzMDNIN1BYZW9pQ0FuSXhkTFNxSU9TUUlZTW1zS3ZDazJ2eTBNSVVncXZvZDh2bHQ3M2I5TlMwcjdNT0FaS0p1MmpBNjdqQlZKVGljYlJGZTlVOHVKU05jaENKSU1MMm10SzgyM1RwSEh6MmdWQlJBWWRkN1oyNE9vWGdaWXRmcHF3ZG9TcVIwMWFYYlltMnY0cllCRmx1L2lEczg4cDBkdllUMHUyRWI2ZmhYTm1FL0xCcmtKcllFVFFTSTR4MlIyWXlRUWVzNWU0L2x4b0FFbEFpQmpETjFNU0NUeEtkVWg3b3lCaWdWZG1jdmtNTG1xa3B2NEFQZ3Y2TWZYWkR4dEZlWE9Bb1JhZ1NsR1dubnhPWDlqWUI2RE9LK0J2U0pSL3p0MTkyLzFmc0k4akY4dVhaTC9kOFVVam0zVkpnMzNlVDZ3dENTUE15Nm9LbWY2T0NuR2VmYityRzZqZ25ickIxVk5EbWNsMFF4R2xwVVBoTXZlMU4zY242NDVpMGUrRUtma3Y1blI0Vk11L0tYV3luSVVaS05GWDUzR2VyWmtsRXlURStLY3ZWdXpnVFhnNUNTdXY5UFBONFRTRXhNYWRaaU40alVTNTFsUlFxM25lcm52UzkzYnJ2YmtUTjliOUdEeFpSYVd6VUlFR2E3RkU1ZUM0U1F2c0lxMjcwTGQxY0oxT2VBa1I2UGZURWpqM0JPL0dzei91WXowdGF4YXdzbjlCcVROaHNLZDlZOU1JMHM1RVFmdDVESzlaY1N3TkNGYnlzaEs0UVRvN1hPTk9CeHhDem9DVFVEakRjNS9JSklDaVN4enVtQXdkOXBxeHVsRnJpL0tHZm9DT3lUb3NVT3YrclVPNXIvOU95aUd3Q2h5OENpMzVsNVNBS3UrS1h4ZXVQR0F5b0lrQ2tJVGpDZ292K2F5cS8yL3JZK3N4M0RzdGs1cXMwVGRHY2FUaWZOQWZEWUMxTnpkaGluekpLYW03RG51V28vYS82d0RXODhEM2V5NjV5N1BBaWQxLy9wbkJtaUZ5MFR2WCtTTUlsV01vTUVTUUV1ZmZtRGswNGFKWGJZYmNsWW9BZzFlNStUYXNEc2pzYS9EQTZaZlNyWExWQTc5NkIrOXF0aGVlMi9xbmdDQ3BYTS9yMC9KK3E1WFMvR3QwRmVEbzk3V1VsazE2YWFuK0gzQnY0WFY2RHk5cG9JLzFMT3hNUmFOVktNbzdNZ3p3UzgzVjlkT216M3I3N0JhZzVDOUR1bk8wUUd0dmlxNVE5WGc4amZ4TlJWYkl4RFRCNTcyT1dlRGErT1VTeFBoTTQ2ODJ3azFoaEM0TzRsODI4aUIxbmNWUzJaeHlVRXdYK2w0YnI3ZmtWVERoTVVrTVFubVVJdm9QQ3FRSU5xaVJPV3I4TEZsdUlLMjVaODBXeVVXaVRKblFTZHFNOFRIMCtHb2JoM2lLaDlMVXpJR3hWcmRQb1RkY09UVUJPSXpvS0dWRnptVHVsTjJ2aEw0WDY4YUZjSlFheU5jR0ZQaDY2WW5ncjRSNDRmd20yRUlVYzBzUTVjb05VaHBibWN0Sy9Vb2ZFWXdxL2lvMFhUdnkwSmd0dzYwYTJiUWRjZlVMUjhqZ1p2bWlmZEpkYTZYamhndFJ4aDFzUVM2SGwrNVRFWkt3M2NHV2luWHgyUG5rV2VhUHErSWRickR6dElzVmxQUlZSd2p6Q0taZ2J4cGdjY3pRbnFSTWlnc3ZoRlFtVW52ZG9mT1M3UThubzd6SFExV1RDNjVDQkFEUVE5VW41aTlkVUtwNjF6Qlc4OThuSUZPbG9MMXZ5UWxzU1NOTVpKM3Z3dUdmYU5jd2Z2cmI2ZTF5N3k0alNFSWhOajRTK2N2eXlvMTYya0JhY3FiTWVOQ1RydllxNWhwbml6eXkvR0tORGZHL1VBZWpHNVcvcVhMeDA5eDJsZE9HL3p0NllrVGtNay9iSGFXUmVIdTJzUTlCMm1ZbXhxeGhQOVZXK1NLZXIwU3BHSDFVazZQenQ2SXV4SGJTcWxra3A3ckI4dHduM21SWnkrc3lMLzhtcWpRWW5lMU5xN0ZrL251TStLRmhscDdKNk1nT2ticWVrQXl3YkxoK1F3bkNIa3REMWtIdUxRMXBMcDd5Qm50ZnBTU2Q4S1BPK0E3aUJhVWszV0JzV2UydmlCOHJ3NzlvdjdBTHkyR1YraUNWVE1SeGs2WklSTk1aTzBVZmx2SkdMdmhWcHViUGNXY29PTWF2bmxFM2s3SlNsYVpOMEZCak1Yb0xQaGtpNXF0ZU9xamxuWEFmOEt1VXhpMysvYnlkQ1JSNzIrZDUwQjFPYjd6eGZvcmx6aHdJVWsySjg3VlFPM2ExRk96YjJMSEFCR2JQb0ZaNTdzZS9CRTR1UmhGYUhMc0Y4Uy85L1ZNRUN3eGF1REdxR2NFcXBtcEx3NUdDbjE0bUUrUkRQRUk2V0lyYlNMcHcycmxRODFqeHJicVp0TXVoZk43VEhiZHAzSmt2dGplNTl6MXFKcFlHeG5CcDJiZGgweGwxc0FKUWt6RVRJRGh2TEsxN2UvNU9ySVVUV2htN3pYV3lHKzNGM2pYWkN2TElQWm5pamtQYkI0aXkzNVpuUHpvUHZ3aU1WcUMzWkFxcjNoWkYrMFl4TVJ0RDVzOXRqWXlvck40ZCt0Ylh0RGNvNnlKUEo4eTk2VVBmUk1wblpYTmwyVW11cHBiVU82cHhmRk55UnhhQ05VSGJFbVZUZ20vZkhLdlNMTW85cnhVdUYwTHJoU3pqbnAvQmVWS2FvZlpjNHB4MVJvamxYUDRyU0lBWURFQWZmalFZMkxGVkpwRzZHQkhrOUpzZUhZbXpOMTJWcFVEdEN3ZHZGVnRnUkxRWVNRZmdRV1hzWUtwNG5sMG1URTFTSHhvTzA4YTV2dGxlNXc1bjNzdTVtbGs0cU9WcU9TTk9NSGZETTh0dnVoREZETHMrOVcrZ1B3dGZXSmpCUWxwL3ZBblFDazBRcTBPLy9mVXZBY29YNUpDLzJFTS80VFZweTRLSUMzN2VIdDkvbkZVKzdpbExGdm5mQjYzNE94M3k5dnRmd0lPSERIRlFHSnpodUJwcVAwVENEZW42ZEo2MmFVSUJ4enhzOUtlckU1SWUxVVFQUEl4OThMMTFNRERoK3VNYzJhWWlvSjdEOGFiQzFSOE9HVTVYREhmd0QxNVlZamM3OE9Wc3IyVlZLUTlNTlRlVDZacGFsb3hXc3MvVHh0RnE1WDNhbkZ5dlRaa0NWL3RqbE1LdkYrQW9Lc21NWHV2aWY2MkFZbGxBUUpNbGdLMnVjd0d2SWNMUFBWcmxtaExtY1pOSmVQRmhHb0RGRGQ1Y0wwczhxall5dDFKZE1PRyt4dS8ybmdoaGlNWjlyUnpPN2trSyswWUdLQ0ZDRFkwNHVKN29lOWxvSE9RajAyNUk5N2dpQjMvTld1WElyRk81S09SMndsbWFIalpBREo4Zk9mdERGRUtiSmFPZFlyQ1Z4eCt3TjBmUU9qYTAzOEVzV2dIOW96d1VTUHRKZ1MvQXVNVmxvOGpCYmJaaFk0aUtScmxPL0Q1QzRoY0hMdk9CUExNK0tEQUxsUGQ3akZ3aDEyWWhBUi9OMWFVYXhTZkVOYUIzeXVWbG5BN1ZvbUpTZVBaUWtHS2syMW56TEFIdDFjTDFZQURFVG5hZm95ZllnL1YzOEhGWG10bFBKSFpjZ0Rkdi9tZ2pzM0l6N2w5cHBSQU10RUtXK3lsQmpSZmExMDV6U2d2aHZPVUdYOVozakxOcnF1WFhRTERGWG1CU2VUVCt6QVdRL2FsRVBMTldPU3ZWTDJPOE9FRm0ydTdxTGpRZ2ZLZE5ua1F1ejF3SVBxdit5MkRHVFB5eFpxOTlodUNaSGUzKzUySUYwVzJrU1E1bGtpZSs5MnlvandiVjBUVmZKczNIL1cyQ05OczJvaG81REVlUy93eFhiaTZiajBMYVVNa0w1SW4wZVFSUWkvVXkwYmE4WURqOW94SjI0N2RIOG9rN0ZqMHZvSE0ydVUxeHVoR1MyaHd2K21ycnJYNHJPa1VhcmFoWU5teHlleHNGc0xCenNPUktEM0phOElIdkxlTk1pdXl5SkVOUHVBSlVQWDZDeEIxQ0V6Vjl3Q2hwUVBINFpZaWZDRmhMRjFJUXQ4NlpQeDYyZkdpMUVkMHI3dDBuZnNWeUMxKzJ3bGVtUE0vYUlrNGdoamx0VEtPRkhmVkkybmNiU2RBUWVDMVRPOXZxNnBUUDZvSjR6WEJkS2picTRzczkzbzVRaXNQTDBaeTVDVnN4b3lNaUIzV0lRb29UUk1xckZRSTFoaXlIb3RzMkZ6eXk4NFk3V3dZTFg5ek1JVHJZbjdLTWpwQWk5QkNGYThkZFZhOE1WQnNtOEcxOVlBZmtlQ0o1RC9OUkNFOEFsRVhITWtNZWk5TVdEVTdZSWp0UnQ0Q0ZTYy9hTnhjRmpsYmh2K1pRaEZ0S2p6ZG9LK3ZDRjgybEM2NnNoeHBFK3R1VkoxWkhtUDUwN1pta01sQ0NhaUlQcU1DcWNJWlVXUnhnVkxxVi9CUktLdEc2Mnk0Y2tqdnBNNkRIWWF5eS9RNGJUbUpFOGFpQ0RCa3NHaXJ4QmJRSjJQZXRYR1ZTWTBaSnozWW5GWmhiYndDaW01eVMvdXJGcnFEYm51d0pDRWF1Yk13Zk8vWWc1VDNYYythN3d3S2RuZURjTEc3UWFTK0hCWlZ5ZExUN0pVY2JQUnF1ZnBQR2xKTER2czUrY1lzVVBDVDdBWUlaa21NTXNyYVB1aVFoMVBJVHlJd0JDNTVXQU5ZREI3anRxa2huWFVTWDUvc3Q4UU1pK3NJZmxEZkVtYjFpQWhXZ1RlNE8xckFQZ01CNFJtR1VtR3plVWhRVlVxZEl3RWRCdVUvekVSbWEyWk9KVmhQNWFjd3RvMUtwY0VweWdyOTFOeTgrOXhtUytHSElmWHEzWnBFQUwvdWtkUnYrS2YxSWdNcXdETzhpdXRHSnNvRXFNSHFOUXJHNThkeGlyRmRXN0h4dWcrL1BNVkpRb3NVbmh3YWdYVVJKZC84aTRFYk1xcDluWFBoZGJyZ1NOeUdycVErKzlpbXBzMXUvTGdqcDRSUVJlRXZacWFGWnczLzJJVkxuSW11V2x3azhWci9RKzNaaTdrbnJrMnZNaXg2Tk9CNjR1Y215QzJTTU51b0NmZmdUWXpTaGovRWNBVW1BTVRmaGxNS1phOVdMeC90MmNNWGdROTA2dlNKcGFqb2tqSGc0cE4veU8ramhlZHh1WGZ6eS91bHdaMHdOcm1vcGt3SGlHUWFyZTJ5MmhCTkNpQjZVYmR5dlNOaUZLcXkybXZmZk5OSEFLTmcwd3ZaOUhMbGZZd1p3TUJQWlUycHUvM050cE9pbUYvaVg5cEQ3MUxSTlV1ZFVCY2c1ZDFTRnpHdUJWMVNsZVozRHc5UE01WngwUUdIak5xd0VTdTVBVm9jTzVYaitsRWxBQUtaajhaSEdGZ3VSSXhMVkhzZXlweVpRMC85NFAvRGtvTHloWGhkb2puOHYrMTBMNkNwQVViRkpvd1N6ZGRCWVRQZ1YvT1VyTWQxT0VHVmxIdlV2d0RGU2M1Uk9iSmlvTU01dkhEYWlhbDdaUlZTT3c2R1cwb2ZiYjJTTUNFZEkyOHRYM0lNUnZveGp4UVhKRndzcGRTL291STdxakdUZjVnVGtaTHVNaTJRSXYzZHdXSXlwQ05LMEFPS0p2WXNZYkVYaDl6Tm04aEhLWTlqTUR5VzNFclRONFhiRGFpKzYxbFZTdmNDM3EwYnM2NXF1NXE3TXJuU0toaEg2VUdOVW1yTitJTWtwYlltZjlGWWpVcytKSjM4Q2t0dnJiT1BPbjRpMUIvU1lvcElsdk8wMjRSU0NkTFdlakpZMm1NZTFBbGlNNFlvcGphY3FyOUZhb3hQL0tzT205N01ScUdaSGJYenlSZEhXS3Y5ZWgwK2ZDcS9UcDAyR3FwS2Y5MklFK25UQjhFYVA4anFRdlVSWjdDcWI4a2Vtd2VIcnI5WEhxWEJ3ODVITXl5K2dxd1VocXUyUzNJOHVMM1l3cVpneXRxc1F1YVlvOURPeXhaK29XLzZXQmlwVHM3eHhpTnExL0NIYzVGOXFBOXp5QWtNSWl0bGdUelg1dVBjZ01PWlpiZ01pa0w0Nm83aEVTWEIvMkdkZmROV3hWUzF2MXQxU2gyWUlVSTJPOHBaakJIVDAxclBrTDdTeE5UYUxBcTVzdXhtV0xlc3JOZXBtb1crcWUvUmJHU1BOQmtobG5CcExpTHN5emJLVER5UkZRUEtLM0xIN0RZVmJhZlJQRXFqL1ExakFYMG1TQk95cEFhUXZ2VXNyYjNoWXNUaFhEQWtKQnJ6dHBmM2tTaVAyeXVFVVB1dDNybkc1M3pUTGR4SW9IeC93ZFZlMlNpOE04VjZUcGl6WG0rNmVRUHdBcjFvbitGZkVuZ0hkVldFMUJybEhqZ0dFeUlsaVFGSlB4YUVSTzkyMzd0eEc3WDZJNWZsVUlubnR6WWRxenJ4bEhrZ0ZMeWQ2QWh3amp0bGd0TEJGKzNlM1V3YlRDNjlvMExvU0RTdWhsK0VWQ213M2ZlZnBqckFrcU1RNTc2bFRvMWZ2WWlnUUdjVDUzd3NueFVNck5VWDA1eGtONG5FSU81TFB2TDdWS0k5NzBiRFlRQVZjMDdNUTdQc0ZqS2VmKzVkR2toUGdsWnd3MGVHalQyYnU5YTluY2x0TDIrZkRlNUhpWTNiTHhuUTNmS1d2UDhFUzdiS2pEOXJuNTZsRUFGbG5VTHNPQndlOEtSZndLb2Q5UFhKYW5FOEtMM2V4RXFYNFU2WlZQVi9URzY5ck9hUEVBV1NxKzlJcnNLdXJEenlqZ01LTmI3L0VGV2o3N3RVK1dkTkFJQnJQSHYxNW9LWHphNTk5M0VBUmtEcnZCcTUzdnV1Rk9HelhjS2lEb0tLK3JRMHVZNFBza0ZkTzJBMUtFZGg1RUFrU0duaUYraDNjMkVTRElDbDZUNGZ4ckROM3JWVnBjUVFsb1NraDBES2t5QjRNODVXWVFPelp1ZzZYOUUwN2ZidkwwZVJBcHNoc1Q3U0FtSm5XU1FtZHZ5a3kreEdzNXU2eFQrQWwza2tSbS94VWtCQVNJZmh2Rkk2VmxwRkw2YzA0ZlByYzdpOG9FS3VxVlF0Y2h3U1B6SmFzRnBWWXY0L2l6Z2JFQjNBV3VmMmlGcGMrQng1Uk9takt2Q3UyblZkdUJPMmR3QmlXWTBVMXd1T05PQVNaaTZ3OW1INGVGL2NRVlBGeDlIM21meUJQdnZhd2xuenorSHpHbXU1eTNwU01MdDU0M1FYbnFhQkFoeHJUUExXcFgwUGwvSEU2czQyTzVNdFluYVlOd1pFTEJCREkzSUZ6cEwzaUNORldlWGcyMlgrSnFnSTdMcWVlQThvSWpBMjJ4cnBJQkhJZnlSMjRLTnNVNjhtU0hYQUFZS0xvb2pQYnFtMHk5VjBsN3l0Z3QvQUVMdDRjYmk0a2Y0d25pY1dscDVVN1NmSkdYdGVXRDJKWVVRNEdzVXdtbFVWTEVhN2tnendrcnJBSjA0M0dJOWQ0RmFwUTdZb1grNDA3RWlYaDh2RUdhWHZjUk9vbjI5ZXZPanZITHNjY1A0bDdvdkppRVRRYnhhNHg4SUZ2YTMxV3FNelZYa3VuVHl6MUpiTHZDcE1Zd3N4VHlXemQ2bnFkbjJ1Y000aitRYzBtQ0FUZTVuL2ZFM3ZNVko4emdvdEUrclZzeW9nQlJWOGRWTisvU2s5ZCswYWcvWGxOcW5Fd3lWa1h0NHRSRExqa0psZmVmajBzWnBpMnVENHFoeVRxOUVXQ1JrTytYeW9lQ1RBZXZ5MkxuR2EzcW9sN1dHZC9yVXVDbDByeFVSK25jeUp5S2VVc3VZY0p1MmJkYzQwV05XNG91M0VwSitBOXg0U3NQMWk2WWpUY2NYRFhQL0I0OTdyaXJaY0pQVzlvV1pLald3aC9QUERTenI1ajNCSGx6TUFnRVhxbTcyTE9sbjR6VStBY3RCTDh6bUhhcnVCbWhiTWFSWHdlSTR6dWFBYXpENmFUclNJeGl4RmdZYUVaU2VZNG9NT3RCejMzRFprZ1pGZnl3OVZFUGFTdzRtNWs0SEw3Tzg4RXNtSWRGdW1ZMVJCWUNsZk9jOTRwTHY0VjFSSjVZTTNaVmZXUE5qYUVFL2x4ODZQSlBCU0JCQytKMGdZNmFseFZYOXpRWkRnZWd0TG13T0IwcUJhNkl1L3V4TisvRW9FTFFTL1Z6OVBqU1dDbTJ1WENqYzg5SWI0eHRDcjlBcG5wZ2lzVlZCRS96K0Z0N2JuZjRFNno3b0xuRXRWWW9Qa25YclUvb1FBM21HOTFwZW5ranA0clZmMlpGRWp1WDIyN2U3VEh3TzFNL1Rhc2pvQml5YkdZUkJ4Ym5IdXZxZ3NoVTJwTDA2b3ZZYVlicVc2OWYxMUU3Vi9kcVQ4QmQrcExpaytId3VNK3NmYldvSGxMUTlCMlNMR0pNUUNLSjJPYjVTcENEN3RWMjRNUTFBc0tlQ29DZGQ3c2xCRENTajF0bGp2Sk92eXAxUGV2bk5DcFpoUWxtQWVXT3B1a1l6bnVQbVpPOWgwS3dMd3p6QVJSL0FWRzJNaXRRQlFIR1N4bFFCVGlKdHkrSTZXL2pYY25jNHZaeVJ0SElpWTJmTElseXJDRldCOFlha2xjNm8vNDFYZkdQb0tJRDJIOEdSaXdVMEpxY0JXYUthanE3bGNwUFl6c2pqVUhLZnVDbkI0NlZURnZLdUd6OXRNTmxOekFJckdTNnFDNGJLUkF4LzZPMHNDYkJsS1BtbDZiZnhVZHZ3TEVsRlV4c0hYV1ppQ1pEKzgxOGtPb04wbDZkSjB1ZTJTQzNPRyt4K3ZuVXJ5RzZVMTRlWmdlaE84Y1dadk1FMThXREs2YjdDVSt0QnBzYUZ6VGcrSUpFWFYxVVZHMmhMUjVYWFFzMXlZVmZDdUpPVmpZYUsxb1dNcWlJNmhDZTkxVFNaaE9Od1ZSbVR1WmpLZ1RpUWVZSEYwRkNLcnQrUmMxM09BVU5DelhvSlpkOGVWaG1FdVA1TWYyUm9oVUIreXlaaCttWXRrSkh3MTBoR3gvNi9Dc3dTTEk1MUNtSE14bnhicU5XdjhGdzVadUNOc2MwY1ZmTUxMYmR3Y09VSE1kR1cxZGk0YTk5b3M4ZmZsV1cwcUYvVWhtcElob0NBNDU4VGxVWnBWWU1Mb1VPcmNqWmhYOVIwMFlUWk11eEFFbThReEJPVk9iZkNaVVNtN3RnQ1pYbVhkb2ROWXB3TnFVZHd1Lys1T3dETmZqNzN0bXJXcnVQZHBvVjVkN21Od2s0RkRzM3RidHZpOTYrSnhSTW1xTXFJQ0kveUczR0pnMEd0KzMwM1NadndManpXa0JpcVFrSVdTYmhQYmhhcUVSOHd1V3FyWGI3Umo4RWliVTVkbjArZFpHSDBhak55bkltU0FhTnlReDF2a0JZMW9Id3k3WkY5RGd2clphdFJtOXRBSXNrSG9EMkN1em1odllpVEpyQlczL0RPUkJYeWpkaXQ1THZObWxuU2VZRTU2VjIwQ3VkVXhRaDFpbkg2TWZsbGdwbHlKZDJYb0dFakp3cy8waHpnWERmZ21YQ3AyUU5MdlhNdDEzM1lOL0JVTlovY0pYNUZUdjNRRytld2Q4cmVhQjZOc3puZDNzVEhlL0d0d1YzaVRFcjZRc3o2N3FPMnl3V3ZrOHNDL3Baa0FyZkZBZGRDaUFaay9mTTlEYkYzV2hRd0NQQVV5R1NuMVhxWHZ4Q1lndEp1VlNFOG9kSlJjZE92UXlXTkFtWGE3NXpkVHJFcXp6dUZpVXpQdGZXRTlZMGtmMUdGcXlydXFpYm9OTHl0TjJ0Uld4QXV4clU4aURuQThNMmNJYVRsekdvWUlBalpZN1lVcHlSZHk5Y3pZM1BPaWVmbm9OdDlXMkg1L3BTMUs2K3RVQzZyUmYyby9vNjZmdmRZbHp0a2JsbEFyVUtxRmNNOUpEQjQza1ErL2xvS3pINDVTU3g3aHptcDZ6NjAyUjF0d0YvMWN4Z04vNDFXeXp3aDVYenVFWlJ4UEtlaHN6L2NuZW85Ym52RU5UcXRXUnlRbWlKa2RaVGgxTHJ3OEZkSnpKZHB5R1NleEpLa0EwSVJJL3lQOFFVWndqQXp2ODRGNnUyaGtrS251NGcxbktmam5vUkVsR3VRR2pDU05DdXVENVQvSTNtWC9SNXF1T3M2RHJUam9PUnBFWkN3NzRIK0JnclQ1Mlp2aWNaeXRreldsdVFGQ2c1aGdBcEVzRFJLeitna3F5TTR3ZXlVamJrSkdoTnNLb2ZBcmhoaWIxb0lTUklBU0N1QmFTRDFPN0VEWFZrTFNxc2VjdzRuYkVzRG5ZdGZEYTZDbzBOTlJxNk9xQktMVEU5S2RFdWhUbU5tMWp3WDFLVU5sanRVMW5vM09vd3dMMXRpNGkvR2pHK0xQUjc4b0g3VjRqeFpJK3cyd1oxelVQNjFER2g2QkJKMS9FT21QcXVoaFNDY1lXY0dBTjZSWHZGVzg0UzNqS0pjVHFoT3lwV0Q5c0dBZjhNK0NZVUllVkxBQnpwblczeXhPNXpQOWxsSk1DanBlTS9SK1RRei93MmNJY0R1bHIveG4rMHNKQnJraG8wZm9Xam9CdVhwYll3NFVNT2l3dTlZRkYyd0lPVlVGdHY5ZlE4M1pYV0gyNmVsNnBaaElsNDc3T2VFbWsza1U1NGpMQ0QxZG81dDduYjZEOFVFc21Sd3pNc3NicHIzcjE2TFNjY0RNTzJ4TFB3THlWaXg1bHNpclBobnBvSldFeUpkUEJNTzdpSU1wRjJFa3A1QXNGVjJwMjJ6TGk5bU9jeVdMSG90YzAvdHEwdFlRS3dKVHQzUy9qblkwd3F4c1hab1NFT1R0Qnd2ODQvM1RDMXdIaElKSmlnV0RrRUNQOHdzOXlqcXp2eVlRSU82R2o0QXZDdmU4VjdSbDBVOG5FZm1uRUNRc3VjSmpyQzNURDhpektJUGdPZkZ5bHdWdllWWU8wcTBoeGJ2eEl2OWx1YnVraWo1Y294RitsOXFjNlkxbk5WcUpQL0NQblpmeEtaZEc0MURUT2s1d2hOVHl3KzdmZzhZV0VXUFcvUlBWdXRZdUNDNGVoYzJlNmVwM3VVbnU3Yi9tY1VuMk1uK2JmZ0lVTmVIdEJ2ZDZNQXBPT00xak1tUWs5U2N1eDh5d2sycldPR1NtazBNZ0creDBvUjRPTEwvNzc2SjAxRWxGeU5WZWQvdkZqazVvM3REbUU2cS9zWFZGVDJmaWNXUUZxWjAyQjBpenlzZHgySVBRRFBtUjMyb2JOeUdxRWFhQzJjd3BwSm90QmRoLzE2VTBVd1pzWlpLWnJjSzhmTTJZN3lFbDM3TzEzcUsyc0lzak1WdFpiOW5lZE1leW9wSlBHVlB1QkFwSWN0MDZpYnhDeml5MFA2QURwYVdPVFVhaE53QU1KWGhPRUkxNkowQ2xYc1N1aTV0dnV3UlJKVmFHQytmZlZTeEZHUDN1WVYyZG12eG8yWXZnTEc3TWJsU1NNNC9telUrUWRjcEU3a3U0V0JoUlRpczZhYjdtYUg3dFVIS3hCak5YYitIOEgvMk01VUtGSnJHeU54ZDhUaUtRT3VMakxNTk5kU0hEYnYxdGRHWmVwTTA0UVExb2V5TjBaU0ZzWnZxTFRiNTBxR1ZLQ1J4OTk4cEFFb1M4akxRMkV2aFhKVDN2RmFwVnNjSW84cFR6bGsrQVRUOXAxVnBBZzFpUk4zVkdkQlB2TWcvVlBxRlFHcWpkNjNvZnVmY1VsbEd2Qk11QzRKMjZUd0lKUmdSY2xCU2FwZFdGSThSbzVVYjVPT2tIRmtHZ1FPYTBZdWVKZ2J6QXd5M2Z0U3Vlc3FHSG4zQURtQkEzOHVHY2tCYkNQK3hjbnMyRW5sUU5zdWkrVkhJNHpPU3R4UkRINnNjc3pzeVpha2M0aUp3aGJOYWQ5dndSNi8zQ0p0dDZPRmpDMEVSQlFZMGVjTy9MR0tYR1dJYzFHRVBNM2xCVlhoNXlyVzRpSTBTMitwWWQ3bDBLaUErVEZENTl3M1psVnNnell2UEs1Rm5vdmw3M1hkaWxRbE9KQUQ4VWpUTTdsV3UxOEd6a0xMeTZMUG4zYjZZdEs3b2dnV0RhSkVOOVBPS1lkK2tZSU1DRSszVnhEbnB5RndMQ3pHRjRPRWJVRVFSSUg1dTRqNDI2alV4WFJSaUNjOHVwWkdRNi96bFdsd1IwaEVEdUFDWm8xMW1WanMyaGt6b1gvVjRsZWlYcU1Jczd4OW1jd2dpcjJwdVY2UzByc0NuYTk2MTltcnpBN2JtMXU3azdzTXg3Z0ZuTEppV0RoZTBtTGx3c2N0YWFYcWxsdFg3SVM4S2J6N1JTenpzdGx4SExrMWEwN25kaHlFMk55SlJqSVRWdDE1dUJ4U0dSNjNqdFppQnFrTUFnUm0wbzhTclhaNTRDeDJTNHd0eGVQS3RCTUVPT2dXUXdjL2pjNkNXZFRKbHkranorNXRRUlZTVDJJSXBTenVDcFd0aXZJTVlwc1lxUDZEVW5QdHd4VHczdXhCTW9CTUE3ODZRbUJrSFdNQzlBMVFreTBuM1I3RlhOUmxlVkNCRjdtUlBtbS91bzZqYlU3Sk5XZVNpMWdYa050dHBqVkd1cW05T3lRY1ErZS9PaGJZcjZNQzRyYjdyVnczK1EzQUNnSW5PaEtub05FblJvaVV5cCsvMGU5YmNIVHgwdVVEZTAyZENBdTlCSUYya3NqVXRzR1AvZXYxZE1BblNPcXAwa2x2NWJOalE0WjE1VGhTNy9yMkozQkluNVEzOEs5bTBPNjV6SG1FZG5YeHpOTGtoQXVTWDU1dVB1RzFZczRiQ2ZEa3FhQUs3QUtEbm9qTHVsYTE5OFRzYjhCSE9UK0lEaFJoaDdtTm1lcWtMTlcweldjR3BVeldZeUNiSmF3ZmhSUXV2Q29qOXpFelhSd1NMUGNXSG5KQzYyUjJTQXhzd3VEdjlPLzZKOVhQYVREU0hiUkRlZUpJSVg0ejczY0R3NUQ3UnJ4K0diMEpjTmVQVjRaZFZZM2dSd0tzM3JUbjdMczJkdEVJWkw2UXNsZUs5WEM1TkRrbGpIQjNLRzJGOW12MFNGMllVUEdSeHY4eWovRi9kM00rRHVrL3VWaHJQRDF0dWNnVGFobFRXWlNYSmlST0V2WTVyaXY4c1BsWHdaQ29tMERZNGhwNDNSeTczcCtIMFhBdnRRYjdTVG8yRVhQWjJicERjb25OTWdxR21DN2JRYlY1dysrZUhleUZXd0NjWU5Ga1BVWGFUWTFxYlBJc1MxQzJML1ZjOENrUkJYb3VYNGVZbDVwWFNOengvMVkzZG9JWlUrbUd6SGhmR3NlNVd0a3E4K3BMM2F2bHJoMXBVTEpWendrVVlvZitOSlBDbXFNMnllREgvR2cvWXdGaWFTWjBQeUpMYm0vOFB0dXJ6ZGZVV2h6Tkk3VExCL1FFTUUyM1AzcENMMTJkSUd0SW5iUERmalkxbUZzMTk3ODVLMFdxdkZER0NJOTF6YXl3YllEVDRaWmNRYzJ3dGloYUdRTThIRnpOMGZiaGRtNXlNZit3TStNbnhhbUxPQ2tlTkJXbEZvUmw0cXY2T1NPUEp1cXlBQ01TQXprSi9BZllGK3hYZjV6RFpid3l1K0EzSXN2S2JPZlJldnViZGN1UWRNRTBpTVAxUVhaUFJrRnRzZEJvcXRrUHNYajR1dUZzamZJbVlCbDhTUFVzTlFyZVBFOThKTS8vR0F6WDJyNnYxS0JhNFVQTy93UGhUQlFPSXNZdnpzRWxkV0I1STVFdWs4R21EempHSm9iN2hOVnd6N1FMZnBiSUtKTStzTUpJMWh3bzljODVDTnVpeGFVRlZzRWVHNDBVVUhJQXFuZ29qamxocXlhKzdvMmd0dHVVaGhYOU5oRkFSLzJnakRhNkd2WkhMYURxbnJDWkx1bldOL25mQW9vazlUSkZ2N3JHMjZRc1h3bndJejJ3cTV2dFcyT0MwTDU4NUcwd2Q0VVo5bEliSlRya0VFVi90d2dpd2tpOCtlY1VNK0x0VHlZQndiWlM0ZDlLUFdZRnY4ZTA5WUZkV2VYTXh3TEVZaGdnTXRwcG9RbEtzVWR3YWE5V3VZcmgyS2dLUUtIK2VPSWE5UzJPVmtCcC94SDRKeURLZkVLRW9TUmZOZDZwa1Bvd0hsTGx2ZDRoRjhFbzZNTGhrVnZ4cFlvSVNwUWkzN3Flc3d3QlhjNEFMd0NUMVp5QjQ0b1dZeTNxREYyRFhWdzhKY2RYdXNqd0FnZHRyZ3ljU2YxYktIU1htdm1JVzc2TVp6RXg3azBFTGVPRHBML01tVnRZMFRTMG1pczREcTNyOFllZ0x2TE9JS2oxMU16SDMwTkE3djB1eUQrMGJ4WXFOcW9SQmtwQTdIbWx1bnNtSE1NN1ZwU2JmWXN5eEV0MGsraytOMDlSck1IRWJoVFU1cjlqaHhiYVNNMFltZVJhK2pmQTRSQkY4RWVLS3BtTUllUUQrT2JHZHAxNlFtTDNFZmxHWnlsbnVZd3BqVjc4YTM1SlJVK1RkUyt3K09lOTQvMCtJQ0IvaThQdml2bW80TklFODhtNHFQWE1MR3FaQnhTVFBvbjVMTk91M3Npbkwvdk5JL3FMVndUTWFaUm5EbmZYQmViVDB4UXlxQ040NE4vTkZWbHRVL3d5UUwremtocGlZRWZMMk8rUWZ3N01vSWpGbjlyMWFUaTdWZ0ZBd3lKSXdHUFVybUNOL0tQZVFxQXRpQ3cxSllSdVRLcVk2M0dGbEk4SU5wWlVKM2toSmZLeE5yTFcwajB1bjV4VUVmOUdLcXE1NzhoTURjcExMSStKL3Jzck0xSFJJdHdIVjFwM2gySDkwaUFhb3FNMHhHWjd0NW1QaUpCV1VUeVA1UzdYYlhqL1dHNHlIT24za2tHZkorYkRhTW1jYVE3QWRmaUoxN2dXTUYxRHFaUVA3RE1TN3NjYVdFWnhSZC9CTm9Ua085SUhDcC9ZZWFsSUFlWFV1bUpMWjZ0OXNrQjVRR2FUWXJXV0NzazRvdnB0VHZXSUhacWY5dUM5NWFPaXdiN0NJcmgyVUVUcXRnUlk3VkN4UGFURUN3U3JuVWN0ZXpwY2IvbGg5NWMzNnhCNW9IS0V5TmNxSEU2N0Q0cU9EVkpiZ2d0ZHhtUi9Wd3FoV3JTZ00rNWFFbjFuaXVicjRldXdqMXFTWEtHVWhWVjdtQ0pGUkxaY0UvTjhXOXI4ZkcvNjNxRUZTa3IrZ2pQdzJUWkxGNVM1N1RYZ3RyQWwvdDZncXdVR3lKTmc1SVZNa3c1UDlBQUxrWDBLaXFFdk4vTDJRcWFMSUJCeXlUd0NMYXRQV24wOUMrZTdFL0JIMTJacUJHZ3hKc3g2SE50WFVoSUxWUzNqaVBkQjlSZm1GQ0IrWEZ2bTAxMDhua1YycTAyUUFZaW01R0YxOEVhK1FpVEpqQXhPb0VFRVdLb1VIYTRKdk4zMlNlTWJGemhjdVFwQ0tpUXl3MlIybnRTbld2SFhqd2hPa0t0SWtuTENPTG9pT0tabHlRb1RJRWZVMDRzMnRjTEhLTTJoQnJacTJpSG55cXNnL0RCV2UyT2Q3Mldia2JVd0p1TGwvV2N1ZzZyTDlzVFlzV1Z6em9zR0tkakhVaWFpaEpTcVNGTjV0aHJNWkNNMW1LbU9qMG80Q09MbkRSekpQa20xdFlmajh0LyszbUZOcmxRQkNBZnozTTJONWJKSU9IR3QwaUhTbCt6bVFwNS9KdUdPRFJCSUZuSU9VVVRyVytURmVlcko4S3REUTdYQjBxYmlMNllOWmJ0MFRxbW83TnZ0VFVDMGMvT1FsbGZEK2F4am05TEVkUzA4ZWxDankvUmtWYVRLRFpWZDVNaXBwd09YOVc4OWNubHBCUnpFTm9rcjA1NGRsSTNDTmtOWkFwdURtZDJVMkUyajBncFZqbDlWdmRnbytpK3lDSkJham5CU2VLUHhudUFaTUdkUkh6aTBHYWUvdzN1YzdEcWtXTDFhVng4dUFWZWhTbEF5MWxSQnZZR0orUDhQbndXUUZUSWVoazErT01KaWRabjZkYVg0K3I5Q2RjMi94QUdJSDh2cFV1d082blZZU3pBWVFyWWhwQUEydjhjVG45Qi9ha1lhTDhrcjhTZTVySmZsRy9SVjk3MXVibklnTmp3NWZ4aUYwR1NrU2VwVHpNQnlWZ00vc29jVmZ0RmU5SmNvaG1KV0ttNkQrS2dvQVQ3TG1lRnBhYnNQbTVtYytWRjN5dk4ydUdIc3VjTW8zNFFTRHpNb2F4U0IyUGJCUk9tREE5UVE1a3B2QUZCMTJxOUYydG5VMzMrRFFBcVBjOXIrdHVTM1NhOTBVTjUzUFhTbndTbnNScFdOMG9kS3k2ZFFOSnNRYXRkVXFiUmlsbnllS0dWN1RDNC95NXlORDZiNnp5d2xicTcybEhZTFc0V1BYUEtzWFU1eFZDU2JtV0E1NmtJaVhIYlUrMmVQVG5CZVBrSXF2amF4QXpnTHlnN0JwQVUrUnNzcGxCK3lEdFVNM3d3cnU5UjZQbDI5U29aWnZrZFlXNUtQdzIzR2FHM2ppZkJaenNTOE56dTZqRUZLeitzK0xkN3lmQzRsL2RtNDZsTkVmYTVDdklxMWVtOVJRR0VYQlA3Uk1McXV1UVlNZDJJeC9kVjVRMEp6T2VRc2toVXFqQjBNNXc1dTZzK2RQWG9lSTNOaE1qOVYxQ2tHZ2E5Y0diOEVMZWRSQTlhMmpWKzY0QWl6Ni96M3REV1NRSXRiVHVMcnFXNjdUVzhscWpBaE1od0g3dFVaeGRPZmtNb2JabzFyL0NuMXdQOE5ISFhQSFRPendPY0g1Y3lYYmNnVnplcmtkRzFkZmZ3QUxrWWxpNW0yOHpSRzAvd3ZJOVpWU3ZZTFkyajFDYUxtM05BQTU2L0MvcDZsQlk1UGM5Ni9Ld1pqS0VOVkRFUDV0Y1lUYWJsZDQwWjlZbFhCamNaTFQ0UU5tdE5rZ1ZGMkNZTEc3WlBQMzMzRk9FZHlMc1NyVzhES25JK3Q1WFZoSUliOVBRbk9wT2lncVNNaU93eE5vZUZiNEFLRWIrRkZYK0NaTGpkTHQxTitkUHVrcGkvQUxVWWFnbEZFTXR3blV3TXIzLzdJaXNqOHpGSG9nendlY2N3TDNOYVVCMUtrOUM0TklnY3Z5dGdaK2duekJLdHNrSVBHdFNGTmR1VDRrUFZTaFZSYjViNUo3alRvUHRuMk5FUlhOUW5VM0ttQ3hvUzA3WDhMdk5SM0d1cUJpelEwdUZxVGNZUTVsV1Q3VmZYd3NNaWRJcEJWV3FoaDBmeUZvVVlkOFhLRlJNcE54YnEvUFVOT3NuaHU0dTRBdTFLVi9PaGxqSkViSDhzVHg4ZXRMdEVGMnhKNXlkZE9qN3ZKSWh0T3I1Z0tYdWs4RTBzTFdNcmtWa2gzM0VGSURnWVM0SlZ0aW9FYUEvNWJZM2VxMy9rbC9TRkh5Sm1Ic0lqNGxLbWhORjk0ZWp1MVBSZXQ1YWI5ZENROUFUeCtXWWVBRVUzR1pKemQwMmlMUFZ0bW5mMGJhVnU3ZjVEaUp2bUc2aDlEN05ScFBKQnRQaWtPRkdFdktSUTZpRkk2QkhIdHZzcjBpZ3c3MzJOV0J4TEpmOXFKVmVmWXk2bUZmdEhKejZMREY4NVJIdXZlQVJhL1paMENaWFdjMlcycEd0TFRXMWV3STVzN1puMTFPWjdNR3kzUGk4Q0hzUldtZTcwWVBlUnlpbFFnSnhkbjNudk0reFJBbWc0aTNIQzVoYjkrRitCR1NYUFplSXpzZEJtN0xTc3QzUWxiVWVRdTUrY3R5ZUtSVEJ0U1B4eUtud1F1Q0VwQmlwcE5rcTlUWmwzOCtZdWk5amVoZTgwVGVSYmZKaUFsemZubEk5cWxYTjlxOSs0WUlUbzg2aExUeHBLRkdZM0RqVm5YcDVoTTZYaDlpaUdGU09IOEhPZ1R6VjRpTEljd2VBelMxZEY4ZUFYWXR5Z3pHWC9DN3dmbjlUYThGQ1FHWWFVcXFoSEp1cmlCRWt6K3piVFo2Y3BJSGE4NlZHN2V5L3pHSGYvRTRBSkhmcVBXaEpydklKV0swbmNaWnY5NmJNbDVJWVpFSi9XN3BMT2tkT2dvbnpLMVFsWk1qQ0dzWnZRWGZZTmt5VFQ0NzBHWEQxdTFaeDVxRkQ2NG1RR1pCLzM0UGl3TkZybVVIZGNxUklGcHdsaml1c01VaFFtWklnTTZ5Q01lZlM0ZGNjbVBEUFhYS0cyUzZmSVAvdC9aRnI5MmRuc1cxUGtNTUpjc3cwS1BlSGwvelZlV1RDeHc2WFZHc3IwNUdKNk5BOFpVL0RLdUZKcEdNay82bmNGSWFneDh5bE8xRGtUNkcrUmFsZXovMVZET1A4Q0tIZlkzOWNJWmowVWZpTEMwOHBUK01NbG5WTHVCMEF4b0JYTURPMnVPMzAwZDd2QytwaHNjMnBNNlRaaXpwOTMzeUlrN2FrbmQ5cmNVU1poMVJ4cTRIRWFzNlBDU2FMakdLWG1TQmRvVmttWVVEenllUFVjaGFyaDltRXBkT3dNd1lVMHZiS1JFMHdJb1dNS2hnczI0QkVKTStvU0luWktSdVhUR2paeElSQU9SSVNYYjl1WGJ1WWp6MytVdTJGRWhRbVhhTThrVk5XVTd5NmxKRGxDLzFKUUFhSHFMRUlGdE9hRk4yNFh3a2lycFN4ZlcvTDdMZWFYNldjSk5pOTZqUVVHWVcyS0M1QXBsMm8vV25CUkx1YzFPeXp5YUg3eW5ZUnJ6UEsyUE5QOVRuOGlHU0dKeGJXeEJlYWZVdjQveXhuMy80RmNpRHhpemlxbzJvZDR1Y1c4Nml5NlhIb0UwRGdOdkNLYXVBdHR2N1lVRml1bGRDcnhIZTNtUkgzL0phZURBdWtDUFRPQlE5VXBlV3loWnpUN2E1SXRCajFxR0FMUngxckRxL3g2MHdNd1NyQUYzd1NSS2FlRlJPTDZCcU05N3RoNnpKYytpRVZwRDZIM2gvRGk2aUN5bnFmZ3Q3dy9ZWnNiWSsxb002QWpwNEMyWTl0TjBkRENjNUFHUlgwdDFZVWRRQ1hqWHA0MlZwM1pneHBRR2tBUXhrUU51MjU2QnZQRDU3ZzhVSzhXQWxxMFZHZ3c5OGlvbGdXRDIvNG5SSUJFVzU5Y3NhNHRxWmRpV0dKMC9yb2lzbGhwRlRuNVZTekFZYTVwU3lTWU9kZnV5TmQ3WjhSUXRSNkxtcDkxQW9QdlQzeUFCQ3Q4UzVHQm5SSGcvcFIwd3NRTW5XV3NBS1B1RCtVWC9IcUx2d0xQRFI5bkRMTzYyUDVKMjU2VmQxYlZCakdtaWVhcmsya2RtVmZtUDVjNXIrblBSeWltd0tRVllhWURNMGZUS2N5c1NwdHlyUkJqN2NibnhLNDBlby9FMW8vZzVWbkNTL2YxbkN0ZEh0UllTT1AxYU94aVZvaXNJNlhFc1gySjhvWHFEQUorNGh5czRxRzVMZ01QM0cydUY2Uk5SbEZXYjIvOXo2UWxzdG1YTUhwekdlQkVjMmxTT3B1N0M1L2tPWmxuK1J2OXQrVmdqTkFtaXhxTytjRllhSWw1TXBxcC93cHhaTW8xbndNTVdTWW80a09FRldaaFBWL0tMVDVRU2svU09qQ3dIei9jTm9nekd2d3VPK0JjY25QVzcycUF4azE1UUVqbStpNlh6QkxKZlpUcmFmdW1mYXowVnk3RzJocjJpeVdCdnh2SktxZE5nRC83M2xlbUJoNDBXd0NJellESFh6M0ptZHlTRnpBUnFOZmd4MzB6Vk9sVlpOaUJLTkVkTE5hVmZYYTZzaGxiUDVyNFZ6aDBuT1c4SmJsbVpXV0JOQVJsRVE2YzlvOW12TFhYcHJQUDlYbklDT3NOREhFVGZVMzhxSGxvRlVDc1pCWnVLTWJkaXQ4Zk91KzVSTkN1bEZjRkQvOHUva3IrQ3IzQmNROGY2M2tHVmQ1eVdyaTBFV1Bjam8vN012ejFnL3g0bCswNGJzMGVMZVp0QnkyUFhBYTNYY1ordXQwS3hybkFhbEVtQVFsRmlYKzNneld0UGVjY0xreUsyM0YzMG9xYlJLOTkwSWlsVlN6RW9CNmFPMmVEOW5Ha3A0MXdqTytPSEU5Q2hxT3dtZWlSVUZFNnBBQk1hcDJmbjFuTmdnQ21PazRLd2tldW9nTU54SUJwdUQ1T21reVJTYUI2Mk1oSk84ZTU2ejJUWWo1TC92V2hhS3g0Y1VVbDVQQ1k2dXQ2SVR5Qytkek9oQk5PNWlGdlVlWCthTURQZi9LT204bWZyTTRROGF6THJvTnQ4NFV6ZHlDdG9PYlVGNXhZbStGOUxBTXFzeXEzcE9wb3ljMTl4UUxROGE3bTBTb3RxWDE3SGdsOEk0byt0UmJINE82R2JrQlV3ZGtkQytPQm5sR21GMWphMlFOUThRRUt0OG1tZkt2Z05HQTBiek5MRE5GV3orRjBnZmVQbUM0Q05sdzlXalhVVTh5SERXakVjbjdxeXlUSm0xSzh1TUttbWVPeHZPdTR2MkR0YkcrWkcrYWY0WDk5Ull2TWh0THMyb2QyaHVLSzc1czVRbk4xMzMzR3RibktmR0FmUnNQL0REUHJtMWw4M0tTdHJ4RDZrNWZOQWxicXB2WnA4U0pZNFg5MmpWMU9FSWRON2pGL01lQTNrRWdHNXJ4SjE1d0g5OWtBMUFRY1RCVDNmOEU1TTRZNjNJMSs1TktGK1hhUGp5dWVzYTlFU0xSY2RnNytWT1pYK01FMnlDdFVaQ1lsdkpmWjlHRjlwV2Y2SXVlT0JtTFVJdEFwSXhYbHJTM00zd0ZzTitpWE1NV3dycUpyWVVzN1B4NEFOWVlSNmZJVmRZVDlBNlYzZjFrYjFaREpyV2FxRWZFaEpQT2o4c0ZwWEUyT1gyR2ZlQVJ4dG9uZU1MNzhtQVk4ZVBYc0lzMTR4aFdzMGNuK2JlWGpCdVV1SWkzVDRnelpZMWVDamZkZXBFZFp4YmFUdFNrRzJBQlh6WDEzaTJBNnZMZ3BCU3dLNU5kSkZIVlgzcnJUcWVCQlB1dWx2WjU5VEtMSDRmbG4zK0lNZW1pY0tZUmJwKzVyOFMxKzliK3ZTK1piNHM0dkFSUTJWVGdHWWNYSDQ3Z3lWT0FMZ2JIK3BwUWhPYnJzTVNTb3A3dnVBVnljYVZwbHN1c0N0YWthQ283Z1VVYzJGK0gvRUsxTmRZVlUvZTIyUE9xNmhGZXlvaFZETUJyZFJvaXdiUm9RWDV1WEMvRkRodXp6ZjhhNnBJWXpHMklTWFhiNE81Qkc1Q2ZEYjZmV2xzSkRaa1g0NDJzc2xNd2F6WVo3MzYwaVpqajZlMFNrOGFuRGhUYlo4dzJoN1dFSjVTWWR2UEVmdi9MeEFvR2pMa2NCcjdwaVpTNTRRRnl2d1l6N0tJQWkvZXljbEplWDRsRGVZZ3FLR2YwVGVDVHRaM291cG5HSVkzRWdRRDRYMWNES0g1dDVwZVhYZFZ1d3FDekIvemMzejVIYWQvc0I4NnVQRm8xZlpsWmNpeXlCTWdzaDRGUkNBekdYNjhmbXlueVVka2xSdjUvZWlHbGZNN2dLcFlBSy9VYjdHUnRsdmRESlJ3blVwc2w3bmRjNHlOQ2ZYUHpuYnlaRjZWYTFuTkJmY2lrYzlrZEVESENYckppaEVnYmdwOTZtY2FOS1loVVozanp1N05hQWpjMytUdVQxRWk3cEhJNDRqY1dGdUg2alJobmppZFRXeEMxcG16N3RKMEhtSWhiWThXcUhROWxZays2d2pVamZEZEt3c1E3VzUvOGd3cVRZR2FJVXRQaXVCQ1NjSEs3MTNpazRFRFBSa2w2YThYMHFPYzZ4YnFybjV3OTdzOS9ma0xpSUpGdXo3QWliYnNUMTFjVllnTXVaZnpyMmhKVG5LUy9QWElzSWJEYlhVcCtlNzgzWk1mYVMzV0NJdzZDVXlNUTdWOUdzYlZQK2EyR3RlWmJUWmw0cDdoZ0NCTFEvSTh0cjFybmJYWjRibkxTcDFVUHVBUlVwb242dXduM3plRmtFN21mNHRTdDhrSTRscVl6VVBveXpPZWNpYmIzTFB5KzViSUEzdHppd3NwelJqSG9DaXBUaGx5RXcwelArWkl6bERtK0ZBWTVpVmJReTY0NUhxYkFXajJYZTlGUlZDQkUxZmd1TDBYbDY3NzRPQ09sVDJDdHZwL2pqZE8yRVhXRml1dkhKRHhhai91djcvQkpFdUtBbGNhNC9OamhBdEtvNlFjbG4vYUh4dEswLy9QVTg5dk12OVlUdFNZVnBDS0pteXRYSjJYOXZGODBMV2NCMUMzM3I4UFpxeDhxRXV4WXQyTXJOc3VPcHE3a2FIdTVTQnBRdldoZHBkTDhOS0M0NlIybzA5aEJqRWNab2N6Z3paY1l5RHZtT2hPeVdrZVQwM2VrZWlBdjdtenZDMkVCbFYxMW8wQVhoMXpVNTJGcWFQaVIxWTU1M25VenhEUURNMmhxZFNnVTk3NkVuUmxCbUUrbmVpNmcwT3NjMjlGYmphQjVGRkc2QlVpbEQ1RGhyK2JnU3lJNzZsNE9rN0x2cjk5SytnbzJIQkFZVTBtMHE0ekY5c1hBaExjR1VDUlFRZEJqNEt1MXN6Z2p0azE0VUFPdDdGaFlYY01PZ1BKVWl2K2Q0VERJZm1GOXVBWHpYUmNabklLYm81ejkyRlY3V2d3OXB2OVE5TDZrY0R4NkZsZXh5N0drWm1CM2RXbkJrS0pEbXFEZGZZdVE4MkhiUTNzdnJJbmlETjFqSkNsSEFKa0R6ZUQxcmFOWTVkQXhFcTBSeWRiY3kwMFA3NlZmZUpkOHJtSjhqUkhKWjhFenNLdTBqdDFESTVmMWJYWkVtSUlRaWVkbi9TdXNaaHBBRHMxd2NCaHdUYTc5M1FYMEJ1UFd0R29hcmx0Q05KU1NnOVhMV3VEZ1pHVGp3UnM1cDVPemN1WEU2bUxPSlA5ZzJFWmc4RXE2ekt6U0JXU3pENEhONnZwMFR2b0E1TlBETWp0b1Vlb3k5eGdFV2owYUtzL0NCaEFrc3YxV0ZsU0hGUERINVNrWW5GdExoY3BXTnFpSzByVE5QU2dhRnZPUEgyK28rbEIraHRJd2lVd000NFpYblo5djNWbXBJYjVVT0Rjak01Y0dNR2hrNThNWDdDeHZiNHRHaHByQVZBS0l2OGlvUUlTQlI1enFZOW9rSnlxSWZPZGNya0NPbTRXUytWeStPMWFlQnEzZ3hsMFNFWlp6MEtIczBwMktJQUlTbkNiSUNWeUo3QnBCWEo2Z21RM3UxQ29odTdQdWRhRXFGc09icUhLaG1KaHVTaGxZbTRwM3NEYXNpZmJ0ZTBJQTUyK3ltNVRSbElCTEx1OTBDaEswbStGYUgzcEg0NWVKZVJmTHIzTzcvVmpFeDJRQjNIVFBuQjRXdEVEeHlEL242ak4xMUhqcURNTUlkR2NKemVJcEwxcDB1Z3grbDB6ZG9HRVNmZmZNbzUwZkZHQjFxb3grdTdQbUVzR3pGTHJKbGdLMXJySE5PdEp1ckt0K01ZNEt5a3l6NlhkY09SQWpxYXZ5ZEV1T3RZWEwvRG5vbXU0WXgwMkMyd2NXRHByeVFrUG9hellVZk9rby9GeFZEeWlpK1VnTFpYOVF2bENDaXpEU24veXprUkcxUDE1R3RZOUZJRjhqaVd0Vk1jeTRhYlozZVRGaTB4S3BpSzB5TkJZRy90cVJWMVl4ODU2bFp2NnFGam1TdWRBMmMwUThJb1FxT1RSM3lQUThJL2Raa2Uzbzk2Yjl5VEhHc2RLTFc5OW5sNDRRNFM1UU0rV0dwdmRsOTFMQXROWm9DWWVtbG9mZEwvVWlmVW1WSENwb3ZmQlhRa1BIZWNRUVBrcnFTV0VjMHlKbDVuMk1HSDJybkdqZG9GREVRb3RWL05nc3BXaSs3bkw1MEtKMkNaSmY0TWZWeXMxdFZZRkEwbms5aDZNSHB2L0M0Y2VNL1lsTzM4bFp3T2RhbUJDalZDMlFzUExtb1I4Qnl5YzN6amNKbGpXMkdzc1lRQ1UvclNrMzNnN0pCSzluczNZdERJMkJHMzZ5bFVxa1I5S1hqbGFKaHA1aUxqVHJMeGpCMTNBYThSemRUVWVGMmVWcXlON1ZyZWc4MzBpdU5UMS9hMUo1ZDVZL0VNa3lselJCSy9ac1B3MzVTZ2hFNkpTZ3I1bnFaODVVeUdPdzVvNlZCYjBENUtjaFpsOGJJWFlyL2FCRjg1bFpKaC92TDhEN3hXUGcvRUJ1MTFKZXdyRldFQ29aRzM5VlpMbEx3N1BlSG5qNEZ2K1ZScXBjKy9qcHRGOGVZb0FINzYvWHVTdGRZY1pQaEFPWDFWbEZwRVNhZXdRek9qWkpabVVNc3NwZ1Arb1hGRVNadUl3c0piTmRhVDdCTWNqWWpqYkludnlQSmllYW5DeTJBU0poaHlRcjJZZjlZaE5zWkk4WE1yZGJWTHVzUmY0QXI5WElOcGZ4dTZoeDNIeVNRYTFjSU81aWJSVk0zanNTbVJiV1pHcXlvTGNiaFJOaWxLSUE5NVVUM0ZPeTJvaWtQaEpUZ2ZZdHNoeUI5c1dsSW1nOTVlSTk5WmFxb0hvR2wxeU9aaVcxZ3N3cW42blF5ZUZmcUNMWVFSVUJBQWV2REVydnZncTRucWZmY3ZIeTFYaGpwRGxWQk13WmdKa01LQlBwejR6SWNOemV4ZlI2YzYzZisyeEIrRlIxNEZBekFBVlowREV1b0J4STY5REl5cG16YkxPRDBCUHJnRkw2MlNIWjhFQVd2eDFDR2YyQkE4MTZuY1N5ei9HdkRpZzcyVmxZU3R5UVJNUWlySlR3dXdNMklEL2lqbC85bDU2OS9FRytmNmhnUXFTMVJFb1YyNzZzYlhmUUZ5Zno2dXhkL0p3VzRpSDloY2FyZDFiK0tOajdQWEY0SmZ6MWZ1NFNCbm8yQi9EVE1YTjIzQzJvdXptaHBTcmEwRmdvS1NIZDVwcWtaaGxKd21HMFpTY211QS92Q243cmtRM1Jwc1U3Ukl6aTRmU3ZSZlpvcmhkWHZ1UERVclNvRW9JT3YrRVpmczllSzAxeGpBZ0VUU1dXaDNERVREYnR5eGljYU02WXdlMEtMZXcrZDRXNFMxOU9RWld1Qkk2V2Z6US80RDd2S0dYdVVEMGZzMHNPayt6Y3ZUa1ByaUpsOWpjeUVKN1pJbVZobmJVaG1Ocy92WG9ITUNyNmUxU0lFblNaTFRaZE1aekgyc25iMmpRZDFXd202aWR2aXJaejFhYW9ZdHRFWVdRaG9EUFl1Y1JDUjdsZ2owajl1MUMwWDM2ZFpyVmo5ZDRxbDdaQ3NvUTVZUmprRG9PbGY2WjJCRkk4cnd1eHdOMk5hcE5MN0VPM3lNTk9ET3BMaWV2bGI0RFdDTCs1dDRJNEprbEc3eURyRzQ2aHNsRDhrSmZkOXJhRS91WUxmazFSeUc0UFh5cGEvdVFQWHVPRC9GWGtFWjA4RmFpS2xTL2VaSnVxMytVdEtKM054WmdBZGluNEFFQ3FaaDV3M3hNZUU2ZHlWeTEzOGw2aE1JSkZmU1NIVzZJbW5IZVY2Yno4OWdoSWg4ckxIb2xvYXJBeHdKaEtpaFJ6TkZnRWw5MzBabnRnZEg4SlRPM3RPZ2lYeFZkOXQ2eHdqMGtKMzR1QU5td2p2RGVjZWhrOFRHR1hxSXVPdDVhWXp0Ync3Q0drMlhKa3VnK3I1eVNtTzYycG5JY0lOWWRYV1ZJRW5oN3p0ckoxbGJybnVUYSsyVlBxWnorVjJLaVNBY2dxRFAyV1ZwVDBJMlo0QXZWNGsySVJMMnVvSHVleCtyc1NKQzFaQ3dIcmRSQUF1b09uSGM0N1paYnNQUHdHWXFZZG82MkVSWEt4aFEvRTZIYmdlMlpUMENBdWV2MHpjclR0b3F3TEFnekZ3Y25NMkEvUk5weEpORmQ3RWQyMUp4RW15azQwOWExOEErOWRBTS84SUhXVU9oa25qdENrOC9wZ0VYVDNWNUc5ZWhaMnd3ajlLcGxzM1o4MFZLNHFjdEkwY0ZWUDVxNkcrVDBsa0Q4VjRVTkd3WWxtenA2M0pEdUxoMWRaY2Q4WVFMWDdvMXl5ZjhtdzBabEdPbnJ6UFRpdUVvMWo0THpGTFQ5a1BnV0JXOUg3a0xtZkZDb1kvZmxXeU93K3p3VzZEaWtZbk9nQi9Pc2ZmMXY0Tm9vN1QxYzhFcTFxZWJEMW9BbTVidE90UTlsWDJERE9jY2lZNHd2YTdXWTN3UTMvWjFydzBSZVl3WExBNFV5YXlrUHQvMzZ4WVRBUk9Vak5wc2IraTZpdll3OGw5cm5IeUdFdlQ4dG9jb0h0QmgwTUdhWnRTNC9KSWdIUmloY1liU2ZDaHdSemZGd1R2RkFSbWl4YTFMRkxva3JrTldiMCs3Yk1ZNzk3NGVFMEhEMGgrd2NSSnJlWGMwdzYyMTJiUW9Zamc0Q1lyQjFnQk5KbXpKanFuQkZINDVBSTIzMzU3TlU4OFRqMVZXWnFpdE50VHBTMCtZNEttZkxoV0Nqb3VGQWdzcG1FZ2ZnMENoK2pScUpHN3FscHBiQXRTSGpVaXlmMmN2Y2RrYWNLQnVlK00xNndZVi9uSnRzcGlubjVRZFFPdzkyZWpjdGJzN1ZWcTM3ckdkYkhkTWxyQVVSRlFtanpTSEFoMDlZYXltWGE4amQxSElYTG03bnVaT0p0KyttSVl4dmw0blVHbDZMRzdua2JZbzRWUGwwOUJicFFtN3piTUdybVVoTUV6NE5pT29jQ0JNWC9sa3FOQkhvcGx6SlNETFNSZVQ2dHJDUkpxV3R3Zy9oTDArcXB5bCs2OTE1MW0zY1BiNWR1bTkxMms4Q25JMUV3WHdqQXFwL283NHJRTDhWVm5uNmN3YWtqcTVuN3dkelZRRThOZVp2ditOTXRBSVRSR0YxR3BRb0l4UCtvalp3aXB4WXJCQmFQR0pRVnlzUy9BRmF2ZUYyaGxUdERpVUV6Y3RxcXdjWE9TcUgrUEYyaGFUQ3JEM1A2OFB1bitrMVVWL25CN01YN29VT0tINSs1UXBicnFXZStBZThOWGZNQVlyck1SM3F1THNVYklBV3dOT1JEdmFkRW9hVWlieUNYc2tDUnAvZnlEOXJDRnNlOWsxOEVaZHNqdzNza1VTODl1WFA2aVMzTkY0T3hWNE0wekhTUDBPK2tLSHV4cXlzUDlmMXZFb0tMSExndUlRRWowZmtDYlBVYlE2QWR0NnNGL3JRd056dGkzdm5qY0tIelloQVdCM2ZrZDZsR3ZJaU5zWlAwRmpzK2crVCtQaGx6MnVJMkNkcVZmT3RFbENTM0k3bzRiWlpMMFg1bTJSMVh6S2U4VlpOODh2dFJPcWhrQWdEWmFmRWJwTDdLTmJEbTd6b0NaMHc0Vy8zYzUrODBnRXNTUDdXT0lMd0c5Q1hxQ2xEQXlBU281ZDFlT0grcXJBa1lyQ1pwRlBpTlN1UjBlS2daeDByN1Z3Mms3SG1LOW4yRHA3NWdydUFWK3VlSzlNcHo0ZGM2RFFTRUJaQy9lNkdzS2ZjV0NVczlOVE50RkcxWlZBUkVYRXhoRTdzNGFTbWJZZW1kYzVaV1ArcU9rNFdRKyt0ZVhCcDljTnE3TllkOGVjR1hJN0V6NUxCNmlTUzBuZnZDNFdzV2d2RWhmMnU5RTRXWjByd3FCTEVjNEwvbWhSaDREcEF6OGovTmJzYVlaYkVzQ2NyaTMwdU9SRWU4bTUraWhseDlmZXAwVTl6MU1FZFJHaFFKMUcwendGNlhCMy9lRFExN1Bnb3FDcnFCSjNsczhLM2p3VTdsSnB4VmsrZnFKVVAxY3JLNSthMkxEQ244dUpjc3M3YytKNWM4Wmo5VWlUL0Z3RG1YcC93RWtoN1JaRTVsREtZQWh0L0ZKMWh1QXZJUXR3Y3lIKzRINVlNQzhvYkxheDY1VExUYnNiMGJjRzc4bUljbkxDOEJKZjZ4YVRwOFVmeVNXQ01pdkhNNTB2TFVvaTZOako4elE0MW1ORnA2RWN2ZUorcnJFMU83eDI3QVEzV1hZNTBqdkEwcmc1OUpaRjgvUGhDR2xFbG5mYUl3SnlvTHFUWFQzSWhyVHo0SW1hZ09CejRxeElZaDRvWVdDdHR6RE90SXZNRkxZdW0vTHNUR0Fhc1Q4V3FEVXFSWkkvVFNYSG5hbmNnMHJOS0UvV2QrL0JMVFdpOXd4djFMZzVlUUxueGNMT1hIcklOWVc4eWtLZDZVdi9SZUZoQkFkdHVyVzlwV1ZqVFFHb1BGNDNEcWdyMWxjanJjMWFNRWt2YzU4VGZjdVk4UDZzc1BzbUNrZG11WFNJUzA3V1B2dXRQVUE2L1ZaTDN1NGUrRW1tc09ucmN5UlUxTUtkSlRXTnI3RG5GQmZJaVJWS2VZTk9Db2RtRXI5b3dtRmRRK1psNU1uU2JSOVNMeFpPUUg5VmQvUHJhSEJMaDRNUDFaK05kckN0ZTlHWHNQOHBEWWgyT0FNWUwzcUpTaGtCS1Z5dU02WUptay9mMyt6MmtVOHhWM295Q2tEU1JmMk9zZmkrQ1ByeFpQV3ZIaVFkREJRNEVTUWs0c3M1WHFBQzVtZ0xacjZaNWVWbGtXaHVjVVgrNVNzQzFYL0FVMGliTStGUGQ1RlM5VGV3N3lHZE4yVldCS2xUcmlhSXdJWHJ2ellkVWpmbjJiUGROOTk0K0tZNWl3dFRpKzNiV01ERVEvZXZZQzBUazljTm1neHNMZ1VSRGJOWkx3OEVpMVBBa21GSGIzMTJqZXkwSXBMTTc1dElTNU5MQ1VSZ2xUcnRvZWRSSDQ0b24vWHlpMExiU0dUTU5ybXRRTE1FRmRSdDVMbEt2bGZiTGUrOElac21QS1NHQmFNODhGcUIwdWliNy9WOTNjYXNOeHdZR1IxR2lQNEh0b1YxUkRGbmhYOVlJVEpNSVRXbC9CZ1doeXpIUHlZeEp6UjNmT2wyRXB5Umg4blFDZkVPWVNRTS9pRjZzblptTHprVmlPZUtRa25OQVRPODl3T0NrNjBCQWJjYnY2VmVPVVNaWGxJbzBGM1hlc2FPcFZPV1lBVmNpL0JuTWd1ZGNjOEl2cU10QlFadHovQlN4R1ROc1hNVDJlMHFYdTQ3VExBdzNOVXZYM2QzS05ucGRYR25WSWVOZXk3ZERFU2lWb1NvcUZlam1BdjR3NTcrSEJaZnlLQlgwK1o1WE4rTWthNi9FN3YrYTlzNmxPUUVHelo5TFRydzFrOXc3RWlqc3dZMWFYcGtDcU00Y1FaclFicVBtNWNXQTdKZDVESkZocDZERmd6b0JaN0hnN2E3VkVleGxxZHNqYk9VL0t4dGR4dnlHUWlPSFliQ1hmaWxiY1U4M1JncG5UVHJKRll0cnMrV1hnOXBEVjVjempGNFhRMGdPNktVUDlzaHFPL0ZoOUtKdmJYcWFZSDNWZ1pYVjlrSXY4NGZaVXpLTEhUMUVmZ3NRM2tRTnl1NW1hREgwUEJYdURmSndYR0N5SnhtVi9ZMUZFWUtub2psbi93WVRnZzBWM0NUWWZ4cnVBSW1kV3l5NkdIR1NGek93ak1xK2RVTXBLRThTSHp2cS9ocG9nK0xPc3dLblEvcVRoSlVxcWxkemhUcEttTm1nRTZLRjNJaXFJbWt4UlRLSTNCbE83cTlrRE1nd05KZ09VTHV0RlprdVNmTjR1OUQrZ2l1WURieklUWmZIV2VXK09rRkJnNUltdzliMW5rSWU4M2l4MmxKbU1mUWsxVFNWUjJzSWRNYnpUWjZ1ZHJSaGhDZHdFbXBVb1FWQXROa3RkTk42RFduVmRIZ0dzUUR2ZE9ULzIrRERzSXFhSHVBUGc1aDFJRkhLRlFpNG9OZzJBNU9XaTh6K2xiak05U2kvUzNLTi95RzJ3L1Y3cGRsdjYxeG5GWGVZUlVXVWdvbkJCMUVYV3JwQytYZldVTzc2dllxTE9Jdm9nQ0lWQzA5elNZVHF0V3dGQk1XemVCT29hUjM2K1JSbUY3bVN6OEh6ekhLdThTWTN6b080SDdyZSt1Y3Y2QWNlQitlalpYbFQ4ZE44SXJaYlJ4ZHU0OXhuRmtQUkZZRHpTU1FsUGkxc0o1b1djSndQZ2xzQkdiWklBeXYxK01wUEFtbDQ5R0hydjhGMDI1NjFoRHFySDVGaVIwTnhmWTMyMWlMUmJ4bHdVVW5pcjU1RzdpTkNqaDRTa1VRd05LanQ0VktFUzRwMWZTK0lITFhiMktZaFlETWxpb3B1SXhxb1dlRFRmQ0lmS2lIRFIrOXB2Q01mSzErblNzb1VKK3RPQjg1K2RXVk5GUVJUMHovdVNablR6UXlMeVA2VllnbC92dHJjeXVXYndBdEtTeFovcXJOZmRRVXZGWjIwQStveWNhUGFOTGtYR3lOVDNjMSs1MVFwZVRlalYrYXV6ZVpwNk5XRzZDaFA4Z2NNb0FxTkJ3QnlzNXoxL0JJZytNYXd0bUVTK05qQVJnUHZtTWtCd1JSTndMaDUycGQ1MFZjWTdIWGdYWGQ3WjY1UE9ESmNyajJMMCtKUDhhbHhSNjNuU2tnQUdnZHpjSFVvbHFBT09rR29WNDkvZis2OW83L3FnQVRZM0x4L3hvZkY0eGR4dUtmVWlqWSt3elM4d204bndQWW1oNUhFdTQzeG80dE43aEk0NHRvZnQ0NjQ3L2MvYkYxSVVnUUdLVUZpYTcxdndEVk5XT1YyVW1pM0FzMVpYeTFMeWFpS0cvNE1MamI3YXRmRGwvTElzM3dSd0l3Z2RheGxjWVBPZTFEd0VMZitpQTZKNGowWW12OVRzVDhrZGZGOHQvTGJ5ZUtwaDRuQTlBSzBkYnBVTkc3bnJZYTFBYzhsVEY3MDBWNVJhcjdlaC82dnBCRVM5djA2clIydlJPUHRZSkdxWUdRYkxWLzNBd2U4VUNETHhDVkNBazNiU29KbDVXMjRaOHBXV01ubDhVbG1GbnpXV3VOSHEzVUhnQkd5emR1L01NLzJrTHNHVHpQUXJ5TTB0UXZiTEd5d2ZyUGtLdFlSd004NTNFdisvNGNseTN1dXdtZXJkeVhTREtqeit6RzdHdnhmays0MmwyOVFaazNBZDRHSndlejBKaHk2dU94c0FFbDlXc2JXdE9ZdGgwUFZEWUNCS0orbXJoTTJNZWhHNTE4MFpvNlNjTmJsUEdjZWJiYTExNjQ2K1REcS91RU1rWE9JZTNFNVlDRzVON1lpTmJ4WGQ3MzljUS9vQzFlQzQvcURwNTVmSWp5aU1EdEpDdWJIMVA4SlYwV21TVkluOFYwRFdPY2pkYldycUxJNWFEWTFqYk1xaFpQNy9lMldJcGxubjdqNEJQcnJTZXdSMkxoa3gwMjBmNG1Zd1VneC9DYkxnVjY2RmN3eWpzRHlrdWEvbHVNZXNSWVl6dlAwN2lUc3hCSkp2d1VVQS9ZVmdRZFhxcHcvQ3RCZnU0Q3Y5ZmVmZVQvTHpCcFJ5UGZ1M011alpoUnMrSjFWZzBTc21sWmpZOGZZSEh5MzJ0YVlwMUdLMFpaWDdBeldpQm9TVXg0TjlRa1BPbEhrTjFOV3p2d2luQmdrMmdvUEN2MVZLNU41cDA1QnQxYUFFZzFPRGtJQitwakxXaURlQnMvMDU5NGI5ZE9aK3JnZzUvR3ZBNjJiMCtSOGN1UzhTQnZSeWlOa0Zqb2VsZjRGam1ORnUyYWZoVnBnWkEyQ2ZNek5LT29wck5TZVhxRkNjQjQwb28rQkpvZGFnU0p6Ym1Jb0dkMnNvdTY2ODlqSlRiWEY3MXIzUUI0SUZqSkxiMjN0N3AwWkY2S0xxSnh0VEdNRFRwY280UjZ5QmZ3TU96ZTJ0NGszdWI4TTRJS01PakVYdDdJZGxieDBNYjVxREFib2o0bVpMKzhjVHh4YTl4RjF1V3hidjNjUFBwSk5YR3UxTDY5VnNBdzY0WFZ3OWRiYnhFeXYwa1hUTTBXUFVoMmwrd3lJNVFIY1MyckgrajZYVnBDdmgrbVdCdWtTTTRMbEljWC80SUk1SHJWTnRHczgySHlDUjdOQUloOGpZUWwyMHJFNXN5OWMxQ0ZTbzNkdytaQmJsc0QrSGxmNXdNdTFCYXFWeDMxb2NySnR3OFlMNzJIbXFNYUR0WHg2NndoQm03Ymp3WjRESjVTcXh5S0Yza3BOVEM2aVpNWFVCUWtvRStKcFBnRXpYYkpjWjkzWVhaTlUxTlBQOUJoVzFMdkFzYkpYVTdDbXRHNVZ4L3B2c3BESzNucnZ5OWhSZ2RkYy9CQnRVazJBRlpHV1RzTkhMR0Y4SWpDYTVtRlNXa1F0SnJ2ZEpaSHVuSVFjdXc0Umt6dVF0bFVtRmZtc0J1QXI2aElwVDVaSm93dHJjajIvdmIvdG1hbHRJSkg3NXc2aDBvRUlWeG83RUJWRHcrLzFMdWtHbGkzcldESndKeDlVZk9mRENXMkdaWFEvWVlqNjBwRmpqRkNzSkRXSnRhc2ZzQWR5WnhMVm1VUmhSYTRGNXJseTJoWlVrNkdQUDZOai9JM2FrRGhSS0FBMUlxK1pjcHpuM3F5a1RrL3Z3Qlo4b3FpUUt1eXpoY1B2QXl6eitIckxlZDR2UnRUVE9zODNtVUwydzh2L3A0VjhTOWJVVkRYU0RmdS80eDhYNitDYU5WSXkzdXVGdmtRL3BEMWZGSmlvWERPay94b0pvTlhJWkVONGlFSFJ2OWFQY2dNWk9UN1pueTQvSXlhaUxJZTRoWG1iYytVbll2bHFmNGpBd2M2cXFOOHMxU2dMVDNyQmxKYkw3dmxiOGZvQXRFbSs4UkVlVHNIYXFyZmtDb1ZVWWN0RHhoUGxMYmZwK2VNNVpibmdWMHJwbCs5a3pacmJnK0REWmo4ckFrNnJKbUN5UHBxYXNVTDJGbzZVWUJBZWFBaE5IVytiVG5oWEkxS2x2SUpHRWpBOVZzTXNWbXEvWDlxTTJTdjJmUGUwRWEwUDhBaDdtd0VtNXBlbU5ER1hLU0Q5anJkY1A0ZlZpV1AzV1QySHFQM3ozZUVQWDF4R2grUVFWSWZTd0RoU2pnanBJcjIxbkZtcWVNaFF2azhNdWJWN0Fuam1SSWlNTVZwbEovMnk1SWtGblVPclphL0I0UzhpL0Y5Z05IWVNFMmVDL0dmazUwSGl1TWZOZ0tTdlpKS0Q5QTd3SHFOV3dtWStiVE5sdXk2MVNMSGRVS0JqejJ4V1Vqd1IvYnZXNFUvVGI1UzMwNW4wQXhSY1J0LzFnWmdzcVZobzZ3U1oyZ21aK01COHIzcm8xNGZRUEFqUlZzbVNPTUNUbEZucTVmclBrbGZFQzR0WFNWcm5pYnpRUHRPVnBTcjh1T1c0TXdTY0hEdTJCNE5yRDcyaEh2cnVpZFFIZlA0SkFNOGcwY1dHcURNekZXSlpuc3A3QlFmQmIrTmcwQ2dheGUvV3BiM0UvSGFCNWQzMGprUnNkeU9ySEdwWWFtVmN4SnFoTjBsbllRcG1udXFxcFZQWGpNc2VodktHZUpJQ04vNHllUStYY1JKYUx0R3h3Z3FueENqQlRRcUt1Z05VSytVckVqcUJZSUFuSzcva3ByeVBtekhxNUxSampzZ2ZadGhCK0MyV2xGVDhQdnJVa2p3ajFrVUVYK2VnTVdnVmo4bnk4Z0pyR09KV3ZyUkVHbzhkQlAvemFjVkt6bmNhQ3NZdjgzZldiR2pBT3FEVEUzQ3ZpM0JLak4vYlRXK0FxRWorbDJMSWpYMDRLMXc4UjRuU2xXMEx3RHVJYjlmaW9id1BEZEpGdSt2MTVzRHFSdEcwRmN5b1hqQ3Y0L3pYRE5aeVl1WVpsQjJEQkZZS3lCcW9mUjNQem83WjlQUU9NT2ZHbjA1aElNcHF2Q3J0OWpObXJIWHhBQlIwQTFZamdWNkRoUy9PbkJvMGZrREh1ZUxlR2pPUnNyUW5jK2tJZG1JYmd6ampIRjlsYmt5VWpxNHNpVWFyWUNuWU52dkdMYkRmRk1ZeUlPcUJNYmN1eEJvSStUc2RiNlJqa0hvRDVzWkovRXdKckViRWs1WnkrbDR0Z3BGalFjS0VqS0V3U0ovb01jejNDbEtMZGtDWjZnZGlLRWQ0cjN4QVBLVjNLZnROY1BjQkI0Z0F3a2F6cnFXdkVoZ0FGcGpNNVlHU05CV0dXUUQxVndIQ1RYVkJiYjcwcm42a1V5aEpENEtmNklQZm9RN1EyTk9jNW16dU53VGdDb01xWkp4OVBNOUVHcGdTUEY5MFBEWDZSOFl4NWUyRFVCb0xPakNXNU40cmpMOC90a2ZwM0ZWQ0JCQnlhdWdzQTNseFdhMHV2WmsySWJVWWIvTUVGdGFEbElZMTdvZTdOWlBweUJjV25aL3hwWCs2VFBub0hPRXdHcmdSVGVHc0N1S3MvZVdpVm1zRkZSd2x0WHU4SXhHcmVubTRxRmtLaEJqYlFrY254MlBUZDArQkF6VjZzS01kRWRCN0lDcVBLeU5iaS94M3ozazduT0dHc29xb01oaUcwMkFBemU1bzVSb0Y4UWZVamFaRk96ZEYwWklzUUE0c01IdkVoUmlWckE0N2gyY0o1V1pucGJtSDA2TGxzT1kvRmcrVU1ES0ZtTURDQ3BSTkk4d3RkajczNWtFUzBBbkRDVll5ZmRNeURQRTBVSWlxeHZzL25kdkt6ZFBza2tOd2k2WE1laGs2MWVsKy9ZRlM4TENaTWR0WkNUSlQvNWFkWTR6eE9PZ1phWE44Q0xNdkhuWVdoYW9vNThEYnl1TCtQU0ZBTUw1Nm5NbTl0Nmg0UUNYTjFsTXRyVkxheng3b3dyaWkySmVKUVI5UDdHaWlORnNDVGsrdTg1RU80N0dPd2xzMmNoQmRRaXVzekNoTmtjZXJ6RW1pUEhnQUM2OUkyNFhRcGdseGJ2dFhCZW45VHpVVWI3THc2b1BwWUx1bTJYcGtOWlczYStpUDFEUEVER3pSRFRyVndLaW5uV3FwYkpsdjJZMWZ4ZFV5WGcrZmVEeEt4Vm9JSXprNUFtL2h3ZnlUTlVybEVCUGNncWNCNzdXUkwrNlN0VVdqM20rRmt5VmxnUFo5QkZIRTBBNEd0cmtlVUlsM0t6VnJhQXdwVmxHb0psMlUvT0RqNVJIZUNKUnhzZmtjcm15UDZFY3BLQjVneDB1SWNRQU56NXF0cXB6ek9jVHRiUGE4SjJjTnRKVnFIbmFYbWZtMTE2WEc1aHpjalUxZGw0eVBVTVRickIvcDJZNXpHODVPRDB1cEFLckFrcitVanJ5Z1Y3WXVRUUQ0bUxTb1NXZVdFaGxodk5pcDI3ZURvSTVITW92eWtqL1hXeHVxV2E4U1F5RlJkYkJkeis4T2hidjNEMXk3Ty9SYkJRcEU4YXlRMFJnS040aUpYVFVmdFk1YUppaFN1N1VtTk1vVkxmemhFOFBzRDZlK3BmUWd6TGM5TnIwNGFhUXlmYitheHNhMWY2LzBXUzN3eWt0UVZHM1lpRGUwam9uYjBETU4zVnNYZEZjQ29GaGlsNVAyZEJ5eHZJL0ZBL3IzS3I2OVhwTmhvT2JIWWk0OTdqWFJvWVN1ZEJZTzBWUDhyQjRIb2tiS0NHR0hxOVQ5Zkk0VDdiNTU0emtkTFVUZjhsb21ubUNzUXlYT3F4Q3pVQ0JOT3VDb0lBNE1PRnMwZ2VlK0dhV09sQmNzUWwrcCtZN2x4NGtQa2kxUVB6NjVVMTFBTlhvR2Rsa2l3SGgwUEhHUEhQZXhSRWhlNlp2TzRQTkJGQkFqZW5HL3NBcFhKbVhYSmIyNHZoWkd1V2QyRTdVU0IwODk1Yk4yZlNsVzQxSkdNYTEvS2lWMGpNUmVuK0xhRnNrTElrNFhNczJibEc1ZXBQVkhobXVsWi9zVER4SUZuYjFlQUoyNTBmKy9zVWtiNndyWDh5MGxWOTAwV3Z6SEZJTlRqeGIwN3ZPZVppdlFmQWdUM2djZGJOaTA3ZFNDNjl0aW1TYWlMTm5GZWZacWZqUE9CdUVBWE5qU3pHaGtwaEV4UDMrVWtjbWE0eEx3UHFvVi9IMVZtUlR0eXl3SDZzNjkrVmtybllQYUtqMXNMQWhIbmhtb3duRnF4ZGZhLzV1MmxERkNEMno4WFgwdFY0NmhZeDBSMndBZUdrTVV6QVpLclRhaGloSkVsT2dSYVY4Rm4weEgyZWlGT3locGFSYUtMMDExVE9LNXZuaEFyY0txM2lZaVZLREwrai9lbmYxcEdma3U0N01hODhHUUF2Mk5KQlc3SytTWlAzNkYvLzJRQUJBQm9BUUFBQk9RQkFBQThCQnprQ0FBQUFBQUVZQWNCQUFBSUFDUUlCQVFvQ0FBTUFHVlJvYVhNZ2FYTWdiMllnUm1sdVoyVnlJQ2czS1E9PTwvQkRCPgogICAgPC9CSVI-CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24-CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I-MTwvTWlub3I-CiAgICAgICAgPC9DQkVGRlZlcnNpb24-CiAgICAgICAgPEJJUkluZm8-CiAgICAgICAgICAgIDxJbnRlZ3JpdHk-ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8-CiAgICAgICAgPEJEQkluZm8-CiAgICAgICAgICAgIDxGb3JtYXQ-CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24-CiAgICAgICAgICAgICAgICA8VHlwZT43PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MVo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU-RmluZ2VyPC9UeXBlPgogICAgICAgICAgICA8U3VidHlwZT5MZWZ0IExpdHRsZUZpbmdlcjwvU3VidHlwZT4KICAgICAgICAgICAgPExldmVsPlJhdzwvTGV2ZWw-CiAgICAgICAgICAgIDxQdXJwb3NlPkVucm9sbDwvUHVycG9zZT4KICAgICAgICAgICAgPFF1YWxpdHk-CiAgICAgICAgICAgICAgICA8QWxnb3JpdGhtPgogICAgICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24-SE1BQzwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPlNIQS0yNTY8L1R5cGU-CiAgICAgICAgICAgICAgICA8L0FsZ29yaXRobT4KICAgICAgICAgICAgICAgIDxTY29yZT42ODwvU2NvcmU-CiAgICAgICAgICAgIDwvUXVhbGl0eT4KICAgICAgICA8L0JEQkluZm8-CiAgICAgICAgPEJEQj5Sa2xTQURBeU1BQUFBVWZwQUFFQkFRQUJSOWtINWd3Y0RCNFFBZ1FBQUFBQUFBRTdBRUFBRHdJQVFBSUFRQUlLQUFFQjlBSDBBZlFCOUFnRkhRRURBYmtBQVVkbkFBQUFER3BRSUNBTkNvY0tBQUFBRkdaMGVYQnFjRElnQUFBQUFHcHdNaUFBQUFCSGFuQXlhQUFBQUJacGFHUnlBQUFCdVFBQUFRTUFBUWNIQUFBQUFBQVBZMjlzY2dFQUFBQUFBQkVBQUFBYWNtVnpJQUFBQUJKeVpYTmptY29BQVpuS0FBRUFBQUFBQUFCcWNESmovMC8vVVFBcEFBQUFBQUVEQUFBQnVRQUFBQUFBQUFBQUFBQUJBd0FBQWJrQUFBQUFBQUFBQUFBQkJ3RUIvMlFBSXdBQlEzSmxZWFJ2Y2pvZ1NtRnpVR1Z5SUZabGNuTnBiMjRnTVM0NU1EQXVNZjlrQUJBQUFVVnVZMGxFT2tkU1FsUXdNZjlTQUF3QUFnQUpBQVVFQkFBQi8xd0FFMEJBU0VoUVNFaFFTRWhRU0VoUVNFaFEvNUFBQ2dBQUFBRkdid0FCLzVQZkczQVVONHo5RTlsc0hEbXZXMGJGemNhbmVoV3dQVUp6aDNSeExodVBBejJsckpVRnRZeHNmNnlmOHJtT2RSOWFsSTVieXY0aDFaYTlnSUNBOHBneWJJdlJsUTdjS0VGcTZkbDNVWndhdkxKZWdQRVE1VmdHeDJZQ1I0SlhhSE9vUXRVWDYrdUEvQWhBeUtMVEljblovMjZ3OC9oMjFYZHhQT3dNSmNWaGJYOTlEQlVyM1pBWnl2emZ4MVFBT2VlbmVUUE9BOFBURXFxZjFQbU9GMkpuRi91QW9WMEs4QnBUQUxhUmVQOGhJS0g2MWJvMElrWGxZeHZnenViUVV1NWtwSnhnMTgrVUVpb0laZGRBK21nQkh5U2c2T1VwanVPTkdKQ0c3M3hlcmdjUWt1STdNREorL2Q4NzZwSGpzb0RFNGp4SW9zT0cxKytaNDJ3NVdaeHhtZWQ1ZmgzUHoxT1dDRDdtU3JMWko3VzVpeTRLajVjVWdGUmw0bEVBend3QnV3S1NQWSszOGk3K2xjaU1hOU9jRFl3cHFlU3lkQ1VZZ0FQOFpaOFp0OHlBQXh1MncyYXlnWjgxeXFKRzRKaTk0TmxZWGp3ektRRktTaWxuK3FjOFB5ak5xS2o0SWFnQ2xPMGFWdU9MeEdCQTNPQlg2a3VCLzRmSUlrNmhNYzNXUmNlb1ZFNUpIMlZSYmJERzNCYTFkaVQreWNOYmZ5VkRaaE04RG43QUpmZmVzSk41WkVHL1BRRTVURTlkY29oRkw2RVBZZTVwYTlkeENWdTlVZFBxOWNPQjFSVTJRSEFJeGtibmcwOHR2em1MT1BQcFhGUFZycXVBZ2ZjM0JaaTk1VmgveVZPMUlKMlZPVkVWVGVabmhnZlI0NFBHNkxINWZyekdFVzFOcS9ZTFhRWEw5UEJqR2kvb2Z6Q1RCUUZLVGNsMjFXeUE4cnhib0g3N1ovRWFJR1hiZmVzR0VmUjJFTEtDVjZkRDlTbUFPZUFZd0FScnNwSGpneS9DWU1vUTZqWXZoaVNxQkVVb0dCci9HR1RhU3BLMmR3YUllb1FMUk8rRFJzZVpvSE9lNkdCMThmODRSSE5OR0tWQnpDck0wV2xwZzFWNTdkS2FaMkNqV0ttbGE4bVhDYlhOWUVnTkUwRmlQakZnTmM4UGg2UUkrbU1JVkRmSUI1YnA1ZTNqZDdNS0VNNFp4SGp0V2U0aThscEZVSklITVp4dzRUd3Bpd0RIc0tMZUloL1NiMkdCbVdqV2N6eVdFMVZtYnNxNEorWGpMcVNFR1JkTWd6NTBqUDhwMTF0T0NRWWpBeFRSTC81U0dXTG5TZ0piV2FVSHJYOWR6T1lWY1BOTGZTZ1UxUldJK2JpanZESmxNU21Dd0JCWTJWNVNvUXNLZVRkN1FGbnA1ak1sWjZ0OWU3U0ZYNDI0MFAxNEdiZ1pSNjJlaGVpclphaEVpQVdqay9jaUM4Q3Z6alVJYTZiNStuZmp2em0xQndiVFM5cFRlTTVVd25HamNhOXAyZ0pvUVJuQ1pRY0loWFN4b1o2aiszemdRZnIrZmVGdzZkYmRZUUZYV1EyZElDcCt4N3V4UlY5Mk9rOVRUcU5Rc2h1QXhHSWNNeEtVbXViTGEyODBqTXdkRGtkaStYTDN5QjVLUmZDQjB3YkZCRm9BUWlsMlV1cEVkY2k3YjlQSDhoNFZtc0VCRmNJeHV3bnREM2MrRDAvbWFhYmdkOThUQ05qUHVnbjQ2aVFSdEJjMTlrbnJsQ000VlB6bmw4NkEvUWg0dzlZS0VCanZYS3JQTkp5ODRwRDhOeWxob21jUGFDdGd4WTJPeFo3M3lDbGdMckgrSTk4MWRMTkkxSk5UM3pDbys4QnlYeU9OUmxROU5hRnpiMEV6MlBpUFNCMi9vN2FoQk1QdUxMWTUwS2dWdG5YR0xRN2RXUVI4ZG1MaE0rS2tEUVBLdE5tNGdOd2FPVHFWOTBXOEFJTzdabGlSaDF3bTVZK09WbDR2SDQ0M0ZaYmJyckNyWlEzVGdYWDdIUnVtTGdJbnE0QVVYcmtnTWdYd3h0QnZmMldHNXMzSHE3R1R5bUtobnNXSmlMRHk5NFBWYXZzYWo2QTFQd01xQmNYczJsZGVYOFRTM25XOHJrbDV4TXVvR3RXbmppeUtOQVB5K1RrUFhBT1pBUEM3ZS9yQUUwbFRDOHo1dlZIQU5lZWZFcitSRWd2OGpka1FHdWs0cncrREs2c1VNL2lRbDh1bmtubDUrbHIrQzdVeXV4NFJ2a2VwM1lFOHBJY2lVeE1vb3pzTFJzd01UUitMOE5zU0x0cHJBVzZ4T0ZlaDhyVVdneXFiaFQ1UE5QcUR6YTB3TVJuaGJRdHU0bTNqbHJPTnhOMmp5ZEY5VjQya2ExUXZjaFRPRDRUUXVxY2d4Uko0My8ybE1Td0xQbzFPZ1JkZEZXNndXajgyalBtVUFOMzBleDlDaThBUHNRY0RmMjBSQU1OVWNQaFI4VFpHMHdrMzNJMGgvd3l2Wko2ZXphU2JtOWtRWUFwYi9NbFdLeHVGT3hDTTJpUEtYMHVSdXpWeWc1TjZFcHJ2Z3laN2JCNjIxZDZqZk5YVGNvaU8yc28yZEVmMVQ2UHlBSURuNUhRQ1lUTGZyQkdOSTB6c1FoNXZ5aVl4SkxMWlQ3cHZUcGswOG5xdG5CY1M3eEt5aXpFdG9LSFYweHZETGl6eERtVWgxcGJhb29mOVBQWlhPMnRQemlodDZRTzhyV3dtUzBJTTgySFRDR2k2b0d1bDVWeXlMSGxSQ0IzRENWdXA5dGpiQkJjR1pJRGxjUXVjeVVTdHZtWTlTOWJOdG5KQk5UVnlmcW1ScG9yamVrZU5IbjdIVjk5MVdOMDBSVVVDQTZ2ZDgwL3hpYytKZUJXNDZKcHhuZkFFcks3amZ6Z0hmemlxOW96WC9GQkhIYzZ3TEo1WUJDKzFzSVFNUU15Ukt0T2M2M01SS1cwajRDdTVwSHN3cXdFdEg1V1BOVXhHaUtNT0R5ejFOVytRQzArcjN4Qy9QR0NSVW9YSzJ0dng1NTltbDlua2VLWDRjNTlRdmxwS3lOSUVzTlF2U0E1TW5ZU0pHUVU2NC91bE03WFRJdTZKRXF3b1p0N0N6UWR1a21pNzJKK3NzSHdVS1Jnd2d1eGlpcmRveTlmM1RBREhjRld6MnB6ejU1bnlNNzVsQ2NVcVU1dmk1RW1QOXRTVXBGZjgzYW5qM2tjTWREYzN0MTM5Wjdpdkc3U0dqbjVGZlpVencxUk9TbE9lR3ZRNncwbURaczcxcDFXRlZTaFFHUmxpSGgvTHd3bjIxOFhTeXM4a0NvUHlwcVpzNjlSUVNYUlRYSVQwa0dmd2tMazdyWEo1VDhWY25pRGxpVUh0YUZ4eUQ1RFU2c2xUd2VVdWs4NUc3aXR3MSthd1JvdCtqMldqc3ZZRDNRd2RXZHE4QmxKd0c5cVNxWGdKOG9CNm14WGpXS2dKS1dQdDBiMHNjZ3Rid2hud0ova09hWlF6SlV5YUVBaGVhYWVERzM3SGtpSHlqT3VBRWxPWlNXaHhmVWNMdUEvSCt3d3VPeHptcmo5djFGVzFYNXZqOElTZTUvSmlzWEw3aWdYelhIVjF4Rm9NTGVlMWFtYjJ5NHBQaGtuSUprZVQwSkhyNmVlZWFnMzJzdVRiSUVqR1RYRWc3eVJUZ05Xa1hsZWg3SkY2NVQ5RTNmd005TTZ5aDRiUExIRm1JVjRDa1BMU3hIWG9NbXVzeVlGTnMxemxzQ09ERHMxMWtjMnVjbkxSL3hBSGorc1dFVEFLVi9kZ25PdDFqZVhNWERoLzdab2RPeVNDTXBXVnBhM2dZbDc0clMxelBIQ3laTWtMa0FkTXhJQ252R3k1ZmxBcFV5MmVWc3lJYjgvdnEydTd1RnU3dy9KbDdyd21LbERLTlN0YmdDdmlFamFMeFZJR2JOdmhwMGJtSGlTS08xWGJ3eDVodEdmdSt0Tmg0NkZITXR4b1gxOTVLbHIxd3ExUEYxdHFTS2ppVS8ydm1kZEpzd3pST2s4YlpwN3R2bVBiYVBIZTR5ejVnZ2hURWY3WXp5eWZxcHptbDBkZnlxS3RXSHYzOFMraUtNRkladHNNWG1RdkJEaXVJYjFXdS9YRjBUd3JNemVZSmR1NDR5TnBpdGh4NXRMV0lZSDM2ajIzcVRkQmo3ajJtQ2N3TVZsS1B6L2FTanVmMmd6T0ZUeE01YU1odm01ckNzbENPdFNicU9ndlc5cERZZExreXNSZEdLNWplZDYveEFuWnRKd0R4T3Z3ZVZ2bVhWTFZYQSsrUGZnWVZnUEVDdzJWaGNTTGptNnBnSWI1OTRYTTZFYUpXbmJoSFFBd3pCMlFYbTRzbkI5S0hKa3VmRUhOM3RqTFZwOWEwSGpVa3RQZ0l2bE9xYXI2OGNRWDBZK01IN1R6VU9WcTRuelo0cFp3bmg1TlZKU3U1VE9pZWhZS0l6eG1MTk50TnNYMWhOUkMzUndTVndpSzhxek0zaGxRNkk4TC9CNFpsM2tjbVJ5Qm45NVRINkY5aUpsTkIzS1cxclNCRlJDT0owaDZHcjhKYjlTejkxckRSTThjNFRGYlF5M0psSHM2U094OTI4c1JLM2ptRFZzMXRvSDR3L1BOciszRGJ0bzZKK2ZwQzI5UC9ienlEWlh4d2Npem9zMmNyaTRkRzB2aG1uTWV0djNCOERDZmZ5RHkxbHFuUURVZlpxanNUTkZxcDJHRFZmT1VEbXhRajBVUFJZRkxmekZ1TmEyZWZiRHorcGFvVW9nNzdydCs1WUh0ekE1d2tQR0VaTks0dTI1TEZnM0lWTWNpRm1PSlowd3ZjVE8yTUtLS1d0dGdmNDNtTzVaeDBXVnRaM0VyTC9WQzdRMHJGdy9rbGNSNnl4QVZWbHNkR01OOUxsT2hEQ2FERCtmcnVycTZ5eVNqN1BhcVZ3ZGdsbnp5RUZZUEZsR0I0bjRkTVgyZUgyWi9SUVdVWW9vTmxucUVGNHRpL080dzRIdHRWeXBXVEVEVmdSaVM1SDl0Y1ZkcDMyOXlpYVdkM2JCRXkvdTR6WEd1czBmaG5PTXZSSTJtVGx0TDJlM1daUXBNbzZSeGJsTVBiSEZZNFZoS2xvLytSMGhHUzJsU2txeFNSSUtsaTBVbkUvMG53WmdManlTc0NDK0ZUYWkwY25FNDExY25aK01HVVpuYlQ2REwvTlA1Q2JKbm5BRWlTYjFDbzl0RGg3MnZ2YXIvYXlFb2tMWFQ3Q09kUFVnZHVFY2hWRk1JTUxSblhzaVgyV3gyaExVWmdPVWQ4bWY2SGhPakZOeXJ3dUZEQ3JJNC9WOXYyNGJBRlpobUxpSlRuNURpMVhoRmkyemt0RnM3cXR4ZTJNbjN1MjRlVmlBc3M2S0djc1dka3hsd2Vkb2pWcFhlTjN4anV0WnBpSTAzdmFzTStVSzJvUUxNa3RKNFBKZ2VPc2FxT2xhOVBTakhjWkpuRkNOVWpFb3JlZFMwNTVHT3R1bm9EUU42bVhuV1ppcHp0NXBKb243bTU1eWVTekxuOVoyQTl6UnR6UERENUdMaGZnZVMvR2Y0Z0NldHI3OXdQY3FlWVlNRlJURkJiVDA3WUNFRDl6L3VTWjR5dG4raUpjY2ZBWXJJQVB1anpYS0RUTmxYSFlzUUZMS09scTlDS0oyZlFrMXhVcjQ3ZXFseEhlSEFFU3RueXUxOW5ybVVTZDhpQTYyU1BZVE53dXBKUCtjVzJPczYreWRLMVlxeUJ2VkRUR1E0SklidGNUM2JIZVB1VmtYai9Dc0xVVXgrMzFUTzNxaWs3d2F5K2hwbkRPZmVqUFM2RGE0cUI2OHJrNzM3NWRrcjUrbklwdE9LVHhVc2svMG83ZlNrMzlaTklBRVJnMTVWbkxoN1NhMGtLcEZ4TGx2WEtaVTFvWDZTd29mTmxnK1A4SEJDQ09nYU1DWDFQbjBKblYwLzZtWlpzZ1prazc5a0JVamdVUG40bnQ5MzdKbFRkeEVYc0dNUnk5VlBFdjFFUHJ5QWRSYnJEbmY5MUg1OE1ZQWtKSUpTNjBibEJDb2FxTThQRWNtTjVMQ1hWK3pGWDVVcFJxdzdianFEWG9YT0hqNUc5WTFyRDRIUWl3Mlg5ckNkK2wwbzBvTzhtOGU1b2xqQ1d1WTM5TlArWXMrTExlejhTV0xJdFhsYzArTk5rNngyME5jZzk4VWxFM00rQ3RQQXk1OUV6bk1YWkNnOHpWKzRlWno1Q3hwaWlVMVJRRnN0OG1ialpscnJEbExjWTNxVjlKa3lWenZNV1N6eGZ5SFNmTEVhS2pzRmM3a0dORWppWk9Lcy96MVV4Y0hQN3Rodm0vZUQwT040UlB2QnpnNGhRR05VT3huYUZjRjUvSkVLUXJiNUxFcFpGaHZnNlBxRXRMUTFCOGc5eHNDc1d3UWc5d1ROYWFBbXBKZnM3RGFpajIrSjNKSi80TVJWNlR5UFlVUjVYT0dPeFV3UHhiUHJnb254QmZBMDlWd200ZHh1Qkk1OHVhNk5OUkxkNmxabThSSnY4ekpRZkZCdExGZ3ZmaXg0MzVIUE1XdmYzU016VnNyeEMyNW5hVjEyc0hxNmx5UVpBNTlTd255SDB3RGtQWXdOM3dLM2lDQmVSVzhSYjFDNTJQb1ZObElROStGWmI5Z0RLVmx6aFN1RkU3NU9DRVV5VmRPTGg2bkE3S3QyTXlIQ2Z5UFU1Q2xHblFRMVBJQW00VHBTczBaR29YU0RlQkxtd1FrZitOeDcxNEJYY29rRUZXZ3ZoVTZEN05VSzdwR2FrT3pncTZyck80VFN0dVJUbDIydDJwQnUvMmxpUmMwRkNQODk0MDVRTWtMR1hYMjNEVzN6eVplak90bVJiVnh1Nmo0ZmZlZ0xhcVhINXFLT2xacUt4SXNCZm50RU5GRkwxazRuQjdjdU1taE1UUXNtMWpsZy9RdUZtby9YQW52RjV6dUlINkhURUpjUnlBNXBZN2pDREVhWHU1WU9zejE5Qm1hUVVpRDFmVm01eWdRWTA2dnQ3d0dQV2VDUyt1Rll4cnVJeTNJYXpNSURWY2NJdzk0V2t6eDlUS0IvbUtQc0xtaGxhend5NVhXMExjVU1FT20ydks0SXlCN2N6TUNQOGtVM1JVSEExbGtibFBGV2tpOXVkUWRaYnljVGZvMGFoZHFYQjUwYzdES01TZU9ZRWFOMXNrdlJScW1DT1dQemRmam9BUlF1UHZoVlhYVXFHVCs5dFNBT05QTlVXNE9MWW9Vd1hKdlJWanI2YXlLUEkvbU4yZ0hPNGlRRFdkLzlsSkhDRVRLLzhXd1g2ZzJIOS9PZnBDU2tJVWl1cndsTTlsNmFqOUZ1OTN5d0thVm1RM2Z0NUxJVjB1Z0hiZ1RwMWEwVU5iOTRtakNWUFl6UmRPcGhGbE1uakdJSmIzM0xMcGloTDhVQlgxbUx5OTZBbW96RzRSZVpsMlhrZUdXVStVbmxkVzhMRm8vWmptUjhQNzFucWVHK0xrQmcwd08wMllNdjh2K0NiOVhZWXh0U1NhRmNqKzYwYUpwN25xSGJ0dTliNmFlV3NoL3JCQzhpWllmdEhSMUVzb3JjK05KV2tsRlRwTUZJc2JGMm5iMkZoVDdOTFppTEhQOUVZZ0V5Vk1Eby94dkhzVkt2TkdhZU1Ec043OXdza0hkZTBlL2lzeUlPQjFiUTJMVG1XMHZnalFTMHpKN0czRWVjSWlYUkFRZTJzWWtpM0VjNGdrNit1OU9MdCtTTzM4WEphRzltNTFnMlNEMWNGakZKSUltWjQra01OTzRMc200QlN5QlJLSy9jK0Z6S29mb3dNeGNNQzc0aXdyaEdJSkRRbW16RWx6bXo3T3VvdEo2S3JUeWhFWk8reG9wRGFUZ1I2c1VkQVltN0ZscmZPRFlSZ0dtdkRDOWtNcE90N29SbzloamlxU05kUHFaa0NoQmRiOS82VmtGK2FvdFlEZ2I0b2ZHRW1WVTVMdnVXVkdYaHNDOXlPejBuRVBFQmtIYWZPNERwei80YkZsM2VSR1hzRmJaSXRyUks0NkRnUUkwb2ZOZm83ZjNCeG1hcEsxdmdsQSt2ZlhlV1FBL1VkRGJvcVR0U0hmTlkvTE9panU3RGRna3pSU1Qxc2dXdE5xelc2Sys3SUtLZkxwNzFFMUpYUDh6VWw4VHQxN2JYVmEvOGJLbU9xcTdYLzRFeXBaVm5CbVNSNm5tbkM3SzU5TVNma0ZIK3k1eUpJRzRTYjAxdnpmbjJKMU9mdWVud3F5VjVKK2JOcU1IWHlLWTRObU9MSFhOc0pqRHFzLzhxZXRwQXZpdk0xVCtMdms2VjV4Q0M0SVc2Zk93UnA1MC84QUwrT1F2R3ZJdHJQSEQ2SnZvZGVRNStjaTBHdHRTblAxTnRCYko2a2Rhb2RSZmZWVEE1UDgzZmgzQ3U2MkZuMDhLQkFmc1lpaTM5WDl4QitXdGsvTzNVZmtPcE5aTjRjdXhQbitmNlhOcnBYQVNDZDlRM2lwWWFwSHBzekNWVUhSaWtkTGQ1QWNNdHRyaXJiWEFubzMxbk5rK25ReHpJRld0MlFKbkExc3VSOWpreFo3eHV1TXlTZFEyNHEwV3ZXZFpHS2NZanhQRTcxd0NjcGt1VjVJTE50S2RWRWdXaVAreCszM1lKVVczQjFsc0VncFBEQXZjZklObzcrMVJOcGk5TjBXRG9nR0lLOTlFOUt0UmdDOE9ReWFXdDVBS2xBODJzVFByNXl1R25wV1FaQm81T3FVblhlbVJmSXNqQzFUSmx0ZkVxVTcvVXhaUnNYMU5EVWFNZDRaMDJNZHI5WXEzd3d6NzNWbzJlNWp2bmNnY09aa3NrQ3NLLzV4VWpBcmRSa2xXL09idXgxRVBpQXU5Wi95Y25paFVQWnN1SGU1WlJTYVZlNUNVZTlaVk5JTldiZ3VXRUNGeFlCcHFyMjhOdGhDQjFYMVROMDlUS1M2c2ExOHhSSkVFZXdjam1lQWl0SGlBdUZyZUEwak1jdHFtSUc4YzRrdlhNWlFJc2NUcWliUitpc2JVQ01SdGRFMmpDZiszZ01MdUFnV1ZVY1dVOFV3U0pDV2VFcGNzT2xRS2tNcDBrdzMxYkJOWHEwUE9RY2lEQ1VTWS9aakMvbklQRmcrcGw3REFYUk9lektxTVYvUWRLdzVWTjRPajJ4V2xRV2NtTHVLeUFEVUh1bHhSem01SVFZQzZuVnczRDIvR3djbFRJVjgrSlExSVBWQjJmTnphdExrREgvTzlRRGlQSmhBYXg3YzNibHhzcG5TdldUTWowUnByOTVsVzhValZzODEyc1FBLy9YcFpqUGVXZWRZSlRIcUZ1Z3FzT1l5WXJJY0dBaWs0VU0wNGtGQWttRWFMQ1ZFWHl4TzVxRldXN3pIRmYyeXhHa3RsM3lFOS9PV3ZGdU9RSnI4UlFqWE92bHN4ejVDTDJuOUFUWUpkZlFjejlLdjlNazR4dm9vNFJrUEtQV3dIeHVVb0pEK2JVamk1VGM3a0FwczIyQ1ZuWEtEamxQZ3dBV2swbXFLUmxsTEhkalp3QU1lTlpYOW8yZnAydTFlWCs0V053aTVyUXZQajR3cGF0aXRFOExBb1BMb09POEt1Y3pqMnlsb2dDMlVqS3ZmcGx5U2lGbnVsKzZmam1IRGhlVWpic2ZDL3lTam1CQkpVNVM5ME5vU0pZdzZUQ2ZBZUxXU1ZjZnhLeU9nMmVOUGI1RlJOVUp2UTR2MEgraTdmdEc4S0xZaG55akU4cWd5aGpqcmVCMnR3Wnc0aHB5ZTNIbVp5OHBzNUlrT00wV01qS2NpamdnNjZFMTgrWE9wdjd0U2crcDFsTi94RG9qYmtia0JPaVg4OGVMQjZFUjRoMWZkNXVlWElQQWFCWDRPNlEzQ3drM1BSMlBBU1F1d2p1ZGNaUkdaS2k0cDNnQ2F6dHNVZnpqLzdKREpFbGhWR0NRTlVZbm1aQXVDNnUxTEpqRmRGL0ljRmpxcXJRK2h1cFVwUW9FamQrczRKU3ByNE1sTnoyMTlad0gwVE0yN2RzN2xCcjVMejR4V3I1aXc3aGNReFJDMnNkZFRjZStCSC9ia2svTEtWRUNuSkhKcVlzc2FoRnJ2emM2L2FRNS92NG9YOG8ybmxuNCtpRG1tQXYrOXRDellIc1FwUkhaVTg3N1JFK0hzQU9RbGlLWnFDVHJyTENkRjArN3NhRVVlcE5ubTdFajRCM2lOQ1g4OWNOL1BUZGcwS3dPQzBjQWtndTFubU5jY0xhRUxJbFRtRzJFVW0xdmtjUDVubk1iVGlYdHM1eVhNWTFHRWJiaHJZR3VPYzBFM1dIeENMMFQ5NlVSM2MyZ0xNRG80Y3Y3Q2t1MW4xdFNPNEQ3dWV3aHhZTjZuUVRieFUzNXNqVjNKU0NqODgvck9ZMXRBYi9mNnRMR2NyS2hBRXBBeE5PVlZyYkNBQ3krakhXUG54OGNkVUgzd2trdFJOYkJNYzNJK3MvVG4rRFVSVkQyYm1uelcrT29WZE9kdzlTUFE4dGx3Y2JFMkE1bDFqVndjL1NDbGduY1hYTGhCNS82cnh1ZTAyb2cvYlZ0YWdzeGt4QURnOHdYcEJReEVadjMreGN3dmw0L3lMSGtmN1VhNlpDYlRaQS9aRzN2V094VlpFcElDZzd6SkZIdjR6bHV1RmlXZXNNdDRmVHFwZDhtTzhWaXVPU0pqcVRNOThOaVpXT3pKY0dSNTAxc0dxTllqQnZuS0pOemt0bzdDTURJWDVOeDFoVGJJZDl6UVNuTDZlZDlGY096WnZyZXZMNlBGMkZ3UHJWeGZnTWpETjM1MjNZWlBOT2VpNlppalcvL1JqeC9zWFVOZ0I1OTh1Z3BwY0ozVVVQQnZReVZRUGxHYmJXQVp5OFh2eDNubndDM2RBbXMrazJSMTVGNWs1UmprTWFwRHNNSXZhaHRwZGRLRDBoL3lvZGg3V3RlOWQ4N0RsTHYxZjdGMmI2MTVOMnA2d0VzUjB1ME5NdTVKR2t6NUdoRGU2M0lOVVB3M1V6dU9xcjNqY245c3NmMG5qbUQya3BNb2FlMUdVaHc5ZktZNk4vWVQ5MzY0OWROaTNodVZXTllwK3hGbW5weXdIbmZPWnptRzBuVkF1U2Y5MTV5VHY2bGt1WG02OFB3aGVlOUN0REhOLzRUaWZTQVhtQmRxMXdzYjdYcXIzNmVYL1J5bXlQS0tXMlpNVmJPTUs2TkFVZ3lLVTFzRHhLL0xTMDU5SjFQcENRcy91SFZiZEkvMDBreXRXcDc1Ny9kcGhDVGlQenRCcFNlbWkrT1lBQmdtT1NUVTg5TTR3b2EwYzM5b2NhZUdEV3pGd3dPeTlMb0xTR2QxZDhGRnJVRU5rOEYya3ZqMExUQnltbXlCSk5YMUZBYjJJMmowQVlxVWtKem9BNnFvMVhkajVWdURRb1J4b21PeWJpYThLdjNmakk4RDlyb3Z0WG9jMkJqRm1FWTZvN0dreVZPek5md0llVTdhRDZvbWhzSk03ZXhsaTdtdERkU3ZuY3FQdHFqZUNPZC9rSWhhcWVFVnIxQk9taWQ4d2lRVmh4UmV4SmdQMmFrQWtNSm0yMXRnTk0vSzJyREpDVWR1R0FqN016Nkx4QTNlTjU1NVJrWFlmRGtVY1JQdDlQMTNJK2ZRMmkyTXFlQ0p5SXFvVVlrVm43S3FEOWNKdlZ0WWtZRHh2MEk2cVhVV1dhd0VPUjErMWg5cmlmdmVSQlkvb3JNS2xvQTVFWVhXN0hHYm5raTJualh4a2YydTdmTXpPVU11NGR6Nm8vckNZS09GVDgzVDU1bWxlQjFaS08zSFlhK1Z3d2x2TldaTUdRdThtOHJyMEF5bjc4eGh0Q1IxWXR0UUNxdy9OU2o1ZHM4ZjJrang0MForVDNzZ2trU2N2UEt2Vml4MkFWVm0wbEJlbWh1SnNpQUZyYjYxVVF1UE9OWHlHa0ZWUFVWbFB2dmF0WE1YbVBIR3l4Tkd1NldZd0NBM2pMRWFPMTBiT2lpd2Z4aXZscDRDZEVOUy81RXEvSXN3UkpKRlFjZGltMlJKbzh0OUZyMHRaZXRwcEJYNHVEWXh3UGJGK3V0RXV5QUxHd2VYRXR0M0VmY2dUSHN1OTNuOUdQVEs4TitGaHh0TWM0Y1ptbGhSMW5NMi9sMUFoR1A0Q0FnSURtOVdidlFKdjBWK0Y2NDZZVnJlb3ZFdVR6Mlp6bDFqOFcwbGZHTVlUUW5BWTBpS25semVKUXp0cWJHMXpyTjExcGpVNEtzK080c2tTMEx5UmNTTCtWSWxPcmkyeGxvNjFOTzMraHZNdjVxeVhiSm1WdCtIKyt6SXJpUnRaamhRSVNhTlZ1Y3ZVMHo5S3dZK21MYmNGQ0dxc1J1NVdRWFdyTkZHdlA1L3MyR2x5bEdVc3o5TGM1d3RiUW9aLzJOUHYxbWpLa3p0d050dVVZemV5ZzFScHdVcERSU1hTS0xVZTlxamFsZzlta01xeWVnT1lUeVdPSXFkVFhINkdPOXlrYjI2ZFhMd2UyYWZrUWora01hSGMzVjJRZlBreFJJaEhZTlc5MllrZ1ZHNmoxa0wvektYWGVTalRXVGFhT0tRaG1aY3BTSDFOZzZaK0tscnNMNTRQRmlkVlprUEVBa0JvRUxEdGNyNWRNVFUybnZSb1JLRnBsUmpPYzZyV2x2SUtMV0NMbWxOaHRFMzZmYnpJZFBpb0xjRlo2ajYzdjN1UXd0ZnQxODQ5djJNUU9KT3l0aGtZVTZROE1IYTIxUzgxNTJSYWIzanZhcUZibG90aUpMU3lrSXNYQVRyUVJPeWtUTjRGS1FKb0crczJDeTZuWlBjNnRWT2FIckREY08wcXRGN005YzFwNTFETGRRbjUxWW5Yc1BvR1JOU3ZMWnkxaWhtdnp3U29SU1A0MHlmR1Qxd1plYUR1VnFlK2l3RmdTSldTNnhDNk9rK1hCMjdwazhIcEw3dzNKWUxhaHJwQjhzd0tEc2ppN2pjNDBsSTJhZEZZaG41SUpCZU5CcFZWUHQ0UFQzV1plUjF2a3hMY1U1NVNiMmpIMWU5cENhTjVETkN4dDBaWEdlaGg0R216ZUxHbEdubVpHa2c5MzEvemhjWlBPV3BqWGhLTUdDL1pLcWc3K3o2Y3AxZGwvV3Vpa0QxTVFITGlBU1JsWHVPUFRsTUd2Rjl1cm1pMG5EaTArc0hBUC8wUHJrTk5aU1N1bjZTQThBREpzYXM3VjVkcWNFU1NYYmJWTXZmOHJ2UTNlNnRDN1VoZC8zVmhCNVV2SW5tK1Y4SzFhTEg0dGh3WVpFekJrakVSeC9SSmhCVDRSYjdUbFJ6RmhUSDh0cmN4T2dPK3RMTU80eFhxa0hFbDBTTE8wN3AyRy96cG9XbTVPc1dNdllwV2xuMks2cHdOT3pmOWdYZDFXL0U5d1k0amh3a0dSajhoKzJSdHh5aEtSMDJqK2tweHo2VTRkdHNnMysrTng0Q0w0UncyT3dDMlBtVGM5YjZmVmY4eW1nVFhOWEJHZi9LNVhHVFdYQ3NjZW1odDFaUTAzaGttTVJFNjl6U0xZOWVwTlE4YzBSZnREVHNtMW8wTStIZjhLaS9wMENBWS9CMUtKM0pZcnJkc1lyanlsdGM3bmxhL3U5cXNwZjhXU0E4TzAycjRmV2lxUXg0eVNqVjRJTzB6YUhmMHVqZ0E5NlZ5Wk1WRjUybGNGVU9IcFVmREthQVVkcE1ZaUN1bm9mcGxxR1JqR1JnTHphcTBVempwSFRhTjljZXE2OVVxeU5DTU5Wa0xwUDRBY1o5K1NvNDAvUHZHWnQ5eHp2Z2o0L0U0bFNxNWNvUTZGWEd5QU9scXJ2R1N4dWJDalNGUHRPZy9qREVDR2FOajFackltczhuU3J4NzNqMmZ5VEwvOVJ5QUNDTVpXQklNanVjd0VUeWJYaXZLUm0ySUFFTkh6dGlWenFiN09MSnBlQzlsaHpPL28wMWQ3c0lrRVJYZThPaVR3QmZTZjZNc0FyMzcwd0JvaUVybVltMWZJY0Y0UDJmRnF6dFpyc3BUckN3OGIvbjNVUWZnUFM0N28wc2twcjNNM2tMSTV0VkhjZXZpK3plWGl0bjRjaUFrU1ViMjNrOEFqMllBMnNYb3lmZk5QZndrMVYyeHA5VEsva1ZRbTg4TjV4U2VDdnkxVmtZNFoySUtzS29WeFZTYlMxWUs4ZUFlT1k2WUZVdTY2Rmxua0lRU2Y1eWNkRW9kSjlBZHpkWWQyTVBnL256TTFFZm1FTlg0MjdhSzgwT0pMT0l3QllJWG9QWTBGUWZpbkJya2pvblY2aU5MSVZzYmVrU29NbllzS1YrSVM2S1lhaXptYmg3azhOTnhLTEJ5ODdzQ0NES1p3Z0lEbjhoNW4xQUlnamUvbkNTSjNlZm4wYmhYWXo5Wmp2bkRWdHQ3akh1bFhFSytoVnVSZVdaZmh6TmgwM3oxVm5LMGt6TDgvSktVSnd5MC90ZmFXQjVFSnZZQy9mODFSQ0hnNVU4Y2JwVWlURjdhSDlrMjZ2NGFWK0htNUcxMUZ6TzhZMVhtTXhmYy9aRnlab1RLZmlWZEZCU3lkZUtpSE81OHlDZnVWWXArc2RPc0FTUjlpdUF6ckVTd2dnRlZlL0I0Y3h0N3pmelhjYVlkWXRhN01qLzhyNlppcjVGRXJ0ZTdGZVBncXJUam1ZU1N3QmUxeWFzSEcxdFdoM3dNQkJsMzlQR2RiYXZ1ZXBhYnF1NmpiZ1JzNUlmQURCRm9kRnNFc3Awa1dkYkR0T2RpNTB3cG1JbXZWZDcxNDJZYlBVYmVlMk41Qzc0YU5sU0ZMT0VGZlVVVUpQRk5Gank5RUxNeCtlVXRUejJCZDJrQzhEM0pTR2VrTHBBZUYvMWR3TnhHdDN4dnY1OWM1RmQwbXI5aDF2T29qdTYrNHVBRUJJUDJ1N0s1V0VoZlZ2VCtWVXhqZHdKTHFMbG9ZV3piMGNYMER5NHFmNzBWRzhEcjliMG9UZWZyS0FXK1JSOUp3WEFCKzNDc05SVWVUTFZPdWIxdXduektaSFRzdmJPRmh4T0hPQ1RXS2JNOWttbmFscUREYmxWUWU3SFpISzkrU0tXZHpIL2ZoM0FhUEFEekdCRm0wRnRWdnE1bVZzTXNZT25xN1VWTUpuSWd1NDVBVm1VZ3lOWVA0T3d6cFY3SHU5bUVSSk5Zb0NvZWxhUVZ2Y0tTVExPaE02VUU2RXFDL1IwQ1dFdlJ1M2l6SXRjelhUK25CVUI3TmZtZEJYUElaMjJ2WUpuT3RwUWxmNmlwcmN0SVBlN2xrR29uWitIZWxMVU11UXE0TFp6RzJCZXB6aWRqVGIzME5WTHMzNHpPYXBmVTVRQU1Jbnh5RFhSUDl1LzlHcjBsTHlxNER2QzhwYTd1Rkk1U2thMGZxczlSdnVWZ1EySjUzM2M5RjNOdnY2TmtJVmpCTzVvdU4xNVpPeUk0TG1RcVloMWZ2ZVl4V2cxN2Y3eEExRHl1VXJ2cDNiVythOHBPTjM2aXQ0STFXNjJIQzVidmVSQzZGVGdWeEVDd1hqMTRHSEJLTGNBYVJsejEzMG94anZGeVdXazBvOVg0eHJzRkVxMGF5VHRNWW9NeHpwY1NzdFFiZzU0WlN3REtycDR5Zm1wQVZmTWFXZWFRV1J2dkwwY09mM1l4RmY2TnJwTUhHNlU1TTVaZzl2d04yeklPbzRrRW41SjNzZDZNTWxJM1R3V2Fla1lhZWtXdUpnTTNVZHUxZk16MFhrNmYxQmZodXgyVVFpRHBqc1FleUU0NEgvMjBrVmt2MTJBS2tQZllFS2NwdlRwaXg2OGRtMmxaRU43ZmZaaGxBOCs5U2lrSnNjWThhMFVFSDA3TitadVZGS21vRlBHK0x6dnF1ekE2ZlFzOEtINkM3cklSaGl3ZWN6OWVUR2lWT0gxRkRqMmI1UUVOMUszcjBvTkJybVMrM3NwYmQxSWw0cStNeGl1MmN5SU1UaCtrcEhPVU1OWW5BVjMvT3NtYnJpaDFlckxzUEQ1VEY0NzVqTlFXbnpMZ1dyYThrVkt4eUZIREhOaCtDRU96bVRqaHl4L2RhTnBKZ3RKdjJVZzZKU1RYZDhXZ1FRL3VSODBFSm1KcmVSN3cwdkphWHZ1NDlOSUxjMGpTakkyQ2JkaEljdU5VNXFuL3ZYTHBnUTY4TmVudytjQlN2RDZGbGg1Wnl2am9odVNYb0xBVGdsU25seUJNM3cwclpoQ3F4ajU4TEZraHNWYUluKzAraUdLN0NodXpDMHUyV21zTWc0ZTRqbjBlSEtXc05pMFp0RS83b2NLRTZ0cXVlKy9qOE1QejFJNUxRVWFnelFhOS9IM2g1WXhsQ01kWHFjTjcwMk1TTzV1TEVneFU1cVlBckhEVjBudDZDZzBteWVBRzAxL3A5bmFFSnJZUDJrRFJjd2QzMnA3TldOMW05bnRURVdraTJjYitpU3dxQWNvSUlaR1NJNnEyYk1mVzZ2bXJjanExVGtTK0wyOUFJbkN4NnlLRWpHSnRKRm02SVE1dkc2d1YxeEg0VjdNT0ZzNGZneHpnSmkxTFNGelNyWDVKYTllRkJ2bGlkL2hVRnRQdWRwN3o4YWZ1M2lzOWRWNElZUnQrMnE0NjU0RkdLNlhmY1ZYRHZocC9oL09FTDFLZGVZQjRUNm1uaGJTZjFUbEdoSUk3M1FpdElyMlZwcWdJd1pSU2pPcmRuVTcwYzd5dWgxbzVNS0F6V2t3eWQzNU9lUW0rTC9XVm0vZVAvTFBJUU9pZldWM3o2aWI3S0hXRDRTZnYyK045cEovRDZaQ0Q0UkdJb3ZraWd0RXE5V01aOG9NcldBUjFyWEhKcW9td3NlQjRVRmVoVGVnQkkxTE5kd0JrMUs2MWYvSmZIclVjSit3akR3dVpqVnpkMTZqanN1NjBNRUhyeWx6YUpSMGFZOFM0eDROQjVRUTdhNDU4MnlUMU4rZjFDRk5lSCtpeFNhdnl1VnBlWDcrVmU0TkpMTjZYZGthSmdveTgrRW56MnBBZWdGcEZUVFFUOTU1akxIMi9qUGRiS2JtTFVQekVHcUt0eUZoTEw4WjRvd3gyZFhIcXBhcC9TYXhCQkNyS0VrMkczTWdyMEpDZFdIbVJZRVd3R1V2SWFJRmx2bHdEd01qR29oSjNlelhvazdaZ0N5aS9VQ1hiUklVN0oxbWw5TGo5NHFKbllZK08ra0xBZXl4OTYvTE12OXVpVVY4cWJhS0h4K0VKT2s4T0lBb2lickxiY01zNXZ2T1ZINGRzTnMycWpYYi9LamUrVHk0TEtDZ09rdHVyS2ZqZ00yT1NVREd3RUhueGd0MzlEd0NxNm5RRnR4KythQXJzeTVaZ2VhU1Z0T0UyYklxaVpGY1oyRkdUbUdEc3Z0bm1UTzJpR0Y2d24vM1NrRTFPQUpnVUI3aUthTFNGOThiTURtQ2pZOTVWNGcya0NhVVF3QTJ3WlowNzBkOXBTNlpheHd4QXcrUzJOd0dNejJvYXBFdnhWR3RUb1FHWnF5ek8rUmdvMld6L1l2a3pDMkNTbnZlaEVjU2ZXa1hDZDBGOUxTTHRSQ1lqanB4VHdOcld4Y3Jya3pQZEVCNUoyZnE1Z0VISWNROFhZV2FFWjlaNUtmOTRXaDk2SVpvR251enhKRSs3WitkY3JzR09mOUxWbTRjSlh6ZEdnOU83ZnQ0VlBKTkVXOGpzanFWOHFNbERiUEljSHVMMnhjR25pc2lhUTRwbWsxUUs0b1BnSEYzRkNnRnB3Ui9sUGtwR1pKMzJkSE1BMGVha2pmRm1PaWxyd0tTVjU0ellzMC9GUDI0RXlSUDlUY09aNHQrVVdRNmNtTG8rY0xqSjZNSnBlMjg3YzM0VEpXaXA1RVFtWFBZQUFQamF4TE9sYml4bmUrRHpQSWlTY2IxWllVUnBFbU41Unh6VU50N1pFMzlEWHhTZTBXanJEbHBkNkZKWmRNZjVnZUVnSXJ5NWtEcDBzUHd4Mmx6ZWpZWkgzSk5acTFLS3V6VjQ1SmpsUktncVJoV294Kyt4citKODdycFA4OElPdHJhSW5MeWU4R0pSSk1aSldnUmVGTE5XS2FJQlVRVGpCMUI4Z25NZ0JqNkx0WEwvTVdCN0FzdngyQ2R5VHBCcU5oTlpqWDlMdG82c2FHL0ZPMHdLZytRelhlb3NxTmQxRGIvOWFIMkxHMkZiVzJZK1doRDgzVitPZ3hPUVpVUFphKy84OFZGaVpBVHljODVicVhpVGhIMmRtdDFsT1Vkc2FmSnNoMU1HbUpmT1RHRCtWekg0OUNNK0RVeWF4bDVLWEdWbG1SOXJYcStuamtTRlRnbG1qL2VDRGpSVzN4U2t0NDVmQ2ZUYmMrcnRvWC9DUmNuWkhDRTlVbVEyajdDWTZEM1B1dFhGd3JSSGQrTVdxalFBVjl3N1RwNXpjZktPSDVpeFp6NG9pbFBIY0gzMVdIdHYwelJiL2ZRNW1zSGcxMEZxTzdpbEV0UkNiUGFVN3liZ1krdmxtMGdsWXVWY1JNc040cVVjdGpFa0c1bjFFQi9BL2w1dWF0Y2tIRUJNbUVKWUJWMDBZVDZBRzVtWHphL1RMYTRrWExYWU9IaTRSSThOc3NwQW4xZElraFAxbGVtRW05d21laDBlNUFmNGpUUGYyQm1lalQ0Q3ZvdVdVbE15UlRrRGRoN1NSTm5sKzJMaEJ6bUQ4dE1PNThTVjZKYWhXdVhqNGgrNlUwc0s0RG1WYnhrTFBzamxIRGhRQkc0d1hRQkxjRGpGa21PY1BuUHliTitDQXQzejBGcVlmWGg2SWpDSFVraU9hMTgrcmxyRkt3c0RpOWtacXpRejYzQXB6VU40RHRlQ0R3ZExIcFFZcDVOSDF6T0sxSlZaZDZmbW5kSmQzcThNT3FVWWRsQkpRZUlsSlBRL1hLR2ZIUGdSa0FheUJhN054djRienZHQUJwcXlSZWdiYXVDUGJEdXhYdGQ2STQ4bzh6OHpHYVVIVUFTTmdYdjFhOWZWOGZ4SzR2SGFWcDJZUHlXZFduSW9CejE5TWIwUC9VU0llbFZPL3Fjb1paSmFTVXAya1crZU52Y084bDBnTEdtVjZONlEvRDQzV0h4RjhuMzI2VWZnTjcvN1RRR1A0ZFcvNjB6UnJwaTVGYVFXanhNL0wvTHFPUjJmT0NPWUlrSTdWMjMzY2JOZzdhSHVCbGcyYkVJbGdub3NhckNBQ3RCMVdzODRST3Q2RWxnSCtZN1dJNHNLcCs2WVRGL0t3U3RlRU8waCs3bEtNbWRuRlJoUUtvZGxLRVljNlY3NlRucDdDK0Rjb2E1Y2VFdlM0a2VyY2xvSVczSmlSaEZOeXdKbVZNeCtqZzB0ajhmRHREUWNrL0E0S2ZPcUQrNUVLVU1paVBpQUQzeUpjZDJvZXZDVmNvd0J1TER5K0d1blY4OE1tZUtqSWt4d3JIMTREVzlzMTY1USsxN0ZmZzdXdnRMcVdMU09YS2c4amNIdlM5Q28wZHJ2UjdIWUZGUHk5REI2Q3VwRitYRkdRUERQc0IyMEMwK2t6dEdJVDViYkJ6R0RhMGJTUXNTNE1KNmc3eDVrZlZ6eTNZYWhGa3RyRmtKdUpyRHltNGlkOUNLcDNQWndkM08wdXRndXdmbDVqWXlYZHlxWFdTSW5heWJjamIrNXNaTW9uSmRiV1F0eGJ6eUVTWncwMXQxVXdjZnkrQ2VJa2hzY0tCck1EbElBeVJod3EwVVVTNmdoc2ZhNmE0UHowYU9DNVp1MkNodVNGbDk1RzVsMS9WYTZrN0lIT1FnVUNxYjNpMzR0M2FhZE5WMmhYSlJyWWR6NFh2ajVxQTdtTlJkR3Z2M1pJc3dzU0M1MUt0SE1SdEEyLzh5SkxEMTRiZHlKQWFlZnkwaWpYTUltK1pvTzR6Q3cyUkorZUd4S3IxUmRiMHBob2ZZaFlnWS9CNTZPeXpwcTExbHB6M2orRUs2VGlsNURPR3VKVGxUNEtML0oyMEZKUnlDdmpPZXhWMWUyV0NBQmR6M3NMS1FxWVBaeGJDeE14UjhnckRDajMyZ0ExTVd5S1h3V2RwUVV0OUwvNnh3NGsvTXFacUxSeHEvVkxtN0VEWXY0bjIvSDVUdGJ3YlJ3bldWbjBkd2lpVnB2L0w1bjlHMS9va21yeU9USVpSSmZ4bCtLbHB6blZYTHdhYWF6V2ZYa3FueEwxWVZqRytHR3U5LzZBK201dWdyRVBQQ21CejBaZHdRRVN4WEJKOFNNc3BvQWYyRXdjQ0xYaThZNyszNnVxcG15bUJqQmtabkVKUFB2U1RwWGIwRlhUU21pNzZ2bTBnQ1lPQnNCdS80Uk9YVnNZbWNiR1RTVkxuL1NaOE1BM0hHNkNodkk3Zml2WitSWVlYOUFMVEkvUUYwaXJrVDBFL3pqWVJEekp0S3l1a3RWcjg4ZmUxSmZ6cXFjLzF2V3VubFJFUk9aV2ZvZGZHcDVybXcxOWZ3WWY2OEIwNEMyWG0rd2xiU09oWXV0Y24xK2Jmdy8xbzJsamM2WVgyU1RaSXZEcGhqenZxTzZHZGlQU05YdG5sK090Y2lPUCs0WW5RK3Q3ckEweWhhNm04V2FhWG1BVFVkdmgrSFkvRldjdHBuMlpON010REdyYmlLa09vTGpadFFPdXZhd3l6Lzg5Nm9xY0pNWmZpempabEkyVTJMRityTC9yWHFvYVBIc3lJR1duN0hZRGc4RHBOQVlUWG1kYUdZZk1XTlh1L3JWUkljUWp2eUdnZ2JxL2kreTBPOVdUYnM4c2dzV3Fvc3Nod3lpWkxSeXJQZ3F0cUVvV0drRjVoMktzYm9wUDR2YWZXOXdIaGg4RkpDaGFybVFxL3JxOXhEV0FvcW02Y0VUc3puejBwY21Sai84dUJWeFI5U25HM1I2YW5yYkZteVA3OXlEdnF5eHVHTUMyT0x4RHEybEoyUVdwK1NwN1hWMDBKZUZ6T0JteWZMQkkrWUw2S0VOaElwVFFiZFh4OFFFTUlpVzZMbk5wMWt6VllMWDFNamlEc2tMTm14WnJXWlFxQ1F0UTEyNGUwbVV5WEttRCtQdmo1ZktkQTZvc0gwUThEN3dWdCt6aXU2ZTNFZHlNWTI2dTA0dTVkaVpGT2g5c2pUUy9IYUt1cGNubmdSQ3Z4dEpHL3luVS9hUG5xNnlOSFZjK3VWLzRiTzRGU2xoemhpcnpLRUZqNFVDLytwMzlGNXlmNldTZFI1a2hEdHRYbG9QamZCZjNMd0ZmWVJrL0lQOGdzU0gzb3BmRzczL2RnS1h2cHpCU3lvWktvd3RjcVpFZEdlclJxTnZJYW9FLzZnK2IweS9xbXA5WkhwRCtma1c3ZkRKWm1UVTZKejBzMmY1VzR3bjdPYVpEVGlHU01qTEx2Sk1hZTZqVGUyU0ZhcUNSL3p3TFRVNUtkc2h2TnpiWGxMQ0hGOWsyMVhidTJYMmxCYThqK2VHeFNGMU5qSFJyUEE0bTJIQ2ZSbVo5bzJjd295UmFvM2E3T0lpK3BDRDBsREsyYzkvTkxJZlZYbVVGNlh6eG1hTjVsa0V5emJaOHgzcGZ4MXJWSHZldTBXL21zK09LMEV4VFFEYW94YkwvRFhsVHNnSDBzU2owRDdxL0Z2eTNRYXcrdGxLdzVXV0FYTkNRTEMyRWhvNmM2b3pVY2FXRk02R3JFTzZVd2ZhZmpIaFluK3ZJb2FIS05LVWRDOWRZZnVON1F5b1JMT3JoY1JvajhGZ1NNazJtOXBqL2VYS2tYeWZkTnhiUmdTYVFtSDJXVTBSdW80akVUSEZ2YndRTkdjajFQRHdEM1VrdUYxdnZUMk1ycmEyNUVPSGJZemhQZ1pZRkQrNUlabU81Tk1PeVozZlYvTSt3WVVibmU5SzViNDRJR3FCclJjTHNRb1FLaGRrdTV3SEFpenFOeGhLNnpJZk82d0srNzAyYmlPajM4VFBzOHNpMm5kcG4wOHo0S0xmS0xMTHdtNm9GN01BUi9iS0NGamc2QUdjc3hGVjJ1amtKMlZ1RXVZUkRiYXAvUmtRTnIvZkpqb3BUcCtEVEVYV2pNMHAvVHIvN2ZmRFBUTmkzNFRLS25HUmN4QU1rbWtRSmxvRHNMRktzN1ZmVjJjTGNXZ0xZYllSQmxZZDB4c3BWaWwvbUhzSGhPWGZuMWVnRHRITkI2T2g4aGV6c0FqU0VLU0VyeUExTlFjenJDYm1hU3M5U0pmWVczU2tHelF6NHJSSkxoMkRDYUNrc3g4YmIxc2JtbzlFN1h2aFc3aHJ3S2RWbmJCd0JNS284NzFFNWZ0d1htcE1xNGRpVmRaSEEyekZJa3AxdkJZMEZ0TjVOWENoUWlkY1Bja0ZYWGhtdmhWdyt5N3V6M3lQNExNUU1xREkzejltajBiS3ZJdFFKVVpvM0RzaUIrdTVxSnpHNTd3c3pIR3JpR0ltV2VINVc0bThmNFgwSDZCMEtZbWFNeWx1ZnpjTUMvbUtzRDhjV2xKb1RISXd4elpONFRhUDU5dHNaSHRGZ2F0TjhYdDVpZUV3M2NDUnpJZHdwcUpUT0lMejYxRlNaL1A5S2RyWnFyWi9vRVppU3dKMXdBMUJ1eE4yRWZvOVI4M3ZjU2Y1czhnbzRZTGpWbXBqWVlKaDhJc1Z2UWQrb2VGcHoyenhLN3I5aGpTVUhhcXFEazhkcEZqaUxubHBsQzl3VWtIUTI0clN2VGtpOS9HUDNkcUx2YkFVUjNhclVHUzBaTU1iZ3ErSFlUSUJKTnVZd3NzUi9EN1gvRzcwNDc2TStqQlNONC80Z2lvcnhWUUtJaVBVNVlyMkE5UUxqYkwzNnpJSDlUcGdHM25NMDFiMUxxZEY0RXU4WTREZVpTUDBXTk5YTGpreGw1dmZVNklNVmNseXFiby9zdFF4aVRnNkQ2QktjUFA2VFdpek5lWFk0UG1Ia0MzL2xpT3ozWHA1RmtLNzdSOVFhNk1yUkJpSHNSdzN5TGkzQVBZdlAyZ0JVeW9iRmFkOGtzK0doOFF6MngyK2dybk4yK0JzMEJTR2J5V3A1TEdQOTRiQjZVQm5EUENsTmY1WG0xUmNLeENxTzVZYjJVNkRpTXhkRHU0OUsyQXFGTkpCTDNTR096a3UzeERVT0d0bXpxMTNrbmd1YVk0RVBudXFhcXd6ZUt1a0lBSldlYlBMNUI0cTNtdFJTa1pzUk1hQXFUaEpUY3N2c3hyMTE2ZFJ6L1U4Zyt2SmxSN0x5ZEthNldEdVNNOXJoNWEzV3M2bXRaZ3NXdjB0SlQweENscE5idnpNV2FHZlJLUFRUamZOU1FTdnQ4dHFBa29raWRYUDJrblkvbHh2Q3Q2R2Zkenp0OUUvUGxqVCtRVm5ETW96ZnhNL0tTU2dlMDdwZnErU1pBR0JBUjFoWUJ5Qk11R2N2RHp4VDA3NXBoUS83cXRVaWZlVE9HTXBXVitBZE5xczZ1REt1YnRkUytTL1puODZsM1JXVXdmUlhZWFZ5NWsvcUhHOWF5WUtWbEVEckw3SzVUeEl3L3p6bUE5elNJbENyVG9tK0puMlJpUzNIdTFneXl5SUMzMVU2UlFBWDI0cG5keDdFaU0zaTJVRWxKVFpUenMwWS9uekp0R2ViM3ZvaUN6d0ZxTlZXUWhTa0NQT2ZDNXd5ZC9xY3BoajJkK0dodkxBTGVmQmNnMGdKVVFrbVc0WGVBVlZlcDhqTWxmSFB2WVU0ZS9VNjhxNmpiZnJKL0NVNk5heHp4R0tnemovWWpWbHM3VmhWVm1hQVluVjIrb1FPQ1JFUHJLaktLdURWZ2NLdStKK08wa25rMkZnTytrbHA2VVdnTEIzaWl4UU1ZTVVUa0l3Uld2amZMNUpkVWc2V0V0cGlPVEl2MGVIYm1tcEtab0RrLzFDNmMwa3JITTZTcmdzZklLUXZaNXdsUGszV3dwRTBWMzAraEhLRkQ5WUYvSjFYVTdHRlpCYlNiTFZiekxTT1NxaVoxTXlSWTdiaUQ1QUtFbEU2c3dIa3dHOEV3R2JSTWhqQnZ5RjJKcHM2TFd0cm1vQUJDbGE0U3hUMSs1ZVBxQ0h1bUc2andpMEIwMHNlOE5ZWjc1c2RTWXlIZ01BWVB0SGRUUDRiMFltNzNFQzgyajNPZm81NEZOU3kyTzFWYWRNN2JxYzZJeTFUWFJRdU5WNm1VcWl5djZ3S3N4ZDVSaCtlQVJpRWpkNUFvUkNEY1dvZkpOVGlZQnZUMnFITnBNd0IzZ2l1UTlUdHRvUVVaL0ttS2JrR2VETFJKL1RrdDNqMTJIUnNzK3Q3WUxXTC95NHh1RElzRmwvcllMcFhKREFQQUpZc1c5UTZidXNiWDQvS1gzSldvcGtXbFV5a2VDQmZIeHBmeVZ3d3oxU054czRDT2hEbFRLNmgxSUJoVVJFZ2IwZkxPbHJ4dDg0bkF5Z3p5ZmZqR0JuU0JUWmZiWE42RU5OalUrb2xDbmRtOEx2S2Via0lhMUc4R3dKQWdBSHcrUS8zUVIxazZPSXpRUzdzcUN1SVU4K2wwWGFLQjcvS2dGc2lDT3JzMnpXektyaGtGemhubUs5SVprSzE3eEcxdHJWZnpPcjlZak9CZTgzd1R3SndRT2RET0orMW1KaHQ1S2k3STRaRnVUd01qYjlxMFRvcW0xMzBtTWlkUnY4YjNYbFBWV1Z1SXBaQVNvdjAzVFNxL2M2UkxtUk0wdk5YZWcrQkdQSUtabWxvTDRTdlRXUUVtSGFwNHB3bmRuKy9XOWd4c1R5MXRzeVY1NE9wazNTU2JIQ3VXckdpbytHaElNRTFHVjdRR1hCZEhJR2dxOTRoSlpJWTJpS2tsUzRoU25pSzJ2WnlOcEFGbHJqU0JXZnE5ZzA3ZUtYdWtUOVp5U01pdS9rRHVCQ2poV0RTSEp4QjFJSjN6N05vbmo3Nmd6Y3lXbVM4YXNRZTZLellPZUxESkM1QVVhKytvUUhnK2lCV0tCb0pWRFd6WnFGSnJ4Z2FHSjI5a2tOd2VJWVFVTWhoUGFwdU5HSkpWNDN4dEFaY3l5ejV2ZEpCL3BDVFhJMklkS1pjM1FWdG9KRUZ0SkpMK3NmQTJTWk0yL0lNTkRKZ0ZhamtTWXNmbkFiTlFJeHMrODl1QXRKUVNKV1dFMDNVVkxoN2hLUWhiRHBqMlRUQngwK3k4RXVJZjFrSThqamhkSWw0MFpqMVVSWTUzMjhlTk91UFRoNEtKWlV0ZU5oYjhVem9CZ29PWGNNN0dJOWJNNDdtMU9yVnNuOTY5SVRnTUlMQWZodW9iZFdTY242eGR6RDFPSGZob0JKMlozNHlTWS9peXZIVlFaS0VqenR4YVlVdHFJaEh5Z29BODh5Vy9EOVpHaXZsMDJrZWN6OU4xSC90NndvOENtQ2UwVXg3TVl2NW5ScmlsdHNhcnZoWFA5aXdaL2lSaDk1QXRPajRZNjl4ZXJGWE5aTjlVdUU4VEQvUnBaRllXc0t3cXk4cHp1Z3NyaWVFQlpXTmh3RDB3RFE2TUhyT3N0M1Yxd2phbjkyZzJSUVJjdHY0SXlsbkhZSC9hRnJZNk9iZTdvY0dtMjFIYmYyQVhjSnZrRE0rU2k1bkZxM3BZbXpzcXI4Q2N2cDU2NHB0ajhRTkg3cGl0S1Q3NTgrMzhpakQwOGtCeCtnVHZnK1plU2o3dm0xUGZsZTJ3TURKZlBWYVE4M1JQWWI0SXhrWmRrMWZSazVKaXEwVmcrZzNydHJJR2pxcS9YWVFCZU54Wks3WE1PK2NPYjVjSVRudWkzWHV6OUEwdUtWTkkzODJTekVUdmRMeEo2MVJLVVQ0aWxZemRWUitGaGZGak9hS0lVUERpNjBsbWVCcGJ3Rk8zbHBMbFIyZTFWY1JNemNiOElWK1BsNVV1ZlhBaFcrSW82eTM3SExKQVBFb2d4cHZ0MEFWc1FpYkZ3VHE3QTJJN2pzMXZMVmRrS2Rtd0JrMjVGem9zYk1KYk1LcFUzTHJ2eFJMZmpWM2gvRkc3VFRFTXNReW5JcVJRdEJsdHBsSERVUTNkbTVLNHdoK3BxZ0pGV3FsNWZzOStSZ1VFS0duMFZhMU9GVzFvWjhmMGhXRmVkNzkyVGJUdDViZWp4amc5ejRoeGgrVkwvRVpYdHZ3QXl2a1htTld3dzNMNXhHV3BTTHlaT2c1OEJmY0RDUld1cG1KUE4vckFZSE5yNDhqdzZDUFp0TlJ4aDhBTTB2Mzg4ajBZUVdVcURpb2tuYnRNdG9wV1pVeWNpOXl0a1c2cUdwaXhkeDVEU2p4QUptdk1HSnJxM080K2hNOHRra1cxSXZoME1yWkFWSTUwT2NVQUx0b0JKa1FvVGtNeHFyZlAzNVRGMVJsNG96NS9sN0dKOWY1cHhOVlZXdVJLaUdTVkpTdGRKa3lxN1VEbkJwUytiK3czekdBVTNCRWlheDdLMVpLRVY3MHV3d0xKeThWQTlPUTZ1dGxaclJ3WEdJcGZSZTN5VmVJSEJjVmtIVmVwQnhIL3BaTHRUeHRhbUM5TThZUFQ4cng1Tkc2MURlVTBCdzdmam15VDYzUjVrdHQ2STR6Tk1MWmdPSHZsWVk5UTdhOS9Cekc5QktOWTJUV1g2M1ZEd0lZTGIvVFQrMDB2N1VVZEpiMHlYQi8vVXVSeElTQ3FYWklsV0l1RUxFZzdpck5PcWRUUGJETUtYS21nbDBXOHUwL3FqQTBMaWJ5UlJhNm4zM1VBaTBYYTRueHJuUElZd2dJN2FadWF0UkhqOGtxMXF0WW00ZnVXV1hDWHlOekNGamtITlpNRzBPNmdjM2R4S3RCK01SRDdRelJvT2pKOUtOckxzN0d4SUVydDBKQ05kbHlBVWkzYlQzZ2RudWFJdzM1eU5DUWd3YXNqdGlwWk0xWkNXbEliOE1lMVFTaTJ6T1hockh2OXVCREh5S3VEV3NpRGV3OU9ONEMwTlJJQ2NCR1NYK0hid2srUW8yOW9sS2VIN3gzYWpCT3pGSWZ5L1Y2M2x3S3RxNkQxUElrc1pMK0orak9HaGZCTlJlQmdnVlcvRkRLYkpxUXhVazdQaHExL3k4Zk9zV3J3amY1eTdoSmtYbzRMQW41bWlTOTBsOU1rbDZCbklBUHNIOU5wVUg1UThxVVFvdTB0OWdQaUZqVHlxNTd6aTY0TlBKR1ZiLzRCTk9laVFZaFNxWWpJNXd0S2xSUHhQM3NkYkpWNHNucUJCc3lmUEJDd21uUHp2amtacWc5UkNFUmFCdk9GbzFjTmF4T0FTV2wxajFGb25VWTk2N0o3em5GMGtTL1I3RUVNdng2c1JGajBnbkNUQWFRNkFpVm1pWFV0VXNBcUVkM2tnejRzUFI2SWpVZnJOMnl3bWlEN0tMaHN2Mkp4Mm1nQmRvZHJCVXBMZjg5ZklnMXBaN1p0T0VpbGJsUVRmQVg2aTlpbk5tMlQwRzQ4UEJUOEJjVzRzK2lrTHArTUJ4NC9BcXpXNFRrbzNPdWdhRmsrVGpxWDBwanRxR3JVRUUvdHZsdFRWVlVDUlppejllZS9FNWgrdkdHMTZJSFVFRUI0UWhnYU41aHJ2THVSK2F5a3ZzQnQrOEg1d0hrd0dsVXJab2YxMWdpdm5kWUFFYVNlV1NoNXU1Nnp6U0dLU295RnNjV2hYcHNDcDcvSDF0U2pOakZHWWNXS3Npdm50QTFqMzFyTEliSlFxcGRqWUwwNloxU3ZpeWRJKzhhZHpidlVnR2krMVlOcnB5NXRKN0NzOEFiNEdWcndsdHFQNXpPS0tHZldJNUhXTnRZRnN4R1RaQzNnNlJnZHIrSmVlRDJnNmc4eGFkQ2RQOHkvSHoyTlJXY1NrRnlWZ1BRMWpkRDJJLzlhYk5OanowRmlWQkUwTncvTCsxb0FlWnVYSG1xR3dlU1QwdXpCUXplb0N3VmREWTVRR011QlRjQXJENWx5VlZ1UWZqZGhLL3draksyYTI2U1BMeWI4Q1pMZVA1ejVYaWNxQ0ZyeUQzbktiMG91MTQyWTFQeTBBVVQ2WEF3V1VscWFuZ0lpRytQZW41T1FNNWdaVG00ZERCbDY3ejBJR093WXlXcHdXV3E2ZVNsMGFvZzQ4Y2g1Mk85QmliT2dwbmVWTU93Z0pYQUZOSEJLbWF2aFJzeWM4b3EzWThXZGNIUHQ2OGZSWW1aNHpoWjZHbGhtTFdLSXArNGY2SWVrL3VCSWRCYkhxSWJLa3NIcFFtL25MTVo4SE85bmdyN0VaTThEWjZnaUFKSjcxVGY3RGtEQkxDYkxXSGpYdWRoZGF1bTJ5ZlJVU2RFeHpJUWU4UUNjamZRRkFjOHF3OTFUSFhacVp2eUluNngzWmRmdkkydUZDcDJiUVRCSVZ1MDdsdTJZU0FLb0FyY0F4R1A3RU5DaDZscndSbmRqKzN1b3pMOVQ3VjdOZDRWSTJINmpVMHh3cEtoNlgrYWdOelRpbHdPWEtEZDBIeVlJQTV3dkliNUxPek9jayt3cmZ6WU5FQmwxYWQrUmJaa1hVMWp2ejNKVHEwSVJ1dEtRMTdmNEswMEQzZWppNHdpTlVwcjFrMmh2YVdhQkFkMnB6VGJLckkrN1BTN3hyK1o3UGd6cDJ5QnM5anJtOE0rL29hbGxrdkViNldXWEJVSjFlZTZGS044Z1B3bG9LaWc0T3lVenFxYmpOWEdyamFSR2ZtZmk3ZEdNeWY5NkVCYXRaY1greVE4bmpwOVJZemo5bmVlTEN1QjVJbWJ0bi9FZDBnbXhFVzg1elMvN1RrdENoNWwwQXl3U1pJS084VlpER1JFUU9TNng1WDdnbUlIWllNWmEwSnF5c05WV0E1WGo4SlBzYzV5MEgrd3RYNjZUdnluY3pzZGV2dVZERmsrdFBvcHI4Szd6NmNkd1JiOU9Ldmc0Q3BFaXRNR0FWU3d2TTVhbWdsaEpnZTdRdmVHRzNTZmgzMHpBcWhXV1F1bkNXcDVnZURGZGE2RUdtdUFIZG5LNThxZ2ZWcUJMWURrY2srNU5TMUpKQ3BocDhZMEdjUUVPbGh2WU4vTHo1R0ZBS1lPQ3NlRmNzbng2anQ2OUIwSXpKblVBWDVIZzR1RTZsWHpydXB1Y2xGWG1HRnVIWTBDZnRJTVAzQ1VMa3lkTG04bDF2M0oxVUNFdlIwMThhSklHZys0L3hHM1ZtWW1ERWtjTFdvQ0NCTUdZZDNaVmlpQUZJK0wveDdiRjBnWGdLeUkycm9DTnVpM3pZcFd1ZUIwb01rRkE4TmFZWmxpTnpXMzcrZE9qUnlGVHJsQUQyYnplTm5FNzFnRS94YkQycC9zZVlES0ZnTE1Ea2FKOTZUM2NCQ0dWeVovcXlmNVIxenpHZ2FTU0YxSU1NU2JVR01jK3pNUVBWa0V4MFJIeVVHMlltSDJzd1RNZmJtbmZ2dkZjMnhoRTA3eWtPQ3RrV2hpQm5GSVBpVVVCNW8wdjVCVEQ5M3dtTS8zVGEwYUtKcThEbitFQ0FUekgyekhma25aKzN6ck9hWG9XM2hqaVpVWUM2UXA4ak9rNUptM2JNUmIzUTcwWG96S0VmRGVmUGV3ZzhSVUN6TFZmTXhoZFppUkdvSlcxRU1GcHhORzMvYTcwQmUvTGgxL3dlb3RxNDN0bEYvZjRqUmpsb1E1SkpmWHFSWDhheWRyZmtoZzE1ZWdrQmxaeU00cmNaSkxjMmNibnhUeXdJTkNqa0hjVkZ2YTV5eHhJbVptcXBqSy9FKzVpbFBZaitvZk5Oazd2Tk95ai9uU1BtQVVPbHk4dGF1RGJ5dEFXUXNNU3VRNGxtNGpJUUlmTmh4b0VHTFlLd01UMFgycWk4a2drZUZxUG5YTHhoRlFvb250Q3hleU9zRVR2cFNJNE9MeGtselY5VzhhNEpuMnZ1Ni82ZzVTNHoycXRTNzRaL1ExOHVpdW42YzFLTGtwb2hyV1dYWnNqd1hnWFhHcFVJdkZNWnowQlNoOVZKRHRyNkVHSkdJSStsOVYrMzVEUXpTdElRbVVsdFZybGtHRnFKNC8vcDJFdWxFU1VnVlpDK0lpbmdTT1JaZGs1U1ZJemE3a2hMbEIxWUpNaGFaMUY1THFxMEYzZmhPOFZ6SzFYWXN6bUVkSjhZNlJXalExMDBFZlZ3U0JIRmtKUzlnM3JSdm5BajJiMjlyU09LM0k0eWNOSGVuQWowbXFLVDczRkExN1EybDB6ZFpJd2daQ0ErNDVqc2E2ZzdUemZGSE1Zc0hKdThkaDdkemd4cHpCUis3YlhWZGsyOUFZL0lQVVJGZXlPTkQweFpaTWx0VllOR1p4Yk9CZXNFUHB2ZmVUN3Jna3R3KzVnamp0Zkp4TlRsN2lKaWZXVTRwVENiZ2dmY0M0cW9oV0FYOUNleFgwWU4zbUFVK1NJdDJPa2NLREkzSGpSbnVPTWdaTWg2eDIyUEdvQmtIaVgzaGtvaUFkNlg4aTV6WVRDTGFXdndWMWhsNjM3TFJkdnRqSHVYKyt3Mkx3UDlUekRORFBYRFpmOHdWOTBLUjA5VUY3b2FZN2dzaGY5MzdkSnVPMnI0UENRL3h0S3BjL1NyKzVHNDIwcEFzQW83T0RkQmRDOWhIWGhWRWU5U3lHTWVwb2lqUE5hRlRrQTdPaUV6RzJOb09xNUE3WHpyb0FHbXhUait0N25qOElKdERoT2h2dmFiSHVQd1Q3aythL1pleFVMZTFlRWRPNzFjeldDRTROS2RpUVVjTm5NSjVEdDhtNit1MzV1UmRKcDJZUDF2UlZZT0JVcGpBUVFDa2tHc0xYUmFQNTdHNlNmY1dtSEVpREZjS0RuOXpvZlVvdHB2SDVtU2E0Z1B0akhneTNhakd3WGwyS0t3b0xIbTRCTFJJL0VtcEl6ankvYW4yZkticHJHb1BhMi84dytHMFBWZ1BXdjNraVN4UTB0NHBMMEpnZU05anU3bzRoZnMzRC8wc243TkQrU3kzdUdvQm9adGlZWlBmdFBPRGZabTJwQ2pLQ3ZhaEtTTWxJOUdtMTltQ3NNQVpNdCtOaFVZZWhxYWRGUkY4OUhvV0tHeXNqcmNjV3oyMFZvdWFJdGpsOFdEK3o3ZTNReEx5SVhwM2NiNFFBa1k1WkdtZk94d3FiL1RaN0VrNnFxQVRpb1l2cjkvaGpTd3djcjZtNmgyOXYrenloK2ZCTEhqLzhDOVJJalBIK3pBdDJWc2pabW41bTJjYlZPQlJTTUVUVldLbkRhN0IzaGNKWDF5dXRLTUJrTk9GN3dMVFZVTitxd3NjS20rVlY4U25xWG1LTDM3OW81Y1hRT0Y5NzFWSUp2OVRlR29tL2xWcXpQNk4xVWVJK0dyUm1XL3RaOEJUeDlZOWVML0JTdk1CUlJoNXVJdk5UTFNUTTg1aHBzZ0dkNEM3Tm5lNVlQLzYxbXJpOTdOVnZLMWUvVXFUdXJNdlVRemZZZ09GcGJ3TGFqdDBYMkdGN2dJNTRySUYraVBOdHlqQlcyRDlQQ2ZUSEJSN3E0L0tpVysrNHpjZDBJSUR3SFhCaHpKVE1tcnNPQ29qVGNVcVRZVWxuZGV5YVdVbUt1bFdRb2Z5Qk1HRko5SzZUbUpkZTkvK0FUSG90MVZ4U2hVcDRuRmtOK3NBMnZ0NjhheEpNa1BYbk9JM0lUeGhGT2RQaVFLUGpCaEg1d0R5bkxnN2N2dVRaMHJyUG9NTkZHcGg5VHlhakpWQ29nZ3RadjJXN3F5MjhSMEFhemhYaHJmbGh2aVBzeEdqV2ZYU0xBU1hzbDNVNkZmbTA0NGVKc0wwZDFROG50ZzZKNWpkWFB2RFpxMG9jZEo5L1VOM0FpeHNjcnVidzMyRkFMV0pZUDNudE5BR09tZGxmdlc0YmZ0cWl3aUJtRXJsT09wS09VQXNJTndBNGMzZERuRldKQzhXNkJYdmtBV3JXb0JITW1yU1o3V1FZVDU5cW5BcE12Sm9lYm96ZUJ5L1ZVRVgwcmg4MlFYNHgydEU1R0UrTkE4WHh3UFdnNHE3SjFzZnl0Zk92S0l5ZXd0UzZiVitrNXNvMGdTV0paaTV1WjZ1bUs3NWtLOFJJUTVJU0c5SzlYKzJxZVQvam5QenpyczNjWUtnOG4ySUl6MHplRndWSU9PcFVaUDl5cEFqTEZFbTVOQ3lUSXczckphQlNISC8yU0dRbTZsOStoRlp1b2JHTnpGYStzV2NLdG1jL1ZhN3Z2WFVUdnhYeDJ1a0pVMm1mRWRlWCtzVHdCdWZGWmRxQ0w5K0Y1QW83a1h4cWI2Ymsya3cyLzFjUlFaVlhJaDJ4d3hEam5iUm1Ua05FQ2NMTEtrd09vaEM4UEd5eE91ZGlRZkVwR3lhNG1aeG5NWi9JZTZmc0dKeHk4RDI3OFVYSE9ab2RDSzNpbUd1eExUWXZJODB1eXNmNGJhcnBiR1BqU3lDeGxscFZWdzdlYmpoNmk1MFp3SlJFM3lnZ01zL1hiV1Z3ZVdybXMxcXlyNURJSTVkTWk4WnF6ZHRtTzJEamQ4UFEvV0ErNDBXWDNoQ1hYeG1ZdUlUWTZESmVaL28wNjRWZEc2dTRtRkdxSGpsZzgvRFFKZm0xbkF3a2NCMWxZS1ZpZUFkRWNTdVJYd1NDQ29IODhvOGdUTndOL0ZQUnF4bXhUOTgyaU5BNWJvZmlnbmdoTHZlbDBGMDBjZFVEUGZBSGtKNEVBU2JvV0FYMkN4VnRkWlJya0JVNWdqcGkySmtWbjdzUE5kYk1FRkdzd0N5T3VXWTYxS3hiMEVQaVpLdmg1bmY0QzlKSHNlOHJjbndYeGNkQVBPb0E2OER3UmZCVUJ6bHd0N0dyUXg5RUhWMGNrcnhmVDc5bTBoVkJxZXRjNVluRGg1VzRGOHA1RkYvMHI1eEpOajBudXFEcU5EWjBCRDFmMGp1MEFsMkdjMGJxQzlqZTBTZ25rek9kQ0d3cUpWV0FhS2Zrc0NXZDFIT3pJVU9xTDNKSGN4a1hyeDdoRVR3cXJUSCsvZ3JLdCtwaHhJN2lESTJCdFRiU2ViekJpRmoxV1hXTEZWMHJkendEbzlvVEZrVmtpN3FpU2ttK3RrL0M4YWNXazkwd1BWSEJLVTdkRHc4WXVCQ0JBL2JpYUx4UDE1VkEvcncxSTZ0aEZ1eTJDeU50TkpzYTNWWklrdC9sb3NIVmM3dmN1bWxDSTBScUJEYStVSXRPa01oaWVVMTcvM1RSOFJBYjhXWStuNmRkZlhjazFraldtZmpDVkJYblpXQzMrZDUvSERyWE05c29mZFhQSzNXWDd3WXp0bVNWMnNTa2lvYmtyNndWVUhMdU9OSys2VEpFWFZVYzJaanpuQlYxZTJjTHNHMWxsalYxdFRRMGMvWS9JSGc2a2t5VDZOdEswSC9qTTh1bW1WcE04bU1IUmtIYzJabnBLNlhFWk1ldnpXTnE0T25RUEkydmNDRFlEQVRZdFVNam1OWGw5cjIvN0NiQzhUanZBSlVacTQwcm5zQnFRdDNzMDErVVhlajdEUm5qbCt4bjFFOGt5NU5Za0V5OUNLdWg4VDNmQ2JqUFduUHJ2ZEFJU1N2OG5DdjNHcWRWMmNhTkpCL21XYlJRNTVIbG83TDlyaWQ2UDU0VEpMUFN5K3dydUdpVmJHZURCbE0wSDg5OHhQYW9GNkdjVjRGWUpjeGw1Q0RrUUhuMVlveW4xYkZhTGRjNnhwUUpaS2tZZy9oTCtIcy9pbFFFYXU3V2lCRXkzaGNuZWJGckJjZHA3UnVEWlZEUHFLZzFFamkvL0hkT0tsYW0rV0ZWMmVhZXdiTkI2WVpvWjlPdDA1eVFGK0xXTU0wMVFGTVUvQ3dINVJjT2hWR2d4OXl2dkpiWllKTU9HN3dhV1RFdklqTWpQcXFZeVM5T1lWbUoweEJ5T2VaUCt5TFhPN1ZhOHNwSTR1TW0zTm1CdytIVXovWDYxQVFBZmxyMkhabkJSblcwVFZRaHdZSDdRcVZ6d0tya0JNWm02d25DRy9idU4xb2dJendROW0rSXQvNDBmekp5aVlSazNJSWU5SVYzWVpqV0wrc29vb0svVWNycUR0dDhtdEUydzFoaGJpTjNqWHQzV0RVMExCQTBqUWZSTE96WlpnTDVYaWlPanhRdHpjT1VQVkpxNzlZZDhMVmFEdmNySjIvZkozSmRSa2NRWDhUZjI5bUpVZjV2ZEJOYUVCWFZTcUtTYmlZWjN3aytIbzUyMmdvNFg5TjdEMkN6WGlxSElLK1BMYXgxODdjQUtGeDk5S3VjNlJEMjFkQ2hFbW42WXlvblUvOVROU2tzV2hmYVJZTm5keWVhL2VYcnR0bjhvbjRrY0VJNGFnbnhiY1ZYNEZkS0VlTzZ2cUdFZDVmdWIyMkdjcHpuaHYxWm1CRjJoZ3d0UFRObEFEY3AxcEhyQlB5ZXhVY3hIYUQvZGUvZTEvSVNpc1RYRCtNK0xGcE5kYktSUlBuSlhqSmp3REQ2N2FmOThmTTlGZGEyZlI2c2ZQRWtrM3RQZ1UzVEZ3eGpsRmZPc3JUckhSVFlGVktyMW1kOHlmUlg2dmJjc0RSYmRjRDM1YUVFSlMydzlabGdXb212TmdwakpKWWFqZmZ2MHpCcXAycGVsT1NIQUIreDE0cTR6Z2IwMFZ1Y21kRXRyQUp6TC82LzlRbWtIa1JSMVY5dzVQbjFsZFVOUGFyejcrV0lMYkdBRkpuc3JESUI5bThrbzNlVDNTaEFtZjVMd2RjZjB2TTI2bGpnT0JtTnA5Y09IRVM3VGViZEtodU5KWTh4eEw4b2tWSzF0Umt6NFE2WmNjYWx1eUJ2cnhHUHQrSTdEU0o1amorK3I1eVlvSHNYeFpxMC9wZkJjMlYzNngrQlphTGRLQ0VrY2hFVDdXL2VJWDFTbG1jbkUrYXB0NUxFYTRhR1BnbzlsQXJEZTl0Q29TcG9sVDBBWHJRVTRXZFNRdm8vNmlycm9TbWlkek1qWkF4Qnk0dG16YkVTM01zSTVZNmUrdGlzK1A4Y2wzQVcxWi81NEVSY2ZkSFRwZnY1c1k2L1MxR1pTZVZseGh3YllJQ01KbUdRWENjbWw4aXRvdTQ5VnlRYjE5b2MvRE8raFFUNWVnODZuL3FlczVMVkhtMDhtdUpTQ291azEwT1JJRDdET2dmZ3FERDNXNVllcjhXMmkvcDdpMnlOUG5vekk0S3hQU1lkamhXSFB3VUxMeFZXWHlqS2h1WXVrR0IweEpkc1VVcVh4YkEvQnB5b0hmckpxaytpN0JzVWl3T0pwODBUMmlUeDdBM293T2JlNXE2dWhRWFFnc3RzVkpCME5tMlh0K2JQTlowdGdYaDc3aW1nMkxTQTZnbTZQMjlGeFVuRWxLQjNaTGwreElWTTVTNUJFZDh2WlRVZWlKSjIvMHgyc0c5V2Rrc0V5TDVaaEc2N1ZvcUdKd3hxOW1nOTNVMFNNWGtmakkxVk1qeXM3dXR2UEt2d1dCVlI2MXhQUnNUb3hMNVNKdjlRN1BoMnlvSzVwcEoxWHpwcUNwZmEwbVREZ0g4QjNTNzR4MVg3ZzdqNlRwRTZ1RU82cjIwTXJsZ2ZEdVFpVG5DaEgrSHlQYkkyM0dHVkMvQ202eEo3bVFLZ0MxWW9vVnVGYmtJdi9MZW9GbHMwT3ZLbDE1bi9EL0JBaEtPT0JSWElJaENrOEpOV21iUVIyQmVJcGF5SkhhRGw2UHcyZ3Z0YnV4YitjdDRJanVSMFhWUXZ0L3gxV1h2YjJrcDVQcHV0bVJ0WmsyaERBOHRsQ3oyZTJqNHNOR2paUjlaT1lZY2FuOWtyWEZaZHlZcTVHTE03WnF3WHo3UlBZRTdsU2JiKzZBUkVIdFZIR3pFWHo0eDFaam5laXdKVHBLSHhwQ1Q4NWVEN0xSLzFjZlpwTEhHWStZaUcxQzk2amc0N3NxZ21rc3lPZHE3NFpDOGZGVjhNSkFhbnc4UHlUOUJoUW5YWU5IMmVlbVB5am52M3FWRWxncnFsUTdNWFppdlpIQlhiNnloWHRkdkJsVzd1bGtNS0VMbFAxTzFtdjFvL09MYkJUN01kQTBYMk51cmE3amNGU2EwOG5WVEprK3ZudXpsdmdsVklzYWRTMHlLUVdaNGZNZTRYSnpxWnVoTnQrNHltQVZBbkl0Uk81U3dMck5XYzdZSjFmdVA1b1hRUGpSVmxGQkhMRHYwbU9zZDVKektqMTlBQW9UcnpxR3JNSmlBdkVtL3BQdkt0WlNyc1k0dXI0bkU1eDJuNGxlUnl1Y1VrbmVvQmp1YnYzVHBBY0RrS0NSTDR5YTRJdStwWFgxRjRZOVB6aTU2NzRjQmZ5UkRCZU1IQ3BOWVRsUldPb2FBWElGcE5HQlBDcnY3QnpVSWRadDB6UGdYWmFVeFhMTTdQQXBKVXcyUW9aa2JtNWtTcDBYY2JCMUZUK2JkL1lRUUdDUVdCZUtQMkpwcThDb1lheUpFVytWd3FKczZyanl4OWdIWW5YYlVKeG9INVIzU0E2SUpnZVAzSng2MVhoWGxiUFY5NnVHbWZkaDBLQnl5QkZ0MkNEMTJMRURIWWo4L2xpZzV0Zk1IaENBamNNYWNob0pqaXVhRFkySVZsblFXZHVDbmxyMmpmcnQzSVl1TGNtRTNQRHFBRndpVHoxQmt6d05RbDd3WFRQdWI3aWtqc3JxdVFmOUg4OUJIUHFmOUdFSk5Kc0FpVEZZajRTMllYUjlQVW13MDFwQ1pOWE42OXdQZitUa3R5RmhKQm80YjBQVm94THpURnJvdFQxR3pVN3l4M2pEOVpSSng2TTVBY3JXVnFWWkJJUHYwWUFxRG5kb2daRmtGTGdLV3lkM1BRMkJEU2ttUk81am9KK2svVFlBTy93OVh1VFllNmJYSW1vbGllZkxDQk9SenB4eXlvV3lZd1Uwby9aLzdPbWgySEV4SVFyRGtXc2htL1VPTDlnK2hmelRSc2JwNTlIbDNPaExraEdqNW5FRnRFSFhXcUJHNVdhVzc1MmRGQno4UWw2WFZJUFZLY29MYUxNTXIwV0dQb21yVStPRE1sU24xOE9ubE9keWZhUmZtV2tlTEJwZEZhcGpHVFZ5M2U3azNGMkdiM1dSdVlTbWVMeGRYM2g5ai9jcWJlS1c5bHpma3RLVHBXdDZqbFlCZ1M5YnBCWGg3cWNBSU9vVmhwbjFEYS9QdnkvYXVjM0NGMEZ1MEluM0VDdlRCelRZMmwyUnZaWWs4cGw2VnFaclV0R2djRDhVL2xtTytsVDgxcDB4V20vS0dOeWI2THVpK2RHZDFaaVZkNGtQdHJoUkNZckpkUGVGVnVaMDR3TFFsVlhrMTZzTHNyK1ZnL29DckdZLytCVFR0bkJvRURKNXV2WWZ0SGw5VnBhZGwvem9UamlUdmYvUVpUcnV4TGlxNnhqVmpnTzZuSFJxemttSGhBYktZRlc3SGtxY3A3WVZQM2d6ckNySi9PQWt2K1FuRTBVYmpwZFFxcUd1bHJiM2dhT2JXM1RxZWJFNVNKTEVESHczanNDbVdOdFNQQVhXVDhtZGlIWjdyOXF1NE5VL0ZRTnFUTEoxOW9LdGVsL3kxM2RkMGRZakQyRms0YTlmVE1KZVhhazlwYk8wSXVwV1NGSG83U0c1SVV2VmVBWnRPR2RvNXMrVTIzWWJSKzRZOUI0d3NSSzIraDJjRTg0QmducnZQMDh4RkgreDdlVUtFS0paZHhDcjdNckVwZ2xHTUE0eU8wWU95NGo1RjFjS1RpM2I2eTFQU3hqanB2OWkrVDBlakhuR3FlbFFMMW51ZU50MnlmdmFYc3NTbVprNEpvZkd3WStNTEcxejQvTHhyejBMMGd6MlNrd21hUm8wVS96RWVzdkxneU5nWUhCMUdaUU92RW5McXVUb0xYT0FVV3ZqaUxLMGp0TnZTMzkzdmNSY3J0OEowUjZ3UEE0bFFrMzBZVmZQQnZSOWZQeWFIanpmRGgvbS9YbS93dTZMWEdDSk16QThZN0E1VmVXakk3c2N5d0M4MGJSREpPSnpMMTVaaU02Q1QrK3BzNWhucFI5bXc0cFBmWEtwVFJQNTc0a2wyU2M0OThHaUo5c2w4dmdBL1owK2ZiODlOYlhBbkhOZS9KbmZGUVZOaUlSREY1ODFJc2RjMTYvWFRDOFhvV0pmOGRUMU1vV0M4OGh0OWhzZ0h6dnM3K0Y2Z0tvOGU3ZUlwS1VoUmZUUlJnUml5VzhzSk54cG1YVTYyWnJGdjJ4YjJWdVNaSU9nVFJVbmEya21xcFZRZGREbS9DS3poV0MrMWF0V1Q0RjNRSWxQT0hvR0padDR3UzJIUUpjK3ZJbVZRKzE3allGNE0xdmhNOFNUdTd1Z3hmUFFjYWRMUDhrQmtKNUhFeEpWeGtad1NUUDdobm1ldFBQbktlaVJ5RGRudi9IZGM2QUpWZXFFc2pZNFJxT1p6S0FLajJqY2E5YjB4b3locEtwRXE1emhEaUM5bTRJSitFQk14dHdrVXk3cmR3RzhBUFFZWFpmVFgyR3F4R2s0cEJ0Zm1IaGNTMXAva3E5cUZuWXA3MlpWMk1LSW5Mekp3MmlRVTJXWkQ2dVF5ZzlXREROVTFLc1pkMHFhTyt3djh3U0VHSGhWUnVrWldXZnN2diszNEFlbkRzWldLYmQvWWdRMEVFTGhFV2MycUNiWm4wTGhlLys0UUNYL1FEMU5sdERUZXhuc1UySXpnMEsxQjFWSmpmQVpzYnJFWjJZQnMvdGdNcjlyaUZMd2h4NTQvK0xWNHpDODhZYWF6eEh6WTZQalY4RDBZdzArV0xwUEJXYmFMbWVnYXoxRWVIZ3ViYkhpNDAvWGdiakR0dUhBSFpmaG9nQU43OWpTd1RZNnNITytBcE92cUtDT2c2TGd0NXJmTloyOGptUmJJVTJxbTNod0pIai9WaEdOL3FWMFNVbTRFeEN3ZkVLSWgzTGttelBDVmxiMmJFRnBnc3NPdG9EUVU5cU1CWnFrdmFtN2JVS3hmL2RSak0yZ0xUeVhPK2w2OXYvenBLUXQrT25GK1BLU0NwcUNWZi9xMzBPRkJVOTJWZEI1a2JwcVpwalpZS0E4Q1NLY2JXWVRxNE1xaGh0YVNJMCt3Q0ZoWUVJbklWRWV4RHhQTnk5TFdJMEExZVBlSy9oSm1IblVtS3JIV05WVmFRWkJWTlg3c3h3VnNEL2VZNEM0Mm5TWi9rRW1qNE5XT1lJZzJVMVRXZHMrYXZ2VG5Tb011WkpRbU4vM1Y3MzRxdVdvWTZtVXIrOVlNWWdNK0gxNmhlMEtQSWpObU83TDBwT0VjTWRXWm9jSnRNMUc3SXNWa1BGMCtkZjFkak1yZnd5MXVINENEUXZpTkFKWmE2UVo4U1YrYzhnV0xNME1VZFRXZ2hRYzhNckRsOE5ZV2lGQ3VxNzEyMWF3OGJaWmdGdldTZXpmeFQ5aHhpc25KblFzWHVKQm1TRnNsL0VZb0N2ZG11K3NkSHNhSHVnNy9CWFpHWG1wRXNuUUtnUTFtd2h0bHM3TUZIRllMOUhkWVluS1RocStyeCtpRFl6NFNSeU5RVWVZYkdNbENKS0ljdDByaGhWaEJJNW1DaVBzd0N4Zjk3YXkydWI2TzlCMVJzbVh3U1FYK1JCMUZ4d1NONXp2YWRWQUVESnhzSnVZZWh2dXJUSzIva0YweHQra0ZJbVh2UHQvNlFMaFdUNDUwSGxGemV3VjFJVEdDQlkwMVIvRW0vWGFpclBrR2dVZnBtdFpwWWZDdldxbzhrSDd2Ym5tQTdsTVdUZTZjaXA4VE9HQzFWVVpFNGtwdWtDbm1EU05JYlRnbkdSS0M1VVNXNlJMM0NQV25sRFd5cTJuRlNrUFkzTGJGKzU2dzlWMGV2TkRiZkRYRjIvMkoyT2crdGU5MDlIQ3JJUzdreHFPWVc5S2VDWmptZWdsMFBqVnE0Z044UjZpYnI3L3Vqdnd5M0RCSlZMVVFyeitxZWFucHZDRTNJNFdOc3pzSFl4WlZjZDdZc1hQTUc1RjY4b0pjSU0wcWo1S0o4TXZjVGU4bG53UVpiVTlOdkxpTlh4b3JKbGxaQXBxaVFCeHYyKzFvVEZwOWtMUEFOMGNTZ0lLREJCZmd1L3hiY21FUTR3S1d6QU9qMi9Zb1JtYzhTVVppLzR0WG03ZW1OMWpINGV2bGVmLzVpcFRMU0w1Y0M2Yk9qRk8zeXBMSGNqaStBOEVjTDhSZ1ExMk9aMjlEWElHM2htcDNWcjF4QlB3WUZPdGY2NWpVelcycjFSc0pMTzV1ME9ubVNKVXhnajhxZ1drUndXNWI3enNsWGJoazllWE1Kb3VyT1BRU04xZ3hTaTJGSFBkcDViS1FoWDJkVmZUaGxkaExOSjdWUEJIUDJpUityeHljZXN4cGZpcFo4WDFWNmJUSEZVSzUyNHJ2YjJXQ2xhK2p3WDlEYjFHM0NsNWFYZXpSNTFqSUwzYU9QVGFPZFZmOS9SVjhPMHcxS3JLSElIVDIyM2IwK2JxcGFWNHpJSVJiS3pUOWpzOGo1ZnB3ejRaZlh0bGFYUjFGODBFdTUwT3hZcU1ocW9rOFQvanJWZ0tveTVrMWhqakwza3Z6aHpCZThBVk11NHgyVm9kQm9sYzFZVzlETzgySURXNUlHSkJLd2tQQTZmMDBLQldBS2I5UGlwZDltYkV2aFZvVy80b0JFWGlEYTNKTkkzOTgwSDFvaVgxbXEyclFIUXJCYmZaWVMvTVdiNk53cGhuTHo5Qld1TEpBVFhiV3ZDeEtXZmRrVDVWYUFPOHVWRVZtQkYxQlJJYmRBTk5wN2Flc2Z6UnpuT2J1RkJGYUsxRWlzNTM0TlFhRDI2WlExZ05jNmI4K3ZlaXpGWTMxckNyTGRacWxwZHA5bWFKRUN0UnlrU3ZZRlM1SHZLT1RzNkFLQjBsRGtTeDhwMkd2M1kvWlhHUzJaZEtqTkp1S3VnajRQYlNNdXJBMDBYVG50Zk1yRG5Lc2dJNGpyZnd3aGdnMEpZeG10bkFFUjFoUFR6U1pUVUkzMmQ0MGw4T0d6c3FRaVpFcDNNL3hydXNQRkNzMHFUdzZMSmdyRXU1cW9mbUhSTTFBNk9WWkZ6MmdNYVBFekdIZ3NSV0I5NkJ1ZEQ4TGhrK1FuemI5UzhoMGZyQWkzN3NRaWtEcm0wWjBpSWJmalpNQmkvaDF5YlZhMjJOYklZSzA1SW5pU1BCU2hmWi9KMUZyYU8xMy9YU3BhSXFrNTBYZWY4YTBHWHZxQ2tjbW1VcTVmUm9LSzRudXh1dzEzTktRZUFnWlNtQjh6VWNSWGRTa1FHYllJWmtkTzVhNUVBeGtwV0FnRTFHQzkxWHdlTk8yRVdYS0tUSGpkY0JJV092d2paMnZQU2FVVkF5V2tpaUdab0xvQUR2b3ozbjRXTm1FaVdEMkw3SktmSXZIRDB6NWtJZ2JhalhHYm0xeXpzQmY3WWwvNEV2MnpuZ3VGcUZTWjIrbmtsTXN3Wnk3bVB0aklXN1pJSENtQVVqRTNhUkRzNVgvRnFJZ1laRjFZZXBaVmtBc0VweElNR1JLZURZSWV6VWZCQWx1ZkNMWFdsZ3c4eThQZi93SzRZL2dmdC9sODJsZUtad2ZOMUZQTlVpUlJPSVFuYWpJZVlmcFFSSjhUL3ROZTJucUVjaEY1aVhLdjZHcTB3RFRpeUhZSTZBRUZGa0dnMldOaWRjUXlNUHBNdVZYSzEzcENwWDZ0WXYxQXZOcmtmVjRwMXhhNTNQQ2prbVpkU29GeUdUYU1jbnRCVmtHS2hrNURjODBuWVlERWRUbHlUZnRxK2Z3b3FIZ1FhRXlaUFE3M0VGay8wWmF2c0NOTU4wM25PU1VlZng1bzI2SGtTYnllM29EQ2JIdm9Va3NISUI3U3VjWnVGWktjclNTeDNKV2VBckF5Mkk4K3ZUMFBMdVNMVTdiYm82RmtneHd4WjlyTFZoYmkrb1ZQVTZPdU56cm1ITGI5TkkxUnd5VVVhcmhPalBjeFF5SkthQ3piV2dHdlZGR05KN0RicDhkMGo2Y1paZURqQjM0SDVtSjI4bVA3U0FKeEozYXQwR3NRRVJCZUMvMTZjTGg1VWhpc2lZU1NiVmp5ZFNtTUFtNFlZbjdVSktzL0tLeFVTMDVIV2pkemt0RG5nbzN0ZkRSRFh3bEwyZmorbXhwbi9CbnlxcGdYZTE3NkNTWDVhbS9uT0FyVWQ0aXpEQlRVaURuU2Q1d0N4R1dLU1htVjU3T2x6dWROeTkvSWc3L3Q4TXUvTGh2ZWdoSE42TisxblB4bUcxUmpHOFRIVUF3a0lHTmZNNW1XT0tsWCtON1BLall3bHVkTGdmeGxMTThWYnp4STBDWko4aWU2TFY4ZEZMT244OE8vVDkxN25JN2d6U3ZVNzVkQUo4Z0RkOXVoMTlDWG1BR2d5L2RoTGlKTktXS1F1ZllLek91UmVvZmxuU1R6aXh1eGxHdGlXRmQ2NCt1NGxkNk9VV2o2d1FyY3BncFBCVDVJUi9qVTJja1RBOHBQYXBiYWVHZVZsVUxjV3dOMWpDaDVucHFONFdJR3dabWYzRGZzOFVCNHFPMnhsV3FlWUl1OGEyUUoyZDNXdzdKYldaOWNta2xMUUxiQVdETEkrcjVIZjlSQk5IT2h0NFplSkkrVUl1MDl4UnR2NmJJT0I5L2pIUkdOVHlhcDdXZVBBOE1zMVRTem9Dck8wUW43ZzBxQ3IwRWI4M1lrR3lxK0pJTkg4TjZnZzgyamZqUDNJdnpTUHltbHpXSEl1RVVMMU13d3VsRmowakw3NHZOK1hxbkY2OWllUHBFS2dUQVE1MUh6RVRoNHZvUWxMc3hvYXhpSXhRMGFQWlJVbDJGNFNMNFd3eFNhc296RjhpSENaNkx5TjBZNklNU01IckYvaEk2QXdRdG50NnJwTDJJLzRHeXJNVkRvMzRiNnZ0OHdjc0l1eUUvVFFTbnVOd0U1UWNjbEtYNmR3SjlFNldIanFGUWVwZzl5U1NhanZEUTh1WHRFb0haUktRMGMwNWNuL3Z4bzRjUFZ4eDJaOUExeW9GM0lRZDRFeUtpTXFmSUtzZGdPbmlTVjlvOEwzOGF6MG5qMFVRZ05aS2lScTZtT2tEeXVxMW1OQ3EzQ2x5K1BYdnU4WGhJUksxb3VMR2IyZGRwTEUxanVUL3Azb1VMRWNDZklUb01oTHBxRVhOY0x6VytCK1V2aDIwUUhhV0g5ajIxM3RiTzFBQXA1WU9vcFpUVUFvaVNvU2hFSkIzVnNWTHRHaUd3OVludmcxQ3N5NnZoRytuWllma3FRdEVTYWN1ZmUvdk56aVNnd3hwSjRjQWZ5VzhrcGJBVkltRGdqY1kvSkx0dXorbysxbW5iTkRxeStTY2xzWlNOUEZmSEJKRkl2eGtvTFVaMDlUckRqZExzb0lTTCtxbjUzL1J1bnNTOXM4aHo4UG91SWozcExlRXFlRC8wcWZsSWt0Ny9VcW53ZEd5dGhFVmhzeGVyVFZHWkNyWjBDa3VGdERHYTBkUDZMWFlGYTdNbEVZVUlMdUdLUWYycmN0b0laMHN0RkpHUkluQWZVUjJOMW9PeDBZaVZ0NXdibldObHJHU1o5QmJEUHZOUm5iUFFqTExyMDYwcStMOHg2VDlUZSsyUFZWc1JMZHc0cjM0TkVHYVVGRGFCRFpFL3BNUnBBMXQyODNQZ2JOdWJTMC84SjdpTEl5VmRYVVhMYm05NDNVMWtwUFpOREhLN0tPc0RGd0xTVkx6S01FSUE0N3ZlejNDdFZneldNaVNhN2RlTUY0aXgwaHpjaklGbVI0UHRLR2IxeGlhN0lCSTFFMFliQVVkU2NMTmtDQWx0NGxueVptQ2NzbG1BdkdqMVJ3ejBQMjdtekFnb25lR2Jvb2h1RkRqRlVHNFZGTFNxYk1zeFE1bzFmRGhmdnl4WHloYWlwZUFsU1paT1JicElZWE4xczZ0ZXFKY2kwZnU3aTlZUGJMOG1zcFEyaXZ0eUNyYTkrelZENWVPc1VCaEc2S0FyTHpzdjk1bEtPYWhadks2bkVuQ1NhTFNxSG12WkJNUzgvc3crWWRMQVVWbkZZRVFBSmxXR3JmcDF3QlQwYytINlZmZnlUNW5sQndkUDZSQ0ptaVVMdUNLNVFnakhXdWorZWx2V1R3QUcra2VqM3RmVnRuSWlOMUViQW1lTGpJOUppK203Ui9hYWhsenJndVJkNGJ6bHdXTklqZHFTb3NUaTR3Wk80ViswZGNOUVVyM0sxMG5IOXdqMURBci9qVnpYKzVjUGF5OG56cDFMOVl2bjZMb1Jpd2hFVUY1eXBsYi9HR3QyR3prYWJ2VmhBZlVuZHk0bUc3VXlkaExQU252MnVlK2xvcUZHeW12dE5vYTVCd1ZVdk9hMUVkaTJZZCtGYkRmQWhqOVJhSUNITjcrTEplR0Q0YXJ1dUJiT3lYM3pSSjg3RkJsOU9HeXB3VDlaRzBYQkpjbTJBYjY4ekJacTJnR0xkenM4QjNDY3BVcW41QllyTlZHMU5nOE5lL2ovVEs0bDhabW51MWdWRjljbHBCdnpzN3hNbXBYY3hIcmJwSHNEcTFzRGl2VFQrZXJpNndmR2RLMkpoQkpwL1JaRmxSWGlBNVRGUGtpSDI4SERmK0kreHNwbkJUa3NiSDhLdWhHV1ByYmlOSXhUbkFtQ05XWXNjdG8rM1dsNzQxdzY1TWZrTnByOHpoZGY3NjVrUHZSMWx6UUxJVXZCQkxsWmM2TXRXQkphTE1ESDh1NWxZYm9RWkVxTzZPVG5oT3NVeUJydU1MY2pkR2lxL3VLQ3ZWSGlRbVNuQ0l0MFZKSzZueVFHRmhBTkduamc5dWdUZ3NhVXVGSUw3V0RVbk1qaC9IcHc0eklDQWdJQ0FnSUNBOHYyL1JVZnQrbTIxOVFWKzM3Yzc5bjNOWDdTci9oOW54ZmI5ampnZWkzMjlnTjl2Y1E1ZnQrbEkvYjlXRG42Zy8yMzdaUDh6N1VyOVNoMzJmWlQzMi9ZZDRIcGY4TzBDKzN1cGNOOVgwQUY5WDBmR3ZuRDMxZlh6ZnMrd3EvVVRmN2ZyUjc2dnEwMTlYVjNmVjJRQTlBQldvZGVMRFc2OHdURUlYMnhZVjc2dWtsbUdnUWJOK3JTOGlKL0xwWmhoZVBaTFk2dVZHWG12VlZiRmg3dzdPNVU2bi9FWVZuMlRQRUxTQ1hPSkxuN2l4dllxdGtZRUZMT3NkNnVab1Mwd09mbDNnZFJCTFc1MUo5SFUwaGVMb3AzZ3hudGtmRXB0bmdpVnVneWkrMUkrdXVRTyt4aUV3NDloZjdOekxaOEJaUDc4NWxMY090d2FvWk5IOC92eDhjL09qampOZXBUU1lqT3o3TTIvbFVoTlJhQlVsUFp5VWJFVllVd0FiTFVMMGt6N2s2bVJVVzkxQWVvMjkybU02SVNHM0N1S3V0ckhhSDVCZXAxWExSZks2NURjVVdPRVVYVUtIdVVSOUlobDRTRUdzVFFDdlRjV0dETzNpajRaeHo1NW1mMGJNTW5lWWxNaFRqeGtPQWpydzNVdVk1M1Q3bzNXcWFQNnpWd20vWGdXaVZQTzJDc2ljWm1TSXc0eWRoVTFmeTNsdDVTRWVwWDhMVHBLSzhNWEs2ZzU3VUxQeXlyUHFCcTRQUUpYa21LdHJZRVE4WXF5bCtqUXBTN2IyV0l3S2J0ci8weG94SHBvZ1k3RnpKOGVGWjhwYm1IaUdBVENZMGliSkxwaC8zdStuN3FyVkdwU3FOclFSdmlUbWEySVpMUDg2YlZUeTdHazBsRzlGQWJKc29xeHJ2OGpLZmNjSXpBTlAwMGx3TTZ4aFJveWJ6R200b1I1T3JIbDVtdlc5MjVvdEJZbnFLVVhhWHZmYXdvSmRYeXo4NS9TT3JFb09WNlhpMm5ETXYwSk45eTFkUUtaczRYdm5sbHV5TVFHbnVTN0d4T2g0djhFRUZlVnltWmM4c3J5dXdISVc1SHhnaFU4bStxSENHN3pmdWRwd21ZVjlZMFErZDlham85T1JNQklybzl4blV3eXAzbHlrQnZwZ3pNWGpBVkhORGlCYS9wTGJKUlM0dCtpUDlGVWI1a241QWFNTG01dnAxODFDR0J0ZjR0VTN0RWtpSWl4WmlDT0l6WTBacW9nSzRDYXhuVGYvZmNoOC9UYmtYTHNUNnVhMnQ4MUR4L1ZSUzdYcHJrWUZMRGpzKzRHdUwvSGE5SzZ0cG1qcDExemhDSGttTFRSempIZStMMnlQM1U1MWhDelladi9mSUNHT0RFdWlOTk9jY2lXRTlnZjBIV0VZTDR1UUhuM2E4V2FzVUF4MDVFS2hmN1BnTjA4Q2FCLzNCZHlsZzF0VW1LNWpIWnRDTnlPeTBiSFRNT1NTaGJnSWJKTUFJL2s2aXRTUmxKeUJZMUhsQ1VnUzQ3QmlyZHd6MlpnQnRYaEY2NzlIcUc1V21MNnZtMEVpd3ZWNkwzbXVVdi9Xdm9WMTljRnQwb3RObDhTSU5KbjJBTmRFWVdMRVlzUzdQajdXc1BqdEhqR2RUbmNEWUt2T0dWS0xuV1NoUTNOV3hJVFJlNEVqYXNFMytPS3BpZHQ5eUdVYzF6Qzc0LzFYdjhBNHlMMFJ6cmRBSmFOSFZFbk9BOWZ1dEdGOHdTcGpjMHdpVm1GdHFxd3Y3SG81Y2VGRjRJTllrUmpSTEpobDNJc3UrMDlCSkhja3dEbmlsaHZNdFZ0bWJxTklsamhHazhUZGwrNVZNSEFIaVcyZTBPNnN6eE1tSm5wMGROOW4weWxRVG52Q3VXbit6RFAybmdwUTJxMk55elJxZHF3UFFET09VdDUxZDdnUGc3dGQ1bHNJSEIvK2puVnppbC84Z0hFcnRTclhJTVZBK1UzTHk3V01nN0YzajNLa2FCWCthREdNY2x2V0h5cUpNNlVVK0t4Wi9KTWpNT2k4T3JXdTBMVENiMTJ3S3hLajZPZm1RU21TZFFwRmp1YzdPY3AyblBkUDFwaWVEdTRUMWRKZTh2Z0F5M1BFSHlHY0N3TXg0UUtBWnF6SkovZDFHVXo5TnVtV0RBN2o5UHBWSit6Wk5VbXJxWTF2K05VdHRrdFlFZ1RUZGJadnRzRHB0OG4zdmtnMDBMRkpMa0Z2Ukx0c3RoR2RJMGw3SXFaRFZNM1dZa1VPVG05cDFabVhtQTdrY0ZmanJtb1dVcm9QL01NejErbmw3K1JjWWRnMC9XNWdQY2w0bzN1cGx5aGNhQ1ZrTFZBTnVzazZWM3hLek1WY1dOclI1WHBjODZBMTBodU5zZldmdzBLRlZxQUZwalFzVUI3RFlySE9jY1RWWldKRmZhbENRTVloQzBaU0tEZ2ZFVis5U0RGN0NlTTJtTE5xZ1NpdlZ3cEIzbmdjVGlnS1IrZ2paT05OejRRdEhOSCtMRlBhRU1TQzQ4c0lYSVRKV2p5SVVlMkNCRnFMZjcrQm9ROWo3Qjg1RkEvZHhvTlR4b1l1dWJEQ0pxckdNTmdLMnpmc2NzVUExT3MwVjUzd01HVCtOUnZ2NHBsQjQvc3FOd0FYcWdTQlBWZGNqZURudWw1a3hUYVhDOWJiVDMvVXE3RlBVVUJCdGh4SkdPcVFMaWFGUlBhaHZPc1NFcEtMVUhsSWxQT1ZQbWZxZExaUXhjNkl6VzlwdTVEWFRpQzhZQkVUTU1XR1JLK0J5cXkrdlU0QTJkU0VhaUVXd2RqREZ3ZnhUOURwZWxGaUw4M0hNNUFNRG1LRkQ1Y2VjWVFjTmIzdzdSNVczOWhETlNqU21JamJqUVBpVHdaQUZRNmIvRGhoNXc3bUl3MlkrNTVkbjRMU2JhZkZxZFQ2Mlp0RjBDNHVIdlRlcHpQUnRqNFVpSmNWcnNMam1ndzJRYk03NXNvSW9SNFpOcktlZkw4R0ZKQVcyb3pWeDM4K1JJMzdsVmdNNldjTEgvbkhqODQwVVgyU3VEUEZrVEh0N2p3cjJheFUvMDFWblpseFdvRGU4KzVEMEE4UndLc2RQNGY1NEUyM2taK0xGMWNrT2UyNTFJZWFVYTF5b2tvOGVWUlp4MG1rSUVZejJzNWVoQjQwSG9oSEE4emlDNGNVZmJwMkJYVEpCTkRLYVBpVmk2OXNHZkQxcktuQ1c5clR6cUFQVGJFekF3Yll6SjRmMU1rNm1MMDBJQnZoSmFCMUZJQXFpazBNMnFqY2RydGNHeUdLSnhtUkdSRzJNR0RLamZqTEZnWVA0ZVgwN0FtK21PNFVUMXo4MSt0aFJBd3ArMmM4QTFFaW1uOTdQWUVRa1dUL09VV3BwWnpNQ2JHL2MxRmZhMHZhczZYUzdiRDI3SWNRd2lMVldROVZHdFNxWmRUTVlFSDlINVBRZnEvRVJ6Qlo3YVhaOUpuN0pjMTBJOEtzdVg5RTRMUTFkaWpsNG83eXNMTWFMOUtqYVRnWnZWM1daNVFzTkZxUzZIb3c0NDlVMDRmZWZuVWxWREFUTmI3eGtLcFJZUC9SYnUyNzFsTWEyRzErNHhjUkh5WTMrRDZidGxSMThmVEZiOWJvd1djYS9hbWlmVEJlWEJiQ2NDL3pDUUpVLzZ5Ym9peGhGcTZBUWlhTEJxN1E2NEJ3KzFOczZDU0FJRWp0U3lRN1EyK2FnOE1CeDFJMVhuUENDamxTRWYvUExIOXFNYmlGVi9JWDRKY3RLK3dIMVhpcStUdDFnR3o0U01kUnRoMVpzRnBQdFF2UjlJT1F5bWJ3c0hJN3pramNtZDA2QWNrNldITzRmc3RjRW9vQUNQT0JEc2RKVlpLYzhGM3QzbUhRUlZ3RldLRnBmcjZuVmNQNDNsRzA2ZUh3QTlpSENnTFNSRGo2SmE0QWFzOXpScDF0Tm1VcmVQakFzcmpXRkRmcGEwOU14UzJYS1BqK1lZWFlOTkNXVm1RaDdCUk9FdldscU1ObHArTXVONEM2YkZZYklXR2FGMjRxWXJ2ZURnVEp2dGluaVJtQ0N6WFV4WFlwYXZJTzQxUXIrekJsdys4MjhWaTV4L3BsYmhWeEZ2a3ZVNmswS2RtN2h3WVJzRlZ0S3BlNFlXVTlKMUVicTZZdVhwQlRnNUdaV2taWk5TeWxiQy9PMG42SjEyR3V4Tkwyc3A4N24zdWZHVnVQVThBTkhlUWFhSzFjKzkyZ00xWTc4MW9oZjBCaThvS3RpNS9CWFBqbWlES3d1U0RxclVxVU5mUkRtRU1NblczY0YwN2FrbWVzNHQ0V1QvaGFSQ0tRWnFqV3BXM0R1Ly9PV2tBQ3pHUHhydkRpZlp5YjEzcUFHS0ZvVWNVT3hYWHlEcUNZN1JSN1pZZjZrRVAwdnlRZmxQdDhoYTJKa2N5Rzl1QnVOWkd2d3A3ckRpeTg3S0pKR0RGdjRldHFhbGlDV3lKeHVUN0sySG4vQUlucjdwb3hUU0JCY1c5SlE5dHp2WlRvZXg5bUs4dVhaOTU2TmZRNG5iZjNkRHZUNCtydUpaMjFKUjNmdmUyMWRSQUt0aEEweGhkMnRmdVYxY1Q4QWs4Z3hRUmFEZE5XVCsxaUw2WTcyaGYzU3dWd241UXhIK01ja0h0RkkvcWtYSGxIYzJrbm1KeEZ0bkt0Tms3NmF2a1hyckJzMEw3d28wdE9ON2dQVGRMZU9pSnJ2UGx2RWllV2thRk1VVzNsa21veW1RVC9saG1NeURnYndHYU0xaVJyZGxHM1E2dTRaVnM0ak93NXB3QmZSdXZZRnJlTkEvYm43cFU5Q3p4SE5YZkFzejU2MnBLUlNHekNiOGlVN3JZa2NOQUtUSXNHWnRveTlVRHJNWFhRZ2RRSEt6VG9nUUdYT1BYamovd2szSXhFK0lGdkFnYU5JcENqT3R0ZVJlOUhsVkJMcUhWT0R0cm13N2lWRlFhK2t4Tnl4dVE5T3dPTW1IU2VKc1d5OW05RFh4MmNvejB3MG9iMkp2WEtnTkd2UzRnd3pvQVNJbTBsMWtFQ0c0Y25GUU1LQkxBYmtwaXhWV21DQzBSYkEzYzg3ZTllWnZxTzVxOUlTYitXclF3TW42VEZmdkVlejl4aTdNazBIQ2QxS2dkT3pmVWZzd1krcDJlRnZaajZIZzVJVzE1SWN5Y3RLTzNkaW9VOUlQeG94ZUJuWXZ4cVNlUi9NZytNVGh6U09qeUJObmxaV0s2RmZHWFRMWEZCbjVUenltMXlVWmdkdjY3NEU5a09zWEc1a3BQWHc2a2RMVVMvTmNtcm1idHJoZWVzTmh5Y0h1M0FJYVVsUUtNOENHQm1ZVE8zci9lNG9iVXZTUUxFM09Ha0YySEFtbnB5QkZNbFp2WVFxbFA4ZVRyOVMrU0pSVHcxOGZHdVp5V0hSNmJkOWF4T1hraWkwYXNnREk3WDZWMWlZWmZaWVJjcW9wM2tHditxL0tSWW9ScXVKdjRkbkVPUkNqbTRtTWRGMlR2MHNUZkRIS2xoSldEbjFEaEhSWkw0dTlrMDdxSFpJaWxrOWZ3ZDhqcGdyT1MwRVhDcFdEVXFDR0NQV2o4MUxObXFkcTh4QTRCZEpIbkxoaElXV3ZueUZ4VFFNOVNSY0c4TlNVeFlWcnNBQmxUM1I4a1V2azBSYlpxSUFTYU1lakt4WEREUkZBMFhpZTBBWVRJak15bU9LYVMxNGxvaTZpdkNoVHBqNVVjYlRTdW85MFJnc3MxTCtGK1B1TVllVU1MLzFtS3ZoOEZJcGxlalkvRTRkaFlROEZtMDhMSXRIZzJxZmVKVU5SRVpaM0ZCTW53WmRKMmpDeWQ2b2U3V0pTNzh4cm9CK2RkUG5aNUcxd1I5VGhpWG5zRm9uK3pqTUdCTlJYTnEvb2grVTZnbTBxbG9TVXc5Z3pqa09NN3dHdTlJUithWEpOZHZxRks1WFFpQWwxTWpEckpBcWF6R2VYTnJNYmRtMWtZZUVaRVNMb3M3aGRTQ0NNZmdWM1cxYjcxbitCTjZkNlNMaTNnVEQwa2ZwOXdVbmZqTExUMG5Jd3E1ZTJlWVdMdGZoVEZDYklzb2ZoUURZczFSTkVwQzdReGw5NDhwazF3bjdTRGF6VEJuVjFnS3c5VGtvNnYzR1pwMEJ1TURtMmN2VEw0NFZRSUZXUUpmR0g2V0tsM1FrNDVWWW1tMkN0WWY1V0RXaGdzdC9kajA4VnRldnlad2JLVkZNOXltUnN4RXB5WXVoTk5wMm0yRTJ5TTJrT01ldGsydVlINTJRb0xIMEZ3bHFJM3A0T1ljUGk0NE5KZ0d4ZTV2L01zRGRkMGVOSHN1UURCQ2RHK2hsQ0FRSXVibWgzSUtRajJUV2J5SlNkdjF5cWJ0bnFiWGxHcmxUNnQ0bXUrZWxMRGNrMlAwUDg5TUg4VDhnQ0JteUVFN0xBc1FMaUtSTzE4T2NTR3ptQWhQU3ROODNHVGp1TnRseEVSNkk4MytTUlBDVFlsckZHTzBJaW9BRGtrS1h1UlFxcmluMENhR0dUdUpWbzNHSXM3RU5Uc082V0VPbjIxNDd2eThjUEZoZGZYSzNnaVY1NksxR3RTQVRwbWdQRU9ZaXkyL3QwT1JvNWVaYkl6TVJ6THJ6WEpHdDVoQ0NET0pyQjVROWhQZGtCU3pWc0VSOU1LbWZjODQybWtoL3djcXZRbmJtbDBvYVZ1NHJjTUQ0S04vaS80TXYyVHMvbmxMMkljSlF5UHpRNEs1NTNybXc2enhpMGVmenl0WTduSm4xSkp1UW82UW5WYmk4ZFpYcGEzL1g2RDNVR0dLK1lPWDR2YlQ5aS92NjlGbldHMHkvSXIrdUROMnM5QzJBMFh5SHF3R3ljdmZVRDRRM29UdkVuUmFzQWthUXhUYlNVL0FGZ1JtWkpsa1Iyd1FaOWtGNE9MVzNkRFBJNHJaOHBuTlJYTFFFVmZmVUVCSlFqb0hVZG5vTk1kbTV2Y09xYUZtNmpRR3RxRzVQcEsvWnpXQXVwVk56bzYxSmtiZFhrR3QrNyt0aFBHYVRmbkhmRjVsSnlWdm9xdW9vWHJZZlZvcWhSQi9WK0VOcEswTDU2WUplRWNOR0lQOHpybmJ6Si81bTRFaWZ0aytwNlRLMHoweEUyeU1wMyt4ditFM05RQlFQeFAzT3oreklrTHFYaWhsemwwZ1FmYXdRRVhISjg1TTcvYlVUZUpOYkVWZE9pYW50Q2ZpcEZ3U3FEWnNrQ3owa3VSUnlmK3BWQko1TEFnZmFSd0dGcjdPRDBQUzFReFJnRVl1VEVnaGtCci9HSUMxTzVZeTlVcnVMdGRlSEMycy9jSkFXaDBnSFFKWlUrVWVIVWl6TWxJNkxER3FRSkJ0ckNzR0t0YURUTFh4bkZweWk4RFpvbU1HQnJRY3pkS1pkMXJhT0dmRmFvczhONjF2a0pvUlJWQ0xDTmw2SXdlQWtCdDZQOFh3ZTZGRW1sVXppRWZNSmNaVUowNG41bWdJWC9Mb1FSTHNtNm5zd0duNzR1S00vUlE4R2Z5VmJERUFCZUJzV2xoZ1draUhodzkvYlNUU2lOcTEyYmM2VjBTRTl2L0I5UlJuVnRjd1ltdHdXOXh0MWJNcEVWOUJNMDc2ZFpkakRhNGYxOW1TdXdBRDBxeUVaTy92dXpQSURoV3lRRUswS2VhZXZhUnlnMVpwRFlSb0U3aVpBN2lja3JsbkJabWh3WHZvZXNLVDBid1NRWGZMdnhuNU9yL2V5SWNoQ3BIS2YyQWNZbHJjOG1QZ2FnOVM2ajQxaUlhQmtMS2lOeTVtSUJ5NzJYWkFmQTduOU1qc1lybTBSYnEwMHg2aEJabm4rQ1ZYbHZsNmNORHZwOTd1dTkyUzArRXZFcXBRc3RaV0Y4T1E5YnpBT3pXQnV0eDdHbWg2OTMyaUpDdlh5SXV6QjJPZUZlL0VXR0V1OHR4cTU0YTY0MmxwZ0VoUGtuSlZSNTFXOUFMRkpuWjBlQklqZEg1WjF1UXhqMEtUS3RJNi9nQlBNdytYdk1aMFlMTjFLTjYySTh5bG9oUDJZVzd0UGxPL3k1SVQ5TVQrcXlLb3hGdFNkejFjcjB5UWNielpyRWZDSy9Yc2JqUVNsb0tnWXJJK29DZlVWc3U0S0VzdnRzQTF1VDZIODI4REJPSW44R29MK2ZqNkNjY2pyVHE4RUR1UXNJUVdMQm5zR1FWUDFNTXpBbXBOK1FoamRRaC9xM3YvcWNqbndWaHhHOHp3LzhRVkpna3hHUFNROEFKdEFoQWJlMDlZZk5ycTliWnRsanA3dTFqM001aURWaXBrOXdHUk5FVVZxNEc5Z2hycWx3Y2RXd3VyVi8zUDJzZnVETTlRRmcvb0ZWVytodlRaMGNvaTZOMGxkVW0wRmhibjh6TUl3K0JsSExHcHEzWFZwd3hZTWQ5d1FBNGJYOUlpeEhzam5ZU2syd1VMOWVTbEtYaFdUaXFWM2wwWENBSjhTbEtWOWFoRmNmbTlUZE1mekp1RUdyeWc5NnpXbDk5OHdpV1E4NW1LZmZxeXE5SGFHYnVzcTZTVzdNWkJuVEFtYThWS1ZNMGliY1lycXBvSHBPb2dmWlA5THE0cFliTnZFdE5SS3VnKzJlS0lEY05LbjJDQ05wWG12bGszR3FZSmVQN21CZkxNZ2FjRzFtU1lCenh2bUJzSm92b0ZGb1Z1Y3J0V0ZnbFJGTllPUzRVM1BNMWJrVElweVJEa1hQcDJwNE4xOXNtUnhIOUJkZ3JBYnpIYU5tRktyZEptNHhuVFdPeGtRVnZDK0U0OHQrZzBFbkd2UWVQSnluYWFBWlk1S2F5dEFlcmJzMWRBTldnQm9PcmVkNVhRZWQrbEFzdW0rV01BZXgrK1EzSUlnd0NxUUxMK3V3cVF4bEFaR3VqYVN2eUI2ZFNldlNEeklRblhnRDBSVk5aZEdlTzhlM0RZVTBsamo2SzNZRTltK1EvVkwxeHUyTGRwWTQ0MFF5V281N3Z6REwyS2VkdlRPLzBPT29zWENHcVh6QnRDaUNhQVpZc0Z1cStMSDJuL3pnd0FIMjdXWmt2ZXFyWEVaRnhuZDA1dUI4V3JFdk1KTEJwbkdiVC96MTJSRlJnTG5sd3lXczhpaVNsNm1oTE9zQ1JKS25QU2JIVDhJTU84WmN1b1JvQXNRVGxCaWlzOFVQZFZ3Rm9JYUxZV09idC9sQkxaeW5SRWo3cEhvSllWNldTMktacVFKSnRFL3BsYTB4L3czUnhJQyt1YVRUVkl5YjhacnlvOVZMMEtiR3NvNzc2cVlINWVvMmpUWi9tQWdHVW1TUTJQMjFiZjNoQzZTVXk4VytpTlpwZ0VFajN1dFJKVUNKWXRPcXBjY25MVzhPWEdzWm04MWVOS2owMzdOTjVhNTlvYm1iUzN5RUFhS0VlRFhPbis1Vkxwek1adjJ1L214WEhoQ3hXZVRmY2ZtOVJDRlhrVWR6Wm92NXJ1OUtlMWFCR2pnNkVuZzd3ajI3NnBaQkZJOXAvZXpoZkNicXMxNm82RWRYekRrdGhhN29TdlRtZXhobldJbktjYmNKTUs5T2tZeWptS3dPM0l6enVkM0I0WHh3T0Z5eHlSbFhHS1hiVU9La0liZXdEYU8yWEliUnNVaU12OGJ3MEcwL3M2ZGRpai9rbmVzS0lHblJEdExRWit6a0lQZU1ubysxUnV0U2o2aXVSOHQwTEtwN0hMTERaNXU3U2Yrb09UVmFJVGJ3bjEwYU1ueWtJU3JPWnVWZkc4dEVCRTNHaHpoSGtsWXNMcDR1QUpTY1Bsc1oycTYrM2c2Y2FOTFBwK0dIVlpqUWNZU04zSkZlVkphTFlHTlNRTWNydmpidnZYOEZ6TDU5cDNWdXF1cHZwdC82V3JwWmNBWHcrNjNnbEY2Yi9NQjc3ZjFhMUJ4TFdCb1lYRXhHckZOdU1SdWFxRU9QbGhYcTJWTWRzWU41Tk9tS0kvTEVYYmxLM2FIazU1L1poN1M0Z2ZWYkxFWDBnckpzMkE4aEhaZVFhTWFlY0JibGFKRENiT0lUVll3cXppRkNuNTlXeDQzU2g2ZmtGcDJLMC8xMG4rSHI0SUNiMk82ejVoRTgzV3ZhaEl6RWdVNnB1OFF0c2Nwc0FsMzYzTG0zemIwOUdJaFhHd1lySnpnUUtrWWVJT0FlbHpCdFU2bUtPMHVRTEg3TENxNFEwOCtZNWVsdzBadWljbUUxTTVLQ3g2dzBDQVRwR1ZFZVg4dE8vRHVvOFJBVTZOY1F2M1dacUhNa1gwWTJVOHZvL2JJdjVqYmJDK2QwbXh3RnlmTlZIMWdSdTl5Y3hLZjgxNXBEcUd1WWs0RmQyTTd2RmtDNU5XN09ydHM1UUhsMmdab1hqYUFOOUlJMTBESW5vUDdqcE03T2tjNElGditMeEVwNVZRZDMrTXhGWXRSekI0eitVWWhTMzdia3lJVXUxVjh4Zlp3SWxFSTFCT3dTTzZiWHhZRjlYUlpnbFhTV0dUUTNvelFtNmRaaWZlUWJjRnd0MlhER3VXbUQ5RlRvbmttQ1NIeXBaOFRaNlVIK1JHNm5FQ0VaNVRBU2ZhUUNCblBhZmcwWk40bzFNdllROUpva2UySDloWnR3TXRhNS9Zb21EQUxZZ3hEOFhFeDRZSlIwRy91bWN3VFUydXVvZ3JxdkkrbDB3K1JPTk9UZWlzUnZNZTFnWVRWKzRtSkNhdzdsN2NtV3VVRFAxaFpEcmdEdmM2SW5vaFdjVUQrWmE3c01WVVJLVVUyclBEckwyazVSbHIrb09PMndKN092TUt3cVNsRkVOYmxaeEdiMGJEWDFVRTBEV1RzeWdGTGtyd0hOQjQ4MHpXanJYVVQvcWMwTnd4M0tIOWlldldwODFXcFNPWE5SdjJTODN4aC9XMFVOd3hzcHl1aEZuZXZEZ3pXb3UyelpmRkNCOGd4cDlwdmE2RkVtd2VReENwcXVYV0tmNXVIbXBhUzRpa0lKQjA1bERVUmQ0c0RNMTBDQ2NrUVRKM1gxNzVLeFE1RXFDQVBvZFYrOHpaaXVUQ1YvNk5mR3F5ZWZqZkhqeW1RWGszUkdvelZ5L3REeXJpa2V5cFhoS0tDOG94eVBGRDVLUnB3Sm1oTTNVUktVY1Q2R3YwK0lpKzZKY2tOblJMRWo5QlQ5c3J4VnpFSDZyNTcxQkd6UENTWC80M3JYQ3Fldk5JM2NiL2UySkFDRW9SVDFibVdsWlJyL2hXdHNmZXZzVFdFTG5nNnVKTzRETk1OcitlRzJIR1lOM1g1dURwSEdjb3FUcXlZbWtMZ3dObTRtakkzKzFYZW94dHdJak9XSGdxZ1ArNnRXeEJ2N1krREVxcWRTalJqVXBrT0FjcG8zNTRBVFZmRjlFVjBDRUUrbUQ5dS9Bb0RtcGQwMzhOVm9xQ25sMEpjVmJjMHRrZ0h5OE0yZzFpNDdFMTBpQ1VhWnE3S2QzMU5xcXNqaUFwc25weEkzUGU5cEtUNVJGMHMxV1pkb0hsWlFTcHZ2NEJQdnAvdXo2bnVLNms3TTNTU2gyMUJZNUkvOGdMRCtDRFFCMFhUYlBTMmFnNElnTE55eXpac0NXY1VjbC9aMmFyRGV0N0ZFTXlIQWprd25WSFdySmVLd0hTQU5kQjY0L2x4VGJQS24vQWg1Zm9ZaFgvRkhZemo4L1VJV0pBR3FBOTRReWsxbVVuNmdZelN0UkJKd0RKS2E0dnhTZVZ0U2grUkdPdVJseGUrZ256MlpTRGU4VWc1TmdOckI4c3lSS0dCQndYclJJNERxLzg5T1ROTkhGVkVqYzdZZ2U1VlFnTmJ6ZnJ6TU14dFRUcVV4dHlsaFNyTjdWbXg2TVk0YmVVcEtzVlQwRitIZzgwelkvRUpjalVrWldFSm4zOGczd21lcVVlZm9UT05Da1FPYklsUGlPTjhFVlJUWHJ5VGdPZzg5NTI5N0w4WlQyaHJzZjI5N0R1TXBweng1T2YzSzVOR2FyUlNYa0FNR3NnOWY1NlhYN0NlcjFpbzUzY0g3Rll0OHpsSlJmUEQ0M3FQNzZpNmcwRnJUWGlqUjZRMnY0ZjZoV0RoYXFsRGZjQW9hZzdkeEIvTzVtYm1xUWlCVmRXUFdaUSt5SHZ0aVVzYkplZm96cUJLN1BsNTBvZWRxUndlS2dqYVBRUmh5ZmRJakpRZlVPcENuL1BGT21TVlF5dE5YYXFGS0FFUlVnZ2FjQm5GSnR4YUxiUzFIdlY4RG04U3lzRGNwVnIwaTF3UklLeVFKUTlpVHZHYThRR0R6eGQ5N3JlZk93UDc1bjYrdXNuMDNEYXpDaHBzU0VHKzZRQjRRUGpqZ3pHL2NQeFB3ZUgwMVA1bDZ0OFkxc0xBSGhVTTM5dzhMWm53ZTNCQWlmdmFXSXdIVTlEY0tSRkN5SmdzeEFTTTVvMWY5M3FzN1Q1RUVDMkV2ckdZdk9jbWEvQjF4czZFSEQxM3VlbTgyRW9UT0h4L0hrcW1LdjlCSUxyZXByRHVoUlY1VjIwWGJiK1dRaStsMllVdk1kb2RTRzV6bUNoRGNtTWtGY29mNXZlUVZJZXVyaTE1OTYzTkxkS0M0Q29hMUNWWUo5MmVjNkVXUTd5VlVNblhKaWwvS0o0a3NySU1WZWh4ci9mM2lKMC9DMkpvTXQ2aWJRanQvVVRvWWJSTXNtd0QwMDk1VnB4eWV5QmVDM1NabkhGelZZbWZWaGFkanVvZ1FEOUJ2cUZTY21tVlJIYkI4QytTK3UzTngzZmVUMXhPWDF3NXZuVVJHT1kvVEo4QXd4RHVTS1hXZVJkdThxRzNjRWVTWDhOU1RTTU96NGhNSFlCcWxRb3c3N2hTL0gwdHgwNGF0VmdmZkFKK05QeHBVa25jZWh3SnAxcTBLaytXQmwxak53eG8vTDBHOThqRVgyTlNnZE9WWEZlNWVxNDNjbUx0bmZRY3gzV2JKRTJZNjdra2xxWG9PZEhlKzBoU3BWRmFIdC8zOXRxUXRLZDVVN2Ztb0ZKNEhEQzNZUEJNbGhhdnliVnVwMURQUW1pdnV6b3RUSis3VklGOWNIK2ZMN2tTVDRTVXdtWnZ2emxkL1o4a3RDdmFQOE9odDNuWkt2UGgwZXYwbkxwd1RsZkRaOFRONEcrMjdrNlNtRk9Fb0lCVE45TUJDSU1hQm1EV3VqM1NIMmtLa0R0ZGVZeS9mb0NOWXZSNmNaL0hGWHU2cFZZVTJYbnpVVC9xbmlMdFVOTW5hWXM1eXp1cVYzbHFkME9mWXNlZC9jYklKOTlNKytRWi9zZjV2eHZ6TXVaQVp3cjJxT0FwWnlnR1lmaXBJdWg2OWFRSlFFTUJnVjFHdFpFUFd4c3pzaU1ESXVlaVNCUXhjTkJrUGlaRkovbzhVSStuem9uY0F2MzJpNEIxT09xaGFmMXhoZlh2Szg4R1c4aUt6VkZlRzIrdzNIb2FwNzcwMHRCM3E3TkdZSll5VGVjQjg1bnlvRzRkblFDSThNZThEZ1hIMVhZTDN2cnUxQXZsSHlwamtYV1ZJZXFkMzRlTHVRUFZIa3lUQjRobldrNy8zalhXbjQ1ZlloRGVuREdzeXc4VmhhSVlDZGlTRWdJVU4rclI0cWtzbjVZMTNFZkFzbExvaGFLZWFHbFA4Y0YrWUU5NjZDVGZ1QmFDenJCZ0NtWnNuWEdlYmpNVVdwSmd3UCtVV2w0OXFhNFNJN3dvQTlyNVhvZWFaTC9GMTU3MHNkaUxNUFdGQnVWSEJONUt0Zzd2emRwZDFPS3ZrQmY2N0tIQlphVFpmcTRZbXZ3SU9KeExaM2FzcktaeUxiSU1OZnA4TkIwOEdHQ2xmaE9yOXF6RnMzQ3dLZ2QxSGY0cmVEVExZRzFvUkVpc29tQ3lnV2k4TzgwY0NvSEI0VUdFNjcyTnpscjFlbGxUd3kxT3N5WFRGR0xwZjN0OTd1bzBDMmgrbkNudWoxaUJJVXhtVnZYNFlsNVFWUXlqR2ErdmZwbk9wTzJsd0ZuaHhhUVh5SUVqaDNvUE8zOWQ1bGJEMmQweHRlWWV6VzI5R29QcGtFMmJnemR3MzRzTHhNTXdUUjEvVitvb3Q0djhhNVN2OCtPRXZ2K2hxUWQ1OXBvYzB2L3puR09xN053MDc2bGwxZDNKT0hadGVmdlVBQlZmVDJidzMwenhBUzltYURGSHNuZVlxd2lKeXJoZ0NwK0NoK0g3SDVWcGcrUDB4Q1FkVExEczdlakU1OHFFN1d6VldoT3UxZFlNNjdxbi90b29haWtLWTBSTW9HY0hhemhibUNldThBbEJUQm93QkxZWHVITDFna24ybzBCeXdKNnl0dFNsamRDcFNJbS9ZZWhaL01ZVmdTekFOdzI0MWFoYzB0QXpYU01BUHlhRkFSMUxLamRuc28zdE9QcFh1SVl0UmR1WGFOejh3VjhRS2N6ampQTlhYRHcxYnlpT1pYc3haS2pPZWdTQkkvLzN0cVZKalZsWDF1b2FhYzZzNzN2NU5PanVPblBGK2dZRk1VS1FWOXBaWnpnT2F1b3VrQVd0ckRMaXBsWUhINytEK3N4K2V1ejNpRFR3RGFMZUFzZ0R3SkdMZ1ZMNENETFo1eENZYTdySVUySEF2bytTRHMvaEVVUTQ4YXBuQll6bHVjMkI3SzZETHVWNEpnYTN6dDRmMFFsTjBLaE4vQ3FHNEhlOXYyY2duVmwyc3NwWHpFMTF6aVBsOFpqbmNvWXlzMzRiQ016SFB2Y0FzTm5jSEtuVFlOSlBPaW9TcHZLNkhxWFV4NGVQVUsxQmErZ3QzRnZoK00wV0lHaEhZdWt1SHo3cFFsaDV1RTJidUE4SkcyM2Q5eGZENzRxS3FVS01sOUZCK0c4SjJRT1lxLzJYR0NPd01RbFd2NXBaa1RDTThwWUs0TTFxZldwYXhRTjZYQzlVdTFEUDRMcU0zaDNnRzJob2VZYThlUitQM3RiMERTd1lKcXF6ZzBZM2VqUi9qU3N0azVaWFhyMFdPTWNySE8rRElBUllMUE45ckU3Q0F3Q1FtaFlCYlJwZzBwaFU5bnpuYU81Qld5enZpUmdkRnZWazJNWWxrQVhwb2EzbFRoL1lZVkRSU1J0b2hMWnVBbUpCMmlMOEsvZkhEMCtpeHFNbTBpNVhRdGNLbEorUFNkZDBkQUtVcFhlM3o4L3pYcDZrZnJQWkpHS3grMnZ0b2x5MFljb05mQ3k2ZEJteFVTcElxL3BTS2FVQklQVjB0bFE1RkVJb3ZMMUhER1NKc21NNTRodGtudDdpZnBiamJjUTV3U1ZPaU4raS9FaTlLbmRvSER4NGxYcjZDbUc2Skord1NhTDM2SlFBc3V4Wnk4SDlXZUdVb2U4Y245UVp5YWMxdlRMcktEMGtaZG5pdFRxd1dzdmU0MXFaMnpwT0xFd3FNMEFJU2NXQzhZeWdyT3dSYkJlOGFGQ0ZhS21RZmRvcWJuVHQ0cVpoeTFOczRxUEtLV1FrVDNjRHA2bDZQWmg4SlRmV2p4ZkVTYnFQMW5zMlAyQmlOT1B4OUd2VVRvSXM0ek9VYUVRR2xDa2o0TWZiVmxESk4xMXQvTjZXeUttMzFTVjhJUkV3TlRtZVBjQXphUTBJUml2Y21ycUxiR29XajdTbDNoWnJ1NytmYXBwaWpyV3Y2aGlXNFlaVTB6ZFBoTlpvbVplNSt5bmEvMGVQdXNYdkIrLzA1bXhSaEJWR0tMZWVzbk9hVGxMd1Z5ZmlHYnBlU2dzQnAwRHNWMmw4TTVxS2tsUHo4RzNDNGRRK0UxV201WkNVUVA1RldDblNNQmFaeUQzRUwzc0p6eGx1L3BGVVpYSHVPck00azhzMUhCeHo5eXVKR1I0M2J5ODZTNzBoNnpKMi9oNUVjTVAwcjgrM2srdWJnU0NUcDM4cmpCSGozdHA2K056UjVERFVlMjVOVEFiQXRzaGZBeGpHRDlFTHkyV1VJMFEvVTl4S2VxbGFXZXd1L29XNnhhR3JlVzNDUGJkYjc3RUhKTzBrcnJKeGJlRzVBTnpGa2NWVGR4bzhOZTVNMjI3UGF4c2xBRlJ4eDZVVk1CdHhvbURmVldmNUpqWTlwRnVTd3FPVlBWdlNwbWVNcGYwYVFGNlRDSWdUanBUVlNLZVU2TWxKU1NlTkNhYTNYeWVMZE1rMzZjVTNvS3dERG9GWVdWMzNlTlQzMGNMa3FTQmZCZFArT1JZWXdBKzVvcnlvbWZsbzNjY0FqdXltRXU3a1JPMk5LWThZWnlHZXR5YTFPSkJlVUhIeTRHaFZ4Q2d1eTczZFp3UDVkR29lTzB6UUZCT0QwNGlFR1JmNisxdFo2RDJWUVc0cXl0M3ViRllNeGEyNytnNVhvWi9wa2hUNU13NWR4aTVpMmxRNlhydFRmRmd1blVvVitnMmovNXdDa1JyY3VzSkNXbGcxUHhMMDVsTGNGNU93OEhEL0JZU2xoNlVESkpPSjk0M0NOUlR4MjBWaHdiQVlydkJhbEg4UW12WmphOUh2a1M3cUsrU1JWK3NiNVF1L05TdTB3RldjM2pTblFTK29iQXlJTkc4SGd2TnhuWTFjSCtSekl4ZlFrbXhzMkVaN0cwNVBOc2dsVUJuWXBUMkZYL1U4bzdvRE1vSUVzdVBIenBVRituRmt0aGdmNUw4bVo5QUlHT3o1MkRNbmpmK2lQQ3FZY1RYQ0xOWTM2VmtYRHFCMWR2aW51cnFTZEJzbjlobWJxdzNIa0hQMU54MGhqTnpyMWYwSmYzcUVDRUgzMWxDdGlsNjJRSHl6WTFMTnJjTW5GbFZ0RTZsa3NnblhUL1pYMzAxZlBFVHRrbzBOd1YxU3hpV2hpL0liRVNSRTRIWWJDbTh6VStuNzlqb2loa3BGekFwTktrYjdtaWMvb3htM1MyZ05GYm1XclhsU1FoL0o3NTFGbEUwWDk5SW1mSUlsSjFrUjZPa202dkZOaDllRkJZL2g2WmJZYkovZWlXdGJmbTdJU295MzdCTWhua0tRL3B3WmNNaHdxTGIyTTV5WWtKZnNvaCtnU0pmMlNkUjhGMGpxSTVyK0ZaQWlCVG5CdHZTMFFhY1dkK0o4cmZzYVUrdlNESUNIbS9xVk5RSi9BRWVHNnUxYnQ3WEYzemoyRk5hQ1p3dUR2MDVLYTJkUTJ1b1FCUndXb2dmZ0hFdkQyU0I1aWdYL1NlQmV4cW5YUnR0SGNudVpYNElHYTFrS0EzZGpDM0NTcVJDYjExbkpLWjRRRERSQzd5OGRWeUViU2FRTmVQWUlYV01JR2Z5STZxUFIxOWF2dXlRSno4ZGdhd2h6WFpwdU1VVU1RdDlQNTZkWU5RaVhQMG9TZHQyN2ZTWThpcHBJTzB0VURGWmtLK3FGdk0zcWgyTGpnb3R6T0daYUp3Tkc4V2E2a1luZkUzL3NaTis5YlNRMUVwRzc5cVVUQ24rc2J6RXNsUngrYWFaWkhiZ0x5NU5RUDl0UTJtNHFaZnZmZ05xaDJ4Ykc1Z01QdlVZQUtCaWZ5SXE2OGhHeVVYU3RQblA5Slo5UWNFTlJTU3l1cFJrOW5RZnBKdWdZbXB2bTU1MVFVbTRXWjh1bDRKRWtkRjVDU3g4RGY1eU43RjBLSkl0alJxRXdOd0F6enhrRlE3cEVHY3VXTjB2Vzc4MUdTbERYK2E2NSt4YnJGdTU5Nm9jOUxzRCtDYWJFVEI1SkNNVjdLcklBZHprcGFOYU96QzJhODU3WFRwZys4OEhWYjZpNStxb1dTR2dOZFM5RlVRcjRRTysyU2JHTlpERDcxVHpvR0o1NlZ4emN2UGJOUWRBSDRmUVBHbkUzMUE5QWxjNWk3TStwTHVJUDNyVkJ1Z2lMRnNMNHlKMkJzQVZ3ZHE4aGVEMVl5T1NmYVB2alpCRThOb0luc2JPa0Q3WUJDWXhhZEJkS0NicFpSaEZYK3dpUjhQNlhHSTZQdjdTWWpxMSt3U1p5SlQ0QzdDNzN1eHl1WEVrNW54VllUM0IrdUxQQmFoOFpFS1h1NVFvdVc2bGd0a2NhTC9Ockh2c0c3T3JaYWZYTEdSeE9YWE9jRDYwTkFQczdKeUc1R0VTRXFJYUU4YjduNjJmU0lxWEVEVnJTUVVRUTJqejZkb2xsbDMzZlhvaHRlNDBrTktIaFF3VnZnWkQwUGU5YVJmV2VzOENnWmVLbFZPbndBMWh3WFRxZllRbGR3Qmd6UFV0S3J6RmhIMzAyeUFQQkdVeVdWdndzWVNYU2l6RHZEVzZybjBJdGIydHVOZnl4WWMvZXE2THdEbVVYWkY0UkJhRU92YWVUYmpuNUh6bFhqTUcwNnIzckNEUkRFbzA4aWwxNVpuS2g4TXFBVVVjUWZQL1lQOUpBNTQ3Y3BaeS82UjNsRC9NOG96UjdMdnRYelZjdm1rbHhHNXVteWYwS1JibzlOc0VrdmNwaHE5U1FMcFBaam5oUFRrbGlZQUdjcmk1cDQya2M3b0lrbGc2YVNoQXQ2bUNSeG5XNm5aS1hIV2F0WWFQdklnYmFDUHhGV0RvcnlGZWNvbndQRFVkRFkxbXdKRGl0MUNHeEJnL3lIa25maXQrYWlCMjVpZlA1UXdpSkpVelVJL2hLNEJYSnRRN3FSUVdhRVh2WmFhREVXQU1hQ2xIS1p0Zm55SkFuaWk0NkR4UHlqZFhHZmg0WHVQblRVMGw0QWF2dDk1Tm1OZmVVeXZseXNiVm9hY2VFNnlSL1RZWDUycStDczFqTDlKaDNiNXhwMkt3OHppVUZQVlpOVXkwMEZtalY1ZFpudkU5RVkwL0UrbGhUMGp4Y3FPb3BLL2g5bUxhTWFGOGsxbWM2dkE0dnQwS0YxRUNVcE1jdTZyZGdrMi9SdFl1VjJvblZuWlg1TG1Ha3o1ZzRYeUR2dm05UW9iMFRhMFNzdWo3bERrWEFSdmg5NzN5eFFRTEJ6eVVZKzBML3RON3NucWt6MXF0TUZROThpRlJzUlc0QStyNndidTZjSFJlUWNlVTZxZTRySFRQbG5HaEg1blBkWWpraUFERVl6a0xReWhCN2hxK2dCTHFYODV4SkxFWHA3Vlh3RmdhNmNNa0E2cEphRUduOG1FOWVIYmRNYWg4YXVWenJsUXVzdnZEcHpTVHpQV1BwYk1CamNuYXczTTY3OUNVcGd0RUo3REFOYkVPNFV3RkM3RmZrb3FiUzh2U1ZiWGJVaUJja056R2JLQnZJWlRxelVsdEp3cXo0RGhVZ0l6RTYyYzlGNTlsNU9mT2ZmWlNqdU1mdVRnQWxwRnYybEFiZ1cyLzFyendrSldkL2lZbUQrU0VuOGVnT1BITmtIYnlmNDRWQ20yZ29sTmo2blRXWVB1ZDZZTWlteml0akNrUW55L3FXNlNiTnVCaSs5cW96dlpCZW9ES2I3SlNEN2dTaHpaaWxwTlhvOVgrSm4xZHFqVlBpYXZvM0lnaGNTaTU1dXQ3YWlraDZncUFkSk5OUXdCRXV5WDFIaWZSczVralRzL2h6WGpLN1p3ZDZubmVBUjFtNFpJWlA3andNQ1NIQVpTU3QwamxQSGE1Vy9URS9BSVFMTWlZcUppSHpjam1NTlRoWkxqSDVlaTFxNzVBaTZPYVpWQ0N1OUlBanFRWW1xS2ExL2FxdjhvZzRmS2k3ZVBKZW1UWGRyc29WQStFa2o0VktjNGFiMko2dzZJMkZxWWo3VW0rek9BQWE3NW1zbnRwN3JzTnhLZDVuUmhMZ29ORFdFcm9lWi9SQWhiWjFieDZqUTRoU2tPTXU2dVd1b3pGYnRaanU3cTNTVmM3U0NTWE9YelkvRGpISUxTNm9ydFhqU0ZsZnVnSWJBM3RqWEJ0cklsb0czdUNDVGUva2hiUGRJbWl2MEdXN2VxdGF4Y2Q1cTR6dWdhS2l3TmJnaW4wVFViU0huR2tBNHJ3UG1PRWMySGxmMlNQaHY0SUJNaVZaOWg3bVNqclUyOHc0aFVtOUJiMktjbnVIUlNGdEthek1TVGN3RmtTVEZ3ekVJRG5iSWJBSWlCR3VNclQ1TmJDREhGUWRDVVI0WlFLQW11eHN3eHBXY1NJdW5seS9rTUJPL0lON3JrUnR4STJXaTlVWW1kdEcwczAvU2VXbHRpT1pOUnpROXFZa2gxQndIWnlVY1BHZmpwbUhyYTRyU2JvM0JSdlFKTjFIRFRXN0I1YjcxdnpMbDN3N2gyN3NTQ0lMdG56K3JZUTFUeDVHeEtLYVBBd291Wm5Pd3NDVTduQU5LL2gxR0FrUnR6Um9SVWFUSzhmcUxMWjhYa0lMaHBmVm1WMitJRXhPN0xDaDN5ZzdrMXhqQzNaTUJudjRVZTg5UDRoclYrNjVNY1BwVXFGc0FVdTY3K082SXdkcjlaYnVtRENOaFRvWFZMelBMRCtCb0tud1V0SkQ1b1ZOUjc0QXpxU0I2M0tCWkZHcHgzYVUwM0JpN1lYblpxdEhkMU1QUTNMd0w0RmptWkJhYTlNdWI3ZWZyeTZWMWdLK0tHTVkyNG9pd2JDbTNqdlV6SzJIV0FwUHo5ME5od05qRW04MTNRRW5UdkIrNm9kWHFrdkR5dGNDWEpMb1l6TnBTaHBveXl2clJ6RW01aThheU55SUJqVk52UnFvTWd2ZlAvVzB4eGFKbVJ0NEh3Ukl2ZkJTbHFtd2NzUWQxRkl6Njd2SVVrOTFvWXVCeWlXNUMxUW9KQ0VhNTNyc3J2NG5FR2txb3BHVGIydnBVQXZxY0VVZVRsdDVPQTJwalhxQ3F6c05aWXFEVnNQSmJEci80eEx5d0k4cHo5aG54M3gvTHBsRVZsUW10NzNHYVpianowWks3dHNaL2F0T1ZTWTFzUE53TkZzc1N4eXJnQjRJOUk4K1J0TVRNTWxCNUNHN2lZUndNa0ZVK210anM5UDZrdmgrckdCeCtUd3NoMHRUWlVVRjFUNjRoSXdqRC9BcU5aRzZkL09QbUcxc1V4K25JRXR0V09JSklXbTBZMVl4N0pqVWZqRkp0K01SZ2xNc3VIWk5kenN6ZzhaU3QvYkI2RzVyUFhHN3QvNHE3ZUFPaEYyNzhKNHpGc2ZMTGFKSkFicGprMFpNaHBySzZoVHhwR1Jqb3h2U1o4c05USW12bkwvQXNOSU8yaURkdmVYTXFUTi90UmIzb2c2VG1zb05HWFZuZUk5d09wUmErRUtwVFBWMkh4YUoyV2RNMCtaTjlRZDA0SUNoQ3N6ZEZFSitWN0hkLzRQalRWQ1pwVHhBSFhsUUtvSXU1bXFhYjRKRmZ2UHZWV1RjN2J3a2lEVHhRcVNTazhZQzN4Zmt6Q3lOMU4walpwVW5oV0FaY1pxSE9qOEFHd2Ezcmo0SG1hbk9xTmlvY29CTEMxRGZNRmxTWTBRVkZHZEx6Z0pCYmNra3hadXY1TE1VZkpJRlBXSURhZTBsdDJYZDBFMzZiMy93ZEh2NzdpZnJOekhVUjVuQ0pRM2k4UExTMWNaNTRVbDhqa2RoKzlLRkxFekZkRkRHZFl3QWFCelBnY0NCeFprSVRMTjAya0JUL280Tk9NMnhSMU5lREFNeFNOWDlVMHUyYVNwZVY1TTdIK01YZU9ocXZaYjhQQ0NVbUI4d2krZXZLQ2poOTNUUGRDSlQ1NXRjNVlTOVZmUXVqbGVaQTV6U3IwUzNUS3BkSEo5VEhybVBqdXZXUVZNUzY4OWlMNDVVSUJxTmdsb3FnT1pRN2MzUlN4VHVuV1FpNm52RHA4YUwwSktndjhBNkdqVUdKUDdoYWhKeGp2dHRPQ3ZZN0oxdUlId2txTTBwbkVVYU84bTd2VVorWDg2Y21sM3hHa25jZzVxSVhXc1VPMUI2YlhKQmplRVJ6RWR3N1c0aW81bnRvbmVWbVVodThVdW5xR3J5a0tHdnpHcW5qVkUvOVczRHNGM2RHMzBKbHVqYkgvWDRBTGE1WGZrVy9OT2xoNzBRSlhvQWllb3RRL2xvZmo2dkF0S0RUMFV3UXMycko4MXJrNmo0bTFGSDdUMm92ZmhFb0t3NU9paGlNMncxTk9MTE1URWduWjlyVkRTZnc4NU52RHluQjlQTHR2eFp3UUNPbTk0dnl3QmVzVThzaUpSTlBHazcxNzE0cDBla1FvT3FoU0tndnlxMmI2cUJzS2w3c2R5V2Vyb3RjQUxUWmI4T3I5a2FVOUNFbUszRmJnZElldU5CbHdEa1QvWWNHVUFvcW8zUjR6YVEveEJ2Wk9xNmR1M01wMGttZXpRNkY1QlErUHBGOEgzcVFZTE5oTVVzY21BTkNpbHJhaTZlcGRvMmY1MWpDOG96dDNGUnB4YkVKUmg4dzltZjNRWmxIczF1RGJnS0ZtYU12SS9LSE5HTGNiQUpvZndvS0Z2THFNbjArMm1CbUJrdHBWczdOTW5Lck1ldGtHU2h1TkQzMWdwOXN5THBiRmM5RVE0N0dpek1tcGdCTUlZdUZkR2ZOWXZ6M2wyQ0Z2cmN4Ync3UGtDNlg0L3hKa0dKUjZ6WnNBb0k1QkprdTFMSGFnY0s1bUMyVUwveHJzSEhueVJEbTMzbTBvNFJ6T01QbUdSTnRPUjRDQ1RvMmc3YUpuZlRLeERnU0hKcUw3aWp5VExwWGZVL2VEU1V4WEc3V0R2RUtoZjZFUjBJbHZQeE0vMEpTaGtCZFA5L1o3OHRBYnVRb0lMVFd4bFRSQkd1QjRERC9QNUlrKzNpQm56TUl2K0RXdDlzK1pJcXlJQW9nKzRqK1l6SjNwZ1VycFdTQU5aNEhjbHVYMzVhVXJrdFJOMHdsdkwwcm9STTZKYnVsYWJqSmxDMkFndVBQN2FSYlM4bXhNbWxRWmhGMVNsWTd0Nk1UaXVkRXNpYjlxN2VBZFR2cnFQNGhsTVp1WVhDSUhPamlFMnVSZGczd2txVEd1ZGVxbkxGNmxqZ3FYWDNXMGhKZ1U2bUVibjlxejRPZXBZMENham5WUlpzL1A4eFdQZE5hTDc1UXRnSWhRRytJQ0NZcWZxakpEMkp2T2JLekhsQWtjamppVnVEdWxjU1FtejAraTdnRFVtZkxSRXZMUk9wVU5MS2VRazNlajFmbjRBcGxVcjFydlFJOEZ1bWZyMDBOek50Z21zZ09TZ01OV2dlcTJmZmdoRFpHc2xSeWl6K3daUmIxazR0cEVlaTFtb25icVFwaVc3QzQ4bGRMeEJtdkZVSWRUdVVtQk02REJZREhlZ1IrVFp6NG9yb3BpNVZqYWpIUm5LL1hnSDlqM0ZGSCs5WnZIMHJidGZxVVgrYTAxVEtzNW8wT2F3WTlpMFFXL3dKK2V6ZWJVSzZjc2plYWk4OXF0YmU5RGpTY1E1d2IzaWMzL1BET2IrNC9mNThHOXVSQjNsLzMyYjZHSXVTOUZjSVdHQWtkTEVhQ293Q2FPR1psUFZWVVMvbnAvZU5KMnFUOWlydXVVdWpaOTdONHJWYUowRUpnU2lkYktaTGs4bDYzQXV2M0tvZjFHb2pzbFkvUG16c1dGVE55Z2JRNkdvMGplVDFiRUM4bmEwSTRyZnc2cHVGY2ZLSEkxclJKd2RLUEVHa2drbVFrNE44aURoTzFiZHdyYzZTVHkyRTh5MUJ4M2RrVVgrS0xldENyUEkzRlF5bkNjWUdQMEtnUEhydXN4Z3B1djBwam45aWFFK1ZXejRuN1FzRmUyOGhOM2hQR1BSU3REUmp5L3p5eklYclkvd1RjS0hYOXEvbkVTRTBBM0pYUmdyUVdLTzN3bFJHSmVQWXRXRENCS0dlL3BUd0s2R2F1NG44TnRqTU9TSFpIdXBCeWEyVHRQN0pJdUlVUTROY2FCVFJqU0hnRFlGVC9ZK210TXFxclVPZkFhRzd1aElsNU1wVHZNaFkzSWxJYkhmNytPSFVWbjl4cjhtUitmRCs2MnhZdWhHOXM2cHlXUDBSblQ1VXpiY2o0NWp3dUxtb0VSNVQvbktBQ0RDK2FxRnExbGo5SXlpZ2FZbDUxVGlVa0NKb0g2Vk4yTVFzWldWbm5ERnR3RDB0ZDZBK1htQktpOGo2OHBLRDFCd2xCWXRrY3Q4UThqZ3RPWGxFdDVJcUdjdFQwSmEvOHliSi9VMlZYV3pNM1hPS3d1Kzh1N3NJZjlWcVNnSWx4bHNKcFp0N0JsZDFUT3lOT25WYTduOUZYVVpjWXRwSlppcGFJMFNXeFRWMHNiclkwaythMFV3eERzUEJUbWtIMU4xVDJSYklReVBPdlF6aHMwT0xtbHFjdXJEV2pKVUNTWW5TSWdHOXRhRFcvVzI2UnZVK0cxZyt1Q3orWjdtcnRWTUlUYk9LeFVnd0Y4d3laQ2tsdE5sbnAwNWpIT2NNUTA1Ti81UldGSW54ZWZnd3FtbzlYNVB1WUZnbTJwSjQvSjhkTFlwdmkvQU9NUlZvMU54VlZnTWZoS1ppRUpKbVFJVGNXUE1IUHZXOWlaejM5QXFQbmF1cFF0Y3NZMUdqWnhjVjBKb1V0dXZJeDZyNUdBMmw4dWJaQ2gvWHlvdERwUE16cFFNYXpTQlN6NXRmMUxlOWVrTmJEVXhMQnJQOTJqMFRBRXc1VW9HWkFYRGlKbEhYeDJKOFQ2VzZaM1ROaW1tMHdZWXBvM2s1S0JNWm4rZGIwMS94TXZJOUkzY1ZWOVZqVlBmMnQ3alE2SkpVcEhUSFdaRXU1SkRhZ0Y0N096bWl0SFBYYkhJeDAyTnI2Z1RmeC84VWYyR1pPTG1aNVBpOFlBUmlSVkxNTThQb25pa3JYa1JQaW8vM1I1bHkycjAxY1VVVDdVdG1vRXRnRjlKd2pQMWZsaUlPaitENkk1VjlrLzZqeDZBcjVyNStsS3lIdkovMElmSzBiWk9saDNFL2U2d05BaVI4Q1ZpNTFEL3hnR3krS2VLNHhkV1g0dXpjMTJ1dXM0WFgvVVZRVEI2K1MvR2EvWlZ1dzdnUzRucEhuWDE0M1p3NTM3OFhRUm0zNTNhbTRVdldFcHRTMDZPVTBnZDFEWUFTaWFEWWsxbTMwWjdIZStPWEZKcjMxUDVFeXQwaVBkd2UxaHY0bkl2WFF6NnhZN1c0dndudE9PMkZkMUIzbTU0UFh5Nk1WWVVjVjdhSHZERm1laU5uRGgrekhxanZCK3Nza24wa0ZTNlFrZkVSSVFxQ2RyWW5QUUZudjZHamdSTjlnM2hLZ1YzeW9nL3pJei93ZjRsWjhZUUxCWUZpdEh0YU1RMmZRQ044cDhFdUgyeURpK21ZWjlJVnc1cTdjL1lHd0N4SHp1Q1RUKzJrSUVLMUdvbTNWNWZMbmdqUDJqNmk4bnYxemNHZk5rTUdPYmErcmQvRDlMZ29NK0NFVGZXMmhHbkZFS3daKzZPL3B5alBrWU5Teko0QlQ1V1MrTTYyTjE0a0lybGs4b1oxTWprTE9LVWRuc1kzT01VcDRjVy9Ua2c5Q0E2QVlObUZaWmsvb2xXS093OFRDbDU0NHZFeVlOQTNweHRRcU44WUxjL3Y0T0NrdStlNUc1a3JGdFFtSDJQWkFpN2NnTkhNZUhGK2t4bnlMQ1VMTWR1NXNwajV4cmw3c1BocElzODRLZ1VzYmdaTk9HSVd0WHdMUVNxaTc2Z0NBKzBEdHpSeTBBakpEREV4MUxhdE83OEtlSEtvZGVOWU1ScU5HcmlOL0tKMjJ4cFEyQ2g5ZFBnbklKb3VSMEh4a1ZFa2l3UVFrTXk0OThJb09LNEwzOXdKaWRVNkhlWnhVRi9xN04yNFlvaFZNS0dTRnZzajArYURIK3JSMjdUc3ZKcjZwK3JvczJCZmFjdmN3em1vajk4bHY1d3hRWTJEOTZVaTVaYVdmcHR2NmxNRi9vZGpYNTdCeUV5UmRBbU9tMHFyaHZuWEtyMnFPWlc0Z2p5QnZLeWN2ODluT0FJdGZSUGpBVXVFODdlc2JqNUZZL0t4b1JDVmRzUnk2YkpVRFZjbVJMZ3VMd2pmd0JzVnNodEN0T3NHUnpmeDk4a2lRbFhQSWFsTWVWVWx1cE1IQ09yWXd4M25WTDBwRUtHTldJMDAzMlZLN0hrWWdDR0ZUNzhtdTY3RUlDdFdHaDdPajlVM0RuSGY4Q0kwd3ZVVzJaVi9hbFQ5VWlzaXpQSjVsWlR4Y3ROSTJBZ0hkSUljYURBUHJ3ZzgzeVBNeENxbldseUk5ZTlKdms0Y0prWHNSUzRpOVFxbjE1T2Vja0ltbTZ5c2h4S29jUXBwNk43QjgyZWtNczh5NVdZeFhBQk50SzBqNW1RTXhnR3VTNWlnckx5T0IrWStXZjg5RlBHSG9kYkRQVUJjbVRtUEZySWNMRUZuY2Fmb0NtWnVZRGdtajV1Umo5NU45c3hvYldWUmRDSVFtR1BDUEVoUk9hTitzY1ZmcldrbXV3OUEvamF3Y0VWd1NzbXhNdzNiQlV6SGowOFhUdGNZcno3dHc0QWRRYXkxNW5CVG5ueXJNWlVVSVpERjhsMHo0dGk5WktvdnRmUG5Pb011M0ZYS0dmTTNYRC8yclJXajRtd3l2NEx4SUVKd2NNN0luOFJKNjN0dVhqSDZ1S1p3OFNhY3NPUUlCRHRRQ1FPblh1QzR3a1MvNk1ZK1BTTzdzd25NUHhZbWltN2pHcHJxZHBJY1NETmhTOFdpcEM2enUrRHRCbzBHdGhJMkRRKzIrdzlqSmp3Z1hDUmdCc2hCRWZ0OXNadTVEWFBSUXFLZFlMUklmMklXRkhxbFh2dVRuVWlFTjNoVmRpUEljN3hYN1p4K1lXdjhiN0svOUZqYkljRDJpTERqWkZhbnd4UUkzYlVuYzY3R0ZlYk5SUnRwUUh0dnRIWEhkaXRLVm83RmtWSzlmVWNwMEZKaExjMkVPNDIzOS9ndmFYVFN4YVE3M1F5SHlzTzlhSUNuSkZmRTVodTFZeStBblpXTGlGbEJYODBldWZBU3RLaE96RGNEQWMva1JPM1c4OWZobnhmbFB6eGtzbUxOejYzMGNMNTJzc0d2Wko4QVlmdXJFU0J2SktpMWJXM010bVROUnIvdFJwcktnUmREU3ZQS1BJV29FMFBqa3NWTE9paFl5Wkc1VkZ2dUhDeDNJck80LzYzTWdJY2hIUXBPVTE3cXVWVXVLY3FteHJ5WGFCUTRFMS9JUWVma0ZqbTBpdjJwcnZJVGpwZ1ZGS1NrTzUvVE5qbGZvMjVQZzh3T0FvanRpZm9PMnBPaWkxRFd2dm5UeVBCeXV0bmRSeTZiSzFxRUJCV3U0M0FFTHE0dE5KaHhrc3k2R3ZPbmNkTDN1aWtYMW93aTZsUWxGMWZLYzRsWmJUOGlXcHN4aDRiWGk2Q2dzcUk4eEFWa2NuZmtrMlREQVZDS3ZTZng3M252QWFOZE93RXFDd0xzYUhaMTM2VVh2N2JZV2U0OGtRcjExRGc3VUlvc1lCNGNIb1djMUREanlqWE9uckxRZk9pM1hFSmZpUDl6cTFDQ2d2ajNiMEpLcWRoMmxmZS8yWFVYbGNMNEJKQ1FLTTRjWkhPV1AyK2tjanFVU2lTWEIwT05nRU13QjVTbHdGUlBhR0lPUjZHdkFyQkpjWDZYOTFTODFBcmhrQWhtZFpNU1B4NnJhdVVrVEozVHBvemw0MEpMWE81R2tOY1E1YTZQWVBiYnBuRTV4bXFBVHAyeTlhQ3hKQnZ1cWJneEc2UU9RZHptNERIZ3c4clhpVENVMHVBWUh5bmhndkhIZkMveWdvTHRtSVYyNTBKalcvQUMzTFJiakErU3lZRU9RK1lJcXNKYmtmYWpqbHlzNlh1bDFLYXJJcHJlZGdVOFZoRjNLSlNhMU1iNzJ6TnlIUDNMeFE3ajN3dWJOMkFOdXNSSlRlL1JCMTc2dkJSOU5mZ2VuN0FWTm5OQ0trVXAreE1ZblQ3ZlIzWllDeG5VMnNwdTFmZTZZc0lHUG5aeEc0OFlRRVVuYlhRU0NOZzdONmtNWWxsay8vTUJFTWFYZDdLM0g3VzhtUEpHdXNob3NnM3F6MnI2c2dZT3liaG1Fak1BTnRUVUtkUzN3bFpLRitBZEtySENYZHBZUkFQV2x2amt6VVFtNDZLN2xCNUtUelAzVnR4RUc5MThrbStNbVJxajVJdExNQ0ZKT01GQlp6QjFpOW9nVGNDbkJyeU51T25yTEVKZzQ4MVhIdEpRd1doajBmdTZPak1wWmVaZFJlVG9CTDZoRGUwdHhWOWc5OHdVamFCY3phaDR3WFRta0N2N2VQVzg1RXNZY00zQXltTUhtbE1RMUZKMFhld2x1ZlozM0Jmc0EyREF3VmUrRjhpQ3JTbjR3K0VBTjB3eFg0THNiQ2RsbXRvSks1TEREczJuaWw2K3VTOGxia3hDbWdyTkR0NVM2T1BrS1FPak4vcWtPOHdsMzBTYTNxZ1RSSk9TTlRTUG94aDFWdEhjWnh0aTBFVkpjNEFEeUxKUWdxTXFqbzFoemoyTURZTWJZSXU0N1BHQUttME5xU2ZTYTlETkwzTjNDWGVzbFFsWnZvUU9XODlOTUJsZnpZZTg4Q1hQRnYrMDk4NFYrTTFyQWhRNGpVSkVUamgvS2I3T2pjTG53TkdieHRXWlVqYVBqOHkxSW9KN1poNTE1cGZ3dXJzL1VWNTVNbHRONHpwcjZIeHZYR3VPbnBXMlVDQnFnMkNiYXNIVmg4Rm13aGpjQ000RldGWThyL09UUGhtY0JVbVhqN1lkc2RHNXp0S0lPKzFtVEZqVXNhREhpUjBHaFdLV2U2NERmMWVZM1N1SS9KdUJ6bFEvVnJBVmY5ajBvN0JrN1E3NHVEb2QxS0VoWEJrK0hzZzRMYXFTNHdGL1RUSGY4dWNIWHBkQmQzZThSVXREYlRiR2orT2U0S1BQaXNoS25yVHJQeUR2MXRVVzNiZUNyL0VOV2kzVkFYZlFsb3h3alhDSTAweVZPRy9Zb0dadU1SRjRTaU9MWkJQWEkwdHVVQWZwR1Y0VWVVSlVpSWNGVWVOcDR4Y2lGYTZURCtmcnhEOHFvY0o0TjJJTDM2T3BMNTlPM1RTeXV0aDgzU1k4Wkw1azBBd3RsWXFnK2pjRUdRQ0h3UjlscTh0cFlmT3ZOUVpaOVZwcktYeGlDVDR0YmdjR09sZFlWa20wYisrZWtYbjJjRk9lOHM1RnlwL0JoQjJONGxiSFoyUkRXZUpnQ080VDZnSjNlbk5sOXUrZWpxeGw0ZUhNaHk4NXlTeFcrTjBrUHNDN0MxTGppaFBrVzE4bkRnTUpWNEZFWVcvYTY0T3RSZ2Q3cW9RTzloSE9sRFBtd0s0blQrcnJFTitYbUdTREw1UzRQSjMveUNCMWxYYzBWbHE3WnVmM1VSQ2kyRjZQOEJjRmtRMy9wei9pUHhGNHk1THFEOTgweFhtMGNqUHVNS2FaMm9rMHhvckpoSlpGNGlRUW12bnJGUTd3TU9aaEtiM05zSGpDVUZtVTEyQ3oyTXYwdFAxQ1IyR2d0OFUyTkdZenp5MWIvckRiZm91aDJwYmV3QlpSV1pkVDAycHhTc0Q0RHdET2VndXgwU1BMSkxxU0pjU1p4dG9QQzNuYzJMZ0cwa3dXS0s1NGVlL0U4UkFMNEpqYWoyZmNoeUpmakkycmxpTW02QWlTeWxZMUNNVnRFRVRWRXFIS1RaM1BUMFVVeWFOVmpuakY0eDRZUEF0aVdwK0pNT1BSQzJiM0JYN2M4NWVDcFNJVzlkMzBhb2VtSlpaaGY5SDRkOVZPTHVsQ2V2ZGc2NHVYR3RqNzNHY2N5NXBEcVVFSitWZ2tHZXpNTk1oaHFMbXRBVUxpZlA5eFJmT3JMZG14Rm5JTUo3TktTNmpkelF2R1lWeGxpbHAyNGsyNlROTk40bUVFeFJOdjRtck5LeUc1SlJyMmY5SXpjdXRyZDlGQU1uaUlEc0MwVnU4VzBqbGdOUnhmRTk0eURMZE8wV2JCNnd2RTVabnd1akxIN1duMEpjSmM2UHNCRFZVZmYreFJZcjgyR0xsclZzYytFaFcwTU82ZFR2bWgydll1SDhnVnlFbE1qMmoxbFpnV1ZFZThKNXZUZTVYZTZzQUpsb20vQkQrVUMwR3Z1OVJ4eUVBNWtCb1k0R0JEQlNRZGN2VmlGVE5CU3BQUXo0QXMyMWdvQWJYWmxnYWg0bGtlSkpuMzVKZmJuQWowT29WaHNtRC9qZTk0QnI1QVFkaWQ2MUpaekVaRllZbmJST3Nla0s1RTYreUxiQXdaVkdxRTcrMHlKSjM2WVhKZEloSkgxZnBFdjRwL0FiVEV6R2txK29mcW9YcGExOGhuaDVHL1NManBRMmFOR2xTVDlOZzFGMEpFK1lTd3RCbnhXMGhOSkhkemIwbXFhSFdZRjBWZGhUdDZ5cmplRlJvRUlyaHljSmUxWkEvcFlZeDQvbFVHSW1LNnFIaGlCVUY4WXg4SDNwdnErcE5vN3lDTXN3cUdTbWVPYXFiMlh1dWZmdjhVbnRpcDRLWnNYZ0VtUFF3NWdReGlKLzlMeG1IaDNHMFpYSUJxYkVJZXg1OG51MzRXbTZnTnRjaFMvbXNHUW1wSk8rUFlVUHFDNjF5N1laZmdFb3AvQzFCb3BTZzBkQytKRVJtZ29mV2hqMSt3ckN4Kzd2WDZBUWpvSjJQWDdWOTQwVUNjeHNkUTBYbVZkdDFsdjJDU0E0OU9KR1piM2ZHeEtJQ3Rkdk5MUXdaZXJaZmhNVDlXc2w2NlNCdXNJNjRKbkJtaXpQcjN6V0RYNXZPM3g0MHowQWxpbVdwQ0ZQMTZKY2dPRmRvWmZUYTZGbk5tb054eUdZMzZiV1JSeEQ3aTh5bVI3NFJCQTZ4K2FGdlhaSTExdy9DWjRKVWdsZU04aDBiNHpMTnRvOHoyOGZuTnFWYUtxK1NrUGM2cUp2RHNTYUVJZ2xDTzdTZ1B6MHpZakFrZE92bTdhVGFMLzAyQmdxYm54TmJTODZidUcvVlkzamt6UnJ5TWtMWlFralhUcnF3NlVOak94WksvOWh6dGFUb3NhK25Xa3dDVjduV1FXNXJXWGtyRUdWcjYreG5Da3hxTkk1QmtZS2Y5U2kyY2dxTGRZM1ZOLzltcldmcUUxQWxubDdmcis1SmxFNUU1UWdnM1JRTmY0UDZVVUp1ZnRtbkpXdU9ST21paDFISHBQdVE1VjFuN05ud3NyM2VxL29YM2Joa292eExta21xVXcrM2s4N3BLNUlpakZ2ZXV4Tm5CODIxQVdkYkdnRWR1TXJCTXNuczc2MjVvZ05jUGs2QUx0SnVBUG5NMFNJTWdyZ0RidEkyNDB2VkgxT1JmMGk3Umh0YW1ZUmt0NVpNaTdXbGgxb2ZoWCtXT2JmbG1xOFRiT2M1dElDYnVYSDdIakF0YkNzYy83cXA3YmYwdURURFB5b2JNZFQvZFovc0tQQlU2OG5aeXQ0RnYyam1sNGNlcFpOTnIybnA1aGhaRU4reXlvWkhNaEwvck9ZSTNpM1dTR3dRNFZsdkYxOW0veW8zc3F0OU95N0dOdEErWHhMOWc4U0cxN01IbGZRNTdrV294Wkx1bmM0TGpaNW9WRjZDeXUwZXNxa3M1TjF1RzRTVFNNcHJGZS9wbFMyN3ExNTFHMVJjbENtNndzdHd0U2ZMTGQ3WEFPSDJVV2N5eW9UYkZoUVRUa1llaWRIaWIrekFEckdyM05PRE05VTdrbmZQZmZjY3IwNlFRTmgwOVFGb3NTM1JrT3lqUjRUSmppQWxVK1gwQjIyNm5vMFdqS1RidGxwUlBYSi9LMU9qTTN1RTF0M1RlbnV1b2pwRDEvVGh5ZEJnN3MwbjQreTlJZXhpdy95V2Jvdk1ZZFkzV0NjQVYvQ1cxb3pyNk9pc0xTd2pzU2pNN2UvMDJSZkkvdEl0QTNWZndRNUtDM3N6UW5Zam1PQWc4TnozYTQrUnVxWlNweFM0SGhabXcxUWRCZysrMFdhNW80QmJwVTBVUFpSbk5PdVNuM3ZjbkZodys0UFBVYzFKY2prNXdIN0xjRzYzaTVxQ2hkcU9Bc0lqczgxc2NEaWJnMHoyR3hpRVRBY1dJbzRPZWVZOWdYSW9MblBKUEdwVGFhZGVlcmZ5Q3gzY2JMeWdRajNQL1RnUk1UMTRHdC90c292SFhFVEtueWhhQXdCdkQ4OElpSU5GZVo0MjlzSGxiaEN3cU02U0srSHlGOU5rQnlkQVJxWjRJbmlQS2JUZ3U2K3lZeGthU1o4ZW9jTXlsTUNZYTF3aCtoclpmRXJsU3ZwR1BvejV6QVVNa3BGQjRDT3BtVkdsRC9sRlYxelB0cWNKTFVFc0N4OThCVHl0bVFzeGxNMzJqNjl1VU43QzJZbzdZUmpzUU1CY0Myb3Z4S3RIeGFoKzhXSXQ0MTdqc2tLalBKR2paZE1NbHJyeXlGZUhvRUx5V0pabWVtUFR1NUdOUTF6RVltck11QVNsWGFPY3pSM0xVR3o2YUdkbXBTcVdzdngyWEhCcG83T2M3YktwWFo5dmVsd05FdEpwNHpRMTYwWTMxL3dhWVVCa1BJa0pjV1BEeldxVERiL0NWeGNxZExTRVkvMFBlZllGRGFTNjNyRFQwdUhXTXQ2bjd2c3hnV1dpQjBORWMyRGs1emEzai9STXhha3FVSjFSQjc0M3hhSWM2dVMzRkttWklVZ3hRcFdFZTZKd3VSZllhZW5xblFNdTNKTkt0dE14UlovSERSc3hkSkZpMU1OVFNvSExaVVBPVmFZQ2RSMk1oNGozZVNENW5MTE9neXJQNlUyemYzNXg3amoxNU5PNGFXZm5wOTkxbjdzNlJqck5SZzZxN1hwTHFqN3Q3ajBSa3pMb0tYb1AyTnd1ZFh2SHVyMmRrWXRHTWEyWndCbFZSUHZFOWNwMnlvWStOUnJRVjV5NFdCbXZsSnNNcHdaMU1GZmwyMkVFdVEza3g2TWZySnVhSmFBTFl3Uk8wc1FZdXZsTkRveUN3SytLek9hb09NbDRCWjZyMzVWZ0hxTUhTM2tsWkhpVmhjT1EyMS9WenV2TEVFdGtyK2o1NzFqOUVSMlJOdG1aNDArcXRXSHQ0YytNTVU0TXA5dFFscUxwUVNnZUtTV2x6YVdxOXdGSDlaUE52YWk1RndUbEVmUlBkL2ZvMUN3WUdhajI5SGRHdTVrNHorc1hjTmlJS2d4L1BDUDMraGI3VTRzeWJGOHRNODNIeFlrTnN2d2ZMSzFxbWN6aldDa2x2c0dvUEovZ3VzZTNReThyOFZ1SzY5UVdMSFlQNlRYWlpOUC9kaER5OE9MM3hsZ2VqZk4rQ2xYMHZBZndMZGx5dGR5K3lQNjhCbXVjNm45V2lWSFdRb3ZQdExOZUEyUk1SQnJITWpQd1hIUElNd25QeXpPdFplT1FxbDVFNzVZMGM4SC9XVW5wK3F2NE1MVjhnTTVGQkJ1aXJGUVYraDNmemhYV1VtL24yeUdWNFdRa25wQVNydUd1SStQSlYrL2ZyY1lBbXFWSEVKQUFqYUExUm14NUxjTXcxYmQ4aWFBd2VMdng2c1NSdXNTWkpCQllrYlkrZU5vcHZBTk1Qc05DbnV0c1diOGVSeFE0NTZEMjA3M0luQXFLSWNqWXRqdmk4V0oxTlJGTEIwQlkvcllDMUMzcm5nNVpQWUVNS1ZPTk9GbkNXZnAzNHppZW90YzUyVVhDcktKQ1psZFJsLzdna0xSS2s4Rk9zKzZ2Wld6cXV2UWh2OXNqV1VtUFhSSXBOdE9BQ2pQMEFoL29LOXFhK1J4Z3JWekMwbnpkVEtwOEpPVm1JejRTZEJGMHNjeERGUXJOVzRLcS9jTFh6aU9RbXMxSTF2TnlWTUlhVnFIbVI4Qk0rNTlZMVNqWjVKTm1Ba2Y5aUd5T2ZpZ3dGNEc2V1B6MWd6Q3FvWEtEVlVSNUorNmQ2RVc1N1BlK3BCTjdjUHlzOFZJcGRjWWVjcmRSOTVzTEFSK3Y4RVhVZHNKV084Q21uNlVoNkw2T01WL3lmSm0xampDUm44NzFRdjlDb3B5UUZNeVdwcktaSTYrRXlrU3J0TldETEVZSExYTTRsZlhoYm0yMmpVVWVSa2xoYmdPTEcrN1B5bWV3VElaTU9CVWF6dXByT1drZ0FmZkdjcURWMTlzcUd3M2dMMnl1VWF2WHgySmNLMVpoeGZWZHZyUjRWeFlWaHVnV0I1dEdjQjQ1ZUE5SWRIbmpteFhYb0t4S2Z3dTNMQi81RU9uaFlHbmxrWnhmNkZBVEp4ZHduRXlIVzBnd284YU5TOENjcHRuVGRKWVdJNnFhYzFCdG95b3VNNFJJK2tCdUI5Vms5SUdvVFRxdE9jc2dxZXRnZ3FCaXlJMVNscGgvY095OVB0NVdLNkpwTkdKczVrK1FaQlJQWVlpakxXYld3U3Z2THQvaDdsZm4zNEtrS3hUMFJQZWtSRVFqRlY1Rmp6KzhKY3RZNUovakRhQmRlcjhXQVZLS3A0bHAvVEpQeCsxWHk5K3YxSExlUW1NZ0lNaTk2WGFOTWRiZi9xbHhUZFB3YlA4N1lXOTFsaFFVU0J1WEJiZ0lpaVpBV0NlSFExYlFvWTQwaE5naXZLVlBybDhWNG9Vb2o5cXFNVWRabWM0SG9YaXk5WFZFeUFSTGNKemZodVpYNFEzdkJBdjRoZ0l2ZXZSaEdCZERQcENoejRKbEg0Wngyam5oMHdqY3ZkOHVmYXY1eWpyKy9XMFdiaFVVaXlrcVM1bm1XdlM0QkI1VjJnd2hWaDFJYjZhaWZNMFhndzF0YWh2SkJZcjAwdllZdFhuVGJKdS9LQnJTbXVIQU9KS05FcEh0RW5mdmhKZ3NvV1hhK2dhNUxRQndvbk1MSU9mNWtsN25vUnRQUldTN2puZWt4S3J2L09sNXB1UHpKSU9ZUUtUdHh4QjFXaDVNN3VuRkdrQkh2eVF2K3Y2TWxTZ1RkblBORThYZWROREgrREVYc3YwZG02MEhCdWd4ZEowbHJaeXdQQUVwWTlPZEtDMTRJMnNFcTlweklTUi93TEJrZkgrbjZVTHJaVlJSRHVaOHpEQVNVcHF1TmtBcjNpTDYyUDhZbDE1ZTdrdDNqVWkzR1BwUEFadCtiQVlqbklBc1Q0YTJqTTBCUkxNbGxmWll3cUVoNzFWT1VoNTA3ZEIrTTVhdUw4RDJYRk5iN0NEZk5xQktTV0tLTjhSNkJ5YjJ2bkYvcUNsdVA5VEZTbnVhQkVsODBIZUU2MHM0ejR0d1dqeDF3SGFGMklpTk01QTVMaXhsSUxPMWo3Q3VWYkI1TEJXRTBCb0ZCMFc5cDZDN01RRE5CdnE4V3hONTVxT08vajArZnRsZDBQTXFqaVlsUzJMcTYxUGJNWnVUV1lpdXE2RkVXc3IvQk0raUZ1L1ZNc2o4M1JWZ0VvREJ4bXU0L3greEpHaStLZTVVM2YxYXp2RjlNQTJVOXFzRTBrSG12VnZtRlhrK21FemhxRHplM1U2ZHZiR0hDTVVmQWdiaUI2dGxGNmc0NjEwVXN2bDd5QStwanNPSCtFNTB4NnlRdFJuSFd0UkFFaEdNUERCREUvV3BRbzMyOFc4dlMrQ3h3Z2t6ZDkvS25iSUFacFUrMmg3dVZVaEVkRXdqTDlPUzZ6alJTWkExZkZwZ3hYamE4YlJvQkVEYTRqT3VheWZBOE51bWdsN09JNGlYc0VXbkN1UnM3UlRrb0JZOHVoeTNvL0xwS3lRWEIycytPZnRYWlJoYmtkbFFrdWFnTGFMM1FPT1hIRDMvMXdlZ3VwS3RsUmZoSGxyV3ZuMzdmb1lnL01zVjZ2WXB2RDBVUjZJZFhNQlVWVzhJcDhJdThNeFlFWHBuK0ZlakJwc1JrNElrckVwcUUxZXAvQTNzc1JyZWlkNEtudnUwcjlYa0RKbHZlLy9KdTlTMmRYNUR3amhjc281SSs3U3o5dmdlazlwWExrdmNzK3lTZEtOSG9ySGtmZlRyV0g4QWJ4Ymo0RnJTZjVzQXJKbjF3OElOeUtYdVh1OGo3OFNFTW5PWUtzQWpKanJxOGZLcXRRUWZDMmQ1SU45ZUJWOUxxdlNmWERrZmxqWGhDY00wS28zQ3pMS01makcwUmdGTm9PTkMrZGxKUTgrQzl0NmxFVkR3UXZpa01pQzNDcXdMcDQzdk1tNmliRkdLVE16R0dERk50ZUVBWHo2SWhGMDJmNW1ORmhjV2xVVXNNQjlLT290WWE2TTdrck1NWEpBYjBpcmMzN3dIYVFWYjhhUzJkS1M4bURtQ081UlByT3Jha0VJSElqcENITUtSRmxUMHd6T0dXZU55emtwOHJHZnBpNzdUaEZsTUtOQ05kWUNQeXJYbXlGRVZTck5MVW53bk1PaVpvUEUzTTZQcElnRHNNamxHbkFDUFJ1UkVQOG8wN2wvOEJNcnYyL2JOc3lVZk83Y1dlUnVaOGl6aHNCRytqbVU1UzY0clBzTFdnTXN2eUdTa21tV0VzeDQxR3pUNERpaUc4SVlsbWVLWWt3SWZFemYxQzM4Vzd6a0RhRlJmbTdWc0RmclE4NWNhS3k0dGJZbXl5WlJ6NjV2OGYzRDhjcjVSSWJSWnJRNTYwaUtzNVJDSm12U08wQnh0SnMwUmZ5cDRYQk5mYkl0dVBsdG5xaHV4aEFlenkzeElieXRDVkJjeG4wVmVkdWtQRURhNnBoTGpibEhuS05aRDNkMFpRSHZJWjNVS2MraHE1R2c4TDVqN0N1TU9FUFc2OFRub2o5LzEzRkxwUllXdzhPWWJ0K3BzVGJ1UVBlbVNnblFHNFM4N2FtcWpEdjFCSUNkSURYMkJyUXRpaGNwNDJQTmhlREhSM09yM1dONFRCNnZ4RHh3QURrZkUyR1hnUEgrQkoySFZPb2RTK3ZDcFFXdG5xTHltbHFHb1BUZTB1b0dmck5xeVRPcnllbDhWTW9DVmo2T3NZcmE2QUF6Z213WDlrYTVlaTJvZkd6Y2ZKczJEajU5dmRMM2IzRzd2NlczbW9zM1hMSVNXOGxGOXVWYXNpS01oTGJzV0VtYnNjTGJLaW5ZNi9QdHA5WXozeVNIYnlTS0JiSnQ4bWpaTzhCcnRBYzFqZWI4ckJKM0tlUEJlSmJqNjF6UjRWa2F4LzQwTnJEUm1LVHdxTU5TWVhZazJnWnJwRlp0TlcrZ0krZEJWbVVObWU5S2RuKzdMUVNOaWVGOG1rYW9IUlV1eFIwZWRFUmdqSUFiQWoxdHhkTzh1ajlVcWRwbUVHa2JyQXJzdnJIbWloRE1GNXpjRzFOM0FiUzJ2QWdmUmloTjh4OFhIUUVEbDRMTXVVY3NId2RrVXRzYklDQ0dBa3l6bVdocVV3OXU1czliREIyZUhkSVV5TnpidzhFSHViekcvVlpQVktaRnNKelV6d2NNZ0ltQ3FzY0lLTGIwV21OWU1Dc1RYRVJxLzFrNG5YMGFVcS9rMEdrR1BHaGxuZ3RLSldETTg3TW1YMi9XVnE3NzZ4WGZHcGZXYzNqSElkZUcyM1U0SEN6ZFZCWXlzdWVJVTY2ZnRWZFRJQTd3RUF5V1BsUFk2TUwxQmxKU1dtbWVFVFdJZzdsdXFIVFM4bU85ZFVITldJbnludEZNOW9tUEFjR3hqOXpsNUc5NHp2ZkIxMkN4c2swSlMrcm9DUnJyREI4SE5mbkRZSWZWTXd6Q2RVYjJNN3ErTXpTYTJuRnhxMExNNWNXaXlocFZwclZNU1RGN1BYcUpjaGFCajM4MGpDVWViK3lMdGFWZnVOTUJ3dUhmYVpoYzdLcExXUEErNW9UWm1rWW92cmlJTWhRcG1rOWpFcmpsNEJpSVp3NXFnelpVdTNqcjFpVlBDc0hDcTJSbGNnTnNoMGFwMUI0Y0VZNTU5bFRSU3hmd3JLdUtLWTVTUHpud3lkZXdHakVxUDR5MTdaenVOWTllMjFQUXRlT2ZmUDBTajIwSnpMRUdKWUhYZEJlR1NVTy9PWVhyZXBZSks5VVdWYnQ1bkJROEs3NzlxN1h6d3dUK1JubjhlZy9LTXdGUDNjTGNlOTdEZ05xOExyV1hwVGJmNnI2bjBlN0N3K3NuSU42STUxUWhHSGNhbnAxZFE0aHNjNjdjUDdmbkszSTRKTXpsTFllMXJUdzNFdzd6VEdEdU16WE1NZy9xWjFsSWFTcEY2SVR6Yy9jRjgrQjdBaE9waG9YYnhRSGFiZkRkS084UWJxTTRsT1BnUU5tc1JoQUlUNHJ4WExvWmFNK1V3aTd2bEdScWdxa0V0bHZMTGxHUHpTSGFadEg1VEZJV3FIdGtobnlybGRGZ2JnbjYxamZyZHRPa2pUcUpXOUVSTDdwWVdLU2NRSTRNSW43VHBIUTBDYW4wd252a2hjOXNxMUI0T0M0bWtIcFM1TkN1eURkUHNBQ0k0aCtTNXVIMWk4eCtRc3NuaWJUY3FWc0JzY2JhYURuenhQd0NYcTZiVHpBNEdRSU91RXpJR3JFL2xCemprcE1ybnAxclJUcVJGNWJQV3ZiTUNoWXY0TUpIeDhTeHhuc0ZxUjJGNXpDQkVERk5kNTE4bVpzcHhsSlZZY1dyNTZ4TGFVRXlndE9md0FiQVhHcFRDRjRUR2lNOGNJUDVGSmdzVGJBaUhMRzFIZjZzQlNsY2dYa21FK0Vub1FyZEFlOTRzV3dxTUJSRVRRUTdrTVAvVGVwVHpra2RuakkrNWkrWnNpaFFwRitkVXBLZTMrK3ZMVy82cTY3cXdRWWI2b2grTHFneHZqUERQZDFyS1p5ZjZCZk9rT3ZLVjRaenhxeTJPTVl3RWhVZXEyMkxkTVYxeHZhNVJyNG1Wd1NpdzE0enEveFRlMTJlZnE5TDhtM3dvTVNLZG5pRDlWbkQzVXozRUNVQldURnN4eTBha3RwYzRNdmdIU0ZGTXJjNjJVbyswdXVCY0E0Z1NJQVZqRXZxUnhnd0ZxZ2lKZnpMeEdVbTdWYmhRWWd0VDMrbnRUV1JRZ3JpclVtQWtrK0lQMm1oYzZwbmhZbUVjdVNBN3BZMUNTQ0dzTklRR3YyQ1luUUpKVDNWeVFFMXhoNTZnMkNtS0FCMWRxTnM5YlJDdHRIQ0h3a0pjcm9ZbG5sNGF2VEJuK1llWDN3aFBTTTdZQmNDaEpxUmlCZzdHZ0hEU01iOUpOZ2o2ay9lM0VWQUQ2OFZKZ2JsZzNuZ204YTFGS2lZL2ZVTGFBTHZYWUlTOWdkOXlCVGtqTzhKWmttSDVQaVVUWW1zWEptWEFQVzRYMWRRM0Q2cFlXc3lnZSt4c0hPYmoyR2VBMEkvd3R4dnUrYWc2TzN6cGk5WGpzRnhOaUtrWDZhL1FBaFZQYURDM3dZNmJpV3JmTW56M0lZYXNuSkZzVHFuUnBLd0JvWUVlVG9kbmxEN0dXb2M4N1VzOXNFT1lLbkRrYytRdzgxbXZqQVArZExlSmhOek0vbDY5akVEbjQySjB2SExlNVVwZDU4cjB1UFI2b2Q2b2tVcFdpTGtuclZBdjQ1L0RhSTB5RUFZMHRFTndpOWpqVVhaU3MxSTIxN1huc1VNdzM1VG1ReEVJODZFQVNncHZUQ296bjBSSm1yeVBDazRlTWRNMlJpL0RBVkxkaG5IcTZmTEltOVZPMmhaV0tDRVhvc0RsUmhCQld1R2c1ZmlXVVNvZFJ0Y1dBZWh0VG1ER3dCOHpEY2hEQ0V5YXNPVVJucktxNG5uaHdVencxdUJBY3l5ODlvQnF1YUxwbjhCWnR1Ymh2QXpVVGl4YmtvWlJrQStweDFqWFRpQUtDZHFlUmFwMlFENXJtaEJhVnlqUy9hWmtFMklzaERnc09IblYvSDBWdXYrajIwS0RSQko5VHRGRldvZ2VqMFFuMWdiT1V2SWIyeEdkaWlQVjFNY2JoVjhETGNiY3FndHlUbUNCVk1CVlhuMkNxMmQwalRlQW83MVE4OEJMY3hESGFRZkRyR1RLOE9sMWZrejNvUGozcytobnVnVUVDL3ZHb2J3OEZRdGtFMkZaNzMrVTBBcHB0aERoTU1RMi9mVEI5c0lYQ0RqeDJnVjJOL2hsWG9naS9VZVozSGJhbUw3aU5ZUzEydEdWTnFDSWY4dkdBNDA2cWdlQXF5cnFzdkRIRUI2dWI3dUNqU0V1K3k1Vlc4ejhvQXE1M1NWVmFJbWlVbFN1ei96Mlc5YWxmZEtnZzdtMi9hUG53Z0F3Y2RteG1XL1VXclRXYWxTN0EvY2lSdFlDRElYeVhJQTA3bEhZdHhPTHJRcmlVWEFUcU80T2xqdjZWeXpSQ2xzZzlOZFdTa0pEeUtkOWIyWkI1S1BLVis0Tys1NzFCNkZROXFmWDd4dFVZY0hJemZGMTFUbUpoL0JWSUk0NjRSU01ZWFhjOXdjNFhiaUMyUHpjSFk1Z00xcUtSSU5kUkVJTFYvUlVqdnRvbThzemlPYTVGMkJiamJUMjNGRDJJbDZMOVFKVmZ2aXJVL1VBL3V2cm9VTU01S25NbDcyTW5MYjN6alV1THZPMFh4elVKeHRuZy81ekJ6WnowSmg0ODg0WFlmM3FFYldyQTBYNzY0UjdSbFdWT0drZnBxZkJyOWZiVk5wVHNrN3B2dHQzTC95VDZDTWhIcFdiMDkwVUV6VnZ0Qk5zZmpqYUpGMnRqVUdjUkpHaWUrbkV5ODNoamk2L0I2SC95aVBTdHlZNVlXSEJuMFlYbFdXdEZvQ2JtcXJKOUQ0V2wvaHdiZmtBcTQ0L3Jhdi96MHRRZWYzbC9Sc05iVEpzV2ZUd0dXbWp0ZE1Rc0l2OFkrbG5Bb3k2YkRScml4RHNleW1BMnpsd1k4REppSzJqWWtBRFlNT3V4dHFpczdPMWcvSCtDUDcxcTI4ZlIwTU11RXRBd1RodnM0Z1NJVmQ3SlZ4enR5U1VSNFpVUlBXaWN1RmpJaFBES1ZCMmdzMFpuZVFxdkVOOW12YmpEd2FxdjF2UitWMVByUEMrZlNPUDZ6bWd6d0xqL01uV0R2UTdKUHBVcU1HOGlialk4VGlib0RtLzJiQmlhdUN5ZTMzNjlPNWROQ1Z5b1BveW8xa1hhN2RuRFZTU0JDV2xZSlc3OWpwNE5hNEhqWjB4M0VOaWFrY29rYUlrbUZNQURXWTlqL2lwK2J2MmpEcmRiVE4vSUVGVzdNTEY5NGROVmtkaUZFQ1VkK1pmU2pWeis1MHFDenFOYjYrSktwcTdqWU1Eelhmdjh0cjdXZmdiSE0wcWNWck9xbWpVYUwyK3JwVW1DK3BlSEVsVXJNRXFBV3oycWRnaWIrZzBxZWFmVXRVaWVEaWlNWGl1UDlyMFp6enJxdlk5YXRoN1EzZjB1eUFVZlZFRFFRTEllQ3RkV1hVWjBXTVpCLzVDa08yd1dlQmZWK3JiQjdyV3hQaHVGZDJDcHB2cktKem00NHgxd3pHNjg0VWxsSHREcm1tV3VXU3NhWVJZd20zdHBTZGJpbldaZUU0S0JENnZxU2hJZ0lCeDNzOG01Z3h6OW5YaFFRTDNRZXo4K0orZklyam8xTGJyRWEyL0hnNi9wZ2l5azZOdUpTNFJMQm9xQlNaR2FOQjBFVVdoWWFyQXJOUDNVZTkvQ1VtdjRFdFJDWVV1Q0EyR0FNL3ZPMERGNDVQbHEwT0hiNHBtdDNSU2VUQ1VlaDB3bGZCVzV5OVU1SG85Zk1FQWUxZkUzSS84dHFzZUh6YmNOZEp5WFIyZVQySUE5NE1iVU56a2ZBSVJqRmo0Y0ZjanVQeE12eENOZ05uRXJ1V2RTUC9jakVpSDZLVGdXSXRRcGM4T29ubXl3aDB6QUVCSHZuT2NMWWM2SThGYWF1dXl4MEh3YUZUWUxkSVBMOG1PUGM5V2RtaWtPWHNLK25udlZVRlltbXhNRDhobzQyV1hLRmVOanp4Y1duWEpkbGFJeVpoaVhteFlJY0E2SS9WOU5pMXI2ZitKL0VtVWxBOW1RemE2a2l5eUI1QjhaRGFZSmxWQ240SlZDOFoyV0Z1eE5tZ1ZQV0hFblR5aGpucEhUWGFab2MzQzdSajlENGI4YVZiNlFFcThJQi96NkhZSVZXNGRQVzNuU2dxam5SMjhGWWpMT3MraUVtRXNKZ2tsMmVOQ1BhcTdrbzNnTUNFeEwxeitqVDZUU3FhZW1HRXpUQStha1hPakNhWHdXMjQwOXJyaUlza3lCcUExN3d6Q2phRFVlSkNtdHYrSVJKdG9ITGJzbHhreGJzUWo1NElNeVZyTjh6Tm9NZHB4eC9ydjl6RStkeUNLTkY5cmhpbmlzNWFscE13MDN5aWpXcGRsa0hCQXczUlp3b0lqUWNJYkJMdFRzTW1ya1VpL3ZGV1JGK2NEVjhzTkN6K09WS052b0lzUkNzN1NERm9NSDM1UlFlU25QMTUrWHp3eFJOZ1BUQ1h1WnVyQWNyc1diK2hpVnEwd3ZGcGx2RmI2dlFwRHN3eU81eTRoa1ZWRlBTSkFzMGJ6Y2ZKMEJUS1oxNDFqVjd1Q3ZCM0svWFFoUzRVZEpXL0xYS2J0aCtZcVczdlVJRHlnU1N1L3FId1pQZit1dENTSDl3YTJOSTJMZnZ0a2RRLzVOalBCRXkyeUdtK3ZXdlRDMUpxVURtaWJENUh4TjdZZml3U0txdE1lMlo3YnFPWmMvWFArOUVqMnBBaTErVmpoZlVBb0NKWCs4cnRxdVpVZlRQbjF2ZWFkSGx3M3FXZ1VOVlhLeVo4S1lFKzhyNU45WTl6S1JTcE9Ua0VmVmJlTG9FS1lUSGk0NzBIZ2pIb2hjTzhOUE03ZlZHT0xkZy9XWUhyeVpTNHpKRUxVbWkyN2xKY1FaSGRzOUVqZmNLL0szU1VtZTZXcGhMUTZEUmdSSUZTdTI0WU1YS1JnaTJrR3M0YlBFSVkxZENNTjRvQ0hYSVQwMEZoYXdjaGVhd1VQQlJEVFpSNGhlVHgzRTJQZDZWQ2FyOWIrbE9oZ2NqRVN4U0d2cVZta3Ftei9TUXVTRWc4dTRqbEMrb0FGSzdzUHpVYU81WGlGUHRrdEZLUDZDZ0JGeVdIUXdwTlFBMFo5VDhoQ3VVbDFxSmZKSzA1WW9DcGxGSFc0REpiVmR2RHZyNHQxT2tLSUxyNFI5c0hlSzE0TW5rMjZQR0svdTB6ZUtNVm4vai9JcGhobXBxVzVDR2trZXo2dVZrN1h3YkQyQnRGSjJKUmJXK2ZNZzBUOENibHFNQTJDYUhGL0J6OUNRaFd4QlR2OUtPVjd0T2NveThURHZteGZTcGFyOVUyVU9RbFJZQzNFZUlFOEVwWHM0NDVuZzdUd0NvZW92R1N6b1VMeFJRaWhWUW9LS1hROWpWMlM2Wk9HQWI4d0s5c2hFb28vd240eCt6N3o0cXNFalpkT1ZHbEFxanphM2VINWY1S3pETUFTSThDSzhKekFsRGRJeTNrR0Q0d3VqNHVQMHhwK203WDREcXkwbHBiZmNIcm5VelYrT0I0ZitYaTJPVk90S0tpejBxaUxjTXlSbjdCcFJYM2RKYlhSN1FvWm9ieHNiZVJsS09TSDhWQnNHQUc5YzRJT0hxQ05McHJzV01qYllYanF6ZmcxU0IzV29LUVdIZmZ1WW1QOG1JQnEzUGpPYjNnMnFXVEpDeWROWnM1S2NCWC9TV2Rna3hnZ2EyMUY5bmRPS01LdGRucnc5T3BXdGdvUUZIL2UwVktveTlTa01wcWNnYUpmdnptYmJraVRBMUt3UjlFSDdTMXRrNmNRZ2RreVZycXZJQzR5bWN0TnFFcWZxeGlHOFh4VkxxUm5SazJKb0hIODNEczR2U3lhSG5BblJCK210VXEzM1dMRkdFL0tZWWZQbE03djRWS1FlNFB1UmxWTjk4UGsvYy96cU1BcmVYNERRYmtrRDdmOUhEZS9NNm4vWUJiOFQ1aWM4Q3J1YnMyWTljMDMrU1gzak5tS2JUT0VuTDFpT3pSVXhXNzZVZGxXZElHcFpjVjhvdzdwVzEvL1c5Q2pteG9XT3lxaWxSaTZIKzhsNS95d1I0RzlCbnpzbC8zWDBMc2VZdXZldWJNRUFBaEpFTmxFSDB3SGFQYmhOZzhtc0tyV2VKMXE5T2NZMXA5eFZuQWdKcVo2QjZUZWY3U2diVUdpTHRHNmwydGdiYk8wRW1PVG9uL0c5RHVCR1AxcXdnZ3psMzUyL0oweHcyM2gvZ2ZqUllndmN0M0I2bDlJcXdEMVFlV2hVSXh0blZ6N3FWTGlTclY2N0xrbGVwQkJHTWFFNHlzd3p1VktzNndxd3M1TjNhVHIwbjErdVA4UCtpOGpHOExxbFBCdmR4cXdNOCtScG1ZZk1Hc0cyNlgxTEF2eG9razVGUjhaZVlJM1NtM0dyem0vVFM0anhCcU1WUWhxNnFNRXljdHBLc09nN0ZMY3FJRU9pamdjQjU2VCtZWS9vcUxtRDVsaGlBUFhpWlFRc1IyNWhIU2JPcDR6TFdqWm1kYmRDa1BETThiY2JJcFZlbnJyUE5vZit1UDB2ZWdQSEQ4Zjd0OUdBRVNScTQvNllOOHNnMlNnVU1VbXFFaWpXN3BFY08yTWg0NERoMG5hWG81U1dZNkY4eHBVN1VFYVNTWWI5Q1JDNGpUWGJ5VFJVUlZ1WGp1N0lXMnBFSnBjMldkb1hCSGJ4SjJldW5iWDdWUDdVcE5FcDd4ZUViQUthaXFjYWJQRFE0N3Nnd0ZxaHlNMVZwdW1FZVRzYjVDMXFSKzhNNDRNMHExZmlPQUJCOGVTZHZ2UWg0U2hoK0FLWCt5aTJOS0tDREs0Ny9XdzBpQkIzQTZvWXZxWWNQY1Z3d055bzA4NTd3QWIzbGdZa09HYVcrTTh5cjVtbTB5cjAxTkxIZFplWHlYZnBhaTRUY2RiZG0xSW1MVzlNbDdtSzI0NVlSUi9CR2xKbjliMWlPeCtWejU1ZjR0eFJ1c3RhWXF6c3dzTnYwQkxyREhyNzIyQm11TXVHZ0xwVXRyS050WVN5aGFsWlNuRVliRWppRVhjMlRRMWFpRFVHcjVLTmVsdER3ekdERUUzQ3hpU3JjTTB6T0hKUWlhb2o0b1FSd0ZGVjVBOFJwR2VGTXZqc0x1QXJLNnIvQ1NnNDAzcmZoR0NjV0pLdk00ekFqN1dpelVhNy8xYkc3bVRuVit4ODhyVW1OcVlCN3h3SHUvbEJoSGJ1RHAzTGdjZVI0dG1kRW1jMzFycmRVSGJMWXZoVnFyYjFSdWVNYUljOCtTRUt6emFOTzVHeVVaRGRrMWdwVkxhTWRNQlZGem10UDB4dTR2NlVCNkdZQS83d1IyWTNnSjRBZ2VCa2RPWGVxYlFKNEQyYXJqWE04ampBV3RZQ0FuQ01sU29BelNBK0ZnY01pOVhSTVQyMitDUUcrU2doRHBSTEhQV0hWWjAyRDZEczltUFYxaWllUDZJRncyalpiYlVIei9MeXJKWFhNaWZDYktobm5BY01haEZTb3dwMmRCZzBkR0lMZWtiTUJDSEVBSGg3RnVVYXowRUp2c1h1RW5INllIZXY4eTl6bE9kRmtGQXB5U1NPbnRwRVNaZmVGRUlIcmRjcU9wemxvYW9nT0w4QzNBeEZuMWdDTVJVOGFoM1hJZk41M0JNTmp6M3hUWXZ2UGdpWE5oeWM3WVFOWHZZSW5XakR2b0pRb1FyY1NkQUtZcFdqeWdmYU9OaWpBQVJmb0wzVW1JVE9zTUFzZTdyakFyY3FGZTJaMUpEdGVPcGIrcGMzdU51YjdGWkRodUozTWlKUjRUUklLanJWbWdKa3hQdUdXMVoyL1VNNnNaaDF0WGc2MmVsNkJiRUxYQzFOblZ5bUFoK0hhQlhnOWxmVVZNalRxeWNEb1BESHlFM2xtZFJkU2lEUWNxVnMvRUI5d29kTTZ2V1AwZ3Uwei9jUUZVek5DZjhabTlZZDZLOHdRcXRuWDVIbDgyRitVVlRSUnBrWHpFcVdHNG9RZUFJdXFNSVMrNlBCMTN2OWFvMzlqU0Zvb0ZORzd0NnY1Mk05QXFaQWJEUGlRVnYxLzdYV3VBcGhIdjFjSHJhTGJoQ2liNUxReVlpbENvbTZjK1F0UHpOWE9Pd0wyRS9pblNyMFFacnlSQXJrTHZXU0VBaExLNHVEQ2dQSVRKcFczRkZnZnVwWkFxU2Jna1JLUDJnSklaVSszdUpPUmljdm5IZkthdGQ5dmd6Zmd0ZWRIVkVvRmg4ZkhXaFIxQUJ0SS9xcWUvcEJNRExJd1dFT0FhTmdQTTZRdmlaWjBPa2NEUHR3eTlkcHhtZUxHc1Voemg2UjRMWkI2WTkvOE43bkJlMFJGTUFqTk9LQ0NZRE5nTmFrWDVnQTYyeTdWcXo3VkRjQUx4bWI1ekJoN2NweHV1ai9wN1o0TERmdVRDOFN2aUsvY1ludzV0SDNaanBvRFg4bVdUZEFlbU1PNjFZN2k1ZDNtRkdlOHQ5a1B4a1FFQnVGMWVxbjJxbEc3aEVyRDZlYVJwS1VUYk02czlXbmxyZUtWS1UveWZsSEUwTEVhdDZiZko2K1pBY1FWRWtIMkxUbHRKSTBXb25WTTIxcFpETzBaaW9zSHJNeXcvSnBqS2wvcE9BTERuYTZKWFZzU0NCcndoZHJWZEFFTFV4NStEaXBSVE9wRDlTcGVkaDNsZWM4SStHcWZhcUFiZmhIWnBsWjFIRTRBODAwTGdYN2JXblhTbHVIOXRROVVJWk9rNGZBdTlqdlE2OS9Rc1FTY1dQRUV5TGNGejAzeDVEUHZaeVlHR2pOZHBISytIcnE3cWpwNE5ONW1CcHovTEpOTUtxMXNWSStBTEZNbGc5cG55aEdSRmZLSjdGS05aRjhYOUJDRzVCNnVLUkRFSXNRRGRkTDU4YXhjSGdjVnhxa0hBNk1iN3V5RHJiMnB1bFRaeVRLOTA5ME9MUXJndXhJYW9qNzYweER2dkhicDNhZEU2T2dNWGlqY3R1UFM2UmNCSm1FT1hMMWNMY0NockVCaFRSMnpCZXNaaTdtNFc0UFYvZm8rMUM3dFZuVmY4WVNxUHJONGVrRWZVRzZuNVRUcVgwVlFRalMxVkFYamZWek1DS1gremRpYktJWFoxbXhQdUVxcG53RlNxVmd6b0pQdFNrNjZYdTdjUkZoMnJOcTFFbDJreGFxQ0oweWdlQjQ5SDcxN1kvcDg5eUY4Wjk3RisrdExwT3M1cU1ORWhRS3d2cUtZM0F1Q1NmNGEzMnNHanFvMkwyaFA5VHN2WUVteHJQa21iZTgvQ24za1FBTENjRzdPaVUvc0F2SjR6Q1lvTmJpRW9hTFFQVGtTSG1IWlh0ay8xYW9GYmF4S2R1WmwyalIwdExNWm00T2dpZythVE9PaVB0UGNoMk9OYlVLSURxZHdlcWJOZENySzZwc1kxOVZ1aVM5d1p1aUtZYkEzL1dvT2tuOEhXTzQ3dUtIeGhhWEc1TjVNaExpNHcrTVlyNTl4NVFLTXhuODNBQUJCWWorMFRHR3laRG9tOTlFVGlyamRVTDZuUFJ4aHVDenlMeUZucHJWN3ZINjR1aW9uUkJyRDdtYnVFMG9tVXJkY2JzWFZ6cUtiei9TRHB1NXJTY3pEc2dLeVFmWEdsK1Z1M040ekNDR1NBNzE4MnFpVjBmcnNnL2hYdmNUaHVRNGxIcTNLZGVGcnBJNUpOTWR4ZHMyYWx3ckNqdUN0Uk9YM1pvWGxVbG9QcTZSbHlWRjEwUjd5TytNemxGL3V0T0NJK2lzQkpiOUZwdjVWZEFLWG9Gd3M4Sm1NQmxJeVFvV0FpNTFyeU9PaHBjTGJLUFZrNWU5OW14NUxoNi9NejhpVlYveURGMEt1Q3dwZVJ6RTQ5MDh6K2U0Qy8zcmVudUVEOVlUM1A5S1FmbGVMUHNNQXVSUHRUcHBqSXJwYTdpV2xJSy9JY2RpOG5iekczbFJMT0hFS0xPV0ppVlFNdGJFei9FbGdsMEZWMjRKUHE0Ym5Fa0Z6dk1LaHRQdTFkWTg4c2xPbGoyUUJ1cDhnKzc1ZmowK1JlbmZUek8vWmI3V2VSbHZNTjVOMzdyNmJ1T0dsOGJmSGpZMDhyNS82TCtoUENZRE9yWkFVaFJSNTd0N1lOamlZa252Q2l2RVkxVVh0TTN3Mmk0Rks5RjQxczAxaHBTSzRmNlNjTWl3N3lEVzJoNC91RkJpNW1nTVFxWmY4SmdjdG55UEo4UU4rUWNEdnRaZmFaTzJIWDAydXlPcjRXdXdNb0hocWFRMTFFTUJla2Z6RDJFd3VxbVRiMnpBNnVzdVJyZFZ2bU1jLy9GUmpzNWZCdzl2Z2JDYUozMGw4UUY5Tnk0R3FQN1hIS3VhbXdIQjV2MXVWQ2w0VkphQkdLbkczRjRyUDJLc1Q5eDFiZHJiL0RDNDM0UmxhWWU3RERCa3kvQWdSL205VWZuTGhoYmM3R3dzaWVlR0MxaC9ISG96VnZKbk1XWU1lc3VkTTR6VkVqMmcyLzh2bnFLdm1OVzIvMG5NWGhYMjZLTTZPeDhJeTVGMnBSRURWZDVxZlhWOEpwSGkvVzIzUkoyekI4UlFEN093ajBLeG9OSUoycDFjY3FsRnJsbzRFNk5aNU1pbnlERWlqSjJ6RktBZjg0NDBjdlNLSGZLY2lIRTlVS1pCWUdBTGVzY0tuNDJqVjVqS2MvNk5OWnNJYWFRQkRpVXpkUUYxZmdVUHhNcEhVWExDaWtES3FtWmFnRlZKUFZjQmFUMEhtaG1vaURNWnNXU0srYmhJZDNvejRqOWg1SGZvSUNnckliZzVwTjh6aERodWVsSUUxalJGTjBONVRNY3dRVEhMM25neENuYWFvOVNhUXNYRnl6QjRmN2dMQzBydTlsaTg1ck9PdGxQcEt3bzZvUVFiR3MrWWo0YWR2TEoyaG9zQ2lpN2ltYS96VElQeTYweEtHZUhOWkQ5M0daRkM4UGowYmIydUpZMFJiT0pxc1VIWjNRakcvV1ZiQk4ydjhLVzNTaG1oOWRYZUt4VVFuQWx0Z1IzUDR0YnQzbDdqc1VFc3pwUU50aWRuRE53VkN6ekVUYVdON1pPQ1VsbEpSK0ovaVZOVytDNDF1Smx6MndEQ1BvUTFWZEczRmdXNENKdG9tNnZCaUF5U01vSmhvYU1NMThxSmE0TStpU0gya0gxVlgwd2pkclZWKzQwUTVodmFwaEt0M2phMVdMc0NkU21MaEk0Vm4rZkVEdzZnSG5BMVNhUWJlc0czdG5tb2RUeXRZeW5iVzRTa21Kd21KU2JTYXp5cUo0WTAzbEN0d0dXa1hTODkrR2kyUmRXaUpXdkl2MmxVMDNteEVGVTZXU21LUUZydTkyLzBaRlRxQ21oQUxMNzZ0dGZjQVpPZ2g3Y3JOYXVnajhtSnBHV3E0L29aai9OTk1uVzNpa0pXNHlTN2E5eU9rNDA0ZDFWd3RRTXFrQXo1aEY5d0ZvYUY5Z0Q0OENKWlYxZzg0UERDdGNJVzlwQWZPd3R3NGVMcStEeHBkN1ZHaE4yWjlzSlhHdmlhOFF6RjF2UnphanZySFRmN0N4Qm1JdFhjaHlUK0pqZFgzb3BubTFhR3c0ZmxyWkl1REFsRlhLSU5HUko5Tm9XRFk3YUdyQUhlNWZ3ckVxbVV2VFRNYWJZeFpDNHFWcnIwMm9QM1hrZElaNm5uclZrZEZuZnhsS1FXNFVxNktKOGs4ckdwM0dCMXUvZkU2UHdSaVFDT04xNTk2ck9meDg1K0s5Y2p5K2h2MEtkbTdJWVgveG9EeXp5NzJ4T1A2MmJUcldsY3dJb0oxMHN4RXpIeFBqSkVpMldwOSs0OU5BYnplRTVqb3Jzd2NZczQxNCtFSytwT2ZBeHR1R0lkaU5OUXozR01Gcm1xdlgvZzVCUHZaYmlOK0c5SFFuWko2cEN6UGxldGZqdmlRWFcwUDVBTzh6c1h6ajBlMVlFek9mQWxEYUNnc001bkdYWW9xVi9RSkoyUGxFTitpc0FnSUE0eVkwcFc3SnZzekx3WGxGd2kvTmtnVnllVVJjVnFPS24yY2NWelljYmtFYXoyTWNLOWw2MUVaSjc2V2tuZDIzVmxzeExMVFEza0NUWXI5S1lBMWhTdldsK0JUMk8vZStuY3JwKzZDQUFEeXlsYWs0UktqcTRLRExHVm80eTUxU1pwMW92djRWQzdnZXVmOWtsUGZoMjFmVEl5Q1dSaHRidDV2RUFaYk9NbjV1bnhITTZGZ0FSeVRCRGlMSkhNNGh2NXB1eUdHZmJkSkEvV0FXemlieXkrNTRXNTJUVlFib2VFdFk3bUsxM3V5Y0JWM0dFWURIZmZZcHc0VzJIT2hROGZmZVo0WldlV0pvUTdMVis1VVl1U0g4NVJtN3JwVTQ2aysyT0RvVjR3a2hoVmRNTDA4ZDArV1hqUzRlNzVITU5zV0NQNnVLUnVSWmxNMytuQytTTU92Qk0wM3oxWG56c1U2RVk4MjJnakNSQm9Bay9oSFN1UUNnZ200Qkd1Y01XamJzRE9YYlB2VzYvRnQ0Um5oQVdIbjFFQjZHRzJET1IyYUE2UmdLeFk2NnE3WlAzY2ZzY0xwTDhJWXBIdjY0ZitEM2g1MGlDNVBoMklhUmZrYmVOUVova21xaVAwQTBzSmQrNHJkU2lMclJXVitEdW5jbGhWb3paWnRTWnlFVElvK2FKazQrRTYyM1d3UGE1VXo2eVIyeHlTM1RjbFlha1lBVnBVTzdMODg1cXZsa0ZQeTJ1aG4xY3k1dThZSDRkTWhDbUltSlJpdjhGeUdzb2swSWJvc1Z4K2RXSFJOc091dkVjbWZJSnFIckYwaXZEMEVyUktwdkNNWVh6bE0zUjZ6U1ZoMFZuRmo0UUxJS3pNVElYR3BjUDRLSkdrcFpGTTJMOURncGRabW41WUU4OStFa21ZZFA0TCs5N0V3d3YrM1RsNmI4NnEwbGkrSFB6eTZpcEtFV0pqdS8vcVcxZ3ZpSTJKaWc4WGg5MkZlMlY4SW8wM2tQTFpITkMyQ1EyK1A1M3BScW5zK1Bmc0tvdzRvd2dnVXJNWlBHY1g3TlRTUms5dXBYRVNGLzNGdENkOEFMbnZZSlhURnQ4bVJkWjZ0OWJJNXNLQ0l1RVFRL3FFNzhkSjZsWUhrNEswQ1lWS0pxVGJma0JTa2ZRN2x4dVVZY0RYK0JJSk51MWtPOEhNbjBrTW1wNm5ZNjIyZlNwUkd4M0RRY2xCMnphdDV0czJEb3JFelVmV3h3NjNJL29qczVYQ0ttNWp2MzJLQWFxVWEvTU9DY0FuMU1qMCs1TmhoQ2hsWC9DUWlUblZyWDF3RmZmcEI4SElmbTBjWDUxaGJQdXNvb1gxVjdnYTZ6RzRYdW9ZdnMrMHhIQVFqeDdEWVJENW0vUzJFNXVqUDlrNkRPTFZYemp3Unpvazl6bjBlWWVFeXBDUEFqTWdXM20yeUFGMTA3VmNBcWNEaWFBRDFWU05oQ0tMdjA0TWN2cWxCa05Gck5QWCtjZkhidzB6QTZwbE0yR08xcTRpY05GbGlHM3UwZ09mNFV0ek5xZ3VzUUtHK1BTZ3NjZFRUb0dyZXpOcVA1dFpxRnVhZzNKSXJyOFVPZ01VajZVOS8vWWUwK2YzL2hBUXVqRVUrT0pNUDFCMmNsMHNvM1pxZVNjckNoMkg1VFlKOVdVQklSOUtram9STGFQMm1JdGJiSy80QVNsMVB5UElPbStEczVXSUlnL3p0ekVQbDVHMG1FdW5tQXNKdUZmR1dQRENhNEpZeXpoU0NaNFcxTVNJT0JvQUF4RHRiRUdKTlVVN0FQSndzUDlseFUrUlRzZUlpTWI5OWxVQkRWdG5DdGFkNDBrSGdDOTAyY2JaSU5NY1BEUWg5NzhBZnZFY2VBcU1OTm5VZFl1cmFkeDBWRzZTWDRZMStmQ29PMlhTVkhmMU9uRDdMOXhPSm85MTJOdlBscENYUkcxTWovVHJDZ0FKRUNobFhDQ0w2ZjNrRHBlQ3dqVUZtaE5JVkhPQ1pZV2MwOWNENG81WGhOT09GdGpRb0N3M201aTJkbWJ3cXVaaDd5aWxZU2E2Q2lSblFkQzhYSXZQMm81MFVpbnlsZHR4Z0VxUXk5dHRKUlZjbE5aTlNSTzBWU2lFQnlXb3F3WUxjUDVxSzYycDFNc1ZUbkErNG5vZnBWdmRzc0RmSitMZ2c5aHZINUwyUEtEL3RmZWZUdURGUllqdVlpMWpMZVZKaElHUjRUOW51MEMzY2JJUUt3cEN6dCtEZU5FNlEyakFQclRmUG1ONmsremdVS2JEY3VadGlyaHF4Y1I1T0NGdzI5d01xYTJtVXFINlhvOCtpYnYxT0R0L1lKYUN0UVMzVWhMN09DNGYyTDIyTFVaR2JZKzl0NnZnUVUyY0dHUU5uaFZLSG9GWkd1QmJGZ09uSi80RDVISjlzdG9EaytuQTA5QUxsSk9LOWJlVDF1V2FmS2ZOOEtHbXJUdFJNMG56NnJTb3pBUjJOTmhmN3RoQkZvYTlrcTMwQ0g0YnlibFl5YUxJN2N0TURrQlk4dmRFdGxXb3Zwa0ZYVmthemF5d1BXUTJVVnZ1aW51Q0FiL1I4bWwvUzRydzJJTlJrVG9oZTVqTkVsaXo5UDUyWDF3dEFTbkFrZ1lXK3Q3WjlYL3lMcVhnU2RiWHdHdFVnbmtWczlzNmIrSlpGU1cyRm9KazFQOHdoQ1BLLzFzVG4zVkxJMWNtQjlleXZCaXBZMjNNYjUrbWViY0c0UzRQTUtScTQvaUNrUXZ4UDM0UDhlUFk5R3lrczNFRHpkZGx0MWNaT3M1cHp3ODNnNDd1YUFjeTBhYUNoMnY3NkVQWDZSRTdBUTJuRTFOeldiVEQyZk1vUHRhdU5GOGc0TDR5b2tGdjRpQzlUSmlkM09tNjZtdXpTYjc2Z3ZEYVZVOU1VQVFyYjh0QjZLaVJNUUNLZ21ULzc5SUlmSFgvTGpLeWU4bVk3ajZzSGg5R0VIMnlEY3N6RVlTczBFczUyWGxGR2ptM0hIMUJpSm0zVk40Z3RjNnBWSXRJT0V0aXhMNkw2N0RGYkdkbnU0WHdRMWJwN3YwRHpuTk9JSEZiV2o0djlBOFpQdXZCS1pOUnNBVzlVMkVBN0pHWE1ZcTRVc0kwUi9OZmZnSzF4N0tDZ2ppQSsrOXd4OUdSQ0RYY1NkWDZ2R0ZlbGRhR2lyOGt2WTc5ODk0dDc5YlE3aVJzaWhXVVduT1p1M0JxN2xtN2xDdHJoWnB0SzZoRUFZekFKK1FpSjJRT0FockhNNzlKb2JKV2lXZ2VmN0RnT0lZUmhQL25rTUE1cmdJeTVsdG1SWEZYdGtpejZRdzBPWVVkV0F0NXplLzFEUllaVDd1cllSYVUxeE9XUUFkSjhXYzRpSzV4aUpMM244aGNReW5XZFM0UFBUUm9JbE92OGRkdWE1elZaanJMcm1wNGlYVlh2WUY1bmxuTVhXUVdMYmY0aHV5Z2hqZC85RExQc1Zlb2JwcE5kZEp2WHFMYUh4eEpnNEpjSTFCTFYzcEtrWWpWYzRNeU50Q0t6UjlHa1JIbHE5QTQvZVg1NVhsNjUwS1cxaEJsOTBnbXRQN3RLdE03ZUpLbUo5VEpidjBuNkQ3bEg1U0UyVWpRNkhvK0ZvQjE1TzZQQ0RQYXlycXAzYkJ6aHgrVFV6QXY4MVNuamtDNEg3MjIwakg1SWFRSG5nbGJMRGRxd3Z2WUtFbHhPWVoxL1VoeElFOGF1VVBQblFiaHIxeDRlNnhsSGNrb2RIOGc2QU1LeGw3YnoyYkVJMGxXMTRDcTlGb3dBazFQYVJta3dvNmlITFF5SWxmNTNFeW9TRFVyQmV4UmRYL3ZMYTFDdGtZQTdKcnZwT3VrS0x2U2Q2TERUT1pCQlNqYnhkQkd1QktuQ0l2cVplV2VXNWpsWUVYbjAvR0syaHRjTTNpNjV4VGIySWFCVlFlYTZVTTVRdkxMWVhvc1QwdmZ6N2UreTVRZWxFbisyT3lCTnVxSTJKSUZKbUFjK29Dazk5SU1tZXlXb0I2WUZFSzFPSW9sZ1ZJNE9qSHlZNVhkbkdFSmZGY3gydk9EaEFWU2d2T1ZEZUROT1hxb0hweWlSSjZOYjdPZnNZTEh4YTFib25EaG9acW84dTZGWjNiVCtMb28zaWFpZmN1VytMeTdsaytkQTd5bXZoaGt5SmZRdXRKcmcrb0xZUFRNcmpHY2s1VVZSWjg2UkszMlhrVnFNcW9aRk9nakw0YmoxeEM5d0pCdGowMndFMlpsNFVSR3E3WmRtUlBZNmRKS3NLNGtnQTEyY1FqUDlBbjhlRXZvamxJN29qOWFPakhXZjVTNUt3Q0pPM1E1RThzcXRmNWJ0a3JLQU1hakk2eGw0NmNXWWdNYmZzWU5yNXJibVhNUHZQQmV6bkN2OW80VmFOR3NDd2tjWlIvbW9NNWJMZEpiRHYwbVUzdmUwcWpwbzhRVElZamgyVmQ2ajJCWHp4SytCMlZTZXQyZXlmRTR3bDNjRHBsM3FxbjJWRDVJaGw1S2FISlJGdzlBWEMzNTVFWVFLQk1GZERyOGdWWnRPak1GK05PeWhOZGlVaXRBcGJqdUU0eDFTc3FUM3lFL3dyVmRINXcvV1lvUUtleFc2UUpBRWJUSEVhSEluNjFmR0hJMkcxZW96cmhibWZHRUZuMS84TDhIZVNJRmQxWG5JME5wbEhhZkFZR1E3WlF6dVdQUUMzbTIxcTRSVmNtb1pwRGlxR3N6c2J2SmVkUjN1Y3JMMnJ2bFVTcFhqYXVoMFJtelkrTnlkNmZJMHBmdUN0RzNZNmdUN0dZVTZjcDRZcmExYUNXQzZIOEwzZStMOTI5VUhFd3NlZTFEVDdtdjZqd2FGakxXTURDMURFdmdTcFBVTjNoMldDYlJVQU1GR2YxVFNYYmxaOWxmOUFydk1SbUNyaWhBdktPRnVkZ1NCQXYyYjZXS05YQ2tieUZ4ZUJ2RjZHOC9KWUpqM0l4M0pMSkZuU1lXVHkzZVZDbk1ZYjdKcm5neFc1d2NPYjE4bDk2dUVmMThkaUxPaGhUUlZIZG0rMWFWanBGMXdyZFgxb2pnNHh4RmxBQkhqL2VTc3pkdkNUbGd0Zk1zR3FHbmJTV2FVNkVwTDd1YmVKRUlvTUhQMnpPVnA2V3NMRUNrcUpEWWN5ZllyVG1wSy96VXp4VTc1VHZIUXFUc0hxVlR4NXkxNmp4STd5cit6dkk3WVN1WHdhZ0IzVVdOUm0vSTB5aDBpWW9RVDRLaXVQb2FnTEpRcVZtM0lMUnB0ZFFoRXhOSVpLZDl3aCt0V09rbGhkZERDRlFJeDU1VWcvUGdsSkNOVXROMWxNVWI2U21kNkd2L2g1Y0xGdlpqMDUwei9jMU9MaWJzaDVoK1phSDFONjI5dnBmS1d0eDNFVld3SE5rMEZ0RUJyV09PNTdmZW03VTlzWHB3TG5qcFpJSEhRdE50azhVV09WbGVMQmlCOEZ2eDQ0VFRIcXdEUTBuYWpLMDZxYkkyUHMwZS9nSmhvRTJUbE94czV3VGZncFRLT29zL2dsTFp4dGJkUjFMU3prUnMvUmRqOFdMNUNRbnpUblRLQUZFT3ZIWWpnVWZQRFo1SmhZTEI1aTlJQkNObVY2cXRqZUE0M294RVlHTXROUVNyUXFPSllTUUVZYlZWQVVYR2hLT25URFAycm8zSTV4Y0VkbGtHZ0JYQ1NUN24rUVVINTNhbGpydXR5bm5uMzV0UUJIZ3JJTW44VUdMeWZvS29TZGJFelNMeFMyUUgyRXZwQUZ6YTlNNWJ4RVJQY1N5bHpVNVJWL3R5TWFZYjRnRmRQdkRPQTFRSTBMSzRSVUxRVzlzTGgwemtJdjBrNjR1TWc4aTFFRy8zWGxQd0dYeG8yTVc2bjJTdFVkeGxXR1VDbzZreWhzb2ZaY3RGbk5NRk5UQjJHSXNralVBOXlhVEJzNXYwanZrRnIyTlBtMi9JVmJlZ01CNmQvOGNWNGtObVhlT1hpK0RGL3U2Q2NMbzltUitFQWJyRjhZeHZNcDBaVHRIVWJJVUkxb0ltMFhOTExRejIwUnNmbnFoZnRDYzVFZzQ0NktBaW4xTFRPS0c3ME5MNDlyT09QK2hqNjhrZEw1QTJIajBNT2RSN1BSRzBiY0xIWHZWekJvVWJzUm4xcWN2R3IxaWMzVit5eGc0V3picFp3U0JiTjNrQmIyY21TUGlFdjZOcUduZzRpd0RLSjEvaWpKNWxLc1ZBUVhORHV4aFp0Tkc5MFBIQjBFaFJQTlZjeTZ5a3lUT0tZSzBXYjlLRXFheW5RcnRrYzVTdkd5eGNOdkZFZ3VKNmNnSk9RZDY3L2gyaFY1YW44M1M0WDcrTWNaYkdDMG0wbkZUSUswSDFBNXNHMkxiL3JWVnZPVW9vdHBWUmp3T0I1OWZ0WDVieXdYeldBQzVUR1JIdVhCRy9UM21FNXJHSE84eVBhYitUN09tR3A4ejI5MjE4Z0FTTXpzZ0tzUEFlYzF3TzJvVWt4MGQyZU5ZUWZJNHN3eDlIREpCSHRwL2trbDZ2MFR4S3krdEk5b0wwaHZ1ZC9kVElvU3pPczdqNXI2eU5neUVTVGpVYVovSFUzMjhyNWxRVmdxYTRodytUVGtVdWNxVEp0QU01M1RMdHgxcjhlTWU0cHBUWEZFdThuZmVmOG1xNlU1L0V5dWJzdXBhY3BrNUtoTjdCUEdjd0pIYU5HTXBWSnI3VTVDcXNiaFFhcTB5UnB6WWI2dmhLQ1pKQnkwUUFneTgwRDhOQkpWbUc1SUh3L2JQWUFSMncxaGsvMHhsVHI5SnN3bklYQjk1dGU2bGk5RXYvakx5YlU5KzFPcEFCSC9CeGJmckV0MVJWN3dGT3I1cUsveHZ4MkFtT0ZwMEVidjcvdVNoYjIrSkJLMUUyakx6RzRQRHZzK3NEZXdudEtYc3IvUHByUFdlQTRPRWtyek04eXI5K0YvSjlMSTZRNysxVnErUkJ2WkFWanYrV2ZqWFIwNU9pcVVnZHlxbFdoN1VSN1RKUDB0aDZoUHZFblpZVFhCRFBDUUdndTRtaHRBVFBRSDJkSWN4MW5xc3h0M2QwT0x5L0xIY0g2NmJuVC9nUGNBZXVEaDhuUHNUemFGQ1FoNmg2WXZFM09SYkRMcHJQK0QyNlRjWmxuRnRCSGk0MGNzZGJjY0JVeDBYVWEzOHdQdW96cmp6RTR1Z0lXMTBhQlRxS0c5Zk5mNHhBSGR2azVUYkhCb291WjBHY1V5Sjk1MytNTVZ4NjFmTy8xSVlwV2g4djlYN0kxUzlTNE5URXY5VDErV0h6N2NTaTdMamJNWnJ3LzhpTVR2L1ZzekQyWm9aT3FpYnBidnpjQSttTXBSMmZIWmJOV055YU9peno3MEMySVJIT1pvTUYzS3lkSEdPU0dMbHdqcWR1a2NSOVRGV1VsVHFYcUxibjBjZ3RSZmNmSnF0WEZEWGV5dFp2aHBkUi9pOHJvb1Z4RW1UVC9tTzFUbVNKVS9HM2lVNE1COVRlZDQ3UXNQTHlYcll3TUlxQ2tWaGY1STZDdExQQ3llRXlpWmtudkJrdzlSR3gxbFI5c3Q5VXp5NExVSVFKeVoyZFZvTFNMNjAzTkM1M3h6bWgzaUJSNnl4WWZTS213ZmkxREdIQUxUZlRvblNCbTRWeHZpNHpwalpKaXRLTHJpYytpY2ZXMGx6Qjh2NnpaVnpvUHUyNWNHTzlacjlKSTFOamNnanZPalcyNEduWlNQeTAweVZvcnRSeXZZK2p6aitRZldldmx4Yjg3bUFna1pRT0YrZ25vRXNPak0wVFpSRjlOeFNVaXc1bHJEdjN2UlVQZ2xyem96TE4wZDVTaXRkbUlIS0lGL0VPWGxXdGhLcUVHNllCQVhweldCZUFMUWx6SE1VSFkxdWdERFNzeS9FRmMwTVErVXJkZkloOWNQMDVEYjJHOTVVUm8rSlhHNEpsOU1UU2dkUDR6WVBJMkRhWkhQbG1ZWHprakFHODJhaE1uMXdRRVhVaXcydE1LMVJQVk5RVStsV3V0aklYWDhDcU1aMHhVRWsrREw5MGNmQWpuN1pLU1Q5S0hOZWFCaWJoaCtUcjByNTBCRUthdkd0K01aVHRQZnpTWWFRa3VHZGQwR2Rienh6T0dvVGMrTVdZOVF6VlBFMHovQllidGJOYUVMdXdXdmhjZFlUZnlNWVkvelBHU09WTGp3d2oyUHZKQzU2M1hrdTBFWW03bk5oUVUxTGtyNnNCODNHNEdXL3FRKzZ6VDNsbmR0bCtYUkVETGVKVGpsUWdnNXQ1MXAwM3YvTkZPeWNjV0s3b2MyZHB1c3dER0w5bkhqbkdrSXBKOU5zcllZbXU5RnhlcGZBRnRML2NKbW0yRk1kUjdLSEJDNDhvVkFWNXVOWXFYdWJMaG1QRW9vQkhNRmMrWWtmazBCYlhlTmlObmRCdERXb082NHcvVGUrV0l5T1JVNzJUSFNPNEw1QklHdjZ5WU9wcitpR3g3bjNOVDF0czk3VElOVTUyWFJMRktxVDBzTDhXcjNKVktLa3NXQWRTanZidWlWT2l6VU1QM3VCYXhZNGFnYXBzYjd0eUloOVUvVHpwMzJ4Rzg0U1gwNG5iSlpZNGo5ck03TG1iNDJOK093Q3A1ZUNsN2xNbTFDdlM4ZjhQdm9hdkJ0VFNKcnAxKzcrSFN5bWdQS1Jid2RvcCtGSDlFV0k2bSswWDMvS0xTVVhYVEg0N1RtbHlsTExKQ2FFUVpMSXBuL2dPTzNKK1BhcEpMNWtYKzdjakxWTW5lR202WmJvVGtRQUZDU3JBUVdWNFMrU1ZFaE5Kbk1tVVk3UWZ1eFNLYmpyVVlMWVFYeE9HVld2bUh0dlM5ZEtJZ2drY3BLR0hLZWZJd2NpUTMwOHZSRWhuRDVnU0YwZkhYOC9UMWFkK2QySjdpK3VnbE41dFJleVFZOTJOVzFsU1BaNnhqNE01WHk4UGg5NXI0UHVQb1ZsbW5GMjhVaTVqblFqU0twWlFLMi9nK2kybDR6MGNML0VUV1lnTFZXQW1Idk5iUVR5dFoyQkh2ZGNDTnBZQzdiZWIyOUpFS1JDTzJ6OFd4Z2JDWWpoZGZNUUU0R0dFVkliNDE2eElDbmNCT25QeWxyVE91QkM5ZHNrdmRIeUU3TDFxandKalZhMkQ5enhZTmRZZXlreDR1am9oYW4rd1VCcGZNVkhOZmk2UmdPbEVFSjl2a25hWDVhZlMrY0FlL21wWkpHd0NwQjdWWGZhUnVIKzZPcEdrYjZNYk96b2FIMlRoOC9LUWxwS3czS0NPb3NHUW4xMEZ2aHZ1QVJFOVBXd1A5Wjlqa21LUWZCbUFwMnlOYTM3NERPVzd4RTB3SUkzdmNTNmJkNGUwVE13emltVE1iVDZUVUVZamc3YWpobC9tV0FlUXovZEs4VW1xSURxZTYvOUgrUFlpbFY2ZTJVeUJqeHJVYkFxalJyU3R5eWFYd0xRdDBPbmxtMzNmZ2Q0Ull2VTNndjlOejF5cDd0QWNYSXAxR2lPUStOOTA0Vkp3L1k4a2hFeEZYVjdEWXlIV1pkRGExUmY3dmZzTFBLekRjZXF6bEZLMVdINFd2aSsvWXFaZjV3Nmg4KzRINWM4VnY2bXV1K1pUYlUwdzF4SnJUSmtoSkc4RmxoTFJmajJjbGFUMnhPdG5xTnNadkx2N3l1WS84Q1hzQU9yYjRwbUhxSHNqZ0lyS3RxRlI1eTY2aW5pOHNlOHRuNHJSc2ZxNW1ORDVPVmhyYnJwbmlweFR6bjV3K0hsU2RMU0hhWGpZTnRnVlNOMFBmWm5tc2t5TURUVnU5TE1ZMmtxTEl3c2doZ3cxMThTc1dNSFpVWVZiUmlWRjFDNkQ2a1kxbXkzeDdteGRocFlQM3FKbVFqU3ZTZkU3ak5QZnVLRGI4MnhBM25DNXk4SVdQbzQ3QkJFdmtCOHlwcDBWY1pSdElaUjc2b0RaUzdxRFcxUFlpa01wM3hYaWZSYzloWVNzeitaTk5lT2NhWTU1eUdtSDAxbVN6V3YwbmNTWkVranRhTHF6ak1yd0NtZlhHa1EyK0hpTGVPTWhkSGZ3R3BxRnJhM3lkdVVyU2dWMmhWZ25nSjhGaU0wQiszWGpVTm41Q1BFSThZcitkYU5DS1h0c3FzaXF4MUw2UjRZc2txM1NiN2M3amVXU1gxSFhkeHZ4dlZDVGxrTm5UTnBqK0ZhSktoMGJPR3dqaktWMXBCOE1CYzEvc1owUnFzTHFKdDVsN1drSXh0MWtEeGVWQU9tYjFUcTFXa2hIbUVPUDdZQVIreW5ZYzlpaXdYdGZseDJBU2FhZUx1SU0xOEd3SWNrVk5ob0RJa3VnNlhEVGJvY0VhZkZDbkl2TkRKbFY4SksvS0p1anowV3IyWXNEN3ZybHVxSytGN3UyTU42QXgyeTZsWU5TVzNnblpwYVFNZkFOaVlmRk1xSjM1WUQxTGswSVBSRThFTmtsMUlrMEFuVk1mQ0tjNmYraXMxc0t1RVN1d2luUmdhU3JmR2RLRGQxVDFkelg3N1E2K3FyY1d2Z0NjY3d3NytiaURHZFdZcmtvNGw4MDBjZ1pvQy9VaHM2T0huYXB2WGM1QTNRcTF3eVgvMUE4WWRzK2d1eXR0SitGcHU0S01vdFhJYzVjYzNSK2doSDJNMXNydzJZQmRlUzNCMXFYemFseTRNa0wwblFlclJyYWNyOW5LYTdtQUd2QWxiU3Fsc1lvWXh5dkF6cVRVN2YxODNWbVV5a3B1UGVvdVA4S2RhSS9nTGd5bUVJV2JDV2IycDhKQ3NwMHdTeE5iUVBFMk1xM2c1VG41ZlQyZnpaTzlUbE03NHNPQXl2N0NNVjU4aXIyaVpyYlFPRXJ6djJSRUJMa1dhWWdtRytuOUpRaFlaVEhSL0puN1Z2R3RwbkF3MDhuUkowd0Y5SXRNUGZVVVZMeXFORWJJYjhKdTFiVE05cXVPL1k3enEzamRMT1BHTGVqdmMwWkRVeGxuTFpvU1dsWWJEbW5xMXlSREhLb2d5NGJpeTJCaFVDSDQ1Z0Y1aUxwd3pxdEtZYUZzSHp2SjkxSlVaWElNL2dGS3VXRkFqL3pzMlF1bjZYTGNRbXdaSzhIWnlUYzhrTnZ1Wmh1ZFpsYy8zMU9zWVBBT2hMbUY0dVEzeTFXTXZYVXZ4V2lPN3AzSDZWQlVRcUplb1FCSDZ2UzRoZjYraElnMElDbVFIMm5nVmxobG1YbU5OZXQ2dHRMcW5PTFgxVnBnaXZLVnh2aGtoalMyNVNrOXhVNk9NblVZU3VpSWhudFJydXBEamdRWnl3M21yaHRKclJuNXB6TENob3pSOEpUMnEreDVTenVaUllnLzJoUDlCNEs2MFVPVHFvY1d4NWllOWJhZE41WnlzVkZsUXVVUzNXMVpEV1B6RC9ZcS8yRENhRnBKQ29jOE9wMExZTHFodXNMMzQrVk5ZS0tVbGJRek13R3pRUFRta0txaGRxMmlLUG53OHV1Q2l5NDZ5Z0NTOGlWVWEwT293UEVodzNKczJuR0R1NWZHdGJSWkRvU1ZESjlXclZwV0gxZHVUS3U5VmNwK2lzbkw2V2dzTWkwaHV5dUJ1eDBoOEc5d2tDUTFwTzVZK2VKS3Z4dmVKU1B5SXlZSHNuMlhOcTVtRlBuVVFHZDQxakVyczhvQ0x0TFFpVEtuTkE3RW5wSlFNSmN3S3FieWV5Z0NqWjFFOWc2enZ1eTV1Q25SSTVOcG5acjdGTExhOTZYdUdmTzE3SHNoTHlCSjVkOWlSaHl5YVplckJFYldzZ1lYcUd1c1czUVVlc1Q2UXM4UVJSTk40bHB0MHZucDNJckk5anM0Y0NsKzQrZ3lMY2s0cktnSXBCMENMNTcxTnI1emI3VERSYmNkWjZnMExtY2RrWTN3bXBrNGVCeW04LzFOWHdZL1p3dVhKS3RBb3Nid2lMTWt1TGJzSnNVMEx5YWo3a2J0bU5TNlc3aWM0ZFdMK2l4UllWbGtQTzFQMTdrTDRNQU56SzZYb0Z1a1JnRStDK0tnUExxcnFBZmdIV2JsM2twYWZ3eXIzMm1GbkI3VkhVNHlmUkRQZHVoMXUzQVV6WmtkbkZvWlFYS3Fla00ybHI4eW9Lb3VUNXBxdmgyQ256MHFMSFJxVkdRYkMwazdRZDJBSlJSZ3pveUZkTWErQU5KUHFJOUlBY3Z5ejhLWU85ZTgrWEg2MUdONTN5enFuOWdiUDFMQTErVjhBZUpLa2tRbS9LeXZzUzFJbE96VW9nWXdTeTVaWTJPYmdPS3FRc043dGJ4NU5ad1hhdTZLN1BvL0R2M0J6dzV3T2VsNkFSZEpjQ1ZhUzJYRVMwOHUycHBxVVFPSlh2Y3RnTk94YXB4eU5pM2NPWUtRREYrR0hBeE1rL3dRMWpwTEhseldJUndSR1hkUjVnUzVKYm1ZSHQ0dWc5T0tkUk1iYXFjMFBrdVhYME9UODRUbGs5R3FzY3dsSkJwUERiWm9GQlRyaXB2d2hJNmVKZnZZWnk1LzJqUmFKc1JmNzl4cHM1UG9uNHFJNHR4RFplQWxxYzFHT0dhSC9ZN21sc0ZKTHl0WG4yTmZ5QUtIRUxNY08vaDh5SjAxOXJGT2Urbng3ZGtQNnBuQ2ZJbGhzS2cyQWdqd25EWXB2bE1lVDlIa3duMmY3SGkyQUsyYlFKdkhqMUJ2QXUraWYwblQ3K2ROdFpJM1k5T1NuRHZoSVNFMHkxWDAyMm96SVNIQkdyVmI1elBuN0NiUHFtOGsvcEFlTnBqMjdKL2d3MkRUdHJOTXM4a3BlTEpHVlRHNm92bUI2VFNHL1ZVMFdiUnY2QXQ1V3h2WXpKdE9PYVFzdEVDNXBBSVF2M2RPVHRmQU5HMXFBZUMxRjlyYjVuWCtQejNyQnAzYy9DZkZjclNnWjJQSGFjSE9NOWtueks4U09xcWxQRkNvSmN1S3IyWkRMbDBCQzhqL3NCYVVuMTdZbWRPRCtHVUR5NGt1ZDRiVTIvTXNRY0l2eE5uQVM0aW1pTmNpd2w5TzhlQ1RlUlpHWi9WRTg0WHh4ZkQxQkMrNDMrQWYxK2xuUk1xVjBtOWhkeDY4TnFOWU9udyt0R3pvK3ZQdW9hMTRPN2tqY2UxZWFFd2ZsdVhOaGEzMUdIR0Njbk9DbVllZDdwSWQ4ZDdSRSszQ3R0cGk0UkJWcFo3b0F4T1lsS1lCUGJKUFp1NWVEdHFSMThqN1B4ZHVBK3l6ZWhrSXdCTzFpWVJVQXE3VnhrWC9ITUJDd3crMmdzM25URm14V1NQM2RaazZGRU1vRzZpSDRSM0tGL1V0QWk2RVVqRVVGTjhIYjRaalh5RmY2L056VktibkVtd0thbXJ6OGRjdjlPenI5ckZnMG82QjRHalBTRGZTVEpxdHBPa1NNYWtYNE5JeHo1c2Q0dFZKdzBvSis3cXBUdHE4T2ZyLzFUa0wvTlBrQmJLTkdzbEpSd252U0ZNbDFpeFBDMm9QZzFVRGtzaHMxTTVCSlpNbDJqUlp3bU9WNEpMV3ZFaUJBL2NuMDJJUHpLNGw1ZUJKWGF0MDZDcHMrcFhMdW5YcTlLbzVIRFRkK1BVM2dJc3Q2KzJxUXVZQTdVODYyc0h5NEp4ZnR0NWRFTDh6ZlpLam9YMVVtQ2k2UFRBYjhNZG83UHcvaE5QbDVqWnYyTEc5Nm5HeUltRkpTaForMWM0c1Q2TTdNaldqRHpnVHlyMnRjakFMODhrQzJFTlRDSnVNUjl5ZUlXOUt3RExTUlRYYmdoY2N5N2NVTkl3SHlHZEo0U1pmQ2wxbFJKZ1J1dnVuc1FOUjRSUzVUMkVodmp6TW5xZTNrVWtsY0F2N0xCNXByai9IZXBoSm94OEtNa1JRbXNlU2wzQjZZUENyU1puaHNwM215OVN3U1F0MEgzS1hPdEpLU0dkdDFlQ2VoZUg4UkczWTIveTRKaXhJb2VDcWN4RUcvNDVob29oUG1FOFVoR1l1UmJIRWxLbXA2cEs5eHNqZk9GNGdabDRKSmJ6YzNnSUNxdGpEMEY3dy9TSGJwVndIYTgxMWxDKzUyYVZxalJ3UVRYVEF2eHc0STNSbEtQUlplUnp3VGhJajd0Nkh1S2ZEbTdVaTczeWxQWFVZNitMak5GM2JRckxFMmttMlZLUXc4NFByUmlRN0k3WEh5cXNUWW5NdG5ZSDQzYVJFMDJrbXI1b3RFR05vb1luV01aUVRISWNiME9ZTU9qY1JUMzI3TDNwNlhwc1h6NmVTdzlmOXU3N256Qk12L09raFcvZ0F0VTFBTjZ3WmgyVkY4R09UZ3hCbW1qVjZoSzE1T0l4QTZ2ZkZXRzBLSGxLdmpBQW5VRXd0ZDFwV1lXRGM5K3RrTTlHMjJEQzd5emZsVXFKVFNJVWNhSjNtcTZ1ZXEydHUzSmJ3ZXo0eEI0ZWRRdlFGZ1J1K2w1VTk2Y2RtM1Jhb0dyQTZZVk5lK3VEaGJ0cUk1bklXRS8zay9HUGdPTmpoVjlZZW9wYkEzWEl5T0VtZXRwVU9ZQkdDcUR4VDZzdWhtWXJRcjVwTlFnV2VMNXJvNi9qQyt1alJJWDRaZENSTlpvWHV2OGtVVDRYNW5QVU1DamVYb2pzYVBzaEdMVWxXZWtuTm9pWkhXZGtOZ2lFVm50TkZSek5sOXJlQ3llUlVZWTRDQTZhTC9ZVEE0MEs4eDd3aXhFK0FLcGlmSHRqQU1uN2pCL0xyMGFxZ1pzV1lYajk4SVFLUFo4cUhKRTd1RGFNRTJGWFVRRFp1K0czbkdlMFJBaUdlT0hlbXZaRktQTzFUcVNiSmUvRjVsbkE4Y1RETE0xSFVyTGJHc2loSUtEUFRPeTM4cE9EcmdNVFNaKzJra2lmcjQ4dFZBeFNWbmFUT2dwYmloS0czOUppMmxLNThJUFY1LzBpNXRRQzZQbi9rVXlXVnJwTEluVW5IbkJucWhvMGhRaWc0TTFJdHJzSXpmcDZGenhTWHRDYXBDY1BCMTBJN3hRSldVb3BZR3haUnF5bzhFRXFmcWZJZWpFbDUxcTh5SE9saU1uUEZwOC9ZSkVMVG5ILzJ6c2FkNTA0TFoyTEcwTkljR3p1Qm01anlYTWJqMFdubEZtaytGQkVMN0Q3QmhLWHVlVWdBN0NBWEt0YXp1ekF2QXpSQlNCRmVvUE9GbWovOFE1bmErWFUwY0NsVTlOMi81ekhsWmlkN2wyMG9uc05ETnRNQXlBanBEZnpxMG9iYm9INy9pZ1RIMDBBdHRuYnJYTHpSSjVhS2xnL3QzUllPNUZjWEpPNVpIOERXVWYvOFByTFF4TkVqQ1ZnelRUMURNVFV1aGV6bXJIVkQ3L1dYaVlQR2E2SGZWZ0p2WlM3S1A5d2JaR1lFZS95RC9MYWZNTlZ5akRaOURZNmdFS2lYWVhjNUxaUXBJMU5XWVY0cElJa2xOVDRtZHdFNG8yNHNmaHBEeFNMekIySnVPU203dk51a1RhSzRVM3ZiVGNNMys3c2RVckRPUklNZ253TUVGVVFmelNadXFFUVFBTm5teGZCYmJrVHdXM0h1YmJ5SnZSUEJtNkNtb0w1R1ZsOERzSFhvV29raWIzcVNUSE9rOEljWlVnVjhkZEQ2aS9URVJGSzlnalRHMThMOGRqdSs0eDgxVkdpY05Kb0tGcXY5ekNSTUdVRU9WVkNaa0FwdTBrOEovVG82Sm5BbzI4UXoxclpCd2s3R0xuRUVEcEZEQS94ckx4NEVjS1pGN29ZSlhCTGN3NFpJRVAxNW5icVBnZm9ueHE2ZGZsZm5OQktrZkJMZWNoa1d3cWZFK3dVZnltbW1WS1BLRVV2c3NyZU5QdVdGUXZxODh3Y1ROQnlCdGM0M0ViZWFOYi9OUlpya2Z0elRBbHgxc05QdllsaU1qNWowTDk3VkVHNitVZTF4YUtWYVZLblV6NzkzVTBocFpmRVFBWVpKS1hlb0dSbkxNWWtvMDNWVGtnRU5zVkoyWkw5WHlpd0dUS2JYSkZieEJqdGVmcFVSUE9WSkU4bi9wNnBQZmhqeTdWWjFDSU1CYjFtald4RUIyWVgreVB4L29qQWY0Sk4xcS9rZ1h0R2xRbWtDZW9STm1oUlFEWmlGcUJsZDUzMkEzaDdWUGUybURaa0tXSmxlV2d1WEg1bDgzNFZJcXkyRXJTUElkZ1Zva1B0aEdxalJZejRnYzlPVVp1cjR2NWk4NFViRUREVU9vRm5lVW53Y1dld1RMVDU4VUJIZ1dPY1NLK2pKZWhpYWc2aHJTSXZxdG1OVjduUm5TL2lOcWl4Sk1JdWtpR01VVTFyMkhFYlVFSVBpdDhFM1VlVVdxRE1OY0hSYjBDWE9PdGRZUFhNYmtZZHY2d2IwWUx0clU3dDR2R1dMUFcyWVhobWR0YkhtQWw0S3dRYUZaaGxsdnc2OHovVG5VN25DRzFUdGtDQzdna0FCVVBCRTZJODBmbkRrM3kyLzk4c2oxc3dqTUR1Z1VjR2NFeVVxeTdBZ1JLcythcEpiNHE4MXNySFNGd0JXZElYdlhDVTZtNkVub0JvSFM3NjBIT1dsTlNnbXNpSzl0OGJsMVpWdlRQM3RZSkhXNW9ndk90eFk2aCtkRFlPajQ1WkFNYXY1RFd2WWlIMEZwblhRR3dZUGt4ZU9KSERLdG03OGhXMTFrMDVKbDBtK242RGoyT3BjWEQ3aExBOHVZMEk4MjVIOVJ0Qnk4NEVCMVplZExab0hVQVF3elBLakw5NiswbU5ncmJCcW16VDVqOXdCTDJPWlhiNlFGRFcxSHZReGRxTno1ZG9HZ0ZuRGFJdys1VGV4REFGWWxSdG1Qc3BaampSWXhCWFVNRUFReEZpcFpTRVYwMEE5TUZRaGJJdTNxNS9ITmxNUVpWOUZHaTltcS9hZm9UMldLY25TWEZ6aEpmbmlZWmI1Snpkc3cxSnFEWTVoNTZpSnoya2VhaEQvUTdTZVVDclJCUHB6a1BMTU93L3hMOGdvNWdoWTlkampGa0ROZEJiSjNMN1p4Q2JyenNZS2UzMXM3Z1QvNW1Iay9sSU9hejR1ZEFZY0U5Rkk5TjF0d1JUSjlXTWdXMlMyZkNzZUxqbTNlZGxEeWdFR1UxTi92QTJscG1sbWFON0J6d0toYjRmQncwNW9RUkY1Y3h3RjAweXRMMEdpblJQTjFJcXBBVkdoa1BpZ2J0VEJpeTh6RWJwcXQ1N2V6cUZtZFVXTEh2aVJ0NDlOdnc2OFNQalZTL3pjY2dvcHZUU05Ca1JKOUJiaHRFZGpDNUd3cGkxOVVBV2RjUEl3SjVqSGpNZnR1VWVHMFV5bFVBV3hFdy9HK21uMTREUmZCUTRZNG9PQkhvVndFdkN3TmpPVnZVRXJUOStZaElsaUIvRWxKMi9iZjlBcEcreVFMUUMyTE4wME1FeE5Xa3JtWjBYSjVPODFoSHdkMDJkTGhTNGx6QUtCdWJDMS9kYitaTXpyUDNXL3IxN3VWd2lpL2UrS01Kb2JublN3OTA0WDYvWGt4VURuNVVieFRVZ3hWYTI5Q0ZlaFhiNitpT2RxWnJQd21UbW94WkQrSGMwN3BCblBJczhRMjd0MUFrSWlORTNSSndhY2MrbkNkak1PZWNxL0tGZHYzSTVNbDBtUGhQUUZyU1d5SW1kTXhSclZWSlZhQlJ4Vlc2Slk1M244eXdJZmVhRk40RVo1UWpTN1p3bStzSThKY3NGSm9BbTFCb0kzUDg0Z1F4ZGhiU3ZHT3cydjNCMWMzUE55U0srVFR5VW5BUGpKdHpZTjBtcFBZUmRQT0lEZHp4MVN3VSsvUTZnUUpaTTA0aU1wS25ncThEUGd2U3FicWQxRm9hdnRoWXVUYUk5d2tqSE5MRUlQdWhtdjdBcjhyaCszdkxOSFlUWmtWRmRuY2luSHhoaUZWYzdzQ1BZNko0TGFLRmJxOEw0OWY5M1pRd3BwSWh2NnF6SUl0MG94a0pkTzZ1bThCYk1DVXpRcDUvY0g0c3pGRDRUUjMyOEtXR1RkR1Ayd3N3MVNuSXNiMHErUUtreWdEOGI5bVlwZmZQRzUxUjd1NGZha1BjUjNLZyt6Z1ZOc2hoTW16VUVDL3gvNCs1L1lZdXBzR2owMnFtVVo2MnlsUkJ6am00eFpBZnU3UUxBR3hheHpZdzVwNW94bks3Z2lKREcydC9VTWsyemg3Sk55a3lOTGc0NGZrYUlJd21waFZzM3hBUG02cVNOL2RtZlN5S0krVWVqUDlBZVQ1RisrandKL0EvaHJsc0hSK3pNbGdyemRMQ1NRSjVYSFdHZkhNTzVWckdXc2pWQzhVRk5nazRmZ2tvSXpxU3gxS3oxOFRkd3Z5WXhTZStUZWw0LzZsK1JYTFp5bVB0eVlWbUxmaUFKOU52djR5QkhSN1VKU2FZREQxaUNUWFUvdHBvcWlMTXRqTVltQk5tc29hTlc0RWtxaGMzVlp3MnVuemJhVjZjRmdscVVDcU9IMDZ0bWZ2RW1hbG4weDJVUzlTU1M1UENDemhyelkxMXFWdml0T1YrSkhld1NlM21LbDN1SjJ0eGc2emt6V1hrU1lSWFZJelNCMU81TXBWZmpQZFFsOExWdVZ5R3ViZUI0dXZ2TFhCUi9zYVkzWFlmNDFnUUtrVkQzQTVsZldVNldYZTlMUVVLUEFnNVYxZExDWGZYSE5ZNWlaNE1tM3JDdHVkMXR4eHdPNHV6Q0pVb2VGTHRNaDlFQSsrZUVaQ0N3OVNEem9DakhpWlllOGZzc0dLRWc5MVFuZkd4aFdGN3FaVWdTZDN6N3lDVUJWa1BYL0V3aGNYRGFPN0VUbDV2eEliUXBaRm1yQUJxOVYvMWxNT0tlZC9MRWtsc3VRR0xKZ004c2F5VzQvRytrYkQ1SzczYi9Ka0thREVRcE4zZVRIaVBZaHJiNHYxNEdSUE11N3F1WW1ReE1JSEpEeHNvbzV6b0x0WHdrQnM5TFhqK2IrZWZ5a1JVc2ZuMCtVYitKQUlEeW9pM0cvbXhCSHZUOGhrN0h4RUlyU1I1UzBFUm5rR3RGYnJTWHlkVjlIbjNXdUxDcHhQVFpCeCtRVVU0QW9CdnJsakt2ek5vQXRzNGNvYXhQMDhsNEljbEpjZW94ejkxQit1dDliRHBBUUoyNDI2K1dzOUplb0U4ZmY3QzkxbndRbHpaa0w3a0REQlBBTEJRMlEwZ2pNSXhsS1ArT2JFOU9rNW0zZE1mWnZ3ZmRhZ1VTV1RSNitGazNhMlZ3Q2RCRXhhTEpWNk1Sa1BPNnBhTVJDUUQ2UEhaRHdLMXVnZHhBTGFlNzJHb0VMT3paamR2akd2YjZnMVU3dHhxK2E2Nk1iaTBsWWE3RmlIQXNSRjM0WmFGL0lNYTE2TGZpaUNhODhSbnhNZEtiNTZobzNwSXk4c0hUalZDRGlYMlh6WGJ1NnN4MWZsb0c0cGt4dk1YVGZwMXNCQ3psQ1g0ampLZndNaHJqV3crTXBCU2YxaFpVMTBIZU1JbHBZeHRNclJNY0NzSTMxd0RvcmpIMitTY0JNeXU0Vi9oRUMwZEg3SmpESCtxSmZMd3NzbHpkMjdBVEFrNE0yYnkyc3hJU3NxZk9mT2hUMUJSdzdCUDhNS3RoMW13bzZFUDFTMFJWMXNFY2JaeThlVDE4RWExVVRLb2hlQ0VIZVp4bE1uR0dUYmlKaXJ4OEw3c3EybXk1cTlDMGtTdEcycHA5a2ZZQmxFRGpDMzBNbUFTUHR0N0pPL0MzejlxSHRWck5KZVVRYlR6S3ZyVzVPb2VReEZ0WXYzeXRBNW9JN0VnWmNWa0RpYW54cGt3TStRSlBRTHBpTlprRUpUWnYyZ3JqZVVHWC9iRTlUaXpEaXJ3dUpKbFdLVGk1aGo5Z0g2YmlxakQ5S0w0TWFuN3M5alRjNDIyekNaMnZTTGwrNG4xNGIzMy9oMUdNOTBHMlRPU0kwVXJKSFZRaHBPYVZhMHNUNnZITkplQ3ZvV1duVlBwdXVZYndqbEY2U2I3c0JLYUVERTkxbXdsMlAyV1ZOWjN5V2Z4MDZZZk1XaC92SHJrYmlpcmRibGFnU0N0dUxMMHlvVUs1QTFsNUlpQVBtaG5hTnZ0RG10VlJieXlOWExIVXJsZzlUZnl6ZmxiZFJzeXZFM29OVTJ3c1l3dDAxbnJ5VHVlbTBQQzgrUGlXemVFNXJnRFVuV29mVS9mWWVTVHB2czViMXdSL1dvWjlwOWx5NlNlSkZwUUM3TVMxSFhuQmgrQ0pYOXdaK0d2UnU4Zzh3dFU2R29peTRITEdIaTUvUmJEK3BaQzBhZmdlTHk0Qll5L3R1RWZ3UUpWRHlVWGFhLzl6a1pKR2NhcnFtSTQ5TFptZFlVNlpwUU9jeGxlbzl6VjQ0SkV0anFUOEducHBIM240SmRmOVRGRStjeXBkL01QRk9LUzZ6TkFiZUwwNlo2TEdrOU9KL3dtSFRPVS85QVVYMlA1aHlqdHVsV2FreTlsOHJ5N0ZJZWxyMFVSV082RDFXTnBQcm5Nd3g5T25lak9IUC9LK0R1aXNWZkZMRG1JTjJIQmtZV2lOWFVoYzZEcW5wSHFhZGtaVE1WV3RpTUk4aDJRZzByZkZQamdjdHBYV3FVeVNFVmcrTC9hL2NWS0ZyTjREbHphTkdrdElQRE1JcWdibFF2dTU2NDhmOWFyWTcya3dUOGo5di9XVWMweU50ZUU0a2t4akdMLzFiYkcvRVlaaEluNU9keGpUR2NpcmViNC8xcVROLzVZVGRTQkkzRks4ZHRIUk9hL0g5eHhDdnRQWHB0a29BUFlYVWNGZ1pEcmdkQUFtajZqZHFiVy9kQzh0ZmZmbGtUWlVoQmNGWm84MnRVQ04rZnN6a1lFNFRDTXp2UFFTN21RNUI3YjF6U2FSRWw2M2dHZXZ3L1hyVnU4eFlYT3J3dTRXdi9PQ2N0Y2R2ZUM4ME1jOGxMMU9yUHE0RmdKVWgrRmJIejdoNkVjTVExaFg2Z1liajY1dno2cGk5Z3Iya3pYM1MrUklZOXNrNFlXYURxZHJqdE52b2JCbnhhZ0NObW1uRDRYeDRsTklJbmlDUU01dUJjK0xwWnc1aEZ5N3EwaG5DdmgyeVpwQ3Y1a0NPSDdWaXFySkY0ZDluY3Uvb1hzRUhZU1BCQTg3MlRWRWpveFJ1VWVqcHZGQXNjMGhCVEpjejNITmdLNnVKOTljSFFyRDJPV2xZTERranBFemM0d1NjdFRJZ2RnMUVoUVFlc1g0MmhJQm9yL0RtRHNMU29WZ1E4cDI2YUovWUMvMittNWt0QXpUTWg5bFo5cDJ5RytpcGpQNmJZSGFQNEd2OUtpSXcvaXc0SlF1NGZJcGZkSG91WHhZYzNJaUhCWmZOWnlQaEJHdWtHOU1hNVhKVHlwTGg4eGg3RFVkd09kaURjeEx3a1FVN3FXSnFqTDFRVTZkWnZTM1ZXQ3NDNkpRNGVmY2xmdkNGTi8ySWhQQUdTcDlFczNoNWRISDNYRmFnMEZHUzEzRTU0SC9wOExwRDgxcXRPUSsxbkVPRGs3Y2RsalQ2aStHSFV6bnFuZnI0dS9TYStGRkhueUZndTB6TGFYQ1NnVTZMOXMvOXZzM0RNR2Q4bE1Dc0ViTW1uOXhMOTdRNGNhNXZ6emIreEFwaXpWVTdGcENudnRZMkduVFNGUDYwa1l2Rk1meCtJSlJ3V1k3eVNWM3MrSHY1R3NYQmhMNkhoVHJKZXFVdGJmR25mT1UyV2VUemtSbG1aNW8yYVg2TkZHN09EUkd4dmxlSm5GUjErWFJ6Smt1bDlaLzh6UTdNdURzMUZkSFVPd3FQcXhjNVo1ajZIM2NYNHZIdTV1d0VpSWgwUW9wUmVjNmFEVjUyN0Y1ekJzRUE5MEcxM3piWGdOMkNnK2d1SythYnMycjhxbFVpRXhPUVVGQ3ZGZ3hjWWNLTXg3VEdaZWJDZGhvL3VwRDgyNU94TTBOK2p6N1pQSmVMZnJIL0U4R1Q2UkRVWVduK1hNUURlczZQVlpqN3Q2dmpQUWNiRWhTSVBFZHVlSFI0bG14WFFQME8zWTloYmV5STcyQ0V6L0xQT084a1krWGh4V0VRZmRLRkI3R0k2c1RvVzRxTHFGTHJaTklOMCtUUitJYWoxZkxLM3d1b2RLOUphRi93MFczekkxczR0aElKUzBIRm1kVFFzNC81K0ZlMzVvTDhBSWlsSVdwSGJrMk9reE5KQUpkRU5weGlFOVlwaHVNblkwYjNaWHlkZnhhc1ZRbjhXL0Q2aWFUN1ZiTlBkR0FnL2taNUJlaS93ZGE2N1FLY01ISEpXams2TVBpN2Eyb0NWUmtBV2xzci9KdjVvZWwyTnM1R3Nhc0pJZU8zT1d1dFlMM3lWYnowdzFiTE1IUjRUK1gzbXNOL2ZreWNEb1p3WWZRVkRJYXJIVTZ1dGV6U29tZERjZEhSbUxxN1BnSDIremtPVVdWaVFQcVJUbFhqODF5cnVvL2ljSDFnNnFWdDlEc1c3TS93RUZDSWZCQjJQNGZ2VWU3YWNwS3ZwaHJ1MmJhT1poaWNqOW5CWUtRUTl1VGx6Z01CdmJXUnFUdUQ3bGZKK0FJYnNKNEF5cjh6OG14dE9EMjc0bVg3aE9qUDdmRTJta2x0ZHhzME1uUitjMzdPUXdmcHJuRmZGb2duZi8xTzcvUTFpM0s4VXdWbHBzUDhVbXYzcVhBZTZFRnRNSG1wUEtDVWVWWEhveVVZMEd6cnZXTkpqUk9CZVpXNUFFdjUyQjlWdlpSOGtFaGhrVXhTRkRkTGlVRGhrcVZPcU5acGdWdXFEREhnbSt5aE1hMjl0dFlIaktUZ0hNY2ttd0x0ZzU0UkR2LzhHQTNIOVBKZk8rRVBFYkt2M3BsTEZQNlY2UUFNMjVRcWIvMFdVTVY5TFR6VmVoUlduOG4xZUpQMEFkcUpEYXJTM0RjUmd6bGErRnkrVncvTlhNZjlUTmdSS0pyUVJxdVl1cWVGY084WmhLT05oQmtwdW9Nd2lOaC9BSzJSQkNObzJmMjFWbmdhUHFEQk02NGVMWGtGemhLREdyZ0VLSDA0V1Y1Y3R1aHp4S29WRTdqQnZOQU0zQ1N2dnZ3My9SK3FScys2VkpGcE93OGZXRXE1aTg1MWo3b0tLWGtFcURHQnU2ZENLVUd5QTUvQVd6QTdjbWMvV0dMV2NSUzNiS2ZsdFY5MmhNc1EvWkJTRlZadk1mT2dZNndmU3hVa3FOcG9ML2kvdWJrdERUejljOVQ2bmQ0aEdzQnp3dkxPRXJMWnB1OWtqT3JPcFVlK01GRzJsTCtBcmliWFd6bmpxZzBYRjQwUHlQZTBwaFk0d0ZHVW9YNy9GN3N3a1QwL0tHc2N4cHp6d0hJR3F6Skh1a1VKeWlzOEpuRU5FbllLNDBldE5QTU5MbkprakZSWmlCNG10aEIxNnJiYS9oTTdBYWwxalkvTXZNdnVTbFNIVFNkRVRiYU9kTWRXdzhkd2FhQ3J1cmg0cVFaNzNYN0VzL3gxMWJ0YVBuMFdNa2dZWmdYQTA5M1U4VUhUMk5qU2xJQStOcXl6UmpjZk9rUGJlWm8ybi8wNXBPTjVWNGlJWGNXTUgwSmNFUmZDTURHejRaa2tWVHZROHpZTnhqMEZneXIzbHVURllkMEd3NThQRllKYWl5cm5ONnBrWVhvVURzQy94WHJ1MWhYanlsdW1kWnM3b1ZPWTBEZWhXeWdua0p3UHFZcFdLQ3RZTnp5eEZySEtYRXFXOWdqZ3p2cnkwdHg0eEtteHJrYWF1NE1iUnRqN29GRkp5SWNRMWVjZ3I4ZHNtWEZZZlNGcks1OTYrOExaZWc5L2pWT0hBVGZyZDF5N3puRU5QNUNGWTdXVEd6RUdFUWxUL2crS3dYaHVKa3dWMWsyZ2M5eGdxay9SRldmek55TzhHbVlVQ1BTNXZwOTRrcGpTY05rM3hrYjExQlFVL2V6V0pyOUVHdEpDdHMvdkpqUHBWR0UxaGVERWlBZnE1elVVL3k3eHdRcXk3cXEvdjFjVFJ6eFF0SnhaeW13ZVBDUVIwMHAwUGI5NmZyK05XTS93aHFzMGkwZGZOSVd6S2NnUS80WjlCWTVIbTFUK3RvZUI5dWdtdDh6OFd2TGRSZXFZcHJ0dWs0T2hoTUo1aFVteThIN3FHa0ZkeER4clgwcDUzKzBieTBlSjFCTUlzMDExNG1NYkUzdGNxc0NTWVlwNUVDQ0IzY0tMemZoaU1qa1RWMlBDenV0czVsVE9INkt5ZzNibnF1cVB4ZEgyWnFaNHk3UUtuOUlYbjE3eFZpTHR4RTZ3TWZYMFVQQUlIQ3c3M0huTnRuY1M3UFZxdzRkOEdnY21rTExhL0JRVDdQazU2OGhQZ0l0dGF0RTI4MmU0ZmwxT2tyNmdGVW9kR21yNTltcHJRbEp6TGhJTlladURZa2RpbFZqdW53SnVPVFR1WWFaalU2NGF3dHRiMDlLZmVxdGJjREsrdGdQUmJSQUNsaUwxWm5DemcrUlh6Z1hsenZFbTlWWXNPMWxGYVdsbjJXWXUyNFBJZzZhVk1ZTGdtSnNmbHp4NTB1Yll4dXBWSmtqWDl4SExESks5QmZkT29vYnYxMk1RMUhsOGpodndBU0xzRGVGS2JDY2UyTDZnbzJVeUcyM3pWeXRNeDAyVUhBeXdMdXVreGZCRk9PdWlxQS8zV093TkZGY3gvdDhPZVlnM2FOTGgrWXpvV25sZ2haRkZ5RHZKWEo5U040Qy9TVnQycThPZUhJelFVUm02ZUNVTC9TUVl1blVLV1E3MDZhRkxONVlNMGIwRVA4YXE5Nm45ZjRNYWhFblh5b0FzeTZvYVl3bW9zVVUrT2RaYWgvWnRXR2pNblBpelZWVmV4Y3p0QVB4VC9GTjFVRmUvSVZNaGYrR1NiTGdQTnRUbWxmUlZKNVR6SjZPRGQrZ21EQ0ZaYTlEYXRqS0YxTmlDOEtxTFNvZ2VKNkRyMG9YSWN0V3FXK1BsemFVaFA5c05MbDFSNkROOTcrN3NFSzJ0S3g5VENqS0Y4Q2ZlRHpma0tnejY0eCs0em1DQnIxbW1YK1VwZFZSSVVLVGRnbUk4Q2J2TW1oVncyVWJYaFQvS2NMQkxFRE1vK0ZTVDcyOTQ5NUJlNEdVaVpzUGdlTU5WekcrRXlPZEd6ZE5iRU4vcUlRbmt0ZGQySWY1QzJtc2NndmxvcHFrcGtBUnVRNWwybStFbFk5QkttSGU4TmFCMVdlUTAzSlZnMTdSa0o3TW5peUlJcUYwc3c3Mmd4YzJsL3JVTDFuUlEzZW10NVBNZkx3cHJiMld2ZXlUckxVeHp5OXBLMnZZN1FKVXQxRHp0TDRVUkpFeTl2VFBUYlpjTlNLc3lEekx1R2FJYTlJSFBtZjdiU244MHVyS3F1S0F3UWgrMVcwWTUwczFraUFhOVZyRzB2VFVoWWh3R0FnV3paU2hVd1FFWGdJSWxKS1BPbVZWeEdoNzdmRTdxemFsKzB5dzFWaGpUd2x6eDAzZ2kvZm50c2pEbHo1Qm5yRWFBdUc5cGxRa0RlYjJYbmwyT0k4eTg5d2prcGgxZDN3a2hZZVpsOVhGMHU4UmNkYVMrUHJRekkyUmt5Zjg2ZSswZDZLK1d0RXpRZ2ZnL3BHOXA0Tm00akw2RjZwZzZzUW54S3E3MDZBVHp4N2ZRUnNIekRwSzN4MnAwWXBJNTVMeUt3OWF3UzNhSG8rOU1yMmRMNkpNL3YzclRpTDJjRkRuQlduMnVxVnczN3BEMEtmNElkdmlqYWt2RmxDdzBYaUJFdEZvZHhFSGF4ZzBSS1Y0TmxUNVBzenJ4aXZYR2UrSC9PV010eEtwVExpWWIwV0o1N2RPOGtOdlBRbE1uRmtsTzJiRFlmQWppZUFKbW45MVN1aU1weXVueVpCanl4cDFoOElvdmVpTWkxbVBPWW93MHFGQjFPb3RNRzIrejZibmg2V0p5cXdhSXR0TnpaMFQreTYzRWovdTIzczlRRnpNdTRHS0RtV3dFelAxZE92Slc3S0RwaGVVNXZMZkpjaEU3THNJdEF6TTF4QWZGVVRRZFVMeXQxSWtrcGs4U25KZ0dxbkJuM0J1TXljeFRNMW5vbFZmN2NWbnNwUnBNTEtEMXFzR204ZUp4RFJPZjVkWSt5QjlKQ29zc3Q4dUVxcVhIaHYzTWdHN291UDJuNDBBeXBHYWdpNzZTRXhVclpoOEtvU2pqRVFEc2VuMTNrd3hKNzNaMG9ob2xXSnIzMEszTlhnalVYMUxZUHM3N2Y3WU9jNXNwZUZ2cko5dHRLYnJQSFhxVmRkYTM3WUNsTEt0NVA0VVZDTzRsdmtQUUpFcHdvOG5FQWh2OHAzN0R4MUxucThtclV0NjN4YlJ5Y2g4dlZzYU52SERFUHYvNFBhd1JvZEZkMjgzTlNYdTFROVh6WVNlb3JpcENCdnp1UG5WOUFOTVlrZUd6Z3JodnNDY29jL3l0ZU1uWFJCcWJYczY5ejVzcUFMUEVodkpXUFhKNUcvMGM3Y1B5alVVS2ZBeVVHR1diZFk4TzZFais4OGp1WTZhR2RWeW41VTRYbW0xZjZMWVhtcHRBNDFtQjdhajhISEExSEo5OWR6YW95S01nR01tbkg1OUEyUlg1WjhvQWF4YVR5Q2ZkbmR3U3pEV2NVOFdvRjFZMDJ2bmVjSFA4YXY3VVVNUUFkRXZuTjVxNVBmcUU4K21GT1JBMkdibmpFNWE1NHphZEhFUXF0cGxscXB6dy91WHBKdGVKV0FRUzJJU2JBV2tScHViM1EzUVZEYkRYNkVBaDRVTi80cGF0RnRtRDhTTnRrNTU2bVR5a0tKMjI1YnhpbmcxNEZkN3JnNk42MGVLbGZOMVhhZUcvU0dLR0o5NERVR3d2b2txcDFiQ1NpNC9Zd0dxRDRMc05UOFVvTGdpWXlQQzN2OG9PQnBocHlaMDJRNlIvZ2dJRCtVb3JKcjMyUE1ZYVpTZjJuQkZDMFBhdEkrRFM0UXBXTHgwcElMOU9JYzdJM3VJVm00RE00UGR4RHJtOWc2UWd0MG02LzJlZGQ1cWJ1aEREOU5vakM4cmpocWFqWlY0dFlhSDhKZWdCb08zRjZDRHlkWEh2c0JmSEoyV2oyUkZlcnlaQ0g3eVBobFdHejhqVEVHd21RR1MwTGRyOFdtRmVHYU5Dc21zN0t0T0szdmprL0xscmJPV0hlMkRTNjBETHpIZkZVYm5JUmNwRUF6VGJ0RGxiZzhlMlpQSDlMTTJ2V29iWmVPZkwyc3hGYThJSjJyR1dBR2FVUXkyTVBJcUJsdm5PbS94N2xqODZoQjU5LzI2WHIwRUswamZ0SHMvcy9QR3g0akVxaUU3cGoxY0FwYVdzR3piMjFOZ2ZkSkVvd1FUSWh5OU9qNVdEV3pvNWNIZUNoSkF2WHluMlhDOGtjc0RUTWJIWUJuNmltU3Z5c3YvWFdpZkc4eC80L1hOcTlJdUxkQ1M0MVIvcVJlaTYvRkZDUTdqL0V2YUFsNFBtVXFEdVUvMTVDd3BiUDFtYlNpTUltdkkyZERBdis2TnQ0dXFzR2R6Y2J1MVJtemlucWZvdE82RXVIalZPeENrQVh0MkZrMWlHZmJRS0llVGsrKzFia1hNRlRwOFdrQWt0dXB2OGJvNXdRZmpxVWtJYjYwL2JvQ0k0WndIZzlid0dieVpLTEFRR0o5N0V1L0t3aGdTbFNidTQwUzJUUnpyNUVzV1pUN2lpR0VIQlpsVzZPUVpqcGVSVUJYTS95RTkxcGlDMnQrSXBZT2pDSVZEaFUrOGlzcXpKZDR5ZXhXNzBXQUc4RzZTMFBvVlBiMHZzWVF3K0NkR1lRb2g3b001c3VsSlZ4aDBEcGx6M3pDY0tkZUZodEU0Mk9zN1FaQkpjbExNOGRUOFdnUVZYbGh2NzRKTlBXUnZrNlpNbW8zREhQakpnSTBMcnlSaDlkREdkcDhwOHRvSk0zbUZBZ2xqRnN3dExHNk1kY3pOMm83bnJQRWo3bHkzczZLaUs5d3cvbmRGVHFVQmNLbTROdE0rZEhRMzZlT0ZFcWMvRm51UExPbUF3emtwYVBQZzJ2QUsxZURyNzRnajJJZm9ZWndkclJVdFErbVFqUjI2dFdiVnBIbC9La25vTXNRSDdQNXhTcTNlVkxnYTNDSFZjck5kWlRhN2lrL2V1bFhVazNDUi9WZ1RxRDZZaFBhZTN5S1N1ZktxL1dxN3F5Z04yUC96WW0rdXNQTklzaGFVWTRvRnBHVW96bUdDY25mUjRQNVBzeFFEZ1dBVGpHN1g1Vm5PMHNWUVVCUGZDTEM2UGgvMmRDRGhKbkM1YWxKbllaOTN5SHVzTDBRR0piRUFLcGFQVnQ2WVNIYW9MWE4rZllyY3lzbjN2V0MzQ3VZRENheC9qTVRHMTA3WUZ6Zlk2b0tMUVdIUERqWktXeEZrbGJQSlhkT2VwVE12V3R0aEEwNSs3RTFHUk5lN0lxRithSTVtTzVnQ0VCWXgyYktyR2RWbmlzcmJ0N0lwZTlRbGpvWjIyQmRoY0oyL3RTUVJhYjZ0dG5YekU2VVVrVTVYKzM3NTVYbVVzcVcxWUFNMnZXR1A3dVNhbThFZDd4SVZkVFVCTlJwMDAyNUdkcytoWGZKamRQZzRsejZGb0hNZTdoQTgxWjlSTVZ1T2pJU25ZVWtlcWwwaUUvbEIvR1VuK0Y0aHNaRlJmbjVXQjdHZzU2TFBiVzZMdDBRMWdkRzBVbHNWekxJQXg1RkwzNFVESUd6MHRQQVptL2lxVVkrY3g3UHM0b1d4QVYyTTRYQkdWc0RsZjVTNU5pL3pURUQ4MGp4cm1Ia1hjbXU4ZC9vdjgvaW9qWEdWdjNFYVlKcjNIOFFobkdLeHZSa1pIT2dHYThuUzc4NkJVb2pYMzJaNDRDcmg4OVhTZlRGc2FDRXhRd29NRFlzVUo1dFhxdlNDR05ISlFyVDdUMmVCbDIrb1hxdTl6M1N3NmVIcC9ONGVSZVdmQURxZVlwc0F1cmRxaWxiOW13NDRGbXpmdG9YYUtybXhhUms2ZWhpZVZNU2lDamhhTEszNzYwWm5CR3NrS3ZjNGU1b3dGNTdQU29BTGU4YTQ3NW9HZFNZK2hoaXIwTlJRaEJoTXZEWFUxM1NBMEVESmo0Y2xFZ0hWc0ZsT2lCNThUWU9GbFVUeDVQK04yUVZQNHB6dXF2TDdxRjNJbmF1U284dXBSLzl3M2hDWml5MlptLzJzUGVRK1p2YVBJa2FJajF6dUhSVDI0WnRTbDdSTm9yVHdkbHM1ZUlYRjg3bXpkdzJ0Q3RCOExoNnE1RzdNci9laGpadlNuZ1oxd2VmVU95SmpHanEyWFYyQXozelh5eWx3WG8wcjhuYUNWTkNTd3Q0TEtGN1N0NUlJMGV0N1ZHTVo0ajY1WWsvS3A4KzdkZVQ0eld4VHZiV2VhKzNUcllmYkZ1UVg1ZXVKRjE5TThBN09pT0hwWFBNY2txbmJDMXdJNVQvWkY1YmhrYkFhWDlsaThTZk9IVTBSS1hNVnRoQXRBUzZMTFhXcEQ3TzN0Q005ZlFNUjYraVA5VDkrNFJGZWNSWjVqMHlHNjBWQkhXYzJCSVBzZEdlTjMvSk9aUUpubnlVbzI0UVBxOGlRaHlsL3RUdjhsLzZKNDVDWmlwY1R6ZGFWS0Rlem56Y3JjekJuTDljTzBiV2hmc01sSFFoQi9maUFHazNnVm5VQ2JwT2cwZ2VKZ3FrdUFaa0FReU5CTUE3MjdveVhqSFdkaEZLRzB2Wnp5SGhQdVFXUjBHRkVDUU1zNHpRQmt3dWdWVTc5cmNzOVZaYkZGNXB3T01vRTFPR0JRZEM4ZFdZNktQYTM0LzRCaFpIRzVmUndRM3QxamJUMlNEa091Szh1djFrZmt3akNNTGxPUE1wdWsyS2cyVkZFSC9YMWEvbXpQRGdZZ01KNWJGS0sxYW13SXdzT21PUTdBTXRyMWFLRGVzSWJkekZlOHZrQ2ZYamNvRSt6NUNOQzhyZXhtZXl1ME12Rms0ODFtT3kzazU4czRTOVBCc3lWc0duRGpKbGZZSHpPbVIxM2t1TTVZbnJRMWtVMHdrZWF4VzlTRG0xdEw0TWU3OGIrR3IxUzJVeExqZDdCQ1AvdkpJK290bmxHM0tIUGxDaEFYU2xsMElaVWJudXFUd1FaVWRWZE5yVEcvZUFVcU9mNENoVCs1dWMwb2xTVzhRazNHY0lRRXhwVHZmaTJmUXR3bU8reUg2ZVR3V1JEa3BSVXNxTzFLTm5XRzNMU2hqa3RMZkZDRktpMk9laTdicU9PeHdELzdwcCs2SjNLMGJXL2M1OXd0Wnd6WllrdldDeDh5ZUpmNVNxcVJMUFNRZFVRbWF0d2VNSTVXN1RkV1ovT1JpVE5LVUtaVGtneE9iNzdudGJtcEVIbzRjYVc1Q25BekFCeGdDNVBRdWxhNXJNZXE0aVg4Uk9DZ2RsNFlYSW4yZWltelRNdlBPcEtZTlJTRTM5bjI4UGxERDcrSlArUUt0Z0NzdCtmbzQ4Vm9XcU84QmUxQ25PbStRaFMwUEZNenh5dHpXNFdjMG1rbmt2cmdCcnJWOXBUS1BBTDBZLzFNUHVYMDYvRHlhbXdVTzVNQnE4SS9XRldKTXhpWXdxREhSUzJSaXhDTjh3U2Z1WUxiR3EyajFmYUY3Y0xVajBDUU9aWHVTT0t6aGFYc2YvUWVmQTBSaUNDQ25XWG5iSWpQcVozUWlZckpMSkFZY1NtTDNEaHJMZm5uZU5FTWt4MnlrajJIaFhpanQxRzBIWW8zajFJMk9Qdk1RMDBsZzRNTktNMzl6YnVvdStFUjNuMWxUU2QrUVNWTUJ1c3NyTnhvQ0RMTE1oVUxlM3VBUmdSaUlqMk12THRBajdJek4zRDI5ZCtJZUNNM1NQT09NOEw1cTdzSC9McTk5OXh6V0MvZjRFMi9zREs4eTJIY1g5SDQvMU1OQTVXRE56c1QzYUNuYlZrMDZFUFJWUFc1WnN0SFdZamhGUjRKRjVuMGhvZVJpZ3pUdU1jZUFRNE5EeVpTVy8xLzJWU0ZSL2ZiUVlxaFNHMlNaUHV3c2VCZmNYUHhUSGxmYWhlckk5SU8rV3RQVzcrZk5BTmxEbDE2RnJyeFhFNmhmNjV6QVlGMkVBTmViWmY2ZWpjcE1SWUkrck5qMk00dFlnaDVSZ2NVSE45OWNLMWxibno4eUJ5eE96VnVzZG9lL0tDakkweXVLZGcrOTVYd2FTbDJkZWFoeVVlUDhlelZJYTNGYm0vY2tMeEwrN0JoRkRrTjNvR0FNeDd6VElad2VrRFZZb1p0d0taeFE1Zmdpek45MHRMc01FUERWZmVjUlVCM2hGRW96OFFVQVhGeVFjdEVOc09hTXNYYkNLVWpNVmNvS3QvZm9sR0xlaVoyL2RhMUxHOGllQ0drb0p2NVYzdUV0ZkV6ZkJWZWlidElxcEZWYXlKdm1JK0ZQb1dYVjJPc0hWVVlxN0NaY1RVL2lMZ3RNQVh2WllDWmFKWXVodEZsWDJGWGFqUEhIN1F5bDg2VHlRZWZzSmdibWd6Z3RnSUQ4S2lpdi9pQkJ3MXRhTkZkSGxpQ2xlNThKUTlDZ3cwTEk2TDNtNVF0dkgzSFNaSGU4bnFmYTlXSS9xZHJsRXoreUVPRXhiR3BNVTZZSE1wNDlYMjcwV3VsQXlBamZQVzArK2U4d2VGSTVpU0l4K3ZWcmU0alFJVmtNdkYwNmZMemlUUFBzQzNEYk93R2dIMzVrT0E0eWZkMUhMZS8vRnN0aVJob09CUlY3S0d6K0tRK1pIK1A2SlBaeXBDOThVUFI5dmNub2tSL3NIamh6V1pXWTJZM0ZBbjF1R3h5aGMydUkxTUhuWTJNci9mT3dWTjhoL0RMMTRqUktRa2xXdHl1Wjc5eXV6Zmpndmxrb0dLeDJNOUlocmVHZjlRVUNRME5VRi9aSmlnR25ucHcwdE0rTzdmZHd2eVU0emR5dHFmdTRjdG9DcGVUVTFoYVRXaWVsRjFsTWtBTXFlZDVYSG1CRlo3WVgvUTdZdU94TmM2UjlJLzhYZmwwbkF5VTI1QmVkMXJtV2lwSkVnMHV2Ri9SVTZQaFcxR01LNTEwQi9VWGJFUEdTL2xleU42eVduR0xDQUtiN2d6cXJkaHlwUTlHVXI0RE9BKzRETE9WNkNYVzgvQjhmSCttVW9OT0JLNlQ5ay9WSVRmSkNudDVaNXEwRTdja0l1bEpIWG1IU1pEeXFiemJ2SW1TOUJuV1JkRE0rVkg2dElwdTRqeTN0K0JLUXdSRFdBU3pUVTZsb2t3S1lWbHhyWjRhRGxmVEZub2lROFU5eGtUbkozY0QvS01GbXFWWmJQRXByLzFrUGxVZUh6eTFIS244VDVxRVVMb2ZQbkY3a3E0UjZwWXpIMnoyYnZMZlRSTHZZWEthWG12OEp3WDdXL1lqb2NrNmZTeGtyemRXbUF5b0RIdXJBb0pBcnQ5Q0dvQmpHYTFVdGUxeDNLdGpKVy9BdHI1NUs4M2FXYythUkE1RjFqL2VpVmMvbFlzbTN1SXNVUUhLQmhBcEphQ0JpMkszL0thWUo1UVRUUy93ZjdOQVhKTVEvMUdYcU1keXZaODRtcU5JRXNoVkJwWjE3dzAxbWdDZ3JnWXNQWTBORlM0WGpzTmF3OExnOGJtMW1sS1gzZ2NTdEZDWUdTcHgzdGtqZFdGZWFQdGVlaE9GVXlya3hnZ2lBd0hwWkdYVmNIVW9rRVNsSmQ0dmhINTY2eS9veGx4bGEwWktOZTdoN1gxa0dCTWc3RC9FYTM1d3ZKdEtzYTFTUzU1b1VWUGZLQjdNSEl4alB4NDRic2xoZ2VGRzJDSHkyam1QanRIMUcyZEpGbmxjS3FYRnk2Z2FzSlhJSGJhZFhIc1NsUU5ycHZwRVBpYUkyTGxKNy93b0lDSUdBeXZCMWx1NlZNUGVCTWsvdWFuRFJFaERPYksvVnEwUFZDYys2TldQbGU3R1pGT1I4R0Q1eC9FbjlaS2RUWUJTU0RPTUVLemsxdWVseEJ2V3JHQ0xnWUN0QzNwVGwycDJkMnJ6b0x6U1JSMlc2cWZmaXpqTUF6NkJqWkgxOTJaWEhwWFE2MGVHUGVJSVI3QjFKeVU5akorem5CRDY1NWFDSGIzcmFVd3hzYlN2VEdPNEswSHFtM1d0ckJpbGNGZ3B2SzhaY29Md09ESnFXNFp3b0Q2V1VPdUtEOE4rT1dZbDg2UVdLbE5xbC9xOVlwbWhUcDNhOUM5M1I3clhucFplNnFhc1AvcnNWcHRMSzUwUWJKVW5RZWFtZ0htLzBiR0c4aCszUzZvVFF3SXVlYVJjSGwrK2hBOWI2TGNkdTJqaDdCUEtKWE9QMElqaTY1SnNXby82aENVc3R1YXo5OStuL1NrdTJDbTdCcEpWVTZoK3p2OXNjTGJDcVVPdTg2U2NHcnRpeERLSDBuL2NucVFSU3hIdythaURGYk9CdVBLZXBzRU9xK09NYWZpU0I0aEJMbkNCc2hvU1g4VkJpMzNwcHZyQ1VYdVpSZjZTM2oyWFpmRHpIeVBZWXNTU2FBUE5pTFNaUkdLaURVaXFlQUNKSzJSQ2J5TzUyQld1ZzJLZExTbzJKOUJpejV0bW5QaWNmR2hsSmt3UkJwUHVDMU1XWGIxanZhMkxTK24yb0dFZnpaR0xNaU4zaHdURUMyU2dzQXFzOXZMSFVnMHJWbnhPdmNsaEpJMjdxQ20rSFZTTE5nS1dDWEROL2hoenpJS3BmTWgyL1V1VlZhdFFSeWRKc3lRbWJoaTdUTG4zdHFqZVpjc1kvaEJYRlpHNmp4SUNxOUs5R0dDeFFLUDh3OVd2R0ZVTyt2K2xoRHl5SUVveGJTZWRmR05kMDJqelB5WUJUeFdvZjVrVklLSDl1Qi85YlIxZEJnR3puZmJ5bm1TS0lsSWVIZTBnTEg1YnlvMkFLaVhPaFNBZFFFSDdyYmc2V20xNUFBK0ZJK2RXbkVEZFB0MVU5QWcxaHhCTGFCUXJLcEdlNDdCRjg3OWpadzdHY1I3TE8zaDBDMVRoV21pcUZsTW1kK0RwdVhRbWFSWGpNSjlqTHZramdESGpvVTNNYmlwU2I5VkM0SkpBWUJMcE82NkhzWVpXN3NjOVhsMWozdWJXRTgxSkd6NUt5emYzK1BxemthbmFZSGNUTzVxS0hnWmx0d2NHTWM3RkJJQ3NucTBQY3ZyOTU4K2UxZFR6V0twZmFoeUlzWlVJVXFoZ3NXQ1lqRGJYVlFHYWxybTJCSFZ6OXJrKzlvRTNUNkozcWJwaHVBQ0luRk5JSjNNY1EvTmJmYjhkQ3ZMVnY0WmFrVmN6d1ExZzhLbFBzc0dhMGp6VHVxSk15ejJYWnRoWUJQalV6VmRvVlpPYVc1VUFXMDN1Z3hxcnc5Yll2djZoR203ZFBHRlFjREhyUjV3bEZEbmlDUG5hT1lxQldLSUNPWkEwT0w5Y0JkL2lPOVkwQVZZemFqYzlxT21YR1ZjVmd5cUVOZ0JIZENka0Y4bU80TGFUaEdWa3NSdkpNLzJ4Nnp2cWRreWNrU0ZnWkg4bXRVZWZwRHZWcU11UnY1VmJtc044VjZNeTRXKzNBWGp4cGZjSlNJYlR3Njc0TVNZdWRRbDY5d1REL0p1TUhMWkhmQm9nQmYvSndoZmh1dS9GNC9jRmRSNUJGT0J3V3ZCNXZQcFNEZU1XYWhTdHlGa1BXay9UNitPc0Z6a3djejY4bHlKKzVXTkpFbHowdjRJUk15aGFmZkhTcEl1YjI5dFY1aUtJSmFDME1yYXVobll6eWUwVTJwYkppYUE3NllqVzJGZHBkcXVyQlRxcXdLL2RENStMYzdaV0lqN0dGS3JFMytBdVpNVGh2K1VQUUp5dTcxZ3JjNzNKQS9wbHU0NkIreTJKb1dIRVpwRC93aUNJS1Y2bHJGVXBEQzUvUWRrODRyNzMvY3BWOUxZMmsxcUxvNmhqemNtMnQ4djhkWGhoUlpIN2NoNFBSZ2FKWGxpbEVZUlFrczNUZ1JmQjMzckYxNG0wcllrUTlTLzVqZlo4SDI1SzR4Ukt0OWc1NlgrNFJpTGVQRm9mRHhMOStrZFRFcG94VjQ4MlV5S2FkMzd6Wjl4MmE3OHkwUWtQWlFsTXFXdjBWc0g5eGwvOFU4NFJOdTNxdmtxM2xmT0g2VFNhY2IvSzM5UzRZK291Wm56bFFZRUxheXFjQlB3THlSejg4OFMydWpXVEUya3VVVHU1a0NGSmczWDRFSWo0NGI2SFF1b01KV0l3YkxacEUrTUFUbVQrenRlRkNUT0I5WUI1ZWFKYWh4am1DWEI1VDZBMnhjbGZ2UE5abkgzdUVtOU5vNHZvbFhBQXJ6dUlzOHdEeDE2Nm80MktGZW5NbC9lU29yaHpBYU1qQWprU1ZKbVFmd2lhdXhXS2JNV3dFVDJiQXl0KzhxcmxJVEtxZGsyQ3hEYTVsdmhBRmYyZHY5alZ5UnAxQU85cmVmKzZHaEtHYkpYa2NndXRsRVMrMWdld010blE5bHNzV1dlNzcvMGlza1I0djJPTVVwUEhDbzRheXNOSS8xdHRwaXFxY3MvdHM2TVN5d3V6REhILzdaeWVlMlVteUg3dDhqMWhScVVVY3M5MmQ3YXRBVE5rS20wY29oamRCaDl4ZWpvVTh6THk1RnZlWlNXeHZ1U3pqQ0dOODRkVDJZQitWUFZBNzcwSnVqeERZeElnR3ZKZkVnVXkzZDEvdjZ4UXpLSmtEOWtXSi9HZjRuU3p2ei96eG5TdHM2ZlpCL1JJYlVCbkZ4MDRYcUZoRE5PTWwyb2hRUDJTTG96TlZyZTQ0RVZ1Ris4ZGxTQmJIaU8ybkNCRnRkTVFNeDVMRU5oYjJhSUx2dmlNbTZ3ZTBaZTU2bXRhUGlPbTQ0VTVPYWpQbytLQ1IydFNrVFhzWHZpKzh1TGJSMllydVlIaG1xSVZiK2dGeWJ0ckFqTHdoTCtpejRLNGtkM3Y1aGxjLzkrbWpaazNFQXFTdElmQjJDdTYxc0dLejFqazFRQXZ6NUhqbDlwQUQwZDl3dUhtN3FMcUllQlQxUzJiZlN4STZyNVlpS3I1azJwQ2VoZHFoSUx4RVd4QjlZcktneG93cC9OODBNWmg2L3dWTUppd2NxY2d0ZDVDL1Vuam1CNVpjVkp0bGVQa0EzRGlLVm5UVElMZ2VCaFlkVE9jVU1DSmVnZHhIVEQvVnU5RnlkNEhFb2JLTVlDZi9aR1FQdmV0aEhCQU5xUUV0UzN1a3hZRXJjM3IxVGtRWUp6bUFzdkN3VlFmK2lvYVdaUGhRWHM2eVVocENtUDA5Y1k3cVkza09GaUp6TTlHeCsxMFNIVEpUUXNYOThNQS9UTDNxaDVtOXVhK25rdGxGL2hNK3VNNThWalBSaitaYzRTNjgrVEZ0RjhiclZuQTJWc3BVM2d1LzJuK2tMeDZ2UktkY1JVcEorMnBOd2dFUDdPdHJUaTNRRXI3U3J5SFpFcGFKRzJlYjNsRmJDVVE2ekIvWTE5MUt3djh2QTQvU1o5ZUhvOExDdGIzRGY4T0htUTJnbEtTOUJSbkU2a2FGVFpmdUw1Q3VLV1NXZDhEMWZlRG1rTWdMMzV1TEx0NEIvS25Bd3hOakRRYWlGMnBkUlRNNFVsekVJcWJGYk5NREFHNFRLSzkrOWQxZG1TY0lWWXVNRnRkczJuL2IxdDNaYUdNL2k2aUJueHdqeG1mNDB3SjdoNDlFWEJSQnA4bmVSNmFhQStqY0djc2hudVpnUUZwSzEvRDZOb0xPT3RwaUl2MW9yWUtUK0phQnpWUTNFa2hoUHQ1cG1DTVJ1TFoweVNMTjN3dThacXpDR1ozV3JXNGpleWFUeXVuREhJc0twbmxMM1dKcnJJeVFzemtpRVlEckVhQzlVNVI1ZDV4Zk96dm9PNG54ckRSbUdpT0YvSEpGM29tN2FJYXdUWExTNDRwemVVT1JCd3I1RlRURHpKeVdZRnVwQ0pqSWo2ckVRMlllR2FSNVIwSzlkT1NrREsrUnBod1cxckEwODhUWUNNL2FzTkplVTgvTE9DWG0wZWZiV3dYUHNhRGc4WTFtWW45RVVYQVY4RkhpY2R5cVFNNXp1aUZtR09IQ29pZkNaQ1NHM2FybmprSCtxUUxjbUh1WGl4U1dtWXNHZi9GZjhxdmZtL081cnRjUU55WGJpZGtPM1FSUGpPOEl2NXZ4QWR6UU5PQWNwbHcwQzd0TWJYd3pKS1N2Sk5RcWpJWGc0YU9XaTBjbzNpYkRoMjByc2c0dEZpTjQ2RlVHTFgrdlIrUW10N2p3VHpLdlc1bUd6SytGaXQxTUtDeG1jNWZSUVpQV0JjMC9jbXJ5UWhmZTJJMWdDR3ZUL1BLU2FiZ2F4ZjREMERrTkNKbS9WT3NOUkMxUlNyUlBCY0dmb0RmcVlsWWg1REQxQWhuWTI0LzBwQUNzVUFiUlpBeEVBVzFXTlh6SXNrMGNyTzVQUDRYN0JHWGdtOFQrWHZmN1lHMDRWakE0Y1pHc2JsY1VkSUJBaE0wWFdidFBaemJRK3llMmtyb3pIZFE2bDVLVFdHSUwrblpNRWR0WkJlWmgvRUFId2hKU0JzUlRCY0g3WURrRlcrbEw5M01JM0tpZFFVQmdhRVF2V0pqNitDU0NvMlV6MGRVVW9KZVhNdk1vSzlDc1dyY0FGMklhaVEyUm83OHNZMTQ2VE1Pa21SS1RUcXU5Yk1SS1d0RE52OFVRaVMxa2pXcHZCcm5UemVnaEJKUTl2NWl4OUJmekJ4ZkpHQ3h5Sy85am5aZTN1RVNZalVhTUFEL05ONlVxcUJLSFg4VE1VUGJKL3pDRFpyOUtZbjlDbGE1RlJGdHY5RFlEV25nSG9kTVQ5ZGN5TXMxbG1FZkdacTNhekM4SnhIdXU0Q0NRYlZqZ0pybDZtTzlxdG9Rd2NsQTh5Uk1YUnhzODdPditCSWFpSjJ3M0pFTEFVRGJRb3FxN0JXNnpIWm5seHBZSWtDOG45QW5iNldOOEtIbkhUOXgyVG4zNjcrc1NLSjFxU3JKSUl5b3o0MFdSQ1g2WGVQaG82Q29wVlZYMExkdlZiZDRwTG5FL3BzZ2l1ajJOMWVENHFDYlU3SkRoaHZVYkRKcFhLU0o5M3gzdENBT09xeHpVRHYrQzREejU0bzMrV3hoZ2I3dE1qUnphbDduUE5DQmlCSXVhNGprb096Q09TRVZCTWxIcGxsdVJSR1ZPK0dGQ2p5NlFDejh0K0dVQ3hKajdpQUt0ZG03SHFyc2EwSXorekVsamNNNys5WXU5WmNyN1dGM09TQmVXeFFwMXJvVzM0YmNlbUw3dlgxb25ZRjFjeVNyVSt4d0FqaE1zNEtJTTZzczhreHo2WlpIYTBFbEQyaHFYY05HNEd0UWQyZUNWZkErUEdVaXp6TFA4WlE1MDZ2dG14NmMrM3FuRVpaWFozYjM2QzVzamVrTWx5WVNFVTZWVDFmNzljU0ZNUG5aQ01FNk1zWmd4YWNoTEZpckZuWFZIMEsrYmtNcy91NzU4bWJPSjZwZTJvWTBIQ2RLbEphbXZUcTJjWHgrUndLTXorZFIvbFlQMjNhRUkxbi9iZWpJM20vekd4eTN4SzJ1RVdWMCtmc3oyWDJYaWlmTDNWWkJMSmk1STNLVkRrT0I5ZGE3b0M4Q1M3QnZyYzlSbVlXUWc3bDZ4VHp6WXVvK2QxTkhlNXNMdUVWSTh6V29ONDh5U0JDSFdaTi8zelFkdUdxWW9EVEN3Rit1bE9GK3MzMW8wbU4zL0ZBVkU1a3dvOTc4M2tMNW5ZT0hqWWFVd1VGZ3BqdEhxdGRXa1hNck9DTktkS1dERnp6djV2ZVd2NkEvYXBuUER5WUhMOVZTZjlEYVVRejNCaUs3elVVUWcwOVRJVWdLQ1RVNTAxVkMwbjlicFJmbS91ZlhMYTc1T2F4L0lGUWRIalV0WEFvUXAzaFJOcHBGOHFsc1JNWEc4a3A4QWNOUk5WMGNsb3lsTi9MRWhLc1JtNGs5TG9xcDRlYnE2WnFQT0NpNkNRZEdKTHJsZmhFVjNTc1FCdE9Cdk5FZ1pWTGtyT29XS0prcUVndDFMOFNDaDJ5STlqTFNxM1JSTUNqbzhsVTJxdGovcUpqenJpQWI5VGRIa2NoMTBPV1dIVy8xYWdreHVRV0dNcldHYURqcURvYjd3bGdFMlo1c2tlK3VTeHQ1NDRyUlIvcEVjT2tRWHNLaklSN1U1Z3kxT1FteVZGNGlxelhnczBSNUhXK1RPTGRyVTlrREFGdFR6MDBGYVlMWHhNakV5dW9IcE90T2d4elYza25NQnhoaGpFeVdKRy9DOTJia3VscFZJd0FjODBxRUt0OEkwa2ZvZUVlMEdOcHJtREUwRGtGTWI1cDE3Y0tQcmNmUE9qRW4zMTZnMzZ2Zy9WK0RpMWNlWEZXcTJubFpwQ1NvVUNDaElqNHFuSWo0Zlo1elJuS1BGUHN0K3VaUTJDQmI3cEJ3MHNHR0FVT2w0YkxLWjJuVUhSbHk4SktsVzlvZkRDM2pyMkZjaHNlQWdRTDkveVJxSEVyMHR4OGkwR2hQZXU1UXdGbjlEV25wbU1uZGliS3RxS3hVdkprWEdRVW9sd3hra0JyNUNPVzlROWx1UGx2c2hrWFdKSGRKcnk1R3Z6VUQ2TXU1dk92d1NDOENDODdpSTlZK1hQNHVvSWtJWWdvYXA1WXhQRm1xS1dSUFN1N05vRk8vV2Y0Q2lYM0RjUXNjTDJYVXZWQmZjNUJFS2ozSG14K2VOUVloTGNpK05wSUJIMU9nSXhuaGthdlRYWWlQNkwrOGh4Zkt0Zi9LWFZqM3lobWtYYVpkc3ptZDh4bzBqSUE0RWtRN3pycUhLY0VyRjRMQ0t4S0Y0YXBFZjVYanJ0S0prcU1ZWUlSRGdldWRkZURjL0ErSzFtQ3RpSy9zdjQ4VVpYWGdlVEVaYmJrS3k4UkFtcUowZTZheDRsb2J0c3BqYVJqYkpmQ1RVZ0xVbi9WNkxhdDBKUHdzR3lsWDJrcmxEMUxZbERLREkybnROQUZxL25kNzZyb3N3TVoycHVvME16RmlETEZ3aHhIc2F5UXRGckpkZjhkWDZXemI0V20yZHFyVDFaMG1rOXJiT1lGb01IY3F2SExuYWVUckMwNktaWURzQlNrcEhNeFdVS2JxOUY4OVNpT2NwaE9YWFQ3bUtTSkJUdXl5ZVp0ekJTRU5nbk45SURnYWZXQ2E1QkREL0FaUVdSVUlXRUVwZElsUjBBTzNhbUZvQnF6RkZtNU1FOE5IZTdSSXZldEg2S1ZBWlZTcXdOYnplaTlMSkU1eFJkaE0vRVBXN3pTVDMzeTExV3VSN01xTXJNNTh5eEUxOWhqQ2syUmlueXpPNzgrR0FLWGhtV0FBVDl0djU1aWNhUDRBYlVJTHlGQVJuQWppNjViVnNqdkkyb3RVTzBOcVRNeG8zbUtXczNXdGFTR2daK0JGR2pKMDlmMFlZOG04Y2Z5TFZSOExrQnRpeEF5L3FXQUdSS3lBeFREU3JDV0ZTY0ZvUUUwNDd3RXdGVndiblprTFdDdnc5ZkNTQ1B5Z2tYU3I1blVZYVBDaDl6cHkvZllGR2dNWVFZNHNTS3JOVGQzU1BSQmZmaW1kV2dnejlyeDBmRitNRTVBMTJmK3VOSE81SWRVUDNrOFZrWGNjczcxbGpqVHdQS2lnQzA3QWxJT3hOb3VGakZiTWd4VU8yTmNiYkxiMlMvQ2ZGemZDeHBTenZvY0J2OFdJVHllWG9WZGlpcEtnRVZkcTZKelVDZVhqRHlqcDkxWjVpVVhRaC9wY2ZQQWJVQkl4SGlOek9oaW5HQ21UajY5ZDNnRmFEZXVmTHpuY1dEQXF5bHd2TkV4Y0hqdFVuUlo0T0tyaVRVSnh0bzlLNWF3ZTlWSmQwYU1hamgrUktRS1liZkQvVmtoVHg5ell3K2RTN0VXdk0vMW5hV0g4eVZHUTlGZlZvWTN6TWxJSkFOeEFwZjVYZXJMRHp4TDNhSU13NE15WlpXWEtzL2NpaTFBUnVsS2hIVFMvZE15MURPMVhGcWVqcU11U0k2QzFvZ0ozOEFGTEwrd2JkRzgvd0Y3Ry83cHFYREhoZDVkV21tSmQxeFNKVVYrSGV3Ni9XRklCK3JPSHFpdG0zZjJwWDVWc0FlUUUvMWRTLzhoK0JEOTBYRWVQR1dDUnVSYXU2UUp1YWZiYk1WQkN6Y1BWdkExT3YwL0hLZXFUMitobUNEWTBtT2YwR1ZNMmh4bnNNZU9kZEx4eDl4V01oRFRGUDZoakNDbDVxbEVGUndieVpxRVp6dktGS0xzKzdybURod1BIbjYwRkxPVjBrVHczZXVNUGdTN0pjakxMcFRNVENIbllBMW5FVkFuZThSY0ZpQ1FzSGxVVjZBdlBxQ21RMzJjNnVsWGh6R3FleVk3dEdtV0ZCYWdkUjFhTlA3aGtBWWp0UDMxeXRwd3gxZVozOXp2YVNpeWRRSEJWdWxjY2tuN1ZXTXAvSFRjWWRReHBKaUNZRFZxbXhOYkR0b05RL04wWXBVdVpjRSszL042eElXM20vRGRock4zSUFYZkxZUVg1T2VrQlpjc2VmUENNSWtNWWNKalZxU0VlR3ZHRUVWMi9HWDdFMitCa2c1ZE1iQ3luRDdXaVFHSE9LUVJHZm1MOTZyanlBYWxMMFpVbDBVbUVWU1QxanNWYzFrd1VseS9nUSsyMkFIeENtU1BCOXFqNkJjZzFIWTY0bC9kaFVMQ1krVlRoaGt0bVFINkpQY1RJeUtiRHp6TFUybU9PS2Y4U3ZwZHJIMGRQZmwvdk5ITVpjMmFqZVNwVkhXWk16SWljVkR6Q2I2eHlQV25USFFxNTd2T3Z4RUMrM3ZzTmJjYVNUS1ZNMzhONFVNSm50TmNtdkRUSWVMZTZQSWNGNGE4NmQwYktrM3Q1d0xwMXRmWHM3SjBDU0VkNEdDbEtDSVorRis1aVg1RG9iT2hYcWJTN3JyYmdLSTF6d3JPVmZqSGw2dEhHNkNMQWNmN2ljUHVrMDRTWTFtUXJvNnJoQ1RIVW1jV0YxUzdDWTBUNHp0b2ZHVFRQVVFPUVJPODRsVkRlb2ovNEhKTXY4U1NaVFIxYVVMZTZwM2sxSGd6UmExSndwWVl6RUk4dVc2N1lnYitsZ3Y5bHRqWFlXcjRWRUNUTTlNZXg5eFJWT3AvNkxHU3luR1BFcFFqbFVrNWh4Nk5icjB0SmRQY2VmWkhheFRDUG05Y0NIZFVldiswYllDRHQrdzdnVVlxZmRVV3AvbERFRk1WRU1JbWRLRlIxN054by9Bak5jcTdGNzJhSTRGRWEwWllDbDJrWEtBS2xvaGdIQzRVbWV5Rlc5bFZqTUVWY3RjK2pyNFByeU9WZkIyWmdmQ3hIQXo2QlpueUVHV1YrUU51Mk9nYUlYTUdyV2JmQmlYcWhqLzBUMyt3THRqeGxMd3FmMXhsa1BLZDFTVUdpMXFGQ0FXZGpCZWVTSDB4WXNZaGwzTDE2WSszd2llVWMyUGEzNUVHZXM1YksyNUxUMDVnL1NKUHIwNnFkU0k2ek5FWU9XSGp4L0J0UkxUZ1NGVHN4QzloSlpDeDBWVzAwU2h4eittbDllUXZTMzRNZE84YkpLWmlzbGFKakM0KzFpWmFqbVhRVlU1QTBSeTF3bytXbldrZ0dsNHRwSmZOSGdwdzFsaTlwR1lSckorOWNDK1ZrYWhCQXU1UStiY0dHRlQvS3BrV3dsVFVMZy9naG5VQ09ISVgyaFdvZnpMTkdFZHZqY1F2MnprZ1ptUldlc1oyak4xYjVrcDFCN1c1MlM4bDZHY2dOckNxUUdHOFJlQXBxVlIxN2pjTTU1U1hTYVk4TjRiUnpFZSttSG5TNGtxWHdCdXJ0RlpyYXBnUUNzajZxSTExZTlqbUJTZkpmMzAxek91VFhqM0NyMDlTYjFZZ1A5ODNPNzh1NHhVSXhnMmNTdFJZWlRzN2VvYTlUVXJGVkhwQWZBL25BNC95NGJLQ2RyTlhLMXhKZFBOMXVqVE1TQVBmVCtTQW9PTkIxNGtFMGp5cjNPQlpESWdTMFNtRHpuR2k2cW01Y01CVnRab3RPYm5RNWtmalJ4dkh5V1lLbUQ1MzZYQVNWUGRtTzd5a0c4YkI5amRnV0RSTVZwaTRob1NJUUtLTVkzajlJbmQxc3ZDTHNITmZwM08wTW5JeHF1RXlWa3Q0UTNremtZWERyUWtTdE5kNEgwYTNOYXRHUGdheUx5NXVrM3AvYVhnWkRnaVUwaFRiUnd5OFBBR1EreGR5d0ZRc0tTYURvMythS1d0MkhhSkFEbm9XWnRIdkZFdnB5T2o0QmFkUXZUVkhnMkdESjlSMTlmVzdJZW9scHpCQlgyaEJ4RzY5a0w5dXF3R1FMSFV2M2E4WUVNVkptdFVOS1YydUJ5eGI4a0FSMG8zVVVlc1BtZUU0aEsxM1RqeHNvOUdremVtelo2VkVOWHhDTlZoazBIOUlCaXp6elJYNm9vOHZTOGc1SW9odzJmUkIxKzFHUzUrdmUwOUhIZjF5QXM3bFpJSkpKVXdmRG5lZzFvZWVWaGQzWndzMUlqa3N4c1dVTk51dmpyOHFHNXllT054UG55QnJJQXFWZGloNnlwWVd2UTljZzVPZjVxVmYzWUhWRjhxa3Y1c09JNGVmbnlGVGRXY0FlM1ZzdVMxM2xxNE5qSjBxanNnUmMrVGQxT3BnZFdSK095NUpLMC8xRUt4QnJweUxqQnlrZzg0NVI0WU1PcER0SzJ0WXlXNTloTmlzazNoQ2ZQS0E3MjRuakhaelMxWlUxYXhxK0JWdzVtdmhiYVB5ZlZtMmpTMkduTWo2SEQveFQ4dkFqUmRWMDRydTUyVlVmRFdRRFVmbXlNM1Mzd21BTHVDNVpIT0NkZW1vODU5VUFBNnQzUzlWRy9Fa3RhbXZPK3BaTUNCRU5WUjh0eDVxWWJCbkVVaUxDWmZkZHlGMXFNaE1VekFlZFk2ZVNKanVTRm56ZldHNUdpU2hQOUpuaGpOc0pTR1BiM1pQZlpBYkJFUks4YTc4TUxESXFiR0tyVDBiWDN1TW1uSW16ZWlKa2NNNVo2NXUvNGVHZTEzcVVmbjFNM1JSd2dGNWRoaks1SHZxZGxEelZIaEdpdXVkeTNpS0w1YUpoN2MvdmplSWJ2SFZ3Qmpyd2F0dGxvMGF4ZUowb1lNcUFKL1lzYlV4R3dBUk85aVpDUC9MMWM5eWJZdUpiOU5sSEVyczNWcVZPY2dKdmVqckJPbmRTbXVFcG83V3lMTVNNVG5nNEphbHlyU2pQRVh1bURFTyttb2VmWlZ1eXMwbEZBQmllOC96RWJMRGh3UlQzdG5CYU5mbFUwYzQ2WDQza3REbUxxZzZkcGNTTG9iTGIwME53czNFWHR1K2p0U095d2tXVk9WUERXTkgyd20vVXVwSm1JUFFMSktoQ1pmL0pUbWtlOVUzNlIyeVp4SFowU29iMHZNZ0NSV2UvbjNiVFZPNENmQUVZN05Ba3Fzemd0RnVqTS9vT0Jab1k1N2RUZFBHRmkwSXZWcE9PZFhQQWd2ODNORnFsU25XYS8zUkxUOFBVR2I4b1dvWkJGdXVmd0pBTE5RdXZPVHdlMHVUU2IzYmJwNFFQeERycGFGVzNUbFRoajBtekNWN0tJWG1oVy9JYkdZOGgxaENoRm0xeEo1U1BIcVZ0U3VLcmRXOVUzTVE2MVh1Y1ovR3Uzc2cvNEQ5WnZJUHBYZnJCbzVjZWxhcEs0NUtteXNwb2htS3M0WEI5YzE2TFgzaUp0RG00c1ppY2Urc2hGL3l5WUdaVm5teW4yTDlBSno5blVLQW9BMnZJZ1dSSXh1bTUwQ0pGUnVzS0tVajloSkw0V05YV3U3VVJUSEVyR0JYTmhRK2c1c0x0YUk0TDVKM0dhYmtHU21RdEZSdExnQTc2YTR5eU1hamZUV20xako5S3FYeWpWcEs2eWF2N2p0Z29tVlhpdTZPUm1TMVNFWXBVNmJnZGtiOHBlczhPcDhWaFJaekxMTjd2aEt6ZnFuUllVUWZOVFBKVDMzTTdOc1pZUFZZMUR2RU9aK0o1TU1CemFhbHZ1SGNma2cwWStHaFNnWWh6d0xUQUpqd043K2N6aElZb3VyaUloUEJUMW0rbU1nSGdVNHBoWUVDcHhrT0NueE1TLzIrSHpreGY0MFNuQ3RjT2pOaVFpUDR1TktEMEM5SW9DM0dCRUtkWFlBQmZxdThLVkFqWDIxZEVJblBIYXNhWjFrZnhacndTMWg2TnRhVnV0czB3Mmphcy9CVHFtQjZQN0x2eXZ6c09LWFRydlhEdVJIdzZvSDk3K1hPRG9NV0RpVk0zM3BXRkxrZ1k4dXpaL3FoSXc3ZGFSMXJiSHREcTdvSnZ2OU0waEh3WGtuRWVPM1crQmEyUS95SVJIa2wvdFJQTTJjNm9UUmpwN1RaT3RiU3JJTXBqQjdFNVpOL1JzRktJMVBha2VZWmpqcTZ3c3lWQWJLZXVUQ2t6T0RIRS9wYVIvNzlmWkZhMDN2aDdMUzlVMi95Nkk1cGl0eW55ai9MRnVIZjZrdnZPTnpwWUd4UEs1QklsRUtoejVQZ2w0NEJQMElxeDV4TmZKdkM1aTYyZ2FNWk50aVo4emVJRWx2SVFpZ0hoRWtWOWVCbzVjU3dUdldKd25IQ0Z3Uitrbi9meWdaK1U4QWprSGZiQm1CbTJIZ3U0VTJaYWFZQzZ2YTFiQXAxcHE3SllJUURYS1lwQ0U2d2JYTE9pajVqdWVOVG9WUE5ESUJsMXY1RmNPanJOalpkemIyMGZuN0FEVFZ3VE9uRzI2UDlJRjVmWUJidFM5TllBZ3lSdUd0emhySjF0SWhocTVYamlWU25CTnY3eDVxSHh4c043U0JsMklIZ3RFa1BxMWJDY3dzN0IxUktCLzEreVVzY1lRMHc1M2JoUW1ZSk5DaTBTeXFjdHo2SmZIZ3hqS3FudENuZWVJNXp6ZDhZZmJLUVFZY2NoOHNTWWNtVTB4SHl2RTF6d3QrMGJtQVBmYjE2b2x2RiswQy94UmpzWjZHaFZRU0JMNEsvdk9hOWE0MWZSS2x3eHZqYkxxS2hUSXpxN3ZwaWNDcUdxSmxhK1lrQnlmUG9vaW1tMjRYR2NOeW9rSzlsMDN1dUJjZzFoclZzTUJZK0RxYXBTaUVhRFR2M3paWFhoZ2I3RDVUUzZFbXViRURabVJ6MEgzKzA3RnM2UmZ5QXd5RHVSVmlzNGFUU0dXWEgzR0QyMjMrQWZWbW1EMCs2RUxHdXMvekpZdTdhNnpCWlN4SUhLSVFUdk53SzlqTXpPRjgweERML3hIVUhnOVY1YUQ1NnJGVDlWSUhGY0FqNjhSZ1R4cTFlc2FTMERIcUppbFNrbnBwRlIycmoxSnM3UXVjQzVzNzErNko4NVBlUUxFdFFGRXg2MlJraWs3NWFpYWZkVG9HTkF1L1o5bnFPaWd0NHowMFh1S0V1bGwwMUU0VUlBWWtoZm5BNmE4RmsxZGxocmNvL2grckl2VFh3OUN3cm1Yc1RqRHRDeGFGVzI2TjR2L1pQK0k4YkNENjdWQ092VGNmMjBvOGtMU3hsOFNNVDcxUFVGTHR4SWNtSitsQUxBRE5mSjFMa0hMR1ZlbldCY1ExcExmRWpwZUFPSjVXekh5WEZydGhpRFdmcnEvUldOb3NWWHVjY1E1TmJIRUc3WkFnRGs2dE5oS0NZcHo5L2hDTG9ScmVKRFNNN09wbU1jTDhhNC9MR2FUaENITnlPSmFDSk9NbFdOUGFGTzhDb2wrMDJvSW5wdUFmZENRWFlQS0tWREZFVU53eVM0VHAySWtoQzVHaVFtcWdMUUYvb3V0Y01xbmxWT2k5WWNNQXdqdlpiRklDNVpnTktkOWxiRkhlNE1lVXgrRzg2WkpqczNOUDRsNlRYZE8wUVFsakFRamNZTnZRN3djMU5LTVE0SS9XNlpEdGNaQjZ0ZSsrRUVaZTFucG1nd010azNhOGF0alUzdmR5am96N00vSkhYbDlrdlQ4SUxyYndhSVkySjV4SXZDb3VnTGl2ZzZjSXA4bzVUTWI0Q2tNdmpxSThDR0UvVlZYM2xQbWk4MkptQlRhc2FOVFl3UE5tNVdMOTZHT3dIendqZ3dBOUs5ZFhSOGhmN01zbDVUUWxBdmtmSlFrcnZVbjhVZzlUa3RGOUl0aW5UaTJsb3htdW1TemV5LzFFOVEzK1VyWHd5OHIzQTFHRC9pVkRBVS9Jck1iZGRYNTN2c04xaElQVWRiN3FEVkZHSGtNUkd3b25Ba1pocGxnOGZNUHF2b0EwTXYrQWxLcU1POVJidnBFeWpzV2hqNnh6NTZmWDlnbDhGN0ZMM0VRU3pBcmhaRDdDM25EcEFldktUUTBQR3IwQkFNS2l0cys0UUQwdVI3ZlRmV1hHSGY4NkFENldZSGEwUUtQMGM0M1NqdnhzVXRGUTdxQUJvbjF6QTdFQlBaS2ROeFd6UkdUYmFWQ1BqeXhsNXJISVc4bG9qNWo2NFZxUzE4dEp2emhBMDhJSDZ0UENKTlJBTlpaV1BYOEE0RFRueFBDb29tay9uRWJ6aExKWWRQb2prQmhrN1JNNXBOVzdLSUdhdERodzRzRUpxYy9DNGE0QmQ2YTRzcGZ1NWVtajBOUE4rNlBKTTFydllIT2R6WFpubjcyQTNTcjRGbjVhN21xdDZOQW1uSEpEcDMvY0k4cHl1YkJXZExNV2ZYSHFvRkZoSnBlTjJkdlBXYnd1ejVIU0UzMWNHOEVTRjljVzgxRVdTMU1xMlFSTkRBdEpIV1hRNFdtSWJldDBYU3FNTjdYY1RUSmZzNnVJenpvOXFGRWY5TlpZK1MwdHhjVXdMQUthZFpMMktONE9UYjJiT3AwZE1EOExPQVphU1FGZ1BlOUdyb2kwZllUSEdOVndrSXZqUlRWZG5hTkdSeWY3K3hRQ3g2VnRGMGx5Z0g3SnNXdGY2YWtocFRYbFVZb1l6d2Z3STVSRDhjV1RkUjd2V001WWVrVmZEdktCRXZqOVhYcmVhT2hNalE1dXZDZVc1Y3VzMmNNOUFGZTRkaEZqc0dodFZiSTAyYnZuYkh6V1JOcDcybjNKMjM5elNYcnU0cWxOTDVjVndZSDZ6K0hueTAwUlRVblc3Y2tDZjZzUEl1cjB4SXZpQWI3dWQ5ZElKOGRtTEVrdmRMaTdqSlA3TEZaNXJBcXFpNUZrNW5nZERqMW1pTVpHWG8vWWdZdEphKytiZElzNjZsYUNCQlFJY3d2MTV2Nzlna3RUN1lmK1NoSDZveWFocEVGZDM0cVpPVy9sYmdmKzZ6Sm8xY3lOdFRQOTNhUkdhamxGUzhodzRDanc5VnV4UldnbytKT2F0TERIanlmSlhlZjVsMXNzaU8yUWp0UDhzL0xFNWZuTm1TcHJxWXlqdDFzQUNiQWk0NE9PZDllanV1bGdJY2lPcGFERjZDdURsSDFsaUJFbXlOUVlVZm9Wb0t1c0RaZGw0Y2lBYlBtcytSdnd1TmZxZHYyNjQ3ZHphc3RyRVdHMjZWMHloY1FQbXJXM0g1QmRJU3NlRjh5YUJEQi9Fc0tTR0RCcDM4SHhpYWpSOHJOUEZNYy9pbUpBdmRCRjJBZEJmenowK05sZUlZaElPN3VqckpwT2w5MXFnTitSNjM5enpUTDJ2SzJ6K2RSV1ZGTFVaTWVvWVJZYkE4YUUzYUtkV3JodWxsNS9xUHRyKzNGdm4zK1FEYzRoVDZWbkNwSHBzaUwrdDA5QXUyeFBzbWEydklDazlRTis3c3hGTHMrS2ZmUWdWTEdHRG1RcDA1UVJLSllKNXkraVBPUVZENG1tZkVSNWtwZE1UbS9tNEgydFBrajRZUDJyZGVvV3FZZ2gxZHcrNFQ0U2t5YUdISTNrWFM5M3dlc1QrWFppbFJqQVBTYlo0cTNFNmVXUVJ4U0dabi9TYlFwai9wVmJMc28zbGZmVTFwSmwxYUFTZEZudnlLdS94cGZDYUQwWHVDaHRSVVpzb2ppN3hFV0JTZ1FQR2N3U3pLdTRidHM0LzVhYmhyY3p1YWJSRld3V0VJVjM5b0lqVkNhYUgvMTUzN2kySi8xallDMHg5c1NGWlRDVVMxYW01V29WRmZmaklvSDFGSk5Lc3RMK3F2OGRFdDNXVDhubzh3VFBJWFVlVCt3elRXZXQwSjB1akNLSVgybTEyc2FXdHM5MmtlUkF5TGxDVFpKcXczTmZlWlp4QlpjM3lMQ252OHhvZ3JkWWN6dWRkRXNad1loS1J0ZE0vcGtremljUzVaeGF5T3VIakYvcGhLeVA4dkxUdGsrYk45LzFNNm50L2wrdTR1aGlvV3NGbGZWa0xpblBkZm54NFB3a1FWWnBUVjVNL2JqMVhQdFczckJVamRIOUd3dDlya0w3SE1vUWowU0Y4YUNsVTU4dG11TUFtc05BRTZRcTViS3gyQk4vMjhob3ZaemJXL2lNYTQzenRtakFuVVg0bm5OaFIxU3RDeWN0OFRwZ29INzNFZHQ1dlZDVnhnb1VXenF0Sk1USkFPZEF3YzU5N3hJTWYxR3FLNmprMTFtajhXWFY5TW5IUWIya1J0dUk5eTd0dUNLZEZTcmp6SkttUFJBNnZBeDFJU2RwSGNDU0RldjF6SXRVOHBNcXFodVQ5b3J5ME9PbnUxU0RZUDhsVWlQNnBQU1JMcHp4S1ZROVB2NEJZbnB5ZHVOTHZXRkVXbkdFVVpPNEg4RzFuQUpUT3djRVJObC9TeFY3R0kxWGkxVU5Tc0hlaExPV2RER3dCK1lEbk9xQXFJY1FtK2pITFRWbGw1b1ZZbkxTU29NWktvTUJxbmxibHp0QmN4YURMVlMxczhCbStLcHhrcllLMlhqM05xTmpibXVXRG5YWXY4T0FCYktNVTRBWG5qV3kyeEd4TEVnOXNxU1dtY1JRM0ZTTndFeitEZVNtOEE5cjA5aE8rdnNJeWFCRjliUWJHRDBKWTZSRkJFMS95WjI2OCtJNW42ZGxRQ2F2eHR0ejBsaCt1ZUFlazFaWTlsK0xGVVoxYlU0ODRhVWdaamFrNndtcHl5Nm5zRy9yNWt0d3JCaDk3eW81WnFXWVZjRUIreUR4SHoxd3c2cW9lbFRXbU8wdmxDZVB2N2V1Q2RHZE9uVHZPczJjQ0xubyszTWNaZEtGU1lleHJGc0l3Q05Rd3VTVkZaQWpiRlRxMURlaXJFZHJlSFM1cGZRY096c0sweUhmQjlIRVZCdXErb1Erd1ZsdjZDYzd1bG43cTZDck5lRnNiLzlkNkF0TFpZb1dqeFVXZE1QVUtyd0t0SW14cVVGWkNyaHcxSkticUZaeExmMnI4aHZubnpzZU9HR1dKdTE1eW1LMTEvT3NWRXNaTWExaGsyTHdzV2FtZXhvWUdPa3VIbU02RDlvS3hCd3BCRGQ5d05XY0VETEJneU5LbmdFb0FrSEM0Rm5CY0xnQkxKQVM2QUtqVUlKYmxha3Z3Tlp6ZUl6MUNiTW9EcVBicHk1U3QvL0IvMHpYOFNLZmlac21TemQveTNoZzRVOGlQNlJYVmVGdm1vUS9PS2g1OVNVRnR0aVVOSWllanBNNjA5NnlsRFlQbXlnVDdkaEgxbTlpLzdTWHZSUHdqZ3FoNE43QVBWc2RKLys2YStmQjRYa1ZSK3Q5V0V3N1J2VkxkRW5mRlIxZERZSHJDdHlRYWlhMGxjR0xHVGEvejlxTGdTVjY3QVZJTVdJTC9KTm9rRGc5Wkg0WS9oV3RQeTFUTURRbkN5TXcvbTY0cytYQnl2SDAxZktUdk1aczdiMUNKcUE2djA3cThiUFh3UDR0cUIrRmhxU29yYy9TcEpjRUp6bFloQWtUbmdkU01scDB1aHBZVnJ2MFc1LzA4emcrYWhKWTkwOGlFMGdaVWNVT28wWGpKcEg3N3hhSmJzdEV6dFZlQk1oN0ozU1ZtK3hUcFUxQWE3YUQ3YnVabGpMQ3V1T2w2SWpyVW5vRlprbXBXbTRWWWRyT1B4Nk1BVGRxZEpQNzZMNG42NnhSZG1XSWNMR0N1b2ptZWs5cXBoMGYrbHJlRDJxTjluYXgyenpGTDF6S29wR1p1dTMyZGkzZ3hsYzNaUmd3aGJMZkxoWS9qREh1a2V1RExITUR4NWVUYlVkeXd1bXQ0Rm9raE4rOGFwVTJSRGk3d1YvMEFkejRKNjluMmRtdUs0Y3owZjJNSVN3T1orN2IwN00vQ2taL1ZWa2Z4amFvRUl1Q3hDT3V5SXJFbEV1YWxuUkw3OFRLZys2Z3kyOEJ3QTZMUDZPSGRyMVdZRzEyK2RWWWtFU0JHdEdoQjVoNFl2bm5nWENycUdnU0FYM2pvNXZwUFdONGl0WlQ3aFp2NGRSQ1BVdkkxNmtPMXVhNnFCb1VGWFBIMzQrRlk3Uk52R2NMSFNPSWtMWkh6UXZCd0JLNG40cnkzR1pNWWFCVlRtNExLVi81dzJzbFI5bDQxNzNCbHBtK0xEbkFON0ZXZWcxWEgyNS94NEt3ajYrTFA4T0ppZEFtMGQrVXdIRWI1czBocGZzcERVaVYwaTBDcU1MaFFLT2RrNnNrSDI1YjdnYlBkME5Ham5DMGliZGRzSXVMN2k3cTdDbFVkVWpFNnNJdlczaStEcXBRTlRZVEVycS9vdkVwbWhsRHFMVjdhUlMrd2dNUzVvc3hrbm0wenljRVRwYkRxVWNqKzVzeERzMTVJbkYxQ2FYTFp1ZXJaNy9hRUMzblJkRHgzenVvWnJNbzIxZTBmOVlMK1FyV3pCUmlKK0U0aURrQWJObzlpdy9oZlFlczhtN1Q2WWxvTWE4em5QQ0toMVI4WTh5NnV3UDFvc1A5aWZwSjZZcWZSMTRtTWtsR0k5RzdUUjU2MEk2djY5R1lGL29NTC95WXcxc285anhBeU9EZzFDZmhEaDZBNmt5OHdJb2FBV3JsSkZzSk5GQUp0ZHRDcjVJbWRVOVNpY1N0VzBXZWVFT2dwaEpCUUhweUFvZVhaQ1F4Q3RySWlXQlU1WTFJRjhyeXpVZy95WWZOdmlPM0YxNkk5dCtVUndybWx4Lys2OGprVjVHanU3cWxJd0tKODdZRzZVK0NpbEs4ajZ5TldidGRpZkplNnF1Z0RMRXVuM3BteHFnbzNaNGdQWGVpS2UwU3FIRy9GWnNQN0NlUGtUemhkZ3NlM1AvUm1zcm8vSnpYMm4yS044ZmdSYzZlSHgwQXU2ZkNOUjBsc0FWWEoyOG4rbXkwVVpPRTNweWptTWN6OXUzeHJJVHZnQ0p5VnJwRVptMDBhNmxQRFo3bFNna3J1bmUzcFhFdk1SbTdIdEFqK0FHNngzZVlBbllMWUlnSkxHMHROb094RjM4ZXIxYUgySjBERnBMS2hNaTNZamhyQlJGUTdmcFZxZDZ6TThOMVFXNUFxeXhkQUcrR2pZV2ZWeTJudlFwaWh0Y0dzeEV4ck8wNTlQNDlsb0s0WW9IM2lPRi9zS0RlYitEVEtUd0hmdTVGcXEyTDdLZnhpVmJzK043ZVlNOVNVZ29rdnkrZmRQOVR3N3ppSGxFQ0Z2SWpUZE1YTFdXaUM3UlBwNnFlUTJwbmxyREoxdlQ1dVFTWFc2TE9VZHE3bm1pTDVjUHErdHZ4YUt4bG5MWEY0UTkreUZ2eHB2dG9sVG1qeU5xcFpnRDNTWGFsQTg0REZPQ2h3N20wcE14a3UydHNvSzB4TjdPNU1sVUIzejBxeVRqYXF0KzRKOUgwbWNPVzhqSmdEWGhVaUthcVNpQzRCazNNZ0RLNVNTWVNQVGM4V2cvdDJKOFdHU2UyS1N1K3hKTDBiZGZQR2J1UUo2YWxoVnYxQUZTTHkzb0VnZ0lzL3Y1U0hzVmNub2NacDNFRDUrK00zL0pTd0ZvUk81M0VJYkZqVDc3VFBqb0RyNWlRLzFzQ2o4dUpSdjVmbHFGZUo5ekEvbzE5QlhKTGh4T0kvNmw5aXlZb0J4UzM5Y0tpUGlsVjN6c0xPdkh3VGJEdnVYMmkrODBXbG90RnhXVU9QZjIxMEFXeUxkYnhGUHlBb0hNY1ZIYVRqVHFyUTkxamhtNDBZZW4rSTJ0OWNwY25OZ1RTU0dlN2ZtY0dlS3pNcjlERkZ5RFJSdFVzWTRLUHNpUVdRbU1GaUdQYW45a05USnR0WkpBWnYzNHBuZUVCNVBnbUVCVkVEaklTN01mMzFNWWFkTml3QWZwSTZxZ0pSUlRrc09xWDFvSDNtR1Z3SDhrT2x0TDNXYWJObWRUam43UDNWQVBzQ2pJVUxmdXB4dEhQV2YvMlFBQkFCb0FRQUFCT3dCQUFBOEJDanNDQUFBQUFBRURBYmxBQUFJQUNRSUJBUW9DQUFNQUdsUm9hWE1nYVhNZ2IyWWdSbWx1WjJWeUlDZ3hNQ2s9PC9CREI-CiAgICA8L0JJUj4KICAgIDxCSVI-CiAgICAgICAgPFZlcnNpb24-CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvVmVyc2lvbj4KICAgICAgICA8Q0JFRkZWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L0NCRUZGVmVyc2lvbj4KICAgICAgICA8QklSSW5mbz4KICAgICAgICAgICAgPEludGVncml0eT5mYWxzZTwvSW50ZWdyaXR5PgogICAgICAgIDwvQklSSW5mbz4KICAgICAgICA8QkRCSW5mbz4KICAgICAgICAgICAgPEZvcm1hdD4KICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24-TW9zaXA8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgIDxUeXBlPjc8L1R5cGU-CiAgICAgICAgICAgIDwvRm9ybWF0PgogICAgICAgICAgICA8Q3JlYXRpb25EYXRlPjIwMjAtMDEtMDdUMDI6Mzg6NTIuNjcxWjwvQ3JlYXRpb25EYXRlPgogICAgICAgICAgICA8VHlwZT5GaW5nZXI8L1R5cGU-CiAgICAgICAgICAgIDxTdWJ0eXBlPlJpZ2h0IEluZGV4RmluZ2VyPC9TdWJ0eXBlPgogICAgICAgICAgICA8TGV2ZWw-UmF3PC9MZXZlbD4KICAgICAgICAgICAgPFB1cnBvc2U-RW5yb2xsPC9QdXJwb3NlPgogICAgICAgICAgICA8UXVhbGl0eT4KICAgICAgICAgICAgICAgIDxBbGdvcml0aG0-CiAgICAgICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5ITUFDPC9Pcmdhbml6YXRpb24-CiAgICAgICAgICAgICAgICAgICAgPFR5cGU-U0hBLTI1NjwvVHlwZT4KICAgICAgICAgICAgICAgIDwvQWxnb3JpdGhtPgogICAgICAgICAgICAgICAgPFNjb3JlPjcyPC9TY29yZT4KICAgICAgICAgICAgPC9RdWFsaXR5PgogICAgICAgIDwvQkRCSW5mbz4KICAgICAgICA8QkRCPlJrbFNBREF5TUFBQUFXN1dBQUVCQVFBQmJzWUg1Z3djRENBcEFVY0FBQUFBQUFFM0FFQUFEd0lBUUFJQVFBSUNBQUVCOUFIMEFmUUI5QWdGSFFFMEFaMEFBVzVWQUFBQURHcFFJQ0FOQ29jS0FBQUFGR1owZVhCcWNESWdBQUFBQUdwd01pQUFBQUJIYW5BeWFBQUFBQlpwYUdSeUFBQUJuUUFBQVRRQUFRY0hBQUFBQUFBUFkyOXNjZ0VBQUFBQUFCRUFBQUFhY21WeklBQUFBQkp5WlhOam1jb0FBWm5LQUFFQUFBQUFBQUJxY0RKai8wLy9VUUFwQUFBQUFBRTBBQUFCblFBQUFBQUFBQUFBQUFBQk5BQUFBWjBBQUFBQUFBQUFBQUFCQndFQi8yUUFJd0FCUTNKbFlYUnZjam9nU21GelVHVnlJRlpsY25OcGIyNGdNUzQ1TURBdU1mOWtBQkFBQVVWdVkwbEVPa2RTUWxRd01mOVNBQXdBQWdBSkFBVUVCQUFCLzF3QUUwQkFTRWhRU0VoUVNFaFFTRWhRU0VoUS81QUFDZ0FBQUFGdFhRQUIvNVBmRzZBVHppTEU4bkJvL1o3cURGOEpubUVua3ZsTVpzK280N3RLK29hdG5OdDdQSjBWQWMranNkSU5jQnRHbjgvT3BFNWtlUkFUMHc0MVF0OExnSUNBOHBCd05EanN1bzhZRGROV2VoVXJpVnlkN3k2QThTRFpLWlBYOUZyalJVbmMxalp6OGlOdDJodUEvQWhBT0Y5NUpHNW9Samtnd0tHM2lTbGtIemVwMHBGRGFjTExCSGEzRjFueWRYRi96cWNUQUhMU05zZjJmYkYwQU1pbUJFMlNYYjk3MHNFblhBbFlTbi8xTGpvVlFKK2U1TU92MC8yZ2NEQmUya3JGdGoyR0Z1UnhkM2JpUXkzK3RyV25pME9tRzcyNXhEZ3ZXSW5tTzZZQTdJdmdwWlk1bkV4L3RUbDR5V2JtU2FCWm5SRHVjektpb1VvVzhkbEFQdnZZczFrTTVKU2ZKN2FsRnhOcW1LUnV3SkhWNERHTWxRQ280RFJYN0JLbklZS09lalBxNkJzY3RWaGd0dHVKdmxvWG5wekxsTFlTaUg0SkxmczI3K2ROdTJlTkF2R0R6TUpBMVJoUFZrNXdQOWlUL2xHK3JkS3EvRzMrTTErUWVuOG8vUklsZUdIWUU5cnlucXdOb1BvSzVXVXB1c0lUcW01MlpLRUZWeVowYjFmenZjNkM1M3VRMXdaeGsvOFhhaWpnT2c4M2I1K2J0c2Yyc2djUzNwZUY3YVZIdXdPS0FKN3dYZ3RDekVQei9EWG5ydFVxdEJwaFFXRTJHMU9KeHM4QmRUcWxtcXByYTdvNkgwbk96Zjc5REZlSU1QajI5OS9QSk1ZMVdNWmNGNWhXY1RpcEhzenpjNXRzczZudW9hZVJHU3pEMjkrcGxuYzdSWFpWZjRPZTNGVjk3c1BxSXArQXpxaWRwTWhsMDc3cFlxMHVvclpQWXpPdHZ4elVSRW03anFGeHkrQy9yZjV2K0FXeXRRd1kvQ29qa05INHZhSEQ0QTNzUXl0T2tSei9YZWFScDFtdWdHQ0RmeWdIZllUWWx1Y0d3RitjYXNmVUVuNktsMnorajUxbE9yN0hIWkJZTHNuVkJ4c0I2c0hxcDdsVVFqMmtlNkZWVzJldFE5cjgya0lBTXdsQllhcXVKMnhETDd2bzBXSkYvUGdTMWNZNUo1TnRBWHVrZGNIazg1V2Q3QndwVnBEYm5naGs1Smx0aTJsVUVjQlZDRzZCVy9WUHY2UjR0Tmh3aEMwNDVXUmc5eUppdjNFdGJNTWhXK1RwTUkranRrNEpDNWpuYms1eU56YUpNY20xR1J0SGoyMUhPUmFKbUtQaDNXdXo2clVUQnhLZC9OS2ZlV2R2TkY2ZElPek1EQlgvZGQxSlAyeVZhRmJuZUs3MFh0MnVoSVR4VitGU2ErWXY0UHI4ZXMzb0tiZDlRTElrck56dEtjYVZVbUxmN01udmNmenZZL0tUeW1ZVXBnZkwvTmtyTnFZcVkzTitOSTNmY1Z4N0E2NnZ3ejNoSjhETHBUODNCU0xzTm45NEcvVEtNY0c0NTZTVXRIazRpN005T2I3eVBzT2ZvRzI1R3hLV1ZMdmJ5UFNjVVNDV1NJa1dMdjI0UWlyaG1hdmwyVEF4bnpSQ3k4MDZFZ2Era2paRzV6RDhnemFaVXZiZHdaN0dlZ0R5eVlld3JZejBleVRZU1N4bm81cVRqTjBua1VWSUpLblYySjdmQXRBdGp3TjVmUWRENUF6THlxdm5pSHdpa2lSU0hsRGhaZjZmeDREOHlJZktrWDBxZ05RbkY5aG5ON01keU1aa1dmcFNCN2FrOTF6eStoNldhOHBucUdBVWdPZEVaOWw4VTd5TE1wSEo4OTZqdXVyNDB0N0VjUFJYZldYNStlckVWYVd4T3kvalBaZ2xDakRPL0Jadk01K3ViWDFZYlV2Q0g4WUJ5ZjBLenY1Q2hMejJJNjA0WWVnS2FJRWtBZXg3aG5XZ2pSdExnZVpOcDFvZzZ0QW5xOEN1T210dUFPTVNUN1dEQWxvdnNPWXZiblhDdzNydEtmQ3ROWUZDdlI1c3IrOVVFM0x2RWVXVjJOY0w3Q01QRDc2ZDd1YmZxTXdnRHNob0VqUlgyL29VSk9kQ2ZHTC9XSCswMkRYUHVmeFdwdkhXdDlUckcvSnFoZmhnUERSNDFTTm5tblc2aThuM1FMTUNHbEZ5VDQwTGdQeDc2WUFNVDd5NTZPRDM5aldOSXZsZkNiM2tzc3JCcng4bFM1dVdyVEJwK1VpVjV0NHdxWlU3ejZhWUJMY0NudlFmb3A2QjdJT3VucFZtQ3FSNmJSNk8zN1lVVXpuWlcvdWhhQ2VKaE55TjNHMURSdHRmUE1oNkxpWWd1TlRwUVpzT3BiL2JDaTlCKzRHLy9tVlpUMEpVdGdGcDlQeS9tcGhYMnZLWUhmd2daUUhRVnZwV2JweHRRWEw2UHA3R285a0NKZ3NFSlhJQmZoQWFWSDVCMGQxWXVvSWFKOWFEQ1RkRW5MNXk5MCs1MFlDaXB1cU1KVTEwV0lKK1ZWUHB1S0VseC9STUtLSkdvWm5JS2FsMGlGWUlGRXljYkg1TUNYd1RXWkNxNjhLb2VoNTBLcWpQdjA5RGRIejNUM1hyZWhKVmJnb242SzBDOUhpbmdtVFd3QVpyV3pwVVVFQUFGWWJKSzVQek1SeXoyUElSd3FkN2R4d3JMYWk2SGhkaVhCc3JRQlAwaGJPUkhMQ2lpT2Y2d3p1MnBRcXBsUGJPamNaa3p2OWhLd0NNWWNuajA3K0J3REI0bm9wRjYxQ2t6UEhvMU9XWkhKT2lKVHA2RFFjSUZlS3NaMUd6ZXJWbmZIaWd6SjF2L2ZaeXg5aG90N2dyMGl3TDgxcFprRVd0a241aGNwRy9icVk3NXBkcGoyZjgyUHhQblNjZDFRbytqUlBYOU4rcHQzV2RDQzNjZTEyT2M2eTdsVXJ3NnVYSVF0VnozVmdkVDI5TzBDbGgydS9Sc2xaVHNTWmh5KzNFell5eFlySm1DQWNxRHM3bVRzamZJcFNtUitCeTE0UEEyM2lJK2dGa1AvQkVtWlo0REdGU1RrUTZYN0ZISnorTjFQN0dBNjVIejBLVUMwaFNYRzRrZTBiQTdXcW5vRENVQUZjMTJJV281NDhnUU56MUV0MU5nbkdNanJIaXM2QW12L1ZiQTllamhSNHVMbkczZmlndDFkU0ExbnJVRjNNVGQ5NnFQUm9hS2w3ODEvT2pmWjZmWjg1anEyc1RoYnJQMEVGQU9iaVlWSTBFSDNHS1BrNG80VWprTzVKaktyelNVUDlsUHpoa2FGZHhOSUZZQjYvSjI5RDZJc0pmS3QyUElVQW5JMW51dW5uZXlGQlhlZnl1NjhDZjdISk8wSFVNbDVIMFFqaEVOTmFhc24zSlNDOTBKS3Bqc2FVTXVVS2FyMmRUOVlwajVyMjlQRmdWQnVXYnBTNVdRd0VkU21lRFVKMFp3M1lyMU1NUEFUcndWRi9KS3h4clk5WGFRWUJiZTlrdlNQMHlwemgrSUdyZ2w2UEp5N2dBZTBJVWVjR1FyRk8rZlY5aDFmNnZiZjMzTEdydUlmTHFJcGlRV3JoQTRNdWI5c2I3UTN1bTdkMXJzTjFZMkRwYUlXNXk2WFRkMTB5MXpQZStIMCtIQktFMWVPeGRzcndUajg0MjB0MVNXcEVhSEVtcnFhTXhyc1Jjb3hMa1NPTktoK1lJSUUrWlFiNlZUUm1FYmg1Yks2dVQ1bjZUUmYyRWd0UVV2VjhqSEpsdllqbmRKR0lWYWZzV2NkcjFva2VvZ2c0aElJZVNzSG4ydU5DSm0vcFBoL2JVUFhRTnNBQXdzYi9WSWQ3eTBFMjNKNzFqSHZXckxKQXRYUDlWS3VwTjExZ2F2VnNROU5IOUxaYXcyVDJ1U2RRMnVKSHJ3QUN2YllMUGZpR2VDTjNFZDZneE1menBsZ2dBdWtjMVlkUGh3ekFmMk1aazhZTSs4N2drWDVMTC9sd2hocnUydXBjWHkyMUNtRm1PN1lSbTdRZlFtUkMxYit0ekFaNzBXcktTOFlHYkVWYWozSWRFckIwUU8zU01SL1QrYmRDbjlqZ3JBZEN6YlJxR2VEUVZ5OUJkejg0RUpaL0wyQjN2Rkl3bm95YU1FU3gxV0ZyallXb3V0NjRsQlpxOW5kazFMVTFuWVMrNi9qUkxJOThVczFsWUtuUzBGamNER2x4UEZXRkpGS3BkSjR5VkowSjRQSVMzMWdDdUF3eDh5RzA2QjFQUVFxbHVxT3BHRzBRZCt3bXZzb1pST3JwTElKSjBaZ1JybkMrVk11WVBZYlNxRHJBQVROOG5hNHJEQTJJRlR5Y3BiZDBhTG5sYk5aYTI0WE5PT24ramVGVE82ZGkzV0liYWhJNzdDNzRONzU5bjdhRStpUTRsQXlkNHc4Wi90OHpQeTNFT0RNTmkva3VNdTRYSHdFZ3JtNzFSdHFjSW9hZi9TQ0VkL2FGQ3NFc09NUHRxMmdOQ2lveTB3RlFkUzJGZUczMDA5WlBiTTEzV3BxTzk0MUEwRExqNlMvbU90RmF6TllXVnd5OXNBNmRjbWpseE84VTZ3R1IyZmRkVENsVDQwT3RlUm1iVlpVaGFQSmxUMEtYRlJVRzNSOUF5MUkrWERSYWpneWN2SnNmNnRvRVhha3FTNEhwYzd0T1AyRnhZNU55K2JqRVpyTTU4aUtXYlNoNmtKbmExbmZpT2ZzZFJwTC9tek5mRXNyVisyUU5NQ2o4Yk1Ia2FXK1J4d2pjSk9HTjBNaWlzWVdLK2Q2S1d4T1M4MWw3VG1QZnc1RlFWT1hBWGRHYjNlRnRNTFZyMEpVcEtsbzN4UFFOdU1RaEs2Y1ZPaE5FRmpWbi9MS0xHNFNER3E1bGFXS1RJVC85bG5HenF4QTd3M3RCMk44Y00yY0laU3NlUlVjYjBjQkp4Z25Ma0MydUxSL2RxQ2hJdzdIdGc1MXpSNFh6Z1NRS3YwVzcrL1A2ZGRJd1Y4eXZrQlBLWkdFbUFPTmVRd210WnVjNW5xbHRtakxGZGpSQVZLS2FqUnZzOUNubXpUQlllU2Q4ZGUwYmtVU1VPMmFpSGtCQXBQVy9SVDA0U1lEa3FmMmtScGRGYXZwK005YU5DWmxhSFFJTDhYWlZPbTlGV1p4ZTkvdGZaYnIrUExybWcxcnZuQ1A4cWJrOVJ3M0MzSnRkYU1tSW4wNnRPOWJSbURuY2NEVHYrczVyOGd2T0NsUU10QzhIcHBIMVBCdTh6WGtVTUFGd2poRkNFaFBib2VHTkNWek5LUHQ0b2ZSUkdURFpjRW1BNFFMOHdUcWZtcFFyMGo1QUFqMnpEZVdDUEM5eTNRa3ArKzhmVVFzeS9SeFBKMm8xU055d1lWY3E4WTExdTYwNDZ3d3dVZlF3WjR4a2dmN0FRaXBKT1h2MDlYK0ZMRFRoVmpMUjlyQ0wxN2pYY2Q0Q2M4WGJGbG5ia3E2Z2ZCY3JVRE9PSmwzUXY4aUNHNVF0c1JBS2pOU3NVREQ1L1kvMEdpNzhjSmhYOUNBSUZTd2xHeHN4bGpmMllRMDlSVzloSWlhcWpuU1BXc1N6ZHZXNzIvc0hZdnQzNEI5bjZBZHBKczEyK0dwL3ZzYmx6aTFFOUdScURxeFV6cHV4ZkoyOEYvZk9uSFNuRGZoTDZtWDF1RW1MeWRxdEFJN2dvWXN2b09QZktvZU1kcXA0LzR0TXVUTkZzYTJNTmJybHl2Wk5nbWVrTnpjWDM5UnVDdWhReFpsOFU2OGVMZGJmNy9vUzJXa3dEZzdiNXlteklBNmNRaFZrSlp4bG5xOHVFVEJlWXZibzZzeWNzVkloc1ZnSVFxVVAyTldwSlg1dWFPcXhsalEyeC9wdHZSYnNQK0QxQUx2QlZSSmhzWS85RXVTbzd4Zm1hVEVSVkEvMlN1RTVvcmdORTRjd0tXeG44M2tYN2ZRQWkrek5Gc2cvM09aNys2MjNTT0wyN2gxRDVWQmNvU2ViMjN5bHNCT1hVSE40UHM4MmttTk90Rmpmd1FoYXlYS1orRUNlME9yT21YR3lUcnVuTS8yelR3cDg3a3BvWnZqODg4T29sRHVST20yQVRyRUlIR3NhcGZhNzh2M0NLZU1XNTYwdVhpMVA1YmR4NjdGRkhtK1Rjbm1JRkFvckluSWhHYVFMTDdubUpldjQ1eHpMQkN5QVdqaXJhNVZPckxTaURDYXo5WTFOeFdiOTExbm12RnYwcVAvU3FIOVpZUUtkUUkxN1padS9LSmFKeUlXMzVNdmdrcW83REh3QUw0MXNOZWF2d2IvcHk4T0lBY2JjU3lRN3dPR1NyYmcvNnBJcWpTUVU5YVdiZjBIRHFBbFMvQTV5VW9FSEJzK1hBVElaMGZQOEc0bndhNy80QWUxSlpPaGxFMU1XUmIrc3VEaGxqSGNyVXdMekRXUGdwb0pPYVN3QlhwS1lUU2JUZkJTQm00b1RrZ1JTcnpyeW0xak9MeUlvdUU5bTZIcXl3MUJ2KzRlckFMbC9IQ25POWhVYXJ5TXdaZkc4KzJRMnlZYUVoRTVoaVNwWW93ZlFEOFZqbmxIT1RyQkUwTTZnT1MxcW9KSGtaT1ZZYTJZZURmOXBiaEpUdFp4UTZJZTJlR1g1dEVPN0R5OXZEd3VJZHR2YnZMUVZMREd1K3htZVVNaVh2ZTRCaUptbURKN1BUdGZGMDNIeW5vclNoWHpLc0NFd1VGUWFldEUzM2Z0a3Y5THdobERPb2JRSnNCMVBrbm5GU2thM0RxaTJuTDFhcERZS3lhNmdQaU9RTUdVdU82eFJxWmNTbkNuem0wRUhYME0vOUtCMTBPSmZtcCtnR1FZSlErUGVHTEE1UW9JRVUxMUhqNUtSeURaREJEVzdSUldnemVsRlF0aDBoS3dTcjQrT0syNHk5ZGpjZUNRaWhGa1JUWlMybk91VG5ybXRlOXo1NHRQMm1CTjdLVlhQUUQ0V2YyWCtvaWVqeHhqL2lwQm1Paml2Mkl4NVBVa1d6MEpBSXlvN1dJbUdIbmpkTUtSZG5lampmZjRnVUxtOEZnUzBqKzlZaUlnQXFTbFpkTEMySWxkWXIyL1ZMSkh3bW9FMnF6a3hWS0tSdzJNQ1RXcElLMUprb2pLc1RmZ281bTladElzR1o3bHlDSHEreXErOFdMSURnUmp5R3NWa0ZXbmpuTDMrNmNWeWVWVzg4WmZhUjdMcTB0ZlpYVndLMTRqcjZrajFDUnB3T0s2TUhVb1VFVW42N1pyeUU4QnFTU2dKLzZvL2hmOXc5YmRQSHF2cjF3MStFdFFVYVJnNHJzSTk5R09UZmNJN0FtNWhTemlXeXdQcEhxSDBhbldRNlRaUytHWm9tdzJ5aDZCdHkxd3RPNGxyL2QyNm9ZNDY3d2V0Q2syNWZ6ZHZReU5TZllCOTRiZTJ5c3F1eHZ6cTRaU1NGMGliL0tiaXk2cTU5aUtPaWg3VnlUcXN3UkQvdHBGU0JEdElvbk1ZVFM1SExGbnJMLzJHejBRd0ZWZ2w5WVdBVzcxZ25zR0dFQlJvN0dzQ2RXK083Y3oxWENrd0J2L0o5VXNmWis2bkZpWHovTjlkNjhmWTJjZS90dkN2UnBXdnZrRGZkZ0tMRmxoaFhDa0JYZ1JLOXEyeDZqaXlXTXJFY1N0UTVKeElpbnVqbTJ2Vm04VnNOYzNFUUVOMERtcE42WnMyN3VVZjFnL2NRR2NoYjQ3ZmZmNnBHTWJLME9mclJlbjlpbWtBK25XNkFQL282UXUvNFBRVXlzUmNIakROcVNRSENpbDMyc3lQQUF2YklsRzNQdngvVWVxQ2RRVXljZ1N2UDVCWlFJMGZlRUJWaS9JTlIrZ0doWlRTaDY4dHU1ZGdlZXRhYkhzSVhVSlpRbmNXUVV5Y09lcTNtcms1REJPc0hVblBPckNhbmIzdDd6QkNUR2NTZzJwamJYVFllK2FSUnRlVkhxWklOZm9hUFhBRlFHNXdRc2VKL1dHVXcvam85bHdVd1VydHlzSjVFeWRIaDRyUXlxVjd5NDJGTDNRcDBWSzhrcjNncDZ0YmtCZW5KQXZFZHU1bit1T2htY3ZPcE1rR3F1bWdXQmhOSWJqcVpKUHZ1aWUxdVVJY0cwU1RTYzlVZEMvdlN2SkNnTnd2V1h1UWtmR2NqU1hmQTJlMUlyNWJlaW8yVElPcFhjVXVaMmRSSXhDNDg2MUk5R3BrMUE4MnpOWXBrSDV0SjM4LzNlY0lhUXRtTnNjSzBUemZEOHJYQkwvSjhTbU9JUEFQcjZ3V0FGbzFTcTF3K3doa21qUFMvdXNiQ2xsVXZHcGYwQXlWdU1Ldys4eENNM3BBemhDRkxmR1BISlRTWEJOaWFkcmdpNDV2L2Q5SHRkbFlwT1pKdkhkd0dmKzZ4N0VFUm13d3BiL1ZsR3hLM3BsdU1INDUrUFpZYm80ZmppenRRcUoxVFVPQ3FWZXVBUEgyM1NWaFkvd0MxcEJoSjJYeWhTOCtHZnI1bGZHVnM3bUk5Z3NZTVdzNVpJYWlCSis4S0NERVJCSnYxQkpRWEJUNGhNL1R1M0Q0aEpndUVHYktTTW1WYzJ0R3Z3bm5RY25KQ2FqM3Y1MWY0YzFKcHk4SEp1eEQ4VjlEL0cvbW1sQ3ZOS3I0U2ZtSmtNYlJkK1Z0VEI3ZDRnZnlRUXgwV0VjcXRqS1dVcFhLWDBwcnNFQ0x4Ri9QdS9aQ2NYMEpjbFRVZVdtc0xMd20wd2UzOUl5YklmakFqNnRMMHBIL3pyNytSK1JPZEdHd21DTEN3angxQnkrU0czNVU1RGdmNU40ZnhBUW1UMFIwTUlFaldFWHVhY0lVWjJzNDRkTDR3Vk9KYlNqVE4zNm5mNXlkdEVzMytYbUErVmJMREhYaXVzZGZrTFozTnVCaTBSZm92a3I2QUhBa1dFYmFEcStteG40SWExTU5MM3JDWTM1OTJXTW5yZFQ5T01sRHc3b21TZ0VHRjZoSjR6WHZHVVNlU2FEdVo2TEMvY0pVWTFUNDRsYUtNd2hUZWR5UGkwaEtnT0k1V0lhdkZMenQ0RkcvenJRMms1OUxVTllQRmliWG0rdFI0OU56SWlYZzJJejdhUnhzRW1zWHVXd2srYjloam1YMU9MZ2o5NzJPbDZPTVlIRXFyWTdZcmU1Y2Q5bnV1N09kNFlSNUJMR2JuL2sxYTBvZ29ZUDZqakUwOUlJYU5zdm1nd3lmM201TTd5RElEdmx5MmkrYXl5Y1VQYm9tYmtWRnJ0WkxkLzBCazJRMThLSzU3eno5SWNNandQODZIbmszT2lFbDJLdm43ZFJwWGVHbzlEZFRZanVoR3JHMTFydHFEREREaHJLUkJVUDRXbVhwQWZPczJ3bUcvdU45Ni9SajZOK1UzRi9Cdmk5cEVHM3JaSzZTRCsza1NQMURrMVFGM2FTVjZOTGNOVnhGTlB6d3cyUGppSGsyYWJ4RTB3VHlIaVZkV1NOZnd1ZFVJMTJoV1B2NEFYMktoNjBnVFB6ZTFQWlBJNUlNaDFYVzMrT2J6WHNIV3NyZjFCM2FoZlA4bWRzRC9ONzlOZ1lUdDNBMzFDN0Nua0NsWTgvOFlXUllYUStQM3kzUlp4N2llWXBtbGlnSUhMb1hGL3lRNlBqR2U3cjRIK29sSDgyK25IOWtRMG9DUVhVTURuUHczSm5BMXFXZFh5ZHphR2lVUDI1V0VxN3lYNkd6N2N1Vld6QW1lWWJreDF0REdmMnJmajRacVdlbW02SzE5N3QrMXl0RWJvNzcvYWErTGVRRC9TUzMrQ1RHZzk1c3JSTytIVkZWTHZzY0hSVDQ4RVo2T25XSFZMbC91bFJXdVVxVjloVFpMQm8vNDE0SVl0d1Y1cHd4NFFMU2xYd0NwR0IxVyt0MXFTc3JiVzE5SzM0VHE2dU1CbHhhVTk5Vm5KNWRxSWNFc1lHd0JKb2dJL1V2amdHalZDSFArVGtLNzlNWStnZmk4SWJndGJVN3dtNnFUY3NDQ214dVZPWEQzcGxvcDhISHkzQVIxeW9aZWh0Y2RIdEhqZDJVT3JHQWZ4N2VOSytmN3V0eHFPdHFCTU1PZTYvVDNtSU0xRDQzak5QODVSY3lLLzE2cjk1ZXR1NUlBNzVORVlialUwbXJ6VU9VQTkxNlJRUTB3bk5GS3RhUUo2TmN6SFRycEpYTW82cWduendzaGJpY3VCM2lsZTltUXRyZ0FWS20rb1BlRTY2QUNSK1VidUlaWUFiVkc3YmRWR1RhVTh1bE5KVy91ZWZPanRQUVBuQWlmRFY0bGpaZmNBTEhPaEo2L2FyTWNIemVuRWVYYkl1RzdwL3dsU2ZsUEs4emREZENnbC9MTC9HWjAzeUVKOGFkek8rSG1sa1lLMC9sMzFXeUhOQ25KUUwzNngzbXZDRXRWMHVvbVk5Yi9PYVZPNURVYUM3SFBkWi9HUnV5M2R4c1lKZlVxMElsTExwMW1uNnVoc0ZGS1l1Vm8wNkpPblNxV1RMbXQ5L2cvK3Y1Q1JlNWNDR0R2eXNxZmlYdzlkb0ZsVVNpemljaFZNZjhTcjNkWUl1L2JOTWtsT3Fzb1g1UzFlS0YzQlM1OFMvUnZvK3kyTWk4YnV0bWJFdXVHSEhoVVVNaTJ0S3JsRHlBUExVTE5rcmxid1FwKzJRMWZmcENBNTEwQ25kWkhGRUNDR1JualBjQmFsVjYzbkI4Ull6YWkyb2RPeS9XcFE1YlZuYVZsTk1NUGdRR0tCN1FYVnFGeDkyMUN6UDVwckwvR2NubzlxT28xb0VSVU1xOXRMSkt4TDdnQWVBSUZVSy9lUUtDZURIVVFGUVdHM0J1WGVxQWVsTXM5NytnQmFib1RwamRyelJBRlh1NWlpcVduVjYwUHBnc1hxNFBtWnhVL3ZBSUtUSEdoa3FLMXRXS0hzVXM5TG9aVWFmYjQ4ekp6VFJFUkFVYTNsTWEzb3YyQjMrbWd5bithb0lZTEZYYkcrS3Z3bG9RTThFZ05wN3RFclA4ZWRGT29XcnVpTkxxcEdwdUVmWlNwb3NML1YwU2lHWk16eE9QT2NFNGlvNHp4aWlxbGhXOEFwSnp3M1hiT3JsTjVyUFlUeUNseVZoakQ1ZE1aUVNiT0l0TStCclArMkl0OGlteW85aW15ZzZWYy9ZSUt3bFZZNFg5Yy9IbXhoWUxmWDY3MTBYcHNUVFhGa1Z2bDN2cGZxMDFSNVRYcnpjaUZjRGF1ZWJ5VE9DSXBTazhmYTRjVmpWOUxldlpWQlFvbmx1WTRqTVlwNFNReW80SDRXS3YrRWFhMEpuYzU2eEFQV2tuUmFtb0RUSWVVdGo1V2srL2xyNUJGNC8wZTdkK21iRzZyOGV1RVVaZnZicmFSZXlUSTRoZHduY0w1SVF5M3c0ZnhhRkVjUXZhV3BYcXVIZG1haGFiVUF2OXBDbDhMVjBaVzVoeEROVHphYVpJZlhIMzlleUZYT0N5ekplK0FJeUdMeWQwK2d3bXh5MU80aVphQjhRZ3lEbVRKSXJzMm14S0xnMFgwNVN3WW9GY2tYeHJHMkMyYVFpb1pWc2kzbDF6MlcrY1pZZjhtWXBtOGVUTHhaSjhvUXg5b0ltdHdUV3NtWm5uMURWWHQ4UjVjTGhabHhoQzN0VEFkWWxNNGp5Y1BaVHpJeU5PcE9pQ1BRU0RUTzhzQXVHSFI2ZWhQbWdlSmhNN05NQTYvMHU1Q2RhTTBUMUhxK015Q2Y2WGpjMlMvK0VUU3lDOXVXUFdza3hJc0llaW0zZ2VGZzViYXgwNEptenU4VGt1QlRkT2NubFZkT3FIVE5QOHdPN3NsNFk5NVZJWXdCOTRhRGthL3FGanZ2aXFJSDdUM3BaU2h3YUx6bDgyNE1Wc2I0UmRkYUJKdlZZK0FHa2RLZmdlcWhRZjdic01SeEd0TjR5WGZLTzZPZEJlNFlsR01USnladkF6VnJqNWhObndKYnQ5bzV3cEVGMDhWM2JNeC8xTmtBb0RmdEFvQmpDUnRIN2FXYitTL056TWxOZkhqSFA2K0hPNE8wUGJJSVg0a2RZWGpWaGdseUxhczA3ckZCc3M5M0JCYTIyK3E2ekF1VGtVMXM4UTg4dTN6WDhwbVJSK2UyUEZ5NTJXZ1BUNDl3VlhwU0tYNjBHa2N1RW8vdFYyZXhHa2dYb1hFN3gzU0I2SjNnNGRRTlRzQWlmN2J1T2FCRWRPaTJabGdxMXByc2dNNi9DbWpkbXZPRWVSdXlDdVpQN0Y0T1F6aWpCSHg3Y3ZmYnNpcEsvOHBnbWdaMHdJbmZvU2JabGx3Tno5RGlIWWRjSm1xY2RjSmpGUUI3U01OZmFqRGtsYnl6dURJc1lLUDI4YmNwcW9zVVBzTWsrWDVDWTlheTYzdzdOcFlhdDBOT3J1M2R0SVNkMC9tN3prTXlPWjArckhoYWg0RE5Lb1VlaGVlVGRDN1ZOOEVYa1ZvcDUvVU9YVitZeldOYjhLWlFENzhHV3d3SVRNanBOVG5iM01YeGhLb2NxYTNVS25uOHltRFFROFBkbUNpN0FWK3FvNW01MDcvSVYvbmJzVnFoWkxiek0rTWhlanZqejdENU04eDcvNnplc1BRa0ZlbHVqYjV5OFJmQU41V3EzeVROemxBRllXYk1RY0pwd2xVMkUzOTBYUVJ6aXhKbkNPalZRT0I1QjFEZDBGUGFKWTVIN0J4cnpaSC9VbElFRVpGOVhtenppKzRRbTN6YXUzUjVSL2lkcHpna3VJb2dWZW4vUjNVTUZWaTFUNlYwT250T2JWNHJyTnRRaVgzdGdmMUUvUUNKNXA1czB1Y1JQaU9KZFlzZFV2MytBYWJIUzhFS3NwUmFmSi9VRnVnOWxDUUNNRXZCcXgrNXZaWHdFQmZuL2JuS0RaN1ZWMlpYeUlPb1l6eTRoUzhuOFlqREJNYkdvWEsyVGhFY1BOaDNwcGtvemN3bjRoNUcvYWdScFZPdG85WnJXVGgyMEdXZkR1V0hNdnBPWWNHWEFmU3lVU1BNYzYrbTYzSG93aEk0bmoxNFdsR1Y2WDFDT29wTmxrQlNSQVRBb1NrT0hQUmZXL0d5NkQzejJuNHlkaVdEcmxWZ3dzRzJoMGZDeTBvMzRYRnNOTXRkTzZ4YjZqVkFPdlNGWkZXYTRoQXhVVDIwaFMzMUhkZERhNHBkdW5lNDl4amVlQnVDZDRUZ3ZudEo0NmF4cEx0ekx3N2tXcysxUnBBNnVsVklwQWY4eGxNTU1BWHlObDNnV05pR3V6RUFLWUxzM01OcENrZmMzaUhRMnIweU1KdnR2aFpkSERiWWlHYjNONnJvWm1YcjdSNW9YbFhyb3RmbjRkYWJ2bzVpMStqZVNodDdtV0h3bk1kYVltTFMyT1ZDV1Y4d3p4dXJTSUxLL2ZPSnQ2aVFQOGRUTU15bkhnWGJON1ViR1BzYzNRZjAyWjQ5OHZFZmpjUjI0YzArOTNwWFBwL2dJQ0FnT2IwZmJyYU9iMzhBTnRJd2ZoMlhpOTExL3pXNlZWRGtldlFDTEEzZmU1UlROdzF4L2JaYmdpeDNHRVNqUjEycUt5TW1ZU2g2TEZjaEc5SzAwVWZjZXhrOUhwVXdqSEI1VDJhT3grZnBrYm1zdVVyS1BNY3pSNlNSVW9DVGFWcGtIZEV3dC91OElCQW9vZmk2WEl3U0dPdW9mV0xqRFY3UXMxZVVwZzJwcE1LNHVXQXJBZ0tQUStuZHo4Ykx1WFdHVkdFWE1XZXNteTI5ODVhOXB5Y0ZZSysrc2tHMllzd0xhL1NKUjhyZml4Z3FHOUlQMnZjaCt2QTBpN2J0Ty8vUjdXVFNBUnlzd0hrazJPMWJqMW9TWUdpcUsyekw3R3Z5ZW5hMFRFSmt1NmZQVWlMOEE3WFlTMko2N3N1clp5aXZTSGEzZmlMZWJwcnQ0K053d0hrVzI0ekRBQVVOWWdZb0lFTkRTZE1aSDBrY2Rla0F2NDRMUjJYYTRHOTBQWEdUeEVaamtVUnRvUEEzaGtveVh0Uk1zZkV6cW51eStadjJVamdNellZTHZ6M3FRSHk1UHFSR0haRjhaenNVQUVDM2V2UHFTd01wTEs4NmNzWDMwUGh0eklVZkM4TS90bWh2cHgxYXhjRzQwaEUwN1pEQmlOUXl5SXhHWUdOcEVJbzNSemIybFY1N0V2Wm14TFRsZ2cwbGJpejNGWEpYeEdDZGhtV2dFY2p1a0NMUEFsVElGV3h5dVJRc2ZORUJ0SGtjY2FCay9oSnhWcFNzUVlkNDdOWXJtMlMzckZzalFHMTRuWUhQckJyL3JLdmlWZjN1RG5uRStYQUpKaVpHVWV5aWZqU3h4VkNKMVVBaUtldm9Yc05LR3U5RHF0VHQ4TWFqOTJMSGRGNE9RMEUvem01aDVMd2I4T0VkTzdOWGhPMFhwTUQxTHZuRDUzMk5Pak1sRUU3MXd4U1I4STROZ3pQU1dVQVdXZk5aUnF3S09GMldSWGd6dXVpU1dUbTl5Ly9MVnlkTDFCaitSV1EzM2ZlOE9RdDdod1F4eElPSUQzajlhV2RXczNaQ1I3Rkl6MGFwaUFjbGhZcWZEOWhNTmUzS2h6WHZFbFFQdGI3MjM2L2plbkEvVTFXZmc5TUZsK2R1RWRJUmpBdUM1Z2NUTVRhZTJrSkFWektXOTFSZTFHY2xaMm5IV1ltVTVibStVa3NNUXAyYWVuMW5JeEM4RDc5dFBvL0xubnlSMWFoTktSdkhrYmxrVDRVQk5QbUp4bHMxbEZPa3VjL3c3c0JraEdzei82ZUFFZUxuSm5vS2NGU1ZveU9na2hJbHkrMUxISG1seklBRGhEK3dadnAwTVRFeE9nUlRXTCtkcDJlcjhuM3JncHRnMUw5OFpldFNLSHducEJVSjdOTUEvY1FhNkRqM041aWxQWUV4NXlvZ1RPQk9mSjIraUpnb2xUN1c0UzFDOVpyK3Nuc1hMUy9OdG1DaHJwQ1dsSGFOWGgxL1ZibmhJOUVRVy9KMnh3cXR0dnJ1SnZoeGZhRC9tblVIUndtdUF4R3AxMWZqZ0tUMFYrdElWRExGeVZzVktoWTg0OVZ4VVlweXdxdTJLSll4RWlFSmpaNjRSRGxscEtWYm1sK084bWo3TWJnODdvT213bzBzdXp0NjhlVnR0dWl3ekphbnp0dS9RdXhuaWdadHhoeVVxSGdhK2RQV1ZrUmsyeUhFSS81eHQ1TWQwZXdNanNkZmhXZFZ2OTdYUlVwcEN5M3lYRStBWkNJZlEzQmNwcll1WXNnV2hCRk5UVy8zbmkybmVDdll1UkcvRGh2L2s4aGlJOUU2QXl0eDFhM1RBeE9TemNJV3lJeTI4S0dZRzNIcW5rY3NIaGE0b1NuNWd4ZE00RnZpam1IRkhWdzFFT1RHcTBiNHRwdDlJN3RpakhXejVyRlFobGRBcTlvR3lMc29pQWVNNFMvZUlrcVN5a2FRMjRTZjZhcTRDR29mL2haMGNwckdiKzVTUE9zSGN2VGpHSXhTa0tBMHNLakN4SHNodDg3MXlHbEUwb3pwWXJuWkEzSHY1cklWNVhLTWpZRDRXWHltRUFUM0U1TzRTbDRmU1c4VHFWS0hEU0RnNGhBaWlXRjlOR2RrZkNRNENIVkt4K016WGRKSXQ5azIxQVVMZm5XRDJ3dUV6TUs0OFJ4VWVORnA0cSsyUDRFZ1M4Q0JnNy9UQllwblVQOVdQbXZjcy9EQlI5bGl1Mi9PeGJhM0xFK2MrcGc0VVlkS1RpWEVnSzFLbnZRTEtQOVl5OE5UK29XS2xWRjZoTHhZZWx1YUsxSE5XNkRUaHdKQkdhaXFuNFRXU29CdE9WYzVxWFZNMkFlRjRuS3kzQk5yTG1LZG1yS3BMaUJhSElVRDdKUzFUUTlGWnJFMXF3SFpDSmtrRHdMU2dJZDA5bXhjdDlKR2RPbDNJNVI3VUJSc08yTHRDK3R1dGpKNytnOW90M01FKzFEa3Bid0JIUlBraTQ0UVZPdFB5YmlreHhoVXZacndXWkhvVWNqeWpDZC9CWDNqRU1zYXpKYzEwWVR5QjluQmptN0tPZWRCeVh0c2pSUFlPRTFFdmZ1N25saTJVd2RhaUhNN0dCYmZ4THltd1NOdVdWS0dXZk0wcXo4MG9LLzFrMmdrNkpSdVdQYkJCSXVHUnNZUUhPNGdUU0pPL1kvMnRVQlQ3dDd2Tk9nbiswdjNkZG4yQmxmendLMUFEYVd4eWFRZWM3TXV0VW1pZjFORWlGci9rVk5CaURoZGZxUGwyZTE3NGRrZjAyRm9DV0pvbUJlL1UwRGN1OHByQmZxMVVzV0tGaWZiNXRRZERqdHdrNmZGdW13eHBjeE42czQ2THJmZ2RXaStFejdOOWhVVDMxcDFQQVJjWFhRUTFCZzVta0FsSVE4VVlreTNock1rZERpdGVObW96UVRtZDN3QnZNUmhOODI2dUk1bXM5SFZDbE14djNzTXZkSTYvc0QxY3BxVDlHTlhWTzYyT2FJdzY2aVJ0dThIK3JjdUtocG9yRVRyV0I2ZnBMRFBFQnJZakl2am1RYURGZjArbnArcmxodk9ZQ1BTeCsvQjlOMDdtY21UL09PT3orREJ0YVYzY1o2aTJTc1NRU3NTaWNvaWNtZzIxUHN1bUcvU3NQUG9xWVE2YXVyUFVMTCsvNEhsVjIxSUdUOHlrSzByWE4zRHBHUCsrR3A3OGF1UXpRN0tqNXBzeVFRM1BnT1o2bWgybno2d2lNV0F6UzdYTjU5Rk53aE1ZMzBnQXQ3c0JRRGk2bUJUdHlLejBOU2VacVp5YXBBZytmUVhoZys4cUJZaEJPME5qd3d5LzJCNUlpTkQ0UENlT3BybjZERkM1VzNOdGRhOEpUMkdoSU1UNndUZk9OTEFnbUQvMGxtTTFpblgxaWh6RENwR2hGMUJyT1F2MzQ2ZHJMNGQ1M2l2M3pTOWlEM21Hb0djOEJmR3ZuOHdpZ2JnWFAvT0RMa0htT290dWVZZ21PMWZsZXRVMzJxWGRhWlRsZHY0NDI5K2xLMFl4UFpJZ3UrQWQ3aFFZamo4MFpKeE9DMERDR2lXU1BVbGJtRklrUEowcytmd3hYZk96V3ZzVkkvTU9JaFFiWDFkT2d6L2NlbnM2dnhZbGpJVFdrNXk2VlpvanovZFM5NmlCOVZlUkMrb3VWcFR0M2JYdmdTUFNkY21Ib0JUZ283RnF0VURwTThTdWNoV1JQUCtld240RjdPdFkyRmxtdjNMMmN6TGUxcGdtbEViMXcySjlSQUwwWmdsckpvaGwvQWJxWCtIUkxlT09IUkZ5UVpQbVgyUFQvMExSRWxHeVhwZTFnaWhTTGk4blB5RUJpUk5uUkU1cXFSYjdwUmppTnQyd2E2aGFIdmVDVHV6VkNFaXhsQk5aUFRpaHM3VW1yTGxOdVc2aWZqWS9UMFY4LzVLbCt2RFhjeWxSN2NxSGVESHlDK3UvZW1jT2RER0Q5UENIUnZTTUZ3ejZJcmhBMW10WHhmaVc3UXJMY0RDeVZnWnJ3R0Z3QitPdENuKzlSajRSUkFiR3VydUlvZE5SOWMrc3UvMDRORmNDblBTOGNKaXJub1VtaExGVkd0cC84enplenZnOXlZZ1BrN1pjR2NXNW5WUDFCcE02b2ZBMVEySGkyY0ErYmV0WEpGRWVoN2ZId3dmdlYyclM0dDFwNzBEeGZFUUtFQWY1TnBqRWpSeGZ0d25mQWhUbEpEajlCamRDakFRUDVCV1BNZlVRUk14WWtNNlVXcmV6LzV3TXJ6dm9wTWJVeS9CVDhCaURJZWFoMU1XZTZGZjRwV0lOelU5aGtHRndkYmZMVnpzOE83ZjFua2RFSUZXZUZ6US9RclYrb3pNNkx3QlRIMjc2M0V2N3lmelNablNHaTFKYkIwT2xXWWVoTkJTVDJGOHZhVGxaNzNJVks2dEhEQ1hnajdzOG03UVJTNWhOUlFqY0VJRUh5M013ZzRVTjQ2c2ptdHZsNkYzbkZTNExGUmw0MjNmeUpOcHB1VGE5V1dTR2F3d0ZXQ2doMFJ0WVg0aWg0ZGZXUFpZeEVpaEpWTFpUSGQxWGJ3L1dWYy9XZTc3S0hyNno2K3RZTjllanY3TkJuOWVobjIyb24zYWR2dTBmSDc5SGhRbmp5QnpFYWMvRTlxZkFJRldpR3UxQ0RwNldreVdvRHlFRWlZNzRhVis1d1BZVm9lR2hWY05STUlKOStrWkxNdTQ2bCtEbnFnT085Qjk2Unh3Zng1UlVQRzVUbjNnb002Vng4YXF6SzRGVjdHSklsaEhPSDkrbWlTbEZBODFxNzl0SVhjVXM5Yk9scXdlWUV1R0owMkt6NVUwTTlRbXlvRDZDM3AxZGFIKzlQWXNUODhIZ3JnSTFvVGIvNmtJTk1MZzMxV3VMS0gvcHhmVlJ6YzdtRmdyYU9HM0lNNk9ScVhIMVJhdGlHZU5oK0ZYNWNhbElzdnJQQjdQNS92K0NTcHdDc011RjVsUkpLcVpkSXQwdHFzZHVKcHlOMDBFV2gyN3dwT3BEUDdWOWZYNlkrODI2VVZPY1BSdi9SQlRCZnYzWFQ2a3FGMlQ3ODVhempjYitlMUVMV2ZuVlZiYkNwQnJSYkJseXo2dFJibTVCaVNkYkhYZ3JPUW1kei9RbXJ2cVNGTGN5N2RZTkpSQ3FxWnBnQXkzNnMvbVBReFZIN05WVEJ0eVZIcDloeTdmMEh4ZCtMc2ZYeHE5S1AwcmR3RU9xVVR3YjNzSUhYdlBHQnNBbzI3aEFKWFZYR0ZiTmZqRzVEY0JwV051NDFZVy9wb21CWkQzdUY0UzVoeXNoWEN5bkhjK29sL3FoL3ZxNFYvMXpFdnV5UjUrc2JoUXliczRMZkl3V24zb1hESWMzUHVlbHZhQ2Y1a1lyMklkMVJiQU9zMmM5aEozSHNsNjArS3pZaVNDcVgzLzFwNHJGMmhVT1dNbXl0ZHpPNHdOZ2hrV1lsdFlDU0sxL29YOXgyS3ZMSmZOeVVGZjQ5dXhPOWl0ekFJTTR2ZzlBS3ovejlWemk4dFlCRnNiY0grUitRcHRCMlQzOC9OTWVhTHB0UG5uOFU3VVZnYWRmc056MnJpa09IT2ltZWFkNndpUm9KV2dIY3pPQ29tbC9DeTRaci9NTmdQR290MVpuSGJNWi82QjFEeE5ULzU2dWpoNjZHLzFnT0lrT0FVcGsvYTRvNUpDckpXNm9UWE53L1VwR1BaV0ZtRy96dVVXck9IUEEwczJVNkJDNE9rWlo5TFhqUEJic045S1ozNml6S1VBVXVhOUdESU9aeXN6eStYV2JJZCtrZmtWeDVLdk5lNjFBN1dtVWdJQVZwVUoxeElPc1M5aVUyeWRnQUdMeDNCcCtaMXlFNldsOVBlQ2QzdDRmSnJmVXhlNElKRzFJNHN0a0JVd2loZGZibk0wMyt3NmMrbTZaTFF4VEFhakYzQXZsSTZLdGNnR1RrclVYSXBXNkpKdXVrTHQxM2tZekE2L21IWUN1UGNaU2ZLcC96YW0vZDNsaUc2YVFkWFJUdUJjSjFQQTc2ZHpTaHdyeno4aTBmdEk0cjRDSkZBOXZGcHNWeWN0Ulh4ODNZalh2VlNiRnpQb2VTSFA0aUdZYnhuQVlXM0lQb3ptb3M4U2h6N3h2QXZTaXdVNjArYWl0WXp3MHVTV1Zaem15YWNhM3R0VlZLSkFsWXMxUjJEMUY1NnlHZ1AvVnJ2M3p0UGQzcjZSRWhNalNvZzZSbWFrTmZsTUpFbmw2ODlzZUMwbE5NcVFkRlZaNXlNdFc5TjlBTThmcWJJL0U2cm4yMGw3L21NaXFiZG9uMXpOK1o1WEh0blhmWnIrRDF2d2NWS3ROaUVsRjI2Z1c0RXovb0tTTVdjWGI2dlcrekp0aUpkZXdKVStnRHJybXRVYjYvSTNZQ0l0czEvbE9rTG1icWpiS1g0Ynd1MVdkMVlZb1hiMWV5M0poVDNOUUYzRm4zNW5rOVkvQnQ4Z3MwajdYVGIxZ3NHVStUT2dEK1ZWcGRCWlJSak1iN3BjT290S2dYdXFMenZZc0NIUkNPN21oc0o4YkZnd21TY1R4MGY1eHEyVEdYZStTTFhvbmZXdkxGOTRjMFhWaEpNUFhLdWZEaEZtWVFkbHU0WWJqYWpaMG1HTTJ0QlhGbU1VcGpLL1pQUS96MmVlZ3l0REFtd1NpSXpaY1FnYm16Mk9hTnJrem10QzB0ZlA2NFA1aTgrdHZtcmRyVVdiVmx3ZHhUMm9qL3E4YXk4YStKcjJsN0RuYmw2TnROUHV2WDFuS1JyNzR4bG1PeWdhVE8rWERMMHlHdVF2T280aTZhdHR2aE03QjdadmN4WEhzKzhWMk1QQ205S3NVRHZjamgyQUR3TG9LQTRYSkpsZWp4cGIvOU8vM1F1dmZTSzhraTRrVVplSGduVFNOTzlmejVocG4vMzAxU0JndzVGc2NNWmhuQkE3SzRTRENuQ2N4WGlNM09XbWJkWVJRWWR1YndCUStRVTVtTmM0UTlMNXZ6SmhBQ25sa055R2k5Q1cxcm9veFhtZS9WRXpFYWxmM3R4NnJpVjlHdy9iVWtoc1VLeDFEMnBNNTNwS1RKYVdzYWRicUhTVHhVc2R0UFBIQVpyUXpKckdNdjVrZEJVeGd1RlpZV0Y3V3NWaXVvaXc1U3duQW9sanRpL0xQRmxoYk1pd1ZxTXFtaG5aMXBzeXNUQUw1SjdvTk1JdlpsUnFULzIvVndreDAxR3loTGFBWUs2eFhsb1E5eHQ1MnRmYy95UWZyYnFkK1BOZHBGQlFOYlFvclA0VXltRVg4VndCWC82U0hVVC9lemhkQUZYQ0RZSEhNazVpY0ZYcjFCL21nZ3NtQzJlTjlVTEhXNFYyWHlFb0pRUmc5c1Fyb1RxcnE5TE0vV3IvVHMvUVR6VmdaTU9YYU4zSFhkcTZzcCs1VndCd0s4RHhLZ0YraHRBQWJyYzltOWxRQTNtbXdhbldMY1ovVzdsV0h1WkxiUkFlQlNGekdJSTBORWNhSVpWU3lCU3JZOGVLbUxkY2d4L0lwMUk1UStRb01LejcwRWM4UENWQ1FzVUhLUVh2UHVFSkNxeG04VGQ2RGFaUW82TnFObzNiSURlVlFtREJPOXJKQjBQWkFXV2ZTb21SZXVyanJ6dUx2ZjdOTm5vZWgwd21wQktFT0lXeUVQNzBNb3V2MVRpMDhOUk10Q2ZEQ2xpSWpDOUVhMWR5L2ZFZEJwQVhGQ0FxNnl5U0hTUUcwenRFd3NpZjZsdFJiNkgyKzRyWTdyUjhkT01EWWRsdFdDdWd4aHdGQVJLb211RlZzSVQyUW10aytmYWhpU05tZTl5S0NOeVhwdkUvUDZ4ZWVKRm5nU3FuVDhQd3B4eVNqTXorWU5kTFA5b09rM3ZHWkxzUjg3NEpaNEU4dzN2QW1pZTZsczFaL1FqY3NISnZIWlU4Tjg4ZEJBdSs1NnpRZ0hKcDhmT2Z3U0l4dkpGVEFhdkxLeHZHMkE1WEJJdlZsWUtIUlhINm9UYXhtZ1NXM2xOZUdHMmlaanJOM0R5NXlSNFd3UGJTYXJ0ZzBLam9ZZmF1RFVYQlZuVHJRNDdPUjB5ejRjMVh2MEVkcFVBa3phZE9Tc3NnT3ZacERwSXZ5Q3ZyN1hZeWJYTDV3eW42MXRxVitKamt6UmVHR3g4VS9LYWtHcWo1Wi9MdVk2SXpPTUNSbmlwSXdiU1drSXZPNnc0NExURDkxeHlRQnRIbGkzaXo0QUxSR1BhbXVzUWtxdHZTVkdaNjZwNUNxRTNtcERwb1d0YlNyZTB2eUFjVmhBbkt4T3FrdWxJSzJianBrakxYUFdlMUJrck5kVzVVMmFoODJYRWtaWjB3VTA4ZCtuZEt4aGM2U1lEenB0MTU0ZlFJRjBsUm1zRE9tZzF4bjVKMHVYRVliTmw0cHBHemtycUZ4OVNDTElDSUZ4SFFxdHFiekdwNGNmUktnOW1kMEVrRjVTVDVRK3Fld0IyN1JjZkpFWXVKckJZSVhObFNsd3VZemFneHYwVGxHUVlVTy9LSWVXc1dZRUxIMExha0EzRFRESjh4MDNpdnk1NEJRNTIzR0FUMndrWUVUMWhOVzdVU2RLT2NOckc5dWRxL0NvVjRNZEF5R2tRRmpsVW1wdUs4ZThwaEoybGtrNFkwNGg3dHN4OHJGYjVKOU1PU0RwZGF3WVZ0UGtKOWphQ1hDbUJMaEdKYll2NGFxVkRpVlNRR08rVDN2QUlVL0VxSWxEa1VrVzhkenM0T2xvbWh3cVZ3WUJJN29XWnhpYzBOcUgxSWMrckJEYm9yWnA5S0hZZHQrcjU5cWpwU2JvTnNET21RTzZRYzNYVXNwYXBYTWJHWHh3M2hzY0hTYzFDbmV5Rm5xekpKaXRwWkZReFFTNVFPdGg0YVU5QmE5cXRYM2t2UkVySEFhamRMSUV4emF2bTJJM2t2MDJTb1U4VTBLV1hBUkJWVWtKa0xrT2djelI1QjR5ams0SGZpN2RZY1djNUd5N0JDeHpJOXBjaDNUcExYUmRuVEVDUWphMG1lUnZjSFYzdVN5MDFsR2U5a1E3d0dGdDdyZjVpNHIzWldrS2NBOE1xMmZac3JnODRqYjBQWXhDdVh2aGx2Ky9wcUFiTzdNT3l5R21nSk5WYWppMkh0czR0OFBxb0Z3OHhNd1llRS84MHRrcmdQWTJndWdTemYrVVZxYVZlMzg0bVBPRFk0TE9PL1hwalNXWGF5MHNsK055WjV4M1oxVHdudU5pL3VOb1oxVkVpUVNyM3BzZCtSdDZmTjRFaXQwb3Jkc0E5UlpPbnpSUm4vTks1aEZ2ODFBZzBGN2J3ZnBuYUEwT1N1bTJuVy9PMmVyMGFMSDlpcmRzWGU1QU5lVmp4Q1llZzdyUE9MUm4yYStveDg2YmdRQ0dOVkZtRmxIbWxrNkcyUnhYYmU3eUFhNUd4eE1VK3lBUEJURmtEcEdyS3ZuanlRVy9vZVZTMHlZZUtlVHNubmRQc3ptUE5RamliNFJxbWlHbXZ0R3hLbW9DUmM4MTZpRnlJRVA5Q2ZUUTcwdjdJUEM2d1dnTk9LVG82a1gzTk92ZXpON0ZwdjhzTk1OR3JMZTAvZDR5bW83WjVjSy9QMlh5M1BIcFVqREp4NGZMdnU0S214bmNEeVdwL3pUTFhJRzF3ZnY5bXFMZ0JHYUJ2SVpxM29Jd0VMRjJZMDgyMkdjRmwwcDVzb1NvbElYcGFPUUlWSGRWcS9aKzNhbmdjTnprQW85bzBGVVRtRnp2WktidFU3bkZSbklSUWM3SUlLUWZ3S3oxL3psekNKbHhSSEVOS011Q1JmNjZyQWVpRzBYNmpXSG5kTVFzWEtFb1o2YkdpWGpsS3Z4OXdQSWk5eU1MNklNZ0ZGcDdDZHQwTjRiUi84NUg2dXdCME9wYzFZaS9PemZ3a05GRUN6QlpaaHJUNWFnaVJ3cUFkeTMzcUovdnFuNGtxaEJja3FHSU1KcDQwUGVIM1E1RUxjN3ZuK3BTTzQrd2RnWmE4U0F4ZHdqMnBaOHZTeUQ2bE0wUXZKNng1dFoxcGE0SCtlT0tTUUF3T3BnRHRhWld2WkVzQnYrTmlkRm5jOFFJQlZkcGtqVS9Md1BkMHBlQmkvRDJYeStrUHJqUEJpa2FBQm5LRzhKNHdMR21YWjdSTHpJL3MvVmgySkVwQmwxTnBzb3cvelIzTEpzWW8xRXgvNHBuc0hnSHVCSEp4YzVyZmNGdWhWaTZwZXFKTEtWMG1YZkdYRnZOTENSSERYRDVXM29XT1F2dys5YjFkMGdjNnova1NyZlV6dG5uSTNTV0ZnRFFyU0tzMVdGR1ViQ245NmVYQmlpS3pqTjhGdmFqbXgvcDAzNjZrY0lYczZ4a205Q3I0VklnQTdHTXNsK3NhVHo4L3kyWUhxNTRha0d1TllWakZlY2dUUE16WG10aXlkUm1QY3hZOWpiWmVORFFJTitjUkJRb1pqR09UZ2hZMDlSRGZ0elo3bklmbkU5UTZ5RzJ1TXRkU3FLNVZySEdMZk9PZDJpSFFIRGxLR3N2UnVuc1c4S3hZd2FiZjlSdVkxZE1FQWdXUmp5OFVheC9pV3ZFaU9waWtXRnIrTGZZZ1IwbXBXRFpocndTeU1EVlNWQ0w1NGpNSjVXTFVieXVOandublU2U0p2VGJjYUpVR21ReSthT05lbG9pcmkrUHVoaG1GTUFaU1VZaHE3L1o1alIxZDdUZ2hvdTRDbHhuTStRQUZ1Y2ZvMnBBRFlDVU4zSXhGZ0k4a1BDTVdacFNKYVRiSTQ5Z3pDTTJ1Q3p4cHBjcUxkVzkzOEFKNlNuWWR0UUFkUGVST1YzaUtBRFpKTTl6NmF2cGhJNUZCZlhFNFVpcDZuelVyMkpXaFp5cXEvUE8zNWFxclNob0MzUGVIQzJpZnVNQlFBU0pqdjRnVzhjRS9udnRVdGVRSjg4ek5IMGtNNllpeDhHdUZ3RXA5ZmdZRE9vK01RREJRVGFKSTlNei9XRnZmOFlGLzVHNEgvQnhqQmxFOUZGRXNQTHVodyswbUFLREJPV2ZqZFJPWVN4OEJLMzdRWDZJVCtCTEZJTnJCaDhrcHJBTktXTDBUMEJpWjRYcHRILzA0S1E4U0xiRXY3THJFZm0vWjVvaks3VE1wU3FKeG5xeWcvclkwRERhbjhBbXFZWTVqcmphcjRvWG5MWUZ5V2p3bkZORk5PTjFuOEpXQk00emk0L2ptTy9zZ2dKWmJmRlVSV3lOQXU1ZGExWEdPZ1NIV0pROWIxek5vR25TNlN3b3dOcVl3NC9Kc3Y4RmMrK3A4eHR4VitvSzVVd1VPWkFFa3ZCZ0tXallhTlBxckQ1Tzc2cnlCZ0c5aXFxT25HWTJwL3ErM1pEN1ovQi9ZbFY2VFY0dmtTN04yRTI3WndNQkF4cFZFZllMNy8wclBhbEdCRFd0Qk1YbFFJMWtuWHNvSEtFOGQycmg0U0N4RXI5MTJVT1V1bGRnbXNxVnh6R3JHOW4ranhGcER0c2JOSXNoQmEvalZhaTk2eG1nRWZ6QTRHMkk1OUZHRUl0N2pUTmZXOElaRWRydlhFenBEQ2FkQ0lMSzdERGFGb0pOdytVNlo4VjMvVk1rUklzUWZXcU9qR2I5U0J0L1BFcy9qQTYvVmhGM2xPQjlUbG5raGl0K0l4UXd6TitBOTkraHF6eHFPK01NOFhZU21VR1ljdDBCbGozcmRZTnNmRE01THp5cnFCeWlyU0hpSHl2U2FpamhQQjVWTVovS0cyeWVkR01OUExLbVk1UThVV29wdjZXZ1NFNm5VT1JJeFZMMDJPZUo5Q1RVcDVybWtwVWJVbHJ5elBrZlY1WnZTV25WOGh0MU1ERnFWR3lNU1R3WjNTWWY5YXdEWXBGVHpOOUlYMUhCUFJRM04xV3lXK0tNNlhsMDB5aWxNWGVCUUxDVU83RHdUc2NiNXNyM2xRYWtudXg3YUhkbEhWQVVxd0dYVVRLdXJuTGdVSk40aDlPSVdOcEVCYy9CVHVqS3FtUWpsMTl5R0hpZXl1eWdhYXJ1TDlJaUM5QUlOeXVRempDK0VESkJ6RVA0ODAzTzZ3WjMrUm0vbWY1V1crNWw2RWVvL0huY24xSG5hUzRQY2t0aTkwSjdyVGVSSldPbWxZVnNwdjhUVnlEMkRzai9IZ1crWkFhaFRGQVNLanBZS3NjQVBMd21BUmNMVWQvUExnR0FRRFl5YkVac1IxdDE5QnprTGJZV3pRUkEzNDUxaUoyWnE5TG9pZkRBdHFQazc0SzdCdGhDVDJyZzFMWS85Yzh0SjZaRmt5UnQwNWdmdFkxWU1KVks2Mjh4RUxxR2k1TWFYcHJnMVFGTHlSaWpSUnF2cEJtSk5GSkpEWEpmU2pmVHYrNmhzTGcvN0RZM3gzM1RxNFUvMXBMS2NpdEx5eWdlakh1THo5eTZ3YkdKNUkxMFk4REF6WDNtYzBXYStsLzdtNUtTaXZaZzI0eDEzQndRS0JIdFU5NnFoeDg5TjBSSjdScWkzT0g3MnVqc01qUXB5Qi91Q3dmVGk0TlNUNFdzS3NrVHI1TVhvZXZRcXM4NGdIdm9aUDdUVmdxN0EzVG1BVVdaSWVrVGNPWHpYdXEwb2NQaGs4Y3FsZWZRV1dkS01KZkZ3K1Y3bmxtVm1LbVI4aEExR2o5bWFSVFdPTkVyZyt1b0tONVRzUUR6WkdkSGg3cXIzNEFUenlBbzZtNHZieUdMTks4WGtFZkdKY09ScVNwZ1R4WHloTGxKQVNHZ2EzNzVLVFZEVnBWekQxUm9OazZEaGZwbFNtZlZob3M3aEJVYVQ1MjZEaW1odjNhLzVzRzBJUExNRDNTVTYzTzNFT0xEa1BrQWtoWk94VFFxQUt2bS9NVDA2ZzIzQTBnRTlpT1o1bzlMUkRrUmkrSkJIMzdhVmFoTFNBajdWVVA4NjNLaTJsVC9xbVE5bzF6K0JRRjZNWEg2em96QW1UU0QwYkJVYktoNWxEaThJR3dBd1RDUWluVm9ZOTlxOEdTcG5oUnI4QkFZaElwRkk2MjhrMHRGV28zMGREZVBFZjR0bERqelg1TVhHNyt4blJ6ZGRYU3hMd3JXRmErYlplZnozUEE4RzNJUFFMdDl5RXNNMjRkNktwdVk1WWFUSDBuU2JrZnVjZjdTeDBzMzBuKzlxK2hKK0ZqM2NWRDRWOWRGNDM5UW1wR3lXTVhrTi90YlY0ckdIelZpKzF2Q0NuK0h6dzcxbGM3ZUZFWTdSbDhMMVVZRDdmTVg4MGFlYUwyakl2L1pnaUNGMW5NRmMzRm9IbzlEQTFkOW9jY0txazdHZUtRbnhMMHgrSU5HandnUlgwSlA5R1IxbG1oaUV4RDhqdXZoREVtU3EyRFBlVXliMnkySXhpWWQxZWhIV0hCQlczWUpXQ0lwbXFNYXExQlFoQktBRmkwaFExY2YwSnRaRWp6amFyY0lwL0hYb0NaM3BVaGg4ejI1czhWVkNaT3N5RmpZemJycFpHMkdrb1Z4R1NuTVYvSXhIb1ZFV2xST2xHNll4VTArVy8zYTdyMFlpOHVtbGVJZXBITXR4VDA3b1RlS01GUEZsM0hSUWUyN2I1YmhYWElNN2I5ZkJWQXVYRGQ5WTdDVHlPV2hJYm5kSGtBU0FUOVBlRWU5aVZoYTl1MzFKOXFsU245Yit4MDlUNWk5a3JoOGluWWROdHFUcmQ5KzJ6MG9nNis3c204dTUvQmpLSTVob2hpeVhWMyttTFNuTWl4RmhmaE9abXBSaGVMVG1zeDl1U0RXV252QW56ZUtLR1BXeUJYb2tZVzd6ZU9CUjZneHZhcVN6akNpVC9VOUN6RTE0WjhrczZQWW5ocVVyQ1RhS0FtbEVlMEkvZ2o0cHUwY2d6dE9sZmRubGZ1WXlsWUJHaVlUK2dKc0ZQUWQ2ZUcwSGFYY1lyNVFlU0tjNGhoRmNEMzI0WXkrdDVoQjg4UVROREFSb1NNck5pUGJVRmpsclVPMllXTkpaYTJvR2FSczdYUVpQK0xkaDhmVVQ0cVNKQmVtR1lpVEdHck1vS2lUaXNheFJ3a0VyMmxaTlE0QXdrdFF6bXI0c1NhTWk2KzJZUXN1T21tY1EvdnlOQXlaOUxLQ1NjYXBUUkcwRzRiZGlobXF6N09vdm9xc0FGRFFJSTgzL0JwVHhsWWprRmNZZHhSWTBtdVI2NFMzQTZDandrRC8xeUU0Y21nZG5vNDV2dnR3Q2ROeC9OeG1jZmNWYmkvNTVCTVRzS3VLejExT1UrZ0RQL25yZWx2b0tMT0IzZGZxOWNSdFhSdXlVbmZpcEhNbVJQbi9KOVIvSlQvSDlhS3NuMzhWMmFzVmlaaEExS3VHNzg5N1I4bElhVGtLait4eGhrL0I3eTZ1dGFWS3EzNFA3ZnlidHFQWkhRbkVjUzFldnJkbXlUREp5Qmc1YXZ0dksvdjNHN3NSMUR5Um44VERTTTREUVIwdGpFbW5OWmxtVUFvSkNrbDBXd1h1azVzcnlBZ3Rxb1B2TFZTdkIwUFh0WVA0aHRmbUtSQWpjZU43T1NScXYzR0Uxa3VTdkN2TzJVdmQyWW0rZVBVQm9LY0Mva3psdlVNNHQreFd1NW5kVHIzWUZFb1NkeENjdFhZR1BMQUgvR3dZNFJ4U3QvUDhsb0UwRkJyZG5tOGlaZ1lzOTJLRGptbmd5SjNwd1RtR1pqaEhXVGVOWTNZNlhzaUhxMm4xSFZuN0RVdFRxQ3U0dDdlOXRXSGl2K0V4ZmVDZmtHRDFvZ1NTKzRiL25Lek9uVWtmNkorbkhGUENFT1V1OWxndWZzUjJNQjZvN1orUlZ4bjI3Wjc3cE9uQzVXdkJ1eWZNUFhNQlVSSnBPakg5cjZRR0VqaEhkTWg5OXNuSk1WdzRkc2ZQN3FybVFSRGVOQ1BVS3dNZkFRa1RJdFhveGR2MWt1TGJCVW1QalR6NTByQjFrYVJLRkR6R1Y5TE5sdjNRVzZNUE9GbnlKSkNGQkpVVDhTNE9rQlE4SGVjdkgycjB2YXpSclJKanBjcVZCRnZ5enFkRVRTVFVGZkRuWHorZWVIY3pSTzg0dmdTQVNTa2h4NDN5Tm84bDAyWXZzdkhjNFZjSzZERmE4dmNpVWVTUzcxa1dzR2tVYm5Vd3VnT1c4QzdpVXJOR2tiZldDK0RKdVJLY2QwQkZGVzVMblNzYmU1TERZOW5oclhtMlEwbHQ5WWgzaVpqbkUyVHRYU0p4S3BtQVAvVXZOcXNwSXErUmYwaFduTHBFZXVqczkyWStlVlFrNC90ZlY4WlprYzdESGdONTRYWkZDaXl4OGNUYlZib2p0UU9kRE5kZUVKeUhkM3hZa0laZmhCU0dVczgwYm1nWUV2NW9uL3pDc01WMnp2WUFWLzJlWkk2V2FmUkRoWEJrNWVjdlNBVVB6alhxRGRmMWJrWjRxblpaNUpWVGFIRGZEa0tOM3FWb3R5YnNIdFZIQXo5aUVvSUlCQUVaeEJtZmEzOFpLaWliL1Z3aTNJSjdpckxpWXV0bllNNnQrazBFU09CbWR4ZldPOW1DNHNVT0huK1FmTnlvTXRIeTBaYW02NkFOR3NsU1JoNGsrbzkyWjF1WUxwM0U0UjVRK3ZtbWtjYjhvb08vS1NaaWVTZUZIYXZ6UmVHa3h1K2hwNm5LZ0hCZnc2T0ljVkJvM0ZSUzdYSmlGQVY3dTR1WURWY2VSYzVsb1Z0c0lBRDNIalBJd3p5QVcwMjVBemhWSXlOUlRPamJxQ3VsTWZkOWRSR1I4TDd6NXpLSVdtYVhlZlNjTjNlWEpBZ1JmWnR6MmcwTTVaQVBZVllEYTBPVDEwK09HK0pPZHRsWDNjMFVvNVBGUkNhcytOTTYzUTVubzFFS3JLRlcvN0FyUWRSRW9zUGRrVjQwK21XZkRFZytWUnlxSzVSV3NMalZIWm9OTmJ4dEFOR2RDSzJ3MVR5YXcwMTF4eWhFc2o5SHZRaE8zYTRWNEdiMkZoaHYybkhCd0FiVmRVV1cyNWhNS2kzUXdRdFpUNFVZWG1aYlhWN2tJN0VkRnIvM3V4YnExZ1BvV3J3S095eTBEVUh5djUyeVhHdzRlc0dqQ2RBY2ZuM1kwTVgyTHoxaklzUlJZZ21SRlVHSXdUa2Yrd1lsamRFeDBqSlIwUStVV092Nkp6bGFxdEZyeG9xOEVJZE1lT29neWpCdmphckhOYWtkQnZtUUZwY2xRdjM1ZTI4OE42anV3WitEalNOeWFid2tqcncyVlNRN3lod3ppL3FtSjh0dkMvem4yY0Z2a29WU2huY0pZUkJlczNnNnB2NndUSnNZY25BTGYyNFkvN0FjSHNmMUFrcEM4c3VxRG5hbC9oeEFJR1hXTWNUMnFpZUdmNm4ybnd6MG1hd283OXNUSDRyUjFKaVdBblpWVyt2Q0pxcDIwYy9Fc25Hd2hlSWZJRUJqNjN0U1dQWWNsTE5RSEZpM213RFZMSWlYWVdXSTVJQU1aRHVVNmpTaURtQUwzTTFmeWh3R0QxMzhQZktoOUw5R2xmSlZlV3pzbGxWS0c0MUpUWktCb0d6UnpCV2t6NTVUcnZFcUNURzFVR3pvY1hKV1VteDg2MGlXVE1tZjR2Wjd4VHBrZFdpT25DOWU3Rm9uYkVFTTZDSDV2THZSV1lpdFcwWWRRdG1NM3hvZEpnUlY5QU5vbzN6azEvMHlzUlFTVGtvMHFEWWZuUTNIS1NvekIwQUtXTVQ3SU5wUW1OZytqbUw1Z0R3c1J4cGxvdkRjYzFxcjVJdSt1QWFTdTh3VktHYTlpOTZhZGNsellpN2ZibzJhbzFwd0pDK3V2UXFyNnRUcExNdS9hcEp0VmpDOTljRjAzckl1Umd3VmMvemhjK0hFcHlqZUtMME5wbEVVbkJud0NPbkRZMUVGVWVlNk5YamtIb1FsN0FLT1oyT1ZqVkd5TlpwOHJxVG9Cb3J0b2tobmgyZDF2M1g4OUNyR1J2TXdsUkVDTWxqeTR0Skh6V25jN0pkYWVxaHJqOE9oQUduRVJYLzhGc0Q5YWZXRjdHSDV4M3hMSkZTUHdlU2NVYTVPdFBWY1B2WDdoN1NGZG5QTGpUMnNpRURMa2ZzaXlvZVZsQWJEdFdEcS80VnVES0RZNWVHSmsxQ1NRcDUyRXRSeDcrM3VaZHF5ak9yQ1dzZzVYMXFEb3hTUE9vK2tkYTRxZHVnZlFUcWZtWWErQ3U0TUxpL013LzBPYkZvWTFpN0NwU1IwSWVXcEFvWldUUDAxK1dJQzVNSHN6ZHBnNGRsOU9nbHNkWWsyemlRTTVqc1FSY2c1dk5NOFZGUW9FMFBMMWNSeU9IQ1NlTThzT2g1UEx1d0wxTzkwMFhGNi9LdjFNMDM0RTdIZ0hQZWdpSmdLMHMzTFo2bVE0bU05a0lhTWloK0lWZWs5RUo0L3gzaGoyWnp1U0E1Y2w4M1JwQ3F0SXpnK281T1FnUVpORFNRVFBUeVZDS0UwVnA1ckt2UFhtTENYajBpbFFhWklBcVhXY2c5YldhclExVk9XUDBpRnZqTkZqeUJVQm5penVnTVhWMUIxbmtHOWhhUWg0enhXMlVOU1did2p4cXIvUnVyMlBTd3QvcWlycXlXZTNxbTM2VGJVTjhYZUl0MUUrWFRHc3NmZ2laZm9FT3BydFo3dlZsTG45dVJiTGNuNklWT2dLc1BSSGNicGMvejRGcG9sVUlsNURGaXVsVXFWSkFLNkw2K0sweVBIUzZxbkNrcWRQZ0ZON2VJSDdaUmdWaDljcmZlczBBTUNPOGJsZ0FwbEV6SkVXNXgwbXlMbFQ4c3ZXNW5VYVVsM1NFVU5iZytndmN5ZTNXSEQrcGtReHRJOS9HQVdRYk16a1pWeStCTis1UkNtRld3QjBNRDZEdHNZVHRXVVN1UjNFMmJvSCs3blkyY1RsZlNYTUFZVE5OWjFIVEZIRmNwbkJsSHo4K09CNkl2amhDcERPUlhDUHpoNVZoUEtmQytEa0NVcFVtY2sycWRlVjNrR3lGaVR5dmhNbjFmdVd3cDNEVW4yZXlDZll2MDVTYUhSRXk5MmpNWVc0Ylo5MDZjWlFHVkFCMU1sNGErZGdEMTFXWThUWElaUkhEaHl5OFhSdUJhUDNzY2hSL3hxR3hEbFZWbHlIbmhsdnRJd0h3aUpNZ0MwZVVudy9ZbStFdVpSbUZvNGFiUGdkVEswR1QycXlodmlHT3RxbHF2NlJCRUE1dnJDYkRBbFBHNkxpWHNhUmQwQWlqMmt5VUM5UjI3YkVsZCtweHFVVUd5NlZUSEVzeE85QzU0blhtSHM5Z0xKbkxINWpIdTZ6a0NRVnppcGF5NVpzbHVTbWR6K0xWdnJQemUwOFp6Rmw1UWZEZ0xQVHdtMWFWQTVhWkdVQnJBMzVkaG9UZUtxZlpraU14elBaa1FXQ0piSFdIQ09ZNGF3NmJNdC90UUdSOWxnVUhVVThVbUt2aTlUYkVobEY3WTY0K0J6ZGFkV3M1ZVFJTlNxMFRyNC9GWkt6bzhVb1Qydk5oYUdhV3J2bGpmQ2NjZVR4MXZIVkw4NER6ZE8zc0poRnp5c0ZuY0V0SHo0cmY3RVNaUThyWGZIVUJyWmcxcjcybDJ4VU1QUTJsWkJTU0lWVTg2ZG9DNUpFYVNNeXNrSi9BK3B5VUlHQW9FYks2M0lHTHlpUlFvS3crUzFhZzA2K3Y1V2VJbUNlTzZPdlFvMFpwbHpRMFlUdVhqN29NQUxyaGRxV1NQRXI2bUg1WlVuZWszYWJMWXN2S3BleDMrcTExTHJHSjBSQWltQkRJZEVEdHprWGJnUEY0bktOazlnQXhGcXlqa0hsc0w2YkpNbUpudXpMY29BN3hOQVppUjRra2VpdjkvRkpZNG9HUG1acGtZaW1jSld4cmpIQmxhTXQ0TkxaQU10NEI2N0l2bnJ3bWM3akRqcFhHbzQwWnZ5eHVZTUV4ZHQralBqcFhpbWUydGE4YkNTaTFvUHpsZlloZmFHbjR5TkFwUENVc1NnMkxZaldHblUza0V1cS9TUURobWVDQWxlNHZiT24rY0RVU1lJdFVnSmVNamxrMm1YcmF3WDd1Y1VUYlBzOUlrbU9YZGVUWFNGU21EZ0REMnFoTmdGUFFlNldYUTZaYjJwYTlJdzVpQ0g2V2grMDhNVW0yb3RmSVlidVpGUHVzZkdTMzg4UVhOUTJGL3JCdlM3Sm4zYk1uUlprVWFFc01PL1VFMWRqbHNFMmFnaXJ0dDJaSXZBeHJkakpOMlYza3BML05Bb3NDOG1zdDVxUmtCaHdVN0xXWU9EQzh3aStMNm1uUThpOG50c2RpY21Ya2NVTWI0TUR4SjFQMGtVRGdUVGFWeldsR1NzYk9YenBNbWJ4SVhlZjNyVjI4dHprU28xTUVLY0ZqN25BNXQvWjhvK2tWRFV0L2ZqRTVjNjNhUi9RZWNva0IzVkFWeUdpWndKTGFCVjdhTngrYjZ5bmVtL2NjK05IMG1wejExQThGbUcrRld2VUhQdktFdSt5a0RlcEZtM3ZrSE16OS9UR2dNcVlwNWgzV21wUGF6MzdqV281RFkzbUZUckM3SzU5QnJHYm4yWnBaTi9kLzBnMGR3UmgvMkp5R0Z2K3JjZldEOTVCd0J4NFlnN0hma0dXZHo4bUZVdDZ2K25tWUJoZVRyY3VKZVI4dVh6NTJQVWh2YVlOSi9BekU4cUdWeThoK2lWY0ZTc0hReE9Zb040VzlpT09mdkIxdmR1RWg3MnJoK3o0d3BEN2xleWl6RWVWS3JKMnRYdXA1aktvUnRZMzEzVndpaWZ1WEsyL2hYNnBsTjBKM2tuUm1Ic3AxRmpKZGoraURKTlQ5K0lORHN4ZjJpdjdoN1JJUGYxdWFBMWl5SFo1OGkxSmdSamQwWm1vRUI1L0RkaGtVSjU0dGJCejlDS3E2Uis0QytoNzgrdmlRcDhta1NnVU1zdWlVVnVqU3NpeGR6UkIzVXE2WlVUT1NmTmtaZElUWUFvNlZDWDFTeDg3aGxNdURJWWcvVVpqYWI5RGFGa1pIeVNsMzMwN2RXeTVPSWdMdmI1cm1pWWs4cTF3d0N0SWRGY1dza0VpNE1DT2dCam5mZFhwOXFvTjBvSktQQlVETHJrYjZ1bFVidm9xVXlNWmRnZVRhYUpMbXhiMllFNFZnMTdvYzVuZE54LzBpV0l2MS9RMElVa3UrZGtGRUh0b0c0YkpxWVhKNG95SjR2SnMrOUkwQm42SDlLdEpGSGFHWVdOZFRsdDRMcG1UcWs4RzhtS1BsaERUeE91cmkxcHNrZzZ6SjhDZVdFNmNjMVFWMlRTODBsMHBUWXNEVlU3U0t4MUdPb0dqdE1WYldiZ0RSWmd6Q1VOMkdja3lnZzFIZGUrb3MrNXJrOUN1dVJqU1BVMFYrbkZ0UG5wQ2MyeGRDVis3NEhOZHlpdnJTektDSTVqeDNPQ1E5dnpsSjVQOFBTWTlibk8zWUtPdFlNbGRMTmpUaUxHU0ljWElKckNZL0Z3T3B6VlRWeFFTbjBybllkYUExNkMvOXlYVXYvOEdoZmtMbVZmOVpITWF3WEVYeTNFTWdKUEsxUnhJYThLeUdIdzJwenI1c0ZwUzFDNm9hM3BnQ1F6WVcxbE5lNXJLWWhLSnBSdVk3TVA4OVV3WEFBK25TNWF2ZEFZTkREK2x6RkFIb2lOV0g1aDNrNnpaK29NVWZsenlTYk93UkNOUkRKVzVrNnp5V0pUU0RVK0NHQ3hBa3ZpMjJnZjFSc0NmbEM4cWVoWHV5MEpqZGRhRjRrYktoRzhxdnEvZ09HYXhJUUpYbnJ1QTNSVXNZU05sM09XWktRVzEycHkwbDNMNmdmdjZQbDNHWUp6ZUNMVSt4bkh1RlNIaU9LNThFVmJoMlJXNXhhdzgxVXgyUXM4N2ozQTc5VDdDb09vUDkvNWZUZmgzUTluVzRvNmtMeG13L1ovYnRuTlBPYTZkOG14RUN2YnVhVWIwWWw1SEJUYkw2RWF5akJLd2JkQnlFaGNRL0hWZ0YvQ1NSb2NGZnpKTStHUVJKcnp2T3ZXaHpWak0rYzdIV1lZb2l3ZmZxbHJJS2c2aituL05weWVhbEZSZTFLeWQ5Zk9hbmlqSjhvZDdNRzZYVm9CR1RDbnQvYTVNaU00NmE3M0tqTlN5L1VOT0hRaDltWWlDUFVPZXI2UjVieXZQYncwUXJRUzRSR2wxOXNQd0EvWlR4U0puMGcydW8zY1ZuVkV4VUxPNHJiK0s4a1pOViszaGJkbG1jYVJuajlEcU1xeFovRUN5N0NsOG9OQitSQUpkOU0zM0ZOMGxTMGN3K1piRUIySzRENzJqbDZESlo1UjdTWlNzZU13YUhsbG51cTRQQWZTclEwclRGTTd5SW00VkZWcW9wMjZGZGh6Q0dzMmp4YkNsN1hoOWIzN0ZSY2VmTWY4YVdRVHlNTU1aVzVCOU54NGF3bFZKTGJkVllIUFhmYUdQL2VjMXVjTloyazl1RHlrUzN0cU9TOWdVaEl2MTM5UlVQaEovQ0NHZ2J4V25lYlZwVzZjL2htNlNVS2RkTEszdnBhQThjNUJMU2wrREEyOExHNHNldzVtOHRSVFExczRMNVlWWlRYd2hqK0NXK25yUnMvaENrWnMrN3hISkNWeVBYY3VTTGZwdHBNSUtDNHVGMVJQVzA5eEJxZ0xtQUZ3aDA2bkR4ZVhrcmFwZUhzMVFiRk5IQTd0WXV6L1pxN3pwUWc3N3ZYMjZMaURLYi9SUjN6UEJyd0pVV0ZEb3E5S3BURlZFQWd3WjhFUkgzSjMxd1ZFZ2l2YlRwV3ExZWtHeUtNOS9zTlJGL3l2c1JXR3ZIdkUvalozczM0N0ttRUR4RWVUTVFZUzZMRzhXWkRrdGRPQVRHWEovRTNxUWhXQWlENTJVc215eEtDSVhTOFhPdEVrWWp0S3R0RWhkYWU2cmVuaXNxbi9pMC9LZTNQeG9ZK1YvcWVsL1hrOW9qMmFKdDBnN3JEblloN2kzWVZobE10UHUycjlOUFR2Qmg2VWoyN2ZYa0FjODdmZzNzSzZwWjZpN1RreUl5SWgvY3ZPNVFNSENOZmVWWHI0d1JaS0sxNTk5aXF2K1NZMDNWSkRpdEg5Ui9PWW1JNlMweUtQZlJpSXZTVDVJN2lvTEZOTnZFLzJaaU4zWDZ4MUtiblkxN3BOemV1R2NUb2dLeTRFdGIzNm1KTXNZeHZqY0FFNmlIaHN5Z3BWclVkVnlxWkUzOS93MEdiSWZ3bkxIQ2dzbUZCbE14VGtEUzRkaGEzM0NDbUtNcDB1em1xZGxBdkVqeWdNcGRMYkxsVFZTNTFrVXNoczRpWWozREdtTThnaHc5NXNSdWJFa3ZETXdPQjVFYzB5blJ1Skl0dm05UzVPODBXclVTTmJHSTBVRFZ5SlNORS9GWlJKMnJXcWFDUmJ5OW00a1FjRUNTL3l4UUQxTithaXZFR1BuNTJzK1dhdnFXdHI1TDJYMnFQN0xQS0VJb21TOVYxdW91ZDZGT3lHa01HY0hiZk5WcHJaTDk3RGVvMVJ0R3NrYWFSSzFoenQ3MC8wNXRVM2dFTXltRjVXQXlzdGtmM09HZ0ZGcUtKek1CMHB5eWRQQVZsR0M4dzJoYnJiRTlVSGxjM1dCV2lXMnUwblJzY3l1bzcrVytWR2ZHd28xUmlPUGJ4bzBQMG1oUm9oU29PNlpvbzJRUTZvUnRPRmFLMzJqMnZhV0Z5eEhBallCeFJXa003YndjcEJpbjdiZHk3aTRxUXZTZVJUZUowSjdIOEoyWVBXdEFhVHBFVEE5RlY5blVxbVp1UW51M004bDdIR3ZKV3N3WGdJbWFnZjRTWUdRNXI2SXVXUE0xTkNjTk9DSmJRRFR2OGdUNTNWRTNRSVdHRGZ0VlVhRnNjaTBwa29LSXE5N2JlVXBZeHhHK1RjZjc1azBFUENQbi92My9YeVh1SG1ENlYwOGsyZG1aWDRhbW9UL0dyWGJnd2hBVUh5elUwbEtkbi9HcGZMUFczcHhDb29yenlSUVFKdUxUQ2dSWWRlYmhBY3RaMHUzV0sweUJETE1EMm92aVhWb2xHYlFGZ0FvM3dseUVtaWJjakpxQTl3cmJReWVRa2ptVXk1VFh1T2RxaklSV3hGSDFraS8rZmNxZ0tPaFllZFdVRFNKanFxVDYxTnhmWldsNURqUXlhOGlOMGZWVnl1cldCRmp0cGV5MGw3dHIycnhVQXgxRGlaNjIwUEtDOHRnNjFCVG1Cd0R5YWhFT2h3UDR6Y0tkVGRoVDlGQVNla2dDMEorcUlwMnpLeTZ1bGd3bHpCVzBSMVdTcmZQNFNmc0J2ZGt2Z09YVUd3SEo5MUMwd2dpRldrZW5Fd1pobFcySVB2Z3RjRGY0Y3MrSnBSSjJXQzVGQ2NyRjZVUUYyMVFEbWFhciszaktkMmlVWnZjc0Z4L2c5UDFSRHNVU3E2ZTYwZlphMHFSOGdqTmhZTm1CQTlCNUhLMG9YdU5tM1h5dTNaNE1qc1BucTFKT1pwR2czUVZWSnpYTnBSRzBaYU5BUEZJMUNmdTNNQ0Z4TVdTVGFQSS9FK3JFZ211WHNmU0pzek9HbEdIelBqR3pGU1FEdCtzbHMxNU9PR1hvZG1xcy9VSEo3ZE1CU2dKZFgyZW1MbWJSNG9KTjBHT3IzeG9zdVBvZE56bUt1eFBoV2FxNDc3MUZsSGcrbHRQU0RVL3RETTBTcHBrSEh1UG91NkZNZFFYNW40U0RQVVpaV2VIWHN6bGx6QWNrM0YwY2I1ajhHak83WmZGL3ExL01oNytBcHNvNnlJNXArVkFqUEFURjJESmNkYjV0Kzd5N1NQTk80U0pDUG5DQmcxNFRrUVhVVE5Lcnk3THhNQ1RiZUY5SFY1OThVNDJ0OGRraU1keHJncXl3UmZ5U01zdWpFZ0dOWm9yWjRUQ2V5Y0ZBKzZkNVF4WHpiOHliU3UyY01CekFXRUlPTUsvNC83a2FXeHBoNTk4eGY5MmpjK2FsQnBnbDhTaXFqS0JxZXdxd0VaRS9ucThucmh5QllSaGRJUnFrZTFOOVI1bDc3NGY5S01YZjBaam0xNEZDdkVQTmFqU0NPaDhnL2ZjbHFhZHFKY1dJb3Zya1VKN1hMQjQ2d0IzcVIreXNPK1k0M21lMjJGNDRHd2FoQnZTYWppWlBEWE93ZGl4N3MyN085RlovMzNEcng2S0ZsZUIxcWhPMUVXNThzSXc3NFB1RVd4NTFuZ2ZYeUNHQ1NIU0duNlVhWHduOGdabGNOc2xjQUdHZW5hQUpvSHg1OWtMeG5jNDdaUnVNQTRJTitVeUVjMXlUN1FPY3hxKzZOSXNmblRzLzFXTEswWUpIYVdzUzdheFBVRndYVCs2MCtwMGJDWlVJYUJBV2h5RVRjTWthQkNDMStHK3dvTHRJSXRJZmtSK2M0bmRyeEc5WUJ6SFpIQTFJWitxMmRhdDFGa1dHOFdrMXR2bTRMV09PY21XZWloS1d2MW94N1pRaHFnWTUwN21uY1JrNEo4NGd2RkViTEhoZFFFbVNYNlA1RmZjVU9JeEVDYllWNFh3dVJPVG5zMDdwdFZ4SXI3UkpQcTRrUTB3OG1OekZ4b1BTOGZlKzVabUhaamhIdkVxYk9XN3VTdG0vQmdGVFRSUXgvN3NkWEJUWWdlclpFVzRRejhLdWZLV0tmRnlUR1h1cU5pT0UwN2hJYUhNWXhvelJsR2lvZEpnVS94ZjUraHpVcGV5eE1BRkEraFZKUTU3ak5LdE5VZ1NJemduV0xPaFNLRVBic2F0YTBoUDBQYktKeXRmWU5GMHBocWx4d0owaThnb1lmR3BnNlRzeGRHR0t2WVBJMVhtTXkwYkRjQTVuTkxMeEQxc0VHbENMNDZ0SWZWajh2MkpNWkwyc0F3VklRUXprWEkxTDBsaHdyTlppeVdHNVBGWU5jVnJtN1h4aXhBWnVha1kwMUpQYjhLMmZLWnlrUnNQU05icTNDK0FIdVpJWElENXkycUpySnVkcVdqQWVYekZnRUtrZnA4Yy9uOUJ2VWxJKzBEVWxqM0FiYm5ROHpJdU9SMzRhK2Foam1QTVZTdXhIMEdMeXRjUkNodkErNkJKR05HV29WNFVtTVNqUTdZcWNlbkJKWFZUdTQ2T0ZrYlJaOTIrMEhSY1RjZSthS0VBSkkwSy9ycDFXczNvWCtpRTdKdm1ZTEZIRVRyQ2NTNGM2M3JkUXlUaHV0V3FEWGsvNFBnT05iSW1NWkRvL3ErM0JoK2RZb3czaU5PZFM5NXQ4V05IOWtXVlBtSytyR0xBVVUzZnNUR050OHgwOXM2ZURpNzQ4Mjc1RWN1ZzBKaTJXa2ZtMHdvdy9zNW4zOHd3eitvQ0tmRzBWc1ErOGp2VnNYQ2JiNll5aXhGK0UyaG9BZ005NUNoWk5FSU9mcnBrY2t1aFpTYThZTU1NMTd0aWlGVHJYQVJYMjFSb3g4aUNqSTFUaU5xaHYySEVRelpqY05jWEV3MEcvaHFmS2FsTGJxU0ZCY0NBakhocW1IUTFmclRVZkMwNExFbjNLZlRjdjRobUFuTzBLT0dMaWlqdjhNQWJISlMwK1loU1REM05KWllOc1dhTjBmTVJtZUIyQWU4NlFPc2hITFVDTldzN000eUdzUDl4MlptQmVxeGxoaWMvSk83V2liS2Y4TjhmYTN6dkZqQm9JNEZuUTl5QytLSHhCNTQzNndpNS9EcTlFbkM4M2ZwU0FBMndET0R1RUxZTDR1a1RsNGkvWUcyWXl1eU02aDB1cllTVUtGcDV4djJSRXFCWFp1ZmtIZFhGMytWejY0anZhUHdtekhoczlRZURoSWl4b21idHpQZTI2NUp2SGVWcmFTNFk5cUZVQndDbGtqNU9FbWxhek5yKzhUa1lPczFKUTJYTnZxNzg2MUt6T3Y5R1ByeGQwWEt5R1JvdTJ4K2l3NzJYcTBzUmhhY2RtaEhpbWNoQXhDTjc5Rmo3dHdmNWt4OGxKUkJKeDFZbU5vbHV0ckcrY0EvcVlPT1BwbDJVaFdiWnIzZUh3SW1qbVJHejdQeXFibkZCVUVCcE45UXptWVh3U3Q2WFhZQkx2TGJsVmZ5U3EzdnVuNmJqdkJyVUxONVMvT2N5Wk9NTlp2ZTMvMC9lZ3JLN0pVYVZmcHZHWlRqcEhOMFc0NWpmVzdoVEpCbmt1Mk5YRzhlRGxvSlBHVVdmS2dxWitpV0xQVi9YKytEcnJJSytVTDRUQ3c2c1NJNXV5cDBSY0JXWVdjQUlJREFwTHFkeUdET20wcFR3bWd0bmZnYlpZaUJ3T0lTUmNjTlRGVGVEM0t3bDNXOWRYTCt3UFNaOUdrU0FvWUJNQ1lpTlRGWVdVdFFtZVVIYXEwNzdSbkJCeU56endXTWNic0QwSnZMREt5c2FSR2IzNXRCUXpFQ2FMZG45bkR4U3MwZ3NXc1VTWDhLUUFYbGE5c1ZEb0x0QXp3VllWcDgwb3UrdTFObHc5Vk9Hc2ZvQ09Zb3c1azNHbkVtRVU0Tk11RjJVV09YK05mOTVYcUUxRmlVRTZBZTMreHBVU0FWbjJCRHAxRUdJV09XaS9QTjNhcmNsY1JZUkdZZkYrUzBiQ2c0N2tncWs3enpvM0hPL2ZNNjlEbXZ3WEZhMmlKNTNrcTFwUU5LYmlVdCtpbFV2ZXFPK1JHZ3RGM2xKK0V5S1FZMG1qKzRZRHRDWWo0empGMGwrNHFNZHgxVVVieVR3SE5SaEhSeThnd2xqNXJ1RGRKNkcvc0thMTY1Zk1ZbW1NTXhNR0xJTVRleGsvaC8rV2ZhdHJMV3Zrc1lQWVN4bytPclZMdGQzVFBwcEJHd0hFb1J6ME4rRXpNWmtDZkdmV2NRKzdlWis5ZFJLeFAza0ZkZDlxbGNaRlZHbDVFNFIvVThFZzQxMEFoSlNLVCtZSWpQWFFYN0liV2FMcmdPRVZoNzlOYmd1MWsyNEkrMWNVemFsL1F4SXVMQmd3czU0YVNJN3ltc2pkVTdxcUVjalVMMmM0aDUwWlZreDBOdGtIVURTVVltMkZjcFJZM2pjSEx6bk5QTHFvY0pQbWV3NkQ5blRnWGs4NG9ReXR5SDhFcCtHNVZ1b25hZStnVTB5ZjRzSDI2bk9hN1RhVlZKZlpjcmFsODE5MkpaOWxMVndkRjlHNVlhZUM4WVBubjFCM3V0QWZuK0M5WmY0Mnh5dVF2VFc3RTZiSTBYSGRvQ3JBWlJRTDd2aUdsYXdIMnU4T00vbXVwa3owV3pXQWw2clVrZWhwczAxZGJmVVdybnJWTHRNVTFIWWlGRWJHUDFNejhXMDBwQUxUZlhtSDZzakljRlJzaVJLM3FVRmxONGlpUUlrVktvUk5WcXVEbXpQNzl5N1d0L2llK015WWttWEpsdUg0Z3FOK2ZNR2lLdDI5WjJQVG04K0lRQnBRd2k1bk9JZXV1blE0dDJoaHN0YUwrcUduc1NEMjdGVmtMTTY2YmkvMzgreWFLOTRaMmhUUStaRWhuazFld1A0WTNrYzFJUUJVbXNZSXZvUzJ5UzZUWU42bkFJWmloL3FUb0l1ekF0OGpFVE0xY3QrM2hEWm5KU1ZUanhySnI4dFVranNaUzkzTzlFL0xYMmViTm5oeXdXMVVKdHhTYnhFNUFrQVhMQ0VYVkgzbU5KYnp4K2VmTkxYWi9YNXMxVjdpTWhlQUlVamp2YXlOT21nckt0aHpEU0xYdTlVTUhQRDlOcUNlVUpJYy9FVm5qR05QeTBrOWlxZXc5cDRwVFVhU1dHcTdaK0FtQlZhMnFkM2dwZTNrMU9PRXI5TEw3TlNkNGExemNXMC8wdmdEZ0JhLzFGdU9EK21JMmY1MFdLWWdtZ2F6L3ltNG1KTVVxNDVMMnQ5dCtQS1ZhQ0Y1UXBWeFBlV2J3elB6YS9ibzVGU0xuYkhqU0FMUDl3U1g4OGg1WmNERTRaSG5jRUE5bmRxSTdWemNNM2ExcTA5UHBORmVvQjludUlaUGV1Z25IeVVWT0M3MnBiR3pzYVI0TjRBeUhjZGxUYk5ZRzIrZWxtWUNKcW81YlltYW9wT3RDb2tPYzg3MU5va2RwcWp1ZzZDY2g2dzhEZEVjN3FjV0Z6M3ZCNkxIMDNpbEdnSHI4Z3RpazR4Mk1PZ0Z5L3ozYi85dndEdjNlZGxremR5NE1oWWdGazlZcGZTQ21YSzdFY0szTmZ0bFBYRzg1YWZNT25BUDc3UGZXdVBXRlpqM055VVFuK1UrTVVnWElKb1U3OVVWMkdQYzRiTWNxaTdKWk90QmdQbXJ5SCtJUDJCL3ZERVpvNkJCNk8rYjBtUzQxdHVWOGluYURwRmY4bjh5OVovTFpBSWtWN2tNc3pJN1AzbFhvUG5wVFRmK0NVaUxMNld5d1N1TmN6VUxYdlZIV0NYb2J4SU9wdEtXTkgxZXlCZ0hNd2VCTTlhWnl3RGp5aHp0YWJuZlIreHgvSExuVkd4cnhTSVdQYTFjZ1RpWHFPZDhyOUNkUnJFaGdrKytxZVlnVitkQzVveDdkaXBKVFNKQXlBSWsrUXloMVo1QURuSklubDY0QjREVUtKSFVHL2loODNPTFkvbk8yVTI1YUhXZzBiMCtOTDREb0VKMjRNd0o1Q0JQd2g4bEQvUXVQelA0TG1QdEJwRWVJenFoZWpUdDFBamZLRmpvQ1JkbWhpQzNINCtBbE1RMkhkUVZyVEJqREJGcmQvWFd2czZHL2J3V1B6aWVOeGpOWktwS1ZkZUpKQUVWL25hNHBYNXlEK0dzRHp3RG1QK1VmWlRDb0tkZlJhN0R3V25FNDdSbXdiejdmUFl6aGZYU05vTndRd0RVN0NrRDZiNjh2OHJpYUE3cEdSUWYwTFFsOTlpRWVKUzRENk5Eb1d4QUJQQ3lrdEtNMlozeW1od3NWYURlWWt2d1pMeHNMeXdBQkYvKzJuK3Z0VnFRYXVuNEl1MUtHSGVmR2xnT1BSRlZ1bS80QVFzL2FwT0FnMFZMZFhacDJydzR4SE1teDlNeXZTWEhtMURRWXg4WWcrRnVQOE1lNFloTTR5SzlicGFUTWZwV3MzNjBVdHVscHhIT2dTL3grR3RIWkdnTWJqSXQ5Z0tPWnNkZjk2Y2s2N3VWYjVleWZHamd2SU9VdDgwanNhSFdERnJFQXpsQXdXa2NsYWNkRklLZUxHR1JGdUlKV1lxNGFwYWQvb2RFb1k4TVpRSEdycitLT3o2K01hMUI5b3lWNW0zaDNua3BvVDI0UkM3ZUlVSHBITzBpR2h1bzFPYzhNcUloYkVEOEFJbVNoL3p6NjFPMHU3U1ZXbmxXbXdnaEJ4N2J2eVBRZGl4L2txWDBlTGdvZnorTnJCbVZoVk0yZFpLN2VUQWx1T0xxZWt2cU5UZ0VMUi9wTnJNL3hhb2xMaWZ3MGFQRkRZMDBaZThyaDVYaldmTFhGZGFvNkdEbEoybjVsRmxpb3JrQUo4U0cvM1FubCt6Y0JlOTBDWnFlMUFIMVIxNDIxbEt4YVNHZW8yTUo4WDgrZWlxRWsxNDUwemk5UnlnWlAxSi9rV3NGZGtNRS9FTzBUV2JyODlSZ3BrbVlzRDd0ZWV5NXczSjlTeDZtOVdmdWN3V1Q1M0w0NVJUWnpQS3QrOS9SZ0FLM1dLeHZhV1p5RXU5M1g0ZXF1aUtCYm11dGY3KzQydVRYdGE4dUdMN1FvbVV4WXFRMDVxcTg1YnY1S2xJbS9WNTB4SzI0THlFaEptR2o0M2VTNWdSb1lrQWZFbXp3eDkvMGpUT0ZCT3VvZHJxUnNMT1U3TURPcER6Z29CdHU2QzRVZ2tYM2pHMzIvS3RGdkpka091RlNqZGdhSVNYVXNNUU8zbnZ3ODhwdzUyMTh3dUFqWThOdE44MmxYUTF1Qjh3YWtQZlhnN2VJdDJVSjhmK2JZOUY2a2FxZmVUL2Y5YWprTDZTU1dDWFAvQjFKNUpNQkQzNDJNOFhjTG1SeXloNHU4dGppZVJidC9QSkhVMEZqSngwbzJySnBOKzJGdWJERGFrL01RV2w3MTVWRHNuc0txanNTTStob0VIZHJlR0ExK2hCZ1lrMmsyUFZYRzhwSFVDejQzcHhaR3VjaTMzaU9HMng4NzFwQ252SGI3TGpwbUZRQkN2V1h5Y0xaREJJMTB5S2s2b09iL2pqUXkwT3ptM3RWVDlwNGJFc3VEV3JCN2VQQkhYUjVJa0VtenJrRjR6RlhuTENXOXVDMW85ZmxsczJ6QlJsTDNwMmlzNDU5Nk5YdjdKdWtxN3o3WDBleTdOSjlpRGtXaXNSWFpZUUtDOG15SmtzZFU0N01EVE5MT0I4VE9EMHlvZzR5eFFkMkN1clhsVUE2ajRQREtIZ29wZVgyWHppTXp5aVQxT1Nib2lKWmZQUFA0RlhxOTg1TXFyZElOajVQZzY4TmlWRENVcmpzRitBQ29yNk5rNTRGYzcxcDEvL0FOT3F5R1Y2cVlGS0I4Nk1BbE9ITk9zUnRMZGt2dll5aE5XZGQrcGY2ejVReWVESDZXR2Y2d3Jka2dNaWlLRG54cjFFRDM3ajdqL0RuNlZIaUxVTythY3psSUp1MWpYaU05QnY2Q0IzenZQUFdqbGtVZDlBNnplUXBlNVlHMUh5R252WnE4Sy9UWGcwN1RNOUhxbEU0TjR6emRxdHdhZHl3dlJMeGlua2ZseEJkZFBvQjlDazhwdENKN3pzUjhhZEliR3JJWjZpM1ZOUklIaG81cm1maGdXVVMrVzg5S2pPNEROWHZNM2FxTU1nU3JxOHBKUDByUEgvSk85SDQyMEtCZ3lBMGNkSWJkTU5yWWt2bTZiVnJJUzY4d1AxTGN6NWx2U3A5djhHUVc3eExOQnh4eVovRzZBRVVrdVc3VDFuZG1kMXB0V2RQejZteTdIVlZIR0YvMlZOcVpTbWRUcXpyTkRxMkVIYnUwZ2VEdytJM0xzdkFHeWJxUzBkY0pzZENnMit4TXk1UGtreGJCL01Zd3Vldk9sUFRNOFQ0RGpQWm5DZmk0SEdCbTNiSDJjWUhRZHR2RzBmNWpXMERmREcrWkVJZDdVRC9vTCs1eUowKytib3hES2JMN1RNbm9la0crV0FkS0lWWUxrQjNaK3JUeUJmYnBscjJycnBxTW1kM0RvdkpMeGJMSnEvL1BCZERMeDZaOFVDSG44S1RLWTY2dkRvenlvd3JzZldEZWh3SE1qOTFmSmdJSGJYMFhKNHgwa2QvV0pjd2djQXdCZ29GMjRYbzJBc01NL0U3VEhQVTh3TU1BaWNwQVJvamd3WGxiU2M2UzAxVlVCUjU4L2NQQmVSUXFoUGhqczFkMi9MU0RqT1ltTm9PVEMybWJONk9YTWNxVmRXdUFiTWs5enVveVl1QmNkM3pmZFcwbzNtYWNUTnJoT0JSR3ErRjJPenB0L1lMWERCaUl1OTVzVHhOK3p3UVl4YmtIVk1kdDhuekh2OTViMW4vSHdRTEVMd2psWU5NSkF0WkQ0Q0JKYmpsMFpvTk5nZW5LUmZ3Y1dxM3hvRUxUMGVSYUpJWTYzdW9CZFE5SW8zUER0ODl3ekdvNVUvYjlOQy9ya1BpSFdaMysxRXVmb2tybWRSU2xXTHpJaVEwV2cwbktGcTZEb1VaSEI1dG9NLytPcldvODFqMzdnczk3V0l4WGdzQkV4cXVFZ0ZkMk5MWEJIZ1h0eDExT1ZWejVGRGFpVExnMkxtVDcvS2ZWVHdVNVV5S0lKc09vaHl4U0ZnSXVXMkxVR0xudElJQmdoWmo1WWRjckluS201SFVsbDBUbFpKbTVNZjBrd0hUR3Fyenpub1FMeVV6bnpGTk1GREdHQnpNbmxaWVdmb1FsRjhRcmMrWXFYSlhQMjJaNEgxYWExL2ErVlpMSUVZWEdDaVlYTit4eUFmWHFJZzZBREx1aUE2Z2FncFVMOWdQdEtLVnBqb2E1cmIvY3RvTUVUb3BIME5maHU5L29zbHZPUkkybCtmWFBNSUVwenFDajhieUhFN0VKYTBaYlNwekdSSVEraXJidzUyMTgwbnRZWnFpOS9ZcVBMMisyU0VrcFhqRitnaHZNVXlCOVV4d1p2dzRWcDJWTWhiUFA5eWRESFZ5Q0VsWjdTNTJPSDlxN0lWYVBYZkprUk1aQmxjT3N5NlNVUDg5TVBNTlRJVlFZN0ROM01KYmN4OUV1TER2TEZqZTdheHZsL1lMc3g3dWRlcXNYTk1HWFcveTNXc1doTzR0TWNCL2Y4dThRT3VUcXIrVEZxY2FoYXU2NnUzR1JDak5na3EyNUVQQ3ByZWxjaWFtQUV1Ulg5MFNuc0dUUCtGN0MyUG5YWHZrcTdxTG1ycmZpay94MERKL3hxenVZUktxbWpTZm5TRk9GSDJrU1BNQ3ZZOERyeXlYTW1pcnMxMy91V0I1WHhxYXh6dHV3eURjMy9aTitKRzRYNFR2b2tla1lZaVY5NGs5K3NYWUtHWFBjZ05jVEp1Y3R2WE9Eam45dUdNOVZKa0hNSUxLeEFqbzAxZ1RUbXNEWmxlWmpMb1h2SjIxTHEzbGx3ZWJUbWxaWjh5YUNxNG1RY3RUaVFwazRJcmxaSXBvQ3FmdWF2TkZ0dWN0TWNZcGlybUpicHlrOWZOdWdkK2RHT2lNVnRQVHpLM0FCKzQ5RUNDcDg0M2ZkNkxIei8wOUp4cVlJZHlmVVlXMENPZGF5M2ZaKzVxMVpabzIxQXp2N1AvTDdyTHljZGpvMW0wd3plbkpNN21sYUp0NUJldFRVb3Jya3E4U242aFhwa1c0YVEvWjkycWMxTG5MRE02RHB2eVk5aVJudWNMcDhZZUJmWTNDMzFmb2lIbGRkRzVDL093c3dKMU9HcWxxbWFpWFUxclVNdU5NcTliVS91dFIxSXVyTlVQWExUdHQzWXU0VXFxb1NOQXZGY3MxQUdjYlMraUtpOHo1UTYyVk9QdUs2L1VPVWlvK2tlbEowcFUwbVczSm4rWWZWaEJTQ0x2S2RtMjZqZC80eGk3SWdMTXM2b0NaRmJWWGxwTzBvdDYxK3lrWEhZeHpsVnlxYWFlRnlDVzlNdXZJY2oyOFFjRm1GbG9yb0drWHBSQTVab1oxM01PbUdKNktIT3NNUWduT1BkZGc2c29JNnlJekZ0eXlQS3NON2drOGlKQmVWZ0hkcXd2ZWVzWlh0a05FSkN3Rk5vcThSQy9kRFJpM0hqaEdubEJtSjdKMkw5bmYxTEp2eHBSWXRJdHZSREFQd2ovV0R5eGdKT2o4aWxweTVYZ0NpRHhqWUFjYlEyYkphckdTVldjUDFhbmE5c3F1dWZtYzhaTGZMZ08rbWorKytYclJKaytscU5xS1FmYThuMzQvVEpEZFd3ck1iMExFN084c1BYZTB1WDYvMkc5VjMrY1VBTi9aK0hnUjJjckVxVnh6Z3Y0dWY5ZTF5T3dLTW12azdKUzBCUmNjdHpmQVp3Z2Ivek9JbHl4akZHME5DK29lMG9YWnN3dWkyRVoxVXdnQ3VHK1dYVFdHZUNYdVJIdVVoRERYRE1Falp2RWJRdHREU0NwS1k1TzQ5NDYvYXRlc0xGS1pIenh2ODZ2dHdIaURnZTBHZ1pLRHNORmtrd2pITnRBQlBGRzN6bm55UlduMnlrUjkvNGs2NWxORWR4SFYxT1NRQXkrV2FyL0NsZXQ0Y0FEc0FGTHMvOEJxTWtpRmM1ZGhJcThFUzd2aVA4bEZGVFNVcHhHMzhTZXV1dEFmVk54R3FDTEVHRzNjOHdub1JCdFRybGUzV3hiUW1LSnljMitGY3l6SzFjbC9PanhCcndqU0o2YS80RUF2cHZCYnVsQ0xTalVETUJNaU1haEZXWmw0OVl4b25OSThrcWpxTWJiN1VtSEcwRDJsQjd5TGVlWmZZUVpSMFNXSXlUeldkazdRNEloaU1lN1VLazd6QWN6cTcyOEx6OGhyc2VhS25sVmxvanlxK3R2cHQ5UmwwMzcyU1hUYko0RWpCWXRWOUJDa2NGRVRqeHNORE5zQzNGcHFra1RQVEttNmtKay9zOFBJOG9wQmRZRlcwNUpFOE9MNEthaEFtR25hMGQyNkNwdENCeFFBdm8vVE9HUE4zbEdGMjZGOXBHVzlidEtsZTZ1S0hJRVFLNG5LYk94ZWRkcUk2RVRBbmJEUTl0K1RPZ1RJQ0Q0UGZDMUpwRnppSVBQM0Nta3BnK2xUWTlURkdXbld0Zm1UcnVYTDFBamdVN3dvQ09pMHVKRjc2blNmQjVEb0lLMnNJVkF5cG14d3dsSkswWTZQdkRkYUlaU29LdWZWOTgydGk0NnEzZkFnMkZZZXRtN2NWRW9ROXJtMmpHUE03cGVJRUlNaVZKeXlWUFpmK1RWbjRDa3lBNUVDZE1RRG5vay9OSGY0dGZCMzZnd0ZOMGYxRXAyYmNNYWplbUN6SzlvN254dWdTZGJEMWtKVFhodWYzNUJHZW1pWFg0WjlxblJscHA0K3JOUzFJQ1lzZlpaRWpXODg4aWF6aWVjSGFpcEw4T0taazJVbWI0djgwU1hyQkZWNjY2REgya2NEb1l4ZWZKZE1oVXp1MTdXWUZmZ2swRllaWi9jSkxCOS93bTRjazhSVExhS09ReUNsMWpsOXNmOUpPUzNTQ1l5VytOYUZSZXFVMzJQaFNvRXpRZmpPcmYyTURJb2RLcDhwM1dFeW1UQVB1Mnd6YU05Rk5zcjROYUJmU3pBcDY3RWNjSU4vdnh2RnhoakVGUkJkbUNkaldKM2xQNjluOUlJRVhoVStHNjR1bFlZUlEyL0lDUFAzb1RQdERsRy91SFRKZUxmcU5XTzRFVWpGQmhna3p1SVFnM2JKanROakZ6SGF6bUQ2Sk42Q2ZLWitubjRIMStRRVhIeDllQ2F6anM4ZWFndEtPRnpYejBEbGZid3p5NWJMNjNMTjRQZjRCUE45ZjRVWXJ2cUJPWXMzbVNrVklPejlFbk9uSnFnT1cvQUdwS2ZWejY1WHphL210TUFHTUt6b01PbXZPcktCemNxelJSS3VOcGFnbE1IQ216bTdZbFo3RWlOWXlFT1RMYTkrUi9GWldDeUhYQ1o1U012V0JJcHhkTHErS0x5dEV4elo5OE16NTBpSjVQZHRVaUZIUFIrQmZjYTlEN2czZ1lXQW9ZaE11VnRQK0grTFZqT0hzL3dWVkhTbjR0SVNyeW9hU0J6MnBDcUN6MU11S0R3R1dSTFVnUEtldUtOeXV4Z09zMTY0TGpZYUxnRWlCY3lPL0wzV1ZQeElGSlNXeFlyMnBRTDVOeFlTVi9TZytvVTFrUU5lMzBNMlFLZE8wMldvTlYvT1F4ZDRwVlMwTWdLZTkreXNROTVueDdobkVGV2x2b3dYcFZTTzRsL1ZjTXhHSjI4MDU5aUtKdW96YXJEYU1EUFhnTnZoMzh0cjhoY2c2dEVia0FHUDdDK0crbnI5YlJKNS85ajRrRjJJYjFJdGhQWEZra21vT21zb2w5SGFON3I1WTV3eUJxZXlseUpIcVVZK1UwL0JSa3pMMmdpNUxka3pjTW1waGJoVmZ2YjdlTmNnS3ZqcW5KbjBId3UreFFiVHNIUWxPNFpOclhKZUtHRTM0MTdNdGptb25QR1BlL3JNTVh6RW9HRE0rSVJGODArY2Robm8yY0dMdXdLUUJSTk95VXU3MW1sbU5Jd3M2ZHdUTDZ2eDlvd2pKZmFGcEVhL3p5aSsxNFNhU2JVUXRnOUdIYXJRN0NabU91VjFwNklraU8yYUM5VVUzMVpMdkRxSE5DVjI3UkgyYVNURVlSZ3pUclE2WkVla0plaDk2NkVXR01IUWczcTlEbjQvT2JjUDJ0Q28yU01HTmJqcy9MdGhSNEpJTXhzTjJkNmxaRVpkUTlIdFJkcU9EWFp5SE03a3RXd0hUZHNVR2w2dGpNK1RNVmJMVlVoYnUrbFhsZTVHUTQvakN2WWxRN0hYNGx2bGZ1RVEwMDdIVjhkZ09KWU9CLzhjUkoxc2YxbSt3RFdqZTdFZXVCWlh5aDQvcE1KaVQxVWNQMHQySXBob1dpVjc5SnNCaWFkejNna2ZkVDFLR1BwNktRUTZJU2NzelRMTlJHdk9KWFQ5S1lIOStPNVUyODZSWVF5Y2FhTFZhRXhjbzJEWTRRTkJKbWJDa1c1djk0UFRSc3ZpVW9yd1Y3eTFtQjd3WG5qVGNTSVNSV3VETUQ4WU81dlNzUzJNK1BkRnVOY3FlZ0FpMDg1SkVoazFOSjIyQlRJVG41M3N5bUt6cFE3T2F0bVA4TTNDNDViblFMcVBMb0pvRnprTU8vNjBNRnR4c2t3WlN6dzlMRkFQbHJmT0RPeGJJR2N6aE1CRzVLd2tONTM0dDlranlTa3J6d0FLN2t5Tm16Z2VhMHh4ZlFQenVzNUswVGRoc291cTVCeUxJZHJKK2dnUDRub3Q2dGV3L0tDNmFlRmJuM1JtQ1h1dXpHRlY2QWVuOFBLZkp2Yzd5S2wrVU9UWGVpajZmM0VsMVpGNVd5M2dpSkt2UXhoaGVoUWlUREZNWjNtYnExb1Uzd1EvVUMwV1dzcXMvOTdkZ3VBZ0lDQWdJQ0E0VDc2UGdDbEpONFJBNHBxN1d3Y0pxcTR1OXF1eG9jd1dxazdsSVk4VG10UGM2MlEwZjFIcDE0Uit0QVc4QXdGRjdjZTM5ZWxsaVNSV2wydlVtaEZmRnEzMFZkV3B1czVaTXBUY25wTmNya0pwODNrNEY4alV2akdaZXlRQjJ6Z3pPWDZ0WEtWdEFIKzdqbTB6Ulg0UVN5ZGRLNHFjWUg5M3pyK0hpejgvTHQyVHZDUW55N2VhRlJmUnh1QnYzZVBFaUo3S0cyYnJDaDNiMUdObVFtcXJIdXB6cmh4Kzltdk04dXZQS0JyR2luaVIyQUJXKzU1bVYyQ0xYdkwrZU9uTXJRL2wwN2F5MkVLY3AzSldSbUJJWnZWbGVxWm5yVzZCRUJoazZwbHl4SFUzQ2Y3VXQ0NVREMTl1Sk9NVjc4N0Q1bkV5TjZ5OGNxRGN0dHVObnNGbEFhUitBK2ZSSytoTUpUL1dEclBtTHdzNlpud0JLNmdBenBnME9xMVZJVGNlVkJick45dnRUWDIvWWlmOE9zbSszN1JINjdWZitIcUVkOXYySS83L3R1UCtIYjVmYjBuMzJkZk1mT2c1L2g3c1g4UHRaTiszcksvaDlsamZaOWp4KzMwbzkrMzdNcjluMmhHL1oyNC90NkdmMmRaZjdDdmgvWjY5bjdmclFkK3JxSC9OK3RTL1o5ZzMrcjBVZStyNnVqOW4xM1cvVjEvWDFiMVgwK212OUo4NTFWQ2RXYmVjc1Y2RThyaUE3ZGVBbzZlcXFNTnozVDRIRjJ6SktuRXk5RmxJN1RCTkt1SXZlYVV1T2E5TDVaLzZNVEc5QS9sVlFXeHI2VXZWYkljekhISXNMei9SREZBbnVva3BpUjE0aENDK0t4M2hEWTRRdXM0bVVuNVRzU2xSRVdGNVo5aTFTejcwdThnbC9XYXBaU0gzc3dRajFsS1JUTjRkRCtXUEZWd1I4c0xucGw3bTBQaUgzNUViVTh6cytDVzd6TnI0ZUd3U25mNUtpVTdqUmt4anZkUmFyc3h3bU9pQzc1N01nMzVNTXM5aUhQNmZRUkptNFV3Q01YWEtIUGI2VHJIcUVBM2w3RG1LUHZLUmRROHM1N210VVorZ09YT28vUncvRFNkS0tsdFFJK3BxS0poNC9BdktzWHJveXVuRHAyd0RmRDB0M0tySGVza05wZEg0ak93UnRMYnBTbU1ESTIwZDB2MXRxc3EvbEdNRTRaRE5xcUcxY1pIVTU4dHBNOTZ0bkxOMWtTeFJxQmVJYm85WGlWa1c1N2R0Y2haRHplZzgyYi9XbGZZajI2S1lmdVg0dXFBckVDb1Q4Y1kvZ1kzQzNuT1E2YVUwTVpiZkVhb2V6c2NRWjlSajlVZ0REVHluOEJiOHdOL1hqcG9iaDVoOFBLRmdEQmFSZlJRZXBHMkFsYzJjNTNtaGJHNE9USDV3SkEwVDZZeEl2V3JONXlxaTliZXduTDRWdjRKYmpSRGFNck5FMzZIN3J0N0VUOFkvU1IvdEJRam1Td0lEcHRiaXV5V0I5ZHVTVTFiREVDOHRycUJ1ZWVQTDEzZ29kbEdHdmlYNmZQWlZXRzlaZjhpNVdKTFdBWHIwZHBwNkJMVDBBQ29JdDhPWUVJMGROWTg3YUEveklDaWFTVVlTMmozM3pDRmhtaTh5TkI2eXgrZU5TVHMvMW9HVU1WaHNsRUlCSytQV0U1dmxjd1d4bzJNMERWMDZ0NEdVcEhTaFF6UHhHanVpZGkxYW5nQUpUSVJnVVpsODlacUxzd2JxRjE1SjhtM2dVZW5OR00xNGNxMGd5eFQzV29PU3dYMDFQOVdXZys3cnhwNStCN1dKcG9mdWFKaXpoNUNmUGhzU1I3UTlzRHlJSDliZmxqemp4L3pTa0g5a2YzOGtvcTBsTmNGdkdpZzBFckFNNkY2VzYyZzg0RklScTJhVndtaFFzNlc0cEYyL21DeDBTZ2EzUzVLc2VXa1FTNjNxTFhYWkhyak9CRXBpWVFBeGtuYWV6a2hSeW5FMU0zcEtDUzVDWk5YblQzVnlZMWxZN3Z4aHpEcXRCSTFBVVNhVnNUa25kNU84VndyNmtzMERsdmJwNDE2YXlUVzlzU09TbXBSOE0xREo3QjJuZ2hlZWJWb2RodlN2QVdvM1Ruc1VwejNueEQvUTNwU1BXU0xMd1Z3MUt6czNVM0hJMkhsbENyajUvMWc5R0pJV1lkUWZCaUdlZ1pCVEZFc3FISy9NSjBGbzduOVJna0tXcmZXcW81VXA2UzdCTFVHc0E1WS9SZEdVRGJWT2tZRW5GZGJuL1ZTSnpJa3g1WHpKZkUxdTVyWmFWc3FiZ2FJYzNaVEg2OGVHdnpidmc2ZDdhbGdreWJiQVdzQ0ttTDc1UU4wS3NBK29ZTy9wMEpFbThxVFBVNWdZQ0xSZmhrcGlHaEtUUW1TdGExQm4vS29sNmpYb25wcUsvTmZzcXdlRFJEVmdFM2FlOFA0YkZ1TkJTWU9UUHBOdkxhUnpQMjNob2RPVEowZkhubDV3bVd6RXdzYk53SGc5UGcxZXdXM0FydDJEb3dZKzB2cThjSzlWR0NHcjZ2ajJlTXp1RHNWRTlyTmR1dEMrQUxrSzhLNks4cFN0MXVjazVUc3NjZFRzTW9YMEdtSjZIc2xHUUozV1NLZlJwNVFRV1MzT3BYNXNhSzZaR2pmRVkvczd2bENHSWgxK2Uzd01XRXluNUticGlVYXBOMi9hR1U2WEJOVmVoeFBUcytqRUhaL01QOFZqZTlFdldSNXhPNlBxR2ZmZU0rMVE4cE9KclNBTkNpbWw2VVFacHRRZFQ3ZFN0a1JUY0pZU2FwMWZkNFg5OGdZd0V1ekZ4WUlVcjhoSkJtTjR4d0xkeDJJaFJjbU9uTDg4RDQ3cUFkRzlsSTRIN1J0Skx4eElDSUgrVnk2blRyYTExL1dxSHJMWXVQRVdLZ0JiWjMyZkpzYVhQVDRreTF6d3ordkNCTy8ySUp4SkZ6YTB6ZnRtRzNQcnQ1Vm5IRXNINXVRWjJmWERNV09GdjkvVk5ZR25sYVpDM04wQXEyZi8zNDJFdzhSUEp6UHMzZVRoRGpneUVvMURpd0JXdENBMEFQRDZiRjlhS2xZZkZmcVNvUURQVkNqYjRWeno3ZHdyWVNObjBYbVBvSjZ1em80SHNwY0RFSVlwN245OU45RVpnVmtjR0docXNQOGJsTEdaR25pL1MzSVlUVUNrK1NQZmd4eS9IQ1lPalovR1RJZExLclJUVmNXZUxMc2FEdlB6dDZiU0tzQmZzaEZlSXlKalVVRzRObVAySDNUSFRHejk2aHBxaVlrZDIxdWFLZGZ5SGt3cFRRTGxxYUZFVFhRc1RaYnZYeHZSL1dqelk5b0t1S1NyQUd2YllCNEtPaHhqM1YzSkh0TjRJencxWDFnOEsrbms1bXpiUTRrOG83bDZtbkE1R0pheEFYcnVndTQ1VFF4T2lzRkU0bWFUUloyb09oR3Z3bjg2SGt3NENIditxZCtWc0NnRE43MEJ6d1Q2TXhSazZOaGtoS0xvYzNESVE2QUxURmFVRXNzL3pZamVZL2VnYmhzd01GSFB2V1ZsaFNpZVBtb2kySm8xWXJzL3lsYjNMNEdyVnliTWlMTmptZVZjemFUamVMR2kyNFV6cSs1SFV0SFBZM2RvYmFWbGpxT204elAyaitkQ3h2NFdNanV1TnZzbjNvY0lUV3VKUnNJTXdtYUUvY2dva2cxMTlMS3c5cVpBZDlod29IeUk4N3FhanIxRGI2ZnhFTWYwVWtwK2VDUkllWWswcjBHVTdQcW1rcldNSVk5N1VCRDlBSG0wbWNuZEFJejQvY3V6NFBCK3lmTXlEaWtiaS9mZ3NuYjAzTy9oclorMmRySHkrK2FyV1hUT1dWcDRvanY1ZkFGREh2Q2JaVFVETFZMLzBVZUVPcTZ3UUlhZVdNdnVrVXlXM0YyK3dHd1lPa2Y5NkFjRnNOOUovZG9TMnc1Y1NHODQ4S0JBMDcwbDJMcDJpSVZZeFkzN1ZHcHdhU2x3NnpmUlFKRnpYcGhoWkJ3OE9PZnJXQnRDajQ1VXdSSjNTTUoySWEvTldiQzU5TXFyM0pTam5jdytsUS9sN3g4a1R5Skx4dkQxU1k2RU9HMjFsVXNVUWlraVR4V3AxamRsS0l6SS9ZZElFUlQvcTlJamxuUU1uUXNpZFNtS0QzYWRDaFdUM21UeWFhQ1dyZjJmUmRvSkZuY3JnZHU5UnhMbkphTWVNcDJZVkVzWGZkbTlQQkRzaDdKT1RSOVdsOEFKemNQeSs0RnlZczI2VjdSWnkwRFYzNHFlTUhab1J4dktuT1VlMkNLUEs1enFFd0lzZVltS1FVVjJaRkVrT3dPN1hFT1FyVDZXaU5VMVU5U1JYM3M0a0drUGExaTRVSEpMT3BqYU1xZGVKYnhIZm9aY3gwSzlTL0NMUDZiV1hOYlQ3VEZ5MC96UzV0S0xpRlk0YTFOVHhNQXc0dnFRM0lWWVQzRkJGaU16Qi9UcVVKNElpVWFOQmtCb3JDd1ZQRWt6Zktyd0pvc2lwYnpweXo3RVJ3dXRtYXJWTGpoSkM3Z3AySW9uTGdSdHNqbFFZZUNLV3dqazBhNlBJRGUzVTZxQTZNV1RRZ2kxV3RscEIyaWJ5UmExRlYySE44TkhPTW9LMk5SQ0N4cGdpQncyUk5mNTF6YWhnaFk5UDlQT3d3SksyVGFwSU9FS1gySWVNck1DRFIwZW94M2o1S0thekVyMTFRNFBMMUpMYkNNektMOVIzKzZiMU56L3hqekREdTBTVENiUVpBTDE5NjZvb29Pd2lXeVR3bUtjNmpoRGYzVjJJN3ZVRnFvbTl4ZExQcmpNWGRrVW1zdDY4WDRuNVFIbmxmS1dwRFFlVlF6eFJvVFFxUWpIdTd1WG1xYkNmRXRzc0FvSVBjTXdzMmxMckk4ZUF1dUUyTWh4ZU1mUXlTazQ2dFJPTnUwM2Z1VTJjVTJTbTZ2NDBPUnhtanZGbG5WaDV0blBwV01vcDd4UWNWWGNWZjJ2Ynd4ZWovWTlZbytmbHNtZm5BWm1CTjk4UTQ3cDdpTmJnc3dhQ2FhQzBYYXdRSE5DZVpQUVFjTWZHdlkxRlJVaXh6TmliTExQU2Y1ZmZsWllNaGZrWW53UGIxbTVEenBEeVVtclF3bEpvZzR1aTBjdk45dU1JdzNNQVVSei9DVWUwc3QvMjZ3TlhRaVJaNEloSUVGd3I0ZkZKamFqa0RvQXJLd3c5NG1RN3FnL3lpbHFQQWVTeERnd3hhYnZOK2pqYUU4S0VJSFlTMGQ1dkI3VEg5OFpIK1N1L05mV3BGYjFtTENIZHdPdlhBQ29FV2poK0hodTVPd1E4Vi8zRDF5cnZLc2lqMG5QTnZvSGlRYTFNK1c4NzdBTTRBRnAyL2lMVXpHWjlVMmk2MUJWYXhCK2dhekhIeXpnb0xnall4M0lWTk8rNVhpM2owVGFyS0NvVTVENGE1UDdOWVBKZm9Udm4xQ3ppemZMdGNuOFJneGd6ZHErYS9QWVlQT3lCZjY0RjlNeG9nSFlEdUxJT2xSa2lZTTFSdityN0ZLekxrZGtTeURHbDRRd2ZmMkh3a08zbkh3ejNnOEhVQ3FqcVVqdkg4eTg0MisxNExKZW0xSmhhVVl3M0I1R2Q2d0NnNWZJbTl0VCtzMGZ6WmJYeGM2ajZSUUx6TW13RXJiNUtKb0hWczJodjNMNDREWmxMeVhLQlhXRmZ0M3paZUVKcGdMVmxTMzJ6dnYvcnFJNE1NMEhNMkNFTnV6SmZuSE9nK0xpWFJmQlM3MkYrUVYxREFFTkRaSFpXQmk4RndUY0JXSDN0MkdVaHY1NTVlcHlEZm4rWmxDK2dVbTB1dWQ0dzdmekZ5T3dKOEdKNno0RTdtSGNVNlhYZlJibkJTRjVmSGJUeGxnWnFhQk85Y0ZleDBndmNsNE9lb21ETldGNG5GaWZZbzJJUzBBaHpONmhNWWVmOXRMUzRhRUFNSmFVRFl4ZjRUdlZIc2s4V2ZhRGZwOW81blJ1OTl6WFkyalZ5UytPS1h4cUNEVVVuZDR1cVNCMTZqYXY2elUzTWJ1NUpna1czNFRLMHFhYXk1V1d5QWk1aU83WHVva0F3T1prV3g2WjJqd0xUeXZmVCtibnRiSnVqV3RvZGk4S1VVcTlNdys4MUN6SEIzMldqYks1UG5PK3JOVTNrNWgzSzZEVlJSeDFPWmRNVDhwOWZHSUl1MDU3eHUrT0cvaDY1RlBRa1hSTnBrbGRUaUVXMjhLSEJ6UitEeGlUYjczY0FYcEluQUZwZU1qaVZQam0xRW5yQzlnQm9OdWtzWmlBRWQwdGxTeDZHOHR2ZTNieDFUZFVRQlo5VXlzbVZIak14bkl0UlJkNy84S2hrbnpoWUNpU3pxZ0FtR204MGdUaXl4RVE3OHpmcUdxYTFnWjIrNkF1MFJqM200SWhsVlZ6MlU0TytjaTd4M2Z4NmZ5TjkrK0VtcFdZQTYxOUJ3NitJWC9aaVRYL0xYWDg1NVhwME5lTWVYdGYzdlJYVlMwd0FHUkt2M3pGWnZRa0wrak4rc2IyQ2FiZHlDeGI2TGIzUVZ3ZjZER3UwUkxUNSt4bkhOMzFpVjMyZUFEa1A0V3RtY1dDdWVhWW9Fc3BLS055MkxMN3E1R3ZXcGtFK2JicGxHQUJielp2bVdzNCtqNWxVWFF2SGVTZEFZWHZUeUI3NkhuTnFxZU53cGVGZW04NUxuYUFkalJUK1NINFhiYmRjL0ZnbVpVOTlVQUgrUzJtclREUU42cnI2WEZXN3g4bGdFU1pkWWt3dFd1WUhUQ1JWSGFSNFZpL3dQUUVYbkd5YnVhMng3S3Y5VGs5TG9PZTI3NWlUWHkyT2NpV3dzSXZQTS8zZkpFVVcvT0ZKU2orcG1saUxnQ0FURUJONEtESjVOTjN1UW50YzJuYlRIMXN4RUFkcTh1aW94b01yTDF3ZFdVdWF0L0FwS0JXdmR1dnJ6THV4YzRVZGhXbmhMZGdLSmpnWW5LbWs2T3lKWGVmNGwyaDFyektMSHk2cDJqY1c4dDhWWE8zR2RtU2YwUGdKbWVsa1NDQ1UxbzBtUlpSVm5zWWVZODRCb29wZnhiaEozaTB3Y0pRS0dlTEtVTzVhbjhSVEZRS3dESlVoL1p5aDlCRDQ2Y0M4dnZpQ2FIWmVuelpPTUxDY3pxelhOMW5ITGpUbUtSYzR2aUtYeWp4UGhpWGFyeTNMakk4MWwwUTRSTTQ3TVcrU3pvYVBuZldJKzY1aWsyUUlhNmRLbWFETUlkSVdHaU02TlllbktlYU5NMXNhbzZhYTQyK2JKRmcyeWFEL3owd1puL2JSczVUdWlvUWJBS25LdlVmUXB4cERCRGk5TkhrS3dQQk1WMHVmZkVralhjWXV3KzBFOWJ5dGhGNzFsOURrYnloOW1aOFhLclN3ckRyYlR6Ylltbk1ZeEZrQWxmK2Nva2hGZmhtc3JuSGx5c3VueHJxMlNOU01ad1B1UkVrVjYyWFhvNEF0RnVMVE5BTEphcnJ1SVNDdC9nMEk0ekNvemxtTjBIMEJDMDAySE5WRFh1ZStlMFoyeUJJdTdleUVtc2UyMVZiN3JkODJENkx3WlFGdVBDemE2Z3VSQ0NxRWp1cVVoK09xNjlGUHNmQXRCeDM1S1A4V2FnRzUrd0twbGtQTzB2S0MrdGZuOHlpdVlXVHEycllVUlZOQ1RhbDRtMFJQbkJMUnFncy84Z3kwZXlVUHR0V05NUkQ5Z2lTUmYvUkU5TUthcm14UmREZUdnNWcyTFdBQ29nVnFQZExyV3NUQ3NjVGQ3YnhCU24xeHBPZnVDQnl5QnRjTzhRUWEwTmcwU210QWh1Tk85cHpkRXBKb0pJWmxjWTc3UEtjL203WURONzVrNTl1aXhGbmtDa21wSEpDaUc3NnVwU0ZPaVB6WmpReE9LTWwxTUIxTzN1SEJBb3o1OXFKTkwwSFdNM2U0VWpIalNTVVhIVWZicFdPSTlaVjNBaHNITEk2a3dLRk5aZ2xzSzNnS1VRYWVFcW5XUE5ISUJvK1d6RXdOckZIQ0hHS0lONVBVbm12Y0k3YnFPaExncVlxSjlRUmRwNmlERENmY3QrNmQ2V3I2VVN3Vko0bW5Xb09Kd29rYU9vaHRTN3AzWXJ3YWswM2dDakhOazdPdEJOUTh4amNxYTNkQ2lOc0dhU2dkMlBrSXFrR2cxazd6bHd3czVDU0srVmovbmVCWWIrR2tYN084TkNwWHJ3b0FtRzFQODV5VjRIeHpCS0wyTHFyc3lBRUM1bVA2UTZ2QWh3QXlLQmZxbjhaME9KV2crdUNZMW9WZmV1NlRiSmd0SnBYU1BMRkxrOVhtTEtSL29SQ1YwT0NxZmwwSWtUSlRSS1RrejdVeWNMdndHcVFTcVBPWnM0RlpmV1F0N0Zhbjk3VloxSE9STTIyTGFQbUFoa1hVaUt0QUIzMDlxTk9jTEFUUTZCOTlaS2tlaktWYTd2UXVBTnNPSzZzWGgxTENVbEYwam53NG91NnZiT1NTZ2lrYkk3eGg5TlpFbXNROFROajRoQ255UnpwZnVlT2JVQlVOeHBNamowRVEzd2l5M29DSk1DMzJkdnZwMlpxdklBcklhVUUzRWxhUEtBbDB6U1lIdGdGa3ltQTZPcmJWazRIL21ZeWh1MlcyZldIVWQ4V0Z3SVdHQmdxNGlYaEpHUUJWZ1hFbU9ubkU5cmFDS3gzQkZMdWxtY1k5K0hHQVdISDMrRk9ndzk3VkFGMXZSTUZYZGpMTWl0d1NacnNHdlZvZVhkYS93dFFpNUgzQU1YYm9US2l6ZzNGd25UZ3FOYXBqZC9KRTZ1NFJYZHV6OTk5SFhraG50VUF5VHlXZURyMzBjV1NXSkMranN5Y2ZaSThHblE0aGI1M2w0TTZSMyt3VTcvWXpYaHlLU3lXaGFCOWwzUmJnMXozaXFqamhWRHBDaEg3cFIrMTFlV1k4QzhhZkJhOG9Sd1dubnk5SFFVVlZFalY5VC9ENDFLL1kyS1ZNZmZGWEdhNVdmRnJpTUtUTHduaVAzUlI0a1pKOVN1SVVFZFdIOUdxUnhLTXN6OFFXNkpiWFRTSU5KcVRVN1M2VnFyMUpORlFwSHdLVGZ5eFFEanM2RWVQSExrM29hUWpFZk5iMVFPN05uK3lyS1U2aEpOb0Z0QTgzd2hOaXJicXBWbm9WUjFkY1hETFNxTEVoSEFYVXRXRkNjYUFMRk44UlpLVlozOEpmbmJOOGttODZIYlo5R1AzdWVzNlpNZGhSOTRzZldjcGFFRU41a2VianB0SGZXdVB5dk9meVFXMmFqaG1MOEl6WXoyWEVsYUtlWHBoMEM5SW1kRTdiMUNRNjlmQ3RTZk1jb1RCdElwNFlxWmJEUk9OK05rVnZxWCtxbzFEQ1hhbkt0dm83YmVsWDhSMWpjdzlvcVBSdCtqWmorQVlwUnRGSmRGVm96V3ptZzJkaDJnN2lNYVF4blJKUGROQW1sN0hSWG5yTkZ0UHlGRGNQY0dZOEVzcnFVdVh5MUZxM2pVZWk4MmZBdTMvMEZUeHJEMGlnVk5CcTlYR2kzcC9BeVplUjZUT2ZOTzQrenJGUVROVThuTFlyYjFhcEZvcmk3WUNMcUhSNUpoNCtQVE1aYUl6bHJkczZKK3phSGxwdHhmOXN0dm1TSVVjWEs3VlAzTzhZT3ZrMXl2R2s5ZStjN1NGNURZR2F2Y1VMdmpwVjdCTlFyVmU0WFNUK0ljUzVyalBCSEZSK29MYWpjN2ZaYkoxS3NlazFLQUpRbzJLc1VjaWY5TkVRcEQ1YUtsdUZ0dmg2NW5MQTI4S1pzeWZXZFZjVjZ1dFFCS2luYS83aHFOdWg3L1ppbUN0YzFSYm1CYXk0Y0o2V3lLWE9ycUU2bEpnY3QvOUVCaVhXWStNblMzeWE4cVpmajlxSERXS3dJbmZNbWlDU2lMcFFWSG1sTHNPbGtuMGtuK2MyUitxdDFnVktENWhXZjdlejNHbGlYZ2NZM1lCS1ZyekVBNEFpUTdhbEtaZ3RCOXdFam9vaHJhTW9UYU8xWVhwck5RZTA1THZIZGNUY1pOekk5bG9sZWdKbFNGSzlLSmF1azBVd1JyWW5zUnJmNUVJZ0U1bC9WazcxV0p1UVNMTVF4RWRBckVhMVpQajVCS21IMkRpT2hoZVczTUpGSkFWQkloNjMrRlQ2SjFydkRPcGU2Rzl6M1c5NEt0d3p3OGIwZUcwVm1Hc3hDdEp4aVpZeGZxcStTd000YVQ0OHNrcUloQjhLWHFTWFJJV2N3SnozYVJRMEJZVHIxanBPTm9DWEJEYjF1YmJocFl6WDJYQzYxUUhRa0M1K3pKMUhmSzkvTEo2TlE0Y1pwVUJNWjhkVm52cGNnc0hrOFJGcnF0ODB5dERJblVsWm9odXpPUG5lTklybEx5L0QvTUV1NGxGRFBLWmJkdG5oZWdxRUJveFhOMU5pTjQyaHU5WHJ1OUNpQTVwQ0VGTFAxL3RHbzU2cGY5Sll3OGEwbEVQNDF4KzErc2JSV25IZy9tT2lrVkJDdEYwTktWL3VnMkFvTHZrQ0M5eVdqOTN6bXgybHNiMU9MbzhjSmlYOEFFb0V3NTVlK1ovaXhNY1FhdGg2cW9hY2xGT01BRDNrbFR0cG00R0tCQ2ltTnUxd0RaTHBBdFVCclUvRlh1emI5a3dHNXF2SWswV09NSi9CSWwwc0pNaWw5TzByb1J5cXBFRWl0eU9CcFpmOXk0UTg3MEZzZEgwVnlqQXZrZG45MkZ1TUVuZGhNVlRUeXBWTC8wbHV4S0d0eGxMUTQ4U3lGRXRsaXh5T3AyNUxqU2NYMTlHN3Q3bDI2SkxrMGFsUXN2ZHAzcmVGbnphaHZSaFJFbjlaNDVTQ0drVllMZzR6cVd5cDZjVjAxc2pSRUx6Q3JTeG5OSFh4aGxpL3c5enBReEc5WnVPMW04OTM3ZkZvUHBQcXNraXdCZUZ6ZTNVSUJBNjEzT1dKS0RYWDNIYWVZcDNEbURuazBKSlllVXlPb0NmM2NSZDR5RW5BY0NBeWYxNVNlUTc2dWRHOWdNSFA0WFdQR01NVnZBNjdaM1NTUEE3V1VhVzRoSlI2QmlPbnMwU0hEWTFnVzZqMytBQUc0YTNESEJSZXU2d2o5U0VYWDE1N1J4RVcxUEQ4OHFrUGsya2xmcmRWaHZ4Q2VWU1NjVVlnWEhSMEl3WTY3WjhOaTFxRDRTQXR3d094L0dTSlIvQTY1S3ZTZ0Q3RHR5cnVpenBDcGpYcmE4c2hMa2JXVGo3NjZtU3JZQkVCd3hndG54SHF1VmVNcWVBNmsxcCtrVnBZMUJWNTBXQ3NwaEs1eXM2enVLZzMya2YxK0MrWVNOVXFjZWZ5QTVuZUNTYlVRVDNtYnFHMTVNVkVPbDQ1a2l3UWtuRVU1YVh1aVY1alBrb3c3YkhBdkdKdDhiNDg3QVJ3QU9VRC9GV2NSQnQ1VlhLODRpby9aUEc1S2IvT21DdVZsODVpNU1lOWJ3RnQ5WmxsdHpRZHVhU0NmODhVcXFIUlp3SjIrL0YzcnZzOUVuQ2kweERPMkNUTUVBSXVzWEZscllBN1hhZzBEUUpybU1sUVg2aG5ibXZUVmZNNDZud3VIUHpYZEJPZmFzUVdseDJRcnduSkdoOVp0cWJyaDJTdFl3cHR2dHdLcjk5elVlVkd4SzZUd2phZWZ5Umg0ZjhCbUtVbHVVZ0gyQXJDc2FKazZWVlFJL1pjMEpUWThDLzNpNDNIYlVHaHhiMCtkWCtyN0JNVnZvRHJVbXZ4ZDBTemVhejQ0WWsyNHc0L3pSWnRSYUxUVVBpWkFOc0JHZTNCL2hIY1NHeUNsZ1pXZ0RyMEMvcEJDaGppOXhoTnRCTDJiQUFaWUY2WVQ0Z1NhVHZIcVJQeThXdmhzWXJVNUZ0cGRTWVZwemVMOEdkSGpqL0tKRlR2UlZkKzUwUjNVZmg3VFFBYTBaY2RucjR4ellPSUwxQkdheTE2MnQ0U3pUWVlxcTRTemxGVXk2RzhxQXpVWlozUTJUYlE2L0xvTVY5cGJnUXVqeHp2RmVGYTFYbVI0VWFpTUs1Vm55cDNYNTEzcmJmcHNPUkhaSGJzVkNsZUo2b3dVWXNaMVErdysxd0JVRzRSTGhQZXV4Q0lhL2lxMEZtZXdDek5zREdxM2s3d2UxVWlyb0syb2VrY0lESFpBTDB5Z3kweDlhYjBNVnJ2SkpCYjBWZVpmblh3eVNGTmFUbERaQkY0ZmFhbUEvODZVcktmeTdGMklub0ZpWGE1VXdKNURUSEFGUU1CZkU5YlZMVjd0Rm9YOExOWHVhdW92QTZHVTBveG1VdDkrbGtObTk5NGpJSjZBNXBBN3hWQzl6M0hDN1dKbmtxZHdVQ3VaVXVCNWpScTN6dndiVEliNHIya2t0TXVjTndIb3hGeGZKOWtyZWo1N05icFMvUkdENlpKTEJuWms1cmdOTUdnV0ZnSU9EZ014aWM2WTkvcFNYejVrTHFzZEhBZEpHYVRpQWVGNXg1dDNqeHZyRVZ5YjZQNEh5cGFqaEtsTGtBdCtlOXJ5OUZELzh3RFZ5Q2tIdHcwbklMY004UkFDOUJjT3hHV29sR1Yvczk3SDE3b0xuUjJJY2VpK256UnVLTE9iU2ExM0NlL2oyak0xS1BJVG5Dc2ZqRDN3MTlqekV6WFk2c0tTVjhlKzV3MzdGaFR4L3VUZmVnODhJeVYxbEpScDVCeWJLVnE5TWFhVjg5VGQzMi9IN1Z0dDdKRFd3VDNPZCtGTitneGFLN2hqMmhzWlhwa0tWWmtTbjlIb2lTNnZDV0VOSklrNHN0ZjBreTBURkc3RDBJbDNibGVYZGNMVGxuLzZjSHhkazU4eEpPYUtuZHlTbklXWGsxU3krOENlUFQ2SUN0eEVjZXZ4d2NMMXFsbjVDQWVzdzllOWk0dTZKVk5YdTdTR1gvZW5LN3o1REFiYS9ZTjJ6a1ViTXM0ZldsK0p6VVhXS0dTOGk4QzFDYk45V1BmZW5LUGMxUDQ4WmxWMjRnN1NoWWJHUU9oWWRmZzcvQ1laVklVVVFCK0g3OG92Vll5VkMxQkFYWllWQ1R5Z290NUREUXZxZ21SdkliV2UzcWZrdnRPaU5JSEpRU0t1SSs0TFpmU1lYQ0lzR3dFb1VKWGl5NXF5U3Bua2NTaE5QeUhqZ0IvYmZDQzdaQWI0VmI5ZTdMVEtYd3M5b1F0alFoRGsxNDJtdnNITVFhN1c4M25MdWhUanhBLzAyZ2VzMWZkOGFIV1AyQ2tTeE5rQnA4amJ6Q3ZDMnZFNXNGYUhvZFRZSE1tN2c5UXcrU0hzVVgyWWsyRDFCUnNpK1NHcmQyRzE1SjFPMzc2ZFZvZWdYSEhZUjdZNnlkZHpwVklkSVVBcmlTL3ZHMmJlMzhxUXlNbWdWRDNlTlRPQUJiZ1A3d0VPZFpaVUpieXZ2dXZYU0ZmYm40SThwQXF1MVFIeFhKZUtIUmYxTFJiNTJXa2RYV0M0STk4NEZrK0JzbnY5TnF6amg0S05CS3UvcjBCMFY2SnUvVnFISWdWSzcxZVkvYmxsR2JVMVh3K3NYTE1VTWFlZUJRN205NkRsV2JIY3RjZ3RGZ2ZPV2dCb3M4N0RZUytFV25hNnh3NUFUMHlnUVh5d3lSK3FqTFFZelFIczZtdlRINnpFR0s4OVF5aEVsMFNxU3J0V2hOYlJpTmNxcytEY2x4UFFsd3M1cHpjVjRVM1ZHV042eUhHMnd6bFpJTmR6NG1IR3ArQm9sUUdSemV6NE0rUnhHUysvS2FkSUxUN0syMmR4OUxhTFdmRFdBUjZGbjFiT3BEcm9rZUU2N1htVHRTdnh6VTZRSXdVZXlsMUoyUjVYSk9WNkZDQ3B1cXdTcG4wYnRDNmNrMjYyVHR0WFRxNVh1MC9xaEZNdmh3eU81N0c4ejJGS2dPekhCQmZ6Y2FNR3J6R0FnbDAzMWxLU0xiWjFkQ0xMNzdhVlBFbm1aWi9MNGJCZVZWRFg2djlpVUl0RTkzT1JtbUN3WnB2NDdzR0lmMlI1QjFmbWVQdjB0R1p6RTRuQWUrazJmWFh2elpLdVBZWGZjNXdnbkpySFlLdDFaL2l6U1JKZldtWDhhMVRkMDlDMW55MGh5QWgrWk5NTllVeGIwNFp0UWhYQjI1cnRXTFlVYThwelREcFhSNGFFZWFYZE44RzJHYllndmJUTThuWGNQU1pON3FFdlFGdlc3TlRHb0hnK3BPcTRPRXQ2MWNzOUlvam1rdXIwNTRQZ2lGRElMZktMRDczQjVaOUdWQ1FuTjlOVUpsSnY1cU9iMStiVXkxNGVBekViUmJrR3lLRmNFRDB1Y2RhaEcrck5RWWc2N05rMEEvM0pMbFJoUFByaDdaSnZ3NHE5YXdiRVhHK0t3T0QwWExuQlc3M0dwNFdSYUp6enkvMS9QQVhqdmZ1NmNOT3piUDRNQ2lZaTZ0djZKWkdWalUvM3FnQWJOWFkyUHBTRm9PR0ZQMjZZK0VhRTdiamR3L3U1M29LM1BKTDlKbGx3QnFFR2QxZ3dVWlhCN00zZkpYSTlibDFxdVVZQU9mM1JtWEh4c2doQVNMZGRhQncvckNhaUMxNXV5UFBFRlZEZVNuWVdOK1lkbzkvYkFuYitZeUcweDVqd2RXWHFJbkNrSldsZFBBZld3bS9zQzRRaytSY2tLUDc4RVRmTlgybEZpaGxta1ZsMzlKWmM5YUpkSGNvT2FhY2VDci91TGJNU2NYdjl4czJRek5YS2lzcEs2ZGpIVDVVakhGWjZqQW1QVXdWNWRncXZLSjZmTVpUNmhQT3dBa1NleVZvSUI0SVBLWlphc2hocFk0VXJBamY5U1p6ZWgwcEFXc1JPcXcxNmtLRWJpWVQ5bzV3ek9HNnpwTmI5dGoxUzJ2R2FNNTBoMC94TEM5TUlOb0xIczZFbWF5aDk3bmRrc1dTdkVaWTJReXUwRnorZW9nY0Fpbmpaa3NqbCs1elVCSHBQRFdVSmJhSnY0dzl4R3ROT3U1bWdRZUExcG9Ha2xYTWNpVkFaL1Uyd1dEd09taWRjUkV0dVU1SkJzVUFOMTBQaER1Y0VlcHl1Yjc5aTY3VllXU1ZKUTMrTTNGbi9DN3dScTIyZzFYRFlXR0grdW5zT29zVjV4N05xSnkyeEZLRWtRSStNQUMwRzlZRmN1N2JZellIRjc2NHV2WUt6VUl3T3Y5alI4K1A2ZWx6TE5OUlFQWkZ6SWlxRm5JNnRibFY2VDZJdHNEak9OSWd5VkNqNXFkZlh1Z2s4UzhVeDBKTDZjc2x5TzdTL1pvVnhYZXFDRko4eGJpS3h6dE4wNnBjSEpBNEFWN01mcVdJcmc4dlRuT3V0Y1NwMWJqYUYxakcrNUNRMW1YMVJWWTBsZERubkh4RlhjczNBRnlESE81SS9raEhFS0ZrQ0R1c3JLS3hXSzdiYm4xb21zY2ZuTjBMUjhnVmpOTnVEMW5MbUoyM3Z3aUd1QU94Y1UrTCtVN1dKU0d3NE16UDhUdWh1eDhhamFVaGxyZHl6RWplQlNZMFZUbXNXNHhNNWc1R0V6M2E0elg2R1pwUDl0aGthUndFbEZsdHBRdjNZR3BvYnF0Q3Nxem1VM0dqNXpDcDc2c0xRNm1oTVpXQ0l5SlI0TTY5b0RlczlzcHZKZXZTdktJTS9BL1NETExTU09MVjhKSytLOFp5bW05cHlvZDhCQm50SkxaVmUwMHNQay9EQjdBNDFJSk9oT0NDcEgrZXp2dmErWmFVb3VaSkhxTS9IZE83VXlybGZLaVJpUG5Hc2IxZVhjQVZkRGI0WWVYNDlMRTNLZDZRZGtwNVRMdnBZQVFHT25rTnFIOUxUSTdiMXNmZTZCbit6VC9KdDdjSC9lTlJSTjJxZzA5TklmSTZwZW1wTE16V0RhTUtEaEdGbUh6LzRxbEl3VU5VUy9xSFNhREErNzNwVUNCMUhsM01STm04TkNOOFN0Q0RYR2tsZTBZdUJrdDVjYlljd0krcXd5TUlkajBGUVIvdDFTa2N4U2ZqMHlsWjZzZjFkWTBsRTZXS20rRWF5UHdqY09QUDZsakNNbUlnNWlZZFo2eGVTcHhzelhNWUF4cTZtbTlNcm9Nb21HbzVSZTZJVmIrZHdPVjhkUHo2UktESFhRS3B6NmVMaGpSTEdUai9LTy9DZllHTUU3LzJOLzZpejJmQW5Yb3kxaHlCMmhjYmsvRFdraHVMaDIwN1dmQ051TWtwcXB5TFI5c0hMQ0hWcWwxRGxYcEVQSTNLS0UyWmlTc3Y4Zk9IbjA3a0pKWjVyRzV0VTVEd3lLWTVZU3VaM1NST2psanBxclg3NnltcGp1eDdScmhYT0hoNk91U3Z4VjZ1aERoSERGM21OSlVKbG1JaGZqTlZ5NE1zM1hRbzlqbVdNcXJzNWtmNXZBR2s2MWFoa21FNCt0SnZRbE5obUFVcTluSTlLa3lNdklWZ2d3RXJGZ0Fqd0J5VGh5N2QyUzJ3RFBLYnNqR29nZnQwMTdhV1dLU3N5eTUxbDhRUWloZ3Vtb0FHdlFhb1FraWtjQnkzUWw1alFrVDJwd1ZnUndManJQZDlSOUNJY1BTUDVwZ3BVNmpzSVlRM25NYzExMjc2K2xhOGpHd3ZVb1BWMDA3OThjQ29MdDFxSWhUcURGTGFNZEY0WmpSczhpamFpdEpNZGNjMWZGREdtanJzbVNFUDlVWEtJQUlFTXlKVHhVSm9nNUhIZThadmI2WXdJWGR3aHNIbnMrMkdNK3FqVFBGU3c1NEtaY3l6NTdQdFlSZWphRVRtUmU3alRBWTJ4Z1dDeUpJZy9mMnNicEQzSkNRYVlZbTVsZW11b1QyVkNnclpTY1pLclBrTVZlUlFQejYzVWxPbCt5eGsyY1BKT1ZKL05VTnRYWU5XVVNmaC9xVktXRmxIWWtTY2ptNXQrbndPKytlcjJxNUZtM1g0enBRcmsySTBOZmh0c2VMa29PNnBPSHVhYm5iRlE1UTlxQWZ0cXNPLzdOYnhRMVVzdWJIVEZjblh4aE44UERXSTdyRzFpSlhpa3dBeUkrWjNoY1g0Q0RqdlQ3a0FYTytZVEIxdU55U09lY3Z3MUVvZjJxSkFWQXV5OHhEc1RWSkxMaVdvcUdkVm9GcDRHR3JWTFhGd0tHYk9EY29ZaHkvYlVPcGNsZ2ZCUXRKZnVxd241TDJ4NENDQkRwdUt5alhSVGNmc1QwTGlySUVhTmMvMGxITlllN0I3SFlQUlVpaXl5R1QzMTMyZ0R2dDRTRmEyVkEvd044blN1UUNDNjRZVjkybDMyS0ZkMjRZRWxDTk1CamR6SmN6M3FSR2lqSlV2WXZxTm93UkJQYXdidHJxUlY2S0dRSHM3VjQ2aHByQ2lSTGFYY2VLb0Uwci9qYnJVMy9VbEpmWlRuQSsydmpZQjkrZHJsVy9tRWoycVora0lwQmNwSXRvRis1SGhTOGoweGVHa3hUTllqU3B6U1EvU3FkSENoblVRa2NWMWRGTnpmNHNNWW9Pa1RZN1I1MnpYZ2ZWQ2NUYk04K3hBU2U4VVlFcTJyRGtiNjg0QlJ4OHlTY1RBbFBYdTU4NnRhOUtjanRmczFNR3JtcW92Rm1wRjdQV2lnditTcXZqQ29IbkVtWGhEa2lHVTFpb3NiOXd4WFhPMVpxendWUjVBWmFVU2F3dG52bVozMWJLOVBlN1RzUm1RUmtwSC80cHRlemlxT0NQeTdWcmRFWUtkVHdTTEZnT0h2RExqZ2x3SkhXcUxpV3J4ZmxFRW9Ccm5QQzhFKzhQZ2k0Ri9TQlBaek1wMm04ZnRiaVJkb3AyMjlMNnVlTDNiZDUyUFV6N1Yrc05lU045NmtnMWw5U3k5Mnd5LzhmWTNPdGxsU3k1T1Z5ZFhJdGUyNHBnUldabVA4U0RCekFUM205WjVCZzRQV01CUFNKSkF4UE9JR0UyQ2c4ZGE3UUtjdXpVNEZnd2ppdi9nWXVML1BpQzZVT2NDMUt2TTVUYW9tb0RyYU1Dd3dGWGlPalZlTGtHdlIzNm9Id2FmUDdDKzRJSmxnU1plMmlyTmU4VVROeTU4ZHRqS3lMQnNabjNzc1NySVJqbVIzbm52NmQ1MVViL3FuUzYzQnJsYm9vV2JXOWVhTG85d25Wa1dXcklPREtRdEJMaDJmTmFqWENEYktRR05YYmpNcVJadHRiQ3pTaWxzTzFPdElsdGFlWitMZmZla2RTMUhZL1p2ZE42Z245REF4djQzM3piNTVDUVFEZkluQU1rRVZwazRMR3V2Q0NuNVpVREpZUThySEhEZjNIV3hKUGdOTmUxN2QwelJTR3VOME9ENURMSTYrQlFzVkN2WGZjMWVEZ0ZDTG5oVWltWDdLeHAvOENncTZMRzNBNTc1ekd6ZFFSU29GVHljb2hlaHhEU09NVWVPWUt0SWlIRVJOaVJuNkVDMnR5NldIWFRBTXN6cE5LdWx2TGRwaDZrVXJsRzFtWHI1YUNSQlZXNnZQaElOdTJialFuTjBnZzZhME1xTEh1UW5YbEV5eE9PWHpzdWEzZ2I2V2s5VXc4VThGQjN2OVFNeHpOdkRUMGpPY2lncHZPS0d4aG1XcXpZdWQ0TDdYd2xDVVFTYlhMY3BZbGNRQ2d0TWEyanVreVhaWlJnTHQ1NnRnK0pTSmNFcldqN1hCaGtIRENyalB2TUhmK3Ivcjh5TXpzWXMvam5kTnMrR1lIUnJPV1NkOVF0bzdBK0VpZFc1eDF4d1VQYWZudzd4ZnNuY3RydkF6UFptNWdHUmxRMTJBOWpuemFPaVNPU09ISElZTVBWYjloTnppaUo4ZmFtWXJ5cnB3TkFHcElZM2RmUTdMWHA5bTRqdllCMjZFbXo2aEZzQWdtMWp3R05xbk1ySUZlcm5hNUh6eE9EN0hYVE9uWW5mMUs0NzFDUTJWUU82N2FFN29vMlk5blFITmhSMUVMRTd2UloxTStiTnNCd0JoL2JyMTZPc3plVFJOVVNpVjFOUHgxbU1vSnFVMFJhR0NNTEE5NkhVVXFoQ3ViaUdOd3NvOWUvZFN6YWI3VjNHY0htQUpIMXFxd0Fmd3dNRE5ScVRZOWJ1cTU2RU5rdHNWODM1c1M3aTNaeU1OaGtWSlV5ZC8zMitPZG1SNy9MQmNsZTN2VkkxS2w3OEtIa2xOem5Cbk10VmZUUXdYT2FWTFBVQVdJakZ0STBHd2xtb003Q0RDWFVHNkU0Um5UTG5tRkF3N0pobnZwb24vTXYzTXJldW10UWIvdmlJVjF1Q3IzNldQR1ZydGVRa2p4SGRBeUJ1NkZpSnZxK0lheWlRcUdBQlZwVHJobk1vYUFmWjVoMUVFSnE0akNINkJHMldrU05LdTFiZXR1cC9KM3dqVlN6R0J1aEk4NTg2dE5OMGtzd2hRSkxmTjRuZU9saSsvRnNrbjF2Z1ZkOTg1WlpiRmQ2a1BiWFc3TWFSRU5pNnJiVSt4aVpkZXFPMlBBeGQ0eHNoSUJmak9IYnI5L2g1RVFtcm16ekFzQWhHa3A5S21WTkQ5dklJRlNjY2J5UXBxbnpwWnlvT1VOckpiQ2NqZUJ2enM1eHlySXZwUHF4dFlKcFpCQXlqWVU4UHRTUlB0QkUwT0lhT3lSbjJ0czFRdmJFd3lzNmw5aCtQQ010czZBd3ZJMmwyeG5EQ1lLZkpIaXFLUzRXTzVFTzk3QWtlRVVvNWxVRUZjV2pJU0YrNS9xRGNFUXVPdkt5T0ljdVJaNUF5V1ZYRjRBYSs1NXRoT0RoaGF5Q0dDdnlSV25PSm5OYVNGeGdsR2p5MlZFZXgyeW5TcXh4eDRDc2xtazFFNk1QVFdlcUpZWEc1QnlmVklFWkxLMjdXQzU5b2I1Unl1cS9mand2UHlFdk1WTlp5QVNFNDhjUWs3Yzl6dXdsNlFXcWVYMEx1c2VDMThiOXo1UXdSQlpDcWJMMFdoTE5JOGVGdDg4K1R3a1pvcS94bnRla091V3N5TzY5V21uNjRVQkVadGJZTXJwVHI5cmN6QVVXbm5TOHZvRm9GWkdMbDJnOSt6L2hmc1kyVVQzQUlUaWtxRTE1NjlkUjM0VzNmNTNXRTB3VWdJUnVaVVpVVTFGMzZ4aWlURThzdzhNOXZVMEdhcDZMK0VnY3drbjZsRTlXMUg2K1BySzBTNTlPc3lUN05KWG43cFVoRjRtQnNIMmlicExLVXRFWkQwbERJU2s1ZWwxV2F4QXlScEhaUml0elpzcjR1VE5WUWZXNVBQazFkd0RjcnRmZW14ZFllazdaKzBYakVZbldzajRRZ21lNy9ybmlvT1NNRHVUVmRrMTRCVy9MTStIQ1dOaTA5YzlJNEJ0bmRvMldqa2NWY3krclA3aWhYME5sd1Y1UHBLNTNBMlZGRTE1OWtLWkh0ZUhjOGpYYVoxVFhqWHd2VitEeHp6YzA4cWhqQkt3RW5rcVZ4U1JoOCtYeUw0S3pWNCtnUHc3RmdaMEs5ckRsYndGSi8yeXBwUVVkUkhGRGp1RnJ2clRrTUN4ME10MFhob1oweHFWdDY1bzhOYUhsdHgyQTVIRjZKNWxKdHR3QWVEZ2llemxySXJnSERVTjNoSkYyMFRrSzlJSU9xMTd3eVFNZC9VZFF5QnBsSVNrU0R0ZlVZQk55cU9IMFVXZjJ6anphOFI4aG5hN3lzSWdQZXNGdlRrOFFEVW16V1BSckl4YktwVGw0Y2RudWlOb3Nla2VnZGNYbEFOakh5RHo0MmJYa1N0V2dkSjJMSzU1eXArYVlabnN1bDJGd3UrbEhFOUVxNUxCNEJJNzhqYU1nR2x3SDZFR1NWZzBKOXIyb1RxLy9PNWtwRzdtTHVpVUFENEYxUFljVFpWTHI3VjJVRFo4ZGZVS1B2TUlNamRBeUdaRkhWbllJWVlEY2d1ZnU1dmdFbURySHBISEZ1ankrWTFWamZrWUVSRmZiaSt1RWdjVkUra2ZESEZGZjRqekJPc1pTdmh6RGFONks1N0l3SWZORlZZRGxyTE9wSEhGek5HVnRsL1dUU2JYZW5ic2o3MG9YdTVtYS9sMlc5WU9wRHpOSERnYStqbi9YMXAyNU5Iem5iQ3pVWUdBTTE5ZzJ0T1hWMWlpanhPaHcvWWQ0emhRZ2QydDdLUVBNNTBSbVE0bGNTSDFHbFNIanRrVnBLdm84V2lFM0RPYUYzcHl0N0EwK1A1Nkk1UmhaZXVROEtaWHNUaTlJeWRhUXZsZXN2WTcrT0o1Q1RXcXpIdEFNME5DSUl4WGxxREhpQlZzbHRZWG5mUm9ybHdQRm5ZbjhpZlllOVNYRmRlUGc2bU9NRlBVdUxsaVFmTnFkeU1FUGp0bGNPMndOYkhzTWF1L094UDN2WEMvQ2tudFZoc0FzaUd2NUhnR0p1bitON1V5ZktvUUZkelFKa1g0cHNweWthQ0FWM2RtME9CWG9WQXNHOG9xUlBKMFVmUzhjMTBUOFB6a3VoQ2JWbCtuSnZ3eGFMMGUycXdVR1ZFM0xGaElvRnBCcXQ0dkx3ZmNSMjRDczhuV1oybDRiNndjK09UUDVIWmp4c3diMW9ReHJMd1FpNmRpUkJhQ2ZXMVBZWVZ2QkVJQUVYV20rczRMTmRpaHRFWnRlZWVsVEZFN0xvWXllVEVza1dvT1ViOHVnZkx1VklrRVFnWms0QVZJTThQKytSaUZyUklEM3JXRm56S1lUVXgwZWR6bFVaSjI3cEtmbEliNmxjd0hSOWRSK1ZHL3gxS1ErZk13b2x1cnk1dTA1MmoyV1h6V04xWmQ0ZGRtSzNvQ1I5MzNTY0V5clJKZnNteHBDdjY4cndrSFJEdHprZ1NYbDc1YVU0ZXAza0wxMzBFSjlLVnVWZXg4djFiUUtINFZ6Vnl0eFpvWnFmR3B4eWk1Qmp6RFZIQUFWNUVUdjNSMnRGSmk1VmQwV1NXSnZQWGtBQmYrTXB6MjBGVDhwa29UbytQZkN3dlhTWVU4b1NweDgrUFVBVHNITWVqbDdETlEwVThCME16KzVxV0RrdmNwM0ZrWElWSXRySEJBcHRRcnFuWHR4RWhtL1BDd2ZDUjlrNEx1NlZ0ekxaTmU1UnA2MlF3WUNGc29HcGxNQUpoajJwd0JzMXh0cTZmUG4yU2UvQ3RDRU00MW9xOU5Qd2Yzc3dLK1ZxTmQybWtLekNQZWhrQTliVE1hOFJCK0VmaDhaMWR6QXU1cnVDOHJpZDZ0T09XTjJqSTlNV0E4RHIxckJ1Y0FkY0l6ekdsV08vbGxPRmdEWXFxMEg0KzJ2dk03bmZ5ZHhObkhLazMwU3hxQkNzemxYUmtIYnhyQS9zcS92SkU1VisxUHZNeExMT3BYZmV6L1hXekhIVHluWi9aMjJJN0d2ckhQcmhBWTJweDhzN3RkOUI3SHJmS0pCQ09YQk9FU05Ec1hXc04zOGJtcmlzNWhpL05ZcWg5bUdiTytzSmIrYzhFZnh6RjI2YmxrS2F6ZDJHOFFjL3dSQ3dhbnFJQnJRYnJvd0liWjBwWTZWQlVERmJ4cW4rS3lKWlRKYnRaNXhUajhvK0RmYnBKY1VBMjZIeFFCcTV6anVtUXFhK0Q1d2NLVlJrcC9zNXF6R011TVIrUDJqUTFQNGg4REJSaTJ0S3RNc2dsL2RHVXBjdytDcHJuS2R3cWRxcFMvWXdLeU5XSTVtVGZxQTd4d3R6Z1hpYmxKRVI0b09ZTHBpSi9mTzYzUjFzMzZEcHZMRmcwbmNpSUd5MjU5STV1dzM0b2FNbzlQcG1RdkRvY2Q0STVkNzB5OHdJVFJxT0FHTWdoTkZWWUJwdUlUWXg4ODRWMGdUTGxJbVFqK1JnWkdhNm42Q1JURnEzZS8rOVhFakJXTmFZVUExVnZwNzdGeXdYVHZBTkRteXpYNHBPcHAyU21CMUhXbFU1V0R4THNlRUlJdFNKTmNiNDNNUjVENytoby94aHNaalU5K0hDYm9oVE9MWS9abEV2TFFjM2s4R0JMRFY1M2Vtb25sZXNNNGxwZU5OQ1VranBrTjdFY3JTejBXcDMxY1ZreE5CQU1aUm9aMzcvOVcwaEJRRnhxemtIKzgwcnIrdzRyM0tKdEdQQzlkS0lMMk1tblZPVUk1V2Jac2VRdlA0RVR6OVcwSmtSaU5qSDRvSEdVek9lQjc1ZVo1UjQ0SFlCRFVDalZMenpiaEw1clV1Mk1MS09iM0hPcUFtcUtXbS9udmtweWphNUFVOGFIQWJGMjgyWnJVN1hHN3F3RDE5bWg0S2RlMlRRY1F6NWk4VCs3Y2dEQ0t5dVN2NzZ5NncyMTAybkRSTyt3UWVDUk1CR1EzUkNqWUE3b2VlT3FwUUdDMlBUYmxjSndyVU9tVmxBb3psSEdrSDNwUFhQZ1lKajhUSUxRSUtYUEdOVFdkQXMzbWh1aEw5S2dDcUhhOWhuTlFmejFGQnZzMCtia1ZZSCszZVNkMThRY0lEQlVyN3hmTXdEejlCOUxDbVBReEpSRVl2UFVlQ3MvUk9LSDQ2OFJRdEpxSFR6NlVUR2lXNXdnekxkT2VwVzJTMkVCd1h3ekVxRGpIUzE4Q2ZtS3M1cjU1R21lMkVRN1R4eVJLOXdyRFdSdUNwVUhaZmxyVDJLdFRzWWh1ejB0OHM5dEFHclhxZjQvOW45a2xqMzlHUUhDUEkzOTRHelY3WnZSeXNhVW0zbTlMR3BiNHVDZGM0NndCdmpVUW5wZnE5eDEyZEFHUmJYOVBGSkgyUGo2L2FFdmU0eVVaVmcrSHA4UXR0eVBnOVRPdFY5TlBiUjRFdzc5angzNlduTUJWalFjRG40SW9CRmJINHRNN3RNZHAzTlROWmtscUt5ZVFxc2FGZGU4RzgxWEZNRWNwT3lRczFYQWJ2Ny9wcktQdWFyUi8rSEtnREtteWxiZ3Y5NTNZUWh2Z2pXQTBsWW9BcHFLZTkvTWxKbGY2S1RxeWROSWRCSkhOVzl5dzk0WWs5MUZLWHIyRlZ2eWNHam9QS3hiNzlKM0ZMMVVycnkrTFpkTXBhK2ZOWjRsSytMMmZTOXFZNm9BMEEzU0dmcWtvb2ZYZ2FXYkZoNzZSQm1NdnNPd2pWS1Bja2F4eTBmWFo4VWpWUDV1RDdPN2JFWWcxS0dwTEYxNnpQRGpNeWpSTlR5Y3Nma3ZDWElJNHBSa2pFOEVsNTZzd0FqbU9Ob0hBdmdTajZFWlh4NDNlMTRJSlh6S3pSM3FpU0N1eWx6VitDSVM4WnNtVkdDWUtrVmlXYTZyMU5aTUVOS1BzaGlmU2RCQlZ4WktkeG9MUzRYZXFPZ2hyZjZoTlRNWDhsK0doVk9OUGdhY2dRRnlQcWpjZHlHRmZWTDJzT1ZVS0R6Z1h2Yzc1MGluWDFOaDBRaEJMS3lyMGliUXBHZHpoTXNoRklTZ3RIQ1p4Mmp2Nm1ZRnRzV2xRVXp6ZVJLOFp5WTk4WThhdW4rVzdETWdKM2pnSUo2dnFRdUZSY2pqVWlzWVgxcEkrNGppWi9jTnk2Y1BZTzJBb0l3UjVUcXBkbDh3MEhJQVZ6V0lLWTBTcTFsay90YWlveDdPZzBhNVRJOWNUVkJQaHhrd1hkdlN6OE5VNjlTRmxWYWlVYWN0Q091eXh0bFV1RmVDc1NGWFJuMW44MmxVR2J4dk4yWmM3ZnJ0cnNQclg3S0UzTzdTSStZdS9zTnlFWmFnMDJGVU9rR2NBaHRsaXhDK20yOUdCSWNlWHdJMThpTGFTTGtsOEpQa2dYdTAxQWR5V0ZlTWN5a21iSzhkKzJoTTErQWZjY0RuK3Y2VDFxdnRiL0FoZzdYM2FkMUE1RS9SNlBaMjNDSEhTUkw5S1NjQ1VHWEYva0RIdFB3eWFkWU12dWhVSXFKU2pNeHpNZ1ZqUStxdGh2eXFRdzNQOFpPWDRkNUpkdjB1ek1LcUVkeHdGMUkwRThLUWdSQ1BVQ2YydGlzZUhjbW9zbVFhWURKWFZpRE85Q1lGYW9Ma2h5ZWdlRW1lYldvRlpZTXUzOVNLY0NITUw2dHNuakhBNmpvQlVqTjIyb3dXa2RjcVlwZTlqYytCMVNjb1JCM3A0VS9PK25pMVNtZkpSSmpnN1NZQ01oaW9tdnJVaXovVUcvek9Va0tKZVdUWUFPck1Pa1Z0MzgweVJaSlQvaFJ1UFg1UnhNOFpjR2V0YVhvLzc5cFNFUmFNeUdIcWRvWEYwanc4MXJxVG83UkV3UGtnNTNUOGNhQXdzeEk0N1NKQ3hSYXdDMmJSSzBmWFMxOUdLc04yRU1uamJtVTJuaGRKNW91Q0NOM0N6bHQ4M0U5SHJIZ0tNVDhIR2k0L2dMbmwxYm81RWttblAvMW1MaGY3SjRTRXc2WXBvNU02V2hyNmJpc3gwTGlFTTFHYVJWRU9SSG9pNC9zUnBGRHdDRUtUMUw3MmxzODNUUkF1RWRVeUdYWmU0RlQyajJYdDR5R01GK2lSYmFaZFBMNzV6eEZIYUlPVjAxYjlPRDJCb3duOVQ5YWVZdkhhNnNsOWdzN1ZDbU4vYlk3WEkwL3JnMm9lKzNLdUVYRTRGeWxjaVlISndwOG0vcnlWS2JNU0hlMmhDOTkrb3R5QlJOR2pJZktCMzdzOFdwaVA3WmZFK0FNZUo3TEJKMFIvanE0c1QvMVM3VzhKakhtcGJubVFrMFRKZzNaVTBFaU1jZTRRcThWNHovYldhV09NNmJnVUg5aEMxNlh4YUh3R1FvaEhkNVhRa3FZL0pqR1dZUGlNblVFTEFjV0oyL25oUHJGbEs4R2hFVjdFYlBjVDQwbi82OXNwVFFmN1lGalpkWVZ3TXlBTXBtT2pUc3R0VUlBSjFHVTQ5b3psS2JRelNxU3Jsb2hJWUZPWHNUenhQdzFOWVdFcVdWeFBLcVNpSS9EYy83SFdpMHd2ZGtkZURSUnBOZG1RYlF5UllKZWlaQWM4M2x6aWQ4bFZka3R0dVRweHI5Nk9YYTU1RUZGWG9XMTZET2RIT29YNE9IZGxsTVlRRUNkK2JwaFJXdkFwbjdmTnJTbWRKZFpBRENxVzRFYURmbi8yQ0g3R1V0RXZ2aFY3OFNXclVpa3ZKTFBUTkZaUTJ6eWhPSWttKzFTTEV3UldIQUpxdFFLTUJUcTN6Rms3M3pWVXR5L1VwOUZhK3dpQmY3Tm5VWDE3UmJDWUJiTnp4TDdYY2xRZkFlUVNLYklTWlFyT0hvcFc1b25QR256Q2dRVmZROVZEQ2R1UjJ6RkYxU3MwTS9OSk1TMFh1ZDhvSm4xQVB0U2Z1eXhOWXlBRnBKazV0OEpCeVhOWGMvTU1jaFBQRzh2U3Q2VzJSYmJhYjhIR0tOUFQxbUhPaUs5M2ZVRXJTMXRaSXMzYjV2K0VJVDdwbFRjZDEzVVBTakI2czlha0JCdHp1bXgreEJaMnhlSnl1RDh6SjhCV2pHVGhqbjVzNHlMMmJrSWpFRGM4OU1uVnZHRlBBTEhlcGRMQ25jdWdGR1grOHdMZ2FVNVhhejhwVGxLTFhHSjU3c2ZlbG0zV3B1L0Nlc1luVkpmNzc4MVZGdXlwbTNaampRT0k0VCtVN0k2SHVOMFErTVJ2NXZteDV2LzEwV213ME1pM2Z6ZWRLeVVpS0pKdVVFdkJ3dllLTWV0dVUrc055UndBN0d4MUNTSmZDNlF1OHRBMGdEcUE0dExmbUN0aWhOV3dtNC9ZemZDdTZqQU50QlFSN1duRmJoSGp4QXJzKy9ZVVhZbEhFUUx6NEUxeTVsbUxhblpiRkE0cEtMa3FIVndTV3BsYmhRbmpQZTM3ZytxeWFCUks1Q1QrL01VVG0xRmR0YmN2alE4V29xSk1jdGtNeEljd1V1bmxkRXhIUXo2eTVzcytxRHVJSU53dTJnU3ZTM2RJRFVUUmpxY05Md2JIZUxMbFgyS04wbkZHaTlvVXlNelpZMVZ3QUd1NG4xLzhHRExEWHJTS1JFR1drajZxd2srUGl3dDBaWUQrQjI5M0o4bnBuQTZ0V2NRSmt3YjZ1UVM4cHRXNTdJeFNFRG9ycmZyNmFqWjVtUVg4OUdoNDhBelNzNkVpZjFnOTQ4VXpNczc2OVltZ25EZm05WFUwZVlBNTVJcnJ3SFVZODJSWnp5VzdUeCtvYVUwOTNrSkNQMEF1eThPTTUrRE02REZyRFhaR1JRL0RQVW9rVzc5bkpHVmhWTU91Q2plaEMwWGlhci9BYUhUQ3M4ZlBRSWFhQThsdmo0Q0MveFVvR2Z4UnRFNkhmd1ZXMmptUHNiL1A5ajVYWnROaytSQkdTaUJCQm9XYnVTVTNSKzZjUXY1bkZRc2F1cE5yQUV1Sm9YNXhvMzRNWitpL3JLUktwb3BVT25wZmUvZHZxcytLSmFNNTQrSktMZ3F2Vkl1aVlCNVBFREtRZEFUbTFoeWxpWE5jaXBDb1FHaElncDFHcE84SU0yMVB0aCswVzZ1c2ZDYmY1NjMvcDV2UXpVU2k4MDV2Vy9qTUF2ekZrMnpBSGRCcTVUb1RPdEV0REFrZnpwbldRR1kvZEpsdEM2cGd0VHo3NDNwRitiMWZTdmx0T1Q5d0ZnK3BmcHVkOFE5WDZSc3dSb0xoaWJRTlB2d2FXei94RWVjQ05RQ3d4OVQ1SkQ1Ylk4VFhRYisvb0dGd3BVZ1VaV2JKaFBlYURBNmhudmkvRWovTjU0L2MrQmVaRmwvOXRlQ1FRM0hFZ2NNTkdMeHRPMVRsY0swM3FpOENOWllXUUxhSG1FS1ltNk9EaEJmSEt4R0NtRTBwQ2o3UTdTMW42ZCtHZkkvNlNFalYwa0FqdUtOMUlYdC8vS2VWNnJ5dWdmVUhGT2RINWQvSGl1L005SER6TUN4SzRWQTBPbHBQWGVjRUlQUlh5V0dBSmtMRFFXc3lwcCtSb1VZeGl3Z0xjS084NEdlRzdtcVdJcmI4dDJQdE8yYjNpeFFYQTZ4WkpYU2hhSG9CdFFSd3plcFVlTXBYSS9RT1ZJUzQvN2srYVFEVW5pQkJaMGM0WVo5VENVb3cwNjFHTTRFUkZZbVNNSW83YmZqUHViZUFSMWtRdWJCZlVIL2k5RWN1dFkxN2VibW5KSkFiRWREcGFRQTJ3RFZTMGwrdXloN3AvdHlFMExiNS85T01CemFFOWZ1dWhVV05hZEFBdkQyanlpRjlBNU1IWU9JcU1TUUwrSHRoS3FlSUVqN0lDNTZhM0dYUlRtYk9pNmIvZW5zd0xmampndkpKTTJuaWQyMG1MeWtWeUxGdUFpWWJ6MU1PQXNabmZMK08waTNJUWcwUlErQ1U1M3NtblNrZG9IWGFzU2t4REJMbS9TWEdWNzBNN21HdWRjY25RRWVuM09SRjU5c3oxd0JXNG1WbkliWVhhYm5UTVJhV1ovV282bmhPOG43NTZpeUVuR1NuKzMzOGE1c1g5U2dPSVBDay9VWVpOSXVxQUJ6RmY2OWlTdG5iOGVrdVVzQjhPNDlFK2xGQ2Z5cDhlNE1pRDUrcGFkKzU0dDFYNk1Rb1NxNit4MDFMY2ZTVkNVZlZ5eEVXY0sxckFZNDI3MU5nZmoyOXFlZm1NMXpBb0I2NGdveFpIamNaWnlkbWxVWVBiMjFYU2kxYW5wQzdEWFRDTmpvbUttUk0wNWZOUkFlRlkzSERhemZUSlhXdE8xVVExdUYrNjY0ZDhEcmFCQyswc0N2a2J1N3p5ekR4VGIzMHBxb05qVEI0ODZXRjZzL2tPN2FiUWNENVByN3JXajRoZ2RkUGxGRGowZDFpNFltQ3NBREpMdU5nZVdDbEdxNnkzSVFNcHhUUE1uWFFZV0lYc3YrSXkyOCsvYkJqQXF6VE9DUmNjck4zaEZla3prV3ZzbDFmbytZK05MNWFBTC9BeXJJRnBVZXZmaktrOTVXVXZ0ZFp6d3JudDVqRTR5MWRHUHZQUzdKSEREMGZ2TS9jdW5qT21vSVp0NXJ6NVdleThQRSt4Q2IvUW1jUlZJRjJkQlBUVU8vSWtTVmVxalJEQTgxZU84MFFmcDNiWS9hdGE2cXZRV1Uzd3Q1OG13bXVZZm5jYVBYamptNk15dWNzOWlkc3VzaitpZVBta2FlL1pqRFQrbzhtNjZndy9wbW15RUxEWHpST0ZJUkx5TEtueHpjcE4rRGRyWDRkN3pRSk5xYmUzclU4aUFMbUFrUUJ0ZUZVdHlkRkNzY1F1cUJuUXZrT0xXbjlocXRxZkdzRWhWd05XVHl4UVpOUGVlVUNDam96cWkxRURKK1VTTml3aXI0TXVHakdUb25BZ3JZcDdldFJoRHVmM3RUL3FTSHo3UGdweEU1RzdybnIyOHJGUFBER1kxeHpSd081NGthaEF5UnlGMkRJWEdQWWo4d2I2UCtxNUxoZXNBellpYkFuUGpFUXYvVDJ3RFVOL3VtbVFoemV6RnJNRXpBRG1UYjlmbys2aU9BOTd4b2FzblM4YXh4aFE5QzU0TnJDb0Q4SVpxaGtyWDhMTGl0alY5TmtZL2xYMm9DWmJrQVRpeDJLMXB1UlRCNGVzNDJhK0swU05SQkYwZFhKMkV3UUJlelVpMEhLRng1eG9yQUZPNDlFOS8xeUJRc3pFelQzdVRVSTQrOHhXdVFOWVpUeXFycmNKUmhHaGt2Vjd2VXFMWHZvOStSb1JORlM4QnVWY0lxME5kWDF6dmJYY3ZKVGZtMEYrRjVlODZUdnpsNml4bzdCVThLZWREQmZxczZLVlVFMmhQeW16TVQ4SVpycmxDMnoxbG9sb1UzejNyZy96NTBHVENFM1B4bU1YY1A5LzB2VDJOZjQ2ajVTQytBR00vWDdab2xwWEpqYkRLOTZGQ3BFT2hOR2FMOUduYWI3UXNGenBLWjZzU2M3dXhTOVlGZ1FEcUFuZTgvbmlyNkUxM3FVZStBUnc2Mzloem9ZRjAyeXh5M0hLSWpSdG55dzE3RHUxcERMRHB3OU42bXFGV0NXS04rWGx0MWpaelFFdjJTbEhacVI0bWxKekc2N055Z3h6THBVUlRTWURPWmppZU5wdmNERFlpRnR2M0xWTFBpMUVMdWxGVHVmaFBJZHF1dkx4aStaR1NET090OHhMZTdML0NxQ29HZmRRN0xXOFJ2SEZuZnhSOWlHV2pWQVROVTYwZHZtendjMWxvQ3VEZUsvTWM4cnY4QzFnVTJOdGk2TmFuSC9WRTRoc3gwQVRUMFJwSExyS00yZ3M1S1FmT0taYVhwQjJOR3N6YnBjME9xU0lvbng0bXRPRTg0cEJ6T2VQSC92VnNYcnpVM3lFVGRER2t0S3VmQjU5T0hkb3hSL3ZUYnRUQVQ4YTBTaXkxY3E1aXUxNHhzaURsZjFhWEdZc05JdUVNdmtJWjFRMTBEcHdRRDdzLzNJMy8xMW5rczFXcmlTOXVxVEg0cmI0dHNIWktDQ1B1Y0p5NnFzOTNsazdkNHdNZzBBT2JrUnpmTjJvQVVrNVJkQUJXTHE2eXBDb2hlWHNZWVk2M2NEQnFIM0JJZFVsSmx0NzI4eElBeXFmbmQ3dkNXUHY2RWJsOStvRGFlZ1lmKzdlTVE5Rm41dHNHMGkyb2ZGb0U3R3hNcFJLUFVIcE05djB6NnQyME1aUnN1ckg0Q1NJNmlPeTNmOE1DVE8zcEcxVVI2R000NFpYaWxtVlhuU2JSOFAzc2d1bmdIczNWRjNQVnN4WXMyRFpWUnZsKzk0cmR6QWlneEJybWR2d0N1K0FpMWhTRUpQV05raU9BT3BVd1FpWGVpa0VsWG1rYTZBemVzMXAyczV3NUY3QUN5bGhpS1VjU2RKK1IvWVlzcUtZZlhOaGJPTGxqL0EvKzZMRjl5RFhDdzZSVmFoL2dhRi9NNlRhUTd3U2hOQmgxTUg4YWV6cGdpb3hwcm5mbVNWRDdWZU5USlZXSU9tRzVCT0JLK1dDanEzOWF1YzZ1TjdZK2trQkp2dnVQdk9KMFFqU0lyWm93akt6aVdQaE1yY3BYLytBdXpib0hVdmxJQjZDeExJVzdFYnh2ZEljbHhQSjhNTUdzdDc1VTFTRm5lSG4wOXBucmF2c1hzT3FDS1BSMnE2bk5UZlh0aXJoQmhudjlyUVM1SXNXWVZBNm5pZmNLaitGWUtCcXk0bC8vT2NwZzdzMEtyUGVaU0w4TkRHZG15QmVvdGRKLzBFNTdiUXZiVi8wU2lEeVFKQUhOZUoyMXhTckxzdTBPOHlMbWE0dWE0ckhPTjEyc3NNM2JjSHJyRjRTKzVtdVQwTzRYWUhobUMxemlmb3lzNS9SQnJjZW5WcVV3d3ZESHpTcDN1TWlqdElCZHE2RHJQY0l1TjBKR0FLTFZEZGNQKzF5UUxiRC9PWk9zTENkU0pjQitnWTZXTlFkSDBoYUVESk5DSjg4dUN5b052NStPOEMrSStNblZpNXB1T294dGl5VEN1QW1PTk5zRFlXakpBWGlYQ2lTVXhXVHI3VE5hZ3poZGpuaVltYjV0cVNpc2RKNnZVTlhGYStJcnhUOU1PYWg4eC9hZzc5ci9abUF5cDNjWUVtcWhxeFZEcUQ1M2l5S1pyanB3N3pUVFdMUXlITlR1RGozOFUvSC9JaXZTN1FEbURKVHBLaFdnOVZVL1Z2Wno0a0ljdW1QSTNvd0s3STRMNmdsNGh3V0Nobk9SZDhsKytEWDFwRDR3Y3Q2a28wWW9hTGJiK25mK0IwOTZHZkJHcUMzZDlxYlBxU3dXWncyT09qdzI4K2ZIbTkyVnBuOFBOdXFsb25xVThVT2p6UHh0cERlRS94dW85TzRHT3Y2VzRBV2grV2thZWF3M1A1MVpyeEczeXJBNno4cGY2VitnVEErWDl3YS9kRlAyL0pOWXkvcmRJQ2VMSXRZc2pZZFpBQSs0SWxPbTFMYUUrTEFpak5NWGliQk5jbm5Sc3djQ3FISjRVbUVOQlBhNDNIM3Qwa2JmVkF4dGI2RU8wRmV3dGhPWnhpSmo5TDk5RkZvT0VxK3ZJY2x1NmR0YWlOdVlYbUl4NkxUNERzaGlONWVLQ3ZYSCtEK0MxOXVmSHk2QlFZRWFFbEQzZnk3eGg5MmgrdEVBVjd5VHdhZTJJZHVVaTh6dm1GMUFYR1dhNHZGeGl5N0NHRXNHaVJobjlIemlYV0ExS3NUK3JadGJaUE5ydmZiWEZTb3RzUXJ6SlMxcWhKaVpGL0REalVxSVBGTWlDMmxpSkFQYWxBVzRwdVoyYmlBbW5iZjIzNDg3VUc2eUUzT2dBZjh5N01WbHBoOWRKYjhMQTZ3ZW9ZZzhneWpuc2h1empNMzJtUWUxT2Z0azRabDVCZFNqTC9LRDEzeWZtc0NVQzA4Z3ppODkrNkFTeE8xVS9FeW1RSThzdnorWDB0RGpsOEdxR0RFRjdaMkVheGJObnpCeU1BemxlUkgvd1lTbFE4YzNkQ01UbE5SWWk2NTNibTUwd2d3Sm9wUml3WEh3N212U1VLdVRDaW9waTl5U0Vwakc0YmpPNjhNbG90eEx1MjI4Z0ZtY1VBRVZzTHIxTXk0bVhpTTVDc0FXOGFXOUM3UW5IRUs0aGFNY2F1K1ROY0Vtb3pxcUVHei9pdEFmQkI4M2Q0VnQzVkhCRkZnV0JpYmhVMGlsRm01OEZ5ajllRnR0Vnd6S0Ixb010QzA0UWdhK016aU9jbFY1aWxSVFphb2w1dzExSXFPeWpLNEo0TFNodUdNRGJYQnlXNmR0c2JCZ3hwelgrYStuM2V3L3FPUVZJZnFROVQ1bHNhVFhwTFlRWXZoLzFtVUszVGRuTlVSMTBNVTVVd1g4UFFQUnBlU3Q2dTAyQ0NxekFLUWdYTzNXMWRxNXdtWWI3YnFCSG1lNU93LzZRdmVZelVlcFdWdlYySyt0bTVHYlIyTjJqT1FXbUpPQk1KS0xGYzBCVEpjYXRxa3dCU3ZkY2ZuN2dtY0xZd3ZqejNxV0g5ZW9wcmMvR2lZVnZBVjYvYlpjR2JQajdpcWI1ZDJKRE5aTk4yWTc5bjJ1QmtZdVl2MDU1TUFoRmIxYTdaSHYxbzFBaGZoR0ljV2hkbWlZeFMxdy9ReWJYd3RCVnRPKzgvcVVXcmdKbEUyODJXVGFtMmU1SzZDZzBZbmIxMGwzb1ZubTgvdmx0SHVMMUM5Q3hreUl0akYzUGE3ODhYYlFTVGNTUEh3Qi9HSXMyK05aTGlnaUtoVTdxUzZXQW53b0o0WVVuNVlEZ01kSnhqbksyemFncXE5QUpzdndTb1htN2NXYll1b3FRSVdKWS9rZmtybmM2OXNJWG44dlJ2ZDlLTkl1NGdONVphUXlFaTBSMmR4algxdlJacUFXc1JqWUhlQXdNWGhINjdWQjk4ZkgrOW85eTZXUDM4c000WDdjZ3AzS1REZ0d6M202QjBWTEF3Q2NneEM2eFZsdUpwMW01dVFxYmppT3c5cEhJSncwK2duQ1lVZHJQVC9kWUI3dHpxV1gya2J4Y2VaU2FPaGdJTGZSQ1QxNFM3OThjQktmeTRoNEVra05BaGZVTURhYUdtbHpUTkpIRFVwWGVRUEc5T1dzdGZMdElqOXJUZ0ZhemxrSm1pUGNEK0Z1ME5yR0hyaDBjNERUVkhMQ3pCVHQxeDNGbllkcnBVRTlZZWJhdjZmbXFpcFg3RWFlM3U4ZTdLbEdjV3Q0czk4alR0aHpZYUhCaXJnWk0xUG9YNjJXK00yaXUwR0ZWbkVlbnh2dzFBVU03eDhXYnJhTW1pM2V0dWNEVThubWVHcVBlTjgxZk1QR0d0K256aUtKZ1ZNcFVCdmN3TmtpaVhNOWZYU3Nwa3hBclVWZlAzN0lxWmRkZ0trTkJza21FSFZDb05va3BhbjREUDhES3lUMS84Uno4VjljTjZTb2lhbU5TS2tWcGs4Z1B3N2dKSllscllpQTlreWswWVZwQVFNNzJKelduTUYrQ0ZLaXdqb0xYcTlKQkpIZVRmdHE0QXM3YnhpaW1uL0hKbVYwQzA0NnZtS2I5VWl1Y2VJYU5Ddm53SHlvSHR2QVEzNFBRbTBnNDhLVkJzaDhMbHpFSG4zMDJLVkxVMFpaQWhFaWZXQy9uSnNSMDZ2NDltU05Na3hIdXU5L0RqYmVYWC9iQW5CK3NORFZ5UFNwOHRheUtKaWtkcHpMaDY4WGpNcnlNdkM5Y1JVUHF2cGozclhrekk5U3RBSVdKRmxLNWdiMXBITDBrQW9mcFJidmx4L0s0TjczRkJwL1R1RkdFTlNydko1NXBMZEtrZE9FZVkvd0lzZGV3N2hRbHk0cFFwNTh3TGpBR1FFaGs2Vko1NGVHcG5lSDhLV0F4SHFDNHdXNktwbkdJMjR6emdWOUhwenNkc0h5VVNwODVZRFYyWldBSzVqY1ZGdXhpeWJLRmlvaC82QWtTYXNyTmVLVVhDQ01xY1hWWE1vOWdjVUh6NEt4eDhaM3FxaVZxQWMzVy9MODB2Qi9JaXJ3UzIzQ1JqVzhwNGo5eXhJWFNuVlVLZUNGaDVOaGlaeTJqZkNwaGptTXRRd2V2ejJrRkJJRnp1MFd5Q2ZWaENmMkpIaDJoSEU1d3ZoYzdnbHFhWHpPd3J4WlZtSmpVMUViWXNpWFF2VW5DeElKcXVVU1R5UFpPR2toMHVrbDVxZUhLZUpDUDhwN3ZjeFN6VXI0ZW5vT0hoRlFFRk9WaUN2dVBGaXMydUg0Ri9VcHE0Q1NpWFZ0TVVZdGpwbS8zcUJVbFYwaXFLMmR5K3FFZVhTV2Z6c2JHdmVBU3RaSG8yek4vdFpTZDlHTkNMTXluNW1VQkNabEtZei9XVlJVOFA3T1B2dGZBRjI2dTlHMVpkd2ZYNzkrV1EvNTBROUFnTzVkSG5lamdhNXRPck9DQm5XOUFuYVpFVFpJdnAvbUpPMGJaQi9yalNGaWgwSE9aeDljdXBqd1h0TndCbVBadVQzR1pjSjFFYmdWN2R0YUtjc24xWXAxT1JyNnNhZUdSM3NCcFhRVmZlVkJDVG50K2prOHFuNFRKK2FBS3c4UmlUSFlxc0E2Q25nM3BwSzJaODQ3VmNkOEdrKzAyVk80QlV0aDYxOFpkMGVMVW90VTM0enVCOGZQOVc3amZmTEorM0pGNWtzNFNDNVZGbGVUKzJGNmppQmVqajh4KzhSbFN5OVVSejVqWmJUSDBDbHB6OVMwWGU5OGg4NUJ1ZjBTN1RaQTltZUNtYzFhZ0pSSFp0QVQydWJuUjFJRmRmaEZ0MVpMaU9lSVMzMk1jTk5YelV2YVBWMHlRRDUzVVVLL295eG9HdW4rbkRSVm5nVVM1WnJvc2tyZ3RkSElnOWtFdkVLcWI5TldTSWcrazdLc3BzZUNUVXh6a2h2WmhuNDUvakdJV3hQaWZLOENoYXliUml1NmN6ZndLR2kvSktBTVhUbm9ZTVA3eWNIL1BSdE50djFRYzdKa25McG40czVMVEd5RTkyNUpGY0NzMGlRWllhUEFoaWdCRDI3K016czBKVkk0ZnJSMEpLekJLQXNYY0grd21vaWxtRVgwL1lBdmlsRDBOYlJ0L0dnN0ZHMFdlMHZXdUxtSlcwRnJDanVxNGozNVQvMUh1czlxRFlWdDVRQVF0R0g0WG94cUNabldBY2I4ZEVud0JhZXAxaHA4NUp1eTdvVjRYL1RZNXYzN01wWXJyc0NtejJaZ0VJYWFqTnFhMlZRYytqNDc5T05XNEJNUkJOL3l4L2V6QkcvNWUvL1ZOeU9vNG5oL1Y3c2NENHltNEtmVEh1RjNTZ1ZmUy9ZaVpWbWc4dkRKY2Z1NDRlYWVyV0hJYnl1Z0FRcTluamh0ODRwZnFoc0M2YlJLRVBqOEdieTB6Ly9Hck1uck1nZlBGU2ZQTTl0U2JFWVNGU1I1Yk9ibXZkako4OTg0bjJ4cjI3OXZlVnVvRzQza0RxcU5tU3ZuTlFwTnVzUk4wSjVYdTFwOSswb0JqdCtYemVycVA4RExOeGNIbGdVa0NtTFRPRWQ4ZmwyMjZWZzd6bFRQN0Nqc3VldkYvZmh2UmtTcHk4dlFSbVQwSGswOHdCeUEyTkR4d2ZoZHAvSnQxNDN1NFdqSzNkZi93cHZTRVVZSWZZZFMwcHM1QWxERXAwaVRBQVdpNVhFeHdWOS9RS3RLb0FZTVZ6MDhHYlZJbWZ3amxjeFZnSDlESisvQjMxSzB1RjdNdDBVWHBmOGNNTHg3RWVzTjZyTVZJSHVtWXRGK2pqZ0tmOHBydFRGdnp5c1plejkrK0dsMnk3TEJGV2J0V0NwdDNMK09nNWxJZ3ZRWTAwQWZoV2pEbGhDV1VoM3lZandoeDdaaHBETmVBSnJhbGpwOW9aRjUwZGl0bHVYeFpsNGh6SndiN0dZdlNtbFhhMmZKS2JVby91c0xiNkxSdEdiY2RrbXpud0cvdHJHcEZSVStPTGplUUFSVWpOeGhwTG5SckZWSG1tZFdFb0F1K0NLR3BKSEFmellYQWh4bHdWSzlNV29nU1hiMHJDQVBBMVl4ak1Rekd4VUZaNllUbkVrSzF5SDAxY1NGVHhNVHdKZERDWGhQYzJsTjIybVpZcllVZ1pjSGcwYzRjYWU2WXlSdlZ1UHlpOTVVcllDOTFnN3lYZjZvMXFpMnVqaHNHTkpMU3FzSTNlUHA0a08rMDZJWXorWktlN29rRUhjNUdlQW55Ty80OXRKdlNIa2drQ094V1VQY08vUUpaRHlKSnlsRmhIVUlmSEFMYmVFMnhXdnBTRDhDelNwSEpiSVRwZGZ6RnI1QWNxNWhJamkxeGhkSDFSZnl5MzFXeE5CR28xcWVQZHl2Q2VNaisvOFBtSHNaQ3cwVTBrRnk1TThWRS9vVUpYWjB4aGw2MVE4N0dEajhmM2MyeHkzcjFzWnkvWkJ2TG5NcUN0OXZvekhxVW9CcDZCTnUvbGR2V3p3MWwzdTV2YXBiNWlTNmFnU0RqcmFxOXhyTEp6Wjc1WW83SUJBdU8zb2huRFlwWlJjOXVPMnh4bnRqZE5rTktFbzZVWFRKa05paUxIeHZmMWdMcXllZ3VTZWd1ZXYrQXQyc1RydjJ0N0lTQWFKaTRwUXlONkFOT1ZTUVRRajNNaEpTWVF6a0tiNFRMTlBVTE9CaFgyVWpmMFgyU2JPcHpGOHFyU2dqbVFnY3lEeitpNnRrT056bXZRL1NUNnh2SkdHMHdYZGlDMFU1WHV5WnZHT2d3aE8rMlQ2SW9hYWNKOHF1MzhUWE9pTHZ1b284SlNIUnROTGRueWFXNmFZSTNObHg4WU9XVGdTcllLb2VXTTdRUGtObFVIbTZtM2hvRXV4UkN5WVlWdEoyQlBmWlE0UEp1OUJxTnFmRGVTQVZobEhBSGFucmttZlFUN0d0SHpENHFRRFRZcThFWnEzWnVHclVaRG5nQTRKbEQzYWNUUExNcFdkSm13Y1dBcHVON1RHb0tHQ0dRNnZWZUxTVzVFZEZLUExHTnpscUtoenk2Tk1GTlJ5ejRkQlVyRHh0MEduWDc5V1VBZEhlUllqUC9GTmFydGlodVpQVU1zcnhmd3NFWERvMjc1WFF4V0ljSm0vWHlFUEV4VFkxeGhVNXZUUnlQSmFXVHBPSXVzY2x4UlhMM25GaHpiTzJYYXRIM3hTT0xPdWFlWkZ4SVBidi9tYXFPaGlxK1hmRVVMYTlNVmZjUW1xTGxQSFdBRHFnR052YnJtaDZYaS90NFVIdlZKY3pKNGFOQXA1RXVpNERQcElRUU5sZEFIL0VEZHBvbC9kRUFsb3NQZHdnTG1GallSdWJwaTRYbEdYZFJraG1oL052ODV3WHR0U1BaYW9SemxnY3EyTlhPOU9nY05DMXJtbjZLajRrdWE3Zlg4elhIbjN0SE84VjhGaTdySG5udWpHZmk5aGUvWXdONUpuUjJhUlZUaUl3Rmk4KzZpQ1pKUEl1SWUzbkZzSXRzY0hSNmZiNyt3bzZsMTFyNG1Mdi9aeDdPalBRMWRTM3lGUzVKQkYyMkZxVWxUNjc5VkEzQktFSER1dWExQVVlN290RlZxd21adng0a0dJZkNhc2dUVVVDOFlqQWhhY1o0NWp4Z3Z0UEw3MVFpTmdJeVlsY3VIbzhoZzArK1UyamJwb1pWbUQwVlFqcDcweDJpVGtWT0ZnaTkrT2gwWFFjWFlJalU0N1BMR0dNdGpKRGxFK2phbzhRcTVDTVdGbmo1dDhheHMxZmlOTmZJMlhlbTN1SG1BK25EVHduZWNmN09ONExGM3ZDL2NldmtWRmZEeVprRldnZDk5VW1BcFBvSWJpd1lIeTVHTGpndS9jRmp0Y2hyYTZxaXVGdFY0bDVOcDdnZXJpTmw5MTA2SCtYQ1pqM3lVa1ArNHdMVUNnd3AzeVFaR3NHOGVZWkZaT25KTjJyZ0dvV25hNDNUZEFPUUtjbE5iUi92M1RMVUFzNkgxTEtscjVYYi9TQUQyK05mVEc1cDNGZlBjdjNHdFpybHJmd3VkWURkL1A0Q1NGK0pyWlBVRHMya05BMzhrb0NiUGlFYjg1WUlkbHZYcFlLNUUrVmpvNy95OWRNWWkwYWh2VjVMb3FLY1JsRW4rWk1RYnl5dkF4U2VJeGRDUUtMcENQbWg2dklENWpsT293ZS9HMXliNm5RU29STUt6cFhtV0lNOTZLek40eFRhMmF2MWsxeVVoT3BUc0wyYzczRkhtQnQ0U3RJb0xqNitkeUF5MDIvM3dWY1ljQWZDdm1aSWE0enFmZzk4L3FwTjd4aDcyTkNaZ2VnUTBsa1NQSjlXbTlqK2dQbE81T1RJTFZJMzFqaHVCTmNHdWtWMSsrbWtOMUpIcWhRZDcrUitlN0M4dHd6WnNKNEMwZEdsMnc4aTN1aUtlVjR3WUZVcUU2bFlWZDVTWCtzcURVV0t3Wk1YVzVQS20wQlNUMXpENW1rNzdtRnhSM0FqQzFuNUpPVm1VUEMwZTFYL3FaM2RIZ1Bta0NaRXA0eDFBeE1ueHBZT09iQWxZZVk3aWJHOWxSNVdhL1ZXNzJNcHhVYUlxaFRiaHY0U1Y3S1lwUDVpaXIxL2dUWUIxUVJqcXg3MkNCZGZpMTlxd3J2T0FpZ0ZKVTRwZXowcm1KYlJZN01NSUpndUlxekErcE9JS0VQOXlXdnB2aGlsUkVzYm5DcFRCZFRxZ2ZIRmk2RVp0NVJidXNrelFyaEp2cUJITGwzYWdxL1J0akljMmlyOGlkbVpaMTM0VDVtNEdZVFYrdmxlbStvRkVsMTJoNHJvMUxpTDFPNjdQcTVvVkRZdFFRUWJQcGVLWi9xV2I5aEJDSkNrdUlzQkQ5MDBtTUNqT3dXVUROVzZjUlJ3T1JaRC9XRjV3NjV4OEhUS3hPUXAycDU1SEhkMDViMkxjbjlBejlDL0pRNTl2RUtYWWM3OGhUUkhUcUFscER3eitNZGEzdStqRktOUUNNZDNuV05UcUxRVk1vNFVTT1BkdFM3UGR3dlNnTTJuc1ZXNDZlMDFzNTNBL29YRTJ2ajlIcmZxRE52SWlSRDUrTjZZcVpQNHJpZ056bi9OaXI2WllZRU5zSUxweFhFYmpZTml6RXBEcytWWERldWd4R2l5aC9iR3p1SDlNbWx6d25mZEdmbFR4bE96eVFnMGpTZURoVzQzdUluSVZkenpNT3M0Z2NXRDJQWldCcDIyOWRVTm9WTFJwU0laVjBITzRLbnBKQkF6UXBXblBBb2ZOZUxPOXVXTVdIYVlpQ1ZVTlZyU3luT2swS2RmUURJSlBIWnNWSEJhZXFDb0k4YWt2RWF4bTBNUmxsSjBPVnhOVUNDbUpqZ3BQd3BwVVdyVmVURHdkRXpQOU1GMkZPZmVrTTA4ZllidzNXTTkzZkxVMkdxaGVoV1FSQjhJOXVDbjdIYWFlOUhrTVpBZURENDNyMjdRcjZ2M1RSVVRBd1FkekUxRFlHUmNRa1RYUEVOcHZwOFYwY2FnYUY5dWk0QngzdEM2VFJ0RUFpN0h1b0RabXdlK1UrTVQzdFdqT1VxS1V3YUFtRWNTZG41RHdGVlViUnNqUjVidVlXYkdiMGxmb1BpVUM4WEVjaml1cmpJaTdMZDc5RS9tRDAydDRldE9BMHUxdGU5MXR4SVBXY2M5Uk5HQkNTbXJDYlFBT241andzUnRoSHBqNjlOVm9rM3NPcTFKT2hqdVNlSjFRNHE0L1pmNkpKS3QrTWkxL1hLdlBzZFlHVkRGWmtlRnJZcVl0bDVGZ0VsU09MYnBlbzBzMmo0RkRwQTlmZDhwNnI1NHBMOWpad3E5ZzhEWnNmeVdTMHI0em1KVm1zU1NKVyttQkZQRHJkeXhyeFNXUTEzaGh0RXNzbTV0QTViRjB6MVdrSUJ3L2ZzL3h2NE03d3NLOFpxVG42RDIvbzdjWkNqUFEzOGltTE9BbkVSMC9qZlBwRzE2TU9sdytkOWw0cXp6aExBeHFHZWFPTTlITTlhaGg4RTdyanBTYTBaVlk1TUl2dEg4SllDLzl5aXp6NE92U29Ob1FlWVJSZEcvQlJhTUFpeVdxL3lqb2tSRXVMWnZjcnhyUWN3SXFYYmVMMDhMTXBlYjlabmYrSGJpTnZ6OTB1UWN3ZElWaVdrNnN4dzNGY3BaUWUrandQNWVsRGVHL3h3NUxzWFU4Ykk3QTQxb2hpSFIyY1RYOUpUTnZvR3hMRDlGejM4UGZqQ1Q1TVAvVTFzL1dTaUEwektLTU8vVlB4RlB3Z1RsN1g4SEFrdnpibmxlS2lrbGY3VEt3TzY3by85RS83TVFsNGMyWldXVkRDY01kekN2OVJEcUFHcjIxaUlSQllsTGxPYVRndERzVE95dTdKR2EvcUJmSGFDalhVMjZDWHVRNHkwQ1IzZS84ZkNYVG40VU5KYUI0RnUyR3pFUFdZMFJGN3F0MkNLb1poNWtrSWpnU1FCcGxBcGp3S3UwUnNBRjBMZ3hZMm5VZU5ZOVdzQ1ljZWRrWkxlQXA3NS81d1B4NUZibVA2aWVEUFY1eVBoMzJZdzMyMDRoc0RuZUU5VTlNRmhsMTM0alVWRVIreHE5L0FZemNBMVlEK0Nmb010TUpCTExJclN0dkU4K2dpK0M5TlFUOSsxYUJ0S1pWMk1UWndVU21NcXl4Q0gvaXhsck5qZDJzM2NkOGFLcUNZa2Y2b2k5cTBGUU9lUDVpMnROT3pLendVS1dUYkVsUXdqVzB2QldDUnZvOUYrSlU4ZUpmMzZUUE8zeTdzZ0FKVGFQVloxUjJZcUMrWlAySG4zamFobzdRdHJYZEo0WmtqcTdFenVVN094OTZCamQ1L0JIUy9ZQmM1bFFHUTlHdCtxZEtvRGtkVDdrRDcrU014WituWnkvUjI0aUEvTlVzTUtXQnpvR1R3YjJFdlZIV1BLVUZiekdjMjNmN3pLR1M2emlnQVp0QTRuclRmSHF0WnFXZlU5NGUwaVA5dGhoS1lrazhIWlhnL3RNbjZzMmFPOExxSVdxaGpJUm5kMHNyZXppSWVjUnhpb3NsQ2FBdENtcVc2SUFtaGc1bnc3TE9MTHlRK2V1MjY4ZVJiVGJNaVdteEtZOU1FNWZEVUh5NytWVXZ0OElKRkYzRFEwOUo1aFN2Vk81ZU9pTFM4RjhRNU9jTnFHYWJCUTN3SXlwL3p6T1FZVEx2allqK3hJU3p4SlN3a0FHRERHUnFvWmJDcnBoMVgyMFhEZ0d0c21oN1lHbStKVHd3MzJrSjlxRk1zNUU0ZGRiTGlLUGtFbXNXbnIxbFdRSnhWR2h2Ujg0R2JwN1BqUnd1NGFGb2JhZm43UUpPa2J2eVp3UDd6ZUErYXVuUisxZjlZUGdBeFRXSE5KbzRidG1GemVlTzYzNmx3bGhGeWxiVktLcWY5RFJWUzAyZVEvTVFBMnBUc1F6TnZxZU56NHcxL1RaUW9VV3dnNk8xcnkzc1FsRGxRaFVrczgwYy8rZ3NGR21RVGFoUXRrU1doL2VEWmhXWUZVYVBkdDFFUTBNK1UwSkRicTVaelk1dFJsdzI5d0xUYjJvQlRTeG4rS3dMZDVTTklSRnlua01BVzl6Rko1ck5GZjY1MDhmOGR1N09QTitsNDY2dVFRWUthd1VzOXpwM0Y3TWpjc3puN3lITTRnbWVwSXRVZHl6V3dmdVZhcnFYL0lBZ3I5d2VyNWRKdW85blg3ckZKU2hyejZDNzN4V2diYzFlbGlJYzBqb2o1RjBYV09VQnlWS2lJWjhTRm1XbFpyR3ZZZmZBTC9QdXhNaVpXYjN1bHFwcDVEb3AvbXE5STFGdU9HVTBuNElEc250VTczME0wRVRWcXAvcEdHQlNza2p5bDFRK3Vta3ltNWNyVDVSckhCWDdIa3hGeEZQQm4xN2t5VDFKK253TXpQNFZ2YXpsNkYwcUptbThWOVRlaXFzMzhMb2Rjdyt4cWYxeld2b3BjZ0RsUmN3by9mS0FPTytWSFkxbXJtYy81SnlWMG1SRVRRWms0aVZjTk1ETTBhaGJWVVRnQ2RnczBtMmxZOFh6bkNPMmFGSzRoWEhPRVcyVHNFWlpvUDA0Q0ZNVzNjRUpUbnR0cFlHK1NHWDFQTXpqUjZxMmVaZzVaenp1b2xJOGdvMU9CVnhZNHJHSngvemE1MnR3ZndhVkdVODZUVC9Obll4RlFMYkR5N3BJcVhpTXkwMnhTdVVUb09vTGxEbmR2L0haQXR5TFg2R21IVUpxREFNTldVeTUzUGZFRmFVeFJMLzE5a0E0YXBUQ3cwSUlmRjRMN3diRDZSaEZ0TzRhK2VYNHF3TXNucVRPTTJBY3FETFVycml0YlpBbUZ3VTZoZU96OUNzWjZyNnhjVytCdzV4bkx4ZFkvN0JQSndpTXB4bExYaHAwN096QVRiSDduVzVZNU1sUmVwSzBOY1hBTnZIbkhlQldRWUduRkdYeGlTVGJROHdWK1JBb2tuL2h3RkZBZHdZZkxoVnZLOW5xa1cvRVR3Vll0Y1h3NXM0QXp1YTMwaHRNTGdobThWSmFZQkNacUhNZmJnZUxQbFhqN3NoUVpNbzBEeHdjcGVnaFF1dGV2MGIxUmp4ckhvWU9QY1NPL1JHRlBrMHlGSXhESmRJaHR0ZjN2QzFYRFpXaFdnb3BBR2xrbW90NUIrV3BnR0MrMzlzWGI4S2FvOXJ2V01FQUQwOTNGb0FsQmpyTGhVWWhOdEFYbm5ueGZqY1greURzcE1XRHE1ck5mejNSOEppbDIwZFZnRXBkUGdYOWVkYWRYL1lyYnVscXMxT1FxN1NTcUlBVTNSMXlSZVlISVhLbXVQUFd5SThpd2V5eFY3TG9kY2Qrd3Y1V2dVeG1jZXhYZmJYSTVLT1BtYmN1ZlJPM2FIMG1uMSt0NEoxc1NnMlMwOFBDanNkNXd2bCtGL0NnUmRZcyt3dVUvR2VXZEdXYnNMcktKSmlEc1BpWGxTeSsraXBtS2graDJJbFRMck9vbkR6MW11MDZBWndvZHRLWXQ3NngrUzdsbjBQS01yb1Z3M1RCQUYvUDNibkoyQkJUSnppcCtPOVFpQmxpd05vcWJWT0N1aDh1dHdDdm9FVjRqZDUwQk9XdlFUOWFGNmFHVWh0L3JHRVI4aGJCQ2ZxU1I4VzRWL3lzcXFhdTBmcDBVUmhLKzU1TWZDd0V5WVp4SDJKSVZMSndPNGN1Vm9IeWRZSE5qOUNrVUd0SHpKWGZsZ3ZmRE1wRTVBUm8wbExaRWtDSUpyNWlMVjRGMnRHMS9HRmJKalMyOWdFYXd1RFJPV3ZyMEp2a0drdkpJZmtmcWtEU1pyME04dXNLTS9zRHZGSSt3dEpFOUNORnBMekZ2ZTJKTm1PTVEyMVl1YjduMzRkYUQ4YzNHTmhQbW9xT0dLc2pZdW5pZm5RcTRTZCt0MkI4Q1VuSWZuTXZLWEFqYUwvYnU3ZzRRbGxWci9OWVVXeTdOSTh4NStLQUIxRFo4ZXFEQUh2dytkdHBudjNvY3V0RE1nYlM2N3B5VjY0cWQra0N5R0w4T0FhRmtKdUgxVzdLNE1qbVdWVWRSQmNod3dYQ2JBK0dWRmlnZmVZdm5mN2c0Z0k5dWVJZmcwMXVRVy9ZemlIU1ZYVEY2ZXEyc2RES2wrZmplcWtabTgvdnJCM0F4YnNrL3hRa25ieWhLWGtkRGsxQ3czLzM3VTRmRmM0Uy95RVBndHJIdmZMckpnRFVBeWEwWlJpNkJlZTdsektUOUlvQlVINlFqakc1LzBKRk05eVp2S1M2Slpsd01sazV4R1BDeUM1UFA3MTQwaGg5eFpobGkvSmVhR1VJeUg3RkZFV2ppNVdWMjBsM1RVZWovVEx3eFhVS1RNMlVVeDgyVHAzcTk2ZGpXeHVyQnp6ckVzSlVoRVJFY3lFbVljalNKQXRzbjUyd3RzeGo5T1J4QjI4cXFXdFg3S1ZlZk01WVgyRnRQT3lDUXBQcWxqRlVObXp0QzhkWVJGV01qTm1OZ2I5TTdHaGxkWWgvOWYwSmFYeDEyaE1ScDlBTFNJSWl4TDQ0bkVnK244UmtFOFE5MHpYczBoRmFVdGpQai90elZrV3pUWUdtNUF0aGphWDYvNlZVSlZTZ2J2a2NtdHNrSjlFdFZQOFY5YytKTFFEZHRtVWZNRnZQc1FLdlZmZW82ZktqeElwVXJ0eURodjZ5ZGFjdWkxV3lLM0pnRzVTUlB0U1pjd21mVFllL0c1ZkttbWJ6amx5d2RTRGJTRGlFNmVpRkRYK3gvTHhiTGI2S1NqMVNFY0dWWlFvSzh3RTZMZi9Na2RmamFZWVR5eW9VUkorTmhBa1U5TGtnbHNBWWVBekVIeWVWK29YeDUvMWNNQkZQczE4QWNLL3pPZGorRVp3TWdtQzNHVWFOeVFKN3A4ZS9lcE9VNU5USjBwNHByZDk1U3ZJUmlaVGtjQTNrbU5RVUxEaGpQTTRReEdUcjNlL2M1by9BNFJ3MnlRYStYRzVCaVZjMGFoOUo1SEtSUlZHaXhPNVNhT21JZFJ5QS9oUXlULzAzYWFxT2FSOVZIQjhnbE9LQ2FqOVF6RjY0VEhFVWxVOTJmZVdxTkJzVCtkODNaSjJZSnUxU3UxRU5rbm5qU2lXcTNGa3BaUjE0bGlKYnN4eGlydVlJemNpVEQxWElqUEh0MG9FS2N0ejgvd2sybVJrc1hpczJCSXBmMUYxSGtwR2dhMXcwWENPS2txSk9nUWF6aWZjdmpqYW1DenhpS2hpSEFmWDBxaitSTkc3YzVjMG94bXlKTm9pMDFCVDJRRDNJOTFHdE1ZVzZocnZzVi96VTl3QXBtS2NxaDE1R1dXczJKV0xqK3VUTTV5N011NlNFTGlCajhtSEIwMFFwNlYyeUtub1VKK25RelhNNEd6RjBnYjNMS1UzR1dhT05tdVp1MlB6M2pUUmNNMVdhcTgwTHM5dlY2OWhNalpjbjE2eitVRDhLeW5rVzN5ZTlON3ZMajZialNTRFZEVGlHQ3duQkVlWlJjQVphSVRiUVJibHBMSUd6TG1SWklPb0J1dnNoWGM0YnFwTVc4NnZocG9KVnh6Z3h0VWpPWXBLbVBoOXJZd0ZrdEtaWWNTdURKYXJYc2JlcnpUaUhHd0tDVkJZT0RyM0VNRVlreTFRL2owc2F1R2l6NzRPVXYwbC84Q3hBMWVLNmxjRkJNVzJYT21wTndMbGYwSndDa1hkT010Vk8zN29QVHYyVWJnU0taMElGNDdhRi9JVmhmRmdoNFhqd08rTnlxaXFwSG9saHAyL0RFNTY0N0ppazVTRkx2b1NnTUZXdkFqcXVrdWtud2xDZ04rUEl2aXd4UzdxbnlDTzgzSHp3K1hEcG5vOGx5RWhlc2xtdHdhcXl1aHdhL2RqWnM0OG1sdFJScFNkUEViaGMxTWlvbktFOFFjWWpYWTFCdk1paTRaMk45Sy9kNHpoVTUrTnVIWFF0YmZNR0ZiMGU3d3VzNXZkaVBLZGo3clJyYTRnZ2t3UHdLQW9za1dBeGZRN2I3bllRUmJMTmR4VWhZSHBKQ1BsdHJFWTgxYUR1cFhjZkZHYWJDemVPNllQS3ZXN0dFVFZQVkJRM2hDYlZ0RkdDUGE0cWwwSTlveHpCVXUwSHFXellFYVRLZjIrZTNNMHJEMFVsYU5oNmljSEhXbUJzbkZaS3hnd3hSZTgxemZ1aTFkVk8yYXZJcGd5M1NzV0kvT3BhTkNCaEU1TytWVHdkZVdRakYwcitiQWtMeTliUkFJaGQzK3VHdGJQaGJFb05peHo2OXNsam8zcFlvemo3R0UzNW51c2cyRVkrODJ3d2ZCVERXWThCSklLbTA4NU1MMHBsd3paNkFtRjk2L3FRWkgzWkZHQ2ZQV3B5eGx6WlFqRTlTa2dqVG1rbDV1My9ya2FwSkV0Z3Jkdm9FRnJHcVp5RXRiM2RoYU9rZDNielBmekR3ZUFsdE40emhZRm80RTJMSXlSS1VaKzhRUnlrY05pM20zdHFab2paUXZxRU5VUGl5dEdnTE9jdGt1MzBUQ2hENlpKc3dmZEJaa1JqS2tkSDBIK1FuckJVbDZrRERIa2RDa3ZIbld0c3kzL2ZPdkljWVVsb3diQWJkM05IcDRPRmRUb01KTk1wN3NSYmFvOVlJUVQ0ZWFORWd4bVd0TjdtblNEQThuQ0FldnNnOVA3eWRkVDNUWUhYYTdub24zRm5CYjc5eXA0bUFmbmJid243QzVKSGE4Rm0wL2xmQjJDR0dxSW95SytrRDBTdnZ0b0FYNDU4aFEzSTNyNDJ0K3RqRzkwZU9DUGk5anNIdEh1aWhTWXY4WUhmMTdnQ2pXY3lodk9aL09UVE1abUovNEc2dkdkTnZSTDhCOWdveFF5a1YvVXdNNWxoSmhrR0pxWGFYcWZ1OXBvbTFKR0w1N09HbkRxR2d3YVhPTE0wR1BoYnBMSmZsM1lPRUVMSGVzbW8vZXBwaXNsU21SdCtqMmphMWlpWURQWkQ1L0pYUisrcVlCM2pPODJ5NXF5Z1dhZjhxQjRYZWVlRzk5c3FiQ0d6WkpOTmo5WHB5dUpMVjMyMDVFQmR0dzRXSWNRSzlIVjlJSzhBY1pZVE5oSmJRVmJrRk5mTHNqZUwyTFRDR0cvb1RQTTBWbzJVa25CK3UzNnJjRUorMUhJL2hCUWJUVXcvRHF4ZVJ6YkxEcG8yQ05maTc3YnByNjRCbm5rVUdQdFZOaW9aWGRsaWFYUGhrY2h2MVVXQzFQb3NCRmhML0FoOW4vMGwzSVZpNm40cEcrRjh4bVpOTW00VC9jc1RJR1JSTDBCL3Z1LzdJL0NIcjJKWEZydmdKWGdPNTFJMXBXc0tCVjJIaU1SRXhYSlNHMnlnSmhMYWkzM3lON2VoL2VPanVveEt6cTBocUh0bmxzUEQzU0pFVE5QdDFZczljVU5MREZTdjVOeTMxVFFlSmN0Zm82bitmYVBBTUtEM25OTm03eVpYd3doZ2xPbW9Say9xWGI1R2tnSlA1Z1o1NVRZRmZwek9ETVpCZW9hMDB3MDB1WU4raDJUb0ZCOC9DK08rZTZVWGs2QTM5ZnJ3WjJUb281ekpjdW51ZGZWQ3lzclpCVjhzYnVrd2ozR2ZKWUtoT1gvRk9BRFdocGJScm9wUy81MFdkWGE3RUZjV25iMm5uTVFpdlpJRmIyUWNYWjNIOFJON2tsdWR6QzR0QW5mam1BdEFOOVpUVDRDdVJSK1NsamhtakxMcVFyKzdvNU9pbUxSTDZreFlrQWJYekQ4anBzRG1oU3F2MGQ1M2VtODRXOXBheWYrQjdBWDBvVUZnMHVxb0M2SHhReTN6RE5WdWhubGt2NEZRbDMwcTFsYmdITjNPSTZTV1pCUlNnY2k2YkEvZDJmcUVMN1dHaGJmMFhZeFFCUXJIMjdoUWtTa1hrbkNHVXNhS1RTYWl3TFhWNVl4TENyaVNCNHdrSXdBYTluZVl5MkZpWXp4T3lZcmhqbk8yWEh4M1Rid2ZpUVUzdUIrdGZXV3JPWkxsWmFabGdrZkRaSGUvL1V4MHJiKzZxNU5DQ2F3Y0JZcEYyTnhmVlZiV21SUGxWck1MRlZHbE9XdFNYTUtyTUUzUVU1WHRSSER3Ri9FODlINUJHYXJLa0NzVEs5RFNxSkdheDgxVjIxTUxkVGwzdmpzVGlqak10SG95aW8rMHlGVGV2aHBFSHVScWJseFJ3bi9taC8xZ1lzRFBXN09UZENWT0dmang2aTRLclNRZ0czSjFtSy9qQStwYmtMbUc2WkJZWWltNUJLSHNENnhQTUdyUmJLd0JQNHRna0lNR3JZY2RIK3ZGbi9wSWVjV2pPVWtjeHJ0NUxucXhqU3kxN1pOR2NvdkkxQVNEa0dQWXdwYXV2UkFodmp0ejB6cGJzeDJvRUVVS2lRRVZkRDQrSlVUV1Q1SHVyZFF0NTIyV0VrT3JVRDFBRGcrYmM0cU5sZmxMRTlnZnFROEhxT09lK1hlZFR0UlZvN2F5REtLbittN2VSTUtIWXFSL21aaXhmekxVNjhMQ3BPT3VMaTY4ZzYvUVNzdElUdms2VFpTQUdCVldrMVFMN09QOUV3SVJucW55ZFlWMEhqS3VMMHcrWDB2Vllkc3FwaURLcmNPdWEwRkZXQ2RvalpIaWRabnZzNGducXRsZ09XSUY2d0pYN2xkc05SbUZ6SXErNXZjQi84U0hCTkp0RFQvNjA5bFhZYk5wRTFPVDlCMTFRbjdBUUxtNWNKZzJhTHZZUjlqZVllTDFseW54WkhWSmlOVG9hdWV1azBZT3dCVjhub3F4aGVld1I3dWIybzdTTWpyU01hR2ZZVVpiUG5LSko0eFREelF5ZkdYTnNPTFhkSGU4Q1ZaK281ekxETmxUL2IwdUl4b0t3aDl2VmRLR3huNHF4ZDlpdTRTRlBvSHdLZjlnOHVDK3NCOEFiT1Y3NnE2cWJ5OVdwYmNyMFJvaVZaQ094Y2pZZ082VlhvbTZrRkIrbW13YVAvY29xenhFRnM2VGh4a0pSR1F5bFVBWWJRRXZ4L253TWN5b3psZVdIR004aHV4blBaMEwxc3puNmpOblJ5WlpRYU11THZBck9GRGNJdVBaY1Nub2hycWw5K3p3cDZhakxJTWR4bkJDcU1Rc0JPbnhOZ2Z6dmFCZ3djZkwxNFJ2aUEzTVFqRXUzUXA4M0ZyM3ZDRHZqODRJRHYzYUxDaFgxTWUxZE8raGhsODNkeWVaZFNJMEZma24wSkttNkxtL3ozcG1ndU1vNFoyUVFYTjJRaGtyaGVFRG1mcWZ6Wm51OEk0bjlPQUlNSGc1UTNzaDRtaFdUM0xGT0hRN0c4UlhtT1VCeko0SFN6L1VwWlZTeVp6Rko0bWlpbDBadkQ4S0J6RHBBemN0R2kvZW93Nk9RNDJqTzhGTGtzNWlhTjkzTE94bHdsczY0MXN5WGdTS2RheXFDU3dVWlNSVEdISmVwbjg0dGpZYm1ZL3I5Q0o2QlR0aDBOMGVGS3VFOVN6Mlc1YjYzWkRaNEUrUnh5WWlWd09TUGxuSnlpajJVZ2wxYWt3MzZFZjk0LzFKaXFLd1dUUG15c2grVDU5ZUFyc1FGN2x1UVdqRnBPb1FXbHcvVWl6MEgrT2ZPZGRiWFBDM3FHN05wV1d5eUpUaTYvaVhwTlBheHNJQWxPMG9tckUyQWRvSEFvL1JCMDVXMlNkUHVYdHJUR3hOelNwaWQ0Q2NGRXhER1ZFL1ZkSFp1S1J4VU4zZWtaYzRYS1d1VkVNSGZSNExqSC9LY3R3TVV3UDgvVTZiMWloV3lmMWgweVBvdXgwSVBaRjBVUFdrWVlMc2wxSlU1cFdpa0d5NUlJekw2OHpBOWpZYlhNTDY3czJ6TG9FN3Z2U2U3UXdYRzB3TlVreVRBV0hqa2Urek44NlRQR1pkZ3haRm9VZ3BYaVNBeHdHRTZaTGFNQWVwb1hEVE9zNU53WjR2QWpRZWtRT2I1NGpxOXcrRXl3Ymd3a0VpaVBxM1Zmb1MwWkNnQXJmc3BCbWtpYTlxSkJzdlRzS0lWcndSakx3N0xLWVhmNEE4VXF5dHFCQlROL0dZelBGVnZ3clE4Zk1qSWZhRFo4ek00a1NsakFIL3FrVUgxak1vU3F1cjczd1ZoSSsrZlYreER2alg0cmFhNEhpMzd1bGxTT2dnZUhJMXFweUxCNENuMFd2OFpnT1NiUkxSRXM0L0E0V0FqN3F5M053cUdSZ05ocGRUOHVZbStKRVgwSmY1ejFpTkhaVVMySGZmeXRQMjQ4VGdKeDRML1Q4U1lKL3ZuR2FZNVRRRkN2TDhKWjdmMzhWeEFhcFR6dVQvaW8xQnM4N1ZZZ2pZU1FldDRZbFpZY1NKSHVaWFJKVlhQalJNYmtRSXJpZFN6N1pKQjFEWGR3VVN6Q1RRNG1SSForV0pMVkV1R1Q0NHZDdWtPUmJFRngxKytPdUpLOEQyek0xMG42Sk9FMlJmVGtFSkw3Q2djU3AxTmIzeXExUEdRL2U5WnFFem4ySko2bjFZLzVCQkZRQzBHbW04WWF1bnkzQlVsblNQcjFLbTVEN2ZnTW5vWUwvdzZjQ2VHUFNHUklxUVhmS2x3Y2JhbGJVT2lZRVhxb2JOQkpoZm9WNGkvNXRGWEcwZm5ycWdUMm5SQ0tGcFgxNi9rYUFpeXZBYVJaSVcveVZBaXJxdU1FLzFtc2phS2pkTFc3WjNqRHRROVZBZTJOSDkxVmtwSUllNUxaa2x6NE1qeUV2Mk1vWGJmSER1VTUwZUMwc0xVeVRhWVMvY2NDS01DSlJJckVOSEE2THpmeG1pVTNBbTVmZ1YzY0F5bGdtNEh2bHdseWw2dDBHMmVpak1OajVYOW1MdW9XRUFpQXQreE1UM2k5MXhvazJnS3RoQ2N6dUdTWDBhbnRXMkc1SVNtZEMvNGxkc1NpZ2U1NUxBNDBON2ZwWHFxQy83ZzFiRi9PMFhCMVN6b0NPV1I4RzE1NXhaQnBaWG5EZkJVelVmYzBpZVlTbFQ2NTJ1VkNDd0U3cmNMSUlEc21Ed1JzMW5uOFk3cTljbDdmemMvdEh3M1NHeGFSbk5HWFlZOGxEWFB4SHYxN05ydFc4bDZzTkJjK0lCOTFIYXVkY3hQTEkrNks3RW9YTDM5ZUhMbzk5akREbTEySjhGa0JrU3NjTzVrSUh5Ni92bHFqd0YzemFFUHo1T1NENDdKZTZCMVY3NnJ1QUdSeXMvVS9mVmxPNTRETUlRaWJzV1l0UEJxUnd4OVVaeWlZb0ZEdDNxaFg1YTJERkY4eUZPdnJRcEcwb004bWViUnBCWHFVMnVVS2lvT1B5akFGbjZWSUJqVmtnTHdpd21aMjBMNmxzWHR2aldHSzdvNDhNRTkyY3VheVloR25sa2QxS2gwWTVDKzhJUDFVc2FNaE0xNURuM0NQNDZ2cWZYaWFsSjNScXp2d3dXS1d5QzJvam9KL2ZiMHFRbDdsK3VuOW1vK3V2WmFrcjVBdi9WVzZQdUhucXNCYzZRSWtVYjJpUjZ3V1N4azBZTWhtWDBQejRmWTdsME0vQkRMdXdnWFE0NVJTTCtLMnFsaHNsc0tRNWFJdlBud2ZORTBPWHgvNXUwWUF6dzZOSE1TMER2YVBFbXJ6UmNEZTZMT09SQU9WMjFrLzBXQjZCNzJzZXlVaHFGOXBvWEo4bElycW5ibS9CQzR3SDNZUC9iazhyU1U4eTVIM1pRTGFCQVpaRlBJTjhORFYzNG9RNDQvb2FsaWJUNUdiSGEwT2pjWFBtSmNxcktyU1I0YjNUb3JjN3hlNjlndzc3d0grejQ0UEMvc2RlRTN4Mm1XdGYwOTJveDd2dnc2R2pyTnA1Tkp6TXdDbWIyZisyc3ZLTjdwYTVUNHlJaTlxWkY3Y1JWS1BXU0hvODdaMU9JRCs0NnFoODZuTmJBVWMwcEFFYnNPNmNFRTR2UDBrRkZWYXIxSmR5ZU9WRmZ6KzZmSFRGODlZNTVxdTJ6eldtZ2xFalp2RVpHUk5Bc3paR3dYZW9CM3Flb1NjNHhtM3Z1aFJYUElkVjI3akViSTh0dlVZRW1yUGpLOS9zbDJJaDZRZ2o3NXE2RjJ2UDlyZEg3ZzFNU3JCdDVYZWlXSURCUE94M2tUNlVlYTlDWEs1MFFPYm5lMnNDMitoNVF0cEwxWGhaS25IVFJjaWRjNVRMZEU0N0NOdk9kK3c2OTZxcThnYmxrNUVjeXgxRU5yOWVadTQ0VTh4SDBBSDNLckJPb20vMlBpRW9xLzBQRXlzVzNoRHhsZVNTaDM5aGJUWDNIRkljSnFNSnU3cHNZWWkzMzBEZXFvYXZvaVRvOXdvOGJKR25obDR2amdaMkIvWU0zcjdYZzdiZVY1emJpb2x3ZWxLb3BXcEliVXlmMmx1UElxNDhKOGJSei9EYy9YY2xYZ2MxcGJFRjA4S1Q4d0tUSzc1cGNsbTZEWHZ4UHBJcld5VEh1RU4zaUdCSWRsMWtPcVMwbzJ2WFhBaHVYK1RFSk1CT09YUFE0RTZxVlFaNnl1cXRVZVRRZW1PdmUxeFAzQVFKeTJQL2NsL1EzZ2hpR0ZNaDJwdGsrZnJLSU56TG96SVpISC9YVXFVYmZaTkRWd1psZEx4Y21zOERzWUxDa1Q1YlRJUWw4dlZzUFpKUmpHdU1jQ2ZFV1JoWWM3dks5Syt1MWZYVGd4REZwbWhBWDBoaU1hSU0yZzlNYm90bUhxK0IwRzdjOFFieW1TZzA3SjlEYXpydTJFZGFsZmpGZTh6UG15K0FtcUFCVEc1TEhZZWthV0krdHBCWVl4ZWJWUGgwU3luZU55ODB2TWZVSHNtbjd2ZEdmQVVvOGN5MVpkcnJ3OFZCaThYS1F5a1R6aUVmTjMxRUl1MUkwcWFoN0ZKL0NhRUVPMWc2WkVGMmNPM281MFp6TjdaNDM5OEUybHM2RlQ3bjdwRkQvK2RwYlZvcm5lNmJrdTY5SkIyb2ErbDNXNDVvOWJUSDU4U1BValdqcXc5bmhlWE5paVRCVFdEaFpNMFdjYWhUc2llMERiWmhyOUE2eXZlUTFLeUY4MUdVektFK2VKUGdhdkovdU5tdlhwUXFxcWpwYXdqR2wzaU81V04yUytHR1Ricm81Zk9mT042NHA4K09DZ09mUmRNRWltYWVFVHZ4Q3NkeDkyNTVNSVcvUjdZcjlESWFlODdxeFhac3Z1N0VCc3lQWUdYaGQxbk81TXJxVk84NjE2cDlTbk5POFlGcS96UGJhYXA3bmZuSXNVZGUwWE85dGJ6cTFpUHhncXRoRm44WWxOQU4xbmRXYXl6enlCeHhPU3BlYWFYVE9JNUZlakFnU1lHaXNPUTVxYjFtVXg2RmdHWU81Z3R6QXloQkNMZ0VOaGczZm55MEpScTZoSWw2djFvQzJuUFNGR1Yvb3lmbXFQU3ZLOC9RQjJNeUFaMmhjdmc2aVZHZUoxWjMvVnFtNWpFdno0M3pnR3ZUQmFRc1dhQmdRNjBMNVBRUUJvSHFjZTdBdTJISEhtU3BDTWtDWHNIM2h1UHBnaWdpVlV0Ulhub3ZiUks2VDJRaWx6R0toelNFUlh0dXorMlJoUFFoZ1M5VS8yWTc5NlJiUkZKcGhvMUZ1VGdBMTFqYy9NYVlVc3hZa2Z0RllpTW5Yb3hMcC9rZmxObE9RVW04ZUVyK1BpUjZQUWJoV084QnEvQUtYdEE3VCtHNmpqZ1lTUm1mbEJhVU8xUHBwYlZJZXdVZTR5cUpUUlZjUXFaZVVFUnVwcmgranBvVmg2TkdNWnMzRVFqNWZLTTNmUkpSYU5QeDk5OTdpbEozN0F2M2FEdE45amdYejYvZ3kxcStLM1NFa3FxTlE4SldmeER0VG9vdWRXRDV5elNKRVI1L1FRbS9HOTZ1VDA1cFZ3ZVlUaWJpL0M1aUlucFc4T21WZlZCRlV3OWpUR2FmSVZ0SldEakdUZEZrL0JIdHQxbEdUN3lPeUY4Sk5tckRZdktCMGtGNlRVRXdqSE11TXE4a2FOU1E2Wi9rWndtVCtyUXlBTUpBeE1UZ2dJbE0xNENQUVlCbkVoa3M4TzdWbEpSZGZtakdqS01lOE1HRXlDaHZCYVlwcUlhWjZBU0tUMFlyUGNReFgyS1ZoNTRrWHpIcFg4NXFlRXhSeXROV1hiZmh6MWovMXVGVzV1WEowOElEdnhyZ3E0cnl6a2k0WUx3Q0xVMVloVVl0bTBMRlNuWHNEYmdKWm1wazZpSENjRWVuVksrM3JmWnFQYTQxeVZRdTJuRWlLTWhBdll4Z2VhczhsVTJHV25NL2tRSGx5OGFPWmRBenN4VEVwVVl3ZHRHUDd5YWlDYXZOcld3a2lMQTNyd1lBR2Z5eFJ2ZitKNzJ6d1dROTkzT2tUbTdKeW5NTE8zS3ZDbEcxOTZvN0R3RzNuQTNmMWhxTVZzQ3JvWTdSNGdyQVVmbCthSlNLcVN1cXdqcGNSNkVFdUF1d1lHS2w3UGZ3LzJGanlyZUVGeXE0MDV0T3ZlSEtsbksrc2ROY0tObHFOMm5GTXdQTklvMDB6V2ZFU2kyam5RQzdGSFVEVEtBa1pFOTZKL1NCTVFhTFc2WEFDMlY1WXRqSjFxSFFhV2NBOXphcXBLa29VVldreks2L0F0eWRJRE5hRGZlNmVPa3VNY1lKTC9OM2R6UHF1bDN3QXFIY3FCNC9XajZiYnpIL2p3ZDRuL1ZrbmJCY3FIZkVVcHdSVGJ1ZjNudWhGRVFybkt5OHFZbUxkckViN1JnWlo0d1l1Rm1MdllrRVVFUG9wSHk5WmpiUnJJU0JYOWtzdTBTeHI1Zm9UaEJYODVPaTVmVjlLSWpvSTFqVERnOXZrNHBodXFUUGpvY0JBcUZOaXdLNTZ1K2tudDZmQjdzZXZVc2d1V0lQajdaSjh2WnZNajVZbGlPZUV5SVVDSWw1QjdoZjJrUzRzU1A3dGNaS0NPU0VCaHpvTElOK3ZaZ1pCQ3ozcGJWVnJjM1VjSkUySEFScHlvelpOS1hseHJnbnU4VjJWYWNodTZWYU5pUnd2MWdXdjRIT1BCYTZDcUFMUks2RHRiQVI5UlZVazRZb0dOckx2Q2JKeGJqMHp2bDR4cXE0ZUJFaDlzRUlJUHVyVlFXZHJjcW45Qm8rYmk0MzMyUkpFWmhqRmxZSXM4NGxlblo1eWlHWU9Mejd6VU1RWkFpak5tb040WUp2MTRXZ2hxTXRuVmgvaGZnT3FGM3lVUkhRdDZyY3VrbHpFR2NwUFNWamdpM29ha1o0MnFyc2Q4MlZXTmJoVDk0OWdlZnExK1J1MWJkUmtXeDBaTDZSUWVDYTRKUmJQNUtSTVVSSGMxdXhFQnFnaS9GSGxUbXlnaXY5Mnk4ejEyTlVyanR4VUtGeTlGL0VIOXhUWmZPZVVtZmdWT3NmU1R1WGpmT3Fkb1EwSkJZd0F4MElJUGRSMS8xU0NzWk95bWFjcTNGOHJLY2R3SXZnSFJ1aE80cGxuc0Zud0pqTzU4eDJ2VldrQzJ4YlBYTUQxRmZyalBtSTdYVk5uL0c4dUdhcWVjT0ZKTkhhaDJaLzZiTW42M2NheTBsejhiYWFjUU9md3Fjb1V1YVpWeFBHM21XZkNMMmFvWk54ckJmSDU4TkllaGxiUk9lcUJJdTJEV0hPU3ZoUUxXVnhDL0VTNmpVdXlIL3dWcTY0ckNJaXF2OU13VldpUVVnOCs1V2ZYTHEvaHRkSlJwalFZRm9DaklhR1FCTDZkQU9jNTg0bVp6ZHA2d0h1ZG1EZFFSSzdnYU1iWTU4UWxaQlhzejRwWDZFakFvU2g0UkpCbjEvbk9SUGQ2ODdUNExGdzZyaXhqYjBGVXUvZXZ6N0hoaFlGNE9uOHRZWmZvUUVoTTIvQXJJL3U0TEk5UWE1b1pwMk1NUkkwYXZTY20va0V1Vmxzcm9adlI1VjFIaEozVVg0cXNLMmRXdUNtT0dlUEVsNFRpZjY2dlBRUUhyNXRvVHNTVjV5QkprV0RwZXEzRlIrK1NBc3RxYjA0RUU4dy9FNGNjOWV4YjVlUWVQUzJGeVdSZ242anJ6ZFo2d2FEMS9lNG92NVRUbmlDTUN4RUM0cXlwUmRIeG9wWnRvM0FOam1UbnBtTTZwQzJpeEZ1MWtmUjBTYW1qU25FaHhyUDlLS0hXeWdETDVCK0lyREt0dzBsc0N1anU1cEdLaGxaMnQybEZZcmdCZkVmcmZoZE0vMFlMVlhWamk3SThDL3U5czdBbnY1N0hSYy95ZWJNMldhYm16MG1TdWFWK2Y3ZW50M2hhNHc0a3RpWDFWZGpCejJLem9CZDA5VXBEbkNYVGJnSEE0VmFHSHpRalVYcEYxR050SVZINndxckFSa290SXcyY2IrdUNqdHA1cHNRb2VraDFkYS9mbWt3RDdLd2VyOS9wNmRRRE9vaU83V3g1d2cvc2Rva1BxZDBncEcxSlV2VVV5KzF4Vlc1NHFmVkVNZ1U1QXI1ci9iNWNzMUpPdkJPTENMaVRiZDExYXFnS0dCYUFWVE5QUVd5bzJhTUtNS0doVFIzQm05T1VjQ0FxNFZSOVZheGRCM1MyZEZCY1MyMUZubis4OUkzZjBXbytkVCtrRnFmdHBpc0RXRGxKL09TbHE3UEVuNUI0ZTBHSVlhT1JFcVZ3QmZ5SUJKMCtmMUNhOGkwVENLR0lTY2NrbWlXTWlVNXNuYndnUGRhQjhyanI0ck4xa3RydVhsWmpQMEpYdlRUcXlodFYwcnhBM2RQdFhENTRMbllGeXkzVG5reFZHTTRDN0NIZlQ4SENQMEpFWmVFaGpzSGZNbFdnVmg0TU5XQkd0SjhGNk0vUG9kQzBTT1ZnYkxpd25qNVg2dkNtUFhiVDFEeVorVTBtY1c4dkRDK3ZuYzhiRlQwOG1CVDJOWkl1cGxzZkVoYjc2SzVVMWp0cVF4MXFWTE55QXRFa2ZpbHBQMHRmQ0hKenRGbmF5ZFZQWVNjNCtVV25GaEY5UkE4VmNGNEJyRHJ0Vk14Qk4ybkRxZ1I5UG04RjJnWHM1ejNjMDF3blJaam9GUmo3TWlXQUlSeUN0L0tOaHJmcldPR1Vwd3JCeFJGMFI5Zll4Q2Y5bThzdktvbGVvUXhITU0vaTlGR0pQRFFHQUlQMGJ6anV3K2RnK1k2aXpjbHRIUlQ3Tm0yWkdlOVU1ZlZTOXBMNnFiUDkvRHdGbUFGaHo3MncwejlZcWMreitiM25OejhFV21KaEZyejRQb1ZSekhxakFRMkczRk9Jem13ZnQzYUFuOWptVnJmRmZKOFZIMlk4dXMzeFhxdlhsVzBZZm1oMnlCd0srcEUzdlp1cWhtT09qZXM3Z290Y2t3ek1UZVYrZnZPMVV5YlhUTlF3K1h2RENNVzg4L0xTWlNsZmNCeWIvT2xGbitXbW96UnZEd3VyVlJOcU9DZzRTWk9nZTdnNTRsM3NpUkx5Wkl6bVVTNjBlbTFiOHBYOTAyV21zQjBUTlgxY3MwOFMxWDZWWkladGFwRy9IdDlGUEdWdC9COFFETjVTSTlaSjY1YmtMbk9KSmFyamIyeXc3YklrOWo5V2VTZExGOWcxTGpwMHlxamtpdEJZc0wxL202Y2tIbzZiekI4UWRUVGQ3OXhHNVRuMU93MzRNQlJQVEJMRVd2b2hhSmFnUlFYMjJ2NjVEc2tHZ0J2SVVOQ3FzNWthOXpvaEVua2ZZS3RoMzJ6SXFicWlUbVg1bXE2bForeUVNNE80M2c0WjNiTWN4NThudG5iNW9lQUkvUkIyWjZZaTJYTmN3eFJDejIyNDNGMDhKVDhmRVNnNGkrQnJTY3VEZEFjUkdpNGVIRE9OV2FaT1huZjZrdk5hK2U1eTQxUWVpakY0VFp5L1B5VjhCNXVNeDlvM09uRURKbWlhb1AzbG0xNkszU3lYM1Q4ODYyUXZSdmtFRkFIbnpHNFh5OGNnalZ2d1RhR04zamtLaHJVZGNsemRTZkZUZ2E0MHlMSzdwb0JRcVZlQUVEdEtZNFZIWG1qbXNtekQzLzFQc1FPS3ZScUNIR1U4SGVuTmdJOVdpUlFpbTF0RktoQllUUEFZL3NYdGU0eEs4N2hmNDFDREltTGtqbmZBbDRiTTh5SVJpc015MVNpZDdlVnZnYmNtOWJ1SnJWZE1IU3pLc2tFTjl1S2xEYU9SVWdwNDB2em1QRnhRZllIVUpnRUVnNzMyd1VTbzdmWDR5c3dRY3RXYWhUTkR2Zm9INkRIcmpjdDhmMWhuSmJzRVBsZXBZVTRNOGJpVlZuV3NwS2tETzJvUlFFejU0L2pXcktiRlF4eEFXdUVMNUZIMXQ1TTBWTSswSFZ2RVVnZ3JQN2M4bHNLdVdWbnBzVXJFY0NUSzNkajZKamRCUDg5WHdxakNhbGdvaERVSFA3ZjgyUGtyRHQ2Qk5mcFFENHNHT3pWN3V1RTFMTEJGTCtIWVd4U3dQNkg2L1ZuZEJpbVhyaU9nN2pFOEpINnRhWXRWZ3NjcEc0NHpWdUhsSk9acjBVVGl3a1E4SDVzZ0JweTlobmxvYVRUWU9RQUxZU3IyU2ozVElJZGJMWUZLa0NsNFg1c0MrRW85VS9vVVJkSWp4TzY1Q1VXRmdEMTQ0S3hxSnBZTHNKekxLMnZidnVuL0ttTEorZEJ3UDZzZWp6R05wdWcxSEprK0FQTHk5WVA5SEwzOVRJQ0dDNUJBS1ZUVUhHcDUySkpXNDFRcHBKMjRTOFdBOTc2S0RXWEM3TC9rS3oxUHduenhJMUt4ZGlkVi9EZ0lRT01Ld2pLVDA5U25vcERDN0ZuWEFuNW9DMm5oTjhYZlVvNzEveFY4eDZMSW4rbTFiQnNDK09BRWhVQTJ2b0svOXdjUTRBK3Y5SjFaaGU1OXZmaDRsdEttaEFTZklnN0YxZDRHZzByOTN1RkR3K0xWUGMzTkFwL0lpZFZ6RzFYTzlZaUtubW5QQTJBVHl1UVkvZ3JYQjEyZTRMUVpUZHI3eUYzN3EvZUJrWjBSVEYzeTdCUHdrQ2U4bFBMUVNjM01ydFpmTjIrMzBDOXR0REtmdTczK2FFTUVXUUh3blFPUW1QTUNXazdBRmpmTUVYV0Q0Q0U1WVVqVFZQSmlWV2pWakkzcC9wTWkvTG9YWDJyYVAzNjVqdTV6YjlDV3BROUFTVU5Ob0JuL3A5dGdhc3VBMFc3V3Z6WE5VTmZaRmdrajdjS2Nta3BISndxWGEyeTFsdWxNSjIwV2hENmJyRXdPVVhCZW5YRHAzNy9oLzRJRnpHYzJuL0d6d2V4K3hmZUQrRTc0SmNUd0ZGaTUza2pvd3l3eFFuZHNkN3d6K21EOStVb05rM3ZhUStycm16Z2VicjdMdlovdUdCb0d3dDZ1OGdNUStqMm1KaW81SlUzVVM0bU9OTzJKbThyZThSdm50aTYvTzJQOFlQV3lCT01QdENEWTAzdC9NSGNqUHZkakRjSlBzcGNLbkhRZjZZdkRPWEJsRnJXckRVcWJtcHFTcnVRNTM4dEkxQmhzaHdNNWNaK3RuZDh6b2E0bXM2OUVyL2hpMS8xNXdHbWxrZ2pMRTQ4OUthYkY3MkhUemZQVU5SdzBNeHZFbjFoMkE3OWNNeEMzUDZwamxhVm9wc2JTYXpYWnovMUhJcEc2ZDF2SFR6UzVNYXJEbWZhYm5lMHAzWGQ3Rm1WSSthNnJFUkV5YzQ4cDNwU2V3YU9NSWdPaDE0UVRxWUFSb3VtN3c5Tm9XL0RhVDlaMWdsbzY2V1NSV2REYkhCaDUwTTdpcUdCMm9NbHJOMytkbzFhM2J4dzRhYzJFOEgzY0RuTWpGWjdRVVhVOXU2RWM0RCs5a01YSU9wRjJjYytoOFM1TkFReXJZTkFLbXRxV0E2My9oeUM2cFdoSk16NWV6YldML1dKUnJ3QUQ1RTF6VU1LQ1FEbjZVdXRjTGRCVERUbk1MUktMdE93NUxUN2lDUHNoNWl5dWF1Zzl3d1hSRGRtWW9aZVZ4K0owNTEyYkpLWUMrMmg2R3Mxa0hJOGxiOCt6aUorbGNuem8rOEhOcWg5NnkxMklNQkkzNEpYbTFTVlFLL1hlQktjcTZHeW1wQUhhY0lsOExjNnEydUdtSG9WZ09NTlJWdUFDalhhaTE2RmprRGU0QlBmOWhMSUJleFBLamduVC9HNDVnY0hRVkRVZFQ1UzNRNnBXNkd3NHFpaWNSSHNTdWVuQjc0cE9vVDJBVXRKZFpsRWloYnJ3ajd4QWtKRkFDemdxb1JyRnhlMkNRVlkzVmZCRzlzdDV4UDltV2FOVE42MCtKV0V5d0NDbzhrWUZyTXUyQzY0azI3VDdVME1ReDJTdWZ4MEtXOHowVi8yT1VwMHllNzNBMUlYZHJ2dFBVbWlBWXNoeFhaaFZyQkJIR0dlTjZLMUZMWlk0QnNLSnUxTkVXaDJtOFBMUFcrVER2eGVHSVdBUFovaDZzUStYTlAyNjFIT3FUTFc2Q1ZwMUcxSnZGZkJ5NlErQ0JnSGw4SzFRRXRReEVUejQwT01HeWZHR1BVM0oyNVYxb2h6bjNyMHBCZkFiYURHRGF0c2RGc0NzSGZCd2VSaDlpMk55T2s2N21NV0xrUWhmVSsxOXdhdXNHMVBkTThvODRjTzl6Q0tMV0s1SVUvYWpIdHdJUTVlZHFTQy9JSUtxWHlHRDlFRkJ3N1RGTi9FZDJDRGNmUHFyNE9BbWNBZklYYUE2VkpsS3B1cXlvT2F3TjNweUN1N0sveEIvWTJqZkdRZ0RoSUg5bkhrR3R2dDJuUXV1QVJYV1Q2OXB2SkNzc2FreHRsZ253R3o3bDRzL01waS9zamRaa29nRTFIUEJYTlM4TE1MUlh2R0lOM3M1WFUzWjNDMDJIbmwySHgzbzFubi82ZFQ3WU1qMlYxVVlSSUZNajlFUTZ3RTNaejViYlY4ZjNYSGJ6M2RwRHdLaTVlaXNyU1FoTHFHMGl0MkoxcytrU0dtNGFvQ2M1WURLQ0YvUHJlMThQN3JaTDNqSlo0dDdnMVE0ZjdhdTR0V3J5OTlIdnIyN0twSkFEeWJjMHBsb0cwQzBJZjhPRTV1OW9vSWJ1T1JkMUlVbGh0QmltcVNUbXBZTVM2UjR0dDRQYmo4S0V1L1lEOG1rNUtlMWdjNnBURjNRQ1ZRSUswVFZZeG1EVUVGamxsL0lodDNIRTJlUzQ1WE9rQlUyRU5USkd5UytVRUwwWlhzTlhGSDlyaklKWmYvNmc2cTF3L1ppdS9sOTRqZEdUaXgvV1FFVGxvVTFlM0E1TlRnYmFqbkkrOXJXMWRLOHVzTmVzaWVSdjArTHZINWlQU0tyNFc4RmxFd3ovZjRRVDRJaWhlOFlGVjZQRDcyRGt5ZnR1cjBxWjhVOVE0L2tmUHR1SnBRNWRjTjNlOStZVDN6RmM1bFdqYXBMMW1uTVJ2SWZ0anptYzFGZ3piWEtndmRqeXhyaWdaVG52MVM5L1drVCtaL1JwdDJWMURxTXlxTEx4a3czY0pMK3JGbjdwc0Z1bzhIczIzTjRTQjZlL1l0MVIrTHlsN3RsRFJ0Qzh1K1hTSUI1b0VHQzFLSHFGc1JZVHVpUnlEd21tZWNsakwzOFhaUE5ZUlprMi9jdE9LRzAyOWRSQlVEc0tXRjN0NzZ5SzVxY2JlamlSTVVPUlo2dGlmOXFZSWxxK3MzWGdTdGY1SHJyVTBTY05QMXM1U2FFMWhHcjc2K1RZSXZXSkVRMjBDZzY1VGVuKzJGZmdiOXRudGJYOU5PZUVROVcwSFdLbVFNMWM5VW45Z1JJc2hPOGxHNE5tcmVVbkVkWlYxNWxCTFRHSlRFd3RQYmliUXVuOVQ5ME9ZMDVwb0FxVnV2SFg4WmEvUWVmS2JqaW9WOU5DRGk5c29CT0pNVGUvZjZIZjM1SXpIVXJ5em01cHI5MXNReDEzamUyYS9wV1M4SFNxemZpeG5jOTN5RVU1dC9OTDhETWVGb01nQTByamE2clZjL1ZWWDgvbjl5S2VDdzFzNTBiZlNqYXJLNVZXcGNleXlYYkpDZzZIK3VrbHBPdHY3QVVob2g1YVNBWE1mRVRZZHY1clAzcXNJc2REc0NNMFJkOGpPSnlJcHJOZGpWdXpSeDFxS1g4VDZtS0VXTGRKQjBxRGJnRklYY2JhaEljdElKZ29tc05HYVlOU0UvSCtSbTFpNkIzdUt4NldyK00yVERjelZvZis4b0dKdmVqT244SlYvUXFsMjBTYjYyUnhuYUJhTGErQ1REK29HSFFBZDNxbFpHbEIrTmRRejZlZEFEaXcyd2hjNTJjYzFwWWpkaUxNZkxFZkNOS3J5N2srUU5DQndSbmxyWkppdkUrSmVvS2FoVWJZY2toWTlINjMzWkM5bjA5Q3NXUEcwOHUyMzhXY2xHM2lhM0NNUnNTZm1lTE4rd3hONFA4MHJ3Yk03cmVPM0Zha1o1NGtMQm54V09vY2pFTnJsWG43cmNjSjBYTlhUcWZiOXVWTGtLY2crbUROZzVmeXZPZk9QcjcvSm0xSSt3REsxd2ZqYmtyOWl3MzZtdGxJbTU5NFFCYlAzRHBoRkNDOHhqelA1RVFuL00xRnNyVUUzN0VsU0NTVnhSbWpIRGo3L2kxaE5TczJmbWlndWJaSmJpV0FoVEd1OE9QV1czTDJjdlIzWGFHNmRDZTdtMXhCMDZnWTJTQkY2ZTVwOFdyNVMzMXpieWNObElrYTloZWxNaWczUTF5V2p1Yit3VTFrY25UTzFhU0lNMUdXVjNIQjJCbDNRWEtqUXhDQUVBUlpvL1BvQWh4dWV5ZnJLd3hWQ0dZdUQ5MFJ6U3VScEE2TGJxUEl3ZHJESnpiRkUxd3p6enV2UEQrUjRlc2ZZSjMyRnJ2SlpOK25DcHhyM2NKRFlSbUYzeTRuR2p2YXVUSVZlQWxvWmwrcTVNUHlEbjRib0kvVllIUnpJbzhDNlI3Q0FQV3U1Smt6cXNEb0EvQlloWSsrbHJja1YzL1FNbURYd2FxZ0lJT3hVbVJLYUlHR0M5QVU2UHFCMG1RS293N3VjVTNkRUlzZTF3UDBqOFM0bmJGTk5vbFhUWjZtaVBuY1p3ZlQyRURRK1NrMy9DNGRaTlVzYjFFWm9oU25sOFRpdzdoOXQ0YUZrUjVySGsydDJnUEVvUnlKeEhUR01TamxDTGhUNys3S2RERFluemQyQldaeDFBVkYyUmJwY2Fqc2NlUEFVOGx1TUdFNEN0NUJ6NURma0xmWlZBZ0I1VmZVZHF2QVlNamNsL2NXMzJMSjZlcE5oWHFaQmhsZlFBdmZFWTlDWEtzYXNqanhwaVNDY0tFclJ0Q3ZVdERvRFd4WlYvS1UwVDdwbW51S3MxWWhWb2NTZXRRZHNERHRHRFhMNnZxSGIzOEovMWJOdWt5WnVtQWtWbHcycFFGc3Z4R2lKdEpZTzdzL0lqbjRhNXVscGFMblcxdVR6SXk4enllNVZiSThUMTlvbEZnN2Y4M2Q0cHNMQjRwYlBxU2ZCejdGUmQzb1hpUjU4U2VoSDI0T2E5N3phaVZ3eldYc0ovSmVvVlZJcHpDWmE3T3lxN1E3TmhxTU1nUFp3VVM0bmdZNSt3RUUyMG9ZWmR4aER5YWJQK1dpWExhQTQ5QzNXbDI2aG5za3BoY2ZJTWR1bGZnQ2JIbW5KdTN2Z2c0b09nVmd1cXVtcGdzTFdyVGlEcU5JUlpsV0ZGek1QVlNQOVVIYytGdzB4TXZRLzFGY0ZmWWJnOXcyTldqSzJoM1BVb0VwZ2dKR1kvZloxaGYvTW9kR3krN1Uzb09ZT0JHSkxXemw2K2NrTzEyeW16czF4cCtqUE9SYjhDRVNZdUd2bW96K010WVZOTkhZM1hjd2kyZndkSVNYaGFyVjZCOXJjQ1d4bmRDeEJQSmZXRDhDY21wYlBCaVlQZk1nYlJZL0ZIUUE5Vk5uS1ZKNlVBVms1TnhlZ3NpVEJENUpPaGdKN2QrYzBaRDNGUXZlN1FWWjhvWThMNkpRczR4N3RtK3V4M0RzYjI2Q0xrWEtocWF0bUh2bG9zSkpMVlRRSnhVYnFZVk93dVhGSGx1b0NmTzRocGF3LzFzQmlTTHUvY2EzZjJzMWlMNDBFMXFBSmZOSTRGWFpCZ0JDOFNvdklaUCtNeXdWTVJQT2dLNk5TS3B5RjhxTFRvc1FnUmt0c0lxS2tjY2tDRkhaUndKMkhENDJjdnpQSjQwZHIwR1FtRjhBZmVweWFjdDIybnBYN0g4OExXMVgrZHpFYUJqUUhubzRocjRpOW1vMmpUUjRERVZVSjFtT2ZUL3NQSitXYjE1eFJQTE9zeGlVSVNsaS95Yjg5OUJpdVU1VlhRbmZNZmJBWmZSbEpwNnI4Y2pQVG1aWDBLRTVMdEUyMnFZeURvMk5Rem0wNDdoMitpMUJPUFBVWmg1cWFVMnJWV2xEekFUanBCV2NnRFk5bnFEWTgvdlhnOG9pSzVzZW55UTJCYk5GR1J3eitMR1ExZjdKMFFpMFlrRTFLU1VnTmN1MC9lM0ZFR29OR1lmYTlvTk1XYnJVMVFiZEl4K3lXcStIVWZ5Nnpzd1UzUitZQjFUUGdxZ2tXbjFPZU9RaWJHRmJmTUtWMEFrRnE1SnFrVnlwUHVJMjdUdnlVOUtkTjc1c2V5ZUVBdU5GV0I2c1Z4VHhDRm9CaVlyZ3pUckgrVW1sdCtLbi9DeHFCUHphZHR4QXA0NURVU1NWajhDWjV5amN3dVRidEFhd3RLSzVVRy84Y2lIb3A4K01ITWRVaURrajNIQVZPNWxYQXN5TEpQMTRnNTVSNndIRUJwZ3I0ZGZ1eHU3VEE0blE3QkFhenZ6MEVoSkIxUkhSMHEzalJnZktQWkQ2T2YwaTFZWVZFQUc1K2VKZTFpVDUwemo5VFpzYUFDNXVvWWs0UHJvc0ZrcFFUbmJJLzJ6OVkyVERlc1VKMEVXbDR5UXlseU80RWJVWE9yK0xrZ01Vc1NpWjkrV1hCVGpnVk8wT0c1MnczcEdWU01qejY5WkNGRFlXNHZQOGpyRVplVHRvYlVBUithMGxURFhoMERETlZCdGFYbWVnenRBUWRRSVJhOVpkUVlxS3BXVXZqRkNqYzFybUlQNVBqckhrMTlHSjYvZTk1RXNGRk82aVhCMytET1ZaeVZSQm44NkhIWVlmUWNaUTc4NTVkL0ZSVWU2TU83R3F0T0pxUnQxS21NODByQ0dwdnFtYmNJcWt3QWlJYUVKT0h5NUU0dTVoT2JFN1FMUUpuYUtCVnVtbENhcld5UHlSbXRIVW05VWM5bzhaVWJ2eG9CaEJpRmF6OXhkT2tidFJrT3dGZFg0UndRTEJVWUhod05lQ05ycXNWbFo4WUI0YytQWFlJVUk2VldrL0dDYWpyUlduNFM1T0ZaYUZlQkxaVUpObzUvQm8zQUxkdi95MEFPRzhUdys5dGVrdjB1WjdGbE1zeVRkTjI5Y3hkRWNPd3dUelA0UzM3TjRnWEFnSWpINWpMcDZBN29PV3JubXVXV1VHeDBlVFJ2UzNnUlJDTytrOGZ1Z0U5dG5TMC9sYWlNNUNOMVY2T2NZdUh3NEV3TE9UUHlSbHBjZ2ZBcmVWYjR6YXMyN3lEa1VaN3NHZGYxL2ZJR0lDeG9BQTh2TGR0WUZBLzNwR29yOEJhMXZPNlNGbXBkbWIrRjVpTGU1UkMrY3pDTVM2bmdIV1R4bmNJT2dBNVA0L3JzVHJaZXg5eFoyVnJuSlFibTlwWFR0U0REdDVFamhoSnJoTGRrajBDTktpc2RQU090RnFJK3JleUNNK2ZrSlJkVHlFSXJsOUtZR0F2Nm5VRlVNTGtwY0FYK1h6TTd1WEdvL1lXYmYweUsyczVmVzZiL1JuRG91NFRPRHZOOHA2d095N3MzSlRCSmtFYWd2VHNLZlFndnZCVEkyYkNtV1d6d2M1RlNtT1VkTkx0OU9MUEhhb0ExZ3JhQ2dpUzVuSkZ2OWE5OVRzcmdjWVpFblhBVDBuRGJMajZxOTRuVldtS3pLSVVQY2czUGNJejR2WXJKQmFVOHcrdm03TE9BLzIvUGRHdCs0andxWmVwa1JmaGJPNlhwaXRMZ3NRWUlhNGYrT0lveWh3R1ZVd2l2Y3J0NGt6d3RPaTlYZ0RObkwzckR0ZDUwTWRvaElIaEpBWFpaUGUzc0NEMmltcFZMcmVpdXhYS3I1b2lZT1ErYWxUNkRuRnNOeGJtREF2b05wNi93RWlpZEJTTVozaUZCODdnaHh0LzArU1V6TWFmMDFGWFlGU2xVYkZPbWtvdjExSktQcHRCR1JQU09ublRpUWRieVY3YUZ1Z1dpcW9VSE80bFI5QjdJRW1oL3NvQ3E3dmpHYTJEdENZQklQNlh6YmppUUJKOEVmK0x0cTlWUDkrRDlpYzVtQSs5VjcvSTZrVFVaNndEZ3R3N2wxRW5jekIwc3Y5TlpSbEJGbEtRd3R0TVhmMkJmOTlveHphVjYzYVhvYTJibDYwbGtSU2loOVBkUEd2MUdLcXB5ckhrYWhkamt0b3NBVnd6dGxwcXU3WTRsOVh3OEdvTElpT3pvaVVYdlpJS01nZmNrajBmeE1pS0JFL2gydzErSm1GR0lKWkUzZlBZbXVCdVF3TzVDakZtaHhKbFRKZFBFY2srYURBODNjWEd4YXZYa3NoZ3FobWZsQjBjL3pudGRROVlMU3h3WkhsSmhQVzhNZ1hZNzFTUmNRV2tTK1ZZSEY1UG5TcGswa3FxWUt3UnVJU0xLdGJjNGFtMmVqa0ZncXJkSEJ3ZSs2N3drREZjQmxBbmg5aXFBZHJJZHJIRFljRnViNWkvaElqSXNvVGc2VnFTSU5oYUxpb24rcEZPZFYwTWVJT3ZremdyZHc2YXlFSFdQYkRtdXZxWG4zdzJGYW1nYWVDZjkrcnY4YkVLNG9qUkV4eE8vT2FubTlZZkVWQnBZZTV6TXA2d084d2hSYjltM3J6MGRoSWJrK21saEhGc1kvUnJwNDBYdGtZNVZvN1FJWnNZSGJWZXBFL0tvcGtOMFYrazVSMmJnWFM2RTdkME5ZM0NEUlEzeW9QSUVwY1pPLzMvMlFybUlZek5RcHI2L3NZSWNlRElEOGVWc1ZGZHRGakdMdWdMRGxOR2VlUVdQSTQ3bEZiN3NuVnZNWDQyN05ESGZHb0FhbnVjbUhFSWVxenQzcjdFR2Y0UDBYT09DWEN1cGFONjZ0bHJuSE9oMmRkaDhTM1lscFdURkI2ME44bFBXZTFaK2UwUnl3OHV1bE5VMDl1OUp2R2t3SzJldnZBdlpweXA3OEp0djVHMUpPdUtnWmJsV0VQT3VJL1NSWEt6QlZjUDB1OFBvOFFORHVjQ25TUGt2eWlvV2xGQUZiSmNoWnZBTVphQko2aFMxMnE3NWxSbXY4MW82MENoNlJVZFZjQTlwREIyTlEyNVJnVXowMStiaEZMdnNSN01sYVdSbnVLSVYvbzZaUXZHb2N1UFhaMkV3VXJ5SUxpc1FtQWFydWFCOS9XVkY5T21OaGhPTU90dzdmZlk5Sng5YmxpUnh1KzkrNmMyWFJiSVpQTzZ3V1dTUGVEUld5TzgvK0ozZHY4UmQ3S1JWQVZDdGtUOVNhUW41NzdDUVpmKzFMNEVCbW5IZTNFMzI1M0JNa1hDVXJLam9ZN0JBRmgySmZEd1lMQnVTNXNKQTVNc204QUJuWmxURFBGV0pWRGFXamJZUlovaUhueCt6L1RzNThiaE1OYmI1L0VXYWxValZWWGV2NS8weWlYcHk1bnJNMUZsM2tOTm9PS0l5NHlYS290cmVCc21mVFB0MG9YRkFIakpNbDFDNlo5dnF6cDR4RUJCNzhlcStnbTF6WCs3OXRpdHpzM2RMMThSZjlaQkFQWkpMWDhHd2pKbVpHWVp6cHRCenNnTDBZT1BDN3pJWEJuaXpPdXRWWXQ5ejJ6YnRpVUNoWVpDTXpNd0Z5aWhKRGVGQzlZMkNzVm1MR1gwWXhGRzliRzN3WnRGN0lQWUZPVjJ4TnFZTEVLVy9UZWVtYVQyb0tGNVdkbjZ0U0VIZHVlV1lyS3U1V1ZxR3Z2NHF1VFgrK2xkcjFsbFBSaytNSW5GVFNXYk9LTXowWCsvMUFPeDZWMmJ4TWRCaUExVGtCbVFWVVFCOEFXZTdVcVhWQ01CajNFNFliZVZBMElBendESDcyOWRKTXZYK0M5UTBpUXVKR1Z2VTh0N2FwdkUyY1ZLUmJjbHNVOXBKQXpkOXZXV3A0dVdIdm1IT083c2d1OUZHb1V0RHRma3dYWWk3bEZrazNkWVRqWVo4dUh5d0xuZFRwdStmb0VTQm5WV3ZhbFlidURNbjBVM2k5NWtBemJjdzlmWCtIeTlEZFpTNlNCL3lTa21hNU5xWUM4VDZPaE5uYW0wTlNDUm5wZ2h4eStQVUpQUUg3Nk5Dc0pTOVdaYTc3eGRaWlpPQnNMRExBTGduWm5mbHNvUXpYYnZOSCtGdVZXZnRTNmxCM1BKd2ViSGV1QTRyRjdXNS84dDhqdVJneG82TjBIbloydm4rU1JaY0xaWE9MNUtkNFBMRGZ0RHFGeVlSRXpVbnMwTEM2SnJxSkw3UWxsZzRuanpiRG8rQmlrRUg3NG9iT3p6TGN5cVdmL2dERXhaajhTTTNocDBZN2dyL2F3UExNV3pGNVFCa3ExQXEvbno2TnlEc1BKNnBGbmlVNmFRK3JLU1Jpb2RyNTFXZ1g1Q0xkTHpBa2dZaDcxOS9kS29kejVYL3pDazA5ZTNUbWhLUWQwV3dweW5EK3NnY2hSeEV5SElRVUVRVEg0UHpJdWZoZ0F0MzFLaDdKbUZzWTlzL2tGRGdHL3ZRV1E3RUU2cDlTdkpsNWtNU0JrZVpCbUQ3Vkt1QjNWSTh6b1JTbHQvMHJRa0llSFlIWnM1ODZENUtDU2k1REkxMUVDNFZPQmtiSzJOQ2lUM1dTd1R0bWg1cXNJTWxQZ0RvU2k5czZkNVZzSjRQTHUwRkVaU3ZEaHJZMVhjbWxDRHVvYTlpSkk4M09WYUdsV0YwSkRTeFlCYWlqbFFYaU52ZjJRWWN1NEV1VzdUMUZEN2VaYW1pN3BzdnNnZkhKZnZ5L3l2VlNId0laWlI3SVU2ZzgzOWltQnd0MmhubWlFdnMydFZUQ1I2TmhSN0phdk9EUThwc3M2MGpiRUEveERWejYreTB3RnV5YnAveGlnYnBpblV0bDhuVWlmN0pnaHV6Wkd1aUIyREFxYWpKTFhXWk5oL2tab1BnMnR5bDZrY1pjd2k2dnAveFlQSWFEUjY3Qjdqd0YxU3BVcG5DRXdOS00rKy84Y3NzSU5kRWRGUGxybVpzbmg2NE1TZFVrWk5LZkNPS3lJUS9HbGpYaDJRVmRINmM1bFNYT05ZQzJoQmQ4OWlyTml5OElGZTNrMmVnNlFreEhEZ201Mm5PcXVnT3EyNlRYMDk5K2UyWWdmbnVCcDBhbCtIMVhQQVlITzRQNWI1TWhPSlNZV2puaFJnU3paOWN3bmIzQWtPTTdNT1g1Q1MwYld6UTFQVTF0YTFRVlljUGR4R0x1UDN2akprNVVZcjZsL0lObzZmcys1OUZOR09Gek9PcHNCeTBsRG9tVkJTVi9qZmhsa2xSY3ZyNEI2ZUNPWDd3VFVkNkxDZml4clBOVnVSRzlOVG9MNlVBaE5xMnZJdzhsK2o0Ky91OFhOSlh0a1JNQ0tmR3pyeitDWmF4YmF1MXd4clJpVVZ3Q3VQeWpMdnprdHFsOXdjZjdVSzJhb2hhT0hteG1aQW1tekM3TllUYXJ0aGpobzJFR3Z0cmdqN0tmQSttTHlueVN5UHA3OHhZN1U3UzA2Y2t1UUNwMlgrOGxWOFBFSkpmTG5rNERQUGlYUm1nU2dWTlpoUnFLUFgraVp0N1hkcUs0N280QzlLeDhOTU1NUHJ4UUUwN21TKzB5WjNVdFFkSGpSQ1lrVVl6MlhsR2RORzVkMVd0Z2dKOGFBTDZySUVVaGYrQVcrT1JZcUppVi9lWDNEc2d3a3BDazhvZ1N5YUJ2SUd0TXFQSFZwNHhBWkJQZkorSVN0M2ptZVUyL1ZOeFBEaHVuUnBkUEhmZHdlTm5pSDJpZzAwOG9JSXpyeGpodGJQdUhwK1V1ZExPdDEvSEsxMm05QktKZzNRdElPRU1IYU9GUzdLVHZWVGNmeVZETXdYNmpYekZiTzBKcGJpWFhuVk1SaURhSHlsTit2NlNBRmFIOEpkajNOa2Fla1IxczRCVDI3K01ML1JYOEtqeDRNZzRucWRlSmllSHNjd0pGZ0F2QkVUWXBLVWFHUHRFem9WOHpmMjdyMW91NzRZRjJUQncwK3dWWHlvbCsrUFllbUViaTB6Ry96eTJ3UlBGYmZWdmpkWVRKRUVKRzhyMzdIeWFxbTQvUHlHZlN3UmRveFBnc2ZwMDhRajVhUXdJNXhXOE1lajNhRUJoayt6V1hYVmpZUDdRTkdUbm03S281MmEvaWZlZ2xQb1hQY0xwaVdZYU9qU0R4S1VidnJqemN1U1pYZ3JJNU50WElZNm45eU4xWWpUajRobkIxMEFZTHFiakdmQVptVVVQMjBlRXNiODd5b2Uxb1c4ZVYyZk5xaTZDWUsvck1HdDFNU1FVRUM2cTVOWllWUXE1WmNGUTF1d2twQ1dpVTV5MXNxcUorYlRsREFjUzBFamhkcTNSTGhXdU1CaUhBb3Jqa2ZIK28wMU84a1VWeFBLalV0RHNwcTArcVFXOG8rTzRMYzREME5wc21hbUpkUHc5S09sUldabTA3ODRIRHRPY0JBN3BFY1hVSkpqWjNGT0hoZXJEQTUreEQreVFMR0F4eWNtYmlvem9KcStaZ29JeFVtMzVveW5XUjNYMjdYM3NMZnZjNjdlem1aVE5nOTB0NkJBeG9hdFZ1NzR2bUxYWEtnU3BjUDdkS2NmMkRvaFgwZml4a2dSalR5OVRIaC9PN0NCbVZZSGRDdHNHQ2J2NXJoK1pmancvSnhTL2IwSmcvZXI1WWdDMTNRZEtUNlhBWTNFYmhLTThwVFMrUjFnUWVQeTBNYm1XTjVyc3JFdHpYbmRMeGtlcTNEdXhaRE9ObUF4OFdSRVJsb1lpZ2tXYjA2cDFPNWgrTS93ZklOSW1TRWhoSkV1S0ZibWxZVTBReFVvY0VvMTQxbk9ZTmh6UWViSjRORUZBVGhHTWI2ZDl1QWRyTmRoaWk5cVF5Qk9qMWdCY2NyQTJxcGdKZVAvWXI0N0hONEtoMDRQK2VZV0pIZ3U3ckVqM0tHWDVRV3ZUNEk1SW03WVYzRitod1Urdm5YWS81dE9KNTdLc1pSTCtqWHpDeXRhdXEvekZ3M2RrZHhNNU81NjY1bFhPUnl5M0VaNnRYejhza3I4NUpkbE4xWmJvRU4rNThJbU42ekl4NDY0L3dzVlhCeHFxejIzUnUvZlBLT3JIQjRPWFAvRlVRdUFpOXYwcGdlYjhQOSs3TTlmZjN1WXpmdjdJQTBwcmlyWHJzWm1Kc0JoS3pwbCtubFNncmExZ1ZKdjZRRTBGUktIaDNRU013TlNVRXlKU3FyczFsa0lwcnVrRDhnK0g5T28zbGRvY3pSOXZsOUhlOUlsbGxOMEY4dU9MdzFsQ0ljNmRadWovWUpXcC8yYUV4VFJvazZxM1QxUnQyMUlscXBVNTNUbU5OckJHbndjUDJBYzVKMnFKMEFsQTFYR2V0b0JwcXV4dXh0WXRkUC9DMmk5ZDlWdk1ZbkxBZlpyNzZENzFwSW1mdUNEVjArdUVJaHFkcEV1YUFHUDZ3ai9WRitPSmhucjFkQjFGbE9NbXlWZDNSamxOMGF1M2pZM1VWejB4cW5ZNDN2UUc3L2YrV2NNSThzU3VPL3A3ajR5aW13TXRnOUR4QTRmMENWZVNtQWRZKzNLc3dSV1NwaElFSGZvNFBhc29jU2RWdFd6c2dRZ2VZeGRIekZKM2FjRkZXK2VlUFBGeUxKVS9ZVjlBWXE5YWlCeFR1RndSa0NiYmw1TUdJRGxYdVRPU2taem1id0gxZWU4TlBBcnd4TC9wZ2ExN3JsZ2JGQ3grWlBpOHdMa2NFSGozN25ibUZVVHNMOEpyMFAyQjBhRlB4YnNIUTFsa3ROOU16cW5ZV2RnT2t5WGRqVjZkZVFVS0pPUmJrR3hCdHpQckxPdFc1T3BBU2tYT0lPR3RmRzV6UmIxbzV0cXFuRmxvR3ZvbU1mZVIySWRtQ1lWTmM2VXY0SjRISzc1dmRwN2xPSmNlRHptK3RoSHI1RC9mSWp4RStva25TU2NBYXJlZ3QrUWNwL1ZrVGQ2OEJMRkF4MG9JZmlZbTg3aWEwTTBMdGc1OEUxck54Q09PT0drUjd6SzY4Z2g5V3BMQ0l5YS9MZEtlNm1yVjBYbzVwSTJnOUplaDFEUHlhUWdwTXFTT1VPSGM2WlV0aDdmNnN6TldEUEE3TzU1WkNuSFdWT3IyNFIzWlh1WHROeDRna2lmWW1VMHo0QU05TnNiTzNsWFFyb2RseEFKNy9vdXpOV1BPK2xuM0F6QU14b2pxKzdpOWNVTTF4NW4zT2hIRm1WTVdiQ3hadjk2Qnpza1JSV2wzYnVaQ0M3eGhDbVJDL0U5NUNzNVlJcE5ITzl6a2gxa3EydTF1akZ3cklzK0hLZDd3eUlIeGVaVzFTVTNneHc1QTFGY3NtbUppR3RTdDhBWGh6K2R6dFJRbDV4NUxUQzVnWG84YnZTNGpiUTR6d2JJQlE0YzdEcTBOTmo5RzhHV3dqck1FMEhocWhFaHE1cXRJYmYyaTJDVkxWc09xMHIxQ1MzSThlemc3Tk1MMkFReDJicjFveEZKK2o4bGNKL0FNYkFwK2lhREZTVm0yTFUxOWZvNUFLSTk2TmlROWdqSitZTTQxZFd1UnprY3krdkIrQVZJcmxMTkp2cXBTdXdDdHZ1MXVrOXpVTTlES3VZaXRQeVFnYW9IVm04b2xsTk9RcWg2c3IzVjU2Z2dzL1lSZnRmaThId2lyYjRhc3ZqR2tiV2dveTZrS2xUekc2YU9ROFlmSGN2ZDBBZlk2emExNEZFRzBMTmQwRnkrYStSUXpQK08yVzdiV1dOc21oZTRKSlNQY08zdkZxZjUrbGRqbUxCc1ltWmpmNE1CNU9VVmhXVDlnWmNTemFxUVJqbUFiNk1VMEp1VHpsY3NUbXd4N1Azc2RpemIxYzErV3ZqM045eGUrL0M4dzlDa01MSDhQODRyUlBZN0RleUhsZlVndW1ZRi8xYmluNFQvelQraGVkazFTY0gyRDUwQ3N0aXRESXJ6c0pWY0ZpVGhxZi9WU1ZmSHRKSkJPOHphdHpUbU1EM0RwTGNmYjU0WjdhVFFpY0VqeW5oU2NJd3JDbWRVeXRZZG90czNkeHBRZnFDbHFzY3lRMXJCUU5iRW1lSkJ5RDh0S1VKM2RoalJsVHZvQm1tWUc4SVhSWERHZllMZjhtdHp5Y1dqOVAvTm5hSHgxemRudmxSc0t2Z0M2dVhXWHJuQmR0VGlsYlprWHhXL254NHg1ZkNvb1JMNlkzYmIydWJSY1pPZ2VlRmRVZS9WdjBmNkVTaUNacVpudnRDdFBmME1mR1phT1k5NTRYdmNmN0lNK1hwandpMmdna2FLeE1SMXhiMXpiWG5iTFh1Rm56bUQ0Z3lOVk14dk0rTnloM0lyN3VXV0kxRk5JSjJBdHprb0hQNzA1VUJTQlVrTDRJNGJNc1dTV2VuZTNIbGtWRjlxSXAzUVphQTEyeTFtbjFwbWRhQnFPbHU4NG5WbzIvVnpVY1ZCaDFsSDhhMWoxSGFOTDVFTGFnZE1CMy9LbFhHYks1MDJzTlRkcWZabjY4STJpZm56UzI3Y0xzcWxBMW0vMXo3Q2JiUk10Mldkb3N3c3JMSFBDd0JUVVZYVHB2THdOMlhndW42OG10ZmFDMWpiR0hUb0NQRkpaRlNaUy9ENkpWYjVCSkkvcnZhMUNsVzVhU1hla0M1Z21sSEQzaisrTHFST2lrNlRRSHFyd2s1enpWNk1OV3VsajNta24vMGJCRXZyekhKTjRsVlVDT3ljZTVNRlNnT0pUanIxb21ScURlYzJpYzJ0UWd6VEduUkl2SWQ0V0RtK1pWaU5OeHdTRjh2NDRaN2xwb2pvUnZSb0tNcnVISnorMFNkUXRhK1JPTGF3MkFPbEEzV0xQOXNyamtqbCtsSDZqL09IYWw1R3k1M2RDeEE5azVyTEJ0cG85U3U3MHZuUEYwQ0IrRWdXbEdKQlErQm9EMXJVZ0ZxekNpdFdhT1dWTnhUd0RBQWJ3M0x5dTVkWWZwNStnRFc2OGVJNng1MHdiUW4vdHNKZldvem1EeE55VUgxejJXZUpBVHdxSm5yRmI2OUFaT0R5K1pQOGtuQjFNYnJaUFRvUTF4TEpNdFIyUnNOTGlwSm9pNlA0Z0QrRG1FTC8wZXBVS05xcHUyY2tuUmtBWmh1V0RjYjlTTm1jdXFQME11UjBOQ1FhbjJpQ0FNV0tOVEQrdGR6eE9PZ3dhZHlYWVNESlhjajE4RlE4UXE3Rm5yazZ3dmFLTkd6Z1FvY2VBREczR0dCRFFIRTJycFU4dm9lOTE3T3lteVhJcXNOcnZSN2EzWEo4aGhtbnR2NzNRTlp0T1hTVmdXbGNZYUg3enoySTJLazFCNk10T3JNZzdZOW5lMlFGYllQWU5oZGxnSGtyczlOZGQyKzFOaWJkL2wvV25ZSmdoRVowV2VublAyaEh4RWFPcWg3STd4WWdONXdMVWpLTWtTSGc0dkJILzhiZ1dkR0VqTVovU0F2Tm1Oa1FZU1M1cUIxZDB1VVo4TXllZS9HSHFYclpjVjBlU2RaamxaZzExclFycmNkZkpLaUQyTi9HaVMxWUtLQUdjbzVNdjZLSHpYMEpUWEl3WkNLN3JyMzB2NnlpaERyeXoyZVZVVnZXTnhPQW53dWxNbVozMWFuOGN3YllkTEc4RDhlMWd4NUtGU2FqdUVpK2Iyc2tDZVZtaC9yR1Joc3lNWFNQWWtLemFDSzBkSGV4L1o5aUhScjFLYU9XL3EyeWdaUENaQnVHa3dmZ3FWQ2VrOGlzTmNTMFZsT0I1QitIdjJtUnoveDZNbWU4RDBwUTBINkJXZFFHcTVoOEdicWhQRHVaMzlYU01sTklKaXlEQzdVM3M2OGkxd204VFQzb25HY2cwZXNkY0xHVldjL2tuRFM1eHh0SzNJblFsNU1RNzBSbFVKdW1wN2FvZFQzNnB5Zk1EZjJxV2VWZTlRcWtycTRzNzRPV0VJN1BSMVhpTTBoeXhuUmRhSHFaQzkrcVl4cmVtc280eEF1aU04bHBhSXBxQURPRU1zOWdYOVVIU0tRQkMzQUdJaVhIMHd3NXQwellnNkx1amZ6WjhnczJBM20yRWpGcnV3dFdiSzNCdkowL240THpVTDhlTWNJTWp0ZGVUVnM4Nkx5Y2YxUlUyV0Zmd0daZTFOdmNEMlZlTjVIQmQ5ZExtRzY2L1Uvd2tKMVJQclIrU29peDBLaVJWTlJYRW1UVnRYUDQwcGFvUDdXTHJYYWhOYldlb1ZZeXg2dTc3cTZsQ3pmVWlBVVRUNnJHdUh3OTN4T3hkRDRTSzVSWGdrSmt4RUlVWldNdlNNWVZXdEFBSXNoT1NsUVJDcFVmWHpaeVpkL0RjNWdBTnBCdnpISTM4aytYeTJVWlV4aUdqcXFDS2FaT01nK3RnMUxJUE5NSlI1SU0yYWxWYjh2YVpZUGVObC8veWlzRVJrVUt6MWxURlZMUkNSUDQyTWVXL0hCb0Q0SnlLUWdzYndoZXVTK2pmVG5aMmJzQUJyVDN0U09EUkpxNVhhNk5ZUEIwMENYVldSNlc3NFR3dlRyaE5JQ29DYm44bkpwWVp2dlNBeWkydWdneUJEbVVBeTQ5SW9YZ096SkM1RU5HNS9Md2RNeDVqcVpUVlIrZmJGWlFNdVJMcXQ3Y1JuWkFBNnE1MU8rR2hTaDRGM0o4bW50bkpHK3ZRNjVNem5jM25lbmNYRGtNeWFLZml4ZjJSSjBWK2hwSHMrTGVLSkJ6a2dPMENEWHhydXdRU0lGblp6UmxiZTZBVUVvcVNBT3djVUFadjJFeWtCclNFSjFTbU44aWZNa2NPMEZuSTNheDBoaTZhem9rRHFjL0NWMkRMUC9RSkE3Y2V5MmJQMDg5ZjBRaGRxdjRWRTJZNmRMRDRRd1ZiNCtuZGVwY3puNEZNbE9OOG9QL3hKQlZDa2JSdHQ4d1h2bnVRZXdIamVvVFI2QVRYRzdEUDlPQ1dOVklDM3JkcUM2TE84czdpK1NBRnRZc2tiUHd5RWtoQ0NwODBiWmk0WmdBdjFXV0hITUdqa1o5bzRlU3lMOEtXb1Y0Z0cxelVRMUk1MmhBSG9YZy9lbWFhY0Z2bk1DdHI4aEdsQi9ZTmhqcExTdmRjSmcwOENJN0RoUUZPeFhEb2h6TjNNMElQdVZLMGdhR3VGSmtuVDRjQjB0Qk9oc0g0NDBhRzVqZ2oxbC9Vd0c1VHNaOEh6cXJxUGFoNC9lanJCcisra2FjWk5xR1pkakZ6OTBBUXFNUzVCY201SWtkWDdMK0F4YkpLRnZDQ05sK3F0Zmhna05pa2VhZXdCNVRpVXdHR1F4OE40aElBejZBaGFOU1JJZzlUcElsTWVLcUJ3TlViQTd3dmR2bGoyWEpHY0hSRnJCeUUrZjVKWk5wYzFQZkJYQS9KSnJ3YVdSWXAvYnF0bHozdk1VYjI3UHFXNlFyVElneHY0dkFnWUpQR2Q0TmRZYTlLRzJPc0JQU29kWmZCZ01ad205VlJyTW43U1VPMk96c0lyaU5iY01lSmtQTi9IUGxIMGNKdEJGZ3NPUkVzeHIvVUxEaEhCbEZkWjdKNzRFMkk5RWlrQUF1SGJWZ29KSWtKVDMzUUhIbjNpcFcwYy9UNnJ0OU5pOFdCK0xLL05zdW1TbEJqUTJLUDJnaDJpK1BwZTNna0FqdXdSeGtEUUlQQ05hUWFQalZ2bS85QXJ0L3J6amg1MGR6VytSV0VyOVluVkh0bkFhL1ZtZEhXaXV6UVMrQ0JSMXdudENvNEl5SFhxbnFWYkhTekYvNjNKc2U0QWR2eG1ZeUpKTUxRUlpYcXpOY2laYVN6SzFUNzAyZit4VG1nQzNvKzNFTHJRZVE3OEhzUkg1VU9hWHJGdDc4N3l2aEFCQktBTHptSm9yNFl1cGpLVzlxay9xQkZqSFlwZGdjaXhWTlFmZFVneWpFY3RiUzVZRVJkQ2hRMm5waVZoclF6Y3JSOEZ6cStTUG0remJoZktCRnlDRHErQTg0b21jOHR0VHFZRk1CODRMa0lxcUtGUmtibG9pd1hvdjJOUDdmNDRCYlVZQ0VuVmxmdjZlQ3E1bXcyTEF6bXE0eEc3Zzh3WE9UdG1HbW55NDdHcGh0VzV6QmVUU3JOWUJ5aW9qZmNmdmtmSkRESlZueC9YTWhneGhCcXhEUmtFVWg2WjI5UWc0d1pCUGkvMDdtTEdoTldnanJ4YWxNZEtsRFRFSTQvMnZFek5vZVMrUDNCQnkvV2R4Q1hQcSsxZEY2M0huYTlJL1Q1K2ZoTjB0Sm44bzkvSTBBZ0Y4NFVDTXJPVG5uQU5vS05nVkNLeHVHU1BPUFdwcGl0VVlab0swaWY4clFlK2RYZ214cmcvK3JJUFFLSWF5RVBCeHQ5YkN4NjlyZ09CaE0wMTR0c3VxUmczZEJhaHc1dkxid3B6WW9oSzI0WHAvSHdEbWQ0ZGh3UEhUT2xvTS94YlhkTGhYVDFJaFVNcjhoMWhnRFByQU13R3U0RGxZOWJmN0E2djBQb1BvSkhuWTJibXlkSUFJbGFxbTNQNXVHVk45V0pJdC9Nbkd4NzZuc0piSm1YbDMvWFJBNUVEaWVhVktnMHZMZlpKbVh3L1AxVUMzVFlaNHRreWU5bThNR1NaY0VjT1MwN0dWOVA0Vnc3QW5VNHo2dFFXTWp6L1JQWDdCVkhiU3c5N1IwOTlZbzVqVzcrZEZ0T3hTbVNTeW5jOEpwSjl3dXZUS1FhYXpHMFM0MkNjenFkRmtDdk9BMzBUcldFcEVhZ0Z6aHhiNW5KMTMwclkrcjhmWGhxZWkxRzdRc1R3ek1UUXJKNjA4ZFplUWkvYjhYTmc5RmlzQk9Lc2JDWGpsSE9kVDFySFlua09wUngvWW1vN1R5bGtzN3AvSjJ6VDJucHVtNXBIRE1ja29lQ040S1ZhaDk0RTJhajlvRkNvUDA1OFk1OUxDTWRicS9ETTRFb1FwaHlhMHhuTGhDVit3OVdBY2N1MUxiNGlVN1BMOFJXQTcxMTVYd3B3Q1NHbHN0eGFRckFidDF2Q3ZzY25ZTXhmZkJjVytLT1F3WlZlcThLZFAyMWY4aEhiUkJCK1JNaFdYaDNQem56ejVWOGs5aXJwZ3lrbVVEL3p4OUwrUklYZ1QwcS8vVVRaY2R0MDhBTERLVHI0bnhTeTNVZHFZR29tRXM0bHJoWURqazJjcmdVaVMwREM0eElhZ1JDeUYzLzlNdWtoZzVMaUhuelZVbjFMRmdWdmxkeWNVYXVqMU9yNVJ0VFhPQldsczg3SXd6ZGppYlhuQTlzd2VLQmRRR0tsQ3JjKzlTdnVXQ2h4SUhmUUhNVWN5WEx3UFR6T09maTAvanBDTDV3NTZremsyeFVNRkhLRzU0WGhGbE1GdDNvS0NFUVpHSjhnZ0VGVlBpZEV3ZUVoczVqMWFPZFdCNnZwazRvUmhvalJnUzVCR0xEa1JOYktRNnNlQXFVN0JkVUdqL0sxNlducjNiM082b2JRTW1DcGZNcmhWeklvWUR5VTZHSlprMjNWNjZpNUJZTHlSSlo4S2Y5cXRLRVgvZkVrY2VCYjlOa2FKWjdSbzZ4cGRuTGVYWkhyWHZJNjUrSWlESXFhSDh1TjZaSUUySUVlQUFJelN4MWV2OEx4VVJPRVFJWnBUU1ZJYWFud2k4c202V3lHaU1rblVtS1ZLZmhDaDR2OEdmQW90a0FidVVVKytXM1pxa0F0MVlvb0RMQ3VlcGJzV2oyNndCY0FUVFBaSERMNWMveG5DbEluVzhjdlNYcmYrOThndXpTWWovZEtLZTlvbXR6bkFVOWt2VCtkYUdIbEhxdzVYUXgxZm9BcjdvVG5ISmczTkdhUEVURU93TEk2Q3lFMlQrRDlkUVJHSHgxZldUT2MvZGZpQmNCQWNtUXVDWGNNMi8zT0V6UmpQcXVOa0VlaXNFVnBRREtUOHJRREh2Q01mK3pJNUk3M3FNc0hpMDNCcnJVYVI5dWRxQkxBVFBtc2xBTWlrcHQwMzR2SFpnRHMxTm01TDl1SjcyT0tDYWtsRHl1NFMydGxYQXI5aFJFVHlLSS9JcG4ybGZ4bjZ3cjdVSGFid0FZUDM5VjR3dnVYbXhGQ1Z1bGI5MVhVdnoyVmxLZzNjUnBua2pLOVpJbW11UWUzZXdsZkdXZWFOa2NFOVVxUWsxS3ZxVksvZmMvM045WnY0bStOd3pVWG1DUEV1bUpkeUtVU2VaOGNMUmlNa241T0lvMkhjWkVYY3FVM1I2TVJZb3d1WGg2QjNXYUl2Ty9uWVM5S1NEb2paMUQxNVVTK3ppdlRaRHc3UFErc3JOckVyalZxMXVLMDZzZENIVzFuNmFuZjZSVk5YbTRaQ2FxT0FsbmtHU1NpdVB5b0t1WUlTVGFSOWF5K2RSNlJvM0tiNHlWRklJbmc0VnczWDk5ZjFRRDJWRG1kR2dZR2Yya1N0YjlMZy9Dd3pYdW1RSzlIa0Zac1hTVUgvTVUxSzJ2QjFRSlFiZDN2aVJ5aytTT3pRT3FZRGZ3cDRnemlGeW1tVFMvcTArUFViRTZONzBEVkk2U0s0QmgwdVBKZlZ3bkhMdWJ5K0lwdTBqdFdJZ0lsaUJGOU0rcnBncS9QQnZPN1BXRHFjNVlVWm5YcG5IZEp5N3Z5SDRlSFBBOFdoUTgwUjdyd3lBNHZlUm5ZTkhCcU9nWWdDbE9QQnBHSEVvZU4yWUs3MHh5VkdVaEh4dUJRc1EvZHpZQzFzVjZQSlo1a0ozS2orQ2kzVk55aWFZZlVLNU1ML05tbjh0NXZndEg0R2V6Q29PNEJXcVVLeFFZOVI0eHAxMXpTK1hoQTdRZkpVR1BGVFNaWVhJQWxYQjNzcGlQbk9yMFc0UGRIRzNzNmtvOXE1RW9rbXc0aStUcU92TUQ1SmJWR1dtS2hyNjNKYXM5SW5ZaHUvRlh4b0hXQ3AzdGlmKzl5cEtNZXUvMHhreTYzTHBCNnN1SW8vMVg2T3JwYWE1VHRMUGQ1d0dWcEN6bnR5S0FVdzBjeEV3aVQ5aXVwMHFhOFFMOVlNZFpZdm82WG9wRHVNMm9LSjlRVGlIRU9uRFhWdEplT0RPNi90aEtyclJwL2RDWDdEQzE0RVNHZW0xOTk5Vnp5ZjRqWlUwOW0rejVLVSt2N2tQTklkSjI4U1o0dWZtMnZxVXduZlpBZ0FVTWJxRFU2QklNeTcrN240ZlBKaVBZbE5tYWRSYVh1YjgvclBQK05mTWFGbXpmemFRbWdmb2pCR0tIa3NsY0M0b3dBTkxJU1R4N210dnRpOG9Tc1h2NWthUy9pSkREbEZ3SGtGUEZGRllrY1ErdytYWUlZQUk2WXdURjg0My9OWUNoVy85RDZkTkRHaE4ybTN6eDJjVm9jMllLZFhvU1NQRWUvOFU3ZG1wZ3hZMDhqQkgwMlBuN1REYkw4MGNXQnlxSWhxUXRzcWt4bDRuOGlyWWIydVJxNlRPU0FVOWVzMldLNmoyRGYxTVI3clJRM21DTW5xSG95VVcwaWxJek9mT3pOY0tjYU5pUUF0Qy9BZXZqMUxQK0Z6M29KdWQ3V0w3UjB4di9hYWVGR0J5V0E2K1N6bWZCVklSam1sdGJzYVlibUFEcE5VVVNTQ254RUtjVFB3OHRybThjY2ZIWmd0MzlzYUV1WjYzb3JwUjhXQjA4QUdpcjJyVE9BM3ZWV3R2Ry9wOWRXYUdpUVZqUWtGQ2o5WmJJYUhOOUF4NnlHT3pkdEova3A4RUE3Zm9LK3lmbFhGdS9PTmZCZHBmVUJMa3JiUU5hQjljanlBMXNRdXd4SUZtaVp0TGV0aTVQUW16b0Z2ekZObVg3TTZIQVoyalBkVGIrbnV3YkYvQUZCL25OUHRZOEFqOFJYM1MwdC9xM0piRVNNT0ZBU05RcUlqcFNUSGdLUEdPalRYcis2bGxqQkFBbVQwVnBwWVZHQTkvMFNGYlFYRlRQQ2dScmpMczhFU0VWbWpDRkd1SjQ3dzMwUzdFT3YxenpaM0tSWUdtWUw0Q3VsU1M1cVlBSUJGNlJjU25VUDJnNlpMRVAySmZkQStCZUtZdU5TNEJiNHAvc0dlVWFhZjIrZ1JTSUkwamo3dGhuMXdjVU9LV1cvREVtYWlueGRzenV5NEw3M0p2WnhUM0lqaEJSVW5OVXdiL3BTaGJqVTV6ckxDUk5LeWtVK0JCYWt3SzE4UWttVjk3VzlGck83OGpFVDJ4aUhjZFNDV0pTc1NFU0N5OUN0SVZJSHNJZHlOYUZ4WVJkckp0akxxR3JpL3gwdTdXZ0tyQWxHUXhqWGoyR0x5ZGM5YW5CRllTZm0waEJXbHBDelJ4dElmNURocE5OWmEyQlZsNE1tK1ErZzlVQ1FZV296S0NCWDNsU2VQWTlEZzRTZEdzR01GWUZ1Z2J5a3ArR0pGSXB4TjdZKys1a2RvMXZpeUdGR0NpZVk2Z25GTFN5eVZ6YWZsamF5S2NjTHRQY1dTaE9NaC9iQWh2MmQwKzJ4djl4QkhKSkM2SXBVVEJ0aTVJTUJGc0lkS2dHL2M1ZTh2ZFdUbEx2WDRDdHVNOE9nd0Y4VjByak5nSzJONVdZd3c3SmNSZmpPRmNlVFZ1R2dTNUNLU1dQU051RHRvUTJZMVdQSzNIVlYwdXRUeWllVlQyVUVhRmhqajJSa2w0aWV5dkVLWm1QQ1N2UDUwK1JmRFRFdW1xY3hnM081cDRZcEJTVFhTaTQ4NC9uUzhsbE9obWFSaFdFZGx6VDBnYS9wZG5ITFBhUlFKckc0RW1KNnFSN3g4TFAzN1pFUmlqRlU1N1llMWxXMnRHZlhRVG5UbjZPM0Z1cXYzQkU2K3hlM3BNVW4rdTFMb2prN0VZUlI1TVFzdWRkZUk4cTRxaDNpTlF6RlV6NVhRMmo1T1NQTzB1UjRNL0FUdUp0R2JVb3I3UjRhSzNuSXIrRHpzVjQ4R2RxaUsvbjQvUGxHd3lZMzJUTmR5QTFjMnM3UER1eld3YlozZ2tQc013TytTT0NIYVZHaGUrbVdNelpoS2FQcUp0a25zY1lVeGo0bkhhalJzVXRxc0VuQkZDQlhrckxJN1NwQmpiNk1pbXpSVUJLNkdhYk1FQTFybnl3emp1VENPbEV0dGpsZWlvSDd6dXNXcFdTK292NjFQMFhWRUJqeWNSdlUyRUtXYnpLNUo3UWhPRm16TFg3NW1Ga0toSzJ1S2dvMmE0WUVaZ3F4ZG9CeTFtcElPV1VpR043cWE4dFc5RnlhU256K3dHMHp6bDliTjR1Ym42aytlY01aeEJyaFhQOHRKbWp2RXNrZmVsWWZFOGxPaGhTaDlZbzQvaE9kTEtIRzlrS1lEQlY5QzdmSU9UTE43QklGNDI2YVZ4OVZnSjNlbUNzSFNNY0NzUzRHRUpPTGFnSEhzbVp4MXFpWEdmRDlUNk1SVCtqUFdGNTRTeW1kZjVlK016Q3ZQRGV3YW1uUjVCakczN1pPNG5oazdBL0cyNjNiWWxxdXBSMURxMW4ySUNvRUtzeE43cVlnd3hTRkMwa09iMWxNYmV5Mjc3ZzRoamEyMWlTaTc0ZHljUkxGMkZnb0twWlA4Wkh4elowYnFwa0xYMHk1cXNEMHFLeUlDSjhQNkJ4bGxuQkJNTmRuVUhhUUJKYlAyMEd5anpIbytwS1ZrNHF2TU14TldiMXZFK1UydCs3ajk2V3czUWtKMjlXK2VNMnFDNEZydTc3YjdNbEloaTdpQnUyOCtRVEFWTnhsMFdscHFqTktLNVBsTkZaSmRyQ2lEWTJ1SjgxQ0YzMjJkdFp0Wkh1R05Gd3Y4VVg4K3N3ZTByQytMeTdhSDFmTGFXNlZjd0ZwZmZUVlo4aFIzR2MvMDhWTWZUUkJkVk5BM2J2VnhYLzkvQVF5eU9kRGV5MjJWZDlPczcrelhuaGlKL0xib1Z6SFF4NVJUS2pvSDlxRk9ubE9ZNStXL0RPSFdiUDRocUc5VWJrQ2Y4YjhOeUxHMGoxVWhzRDh6OWNjN0p4WldoSXJicmY4Z212Y2pyLzhrbDVuTHhjMmZHR2l3SnQxSDJ5WW12Q2tjaG9IR240WnVDNTNDNlh1cGpsOVk0bEpaRi9oaHp0VFY4Q0pIRGUzQS9qUjlOamZBRlAzVlZ5Q0NLdmN6YmpWTFpZc0ZsTVl3SVZLVVIyWlhwYVZoQmNncURqOFZWcnFmZ2xDV1FQdnpyRmtKcG91alBzSDhCVU83K2hCVi8xMlFVaHJ5ZjlGYlZhbXN3V3FsSlNnamM4Z3E1TC8rZVN4NS9kam1iR0hSMmZ5b1FHR2Nnc1hXSVdrYjBmWThyWmlWOWE1dmpmUG1CRlFESE4zZFZEa1p2bnU4dG9JMlhwR0MrdmpyTGVhaHgzZ1FxME5BMGNBVHBWNGkvbUFUL3cvYjUxWHZGVEN0N2p4TGwvOFBwSnVwaVQxN2Q1RVdWWEIwRyt3Z3A4QWFNcHZKSnM4N1RmR1dzRWdGYVExRFZMTGRib09mb0l0U2EzUWEzOUFvTy8xVVdJb0lYU2dOUTEwQWFpcm9QL094bE9vd0hGeHkvRU5NOG5EZ3dpUk9RQUdhQ0p1L3ZtSWFNc1lVUCs1V28xd1dES0UzdE1OcW02aUFqYURuZzdCOEw3SmpDNStKRmI5MnBtd0lpamJ4WEdkQTNVMkFEdkE1a3BQZnhsWloyc3FIbkdqZTQ3MStzTDhlU0RvVHJ0eG1RNVlHZEoxMEQ5WXhRblJHSlUzVjFQbmx6RHpkU29ORkZUYm9XQzl5NGg1Uk5OKytlb2M5RWZab0FWR09OVzZOeVBuMTRmSzF5VFpDbkVOY1MwbXpkTmF6ek5ydkVsWTRYYWk1VWMzcDF4TXhCR0RIT0Q3ZmVEdVU4UlNUcTk4Y1pKSjVXdnVpWXpUNCs0UzNzdWM0bFpGUGhiN04zYVR4TkJkaWRKYnJtdU1EWG80OFcxS2dybllSNnV5dUxWR2J5dmZoR1ZGcVVzdDJ6d0l4REw3U1pQcll1NEZOS25jbmVVMGdiVlNIcldOR2xOMHNialVlVHdPNjU5eGo1dnVpR0N0UVFLMFJpemg2eXRTN0RYOFBmQ2Q4anJwT2Uxd0R2OEF0cmkwNVdaS01HNDlyaWR3OWo3bzJWdkw1UGxIZkk1a0w0SnZybkxZS3dPaktBM1p0cm1jMXg3TU1hRmNMT1lFcmRNTXUzSzJEYk1rRDFjbTk4UEdqVlJGVDQxRDZpUjc4ckQwaUNudHNVd21jSGthR21FOG9nT0xqUzFkeStqUHRCd0dubFZva1B4U1ZrbVJJbEw3NVVOM3hkYmtMQTdjcWVxeHVBa3h3cUN0L3B3Z2I1cEdQYy8rQWdZVzc2NmdjeFFCRVBhTHZtTm5zYmwxbTg1TkVLblIwd09vZGw5V1N2NWJQTmVINWZqT2NwN1RQYktxSlVwdy9uOHY3Q1JERDdYVGVGYzJqeTdpWHVjN0dnc1JFYjYwNWtXSEhPc3V3UGx4alpaYVY5VFJSOXRtR3plbm0xQzBPQjBqL0FoK3Z3MU1VNm96SnNJZ2FwekVrNHlQeEpFZHM3Y2JFOURiaklvUldLY3pseWIwcElhWFBNT1lXVk9sSHNlQUVUS3NOYmg2ekZCV05sVDE1eHpwc1g5aGpwb0Vmb3dKNjZRV1NIRndJcEsxb1FpajExZk9HbGRKWWJIUG9GKzhmY0FjSXpiTUZicUZ2NzB5SFVqNW5wQUEyWUQ1WWViMWk1SGkwRGxzTHZMc3ZBZ1Q5NmJVZlBpcXB4YlI0YzV4cERxc01TNkNhZm9qRjlUMUFVenUvc3U2cTI1ZWVHbU50UmdPdXZrTEl4QmJZaldvNEJ1N0M2OXU4aytvNUJBNkhoMFQxTkpzdHVzS2MwWmdyaGQzaG05NERxSnpONXV5VHVjcCtERUVwVFFrVm9KMzA4UThvUytrc2N4a2hEUHJjZi9IV0JKSVhYb3UvSXV4QVoyL3djNGNUcGVhazJPNklhSFZrK051UzZJUmI5ZjcxYnl5TGVMY0o2bk9xbEZrWDhjRnFTRUhZVzBpTDFLRWN0T0tNR0hPMzJlbUErOElneG1CQmhZNVRpM0UxR3RBZUpiakwvZ0F1VjM1MFFhVlhud0poQ2N2QXA2QnNIV1grd3ZHL3hmaUo2WHptUHJRaGNuRnJtN2Q2KzE5bElTMWxwd2F6WUh5dUgrTXNpQzFOUHFFa09UTlh6WmtJSW9QUDk2dllEWU1MeDNIbUVVY1hwSFczRG1YWmZ3ZmpzV1JoQzRkbnllak15dFVaME1iZ2FmRUtQdGlzT1ZnUFdyRGJjRlJTVklocmN0QTlZTGpmcnhKMGhiTWpVcXp2TU02Y0dwY0prQWFUNGdMT2s2NWZPbU43Qm4yS1NEcWFFZ0ZJb3IzVndrYmtpREhNTk5UTVVQVkc1Qm9aWno4UzFFbXFzSWNURG93cjA2bmNUUTBLTHdsSmRkWDIreHA4c1lCRzJBZGsxcTc3S1JjaVIxeVVrd01kelkyK0F3QURPN0hhMlVDY2toNzJQcHArbUtGWmd2OUFERXYvRGlJbEJ5VFdycnZGQ0NPVUxab0JMLzd6TjBLSDdGRmNWR3llcERqNERMcS9SMWVqbnl1MXV4QXNGcUJydVM4SXB4emRONyt1M3RVWlA1QmUzSUZtUnM0ZjkvTGRJMVIrMGdPSWJzdERSRm1WSlJKSi9qZ3g3dFJYa3FGTEdNK1VnUndsRWZjVjVua1dzMGJaeWJQazZYUkdpYjZ6MmlEa0tUeVIzRjhZTnd2L1ZJSXB6aEhpOW5zWUFTNVhzRnB0OWczSjJOalZMSkhSMUJ2YjFlVFJVMFJUbDVQcXdnZDR5dmo1UTVmR1dtaTNhYU9ZaTNLRFM0anNZQzZWb0lsaVh2NGI4VjFTZU8xVjFRRW9HNlNtNzlyZjJGNndNczhSZHF0aktDWmd5MTdXeE4zV1FrM0NaYndpMFA2ZXVZcEVxRkVtTG5iNG9xTENmM0VqeVR5eVhKdkpadXdFZmhGZC95VCtFN0RnUVkvcCtTUXFaU2lSY1p5d3BkK1dRRTNpVWVnOUo0VmxGSEYxclR2OGdpbTQrTWJ6MzBQYnVtd1N5RVRWcFYwSXQ0WDcrZHdkOXN2dE5SejBRbzhUajJidnFMdXBaWXUrcktYM0JRbXhwdFFuUkVObTI1MDJWcS9yYi9UNHJXN0pxdE0vYVZmR09Vbkt2VitaWjVwaEY1NEN1RjFjOGx4UFczSXFVMldlS0psVXMxZ2l4OWpEd0JKM0JlbXVCUFVRR3pBanpFMmdhOTZGYVJNc2VCTzdTSWFKcit0SnN3cnBtczBRdGdPZHZPU0tMK013U3dNbm5BV0pzb3VLcTlmeDBDUXowRThrTTFRa0RidFNtWjZlMTZhUFhRMEFCb0dkZUp0VXIydnhneDFmbTZEY1F0UzUvMlBxY29NUWVXVWcrbmRwY0R2QmdQM2ZGcHp1MkFPQThONG9zVC91TmJuYU02bnZmbXI2aEpadjRkc1QycHprdU9sbmdma0IzZ2RlUm02enkzby9YcUppcWJzUXk4WVkvU1l3YmVRSXI2aVI3eXQ0TFRyeHJCWG55R0Rib1dCd3VnNVppUXlncWtRMWp3cGZPYnRteG45VVF2YW1NeitZbXQ0cFJob0VGZUlKeWRWTUpCc2NYOVZiM21MWUwzMDlwWGV0UlRjdlc4TEorYmZUckhhZ1Q5SDlTM1hsVlpoZmRydER6Y2xUMlFEQm5Gb2p5RlEzM3BuRnJaZE80L2RkMmgvZVRvWFIrK29CdkFIOEpDTzhlSVhtMWJHcVppczBBc2JIYjByTDVCeWNPNUNCbC9ncHFGOE9YWHdkQ2lEeGE3dWIwRW9TYStDMVI1U3k2Z3FkS3c4QUZLaFhHb3VFVFc3TUNTZUZhR1FRdzU0SFFTZjZpT3drdzVBRkNsMEpXN3VuQk5IelRjNzkyMDhsNW1obFNMam1wT1VyRTlESFl2ZVgySnBxN3JvcURUVVZUWCtxZUwyLzh2NS92SXRJQ1dyMW1sN0YwNGs4VXlSMXp3d0s3UTBLSFZRYXJjbUdGaTVCVm5mTWIvRVZpQkZGcXQxWlQyZVYrK2U1TlBjeVNJa2dQM09OckxYeFJ4c3FybTlaWUM5V1Y3Z1liL0FUd2tzM281SmJzbW50czVvNWJkS21PeFRpaWRCdG5GUWdXN3VTcHVSZE51TllYYW1ZdlIrRTh4WGgyUXFRQXVRNWZsZTEzSHVDM2JXcHErZDVtNWVpQ1BSTFZmZVpVQlpud1RFTHRaajFNNlQ5ZUJsaWcvVTNDWXRocUpMd1NUZUhzekNBMThXNlgwbVh3V1M5YkozdWZtN3g2Sm5LUDVJV2l6SnlCRDRKRWpCbjlyQjZTVVpMTnRQdDB0ZmtaWEI0YThERUpzcmRncjJBc3AvNzBJUnlDekZoOG9XcTd5NWdSUlFIVDRHcmt4Z1F5bXdiRjMxK3hpYVJTYlVwalQ1QTZZUkFycnlKQUZLWGRaY1RFMk5sUHhIRjQ2c2pKdmU0Sm1icVgxTE44K1RBdDR5NlFna1pqOXMvL3daeGU3MWFEaVRsc3Y5OVJrK1B2NkxRcnF0cHNBR2tMR1dsTVh4Tzc1MytPRU50d1lwd3hUNlh1eEpuQVBoZ0I4QTVOdy9tTWxXOS94RTF3dnViWmZTYU9jRGJHdC9uYUlLY3VkaEVqNWxMZ0hjMjJNZkRobTQ4Y2paS24vWVllNDdsL2RST0JrWHd6TElRUHVQbTl0M2U3MmZZVmVjalM3d3NzTWR6VkNzSXNULzVPOTdST1YxL3JkQmVVNGFxZG10TzR3b0NPZThZbkJaTjdYVUQ5TTZsaTE3MU9PcGRYcHp2RC93ZG5pemdyekY1MFBrbU82eFJEUkxzYlBacEdyUk11T0lCaWlHMWtNaUp4US9Rc1JJTXpqVFVvR2xvL09yRlU5TmFwYXhwNEFrckpDVUtqV245QVIyQzFJVnhXRjB3VVNYQTVEZWVCb0UyREF0WHhoK3FnNVA4S1VCSitjT1VWLzlsUDl3bCsycFN4M0ZwWWZwdkxvTmdUSFFBSGdsNU5XbzRtb2ZIVzBTRmkrM0ZDL2R0L21HVlhiSS9UQ0MxbHR0bWhYMm9oV2pHRWkzNC9MV3FXWE1zWDh4aGpicThDWmFodzdZMitZVzVGdmcwU2NHRDBCT3hvNzdGRDF3MWxwQ0RYNE9MYk1aQzRJNldOdUhLblFZNnZIN2plRzJOcnBWcEFZWUJyajVvYzd2cEw4TXB3U2pGYmY3Rm1uOFpwSjBwTWRyN2ozMmF1bXloS1YvM0lLRDI4RUhjV2Nrank1K3R3Y0ZjNkRtZUtMZVpoS0pVNE5JVzVNNHlhc2VHL05QWDNPcTdQbm5USFFiWlRMaDEzS09ReUx1SURWMk0rOXVRa0RtTG1nWithem4zODZkYXB4bUZ2RGZMWXhxbDh1WmUvblJuWU9HMk1PaHBGblRybU45UDVob0IybC9FZmxlT2FUT0JWNms0ekZrR2c3ZkhtczN2OEpIb21DU1QyalNudTg3SnAzTnhldmpRRys3YWxvdEpqcDZvemczU2lPdWw3SDIrRDJwUWJ6RVFlNVpwdG5ZdHNBSTBiaWtybTFURGRYRWZ0TXlhU0RENVRWZklLNENBOTJMeHpCRzlsa2ttSGVuMzUzV29sb3FCeVNGdUcrZHFWZkZENzJlVHVJZWVaWStoK2p3ZVBrK3ExT0RDWlVyZk9FNE94ajBZWmx5MzZVZlFndy93VnVEeVRjQ0ZRM280V0VJODVMeHpxcTUwUEtlb1EyN0s5aEpnR1dsbDNjSDFEbWJaY205U0wzSlV0bXVONCtCMk5HV2VWQzdhRHhrZVlkb2FZcmdlQ0F0RW5XRHFScFFMaW9TK3Z1YmpkczBQV1RvbnhXTHB0b2EzQUpoamQ1TWl1QnBxaFpLQU1qNjl6cmY0WkVqQW0zbHM4ajBrdERDTHF6MXJEd2VOeDF0OHRlazY3ZFRhVXRhQlhQSldEN0VUYmE3Y1NGU1hLd0pTUklzQXkzSmdFR3dQc1FIN0ZnaVplRDMybVpEME9POW1mTXkxRU5ja0NaQTRVQUM5TEVVdEllYzJtQ2QySGcvL1MyQ05XYVhBcVVtY3N1UHdIeDBNdzFmeUt4N29MWk9YVzZXTDY1QjBXci9GVTZ0ZWo2YlBHMnkzRklHQlI2S1NhWkRmOUtmbm0vT3B3d1BRektaZVQvMm9qcnNpT1lXOUR4djR3VTA5ZUtBSTdBMG4velZ5dUxpekpnL2JNdnRsbTRiUFYxZzZBRVpIRGQ4RWkyNm1uRDBmRG80eDMrd1N1Um44c1UwaUdsK2RGaDZubHpmNDMwZlVwdmFaMisrQTdiaGFwZGNTV3h2cWZtWERHRzNuK1VjZDBBZ2l1TmhEcCttNk40dlB5V0txV0ova1VuQ0VrTmR4V3A1bEVSVk03d1MyNllpWHptNG1JWkZ3S0pvNDVFaGhOakZJc2JodTdiRFUyaXd5RklZUG84Z09SMS9OUDhFRFpJelpSUWpIYTJuRFVtL2kxWHVqNzFPb2x6cW0wcWVGY3VaNmZVbFcra0k4VnJEdFU2aHRoQXNKOHVGL2Z1TmRkbGJ0aytBMk9pK0pIaG52QVJIUnRUUFRicHNsYlczY0NuNFAvb2djWkxlaEhXV2FqSW1jU1RpR3JmdEdmekh4OHhkMnBpWjJUQWFSVFVlNWV2RC9FejVYL0NUejhSbU5mZEZiRzAvOXJrUEp2SmJXc1hlK0pMQlBRdTBMQWx6QTVBMWV2aXVwVzNOQ1RyNUVKMU5uQ1BOeEhDTXl0UmN6Z2RxWXNxOXZuVWtqVWltdDNEaVdkNUxOdXg4RXVpMkc2SWYwRFdiNG1uSUZDcW4yU0dBZWUxZEIzR0NFTHBNUllHQisyK0RoT2xkb2xOSHdYVXkvNzNYOHJRWm0vU2wweUdZS05paHh1em4yUlYwbXQvQmh1NWJCc1M0aE5iVGRXV3h3WE15U25ja3p2dDhRbnFhalpBMVdQeEYzbmhRN1JLS01VQTY1Q2dGT0NZKzdoWXdrK2lQbEZIckNjTkd3QVBLanU1YjdkVEN6eWdXeUpzMmpVNTFwbWRCa014T3puYlRNRjlSQzBqNnVFNVB4OGlPcjVxR0dmZXhNTXg1eVNMejdOOUFzOHFlTmFvN3RraFg0QVlmZHZnY0ZleFExYUdxOTMvSGVDcTFIOVRkdENRVDBQbkN5Umx4eUZoTGRIbzFmVXJzVTBXRFBBbldSUHR2MnhhY0FmVVdYV2NZN3ZGYjlUWW9XZVU0dWJzeUhtRUh2Vk81Szg0ZUJ0UWtHa3BpTW5nV3lSclNnREJ6c3FYK0JNajBhMC9sYjBlNExneENqZ3Z6YlUvem9Zc3FoS1VhSGtVMjFLV3dLK2ZDUUIrTXB3bjdkcThYaVh6RlBLRUFPQXVsSDY2bXR1eCtoZ2s0b0ZsRURPWWs5b3FWTUtLYmx0Q25yU1NnbUx2aDhFVC9VaEZTR0ViUE55MlRub0NDeHZld2t1VUVscERjZWdpbCtKK2ZnWGRyYVBZVGVCemMvSmRaZkNwM2JDdTFmVVdSMUQyQjh0RmtvdTdmckI3RUgrWDA2eFYvakxTNEJwQUpjY1ErVTFvSk1GRXRNYjlSdlZNY0ZBWVQ0bjJTYjRPVEg0UityRGRocVBMTk5xTkNsQzUzdDhiYnE4TSs3RkJxUUlnSHNwMTVWNE43WCtxS3pVRlRSUlZhOHBKSEZuWHh6NnNRVnBBZ3pvNnh2WGw1eWhTbndWNDRJbDg5QXBFMHdUcHl0RktjaVZaamFHQTdDb2VZakNIL2xWdGpjckM2WUhpRXlVZmFqVGpEMTJ6aDhnaHJWSjBSRjFqZE01SGp0ZUlhMTh4RzFkQ1ZXZ082NXBZSlVuQ214NW4xaXlLaTVnajU5NVYyRnN3eXVpMis0QmdBMUU5TnhaRk1EeXFFckt5b0JUZ2p1OGpiWThCbDBHT0dRcHdBVnpSNXYzN2JjS2FvN0gveHFiaDVYOGpsaExGK3lIbkQycmVOL3QySDlEVHMzT0Y4TFN2VU4ydG9iL01kcWhpeHMydjBremNlQW9UL1U4MXZtbWg2ZjNMKzhKZDdZZlVncmF5M2U2b0ZGSnBNMysxVWVkY0dkQzh6ZWJOSXd5U0RnZzVMb250blZhRk0xS2FyZG1wa3luc2t4eEtrQmx2VDJjdmk5SW53L0llZDBzUEIvSjkzOGxxczlqRGV0MDVpWi9DMS9pbTBON0lscmVkaXZsVnQ2a0hxemdBbEVTSXV4MTFRRmEyNFZvZW52ZHF0NVhFZndkV1JkYTJUZTBjTnNvOVN1ajBabnZvaXNyZENoOSt6bVJNWnNBK1FuZzNzYVJFRWRZdHpseVdYSHpYTERrVDFEeURjdXJoRzFyRGs1b0F6dFpZWE5QenFWY1BCenV3RlU2akNpTHd5NlFKN25YQ29hSEhNRmN0TFZpQWRtaWpDcXBhdzdFOFRiYlU0NjBnTkZmVTdtTTgxWU10OXlhR1ZFeUlXUWtUeWNxMUpiQTNrUVpMK1ZONnhuc0lKdHVGSjR2RnNJM2xDN1dMZWZ6U0h3cFpPb01PRHFqQ0JOMXRjNEUySHExbC90MW5NS0xSRXZLZnR6aGpnWmRyNHgvTFliRGJxL0ZvUStmUDNTQTZjZGJKTmhDcWl3K2JYS1VBMFBxODhHdkNnSUJ3aXNxbkJuZ2JtNDVtcEVROG1UdzhXeHJtL0pacTgzektaTERQQnovanlaUUtkSG9tTXhnRGJua2pGTlE5UnVUSHlzVklDcVFuYkh4MHpLRFpUSVNFNTQxRkRZOHFYbksyc0NIWEtvd0lWMEFqSHAzdThsTWlqcFl0b0FTZHMxem05MmdxQjVqeWVjMzczUmlnRittVFRnMmdzbkpOcUZya2t3YzBoazlIWFFGdVprdlFjNWhSNWNpMVNKM1VCTW9Zbzl6N0lLWlhycmFKaHJhUGhvWW5mRlR6bU5RV25FQTJYY2N4NEdUMTE2WTFPcFpvTnNnQnRTVlVqSmxDR3V3WWZ5NEFVMXRuWlhFd21SSGprWDhmS1ROSWRkMUhnQkw1Y2hPNVpYdFVTam92cnFGdFhxeHJUUmhMQW9QZVVlRnYwYTE3eVdjTVU1Yy9XL0wrelBlclRJZUJjQ0dkRC9UY3ZNVFBkV1ZKeFdLQ05CaVNUOHgyY1NkUS9pdGZUL1hINDBIRVBkRUF3TE5GMTNOT1NKb1BkMHFvbkhRMjlLVnEwdFQvakFER3BTbkVWbFo2ckhjYVd6ZVEwL0RqOENlbEdRL0lweDNjcSs4dEhaQW8xU2w1SXN5d0hwTnJacW56bWF4dktCOUlsbGFtaHVpWDZKbi9ETnIyQ3k5cE1oNnYxVXdlMi9FUk9ldGxSNUcxakRud3g3TkR4S0xxOGprdTNZUkVFZzQ5YWxiT0JVclB3cU53WEwveUNuZE1oSlJoRnlwQ0ZJdGN1eFFHMmN6eGszRGVydS9JWHBrYWNNWHhnNnBpd3l3OHdiYlg1cnNEanA0QTlIMno2NVo3U0ZQWUgrWXJYOHJ2bVk1WkVNMGQ0Q0tOSHV6WGdzTURqWTdUR2hjNlM1WVFVbWt1QmMvbTI5ZUM0VUdic0R4LzdFWUFkZTV1anNQSnRoSzF4ZkVwb3haaXJHUC9aU1p5TVVGZXU0N3pzWTVnTGhkR0FVSXdXckM5NFo5R3J6dnhqcmxzTWhBRWc5dHNLUElPcjY3N0VWY0NLaHRocndmWDhMMUtpSVI5Ny9VbEZpWTltTEVxV1Baa012WjdvTHB0NFNsVU1aMEJHVVN3cjhwZmVURWVnRVI0K0dWdjkyQ2JvUXN4ZjVLSEFpNXkzcG15NVdaU2JmNjVidFcxVVFyZ1FwbENNaEdkNW9uNEp0dUFkRjhBNkE5RFc5V3RmbEpobGdDdWZzU2xZeWduRXVxQ3prNENPSk13QzlyT1FLbXRYbTJzSEVoZ0ovRklFM3d0MW5RWmtreG9UZzkrZUlUQkVsZjVDUk52a2d2L2JldGdrWWxWZlBJSE91aFBnRGdLKytpemduSExTY2M5YnpTRGpzTWF3OXdKTkxVNWcycUI1LzBqS204elY4NU4xRW1lRFhjUkdQWStnL3E3dDRYa2VObk1GTHZSVjEwU3RYdS9aL000NVg2d0t2SUNEMGhLZ1hld3BsRGtPWDIvTFkxZW5jaWN1VUFScktMNlp1WlY5ZlRCNXI1MldLdTZMZTBqMjgzT2xHRFRZbGpxbHM1T0FnNyt4SUw1SkdwRFJnOEZnMi90Q0duV0FzZlZZTHB4bFBsMGxyMlVwV2xSbUJOYWFRT1hQWng1ejVZVE94V1NiZTVZbktTWHAzaGdVcC9kN2l4aUFXRkkyUjFZZ3JqU0N3VURXWTNGbXZOZHg3SGdQMm1ILzNUSHJDdGxUNVpEYXZSNzNEZzlFUGxKSU9aNzJLTThaSEVOU0xkK3VsNW9QVi9LNlpxaCsxaHBsZFU1SVJLOG9oZ3pWa1hJMk9zWTIveC9va2NhKzZxckVVam1nV2luREZVV2V5Qng1eEQxWGJ5Sjc0ZHhpOHdHRmxGYnMyb3VIRXRPVkcrMG01WVpOWDQxbWlMWkRYWFdiN0ROT1drY3lGcjhXVm53cVZpcGg3VC9xYUNYOUV6Z0lvN2lZMlVqTVdSQTA1TWMxMVFyeDhTK3ArUjJuWWVvOEJhVmx0Z2xDWkhaelRzZ0duUnF5K29aY0NsaHR3WWU1dms3c2gxWk5aZW03ZnpnUUtwZ3M1OWlpaWFJZ1dsNDlma2VYTjFpUDFDb05NY09ldEtwU2ZVNFdZZ083aHVzY2dJdjlGV09sU1g4WTdwWllSZWxHZnFSVGFXd3FpTGNidlRlcmFjR3oreUlsR1Rydy9yd1ZBaG1CdkIrUmpDVE1QR2tpOHhEcnZHMDlIUmJDNGZ4eVRBZWQ3OE0wYjNYMzJ3dm9XY05YQVNSNkxOUzJOUGVhUXhwN3dyamt6QzVUSVdmWlpuNDlBeDROandyRGVLdjhWdzI2OElER0h5Mjl2S3owMmk1WEMycE9rRFRnS3U1YTZaOHQ0K0NuN2ZWV2h6cGt1WDBqNExIaFJiNVJxZG1zbENMK1hWcWRyc2xma3VOaHBYZ0NCcTdoWjJYS0RPeFBSVlhlNys4MzI5b3dwcEtZREo5NXRHLzV5UjU3WGVKTjNvQTkxTzJXMHNRT0I1Q09KZE9DVGlCMEdtKzhBSFZmY25qTHozbFJlK3ZYSWF6dVpwYnk0ck1ZYURiSWJBQ1pQVndwdllEMjl4ZHlGTzBJUDlqVlZvaXpzdHhZTkZON0dUZEdyZlF2OW11Q2RZcGROenVOeGtCejdtRHRvWStLa2R3Qm53WUhJQ3ZwK3hPbytmYlBqeE9lZkNTZG1ORG9GQ0M2anVmN21hcHYvaFYzWWlFUmxtRUpsZFhpZ0hCUTBzNWNJcjJXQ0xMNzF6Rkh1ZmRHejFYRjZLc2toK1R6VXBCUVR4YXNpYWZjNHZRVWJ6U2plSjI5ZE5jbjQ2MFVId1ZMc1hwM2NROTYwVlNXei9PRjVaMVpRdFdlQU1ST1dMTjlvUXliTFJRM244RitrY1RkZTk5dnpKbEVCTHEwQ296VXRtU0NxTEdGSUc0MWphS1pGYlVVajlpekJPS0ZNSzlMeU0zeXcyNkd4NE15RWlpRkUxRlhodGF4NzRVNENKa2FPYlJ4UFQ2VHhOOG9STUxrTTJOVVJpcElsUWhXSENvbHBqT1pXeitKQnE2dkV3a2h1QzhOb1ZqNVJpYmN2YlpTM0FnYkd0ZkVydTV3YngzeUpKRXlzeXVrK1BNSUl5RkV5WGpnQ1BVT2tiS2JPUUhhbi9mZEF2dVp3TGlUdXRQUTJYaVRBdnRNWGlFeEpDdDVlMVZRdmpvbVVoL0hrQUNERjU5dXZtUXRBZlZSYXltTE9kdy96Q243cm1ibnhWb2Zoc0EvRTgzZ2psR3RYelRDVVlLejRtY0JMWG9jOU9JWG5XOCs0Z1NDYlpnTERHM3duU3lSRmZFOHNNOFVZenZVb2VDeTFFY1NPRGpOVURSVFNUU0hiaWlHa3ZtTm94bVM1SFBOV3JZSTRUZUhFTmhFWmFlUjM0eHFudFUydmF0a0JHSDI4SWsxSnA1KzE4SkVES0tDR2w4RVJLdHVtR1BsdXE1RkpDT3NKaTE2QVVBZWtoY3Roa1pKQ3lsRXNnZmVlNmlTUjNMam1Va1ErMzJhZHQxbk1nZCtxOHRwM25ORnZ6Q05LUW9XWCtibTV3QjFxUzZGd1dOSHZMZ05BWnlYTEE5K1JOVElVTzFydE4rNjMxN2FGU0xwMStsTHRreWNVSk5SSTFUUVdsMGMwbXBVSGZvNDVrcWt1elBIdENwdzZmc1hCYkI1dCtXVFNEMWZubXRrOFRjV0hqRm0vcnZGbzJrc2JJVEdiVGhlbXNReDZibWxKL1c5K3c3U3ZoVHgrQ3JZL2lXcldtSW5ZdVc2RlEvRjFOUkV5ZzVRaGUzaEhOTlk4MEttNXFCSlVFeUxEZ0dHTlZ2UVpULzhaVGg3NDdQNlpiUWFGWHJ0MURSTWR2ejFrVWpsSXhKbFJNY3M1Skliemx3UzBxclpGb1VuYkVpUHRpMHFHaHZ3YWhZUjRvY1JTbWo4SUZLalFtaTlvUDNpTENkQjVsOHRBR2orTkZyZUNoTHhWMUovbW9qOExRTjNYUFREaU50TitiZUFpakhzMUp5ei9EKytlaUgvSEdsQkpZREo2QWZRYXJqVGphcll3KzlFM0I1bXI1NnV4c2ZkV09KZmZiSW8yeXp6VVQ5OWxWcDFsVmpSWFN1YlR1ZThlL3pBbzFLdTVoQ2VnZDVlQW5XcW5xUVR3U21FRjk4TlU4Z0JrUTlqWXI0UTZkMXRNNXEzYUQ4elJibjBndDZRcFRZZTc1Mi9qb1IvZmFVaE5PZ0E0RTlZdWNLQit0TkdpNC8yMmFScTh4TjVwL3JXWlBzMW1JcU5xRnFSb1RmYXZBSDc0dVlIQnlGWHdzMiswS09hcmNidzdwZ05nR25JM0dZR1Q5ejV0dzRuM2JISlRTMDdmd3IxUU9KQU5KV2R6UWhWUFVpRHQ4M21WODJ6NnJPLzA0YjRRZElkV3MyUDllMkZNRjIzVS96WW9zZGRoaEpDOE5KeHMzN2JPOE1SQXdnYlNVK3J1MHJ5VHNIUGpMdjQ4UWpmSjN4L1dLcXFzdC9YSWoyNFYraEJ6TXZXL2F5d1haVk1keVl4ZUpET1doS2d2TTljL09MLzM5S1lPazZmdjVaWmJPcGs2NXU1M2YvbmZIUDdtclBUU0IrY2FrbmxVUWx4ckJSSW02bytmWE9uRVlyNWdrQUc5d29hOE5tTmcwTStHd2NGOGVuM2NHRm5LQjFkN29QY3F5V21pR252YkErMDVWUWpyU0FSbThHZ1dCZGc2YzBzSHRLOEUrL1A3N0t2SHFuZ3hnYjRWTVRhL3JNK3lhS3FkTHJUcUN4U3ZYcWZuU1J0OGxsM0FNRkQ3Q3huYVpJMFovVHFnYkFjcDVqUzA3SlJhcjlWdDljbGNYZnRBOFhGQktsdnd0RDZEeXdtdFVNc2kzYUthWmt6MWhkSkp1ME8zTzdTV2pZSmxZNTBjVSs5MXZRM3NRdG5SZXZXWlc0QjdKUkM3WVZ0bThVelErdXNodWtkRlNkQjFZU0E3bkNZdjlOUkhPY3FNdDU4cGx3a1ZaK3JhMDNFa2JUaXkxREJnanJiL01uOUo0UzljZFFMcXVRcnNyWTdoNFZFMzVvbEJBaUIvN3BTend3c0hyajAzZExQQWdrYm1pVllJeE85VCt5eGViaUN3VzhkZlJDWU5zcCtMMS90M2RscVZONzlMWmdGZWtFeXZyMFJpVWpKcUVNcUxtNDJYWlFtSXJ4R1VFZDl1NG5yNGRrWnJsOVVvQzhkbFg5VUF2SmpreHNiTFlkdjVZNzU4enZ1aTNHUmhnQnplZEhvVnFaYkVHQnFKOWJGUUhsdlBLUzdFY1FOa2hWT2hOL1orRkw2OUVYUDJQZTZUbldzZi93MEV1aUk5RXhReXIzTGgxWlJPQ2lVLzZrQndKODhWTmdhZlRLcHhVN1kvbXIydUZ1NDFxREhHcExMZUtCa1NkeUlEUm5MclRldkx4dC82d09yVS9IOEY1TGN1dU5tL3ZRNzBlMkpZWUFXN1pyWEJOME5STExDcnV3VzlXbEQ2SDBTbUhZMmRRUXNPc0FmNHEzV0dPV3VYVkN1WjBtdlRIN0JNNjE1VnptU3ZNTDlOeGF1NnBnSHJFOHNUOWdXcnRiTm5XeWRhYTZxN01uQm45dDdPd0Vtc0VUa0NOU3VTbDlFbGE3VmVsNUFuZjh5NkhyUzlVclR1VTU1VlQ3WnFFU2EvRHhScHFqT0F1VFN4bFJMVDN2MTNVdW5hYm5GMUMvWUIyRjZCSXpEazFJejk4OENsc3o3c2tTWUNYL3lkam43SG4xNFYxYjJoZWVaYjQxc1NXR2pNbDZmdnhJV2ExZWtjdngxK2Q4anNPUjN3S1VwcHdzR29oT0RTRGdZc1k4dWhFVnYzMGlqM0ptV0ZvT1ZnS2xmbTVvZ1QzTlZ4OEdPVkpPWXRVTHV1a0V3djVLMExBM2N0UWFPWmw2NlpwQnFkSXFabkZVOTB3QkIvdC95b3ZucTJXV3oyUlJEVlJ0MnFEQlByOXRuQ0tUL29RcWR4bzZ5ckFEajBMVzAxZnZSSG8zQlVOSlBLSXZCU2xiOUY1eHN3MkoraFhvWlByUWp0MGdSWGRBTENVVzFtMnhQTlhmclZXZnNNbkVTaEZXS1QxNWd2ZjJjZlpucmo5QXo2N1BCM010MGx4UW5GTUFlRFk2dHAvUlpGOFpMOWdOeU9JUXhQaVVGZUlJUWFtMGJpU2hmOFppdFhhZFhzRnhmOFIyQlpaWkhLaXAwWVgxb0ZSTFg1aTE1UFV5c1VkbmFyVTJqS0hEb0FLTzltUEdHWU1PUDhCRmo2b0Z4UngrTVVHaVlham1tYy9WVG5hSXpNTHpuTjQ4RFVSK016b3RlbDJFUk5TQ1pNU2h6V0lITUREREFzbnd1bXNaajlaSEFnNndnK2J6QXdsWGtwZjNNZDNONGt5WEFRNUFqQ09IeXdnVG9XTWJScjhJeTJMS0JraHRKNkZZc0c3THljdHhMd0Q2dUdaLzJBeWNTdVBIcjJxeUpBdWY3KzNWenVOdmpEa0h2UWYwYnl1S3F4MCtSSElxLzg2WDJ0eExUU0dNbG4xNFJqcWZXS1g4YjhiZG53S1dabXFsOHk2T2pQRXlzazU1bytBZnpkNDNEbTRyaWZRTGc2RzhiSDcreE9FT3V4eS9wblQ2VEVZUGpCZlhhNDJVOVVTV3M4bzc2R0xKM3RhbmY5ZlNJd0FYWXlzWTZaNnZ6RjVXZ1hMZUs3SndJRGhvY2NReGhIdXVtM2dmRzdodXFNWDZlejlwSDlBbTJTc1NOaFhzMkdMSERpQnVuUG01K3phSGFLSXRiUmVYN09GNEZpL3V1MUM1ZnArZm9Sd2dmQmNpSytWYlpOKzM5aE1lTWhOYVZqRkswVnpyL0Ria0NOdjE4amVsdWx0NlhHZm12RHlNUzVkUXZpL1ZyTUU5N21iM2RXZGdtaVB1YnFKR0lmTWRKRUZQdnVyMWpESVhyWnRWMkpJN2FuM0FBWk9QSWNQODVqRFpDZXMyWUhYYmFtM2hsdSt6dUpMdHdsa1UvT3BxTmNFRWNKWXRBRGhEVks3NWZtNzMrQVhQT1hyTjNIRWljaWNIWVhZeko2MWYxZ3BDZUFMTWJDMmM2amlmQzlTZ1FXNnEzL1ZRNWxUOUVtOGNRV3AyQ1lxcGtLTFpBaHlmSU1hS01FTTFpNUs2ZFFLd21wQ2xORmdpVTdEelZ2UTE4cnRpRmFTOWUwVElTZHM4a1IwazJRZk1XQUo0NHd5SlBHQStZaUhHY25TbUE2SjYzL2ZnM3hLNTlrSjlsOU5vTFUxM2o4eEtNL2N5QU9YQ3pJY1B1ZzFWOEtOaFRaZmg0WnJOSlJRdU85enR4ejBDZERkMWUweDVVbWZKYjJ3angzdXRUWll2TjZLdlVvTU9nUlJhTmRWTVJiY0pZTjVJS1R2V2ZtZ2JaOExSSW1PU1hGWkwzZzcwU0RlRUdIeE4xVmtNandUeWhIeHBGUUJGV0Zjb2hMNEt0Y2QwQlRlb3RSN3h5dWFWbjhzUU1uMC9ZR1AxWmdNV1ZiWXordHRJUEpsOVBjZG5BNWkrQm5OdXBQams2MFpjSEFqRUhzYjRRMm9VMXBkMmVrN0w4QTFxald4bFNneHpwZVdGUHYrSjByS0lDcUk3RUNBaU4rQ3lMSmRCL1FOdnFUYm5kenhPQ05LQUJCcW5mNThmY2dqS3lkM0JUbVQrT1RYWnZPOUVDS202VlNwN1JvSnVPOTN1Q2s1UDlBblltbnNodk1samtST3NHc1pEK1duMm5BVk5JTlBaUjBON3FYM2lHeFZybDlTaFlRYlc5K29KK1NnOXdjeDlwcDNPcFErbjhWSVF0RmdlZGFHekdsc3RJcEg1Ry9RYjNEQ1VjOTJQWWhCYUYyUkh5M2hpSGdrUlV1NStXb2hlYXFLdTlaK1d0NURJTEp1UWpTVVlSY1hyRExTY0t3VDdJdFlKM3dtM0l0WEJFeEVUZW84MWtLOWRZYzV2bllVUlBra2V3WXowOGNqVHFxd24yMy9OcnJZMlR5bldWcUREa1hqTldrMm5FKzZIdkZGTElQNUJ5aU9IKzVCVHdSL1F2MEV2Z0pRUGdFREt5d0dFLyswM0Q3NnF1N0VLNVoydTV0WTI0WU5UOTVnUDJMK0d4OWJmdytYWUF4aHlPVmhCM2krZk9LcEtKVzY2YmlVRlduemhxemNtMXpjRy84S1NmdzAzdGs0N3dwaG5IMHQzc292MWUrQ2IxWEJRaFg2Q3FWM3Y5OHBrajJpZHBmTm53eE1sZ0RTMTdwS1c4K0ZOVWNBWFc2aGVhbmNHTXlMVmM2RFJ3WTZ6dHBHWHpCRFFRTlQxb25QVzRHcnhYb1V2T0JyQ000TTNvNENpbEQ2aEJKMkVPQVNHbUEzR2FqUHA4ZnFrOElFOXZZcWt5VUt3bVJZd1JzbHpya2FsemFtNDhQbkFlVDBleUV5UmtKNTg0UW90Mk1yODN4aG1LWVVNMTUxdjdZYXV0dVlYWFh4eUttWk5IeDVaOTNld0hiZUVEZjU3bW9LYm54Y0V0OVJaWlgyZkZoeTRwekxaM3pDblFtV1VUSERQV2x0QitjYTN6b1hFM3EvcXNGRGU5VXF3ZE9ZUkZ4Sm5NMHNFTXpqcFIyS0RwQWRwZkVQSkRSbVVBV3Vkc2JDZTY5SktBMmFuc2Z2eW5Md0ZhNzd1L2YxemU4T0FVSGRNb3k3a0QyUmRDYUROSHVmbWt4OWI3MXpqYldUejRQL3o1WWRWTmgzM2hZUHFyL1dPVU02a1dEQWl1OWVBeHJkKzhiT3B2UGIxcVA0a0d1NmZ0RW51Q3JwUlFHcTVhaXE1MDJQZDl4bHhiVXo5ZkVIQTRVS1hROEhQRmV3VmZ2WEtIQlRwbndkc1AyMFd0UXdGRTRydEhucHYwamxHeXZpNmh2OGVFY2Z4NFhUVUtHYmtkbVBWOG80cGd3RnE0cnpWUVptSFRjSU81SHkxdHRJR3E1OStGbVRhTXduQ01CU2NCSU9BNWxYRk4rdnlmdG5HUXhLZm45eXRsNFdSMzgvb2Y4TExFc1JYM1g2L0laSldaNHhMMEFNSUZSK1JpSEx4NVRHeVo3TDh2S05QazNIY1dYVVAzTXVlVXpOaTNmY1VYYkNEck9uYm1WVGJubGhuay9Hek1GU2RLMGFMUVpLaDZlQlhTcGY0R0x2ejBheGZHbWVvWXNhMHdETDhPNWkyYmUrVC90aTJMY05jeFhwWjVvbVlvOTJpWnFkWG9qK25yZnlTVlZVa3o5T1cwRC8wcFRuRjBnZktnekNmY3M0RGplaHRpVjNKbGxoaGtVNjRLTTJGQ2RWU29iZk5qY3k3NTFLcTh2QmJKWThYSG5GSnZjVVFDSVkvekY3bEJPbmlxY1Rnem1iVjZTZlMwb2tjMkh4TE55WU1YMlkrdnlLL3VWWER6bDJVUjdjVllzdHNjd2F2RXhiSkIwdWhkT2VyRmlHZ1BjWlc2YWhFaGg4b0hsRUMyWnNCTmNvT3ZTSG5xa3Z1UU5xMnovR2dScHdCT2N0Yk0vSnJIKzZXL2ttMkd6dUFTNEI5bS8vVDkrME9lNUNwbERJZkRyd3o5NXFJVXVaYnk0aVo3d24rOGk0dDJSNDdQN2R1aU9jdXFkN1NaTDVCNXIrZ1pocVNWNXA1VjA3SFlWTmZmaldiM1ArY0x5S2Q3UmMvazdOeFdOam5mVnNEamxKYXpUWVZrVE1KN1ZFdnIwUDJiSnpXSy9zcENWTGhRZ1oxdDdnRmI3MVJzNy8zQi9EcEtxcnhielRvanNJRDhqTWRVZTJ5d0tCMytRY0g3VHM1bXhSLzlYZFhhSm1JT083OTZvNFNYZUhqUk5pSjlib0o5NlI1K2NSNGY2ODJ6TDhXb1hNbExkd1pEa0FLN3pqcTRXL3ZER09yQm9xcjhYYWxpenFyVkErM0U4dDR1MHlicm1oNmNGUjF5ZkNjdnNnUllteHpnVXBGSE5rYUJDQXRmMno2MkxZeWxTN1NQdGxPdEtRM0xlRktFOUJRaHNjZ3Q0ZXBZNklRdDhDK2NWYTZUS21OZHk0dCtaWFgrK2hnMyt4dEQvV2tHenVKUWZvMFJ4akd5aUpYR3JFTk95SGo0dEZSY3dEbU43a1VRVWprWDltamhIZ1FjQVIxUDAvdllUaDZhYWRZdWUwanA0WkxPSDFBbDZYYWJ0OXFWZWlONFdpYVlkeUZzdHpERVlvVjZ3TkpQRWNUbFFPY3VYb2VzYjJxUGkxYmxSMDVSandPcFgvdzNoRjBIUk8yT3FsdzU4WmJDODdiVUdRSjZRMG9EZ3I0eFJYZHJ6dTJ0TEVBKzEwTHRLWDY3QUtuamhyR3RFSzdqMnBxSHJBcjZ1ZXR3Q1RVdHAvRnlna0FLcmErb0E5VkRnV2x6Z1V6NXhQejBSdzgvR3luSXQ0MTJxbGNqVUNON2IzL2hqOGloeURuRnVtUlpiUnQrZThRa0tDVjVlcW91dHo4QjM1UWZLQzFsNFA3eGdYYUdZWCtxb00rWGk5NHo1S1FNZGtsL3pVWHFwcWtSMmpnYVJpWFdmTGFyb01VK1NrV2ppZFVWdHl6TVZYeDlEbGtaWXBLRklYK3pURHJuR1A0dnJpcmk1UmpJQ0RNMkdzSVkyQXR6N0pDTFZ0RU0za21JdFVBKzZ2NzluTnNxQXk0OHhaM0pyaWxjdWYvNHVrSzYwSUZKZWt5MUh1cVl3aEgvYS9PdlE0YmxlS29LZWU0citmMnNsRkJ3czlxYzZmb25GZG9aNzRlSVNYNFRaQ1BrUG9LNElQb3BHYi9HVzdXM1ZQYmgyb3B6QUpjcElWdjRrc1ljZkhZOXhuRXlBamV1YmJiMlNNTFhSR2V3Y2N4aFl5MUFNK2h4dkRmQTJFWFhNbFBmckgwRU4xN1BQbFN0K0xyU2NLTlNKRHY5eW5EMmllTUczQ3ZVM2ZuRytwTDk2djJUVVNoOER1SnpMY1o3MFZQMzB4VzlGM0RGWW9waXExTjVSa2ZObzZOL2lWYlVVY2VwUkV4SVpMS3hXdFVTVVJWSE5HMXRsUGZGVWxaQ2RXcGZKdHUvYm85d2QyanpxTjdQeGRPbkFtK1VzZWxHYUhqNUlKZ0xLM3hZL0VjaTBjSGRVN0oxRmZFbzFvVjlPTEJEK25hUjA5V2c1eGRnN1l6TmJabGd4emdaclhiT3ZXeGk5SDVSSTVwWi9xOU1xOC85bWZYd2VUeEo3dlBTdUE0WDV0aG1ZaEpZNzJIUjMva2NPZUpZZVpRT1ZJbVk3N1RKODloNU1RZlVSeTNCRGJQdGN2b1ROQjg5SG8wdDk3UGo1Nk9MSTJ5WjRFVk9mb241L1VNM1NzbDFqd3ZqWjRITzlSZnN3OWlhamN3WFhpb3RvMFNHR3paSUZodHNrVmo3dFJ0N2FDa25nYWcrVUVzRmRFd2I2ejFLWGZscjUvai9LQTVISm9Vb1dGY0JYd3ZWZGNMS1RWdEg0QW9lbm1NUmFISTBCMjRWT1BJNTJKczB2RjBsUERMT0lnQ0IvVmN3SWppbzZ0UzlmVUJVczVOaWFqWks2VnBuWTFWN1J6VnErY3ZKS1FGSGZpalFncHZjNWxNM0RjKzVUd2E2Q3ZwM090Ylc5aDVZTVhXVExwa2pqaFduYzFUZmwwWGgvVEx6WEV4UU0xc2cwTXJoMGxudGxpSVhqMGZkVEJJMzk2QUNydXhPU2dsSlRVOGVtRjAvcytmZXJPMWNhKzFiVU1BNDNKVXR3WWRRQzEzMjc2bzJxSkdFTE8zTHR4V0lET2FDeXpHc0M2aHlKTnplVTI4L0JXVld6NDU0VVY5ZXhkaUpjbG5YUFpSdWdhY0FuN1lQUG85LzhOTkdaN1pZcXNiNmxEMEZBN3krTExSN1pxem9Pby9pYmxROExDVmczcWkxcThScmFwVmhXc205YTlxUTc0MGtoSFM1ZmxRUlNMVzVRMW1yRXU0MjY5U0xHWjdKL0UwQ1BJTFQwM1k4MDdSazhORkdpY0VFdE12Zis2SlByMnlhVUFvaUk5QjhnckEycGgzYUMvV3d2d2xqemxjaGZoWEo1WFZPc3M5UkZ5QUNGUEx5UVB2N29FZ0dZRGs5ODdzaUd5eDlBRU4xUmJZRVJJNkpPS1RrN2FyTWpxdWIzeEJGV3ArTE1XdzZuZ2tNWkJmbzl0RUFEaVhJOWY2d2hyb1oweXJSM0dhR1JiakR4Vm9ZTCt5dlZIczkxSXkvZGtvZGJVT0tpRjRpcWRYc0pxZUpLUHBZYldLWUQ2NHEra1ZlblhhUVNGanRtOStLMFBVeCtiQjBrMzBFbHYzalBpUjBFZ2o5WGI1RC9PL2dOeFljODdEcmJRUDZRZmFkRGZZL0JySHM1QlFPY0JNSGZ1eXE3U1ZYY3lSdTROZmJCeGV6RDhaczlwamNZMVpHRm1CODMyNlQrWUxvaW9xcUlmRVVXNlgrS3JsUFdzSXd3UjZscUR6U0EwQnFKdVA1S2Z5VE16UG52bWs3Tld1bldtWlZFNloraXI4d3hDN2g3c0RlRFlLRGRvTm4yeGxXSkVvL3hldXVsQ3N3Z0N4OUt0SjEzdG13YlBJZjVxSjR1NDBrQUVRZFFxS2prOFYwQlEvWEcrNjJJTldMOVpDNGx4Q2U5TlE3UGwzb1RhYm5DU2V1UWMreHU1OXZHMVNIWHduaWE0akFRZ2J4QWwvUlgxcEtYUk4xKy9PQjRxd3c4cHlrdDJhUDUwTTBWTjBqMm5Lc2lROHJac3gyaUV0aWVoQjYyQjE0dEVLZjA4VFNwTVhKNHlhUUhMV21pUXBrN0xmRktnOUEwZDNaam44R1NqWEczN3BtYzQ2VnNPM1MrYWJySFRGVk9WblRLV2pMWmdTOVp0c3l4cm9DKzl4VXJSdWdhUWN3TzNYRjBpNEpzN0tlcVNVSHFaRGV3RU5rSXoyYjJtbk5KdVl2OGhGbVliWWdUS3lRbTQzRm12MDhBbUtGWGN3WWFWNy9uN1JmNTArdUh4RzZlS05YcDVsY2R2OWFYTmc5eDhib1p0KzdvMlZ1ZUEybytrQmtiVmhSNElnRlZuUS9uT0NhbG9sanUya2tiMzFHSHJ0N3ZtQk5HekdGQWZlbHNCSjd3VHlMOGpjNWpEUHFubWJyQnJGYVUxWXlGc0Yyck42MnhuU3JJT2NQTHArbDgzaWd4T3MzOUpuOTBUb1U5a1ZqK2dUVlpwRG1tNTV0QWgwSXdWSGFxNlpkbjgzMHhENVlVQjN6TUxiY0dhNDgvRVdJK1hHWmtsTU45eFhxNjFrUWJmM2syKzJMK2cvdVBhZENiVTZHTExuNTRiRUNPbWd2QUt5RVRDK0FPNTh4TEg3L1hJbWNkRVFTRElTU0V2alNrUE1MbEJzRk82NmI2Zm15REpNakNreUVCWjE4Z29wbU9ibWpCeUNxU0hiSy9yVmJNTE9ZTzV4V2pkU3RSZXpnUUxad043c2lvYk9vQ2NtQUMrblI2eUVtV01vOFJqMmVoNWVjUk5ORnVQeVI1SzhlRm1mc05aSWdqeXprQkEzbGJZQWc4ci81R3FCMnVlN3lYZU5Eb3dMREpUS3AyK3lYcjdPeTZLaUZ2Zko0bTFKM1BIMFY5SFBNckdqd3gxS2Ura04vMFN1QUQ4VHpxR0ZtcHp0UUdVWnZkczE3Um5EMzU5cTl5RnoxS1VSR1d2d3VjY2lxSUluZnZySnVER3pJb05Tb1IrUytFeGtLdFAvU3g2SEROYy9oL3V2TEJqdjlZazRZQkhyamdSMWdwbmlkTGU1NnFianAxbURvbXQ5bmtTMUdkOTl6NEhLMkZoYkVqMmpwWUhCcTRSMFVJLzA4cTdZOE40dWFDTllUMktVeHdmaEh1VjU4MG5qVmtEclZlNndIVHpmQk9JbTlqNkd1SnN6eURWTUd3Uk1mOE03aytFSG5MYWJhM2NEcndlaTgxTGw4RDRQTVhVUjZhc01YWGZXdDdmS1hpUnVaSGd2YTQxNU9aaDN3TnFYQnIxMzg5WEdZTno4NThDNEh3UTR6S1paOHRXRDRNQjgyeFJkQnQ3RkZkQ2JVZlhDbGpFbWNWWkhVSUROUlVnWGYvQTN4TGhDaW5XYnFDSENjSEYxVlFwRVFnb2JNb0UvbGdHZUV5UytvaW1scm9oNWZ0MVc1VWNJRWRDWlB0Rk1HZzBCcGNaUXh0bkRMZVFFUG9WUnRuemE2K1ZFLzBuVnZ6azdJekRFUllRRUZTUS9wc2N1THZVMlFidzlPSS9RbWJDUDRsZkFQVHRndW1aOXVjZ21tZ1VYbUdzRE1oQjZERkRKSnVIUmc0UzVYTk94RzVQNlBVbjJBSThQbDZya094VWxwakJLWVRsb1AxdktSSEZxVFZoUjUwdmhuUTRNajRnWHcwalZ6Slk5bmY3dUlIcHNoU1daRGFrNkY4QjF5VktkdGVxbVFBV1ZacUFhQXlGdFJlazhZaWtjMlUwNG5EbVNMUGNmei9JdGZ4dk9qMktUR3A2akdsT1Vlc2praW42MVdpVFVyc1ZDdDlwS3VUeFBvclN4amF3MWVESFJPd3ROK3E2UzJWSTRONlBkdWFRMllxV2RwNDJTejh2cmNPUHJHNTVVb2lOb28zVUJTcVFYdGEwdy85SnNZeHozeVZ4U3p4Y0hXYXZhNVR6Y3BvN29MUkpjMFdHYzRaR0RKWlpSa0wwY09MaUFhUHhVN05TRjFPakxSSGxZQ0ZJemEvZTdlMk5RaStnL2dVeUQwdFRaSi9nbzF1amEyVG5EaWRnUlhGR2c0emltR3M0WXV2bXVuVDBlRThaV3dhVUt6bjhJVmJ3MldxUkgrb3lMc3dEdVFEanlFMjZINnBQTW5EanQ4cng1WURPc25hWlFXL1kvcDRKUVo3eVpNVmhjbnJvZWwxQXdITU5YUGorclZpUWlYKzhuRzdBSmcyb1lxcGp5b0I1a0VxOVRzcHZFeVQ4K3NMZnQ4SDc0SzFDbDBwaWdMdG9vYm9XemRocmJiczI2RVgwZmp3V01LcHN5NUdITlhwcWpnWi9SeE5vZzE3U202aFUrczdNTjBEZGMwR3pNOENJLzRlUzlYeGs4d3cxblhJNm1hNk9IbCtCTTAzRmIydHpyaHNZODJvVkZQNENCeFBCUDhhOHdwNmVDVzcweFRRNXZzcGdpemdZbldTSTNQMzR6OUZpbStRZHEvUmovaGJZRUxTNEN5Nk9aSDRDbEhpMjlyUkVBbFQ0LzdnZmhsRFBhWktNWHNDUXREa1E0citzb1Y2NTk1K05LeENVTFROMEtOYVNxVEIzUnIvY2toZTJUNHJudkZNZ0M2cHZhbFh5T3BxVUhNdXd5UDcvMDNIS0JFZndvb0hrdnU5S2JCd1V4b3ZSMkxBc1F2RmM1SXFienZlZ1lWdUlSMGZ3cXV2czRwclkvRnlYK0ZyazB6eEY5SG54MjFVbUcxSjh6WDJlbEZSdjJjSDgwdzlPZlhsc3RFczY0OTRNMmhhOEg5MnpyRzBKNXhKYWVMcGZDc1dNb28vdW9HWEgyK2JpaDVOSVo4QWZEVVdIa2JPeGxuQjdad0ZSVjV3RmpPKzduaUs1K2tFUFpobFdUcDN1eU5UQW5PT3FzQmxMK0lwMFFJbEtRMjJjUWVSem5FMVI1ckR2emd1QmlNckoyZFZTeG5TZHZyQUVOY2YyVmlZNldyZXkyTmpSdGlwdWg1L3NKOGxxMG5lVkdqRmk4VnlVZTE1UUlsY2s2b1ZrNi9XUGk3ZUwyaFVYdWkvSnZyVE8zYW9ZTFVLb3VVb2ttc3dsQjR6VStTU0c4b1Z5TjVGNzBxa0V3UGVNTk0rT3NaaDZtNXR0d0xjSmR1UldONHJPbzF1amxTK1ovREVQVU1ZRWZpOW50QWtUNDdUakhtY1hTeFpWR3dqVjgvUGg5KzF3dC9wdHdGU3FZS0NVMk5YRHF1Qk1iSHplL0VVRjRvNGFtME9jYUdianlnS3d2NGVPWW0vTXVLdG1yMlpDcEt1QUUrZDFYaEcySk14K2RBckZkTXFKVkFMc3VWRk8vc3FUbW4rRU9ZVnR0aWVyV0h5ellXRXAweEJ3ak03UU9SeTk0NnBZcGt3Rk8zRjRneFlHYzFQbDgvRGxxOVRrMEJCSjVoeFRSaVVsQjZ1K1Jtc0FxRTlFdmxCYzVIamRYTjhxcVYxUG9kcE1GUi9uK0V1WVVZdEV6VjJGM3VkY2p4TWlCTXhJOFhRa0dGWDlDYnk1dkttQTY4TWYxeGRQbUk0c3QxL1M3aTZqYUw2N2RubFQwMGZxUktpMFpHWE9HaEErK3JjS2I0dXh1OG1RcUNLYmM2K2lpRVcrMHFtMmNlMklsVDRLaVNDUkNYVTlyWEFxTEZrWEZDbDl0ZjVFY2NHcy9odFpDTW16UExnWVdYQ2RyZS8wdjRwM25WSzVqYU9LV2VHZmpxZzJINWdCT1VsV0VBM3Q1eWFsWW8rdE5oUFJtOW1LeUNmR1VJK3F2eC9uQUZEZ2JJVkxOL3V0NWtmN055MHU3eEpLL2lybW9qbVBmdzVRU1RCYXMxdGtxK0lTQ3pwaVF0b2I5QWkxYkh3SUExRzdpTHFXbDIwNE9kVHRONnkrNUN6T3RRcW9GMnZyRXJ6NUVsSEUvSno1V0lHSEJhbXhUNXB6RkxIYUFRaUtrMUwrNFlZMUpYNXZqa0txSkk2TmUwY2R0cW9lYndhSDBpeGUvRXpmRTlEWnZteWNVcHVoWlg0Nk84RldiRWRKNzhWWXcrNzV1Y2NsVUoxa0JqaVloVlk4eEo3YXJvUGtvcUFzeXJRV3JJL3RycG9YSjJ5SlpmaGRvemg0ZHVVTEJqVmNaUXRqMGJNakRjOXdRU0g2cWtWMHJ5SkgvYm04cWNod25zWFlpNDlnMjBoY0hHRkZFYUJ1MjRiM29xM2NkZWlwZGV0QUd3bnFPSjFwU3FybWRnOHJQUTBOYWRlZHpXR2xOVE9TYzJNc29lVzU4TGwyUjQ2SWZONk9NRm9HZW9HRjcycHpKVDlGRDQwWXRXbHFGdVBHTDBtenBRMklzaitWOGRqdjBCWnhld0gzRXB5VDhWbzBuVjFrUmFZaFEvTk5BUDRodmhlZ1ZkQzBKa2hKTE5FR3BSSzdCTEN0aldDaG5ybEFGNjZoQ3d0TlIrREc1SmVKMEZOdVNGcEo1TmI4dUR0Mk9ZYmFqaG9Qclpteis5a0lHNWVJd0J3VzQ0V1ZQWTl3WFFyNXJobXZOWVhDcC9nc2I1MUkraFlqbjRWc1pLOXU4ZElSdjZEc2hraEpyVUVIL0JUS1JRbW5WSlFJbWJvTzdqZUJySFpwOGx6Q0VldnlFMzFTYnhrcU5DUTZ2NjI3S1FySFBLZ2tta1N4aGo4YWRuTzEzcU5XNG13bEp0K0lOdDZBT2NlWmZOYnJYNnpNK0p4ZUtTZDVaMlQzS0M2VE9MMnJCNFBuclFHWG5FYjh6VTByUlNzNURRWFRVUWM0QzE4Yy9OeFVnbzRNVWZHY0N4VmM5WU9FdVBHMEZ4MUxsNURnb2dncjFOZ2N2ZEttT0E1Q1hJU1JCZU9taXFnM3BPK204bVZLUEg0eTRUekkrS2hFQW5OL0x1ZDkvNUNUbjVUbDdDNGpaNGQzS3U1OTlESUZ4NTZGbGUyR1h6RXczQ3U3YUFsck5yenZhMXorb0JGZDRkaFN5algvM1lDVlZkRTdoUWhqdGlMeG4rMlpyM0FRRGNLcDkzM2FhT25HRDVzd1RscW9SajB3YU1BNE1CK1RYTTVRSlJNZzU5d1ZzUVFJa1hKRGh6WlRjTDRkQmUvM2t1WkV3NlpRaFNtR0FEWTRaVzBZQjIrS1NubjlybEdoUHI3a0tJak1leDh2aHhnd3FXQ044RGxSeTZWVVNtR3J2ekNnaC9Oam9sMDZiNjJ6M2hGYlZUZ1ZnWjlBb05jb293OFlCT09nZFRJZktUbWxKTXRTekVqTXp6amRGakgvb1RENWVza0IxTnZhUGZEVy9hbVdWVTB0emJwRmMvSFo2emlJVE1JWkI2d05xZW82S2NweFh5blBwbjVWTU5lMjY1SkZjQzk3U0VVNXpDd3ErUmlDY0xZQnhZd0hFN3YwUlBqRm9wMnFheitzdVFoWWpPd3kzQzlJWmJBVlFLTE84ZW1LeHN5QXM3V25aY1VVTjJNdXRTZzg3Q2F2VS8vT004ZFh4ek84L2pmVzZmdUhYdGhqTGZSaVZNZnhtMWJVZ0hmT1Y3bTJTeGlGbVpFUFRvNE9iV1czdk9JVFhnZmJ5MkRmQmFLbE9vSVRXUmtGQmdJNW1CY2c5RE5La1FGTG9RMFVjMUZEK1JYM0dLU1k3MzJMcjZUditpU3dZZnUvaUI2ZnRlTzlqdVVxODd6eFZBWVlNZlYrWmdPbHF3R3dTNDZXZ1BCa1ZBcVM4RmQyRjJYL3o4Z09yd3VxdXkrT1FXL3BPTUlLTjI1MFQ3OEVsS2pqRDNlVmZMcWxYbGJBYTZudDdDL3BGcFNqYXJTWENGSjRMQndnSVUrdm00cWVYN21aQTdhQUNYL1FoZGJaRGZYZDJCYlZ4VmhFbitCT1c3QXBvcWlOa3Z4d2tvUnl1NStNbHlyaVpRVWZza3FLVm92MzhRNmtpY0tUZ0Q2blFjY05JcVdCMDFsUW1idGdlbERVZkhGTndrcGxGUmRYcGdIa3BqNkhjZHdDT3lrMFh5b05qUDRlcUwzaks0S0VoRGpQNzdzRHl3b2crNENLWGU1bTdiZjhaRjEwcHRPSXM4d21hWDY5Y29qeXdVVGZrUlJQN1RydXRwblgzSXVZOUdsZDkrWDd6YVpjekFudEhqL0hzRVBCblVGdm5XYk5wbWxVOUNQbTFPV1E4Nk43TXBsWjRCOElzWVZiTDNub0wvbGk0czl5OExIaXZSQUtTclNrTjN4QU9SWlhmSHhZYUFEaGpiV2l4bTlycGNmMmR4dlIyY3hzSHE5TlFNQVBNTnpOVjh0WXRQMC9jS28xdjlkNWgwa1VLQ3IxeGpzN05EVGhzdkpESUFMU0VlY09MOTlDSUdmZklKS0xvYi9EVTY1SmJBUGdYb1hTWG54ZjJZSVQzVDZyakI2cXpJdU40OE5tTjUzbVgya0JlTmJTQ25uTlVpV3VjTVYyQzQrUUE4bzBJdjNkOTQrRFNaUDZ2THFkU2lGdDljSjFsYkQzaHo5K0ZSSkdaV0JpVUsxV0owRFRLc2NDcUhWV002M3FmSFZxUndCMGR6Zm5hRUVPUlBwekYyRUJYL0hzNFpuYmZWN2FNVS91YVFMa1UxL010SEZGamNuY01ET1F5ZzZ4R3Q2ZXVDWE1uVGVpZ01RdnFtSFVrZjNLYWVPWk5MakFneDR4dTJNT1dwRzJYVTgrZWh5dk9vNEYrTWdHMVJWZWRHOENRbzlWVXlHS3dCVTZ4cFVHTHh2Z2s3ZitjRUJ4Y0tZY2NINWJ2cnNkNmNhaEQ5cUlYRzUzK3ZDWDlFaUljUXVkd1prdis0ZUVLc0NtTHhHWDlLamc0eGdzc0l0Nm4yMGUxMEQ3WENLaUpVK3ZLcm1RMkROUDRSTmRmVmYzQ1QxZi9XTTh6dXVWaGZiV3gxWHQ5eTdrUS9Pc09JNkppcGh4RTBQRWJyMWlDcklIWVhRRVRieWIzOEVnVlU2TFNzMW1aT3g3VFAwOGcwQXhlUmN5UjA3dHRMdHNzZEl3cmU3dmRlQ1grMTJBY245Y211UXNEVkE4dTd1TUJBV28xY0x4V29nQWd3eDZRdlNwYm1yRUFkWkhNNVJtS0U2NUpJQmdLZ2pjaU0vaUhPOEU1eitGRDFXQmFuamUyVU1WNkRtcDdpdUxqZ0l3emRFVmlzOGJPSFNyVnBESmx3a3pXbnpJOE1EWUlVODkvTlE4V2NqNk9QeUtCY0VFQWgxeUl6cjZ2cml0UndUV2pOeFJaWi9KTXlyR1NyMHZNbnU4Y1JkOEo5RmlVc1FZNjhWN3lPRXY0M1NreUl5MWRWRmNLOEdZaERYUGt3SDV3b0JaTUl3VlF0RUJKZ1M0Mms2aHdtTlhGSlMvVDM5MVMvWGdiUWVVOTNqdkFVS3FTOHk3bG93alpqMHMvUmpLUzh3aDgrazVQeXZEVGVLVGw5dCs0NTg0b3Y4YnpKa3daZDVhZVl4Y1R1WDd1bFBHWmVuYUFHekhtT3Zkd0JyOGxWR2h4dEdtNzI4ZEFjUTh1TGZ6YlVjdjFRcktGOUYwQzBDTURqb0VXYVI0TWg4V1Rld29RdTNkSEdlelZMYUV2UDNWRm1kbEJLQ0oxQVNyVkZaUXFQYTdXVGRkaU5YUVVqb2NiN2syQzJuR1llUWFQNnlzSUFPSkdYTmJFQU1STER0dHJXcFg5WjkzNFowUTNjNW1zaEtDZ0ZpM0xvUnpNT2N5V1FBdlBkaldVd0FkcHZPOGpvSkhDc2hxT2F6Zk1zU1hOVldaZ2JjSEdaNjVqZFZ2WnFkSEhreFoxWFBzWnllb1g5WGtGZlJQd2UvbW1VSFducmJ4Z1RQU2pxNmEybkFhUnVKVXIzUmR5Y3B1aDF0ZHRYUk9mNzFkUDJCb2VJa2JJMk5KaTZKbDQyVkFmaU56ZU5wRUlYV2RPTVB2OVowVlBGK1diSVFicEJ4ZzhMM3JuNFd0bFVuRXlYTkJ0a0lNVzlNWjhRck1iTVNCamhyek03UlZWQVg3MXhaMWd3QmxLWWtaemFNRjkwVzl0aU90OWtmRkFpZkVxbmxHVXZHYzJLeFR1SGdvbXZDaTc1NmViT3pSdXhxVy9kY0diVnN0Qm5uVU5MS2pRd2JnVW1sZ0dZK1VYVWM2cnpvQWt0Rkk2OEtWSUhHbG1CTVlOQWlLRVUxUzMwY2ZZa2FiVXhkL0hwWWFEc011ZURuWktVVytoN09OVVEzbFZzR3JxbnNqb1FpQjRxemhqM1d0NU85WlBBWUc2NXZLOHh5T2FRT0JTKzhFWHJvMlltbWpxbGdUMjJKNHZKZEJvMitQMEM1SFNYTnVMWHV5dHMwL1NGM1ZFZDBJTU1HM0hVOWFpemxLZndjb0xBalJ0S3lwVUpxdXB1Q0Q5RWJkekloaHVxRnhhMzd5bWdWNDlYNHlqVUE1WmcveENHVUROUkV2WHJoUUduRFppTGxNdndnNUZvOHgyVjhiSFA0a2xQZGJoRUhFZVN6T29OR2djNTdQVEJPVE9UL1JxN3YzeXFUWlZZcmRJQ0NCcWNkMWFGNjF5LytORU8veXRkakNDU09weHR2T1hBWFhVZEhXZVNTSDlzSEFZbHpWY2FpcEJleVVhTkRRanRLY0xFczh3L3VGOThJVzQ3bmticWk1bGZYcXdlNml5TW5DTTQ4aE9XemYxdzBqVjYwbnZJd1YwU0FrWURtYTZUOEhNSktaYkljUHZsQnZyTUw4WldtRXI1TzFkWURFVUkyMS9saHFPSlBZYmNyZmd0REl5UDN1MEs1Yi9tTUVIa1REUUkxQ1UxRUhXR0s2U0U4OXBNYWtiVnhGWHlsUWJUaFdQbnZCNDZLVG0yOTVLRWhyTW9kZ1NmZ2YwRVVkQnUzNWdMQkVNdzJETUxTaUU5OGd1bnBsd0FaNDVJYlBhdW5ZblJrY2RvblRTQmRkTHRmaDBZREgza2tKQ1BOMUE3U21SMG9QNWFIajJKSW9NaVRLVGgvOTM2d0NVaXFmb2dlcnlML1lhN3JzKytkakRBTmNqcnZIL2lYZGRjeldTUXZvYmE4d3VQcEd1dGRLRmpTZHZzYmk3NUhZZzJ4VkEyMlN5Rk1YVUlIS0dBcDh6dzd3L0thOU83Z1JieFpyeFlnaWg4NXdOY2NZbjNZb0FIVldnSy9QbmZhaEdscjlwOUwzUlp6b0JsaFR4WUxiK1V5TUNCQWRDMk5PcUllOVpPb1JzbTlXalNLNE9vOXYvVHVtRUJTK0FnaksvVzhJMlNLbXhJOFRwbEVWcE5JV0JqU3VjNWJJSE0rQ0E2c1FzbDVxRW9pcVBZOW43WEEvSW1UWUxaVlZQYzNsb3ZRcUhWOXV5eVNWRktFZERVbTduYzl4b1RMWHRzNGZNV2RWbHI3SkVNZXZwOW9ad01oYzBWbWNKV09HL0tVUjBXWE9qWWVNS0RWSEljZnhmQjNncXNWeWhCTkg5WjJud21McmhQdU9uK1FvaHljc09PY0RuUjIzbVFLNXRBQUlYcTA3WVpHNzJ2VUkyTEUzN2NXRXM5Q2xEZm55d1Y4TXc4anBOZDNZVEJldEYwdC9PcWpLeXFNSXh5eCtkSGcyRTh0TXJyZXRVVlJ1WmM5Q2VNOS9KVDhNZG1SUFJJM2grMThTNXdRcGNIUFlVYVI5QjNNRGh0Zkh2b2xVazFpVy9ydVhvQ1ErT08ySHJTNnRVVFc2bUd6alZIbkY5YWw5UUs4U2hOQU1nNTBwRlA0NlJWcDVPdUM2WGhGYzB6QW83TXpsNjBZS1pVaFp0bjlsbVo5MEwxemliRkdSQUhaRG9ud2kvWHl4aVV5RUwydHdOeUZ4Uy9qTEhLOS9JN0xPTlVZbHNiZmdjanpFM0JYYU4zcDZGMlBYdFZrK3FrR05MM3RBbWdMdXUxeks4TSs4Z1RWWTVwZ1g0SE81bUphSUtzMGRGZ2I0aXR1dG03N1NYd1JPekZlcXYxSENpd2t4NDMxUnovcVYrVlo5QmU0NDFrNkMreDkwcktaZ093S1BoTTNVdTlONTNhY0hZamdvYnlKdFFtUk5oVXBNNjhacjF1UzNHV3UwKzhVVHE1RTBZelN2RjZGcklVOW1xTkpJZm0xMVUzVy9Rd0dyZGtKV3h4NnpibWJHTGdyb1BHWFpsZHpVUndzNEJjZGZJdFBJMWtBYkxReE43cjNlTlF2a3dTdE1kaFFnOHpQb240cS9jQ0JKMFl1c2l3M3NLTmFtSTg1SkQ1NlRRQTBtWXJkRjNxV1g0SnNOUnBCMnBER1VReDhIZlZscEwrcWFDalFXWThKMWo0NGs2cWhpK21LMkFMWHMzSktqZldoa0VlOVc5d3ozdTkyU3dUVjFTZjZkWStBWEs4Vi9CM1VBWEtwSUMrV3l5M0o0MVZmVlRVaXRNN3hWR05pUVExcUNGR0pPMlIrSUxDb1UwdU5pZVgvQ2lTQmdSL0IycWYzTFR3Q3VtVTVUZWdaeTZGT1hvZjc2RXZiZG95T3IyS2E1ZEg5aHpaQmQ0OW55N0xJdWc5eVBHUmFvQTRtRVQ5TExDSzFCSnFzNHptNFcwdzFYd3JrOWgxdHo1UmN4bElrWXV4VzIzRHR1bGM0TGtQdGUzbVEwT1BRTE83b05ieDdRVEtxTHBRa1QrUHJtNk5temNpcWlvZ0dZV21lbXJxV1BSZVpDL3pvSyt5anVvRDl4MjB0VDc3VU9RRmhLQTI1ZUhrWUp4TnE0ck5SQ1NXcldkb0NXSXZXUE9MbDRkSEJSQTRROEliVUlpTmowV3VKRmNMU1BSNW1adlJrN3RxaE5zaEp6S0oyc0V0bUlWN3Uzd29aU25hek9LTVpTVGkwTUxRSXMwZEpBSjJwckZnYkV4eWdYQ3VVUjlLZXJIdytXNVlGUUIvOHIwRjBVMUhYeUk5enNRQ3l3bi8vMlFBQkFCb0FRQUFCTndCQUFBOEJBamNDQUFBQUFBRTBBWjFBQUFJQUNRSUJBUW9DQUFNQUdWUm9hWE1nYVhNZ2IyWWdSbWx1WjJWeUlDZ3lLUT09PC9CREI-CiAgICA8L0JJUj4KICAgIDxCSVI-CiAgICAgICAgPFZlcnNpb24-CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvVmVyc2lvbj4KICAgICAgICA8Q0JFRkZWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L0NCRUZGVmVyc2lvbj4KICAgICAgICA8QklSSW5mbz4KICAgICAgICAgICAgPEludGVncml0eT5mYWxzZTwvSW50ZWdyaXR5PgogICAgICAgIDwvQklSSW5mbz4KICAgICAgICA8QkRCSW5mbz4KICAgICAgICAgICAgPEZvcm1hdD4KICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24-TW9zaXA8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgIDxUeXBlPjc8L1R5cGU-CiAgICAgICAgICAgIDwvRm9ybWF0PgogICAgICAgICAgICA8Q3JlYXRpb25EYXRlPjIwMjAtMDEtMDdUMDI6Mzg6NTIuNjcxWjwvQ3JlYXRpb25EYXRlPgogICAgICAgICAgICA8VHlwZT5GaW5nZXI8L1R5cGU-CiAgICAgICAgICAgIDxTdWJ0eXBlPlJpZ2h0IFJpbmdGaW5nZXI8L1N1YnR5cGU-CiAgICAgICAgICAgIDxMZXZlbD5SYXc8L0xldmVsPgogICAgICAgICAgICA8UHVycG9zZT5FbnJvbGw8L1B1cnBvc2U-CiAgICAgICAgICAgIDxRdWFsaXR5PgogICAgICAgICAgICAgICAgPEFsZ29yaXRobT4KICAgICAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPkhNQUM8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5TSEEtMjU2PC9UeXBlPgogICAgICAgICAgICAgICAgPC9BbGdvcml0aG0-CiAgICAgICAgICAgICAgICA8U2NvcmU-NjQ8L1Njb3JlPgogICAgICAgICAgICA8L1F1YWxpdHk-CiAgICAgICAgPC9CREJJbmZvPgogICAgICAgIDxCREI-UmtsU0FEQXlNQUFBQVlqZUFBRUJBUUFCaU00SDVnd2NEQ0FyQTdjQUFBQUFBQUVqQUVBQUR3SUFRQUlBUUFJRUFBRUI5QUgwQWZRQjlBZ0ZIUUVSQWZnQUFZaGRBQUFBREdwUUlDQU5Db2NLQUFBQUZHWjBlWEJxY0RJZ0FBQUFBR3B3TWlBQUFBQkhhbkF5YUFBQUFCWnBhR1J5QUFBQitBQUFBUkVBQVFjSEFBQUFBQUFQWTI5c2NnRUFBQUFBQUJFQUFBQWFjbVZ6SUFBQUFCSnlaWE5qbWNvQUFabktBQUVBQUFBQUFBQnFjREpqLzAvL1VRQXBBQUFBQUFFUkFBQUIrQUFBQUFBQUFBQUFBQUFCRVFBQUFmZ0FBQUFBQUFBQUFBQUJCd0VCLzJRQUl3QUJRM0psWVhSdmNqb2dTbUZ6VUdWeUlGWmxjbk5wYjI0Z01TNDVNREF1TWY5a0FCQUFBVVZ1WTBsRU9rZFNRbFF3TWY5U0FBd0FBZ0FKQUFVRUJBQUIvMXdBRTBCQVNFaFFTRWhRU0VoUVNFaFFTRWhRLzVBQUNnQUFBQUdIWlFBQi81UGZFeUFVTFBjTUJlVWZGTWhxbU56VHNad3NDdVpoNVN3bEN1T0xpdlN3LzBHR2RmVFk2NlNScHdCTHd6aHFqQXZabG01Q0lOYUFlZGtQOHIzdytza0pzMDc0Rm9DQThVQVJFaG1sbit0YU9GQkwyMkdDaWFFb0lWaHBCb0R4VUNlcGg3dU9LMXBXbnQrZ1g5VVdlNGc0M3FkcGZZRDhDUUJFTk5iQTU2R0oyOVFhRVUzYzhUU29Rd3p5eEM5eGVSS1VZSGRlYlFZN0tycnBYREhIVjRrQUpCcnEwcjJiOEpBSVdaNy9EN1VMdGxpR1NCQWVzZXlDa2k5enVPaFdnRkVGZTd6R24zd0d5TlFqZWpaRUhsN1AvWElqdjF0NzIrY0hONnRBUnNwVXNsenhyYk0waVhaVUxOYXFRTFBZOFhtNml2bVcyYVluNnVFc2RFVWZkMnNUY2pvUTFrVnN0S1JuRDRUaU9LOEpnRDhEOW5ueGJ2cFVNWlk0S1RTRzZWRWgwZmF6MjVaV1NNTEdPVzVxSTlCL25lY3NlQUdvbzJFWnU5S2wySkc0WDgwQVV4NXlleGRWdGR4bFFCOVpoOGlQRHJDclhjeVlKRys1alBLL1ZqRDZPS2RCZzdNWTFPcUEvR2NmR2UvTVRGMXJJN21CSUlhVWY2aFh2MEtBOForcXhRRjMvai9JRnhEWEtJOERZUVhQSERUdnZQS3RUUEhpdTRoc0EraVFtclJHOFkvL0dnSi92ZFhIaG5tcHd4dzBkdkpmV2cyd0hVVlZjMlM0YjJOZWwzNTY2eGlEUFRucjJtUGw1SGw4SmZGUmVueDlLdWJnZWVneVZsWmh0ZUZhTGl4OGo3dVoyc3pUaGJ5ZElmVWdLeXl4N1RCTEVyUWNQSkJXT0wxNHNUMmtucm10bmNIMHJ1OTc3TjFDZW4rUm1DTGlURWYyS2hBMGZQTEVOQjg0bzlsLzFtWnVZK1Jkd0xpSVM5SEhWck9tYUx4MjB4c0dFeEFlQ3M1SjF3dTJqaTJRcVB5Nk1HUjluYmZ1dUU0a3RvQ1d4TmNkYkZaWHRTSDJic3poZ2xBc3JwbU9UY1VsR1lXZzZNNGsyVXdyam13WHVSWE5RajRTYld0R3ZDQ3BnTWQyRGxENDRDT1prMDdNUU92cEpVNlZ0YVJBZ3ZHbXoxVVV6SzFUVXlFRXRFTkwzTDBzRHhmOHJjWHBjaXFXLzFqSm5BU2ZXZHZuNjlwRk1Ka3NmaG84VnNpajhkMUZic3JraGZTN3hrVUh3SnZXRDBEMW15blhIRkZJUk9keE5GbUJleDJwenZFK1UvMFlJZjlsdWlGQ29VMFdpaENWS1dZUFpManJ0cWg2MUpFdmQ5RzNVMTdQUXZSWS96djlzc0JwLzJKNFVJMWk5QXNPVi9Pc0VXMlVZMlJ6bkJZaGtTcnZEZ3FYSVd4UFRvNi9GOTBBUVkzbGt3S1Q2ZUV2bEw3UU5FT1BvU3VTNEg5bW1IMWN2SFNoOXk2Z2hqN1I1SkdKcnF1L0JEYTUxNERYRTNyZ00waml2Tlk0UXMxSzk3SzFpVllqNUhGV0FTRmI3SzRUNnVUUlhHOE5qY1JuakRZUVdHdVZDZno2SCtwUURFUU5sZE1zUENpK2krSVhCeFhwVEZCODc5MnVJKzNldFdhUGJnM09QSEtlcFoyNTZWSDJxZnhYY1kwTXJxN0ZWSC9MN1d4WXN5b0h2NkRKQnJDQzZ6b0xxdnhRQnJSL3BMaFMyZnFIeXBkdkx5aEhuRDc4SXNqcmF5Wkx5djlVcHVKT2M5M3UwTW5kTjNBOUlPNmV6ZndTVGU4cjF4Vng4bkxFSXJoRW9mQ3hzb1RkdXhDOHU1R3hMNjhvQi9vTXMzZTMyd1dLTTZDUG10ZmdDQXRtVnhkVW9CLzc1YUwwcFo1ZFJnK3hsRERDaVFCU2txRG9OU2dBMTkrbi9LbXpMK1FYbjBXckYrVEFLSWsvYVRuN2hMeWwyc2JBSUY2SjErd2JvMHpmSjgvOHlTZk1sUHpwb05mREtVQVhoSzdIa0Y0VEZSbXhsQWQwRjhrdE5ubVVqMGpJbWthK3lCT041ckVoUFEyZDhMYS9QbzFHSFVCZDc1aUhmQ0E5NFE1dkIraldFUy9IQUg0OWdrc1VZejM1UFRxUVR4UFFIcklVZ2hlWm43ZHZlNHlFMlhSMThyVDhmRVpnY3B4NTlic2JWRFhwUlNKSUFGTDcyNkxRMnlDVlByRFdLREFLdmZyMXhWMkdiWDNJR3RmdDJ3Tnkzam9Jd1A4YmZYZ2hucld5bzFlSTBTeFFDM2FWakFQNGw3dE40Nlg0RW1od3Y2OFk1bTRpVXpha2VxUEMrUDhaZFc0U0pCMGJxRHlEM05xb3NDK2ZZOUlCeWNYUFJLSHJJMk55MWZSaGNPd0Z1WXNML3VUZ2xLK1RTTWFvRGZCdFlHSUp0YjFyQ2wvNmwxVFE5bkVoR1pwQy9KTlNJd2lPTVpLV3ZwOS9BR1k2b3pOSFo1V0pZQ1JtVHYxeExJWTZBRXpiNHpGbzJCOEhFZmV3NGFJOTRHU09mNWhaWmhrVWlySklMMmdpc0FCMmIyOWRWeGhQQTBxTHU0NlNWcVVSTk9obUZJMnZvM2dtUFlURlNtSGNTUndYdVl5dTV3QWkzZDduS1o2Y1FUNjQ2SElKa1BJM09zWkRmYWQ3WkFLZDcyZ3N0TVVxRUY4OWNGM0NCdzEvVGgwbGhUdEZxdG56eFlzRmpaQjdKT2tSbkJNZTFNUUQwVDUxc2RIOEhSMVYxbVRuVVRxejlYaGlRV0Izd0xtWnc5UUFlOVhlbUNFSllnMGI4NE5wOTRseUdEQzBJRzdPcVVHdGFseE1HL214WHZqbjZoVVRyVjVvWGdvdk9rOUZUa0tEZEVPZnlHemJ1dHcwNVRBUlVKbmduTmNYZDZQNkVnNHB3NkNsNDNiKzNMaFpLWnhSZno2Q2drSnBhQlYrSldBTTAvWHZDZzBzdE80UitmYm90NGUvL0NGU1o1UUxXVVBWR2o5YTN2Y21SQk1LcnhEdnBxUWRmNStPN3RTbTdIODl5OWtHenduUzBxVWQ2aDNTM3hiZDIyckpGWXpNS1QyQmVCQXBabCtQR3dxcVVTN012Vk0waEdwbHdqT2JLaHhmeXhDaGNrcGVqd3lMank1cy9HTGJUdGJDRjJxdm1PZVRZcXRsYmdpWVpZbkZzaFlsb2kyUWx3YVk3ZWlXTjRxUzF5ZVN2SlVldWgwNzBuNUFZbUdlYVRtOG1EQ3g1T2lLd1ByQzBMN2pEcVN6UHpSeXVjS1Q3cjJTNDRVNld1bEdnWlF2OG9ERDljTlFWMDI0aUR3ZElSdHp1UlZlNUdrSGdFNGRRdUxVenlaVXh6SEZJdHNBOGtYbEZVTTJNREhjYTRIekNycVdwaHo3U2F5TFR6Uk43L2dhQnV6ako0UmhMRzEva2NUOU1tY0lMQ21CZUZNeEtMek5qTDhlQTZEL2NtN1dGSlZpK1V5ZlpqVTF5M1lVcXhUMUsvZVBVK0UxTFZWbHU3VnAzZWxEVWViamI5TDhXSDJXQk1BSVNCT0RMOXVUZWRFWVlzVGVYMGViRS92QklSUXQ3OHZYd0pSZ1JlbytUYzl6YkYzL2RveFV2VUpJNXBPb3ZablY2bkZ0OXBYeEtrZmxEWndGSUllSTlBUEJyNlE1c2QvdElBcFh1cXRpQ1dVNWZXdUtFdjROS2puRnRSZ285akFMUDRwR0YzUUkrVXV1TkE0RUloQzJGSWV1eDkrNjRnTTZwZW9nVU45Mmw5R0FBK1F6dWo2TE55MmhjdmtmSTFMa1lOTk5MaFdUS01xTU9qRENIR0QwYlNycE9JbzhVeE1kYzdvd2l3YkE0bVF0M0NtSy8xd1cvdUFiRG8rWkxSSEliaktYUmk4bEIrU3htMUNteTNrSXEvUlJ3WmJIaVZkNzM2aldldjdMT2VSaGNnOHQyYWRrc2xnUWp4YXN4by9WNUNoa2hzVXJJby9vcVBIYmN5TjZEb2ZWWUg2NmlXdHRVZ1F1OFNWL2lkSzlHelV4N1l0Mk5OSHoyc1lsNDUxcjVZUzZKekZzTnFHcmduaUs4U1ViZVNwaG9XeFJCVDJiV2tlSDZaZ2pKUElncWRxRnFJWkluUytjc05pR1dXVEhXYTBYQko3cW0vRVRROFNpbFZ0V3gxNWFLTFg2TzNVWUNVdzg0Q2I3S0lLYi9QSThxaUlTR2MyRTFlRFpGZ2k1VlhlUkxxdURESEkzZWpCWnZrRGhDZHVJWGhaSzY5ckhMaTA1ZXhXZEhwRjByRzNjKzZpSTA4b2tuZGNpTzhHSnRZRFlZbkRZaVpHbjBDOUo5a0thVzVsV0FMSDBNMDNmRXM0TVluL1VmWWVNQVRrSkVkSmhWb2RaY0dJRmRFSFJKU05uak84VC9yV05EOHFUUHFpQWJ6QnR6R2ZjRHdxR3hQeThnK3JVaTMzT1hjVlBzdXQ2NkRWWlRHM2VkVGYwU0ordmF1RFpVNzAycjlwNXBnZms3cFYwVnlXZFJWSFh0V3ZYYUlkdmIwV1NZdzFmS0lWT3lKM3FjUWxVMXoyS3dsRENCZ3VDTlh0RDFsT0NIaEVaOHpYQlMwL0EzT1M5eVZyZ3F0RVR5QU5hM3N6WS92Y3pYcE9XaFpTajh5SU1MbE9hRzQ4eXcyV0NSVkdXc3hYYTJwYis4QXZHcDBWYjdGQlN5UWp3ZlE3SHJnTkdvdXM2WG5BZWJmcVpkd3JwUnZuM2IvYWJObXYvWkNNMnVDZlhyemxMUVpYQ3NaM3N5anVXSklQeUN4UGJma3k2eEJiNVZoYWUzSGkxcDUvbVc0NGlQdmxIMzIvTDFib2ZNQ1VkNlFCY3ZWeVphdmtZRFJXd1RLbldoUnlscU0yb2p1S0p1TnV3UjlVbFhkZXdKSHpubmhHb2NtbXlCNDhkTEN0Wm9COFd4bCtDV3BWMmIvbGMxQjQ0cnNleWdzMnpyclVBVnhSOWsyLzdkejFTRUhia3Y0SlFvNHVwMlJzNnl1d3pDemFwNTZHVkZCZFV2VE5MS0M2eUdIQVhnV29vTC9vR1o5eGJvUTJDWGFsaUdoNHYrR3pDa3U5RU8xVjJ6a1JMT1h2a3lENUw1SEhjVm4zc0JIVHREN0Z3UjBrbXczdlZTVVRBWldxazlWdzhYUFN4WU05N1g5SzBNNlhBSUlrZk9hdzZvbXM1eldsZ2FMOXRBdDhqb0JTR3BRMWdzWGp5YWlPdjJ2YUl2bjdRbXFyajRJRm5GSWlmOURxUXZlNnZHOHNhdWRNUWcyYnJISVVnSWhXaU5ZSHlrVkJLbnh0T0lMelJKN2ZPMmI2OHExK0FCalp4alpVdU1QbVgvcFRZa211Nmc3TUhiSWdiRUZNN3NYMHdsZG1lYmlSMWVpRHVuODNtRGNDdjY5N005R3BQOUh6RlVvR2pqRDZUSWFKMGRTdHJmOTVpVFZjNVlrOGRtS29RMUlPbkI1eXExTVlwaVZmMDNjb2d5amtKUHhWMjZYOHJiWlplVS96Wm1hVGM5NGwwVWo0dUd1dDZJUzQyZHcwUm0wSi9uV2c0aFo4VUxVWXdFNkQ1SE9YSEdtQWRZVjYwQWpHdlI0RnNML2Rsckg2bWhyZFRPQWEzR2hibHFIV2RpcXhsVzVGakhlbjc4Rmsyb043S0ZDRk9jdWM2L25BWTM3eVFUKzZQN3FIazNobk1PaVFOemNzQVN0ZWovcEZTcVd6ZDFTYk9JNGg1Wjl5YzRhOEwrT29Gb2ptQXpiTE9Vb2tFVUkxQmp3UVVsQm5vR29wQU8vYWpXMiszdEZoUEUwbmRsSDJWYjVJUENzaXlWdU4yNWhrbkQzWldzaEFscTJGUE1vY2IxSkU3YmFlTEd0K1VtTDBHeUVXY2dnT2pPclpVeno2dnlwTUJ3YUFzQ2pVMXZlNTUvblNoRXhtdlFZblVrcG9ybEF0WWIxSFZqQ3c2TXRISGR3a3Ryd1VzZ2U1MXZERGkwNmxLUWRIMFZ4bVdacjVKS2lmSUlEUEJJcjdML0d1SGc0MFpjMHBqbFhFSmN6WFA2NnpodUxKZkF4anNPQ0VhYTRRdGZmV2FqSXRiTFcwaUxEMThhOFFEMWRHdmNyTlQ5ck9VR3c1amRGbTgvdXNid203K055SFhEOTB2ZVVZVWNTVU9wdjJVWXRwc0U3SlIwMm9iajg2TWhGd0lvL3ZoaDMyNDFFK1V0cUpjbGd3YTlJcERxYmUyV0FLMTNraXVHQWdQMzlmSHMwWGd0M2cycDQxdGRQaXJweXJrSnliQk9RTFZzMytFSExmN1RJNEp4S1NPUFJZZnlja3JXeUNmbS9icERGemxTN2E4WEFjMHd6OVpqWDQ1Tjd5U0VnSVdLUkJYQXEwMWUvWUd0MC85WW9yTGVlempKQnRTQ3Brd2xqOWVCRzNuZnc3b0IxN3RPUFFpaUhLaExSMS80UmVnRTZJdWtFMkJTelY3cEw3MVRvV2JqTS9PeG1nT3VXclY3NzAzcE04VDNiNkRZQ3Frd0VSbTFxaWwzVGxDY1BjTFhSeU81ai95Nmkvc1Q2OURHdTN2M1FyekR4WDRDd0c2TzNoNjI2MTNJSTVDeFNuemFQOHFCZkxwNEhwaHgyTDVDbituKzdTeDBVLy9idUZIeEFJQkE1QlBSRGVtV3J6d0lnYzJQSjQvUlk5UC8zMnN2eGtCbzF4RVNGS1liV3FkRzFxc3EySVhVZFAzTnBNQXp1bzN0ZWZncEVvL2FXaXhyL2J6Tk5HdFJQSDdteTJsZTE1alJLTDErRG8wVXNQTEg1ZWRnTVcwNUJOOHpNYXMzeW9UaTBOVm96VzE3WStCVGRFMC9VZEVEZDIvM055Y3dnTWwzKzA3WGJ1MXNSOFZtS1JqcWpHMUxsNzRLUW9HVVlQa0ZvQ2tWSDlaTDFlVnZldjhvWnQvMkZ6eXZaOFFmOW94bkRLc0MvSVhtelBTS0lycTc4eGcxbFcvUFhPU2IwdzhkRytOa2VBcXl1TWdEKzlGUi9OU2RPVVN4UEtVUG1LZ1VPVXlrTkI2TXlJVFQyeHVXOEVDZG80WmMyVjc0WGJkcDFsZGUxYmpHellrSGJhZ1lxTUpCYnZQZzhhc2x1Z2Q4RnNxblV4cTdveDNGK0lRcXY1VkpSTno2RVBqS1RIQUlhc01YZnN6U2pySzE5cWxGcnNpaFFRQUl6bzJPS0p1Z0hRTTN2ejlOWWdJdWFNeFZNbFNaR0xhcGk5YzkvS0tuclg5Q1hIMEp4ZldXMkJSdEdHcndsSEdTd29keW8vTmMzMEFDdFV0L05jakNIMThCREo1eStCTmdNdGREZnhoYlF2cFBseS9NbW02RE1mdnRleDBySjJpZHlaM2NZRy9YMG1zaUtmWVhaOW9ENldwQTkvZmV0cDcwYkw3K1hrUVVVQXRBYjNHMlFFeWc1NW9TaUVYdVdsWnNUdEF5LzdYUTJGQ3JETDhTWjUwbC95WkxaUjJDMGFMVHJNRmYxSU5pZ1NsTy9GRVkrU3BaYkN3N3hDQjBHTWxBVGFCOXRldmhKS3hRWTc3eVRjbW50VU91eFlWRzhQT24xcXgyWHBxZi9SNitRNEJ3NTE4anFlVExkWTNpb1dOZHR1MTlSbW5mRGc4eFkyWDhZOXcwdEIyQ0JWaVgwb2ZSbXljbXlDVmRScXhEQ08yNTlhYUFQRjBUTGk1L3dQYldjMXZscm94WWRUdUVrSG9YVEEwVWdLNy9wTFZPLzZsUGMydGxpTnpwS3UxY2czZTF3MkJCVXk4TTdjVUk1M0V2cHVEdER0U3dKVVhaaTVya0pzYmk5cTZseEVqSjdVSXNQcTVlWU0rNXJCU2VOM3gzVWI5RDFkZjU3a3F0SFdaa1lNeWVadzlDSGdMVSt5WXhEc01vZENLOG1qN1F1S1ltS0hQNTZCMEE2cjcxZGl5a3Irb0grcWY4bnhTUXFYNEZTKzV2QjJvR056V0NhZjhSVkZNcnd5OVIyMTgwdTRqUHJqSVdIRHVoQzhyZlllZG1nNzNyV3A4OXI0VEdoeVUvM0NPUUhVamdtdGMvM1FJVklTK3ZzQ3FmU2c2WEJLOElBQnpVUG85RXk4R1c1a3lwcDd4NnR4dTB3SzdNdXBoMWlLV3N4YmNTZFVkNjRMT3U0ZzhMNXF1R1lPQU94MWVtWGVEcExMM09JYnZ5WmVhMEhtTmI0Sy9ldUtEUzNzODVEQnJ5cE53M0tpZkVidE1tTUh5QlRhU0RlajRqNExYU0xRVG1KZ2tDcTAvSFMweHFLMGJlY3Q2aGtzQjMvV2NUbzhZMngvcmprSEE2dXgyOTQxTHBpMnRicXZQdEwyYW5UY0wyc2ZPL1NEOWdFMjY2Z0xyajBlTmpxZzFWdng0OUZVdHBRc3ptRm5RbVdOU0syVWpXZ3JhTjYyK1E0WENsMmpadTQ4UXQ5VnZaN1RDUytGM2RTcEVBekdndVVWRGw4T0hNTmNuckc5cHJUZ1ZiMWRKZDh6YmlXZlltdEdpMHhvYmFmZ1VVVm9WUnBvdDdURXduam5RN3dGNGhzL21pOTBaVktrWnNsbTJPbzJ6U1NoaFpwZDE3N1lsdGJQK0J2Q0RZdmFqTG1iV1h5UnhQaFBDQi95WGwySWJyeCsrekllMkw0bDU5OStFcmF1cjVtckFIZTNUWFYzY1BickYxZnVUSURIdzRvelZOR09RS3JvNUlGU05WaS9HQnhyWDZpYThBNXpuMjJkVU1QNklhY3k4ZG85K1VCckoxMzRoK0t2ZTBhd2NydE1VWVlkbURORGMrcEpveTBSNk1MTnI1VTJYS2k0dG1IU3lsZFhtcUpKa21xdllyZ0tqUEkvVW16d1B0Ry91cEFocnBJUFhzRDZmNUdaNXB2SXZFSUJaclRZMjVNcWlaOGVlNEtTWjhDV2lXdDQwMm9jdmlRc3JaMFhOUWU5MEFCM2FNdExmZ004c0o5NmI5WmREQ2ttd0ErVjF0VDhhUTFYWkFhVVFtUWw4ODI1VjJqTUwwQWZSVkNjTXZSTFZpK2x1MjEwd2lwQ2VLcUJDaEpQYVVpS2xZeEtSNytXTWRqSHp1eGNoVEtoZWpxN29rMTU0c2JlM21yVGsreEFEY3NoTDZJNnF5dFdqYVJ0d2RpaG5PS3ptVFZ6enVJNUhtemN0dURpVitvQkprbUZlMEtQVWtmQXVWOVlBVHdDK3RscU1BY2J1OCtxZFRzeHpYTisrYlhvNHY5WkdZQ2FQeUc4Nm01S3pkek0xdHRIcUxUOTd5b0xicEhlUTd5a3Y3ZWVaRGhoVkhiSGdqY2hMS085em43eU5rUWlPdkZ1OXdTSWg0TVQ1RU5rU0VjZUw0cEJPOWxnKzhnRnQ0VnVKWTh3QXd1SkhXUms1SnpDbFNQWmxXTzlBWjRndVYzSm01Zkl2YWtTdkhUV3hldGtWbldLSm1PT295YTZpVXVYNXhtYWFoVkJSTEQ1R3o5eWRhaGFoandsbVJnSnl1OXRKZWdWUHFvbThRWUF0aDJLK2Q0U0h3TWtubitvNlY5eDhWblFDMk9QejdGOURENHpKMmRNQjVUeTdwRVNEMDM1UVdPNnZZTmkzS251eis4VDBvNHJKUDFJakZmbGFucTFTY0dhWERrRjRKTjREbC83Z1JiZW1oRGlDSnY4MUNDSzVhSG9GUWY2OG9pRGZhaklvQ3R1b0RhU0huL25HUlUxM29XNE1xZDkvamJ1OVhJOEJoYmJzdE5mT1hiQmxzb0RjSmNGZTFPMDRSZnZQeHVmZlpMZ1JMZE9OTU1jZlF2R25BbjJGMzZGNm5ISmI5NXV0Z2NnRStzaDlNVEJnRUhvZDRkSVB3VlZ0OWpUeC9xMmlOWVdyNmpGNWlKYWlhdHJZb1FycmNybnVyODJ6SGo5UUpmdS9Fb053MWdqRWNld1djSU5JcUpqZzlieXRNZC9wVnhHNUNuMnJSUnJEVHRCSTBTWHphQW1EZUxHMlZ1RFRzejE4NldiSGRVR2xXNG9meUErbkUwNmlsQ2VYTFJHbllraFRHOUpLcjZPZ1AvYmFwWWNtallnT2FFZnJGSHJRYjFORlUrOUF2RlNOeXdTSUNvVzRHQyttTHY1UU4xbFA0MjhONVk1bVFKUXFhaUo3UmU2SThPU01WU283MUExVXhqaitvdjhnZ1VtS2RQNnZFeDNkRk1NdVl5cHhXMUFZQno1SGVId2hOaVFmMHR0SUhLS2ZOSkxpckN4dkRqdzNEWnRGTW5pWVJ6T0o5NUw4MWhBc0VaREdNZ1RZQ1d0eXRKZ3JMZHJIZ0JzY3ovQ0NmVk16eG9VU1F2ekRQb000SDVTdWVSVjBoUGI4ZWU4bzJobjA0VVBLTE9Oc0pHdEpHTW1jcldPRXZkTzBtQVFVREdIYkNndWVZTXFQWHFIN25iRFA3c3hoMHcrU0V2RVVNT0c1MDVGSzdLUmVSNWhlaE9BSEFsUnBtR3ZVd1MyUGk4T21yaUNIN3hJTTNkMjQwOUdGemxYRmtpaDB3M2RqUW1QT0Vma3J4ajBJMFZzZWd2bllYek9sc200UHJyeW14SUJZSWFvbVI5NS9pRGZQWGt0NXhxeHFOeTZSL1dVRTFKV2NIN21OOWJ2V3pkeWp4OC9QODZsbkIzbm5kRFljaGlZVC9wWmhaQmJRL1lLTTM1T1UzUkdJNVFDNmY1MFZkMFVOSTBybjkzRkhJRTROdU5FY3k3bFZzcVk5dlk5WTdyaDBhOXZOZjNGaFNpWWlGQ0ZaMlVqVlFUZFd1ckRmSkwwL1oxUjFvbEJXcVJEOU1IZEJ5VXdjWE8zdHUxSENwWU1XQmd4U2tmRXM0Wk1SSmg5T3lNeVdCVHRWVHlYaERpbm9qWU5nenpTc2xBQkhQWmJIQ0JEcEVFaWxuMHJveEppR1E5NVphelp3alNBZEdVL3lSQU1kdS9zL2dZSFlGcVdEbmRES1IrUUVhaGFDUVRvaEt1NTNWN0hwMmtmdkhSU3NQam5QTkFBWlREWVlOSnRISXBNaUVqWjVoN3hhL0ZvL1o2dWNnSnVOc0tSdEQwUXBQRE5abGNyL1huZGMvZ21qcFN3Vi9NR2o4VkJFTVpYb0NLSllnTDQxd2JGM2FKN0VHK2hmUGowaUlyeXpSZDFlVjhRMmsybFRWeUYwY2hGWkV3YnptWHNtMHViWi9RRjkrU1JKZlkxQmt0clRGKzl5dmtmS3pESE9vcFNsNFZVM2ZWbzZsbVZudXNQdGRyRmNnN3NWa3hIeWMvU3NMbzJxUElCZm5HWnpnWHMvSTRwV0YraWVNWmFIVUhFZUJwd2xiZEl1cXorNHFDWU1aR2N3OHFWeXRFbzFmT1RQZ1hWelc1NHJoeWd5RVl2WWhMbVlIU1lxNi9QRFhpZGtDQy9TRHRCbHVvYzR1dEh0R3YxSmFaYnhjVTlKejZSMUUrRzg3UnNhTUZreFhJUFg3L01CbTF0YW10c2FxVG9zMnBMOWttT2pIQXV3L0pIL1Fqc0pmRmRWWDJnYnV2WFdkbEZWclRpUGswSkVlQWtHYnlHTm1YMm5YMm4rZ0Zvb1hhL2FhVnNTQmxmL0paZlptdXVPemRrbGxBSDVpYisrNXcyWnQ0cVNWRHMveWRoa1lVOEVmVGl4aFNqaFJyVVhjcHB0bVROMFBkbWJmQTE4RG11cTBkS2l3enM4TG1wL3k2WGNicnJqZTY4eHFybFBuRTJaRW5jMndsRS9MUUErc1EwcDlVZXhQN2lrSUF0SmtYRHJyTjE3dnljbnQrZEFSY053VWQvenFTVXZtWmpnMDBLQjQzNEJCS1J4NVE2anpTTnBobG9ja2p3bDJyUDNCYlhRZWxRcmljUFpOd3d5Zno5L1dIN1M5dzAxQllIckk3Ym16M1VPUGVjWUpyeXRTT2R2RTJjYlo4aTJ2VjROYjIzT2c0eVZMTGM4VHVGSXhaeGJ5MWpGK2E1NnJzdVpIRlFxUGs1Smw2bWlyWXU5ZVM3YXdJayt3TG53YW4raWI1dzFzUFFaL3FQSFdSdk16bk0wUHVoa3ZuK3laWW4yc3dZaVJRMGJMcUtUUlBZRGVVdzEyMjRPOFg3MEJHTkJMVGhxN043Tjk2cVp1SXBTa2F1UjJTRmJPNitEZ2t3N2hhZXI2QW93bzdhYkFDMUlmeUhBZ1hNMFJtdW9QREw5S0QrSlZab00vbUQyQnZ0SlptelEyOGI0eThmejdYV2ZrRXZMa2gxb3JCMVM0ZWQ4ZXhpVjFPenErc1JJcUhCRml3MEdqZ2tiaTV0OUY3d3BEZmZ4VWVHRGt1VnVaaXBXTGh6Z3A1L09yejlCNmpKYXJiQU1sa0lZZnduWWdnWXdOSldpMjNoWFJ5ZzZlRUs1VjhqZFFIR2VzaE5TRkg1azJMQ1FlQ2pwRm5kQWc4YVBwdkVKaW1lMDR0SElIamdCaVlITnhPZXFQRlMvWDFLSnJqOTc0aWhHM21Ec0V3RitVbnFKdHFsTStLTHF1bjZabmVjU2ExeEJ5dUJHRlBOUllFTHhpdlRvbzdEVkY4cTBTYnFUMXlFaFhMd1JqLzZuNTliOXdBYjJzWEh4ZWhsR003Vk1QZUhmcGZVUjgvU2NJSk10OCt6NmRPWjBaamtOOW9YN0c3amNnaGlEV28veGIweWNZUnFNOTMzQXBYYVVkbUxQcWIzeURBbktFMCtQRngyTjJoYk9KTTNNc0hZRXlkUEVXZ2tjLzF5ZCt0NHZjQW5TNjgyZXJId2Y2RUEveGUvSW1KZFNSVjZaZVNRK0RoemtiRDlEdU80K0VaNDByK1RLZHFldVRzMENhd1A3NmhybDBiYWk5bm5WcWs3UU9ZZmJ3Y1RlVHIvWXUwVjZrQkUzbEhyRnM0K2ZGeG0rT2VFNURtbStTcXBIdFVxZEEyU3hIbjlYWVBJS2hNYW00L21ZcGIyc3VUTHVvTWtGcXBKb3R4TjZlME5xYlQyNGZKRnVLeVVpUkU0eWFzMHpJcFVrUGtNUUVpbVhZeFRIUCtZYUxGcGo3b2J2TFpMVnBUNlFaY1NsUkgyNEtDUUg3Y3dPcWU1SVBCa2tzZjhQL1RLdjQyZm9YMS9NcHN0SUZjMGI5MkpOZytPNVZ3ZTB0QlBpd0YwV0hweWcwdk1HWnVpcjBvckV3b1VHUWkxaG5PU3ltYm1hZ1hDSjlOMlB0UDYwWWdsbXMrZmFORlhacnlkMGdWRDlNeUtlSklDejB6TXY1RmhhUXIyTjdzcFN0ZDRyS1F3cEdscCtkLzMxT1crMXdzb3h6ZEZHMlFwK3M5OHlUbTF5ZTlmS2xjdmVwWjVTaDlmR1JsS2NVamdwY0VDZlZzTmxNZTJBUmZGU0JQVWg4SkZ5c2xJUmF2bmdaa3FkV2F1SHRnOHZIcFdybTAzSjBYcVhZeUx3MTQzRmJkcDdNSENmSUE5SGMrUU11SXZaeFRUNmFrWW5wRUJSeGZIdHZFZXZkZUI4QldJL3pZK0Z2TDRRSnFGNjBIVW45ZkxXQSthb203R1JoVHR5VHByd1A4c0xBNTZ4dktyaXRGajdUYVlpSCtzelVwcW1PcmxkYVo2REZaVStWZzREUDcxRjAvSEI1bVMvdytuMDhEY1V0ejI4eUJZbTJFNXZKbUtkbXgzRU1DcE50UVlvMnJzczIyV1lZdEFhd016eDBjRFZ1Z20vdFUxSmx4SC9ia0lUMTl6TTR2bEhra1FwcXlESUUxWHZCK1B6ZjlyV3VoQ2J0TnVkNUpmcm5RNUFzQjNGSlNON3BmaUxjWitidnQ1eUxJaTQxZUN4L2hIMGVWSkwrTTdXMC9hT0JBbHBpY3JsQytSNS9aYlBhdTdWKzBSbmlXSEJrU2V4N3pDWkFvbktoZ1RMbVhsUmZpNmdPMUZFZG9mVE9oVG5qNUFqMXN6SExFdjRIU1RwS2VoWGpmRWRGZ2kzRXorNjg5bDF5TWdIV3lGaGgvQkxWaFVsdzJHZ2tRRlNsQ05LbVBmOW9NMUhEZjRjajdKWFFCdVRTaVIrQjBBUTgzTFJPVGs2aThRRWRkL2JBVXFDREJzOHJqZ1hsNnlOOEtQN0JQaG9HVUNhVDl1UnhLNU5xZGVoQk0xaFJ6VEt5MHlCeHZ6czNDRWZHK2srWHVJNHNXeGREalZBVDNIV1FybExwTGZiNDFlZmdESEswNmxQWDVmOFJIc0tqMzRhdlZ5K0JjV2swNVJxWGJXS240Q0FnSURubjFRQTBkcDhiZ1VoeGxTeUFHNHBMb3JNOHRPSlQ3K0l6OVNsQXhFSGFRWk1mMElWVFNhOGNKanJvb0tuUDFZc2tsbVNjcmdVdEpwc1ZwUTVTV2FvV080bnFvV1lFK2ZzWFJzaEJpQ1dPT0JrODJrSm1hSzBHTVozUDNiRTJQVFAxQzIvRDNJNCsxcVBOT2hNTnExOFFxc3FDcy9hZHp0emZwdzNGd1NBSzhjMHdXRHhUbE84Mld1NThUdmpYc2lpdjJmVXVhQjNJcUJ0akVvcjZqRTNqZDlGUGtHdmR3WmN0Tm5ISGozK0RBSkRoOERFemJFUGh3YUV2VVdrYUNaTXlvaW5tVWN5Wkd2WG55U09rSHBURUZpK2lzY0tHQ0dRdmd0djdTMDVEWXlVbVBPVFVZWGxVVnRNUFE4QVBLekxDMGdPdllIbzlFdDROUGZiYXo3MDJkazNZWno5YnNwVkVqbXkyOVRvTDRLSHJ1Zm0zZElKK2NlWkNpL2ZLSEZWdC84R1crQUZPekJ0YVdYQTJHYiszWlFJRTd1QzNIYUp2b3AvNE9PcWk5a2xxcEpCRXR4enVCU1k1eUxCVEJYelB2MXpobm5vQnUxQWhVNGU1ZmtBbWgwQk9jNFppa3dSTkZMeEhsZTNjdUZEc0NJUXpxcWVnWCtYcXpFTzlXNUVadytjREUvZ05rM3FGclpnY0h4dCt4RzFwdmdRZThlejQzWEV3MkZkWlkxVlpRaGMyS2owSm1TUU5KY1Y5WDV0Z1BnQXY0cFVQdW40NkhFQUJXT2p3ZTFJRGRoYjExN2NoUHg4MEhVYnBWTTRHUlFqOGY5S3JENGNVM2xjZGFTSzRubzR5a1pNRnp1eVFqWHRLTTdVWk01d2tJRkZxU1hWTSsxMVFoa2x0eWJXOEdDQTVONFRrNVg5U3RuWmhNMjN2ZWF2aHpYTXdGeWtkNzlYanBEeGNNeE9sVjA0SEdNUktQNUJCUDRzczVrTHorNUJZM2ZISkxlOEl5VnJOQ1pXc21HZUgwMy9YVFpPU1M0Sno5cURpS3ArRHpWd2VGQ3JkTURLVkZWOGZ0UWptQnBBUFY4UnovSmZoOHBVYnMvTFBoeGpxNU5aMXFkVXpVMmdvVHkxZDFlc3pFSjBZWlZPR1BzeXFHZW4rY2hvWnpsbVNWWTNJMXpuMDd6VFk1UXZFdWVYNEx0QXVaS1F1cFBzaExoWFlxeHRyMDhSbEpDT0Z1ZHg0MWcxMEVJOThsRmw3Vy8xU1UrMmhRWGZLOGl0STZnSGxTb0tRVGpoZ1E3Njh1WHVVMmhJYXhsUmg0ZHNxVzBrK01Ld0t5SU8zbDZWMTJRaGpEVXhKWmh1S0N2cVVYMFgyNTBYdm05N0p6L3lrYkNzYjFIVkpTQnk0a3pPZzZYOGRMKzYwQ29odXlPMFlqazBweFdBbFh6RE5QRS9jYlBQb2NIeU83SjJiaFYrTUpTYjVmb1doczcxZ3pRbHRxKzF1cW9FVTZYRE1MMllXRk8yS0VEN1laZGorTDlNREt5LzZGYnFlcVZjcmtBNGZpL0hQaW5FR0d1TTBER1EwamR1QzloYURZSHN0d2ljSzhocHozdXFvSFZXUDVvZzdMVzU3VGxnYWtvUDZJeVNqV011a3hmK3Z6M2NWczJiVnR2dGFTVXplRjNmSFhxMHNSYVNNTWp4VHNLdVNJT044VUtsMjBzYzB4RnJrNW56NlYwbENSTmVSNnBPV3lvcS9ZQUdDbUpsc21hZUZWaFhjR2dwaG1xblY1UFRCMVBkSGVUcHNuYnNtZkNqcVlIOFlvU3dod2ZNbGVTVUhXZzJYTWpIV2JaS281R003L0MrVEpzU2FscVNGd2FEZ0hGVjZlUlh1ZDBzM1hOS3ZOUFp0QzVPQi9GczBIOUVZMlpEZ29BZUFnWlZVTGdpTktJYzNFenRYNWVmSTliUTVEV0hPMDBkVmxFaE1IWFVRcDJKSmhGaGc3ZDl2M2UwUlRoRENpUU11Q1pUY1pGQWZHSGdZaGRyd0UxRnEzNk5wOTIwVU5NTkZmU1dNUzVBQUpoRFlDU2dRWUxhVzFzM2RiZHNJWXd6dWU5SFJnb0M1dzYxcVVUdE9tb3VrYlc3K2VFbDdzSDdWR0dhOTNoOUg5Tjk0ZlVZTS9FT2p3cHlyZUhBRlFoS1pISFAzc3FoSDIvVXlDMm8vZnhsYndPelR3K2JrMTIrYysrSVZObFBldjZmZHdjV2dxZllQWWdWMEFySTR6MW96Q29HWTloMVVHT2wvNEpLeXg4Qy9tV3laK1JMUmQ2UGZMTEMwcmNMbE02RkFWcUVlM1g0ZFdkcm9xaHBNQWdYZWlaSVoxTzBESUk0WjZmVDdKb1haVkNCbUxRbGhUWW1abE9JMnliSDRhRGptbGVKZEJmMGgwM252aVFWcWUydExyaTNuTlEyZnIrY1VDZnNYL3lNaU90dHFCSk0wWTRpWEV6MjZxKzJoTVh4MDRpbDBDVmw3TFpZWVp3Nk5TWlp5clVJVGtscTA3MGdBSnNjV204VFZrWW04VXZLSmEvenRCVTl2ZXgvNjlkK094WTAxaGcxbExjaHF3NVRqbEdyRUJxV3NHbjVRdVVPTDFSZDVYR2RZSnJ4NmRVV3NwVDB0L3RtYnkxZ3pwaE81TkdrdzBDcjBNeDVzVm5wK2toVDlBUW52MWkrSXp0bkxzS2x6eUZjYWpha0FnbkhncFlocXhlSGFodXorSEpKQnlsNVRYd2l4czdpSGxJbDk2aVlYbVhlakFONlB4SmpicWczZU11b0RVakkyT3IxV1N5RmRqWk9Ta1VoREJHSUZ6M1k1ZzZvYnJiY0N3Yk5OcmhuNzFzakZOWHdWYjFZMnk4ZWVsRzZFTFIvT3RSZ0d6OFNLeTg5N0l1dEVOTksvbXFtWWNPWW10WU5ZUHE0NzVZa0xIK1ZNSjl4VmlCMTJ2VnoyVVBkU0QrYW9qenBTM0tLZjhpYS9JMTdVTFY2OTVIcUdZZjFFRFlrSHJXQnh6S3R5SFluMGlaNDRVTUd5cm9GYzQ1RWNKUnRNQkY4M0duTlkxc0tXc1JOUm9NaTk4cnI5em9sK0ViTThtNWNodGpFMTBrd1RJallZbUdsTTZ3LzlWS3JqWnhlcERKcXNrTmJXMURtRnI1ek9pNkdHR0s0V1pKYzdnNkZ4MmZGTFh4WTFBMllkZGNnZWFoYjMxdWVOUDNNT2M0eGRFMjFOMmw0WHg1YmVhb2E5ZnJrK2VHWnh0OXNWZWluL0JUQ0s2M0cwZTRzaUJhUXZkcDNpNk9kNWVjQTJadnZnWHJ3MmdpejA2N2xqd3N1ajhmeWRTcmxiZTFlZzZDTkxsdG1IUTBnQlJpYTVUQnRpdXlEb1RzS2plV0x0UmY5eDBvNVJDeWJ6ZU9RK0FmdHB4WUEvMXpTL1JGVnZpeVJaY2ttbTNRaVpVSE4xR0xqaW5Jb0FWMlg2TWlnMGVkR1h5YjRWRU1VUG1rSTBsVjZDNy9BWk5EbEVrUGJCblBzTE9zR09pblhFT3VqN2hhQ3BLeUNHRHR2cURtWXB0a1YzNGVmeCtKakx2OTBRa0t2bzZrM1lCSmNBUFNMd1YzOWc5WGhld2JDVXZ5eEtIMGFNbGo1SHprSjl4UEZxTmV3TWRCVWVJc21FSkhQMzc1ZzREVkFOR2JTMjcvdVl1ODR1VWFsdC8wLzA2RUlnOUs2eWR3cCtDeGpWUWtRNU00c21Oai9LcE5TclVGdjZzN2p3YmVUcmdSdTU3ZXhsNHpCUFJFajdmY1lWYkZQamU1Yk5IT3J1Ym9IRXZxZDJ1aU1ocm0zaW12aGVnT1FaWE53K0FwWXBIUUMrN1hoNjdGZmRUZ043NVRlZ1Y3YXV0bmpxQTZLSjlxM0I4NFBtUjZjNkE5cTBpNFlCc0RPU0NjbjNLa0g0UlFOWTQ2UU5pbzdlQW5lSHVHQTd2NElKSjlhOWNvN3RDMno1dkxEblA5SlN0QkFqQXFMZGpzR3JSMTJhSGdpR0xkQmhJTHp3dmhUaEhoNDZUM1FBOFMyOGdlSXhZb1JQdGNDeEF0ZGRKeGpTbHhRMzJWdDVvMVV3NHlTYXFBTjJ5WTIwRWFwb0FVQ3BHd0lDWWNuY3pCb04zaVowN2g3WUx3dm1xTU1JRWNwU1EweDg5Mk4xeDJoQnE2bXgySTFIN1VhckRZSExGREMxLzlrYUwyalFnNDllU1RPVTNyUlpTTE5tSWNLWWlRd25FL0NzQ0Zra0tnazU5MTV6b0VkQnlreHA1NzFsakFEVThnNVhMYy8vcEdFblNPY0Rpb2F2bWlXdHJIRXJJdHJuc216Y0FqdEMrZ3RydXUzT20vL0plcTQ5Y2poWG5UaCt0T0dLc09ldWNTUkFVZ2UwRUdqK2ZxWEh1dlQ5K3AxWVZqMGd6aEpTNzZCbmhZcktpeHhuemVOaVpvdWtPalY2NUZ5L3dHZmFyb2ZUTHNnRmQxMWh5VGdpOTIybUl5RUxvS2syNXhDanNLU3hadWRpMVNJV3hhVlBuVGF1RVBLbUsvT3JFQkpYM25oSXhkR3BLTEw5WkdsaS85eUJKY1gxc2tkQ0M1TEl4UEk0NmpUY1NhM0ZqbERJMjNlbTY0cGs5dFhKM0hRcnNwMlhGbnpxeGJpaThPS2FwTVZWZTZqRkN4U0M4Zmc2NUpBeVBvMXlBUDhiVWpZKzNiL0NUWEIrd2FsUkVqR29jMHk4UXV6cDJ5VW9MdlJOUnJDcjBwcmF5YkJXTWJScmJSWXd0ekoxYm5vRGIzN0pkNmVNRUFsMlJjbGQzZmdKc3Q5MWpNbVJoS0ZOR1pkTXNWcloxMlZkVlN0aDRBTHA0d3p4ZCtFMnV6U0k1RC9BT29GS3lHUWdvSGdPVmh5YitoVGJ0aFRvS2V2c05QWE1KZ004VjcraGIrbXoxLzFsRjVyRTlnRHgyZ2dCU3ViRWtESDgrVGlyelNEN3dPMm9hTk5CV2NwQmo4OE5reVRoNzUxUFNKNWZLbDBhaXhjcXEzMmdNZDlEVnlkRDJOM1FxNXhWMnpRZ2dXTEFpdkcrNmIzbmlXZWdpa0swRi8rUkpMcGRGa0w1VmpsYXV3RHdEYXoyR2NlZlhFa085bjU1N1ZwbXl3V3AxeXVqamdrL0hOa3M0NzllRVhveFBGQVBaYVRncDRJdmRaWDBtQ2NpRVZUbFpUNFJzREJIb3VkT3I3bnAvbTVtNFdYc2tGeFRuZG9NbmFWNUkzOVpTbEh6b2ZzMlUvOEZyNnlxRyswMCtzc08rdGsrMjArbjFGSDM3ZEsrMWRBbVhvaXdCbUZBbHNNb1JsVmh2VktaV2tibUdXR0gwSW9uYVJoSDFFTjY2aEpZUEdPbTFKNzRRUTBYbmRnMXBoNGdMYXdtR2Y1VjNJUmNyM3hvWHFRelVwNC96KzlJT0Y3YnJGUzZOS0pKb3RlVzBXNjRGT0l5YWpCaWNxNEd2VUpxcTlXT1JwRkhRSnlaY3o3cUhHd0hzMEExK2JoVWZvcHBoaU1EVllldkpJY2dHZytGM2o0dVZPc2JaNnJiaER5Sm5hRE95K0p3dURTRXRQL0h5bGRmZzg0VmNjZVE2R0NMWkl6bmhPUGJVTEtnWStXOW1IbU10TTNFMHpyVVEweC9ySjBGK2JVMUl3UzZ3MXBFSWlEc05jNm9VY1UxUjB6S3JHZThYNisvbkxJejltcklhR1IxclA4eE1HOXVuazgyMVJWZUtPWkgzUmRGVGpUVlpiY0NKUnFsc3Qrb3ZOOFQwRU0vajM2d1dJM2U1TGNTWmRaU1haM1QyenFWSERGc2JXV2lBOTdwWHhhZGViZ3lkQVdGTHcrdkZTaldhN1VibTFaeFZpUzZkSlNFR1JOVkRiMWhZL0tCMFgrbnVYUmNveEZwOENucGtYUzFOdzNGb2FRM29adVpWdHo1ZXV4Y29Kei9TWmMvZHJLT0Q2Y1YzajZuY0doRkppTVJzMlQ1S3p2dE5RbzIwZTdkL2VuSm1IZ1FCNlkydmtIbEIxRFYvcWVZTFpJQzBJTDYvc0dLZG52bnZ1VFdIaVEyRUN6VkJaQkZ3VGU3UGs5VGhlZ3hZNFlNQ0w1SFFpei95T3hHTUU3TkR6S2xadlo3dW5rWDVnMVlwNTB5emQvVTJmWlF0T21vV0dFaklVSUhqRGlSaFo1bVpqYUQ3VGc5cDhYd2x4V3cyR3ZJT1N6YS95anFtWFpQUmFtbWIzZzZRWC9XeUpTV2FlWjVwQmlIZ04wTXdDeXlsMjVFY3hGZ1hsKzRHeUs3RGNrNVgwUW5yelhwYU9zb1JNb2JhNWNvQ2JneVdyaDE1RjZIcU5vSTJmNmxNYUM4OCtrZWw2cDdTd08zMTFwelRoaytrZ0xYQjBMbkliUUd5VUxIZG05dys0VmNvRXhWTlIvRm5QaFljdHQ2N0c5ck1oNnVORUV3ZVNNSlgxeFg4Wi9DK1JXdlZ6cHVDekc1SkJ1ZTlOaWs2Sjdyd3hLZVFPdTl6c2JDZVY2d2MwOTN2eWtOMHZHUzRmL0xSeGduMjhIYmJWMzRSenFyVGVHYnA5dzIwVmo0bnlaSkRIWkJpa21IZFhjalEvYW5OQXlCWkVLVUZ1VFpyZWZScTlZMXJpTXZDZkQ2OE01L0RKZlpoM1ZRRlFGbzdLSTArQlRSUnJKV0VuMm9jV2p4ZE5MMlFGdVZnK2NEdm9vWS9DdndTK0lBMEtxRDdsOHRldDRKcjZoOHFDODlncDNvdHRnaWhQUzJlVUtYWWhRU090dVREaEJNbjZVWWZMYXlZY1BPZ2FDL2sxSlRrMW5OeXhpWkRLNTBjeXI4V3AxTDVvU0ZCVllpVFFTM2ZiS3hwL1VvemNzWHBlWWxHWHRMVGdhcVcveHBZeDIyQWxnMnlGeVQzZFhjaitOMVZwVnRoM2Q5OUFxajkwaWpWS2dacWFXUE9vVmZyeUFnQjNWcGhvRUZESjVFejZoeG5veXdpMjhMZWhKeWVtY2JLVHcvTXdCN0xPUmwwMUhHN3ZKNG9YVXQyZExVejdab2wvWXhZbHl1UzlWMWt4bFpRL2lZbDdNNHJpTkRRSXc1NVRyV0IxZjZ0dGsxdGw1bkFTVjlsdHgrU2RkRVRPMVJYMndzL0ljaG94VldyYTdjRW1WNW9la3N3Z1IrOVdWNjM5VTNqZlJiMnlTWTJPNy9vTC9PbFk5N3hLbURHSVpNZWhLczNqbjFLV08vWjMyVHZXWmJPUjRHanRneGh4bUV3WENsTGloS3hKaEVSdzJVMFFVcmZyR2drcGhwbkdGWFU3czhCVUJnZXlhbHVyUlBhTEVxQjZIdHk2SWxYaGZ1ZXZmMzM1bVo4YnFTTVRLNzg2SkU3d05KS3o2aXhRWWgzQzczWEh6ME53ZE5xTFhoNGVuZE5UeUtCLzhnQ1VBL3JJbTZUVnhpUE9ySURtZXIvaGVEdFBrbUpxOFI3N0V1NGN4aCsxWkFoVmQrVG1NTVQ1WDFkTXpaQTFMOTBhWWtTRUNxWUZOR2ZrMlo1Zlp3Wk82VlJPUmRMUHNNOUtlNUxKRDhEaTBscFdpUkxuY2RsSzFUY1FkUklIVjFLYzhhZHBGZktLam5PZVMvRWIxWHdIdXJVU2RDRWg2bzl2UU9rS0hqSEFEN0NUbHRBVm05STZTczZlYVBsbjgvQ29KdjVNTGNtMUk2YTFPbm8wbHRoNFVDWVdGeXpWVEZBZGxTV1l2N1pRMVF1aFBmSlM1cE1EY1hkc05sWVRvVi95MVZKc2hmaThnNEpDWlNXbXFEZnYyKzZEQWlmWXhiZytvNEFTSUlvcGUyVGVqT2ZxaG5vNk1wbTZLZEUvQTVsbytRalNURjJkSExwaVhmbFNWRlJia0FpWDdOdUxRa1pEYnVtb3crTnA5aE82OEx6Z0RoRm91SlQ2elcrb0pRNXdsTlhqMCthYnpreE9VMHZibVZjTVd3VDk3eFlOSHdRSFFLM1F5SGJBdEh2ZzZYQzFPemlONkNaNStwQXZRNC84d3R0K0tPOW9xMjRPckpLY0xYSkpzRGRyVEczQ29HZ1FTaFNEY0NTWUh4eE9ETFFiRFJObEpsaUNwNnRKZVFGNUlvSHF3WWZubmoyUTYrNk1sUHRneDdTSWs5RmFCYUZodmkyTXplbnN1N2RsanhxUDhKbnZMRzVMSWJVclVDUHJYa0VhMTJXRS9VYXh1SHlqSDBMeHJCVkR5ZWN2UWVncmtjSnR2S01XWUhOZWl6NTZ4ZWdQZ3J3OGhJNFEyVjQ2SGt3eVV4d3pqNm41N0VGMUMvVEFzY3g1RjhhVnovaWl6eFZMYXYzU3hnS3U3dEdmTEF6b3FKbFNKQmRvZGZma1plTElYeWpEZXBZL2MzQ0dwNVFCRlN0NS9pVUhxbnl0ckJPS2hFYmdPci9kRFEzNUZRcDlKNnBuWXpGSWgrdDcyaFZHSElJeXRIazg4V2xDOEhnMmcveUZvdFFvcVpMMjB6U0JRQit6TkgvaWVDc3FJVHQ1amdTUTlNaVlJaGRHRXdjMjRHQzIyWDRVQkJ3VW5sbldNa0xUY3ZIUVRIVGZmT2wwRHRZSzN2QUFjSVFEYStYeG85MUxkMGtPVy96Rlppa054bFRFSVRVN1djL0tybHo5VHRMOExScHY5Y3IzOUhqTTBtLzh5MVF2TXAxVnVybkxnY3lsais5em11Wm13ZUNQdk55OFNlMDFFd0ZNdTc1bkFLNjIrZ2VScEVxZHAvTlRSTDQ3V2pQVHRoenNwZVJtT0R0U00zZDdiZ1RxTGpLUWM1WGsvNUdIdWRTUmlaM2VPL3habE10VXNrWDdpbmZEOEQrQ25ZVzJOU09FQTlsMVFVcjFUbWJXZGh1b0FXVEpvTjZkUFpNTU9xZ292ZDZFdG1pZ2VDV1lLY0c3bnFXbmtLWTZoZlRNYjZPTWFFakRyR1Z3T2FvZXJBV1NwZ0N0Z3JxUXpHYXpmaGhXd3JKYTdtTGNIZHUwYUZ0dDVLNjdHUVJqdEJxS0JveG1BeVNBZ3kxN2Z6ZFFqYzhXdFRRNkQyOHU1RWVOdzlDYXlJMTFxN3daaWI1eFdyZHF2SEpNcGV0d1NyRS8yWkh6YXJBQ2JPWTF2eUtjalJjb3RtZ0pNU0x0eTdWZzM4Q3VkOFJQV3loK01sdlAvQWl0b0YrOFR2S0wxZnM2K0pSVTJkQVhWaThUR1FtUWpaS1J4cFVBc2M1cEhNOEppWm16VkNNbkkxRUZMclZUK1ZCQ01idkF1RkRNckk2cUV1WStwSWVqVXFhN2tNQmMweHVWZzBwVnU5YnUxQ1Q0RWhVWVlWMk9MNGZ0M1BXejlpT0RadkNOQk11YjZHNzhVVDlJajRtZXhNVzR1dW5DNHZqZnprMVdyQ2d0NkpXL3RuajV4cE9BSWJMUThhVS84Mjd3ak5zSmZaMU5aRzFGUUpGdXpxTG02aDNUek1relZsNXFGVUhEMkFWSTlSNWxuV2hxcVVZWXlTRm5XNGN2c3NhUnFkWmNsK0hFMjEvUDJ0UkhqTFhtUjdndHhUSXpGcHRUMUkxVjF3Ky9DZ1NlM0xOSGpTNnFZTlVWbEx6M0RNRU42OUt6aW5GK3J3RVpzMGxLTUdOdThXRlZQb1FDMDNLUzNWS3dTN2pQdXpraU0vZGp2L01XRzl6QjBpWnlXNk1PdXF4SXliZ1dTNjdsazVyZUtjRnNLTk9jOGZudkgxQkU0bVR1Vk9uRWlMd1p6ZEpYK3JGYlFpRGpwUWN2SlN1aXRwQnNRTER2T1cvejdqdDQ4RC8xdHROc09NbTlEdmRiV203bHh0aHgycC9iMGd1UHkzOEJoVjhoZ3p0YXY3eFFmOGVPVHJJbWJaQ0ltQnB1bWxGallsRlkrTkYyK3lza1djdG5XT2h0TTBUcHAyMy9JNlpWZGxINmM2L1RLN3dhaGZxRW51dnZYRWdZaVlBK3FnVjJnT09rQ0dNTGJiYlpraDZSNEpyK1lXZ0JYWE9yTFAyRENsbmdPRUN4UHVjNXpCRTN3alBYQ3pGd2YrVzRrQlg5ckduQlFrd0VtOWtITEUrcnorcU9SdnR2RXF5RW1PZjF5RUFseU9nVUU5R2pSdFlXbUw0VU5QSUV0aFUva0kxMGk4WHRZM1NSSWFGQjVtWWR3ZTF6WDZQOUdrKzJ3T2R3NUpVZ1Arako0UlNSZmI3clhzYk1RbW5lZXdIKzZBWGZHQ3BMeVYwamF5dm9FdW5aOEkzTEdiZjlSUVZ2Slo0ZkN2eWwvL20vRDJ1RWxuWlgvUUVLV0VsTDlDWWU5dnhpeERuOHZaUkk1bUVMOUs3YkJ0UVdVWjg3a0N4QVpISmNveEFnbC9oWDhyeUF0ZFM2ejZ5VFdkcTFrZG5lUmlKNWpCdGxJalorcnV2TTFEN29OQ1NWTzFGWFVtVmNSQVlHUmEzSEY0Y1lTMThIMy9rMjFzN3VNRnByOVlsNktianpiZHo1cUJrcjZXRkJtTWVTN2c4WS93RU5IWUVqUFVvK2JYZlpXRHZzcVBZbEZXc1kxbEVncVREWkNpRExnSHFaOHhEV1FoTW5ib2RMZDhud3h3dU10VmNTVlp3V1REdEFWazY1ZkJLaWJoMWpvUHBWZkJnM1Z0cE9wZThjT0VqMlBhRHRFaEl2ZVdXREs0cWxmaWlTOEIrSXlHajJzdEdMVDVBSXlrQm5aVmYwZTJyVGpuM2FHVWdlV1ZFVUZMUnRiUjd3MitqYWtBUHUzblRSeGVWWlVxbTJwU0NiYVhtWEtHc1FOZm51OTZ0QytxNDcxMEdlQUhOQmF4cWFkTkIzRC9XMVlnUjRiQVp0WWJUWHFwVCtwRHViK3c2VzdPdStSeEZWSm83bjlJcjUrM1pIbDRuM1RSWGRid1Bkc091NGlnempyNExqcXBPTXd4MnVpYlgxTDRUWUxObkN0bEZUSU05Z2NHZEU5RERCQ2FjUXJBTXFWWXp4SHpFaSs2VnE3UnNMYS96SU1xcWkwa1ZQZkJsekJRZlNKR2wwOGd4UmxQeU80dW13empTd3lmNTVFR2QyenZZWm1wd2RKd2tMM2pEVUpwaWFMZCtiakJ5NG85WHRTTlh6WXpTWkJ0RzRsNXpvUWVLUFNhL2tBemVoSmdNN0tOOVNoSnhKQW1BRmhzZGNrUkdiYWVESWZpb2VoRUlFK3MrMFBoQmtyejFZV1JaYWtBYzdMMjZoTGNMTjkyaC82aXI1UDE0bG5FWHhGUDMxakVkektlaHNkK2pMbEI2N25RVlhNd21nM3M4TE05L2xsejBoRzJ2WjlDbFFHbFBFOWRMTjR3d0VmRS80Q3YxRUVBalhiQnRqUzRldklCQW8rQ1JmWEdubnNrWGtPQjdLR1pYZHV0WVd0eElla2pqeHFsQkd4aTFnMm8wZktNVFVrSmxJc015dUZ3cWJnSk84eVc1M2x4THF3alIzTElib3FZVG8rR0cxUFpGTDd2NDlNKzFhdzkyR2RhMG9nQmdtVGpwTENGcTBJODQzRXF1TzdRNzdUbVJsQWhrdktmUTNZaXhNcDd0UW1oVGZKenduODBsQ2pDalY2QkdrNFZBNkFleXhrWlF5aFhsbjd6eTdpTXFoRW9ZckRPOUhVQmZDRG1ZbUNUOUZzSEFMZE5SczhvQ0FCcy9HNzBoZk1WWEIyYXpHeFdkOXdwZzhLczdsY3Mxa2xCVHhFbzliVVZUMUhDek5aOG5WV1pIbGpzQVZXbEJlRThLdWo4T25rMVVKNkFzZ1o3bmlTUWdkMmtNMmJFK1BuaS94UTdKUUtKMDNnNm1jOGtadnUxbkpuSzVKRFdIRlc0QnNKb3dBTi95cys1K2ZQWi9pUnBVdmJNZEFqekYrL1p1U2REQlpsTFFVWEFKM1dENFJjYUozbG04enpVdjk4VENjRGdsU1NQd3AvZkVpRjZSbjRPL1FKVFEydVkzTWVBRWs3b1FRSzBDRnhXQ1dibDFRK2FRaUQzQzNoQysyenJyL3gxUnN4ejd6cHRWYm5aK3NzTHMxUEpya2ZRNXFmWVpEWWFkK3RrZlFTRDh5WVVyRDVSQ1JPNW9VUUZVRXlXWEV5Ny9PN0k1MU4xRUkwb2xrZ3YvTk5JMFZnUzVpeG9kd3J3SEVraUhZRmphS0Z3ejRTblFnTDJlVEdPeldMS2RqdDJxd2UwcWdCRExNWU5FQm56aXp0TUFhby9IUEZjdE9OMGdwQnEwa3JwRE1vVEM2d1QzT0t1amtXUWhEVDRuSDJRM3I0VzZhS1ZXNkR1cHI2N1ZkTWd5WVU0eXFWbklrN1NjamVxV2twVEhpa1ZMOFdTaXY2cG90bk1qMExiTDhGb09MQ0dldTBBdGVJSEJtckh3cjkxRnB3dTI1SW1vTXpBdmdYNDF0VFhwL3pFSDc2Rnp6NnF2TVZNTWFmVXBPdFVXZEpvTGRadnE3Rk1mYnpHZDQ3RTR6Zk15ZFNoRE41Uk5GVlF0ZWY3bndYSWRzWVpYdFVhWGdNSm1vaHd6aW5UWnpZZHh4WUtZK1dyVW9ISTFFRDdKUlJSbStEM3paU0l0UUZDWkxVWTVmVXYvUm5oVUhTb1hRa2t6YlVpTDU4UExSbnVrZmZpWXJhRE1vTU1NSFlLc2hiU1lNd0Q0bkZCVkpNbFFBOHI5czFSUTBDQWs1Rkw0YW5QV2ZBRittVkw0bFNMdzlwdC9ZODE2cEtOVENGOFlueU9heWZEVHRtVktpOGxrVFFKeVhZOHVoa2lHVHhXZ2YzdGhRbVAwWkt6ekxvTDJGa3paeC9iT1E4d2JpSHJaWHoyWVIrSkM3eHJiRDloS0NuRUt5SCtWTnBBUnFCQk4wYmZzWE5LNEFjQnJIaFMvTnlnM1czL1dIRXNZeVFZd3Zvd0F0ZHd1SFNkS1paOU9jRDRHS09icWFRNGhCNnFjUmdNTmk4REtST0VwZ1o0bmFSRVpuWWtTY1dLTitlRHBwWHJleXJPZDVKc1F6VzlOYVpqZWZjKzI1cHVsRGZMMUZDbW1CVC9NcUtLckl0NzRTcGNOT0Q2RTdvQUplYlkzRDZPU1ZCUVhVQ0oyZlJyV1k4N3NBQW1MYnhMd01SZ283djgwb3pUTVorOWdpMWFuVXJNRStZRzJFY3RaVE9PMU1lQmh5TFN3V0Vjc3NvejVhaFdRRjBtdTJvSFBXOTFSa0R3MVREVjNrS0N1R2lMaUdDV3BrZXhJVTRsNG40cjFkcW5DY3hlY1pVbE9ObW82eXlXdGloUDBTRmRibnFlRDcyc2ViRUh0M01CdFhQOTJqSngzVWk4ZmpybmV2TXBNNFBicmI1dGVLK1J3R0lxU0NrWFhaaUp1SkpBWlgvRFJwVlN0akpESytGaVYzUStMNGk0ZE0xR0VjWUxNeE00ZERORWpGeStFK0FXaEdPb0tiaXByaU1XQ2l4QWZWRHYzdkN6SmVYMXN0OEhwdjlkWWVCaGJXUmdSa0k5OGlvU1psakgzOXF6MUpEbXFRNzhCbHAzRHNPOFZwR0VHb2ZydWE2OGRwY2czV3ZpcjUwT1dlNFBXVGVHaFo1bjJlMGNZYU15YTgvTDJwQ1pma2ZkbEFKUVFUTlZIWkdha3pCMTB6QUxOY0RwUlFjdzZjaGhDNlMzaWx5ekQ2d2VIK01MbFJlMlhpMXBBTzYxWDZncEUxV2NjeUdzZjhlUC9RUmZlUlNBcVRXL3RrZHpXckQ3NXB0TmpBTDR3TEs0SkJ6cENTYXE2NnRzNVlpelhaVkZRZHVjUlIyNUxOc1g5bEsvcXJtcHNiSENBNmwydUE1bDFqUkp3SXZmbWU4WC9RbWcxOHAwYnAzQ3ptQ285cS9PMGVDak5JV2ljdXFQMy9LaFlYTStBRWJTcWI1UDdGL3VaVGhFOVZHR3k3REs3NS93c2oyMXRHMHFkS3ZwOHdPT3MxaUF1QjR5dGNlTXdHZUV5MlU0VWl4ZUJSZE4rWHJ1Nk9IeFpIdytQS2dIVGkzMkdLWExZekhjT0VYejdadFh5Y3RNcG5VWVd5RE5rcHpIWEM5enIrK3FpMUZqc2p4dHAxU1B5a2lqQlhta1dyUVhqVkowUmJFMjY1Wk1pMkpiQ2ZnVmtQa0RLendwZEFhNk81eUE5YU9oY1U2c2J6MDFRcU1zNVpkZmhuZkEwblRMUDJuV0tVU0tHQms3RGRrYnRVancvbUQ2c1FxMllBSTBESjR6L0Y0YXBwZHZ1RFJTNjU3REU4Vy9qdzB0T3ZaM0poYzJWUSs4b0E5L2V3aTRuc0FHNTNoZnZXZG5GSnVmbjIvU2M0bHZkWjVhR01CY3pzR1B6OGxIdDNJK0VMemlqK2hmOUd5WHVvQnJXQlVIYTAyQmx5VmsxcEMwSnJybFBya3JIa0wzeWxXbUtwVkx2NnpXMDlNaU1VaWJ5bHpmd3pYTGZaamh6dlBYdEZDeDhsUkc1eU85d0ZoZWl0cFhacnhGRTBGaE5rMmxMZEp0dStTN1JjWlpMTGlBQkxNWG84Zm92VWNNTDhjQjkwSG5CSDkrSnhrWGZIR2N6WVBZa3ZJNlB6VXU5SmlrT044dlRBWnlBNWM5YjYvZkhFT240WDhyZURnYWIyR0c1WGFCVVFlcnphci9teERUb09xVzdEZ0x2TE1xYXNnYnJaYktXY3I2SHh0NnJrY2Npb2I1V25ERWR0UkJaWklyT29xZ290L1k3UXdVZDV1ODAzSHplOWVSQ3IxNHY0V2twZHBpYXdqOFkvaVBuQXZaVVpZS1lFcXgySHcvWE9aQy9RL0M5MklBcysyMjlhTytuWVhsZEZIQmlCbG5pN0hWbjB1Nk5SVVVEOVlRSG5yMnlTV3huSnYwRWNDckNZWVByYnN4SWZZNU83S3B0bk50TTZIZWs5SFRROUpnaUpCODFXTGtnWEhCT1hJcTAxMmNkNTBmN2VTenRFajRnZ21tTlB1K0g5YmhqUk55MXphbUJLQU85UmJrQTdyanNFTkFrOVhpeWtCU1VLc0JmRUl0ZnpnSjBDcXVNb2JuM0ZtZjF1V2VQZW4xYk1Md0hydDB0RDMzcDMwcEkyTGp2R3Z5Q1RsMldzcGdBbFFyTExtS0lNYlFsQjFiZWhoZzJ2c0VDNkNpSE9kekxmazBwNEJjRmU0ZzBDUG4ySkZ6K3J3emZvM3RaWEZNclRjc05xaGx1ZUl0QU1kbkVLeEdDOERrTmJEZjl5NERtWVBYNnJqZENEaVdETFJrTlNtam93R2wzNFZEeVVJU1gxYkhVT3pTNlZpN1NxdktzaVJVQVBuKzN0c2dsTlJuRm94Qm8rQUNJbnNwR0xyd0hNdUpOVkJhMDR5WHlvdk4wV1cvZndsZXNFQmZwT1BsWXgva3JpMXN0S2d1QXNONTloQnJZaWtsZzJWNFREbE1GTXlWczJXUkRCNmUrZG9CS1M5V3FFeU5wbm1tUStWcmU3UmNjK0l1OFdoWUJTMTNDTEZGTEl1SnVDWHR3cHZub3pqa2ZtSkI1K0pwbncyRDVxV3drUUdOUitYSVdkaFA5V2R4RlVvK3hzM3hlcHM3OU9DVFhKdmFxdGtUdm43Si82N3hRNmROd0NXZURIaUp6eFBtSTJsNEVyYXRHRk95eDQ3Z2Y5ZU1xTUxiWXdnNE1xOEIrM282ZlV4T1grSGxHYkp6RXJObUNFdjg1Q0NFbmlaRHd3b3pCaUhwS2o2Q1VXLzBIemJnYmR1OXZYbFJUZVNqTWdwd3lYaXdZTXdiN2tzZnJBNkQ1ZVlWQlE0cWVNbElHbDhJOTROdk9ZNSs0MzBOR001UzY0VzhyT3RrT2NjRmFvSWhvenVJTkY3RHJZdWhqcWhrMXB0N1VuMDgvTXBFaE1Kc2tmdTcyOVlRRk1MMGxTOE1FSGpreHpJYlB3cW52c3Vid09qbVFRUmdMaDNRc3dtRWdBUzBaOWR6ajFrYnAzeExnbmx6TEZqZitiL0RNUGJyby9JNHl6NlJkZU1xakk4NlRqK1gvcEtlQml5ZTdHQzJjZzJVYVhPeEpJSGxnY2pZRTI2M1lJanZ4YjkxM1JVYXhaYUR2MEYydjd5aGdDMkRVcmd1bExNcGY5ZG1JZzBtdmFnd0NEc3k3aXBKZkVLa29HcWN2N3pUelVKQnMxZ2FwTng3akZURU5oanJjZzVnQkJId3NlRzAvTHlkb0JTdTAwTENlczlXZmtxbzdaN3owZFRuZ2Q3OFJoMUZmZGZXS2JaQ0Ixc1M1WE9XR0xZQXZWYTBIbGYwZFMvaFBPUmRNbFdaZjdtZnB2MzZuUVRCUmdDQ1RKT1N1UmQzQVNQTEdXWkVaZW5YMWhTMGRPa3YzTFZERnlnYXU3OXM1a3l5cE5lOFltRVRoQzVlSVRoVnJSckE4b0t5M3VWZlA1ZitxOGVUd1k5clRFcnlwUGZCb3I4MC91SWExeExxQ0RxdXNRMFNuTWlKdXI4dStOTWhMV3k1MXdRdUt5R3BIVUlrNzR6bW1FZ0V1YVh1WUphMkt4K1dxbzdVMG55T2pXdmdJdUJZRGVHYlRvRVAwSnBmN2ROUml2MFpXbkZ3dXhUTHB6UWVBK3FMbnNxcjhEazQrdU84anBGUmc2dWl5T2tiVitaUGtqN1I5b1lqMnI0U2dINUNDU3RWcFlFZEZiL1hBWWNkMHg0eEJJYTVLTVAzdzRQSW4yaW16b3FNQTBncnZBOC9kSE4xWWlQT3Y3ZVRSeHo3Z3BET25oM042NFJtNERoYjFNc24yZktqaEZiWjV2N3h6SlphVDl6RlV4WEpXVDFkVU4wOFRlUmJJWnI2Z1JPV2NvWURqUGU3TkJEZkhWWWtrZ0JlUXJpcUEzVkx4Y2R6d3pLTEtaL1U2Q1BiSCthRllrZzJoZ1QwRnk1cVlVSHJGMHphVlU3c1VMU29PSEk0bnJMVjlHTFRlZy9rTjFDMzhrUGtBaGRBaERCSUpqeVMrajJKVHNqZ05GakhoSHIrSkRFbExPMVNHdlQ4NWloWS9zeng3OFkzNVQ5dlgxQ2huVUlEcmhTUVFJZjdONU9WVDhWVHVaQW4wMklrYXZnWXJBSVlvS3YvYkVzc09rY1BMV2Y0WnpwUmJZT1dPVFZWank0dE9PVHJLb3Znb1hwVnB6SzdnRkhYWm1vTld2K2svOFNGRzB1UVg5djNwKzkzWHNKWTB2OG1yTFJPMWhDcWdjSmhuMGE4WGZNRXhNNGYvb2NrbDdlTThjaERGMXFjTTRISzVuMGxVT0JFa2t2Sk5OUnh0eFV4TVZPeTJ5K0hyd21ZR0VQVWxwazRlRERvOTZ6dVA0NEl0bmFYdkV4Q2lOYVlhNEdlOEZNSlFza0FmTy9ZTkMvMWxHRVVqNmJYa3hjd21uakxZUWppTDVhVlBwS2VkQ0pnMzJKYnpxaTB3OU0ya0RZaUdlQ1c3cXo2R0ZnYS9JYmNWOGxhU1NxbEpOMDE0cDVjNGJsYk05cDlFOWpEbk5Hakp2dWFVRGpBcVNhcUYzUFZQbnk4am00aUV3WE5zdDVVVkZKMDF3Tjl0QUViNFAvWE8xQXN6MHhTZnVwd0M5ZldjN0M2c0VTRk9CQW9ReHZZVlV5YTRTbkljMDIxb0xNMHprZEszM0lQenVkNHp0S1hlbEErcG0wajY2MVR4d01yYVVsREM1N0twZFdUUVNHVTc3eWpiNGFUaTYxNUJpcjBSVDJDSkZWaS9aUXRHVDVnVzNiSnM5d25uRDFDVDFySUdIZDE2YzBxS1MvOTQreG1wM3E3VTVpWUxCVnhJQzFqRWw4UWlxMXQwSEo3TkppbzlydUlEOGZsUHJOWlVvZDFDZHFPaEtXd2xhWUNPWXc0Wnp5ZGFlR0R6VmM1NkczOXV2cUtuNG5RdVlXQ3ZkOTBhSVJOdUFtVnpLTWtrZENnU3lJTy9UendMOXpmWVVYVlNiay9lRWhjaGZsOTJZYUVXS2JiWTc1VXg5ZFV5T1NBa1psZm9CREtMZUZVM3ZWV1F4UVBLdDFIVDhCNHNHOXNtOUo1WmFVMGF3TnN2OFcvZG9tRHR5Mzd0RmtqR3JKRklmRmZ5NDlkRVFaUmhHdDc1T0xYQmRCQmN0RmZCM09PR3lubjg4ZEpPZmk4aUZLaVNnNDRERm5EaVNMdXNNMThkRkNObk9nYnl4MUIrSUZRbmR5bndONWd4WDU0bFlxYmkzRDk0eG90bUxuWksvOFFyVGVoMlp4elE1VUZWL21lck5sME9GcmR1MnE3SGVETEpNWDh5ckdqWG9aeXRmS3dmeGxlM1U5U2JFTW5pa29YM3lIaElqMmsvd1BTenNRcGI5VlRkYXhYM1UwcnQ0U2Q4N3hGYjBUQUZFanI0ek9oWnpmUURQZHN1bmhoTzVJZnlLSDNoVzgvMHpDYkRwRzRRQ1NnT3RGMi8rR3RKd2RRT20vQVh4WGI4MGVhVXBxeHlaNzgxcEx6cnAwL1NwV2lJWWNSNktCU2ttcFNPTHFBcmhpdDNlanRxSWJ2YTQ3QVU2dlNqOXVldU04Rk4wQVM4UWxha1VtTk85K2xKdWNPa3p1M2NwSTc3MzNtbHNtTVdVbnVmNUNaWXN3cmhTQ0x5TWJPUnlKaFErVkhld2l3bDh0MDY1bzlDNldjWGZhWmZmdXVLTkRkYnY5K1RHVCtueFVqazRKYTRMeWZEYU94OXRQZU9lSzQ2Z01OMzBJY2M0TVJFWXdpRkRRelJVdDlJVzg3eHBwWkNwRncveGVKU3o5L1RsR0E2MUw3MWxNZW15UElKNHR6emFEWWx1RXZJWHlsMEpURC9MakMvZHJiemdvb25KRkkvOXpHSnIydktITGNtVUFCbXlPNmQvUitYL0NLWVh0cUl0TkpMV050dW1zWjVKdmJab0hFdDI1TGgrcXcwa082eUhkdXFaNUx6cWpNSWV6bVRCYUZoZEJkNXkyT2F0TE9GQ2xoSVJHMHFhNDNIYUFqMnFSK3l0RzRwanVBTDByNWZXTEVZV20zYUpTQ1JWTkZvQXJnb0NpWkVGRXpCS0VhV1dLZndDWHhSQjFsM3VsbEJIcVJrbFBzb3dxSUx5TlVMek5rTlNYd3FYNzhLa3Rsc1Z0STZFZEVyTFVHNDdhckkrZmk1bzcyRnlETkJvNVBEMkthditCWjgyYTlMdG1ybU5YbXFHMTA3VFBkRHAyQkVCbmUzdTVLbzlQdjNLcVBLYkVPT0NOU1VBN05kb1dXQ1ZwY0lHYitqdTVQaXNvT0w4YXJzYzBJSWRjMmtydmoyTlpQVGtHbTJDUmRVUWNQTTVhR0FvaE9nYlRXZ3ZPenZCU0ZFeHk2VGlXSU45ZlJVbnFKdzMwdElIWFFaa3lEVHh5M1ltSzc3U1dVMzdyODhQUE9oWVBNUjA0cXNSQmsrQUJ0WHB2QStuNGM5YU1oWEQvT1M3NDVUaUhwa1gyUmUyNGhPa2ZYTTBrMHVjLzhJdXR0RGVHNm1SVGY4QlBIcmRhenRTT3FSL1pudk02QWxFZDBjaUtUY3dHSWx5d2tmd0ZUSG5ITFB4ZUVndkZ5QmFHelRBMHRCU0Iva3RsNE5kb0lnQWlDRjhaV1Y1T0FkalRCM1E1ZXJQaDNjTlVld3lhcFAycU9LOGdOTmQrZzRlRWt1WW9IaCtNaE5zdkVEQ3duZFFuTWZpenowMi9mVDQyaldQaThydnZFeGNkMmRBbkphNUQxL2lneHZQOGR6TDUrdGNxSytTS2U0VE9EK3ZTUWdBZFhQcDhMYWJrd29BendVc0s3SDVMWGd3Q1Q4S3FCZVQxcUpxc21yS21ERURnN1REYXBNZ1hVNTBCVEFtZlBnSlNaSjAxKzRtZlo0c1ZGVDFXVnJqeXcvZ0VGZFNLMnovRjhJc05DcHAxN3d0WlllVEtQdlZZUm1KS0lNbDI5T0lBcHNqZGNwWW95eGYrbmdDMDRibFBhTUlnU3ZmRVNBMjJUcHJoY3VmNWdnMy9PRXMvdEhzUWNBQzBuMWdqVzR2L0xsbUJ3VmM3K3Q2bXNsVVFHcncrS0xtRHcyVy9lQjUxUXZyU3pwVUdkK0o3Wm1ES00yaVROc1hRVE15TUNWRWh0VGJLZmZLb3Y1UGxBYmRVQXdxdGZIR3U1R3ZiblNuYmlNMGx6azdTSjhZWTFQMzRKL3NsbWVJdkM0MVhlSjVZMko2YTY1V2NCdFV3RzZibmJaZktSdlF3SnpVYkdFQ1liZHN0VFNPYmRKaE5FaExDZEFKbi8yVjJ4ZkxxMTBMRHJGR2hMQi9PVk0wQ2UzMm44VnRoVS90dVArWkNhYWh4UEtLNVJiZHltVE4vOWQzVDgrS1NSdy9qRS9BWXl6UjZpUTE5dm1OZXB5ZWJKQWtjU3N3WFhjWFhkc1Q0RHhtTHQrZ1Q1UWpOd3ZvekpPa1Q1eTBFbC9VVkpITkFzTnpVYnFoRDJNck9FZ0tlY2RjMktPMnJ0amdDa2ZzQnl2NVlVS25PZFZmdVk5MmhWR1AvTUhrcklxRXc0UGdoT2NvYkhzZ2I3OHFhejhSN2M5eUdrakxVVWR1SHUvYXAxM0ZrY3NKOHlkQ1FEZUw5U0YxY1FCVjMxUDBUZHlaNXdNWHd2R0x3TEdRNVlndGNLQWlmZkVFOEtJRW5QeWNhdFJLcldnOVEySEY1RlBOeE1wbDZBNGxvbXR4SmFaUGpyV0hVdTVmMTljcVBIQWxNbjdiK24wSllTd1gzUzc5V3lwQ2pybUQ4Y0FYWm9SR3dHSWFEK1hrV3hXV0NyQ3U3dDkvRHpMMWRLRHpZZlMvZTlsdGdyRkk1eDNhcnphTHVoVlAvWGs1SWJ6S3ZDN1dHU1hPYndiUEJ6VW0rWEQzUll4TzhQQXZBZUxyQkRHd0FRS3VIZnF3ZFowZVlYSkNUZG85Nzl5SHVVM3pVNFhhZExNUE1IMEcvS0czaU1mR3ZUQ1FENmxJVGovdFcvQWMvcFRKRFpBOEk1TEdCYlIvNWRFMnVPMVl5a0E5QmRVQTIzZjFvQ1FoQ0tIYWlERlVLdG55R0p1T1V2dTdaR3NYVDNoQVM0M2ZFcTJqU1hhaVpjNTl2SFlDSmRrMDdaUnZLRlFFTjYwR2JXQnhabjNpYWRaQWRwaUxRWHUrRmJtQlRBdENlVUJYTzI1bGQyWlB0NjVma1c5anZBYURhRklTMS9NR0NGSFBHT0Z2eGt1c3hpNWhGalpWUW1jd3dnTkJrdnh1UUl0am9vV1dJT1Q2MnlLUFRJLzhGNERwTDlNL0sxTy9RTVAwaFhHSCtjRmc5RmoydHNXUkRSVGNDZVE1MGdrc1FlU0d5R3prZ1BFTGVpMWtJQVBLUVlkUHM2KzJvaHcxaVJUNmNOZ0dRaWZjWDJKbVV4SW5iaWRzQnZEQXJoa2tlSVJ2dTl3ZjNSODJ0bzBWQ2ZvNUxnS040UmtqaUtOQ01lTkozd1BEWEwyR0UyRDMvTnZsbTVoRkdQTzFRSm5iUWtpcmdMMy85QzJuT0lsTlUwWTI1RVJaNlFqZDh4bTVTK3g1N1lwSDdJeG9tR1hBVnN6UDZKRW5EUkRRRmxOS0Vqei9lVnBJQ0pDcC9PQUJqeVRPeVpaU2FaZlpoSngvQmJUbEdyakNBTzJjOStPeEwyb0NRamhlWW92bnp1eCtIUXBrWWxnUFJselRzRHg5eVhhSXFpekwxNi9UUjNQNlNNRjdyQXpkQ0NXTXRRTWNqSXM0ME9nbTNveVpIOG9NUHU2NEw1VmdMU3UrQ1BMZ2t5UUFqSGVjaEhsUTNCcmwwUkx2MHdjSjZ2SFlCQkxBWExHMFczT3NDNy9ZcVB1b0kySElGZkhrUlNtMmM3bDVQRGRROGRNYUV4ZmMwSzA1N0F4eGdEM05MZUxmM290OUZCeFlnYWdjQ1BwWTluU2tQQnNDNXJxMWJaVHc1dk4vV0wxZDR3RWJlZ1dHTTAwbTQzQnlUZUNJVlZnRmNtVVpNZ3ltNzlsdXp0dFQ3VkxFVzFiTjZJNjRmRU1IdjRXcG9qQ2t2TmRmckV0ZGE2bkxjbzVOWk5WK21GRjlDYnhwTDJpUXpGNWxuVWVmUWNRT2ZXc3gzSkRkMFZhM3VRTHFkUmVKeCt2V1Z6SHJab0o4MGtsVzczb0FHZG9Cdld2MSt4ZGw0WEU0RWNCYWMwZUZ0QUw4c0l1R1A2eGhWWTJkVExyZzFJR3BUY0hNb0I5TG1NTkh0VGY5UEpWMnhIeUpUUDl5TzV1eVl3bjdSSDFxdFVxczlGSXVGOTBEZDZYaTkrenEwNUhVcC9qNVlZalllRWkwaTJramFOS0FkSlExeVpReEpKaC90WnAxdEd0NnZaQTVIRVQ4d3ZhVFpiSU8zN0NYNW8vYW5hdkpkaDVBSkQ3TFloLzVqUUZLbG9XQ3JEMnUzYis0ZDdkd2ZaU0ppZFY4WDdOTmIrcm5hQlpMTnJtN29xUUVPSGFLdlFheENaTDlnRUloUE9OVmZEenAvWnIwMVZzQnFiN1BDblRvTzlGeWI2aEdPRFhIeVpNTnJONkpaUURxMVdqK2dlQXhEejJDekhVV203dzkwUnB3b2JsWUVPMkdWbGRIR29rS040S1loeTZWMTE0UFRPdFRkbEJFWFVkVllTZnkzbEVKSWVzVk52NHg1cFY3RG9BOXAyNlc3MzVqcktMNzNxbjA5dTYvNDllaVFMc1M1dXcxMlBhZSs1SE1rdjJRRGpRY1l5NzNpeGFwakQ5ZGVJTlk4TXpFOE5iTlFKaU5PcnBkQTdaaWc0UldaY2t5T0NjQk5rNjlwWWpacUpwSFI0b2E0OU1wRExHUGtqZ1JlSm9YOWV0UXBqTzBuU2ZwNGpFbmxqVnlSMTlrdFRMWEV5WXpubERwTjBScGJXMlJ2SUhCR3JVUHpZTU9maHVqeklualkwT0hwSGpUQmF5YmJOeUFiWHJBeWxVcU9Cd3pCaG9KTFlOWXBtalBrdkt4OVRqY0l5QVo0alBHQkJSNnJBNGxCN09oTlE1dkJpZ0xCbVRWdmxXVmt3YVRmNHJKeXlDd0pRUVAzazZYeU9qZnVCZjE4clk4U0ZMMmxHMEg3LzFCb2R0dGNIbHZTYmRqU0pBd2tTWXFTQVUzMU1tQk92Q0NpQS9TMWt0NFptMXlWanZOOFJQOWdKK0pLcnY5NEtpMDh3RXNpV1kxOVNXN1cvQ3QvUTJCbFNOaFZvV0pJU0xuVHZmMmpGN2p0MVNhVlZuaXNRRldjazRIa0M4U2tDanRxSlpvZ3VnNXVkbm92bHJ2cW4xRFhrN0gra2tSc2lycXN2KytmYXlia3hiQUVONFVQZnYySWpMRXRwOXFxZDZnbTRlSnR0RGRrdmJEMzkwUmE2cFFlNXNVZnd0anF1SmxaanpxaDhjRHkvQmRhTEtNa1YwcEFyWDltK3U0MFIvOEJjcHJxVUQ0Y2NaZ2ZOc2hLUUY2UTFwbWw4UjRUS01xWEk4WTBENGpKcTZERmgwQ3dxVjNpWU54VmpFUDJuLzIyRnJSQlNNRVYvMlpMY3BVdkUwMFBaTWtHNUEzNDNsU0JkMzFwT0I4enJxdzRBZjQ2bGpBRzZXUzRYelNCN1pKWXIwZXZ2bVNKbFMyK3ZmcmI0bWdFN1lFazFobEdKYXZLcVQ1WnFNdDhFODNubzhWTU94cm95ODF2azl0Z2g2VS9KVkhlZjhnMExHWXQyYXpCbGxXZ00vNWJjQitrRUhNT0tlQ3I2OWd1aW9qS2hKbEo0N28xQmVlWHgvTWUrY2trdDdxRXR6aVlZcGxZSXJYbGVxL0lnOTY4ZEpnTk5Jb1g3aU1aM2tYaDNhVzVTbUlXZ29QTDhENmx6U3g0ejFLMG95b3dQOGlWUmtPZkNpck13UXFvV2ZvWjNJd3hIYzlaNTBxa0pHT05ySjduQWx3cnRTZWF2dGh2cEV5NGdDS2ZIeXZyNGlQOS9PYmtheGptWDkrdGowekZNTDdzWWZNRWpjQno0bmRhcEptSm1xV1prMXg3M0c1MVpiWlZtOWVDMVQvYjVlbEt2RFZrN2NYY1ZrVjlBWmZHSFZBV3BsNnBub3NtcTIwbmNCTWk5Mk01SCtxZ3g4dEVNcDhWVDZ3aDJmMWFDbXA5NzlYVE1Tdkt5aFB4bytzNGdVaHMxKzJwTnhEL1JoWG04emNJdjNaZTQwSkZjSDB0M2NHRWJUSTRGc3ZJRU82dCtQOFFmeW9TUHNjU2lHRkNVMjEvelM4b3UyYkZSOWlidXRuV094M3VoNS92N3FzSGZ5TkxsODk3d2kzRW1Nc2pHZjhBbm42L0s4U3VJaENFT3FQZ1ByY09xc3p1RFJmZjdjc3VLWVJzNDVsT2dVeWVOeWVnR0licHNRT2VUNDk1bjVzUEFhQ2RLQURuK0tsRDZRWXJLNVRKQjB2NEFhM3o3WDJkRlpVNjNab3VTUGhvN0h1dVk2UlZ6QktPQy9mSFpUUERTeW43a1FzT2IwMUNrWGUrUlM1ZzhYQ3NqbS82aGtEaDdCRnFCczRkRys0alpNN0EzWFVLbk5VL25KMHlRV1BSdnZVNkhuT0dNYkRJT3ZaOEg5S1R4THJkRitaaXhra1BySHJSaTAwMVBnQzFJbzNLWW1lL21hcUN1TEs1aytWMWR6TXhaWU9UN3dIbDdzVVRwTzFhdW9mNkhqMlllNGVDQVMyQ0xDR0VHVkRFdnVtU3hQNnlIYTJpdkFyYStMeVpPLzg1cVJ4cUhNNm05Zld1T3V1bEgxUVM0QUwvQ2V0bnFENWFNYlhJWlgwZXEvQkx2R2d5NVFTd0hOa0JTT3NqRXVkZXhXTTB2MW5GbG1hRlBHaFNpRWZTUUtjVmpGUTIwOW12NVRqREVGNkJFWlJsSjlNVktTdWxMVFBOTllseEN6NVcyR1AyNFRHZDNRa1V2N2M0VGZYR3UxWWFLSlVWMUhpa01vb0gxNnFwVXN5aUlwK0JxWndhbW9kakwxSGJGNjk2QmJqUDJUNndlYlNEUzZJWmVsR09KY096ZmJwZ2NQblNkYUZJa0xHVnBvRjFaeWtRcGRQdnFIUnVmTm9QQjZzYi9OVGRaUGswUXJhdDZ0aWg2bjc4UXhWZUYybXRFYUdsK1lBdkFOZ0ZiNjVsRStjSHJYMUgxbEdXWHp1SnRjT1hiN21EMHk5OGp3OWJiOEVzQ05PcExvWGVKNFBoaWJ1bkVVUmZVVjN5WWNKN0tqMGZlRjMvS2pISVJKa2JvdXFRK2FEM1YxR3dTenpZWTNFTE1VQ0haTENVREU4R2hoaWx1Uy8zd2g2VEg4M08rTVRYUGZJSG85M2lBUkQxRVMwNGJUOExYQmdRN1V1VzNjckJxb2twc2haSzdNMXRoTjVkeHFNeUl1bURvQ2Q5V1YrbS8xTy9HQ2RuWHhOYURyVGhIeG90VURSaVo4dlpndk5pVjBLbVQ4TEY3LzFJM2VSWXoyVFd6SzJQekxOcUVXZitnTmp6aDd5UlpMR1VKcTNEVldHbFBqcm80cGZ5d3BJL2pFZ3F6UGxDMHFuaUxjRHlkSWJmQ3d1NUVsTUpnb0hDWnAwZkI3OE9xdUdXNnNmRkgzZmNEV082WlJyamYrMGF0bkNXcG1SN3VOYkIzQnZMSldxMExFNGdzdTdROXNzQjZRWkl5VUxDWDZnbEdFZVpXNVJtNzhma3pMSlRCeENBVTBhV1IzaDhNcVJXRUtLR2Q4SCszSGJ0L0V6VUFvM1RRdHdDSWw0ZE0zNDUvVGxCWDFzN0pScC9RSUNDRG5UdHAyNGxUbzdmQS9vREc3dkxETjlsK2ZjdkFhSGllcGtUT20yeUdyZTBxcUdlYzhaMjlqeDgyTzIyWDhrSXA4a3l1c29zSk9RUEx1cEd0aU11aTdTZnpXSndxYThBMFNLZllQbWl0VUdoWFA1VFRjYVVDRXp2eXB6VWVNY1pUUFdJZnd6RGd6NExIQ0Z6T00weFNZQnZwVkNvVHRPRXIrYy8vSDhRT1BEMW1CL1d6TkczbkVlQTNZN1J4UHc4c3JsTGMzL1B0UmUxTXNvSk1XZmpkbnFndTd3RkFOZXB5YkFneEpzUVkzVHNmQnRZNmdvRTlmMmNMQnI4T1dOTFpJU0hGMVM1TGRJeFpMUFlKaHprN2QwazljTW0xdWxURm5icmpyMmtpa2VQVDVSRlV6VHpGRlpVcmh4eVNQaklWMkhqbVZkZVRtdDgvMVQ5ZTZ6Mm5tSFd6Zng5RC85MzNkSDNUd2J0bHk1K2oxQ1RnblIyTldQMHZJVjdCYzFVN0J1Z0x1a1diVzg4TEFQSzFhUzBLL0R5WSsreHlLZFIzUlV1Qml4MXNsTzFmUlNBdGxua00rM0tHMFNqR3lDV21rVkxCcDEwWnR5OUhMQ1o3aFcvdXU5QkM0KzV1RUE3RVFaeE5zbDQ5WWE1U2xjWVQwcHBDZUN5enZzTTlLKzFITmE4bFdVSERDSG1xM0FtbXFvN1gwZElWbGkzUTg5Qi9uSnVVKytWb3U4dnZ4bTI0bS9jM1k5UHNPWW1OL0Qyc2xpd2hLanhLcS8xUjRGK2V1cmovM1ovTFlESHdFZ09ucTZIRGllSlNnVy95bWNHYU50dlB6MmtTU1VHQ1IwclRGZVdhRkFYQXhtSHNLcFdxbmVKVllyckpGRjc5N2lWendVeHVhQTVVejBiYUxURk9qYUlhNEZMNHJlbHl1VWMxb21EVW1oc1lkemdHbVQwUnlLNE5KWHQxRTVtZ09laWJUd2RiQ0lsRE5DSW5uRzJQWk5ZSUU0bktFd3l0aWVabHhZYnBBbVpyaHhUZ2ZTallnU3NoWE1BSmVFdnltMm1wTjNlTzlyL0xsOVpRRTJPS1lmeHM3c0UxK213aDFPaFJaeEF5VnhOZHV3NEIwZW1KT0dLV0RBVnlTdUZBcGUvZERlWlVKNjE4bHBISDBqam1vazJHTXRiN09wNlU5MnFDUll2Y0pkUUttdENDK2VkeUwvYzQ5QzVaWU92dWIyclYySGlxL0xNNlBtV2dkdUxHbVJJTmZWVHo4dVExcFJLNHptVkc2cmI1V0t4ZlM0bnAwSHJ5Qmg3V092YlF3d0lGcGs0Ty9HdjlDejhwb1dRRmZLVE04STVKWkdFdnJGdkdIOTA0RGJUcVI2UVJ5dGZNV2hwdk5abjlGVnNqNTQvSUdBYVdCVExkMDdjTExSNVpqam5LaFZEd0tTMnZMcXV1Q24vU21rdm1QNnJ2TGV4TytCSE5EV0NaNElsdXhuVjErc0lPN1VDcG0rcVNpakN4Y2RDYTFYRUZFR0pKbzI1QzhMTk5zU3R3OGg1RFo5bXY3aWNGT3ZvZGVMR0dPR095RGJNUDF5cFE4TWtqVXZGUktZV0NhandSeFZsaG13dHpLeDdxam1PdDBTMVJqaFJzUWp2R2pZa3dlQTIxS0Y3c3NtMUZnYktKeHJKV2lVczlqM20ySHcyd0d4OUMyVGNDbE8vUnZRTm9iTDVudSt0bFRvaUluaXh5WGdWMlMydDFtamRSSjhVNjVxMWNBbUFkblJZZVhkVHZJcXhESnhzMGczRTlXeGpMNmlkSytsMmQ4YzJodlpUSkxLTFpOYzVyNWZnUGZlbUxhUER5bkFGMTlHMnRPWFlOdWJPeFN6R0l2b0hQTHM3elFlamh1ZngvSDRKMVA0RVlLNE9HOHhQRkVrdkcvbEM0UHRBV1U2S2hRSlROaWI1ZTNHTktZTWY2d2orNGNITjJuQjRiYThENnlpamp3T1NTRWlGYlh6YmFGZzRxbDljYkdUMmFGOXN5Yjhaa1hpRkxYTzRqMjN4YVhnT0JyeFBxSDlsVGpldVpnNEppNGc0Vm1rTGZsdHgzK1Q1SCs1SlJXMmRSU1FuQm91M2ZibUFzU1JWN0lubUliTXN2SVlLczFTZUllOUNRZWVwdit2a0FTWUZvV2s5N29NRWxESzRLbUVteHpCRzBJanJFS2VzWVB6czROWHBqQnh0M08ra0F5Tlgvd2tzSlZSMlhTdHlYUTRDM0VQWnV0Z2FjL0NML1RNQWhhWDVnQXhTVmNYcm1mZXZvSFNLTVRKdE9mSHgrcHRXdmlKWjhXYUFjMFNTa29QdFRTMjlzTFJ0Z1U4RVYrcW5EWlFibk5iTmFrTjVRaG1nS0h1SitEbkwzK3RZbHhiTVo1OEpGVVZyVVVtRDFMc0lPV2lHOGwrVDM4L0xHb1ZsZXBCSUVTckpldjd0c1V2TWFTSWJnRWZPVlh3TEI5WjRQQXQyMzZwMDBaV0w4d2JScklJU3MraUFiSnF0a0NzMi95aWIxUnNTZy9sY1BTUnphdjlXMXJLeUgwbzVrdFdyYUtiaUxiU1NUZmc3TTRDb0xDRGszejBXc1U2MkhUd2NHOFdqTXk5RWUrZEJiR1FkRXJ1WTlCZkN1Tm9kM3JWUm93bXZubDlhazQxTlMvVGhLRk44UEpSSzNWTUlrK05HZlBLazRnaDBvc0xNb3pPVlhNeEM1R0NLdXRBWHBobms4SnVpWjdDUDBBSHpDTjBtUlNMeVdLMkQvcXBWb01sUU1qSFZOWHR2NTRjZEpKQzA4Si9JemRwcUVob2ZXaE56U3hIQWdLOWpyYm5Bby85d3g4QUhzRmMwWk1YL1lET3RCamRDV0VmYWc5ZWZyVDZtd2xFckw4TjhuVmNuclJMWjB3SlVvbEtzWmhIR1ZlZ1VBa29DUTNvQ2RuMCtYSGRSK1FvSURNL1hmdGIyRDJsTm9nTFJkb0lHUUkyMk5CcVhxR2o0bm1heGU2Q2lrWmlwVWlCODNNMFhJaFFhVm9PeFhoRTdwS3Y1b0VtQTJYY3g5NFlKYnFMSG1Wc3BjRjRQQW54cEJsZTBKV3N4OVViUUp3NFRWb0pwdWtkL1RwdlM4MnVHWEFOWUJKc3BRL2FPMjNCc24yaktFMmU0N3kyT0I5ZG9QeVlWWndnaVZTdmZKMm42Zmw0RlpveGpzQTRlb1pyRGdQb2FQSUdwb0lJWnBtcnFkS3BONUVKZFhWeUYvTjhkZitKTkJrdGdNSUthRXdnN0xhRlJkMHdJbGV6VE9lRTUyclFRQ01jTlh0NTZtNUxYeDVJUWZqa0MrMVFuNmdmOUVqbW9MUEtCQWdsQkFLKzNwbmxTMnRQbnBJOGpSL2hxNm8rM01vcjhDaXlaWGJ0c05kaGVpZkR4L3JuS0dpb0JZRmdZbXFnRWNIRmZyTXR4elN3Z2VFRFozd0VuMHFEMnF4R0RXK3BLbEZnV3IrMVpoT2s5c1VxTDBHWGVMeXI1anpjL2ZEVlZmVnVGUkYzS2pycjdLUGJGMTRYNU4zWU5XZHRVWXE5eE9CcFhhemlSNnZrZGZoSFZ5SWdPaXg5QWpnTW1GN2V3RkJHZmhjMzhsVDBrZGpVcUsyQm5qdERqZUNheXl0bFdTVXFFTWVZTUl3Mk5xM0FKbENEVUZDNmdVSktsN045MGpqQ2FiQnp4dGdxMzZnT0hUemVmek10eHpHckRXV05sS2Jvc1R5UHcxK2pmUFQxTndPUSs0bjA1K3lmdUU2OU8vRWJmNXkvVEFBbFNPSGZmYXpUeTZteFJ5K2RJZHRxc1ZJa3ZWV1poYkRzSnlpbjEwZzN0bWlKaDRqMUlaaElUWlNRQk0zQmF0YmJuMGR5SDA1YlpOdnJxQVAxNEFpTndSZ3VjbzZKbmpqY1l3OWxZc1NaS3dEcVVzOWxPRFlvNC9TZ2FzYUNEVmVqYm1aK3UxNGVEZ05pb1BwaXg2Qkt4NC91eG5yOVJkdnBNQTdZUDdpOHZxVzhNaDFEdXJtN1hMdjJtNnRTY2hONXZZOHdsNDVNUms1NnE2Qk1hdjQ1d05EWlMvMi9rRFVpWVkya0Q4b2g3eVpVU2tobTY0ODZoYWJXUXVPWC9ZNVVxaXRQckt4RDJDMm53WnlCY2ZsS25aNkxOL210RUprUjRpSHppQ1JtekJieTFva2ZmNDdOZk9yR21pbG9xQzVzRmRlQnRMaGJqOHBIT1k1MUtrTlFvY0JjcElHR2NERVFMOUtxbERrOHlPVkVIUUdWb2E4K2xYMTJQTjk0R0gyRnRBMVBFZFB3SFVGZ3U4a1U3S2lCcEtCdUFlYUJPN2lWSHFBckEweXEwaDZ6MU5MK24vdmVzVW85U3V2TmorcmoyaVJ3TFdUV2NBaE1YZFBSU0htUnA1Zmk1VXlnelpvMkFCTjdYQ3JGWVJieXllK2FpbWJXcmJ3YSszeENiUEZMNmZFS1dGbHV4VTlzOUE0eS9ZcVBnL1JuMFlKQU9PQXlkSDhoRDI0aWxkLzR2c28wVzFINng3U0l4YUNBUUZVRVVmSWdTRGpvK0lVdkNVcWRvSlU5eFhJdG9TS0pxanJ1WWJ6L0hRc1BjdVRpVk9uNjFsNWhDbjBxTUVuSjhVSG5JSFNyT0txY1d2Nzh1S2t3TjN4S25qL3ovUUlJMmRVdlMxY3NKQjVXMnlsRnh3cTRoa0Q2eVAraGJVckJrSTlXekdBVUFEMVdKWkZtbWZwK0RIUU5QZU56VEdmWC9IYnBrTHVZRG1QS2FsTUZ2eFFMeUZTK29oalh5ZmFkbklzbm5ZNS95NzJkQUZHa0hvYnFjU0ZxcDJGRDZibVFOSEN2dUNrZXJLSUY3VFJnUi9pb0VJUTczRDB0azJpOXB4M0djMEVCb0dxamRPbXN4cFpSNXdMSnZvU1RSTzUzUnB6NEdaVGREbGRoSTFlZWpRTStlQzlYQnBkS1JHZ2tCMElja1VDcDhVYTFqK1ZGV0VEMW1IUkdnUjIrcVRmWnF4b3g1bm5ncE1mMVJMSTBIWFpRRXJkZEhPRFk1bS9RQ3VCT0ttU3Yza05CZWRRYURXMWRMVFZVVnNweHV0NXJhdzRXaXh6WS9VMFZwVUY1Q0UzblVVbmI1d1VqRUNqNTdQajIzY21GdUVBaHZYQXhHQjVRc0ZhWEhzQStROTFSNlpzRUZVVlJpdWh5YlVjNWlJcHp5UHVCZ0U3WExtUGdkbzBYc3BTQ2FJLzlJV1VnUzMvbml2MjZDYlJ5UWw2RExQOTM1QjZrblh5dFI0bk92cTVjTnM1bFdJMXJib29SVC9TWTZKK3ZWeUlDRS9QWUlmdVZqamFrSnk4ZFZXUHhXUEtRZGJTS1pxTmtjMUhqcE1DL2xYMXNWNlZWMDE1SGk0S1hLMWJ4Z2VaQ3daSkpFLzM2cFo0WVgvRWxwVTNjU1E0a1QxTGlDSjNvRUpJY1VyaXl2YUJpdE52a1hpUTdLNWxpeDdnL0dITCtTNzRIOEhwbVZVeWJVcElPbit2amdIWG9Eemhtckw4Z0JLZ3Z4c05pVjE3aUtpdzZTUSt4aWRpZlRaMDJYK2toaVZhMGd1RVVYa0pFTDU0QW1FYVhXcTI4amFIeC9taWVzNXR0UFB3YllDeHRRdjNpOTY3cjNiT2dUOUFEUDUxTTlMc2NMQS9NZGd0SW40TzZtODl5Ri9pSGJvLzFKMlBHZDdiRVVZZ0hhSk9EcEpLYjlYWEE4bXJKeFRhZ0tIR1hzU0FxMlloYlV2QmpGdmcvcGhHR1JuRVllTlA4V2RCdzU2MDRvaXVnYk5tVGllYWhVYkV6NUVUcHFLUk1QVW5iTmYwOVA4b2h6dFBSRnkzZllpUHBob0IvYmdsRk5oZmNwV09ocUl3Nm1BcjRyVU1IL0FyRFRIL3FleHpqQVJ4dDdveHY4ak42bHM4NEdha1lVMjhnSVBjWjZaRVNFWFQwQUNWckVSb1YwT00vbU1SU3NnRGpwL1BTb2ptM1U0bXE5d0pJVWlPYnRhcUZGaUJHbm1GQXJnRVhvajVnUmZaVG91M0dJMUlpU1B1SldYeHhnVnBXMkw1ODZwejl5aC85UnhlTWJKVkc4cW1CMWlkSXFYRnVKdHhMMHBwcVNDKzYxVXZKNjRpeHFLN29BYm1DTndubWZVVUxFNDV6Z2VvbWQ5RU5jVTZRUTBDRU1OQldMQ1U5cW16NmpsRCtydzQwRVVZczVqUENoMW9icllZdTVCTW1ydktYclU4VjgrcDkrdEo2VGtuTjdFcVRhMjdrckY5VS9jTjNPSzFYTmY1eUxQblF1OUFZQlJITUplWnRhV0xzajdCYzdTR0xDcnJ2L2Q1ZEluUkZpWXE4RnB3MHh5dG9mU1M3SW1KTVBFOFh6MWVHY2pONVBtU2EwUlcvOTZNWnluUjh2WG5rN0dubTJlSWVYYWlEWS9NOEFiZWlZUnZxY1FyN3dYQStIbDNtMXBhbjFla3JmNFJ4WE5oUU15OUZrWVVpY3FSRUl0eW53bkU1ak8xMXBxMll6TkZFalNpOVlycCttRFREejA1ZnBLZXg1dEMrV3g1L21xdzFqcWs5TFhsMS9maEpyQjJhSmtIc09iRGptcEQ3d3ZLd2ZieWxkRWtvRlpUQUdQRVl2Y3pjb0l1aTZuU3NNVW5scDRwSWpPYXViaCsyMm9GQk43RkxNb2N2OEtBZjZlVUxGelBKc0xVMHpCUEVTemJDNmY4U1Q2cFMzSmo0SExsTHo5OEJnTVhUelRjejBKSjJOZmI5UXVna2pLRUR0ODF0RnZqRVhRQnR6VWt4bmZUeVE0c0o4Y3RqQzhTcnZDNDNURDl5Tms4U3hOSlJDeHpUNDdBTkxJZWkrVFFVVFJybXZocjdWR3g5bXJvMWVCUnBDbXd5cWNOTG93Z2NBVStFMUdpTklpNE1YcENkSlJGQnV5cFhXRlh1OEZTYUZSLzVtYURUTlJwSWZVcjlQcjFhTzhOZFlud3VLOU9sZVBYRTNkcW8yWVdKWmtBZkcrM21aMFRYaUhUMzBXcGpWc1hGWWJhSm0rZ2V5ZnNhVWNsOWdLVVRlRGhnby9mVDNObXUyK0VsVEVrelUyaGhvU2RnN0EyaUM1UWN6ZkROM1NCK1Uza002Y2YxeEZqeDlsSnhETitwN1haNFZ5K2djRGV6czNXWnYrZzJVa1ZjbTMxd0ovdjhpYnNRRkVCNDR5M1NFVzVoaThIa2tlU2Y3akZmUG5zdnlubXV1WktDbzRBZGZQOGZHZ0RxU0hsWityR09sdXNEcDlTS1JhemdGQmJxOHgwL2hLQWozZ2ZMTmZEOE11Y2lmZjNpNVE3UVcwYmtKNG1LRHUyN0tCNWJDRWdYSVVpU09rR05lT0k1aHF5MDFJRUxOUjA4NHAwSkV4UjgxSTkybDNnY243VUZiN3M4bWF4ckFuaDhWWnI1RjltVnhSTm1zNER0MStJaS8rMlEwMDFoeHBHR1hrOXJnM2lSaEs1N2UveUx1cVpyNEZtZTFEaDJaUjRxZ3RVMklyTzlKN0J4c2F0czlBT0xkS21uQXMwWnJSbGgvVFlaK3FyS2tCV01ia2VDZUp4N1JqR1loYWY1WVdiS0taVGJwK09BbVM3b2FEWlNuYVFSTmd0bkgvQTFtcVo4SDBWUHc0aURna3RxWjRrMlBDWS9pMmNONkRINmhXSHVrWFdIL0tZd3QxVXYwdFVPbVhQZGdodUJyM3FpWDZXUGwvRmRXdTNqdm9DSTR4WGNDTUVRNkYxbkh5bXlVSE5JSzJ1akNHdDhlYUJQd0lCNEtqZjlUOWF1ZHdxQ2VBalpndjdhQVBOTTZpUW1RVU85WDBTc2E4L011VTZVN08va0pxTlZMSmUzY0Z2anpRSVBUY0VTTWpYOFNyeUdPQzJnL1BGbTJ6clBLMzJHTXBZaTZLVmJXQkF2Vk00RlpEbFB4OENON0lsTk9KTVFHR3V2VFhGUVkxc2dkdUMveE9YR3dLWkUwNmxqR0ZMbS9zbnR4UmxrVlNpUVpwcnVkdlMxalZVeWpXTkNTalloYVFVSjEyTm1IWWVLSHJTWXlsekpadEFyZTNOam1kOVJsRjgxeGErc2VRLzhoMkxLNFFPODFEQXlVQ3I3cGRQeFFWWDdYbnU1S1VOQXJwVWxtd2J6QU9GSS9od2tKb3BYMDgrWGVOcG16eVNORE1VWjA0QkVBSSttYmFjZFFhbWR0RXJTZFJnaGwrUzNSNGgrSzU5T3Z6OXVMNlljRlBXL3hlLzlIZkxPZmc5Zk96a3VZVDRITGVHQi9mdzd4dVJCZVg0djMyT1dlV1ZKSjhTdUNFTHJhcC9ma3lkTWNLUHhqcExKcG1uNFlzNlYrN0owUlUzd3FHSVhSNU1McGxCUE9mMXQ2NHdUeUVES0Z2VEl1dk42ZThHc3VJcG5RaHowUmFKcFdaaTgycmNvRGNHdU5RWXc3dlRySkdiK0dGK0wrZ2IvcFhOTGh1YkZGR2NJV2dHUWJobENwTGsxVU9kYU1GZnJ2ZVZjbjJaMXg0Tk5YN1dSZFhTZ2xsMzN0ekdRUm8rREFldEV0aHZ6L1IwbnFOcjJ4Mjh4d2tsRTNXYlpBZk9oUktwVHJCeXE2SDBCc0phcGtIZytMdFN1bkVuNlBaajRicnVvYVB5bUlYVTBKSmpVenVHNWRsRlQxV0pFOUNpQlI4QzlpYjVYbHhrTGtERWd0WFREL1lvcnE4aUtqRUk4WkNDVXo4MVF4N3FaSktKU2swcFhCVjROeGdDZDY0a2EyVEFJazFTMzhuWll5bnFsRVpVeFQrNCtaUjlFQ3RMc0RkTFVHVjdrdHR5cndURkE2MFZudm5idDBYWE9kK2F6Q051VTZtU1VBdStWMWI3ZGF6MDJkQTdJd3dqZVJ3TSt6eURYK2FUT093M0hlWSs1NWFKR3RZaUNPUUNUTHlkcWVTSHp0aDFucjNqN244L2pFbCtQeG1GcVA5bGpNWUp6QTZPTGtkZ1BvKzJwUk9WKzlHVEhqTkgwSEJud0M2VFkvZWtkbGs3cFNteUZTVEI1ZmZnV2hjWWNtVVlPQWhqVWgwUmUrbG0vSEszT0xiNCtPYnh3cXhXSEFMSkVKRGdaVDM3NElkenU5bHBwdXB1djBOWkc3cHNLT0U5ekZHU1VxTWdmN0JyckZ5b1AyRExlZG9CRjhtWlpmRStwRHNDdHRoR2wvdzdseVljUnVndVJ4RTVoZUNjOVdPMlBXVkczc0YwcjluVmtDRVQycDZYQzQybEsrVldqOTdkNXdjYVJBZ1cyNlhTRnByZ2NNUTUyVVkrR2w5UTJXTXo0Zzg5YWVKdGo2TnIrOCt6ajMwUEhwYkZYZDZRWmh4UnE5YlJZV3ZySUEyMGsxL1k0cisxSWNnVUl6UHFNcHgvUC9BSUprNWhwcEN1UnB2cHplTEY0R1dFSUIvMHd0WGNpSU04c1FLamZ6TDRHcWh5RXZjTXVid3FFZzRnRURIblp4NlNVVkt1YUhGUThtK3k4YWlxenVjZ3BNZGFzeGhYUGdjSHZaRWhDRHUyUllXZUI0NHhEcjl0TlVCMjdybHRpRHdjUnZ6ZERhZWZwaDJpMnowMWIzbVprUENBRlRWVk5GdkFUSVFualZpR0YzeFVETGZFclVSRVh2UkYwU2hrRllMVDVYanJBditINDNVRkg5U1dCUDZaVEt1UVUzRWdjVXN0VGE5elBWUlVyeWIveGtnYlhOL21XS0ZoMlNqL3V1RDRIcC93cHFyNVNCVnRBenQvY21pWEQwd2VjcCtUaFJENkR4R1VoeXp1cGM5TDQ3cSsxVFhiNG9Rb1lwb0JNRTR2OWlmTVlwc3JXaTFCdVRGVGtDamRUWFZ5U0U0SVZ2N3FkRjI1MkFTZGcrS0hyb2pqWENwRzJ3NmxPSWRYWlRLL05PdHBZc0JkRW9FdHAveWxURGI4MFBPT2xhOUhPbWQvdEkyaW54UGRPUDU5OFZNTjZSbzIrOStQNTI3NjhPU1FhSlJqa1FtVlNZVExNTWV2WEI2TGpLd3BOcWFOT1VHLzIxZjN3cXpqNW1HNzBJajBkNUg5TzUxWExBVmdxRDhsQnVwbkV0ZDZZREpTK1FxUHBwL3NWb0lZSm9IdmlGd01LSHpLNUxZWUNjK1V3RitjRTdFalFROE1LbXE2RFVkeXRrVnFmOXZxbU9PRStMb3RKRGNmR1JJYXh1ZmVSeUpvYzVWMTI3RWZpZTNpem4ydlN1eFF6OWlpVXRFczBsRHRGRVd5ZDBmbHNsSEkrWjQwOEpWOUtuUWZYNTY1eFVxRitNdHpLb3dqc1NwaFlOYmFWVENJYWhweVN5SW1MdzVudzN0NVBCOFdTZXNKVmZKVW5nRnVQdytGMloxMm94L2NYUmNLQUQvRFg5QVdvR2lNL3FrbUo3OUhKNHVDTWJ1dEN1bU5XMmVlYzRpcU9DUEVOOXpIOElvKzZLeUQ1SkFrR2JTYldaRGR2TEk3NWZ3RnlCZUNXb2sxVnVnUlNsdHErcnl0ZXQveHI1azJjTnlZcHhhTVpYL000c3VtRFA0bUdMUVJCMGhlQTF1Q2dFWjJtb2tXSmpnY1p4SHdrNmVWZlQ4QzFVN0l2RUJLRWoxVjAwQnBBa2N4MlgvQ3MvZTdUTEFQeUdJRk5vV3lvVXo5Yis3ZTZZUzM1YmZtRm9TOXBBNDRCVzJJeCtMT2kyTzA5ZHVDOVpmSVl2Zkg5UUgzU2xTanZYcFlKWWRzRzJ4ekp5WkZ1TGNHNWNodk1udGNSUlhEV3lHNlN3QmpzVkdMVFR2QTcrK216T3RmNnlXY3pkT2I5cDRQUWF6YVo2SGNQbG5JMm9sczcrMTcvbTB3ZDFyUDVFMFduOEhtNW5mb3kwdXJNei8zaDRBRFdxTk9hN0YxNXVOZVhUSmdiaXVXbk5YVHg0YnkxRE1PZkhOZEtRNHhubHUwYkIrM0FINis0dmQ3dmhyVWU3WnJOSXAzcUM1TDhOdkMvSGlrdWJ0R2s5N3JuZVBDc0Fvd3dJdjVhK0N6c1NZRWpqdTdMSEFVNUp6U1dQQUJWb2JwOUtOa2NYdytxT3ZENzd0YjUvcTZNdHlLYXVtYVpVcm5paGh2SHh5STZOU2dqTHBpQXM1MEZDUHJvVW9yVWdRaUs0SFNDb0pxYUFsMXg2QVE0TWFSSGhVNzJzRFN4djNhRGwwZy9NSElIM3Ixc0cvVU1aMkFmb1FWQTRYdWxoOTZxcGxFdk03UnlzdDEwVVJ3YWdEcytsZ0xmTUJ3TDBLUjNkSlRzQ0RCSXY5UzlaNEdNa2g2OG9SbGovYmgvSSt5RGx5ZXlCdVhtbXNreG9CNzl2S2pPU085MFVKTkV1ZzVyVWlpSldvbHVMeHVKM0piT2MrWEZYeEJ5WGx6KzFxWHZFZEl6c0V6QVl1RVErbDFCQ0FmY0tOZWt3dTNkVys1YzJWRDRhT3p4eHRCQ3dPTUtQZnIyT2lXYTJXd0VXMXJBRXgzaFJtbHhpSndwTlJ2U0JZTHdIYlZkNWpYeEppbk1PT204L0ZNQmdrUVV0NFNTaGV2a0JXTCtMVFVmZERtZGw1dlpxcE4xcVZ3TlRaSjdWbWVwRitKREVSNHlXYk5jT3gyaFVpMVUzaUhTa05yZ1psZzJIaDhHcTZiL1RiRkIrSllZQTl3N3Fta0pYeHdTcVdya21TYkcvYnJNRmJxU1k2V2xub2JnanpWSGZ2RkN5NHJOUTllVzJmSDh4UDhmYVRsZENjSXhEYnUvMmFMV0R2bnkyYjdNcHNYbWh0SGdGcUIxUXBOM3JhRGovVlhTbkMyZWE3bHlIc1dKVzF2WmxScll0THl3QWIyQjYyRHF6djU5SG9hMlZJZzErOEZqbFdObHFqcFMvSWdwVXptNktOcUgyb1l1SGkvZDFBcTd3eXBNdU54cGdLZ2g5WnZNNFR0aWdtWkt2aVlseW4rWVhtNVBjYURkdVJPU1pzL0h6VDlKSE5icmxQRU1YZ3paalBlSHpVUEg0YnBvTkMyMjNsWW1oRysyckFaYnJXWkJ1SW1HeW5xeC9lZDlPdnNHU1FnTU9idlBnSDJ4VWdVeUw2b1VkTHVJUnVVcFBxUUkzVjlSNXJmVzR1RlJWeDd6Zmtzb2ZKMU4rT3ZFQUg1dlRjaERqQTlOa3AvVDAvZTlwUDJCYVBjK2p2amZUdzdrVU5TbE1RdklZMG9BMDVlOU9WdUk0cnR1ZElVY1NKWFhwQkNmQ2pDeVpIRHdYMm9McWFZQzd4d0EzOXI4bUYxOXZFcHd4WmxNUUdqS0lDbzM2ODNxVkhHTW8rRUE2ZndYcGcxU1doQ2xjdW5qMjJCd1NHdnBBV2pPZFordktqSEkvdEpBUE9QN3J2Z3I0Wk4vWlg1WHR2NUJPc2hWbDRBUHNENTNxMWQwbExtWWl6cXlxMkpyQXBpZEg4enk0MFdrYXBSdnY0TStuRlNIUUxMaWpHVVNQNkRTRnZ5YlJLS2Q4WjFqMCt0eGRmY0NsZGRqTzcrem5LS0VVZkd2UW8wVDJOeHR6OVNyZXQvMmNmS1BlMXlUY2xYWCtUeUlHZklEYm5GYkRlbjM0Q2szRldORTQ3dm5OWUVwMDBWYkNhQUUrYnpINlI1YkZtR0JXSTR0bTBCUDBEK3MrMnB2REprbmRIa2Z3UGhZc0RSOVhSZmNJbWExM3B1eEhUMWFhWlNEdEFIWlFCcDJsNDZGK05TWXZHeFJhQjU1VUFYdlZqc1JZUkpuSEJEaXZsblliYzBnWVdEd1FOcG1oTmI5MlRIdVQzUnloSFR2a255d0N1WStTUGIyNTNvRmRYL1RYNldzMzJSSzhFaVZ1YXI5ZmdJQ0FnSUNBZ0lEemZiOVlKL0Q2TkRGOGhQOC83a3UrMzdITDg2M2Z0K3pKL2I5V0JyNmk3OXYxMGY3ZnNKdjIzRHovQjlWcmZiOUlYajg1ZSt6N1hxKzM3RzM4N0x2dCt6a3Z0K3RoMGZJdy9oOWNSZmI5aUgrMjcrSDl2MDhYN2Zmd3lmQ24rejdGajl2MWQzNTFYKzM2MDYrbjlORnI1MVg3ZnFNYjZ2cXBQMVdPeURZejlFbzFKRElOQ0pVOXdLS3FGUlZxQlN4NWVkdEJoYzhMZTV3ajNhOSsvR2xOR3VIdWFFVGkyeEh5MHdmdUF4NVE5N2tBdHFKRU5Dd0ZQb3ZLWTZWUS9ibnN2RjFvdzVsRUg0QWlSeTc4bGsvdmJGWFRjT1J4WVVHbXBIejhnbDR6OTNGTXdLaEx3UFZ3WndhOFpyVlU5dk5WQ0lEcjRRSDB2YjZNamRvb0IrWUY1djBkOE5qbWtCaU1rV0dZR3ZSaUZtRGZEeENNOWV0NURjeWgxWnM2V0NjNDNRRUxMeFNxRExRUGgzcHUrQWxYOUFlYnVDbjZld3BBOGJma2Npek53d3Y4Ui9tTGFrbUwyd3JVelRBbU9aQ242TU4ySDc5MnM5eDlXMk1yUUlkSFJOUnpYVk5yTHl5bmtDZXZVZkVuckI2S1RZd0hCa003U2JUMmREdGY3K3NhVjlSMkh3OHZuUDhzL3RvSkJFaEVmYkFkSzVBTWJMUnB6NzM1bzhDQVpaUzROU3h0b09zWUZFQnFoZ2RpTTVmdk9JTTdQMTQ0bEpxRGtQd0RxYWlBUmlITmJVR3J5K21qVi9mYnZCU05CL2RscUpGbXUrRDltR2Y3L3Z2dFpmam5UaDkwY0I5MzhKelhNcjMyS0RhS29XRjZacUl1RzBPVzBkcy9xZDhKWDh0SDlCQ3VPa1BPN0RwRDFlU1cxaFovVmlITjNQQ3pJMGROTGRLVzc3ckl5c1BsK08xNWl6V0JIRXlaL2t5d2pVWUV3WVhnc2dDMDVCNTQ2MHpLUVh2dUZ1aExzSVd6Rmd5bldiVHE5VWJPWWU3QjlxVy9IVzYyZGc4RFZ1ODRsaFZ1c25SVXlWMVlsRGU4SVJIZGxSenBTdGRMN0tZdjV5dk8zamNMdEhhK0NzSDJHUkg3Mk9EaEgzbHA1Qm5qaHFYbk5jb09ZU2Z3N3Bsa0lMT2dmeHYwN3RuOVEzdGVGWURYb3crRUZvd3NqbnBGYmdSSnpFQmdnVlF6dlA3R2F1QUxBcVBSOGdjKzhVYXJYejMyL2t0YllGbjlWUEJhenlvaUpjeHQ2NEZUbTUwL3N3NkZ2OXJqQkYvVFdNcDUxaEkvL2tUbWJmRndLcVZHV1hENzdtbFVSWU9TN1N6R2MxQTB0OTJzc1VhRGptdThlQVRXZEhPcCs1Y2tmWXdWOWJEV01UVjlnWHQvN2d6THlqRDkrdS9HUElIWVdhVVBSRlBYc1p2UW41WmJjd2cwbEdwVE5YS0pKMkRLcGJneWFsZWRGUXhxRHVtbml2eUw5akgvRGlBZnpZRXdqVThyN1JkeDJleEdVYnllZ2JPaVg4T2diUUlUV2FCbTNNbjcwQTVzSy9wNzZ0MEF4bDJwb1A2dDY5a3htSkRmb2Y4azM3ZnJUbTRoS1JwZ1NCaGx2TkRLTVlOWmFUZzdmOGlKYnVxaWNQcHRMaWRGQUo3cC9qTm5abVBsL3JLUU0wL2hFTTFrbTFQWVRvWUtyc3Q0OVNDYWc3K1dzckMwd1I1TEg0WEk0TVh1YUw2cXBuRUNuQU83MTBNUzVoWEdkeG4rNDB4VmV4MUVhOVNNc3NONXFIY240MG54aDdoaTJHbFYrVG82dUdKaUkyTnh6R1Q3VWpUY3JuWllxOVNjS1ZiNWcreEdJazhNU0daSGZSeTQvVlowZGI1YXZPaGROM2F4dnNyNXJmZ0U1TnJDVVE4WUFqUDJGYU92SFFTQmZIaVN4M29wMWZPT1g4UEpjSDlaZFFoT3BjeFF2V2ZzV3V0SThrTEl3RWx0UzViaDNJN1Y0alBJYVM5Uk5qb0o4bVBGWWtpdGIzMEhYeGN2OUVjZ0NaVXBkdXdORzFzOW1qbnJyL3F1UHp2ZGxYWkZTZHJRdmQ3SFZtTG5VbUVsR0RrVk1FWjBBSmwxZlR3ZENqaTIyUW16Y0l4T3AzQzhBaVhOOTdkR2JzclBYWWY0cW1BUU9melJ3dllqT1lKN0FGcmIxY2FiNE16cEd6VlIvUzgvM3J3TkRjZFZrUWszcDJGWEpDWUZEcEJxUXBoVGJ3TWt0NzRuUkxoL2hUSHJuOFZxN3lRUEdLYlZoOEROZi9xdjRpQ29yenNXS2JQT2d4bTFpRDIvTFlvTVl5dDdIc3RSREwvOWlpT1FzbjJrSkFvbU9OWXhIYjZ3VkF6N09CVmw2UzRZUUZTVC9rT24zcnl1QUdkT2lJakhoS2ExMkR4YlRHQ3I4TVdaRW5MdklyVndOeFkzbC9ybFJGam4vblVPdkoyRU5sTFprYzU1OHVEM2gvYXc2L2x4YnYxTUhkOEVLQ0pZS0J4Q2R5TTBoSks4dnF6SC9OdlFKMnVkem5NSW1saWNILzZFb01NeklxTGNZMUZuSm9CY3hKc0d5d3JMeW1BblN4OGI3UEVzYVVBdXdXa0hsdVV1aTdVRFIwK05RMnk1NGdoS1lYRHA1TXFYQ1BYUGVLblRqK2NjMldiNW1zdVM5RHdkOTJ4b3F5bi9KYW02NEsrT3NXY2RPbU1TWWhNSjNXUlpSdnFtcFFHcFhVMy9NbVg5cFcxcmVzY1lObFJuTGNsaTZWNjlXeUZKVy83Zkh0SU9sYmZGY3BHMW5sUE5kZkdYZnkrSS9mNFppSHBmOGFBdXdKbXVYVXdFRDR6ZXZKMlNZVitucnZpS3RDTE44MzY3cEFQd093VkE2MmFsVjdHWDFjNFI0WHBjbUNydlhlM3N2VGg5L0FNcVdwUGdpMVpUbzlyZ2RmYnFOeVZkWWs0UzUraVNYbkxPZjNjUGFwVTkrNHBQdjBrekIrcHdDTkpKekErMUorZDd3NWt2d2szY3dSbHh1YXlpK3oyWlF5QUt3RUZ2T3prZllreVo1OXFOTFdyMEw5RmZoVmxQNnFDOGM5WHY5OU14N0k4SDB0Mkh5TDJJdU5KYUNaaWQvUk0vbmZpVGhpaCs0ZnFQbnBXcElDYk5VK2dMa1Q0R1lFK3oyc2hGMFBQa2JuOW1RTndqNk1TTkhkcEkyWkhOOTNhcE9JdEZuMTVYdzk0ZlMzeGpkNTY0bFZvZkpIOFJKMzVjOW5RK01aS3Y2K2VSR2pvUmo2NGc1TVRrUEpoNHFPL2RMZjFIdzVSYmRIQUh6MU9TQXRialdaOHJYaXdmT1UxU1c0RnROTHlyVjd4N29tZytwd3R6b2d6S0hnZFplTVI1anpHcTEvQ3JTQ3hDVFJaa1F5TU5MeHAwU0VSdnBCd2FUbldVTEJPeVltSW85dFZKNG5KUlFFUkFPelNGMTdGWTBHUVVLVDZacllvNFJSdzhqYk9KWklpV3AyZVl0VGxoRjZaczU0WTVONmhMM05FbmNTTFJNcTlOa2lBK1pQRHJqL05qL25ESVZLNm9kNzVwYThNTjYyNFl3UzI2Zjk3NHhBUU1BWWpTbkowUFNGMDJTMmpyU1dlYzAyWUN4aGJkV0tVRkp5b3Jzd1VlT2lRc0MxQUpqQ240SHVnQUYxbDhEQ0VHWDE4OHo4a2JGTWYvZ3B0RVo1TTRnbkZrR2xoTkhUQ0JhNGlSQlZ0WjhQek4veGVEcEtBSHcyWXFGaEdSM3IvczdocGwxaHllSnlYQkpmb0lTWE1JNGpFNVFNcE5xR3pQZ3dBaHcyMFJwSHk4OUxtZE9SODlXbGNQRmRPZEwreFgwc0NhS3duanBUREJWZTdzOXd0cHRJNStaTjlRVHdaNW9zVjhmdHArMURMR0dQK0dYT2dpMkRUUFdCSVpLbC9mNi9FUEprZVNyOTdyNUUyeEpFeXNGNUhtWjJlMGIxRXRUM1hTWVlxZ29LNVhFY1F2OHlvajBrZzZOckRxMWt2ZHBOL05MQS9WVGdadjB1L2dSbmJLcXA5dHZjcUJDcVJPYU5xMkxDaUIvS2ZLVVJ4ZEE2ZGdBU05ES3c5RTNUVnVIa1pvSjBCeXJVZk5TUXBnalpIcTFSU09jcHplWWlQTVFIbXd0MVJnaU50c2VncGJaUE5wb3FVWmxxdjZvQ2J5VE9VZEpqL21MYnNNZ0Y3Rysxbmsvdys1SzZ5c1c1VXBiWVd5UDEwZldRMkV5YklnUWZpTC8waTFhV2VBV2V3V3Y0VDhUYjNvN2N0MnFtRFFXVDZKVHF1MEVQOFNEcktFMXNEbXV2U2IvRDdUYW9LYXF6eVBLQ1o1bkVqNHN4Tlh0OUtKUnRHT1d6QXNkOWJMTUxRZWF2RTJ1UVk2eGpFQ3ppellzakdodndkMHBXelo2Q1dhYmxxT01VWUxKV2JHbkFrYXQ1dGZoaHYxR3JYQVZNSHROVzNaWjFRenQ0M1hXVG8zR2p6YTFFSXJZVVFNcDBSOWJzTUgwVjIrN2pYOEdjYlZUSXNZL0k4Tnd5NWhlZURLTnFaNTQvbkpDaDFwYkIvVUkvR01ycmVTS3pnUG15MnBsWkJTUjgrL24wOE0zK3AvdEp0eDBqUUVvU0xDanordTkyTGEvUDh4MW5ERGZpb2c2OFVqZnNQYXVOaGh1a0FGNTM5eE1WVk9IVDNMTEhWNUs0bzFySW5xMTM3c0tNN3ZDZ2NRdmY5bjNydVZPSm9NNjIwRUhNWkxEdUlKQ0RCc1IrYTZXd0NzVWN3MjJTdnlUMExWZlV6bmFLb0tIbmZXbTVjTjArUC9FY3JwYkZ2Z2NWb3RKQ1R4cDlsc0ovVkVUZFZOWFhYcHZuYTlraTJEUFNaTHVHN04zcE9uOTA4V1pKcWhTaGQzSS9NQUVTenF1YmJUZi9CTStCRjNNTjVzazM4UHVHSDF6SFdTbWkyZjNwOWNBY0w2cDRNK1NhYU5yeUpkdm9oWm9ZK2JpczdDbWJuYjV5aXIxR2JxRjBPelFaQ0NGYUIxdEtveHRDKzRxVTU2NFJ6YU84QTdIMVhuaGl5VUtwOGhUTUY2UlRpQ0diN0lUVTY3b2lCcDBJZGxJeVZQTi9heEV0VmV3dDZ0QTE0Q0tBejl4TVc2emZ6MTJvYXR4RWVPUGZRbitHZU9acGlrRHI0TVVKOHZUeDk5UC9nMHVibEp4aWZMZkM2NENmMCtOY3AzWmNlNTB5QzE3UG1jaG01c2dsNUFBb2lUZTJFeHppdE80cTZFQWEwWXpPUkxyaWZkQS9xMzNWVGp5WWkvVStXdFNDZGt3Ym1XR0NZMTA4TDhyQ1ZaVTlZTmdYbzN5MkxtL1VIbkZIVlI1QXVpQ1V2MVdWbmMyalNoNVpxV0hldlFwTGlBSXNqaTJwTVhmZnExWFZqWXNLY1VQUHFPRFk3YVJteHFuRkZWUjM5M1pvSi9jbmdYWm9oa1ZxZUhkRW5yN3F4THV2N3FGaU5aYXh3YjBzMkpXSlU2YXRzYlpRQmlrYUprS1pqSzR6Um9xUzY3dTE1Wnp1TEpNYmNOamZsNDIvdk4wVklQNlBQVUJzTzA2TlRKTVNPMzQ2MjN3M3ZHSlVONzluK2pRUTM0N3k3NVgvcXNpSWtWQnRVbEp4czF3RnprM0ZOMVdMaXlhUlplN0JrL0hValhpdHhPWGE4QzRjTUUzMlpNUk5XZEhrMFNmR0JXUElrZmlDS0lka2ZVRmJwemNrU2xSMUhtUUl2L0N5cFdBSEFjT3ppMWVCQXBvVGdGQ0pRZzAyZ2cwRlZScU9RekN5U3BxSmdLcEVBSHBOdnVEc2hGcVNWY3I0RkRzdjlyL3Zob2NIMExFbVlnSWlzYm4vT3NOZktGQUFDZ2NtYlRwZCtobDdFdlVta1VpSTBDcGRkY0xQZjlEdEl5ZE5CRjg2UlVILzBmSkJmMUE3UUhOVDJZUDI4dmtpckxDNi9oK0hlS1U5WXgxckU4WVhGRUYrbGFjbFFIVTBVUXR2d01XOVJEZUxkT1BaTVlmaDlPRHk0eG5DdkdicjY1bjN1VE1IeEZycThhSWNMeDNvdXl5aGwzTFpJSGRHNk8xRTR6amxra0FzT1NBKzdNUGhyN3ZVV1VhYkpLRlZqZXJZT05DUUREK1NWNjNOa1FUOWV4S1M2STdOWEFWYkVBSDNnUHRWTExFRFRPZHllNnRyekdBbFdIM05wRjZnTDRySm1sUWpmWmxXTGZLeThReURBRHBmOFppT1k5WjBnTDF4N1NZSDkxcUFPZ1ZuQysvT3YrMWNNQmF4dFRHbzFmVDFuVzJaYWdHdEJoTE9HVmlSMkJmdWw3cmJNNzdwNkE3MlZOZHBSeW1yYVA5aDJHUHhSRVlyTHVtcmVBeEo5QlVoMjNNcjNKMGFWQk9EZUpSY1UxYXQ4NldyS0RMeVFSWjdaZ3hMTDNwMW5zTE9vWXZDemRvQmhHbFJiWHdKUVZDUHlxTVhxK0hhOCtSVUw2WWJEdFVwQmJERHdVcUVZSTFrcy9kZFY5MTBBN29GRktKdXZZM0JLWEVBLzFRV2ljR0grQjJKZjhoS2NDTm5mVDJ6OExDZkgxRHZFZzdqNFlKV29LV00vakZqUHdWeDRUMHQzaEdPYXhBcXpLL2M0MlF2bURXVlVRTHA1WTBZY2drWWc1TFg1cDV4R1lkbGlXM21KL3UyUDVxbys4aTlpa0xMSmsycGdieFRMMEF1d25XRE1rKzZLWlowb0xXNlZzdld1RWlmYnJLaFcvRm5BRmlYSXl6djk2bkU5cXlxelZvUkl3SDgxREFEaG85MXNwRnVuQzFrMzludHdidTM3NkgxUzZWampXcEdid3RYMllFTkp6ZEJNRno1VXZEUGFsajBzZDhVMWxSNzRDL3VMeEdkY1F0NEs5RlQ1TGxnZ2ZuaVg2V0tnMG5QTER2UzhRMFdnTnRzRHZRdFMrS2lEMjI2UTg4TmZETHk1aHhNeDRwSWZWd252bjVoVjZDS1AzYkN6YXBRLzE1R0pPRXBCR3MvdWF0dzZXTDcyamJhaFQ4dFhocTJvK29yMWdTZnpFdlRyODIxaTBNdDBUYXBuRlpxM0l0YURTUUxEMC8yMlRkbVNUcm1QVkRRK3lyMnBLZkxLRFFZd2lidDE3eFBPZ29aR0V6N29jTTVZZGQ5Q0hwZ0h3SDM5UnQ4NnU1bm96OTEyWDdhaGt5VGM2bUVBVzIxUGVLcWtVNTlIVmVBMHNYM0ZFQmJoSnlJd0oySkpmUUs1aDQycFVuUzhNaVBFSk9yUUJLbnZ5OEhhRjRDaGpXOUlXRXpORDI4RHJEUmR2eHN4YmNUc1lCSnNVbXpmVmY2eC9uWWhIUGZiVlFJUi9ZcWFPSTVLaG1UM0cwUmFpSllxek8vOEs3S21MVVBlWFZJLytVUDdPUGVhNk9YajNNdXQvR1JreUZkM0Y5TzBBTDc3SHl5SWJpWW9nZENvd2lIdm1pYmRKWVhUZWFXZ0F0SDVZZ29wQzZHYklMTGovVE5UVnNDbjhvandoS0o0SnBGVDJyN0VNTmI1N1FReWhNS1VZK29Oa2Zuc0FxRURFN1NFdEsvcXljenZYK1p5aGtPelJ6ZUtXMHk1YVB6MDE2UjMwVTB1WXl3V292QkZ6SzE2Sk5NcU1HVzdEbXF6a0V2ME9hNS9wU3BJZzhRTUFYeDZscC9pd0Z2Mm9HVEUySmk4V2VEQTRLTzNvL0FOd0V4Nm04dG9lTGVONmFnSHEvZXV5a2tZeVI4b3UwclJXZjhpb00wZXU2MFUxcU02U2t3aFBUcll4VjNESisrWWY5TXIraDdaWmV1alRNWU1oYXl2bFNRSU9aMkJFU2JDTWtvMUM0a0FXZjdZRElRRzBvUE9MTXRjU1NsYkZLUlVQYzYva2t0ZjJheStyRGVkZE9ZbnBCanQrczBjMjlLNDZERXozVlFCRk1TektaaHBEalV4MTdZVFN0MExSNk1UcnlCUzkyMXVFc0hYeFc0YmYvVzhrQjZmUkYvcThTc2psZ2NLWE5tQzQyNHhnRjVPMUVxL0J6aG5EZFdHOTd6R0VRVDh0T3VoTHMrWEN0Q0lJV05Jd1VPeWtzdk4yOXRlaVpsVjVrZCtDR3BUTzFhM2FydHVCamluQWlEeFgxaVEwbDB0dE0vV2J1aFdHc2RrQ3FMZGxkamt6SVJVL3c2cndHdGNEblYwQy9DNTQvTFdyekYwQTNRTXFNYzBuR1kwVWQzQlA3REdRakY2T1hXeFZWREF5YU1HRFdrRTNNcXNZWHZZd1NHVDRWMmhXOHQ2aVR0UFU5OXlEdEdvOXVYd0dXVmpUazg3SkVuaDFDNGJkZ2JVTUxtd2VGQjJobGRvNTFFSU5zK3Nia25GTHFOMW9RcFJsSk52VlNJTzdIWm1GWEdXdVZTelpMQTNXUDIyWWhlVTNDMGlsaUozUE5oaWN6dndFTWNUKzRzUmhNQzc2c0VzL1RZSDVWcFVwRVVpUnZmWWZraWFaWGp0d2dYV3F6VDZtYnIxNFJ6UEd1RTdTc2svazJyTUNkaGozRGxBNDFaM2pCMFF0M1lyTlZJdWgwN2g0NHZvWDNUWG9Tb1NjWEZYTXhqRFZwMnFmZmxzR2Jib3Y2WXNldnZWY25BcnhYQTFqcHdMZzMxeGtXbmhMT0xKejlsR1M2WUpzaGx5SHhSOTNINlNWRDFiYng1TGlOZDVwMnppL2diWmN5bFhKcitOM1Y5UU8xU0krVjkvaFJHUWczZFl2a0ZCU1gzR1dha0YxTGViRzFvMXRra05nemhIQTU0SVNmWU9LeVhGTkFLcldxZXFEWjNSem91ZnJjK1FQbXh5NGwyMzBaemhoM3Vnd3dxVThueXowMlJVdW9wVjkzYzlxWXlIZU1DeGUyaWlVdWozaHUyd2I5cW9icnRkSUZzUm01aXBSc2RZS0d3d1htZUg3KzZPSEJ4V3FKVHFDR3lyOXQ4VWNURXNmOW5pdGs2eUtiY242aUpqWldyTnlzYktrRkFCM3FObWFiY0ZXb05sTEV3WUxFUm5Hd0oxMk1PaG5VbjVYTjlBODBEU2MzTlZNWjRKbkhFTkgyR0owZE1JVVpDQng3aGhLUjlUS1ljaDAvc1NPUGJsNHYyd1kxajJrUG1xOXRoMmVNNUxYZzVzaE0zWmkzQWJZY3UycHd4NHlwZ1daYyttNXgzNmlBUlhDcnczbWo3aHNMTDJub3ZjcWJZS1pjaG12S1dsd1dZN3JIMHUrWURMb2JPYkZFLzBqTGVXbythMitzTWVrNDFBcVZXT0I1MHhqelJsVG9SMFh0YnJMMHp1SHhYelNwc0FWb0tNeEpJVHM1MDY1Q3JJUERIeW4rRG5zM1NkN2tKUGRJL2dmV1NmMWFEZUVGUm1WUVhCRDNYQ3VFQ3Y0Ny9WQ3MzZUhxeE1ob3Q0QUhlTUpTTVFUOHNxRmprb3J3bEczY21aU1FVYnhCazJJUVFHWHpNSkxjNHMvRWJ5TlZLWFBCb2VEVERnbjFlVVVKVEE1T3E4K2NoZjBqZExuTHh4SGRtSTRJa3lQUDVwQ1UzN2htUk5reG0zNHJ0K1BZdExFMCtScHhiamxtM1FQQndNa1k4NHJzWVhWZGdISFR5QVh4cm1aWHhiN0JERXF3S1pCOVBLQld1MWlqZExDa3ZwNWozSHFOelRjMmd5Q01uV1ZSOUc1ZlNXNEJtdjNuSG1TYmdEZFgwS3Zlc0hIRlVveWJUTys5NTdOZEJwakJvem5DUUJKOUxLeFp0ak9rMUpJTGNtMkxXUE4vYlpqUzRCYjdpSVgveExHOWtIaWlpcEtQRWY0Nzd0YW1FdVVpblpNeGZGV013SjExeDBRMzBUUVcvZEZlU2Q4cmpmRWFQYytldTRZSFRwcUlwMmMzSG9HT29YT1NlYWQzc1c1K2oySXNjYXNhSXJhaGN5TjBHbjBDUzVHK1NsdjFKN1hpVkNmcE1jcUd1ZXExS252b0lSYWgzNlIxdmxpVDRDdjNNSDI3SXFqZi9MRDU5b1JBRGxGZ1dRM21tSlEzVGtvcktPaEROZUh3V0hiQTR4VkVaRThWT2p4OXI3YXJ0czluc3lIZEdlWTlQa3Z5bExHVjV2Y2Z4TEkyMDZnT1hCTGs5em9pUGRwQ0c5aHIrQ1NLeDl2ZE5FbGxIR05GNVRGUlZTL1JBQzIvMDVuaUdUM0FZN1JCRUw5Mzk1Y1lWaGtXckZyRVVwazRkdWNoanNjZE1KU2FvUjhvNmMxWHNUaVV0NGNodmRrdlYyWGlteTNlSzhQL0wyOFJycCs3NnphekdTQmRiZzRBUmlIQUpyVVpCNkNTWVJYQllOMVMvRTJneFVLSlJkSzJTTUE4N1VBc1FaSnEwd0VpRThzeGlnaWtzNSt3QjZLUlRBYnZjTktIQllCWSt3UTJmYkI5dmtsMXZYNHBEamFpRkVGQUlBSngreGsyNUx3N1I3cjNyWHJZR0lXZGluYitVSnNlMFZ2b3AxazJhd0NtbXFsa25RUWpUMUxmS0VsZURwenZsRDZteDFBaHp6NStMa1VHb3BBb2h1WTJOcUVTbitEdTFQWHJ4VDEvWXVMb2ZmN2hLdExuZmhEZ2hjQ0RhOGE3RktUUmhrVXhxZFBuS28vMXRzRm9EUWJIclJtMS9ya2d3cnk2ekFZaVdqZmdCRnRFaXVsL3hKbjA1SDBPWC9yN0NGTXZ0bFg0ZGYzdFNnM2xLazRlY09RVzI0RDRhVTRFa090NXBPTDFXaDcwQU5JZVA0ZnpvOWhFK0RkYVpYVG9MZEhQSVdCY1VNSVJOQU9HbzdIN2FEUzJGNjh2NVNBdk8vcEY1ZGNPdytoQTVzL3RJdS9IQm9Wb0JlWERzNGxjQ1VucVgrY2NlTGpOdUkrS3VXLzJXYUEyZ0pzZEtpRnNqVHN4K0kxMEE5ZFJ4ekwwaCtCSGFxY3lMZjdFUkdTNFJvTVM1cEJyeW15TEFZWXVkKytOUDAxTytHZUxFVXFiSmcvd25OYnVROEJrVERDc01tNllYVzluYnIzSEV3eHc3NjcvMXpTK3M2RUZVYVVnWGJwM2RTTVRpOTVqRS9GSDd3SC9RMXp3cTlyeWRMN21Ed01LUE9SSjF3c1Bwa09TK2FJWHB1OU1VcERsSUY5UmVxekRuazk3N05YUXphdUNKV05QQ3FtbXYzZTRlTnBjTlM0dmtOUkhoM2VGN3pReHlXRE1xM0JmaFo1WEVjeDMwRjVmKzFCKzh2SVN4MFkxWFRGSEZwbXFqYXo0dlgrTisrZHAzY3BWdkFQMi9RdHBtaWhHTGtWK1JaTXZQeFBkbktORkJqWHlxSnJtV0xyN1Qwd09kS1l3bEtTVTVlbUNRcWdTSmVRSW41UTh6T3hCWFJhanhYZTdlOUxEUTVlOGpqUGl2S1AzV1NYRVNlNXlSNDZNT0o2bWZGdmI2NktSZEU1T3pjcmZUOWZLWXhLOWZWdzhhMkFXUklFK2I1WnZ4QlpIRVlVS3owdWlTdndFTHVicDE1L0NyRzZtZlJEek1NZUx6ZDhxNVZpWmFlTXNCRmNUTzdUMmg5OTI0TXZPdng4anVOZWJVNjZEeVhnUzdmWkY0UDg2cEVaY2VWRGt6YXhURmJmRjQ0TmhSQWhWdytSaG1KMUErejEwSGxpN09vS0RweWNaWVY4M0hDNDBuVUZPZGFJcHBtRTJxM2NobkEweHVjY1pCd0hxQkQvV2I1ZlR1N005SWtvMTRtajhvZDVSUmE2Q2o1TWxRSXR2K0poVlZxRHFORGo4b3JRM1lVYjVTUzhIMWgvRStwM3kxY0I1TGhIQjRSL2Y1TDR3UDMydUtzVW1uUVRnb0J2ZysrSTRqV3NPdWx5dnhjRjFuRDNaSWUzbTM2c1ZMMnZNS2JOL2J5WEo0TmdZZGJwdjZYVmxYbDE4VmdLdUVVa2tuRUFkbWROOUNQUzlOMjBlU09mS0N6NkpIN3JVa0pya1JjdEZ2aWpReGtoejdkNHpWV1hwTVlrTEllM3hsK2Y3emtKbGJqczBPVE1iR0JJdllMdkg1eUlKczhscEJpWEtkb2VHZmRBQVJ4SVNtWFRwbXFXYm5GT2RBd1ZSQ0U0TDFhNFFWZk1ERElXVjhXK1AzMi9rSkJhWVNvNXl1WXBEOUExMnpsV25UL1lzanBDSVJ6bTZFWUd5Smo3WWVJTThpQm1YMmJqZFBmeVlnRFFsOWhtVWFjM0VQeGp2WlQ3VFRFRHJWWloyZ3pkaWwvVDVzbkJjY2tiQktCRWIzYWdkdzI5TGwvVVdaMEN4WmRMWlNaNnRMall6WERZeWczOEM3T2d5MHhtVElKTlp0ak8xTmQ2UWJMSnF2dUhkaUFGem03L1FiaG5oUUJrTnJnRXZRTVVkYnNvKzlaakpKSTUxQUh4cUk3UGhQN3BMZE1QeHFOaHpwdEZOZmx1RW1rcEFaL2FINGFLTjBzeUEvOEI3Z2FwOUtzZ3llVzJnNHFMUThmQmRyU0ZzVUxOdXJJdmNoSWtkTnZuMHFlZGJNb0JuaTlxRXdjT053dzYrV3BOd0NhQUhOR09nSkRINkxmZWlpcW5zdjVGQXZzbWRUU29uWSt0TWtHNEo2M2JaVXoxSEE2Q1BOSDFrUEhHNXN2elBoRnZIN0NJS1ZydW9ZakVUTFZuWDJkRU4yVzBkUGIvZm0wcEtSQk5hTS9tN2IzRUpVRVJkMTBWMm5MS3NGeWZUME9WWlNPNDlSNzltRVRWaEVUalJ6Y1FkSVdSdVRtTmk0TmpOYjV2QmhkZTJmWXNMb0V2OXhrTjFsTDNsY1FaR2hFOWN4d0VDc2MzNU1SeEhuWDU2a2ZiR2ZoTHlCQWJrL1JaSW9QSHFmTU5Ya1dENXJPSHN0V1RxM2NZUm9yeUZaL2FEbFhVcjJJeHA4aEJYSGRXdUZ5NzQ1NjV1K0YvRGxzaVpxTmR5NE81SnpEZFdJdGY3VDZCNGFzaXZ2OHllR2lQdGpuYnY5dVVlMUUyTDRjY0Z0VTF0dmRyeE1MSkVaOFhKNmlVV0hDYnhmUXc5dDNTS1dIb1diV1l1bGZWQ0NKeUhhSGplSGR4QWdkUC9GZm42OW5BbThZRFp4K3JQWWVrU3VPZWxJMTVWWFJ3NWhvQ0kyb2VpYjhiQjlwWDZYL1BqOWRKTWJudldTTGtRdDhEREdwaHhrcyt3YjNOeG8yT3NHTVJ1Tjc3QThHMm52K0FNVnU2ODlTMy9FdTRDbmUzN0d2WWN6WDE3VmEzdndxSlRJcWNzdzZYVGtRZnp0Sms5ZnpjRy9DZE1id2tXdmVESTI5c2tJelByVFFDVmQ3T2RGbm0zYkxYd20vSnNscCt1Tkp4b09NQjJhak4zQVJhNHQvYW1aeXk1RytNL1o0a0FCSE1XSmQ5T1ZHLy95bStQWWxFbTN6Q0FyaGovZHgzeEpoMXlRck5WUTErY0dCbzh4WkVKQTlRSkZraERwOXFXMmwyNnBDMDBrc0t2bnVpd3BOTmdnVjVxNzBtREp4MmltMUFXUGVrU1ZNci90MHNsdmxHQTN3Z2o1b1JWS0NIeHNySTFmcWtKd0lmczhJUy9tUFM5NHNVcTRmNURoSWZBRVR3cDhqb2JLRm9rRkJNUXhjZndwVzh4c1VzM1M3ZStkMHJVV1oyQ3h5aHlkeVo0MU9IVGJjcHIvMEx3L0ZXRUZKTG5zQVduUFcrMXFCT0tUaEt0SFhXNzZGYXZnYnJQcTM1WUtrUjVyRm5lcG4zN0NqZStnb1NBcVdOMmh5aElNNVNqb2tSblRXTVJYN1hFc2FtbE5UU1laTEJ0THlBYnpBVFd0WExicFB4NVJFZEc2amxOSk1tZE5DRFJTR0tvMVVCdjY5V2pzdEVPUktKMWZGWVhSaVlNM1NwZWxzN3JROHRDdEsxQ2FTblhxQzR5SG8zeTZJNm1wZW84QjJXcGtRNVpmcVR1YmdnYmg4WVdRcmp6eG4rUGoyRkRDNVFIa2tGbHc2ZGVzZk5xZGZ5VEJ0R0VFTlkyWTUvZjFPMXk1T0wyWU9QWFpNU24zTExBc2lObTR6RU1oR1MzOEp0aUhKZ25vNW1TeUhtNEJJa29oMU9vREF3ZlVMTktsZFd2cnJlMjc4ZmREM2U0R3lHWlRycXBFblFreEEzSmFqNWVrR2wwWGlmVVdCRnVsNFFJY2p3YlpIM1g5ZlJqdHFKYVFpNmJCTHhBUXRVa2l4M21waDBsSEZxTXhlN0xaNlZZd0hFTDFIaVhGOFJQdEY5SXZ3dlNmWnJ4NFpDQkZENXRMV1Q0WWh0ZGhNc3pjSzVWZXVkSjN3RldrMnd2MktNdHFVaEE3N0VOcGtiRWhnWUt5SXVWTDRadlR6N2lCSVBoRGdwVzIwYUlSVGpDc0ROSWlacDB0VWc2QVVqUkVYMUdZNU0zVlFaNUhTUnV2ZDJzL0pPSmZ3bjdmSW05VXZMV2hNR2RBWWFsbUxBSWd4cW03My9IY1piV0NacS9kN0YxdGk3WmVxenNya2tWK3JnajV2Mm5MODc3UE5RVVp3bTN4dDhKMW1pWWlxSEpJVzRRdE5JcTA0TVdPOUZWOWZyNEhFMFF6ZTd2U0NiajdZNHozb3ZqNHBabkQyUlVFY2FpWU55ZXhZUXcyd0taMG54c2t5OTNZNTlZTElERWJDV2R6eXFjcVdaVjRic0luV1pjU1RuTTEra2tUb1dCYk1ndzNoU2kvbHFYeVpVQktkb1cyMkdTSjFCNWo1QU5SdGkya0pNNlliVWxBbU9wdkdoTXNNT0VwUitLcWhEWWpPQzhUV01tOS9PT1VEYnZidzBmTDdGRHN1NzRTVzhlYXFad0QxMHJKZnV3Y0JmWEd6WUZOUUZaY0hmYnFoeDM0enltM3ZKYVRTdTFuZEc3dVRYMHdUNXVBTWtXRDN3Zlhsb0FROXo4anpWa1ZiaFVGS1BXc3NnWGVyQndUNDRjMUlmWmQ2N2h2N0g1ckYwaTNSU0RkcENMRldPSHZTOStuQTIzalQ2c0dBMkFnTTFJQVd3NkVzWXlEbVladHpuOXJXK3l3aXViMW53bFB5RlA1M3Z5SjhsSXdFdS8wSWcxb1BFeGdxblU1OUwzTEpOSmRoNnl2TGF3NU5UU3NQN0dVeFJPMkc5ejhOZlJEdlB2VXM2clRSVisrNDVpK1l4aUlHWUpVOGNpeEl4ZVF3SjBOQ1J3cGEveXAwdytwekcwZ2ZGbnZwRzduY2JwRWJPNi9NOEJsaCt2cjJUSHROek5zMnBBNjBDUTZxaHZoTDBxZTNWS0VmVFpNODNsd2JpWE9mMGptcEpYcU5YNDZ6VFZvRTJGbTdjUEgrdDFqV2ttTDJSWEIzTWtkdWtVeks3Y09na1p6OE1xZVQwSVN3K3RjNno5UHRibzV3VXVYbGJwZ3hxaHFaV0pjNHF6YWI4bmpVRzFDNUNiZ1dWRCtobHNVVlpRaVVEWjlRWHlKbUE5SmlMZzNWMEtuNGY2WVdESGZEWE5EdnlSbVB4UXgvZ21qU2pHc2RNb0VSMFM1OENxS01FTExyandnNHhHTzVGU2Q4ck04ank1RDlpWDJnYWZoOG1yNDVIRGJZc2xHZEY2d3UxMS9oRTJLRDBDbzRmbTdCMis5Q3dtc1daMXg2UlFmT21LYzZzOG5CQ1dxeWRPb2VIRFU0cCtRWERBVDVwTVBVOU1JRFJlVlVxT0JGS2o0WHRpRGJYQ0VGc05rV0NUc0FDbFRjTUQra0crUWkra3h3Mnl3bEplOGVQZ1NpdS8wdVZqaENJUElSNGFwbGR6bDJ1dENJT1BiYjREUUd6NndBZHVQa0FzbC9pSjJmUXlFZ2lFR05CYm5FWk9tZHVDVkppeHNEWlRtZkQ4bnVjTUpkNGg5b3VoaEtBZlFYMks2TCtWVTdsQktCYkE4TjF5dTZ3WlJuZm50VWw0aE9jc0NGOTlCUllWdG9NTjY3dFRUWVg0ZkpNUTFNbVhnbmI4NXB4ZnlwMHRrRGJRQTZDdUc5N0ZlZXkzWWRMRlBhUDFBNzJXWEE5bitVLzQzZnZoaDRXNWlkM29iSUppaFNBMUFvUFA2Wk9Qd3B4RGQzSUhlL2c4ZzUwSWxXOWsyZ3ByTjQ0VCtjREp2bkJENlhQNEx2SEJ3NEhPNlVHcnc5U3R3dmFYdVVmTkdTNk9nemZ1NTRjVVhNazZRQitBKzRrbFBTVS8wQ1dWYmNxWm9xc0FWQ0hOeFlRQ0d5c2tTY3hGRTNUbTNqT3pGWVNueWlZSTBza1oyb1E3bHEvZ3YyV09MZ0VVNzY0dzlCMXR4aDJnSTdhSDQ2Und4S1E2c0pBVzI2aERnZzF4YjRMenNqeENYMXVrdGZDeVVSdmMwTEw4UnE4OG5RZ21FNnc0YzU5Z1V0c1ROWkRQWGZiUHZqdU4zTi9FOTNrbWUzSEp1Rm9GNFRRWmdwNjMzOUdxbTNtdkN1aXdUb2hTM0NBOUxtUW1vS1RKdzVDQ1E4Zit6Tm5pYlRvZmQ4dDhHZGJzNEwxL3kwNHdadTJ6SGNCQWN0dzBYU0lsaU1BOVJiTm82b25ocDllM2gwZEN5NlJQOSt1WFhtYXROck9qN0kvVGZMVldnaG5lcmJYdVN0UjlndU1ReWttUWJnRkF1ZmJhZjFiUVhjWkFEckQxOWpOZFVJMTREWms3MGx1TDVvWkxPajFTQ1NtTEt0S3AzUGM1VThiVXlQNUswNTRaaEFSbjhPQ1ZmQzJsSjBYWHZQS1hESXhZZUlMbzU5SVJ6aXRwMjY0K2lnOE1VN2NqVmFZVWYyN05oRG55SlhpYWNDQzJrSUphYSt4Q2p1dFpUeXRwMGVob2FYbGhpTDFEUHpLWmgzSS90UmZ5aDVtQkw3dzd5NzdReXN4SFlyL0Q5N1o2UlRUQ29EZ0hZR2RVM3dLYmI0VERVcUY1Nis4NzA1eEVGSldxcGNjUzZ3R05yVVJnSHVDanlvVjFXMmtHK2psbGZMZXllZFFsbDM3UmFsQkg0Mzc4VWd3eDZYUmRldTMxa1hsSFQ0VXB5R0ovMjRrVVNHT011S1IyUTNlOUdmOHNySXEwN2lZSEg0VTlZUFh0a0Z5YnkrTi9IQXJXdHpYeFZwc1I2VVc2TW5GNHJSdnJaSTBXbUtjRlBxRUdWaW8yNG9QVitnS1UyY2hTSnAyRUlvdkZXRTUxM2haVTIvaU1vaFlCbEhqRDFnRCtyeDlvbjNYSlUyVnBMYTJmK3pTUjhnbW5VM2xTblFIUElXMWFnVnEyTENPdnlRNlI0TkpGWERoL3hEWWpnVjlsL1BxODczc3NRVXQrOUJSWWtXYmpJYmJuWE5qVTl2eW1TVVZzeVQvRHk2NmVVcjlBRDBTb0RZVkpVVzJLYzJadml5WlhVWm5YV1BHSXNmbnNoK3JYaDUyYnp2M0NFNjlDTkJDSW52T01zQzhjUmZ6eU90M1EyQ2d0Qm93R2d3QmVFYXJwUXRPTWo3SE9qRkMzeXo2Sk1TUHJDaUFwaDlNVXdCWXdrbDNGemx1V3hQaUxyd1ZYUVFmUm9vVWEzWkM1cjZpSXpOWWxlZnN3SkRHaUlNMW01ejJNdmJYRVdieWE2RXRBVi9ET2dKa21ZNk9QbFJsbVZOUENBeFJnRnRFelVoTGQydS8waEM1eGh6WVZ0WFV2ZTNFbU95NE1WOElXR09sRXgwS1luMjY5NmtuUVg4K2ZJV3VUUlZmaVQvQ3RXZDEyUW1USE5Cd0svdzVkdlIrWmV5WjZTWHBRbGlQaTkrRFFJQlM4Ry9iK1YwYVlZZW5tRytQNEhEN2hOZ3lZOEZ0WmZLb3ppeU5CazhjbnJzNDdXNWNBRnhheUZrMlZzcEJwV1lSVSthRWljTWJDNE1hcVNleG9YT2RBd2x4dGZqWVNkTVFxbndZS000L0tlbWFDVHBSWkgyWGdCNFpBOFVLb1d6bE9icEVoQUMySlpldjBRRUxKc2NkWGZSbndBcVNPYW8vSEYzVXNGam1XTlJqa05XemQ2dU9ETGRxTzYxeTJYSTFndVI1QjhoeWNBc3JhWVlBdWkySWdHQUNoaVp2U094NmtLekNNSXhTUXdFb0YvRXYrSEpOMXF3NXdpMzZ3bW1lWVhUeVF2MHduODBzMFdNYlp2K0ZFNnhyTHRUbmpaNHhVMnJGdUlzOS9SRlhFUTZXYWJiZk1Qak9MZ1c3UlFTdDI3WTY3dHJBRHFVREJyM2ZzZnJKa2N6bWZmdVJPcTkxd0JLVXVQTThoc0FNeGZxUVZkN0pNaDlpZGx0VFRtdGlXOGhNMGtyZ1JDdnhPdjN4UW9xa2IvaEF0ekNOdDVnM1ZHdGVqSmNuYlZHeUJjdm1tVEQyV1RKT3F5b1NLQjl5VGl2Y2Q5ck1aOXRsWWhjcWpzOXBrUnFPTUx3L1dLWklUWCtHeTZWVGo5WTVhL1NpUndaSEM5ellVdjBmWWpzZDkvb3FaWlF3T05FeUtzMTc5clUyM3pNZmcrVEtQem9jMlZuNDVOSndyMlFHUUpabm5QbUJIdUFSZjBlTXR0UmNFbkhkT0VpMW9YM3BFdFUrMGhhMmliRW9tSzJyN0h5UnVmY0w0MmRLbURUaDY2cjlwbWs5ME1idEpjVkx3NlI4WHR0cHFhMzl3SCtER3hET28va1hpNTlZQzVMMGdtQ3Bja1FGMUFNV2R0Y0VRZHp0am5tQmhPMUFUc3ZPTVoyNzIyN25OK3VnSFk1ejE0ZnQ3NXoxdFlrdXJJc1FqbXh2VjJIdHpiekVJSmxXdTZOdG9QUUZMRmhtZE5lRDc5UUtaMGE1ekNFcDA0WEMzZ0VPR25XMEQveGpoaFYwV0NiaE95MTNhRlpmampjQ3ZFaWtBbEJGV1oyWE9yM3NNRkZESEZtbEUvbVFNN2k4VTFrb242TThNOTBRMGZYdlEwRE9KejZkTkQ2WXBtWVJ0N0NXUlNWSmFoK1ovaTJvaUN1L21vSTkzZVBxT1c2dzZsUCtBakMvUW15TTA2WFFuZU9QbVFTdFFjOEdxTWJSd21PeUlLSk5NNmZzbnNCd0FjOU0xNlNVTFNWRnR2SzJkdGVTaDVEbmtSaXdKRDlaNjJBMG5WN21kUDNhT1BURkhWQWMwajl6YXJxUkpFRnpKRDdoK1ZmaUs0RCs4cnRkUGNrcHlWbWJiTFQ5YWNuVitHOFdsNXhtNkUwTmtWeTZJTHhhUzRKbUx5ank1TFpZSk42c1dYODF2Z3hnYUZqOHdrZzU2RHRyM0JlaC9IZnpSVGZBczU4eWp4dkVIYWNNTjMvODZ0SWpCMHROZWVadDFxN1krT2xGbFV4bC9NZi9PSHVuL1lMSnQzeUMwNzlZYW5EUnlGWWdsdnVQK3VCQ3Q1OHlPNnU0WldRaDhzcUpFMEhjaUZIdFR1Qzk2anA4TzR0YTR1bU55dUJMamcwTkF3QVpjZ3lqbEVUc0NZemU0Q0JMbTFzdVJObkY5eURFQkNkdXZJdEE2RzZEemI2R2hzZmliZ0x0WXAvemwvcVhtUXJmQUh2NnB4ZzNHOHZtYXFkQ0pSdDRnY1JrVmF5UGpJSmtQS2d3Uzh6enlLQUd4WHNORm1vRUxWd0xjQ3I2YUpIdkVZNTJqaVlvWis4azl6YlVqRGVFQ3o0ZkMvdkhIQXRBeWFMTVlzN0lHbDZqQll0ZDZUbGs3eTdscitwTi93OWRsVE5OdFJmWjc0OUJqd2dBUmd1bk0yN3BZUDlUS0k5VlZWc3dISVRaWTVNc0VLYmNIdGNqSW5PNng0djZETG53Mmh2eGFjRFExRldBUnJUMG9qcjVNR0VvYUt6MFA4SXd4WkdIQzdWZHZZTDBHVnF1c3FLcFdET2E2cUZjaVl2cHNnMVk3VG96YVNmZmYvWVdxK1R2b3ZKRFJXWWMxek1WcHlZbjM5QWZzNTcvS0xWcTVsVHFESVRvKzRoNElKSkhyRWExeUxmaHF2dzNNYWdNaWZoOWU0SVRldnc2OWNxM0Q2UE9MelN0MHU5cmZaL0tjMlRiMjYvZzFOMzhjcFVWUU1aZEhvL1FLalJtZk1ZNC9ucTBNRlQrU0g1VUdzOHpMUHVrT21UaHZnMVZQTHcyWFNFV0dMUVpyT2RIYlZzZWVwcm1VZEtTL3pLS0hOejB5Y3Yxa0dWUzNneEN1a1p2OVRVUlJQS0RXSGpLNGFxYlM5REVUc2w0UFA4bkMrUDZRY2thUENGME1qNld0TnpRdDM1WGIvalRIRVN2ano3c0RHWGY2V01YZExRRUxNdC9Rd2xUOUc1dGZoWjk2SldPK2Judk5OUTFER29LZjZwRllOWGZDRGR5cnIzS2NyQ1pRVWlGK0lWNS9PYi9PSGxMdjBjZmhldG9BeVBtOHlGeklGUFcyQXpkbDE4ZlV6VzVrZCttYUZKWURKSEpTd0ZRZWw3aERpcHlxMjg0YmE3eWw0Nk55NWI5ZDVDOGRmQ1pnYjhxNVgxNUhyWTFOOStvQ2JUdXhEdkJnelo4UU9kNmU5QWpvSExWdHdTUDRmOVExaVNCY3FtWXJJM083S293ekcwK0g1ZXVsSXE3djNuU0hoMWVwYzBVMFVBOWw1b3k1RGFoWDdCYlJZUURtUTY1aC9VUUszUGROTUN0ejI3MytwZGt3bmEwTXgvd3R4OW9hSjFQR29NeEluSGRYR3lCMlVrMytLdjVsMWdaYWY0OWVRc1BENGFIME5WYU11eDd0RmNFcVR2bUFBdExqdERlTVJvdzdJd3RsWUZXSUtENUdvNmdKamF0bWRTRVlwV0oxRHE5ekJoRHNZMTFmVW93Umw4QzZMdm0zeDNCWm53TlBTSUhQUy9Jb2xtdGNnaFU1VmRDZWQ0Wjd5dVFrQ25KcWJCQXVJd01oV1J0L1pNa0JtWDVDVk9naWtiT2FBbWFnZWxscUJVdVp3VzVNQWFyclFqTHRTQWRSVGwxam9zL09iV2VVL0ZwZWQvOWd2Z1pobmlzcWt3YnpsZ1hGY2RBV1lBeCtiS1dvbWo5SEkzUFROZTExYzYvRWp6cU1VWHpPTVlxWHlRZWxWdWRjMzhpeUtOa09wTFZMM1lTcTMrNy9scHgzaTdqVVRYZ1JDWEhjTXM0dk56dFBzSTlzRG5xSWpaS1pIM25hM0tEU084Qm0yUk9JNXZ6aGJnZUlhVDlrZE5ndjdTME5TQTZab2xmcUg5NjF5LzB0L3p4OHZxMGIySHJ2T3JsWXFjajdPRFk0cnNLUVVya1MrUXRXYTJRSmhkcFdlWDA0dWlUWW1OYStJaHU4T1plMkdVL3Vsa0E0eks3enc5MmdKU3kwMjZMSVpvcUpaVWZTVGV5Y3lqelpOMjFtNCtZTnNub3BmNlVCNnc3Rk1xUkxoa0VQdC9zaDFrQ21OK3VnU1psd3dvUmRFMitwVnFOZ0RMdi9lay9GMDg4TGpWQ0xzc3duT1E2U0JPdDU4aHlVakdwbHVlRTNNMUVsZU9CWUU0ZlRxcm5UVnA1aVBGeGxEU3RWMjJtaDJoSVk5RmlSSWxvZFl2M2E3VERqZ2VGYlAxVlZ1dlg5SE1RdkRJNVU4ZWVOUWkzNGlNd1VmOHUvMHdnYVQ3b1pyY3ZIbXVsQ05ybTFkRWVHUXhwVjFPMUhZTko2VGFMN0JpS1BUblBtNW5NekxiV3RBZmVvWm8xRXlhZU5lM1BsY24zb0xlclJlUExWbzFKaDQvVFpYM3hESWhPdjIzQTgwcVpVMDlLTS96K00vNzI4TzdsT3NtR3IwSlF1Ky9zYlBnM1pLcXl5dWlWam5qaE5uWFBDcW0xVUZkbjE2WUF0S252UllxVlFLSk1DdlRPWXFNeWdmVW53TlVzaXN5STJiNGRCUWd1cjZ4WG1HbTRrQ2VodlhqeWlvc2lBUmVVdnZEQ0pkc01UeTVjaytXa24ydVRhcGRsWU1CQVVlRkd6c0ZkejJoSjJiZVEvZzAwZWsrdFRsV2JHM0N5R2VDL1p2RlBXdjkzRGNMbmtSL3pvc0xvb2lkR3EwcmhBd1ZwbThnbTNoZmh6VURFNzRSVzRWa1dsMlUzRyszUU5lMEdySlRFVnlFVEhuRmhJMitRRzF4UDdqOHFkdW5FS1YzcFJGZVZZVnlHNFUwd2w1di9YMUVPbGpLOEtWcVpQQTFIWmkwbWdqYlpJUlFUdHY5OGdhdSs4TGplNisvRi9zcHorTTMzTWdDLzhnK3UrQkxuSmZQUGhSNk9RWkN6bytJSEd1STNURmx6REpMMUpHcmU4SmlTWW9lemczaXhiZFRHSkUrWk03UkJYVkNSd253UmE4LzN1b3dVSnk2RlhBdkxqK0UzYWQ4RWc3ZjJaeXd3RG9VbkJ6UExhNUVOMHEvemtLdjRwUVoremhtZG9TSTlTQTFNdVNaL0J1eHpmcWhaL3Y2TjlkelptdzMzRHczVWgxd08zNC9aNWs2WHE1NWNibEZWVFlNdm1xQWYyU0hpNXFmZDdGZmtEczY0RWFJQmU5TlduOU1aZGY3RmdLY3lRYzNKSGtuRnFEUjd6QlRPMnBIbFRzMzJ5WFQyOUZiZWFQWjJSRGovRUNTZXdwTmJUYWVuQUhyMS93dWRVSzFKM1lDMXZxVzY4ZE54cU4weDEzZmthVXE3THkvUVRLRkZoa1g2cm5VSzdEOTBQa2xwYmZFWTlRTjVBNTVRYk1jaXlvTFpmbUlBSnNkY2hTVjkrSXEzU2ZVdytaRmJkd2VOUGYyRUVPcXErcmNSSklxZ3FtbjY3WTNLWlF5MWZvRHhLQkpsbFhWWGpucE5tWFlqQy9sMktYTm9yQ1AxSEU2U1hlZzFIYVpYRHFOZ00zQWp6dVJPSDNTM05xRVFzREdDVHV2Vlk1akpSZ2wwVWJIaEx5eE9pVFNFaTY1OEplakxlTGZ5QWU2WTZCK3NUTk5ZQ1ZKT01mbVBxR2cyTitOc2RxTHJPTERraVBobEpvbkY3Y1Nxa1BQRTVhK3RXQS9CdmdmYjlJdGxva2xRWTdKTVZWd25IUTBjUFNoZlk4R3o4bHpqMkZnazZ3bFBLVzg1Vjk2R2FqcGx4bkovckQwTlVFZk8rL0lmNkZCcXNBZnhNT1hGWm1acCtwS3lvV1Y5RjZKMTQ4V1Y2U2pXR1g2Vnh4WVFxK0VRc0xQbDJWMGNGdkorK2QyRmE3WG5VaVFPeGlJT3A5aGVQOGVOUytFWlgzS1JPU0p4blJ3bGd4VGRIMWYxNHlPYUF6RDFPUVIrYnJqTC9vMEQ1bU9KQndmTnlRNVpTMzlvV0RhcytBUzhacmtrSVlnWVpHUHlMMGF4T0RENnVYZHhWTTlJWUhQc2lpaTZ6SFJhYTk5NWdqdXBKeEgvSGE4M01ob01UWTdScFpaVEN3NGxDQklCQnJKWW9GNnRWVzROL1dETVlOak54QXA5SVJaR0FKUUZ6Z0NRcnhVckFQSnBwZWxnT05hSUVhN29WVU5JQmtlYmE1NWtEaUJXbWJZR21QaE45cithZjRsbGZ2RGxmNVh3dDZOOHJLTmg5YjViRkRuczhGc203N05zbEI2dCt4RzVkQjVzeFE4RW9JKzVxZ1FqM1lwaTRqMG0vSmwvQklqaDEzRlN1enM0YmY4M0hDdUVyalp0VWxiWENCZlVaV21OQTFhQ0hscmRsSGN3WHUwOCthTjhwcUlGelVScUpycDVySktmak1WYTI0RVoyNnYxSjNOa1V6VHM5TFh0dm9pUzhSTk0vdDh6UHRSRmd3YkpDMWJLWmRtWkNCL1k1U1dFaFpMUGZMZFkxVHlrM2NkeENLZWRkUHZxZGc5MDZWb3NkT2gvMFowcGVSL3JMa3hTL2FSaGpZMTc5b3Ywa2s3a0UvQVAvQ0pYc1cyWnpES2NoM1dEck8vS29kU0t2STFFeFZhblBualR0aThqZDRyeW8xSEZVczJLN2pNT2dUVDEvTU9XWm8vbVBCeFQyVnpoaSt1d0RRUGsyd0tuK0tZQTRCSFhFU1VRQXpraVQxV0tIVW1RMTdENHIrYndZWVVOcWVZNk1xVFlXYWhoNlA4V3FKaThyOStUQTdIMWF2VUNHSHoyM3o5SnEvYThZOHVwK0FHNUkzckIwN0l0dTdKUjYvZ0R6dStaTDBlV0p3QjJuZUhBRG8wb2JWQ3BRNkZ0N09TWSt6UzltK1YrVDM3bW1CdVFSTExSVGZlNFIvQlVKbWdxa2dvWmdOK3BFV3R2QmdncHBUN1IyTVJYMEN1OUszb0JXNDFDalAzMzhmWlJvaEFLY2JubmJJWEVBVmNpbzBGdmlySENKc1ZLNTZNU0UrSHJ3Uk1PcG5ndzMxS2ErZHowdFR0OVQxaFRjRytVdFIrV2NZWWVadW5uSi9WSVUzUUdRM1hnQlY4dEliaE9LQXFZZForVlg2U0Z0cHNsUG10YjhaMW12NHRJS3JPYm5zcFVJajQ1SWtxQ3V0U0doL2lJcC9LbkVZeWE4S1NrN29BZ25pZFV6SmJHVi9qOGtRRWNxWWNwWGZXWm1IVEpMZ2g5R3orWm1NR0owQ3B2VkJBY1lXbmlqcit2WXdZUCt3MXYrKzJZOFA1SjV3YXFoMDBIV3JRbHdQRlRKVnFhd1FlZEFObUxRZjd0azkxTDVielZxNjRvMXhqdjVPcnF6MWlIVHhpQWUvRVo3RFNaVHRldmdYSWFXcHZCS0tSeWNQM0hTeS9jUjdHcjhrbTlRaXllNkMrYlZDcTM4Qis1ekxPYjZpOGdNK3JYWkdDRnc0MkVNTTZLRnRicFZnV29uRGVxclpaeU9aeTZXYWZaUyswSy9rZXdWN3BpV3hudzN5MEhTbVFtOFA3enEwVnM3cUpjT0J4Lzg4VWdUTnJwbE9QeWZaUXJFd3EwaFZ4L25UdUU1eUd2ZTc4SFd0aFhrRWlSeHhKQ1hDS1gvcXZvV3p4eVNYZEVQMWl5WWJHa2JtbmJibE8rWDl6N0poNFZPOWJJSlVUcHJWOTJab2Qrdi9Uc2hsQmZhREpncEVyVm16N2RKVXlhVTNuK0pXNmxpS2RWWGlOVG1iMWZkdDZYQ3liZTYyWi9MNkxVQlhPcURQR01SVk15bkw4YzVWT0tOOFhzQkFqQTI2MHAyeEhQOHJzSlU0QlQxc3RVL0VTTVlYdUZxdXFpYWtUT3Vab2ZqSytUbWlMekdMZFVCcUZaOEZIYzJGZldqc1BNR2NTbWFWNzhYK3pKNG9yTDB1MnhFdkZIUGxzWjVhbFpjaW9KTGZyWjA5SlMvUTExZFpjdkVTbUVxd2FnMDRVOGc5clRodjlCUUNER1BhQmVDR1NPd0c5RWN6SGVocmVPZUdHWVE1bG9iL3lqV3JPWS9uT2wyMUg3cnBkd05FZzQ2Y1hpc0pVbGdkSlpBWEhlcEZMSUw4bnpLRTNGY3grQTh0ODdFZzNzVzdVcmFlalRTOWtjQW05YVliL2xlTUJqNE5nQXRXK1pEbzMzS29mdGRUcEpuUWtUaXpBKzRPNHBPMUJYVjNpZENXRHg3YkdvaGhMV3Y0OWovenNtQXVVWmdiOWN5VkozV0M5UDEyVURsaVJtSEJwaEtZM1Zoa1VLK0htWE0xMitLdEY4NytPWDc3VFBXdU5RTFZYWkNvWWtnUGlKVEZnRE95ZmY4ejVGNUtFVUdkMXdEMHYxZkhEK3lYWWxvU0tCellHUGNQS3NTQ2hiakFQN1RTa2ZmMzlOSStWalZzaWZGQkVvQ1ZIT2lBQ0c2REZOOGIyRlFkMUd6V1phdUJnRTgxRHVFYjExamtTbHFnQlVZMGhuekxTQjh2VmxUQTRmZjQ1U0NtUXNtU0JlUUNVY0ZCaVhpWmV6bGdINjVzNzhFbHY1S2g2cHY5S3ljTUNacFlESS9yZXQwN0N6ekxuWS9GODRmT1puVzJGVWNkSG1PcWhxR1pVczZrWUxObjFKaTVmU3hoWjRpSG93RjJjTDgzZFk1R3BGWG5ySS9GUDF5M0NxL2QwdU56MWRJZ1FFczBxdEZrWjk2Wk9XWWZzNTE2UExzVjcwYk5nYWVOSVB6ZytsQkMvemVMTFFZWWFsWVZJQ1piUmxSQTlqZk5IQUZqekVDZkVRTXlYNVh2NWMzSWx1MmhvaHNZQjJMbHlSa3czVURMcHZuUnpRckUyZFVmRW9DcVFpcUV2c0M5UjdYaUhNaVRMM0tOanNNRjlCY1dJVlNnL2ZKS0x4UTg2RTdCbnBHVm4rY1ZNRXpMZ0xHZjg2cms4Y0RhdVNkR3N0c0F1ei9WcG41U2Zqdi84UUZqK2FqaU9icXZpZkRkUTNPZUdYa1JBTGhOZTRRSkdMa1V1SmNOeDF0S2Erb1hXem1TaUVOaUJoQUs3TFBlYnMwaExvSGdmUXdKdUloazJmb2tVQUE2eHdVaCtIT3JGdDd2Y3JFUElmNEJtaXNkNzhTdkRRWTN1T0lqamxLNlh5TUdxN3V6K2lqQTB4YWNWeDZHTFczZnJKSVZRQWZvWExnUDJ5bTllSXZDci9hVG5SQ3BqTW1LNGQ3VkhDMHV6K0dBc1l1SElLaVY2ME05d0hla2VGMFVhRk1HZ3BzNlNrUkg4UURJallyMmljN1o1c1lvUkRiQUpmZDROaEd4ZzZzbTc3Mk1sZlQrdEh5eEtMTjB6SjAyb0cwSEh6UjF6WnJkaVEvMFVjNUlkeWlvbURwZjA5M0IrUmRSdzBUdHNOenRyT2p3d2hHeTEzNDFvblVQa2x0TFRPQXlYTEt0L3IyVFJtYnVraHRGWFBCM0NiazBZUlhlWWUycW10UTBpQ1N0OFZ3RkdwQ3FwbUNyTlVXaWh0WGdncWtKMnVDNmQwOFdmUzR2UWxaSDRySnBOb3Y4NE8rWStSTnZJbFFkSjBCTk14b1dUdGt0S1EvbS80bUwyNFQ2STZSWnVPTTBYTTY1RmhSaXdDdXRVeUhZbVU4bkVmSFM3a1JkSk5tUENBU0d6UUd1WTlVbm1ZWVpqV3cySVFnY2FmQ3RITytiOHZzNjNiVDNKWlQ3SXVaVmJJMG5aTUo0QlFmVVVyY3V5eVU4eWw1TUVTOUdwQ2RTdXk3Y09XUnIzelpRTzQweVl1WFdEeWVJRkI1SnlJWVlBNjdQM2NLQ28rcVF6VVhuby83eklNTU1vdzdrZW1GYm5aM2xEWlk4bEZ6OGlPUEkySGVkUElPNVRlV24rSmwvN1RHN2dwOTR2bElMUmNMUkI3QTIyWTM0dWZKM2NOZzgyZ0dzOUYwTXMxMlVvZmlNcG9nanZ2d0F2bjRoQ0RyN1Q3OUlaemlxMGtZRitkUHRQVnRVZ3dFU3dBSFIwY2JJMER1M1VzUFBYeTFGdzNIMHBDNU40U2U0ZU5KYkhzVTFJMEFrazJnM29WZm4rUkZZemVPSWpYMEh3aU5SQmpDSThGUWtZZ0ZJUC9aWjdDMDdjU1VFVjBOajhicFJrL1Z4VGVzRTcrR0JwNmQwRy81WHU0R3hNa3FtSU9UcnRNVmlLSmFnOTdpZEVoUldzS1BJL0k2UVVQb0dnQWZRZXVVVkkwQXlaTGpEL2xkc0t2NUNVQmc5UlJQc2RLNk1Nb1l3aFNHaWJndTljdWhZK2FKcXB1MEtMc0YzSWFRWlE5NG4wczY0VmRtVWQ3dmRYSHB3cG0zY0dueVhGeWFaaHE1QUw2QmRiRmp1UzIvMkJGOEVNVXd6aW5wOW83aFdOdE1mNHlCNmZudjlqSnQ0d3hZS0p1REc1WnN1Rk03SXlvSDgvVTNhWm5uNWUrbVdKM2dqTk1Rdk92V0lmWVMwcXJSQlZVNWx1YUMwZFc5NFlRVlNuYVZHVU5VY2VJckRpUURQSUlRRGxzcFk3YnVBcXdaWk5iTnNDMnhFQjVrM0dlZEhzczZqekNnT1dlajFIbmdoQ1JlV1dvYzZpYkpyV010TW1FMDVuL1pHNzgwU0NsYjZIZWd3aVBSSmJMYlpaMCswMXFJOHhFS0E3VU1nZE96Q3I0eTArZVk4aEJmRmhZWUphOWJxWVMyd2RoZkVFVjZDWlV2Vyt3SGIwc05CYlQybFBRY1BPQ3hWUHFFKzg2d3RRNElTOXZybmdadzdiYkExLzZmVEVpMFQ5elI4NkhWcDkwd3F1d2p0cmJZOWRxZ1MwSFkyM0l1dFJLUFB2RG9leWtZSlNMQ29wVVpoWlJhRExMajhoTlV6bHFUMkcvWnNxWDN5ZEZDQ3lxbG1heVBWWjRlWGx3RHdPVFUvT3JJN0lsSWFSaFRPZDJTVGhDRTQwRGs5RDVrdlcvMnB0MHYwWXhLYlF3cUJMc1JxeW8xelpjemNaV2phNUNxYWNjUUZ6N3F1eERuTGFZL1owSEJwVngxSnlVYlJFUkljK0tvYzRxanAycUNuWTRGWUhoaUVPTHZZUVBtT1QrZGJ1QzJDcG5Wd2JDQ3ZLVWh1RjB4MWZRbm44ek5yek1GM09rY2xickd1OGRwYUZpRzdhTUk1bmVPUWdmTnZVOFIyYllDaVpJci83VURId3ZkQys2VXFPWDRha3pIaWpYekVWNFFWZVgrTEJJcnhKZzBqOG8xZnFjRFgzQTF6Qkp5U1llRjR3VWlJSWFhNDNXVy9HbnM5cVNMRENVYmxyZG9RVjNNOXJlSzlBV3dYbjhlK3B5OEVXYVFoTUxUaVFieXY5SDhLd0ZsU2FSRVhNdjlmcXVMUDk1OUtDME5TTkhiOVQ3djA1V3RxMUtNZWhaZWdpcGR1eHU5eGtpYkVQOUtsK3hVbUlpWXlyTlVyWTVqbHlKdFBTMWR3VDc5MEhydjgvblM4bDVWWjZxVnRHMnJCLzBxdHVRWjd6OHFlV2NLelhDRjRObXBnNEN1K1dzSU1ZYy9pYkVkK0NHbUVHQklpZ0k4Z1V5L3JxWFY0dkVnaEJQaTI1eUZWb1ZTdFVLdFcybFZFZFNUaDROSS85R2czM2NWRFBxWmxqZUdtYWtRU1RNMXBqdFFValZYdXZCUmFjRitVMEpyemtodzR4QjlzaWZZUWNXeG0wOXViWXc3SVVwVEk0aDNHZmhtNkRoc2w0YmFyUlUxRm5oQUtDZjNpSkIrWFFPZTR4YVVnVTRGT1VaU0JUTzVsb29zeUdQOTNQdlNaTVAraEhZUTh0aTNSdkhmWVVqVDFNZDM5NDJvZTRIdXNpTDcxRE03dG84dWVSRjFJci9CQXpIRkJNOHc5VzJTeVFUemQyc1JwTml1ZlFIeGhycW5aMGxPWTl2NnZBd00zWW5jUUd5V3ZJTkRmOXBEQVpqUFZuNThOU0Q0NVVBUU1MVmNHc3NaNDllQU1YelpaZGwwY0xVeW5MdXJqQ0F0TlpEWWRpbHU4TS9OQVFkSjJXZmllTFY2S3k5Z3NUaXQ3bGNRS0RFeUhFOGlXNnkxbjYzaUlhODFucXJwM2dhc1ViOEFJZDJma1hHWkNUWUg2MGo0ZFVaRnFia1ZFMmd0azZoOWkyc2NvOEpJUkhJNVc1a3lxaEVqUmZuZEg2ZEJRU2F3MzYxQTJ0VGd4VG00WjhOdy9wVldVdHU1VHh4VkZPZ21UZWJLQmZkZEFKY0JXelkrZEd2NXhRSlRtVUUwc2xIQUpQRXVaRGM5QnpSVXh2bjRiR3gzblN0TW9BSTUyWVdzQ3hCRzFjS1FiaGtQWWtTSFN3ODdHcTRwbktOZFRwUGZqKzhHbkNPVUtnd3JGSXMzS2NqM1RWTmtKbnhFVFg2a0xoaDNpcmJtdnZZeWJwdHdRM0ZxMUZ1cXRiZWFlZ2Q0ZGFESWo4NHhlVUg5R1NsRXV4S1pvWm10eDhMT3N0YjFZMDZFdG41SDNFRTJZR1BKV1gyQXRMcVFjNWJHenJnV1lwQ3BNd1U1K2d4azBYZk5TWDVTbWwyTmxlQWZjQ3AwZGwyZytFVnA4dGhIbHZXbVA4dFBqSjJIY2xhME9CcW01dTlIcUgwcDhNem5vODRsNzBlZW01QThxUzRVYTRjWmxiMFk1TFBLd1RCb3Z5VmUrUWo3MFdmTlF1SXVBMjhFSzJQZ0JJbjVURzlFUTk4WTFscXY5OHpMVFUwNEsvQ3NHdVVmVk1tajZibmhEVTVuby9Od2crbmRKSngwc0ZMS1NEL05QU1FvaStodW1MRnVqYUIreEVJWTlDa2ZXMDAvZWROSHQ3WklvNUd3c2dOMjVKMUhPTVYvaDBzbzZ6UVM5VjFVSFVPdzkvZmlLWE5Wd3VoUmhxRlZHeUx0RDh6NFdDVHhjbHJ3U1lNMU96b2p6cTA3SGs1eVcrc3IyRUgyRDYyWW4zeHloWXVNTHIyTjlEOTJQdUkyb29jMzhkSVZtTnBybkNTb1c2VitpZTNZbTY4bTB0UUdoblNnbW03T1ZZN09Fc1RWSGx0WmFJWm83cHdRV2t0cWJvUGxuYUR3Z3Z1R0ZCb0pWMmVZb1hQOHRiQWswT1FKNFFLRzFVZE5NcHI2ZHhRbTErQmdGTnZQdGIxSm9keUFkdjRITU9TbGRYRW81dS9OTmllNWlZYjFWQlFibEE1QTFWN2xoZUQ3bXBuZVdxOTB2cFRydHBDYUU2MFE1NFEzcFZPTFRVU0FrR2hOYzVDVlpFREZwWjNVSG5NNTB1U0QyWDErdklJQ3YyU2N5ZUx4c1RTNTZkVGJBcmxHdk5heWhCL2tpNXc1WGtaWXBaTWdDWDY1NmVpL2Rhb01hV0wyTmVaUDNCWk1vMUlYVWxPNVAzb1RSOEMraDNSTmN1WnR4SVVKVW9lT3J3aXdtZlZKWGtFeEFBaWRFNU8rNUF1MHJyQ250R2pFY0hZYmovT01ETDFRYnUrV2FYVWZKbUsrTzhxRWZMb0NQZ1pFaXoxTDNDQk1sZWZ6Q2VPYmVTbGkzN3E2ZWsrQXZYcWZseElOWWVmOHV3M25UUjZDRXI2SCtsTGU1N2JsZXNxK2p6M0FkbGVvNlBCcVVQNU5LRVp0RjJKTkY4cUZxcHlXWVhacWtuaHlIVVJTOW5PMEE0c0FGTjVhWThOYXRMMWZDS01OMEdjZ2JxRnpuNW5uWnlZT1psdmZ5RFVGUmplandEaytVQUhPTEdTZDRXWk03d3FHN2RwTmxVbE1kQ2RMN2xYWi9MSGVuWitMN29WbUhWRGJ2eTEyZW02VkhsWTFvZHNDRlRDeExMTlhGR01HS3oyYWxlV1A2UlUyZkVnYnJRM0RKSEZHNjZQQnRuQkhmQ2o3M3ZJOHQ4OFJNV1E0YTJhU1JoS00rZng5WGRsRHpXQXRNbmY5SGNpVkpleGdiTFNUK24zR0dFVnQ3V0FNdGRrN3hUOGNFUGRxRDl0SjdGYkgyNDZEeEl2V2VCVjRVeU94T2FuSUwybmNPano1cVNTcnQ2NGJUdE1sVEtHMjJHU3duT2VKNVpNMlJDeXA3dmY2QUhzU3VHc0NrL3pINUhGUWlnNW9CS1dKajY2N0dPdW4yVy9RRGpyeUoyRmZnaVJNOEFpTFJ0TlE3WkJZbHM0UXROUjFyTXFBZENGc2M0TG5MTk9xRlcxZGVwRU5GZ2xDZW5nTVI2MlFpUStMQ3ZaQXcwUUNQcERwcS80UGVQc0llMUhkc25sbzBKcTlITEcwbFRMT0M5SE1pOUhiNGRmdkRlSVZiUmpUVUFKa3dTeFNtUEJqKzRYMW9GczRqRUpKdnQ1RHptbG1JajVWSW9velFuK0RpZGpkaURiR2dZRjZIUitPSkdKWTJ6Q1JmQ3YxTlBjU3EvQXRpSUZkd0hQRWp1ZDV6aGYvVUJCU3VTZmp4OEZxYTdQT2FkWlpjR3RXMW9SRUtYUzFseXVZSGVWRWt5MkQydjdkcmNTK1ZDbHZjdnNNNnZVRUxJUjNaKzhRNTVCdFA1UCtuWlNnL1EyMENWRVJrZFkzQStHbktZNWtBWEFaZm1ML0ZxSzNKUGNBdGZ5QkswVGE0MDlXRlRlZGFBdHI1OTZ5cC9oK3o3NDVCVHp2dlRhWUl2eVlTd1pMbHVwa2pCMU0wUEdKRUp0RkdrNklYOFNpY2tMZmlYQ2I0QkRvakhlVktzakE5dTB5bzk3d3hzek5zWkNaNFd3eTBLeFAvU3ZycFNwSTc3NTV4OVMvREpOY05NLzJsY1Z3QUhOQUNZR0lHM1MrWlpWSm84Ym9QRVZ3eUVsSVV0QXhuODdGV29nUDhObGNzTGFLbThsaERLb2RlMndjQ083dW5LS0o1TVBRZWpKNUplaUdkTmswM3RrL21DeS9USXRpMi9jb1QrN0piY2hwL05udU5ucG9NOEdzZkxydlBBbk1JU2g3aVRnamVybm00dE9EdkgvRDBrdkdXWWRWUWFuRG1vMkFhaXF2bHg0ZlphU1ZXVkwxODZxRUdqdXIvekdENkpLQlUrWVRXelA3Vmh3eUJlbVpZTTM3Qy9IVnY3WktML29MNjRLd2JzY2hqWjlvblJENHBXK0RjN3BHaTRNSWc5VVN2azB1Z282bEltOTY1Ukdnako1bCs1SGV5OWpMSlJSdXBKS1ZtdUxMVWZub1lTR3crbFV2RU1ReCtkVDF3emc4Q2VzVEw4NjF4YmVNcS9NeE1qUGJIS1hOdXdEb2V3OWEreVg0dUJSdlc3bEhGcmkxaFFKUW5Ra0lXeElBZHRjbmtyRGV3WmliTldLbW9mclFiTmV6d09PRkpmQjh4ZTA5amRUNitlQnNpV1Y0MytCZTVYL01raDdDR0lJUXQva3Z6K0VwSGhWS2IzcDQ4c2pic1ZBcFZBbWtiLzZTN0V0NVRmZTdoN25wZkxaR24rM1M5T0JhWnhYWjhvMXY5SW1TK1NWQy9jWnh0R0RPMVN4OHhXazVJOUpiS24yZEZqY1JkNkhGc21wRnZpMnd1bit0c0NWSStGMUg3OEdYQW9ScDlVU3dIL1hXU0w1S1dXNnJxWENGMmVHZEFPMXM0d05FYTR3RHh3T3IwRDNGWlQzZytoU2p1eWZjZU9WYUgzZUV3S1czendvZE82TjU0Sk1GaXp2ekhxN2FMM1RZY1BoQ2dsZG0vQThCU2RyNjFRd0Vtc0swZnBINGtDb29VYmZsZUh2ZGZMTFkzbmVxYWFsWVBoajdOMmRad1FyZTVBT1g5dHMrMk1JN0I1YVZ2SXBiTFRKOEEyVTVMWjFqcHFWbkhQeFRVbkJ5QVF6SzRzYWthOWxZQmRlNlFGTnFmM01qcWR0SHlWQjBKbUwvUWVjeFA5SkZKYXZocHNhbHNSc1NJVWVFanlVNUQ3aW5lUXFGY2FKclUrdmZnamJ5L0x5R0tzdFFRNUdpTWlSZXZUUDNHd2xmUi9xU3NaWVJzMkFzOEdrVkYyUk1kQzRNbzRLeGxDczEvYklTTWRWQUEzTm1hUFdUOU40eTFuMkJGK0dMcHYya0Q1bVc5SUpFQkp0dFJXRlR2Tktabmg0VWlVNEZkenl1K3p5MUFGY29HYnE0QTNzQk5qODNnTGhEV2hZTVNxRHZTdXBFeUdJR3VvU210WVA4b05GKzZtOEJHdDByaWttckUwTGdBc2tTMFFYQlJWbDhpUnRPVDRnZ1lmaFR0SjBVMmRSME44UG1INm51NUJ1STVPNCtjRnBRVFBOZlhKWGZJSU1lR0paT3JNa3N1R0N2bVBEWDhhckUvYi9Dc2NRTUhLTnNBc2Fxdjk1RGNBbWhRZERJYVM4TVd6cG5RSG56bG84MFphTmhRb1ZxY3ZmbmFkVEFxNW9pK0RGQmJadmxZbm9QMENhcVYwRDNvdUg1V1hsSHpKMVpSRUg3TUpJQjA4LzEvc1FPOXRMRUhDUnN0Z3pMd2JQcXRYN05adlNRME9sMUxFdkdsVFZhUHZUL0VMT3lNdVp3SXdqd01Cd2o5Qi9JZmNkaWNZN0NxQ3Q0YjNrNXpubDVGTUsvUFF5MktIN2xudGRWVWQxNmRZcDBDNkgzMkx2d0NFRXhzcFgxWmh6dnpPSExzRDZ4cXg3ZEx3S2d2ODd3b1BEeHVKL3kyUlJCSTJ2TXdsNklTcnQ3VFBwTVFJeGMwbjBHQ21RUTJacjBobXRFdEljczB5S3FmNCtXM3llU1hFOStPcXYvM0FmTllHS0VVOHVCVVpLM0toa1hCSk9kNVRFbXY3OXBkS3JhTFV1TURtWTNIS2R4eHhEb01YRHFzY1JkLzRFd0NSY3BrREZuRTEwdGpmbS9pZE84Sm9HSmVkU2JWRC9LNVViM1Q1c2hubXhFdjgxZStTaDhGMHhoK1dDS2RrUithRUxxa1dnTGMvR081ZEpkcU10YzRGT21lZnE5RGR4MTVSN3VrcC9FOGxweDdzczgzR0VBa05MR0NTOC9hSEVnbkt4T2ZGZUQzKzliV0NqbDV2Rm5uWmlGSDQrQ1JpY2tJTDZVTEM5UFpnVzlVWm5RLzNRR2Q5czF6UndTQVBPTlpQQytCU0YxNjY0RU5QM3VRTlBpakF6UER4cm5iMFd6bm9tR1hITVdiL21DVUFybTY2Um8xUVV4T21iR1RHMXBWZjhGQ2p0Tm1WY1pvZS9hOXhIMm9rQkozOGhJdTNhcVJhakRSNzl1dnBwRTl6OG5MTURKbWlGUVBnRUhVT0taZzljcWltUk9zQjVaeENFNkxrcTdmaWFKaW9naVhWM1ZybWVuNkFuMVlnUEc3QVp0bUtDai9zT0FYNVViVWZqbTY0ajArS0pWM0I3QkV3dDUyYVBSQmJUc2g4ODJQOTFLemNyWWlJOU5ZejJFSlpQbXJDYzFScUxGVnRoNDhkTVZ6eENHb0pYOHkwd21ycDJDTGlmR1JQUnBCYmtsdGx0WHFOUnlOVTl2TEJLZFpkQXkvU2hvQkViRHJMRkN4eFpPczc5SGgwZWhYYW9HMUNIWFBlYVVTK1V1RG9WVGtLTEozcU9KdnJFWEFxQlE1cEx3TEliQ2w3MnVnYWVkYWNmM2ZibjJJWXFFclRwTnlzOUR1UU9jUXlFZVQzeExRMURrYmRkRnUrWUQ3enREejBVb2UvVERreFllQmRibWdrdEpKVXphblNHbHhZT3JpVWFhb0g5aDRzcXhjZHB0cER1c3VnRVVJMEN5UjFacmk5ZUhnYmxONHdkZW5XRWllMThCQTd4Tko0aGwwalhlWEJLQ3I2YkFVbWlFNk5BT2FlZG5ndng3MElmdjB3Wlh2UmVRWHZsdEJUNW8zZ3dWMVYxWEp4ZlZnd21KNXJ0WDUwVkc3RWEyMkFaWGpZdjMwR1FKanhyNXVueVdIWkdKVlU5TVNRbm5FNVB6SkFXS1hSU0EwaHdQZFgrWmxiNU0vWmpiV2xkemdvZ3lvRnFya09zQ1piZDgvNTYzNjJDdGJFNTJLem42MUJxMFpacTJoZXNSdWgwK1NRNE5mT2ZwTTYxOEpWTW5hNHlzaTdPa3JuVkYxWitnc0RReVZ1ZVEyRGVXRVdnYXl1ZzYzd21NVkxiWmxsU0JrSTJIZjJocUJLRVRKc3RNSDNnVGJyV1N5MHM2V3kxdW9PTVlDQ3dSUXJCQXhoWGRROEVuSVhSbHlCeHVZbTkxZzVSRkRLS1FOMzVLWmxZSXNKVmVOcFNHVmtUNWNWV2IzL2pjaEs1bmUvUHhwSVhPNlNzRjRjaFBleEZZakdjQmp0QU5VbHdONll1bDRDc2VnMnhoNkFGWXhpekN3RHRSa2xGTWlRekhoTEtUUkp1T212UFY3Y3MxMWhZakxXUDR3WHdCQjhXYnQ4eStHSVVueHRPeUJXT3daM1BoSXUzNzdPbU8vSjJKSXBZM0JnaHFYQm1zdkdscHFoZ2lTL1ByZHpBYTM5QnJDZThiamxyb0FqT2JETVJGQ0piaUdXRUZ5QmhDK3BuUUo5V0RraU5YMGpiL1U4ZTgzREdRYnFNLzNHZ1l5NjJOWlM1VnQzeDE4OUNJOUFUYzFXbUU3cHphUmlqL3Z0Mm13cENmN0RNTko2OEl4NFFVRUd4dXFvelZDc2FBZyt5TjJPTk1UdWNuMkFKR2lVdnBjRVo0RnlPZ01XNk4yTkgvQlpueFA5WHE3VnFWaU5WWkFKcjBoclFRTTU0SXRTY3RrWFJ3c2JQRkVzb25RcmhmVVIwdGwwRWlMU0N6YVRVWldZUnFOSktRbmpwWlg5UWRZV28wS3dNdmhpbEprRllIZmxDenFWNmErV25jdFN6YkZubG5IbzE2SklhOHc2cjRFcDNITm1zTHF1QlU0NVgrRUZCS0hJQXUwZjBpY29kTW5GeFUvOTJHZFNERDhyU2FoR216NnV1TkJCdWFUems0cFFSM1hEcjhvd2ljNG52Z1VtM1FxaFc1MjZHTjgvYTFDL2g3M1BQZERMSytlKzU0TngxU1g3RGVTZzhjcUlHVmJaWE1EMWhOdXBBU3RwSWJGWDkwL0V6bDUvSHlBYnBRV1lMQTRqTkNyRXc0YzBIQlp1MUVGQmNrZGwwZ1VtUHU1LzU0L1FBa2J5N0VkUFNzK2IvTXIrWUE0U1drT3lsTzBONHlLeUtPbGFnZVB2SThhOTJQSkNQb2RLdGRSRklpY0c0R1Q2N2c4UGh1VEpmK3JzME44QzNlWXJwK3daaVJzbURza0RWVkFPdU5kakFIWDB2UU0weTBIVmlWSjQxZU9neVRTTzhzaEdWVENuY3FtQkZScm5pZWxTemNtSnpUQkxQZHNJOWpNU3hyangwS2dWd2hrZE05V2U3NmxLQk53TW1CeDlXU2x5L1VtYXM3NjJuTG8rcUtXSWFHZUFCUEFXTHNkODc4dEN5OTVuOGgzNVdRWEpCbkZaQ3dQbkRUZzJmNjRkaFkwSGVHOWtXbjkxU3NYNEswVkRBbEJTR2JleWd2VXRvVlVVZDFSQ2JwVnZXTkhTaDYzTmp3TzJQdGdveUdqMTFvVmJPR01HMVVITEhPSFMwZDE5RmtuYlU2MEg4UWRtNFhONFJycVV3aXM1Q3U5NXZQM2RIbEthRWVHK2xBQkpJTWxnMGdIY0l6Z3FUQmJjeFRKd3hGdDJ1d2dmdWx0Z09UQ3o5bHBuRllYMG1hdDJoUVlUbXg2T0NyK25KZ3R2ZGpzMURsOGJBUEdtUjE0OG44Rkg5SEhCN2d1bjcxbll5VmlYanZBeXhKMGJaY29HOEpubi9YVnlyVnh6V1dQazVwU0hUWERYamNoLythY050SEpxSFFlKzBlajl4dXBJY3pRNVovZUpkRVM3eGlKS0gxL0hocHJCMFNGY21aeThoT3pxR0R0NjczSnVzNHNDOXRQQ1N2Ri9ja0p0MnZFTml1bFcwUCtwdEF1MVN2NkRZdWk4c21VZFlvdjNjZzBTZmRDSXNRZUpZdk92OUNxcGNueElSYVdiWjhEZzVBcWxzUzY5MFQ0cW5nMDhkNlhrOWliMC9OR0hrR1Z3VU5CSnU2K0dmbmMwdnFkTXdQRVhVeHp0em5NUjNjb3VQYUFyREVIeUpRVEU1YjZJbTRXaExqSmFWMUpBUWYrNFhna09YK2hYT0doRTExY1FtdE5TNHJNZk84a2NDU3IxUDNCL1VCcUlhUWp0elRsWlVNazRXZTloZGRGMXlhNGVocUZ1RzFVdXl1a0l3U0RwWk0vS3dyRE5KcmNra0xYYkl2Nm4yMmZ3NXdUSWhtd2VKTVdXak9vWUFTZ2xOSitPK3hJdU4wVE9mQXc2Y2dSNW5zSytVd3dSbUtTOGxNZmdOSmMwZG53bk03K3ZzUVpaeFYxQ3VYMnl5YW1ERGlySnArSFRjdElIOHBaZ3BrZkpTV0FuSHZ3U3ZLU0hrYkxLaGtOOFVVZGN2dWgyblgwWE16UVFac1NkSFFVYy93N0YvZ2xGRUdXSHdGM0ZYeHc3MFc5Z29pVWdoM050L2lGSGYyOWJRNSt1Sm82S3FxQ1AwWTdRTjg1NDA3cGs3blg5bC9YUEFQaXVOc3J4TmVtcGt3THFxUEp3MXpYYVpYcDF5ejVMbDlZeE50Qjg4MCt0RjNaekMvRmp3WjRSWTdEOCtoQlcyQWxWSGpBeWFGVkpueFBWOU42c3hXa3BXYUp6a3JXb1Bjd25hdTNrc3pTcHk0MDR6cHFLeldYTzBOdEFSc2FzcDA0T2Z0UTRtaDA3S2cvWS8zVmJiNUwyN05WaXI2Z0lUdkU5dk9CYmZFSzNBcFBVWFRsbjRlTUFrMmNsR2xJY1JLdUE1YjBJZkdPUC9SM0xTWVhvZ1ExZlQ4bnphRUdSNDgvOGlka1Q5NG1wK1oxT2VyRkdqQ1dWMUxQYXZHMHlQaXhEK0F5cDlSUWlmMTNxcTZobGFNS3pZMlRzOWpiNkhDQlVhWmJMVzdXcHVqNWhHemU1c2k3OGc0Uk12SVlPdVRaczZ0VEE1TDI3V3p6Ym5wL25ucHlOVzBic2J5N2l6UE5WaTFqUnZWZEQxVXZkbjhUbXdXU1lud3B6ZkloLzdhUEVrcjBrcURSSnJTWXNKM2I2M1B3a2xWekowT2RlWEdCTEkvcHQyajI2Y3VVZG5DZTZpR0hlLzZad3Z0MU8vRWxmUDJ1VWlDMS9XbnhtdTRoME16RStXNDFWMW1rMDFaQmc2R3UzNWpwRndWS3JJZ1Z3L1lJR0hsNUJscHRlNWEvYnVmN3VaZjRpcmNTNVMvdm1zTE9pRkJuM1V6eGMrVElrUVNPUDlOY0U4RzNuTHVLZHRWUlFZYUJLWnJoQTNCT1dPZnc5eS94RjRXMUJxRnhZQjl6Z1ZVeW51d3hkRHMrT2NkQlI0VjEwdTNEdUc4L2g4SzFBTTM5V1NnRTdoSWp4NktrSTAwbE9NanZMN1RFT2ZzSUhESWlJZGtTaUVsMWdkRVNweWs4bEVLbStxSmVCYWEwNHU1VU13RG5uYWVYVktQRzFXbVlPanBKeWRad1Q2QVIvUFRUT2M3eE5kTXJiSlNjbHdiWXN6RklxK3Z1bmRXVWNoa1N6VzdqcCtNbERMRDNrMjlsSFh6N3RHWVFvMEtLc1ZOVGVzdllyd3NqT09FeklVVEpJdmlPMjhja29OaDNJdjcxa3Y1dGUxRUViNjFiS3lsMzYrUjZVZlVHT3ZLY1BnOS9QeGdlaWljbC9zdWZCeHlQVkVTbUN6RnhDUmtlRFoxL0Nhem55WEhmOXE0TWVudURrcW1BNU1RaUZteTVyalFKazJrcExleEhhTEl0c0ZReE16NXZURU0xQVR2aUFrbkdFSmltV0JHL0U2cUlTVEE4cUNwK05zQUw3SUZpSWtVNXJRNEVlVC8yWFdjQzFCdnZJUHFydFZWN3lNaDN1cXhvVi9ZamEwSk1SQnVRR2E5S1o4cHhaRG1qa1pubmlDZkc5QjNybE9ISXMxcEFGaWxyRWcweDZTM1dpREZZODFDcHZJMTI3NDBVWW9wYXZtWmg3NDN3MUFGenRWN2pzU0prRExEVTdGTk8zeHhaWjBSTjZ3ODhxMmlsdlJjOW11ODdtOU8vOUlhS0VVN1d2UXFBUXArTkU0T0hPZGxmU2grUVZKQm4rY1crUW1HOWlodkFnYlo5b2xCcXhqSWUycWwvTFhySVJOdTRua25tdW1FTExaTUd0aG9QSmFSNkhLdmUrL0lQSlNDc2V6eEQwcHNvbzJjT1BsNmxVNUhsby9oeWxyazFnU1QwR0JSbitqb0FLSTFhaVErTzFaRHphN21aK1R6ZnAvZUtBQWcrRW16UnZCM083TGJPZ0hEbDQ3cHZoTVJJblQ4NEJ6VTJhVFpFV2pMWDQ3UlVmUldPdEU4Y1pwN05hd1lRUVRKT05WVEt6Y3ZJWVU2RTRubkVML09IMmlBejA3RkZWRmkxYnlCQkpveG1GcERkOHZxZDJueVk0NXhMWEN5UmZQZU00akl5c3N2cUovdDV0ZlJyV0VKZEphQUtHd0F0N1BYdUxqdkFWTHY2VUpLTnAzOHhrd24wdys0bW1BQW51Ly9NMm5NMFRweU51TnE5c20xNDRCa1lOKzlvTkpHMXRjOGVTNFg4Q2c3V2IxK0tzaWlidXNSemM1azFXUlU5Q2R2YTFldEhiYVYyOS9IMDEzQUw0MngyOUVvR1U2NWZoeWNLR3FOUGk1VGNTTzJNWEF1QmVwdWZRZTRIVHZqWVhpYXdPK093cDFWSXpIcHpuTk9HRytyQ3RvVFNjajNiTExib0UrTEdQZWs4U1ZuVVdWSmdyaXhiVHpTYm0rQXlIT1BHMHdiV29QU1A4N0d2ZWlIK3ZJK2NOdnU2clZFa2srSjJqSHd2VTJUSTRUb204SzFRRUFpUkEyZFFOZkZ5QlZpMGNhY0FEUUIxQmVveGVVUjRNd1hqYnQyRjBKQ1g4R2ptYnRQeDBFOXhHK21ZNlVHZGRZSzFzTnIzUHJuOTUwUTNFU2w0aldqcU5YbG54VWVTS0szQm9kdEZacTE5TDBDQXlkVVVXMDl5SzdNSW1RK3RSU0lWM3lkNUxJY0pZTWRvYjhvTTFQY0Q4TStwSXgvZmM3QXVQcG5mbnZkMWtRai81dUthYmJjTFNVcUdubXNNT3pqeW5Ga0JaekhoSEVSNnNKV0FjTGRWRWdSSGMwanErUHNFaENQdDJ2VXdkeVA0OVZnTENJc2p2RzF5TkF1cVdTeHk2R0kvOGVXOGxCVXB5UGNIUlFJcXlZcjZzcmdVQ0RqeS9LdHpZRlA4MEFNRkZXb1dTVzBITUJuZ0ZSeFByNmFkSUVEUWxHc0wvK2F3ODQ1cnQ3WFovTGlxWFZYUWt2VHQ3dVY1VEJPMUJ3clpXWEJobEU4ZEpnaXh1NW1VMERYWSt6clhyMlladzVZVm9NTGlFM05XblNHMTJlM214OU8vUUg2NUdIUmY3VHp6WW52dHgxeU0xU1cvdVQ4bmo4RUZKanN1NnloSlR6SEkzb21CclFqcjhQemxpR1dDQXVhVzJvTWpHZnp2bDhJbDdaTEFqTkwzZ3hiWUVoSy9uc2VZTWcyZ2QwMmR3ejA2R0YrN1JCSlJWM1VCUjJvN2tsWDJqaTA4eXNrNkNueUZqNEt6MWgrSWxJS3lDN0JmV25FUmQyUDAyY0YyZE5KNmJFTEhyeHRVb3Q3TVRkNFJZSVhnNGNXUmlUMzk1Ym5nYnpZZnY4WnpkZWR3MExLYXRtL2oyQkkrL3k3TzRaS1NDSkt0dFplZndmbTM1MERWd0w1QUJtcnFWdjh2enp1T3VmSWpSNXlURm9nV1Y4OHRVdytsYzBsdlpSRnBGTnBuekd3UFMwZ052eG8xVE9Kd1ZRei9PVzYyV2Y4ajhUbFRjdzRqR1Y3c0R2d2V5MjdNWDFobzRmdGkzME00dENQT0IrV1NsT3FoVHhDd1dtT2xVazZvQVpVQVBsc2tEeHh4Z3YyZUhFR3g0b05sTWZSd2VRdlVRRDJtejY3aVFIeE9oVUd4QjZ4SFpFb2RqSERldHM2UnhoSThJaEYxS3dSajFnTzNBZms5S0FmcHN1ajE4M1YwenRrSEQxekgvU1dLYzcvM2daZStyTEZOMmdoaGxoL2IvUEtiK21abGswM0tjUHB6Y1FxWWlONTlYSFlaUE14Q2RTWDVoV0loRHZIbUd4UlhBcDhNQ0t5bDZxd1Q4bEQ1eWdSbzkveEM0bkh4eFJtK3pEc3lEdG1pK0djaGR3NWNSQWY2NjlUMGJmVHYxMU85ZkVkUWhBRzB0RGJvT1VXUjRxdVhEdGZDVGxhNXZ6Z0RrRnAybFdEMWlJNnRzUW5FbnNFcExhaXFtcEh0eWVqTnB0ajRqUWJHNXBaZ2tnUkNFcGozaEZiS0h4UGVubWl2MzFVdmlEbklGcjdOTjhoeWpkQyt3TzZXbGkxcGpkdXY2TFc4M3paSkZBdXVtY0s3TlVtTVNRUDNlWlZ5Q1V0SHJFdDlkNUlCSmY0eWpGaUE3ZTZtdnB5UnBSbCtMYW5BY0hLTWp0RXl2Q1BBVEh2UmtxcllmRnNra3RVYmVtUzd2aE5TOXBxZy9yMEpxMUNSZ1hialRmV3ltdXJNSHZldEhNbjFYWm9EclZQNGRWYllVNXdGSExXMmhGM2JzQi9GTFg1V2NnTXZzZnpDRmZVaVhoN2d0YVJ0TlpaV01iNTkyeTVCMXpsRmY4STlWVVNCSWpFcDZCejBFTmpxSWMyN0lKdmtOZklLR25yaGR1VTFOcVdHd1JLUDNTR3djMWRYTlRRekZpOHRzSnRLTnNvR2pNVXFzM3Ewb29hZ2RtdUlIVFdBNjVPbWxMQWRFK0E3TjhLN3FsVlB0eE1tWmIzVE4xc0hQSU1DS1hndy9iTnhOZzFCTGxzditHT3BFKzhzUlFaaWE4czdqZmR0SkpubU1aNlFweGlqSTdsM2I0QUhFaGJiRTBRWDBpVXhIYWZuNDUwVUlxT0xFYTd4eTd1M3o2VG5XaEUrYUhWZXRRVS9nMG1OKzMzZTlqdi9DUnpBUEczbVVGOWJ0a0Q2aHB1KzQxdVd4YkYvcGNSajR0NXgxdjVvbkUyeVJHc1JGWFhZZko5MVo5dlg0Ly9SWk9lcEtydWN0NlY4MVJUa1B4eS8zNGFLcXBsVVAzT1Y5UnFzYXpUYW9hZGNtZ0RvaDFEZUt5dEdPanlwSGhNS0Y2SGt5NDNUdVR1cGdMUXR0VnFtRU1Pd2VhR3ZxcEdCalBWS00rQXJndDNWN1RWU3VhY1JRbnh0ZHdmQm9tMjBkeFVwcnJHZml5Uk5ZZEIrTFVRSXQxNmgxQ0l2NzdUaFBudkpwQzhDQUlaV3ZveEZ0aGJIWkRFVEV2YUlEcEQ2b0JpaUtjT29ZU0RwbmJhemY3c1NZcGQ2MlVJaHYzazh1VVAycW8xOFhLdXBKdCtDNXdQMXM0MU4yVFRmOXVyWDFZVGFOSjFJNWRNellKNEJlUnQwY2xkQnV0MTM1dkVxWlFHZ1ZxdU1OQWdUU1RtUlJlM1puZ1k4ZWJXN25PcFg2emJtaUtXK1dIQWhLVTZxYXVnZFQ3a295VEJvWjRLZlpHSnZONnhabUtmbE9XakVOZ2ZWRU9iU1JMeldWUUpjQTF2QlZnaEM0c254K2l2NGNzdzRPSmlKYWhOME9YU1VrUUUwYzd5Z0dXU2dqWVNDTW5EUHJiMTk2R0dTd0M5c0Z5dXRMMDIwc1F4c0trSnM4Z2JoMlNXcVZqWnY0V0FtdEZ1b0JNQ2Q2eGNaMFZaT1RDRlNXVnZWRmVkR3I4cUtCR3JRT1lIWXhlVDc5bUE3YlRNdTZ2SWZNYVloYkJCWWF6RkhSWERsODBiVjVvc2d2ejhTVitpMHpNODJ2RUhJcE9BaUY1Q3VNZ2ZyWnhUTm9iLzRCc3lCZVZKSG1LREVqcFFaNkZBNFdiRFhVUUFzTzg3bjAvNGg5ajVPSzRlUXNBMlFac09BZjhnd3d5blRPUWN1RGxieVREb21WdEVnL3VuQTQ4WCt6ZW8wVmpzQnl1ZjBTWnRDUksxcDVRYjAyRUROek5QZFFndVp3elk3Nm5yVE9TdnEvbUY1V2dIcG9jZmpOMU9DdmdRYXVJeDJ0THI2Z1NQOG02N054cjFJR2ZGNTUvK0tDM0lCL2drSmQxbTVqUFh5SWIxWjB1aGtNUjhkeXFReWg5VXN1SjF6OFhTeE1EbWVkZytXdFhCR0pWMitwZGdlbDkwTWdIWXlLTnh5aHFBbkQvUjdialZEVHZ4K3prQ29BdENqYlR5ZEpGallnellmU1BFUVNhVzVkRnpZbkYvU0NSRXk0VlhOVEJZVWZGNTJyZW1wMjZqYVZkZ2lwWk5KVEdKOE91WUlNOXZlc2VraUoxQnMxV1lBMUgxSDZva1puMkN0UjJ1bWdoMzFiakF1N0hvTmY4MDNTWW1ILzZPRVFMMG9tb0tRb0xPeHJIZ0VoMjRNY0h4Y0p4eFI3eUJoZXRnNHBSTEJ1OGQrYVdNQkUxQ1RoeFkvTmwydUx5SFdxQ3QwWEE2dzczWDVUeUV2OWdKOE4yZysyOVNITmZlaEI2T1lPcWx1YW5wd2thYWFOR0xmbDZQb0ZKWGhWOUxLVG02Q2syZ1RrZ0gzZ0M1Y0duRGVtNFhFR2t6STl0YzlQenlPalJTRG1mZ0d4N1B1ZldCeEJ0dlc4MkJ1ZmwrMHNwTDRnelRKU3ZrcGNUOU12Q3FjbGdleW9CVm43L0xZYkNGRExKWDZ3U01LdXZObWNPRE9MVkxzUXE2akZPbkQ1a1Q3Rlo5TlpOOGJySXZibHMzU1A1QXN6Zko3cHdnSjZpL2dBSm1zcmY3ZGxLWmNFKzBOby9pMDVwQ2R2Qk9QWFVzNzJubTNyaFI5Z2xNRlFoMitqU2pnQm9tWGNLWWdlMnpzYzc4bS9aM2dWRWFWdUM5YnpvbTRzLzZQdUFwaG5sYy9wanZkeDh5aTJERUh5UWVORlVVRXVjTlFpNmV5dkVnVlFyeXI0V1FDeWNzQnhGYlg0V000N2pGVHJBRGpnL0MxWHY2VzBGTjhHNE5ORVFYNEVJSEd5aWR1UDBDSm1wVFliMzlUbGx2SnptSTFFelVScFVheUNNM1VhNEdqeDBqbnd4QzBaSDkyalZHd203YmNHRm5LbjNiQ1BkSUY0TzdKeHp5dWwxV2ZXMHZlNXQxb1JPRE1DS2dxTlY3empyUy9QZzRHMTNEN1M1T2xhQkJoNXhrRElEcDRSVG9yRmxiUnAvSXBmS3hGRE95WXp0czgvdmN2RCtnc2M5RUFCSlJGK0tRWTJOd1FrZS9KMEdRREtMVDVaOVc4UHprY3d0cnN3dmRESlR1c01DTVZWbzNjcDltemNydFJtZmFiZjhVNEplTituNDdEelA1a1hYL2sxYXNkKzJJR0gxWURPa0FQR3Qzb3ZaRjBKYnJWK1RPeUE3VGVHeE90ekp0K1FXSXNFdS93Qk16YzFKTzAvNitiZXVUTnRBVU5PVlNpWSsvb2ZlK2RIZlIrS2RxTTROZmJodFF3clNteWtYUXg4KytrSCs3amoyMWZXSC9XUW83bFlSbTNQYzR2T1RSU216TExkVEJxTU1NY21UbmdiZFhTZSszelU2L3hNa2ZQUnNkTHk0WUFzalZ1WDhOdWhPWjJKS29pRzR4VjZqbkdLT3BGbXhnUjI2ZEhleTdyeUR2Skk1Zy9Td3NvVElVRkdOTDY4TkcxVkVSYXF5OEU4d0pBc0t0dkp1ekM0dW1RNkdYblVBaGEzdXNjeEV2cndpSmdOejRIeFpJQnRFNTJBRVpCR0J0YitPY1FoMkRLVDZMWTk3dVJuVEVPOEpiczJzaGMxQ3djQXZ0bFZQY2lNSWF6SSsxanExbHQ2Y2lmdUVldFVpbmJhL05YZ3daR1ZzLzFmb0g3ckZvS0R3eU1RRGdxT0ZEMk9pUHZGR0QrYXh0Nzgvc09sNE5TWTdqZnlQTkU1VDd3ZFhWSEZHZFBDa0hUbTNKNlVjcFZST293M3lLbjFDZDRUWUFGR3pFaU5pTW5OS2t0VG9VM3cvcXpud3FtaTVVaEkxS1FLQzBGZlQwN096RlVkbkF6cnhkcVdOZUs0dlZIVXptU09zUXV2NjFsaTArWjhlcEFXc3VaL1NaU1hVVWR5dnZaT3hqamowVkduWFZsQ3E4MFNlbkxPTTh5dU81OXNZd080d2laWW91aVRlZ0lZbTdiTis4Y3NISW4ycVJmZTFQODNVNjExTTUzK2VSbEEyeFVQOTJaaG0vMmEzV1JVV1ppRU5GSHNjVnluNEppNnVPWEpFcE9EaU9MekVoVFd2dy9rN2NwYkxIUFlXbDV1Wi9ibGUreExFVk82bDdBUlVDSDY1cDJnOVNha3NHM3RRTTAzWHAzdG9LSFFlUTk4NWh6ZVJWTG9Wck0vTThhOHNuazkzMmloeWY2UWhzV0RhOXhzRFpyajdObHNwSWp1U1VzbFZWcjFDN01kMFFTaitXTW5ML3lnOTV4Wmd5SFFhbGZEK2ltSlhybHVEUDY4V1ZkRnA0Q0ROTDdWZk9WRG1NNEMyL0hoTDQwV1gvRTBvNDZDQ200cHU3c2VKblJadGlBTU9Ma1hJTUQ1L2pxT2pSY2I2WFZCRHQ1U1dVK1lvUXdKYTR2czk4UTdUbWxQRC9WYVR4UVhQTlBKdSttMnNob2ZDTzVIYlZxZEVOUGkxRXlRQ1kxcktZSjlSZ3VGM1VWbjdlYXNDNFoyenlsdkVaR0pVSHVTenNMdU9GL3JYUExXUFd0QjR5cGFCNkx5VU5pZHV1Ujc5MTBhQWhxdDAzUitJWkJzMUhHUEtIUzlLeEhMQ0R2cDY4L0NjQzdXVXZzYmpwUXpwL2hBODhuMENhSTJJektlWnl1RHZOcm9hU2ErZmtISS9XN2N4elF4dFV3STU5YU11MnhQeW9mOWoxRnp4clJnZ0lBWTZRbTB5NWFXU1FGNDBVUG55Z2R3ajQvU3dyZGtqcVBoL3VEbk03dDZlRU9SbkRkbi9DVTBUQ0U4RFZKbTV0K1RzaUEwTmhuZVJjTmM1WDFoTW1HS25pdlh3bUlXQVdNZk1FczZVa28xTDBiV3loWUoxNHlycmpvbGRSVlh5TG5VVFBpeHdrUzFTVmxNV0hvd2tVTnFrUFU4Ymh6VzN0VDQvY3d3YVk5dEkwdHZORVhXMitTWkdHeGRZd0Y3TjN1ZElQcFhjczBWclp2R2lUaS83UlBVd2hGcmRRdm5rZ3JtQytUUkhoN2k5eVpXOTl3aDlSZ1FuOEF3NEY4UmJNNWtvd0J0VW5NaGYxYkpjQ2hTNjFrR1BDZUZOU2FGSG9SSVBFUlJ3c0NxTmlpQ1lGOW1DbW9sQzg2THVVN3VOc09tR1k1OFozaU5OajN5UzRydGlCMU92dVNrMC92VDViTmsyYnhWVytMMHBZWldaMUM2L1NhZ0RFNWJnSnFEVlJhYmNtMEVHaTVqRlV3TmNRNlREQ1pKVDc3L3BudFMwb0JEczkrd3EwbUJTeENYOVgrQzhNdDcvZXgzd1RxMlBHUjAzdXlqdmMvNmV6a0lYR0gwMUlhRDR2V2JRci9iQzhhd3VMQTdRVG5VcXBjaWFOWVRvdnhDOGZYdCtsWFdlVllkR2JiVlcvNEtmSFpHK2dJL3Z3aDJ4bmNwN2Rxby96aVBVekVNT3VoeXBZOUNwMElSNkpMalVETW9KdHdKZTBGa1ZHV3hiM010NFdPL1pDQXZSc21HdDk5a0tJdVB0cnUzTU9abmQzQVUzcVJTb3JoVlV0Y05nL0s1MVVxSWgyZjI4QTk1d05Tb05lRUZIZ20zNXZ1Vjg1UStUejEzR0JRbm9sUVU2dDFubHRxMHU1S085YWR4TnA1Lzg1Z1NMZ2FBLzdnS1BnckRCdjNvK2k1a1U5RmU0MGdLWGlycEozZ1NkMHBjTm5MTUp2ZmQzdXlqUmtRQjNWUGJ5SmtyWVpaVU81OG9EVGZuU1g2VDJBVE9pam9JTWNyMXRMdjh1NmVEcFhNbGhoM2FwQVE1QmF2RjZGRmw3bnBXRDZVQkRCemYyYXhxZnRRTGdHWS8ycWk3aDdFUmZjWm5CZkxZU3phL2JjZXVPcmt0b0tONTFhODYxa2VZQlRvczJUY1hHdVdWNEtoMEtYUW1HVG4ydWp3ajlwSXRYWjg2RUp0c1N0aWNGenh5MXRKY244cDUwQTZHYVNSYW9ZTklOdEJ4Z0kwdE00TFpNc2RiWi9xb3h3YXJIbVhQai8wb1loTU5ESEltQ2VHL1QycEQ2MUJVbENXYVdmYjc4aW93eVAxYVdaNlZXbWtlb1B0VEdtb1I0MW1WNGJnT01oU2JVRlkrZkdDbUFYVEVuSzRic0FEUXN6N2Y2TDZ5SUNmYjFDUUJra0pKd21LTnJ2bkdTblpJRUUwNTRhTEo2OXN4dElEL24xZlFkQWg3SUJKZmlvWWZCUjlER21sc0dCYktTaDNTQ2g2WUVvb3lmOTlYWUNDTW9oeDlwanRTWXMzSkI2S3hLSWlvUTgxWm4ybXFjQ1puc25YamJjR0ZPdWRXcC9KOUMzZ0l5TjVmbW5zMWNsemhUUlU1MHhGdVVnbzdUeVc4UDRFb2l2OXhlL1gwZFRGZE52WDJHL0JXbUo2NnE2WkV2YnJKR1ZyWkkxcnAyNHh3Q3R0Ri9MbHZ3VkJkdUtTV0ZDSzNJUUMrL2ZRU3pzd2FITURuRjRvcllmVFpBM1BUZTRtTG8wVWluN0lFV0JoODYwRE5kKzVtR2M2WXNGbllaaG5iT25TV2VYUEZDbEVvUzFBTVc1K0ZKTWdSbmt5d2padkhWVmlUWDhuaHdpanVZd0R5bjdQeW5kVUVDUWFpL0FjY3cvb2w5OC9zeHA4bGZQQ291MkdGS2JpVVFQZVRhUVA4bU1kTHdjYXVlaGJ1Tng3RlJPRkRQNVp4NmlGWmZ4bkIvUDZNMTFBYkMxNDdEeHhGL3JmbFQ5Ylk3eFp3VWE3MVVNNXgxSnZ3ZTFkT3BMU25pUTRZSjNrSW5VUXNwQ0hVQm84bGNXdThNbTRMZU1lMk44OFZNU1B2Qy9PYk1oaFpwUjdIMnBqM280UTZGUGVPbEdWelpJelFSYzNNaDBOM3Rkdy9rdXhRQjBGRG5OZUlIQTZ3czFmVVIxZU9LWmR5QXh3MENxTFNIb0YrejJjbFU1UlJ1OFYzMUdOdEhGQWNmdUZ0YUF3TFdYeWVlZHQ3UmE5ZnVST05hMFZ2Y1NRSUc3bi9QMDNxWitUMDUwelUyazBLQnY4SXBJRndTWHg0Q2tVbU53TmZ3QlBIbmJMckkrNzVWQTR3WDZYcFBiVTFjQWcrUGUvNTE2VHRwZnI1Y3hlOWlmZkFVaG90bjdWQTNPcVhpdGk2TXJXVE54ZWNPNlhVUWRBa29sWEpBSlNBTnhYMnNiUDgwZVZsa0lIZERESmxVdGg2KzhKdVhuTXJsM2ZnZnhOWUdnU1diMDkxYk1NUDRwMVN6WHBNaEVpVy9mZTdQS0JvMEpaczJNUHlBdzRkU1dFYWVzQ2lMd2MyWG9FNS9CdG5MMmpFUXJuTDhzNXBrdmk0K3V6QlJEcXZDNG1ZSmgyeDI5b2FQRzlobDREbThqVlBsaWtuOUNPMzI0TU90ME1aUTNlWjZpcC85SHJFWFNxL0MvZmNJT1U0Y2ROUFhHdWVxbVJzS2pkdjFzM2JkTzFZWFFqcmcxUjZDb3k1V2tlM2Fuc1o5bWlBRHU1Y214MWU4TWliTHorOTBBOW8xbSt1ZUpTNGpnQWd6blRBQkpqOTlaZGRJb2F2Z002UkYxblJxZC9CVVNMWFVVK0c5UGc3SUJ3ZzBVbmxXdDZOZHlJNmdqVHgrYWlNM3p1UHFvVll5cEs5SjcwYmdhL3Z3NmNCUURoekFnaVFNOVV1RU1wN3Mzd0xCRWlPeFAxVFgyUWNtNklYNXBudHAyZmF1MEtvcWVPY1VsSG8vWXRtMEZNcFlJSURGL29jOHptUjE5NVg4Mk1IWEtCMnoxWEEzUzVCZGVpQWdJNG5UODBkQk0yTnVwY3B5OUhOT2Z5LzdDUTlDanF1ZE1yUjZmcW4rbklld2EydTNWWnZqbUF2cUJkVlJOT3RabUk2bGpBMmljd2F1SXhBZWlFNDJDYjdSTWpXdE1RR0JUUDN4dE8yamdyT0RpU1E3aDZQMFpZTmJvSlhnbFo4Y2hWK3oveTkybUJOQkNycGxqUVYzVGhwZjJ2RDJLQk5UamgweGgrWnoxSFdYZnNEdU1GaEJ6RHBrS21IZ2hGemVPb1JBRk4vbDFJR0V2SExPYW5RUE8rd29yV2R5NFVYRGtUelpOdGtpOUtmblNoNjhqZWJHTHZlTzl1K3pQK0wxUDd1djk5OVlzUXFKbEZYTWFsY0pmdzROeE9YT0FRdk9jYjFjcHBEMVFhOHM1T3AxMHdUbjZsdmpWY1YveW9XT3B3c3BqVDZ0UmxtbTRsUDFjbzErcURXV09kRU5QekpnMFhmaXZrUUhybG9TQ1I0MmY4TzdSWTRRa01oNmJBaktvVFEraVVBRmtxb3Zvc0JkRDJrZmF5QzJ3TWZPSGNJWnM5WWNKSE9Ib2E4T1RwZlgrZUFpUE9EZFZ4QjZKRFRHUFNyaXZmT1JjdUt2M3dUNzdBZDNxeTl2bytabGpvcWVKNTE4NHZ5cFR6SVE2dXRZTCtvRm1wWnRpN3VZMVM2Q1VLMmVyOHN3ME9DYWF0TE5FVXBzREQyZy8xSmUrZlNOdHl0eWhsVndweWpGVTByVFNVZ0Y5a2ZuL0NQNnVFclNvQTR5SGxaVlpIeWJPQS9QYmw0Vkt0SGpVcW95aGxyQmMzbWhBNHVSandJT0RHLzlFZnVFTzd0OXRUb1VnT0hZODEzVEI2b0F2NDVQaUhlbWU5L0FUOVIxelAxN3g5VVpzZEpxNlBKQnQrYVpXNnpnc1IvNVpWNXRQL1dWK3ZJZzBOTTIxZ0dnb01URlFYZGFJQmJ6MmZJNkxsY0gvdjBGUzZGODBNM1Q2Y2dQQ2NON0RTcFhWMjM1Z1Q0Z0tTNHdwdFU3S0dWVzFRRnZDQ2pZZWcxYVBrSzFwa0c1SnpSb3V1WWR1aWtRZzFzUWxlSDVsVkdoMVQ2bytWWVZVVDRIcm05RTFNYUxYajlweHYxZEdHaEs4OTRMUk1aVm9vdzBTeEdDdVNNaGhvN1RST3puUmNGT2FBRFQ5RzNwTE1oc1JGeml6c20vQkxHTnkxbHRoeklEbmRSTFY2TmZTajRKYlZLc2RkZDM4L1ZDL0hQVkpaTklBcUM1SGh0U1V0Q2pWSnlISno4elBBTnVkWDNWU2FQcmp4ZjhuU0VVNHJISm9TVjZuTlBaSDFvZ2MwTVBGbmVreVFlVmhic2FicGw3c0VqR2FUdWZyUHM4UEVGVzFQc2N1OVJGR1NzaE1JR1pjRXdRMVlMcENCUVByN1hUME9vZE1ZTFZZek5XdmtFd3RHM0UzbmZncDFRNG1zS0src2I5aHc5UUJPUGNGYnhEUWpzUGRVRitFVnpaUUpiRWxYeGZudGNMaklSSllKMkl2WFNMZWdVWXRnNmtETVBqRkpzalZzUERibVlzL3hkSUcra1BmNWU3Tk83QjNoaUZObXhoSkh3KzAyMUE4U0x5aEoxTEtXSWlTVjM1L0s2VGxRUStyT2MwcDgxcXpjTCt2ZUw5WmZsYVNLeW1yMW5IeEZoZTFHaHA4Q2FVNFg3dTEzS2UzdC9yK1UxQmM5NzlETFIrRjNROS91SGM2VHZ1bld3UXNXZUtEMkt2QXMzVW82ZUpVcndOSTFBUXhBVy82L3lFNHRXT1gwMW5hcm1iSXFjSGU3YzY2dGh0TWloV3Z6a1djNytGUThIVjdHNGw3K1RGbXVQSHRCYTVBQmt3QW5ac1p0S2Y3NEtPUnpvSEgzWlFnZjJqSGVPaXQxMUNzbTJOUzBVMlZjbUlVSmJJaEJZdGQ2S3Y4ZDdOeDRUeUNvakwrcWFIWGpId3JIeU9MeDErdFA0RWxXbDRLdzQraXBiRzdUVk1rd2RJQnVhSldiYVVNNDZWQ2Y5ZzBvNVFiMVhwVWFTbFhyRUxnRVQwQU5mMFVJeEF3b1JhQVdTS1pidklKdkxkQjlaOGxRanh3UjEzcUorOEpDeWpSV1orS3JzTU5UT0pnN0E2QWY0clQ1akJTK0hnSE9zdW1ydENJcko1Q0I1K1JKMlMwMUtZVjNkdmFLc21UZ0hvQkdoMERpTkZIUkhmZll5bGVqN3lPTDdXdThyR1A2WW9ac2FNU2R1V043UHJzdUpQSGdUSitRclNwNXEzMTVZMHBDUVlsNGRlOWJ0VkxjQTBESWMySytuWDEvZWg0d1ZnZHlkWU9JZVE3eVRlbUtENVpRTmhySHUrbFlNNDZDTmhSVWw3Slllb2lFKzRsRWRPOG1HcEwxVEdjR3pKMThMWG8wbzJJb2hGS0wrUHlKbFJkNC9hSXgzUGtSUDYwVDVLVUoxdXlVMXZXbzR4aGRZWFZhcEFMbEJJWWt1WUpEaU1yS1d5eWJRZHFKMTl5YkR5MitlZS9mVzBPYTRZYkdLT3Exa0NFODVCYm5VVmluNlAydGw3VHgxSHBRbW9iNi91Ymw4aFE1dVYxK3gyeGpHeVB4b0ErSnMxWGhJS0M5SFZTRTAwMTlmU0xRUzV1Zmo5OFJVWVlxQUN2Y0N2azRyZVNObTdYNWwxTW55ZVNEdG4vSFhHdWU1Nnhta3A5SXo2U295RDI1Zm5pR0xEL0ZZa1dCa1JvZkc2dU41dHFWbHpRWjgwR29Qck5JODJLT0s0aXoya3hQR2kyM2pvZUxqVUdnVGZlenFkRWttS1hFY3pjaURBYmRtUGVxTnNaenZxbWZJZlhiUWxTK1h5Qk1rR0N2TWU5WWNHNG1LRnlSQnlXNUYvbHF1cDNyMGZob3dXSzZYR3p2YmlDUzJNYW1wZmpJdjV2SmpTK3dHd2FaMDExeFpxZE5sbFVMUGd4QmtCT085Q0Q2b1M0NVJmcFV1cmp4UnhINzhsSHBvTk5ZLytUMVZlQlNvMDZuSHJ1WENPUktJdE1YNkg1YkpaYlhXWjl5T0VWYkc1V0hXK2d5SGtwdEk0QlRsTThmYk94SkRYTGxRTm4wd1lReEJvbThHcGlXS0NWNVU0VmNMWitFb0c3YjJzRFd5dG1vQnFIT0NEWVNKd2svWWR0cDBYd2liUVVOMXpTeTRZWGdmRHRwN0JIcFNXb1I1THpDY1pabzlLVlFFTTlvTEFvR0krU3EwaHZhMGJ5V0xWWmpBOWdpa1pHa0gwMjVOZkw1Z1c3N0RiWTZpSGRvMk8vZzlCSVk4L296bVZyeHJMSnVaSnBvNnlIUzJreVlMY1o5WG5hcnpNcE8zWkFZelFBanlEdTFUeis0czJaR1VWekJaRjZTQm1RSnhaNjRMdTJibUZNMnNlNlE5eklScDBLNG1iNUJLWXFKZHFlSEhhYWhRMFRyWnFyNXpiTVR3T2VvbUZRTWg2R2VhQlF6bjVFck1PUEpYL1B0WDhvVWhGQXZQNU9abHdab3d4b296U2d4OGp3NFZSbFJSWkRISjBTdUdVeEFGZlI0cjdZekM1emdwaVUra2E3UFd6L1JyRmEyWi9zWGRRZTBZZWVVMFgvTVNBVHo3dlJ6MEtGaDNLdG5HM1JKaDUrbFpsTldBSlNWOGo5SExQc053RzZrdUNVTjNwUCtISThQWVFKWjArVWVoV2dzeTI2S3UrTVBuV0tZRjF6YWd1dTM3SE50SWFEd1RSUUowdnNLcTNPRVRNSTluWmZSUUptbjBKcDhBWEE4d0IwOHhuV3FxMFgwKytFdjBiWlRPZjBXVFZ2aFJpZERkbEVzclM1V2ZxakF6TUd0U2h6VWd3c3NPQ0E0L0RsNUlPM2VlczNnTU1aUHgxZU9aVWpNQWJXZ3NGRHR5amNlVk9mL0VyNE9iWkpjNWsxRDNaUmMrS3lJZFp2bCtVOWx4OHpBMmlYTUZjWExMaTlYdVVuY1h3MHRVNU85RStUMHlxaWtHcEp3RlRUTW1qUUJuc3pJL1BMSHNhM3FPSWVCSExzWUJlZVkxTlNuZmI4cTd3cVFNUFF3NDBmdHJEV3pnUTZpV1lPRjMrU0k3L1pmUFRXOEdXVDlxWTl0V2R5aVRkMDRnRmJQemtwWDdQN0VSdU9Vczdpb1FRZ3lpTDcyeXBlb0E2MWZvN1R6c1FDd1E4eHVWT1o1bXFtWnIvYjBhbVNEVkdNTmFZK0gvTjZ2dWF0SnhCbXNOVkFKaTVDMm9OMTNoTWE1MFlNVlg4ZnFoajlKRTZUcFp4SGF1U0p0ZU16aHVmbXNlU0tzbDJ5cjlOZVJGRFJXcDlPRnhkalkrRU5jSUtNTXorTWViMnF2RFJYbmxtS3NFcHdFUDZmdUdnV0ZxWWhwbVp5LzRvbXdPQU5kQktabWVkN09HRTZvUGE1UG8xZVhyWmZ5UFpjWVpna1dsZW51UnJpamp5U0d4bjl3bGRrRnJRcFphWjdOejc0S25SQ2pETm5yTGo2ZEdvL1dtUE5KeFVwcFBDV3FrNFBIejFmN0JLMUlxZlZPRGFPWEdvT2xkbmFlV2NwSEczYkRvaDlDbVY3c1NOclRaN2gvaEN4bVBObmRpT3hhWTdVSDRqYUl4ckM1R3dQQ0ZRZnpEcVE2dnVkbTN0TDQ0Q1dhTGt4QjJtMTl1bnRLTzEyZHBISkxtc0FicEZNZ0I1L0xSYUN2ODh6SlI1WktCZXZZRXQzSjZiOHprZVVUdWRpRGtUOUpnK3hZMk1PWnE4ajBZVGthbWQxMmpMWktYYkYydkIrUHVCZVJCOWlJeFQ0NDcwRENpQTlSUzExeENxNDF0eVQ5aFAxZUw3aGE4MXU5TzgveS9Fai9KeThrU3phN205R1dVREVDbmxCejJhcy9MNGxnYWQvWlZvTEtVdUpWTURjY2piUlZKVHliM3BhWHRKN0cxYjRKd0liZUhqOERPRnlvekRjL0h0RVp1eDJWWmhYbzVXOW93TXl4UFpsSFFOOE9DZGVBRXdOQ3VGOURUWE9CVzhnVzU5elNZcU1uZnFPcEpwcHVMeWNQRzVTSE9aTEIrOVpwRlVnMk9YVjRnNVZUaUlqT25BakFpSHM4UzEzS1RJUFNHMS9NOFZkRDBhME5zR0hGYmhGKzNoVUtHL1EwN1VOM3p5WWdlM2FWU0Z0U21nODBWeW5pRldSUXhqSXBDUWtta1MrNUIzT3dheldaRTJoYTdmVldZNEtkb3RLMXVjNTZ5RlFnVG5BdTc0dC9qMkxjdW9ZeW9JblBOaElZdVNEV1B4aVg1ZjE1ZmlJYVhQL2hEUGxpUlhhSGJ6QmhFT3V1eVpmV0M4OTNseSttaTYyc2h0aEUzQjZJUWhTbFZiS2tsUDMvNzJycXRRY2dZcEZoZHpnK1NsbVZCVjBObExiclQ2WXo1bzczeGtkdkg4K283eURac0R2TkJyWWhxblAyOVIzNnhQLzEway80VFFBcEZDOHppOFhFS21LQ2RnNjlSR2lpeEhIVEFJYmh1bmpXYmVPdTlPUTZIQk43dXVZSGV0WWhJRFhRK1hqZnUrd1lraENmUllaOUVoQ0hoVTAyU05yL2h0MEI0OW9VZFkzR0RsTG5pQzJxR2N2K3VYQmZRMEhDbnI1Mi8ydk0vSWJCR3hCVWVzMTBLc2VtRnFiRnRhR2JUa01hUzE3Q0k2ZEhHVkU1dm9XMUNSQjB0L1p0eEFxNUtwZCswVGRLTTdhYWE2WE80S0VhM0pwbVE5R1RyZmpjZXd5K09XbkR5NlBqM2lTMndUYVlNeWJEQlYrMVVCR2J2bzJRU0R0blVkdjN1ZHc4WENpNjVmT3lORGswZWtGQkxZTlZScXhwbjBRNEsrVE9oUGZCQ3J1ZjhZUVZoRm5yNmZ4NnBJYmJkNUFuNDc2NEVGNEpINWF3VmIyK1V3TWJDSXNKRUt5MGExQm53eXRpdC80TmpXQ2Q5MDAyQXpFeG5na3ZmMWJVWXZFcFFabG5taFNoQzBuZmpWd0Vuai9TRmF0ZG5qK2JXZDRjM05PdWhkRk4wR0E5STYrVXJJakhTZFcwUUF1MnREV0tmQVhIZk9qaFUyWkxaTGlQZFUwb3htR0l2ckdrQ0NOTjk4bEhQeXpRYjJZK2syQjFOTGp1VGlpOGIrajhhYy93K0grMVNHN2Q3b3EzRG9QYXViSVFZSFczQTI0K3dRM1hjdmt0WERadXIrUGRoUDlYUE5zdFlLTkJLMHRxdVZPNTdjcnBzUmNTNTFSRUVkYVpDSTRwLzFLdk1pcXgxNTdGMVNGNlpNeDJsUldmOURHTUk0TzByamdWMzVoeFlxNk1vVXd4TEsrenBhMnhLMnZuYjNrcVNtVXIrdGdsSENOL1dTNHpKMUxwc2Z0dGttMWIyR1RFbDl6ZGtTYjJJeXNsVGVFQ21EYVA0MGozV2pvNmszZVNjNUVXWmZkOWN5MzgvR3p1WVovTmtISFJndFIzLzhSWnp6N1lkYktUNzJoOW1icVpaNVE3aXQxVDdya2haNkRlN3JiS2pPaUQzMUZqUmhPRENPTE0xN0RVQ3ErWm5QS1p2RzNYZ0ZCUjZXV3ZpRVlxd3pOVWtwMnhIN2hyRzBCU0FXZWM2SW9MOTBxRS9jQ2Ryd0syWlZoT3crMFR6VFFSZkpoVzh2bjRCK2poN0NGZk5mVHEzSGk5RmhWZ3VKcjJkeGlya3U2QWZpbWlWM1ovRFdpMnJXb08zek82WnNRU3pja1gwZ1JWZ2F2eUlhdFpmeHg4OEk3WmVtRDBtNllkUmo4YitqQkV6N1RNb1c4Y291NWRVbStjeTNNYVowSC9WRXR6SHExTCtQdHdIRjhvOG1RQmFnMGwzSzhJWmtXSS84NlgwU0ZBcmdnTlRUV0x3RTFZL0d3Q3I4dzM0VFZpL2VPRUJhVGlVR3pUVldCUkVnNHV3OVRCMENHZkhvRXg0Mk9PdFJ3WW1oMVdDU210V1pkNWV3TW9FMWxjcVJqRERLNlBaeFQ5Y1FCRGI1WlFPeUFhQ3ZXNUV3NGxnS25uZFJmWnJ5MGFtVzE4RzJkaVJYZHZJdUhEbk1ScSt0VTNjQXZBa0E2cVBrUDZGbXZneGgyVEhTWDdhdlFtRDVZYnJ2VnRCOEcrWEVWSjNrWVpXbU81YXRBSzRmdWVVUEZLalZRdjlkNnlaeXk5cVVIS1JhOWVRUE1tZWJIeDVkOTNWMGZYZ0xZQm1uTWdoVEJYOTd3MXZFSnQwTjUzQW1Sd2tCWXgzS21raTFoeExhY2NnckhWd0RtdEcrQ3Z6MnVCTDkrMnp4UDRtTDhPQ1YxWDRDYnhUQmVKSk54Wm9tbXdYQkM4NEFQYVJ4SEFxZ0MyU0dqQVdaSXdHLzVlbHUvemF2a2xhVEJqcXptZk1JNSt3VkZ1b2U2UDBORFFrQmVWQVM4MVJRQXlMS0luTmI4ZlozMWZ2V09WN3VaNm5SWHdJVnRuL1JISFRHbDhSNlFld0tCKzd0RXliTUY1Vmg4bzlidDdKSmpOSFkzbXI3ZGhzd1VNNllxL0I2Q2NHdHYrdU1MY0UwelJlSHlYaURiZ3VoelFOajIydlN4SzU5OEMwVjBQcjJrdUhjVFJ3U1FMQk0xRXFqcmNVdGM0ZXRUa0UvMllsa3hLZlFSUmhYRHRDMFQ4L0diNzdoWUdRbzRNa0phbndJbXZoNVlTb1hZYWZCeWFrQ1JhN0RvM25HR3NteSs5T0tkcldDZWZXdzF5eXBXQ0FieW9KQUhZOFpNTXh5ZEtOaG5DV2E1NStDSW1UcHErRzAydXlMa1hueEpGNlRLUE4wYUFOUEE1ZXZMaFZFQ09la3UvME9PK3NER0FKcXZFbzFvQlh4endqbytTNGJHTzRLZU5LQVFlV1oxaml1aGY4YmMxank1aFJzWFU1LzNxdzd3OXdMcjV6L09GMWxhcDMvSGtWckRYOXJVZWxnem95WGloeVZOVVJqeHNyNkYrZXBNaGpUb3RHRHo3ZjlHck9nckxSSWEzL0Iyd1Y1blZFQW1PMDlRQ2g5emxzWXB4Zm5LQUc3NGJwVm1jSklLNXcrbk1kTUpLSnFaM0RLa25EUGVBcWVnV2NaclBzTW1EdHEzQ3QzUmptK2hqNk5TVDVyKzZ5Y3pmaXBkMVBlZVBSbXlqVEdISE81VVRWcmV5MGk2NWpKbnphNzFBelBod292aEFUV21vUWVROTRuM3ZGNDBRYVJVdS96YnM1YnJ0L3R5RURBeUlJQlFkTG5Mbzl4S1BJT1VvMzNqajlZV1lqNE5INjA4RHhjQUpsbVYwUzMrRmo2b0hYeldPWFlYWXJuaGVtQjB6WkJUaUw2UExhSW9UYnRwNzVEa3dWK1M2QmZ3dHFEM3JVR2dYekZoNTNudVpqRlQ2S2xRT3dhRVlBQ0M5bTNzNGU3MGtSdk1aQWRud2FVYVcxT1RQcnliTWpOaWhrSUlGVk5TdHRPdmlaaDlHS01PWFRVdWJjMnJXSzVQOUFGM2FkUEJ4RGhRTXZad3NSakZTV3cwYzIvaHVKRTdxOGNUcEFkaDRrZEtaZDhVbHljT0J6TWd2bUpEMmFpUXZUenBCbSs1MnNuMUNMQXRGYVZEWk9vWGl0eHk0Szg4b0hKWFBqUmZNemRCdUliT2kyUThrTkN0TjlGenFCM283WjgzVGUwemFrcFpxQVpmNEhTdXJJVDVyL2tjS1hhNXhCK1FPd3NBeFkwbkJyTGY5dG9xRnBFR2c0OTJxUXNUaktwRGFTUTJPS2J6YjRHYUJqVjFWcC9oaVNsdGFqNFFCcitTVGlqV01YdzJaellrd0RFOEFqa1JIb2hpV2tPV1c4dTczNzlFYmlpUGJkSnBqMGdZZkRNOWJSZ0dyTlkrY2JZMDE0eEY3Nlc2WEU2am00Q2NuVVNWQVdqSUxCUEJmV2xVekV3NU9qSG9DdXdkbGZVWUc0dEx4WGVhMzVYakdBUFVHSzNhYjNDYnBFcmIzMStidkwySDJaWUp2R0c3OWdJazlobUhKSWRaS1JjTkdJanJVSzY4YkxGSXAvaHQ3N2dia2pZZ2JBRTFEQlI1VWpvSnB5QjQ3RjBwTXBCb3BHN0hEcnQvRzVLSHZncGo5c2gzbk9za0JZMDNqbDJHWTBqRXc4WDRPUUd0N3Vld2kvWGRka3BudlV6WmJ1MDVMVGNjWTI1VGRRMEhuSEkzamhVOWh5aVg1UXJWT0hnaEJ0dTVSYVhvb0VFTnlCSVNZakZYcWtMd1lVaVdqMWFMMTY2M1VqVnNXTldMbXdHVDg2cmZDQzJ2L2RqbjRGYk54OVhiK21JNEU3cFF4OE1YVzA4WUUzeVpWS3VWVDk1S0t2L0pRQWREc2dud0FSekxTNFVvUTFxTkVWU2ppdDIvS3gvbzNqVmpRRkVKcUFINUNwZC9zZU9wbTFHT0g0QWJhenVGam94MlY2S2YrQXRlditCTkZuZ3VNVS8rUjdaNFhpaUxWT0NOQVBXaEV5L0l0VWVZQmZqOU9GRXRlZ0QzQVVmR0x3Yk1HN0VTSWlrZlpXOUZrTEtMaWpaVlIyMmFONGZzVHQvckUwQitXYlVzSlhleCs1V2ZrMm5EakhqYSszMHltczAvdDNUZG14WTlGMmIyS3JFWU05a2oyVkZzUEloeWVSaUd1K2thalhzMCtYVlhVT2M1aFdlYmRLT3hFdFdaM1E3Yk9ER1gxT1NocUZTUEtOYTZHU0F2ZXJVS2NMUXYvVUMrb0JtNDJhNkVaRnYzZ2lpU2JiVThkS3YwMkk4cnpDcmxGa0ozQlFXdENZN25icWFOSWFpcXNVWU5ScWo3NElwK0VxZXdvelB6K2NjMFdvZDlPU29aOWFpa2VjdlAvMjFOY0NOeUhTM3NBN21yT0Q1dlhuVm1EU1dOVU9lMGFhbTNrWGFaOW1yVGovSlQ1WGtEdXM0Q2FZb3F0QUxETkl4SHZYZEpicWxodkhLZnpBczNEbGsxVUlTN0l6bGFjYitFazJWd01WSnR5dlNFQnpxS0phSjRnTlpOS3ZyL2xhWWVlcVNZbStKNXhUTEhBa1lyVUU4NGFPRnlZUGkyNUdzWGNsOUwrVndvYlQvZ25GNktHOTFsVmJReEE1MXBzVVllRmpvYnRabzF3dElPcUxPdjFpNGpqT3FHbzlHbUpudW0zNnljZzNOMlVBWnlRdUE1dG9tRENxVVI4K2FnOU1PRVBIcDlOR3M3bE1pcGZXa3grVENJZFBFcHBYRElZMk5VelBDL2hMY3I5ZkJ0WENMQnN0aWVuaTNWVnVNZnZmTXdXaUNUVld3TTg3R0lhRjhWV2kxc0E2Mk1nem1OWWl2NDgxb05SV2xOdGdacU8rejZsQ2l4cG5tWVhTMGREMk05Y0ZseHFZa2lDb0lpV21qY1JLclpyVnA4OXI3THJHaWVrSUdDS216T2VzOEpPV1pmRDl0Y0xSSGJyQzBEeGZReTA1Um5SNjFOV0dpOWZVdlcvaHFhM1VlbE00Rml2OXZ3RFVvb2UyN1JUcUs1cDd2dmFSYTcyWGhTTzhEU1FieHVXVyszbGJWMWdXVWpZUWRvMDNpeVl4RytENVFZWWVFL0JmaVh2UHozZytQcmFaMU5pSko0VnlIZEFUbFRXQ2lJems5OWh5QkVmM1VOeVF2OGV4L2k2OXRkMmNaeDdlL0g0ZEhmYWpuVHEvRThFek9vQTUyUit2ODVuY0pzTUcwV1NPblZ6azdGZ2tqdlFPM093d244Q1IwS3RqbUVpcCtwNzBQQWhnWGRySmVYdnhwdHNrOUlPaGp1aE9ZREIzL0lNTzV6enlraVVESUszYURIZzNMMUtma3NkM3ROd0tWVkhCUDNuZStEMnFWNWdzbTBCUUY5QzlBSnlOSkRBbERlU21MSEI1eFVXbVdkaThydC9TUENJNlZ0UUZMNGZod201YnRkS0l3a3cveEk2Wit3SmNQRUx5NXk1bU9zQjh3WTJURG0zd1Rvcm0rZXZ0WHJEQ21uWTMvUmlwZkxJeG9wditCU1RlcUlsQ3pzaTJtYWdibndGQmN1dXJ6ZTFpL3ViS0g4SlBBVldjSU55QjNna3RnZS9mb3ZIMC81U3oyd2h0THo2U0lIQkNHa2xmeGxwZkcyZ1RPdnY0d2hVcEVlUlkzdVpzSVNxcVlYTXZXWWI2b05LQXNIYlJ3dUgxWFByOFdiMDA3YVhtUVBqOVZYKzJ3YnVDQ21hcDMwVDBTMys0Z1B3OFRNOFR1SUs4N3lFRTZ6S2twVllQZDZtbkUwMEFPbm0rVnZtNVNneUJXdlZIL01yRHZMMGFVMmoxanRyY3R0R1lDWFNVbHhyTnVSZU9pVlowTWxrOVpvd2ZhamV3WlRtWGVFanFGZWFnTzhzSi9tZXM1eUI5QndZUkF2MHVYZ2VTTXdDb3dycjczVmcxME5kV3RIdlZMNlNyVm1XVjhiRFhmam5iT0VjYzB4c1Mrd0V5SGdkRDdwdTlHT3Vod1UvM043RVZxekxwM1Z5V0d2aXJOTGsvTS9VTEVESnFCLzB2SllaZzkxMWhYcGppWGZVZWNoTEl0R1dMdkYrK0ViYUtEZ255Y1pZUGpaekJ4M1hGYXRRYjNGSDhjbGtwQmtSNTdQUWQweFhrQjRNd3grNEQxamhWd1Bhc2FYTGxhNlRyZUt1UmVXa1R1bnU1TlZtUktzV2t5RXEwSS94QVdFMWcyWWI4ekNSNmI3clJUSUt6alVzVndaTXZ5WnFZMXNpWG1FOEh1S0V4bjNLMWdqK1hLaVplN0VadEJOTVJwTEhadGFvUTgzaFlGZVJBZFd4U1RERGlBdWEwcm8wakdXUUZHUkhmcnNqZkFSbkNGb3lyT1VTUGVSNzc3YTk4RXVQdm8wSDhMcXc0UEtRWHlNZzNEdDRTendaYjd1K2wrOFkwOEZ5Y3krcTFyWGRsbndkN2I3QVVINGtPV2xBNEhFYk5uZUhabFJBNWdxcHpCMllKcGFFbUdnTE1rZ2xVdDkxN3M2Rzl4MVlheGZ1WHpzSlUxWmpnRWJSRVB0U3RTbTA1aDdhVDJBQ2J5NVpmUUdEVGRqekRWZ2FNelpZcFJFdVE5aGd5OU4ycVFMMmVoSWljT0hsMTl6b1NoYzVlOUFKR3BQRFpCOGRhdzJkWlBQd2pDcjdaalN3Q2pSTWQ0bWlNYU9iZXQrTGFLSDdYWXJrNXc3RVJBdmJSZjM0eXBoTlFFYURCNnpqVWdadlFya05DRldoWHZiS3pNRFJzN2dHVzJEN0J4Z3o0enNiTUp2cVlLNmg1ayttR20rWHV1L24vZTBBSDdweUFVdzN6bmh1alVWVlFjNFFkNWc0bk1xVVhUV2RkTWRjL3JrUitQN0lzZ3FWZnVWd1Q0d1VGR0hGL3ZMQngyL0Y0RUdFZGlJWGxSd1Z4TFNxWExCUEhGakFxbzlmOUtkMXBQYUI5QldoN2FDQ3loTWpBVmtsenBmWVNzQTdkQ3I1T2dwbUJROW9MdWtaSVlFc3NXN3o2TFpaWHN5OFRsdXFSWXFpVGhDdnRSZEZlczNYbFlWTjJEN2Y4cEVnclVESlVpa0d3dzBhUVJtaldhZ1pPNU1Hbm1CaE81WGJQRjhtWURBN2pTSU5QSXZWNUd6WlRTL0R0VkJndDhhckR0UHdMQ25ZZnJxRldLS1lnZmMwbVBPUVF1WmkrUWl4TVZIQTlmS3UyTm9WNCt2Q3Yrck9SVnhSNzVpQmw3YXcrRkJWZ0RGNHdpTERrNCttMFVNSUlqbkZiMm8vZ3lFSVdUcWdlMUc2TTlsMGZHUGxnM1ZvOUV5NSsvZ0JOV3cvRGtoL1lYNTBYSGRJU1BGQklETEpENCs0KzJLejJ3R2JCaExmRm15N2tjRmtpTjJGZm1VTGVDTHkvVllZazRvOGFOT1dXSGVSd1c2dWFoUkpNSUtnRW1wWEVJdk13ZllJWDlidEdwTS9kM1pJU1hqMEhJL3EwT3pSc2FWRnZTU09CVG0yR01MZStUbVNSTHFLbVF5UEpBRXZzQ2ttZFBteE8wNi9aK2hnZFZsWFBXVlhCNUlwYWtaUHFxbnAzcHV4aEJjTCsxblJzeVBOZHFvdnlLNUZVU1VTeHVVY1JJOExSQ0xqbGZPcFdCRkpjS3JoVTRnSnRjMkV1bmpYWWhtTkt0eFlvbktSQ1l3cWdJdXNHSWN3V3NyZ2ZwdjA4VTBjeGE5Uyt2N1NERlJTMm9zUGdLaEVKQ3RBQ2hjZHhQRGo0bk5ycUpzMHl3L2swN0oyL01xR0JsOXBCc1FhcnVKU3VFbzd2NURiT09taVNzTmlWRVh2bVd5d1hzSytaYXhzRFpuUVArbTlGejlpdVBXV1JnQmluYTdqSUNVNmhWZnJqNVVhOFN0R0hUV1N3OFJkZDJrcUE2MlE1U2NmaEVtbnZHT1Z1amJOenJMcmdBY0lzZlNQa2kzU2xGS1p3bjBEdFZWVmZkKy9KSVZYdUVYNVJOZFJBQjhXekpna3ZkSG5scjRpWnBQQ1R2SS9HaFpXQTN1ek5XVFNkSzdtWTBscCt0alRnemhQc2tRbEpQWEtnMHFtNGdsQWxyT3BrWmhCNjhFS3F3UnBkQ1hET2dtemxGYjNqeGhRcU5tN2ZzZkN6NXhSQkdtL0cxWDFDdkZKWTBJQXp1eVVWcjhxdXZrYkx2T2FISHdlRzdPWFZJTHhBS1dYZXVvVEd1VDhvQTMwWS9jQ3RHNjR6aytnbHJRTXV5SWFWcWtvNXRkVjRBZ3JJak94a09vbEFjQkZGRU9MdHh5M3pHMjdPUXB0VXFPaVRHSXl5NXQ3Y0JkdmxoWS84OTBESHllMWd5VDAxbXErbUEvYW1XZmxBOFg4bmlFSmV3NStNSWNMbGFiejJ6NWQ3MC9uMFZzdXdGc3U4SGhwV1d3cVpwRG9ucWl4ZGxiVUpONUljL01UdzhnNlh0ZzUyRGV6UUFQa0JMNFp3cHJkMzJLYlhrc1JCY2NHS0pPNzYxRTRqUnpEN0l6UWZKb0NBT3RzUmVDRWIxS3JmN0NqSDVqVWViWDJNNytzcXVZWG1WMWQwc0o2OXNMQUNzRUFKZ0JObHB2SW9qVWtXeHdvTEhjWEVmdUY5Y3I1MWNpNFJlVnUvWm43aGdnbXJSTXlRM2E2azRyN0xqL1lTQ2dham9RTHI4VldxRjE5TTlLVVREcWZqa3kzMWFsUERxMDV0R2JRbk9SbmYwdnJJVXp1alVFR3lPamU0aWhGOThEcGNjdWRlN1YvNDlxQzJJR3NWb0M0WVpXeHBlRVpJclEzNVVvZEE1WlNyM00vQ2dXQ1BKdUt0WmdFQmZMbDhmWjhlWGo0ZEkzZGg1bjBETnAxV3NLQ1FXdkVZeDdSdEYyVnJXamxWMC9pcDVNRDFndzM0TExycnFZaVA5d0ZlaEpzSGtPZFVnZlNJd1RjekdvaU1OMzBaZ0l3WW5iQjlOZFJhbWUxOWZtcktnYVNxTjFHR25ZWFEwb2pwMWdNQjY2VXJuSzEwM1B0VUJPMkphUWg3dWdGS0w1RFZ0Y3pHRUVYSE5pQ1JEWGd1OXJjdE1DYmxzeWo4YzdENTF5ckR6dklzaHdMeHY2RnlNcXZVQXBzekFvaGtjWTh2UTMxOVM1VDZHa2dWcWlKQ2ZwNmZFTVFsR0JaZGgxN29wU0ZtSjh0aHBaaE1sUFNmMlFOQUxqRFFKbFh3ay9ZYzQ3dUMwVHpLOEMyd2lTTjRJblJjK2RpV0lqMTNucUxoS281QW1KM1dZZTd3ZTUzcUg3ZlRsL0FXY0ViZFUzUGYxZmp0NXFBQmFoYUp2b1dLWGNwUlFtZGhQYXEydFNGVnBKSFZoSklURG0xMEsrZW02clMyempHdDcvRTlhUE8vd0pUL3VoRU5BYTZqNHdPaS8ySm5JYjhYeHA4bHlXL25Tb3hqT24xZG4xeWhRNmRpTWVKV1JmN08xVDJTV1VqTmRBUlZUV2htSEdpMFBaak90OXo0dUZzdytUNVRrWWFrK1pJTFpCam1vamRMQ0RHT0NCVnZJcXRhMTZqaVNJdE4yM2g5TFVQc0dkZnJSNW1tTFpWR29DZFUvcm9WV2tkRHl0blNGZzhtbkwwbnEyM0ZRY1pTTjJ5Ym9KWE4xT3o3dmFRWkRUNHAreEtWSm1LZFJicGx2MHdCK0E0SmNYaUV4c3BNTlhONUpsV0JMQzNwTmR3L2RNNU1lVGRaU0FpdlJIUVlUVm1XL0JWWCtpUDdaYnNjNUFDL3ZnR29PaVYrTkQzTVozc094aktUU3ZEdmpQRVNSWUFnUkM0SXRFSTFQRmliV01tcERnenBtdFRkR1dOMmNSNFJKeXJyRG85bmJxRGsyOXR2cHR3QmhkS2RoRTN2eHo3U05WT2x6SXJtaWdVbTlRdC9IZkNNb2JBdU9waWNzbGE2UFk1T2JjV3o0cVZuVHd2V2hKcUErQmUxUkFGVG8zV3FTazdnem5ZWFlhQ2dzdE1aTVducHlKajA1cmUyaHovcVdPOEZacS9XbWVMQmpSRmVKT2hFRDhHWXpiazFKSHVvaFQ3UlN5ZXdSeUc0MkNTMG9rRDdDUTlwdmxUZzJxWDU3OG95VXR2aVFUQWpYZVFiaFVaa0JPZWw2L0EwdzZyR1A1clA3R3ZRZ2JJZ0c1a0tLYjNnMjc0QjdpWHRqVkRzcE9CVHdCTnBNYStOeXBtYXdsSGdmY0Q4K0hVTjlBSGlKeWpGYkVkOGVlcUFXWjlmZmRibkVoczBFUnB3Uk8zUUlRL2hEejJweDVJdXBTUStlSEVIRUI4bVJRb2tFaERXL0N3R3doTmhuNE5FMmhXNDFLbjMrQmM5NE5XaDJ5ZE9HYjFZQzNpRDJiQkxJNzVxSHMzMDZQZnNEamtqTXpaU3lXQzNDdzY0QkhPUWtYNVlLTmN6ZHc3MVN3ZzM0VFB5RzBVSm80TWdkcGk4cGE5dVVVajJHOXp2VDhvNDJLNC9vVUZ5N3NjOUpFdWNYNlY3Z1dmWGMzY1pLenFJZURpdC9EOVI5UnZTUklvQWVvVXM4UjRZcER5K3JRR1lHR01YSkNmU0JlbllINm0wVDhGNnQ4TWpOTmxoV0c5Zi9aUGZZdVd2WE8vQVM5eXh2eExUYUxUdC9OSnU1OUcyNGhZWk5uUThYWllGWGFvOGROcTNrTVdwanBTYmVnTzU1VXplVXVNcUxXRzNtc0prSWR5SS9lNXNMVWt0K0VJeVBnVm02SVQ2MEhPb1ZhL0Fsb1Q3THQ5VW1SZTVoenp1ZHdrVjZVelQwSURnOCtpSExybkQ3bDcrYmFSRVlZZVVVRWZKek0yQWQ5aXBTNnRaVVlkZGN1bGE5MGRGYWRMTGZTdVdOSE9EL1BkbE8zRWVKcGdPblBjRE9wY3hPSndBZ1YySTB6YmRIRzFCVVRzbkdvRFNnQW16N25SeGJ4SU5Gb0VNOU1ETU1qem1NRmNzMjNXdmpBRUhydW5zckVobFJlRDFEaVpCcDJPMHJPeVhIZlFSRzU4VWhRemU1TUp1bVpLQ3F4djk3aVQwL2FJUElrTU1CeDA1UWlZSlpLRnQ1WkdEY2RSMjBia1pZMmVTRm02M2NtZGZWZmdyVEVRTFpnZk5tUnRJZllVeEFNT003MUlRRHNsaXZSdklqYWg0RnJiYWZrM1FwWEJCaDY2ZEhZODVDeXNWZzV4ZURwdXVybmRjVU9QSUhDaTl0S1lMaktCYjArSkZsQXBIT1M1NVJBb0tWdVV5ZXNwdEp5QU1SeWNMOWUxNTgrSVZXaUZPWWF3OENtQ2tWTzlHdTVBMm01bEdjRE9Bd0E5M091Z01KTzlNcHhVNG5rTlBrNG91UEM1WkV6czdrMmZYNms3dVhrNGxOTWZmbUl2ZC9GZ3dNUzRkVFRoZW1DOExhbDlzeXRhUG1YanQ3TWFENzYrUEM0VzlDTXFwTytZL1kzOWZyRXJjM2JFdVNPYmY3eWdaUm5aWnBCMlJPSnJpaStzSEk0ZFlqSitSWU9GZ3ozQ01YSnlFWll2ckZMdzd4emI4V1VqNDVRTC8yVTJ0YmlVbUo0Y2ZRdXd0N1ZJK05tWXd5bEQ2aFJOOXZuYWFwTFhXSUQxOEFNZlg0OVZJZ3p6Lzd3a3dDMUkwbXZheG5PMEtpVDRYdXgzaVNTZjhabGdCMURBTXprd1hYYVVZam8vNWVqY3F1Y3U2clJQQ2tKNlppTmU0QTZrb1hIaGh5ckVhOEMzUTlJT0NldzVadmNWUmxLWkNienh5VS8yRWhBYmRvUThuQWxQZjhNMGMzMDJ4THhsSXVuODlMQ0JyTHI4bUtaS01JbGw1SzZhMFMyRkhGVDJKblI2WWFacFFTL2hYWG5vU3JqclZZY3JYbkI0N3F0Q3NUVzk5bkpLK3MvQ1AwM3h0N09XQVA3NXJ1WE1MUy8wSzk1TnNMUFVTckpKRktDUmFybUJHMktTQjV1Q3FheHkzcHJoMWVDTEZyT2NpUWZNdk04V0trVm5aT1krSytwVC9PZUdGRHIwZ3pla0hGdER1TUxsQ2VWbHVJMTR4YyswZWVXalNNd1M3RzdIMzVqRUJacW8xSy8wTVErbUx1RHdVOUZMbXgrZ2lLdmUrd2JYVE1jMUJ6SUJqOXNhZXo3WU8zMnlTby9uRTdWM3Y4YUh5NDVRRGJHVVI3dG82Uld6MWRPR2VSb29QNVUrRFlDWnB3ekd0UTlDWkVWMmxaSWZSS1pncDRYME1QL0F0RHBhRDdHS2ZGYzFlc1ZSV0RqbFlROW8wMitwT05lZDQxRVhvdjVYNEtlNmJ5UEdXV3BXNXAyQnk3ODBYRHd6ekc5ODJvM25mN0ZEclVHMjZZWklaajNxWExKQ2pFcWliekxXMDRtcFFZZi9oUGpiOFpFdGZNeXdvaEdWYzlxT3R4RHVtcEtnaVYvUEkxRWgzaVRaOXNzWlNINmFLckpGbEpLalBVNkY5Y3dYYnlTOFFydjNFdTgzYmJhTm9GZGI5Ym82VllSL3FUL1ZaUjRpZjVSVUxBM0RJcWc4RDNUZGY3Q0hvTHBNUmVUSy9vcVZ1N0QyalY5NUphMi9zRVlUbHpsdVMwWkRpdHdZaU96VE02N2Mxa0Q3ZURqMndnUVh0Wmh2aUVJNGlqb290UGVEbXhwcERCZCtVemQ5UXdSczhDUHdhbUxvaWo3UndCR09GT2JJUmdZdUhhcFNoZDR5eWtibXRIemJDRjB6emx5UU5JblZkOGV0aFdmd3JQSEJRYXBhYy9STmQxbUYyaEpQQU9FNVZxNytUS3gxYnBmRmpMcFY1OXEyenE2eE5nUVdyTWFwclN1VHF1MUdxWmFhSWdNOS9jOGZjUi9RZ3R4dUQ1TnliWjNUWjJoR0UwV3I0M3ZqV0U0aXlPaGt0OUJTQXc2QzBpbnl6cVY1UEs3RVIwMlNSb1c1MDNBNUt2ZXVVSTJPaE1OVHFWL1lMNWhUNndCZVNaOHlJTkhRYm1sR2dmaFMyK1ZRNDZMSjRJOTdQUjNSeVZ0Z3dtZUVZTGlqZmM5RkQ1UE56YTBDL0VtbTZTVEVWc3NjNUNkQis5dHptWFBQWXltRE1HaktBQURpT1Juc0pDcHBkZzRsYUJjcS9GMVc4Yy8zckkxK1VaVG9CQ2U0M3NObWZQOVBnY2NaOGdwRytVYkJ6ZVRVUlhjSXB4emc5alJia056REkyTXV3aitmSm82dUNUL0xhNEd5eVNveUFxK1BjYTJ1ZFRXZ1R5QzJnbW1wY3B6Qi9qR1dyWlhXOFN0M1pRY3VXN0lYcVFCcE5hTDV4TXlETytuUzNyMEVuZmM5MzFYUjBHdTRGaG5tQlVMV0djK21MZ2tCQnlEelpvQXhSa3FRQ3VQZ1pQUDg1Q3BHZm1lclFRby81U3luZnEyZHExZ21xb2o3U2w2bGsvNTd3UG5PWXJrZjR3Q1NVN0tsdzVlQkZrMFBOaGNGRXBkRjVXblRNME9vMHZOVnF5UHhMOTU3eUdHZmxlM0h4d3E1YXZxcHB1d2tLZDBCc3EzUjdhdlZPVTBJZENkSC9HVVBRVXJiWFVwM3BkTXhnMmROeXhmMlRXWlJaVlBEeG9BTDZhL0hDOWxUVXNJRzlFQ0Y5TXRnRDlybnFGU0hBdE5wbXJMczZTdU8zTXdjZWFHeWM2YTdJbGVNOXBPM2ZOdjJXTU9Cb0h6WHdZbU5KRzdRMUdXUFlGaFdPdkV2QjFUNmF1RGxVNU50NGFiTkRWeG5nYURQZzRyWDlYMUtIYWk4ZkpreVdZQlI2WXRGNmxsM2J3SEtsWnRBMklNT1hLV2krc3JkajJTWFdRclhqRWRRclFRd1FONlBQSk5OSWUrK1B3TGpaaVlzb01mQmpLTVlvelR3dS9xMDVXMVRncE9UU24wWTFIbEpzOG1JeUdBSUdSZUgzT0x2bWd0SFRtQTBsVkF5WVpwRlRRZFVDWlNzRHJaaTd4TkFmbGhLa3RhdGlxdXUyMkFZTkFRWjRGSExXb1N6Q0NRdHBWenM4cFBWb0wvT0ZkZk5pQzdsUitVMVpMUTg3dGpJUStaZ1NHbEhvcmtENEk3dGdPL3RFRWVYOWlTNzNJenJkNjJ2eGFsYnBGcWZoZW9mYlNVa3dscDNvbDVsOUVGaE1DY2pXSTgwa1YzMG83MERXRjZoVUp6SXRkZkJackUvZEF2L3ZmS2VvOGlQazdxR0hLSVIvNUJkUU1EZnpPZkdZTGVteGVqUGx6Qk1GWExyQ2JUSTBTRkJTWDFZKyszWW9xZEtxL25tSXpXZjhnY0VGd1hpMzM5L01mcWFZVFhNNDQyMlBzbGQxd0NMY1ArV29LbTdQYlY3cGRHVjZhQ3llUW1wWG1ocGg0SEN1MFArWVVCWWZ3bW9udmRoQmRjWHd0M1YwSnRrSlFPbXNnNU9zNGVOb2IxL2FJZzdxcXh4UmQyMHRiUG9ZdWQvUWdnUUFmRmN1d014U0ExeGh0Q2ZLUXNmUjJ6UFlicFRuaUtyMmF3SG5yZHhJZUZrbjJnbnBLTHA5VVVMRzlNWHRXMEtVWW1FeGJCazJ2MUZVNHRBeExkR1R6Rk5aQmYrRkl1amFuZEZyZXdZcGMzWHhDbUFQNkxESi9jRTNwNUYwWW91YXU5NnJGclgrcStUYWp5Z001NGNnVlc1aXlTMitZcXdvWk00QkVlNE01TXJBejdUYzdlMExpUldJOTZFeFRpQXh3QnY5cnBlVWMvekl3NTNlMmFyUE1Ob054WkpOQ0ZueVJwbmN2a3RtU2loUHRCdGVEZ2JSM0UxYzUyUElWd3kzZlJRT241ODBCT1ZJRndzb3NEaWNPaXQxK0h3bjNzVWlFTi81UVRyVlg2Wlh6bmUrb05IOVhrOXQwNnJhREp0Nklmd0RmcGZOOVRHQzNWcENNRXltTE9FcEdaTnZtS2hLWGMzbXpCamYxTW9tWGJFQWNFUS9kSXJUWFFaYVQzZGdFdXp0TmNzcU5paGlZUnc3ZVpDVnVGc3lKUGRpaFZ0NGpqOWg0NE5JbSt2bEhZRjdCRExyb1NsYkRqQWM3a1hWS05WaGFpSmw4TUtFTDdIbkoyM0E3SE9PelUrQ2ZFcEx4QkdYQ2c4Qi9aWUZ0U0NrRVp1NnNTNzk3WUNnbHVHT3dzSTlSamViQTFqTFpiVHBVWnNrZUJERXA5aHZzNGtCSTRQWGV3eHZSblJNZVl5WkthVkIzQjBEd2x3OHhLOCtiWGRQV0Zha2Q1WVZxYVhDRTdTeVRUS3lDcVllaEhlTkxPQmw5Z3lxNXFZRkJXcWd3WVErWGt3Z010Wit3eXFjRWdjclJvcUpOcVpoejFsdzRGZWN6cG43dngxNUNtTEpXY0NsM0liT2xzOHppZDdIQ0UyVVJZUWMvNTlEWHBWQ1hLWEI1NjgzZGQza1QrNVAxbjdzdytOT0hjOXlRN01POFR0TzNMYzJEdjN6UWtDalRza1dJa1RIbGNwdDBWMEpmSVZQWitPWXFwK0FQUWpQNlVCOGFGUFhiUXUyd0toZnlKWkozcklwMUZkTmVzYk1oMGlYZktvME1ZeDZBeUlYQjhRWng4K3Z3U1RZOEtKOE5hNythTTJxZEc5VlA1TWp6STRkU2huWUx5enhxeWp2dFh3SVpXUnFYakd1MXVCc2pzNHVmSldiaWhhUGdEQVlTYnNZeGtTMWpzUWtHbHp5YjZZc0JhSy91emRMaWEvRXJNL3dXN29qZFlpSFU3amVlbWx4ZFIyNGtzcFdEN2NodlhQVTgvM1RCZzM5NUMrVjV3SjdqVlVSV1poTE1ySzNidUJGN2hWb2lyZ0lFemNJRkxNQ1B1TVNNSXZuaTIwU0FjNmdFWU1KN2dUTndhN0svSlJPNU9zNWpIRnAvd2N0ZHVUSmF1WE16M3craDd4S2lhSmM2Yi9LNXU4bkh4S3NvSDNDK0c4M1NnTVdSUW0zSGk1TXd6Vk9HTnpQSGo1YUVLTENRdTY3SXNlRnBMd1hMT2Qwa1JnMmZNNkozNjRWL0lWT2drYXpzWnI1V05NSmhaQVE1L0U2T0ZPOVpneW5FaG5PbnhhbzB3OEhXZkcvcTFQYWhkeEZ3bGZuMHVDT0RzYjFueENlMUpidWtFVUl1aXQ0RXRyZ3JzUE84dXdaMkRtWGZlUUhSZUE0QzRhb3puYm1YWmZqTVZxMklqdE1MV3VhbTJEWGk3cnhZamJhU2xpbWhGaVVMc1RKUkpxZE5IdW55aHVpSDdHZktnS0FQaXZVVkcvamVmZVQ5cVN3Wko1d1Z3eDlRWVJkc1dLR2lMUlVjWFNZSHJHYUZ1Q0dHb2FVOStsTGYyQ0RjV3dlcTZmSURhU0RMbUU4VVcyMkh3L2QrYmxoVlBvdTF4bTZUMVZmaXhHQWR5Tkp3cVBqY2ZWV2xOSitVUnNjR0pHMngwcGI2dG4vQ2Y2K0RLNjlzakw4Wm9DSlJYay9xUTc1WmtLSjZvTmVxZzVnZWxyNG5vRFpVZE02MnlnampkSFlSd0FiKzdmY3BxK1pHa0VDcWh1VWVUNjJUUXIxYUhGM2NjdDF5T3pDc1BMUlBpbi80VEtrOTVkVCtGa2xPbDdqdERnNS84dk52OUFjcEpKWkF0SDY2ZmE4MzA0S0p5ZlpKaU5Nd1NTOHp2R0hFcGZjVjRibmhGSmFvRjRmNHJ4aXJGNUY4M3JvODV0UWl0MDhudDhvMjYxeG9wdG1qbjA5d0h0OHB3aHovU1R5cXZHU1hkYmxYNlgwVVh5UUI0WXVLaUhPNUZhbUNDYjhibWhKWFFQMWxqaW5QcURqNUZ5NHovcE9Ed3VEcjZzNW0zTk5PcEJQYjJLZkZVUE9MNitRVTNkYThwUGhqY1ArQ3F1NGhZVG1ySyt2ellkbU5tbWt0OHVzZitZbElHYWlYZ0o5OTJ2VGczbFE4WmVJdnNLUEhRWUVvVHJmTHNNNm43N1BmdFBPeUF3YmhvOTV4ejRNcEhtVFJyWkZxaC9VSDhsNk5yTDNTNXNzcTl6ZGc1STN6RllFYVMrclBtVm84ZEZiZnljVW02UEtpMjhOTG5IdWNEbVZ0QjlSOFpSbVFSTE1jc1YzcW9KbUora21mbVpmU2k2S3lqS2FoblA4eWYrMEpIYU1tSzJIcnJROU85WE5vU2phdWxSUmFKRktiZFJlbkZjM0xzRm9ZaUhTYTZHUEtUTTZHQ1RCbjN1VkpCRXNzQTdRTTJBcDE1K3dxUFNRdUV5OGNROG9YMzIyZzUwL1orTkgxRGwycXd4K05hK3BOYUhQNU1yb3ZqS0NvK0FZeFpYbnpDemVnblZ0STVpU0VkZnVYR0lMNzhGQ1ZaNmp3eWRrcGpSRVUvWVVCNzQvY0lSa0tmYVlhUzYzV21QSTRqSFNucjJuT2FVNUNobDIzQXdhRGpMT1NOYTdBN0FIa3FnYkZpbk9teCtYaTZBeGtXY3YrZjVyT1dHUGVjYnJBL2xDdHI2R3lXOWRuMTVOYmFKMUtLNnNSZ1RTMk93aGFzU21CSEJTNVhrUjBDang1NnBEUXVNSSsxem81Qjhkc283eGtKMDEvVUM1dWRQTnBkZmdaaU1vYUlqTmhzMFVuNGpRTDhTaXlWbzZMd3J3WkRPbHRCeXJmQStUczdFaytMbmJqQWJGeFlrQ2QwbkdSWDdTTWlKTUpER1hGUzFlSkZFd3BPSFdub2ZDM2J6SERobmFpb3llYXpxbTdaOE5OeFNnUWlUWTRPaENkK0VDMWZmMHcwSW5mMWlSUjRmaGNoV1gvUHllbVh3bW90Rlc0OHhHd3ZVREo5Vit4dWU5TytEa1luVFc0Qkc1TmxISTlUYjZnTDNNRUJ1UlRCREZ2bDBxbGVzVHlpWHlGZHN4bmdkaUZ5LzRveGZwZXdlNWZmalRUaTVFQUR0eXM4bEVsT0lrTUhrem15WG5SRll4T0FsZWt3V3B3VStBT01FOFlacWRZcFdvYlNqWkt2ODNRTk4xbGVHajYyNmw1YmI2RWxXcGRsUlcrcVdwQXpuaFJYcEt0a1hKaUdHUTVJWVRwSkYxN3l5Sk9SeEgxejRmei93a3pScUxVTFljV0lwd0RMNkVqU2gvblZYQ0VqWDJ3bk1DcE93dksyRGhDRy9kL0hNTTVjYk43OGxocDZzWG5pV3FoT2Zrc3YxRzRsTmRrVDRUcnpmSHpXMStHVDFYNjhRUjVZNFJPZnVzcFZlak9Ick9vSG5WUkRQVmROeUNOa005UER5eHhUOHZGTXV5SVB5Q0MvbDRQR0RxL3FKKzVlS0JlZFREUzlJRlVYVDVHdTVka01GYi9WR1RkcEYwTmZQZ2VCN3JLRC9yU3J4QmlCUnBUeXFzM0hucGl1M0xUS0cySzA1VEwrUTd6S3BkSUc3NGNreFp6NEwwNWdXdlMzOCtiSFk3bGFzMllVZ1pEeXpSbkhDRVZ2QW5hL1QrelNlYys4aWVlU1dpVU1SZjNNSTltM2xpMm1jUjRWaUtqYllMSDNpdkhsQUYyUUtITEo0a1RMeEVGVTZiU2ZnZGJveFBjc2tBUmZWbml3aGk0N0h2Um1RcjNOTGtsdzBpaHU0WGc3ZENCb2kzcStjSFVRS3dhbjUrUkV1SFhiZFovSzdBKzltYU9wR3Z2bU45Unpad3I2eERhQU1sYTNlSlBNd3c1and5cHA3SHhndWpOb2hvNnRsZ1RoQjJRSUVPV0hyYTJKck1sNHpOV3B4S3dIb203RE5wNElZVFpyQnh0dHpCTG1udjJ5RzBHYWI4UGhFTWFBZzk4dDZBelhveWpqL1QzMnRUZTAzSDFIWHlWMlVOUk1KWjhya2UxQ3JKM1hsRTJUQVBUaXVsZi9lMFpkMWRiQ0xhd3dsbXZDd2NmajU1Vi9jQk45NzBpMERHdFordXExbjZjbFVzMTZFR1Y5RG5nUDgrQm4vcVdZa2M4SXhyNDdwR2VtSTVLWFRCMWZ6RFphTWhWV1RsZVFnalV4ek56YTFrQVBCcHQremZ5Wi8wa3p6c09jMTY3SUV6STV1SUNRVk1rMmZ1dEVNUTFWSDBjQk1SNDBtUjdjRzR2SmdWY1N3Z0V4U3RySHpXYjlacDlxTWVoMWJBWkhTRnB6WjliY3ZBNmdKV215cVREVXdocTA4d0pvZkZsc0dNK3ZjazNNaDRGeU1JczNHbFg3aWtjdVNNWmhWdGdWSW5LdHRpWVlteHFSeXd4U0pNdklaamwwelZMdUhRMzN3VHZldU5LZ3l3NU9BUHdNMnljK2FzaDJ6UzFjdG1hSDNmaU1ZMVExT2wrdXgzcVpFMmQya3BvU1NLTjNlWGNCUzhTZGhKUjgzSmlIOGVTNmpZdjUyV0FURXEyeUFVNFF1WVovTjVSd3E2dnIrUmtoSytHY0lYaXNtb2pRdlAzY3pnbUNWUGkzSVZ2YU5kcHBOY3hHNk9LV3RvM1ArTDh0ZE5wMWU5VjIrT2YvRDM5b0NuNWFBUG1iQWdOd05jL0tCZkxPa2NZaHI2MVRNR1htS2FMRVpEN2ZJdUxsNC9NOGxBYk44dzNvWVg2NHk3Yy9lSVl1NlAzUzVUbURIU0lnRDQzbURNWmMrR3dqc0ZwS2U3Tm5OdCtFMldGTkxlRzhWYlFTSHBKZWNvcTZLbkcvMzdMOENINHUxU1ZQcXRQcjZOVkhuTzFGR0o5ZnZaMnpSZm9YQ1kwUWpRejhDVitjUzJxczJPcnZ6amdaZEtpbUdYMEdVL1psUFVzQ2MrTWxjb3lTRzBmNnk0NktiT0Y1NGNobW15RXFwbWF4TXdYaW9LSVd0YVdRYTFnMVhHVURuU3JiLzE4SjVJZFhOaHAzdHA0VzBBYmRuTjNqQXpWcThFTWRLSjh6YWUwQlBDV3Rpemllc1RwWWg5dlhrUXFKcW44TDBlZFlKengxSkY2UzVla0FsTld1OFZCQUJrYVNlbDdNRVo3T1ZRSmZZQkVXaEZZMnhPc3NiK2x0TXdManhPMmt3M0VDcWJITDJDNXNwQUhLb04xQTJZdy9abDJDRHRzN3FGTGd1dW9LMEtheG5BS21lMUJYdSthcWFjZlpHN2VPZ1pKRW5rT2VRWWR5QWpRcDV2UnpTSnh2MzhPRmZwWm83bk1Rak1uOUdjNC96L21YamliTE5KL2lTVDE4VDdZblJrUy8zMXQwUmh6SjZnMWwyNnNicVBQVVgyTlBCb1J3VFR5Ym1hVll6RnRWOWdod29jWGxwVVdacEUzZ1dkcEFsU0h0d3BjVXpuL1JLbSsrNVpYbm1qaVY3Z2dqbWV2UzR2alYzRlF0MU5EejJsNWFNVTRnMzhKa2dVbUZicnppQ0wyblJndGl2NUxpbG1mS3NsRTdZdXNDc0VVeUN2QzdYZGVJUlc1WG9vbEh4YWprTGZmaS9tVTlWQVhNbDJocFVneC9ObEU4OHQ1UWo0dUNTcE5SRk5rZDY3R3FiZzFWaWE4S2tQc2pRcnJCc1prRzI1MXF5U0dpSlJsOHlla1ppSEU2Mjd0S2FDUFVNbzRlOHN6d3FzNnBnYmJBa2YvTU1wNUw0eVJvMUlFUC9OZ0FuTlUrNWpQOGtMWDFtdEFQYjBiSW42eTRyckV1a0h0NmVmd2RSMnZlSW8rMDRpdGN3RWRGZDJxamM0TXdjcTB4Z1MzR2tPazhScHdrbnFubkdLQnN4YUk0M2pkYUlMb3haempBMU02a3Q0cWNoK1d3VXExd0pWT0RxVzNRNVdDYitkWVVoYXB1YnZDNndqSGt2eHF4cU5Bd1NrbExSVXpINXZzeHQwN09CdUVkSHFzVVYyZ0RPb1V5YWMwVVdld3RDNDhPaGlvTW55Q1ZKOWlUVkFpbzF3UUU2VXRvYVZaUHhzcVVFd01Hbjg5WXlIQ2VPMHR3cHRYeUNyVTQ4UkNPUlgxWGs5M05RUmRoVTZRWm1DSnZjK1pzd0NOcDlXVG4xUG9nYzAvNDRWSm9qaiszYXZmZGZuUnhsZlhLaHZkaFo2T3pRYVJ0aFR2UlkyM3VFWEhja01HWTNVUmpjS2pzMFRNeFloR2d5NjdWSWliMWRoYXNkbGRVU0cwZmxiaThKMUdDTElxOWFNeEZMK09zMjYreGsrWnJyVURyYUZXN2kzREZvN1N5d2VsSDMrcjhUNExPbGM4anh3K1FLYnN5dFY2ZVRWTEFUaFE1cFZUa01mQVVnZ1F3YTBLQVNaVlVhekdTZEcraUJaQTNwOHFhM0tIS3I5aklma3BuVE9HN2lXNmw5OVJZek1MdSsvVE5WcU1iSVA0NHVqTGJDUXRXb0h0RUV4b3ZBY0RHdFBmODI2Y2wwdHFFMldERUZqazZuS09YcjRoYkdXR3YwY1lYVjc1b0hocXhwb2dwMzg5dnZaVEZCUGpBT0U5aWx6TnhPNWZyV0tTMW1zTlJDUDhjcXhia29rZjFIVlNHeDlKM1VOdE1ZV1IxUTNZMWtZeXdmMllLRWpaN1lISGtWYm1Yc3RGdWNKblZRUys2eURDNU1hTjh3ZUVNWjVyNEdPclNBd2pWZ3FJMnU1eVdvWk5scHM2TXJSRFJUbElOTFZpRjJOazlKcUptbTJtb00xdVZHb1pMZ2gxcEFNZ0dBS1YxaFliWTAyUzhPWTlhcnpPOVVuS0sxa2VJdnZKQkxJNHpyd1pBZkxjM2IyQjFJcHNxS25hMkFTSnl3a3QybFhJTUh0MnNCL0lmVGZDWHVIenhBYitkOURsQWRPOHkwUHdnRlFtbUFVRGhJWTFkL3h0Qmh4bVpDdlNmYkxrcExNaElSeDRlYWRBN3dtV2k0MkdDTDFRclpDQUdJRmxmUjRpRk5ZUE5QRUtvMy9xK0U5SFhhb0dJSnFQOGpLUDZXVFJtdzB2b0poMHlJTTdCSENXSHpEUGwra3FnUHRRY2pObDdCenJQQVRJSTRBTTJ5RGxHWDJueW5XYzRWanFnbHVOT0pWanpVSmc3SVhzV3NUckJ6aU1zanYwc3Nrb3RDWks1MVlmV2daNU9jeEhTM2hEUi9uejFvdCsxMGxzeEhsVldtTFNsYWVoR1Q5cGg5LzZzeHdiQWp3bE96ZjlVRXhEYklBOWg2UmhzSFIwZVp0Qk5lWHpWTCs5ZTlYY21EV0lSNDhhbHJJY0daN0gwNW5JdFNMMHpxcjIyWWZmdVA5VnJXeC9NQlZFOUpSOW0rV1lxNDNvNUkyNGhrUkViTzNtSWhpa1Ayd3BBR00wRmNGKzRiekRLNUh4dUxXS0w1bDY3QzBUYUp3LzZPRVRtL0VyK2RMQjJQM0FqMVJudkVMalJPaGI2K25ZUHlzbXppZ0NwcHJqMTE2TW9UbHlwMGRNUWZPclNsSXgzOGtTTzMyRFFHbTNkdVQxSC8zMDM1YzFlOEh0a3BOUHJFZSt0UjJ1ZXdLc0M4T0NwUFJEZGZuR3B0RkhCYk56QU5SWFBsT2FhdHFuSUtRMVJ3cytKWXFkQVducjhkUkdQcjEyMUY4aEJKQmo2Z0pIVnZ0TTZxV0QxbDczTStkYTEyam1CQWpVMHhaU2RqNGRVNXFFR1hsMTYrTFFOOGQ1K0VTSFVXNWgySmE1azdsU3p3OG55WjZrWkN5Z1RKVWFoR1dQdyt1Y29sSm9xclZCbDZpdnZmYlVaams2aUZNY1k5RExtSFh6NTNlNDhvWWdTOTNuelQvL0RGRUVwcUUyOHhHM2xISWY5OHpBa0huRWxNRmNiQ2F0WEhKdGNDTDA3UE5mNElON0RGekxJWGRDb1poUWxReEovVU5jNlczVEVVbGpqelNwWldZclZWQnR2OFpRNnZyV2FkZW5TT3ZGdkJNL1RHUktZeUdoWmNaUXkxSGtjQ3BVLzBIWEh3aCtuNzBzbUpCclNGeVU0UU9OWmV3SmJla29VM1VETTV5MWZ6QVg0bGlZeDBRSG5FOCtta2hLaUpmb2UwV3c3bjBhbU96RDRxZWJkRlVOcXp1cWlPMWdCcDhNdHBFbWVzZ0VCa1huZEgyRlRmNmJYWm5OU2IxWWlKWDFjUFBoWU9NbmNpK3VSQlNKYUVZMnplTWI3dnhyemVmdGlYVTRTZjZlMWtzNENVeitkNFBtTzNuMWZVakxtbm1hUXZJaE9jRnZlSEdSZi9NZUk4K05yMWxnL3JPQkJvVEtmdnVSZElpT29pRmJwMlM4c3hZVmRiSzVMbzA2WnB1Z0dGMThwY1psM2MwZGFpTHdCR1hSbk5VbGs0QUpBNitlY0JaNWxQTW1MU1lDRTNmMUZaS1loOERneFN5akRQSmZGb3lBTjJuTFF0UDZJSkFJK3hpakN2MTBFQXRONXlLTkFTSlg1Yk95WTNIL1BxL3ZoSEk4VzRvNjNiVFZ5SVdZRTd5RlVnTkVBcHFWVVNyT1ZpUllXbkc2c0hUMDFsaElKQnZvOTJJZHlVSXhPcGo4UTU4TFVOby8xT1VKUEQvSTIzTGZCV2QxdVBMUGtBNGJFNUpEeXY5a3VIRWYxYlBDeWFDeC93TitidzVxb0hhZU5IeldhbVo2NUJzcnd0bkxTMGNPemZvYkUrUEZHdHlLSTIwODBnMjRjcERrUDJ4c0xRT2tIMHVVNzBPdkN4VGsvbVAyWGFDV3RtVXhzZG0zcXkyenoxckxUS1VSbXZFME4yRUZUbnFkU3hxbHh5K1JPUXkwOUhVUG8xWnlGeERTSDZFR3dzdUJFU0hVN3IwbmhoMjNwalp3UGN5aDY4Mmp5SnZIaGE0S1R2RWp5ZDdUYkRUcWdqYnplT1MvVmtHTzQ0Z091K3Qzd2N3YUZsTWRYMkRtMEppcEQ0dHE2K0FyS0xROFlsY2V0OC9zaEZVVlZCWlIyVHFPeHVQYlBlT2hrNVBZMnhsdDVvK0doZnVNNm42UmdmSGxqQXlyUTl5RGFVWkpVRGM0TDJ0VEZEMTJzaTU4UW13Q2NUd1c5K04yTmwzVENlaTk3VmVTdW9IY3lCY2w4ekJWOEQybGhpa3JwY3lURUpuYVV3dmtWdDhVTG13aUx0RWtJU1d0Mk5qTlNuSTV5c01QYm5Ha2pmenJ1Y1VnMjlDbDJtTHRPaTc5OXl0M3dpaE14cGFRNDUzY2JZMlR4cWpidjQ4eUFiSWtqRmRqekNBSHl0bGtyWFVEcWlaZnFGRTdsUVZjdm1SNWd5bzdiQUVlWUdRNWVSNWRDMUROQXNqL1lPQlMrSmd6VTg4VzB5QWhCME05UEhLRVcyU085c2RWZklKTklBaHZ1SWE1VWxuQmxDVnZPSWhaSkxaWXVFaHJCK1htNnlkd29DME54OGlGcERLeEY5dnlQeUx5V1BFcXJHY0FidjlzSUMzWWs3cWI2YnlCVC9xYU1mSHJDOCtvNFExb2FUY1J1QmNsUTdtbXROVnQ0V1loSk1OLzFnNGpOR3d6UDdQR3NKUU83MFNwdGhkNHIzbm5aaDhKeXRBLzlyc2RPUDMreHF4cFJMRDUvR096MkhZanMyMWRJUUlHZzMvbUhqakF4aDQ2RVp2bXR0SW9jUUlaUzB0V2JUaTM0SCtqQ1IvV0hBOHRkUWk1WDZuVXd5K01TYkVFbEVBK29qOEtIVmU5ejRiSlQ5a0xBVUExaWhXZmNoeURzUlBOOXp4Y1QzaFRaNWVaY3E3QTRwUW94ZzFOUHE2a3NDcFZ1bDVldnZJZjNnMVIrVVZlNndGSHdUUURWMzVWM2p0Yyt0dW9sb1JFb284MmNrU0h3WDVkN053blBaOHVlSzBKdHRKOUx3cTJsdDNKT3U4OUQ5ZFFFWTF5UGFsWXl3VGZQdFRIakJwMGZSdUlwcDR0V2VQRkNrcDBZNjgzK3dVVE9yNHAxd2g5RGlPTDNFRnNFWXRKS3BTalpGdklST3JnYVFCMHUxZW03Qzlmd2xTd3pLZVZJTzR3SlBTZXk5T2lpeWFyUittc0laL0pjTWVlL1FVZTh0bmNNOEtnT3NjQTZ2TzMxMStBSmVqcHI4bkRNZnArcWprc1R0WXhqUkhhRWc0RkwwbHJ3TnlrM3FUTjdUa0JKNytFWXVhRm5BWU95N0xib2VhcVV2UzNRRGcwU09aM0Q0Y2JjV0FTb0JMV05MVyswaVFTdFREL2JwMHVRdU1rbzltaHQ4OWR6dWRUNG9HN093b1Roa0s1TkFiM1Z1K2NUS0YwYUgvc0xmbm45ODlFK3NmRVp2RVRTV3Q1a3UwRk5RWGFOY1pJOXVwbWp2YURDNWdUNGlaVlh0UzF4SzFRRWc2U08vTmVMeWNpeXhVR1M2ZTBrM2FzMTJNdFFtdk9mSFFGSGdCenZMY1FGNEVxTkxadTZwU3V0cWsvMGFtaXJSMjdyNlliZmEwcTJTamRybi9GZU05NXVEb2ZyYWZQUWY3c3V5WURmNzh4bzNycVNudHhPUW5nWFRCNFpDbW9RVlltdnR3OUZqaFlSRkhzSGl3TVdydlB2Sm9MUWNzamlTRzNMK1h2bWg4MVdRNnZENEhjRGtzcWV4Y0FmeXRxYTRZcVFSbFVCZ2JTaDZVWm1QaXdMdlVRMENqTGtRSjBnVXlyVVNwQ3Uya1RxczE3ZFZJeTFIL2JXQWRDRUpkems1dnd3cmNkNndDeTAyQTNDZWpDdnd4R09LZDFWZ3RHd1phK1RkQTJTSGVmbjQvb3YwaU1aRm16TnRJWFJFQTNmdnlocEZrS2gvNmJuUlZsQzB3eTlTUkhXMm1pRWs2YXY0eFFaMzNMWUZTNDJWbzM4QkxGTHJEUWZUcWtpTzJ4STdUbmt4cmUwd0hMMXNjeEpQSEhpQ1NVRzBhSEVVNXlxbEp5cEZTR0VOb0puSm9SNTZBMHBxWjJuVjVidml5NEkvSmZWTmw2WVZ3UFVXcS9sMmZ5QTY1ZUNkVW5LL1JJUEdjNDRpeGdqdHN6djZZZFdpYy9kcFZlc1FFVlkzM3orUzJ2S1UzL04xUmVGdG1GRE4vWGtnakpWV1pwTzVpeFpBK2ZHT2h2R0ZkUVUrb0R5aEJzRXljS1RmcU8wanZMVzMvMmk2RGk5MFErQXB6VjJ4WGVUUW1veDR1RndsQnh2N1NocFJSWlYwZFVpYUVxdkI5ckRCa2d6OGIzMmh2bk50UnY1dUY4SUhDNVBSdDVtUzRBK29Mc3d1K0Z6WUtNT0MwdnFtMmt1dG1UYkZSY1Z0Wm4vbUN2Z3U3WEJSQlJSeWV6aUZnbnloYmJpNmE2WDRmYWdWYjV3Q0FqQWFOeDZZVEdMdEFpMnBURnZSOERVYmtHV240Z0l0MWxIb0VFZ21jMU9uaFkxU0lxZ2g0QUZXMHB4NmxvazBMSnUvdUI1VllmeHVuRWVsamltcHJoUkFqSGp6Z0pWQkRpdzV2d0x1VVY5OTZPRmw2OC93QmVyREhDWkU1VnY5MXovVEtqc0I4M1N1am5TalhXTWFnbERFMzNNK0lYQ2thWmJ1S2p0L2xvWUl3YzdrWnQ1N0xQSTd4Um9sbm0wWHJUOHlOdlBqRlhXQkRKV2tYc3E3R0FSbFMwcVRIdFk1VFZvQVkyZCs4Uk85YlFzb2hnRFZ1dHI3QmFPcTMrMVcwNzFNem05RVBPM1FjTUNEWjNhQzJkaXppSytIQTEwdjQyYkxGT0daNnd6WDE1TWN4UjFtM3FrdFA2SDJnZDBmcVBSNWkxYnRhMC9uaWhsTEh1alFNSGdxWWlYSVBzd2ZVemRuRFVPYVFwRURPeUxpdGN6bFVUOHpnNmp6dUx2RzlhUzExZGxmc1NCZmp3M1MxMTRGb1EwbENuYkh3QWx3Sm95MmY0ZXpsY3Y4eVJqMWdqSVk4ZEx4cEVNTDBiYWFkd1R5TEJwOXkrNHAySDY5a1JNcy9LQnZyU3ZYZ0RPMWFldGIvVm1ldXF4cXpjVVB1OXk4RXhobXpqWTNBejBiMTMrRU82QVpDNnFpbTZhK0J0TXk0cmwwN1NyUzlrazlza3hociswTEttamVrRlc1VmRkZW1mZ1Rpcno3MnIxSFRRdnY4NnhtSmpVU3NVa0NVdk92Z3dkQ2JBRFVIQVMxbzR6UllNK2EzblU3Vit4VzVHTEpQRlg0c05Eak14czdlODlOMzBSS3RiaitWQ0NCekY2dDJSOFlHei9CcldwSDN0VkxGbkpXSmRsdnpGQUlOa0dDc0Fhb1R2SlVjVWxJZlZaaCtQbWQ1OWNnbmkxbHhEY0xLb1Nva2NienBEY1hLclk4SURMcWZxYkNrSnRxRmkwdmxobTVtc2dLSVZSQWJrOXQ1T3BURXk5QTR3dHc3MWtUTE0wdW0ybXM4dVJHL3VuRitvRnFXUk9NTU5IVGtnVVdUNTdpNnpvcjFWSEtYZFFaemNSWFQrMjY4NDFFRzZ3bkMzOEE2SVZDS1FWdjNpelJlSlpKdVNGR3Y4TnhXYVlOYmFNaUc2QzJWRXZSMmEzTjlUR1YwK0puQ1E5dmxtLzNvVHhaQ0J4ME9Yc09vOElxM1J0bXFFYWxFL2RmRWt3dVIzT2JqRU1ySmtuaWtZbGsxeWlJeU1LVERNS2U0WXc4N29FMnpqcmo2RndqNjhseG5MN1laaEZFMktUK0JlZWxnRWg0SmNzWXVqOGpEb0ZhZEw2c3ZQb3E3NktVcVIrQlZVaEdia2ExK2cxd0JFdFM3R29KN0Z1d2tuS2luZnB3UVQ2UWJCL3VSNlgvQmN6QkhudmFwaWdMQ1h4N0hCZDE0Y2szNTN5RTdBaFlXZ1dHQjBINGRZYW9NVVFFNGRXU3ZxYWE4d3hRZkdsMVRVdlBYKzN1TFJQcVRNODJLV04zWVRXNzc0QTlUaGY2Nzk4MGc1YlZnRE1EdG9SOGs0V1JvaGsrR1dCZGdmZ1hoaCtjR2xXUlpPK3ZnNGp3SVNKcGZmNWNvY1N6U1p3N0xkTDQrRE90SXJBUjA1R1o4SkF1YjRjUjdvNDE1dzk4ajJvVDc5eVFIM2RPdDdiOUdhQTFyMnpiRlRWSWJSL3N6K3JHaHd5WmxlTjRyMlltTE9iYVExcDl0N1NxUkpuR1plWFZFRVQ3Z0ZpdlNsMU55RnA5ZUJEc2xlSFVmMis5eXNZeTVPWDdiMW5ta3FpejZpdzFWOHFjbnVabS9CaVA4SDVTYm9taVArazJMdGc5aHpFTEY2N1JUNDdtT0ZxZnFaazNNanovTTBBOWx3dVNVZlN3Qlh3M1d4aFVUK3dPaTF1TFIwZTBzejV5dmordWFDOXRHemR0a2ozTVlVZE1kZkdUTG0va2lSb2w0NkRSelpydGVna1lSOVB6TWxIUjBNOFdQMndudnpNYXV6alpNRmxybm5hd1REaVVQN2FSa0svWno3NW5NQkt1T0FWMlpBY2JpaGtQZnNTU2FHRDNabmE0U2orUVFRUTdPZzNzK3Vpenp1L2lnY1lUclJmaS9nWHRBZWdRbjlXaFBtVFA1aFo4MzBiWmxLTk5RUXZPbzhOcFZHbnJZTFJteUhuWmFCMytvOHNWeDF4bER5dzBZbTBQOXJmOUhJdGtDTEl1bEs4UzJCUmRnTDRVOFhHaVJCSFFlK1h6QmdtTDVOcFB0TGkxZWdFaDdacjVRNlg3Z3dXUUNsOW85ajFFRzFWUHpEekd2djh0QmVLOGx1ZXJScjRzUHU1aG91NitBei9EVjNJRkFtSDlTeDk5K2hZYjJtTmhnZlFYdGsvQjF6NU5PTk00bnBmWXdHR09ReTRpVUVSNW9MMlFSMGJSRmJXQ2lpVVhnWWxLOGM5SnAxZ0g5RmltNVlRQmFCVmFyVnYwdmduRHNqbnh1Y2pVMmRhVWtFQlBjZHkyc2NBTDNFb3cxSENMeW5BQzYwQUlmdCtkMGpvMEV2ZTUzSms4dnY1Q3dWZ2ZVSmlBcHBIMzN2aUpVNFVURGNaU0ozcnNlVkpENk9pd3VtVFZ6aThiTElNRGpLZ2hxTlpDN2F2MjVYQkh0R0VPNUFOcWUyR0JGeGNLYzlUZ0NKajF4T2pic210Zk8vcE5VLzFpNWZZZitFT1dQSk1sZmRHVjkrelZwL3hiN1haMEtxWld4L25DRUJPZkQ3VnlYSGxvVnUrRFNTcVVtNFFKbFkrMk9oSG1tUlI5cytHMEhPd2IwSTRVZkRCZGFtb0NiM2pGTlVtdHgyajhISktESWNJV3pBWGo5ODczbWpjeHI0eHZVcnVoYUZXZFpiS0QvL2dEVjNFd29aenkzVUNucUEwTVhsaXpEU0V1NG82bzVUU3hJQjIwQjhPdnA4L25KUCtnNjBhbCtoU2RpMnFMaE12aUNpNFhhWjRCUGZJMkd3ZGRwdnFUc1lIcTRVbDJPZDlMUllheUo3M2ZKend6ODlDMWhqVGkzaGdSTTFwNmNJTHNWQ3RMS3U5N1lRL29MYklJRGVrTm4vWXhPUUx6QjBnZU1hYWR0aER4dm9kazFkWDdrd1hKVHd0Z1VxQ081c0FjTERGQjlBSjNycldpMmZ4ZDBJL0NKK2RXM0ovY01GN3ZsSTJURkQwaGtuUUVnOEJ5dW02bGgvaEJBd3VlaEc1bDZ2c0M2YTlrQVVIanQyUEhOMjgzK3c1YkZyZDd0VGFtaVNHbk1KaFBVT21lYzhtK0pvaHBzK1RQbzdEQXRETGxiN1JRL2FNVVBEeHlqUmVTVlBEaUovbU1USWxHbk5icUZHYVZZT0hQRnl1bWh1Y3A3dVpkS2hIL2NJM1MzdGh0T2ljTGlYaWNhdkFZY3h6blZTTDhvYkt4ZEMwcFJKNUFEdENUNnBGNG9LRnU4TSs2Q1ByZHpZYnl2WGtsb2h1NWxpaUNpY2NvbzFNN0lKSGsvczZlZVJrRWhMYW9lbTJLL1VUdWF6eEpXR3JJZGpVN3dLcStZZGd1dlpkRDZDQ0JzMnE4TG5vbmxzRTFEOUpnZzJ4SmtGTUxCRFFpR0QrVXh5VE0wamZORkhBWWljaGtXSCtKL3hMQjgrR0R0dm00cTdtNFBDLzFKMDJJMVU4TWhoVU9xcXg0NFNBald3SWhWUVNKMjI5dG4xNkJuUTFFM2owakI0aFhVczFmV1Ivc3MwTDh1QzdBSlBqU1ZCcWJsRFJLV2pMZDJhK1VKdisvODUxTkpUZldUT1FuT0xIdmR1aTBWdGFGb1ZNbXpGOGt5ekFESHBnRHA4aU01MEpFbm95RU1VTFJTdFp3QTdiTk1KUkxJelRBWTZqamVXNEM1Mi9ieWVOOTVTdWtLSGtaTVh2OTFCYlhZQWliTm9IQmFaaFRFeTVibkRrdm1VSk1UUS91WW5YMUtDWkhZUTdyMjdRWDNCNVovNjFzVThDVTVTeGFzQ2pib0ltV3IreXFjZ3RidnlKRFQ3VjU0QzNWMUJmbTQ3TmIxRC9zZEpxamJ2cmtrSjgxNUs2TEZhdmlmSklwbDBFaXp6UzNEV21UUVFDVkdTSU5ncWMwdHlGKzg3SkxvS3lrYk9Od0pybGEyYk5RRDN1ajI1Y2NBVHQ3S1Nra0Q2QXRxd3Q3OTBmOFlLdW9rWlNqYmdhTGF2N1FCWnJiSkhveE9CUSt0d3pTRVp1akVYcHZhUThNbWI3dXQwTEMyckp2dmpiSW1LZmNHaTNEazJCWWgxaXUrWFJ3SGV1aHJacEhVOUlzVGtlUmZlcFdmS29ORUx4T0loR1Q4cldDNDNVZ0hMOXJGMllpcENSR0tqamFTSTlBc3BtZlc5SDY5UHAxTEswSHJRVDBwQ2RsQmwyZHByV3hyaE12Y2gwTUFCd0pocGRKelBWc1NCVXgvTFJaTVZhSmtzMGhReFZMOFVFdUZDcmx3NkdRajhHNnpjMjJLV1RST3J4S3FDV3o5dVAzSHZiQ280QTA2NFJpY1NVdEduelpOYjN4L0xzdCs2Wk5ja3FEMWJwb2xnMXp4TkhzcW4rK3dmWnd3Q2VzZDA3aS8xYkRNSzUxRnJrSFJXelJTQi9aS3B1T1dMREc2TTdwRVdoaFRrYXNGYXRoZFpFU1Nnck1xVExoWTArUmlkT0FzZHNLcmp2MHhVZkNPdUJYRFUrd0lVeDREUTFITHdoaTllRkhFNUJ6UGlyVVVYUDV1ZTc2VGlCUHBMbWRvQm1qb2g0STd5MkpnZWRxVERTSDBQbFo1ZzdWZzdsR3o4RHVybkl5bXFsVkQyRndPNFRNQVlGU0pJZDI2WExUNUpqUFpsZHNjWktKY0JaVWp5VXRQZTkrVlVKQTNzVGo0K3Fwa0srTkUweThmSEM2Y2o5SEpIOVhCRDROMXdmTzE2MEtQR2cvQ0hGNElvNFlaVEdXMUdhVll3WEJJR2kzaHR1Y1h0VzBEUlhRWFM4d3l1Q1pFMitVZi9XTVl0ckt6Z0kvZEtVRzBtMXZ4cVQ3ZTAxc09mTGdvODlmRVljUDZRR1hkb21OWHF5SHJqdzA5RjRUUk9KY0J5ZUx3dnF4TlZISml1dUMrV09mSURTTENVY3JLc1ZuSi91NnpSdHFHNjVPcy9obkNwVDBWYno0cGRMQllIMlVJby8yalhJYnFjM0dnOWhlaHV4VjF2ZGNtTlBJeUVxWVYxT0kxVjRrQTRhYjRUbWdWNUtPR3N1Uy9mNXh4dHl4NVQwQzQ1Q3AydGJXbkRENEZ3cDU4YjRTR1o1UEVuMHNFemlKYi9CT3VjNzFaQ3cveExzWjU1VGlRWDFRRmNjK0lBSFlwempWaDBNZzA1NFRLVzgwaHEveGZIVENPaFRGTTBhYUJibWRnTTB4OWU0bVk5UXR0Nk5aaVQxRGVIaXEzT09lbGJsc3BSY3JPSnl6Z3pEajlPbjZ1WXNWZTVpUndxZW16RjdTYmJodHpEbzlieG5iQUVueHJobERzSUJXZ3BQbUF1WU5wY1Q4bDNneGRtQ3IrRnNQVWZJZVVZZHV2MlBYcWZxNE5FdU9iZEVWMytQeEpFWTQxNWdSMHYyYXhOSWlqZjl2OTJ4Q0FWV2tPcjdGZDUvWW04b3ptZ2pSblJ3RVF0bkVYY2EzdnRnWlQybXI3MzI2bU5EYlkyZS9vaVlvOFp2dU8zOHIxMjFra3laVWwzbWxsNVVGOXhKN1hhNmNrWFJoK0tyYUZUZ0svN0crVnZvSHA0cE9lcUhFSG56dnpTN3ZkcnBWSHNuY1ptQVlINU5CYzlCT2JJRis2QW1aY2hZUjN4NHRndW5RRzMveTFrc24wOXIyaU9idGJqSjdWTGhWTUIrdEV4WlRmRE9IbFhKVHNDYVJhbnUwUzhvQ3Y4ZUFqeFcxeE80K21ndDVMajBWSHp1QTBqazJrM0hmVFpud1dnSEFQbVYweFlaK2p6K2ZqTWtJbFBHOWFmMkxqdm1OOVJFZjlLNWRwZ2V2S3ZpNUJRWUpIS2JWaWZRYTBjRHVRaDRML1N5QTZjTU9rNGZleUhNYktBeFdsb2ZxTEU0aVpCTW5HL3h4RWVnVFppRUw2Zm9zMkVNQTliSkFYT25WdWRLaHR0RWxsNlkzb0x1Y0V4eVpZQ3VyVXVqQ3VmL2crSUxiQWlpdkkwVWVSbTZvSDJUcnVBRm1paXFOMVV1Wml5KzhmTUd5Mi9vRi9vYVJSOGtiK01ORWZ6UVFVbmZTWG9JQkh0Ylh6UXRXR1BVZzFPTCtXVVY2UTBTN0RSK1pkdXBTYUNkQVowWG52Y1ErYWM1alBKYWE2UzI5d244U2M4TmwrakJJTHQwRk5hSG41MHROL2lDRFpxcVgxVk5lWjViVjdySDR0WEtNN2FHTjJScThvaXJiVTdvMzdNTmpDdlQxenlRZXpRU1ZDTlFGOXo1a08wdXZNd3lCaWJTVGVMVHlVeEVJdFJmamI5dll3eHJIZ3ZrK0gyWnhDN0F5dVFYMlJ1TllqWXVtYjJLbTM2TUpCaXFOTGxkZTNGMDNYMjQ5anovdHE0UlJEazNIbmh6dkpOUHNJMitPSDgrbnVuMjRBQ3lQTWVEN2c4UzBUbmIrbVdPK2xHaC9wR3ZiTmI1aWdxcVA0Z1Z2SGdKSFRFSGpSZzM5QmxPS3AyTGthUlpLaHhmUU1WRkY5Q1pTNTM2aVhicFRibCtFOFdzZFlQZ1ZkQjdkZkw3cGwycEhucVFHd1hxeCtQZzllYU1hcFBKMncxcFA0c3NlRHE5RjFPVHZ1QnN6Smdya0RFUHRQQytjUGloYVNGRnVSUDBKaENIQkoxeEZrZHVaSHZGd2x4NC9ndllPa3djSU13NjliL0FZRDZlRnhkN1F4NDRTVUJVOVVnT0JCTUV1d2ZKcG9kS1NsU2JoOGNCQVBKZ0R6RWYyYjBqcldVd3B5cW1ubWg2UVZXM05TOUI2WE9QdldLUXhRc09ZMll1cHNwdjI2ekwvRE4vM3JxNzJ6Wjl1VVhHSGlwMHM5ZnlqN2VZSm8zZ0htSGs1OTQ0Q25WaEJuWHRIWFYreUttQ1RYQmxJQlZqUWVaelhzTlRwQnFsQlMwMTI3a2YyTHFlT2VTYmxyaHJLMHExUzRBNHFEWlgvMXNrR0tkWDNiRCtsamtNUGt1SVUwNVVobTlyaHRQSGdtTmdFeGtocmlIOHd2UkFzOGFzOGFlQWdESU1VM2dYWGxnemFJeXNLamRJbXFOTUFUdUIrZWNsWUdqam5DWCtLTmVrK2V5VUpvallUN0p4ZVVoMDUxMjh0Q1IyQnVRK0h5bThVaW5SZ3A4V2hBSDZsaEVJTm9FUjFpbStIeUIza3dPMkdnNklwRXZ2RHBhL24rRCtuM1M0SXdURUIzdFNxWXVWUmNadFdiY1ZpbytHakxjNnVIb1hTRTEvbDBSekFlUnplOWNlZml3c1BWSUUwV2RvUjExSnltWERudlFqM0R0QVNrQ2E1QjQ1RklrUUQ3NHBHRjJGMU9HOUxValdTS2I1ZG10cE1uNU5CWE9jMDVKSSthS1dLMHpHTHBsVXVJR0hlQUJUellFMC9VQmFyV1pPWjJJTWs0OVM0aUkrZmtjQW1zTE5DVXMvQ2RRSWxvblIvdmlKYkRqM2oyQUJRR3ZURk10YzF5MytNa096RUtJNy9vTG93MHp6VTV1Y3ppVnoxOVdvMVpETXBRUjNFM0tXQmpGZUlpWUFyQk00V1hXWVpPOEUrc3U0NXBKUXdRc3NjcFlNdjBRenk3U1FVeHdFdzlhcHZyMTV4RXFwem5PbTFRY3FHcXB0dVdBRUFodDhzRnZQL04yblVNM0tpSC9VMFJ4OHhPaTA2a0ZMbURLcnppN3pOVndyOEtaUEQ4K2lsVlZ1Zm5OL3NWUzdsVkVJeUNJOTBxL0xEVmNOZHpCdU4xNitDRnB2blBjNllCTk45KzdWcWREd3ZWZ2dFWnk2ZmZSU2t1VWZhcUhYZ3FJWWVYQUNTZHVKWmJMRkRrSDRoNi9iL1NNUDJmaTFIM2h5eXYwVk1jWHBzcXRDanVlQy9qcTlGTmdyYmJLSXFIK255c3NwclJwNkRlaDdnRktGOXVodUFveWdqVWg0ZkhMQnBndTJvMjl2SWZIUTV1OEV0YWRWTVVveWMrNGFia1hiTmNwaFBOY05SeWk2RVZqMjZYUStEZmY3OFI0Nm1QREpubWFRSVk5UVZyQVZqS0xaR21RVDRHR3RGY1MvMnhqS05ocGU4Qmg5QVpBdHV3d1dTTnJIUEZhdHFHLzV5K3JkWXFvekhzcVo5enFkbTJXN0tIaDV0eUpneE1waEI4MDd5MXEveWNyZVhDSVNieGdLbEphbkxGUVc4UzlqLzdUS3pRekRLR21uVHpuYUFYMDFGdW9GMGhjVGZ1YTRsRnIrTDlQQkdneVVFNGdSblF3M3RJeTcwQUVoRHpkVndWSWR0d082RUN6ZXBySlIrcmlZeEg2VTdOY3h5OThzMFJWRWdpanl4T1oveDJhVTlxaE0yMENHWUtTK25rbXkvUVV3Wng2bjFwMVJ6L2pnRzZ2WTlsTk5rMGlGR212RTB6MU56NVI0amRZVUhrT3dEdHhHMEMvQWNnL085aUVkci9qQXJjMTc0UUhqdHFYeVp6YkR5bjlQVnlDbENWYWNtVjdISitUdzdiL0s3cDdHcGxHR28xbnFzNEhzQjN6TndKTW53NUhFRkUyV2lwczdiVFVCQ1R0TGJvVjZZL0xUS0ZrY3dZNU0xeDEvR0lFbU5SS2pVQVVnVTRZYStzeUxQN2RpL0ExcUpCSFMwNlZRMVQ2aW82dzVyQWY3VVVZWFBzWjFOQ3VMdGxLazlqR1ZCNXhpRTlCNGwrL0g5dDRVVG1YWHNlQ1BxRVoveXZ1dVhYYnBndjM0MWZndUxVTDVCeXdwUytrMkVyaVVZenUzb0NZNUV2WXNXZDhqMVlrVXNNWXF3TGs4eDZMbG1VRGxiWnN1Q1d5NWhmbkE1TmhWNDFRMnRNdlk4d1ExNHZDV2VoaEVNaDlzYWxWWUsrVjZwQUlzdUF3Nmd2YTRKdll1N3hMdFFFaTB3OGpnMDAvREVMZVFWeDV1T2p6cGhFWUE3S1BNV3Bjak5VU0lBUWVJWWpEY29MNTFndFVOZFJtNlVIMWNTOFVKSmZhVmZwOSttVE9GTUVyeldQWFZNdC85MVpwSzM3U1JneXdMc3VoeUtMbk5YendGb1llemZMc3BnQmwyZ3A1L0dZNWRLenN5U2VvNzRzQVNXbDlMS2RyT2M5UExGUmMyaklNTXJtR3gzNjFvV2ZYYW9jdnkxajVWQ25OR2o1dDkrZDBPd3E0SVB4dHhpVlE2U1k3Slg1dUhvVUdodzRLZGR5WGt6dU1hbCtlZHk3V1hmN2w2TGtubis2cDZ6MCtic0pkM3ZzcHNjV3dXUEZpVGMvcU45Z2U1U1FVdDBKeVBLdjErS2NDbHQ4dEozU243MytpcmRNT2lhaGM0UUN4Y3ZDN0ZFZGlQVU1LWGFWVzdJNStLNmI4eGtFL2l0bk1GSDBzZ0loSzRQYXZ2dmFtbDFkTlNMTUNndTZ5R0lNVG5wNW9vNkQwS3I2Z3BVMlUwenA0ODVzWCtrK0Y4QklrMy9wczZCUFJ0YW9ZVGVUQVR2ZlR5RXRsOGxGbGFXUTNzdm5vY2l3MElBVzhQV2FjT0lUejRuUmhucDBhSlI0V1duNVR0MitwaXZXMUZ5OE5sNWNSTElSalFMNWtVOW1ha056Wk9BYjJRUDl0UVRZaWpvMzBid1VDczdXWWo3NXdLUmVFY1BYWW90YjY5QjBUQWtSVEt3bloyazZ2UWRiKzJmZzJHZVJqMjBvU203eXllNy8vRVp1YTVodDRjc3Q0UG8xMUxtb1MxYm5RaVM1VU96Q2NoSDJYandMcklIbHI3YldBeTcwMW1qcE1xZ1JZOXVzcURSUGJSZjF5WVB1RkFHOCtDSzlmUjUzTkNIUVRpMWt4OFhHL1JXSGdxRVZXOGUyQ2ZGY3ViRngySWRHM2FVejgxK1U3dHM3VGpVVUhESWx1TW1HNkxhb1FaN1ZhYlFGUlkwVXFDK0ZINVpmWjNYM1AyM2lSUHFMdnYwTDhxUmMrM0JRVE52eXlXRmh0c2FQazMvTlJzQkFaZjRLS1pwbGZKc2c4R3FKdlMzemw5VStDVXo1QVY5ejdNNzhvemF1dFlTcGlFS0dlMlJ4SEV3b1pGS1lrRkVsak1OMHQ3NWxpNFFqYUg5Nk53T2NEa25rVjduU0kwaGxhNEpDK1dLL2ZmcjY1ait2UmdQSkxRbWxQTytrSzBxVHR0cVNCUTM5L2V0TzhNckhPTFlCeGgxT1JPdmZobzhOMVFYNllnOUtkVERVQlFkSldmcmhNMGYzdjhhaGQ5NDFCdWlZT2tuZVdTN0Jici9CZktXSXlZdnBKaEk0VXJnNVhHaVR5Y0VJZzMvbWNCSUt0RDlxbEx1Uko4UGlSQnYzN1I5ZnJOREt1bkR5YXpLVnhaUW9JMmZxeElCRFg2Zk4vVG01T2FyeElnY1NFWGpVVFZjU3dqNWs2MThLQ2dYM3R3Und2eUtFK05ucW1TRnZTNHZVdC9Vemlnc2Z4QkhxQVovenAyZ1hTUllyRDMwTTYxTUdLeklWM1YxZDgxN0h2YVlyVEVCb21TTVoybHp3M2llWlVyZVVmSmsxdG9iZENEK3pubG9ZNFJJaVJ5Z1dVQUVKbkJGMVdVRm5QbnJEYzY1eUV1K0R3cUZpS2ovSk8zZXBMUWd0ZzZzVFpKamgxclMwRGN6TllYcy91Mks0aDVCdkN3eDJ4OEZWbEtjcEF6SXFKSzVUR2d1R2Q5TVFIZlBIWGdhVDYvY2xVZ29JN2JiNHJLUFA5NERKL0tPK01oaS9ySlQ3SnhNMTZGNWRobzBwTHZadkxHUkdaSGtRRVB2OU4yWTVxTVdtYkR0UW1YYmFlMFVqd1ozT2Riak0yakZadTdnRHpISTVPaGxSd1lTT2VZZXpLUXdrd3IzTEhpN2xVQlhUMlp4VUN4ZmxNN3NxSzVPTjZQSGdFTnZLNVNLbkE1K0U1WktEVDBXUlpFMjA0RmJXTnBYYnNTMGNublJMV0ZsRmZkek5BTk1VQzVrSDJSRWRTaHhEMWpXTTI0ODRJS2RoVndIUFV2a2QxT1QyTGlKQldYaFpmUVRSZHlaM1BmUEZmRWxlK21sU3VpUTRFZVQ3SElEdzhTNmxhSm0yZTcwc2psMjNhYUlobk9NbU1OemJubVpyRzNMVXpsWUtlbHpySUtVN3l2QW9xbTFuYzVuSStyR0NsejVRakF0aFhucmtqbEN5NGkxZnR4SFVQMjU1bE1lbFF5Yk8vZEhtam94USs5YTNaZGpSQzI4ZGxNOGZDTmpLVmJCOHU0dlRwTy82ektqb2tVYTNCdkxwdktTMStNN2dnU3R3YURHZXRGcG9LUnRPMDhnYVBkQTZXME54K1RIaUhCT2FPbzd6V0E2c1d5d1YreVRTbi9PUU5ReGM5N1p4a2RDanYyTDJTVjUzYmlEMnhPZDhoU0FDQ0o0ZUlWZnJkK2k5d2JLcGcxNHJZdFZHcFZmdW9SdDBGek84QmdBQkZ3QnRlRVl1ZUJRQWF2OUJFaFJzLzJ3aGhQSG5kWGxxSzRlOFp3emFnY3pNdzRVUVVXb3o5MklxaFQwbjhCalBQTWFrMExjS2lYUjV5Vkw4SUZtVi95Rkx2SHlvSlBSZjdlSmJEV1FEc3oxMVdxQ25ZdkJEUUhIRmQ4WUlITmFXeWhtbzl3UkFGNjRRWHpxdkwvZzM0cGxnZlpqOUZkYWI4YW5UMkdicEZSVmtuUnljVzZFMFdQVlpoL2MyZS9hRjVrSzUyVzgrWlQ2UWNOWGtFTnBNcDJzYTJ3a1lDYzF0dDhpSFhEMldnOXF1RTRHcTZucmlId0ZFeE5STlVXREtiamc5N29lSk9RNHVXcmwvN3ZPaGNTOXRIQS9RMEljaXZjTTBrNXBSaWxaUG5JWkRld1JsNzRTZ1NMc3dkMDFUQWU5bFhnVFBncGFOWjdpampKdkg4c3ljVEYxQngrOVVmZ1k3Z2hPS0svSnplMDU0NFppalorZ3BmSGNtUkJBdE5hZW9jNXNFT1ZNeHV4SWI5WGx5bUVwQXVQNXdZZjFkV21oRG9SblpyRUNEaSs5U3ArR0R6cHFxYVkzMGgrZUVSRWNjY1Z4SFVSWXRhcUs3MHFtQktNbUEzVDRDVUF6WndvMXJaeGZHekprdXlkNXAzV09yTndHVnA4bE1rUVVpQWQ4R1hhTTRpbGRKa1J4VVB0TVQrSU5mWXJjL2c5WWV4S21IY09Ic0FTQ1RIUE8rcGVMbnc1N0Y0WVd3TjZVZ1FaMWhNVnlmY0FwL3pnUVBiSEJrY0hoV3AweVhtNEhNdTJmYkJ5VmQzak9HMUgvZU41QVdNYjFacDA5ZjI3aHZINTU3Uy9YdnF4eWdWWnF3RGRKMlV0Ymk4TFYwMXZKRHVnWGt6OUQva2FYWmtYeEtxOVBDa3ZlWkZlOThVVjJPeGNxUmYva1VMbkpLODMrMEpOSlVBTkZWck9Wb3k5QTl6VjEzVXErbjNSTWtFZ2VhWEUreC9MRDB4WXZvVUQ5VVpuM1dIbFhjaWJwVkdzZWdtdVZyRzZvOUd2cjlNNDE3WG5tYWxaTFExWVpZL1JiV1h1OHhjRlRNR3ZDNktRVk1peXhLVDF2Q1ZDRHlqL1JCSTBMS0xEVjM0Y3gxamRiUTRkMFZYcjhJLzVRaUhUakVlNE82ZDVCZkV3MHVLQzVTQ2tDRmtoM2xyQjI4ako3K3VUT2N6ZUZXblR0MjJVSGYrcEhBS2xicm1YaUhEUTBCa1pLYUZlWDkwVXhnVFRFVU1FMFVNbTNxSzBCUDdjZENTVUtIUTl4bWdoZG1xamlIcDFlZFV3K0hrYjJueVpCL1dNUzdTaW8xUFNzZ21HaWU2S2Y5M2V4ZDhtdnhTckJEOWl4ektZK0tiTUNVRFFQMVMvdXdhT0pubWYxZGNESkFESDlrVGE1WHhpa2JZY1hvcUpEbGYyUE1CUG1ub0ZXaEcwa2VpbmVkMkxiNHNnbFBtZEF4eE9tS2pqUDVVTkN2T0xiQWVMLzFKYk0xMlpZeTF0OGxCZGNMSlZSeWIxeW5yQUlDSTdnNGFYTHQ3QWR2Z1MzOG8wMmg2d3p6WnV2Ylg4d0ZYY210UnRQa3VGNTdQR2F1QmlaOUgyUEJxUjI4eEJSamF3aWsyQkYwU1dEdUhodDFRMVJoZXFRNnJHM3FvMkIwN0lFaEdMQ3NmeFR2Y01VbStNRFlkOE5BK1ZJOUc0M0VuZlh5Vi8yUE03R0JtZU9FYWMwN3dhN1p4WHRuTWdzOU9MTXNhWUk0Qzd6ZTBCUzFucXRRSWZRS2VYbE11dUpJNVdJRGxDaVJuZGNjSktpVkhISWJEWVlocTJOdHZJQUJLV0hJVCtPL2YrRGNkaklMREh3bW1mM3lIUmJsR0pscThVNUNWald3ZWkrMWJCbm91M3NQVWU2R25XOW52ZVpoaWRFVE1BT1ZwTllMYlUwZWMrOHpKdnNFUWdoTDlvMmVhaEtacmc3amJSaExvMnFQeWUxaklUZUZEVGUxQUgvQlZMYlliY0I3a3BUbVh1bmdEclRIVHI2djluNXdyZk5OSjlmOEZHWmJsYVZKRG5XTExxSklRTnZzRzRSL3M3WTd4bk9ZOVg0UXpkUmRzZ1JhS3JBVHY3TnZYZWFIYnJKS1FGUFRHUHBzcU8rTTZvU3R5WUFWWVNEemhkczd2dElyckJGNTh6V1o0WmVQR20xTTcxT3ZVeFdBR011OXVqaG1jdmNXa1FtbFhqZmVBQW90TmwvOGdYNUdQT2h5SmN6dlMvc0J5QU9MaWJRTlVObHpjNExraCtoN3NYck9WWm12bGlaU2hEMFF6UGNKU0NDRmN5M29scklqQWU0QkRadHlrM1hLOWlPelFxYzk3bmNqYzB4SXJkYzUrN2tKZElDd0wwcThRNnNveFpScDhaOTREbEEwTkFBdS9waCtJT3dkYUg0WVlmUFJSYVBTN2V0QTRxdjBhSGNTWUtRVkpsZExrRDBmRS8yV0ZpZUd3T0pPcHNwNWRZRGlGZE5oQ0pnMERUdC9Bc1p2NkZTNlUyTGN0SWJmTnBCU0xhanJ0c0JpUTFtUEhlYnplTlg1TjEwTEVSTnJSd2VSOU5FQk55aWlTckJ3QjBvaVRFM3QrZ1MrcHZ4a0FwczI5M3pYTmNpSGJMWlRhcFRldURXdldmcUhzYlVGL21wQVl5WlVhV3NkdFhQbk53Zy84aFJIL2ZkNTN4WDV6Z2pWK3ZwbVpQYk5pSjJJYWk2dU1jRlMxQXhTLzFBd2h5cW5TWUVKZVFrV1JGb0FUNEJENHN6WU1VS1lCU04xbDlZVjYxcVoyVXlvQlJHemtBa3o0aDdIWHZQdm0zNTdoNDRUTEpnY2toM2ZTVGc5S25PUExNSm5XV1diQUoxODREcThKRTQzQlNndmp6NElJVFlmQ1U2Rmg4QytVVGlzbFhLVXdHUE5CcDgzSzVzZmRRZEpEMXAwbUp1SVBIUnBwQm9TZTNJcm9acUhBbWxFREdOSVBFTm55NjFQV01HZUs2U2dQL2tHbUtXcWE4RzI0eEx2VG52eFZTeEhtQmFXWDVNUzZSMTc5ZTFiN1dLMm13VTNEcGZMMzgwNGZ5amNxT1FhVXBReUFjS0xqTUwyaDlWeHJxVG5LdUp6WXdNRlU5YXJqNlZyV1ZjSHVQV0VUUTlkaEg1bU0yMFkzMUM1N29kQVhuNm4raHo5NUw3V2cvd3dzNzE2OUpXZDJ3QzNlSHdPeGtTamI5b3hMQ2swMHBTTCtLOVF4V0tuQkkzazZJN2g0VGpEN1dTb1JDQzc4R2pTdmQ3aXZTbTQ0bkhjMXpDMFp4MFpjSEc3ekQvNGFxQ21KaW5aa3liRTlvNlVHRFR4VlF3cGRTcWtEL1F6SW5lVlV5dXB5c1JLNWVKRVdBdGFtOXY5MUg4NDk0bFIwT0hNU2xOSE5QcUpoTGs2ZEVuMVhUWjJYRU1PaUdEZng3eVpLN1hBZ3Ntelg2K1JBSFFuMUxKQUsrYkQ4NVlCdVI1Q1ZpdWYzRml3Z3RoZ0RyMTZ1ME5ZUFRGNVN5dkVXY2p3Rlp1c2ltNEc2TllERVhUd2ZQQjRrL1RFdkpBWTN5M2l1d0djOXk0VjJOdExRbUlSVC9qNk01WDlYWkc3M3ErM2t3ZHVoazVlK3ZGc1NReUsvcVRobDVkVk9DWi95em55TEpUQUt3RWhRdWdVTWVCc1NBVmNEbU04aG1JRkoraFEvdVdRc0gvZEJIT3hHVGlRcWpYZytSNEwwdmZYYkRuR0JLZFM2UlU0Ly9KMjM4dFR4NTBxa0grU08wMmtRUUs1T3ZhcUNzNTBXVy80WjdrSEtTVERMYU9xeXVEaGVPL2FBWm5JZktUQ1M4VzhFVWpDUUc3OW1INFhzY0JzRlNsbWl2ZExwalVFaEhxWC9CSHRNK2FXdzhwbEZGRE9wdmtSU1BWaUREVlZleDV6aXJnakRIRUt6ZDZjb3JHdmhBQTl3VjFkVEcwRlE5NFJheFZNZFJiSm1LeGlpRy95cnd6THdYWkVVZlkwVWJiWkovaU1jeW5ucFRZNWpkSUsyeVpscWtOaWhtS2N3L0w2MkJvWHFYbHFQUFdmVHJTd0lRaHE0Wmk4eVM0bGxDM1NjSGorQVhxSzZEeVBQQzlRR1ROOTlFSXp4dGdpSkNOZkt1NUppQkVWMnoyYkhMQTFVVVlabkVaRzhKYjFEZjlUclFOaEV2aUIzUlVRcmVFYXJmazJUdFNBZ1RGVU5pL2NNRjQyVzMraUU5ZVQ3Z3o4Wnpmbk9IMjJLSlBxUjFuOHFCb1dFQThUT0dweGFZOGFvcmV1Z2YxcHhNL2hVNURuMnNlZzNCLzZTTGx2RUlUMnJocy9kbmJhdElYdC9ibmwvSWRTVUZFeWd4MUV1bnJGZ01XcWQrRS9BT1A5VUc4VEQ3N092UnRMUHVMaWthaGFZVFJ1djhUb2dKaGlBa204N2pILzA5VnFUS2lsSW1RVHFub2NTZUVMV1pLSkZEbEt5UHFzNXJMY1pOTmZhRjJQS0hpTWIvUGx0Zi95V3UySUJtbUUzUUdsVXhTU1NTQkdWdkt2Q0EyNGFmNUcwemE2Ump3RTdaOEVqWk85OUQ2TEkwKzBBYnlxMjFsdktrYVh6b3RCUnVtdURDUUU2WWlNUXprVmwxakE0c2F5eldGQWJ3aWNiY0lMM0RmRzU5NHo2eUViQjBXcFZZZ0xlbGJ1QWIrOWRGNlRpT1h2enp2RnZoOEZVSlR0azI4QWtzZlIwaGZuMlp6Vm5KT0xHbUdOejAwZHV6Z25wR1RXeFZDQ2JwS3JaeC9RcHJzS1NMOGRMVlhnT3RsK0lXWDlmR3V0NVlnR1diSWc2Nlpyc2pDS3dHVEhreE44QVdiaUpjblIzNTRuOWlqRjJkMUF2cGVpeUM0R0NRRlA5S0VYWHlPVng5bVV3VHY3dTY5RWVsa0pzQ21wNGVXWmg3cVZZeU1OaDlKVnlYWEtWMjJUdnNqbkx3NkFJcGd3eC9kZEFONUM3L1dpTCtZRkhkMHR6TFhNbHF2MlRiSXIxU0k3VFVROURTdHI5M2dHWDZVSWpzalN6L29jY2Q5QXluamxmVUk3TzZTNTFsd2xaV3hVcGlqZ1FER1ZzRktYK2VIZWYvUDR2VE5NY1oxQXkvQnVRRmpzY3hhVjNYQkhTbkdhQ2VLaGlpcDh0UnFBcUpGYytYYkZCWmozSnQvN1NYcDVkd3FyaXg5U2QyVVZKL0FvT2ZwY3djY1g1WGVZcm5oVlRQbFBZZUxIS2ovRlVUOXplTzZGSUthaHdJdFNRS2RXRmhMU2NLWVBxbERnaDhUcHpERkxGWVg0cFo2dFpUVU96TjFTWXI4MDB0ZEZLTDVKU2pJOEtueGhSTjRsLzM5SGNPdHhYc3ErV2EyQ0w4eS9Xb1gzUSsxSStldjZxWEsrYnZmaGhUVzFmM1hIcWE2ejBGWDBJRTRTK0FWa1BYSlYxWVg2VFpuVlppa0JGMFZTVWJGTEhVbUxtYTBOZmxqU1lWUW9PUkw0NHdDV0hKY0YzNHN6Tkp1RnZvc013bGMva01hQmtaU3EyWkJzWHhERFExcndsbmJUTFliaWZiaVpUOVcwcHJ5ckNrRFovSWFqS2JhUVlHZkpqZjdiSk91WWR1VW9aeEZOVE80Qk5pdFlkRzJPREc0bEduWWROVmFPV1lCWjJMek5McTEvOUN6MFVXYlFpYlRXcE9JUGcyZkQzREVwMFN3ZEkveWdBUy9SZGltYWgxbG5tZ0ZKRzcybnova0ErQkdHeVJrRzN3aS9HL2NFcHQyMGNYZ3NXaTBPMmVIMDdmWlc4eThHU09rZkJ6QTJaRTJENTE5VmZYOVJQYzRYNTA3cm03VUlaNG9xa2FUTVd0U21WVXJja3VuMC8yc1JCMUVFbk5DckdqU2d2K2tvei8waUFTWVRMcmxvdGpJbmlkSTk0amUvS0lsY1lpMUMrQlZOWjUvUXVwNjNnQ1JFWFBSZzd2UGxhV2Z2WDl0TklvWFVSY1Erb1lzbmdOdVEybWRpZXQwUmp5enloVWtuNUlSYWZHU0hNelE1NmEyMUNYZ1BmYzByT21pOC8zNnFGbC9uaUlmV0NPR3N5YSt4UHRtL0FQTFo2UG1qVkduOFBibzRFQVNmSGFtM3BjM1FsSDZXMDQ2WE9jSGFDNUJSb09ONEhyWkx6UENkKzFrNEx5T0FyZy9LY3paWG1yMGFQWldkU3U5WklRQit6RXREZVFFSHc1eVVzd3lsVmRYenZsdEJWYlJ6M3FTWU9sWUxYUUV1cWwwdTVUZzZjMXo0WTVhenZvdzcvWm9TTjYydDRvU21wcXpodXRPMU1rN1ZuZjRGbHBiMWNEbzZOQWhPeUVUNmxZVjFkUVNVVW1QbHRCakJZYStadFFRLzBYOERUNmY1cC9CME0rK0RrY3dBbmo2VVFiZjhyVCtrWG1nR1M0RHlwbDFyQy94UU1JRDRBZWl1enYxREZUMHVUTTNpbXpHSEhTS1JRRWRDekR3aWNYR3lZR3hvQ1ZHVUk4cDU4K0JLbXhCWE55QWdwdG42cGxVc1lSQkV1SnZROUYyeVhQUkt1VXRxQk8zU1Qvek5zSGp2Q0tVQ0VrMHdHT2NIVnpFMGJvd3pxVzNoNHBxTTl2OUZrV0lpRFdMSklsSVNvbmpOcFhkbTIvZmFjd0F3TzNMTjBKc0QwN0NwWFFTSVNqVlkxTitUNHE2dExuSXNxMlVwVkpkZWFST3oyZDRNczU2MDUwZGlHTDRIL2ZwMFMzR3cyaHVTb05NN2lHYmFCbStzRFFiWDIzd0JSN1hIaGlNVWpJbFJyaHRHUzFJRi9wNFgvR0xSZXVQRFVGTklDeVRUOGwyb2FoenNQMWVoaFNsaWlpRG1YeHpWZnkyNkt2ci9kWHFqc0JYamZBWmZCSlVxOEp0dkFJcFcyQlppVlZLVzJWbkVpYXZBc3BBZ0cwcmdYQmNVK0Fjdkt1TmJ4REhQa1IrVWUrQTNhRkh4UGpyUEl0b3pvaFFNbW5vN3NXTCt0aHhQdFEyUDlXYWlYS0dKRHlUUG9LWmwrS0JWam5uNi83d3NBSmVIUWdQUVpQNmtXU3hUNWRxaFJXcDB4aHJvQStoendUdENFZzNaZFdFZi9oU01wc2xMM2VjdzJQQWJDM1J3RGg4bklqdnVUOWNDbXhEcEQvWG14OWhrN3o4eHE4Z1lQWHl3YjRwMDI0M0pISXdVcWs2Z3RZbXozSzRoejNkK0xXdlhYK0tqSWE4VkpXR1g3Q2pvc1dCcGNUdE5kQlJCeFhoMUhRRDdESXljbnI5NjM4NzlzUEhaMTR1WHAvM0VSWnMzZlltVTlqakEwWG9MeGpkOHhCRGJjaDUyek93bGdSTDN2YUtWZ1ZpY3lyMTNSenZWZUtaZ0Jqb1JGRmtOL05RcDFsQ09VTU9EOG1VRUVuQjBWcEx5N3ZlRCsrcDZKU3F5SzMzNHQyeVFJWEhhSHI4MlErZTdiSEh1NUFPVCtNMkd3UWRaUVpVVTZsa0w5d09RYlhPSnUzdEpPeXRLUFh4UWR2ZFB0Nml5bUw1SFkrTDMwNWtESlBYNG51ZUtsa3lLQXZwM201RVRaaklTV1NSdytoTHhHdFRBT0E3VjVGbE9zMnE2MXMrMmZkN2lHTUU5RGhpK1Z3aGFIU0hTZ1hzMXJjOGppQm5udzVkdFlzL0pobENFSy9pbk53cFF5c3M5NEJFQ2pqM09lQkJCblZnYVJUaGI1MHR4YjVDbFJFaDFDU2ZNWVFKMTk2NnlETzhDMkZsQzc4dm5Gb3g0d0hndktEZ3Q4MnhsUVpHbERYRTVsSDZKMVpRVVl2UjAwNUEvNGtWSFh1c3ZoRDNsQ0txUHZEZjJtUWZiUHprR0xRTXh4bVdLOUptNlU3WXpMdzUxY3RFaloxdCs5Q3dVQUsxa3BXZEZxRXZaa0Z2MVpXbm1XVnVMN09FazRDZHFvNm5lemZtN2M5R3VRUms0Ri91aExMSE5jQXhHaFplUVZ5b1VndUxKeElJUzFlVHRSWG1QNTRaV3FrV2JZMWw5RTc2NFRHbGxUK1BTempjTUh4Y3d0Y2JGWHZvYlFhZjNhTnZ2NHd2V0RGMG41U0ZwT1NxZVhRMjNBV3hNRDlSRDU4RUFFak10dzZVOFFLNkcvWG5aZkI5UDBoQWdlQTQ0VXU4QTJlMnNuMmtoSHozUUxmVk9iQXF1UkMrREkzekg2SlNZK2Y4Y3lCbk93ZnZOd2FDTVBaaUhGUTVWR1VvS01hRHk0MU16TWpZdzk1aG1NOEd1M1VVVEFFTXZZNUxxQmtNTkdUa0xHZWhQYTdKcExGMVJMaWd6ZzkwQ0NybGNDMGwwZ0NWd3dSaWU3ZEpaeUhVUXdGak1zUk9aR0xMUVo3eDU1OEJYeFJaUlVyUGNnbUgvcThwVHNWU2dDWU50TUxrMmpWV0p4RVZCNDRMUG41dVZkQ0ExQTlYaWdCSlZrR3BBQk9sd0swbkZGNWZxbUltN1NsSmpFejIrbktEa3pmMlhjVlUvTGlQVEJvZXZ2Q0EzcXV2ZVVDV0NBd1UwQTNYZHY0YVVRQ2oxVVJUaEc0TnNSWGVvNHZYL0sreTZ4RzIwMFJNeUk4VW5GZCt5bEwrY0RtU0xyTHRyL1BKaXN4ZEs2RDFQYXB1d1R0TEJScmdiMkEwZDdHTmhKYkZ5K28xTjcxNVN2Z0hGV0ZNa3U2ZC9oWG41V0RMRzBRZW0zMGVncnhjUGQ0aEJDRXlNYjZaSzh6dDBXRlVZaDNVSnpyaklXWEtoTlJCRTBpZk1MQXhjZE1QQUlIUmlrYlkyeFZ5YnFuNVh2TEp6V1k1N3N0UVA4TzVGOGNET2Z6cjd4NFBoaThjVnp5c1V1b0RmbUs5YWxqYUFUaTg2R0tIb08wZXpFSWt0MWR1V2c4M1p2dzVvV0xmWXIzanFNZms5U2F0bFl6MTIrTnE4WGdYWTRMelVBWWJPNWdkdHdraHdmWnQ2WDU5dTVhSzFZRWVRM1Z4K1ArQU1aNUJtTHFNc2pqQnZZTHVnQVJpTUhCdnI2Y3hnYkdQa3B2OExBVkhDZDVVY0sySE5jSTYvaXprTXVoY2dmR3pDeFNIKzNpZ3dpOHlGMnBoOTJzN2pWYi8ycFc3bFVjTVZyeXEvRkU4bHlUYWxCV0xIWmYrOERNc1hpdVc1cGtYSXRWTzBDTVZnT3g5NldraTBGK0k4M2JXMGJnRDhoR0dBMXRyYVRPcEJnY1g4eGxCVG91QWUzNzVPMStiVDlvTWFURTFZQnB4dHgvQm5EZEk3bTJ4ekI0V1B6Nm54VFZZRmZ0YWM2WE94QllyTFFNNTRNMXVEMU9QRzBpK3lpU0tENkE1cldMcjYwTWtYSGdBQ1Y2WlduMU9FQVF2N1dxRzB3WGl2NzBEMUQrMTk3c01MUS9MNGxUY3dGaTBBRG45NlVnY2ZVR0xGQjVKemlBblZjeEJ2am52OUpGT2pIQVMrbVBxQXBIdGFvblZjcjlqZktGaHlGNkVlYWFIbFVGWU9IVGIyRnpVZjhtN0dwYm1admN0SWRCazQreG9KaUY2NmNhTDdhb2kxNWc4RWlaUXNReG12T3k0V1JXU1NoK3c0djVtS2w1T3BkaXhKNUU3QjJsMnZ1UlY1bHYwVWJ2U0Zkdk12c20xUUJ5WS9pZEI0R29tS3VDVnBFM2VWZXFUT3Z2UE4wWWVPcjhzT0RNQVJvdmhvYng5a2tpdElLdVhWZmpWQXkrdkI4c2xvcWFCanJSMWhnUzdXU1dFZDU3N0lpTThlM2J6bDNmL3hNYnBjZkx3cEpBZ1VQRlZZMTBKMWRSMjZkeHFXRS8yMDNpQm1KSHFtS29tcmhNYzh4Y2kvSFY2NjI3bzlmcG1XcTJTc2F4YmZiTy9MZUs4bWF2enpYaHN3TEh3TnlXMDhhVCsrc3VIcWhRbTI2VVA5WGE3YkVaVktvb0NJS3BsWDY4RUdLOHFhUUZYSFhuMDhzQ3VSMyt4OHE0bjc3RS9yL1FTZ2I0dGJXKy85c2lGWitIQmtQZ29MMkVwaVdpV1Z1UmsxbTUyelQ4R00wS1JHU2JQOXJqODhnd2xlQmRHTG4vV2JOSDVBTUxma2lIczlmYmY1RTZQVDJJcTZXY1hEem1oV2VRNkpNdTlNMG94OHVxMWZtaDVvSTVnSlhuQUtjaFIxclY5dDUxUVNHQjJFcHlJemkydFFwTGhpclRqSVFCSG9ycGExMlBRZHBZdDhGVDM5QTF2eWFOSjN4a2VrM3BEV3g5ZWF0QnFWRDZBZzVscWhXdERBS2N1L09JbU9CRVZHb0laZVlEQmQxSGtsSGFDOG05VWpqbFdDZlFMbXlnTVhkbUVJRjhCZ3ZRbXBkTGd3NlRmelBGOVpWc3ZSaVpzUWhqZG8rRzhqeERnTzF4Ymk5SUg0ZEVWTVhWVG50dzhZQ1J0ZDk1cEduL2RrS0h6NnowZG1PTmJnQzhXdW4yVzlMN3BSeVJMTWc1M2RwU1NNTC9aR0tXMVgwNmJPUFR4SHBOYVVIQWNmK0hSUW1KTHJocUI3QTZ4U25ucHBLNlowQnlEM2QyVzMxWUVPbWtQN3lKVVUrRmczTGpkMlNFbjZKQ3Nmbk1qZzV4Vk0yL0NkcC9Wamc4RWJTa1orNGhqT0Z3dkR0U3pRNzMrU2oyZDR1VDk0cWQ0ME1uRzVDNTI1RnBnd2dlNDBiTGtlY3RmU0t6ZVk1Z1JESEFFWkVzRkVkWkpDYTM3WWJqZnJxSW5wWXNJYzVRNXRvK2NRL2Q0a040OGNrVTExQzBUYjN4MzhtNk5sbE1pUHJjWnhnTE1acmZJMCsyQ0ZiYXMyajUrY0NQS1BEMHZabDVld2RTMnVIUFkyM24xRFg2QzltZDlsaWFmVkh0eWp0Z3JsQVpYcTNnZ3BIY1AxZCs2NDZZSFpJQWJSSGdqNzVwYXNUYzVaY1pPWEliQkdiWit0T1VlL3EyU0svYmx2aVdjaEVjbG9kU2RYZUVsQmt3a1B2MFdTbHVMM3hwTGhXVFFuZ1VyVGVMUTRqNTRDMm41cytPQ05MN2JTNVNKbVNoZzFIUzFqenZXSEtRaTVqMnlndVI5QlE2RTRMSzd1eGNyZnF2RSthT3J3S0gyMWhNTkJCWFlXdXhMbElsSDhLU3QwbEd0akowQ0IrUForcko2UklDa3RDeU5YcVREME82UkhyOWFiclBwS285K0Qzbk1tTk03aXYvQmoySkdsbGNtcVZGQmZraDFudzlNUTZRS2l3dkdYWnl5YTZ6WVNMczZxelc4VGVnc0lMcTNTYUUzNmxBdXdzR29CamFmdFg1Q1Y0QTNJVVdGdGwvTTE1STVLK3lpMVJUYS9jaHBMVUdDMExtSk1sZ2pCK3BQaGhLbS9GblRtaTRMOS84NERnL1RsRGFvMitIeE1SSzF2K3pCaDdhdnk4STFXN1ZmdmczM01FNThwOHZTeE9nRER2RmY5cHl6NFRueUUyNkcvdEU2RDlDTWZKSmRKMDhleDQyajBTbHlNMXdQbWRxWG4wOUZvVmxSdmpOZFRIMUFDSjg5ZEw5NFhxRXN3d1lZZE54Z0pKREEwV3BjblNkNTFpSWY3SlA0bFNOeU1PVEx6dlYwZWtyek5XdE1WbWVJS3JTZlBSMVUwVnBzSVdMV3RPK0NhM2hmaXBmUGxJcTRka0tTcll2clFmV3VJTzFUdVdCNWRRRDRTeFhHam91SDFNRVA2dGwxNEpMWDloUFpYOTROWXp3OEE1TzZrTkpiUEZCOGVQbkpSbW1tSXYyeUhkc2x1MFdTOFh4emVqZlVQbEVjVkFTNFRSSys5QWlRTUkrVHFSYmhsNno5MHZtK2FmVzNPbWhjdFlVQldCQW95SzB3eVF4THVNdjZZRnJIRW5ZeWZLZk9UVVowZnFEOTQxcHphMGxoc1kvVE11RndoRWtzU095SitYK0J6VWpLZDFNRWExSVA5RnRYaGtEckJmRHlGMDhvaFR3VjBUQmYzR2RrUWQ0Um10OWwxY3NMU2hpOWdwQ29BRTZDcGVPbUtIV0loNlllNm5qYlBUaC9STGFEYituL2RmQllkUDJsRzlaVVhQeUpQK1dUMCthVzFQYVJ6MXpZQWNWUExtaitnU0VZaFNvQldhNy9heE41RDg5bldRWXN6d1VXenljSzdld1FEK0FoSEJQZEtOeVExRFFZdlVNaWVwRDcwcFBMY1R5NlYrSnBLai9xcWxSenVlRS84b09EMjhQNmRZR3pkTkthYXBweWRNTzBSNURyY1RFVFBHQ0M2aERCTk1kZ3FzeDd0Y0hzRUhlc0QwblA0WDFIajJhaWkzb0l1R01oemxNVWNQQ1Z3RVB2ZDNWL3hjalYxRnM0aW13Z3l5RVUwcE94SWthSDd0UmFnQWJNSjZyNkxRWUYxcS9tQnZyWFhoVEczUytYdk1PVnl2elhXWittRXdNZ1RZRDJRbWhpYjF3MktmNnpuVEV5UFg5dTF6dHFsMDBWNGp3ZjhNaEIwdHc3b3BoQldWWTJBcTlnNGFyYXlFNXJLQWY3cE1QMFdkYkZSWDA1UXorNjN6SUIzMldQRDVXRVBCR2k1TVNjbWZIUjZlTFd1RTFMQ2ZnR1I0Zi9YZGFBcmZ0cXcxSWFGWkFEdy9tWkwxU29zbWFZNFYxZDdtdmhCdE1RZCtuMVducnJRQzZxdW81SXhuY3pGRVZlbTJCckdTemlGV3ZhNmhtOEg1QjUwaWpraEdBUVNBTmN3cms4VHZWWWhJZmhueExyenIzNGlMVmxodFFnVENyekZzeFhUUzBrY2JseWNqM1Znd0djVHpwYUZUOTNGY3ljelI4MmZiZi9pRERSQzZxL3JqZDNDbmkxemRmbE8ya29OelNlQXA3aHlZczR3R1pkc0d4cUhmdEtPSkQ5SHRJQlphS2ZnMkp2TmxOcjNZTE5Kalh2WHMwMG12ejVzRkF2OUZjT2xlcGdEa0xSdlZCKy96cnp0WGJybFJuV1oxcUF2YUY1QmVPUUJBeEk5Z3RzWmVhUDFSc0doQVJXMkNGWnpzeG4yLy9rTGdvVG91cEFRRUFWZFpBUjdRTVpKUGVEcGVLazNFOW5TOFVORHZlc3N6S3BoNVhlUHFHK3UxQUZwS2FVMEo3RWZPR1I4TWNGYmQ3aHdZaVlJZnViS0JDaGx4QmhiUUlHenhvdDNWUDV4a3ZHMm9nVDB3amlRWUpmNVYxZDJWa2JGQzJhVlZQUmM0WGt0bG9xVG8yeG5leGlwQmZCK2FhZkFaZjZxNUErZ3U1MGZ6Ti8wdmZrckpGZUp0T1NEeG9wUDRpK29XUGY4ODI0TEo4ZHZNZitBTytxMmVxMjhGS3V5YWFobjBoRHRXUTJ2eXdyUWh6SStiSnZHR1RyRFZWbXMvTmw5akc5ci9KL2tBS3BYbnBkSTBxMEUwVk02RDYreHB3VFUyakVQaUx6OTNUNW1RQ1AyWnhtc0FnY0pFb1Jzd01YVkV5SGJxaFlPUTErRUc2OW5KRzJZOVhQVFJQL1YzYjZTV0o0dTg4cTJIUm5PZUw3QnE1Z0hwQ1NZOXZleHhXckl3YkNEWXpMT3J2Y3M5b1pMQnZZamtYMCtTY3kyT043aGVXUFR4dVVYS0lZdVhkRDE4MlFXSEM1Y1g5SjRsL1h0RTZ2YUNmU0ZEWW5hTUlrZGhoUGpic3E5dVFYWjZQYm5RYzJkdWlwbWlBQytzcWJnU3JNdEhUd05JVmx4T2FvYXdaenk5aURCVHNFTy9PWjcraWEvSkFtSGpXL1hjREJGTUhmZFJvakxXTi9CTU1yc3ljRXZOdWNCRGo4QWlVbWIxZjhobHJSVjczeEt0OW5ESkNwbXNGalpibDk5ZTZYd2RNejhPMEFiU2xseTNKL2h2alk2Sk1ORGk3SC9YaTZjUTg1TzlnTWNCTDlsRkNmcStNZUZUeEl5a3plTnhGcktjeUQ2MUs4V0Z5M0tONDB1K3VsTnNzTTZEWmRRWW1Ba09LeVh3Ym1sYzBHbXpCSVFqNnhtRVcxOXhuTnJXN2dGU05LZWowSmtxZWFXcW5hZ0E5T2s4QUd3SGR6emNZanBFQ1M3aWtwVnRteXN4VzNpVURVNXFzUEFsMWxaVld6U2ZaWVpMUEcwSFJKemoyYkRrQjh1YVIycFF4VXIrUFpRcHZYaHBzREFQT0xWT0dKYk9HbTlHWU9VYjJKNkNOSi8vTnlKM0ZQZ0xGa0ZWeEVWZGFqWE42eTNpc3JkbXhKWjRxNlNNY1BFdW5HNUkwM3RMRktpZFF2Ymt4NVBEYmNMeERBQTZ5M0JUMFpWL0lVdkorUy9sUXc5bDQ3djhzeFNSSG0yQnJxNURQa1B5L1hmYWRheis1V0pwalFVbXhIeXljUEpjUHBUdkVFY3ZrNXFIMjJSdHQ2aEdVSE9XcVlLY3B3OTFINDZsWFJIUkI2WUlxQjhhM3R2ZzhsUHdzaHY1S1hYZ1kzQ2poVjNvNjduL0dOSVAvMFZScHVYMytGTzBVNU9ZcjRXd1BQYStTZHhjdFlIN05RQjR0SjJDU2Zuck9ZM2piSHU1NlYwZDBKcVcvc0YwMlh3S3dXRlZudmxmbmNKVnJxSThzVUVyenhWcC9pMjVGRE5GSlYyOWtHMCtkcEFEQnpCdENKcGtsVDFLaExIZ0F3dXdMRXowRlRTaXc0M0RZSGpWMllQN3hzOWQxR0RTU0JLK0VDaTZtU2FPWnZiUDlVenhQN1hKY1F6WXFzei9nNm9nK0RDVDlybUJmbW5MUmJNUWFxdTRsY0lQZ0hPZTNUMVYwcmJZUG5zd2xvOTNsa2tlZSsybkswdEJ4c3NYTk1sbzRQVE0wbnJVRlo4eXowZ3hyT2hqVWgrc0hMVFdXT1pvRlVTVWdCYVJqMWJFRnJEbDVROEYwRGQyWDlDZnpVVFl3YUc4WWFPVU1OSWlBVXVyeFFKMGRGbit2ejhPTzdEYzRHT0VtcVo4cHFiT0dLT0RiSURJR2Z6MEIxdExKemFLNEY4eVEyRmFnUmF6a2ZrVmtkZXI2N2QycHladnhJekE0TjdFMVRyQUh6RmdUQndqdUY1SGVCbnBrTEhtbkczVEhsS1B5K1V2eVpZRVA4U3NLZy9pTS96cjB6UnFaT29WWWFIb2lZalAxbEZ5VTB3K3dpRk1UeXFKNmtvQWMwY0lVbnhpL1lkRW5icGwvNE1qQ3BGTENXRXJRdTlCODhlZktQSkhhZHo2OWlrODZQbDFzL0NqTDQ2TVYyL3orb1psMGlIZC9OVXpLRW85MklKbUZvQkpxWnA4aTJoanVVYmZIM204Qi9TWnRvOUY4QkNwb1Z5WDNtZ0MrdGlDRGRUTFN6TEJXUE5BUEU1TjRkYlBlKy95LzBOaDN2ZGRXVjd6U2lzTlBiSHE4dVoxR3hicXAveldMNGsxTDdsTU5pUFJuODdrbUJhOHV3cU90bFp5dVYxTldSdTVIa2RpWHRIanUyajR5SzJ1MkZINnJRT3EzaG5tZ0dFNkQzTzluK0xhNVVTNTRDZklUZDdnSDFVZlBtU3c3T3l6V0NzTlpqYlo1Z05yTVludE5BYVpHZWdBNVFxY3A4M1F1ZE9oT1hqdHFiUUFKclRUMFUrN2FRNk1WY08vZE03T3pUSTJzN1ErWHpnZnVHdUhwd3ZVWEhXT1kwYVNSclB4NVdMaHVSV05tenVmUHJuekU5SlIxMXFtOGMwWUhuRkRReThJZ3Y5MHN4U2czOHFJWnB6aE41VHhuQ0c4S2JZRUxENEMvTU1Va292TGc4b1ZqZnhZUURFVm9YcER6clhUNkdNczJrUnBnWVh1a1pBeStzNlN5TmZwQm5jQ3JCVW5BU2lRR2t4NmlVcWQzd2FPNmNXNGFNUjc0L3grSnROcjNaQmJXL3k3cUQxME01dXQ3YmYrcThyZW95blZ0UDhFdDN6Smp1em5hMW9lZWMzTnRsWWk4MlN6TnppdmxQWGR2YnlrcFZDMFJDS2VmSkVzTHlKTDZmOG5Ja1pqb3ErSUJFTHlQazdEK2NmZnFmbG1STS9aRDhEdmsraXpMWkFkVFZGbDljSzJQNE1PVXhKNkF2VHRkZHhHNmNhVlpSWE5SWkRiNUZPOWlNZXhTTmRKeiswMVN4eXF4WUh4bzNLc0Z4WHVwYUdLaWdZQ0M0MHowam50WGUrVVhRNUZtSlluZHE1ZHhTUTZueXRYQjhPU2Q4VjVCOGNPSFh6bFZDanozQ2ZnSEpJdUJ6cmlPRFhqMURhRnM1TGNSSkhFenBVRmpKR1BwOUFLVkhVcGJPRDV3dkFRbmNUdE1mdzlXTDk0azh6T0RTNDFqK3lSRlhpZlVWY0hzY1NwdmhJNzVKSGE3bUg2Y2tRZTJ6bEN3UUJtZDBjMnJLQkN2ZUcrWDJqUXN3WWtSUmFVREZjL25KYU8zZlYrWlYrRFBxYnh1bDA3OE1JRFdvVk5HUXh1R1I1VnhVOERwd1pnUTVaV1lHSUd5ZEpZOHJKTHRZdlBmTDJSQXB3cGUzNC9KbUJKZlN2RlBjUUYwaXVrYnl6eklud2Jwb3FSUDN6RDlvU2lvWWRPVGdsVmppczJtQmt6YUxmWDFtSmRlbzVFd0hYMmR6dEtoRzZTOC9vYkdUVzhlN2tETm9Hd0Z5UWVKNnpaNzQrcHNadG5nZHhxRE9ITm5acDd1UDVvZ05BajBheGc5NkN1MEhYallCNHBRTzB4MHNqaE50c0NLMUdOUU41ZTJCN2F2dlhqOUNBZ3NaOG9HZ0UrWFFwa0RZK2J0QzhzR08xeUFuazRNWmVSTHNOblV2NmlrMEszTnR4TVJ1UlpnYSs2YTdINExoaStwdUh4bUYxd0w0UVJ4UE12UnZCbEwxNlFEU3BHVzRuSWJyeW5acmkyZjAxTDRwV0NlNkpHRjc2SnQ1aFBBcnlvSVNzQjczTkkxT1huSXdaL1Q1VG16MEF6T1d2ZHNzZzlVUFNQUWR2aGUvOHBGYmVyb3RURnV2enRuM2ZYaVM5ZWpKNVRqWmFiVHdQRUVBeWNiU0xYdWRNUXRtcTYwV0Y1blI1YjR5bVRSRjQ1NlplM0RVRlBoRzRuN1NqbWFrVk9VczRLSjg0YzkxSTd2Y0NYT3ZVZ2NVMDJIaG9NOFpRd2ROQzIrYThnUEV3dm5XZ1ptcWsyMXhzalRoMDdlNmhPZloyck5iZHM1VHIxdWZmN0cwTVdaRlFic2M3VktKUmk1NTlzZFI3R2ZTVDRuWWZaWExmaDE1UnVyRGRlZUVNWURmUVg5OS9oUWh5Z2JrU0lFampoNW1jc2dzbW41eTJnNXkwU25md0ZrM0Y1eE5PQ1BzWk9sM0NVbTcwRGROKzdER1VGbFpVMEgyYTJWMm0rbG16YysyOEJkcFNZcGxGeDdzR3BXNllOYkFZMFBvVTlFMnFhS0hrdVZjM0NUTndxSUlRNnJWengxdFU5UFdUVnRMVGZWZG5kN0pwa0xONkppMHhIU1FkM1NrbjZFYlh0T3JQT3pjWHdoSnNnOE5qQkl4MTVqVjVZMCs1MEdDU1JoZUpZbnpWdXhReUJQcVJtb1RSekN2S0V4aW5ybDVaeWF0VjlpTHpySXE1NXplN1FJOUdTVktmZVJoV1RiRk03dk5MOGJYRGdSQWVSNm5sRW9KUkd0Z1NzK0Z0Z3VHRUpIS0lzdGIySllHN0RQei8renFCT0hJZ05Ubm12MkZra1o5b3VxSlNhUG5ZSnNWVkZVdjJmS2pJcmRITS9oQ0dsQ1R2U3BoSkI4d0RncjdzRVJ2VkFTZFM4SVoxZzhDYm45V00xdHdnOE9DR0ZUUHkyaS9kNWVYYzhIOFVOQndheHg0MmlUdzhORGg2Q2VpNkZSNCtjSHRXVS9zS2d0TzJJTmdWU1RrQjJscHFsak12OFBXUzEyTE9ZcE85QnRiaVRwRFBLckhmRFFtYWkrREZLREgvSlJNU2xJdktuSmJXOGU0TCtlQTB4SVFmVDREMzJERER6aUZ5M0FDT0ptTGtEbGF3dUxZanQrdmJPaDl4UXhxMWJ2TXdmQ0xHREhwaVVJT1Z3VHJIUk5nZE1nazZKN2JHM3FlamlSVGlEa3dTeEx3Tnp6ZTNJZFlhQXlSWE1OL3hZeHc5YlNDSTRpOVc3b1oxcHJGOHQwN3FtSDhTZGpMVm84OXBlTWFIZnZlTEUzcitLdDVTeDlYTnBXeFhPeHJleTI2eDRWZmhMcys4WnJvQ2VTMHZwR24vaXM0ZEZsbVhzS3VJWm9qcmI3enJpQVZDMnd2QUJYbDJmK050NHl5RkVzSnNCNjQ5MU11NERyakJtWTRUSlYyN0VVMWFMYUF5Y3VYZCt6dmZDQnEvNGs1bnNLZXlRNCtFLzh4bmJ0MlZFcDJScmNHVi8rMmU4QTVjOUlGblY3bHltelYrejU2TThnNE1NOFpCVVoxY2EvRkM1S2d5djVic3hwWk1XRlNLTDNhYnNxaUZ0YVVCckVLRCtNcGUwWnc0LytscDNnYjN4MVlYaGt5bHhYTTl0b2dtdGFQUUlQeEt5RDFGTHBiL3FzSVFHclRpTDdyNkZsWk9xdGRES1NKM1V6TVRZK2Y4cmJEMDV4VHkvaURyeW1aV1NlWnpFVmMzOGJ0cHQ5K3Q1NVVOWFZuOHNpSEVxV0dndS9nL21QcHJJcWc3NGtlZ2JwVklGTDdDdnBvMitVRExqTlFMVlJQT3dvNDRvNjRWeU8zaGRqOGFBNEQvMnRiSWswMHJBOGpsQW5BdzRoYnlwWWdveElhVUQ0RU1GNnJTZit5dVBpRExJVEtyS281VVg4OWpJUys0bFBTVUJJK0lxdEk4MWlxL1RSc0FpMWNXWndqQlBIWFRqZG1YUFVESDZ5djlyY0RaM0pBR202aGlYUmZQMXBRMDg5R01qVzQ1ZTFaL2VmeW1WbGhIVm9ZY0hRamxLUWtwM1kyNU92d1pVMGVKM2VybFdMQXQ1WmFlcEZCMmZKOFlaMzZFL2NDaFh5N0IrTTBzYzV1V2R3U1kzZHdad01qWmgvMS9iaDdydGNvbFIvRmNpTCtXOEtiLzhFRTVHR3grOTJvdVkxeU03eHo0bzhrOHNlTzhUNGVGQk5KNDh6SVRHb3M4OFVpalFYL0NyQnk4T3JKbVR6Ykx0QmNBUDZqY1R0UVBkcURLYWcvaHppbFY2Ykl6cThvOGErN3dLMjFlMU16ckhsVk5RNlYxVVJkZGZDUWx1clV5MVlkeVlRUmcwVTZ4b2k1TU10SVc1cHQ2bnpjMTdKdTBrNEJkblNVNVdwc0MrK2oyQjBIUUFFZ1F0OGRtaTdpaW82TzY3NGtza29wdTVCSGNqU3dOcUY5NTU0aTBhVGZ5MnVkOHozZU9TaGlZdmdGNTN2ZGwweHB5cUNBcU9tN3FZN1JHZVF4YUdSaW4vVjVtUnJJNXZmbC9ZWHN0T2lmWi9PZWQ5anY4bnhuRXhOWnNxTUVzUStnamdxdWhhZGR5ZUdlNGhzcTJGSmtUdy9pT2w1elU1NnRMWDlZMmRkQWJwd1FBL0xESzNaTVJrZC83WUQvOVd3ajJqTUMxWEhNczV6RTN0a3l5OFdqK0hHQ1JXTURXdjdvaXpad1BHSDRSSDFBNFdqVXQ4ZCtMK2hWT1p4NFN0NENMeEZ1ajZmWVBpeUxLVGMyelljSW1GeDdwWExBekxCSndiOGoxUVp4NkZZSGpJUWFtVDFEVlN0OWNyUlU2T2wybm8reExUNndwdGhxQ3o5cVNUWTlBNWRocFRqL3c3aW1BNDEyWmRzbStLcXlNTXNmZ0w4eFFJcDZ5SVdNQkNTMFN2T2l4RTIrZUpwalBnNm9wNTV2UzZKeGd0SmpPKzhJb1EzaE9pVmtlV2h2SUI4c1djTU5zNmpjSmJuQ2tOVE85V3BIdzZpWEhDdTBwTGhRQ0NQY1JwZTZzM1gzd3FTL3I3cUhLWW12OGFwQ1VRTDI3Skd6VEhoYXJnallBSDRDM1luZnlLTkZzc3dtVmxxZzE3VUR6TGJrRlFsRGJVNmdaRFcxTXdNeDRwQ29wcGswbUIyMTgveW44RkN6TTJ5VjlXenByTS9DdmpCRXBUdTBwd25VaDJ4b1kzZnJjcGtyUDl0VFVUdjdzM1JSU01Jdk0zaGI2c05EUzZHcjVFSDhmK3VmUjB5dkFUMVA4blczVER5Y2xlby9OSXFuU280TkN3Nnh3ZFFXK0NHemRuYzZSeENpcVJrTjEvUXl2aER4d1NhV1gwQm54M1pmZlNBdGNpaThhRlNoSThsU3ZuU0tOcHlHK0EySTJXbzNJVVJwdFlKUnQ3ZmhFdmI5cGdCQ21ob3JsWUlWcmNOVVJZTHg3RFAxRVM0cTdKRE1JQmQ1cjNGWEJ2cXNIWXJJWHhaa0JsWkxEV0xKRUlITWFuaFF3N0ZEUThIZHNrdkFOQXNwM29OamFYdVB3NWcyY1djNFF1M3c2WWhuTEhyeUJ1SmRvc29XVjMzNGVqckRMV3NSLzFrMmRqMnJ3aDIwYWc2N0xvNkcxSkRsYythS25FUmlVaHRLWG93TVFNWkJZOTF2ckZ4c2xGWjVOaWhrV0dnKzN0dzYyd1pYUE9FaFlxNVpEdmZZRHhOeFBIb0ZOc2E1U2UvME42SUFJR0gyN0IzTktGWFV4d2xsdEtwK1FUMUlUSEFYdnpQbVFnY0FNWWw4bkpENlh4SWlFbVpNejhEYVlISG5ZVXNJTzZ0eHcyWUxzWGVJM3NqWUgyR0FxSGVRUHNzNG1OUlZlckxEQTdZRytDYzU3MmtHdEJCdWtxek5EMVRxa29IcHRsVGozdjZ6Q2dQZ0V2MjNWQVZmSVVVOWViTGpIMVlsSkFkVnRGellEVkpETTdPT2NiOEdNU2pycDNTSkVsaDFHeHY2bU1iM0VKT0VYUlZmckphaE1CS1QyMkhWdTV0NFZsL2JEN1N0NDNkK3NnNXo2dUNyb2RxVTVnV2txWmxVQXRTdXptbzN5MFp1QXVlQjdubXVZb3Z5bllpQ2xiWmQ3L1NUVE5neks2U1BXZ1pRWGdYK21jMktiY3Q2QUZZdTE5bWxUdGUza0Q2T1JUZ1JtYUVVZUxPanFlWHdRa0U3aFNneFRIdFgrejUrODJRQWZKSEVwOFY3bFkzbnUwMjFURHlBMllmc21NaFM3ckdHRTl2b05ERi9GbldTSWZFQXloVVF5RUlORDR4K3AzWTFhMCsyN29sZHgvUXZBUmZhSUh6UHQyRXRvdGZITWJ2b29jWE83SDRRMHhPZ3VJTVJJbGVFRU93MFVJQ0pSVUllakJmR2tYaE80MllscVNKRUxVOVEvUDFBblY2YS9nUnRLRUxmN2g3VVNqK3VvNENIVGtOSHZWR1U3dUtYT2FEQXZ1TjQ3OFFDaVFnaVQrU2NlVzFEZ2w4d0w5cTNOUFg2TjgxdDNHaGVTSWh0QjlVSjIwclNtTWtqUFlNTG4xem5PcTRkbFd3bUFFNG13NGs4QlZzVmxJNXNrbTczNlhKZlhyUE9aS3lRcjFGMjRhV1ZXOGhuclpveHlpd1JYNmZGU1RDalhuYmU4MkY3cEZzaW9HNXE5Z1pSNmt6ZzROSDNsMlFlZXBXS1dsb1ZPM3BpdUdVa1dqaUZsVzRUcUVDMytseTV5NEtTcitQcStrUmQrd0VncHkwMkdLL001ZlJ3eHU2TjdPbmV0NUQ4UzNMbTlrc1VUNm5TZ1duWTBEcFZpRjF3Q3lpTC93cDExOEJTcHArdHNpRFoyWDVwbU93aTBJckMrZzYvSHdrTCs1OXdJZjJLTmlsTk5rSHRpd1hCcm51cXhVZmlHdGVFZWVkZExBbTJvdkxaVDZTZEY0SFVKYTZId2s3M1hJcFBVR3I0alliaWwwNmZhTFRHK3dERXQrUGdzTnhrZGU5WWFSRWZRT2ErdjluWUNaQTh0NFF0WU4xaDNWMXEwbENZSFBraHY1Q2hUUG43d0EvQ0lNc3dlQ3VXYmZjejNpK3JFSzVOZlJrTWs0aEVCbE9LcEZkZys2VTRadkFzMGIySTNGakIwSittZFNWOWxIVzZ6dEgwZ1I2eGZoMEFkSDBnZi9WOVlXRTNkSGlaaGk0SzNaMkdoTU5WVFQvVGFmQTl4cEhHSEN3M2laUG9XNzhqT3F1WWVjU0R6Z0NXeXppdjVNNThEdEQ1eXVCYWIzWkdIcWU1MkpIYUlDS2pIejg5TmxCcDBjVUVMN3YwMUNIMENsYUkra1R5dWZmcWtQWmNTYjJRTlRTamVqWUYvOUJFZi9jUkY4ajNlTHBTV2RVRW1hZTZ1d3hWVGU1clExbDBCRDZlWjgrOERqdGVYVVRDSW9BdjBUdVYvUEs2NTJoUG9SL2pjOHV2dFdVUnVFK2FsaGdMbnR4T3V3V3pPSVhWV2Z4N2hDQ3BZUHR3TVpMZjBaQmRQVE9FZjd4QzFBbnVxejJtWUkxTEt2b2V4dG9kWHhkaThWM3BCVjJoN2JnTEFhYlRiY3hpZ3ltVVk0Y3M4NmJYTXE0ZW9RWG1rMTlOVllOUFpBTjBXbG02bXp4SGQ2UHhPNS9GcEl6NFpjL0s5eWFreTcrQkh6T0FVeHlJL2ptYjJGUXRGN3VqK2F3d3A2ME9MaUJ2ZTBhaFlvRGJzdWVsNDN3SmZhWHN6cC9ubDJKQlNQbDlkSmFWckpTOEw2L1A4MWxlSGVqbjZpTU5vWDlhK2c5K0pSWGRpeTVNeCtZTzR6NkVzdy9lRkdkRzNLQTZUazBBdmRHSFNpdG9oSVZZSnRxNTZ3R014bnduNWRBWVBoT2xqL0xheFVwMGpqRkx2NERkVkhzSEZqc0VWcDNpVFY4RTdqUHAvQ3FlZFFuMENwOVQrUjhOdG83OEg2cmw2bDFJV0R0bktSUlpBeGdvQXYrZjRjQ0RneDdLNlE0ZkR4MHRyTEN1ZFVSaGVWZW5UT0pKbTJvcWRSK0RmSGhpeWphUm1udmZma1NXWncxQnhaUlhFaFI0NUF5QkpJSDhkaXpBUHpkRS9kdkUxSWc0SDN3NmFHdm03K1VOOFZ1dStUNDdwU0ZJUm51dFRHRnp1MllMd3h4VkhjQUV6b2d1OGxzVmpWcnU3VGE5OHdUdFpTWHR6RGVIZUNMMlp4WlgyM0Y2NW5CZzg3d0NSejNxdnYzMk1WajF3Zk80VytYRVlmZ1VKTGZvbGpuNzBZMWZINHpZTnBCLzBldHgwdXdVaEJBb3FJUm1DSDlCb015RDdDZVFBOEx5TzVpQlNmNW5hMkxBaTR6dlVwVzBxVUgxUWM5SE5XU1BVS1cwdGVLVXBINWV1Mk0xMlJSM0hhYlBKZnBUV1l6WnJHNEFneVQ4OC9mNVE2R1NSSFQ2U3lSUUg4OStxaGl1OGhYNGh2bXhacTNaRWIwRVY4NkwwRUxYV1Y1VUU1NE1wdXJhY3R4TStEbEVmV3NjTUZoaHN4ZnMwZzdmcWtDbko2UVdrRHhqa3hBa3h5RERhL0xUVUQwcDB1eFFWSXkwRzBRdG1VbUpIbklXRVFjSkZoM1hXcmMxaXgyclphY2lxbXhXOHRLTEUvRXBmY29wdzViTE52am5rd1lETVJ4Nk8xcnVIZFdSd0l3TVE4Vmk2SGkrajJaa3lCUjBIWWpTR0pRdktKb2JNTU90c2hRSElvc1pQcWgyV01oaGpUVUZjYitzejVwK09FWGhFZGVHdXB1eVRmRGdieE9JZWVNUWZKRVE1S2dLdzdHZUU5SmMzdVJ1a0d3MEZwRk1qNmFnaExBKy9hMStFU1pEZWlYdGQxVGlVaGNvU2dTR0I2SlZPUjd6QUpMczUrT0JWdVZvcWVQSEoyQ1lKUmpKeGN4V0EvYUdJak8zMGNEekQ5WHJubmlqQjF0TjN5UEgwWGtjNCtSS1ptQlBTWTE1dVMvVjdVVVd1N2dsSjI4NEFIbVJxTTVTSFJ3VkdCaHJUTjIvVGlnM0tVTVNqRE5JVkY1SXVhUHFaRVFpNTlEY0dlenlEd3pBenM5QjFFQi9pRG43R2d0cVZscmxZbU90Q2xheG1DSStwazJQaXh6WU1yWkhleEVxUndZMVNYb3FBTFhOemthVFRac2JXb1gxV1JjVHN1bFhpaC9JWEZwUFl2eEVhNkFGWmZ4NHhsTk16Zk9JdVVSY2J1KzZxdmhhU2hmaCtYdTZTa3ErVmFER05hb3VLcHhZT2I2QitBKzFUZUlJRzdMM01SKzVIdFVURFIwZ2JjTTB1S1o1NFBia3hBRzViaHNINm5IbVErMUc3RWZwZG8xbDVjSjdJSWNIaDNuR0pXc1lsM1F2dlhaYWhKdlB4NVU2Sm1MUXZvUURKY0ViclFaNTIrQzNSRnIxMXBaZC9NVVVSdjN0UWgxMi90UEIraHdyMXNtTm9CVWY5bE1TYjhBQmh1MDZ5dU5mdWIrUzdNN0RiSUhyQlJtL2ZFQmZNZWZtVllVbmdnSnAzeXVZYnFIZ2xRYjZDUVZtSHNlanFhWjlNVHowYXJDRXJBdXF5R2srVWYycmo4UUFSWmk1cUN3bnRDUDBmajBLM1FveEpsZ2ZwYnRrWkdIRlRTdENBR0JLS1kzOG5sK0pLOU9RRkZ6UUxnU0toUExORG1ySGkvWnNIR2JJZ2RTendDL1pXOXU2aW5vN3NuNElVUnUyQUNUOGlGVjhDanBHNnQ5dHlDdk5TNTFjdTlTY1FzaW45K1ZSa2pLZlcwQ09pblhOVWpuNXQ5eG8zOFhRZURjcnZqampMUEFrRUlhU1RRazkrSUVIN2NSRXdFNkhsYi9qdjlTT2ZkaWtmclFsSlpxQTkxeDJEWDNjWjU5cnhZbUJiUGVHS3NaTkZJT3ExU3psSnJCU1Jid3BHYm5UT0lxM2pZemhwNERjSklibDVremRqcFprQ0lIVDh2VnhYZ1lFYnBwYUVjSmJzY1BucVZGWUNNd20xUDRzbGI1MkxTN2JUN1I4REFDVUptYi81bG9xUVBUVVZwWkNrQ2lOalVCcEpNeE50NFpxZDQ0eWwvMWxibllDcnpZR1JPc0RmZS9OcnU5QTJ6TjN0eXhCZmhvZDNRNzlTcytMOG5MWnFaZ3MwSzBxNUh0dUZqQVUyWVArdkFMRmt3RytpYXV1bndBTjR6cjI3U1owakE3dm4xclIwM28vVHU2Y1FvTDFPWHFwVld5dHFtN08wMEZrNFhvYi9zdzZtQ0lYUzRNMHBTc2NaWWw1MDFOR0ZibDJtM1VGZlhzUHdncVRiWkhGNlhCMEdqdVJUMElmTDFWZ2I0ZWVLOENnM3JPVnNtd3JoUnYzVlp4c3lHaVp0eFlYRFZxYWY0VGZEb1JSR1RnZkk3eFIxUGQ3aG0wYmRUdXlVUWZ1Y2hlbHlLdlpIY1ZHS2NMVDUvNW56NVVIMlh4L0ppdU5KOE5SMUxUZ1FxWXlnaDFsMTVEUVE3eStDcG1BZ0EzWGVIS29Tc1Z0R1J3YWh4SEJ1VVAvd0FrNHVHYVhYRGI2SzMyUk50K3BJbVV1S0ZVWVlyQkMySXc0eXFHTm9JZDJxQmdTWGpXWko0TVhOVFI0dk85NUlWbkMvYWdLRkNVdjlvMGFmbno4WlFuQ2ZscUlRa1VBcFRNb0VBOElwVnBUNHlhbS9aRy9rWHJ2VGNxMWt4TTFGUHZ2VVEzaFdLYzQ1TzQwUVozRlpXZ2NzVzFUdi9BK0cvTDZqZ2FmWGVCcVIyaEFoZ1RpbE9kWUx0VFB3ZWtvaWNwTFo3aWZjZ1FpL2ZjZEFmN1kxQjEvaE1lSXM4UG9YTi9zNS9zVkJUc1U4QmNiVzgwemg1MkpTOVA5LzVCNnAyaCsybm5qWU9zNlZVeUpPSlFwRmN3Q2wwVFVsUEo1bzJmNEZjRHpQQXFqYkF3Y3AxakUxR21uZVkxSW5VbnFBWEJjOTZsQUZqSFB0a0hSeW1HeWdsakZoMjFZblMzY0V0MFlEOUtzdFhVYm1kTGZGSk5ZUHM0VS80cVlueHRIUzR3ajJRWSsvSzVXbzN6Uzh3bEU4Ky93bXduT3lMdk5ISS96aXJxK0l6RitSK1A5RmtPSmFEZk9qVDhzTlFBeGhVbVZsS0R2SU5KMTMvRk13OERzci9NOFB2cFFQemRRNldvWkxyVDJyRE9UcFY3b3dtYUladEg2UGtJTXZZa3lXV1hObzFMc0hCaEh0dzVjaUthSXFZYXlKcUY3ZTdPRDB2N2pvaW52bTYvcHoxdVI0ZFNKcCtXeDZzZk5sNk1TcTk4VmlBek9oTFpNY2RBOWNldmlRTWNkMDdnT1IrSDVYVmZaZjZyYWU1dGRBaVUvVkN3MXYvWUs1amF4VHdpa2o2OTlZa1BzZXpSMVdtNUM1c3NmNmhXSktUTDBiWW1yM3BHZ1Z4SnBLd0IycUIrcTVxd2VaRVB5K2J5YW9JWkVKNDBocXdlYkZObkRMS3M5bzk1dkpwL3F0TU5aSFdiaHVhWTVjdEREd3ZZZjVVNVptY3UvaFdmS1AvQ3UxbkIrelRLRHhWVUNRWGZ5b3g0R0YvQmVvVDlaWXNncU5tVzBkQmtyUTUrVXYyTEozc09Pd1pmV0xuclB5Q0l0OUszOGE3V05QclRpcnFwbkRIeUYxWmE4RmRUN1lJc0FQU3U4YVl1VU1vOWszY05xWWRPRVh0djlHc1pacVhKZTBJK2Z3UmpjL1FVTVp0N3lhOW9DTzdFcmVMUjdDWEhRemdqOUlGWEFJZDNNeTJjL3pLUWdDUDhkSTZubnNGN3NNYkI3Z09BT295bDFVSUR6VGFXZHp2aHIxU2Nma09JZEpSQTRzdU9Vc1k5N1B4NW1sdEdxcEsrSEN2UDQwVjJPRGxMUWFrU240MFByZVVmaUFDa1loQUlXaXBqZGZxUGJpOFRUL0VxNEtkRUo5RkNKMnRxRTR5dENWMXFmZVdUVzZEbERFbUNaY1FtUVJiclBGUlVaYzRTakhKYmw5N3hKait0dUI1Y1FhbEdNTWpBT3BQeFozdjMyK1pCZEN5UVQxMXpYWDg1aTZYQk9kY1d6UDZoWWVRazhTQWI3U1dqUVFMbVVXeG9nQytHOFNNTHZKTjNJUWdlUFkxY2R5dG03Q1Rib05hWGxZL1N3NTRKeE1rTDZhVzZIQkduYTd3UGJyN2xRVEl3cmNURDg0NzdsR0Uya2l6Z2hEOVo3bVlySk1DdDFWckRXK3JKdDlvMEJkd3EwNTJ2L3BqT3J0b3NwR3poVGl4aTY0RFRqd0FRdjZjYnROKzF6NENDekVBSjdJdHlMVWRtL2pPbi9BaWVtTTVqRWdHRCtzbjF6M0JEUTZnbmxsSldNYVhnT3oxSmFNTHIwUHk4a0E3T0FNK3k4L3ZOdWRFcm1xcStCenNqalRRNzlud0VXSGVtQVZsSmx2c1p3a09IZnlWZExDbU1MUFN4elBXZWs3amNvWWVINnhvY2N5Wm9yNThTUjRZVlo0ZG45ZEdqeWw0VkhPT0xHcFhjRFRxbGlWcnptQWY4RWJnUThNL0tZem16MFFhOU1uWjJ1TWtoNU1JQksrNWFqMmlPd090TjZvc3FiUGlTVkxudkNONG9wUjRWR3VTTjRPMEFxY1J6RCtqaWVveGlyOHE4YXhTbUhOU1JDVjJnZEoxRzJRU2ZkWDJ6dE9uQ0p3L3BXZkFLWGVzN2JSVk5ZNmt0MnpmUzA0cjFXU2FDSkhvRjd3YThwODd0YnJySjdGdGx6dFVodGlWYUNCTlc2SDl3Y2hCNnE5M1dHZlpqdU1zRWhlV09MMHdUM1pEOXpmM1YrWGVyYmJOdCtLVHdqRU5MUW1sUVlWNnpiK2dBM3NtczdxWEtidS9IWjZwVW5ManNHNmkyQy9LQklQNWsxblpoWCs3cXlra2tPTkRSKzFXRFZmcW52OWZLNjFaaGYxRElnQ2ZON0o1S2JLUGJkLytVK3kyQkpHQWZIZEZ3NEg3aXA1eUJncDVsU0xTMWlQU1RFamdMMURTNEE2eHliMU9jYXhCRWxJOHJBb1NvVlNEWW04QTUzQWE0K1JZK1lIU1NaaEtLdFJNOCtXTVNYa2RyZHVFbjhGT0pZVFQ0bXFpYlJWdjZnVVhXV3VleXdQWXdzbnEweWJUY1lwbmdxaGJ1RDFuVWNzSEUxT2s2alEzeWswSHdjbmJNMVFwT0lIbkkxQkxKc2ZpdERkNEdIcDZJdTMwZW8rbVM0MGZQc0wvZHo1SnliZ1dRaFoyT2pzUUdJRklFSVNXcCtXZXBuVEl2clBqdzYxeDdHcVp0V3hvYWI2MUw5OHVxUGFUalBzTGxmSFNXaFBUQ2dkUnFWVE1va2MxYVJCdXkvYml6L3kyVFRXUWlwOUZMd1NxOVRYcXBseDhPbFBPRkU0aDJSbDNYSjdRRVY5Q2dSWDAwSjlzcXVVNUJqckRSckQvVzV1eFNpanFTQ0tlVzlzdmxjbnM1VEdJLzJJVWhXU21oWkxGN3M1TmpxWTJHYlYrYzltSFZ2UXAxWWl4dENCLzl1R0x2cThFYW5xbnJQTlo0SmVJSmNTZC94eVlBSDl5VTU3VTlZdFNOeUF2RnU1ejhZckZiZVdJVE1LSi9kK3M2UkxrTXRkR0I3MHF1R0t6TkpGKzlCOXZMcmRHMHE0NGNnYlBsdmhQWXZTVHlMMEl5a1IyUloySEpyVXlybldic1F2VDdHLzBmM0xCUzgzcyt0R3ZPM2VJQlNRQ3crMTQ2YnF3eE5PT21OejY5bzFQTk55bThzRDZWaHl2RlJNcjBHQXJWUDJZZEo1eDlyWnhPOURJcnR3SlJ6RmNraFgxY3RiUno1MEh2UllPdkppQXpoUHRFaGhlTlJXOUREakRPTUVuaWJtVENtVmwwVUo5UUFxendpUTM1eWVUTk9VenpJakNsZ1NKUDBaTDFwODBJVFVkSUdXVDI0WkVrc2JqR2hiL1BPT3J6a1QvTHp1cG4rSE5ydnFSZXFaUUt1V0I1eXMzcTVieGFSMDIxODlTeEMveEpkR3U3djl5OXdpdzV3T3ZJVHpEbE9NQ1hxOGk5N3A4SktEQjVCejFYTTFZU3U2WWlxcEtqRURMZndCSHZUM3o3NjYwanJDazV1dnlJNW5GV05McjA4ZDhSYzIxOWdXMDdsZ254VlFHSVhHTXFjZGdmMEM4cHRZTXcxMEVBblJ6ME9IVzh2Z1lveHBBVFd3L29CT085Nm5yYUpNS040R01adStiNlM5c2QvZ0d5S0Y0aUtRS0oweGxRdy9idDVId296dW45V0FXeHZUNU0xS01GMXViY1R2N1JvelZHMWhabFNtblAvVzluRDFNRlpwSi9xdDFrMlNLT1ZWRFVLbi9UeWhCaFBseFJERmVDYWhJSjRXaEUwYmFFMzJxN1dPZTZTYVpYU20rbXpZbzY0K3Y0WWtuU1MrMXN2aXhaUGVlRWxDODQ4bzZpOU5PYlNZVlpaZUxKTG1rRmNGWDdCTWJGSzMvSGhMb2FBY1Z0UzZwZ2xVVU5YMjRrSE9hcHg0RURFYjd6eXlJQjBQWUtjU3liWDY3VDBEdnc3VnJ2WlZNM0RtcnZhd3Z2OU1ROVJka2xGRytTR1dIRm45c0pjN1Rpb0UzZnVrVFVyaUtWM2RaSTljazRiNW5MU0VhY1ZSQ2dMeU9xdlRjckJDeHdBcjBISXJ5aVl1NTVjT2tZckI4LzJFSFpGRHRhQUxxYUloWkh0NXQvQVVpQnM5QkZld2hmc1lTU2lkUHJXbHZRbmdKSlVrVnNQNnJCcTFRM2ovU3ZjMjVmTTkxLzBFbzgrME42c2VlVTFjZmE2Qk0yWDJBWHdIQmtkS1paRFpSK1lDaElYZHJtKzdLazVLTGtUUGtTcjArOTZTZS92SmtHdVFTWjNlN01pZWFOYXdueGF0VGRlSXZhWHZkcy9GSzRsNWhuckZCdWVEYm53TVpCV2loY0tHdGcwQVlHSUx1czNrUU8xWDJoemxpSFl4ZUFlT1Uzc0FuUWdkeDYwVnZmL0I2ZnFLcW4rUEZqYXVPVnNXWGNyWFVaT1JYTjNFSVJLOEs4M1BEVC9IaHdnS0RESjRmYVYxSkorclhxTmZJQ2FvQW9FbHBqdzhHbFpHK2phS2xIb24vZHUrSmRhcC9pQmRhbisyZ3BwSFJDSE1qK1dhQ1p0dlYyQVVjZjZsUTVVVGNvQ1djb2lLN0VrT2ZHdHFOR1Y4emhlaGM1L3dEQitmZDgydWVZNHJjc01id2phWTR0YnhoaHlSRlFsd2VhU1BjNUZQam9kTzNTcUloa0w2OUw4RVBNWHMyS1ZocmRsRktFZlRSRlk0eHBJcS9PVURsYm9kZDUrT1VVcTRjbElkV21YYklHSktIN0RUdHF5T1JSRXByUStyWDVSZjU3WWFrcURobS9sdy9xZ0ZNaDk5dWMvNDFlMEpldklvalJBSy9uMUYwOHpCOTlkYjFjaXpYQU5tdnFseGxsV2xsMGFJTmFGN2VzVUlZVlZCQTJiSFo2MG14OEtCYTVrNERkNXpxRUdSaVNoN2VDZlRtQTYrNHArV1BtZlBOZWNZQnFSZHRabExDSEc5WVpEWjQ3dDhGUlJlOEQ5STM5S3hRVjlUMU5rZGtaeFhROWp1U0hiR25vdC9IVHpPcitzYkZVRFN5TjBmT1FDS2pBOTZUOThJUHVHdXNMRHZsM1V1TUhRK2tPdjh1YSsvKzBMYWJsbkRKcTF3SGpOa0ZnTUlSblJQUzJScU15TklRZ2NKTlk2S1lzS2dobkVTVjFMQzRSQkJNb2xBY1dYODU3QzMxb2FUUHhxczVDTkIrZktiK2NnTUJTRXNEYVJjUjFsRURDRVZ3RFBSUlJpeVhMcUN6MW1vT0VncjRhVzlhd2VCOU1mSW03dms3WTd3NjJSTkYzY1QxTDF2TEZKSFlnQmtKb092QzA3NGI0OGpncUJqMmtqVGd0bDN3c05LOGlpUXFzYUM2MUV0M2JwazRBOEozcFcxT054TTd0d0kydnFya1lQcTdXZ0M1RGU1d251aVVTTDkyT1ZkbTZ3R2RsVDRIMjdGZytISjZuK00yNkhuQlF4S2FOOXdFSG9yYmdZd0hxcUxzM3g2SjBRbEhGWk9CR1hyRE1kUHJURTlxdVA3ZzRhRHRvTmltWllUMkpQM2pyRzJXZHhRdWNGWThpckpkR3ZRRW95MjJKdmtqeGpLZkJYamRQOUFuZkkrNTNWb1ZKWjNZb1FEZ0pVQk15RjM1dHZqZW1qWkhIWEhkV3RSMWU1allHakZsNDQ2WDZVWC9JL2FidFRjNVp4emhSeXRlRzVkYkQ2dmcyc0FWeTZ1YkN0NWxKc2NNM0o3WnJsVUx4QkdnMG01NW16bFhHRE5iOStocWN4Mm1xb0FQRlpjK3Z5Z0dFeTI4UjRiYnJBTzFvNjNqTHVxMjJESjcxZ0RRbnV6TUNhQi9xbjhFZW1tUU55L2ZXTTRGdWpqMzI5S2FzQmozamFyY0gxeTJCaGFIeFg5L0RwcHZQKzVrRGJ4dmVCamV0WmZ1MmRVMW9DSnIwbGppVy9QUGNCbkR3YkdSZVFxUGRQTjE3TlJaRXVMd0ZwcFJkZWNhUkEvQ1VkRlRCVnV4M04vSERLRWdRaEozVUxnSUtQNHFkVjNLZVlsY0tJV0l0WXpYNExqYnBJcnQ2RWtFSjJVODl0K3lQa0c2eEdKT3BwWS8vRC9DRDNWTHVHT3RGdFZYZnVQeURjV2NtOFpmbDFkcmoydHh3TUdJelJPMjBWK05COVQ3dVN6WVRuWWFvSUhLV3MwY0dRckJaY2ZWWXBmWVVIQ1hJRm4rUXF4eWZnd24yRldxVWkxWm5JaDlNN1NkRE5pREl1bnFZcmEycE5LdGh2WjBBSUpJdFFzR2cyRmZRU1BnUTdtNU1mbmtyM0NTeEZOVHFQQzdnWlhTUEVjN0ZVLzhsdzh1UGNIRFRjSW05Zm9jeVpzMEFlak1LNnVWRm45ZUYwaXZNbS83NWNDbjdJQ0JnVE1ITC9oWFV2RTh6ejNXOGo0ektOdHJ1Ni9BaEFqbktxaDdWRjVZLzlrQUFRQWFBRUFBQVNNQVFBQVBBUVFqQWdBQUFBQUJFUUg0UUFBQ0FBa0NBUUVLQWdBREFCbFVhR2x6SUdseklHOW1JRVpwYm1kbGNpQW9OQ2s9PC9CREI-CiAgICA8L0JJUj4KICAgIDxCSVI-CiAgICAgICAgPFZlcnNpb24-CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvVmVyc2lvbj4KICAgICAgICA8Q0JFRkZWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L0NCRUZGVmVyc2lvbj4KICAgICAgICA8QklSSW5mbz4KICAgICAgICAgICAgPEludGVncml0eT5mYWxzZTwvSW50ZWdyaXR5PgogICAgICAgIDwvQklSSW5mbz4KICAgICAgICA8QkRCSW5mbz4KICAgICAgICAgICAgPEZvcm1hdD4KICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24-TW9zaXA8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgIDxUeXBlPjc8L1R5cGU-CiAgICAgICAgICAgIDwvRm9ybWF0PgogICAgICAgICAgICA8Q3JlYXRpb25EYXRlPjIwMjAtMDEtMDdUMDI6Mzg6NTIuNjcxWjwvQ3JlYXRpb25EYXRlPgogICAgICAgICAgICA8VHlwZT5GaW5nZXI8L1R5cGU-CiAgICAgICAgICAgIDxTdWJ0eXBlPlJpZ2h0IE1pZGRsZUZpbmdlcjwvU3VidHlwZT4KICAgICAgICAgICAgPExldmVsPlJhdzwvTGV2ZWw-CiAgICAgICAgICAgIDxQdXJwb3NlPkVucm9sbDwvUHVycG9zZT4KICAgICAgICAgICAgPFF1YWxpdHk-CiAgICAgICAgICAgICAgICA8QWxnb3JpdGhtPgogICAgICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24-SE1BQzwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPlNIQS0yNTY8L1R5cGU-CiAgICAgICAgICAgICAgICA8L0FsZ29yaXRobT4KICAgICAgICAgICAgICAgIDxTY29yZT43ODwvU2NvcmU-CiAgICAgICAgICAgIDwvUXVhbGl0eT4KICAgICAgICA8L0JEQkluZm8-CiAgICAgICAgPEJEQj5Sa2xTQURBeU1BQUFBUG5GQUFFQkFRQUErYlVINWd3Y0RDQXNBQ1FBQUFBQUFBRXdBRUFBRHdJQVFBSUFRQUlEQUFFQjlBSDBBZlFCOUFnRkhRRHVBV1VBQVBsRUFBQUFER3BRSUNBTkNvY0tBQUFBRkdaMGVYQnFjRElnQUFBQUFHcHdNaUFBQUFCSGFuQXlhQUFBQUJacGFHUnlBQUFCWlFBQUFPNEFBUWNIQUFBQUFBQVBZMjlzY2dFQUFBQUFBQkVBQUFBYWNtVnpJQUFBQUJKeVpYTmptY29BQVpuS0FBRUFBQUFBQUFCcWNESmovMC8vVVFBcEFBQUFBQUR1QUFBQlpRQUFBQUFBQUFBQUFBQUE3Z0FBQVdVQUFBQUFBQUFBQUFBQkJ3RUIvMlFBSXdBQlEzSmxZWFJ2Y2pvZ1NtRnpVR1Z5SUZabGNuTnBiMjRnTVM0NU1EQXVNZjlrQUJBQUFVVnVZMGxFT2tkU1FsUXdNZjlTQUF3QUFnQUpBQVVFQkFBQi8xd0FFMEJBU0VoUVNFaFFTRWhRU0VoUVNFaFEvNUFBQ2dBQUFBRDRUQUFCLzVQZkd4QUpWT2QzeHpjWWp1MXc2NVZGaEtwbnZQRGYwMVYxVmdOWitSUG1ZOEYzSS9wT3hrbjlLK0dyTXF6VWRCUGZKb0JvZ0lDQThZQkhIK1FEdzhHRWI3UmJQeXFBOGFCcnpZSlpSN01hS3lIZ3djNU1nUHdKZ0QyckgwaWU4c0lpVlFOSFZoMDFTdFI2MUUraFVpaysxUkVFM1lrRVdKRExUa1ZYbVA5MVNhT3lnWGFBdzFDT1FiQ0lvRm12bUs1VWFSWlJBRVcraUc5S2pBdytYMjN3N0U4ZVZJVXJPcHlRTVVEOFNxL1pKdVM5dU9VNGNhNnVNYXErbEZwcGFLNlFoa0cxT3c3emJFdWpBSEhrSXFZYTM4U0lrQlZzWThzYVZGMnhNb0Q5c0J2NTRFeDV1QzNUK3BQMUJ2eGt2d25mbVVDK1JqbG9SdDJ6Z1Znbmx1Sy9mUFdlZUI1S2JUV0JQQXdWQjNzTFMrRUZ3RlYxakU3UHNBSmUvYmwxTFBiSUhPc3hBSHgySnl2S2dsZGdJc3djczNUL1JqLzZpMkQreXBFMTJISWZyaTJ1Sk9DdVBLNlRVc1I4eHRLdllJUGh2RzFDQUxUYlFiQURYRTZQa1dnQVNMQklyNWVUYnI3TjFpK0VwV3ZPVklERm96elVpSC9zOENsL1BMaS95LzI5V2lxRitML2RyN1Fwb3pscDFMYW9oZmYvRGxIbi94ZmplamlwcnVqak1SeEtMdGlubjFESmtNam8vSDVXaFBqeDB2RXV0WXFBL0VXTkFMa1RuU2dCakxKdlMxQ2prYjZjb3B4blZ3RG0vVTVVQWVDN090WEdUSzhyZUhGemV1V2dSUFRjczFHQ2NiNExyS28wRllERmR5NG1qR1lWMldSVGQrS2tFRzhJdFBYNWlQM1RqZGdwaEcwRWdOUTJwcVFIV2lSVkRBVVhIVTFUclY5MXA1dUhXQjF2aW1DQzVhZUpiZ1BCWXYzY1VrMXdpV1NHL01DTHVieGFTTUpQbjN0YzNHWWpnNVNpdlB1RUtWdnNROVZMTVlOMUFTT09JTEFJMW10a25uYk5jaDBIYlBOSzI3UDd0OXJCdjF2MEdoc1EzYlB5ejN2N2VqMnplZWVvbytFOEc0TkFVM2Q2MEtlUGdmR3p3eVNsVXk0NjBMaWtjQzV6Y0NneG9JV0RBRWkrdlgzbTBCOHFscS9iamNUQ1RBZ2FveEhROEErcGlCZ0h4MzFwV2RGbnB5ZWFmOXBhTmtZV29ZcVRpMzV6Sko2Qno2c1J6d1RnWnlFOFVIcllYeXBRa201RWo5QTJmNG44cGZmSVRYem1NTGRjb2ViMFo3UzJ5NnRmNllsaTMxSnpnMFN4MWpSRkVSdkNJT0ZWTnROY21EaWFqTGczTG1TcndXOHJXMUxsOEp6WXkwbHlsSzg5a0swQWluVGtxaG5ud2Fyb0lyZzVpY2Z2VWQzQmFtZVJ6ZjRRWDhNaHM1bW56d2xnc0xlWVZjbjRUWTJDNzgyVHRpanZySXVoT1NXK1FlcXpkQUJTdjQwZGVXZ3FFQmVJTk0vaHJhZ2RXM1VteXc4dmNsVkZDOGlkWnZaSGM5VDluNFBLdDJOTURBamxFZldRS1pTbENZNWRTN242VkgxdExUc0hZRGFQUW5PUzVhclRJOUo1czk3WDdWaFhSeWZwY3hHOUc5ODZiTVdrcHdkVTdSN1N4YVI2YnJ0eHliMmdsSk1qNkNHeWo1S3R5dTRyVGdoQzB1UlRwQ0NreGY1RkZSNVdQa1VTbHB2aTVJZ0pKaUFrQllZYk1DZkJhWW51VENmM0k5SExZNUtVV1I4cTlHeTY4dTJVMzZVdW4zaUczNzRMU3ZvNlR6Q2UyMmp5aTV2Rm1HRVN2ajFsNDFhc3lra2NTaVNjcTdqZ1FMSjdlK0ZtekFoL05ENnpiSzdKd3UrSEVGZVE1aGxyUnBxUVEzLzhwN0Jhc2tFeG5Dc28reWI0SitwMnVmdVJVVlRjdE84cVhjc1o4ZUdFblZjVE11TmpCOHh3aFlGQ0h4aTlWcjdxL29vdndOdDRmVlZLYVk0VExkbUl2UXRHbXZqMlB4SXdRc2c3bElvdlMzRnpqMVl4bERQNmhOcXBBSUE3b3VmME1kc0ppR2l3UzJ3Qk9xRTAxT2VDS3lGSHVpS1gva3l2RFlsNVVjQXM0N2xsT0ZHRXBZNm9iWlN2QVQ5WnNTRCtRS20zekEwUVhqdUU0S3liWVhUVmZYQUVRdEF2Uk1pQ2dJRStZaWtFVEh1U2NDZUYrREpQeTdZQW9od2JIcDc1eEFBU3lkVTE5YmtqbW56bG9DTGgxZzI1Rk9lTSt2VW5Jb3ZyNWwwS1Y1UDdRQ3M1cGJ6ZmFBek9TaXlFRUEvNTVMRFY3VHpBMmRLOE5EVXFQd1BGSVBxTVNTblAvdUJRY04zRTF4K3JqemtyaTNxVTIxYThhQ0o3SWdCaFpaZkFWaEZhdDBoMWZ5cVZHbE9lMGhpUlYrakRPLzlnWnZqVmxzUWUvejZuT3RDYVpVMXZ0OFdpWWtoMDNLYjZ5cVdwemhvOStMb2E3NXJTY3JuN0Q2SDNnR2hBbGhxb2xDWkRpSThjVFl4ajB3MTlUVWd5ekJWeEJQS25VcFQyQ2daU3Yxc1RDZlRvNHpNYmp2MVFzeC9nRUJuTUE1ajVDWDFiRktPcWtJODJZSjIvelF4cEVSL1NaRVN5V3pJUHhOYlo2VnhDSmN3UjBMV29WbVEzWmhQcmNHMUY2bkM1MEV1WVVaeHVZWHQvbEdzOW1tbkxSU2EyWVhXaXJNeGVUV3JsTDhUTVJiNUJlME13azNZVGd0SE5rN3FBSGo5aHFQdkNJMHRtYXlsQndlYThtWGo1bE5vd3VMMXdBVkQvQVlhblVhN0k4cHFPTWNBdFJjaUpPMGxlczcrRER2Y0RNMDFZdGxkU2VOdnVaM1lYbnZlOExObWdlR2J1WUhIQWlWTlBEZFVwY3JVTWp2YXhYWU1BR2d4TkV5bjFidkVqMTFld0U2WnYxQSttblZsR1hBclh3Rk4rTndpT0ZJdERvYm5tTVYvZGNxUzJCTlBYMmUrYW9OalFLeisyR1ZXOEorNGtqRGZob2RFTEMwNHdGelVGbWY4MXlybnZ4bE53cEVuVlllZ2ZMcjBZVHkyb2RkRGJnQ2dsVnRBZmg1S1BnRy9PVmRQNmVVT1FpMVA5c1VOSzllK1MvZ3FUSnRBOUZVbFEwb0hGTXdPWW84dW5YcWlqRDRvTXR4TlBqNmRBVzdVZkI4Wk93d2wwNEhXbEl5c0lWUmlQYk1iTWh4Y3dNUiswbGNzcWwvanR3eUF2NkVjWUpGU2pXZHIvY2JqaktFNTdXbldQSi9yV2V5emFtWnhIeGpsSFgxTHQxSFNnOWQzTEhWbWpMWnlRVFBWNnNHZzF2blJSeHc4ejMwdzJEOFFpOVJodndhUTY2d0E3ekNlZ1RnYmJzeTVqYWhmWDI2LzJaZTF1Qm53L3FLUFFaZm9qV0hYN3RtWnU3Nm1TMU93VUl5dms0QmJzOTVtR25qdFNUZVlMUkU1d3pkODQwRkRzUExNR0o2all2ZTcydEROUmQzU2JBb3U2akI5ZEwzVDhXdEkzTHdhUXdSVUppS01scm81eldsSWJ4RjRFVCtZM3BnUlJ0VHN6YUtmZUxpeUtOOW5USWNLSXk0cmFNVXhRNnNGZFNjRk9LenlweW1FdEI4TDNQRFpsMzgvQzdUM2F4a3JZVzBxKzdTVkVZenlIMFFDdHNCNHN6aFowbm9DeFlNdG9QdFhXc2ZZeWliRWV4TkgvTkNWb0RYSkU0YllmVkdDK3VMbVRwQnhCejZYaE8rU284djlaeS9VRTFnN3Q4cmJjL3pROFY1WlIyR3dKRUlHMFQxMXlFUlRkZVFEWnJnWkxkeUdHaW0vS2RYQ3ppdlAxZDZkQU5Mcnh3eGd4TW5SSmkxSWIxQlhmWFA5Mk1ud3paVmVPakF3Qk4zQytQQytrR0hkeDRqQlhxcVg3bkRnNTd3b3p2K1hBSEJkbk4vbks5alBNTlVMbGJlNk1vMy9Ra3hZdWVKV0J4akRPV0NLOXI1bk40alBMK1JRdStyM3lKcENSTUY4RVlqQW5NUmxIU3ZQR3kwSGFtNm5DRXMvZHVteUErb3ZzT0tBTkp6eGcySEVoenU2VEQxY2N3cVk5MFdhbmp5V2hQSmtTRGtRRkFqeFh2Qm14YVJrYWFqOUtLZDRXcGNTU3YrT3M4RTE0Vko3UmlvM3NnZGxjOVh1TFoxckd6Sk53UGFTRFFsZSt1K0pZUFc5eG5Pb2Q3RzlzSkFZY3l5dHc0dVJDNFVLVWo0TkN2dDJpek5HS0VqVXp6Q3NoSURxTjN6WVlaZXJNd3ZiNjBGNWFKQ1dsMVdCQ2QrUVovekFTdE80SFRqNlRkRWJyY0dhMmFrMzhIQ0d3OHNLbTJvZjZXM1d1ZCtXOWI2VThHTUlReitZT3Y1YUZZdEZQbU9MU2VvMk1HcHZZaU1pUjBsZS92dE5rdmlxLzZZNERFWHF4MDNnM0RpbWlrSU83NnJBd0VYWENGeTJ2RUJaTVE3Z0x6cGdUSmxvMy9JUkcrQlZScHhXRWhvSXJ6cTl0V2JtOUNNZVpaQkc3VjIvVXd6TzRCNXNFakxHaC9Rd3Y2R0kvV09vQS9QblBiWFhwRXZlakROYkx3UnVtdUJ5aGZ6WU1JQ0RISHdVN0EzejFSQW5FT0trTjBvcFFTa3FZVGVGOTFtMXpWWEdFTC8zYmdhU2I2QWp1L3ZpekhwV3c1QytUTWdNQzBXaERqREV1ZkY5RVVnYVNMd3VpdW9kYVlEZHdGMWNMNVNFSTh3WVBQNXJxMHR3NDN0bmtkelNwTnlCNWJIWElPODNIc2prYXp4UDc5NWpqbHU0MjF4TkpJNUlXUTJIcnBhN09URXlheDdqcDNySVRoRHQ2YTRBNCtiTWp2NXFGeGZRSFJRYzF6NzM5WjdyblRnT2tSVVlJQ3JYdlNtWG8rQmsyQU54UnUvVENOaVU0dzBrQm9qSS9MYTQ1SnRwQzBxcTBoc3JpRmkvNmtUZ2ZBVVFlK05pbXlPeW1PWWIwTnhxdzhYQ3J3aTU2dG52OFZBSDVxUEw1RlRSVlB6eldnWk9hYUdmNDhJT0kxR0R5OGJ6dUFnazBNaGhyL0hSTW9HemNzZ3czU2dsNUpuYzBLV2V2NDBFWUF2a2g4RHlRb3hlZ3EvUFVYdktMZVlmN0dPN2FUMStRRGVtREQ1ZSsybFMzdVVwT0kwTisyaXVjaHlIdFRUL2NBWEcxRWlxQkRwc2lpb1RmQThkRkpHK2xkRitFUUkwQnVXMVB5Um42STlBUHhsRU4wcmFTdWRxaUQzWXphakNLOEp2UGNpTkFyQmt2VVFWS0wvbTRRbXpzeGlza0R6bjZxT1NrTjg1NjB6UFh4OFh5NzNHMS90WFplRjIyamhrTm00U0ZQT0QxU3p0ZFFBelVqK3Q3Wlo2cFMvRUtJNURUSm95UFN5KzdQdHNwWnNxZFRmb0d4eGFucXNRY3JkYnlnSE1OcCtpenV5Tlc3L2ptMUdVOHZ1VVNxcWlxVVhOazJyQ1IzaFArRmw5UGw5a2RNV2pEZ2pvK3VUYnFEbCtiS2NYdVh2OHZ6MkdnUFhRVFZiVUFnNDlka2FqQ3YzUVJ2d3EyNW9zZ04rby9ETUN5M0R5dnYxVEo2c0FheGVrTGVhd1RPMk52SnFmMFBpNHg1dFlMZWtRck92eTVYTy9tcUVyQWIzVmtlMlVkRUtJZENpMjdZRXVITHcyMjlUR3VaRmdQWVQvTkxMR2ZVUmJZeG43TWVRVXQ1eFplVjBYOUtIVm8zaFB2dHBOeEorelZWUU5FdG5EREVGNk0rUUtGTElHS1dMUFJHZmh6ZEFhTlduQ0JIcmtqTlV6djlETzJwUUhXdFRoTERmWVIwU0Nid2l2STZUUHRlOGdUWFlseUxWL25CcG5wWi8yZHhiem80VFVqNUZtZngrQUtmRnJjZDMvNUVxYjJudmlwVHdlVW1EVFBTYjZwQ0VvZHNHaVE3cW1mQStDOFJjNEpGT09veUNISXJycEE4QXpDWFFMSGJ1Qm9wdTNud1dUTFJhRGwzREdoNG50ZHJTcmtpMnRWZEtlNmR3UkQwN2RWUUkxdnNEZytXQWdXY2RQQVg0bFllNXA3L21wRjlzaldnc0VQLzBHeE1rYzc0SVpOcXV3ci9tUmV3dllQWVE0K3NOVXVxRGxORmU2T2paM3BGQ2RNdFRSamdmcE8wMExnVm5RWHI4SWZFbHQzL0dXdVRwMW8wMVVxMjQ2Zi9pQ01ienZmL3ZRdktSNEZKQWg2VVJpbngxMDJoeEhDYndtRVN4WkVhcWkySDJPZWJwdlI3WWxrSlRvbkJSZC9lOFFTNk9ORldiUnZTa080TlF1OGI0VEE0NzVwZmJHQlg1dHArOEptb2FJRnFHTUExdjFra1JzK042bzUweGxiUFhoRldPOEdGSUE5bStTazdWeVBJOThqODBOZ0xJenhQNEY1bVlOMHdlUHRJY3VzeTk5SmNMZzVCbkFNY2RaN05VaS9jYTRqbUdMM2JXb1YvcGIrcmJhRVlRa24zeE1Yb2JZTnB4ak9oc25GS3VSbng5cnJuczEwNTh0cVZhQWZkOEdZSVFNdXpLdzdhSnpld3crOVJxNGEwUzlhUE9hZWtYbzRzR2s4cU5qWWswSTI0T0xQdmRoazRqWTQ3SDRJZUl6WEFFSnlxWWRsZkY3SmxibnlxUVVlUSsvWWdUSEpMemlrc2dNV1ZjL0FPQWtTMHFiNlRlR2pSTVhZUGxMUGFHQ01NNldJeU12UEt5cXRKMFNTWXdtOHQ1RkZDUzNmZXNROFhKSmtIWkZkZkVIM1plTXdMQUdDWjNZVDBzWHRhbjFtSGtZWDBHN1gwdFlJVzdYdzQzcm0vay9uWDlBZThFelNlcHVaQlJzYm44VG1rVUNiZ28xWHNjYjJsRXgvaDVDamVrSTRXOG8xbExaNysyMmFsQm1WOCtHcjNVditramVkUWNWMG5KU1duNmNkS2pqRys0YnhjcGtGR0NzRzR1dE5FQ0hwWnVjMVhNWE02Q2JnN1pDN2RVLzFPU2UyelNRUWdTNTVQVzFqMnRUR3hLTXNZZGpHbENpSU1GNndleWszZ055cG5ZUUlQWTZ4V3IyRXVNRlcvcGhzajA0ak9VRElReEc1OWkvMHBVVTVyUk9JekxWNzFDeEh0V2RENnRvNldxVFUzMERKZzNtNTNscWZlS3BOaEdTRVNOb29SSTQ1UlkvRDdvbmM1VEFOR2hNeVRoZElRenVLeDQyMUUyeXhnWGlRU05LQjRsSXFHVlMyL2FPMDNjZ2NsOWEzSUJhT3dNazYxYzdIcStnMXRFWUI5Q3ErK1ZmTlJvOXplVm5FZjVPdnpjbGJPeVlDM1drbXRHS0o5UDVtVldzb3dWVTZ1SE9hSWl4Y1dtQkFnMU5GQms3U09KaUsxdENFK0JZMmlhV1AyOEJzWXhZSWpxc1hyR0hFdzRwV2J1YzFSQ2lHcnJzM3BySTBqOWhGeUxna0t6SWpHT0dlc1o5dCtpQzVQaGFORDlmdFAwY1ViM1BQT3ZXWkpZTTRXRlAvYko4OVFhajdWU1NKdFg3UEkwby9heklBTS9CQWNVdzlFYnNkcVFkUDRqSFBUY2FrVEF5WTEzazRKTlloVURFc3dhdVdwcm5LYlIwUjErVEpidXA4d2VyWG10M21nSHFpcFU5SjZubVg1bEVuRjlwSFJQTWd5RmcyaWU2TVpWK09uQ0FJVHRVRE54cXJoc0dtSEdRTlF6OE1JSUlYeGFXNWVjYVBkTGlFVWZVbktKUzdzZjlRR291Z1dTcS8wd2F0RXdkN28vai9PU1Q0U29aUWV3ZFlFc3IzcWZLVGxVOTdTSzNDcmIxN21zYVdRc2p3Ynd0a2lHWjVLSkp0Rk8rbmxoVS9jMUtSZ0VOUFgxZnR5M1VtNkZidnhBWXlsc2JUdXJ3eVRHb2I1a0p2NWw2OEx0blhIUmNtRTVJZGhkZThCYmxZMDB0R2Z2QmU2RmJNaWtuZzltS01lRjl6N2d6T1hkSzVMTmNiTkEvOXNrNXl3SzZIbW04MTRwbU5qTzlWbVBocmU1VDJiTFR5ZWZFYmRQNVhUbXBNek5MSk4yMXNvdmtaR3AydUVFNUpyTjJDVWNGWDE5eHdXaldic3oxWWdZRXdCK2tOYk0vdTlzNWcyNjQyMzFKeDhaQms2b0cwSmpzQVIrVVVnMC9kNzZJeU1kTkxxb0FIeXFwWklwMS9TRXdPelQ3Rko4ODdPMU9qNDFRcE0zVDZJTURad2NteE4rRk5JN0tqYXloaHJNL1NFaGFycm0wcllobFNrQWpnZk9sNU9kei9ab3ZXN0FyNitTdlE2bVV0T2pMWlo0S2d6eWRYZnFLRVZmTktjeEJGQm9uMEF5bTZGZ1hVeHE5VEhqSE1lTDVvU1VuOEpWMXNCSTVraEZQZE1YeU55cmpMZzNQM2N6TFBCWDhzcU1hb044akErOTlDTlI5amFRVkFXOXE2L2JlYmxtd1VrOTJjTy91UmhvZXliRmd5TmM5Y0dlenFBc2l6VHNJYWRWWnZ0cU03azBVNStLdkt0L1lpOWFwcFhhSnlTb3R4THI3WXBLOUVBcnU4YWl0U2NCZlVUbXU0WStlak9IemZTWHBvd1diTGdVbHdzNktuemV1NEpHVTd6TEQwaEtpQld2emNBTGVycmhKS2ZPOEF3bDN4UkhpK1BsMXgrU1FLakJrTzBqRnpSY20wd0lrRWpGQWlsOGs2WmlQNWp2NkoyMzJTYzgvdXVjUVVhN0tKUjVQZ1Rwa3cvVW16NW5oSDVxYjZ0dVFaaklKS0pGRVRHcm8vZnRyRVNYWnRkMmdWZDdZN09HeVNDS211WVRzMG5IamxaSy9qUTJxVjZmcHV3Yk5rRTZPRWx0ZFRmNUxOV0tqT2crUDRPSGVpZjFIaGM3TDF6MUczSjN4TmRDZkQwY1Z2VGdZVjd4cFU1MnRpYjJOQitxUnVDU0Jyc085M01HNDdTKy9EWDRDQWdJRG5uc29BNVdKOE1zNGpZMlByVlRYQzQzR2luUStNbzZWSElxdTFmSlR6d0x1SEk2YkNNQ1ZVM2N3ZlJXK1FPa3F6U2VPTlZScFpCdEMveCtkeHpiZnQ2SEdubFA0eVdGS2l3dHNWN3EyeVBFRkY3MHU4WERXdU41bVAreWt5VkhkZk9FTzE1TGdPVS9Kd0hpOStpNnBjSVFrK1ltU2xIdFVvc0JHeTRkdGE4T1JaK1hUUTRYYzhyd1luZnBRaVhFczB1eG1jQ0VzZ0p2T3pnOXBZaU1XL2U1SW9sV3F2MzluTW5Fd09lUDFJUEtjRldEb1FiaXE2MUdLMDViRnN4VjRyQy8yNEcwZ0RlTnd4eXRDQ2dwbTFnSkhseXpLK3hmb0sweEQwQnhuZFRoSm51NHV2TkkzV2I3b3ZPam52UmdCTzNNZ203NHU3ZzlaOHJFWEJJSFJHSWxjU0lhWG1pRTUzY2g3cHBwUEZtTEJSNklDOHA1S2UvMGVGdUozNStGM1pYM29FMmRwWVhFNVU0U0JsenMrWElneGY3c0Y0UG9NTW1JT0cwZjVCcktMRjB2bEU0aEt2MDZUQnZpSTBoaEkxakxDNnV2TmZSNkdxcUZvZFJXcDdrQWtHd05lMUQvWUNNT01Vb1lkYXE4ZzA2U0dObEF1YUloT3RHNFR0bzNOZHExOGh0b3BYS0orSy9jNGN5MlR5WFcyZlBIK2huOE9rTis2OGI1MzlwL2diZk9CWkJYNkRFTWRtZDJ5WFBhQy9qWGZ3ZWdUbSt1N3ljaUVudVhoeWVjQTlNbTZMMWptYnFsSTZpem9QNEltKzN6S09CSTJlZGUyUWE4alBaL25Ic1ZSNFU5V2xwT3pWRUN3TzRkcncyZjJQekZVZkFDcjB3OEVsY1U2ME8vS2dTQk5yRmhxamFVVGtWREtrVXFOV3FPTUkyQTJWNC9MdU9waTZGdGVGL3hWNS9BUm02VDkxZEZGbTFYaFVpeWVNaG9WV01yRHhUbHdGZ1FJU3FWMXcwTzRTaUhyem11TVAxdWVTT0VZVTRuSk04MGdPZVd1QlV2VmFFRnF3MmViclpHNXhYM1pmTW5JN01KcENJSmtzZTJZOEJtTHlYbHE4bzRiSU9BNTd1MWUrV21nRzNHWURVTzFwTCtPcXBIekdIc2NESlVseUNyVG9XYlpJV3ZiTnpDbnRTcVRTLzJlMEFUd2sxZGFCN01DVGRGM2RYa21mZ3cwREhsT1VhN2ZvZ2FsZ29KVCtJb1B1VnFkaHpqUWdEY0cra3ladjQrQVA4SkkzQjRQbC9YazdzNmhZdlZBM2NBU2d5L0huejA1UndUWUgzaEk3MThSeUg1VFZuYnZlZ1VSa1hVcEZ6bDU4MFBtR0pyUWhoRnJudkNFRTYvVlZobTNvMFc5UkJvNHRUL2g1eVZaRUZ5NWtqS0U4V1RQbnhubW1wVmRjcDg3VEEzMktuY1pVVlA5WUl1WTBoVkdtdmJpRzg5cGp0R3NKQXdpNVgvWnpyekNpQ3NVbXRXeFdUSWVIbDFidVUyMUp4MDcyQ2dZeG91YVRrNkpHRDV2Q01obEhldDJtdEUyODFBYk1IWXFxM2UyRkpZVWdsVVl0TDFwb1R1VTJDaVhreHhSM0t6TkVyY3RVaG56MEtrSEhETlU0dEpZM1RrQ0Nud2xqZEhsVVlpSnVJeTB1ZExsQ3VVS2ZKZXo0aCtqbVpCNnJ0Ty9qbjh5a2JyazJ5eDQ3Zll5ZzFNdTh4UXBtd0t1ck4zUFh3LzJ3ajZJU2lZWVlqRTFHVm0xSysxbWREejFsMm5GZWxwSW1mTG5NRnVjRjJmVFZMRmNUSUFxemFsOU5yVFFoc3REd0x2OXhXQVJNQ0JCcllodDBNMmdQNyt3NVNuVVN1RXFXamxIaklnSzl2OVk1NXcycWoxVW9uNVk4OTh6ZDZXNS9MQ1Jrc0xUMWVOdTBGRmF0bTFxTWl6bDRZaVlxMFQwSWpXcC9LOHFIZUR2dVM2OXFWUXhHUUx6WW94aW85WXl2MW9RdlcxTTZoYUN1bVkxU2htdjk4bERzeU5VMGVJTHhKb2Rwd0o4K1QxSWplQ0pUVlJic0hybFpUcTFlb0VzWTd4S0Q0NTRTcXVRc3hsbTROYndqZHltcGgzMy9PS2ZvL0xmcFVJa0ZCSTg1QzN6bDREcVNoTkxucm45YmJyaHh3Y2xnRjZTQmpTZG1vZTc0eFp2VnpleXI1WHRjdDBlZXh6akJVM0l6Q0dJUkFocnBYV3JyTTQvTHZseTJkbGkyY1ZWdXFpNnFMRk1WUjAwSTNIcjVJOS9mdTNnYXZvVUd5cjRYK0dIMEg1cXdSUUhxT1VEaXk1VnBuWDlxcDk2MnlsaTVLL2lSbEtINVFBVnk1UUVCd2hUdHhva1BiQWZoZXZtb3VQNThNbDhhdk5CSGhwTG1xY2czV2pKV3RxN0tEbHYydUVOc0pSRlljZnhIY3lBM2dyRlAwbVNyMitWVGVrV0VwblBPMTg4b1cvdTR5YzV4WHJOUk5RYnI5b1FxNTJTV2Q3bWRNaE1aM29uMTNzRXFWaW01U3FweitvNWdGcmUzN2YxazlYMTZhZjJMZnZySVRmZnN6ZjMrb21ESWtldlpQd0c5c2VFbUtYZnhGRXE5RkFSU2k0MjZLYmVzb3c5a0MxTDhUWTdSNWJNNFRUWFYrZHhIWEtXVlgzNGNBV2twQmlmVU96akFScmtEbmlVOGpXQ2VKd2VxV2VleC9mSU1ua2pORjNmSTBqTUc2b0JsdGcrK3dJbmNHWUhJalk2cS9HdWJqZzZEWjRCb2lYck1Bald4N0VsYm82bW0xSnVvL1BxMmRHSjRSUFhoUXRIdUFHdDY0c3lkeURkQ3c4bVNBS0Zpb3Vmdk8zZHF0ekUwWWJFRGtKK1VPRjYxZEttaFphZmgwbXhSekdWdnJsU2RuUnBMb1Y1TTluUVBKekg0djZqZ1RMcnJqaGJSVUpMZTBzQlgrb2FwY1RlYXl1ZVA0YnZHZTNTZHdvY3dTREExSWp2cEl5bUdaa2Urb3NMdmhqLy9JZjlKS2ZxSmxJRXNJRnE4MmlmRjE3ZjR4bk5MNjlKanpxcU4yaFZYeXlxVFRCeG95a2R5eGdmSDJsbkU2RXd6bkJiVHNZcWw2dmJrSEJuN0tCWU9IWWdzZVBydkozZHovMWVKd2JweVJ3bEdZcS84RFJKdEYvcTBlOHdCcVJOVkxvRzVWSi9ZMXE5bjB0anRwU053N0hqZkp3OCtNakdxd3N4OXlidlY3b1FRV0NZNk45Q0RpMjVNOHZENUZucjJpUjZGNTNMMi8wTVc5WWtZOUIxbENxaU1Dd2diSW8xZTZRVW5UZXlpRjlFTG1JZWRCUDdoK28xRFRxNjVNYXJqQVBkeTJKYnBKNjNTc2ozT3gzcjYvVmVBMk1nNnBmRDdXcG1VUzQzenl0YXc5cEJ1Z3dTZ3hyK203QXVkVElwZ2N1d2FLUFZKN1NEMFlpbHBpK0NZS0oxdVBKemZNN1ZRcXFYbmpKU2VNTmRQVVB6NWdCcC9pT0M0Kzl6WklaNmhMZUNWN1ZGS0Fjc0hrWk82NFh4Tm5LOFRPVTFJZStYRGtNK3JtVHNRcE9wYWMzY0ljL3pYSWYyRjRsQkZaTlB4dWUwMnQrSDMyZGIrVXkxblFJb00yU2E1TU1hM3pXdGNqZmRVakZHR3BoQ2U4ekxTS2RlU1l5Z1RUMkxrdmsxRHE0Y3FLeFFZekpIOUtVbUJJSzduaDY4YXJrZWVoYzBRRytZUlF1REo5UGQ2eWl5NDVpRTQyaFZvdjE2eU5rWThzUmQ0MHgxU1RvblhFV0MrRk9oR1NqVTlGRVNablRLeVdmU3doNEpTb3VodWVPMEV2enBRZFdFZGRTOUcwVFlyb09rUzMzTG53NHl3UG40Z200Y0RSTnJ3UmU0RWJRYTFwNUo3MFJNSnljWEY0V2Fwb0NCa3hESVdQcXJCbU9zRHZyUFN0QVdSREw4RjhuSXNUWjlPbUhwSmdPd1ZHTzRPclgyQ3Nla292dEpUSjN6RjlXSlV4dkVLZVlRQmhqZVdwdllrY3AxVUJVNVBEWTRrN3prYUdDT3VlT3VibDhucm03VGRkejF4ckZqRno5MmVqb0VDSStZMkpXSWxrdkNrVUROQ1BPVUJQODdWNCtrbzdIWi9ZTnFZZ1NoNWYwUEpkZEk4eGJrMDliSFFJbU5uR0oyZDJGSWQ1bTdaeno3dXJYSFpWbHdMSWMveFF2bHhQOFIzRDNWZnk1RGdUZXFSYXFrcnBvUlU0dkdldFNPWlhhaXl1N2RmYjMyVWJrcGJHVHRoMFA0S3ZXeVc2Znp2OG5ocEZUQ2NNaktlbUxrUmllMGxqNDMzYmxmbDhOK0RxY2lBNEVIT25hTS90Y0RQNEVSVlZ1WWhjOHlMQmV2cDdCR0tuU01pV0xZc0RacU8rUEMzT1ZFNndnSjFXWDBudW1OOERXOWwvQ3lPSEdhL3F0UlFVNTJYdW9ucWVlL1RSM2hkdXczSUNMVmRQdEtRNmlZV0dhUVNwSHY3N2podFNMa25QaGFxU2F0ank2MkJtUDhTclpQY2wxaVh5dmNONUtFd1pid1g4clhZeGtJY0ZlSDVVK0JHaVRzR3g1OWhOY0R0a3JaREg0eEo4Qk5RR210MXZZR05rbmY3ZU5MS0xWWXBlaWExMSszUXpQVzJxSjZOQ3Y0d1FCdEExWFdQa1RwQVVWbjhoK3dwUExlcnh2OWVmN08rNFBveW9JRk9BN1RCUkNRTzViYU9TdXN2eTlOaVlVOVA1ajhLZzNWLytnUlpzT2pxMVRzbUYwdUxNSjhKai9EdUFiN2tBVmxZeUZXTit1cjVicE5RVG5ZV1dLL1dpMWNSdFRDU0ZRNm9vOElDYnFDYmZhSDZVTkU3WlFYYzFrUUJTVTRycmNUTHRFc0NIcUZRT0NEME5LbC9GdXE4OXF0SDBWMTJvM2ZJT0RYUWppR2Vrck9VdXpkVURra0ZVRkwxUCszeVc1N0tzQ2FMaVFQQW5JdnVENi9CVm40elVyRFdSSDJJbEM3YXdSUlJBQ2M1Y21rL3lienRkZm84aWVpTXdYWUhHZC9ZSlpBZEJ4dWlJNnhlTWxjTzhhYWJEb2FwWFFIc3Rsc3VlY1FyV1o3c3IvT2JRMEJ3OG5keTlya0d1VlIxWXlxR1J0MGk0Q2RZZ2xMdzNwalhEWDZLUXpKUCtwcUJwemhNK09MdTBaOEMvR0xpQzZkSWJ1MDZnQlhIcFlueFVZbnFMd2liR25rVkJ1L2puVWFNckNtd0c1RmlDM2t0UHJOTXRSOVZmWXpkV01IYktoMDhQUjRYYUhCRG9Qd0N0eUsxQ1cxQkR3YVZjTlpYTmo5Y0VhTGhXbVZ6WVFmZ245TVNSWGRNVHY1YUErcEQwUGF4cGkzQkZuKzAwQUpOZ2hKYXI5QUJwd3J1MC9HeG9JWjRMVW1oWWJzZUNWOUdwL1FIKzV5c25NTHNFeEFWYjM4aUF0T2NjcU5td09yOTFCblFET3NJdFZqSmhyYkZLSjcrRm56Q2h1NGlKOEtNeks0TlliRGJMaVBpMG8rc2dpdzlMNzNYM0RCSVN3MGNqaXRuRWNCdDlEdjZZcFVmNkRvQThtangxU05MTDN6d2pBbitJTVhQWFFqRTkrcVFLNkpyUEJpTk1qNnZXYUdjakNGRzJMV09XdFFrZDR2dkhoNUhpZVVqVGtxZ2FlS1J5eDhURzNtd3pSMnN2ZytMK0pVaUFXRVJyTWFlOGJ3dmtkYzd3RFdBS3VZNFBRRkNaVmhSOTNGOUtjQzc2RkVZaWZyN1F6YW4rMk0vT1Q1dEVpLzFPZE82cUxKVGhMNmh2YWt0eGNJTk16OTYwdFdjZGdxNGZRK3hmQmdxOHJDRjFBY0ZZSDZCbFowWjlpK0J0K3ROQktFWWhnb1ZQV1ZuajFLaWJCZHdmZkkydjBuRGRmaFg3dW45SXFyUG5ueDE0MzZneWQ3UHE2QU5VWHoxL0NybFdrNmdOeHB4ckZZMzJPT25VSk5UMDJOSWRFVmpHbmNtbFlvYzE2bE9oczZKdkVvT3RlQVNYaVNmQkgvUWxMZExITUF4eWdNcHp6SndPKzkvS1hHSXp3TGdGSThTdlhBZXF5Rk5kZ2VxWmhnZmFiL3cxbDVwRERMY1E5dkFlUEZOeG9YRDNNU2ZWUy9IWURQa2JFV1VNTmsxTjZWOXVnc3kya3MwNjRxcS8zaFAxSzVnYkZyR25rM25RT3R4Qnc3MWtsTWhJcmNXdXdHbWwyVElUdWJpNDBFVERWNDBiRDZsVWpYTjJLU0k3Y2ZNS0hNWEtYWUtWT2dJZU1SYVRHTHg5RHM4cXQ0dVhucVNwYy9RS204cUY1VjF1TDFNNFBBWjZvVW42TVdKTUpZUEhPaUdieWtJbnptY2dLUkUrSWp0OWJ3cHpmQnh6MkdGVzF6RW4zM3NFT3BQV1RCNHdadm9kT0pwYStmekxoR01aYUZJNTNZR2hweGpTajZIMDZ2cExCbHU3U2ErSVp5U2NuYU1RWHF4bENrdUxYODdIbldnd3RkTDF4R3d3RG9BRE9NRUFPZU5oc0VlTzFFaCttcUVMVVNDbUdMWkFOUjJwNCswdTM4bUszaTNwTmVLVzhlMUdqbUhDMmpOODU1cElXQ2FIcGo0N1JBWjV0SUgzZ3NrUTJ2VmlCeTdYampMRmRKU1N1VEFmVG51aXJ2RnJrNWpWVXA5RUl4RjZrNXo0TWdwWEZYY0NxY0Rubm9IdHpnckRBS0pTeGoyMVppSFVxRHBWTmV5eFAwNFUwRUV5VFV1Ym5IR3hGejVsUndCL0JzeVpDMTN0eSs4MW9HYlBtNlc4c0RUVG91azBUUG9yTWVqYTZDaUVLNUlCaDllUEpvbzVLY2tua2p3ZUI1dStOa3pja1A2cHczWXI4eC9xc0QzQTNicXYxa05qSkdGeVJOL0JwWmNtK0VOclZyZEIrb21hYjdKZndmOXpBUFhWRTZ0UnIrSUhrcmRCUXVienlab3dzVTR3ZGFlTnpDb05BYzBvQ092bEdUOEN3UzNoaU9rNkJNekVMVUk0bFNIanE5VEhQSDB6WERHdmdJdGlrdXo5WHQyR3FxVWtoelNRQ1JOaitGREllbVlOYnZDcklJSW5KYWVoQktSWXcrdFQ4WiswejhJNjhCNHdXMnNvb0VSVTNYWlVndFJBa0pUS2tHb2NKUytuOENYVFVFNng4WFdmVGZLS1R1NEFwTHRtM2N6cDNZdlVZRGc4VjAxWHhiUTRxNzZudFRiR2VoSEIzcnZEdzYxcXVzVVV2T1dIbmZ3Wkl3aUtaQkpxb05jdXdSY29LTG5rTmxGcXhCYkJtdGZtbVpVcjdvZW8vM2RuZDZNd1hIUWswYkdhN0FjUEJrR1lnbkhQMlVaWkd6QVh5eE1uMS9FeTMzbjEyTGlXbVg0SXRWMU0yU1Y0QlRERkpieCs1eG5mN0VvdFpoWW80U1hTNFJHN00wemFsbzh0QzFMMTVEenFheCtxOGtoQWQwQk1ldnZhUWIxQStTWXE3ZXREZ0R6bXgyekdOVHJGMzVkVy9kNVFsTGZnV3kwQmZwMnppdVp5OVJ4dnRBamhMSkFKUEZOWXQ2ZVBZRmVvbEpiUW1pdWpCZmNRUDdLSHNZWHFFdVBRU00vU2I0UEJBRUh4Z0xlaXE1SE50T3RFNCs4dFdaSFJ5aFFtbEFrb2ErQkxKbW9FSFZRSUc4TGF2ZC92NVEvQWViVktrZFo5WnpGb21tbXoxMVNaY3VVc2FPakxDVEhwTWp4NytRazVMZitkeUVkN2tNOGprclJ0SjZkdDBvL3ZrQ2hCNm9EclZTeUNWdk9vaDZJeDRLVEphbUM4K3BuaUtSdzZab0prWWNhZlFmdndlaTA5UHJ3YWlBSGRLeUQ0czdGY1RTdjh2MWFlQjRMc3VJRXo4RnpBaEZLRC9FbzZBOTZSTFowRHgwbmF5ME5Lam5pSVVtUEpGaFhFVE1yaGtPaFVDZGFsMWkzRnM2dDhQcy9lcVhNN3Z1V01zYlowM2s2Ny9tVzhZR0czTmZ3ekxLMHB5UVR3SUdiV1VwU2FYQWh2UDdEa1JueE5JVDVTSUhSNCtvOVVsNkxPV2tiUDJXVlJGcDZ2L0pvZmttU0hiN2F2ZjJJSWNzMTIvQjl4Ym0rd3FOUFlubEorWURJT2JVbXo3NjluaWtYMVorSThSSVdiYXRoMnhVTGg3aHp5YmJnNzRJTDQvbGdNVmxQVUdCcW1UMmExS2JpVjM3dk1BN1R6SXNYZ2NDVVJaSThlazhHbXpCYTgyRDVTVmRZeEI5dDNmT0I5bld2MGo0bGE4YjhORXQxdFhCM3Z1R2hQaVgzWGFsU3BpcEh6YUs5ZUtEUFFxc0o5Q3FoMmhtS1k3QmprVTVScG94cHpQZHNCbU5ab243bVZPWkJhN2srVzRwaUhQUjUyTFJKME0rOTdoMGkza2xnZnVjZWRvOXNicUFabzB4Qmh6bFZlR1QrenlCRkhLTk5PZXJFVzlEYUczbmdLdFNvdTJGKzJZa0xNNWloZ2tyUTJPc3BZa0tZNUdnb1BVZGtwdFkxMGVhMjZyVlR0Z1pZYUJFYVRDZDZneDNQclFGOTd3TG5tWFRCWGxGL2pTVWlwWkt2NU9CWTdNLzZsUXJyVURKTWh5QmtlcytYend4bGJLbDIrVktpZDZLZUo4Rm8yUlFlUVlUbkRkc0JWRVY1RmdKRjlrZWtaS1k2djZ0bjg4UTNiektjOHp2MUlwOXpzSnZMN2FPdXViNER2dU1uSXpNM2NjNFlhV0MrNzlPdUdTdS9NNzRYTXowM1laOTdiT3BsYWZXQ1V6cXBEWXlxV0s1ei8zYW5NcHhlNWc0NWlCbWhYWFkvUkJKV3ExaHpwL2dGdDYxSW9neUhLeUhWWlJqekZhZjgxQ09wZlp3bmtvdktFRE91MzlRSGhXOVoveVF5SHlTY1JRYUpkbHZZcUFsNXRUdXRYSGZZK1QwcnlCWUZBdU9rMGNobFhEVHBFZ0ZjbDlCUFdaUFBleGNxdHlKSW9ybHhhT0Y5a1FQanJDU08xODU2eVJ5Y0NETzhSTGl2a0dVQjRZYVBCZ2Q4R1ZyL0RoUXZxcjZtTDBYODNKODZldjdDUHkzS2hnR2JjQlV3VDczald3Wk1qalE0MmZpcWM3QXFON0NETDRzMU4zUHhzRDNyUklQbVdvUFdqODFtQlJHYmtlekRrNS9aUzk2bGpvbm9MN1E3WFF5OHY5d1VsSWkyaGhNNW5jVElJN1NMQTRmZ0IrMlNmWDlsdkI2cXdvY0JxMGx2OTZITFJhWERIN1IxYzYvOW1RdU84K0FIYU9rWk9QcHRtbC8zZGMyOThTSHNhSVBFd1dYRTVOU202K29TajdwYzF1eVRXRVhsZGlqYVZsSTA2dys0cWVnbmJybE9iOFZyMm5Cdkl1RXU0djYwbEZ3bUd2YzQ1WHlycHNuV2xGL1JrcWdaK05rMGZGZE42RHp3Qk1uM1h1S294ejROWFJhamwxbHhSNHpuVkd3MU1WdkxGa01XU0FIL2FWWFN5dmZ4VEw2YjJTR0pvc2JrUHRsdzhOVWpzdXJVNEFraXErWGNxaHJoOXY0STR4emh6RG1KWkVxN1NhWUJ5NmlIeFNBYmZXZ2FkRmtXS3ZIWG5ZaGxzMmFxTEZMVkRNNWRyTWZsM093MW5NYjFGN2VqTmdTY2pxdFNTZVExSlk3cDJoMlR3YXFBNmEvMEVIckIvUGxkZ1ZZZ2ZIeTFpNldYMUVSV080RmpFOVFLcUpVeG8ydHFXekZoT01MNnh2OVpFOVFFaUU0dURWUVdrWi9KcVVnRWsva0YwV3hLTExVUkFWOFcxekJXSTd2VlYvdThzd0J0UU8rZENTejhObytQVXNERklhTFlrSEhQd3A4TlZxd25DQTFPcWxaYTR5Y1ZwbkF1MXNUV2lMNWxNNnZiM3VkQmVqaHQ3SGkwZ0I2UGhqdDJyb2huYUdYcWRpQndmK2dCMW5PeU1rRStSbWZhYzY4T2lGemdyeG5DZ09SUVpCRkVIdFN6d0VVWW5lMDJyZ2wweCt3VndaZUcvRGE0WC9SZWJBSzBCU21jOG1ZWUxIN2lUYzAxWjh2ZjQvRFc5MUs4c3EzTkNlNG9SSHVuUHZJcUwwSGE5NllrNVkrS3VhT1hMek5GLzNJcXFsTWFxSG9MOWh1Y2R6Q2JDZC9lUnJFZDhycGZ6S0N3cml4dytKd3FndzJKNURoK1MvNVBzU0RHekl1WkZBbURSbW00S2ZjVXVxQTlpUVF0M2dxZ2pwTFd3OGRxS0xOTjZoR244cmN6N2NHTndrd2U3UmdYUmtKQWhZWHI4ZVlkSnJsSVpLWExFWTVXMGMzc0E2ekpxWENrbW5GcTAyVk1yRVkzZVhkcFdHLzJVQndtVUVYNlh5SjVtWnVOM0lmZ0o1eEZRN2FneXBmYkRDNHhrUlpqK1ROS3N3Z29LSURsN1l1NFE2VWc5aGVBS1NiclZLMzU4QXlKTnloZDlGN2M3YTBKL1RzRnNobXdoai9hekkrV3FXM1FmeG5Gd3BQWjg1clVPM1JpeXBkNjl4RDdHbHhrUVVzdWRLZ3MrQkExVmtxYlY4WW5NbkJnUkRtT2w3eWN4U1dSTWdvT28wYmV3RG1pM1ZMaS8xZG14TkxURnB1cTF2ZHNvRys5aHhSUTdvQVk4bDlkaktYN2VsRjZHdGRZSUdya2tvUGlaRkpPTFlRb29EaEk3dk1PTllyT2tIOWZqd0VXY1RKaWg4QjJqUVk5YXFIRm4vNWx5aVpPektNaFZaWFFtZ1U2VFV2bzVWa1Zac2NzMTlLcmEwR1JhalVkVlgxOCtOZjlpVVZqNXpxUmFENjhKZW5ESndMb1l3MHVtRXBRdTd1NWppV2x2enFZZ0F6WWx3elhXZXZONUIxZEJEUDZkY0NGeWRlUGNvNjdxYmhqTU9NdDdrSWdlZlIxMVROZHFNaFJyT3dXYkZISGZEVVNXNmE2KytZamdMWjlGWGVBMzZTWFNPaGhoNjcycGg0VWFNQzZXZlpJcHRHTkxzR1F6Z0dDVXp5N3JZSXU1T2JqcjMrcUhQTHFxTGsxb0hHZFJZbVdMdjF2RmNpTXY5Tnc0VjdIZHJwaitRK1QvaEpvd1VLTXFHK2U3c3JSOXRRMXZ1QThPUm9GZ3BrV0I4N0J0NHlxVmh5NU9GQ2gyNXlGRFVxZVVnY01XaE1BYXZVcWFuRWFNdW83VjNwUnY5L0pPNjBMS3U3M05LUllEZ3E5Qm1iTkh1dEZqRUtiNDVBdmV2Z1FTazNHUXpIdUVWSW1rZEt3Uk0yMFhuc1dKQVgrdzNtakN6RVk5eHl1NTlzVHNWc00zMTZoVU40ZE5FNVNUWjF1d21neFVWazI5TkFQZzc5Z1FrWXVSSGt1M3hJWGFBVTZSVDROYnFIYy9rQ3BGTjhYQk9YazAzdkc3S2plZ2ozYnNTb2RZZTVMbHZPem42d2phSFBYdmNaNFNxaW5rcGN6dHV0a1lHSnlESmpKZVZDYUcrZzhRZWkrb0MzTWt6cm5VU1R2RTBzcGtlQVlnbnI4UkJLdDIvaDh5a2dQODFiOHY2Nko3elFPRzFIUHFkVHJjaHJTNEtlakhjYVVFMzBFQWt5eTVlSkMvMGp6N0Vkc1pseHJNSWhDNURDSE95MmRrdHRGakNIaEJ6cytqNmhDRFlhMnNWVjBUMFhFUEw3K1JWRjJDOVFEalFLZElBV1J2bjRhcjNYQUNuU1JZYVkzL0Urd3duTHNKWlo4ZENWaTBUOFVZdEpvTTBDK0pvVld0TmljdVNJWEZOeWxoREVYY05oSC9MOFJBOWN4TXBRa2lzbHIwT3ZEWVMrQmlYMWRXM21TcjVHNjhTN25aa05MR1Y5RElWNHhYZ0lkMFFybUxRLzJxeWhtVXFlQkZOek9TK0VWR0lOeVFzU3lYVmUvSWd3L016NFdvTkdxS0IrQ3FyOTA0UWRROU0yVHZDVVBmaFRQTmF0bHczVkFGWnBjcU0xaVJkTDJRMXkvSlRDMTJOUlpkVE9ncWsvTG9aUUljaldZT1RzQTltdG1udGlqQ3dld3NTUFJzVWJuUzVYdUJpT1FSeGZaQWdXY0ZnQ0VLWit0Y2dnK1B4NXpkMlFra3ZxWnVobmZjRHVHSWFqdEN3RlVscHY1cDJjUmtKQXRMUGtTR09VWnl4OG1BU2I5YnREdDExMFF0WStFMXJNZzFMeVpya2g1YWdzMjNFVWVHU0ZSd1huK3dpTHFxcTU3aHk3NUtsMVhQS0hMNWprU0s1S2JBbTIvSWloSnd0dW5lSVZ5TkxDRE1MQzArM2tmZi9LSlVNcTV1eFFjdXIzbC91eWJuOGwveVc5YXB0OHk4WjJRcTBNVlBPMW40NW5BTk4wL0RjUDBUQm5UdFhjVEJxQlUwTGIwOWQ1WngzR3A4MmdmbW5tWHpwRVpQRWdNZDJTcEY2WFlsNXp2S0pGNU5qVi9XbTBjY1JCellaMWtDdjRVSjZpeW93dDA5UG13RnhKcG45QS82aWdiaTJzcDNYQ2dCajJ2aTVEeU51YnhIMk1Yb0VkU2JQN2xKSmxFNlBUd3F2VnBrT3d3c1c3a1VnVUtYVUx4NjJISFE3N0RxOXJmOFlzN0FUSnNVcWZZYXFRam9xaU5BdlhCSnJ1ekx6S0RTbU9wanV3aDVDQjZOWU1FenJiUkFWZTl0cksvSXdlOTJ6MmgzQXhsSFJRWVZ2RTRJT2cvbVBDaEMzNDVnTDVsb2JmaVpiVmxraFozcDdVMnZJaFpKMm9NRGJxbzBzT1U2cjI4bjNkdFZ3ZTlUZEFrZ1VISWNuNEFZejEwdXZZZGh4NGZZVS90UmpmNjc3NzVDZ0t2dDdwVnE5aGl0cXFKYmc4NEUzdWJBemd2OTVXZHUydUd3eEJRT3RpLzdaVTVqajlZNHlldnVWWitKWWRGUWYzZHREdlNSam5kYjduSUt4NlU2K1FacGZFU1QyUWhOVXhPakIrekYvSENLeS93dVFLNTgvdHRsbjVGNmVsSGRGU3p1clNWL2VqWUxZNWFjenJZNkc0cXVnT3dTOWlTVHFab0M3WFhVUTFtWWQrT2d0bmdaTmtGQUsxNUhYR1oyckJNNTBHdy8ySkN4dUt6cTdNK0FCNFdaM0plQy9vMy9SWlNsUzZOQU9VektQVmhkQmhJMjgwS09Xb0VpNU83dUZWb04vSEJhVk02dlNWQTgyTDJPWmpNOTdTZC9RVllIUmFMRkVkUnZkU005dEV2MS8rRWtMRnA5UjRKU1Uvb1d1SVF3YUFlRytGelMyd0N3dU9vSVZKamFhUU1aUGtuWmFGVDBoYWVVSWgxS3B1WXZ5YjVUaE92YWpSWG5pS2dRS2cxWXRHcE4vQWVRSGo5UTc3NXdFd2NDR0ZrUkFMT1Nta2hnMjBtV0JLZTZjZUJHRFh0TmlaakE5NmZ3WVkxQ3k5WEJGOXRoMHdoQldzaGNiYUZaY0xsdmlGZjA4Mkx1TVVud0hxZHdJUGtBS2NkWVdYdEpzMjFmQWFKOTBjaWgvQ3JwaXpUdkMxQlZJWkdKbzNDWjY4UEpTSWpIL1FrWW4vUklIYzhkL3NTMVNvbzVKVCtkb3ZqdXV1ZzFiSWpKTzh0N1lidUVBanowVFl1V1FZelRPV2VhZmZJSHYxc1JySGNBSENWYkQ1bjl5a0dGTHEyZnFCQ3RIckl0cHBmaGUzNFVrLy9BRFZ0Y0ZTSU1jMlh4amQzUnVCTzdTc0xTYnpZeXFwOEFNTzc5RFZZWnlEOHZhQ0tOdEYwcWZYdGhyNWp4NFZ1aEt1VGI0YlhKNUR3K3BCajBmV2l6ejlvUlhZYnp5bjc2VElaaEtBSmFtOGVsWE5qWnY5UU5hMXdydlM1cWZZQXZjQ3pEbEdMZFp0ODhrZXRiUnlWcmxpRWJoU1BvNGZDUkNmNUxONGQ2Y09vZGM2a3Q1L3JORElZV0Q4eE5FQnhOQ2wzbU9hZ3FKYU1TY3lrOXIyTTN1ZWdHRjJwU3htSWRtcEtYb0NZdE81NjdBc3ViTkEvYS80dklzQWJOSFIvRWxwTDUxMFJDbVp6N0RaV3ZhWnZTYUpreGdjRXcyb2tIcWV5NU9Xanh3RG0yd1cxNW80NGFpeTJEaUpUbjJETmpkdUx6Q3lHNHI0bXF0SXAwZ1E2L2lrYndMVnVMUHlzTzFUYjYxekRyNTlnQUovK2R0am9oMFhsUDNtQkNvZHAycGlJWTVpWUQzWEZLV3Q3T0YvS3VnYWVhdDAzYTltYlg3TitNZjRxZEV2Rlg3Tlg3UkpMcWp5SFltWHA5cll3Y1dkdUVLQyt2M3prS1pnWGFqVkFqZXVEenFMSTNFOHdSMmZIczByZ01ydkkxUWR3M0dvWjRlN0l4SUZxdWVGSDFSTWVuMStEYlpsZzgyR3puWnMwL21zZnVQYm9KSVRJZUhnbWduUkZOOStWdjFRRUdRdURhbEpab0xXWlFMVytlbTBvNXdWN0Z1N0g3a0ladktmVUxkeXVvUDh3RktEejE2QnZOWkEvZG9oa2xXNHBRRlFHRlhSTkJXWUZtb0NyVGNKS3lkUkYwYVVPSWRVelBuUS9HanlEbEZ3cGNvOTc5TEdYdWU3NTBENWxhaDl6OTU3K04rcVdlZjgzUGRhSGZ1aTFZTXg2OXN6N2J4bFdDVmc3VjU1SVovbUdrV0hkWmhsNU9MMmZBVHRLMGpaamZyQVNKTUlKb1ZBdTlVeWJQZWtmNXg4ZXdrMW93azVXVGJhbkR2V044Q1FnVnFFRjZXblZ2dURMaThEazIwdkhCeXFGQ0VZeHNpZHo2Uk9EKzBPdVFVaDJHbjNNbWoreGhuZTcydGpFU1FvNitzcGFhTitydTRQWkp6V09WbG5wNXRYSnM4dmpzVUdETzFaL1lUZzkvcTFLaDlaSkphUEM2REdEbE9rbEo3RjdGWUhDOWpUTFpMSGthMUtRTms5TmpxZlBablZOUG56cDlyYkM5TTFFNEFzTW9CYldEWGw0bS9aN095bmFkWW9HWTNibGVpNFpWWm56RWZVcThEMWY5TUpZRVRtV3AxWFp1YmZjTFV0L2Y0VUh6dDMrMFFOaVFSTnk1Vmw1bEVoQXpZVWJBSGkzMFZXOER2S3g3dlU1ejJmRTBKSU9UdjZlZXJHek1vK3Z6WnFaUjlXMG5jbytEMmJ2RWxoMVVSbmt3cjVMbFp3T0JqMUQ3RncvRlRwNFFyR0ErdHFMYmcwY0JVeHlPSS9tYWQ0ZkpqT0R4Ni8xV3hVR1JZQUtYcENBSFlDZTBvaEFWREIrQm11QlRoSEF6eFdqZ3JGS1pCb1l3Yk9udUkzY1BrMXZ1RHRYQlVZV3BjMmFtMmwyVEVvcTlva0lXekMyM1NZZzA4YkN5ZG5iZ0NWcWMrdTVPTU1NTjZWVGJiYkFRNnBIclpJMExCeVNpNmFrVmVCUUE0NFZpSXpFOFFwNzk2OUlDR1hUdUs4SmNPN2F2RGlCMmJtRGFJa2tvRWJUbk9vOEYwcUN5dlZ4bUN3UGxpR2Z1WHlqYjUrM0VXY0xJWDZiR1RodjRKZ0lMSHhOVmEzQWozTDVLY0FYcWpubHVVSDBhZlprbXJPbHlyN3NWTktINWxFUkNjVmFWSERRQXFyQVRuUjBmR1dRTDRsSk9scWJMc0lTY2hoK3liNEFlclVvT08zYnYxR213eHIxc01qTFdzVWtNNXdLTklZRE4yUVdBcDRlT05SZUhqMzhuL1VvZEF5V0hjR0JnQms5WkdJdkd0VmlRN0tHZ0Z1ZWFVWW5MT2JsMFZUbEt5NUM5OVRZNlM0VFI3U2NCdkpxYmhRdW1EQXQwRGRZRUJKY1RpUnpGTXlLQ1hEeHgwTEgyRnFpRE1uSk9VT3NmeDZqWG9iUWhSZFZPLzR5aWx1MWx2c1ducEUvdnpNWXRmcS90RVFlR1Rsb2w0b1puVnJQQ2VROVdiUXVoOHZTeDB6L1FJdktJakVuMElNYmhWcDlldDFWd2h0amNmZ0NxOGs2RzNmY2JVMzhmalpFS09hNlRUam82dXNpc3RCUktJRHkxODg4Um1ld3VMNTJWZUQxSWFjRWIzbnJmSGloYjJJYlpITHNjamZ4Zjl4UVg1LzlZY3llRFA3Q0dQTWlCemViN2FwV3hYUnJsbWNNQjdmcWUxY3lUTTRaSmJYeXlmRVNkcm5zUjM1cXM0aGtoZGJUZk9KM2s1bm93cDF3VFEyZUxobDFWNUdGK1BUVHN4K0ZJUWo2NlJ4UVV3TXJ0VzcvY1VNcEwxVm5zUDJ5SXhiWkR1ejAyc1VNQjRBYlBkZHR4NnlLL3pYR1ZPeE5iVDZsS3BFaHFacSt3Y2hvaU1ZbDBGZDFFSUZhVm0zTmdXUURQRVh5clA0ZWQ1dzRqMy82OUtGYjEvQTh1YnhHci8wVzdEZzRjMjN5MkozSXIrOVVmeithRU5SUit3NGkwTnNzMy9rZGtHOUFBZkJxMW1GcnBBUjlsL1pQQmk3VWhxYlBkUEJNODE1WmYvaDNZUWlrdE81US8yRWw1Q3ViSkorMjZhSzltblhFMEJydlNHcEtwVW1pNWhEN0R5YXRwbnphZ09uc0orbXBSMUN4L29SZnpyNTJvbUFZN05MT1U5ZGlVTTN2T2FUb1lQVWp1UjJxb0Ezd1c4ZkRSVjVndTdtNUtrd2phUEJ3OUJvejY4TlpwZ213TzkyQk5GcGR0em82YkZJSlR0cWt2SkczblBHV2NEMklMQ2dCeDllYmkyemJGcUhJR3RWK1RqUEwydDZpLzNBSWJ4Y2Q3b2g1aW1vNjA5eVBRMTczK2g5dzJ3Q3poYll3R3ZqVDJwQTBSVzRrQXk1TmVHeTFZNllnNHgrMjdndU9oNXMzM2poMHBwcHBtYVowRXhvYSsyNWM5S3JZc29oaTYzSHdmVFhaNHVaMG1BazRqOHhJQ1RJeVcyR09QMXNrVzlWSU0wdkZoK3pmSVV3QmtONVdOQjh3dlozczJOZHFpb2VZbFlNc05keXYyaHQ4ZVZUZHhJZWFzYTM4ejlpOFhHZW1vTjloSXR1WTU0WU5BQW51R3B3T3VyLzBHeXBlUm9VcDlKVHNJNXpEaTQvaHZYenlkaUpRYjRxMlRmWW5ZWUI0YWFrZFVqZ1EwQjhtVFN6eVh5UEo5UEl6MENSOFBjZjF3V3ZmeEMxM2NNQU5sU0lUU0s3TzFOMHNHbUNqUWJseWRpVVVqZmZuNzlRZDBnQXdJZ0dQUkFLaFJURG5zOXQ4ZVVBa2hPWXpLQXhaSkYxSTF6TXFFRUJyZEhKZEhlUm5uQWVCODRha2RsTTU3K0NFU3ZDczB0aVlKL0FSdmZGdUJwc3UyZEJyTTBabXhvaS9RU1BjbThxVy9YT3RsVFYyUjFxV3MwVkZROU5aOEdtMy9Yc2ViK2YyZkF5ZTZNeDFVTzIxTEdRWFhLMWYxZFpFUTlCcnUrcDMrb0tPUzMvemFhZjE2U28yd0hNczdOeVI0UUhJYVVFdVhXN2EyM0c4Y3RZdjJRL0prb2sxdFNZK2NVbDgrT29ZZkg2WDNmNmFQb2NJcGw3VHE5MWFnd1o5T0RORkV2WU5sWTJGU2tzTW8yb1oxNnNPSXQ5aDNaRUorQ3o4dXJmWi9lQUlkQ2RLUnl6M1BxWXk0d3UreXR3QU1qWk9wRndMSklwR3FEcTRvQTVhYUVsWmVhclVhRVprVnZGa3VzK1lxYnB4L0lJajBIelRRM1owaWZlcXRCeDE3Z0pSbEtsbTZKWU85YlJ3NUdPTG5ISkY1VkQybFpPZFRGOHplM3d2L01wRXdpb1BrczNtcUo1ZnRuaCt2aktVWXlOSVIyaGdHdFBHV1JkaUxMRzFTbUJJUjZFbkZxMGVBU1FPeUhXbmp4YjFoRWowS05HUTcreWNnK3Y4VkxZdUpCU2Rsc1JsN25wcW1HcEd4SmRQVjFzZ2pYb0pIOEUyakU0NlFqTVNwL2l4ZklEN3NtZGhPRjVQUUNnTDdJdnREZmN0RUtqalY4UzlPV0U2VXVnMWE2aXlOTnZvbENFYWtOL1pBWHVNWUR0eDlDSWJDNkJtbmwzUVd1VDd6ZUJabDVKa1dGS1NhNDg1d082elpMN2hBRDYrc2lPYTAvWjNqMldiZ2dETjFsT3lRQjkvZVVsRmFvcEpvYXNudXBUdE1QOGdKUWNOZENWVXliMVJxbUpSRE1sM0lHZE0xdk1sam42eU5mODJ4cWhzdHRFQUhGSE5XNk1Eci9CYTllbDFOZDE2WXVQU3FDcXhjMWdyUGp4SUxLdTVxMkM4TWJRdzF2cFd1eDBFMlJiNThLOGVYVGxUUjEyaVJPNkI1cUFLTDlvUVRsQXE0UksyVXFpRmtGU1V0azhlUGovZVpYczF5ZkxSbUpzMUl0akZRbnAvQ2NzQzRVY0I5NGg5MVBIeFdXTEVCbHFZNXkyZ0N1YzFDK1dDQ0M2ZDc0RXFEUzc3TDlpdnRDc0hRY1JENVI1bVlJTWhXWTdqS3dUS3FFTTh5UXJseGo0VFhSODVCN1Z5REpRTm9DdkFNQ3BaTW9jUzZOODV5c3Q1OEdtS2N0ZG5qOUhlSTRHOFZvTm1oZXEzc3U1aTluRFd6VTVnVkhmdjlScjFIQWVVUU9sTGgxYzljOUh1c2pDaUtUcS9aUkNkd2V0K0VHWFl1eVJMYmdsYWxmUEQ1aVpTc1dCbE81WFJvNXZabGpWdHNOdGsva01pem1hRHAwa3ZReEwyN3BFcHNjTUY0RERoRFk3cmtZSTRVMk0vMmZFTjlCdmZxY1ZZZlc5aWR6cDZ3NzI4RkFWYXVLTHM0VGV1NWdLNExLbjE1Sk51OTlRN2pMWE9rT3hKdS9uc0ZEei9Nd2NpYUJhb3FHK3l0bnVPbUxDRFlwNFdYRTc1Z2FHQTkwZzBBQjRtNGh6OEJDeGU3NjljblR4bTkzVlkxWWZaSVFNeGJiZElCeXp2ay9mSVE1QThuenl0aEpka2ZINXNMM01GRnVUUUlzMjlObkdreVFHei9IVDh4NXR0WFBnRDJmbFVXR2IyaXVxaC8zajBydjVrTkpxRVJVZXArMmZUTWVScTZGMWFWSmgyZ2c5d2xTYmhhUUNXVGVvQmhVRFhQeVVtTmVmTTVQQk1sMXAwUFFWL3JEcEpxeThnNWEyaDJvb0xBaW9iN1V4OEpKU25nTTlibE9uWW41cTRjQ09OZTM2a2tUTklZSGNjaWdVdnplVTU3TXcrMHprM2R1QmFNRzBMZzMxM2UweE4wVFVoN2NaamM5TnhkemgwRm9uWUF5UUgva2YrNWNGY1I0SGdGd0Z1azVYQm5mNVVKRHI2dW1STVF2NVZvUnVDNHJ5SVYyay9xdkRHbkVrc2NVLzFudUE5aWdpZEJWSDZWZkhzMXJmN0h5TTFPc1NYSzZIemNLQlNPK3NWSHU4R1UvSEJnaStLTmp4L0I2UkxtdWZZTExvcHB3d05kT25TZGh5MmpONDhIcjFLd3hla2N3Z0wxUzB6RzRIS25tMGFadHBEKzVXQi9QTzIvVnUvNk90SzcwclkySCtUTElXV1BreTF4MVdGOVN5T1lzeWJ4a2FBeFNiZFZLcEZrQ3UwYWtIUllYR1pHQTJHSTNyamp4cEdCc0tWVEw4Zmt1ZWVkWjBHWTVyaFp3VXVhYWU3MHhDQ3FmN1k3YWxFSFhEeSs0Qnp1R2hTbHR6eGFpZFBXUnd3VjJNM3hxMWtKWlRmWFZEbHJnZkQ1eERhZSsrZmNiL0F0YVdHdURhT1pIR3JnQy93Y0tlUHJLSUZPeE9rSmhyVXN1aEVWNEpNK082RHkzc1dFcFdhRWdieS9IK2lsQzdtbmdtakxpd2JhZ1I0Y2tIYzltWFN6a21rajJVcm1jMUxuU01zTkNOem9aYTdHVEQyRC85SmJNMVdmQ0VXcTZrdDZTaGhwcmhpZnovTHhZcHE1VWRBa3I4cnRNZnlRWVFrcVF2MTlBZmJMdUliY3hna0lweHU4aG02ZC90T2RDSFpmb3pRRU14d0kyczkrS2VIS29rNEJoaHdMa0VwdU5uUGQwNmdiMUc5RjVuVUo5MStuYnRkczVVbENEQjF0RWU0TGU1VmpqTXdIS05waHQ1UHlEQ1VqNnB6YTY5ZzRKcjBBaURwanFkR3NpbFNiOE1FMll2bGdNZEwwV1BPZGcybGlVZTQ2YWQzR3BYVEIxTFVmQnYxU0llMklOOVNLQ1I3MTZVMzN1T3NPNDE0bGxVVGViK0xKQUthSUVFNUcxc2RPN0tJeHRIUEZUZ0VBL1BvUnAzSjRZUHRQSWhQaUpqOG1SVHB1a2czb2JSQ1gzbnFyRlo3bTBBcFhSTmZhZjY0ZVhQb29KblZCemlrYVVlMkttM1FWYVVmd0NMczVYWDl2Uk9yZVQrQ2hBTm9lQ1NnM0haaFN4TUFZTmVraFl5UGhlWW03c3J2NTlxR0Q2NVdoV25yZXpQb0VvUUQ4WnAzZ1U0UExEcGJ2MHVHek5aZDl4ZFB4VVYvbEc1Q05YYXN2MExZYUhFZTQvajI1c0YxS29oQVFHeTllTjBORTUvMXFmWW5ZeHRCVVRPcmMrMHNQcml3VzZiNnY1dFpSK3R2V3phTTJPQ0tvMkF5TnZ4bkNneGMxWUFvTlFRRDZrTUFuSG03Vm9qb3dTeEw1b0hzVXY1QURVbjRtOE1ZS3lsZzAwRlRWdHlGbFV5VFF1dmRXWk9VNHhiVyttWHdVRTVQTzRXYld2SHFaRFNZazI1Tm40eDhqYy9mOS9KbE52cjJkUzdiVlpTOFlvQXZYcjVWTmZSTXFDSUU4ZFRIc3RaVjBxQUYrdEZUUUZ4VjFGQjhuWTRNK3BubkR4MUZqNGZQSGl3M3cvR3VmanRDQ0x3THZqZ1podVVKeGpsT0tOR1pRVGl3ZVFqNDBuM0JHSUdTdHp6TFhUdUpQQWpJdTJQMmRBblFrRUYrL1U1OTA2QldqeWVHTHJYVG9WSzVVSjlEUU0wUnBqdVVjZEdSZ2F5TDl0Yjdza3hoWFJjekpXYUFyNTVNZEE4clQwSUh5R0lLWmhJTXg4NTd3SHc3aG1xdy92eTM1VTVLek9IZFk0SWozdVFtSnhQcFpyYi9TdEhoUkQyYSt0b0ZZUnJpSExJMzF1bmpwN3R5TjBMSzdDK2h3VVg0KzBTMHZyR2szTTRVQU9SajVLU050OWtRUnNPWEhlUUJHVTd6Nng3UWdUTUFEYWMwY0tHVnpuR2pFQ0ZWSEVGNzNJUWNQZktHempiak81U1FuUlpMRm1KWlNjQVRpUjZYRnBZWHRSb3UwVzBJVEVaRXFzTi9yTm5sM1QrcWpiR1I2MGttdlhHaGdjMEFMRW1hTThGMXh2VXJQd2xjVk5xZ0djWWZXbktnUUhuTjBwdUlzZS8rQnhVemVlQlhmcWJrUGpMYytYenVpNjYzMEQyMlZMaE9EM21YY0NJdTMwcmdBVG5LSlo0bXZ6MHZvT1FtWjFGTWJUOCsvMFowWnV6UTUwU3JNUW45Znc1T1lIai9EQU0zRFIvd2wzOEZNcXkxY2FGc1hwdm14cTVsUnZRU0ZSWno3U1NpMG1TSUZCb294VEVaV2tWZ2k0dlRIQnBpY3B1WWF0U0tYYTZTckJCbTBacXkvTCs4R01GQkhlZTJadGNiZGl1WmxEYXRQTW4wM0J3UzhyQ1hXb3Vqem5tNUZWQUpuOW5DM2ZqdU1jYWNMZDE3NVlvaDVkM3c0SXFkU0lhQnVsbEdyTjZuYjRBQXRGdHFDa3JyZGR2b1IyUjZpT3ZoR2ZkWWxxbDgyTzluVXJ2MWJiSTMxMHNCZU9TV3czdE5vSXRjQ0szaDJZNjdQVEZndzROZmRTSmpLTHg5T21zcXNDRk42cXRBM3FjUjRwUXJqOVh5b3hPNTliVU04amZWdmVMUFJLSDAya3RrKzNYR2dKcjJOMlFGM0N5V3BtcStvN01nSVFoVzFPMHFwZTRsVCtmdit0N01HN09Id00vcHpmemhTK0lPRG8zdTZsempFd0h6bnlFZkFWWlNzaTF1Uml6VXRNS1BTMTk4M3A3cFI1TlNadXNvRHRobmFIVjc0OUZFMDFjdElQOCs3Zkk2c0JOUFgrYWdGYUtHNWg1VGUyQVBlbGlCODVEMjY1RUJWV3duWnBTZ1ZmSXFsUExSYlJ2bTBXcW5ZdUNUdDRBcFcxUVpBMHRIKzc2cC9jd09NOXYyR2V2V0pvMGxOMTJLQXBWN0FXTGpqUlhHSmhSR2VualJpK3JtcjVtVUJmajZqK0VHWVIybVNJTHlEN25rL3hsYXdweFFZMzEyeG5BWEJKRjUyQ0k2RHQyVWo0N3cyQWVkU0h3aFUxRjdJbHNpSW9seklmOFRzZ0dNbjhZdXR1T3UvdG5oVGlMY2JnT2k2bHJFY3JwSFFueW1xaEdWOU5GcVN2OXZVSEQ4R0prUWNmbVp0MW1YVnJVTXlFZzNlL0pyVVNTNHI1c2FCTkVPWXE2dmwxbjljbEZVZ1U3OGYyYkp0RGhGc3lGSEhvSXZjM1dEWlNNUHBLRzkrUlE4cDZSMzB3ZjQyVjJTYW1lOEpuWnM4Sm54UXVCanVmd1lyRFRPTlJ2WDdWeXVCODdkdFh3Vmw1R1JOMWg4L0ttSnYxWDZQNms4bnJwdTBlbitkSzNGbFEzdkRyT3JRQ0hTOW9DSTZDNzAyYzAxTFdFTkVNVzE1SEVzeUN5eVF6RlBmRTdIMkt2cXUxdWc4WU9jY1g1RjBjem4venRnTjZ3ZG9lb05BVWc1T2JPbjFJNit5YnM5V0ljc1ZUL2xUOEMzLzJvMTJkUmdrL25YUHlwOThya3Q0VVhVVm1UalVpUG9oQnY1MkZzM1RCVjNFVm1yZStsZ1MvdERGektYcUxmaVhkNzBXaTBkU1libDJnMkxudFAydDFBeHErTm5WOXU5WUlYTVBDbFJReDVmQ1JqMFFyYWt3VmhLMnoraCt6S2k0Z2lGZlhNNEw4NHFUaXJpNzVmOUZzb0V3K0ZPMFZFQXNTM2dlZzFXM1VwTUVwcWFsWmtSbW54UEhSZWwxOHJDY1RiQXpQdWRRTE5OK1p4d0VLSGhvakVEeDVjSDNyK2s5WDNzYnBTdkQ5RC9aZWhVVFhwU0NMQjc2MVVYWENSU1hxa2JBZHhlOFJOUGZvWjRsMFhnQlZ6NzcrcHI1TUZ5Zy93a20yVnFKTmFpUERjdUFYVXpwMTVRQlQ1Wk1jRys4eXJ1Y3RiSVM2K2xFb0NaSElFRjc0aGxMWGtremY5Uyt5VEwxMVZXZlFVc1lrK0xHQS9SWExiVzZBR012YmJiYmExU0luTS8yWTd3WG96cnRzM1FRMEI3WXJqYkVZR3M1YzR2cFhjQ0RsaCttMFk2S3VVVEhFb29ad1VNa1RzeENFbjV1SjJFUFppZHN6d1htMlVBNzlXNklMNHFuL09JNDNYakZGYS80akcyYmFnaTk4K2NLSGtLbTFHK0YyTHJxNjlXTWtPZ0hRQ0ZPY0NPQmFoY3h0RnN4ck5wQzNMTzZqZENrWWtOd21OZjhKOTFTQTZvSm1Pam9RTzhvVC90TTV5YVpkTCt4QjBTdXpRUmorZklLZzdoOWVCRlBmbWtjYkpza0FSdHFrYW40dWd1K2Roa0lUTXQzdzJyQnBVWjVwdXpzM2grWkpERVhqenBnVDRXYnpZMzAxdHBmNjI3ZHBjdWkveUMzRmVGVUczY3p4Wk9wazExWEdjWTFPcWZiUnh3NHR5OVYzS3psaVNiNTdaRFBjZEdxNGJkS1BMaEVicGNCSmlqUm4rUWVmVXl5ZHlEdnVYMXlMb210cWNRa1lZMDZyS0s2Ky9BMzRXMFpHZjk2ZGF5V2RJSTI4Y2J2QksxYlVmN1FjUjgwSVRSbFJKOHM4N2xPUUxxM1I3UEprTmxyRkFYMDhQeDBrU2xiRk13OWx0SEFhWG45SXNIR1Z4VWc1OWFTN2JJajgyMWJrWGp0KzMrT2RwK3JadnhVVXk4dE1INUFySnJZSW1zM0FQOWZaNHFwaWlPczE2OUdGa3FyVmRIM2V1WFpIWkdyZWh0NzJkMDNlZ1JpU21ZcE5iUHI2VzJGR0NFSmZMVzFPdjRuRjhTUDYzNGZQNzlUbXZHWldrQlhiMEpVcXJhaUdrVVREZmdLaDRXMVlNcXFqNnJqc3VDZFVkcWNlQUUwUTFXbmlLb0MxR3lsTnlsM2VwcFYra3c1TncxaUlMWVVBV0ZVbHpHa1BsT2FjTzAvZllac1FDSVZoQ0JDbVlBZnR5R2JzZENZVll5YXcvT1RzMUcyWCs4UG9yUEdPVHc4a0hqeFVUUnlPNTRBZUFlQUM4Q2xSdWNEWndodXl5VmRqQnZNb2NqNVpqd1I3ZTI3WFNqWjdJVlJ3djEzRWtXTU4vbno3UjZMNENBZ0lDQWdJQ0E4ZjIvU0IvdCtpcy9aOXViK3o2OTcvYjlNSCt6M0IrYjdmcE4vMFBvM3I3ZnRHcjdQcnE5KzM2YUQ5dnUrY1A3UG9aLzIrLzUrMzdDWDl2MU9mZlY5RWYrMzJZdzZiNExxaCtwcGw1cUVzRmcxZ0xwR3NTRWxWMkNTMVZpR1pjUEVlVUtDdjlaaE9TRE9KUDZUaWJEeUlvcmdMNW4wcU1Yb0NWQ1VvU3AraUZOeEphSUphaVZLZE1vUWRRWEIxblFUT2lMcHZMTmltTjVoTVd4SklVWDdkeGc4T25Ib2dnOU1zYVQ2TFU1bXhaWWxGZElVZHJUZmRzQjhjTVYxK1pWWGg0TUN6a2x0d3F5VWhUZjJjZjd3dERPQU1Kc2IxUHFkMkNESWhxNzByZmpqb2lCcE91YjAwNWFEZzRuZGV2Q2pQbCtvK2JPU3QvY2xhTHg1RWVCYW1SME15b3NBTDdUY08wUUZFY2RaR1N3RXNUN0lmZk5zUnZMYncyOEFsV2tGSEZ3VXRWejVQSktDQ2tKQzhtL2JMS3c3YTRrM2plZ2JQVVRUa1FzazF0VUZCdDZYVGtINElNajdpSlBGYkh0aXhzb1Z5NC9TM2RMVkMzSHFXM0I5TnVXWWJ1ckVZV2lSOUFpUWZieGVEZEZ3R0xHNW5QQm1FcnpveDZJc3FMNm4zUExNZDhxZ2pFM1Jxc2ZVTlpPUWdsYXNVNmZta2t2U2pmOEUzTS9UWlRFVTQ1cENEK056TEJlY3pPWG9rdExtQXd2L0Rqa0lDMUVOWHBEcHNhbkhaQ1BYbU1vTFNheENXRCtpNFpjcWhIZmttaXZ0UXEvdks5a3RVdFIxSDlyd25tM1hPNyt4a0pHNkpob1AzbzVHS05pemkrVXFmTXJEN05BeXQwNzVOUWdOU1l1c2RYcjloZDVmQ0o2QVV4QWx1bU1tczk0eG5LMnFjUWoxTFkyUUNmeHpLRnhrd1FsN2Y4WVpIQzZ1RVI0b1ZOTDR4aUZIUWc1OGpSdlVnVzVjTnpkeVFsRVZ6RU9RTGRtVnhvaGNhZnJCMURoU0RkcFpWMW9UM3hUTjlBYWloRFBBcVNwWmpZUkZCbXl2SDluM0xwZGdEQVg1ZzRsckFsYzlOeUk1d0JiQlpYSzBjOCtCWksza3BpV2kwZ2VBNmg4cDYvUUVXaUs4QVhXRzFSUlR0d1dXZmxSczdxOFRCWGlwKzRRc21uL1NPekt4MlI4SWdERlRhdWloQW9Wak9GUy8xR05jaWhKd1UvVlk1NHd0akw1aEtJMDFuWndHYXhGemd1WXVsa2hvUUlrYVlIa0tNZTJDR3dWREFlTFZwNVhOWlpLNFFzcStrSHRJcHRoRGhhd3pRcm4xYnVyeTI4ZkJUcmhNWWZNWWhBS1BQaUJhaDJYc3NvbTczaVBTVzRZQTRKaDBYNkY3S1pLRHZ5YkpzdHJzNGl4eGJkQS9WRlRKRzlRVzFRK2JVdEJGclF3anNmaUoycU1lT3NpVjl6NFk5WCt2ckE1SHQzZzdCUDlBcVMxclFGZFJYMzNRVElvdTJ6SzBtR3BXWG5zVUl0aDZkS3BCZGNUQUZoS1NsQWEraTdnbE9xRUJxTDV3cHJwZys4MnBvVEpPR0FwYUlrNDFqbVJ3VC9XdERiYzVMM2xsTVcyMk5jSTZTWHVhWm1tY2VYWWkxZHVpdVUxRUJPZVJWQTR2MXZaQTNBbDdXMVB4QUlwSW1hLzZQMW51aUp3UklkbnJ3bGFuUjJGNnNXWGVhMmdOK0gyTWk3SC9PUDZ0Y2RBSitFeTY2dXJNenhKQWplNTVNRTQ0UURDeTUvaUxZUHZhMmd6eHRZRkc3Tmt2SFNydHduWDBpaEZyaUhJR2FvUGdzblg4NWM4SU5Cd0ZTSzlyWUQxWmZOeEdiR2hIc2kvaDZUcnJrL0lNS09wNGlCM2ZKQmRBUUt5cG0wNytVbWkwdVNsMmlCOGJ2U29zcXBNajAyMVR5N0NkNVJnTW1YOWNGcFBqY3VHQTZwQXBqOVdSQTRsSXF3R1AxRjZFdEJ4dnFHOFFYQzE2TU1IUk5IZE54N0pHbkFqa3BENklkT01mWHdEay9wbm93Sm5DRFBsbGExQURES2FMeURxSk1JNmFEOWtkQmdEN2JhNWNBbVpFeEtsMVE1SzhicnhQaW9xK2VyaUh0WGt1WCthQ3JxZjFIUU92MDdqcThFd0RLblBOQThVOGhPaHN3K3hoYzR6OVRMVHJLclNGUzBOc1RidGQ0Rlc2NFpxa2prMmtraEZ4a0kwN1hCV2NEUWs0RUtLYmFzOE1WcVgrTGV5ME9JSWpocmhpOWdtSVBwUnhOVEJGZE9FOWxkQkptL014Z3FtYXFRRWs1SG5hMFhuREw5ODJQa2xkSnFwMWVXQ2lLcnAvVUtpV1EzUC8xSExmUU5vRmxzZkd6Z1BUd0JKSEoxMVpxbWNuRk9FRThGaVByL3BUb3lwa3lTaTdad1pwY1Ztakg1K0s4cXJWMmR3UEFKWEphN3BpbHhEQVMvY21PS2EvM0pkWXJsdG43TVZ2MVRpRGoyZWhCSXRGbytZaTRBMS9aUkxkOEkrMHJqQ2U2SVY2Mk1rRlYrMXNKdWI1ZUQ3R2VnTTJFRVZRTzFHUzRCSW9MeCtjYldxS2xaRlVwUTNOV3dRNFhOUy8xdzQrdFB1THpVbVdLTVFoS25rN244cVVzcFc3VEZNZGxLbWF2RzRpWDZqcDc1d2xoamE1c2lYSERVajZ6VWR2U2ZSM2JGcFVoZzRIVDBZd0drWUExZ21nRHVGYWdvWitYazFHQmQ1UmhhZURrSEtiOHdLU0NXR3RtQlFLWlhnY3F0Zk1lQ2JOZ3VBZGpTcUpZbG9aalVnTFVVQlRQWWVobUVkaDdBV3NQdzlRbWtxNzdBbUNucXdGV3BTZmJMWHN3NzREVzRoZGtKTHhYTFVFQ0VveXhHZDdBR0UzZWhhMFhKZ0FLeDFXOEJBS3NTYlVad1hPMU00eGZzWFZ1TVM0OW9JY2habnQ1R3BoZUZ4UGxJcXZIZEFUQnJVam5uR3RJQUFKWG53Yzd4VGhMdGdDTEdnT054d3QvdFBaWDNWamZMaldYSWNDUmk1SXI1cXZtRjdyOUdlb2owdktsVllBUXFxZlB3RE1sVVNIc05EcDdERW01amw1c0pqakRBTWJYWFhqclByRzcrYkFxRHFyR3c3dEJiMVZGeHdCcDU2YUwwaFp6L2xudHd3T3p2NVk2Rm9Cc2p1Vm00UXcxOUY3SEcxdUI3V04zTzBvV0tsMGdSNFJPTHdSaVk4TlJZdEpxbkdJN2NpS2ZrYXJFTU1GRnpqOXpiR2xuSktpK2wrclluZGRqUmw1WUlsWGN2Vk5MSnVJWkw5Nkphb3dNdmwzanpVa1JQUUtuNE90TTFibUpnKzB2TTZ4QWxJNFZKZnkzRjBFSFZvaHQ4WXJVc3o1QTNLZDFLOXZXN2FqNW1nV0pQdGJtOEtncjc0NjFOcjhkbXBNQ0ZmYlJDbVNCOTlLZ3BEQUQ0SjdLd2FicnRMQk5hM2Z4NDFuT0FtallHMG81SitkMGRvMEJpYlpaR1Mrd0t2MGVlQlBQdkxEYjNXZmIrOUtSK01GdlNJd0NqN2RRT3lZSUJ5L1JsWGp2dVJhVkN6cG1XcVNZaFRXN21DTmZJZEJtZTRXdUpaUW1ISWNCTEVoN1RHTXdYb2ExMXRad1ZOYnptTmlpc3BacGlTa3gvWWtsYmhCTWg1czBTdmJBS0tKMHp3U2ZyRFZqZ0o4Qks2WGZuemZTTXRXRzRldTRxOXAwSlUzSUp4YURrYTk2MC9YMWJGTmRzazlVZ1pDUjEwYit3NXB4cS8xZG93ekhLOFlGbU5qZmxoOUtwb3RFcVZ0dkdkdE43VUorTUd6QXhxUkxjaTFjQ3VUUDZON3QrKzR2a2tjS0hQZkVORGN2MzNCRFlQNWJQc0RNOHRMUWUzTFF2RHpyNmUvY3YvZkQ5Y1pkR1c5RUh6SmZMeHZHS2NtRmM1U3R2dDAvaURRY3RCaUQwQ3NmSVc0dXZIRUt0WjdJV1pBRjJLaDlLWEVFVCt0dlZGZld2MnBwQ1RPd2dlQnJJQ2hKL1gySm1wb0RuNFZ1WTJHKzc2SHdudThFbC9QSjB3Kzhpb2lzS2hINFVjTFMyWnppbHdYeW5sOTJrL0RZa01JblFwM05LcmFnZkh5ZGJtcHJtZk1ONlNaTmplSzQxTnp5MnJjSHo3WXgwSVJOczVROS9HczVybjZuZ1dBVGN1cC8ySTFxQzBIK2RSWlJKRzhxQVorVll0ZWxHRlhmMXd3dlRVWUtVdG95VE90NFBWWkw3d3RNT2RDWE9mNjdkOTRUdEJhU0d3azdMTW1sTDlhOWVFTVhHb2FkcmpSZVI4NTc5NmlFcUQ2bHlQWmpvbkRWdklyWlI5ZkQ0R0swUmlHRWNNR0ZwbTlzOE1pWHNaMGx2dUpCQVA1QjBKeWZvc09XU0NGS1FzVXY2amNxV01oRG9QVy9IMmpPOE9RT0txYzZRME5FNVN4c3JMT2ViT1F4eUlyU2JUTVZoamZWa0p3L1BvMWFLUU9XMEw4TExicmM3aHBJajkwMlNHYlBBTk5xaE5td1EyZEsyaEZQekJjYjdvZVdsUkV2ay9JQjMrR2FqYjdGVEJYQnJSVDdCV2NVMDNIYjdrTk51TmFzVDd4Ni9zVHdKWHV0emxadEkyZWxkbWNGVTBGaEFxdytyQlVCa1BmR243dVovZ1d1TDRFWmxEN2dhQzRELzNiUnJpNTFrUnBEdnh0ZlBtTUxMVDFTci9LUjZNM0xxU3F2MWQvclJSWXJ0bFhNSi9TTzNQM01udUhtUVlNWGJBbW5sTnkwZ0xXTEFxRzNKTlV3OHlURkFPSzNqVk1PVUdtWUlHMG5JM3V3ZDhWQTBtTzh3VXliZWJTS2dYajlFZ2VsMk5RVjY2bnVROEZ3N2E2UkIzT0xndUl0N25qbHZVSTZ1ODFVTGNqTitVVkZBZEFiQ2xqbjR3Zk0wRWtvLzFOVW4xckdvZ2pVTGFZbDFzV1dTR2g5T1Rhc1ZKTHRISDc1SzZMNk5YVCtqcnlVZFIzZnMxK2VtZzZtS2pBRStzb1hMcGVrMkZIUjRIemdqQzBsazhTTTR2b1BWUlNVcWRKanpzM3ZkdGZhRmtLa2FYc3dFQTI0bm1FVkNwQzRPbUtNd2lJZWtwV1BPTjNPYUk1ei9CTnlrMm5aYVFUSkhzeDcydkx1aW9NRDVrQityKy9Qc1RsUHNRWm0zSjgrNjhsL3hDVm95MGJwWG8zMWVvS2Y5N01ldHBreVpaeTdVWEdVdXc0ZDhtRWxPY0hyTFVBcENjMHJPWWl5WkUyUUMyd1FvYmo0cFNXcXF1Z0VGNFBjWmlBd3dBY1lON0xVNmN6bngvUktaRE1XSVRhT3dVNm8wV2VhenVjcHBpckJsU3RraStzeGp6cjFzcVNtSUUvU3p1RHBwd1VacUJJd2VaV0NNSmk2dTFHYW0rVForRVlMMit4ZDA5dzZIMUM2L3NxbmEzeVYwV24yRWxPek1xYjRaVFp2OE1VR0NrQ3dzUHprVjI3REdxc2NDV2QwSVNFR3F1M1lRSGI4eDBxZWRFYXZpMDBJWWErV0JlNjE4Y0hOdXk1eThoWjE2ZExGSlZpd1hrUGZ6cFFyQUNHaEJ0QVhiMmhoTVd5UnRHZ0NYaUFrUUpQSGJoYlM0aVF6VG1kL0pLaXpBWnB1aXMvMWdMakw0QjZhVnhQd1BmMDJkVDhtd2NpalMzNlI0Yzd6a3Fxbnk3bHZYWFp3MTZTQ21ZU2ltcmdza29Wckd4MlQzSGlWTWU3WWlGOGp1NTJUWjhlR2VTcmVoTUlMS1FBK1ZscXpwRGxNT1l1VDZxcXFKZVJBcWRUUmtSb2FOQStGS0xuTUw2Wkh1V21GTUM5cExicDRCdmZvY3oxNVpKSDQ1UWtiM2E2c05FSUxCUWxwbHdwd2c5MDVnUkxoYUxNK0x0MDVsVWgrVkFKZjBla0FiNXVWaURoU3lpZGs3Ni9EdmEzODJQaWhMSEovcUMrN1FWVVFSaU5EQW1kRjhYTVBGUVZmbHdWMEdUdnVHUlozNTdiakVya2dPVTYya1orWWVXT1ZScFFNY0hRN1hsQWpFeENDZHFYVUNtbnBuTjc4dE9RemdRdjVQVjFPZGJHbjlNV2tqTmpaZHhWdTdCek5iZFRhOHBmK3gwczg1SVFLWmNyUEhxTFcyMGVNZ0hEZFRPSnl2YTR3RnRmR1A5Yzl1cE40ZGFMd3dtUEN0dHRXR1NZR05WSGN1b0JPWVhxRFdKc3NSRTVQMWJ0b3hqNTdjNjREZnQvMDNxb3BzNmY4SWhOMTlOazZJNnZRTmhlakpaK0hWMmJJLyttcFdVdmJXazgyVXIwa2lnTFd5cm1QQVU3blU3dzJBSG5zcFVRdGxJTXBSNHZPb2twSElNVmZBN2s5VUd0dkZKWHdlb2c0VzJ1YkU2bGpueDVEVDJ4TmlidHlUNllZK3QwOFl3OFpTd3UzczRzTWhDVFdVaU1heDNJcWRtczZoM2gwc0xEc2wvVjZ3V2pRZ1BkRTgwWkFoRU4zdnRjZkZHV2dNbW9xbGp2eGxxNUVib1oxYjlPWjV0bVRub1dvQTlHOFV4NGJRbnE0NFc0aFEzT1RmNlJ3emZCMnM4REhmQUhYY1M2bmgrcTF2OWlYWFpxZ1FWU0paZFJCeWJqK2xVK0g5RUNQU21ZUlNYRk5hVUJrS25Qa0ZNZGxGSzZnWC9ENm5zK0hHWVhHNktvWmRLRllGSzU1QzdLRHM3djNDdFBXMTdxUWkycTlHVzdLZEpqd2UyK1VpNUk3ZC9XODJFSHR3ZGJSV01jZFVLZGdhMzlzdW8vRTR1ZnQ3NS9qRTVKQzZzRWJPYWIzZ0ZpWmpESnR1UGNtdDBTMHNPSUNRdzNhekJ1Z0tFWDNteXcrRmxkZjlJUGx1a2JETFVEbWg4QjdqeWVxVEczWnhuR1QxVTNFeHh0Uk9Ca2dDOFdUbWMzb2VSNEFvY2ZLTGdzMkJzaUpFWDVoa0grNkVzWk40MGF6ZXpUaFBOTWZEOVcxYnBrUFNyQnB2cStEa3V5QXJENlUwdldRTXE3MzNnOE5RdXFoN0FOY2xZRGRSVjkrSTNjajBYSElBc2R1d0w4cWNXY09aTG1ySUtUb1IyMFpMQmo2NlpRa2krUGRXVWMxTUpvYU9OM0lnNm56MVRWZTV3UnNPQzhhVWlUSnc4elNqZUZJbVNmS0E5UW5SM2pmWHlnaUlEN044QWpxeTVVNm5GUU1uQkN6MU9jMVpNcTFmaGNKdzBLQm9oendlUkxpcVkyLzRaNUlnZE5ia2NhS3lCRmFQaHd6ajJMb1EveXR6SHZISlEvcWdwcTNvWkFiU056RERPSkN1cUpxZmkvTzJvY2tFcGYrcktJQlBGMXduQVRKdU9lczBORzhVdGpQVDM4R3hEckpxelo3QnQ0eS9keXI2dXB6Vzdic0dUdVpTWkgwcTVMUThpMHVXOVloQ3lncXQyMkkyMGxDNFVoQ2d1Z3NGclRibTZWYXJrdGZRSWJ0dTBlWDhQc1ovcVZiV3ZNQzZldHppV3hKMWkvbTVNdXdqSkRyS0JzZkNIVVJJQTB3UzR4aHFjdEI1ZytZWWhVcUxuRGpQSUx2VWEwYjVtQ0FEMXFPSi9LdjU1SUF4R1pMOGd1Z0xyK2Naek1sZlFJMGdrTmtuRGE0cXZmS2lPQnNsMHYxTEh2Z2NoU1FiNG5sdFc3b3FYNFJZdzN0MllCczdlVzlMOE5TK3hhT0VGMG1CNmxBZUIwZ1Q5alJEWmplRzBWU2RGdFRNMUdpS3JKZ3VKY0xnQmlxRDFnVlRvbDRFbFkrTlFtLzdHQUo5NDYzY054VUZQeW5LYlVrUnpDM1Ntek1nVFdadURCWWlWRnlqclZWZXZma1hFMXpBaEtwKytwRllNTUVpRWt0bW5UWFJuL2VpV1FOOFBiTWFnZHhZUFN5U1dMWDFla2RnNDBCKzNvRHRxbnVxMjIwV29peFZ2RTB0UWlMbVM1Nm5IOXAveUZCMWd4c0kxRDM4WUp6dzI2elJ6NEJGVnlGRUhhZ2toWmZjL05oSUx3VEFMb0FBVStjaHZrQUsxcEQ2Y0JzZ2o0VlZML21DT2VOaTNHNHR3SE5ITis3OE5XS2pFY0VVcSt2ZEcyN0w5OGpCcXJkeG5iR1Jkc2FuNVJDcHBsL3hyeEtpeFJyWDhibElob2FkQ3QxcFZMZDduaS9rR0FjTDNGMFFtSXFucWV3RDM5dXoxK0h3c3NlTTkramd1c0I5UTFuZCtHNHlIVXBzTzNtKy9kSEk0RFc2RnhDUUIvbmlHbHZhL0MvaDB5bUpkOWdTR0VsM2dkNU9LK3lKa3F1QnlNSlNFQURvaG1weGVGWmQ0ci93TWZMNlFBc1dQUExmZHI4S0ZuUS9JZkNzMHBiMUg4QmkwM0pGdEpXTGhQc1BuZkVVL1JPKzMvelZzeVZESkg2SVNLc3kwM21WOWpyRFQ1YjYxS0dkRE4zZFM2bG1rZjM4K2RFbGUvSURvVzZOSW42YVJFalpsdjdsZUJ0S0xsN2NPelpGN3hWOEd0cGg1MWZWU3hRR1ovUFBTL1NYcnBsUzM3dnowYmI3eHRSY2pUeE42T0ZvWlZwTlN4MEJvSmlOcVAyWW1JUkY1L3lsK21FcWFUaWorSUxWTHBYcU5seHdlZS83eFlaQzhqa1FzR1NFZEw3aHJVaGNzejN5clpwb1d3ODhGSzJOem9YTUd4elBwSjNzUVVJOXlmK0hEU3lQMzhzU3dnemJ3eWhZc3RYMU8rWEV5MmhNemMxVUZvNTJNUDhMZVJHdy9EeXRNbUhSNml3V1Y1dVRKNE9SWGE1bEU4MysxY0JpWFVFTEU4bmlPY08xSlBJZFNnRmdPYzdodExuVHFGYW93UXBGeFhrU1ozUGExUytlR1NyMEhxWkszVEhaUU5EaE9zaHNXTFQ1aE1WVlZkOUdwcWIwUUlqalpiemhoc2lQWW9RNVpGQWpLcDBqU29PN1VmTW91Q2orVWJNdFR6c1VYcXc2bmRNMFpjL3VHNURJZm1HdHpvaW5kQ3EzNHIrOFpFcGNiMC9CUU9UUnJIeUVhMkJMdk9odGs4ZTg1OUVlcmxpYzRybjJRTEUxRVNwQ21QeUhNZU5adHBtTWQxeHNyc1VhTFFFekxweU1XdlJkNDVLRnZqN21jdWJ5Q0x5cWZ2MlExemdmdXNpclROREQ4Yld1ME9reFhuZTk3ZVU5Vmt6U2IwM0RCUWZEYWluUldGZWtUenMzQXJGdEduYVFabUdvQ2FWMUtYdFUrVUhjQzBMcTgwLzhtNWtpQlE4N3RnL1R2VitLbDNxSmk3R2swUmtydFZRRkV3b3l4TW5iSzhKNW11RjBQY1lkdWsvYmFSS0VjenY5TklFL2NwOUlSR0NiNlpVdXJab0FjeG1Hbkt0YTdIN1ZXbE5WalBDV2ZocEZoRHFJRzI4TFdpRlR4RjFxcHlrekgvM29JbHhhWUdUaHVIYWx0ZFVBVEN1N2w3NHhnWmdWbDlJQk1RRDFuWFhHNkpUbUk3V29Ec3NyY2VwblcvZjVRM0htSDVUcHF6RzgybktYazBnMjBzdFRacG80cWlkVDRvaW0zSUF5eWFTazVock9HNEZFS2pvcm5kcWNWbUdjUUR6OERSdXpNdWMvdzZMYUlvVGdtUElENGJsbU84bHFvRS9aZW5mNmxoMkJFMXZQL0d2c3VYWDVwZlRJeFUvdmRlSzdBTVI1Zjl2RkJQTU1iWnRWUis4NWJEQmpnY3JHQ3ZFMEg5eUs2bGUvZ2UvMHphRUpjTlNmZUw5VGlFTVJlNlFQQ2ZnKzNEaFhNdEVQOE1rUUVaZEV3RkZkK3BRSmFDMHhaWFFHRlUzcjl1dEpMYmpCTGp6ZDVlK0Z2S1BNZXFaYXNTd0J0anBEcU4yY0VCNEwxdm5QMTdIQWphY3FiNnp3SFVIL2NxbHYyQWg1MXZ2SkFpeWpSNGR4ZUE1Y2NaVis0VDFNbGIrSjVBWVQxY3VNaFl5QlFQanJxTm9TMXpSUmhzU04vc0l3dGVDUXNmZEZtaFZkSTZ3WjhJVk9CUDRiV2FkdTFETHdCU0wwL0ZacTU3NDBNUlM5eXB1UFdmbE40aHBqWjhzK05ZR0RwVk5Yd1BPSXpPdVd0cmlLaTF0akU4Z29rNEVQNFBoVkIydldMTldDWmZSQ1RPaGtoMXhuSGY0S0M1QWNXMm51cnpqazlhbWRkYndGZ1FiT2FEamZpc1pSQ3Q3a0NHTTdBYXpXSjFIOGJYYkNKTmhVc3VMQVF4Tmx2OEsyT2ZrUkxUb2dQdDMzdTM3cUVxNHROc25nWENwMUVlR0ZRMFE2LzFPWXg5Zk1aWWI3d0pJS2pKSGRYTXIzR3JVNEFPbHhpTFNuTVBjWTdyc0JWZWY4a2hsQ2hYN0FPbXMvTm5Wb2xid2MxNHdMZDQ2SzZENG9FN2JVcjlhUldPeXNQcDZZbTlPeElEb01UelUrc1pnd3E0RUEwbUpvTm54MWJuOE1rb1lqSmlJKy9hNmtmN1dzVkN5TGhiTWwrYjVCb3VETVBCM09WV1JDRjJKdVd5bVorVU40SjdqcXB0NG9mOXJmWGtmdUpuMk42cThnbmFQQXgvUW53WGlya0lza2xVZTEwTmZiWWdZaU5PVW9iK0F6QmZTcHRURDYwckMrRmllSGFuMTBPK3hQYzBNNTJUZ1BiS0VEelRNWEl5U1d3MkJqTldSWjMyL3BLdW1FK09vM2VCMHJQNGRDV1lEWWZlMVJCQzlnZzE1ZENDTDJjOThVQllXbGJYN1I5ZmtLWit2aEVabXc5Q24xcVpuZmFoUzdEcWRyNDlUa2Q0cXlmNjNUMnhNTVRvVGR1UitLYjdBY2Z0dzVqOC9LanJhMXAwM29OaTZLRVlnZVNoY0lxeTBrN1p5bkRvK1kxSzd2clh6UmRmUWN3YlFTUHU0ajJBMU93S3ZjblRSdFVrbEhvRGpSelM0Y1VpRXk1a2Z3NS9GWGRWVXRWdG8ycjhVQlRoNEREdnFHekVmMzlWUE9NOHl6WFJOU3dtL0hsWDdlZ1JvYnhJWS91UlVvZm04am14YjF3ZktpRnNWUDhsVGduSlM0TkQzYlZkV0Voc25Ud3U0eUZEUGFGQmJrVFBIR3FBVVBteU92WjVsRkxvQTRYSHZYQlRWdUVDaHRDMnVkT1hvbEMvazRYWDZQMk1vUTV6K2cvVDZWZEJ4TWQ1TlNIaUpTVnRubHd5YVAwd1lPaWtMUlJCM3dFRHRZZ2tGYU0wbHlvaU9QZ2FrSWV0a0tQWmMyQXd2cUlxZFY5ZjNHSUNOeG9vd3lvbVlDWXZUSXErNWdJbXdvbm9JLzhRelhsMU0wa1Q3dmxHZjlhL0RQU2FhajJKSy9lb2lEZFpOeE1WZklKNHlGY1JiN3dnMUZ2a1VVaEpISHNQVWdFUEg0RExZWnhJaUlUSWRCczB0SEQyelFvT2crekRrQTl0OGF6WFlQS24wOG91TVQ1b0QzVG54b2V1NUxKRWJtbTVYYzJ5NUM4UXp0S1hVOUVxck1CNitRWUNJZ0lrMjF2L1FLdkdVeXovallpYlVXTFMxMmJlNWpVdzFEdFZXSUZOQmNBbFNOUjZtNlpzOEp3Z0pzSnJHUEFEL0h5M2tTSEFJRnRhR21ldDU3bC9QbnRqa2NEbis4SzFDWjRhWlBmU09lQk4vMitVSzRCM29MbzlNcXlqRTA0WmJ2aXJoNE5zdW4rOURsUklNS3RxSUJ2VW9lQUFlZi9TNUNuQnlvWld2czZueGVGUi9adGFWbFFleFhDM2pRNHNrK3krREsxZVFpbVBDbmRycmJpZmluVGxOTkRBc3lCbVRBRHNpT3lia2pycU5ZbTJ4emFMZnNXVWJVZzFkUytqaStIdnhaQnVqN3c5ZHVsMTlxU2JLQmRjakVJMUFzbk1vYndxQ05lM21DcktROS9UTkdzd3A5Z0xaYkNlend5emtLSFN0VnRLdENTNzc1b04yZU5SQVhnWkJaYVdaNkVaUWw0c1NGc3dWbUJBd0Q4OWZQZkxVUE1RY2kxbVFRN0dZQ21XelVKSTVYQmpJUHB6TzJpUCtXWVRGUTFjb3g0NG5PSUpyMmR1WTBXVHp6Z1RBQnFZOG9EZm5GaU1BbC8zNXg3a05SdmF3SXNGYU85L0J6cDFYdmJZc2Voc2hXVkFpcFhERFV1RUFvMGdteUNzSW9aZFFWZ3BaWEwwL3EyekpyUmFVNGtpQVNWMHN6TzNXcEFwQzFhZnBoLzNCY29KNGJhbE1Dd3pKaWR2ZjltZnhZYmZJTWFmQitSNmtLVEdIeTFTVFNZaTFmRVAvUDdYQ0x3VEdtVEdBckNhUVg1eHQ1R3MxdnRjcy9QcUlFeEdwVGdCblVLMDRLaVBvUTRhWXdBaU9kMlJjSlZ4a1FLeXNYcjBrY0g5TWxzR013L1NnWmVVWG9tcnNhZ3RhR2xkcjdWOEkvbkVwUWV1M2xYL09OWnlWdDEzaFRkR2dBdWpHNWx6NVhVb05NcHZqM2hXdkJkbEtmY1h2aDZHWXF3dTJoeEdFV1dSdGc2b1h2SnlRSWtWR2FFaHd3dTFjM3JuOEE0eW42emRVTDhHVmdtU0JBVE5DZWhjMGRRTXlKcktrT0tYQmhaMWprcHkrN2g2UW4zbEpTbWlzSjJrRmh1Q1NIbFhQVlBwalB6ZWg0TGRrTlBjNktZdHNGeTRhMFlIUWtXVXR6b0Y1V1NiSndsTnlMdGJJM0RVd1NLM2xSNlRaSXg2NlBaS2ZlRi9QdWxXS0RVUVErMEJhYWNqV1dienQ4OFJCanRJRWhGY1lzKzgvZWdxTjFrTFE4TTBmakdQZ3dqQzVEWFA4RWRiQ3FFYXRjb3ViZ0s3R21GVFowUDdZWHU2RS9MZCs5Um1ZaDJCMkpZWG5EV2g4WEtTdTdrWlJhdjJPTFJ1TnJHM0E3MEFwWGJsVXprNDZSd0R3em1LSnlZUDdVU2tQNjFsZ25rdmRKQ3JqcVdXWnNwRjRJVzBFQURmaUJKL0dJSkhVNWprY1ZrUjIvcTh1ekVLSlRHRHNyYklIcjBoVG1RZzFveHR2QmlieHhBMGxQMUJrWXYxc0xFZTFhZWFQeFhEQ2lRbXozaGIxaUwwTVloNE1WNmRBcHJ1TnFXTFdUY241ZGp4d3A1bU1nQldhMDVsWWFERWd0alRlU0F1TmJ6dXlNZGFlcW1SVUFKVmtDYVI3MWNxU25FYnc0aWNVaTFDS3c3VWN4K2x2Vkp2aHlZRXJzZW1OV1crS1RWMy9GWkNHV1FsdXcwaVZUM0liU1Y3aExvaDNqcXVnTEtCR1NQWkhIS0tyMWRCTUZhSkVpUk9pVmVZTGxTVjNVOTFxMGlVQ3hIYmNTVFZ4VG5GU3krWlhtTXV2OFQvZksrdnV5cmo1R2cyQWU1NVVySG9tY1BVQzdNNmgydmwxeWx1bHhYQWo1WCtlVW4yN3BtTDRJWERCVjNtcmJGd1Z4enRwZmdQNHpobkNhMGxFUzd0ck55VmJjcUlrb0crUEtwdDdVcnk5VllqQ2NtTjFiYVFnaFF4L1RrSXA2a3pDZzBsVlplMFppUlpvWW95UlFtWFdZbjBrbHloOU1QOHMzOW5OaGxsdmZqMnJTMkc5UDJVSjhkM0V1TldmWHliQlVGVnBIa3BtQ0diOFVYRjc4RndBS1BFM2dHRm8wbFJTYTkrTjF1cXJDZkRpOFd5SktxSFhXd09CdWRDRGdmRVhTSStBeFArZTZ6aEVhVzhaeXdQTHdHR3dndXdpN29QSWg4clBlcHlQb0twTUdGN1JmUE1vSE9ib1FpcnE1RjNmNUFsTWllc0lhZ2Qra3RKMWpmM2xuMDdlOWtRdTFZK0tOOFJudXBiRUs3NndiWU9BUDVNWlhOTklZMWFRdlFuNDhHUEtVckFtaHFXNnExWVNZWGNrMDN5c2VReTdxR05VSHByTjlyZ1l4azhLYnZOcDJNV0wrM0dVaWJCcVYvL2NWZFdGaEtMQm5PUDBQZ1RRTFBIbHJISUF4bStuY016TTFKRGF1V0w4RWJrNFVZcjZGK1gweE9oYjRncVBNQ1FyV2JTNG5TeVFWZU9wbkQzSXZlUHc3eWJFRXRNVTJTUm9waENOaXI3ZUIwS2ZJNEZrMU4yd082OXBrNnVJQXg5Q2pFcXZ2WVVOa3ROeFRZU3gzWVpHdWM1elBhZVVGa1o1YkVNWk1TOXlSOWMrUmtlNTgvdk9PMG1rMHJYa3JlNFpTaVRwNWhwejNVU0JFUzRPUDFHQll2eitndWhTaUJSaXNrRUo4MGNzSUM1UkU2cXgyRThVQnc5SEJqOWRSV2FlN0JzTHVqdllzK1pqUlVuMU53bVkrV3k5VVhBSUVLN2NXb01GNDBJcDdKMFlkaGRPU29sakNLVlJLam10ZEhtaWQ5SERWV2l0eHpVakxJUU5UM1lIRWpoQ3o4Y3FtdEUweXFtT09MakZaUjlGYmpFTWpzSmlFZFFKUkEwOUs3UnMzWjBpNkZOTnlrUmpYeVRzYXgxVE1yZEwvaURjUFRoNlBtNnJiVDlJTVBRbThyeE50Q1FMc3A5QkEwQ1dkR0xzQjFwQkFibjdqblJzZEoyYmNjblI4V3Yzc002RHZuSkR4Z1JUUDhKV3JFR0xJNkJucklsbnZoL0MyT2EzOTJDemEzaU1SVXJ6K2FIOHd3czRHUlpxQzlMbFZYWWJaUW40Ly9WODdjckF5YXNsMWoxZHAxVUYvSkVQa0tTQ2MrWlRJQzM0VWdZdm80bVowaGl0RCtaUkx2SUdqd01QM2JBMmZNZzN3d0h0QTR1SW81cXliYXVtVURCTUlWV0N3V1FtVlNZa3RIMnM4eTl5dWdRMW5lWDVLdDRNbGZvODNvZmhxcG9Nb3AyeEdTdi9XNHZtRTF1TVA5T1ZLMlVJRjJCS3pSZllBUnNBanoxa09lUVUvT1B6bC9hS2cwdWVoR0Z4WTM1VHpMOEdNVGgxMXZWODBpVG1MOG1UbGZHYmwyMGIzZEUzTkJMYzRYbS85dnJpUnlQMW4yTC8wM0hvb1plcXlERjRPYmw0blZLU1FqYWdhSkwyWkpLdDd1UEFLV2tyM3kxRnZFT1RnaVN4bit2T0k2NkVVS2FGSmhFN25acmV1WVlId1RRaityU3VCTFppRnpxWkR4Slc4WnN3K0hIcmVLbldlVjlKeU9KNVJENnpBUlF3RHpNRjZlTmdDOUtFRjMrSzIzWHlZU1NaTEI1S3FXRGJKYmM5cWt1SnQyTDhHZllkOFo5dmdPVzBZbzd6TGIvV0dJZ3hFOWFQMHpaU0tyU0lpTDlYZG85NllPVjExV1BMVGJKWGJ2NzZocEJyZ3BxZ1pReTJqK0ZDc2IrRUFONW9BNThtb042d0k3aFFYUURvRWZrNVgwbS9kNE1TOXc4NkpoVnFnbDY0Rkt2eWgzSkk5SW0wY2QyK0hXbFNQL1czR25xRzJ3eS9IL1ZBYzdpVFpSbXlLc0pNd3d5aXJIY1UyNEJ1eVF0b0xzV0VIdmIzYURuNDFXQUJON2l2Y0NDTUFqdFdMbWFkSTlyOGlpcCs5NHpBMm96b0JBeFBFSUZhUnc3b0tqbXkrbUYzUTRJZlN6VTZaODZVWFlOd0lJbUJrcVI1aG0vcW9hWTlVT2h2WDNEV2YxM0VsWUtCNWxFemlkRXUySjdDVERiaUliSkE5eVNZbjlkaXg0U0diaWFWNk16SFlKa0RCcjNNN25NVk5PTXlZWFlWQVQ5ZHZxdlpLN2hjTU1UdXBsbitQS21GdGhNR1EzRmZURnA3OWRyaEkxcUJDQ2F1WnM0RG1MVy9nTjNnNjlTbytYTDN2cjhuSkIxVk1GNXp5SmRCb1JHZkdmS1FDUGV6SVE3aHJ1d2JwOC9NV09leSt2bWVzbTVRdFJWNm1YMjBPbEtiYkp6cFlMb3kzRHhBR3Nyb3NkK1dlQ2VobE5ockFvZEFSQ2JIeUlieXpFTzdmdlhpMm9qdTVNb3FPTGFiU2VkOEN4MEFMNG1aUnRPR0ZkcVBINTRlL2NtUEVCMHFpSUxJZG90enN2OGFKL1k0RTM1ZjJ6Y1hUb1hPbnNSWTEvVm11dWNPcnB5UnpNWkJLMWFVdWlIVU15cEVBVXRzdWVaZXJ0WlhNaE5KOE5FNllkZXFESDV5WE9CMittbytVUGx3TFRBbWlwMWRQS0pRTGdWRzZnbm13N2ErdTlaeHdYWERYZVlIYzk4NUhBVkVmb0RqNHJza1ZxUGova1hqUDlISHYvYkNkZW42M05sWjVram91V0FzN2VrNE9mQkUvN0hZdzFTaFYwYVFyOFM1b2JwUVA0SWk4UDltclA4MXBpOUVSSTF0RTZwV09LY3NhRzZEM3BWcC91b0ZiREV1Ym9GR05CUm9FWXp1QzloWm5hR292dXYwVHRIR0xFRVNWdHQ5NVNnbFVrTHNCK21uVmZRMG5IZkxxRnZ6UWM5a05iZzl6Ym8rSlIwU0lGSkk1bndRSUh5NEdQalhnQVJZR0p5eDJRTm81Sm9GWWpZcHRHZDRnMy9SQ3RQSXZiTUZINVJFSlQwYkhLMUZYOGpxVjIwTjljMW8zRkxoWjJuZjNFSEc5YUptSzdSOWNjNzJhbVlyMnZnYkp5SitwTUNQWmRhQkJLbDNRWkVwQWtjQTZXNElhV1dSNWVPTGoyeXUxdTc4cGNjcnNnOXRwZEh2aURHUHZTS09tM2lkZmdMQVRZOHNyTXZmdWx1cmpzd05KK1lOV3prVjhFb3NLMG1BMzU1aVJmaUUrZmplK1hqVUYzZDk0UlNnV1pqT3c0TjJJc3hjeDNQeWozL0JaR2VNL1NtQkJXMmFVTExlTEgrelFjaTRMREsvRkloTWltWWp5RWJYNHhnTjg2Y3FqZnBqZEl6WG9oZWl5M094cmpkS1RMSTRDc0pNanNGclRCcTdHWnNta3VDQXBLRG1OVDFzK0Z3TUdhMDdBM0MvRm4ybkRUNjY1Zm9ZT3JRMEFKWVJiVC9ZVFNMdHJrMVBXWDZjdHdHWFAxWmROaDVObFNIcGFUQmlVNTBVck1vVHB0NmJReDR3U3hSemI2SElQUFZIR3RGMjJwSDEvMTJhSFdWeFhLOW9hbVBoamVFek5NdHNQRk1qMnBxSmEwYWV3d3ZyRXpTdTQ2eDhPNFNrZ3ZYUW5YUnVndWxNVzc3aGdZQzJjejBrdUgwMTJaUy9LOTZFeTlYUzV6QXlGV0V1YkRjK29aMmhnb1lFTDZlWkNPVzZJRFFsR05Wak5KeTFGQkFPV3RuNksrbTNUVDRWZ0dwdTJkL2FQTmY4RjFmcUhDNGlWVTc5K2lhYkw3T2NKK0ptWlp2a1YrSVFQWi9ndFRHRW1IRUxuOVR1MW5NVkhKR0tHOEN3ekkrQUZFbDE3bnhQTmVmTWFsMUs5WkkwdllKRVVmcDYzbXEyMGVIcXVldmd4Qm9mcG9hc01NMVY4Z0FKMzRPaWFpRU9seGFUV1VuTVM1TFNma1ZrY2w0UnRrOEhTSlc4ZWk4dE1ENlUwOFBLNnlLRWpIWFhab3JmdWh3cDc5SndpWlhkZFMwc3R0VlNrZzRQOVlidE9VVm9qT04yNGdRN1JoYVNMZzZ2QVNaR010QmtEdkhlZ2FXRTRRZTJhNE9IOXZNamVlN3hxU293N3hhZmNTQUV6SnJkNVFYRnBPUzYxV25UUlVmUHhXVHlRYmpXMzZRQkNDUnBsSnhxci9LeUg3NjNEalYxTXQxN2JXTWpjWWZicVFFV0VwZzNVc3lzMWJQL1cyYUs3OWdVNG5VN0ZaYjMvV1p1SHlXV2tqWXhYYzFUY2crOWxUZ08wMGpWcHQxcXJSVjRTamlBTmxjeDF3Sks0RTdLTVpLd1ZzbXpFRWtmY3pXdHhxOTk0aXE2a3dMNUFXdDVKZ0NRK01jdEJadllPajdKMGJvaW1WUVJNS0tYLzRHR1ZFUVUwemJCQ1FyQkFSb05wYmVMVmZtRnR4RThmaHc5eUZVdUh0QVJEdVVodmViV2RXM3gzazFwdlQzdXpnd1BsY1JoYjlrdkNua3UrclJhOFlxaGUxRUZlZzVGVG1ubTZNV1FFcUpYbjZ0ME9jWlZNZ3VrWFMvelp0dGVVOG91dTEyYWhyMFMrTDNRMjVaVzJNeklVZWZZZGZxY3dqTHJxd1kvbk8xdWdHemFFeG5ENW5tNXZqREd1R3FqWWNobW9XSElzWXpFS2JhWEZlZGl2bUR2OGU4WGxicWRoM3o1eWdKRDlYL29qeTh1NHFYMVgwdHNRdGNSRVF6VW55Q2NXOWhLUWVkR1ZkUTZ1UkFiekRNL0g3MUowRzd2T2RucmMvMTdOOVAxNnJXQXBvTDY4OUhSOEh5Tm5kZ3FnckE3UTNhaDNHcGpBbkZkQm4vWjFLRUZoSzRTVXRjSW8vQXdoRmlIQ1ZuNkFxNFUwZFlhTkRMUDZ4ZUdjVzcxQzdyWXJIdERYc3dDOGxwNW15RG53VGdCRW8ybTUzMXlSOU1pWkpDYmI1M1lVK0gzL1lHbG1WOVlpWmJ5SXJWOC9JbEppRGk1bjFWaVFURFJxaWFTdFF4QllkQk9sQUxGNEk1V1N5UWwvZ1lHT2FZYW16empiWU10N09OaW03UStpNWhHS3VRNFpoOFVndW9yR3pMWnNnRzI0TU1EQXpJYVhHVjJ3MG9QQnJmWWwyT29NR3ROQm04NG9GVW0xam9RR3FvcXNWOG5ieDBabGsyUzU0OHk1ODJrNThCVnd3T3ZvMEJ3NGNKSXJ3UlpTTFFjS2hWM1RoV1dLS04ySUhoMjgwbS9hYVJ2WEdWWHNrV2dEcmY0a3hJaDB0ZktnWkJZUmpYS0tZY2xydGRWd1pENHVNR2tCWHVXR241c29VVG9xa2ZvQ2hVbnlUdXcwemNKR1orUENPaW9yMGp6c2x4MktvaG9UM2F5RnVtdmswazdtcXF3YldNUEFWVlFQU0dYNk4vdzZEYSsvVE50RUg1SkpueXFnUUdTLzI1QzdtYTJXbXB1aHNQRDh5YUZNTWZMNnB1N3JPVERjYjFNeTdVcUk5bHNnRndEU0owTHRjR0ZnK3ZDRUNjRG5mOHRydTRzYk8zTEFUTFcwZ2xLOWFVWVV6U2Z6Qjl1VWxDNERMMENjQWV6akpnb3NQaGd6VDZtamJQaUZlaHgzMzJzcGVJd3NDVjN0UGdMaVlkMW54WklWbGthalNvWlZZVXpXVWJzRUxGYU5jWWxMZ1ZJTnZkMzcxVjd2clRQSzNremdWcHltT1Rqa2lqQ3ZaMS9CVDYzeTBJNVZ6S29aSS9sK3gxaDVUTG4rT3RobXU2aE9aVldIaEErRkE3S0wvYmRveWE1UlkrK0I1ZWwxU0NkNjZoQ0duYWpXbnhJbHZHRThraE14Y241ck5DWnZybktqRVNPTTdQYzU3bzExVTlRZFl4ZFJ6eFFSczhPZTRrb1dYZUk3TU9tQ0l3S2FxY0cyWVY4YVEyZVZsMXFMUzIrQmdkRzBPU3lnNG1SR2ZlaGxFUEZxRHc4OEM1YUhzVkpsbTRreFJ1WEJOTmRTNnBkeG1wOURWYzlTNkxiSVFqVTFxWGh5bCsxeHR5Y01Wd3daQzkwdS9ZYVg3TWowc2lYczBtZlZ2TmJBdGdHbWVwb3VYRGYzRC96MldPbVRiR09mbzU0cHhSYU9tb3pDNWhsSDRaeEJFVHVRTHpiSnpYelduRkdnV1Q5d2Z6UmhNRzRHNDBSaVZvTmQyL1liYlVRYXR1eHIwV0ZUUzNuWmFOamlWaW5rUTgxUnhOeURoUzdBR0lOOWVmSm5aQWMwRTNZS3pNMUF0a3FzeUJDSlhZZGRJNkJoKzUzRkpKbUNNcVlEdjBwK2NTUGtuU1ZzekEvRzljVFRNd0RrWXlTUEZXOWNNY1NXL09Vc0RMSUNxUGprd285b1E4ZFBsK3ZJc2hlQUdmQU0wb2duay9HT3JxRXBxZkwvZGhvVnNxUGV6TkZGbkRXUlArNFF4bDZaUXFRSkJBa3BWRmtlUHh1SE9PV3hXSDYySFVJMlZESUR0YzNydDJUU1JDNGVZb3I2TnFhYjVhbUZSYnl5ZCtIQzhsOGZVd2VJT3pqYmpIRFJUYW9DR2ZBVzlHMm51Z3QwVTMvbDJpbURCdW42dDRhZCtTdUk4bmFiaUpBeENhbFA4QnMwdWgzTnFtSFpPY2VnbDQxTFpCQytkTTEzRUFRWTNKMW9CRjBSZTBZc3haVUlBMldOV3dMTnZIQnpOLzEwdjB1eVhyRzUyVjBvZ2dCYVRDQTNsWnhTZHJEM0xaL3c1L25zMTB6NmMycTRRb0FvWkZzb0Z5SGtFaFJHTGd0T1YyRFUyZHRSRTNFb0tEMWo4WDRxUkVyWWRjaFU0aXhJd0NsS2QyZGY5cTRob1BaNEFaRG9RM3VMT2h6NkJFTG5yZ0RLQ2JFbVVUbVZMNll3aXBYMmlEN2ttTEFLeW14b0tabUZNdm81a1hpdnR0TDVzOE4rYTRoWWZXMUJiUUVRc2FkT0FEYzYrZTB0Qkh3L09jM2w1aEJBcEo3UDMvVnlpSjlmdHpqd0J0OXcyTTRvMTN6UGdubVI4eDJkNHUwdHMxelVHREF5Z3h6MFUvVzA0MG04dE9Ldktpdnk0UkwvdHZ2ODRXSlpJUVZEWlhBemJ0ZlJOMzNpdnk5eGRYakRmT1RYQUo1NC9XMGlCL3RNbzNZakFLYktKWHlIMTNiK3BIdWE1ZzZpMXlyZVJHZjgwMytXMVZYS1hQaWNHTytwLy93V1BQbTZHc0NLWW45d293bFJKK0FzVXkwWjdRdmxSaVJWcnh1cTNNa1hyYi92NDA5NDdpKyszNjRPY0loTkdEeU5XRk9pSGhlUGdVZ09yQVdyTzdCWmc3SUc3TnRhVU5TUWFkV003bGI3R05Ic1JxTTB2MHBRZG1PdHc3OTBydmNqaGRhWWVua2M4V21CVXFYSHl0UFRmTTR0QWhCL3VpMndBMXVVVHU1YW5EWVJYTUI2bHFEVWdlaWR4U2FxZC96UnBqYVhDMER6UU1RTWtwYkZrU29XMmRhR1lzSGdHd2tiSkRCUGI5UWV1cFhzVjY4OGNadkR1eG83SmtwQXZMa0dqYVhJNW5XV2VZZjBSS0M2WkVDSVAxZHpsOVo2WHl2WWxiVGJPK2h0dnQ3WWtDNzJTaC8zcVZIQnlzQmZzYVdEeVVzN2lFTHpwWmlEVmdKRUgzaHhVRVJQeDA2U2FkVWh1aHFXTE5Ec2Qxamp0Wkx2NXVTOUhKTnVCWEhSRDJrRU5MclJYWWVoMGVSY1VHVmsxQVFSd2FVSXRISzRBY2tVUkM5dDVmcW9sT1lHV3RvZmx3ckVJcnhRdkdsNnEveVZKY0N5Z3hCb1BTYnFMVnl1bjJzV1Y5cUFua1h5cnhJRGtxQmpxSFUvUnNTOWl5cmJ4M3N3eG9GYk9leHl4a1pWMnJINWtsTGJYTU56R3ptMlFuVkxCZFRqaWZRMUlJWkRrb3hESEJkbE1OYUdvTkthbysvWlVBeVZOMkgrcVc5di9WS3hCa3VXeWJObTBJSnBnTUEyVVcrY0cxYmNpQ2FVK0VYVjNmMWM1Vko5RXZmODllajdsVElCS2lKbDFJWDJoWHNuWndibDlOYjAwekE2RndtTFBWbjVmZEZLMEg4RG5JVXFCczJjTW53ZmQ2b3o2TU9mWklER3JLY0ZqUWhHSDl1c3hiTkdVVUNYb24zdXk2YVZHZU1BTFBhSUt0dy9kcmpTUmlIUlNxZXFUZkNGUVhwQnlNSlVxbFBCWlJiaFlzdEI1am1IbHBTN05ab0F3R2VoNDZPOE1EeTBQYzNyRW01L21ta1VJZXdtTjNwbGRqS2FqL3pKeXg0NW5oa2FrUmFZZmpSYjNsQm5vUDk1dW1TdldLVFhrazl2RHp0TkRpZnFKYnNET0VqajV6MHl2UWZMK3N4NngzV2JNYk1IaWd4WjFDL0FpaEhvRkN6Z00vUzZRQUpkMHNFV3UydUxkWmM1Z1NTU1hYdEhrNjlFYTc3d0pRbldMSlIwUUI3dS94YUlXaGdFRWp3WTMvak5rZ3A4MmU0U2U2NERaeU1yb3dzWFpGOVJtVGFlWFFTZFBrQ1Rmd2dsU3UzWHF1TW9UOGoxdkdYMUhtYUVzR2sxNURIUkd3VE9aaVRBZVBIdDRUTUovWk9DaXNVRUpaVnBteXk3S3E5RHdSWmtJcExBelhhbDc4ckFWWjlDQzdLd1ZDVjNnS3NvbGVaTmJ3RTVjMk00YzVVV2lpV21jNWE1YWNqOFYwWnViTHovSm9ldmZaSXE2cVJRNmtsSTFPN0NRd3lrRGZEdjRYZ3VVald5WjhtNGdFeDVhY1hkVzZFd0hxQ0xkazlIaHlwb3Y0ZHNQdjhuZlJWSy92cDJZYTZQOWNYY3VqZWh2MjBramZnQ1poQnpyd0dXck0ycEYyOFRHaEdHMXRZanN4bzIrdGl3aHNXeWg2ckpMU3ZCeko2ZEpObUZvd0hhS3YxbFZtNkxZdzZNVGxOSnhmazc5WDRXTVY0ZmkyeXVKSEVoVzRQejArL3dEODIySGNHeUE1R20xVTRZby9CYU5iNy9waThjMmV0VTNXTTR0b1VpQWNIU2N4T0c4aXhYdnBtWi9Ka1BLWGxiTEs2YUtrcld1ZitwckxsYXBDWHF2aDgxczMxWmphZU1xVmNKdG53Mi9rVi85NkZVRnlCbHg2YVFkNUE0cXFlQUdZdFlvUkxJVDE4RFRUaEdTa09uZVVpODNaeVBZbFB3d2c4SG90dXFQY2lQWlJuYkZoOWtOTlZ3c1V4anhCMzM1VWI2amZXcHF1czZXOXFMMDQyTGswL3B3WEtHL0djc0hZdWk5QWdCUzdKSnIrSzVlRUlvK2RBNllHWFlNdDM5YkFIclVJKy9ibVNwTitzS1dVREFoR3MwdkJjU0N4NEZzcWR0VTJ4djdjZkQrUFpsR3JZKzNNeTF0Q1lvTDU4ei9BYzRCREptWFo3U0l4SGRIZytGNnNNZ0ZoV095WEVockd2R3NDT0lNUFpnaURHMU1CZzFVOVVsSUpKNFVoWkZBaUJibXN0YmZhRlpQbzVpN1B2VFNaUXZFN3Y5Mnl6L2kwWFRycG54VVZyNVNHam5UOW1leWd0OVFKWDllTUhOempiR3J6U3dTczdZUFZyakZNSHhpTTNLZDJoVzZlRTlUcGNNRTAxTTdKT21HT05HR2xMRHkxTW9vUmFselYyKzU4Q25oSktjR3h3Kzk3SFpxZHduU3gxcHNYK2lFVVRVd2wwY1hiRkdWUko3YXlJWmZ5TXl6RFpuZlJqT2MxM0lXZTdTYXFFdWlNenAvaUR0d25PaTFoL25mY0VvbXAxMFc4N2tMenNaS0JyNldsQWwvWjV6Ui9Wc3ZSZkhVaFJjYmg3bDR1NUdCWnBCM2drNzl2WjI0b3dlSFNzeExhWEl1N25JRldKMWJtZGhuTnNRNUFWVzZncDY2Wm5PWjVOcHN6NkR1MlM5Yms4K2lSMDRtYzIyVjNPbiswbThNUVQrSmNkaUhTYlBZZldOTEM2d1JHdFF5RVYxczVHYlBBc2lHNDQzTDRROE93LzhQaHJnZWF0UVRJOTNvcGoyZk5uaGlkdkxMTlVWOEJWWm4wQnNEbWZTUHhuTncrMUx6bkNpZnJvTEN1ajR0aWN5amg1WmxXckNzdGh2NVF4ZDdBN1h4MHgxWUpWVUgwTDNZZkRQVU5nTVkrTEsrWTkvUEl2anZObC84b0pxRVdWS3VvRU1sUmhaK1o0Y1UvUXlGdklUTFJSdVZQZXlabHV5K3h3empSMnJsenhZWFdncVhkZ3BKMU9LbjRselR5RkZxZHl1T0FnOFJwbzFldlVSNk9iY0kvdVQrNzNoNmVLK3MwV3BHZitSUUJCWklFNWRvbmFiNVhYdGhDMHNISENNS0MrdFM1Q3lNcnJhVUZHQTFPYTBIUWFXY2pEeGN2NHQvbFFDOFhTU3dYQVZhWFVuZ2lHTXlzNDVsTEUvMU5kK3hhQjN5cXdWZmFpcHd5TnBOdEN3bmZtd3ExWTZ1a3BhcmZ2ZzBaMUt1S0JWNmE1V2tGWlRNVDdjekFyc0xOdFdFQkQrNXJHVmU2RWxiM05CaEZaTlRrWjlEc1BuY3kvdnhBWmsxOXlrYW40SlMvZE1jNU1WRkZpZW9mUDk2cTZkbStzeTFUclRtUFdxSm5ZbXdVRDNzZzU3czIrbnkxNEEzbzlzSGgzbnplczFOcFVLempiL1QrcUVya3NtMWg1ckJpK1J1TTJuaUZvZHh1M0tRWGZoZXRORUhqQWE5SFk1WTVjQ0ZDaVBJZ3dacmdnbWpKSlFvM1J3K2RId1ZiVjdSUWR6WjNpN1c4UEl2YVErZFVJUGxhU1NJUnBkNG9jdTM0VWgzdDNmR3NKTUI0cEdWTTFQNnlGOVJuYzJEQ3hsaWx2SCsrQTdyR1hlUzdoaXZEWWVjbFNWWFh3Yk0rSnRuSnBCRXRocm9BZHl1SDdWNVRObU1hUERMYmoxZFdtdnZGd2hvNG5scVhUa0dNTnRrbFJINjlleVMvUTVtZmhqc1RVRUFNcEFFMW5CVUJtMXRXbGZrVUFkWFFMQlZ5a3pqNWQyM2N6aUxFbG85TE8vYWdXSkg0RWFtaFZXTC9CRjBGQVRha0lOUWt4UnR5M1ZGL3VtbDJXQTBVT0VHMjM4MUhYeHZFNXViYTQ5eTlKdUgyMENqRkxjc2YzWXoxN1o4Tm9GNStLeVZ0R2lLK3owcXppek5uUjJvZkd2M0czMTNYSUFRNHUyY1JKSVhaY2tRcmVqb291Nlc0T2Fnb3paNlhyQXkyTllJOEZ6bGpCaFBwS3NwUWRMQTU2d3dSbkxkWDdYc3hyZjVTdXlwTkVNVWQyQVA3NnJvT1R0bGRJOXkwa3RtMWp5Y05sak8xNFRNbVZ1S3ZYZ3ZUTXdNaVJ0WDNFU3YxazJqQVpsbHREMUN6UkU1Qmp6b0QvQ2UrSW1Xc0ZRVXU1TUV5VHNBU3g3dTk5akZUYlVSc0FvZndRYnIrSk9EMFU3MHF1dzhpMWpUVjVIZlQ5cGNqbFQvSnV4SFJ2NDRJaGZlY3dKeHhVOGh2bUFaSFhTaE50eUkyZGVwdllId0ZCNG9sRkdYU1VyTmswdExrV1NaaGVrZzI2TElyZkF5ZVRnaTV1L2VYMEFBM3dmaU5qUmZtMkRyQktMZkRHUHZudFRtUkE4VUhsVnJiUGV1NGNpcmgxV2NGTGo3M3MrNUF3Wi81VUxKMUdQc25EcFhkTkZGSHhNdWdkTDNpWHdUYlpadFd5em5GY1Q4U2pLL3dUZHU1RVk0OEgrVHltL0RtUHRkdmVzc2d3bks5Rmx0NFZ2YWtaQk1ES3FSSmswcjFzcGV0KzIzdER5RjhhcmtCTTBoamVRL2dwUWtBcGhEdTQ4eVZTZUhtZFRtQk81L25kRFQzcFl0RGxCKzJFNDIvTlNTK0lmN2FsY3dGL29PSmhDd3VGcnRUUE1FUEdqWitwOEN0ZlNRc1pkbitWWCtiM0FxWGhCMkhiVC9PTmtzaHlDRE83dEdDcDFmRHdIMHFvc1hNYmNuN0xzOCtId0lRaWwyWUVMOHF3cDFwSU5lRzZ2ZGpDbmNMb3hBUFAyVVNuZVROVmVDMFBsRm0vTXJsbDI3MTZpU0hoWkthb3k3OUlPQmFab0k2Z0FnblhZZlhQamZMN2czdmkxS0Q4WTVqMWdCZUQ3aUMxZkF6NnlLK0hiQm9RZ2l3Y0lOVUFFeEV6VWYxT04xK1BzRGpobUJuV0h0YlM2elJtd016QW43TVd6OGdzcUtoMUcxNEI4K001SWp1Um1ieitNcjFFNC9wZDBBdFJGZisvV2h3cDBZc1g1UU43QWcxQnRpdkY5NDRrZGkrdVEwWmNKLzBsdlhwZ0ZZRldmemxUT29JelNKckx3aGRWQ3VLSWcvSUpZaktMb1NMSGxSbDhjT1hUK25TNjgrTXBXb2lQOVNrRHMzTnJlSkdwQ0dlZE13ZDRXQS9IMXE5aDE0MExpR1oxM3NrTU9hZDV1endnK1FiSlhoKytRdHN1VUhoc1RqRDhjckJBR2huWGk2ZzhrZUI1cGQrbVlxcHRKYmowOTlkbjRLd2d6bDduUmtjR2Z4WHhkTFUvQXJmVm5TUFRpUmFsMGNDQTdCTFRTeHZlQ2txUmZHcFYxR01sb3N3N05yVmp5SEpLOEl1b21VeXpGbEpFY3pQOXAzTGFCRmZtV0J3WitMRUVZR2krYXlHVUJ0dFNoWVZFaHVidHh4QXJNNjlDUTlLNDZzMloxbHBlanVYbkZ6RFZjQ3pwUWhqcjY2T000TWVVbWM0cW5FTnQxYnczUldMS3Y5RkJKNGZVL3Y5UE16TExZT1drb2JmY1BXM0VoNG4wWjRGZ2JWT1hmMkQ2QkV3WVNGVmJua3puVkMyMFBRMkxZcTdBNFJyWVo1VnBuTGliV0VLM1JEUjZUcWRSR2tGWU5tcXJHYkJNQ3d3bjBBbnEyRVljSy9MdzNIaHJ1eEZZUVE4R2Z4MkJQSkpDTWUvM3V1azBOY0UxZzR3SU01NEpodkszTE9QeG5aY09BZnFZQm1WYm13SGJ6Sm82Rkl0aTBUbVV5ZTljazRHbythZ0x4SFU5bittTzZ1bUdkeE9aN1BOT1psS0syWE1SRFhGbXBaVndXOHk4Z3UrckErUUh0Rnk4cmFQZEZGV0RVTHVocXJFZ0VodUhZMW1PRTJ3bGcwS2JmRGxaOHV5ZXBsSDNQVjZJYncvU3FLTFlyYjN5U0R0cEFTREVja3dPRDZWK2FPdERsZzZPU3JTVWwvaUJiTElIYlhMOWpDbG9ZQ0pEWGZjdXhvNkNhTTU5bVVJVGt0ZGltNmc3d1Y0cndxWmkyUk1ua0UvMDBTeDV6UkRyWE5ZckExY3hpWnVvZzBSZnZ4bjByWGJ1NWZqb2dUd0MvV3FZTzNiQlJjNzRia0xCVEJJTFgrcHRGTWlBVzVod3gxY0JOTnkrTG1Jdmt2V0pmNEk0c3hWZUtNUjVkbjdyM2tGY25NV2RDd2xqcHY1eDZVc1huc1Z4NHhEc3ExUUZ1YmZndXMvTEx2SkxXV0lrRFlQSUZjTG9IN1ZVL3daYUtLNURGYlA5ejdDV0UwZXNSTW42dEg4OWlsQ3hlYjdXTWNsTTZ1Rlh3S1ZsWnB4V3pYREZDQm9IVUtmOTQxelc3S2ZjUnVJUUhhcmdVTWtLNU15elB1aWZMNTZQSXgwTFBtZGFkVFUyV0ZsMzRxZm1sNHN1UFhIVDczUkNJM1VXQmxlWWd0TEwySi9MS2VIR3JVR2dXL2ZvUDIvMCsvWEMvTzM3d0pwbXVLWWlyalhpUEpPRnRRU25CWE5yUllIR0VxOHdsQlNacllQOU1zYnFVZTNlbkhabmVkYjdEYSs5UzZSUmFUZmE2WWRRYURFZTBreGQ2KzJtLzIzSkc1TGEra3gvTXpRdVBoUE1xYXRaejBtVm96djBIU2dBbHV2OVJHN3N4OWdjTVlBZ0U2TDZ1YzZ1MlRPak02WkFueUlkTjc5VWtJaHowVkpuakNUQzFYdW5mb3ZwUjg1Y01zU2RLMUp5ZWtxTmdDcHo2YnpJbUhvWkdLRGgrWG5yVnBldVpQVysvS3gxY1RZYi9MLzNRTnJvaGNMRmlUMUl5K2NZK0xuSEtYZ0I3cDdCM21qT3JGRVI0Q1JhUkpFRDlkYlREUWswdGRpaGljTno5US8xNjB6Z2ZGN0pTNHdxaUJ2R3NjWDVGL3VkTXNPVUhsSmY4VTg4VE1QNnNhM2VDYjRNZndMd04ycnBOdXpwbmJGRDR5RndLSVh0RExlZjg3RUM1WC9vbnJWL2MzL09wdCsrTER2NkpRNm9XeEE5SEZqcE1qVlU2ZDFXUWxsYXVJN2xrbkZIRGczL0RXNDhXVm1xK3ZTQXJsenIvOGs5WEJLR1hTWEdnUlVUeW1ESHV0MGxGMS9teGpzd05qMk5GK3MvekVkV2k2MFJSWHhtc21TRnFxODkySEdVckRMbG94b0dWWHVUM3N5VWVPZ3NRQ3RQc2lVU0hxWHBycXBuVXZkaEZyakN1N2NHMkw2WVVscmxqL0Irc3pKWFJXamczZEZvWERFMzhKdGpEaDJJTzdLR1FkL0FKT3p6WDI3TnlKcjJMclpTaDMrWVZmNkdsUWdManhTbXNLNDNrMHRNN3pKSzBDL1QvYzBNNTJSY2NXVlpJeG1OZGlXNWUzWEhWelRGSEl6YThRVlV6eCtXZ29ZUTZXVTVhVTlaSzhXL015ZHlkc1BTaHBBREhEL002K3NwMnNCUHBLckgxcS9IdU1GWHJBdG40bkJoZzM0NDFjdnd1bzdCdTFTTlpRU2FySG9pVnFNRVhEQ2JJZi8zakxCWjZNS3k2M2VtejhHaWFJbnlCSGZYSU1sdU1XNlpTSnBvVnc2RzRYZHdEZ1o2TEVLZ0Fqbm91dzRLeVJ6SXNhYTJqMFJJSVFFVm1mNWplR2ZYS1NUL1VJMElQMy9Vc2E1WE1pVEpOQVMxYTJuUXd1RXM4T0dvTFREMFRSN1Z6ZG5UbGkzRnNGNTNaOCsrSHhuL0JSeWg4VUNLL0hYREFNQXB6djJFbHlxNlhyN2o1SXlMQ1g5aVhwOXZBbTZlcTQ0WlZRRUpaUUdaQU45ekNYSDNOWnJNL2FySXBtNW9TaE5PdzRMNnhBK2NtWkdHVWRpOGRodDI1Y05iRmRQSnp0TlNiV21FMEVKLzZHM1BiWEpVMEtzdEdLbXJXRmxSSDVjRDRGd1lwWmV2WFBjc3UzUk9nSC9KRDRpVDgzb3FTK09ocUFBOC8vT0poYnFuYytlRXlCaU43TFdtREJqVGRqbHA0bTFHcUtzOFNTYVVLL2JIdzJGVVFxcEdac2JLQ24xTHJGWXl0MTM1SjZjdjhZdDg5S1dhVGdDa1hVWm1JeEdhcVdEay9aQ0V5bU9LdUpaM3BZandGY290T2owb1pBMVJvR2FDaSs4MHlGaUtBNHpVK21kQ2ZDaGxjK3g1YWRET1FTZlM1SnBCdFpnTW1mTlhrYmJYb3hlR1hpRjV0SjRXSXNCRDRWUXorM2VSUjdvanJ0aXFwNzdsbjRzeFRqQTdwazVSajg4bVhSSE9mb1J0NFBmSktiOWNkM1REYnpjcjd4U1JNUmQ3YVlsbld1WUF1TTFlbVptdGd2VUdjZ1JtNUdNck5XOTdXTENhd1VvcnZ6UEgxeGxET1pKWDBZV0VzUURhZFJOYUs0dERrRnhVZWo0aHpTMW8xc3M1VkJNUm45TElyWkVjcDRIaVdOU0JGUFhudEVPaWNRK3M0ck5RLzVmYUI4bTgwOU13TzZiVkhrRm9va2xzbmZzY2ZxRGtPTHplamFGNkQwSjdQOHV1aVc5Ry9vU2ZJeStudVZVdkpFMFRuVExSWnMvQ28rWTcrckphOSt5SUgzMDloV3NvMmFmRjc2Z3cya1cwTjlkeXJDcHdoV2syaWJUZzVrZDVpcjNZeUhUcGpicWNPM2xIL2gzRDdSL25qamkraHNPTE84bm1kbmNRTEdhWWFUUUo4dmdNU3h4M1FaMHhkZUZYemQwREFucVNvNE1jcWp3bW5mMWp5a0hvMXNDWU03OWlMRFNCbEZjcG0yOFlKb1RQaFFtYmp0c2lVaTI2c25DYVU5NnNFbVpaLzYzaEN4cmJiUlc5U0duZzhLZUxwSDRJWCtqVTdxODBMSUpvRHVpWWpzUy9ObC9nMVdwK3hVemtISkV0TTRaRDlOTG9ISTdNVEIxTVFianJOd3B5VndNMXcxOUx0a2FNUUtzUWNZOWZmdWdzZTBHMkk4c014MW9QbmpFY2FMTFVDbWZnZTRFRGNlWU9PSEQ4Wm50UU5rSUpoaHp5L1dEa205K2VHNVlneDBtK2hnSCtEY3pNNDM5Yld0RE1ObC9mWnRnNXhRRis1WjBPZlRBd1NDOEFwMHpWSExOMHpYbTVjbnpZOUZaUG5XY0pCNGNvNk5BWUFIM0lpZk1HU2gyWnFkNCtWVk4wSjcxNmpQRVpId0FKbCtCdDZDdXhjRERlTkExVEo5N2J0ZUFFMGdOS1REN05pQWhtZlFkK2w1MzJPcTkrWnBhbWNmR1NWVVhVNnlQbUNGaTY0Y1loVDhyanN5blZNMGNWR25MYWlvV0NTZHBqSFVrQ0hNMHk5bEkzczEyZ3lEdC9xcmthUkIrYkhLWlo3TFRicXpLWGJ5Rm1KUlRybU10MVZpZE5iQk5Da3A3ejdqY1BWY2s2dDZoK210aHBEc0MwcG1GS1k5cWxZLzMzbGNTQ3pEbXo2Ny9raWt1UTkzRThoT0xMeW5ObVlRT3FWYUdmZ0V4UW5tYmxVOHh4aExUMDRqVk1UYjMvcVB5RE8yTW9RYXE4dUNTdWdRVW1IeHQyUFRLN08vQ1ZTbWh6UHNOb1pqYmgwdmFKdjBoVDVXbEYyMlZjSzl3K1g2a290YVpUNVpsQkJuckJGM0hvQld0M09mYUtxQUkyZ29vbG1ZczFpanFIK0NvalpQOFBNcWNlOHNvcWVVenBnQWQwdXNUMlRXRTJTRitOQjNuZUMxRWZzQUQ4cDE5Q2k4aVFmOEliQkQ1eUN6NmFkdXlHc3lkRWVQMUdQeGpQTUtickdRbnJQb1dBSUZxMSt0VTM4Y3l1clh2cWJTYlJUMndlM1lmcGE4UFlpMTJ0R3g5S2daSFVJcFZDNnJyZ2VyTnd3RzBBVkQzSlNjTk02VnZ3Z2s1OGozRzlhNmJaNk15V3lKRkwzRGd4V1ZzQkRVUXRWdnB2RWtxZnlPWDFRL1dMOFo0VFNDOEpjWFIxSkRpWkVodkU2by9XWUlmcTlFMy8wKzRLY2d5UkljS0UxbUd0a243ZnE4cjROSndKOGh2dU5rTXJ0YVIrU3JyaWt4SU5LQ0Q4RE53YUo4dS9QVThabHozWFB6RlFpYmF5dTlrdFBXeUpqNDY0aE54Z2FiYThzOXRXbGgrNEQzZVgrdm16eXlnNnFUTTkyRml4L2VsckFuQmV3N0dvSkFVcGx4STMyMlQ3RUVBck9QRlF6QmJSR3V3eHo5NnI2TUtBaEF5VG5LNUhabDVUeVp3elU4NURJZHk0ZEQ4MFVTQUVscTBaQUc5eDlMR2JKQXBSVFJiNEZ6d3l2b0h2UXhVdEl6N21QTC9Ta1R4WndreEVCN3FkcjQ4RkpqYXJyVWloOGVIUVVKUHZUYzhuUVlZOHJSdXBxQ1ByT213NkIrTUtWWVdvMk52ZUdIN3poci9mT1dPbVZJNmdEMkdxVi9pTklVZ2dlNll2OEd4bzYvR0o5SHhQTzNMKzFNNmI0V3BNVHNDZnlCemg5OG9HcXByY2Jhai9ybjNUakNwRWYyMmRCcHpwZ01lK1JJMFRSa2ZJbWtPaXUvVVRKMU9tZXZ5UUdDRUQ5QjRVNkJzSE1GdVo4Y3lIMUIyWmFSbWlRdkZ4VklzeHJEQ2xTVkdCMDlBbXlzQUdXVzlIenZ1YlBTL1RMN1daVTl0UVR5Y0VhdVRZRE5PTVB5NXhWTFRicTNFYm54TGJ5RGpDQkl2UWR3WWY4dzRaMmhzcCtCRnUwck5tVDA5TlA4SmpwaXlXaWpncHQxWHpreVZyZ1NsbWUyWTg1TkVCVWc4MzRwaXl4YmYwNmNEdWs5L2RFVlJvRXJuTUxTZW5pZFFETUhuemQxRzZMclJDNmxTaFkwSkNLNVlrRm1mK040MmcySVlSN0dkWUQvQm9OVHFEZHFySGRka200eTlqRC9DVHF1cFRFQzlENXc2eXQvdlY0QWpLNGtsTU9TRHBCUjhzVlBHS3hxdm9SWUZGRlM5b1ZDUXhuWU16NmZFSFlRMTJhUHVmdEFwSlc5azg1cURKZHE2eU5tNm9STEhXNDhKNEQ2aERoWDJUWEdOUml6ZFpKMm9vSXVoNjFvMnpyVGd4T2NpbWdMejljSlNzMHREMnMrcEc1bUV5UVJrSEowL3dFT3p4TytBYjFSaWhEM0ZQT3lKSHV4TTRjY2ZiZUwyaFVIeEU3NUJOQmt3WlNwYWlNM3plaEgwTVF6MjBnSmNOYlhTNGl0QnZXeUhJV1BrRzdVT0xJRjJTVnZEVkZUQ1YzVzRUT0w2R1pUUXdhSEt0RVdxSmRwKy9xWTNFWkJtb1Y3K2Z0dG4ybHYzWG9GeFphZy9iazNjaXNUUmpmRC91b1JveVIzcjFTNzVKUnh5TXRCMWI3L0ZwaHVDOWp5N2JyYi9sYm9sZEhrSUxSK3d3L0tCWGJjOVpyMlVxWkJDQ3lQbHFreWtBM2FGdjhucWQ4TEM2WXZxZ1NJaGdDNHdLaFlCMTdOd2NBS2pXSndyRTVYWGc5TnFZVDErWDBUVktHTEJEQmhBVHA0cVJWU3RibTUreHhDcnhTUEtMODNwVEMzNXV6ZEZwa0lUaUFnZ0pIM3ZOQVdYaFE1Tk5UKzVhSm8xdjluVTRpUEpzQ3ZuRDhZN2tOMU9nRXg0MDFwanQ1Nkk0OFUvbmszSmV5dHRSKzE2NDNQYWt1ZlZBWXFqbmxkRmF3WjVMUVRmbFIxZEdSNURMb2szdGhhaGdyczVMd29oZDRRVkZ5d25IMENValJFYU1RQjZZOTR4S3pKRmJqL1dXUVFKY0hkMDRydVRqVlEvZEdaQ1llRjhSV2JEQXV5R2RhZkdEMHY1ejJHRGJiWXk0M3dtWlNlSERweXBnWGt4OFhIOHVOR3BMZ2F6K2ZSckREOTVSU1FtUGk1WUE2eHN3OHdYdlBybG5SSi80TEt5Q2NkVlNjQWpPK0NhNGE1RGtLMFdxQW4rcTJENTZ4VmVwZ08vRFJ3U0Fyck1STGlNZWxWenZxVGJoaWkxVHVCNkZJK01vVFE5YnpzMGxiTE9QeERTOWxxbnhPUDNjaUtXd2h0OUE3YWdiampxdVlrNGxCaE1MbmdON2J2Rmp6Y0ZOcHBaVytGZUFvQXVwWFhJaVUzVXFVTTY3aG1hVGNPWXhydzRGc0NGeEg4T0gzM0ZRVGdUaDBmS0xJeXpobFpLaFZnbTZwdldnNWlUM2V1VmFxcmw0bEw1eDNjOTZKVXUzeEh0blcwdnJGVUF6c29RWFI0cjZId1M4Vk1FRGZXOXJYU1FnUkNFbThZMWN1TGxGVUZ2MHY5Q3FUeFZmMDVWazA1eG5XRlpaeW4rZ0tSZVF6czV1d2JubC9OM0V3VmJRckFZeTVpdGJWQVdFeG4rNDNsd3BxT2taazJMUjAwWFpKTDBuT0lScUJvMTltWlBhd25ldlgyeC82VlNYajU4MGM4Y0tGWXNjVDl2RUZmZnRTZDBpUVBOSEhucjlEaWhiRVlHVWFJdksyWnFlWWFacEhWcDdsOGxHTVBldlUzMnJjS2w3ejA2SUk4SGNBSkEzYkJlSVJ6a0g3SXdURG5GWTNIVXhxN2FWOVlQRXA4MnQ0RXIrSGpUNWk1alBIQSs4QVUvRFNueTF5Qzc1RjlZaTlseXYyV3hKMlIvWGY1dlJyZGhDeVY5QVRVcGRWQTEwTTBHV3YyZ0FVZzhJS1hZVUk5eFlQc0hXMWxHUXR1NUF4cHpsUkswaUxYVmV2OGVHRE02VTZhWDQxQlJZTDZIOEtTNmtncWJNdlVtTk5IK3grWnMxTGlpdUxTN01jQ043Ui94ZnFxNGUzbWNCdGNqTXd3OThHTEVsZXV5dDdwa2R5bEV2aXJvY1NDcmlQSnJBK0NBc1l0Y0N2UGtLWU5uNmVENkRZaVNpZGlyWVJ2dW5qejUrWUk4RFU4ODlaZS9rZ0s2N0NjZW1valVHOXdpVkw3S0xqQmgrcjFCQ1RSaDUwOVVsTVJKNDIzVm9CeGVSczRGVnJOS0hnWm9DZG9ZV25IYUc3Z3FuRldEVlUvQWFvWFhRblJiQXl1SXNCMWkzSlhvbDFvSHREdnFnL0pFWEQ4aFRYcjJnOG1TSjM3SUgzY0x5b3hmR0lPOFdHMEJXZTQxMlBhcy80OE1SY205Z0N6R1NmcVVLNnNXZ1A0Nk9FTjU4eDBUb1NOVW83S2hLT2FITjRvbTNpQU9lRGx2MmhyVnBGM01qalNJMWhiRTZpUjlnejd5YTU0N0NvZkFjL2JJYnoycHNmbisvSXdONC9RTmtNMGNOL0lxL3UyZVlVQXJtN0N0WnBXZmxtUTlKdlZaeTJiUWg1MkVrNzIremRHREV6c1JJaFdHZUt5SStmeDFtdS9jYnhyWGY4YUNyVDd0OWNwYVpCVXdqZkE2ZnpWVWtpZXVML3ZIR0FFdkhEckxPemdNYTB1T3FiY01McUNMQzJZdkRJcU1uS0w5ZDJKbitwYkYxbGR4T0pqOG1nejNsSkE4d2pHMDN4TVZxU1VkaEFEOCsySWFqVy94K1p1b2dzc3E4M2RQQXREa1VLYWpwTFZ0TTI0cko1bUNLVVBHeVhRc2RuOGdOVDJFRG9qckhQdXF1aGJISmZteTVzTnhuYy9iK2VCY01zcTV0N0tsWWpZQXgrUzd6UkJUOHFodDk3UEQ3Tm15QzA2bi9sblU4aHJzK0VSdHRmYXdaZ3VqcFhzdHB1SUhOV1p2c29RajJTZGVja2d4aXZHTUNpaVg0cEVmaXRmNFZLWVdlaHd5NnVzdFF0am5ZN2FDaGh6a24ycitSSFBrb0lBNGhsSTFmcE9yRUtlYVJ3ckNNYjBiR29JYWxPWFZvOXZPWTZRbWNnTTR6NmlvdzNyL2x5SWtOdnE4RWhKWi9QVlJtVmxDVXBRSTc5VHYyV0tLVFV6alRaRmduWEJZaUt0cEhPcURxTjBLRUxwUXNZSTlhMkFPZ0tyVlBPS2VJREFLU0hWTlFnYlNBVjdNREtTTlZ5ZGtNUjNId2c0TWFrMDJVK3J2RFJ0UUJQbUx3OUJEdTEvVUpPaERQVkhmU09nemY2Y0x6U3lkSjRJRk1DM0w4VDBiZ1h0SE9jSXBkWXBwaksxbEViZDFMZHJ5RU9PL3cxRTBxY3BldkNBUHJyQ1NTdEFwTDE4bzBmd2tobUwxckNRVThPbE4wUVA4eGw4YWxQRGw2WmRETVBvZGZwUkp1ZXlsaVRKSDY1TnlOT0ZyeXorQXBqYXRXNmRJTzVFakh2K2V4TnBOY1I5d2JlTFJwQWJaSWVvRGVxRk55RWYzVldaOHA4SWNiaGF0U0xlMlpGRlJNeUd1RlhBMzFIWHhGbDdraGRVRkdnK0VGWmVPVnpLZWFpSVdPOGtib05SenZsTGp1WnpqT0JidEdmcm42cnQ5b1EzR0wyL2o1N3dKZXArYXVxLzlFV1F5QVRRL2N0WmhWdUlyWUtZVFQvZVlRTURwZkpIUjJ0OVV5UVFLVFNjSVcwazJhNDF2cVNjaTE4L1FFakx1dVhvQVNmZlRVdTg0L2MzMkh5elhhUEhYL0crUnBrUS9VNEcvVUpNVUJEWkRhdE00QXNmT2dXbkpNTStHTDAvMUp2OXl1aEVaZGpoY0hVeG10OHhzSGVhT1RZdEVyNTU0OUZ6WVM2aE1obW84em9ZL2QrbkVFWjdLNVpXY1Q0VFYzelNxdUhjaG5rNFZuOFMvcWh2OVl1L2NZMS9xbFRvTDJ1ZHFockhsNkhyVFJ3cnFJcXVjODJFaXJISEhzRGdiZGlNWVlTQnJNdldwNGlaRW5UZmQvNTJpeVdzYVVFWkJxazRoeS9VRXV6VnpTV0dXNllTc0FmU0pFOUNPLzBKMGhuRTBWVXBBSTBxNXladU9UdU5vR0RQQTAwejRHZUp2akw4RDJ3MmFIRlRvY1lKTWJhZHd1UFpud3pEQUEwdm85SWQvRVAwQmQ1WlNlazZaZFkyeFQxUURkSHd4YmphT3RxUXZ6Ly9mdlM0eEpDREZybkYzbzdaQXF3cWFUcCttS1I2M2NSZWxzWklJOGRLbjJQL2drOVV2SEU4bEt1cHJZckpOeWpZRFgwdm9za0gxYURyL3RMOHhpbkV2Uk5ycXp4ZVFyN2IrcTNjRENkbjRmVnFtN2oyV3VEZ3Z0aGcwbko0ckl3ajNOZDdSY2FYbXE4Y2dXc2FmWFJkNXl2d3JaODBSOStUWW9adndwcS9WVFRZUHdHVGNnUnRtWlFBSmRnbUNTakVCQ2diTDA1cFZHOVNtM2JUYlN6dkdpaVZ1VDlzTmZEM2xrb05TMHgrbW0zUTlRaWNJRHFMVEp1VVhsaUNTdGRkOWRuK0l0emVFRkVTZWJTL21idW5EQ08zUkNua0ErbjFxL3dVTkJNOXBOL1JCVncrWkxWbDF2SUVKWkZCeWxhOE54TkxaSlBGT1pTS3JPNU51WTErWnMvUXhTaWE0bWhSSHEzNkplTXljVHpFL1dSbzgydjF0UktvK0lIYTRrUzlvQ0c0V1Fab29vM215L0hzTU9UVHUvQTloZnc4ZG5yVjV2TkRNQzRBck5hYWNTbTJVd005ZE5pKzNyTnFtaEczcDVMTHlwc0p4Qm1VbldldW8xeVVNb2JqVEcwOXhGTVNlNkMzZlZIYTJ4dnRvMDltTU1IUzZoTkIrTllpaHlhTWRQcW9jT3grTEpLVkRrakxCSk9tQjVlbDZ3SHpVNzJyb0xvaW94bUFram5Ia1k1cnk4MkxiYlVTUjJLOHpzTE1VYkxnNTFIRitzNmxwNDdJNmdrb2wvQy9BY2lidVV2RXRKTHJCRXEvak85TzlWb2pOdGJsMjhkZi8wVWJzZ1RDeXpHcitJZzRQd0JtdFBVKzVXRVM4Q2pxRFZMUHhxc1c0UVNzaHpESk1TOG4wVTYxVXNhd2MvVGIvVm13SktuZXJONFY1a0RTT3JndmpzdS8rWTZLSWFVM01zN05DRWpBcUxHNU4wNEZPbktjaDRKeXpOZGlZK0t3L3dwdmRMUHhCVkJ3RGNZZmJtRUVlTEtUa2x6dTNyajk5aUFKakdWTUFmRE5TclhVSlRVNnI0VnhGU1lvY3ptQThwWE96QlNvanZaOVNwVlZiTmxEZzJTYm10SzNJNy9vZ3VUb1Q0cGVCYXBMQ0JtM3haTXpMODdidG5TVWwzMG1NNlRGSW4zYmdYaWxjQ051aDBLcHNyOEhTYmN1RUpOa3Njc2dPeC9VZEdySWxpRmtYMUlRYmxmQ05RVlZKbm9SM095SDJkK21SNVZhOFJGKzFYTXBIbG93QkR6anNBY0dtL2dXSXVwd2VZY3Z1V0QyNDRreFVoUXRQaVJmOUtjd0lSSmdzRXNaSVUvV1VFa1lnUTkwMEtaWnp2REl2emJZNHFtcWIzU250ZldrblZaMXJXdVBLTzY1ZTlmNHlYZTZCL3ZvbUw1RDVyQ0xiZ1V6SEhVVXlKQ2xiVXpON0VGRC9XVW9vMXRKY1VqdHdKVkwxZmYvR2pvb1p1RWd3Ylo2eEozdFlJQ2hsUHRDb1doNUFSekI5ZUN1dTEzOEkrd0hDMWY3TnBVMjZLYzRlb0k1YzBuL1k3WlRTdlBGSVNxZ1FxUVhGL3I4WEtuV3BlUThFQ21nOGFFakZOenFvSkVtZ0JWRE5Gc3BPN1FsOFAxcHFGVGt4empzSEFaMURraHVlQUNzTUJCTmg5R2VPMXJNMjR3aGw1Tld5OENHRU44M2d6WE1rU3VDeFZ5Y3JTNW5tUjM2WlYzcEY5aGswOG91MDV3b1VyWnVLeFVTMzMvUVEyaHpBRmtlT3VMN1RMSUQ4K2FnVjFVdmlmQlIwTEwwWEtzUzdaRXFJU3BwWjlTWjFJY3R1MllKSThEVzJMWmdCSHM0U3ZSd2k4dXI3YVdmWVM5RnVQSW9LZXd6UWxSbnpKT2RqTlZoRWt6dS8wOXk2cUVCZ09VcmRkRmlVL005dW1RM1lFR0xodnpWeU1kMUlWWk9lSk5BdE1MdVFsY2E5ZHJFVTlpRFRwdXYxUkNXRkZITEJkZ3NVck9PRVU2Z09vakFvZEJOc3hmSWVKSWNrdGtNS280S282Y3F3NTkwYVJVL0VOclMrbXVLRmg1Zms2c0wzbXNTZ3ZwYTcwdmxsZ1NIU1BZRzBnZUVBVW91c1V3MFRKaWpsVmhidlpSVkRtK0cxMDlIaTFFamJaM2RaSWNDSnk1OFFIUWNnQU5xRXUvRWlIN0RYTEtOcnVXNklqeDJac0c0RkxxNWVXSVlNTmdSR3hpZUZvdWtWZHMwUklNRGVGUjFSamgxR2ppOHdINHYvYWtGTnVBaVlOaENqSE9wblBtRjc5a2N5dzMxVjErQnM2TnQwWFdQT2tCS1gwWUdtR3lmTzFKYWE0SXRJU3RiTXJZZi9OZlJsb3RhUlBUcnI2R3FaLzByT0NjMjRPaDA1NGNHei9BU1pyV0grdTZhcTBXWllQbTNma2FjTUtJVlRVL3pNdW1KMmJqcytyZ0o4OWVDcFRxUzdURFk4MnA1d29EbmZKcEJ2ZGxnZE9LTksrQkcydDl5cEszM1dzVWVIRC9DSlc1M2lueG83bEVJNUV1ZEVLMUR0bXl2RUk3N2pOUWZ2Z0RRMWd2Y2NoamtVWGpPY0taeVpEbFhXVzdiWEQvMkdCam9tNTNOWk9vWkRFZFdBT3Q2QzMzMmIzU2tUMWpvMjRMRjVHZWZLY1d4a3FZcjByUFpyaTJ4NlJtUEFQc0RIVlNXSS92ZkZYV2ovZndJYkNxQ21qQ3JXajlIeXlvaFdmMVFCTWV5dGhkVlVZUythNFlQUy94NExzeFRlK2tmVUNvdlhhMG4rT1ZicDh1MktOTDM1dmFmbHg1QUF0L1NFV2lqYmU1QklLM0UyeGZKVDNhL0IyMWF3R1VSYjlzSUZ0Si9ydUg1L0U3b2hCUk9BL3Y4MHloeUtQSmtDYlVRRzZaNTE1TnplMmZ5OCtYampSdFZEYW94dWRXeHQ0N2hyY3lzODFOZkhRTWxoaU9HYzVjaXBHMTZMUW04amJNN09jY1YvVEpGdmN5UTg2R1JPM1lEalZiUS8xOXVrWVBEcUE4YzYwZnZVMDBBWUJJWk94UWZuODlmbE1vb2hIbDlhdW0xaXJ1MmlYbFh6aGVqWC9KR3B2aldpOXRJY0VzVVhVVWdJU3N4WTQ4ei9Hd3pNRUZMT1B1cmtzTEU4bEFaVS8yRmJYekt1cWZoTHVYK1Irc2hOWS9qQUhPajFjaHg4SFd4dENQeXBpVllDOFhNdmtGMmI3MXZzSjhRZXBTbzArclR0bG1vcmY2dVVYR3FiRW8xeEpKMTlZYmtBYjAwaE9uYkFjRkJaMmdweUdDYVN1OFJabEpMNVZQcFN4UEgvbTVSK243STlTV3c4WGowYU9kYWMyTncwOW5YaHNMWjI1K2V6R29CL1VaYWNYdDV2cll4cUZGbnhqdXBRMTlJcU16Qnl6RktweVN6aFVkSjI4VU9NZTFGbk1hZzNka3V6TG5Yc1REQXdsM3FmcjdyQWdlMnBnZkhhOTdlRnIrOHRrOHBOSU9ocVlFZzZtNEl0N2dHRml6NDJQa2dJYWFMaHJQS0YvRFNUT29VTkJld1QyUFdyOWFqL043MUU1eXZJUmszQ2pNMXhaT0NRbGk4cU9nVUgvczgwQytTditYNlp2aHJhaGhuK2VSTndGNjJNQ0oyUmd3Z1pzSzdsVVlpK3FlZk51YjdZMzlGVVdOY3NwczVMeHRWZTNLYjZBOGZDeVVyQkpEZi9TaVNsZEsyS0pKL0ZlQkMrYzkvUi9MTytNdGl3dWt4NEtmcHoxb1IxR3FkVU1tOWVaTzJqS0hvb2lUYzBoKzMzcFB1aGppUEZGUGhlWmhXMGlpdkE2NDROZ2gwa04vZzBjR0J0VHpORHdhdGY2R0p4ZTVPdUxJQnJhS083UjcxUE5sRzJUTUtmRDB4QWdPR0xaTjRLcHIweGRsMnBTVjF1TjVsbmFFWW9hemFIMnVTUmRZcWNjV3VodDVxOEJVYlVPemt4KzJib2pjVDZTR0h4eFo3b0dVZlZoYmNkenVEOUoyUGlPbkdQK1Y3bklMamhBb2VtLzhVOWRzeGx1RjFtVWxaS0p5Z2x1dWVNS2h2ZHIxcEllQ0ZEYlJSbzB5Y3NIZjl0Nm5hbWN0QysvSzhMcnlEaDFScUhMYXVCNHNrOU1oWEl4Si8xUjQxdExVcXVoZm1SRjRENngyQU91VjBBUE8yWVRjMTYrSjJCLzhmdDVQK0pRSWhhN1R0bUNTUlR5OVhWRGs5NHdOZS9QcTVQQ0RrRk9kdzROM1hBdUNhbEtKSFlDQWs2b1FUYVYzVmR3dmxlWkFqTkpNdkc5czI4TlpyTDZmK3FxRmt2Qjg0RldEREFldjNoc1FZU0FaRytIbUhWVDA3a29oMjB4R3NyQUtGMU9kVEF5MFVESnRKekpnejcyaXVudWNPS1FUY2lnTExoUG4weXY3WmVXeDl0dVFlWWtiUGJkS3ZydlNJV0d5UDNod3BHN1RlOVFBSWpXM0s0YnZkZGdBdm1zVzhTbGo1KzN6WHFTcHJ3R0wvUDdwVzR0dmtvM3hvR3RXVDNPWjR1dkR3QzcwWTc0ZHhlUDh1bHE5Tkx2SFBuVFZiVW5ORW5HTS9NMm5JeEtBOENWMi9NeG9vNmE3VGJ1UXIyc1EzNUtKMlV3MFZFVU1JVHlDRmdOVjF2NTczZkQ0SWk0bUpLdXdvY0k5a0tPR2dBelRqQ2VVakp4N0dtR1BSR1UzVkR3WWFBNzdYdEtvZ080VmRTd2x0Y3djVHN1QTlsVXhac3RSMDVqd3Z4VXRHbjUrMHN5TmhUK2ZhZFJpUUNoVFEvMWt1VzVzcDNoVnI0RW56NlJSS3l6SnhYWXJCZ0pWMEluaVJVU0E0NUhjZTJiMFpZV0FlV1dsZTdpVWY3KzFzMC9EdXQyeklEZFVVZFZLVitLZm4xalZFbjRNWTA3ellPTE9JU3gzUEMzbi9CUEo5eFRwMC9RbEZzUS9jQmQ2dE45QTV3K1RTVTZvaXNaQUhGRWc1eUZiKzJrN0hzUjJkTThPVkxQOTYrZzFaTVBhTDZvYzFkTXdLZFl5STR4bVUvaE5EdWRGVEhCS3dnanU5dW9CK052WnZrLzV2eXZoZkNGYnB3TlVJS1YwSUxnQ0YzV2dxWjB0Q01yaUNnODJ1UlA4dFBaY3hybjlpUERmaDZMcHhLNm5DR0J0QmUxVXI3c2VpU2lXaDluTUo3aElrZTJOQWRndXZxRUE1VVFTZE90MUhRdkRYM0pjdkFIQWRGSEVKd1RobFAyUVhGSkpLSXpBcHQ4ZUVnbTFsblVoeWJzMlN3MlBKYTJMdmJaei9kN0F1TEUySUdiMDB1bDVHZjBubHdGM3dlS0UxZEhHclpIRFRSdGVpQzhTNkhSWllaWTRwSHBVKzJOMUlyM1dIS0pqOFZOUXhCZDgvYXNJYlQ5TFMwK3BxdURUanVmNTBCRTI3TzJRcURLL0tJVW10aUs1Znk0aWhVTEdVdjYyTDJnemlFZUkyODF6QVc3OWo1Rnhwd0VYZ0hxTnJkNFdjR2N5NkJSUGFhVUVKL0NJbnZQTWk1Z0Z4WXBJYWFMQmtQL3BzOVFuQWhQNFptTXNYVVV6aklaY291Wis3bHRuUDd1OHY1aGpDNzVRU1FnWHVBeHV2ekRiblRPYVhRWDFrL204a2RXVzRWUFFYL1R5Y29nZjh2VG9kQzBPUnBCZU1YUDc3UHVZRFNsWDJVcGF2R0NMTmc3d0kvM25ZU3FCaGFOaGt6UHNwV2w1Q0JBSjhIY01rT2NXdEdPTGthOFVUWXRiV2JZbzFtZkh5VmhNV2h2TlpEOTB2amR4SjVKdVhCZ3lmMjZwNm5IcmlsbTBJaHBFeFdrb1BmaFZHSUoyN1FuYmkvTGszaWpKWHlKRnZXLzhzcGh1dmpQMmZzVXQxY0piWVdleCtSZkNNektRcE5TTE93ZzIyME9mY3Z6Y05VRGNvaWRROXpXUkk3cnZtY1JNbW0yMFR5MEpxQzd1U09Rd0Z3L0k1L0QwejBsYm9wK2x4STJFR3ZpL2VVWE82SGg4UEdEMzgxRVdobUVmOGEvaWZEYmNSamZuY0pLTGVKdmZNeVRIT1AyNGZnM2xGVEl4SENDL0RwN3Jic2VrUGJEQUl5b2Y4L1FmQTVjZGJic1FlV2ljZkRPSEJZWmRjVTdNWHlVRG1sRWtTdmYzdlYvUWV1R1MrbkVKcFdZWGtLRUN4MGFaNjE1T0ZYTFJET2FFYXNsL1dXdnl3NWUvTW1PeTIwKzdZSmFtdFJCSzBFZkxVQk5saHlDRzFZUTAvd2hjd05Kb01WZ0dlTFhjMFY3ckdXakx0OFNMS2hJVEw3RHJLNU1mcDNzM0tKenNrL1hCNmtOZEE2OVB2NzRPYUJiclpLaVVGMlloNkt2OFhKcTB0d255Qkk2RlNRMUlZNGxKZkptQXNibDl3bWJhUWg5dHpXWUtEaDJWT0lkQmFNQm1RMHBya3dQNUFiREdpbWJrTU8vZDVaQ3Y5SHNSdGdTb0JMUENLSGhKbnVLZzgrUDllR2VKVVdkMzg2NmxOZ3NjWXo2b2R0MlFxdjVWcENWNitEaVhLM2J3QzE5Zy9DVW1FOElLN251WThkd0FIc3BNQjBnZExaOWFnWG5YQ29kOXZVSDZJRjZmSVU5d0w2SWhTdVNnaHFveEtycWxwbSs5M2FMME1YNEp6d3k5amNyK0lWY1ZnRU5OM1VGS0UvbElESjJCZHB5NG41cTJVOU4zdlk2dlYrSkdpd1ZrOG9VelZkQVZDeDhTYVVwcUNVL2oybXpvRnZMQTc1MGFLL0I0elhka1hRN0tJRDlZbFZHSm4vWmcwcmVrM0pKcHNJQk5vM01yUXM0bXZCYmhmbUJjb2M5dDRpNCtlRFFnV2ZvbGsrazNiUVJ5YWFXTG9oWm9MYWN4ZTY1ZVJZOWMwOWZnaGZyeVdxcnZzR3FyOVBUWUV2NERjN1BNQTU1aVN0WnNyc0wxeE5nOVNFM1MrZzg0VzZjQWJuU0hobnhnaHNMN0NEVU5nM2x6MWJPL0h5OHcxL3BTNUp6bkhaR3hOQ1NiNW9lR3RaN3dCSEdHU3dXNjFhOXVLZHhETE1hZGNkcUlEV21EejFXZ0dJR1VWRG1MTTlXSUd0MTgzUmJHUHQ2V3IxVUxJRXV5YnBUTEZaVVJYZnJnRERCdXZESUJNTW5TOWxZNVRnREVNZFIxZWZSaHRFazZoWVhHY0ZUdURpUnFnMmI1Vm9jcm5YTlpOTWxidmdWNWpXeEhFT1Q3S3VkQXhRY0JDMWVKbUxaS3lFazc1Z0Zva0k5OWtnZVlLTzN4Sk5GeUEycXhvaVhFQWpnOTJGUzVQNEU3QTdtLzNwVmIyQThTUHZxUFVHbzJZK2poZ0lWNnptQjBvT0QvWFoyM3BjQU9RVjN3M3h3Tmo1bVgyUEllTmlkRFRSZXhDc3UvVGVFT2VKZXJvNVpVL1lwQmQ0S0M3Tm0yMDdIZW1wU1dpTTFEUy9nSWZXWXJuWWZ6RFZnWjhSb015WWVMdXN1eUNyd2hCOXhSUCtiM0VFbTBDNXBNZXc2WVZ3NjdaWTIwYy9TL2l2MDdqSGc2Qzd5Ujh4eS9wT0lZeERscFNmR09QVXVrK05tMmtkNTBLeTBBRkM1WC9jbTZMVHVOQmM4ZmkwSDJ4TGhlMjl3Rm5wTHZtZ210UlkveFNRcnNrcG1JK0s5dnltWlBmMSttRDByT1o2ZGIyM3BOb0dRaW5tM2hjNFhxS3NnS2hrTVU0cDVqM1I1YnNYclduNFNndjM5SllmWmZTWjBGOG5OenlROFJXNnJycm9idUpDT2piZHJJVi9pUU5uVTFlemdqQlVlTllpU0pKVDBKMDNPSCtNVTd5LzE0TFcreUhYZFBEK3pLMDdieFN3TEVGWnRncEM5L2toekp3dUIrMzdKK2tSakQzRlQ5Y291VmJFV080bDg3QllXcWJPKzZwVXl2WlFlM1kyZVlSY0hwc3pzRnY4QXlhVGtNQzhzOVo1M3dmeGRZa0JWZ1RKOFhjNFFhK0tEV2psWjBGK240T25DR3M0cmFnT2E4ODhDcE5tRFBDR2F0dEFJUVhBWk1ybFJ0emZZWmt5aDFSQmY4TjBVZEg4cXNCaU9GQ0JzcVlieEFRWk9LM29uK1lhQXA2OVpQRmxlTE9EVDVNZjVpZm5ZWUJSZHVEbUlkVTlIMVdOekZHVFZzcDNKOXNiZzB3M0I4R3djczRtM1h4T2QyNWxXMkRBckNDY0VOK2ZRV3VYUE0rMUU2cFdDbmhSVGRwVWE3ajFWZ1MyT3pDWkoyZjdPR1A4MzZielZkK2Q4bTIyOUVEYWZEWHRkUFBQd2FEQVUrTmR4RnY2aHhZS2FsdEJJVElhZXdPYmpzYVE1cGlxN3p2UnYrQTZ1anF1dW9vUEltWStESG1jVy9venVua2xXOEo3NGFWKytCUGxoa1VTR3VKRFRCYnZ0NHlWcy9ITmYyaVhGTVdGRGJlL1hwRW1OaExobDl6OHRKeFR2TDJnZXU1Q3ZMR0FQQklyN3RMS3VIcnlqc3NVcnZOSUplVXMrWFNiMDIyZnJ4WHN5ZmZsbkdQaTNIS2pRZU1icFJyeDFwaEEzcWEveERRa1VOODdjYjJ5R0I4RHh3NzdOMXNqZndpdGtYbHJpMGVVMHBVWXVHWDNCZlphNCt5TmtnOUV4UDI0OTVCcndHVjZQUDRiUDJ4Zys1dHpnWEs2c21XcW1uY3p6Tm5kSm5OK0JVa0IzOVg2WVZVWDF2dm9MUVl0WUJXaTduRDJ5SWY4TlVHM1Vidmg2amFpN2lGWXlPak5RU3RIZHdoNnVXR05FVFZJNjJSTXgwTUJzNnN1WGxuTUZYTlc1NUVsYS9CZUM4d0plZmhpd2JSNnpZMkdZMzZaVHhRRXFlNGd1czFNc2x4azEzQnFpNHNHUEJoekM4Zml2TEJvcmtkY3V2bXErMGdSVDdyYnhKZnpudFRmc1VseWoyZUY0Vlo3TC8rcE91RlZzUUdRZm1nU0RLZXRtY0ovNE16SjJjV1YrNGFoYUVxY2cvSER2emdjcGxINDJIc2EyUitNZ2treXRSNGhTWFRuZ0xMVXVFallHUEs3b0ZBRGhYRHJhT0xFYmJNSDJXV0dhRHgvMWk3NXJBeFBGYjBkbEg0OVNZNjVGZmIxU2JUT3dSSkd6Nmc2SmN0bTJCTXRQVlJvMlh6WlUxM1dxeVRBYnBkd3JiWXIyTjRVZ2RSdzV6ZGc1b3JybS9qVlBHbGpwZzNWM2N5eUU0QTRrQnZGaDZvK0IrVm9vRk9nWjVyMld5WkVkR3RtbENpdXFIQWlJdnhMVDBSZ1JxeDh5M1hxWVNRTVFwK1VkbCsrTkZ0OG5ZR2tTclBmcVFaS3JiNzJlRy8rUUNuVkJZSnRnV2g3Wjc0c3c1dm02RXNxR1FmZFZIdXRDMW1FN2NCUUUxZXFCb1N1U2tLSDlQS2VuQStId3hrWDl0dnFQMWdyOENRZWMvN0NjQmxCeWV1T2k0c1BTRDIza1A1dlZaZ1dVMDgxTk4rUEJ5bWVmSjB5VlM3bjNKNkt3UmUvQWJzNGVWTHo2dkFZbUdVSmRCYmRwTDB4UDlRTkVQZk5oWldTSzVVcjF0ZXo5cklUcWJtcWF3bVJjMWxzTXMxaHY4NUpwdUVrcEJuSXVERndKWjM5OFgreU82YnBsM1l0YlV0QXRJSmthbnhGZjJ2ckhkWDJWUFZoWmN1N2h5V01sK2RmOEczaDZOeDBmR3NuQTBwL1BQMXA3WlhCL0w5MS85ZkF4ZzhhaE9aQU9NTytTemwwT0xkdVhvazFLYitnd041NEMvOUluMSsxSk5Xb3JZQllPSEZ3OTVGaXhTbFM2dWwvVkRxWUZXc1ExQXpSZEdXRkthOTUrbTdTVGNZblQyeFhyaXAxckN3cDcrRyt0MXZna1NDekxRUjFNVDUxTHdJRnYxb3hvSGt2UGJXUmU1TkNjRURvaGg3R1FSSVhTOHM0L3pycGtoSHhzcmNHaVB1dm9DYWdJck14dlZyeG44aEMwdFpSbnVtYjljNGV1azM5YytqdFJpa3BmemQyb1gxWDlSaURHOWY5UkoyMGZ1d1BPRVFsVjk2aC9TVGNmVEVPRzRrQ0ZxczRMTmpDR3hPOERzbzIwLy9NL0FOWENaNHZGeVViSXFYTC8wZkI4cTkrdmxnaDB2Z3VXcUxNNWo3Tks2Yy91Z0pYUHpoZEM1am4wOTJmYnZuQXU1eTNlTUhDeHRhUmhITHVWODdnbWtaQURma2RIWlIxWnhLampLUUhFS3VWOHFRR0ViVUswVW1DbnltTW81cnFnR2tKOUc4em1oQXhyYWtVN0hURTRiWnFnbjRDRThXZjhaTS9NOTZ0MUMvTTZXN1I4UWRmMGUyOFA4WHdDT1B4Mm1wYWIzZmNlK0hWRFZZNDI0SDBaVndCMGwrYWFIVGdnMVBGWmMzNVlsYlpkWXpOT0hUMnlpMzZBUVZsS3c0Nkdad2hLQVFsWDhRY3lRT21vMm45NTdOVEdwa1BWb1ZVMWkvNC9jdnY5bUJTZmtxbXdtTGVRS0EzMnNxb21vNTVrcXRnNCs3R0FZd3NDOXA1UE9FYmZZYkZMbTBNOEQvVTk2UjJiYndjMnJWQmZJQytMZ3JRMW44QlhuM3FkUlZ2U3Jqb0gwZ2l0NlR0em5TNHpuUUNTd0dNa25BUWVjY1NoK1VEcjNwYkRTQi9yT2FpN1lRWGMyRGVuOEt0VjQwbGgzMysyMDh0Nmw4TkhSYUNLdzdQYjNEMFQwdzhaWnEvSjc0MjBtempQYXpEWktaT0VZSDB3ZjZsWHBnUWxDdExDVGh2QWZpa2xxc0UzYms5aHRFbUtMN0hpMGsyUmhCdHRLbXphUUxaUGZGVjFCWE00ME5QZ3FxVkQwSU8xWURlUkJrV3AyMjhlZC8yYmJJOEVjWER3KzFpUGdWZW1WTGh0aXpKRHpIamdOaXA1RTlTYnlRUFJ6d3V2amg5R2x2ZVNrS2FLZk12L2MzZ3luakZSck1vZHdTcUlSZGs5R2xjRldZZWlUdDQ4VzNMaGkzQWp3MnpvMVFvODZQVEZRdTViT1ZxTWpiTUg1QXU3T29tSkd1amExdE9CWTNFZ1A5QzU4VjN6ZFlUN2NiWUZBdmE0Kzk4RFkrUDBIRThSSStwT2VkYUswdEdsVXR3NDNjWk1zTTRFb0pzRTBRby84YVUxS1p4YlJKV3gzeXk2bUhod0NqUDFyOUxiOFlzamVGRTB3SmdQR3lldjFBUW5HMG9HSGRLQVl6RjV5ZEdjWDVnQUR0ZDNBYjVadkdvZ3NOWHNiZXVLQU1oSEtlZmRmSkxZMndQRlViUjk0cDgzVThhN3J5TWp1Z1hCaE5hRVp2WWNrQkR3TWYvVCtaaGFVNEpJSGFOeXN5a1F0amhjUU9DMG0zV1Q5RFNVby9TN0NmelVnMUFhdUhYeVUrWlhjTnQ1QlBlRXZGSDBKOWpqR2luNFhoa3VNSUx1RjNhZHB5VHc1WjZrd2FsLzZWZVB1STBaNy9Qemg0ekU4a0lzTGhlYU4rU2t1U1NwWVBzcHMxYjhGc01TeEFWTWhIY0V4RytlTXVOZU83bSs5WW5qckx5U05wclcwNDRBZ0FQRURMeFJEYkdZVDRFTUdHWGZlMitiR0ZCaE1PazhpQk0reldIWTBwTUhoeDRXOXhFWm5aOW1vb3VnQnphdCtMQUJnUWhzZmZPbmcrMjM3WHB6Y3RlRWJsT1JzSFBHdk9UYlJiZFl0TzdUTUVlY3kxRXFEUWtPZzZVU21PRkxpV09rbEdSam9MTnA3MW9lRkc1YjBjN0RubDlsTWI3NXpNSGRXZlJtYnhMUWVMbkJGaWFMVGlHUXBjN3l2UVR1WXEwUmNQeTVIditPNGhRSXV3MElFZnUyUU9pdTA1cTNjUCtlMHEvTTBQZ21UR1JCWlJlWTFSdnMrdm1LMW1RZngrbUo4czZodklnUGNReTd0LytocVJUaFBMT1EwcUtmOXFqWFNpRVA4ZVN1TFFZYWgxUVpsOEhuVTBhNlJleFlNZW1vR1QzdmhOVHdTT3ljNzRhdjhQdE91R1dzYkMraTZQZjR2VVo1c3Z1ZjhkVUpDY0V6V2ExVXJDL1RaL29HU3l6bXhyYnpwNzF1aFdhRWg0VTZlMjZkendYNFhhODJnWnAwdDlvekhlUmVDZEZhbUM4Rkg2ak1kSXhFcy92THc1QlZBd1BCTFQ0MVFTL0ZiaXZ3YXpGV1BCY25VZE0rWVNNZS9JTVFCR2trRFBTWUtSNXgzOXRuMnRlWE1KdGMzZ2tKOXZEa3IzeVBxdXplNXNsZTFOUVF0bldNS1JrOTM0UTZ5Zm41dVdzbEF1aW1JMXhlckx1d3JzMS83bXZYUDMwcnJkemxJNU5iWm1uUUhReFNLVTgrTFFuYzlTd2U5eTZpM1dkQ2pvbUFRdExKdHRrcS9kLzF6Sjd4L0VoZk1Yb3hVUkJaa1AzNkpjMnhVV0pCbXJqS2pNRGNCei9Bc1l2endUeEFzT2tVT2YxWTNXbXFYSG9NbG9BcDNVSkY4QzdtcCtvaVB6dURoNUwxQTlDMlhGeE5PblVsTVhhOFBWTWVPazlIYU1YMHEySTV4UTBGeFJCaFJ0NWZrMWF6ZFh3WFcrdWJJWGMxdDgxb2lNQUY4N2FzbHNPakJVRDJHZFBHREF4MkhENVRjTjc2TElzR0dmL2lNeHNoSHpvdFhUQmJnYSt2YW5aazlYc21nZGt4NFZMeGs4UmoyMUlKR2dIQUdDUEJOOFZtczgwUk9iUWpXWUh5RXRGVVpVaUZFZGw4eGJ5djhIQW1SM2ZjV2dqK3JwTW9LdlFhd1Y2SXcxNllRYjdweHJWWmFzYnJBSWg0V3hPa1dDWm81dVpGZ1JvMmg3R1hSSklocWdKVkxpK0ZjbnZIRmtYR0lvcXR2QVB2dGpiVldYMXhmdVNTVFRGSitJTElQVVJOM3U2QkJZVURvdW54R3NEMys5VHE1QVpMTytZV3N4elJoUVVHSERsZnByV2c1VUM0QldmTlpsWHZYTkpSaU8xSWZBemg2VkpmQWppYUNSMmhvUnpwSkN3dlVVSWtKUkt0Q0hvb1NuSnBvWXEzTFZRMm1DTlZMKytlck1EZzQ5N0d4K0ptK2lUR3VpWmx5bDNSdnV1bUw2SndUWXI1OGRncy8rWWhtWXNkYVFOU0FmRUVHQXdPMmN0SmRaeUJ4Ly96RHgvSDlBWGRyNm1sQ2lSWlJVNFQraWlqdE1PWFdIbzVKTDRDRW5ocVFVZExKOEZka2RtRlR1SVJaREg2c2Z5eEFEenNLUW1hamV3VWloOHpUOE9pSW41OFQvSjFTdmhGZ3lYOXBBQU5RY2VIU0dQKzd2YTFmSFY3NzVvL1lZeW9kWEZvT21CUWZ2ZE1YZkF4aEI0Nm9xK1g0bmJzVzNtOVUyZ3ZlVXV3TEVLblE5L1QxY3RaQzAyVFJVa1l0SkpSYmIzY3l1S3lWcUtDLytmYXBDeFR4WkMxcjVXcGY4ZVltRVhKSC9LRmdGSm4rUjJIUnA5YktKZHR3SkViL1JXZktKR1FKSlQ5U1dnY3NrTTJsaUJkeXN5SngrTm9mUHFNVXVRNTRldHM4R0xmZk53TEIvM2ZFSzE0N1FpSEh3TlJCdURORVdPaEpFaFJvN29BVytCd1JUSlo3dUs4MEtuWVhPL1hTbjA5akltUW1yWDZVSVhDODFNdGxvclprMkNSRXJxZkxrMTZiSU0vSlBqcmhaeGFtZTBZNDMrNDZCS1l3ZWdNT1RJQWh3YWVQSWExRlRMbVBocWoweHFQbFpEVGpQcHZ6R3JQUkZ0UmwxYU93ckpXcFJ2L3VvN0pRWmZlTlZCSVErZUdwaW0xVlhOUnpTVTh0dmo3SVNGL1FmZE1paExxNm9NU1pFYkJXMWtERmoyeURSRjR1NzFKQ1NuY2N3M3BZNXlzNE9rZXF4VzgxTWxMamcrczFXNC8wR1c5Ym5vZ09vaU1ZM1J6cGtDaUVMSG1BaUczeXJVb2VLL1VER3hNc0ZTY1VkT3ZJMENGTTU0Q2J6Um9TRityMU0reFM5dnVMWTQvQ0pybDB1Q2YyRlNERUZQaDNMbzlrUUZMdTE2aEF2L1l2L0FzSTV4VHUrYWtxTVZWdDVkT1BhOEZCOHVEcHpSeEJlVFBSb2VFMmsrb2tSbnhYSnhxLy9WSHBldEtuU0JZSWlWWnhtUHQ4bFFMa25jaUl1WUNQMFhFc2FIdTJDcXQ4SGVDMlprREJyQ0RvRnZMU3g0SmNHNVlSQkhCU2NwNTFEeVN1c29HL01tMGE3SUpEczljYlIwakR0SXM2MHFsRTk2bnNrbHdsa2pCSXc5bTdJOUVIMmlacjBsRWt2S051NTNaUlZDaVdsUDZjVmFZb2RUclRSVllWL29rdDY3SmNJZGUyUURjWHlDWTllUHliZHNUWnRadWpLRklqUFM5RU5nTG5EekJmSmdpOWJWU3JaYjZzOUNlUjd4dytWdG0wQ0dEUkVlSkw2UzQyZGtydHU2TGlYbXI1UDE1MGFSOWVPK3RPNnh0MzhTeGViU2lEUS9wRWJweWVwTnhKalFYOEpPbFh5QmRtakJnSnltWjE0dDliaXBxTll6dUZKUE8wcUJLOVFodHNDbzFsaWM3WDhMS3BCbjUxeTdBVDF0bnZ2QTh4VFd3MnpQcEFKSC9sOGVaV3paaWtReFlZMUdxSzNUMjkwOWRWci94dkp2SDNVSXgxSlZWNEdNOGFnYjkwUDRmVzV3M3dRY1ZvSlJLMnBsQlV0OUdTbkEweGlJWVQ3V0tmend2MU1SVnFpbmh1cEFYRVFleE9COHlZSzFYVDRacVRDaFIwSEVLQnljN3daRXFxd2hoMUtHN0FSdUszWUpCQnZ3NGwyakhCWWdLVFJEOVpmUCtIWVI3NVBTUkY5Nzd5SzNWaitDYkF0TkhFdWZ6M1AvQUhCK2ZYdTdmN1VsZVIwdXNSRjROWGYrS3JZK1VKeVo2L3ljZmt5TmNmeXhqOUVBYU5CVHlIQ1kyMkxFajNwanp1bHVhVFVzLzVibnJXZnlaWUhlMXprSWhCamEvVGdKK0F0WmcyTWRmM0NhbU5xd2xiV0I4QnNkM3V2SmtHanpxT2hVcTIrdkd5NG9pd0pNUUJEL1pBVnd1UlhFTGpjRVhpb2RyVng0MmVZd3ZHYXJCUHNBbGZCU1B0SVJ0MlZGcGdBMTVlVW5oeGJYdjc5ZW1SVXVUZVlKSXhQYzc3Z1lDTDZQTEtoQzZzWklycmZpbEp3KzRGSnUrbXlMWWtPNnJLR2x2VUsvV1N0d1ZVc3F0UVNLbHZRajhWV3BuOEpORVZJNHRjNzJIRXRTYjZERzdOM0JiemV0bEpKeGptTEEwc2dHU01OWnZiTEszNFVYWDZFSllpNEJ3ZzFwNzNxNmY3cHNldDdQWXJ4bnZnZVhidm5qTkc3UUErYnAzeldxL3dRQkRLbDFCeVEzM3NsWTdwSlVwVHJvd1dFVnlscG9sRURzb2pmWitxYzFuRGE2VmxwVVVrZ0U4Y1U5djkvejQ5TVVleTdMRFQwYlJIY2IwZzlsajh1TmltR0lpb09oMm10SzEzNEhFTmZSU0Q2RVpPQUpwc2tXcEhXZEllQVkvZzhYUHc1RDByVndkeUN2RnAxQlNQbGx1TUt1RlBKOGZ1a2xaL0RJc1NqbW0zczl2dTJaM0x3UVlDeWdQdG15T2ZqN1NKVVpZS1dKTGMxcXo2NEJ4R1Y0RmdvcGtDV2RDTVA4WEZoWXhYcjR5eitJOGhYcW8xbnVrZzJSWFdqVytGR2w5Y1lQUlhBS01JVi95WGRiczRPSVlGQ3B6d0NIZHFuQWhKRWpUcUJUV3hXWitQQWRkQ29LSnFXc3VtVmc1R2QyYk10OVNKNnk2KzVFRHY2RzNhbzNKSkRoTk9zR09LbU9HTFV3bXhxUjM0b3lEQjE5L1FuTDNvcGVxZ1k2eWZFUUx4L3U3cG1ZSmd3U24xejJMRlhKOEQ5M1pFdEw5RDBPWGIwNFZSYlpxUlJjN3lkN3ZsK1JjUnZPM1QyYjREaTI2ck1ZK1Jzcm1rYnBxNVNYZ1lrdU15MGFrVlMwMzIrK1kxa1kxdHc4eFhTRFEyS21LZ2RMVVRhSU9TVXRLVnBlL01DdkE1UTlQcmpLa1ZnMkZXYllpRWVGaHBZOGF0QmtxSnp0LzhQSi9UL0k5OUlMbUNYQWtlOEJxUkNaZTdOdndMUXBaaUhJSHJjVzA1VmQ3OXRTQ0FqRlgwYVBPdnpoV1BsK2xWVTFEZSszQ2RCcmR4dlFHS2d6bFh0QzdFL1NvZG9oeTRaWVJkUVlUOEdoaWE3ekY4SUlJa1Z6NnN5YWhtUUltRlc1cFl1OTZFRGhLVzZ4dTk3REIybXpNTnpmT3JFZkZTcENtRXBZV2JncUZMdWJXZCs5R0RYOWtYRXdvTEhuTDBudURUZmJGSGZGZGx1UXZBd1lYUzRwdmN4MzBQUXl1MmxkNkM0NmZhOTR0OHdJdTVSWVVzTDllUkl5YmdLbktXdHR2Y3BtZGhSRFB2S25XMGo4TE5YNVJTVGR4SFNyQ0crajBoT1VjTitwOUZXaXhteEdSVXNnSHp2MzFSNW1JRHVYUkZpMVZWTXFmRTFCWkU4ZkpMZXFqNUQ1MUpORGNRKzZVVU1XUllDOU1ScG9MOG1OelRaTERrc2J3cGlpZVNPMWpUTkMvVUdIdmdjS1ZPQUhZcXE3WnRFSStmc1RhaU9JQmdGYnA0UVJLOEZUbys4K0ViaGNZai9STGtqNjkyV0h0NmM4NGcvMTNlamtycGhrT0FsdDJnN1RSSE1JYVlXSEgxc05nUTVzVHJodUVEeGhSOTRUN1U0MkZLK3ErYzFxRzdTODJ1SGN1b203Ymd1c2ZCS3RLa2JIMWloanAwdWxMZC9GK1VRcXNoY3lFa0xuVDBPT1ZqMnhjSVFPaEJRUjh2SllVeE9NZFhkaXY5cmczZjk3YlAxSVNDZGtSZXRmRVBJcEZoQ2RMOUUyMzU2NGpwc01uUjhPQ2ZENGNsNzFQcGlsYStqR0Z3VCtERlZ3OURZazZiMFNiRmtyVjJlaWpYUEtFcURKd0NOa0lDc1FFQ0I5QnJqR1ZidVJBT003R1BxcjMyNWFxZmQ5TXU3VmxGZUxoazJKMmVPT0xabWV3MFR6MjFPazBybEtnNlNUVEFENEJJVzUvSFJkUUtWV0N1YUxMZUpXRlF1dEE1QXZvVERrZnN6SlVMeDNFV1A0QVR6UGxUV3JUT3ROYVFuWjFFY3lDVGVsendoV1cwVUVFZk5wQllGTHlISjBzSVN6Q0pWVzZZSVdWa0dYdVNzN2RnZWlUQldEN2FZU2ZvWXo0RC9BTHovUHhVTFEvTHdEMnYzNCt6dGxVaHd1SUk0bWNQQzhHRVZYWlNpa1JjVHFQb2lHRzVZYll1NHJYNXM0T1NDbUFyejRWdTI5VXR2TCtXWFNCNXQvaWVIVHBQWmROS0ZTRFJmMjJEWFBGMENtcFJmQnZjeWFJRU96WXBKYmRDZzAvOWRNeVlHWS9IZUdocU82SGs5Nm9QNmVEQ2tvbk1tQkRFcXlQZGIzalJiQlhhdkF0VnIvQmRyVmJPYmhoOFVZWWRET0g3WnNGTXlzRW5RSnU5U3RwQmZvMU55L0VoaHpRVGhkREFRb0YzS05JcE8weDlPc1ZyaFlxL0VONWRBbVB5VjgvQnlqbWI1UG9xQ3FsQjdkNVNseHY0TkRVM01adjFtY3l6c1dSMjA4L2VTdmEyQXlGVlYyZTNGR3lkd2xkSHo0cUhRMllReGZPcHdxRGZxZG02bGtTcG9NMGNmb1RQOUVCTGw2U3d0MS9oOGx3bDF4eUFsR2ZlMmorVHhTcWsvRHFSdlZVTm05c3EwN1ZqQ3N0bGpnSzFNcFRnL3lhN1JIZ1lnVnlJQklYVy9YTnN4cUhIU2dtSHhEMWtlNm5tbTM2V2xpVmE5TmNqdGJ4ckFSb2Vqd3RqZHVlYjRzbU5qbkU2MnFsOHJFb1NzQVJUM2QwcmtvSTRxTCtrREdiN2dYQ2Nkb0NyeVhZd2kxNURvQWtHVC8wL3lhNGkrdDF0L0xGY0hsc0kyMUpSTXpCNHZyT3J4TmZReVJpVFJiYkhlVHY0WWpVMVJ4dFpPNTNhQ0IxTVZjMzZiOFQ2NHBiTkVoeUtQUFdpMmdvYjZHSzlKdVRQczlXWUdCRFE0a1o5MWFISFI4QUhVOTlzcm1TdkNVUVd6TGpWYVdmdHF5VXBsMWF6dUljRGxqNHpycExKMllSZ1Rza2JpckdpRVRpK3JxUzIrUnlSWkRIY2dSL1pIU0VFWnV0UFRKVUIrVEx2aEdWODdTRm9VSHNIWmZtVTBhMFNHK3oxbWZwZFFwWUZDZUUvOWY4aUdHYnliZUZSYlduaW50Q0NyTmFvRG1XdXdMeUxvS3hVdzVTSWovdTVLemc4bzBaWXFMbFA3RGQ0bnpTWUZYT0RVTTh2blhiYldUWU5zNnJrQ0NHTHVzekUvWWtydlkrY0MycXl4SkRkSFdpOWlyUVBNem5ySVFjU0ZuUmFGZDJPaldRcXBna2FManJKZkZqeEVNTTZ1YXNiU1NSNjR0V0pjam1ncmUrWVo1WlJtMEt3dVNVVGlWVGxTb0NWQlRKcUMveG00d3RESkFxZXk0T0hGYTMyVmhuMlQzWnJVUnFIRC95QUhPQzh6NXlRUkN2ZnRCbUNnRmkvRFMvUFhvUk9KTDhGQnpSa1FTbENKd1dvK3BRR2xxVEViWmQxQnl4QWpVYmNGUWUwTkV1TUVvbktraDdUbG1INFNxV1BVTFJVUm9lRGNyS0tBSjF0VWFkb1gwdmxTKzJxbm9tOUM1VHNpRjJpZ1U0THRvMFEwZWsySVhuUElFZjJ2SUdWbkoycGxNQ0ZyQzA2MnR4WGpUUG5YeFNab0MySHI1dktBYlJzRXFjNGlqQm9kM1lzVkVsV0luTDhHUk5wekFQeW5rbzRyS0QvWWFIdDQ4MFFrcUtycEJ3ZU1hTXVxYUtzR0lVaysxc3FOaWtQaWZxWjczaS9KODB6RTJPRVl1KzZpV0NaVEdFWHB1cnUyTkJTWlFORUpMREpicWNxaXcxMnVaU010M1EyQ1ZSY1lGNGRzR3lPSWh2Vk1vbUVPeGNMeVphcnFSNVJUck1sdTZSck9xeCtIOURSWHZsck44OTVZbm1xT3RHT202dDZoUEc2RDJVQWRNUUxDM25PWktISkJ4ZmZTZ1pZQmk1akVza2p0b2dmbDBTY0xpamtqZTFnTno0SmJ2ZXhObTRiTXg1Y0VFbGNNNFdURGo3TU8veUtTR1hiRnBpbytNTE1PZ2laNmpxbG5YMUN6Q3RNOWxVRWZiMldHa2VBc2pYQ3pzK1EyTkdvd0JJK2hpdjhQUVY2QU1QV3IrU05QV251LzNHZG1qTDJGVnp4OE9sbE5VbytqcHdIcEYxUWpydXF4eE5kZzhlRC9SVDZ5YmJQVS9OMHpEcm1QN0lqOVlIbVViZGNhaHYzUEYrcWF4TEZjanNNS1E1SUFmTG94dUo3enJ2RmgzNXF1UHpxZGdwNXdDMWp0dkNjalJBbEIzdXF3cFpZOFYrSThRUExQWHM5UkFqZy9keWFmMzNlM2lxRVlrN2pURzB4Qm1JWUI4SEFmbFBXbEhIVjVwM1IxTnJIbUFycTVNYzErMEEycWZsNFVkWkZwUDlOYm00MW01LzkrWlMzU3ZrZE5ua3VsOHFVaGRCUkhZRkwrQ051WXNhSWh5bmd4a2VDRE1jVVZmbWxnSUI0SUYxbmo3em9HTWhPSHAvUFZLZU13bVU0aU9tc2lUYjhrYXArblFRUERmajczc0pzZEQxQmFlWmFhc0hWN3pNcmlVQTFlTEpRcFlMU08wUzZXbnR5QkRzOUFKTTg3REprUDZYUy94R2UrcWU5QU1sZ0g1S3lVay9tSjNIVjJKZHBFa1BpUGRBOUVmVkMrMk5JN1g5TW4yL2hENlorUThuODZ0Ui9CazhMVlYwSjMzekF3V3NGUCtxUnBUaEVyYjdTQVY1K0Zya2h3Z0phVTkzdVJwc3Y1cE4zYkRQUG9USGNhMFB3d1NLaTFlZ1FwYzBXMzVlS0tRVWhFVGJFa0hLSFlyZGx1LzJsTEVPT3FVZVoyUjNnd1RVTjNPREdVeTcza2ZPdklZVWh6dEdQL0lNbFNWT0x1djFqNnNDd3NoT01DalZjeWR1S3FGY2x2RHNmQmFyRytReUVxQXhKdTdJTWpETnZaSTJVdE44MGdVTjlUN1NiVnRyQjlibWNFU1VDV01VZ3JJNzFKc3kyclR4TCtKdE9IQVZQamN5bTdybURxelJlVDcxS3o5OFI0aFg5WnVsbjM0STMyTkxCRmpaUlN4bENVZ1NSaTgyMzZTZ3ovQm1WZFhMN2ZaYVdYcXFpV3BwZ1hIbGNvckVQaEVmMFlSYTJEN0Zxb0h5RTRWclBVTDNoK2ZCVVA0WmtTOEdFYzdzMzljMWtBNUtyMzl0MlRXaFI2OERhbEc0UVc1OTNtNjdWTzgxbmNXZk00Wngyak5iRDBlY1BudUVWWGMrR3grYXVwb2tqT2padTBtRVlCeHl4ZGo4L2hRT0kxRVVoSkJGQit2aHFEVFhESkRRbWlVdXdnMWdtRG5wSnk4enB1UDNJNjNNcGVReW5CRk01TFVmUDdYN0lybWJJWU5MdWdXU3hLL25jQ1UzTHdIQlpySkFvVStrcC9lVUlnT0RnN243VXpnOXY0Q0ZOUEFHM1ptRU1jSmQ1M1VhUUg1Nk9hRVBkUTRrZ1ZYcEZZSWtVeEh2WE1aYUZxaUMxRldPcWozSjc2THFKRjRhaGg5S08xdTViNjRuV044MXlXcUpKcmVqZ1RlMDJjS0hhcjBlcFMvU0ZJbldYODJNUmMxT3VOTDJlV2xZaTI0alJYNGtiOFpaZjB0ZkhOcHY5SXAreTN3Mm9vM1JQakVVNFJBaUJab0x0R2taZS9Na0VQa1Nvb2ZjSUVoYU93NGJXdXRHR1JxRlhGYUhvRjhxb3l0VVAxeFZiT051RkpwSDBrK2k5MzUzQXljaXMwQ3lXL0RxUkUwazVqc3RMNmlZTzE5dXFHMlpQc3c3Um40TXExMUxrMWN0dm8velZMaEVGNUZ0dWJobm82RzlOTUk4YlVCb3d2SmZsUWxUN2cxcURueUU5T0JJbk1kdGVqQ3hEWkVSRTM4L25HM1NLd1VvTTZEakZYMk5INUtxeUZmbVlrZHJQQkFJejVuV2FOODN5REJzMWFPM2gvbGRZYTV1ODg1VXQwZWdmZCtKVTJkazdxMzg3UUpPTldKRkovWjFaaEtSK1FzeGdBdmYwYkdCZUZVdVp2NGk5ZjZqQUhpYnhteXBlZTl0cG5zVGhWZ1hLaGp0aERyanJHeUdtRXJmVmMvd25xK3ZkZTNza1lsVDNTNHJoNUZrRnRSRE83SjlrRWpjenh2dDN3VFo5OThDbWhzeGNKbFM1Zkg4TkVJUDNxM0JmVnduNDNOM3h0aFV3Nkw5Zk50TUFEbWJTVkJHMTk0VEFQRFRleXk1YWtWeGJrVU1CR0hMMHpwS2dULzFWb3JrSWVOSHZIc2szeCtrNE9pYjR4Y1k5akJ4d1NlSjJwc0dzT2tZSStTQmFrSlBPUWo4OG5INUx5Mmx0aHAzeVZSc2ZIQlZNU3FUZzVMaVZSd3BhZ3NKWStKUG1wVFlFbkR3VjhMY3RnU0hQdDRCUk9WS2g5RURVQ0VRUmNGalZJY0gwZ0dRNGh6c0xKdE5SWGllcEhDRmxvcm04MGV6RXAyVzZCcFgzL1VCa0ppK0k4TERjOFN3eVVPV01jak5FbDA3VDkwUmdvaVhOM1Z1SjRFRHJ3cEVsRS9IakNmZnlDcHUyQ0xDTTc4VU1jMWdGaHVKYnEwa08wY2J3RURYVERGS0IzRUxlek9tQzF0S0FBTk1Pcnk1bUM2QlFOOVVUUGwzRW8rUmxmNEtJNFFsMFRkc2ZLVG5OZ3o2MVhoTkszWVdCZmdNZVE2UWtEeC84NjJSTkI4eWo3TUZLUkQ5aDlHYm5tL1R1OE4wbU1kQk9XV1VnVUR4VGM4Rmx1VmphT3BHcGMzaWFRenB0QlNPaUs3R1d4aWpQbmdxUWczcmVFZEorcWJjSHlxUGF3YlFsNmUvRm0wYTI5V0lsUVhWZTRmYWxNc2dsUDBPSjMrREVvbDJWKzdUL3pMYUVPeXFHbHBHL2VBTVpsNWt6TWs2SnJqbmJ4TDBXcGpuWDIwS0ROVUh5citaYzRqZzlqNnA0UUR2UmZEaXllOXJRSURBTzlPanlhbmRyQlZIS2RkRzVKU1ZmNEU1M29Rc3lyc1RLcjdzUE83d1huZlBDVnVOczBub2RySUpadlFHZlNuVUV3WXFYMnBiU3RlckJEU3RPUkhEcXFDaERjcWVZYTdJVUVsRjJQeWlHRnR1czhLaWZmQ3JRbUVkMFhWZ3d1cy84czBFSG5BOEhOUzlwdjJmNWYzNUl6K3dJc1d0TC9ZQk9UdTRFZzdLWmJITlRDNnE4SVlKaVNnRDI3WDFLL0FYNVU0YVhaQVZZQWZxZFphbG5TYWFFVHFGUGRCODQ0K1N0cGFiRkk1WWRyQXZwUG41b1dMSXdiUThham04aitGWmRsMHl2NmJNbjBpTWovRXhJektYVlNTZkZQdy85Wk1LVUl0UFJ4aVE4cjE3VHZUWVhQR1JNRGVZT05BUjY2YWJGT1JFMXJZMnlZbWRRRjNjakZrdVdzUHQ1UXVaUmNxMDN1L1RySER4ZnBnRi9BaGpOTUdGNDl2cUhZcHlCdzFaVXJReUdKWDVFSUZUU2hDYkUyWmRUS1MyNzJuSW5GL3dMbm5od0lFOWtnZUVEcUIra3AvVzZSMkl2clBwOXA1bW4wVDhyTHB3SCtlRSsyVkQrbkVGOHRtK0E0WDVXRE9OK2p5NnNDa3Z4NEdlMU5TOUQ5MUJkSG9BYkZYcWh3N3pVaDRRWW52WWl3UUNZNDdaTm1vWDM0elAxMFFtNVNET0RSY0xNd0FZbXhQR3dCcy9ZUFNnMUVSOVNDeTRCTkl6UVEvd1J5N3Jzc1NkS0kxWVlSVmlIM1ozUVRJaG82bFpqbEJlM1ppb2NucGQ1UVFjSzJkWGQ4cHo1eCtEUGl6YmZoNUhKVS9CUjQzbGRSUkFvdE9RS2hDTlUwc2xFc3huNXFZUnl6NmR6amo0OTNRVU9yUGl0SmNicDF5SVRUcCtxeWhpa0w2T0Z4Ri9jSkZsN0JoRHdRZ01DcDgxVzk2YkMxczhTSDdCUkIzS3NCUXhLWWNnZVlYVGpUMmFsSDVILzFLeHVYVk4rK2hRL0FZb04xMWorN3diWEhPZ2ltdmdyT3liUHVyakpWR0xucHE0d3NTcWFBRDZlaU1CK2IzUVhZRGsxTEQybHJQZHVjQ3dFTGgvTGZaRk5iTzdsUDBKSTBTb2ZQUWdjTkhzdkpPakl3M3hZVkVSRDZTZjFPa3NnSlVhT3EwOXZzdHZpanV5YmxsNUxzSjFlYml0Z3N5VWFZZ2hreDAzVkRnM2R3bVhiTXhuRCtjK1JQcnBMbCs2ZDQwcHB3UHEwUUZvbWVTbU1DcmtYQVkyWnJZcm9XYU5GY25QeXp1Q0FMOHJldVRoSzl4TndnSHpvWGl5T3VTRUN5QUtlMkR0Wi85YVVwODlTaU9OaEF5YkErcjd0YngyQlpLdUhyUDNCSENFM2hJVHR3RGFrc0ZqenJhSlZKR3djL3VaTW55MWtiSHNwZDlFOHBxWDgybmdOeUh3UWJ6T1V1VmVTeElHTm9oS0NkTWMybkFDRStGbEJwTnVzelNKTHlUaTFqTVZlcTkwTDJVVTFPemRpSjZKUWx5b0hrc0JJVFFRZENOMHZDZStFRGZIb0pLNkZKWXhvUHlKYkV0bGdDQmlvTFkySWxqTVlPYzdpQ3FMZGY1SDgyV0UrWGhJcUYzK1h4bnM3ZWRGbE9aRno3MkhDYUtSWTlWaEFvOEJKdU9SZGZwM1h0WnJsWFkzTDlYRUJjckdIM0tjeStadjdsaUg1REE5Nyt4dHlKVnd3cGVmTWdzZEpMQ0JlNWprQ0JFS3k4Mjl3TXdxSkdBdllPTHlveXVxcXpraUtmOXNtbXdWdGJIbWhFU09EZEk4T0pjRUFrZURqNGtCQ3p6QUNJSExKQ0VDNjFoSG5rWUxtN1piM2JQei9QdGZlQmwwQmhDZTJ3a2NQTUdXOThhZDU3dXpUa2ZPY2dxcnc5Z3BqVW1NcDRTTklEOGhpSVNMTytucjQwaGptbzd3ZTlidVE5VTNyS29CVHBhZVdDNUxLK1ZKQXBMekpWR3lOWExaeXRjSG9rMWhoY01Wd3VvakhMU1F6NkYzeFlVcnJtRUJ6ajJBRkE3Mkt2UmU4WVp6TlROQVpBYjgwaDNzU1A1aVg0eHQ3L1dzd0tlczBNR2tZSnJhZWNhN2U5OFpoUHpOMExYQjJsK3ltOUdXTEI2dTYzdnEya0NmbzVBbzRXdXRsVWhrbXVzeEpTbHUrVVIrbXpGVGJZRjZwcW0xaVBxSHZ6Z1RrM1dsU01DRW1Pa2w1UGEwVy9YcjlqZDA3MXhZM0xEMFp4RzYwcnJ4VTJNT05SbUlBN0Q4dTdGeklUR3Q4QTE0ODU4MmJ4cTVyRVF4cDZVZW8vbGZHWTJjUGxZSmJxMTZlTEwrVG5Md050SzlsVTlXaUdUMXRjZVZSL1lhdFptaHJtUDk0cFdsQ0E1YmIvRWhCcTVyeFVRUXV5ZzIycHpRaWNHbHR5RXVVelBrQjlZbzV5OUpvdlRrRTA1NGoya3VlK2NEYUUrOXg0K1RMN3ZTU3QyNkxlTVdRd2FCZThTa1lUVTZhR2R4ZmFZZDROaUx1ZmY5Z29lYkRUd096bXBCSU9LTTYxK2RSa2toY0tZR1hPRFI2TWlXSlp0bTU4SlpHb2E5OGt5NS8rYWI0ZWNkSWhRQnVuVlhJdW4wNW5PZnZ1bTJMVS9Oc290c3RwOVVjNEZucjZFVVdoSmNXeDJyUjVxaS9WY2NBWjZJS0RrR3pucGMvR3hQSlMwcEQ2bmxoc253Y0prZDl6b043bUhPRTdmcUExUDNIWFVLYUNSc3JmVXdqS1A0ckI0Q215WlRCOW0vUTlVYVFlNTdjWnNqd3JKLzlhVVVyd2kxTWd1c1QySDNTd2E0NmxvM2ZoVXlyTHk0WW92TnNtbHhIZkR4ZkcrMWIzc0JKOFpKYU5Db0dVb0NTMjBRd2RHMU9KeHhDZVhSL3pnQktwK3lYZnpFZk42SU9zUXdFenE1dXNqOUpPZitYUit4dmNHNVBneEE5KyttOTh1Tm5oTnErdnhUajVQTDA3Wlo4bTVmNzdwVWNhYlpubURwa0VhU3gzMlFnOERDZVFTWmRzSXVpTmMwcGROZU1laFpSL01yb3lBNzZwRVIxdFhSMjYyU2I4c0VhY1VrRng1aUphWGtEbVB5Mkk0UkpNQzRuMlFWU2JXMjJhamFQeTNrTjE0K3dwbm5pbHNtZ1dwdElkamhCWGRNa21CQktuNVdLRjN5OEdsaTZwS1hxRWxvcEpGOUtMekVwc29UcEZDRy9oUGVETHBCd056V3pwb1lzdGEzYkxCdEpLQ1RCbHZ1NUhHMVlCTjM0TXhGTkYrMTZyNWJ3L052NytnL2NyNzB2N2N4a3dVZ01zWS9HT3M3Z2JQN3diUjZNVTBQemFCSnZNOFcrall3eDE2Y1paRVduTGQvNDhNOWswRzUxUmI5WE5mcVB5eWNuZ2xaaUNaTlBYb3VjdVYzWDM4bittcFpzUHdIbkFVUEZlNGpSQm9TNWdscTgrZmg2am42aXpHR1hSWWFHeGpzMWx4OEpQcjIyYnhadzdrL2dGdTk1V2V6MVpjVXdueitYWlJzNG1icjU0a2xTMnQ4bEVKdmhiMEgwVnkvV2xTT3dHekl6M0JXRXlkKzFuZTZZRGxabGdUVTdZNjFxUWJEMmVDOGdHK1NFL0U1bittaUdTUkJ3L08yTlFnaXVORmM0cmh2YVYrRXdTd1pINXR6a0JNMGF6SVFOb0N2eVR2Y2RRVHowd2pwQmZ4dDlxWGhRaXBQa1M5L1FrbHB1RWt6eDBPMmFUblJuMnZIazFzTEl2R1FsRXVOWXA3V0hMbzVjaUdUSXFZcitkcC92TUlTSzZITERyRnhrUlVmWFlTRUx2WElwT29XcVB5c1g3L1VMQS9tYWxBdlVHRDhDaXMybVM2a052amFtODdUYUJZSFhuRk93TU9uSFlybTJxYURiaFFYTk1YY1RaWWc0S2xhY0dGdTlIWUVjbW41d1ZyeGRTWjczZkN3Uzg1SVlXRklLaUVpZVNHSk5ydittaTZmNHdjbVpmZ3lzaEZUWnB2VlRJR3pOUDFIV1VaM2EzTHo5T2FlT25aeXQ1ZzFWei9RT0d5ai9QbWtseDY0SC9CSHBYeGlrZStjV3FSRTBGd1F4QjVubGRZclpyWVVobDZhSUJKOEVmbWZjV0ZRRGpBanFySjhqU3RaMVVlc2xJRnNzaWx0a3VtTHc3K3ZiVkpsV0VsNVh4a1M1d1FZdDFwZzZobHd1cjdJS1pseThhRGQyK2lKTW5vVmhGcHd4MzM4L1FFUEZtVldzSUhpb0IzSGw2a3Y5UmJzYnQ1T0RkVjVwSDRjbXhDZ1l4UTNtLzAzUVdxNGZCMWtSQXAyZ3F1OUI2ZVZ1SU5TNjFmUVo1WUhyQ21XOVh2aXo4R2tLcEhhRHhwNHYvUndUelJhMklDU1gzWFRhTFJwbHFxaFE1MzdWQmVwb1VsbmRNRlVrWUNSeVBHTjNuVVF4eEJHaE8zdGRrRGZxanVFdXpDNGtDam0wbmN4cEM1STFQRTNVZVlUT3RqTHp5S1dtMElWWFBtUyszOE1KbnRVMy9CK3ZRcEdta0lRMkErc3hoU3RTdkpaaE91S0IzR3ZMVDNOYlk2QkhNeGhYbVk4RFZhT1J1MHVMeUtOb1lDc2RUUVl0WW0zRGJqeEFQWXpsMlR6NzNUSm5odUlBQlQ1SGZ4N013QmxabnpVaS8xRmRvWnd3TC95VTAwRGNKd2lvZENTT1F6L0tqTE9WU3pVeVk3Qyt3c0ZsRVQ3NzFUeGdCNkc0NFNIamRRaitnVDNKeFJkUkpaUUc3T1JReWFjS1FpRkZRZmtBTFBHSDAyRFZROGNIZGY5S0M0aDUyN1FuTDVUbFFxTzJHTU50WEdTcDdXR2NSY3FQa3VSSmRWT0x6QThnajF6dzgvMnAxdEhheVRVVkwvWkJCYXhham9vRS9qc0ptTnFxajVZVUM3R3Y3cVRRVDFiYU5rekt2YTZLeGxLcFZnaXdJaUJGMUVRUmxZbk5hb0k3QzZ1cUlieDl5cXRHT2h3UmxVRFY5dHlNVURiRjhOZ1hnRmQ4UTgycnhPeFVCeGk2aVV3RWdyellzOGlxMzFlS2NzMlhHZkF6WUc0eVdoNWF4NFVCeGVvNlN1M2VWb2daTlVwekxmTEhaS211RFRqTWxRU29tcFhkbVc4RDQvbjZpcHJ2YVlKcTZhZ3RRUDdIcENvd0xkUERzeU5NdnZ0bkpaOFNsc2pTdno3cmFrbHRIZFJmZFMvNkM4dGoyOGNEOVBqNFBkalloZzZMUVBnbkJLblZ3YTRuSFYyODlsUXlLbk1QenlYaW05bjRjM2NvOW1mOWNsdnB3amNrT1dqekhSZjNwWjhUWDBNSE1NSzNRNGpvT05Sai9XaytYeGZEWlE3SWpXcEQ5SUVKVVV0ME04UkMvZUQ5VlFqRVNKN0xyV285R2VKSUFnU2VYWHVDK0hQb213UHFWTEZhM0duT1E0akNpYWx1MndsY2t3MUZmWkFRWWJqMEpvVTJKK1N4c1g0ZVNRU2V4eCt1MGRoRjNaR0QxZnZ6bk5wSVNSMitTTlRWVjcrWmRvV1BydnZ5dWlHV0laVlBXRHljSldjK1FuUnI4eEtZQkxYZGxwR1FGUUF5bkplK2pDc2xrbzhnZEo0UWl2L2lsR1NVOE9wNXJDNm5VN1djckc0UHZxb05NQ0JHdnNBWnYreDViZURvVCtPTTgzMFpndHBpZjNQUUU5UmVSOVlxOEcrdDhoanVGWWJQUTJUckZFS3JzZGhCVjNOSFREMSs3b1dLZVdTL1lrL05qaC8zaTNkTTdCaEFFWFBQMkRIN2JvWFo3TlgyNWZKQVZYVzh5aWMvVi9wRFcrb2QyWEYvSXZ1R1ZIWisyeHVZMitFbXQwbnNVVlhKSVZLSnhGN2xNY2dsQlFHSk9LZzZMS010OUZkbzQrdVpjVGlCblJTR0RFWS9MemJwUFlnVkpZVTJmejJTN0xGUDVEcTlvWHE3QkdsaXB0cWhwZ25mMmxnTktybTZKSGplSE92SXZKOWI1a29DbC92SlJ3elRSNWJwM0hRNTBkcFU5QmdMZ3NmUjlCMm5aUDYwZmhFaWVGQlBHaGVYaEZGZWRXOHR2eldIdGJXME9tQm5vQlkyWXNzYjZqN2JTSFRoU1ltdVdKaEduVkNDbXVySkNhMmpUQXAxdjZwTHBHZytjSDdmQ3Q4eWovblBjMkVjemdFQUZJdGpOYTlnNzMwMVhCRHJhNnBhVVduZW5NMzRZZnFyYWdxOW5seCtpSlluZFZ3VEVHbkR2OVJrU2JGdkxyejdKOU1tYXJmT2ZBT0lmcitEQlUzSXpiQXU2K1dmVHZTTGFYdjcrSmplNWZobzFvdkNNZXBoaWdURjQxODM4Qmwvd1FOQ3pvRm1VSjJPc2FZMUJsSjdPT0RCTTA1eUpGdHJHdjFQUDNZWkhicHlIclloMjFNQ0tBUmw3c0daWllmcEdBbU9Ga3BjODRJWkk1UmxnR05KM3U0N0loclh5Qkh1b3FneTRMaWJTaHEvOXJzVkh6SnpCQ2dMZTZPWC9SZFo5WlJNbzZFb3hPVHlIK2hJUWgvUDJ6NDAvS2dZOURuS0pKV1dDM0ZsTUFkeE1JWGhjTEYzYWtYVDVzaUxxbEhTaTdVN1BnUkdsQkZ6dlM0RjVaYWZwNkNNajhXWWw4ZmlKVThjMU45TytyS0VqQWpjY1JCZ3V6amszY000djJLZ3JQcENaNk9Xa1JMM0tUc2I5cDNMQk85TjI4RlJsWjlCNzZ2aXlFbVBHcEEyQkNrUWtVckdwRzQ3RWtHV252SjVJSHBvWjYyV0toRVpRQmh0MXhMdHV2S09FdE11RG9CL1pQM0MvbU14TWcvNUIzWE5ETjl1aUZERmkxZ3hiWE9QaVIxU0xyZXVjb2N2b3dFTDAwV2F3dzE5eG5NcWg3SG1jZVFPck9jdHhyYXJrQ0NhcHlOUkRUbTc3dTJLaW1DRWlGUHI1MDB1VHdCdzZmdVExZUs4U1dySFJMdnMxVVVaMVpyZDJFT3VscFJXOWZocER6R2RiaHNZNk9JUTVvVnl6TFNRaXByWFEyUlltVlQzK0dWS0ZDOWhob0tPNXNrczlERngyc0VNeFY4ekdPYzlXa3JHbVJLRnlwZTY4SkxLR1BreDdRZ1YrTFUvQ3R0OWl1enZ0YzE4WlJHSWgxT1VtNTNCdlM1bWczZm9hRXNFeTl3K1MxZ0NqVThLSE15akZwSmYxSnBNam5EbzhYc2J5bjNGSjFuWHlpVGhONTVUa0pMWmpaby90WEdGRWU3TWtqTnNsa1JMUVl6SVYxZWlTOWJIMDVMRENZU0hYOXZiNzN2ZVIzcVVLWTBkalJEUFhmbG1RRlQ5dzVSWU5oYzZ6S2dOUlFWeDY1emJTbHd4dzhUTEUzK3dZZTBVb2tldlNvZ3YyeFRBN25EbXVqS3d5ZWhBV2RXK2owWUltVUl3SGt1enY4Z29KRjNhUStQdzR4eFVYakYyM1RHZndHSzZha09xZEhFOEdBcEFISTN3WFpGQThxQ01LZ09uK0lZS2xzSmNIK0JrZWVGekdZb3JLelFwZEdKS1JqbGcrSGd1VHZMVmVHSXoxVUtpUXNlNEVnTFIyRU53YUh6bzBPdFIxalRvdVJvVXRLaUlCRUhuUTdxTWF2RjZob0RFejBEUDdKbnFXK0dSY3VqN2VpTFBZck5sVnV3dXdmdEdJenUvOWt3SWNmcmhaREFXUEZ6d0FMUTRNVFpSOUk5VmhQSFJ1bWlzTlgxS00wdzdCZ2IydWtUT09hUW9qbUJoS28rRStmYzkvVWZJWG5nWHhZK1hIbW45OVIvYmI1cUM2MXQrV1BGbU1KNnQwY083SkZSVDVURWZJV1E1c2w5U1hNMnJ0MGxpT3g5UVFkNEozZzZzMEN0eW5PMmMvTzZ0bXBiakhaL080R3VhZXB5SmZlWlBKL3JLSnY1Zis1VXNVb1FUS01YNVM5MGExdlhxNkFUM3llSlcxRTJLbXU1eHdEaWx0bWEvMWM2b1JtRDlWenBLVVVRazBDcFc5bFVvQ1BXRk9uSzU1RnBxLzJZaVR0RGd4V3c4cFlNb29pOXJyTWsvZ1ZhOXhxVForQVpWV3lFV1FjSmFKRUVtN2dBSjdIcFBOU25EVXpqRTZrUGNEVlNvWDExTUdBY2pLU0YwUVcwTU9pbDMrRGJuV1k2d1BNbGxUL0JybDZBMmhYakVuWW42OWtiV2ZZY0lIam0yOVl5T2V1VW5VR3ArTVprb2JacXlOWGdJVTdxMEY0VDVtb1JYcUp6QWVnN3RkVDN6QXgveGsweDhTWmtoSnM4Q0k2cmpvVDEzYW1SV3F6NEJTMXNjM3I4Z21pUUFIT1dyQU1iZmZQV3FwZ0NJWHhrUXRMTHFXMFZ2S20vMVl2M1BCYXJXUHd4U2kzZ2xjUytISGNzVkFtazIrT0NFVEhYaUsvcERqMmZ6L0RPcjhGUm1nT0wraVBlRkhEL2RrSkgvM3hxV29kRU4zd3YyNjhYZEhWaDlDYitEUlBrd1pUeTREVGpJKzRKQ1dMYTNPQ2lOTGNmOFc1aTVQM2ltWWdDVHJURU5URmFvY095MHR2ckN2TmhidzhiVHkveWJjY0RsZW5xU3JMdHhUTWtMcC9FUFJHS2g5QlFkSnRtYUNhbDBuZFUvenFQZUNGQ1FiS3ZObGJFQ0hmRjFJd0FlcmRxL0J6Uk5SYUQzaXFLdTByTVd4ZkgrcGEydEZoeU1RY0NOOVVweStIWVFUbHBOZ2dkZEpYQTNrK0p3Q3VCS0lWS3ppOFNvODQ3STVRVDVuektIMm9naGd2QUErQkVsQm1qUkxyeHk1QjVHMkllSXJadTJSbmZKOVFNZHBBb0ZxaVpwQ3p5aWZZaGFuRjdiRVllOXhmZGxmSTR1VE9SeXd1cVRiTGgrM2VNTFdycmRmeDdaUlBRMVhINjFCTE5vZ21hNlpra01OME1hK3JLUDlrM0NEcnBkcVFOako0TCt1UXQ3eXM1ZEFabDBkekoySEM3R0RQUWhsUzEwOFVmNDJpRDJ5WVBzVXY2Z2dPQ0pVMFNURkNkdVlvMGVHeDJ1cjZCT3Q4c0V6ZlBqMFZGUHF4RG1Sci9pMWRzYTlIeUVQbEkzb1dRRUc3ZDNkbVRTWUZtMW43aXNGbDhqOHhzMWRrQTQ4ZlFGekR0cDQ5TzJUWWVBcDI1UGZoUDRFQkM0STVHdFFiSkluWThDYzRyQ1RvT1hvL0RZazQ2R0prbkE0eG14WGFWSk5KRnhpd0JGdUJ6aHFVaDVMWkc3S0oxa0sxZCtHSGRXcnlDL0h4Y01SQkdKdGtjL2tWVFZrLzBZb0s3a0lydUlLekxxZ1R3NTVoT2NoNlpTOGpHdzlUOWtKbWVZbC9ITHowYkQ4TVBtbk0zT1pQTytUdmhYazM3NjJFL0JUTFZQaERQN0VIbmFIVU9MclJHZHdsVVhkV0VwMHNKdWRud1RzeVIvTnE3SHUrUTlST3B1V29UZWI5OGtWR1hSdVRwU0FNb29saWF1dENZYlhFeGM5ejM4NmNJNGVvVVlTWDY1TC94Znpjemt4dFJvM1VYRi9PS1czMjRORzExd2lDWFRxcjRtdmlVNDh0TlhFWTNsSGx6YnBSckN0TzhqYmwxMDJwSmFTY3l2ZFRGSEhCZGIxSXMzVVdIU3lqUVRoSXp5YlkrVGlUdmNXaDg5ZGxUV2dDZTNYR056UCtrb2ZJb0Y2Qk1qT0dJL3g0dWswMUhhaDZJdE41OUhJTUFNclN0MWY0ektuTEw3YzBVYURDNEwzaDJ0WnJhMXEvTmVZRUdXbE1QU3F4K1ZSMHB4RlN0THlZdlhtMDhzM3dadzFWaitScC9pL2FYZUVTU3ZzZjBOVDg2cnV4d1g2a2h4TTcvVnhxR1EzbFJPL1VETDJwUVM0V1RUdG9Cd05ralowTFJ4WmhndkpRcnFEVFlRS0pZU0NMZmpVY0RvRGRyRlIvS0o1RG0rdWE2a2RsRkVCMTg3a0dYMnVFTVRVU3MyWWV2YUdkQkdaNU1DRWZBQXUxc1Q3bjBCNDRLWmFXWDlDWEE0blZnOHRqSlZuNktzZGFtMFM2NjJTSnIzTmhZdk11aDdyK3lwWVhUaGFQa1FROHR3MW5EWTNJVWJkMHFoSWE1UFEvU1R0M3AxVlBaZCs1NFlPZUhOcVFIR0plM0pPbmM3Tnp3dms3NzN1YkRHWS9oWlNTRUIxQzFkUHZJZTB6RjlFR2p2STA5VGhZcVZ5SG5BNTNqVitNcnNQVWhnU0tLVnlPSWluYldVaElwTU1Felh2MlFqUFAyZ1lQd0dkWDBvRXVvN0JmazBxSmNlcU04MGpGY1dFNEhScmtJNmk3d3pQMVBaVERMK295dEVUaTNVV25WMG5HOU1SakFVcGlRaFJuY21xUzBYeDhWL0VGaE5mdGxJRmNaRkZVZVBJeXZLa2lzNS81QTRSWUdod1RrWGtrd3VtMi9aVjRneFRUTEJHdVBPdkE2ZTJYNzVwZGR4RVZsaW03c0V3M3oxY0EwZEk0aDhYTUhlTTZsUXZkeHpsOEtSTVFmUEo2bHRXUjlLSlViWkpjcWR6NzFxL0pXVUVoVytMWm9lMFQ2bTcyWjZTd0g2Nkl4SDJ0YUZ1YjBNTzFqYlYyZFlCaUphbERIcTVVYjdJZXJPOW04Nm5laldwK2ppSFJNb256ZmFiekppRmRJbU9sNXE1WHk3d1FVeDA3ZkFpQkJMZEdzanBYZlFKcDdpYWxGek5kYzdDUDJYWFd5WnVxUWpvbzh4RU9wUlUydGdwRzJwbUJqVkhzZFIwVEpuYlhmTFFHSk1VSi9idDYweCs0cG5VbnYwTnRqMVRaZWl5V1JoaTVmWmxBUXRLemRFUjBDNWVTcXNTTHd3YkplS3N2KzVTNzRnS1dRVlFmU2YvSnk2Z0p2bDJmQStYeDlwNGJjM3d1Y0dYVG83ZXIvODkzeGF6QUpFKzJZMUJlS1VlQzMwMFNzZXd4RXgzTlR4YW9CaG95UGJuR1ozai8zWjNnNUpiYmdsYk5ZR1J1elFQWGV4L2tlYjB5d2ZBYzFYY3UzNS9pNVV6NXB4S0lJZW1yK0R6SHVKREdBT0VOdUlVUENtSmR5S2xhb3BCQUxPemxZMjJlbEk2UEZQM3hiaGdhRzd2enFFb2tHbVppVnB6QTVjdjhINkRwdExNaTc0Slg5emZFRm5tRFA5MTRSaFJ5ckx6cTlocEM4WWVkSEVmdWs3VUNLVG8wZWdpUGFuMFMzcjNZRkJhdDRBM0RaKzZtdzRsc2RzR3FpWWhGTHVNaSswTFlRY3E5YlhRcVlpL1RzRk1HaWJoS3BkZVpMWW1VNVFpR1M1QzVWSU4wUVNwMGtuNS9nYWpBSjRxWUZKNnNRTENWVUd2ZlJCUmFyRVMwVFlxQU1xNlI1ZXFZKzYyRi9icXpab1BIdmZzRGEzQ1ZmZFhVcmlzZ3JsbEY3cGZzZC9EVTB1NThienFjR3EweWRGaGZZaWhHZ3ZCaUlmRHJzSEdkekU5UkJGSWplQ0l0d291TU1GclF2NVZNNlpIKzMrMm5tNno2dGRCZUtzTmh0YUpqU1hpbi9IUUoyOVJaSk1uOWNqWEo3YU83N0k1UUZTOEZOeHI5RmNIV0lhR0hsdDRaQmJtcDRSRGpyVFcvejRaRkx4OEp5S2lsU3RxTVNsMG5TMUhSVldKaU5ITVh3eDRVVkhuWk1IOTRHQXVEaHc5emV6UFhUQ05FRnhJSE0xSlJyTE0xWHlvaWxSN1YwS1JxcGNJZWgyaDVOaGpka0RObzl3bkVBclVTSTJVeXpsRHlVN3RWVGRkVHk1TnhuV2UzeEtuQ3NyNUhkRzI1a3NLVTBvRUFWeHNaVVNCS29TRU5TbUs5K011UC9zdXFtSUkrVkxoNmRWTERtNSsveWMwR00wcSs4eWZJTmFXRlNtRHpFZ3JmV2RZNzFMYjFjbXlUZ2UxUHAvL0hlMmFmdWlSbHhrSGd1MWp0aEp5bHBUeFJlQkxBYkI1VldLbnZnMmVZN3libXhRYW8vV094bWpqTGhWb2F2SlgvUWErbEl6K0pSQVVVbkJqTTJ1UFRyNlRCeWZvcCt6T1dKWWJQSmRYUkQxUHhhNzVCRnhDRDhPSDliS2JYT0I3SXBqVnVMSHhQd1NOVkFzR2JtanZJT1I0N3ZWblZpTllhdnFsTzNJSHFSUnFSaGYvSWdWUi9ISlVNRW01UTkyekZ5YVlvcFE0alpNSFBvK2QyTjdLdENTcHBXelVWRk5OVXZiL0x0azNVbVBreGt0OGRJSkZyNGJWclpVTGRDNTYvQWJLSUNRQ3FLUGhDVy9GSXRWUCtYTk1RdU1wbXpDc2ZTdzUrdVZNVVpFQTUxNWVSWHhtN1dFZVNxNnZDOTc4clpwM0lZVGtmREVKR0dYY3g4b3h4MWJwVTJPbTRYYk5qYysrZFA3bm1TcFdobEhZbzJvT3pQRmVlT0w0cTAveHEvWVBaU2pFK0grRzZMUUZlaDdVMTllR2ZzWUxWN0JkUjY2RktTeVBIRW5rZCt6TmwzcXBnZmxRMHd6N0o0UmNkVTNZcDQ5NDVCL0JlU3dPaTZlK0kvWDM2aUs2bTVGUjdIMDUwRDN3a0RGNCt2SldJVnhYbmw5RW9wYzhETEdyZHMydDI0Mm5ySkJ5Y3VJSjBCcGFmVUgyYjZOMlBHZGJMdzFYVkZzUk5jbkZISXQybzdjdWc2enduZlI2UUFKekFFaFcrbnd2VmhhNk1zSHl2ZVBhMmQ2dkljdU04eFZ2WisvVzl0aUN2NzZtY3dnZTJhRkx3TnBIVnp4ZlpyN3ZHVlc3ZGFZMUt1SHZ4MExDeGVwK0laNi95MnpkcFo5c0RVL0dHbWRYSDdTNU9xckFlOFdpczRNYjFMMkpsaU03YTVqSnF6MlUvc1RiMHl5eGl4aHZVUlRtZnhETWNHcFNsTS95blNVcXNWZ0JSM0xRUFVhNUZBZG5YdDVIZkJTdUJxSUp5Ti9Nb0JxMnM5dFdaYllHMzdXR0xKODBMczRWVm44VVIrQTh2c1ZtMmwvazRZbXZHdHYvRllqYkNHMmMvcStlZ0JTcUhNUTBuV2JCZmliWTlRK1VsQU1YYTMvZVBJSE5jMFk0SUt2RDRJNnR4b1p0dXFra0cvOHBvMUFIZC9aVlVydFcwOUZGVEs4Wk1MdXdKSXZTZDZkalRXYzhEZ3dkb241THM0b2E3c3ZOTWFNZVhQRURUYU1Ba0s0dnNERHlxbmEzMzF5QTJoTVhUdTRaVG9PNHpYdkdyYSt1VXR1cHhmM1lJNGtHV29sKytkRnhmeEJvRjN3cU5HNERkVlM1NnRYbGxOcVlxeXZJVUxaQWFwVkFHMHFSd1B3blcrdmxhQlJqNkRLWHN2eVh3bDNuRklZYjNDMnBCeDRyNllJdWNlSUs3RzgrdXI1dlh6QlFpcTBmblRFMDRDT0pDREN0THc5UkFtdVdhZDU5dUN0QkFFWXVRZ3hndy91TXpFNS80WmVvTDdvOVIrcTkxbEpadVNmRTY0bUVzQTllNzg4WCt3ODdhZDlCWm1tZitTWFd5UVVjRHZYT2g0QW1GTkRPcWdEeEIxY0VUMXJXU0xOQUwwbHVXa0l2NC9jUDcycVpWVFZySUhlK1VSUVJsZk05cXFrbTA2cy9QcmlKZmU3dUdDUS83MkpWazdWSkVaRWlLdnp6SDdDZSthaFdVc3ZJb0FVUzZpUVBGdDJTTWE4cE1kT2MzU2FpeTI3akNOUDRCQVVLaTMvU1h1V3RocjhQMURGbFJQN09HM0FvU1ZEcXlITVZGNGtOVUhTbGJaU3N5KzAzR1BDTTZNMmZ5bUZqZk1sR3pjRXowdW00Sjk4M3dtVktzRE1DbS9EVWl1SkFybmdobVRrbjB1dThmTno0a0JWbFAyRTJCdStpRi9VNUpsdVBSN2hFaHp2Wk4xMzNhUmhMaHZtbnJUcUxUcGljYWR6eHlsUzltM09uWjRTSk1pcFR6SmY0bmJIK0RkdWoxTHA0eEswMEcvTW9iUjBDUm45Vmx0U3d6L0dXaWNwTGdmMWNBbmE0b09kSkR0WHlwbFFxWURkRGhBcWVLNlBwTmhlT2FjYmdPblA4QUl3QzBIVVdpK1ZVUDFOSGt2azdFdWtmNVV0d2FBZGVYWG9CV3I1MVUrU3VQWHNIYVhrNzlFN3ZhK2psbXUrSDV6SHRDNW1vRFB4Tm9HMWFuQVpHRFNWVm95ZGJFSXZGcEJwMTBhUnU3SFlzTTVnY1RRcng3eUtrL1FnNUlWZmgxcXl6NFJPMnlJR2FONStoTDFsTkplcmhKOVRQTmlsR0FRVTBYM2hjdFlFenExaXlsbFArOEZDbXRSaEdqQngvWlZ2V0t2NDdLcVVCUGNYQ1pFU0dObWN5VHBrWlB3SWdrTWVFdmVGN29hUFFPbVZ3OVFObW1mYTN0U0tsZ3JVQkRQcFVDTUNWYVA4amRlQ0ZhWFhiSTd2RWJJUnZhc2ZVTjNFY1RsV3k5c3d4eEdMM25vZjUvRjgzbWN4L3I5OXM5SUV3VEF5bjNGMWdJY1pyeHFSYkY4MVRTQ1NQT1ZPaTRPTjF5Z1RucG1lRVllQ1p6amZyUkN5WWNNVUF1V3haV3FQcVNRbVlEYndXY1NIUzFpM3ZQNHN6dGMyNS95aUIwMGdlSmtUcno5Um9jTW5IQzRYVmNhN0l2ZDF2WW9VaTBwS2Z3a1c5RUhmaFpYb3JUb2hYQnhPUitSMjh3VnRDL2J3Q2VMa21jQTNHbmlpRXRSL1lZaUpoVTdEZDMxOEJTdW8rdXdFSGd3dnIxOHRyN0c5SVlwbjRlREpsOG1CelpuQm1zTzNJR1NVZjJUWG5ET1o1MWdqT24vcTZmS2tTdCtmbTk2TVZIaDlmZENCUXloOG42dVMrdGFXdlpsMnBodWxHSUg3M01WamhVejE5YWM3Rllkd2RKVDJOeTFBQVIzb1U1U04yVnJ6Snl2bjh2c1FkVGx6RHFBK0JFQzcxTEpSQk04Y0NvR3JoY1lOR21tN2FNRlMzYU1SdlgrTDFZaHNqRDhBYTFtalJzUFM5VTlvei94a3BtakNLL3k2QTFBcDZTcFdiZVpnTlBzcWxtcG1KNzMzd1RzSTJaR0NmeEVicjFNcS9vRWRPbWhTVC9oTFdCb1NsVkUrbmhyWUhMV0syWEMxQ3hnd25tbDF6b3EwekU0d1ZPZnRiejl5R0VZZDRvWHFzcmZxQzU4MU5JdGZuNVNzRnJUNjJ0ZDlLMktLbGpQb0JpUXJlSFgweTM2dU1IdU12N3U4Vk9uaUFOMXBpS1E2STZYcGgxUHFqTC96aE0rWm1BMC9HNTZmR2RqS1ZKQ25JaC9Nalh5Nys2bE9hZEp4cDRLcGxhNnRURU1WemU3SnV3Mk1GeExwTk1XSk1KV3BZaCtqQldVSUp4MkRTZUpFaDBjTWtiY1FvRE83UndTbXg0MjBIOE5DSmxUSG53NmVIUkdZakg1RExaMlJPK1JyUFoxYzV3MGIzbTN6V3RDSU1wR0cvNEIzVUV4QVplZlVHN0tVYThxWW1OL2hDRWN2ZDd3dTBOM1dZMG1WWGI2blVYUWIvSytrOWVLSFFSR2YwSnR2VXorL2g0dUVaRUJyYzFHeExqemg2YklhcFpGaTFVbklkYnZ3eGxESEtiS2czcGVVcE9TWmpjdWFZWlB5cG9QOGkvdTJyWFhrVEs5dVdwd3FmRlBaTXA0Tm13ZDhrT01aMTd5MUZvN0FQcVZFbU9KNGMxUm1jcGF4cjd1QnU4a1BYdVpOVkM4Y0Y3TjR4MWVhZlZNVE5sdjU0a084dkk2dis3NHRvdTUxbjNtR1NZWFBvZnRZczc3OXVTZlgvY0pxRFRaUk9tMWFFV0Q0V2IxY1ZCa3hhN0g1TGx5Z3Rhc0dXS2pKR29WWHJsVHRiM085RGJERFFrblcyQVZNSWgrWXVvbFhNcHlxSit4dVJOVWRXZ2lVNERzeW10d1dOaFIxVXB6Yy9WQ29wc0NvcHRJV0hYcSthdkl5NHh1T2R2ck1hc2t1dEVCRytlMmVYTW1TU1p1OWZwYjlDT2RkRTdXK3M2bTh3b0ZwaGNUT0JqYmxQZ3BZSjVycFAycFc2V1ZNa1pCRXhXaVpibWRxcmlkenMzdkFObWxxTGVQUGRqRnJvMm9QaWRCODVsa1pxK1Evc0FIWVBkVmszQnM2bjFHTFozRkFKYjdnL0s0T2EvVjhYRTlwTVRway9JVmFyS2dPYlJkWWZseU95TS95a0dCYWRubjUyUG90MTVqSlJIUm9WYkhPZEloK2dacUJXN2QrYXBNcUJTZXl3RGlraWsxZFBSaEhqTnRPb21vTHdxSGM0d2tRNlFDeUJiSkh1L0YvcXc0a0Q1NHZ4SUZBM1NyWWZMZkJoTEVrMzdFTDczQTVjeU9kdDhDQ2dZeG5RL3hBSXYvR2FEcnIza2xoUzNVWDRQNGxaOVNWeGNGWW1VVGpRaWh1QUxLc3lhcytKSTlkdW9rNFNGWDZPekxKc21HbDZBMU4zek40aEFsZXk4cVlNSGFCZHpLb1BZeFFPSGI1NHNnZGs4c2pTRzdzblA4a0NVTm1sNjFPdVE2ZkJUTmFOOTlkMVM0Z0prRVdpWEFoTWxTRUNtWnV5MzJGVWxrRmNwNDhCZTdQK2pZbTRkUmNwU25YdG9sUEQ4NWRvUTZNL2t4MGJzREUwRTdkWTJLdmhWZjZDM2NiMXloZWlMeHN4SG1RV1d3Uk10T0xwNkNZS2M5a0szenE5c1hyMG16SExxSnBFczRobEpqcXFrS0kwczA2dCtIaTV3K1RtMmY5b200bDJ0NGlESGNXci9tcVRZVjc5VEJndGcxMUFBaUloVHYwZGdraHA3SHZMaUl6M3U3MDZBOC9xdjhNV3NXMEFwcjVKMnBtK1VvcEFzUm5Ga1dtK0dWUWRRSHp2dXJuYTBRbnNmbEgvVXo2dUxWV2Fmb01IRkUwT21BQ2I5QStvWStaMWdsQWFHZHR2TDFDUzNUL2xoZnZPSWNvdGEwTy8wZlB2TFVYbVNMVUdzKzNZa3gyb1FZUTdQSmFyZUFFeVhOUUYzVm1XV01pdTZ3VFNBanNtclR2NWxTdDRLSlpabFlUamlVNWZRazB6aGpYUHV2Q0Z6UlA4SDBMMm9CRlh0MkJFYVc1TDE1RW4yTWFmaGxodjFPaEthQzJERk1yaDNiLzFVMVlQL3RuWUtRWG1hNVllcDlGQ3BJT2p3emsxOTh6Wk1TK2RIT0lMdHA0RVo0ekkyL0czelUxUHhkbHhlTTlaL0tMT0U5SEZRaFQxUkQ4aVc3dXZySUVRSzlyMVhmc2hvL1JTY0k0cGxKWnZPSEhDdXc4dFB0ODJPZjViTU83Q0VkbEcvTjVQM0RyOU44VHBCa0R5dEJOcEg3NTZlSDB0QVprblhuL280QW43c3lQQk1ITngydURKSHBFanlhVnVHMUlIdmNiRkdPS0F2UzNyVXdpUmtpMFZSZU1aOEhyVFlQQ3pyRW9HejlpUGp0T1J1Nm5tRVJQeExmZkovUW4waU14MkNlb2V3VnZnRC9kaUtXZ3RaUVdYakFPRGplaFVpWExmaHphZ2c5Vko1VnNLNDIrNVZiRXYwcTN3RUluZlZ3bWl3ZWVRelpTUUwrallGQ0ladTBSUlJ6SFBJcUdQdEliODg0WHJzRUttdWJoNFFzL1dzamhDbDNkUDRGdzk2U01TRVZBanBtMnUrK2lhcmdvZm1LNVB2aTV1Y1llWHpwN1p0cUFaVW4wVHkrZmsyY2hwb2lsaEdtMWRKYkcrdVNYVVZJSTRRQytIb3RCNFRaWHdKSzVpVklnV0ZBOVFYRFdTRDIrSDdGd2I5NWFnSzJ1ZW1vMEtxaEV6SllWdjhnYkRsSC93MURCYkZ1Z2Zod24vZ2RnMnZBUndRUUNUMDFPcThPWlpHeG0rWWhiMHFJQVczUWJ6UUVENThPRVZNeXE0NmRJQ1FxVm8vejNiK1NnKzQzaEdUZnBIWUJhWHY3YU01dWZvenowL2N3WEEzdTRnRWV3bVAzdGhZU2ppVytoQy9lR1Bia0dSdEdRVkhydE1JN2dkbXlCR2J3UVppbXN2R2R6VUpuekdtNTk1SW5DaXhiMWtvRnRUeDhDeXZ2V0dhY211MjBUYUVDbXV2a2FTRXRPUytwTFdDRjh2Sk55Wk9TOGV5SDA2S0hlazhzUTRXQW1rTGNCTFBaTUVteHJ5OWFlRmRSaVgySjRpbEYrOExRUGhPdTc5S2I0QWlNT0dlQ1EwR2Q3aGM4RHdNV004SkNuZm1wSzZuNEJSTnJOM21IUC9aNGVJbUlsK1B4QVErUm5YWERNeExiUm1TcDVXcHUxSURBQlBDWnhmMVorTHhQOHBkQ2swQTJZM3lWbVYyNWlyMDFwcWNhNXVEVlpiUTdKNHdSMVdLOHo0UmFPeVg5UHBnQkNmdGVPSjkxZS9TK3VzaDFtbFdXL09XNmhIUEFXZVg4elc4THkzdTN3bW1ubGg5MExPZUM1MCtlQ0NPU1JjMTk5T3NWblpMQ3RIVWpYOGFyNWdlRDdYcWJMVXVNWGM4c0ZlYk9GOXR4WUxPQytVMVMwUlEyd21JdStJL0VNc0ZSOGdjNi9tQXNVMDR3SU00dFgrM1A0NUpFZE1ib2J6c0dXK2lWNlZNeklaTUZ0OGcxNzlUcGkrSU94RzZoSTBKV2pUOFRvMjRBOTlCMHZudzVnNStqM1EyWmx1TXFqMzNVd1hONnFOZW1zbEFlajhKUTJnaWEyM3FxaGcrSDduNU90ZjcycCtKYXJmdk9YaWtaMXJxN0E0SzlJRTBNcFNOVmE4WmlpNkxWL1VrOGVHYzdYQUtEcmNNRVhTOEhuZjlvZzJFNWprOUcrQ1ZtN09oc2tEQWN4OE1Uakt2bDZMeUEwYzV1VVNORDZNUlJTOE91dmcxSzZsZmVuL2VBYlVlQ2ZtTnJNbUtjc2hURG9QK1ZadTVwc3VKUTR2eE5xMmRnSnFtSlZHVHA0Mjh2NVRYYlZRcGw2TEJycThvbXh5cmg3RGRxdlkzZEtSNWxMSnY0c2plU1FCQUMrTkMzVUZDVnNQZFJwZThIT0JIajNVaGFaZXRscndYU0o4ODBpZW1OazRaVVlCNU95NzkveXlQRFlVdVpuTm5mNmtBS0V3bTFvUkZXZzdWTkdabTJTcXg2V2kvek9NbHVudFprT2x1ZTRtMjlYd3FoM2N3UVFMQnByTEw4VjNPTGpOaVVRcFpGcWw2aUxPQ2JEOGxyNUxhMVBVL0Z0Tkl3clZHaUJETnB2bGFVekl1UnhsWG5GNEJTVG1DUUVqNG8yelRwVTlkUnJ5cFR3cmxITlRxRUhMU0RqdEdadmlHWklPV2RqS1pGUTJTMGpRcjB5RjcxKzA2cmJKT1UwYldrV29Ub0F4MGxqS0dNc3VzNUY0RWx3OUV0TnRZNXZPVzN2TUFyamUvdWlaTDRobkFYT3JabHVsVHBTYmtDdUpMZ0VXUUV0dHNTYlNLRTVsaHZmK1ZoczZML3FRZ0xzTFpNNVIxa1ZacTdaZFFqYkhwUEFWNFV1emdkVExteHlPdnFvVHlDeFJvNUM2VWVsbTRxWXJ4anZtS1hyamFmeEdyZjdFbFNLelBBcmJuM2I2L0pha3dPdXAwT3hQdWZMRm44NkJxODkwUE5Sb0xZb25WVDVIZGd0YzMxTFZiQjRtak5DcTQvMWpETE9Ib0pjdHl5a2N5R3YrMEtzbmRTZ1pkVW15cVV6REJMbCs2Z0MwUU43UTI0c01PSnk5SU9DV2g3Yi9WazA4MWFhc1dVS1RRaVNqYzdpUTBETTJId3pyOUVKc0VYUC9hbDVZT0hIbjBIYlBUaU9JcFh3TnoyVCtNMldGdkc0UEpGTC9YWjN3SDJLdUs4a01zRnRvSzFxYkpBaFRZbmJibllZRFZUdGl3d1Q5RHZXWG4vMEtPcit4aTZwOCtVTFh4aUJWWGx6TGpOL3lkcHRoamRNUmpxd21ZdnV6UWFKTWs1TXJqY2tCQnpvdHcySmEvTnNUYml5L0JON21UZE40c0gzaWptRzZ4Y2dxRHNNdDZNSVpjVDJrU0NYVnlxUWZiUkVKYnFjSzV4dUJ6Ykw3QzFqUUUxRDZKbklYaGt0SzJ1ajlaSXRNUDFhRlR3YktrclZ2eGhxUkp5TVRwOHQyT21DTDRLTmY0R08zajFYV1l3RHdHNFpzb0wwMmpNOGU2RVBRaVZ3U0UrSkpRcXJDaHZLUzZGbEVzYi9QUVo0SnFnOWE3TmczUVB0eTZjVFllbm90RGV4KzJ6cG1ON0g5VDhSYnMzeTF0MllOVXhqZWwrOVIzRVVlUk4yMG5XeGx1MkJYOTgvSWhoSEhZa3grMUJFOUVncWJHYXZlb3BKUjRGQUdEWitaY2wvUC85a0FBUUFhQUVBQUFUQUFRQUFQQVFNd0FnQUFBQUFBN2dGbFFBQUNBQWtDQVFFS0FnQURBQmxVYUdseklHbHpJRzltSUVacGJtZGxjaUFvTXlrPTwvQkRCPgogICAgPC9CSVI-CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24-CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I-MTwvTWlub3I-CiAgICAgICAgPC9DQkVGRlZlcnNpb24-CiAgICAgICAgPEJJUkluZm8-CiAgICAgICAgICAgIDxJbnRlZ3JpdHk-ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8-CiAgICAgICAgPEJEQkluZm8-CiAgICAgICAgICAgIDxGb3JtYXQ-CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24-CiAgICAgICAgICAgICAgICA8VHlwZT43PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MVo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU-RmluZ2VyPC9UeXBlPgogICAgICAgICAgICA8U3VidHlwZT5SaWdodCBMaXR0bGVGaW5nZXI8L1N1YnR5cGU-CiAgICAgICAgICAgIDxMZXZlbD5SYXc8L0xldmVsPgogICAgICAgICAgICA8UHVycG9zZT5FbnJvbGw8L1B1cnBvc2U-CiAgICAgICAgICAgIDxRdWFsaXR5PgogICAgICAgICAgICAgICAgPEFsZ29yaXRobT4KICAgICAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPkhNQUM8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5TSEEtMjU2PC9UeXBlPgogICAgICAgICAgICAgICAgPC9BbGdvcml0aG0-CiAgICAgICAgICAgICAgICA8U2NvcmU-NDc8L1Njb3JlPgogICAgICAgICAgICA8L1F1YWxpdHk-CiAgICAgICAgPC9CREJJbmZvPgogICAgICAgIDxCREI-UmtsU0FEQXlNQUFBQVQvY0FBRUJBUUFCUDh3SDVnd2NEQ0FyQXo4QUFBQUFBQUVpQUVBQUR3SUFRQUlBUUFJRkFBRUI5QUgwQWZRQjlBZ0ZIUUVSQVk4QUFUOWJBQUFBREdwUUlDQU5Db2NLQUFBQUZHWjBlWEJxY0RJZ0FBQUFBR3B3TWlBQUFBQkhhbkF5YUFBQUFCWnBhR1J5QUFBQmp3QUFBUkVBQVFjSEFBQUFBQUFQWTI5c2NnRUFBQUFBQUJFQUFBQWFjbVZ6SUFBQUFCSnlaWE5qbWNvQUFabktBQUVBQUFBQUFBQnFjREpqLzAvL1VRQXBBQUFBQUFFUkFBQUJqd0FBQUFBQUFBQUFBQUFCRVFBQUFZOEFBQUFBQUFBQUFBQUJCd0VCLzJRQUl3QUJRM0psWVhSdmNqb2dTbUZ6VUdWeUlGWmxjbk5wYjI0Z01TNDVNREF1TWY5a0FCQUFBVVZ1WTBsRU9rZFNRbFF3TWY5U0FBd0FBZ0FKQUFVRUJBQUIvMXdBRTBCQVNFaFFTRWhRU0VoUVNFaFFTRWhRLzVBQUNnQUFBQUUrWXdBQi81UGZHMkFVTFBjTHM0eXpxMENpVU93aGRLWXU3QTBvN1dZcnhjc2NVc1dwNkpLYWh2Z2JraUlveFN3MHpZbzlGZllFTFpmaEJNNnJwZk9BZ0lEeWlJZHhOaUo5Y2FSZTlCS21jSzRkbWZ6QWdJRHhBR2JyS3B5bWFZUUwrUzRBbzZqSjdNajhCNEQ5WWhCZE5UMXBLSG53QzRRQ0xBeE5UUk54MVFEM2cyNUIrU2lOQXQvSFdBQVlyWGh4eDQxL3FpVFZrS3VtTjhMTnFEVjlsSFR3U1crQW85UVI1Z0FxZ25CUGJ4UlYrRmg5YkNHVEZMMnVMQWFLYTYxcS9LVEF1ZCttcW84TDkyZ2lSaGdDT3dtWml3cW5wRnE5ZFN3WlFtQmpZYkxLb3RZQXN1a0Y0OUZCc2kzQURBWnZ4SEhncmxuc2tuMXFFQ1dNTFlGVDJmdHovdkZBeGVMaWdMcks4ZjFHc0RReEx1Rzk2NWc5eDRHNGRNQUFjSVJxemh2c1lVb0U0MU9jRzVJMGN0Ny9QOGdBM0VDL2U2ZkVVdmo4WmY4TXMrWnd2Y0VuMHQvcEw1c2wzZ0ZHczB5N0IwaTRIUElmU1plTlFYUlBjbHQrR3I4aS9PNHBaMlpxbEFObnhCRHduejl5QmlDczYxTEt4Yk9aN0ZxMElDZzJRRjJrMVBGbE8zRlpQcDM4NUpLTlFCUkN6RGlFT3BMcjBFZHFINTY0UjZlM0w3WHRBZUtIZ3VwUkxPZDlZRGtIRFdFb2IyYWUzQktMc29jRFFENUJuNUY3bklOU1ZlUXVKUHRPOEVzWWRHYWJwM0I3eVVDTzVHMGErS2RvcDFuQlV4SjVPSGlKbloxblpQNGFROHpNeFNBU0xySlFIakV6aU5temNSM2EycEk2dFFiRyt0ZnYwWFJ1NkZLK2gyTFoyKzZaQTBVOTBJYUQxUExRRlN5QW02TmpCWi9RYnlXTnhGdjZXZFNxSG1yd0xOa0pWbHl0UHpYZ2ozRjY2c2Q1VjZ5eE5UV1dTcXBGNWx0em9IaFVhN0JDenRIQlZGamxpemcvZjFOUXNPay82SnJRbXgrRVNEeVEzdlNWSVd0SkpVa1RBUFhvbzdLcG53UnRhME1vMitMKzZDOENCNlJxS1g2dGcwY0FLeFh5OXdxQWhvS1ArRFFNaEx3K1BpeHZFRE9vOXpLRXk4ZEFvNlBvTzljdS9QVDRud0FJbnBreWU1bGZjckJMWHh4bEVhQjJzTGQ3QU1lai96WXJTakNFUXhBSUZ0YnhTS2lXVW5HTHUrTTJmM1J5MUtvbXZvRG5VdHJJMDV0YjRyb0Q2bGQyWnUzOG10S0VUeHdVNW8zMUl5N0VGQ0xvamtORzV6U2RhcUV6SktaN1JwcXc0bVRLeitUSXFvMjhRUWZ1N3BVQTFFY1JFbVRrWVBsbFZjY2V1KytOVFFzU2VrMy9BRTBsRHRROHJjWGExdU1vVGE3TjBjWHBNVmxmRWhtWFNkbks3ZllhbGcwM3JUN2VIa0Jya2tsZStIY0taR2N0NktBSjJFa25nOFllK3lMSjdnMjZLRDE3TG5uNGdFUzdaRS9Ib25oQWR4UkcvSG9tZlFuT0NiVmVYcmFsOFdoWkRIWWFnSHd1RE9lWlBOUGhFdmo2MUJ2ODdxK1k5L29SNE9VZEoxNUV4WlFYYXVQSU5heHdlWFE1dUJPOVg2ZmJxeVpzVmhQeU1uUnVsVXRVbUtQa1N5R2VMaGdRWEdpZmlpTDdubWcxUE9DNFV5cXpndllidmJDL2M2VDhJVm82TDUwNGhQdXJ3UDRhRHBXODRHRTRhMVJVN1h5WXhjaEtRYTRBbzJSM09QOFNFWEIyaVBNZ3Ruei9OWHBJYW85bUMvdU44WW9SY1QyRUYyZXFPYkZyMFFDdDZFcVVkMVkxNGFoQ0JHaUpCTWF3bmtVS0VOa3djQ3BsRWtqMytuWFMvZ2Vuam5DS2I5WDhuTlBuTGVQU0NObERISjZjUm0rQjdkVEdLQ2lkVWU3QUV5bkZUQm5VekVzVUxpb0YvcTRSRTlVcWtqdlh4SEM1SUFTU0VRamFjN0ZINzZ0R3RiMlVpS0NVMTUrbEpBejVLeGJYRzFzUlBJZnZER3U2NnBEbkZNYitGcjlPcnkvOURvU2FTT0VwakhQTmlxS1hKVHJTQ3JTRFRMTm9acTN1L29mdmdCZ28xak1OMmRuc1RTcHBNMmJhN0Z1Z2hnU3pJWm1DU2pCNDBjRnFkT2RabSsrUVRuSnhESTlmK0hLS3JEakNoMVVBYUN6Qm1HdFVUQnFDMkhCbG1PdFBDMnd4NXg4WXlOT05ZUGhQa2t2TUlDd1VnbnBmc0JaUCtDb1BkbEJ1dnRQTHIwWkthV1ljK1JZYXNmSC9hL3Vjc0RTR1Bna3Vpbk5UWHRBSWpEVDlESUVJOFlkMVIxb2t2OHltOEVjckh4a21HL0hIQTNjZFlMTzg2MStVOGRLTEhHbVlPZE9PdlhtdTJwUGhFMjlKOFhhQjRqK0RlYkk5ZEs1Rmx3OXN5RVQrd0Y2VlBnc1h1L0VKNG0yVHFMWjlOOVBNK0t5UE5rR1Z0N281MDFBMWJCU0JHdmNGSGZ0RGhORnhDWmltWVY5RjhvYW9jMnRQVlJYeFZvOHJic2w3MHhycWhXN055MDhEU054VmxXeGltTXFSbFZzQTlPS3F2UU1LWjZHWUl6bDNKQithYzJFM2RaeHVsTWc1YlZjVzJHTlQ0RjVBbUpYWFplVTgxY04vVXBjWjh4bk1UWEtpK0E2YzBqOCtUMVRzaXhOU05QWlNOajRLVTZobHBmbjc4cFluUDlwdXJwY3ljZ1REZ1BFNW1kcHlYTEVhcjNJQk51MTBqMWVDK2wrcGZBSEtOaDBGRVNFcmJRdlc4eWg1R3BraHJ2Y2lIbWNGWU9DbTg0YzBOemNFY3ZjLzBzWFlpMURFL20yVTkzbVlybXJobnNhdFdUbVorYVpmUENQa0Z4ZCsydW5uMkgwNStzUUNreWtJTUJ3UHJ1Z0FtbFVBeXJaTzlPc085TTJMdTRUVlliaE1odFpUcWhYN3h0Q2lSc25zUi9pMUs3TXVIMlRtY05VdmFCdnhZdStmcWpjbTdvQmNzQm1XbFIrYko0RG5lZDNWUU1ZUUFhQ3ZkcVhvTnBtbDArM1drSThKd0QwaXlJVTlXYVdaa3JsUWo5TU1RdWtBT0R4TEJyYS85MXFjSWRyUUhrZVZwekR1dVQyakUxd2U3RVhKVTNiRlFsTGxLOVo1Ykx6WVQvT0NNNzBLb1FPU1p2dnJPS04rTTFIdjRzd2NaSnU3ajdVQmh1TTlXN0Ztc3l0ZDhjUFZmZk9iRGJVWSt6dEpoQ0FsZ0hMUVNOM3RGbU9BMjlkNXFVUFVWOXhsOU5yNHk5UEsxN1E1Yzd4OGczT2tXcmxmUFdiUkpOckRBNjVTcVhDN2VSdFhMTUZDaVZpRjRNbSt1cHFUV3VTMWttMUFmcVBKSjRBeFhEU284VjhROEg4UllUSXBIYjZTZnlJL0MyQk9xN1k0SlpidDI5aXEyUmJBU0xiVnBCeFFLTnlGRzVlR2ZCc1NWVHd5L09vWC93cWVWMGFoSFFnR3RiSWMxcGtwQU5DZ0pMU3pEaTQvUlYybnV6SzVGVlJRb21KWld2TlNTVUxyaUlGMUg1akJIS2g1ZUFFUGFXalNoS213bWRWTHc1c0RreHQrem9KaEVHbmEyek52Q0s3VkdxT3FvQ0l1YWhKNGJRQkNYTXkyZlQ2U2dud0I0RlQxN0MvQ3lqb0NWTnFyUVoydXIvY3d1L0xMMGtwUkdwbHBuTjREd2JzU0xCUllFOGVFNTJVeUpxajVxSTQyOERLZ2FpeFFBZVlISGdCU2FkUXFsMzl6VkRvakhqRnBINUsxcXZZWHo2WjdmUjNUQXhMbkgyMnlUZ3czZWlIYUl2Z1poNisyK2xaZFJsQ2k2b1RoamVWTm5uSWZRTkV0bkpxdXJrblUrTTl3YzZRNFBQQk5CeDB5MzFENHJZZXA1eURHNXhhV2VIMzV1c3Q3TnN0Yk55OUpwdXIzclhyRjVTUEc4bi9Sd1Buby9WUEE2c05lRGtQclJzd0JFY1ArRU1xWWV6V0tHY0Y1VGFselR6TW1OdUdIeGZ1S2V5MEJ0OXI0VU14a0tDUDRSR1ZHYVBXV2grWlhpUWFPWnNQd21LN3VxSEowQWs3VWcwbVQ0dTdBRzcxY2taMXEzbHVQOTZWdGhaNWR2WTZMOU5zR0lUdGptQ2xLUWNWdEJ5MGU0ZmVJVEpBUGpsUVBLOWJPb2RNZW1pY2ppRkJnVWF6dTV1NndiZjlad2Y1UTRSMjhnODZUT0ZVa1RreGlKWnB4b1F3bVBmTmZ0Q1BHQ3duYlQ1VVYrWkdNQXQ2ZnRRWFRVRnU1clR3VVdmRy9VeGhNQmtMRFZYNCtlQVlFYzZ5NGJLZVF3ait0d01scnI3MzVZbWRIcWhKeUloR2RMd3lSUDJlZkE1ZXBpVVFVZ2hSd1N3Uk1YU2lMc3JxemNRWS9wRTFROHh2M3V0VFZWYmM4dnpKelFRWkFUWEFMeXpKc0xxc216VWFMNlZWWmNtbjNXQ2xQNjA3U3drSGR6SGtCejE3OEZNcWdJTWk5c1dGQ2Z1Y1ZJTWdMcndQd01PY21CUEExMFQxOVJldE5qWkNuc0FHSGg1YytZRE1WUk1NWnNzYUNWcFNtNHpXVUQ0K0xuS0VhU1dvbGpUM3ZqMkY0bTZaeUM1RnM2RXhZbEtqT3B2Z3lYNnorRUtiOGEvU2VnNm5CN212R1R5N2FvRVJ5NzkwQllKcjZMQ0UyUllPa3hsaTB3MEZ2UUpmV0c5aExXTlZTdmdldkxVTjV2Zkw4MGpKbGNjL25IYWZkZVRIUS9uTXNCSTlKVHpKVklsR0hkcE9FdDFZSEpCcTFrd2ZNS0JKRlREYUZhV1ZHZlRGY0gwYis0N0pZNVpOOWszUk1scTdoazZvOGh5anhVUmluZlBFK1YyVnlhbHFUbFI1Mmt6c0pnMU91VTJuY0U1bHZONTd3V0VVSDNqejRaYnErQkNjV3ZFOWRMeWpSblRVMDRNbkxlczhqbE4vREg3YzNPUklpY0pqR3oyajhNNTdXS0VvYWpXOVBmOHpFQjRTc3NuclZ5TUZadjZlQi8ySHBpekM5WDZ6N1JYSUZibk5qWFNxdXRZdVM2b1B4VjdpV09KQzZrUThvZ001WVM1TGdOQ2lOYmtLT1FxUWNhcUt3WW9rcVR2QllnRnY1cGlHQlIwVE5nbW5wRXlvNVo3akZPbWQzNGNYTnZDckRoR3VURG5KNDE5Tk1pSjd5MmRrTFBmTnZYSW1kZGV1OExiRlBKVEZWTStXcG9jM0V5OVJMR1VZWTlvUEhYdXZmOGdkSkpQSWh5VHU3ZU5yMUtqSk1qSjZzTVQvbDlDTU1lbEhZS3ZkY0dtR3J6ZkZ1WkFEb3pYb01XYVpwUEl5ZWZDWVdLaExTNXVXcnE0OFFyU0dNZlA3M0YrRDRGb2FHV0loNWIvYjN2Q3BQM25MMHZlUkY0TW1XTDVxY0xCbUt2OVBqbVVzOWRuZEVjazRsNDRRK1NtWExPZFNkdkFYbk9NdjFFcDZYTVdzWDhveTkxWWQvU0NEa3p2dm96dTZRdzJTeFRhditjQmlXS1JXakY0OVUrZ3FTZWw2dEhVOTdwdCtReHNaK1Y5L09La1lnSFhlV0hKZ201REdmTVRVcGg0Nmt4ZFZ5MERHRGxoMmRxNHNtb0plQUN1aERsNlc1Y2prK29Jdk45OWVvbFBBVTEzNk9vYjhwc2VpOWpNV21aSEkzMUt0eTdQMFBpK2xIcjZpVXdNRjFMNmt4SEt2d0JrRDRWMjlIeTd1MlBTaFBhTm1HYURxM1haZ3BLbTBxeTJ5eXhjcjMxKzdDbTZQQmx2ZkFHOE14Szk2NUx0eHpCUlc2RjZsRE9UbXJ3dTVnMmVuREtrTlVSRjQyMGNxWVJzakNrL29KN1I4REFyaHdOY0NITExsZkIrWExkbFhhSU14WllvbldSbWhReFdPREtmajYxR0I0V1lYZkhPUkxwdUU1bFN2R3JJdEt2eHJhYmR6Qi96RHoyWThpUWRXVWFlNXlPMThrNE1xSkdhc1h2UWRaK1g2dCswbDQ1elpXY1czNlU1WE42NldMMEMxWVVMeW1ZSjQzbS9OZkNVZmkzN0VlWCs3VG04dTBTcFk4N3BhS1VZdm5OWVA1anZadTB6anZBZlVjRGJJZEpUMldjOGV5U0g2NUp4anRPWDIwaVNmR2p0QkQ1blc3dmplNE5NbzBvSC9ieVRHUUxLdTVyRGtrcmxDS01wSjFjTXphQWo1TnVRVzlidjY2RWNVTHdNeXV5aU9Ta214dWtHZEVURm9VSktLZ29zbmNGOVVOU045NnNLek16S1NkZWh5OEdCUC9mWlRlTjVZa1J6OTIySkxLdW5iNmxqZVV2ZXpFZmc1a1hSYU5xbVNsZzFCa0hlSFNnMGVFMTAvbW9UeHYyVDlwZURkSUVCZHRKK1ArSkptcWtIeTlZc1hGREU4bzdTSmUySjhDR0I0UG0vZWRwTlVjOXZVMmRUdHJXYUlOWk1jNHNkNlRJVjltblhJSEJGM2xtd00xdjFVUmY5WVN5WmNKL0dOeEVVek9qc28raXNDdW5tVUliUk5UZFFUVlZ6MDdwOHVaSlE1bFFHR0FPelFlRGtFeHNQc1ZwbjN1dFh1dktqZTQ1MDdsNTlXZks3MVIzU1FROFJHeEtoOCswZEUybnF4V1ZiYTF0SzJHSjZidGVPK3hlYVVoUFM0Z2NaWFljSFhpRWlTMHptMGk0Y3FzaGszZG15a21TTEdhcy9BYUFwTDV2TS9WblBIc3hjME9DUlRmM05FZWgrWHpZd2NheU5tdlBYcm9VN2d4VkIwSEo4bG54bUUvTnc3TFFWcStWQmYyV0JyT0dxbVBseURNOXMxM1k2R01sMUtWcU94SUhhT2wxbnlsbTJxYnI3cGx5bFptRGpOVHQ5ZnRXekU2UjBFZVc4QnV4WWZISGxlMUJlNGhQRVkySDZybTRZdS9zRzAzR1VYRGJCeVVPQ2tnUHJiRVJQVS9kUE9MbnZ4eWFHOVZpbEppL3lhc0FCZ2lIVHU0SlBNUE1pdmxRUGw1QUNoRlVSclBsZlVIK0RHQnQ1MnNaNDlHcFp6TWpzMHFiZ1NnL09vdDNjcFpiZGh4NDQxQVo3bG8yVWNhcVlxM01JV0RrRzVtejNuNzdNZU1JVWtocUNlL3BZVU8zR3djNEYrUGJHVXMvalBWL2RMS1pqcnZFRmVWUmg0SlZMSmN5endDeERMcDRHL2NFMXpzeVRHR25tYkhuK0hFVTd5eWN3amw2NkU0eFdSWjhIRHN3QVlmcnRONXFWVWpoandCNE1Lb0hoZ0NFenpmeGp1TDJqWjdEdytTZE5nSVIxRUcraFcyMkdvdHVZemx1RU9ocVR3alExeXVCTENIeHVJcldNM0YrTmMyN2cwYmd4WTNGQjFwUzBBc1QyZEhyUEQ3dHdpM0g4TVJvRThwTjhWdmJEdjBwNVpiRGkrRUhFc3VrZEp3Q2pIQjkvMkxvejdXWHFMSmp4d0xjNGdyeG1ZZmk1Kyt1RUlJek9BU2krMUpwRFpsZ09sbWNZZG5PS0JlYkU3TEU4QWtrRU9yMVJja3FvZ0htZFJ5ckl1OGJmRGt5eTBqekxLanNkVEh4MnNrdGZtZjZBYWtOMXpQUGlvVXprbVpJSVRIaHJFZEpzY2xYU0NlamZKcWdMMDNRMVlPaTNZSHc5L1F2R3o5MGhFUktsRDBCTk5pK0dRejIwTU5iNHFMdVA5MVQyZitNbnZoTWJJOUYxVDF3NHI0SkdxcTdnc1JtVEtOYUJabkxham95cXdXbnp0bjcrVnBkRjArV2oyM0tUa0xmTmFnQ09OenVad0gwa2hXSldUbDBuVmNtNG56cG1qcVpCOVlKcWlDSE5Eb2xjRDMzYVFhUkl0RTlqQ05mdXovUlFYTHZuTzlqL0kwbS9mVVRpWTNvUjhmSjYvU1ZQdVRBUjErK2YxMlAyU1J5aXJvZXlpaStWUGMyWllRM3NCR1F0Wk9SSzQ0Tzc0M0hzVUwyWDN1bU9nT3pFcjFFei9XdVNHUGNTME9Odkp3Y3V3VndhVXJ5cFZZTDU3VENoOTB6ekg3K2RHdDlwNTVHb2Z1bUdYWHpmWFM3eGp5T0tHbGFsZzU2TVVwdmNsWTRvSlczOUxzc0JsZ3dkUkoyRnBlWWdRUU5QbmtFUFdrNjl3WXM5YitxUUdPYXA5dDBWcjBKcStLdmJaOXZtS2FOc01kaEpOL3pPM0NaRWIvUDBrUTF3anloaFovSHBvcTBVTjUrN3lpSDVQSHFKTHRIcTNrTHZoZGJoZUpjZWEwUVlzQUhxTjdSUHJoSnlJNUk5VlhJT1BOVDJiNDlBTDJUTXpzT3Zid01zeWUwQ0swdlZLWFdoS0dsVzd2WGQvMzlPRXBVN3FzMjNKYzVBRWZic1FoMUdwU2dsUlNIazlGTzBkM3JjRndtTVRzNXExZkZ5UUk2RXFKS1J3cGdHcDJzdGI3ejF6UzFibUFrSHJZbTF3NlRVOWJ4R2hiaWJMRkhNZ052UTkzdm5lZFpTWng3YTJBODMybk5NeS9KMFdnMEg4V3FXc3d1WEZZOVd1ZnVwbk85dGhzK1d2OU5UQm1qMytFV3cvOFBNc2NSQ0w5NE1vUDNLMS8vbmM3ZXZCa2hnWkFLMThTUUhHZ3RTNnFNdXFxUDMzR3hOOFlOM0tlTElINkNhcnV3ZUU5NWU4SmFrNGtiS25UcndwUWlZbjk4Z0RDeTRQSFpaMGloYjEyb0lpeklESkdMSjRmWkdHbWdOeVRhUVI0c2xqcndGdTBsUDU3NWdqb1RkNWZPRkFjWUpsdmNBVzZkdTJuZHZCQ0hXMDd5ZGpQbUNJWXpBdVFFVHF1azNhZDhNaXlJei9nZFYxQzUvT3o5clE4TTdTZjlHZWRlRWNPYkZSTXJpQzNnNG9ZWnBnNWs1NDlMZFNmQmRJTGo0S0ZlclhmYk90MUs3UFRtc25UNkJhTVRVRkU1bm9LS2hCUHBwd0Rka1BzeFBGa0F3b0ZKZnRlZ0lQNHhiK25mTGxsNWQ5TmpFcng2UHk2ZDdJZWtJUStwQThob3dzd00wSjF4KzI0SFA5YytTMFBGMy9YN1NpNzdxb3pleG53WHdvZFBaMEFJVkFPaHlsMnZudlZRNUNiOHFBbmh3VUFqRFJhOVBoTXowV3JWOUNaaEJtTTFpUWxQTW1vbTg0Y3hUeHZ4bVlmS2UweTQzN3FxSzIvS3N4SzA3WlljdFdSdXRsUEpjNGROUHlIRHN5T3BWdXQzY0ZQRzVobVBZQWNYa2NzeElJeUloeHE0L21rNXU1aHNWR1I5WExhaDFRSWE4dE5EYU5UTTl2M0V1OWM1SXJUUmtGNUpCT053ODVuaEdYQmZOUHd6YS9ia250WmwyWEtEYVVoSTdrem5JVnVobTd1RDZSQVlKVzRRTGJrOGNLNkVXQUZOWStKL0FrZHZaRXFyWHJaSE5vMk9EeEE0M3hHOTB0SHdIZmE3bk5vUjNYMHErcUF3RXFqd0JYdkxadUtIZWNtOVF4ODJSL29IZUJycm5Oa0ZCNk93TS81UUhacVNFakZXZndrSEZOazAzLzlqTHJxYUtyRGF4bHFVUnJ0ZWxaTko0VXlQVU4yNURkNFd1ankzVzRvRkhZbUZnUG0yVE1oTkIwSitheHVlVk50Y0tCeVZRRHZyN3E4cHVPSVdYeE44V3pLNW1JMmlLUGNIcEFwd2pSaUdESlpQS0ZEdjBQUEg1M0lTVUpPSUN5cyszZ0kzWU5CaDRnM2J1RHU2WUJxamtQaTgrenloTVd4anBVQnRGVitUcHFYcUpNNUhUOXloS0kyYVVWVkppZ0VOaG8vZVFFSXpoeFNlOU9EQ0hSVVRBTkpJZFU5NGdIdnVCeWowNytTR0x0NzlGaUhGVFhvMFVnRGNLeHYvenFIMk5BZjA4RGs0Qmt5VW40STFCbXBwZzBPNkVjVEN5a2JnZnpBMG1Db1FoV2RlZHJPQytncmpXaUt1UEllUjhQZHhZQlBEL3JxZ0h0aCtmMEcwbWRTRTZvenNEZzJ1c2NtTmRpVDhBV1A1cnlCd1ZNci9QR0RjbFFIMCszdUpBZ1hLS1VCb2ZpRGp3YU5PUDFMYzhHODZIVVdBQjhlZ1dNdnpPbGlFam5qblBhRzVhd1kreUpSaStNekJyZW5CZ1Jmek5KSTlmY2xiOS9YbTdOcDRiSTg5Ynl4Rm1OWmJQRjVkaVdVVENJT3VVcCs1K3lZb3BlWUsrUzVtY0tGand5LzNReVNEY1NDREtjL2tTL1VQYndzMDZGRmtuYXNsV1ZzUjdtNjVRNE5mZ2owalNyMy9zVk1qMnBzL3hSOWpFdE0yOG9Zem1CQlNVOVErN1hGMVlHSVVNdXU2ZXBMbmY2SzUrL0FwZjBqT0YwNXhHdEUybU9XZzBwM2FxL1pNOUZBVlpSbDk2MVFYZlg2Unk1NlhaeENVLzdrekNEVndtQmhOcllvUEN1TTIxOW9pK2NxK21wWndGS1czQmExalppTEJPaHYwZEd1Z053WjFIOC9OY3ZBZml1ZFdiNWsvMWhkUW4zOGhhZ3g5UmdYNmxDZFIzeHBJZ0Y4RWRYMU1oOTB0S0ZRSko1aTZYamNOY1VjeTM3M3YrNlAwTVF2YmdjVmtYK0h5Y245VDRlWHZQOFhoaUNIQncwaC91aGMrbzRZNUE5UDRCZ2Z4NUUybUFhVFZhWmZRRURESE1ZVzdKbW1xZmxUQ3JVVTRVOGFqQXFzY1RUZGtoTXhrVWRHMWExUHlEMUlUclZGZm5NMWxiTFphMjRRTFI5MWFta1kvQkJnWExZYU9PcWJsdndibTBpU0NPV3lKVVhQejFQVjltK2Y4NldxbmZuM1dHSmROQTBjbFRkQkE2K09vaWdQTnAwV1ZITlE3QitsN1V5UEV1U2VrTWVVOU5kTEViUi8ydHNCZjR5N3MyV25uOFZoeGxiazlUZ2FQaXQ5MDlVMU5NamVrNGxKU2pobWhQS3c5WG5MQldXYkM5ZUtPYnMxLzFqWjhobWgvbEZOSFovb2JFM0ViTWpxWjErcUNmYVVMTjltaDZmZmpDN2dCbHlkZnV6eHpHc3RVaTBHNldRck13MDVMbXVuMXdHRllJT2hPV1oxeVNUOXJuMEltT2thVzFkekUrYWhFQnA2TTYyM3V6VTlONGhHWUoyanFTZk90VC9RTzRJREl3N0UzTElnWkd2U215cEVJcUpzd3FHU0ZWbkdFRmI1eVIrblVZYUtWeUJyNis0TmtMV2hiMzdsemJ1UUVRMk91TnZYZXJoeUwrQk9EZTZ0aE5lcG9CWTYxSllXYUFDbHdQc3M4UFl0elBYNTVZYTRnYVlzSWtwcC9GZmpPNVR2RXNWWDJPcFNvTmdPY01scDlFSXdvcUl0SlVYNnM5RmNHM3U0U0dHWC91TDl4NDgyZEZyUWxrakF4TTdBMC9JdVZxOTk1QVRGaW8vUzZFMUlzT3hLdmRhNVdWVmZNOTMyL3RjT1BsQ2QxV250UVdrZDB2UTd1VW82WU9lVktGdTM5eTJwSjRJU1RFOGxIQ0E1dDNFeG1EQkwvVWFlbFI3S1FYeEUvT2VManZPYVlNUFd3L3RMcGtsMVg0Q0FnSURtK21nQXdNYTB5SG9pNk1HZVkxQ2NraTFZSzJsNllsVnlnV0pvblFJVXRVNHNOM3RaNk4rNmRrZXdqMU1PQzhaYU5SUVhQRnpUTFZmOTZVZkJNelp0VkZXQW9GT2pxUllOeVdSclRHdHJwWEo5RnJDVzlaZEUxU2hwUXJkalpieXA0U2RaajNrUlQxVWYwU0NLdS93UnBWTkhHeXY1ZG1QbzBnSS9zbXhiTDdBajFPaVdJVkFUd2FqRStHYjRrNHFNRXhzOGN2RG0xRnVlVUt3Zk11UG9aNTZ2QVBsaldoZFVMbnk1aWJXMW1hQ05nMFVieUEvRHg1QlJ6c3cwQzBEbXQ1bWROenZrK3J5bU1MVFZkU0FkaTFOWEFaVDJXL3g1SzhxdHg2WDNaZnpLWTRmUldCbDMxbWh1SmJSK3V6QU5paTVzZmw3ZzhRbXJQczJjUTJabExWYXpoc2pKVzBzSWdrZ1RBZGdyZ0loTndrOEd6ZGRuV094MEZQOWFkSlVZeFZxZno1WEowdkV6NS9oY0UzMXpWbTJWWUZTZEdheTZ6eUQzYnA5eFdvYWRwVUJUOHVPYkFML1dCOGdsZ0sxWjFSWk9QZmliUHJPSUtWQmsxUUY0SEs4bjFTcFdFYytGZmVjQWxzbitWVytYclFLNnRHRys0aTdRSUVzMVhYbEJVWk5aMGZ3dGtsRzZOR292UnVQYnFsd3pMd0tCQWR3Q0k2YjFadzdBQzlJZG9WVnNvV3hGVndMOFZmVHhKbHpmSkc0eFp6YU4zd3NLU2k5Vyt6OUJFL05PeFBJYWswZXI1eDBRck9VQnhFbld1YXM0Q2VOQ1ZIVWZCWmN2R0ViRHNCWmpaQ1JpU0V2aXVrM3IzOXRXdDkrMlpCYWpUb0IxQU9rMFJucnQ0Z2xCRzFnMTlIQ1BoU1ZISlV4eXk4aWduUGh4VzAxK1pMcXdkMHE5L0xBdk9PaFE0b1piOEx6Z29nVlVKSDVPRkdlNWVCa0YxK1dVdWRyeGNQTUxiOW43c2o2Q3hPVXZzVXN4QmRqanl0ZTlicXgzdmVmcVlEY1NGWW5sUnpHSENXQjl2NUFjVlRZWURRR3VUUjZkVmFlSm1JVjBIQkFTWmkxeVUrMjB1UHNSa3dOeURPd2xTMC81SmUxSzlZdFN1dGUwOENRclkzSE9TV2llZG0vdWRpTEpZQVBJeGRXa3k5VDBaRGhwcXlCUFRBOHhkR25nVFoyZlo1VkdqMjVBOHN5TXZHMUQ1M2ZqcFhtN3M5T2oxR2ZGOUJsMnRCbDFyakVBeFg3bkt1UDRpLzF4M2RBN3ZtNG9xcXRtSHArWkUvREhFcXIrUjVZUjkrN0hES3AyUVJXeDFVdmdWMUdDcjJuenJtMHRYdnNvU1J4VS9iVFJZSkhkai9FNzhCQUo0a3NWeG5oYW1WK3hkZTJCOEVDQW9UNGprcW1RdnBtU3JaSzg0Q2pLMnJlVXAxamtNaWU4a2lFaVMxdU4wNzJXeWtQU2F5N3dseWpPQkR5VWg5VU51TjhEVXYwRFNIak5rRmRyUTZkdGdSbGVMVzhRYjJBSlRlSDAxbjRHeSsvUlY3K09mcGpwUC9DT24zRFM2N1dCd0gwa0Z4TmY1dTU4RU5nMWF4eGdwUm9rUE9vb3Y0MmhyNVpXQkgrTGRURC9HMHJsdnVGM2FobFlYSHJNWGtESUNMaWNyTmxqdVdiR04vOW1tQU1Zc0FSb2tTdC9WaFNSUFcvMUQxa2llYi80dFRKUVhsYVdUay9JMVVVQ2hXWXJndEtGZGxMZnZQQ0tFVkU3L0owaklyaEtudDB0L0xJSGJRbSthek9TYUZ4WUlHc3lpc1g0L001UjVWeld4bE0vTE14ampSQXVCOEhrWTRHNjBXR3RBTTFXem1TREdwMld3eEM2a3BqYXQ1WDRKdjNXRWFnQSs3QXNpNjZUS1pDVklCdTlGelROY0FHQlhBZ0ltZWVlbHhtaDMwVktqTjBWL0wySU8rOWY4K2VHdktGYmU0Q2R2ZTh1NGxMd0VXTmRvTEhjV0kvYXRTVjhQaEUrMXBrVlh4NTVDSm9wNWNscXhVOFlXdVZ6bWxRTjkvV3dIMEp5N2dWRzhUa01NYk5CQ0VRdEYxaXFiZGd2aVZzY2o3T2o1UmhDaW41TXZJekEzTmtZdEVlSlRNMUNGWDlFZ3BZU0xoVG52UjNtbE9zbkNVc2FKQW85dVFDUWs5YWV3TUxsK0k5ek5WWnVqQ2hLRlVSc3BaRmNZS0J6aFlucWpBUUxITEVST3JNTm9GQlpheVg5dEIweG1TZzB3WXhtcWlMblB4Tk5BZ1laRVlaUHk4cnNmQTdZSlJHSW9NWWljeWljTGxVTXdQUTFLelNQSHlqYkJBaGdVa1FtSGFFQzV0TmxsUVE2VmdVMjRJazVlcHJ3d3p1YWZVNmM5NVU4RmtVVVByZVVzMUdGWDI1ZTlqTjJJWC83SVlJZHhpeUJ1SGgxdUlEREpBUU9sSTFlL3RUVncrYVZlK2F0elZtUFBhb0FwckQvVlI1V2pPYk1NdEwybWZQa05HRjh4WTU0cUZuK2VNWjFuTExTa3lKN1lFaXZ3SmhWSWJUWnJnNHpqYkFZcnJUOUI0cTFuZFZuUnhyVHF6ZG9ZY3ZZZVBQdVVFdDFUWFNiUFI0U3lmRXRJeGpmY2tHRUc4aFVxZnNKbTlPdVVkNlZNRlZFY2JiaE5QazNnMEE5NnFSU0FDM1gxUHBjNkZwanNvcDFqSFpFcnhaV2wzeVhJVzBsa2VNR3V2bXcrNmNwTU5SN0VJTCs3Z0lUenVhQkFkUmlELzFmOVRsRk5jd2N4NGZCTlNsYlJ2Zy9XK0pCU29lSDRVOFR0QXVib2xRWXU0SXN2bEtWbkZITHFyMnVib252TXRXOUl1QnR4OHR2a25ybnJYOWhncGJMRDVPdUNxUUlpdlUvb2ZWTnBYU2lsMjF3b0RHSjBxNXY5cmRVRExLQ1ZPcTRKbFB0QlhsaVRHN25NSnZJekRTTUNQNVZMaFB5Sjc3aUttNzh1SGpaNkJjQXM0SGFOdFhzZ1o1SFIxb0svZHBtdVJyUk41Rks0T2ZHR2ZZQjhGNk1HS1lVV0lrOXh6UURWOGg2L1EySm40ZzZ2Q1RiaGZlVVJhcWF3MERKT0xDcnA3ZWFOOEN5QkV4RUFObVUwcHQxMGw1ZXQ2RDlPNTlheWY3eEM2cXpHQXlXZTl2eThScFhDOTRBWk1uMHhkZis5ZWs0d0tjd1RsUnBMeCtCVy9yakErdXhvVTRYK016L0ZGazBldnA0TjFLZ2V1V2VCSTdiMlg3K1NpaVlRZFBjb3lnY1paMi9Pd3hka2RBWnRhRTVRNzdpNmJkWDNIVnFER2hGMEcwTWQ5alN6dmg5WDM4NklGRkF3bmpzRVpiSy9qeWNvbTh0N0hVV0g1K25GYW9oMFpTUGoydDVTMGNFNFhRUnhVNHl0S3NpZW11L2I0d1FVVmZWUk1sa2F6YjZrZmtQM0pUL0ZSQ0RoVUYraXVDbUVyYW9GK2NrMVB4dE5mb0tMSU5BVWxMdk4rRkx6UUtOMlJvZmttOWdBa2RuVTZKdmFoQURLL1htMmNTWTZTM2hFMm9STHlQQjFiSHZHZHU5VGd2NGUxVlBIb242SEJNMm9Edmd3Sy9XejU3ZjJWN2VTUm5kV3NYMkdtcGM1VnNmTk5ua3lXWjVScU85VW5jQ0UrakFMRWE5aGRFQmpwRCtiZnAzUjRDck10RThTZ0g4aTRxWk1rcEIvendTTStNL2FISzI1TFNPSVNHQmIrUmlOME9hVVBJKzJxVjQySURvakNJMzhTN1orQ2JlZk1DMGdQUHZrMjRQKy9PWGpRM1o4YW9ua0FWNENzUmsvdVBNMmZ5Z1Jyc2I1Q25lcUYwbXd4TEVFUUFJTEVLN2l1Y1BhT3RlYXV4S0FzaWNsc053WnQwbFdteW5uZHNpVzluWStnMHlUUnJlOVF2NXFtdU9wY216cE5VRnhGeTAzdG5uNFpwWXJqRUsxRWNRNjRNaEIreTVkL0xNZkJCaHE2RndxenBNZDIwVXdYYTdMYjhkS252TWlhMm42dmx1L3FNbE5tYjlaV1I5Ymo5bHl6NnkvMnhpYjlkSC9XWkQrbzBmYmEwWDIwYi9COUFGKzl2QXhaUWthL2Vaa1JlaWo3QTZsVEVueWRxZnBBdVB4enlRNTN1UTlvVFIxOW5ESUdrYXU1UUhKSWhnWDZuV0hPamtxMVlMUTZ6ZjBIZFl3SW12Q1B3aDJqQlpxdklYanRudzN0SlRHTHFwNFhyRzlUV3ZMMXFqT3pXWllxdzRvQlF5UVdUNnBNNlcrbWJJN05IM0t2VkR2Y0JCL2swUmlOYTlpakNGZzMrTm14OGszekhHd1BUYmp3UFFWb3Zpb1NyUm80MGVJVUl5WDhIcVhyWC9PSzJhQmNPN2FYa0c1NTJFeG9hVVExUGNDSjJTcnZwN3VFL1ZiS3J2dmk1c3B0WExwVldiNkZZa0l4dk01ekxPSnVRNnJWNVg5R1FwV01VZDRXWjJUWkR0aWNyeHg0c1U5R2NCenhJaGJ2SnNIellWMmxoVlNsMDJLdnhwMThGWEN6QzR4U0V6dXdiNUFzT016YStxUnQ4dlRWaVNQbEtUbFAyMFJsOThQU3FjR1FkMlY2aGtuQ09CamM5enpBanVnb210UU5IRHJXbGlTc3djdmFIRDZPT0RBNDBYR2RQUzhIdEg3SUhaSXIwSmtPQURsRjFtbGxMK0R3Q3h4SGkwM3l5R2cxN3FnQWd5MkFKU1JYVHA3eDJtZUczdXFnajBDOEtCeUpoT2tSaENFaFV1OTFYUGdLdFRub1FRVFZtTTVvSGsxM0c0bTJJVTJ0SGl3OGtxT3A0UXRIZVpRaThIN29LTjRPVXVSa1hOZ0xONFNsdDd1QUkzdGNDRm54U2hKSlhHa3h4TnBxQmd6eGd3dHZZZEdOQ1JpZGtQMnpURm5BTzFtZUJrYjlTTVlveFg2MzhyTUlieC8zMzBuMGpsdXVzZDY4OExEdHZ4Y01MR1B0MmRLdGpMb2JZM0I2R0RFVFFkMlEwZ2tRMmdHb0tnMnJEK3diZkxTa2NSditZb3dTMXBrbVdkWi9EZXhkWVhnUWtZY2RudEFKM25hdElwUzk5emJpZFJsbVYyL3FKemtVLzVzQXdHV2FCMEVLbkU1TkIrb1Zibm1CbVQyaEx6QTBjejFxU2JnWXdGRTREZEsyRzZ3ZWlEc1VsNXVsVGlRTTVmdmRuRmVXdkcyZmZIRmIrTkVrZnFJV083VllQVkJXQ3JxdDFZUWNIMUZMZjRhOUVJY1JONG9VV3Z2aTQrMWJjMVRMQ0V6cDVHUzRXcFJjTWdSSHhGYVNZdllDRXVPU2xnS1dpS0ROR3dRdW0zTGlCNEJKdGlTNVhwVEpaM3JtY2JBL1BjUGRoU3FqbElHWWRKaGJWeDIrZVNNRUxqaC9hREROK3g0cU8yVWlXMkVZVm1aUTljdm84c0xDSlBjVGhsamxBWUFPT0JRQzJYU2FlQ25mOWFOZzF1SDZMVlZFSUtxSEgzNVlLRzg2OUpmd2R2SkdzK3RoMUkyT2Q5K1BnZTlDS1lybXpzWnJ6RksxamFSaUYwYStJTFZLWkFUekJoOFhEeCtrbkxuNHdKb2NWMk9RNG5SZ0tLanZXQzNaRWpZOWY5YVBLLzV6WDIvRUNDQTlqb0ZlampaOUc4NW1VanJ0cEZCUnpEcDVOMTBWU21sRHYrUkhXdzlkWGZ3QldJcjdNNmdsdWVkT09SOGVGL3RUbEt3R25qWk5NZjRHRmNOS0JueEFLRlNtQ292eStQTnc5TTVWcDZ1YlQrWThTTmM5ZFB4SVoxNEd4TjJ5cVc3bXY5SHFVcHRFRWVoYXdnWFBLTXFubzdlQm4vWTd5RGdRYWZpQkpyczB4eFUrZ05KL24yQnlRb2N3VjFneDRPR2NRd3RvaGNxRmhFaEF6bFdhbU0xTncrT3RhVjJQek1PeCtOTU9ZcFdqSjR1bEZHaXBWRG9JWFVYNkxwNjdSL3FVdDdYdjV0azhpck4yUTFBVVdsVEVKcGhON1dOQ3ArTEljd09yZHNOQ0xsb1hBZjVtNmY1K2h1NUlicElvVlljOXNZblhuK1N3aURZYmpwN1dmc3EyK0kxQUhnNXJwc1BRK0h5L2hqdmMzVHcrbFp5WmlTcGtMN1pNVitsY3hBUlNwc210bmN1L01zVmtEckdraG56TFVwcGpweERxY2VtZDc0ZmtiaEd2dFd6OUdMeUhYNitnQ3JaZ2tZOVhvSXNNc1FQRXlMVEdxZXBOWHNVdmU1MWszS3RyTU5kZHQ4UU8xWlhvL29pb2xHbzhQMTgwcjl1MFBvT1RreXA2QVE4V1ZPYzVobTR0aTlrMU9ZQnQzc0h5RnVRanZtd0V3ZFRtd0IzVFlCcUJJajdma1NSZVRvMUhVYjJMNGFDa21EMWZ3RzVCamZNNGI4dXdTNWphOEYzT25idmU0akx3aUZiOWNYR1d3bDEyZUdoL0pOdDczeDdPeFEyZGtIM0F1b2VUNXlRdG1wVGFnaGxhWUZiU3ZEUkdVd3VkUzh4aVlsd1VicEpzOXlGUjFjVmRiMXlBVE9SNVlON1BHV0pMNDBUKzhCTGlnODhHYmZTZzFTZFp1aXkveFJvdlBwN1E1TDJ2Zk9NSFRzOTBnbXUwb2NBbUhqenQySzVzY3JoSGJSQkV6VVYzOWExL3FPWk5yNlhlMFdSbVNzZlI2cHRaRXRKbW5tWkVjOWF2WmI3bWlsTTFQTmZPMitNRUJ3VW1KN2FuNGdwNVFvMUFEaXA0VGVJakRZR3hzaWxzMWhuaDgxR3pJY1hjVlpUek90SnY0bzg0ajd2a0Y4ZVpkT01pWkJsWFBDd3dxbVlHdVZzeDRJMmt2YUQyMUczVWQ4aVJaZmk0Z2M0VjZDUWVmZGZXdWhheDdac21HeitNMSt6aGFGd2xSei93UG9UWWlrUXN3Z2hYR2Z6Ni9CVzZZZkRyWjNmWG1RWFBrVTc3c3BrZVM4dzlmT1VFTWdFeXdzVWliQXBVWUJQa1EvOWw0OS9UODNtNnZkdVVReSsyYTZSbm1ZbElFSXlOMkxXRktBTkZrWFExREJBYWgveEVoSHpRNCtGKyt0dUU0MjVvRFRCaXRiWklDMlpPbXdLZEVsZ3FaWmtDYllyOVdOd1hONklTaDUvZWF1M0IrQ3BCd1lKdUpLVCtNOHhGQUdQc2R3ckRnd1lVWHVzVzFXcWQvcEViVER5T0ZidjQ1OWYxU2pHMzRncHBVQS9YOFBZbS96NVpvUDN4R3hhTUJnK2FvR3JTYXVyMHV5eDA4Mm1iMHBYbFpneXgvTEF4ZUZxUlcrVml2YmM2Z2VJcG5mbjQ2aUlKRzdnUXpjc0lRRzQ1MnFvMWpDVnBzYlgxaXoyVWU1MW91YlVnaGtpaUhReDgxbVNJR2hkU1hlN1NORWlpQVoyUFlKblIrZ05mWlJaT0g3b05rVEg2b1Q5ZkxEeG5LUTBsemY5aHZmbUNWQmlLcXJTUWxKcGsrdUNReFIzWHRFcUpjYWlRa0tqM0dzUHJSWnFVMnd4U0o1RGRycUc5bnFMdkQwb1d3MDM3OEdtaXR6M3FId01BVDk5dnpnSXhWVUlqLy9NRkNxR0pxSzBLOU0zZGJGTUF0UGVjMWlQRzJxUGEvd2F2a0NEVEV4c1RoSVVqQktycTJwN1k5NVFRejkvWjNWcG9kaU1xZkxPVGIrcDFjblRkNmxXZDlPSS82aXpqeGJjVG05cVJrY2NWenZERFZNQk83SDY1ak55Zko0RUp6cHQ5aDlNWEtvZy93dHJneUJGa2w4WlBqV2pWbXl0Y09iZ01MV1I3KzNhZkx2MDYzMVhLVFMrUHJ0SWJDdGw3RHhtWS9WSTlFN2ZlT2NMZ0oyeXRuN1Q3WjYxUE5xUnRGLzJrR0I0NHhyYlQxL1FoSTMxeVVDcWY3RUtkcjgxaCtoTDd2a3BGZFdOZ0tvRDJmWHlMOFJ2MER1RGZvREtkZkpkV2oyZzE0RW44WUVhS0lNQld0OVhqVEZnai9kMENVUDFJK3lkRlk1OWpHMGMxZzEzek5ZZ1FQWU9ldUFmT0Y1ZGw2ZVdLTm14ajN6UU8vWmNsVGJmQ2hmSUdsSVhjQW4zSHhTZWFUbWVJdnBTZWNnZ25LS0RCbTFDTkRtRmVKeVhQTmlyYnE1MHM5Z0l5bzlVWEttM1lVaEpDZC82a1hjMGMyR1o4QXFmaFkzTGVSUGVIQ3F4d1N0NWFwRDM5TUFqbmxkczh2SG9UdjM1Y004ZUU5U0ZucUI4eUM3TmlJalRWTzY5SkxoQWdKaHhocnc0cTlWSDZNM204c2tRRVRJYUhpckhzQk8zcVRJQ2RsaklIZ0FhR0pxQ2UvYlhpWDJFYmZtUFpFMmlOcm1PVisycUlsdlZMbXI0ZlpLdnljVkhoOEJwK3IyZXdGbnRYeks3ZTFvU0RVejVRZEpxQkI1QnpxZlBrUFJYQ2lsSmdSVFZoaW5mK2lKSEhWTS9hNFZkTUkxbFBQSEViejVBeTlKRlkxeFhjQjRTMWhBd2dXUGhRRzVXc0dOSzRtMjJqQVNRMmhRMnRkbmNvUHYrNDE4RGNiSU5abVl2a0FHZURvQ2lzbXUwK2w4NEtMaXdzaFJEdjBqYUE0eGo3NEhGZC82dXBPY0xKMEpUaHFRcTRBd2FGKys5bVhVck9OS3FvbUdBcVFPR1ZiK0FMUFo4ZHdIU2w0MWhMZlJQQ1FDajFSWGY5amRhV0dIb0VjMStmVDRuYjd6MDhVU2dnVkZDZWZNUlo3Tlh0aGcvWHg0NDA0eURsNDFsd0E4Z1F2RlE3SFk2ZTAyZFhPbDFURDg2NUliN21nNnJ3dzh0WDgra3ZKU2F4MWoxM1QxNEI3U1pDY1RpcGl3NzFCdFh0TjRseExkQWQyQk5hWk5VOVVFWDl2TDhjZ2RkQlJ1RW5PL0Y0MVZHZC8wQkZET2ZLWW9IbEhndTRyZ3pRVHFzYmZyaGo4UEhKNWxEZWpuSWlKc3owM0p2eFlud3NCOTh1bGtVZElQTGhuc1I3VUVEb0NXYVd0N0IwNUk3cU9tZ3VOSllpa0tISHA2dmVMcVgzNXR5bzhCemFXVk9hTWdScE1CSFFkU3BGc0owWVU5cUlNK3FkdjVXWEQwVkw0MW51YURtNXRnUStIWWFOUmVwTHlVdWZTNGZIMGl1dCt4ZkYrcDZoZmh3eTdGZ3BXSkZqOCtKemZ6NzVBb0NibDRuUmZ4T1YybENmRDA4VXVDREZoSHpJTlU0VXZlSGRqNWRNTkNnelFwRmptVDRaNjZSMUlGWk1UaEhhMzV1dWEvclVCUG90Ums0VG5RSGtuVVRVTzJ1U3BySEZRdEZHL24zVHV0eFBYeDgwZjhucmszSE1vU2hWWDc2d2QwMEc2Qlo1U1RrQkYxTWJxdGgyNUNvakpyaDA3Zko0NE9JNlVyT092dGZaVFFYYVlMNmI3K1hVTmNaWGRjS0Yyd0NJOXRuQjJ3WStQOTRuOVlMdWtIVUZNZEVnbmx5QUJ1QWlKcGNhNzEwR0RnUFN1R0lpdktUWFhITk1IQ0kzUGM5ZS9tZGNaSGZ3SHJ6cEZUek5FWFB6NHVyMmdiN0tVQ0N6bW1BRnpTSjdsSm5xcnhJZHAzSXg0TjM3QlYrZVZRbnBoT2l2eDNGSDkveTlDNHhtTmFkYjBmK2Z4RjlucFg0N0dNRVNSck1Vd3NkM2pLb0xDZEw5TElDSUpJeUFoK21tU3o2V3JSYm5mWkRnanpKMk54bENHc21oR0hNUkJNVkk2QVREeXZycy93QzBtZFowZVpYSEs0bWxtWVMrZHRXOWtya3p1dEhTZTgrNlV0REpYcS8zVkxydmVDNGxKWG1TbTVGc1JmK25Db0ZDNWdtc2JVMDYzcVNEUktyY0xaVjFDODJiM2x0TEcyUE5oSVJ1cnFIUzdZQkgxNGQwaXJIdFNVeUl3R2NmUEIvMVdZZkpYb3FHam5kMW1tZXJGOGN0ZWYyNHRvRTdpRml5RlRuTVFyZmhONFlTcHpkQ3VBZEZicnpiWUs0U01DNXNmMGl3TzFsS1NyK1FhZVFneEFQS0czaUVnck1GeTZIQlRQLzJRbUVKbzFyYTc5cWoxTnMzeGFaTUp4RlYveU9pOFNwNFlKWURJOHVGWWQrMFFqNnF2YjRxSHVSZytHMnlNUGpnZGJwdVdUQmg2NEVTYlppMEUvZkNaMDQ5K2xINEJOallmc014ZWVRUlZucXhqY3EvbmxxUHZjZTJ0MlVDb2xwUjFaOFRpdk55SmN6WkF5ZjVVUjRlUkkzN0lsV2xzcWtXdW9HZVFWekhzZlNKQU16TWVFOVFMT2ljRVpreWV2RHhDM1NEc3JlZ2xFR05ZMGhPcCs5VW0yQjlWQVVYRWt1UkpDSnduR2I1Nk9KSWYrQ05kZHpmSFhrZWptTy9SbVhxSXNrVk5hVlA4NWpVa0NPOHF1Sm5Cc3JRSFRmTTNzc1hPUmErYnFjK0hiYnRZMnhlSTRpYm1JQVd0QTBFNEZCQm1SbDNvOXp1ekZqT1c5VmFVeE1mT0VUWnZ2SW5yM2dUSnBPNHhSNTBnTWdNUmY4dmtZTHpvaW03MHRUZnFwaFJhV2Z4bjhNcVNGQ1czcGRscU1sS0FLd3dRT2NYOVhzNXdPSTlvTWtJUlFEelNjd1pBTUd0TTgydytTTDF6WkZKUWkxUHN3c0ZWVzVvbTVZY1dxNzEzUGIyR0RZd3cxT2FGNU5CSmwwd3JESnp6OFp6U1VIVjhzRE45K0s5Y3FZenVYSGpjNHM3YnV6UlNOWlhUZXNaL2U0MldLNysvT1VUby9taWMvc2JqdDlBTzNYNmhrWHUxOXFYZFJHNVFjQ2lHaG00dmtXMFN4MGhIWjJVbE5jeEtrZmdFcU5DQitoaW9rVVJwbnA5U3Q3NWtmbnY4RVkyNTlSVUw3UnNqMGJTMkN0MVFqVFRFWHRacHhkN2JGVUxsRXRWeU1HMGxoR3hpM3hyVXNFUVhVQ283eDIrR3pyVmtFSS9yNG0yRElEcVVnUTR6dWxjQ1Bldjczc0VPOVV2UGhPTU5wN2FmQzlkN25lc0o5RVBYempPWFlsWHo1TXNuMmhGZnp2S0NLQUJSc085WDUvT1JOSk9EM00wM3Z6NkxxbkRKMCtiVXMyVDBycklHOHFEeCszdlR3b0R3QThBWW1DMlVzdUtrUGVhS0hqSVIrOFhrMHE3cXNRNXZkekdEN0g2U3JUMUg1dHkzL0VPQVl2cTJVMnlhbWJ0R0xCdm1OaVNERG8vUldwbS84UFlSbEJhNTdwOHBtajdUV2ZjMk1HdE96aGtrZHk4Tk9PemhROFVBN2RqQmh3TUJMa2I1T05BeTBZWGd6dmowWElqLzFpcmR0SkhRc29HNHloaSt3cEJrUWlEdkdmZEJsY1FldTBoRzVDcUFVdmtNSTlsYm5sVktYTXJ5U1NTUHNsd2xnKysySmlzZnNuV3prc1hvbDVDKzZTUHZRVXdrTjRqTTV0NVZwT3FMa1VLNFZUOUl6V2x5ZHBMOUpBNUQrRTI0cC9JQklsaXEvV2ZNR2tuUzBZM1VhMFAyZS9aU2VwVDJ6LzFYQllmZk4rUUY0QzZCRTNuZFlnVGRMWU1ibDBVbmluSml2RkgxZmpXSFhQdk44N1VmV3hjOVBPcSsydTQ1UHYxS2NMeVp3aGd3d2JiYllMR1RRbE5WNVdFemJtWGI2bXlXd1pZRkk1WExZTEEwSTdyRFdLbVAvZDJNNFJzcm9pYkFqQmZ4ZHVwMGdUS0pjTWEvMFY2MUIyLzhyckFCeWVkb0piZFVPdTZUT0UrWklja0pzU2w1UkJ6R1Zxa3FDU25Fc0JibGpSZklDb0ZtaGFwMWo3dUZPYkxXdkxWQmxZK0dYdWxjNUw3TGRvUFRIMVRoeFZ1QTRVb01BaHkzbWxodmlyRzd3ZGhsVkVGYnRJK3dpcFNNdUhyTFh0RkFxdSsyVjdUVFd5RXdtaUNJRzlha1ExbzJ6QmsyV2R4MytVcmlXM1o5UTVRaDJJUjd2cWEySUw2TUVpbXBrYW5XYVpWZHNadWRZTXJRSGRielVjRU9CRDFDRTBYN0FnVWRYckEwazVQeGduSjFES0h0MTBxVGZSeVdwNjBMSGJmZ09IWUx4ZGkvMFgySG5QbkdnbEZoeFNFZ1BGRkRvckNrTTdSSFpISUdWNnJJMFNWU3lZN2t5WDZNc2Nac0s5ei9NV29BR3lkMU0wYnd5ME5GQkV5d3B1aW5MdjFBZ0hjK2wvYml5VTV6YkV2MVh5Vy9lREloTmZFb1Z6YXVvUjA4TXI1MnZ2VzdzeGh0MllURk03RUZJSzZNODhaeEc4UU40dEVIVmJOQ1dFV1ZKYXFWeTF3UmZhQmNNRW1vNGFoQ3A0dXA0bnhOdndXbElQOWZneW81WDNJWThQTElzcVIwV1hucytobFhPVmNQSVRSN0lBcUZ1dmthc3hQRVRPR21kdHpCZ0U1dWdSWTVjdmwzTUpNell3MnFoYVN5eTdlYmNJVTNmbjAxRmZSSGx0NGtad0d2Y2FrQmJZQmw3WFJqRGZJSjNodjRXMmkzTTJNbDd4VDhUQXpORGJ3Snd3dUM3bERFcm1NWHF5VmlkRC96SDVlWkdwQ0VpWm13SmNxNC9xY0dGMHg1cUxQVU9NTko5dUlJUms1eFFVU2RRaVdFNXgwdFZRa24weEw3aVp1WHhPU21INkdzaDVWaUJUcG42WjhoQUpkZlA2cC91YkhTSGhqOHNnODBUTXFSOGJ5b01XcWJPclR3QXlHTkhjV2dTUnBvSlhCUnRrQzVza3BaejFDeHhUckNUalRsYUtFaEgrc2M5ZTdUZ1M5SDFEY3RCMGJDTmVUVUpYMVN4bGU0bGcrNmxIVTJRQWlKdTVCd2xTZFNCT0JXa2IyL0pzZWRxUnNXYzdQOG9YZWkrZjg2eHVHcFd4aUVCenV2aGp0MlUrek5FTmR4WW5YSnB5dS9BTlN2MDIydm9EdkJ1V0QxNkZ3bGhZcWoxeHFxNFN0NlNOQWxXVWY5c3lBamdVcDNta0J4RllPZ3Nvd3duOTJSdGgzeUZkZVIwR1NKVHd0QldGMkltNXZrSWw2VjZrTVgzd3hBZ1lMeVZ0M2QrYW9Halhhd1JCNFQwbDNPcFAyOTBaSW1QbEVFa290aGpnTnVFSFQvZ3BlajR6Ui9hODhLei9wUnFuZnpsbzkrWE93TnMrbE5pVm9iek81Mkd2eDJ3QURJQk5Kc3cyb1krVXV0SjNmZFZnMEVsdnE5bitjY1B2TENmLzNJdEtFd1RlMFhoWXRySFNEVjRnalduVjUyaGViUnF0LzlxckQ2TXgwZG53bGdqYUZvcVlYcnNMNnd3R0RTOTNpMEJ3M3JhK3JJYUpTSG40UDVYMUo4QnNtYUxCR2U0NHJ4UHBYM21QZkhmakFNRVUvWW1EOWZxU2FWWEJXaFNOTkRyMnk4UHNOUXRKaFlzT3Y1ZWFQclU5VWNvUzhJL2pHcDdhdEFxeGxtVVJQNmRYNlRISVBDbVJqSWdUOGJFemlaY1lkNy9XL0lKNjZNenJnV2RFclYxa1JFTm9abzAxQUh5bUV0SFpiay81NmtLZ2V5cTZaVDVVQVlPaUFqWkhudEdhaFR5OXI5b2NvZnNadkUxNDQ2WWFRME5oeFdQNFIxM1RHM0JITzhJaWNDb3lrcE1nNHEyR1BmSVc3K1F0YUhMYTNlWGxoWEx5Uk1NYVd6aG5WOVV3dU5uUkZvV3ZQNEYyZy9PQ1RDY003WUtpMHZoaFhVbEdzUWtTSy9yaTRyNGw2UmxGZ21sRTdkc2pnb2F4QVVBVC9XOWNHTkJoM1BwNkRmUE1WS2xxQXNBQ2k1dDFSMGx1b0puaFFuM2l1enVvTytHWkhRbDVwTFpHMTFlenl0V0NZV3pYSVJVb0ZxaThZVmFLa041ZTRuVzR2M0VKbnJEcVRCYkpYMi90MU1aOElpelVkU0xKRitlUUdJTlRJdkxxRXdvM1pMTEl1cWp4eWV1b0hPREw1eGVZTFoyZWtGam9DUkxqRXNDbzR6bFl5Y3EwMC9WRW5XRFE5MTdkOFdFbkZOT1ZWUWs5ZlZSUTQveVhmeEYxNkdtUHhqYm1jZVh0ZU5oWE9kVlMzdHdvSERBVWJ1SDM1L1dEY3BVdDJsRytqS25DMVdOQ21uc0lzR2ZZZzJubEN3R0JGc214MTN2bjN3TnVycDNGR2g5T1hWYzVHSGJZcldXZG5Nem9xSWxDY2pSYTBERmFqYWd5bTRTZm93NFpjc0wveGhMTTlGbkJmMlYzWWxrOTlod1lRdzhTdXRIZ0lLOGFQUi9ZZU9oRERCMnVDUjkyWkY0ZmxLNXJnYjhTbS92SGVLZGhkT1lOYVB2STBGQndjYnZvd25USm9qc2NUeVdBL2tua2hsdy9QdUsrRXdDVWxWV1FKUW9Wem9rY0c3T1RjUk1hS1pkYm1zMmNmYnlrTXptRzI1bzE2cjVKNmpQdlBiWjZhUHc1MmF6OUFma3BGUGxYQUhJa3BNN3Fra1BiMGRWTEdxSVZMNHcydm5vOTZVSUZjWEFNdkhuUXBkUjB6Y2tVNEhoYi9kVjEwUEZqNTEyQ2g2QVEyZlc5dkRkK2syY1JXaXVIaGpvYXNLdmRKdEhoMEI1V0VSYTFab0FmdjZCM0Q0SGVDQktOcnQrZnBiNzZEMDFqMUM0MXRzRDFlWVlPcHlwUlc5aXhtenJZdXBFcnhrVUpTTEFUTnN5VXBVV01Pak5vZjBDc3o4MzB4bktyUlUyMkRXNFlXK2tGcyt3WU8xdTBwSmpWbDR1d3gxSUtYWkgxYmtkcjZzZ2hZelV6M2NFeXVXcTV3bHlET3ZSbmh3MXMwZ3I4ZXpoTTc0eVpKcThPK1ZETE1Ua3lobW5UcEQ3RTZMWC96MWQ4TDk0c2g0QVlyV1craG5PTG9meEl5VzNscnEzK1JlUnRGeXFLR3Zya25PdC93ZElaQmFYZWgyK2dmNXZJaUQzTFJYMnNkbnRZZ2xFN0pRMDlEK2RVSTY2TDhCakpzVGMzbjhQb2hvb3dLMUdLVThDdUpRQmhIWnhBSTBCOW5tNTIvcm1PME9DQTJtenI2ZEFPbUVyckRVa2QveFpiaUQwV081aXd0SnRidnI1T3lmOGZraUN5cm5ScUJNZ21SNnNaK1BIYm4zUzRHMjkvS2xiWXR6bC93NWVQN0U1ejNhUXN0YkdHbFJLQXpVRUtnWSt1T2Y2RlpiL0ZUREhqSmd5eFBLZnN2V281TE1zbmNjQWlNMCs0R0J6eHEvMVpUbTBRLzNYenpLMStDNGpPZFY1WXp5Sy9nTmZaNWYrZkFISWM5KzBxSDRSMUNKZEhhVWtlZ2sreTlJd09TUVNqazFsNDhCL1pTaEJlL2lJQThobDJabVRlc0NYY0NWYWladSt3MjhDdHVBV28rNWZHT3Z0VWlNUkwweFJBb3M5RUkvZzlJRENxcndrMmlCamJzbnFWNkRKWVZCaW9FS0F0K1NzV1Roa2lqVytyMUtGQ21sN3FzTkZxSlY1V0M4My9FV3JONWZrMWR2Qitqb0psMzdZUmZqY0xkbEpYa1RrQWM0ZVQwVHNseVhHNWFRamhkWHAvdk9yejZyUzdHOVRvb1NYQ3hJeWwrOS9OTmxnSVNNSExET1p3VFNHQnk4YzI5OHdmVnNuWW5YVjByQXN0bGxvajBOQThYcXFGYXpvdUtnSEl0eCtNQVh2ZmszRFdHNmFXQnVpR1FwS04vNWo2SHVhU1ZLSTF3QXVpeGtRSFJDaXQ2bzZtbE5nanJiWW9ySDN5RC9DSkpXZFlHd2RuU2FUTVFWY2NpVDNxZ2FXeC9UaTU1U1I3MjV0RFpXcm96NVZaRHUvZ0h3ZUZKb0ZPY0FzMDFCclNiTDNodHkwTDQ1KzZOaWI4NmJBL0ZVUUZZQlBlYVBLTURTMWJCdzRxOTllMnl3UUJkc2dVKzM4bnNGdDY4aVVkdWh6cEYwU0dNSVcvUGNkUDkyZC9kNzVsSXg1amR4Q2xYUEVwdkw2dlZUYnpQaDVleGpScGNIeHZ3MDdFamFQanRIQSt4ZVg2RmVpb25IUzNSUWN4NWd3SGcvVWFuUjRsTnJ4M2lheFNERi9ISTZzQ1hudStlSm5oc3lZK21CZmhpS2xvaG15U29POG40UVU2VFRSTXFxcW5mcmFDdWxqOWgzejQwaklRT2lHNm9Nb2lHN3Z4UHg0RlppbkRxWHpWbWlsaTc2OWNabVV5bHZXMTB6Qm5hSFpOYkdjQW5xVlkzK0wyOWRFcmFVOU0yVmFOUDJsUGJCUnQ2U2NLNHhLdmZZTmVOQzZWY1dlSHRpcjhyQi9FSytZV0lveWJZVDZZMTNKZmxKYTJCcUY3OGxoRjNoUWxlaFhjSXpvVkNieXZLSFkyUVpaUWwyditTTHdoZ2hJNThtL2dQNFhXNUhOay85NGVPZ21ncEtyQm9sbjFlRWg2Ym10R0FoTkFya09aTFdEWXZoTFdTWjArZjdsT3llZm5GMm01dVlQaEhtTkRWMFBKZ3BFOFRHTHB3L0FrUmZuSXhjd3V5WkN6ZEhseWY2aERaQWVRalZKSUdGTWpXenBKM1Y0R0dqQWZ2c3VzLzFoaE9BOE5VRkR0WFhjOTIzZlhiY2NaZHNMb2N4RDV0YW5Daml3cjlqREpIYmVmZEtJUUplc2JGZkxZNGJJYnk0Q0d1SWV3aVZQNzdtWkNoQ3ZMMy9LRU1LbUcvTXB2Yk5oVWRuRmdJVkZVMmRsSmRTdVZwMS91VzhnTFJ2aWJ2bGtZTHAvQmtLSjFQeDVpNVR3cjAxeDc1M3NMdTB1c2x5dnZ5eEJneVBocmd1N3NERW9uTHlZVjJtWk12TVFhQ0gyN25wYmo1ZU9jTW1WVmo0T2pnSmNFZ3JKMVN2NURQY0hrODdNZWFSRlNQZDdBejQ0SC8zZS9QT09Qbjk1bU9UVnZGd09kd2NOZStWUjZ5cmZLRkcyZ2ExV3VTSXYxcTZtdWs3aCtFb2p1dk41VVhzZEQzN3E4UXNxTG1rQ0hUNlduaUJNeUcvM28yTmZQVkkwTmh2ZVk3cFpKTnIrVnU3SGtvNHFKa2VEbmhVTDNhTnNTUTBpRVAxM1E4UHlUQnZ3VHJkbDQvSTVYSUY1cW5qRnVTeHBaNkZFc1BoMFJ5NFJFMVJxbE5GMS9IVTQxbWJkU1AzVnpyKzNhMzg2cmFOUzgzUFpGN3hObGdZMzBYNTlwZ1JVRVVhcEVYdlpaYkZqL1orYXcvQmJlNm9qaCtJNWhZU0VwQnVGM3BRclB4QXEraUFsQldEQm1mVUx6MG1VT0tSNHpPRm1QK3BKNzFicjB4anFyL0hKckVsNWE0Z2FKUE5MQVV0S0loU09rbk9GT2U4M0hHOE5oTmw5cXphVzZQSnVmYzcwanlXR25FSnRQeVBla3o2RG5zTHRtcnl1Tm1lK21ock5WZ2hBa0tvK1ZseHFDcUlTSnVBdDVrRGxmZUQwSGUyOVlIL1RiUGcvL2hNanVTODlNV01IVHFYZC9oZk1Ubkp5ZUhwcWh5TmU0VzBUQW43TjhUQVd1UnpWdUNzaGNjMlpZYXFZMXgxdkFHc1BHZDdYN3R0S3U3WmpLTnQ1a051YXdsT0kzVnFJN1VkTkhnczZqVzl1Z1U5VjhYN2dLYnBTN2NvTWMwaGZneXhGUHZpT0FSbVJrMzBrVUFCclZ0MWdhbXZWUFJzRUZUWWRBaGQva0dnQWl3RndzcjJma0hZNlUzRTg5aDdtT1M0c3c1eVRTSmF2eWRmQ0pnTGJjdlg1dDI0eEd0R2FzNnNLZkFaMjhpZUUxT25ZTXp3OU5CaVZOZjF2aGZ4b0NjWDRnOGgyTkRYMWhqREx4WnNRK29wazd2c2U2ZVNPbDhLalM1Vy9GbzBtNi9OMkcvZHBhQXRpUVBHTGFNcGlYZFVoZENQSmxXREk3aFptM2JYUW8zek1udnd0djlGNkViVTBvaXdudVQ1MFF3aFB5VWpGOXFnUzBUSU9hL2pRYWNZSFNzdWlETisvSFdXRmFaUGVHUTJvR2FpaHZSRnBOWU5WdU50OUxYeWhOWTBmMFFwaExXeDZXSzZWRUh2cytMRkRIYkk5ck9VQXBjM0ZEU3prSmVPVEgrZlA1bGlOM09zcTM1cU4vY0l0NVJ6UTJoVTNaNy9odHp6Q2hPM2RucU1wOVZDRGw4cmN6OTFhbXpJZVpkR3BDdUxKZ0UvVWZqTVp4NnBxSi9hL1dkM1BMRkpwd3RUUWFuV2VoUlJRUFoyZzhvNWVJN1U0VVFQeGFKY1ZOa3NvSDlHL09hcGRxOWwvTHNsQjJqQ0xWODU2bloxbVlNR2xBSmtVK2dac2RxWU1LbjRpdHBIWWlVb25JdUVIdWRRYitVY2xITDgzSXk0d3creVFSazFic0szSFVlK0h0NmJOOXZtQmhrWXRnTmVUYlJobE9kRHRNYmQ5bitodzFoVXdnNFFLbldjWXFmbWhCeGp0YnFSRmVvQUJMVnpwV2E0dkRzd3pEK1krMXVtQVVKN29vZ1VvU0x6WlAxdWhGYThnVkROUXJWYVZ4aHM3TTUzNGpzR2VkaEhkK3gwdzNqY3poWTd6NVVvRjZBVGgxZjl6NmxiSWd1c3VVWCt1ZXp5Mlh6N0VHR0tYM2szRzY2S3Y4MEJ4L0c2bUJxZXI5QVBjbFk0aU1ieFVJUVFjSXZrL0plc1libFJlMWFKTGhUZTF5OGZ5QXZBQ2VvYXowdlk1YjdQaEFuZ0ZGSHFRQ3F4MWNpbHJRM0FWTDAydUF0VG02QXdmZTl3UlM2VXVzTVpycjFBU0NudjBYMUc1b3B5WkYrVWpLTXVqcWNSZkptaFFpb0VVTzdZay9uVlFwNkdyZTduWDhOT0tTVlNJeE8ydmFJcHU3cXFHNlJ3TDJycXVxalU0czJUTGU1ZzByOTJIZENyaDlEeG5sUkNvdmJQc2lsOFRDN2xKQkpBcThYLzBLVkJFck5CSFVNMDZsRFFaaXJ4enVPb0hWMDVINDMvakNOR1lWd2srNGI5MTZqeFM2Zk9pemNGM1NYd1RrdUwzQisxSWE0a2ExM1NEQlcranBGeDl4UlFvYmt4NnM1aGhwSm5TZ2lPVnhKSEJtNHhTb2MyVjNtUHpIL1M0S3hUdzdxVENESE8zdm9COHBvOWFXSUp6VjQ5S0o1VlVwaG9sLzJMNEVZdlNxOU1EczlnZWVPQ2VBZThhbHJWbSsvOUFTT0ZOMFBwRmJBRkFaY3ZUOUl5eGRUSXRPMzNkME4yNVJ4VHJ0dWl5b1JjNWh4dnVHbXhBRCtQaE1sVXRBOXp0V1JDazVGTCs5Z1NQUy9MOWkwUHRHbUxCOXBaTEg1TGtWT3UwcFpObEtYZzhGNHB4dk5wU1lEQUMwNllBd1hvUDMzQ1g1aW5abC9oRWlEdVl3V3Q2Rk5EN2wyK0g2SUZmSHJta3VmZTRPdWZnZFI3a2lud1B0Yjlyd2NMREt6YTBMN2tDbFh5K0lzK0pBK29oNEQ2T2lnR2E4eWRxKy92MWZDb2hOUy91STFHMEhKN0V2aFdhVGw5Y2wzY3hwS1NLUS9NUWJ6cWJUN21SWmhpZlVhU0ZhT1BhOEFLaE1xUlFVMHgzTGZmVy9EV0hFUUJheENkV3RGSTNqYlBxRUtncTFsZGFuM0VKdUFTK2pMUWlVR2ppdTlXTElvMVo0ZlYzTHd3TzdjMlpnRW9YenlXcVNJZDI4ZXlsV1FLWG1pN1J0S1FzSEszbFhqOGppZ015VEExOFVvaG1aMStzd3Q0YU1uRS80S0Jyam5HSTZTdkFoTEw0WGFjT3cvcVBrSmFXS2xXZVdsREszRVlMS0ZaMVN5NkI3czVwcWJuNlpWK3h4ZU84VlgrV1UybjJOQldMeDg0R1FYTUVGbnJrOTlWRE5sb0paZFhLRC90Vm83Zko2SU11SExxNGgraVVTb09rc2ZuMjNZSkZybWZTbFNZbnFOaGI5MmNyYW5nMHY4N2p2R3ZWT2l1UWN3WlQ3TXBtU2N3TDdnVDRwdjZRLzJmMXFwMGRaSzFJNFNrNFVvM1VpVjh5R3VIZ1ZFS1JCRFZ2V3NQbVNUWnFRRFFCejYxaVlGU05TR0FvYnU3Uys3SWVJcWNaTWhMVkg4eldHL25LL3FDVFNlRU4ydU03YUVzbEpuUTQzMWJPVDRGdGc2ZXFUWExRSnNuMmJhcXAzYlc4SFlSMzhHVGJidW9ia0NQcUFWWU5OZ3R6Ymk1dDZLL3laM0dXcHd1cWpxTGNtbWE2NTNBbWJEMlM1dmhTSVZ1TlI2NFZzSXFrWEI2a3JmcVdRYW9GeFVIdkJzdytZUDJmb2RNZVl6Zmc0SEtOMVNaTFBMeEV1VWZNV2I4SmVqcXJxWjNIVkgzZVFLUFFaYTE2SXQ0V3hHVTNhSTc0VDErQmVTQlp2TFQxd2tDN2Z5eCs4RFVRVXArNFBEaEdjYU1lVExHMWNhbGJ3b3Mxd2JybmVSUUh0MEljc1BRL0tZL3IwRkJCYnBHbU9KaFM2cGVWTG44bmZDNDEyc0d4RTFtOVFHTmt6TDdRamZKbkc0NDNyZG9FYm9yRzZaNmc5dzVoNTRBVUhSemJGNmVLSWxvYmFDSzhORFJKMFZxbXVRc0I0eE9mM2pHaUtrZ0w0YUxNeE1lM0dnR1lQQi8wVDZWQmtuUlNDUThBaENzUlFBbG9PR25MNnRyOFR6UEVwemZhZ294aUYxZFB5NGpUVExpeU9WZ2NXUHNTNWIvK0Z4ZC9rVVkxWkxveGwzOERodUJyanhGRVBYZnFXUk5XQ1VvMm5kWlBRalBRYmRaMHZVZ1IzbFBFaWJERHdzb2NWaWU3a1lKcXVWbWl4UzQ2UzhHSFgvWkI0bWlYZGM4TGROdFliY3BDWm1mZkdtOEZjT2FheDd2RXY0cS84cEpIclNXVWgrK1NHV3hBMWF3TVhIYkNVL3dyY1p2Sll4d1QwZXAwMXJZR256R05iT3RHYjRhMjJYMGpmVk1jbmM0TGU1OXpENWFoWXVvdGRUWk5MQTFkMk9yRFpRUy9pWEpsY3J6cTRFT0FMcS9yQ2E0d0JHL2ZtK1FzMGxyVnAvbEVUWEVWenJjZmwxUUUwYWcxZVFQY25mYUd4c2pnb2hSUElqSDErc0c5c1YvQTkwN0tDMGw4NFg2bG9JNjF1WTNPekJxMDRwb2J6ZHV1TWtwUTlDVnEzb1J4aHdQR1h2UUgzV0tEU0NoNVZpajRrRTlpWFlleTRkSzlKZTVMTExaVUFrYUNEOERwWkJiWE8vY2hpZkMrK1JSZ2xPQ1NhMGIxUnJKNzNzbys2UDlMQmxmdzNnaW1pUitqNHhZaC9QeUZLNC91dzU0UndwMVAyaHpKMjB3MDlwNGVEV0wvV0c5UENYbHh6YjNWNGErUE11ZGVUNTEwRGRySWY0VmdXbGlzQTVlSDBhcmswbWpXWmZpU1l6NVpGVnNvNEFRUXEveTNmWFg4UjExQnhKcm8rK1FjSkJuQ05maWZSRW8xeWRlb01sdnI0SVJ5VjZIU045S3AxazJkamlwL1h1QU1zQkJNTXh6bWkxSHFrcGJYdU1TN2swMFpMNWdMb2ljemhZc1RjRCtOZmFFTTFka3FLNHBDa3ltRldCNEJEN2lVeXJRWURNam9mL2wvcFVhZG1FWVdKS1FMaG1pZlE3RnAvQkFlSzJtQWJVRHBYQzFMWUFIb016RWxCenFYZjR5czVna2QvQnNraHRSN3JST1FDQ3UzWFNXaU1qRGM0bWVZVGN6c0w5UEk5WlpLR3dVWTRVVTR6c2E4aVNrWDFHdXQwSVZvOFRGU3BZS2haTlNnQTVmT3MxY2VzV09UNjZRRzJWbGthOXY3R0d3T2hKaWlkcmdXZHM2a1NMZHpwSnlseFQvVkVMVTZRUUhVeEl1K01lN0RBVnVTQ3YweFhKV3ZHeUNCekI2ektzVHJYV0xwVWkvRzJjZGRDQUoraC9Gb08vZlYxT3ErYnI4ZnhUTEhrUHBPcVc4U3BzTmp5eEo5MzFNV3VpYkdhSmhJWVorWjcyQ1Vmd0l0ajJKdmxmWDJMT0tDR1pEYXY0b3VTQ1d0VWl2VE1ZeFR2ZWZhY0N1NzYrcjdPVmdIdi85YXh6eUlWRFNwSnpiVjlySkYzRmhUUU56a3lOQWpzamJSMGdXQ3pSNkNNN1czeUpWUHpiLzM4SmJQcEg3elVDMW9oNWJjRW0zdUptMkt1d251VmI3eGl4R1ZqeW1SY0drQ3htWk5LTElJaTMzZDlIRzllZDIwbFIxWHB2ZEd2cWN5RkRwME51TTBodG9vMHplRkx0ZnRkd0lpLzJmS3k1SnlwbW1FV1c1RUI1Slg1K3lOQXRMSHdkTWhOQ0FDSUlFNGoxSUlRRGJaMXp6VDdUNnUycWJOQ01SalRucnZpaWlmN0tCMDJuSFVLdUJFcWNsWHlIcXhqNDZYbkhIQ3hYaTRHWENaeEQ3MTFuM2JGaUJyMm1uQXVyVHovdFBsSUxvbVpTYWF6bEZTbmRrOWJ1aFRBOVRnZzR5TnF0YVpwdVVVWnBTV09iRE1HejZDRjNqY3dQdkY0TEUvN2I3MXpWU255bElLUVpkQXJEc3ZjenAxSFZrSW1IMGk2aTdJRk5PdENMTE5lTWdrbnFMTitJR2hmQnpzRmxEVHljTE5TSG83NEI0YlFwTXNUamxVRUI5UW5WRnJXYkJYYzNnZW9BOGRrK2RRajFISDRraFM2c28rd3FuSkUxT0I1WmhpWGoyRkphZXJTY3BmNG5oWERIcW8zSDVzVkQ0ZHp2OFcwV203TTRGeDNKaXNQU01URGs3eG1iMjlhQVBpdU9mc2xHUTBPdzlJZTlKTFcyWTR2clhoS3JuY1JBakZRNXhjd2pib3cweGpJVXJYVkFIRXFST1lEVGZGekZjL01DTktWK3hidnpQU0dtYmdQdEdSVmdtaVpjdlNiZXVRUUduWkV5RGltZWZLRWViMjhZZG5NMldKSVBGRytJQWpkYmJydjM3SUdPMjd4OUdvMFJVVlQyZTh0SXpSR1QxejBvdmlLWnJhNHhaRDRJSDArUWpXMVBkbCtrZkpUYVVhaUgxSmtnMFlQRVpsY0V1OStxOWx2R2hkK2VMK0xRam1RRVR4T0tpdGd4M2V2WWVtMGU2bk54ZkQrM3VvTEdRS1hEb2JCMUsrMlpGODluMVg3SWhjUkJsbXRCRDRObEFOZFVDOVVHNkM0SVZWa2dpbmVsMzMyYnFQSlV4cjJiRjljNTF0a2E2S2dCRVpPNWkxSkJ0Z2dTczRpZ1JJOE01WnpjbWRwbWt6ZnN4N0U5UWlWRnpud1F2S1M1UzM3QWpzK1FOc0hoaVgzdG1jdXhWYndESE9KRDdoT1NGdTA5Qk5HMUFTaEhrK2xacmhqRWJhS1JQNUZiOW5WZkE4UjFYbjJ3SzRaSUt5UGRaRnRvbmxxVTd3dlVIcWtlY2ZNK01TYlphRnVOT0FWRzJKK2xOanZuaGFLUG1jdHk3M09yWGFxTFR1WXM0a3VHeHJIeTBueDFtVVhEemNSd0N2T3JjLzlUdDJwOGloYzk1UTFyQzFmOE44cWNBVmo3RGVSam8xUXEzaHJ4Ulk2RFNXWm9ZYTZ4OWsyaTUyaU0wMVFZcFhTdUlYSEtYYWtOR3FhVkFYUmpvNjVuRC9DbWsyaExhUHZKSFc5dXZGM1RRbm92MzloYlIzbXVJVzF0bVcxU2hkS3l0blQzS0JaM3pySTJpWjZwNUlFbzhBeStpNFhQYjIwWE9HdU1QMnBKbWlhblVoLzMvSGFoQm1IdmZiVzlUb3h2cjhKNlVCUVhDZUoxaXVLVVppejZobzNmVDJ6VG5yNmE3S3BHNmFtcGJlQlJFSzBJKzl0OHR1SmwzV1VXWkJYbWdhc1U3ak5yS2ZuTXcrK1BEcmxDbXFGYWU0Rm1FS1ZtVCs2TjVMQUx0Rk1zMGIxWVFKMGMweUI0UDhIQkJLNlBGNFRTL1ZrSjgwZWF6NzgraDB6NFZQeHZGMksxeEdNcDR3WXRUdDY3MGtVdFVMcjMzam9LanB4V1V3cTN6K0ZjT3ZWWVNTdE01RUQvb3JuYTBSMDdJL21UbldsaDZQMHR0RkN2c2FWMjBKVWVNRDMzeHl0Y3QrdGJWaWpTWWZ5TUFBU29ZTzYzTTNZY1NPRHgxMmtxOWtpVjY3a053Z1l2dW9GZzgydUF0bUNNVFhCNDIxcDlOaDZGYjQvR0luaVh0R0hLc2ZyRlFDajlpdkpveEZERkdPejBRNk1hZjhBNTRqVlpwME1zSktNM0l4VUxCVHJIcGdtT2JLWnc1R3Q2U1Y0MlI5RUdTZFMrTzRlYTY5OFJFMFppYXN3R1JBV1I0d1IveldYc3c3UTFXUFgvRmg2MEVERHFtYlQ4VmVWQkhFQUdzNzZSUlQyNE42b09RcG0zaExkc29iNU4xTTBJa0lYRDZGbGhhREE5aUMrN1dORE9JQnBrL0tSRHBKeDR0Tjc4VVFrTW9lc1owczBuaTdKR1I4eWozY2poWDZreWllMEN4VWtLSUE5U2FLd3cxWUV6ODNvUG1zRk5ka29DQlRkK0VEc05jem02UmI5bi9FRXF1MTBYWGY3Z1NSNzZaemVEUlNWWHdzUERmOUtveDZVVjhFWEpMc3lZRTdCSWw0R3pZcmkzVnN4clU4UER2U3UyWHVWVGVUMXNCSHNpSmJzTjZwSEIyM0hvNFRLSnJOMkxRV21nMGFLeDdZdzc0VjZodHVEbTJ5WHJDWllUL24zcmRYU2xQalJrdW42b2hYM0l3Y3NIRHpIaStQdHdKaXZabzl6R0NaUktDZFdiMHRtaWt2WDZmZFhLMDB6WHlUazRVaGRlRkJ1YUxkU3pwbzUrMGN6WEZrVjZtV3l5UWhXOWdMbTVjUWs1RjdzZldHSVc3N3FvZ3VrMzFUZ3o2c29JbCtCSjVEMnhmNmwrYmtIWERUL3lLOGZPYmhMT1dPSHpyTHE2dXlCTXByMGZsYW5sRkxuRTZ5R3lyUGR5UVZLcjdRcmJZRE42US9YMFhZMFgzUEZQeHZrWHRxSnFIS05LT01nejZReUNoMHlDdk9NdHlpVDRXZUhhSG4vaHozNjJrM1I3dFlIaFZaeTlpTVoyMTVaOXdvTjQxNXYyOEJwVjZORVJteEpRVyswYmFRZXVXbmVybm5wbkJET3JETUpMYVVLY3dFbytPNFR0ckI0MmJxelNHdWNaQnU2OVhka1JPRFFZVnQrOERWNDJpMVA5WjZpMVR4R25xcWFmRlFzaWhKeHNRN0Frd3d1dDkwREtneDgrUDNoV0Y4NlYzYncxRFlaSk00M2xxNkZIbE5ldWNCbkFhR25jbHV3Smc0UVNpYmdNeFRlTGl4SElsNS9VaEFXdzZ0TEZPSWpKZjUzSTRrdXl4NmsrK2p5bDdmc3RTWm1MZWxySVJIZ243RmtpRjZ3YjdERnBNQVBlN2lxTzRzcis3elRsb1R0SzY0K0xqN21jMHpsZjlRZGJTZ0M0V1E2aDhtVnNmVXoyb3AzdmlQYmphZ0pSbVJDNCt6UGRZeEhwSUloWGdtdnpTR3RUU0JXbEZxdWZucTVXbklIdVpXTUY2aDlIWjZVbXRmMnhHT0xiVCtKOFBWSXhTbHNDVm9JVUhnZ1EvOExsdkgxY0d4SkZHc1FmaXV1Vit4VzM0U2xRcFloWXdmckhWdWdqMHdtQjFnSlVPVmdPb1FYNEQxNlBRWlpLc01CekNoR2JYWFlDTW9GeVNIU1loRzA2UzJaaU5IcTBSVFlBN1ZSU0U3aWtyYjQwdUFlNjRNNmlsL2Y0aWdXQXVnaHV6aGxuY2JPbHNvK29ER1Vub3lSOCtlNEtPZFlqY1c0VkV2VXR0S0h2TDhtWmdzWTFqZGdpNjZncmFzamE1aE51TEpDb2ZScHlXUDB5cTV2enlOY1lVTWNCeW85OVc2aWlHa3MxdUJWTWRlK0NHVVVabUNPVm4xdzhhMnBRcnBjWkJWNTEzNFVhVDhyazU0K040M2pQeEU0blpOT3dwRlc3NVZkUXZCcnFFZUd3amMxNTdsNmtXQkNQWTB1L3M4c1pDZWJJT0UzOUQzemFQUlV5SlFweXJNMGNZcUM1bC9EQWdQV3RiYmovbElxQVJoMXhiZXZWWlhjZ2JTNGsrVk1rUTJQN01RWUVpek9XTmFDYWpBanB6M1ZGUEJTUllBVzc1UVRlOE4vRzR3YmpwQjltcG5HZmpiTlNGdGxvbUxmQWp4RzQ4S1IzdlVpOVMvbXdiR3dyR1cxVE8zNkJHRk5rMW5DbHhMTk54b0V3bTBnR2tNeWdmeWkrU3hCV1NFZkVjb3ZKcm5yaWJ6d3QwcjNibERUWXVFdU9xaE5yZmZCdHhyMVhMSUVxcW1CaDVITy9WMlRWYlljUUU0TVpCNkRPUFlibm5ibWl5eEdMcFV3TGRYRE5JNHVUYVpubllUNXR4VHNDc1EyVVo0clYzNEY4RE9UUk9aRVFMeHM0MHlGMXczSUsyNlpoT29JNGtnVUJSc3pWQ2c2NTZRTXZ0T0lVdysxeU1wYWM0VmpCTFBxb0FnQXNiOUdrR1oyRDZhRUkxRWRBZ010TU05dkVDeXV6RHJnTlNFeUdBcS9wbEZXWFIxbGdGVkdFcGZRZkU5WWNIK0pWRTFwRnNjVFNBSE1LL0ZOSDFHZnhPbkJDZ21MNE5TSERaa3JFbWc0eG41MXB3TzZWSkUzWkNCb293MXJBZHliN0ZjdS9Dd3U1dkF6SnBEZXBWcUlacHloTjl0eXJ3cHNzL05UYjhaNkp2V0NJNmQ1UnZuMlBJV1dOMkFmb3BWTXJDeWRGbjZUUHdaZ2ZWUytQQzNRY2dYSTVWeUlRUEpEaE5QQVhsWWR5YzFIY28vTU1rT0R5ZTVacUdlbll3c091RDZoMVF1NWtvOU9LU1RKK3FOOEgvaE56S0NCVUc3RFFwMVdCWng1bkppTmU4bWdKZDNiblhYak5qcDEvenBKNTZVbFlvRXdSTzdENjU1S283OXdDYlVHWlBacWdZcU8xK2lkSEN3ZVgrNjVtVkYrNE5uRzc0NjVIQXcwcWFjZjU0dUJHa2tZcEpHRTI3WHhMVE8vcHBNVFU0ZnFvUUdUTVZLcFkxbGtucmhmREFTdUxNS2ppTjA1RTE0bVhvOCtlZHBVeDlPUUh5Ni9ycUxmK0Y5WGlRWEFHMjJ2cnBsM0k0b1M0UmQwckd2WGxuWmJTODltellMeUtITXZweGRpMFFpUm5aaHhOV0lPbUxDVk9sbU5jbGY3eEhnbmd5cVV6eXI0dCt6cmJEQ2NmS3Q5bWY5VVdVOE5pVHN4MTFtbG5OS0ZscWlIa3BIZEJnR3BTQ0RsZFdHVHNuTzBvWVNvZ1NteTIvOXNzVlorR0lUbDF1aHR3MGFvV1RHMHo4SkVSZ2JRRHU0WnNWNkRDTXBJb1k1YXJPUEMvdlRrVjlDUUxBUEhlVWNvYUdNcHF1dnU5NkRUZ2ZlYmFiN3RNbFN1WjFucXdCRy8xcGp4NkthSnVWUDAvbUVsRmt6eDdxQ3lTaEpGRVZHMUZvWm9nd0E4cmgvM1hkd0w1VXplS3VqYmRmNDJ4MFI2bzRSOUlZU3pnUjh1bk9xWWhiK1UzK2MyUG5xUG8rSVBVNDNwelZNOEgzOHZUaWxDVVpycUtBZ3NVMTR2ekp2ZWlKalBWREI1MHFub2ZnVjVCNUtuQXV5MjRhVW1UV0xqaVlibFVobHdvT0RvR1NTOUljTlcyYno1d21wQUF1K3ZWa0NSMFUxaHhuYjVRRHNSZTM5cVpaZVp0VjZRdEE0NVVUTk1nZE5hckRQajlLYjNkdEd4Um1kc1VzZlc4ZFJwdkRld1hnRkZnU052bUQ0RkU4S0lpMVFndnhSYUJMNVlRcHNtSXhTNXNadE91VE4yYkxsdWZ4ODFqQ0Q0SlhjNGpJVEozaDZYaEludnhQUy92bkM0NGlrdjVMVzVKKzd3T3l5bHVCZGwxQ013N1VVMG9sWXhnbUkzVEpwWUpidVA4dmxWdktmS2dZaGtIRVVxaDE4Zlp1N0thRHFxWTBuLzJCeTJjUTBtQ0cwV3BKaVFwYmozVkNHTlhZdUo0QVBMbHVJYXFmbTJLOGg3YkNDWE1FamhWV25yQmNaWXFVRUtYUXBYYmlsd0JZK01Ha1FnQVQyeTJWUjNtSVVtT2loVUxwckY0T2o0NFIxUEhLekxTcGdqL0w2aFV4bW1kYlJ6M3lyNDY0aXZhRjRBOTJKczZEWEhCZk9GR1JPbzZPcHlsVi82ajd5VVRmVWlBbjBCdXhHbTR2bnQycC9zYk5iTjBZQXl5YjMxTzFISFcyOWEzNWhVVWpCWSs0bEpwWnIwVk5PV0pLYkx2QnMySzJiSVZKVFMyL3JKdk83akhCbEQ0TFNmSWo5R25yaGxFbURqcFRGT2Zvdzk2WWV3aDYwc2FmOHdpeTBvY0hMYy92QWNSUzM4dWJqK08yN09tNzVBMmRRKy9uaU9JTkhjQmhaUG1ZSXAxdk0rQWx1U1RVc3RFWUNXcHRIZWdpTk1lQ0dJR1hERmdlZVViMXovcGFHYU8zWkdzMnlzL3RCL3FPNmxNM25zenNDOGFjRzB2N2NLbStGZDNiYkNhUVB4eVcxZFJEZHNKY0UxSldmbkM5OUxaRUNGYnhVbTg5ZmJaMCsvU09ObXhjSXRta2kyL0VJMjd1ZXU5S2l3cE5kR3pQZjZic2pzak9Fc2FjeE9BVUZCdjd5ZHMyN1JVYmJpeGdkQWI4L2FQZVhyK1lKWlEyaFNDUk0yVGkzcmw2a2VRVjFtUlM5WlhyakVpTHB4aWc2bDdvN0hlTlU2cEVDU0FKdDcyOVh6Zmx4ZlBBZ2Rlb0NoSzdvbW15eUdNUTRqZVVZRndzYmcvQkhaY2FLUEZGV29DZkp6eTRVZXV6TCszb2lJcUVXaFVkZ3RGM1JTS1pMVDI2K2RKVDBQMnp2RXhDbzQ3MU91bUhqWXdnV3lpUll3R3NmQ0ZxbE5WU1RIaHQ1NFEzNjUwYWFNb0l0d1NHWlpTOFJwRUVybmFiOXN1bnZlRFJreWdST2toMWIxdWt4ekdkY1Q4OFdVUTZ2NnRycmc2WXBmcFJZSHVNK2tlV3QzNnRMQXJadGdBZkpSNzFxVVpIWjVISTFENHBURktUdlhlNmlWb1Q4SFI0YVhhWE92bEN1YXAxQ3N1NkZrNXI2bm5iYkVaUXlXYUZoeEVISFF0QnJXUEhTcjZVQWE1SzUzM1FLa1hDMlNmbnNnZUUzM2V6Vmp2T28wM2daYkRMR2ZkeGxldUh2RlRwV0V3dWpDMHI1d1dpYlgzZUZWOHIxS0NMRG45eU5QRmU0ZWkvQVNNUjJ4TG5JbUkxSzhRRUcxR2RNc2RyZm9UU3plZFJlOGIxTWpSN1Vzc1BSQXFnTG5OS3VpcW5FUG5kVm9FTGwwaGVqVmtLUE9xYUlseEFleFZrOWMvU0huQTFtQTVXbnJxUFBvTFAzdng3QUprYlhyS3N1UmZCeW1tZ0NFZ0VsejgxRU9mRTViMnU3ek9Hdk5sakN6YytBWFJ4Q1Yzc0dTU0dpb0VTeEM1UExaazN0T2F5Z0ZJaUh4MkU5TnpVbVdtSlR6VWIwQ20wUkk1dW9hVzlOUWJhNTkwdWdoNTFQenBydmNoMGRXQ1lJcTBBT3Q0WHQ0ZkRJektmRkdzQUFxeEtyMUY4OEhuWWc4M0s2bEZ0WjBZaEdaR3lXNnRYdUluWmlOcTYycWV0SW9mdWU4Z0JSdXZQdnRDYkFrQWFpbkJ2VTZkaUtiTm9DeHNzTUcwWEJtNXgvdGpJd1RGWkNNayttcmZUc3NDbXk5emV3MHlicDhTNWFkalh4d3NDNzdOU1VHUHVoVjJ5VXJFRVlyZUYyMHJTVjFwVUNnVmE0Wkp0bE5MQm1BeEJvWVNBejh4UzJXaDRZZDUxVUFOWGQ0SEJOdjJ3Nk1ZTkFnMzlWSUJBRTNudzN3dTgrTStDOXR0YVBEUFgwT2lBSFg4cEhwbEpIY0g1ZzFFa3FTbUx4NStCM3BQanVpY1JBcGRiZHVZV0tVbnNjV1NWRVNNeHNpVmNVRlYvQTRiRXFkVituNnEzWUQ5anFLTkxFc0I2bHI4VCtWUU94UW9pbEUzRVN4ZWpVWkFQa296QlpxWFkyRWN3aEVVc2dTYjVpSzVQUEF3YjlPOC9HRm5xbGN2MnU4emFDN1J6SmhqeTJQcG94TGtFVURMNU1XSUtBaDRYeVpKb1gwT2kzd3RxQms0NVRiZWJvT2NlT1VHM3k4R1JoNGQ5TDZoSGdjWTZRWjV6ZWxDVlRmNnlOUEplYTBOT0xvY29yeENUcEtUNEJlcDVGUTlTS0Q1RG12NDZsNk5qelk2OW1XZTNBWm1NUm5iam9pajQwZkFXZkViNUFHakdqYnpzRm9iNFNWNm1rMGpOQ2FyWGd4M0dSQnY5cTZHR3V4emVrZ2twZUtIclJ2Q3hiNkNiRi9SRE4yM0luTFM3ZGRZQk1ZUHRjRjhkSGk2bHRkTWtnVHZUa1pNbStCUS9zVzVad0hhZUJLOXFjWGhjdXMwTk12RlVTZWhtcm1aK3JXSGkrTEFyVEtRM3JBTU44N2M3RzUvWmZVVmYwTFg1UnlmT1JmL0dFVnRLalVZbWZPRDY0U3ZSWTE1dDYyc1VCVi91UE90WUNHR0cxMk9ycjVwVkZTS3drak9SV3RXMndCRnVtL01HRlhwYkdmYjIzYUVIM1ZtRVNJL013ZDNheVR1WlhTc1lYc3JtalU3K2tPc29aL1AyT2hmZ0pHaDNQVVBnSXpYOVluYnVnSFNaeTYxMXh2MEVYclVUVG5nZkNnUkVpaWpHSHVNL291WHVHQ3B5RFdmUmdqWUJwM25URUludGdXU0M2RWsrUVJySlNBclJzWmJDNXh1QkZXWitlSjQxc1c2azN2ZWxCQTQ5U3ZidkI2VkprRWZldzJITTBRVGt0N3JsQzhpcWdZSnU0eGFVNWJxMWRCL0xXRDJmRVVnbUFSZS9JNzdoUXFrSU1qOU1YNzRiL1MzSDlwSS85aWVsWnRSTGlrOVZEbXdwYnFyZklJQ1pFNnl3NTZaOGN5Nk9GcXdHTGMrTkhlOXZudE41OWVpai9SclZEU29QSy9zaWpESjRpSENpbkJ3clNDU3RyNjlxblgvdmNRaVFkNU04S25wQWE3dkJGVDgwcHAwcW1DaEZDN01mWEh1RFdjSHpwdzByMW0vQmlwSnBOeHlRd20va2h4aWh4TFJsY281ay9yYjJ4NkZ0YlJQclJoYS9TYUk4ZUtrNFdRZEszMDUrNlpOQ2docFh3bjh4YzM2dEN2MWMxQzIzaU9FSzVHRGpUVUE5bHNlRTBTQk04QXpmUW1EeGhqNSs1aEpNWUtiQUEyRmNUQ3pQTEsxWWFZRUJ0aGU5Vmd1UFZtOTlyajVqN0VXejJncGhZMmRBWWFyKy9HYk5uRkRxTUh3eGxpRW4wTW9UUEZSTjVnUjdkQjNZOEZKTThveGhqcmV6dDFuc2lCSFpYV0NRK3RrOEFnSUNBZ0lDQWdPSjdSQURCOU5FaGFPeGVTQm5aR2t1cnJuMm1ROVR6UVhUaWNqWWlXQno0R3NHMEUxWmMzMi9XRjMyL1JmNmZPays3dUY3N1B1RFAyYThiOXYxY1g3UHRVZCszVWI5dWlmN05iblA4UHJLNzdmcGw5UG5WL3dmWnEzMmZhWi90MkgzN2ZxM3YyZmE4Nzl1dUg3YnEvWnFHNGYyL1VFL3M5L3pYenBQMi9ZTGZzK3dQL1QxTDM2dnBsZjAvcnFkK3JTTDlWdGZwNk5EYlhjZVh0SENUWlI3VWZnOXBMU3dXc3E4WVBLY2xnd0JRdHhSMHYvNUROY0RYalA5S1lLV2MrdVNKYWNNOTlCUDhObllkVENnSDU0U01DSTVJM0ZjSUtCemdVV3pWZXZMcVBHTzFEMWFseXo0VStGcElaVnFDLzIrQzY5QlBERGhCdFpvbVNrZnBXZXdyVFFZSmYwNlEwNStsQ0UzWWFUMTlLQnBadzB5cHN2SHBOL21HNW1PblRyTzBaM2J0SDRaQzB1R05rZVRLQTA1RHl0WTJSb1ZxVm9xYmZIcEU5b2RHYUJsWEw1dmNMeWlIUlpNNFNGZVRhN3hZcm1BVllhZkVVd2Vtc2JxbWx0bnN0Q0JyQ0gwZ3BvWGRjN3BHcjNtNFVkc2ZlNzJYeis2MS91dmZFVGxIVEVvR2JzY2J4TktPdmsvTUowV1ArSFZBNDdGM0JVL0tVWHo4eWJJSDh2MHYvM1c3a1NTaWRBdC94Wm1IU0ZXS1JRNWpwT2R4SmVIVDZzVVI4R1k0c3dZUzVENDEvTjZhaXM0aG9ITkxsN2VETHJFenMweHgwdGpaL3dmTHZkazBZR21BSXpQOFdMNlpFOXQvanRKeWxVVGROVksvbUFIdE5RN09xTEsxNXI1NXhPV1pFYWwrOXFJTzZaSDBRSHNQWXdBd2JwaHozUzBoTDU4L2E0TnZ6Wmk2OFBxdmNlNFFETWFtdmQwc2R2WFNXMVpZOUpMN3ZzaGkzWW1SWEdKais2dnNGMGRicWcrTXFsTEhPRmU4TXNzc0sxMkpqWkVIaytaalBUekFnWGY0UUs0cUY3T044T2xIRGw3eXpFVzdMc1BhRWVnYmZkM0NadEJnbHVQN053YXROQWs1eFM5NnJObFlRQzlYd1dkRmQ5K1hBdk9RUFVzQnBPanFTanpINDR6RjFUWkovdTdIL0Z3OHdiTWo1ZWdoN2dXckFoTWJPN0l2L1BDRjJYN3pnWjJxOVVsZldMMW81cTdJdVVHR2VrbHd6WTM5bDdqUXhmRUlSem9KcnVkaDhlVVpaaDR4TURZdmt5RnRlVUZjZkhibkNNZExSRFdOQVB4aXBqS0tqZ21TZWFmL1pOMFFDaXFoVFBKRSt4UVB1aDIwcmJzR2xJYWUrak9RY1p2dXlvc2wxajduRXNJVXhaQnRHZU9QM0pqb3k0NVFEWnFhRG8vK2VHeWt5MU1lZE1tUnNpZEkydE5xWHAwZVFpbU5aM1hpV2ZUSk9XTW9WRmJScWhSbTJwVUdKcUQ4UjJObElPTml6MExsdVBhWW5lTWc3S1VUVkFFVXdDV1psck5hcC9ZSlRlUUFsT2dtalpOTlFLSC9TckE0ODY1M1d1SURGbEpvVkZtZXRRSDFOMTBmM2pKSkR5VzN6d2hoNHUrSHNnd2thdDdRWm5EVGxMTFM1eHZYR0ZpcTlidys3c1ZDbkl0OGk3UThrUy9WWm1jRmRIem9WZFo0Qmw2S1pObUV5UGNNMlF0d2RLUDNESmpBUGhGZTNJODBjZTBtM2Q2aVBXbUQ0VEJjUDI1bk9VcEJOTHRuNmcyTndxM2tyd0RIRnc4KzU5SEE5Yk93cStrQm9UbjZORCtoYjE3NThidDBUbVZyMlhSYmppUFJTaHZnbG9RT3owMk1haSswYUl3VXZJOThvWHVIRGRpVlZCQ1g4OXp0ZjRabEduWUJMVUU4SlZHUmV3SXdNbVpjTGZTQlZPV1BzV0ZiQzZ6SGFBNUFHSXdrckpWclpGODJjT0NDYTluUjhvc0hUUU16NjdRcVVJMVZNVnJZZ1VoTHZUOWErWVVQR1ZEaWQrMjVpaU9SUS9CdUVpY2VGWUhzSTVqSEIxbzhnWDdGd0VZaXluRXZ2ZFZUcVVlbUIyQ3FjS1lIU3FPbUwvRzhjVU1mdHBmNTNJWk5tUUZuSld6aWdiK3doaThjTXFoSVVxWHZ1SHY0dEJkb1h4ZW9MbWpsUHVWMmdhdHBkdENTNkFIVSs4S1VlT2dKbXdaRlhoT1RsTzEyNzQ0WGpwZ0h0TnV4ZlNjNWtuUHJBb3NuVGY3ZFhXcTdTVDFtRXVkRXJ1TFdhQkN0aFZNV1g0c3RUOFRaVlNHMSswZ1lUaHp4VjY0WTBIMG9ibng0TkVtY3pxenJHSFpISUw0V0lIL1c4emlBdmxkaE91SHlHUHBVcG1VUFZndG9ZcDZUR0J6d0ZOQ2ZNLzY4L2tuR2xQZWNtcmpMcXpZNTlJNE5lVytpdXdPR1RQZ3l6cTBya0hHcktmeFFTQ1M5eUl1eld5dUhCM0E2dW85U3VvZXNqWTcwZlJabXNZZFBPVHk4RWJPUVJCRXRlTEJXZktJeHBGekFjaGs3QzJSb2NGbVRNTDVidHUxVmhoN0lsS0pka2FmTE00R2IzY1E2QnpCVkpaRW12dyt5bm1pZGkxV2RNaTdVS3RkZHFZTVJGalA2TGhrZUJPaDZtUWg1aS82dWFWYjBqWmIzRmRJSU53MEJIKzZhdHdrVDIvT1NybXRSREV3UVFmS1VoMjVzaEpEUFdCSVdxV0JiKzR0MG5Mb2FYRUN3VUFhL2xSelhyWUE4N1BQTWNYdy9paUVLUkszWW9DMUJvYkRENUZVTTQybUlTVGJCUnZqK1dTQ3ZaaldYNVpvTGRIMDB1TFQ1QkY0bFVEakRYZ3dMR2xTSnM2NFR0OXBQWnJpRS9YSDNuUUR5T2pWNjEyNmFDV1ZEQUR1dDh6UjVYR0VMMXVhRnNxUENnajk4c05hbFpkSWxFbGIrQnpwbit2YlNXWS9KdnFxbWIxZTljaWhOZFpmMDlqS3h3ZmVmSm1saEhJa25oYWd0ZTAyMjlrY0ltcXBoMFZMTFE1akNGR1JiTTNvT3RYR1ZSV21aQzBQamtJY1NESTJ4NHdJOTZ4SktwUHU3NHpDcEZmWFJsNzZTNjBoU0ZXWGF1NkJPNkxWTTcyODhEa0JWVFE0dzB0UWo0Y0ptcUYybnN0ZGpmeURJaGE4eENvOGdHWDBYTWVMT1d6Y01OUDQ0TmJKbkFIT3FYMWpOeGNhRG1UMnFiZ0Rrck1JQTFpNlJmN2JKMGFEVTgxempZeWdEOGVaQnlCaGhHcHBPS01oc3pHaURrRTdabFdyWHpFTGV2UTZTMHlCcTVaWEQ1SFNyWGI2OWQ5TkEvM3kvQlUvVWRsUWxxTzBoM256Qzc5d1UzNFJSWnR6NUhtTGhnM2ZiREdpMnVJQnlDMmdyTUtWeHFNaHRsS3NqdWhuM2g4WHQ2dlliei9lb1B5eFVNTzM4ancwOEVDS3JWVkN5S21lZklFdVQxbzlFMngvdjFBd2Vvb2lVKzZ4dHROeHozbHFaUHBrM1BmRnlEMVR3RCs1aFZycE9wWUFrK3NUbkU3bG9uMjJoNmo1bTFoK0tNNUsxNFhpMm1WaCtlMGdvWFpEeTBoV0ZPZnh2OTIrS09oZEF1b210L3VBNkJpR1daVFAwY2RjUE5WREhyQWFkVmNteTdlYlo1NWZLOUhCWFRZOWlDWWVodVI0SUhmSko5bTU3TTIzdkJxRVI0dGNxZUhCL1UvUUFUVUs1T3JmY29oM01LZ2R4aTlTVkJWMjd4b295RzFJMFQzN3pzUVlFVm9PRTZ5KzBlcEQ1QUNNNHhTblNDZlVRc3JWRiswaGN2Z05EYmRaSld3OVVXVkFrS01XOGtiT2xEYjU2Snkxam14eGF3OSs2Q2wzaWRHNjJtUnJsUmZ6NlozRlBYSkNyRlhqYy9iMHdvMXBQMitjbDVTWGpnWWxWOFRuUTVFTVNKelgzSFdhRnF0bmpBM3h0cU5CZnRtMXlSbStQWjVFbHFVZ1g2Nys0djI4ZXIzMGRrWjBsTkVxWHBwL2FjM0ZkQUNDZUVSMG9LdmhRSXdyQU11UTIyZ296MS9ORHFPQi9semxUSlRHSWN0TUNlR3hxNkloMTdMemZJZ25CNjRuWVBwbVltTUVpamFwSlFvcy8zK0VBL1J4NUREeG55clB0UXY2d2FRWkw3Q0hvQkFOanN2TkNraTRHd0tEZkNHclZNcDJBdmFqUFg1Qmp5M0dITHIyLzJCMkRCODJjMXczTXgrUU04akdlYi90WnJncjM1TklXZnBXbG9zSkFLOHN6VjVHb3JuRjdPWXJFTGVPeGJuL3FwejgraWVoOFhPNFRmcWMzdDVGczhaZ05oMjdUUCtLNVRQOGNFaksxVHBwS2E2Q091NCtCQ1NYVlJXd0dTVDliV2RlRG1CdGNyVjdlSFVwdnhWUXp1NzdUemVUajRMd2toOElJRDFoamE1Z0drUmhnb2NUTVE2MllsYW9KS0srN25xYVpubWIza1pVTjBMb1gvUXFmRTkyaWZBWUtRbzkvd1AzSHh3VFN6dWNxMTIzSSthSFpYZ280UlljdlVvcW5xOUVsMzRNdTh2M3FmejdlbXVxVkNqL1Z2dy9QSWY5QlFLNEtRaVd6WlUwbENKOTNLUXZvVEpHak43M0hFaXNkVTJvOXVJTFl4QlEva3pCdEM1TVJudUFrNkZwR1F0WllyTUtVWXJKZ3ljc0RrTVg3SlNhVFdvbmFaRE1CenRFWElueC9hSXZNaGVVZU5WOE5wdUl5ZkVjYmxvemZSTjRST0pCcmFLbk05WEljeWZVN1BGeXJiTTdwNXFnRHBtNUtyRG1XQS83NjNYK1Q5UDR4Qk9jQi9hTW1OdmdpM3ZxOFJwU0Z4c1hybXpUUEZQNjdId3dEd1FWRWF0Z3dwNVRRb0s4WkhuUEM3OVhhWW9nc0QzVzlraW1aOVdVcFBkTzhDV01zNDNpZ1ZZNk1rcTRGcmt3NXBsWmh0NFF0cjBoNlNoMll6eUVIemZqMFVZZEd0dkNxdndDOThsUVNnSkF1dGt4a0RVZ05MaTJ0dGhiaGxoUk1TazNyM2NCekZnNGFKV1Ztbm5lSmhVV1V0UmF0cWJCL0dQbnZiR2drS1JzNHpZL09Pd3ZNWitYME5nc05tckpPV2xlZ29neUYzM2NIUWNaZnpNb2VldHFWaTJBZ1VnUFlUeTZkMGFWYXE5a013V3NPd3hxeks4QWVPVjJWNGhOWWF2OGNIS3VPVW4rbUlrakpXekNjM1A5d3AzekFCbmF3WjhKK1Rob1FCV2dOU2tsK25UQ2pRVHdTcVlCL0svRzJLS0xhY05ZSlFVTXZhWkREUjJyM05oT1l6cktZYVkybEdVZi9PVjJidFdQbERMYnhORnlUYmE5Z0VCc1M0d3ZNdzh3cWxZK0ViM082VUFNbG0zR1ZjdUhjN3drMjgvd0lvdW1hR0JpWjcvR3hSOUJ4Z2ZjQnhjbXlKR3kyaXRralJMSnh6NHdOeURIczVQMUFpSWRFSHJ6ZWZ5Y1Nqc1QzVUxDS1N6M3M5d2RzT05hNlVvRmZtNHpYajZrdCtORmFoNU1ocXM0VGwxY09vNFhMdi93UFkxbUIva21XYThjODI4UVgrbFpEODNHcis0S2lZVWFiaE5KaE9UeHRnNXRwVllxdHQzQkZxeEF6Wkd1Qjh1REdzNTkya25ydjN0UG81RzNkTjJuS1hETTM5TllQcXMrVHQrUGNqM3N1aGU4anl3b3dVUDh0M0pLYUZpYjZnNUxaclg5UGx1ZGgzZUlYVlAzQzlIeVNGRjhTZmJOL25KSk1Hd0dCNnlFaUVkalJUd2E5MC9oUCs1TGtuRGYzRW1Tejh1ZUh0bXc3L2VpZW45VitCTllHZFNjZWlsVU1rVzRRaVZrNUc1TGhZd2xEVHpKZkdtWk16cFQvRXRUWXZiUU1KSTU5ZTMzSU5xcDhISUdZMkFrdWZFQUJHK2k4V3BvSVJmOGFYMG9FVTMrUWpYQjZCRVZEMHcvcWNySzkwMHQxQmxEbldGWFprU0pERXFDYjIrSFZRZGxoZkh5VUg4RTBXNVBGdnUxM1NQenFLSHY2R2d2S1ZLS1F6b0ZJVENLZUdFa1RzbkFIa3FKaEx2QUk5UHFVdXdkeS96eGw0L25TVTloY2YxM2k4OHkvK05rZXh0cVc5WmR0ZHBNbmZVQy9rNnhscUt5em81MC8rQzYyNXNqUXhyL2RBSS93YzFURzF6SkNHd25WMjBkNU9FVytyRkJiQlRndFROZWdGOXlCTUZwOFdGaFVCd0NLZ2Q3NHJDWUVuUndUTkYrY1dvWW5qdUpoQ0Q5U1d6Rlc5UngzRlhtU0dWUlNUQkdBSEZKZTAyd1JMQzRNL1hRUWlzWmFodjFxWWt2NHlUK3o3Q0hWSzJwNU96SnhsbnRQNnJmTkFqcDZtNHNGWkR3dzBXNTdGSUxLL3hucVIra0t1S1lPSXNWNktuSG5mNjdiUVFrSFR1THpCYzFOOUlIRXd0UXFBY1hGN3BOVGIzUTNXMk53YkZhVEttSmNmV1BvZlEvbHZ0VXYzbjM5cVdWbEtFZExyd1luc1pUdW4xT3pEUzFTciswRXFDTTZrTklndDlla0dOMWtEVEhQL1pBRjZYVmJqd2FRdzFTcnF5U0ExK1ppRExnYVRva0JuM0ovbnVKSXJFbjhSKzFVWjF3YXUzaGcybVBuWUV1cHd5Y1R2N2VqSVk4Y2ZVTmljaXh2cWpwUlNBVlR5RXNNZ0xRWHczb1JuOVIvZ1NHcENQTnMvR0ZBNlg5Zmw2Nk5PWHFtWEY1b0Rib3l1MTA3T1VMR3R2bCtyL205RC9TNytCOW13aVRLOEpVQ1V3WEttK2V5aTdpVUtKb3BMODFWMHRja09ocEQ2cjZxc1JoR3VRV2JzZzVKTFZ3WDZiU2xyUFlHcmRMN1ExS21mSEFYaXVuTjZZMkpUTSt2MERBMVJoaUw5Qm9jRVJoM0NnVEdZM2VWdmhmK0dONnN5emtkMDc2bGZEdTMyQld0dHpPVDkwRG9tTWVGR2JTUzJBNnV0K2t6dWdIc1VuSU5YSXdVZ095eFhjNHFKNEcwUnFWMWNjNlZ0ZXJTck15Z3gzTXBsT1FXbW5OUnduWG02TG1JRkZnZUVUVEhyNmE5NUpRWXREekdFdDVCVWxNdEx1bytNelNjcFhhUmNkWG0zTEVJRnJoeDlVTzd5SGtHUU1ZNXB0VUhDMU42WXJkRW54Z081Ykc4YWRXVnhsRDVYN0czaGNuKzBSWC9RRTZodW9YZ1BQaTFXT2xmcStvRnZtWjBwZ3QxM1lKb2FtNlF6ZXpyRTNmTk5yc3JyN0hHTUtSejlCRjg2ZHhkVEpDd1FUeVN4ZU83S0ZleDRLL2dzL2MwblEwNlp4di9SYjRkeGJZMXNQUUJqY2wrV29tZXdrSTFQSkFKYTl2YmhNV0QybUZ5dnRGUG5XZ2podUh5ZXBxcS9xNFZZV09hek0vQnl3amRQNEZUYW13UHR2VXpxT1AzOHNtVHF3NW1ubVovTUt4T25LMDhEQUJWd3lyRFNRUDM0bExEZmdmMjQvb0JOM3NnNjBEMVVBb0E2LzFIMytUOGlxOW4rUjRaQmNzVlhmcWJCai8xUW43bjdqdUVtSjF3UEQ4V0lZOVllUFRTdVNGL0dBZVhuM0dGa2V0Y2VOblBBdXE3L0h5dzlGZ2lvMndzS1hmRXRaRzRxSVh3bDFhNVBIVFhMZUkyendiNExMSlJuMU9mZjNiSXdFRU1XSkhFQmdnaVJLQTV6eDBTa3I1aElWU2h4L2doQmprVkMzbnpXcHNwZURpbVBHWE1OZWl2SGI4SkM3MlhLOUxRNDU4VUFCdGp2TTJmeHppUVp4SFZvLytFZ1JVM1g3RWlGazhMdS9Ud0JrTVo3em1Sb1N3ay9tV2dacGVueis0UlFRS2NoZ2V6QjdhbnN4QVZxaFJyS0VSQ3NFQm96aXEvOWpzRFlkY2VxcUxvMzNKczdBcUtMb0lJR2xXWWkyNThpcTI0VThCZjkrSGVlbGc1RDNSM1pwc09UaTBKZnlpcU53ZVljdGZTdEU0Yzk1emhkdGJNZ2VtcVdLOG94WVZHcU5QRW5aRHpFQmVSUU9WZzlGRjJJTWpZVjVLZWYzaGNDUFVnclY1L0Z0MnVWcVo0U3ZnazBsSWY5ZTdVcFA0QTg1K2NnQlByUHBKUEpWK3YwWHZ3SWhEejJEWmpnbG1xOGZWNkwzWXdpUjBRbXBiQlRMZVZjSVdEUEJzenNUa3kxcy81cW5tbnl2N3NhNzV4cVhOcE95dEtSc2hJY2g0RkpOeUx1S1h5b09lWlRMemdzZE0wc2pnUnVETyt3bmMrMWQ5U2JYc3lsZWZUcithOXkyTlFmdUR2Y003cmJDRXBSRnQ3UGVhYk1xRGxVcU44YVo2OGJ4dHJnaXdzaERIMWFOaUlXQ0VSbHpYVjNXNXpkeEdvWDVTNm15ZEpQNmRLMjE4TkZlc1lVc3lXVkNKMW8wY2pjNDFLM2V3dFFaQ080Q2Rxd1lBSFpnUmtvMFdha3ljNDhNUlY4N0Ivc2ptOU5HQ0h2UEVHUTBRUDJGMXRoY2JrOS9raFNmdEljQzZoNnErTEVyai9hanYvSW5kblpoMm5EbzY4bTcvbkUrSW54Ky9VVWxMY1ptQkFBYjk0SjJvNmhQa1B6NXZmT2RObm5jM3RoSDhnMVFOUE4xZlJXb2E5cWs3RmdjMEEwcEM5ZEJZQjBuNzFZUkw4b2pUL0NUODNXWStwc1c3RVZmQUNyRVlHOVhqWnpJdS8rRXRFQlI0L1llZHpXT0FpNXcrMDJaS0Vhd042WURwM0RFRWlYNTluVWFONllTNEcwbEpVYW8rOEw3N0xYbHdtaGw0Q2oxREkxWFlzWDJyRGlXdjR1a1JZZnA5SXZ4QUdZbzBOMFRqUWNwZW5NeTZMaFdKaUJqSE5hdE5kVmxJUFQxVmFIb2hBQjRPQnRiVk95VHJreG1JdVpMdW1XUkdhQ29YYTFSOThlNkJLNzk1cld4QWFJQ3Iyb2hYdlVLVVJCWUJYL0dISjFFZS9wMEYxeXc1RTJqaWVCd3crL3hRTDBZMTdpUXBtK285QWNXMGlKRFQ5ZkxVRzVZUTltYnJlZU1vcFQ2ZzRUS1UvbEtpWE00M3J3aTRoL1hzblFJcmE2WWNaRTBaczA4WDBTaUx4YmhjNGs3NGhJOFk2MnJwNE4yODFrdCtneXAzMzRhL3RyS2hCQ1BmSTljUGViNDVRVWtDZDJyWEY3WVhQcE5UdkFvMVY2bjI4MXRPVjhkVVdmL0tSekZuN1Y5YzhISzh0Umk5YkJxSVhzZEJNUFloQmhnZk01TDJpWXM4YzFEK25PaFA2d3ljcWNwZGE5T1Q5U0NKVFhmOXEwZEVENWtwdkhKdHQxU3dxYVlUS3Y4MHdCeWxYVm4velFzQzNlZGJlcWxCVWFGZVV4aEpVbFhRbzUvTTNYUFdYdUYyenVORlZyWUhiOVcwUzBDR0YyM1h6QmRGYnNIb0pLWUNkNzE5ZVQrRWVKSERIUi9SQm1NRDBRZmphTkU3VlMvMnYzUXFNTWRrMnJyWVIyN3dWcmlJcnVpbXZHSzl4NjliVmE0T1dsR3o5aWlWMjNUQWsxd3lDZy9UT0d3RWFXcWM5T3F5OTVrUmFlM1M2ZkQ1S2R0b1VIYXp4UUtkTGI5WjErMldLRDhTNGR6Z1NiaytIR0d6ME5YNHFRUmJmTzNCcVVXdjVBTVpDVU5icVVkWk5pRFN5NzdNWUdaakJWWlZnNjQzNlN1dUpCVFk4anMzQ2ZlNDlUWkg1RWRORXhMUm1ST0pwU0liUCtJelJuckR0RWtoelJBMS82bk1IMnoyS0VQN3FUS1VibXAyRWZRSE5MbTNkeEhUK1JMTitLeDV6Qk5XckdpclJkclBtKzJUTEUxK0J2MU91bWcyc2ZwRzBpZ01oKzVmdjh1RG9pQ2U3eVZoRGRJOFVaVFhqVExZQ0RLcGRURjV1RlhIU25FTUl1aGREQk5ISjJueVpsMCtVdldtUi9YY2RZNC9oQ2JEbGtOMzhXd2IzZTVyTTBTN2s4NXh4a1c2WWNsa3UxUmQwdjVoanprUEdSbmt6WlZlbTRPM1Y0Um4yMVB3bW1VUUw1eVVQUSt6bnJLZlJieFBCb2pqbFlBRENsN2xxVEpqQlAvVWdaT2ZBZ3lHaU5wS05QOWxBWlVjckN2UE1rUGNhUXIxcHFCQlp0WXNreVZQNis2T3N3VjNtZDZjcDNOaFZuU0hFVldJc2tsRUVpeU1PWWcxcGp4NjE5ZGtlT1VZTHBoL003VUlvWEk3SVNYelFyRmRuTkVybWVyM2tDWU5OTUtFOUlMQk5yU1dkRXUyaEYvRHpFQWdveDJXSFE5MXkrSHMwbDFURU54bFNpVk9BTmZJRjdZWjcwRGVLOGtrNDZudElnc2RQK0JSMDdscUcveXFuLzJKdmpLNURhUm8rZk9nb3hjQmlxOWVmZ05DdXVnRGRubjJIR0k1NG9Gd1o1Q2NYN0h5SURncVdZQWNrL2dhRGNhVFZrNzhjU2k1dnRuaXlRc3NjcThFUVowZ3VIS1NLOFJQZFBTcjNuM3hHWXI5WDVYWjhwZkpkVFhOYlI3TFU3WThjYWRKMmVwSlFkRXZScStZc0d6ZmNnTVQrV0V3d2o5Mm1TY2tzbkY5MGE0UEUwZm5CT0puTHdYVWtvd1JIVHlESDA0UlpwVGxQcjhPenVLQk1UT0hldHNtdkJ2OVR5dmszelZITjlBZ0N5bHBaVmd3RW9lMmJEVzFxNk9DYU92T3lnSHVKU29uVTNxZmZidkxyK2V0SGlkMnNZOUZuVjFJUEJqTTRPSVYrNDNRdmk1TXY1d3dTL2VuNU4wQm5SNmlydG1tRm9zMXEvZ0x5TnB6T3ExT2JtOThGOUhGTXNkTjRQOW9ZTERhcE5YVkhWY1hwL3pWMXdSbGJSL1cxR3MwWWZOeTk2eUVzZnFLcFMyZ0tPN2Z2UVFoN24zUkRIQUx2Ukg3akJWeWQzbjJjMFRtbkZQeUtMSVRDc2JJVFZUT3FjM1FRTVl5cXVIYUpFUTBYanczTG45YWpjeGVSbk0wZUNvRGZFbGVxbFNIcGJnM1dDR1MvRUJNNGhOQ1lNVXFHVmJob2FiSVY4dGI2OUNwUVk4SUEyVHBKUzdlanRUZUZlSGRiZzJtZVF0bVBIb2FjT3k2VUxGbkp5T0cyR1c1VFQzL3V5NnpFVmJRbExMRmhSS3VtVWV5TDVVZXQwZXFTeTFnQTdDS2ZmVG8yNXJ6Mm1iQ2lyNzhHa3pTTERudkVIZTlaWTFhY3hWQjBHdWZpc3RVaXJRK1pEL2JJdFpLakw3Uit1OVJiMzNGQmlWTmpLR1B0ZlRsYnlacE1iUnB4Vmo2M0hIZnhVN1V2WTFGTjBQNFZOckVRWXZhVkhjUU9rZnpONmYwQy9rdjJabHh5NElJQjdIM3YzRkJVNlBBTGI5Wmh5Q1MxUVVaOHNzcUdlTFdzQWp6WVkxTHk4Wjd1dVJFUDNpcEk3M2JDdm5oS1ozNjVhQVFKaXJ2THBGRUhydUZYbkswQW02Z053ZUxmUWRaMFBmRFArNnJRUVQvSDJrc2RLMHQvcDR5TXVhd1FnZzM1bjNNRVBqWjlYaERJSlFER2dyb2lhb1IxY0svb3gvTm5OSk5WZmR4OG9Wc09uZ1VVMEUvWGlPZ1M3dGsyWnR2VVkyN1FDQkNUQVBkdS9JKzN1NTZIbVdZdFdINnhlMDdFK0YzS013ZVNJREVpM3hxcTByV1FqZkZQMkdVOTliNXk1eU5KWGpXMTNqbncwRURvY1NEQU5sT0RucnRad3oxL2pCVHBSN3NoRHU5VGVFcVhNSFR1bzRPQ3VIM2hPVkdmaE5Uc0UxUGVFQjcwVUwwZTJUUTNlN1RzdnpNZjUvRm11Q2VMdWo3aEJCS3FobXdnWklXV3c0aUpHTkVUem9IanJtL2xpWHJ6N3ozQ1NELzRZb3p3dFM3YjBjR1Y3em5SZjhDSGh2dDVQcGRsU3JIS2huMlJ5aTc4YTcrY1c2c1dlTUZFNDJzdDBkcW1teU5JVVAwQzdvRVNjWVNXelJoelcrbVpBWExmNmF2NERlYVdudkNkRVdHdkpPeGNITVMxcXdjdHFaVm82emxibDNYZWVyM01xRjMxTXlmSlFtV05IaGtVWmlZMU5kWDc5ZGlYWFoyMnArOU1CSFFFM09GT3JveGNMR1AxaTN2bEt6MGJLYmovZm5NTWkrMk5LYXJFaEkzQURQM0sxSUdNS3FuZHRCalVKT3dCWm1jK0dhU1g0YVV2ZWdDbE1VWElUV0JtT3hvUEFUMmhHTFVIbzRKWFBTZitJMm1LME5FbXhSUXhZdGJ4SXF1V0tnZ0FvVmVGcG9zbEFvMmxuNnZGSEliaDVOYi9SNmpRTVZXN1hTQ3VtSDNsU3BkcTh2ZXpVS0VTRHN4NE4xNFp0emxXSkY0aVRQeUxBZGw1RkpLT2o2Z3U0K24vZWxQQTdidXZPcU92anB3Wi8yd3VLNTFPVkk3RDliSTJvRCsxbUNycEhua3plUHV4NU5NT1RBNkxIY0FZM0F3MUdWbmJ2eWRoZUFaN3FuSjdSQm1pT1BIR2FKcGpPSlF6ajY2TEM2Mlc5a0ZSaWk0VnErN3BYYmpGSnZkUyswVjc5UGlGaTN3b1AyNTcwS2owL21tRVhQdVRxZzNVZUR3RWtiTVFJb21hYk9yT1FCVURnNHhBK0I4cjdtNzlUL2pPZG92ME53SDR6dy9iUE5PQlBESmpoWldFNHllb25xODdaVDgvaVA0N0NYVHVIUnQwWFY3Ym9QTlJ2ayt3NU45NG1aRXIvYlZEVVVpVy9yRDdGQ0xDYytnL3dzN016TEhuejhkS1I1M25pMEJOUWNGOCt3aWMySUlUY3VmZnJ0NnIvZTBSUFdXZm9RVkxjS1FZUU1VZ0taMHdMNmE3dlpVNHQ5TWNTU1BOc1h0RmpqYXl4c2I0a1NJNm5TM3A0Q1JHZzdVQnk0N3YxQml6NkI2TEh1UnhwdkNHVytpS2NiRGJ0dFowK29QdUpUZnFzR0lyRWRLdUR1aVZPOHNpYS9HZ1VCcGZsb2V0bW42b0F4dHdsQ09wZExUSG8veWM2WnE3dFJmT2RYcFlDbTdXU1p4MG8xU3ZvMlorSCt1TGFuWE9TUmIzbXJOckVoaUhJSWVPZ2pJdzdLL0lDUktwUHhYc2hFenBjWTd5b3Zaa2FVNW5FbEtSR1ViTEtOSUQ4Vk5jODdCLzJBemNxVE9uaHpXQ01HMXhWT0FyZEo3bGtKMkY4MVpWdzFidWlYcHY4TGdGUWxHVGZtTTJ2Q3Mrem1PRmhUbVNCMkVKNk1lZUU3Y1pjSjQrZ20vUkFtejB3QmZwL1UwTVFhdmZxZGNJSFQ0ZTJOMUd3MEFMa0lmaFlKSVA1YzlFeE5oL1pOYmtSR2hPTmFwdkJyOER2dGp3bHJNVmJ4V1JiNm5veHNrQU5WSkNvVlo5YmQzTjJsWkxXb05LZDhySU10NlB4K0phNllZOUVNeVloa245QnpVcHJvSzkyeHBnOTlzVXhoY2RuSnZzL2JYcEdacW50VTdkV0U4VElEUlZ2dWdOZi9MbUptUUxPTFFmTXZFYjFYcVBHWWR4N2NqcDBHRU0yWmlqSFVyTUdHdDlPOUVZb2pPYkE0UTVidkFoYnUwSS94Sk9LeVBJK3d4SkFqd3UyV2w3c0FCYXBBYVFZaW9yWEdYRjhORndWL2dpOUg5Tmx0aW9teFhJQTNpTkJsMmJZNDN2eG5MZDhmZHY4K0FCbXgyUWt2SEdPOVNZS3BhL3dUSUtrNVJ2dUptMXlzM3lzVThGUFZaZklLY3hIUzhwTDIwQ3RrVTUvcmlEMmYxT254QUQwczZiL2s0MHZibTdScm1ZRjRxb3gxdEpESURtMHFNbVoxREVUaEFRSUdiR3Z3YlhpdWo3aHo1TEpHMW1sUWlCajB3NXViZmlzUXFJK04rY2pZN09iQXJQSk9PU1Q5WVlRN28yS1JPMlFTZXZxWjVEbS9zQTY0V1RyRFQvVkNpVVREZDlpbU5sUnNRSG1aRlpOTTJmUnJOb1REenpzekpJWldtVGlhNFp6OVpKVWJwbitYZXpPL3ZKaXBsdjJRWEw0bWU3MGIySFNqSmRiZkZDWHNMUkc5elZkWVlWYmQ5RVhDd3h5ZW1RZjRQZUxoOHJJZzljK0dZU2F5dm9VenJEYk1TL0ZmaDdQZTNvNDlDd3lNUWJ2UlhrL3ZmRndqbVV5L3BUOE9YZVZwNVk5VTNjSzYwbm9WWmhPWVV5NlFZaE43UlBxRDVmWFFpUitlMmNKeE5PaGVEL2ZPTEFZZ0dmcUNLbXpvUlF3YTFqdXFteHJCL2RoQ0Z5c1Jhem1HM3N2dmp3aGJGMGZVVFloc1UxS2FLK3hwb2Z1YzFhSU1ndGNDUlVqQmMwYU1sR3V3Z2dGd2xtUXB0a1RLY3FxS3pHU0ZkUnhtNzJ0NzNRNmpUdmZTUmo5Y01yUHFyTEhYTHFKMGdpMGsyYVVPeVYxMlpOcU9LN2FFZ0ZyUllTVS9KQmpVYmFIY2pjNDJJR2ovZmlOYUprck83ckFNZ3lvekZDdlUzVVoyU0twL3dSZHVCWEt4eWZRdFAwcHNUWDJiMnQwY0lNbmEzNjJqSVBlOEJ2TXo4ZGFiU25wOFFGakpxTUhJaEFlSjJ2M24xaXovNlk3SHI4a1ZNamJNMHNUVmxsRFdiRmZSRUNZTkVRVldlTUZYUVlKU3YvVEFFUkkzeElNY3MwN0M5T2E4TnVqK1ZxQ1NoQk5ZWWhGcUtPQ0FFTGZZb1pYd3Z6OWUvaGI1VVRLS212a3RSK0lncHdjd1BXT0o0Y1FKVW9zeTEweUUvSmVIaFYrUHF5YS9RMEtoRmpMS3poVm10bEIyYWg4eEVLdStjc1Y2N2RyVHVSUWJzSU1pZEdhT0owbG9mdHMva01GbkVCNkhKeWcxV3VFOGVzTUZsckZNa3g3UEtLdzRyakpwTkIxTG1ZOUtWWnk4STNkK0o0NWQrNWVhZVRFTmVJTE1peVdibEdvL0FJWGt3QTVwRGtsQ3B2R0JBWWttNWpMdmF5UFhGU0plZVZTVFY5N2tGNHZDMDJCcGZwanRCM0cyY1Q4SjBKQVlCTW9uV3RBekFvWTZKNXU1anZWaENpcVhGQzJLdzE2cmdLZTQyZ1VJMG8vdURFN0UrNU0vZ0psQ0FtY2cxa003ZUJ2emRxVWFTdVE5d1hpZlJaYVA3cEVPRlBmSi9UdGNXVHdLVGZOdWUrWXFsVWFYSjBkWllaVjJUdXpKaDZueTFrMFNGb2oyUG0yaU9mZ1dnTWEwUkNjK25wd0tmeU9jL0tPaU9MaEFUM1ZzbksrdWNqaW42bDVWOWE3L2c2WXpEdmphWW55ZmV1VFFkbUtsK1BUSE93eVhpQm9vbzZGamF4OGVQV1lHaWEwbmV0SXNIYnB1ZHVpSHJDRTQwMDkzeG03dFFXc2NFcUVWL2dxWHQvZDVFMm9Cay9TVzhVdTJKbi8wNjdTLzVoWG5RM1pZaituaExtZjcyN1N0MHZKdjduak1nV1dxQU5ZL29ZQUo0VGdJak41TDgrVnZaS1kyYkhwYzlpMW90ZUYzK1B0UU5aMmdCU3FkVEVwMHZqYnlJVFZ5QnRFM0ZpYjVoWUlHOWpjVjJmNkprRDc2d0I3ZldyREtiZWM0MlBRelIvRU5RQjFoVmZuRFIvSlBBdUlWam4rNS9yV1h5TTFoL1JDOThaWXhFWWU2YjY5R3lCK0JsMXJSUExmNitxYzFHdy9hZnE2blc2ZCtmN2NTdFYvWVZQclNEN1JHemdKY1lFQk9EQkZ1REcwd1VrS0pnTmpLRzQ0WXZ5dnRLOVk3aUNkMzU3QzZLYlJFTzE1a1NuOHdsTHc2RmwxRnVhRUtJRzZMa3V2K0plVEtsaTdPMm43L1FxYXc0VHVSeDJDWjM2WElLaEJFYlo5YmxQVlYvTHkvS2hWWEE1MElub3FJaHQ4a1RNQmtKa2JjZkRveE5PODJoRzNJRXVXRjh2OVdNaCtBOHlMUnlRelVCZ096bndicU80M0hVT29GRFFXUmZiSFZiemhKUkpLbUttd0RpaDJBMmxoSmFIUlE1MHh2bUtqY0FrTjZGTkp0RUVZRG9HVEhTbzhhMklBTjQrQ2lrRXhNOXVITWpWNEVPMVowREl2L0pDcGpJbW1tbHlvRnhZMTZUb3JpL2hUZ3puN0FiSG14Z3Zud01jSkxrOWhjNUhjME1IZVpUNlhBbFVQZEtvYlRxSE5UTFdVVjdYRHgzR3dxOHo2TU5zRG9SakE3dzlKRk9reUhRMkFEbHNCUkRhSkRqUjF3UGk3aUdqK1lCUyttVncyeFZ3SU5jaWMzVnVQdk41eTF4RnRtemVlV2RPRGF6K0t1Z2hYbVZROEhHemw4QXNNZWVDc0FqTGtDcFFGL2pTS3hheG1OYXZDOUoxNVViQjRFWlBhRkNlbVJQWEZFMTI1eTl3MVc1TmMzKzZoSzhnTjl5aEhHOWRDWHEzRzVSQUpPVXVVVE1mZUJiTmgzWGd0TWFadnhBenl5WGFZYnU4aXRWcWpwTGFJMVhyaUNGYWJJZ0h2M3B5S3c0MU5abFhkN1pxNjNCUWNHMUNNb25pODJ1UjJwTzFINGV1UG12L0xRak1NMUk0d2ZpVHN5MjhaOTQ4aXFmSFMxejEwSTFWRWNod0t4K3pxTzdBQ0w3OXE5SHFmMGdpd0ZnRzA5ejlIRHhUY0M2SnhPUmlzcDU3ZTVkSFU4cklrSlBWMXNucm9sWXByalFuQmZ1bEFOc3paU1N3QUxra0haOFowUUZhQzRNbCtmMDEzM3NqbXZqeStQMTRyYmFwU21JZTl4S2cxcHdKWmZqcW9ETVVuTVVxK2lORkQ3N0NzMWgxOW5MS2FhTEZIMHFWWXFlalVoRDJVcUxnTHVVOXRnVkRhb201eFI2RFpGTmpTaTNNWmpnZTNuZlJFYW1EZXBUaE1ZYit0V3VodFpteEV4R1BNdVpJclJDYnhxS3F1SlhnNlUzZVFiZmFLeVJHOE1jdHNVdHl2RWxYVm4yNUZFNy9ZRnFyaWFoQzF1SGVwTkhablZMenJpaWxyWmlhQWhhQm54M0NLNXZCWWRnVUtGY0FJdnhoUVlhOEZhMjI0TE00aWxXNnh5V3hmcHd4dmM5ZUxwRlN4VStlOTVaTmVhOWZIOUhUUUU0NHMwbFpsR3diTHdnSjlpSDlsdllDMWtscDRDeE15dFJTbExjOVpJdng3ZDZVK3RvQWt1T1ZXYnhObFlUS1hqbDM3UnhsczRobUxJYzUrdEZKQWQwZFVtVjMxakRnZHUyNmlHR0pxYzBhb2dBTUtkTGNEY3lyR2loTXI4MVFZYkgyQXFjaFpBZnBKOG5jL2tjVkxEaEZpaVpOS045S3BBdlZhcDVBQWJEWTVabnYwS1A5WC8wUlJJcW8wOEhmR1dHNDZjUEI2VlN2RUZvdUQzdi9ZUEF3eEI1SDl5Mk5XeCtLZ1ZMS25xM2oydlhBUkRmbHc4RDBBQVA4YVhRM1dZK1B1VnE0blhXYnBkSGVCWnR1S1l4VGtUaWRwOG5GL0IwaDQ2MmpxZHlJczJndHhEbkdhTUg1T1IvYUhaNW9CbTV2RUxjbUg2YUw2RFBhTk1wMXBHQU84em85N3loamZKVGpzU0RPVzdXaXpsSVZDVG9xMlhIQVhpalBnVzBxNThoRkZFUEFVUDNJNy9KejcwM3dZR0ZVU3VzS2VRWnh5TVJOYkc0Y2dDSnBYeWJ2aEtPTHRkcWZtbjQxK0kxa2dUUGt3SjVJRStoKy8xeTJRdFdLdnVua1FmdnpDMy82MU9WeGwxN3N5WVkxRmVCNUZpRDhRREdmWmpEWloya1psWlgvZmVIN2kwL08wNHNmeFVFNDZjRlBrZUwvSU5GV1JiOXlDVlRzOWhWSExiK2k2a0M3ZWxLc3FtaThBOTRrYnQwK3hIVjZxc2k2RzNwL0pJTGl1ZTA4UVBwRVU3dHE4OHNuSVNxZ2tRKzlzY2V6c1VzOHkrd0JScUN4aVZSRHFnd3RsVmlTbFVmcE8zKzZoTDF6ckhlMGgxaUhRZmhnaVlDNE5XNWdWb1NGYURGV0lpS25aMWlxK0s0VHM0Y1pPcnlDMWhMZmMvcGl4d24rc0tkeXpaTFEzWCtjWDN4MmhFdFlBdHZncXhneksvbzdUSVBLSW1rNlA2eHVvRUsvYk50VVQ2ZTdSOXFEOUJWenNQQzhtNlhKSkZOcmkwSnhOVm9vQ2ZjMXRPQmhvVnA5YmRHMzljdGpmYkpQRVNLT200UWlUWmFrYXlzQkFqZ3ExbHBKM1Q3bVJJYnd3bnBuWXhsRVZYdFdTQ3ZqenZmYmRYcXd0SVUxc1FzdG9NaHVFQ0pHRUtKYlN2OUZBZDVqRjV2Y2ZGTHZMd05icnp0WnBqNEEwRE9EUC9NWno4UXgzU0ZSUDk0Z3lSOFV5SU43ZFdYVFV2dEw3b05wNG1hZDdWbFcyZlRJRkpkRkxPM2YrMXR3aDJ6emtxYWlZSGY0UFp5SVdrUFh6UVJIYlptZ09RcXpxa01ReGM4WE5KeVNic2ZDdzhFNzNXMUtvVndPbW1SbGdTTnJlc2VkU3NwMmRHOG80UnphcC9QTHdmRThteDd5azV6YVl2N2k4c2pRWlBFdVB1SWU1NFpxRXdlS2tWNE16dXRGcS93NFlzc256U2gvQjNPL1JOMWlGcWFPc01KMFVYRDFjSjBaYm8rdWFHVXVRcWY0SnhTZTVQdjdzelRvdWFNUlhsR2JoYnR6YWp4ekg2dWJiR2JpbXlZanRJVk5BZzNxNlJ4TS9BQjEvNEpoamt1d2ZPM0xEeW0zZWMxeklCRWlYTTM0bTc3Vm1EYjg1bDRWTkgzdUJ2T1R3MXZFZGRBVjVjelhxOHEzMHh4Qk1DKzdPNnIxWjZPZGtYUVZEWk1JY052Uk5ucENLN01MWHJBQzMwTlpKU0N6V21qaXgza2lEMVcwa2hyTERGd3dwVnNzWmdzZ1dKc1lBYXFOY25MNE16WWUvc1lCczk1NG82ZmlUTmZmTmp4dll4aThVRHBRY1BLd2RQTi8zSFVTZ2J3cXhhajhTMjhsUk5lS0hORGl3c0hqUmFHQ3htai9mSm04RVlhS09Oc3grY3lSbVJIUmhuWE9YT0lJOXRSa3FLRTdTUHAxU3lqY0R4VFlXZzlXVmF3eGFjc0FkWnJVK25NdzY1WjdVcll4VmprT295VzYzdWorbDJ0N1FvWFVCZ1pycjVlM1dFNDNyWjdJRE5FMlcxS1Fya1YvdFB1UWtDVXYwcDhXS1N1VUROQnBWZ1VMa1pTMzhGUkZMdy9vOWpZL3N3OHAxZFZmMkxtNGVqNHlqZ1JjcVY3aGo0NTBBeVpLNGZwMzRQOU43UzREaXBOTncxa2JiK3h2ekVhRGdFc1hGU29MYVdibXJ3RkIvMHpBaXRqejlxZDhYWUxURlVZUG93dGs3cFdhQWsxalRsTG9GSDE5NEhCS25yR2RTK3JNa3licHZVWDcycUwzblI4RWp3a05vK0oyYU1yVUhKNU4zUDZJbTVReFdDdkhISllyZTAwMVIvbFVVQ2FRazdYQmJESGNnQ3VnVTFra08zQUl1Q3RVN3p0NDYwQm5YVGRKNXNUdmhPZUFkN3NxR2crbW1RdnJmYlIySFE1N3V1ZnNiNURPL250YnBLbTJGZGcrMzA4SlFUWWFON1U2Q0FvNzYvWmNwVXRibFdBUlFheDRrRDhIUnVYSTF6NDIxWHgzcHpLQXJIdVNwR3FBYlZnaFd0anRXUUUrYzgyZE5xRFR1MHA5cGNEWGRCMEFPR1dGZHhNYVNncnI5ZDFoTUdUY2dLdnNMZjhidkJDN2lSMEEvbDJ1aXNEYktvR3F6OVQyaHFWMUh4L25JanJhTHZMaE84eWVPRmlvRC8xb3MxSjdNQ1EzVVRJQTVabHZucVZxdEZJRkkweERXNUZnWHZUam10cDl3WnMxbFZoYWljbWFsNWwrUURQZk0ydy95K0FRUUlCQUhjRnpMVVVFenU5Wkl3ZnpMK25tZHEzVWsvQkdNdVd3ckpHQ3F5MGEvRk1abEhDeXlYRFFMSThHd1M2emNIaDBLVU5IaEF3K3Flb1FPOGpFU09kVVNlRzBDQWtrVmtHSVhraWRsT1RyaGNXY2dMZmF5SStGN1V0K0JKdGFwS2xQZUR0RTRFOTVITnpnS0hEK2E1TG5BVXRFMGc0ZDdEdElobTJvKzZac3RmaVRHd2YwUU1CcGQrRFhkT1Y1dUd2MGdzdnBzL0x5Z2dzOUtqdkJFUW1xWFlnRENXd0Z5U1FUaGlxMDNOYmcrYVdIcGxqQTl4aUZnbGlmZENuNEdQQ1VkMXRRb2Qwek1RL0VuWmZQNUcrSVorLzduMUJlYWZac1ZhejNubDh6eTY3aG9ueUxaM0N4dkxpSzE2eXZ1ZzBOUG10ZG1CVFdTVStPUHV5b0d0OWRtcUtlNlF3NVlCaHVVMFJNU2VzKzJpVGFCcXFQcDZlaGdDeHBnUmExY3djcmJwcHhPL0I5MDdCUGkxbW9RaGtwU1c3dEdjbi9XVWl5QkJsQUFHU0FReHBNQkFqUllhM0hzQlptUU16c0VScHZQS2N6dlQwbHB3Mkp2bDZDQ3BvcWRocjl1ekNseXZXSGtmbXp4V1pNNEh0WlVFUWR0bHR5UjV2eXRmaFl4WjFlZGtGSFVJUlV5dElMVUFSd1pDU1ZRaG9lNE0wWGxKSTNNTGljMFY1eE12VDN3RUhnSS9lMFc4VlBGYlduZlg1QVEyOWJ4UXdDVmdUK3VKbjdYWml5MEVPY3M3bFVxTzVTeHZ6alJtV3U3YTdEdklIeGxTNjV5U1dHdGRFaTErR1lRSGJ3bW4rbjNJN1g1NUZpY2R1TlBTMUVBWVB4ODZ6MWZiREh2Z0FlUER1VnRnYWpsWFg2NklnODF2eWRIRkN5UHNjbGh5TCtkb0pJc0JuYTVDNkVhdEp2alF3Z1B5S1E3VzFhZHR3ZjdLSTM2VFFPUUNOMUZKclVGTkNKQTMzc3NnQmVBaWppalR3WVIyTzd2QnBnekZ5OU4zT3RSOU1nTjBSNEk0aVF1QUpDZDVYM1dVTzhOYStyQ0xjWkpBSElNVTg0VUZ1cXlDQXRSNko1Wm1tNk1iTFdDWjQzVzlmS2RxTUF3bk1YMDVodXFiUW5OV0owYU9Obmt2UmJqdEErUytGTllDek5YcXlML0VyODlnYlJ3dy94UU9Jc2hpOE11N0FNUm5VME5hVlRSbCswa1A2NTNUZi9haVY2SlhiZEdqY2pOUU9MQ3R6NVBkblBQZW1zQzBMeGpUNXNKcUJ0SC9kUXoxbEJpYTNVUmxFWlArS3VlS21mWHh2bXp0V2RBOGdtK2ZnSEk2VFBPTURCOS9NMGFNMGg1emdCcDFxRkZ0WllaeVlTWjdMY0M0dWtBd1czZDFJbjZ1TTIzODdBSVp6dHVhNWw1N1hRQ3ZvSnJ1N1V4WFcyYy91VG0ya3lSQTVXRG0zdDBjajFxV05UaHpUWlhxc01KWldFTUtLeUFzUWJaZVJIQ1hWcHpTQjlZQnlTaEhwNU13cUtEZlJjNkRVcFM2T1BYSi9sSWxSZXMwc0FWcloxUWFMOHlmc1RaOFRSQm11R2FDeDFRdXcvenc4cFNuNG9oMG0wdmZoRWdLZm1DdUoxYXpQc0tFN2JoQU9pNFI5ZlBvTmtYamhjQXJSejRTdzcvenhOSVFGSHZUeks2OERDbEdOYmRnTTZRcVlKcmdtN3RNUVFiZHJYNHUxRUYrem5UUGxLQkdDSk5sUDFpOEJNWU5EQ2xhaVVlVFMvQm8vUG40eE9ma29vL3prNTdVNjdzdkJnY0tBb01PVVVKRHp2MndEOUttL1UvbWdPeS9meVhaa3l0OHl2RnREdVdOSHltbnFqa2FZWmh3UTNPUEU4MWVsdjlET3lzZjEvNCswWUJNa0ZZQnExV2VvOHN5MHpNdmpnZmxTWDNIS1JvWGFZRTVQN1duTHB5Nm1BUVRSSkw3MkU4bjVZWE11RTRuRElZRHEwUW40bEpjOTAxUElwK0s5S0Jkd3MrdXIzNW9tZEhHVGpObnZRRHFSUFpIRk5nTjErcGt4SkNrdEhXNTg1c3dwRklqL0dQMUlGUXFMWkJHM1VZYjBvbGErQWRoYXZqNkRxK1BTWmdPWnV2UjE0TEdFcmhsTDJIb2NES0lXUUxkNFprQ3hkYmpxbjU5MlAxdHM4bUtBWThMajE0MDlMU3ArQ2lhendVemxVLzM3OG01andLM09ENXhTazFWWkVSbFNORHE0Y25MLzh5OEx5eTBtSmtYQ2s4WVlOU05wZ0ZDd1dHYVdMOWg5MzVMRXVnb1R3azFWcjhDOVJISDgrcGxYMk9yUmZ4eWFFZSsra0RuZUM0U3I1TTBXUFJYSkdwQW1ucERWTG1VRUt4K29qem16OS9iMjlSMGRoM2hJRHBUU3hpd09sNFFVSHFzWk5Mc001OE45cjQ5VVdZUXRTOHJrTVg0SHJ3a1NTZnVZM084bjVpaFBUbDNRSEdudHpGTjdyQ2RmUkt3aDFXbFJTS0NaMzA1cDMxZUdQbzhkdUZ6V3NFRC9DT0FkK1JrVXQxY3NPK3JsdjdVMU8zTzd6Uk5EUmo0Y2krWG5TSUFFY1p4RVI3aXVzTDhUVDhFQm4rbUo3aTl1WCtad2RqaU94MmFUVUQxTmdxcWNMS0ZYWGI3OVVXZ2lEUUFHWnozZm9mdGFTTWlCdXcvanJtbVYyOXlKdWZOWWI3ZC9sOURxRkJzTjF3eUZaUEVWSlZ1WEo0L3FKSWNkdVo3ajVORGdNbjl1dEo3aFJMQW9DbFJsMU1idDgvUTV0bE1NTDA1T08rR1puaDJ1REN4Q25FQkpLdVdMWjVxSnBwbHo5STZtVHpON0hIQUhWdlZuOHExU1VEVHE1akowQnZsdHFyOHowTjRvVHA4ZGRDSERJZzZwS0R0VFI3ZDl0SHhEMHF1MnBiM3ZDZXZLdG5WL0NoMUV4ZjJteDB5Z2lNZCt0YStHSWw5Y2M2SHBzSk5MczVWUlNBWEd1V0RLbnFjSnA0Z3NFZkk3YUgxbEJoSXRrY2NYYlN4WklNTTVNK3Q4RmV5dUkwbHAyK2pqQkhXVDRWbituT2ZkRVd2K0M4YWRFaUdhdWtoVFJzVi9KNU9uZjdWWFV1L1I4UUxwZkZBYWFhNnpkOHFVNVBkeXFSR3lmaDhVdWI2cUVBWHdxaEFiZkZHdEZsZGdTZ2pZTW1UUDFnL0RrUWVqRitXK3hPVGszT3hXclhzbnE2VkJnRXhkM3l1UHZlcUpsOEVPUDZqMWhwODJuTXBmREw4UExDaEt5OTJEUE4yVUJuTzh6dlRYU3BURGFoRVk2UFZ6M1dmblRPUXA4U1RJdWt2bkZoa1o5Y25QaTRKSXBreHNWT0U3QlZtV0tvbWpHRTUxOXk0RVMzbnJJN3lyTSs3L00vdE9xa3IvZmJSdmRkNmdtaklBREJSYzhjRTMvSmQ2QnR1Y2FnaGtzNE1iQmJDSzBCYWFWanRKdGQyOCtNeGM3bWRIbUV1Tmw2bmZ1L2Z5U20welluTFlXWUMzelI0OG8zNTdiNDhHSWlkU3JpT1dMazJIcUJzRHYyRUJFY3B2SWptRWM5cmhxekxPVE0vd3VIZ2FVWHF1RlVrOTV4eTNVR2NSZlFCL0lDM0hVY0Q5cTYvaDIyUkdtVFlnb0ZjQ1E3R1ZlajhEeUgvQkJJUENPam9WT1NHVHUvSEdoalpBWDBja0xtVXV5UG1LQUJzMHk4OXViL2ZOT1RaTXNpTXhMMlFvbVZPdndkYmhXR0R4N2VmQVFsclArUzNVY1pldWhpRW4vUzBxZ3ZUZGJ1MWRaS3huU0F0cFhiM3U2QmJ0STZQdU1EKy9SQTVvcXNqRWYyRVFFenQ2a1pUOWdyMDJVeWRncTY5MG9rWkkwMG9xd3JxOWNXWERZVjE2TjJRelBiWUlGNWR0RHFWUlgrQ3VEdllRUmZBMVFmRVRaSW8xSkJxSnNHT1RtMjVkcTY4bFB6bXBaQ2lmTmVEb3R1UThQY2kyREtFVkJ6VkdSOE9RNHRjYW1xRVI3bWx4dnR1a0Z5RlVLbFVwNW9LcUlkN2REcUtmSlBHWFNaMXY4RlhuU2FSdCtsajA2WHd0bEl4Q0lldXF3bGE0dHNlWlR0R3pST1haeWpTdTFjMEJoZlNzSnl4UU8va3UxQnNKU1dZays5ZW01SUNsRHRaQ2cvU3VxWWdrTWxpbEhidzY3R2JrOUpJUHhGVDgxdytub2hGbHRTL0R1QnVqQnRNdDFUMCszMy9GRjdReVFJTmZHaGg4OG5LbHRlOTc1N3NTaFYxMklhRWY3Y1FlYWRWOSswTWJHU2VtSlhUczdOVkh1aTJKc3haNlBMVnpQNitJWXZ5T3NmcENZeDE2dU9ra3lvTU5GK2lUL0wwSysrMUs5NEtDdE9KU3lJWTZ6TTQyWWFNOVpDZXhVb0lPNVFXVTA1RTZFU3crYkJpS2prenVkWUdiQlNvNGZSa1VXZWN5QkpjZHo2Tnp6ckNsaWpSZDBtcG1pbUZqOXo2TlBSRUY2UHhqRzllNUdkRW5XYWtDTzVyWUY2RUJtMHR2SDczMk5NU3RLc1JDN3pLV1FCVWNlSHFrRERMUjd5ZjhlbmRQV1A5aFRBSG44Uy9uN1E3UGxrMFY5N0h0YXJUampES2lDR1V5a0gwbWVYK1ZVK0JkVWNkcnlpQ1FXZFh4Z3E5SXZZYW9qaDZpU0Noa0VsUU9hYmwyR2xIMTdCWmIrd2tSYW85T0pkYStEOFA0Zkp5UjluMndTajg1Sk9lelhMem5MYjl6b0t5RGQvTVZJaEhpZHY0amNFaW5tdExNamg3Rm5NeFFNNkRUdmFZdlduaG1reSsyall3R1VCbFIweFBnZWNyUGJHTjM4NkdnSGR3bi9CcE9raFE1MjFwcEordFlVK09QM2UvOVVSdnI2SS9MRHhPbDVscG5MQ0U0MzZFUS9CdTIwY2poSlRpSXNiZnN5VHU4RUdZM3UxQnZlYTFYbTZjanZZTVFOOFpTVG1ONVUxU0ZhbjE4YzIyMkVnblZHNitGVWUySHlBNk1kZ1dnSi9Tb090MHBHTnVpVXBSdXlnWjQ0TGlDVWs5L1FQNVhqU09lbG1Hc1VScGJ1RWZZOXEzWldhelNoZExjVEtIYit3cldKNTl6MGxGMEZ4bmxlVjlEWjJSNWlWNUo3OEpEaDFXWWRCY29lZTVvMTMrbmpjV3JvUnVzQmdqQ1FZMHFIRUJoSnphZkQ3c05OTVU4OTVNbDdlSGQ4djZuN2VnbVhQNVg1UysxN3ZWeGFrTzVET09XdEpXMXpPcC90Nkg3WU1QbWZNUWNOTENUSThKTkwveTNyWnBCZjF2aS90ZW5jVjVOWUZReEZwUXI1c1p0YXloMVU4NkVpSm96Y09pNFk4MFJQL0NjMXZDUjhxOTNuZ2dRWWNBRVBCVytjNnhMa2FySmgyQ2N4N2h4c3E4c09NZ0JYdHREL1hQcis4NUFHeHZZOElzUzlReVNxVDczZExab0F0dlFhYU5TS0hFUEdxL2ZNYXd2RkM3OVVHNVpiUGJaOVhNRnl0bklwS3ptOEdMdVNXNHVNQkh2aHVmSy9LWkpnYW1idVBteGQwa3ExUmxQUXBnUStPTDkvZ3Rad0c4bTk4VEhmamUvcHcrZ1JveCtHU2h0L2RxdFFxMjFybE5kOG10QTlqb3dmWGlXTG5idmV1VHQ4M3RrOElhRzNVNGZrOWRyTGJ0Z0tvVUZseklxb0JQZWpUaWVhdmdFcWdtOHBwaFFISytEYW9rQXNNcTNSSGMzZGFoa0pPSCtlWjZaTHlUMVJlQStta3FUeXBuVE80VWU5VmoyMHBWYlRQOXpVdVhlNTBDa1Z2dWhoYTM5dFcwY2hXbXVFNGZXc3F2NkZoa2R0aG1YU1lxYXFMaHlXNlJwc1E1aGZKUmNGaTFwVXhZcGJ6cVljM3BKbE9SR1F1RTdjZ2hLUzZRdEt3SG5kZlhjNk1yU0Z4anluaXZHTWhtcWswSmNkOWtVZlFvMEErZTBiMnBlN0hOZ252Tm1Ob3Zad3dPVUJkbEJ0bWpvelZHOE9UUTJZWWF5YnRPK242ZlRiUTVUWWxja0hyUmYycnAvb1ZiSEJhbHUxTGdIb1FrMXBMNWhGSWhYaVhnbEJ5NXRPczR1MExHWkhFcFNUUEllUWZPNWI5OHNJNWlHa1VKSEJXbTB1alRBVi9IRE92b1IwdTRXVERvVUx5OFk1WG9yb3ZaQlVaMTVLTnpoa2VjL2R2VllkUFc3Y1ZoNVRmV0N6ZkZvU0ZLNk52SS9aSUZLVHg2bzFTWlc4ZFUwZHFsbmVKTVVMcU5tSkxjVkVQTjBPL3AzMmhKV1E1TVFqaVFTalJZN1lLRytYdFFRNzNHMmF4ZmxmZWpZdFhGMFh4L2d2YjVpRnRIdmdpczRUQXBEQkdmM2ZzdDQ2TURiRUVYYUR6VnNOenFGaDVZZExsdXpUVk85U2Q1S0s1VU1vYm9ubi9uL2VPVzI2Tnc5VUJJVGR4TkE5NDF1Y21vYXhwb1QxRkhpOE9IODBpK2gwS2tSNFVqSTZpdjlvR0xNMTIzaVIwNW8xb2JhSXlVU3g5K3R5OVpWbm5jdVdmWWgrc2gyU25NeGZWaEVJZEd5OXo2b0FYSlBLOFlHVS9UU3BEb2dtSk9mZi9QSnFJQWtwNmlqZC9Xc2NnRW9vZXNPbmFMOVZXUUxOZklJN1Y5L1BLSG1GMXdwN0RRMGJFSk1qaVRGZ1lBZy9QZUNNQWxwZlVNeGZzRFNQdkYxRk9tZjkwTnRvczBlcmRVTWdnMHUwV2dVK1NvUkM3Q2dIcE5iRVluM2hqWE1SQmJMVXJ0d1huQzBOQk9CdncxQzdmSCtVV1NGT0oyamNhUGVHVEFJeE96WFFjcDFuNTFsT1JuTTlLUm9hbm5hWUpFcXFnYmtBdGNZdUZCbTd4OWZRL3VycHJMbHZ2b0Q2Q01ES2toVkN3TlRRbTNFdXdaY2RGV2ZXQ0o2djQ1RUVaTWZ5MFpUTHpxcVU5cUc3TnBLM1JPbGtmRUVxOG1wYWh5S0VLdVBrUEJTaExsMndac0d2WklHYWU5ampneFZZdnU4SUt1bWo0N29kRWNVUFpJeldTa2V6UWF4b2huSGNoWVpCczNpQlRXOWZQZE1wTHQxSmhzOFVpbkRzWjRqL1BIVUdGZE9NejJMaGExdENqRG9QTzV6b3htR3dIbVZiaTdnWCt0Q3hJYU5CU0xBelNpNHpPVXlTeE9lY09qc1pUT1pSM3RvU1FQZ1A5WUpsT2xiWlZCc0NFaEJJb1QzR1J2OGh3bHNYbDVqWG0xQmlIK3IvTDZwcFNTOElMeFZVTEdFU3lGKzVEQ2tvdmhld3N0cjQ3dDRQR25BS0tRVTJMK25DbTQ4cUdybGhaVXdJcmNXUWZsemZkREZaamhZclFBVzJiWmc0WWhoQ3hnUjBNY2d2a2dqQU5ZTjZQWjdNdnVRRm5aNElZWm5IZkF4Y09CODFCUmJoUDhaTVZibXA1QkE5NUx6enRwWTlMTjFUTkNGV2pFK1lUU1hhV25UU0pjUHorZm1wUGVGU004VFNUQ3lYRzl2dDl5K0l4eUVjUW9QWmpnZFpOY0hKN05RY3o4UmE1SWgvV1NhblhKYTZxOXYxRkwyVVJIRXZwUVJvVElwQlNPelMwSzRwTlNUaFg0THU1SzJXZjVJcUtjSkEyRGkzVnNVdmVwK0M0VWxsckFpZlZHOXdSUWZ6STg1aTZyYnBQbFQ0M0lIZFFiWFNJcmZvQ0JBenkrL0w1Y1JSa2ZDTWpRWW9NSnZBbU1TK0tMNzJTdDl1LzNZZWdDZUZnOWpPVFJHeDN6ODFGcUxhTWlqSHVOeWxwaUN0aWZNaXFHcm8vQUdQWFhueU9NRnZqSkFCTHRTK01sUkJtRWtISUtUeEV0Q0RPL2MvTDBRbmNxOGtlMzlCUXlBeU5XSUpzbW14cGliaURXL0dKOHdRQndIRTN3UTZVVkcvY2VXVUNELzVoWEcyMHN4SW5oN2pzK3d1K2xwMW5VekM5bm0raTVCMVNhdzg3TDAyUTM5c09iRE80dHlKVTlNTHQ4U2tDU3RQMGNZVmtIT1JaSUxOWW1GWVlNcFdxUEFETVg0WTRHODlFdFN2VW9mN0ZmOEVxUExYMThHYlNpVmJiUmhGQkZPMWNTWGxYSk82c0NyVHppYndCRG1OK05YQ1VDVFp0bE9XYmpmcUQ2SmNnM0M4aXhHTjluR3prcDAzbHhuWGI4anFtcVRTYTJRMnYvbkkzNE1JWkhsVmhyaEcrNmd1QVNZN0twZTJPMGdGVzhZNzVTVFB1OE12Y1RNM2xBSHV0WVFMdG5vN2FyOFlNZFJHeTVzd1l2cklHNmtxbjBudmdEdmM4QkFXclVaTzVOOTYwQlMxUFBmeUprZHRxUDNiemNyOUpNaUpoYk1Uc25OYUZZUXluQk5mNDNhMlRwTjh1bVdEaVZwbU1TdzhXRkl6NHBFTXJSbFhaTEFPU3ZldzBQemd0STJjVDV6dFA4NUViUFNvOUF1cGZyUUF6REFLVWJhWUNlTEQ4aG4yWWhQcGJXaXE2ZTBuR2pheVl0SDRROUNkNUZRY2oyRXRRcUxEMU5HTDZtN0tnS2hJOHNMZjU3T1QxQkV0c3gyK0NLMmlZY3FyNkJXYUVNMTkzTWE5V3JrNS9JUkhORExFK0E4MDJqTE8wQUZMUmVBU1ZZV0d5aytuYldoSlEvRFJpdWtUWXFCdllZdzEzUWxuOWtYUVgyczBxWllwU09xTm1ZNy9WaVRPbnluRXZ4NFhLYkMxbTllQk5GejliamdtSTVyNlhac3hoWHFxSk1JTzhhUEJNNzd2MERUVUFyQzBjalVINnBIc29kczlENlhFZ203OW9VY1ZPbEdMclppR3pRbXhEcUQzeTVMVW9Ec1NyOFlxV2V3ZmZpOWxFVDZsWDBhSFRWRGZXbjNnSThLeUJWRW5TU0x3SHQ2WWp5Z0twM3F4blBmNGZjb2hoR1dBL0FPcFJudEJidWJhcWxodjJ5SE5QdEE3OUdlR05INHBKYmtxc1VFeWdhdTd3Yk93UjBPTFV4TlZiZmdYOXVDV2xVa0EvY1ZQcmxVOHR0TTBzaDBuVFFvMENaR2FwcDZXQlErcjh4d1N3VkdHVTRXQVJoSE5pZWg5K25WUjNWL0tKS2lsQ3p0aGUrd0dzNjR5dDMxS3ZTK0pyd2JBbEt0VVM4WG94M09jeVJUZGI2MXM3a0ppYjJZVzI5MEJUelk5cCtxQmZFUk1iU2drT2JHS3BkTUduUmVmMWsrMCswNENpcVgrbGNIZlYvZEU2a09EUXZGL1JyQXpnVzVPUWJmTTB1WDZFdUc3YzFvT2M1UDJFMlUyOTJvN1cwb3FQTUpjTWE2S296cFdDZWxjVE9NM0dnVkF1NDNpVGpOS1RTNkRtOHdIbGJwdjRNY1gvckJsdFltVVprNlhNanRnYWpRQXcvMWgrZjRYazYwQ2N5c29ZaW5ZQ3M0c0xjT1p0VlFwRUY1RWdHeXVvZk8rN2locmR3YWVDR2FjTmpid2NNQzAyTm5lVDhNOW05cVd0WWhjKzNReEY1RThGbm8zcGJ5WHg5UmF0MmZ5eFpWaWM2aTZEczdXVGFIYnZ2VWZ0bW5oR0lIam1IUnRMYk9wYlo2TDM1cVlucU9STGhFbEg5Rk5JL1VOcVZqeUJsNWltSmQ0WXpvcW5PNzFkaGQvaWJKRy8wQTBRK3cyNTVyNitXeW1rVDByb3ZkeVhvTTF3ckRnVVR4NVZYSGVGK3MvcjNiY29SK3k5d3pOOUxQZ3VCa2dvV3d5S2FXcXJaVit1MVNLcEliVDFoWkRlcEU0SmZrbWFrMHBYVVhURnpwWjRZYzh0VGFXMlhVcXZraFFzQktYYTBBZmlJTHlCQ0c0ZGo2ZHNOdEw0RmtxQy9YZ3pBNTRESlFhelNlNE9UTnpCNGhJWVhwcS9KMVJsSjFmSW1yY3JLMWNUMWR6azFldVVoOU80ZVFEU1BIZWtzRkpkRGYzRUpDeEpzSmZIYUdOMWZTU2VOcEpvQlFra05GODVBRUs5WlJaWDFqUVBOeENyWFgyZW41aklhVlRpekY3bEJwSk1oQUVvTHZRbllnNXNPdFVtbzVUZm1wTkdXaUFDdmFwWmJ2c1ZDaWFWWTlWaWM4OGpPMzd1c1dCeTRaRnRwQzVrWnlac2l5QWxkRi9QL0J2bWtMdmRITWZHYksxMHpHZ2Fna2lJUWxlQ0lvVXhDYm9tbGZkU3ZTMERCRU81N0NvcVlhc3Bzam5xT0tFbmNOc2VjdzRtRU92WkpJOU5VbitRblVJVWxGcUFBNml1UlVxSEc1eEpZdlF6M3liT0w1eGxRTFdBYU9hV0N1YjE2TVRDUlBhOW5KcGxtbnhiVmxEMGpRMGozSFc2dmFGQ3Y4RmhaOERKd3E4MTZFckJ4THBaVDZIZ25PSWl5ZTlwU3NsbmpZbXdhdVlVdDlrNGRMZ1ZLSjhqRE8vSGMxcE1lMW1ocFZMeUNPZ2FwZ01oRzN1ZkcveXZoM0RYbVkzWU5sK3VmUHNmZkdXUVB5a0d4alNNcGJXaGQ0dXh4d095RWcvOE53bzVwMzlZWjUva3lXV0NPNFJ0Z21IdVg4bGlaRjcvR2FJK0VqWW9OOEpjRjJYSjI5Ym9nem52ZDU5aERpRmx5OHhJZUFEVG5DTkdkajBydUxKcGVuQ1d5R0hwY0E3SEhET0dHUFZ1bXVQSEEyVzg2VHhVYWtmdWtDYmxiUUpzUjl0OFduZzBmK0ExTzc1VWp4TitGSjZ3K1FndEdBd05zK3NhVzdKemNwdit2ckhSY3NYRUVHUDZkMEoyZ1FhS0g2T2hEcGU3QVF6bHJUUkxMWTZ2eEs4S0FXR21EL0VDNktYd3Jod0M5Szg5am9pZVJkTFduN2xaTUcxbm5oQTNtWWMveEt0eThqdytzdk1sMTFNdkdQaFd6T0lldEFuanV2aE00OTlOKzZxcWIyUUJBVWtUbjluZ1loUVE4cjhtS3dya0VBb3l5eXk4N1VYcHpKalZJUFVkelhkM0lUQ1BKOXU4c1RWajgvcDNhQXlNaEVXL3lsU1c5R2tOREdMc1JPQ2lOT3FvUjUwaEVncWtpbTl4Y3V5ZmNDRUpMak1mRkV1QkJCcGs3bW1IRXVHbW9mWXBaOFdSRVRNNXkvOWRsM1VTdjdKWDVYNWdXLzNJTmkrYmRReW1jWWtNVkN1SGU3QzBUeU0wdTVPcmRFeC8zQjF4cHEzVXk1NTBoVGJsMHl3cnI5RmVDTllTUnlMemZxR2pBNUpmQmh3dENTMnpOWnltS2ZURHpQcktPRk5aREJTVXo0bWpYNlVIWE5Weit4UitKMEw2Q1hnVFpTYjBwcUNDL2RXd2IwUVIrSU4rSUJOV0I1TjBML3JLZzZTU3JJR21zalI3TEozU3N1cmsvUFlDSmo2U0ZjZ0RmYm1hRW1Ld2tITE9wRU5VQ2x3aVpNSzdsUXZYWTdsNmpnNWFNNVhoR0FwWWZ0ZWFkUHhVMW50cmtpQmdTS1ZaTUJqTjArdWpVUisvWVZ0YTlsUWdINktPMm9YaUREb241THhjNHIyMGZTWk1wVmExekJETlJpNTFmZm5GTEhidXBWLy94Y0hUZjlrRHhLd2o3VUM0OXRPUFdHSlB4NEtsRGdNdFduSGpsWm95L1JMVGVNWXp5L0IySnJUWDBOb1pTZDJoenFGQVlzZzFRV1dDcERoQVo0UXhXS1JxdUdLRVdlby9NUGduQnA3UmxIVm1ZOXBiU2dkNlBTR3o5Vml1dkc2K3dSYTVDUllCWEdBVWoxVHAyOHBrSTl1QXhmZmszTVVUYkx4TW9TSk4xeUI1dFZuUkZwVzd2TVU4OUFTTFU1SWJVaVVjczhNOE1sOGVaTG5QdE1qSTRSWW1ZWmlYN1duN0hmWGN6aDF1RnNrbTdZTmpjOFExcGRMTGtoSThjSVpzUnZTVUtEeFVvMHhieDdoOXBMRlVvSkFqY3dsQllpNFBxNmVYb2ZTOE5sS21LbkNqNk0wbktVaElBTks5MUVoUWdJNUppRVhtcUl4aDdvaENjWEIveGp1OTZESEdrV3JiRHd1US9WeG80L3hZb0JoVjc0U1ZaMUFhblZFTEJIYkc3ZEZoNDBGSGJ4Ym9BUS9wYU5sb0tSWHcydUVhQWhKYktFWlVNSzR0b240a2ZkMWpWTVlHYklEc0ZtS1ZhQ2VwM3IzZUlXdXhiMG1ncHJtUVZNT1c4WE51eUE4Qk5pbEhKTGNjTnZDcmtocGVSU2t1dDA1NWlIcmhUSkV3RXMxbndtRG84K054MG9FK21UQlBHaVJuUlJiazhqNHZJQTNUWGs0cXJ6QTg3M3BoMHR3bk5UUU5ha1k1bWhFVkVuSEdiT3FtZm9qRm9JSEZNdHA4eUxROE5US2N5MDNWRU42c1h5aFh1TTlsTExMSTNreklJRmpmU2N2UW5TeldqOS9yZFB4ZnY2Z3ptblFTalJJNCtxYnBieE53c1lSMFFTRFFZc3liMUp1ZUt5MEFEQVBkRG5MWWQxbzFWcDBrVGFGWFFBZ1RYd0YxMnlhdjBwRjNBTmQ0YVFCL21KNE9FWWdMQ1ZiZC9EM1paT285U050TkNBa3gydzFWTWJCL09PbllzRmJsWnlBNUtqZ3I0eUtITVhaS1VmOGttZjNBK1l4NGxERDh0OWxnYmh4bUFWZ2xvbFFkTzFPWldqTEJWYko3alRIVFVpY2hFYTc1SHlhWXRjNDJqQlZiWTNwSW41akxPMTBEWGoyUUJwRWJkK1dDVjNGVmtuTFVpSUVMZVFGV1hoQWJNMHVUL2srZGt6bS93REkra05xVlZPVDAyd3dUT0lURnhLTWNUMDA2em5WOEdlTTViNndaQnVwcldXQm9yQ0gwRU96eEdYN0dRczc4NDNJRm0ySjJ6amZOZVZoNkhKVk5vZmM5TTdCeTRMUXBncVdSUE92d2h5dkNob21lSmZYNU5PdURqVkJjVWRTQ3AzMFJVVU1oTjZUeTVWRmloYkEzU1V1ZzBmVDVkNnM2TVdLMjZyMVVYeHl0T0tUV2oxNDdxeU0yOVNmT21HNEtDWHlVdWdFMU5Hd0tJNEtib09mRVJHTm5TUnkyNDVEdS84Y2xTVTBvbG1vMjFhT3NLWjg3L1kvK2MxUDR4bnQ5TWVQSUpIZUFkTU1PblhkNnNST1FXZmpyZE9NaXRPVzdMdkxjK1hYNXA5VDVYQm9DQ1o5Zlp5aFZUcHUrbmZaakpNbHlrY0Nid2N6N1g3ZklpL2l3K044SVl6TjJvUXFvdFdXek5mWGNaclZYV0paRTlXT2Nqc0t2YW9ReFg1cDdZY0t4dGpVVDVXdnJ1K0pkenJYbVBYZWppcDhTd2svVDVnS0RkSDBNMlJ1YnZ5MHZDWFFLLzQ5WDI4US9KTHZobGwrQURzUFNzUWVXMHVXamNHUXFzZXd5TXBZbnVKQ2lsSkFtL2NySGN1c1JKa3Urak1DU3dxeUJHQk9aL1BBQmk4R0FlbEVUK1VpMG4vaXc0aTF2WWFrNzR5SDc1eVVGUWNXci85MGFVK0tiMWZyY3o4Z1pjRjFlUkhwaWRkdlAwTDlkNVowc25BVVdMZHcyckRqT2VEMHM4MGxrN1h6Rm5WeG42UEh1Y0lwcWphQTdSa2h3cXFMUTVYajRaWUxHYzRLWGZEU2w5WVdRRHZOb0pXWHcxS2VNUlZsbHJ5dWJSbUdqcHVHSm5ncU0zdGYvVHluczdoUVpkSkIwMlZmNUJibTRqMHVzUHVSZVp2azFwNDJsSGVHQ1RJUmxVWnBEV08xanBEb2lRRWtteDkxT2VXNCt4M2t5VjcweTVhTTE1Wmp1RS9FbmRyVnZnZmtML3cvbVBlU2JVQ3B0UnpuQWhRdFVVRWtYaG8xMjNNbmNyalA2OEk1aXF6STFqQkNmNWZjZ1diUVpISktKZnQ1Q01DQlpCbFNFZDc1SVl4bktGRG9HWW92a2tLZFlHQ0Jlc3VmNkQ5NlhJRXd2cTFlR3BjMVRWRTAvaWp4UDdTZUlWemhTSUdVcXUrbWFkb0pJd0FKMmFydEQzR2FEN0Y4aGY5YzVxOFljWVpER3g5aXBGMnJTRXE2WTltbVdYRlRsRm14cVAyT0xmbk5odkdjQVlJUDk5WTlwVVRjeUp5cTRvdU91akVtS2hZWHQ2SnE0WlFRRk9meWU4YWlTUUhIMDJPMkRJanVzQ2RTRG1uM1JWUVVFNndPeDJRaFdSK25ycW45d2NRUm1seXM2YUtBKy85cFQxU2l0QlRXVkROUmNRdEkxM1ZQUmNvZVYySWVYWFhSZkVmTjdFay9HT0VYblAyMVV3MjNNWEQ5ZmkyVDVydXl0UnloNGVRc1V4T051MVc0dkVydnJ0ckRZQXREVzhpRmxOMGxVZllTdU51dmk3RktscGVOR2tlTTBpOFprQTRITnhUVGlZRHFPTEFhaGhMYTh1MVk5STEyUCtmNjBYWWhpaVZBcFJwNDMvOWpRN0FlcWNBd1lHY0x5cFBMcGYyOXE2SjR1REVEOHI3V2JvTkgxOGtkVGZiemtDa3loK1I0U3VrajRvb3k2eUdLN0Ztckg3NXNzQlI4STNzeDFkZUpXUnQvT25jSmFmOHBpK3lBZXVFdXQwVUN6VXk2YWZQM2pmemUzbUJDMDIzdDA1NFI2NG54S1ZYTXVLd01UUTNld2RXUGdtRU9SWHFmRVNVWFZwcnJFK0pMOWZQdStSMlBFamtBL2ZEbDRSOGI2enpZc3h3ZU5nQThmd3JEaS80YTNCQis2UnFCWkFYM0MzMXJYWnQ2cExESjROODI1bkg3dUI2VUJQZHQ0TzhwbEhYanorN1liR2tJSHBaUjRRZi9FR3ZMVVBjVHR5TDYyUnJwdkRaTEpsZmllWXJMM25pTFZTOTFUWCs2bHZ0VHlaR2ZJN0gzaGtCNlBzaldNeEZhcGk2NXFxYzJMVW5DemN2WFJCOXhjZTV0em5qZGRhM0hXTHA4bEFyblpucWl3bUp4Y0VXSytqd3Ywc2VLcWRCWXpvZVcvYmMzOW9LQkwydXB3MTYveTNEUjRZak5Td2s5MkRQU1Yxcmo1Y0RMcjRRb1dlNG1OVXRIbW5WdXFwOC9JcE52RjVYbk5DSGFFZndHOEE3OXJnMlJNdnhpYXRzMDJ5Vi90S21hTEVIclhMcFc4WnFTUGU3S0tNQ01OUmFHSmVqS0lERG5jOWFkNWlmRDc2N0czTWRXQVBCVzhxb2lPd2d0NVRiUlVLQnhmMUhVcTFtekdLc0V1Mk1NNGV3WmI4MzZvRU5yaHozRnlRWEJvYzJxc0tveDhERDBweFdVZHh0RHk5QVV3dE1ETDBSWDRtdnVDVlMvV2NUQmJ6Y3Fxd1orMjlWV3ZmaGRvVXFXWUpSSVNGQ3RJSG9aV0RKczFrYTV5dnZBVUJiRE4wdVVySkdUdmlvVkJxbjFVWkxDSFBKa1l0RkxQVklIU1lxcDQ4OGo5RC9JU1pDUzRRM241VXpaYXk2S3NKNjIvZ3I1WDhIcHcwSkFYd3lsclZkVGVvM0ZQUmd0eWtnWlpucGIyNGlMSkRndkxhQ1BMYXhXdXBPeHVqT0htNnhQSlhiL1hvazRqeWZtL05aekErRXJwK3FXVjlFRmdkSWdOVFp1S0NqVUd6UGc1Q0pmVmtvbDZjSkRoU200QUhidlVkVmtkRmcxVm5WNUJ3TlRmY1NhZEJxZVBMZlVUcXRoOEpRRmtoWTZ5VDh0ekZoTU12eUJWRndsYmlXQTJ5V21mTjlCanhYTHBTRmQ4Szg2THdUR1Eyd3JUUW1jUDRzRGZncHM5ZHNRUXh5ekpPWVk3UmV0SW5VZjExM3NkcktpZlBMY2xSRGZvY3RKUVpPMGZBWm1JME5tVm1SQjJYT0ZKU1pFQzhETC9GbXR6SHhXdis1dWpIcDBlVlovbGpGZHBobkxEOWpDWUFzVjZINWQyeVhVd2hsNkE5QzhhRWZGaDJmTC9kKzEwQ2RCWUNBSVNTZlloc0FrdU5GaHJwZ3p2cktFK0ZDVlRyVldSVGR2akdoeGd5RnhuUllNbnc0S2pPUGJUTlhJQmZ5aGNoWFRVR0xqc0dtY1QyY3dVSHdjVGNyVkR2WElLeG5oRFVSUHU4S2cveXE1d2x4ZHBjODVBR2tRWHJqazREZHozYlpkZG1DY2NNckJvUm83c3ZybmpiS0h2UnNLM2REVDhtSTNDTEJsL3h2YzFWcU5BTFBhbEVNN2htWmJIRXdMUDNGMXpKbUh3WkpYdXdWKzdxdXNzSGkxcUxHNXZ4VGgwQ3R5ZEh1aU1HaThIcldOK05hWWplM0ZaVDhZUjFuQ0pXL1BQMkgwTGt2THZvZjdqeU1kUllxUFNOQmp1WG5GZkRvZWJlRFFlL2NkckdiY1ZXZHFFd20rQ3Z0NzUvME53eTRSMDhYZnhFUkNpMS80ckUrZExnZkgzM0lvOFlIQjVKMXJXVlhmdkV3TFhzUXJCMm5NTGllYkc1Kzd1Y3VyZkZoR1UrSGpOUW10UmF1ejZXYTMzbGptRVQ3aW01VXJFeGxtVkxuNUZJdE9TNmttcGJiZDBZN3hWUXFqNnhkRFNYN2dEVjkxMEV1cXY0Z1Z4L1k0cDNZY0lJTjFIdkNmbTJYY3hMeGVLTnZ0NDVBc0tWRjZSTFdIT3lnNyttbVVzalVtZUlweHFySGdOcG9QblZ2bGFIcHlWU2k4VGR2M1Y2KzQ1SmZjanJUanFDUC9DcnJBMXdkMXdBNVhFYlc5cElRVGt3SjJQMWlSdHJYTlFyMG5hUHZhM20yZTlNdGpXOHpmdHllMkUrbWRxOTV1VU1QOHJreGQ4SkNlRVVzVjRCak5mVFcwaFRrRG01OE5RV3duUm41U0lTcEErOGZMK2JWcWNYWm8yaEhQbEdPREpGQ2dYZGhFUXJRL0pZTkI2MS84NFdTYWo5djIyYjJXTzBvK1pwMU51eWpHbUZoUklxTzJteXJFdUdLUGZJOVpYRDJ5SVc1Q283WWVYYXZycnFaTXRvaERSMjNLME1QWFNLaGZaNnFMY1FqM25yUm15VUt2aWZIcTFWdSs0RnI1TllYTXdHMjhQc3ZVMEpyamxMNE11ZmQ2MUpQQXVEOU9WQjBza3lzSGpHeE1sZ0pmaUtPcjdBYWNEOVc1a1NrU0g1cGZJcjYvTVNXb2V0MFY1b0FGNG4yWjdrMWlHU3ZsalBKTHJPV2FiVWx5ckJKZmhkSXNtNmFUUlA3dWE1eEpKS1NScWdUSTQzaE9yN1BmanY0dElpWUU3VTlxSVA3bzNhK25KaEZyOHhEUXpkeSt0OVg1Z3J1MkdGYldnb0Y5Qk0zZG5hRTdQSFhjVVBwTGNpZU9NVStvT21GbExubHZ6Vzd2Q2Z5NTlvYVRCcTJMN2w2Y29RT29mUXA3ZCs2L1JYWmowUXpDaUFhb1ZlVnV6NUdVdWUzaG52U1Bhblozd2NhUVJCejdSdjJJMVRMVjRKeWVoWHlWSEZoMFM5YVF5My9XUHpFblp4dm1mM1BqNm9uTHJuRDVuL3lmdGpCZ24raXJBSVQxY1o1MTdweXFaRzVrNUpXMzMwaXJpMzlGYUN5TGdMZ2FBanVacGdsYU9CN0wvUitoN3pyWWt6OUZRSVRzRXY4d0s5TkswMm9IZlpiRTF1cmxwbEl3VSs3QmkrRkRaMmVnbWp3anNNZ05VQUlQVU9xeTFISGozTkovWWVybldDd3lkVGJjWFFQdWtBWTFMaXhUV3BaNmNzdVBMajR2ajNHU2p5c3VLNHQxRUlvQ3NjRUE5bjlzYkp6UXhlcSttR0tyT05LQ3UzcE9Ta2VUK2l4TTd2bUxjR0JaQTYyZVd0T0xRWVNpa3lpcVJKcXVJK3RrWEc3eHdPbVJIN0FzQzF3ZW00K3B6anFGaDd4bzZpK0hiWDlDN0xWa0kvQmJNby93M2ZnamtVbmJIaWVjOW9MNk9lSHVEbHhaQ1ZPTVpOYzdBOG1SeFVnLytjWGpMdkVzeTBtVEpmNnczeEhFUlRVL0EvdnN3a3ZCTlIyQ29XK09Va3h3eUtRZUV3RzFhMkRjWXVnU0VRck5hUFRMSjZSMmF3b1NBNkZmTjh3OTcwQVVBMTZxOGZkemVqaWZqYXlqeWx4TjFHTWZvcUNvVzBvK0tEaXpZRStnVUF4a2dEWVNvaktreThneUtUNVF2ZzlsYjNtS3I2V1p2b1ZhSTNxY1NlamhXWjAyVXF3UlJKNGVNZXY1KzR2dk9VQ1Bqb3NTM1pRTE50VW9EWjlrd2xuODJDMkdqTjJwSS8xblcwSXcrd2pLbytvUnRRSFFiZlhmTExCQURLcUFnbXZUL3ZRN1FtZmFLYWpyL3ppZ3NXV0NWSE1WS3kxMVcrVkdyNlUzM3IwNFBGSktaUVJxMUhjUW8yZk9uTndNdks4eW5kSVJBTFdyMDFPa0p6Y05ic1lVamlvcjlUbzAyV2d0aktKQWxsQzk3UHRaN0ZleTFoS0l4MnZNZmJ1ZU1zTDQ3N0NaVzVzSzFVUlc5a1J0VjEwL1FNTzY3SEJQWDJ6bXJxcEVjc1o1eGE4SE9WcXprblFYSlJ5ZHFMNXIycmYrS00raGlldVNCeHVObW9OZE5ocWV4TStOK25xOE9PL3pQVWFPd1RaNURXNDhyY2s2M1pEQkNUZ0dtcUJDSGsvelZKYVl2YVp1Ukd0czU0U0ZlU2Q5cEppRCtCQXUyVUpYOURESFlUTXBsTkxuVmQzVXZvU2JBN0xLVWRPUVU1OGV5WVF1N0ZsNkJwK1dkV0VvNUtjU2RNQU14Y24xbi9MUTdPc2lEdjRUZzU5OEdmVGx1Z3JtRUdsQVRoTEpteEFlcVFQVnl5ajVRVE12L1JkWXc4RWJTTW83WXhUYkYwamI5WEg1S2FZclVUNkNodFQ2dytpSG02dDNnS2NGQXM3czRIYmhVQXZjb3lxWk5jRGpDWDNsRmFHc3ZGeFFZY3N0eEFhaldLNjlzTzFIYXNRYnNXV3NMTmxWUEM2S0tUM2k5bU00T1ZRNVpwWFQ3SWdnSTlGakZwbENoNHZNUzJMUmcxV24vRFRsMFBIUVExeXFxSTZkSWVmR2x0TGhoeGVFRnFlM1RFV3FZSW9wdWJTVUdnMXZxOVljWngvSDBmMUE0aTZjcXBJUmZTYWxBSzE4bE1VQ2pickR2aC9lWFFVZ0hoa2dOZTc5SjA4c0lkTENsSElkOFhQalpEL1ZkcXdlRVByZDhvcWc3dGtkZElROVBMN3pMNlVKOUlIRDU4NHZHY2ZDWU1HSHZPekp1MW01NWYweDFCL01FVHFDdnNIQnMvTy9rRXhPQVgzRHBMMGhYQm80YW8yQVNuNURtbXlSQ3VWR01QUEFjZEx0SldwdTc5MkVlTjJqcTZPSlB5K0g1MVFKZjgxd0REcjBQQ1BTeG5sam5qNld5NTVNUGR3MWdLc1E1S0VUZXI4NzBzV0htY1BwSUVmYUJlNUgrdzhrbGZTUVFwYmZjRFVObDI0c295bmRZaVpZRUMwK1hTVmJvNExoK0FCelpzSGVSNXpuN3FRM2pEZlpGQkJxTjNwTDMreFlPV3AxZEN5QkgyUEh0MXNBMzZWSnVvTC9oa1lLRm5qaG5UdjBlY2lyK3hrK2pTelg2REtLVmNxT01ZN1VrZ3Y0NjVmNWcvT0RlOFlkT1djaW5qUVBJMkJMRk1DblJQNWxpVGRvUGxZODlueUh0Vi8wQnhjZS9OWEJ6dVB6M2UyRUs1TDJmNHh4a2ZsSmticzdjTHMzS2xicy9MbGRGYkxQeWVnM2NmRE01eWhKSHA5c052VVIxWVRaUjJLaFJFV042MElQdEQ0a3Jid3B1QXVTYkxwZlpJdEZmK25ndGRrNzRhR0F1Z2Z4eU9uK0dubWF1bXZnTCtNYXZCSXBmYllHUUJuTnlGV3lUV1E4dFU2ektTZ1F6cTViUDN3bXFvMmFkendabUxiMEFtSEMySHpycmwrZGFEbDFsNTlCSE5iSUNRRm8rQmVVQ1ZrYllOcTg0Y3diZGZUdktPTCs5YU4yMW5qYUUyekY4YXlqb0ZRVkd5YXh2RmJ1dUdRUXJnUGI0bUZPZGVsUjdON3FIQmRnUjV1MTJ1eHJ6TDJrUTdJdU1tT0pjL2U4Y29kdXoyWmJzMTBTQXVLSC9ad3pRdGR2eitvYkJ4b0tmbDgrTGtHcFJscmczL2tFTkpKcXZIMnF1eFo1TGtDMnE2aDBqZ2R5RE1NMktxQVV2dnQ0ZE45a09sTVFvRUdPV3d4MG1JOWtOL21mRCtwY0JORTJWUGM3ejI1Y2dMMGl1OENhUldTMkQycmppWm10eGlhc0d0bC9HbnQxK0cvNlNvcFhSRWExL0FUbVRVTVVGTEI0TGhKMTl5bFRJZFhCaHhacFdFVjdqVHRMSEk3Q003K0VUTUc0cXc1NUZOSlJuWHVyZzJOeFlWTDFteFVBUkpCMnpobHl4UWg2Q1RLZU9wdVkxWkVVUjFSKzl3TWRFWFowZjk1UU9QOXZkZDVkb1JFa3NKODJNTUdaSTFRWnNjRjhCSFBqYkFGVmRQcDhQZmFjRUM4aTYrcUZDa2dVS1pNWTJRenpvbU11MnlzVFJENmhmUXFTNzBtWDd1Z1BBUnNIRjc2UVczR0kveDhnUGcycFQvVk9UN1hXbjZEdlpMS21qK2k1OW0wam4wUjRBcGluTlp6ZEMzRnhvME9lTWJXNE1kRXdLY1pqYVRUaEVuOTFyRmpZVllnUk1OV3JUQ0dLTkNyWWkxNEZvcDJBbU55Wk1xT3lqM2ZnMGZEdStEa3B4STl4Q3BPdjlmUnRaUFRCeEN2WEJkZnp5S0wxY3IrOEc0eGNtOW9tYitBSnRLeDFXaXZacnVTNERWdU8rb0ZVaE1Xbklxank0RlhyNTJnV2ZIMFNWVytoK2JHNW5FQkJxRFc0V0tTVWVFWVladmtEb1FJM0I2ZEplYWlqampEUlBROWIxNzBTSGlYVzMwa1pLN0dja1JTa0h5KzB3WHpudkN5QmF1TFNzVzNOTGk5UnJYMUtoUFVLVXBuSEUxelBCbmNiNDJzN016VUxiZlpSMmtOSFRMM0R3cTNWT3J4andWUStsNnYzOHVjR2tOT09UNjZYaFdhNHFrblBoUnFNc1k2M1dNanJYMG9xOVdKV0Z5NVNlRk8yOWU0RjVsMkc4amkzVkwvak8vOWpXNEQ3QmtTK2tTa0p5RWRkaE9wZm1hNXpiZGtUSTlYZTRkYTRucGQvSlZQZXVPZTlsSHpjdnVFZFQ1cU5ISTZabmZSbURYK1MvbWFWV3BaYW5OR2lrRC9Wb0Z6dW1xRFJZcXhRMXRMYWxLVHZoa25vT1U0d1RLOThQNXc4bUZGOXNJekVTMjBMR2NuWVFSSDJsY0picHpISGtZeVRFUFo2dlFqTXloeUg0TmVhQU9Sem9kSkV5QkdNS0VUWnhXemFZYlR4TW9GSElCQ25sa3N5RmtnYmZJNjB0anRuZXRHc3NKQWlDRUFYL1pwd1ZGOFFnZjZNMzRjSHdLYTRFWUd4ZCtJazdRbWtRdXkxd3VkRXMyMW81QXBveGRwbVJVQ253RFl1OHBOaWZBMExvV0o5ek1FWVRzU0JBdDQzWVFtOGRPVkNzazc3cEFSN2pCeVZiVmFvS3NRZnlpbHIyS2hIRFNvaS9aRUlyRXlEMDllRml3eEVDYzFieEpNdnlHaXh1d2l4azQ3SGxTK3d6Zk5tQnA1UGVrUHNXWmltUXRzVVR1RGZHYy93eUt3ODYyMEg1L1c5SzZ6SFFtRU1xd0U4REMvejFpOENPcmZDM2tyMUFJTFh1eHM5bGZSa2piUDZMOGZNMEVpbk1uOWw3aHYwek1lNFBiVSttcFpocGdFU1ZRc2xxZmg2NTE1c2MwQkUwOFhxS0pQeTJYc2MyZW1FdENENzczcmw4SVhrWm1QcklsWThiZ0ZqeXNxMXZ2OUtGUUZ2a1VXUmdFc1NzNVBDdTBsRWZvR1lNTGNyU0h1MitCdE52cmQ2YmpSVm9uTURJWXpVTVhOT3RmYjdMRWMwWk5PWStVY0JCeVBjQllYMHZjaDlIV3RCMWdTYzNvQjNIYXY0OE5sY2Q2ZlpBa01YVjVhWnd1WWwweERLeElhL3ZzSzM5RS9OQzFydGVML0VselAyaDNpZTJ2alFsV1psUGJSZEVnLzl0VjdFNVB0OXlYOHVqaHNJTzJSam9MNUh4OFF6cE40cEdXczY4cUMwR1VoaElrQUx6QzlLN3JNa3I0enFYUDlCdG90Y1RzWDM2emtWNlNUbG1NQ3cxeThOYks5a1MwY0lYcjZEREVDU2RFMXBFOElqSG1McTFVUno1bGZ4WEVSejhzSzBzeGo4SURFMnBpUmR3MlFVWWhSS2JybEhMT29TM2ZMbVFhVkhsUFl4eDZQaUNaQTBjWDBKa3dCZWcxMGpiNFc1VW80ZzlpdERiVmpjZis3dWtKbW93ejM0Z1lrMEszbjB2YmI2amg1dHdtVWl0bWVlVElXM3N4RjZyYktqcTVrVVR6NVpESHB5dzZzM3dKcGtscmJCVkRPOTVmV0lWWWRiWVRtMEVuUGV1N1ZacmtiS05kKzVsTklhUStsaHZKd0xCdWdIMldCSjY1dld0bTBOM242cGZVUkt0T2s2OGlmSlZCT3Zod0ZxWGNIRjVid25HeC95bzBBSlIvMzMvYWFEY3NzMGdwWVRUazEyd0JLT2wzV2VVZDc2dFJ3UlJQRGx6KytJcjVzTm5BUm5DUnJXQmpLVEx1c1N0Ny9ITDZXNGtJNmxHaFJjSzFqTGtPUXlVR2U5VnhVeFlwVkdTWDlCTVkyUnIrTWUwR3JpTXFxVXlsbUxUTmViY1dVZ0lhWXJsQmpHa05vUkJYUmQyNk5MV1BiYTk4NlFYaHFyVmNreTRPcm1IcW9DTjgzMlhnSnYrb1JTakc3bHYreHA0aE1hU3AxL0loaUgreU5Cb3pQaW1wVHlUMGJwcW9Oc2wyMy9MU215bTZINDloMzlHM0wyeWFoUDduMGl2dDhpN096Qnhhd09jV2lmcVVmWVdjZG4zUkdNV1kweWsvcmNBdFhQUWZYMEVlbHk1bitrNEFkMnBiWGFESldubENTQkZwaXIxVUt4V2RhbVlsdjQxR3RTZUF0Qk8rdGRmSzFNOUtpWHFEWVorVnVYU3RSaG1QeDV0dU4wQTZDYllkQlhyM2puL3ZXbUVWT1VPTitzU1hJVWVoMXZiWUwzWlQwNlZiQ2drdGQ0K1ZMMkZFV1g4RnhoZkVzZmpKRjk4enhhNW9GaEc3RUF5OWF1ZDJabEU0bU5vc1c4UlIycjhHam9ZVnFxdnZIOUxBeWJwQndodEJDRXRrTDFKd2o0SzRwbEo4bkhHcm12MzVXZVRRTU4rNXJsYTVvNGtBRVpDeXRoL2NBaThWMlk5WTJKWWpVVTNnbXV5bUdlcUFnUk4wbzJDMDFCME9YeDlRUm5lSk8wNG1VM2x0TDU5aFIwTzB6aHhxeUgrNkhnb3picXhwZGtZRFAyUXFtVGNncXNWQ0FsSXI2K0w3THZ5MEVkdW1hdDR3L045YmQzTi8wOVNyY1hMajVjWEpOMFRrT2JpVXp3QzJwYkZORFc2aVJSVnFkRndmb2xVWi9OdGo1NWR2Mld6VXlOQ2RqQTQ4M0NNdEtzMFNFNnZ4MndIRU9LZnVRNmt2aEFBU1E5S0ZqcTBnTHc3WCtkV0tGUXhmUlIvcnlSQnhpUmJrRzVndGNuUnpnRFF0bDBkb1JGOHFObzVHS3FXMnZhcFFMWmRkaGZxUHFEQkFUSlJwejVINnRvbHNzVEpuM0gvUHUxWEdIY1JQZEVuSUpZK2c2VjN2SmZKb0VkYW8zWWp2b0t4MUptWGNJWm9FZCtEM2dqUTJGTDN5VjgxeXIwQzA1Mms4ZGtNT1ZaOVF1RXI4Y1lNSm5YSmZCSDhpUmVYZFphRlhzRERVVmdsUkNYRk15bTVWVkRMQjZTOUdIMDRlTHhsOExqeFpkZkdNSjkyZy9KM0Raa1p6akRaS3ROK0lRUk4ycW1TcllLdlV0MDQ4L3RmU3NqR2ZYZ3N3OExjUXhqSzNjSHBsUExHT0xpTXJxRTQ5b0xJMTU4b29rWG0vVWh3c1VqaUZWQVNVRG9PUkpnWnUwc25lYXU5Z2I3bWJteFA5bE9LaVp2RkxFSVV2bjNraW5YbjJrOUxIVmdqNnBiRnlLYm1CbWZLRkViZlhUMDBRcG9YbzYxcHJEcUkrVEFuYVIzQjc1YnU5S3c4cyt6RDg3Q0JsY0Y3Nk90WXBvMU5mNWR3UzNXMlAxQyswdGlwaENnU0dwaWFSTVFZenk3OUpYL1k5SnY4bkhCNEt1SEs3MHN3MThNL00rVE5UQlhKbUNGL012ZlBIN05jS0hKSU5ER2krZ1cwSnMzOGc3TEJDSW1QUEpJTnFlMkVpak5IN2VsV05FZFRjMVIwanFVQVV4Tm5GakhDQ2hrTVFPalNtRGZJNWZieVpWcjlPeW1CeHp0RTlmazVBL1lSZ0VMaHhEa3E2WU56aVlLVnEvY1dSaGUyd2ZKY25HZjdQeEVMOXJyVkhiRXhBMnhjTmx1RDJheElqbng4TWR6c0poeUZTbXBtdDA4SGJZV2tTa0hWaWxiY0hqa3VQNnZLUlY4VDJJTG1iRVQ5KzdrZ3ltMUV0Q1B4T1ZSNWt4dmlJcHJJaTAxYlZLRStBSVU2dkFpKzcvbVZWOGhZWC8wRWdLdjQ3RWJzVHFBT0w1M3I3S2xoWlBLMzBlNndBLzFmOFowVlFDODJlWExnczVRdlJxMWRNMHJyS3lIczdiVGw0QmV2UkY3OURyMVBhUjI2dURxelk4Z0xBaGZjcUY5VHliek8wV2NSbHg2d01qY0MxekFld0MyZHliRHpWN1E4SE1DV3g1Y3l4MEdBWXEyWVM4Z3ZPRFdaajFrWkZPdGxNT1VGMXA4UWVqcERaUjFHL2pHNXB5cHltNXpoaDhYWDRKbjlEK0dKaUhWMk1sWUJNL1Z3Q0NoZGpVQ1g0a0NtNS9TeWpFWHJyRFVPWnVEMGo2eVNEb0ZUa1FscG1KNXpOL0lQQkFCekZseXJMWmxpdG5WQTJNd2NzaVUyVzNzOHRPb3hTZ1grcjdGL0srbXEvalgzMndwbTE1eFlEeXpyUG9wTWx2QXVJWk1hbk1QTlUwWFhmamRrUjlYeDVsUkFJWDF3eVpzTno4bGpEVm1YUExOeEJUaU9hMXB2MWJiSXl6OXB6c3QyVnB1cjY1NHZ3MCtRSVFxRDFPWjdjSWpmdVBON3ZSd3MvN3hXcUVNMmVibE9sNGVHK2Jnci9nVTE1NVJrdUgzNjZpdE5Zd0laV2QrYVhzR2VXamszRng3U0IyWXROa09NbjBMNGNtNkVGTFlDQUVEWm5SSFFCdWhxUGxKdXh1cXI5UkYydERRTjg1NGpEMERvdWN0MTlCSVMzWi9lc2pOWE9mY0d0MzhkaGNjcU1Ccmt5WDZNbmJiS1RzdDhYajhjbTQ5OTRnSzNzOU1HVWErNlk4VzhzSWRkOVk2MVRXTklXbTNIZFM3dmEwTG1TZWFLRDFMNGMxZWJGNklzVzZlSHVNekdEM2diYW41Um9NaCtkSHZ1bVpySFdCeVVuVXdNTmZPV0pOaGk1bnJHclpFalEvSjFReFZoUTNsdE9DME9rTm1tZnN4d3lidXRRdjVlMTBMa2poN1RTZEw3TlJBZ0VqSWJOV2xaYklIVk5CTk4wSzlEOVpnbzc5T21HMzlOUlQ4NVhpSCt5eGlCOWcwcHBlVkRIblVtVFV6WEk0SjU2L3BIN0VqWW1jUGJzNmxqTmVHQ3crc3JTRWgrWER6RHhIb3dRUUtncjFVeWlnaGhWYitqWHZCMGlDNDJPalJDOEJpRzdSdE9CZWp2RjFUWDJEaE93RktLWDFZMy9iZ3JiVWpaeXBBeFcvRFBuRmNGODdWMzB4TlgxbkREWjc4VlRrOTFQTFIzMnM3TU50dVY2YWl3U05WYTdqWDNxNlgyNnFpejhBbUlteVVJK0xMeURod0JlS3IvelYzMUROb3FEVDMxaVllV05WOWVmMDUvcHNOK2xiUEpZd1FjWlRxWHFueG5Nd3didjN4Z0tZVnJJcGdkRlY2MVVhZ2psWjJicjFtMFpKOWpFaW9paDhHZkovRDBjZFRqd1ZhVmhmUnhVMnkxK2duMmZPajNMQmVUdGw4SXpldnpWRGdGNUNJeGdidThVWlREa3VDdjk2aVZQUzdRNm10NysycWo5ekhzOE5YR2plVXZlS25KWHg2VEd1VjVycmM3SEdOZ2dGYVVDNUFUT3NrOU5xaE1zMzNiU2xTWE9YOWRDMm1ZRlRCMkkxQnJRYk5mUityQzM0cDVQSjZjc204RVZCcmptMThUTkpvbmw3aEVGdUhnM2JDMG1XZlRIZmlwaTh5aWJiajdIdEdaR01ZVmpFWlJQazNOZkc0S2R1ZDlEalIxRjRlUWsxL0NFci9oU0tTcyt4TE13SndVZGRKRjI3d1p1cnBvcmpkQmpvaUxBTzl5NzVZdWxZSFIvNU5mb2REV01RVnNPeUwrZU5JNUtvYys1dFMvUDlWcEpLbStpMm5saVg2NEpYQWVrM0thanM2R2hKdmdpdENNaHc5cmw5NVNjU2g4WDJ2cXZPMWlwUmx3RlgyM2laUTRnZjY0ZGEvQnY2NTI2MmVNdVU1MmVHMnQvdXlsREFKd3RzN2pCWHUxWjhCb0w1SHlTNHgyQlBMNHptSDJpelBuWTMwQ3RSbi9BSFY4alJScFAwbXBKdkJvNmg3Uy9sWWJoZDBESGh3a09wQVVmUFlFOWlPK1lra1R6Tk5UZGVYQ1Y4TW9Zdmc1bkpIQnNPS0tiVFJucDVnUk5DeGp0YXQ0UGRvcHlUeDJwbDdCU0V0d0pkWXUzUlFjc0p2L2phUngySEEzKzBCbDJxK1lKSkkyRlVwWU9kcFNHNExYalpsejUzSkh3WVJVUHhFY3hFdmRNaUh0THBuYyt2VFFIek5pdkFNNWhlSS9ueE9MejZJTWcxUVU3d3Riajk3U1M3QWZxdmlKL2MvZEpMRmVPa2tFQ1BLZmdZWWFmelhtTHQwdXBlVGVwZUVsNkFXcDAvOHlidXFXVXdUVlV4bHNaNGZ1Ym94MjJpOS9KbXhMQndEa1ZlVE9wOThNdG9sbm1HMXhYNjE0UFRZYTRtVlozbEZ3bWRaeDU1MjNJeXZmdldiQlFjbzR4NVIvVmozcHpGeDMrcGJHWEl3MmsrUC9jYk5qNTg5VjI4am9ISlVxZ2hyemYxbUQvVmtuTFBNSGFnbzM2TXZldXlzdFUzMkIzZGkwcFRGTEYzK2Z6V1FvQ3gycFFsbWVSSmVNSy9aalVCOEFHQnFYOEcrRWt3MnM4dFQxUFNSVWoybVJnYnd4QUNNc0Fkd2JHTjRyWVVqMTNXVDlmdEgxbkhxT2NUTitZTHZibVZaSTZhTUhtNWVyQjNpMXpISDU4ZDRPLzZhaU9sUFUvVGRaVSswc0I4K3E5d1lZTm5nRThwQW9xYXhmZ3B4TUxJZWovY1QyODFqbzlXMlcrd25LT1N6Mkhsa205TTFoR1Nyck81MXo2TnJnNHYrank5b0UxeDZLWURuU3RmeWZnUXo1cFdud1I1bDdIRlM0Y3VaSkplLzBMVklnNFVkdGt2dEtuUmhsaWVVYmw4eGVYRlJwWmlQK0RNK3NrNFFmem9oaVJ2RVhqS1VwQzVjVCtPV2tRYmlQbVk4UkkxV3RHaDdJYjFTRWsxNk5SOTdVU0tSQ21sd1JHcUdWazRFWFVXMVRmWkl2VkVacG5EZUdYUm1YQVp3Y2p2OTdzaU9QNHlvMnd6bTZGdXhpb3pZRGV5NTdPT0pvK0xQOTdzenpyaTlaK3ZibnhENEczbWpDNEdwcWVET1d5WXJDd0NVVzhod2M3RDAwOStqNXYyR3BQR244UytoUjZqL2ROK1h3SzBKR1hJMmtlcmdEdzJBSU9STURBOXpCTVRtbFQrd1oxVWNLZFNsR0l6anJiY3dFZEI3eDQ2QkdPbUg5ejJOKyttL1hka2JHV2hVS2xFUUgwa1R4OEpKei9hNWpBMjlZZjJwS0l5a09EVVBEekUrRUViTkdkNitLTndsM3B5cTVjWFRhZTR1cHc5Q1ljMzNCckVjVSs0YUVrczVWdEowbEJCQTcrZTVEMzdHeHdoVkR6UnliaXpwYW5wVWIyeDdLQ3A1SnhESnZzSjZ5RGdlT2Q5dzlVVHY3WnJ2Sm9GdTBOMlA3VUhvZlRBb2NCNVJaSnU0MXA2NzUrSWl6S3ZoeDdVMStaUHZ2dmtJS3ZFVjBGa3JzQ3RLZnJpa0ZkZzdYK3JKYWlFN2I3ZXBpb1JneGZtY3lDcktnNytRckxJdFRyckRvMlM3bUpKRVZUdGVsSkVQWUJyUmVCVytSdlRmWEF2WGVUWmlwY3NuNjJTUlJITStrTXN3MWhFbktVdkNyZ0tRSWN6VU9qYzI3UGZMc1R4amNVTTVFS2NzYzRkYnZpSWM5dnMrWUk1V00yN1hIa0ZZODZXYWluR1BCcGJrMjlnaEdlKy9vRlNGNk1FWTVXTXlFemtGMWJSb1RyTFBHcFpyc3EwZkI1MDlEeGMveFA4QkpVSDZkZXROOTVhQVFjSXh3RW9aTmRyRmNTV1ZmSWk1R0dTU245RHR2V3ozVlZGaVVBUFZYMU1TcnNpUXBMK3lpWWtFZlRFMDFNYk9Hb3RSVUhuYUxhQzZxdnAxTXBtNzhMalJmTmQyN1ZreFY5cVIxdkdTSGZ2RFNUVE5QVEhOb2p5Z09ZOVdUUUJIbEZ6ZUxWZEIwZ3B3THMwU0dyMEU1Wm1zbWZqMHVxR1U1T0xLMDYyT2JSR1I5anFzY0Rjd2x2TEVRVFE5a0tBOFJuSU5Ocm9RRkQxbS9Da3FoZWo5cXc1T0lkOUY5QVlzamRYWXdPWTJQV0trYS85OWk5YUJQVlZZdHM2aUxzajhkUWVSUDVxY3BXRmF4WFN2ZDJBRGtyMFVHRkxzTzBJaTltaytkQ2ozdExoRWJ2WTNqelM4emsrL1ppSjVha3IwTlFsVTB5UFprdUFlOXZtYUlTRkd2VmhyTU5mdFIyUnAzK3VEQkdqZHVDMXE3OGJXMGU5VWZ4aUk4TVRwWWdlbnBIdFJsOXBFTEg2WnFwM0xDQmg2Q29hcmlpbHJSblNuY1Fld1QzbFgwa2l4QzJlNDN3dlV5YVA0c0hqV2VHS0NTekxKNlgveEduOTIwT294MTh5RTY1NERTRDl1TFVoQUltaU9CZVNxaWpKQXhBZ0I2UXRZRndqVGxCV1hVUG9xbXVyNjd6aEdKZm1Pb3pyWC9YVnpvaXBtZHRFQzlPMXVRRGdFRFFnZ0VPNkppanhXWXI2NHpyV05yV1VGUHBVeXVIRThKSFpMS2JBL0h5VGdaOU0xdG9zS3BQczRndjhpeDgxT2RUV2hCRGRiWUZFbnREd0pGZnNxbUtDU3lnd2JpSDNEdlVlYm9WOW16dTh4WDdQa3ZOb1psTEJWWlRLcnR0bVUzQjF1aVE5V3VuMnMrUU1lRDV6TkdMVmRQZDV6RGVUSjVEekZabkQ5Q0ozVXpiRklSMDg4Y2d4OEF3b0FMdTh2UHRMRmNaOE5WNk41WktLRFlKaEhHMlV4ODQyK203VzZnTWp0QzludXBsODRHTnZueVlHWVNzdG1YNkduSGJyNVRjakx0N2swaVRSeUJRRWwyNkRhdzY2TmZVYTFxbmJqVVdUNkthRUkyUzlrcG52dVBDLzBpYUxqWTJqY1NyQTF1RjU1WjFaTWpyRE80dHBMdjh2VHo2WHRlWmpSUzlLbXhKMjdpdEFMOGZOb0dSdmI0N0FjdnByV0Z5MllkTnNPdVl3eUU5V25hSHJ4Q3NvVlFoUGFCY1pCcHpiL2dpdSs3UUdBcy9BdUkvTFVpY2Z1cjFkRFVlUFBTdHJTb09ybFVFcXRqM1c4QnZaZDNBZ29iTTl3d1ZTY3BXRCt2UFdZaFgrMTFLYjhtYTRZQ3BOMjVJc2Y0a3hoaVZMYVNqTVlQYjlxRHgvczFZbU9JMjJNc0tlVlo2T2N0cTd4TFdwWmoweDhsK2V3MFRPeHd2bml2czk3L0VBR1VKTmZRUytFVFU2a05VMkwzVURwZENDT0JCWGdnMkZyL2t6TUZ6TytBbmw5L1VGUkRzb3Jyc3hxS0JQUWR0WGVZNUpCbnlMaWFBekVKTUpiVTZGd0dJR0ZuUkVtRFAxZVgyand4dTdQS0pJbXBRMWF1ZFFCTnVPNXhkYlhuK0xDV3ExSXV4Ui8rc05rRXJFTEE3ajkvQ0pYZVE4ZEljRVVPL1ZVTC9TOGdYeDdnS0pwQlRnZVFTcW8waGJxM01Wc1cxVFhrRzFiWC9wRjk3d3B6SjBrUytibUhKYWlRcDZyQzg2S0Npa2RtdWlPRDdGU1l1NUdPS0p1YmY4VXltNEpMK0QrY0FJRjduWk81OG5hQ0VUL1hqdk5PRkdWdk9VUjZaZlVvbjlaUzczdDVPRFlsVGRNRnRkWkVDNmd6UlJkRTc4UTZXWGFCQktNOTFoOEx6blU2S0tnWk9hc2tuR1NFc0F2ZjFpUy9YMGcxZ1dOcndPMm1tRTJnRkN0cHAvVnZxYm1WdTFzdVhSR1UwUXhKN3p5WlZtQ1cyNnIxY01XeFk3SXJISzlUZVl2WTg5ek1iY1hUVzNVbEFtajlkRTBPVytuMDhvMklPdTlKNmYzYXFIdlBzRHpSSmhIekdPWFdUS0RZOWpwS3pOVDd4aHhDODdoU2I3MnNJT2s0bGVERTIyY0lUQUlMMGlMMnhDUENaRlgzbitCSEwrZHoxWnhkekF0N1Jkby9Ea2JnaUxiVnM4WnhiczlTdEpReUIxUG45ZHA4aE9rVGxXeG02cTlGUHZmSkthTk9zbHVFSGdTbjZLcnhEbnNsUmVyRmNkWFRzQmdwSFpUTjJ3anBIbzAzNk1wRVFkbUQ4N3drc1B4dVBqN3VKR1VKM1N0WVNOUk1FdERpOElITkp4aVRucGlSb0Z1Slh5d2c2WW1Ga2VsMTNIOGcvVTFBS2VGYTBoV3hPUFhhWi85WTBBN3JhaUdSWTd2dXFlaWhVTkZmbDB2OCsxODBtLzdvS09uM2VSZm1kdVlwVnlpL3FkUkJKZzI4Y2RpWlBrZFMyQmRtRUl4QWtGWUdWdVlpUUJhcDl5c2ZjZ3JsbUFrRTVHVzg5VDJ0d0hzM3ZVdjljNW8vMHk5NTJCZnlDa2hKeERLeSt6Z01wMjN6UHkrUE1yamlFZ2U4UTFGcmtBbm1naEUraFJ2UDRZSm1XbjRqdCt3MUdicklWQzNFYUxHaHhZOVVVWEh5elplUC9QTkdzYzV0WHBhelpSaVdWM0NoV0hxVEp3akU2bmxBYXkzTkRSRG5PcWQ5Z2RVRWtiQWcwREtoTWVMS21BSWhWM3A3M3F2S2pxWGlUdFVBZFpBVEpEOHNNeDJuN0xNTGY2WFc3VVl4WXA4ZEJPMG9BYXM5d1NJVW5SMEJnWmp3bWVxa1dhQ0I0Z2FYRkxCZEwvbGo1Wk0yQ3dja29xRUo4c1RwRlVTVkEyVm9rYklMeE1tMFVxc0lpUzNKNmEzWEM1OHdSajVnZWF3bS9Ka3Q0UTl6T2ViSlRMdmFsYjJJNFY0NUhxbVZnK2txMVhGTjltMEl5TFk1eVV1NG1TbjBhUlFXKzZ3YTJ5eCtacjVpN1VhMG9UNXZRR0NsODQrcXFHamFCZW5ZMUhTNi9ROGtGWmdjMEJ6NUhzVkVjM1ZHRm4wVDM3ZHBOWFNmaFg0MjkxRDhnZ2NxWkdDaEJkYURCZW94cDBqTFE2bHB4ZVpJY1psaXF6VmJZc0NVaDEzMGdmL09EblJsYnJDbFZKb1FNeklqcVA3SnliQXVQV091QU1KNXVpVmM2ektDdHk4WGZVbW5DMklNUkJsM3p0Rjg2cGRGWm02SGF4QzRNMjFrVXR2NDVNRHA3TFhMOXZHMkZlZ0VGUGtzSXJ2SjJ3dVJxTG1BVFYxTWdlOFdEY0NrRS85Wjl2L2Fna3prSzJBMGtLRHN3bFhqUDdUbWJwUndHS0lGY0o3MFVEMm0reTgwQXJiY1Nyd0NjaHJjeDVXcUFSTUU2UGJvS0pmSXBhOUdjaE9kWWJMbVp6MGdUZHVQbUFKemYxYVJsdUVRU3RzemFyQU0rdTN1Z1duQW1zVWtkdnZVY2dHZWNXZ3JqNUE0T3Q5bFl1Ymp2M2pFc0RBTi9Qb3lvc1V6cm9xYitPT3UyWlF6YzlvRHMvZVlDdGF1aldjZFV4SzU0L3JBQmd3cExBTnZmOG52bzFTUTRUZGhnZ3BvYUJMUE96WENaREl0c2cxSkQwWmR1cjdzRFJmeWJKdkVGWlFUa1ZsK0t3SWZtMk5wOHJMOEdMM2t6ekw0KzdENjBZUVYyZ2c5Y0sydklDaGQxRzMrSDB2TXZpRUZBbDc2b0pzd0FkektzbzFmWTNWV3JScEM4STF1djNBUjRjQWhMZUUxcUYwTEszUXpWOE95RFlBK0ZjMHRKTHRIdFFmb25NMHFnYzJ0UzN2aCtIb0w1TXpwSVRiMGVuSlhKdS9rMkhxaGZJbzlKOWQvak95MHcwWUFRTUtYQ3FRNGNscnhEWlFuRi9sMWlzZkhTT3F2VjRCc1JVTGpmZElxUElONFJPZTZZT2JYekdiSTZEUzZVbmVSM0s5c09xSHJaM21VVCtTUWhFN1o3UFBYbUNkemY4d0pDMUhZY0YwUlY0T1JJUThSODFDSjIyRm1Oc25WdkVpQjBDSVEycEVaeVZnZ25BaC9VOWZEaTNRTXZqSmJLbzZqT0QxTnI3NVZsREViK1RkRVdNdUlhNElydUt0V2ZZV05ka25McS9zVFZQSjgyOWNVcXlvNjNBWDhESkdEdFZmNjNKL3hsZHFXZ0dmRnNKd1F0NDJFWTQwdkhqd3JIdHlrajZFc1RzVkkzWGREVkhnSDlFRXJQa0VmakszMnNsZ1dETXV1dnR0OGhDWHYyUDBLczhqdnFHbGNJUTlwOVlnYU5CdzlmQXYydkkrNFBwTmRVZkgyTm9YdDhTaUozazBnb0IwQ3QyelNsSldnZkEvcjJJa1JXdWFlQlJXWnljaGVvemJpckdFQllFZGYvODVxbE1tMG45S3hYY1hqaVpWM1RpZmo0VkFRdjBXc3kvTkpKUzloeGZ6bmJHVFVCenB2c0s2QmlYRUR0Tmdsc2c3Z0ZwcTNObCtRVlZheVdjVG04Qm9xMWtUcGdmS0MyWHhRUDBIaTdlNkp6Z2d1WE1KaS9LajB6QXU5OFlVQW5mNXhTd0Z4Y1d0OUc0bnE2YjFUZE01UVNGc1pneVVJaEtlR3ZXTCtQVFFjYXlNcllFZ1VCWXFtdEp5a0pIc1ZUNWN4b3BIMk9kSEMraE9pY2pvYXJBYkxXckhyWXF3emhuNHpEMlo1TDlzdWZxblhoKzJtZUd4RmlGSkE4ZFkzN2NlSS81dnlMMWNwSHRhWTdzZzZPb3d4MTFNVWcvM3NBdDFPR05WMzhYbHdSWlR5Uk9YcURxZC9TK0NHN1Bqdnd5VnRsRGNZUzYxT29MdGJEUjJZWkpjZXZtanNzVFNLcDErclhUbE5XRWJWZHRvblorYStqOVlnVWxLMTgvWmh5dWZxb2U1Qk9QZnM4d3J2bnN0QWpoNmx4QkpYMUc4a09lM2RNcjVZdmNORC9EYkpWVXVzYk9JM1FsK3RibGdnL2RHNmdYdjROSEV1L0h1MUJoREpYUWNWV2RoYjlpNzNFMzhQcjNCVHdsYXJVbzBOaGhZWTJsVjl6WEFsSGVGRGtBOFZuMkhHNGZCSk9lQ2NZNDExVzJnSUFYTlFnbHBUNnEvZ0Q4akVlVndicTRTWVZEaGpKUTR1azJVeW1vUHBNUmg4L1cwRzhqaWxiaHhoN1h6L1dmVnoxU3Mycm5sWWdkcVpwTFJ5Q0Z1UVQ3eXhod1kvR0JhQWZjR3h4Y1MzVlRuZWJBcENJVFIvM2NTNnIxS0Y2VUhXdU92NEZIbHYwNks1eFl6U2xSU2hxN3l5KzhGYU0wMHBGWFhCbUxQU05RTTNvVmNLQjBYVEl4cmdkM3BSYU5yM2xkUStqVUVaYzE1dFozV2srajduOFRXV0pRK0VNaE9WNHppSmxyK1Vhc1AvZUV6amt6RThqTVl0bW04dWV1b0ZLNDZKYk5wd1VuVXVqaEhwSEgwd1VkeERCdEhwYTVOUTNJODh5cDJNc0pmUjI5UFR0ME9YdG1zUE5mUE1XYUJXV0V6ZjlpNjJqTmNRRkQ1RUttRitORURmM256bmlTT2dtZTFZOXlVN0tQVnFOTmpxQmg1VlNhdG8wdnY0MVY4TSt6ZE5kaERKcjJsdjVSMGJwNkhnSElwaDR4UWhjcm1FekREZWsxTWVST1hDOEY4bGQ1TFNSb0dtVW5RdG9scEtMMmtoc3dERDY3SzMvRzJ4WWIrTklaWVd5YWhrd1JGVXQwYnFJZ1pIbFcyNXFsOVVxMDg0Mk9JRVNGWFJvNkQxcjBlRkQvY21ZNi9MVlQ0UUxpVFJQYi9NRjIxaVJiVldHM3pTNmpXclhQMjllV0h6OHVERXRPRGNvd1ovdmJ4ZUUxdHlqVEZ5MUYzRlMrWXhSRk9aREhMZEVNajBuNGNSOENLUWdsMFVGaVV2YXdJTWUrbW94UCt5VXpnZUdMNGNjYUVhQVpHRnV2dHk2L0V4bEhacXV1ZFJLUzF1K1BHZWhqSXFZWTcrMllscVdYcTRTME9YczJhTXIzWDlqQ2Z0SUl0Q3p2ZEtrVHBWZk9GeWV5RC9VOHp0Sm5xcGFlS0Nzd3QwbWdwNWp2b294dll1a3J2dWozcStMbEtnT2FQY3RMM1dMYzB1U1l2cC80bElCQXNWbEhlWC82WjBuamlCT1NXRUR2WmM4cWVPS3pOa2d4V2c3bXhvWEpINmN2NS9VMjhBUWZtZFFjayt1MUJkTGZJSkN1TVJBcHZlODNGUHhGSWdmZEJmVVdMU0VWRDkrMmdvcmFjWllLS1NRWHJvY3gzNG1rWXhNMWFob0lPWEN1b1ZZck9tYnFGYkJ4R05relFQc1BHblBmTk0zMFJPQytXSk9zemM5cWsvR0NzY3FYUGIrSE1iR29WRERaMmdLTDNNcFIzZnQ1MTFNeFR2dWUyczVzU3lmWDk2VGRWUHFQOHA0VkdRV1FjOFdDWjYrNFlMWUdGdVJ3QmRYQStzS2g3dlZ4RWNzVU1UM2FXNS8wMXM4d3QrZXl4cFB0a0RFSTJITnNXemRCOGc5bGIrOWNTNHZpbGRIQ2JiSkhheVJmVm9QMTMxV3JOVDNnZkJ1U0lKaFFJU0h0VGVWeldrbDlLT0hEYjBXRUJHYU1veFFnWEJTYTZtaFhHYnhxcHFFSDlYOUJQbUlMTk04YmRqUTNoczdvYm1PTmdrVVEwT1dsUWc4U0lJMXFlTjJ1K24vamJwQ2dEV2JFYTVJbEZES1dmTGZZL1hIRVloME5Dc2owcFRidi9HRTlJN2xsMjFTL01LN0xoa0g5UGJlRlBJZTVrempFeGtodnhhaGNYRjFFRWhCbzhlU0N4c0tNQ3pvWHg5MzFCb1pPNW9HOU84T293TVJoTzZ0ZXM4ZjFpVDRiYzF2NGF0UUF5SXRGVFNYYkJiY0l4OGhQODVPVitLZGpONXBLUlJBZTlRcW9kcG82WDdhRSt0WEM5V1hTMll0SzZoLzdDSE9TQjJxOUVLeStwVHBBdlJ1Lyt5dHJOeEdvQ001Y2ZXaEhwVnRDWnQ1ZUNKSkJRMFRrdWkzeVl2ZGF1L1ovS09VWXpSTWhlWVZ1UFNPc2l3MWl5VERDRUgrWWplTW5udlFmRFUveU11QnlsN3VLNXp6K0xrV1JYMDdvZUR3dmFwMDFCNUFMZW1Jei9TNm1RSzFIY2pJc2lURERybTRqOWlKQzZPa2tGbHVGcGduRDIveDIzSFhVMGNHbE9pNk0xaHBMK1JDSmtxeVVpclcrT3hLVENyTUpjM3gvRERoZ3hXaFBoRzFpNjd0NWo3Uy81akprcWUzbVNyNVBJMGZBYnJvQkJTWk1Ca1BWN3VCendCazBBZy92WDJOWTNmcDJrVDJkMHIyRGFYREZia2pTMTVBak1JaXhaRkppT0prVGlZdU1Qbno1d2FRd0d3N2xwKzl1OUZDUFlMdU4xNTdoRnlvbi9JOUZZeFhUVTVrZnNKajVIbHdDbEtpOUUyMjBhVDNKbUNYQkxKQXM0dEFvNzFVOGpST05Ma1JBTDFKS1czcm5rVGVOOVJ6anRSdHdDd25wd29UeTRsZHZNbTlOM0RBNHhlNS9ZdUFQTmZoaHl1akhYdVFVOG94dTVoVkJHZUdNZXA3b3V5d2VkRDhqWk44R1lqYnJHK2dROW0zZVZXTHZXdktoNEJuMXZ1RnVxVDRIWlpaS0VGeVF2U1F6NmlmS1FhNmFmd2ZxUXlIKzFOZDhCajRveU0xSGJsanRPbEhQdmIyOWMxYjZ5MkNUOVJsaE9IdlRqK1ZpSXJVN0FlWHBzSWdqR1ZKT2JrY09BYWNWQktoMnpWTkVYTkRzL2ZCbVZsUEwwL1RLeGNUcXZySS82S3FCYUQ3dGp3bkdud2FuUU5wY1UxQ1JjbTZWelF4NHRvSSswNjVHL0Z6WXA4YXpUSE9GK01VUGVqcVp0YUwyekd6ODNDcHQ3S3Nuc1FENUFHa05LcXRMa2RxcFZWM2xhM2Q5VzBGU2JObVpqYW9RK0NzNHpLRWhDcHI5czVEWGhkZW9na0RER1ZsT1RiUjhkTkN0YUpieHhTMUtyaGxIdUFOcXhUTUtqV3NUTmowRzNCSEk0Rnl2T3ZtY3hDYUdZQ2txSTNSMUcyWkcvNWRRMStOcGlZTFByamIxRlhqWCtkdGxiQlB5RzZHRTJJdzMyd2hoeDFtK2lQV3JqNVFOcU1NWmxYZjk1enBBbmFxSXRPR2hCN2U4RThURWkrREt6b1lZWmNNMUFMUGJ1M2hNdXhCUnRCYThMZUpNRUZGaXBjOVc3cjlmSGZSbkZlZy9EOWdFS2xtdkNNMEJDd3lROHdJeEphN0RZTEtTY2YyWHk4ZkY3cEVOLzdpKzZXcDFLUzN6VC9xVWI2eDlGNHZBTWpLaDNkbm45TSs2VXQzazNKNDNNekdLMzhDODRlVUluY2g0VWFWdFErK0tQb0g5SFE2S1VraEg4alk5Z0NseWI1Zy9ZTnk5R29HZ2lRd24ybXJydURXS2NvU1YycTNNWURhdWtQYXhJM3hwOWtRdHM3c1prcmlwNGIwU1gvMktEOGZZN2ZpZ1NMR0g4U0lQNkwvbHdFaFlXbW0rOWRJbmNQYnhJdENlYUxCU2h6SVpJOHFGcU1MK29SaThpKzZaUnFpbzc0ZUI1cDFtV3hONWVMYlV6K2ttUDBIbDBwZG45Y0ZWeUcvckJMakRUYjF0dUFma3JENlRXRWFhSDFFcWtiWXZwTzdWR0JoMUlSRVZMclZleXc3T25UcisrVk1ENUM5bmVndTdlUWdwMkhRUVZ4Z3h1ckRLeDcrVnV0cFlDMEsrRGNFRVpQWllJWmVVemRneHRRMVVpdjRRd1A2b09qT3VFOXV3RCtpWGdWMGI0NDZ0TnczTHRMWGVlNWhRZkd3ZjQyT01uSTNndjFSS0tvMEhsWTNPNTdiejlDbWZnRmFsNFY4ZENEOUZkNlE3VWx2RWhlUzJZVlBmN2E2aG5OY0tQRU5oNEs5dzFHVjcwazIySmt5ZGhRV0pXNE9LU0VCNUdrTEtDWnpoSEJuLzllNWdjTGZHZlJDVGwvamhmMlFqUFdkNkh5QTcwd0w4bW1NL0RVelBFTTI2bG5oWXhjSm1mZXV5SmVWZEhOditBVHdBZXJFNjRTcXMydVZTK0RvMEhWVWlTT2dWSjMyV0ZwallJMlFyeExsL3JKR2JtNkd1dFZDU0YvaGxVUkhZK2p0NGUyT0VCY0ZTYnlyZ3JITWJZZ3ZMdXdUKzR6U1NrcTAwZHhNdFFUVlJJTnJDOXFFcmlxMFlQT3pKUzVtWU0rVnBsaWRrYjlwWDFJOGw1bVJYVkc3YXd5V1FZVWcyQW1BV1AzSUpTcENCYTZmTW45bmxxdHJ0NjZLd0sxQkdXTE93c0VnZ0hYZ1EyeFdvOXNlMWxkekI3MlJQakhJYnBXbzlsNWsvcjlIdEpyQk45YVM4cGVlU0piRUhGS1R2RHdNR3NhZ3lTdVVBNnppWTMzUk8wY2dSdVIzR3BMakNueXZOU2sxU2UyaGdISVhORWZlUXI2UDdHd3dqcm14RS9nQ2kvV1MvVVJqenNTakxmWkRRVnQ1QnZNbFVScng4enFKWUJSbElKdkN2WXI4NkxxeWxveFp6aWQ4YUUxNDdZVWdma1F6YjNvVk9sSlJLNjhHT050SXk0TFgvcEhOUmUrKzZOR3IzSTRjdHdIeXg3R3l5OXdGT0k3MmUvU3B0K1dUUFZibE9YVmJ3OFZ5cUpGRWpXMnA0OEVWTEtPQ05BNW14NTZta21xNVUveDdIQmJoalQ1WDVBNllKekNpdjAzTlI5clk5RGFyUWpKLzlNTm1WbmhhVWlQTTNxQktsQWdwYk5McGJPTktYeUo5K2Y5Nmo0S1JUY0NKSVRuYzE2SHpFWXliMTM5L1UwNjB5RFVINnJNZVNrNzJWdmc4NkFJQTJRWVFtUXpleldxVWlDaUZTUmROQU45cWlEcTFHNkFWNnNDM01RRU9WV0lGVGxLeDBlNkhrSXJ2UHF6alNCbm5uR1ZoVzUyOHFpVVk4SG0yVmdDaXZFRWlBcnpmNXVVRFBUWEFGSDFKYWszM3h2NlVyeUUwdi9LOEJKMHp6ZElzZXhWeE1jL2lBNTJqUDVzQ2RFb0xxemtQb2FadmkxTmpVSFNHbGZ3OGs1UTIxY3dCeGJ5MDN6YU9DMkNaaUt6aXR2alZ6TnlSbmxnbnM5bjJQbWpLUWgva0JoOHlGUThlRm5UelBCbTlQR3pCN3p4NWYyVVZieFJ5anpJUGdwMnppSkdYSFFNZmhtMmtoMVpKd0FwY3doSkJ1VEhrSjNLenp4bHVPOG5NZStNUVArYytrOXljSFZ4cEhkTXBnbjVJVVAwSHNCV3BtTnNJdHcrLzFrZlR1eEg5WU1hWXpNOGUyZHp4TlkrK3IzZ0tHb29sZ09pWlVLSk15MzNMOGJXYXpLZkRDa2dYKzVWc2dTNzdpcVhNVFNhL3licFlHSmdCdjFJWFcyOVRiOTlSVjdPcjFlVjJhcEFHZlAvc1Z1Mks1dVQ1aGZvSnNEVi9COVlRTnhuM2FCTncrRVozSlBrbEE5WGRGU2pVdzlGb1pyait1Um80MXVKNXdJbVVOaUcybUdGSDJZdVA4WVFJY2hKYytlUHBRS01YVWNoUHZhdHlETTdaNWpCOFRybGM5UzlMZEIveG9mTk9MTmxLdXZkVGt6djBzcVkvOFpZQy9jR3Z2dVNydWVXTnB4UmlkKzNDZnlKUEZNc0k1Y09hdnJGMnRTSlJGOFJUZC9WM2RtaU96RW84V1ZRRDV0TEpKUVZ2RjdnenZlL0oyVXNBLzNuUlhvdTRWNjdOV21vMVRjbEtEMWowNThsMXRvOGxsT1F6a1B2SXRvc2RwazdQN2cxSXp0OTBwOHhVM2RqVGtra05QZGRKaVhCT1FoanI4cVF2NXNJSmlhbTVtV3B0QzBDejd3Wm1QckRIVy9kOVAwbG0wb2xNRHhOc08yUHdUaGp1R3ZKSTY1Z2FwVUIyZThKTlNrTFFqSXlsRUEvYzFld21tUWRnZXJ0RHJhQjBFZU9mK0QyeHFwVTFydTdoa09FQmF2YlFneVZpQUtwMUdXdEk5UXgreXdQVHZlN3Z4aTlrenhhU2cveFZPV0hyVitYbS9lK093NFJIY1VzeWgybTQ1T25jNHRwa3FWYWhsVm96NmtLV3F4SWRPdlBqVmJDQThkRUx0OW9kdkNUN3g0Y0lSaGlOVHZ3eDJ2cVQwRU9jRmRLeHpFN3RWWGt5SVNpd2kweXBhaFRYb3pDM0Jac0FuNThvSWMwSTJzUVNpSVFpNVhhYkg5OGVickpITmhmQjBVeU5vSzczd0lMelhyUytJK1cxM2oySy9EdEc1eVZudXY0Mnh4R0JUTGhUczBoWDFqSytHUWtOU1NZcytmSE5ybE1oUW91MDlzYVpIWUh4V2tjQ0xEUGxza3YvemcwazFKeVBwZ2ZuQ2Q4R0ZUSjRMc1FmeEFYcm5meFdaMTQrbHBoV2phRDZGbCtJN3JBWVg1d1pCS0FibjhXSFNPc3cxVFI1ckFwSUR1cHo0OEI4UFpCNloyMVMzMkg3RHJGY1IvWXMzNW1JY1didEFJcjI1cDhLK041ZWFtcnlES3ZDZmNRQUJ0bUhwaVlzZ1RtSWlOanBoVW9McUNOOGdQamgza1ZQOG1yem1vZEFkZ3pUUm41ZWlES0xDaW9SUitubFNhWXhGeXNMY3VaODBhb21ZejA3dzNTbzJDWjk1bHFFQmIwSDB3OFNnUjZPUzVtelBrY2k0eWp4V1E5eXhJM3ZNbmpYYjV0ZmxiQngxWUJNYXo3cXVjdUdGMnpKa3BWQWhhRGcyb1lxbkNHUW40emRmWFcyRS9DbWdOQTRQOUxyQms2NFVvdnlhU3VpVkxxN1BMc3ZOZmd6U0hXNTE4Uld4TWtjbzYxdlFQb1djMHlTZHJWd3diemMvT1krWlBXVFdXa2p5NEF2Y1lqa0Q5by9CSDA3RjhJY1JjalRKKzlqYml2STRIYnRNN25veEFPYms4VzB2SDg2MVF1RVJUNnJkWVBrQ01mY2JrRTJxSlFhcGVFT01zbmF0RXFZOHlCTlVpc3UxTzZLQU84RlQ2WG9sM3NOeXMrY3ZSeEozT2d4cEFtY0Z4Nzl3RFh6UXEyc3F2Nkx5cVZsQithWi9tTjAxSnVhL3pQZmpDOURhZ1ZDQ0Y2dFF5NkFpWWJjS2FhY1VYU1dZRVFLMFhhV1hyU2NHVnBveENLTzVEMzUyYXlrMXd6ay9Mdmk5eEt0amwrM3JUbXdxbno3NWtGaVc4TmlsQzNnVHNGYU5KZStpMXppUlIxNkFyeEo5OUV0elVUUys0MDVvZktndFdtR1Q0RGtYeTNpMEZWRWI3SzB0K0ZkL1NvNDh0K1RCODNCZXdBbTFMSEsxbTBoZzFFcHZML2J3OFlsQ1BrNTJZTDh3ak1HYjdPc1pxdXpMWVBSQlhlZXRMWGFha0xJcDllVm54VmY0enp1Vlo0MEIzd09XQm1zY0k5aWdjeXF1dEN6a1ZrS2xNdC9VQXFXSm1OUGpYOVNjaTJwdldpSWhHc2M5TXBBM1VLOFExbzcxaE9aNlpBRVlmVmMxMi92Z3NEbzd6YUZXZ1hMVGg0VFJvUFVHRWdPYm9uY0pocTFDdmZXa2xEU1JsU2FrZW9tcitUMi81Tm5RdTRKYjFTZGRWN3daUU9GT0ZyU0dqcnJER0lIT0hTbE4zSmRNdjMvMFBVUXhXcFJXVWpwTjhudWh5eHhuSzkvOGpLd3psME1xeS9zekZ4ZnBibG4xSkJpa1YwcENIV1Ixd3d1REV3TEIxSkpRNndxRmhWMXBPMXVSb3BHcjgvSmpWL3RWcyt1ZURNTHcvQkNNblJ4enF4M3QyeUlIckxoWmhGclNWNnQwK0hXekdTWmZ6bWQyN3ZzVWhHbjJGbU8wTkRVQWJCSUF0a1RROUpxYXkvd2tremNOM2tROUFTQzY4VG40VTlNRDBDWTFJR3BNU0F1dXQvQlpscXhLaHZSZU9GVUUrbm9YMU1OMlNDNC9ZcGpmMk9oa0R5a2xMT04rTDQreXFWYkpVOGRodmM0UW8zYzF5MzFidU9rT3F0a25INEFseEZJK2RvcnJjcmpTYVRvd1ZNNlF1SXZNNEpyZGtxK0pDNFlxMWFZSWM0ZGlLRHFnSVVHa0QxVEMrOU5jN0pJa0g2S1VVZVlicjREWkpHTzVQSFcyL0M0c2VFTGRGNHp0R0U2SGIrSWV4TE8wb2Z4S1ZUL0xPRitXMldvN09MSFFPMkZ0MCt5MWlNYXRjZ1k0ZHMzVm5vNDg3cFUzb3BCU3czWVg4aE9BWUp6YjM4cEs2M2pNVmlkZVJnV2NtbmZ4RWZ4eWl2NmxzcmNoQXAxaHR4a2dqMUFyUkNidGRNeEtneWhLRVYyYWFaSURhWEE5ZkMxdGdFamJJbnJIdE94aGk2dHNGWVhOelhGR2tkS2VUMWdDYkRPTXF2S1VKc3UrWGlnTWEwdHFOMXVlZW5RaTdXZXBLV2tSUUcwcFUvb3JxTFZVTDFHWUlITERzYmRWZUtnTmNqdEpUZGljZkY4RlM1WW81SVRzNkV2MUtyeEJSc3lvUDZZUGo1MDFUN01CMHJNQS8vS0hxcjlNaWpEcXhOZjRzYTI5UGprVlhWQXU3eW02SS9KRWErb1lOYmRiM0lLS2ROSi9tVWdPVGxrV0EreS9xSVd2Z3JvOUZCdDZKc3RReS9VMkt0N1daQTFlMGRJckttRkVJdzNTN2ZmZ2JJZHRvT29GUlhkdFFncmpiYU1BNE9jR2xlRVl1QkZpOUloZHo1Z3NQYm4waGsyYlhmRnBBS1F1U2pJNGo0VjcrRE5YdXVUV1pnV0VDV0c5b2VyTEdSbXozNW1zS3dRdC9idVlNd0dRNEZac0tDZHNkaG53Q091QzNmcnVHRHI4eHJLcUxDRHFDYmdvVHNZWHJQdjNRVGZQZU5uMTByb0NQWnRYU2RFQVJFQ2xyRldQdVlKUWdXcUdYVzM0Y2FxTVQxVk1tcEY1MXFWeFNISi9wZ1kydkhoVlRPa3g2Q3lNTHl1VXIwaHJMNmdOMG9XeXJYdlp5S0JJb2NQZ25obXNXaEgrVitITFp4dHM2czRNWDBXOG1odkpLWjR2ZGtrSXpTZVE3bTUxaVpjdzlUMzFhQ0hJYU93dWxPd1h5QWVwZ0Z3VGw0MzFSb3c5UHFnR2tPREJDdk9SaFhMSlM2T3VLMVlJRXRQampSMVNEVzFGWjVzNGJvUFlWWnRIUWdEYWlSN09BeSt0N29YUTZPaFg5OGVRTWk0akpLSUVIcXdTbWxaVDdiU3I3QXBWZEhkcExRNEx3dXFKQjBSMTdrRmR5OFJMVktvdjJuUGhEYU1nMGxBNDRpYVJjZHpSbEJOTXVBei9RMjVtMTdNM0pyQzNRRmRvcGdBTC9CR1k0cndOb1duRDBvZFEycU11amdEQVdieHFZQitUTU80d2QzVjl3SWpyYkhSdGZQRVVwOVkvUGtyc0JydjF3Mjh0YWtOUlF0OWszMTV5SVZJTDBZNEpmVkx2SE5Dek55ZHdHbGNvcytSVjZwVlFPZU9LSWlnUG9STU5ER2NEZHVJK2Nnay9pN21McUtNdmcxS3hzNUtoRjRaS3ZBVDdZTklFZHZxY3BNS0ltbVdFZXg4YUIyV2I2cGxKbmVFd3N5ek5jWnBqS2VDdS83RGxUSmRNZHB1SGRNZ3V5cFg5dERqTXR5bGhEcEZnSnRRSk0wM3VSV29DMCtIb08yWWZzdGZQeUw5a1FhMFp4TVVRREdCSEJQK3NhQ1FlblR2cS9MRXBycFBRaUJIMVV3ZGt2OXZ5R3FndW9aMUx3Z2J1WlBBRmlOaDJpSm5lcVZsS21JcVIxYmhsaFlsYmVuSVRJVWEvMmZxNXN4T05CN0JLZ0ZQQW9ldHo0SVdDREYxVjN2ZWRIVUUvWkN5V25SNEdZK0RPWkhCQkxwa3JlUTc0QkNjeWVkRlROQ1ptdkZmUUV4R2pvR3F1cUsvTVFaNUpZSGlQdHA2MTNLN2hJcWhnQ3c5TGx1dzlXYXBHS2pwYW12YksvdVU2RFZzVTUrUTNKWTRUSCtDbW1hOWdLWjNnNVlmUWVnZmYxQUlaZHFNQXZEbWlqeElNY2daL3F2NmU1NDRJd2pZS2NkUitlUXRiWFdCQXZxdzhIQjJnR0VsZyt6L2MzVmNCY3pBd1pQSG4vUXh2SFBOVXUrN0xKdE9VYmwvcXFINWViTVVuK2pWVHVJbFMxc2IvR0xXOEpzOUt4ODM5WmxRc09lMkgwNEZUNEptUVNMOFcxSzByNXpiblpHVEJ1MXdmVzhOVUUzWmpLa1NoelpPSmgyNDJJYUhudmp2T3ZrWUZYL0duZ0FSZjlJUzk1WWhaamkyeWk4TkVRdDNxTjg0YzVqL0VXemJUYktobE1XRDFXQndKUGNCalB5aWFzUG9uQXpGTmhGT0V5MC9PQ2Fzb1orek1nR0ZBc1JPWVpBSDVmM3lZRytNa0dUWThSOFRNcnlaRjNyYWJNOUE5QlkxOUNnMDg2SFIxa1BTaVlJSkZXWTRkVHBxTGhKM0RLemNDQUw4d2xxYldHcVRoOUFkZ3VyTFhLOUxHR2U5Uk40YXYvRW5TRjVjeWg0aENZYXh1dWNMK3NaSGhPVXIydGRjMk1yWEhoWW1pbEJQZjhiWW9iTXpZRUVZZTJJSDJlcWVubUY0Q3puMnpTZEU1WG9Cbis1TGIxZEFkQXpRaTFWMTdwTzF3NmI3WHVrZnN0N2o3REJoUnp3eDNmZkRYUzUzc21nMU9kbjJhN016cHErbVJxUkhJR2lvVTNCWHR0akJ0M0VDT29hdzh5NE5oSnEvVDhUTVR2SklGRThWemFhVzdoQ3dJV05UV1JKY0R3dFNpalFlV3dXb2EzU1pqQkxkbVRTbmh5RVJJTE5KcXFlQ0FTMGsrQzBqUHk0U0lBYnRwMEFJNU05YlZZczd0d3NIejdCQ2hLdUZTVVFlaVdZK3JiRWxrQzZ0ZzYrWWJLN1h1bnU5K1BRRkVLMUdSMUtTeU43ZmFjbWtJbTBMZ2RLSXhpc2J3MDRjS2x5QWNJZ0swTldTTG1WdU1iSEVSd2V4anRWYkJvemJRcnhNanBCVjV0ZlZDcjBnREZobSt0bUhXbkwrbElsVjZXajJ3TWFSaXBjZ3ZCdDBmekNsS1hSc2V6TkxPL3RYVFJnWEVxVnFNRmdYWHAzVnczaFlVSEoyTThhejdMblYrSDVIdm5sdVpUbW40dDdmcmJoZDNYMjBUbU1YYm9vSGFRdUE5dDQyQmJiZ2xaRDVwcndGSEdRZlZJbGQ2WkxvSCtrWmltWFlsRStRWTdCdVVkejRkTW1IZGJ1Q09RejdXb3d4L3ZQRC9tRFMwcGFkalNjTmpIVjBRUXpIbUtEa0t6VzJiVDRLamo5NkErOFhpcm5CRmJDWU1vMWhuSzBqK2JaVngzWk9qdEs5ejBJeTFwcUZvYXBBZlE5WHFIS0VJZDd3NjVwbVBPSENKaHJaNW5odWh3OHZCWjBrb0FIVE9xcXRIcElmOXBneTE4NnVUdldTQU83aUg1U2ZiMnFzMmExUk1rSkg5Mll0NGdRaTI0WXZ6S0g2Z1ZITVlqbEQzSGh3dC9BNnZpUVlaSjhOMi9zTFRkZ3o2QVd6QkpVbGl1UmdScWxaU042WVFraThsMUl0ejRqTFZTMlBPMW92TlltbzJZNGE5UzlVRmFCTVkzNUdBZDIxN014L252a3Y1c1NiamhRcVJ0TlI0a0Z2UWo0MWo5cy85WlQ2dzdjZWJ6cEljTDFpbk4rc01aWW91cy9tSXBMSEhQVmVEREJHTVl3bmJXa0lSSEw0enhQT0Q5bUxENGhMN0dmSWxOUEpQRFcvcnp2YSs4M29rSXBYTjZxN1JuQkdra0taR1hHQkZTbDAydTN1cFVwRzkzOG5hMm1Ub3JEWldibWt1ZXRUK0l1WXJTVWdWWEdMaG5LcDk2clVWRXplNE53RFFDQmJVbVRwTlFiMHJQQkVDS1J4bGprZ3doQ1NjcVl6MmUzZ2dRMnF1VnRwZzhHVDlmdDJqMnRXNTNzcmlDR1ZoSkdnOXNrS2lxTFlUY085YUVNVzJTT240SVlmelhJNVlRdGJ5Q2l0RXRZemNydzBMeW9GaUhsbDRJVzc2VUJ0Q001U3IzSnN0RmRjNlUrVGtYT3hEU2V1Mno2dmZoS0F0OStJR0dLREdnOTlBWm9TNXFyRm5LdThRK2JpeFVtdjNjKzFJZjk3cDJzOWN5TG9Ob2l3eGVabU8zUmFNUUM3RmxRSXJENzJteHhrVFZ4NldDNVlhRW1sQWNrSm1jd2EvWko1bStWZ0RGSjFod3RFejF3YzArZjdONEtlRng3eEl1N3BLc2NVRVUwSWQ1SmdpelhWTUF4eUFHbmtNUnRSVFNmcjFpMlo3L1k0RlV3M3l0Zy91ZFF5UTR5ZTQ5Z200YWU0OTB2YXNjSWtwQ014WUVzdWIvV0NhOHZqTkh2OHlyOG96Q1BxNDU3cmpIOEl3NVFSUlVzNGZialBSVk56TTFRU3RRamo2bmtZaDgwRm5XcHVaR2VETzl0Ym5kbEhhYXlJZExlT1ZyM2tFSFQxYW1vZkh2SUdLUSs1cmdiTlR4K01xenpaRHRMTkYvWU5vUkp1bm5YUUhkc2gvbDI3WTdIcnFzR1Z1S0lCK1Jnek5VYnVaM0dnMUlpU0dXcDhlUGtqeFJGWElMdlRwVnBkRGtlWlpjVFc4T2FwQjY0L211Rjd3Z0Y5NWRXOXhJRWtURlY4bFlxK3JpcFhFc1N6bFRqNkxIdTdVaG5WZ2pEbkFmMTN5bm5UM0FsK0NWUHpDYVpMNEVFZmc1Tm9lSkdxM3doaDRnbSs0Z3FLVVplVjBDOU9tbFh5YWVJU2JIeHRiN0RoR2t4Rm5KN0Q5SUo5RWF1cUFvdXg4T3B1cGlyY0dpOFF2TDFocTBRSURaR1NtcmFyaWJjNlNVbFJ2VkRhMU43Vzl1cVIybUNKT0tlN1NOdmRaaHUwakxrY25jajhOWkIxV2RqQ1dxeFZBQWJOcmo3VGFsWFZISjl4WldoNVhrRjBET29qNW1HVlhhZmd0c01mV015cnlwT0VKVXYwa2Q4UzRaT1ErNHd0aXdNYUswc0ZaVk1zbjlmYXd4WDFuVTFGYTJyMENqcDBrN1FXK282OUZpZ3VqM2t3UmNjeVNKdVV6dFRZcGpad0U1ZVNMc1g2VS94S1BNMWlyMjY1S1g0QVRjY1AwVXJEY241RXhBL25wYndvTzRVb05jWWZaTHg3UkR3N0FvT1VpcDFUdjh4TzFFY0lIOStiWGhwdEdWbGJ4bTNsUTl2cWdpRnhaYkJWbThyd0RUNXl6MU9Ka21EbGthTkRUL0Z4bnQxMU1QdlRpK1B3eWVXWFVtNjVNTEtndk1JUHBsYzZaNWJaNFlIQ05YNEpiRzlVQjNJY0MwTEE0YTljT0doNzN4MEIwdU54MWRORkVTeVI5M2NuUDNtbVNJaWdpV0hUSm03ZERVWUJXVVJ2Z2JWSCtpTS81ekI5ZDQxNXlQSyswSU9QMU4rejZ4d3g5SU95Y3pwMVYza1lRbUxNY0t5VVJYZzNwSjVDRG5leDgvWUlYWWNsamR3T1VzbUNLcCtRdDRtcGFRNitJQUdHb1haQmc3b0VhdFU5RHhqRmxBSlJWSmdWZm9WTlZaM1o3Y0VNSnE2ZG1MT2ZOclJuTTVzbGJWYnpaRVFtczZTdGpDQmM2RUl3QU96aDZVdHdHbHFQRUZNU0tTU2VsMXRTUzFqc3lNUWFhQkRpWjdhR2JMbVRHeDBMeFhnUEV1dWNXTVZ3eS8wVERMdW9FcGo5Rkk3dG5RM1BnbW9FcHBqMzhXUFZ3a3hpU01WREdkcFFXWFhsajhQVXNaanJNOFJuWmpuaVM5NE9TZ0w3akx1SDE0dGFCVWR4TjJSMjBrb1pjSFRFWDFGSjJETFBnZ2V5NkVTUTltUmhsMGpzSVpOOGYvV3JoY2tseXFOUitFRUdyeVNjcFE3M3dTNGp4SlpaRFVKZ1R6NFJ5NmV2VGFkaXRGaU10WXpXSUQ5VCt0K2UvbzVacFdLeWhNd3c3T0NOV1BsbkprbHM1NG5qcm1aa20vZTl1SWVuNGlhSjBLSEdtNXNVd09vUnk5ZG94ZWhtN1BEamhTODhKNHIvb0g3ZTF2MWFTMklPaDdJNm5ZcmNGL3JhTGxNSEtETTVmV1pGNm80czZodiswSUdOTi9BRmdWd3lMZm9WUWkzNWcyMWxDRGJnZ3RhY29CTTJIM0w5T0FJaU9ZdTc4c3d5aSt1YWlTbktPdmhPOTFSS2lyNmlJZ0t1TzMwVFpUV3R6cVJYVTVxcEtRRXRGT011Zko0QzdScGFXck9MRmpVUDNPdGhPN21GUVl2NnJ2L2sxUFcxT0g2TFNsU1hraHlvU3NseW8vaWNLckdrWFlkWFkwV0RGaGVmaGFVZVpEc21ib3hudEsyaFdaenl4YnlNNDRDdU1taVZtSWtyQldiQ21GTEgwbzUxbGZpM3d5Y3VvRHNQViszWkEvNkFhb3VqZmdEZk5vQ3ZyTlZnS3VQVnNkdTNjNG9TaHZaVnNCMUxPN1FadUJOeUFpYWhLMHJVQXhFQ0NwOUVnRUFmeTZRUXRRb251amI2allrcWg1UUYrVlBkTTJxSHRDaGdwK1lpRVpMbVYxQmFYeDZ2SVBJSGZtR2dSZFVoYW5GbGNLQXQ1ZFRDQzk2VFE0N0lRc0lwYUgvdVhFQVNwWU9ZTHh2dTNMTHRRcVlDbDBhd3RQbE5ZcGJESEpFQ0dtOVpnc0ZMTGxDR3Q4TUgrSytJVVdoUDdEMUNtZ2IraDJnSVZURXdKdmt1VjVGY281aXhYS2VQNDl3bktReUwwc0ZBWTdLZC9ISVJqbXhPTG5tMDIzQTdmcUdZejBuZ2hhNWloK0xyZ3ZLdWh1d3lGcnR1bzZodmx2NnJ0Q2I0TXYyTitJRUlvZ2ZxMitPVGRVb1BCY0M4d0hIRVcxWG5BNm1aK3l1SW1wSjlrN1ZWOTh5YzZoZWlxMzd5MHNaQmJBaExGdi9LYkJ2Z3JUMy92TzAxd2MzZ09mRkRuZkZrbWQ5eUZGcXFodEU1bU5PY0RFdVdUcUlmTWxjQU1Xc1BPTSt6Zzh1c0dPOTgxZ1I3Y3A4aGJ3RC9OWGVaZVh3aW5rVmRSdDdDaXJ0UzlTVkNXK0RnNGZyTjNDU1E1cGpOSjVmdWFybDRkMXFpeTdML2x0S2s0alU5a001UU5YKzYwbjRTckw0UGM5L2JtdHRXbi9ScmpTenh3ZFl6SjlnWjc3ZytsVmk0R2RnN0R5MStSK2V2enBnSFRkSDNITm1tWmtlaTBsd3N5bXVCK3pxWkluMFcxRHhLSGs4Zy9CUSttS1ppcWlLQ2R0TDVzbXJxd21vYXJHZEdhSkREaDBnZGYzdkJEVGdKbUMwaHM2OUJ1Rlg4M1d3Zy92NlJvS0hiTEM1SkhQVnRCakx4d2VHR0dENFRzOEpFN1N1MldKcXk4TGgwM3BGRFBRRDZCdGwzMmpsVzVza3FOVjMySThweTJNYWFEMjFqYi9SUVRDR1BlNWxxRFVtMytGaEQzNlZQTERZWjZYNmxwcCsvZitjMHRPWGZiRk9jUThOUmFHZTB2VUZ5MzRVTjlTR3Qzck9LcmkrNzRzUE9mVGtEYzNEVHhMWStGS2NNYnkzYWh6blhnYVB2eDlpOTVtNnlwSWQ0VDkwUnA5TWpOTEptWU5tV1BsYmNxSHZ6WUQrbk5kS2NxUTNuMnZBTkZTNXExZnh6a1NoUUdVazV5T1ArNUlHWDJHRXMwNXZseHkwSG5SZnFISHJzVEQ5eC9LdnpNQ1NuYWZEaXFXYW5Gc0k1ZmpPeFpsVmFzZGdoeWtTRUh2b2EvMEJzYTJVV3BBNnIyMTZzYVBlWTlGWWYyb3o5bjRWa2lrRXYwUFZldkZkYk5melRteXcra0xpN1RPSEoxbmhmZGdISXVxWUxHSjRsaEh2QjRUcmVLM3cyelF0ell3OTRFNTNvMEw0Si9iTWRtMzVaUHdUVkJOeGp2b2pKakFOYTJxemFoMWxjdFVEc0t3RnhjYlBsTTJmbTlRL3lTY2xqRDlpL0N2Nllab0pmUEQ2ZWdoeHp3bkpjOW5GUlRXelVMcDkyeTRBNVJlRk16bzZtSnBqVk51ekVlb1FIZjFCVG1WZnJkTVVjbk1pNGlXZTZrbGF1MWhtZFhFVDdla05EOEE3ckFReSsxc2IxMHE1eklsbGxsYWdIa3JIRDBzZVp5L0FiYzJvN05pS1FhdlBFbEhjY3FuRzlLS0I3a0NhTTN2VWJvNWpzRk9tOTJRWU51UmZLWjBOdVZ2dHZrMWVldUhlN2JKT3hPT2ZIMkFncFpla2QrRCt5Si84VHgwTjFiWGplcGhpaHlSSFZ1QXdJcHMveDNJMlVwU0hYejlBOEdPQ1VPU1d4cnJlUEVoT0grczc4Q2RidmlaWHhYOEJtK1lwQkNPQmpVaFhycFBnNUYxU0ptRDNqUk55TU8rQmtyNk5sSUVidng3cDRieGZ2bWJQQ1NCaUNYQm5DTFhCcTdNd1I1Q2ZQNlhoNnl0NWQvSUlHbHlsaDVXT1JTckNJVGwydnB5cTR0c3ZFNm1Ec2Q4TWFsaFdUWVJlRVdRNHVHWGdPdkJtbkU1U2t4M2NZbEJWMzdrRVVDdlRPb05pVHFDMGF4R2JMS3dzVUxncnJhOGxGcS83WGlpM1lhc1BpaUswZElqNjN1NkNISG1NdWhSWUorUUt1SHJmMUFjTGd2U1ovNGo4U3ROaFNFbTZrYzRMMWN4Umk0QmhmYjh5bnA2SVRIUlZtUG5wUnBKNld3NGRSWGRxeC9DRjFDQ2UwYkxLOWFXaWxpWTdWbUVRdzBqNS85cTJ5RnBZVlg1VnBjcUtOZkJRVlR0ZTh5U1VrMlZhZGd1eStBYXBmUHBtVndTaWV0UGliWjVWNkliSmpvMUlmbWl6eVhpY2poN2FDdzVGT21XZFpCdUhIVlVFdkMrV3Z1a0UxRXZiUFJTcTNZVHdGOUFROUZQTVJsUk5zbDFjQWt0TmV5NExMbWIwNjBhQjdjZ3lzRnQzOEJqZEZIVkFQbGZRVjhnYWlEQ3hvY2lRdXBoalBzdDNzdzRYVURVbllKN296VWVQWThyMG9UQ3dRVVdpS3QwVkZ6bkhQSWd2WjZ6MEpwQTY3YytZeDV4VUFnRWZxRWFNSmdHYzVvaXE3WWhaZUhWNjh3N3VVb3plTWJRSlZmZTBlWStOLzZxWmlPK2RDc2Q2WGNQSEVNOUxtbWVScklzR0pHK1IzQUQwQzRzRHBGbmZ5OS9VZ2htc21acER0dXcwbmxJWDU0czJBTEVlQlFMV3JPU3FaTk1vM2k4QW9TWVRtKzJQbGNFOStSQnRSZWlHaGhBc0RLY0VzUkl5YjViOVo5bjQ3bHJYZ3FlV0IrTXlTNnVpVGN5QnhUWE44OEJiUy9VL2dLQ0pwZUhkdVVSMHc2c1h0cFE1dm1WVStSbnh1VVdOWGliUi9DT0NPeWlHSU56QkRIYlpTWkpMNVF4U0M0ZkQzVDY5T3ZlYlhlcTJOdTBZcnAyOUFSVFRhUmNVYVc5d2xhRDluZ1FwVWlvRFM1KzdmZk9aa3JSa0MraHBoTERna3BteE94RmtmSWtTQU5tYUl3R2x2aUVxaEFSR2JRRHRYaTZFckhtV2h5VjExWTd4MUtCaU1CR0R3QllpaVpBMFVyOHM0cnFIMXM0a2xpRGVKaEZqd3dBUXBPSjNUaWhNeDBnUGRzWGFvTGlVY3Rid1hEV3ZsR0RWMWRtU0tuZUZ2TndmZzlMbkhqeG5tcUlJVDhDNnNEdlFyclZVNmhvY2pxeTVlVzMyWC84cHVLMkdwdEVEakpVWG8rcVRkdVp2SnBoeTBEWG41YUwwUUdFMnJEazI3MXpDaTVkNTVEck52MS9HY1NKVU1ScStsKzVRL2FVMnlJcUdZOGNNR29qdUFxc0c4bk5ORDdnUW04b2FNWGtaM3JTck9udnlMc3lGK2FYRGpOc0xRNVk3L0N4TTdZUVk1NDB2amxVajJ5QzJRbkFIRGtZNEVFaForTjAzMG1jWXdMU2xIMVZMTTc4Q3VXNjNuMUVJbGpmVVlaT2J2VW1XcWlIVEpDQVZzOGlCK1lRYU1XaEIwZmlyLzQvVndNOU8xNDVLYkdEeExVS3RwYnQ0ZDllVzcxUDBGSjNoV1ZHSlRudHY3dnlOcytJQlh5WU43RlJ6VkhQbkh3b3JuOWV5c1BpSmg0d0NSOGV4ZXR1c0U4ZnRjU20vMnpIN053cFoyTnBiU2lDblRrK1VzVHFUa1gwd1UyRXF5UW0vMGNwK0tPVk85MkJFRjlkSnBNNmpaWWlpMUsvUm9yMHpsZXlsYjdRa0pWUVJCTlpOblg3emVSMVNCcVlZbUtZWWtNYmgzeHJwK2dSa3gydm1Pa1RoUGxoVFNOcFMzbmN4c1h5UWhGdW8yUjZUZEtRRzJaOXd1bTFHMnc3MktXQk9UbnZBc2dwc2pCSlc4ZU9VSzA1WEtoR3g0dzFGV29DdEtneVk3Vk1PUjRRWW9oNDRHc05kMC96Z1U3dWRZVFdISHFjZnhWNGxEWjV0ZGdYSi9JenppSUxweEZ5Nnk3ZkpUSTRzanV0MDlRWG5kbElCK1IyWFUrU1paVjBmWVJMQWg0UVdiTlBmMGQxQ0FBYnJIMG5McHEwdm0raXRHYWpMbmVMZTRMc2NWYWM5MWRlb3RvbTd4MXdBZFI0QU0xR202Z29mTURHMFhYb0xFTHpNQjNOVWpzYitnK1RGMmQxVHJLeWlRTUZnUGU4bVNTUXN1a3EyOXYyUGZRV3liU2xIdlJsb3B4OUdTUnNzdjU1TTZ4NGF0RFJWdzhLUldYYXNvWk5LY2ljWTZxcXJsaHhROXJwQ1J0WUhQTFpuMlpMVjlIUG9oS0crT25ySDl4SGJKZ3c2eGd0VmFvNEpOejFIWDRIZnJGRFJhZnU1T3plMnY3OVNUVWxwK2h2OFJtdlpvWWxQMFk3OWErcXVwOHJkVDdPeXdrN200c3luMUM1QkdKUEZLMDczTEhuRnNiWVJ2V0JNTE5mQ1lDa1hJVG1qN2dySXdCNkFpOVpZbEExVXNueHF3Y3VQOEYyV1FGRzJYSHFzaDkxdmlRUWVhTTZGVzNOT1R0UkIxeXFkV0RVakRjWU5hSHhnNmJnVzM2QmFGMm14NFlkbFc4clFZSTExeWNlQmNuVDNhdGNsZHkxU0VNU1NaVS9vTm9VeEd4U0xzNm1NY0lVVVV4bERyeHpOcXo0WjR6NlhuZm9qUURXZUdZTkJrOU1oaDkvNmN5VFRLNXZLOUFPaVJleUc0L2JUcnNwaC9YU1lyeDRGQmRVSUpzK3M5Q3FqUW9kY0NsR3prRzR5SDIwNUc0NkFPSE41dFdDa1RHVThVMU15endQMnRrcmFhajE0bkZpNUcyS21BdFB4dE0xSUhQeUN6OStNTlBHRTBkalQ4RkFmUDZyUGllVG5iaWpQK0dLVEJ1NmhHL0l6dHhZWFU0Y3ZHT2VEVnB4dDNTN3hleDZVczZSMTRwK1FuaXdyK2x5RWc4cmFwWE5OOHNqUGpKeUhlTW9QS3RoTUNJS0pJR0NGRm5RR1BlcTgwQWFnZlY1MG8yWlh3MmNkNitaZy9oN29uc3BIS0Vzd3ZMR1pCd0tCRmRySzc1WWV3c0xQUTNmUlJ5ay8zTk9IY0tuMWZzVkorRmJYZjRVWlRYbWZVQkxWS0h2UVR2d01LejhBVVJsVGQrNmxxWmxpd3pQMkFaUlpTeGZIY0hDRzVXN0N2MVVtQTZ5dUc5T1RWL2VqcVV6bmJKZHkvbXdXd1ZkdXozZkp1SmY2b1RsRyszNWZORWRLY2poVzc5ZXNPOW9wcEVVSm1TODJPQWt4azNaZ2lWbVBKZWVIbHlsNUhGcGpLdStVVXhwRjNHT3IrOW1uMmxlU0dMOG45Smt5cEdRazRVUlQ1bS9Yc281bFBUR0l2MGs1NENQeFJVaEhsVllVRlR3OWtxbjR5SENOK1pIYkNKT0dnUVZua25XaldGamw1S3M4Y2FGTk12dGthNGFuVm43bFRrT0ZKcllFT1hjWFJNRnJQOEZjbjZiaGlRVGd5ZVlXY2V3NVUrVnZGckxDQmkxN3A0TjBodWpGRzlSQU12OU1XWEhCZXlhM1U1WWlmU1cyczNraVBmaEVEcG9zcEZlSWFLSm5rV3RkeUtDZC9RbitiQlRPOVA0QTNTTmZucDBKMTVETVFHMVhRV0ZidGM1Q1M1R1VqWGg4cU9xNjVQeHpEMUdHNEF2cm1GYUZQRW9WbEZWQmxpc1BUTmdNK3ByK1BMTXcwd0Y1SXB3emhlc2V6cXhmSDQrVkNLYWlKazRJeDNSQjNtc2t0VWZ1cEZBVi9VeWhsRWlQaUczT0R5Q2tKbUJuODN2Rks2OWhDNDJMZFFURzEvSlpiZW9QSzdOM3NKOEwvNmp6TVlsUTBPT1J3bUpSQVZGVUdwTE1QZmVGbTVuTVUvRk9LUHRHVzJoOFRlNXVzbGFta3NKMU8rNWk2MEF2ZjlIZ2lZSXdIbVpQTnBJcFRsOS9TT2dwZXY5cEs1ckVWeWx0SGJDTFdla0dEaU53b1RLRFZMN3NGSThGd2VzS29kRk4veExYb0xFRmNyTFM4cTlVZUJVMmlZSzdQeEQ2QWw5MjYxY0lUT25pR1JmQmdkby9pVWlBcCtvRmZJc2wrb1NDbStOSU5DY0xwdldGYXIrV0ZBTHZpa2RuVUV4MzNiSHh6cWxGUFMyWmNPTHhmV3poZGFYWEpsL3NTUzNXYlY1OWtLV0NKcTBtQmt3dGt4YkZkSS9TU2JIdkJGcmtNcGIwTWRzYWNaL0ZGRWdRd0UzYUdOREF4STJIaFJkYS90Z0FxNjV0c0VjQWxYR1ZJb1l4dS83cFJvVXdZeG5reE1ocEpwVFYwSVVCZDhNSVNENnhkRGphTE95M0VNWWF4VURFamY3NndJS0l2S0dpUzVMQUxJTCtCRSt3S0FnSWo5TVM2cGdnUVdLcXpjWDJSWW51SUJzaUt0Zm0wMVJaTDlnUHFBT0xrMkg2QklQbTFqWm9vSUhtVERzZmlPZFJPa3pDNXVkenN2NHh5b0hTYXRuOHdUZXB6Z0VqaGlwaTFhQzkvaUw3Vi82aG51OUhFOFBMOVgxYTNkaFY3Q1htOW5vRjhjZ2ZJOUUvMTJndTE0cGUxakNhR0wrYkt4eERIRHdncXBYbU1oNzB5QS9taVd4WWV4cExTdGR3Nm9UQXBzZWVkNWtsRXhzRHBvOGEzS2NvdThDcGd5QURNdTByUTg1Vm1ScGpudGxXTnBYQUhOYnp2aVpWRGQ0OXZvU1FMbG53cVgxdEhOZlNPaUJxVEFobDRVZFRHMTJIU3NPUWRDU0psOWF3UzVDYWhXUU5uejVWeC8vVi9DWDFYWWhNNWxuWGdRMkxxRUN3UlV3YmNTbmZMaTJ2cS9rZ1pGYi9wSVBTL0VaeFlUQ2Jwa0VHRkc3VXZyREd0M0FrTENEQ2VURlhmS2htSUoxNXBZSkNzZnVWeS8rZnNQVnlTekhnMTRXeXFXR09ZSS9WQS84ZmozSGttcFc3Z2JZb3ZwaW5jR2dPSlpNY0VrcDY0UXF1UnlTVkhUR2pDUm10MDJwVUh4NS9BS2pMbEFCcWFLZ2hKZXpXYWxlektSekhFS0VnV3UvNTNmZVQ2NWdQMFQyUlR5d2J5ZFd2WkRDK0Rzc1VsYWRPSkVSekY2ZFlMbDBwRUFDVEtVNGFWN3FPV0ZLN3BrTFVBSXRXTXNHcnFTRnVoaGF3U0IvOUk3UlhmdUYwNzBxRzJnV3F5b2JpMy9iYy83RHQwNEtBR2xlSlpCRjk4WVRrbEJkY3RzeUFwelM4b1pIcXBKSXFPTWhtcDZYMTlYaEVqb3F0TS9mN0hHSkV3NUZUSFRJQm9IVXR5RXBhYjJNMTNHdDBaRkQ0SEJSQXdsRmlNQzR1U1h2L05LWjJLdjVsaWhYZnZwVGU4clpzcERkQTJRRmRMUElLWWRpZXhjYm40UUFtZWRmZlpTRmhDRGxlMmZ5My84aU5VeUdaSWkyYUo4L1dmYk9rVXhRb0ZlYzdQa210eERvYkMvbmt6VlRjZXV5Y3RNdzZ1d1pjTzZCWUE0Q2ZYZlBpZ0VLR2lROXZBOUgvdTJoUmRySzdPMnNENUR0Uko2OFZYaGFWR2ZnVGdKY2V1OHlielBnRTZHVmpIRjkxaUIwK1NiRHRPMzkzTWk0MTR5UHlFRTNTMmUxMlVhakVqNHpaMVo4K3FrQmQ1ZkZwVGR4Tmc2MEIxSXM3VVpDRFlQa3dETVVuVmp2V2VKVThrSTd5SWQ5clVzbTNCWmJLaHl6bU5zWHl4RlJ4VzVzRzhHdG5FSGNlODFsNEE3YVhheENjem82c2F2VTA1NE0yTzZ4cUpTL2JBUWo3aGVvdFRRbWoxVG1LVWJQTVFjNldSVXlIVTVna0pvK3p0NjlsNTd3bVVubW5waVZhNlkzME1CWnJ0VE11MmRNa2hOWEkyVm5hRklra2JaKzZMekRBQ2hpV3ZENnc0bVMzUUVSK3lzajNncnVEMnJQODVHZVRqZG5TbUNhVG1NODVjbnZPY0gxVEp6Tng2OFhFd0tSRHF3MHFzZGdkK2hkaVk0OHY0dUpoMjUzR0tMUEpyRVFpUVZaVEFOb01lSEt1RUl2aFZVQjJBWkY2RG84RkJPUUE4cE5zN0dySFcxcWsvQmZ1aDZtampQV3hVT0tWVURYek5sTUNtVHBVTmloZzhXSWllSFp0ejJibjRtaUpLLzQ5UEs1Z3RMcjBYMGJ0d1Aya2UwamZCSlJreWJuaXBieTI2WEFSN2hGSWM2a1paTGtreHJ0dmRRWDNWaWFCZWg4QWxVTEFwY0QvcW1oUEJmQ2NiL0JCOGRYcCtuUkRuM2xPLzkrd3Y5RDRya2NpM2I5M3kyNk1TT09SbVQ5ODNZM1Z0b09jaXlVbVJWaThoTkloa2lPOGZ3djczYmFxUEFScUJDZGNnZ0lFMks5YVh5S09GdWg5N3lFbzQ4a09aYVJMTkhQM2NDYi9PZ2sydmNQQkRFdE1DTFRNck1JNEZxelV0cEl5eUVFRjdKTnVYOTBNNnkyZjhXcEtFdHpwM21ObTg3K0lGUkttSmhYbjFaVmZWd0VVREFmVlY0RTRvZXMrdmlEdGZPVGVaczIvdk1jSTZYbVJ5QitZMzFSUGk1R0hHeDJVZUhzRDdvblJpVnZIdUZRSXdKN1NtQllCd3JhU05Hdyt3ZC9rcERFazh5WFowVFNoUUZlNldaVEhSTy9jQWdOK2hiQWdNYVc5QWxmZk10VzBUWjBjU3k2RjdtbWpxYmRSNFpyWTNucjZjWllFaUsyRFdVWFI1L201K0pQQUlwdTRvSjFVV3YzVnl4QllZcWtJWnFxbUluUVY2ejAwWWVOV3Q0NHVVdWpmUjN4eEV5TU1EdUp1aVlHTlZwc25QS2sybC82b3pKUGJ0SVEzR2w4NmRFTEZjNnQ5VE4yT2IyYUZGbTBLb3BnR1Y5YTFrdXdWZ1dETE9ldVY3YklYM1pUT1lScXl0NmM3dlpmQjR3bGU2ZXc2Tko4UHpUL2dVZnhYd3g5RFpMcGo4cWlGSDBxNTI5Snh3VE93Q2g1cFBqclh6ZUp2VFpwbUVsSzgyYVJ0QmFJNFB4MGc3b2srbi96djIrYjE4UzQ4WjRtM3gzWmVnSzJsMHNDZTR0SWhPZXJXM3BHUk5qWUVRd2E1dUhVdVJGMnR1NkJrclhZSEYzcDMzSXNFOVN6c2VBcVBCWjNsc2NMSHk3dDJ6NUEzSGs1UCtuQmFzNUJTVjZBVjdJQ1l4WU95LzE4YTU1NEgrQ1d3MGxGdHpwL3FlSnZGL0NEL0VjblVKQUhmaHdOUkRFM1k3cFJXcUFxMURDajF1cGhMQzZkOFBucHgrcE00TWxJUHBQV1dFMkJHeEZVT0xaZEpJVlFsTlZQOWRBNUFCd0Ivc09nZlQwT1NFNkhVK1NyZDFscnpVUGdNVGF0bmFQQjlmTWhEWWVPWFRabVp2SDlET1pKcmNWZm5zNGM3eFliT3IweW8xYlN0YmhsN3VRYU5JRDQ2T1kzQUhraW9mbHhRM3ZNME5vR3V5dmpkd0VCdjVLNm1PR0hhaGRHdWtTWTJ3TmZmUDJtcjcxU0U3RVJaSlpVZFZNWERaTUZaWGx2SDFURWI2b3AwN0pURDNOc3pPaEtNYW1FWlhSem9BVWV3RUpGYjhEb3U0VEt1bTBjYVZvTzR4bHE0Y1c2aDZjQW5pRUtYNDNKM0RqRE1VUUxOQUlmaGplVUFWNUw3eDE4em5tc2NhTHdzY2p5aXp1WW1hSVdpV1J3OUtYVm52VWJyMEJ5dXRCcUZNdDgrcStLTndxV2s3ZmdIbm53eTQ2UXFKalp1dU5NdFliWkNWRkduTGRSZkt6UFcvRXQzVEFlMDVjV0dxY0krZ1JSeU5IR1k2Z2dQRC8vWFVUUktNL1NUWUhNUWlEVW9tYmxDNDNWV2w1VVFIMnZrMUEvSHFWRk9zakhQeUthOFpWVzJlS2xSOVVFcGJYVWQ0eGc0bDFrTmFNUDlTT0ZTcVZKaWcvTjVhcTRqQ3krQ1R1TTNxMVNpOHlraTBoa0RJR1hKOE9YSkVFdndyY0VBUFovS0dYRXB0VThBQnFlYmNRbDE3bzFITnVBQ1dTcFRBd2w5MU5XWHV6RVFrOUt2bHMrdG5JWC9WK2ZiYllKWHk5M2VwNWZSQXdtMTBhbnk5K1hhSDE3VTBVNEs3MnZMSTJIVDhnSGx1VTd2S0c1ZGtSdHF5amxZWVh0bU5PRURWUitnRUZLcTFZbVkxUEdYRjl4ckVNcm55OTYvcGdiWTlaQ2lSdkkyTG04ZHpYUDhrMEV0djB2d0xNZVVtalY3ckxHKy9yZWRLUWg3T3ZuSGgzOXU2NCtEVzk1akdJTXlXUXVuRmM4TWcxSTJRMEwra1BPemN5R2VCS3FVSmhrWG16SHFNaXFGaXRpNS9TTmNQNVRrWm5xcWdqeVBTV1ZOM2hnTXhNNVFtNnJVMkhLeVJqYjJiRm9mcFNLWEg4ZW13QW1mbFFMS2Ivbkl1WXVqZW5DbHdDTEk0L2JKL0loTkVPQ096SG5SZkJNNFpTeXgrZmVsTzliVkU4TXZmTEtKeHRQVkUxRysweDYrRjcxeEF0Q1BYcGlpZW9la0ZnelZjc2RjMENqTkFuUS9aTnIzM1ZtcVVBdmFTUEJuUGxvaEs3NmwwWmx0OVJUODFONk01UWVnTE03WnJRczZMaE1TQ3pDcmJvZ0FRaTVIb24yMENOUzZ5RUptQnhySTR4Mlh4a1VUOXA0czZob3V3YkozcVNDVkFWTmUvbGFRa0FjaEszdjUvOTlRK3RiNVJEbGRrMlpGazdVOU4yai9DTWZXY3NJa2tPZm9MRUhLdUNUMDUrNXQybEdSMmpOV0JZVXpxQ2xiZnIyU2Y5WkpvbE9nbGlSQjBqY3B5WmkvcDZqT2lKM01JU3drNGRCVFRBN210emhzdjloZzMvekgwdzN0ZEptU0M0RjZxTzNCbFhjVit6TVF3OWF2bnZvaFJaRitDM2FxWTZXcWZ5MzcrQkc0aVFIb2p1VTMxNzVJWWI3NUR3ZC9ucVdtWVc1aDlXSG90aXR6MXBBS2U0K3BhSHp0bnZwRHVqVWRHdnFvalhZdm1ENERyQ3dRVGNPZzJVWUxZMDAvbk5kZGRTK040YWYwYVpCYUo0aHR5Y1RxZloyWHNXV2E2L2lhSkwvWFB4WTMrYm5CVjI2YmtndFBubldwY1VhSk1UNGVNNFRzSTRkRkJwb2YvYW92eDQ5RjlPcEJWSEEraktUYTBWSmZrMEl4WlZ2T3ViaXNBeW1SVXE2bk40QjlFK0NJcFZHVGd2U3BJK2pRWFUxck1ZbE5UeXBsUmtJRGQvS1dMZWZhcVFmUlRwSERDa0Mwbi9KU0k1VTFlVmxZNkdhVG9Nc0pyS3lkV0crNHRlUmJELzU5ZGRvNDdxd0hXaDZMN1hFRzV1dVg1N3BkM0xWSU5tRjg2Wko4QzFPRWZSK2MyUG9WM2NMWXFpbkJKQkZhVUlGZUtIU3FveWl4RkNzMnlhRGRQb3N1T0EwQzkyL3ZJNXFKZUZPWHJ3QVY3NG9FaVRab3Y1cWMzRWhTd2xEdFpoR3pPQXh2REpKdnMrUndmMkFHRzJuWVpPdnB6ekhHY21ReFBROUtMTi9RTENDZzljRzdnSEVSZlJKdXU3U3RiYnFTWWlkTkhBcEVoTDUyWW9LRlo4K0tDSjlWTExnbzIxanJraG1kME9CZEFUVC8zSXplTWhVZWYyenkrNXNnbVk2Qmw1bjBoOHR0bkR1VkpyQjZNTkQ5UEtmTFBKeGVwU0Q5ZHpEZ2NxN1hKcVhqTktNcFd2MXBCTjkwQnJkVmNNamdjVC9QUm5TR1BIbTdrUFFDbkRaVHR0aEpVM1FQamdlUW15SXVGeThoODhvU2IxMDlNSG5UOGVQNVpTZUwzSzNrTzlKK1VNOW5RWjVwRG0wVVdRelVvQUdSUGh1N0tlWkFpYjFmcTJuNkY2TDk4SjZLZVVsVWJWRWJSQml2N1hVZWtweENjdkdEZXNRYlJIdXlkV2xxdER5NVk5OFZvWTZOTmlvbHA3WHk0bUtzSVg5andvLzZRc3gxNjVTYzN2QnJHREtnbUZPL09yRE5GM1ZjR1hhU25qWE5OblA4b2JEY091eTZKNVEwUGdPZ0hrampCSVNPMk5oNXVQdHpTYlc0VWYrb2lianNFOTZCSHNjcXlNOWdReGludzN1eTJQakxSQzYzRjRPYlB3N1J3NDBwN21lNlRVekZ0bGFVRUUrWE9TT21nNDNXbDBWNmlFVkJqRWhpVWhWeENiUWFWRW1VV1pPR3FUREVSdmJGbUhwWDZjeDJZcUIySFhnNGdadWVrc0ZaRmlLck0wclVmaTQrQUZpRmV0SHMyb3FDZXVlTFJ0aGU3aWdrOGxqSEpaZnU4bWJvNk01RysxNU9tSnQzVHJLaHo1enFnMk1RTnE0VWcyTW8yZEJYRVcrRWVQNHcwS1NzOWdsS295Z1BFVnl6aUJaMmwzNHQyY3c1aVVJQWhaSEdCcENuK05DaWYwSFBKMmh0eGhSTVhyS3c0WkI5VXEvVkQ5aVE4M2JYYU1uTmhYUmdyWnFGdHpzWTkwM0x2WGppSWhlc2pCTXV1ZWh6aGJ4cE1EMjdqWEk3dGhyVXBwemhXQllMWlZ0L1dNRmlISmFxTXZrcXZieFFBSXEyeldDUGF3SGQ2U0pKVWZ5SDVhSjhaUHRGbmNkNnROSEhTOHFmenkzQkJwTGtNMUxRdWVMQXZRSVlvd1lsOUtWNXBRWEF2eUlZa3JlU1ZYMEUyTnpTdDNhTllFT0p1Sm9vb2xUcjBsbGZLMmgxZU8rQjhoVW1mbEVzRFhlaG0vYVFvd2JPZnA5TEtvd0lZZUJsZGhtakR3V0tZL2t2UDVwd2VlTFNEaG51VWgyWmIzbjJxMSs3RWk4ejI3L1ZHTW5rY2d1alBnVVp3dzVMNmZPaUhWaGVPZnRhWFFiTnZsMXplbWduSDlrSkNzeWZkZkY1UlR6eEI2dzlyS3k2VlhEM3p6enRaU2VqMjVQYkpTelpSV2lYQksrMlVvQzVaUXFtR2R3aEViL1FFcHk0ZWdqNW5lTXB2UFpXNTF1c3R3Y2VvMEtyOWlMUlczMFdVdFpqamcyQXNkMlpHclB6TzBqY3Mwa2t3Wmlyb002aU1mOXovRTNlaXFBaERMeWJDNlBEd2pCc3AvalV5N0tpZHN0bGtIbkloN05ucmkwdk5XdnR5RmtEVnd5S0FFT2grRHFteFc5dHJDUi93c1o1cjd3eUwrVWdNcEZRWlZORkNTYUtoaFVoU28wWUxpbjB1SXBSNkRqaEdJZEFLQVlTc0pBb3VPd3k5S3FRYVRHeU9JcDhySkxBNXVjaTlydzZmVktzNFJhN2dZVDljakJnQWs4ZXozV0czRUlvbkFVeThRVkNtS0FlT0N6eDA1MXZVNm9XQ1VIU094VUUxVW0zc2lFWkVvSmNnWXl5eDlMcXpsZVV5YnY1Wk0xWnJFUHZXaXNtUWFiaS96T0pTR1lTa2lodHFqSkxEekRqNDhOdVFoeXprM0owZVZsTEg4bzJsTzd0RU1nNmMwZTRJWHdscjRBaW45UEx1VDFpODM0UWQ0dXdwT2dJQ00ySXFOZ3B2TjBRaHNocVJYVWkxRXBGcFJWUzlCNHVsTXdrSSt0cllteGxpVGp1Z1Ntc2RNVEpiRVpSQXNBNzFWWTd3NGtacUZIYWwyTlhJajQ1c1dyd1M1YlBJdEdJcFVBWlpwUkhrallGOVNXMTdNTUppcVV1NW9Dc3h3VUNmTlc2SFJEK1BreSsyTE5rTW9SYzdtajkwczlGNWhTMUF2UjErdndIUkwwblVLOFVEN3NLUTNxaThNSVVVRm1MUXIrWEFVRDNralZtZ1FWbk50ZDY3UVR2TkFxR3V6VnpXVFlsL0FSa3RiamR2ZTUxTHErRWlFYmFIYzJVdWY3V1dJclZKTG56aUpkMVNLYm1JeFlKS0JXN1AzTG1QSm9LcGpxYnF5R0xXOWcyQU4vTnlESWp1cVNUN2RUazBveVk4WkhaaXJDYmM0YXZrWnp6TENldFBHK1c2UTJZdkdPSWk2V2JBbm9FUFA2eVJxbjNvSUo4MitvUU1hUnlYOEtXMGVHQjNzMGZNelBIckltRGRCaTFDWWxSL3hKNVlyQmpGQ1l5YTlOSngrU0IzbXExaGtIN2NUYUg1S2I0VGpRQW1RVmJDR0d2NEtvekZ2WnZBN0Yra2JxOE9mNzRhMHhZUW5PbVExbWRkWlJXSkMzWGtKZ0hOWGl2czB6Z3Vhc0RVQURMRVlBc2V0Q09wczIzVGg2cXdIQ0R2V0dRdDRpNFFvTnRJbTBIVzNJalZKdFR2UHdhWndRcXdrYXZzdFBwNzd5YWdmaDcrMW1STERmRXJHWlpwM0NsUi9mQmpOL1c4V21YelZQM2NBYlg2OGsrOC9EWUlGUWFZaFpYZGh5UXVoVzZHTVFkMTFEZHdtZUpjNE1wV2FZczk5V1lrNUYwQ1VWWUhrZWdhbTE4dXpibldNK05CSEVuTnRGZ05kRzFSNmc4aGtVVldKU1FjSjlDK1BHb0ZwRHVQU1Q4R3RpMGpWbkpkL3ZXbFpJTXhWVXhwWExtRXJKNkxrbGU1TlI2SGJjRTB1ZHk3ci9TdGY2QzBLR294OHJMazJ1RDBIYUdxSVo5S0V6bGx3bEZMNlc2U2tJKzVScEk2bzNHQjNSc3pEQldoR3YrMW0xaHVQeUdINGdjMmJxeFZiSXdsRGx0b3BCUSs1MUhjTmFhTWRqLzB5T2dhQkVlc3Q4TmpIeFRXUUZBWldVWDBOK0JIS0JFUGgwTk1Wc205aVNsUkVLS2tGbTEwc0NpM2YrM05qY1g3Zmp1cU5YVlVIdTloOTF4MHczUERzb1dIdHFHVmV4M3ZQajNRcGR3dWd4TE56SDJFVHphUGxsRlRnbXc3QUFweXZ6Z2lKbFpGS2pFZ2dIUVZCUnN5Q0JBL082RXJ2MW5EM05YUkNLaForMjZyRjVORElIOUlrNnM0Z2pBU05wMjNZSVR5UHd3ZzZDQ1hsaG9QQ3RRTVo4Wk5Bb09JZ3JmaUQvVTJSdExEUzVlVTBRa0krWDd1aGRwdDdtMitjNkhNcU9uVXZjQU9mRzBQTjZhTVBKZmdRcVJxbU5WZXR6c1IrdEpoZ3YvWkZjaGtlU2Vkemp5a25ScFZLek5VbGRVQVdMbFBLTHBKRnNOWmVxYkJPemFmWVZ5QnVLYmFtQkhybi9DbUFiZkw2QVJkRHIrTUJiTjR2THgwaDYrNEI5eG1vUFpMSUpSOTl6SFE1b1FaSnljU3RLeTQ1TkgrQzdLdE1sanhVSTlIM3UrTHFhNVhsTTA1VmlmeEpnUGhUancwLytoM0c0dHI2UG9BWGN6Rm5pTFNKWjV4ano4T1FPKzFjcWoyUml4QTdVRzgveXd3aDdwamJXM21KNXlpOFFpV1gzODg5UW1iRndKV0NUU1pYdSt2ZmxWcXJXblJTMmtyY0tKYkdna1lhamMxUzlvVy9IeTFSb2tvNGpqMzIrL0VXSlQySDRqZFVrZGs0M0QwdFVIdk5vWnhJS0dvZlpQOFJPVFZtbnN5S3huUTg1OWxTUFVlVTJKenAwbnM5eWM0c3g2MlM3U1VDMCtaazlPdnp4RGJNZW45WWVYbkNNL2pHYmw3K3NmbTE3aGx4VFcxZmJiY2lVdDhLeXJSSFZHSXFZQThMZmV4a0pwTHN0TDRDWVVxNFdidll6RUlnQnFEU0hmdnJEbGRDWGJZM0w3ZUhCOHZ5UE16alVLT0x4Yy9xNWF1OUxyYmx5RWlkOHkwOUV1dU85KzN3YkswQ2R5RWh3d2FRa3lFbU5zNU0raERrVjBZcWRJTUZiZWxoTkFnREN0VjF5Q2djUmF2NUVhOUpUbHBnZDM0c3NxZXRnaEpLY011MFp2YStXWWhtaUtXNVoxNXFpMDRoT1ZqK2JuNGFUR3dzUlFhc0t1T1ZaSWVHZnpmVzc2eSt5d1pFKytadGFFbVdGT3RvYWo4SUhTOHJtVzRUNXZwSjllMnRsSFkzM1R6aG9MRG9YVk0xWklaZ0d5dHFqM0EvelR1Z1BCUnZlNEJ1dnJETndub2FrUjg5c1UyckF4Y2JOTnlpMmpRb0JDZzhhSENnRmd2Sk9aNkpWQzZXMFptcHZkaGdpKzcvOE1pRVNFTXVwUkZ3NWlnQmdCT1Ara0JKK29IenpqZ1FZYUx5S1VVV25xMTVZMzUxU1o1cUxuZEtKNUloWE8reko0Nkh1MW9oU3NVRUV0Y3VVQjRUYXAvZDhPWjBVKzhOZFlaWUJrUlhXR0tnV3NEdzNuN2F5VjVqQXVmWU43clIrSDNySVRtazVkN1FZVkJuNC94QkY2ZnR2Zkk3bkI1S3Y4a1VYMmQ2TDVOdG1WZVQxSDNpUlI3akZOeWhKb3pJYUNYQ2wySEhTWk5zNWtXNEFrV3pQU1padTAvYnQ3Ui9vNE9hSDNSTG93MG5uY1IrcGREckdTQ3NvTU9zc2NwbG1SaldCZ09vMjdXajdDK0xnTTJWaUtReDFBWEFsNFdoQnNiOTJaUFJXcEJpdDBZS1R2b24vZWtCYXJ1c0hsdXlmeE9JUHNhK1VkYWpSRmxWRWRvL001dXUwZ1FwRm9zbGp2YmxQVXBxSzNYaVl1cnIyNWx5SW4xREVUdUlsUlgxUEx5VzhwVy9FT3hNdkVlOWVuRVA4bk1BMWJkZ3gzc052RkZOTzNBZDZoYnYzMlBMc0V6eWJUSjdjWVBncm1YMktEUE9Kazl3aDlQZUdUakdiRFBteXlVQWdLbTFMWHJ3RWQ1L2x1NkFjeEVqbWVVNElZUWdpZUlJa1JkVDBteENyWDQ3QmYrSGJlYXZMNHZPWVRlTGdBTmlSclo4eXhYWmNOVlIxNFMxOEE3NXRLMnRUTndFMGRBVXM1ajlZRXZROVA5eExxbUlTR3RnS0d5M2I1WkhTTllBSWdNRFRoc3lGWjFaa3FJeTc4RTFUV2xudkNvTHQ4TEpmWlcvOEFrOURINE1FSXpRY2dnSEs1MmF4NXdyNkVQQWtJcDVqNy9HVmYwZlJOT1hSMEJ6aXVYZHhaV3dHVE83OXNSVnBxMzJtUnNwS1ZWRXRiZ29LVnJKc2JRc3dQd0E1eG9CbE53U0FrenQ4eGRSOW4wOVZoSVV6cGNGMjBockUveERTODdONHdrRHZpU1VuanFiclJqbU9KR1M1Y0dMbjNjU283Y1ZsaHQxQ243L1VudGh3dFVRNUlQbmFwRE95bXBFTUhXYVdUTTQ3L1RXaWx2UUVIeW5iZXdqR3kxblRQZ0EwV0dmYVc5aGVOcXdWakR6TC9Eb3l0SHVLTHNkUkdITUNybU54K2dGcVJKNjFmMis2bkdLMy9xeExScUtVbCtWL3A5dStmMk8wWmJ4d0wzWk1XdDA4dXZvMXlWTzJaM0ZLaTA4N3BTYjlIWFRZQXQ1MmwxZSsveXJNRit4N0FBOHRudGFvS0ltbll5dW9HMVk2NmJ6WTZzczlQRWVteWZBc3VXdmlGM2hQWm9sTWxzTitiOThNT2pMNXU4V1AwMVNVRThiZjhyeCtSR09mZTZmaUVMODNLcUhkRU9kN2NKRDhZSm45Nk8yK05kS3MxUnZ3NURiM3A1aGxiTjNJZDNNV25QUDhML05Tb1J4d0tSQVh0WTVSSW5CQ3hKWTdzakN2c2MyY01TeENPZ1ROa2hJUnlsVFpaa05PS1dTOVdaK1RrS0FaS3RWNjhvdXdHck90Qm5PR2s4SzhHNW9RbGxEUXhUNHZObDJBSzNPT3cwVitFMFE5SHFhc3IxclAzTEMyZmpsV2ZVYXNrZzhVSWZ0cTRHNm5iSEtkUjNlNWM5a0JqRkc0aXRlY3dkWUlnMFppNmo4dkdoYkY3R2lZbWV6aWlyMXptRFhJOVV6Q0hKRmc4RVByUXA0Y3l3QU85c3FkaVJ5R3Q4RVJ5WGY3ampFaEUyU0NZVTJUSzYyeS93UjFEcG1yek00dVF1TXhwNS9CbkVWQnNCUHVTVWIza0k3T1BZWHE2c25hSys3ZUNEeTFzUjBERmsxSWdIbWlmeUorZ3VLT3lVWFNhcDJjRmRyVnRHOENvTDdzaENnckMxRUh1RzR6TWh4aUgrdmErb3pyWGdvMktLcTBqLzhwcXgrdWQ0L1o5S1lsdm1hR2l1OURSSnZ5UTBhNlNNZUl6cHcvTGllWG1NVnNlbmd0bkdZRnFCYUt3YnU1cmFPZGgyeVEzTDM3TUcrYm1CbVpvZmlJL1A1bnIrY0FEdzdrcmdSUHVrdHVka3QrUitJWHl5b29OUkhFcGFyR1J5STBXZ29uWWlSV2dqSkNzVzZjL1d3VDRhNVM1aHdYY0JremRLT3RUTHVxOXBhOUdFcDdieVBJckVaUEsyZi9TcENxcDhMQVcxRTRMNU5CYXNCWkhnWFhWemRQQUYwR0E1YW9LUjVER2xTUTA1L1hDWHZPc2p6SjVSUm9qQ1Q3dmJIVFA0YWIrcUE4VE5ZbEIyZThkZnR2OEtETzV0WFEwL2UyZlJEUGJ3YStaUGtYc0p1SnltQzh2Mno2cElkZUVIaU9pWmJEbzN3cUtxQ29ZZm5ZR2xpVFR6UGZwL3h1dCtzSllQaGdrN3p5ZVhsV1Vsb3A4WnhET3VMUC9DYWZaU1NJRU05M0E4OFJDc0V4OVk2WTlaRkdKUzFvbVlMN2taOWpNR2VmR0pBTmJqbTlGV1dCaFN4UG5QNUhVSHZDV2ZGb3RwWklBajl6aXVFL255ckRVTmg1RCtXcEc2VkJhaUdPanVzU1N4a1p3QkFnZU0rdUNZamU0dGdOcys3RHRwZjZTZGIxS2ZuMER3S0ZkZDN1K3hlU2lkcUlDT0lJUlRRaEpISENQK3VrSjJ2b0hrbWZ3WXZGWG54VjllRGczMGRTT0VSdVNhb29WMWc5UDc1aVdWVUtFc0s2dHAwSDRzWG1WUEJPeUQ0VkQvTGtZTE8xYTdLUXdnMTZEMUNnVmdrZ0E0ZjNsYng5SmZaOHhvU0NzSVdxT2w4ei9MTHN0MGE2UUlpZDY3Q2tPdmlBeVlvOW5rRFV1WHZlZGRuVWwwcDlTMG5uaEg3M1RudTBGU1ZtT0ozcCtBdHRYOGRFSWZxMG9TMUFLQUMydFZBa2RqUkc1Nm1jc09xa2J4VzVJNEhhdnZtK1BORW9CcmExMFZBRnFkOHRCZEFXbnpGa0Y3TFZpY2svOVFOMlRacVlXVi9OaDR6ai9MZ3VRbzFIczVITVVld0Nzc3h3cTNiNlJsRUNNN1RpaWM0WnN0YWp4UFBqSHRmSEZzcHJKZWhwaEJudnRwMlpVQitJTWZsRnY5Ry9GdHIwMU5XNnZsN3J3RmptUDVNMVdHQ3J5U05MTVZZR0lndW1mdm1EOFQ4Yjg4dkpsY0FsOW9ZV3Yrd1B3NnhCckhCTmx1ZExiZEVWRU5jQzRzYVBMK3huaitWQXJOL1hoOEZ6N3RnL0NaSFlFV05ZT2ZPS0FPTndCNngxQU9IUHF6Z3JDZFQ0emFlWjlzTGhDdlh2M2NUQ241Z2J4bDhWc1RBOExhLythdmJadWdJMVRYazFVK2wvY2s1UERrd2lkQ3FJa1N0c3B0bFNaUStsY3JsclI2SmVOZkNiL0JncjlLTURaL01Na3FFejI5VXZ6RHJ4VHBmUlZqMm02TGVnODdIcm5UaHAxZE4rYXR6N1RhNkpiUkxxUUFHZUdrRWJpQWtGbmlaTlFud2xOc0ovbUlxRzU1SXVBY3ZDazJRWkN4N1IxRzNQOVErMDZVV25Rd29TMklObmtGOW9oL1Z5Z25UVGVHalFYTlhHaWVNZk5QenFmb3F6eTlJaU9YVHM2MmF5VEllMDVKNDNvWUR0SkFJVDNvRS9EVjF5NWVPcTBKaHZZSlR5MW5BZGxKOEJId0g5dVRCelBYZ0hpNVB3dUNuZ3duRjljbzB5N0FMbHF0U3RSWExTeHlTSVVhUjZ1dnI4M1BSd01XMXFBZUZ6bE5VMFB3T3NETkNoWTI3VnQ2cmdodUk3bU9sU1VxR3hrRSszMXBVWGNKcjlYd0VBbHJJaDNYNW1FTHdJTVMxZGdUNXEwUGl6ZVlXdmtmTWwvVkVJeGtKbGlLOXk4UUVMQXFTVkl1M01ocmdqK2dqa3BuRlE0QUlwOFJHN2NEOFprRW1pbFhrMDE4TTZ4TjB2WW0vVVZyU3ZWK3I3QlNBVnhVY2ZqUVhnSDdsMlJCQ0pmcHRNUmRGMUZrYkwxUjc2OXhueUt2VVdvZlhVZ2VXaGxidy9pTHNjRTZFL2V3MEl5T0RHVlVFcXdUK0ZXM0o0YW55b2pVUnBwTnZIczZWL2xMN29qbUVrYlpnOU5uVnJSd0MvR1JZMjd5QUl0WUx6MHRUa0ppSU9ZbjdxeEF3QXBuckRjWGlHZ0g5eEdpbkIzWGhYZU03T3A4aWdNZ1pwOXFZY0lRTzhLWHpnNVpTOGVtUVJvZUcyU3g2Z3I2Z2d5SUhqRll3YTlEMzJNd0E0SnhJRkRiYmVaZUhkd1JLaFovaWFHVzZ0RjQvZE96bzd0dTFaQ0I3T1EzVVlQZnhaMFh0bjU5ZkZBR1h6d0pWUkZ5ZnlTV3I0ZUR4WVR2emJFdkNTaXhjcUlteE0yZ0lNaDB2b2ZET1owamNsNmdtUmFYZVVWQkdZbHZwRmJFV2lDRklmTjFoRk04MDRmdHN5UUtPQUJITVBjVWNxSVhRa0FmTkNlSjRIc0IyMHZ1YjBZeVg5TUdnK1FpTkpVckU3Y3dXa3I2SlY2eTlCbms1MS9xemJLNU41SXgxZ2xKTThvN1VsN3daOHR6THhsMmRxTm4zV3MwYll1dC9NTlA0anI5RjJtRE9Za2dmZ2NWcWJsN0FRRW5STlBxOS9MR1V1WUpaL1FQejZXZGthY3VjKzFNMlhHNFpvZEp1VDJLTFExZ2VsNXErU1E0bFFMTHpraHBkcVptVk16ZlhyOThhVjMrNWZ6YkpKSTBQN2trQzU5MWJjSzJSZkNlcHNXTloxM3p2Z2M3NTV1ZUVOd0VJNk0wWGk4cEJaZCtrOVF4K2JnTXI4RmpWcEoyN0srTkd4ZHlkb0o2cXB6VEZzQTZVckEvaW9mdHBqc0ZsZ0ZCdmtnWkZLNGIzVXE3VUJVSkY4LzJTeldTNnYzUXVsOGFTZGdFVk1reC8rQzE1QUNseHY2YmJEM0d3b1FwZFNFRWxiNlRoeWgyQjVuV2I3bzBSOEJiZGRqbWlhVk81N3BXZXpXa25TRm9wZzVEdGMwSjVYU2tuOG9OWE9LbDZoYUwvR2psVVBRUmxpY1FYUi9vb2pXeGtWZkVCR0FVVDJDZmNEQUFyNGhhQWJBOGxlRGdmUkhBMnNJMEkrOXV1SUVxN1dVZ1lmRG0rbDlmbmZBVE9oWndQOER6TXNwVlN5cnJsanhERjE5NUc3Y3NnaEZwWUZRODBCRWpaajNvdTJ5TVJHbjlLN2NyQU5uUUZGQ2IxemxZSFpobmRNMUVRTnpCaXV3U1ExV3JuemZiZE1jSzFhNHNaV1IrWGtab1JQaEZVZzdSN1d0WFFYckJwbTJCRjAwMDVJREpTS3J3ODRCZVFUc01BR1lVYkVVREJtNGg1L1F3MklXU0IzTW1tSWYyamI4SENHYjFhS3EwalVrTHhNcmx5akJGbjJ6aWpMYjkyeVFtUGt4TVpnei9QakJicnFYNTZQdG5pMGFVVjk0b2FCRU9ZVngwLzVyY1NXNHBSeDJ6QU1ZNjJPTTdXRVZ0WE1tU1JsUkhRRWhlNzY4V3BRTjJGTnhMV0FUK0c0UFhmTG5qMjNhd3I3OEtxUTFwSVQ0OENKcHVOZStESnFyeCs4WjhQM1hVdTIrem9XZHBoa0x6eUhia3Z2RkN0dmowbVNIUFhscWlIT3BLSTc2bVpMRWNoMWVSc1JucEk1N3NDeDA0Uk5hOFpiZm13bVhvR3RkdEJQUDFQcUM1azNvT0tlYWExenR2OThiM0wxZnZLMm0zMW5oUTA1WlF0MStxK1grMDF0Vk9CYlVUbjQvaTZTcEZxbURDKy9NU1dzeHRJRzRSZEVHYytCemdoUVo0ZjBZWXhQVmlRWEtqZ0Zvd2dXSWMvcWUwajJIMy9YTWJRR0ZRSFNSalp2d0lqTmxSVkRUNVluQXc3dWhnWnN1NXZXUi95NUkwQnBScXV0U0pvUWZOdDhuSTQ2ZkhhV2Q5S0JXZE40aEZRK3RrMUFlU1RkdU13cEIwUmZXTDlQOWZoZlQ1c1RYdXJwMVJjOW5WZ3N6RFQ5bE1yM1MydVYvSlh3RU95MWxBemJOQUk2eXB3Y2tCQVJ4UFZJTXN4MFNXSmZISmowMldhRnhNRDZBMjByNFNCcFpWelNxbDZRU1FiaXp1MG5rT0RlZ09RYjNnVGZTQXZCbW9uUkJSMjNqeGlIbzNabUVYQmhhZG5QWDNiaVltWkZ5NHdIMnRvRWpiZ1Rmckswd1ZkNGdQUHVhTllMLzNWS2FjUzJYWmpuZExyYlRoZkVVaEVPa2paNHlsZUgrVWlQMkhoZlFsVUlBZXp6dGdXT0g2b0ZLMGkyTTZUeko2NkZaeGs4STU2cHpKNVcxV3pBbG83SDNLNkJrVGZHSTVuNGlibTB0Wm9BdzJnY3VLSUE1RTFQdDZkc2tiTTI5TkFXODROUlVmUFlGWlNNT0VnbGtBTGkvMTVtNGFSZXpuQUJPTk16SWhGbTlSUG5VMlRva2cwL3QxcHh0dm12dXBMQlFWL0FMeWNsNUhQK2tQaTg2OVJIWFUrR2RBRnBUczZ1VVpBUTRIbmF1RGZmSTdrOUY4OThsQVExWUVmcER2aENMM1VkaHlBZWtENW5ST2UwaEJpazFuV2MyQW1Pb3BNaG1HVkpVR1BtUjZNU0FtRFZTaERQRzlSRHg1MGRrODhTdFIxN0lUTUJZTDA3NUpnUUVRdHNEZGJYSW5yTGZEYXBrUEpGcFRWd2d3NVFxMVFMOUV3dFhLZEZINS9hdTlQRld6cmt4SURwQTJzb1NjODhxTDBPci85QnF3YVJjZUhERVBwOS9iVU5NWmpuQVVKbjA2eTg0VWpUU3gzbmNUanJDWnFHbXRPTDRid2w2U0RydnZkMHF6aDlzUHBmNlZzRnVSd0tCZFU3ZDVybXVCYW01ZjllU0RVQkRQZk1YYW1lSzNBdUdOVkFCTUptVDlremU4NEdUTU5sNk1tby8wWnRlU2xSWk5OT1NpYVdhZldZeUI1NXZmQmVKQm5uRVl6dTZ5VDdOVmQ4cmRwMnBpNk5JWFl3aldZRzhwVDMrdmxVRlorMmJPZE5GeE9tSHlwSzQ5WkNtMjN5dzhZbVo5QVM5eXFObkdPaEVObTByR0JZUWlKYWlHWDYwY1FOMjA2UUtaU3Q5SFBmcHRTUERTU0dYMnNCR2NZaGVrb1NENVpsTHhBdjhmaDRBK0xXZmlINFhndWtVbzVoaE1ja01rMStSYS8zQWlnSTNBQkNsZHpoWFh6cXlGcmViOWZZaFd5UUpibTVvejNNazU3SjdxeUErL20zdnMwYjZnRzJrMmtINSszOUtpMlFuaVBKcDkwcjVHeXZWSnUxclFqL1ZLNjdDMm43VmJYQkN1YzJ6OVBJWTVwNlBUUWtTbVZ6TGdKNjhRR2psTVZnRmNJcHg1MEZoSGZ0SnZCYkttU2pKdFppNVExVytaWnpOa0dnays5Mzh0NW15VGZTR3laUkhmZ1VmZ2pqYVZyVnhoQ21NaGFsYWExUXlDZWczNWZuZjBrVDV0OHEvdzlSdEdoUHh2eENqelE5TDVRSnVncDZYME04QUxGOTZzNzBQYksybnFTRnJnQWQ2eWlqbmZLTzBxNFJrcGM5RWFxRUpNUTZlUlpDSHllc1QwaDZrNnhlNVdQYjE1Q2lpY28rRWwvNUFLS1UwU1lMTWZwWmdKaVFpK1hHaUhSZDBTUVVkREdPR0hrUUtoeTJTT0o3OEdGMzJESzZCQ0wraElFRDJOQ1pyMk1oa0VDVDhSa3JGaVc4WVQxVHJheGEyTUQxQ3dITHVmOWdwbVhSY0xDRzQ1L0tpeXNOVVExRGd2SUNBUUROK0NNWkZZRktIa24rUnZzTnpZZHFHbU5zOE1rcThLeXI1SnEyd3ZFVy9SakJqK01tdmw4L2Zmb0VRTDFITUJZZlZaNHpqY3BoaWZjeDR2dzl6QkcrSjhkcjM1blVKRzZlWmI4Rmk0Q1lFNi8vUzNsWmFqSjc5MXZGL2FMSHRtUllCT3llaWwyMmVjeGJpNkJ0elFOZFhtcjNmS2dUS2dVRWpzbTdZMzNhd3RMK0FjcUxOTW5xRDEwbnFPS2J0Y0RHK3N4MFp3RmkxSTRuazRjTDVWbFZ1NktFQzdBaXVxMGJPbmcrM1Mrek9IelNLNVp6R3drOWdhdEhiaW5IVDd2NEdlc1U1UUJzcTg4V1RzWTA5YVFQZWpzYkhWWXV5b1R6M04xeUs4eldmbVorcVB1VU9JMUVyeFJoOUxHamxFdC9heFBuY3JaNDN2RC9FTC9BbGYzeG01c29tU2NXRjF0blEyUm9COGUrWEVRaGIycTJvbkRDeEtmZWlEclcrQXgxckJROFNESm4vek1jQko1VWtuWUxFNW9SdXNoS1pNQm5aTEdib2V2ZUMrZk9nOWtnMzJuYS9nQmcxMndSSXUyeXlXelpNMElvUUZXVHYxV3pKdWgwNUZmc0Y5bmIxQmNHc0Fuc2VmdEFzajRYQkdlcStjdTJONmsyNkt2NCt5Wm5xR3EvamhOQi9VYnZOTnVHM0dXMmh5M1NUVk80YjJCSmVONjJTK0FndjVvM2t5ZG5keWwxbFhueExVSEhDdHpSeld0UTh0Tm1hRFpRWG9WUjh4NjNXVEh4aEJ2M3JHZTJtcjY1K1pMR3hQeDB0Z2k1UmhoVzhrN1lNaHpBWE5QMHFxMkN1bWVacW9JZ2RYekNaQ1VFU3k3VWRDbjJmYVpjQ2pPYklRMEJudjBaTnlpUXBlUFFvbzg3T1FMMjdjK3Jhbkx5MnlRNEhDM1JuQUpzSk43aVN2U3B6UnZzQ0pCZm1SUVVWUW1YeEQrZ0NNWmxnSlhiZTZGbnF0NVFOb3h1d2lXU0hhTlJzODVMWHFBb2p3NGI5TTVSVk9OZDZNa1lsREw2bXR1K2FBZUZ1VmtuK1A4MFY0RS80ZGx3L1VZN0hDOTZ3QXUzMnZlaWQ2Sk9TKzBaUkp6WXV1dW9HWjBpczEyNm9UQ2hmbjgyUlRlckdXUENNUlFmMEFUUTdtdExZclpFNEhNWEpyRWdrR0VTSmx6ejlha2xHRXVSWlo5Wi9CbmtWRWFDS2hSR2h3b0gyUmdSOWlBdW9kK3owczBRdWNUaUltN0xyc2VRWEF6RzFiQ2M3anZCVCtCMExzY0ZLeTJIRnRRcXltcStwMWdpK04wdVA2MVdLcGY0MUNZaXRQRGxnNDZWWDJYSEZRaUtSaUpKYTQ0eENNZ2pvdFljamtzSkE2MXExR0krNjJKa2VwNVB3OHhickRzaW5uL2pYYlU3NnF2cXY4Mm5hcTczR2NiMU1yd1hadUhiNzR6ZTN4d2I2NFczMWZhQ3RuWEZaaXlwT3ViUnJZdmlreFhHci9NVHZaNmRoZ0JLZTBUcWhONU04S1VKM2JVYkkrZXZhVTVwTDg4Z1V6VmFVN0gwK1l5a3ZHNDVYQ21vdFg3RU5obC9wSHkzOUE0d0JscFZyZDlOQVA2dDU5SkQrZWNWb1VVY3RKNTlQejRzZVJYMlMxb0IzNFlIakdhbTZ4UGwvVThmM2czSzQwUU1YejhaV3pkRzBKOUV0L2g2dE13SmFzcStaVTlORjJ2cjVMNVNKTzJ2cGRRQkRvOGdoaXk2K1pHQk1NOTR5aGNlN0hBWW8wamFjL3U2QjNKdXYwcWIxYklTYlpibUFrS0QvMElqOXpUQUtCd0U0a0ZoNHZkVUd1U3huRnV4b0dmMVMwVEJMc0FaK3Z4bW0raW1oV2ZXK2k2cHJKNmM2bkZtL1hjN0FGVzFmZ3hlVlBaNkxrdVhtNnFPeDR3S3YvT0FNL2RnRFlQSVV1ang3eCtrUU10QlpLNmkxeXc5UVQvTE5sQXR3bnVLdWo4WVRvVG9zY2N1RnZxd3dQS2VxTmVmQitsR2pMdHlXTVR3M0RMeVQySWo0YmhmS2dSVllRV2tOQkJWUXJCYU1YaHc4V3A4d2ZiVXIxZGNGd054TDJHZ3dXVEljK3BIQ0dxbjQyZ2ZtOUpVTncvbjhiMFpVSG1ucEpOdjJDTkI1MjB1Zy8zUlpIL2NmbHpjTENjVU9vU0tQL3NSRC92SXNxRS9JQWJzTWdRRlpVWlVjOThadERQQmo3WFBHTHdvckFib0dycWdONnlDb0hKYTFRMEFZeWZ4dHl3eE9Tek5idWg2Q29zZHl6SlFudERsSDNkQWFFVXNBSWFXR2RkNllDeWlVR2FwSysxbU1XSEFCaU5LSkxodDRkbFlKOTZ5bTdxRnR1NUNWWnVUSnpNZzlaQ0hMb1IrVHJJaTJPUTl2TUFuWFhsck5XWXdDUEhPcFpXN1VoQ28yMFJIUHFWQmU1UDRMOUE0UDI4amV6UEgzRlFJb1VoWjFOUUxFdDRoM3BpV0Y3a05mbUdlSzZRR05ZK1NFOW9UYTFNdnc3cFk4NjNFbUhNNlFaSkU5Q3FMdGY5aUlJdHZXSXRYb1VFZEg0ZHVtWUJFZFloa3J4ZTVIcW9RUkladXpUNmxyNkhieVFGblRjaGdDUk9EeTVMTGhLNktycUhGd0g2RXVDY1JaUTczc2hDVkFOM0k5ZnMrWVoycXVtdW1oak5jMXJ3cWkyekt3UDV0MzljV0p5UGJyeW8vQTNoaDhaQ3oxS29pZVlGNTB2Vi9nRUFqcnVrK2dDeG9uYnNtRnA1QTBtNVZWRTllNC9UT0ZWR3JBcG1TL012a1N2UzIxejhFdXgwK3F6d29VdFBGaWRhR1BHVHY5REU2d0NFRWxOTUNZY3BHYXFBNFlzZTBDNzI2d1g1OXFtQ3I3dTcrbUtLSUxnWU1zTzdMQmJKSW1FRDhyNDh3ZGtZUVBBdnlqdm04YWtaS1FsM3AyYzRrb3VYTTVFeVJjS25BNTAwUDFIOHM0QzdUVThQMmN3QVlrYTBhK1VRTm9DUkxzZ1Q0L1dwT0pWUUQwV1g4a2h3cEJlMFJURHprUWFlVGNyZ2JzTUhiZWpzY0x1Rm5UYVF3U2tKNUZHajNJaFZrWXYrQUkrNHVyVTAybjhPdlNQMFZsZmxvYm44VkZQb1JlZG9tcXB4L3dRbWFFZXZaQUtjMGR6MjVUcEFYTDZkV1BwZ0ZMamQzWTdaNXd0eFU4aFJYZ3ZvZEsrUnVQRmZib0x3KzhZL205SFNWSGdmdXF4M3lQUDlCVWlBcHFLWDI4bVdrSWtuczN5Zis3SnBxYzB3MG4xclZISzgwNVlLTHk5cWlMZDQ1djZUVVNhTXR3VzlKOEVuN1U1Zlhnc0x6c0tqUEpvWFd5NmJnUVlyMGxXMU8vMW1XOEwxeENYbXVxb2ZEYXFmNkFzdGhWYll5ZmNRNjVYdXV1YS9HZnFqci8xS3lMTFJHMUI2RVBJeENkS2RSeTN0R1c4bS8wT0psMlU0aElvVHFIOVJ2VEs5ZkVMRnM4R0pCWm16M0J4d2Vobm15b0FhTXVzL0tDdFUwUzJXSVpXbzdrbnVuMitTTWJzTWNES0E5dUVqUkRxVUUrNVkxZG9UQzQ2Zy9vM3p0aGVkVFZWK1pubno5T05vVlU5cUhqRXBrR2Q5SGxad3lML2NFSng2ODJibEdlem9ISGtUVUMwRkt2MjhEVUNTQ0ViQlBIb0dsTVhFUkU0SXQzd0hTaExBblB4VHBMQWF1R1ZsU2t0KzRwSS9UMnE1YzJoeXZCeGVOVHR5eDRsWGRhK3hyS0lNcDkxakZpSUZ0WHFIb2luQTZyVmtnZGZsQ2F4aUlESWx0YjIyMGN0bjM1ZzVVZVFHa2FJbUJyZS9Vd1NGeHVOcS9ZQUFQQmV1ekZ5a00zQlY5NVNpVDdrL2cza0p3VjVRREdSRFp3eFFsTTZ1WExvUlZuT2R6STFGODRiQ3l4MVlaY090em8zWDR6REFKRVdib085TmdCbWVGQVpuMEhVRTRuTVU3YnR1TytVaGovYjhZQU52UVBZRG9EelRBZzUvZG42VDZwRGJBRW5rLzBrNDNkOFNiTHpQamRibDM0VlMwVTBzTlpNUGpuZlk5ejRwY2FOQU51aTRnaDRINU4rTTloeWRVUWNleUU2V2ZGT1ZpbkdVdWFJSlJ2ZGpqQ3YwYlJLVkpjQ3hHbE1CeTI1cUExK2lYOEpmQ25pNEY4TG1SV1dKYkdUaG9xZGRqeHJiS255SWc4aklxYXY2SlVSVndON1B4c2tlTWRqcVZVcng5bnlhMWV1Q2puSDA1ZlR5dXhMakdIOUJuSWR3RXpOVmtQWW5BMTBMMjFnTHEyQVBMeEVKVHNvY2FiZC8yNDRQVS9ockhPTjZBZm5VL3IzNUE1U1o4c0dFZytCUTgrd0RXT0JPcnVZZ3ZtQVZkdXZxRzlnQmZSWHlpcURFclVXeWxVWTBkRElyTGp6WjR1cXpQOXNzL1FMQ0k2emNvajQ0N3FwK2gweHlMbGlHRUNMTDNXdnlnM1l3WTZTZVZITnREOUtqMll3S3pFY3o4ZWxJdmx6azJnNkZtOVNhcFlBNWxjY3k3UXlrQ0E0eVB3MWZwa2JJYlVxemd1cVQzV2VmUTFOdFR4TldSSmlnQTMyYURnRlh0NDIzVjRFQ3FDc1ZJZkdlMW5YVzM4WGpGcEN5TU5BR29ZQWhVS0gyc1dQdDlva21KMVc5alhXWnBHZmgwcWhVTjZhMGw2SjZYalhRR3h6N0xuMEQ2Z2o2eUlnZ3RNRFJtN2hSTHRKYW1hQndwUWg0cFh1NFY4ZDNxdkJseXFjblJHNkpTdGlwTGZ2M0YyQmo3NjkxeHMwYVp1SVgzWXNjc21tVHBOZWVUNmEzelZMZmVuY1pOSXRMbnRWditSUlhnaVBKT0EyVFV2MXVjb1VYanlnM25aN2dza3lEZ3BUTHZJSm1WRVdWVXdSVWNZa2paemQzNU9RcVhkai9aSjRxc0VuTzlta1piOWZ4bFB0VDM0cFpZQnRKclhjb0g3cm9mWWxkb2VXZkUrOVloN2tsNFkyOHRJU3Z6bkIrYnZYUTlpWnZ0NE9uL0tLcHF0UTM0ajBSZVc5b3NEeTNpK0IwNGpmbEE1YklNYnhEZnpCS2RreittL2hQOVFsOUNyN3poVWFjK0l6Z2pqVlpxa0ZlTjBTRzM4dTloZktRRC90bHh5Njh3T25DRzJNbzZFdFRZcWFhNGRCeXVmSWt0cENyTFpzQ3c5UitzV2NEbzlQRForVGkrdjZOM3hHVDVFL0x0K1E2c0lCcDU5RjZEYTZuOVFRUkxYWEMweVA5VGxQRVAvTm5POVlUNGEyQnZENkl1Z1JpMmR1RTlhSnkwM29Nam1CMWVHZW9QcjR3cU13dGNGdVE4Y090bE9KZVNvSHU1dy93VjhpNS84TE01d1dTWWF5d1c0OStpUm16Y2JzMUNTSDJtUDFVdWtVZW9pM0hFQncxVEV1S1FMWW8rdDlhczZjTmZHZndtUjFabjFJK05WTVRLSXZoOE5mT2pKTm01VSt3R3N3MGJQRDRKUW8wZWNUcDNOc3VBenhBMTg3cjdsTUp6c3VEdXNtVzAza0p1QmZIT2xhY1h5cHhyRW1PNG13alVtMlhxUEZTTVdpellBUy92d0JlSEhFSm1vczU1by9uMjlQaDE2b1k1dHRUSTRkdk9tRXdDVmdZYnptZGc0M2xGdVlpaWhHazRveXZpWmE3clZWUmF5ZU92aHpqMnhHTUZUMFo2akUvUXgxUjZTUlRXL3oyZGl4QUQzcjdZSE9ROUg2TnBvc3U5dHM5bUN4Y2pETXI2c205cG1lYkpTcXB4SEYvbTNqMi9OUVRLdVU3TFIvdFQwdnhWbHl0VXkxdGh4VXdKSC9OZ0NFSlNkM084OUhGaUI3eTZHMjNFQ2IrTll3VzRDYm9WS2dlZ3lic3BZSkZMem1uNllaWUNjVWhFTWJnZG9XYllNaTVkenRZa0RTY1BiL3FLZWVuc1BPNFdVNDRENWxZR2d2c1Y2VjltYm5PNFhpREEySW1VeTFtTEdhWVh6TTdqcHg1TG9Ya3R2RG9OdlRwUWp3MFBRWDdOcmY4aDJIWU5vK1h0MzdSVTMzUStZQWNRMCswMUNyc0NjTlVTUUxnQUwzNXhsbjR3dHg0SlVsNFRZamF3dEZpcDB3ZklCZzRLbjJSRmlUYWVvUDhkdWNKbGVyYmpKVHVtVWdiemxjQnVySW5rMnNMMEZvVGYxV1RkMERLNkxZanFyNWtMaVlaTFFsU0xYY3d1aldiNU5FcXlVcmdMbVM0WXZNTDlVdDJmS043QktsQnB2SHI0czdQbzZPQm8wd1Z5aEpTRGF6aXJLbWs4Tlh2YnhpVDZyUjJLMXVHclFiOUwrSEM0THVkc05HVW1FZWxZTzFKdDZGdkNLRXVJRCtwc0FGbHFteHlwcC9lYmQ0OFJibnozdnk2UkV4QWRIbi9xaFd5MzRpbUVVaTZ4OVpYNFVYKzJxWkNQWWhMdS93SjNlSHM2SkF1SWdtdWs5R1Zid0R0cE85OVN0M1BtelFvRDNLZk5rWVBvUG1VNUd3eHlkOVFLamRONk11TWYxMVp5bkFUSUZzSDcyMUJVRjdtSCtkRWdxVE55T04wL0RoTlp4M0ZYMndiWDFLWElmQ2NnbzlydXNtcTV4d3RUbXB0NWlNbE5HQ291bkR0SEtORHdHWnorSnZPY3NPTE01QlE0TjF4VEU3Q2lTRlhUSVk4RlFMVWNERUVqazlmRi9ObGp3aENsTEhWYXNlbEF4L2ZrYndJcGRnWDZqT3dnaHZaa1hHSWRLNWxuSnphekhuMzMraWY5NlZlQkwwc0Z3WW03a3lURk13L1Q2VEdTMElVNm1vRkhkdnlhWWVNcFEwc2ozNDFzSlhYN29jeHcxK1RDYjFsTjh2SjE2NEI0MWJETnpXSnh6aWZwNVlBZ00wUXFqUU5iYmVjYk83aEFFbDkrVGMyU0Q0clp4d2tzZ09Gc3dOSkphdG5aQUF3dGF4emtLNyt3eXAzSzBMd25ocVc4bEsreE9NSXNRT0ZsTTZOYUdxUkl4WDJDcEZDeVZUZUtvRTJmZHRHd09Memd3dHhVUXMyeVpNRHdQMlRhSlhETmVEZHJjY2l2NlVKbE5IUG03ZGs5K0VRbllkYjdEa3JBTk56NXQzS2krb21SVkYxaDA2U25ON3dybFFScWJZQVl4aWxDNnp1eGc1QTVndm9uWEY0ZnBNbzFNVkNPUHJmQ0VHT1N5ZEs1eXlxVG52b0dLM3BQa3JsUTIrSVZQam5rOHZpWHFYcURhaU9JREF1NS9IQWlMVFBrT1dDZU1iSWNxeUtIWHM4SDlrRTFQU21sVkNoRkgvVGp3VXVEUi9tMkFOb28wN20wamY2TVNtVlZhUUtPa05QekY5bG85a0pwdlVHR1J2d2lINE1TaVpHTUYvQysrUG9MbFZkS2tvVkRpSXUwUVByVHlSOE1PZkxhVUZkOFozM0Y1MFA2dHVwZWZSd2I4WkE4UGp6S0ROWE1PYVYxU1ZHR0p5TzZrZGQ1SWs0SWQzL2wvRHhiOWg1RGt4MFlzY05WdURtOG5Qdi9UK0J1K0QzOTJoNHJ3Tm5RcWNvQkxTMlQxc0lha1J3YnIvWUkwNHRTVUlYNVFxaTlNS3YrNWhmUFFBQVZ3RjRKdWthbTFJdWVqckwyU01jcUdWY1hMMGRMU3N2ckp2VExkRUhHR2JUVDVrYXZ1eld3OTlFZHp0TGgyZ05xKy9JUXFIbzFWSmV4cFA5Ly85a0FBUUFhQUVBQUFTSUFRQUFQQVFVaUFnQUFBQUFCRVFHUFFBQUNBQWtDQVFFS0FnQURBQmxVYUdseklHbHpJRzltSUVacGJtZGxjaUFvTlNrPTwvQkRCPgogICAgPC9CSVI-CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24-CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I-MTwvTWlub3I-CiAgICAgICAgPC9DQkVGRlZlcnNpb24-CiAgICAgICAgPEJJUkluZm8-CiAgICAgICAgICAgIDxJbnRlZ3JpdHk-ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8-CiAgICAgICAgPEJEQkluZm8-CiAgICAgICAgICAgIDxGb3JtYXQ-CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24-CiAgICAgICAgICAgICAgICA8VHlwZT43PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MVo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU-RmluZ2VyPC9UeXBlPgogICAgICAgICAgICA8U3VidHlwZT5MZWZ0IFRodW1iPC9TdWJ0eXBlPgogICAgICAgICAgICA8TGV2ZWw-UmF3PC9MZXZlbD4KICAgICAgICAgICAgPFB1cnBvc2U-RW5yb2xsPC9QdXJwb3NlPgogICAgICAgICAgICA8UXVhbGl0eT4KICAgICAgICAgICAgICAgIDxBbGdvcml0aG0-CiAgICAgICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5ITUFDPC9Pcmdhbml6YXRpb24-CiAgICAgICAgICAgICAgICAgICAgPFR5cGU-U0hBLTI1NjwvVHlwZT4KICAgICAgICAgICAgICAgIDwvQWxnb3JpdGhtPgogICAgICAgICAgICAgICAgPFNjb3JlPjc5PC9TY29yZT4KICAgICAgICAgICAgPC9RdWFsaXR5PgogICAgICAgIDwvQkRCSW5mbz4KICAgICAgICA8QkRCPlJrbFNBREF5TUFBQUFhK25BQUVCQVFBQnI1Y0g1Z3djREI4VUFJSUFBQUFBQUFGUEFFQUFEd0lBUUFJQVFBSUdBQUVCOUFIMEFmUUI5QWdGSFFGZUFhc0FBYThtQUFBQURHcFFJQ0FOQ29jS0FBQUFGR1owZVhCcWNESWdBQUFBQUdwd01pQUFBQUJIYW5BeWFBQUFBQlpwYUdSeUFBQUJxd0FBQVY0QUFRY0hBQUFBQUFBUFkyOXNjZ0VBQUFBQUFCRUFBQUFhY21WeklBQUFBQkp5WlhOam1jb0FBWm5LQUFFQUFBQUFBQUJxY0RKai8wLy9VUUFwQUFBQUFBRmVBQUFCcXdBQUFBQUFBQUFBQUFBQlhnQUFBYXNBQUFBQUFBQUFBQUFCQndFQi8yUUFJd0FCUTNKbFlYUnZjam9nU21GelVHVnlJRlpsY25OcGIyNGdNUzQ1TURBdU1mOWtBQkFBQVVWdVkwbEVPa2RTUWxRd01mOVNBQXdBQWdBSkFBVUVCQUFCLzF3QUUwQkFTRWhRU0VoUVNFaFFTRWhRU0VoUS81QUFDZ0FBQUFHdUxnQUIvNVBmRXpBWkx5T3RIQ2pYR0ZmenZ6WlorZjF4dkU5cXc1Z01zVWtnSTc5WDB1LzByVFVDY2RNYXZwZ2xtdDExMUlXd2V2VUpYOUNBZ05lQVUyK21XRFVBMkNXK2FHUS85S0F0Z1BGdzk0UGFiTUlzZldNdU8xTkNrcVpyNXc1SFBwNUJZeUtBOFZDdWVTQmkzNEkzT0hHQjMxNVZaQ0UzNXhlL0xlNzhDZ0FCVCtsWmFIMjh4RXN2d3BRWVc4ajdhWGxYWFJ2UitpdzVzSis3SVVBM0U1bXZmSTFjWFNOSHhVaFlIM3dZVzdZSHlldnc4R1g0NnowNVJrOTBZQlMyUHVwdVFhRnJSMWtlc1lqWlBheDNra3VwNENKYmhkT2ZxZGFxY2UvK2ZCVlNXbFNBSitwdzRRM1RjZzY3clAzSzRiSHBvaGI2aEphQWZxaFpSVkJPeW9XZElxTXU1TFNhMjlUazRRQzVrTHdRYllJRnFYZXJKOGpwU1ZvK0dSZTZDV1RkSEp1NTA0dXFMamdKV2ZSK3Vua2RpSitMdHEvQ2NJWWFrSjFMN2pxMUNmNHM5K1hKeno2Y25hTDhpTkNacEl3YU5NQ2VaZjV1SElhTzRjREpqMTZIMUZaS1lXWXdpdHErMmNURVJRQ0Q1cEtxc2t1SjFYbjZxSjVtbnlTWjUvUHd2dllBR3VsanpKcjhZNytNZGZNVEFQWmdvcU0rODhSWFQrcE9WVTZjMHVKUlV2WmdKMEhLQjRzR0QxWVUwRkQvY3BoZm01TEx2ZVRQcHVNYUN0ZmtUeUpyZDRja0orZnhsdXdJZ0N6cFRPVTdaYlJwQjJXS0hFWjRFQWtIMHh6QzF6aElDYzhCYkRlTDhIZG00Y24vQ3IvQ1RRdm90dStYSjJTZSswYWphUExMU3ZDZG4vMHVXQnR5b3M2emNSd3FFYnBCcWsyR2JVcHlsMFFMT2Z0RE1aMERqUEs5MHR6TURXQmd5VWNvTjhrc2hkU1RjSVZOSm04ZWE3TCtHK0Rzc2xNSGZsOXlnU0Rxd2lvOElOM0FEbitsWk5UQXRoWXdrZVRzTWFiaDVmMlpoY01LY3BFVEk5OThVNFVKNHdvdXlFOWIzS1pxWUdTbm11STd2ajlWUE5ZbjZzeHZRS0ZxQjVhM0F5UVBSeGpaTkFpbm5BODU4OW8xckJDWC9pVVlHaFQ3QU5vSjArYkd6SjFBaU1WUi9XVThPTUE3RVphQTRnRGM2L3FuVDU4VmRTa0NrbE9yOUpEclpRZzkzRGtlYXZ1aDY5enJZS2NlekY0Q2MyT2daQ3NtRTBhaE0yY3M2ZVkybDkwaHZnN2hiL05LNVZ1VXdMcGJTZVpGU0pGWEF5aFVWbm9XQ213QjI4bkJWdXN3bWs3b1ZNdDVWWG4vYjA3ZzBrdlViRGl4cW54NDVJZ3FQWG1rR0F2M3V3MCtSVnloM1VtOFJiM2pPNDNKa0UvRThoWXdiR1l4VXREZzIzb0RYVmVhNGkzOXhmVnlReGd6YmczSUJqckd5SlZoYjU4Y2NEdzZzVXBCbXZRMmx0UXk4S2IzY2Q5ZldHNkpQcFk5Z0tPZ3B2M1pwaWgrZG1jTDRrTkEzNUVxOWpBc0NnUkM3TGVtaExYTERzL0hyb2R6dC84dldXUXIyR3JaUk9YR05rWCtGN0lyQkk3eWg1OG1weGU3NEFvenNIdjhNdWJEM2lBcU5qc1FsL2NDemlUZ2pEdW0yK1hYWmU5dExHZW5mR2xGOGhaVjUvSkNrN0JVT0RCMEduOUtpampQcEFweUlXdGtvT3QrZ3RNWi93WVpOa21paE45b2docEt2UDQrOENPbUV1clN0cHNLWUU5ejVuYmtlQ29wMTM3L1NzOW00TTRBTXVMSVpkRGhvNWdNM1BkQkd1YUpUQTVkTDNCVEsxeXJ0MHo3RTlnNVNtNWxOM0VqQVI1SVF5eTNqZGJBN2lzN0gxVVNjVkwvR2I0NkE1bmRnY1N2MmNBYkYyWlpreXN0TzFjYXRIZEdCV043Sk9mUmZmODB1VVd1ZzFNdFNtbW8vdjZhcGRHakI3b2NlTWREd3Q1MDZJeVo0WWpjV0FQeFFENHhobk1GUHZGdlhrR29wY2hXVi9VSE1tQWN2VVY3bjBwbGZlMU5FQVhjMSszZEMzak1xa0NML3hWVG5yVjFhWTltNERwQitvbVZMcXdvb3JzbnhXT3lPSm96ekd6OHFhL01uWDBzS0tKaUxVcHRDS05IMjg3RmRBdjhkY1lxcENMTmo4Y0VJWUZFUjFNdU1NbnlRaEx3MXhYNnZKdStTcjcwSUE5citrcnBDeUdYL3FRMUI4bkhhdE5Jd21vaXhWaitOc2dhQkpxV045a1AxUEdVYis5ODVpNU5JdVRIdm1wckVuSGRQQnFQeEd6c3FFcDNaUWc4STR3UmtQRmxMN0drc1Bkcy9IUE0zUTlUT2FQVi9VenFvUEdvZi94bVNoRlZVRFgyc3FBYXIybFU1bkdpcnN2MWMzR3lseXFvd1UwRVVLeGw3emxMSTY1UUUvU3VsVkxhTlEwSWY5UGgzZWtaZnltVTFwbWIyZURqZFliUmMwTGkzbVhsdjgrTnFWUWdlZVozaUowcFJpbm5XVGN2VkNjMFI3cHhTUFFMdGRTZEVEYjZZeDlMT2NXR2lZSnF6V21sMzRZdE5XYThnK1UyKzBsTTJ1dFdMT0ExNnFSc1RKTGpGZGYxWUhteTVTMCs5SnV6eHhGRjZXYnZmaTE3QkRFK2ZDU0dqU1lLaGtwSGtubUVGUjRJM0pFbzlMWWtDYWY2SUtUTjFGWHdxYW9URHNuN0JCbE4zSGZsc0pZUDVGY0pQYkk0UUVvVnhONzBtU0xvU3hsVEZ2Wjk1ZUpEQ1VzbHRDQXQza0FEblM4dXZCSDZ3UHJCQ2lYUEN4V3o4SnpVVkpFeTZtanhweFFjZlA2Ym10dDRQSTVJaXVGeUwvRDJndVFyVEdBbTZScWRTUUdjd3Z5WUdPUWVDVnBURStDd0FiVmx3ZUpXTEVpOG0zMUlhejA0OW1wSmVTUFFMQzhEMktlS3d3a0t1Wmkwa0FzVjVZeFlCazRaN1JlUkllaGhRangxWXNvQ0lLOGExQmsrS3BoQ1lGWjNXdUZFMXBVU2NWaVJIdEZXWHdWVlR2dUZPM29rR3ovMnk3RW1kRlZEOEs2RDZpTnpYTFRMZ2lPMFkxamJEdGN6SlVWV3hUVkhHS3I1eTh3MVNXNjFTdDhIWUUzSkl5OCs1ZGUydkdsMGJTMit3b3ZhOXJ1aitaaHJoSDNvRHhLS0dzdFEwR0ZldS9zVTZHMUt0ZkVqZXpLLzJwOGZHM3drRzVHazVKZlFSenoyaFRGVGVEdjQ0b3lHMGlpcmVlRmRkTnk5RnFmeTRHSnpUWUxFczAxdFhNa2FtZ2UzL1liUlhyMEZmOGpVS01kU21HUDkvamV2NldVMWQ3aklSS3lkZmNrTWM3WnFnU1FPZWtTWDV1SUs3a3VSRGxiTTE5U1ZzRzBOOExEVEJmZTRLY2x4T0EvWnhrdFRmcWNqV3dvRU5ZUTVKK1BpcHdXV2h3UE5pRXlhbkVaVW5tNVFReGgzMVFocDBoZkVTcWorN1BsZW1YS1htQ2lvUHgvMnRQdlJqaCtrUUp3SUVOdmswVkdacDJ2Q2ZYS2N5NnhTdEpDWENMejRpL1VKQ1dTTkxOSnZJQkVJNFJSc2hIOGpjQjM3T3JFVjhaNWFEZUZTT3NXSkdCMFNORG5ycEp1aFFoMnZHUk10bEh0VGM4ZHBnNVNucFJwa1kxSUpJUTlEUnQ4bWhTY0FHSzFBSmpZOW5iMHY3N2ZmZm8wRHBHR24zbmF3c0Q5Z3ozNWFuQ2F1VXR4alVuRVJpVWJtOXAxeHJRY1Y3Wkc5N0xqUEpPRU1XK25vL2tFbzlsbDVIa2ovUUZJY2doNlFldTNqRjlmbWVrY3p0NGhqN0JrZjZSb29VcER2cTNwZFhrM2svRWVOYUhuV2pWRDhiT05CK1VCREdyL2JmM09pQU5vVWhpQWttMndiaUN1VGE5bEY4c0ZZbHJzM1pwTEZMdWl3M0NjWUpRQ1N0MCtYVUdQNzZSdTUzTlR0RUxremxPT2VUc1ZhZjdGaUxkWXhua3pYamFhVjNta2hjNVV6elZ1U3d1ZTZkU2ZjV3lYSkZpMzFyb2g0Tk1GZ1VOTEdkb3B4d2g1bXlWYzNZa3ZCNC9XM2VHYjV3WDlWeTRIZ0lkN2YxRXI2ZHJEWGQ4UlU2NkNQZkRsei9mMUVPL25DUno4bm4xcVNMSHBCMkNPOE4yc09UcFIxQXJsVEpEcjViYkorQmlhTUNtYmVieDFOS0owY25sKzYyT3dqa2RtRlBzL2ZQbGpBR2dEcm1kWnJKUkhZVjVIMmFYd3pzdGkrUS9FNkZ4bzhia2R5OTdndXIzNXRSclFDdElUc2Naa3dKUlpVTFpPVDFIWWVWcXRrdTVEdWlJT29ZVGtyNFFVQTNCR2VaTnFseUlRbkw4UDhoZEVrVy9qN3lWc1JTYUlzcG90OThrS0ltZmpLNmVhU2RneGNUditBQkRUNWl0RUVpNkQ2UzhIZkhNOHRMeHh0ZWN3ekdHNWtidEFqMFA4QTA0Y0pGdjdpNGR3Smt1NDBjb1cybmxlZkdHWWFhS0ZyeGZhbFBldnN3cE4yeTFjemVQMFdVZ1UxQnpEY3JwSENSR3Rncm1pamlmT0tlcUJ3UTFBeFhQajZBVW5OSHhlbTZMZ0FkcVhzNVFLd3o4M2FGWllBVkpqY0JrZUxDVWxPSzFZb2pZYWZNYUc1YmFOYTh6eWMxQWZiN1NlVHpqTUEyeDg5Y05CV3VXenhtYVdXSDFZVzkzRG00blk5eUJwczhGR3ovdk1Mdmt6UjlCV3ZhMTFpbVV3a3c2SVJzMmhJeG10ZjFjUk14bTNIcGNPQlE0TlBDeUlUdmgvMFpSbkFyaHVjNFZGMHMwdVRTU2FTTXViUXJGWFFsQm1sc2VvcXp4WFNab2QrNWUzWkVxNEJpTVFUeWNtc09DNHVKU21ZVGJxdG9lcGFJMWErVXQyUG0wRDRrczk4Y0F0U01PcVFwQ3JjUTcrS1pTMmxONXFBMjdhazZFSU9JM2EwaXJ2V1EzbEZJUndGbVRCcFpGcnY5U2JwQnpZWFVnM0NIbEU2N0JraXVpVzlMUTVqd3hqb2hkT0lZUFYyVkx1NmFaY1E4c3MxZ1ZtaVJNNEJFaGpFVk9mcjFIYkxJeklTcGxmdUo1dXE2R0Rzc3hhNGtYUHNBYldnYmRVdllXNVBaU29ydVc4cE9rZDd1am9MQ2NUQTlSZVY4Z1gwTlNub0RZLzh0NDlVZkxYWkF5VmRCbzlld1RDZkw5aEluYWxZd05peHFNdXZoWTdiU1RTcEtIWEVDOEdDU290ODUrUFJPaytlRllXUCtYR1JHVS9oelVrS0hUR0RkcWlQMHEzdTNsaEk5d0dTUDVJT01nNU0vMzBOM2hjTzkxY2k4UVdWNS9hald2b1hjWm9La1psMFhUSGFONjk2ZnpXVk1jOUp6bGtZZTBRemtveGRiTVcvSEdUS2RuRGZSYTRIaGpxV1dyYUVETEtIZ3JXMlVZYmZEcTZkenRNcGlZWWRKZXd5S1VnclBTeDQzaG11SXR3SGZvTVVwbWVzR3l2ZFhtYnBwMEdMankwUHpkZVdLNURseTdVOVNWTXVmNzg1VHUyNXkrdk5mamVxbURMaklaNmw0UUNaT0dTbGFrWUpRdWdUNTZadUI3OERnc0ZlVnZ1NEFTNlFmVjRnWU1URkRBMFNjUjlJSGlLdUtrVUYrdVZ4KzJ0T0J5SStCTFFseVlpc2w1ZUc3T1V0YkpCbGFHekJBYVBXVmc4dTIyMmhZZ1BwZlNPc0k1VkNHUUNQSkxodVQySCtwN2dTdlEwbElNVHdMYzFMMkZwbWtCQjgvRWNyN2NZSHgrQjUzYXU4ZXZtTGJZUFh3Ulp5UlJab3BIUXBjR3dIcmw0cDNBb3gxZkJwUGcvckZFRTVIcEtHTWM4R2IvelBXYzBINGxMZExDbzUrTkFMeTRPYzZNc0pqOHBZSjQrTCtOY1pQQ3pFTzZsMDZDWlRTOFF0Uzk3d1FDa1BoNWxUYm5WeEFNMHBsS0ltUFFtYWNlWFQyNk9OSjYxT1RQUEticEM2c0cvME52WXlEQ3BoT1RyMjE1TzZVL04vQnhIQit4bEpONTV6TTJBZnQ5ZXpFbWFYb0czUXN4QnEwd3k5Ny9IVXhYaVJJWGdVaWFEOGNqUXFYcmJOZWlkeFV4N2tDeVBrazlxUkM2dGRvWnVNZGpwOGMvMXA1YVU5RWpUdW9hcFZSa1hPSHMwUjRLRkZmZjJEYnJibXNtLzVIUklqbDZZdzljZzRyUWhFY20vRnhsSUYwWWc1RE5wQ2pYcTQ5ZEF5Tk54UllRc2xBOW5NWHlnN0FVajgwbFA3YjBHRTBvenBPSUUvOGRRMlFRVGpCZng1RXJHMUdOK21QZVRKa3hNcFdlaGtDdlVieEdxZnZRNWRaQXVHREU4RTFoei9jNVI5aGZWUkU1SVRNbm5Edi9wb2lla0lVMU9uWDBqMjNvNXcwWVVVblBmazdyMW1DamVRd3dCZ1hSK0U4WkkxK2Z2Sk9NdkU2R3JYNGlLVkVUdEs4ZS9PTURkRTJ2V2xVdjhGZUxiTGdFN2U1bG0yNXpBc09NVFlkcEVZTU9nL3p0OXFpMG9zWHdrVGlyQ2cveDFnRmg5QWZKc3BGUmZESFZ1RWtPdkFRM203MXZLU0FZVWVKTHVodHUyOS9iVDlOUmhyeHhSZTZIUjlMQ2FjcUY0U3BaOEZpTzV2VHVaeGFBVFYwalRaaHpRSXVYSDB6VEJKUEk5V01XZzRTSDJtWitwTXMzb29FU3IwTnd3eGl6bU9PeVV2bXZraU94K054NnppaXNlVjVwV3VJMCtJK3lnaUVTZHYyM2ViZXFuNVBPU3l1UzdMSEE0NlRPbnJxcWllbjB3UW9MUG5YeWR0TVV6Y1BlbGdJaEZWL3B6QTNKSGNQRWpjSGQrbHBITDhZMTVBazRnczZzV293MjdZQTd3b1N4YTFIaUlQZDdZQnJzbVZtNmJwYlNxTVl5UnRzVlpsOTRIYlgrTE05OFZUa1BDMThmT0VZOThOTTBHdDVwWHZUUllhSHB1b0RMNTNXYnFSRGhSZlVya1ZuSTlRT2VnOHFDOTJabFNYdnAvRnRDZEx2ZElRRmVVZHRwZkFQR3A1U1VhZ3NQSld1clpGNGU4T29OVkZXMi9VTzBzMU5hK3dJb2w3THVLZXFQd0RkL2lLVnBlUTdHZnNYMjJUNWg2MWw4emRuQllJRGhvWlpDeUt0U0ZJQzFodVdkTm1lam96WWtDT0plUUpzc01MRHJUZFZhamZzcmovREF6V2NqVE55VjlnZm1ySG1NWHdwbVFscXV4enNpV0pDcks5N1Zjb2phM1RhRE5ZTmFBdmZmbUFWbEJYWm5ubmsrWVhFSmZ1ZHNxc2dzRm9WeC85WjRzc29uZmVDTEpmQkhNR1o4Vm11OEd5dWRsK01SRjA3emV3WjZqZjhwUFlaUHZRR2MvbVd0NnY5ZE5nelZvTUpDTUF4bnZ2TXNpQXp5ZzRSYWZCTExTeExubFBhbkU0UFRQQ2F3T096L3hQQ0pnRGNDVHFxTERndXBud3Rja2E2YUU3cGYwcmovU3QxOWh0b1BYMGpLNUxQdGNvNFpnUWZVZ05ZSTRiTmlORk0vSjJwUHpXWmZEWUZWOFNzbk5wVGhBbDh3RWpWS2FnMFlpeGljS0RXalAyOE83VlhFMDFudG0zdzR0eW82WHVvb2dHWjhnZW80SWVrYVNFejZWUE1rR05UeUtXMzJyS000czRLMUF3UVNUSUUwWTV6eWVYWno4Vml6My9mN1VxUTdveHlBQ0xabEZRWXB1VGkxQTQwZjhrVjBMSTNRSkI3WnNnenIwZFlxL0RzREt1TXdNT3JUNmFrRE50TmhCQWJXT0k0OHZhZk44SHg3Rmw0ZjlMNFNEdzljQzJ4clZsdTdmd3ZkL05nMmtoN2x2eGp2M1RDYUU3YjRwcms5YzRYalNUTFBCSFY3WkNSSWxJZmpES0JTeG9KVnhEdk55SG5HT2hCZlJZQUZReXRMeHowVjIzUmJNWEk5Nm9raGN0b3Z5SVRzRVA4WlhnWHRiVkpnaVo5Um5YQndpOTlOaDFtMmgvSVMrUS9lWWpURWpyZUxtaUIrNW8yTnFTMWJQUy9JV2NpdGtzUzg1aUpmd1dxUk42SUJFc2hsT2twRjd0L3BZaW0zQXR3Wko1Yk5NcW8vREkvdy9BcUNDcmRjdDdhalRtSDlZV3lwTC9aY0VHU25qNEJPK0dvb00ybVpaajJCT2FSa1FDTUtQU0QwV0NVMUQ1MFVkM1lBWkEvdGNzQkxOSVp3ZnMyUFV3OEtaRTB5WWxwd2FJaUx0UHpwK0pVbkpHTVhtT0NTK1I4SnNNZ2R2K09zTmZRSXB0WmxNUWhLKzZYRzM3Uk5yeEd6MGdvcWxRS29ma3FHS1dGUXJSRjlFL0VpaGtFRlMzS0ZueFBNTkRRNDUrL0hFUWFBOVJ4UlNJcVpoVUVyRmFYMmFyVHJXS2h3QldEWUlVa1N5SnlaRVZ3TWhoNVp3Z1FtV3BvTVYrVmpQd2NuS2V1ZmJSemhSUmplMElRYStsTDRFbm5HQXF1ZmlyTWtzbkdDeURHTVNzYUJIelVXVWVvN0JGa1Z0QTlwNGk0eXJqTG04THQ4Qk9RQ0hHYzhsd3IxVTZCb1BCRFhrV1hJUFVkRVFLenZUc3p6L1d6a3J4bnBxNjl0SiswUU5wOHRTYU1MTUoxTVl6M09iZ3YyOFQxRUFOUVFaL2Z1bFd2dGJsTW04S2x3MExHQXlpcHByb0Z6T016c0Y4aG9rdTg2akpseTJRMGZwOEhYSVQ2UHRoRmwvZXVRNTZoSEpUUU9lV0h2ZjFIdWNTTTRYVmhLQ21GTmQvK1BESDdrL1V3TmZYcDB1LzYzcDlXRDFQVmlvM0VlVElKY0NUeEdCM2RKa3g4Wmh5YldZcjhtZE5NQ0docktoNDdscWNlOUdFcm4yU1E4YmNMK2lTL1V6bFVEKzhlR2FQMzNJanlUVzBWRVVySi9ZMFQyRFFTNlQ4N3Btc0R5UWNaUTFMRHJCS0NmWWlFZndHSk5NdldLQ3k4b2Y5OGd6dUFNNldkY0srbFN4alJrc1ZuQlIwZVQ5SzUzbVlReU8vRm03ekRmYnlSNjVZTWZkVkRiUnRjdTdVRm5aWWdrTU9yQVNCVnFZUzRnUWNjOUt3bENGTkRvdytpMkZFSTcvTjdicXFwcVdUclMyeHJWNGFpNmpwM0hKMWhmSEJlSnQ3MXgzNjIxempBUVlsVVFPMGpZdkhaSGYvRmhuUUtsa2o5dHlRVGRLMW90TEVNTTZVWVB3Y2c1cjRacnBuNmp0Z3RyQWhPdmN4N3lvM3MwVzk4eCt1R21RS3RiYWxXSEZUVnJJMlY1NXVyb1dFMURHVkozc1o5MDVDUEFPWVpVYXhQRUZUOElRVC95NUozSm9samxuL1JiVEZSK0l1VnY2NE9WOVZoaE5weG12YmF2bStZbHI0TDJHY0dvYTVSWTBYTlpjUlZmdkZaZVhIa1VTNWVUU2x4N216UEUrVjlZeFp3TEQ1Q2NWTjdwMGlzbU1LWmpVVjR2YmQyYzJNbkNGTExnQmp0Ui92VHRlQUlrTWxZb3MxWldrUjhXbXFmR0RsbHRPVityOFltbzNXQkNsL3lmTmpjTkFSOWJTTGs3eStsZWhBOERzVURWVTJ2c0Y2cmNaMzVzZFR4b2ovZi85YmFIVVRNK29MOStHZXJ2ODdQQjhIeGZvUEkxTHpTYkZ3Qk5CcWtRb2RyOS9UNHFTWG5ubE9KODFzOXVhanNYOVRIWHVuNUFWZFFaeVF3Q3o5cFVlYTNlcDF1SzRFeHloRVo3T1JpWXMyYmo0USs5aDhKM3ZQY2RrL1ZDTG9hMkJGVVk2eHlwZFZsR25wOGNWQ3Jac1phS01IMnY3clBuSlZualNlaTZHSzVSNUFNc3dSWnltSFp0QXJOb0xSODBIL0VyR0M2T2lTYS9aZFMrb1QzRDd0Z2U3ODJRZ2MxeFEzNlEreXZLSHFGNDI0SW9oRHc2SnJVNDlzYXQ0ZkkyM1I4UjJVTzNPV3U4aGdtOUZjemxTVHNqWU5vbW8wd21TWTlpZVlGNURzcEsvZ2JyZ3l2Y08zTXc3Z29maFJROUxMWkF0dHdCcU1VZDU2dFZCQ1k2aWpnQlVBVklVK1VwU1RsY2RBNVVqUmYzaWZsMjZHM1l3Y3M1dFpNQjROV2ttWitiWWVLS1JNZTZOUG1BM0VhS3N6WEVJUWpVam94cm5pS2YybHk4WlN2QSs3MkFTdmlZSnBWR29WbDVhb2g3bnA3RHI4UnduS0lidkFQY1FEWTBGOGR1VzlVMnd0VUY3bmJGVGhFZGdkSTBvb0pkSWxtbG9mMGV1UURYMFBXWW5uWjk5RXRrSVdQemZQM1E1S1lVZjN0M081aWJPc2VFbGQ1NHBEU1lOY3RsSm5HV1d3Mk53UWQ1eXA5SHRyUmNOOFlpOENGamJPY2JRMUlyMCtuamVsOExJY3RnWHRrSENXSXZkRDBWU2k1ZGpkdG14UzdOYk4zTUdZZTdUZ0MrQWlyMFdhay9UcTJjaUxnTk1yaGxYVFdVOEVzVnlBM3NzK1F4REdTNVhqWUNlRkdLOWpSWVE4QU5PdVpOZHFJMmg1WlVTa0ttcm95UDAwRlF1V0szRVU0NE5uWjRjVmZyNVBiUEkvWDlDVG0wRkZBd2NnWVo1ZUE0OGlhYm5PZzN4eWFCUEgzU25LaE53ZTQ4Sm1CSWFHYnpWdVBXNkxWNjgyQWxBY3BlKyt0UnE2Vk80eWdTUVRRU2I3Q1BLWHdFMVdCKzI2ZnNuejVnR1huQ0dDZXR0NDlKMHhwYlI3R0J2Z1F2TFN6TndBckF1elZJbWxKNm1rTXY2Mm1yOWZad2dTVVdnQ0pHTkZRSDFPakxlcFdSNUFkSUlRak1zNjJXank5WXdsdDVWNDE0R0l3c2lGL2JuWmFzeGc2eHpiZ2lKdmxjTzJwS1plUDZHRnRMcXE0cGFPM0NEYVdsZTRwUjEwOU84UjN6Q3BOUTdLbi9YMUtqY1BjTEU1Tm94NXNqT1c4Zm5FVXlpZTVwK3dPZzJVR1RCL3kzZ05QVnBMQkxRMGhuejdHdUp3L0NjK1VJTlBnb256UGFVazBmY2VRQzZkMFZrdFV1SVozYzVnS2Nmb1VFUXk5MjZSN0NjUVlndTA1bnhZT3BZanhjUzB4MkFDb0sxcG9hcCtIQkdzOWxRWEN0aC8zZTg0SzZma0gzeS9zSXVvQ1IyMFRySGN1TmxMaGlnV0o2K1Y4LzNUMnlaYkxHbFhFRnQyN2tDVnV3YXBvb3plYTRuNGgvY1JrZUxFZ1RhWnB5cW44UmtaODQwN29xM3VPZ1p4enFTRGRVYXgrd29QbnA2dk42VmxXckI3b0hEQWU2VWlldnduRnR6WFJia1pveml5dFZSajFrVTI2U1p3RHZzQ3NmdndFbUNuK0tFL2toNklBUDg0UVhab0pXcUN6RldyRG40YkxFMzRRUDVHREtseWRsT1NaTUtsb2FCS0JkR2pvZUZPNTFocEVWVnluMlVNMXMvQ1BoRUJmVGRSN0wzVk1PNGtlYlEyeXo3a2NvRTN0bGRsSnNBdG84U3h1dnlrWjBYRXg4RDBSWmZyUGprc0hMZG03anZDVjRDd2tqZVhQamd1SnI3NG9KaEo1ZGh0dTF6QU9nb2lVN1pFTmZLQkVDOHNoaXJaOUtDMHRBNEsrSWFVd2E2ZHNuamh5WGQwbW42YjZhU0FyR2liZmZvL1lTa1lHalNPd0w1M1poNWliTGhtTjlHTHhNQnRISmZwVWZSdzdiRUpERnJCK2pJVXpESituRFp2RnE1aS9KcVRwS0tjazJuL0g5RHNXVGZ4REJFbmZROGtQZHN1NzF4ZDFRRy9Ua1AyM0lIOXZlMUFoRFRHRkhFbElkTWxBbmtkZU15S2t6MTRyYUQ2dzdlc0RMT1BSd1JhQmlXS3ZFTXVxNkovbGtKSGxhQ2dPZFU3WEg2eEYvYXlKaTBJWUh6bllVYVU5eVF0UzExMU01eHVKMkt5VjRuUDdScUw0VUVYWWZMVHRhRE1yUUdpbzVMRDR2Zk02c0p6aWFJV1hqVENzS2dkRlF5V3F2dTc2YkhJSldDcEZnOHVIUjFWZU82MHhYKzI1QU8xSnZwT0tzdkhWMDdCV0syRDlONnpMNHM4ZW1QZks2Z2FweGVYeWtVMng4d29QeWNGcElZNkFkMUpZVGx0UzJmNHltWk5pNFV0Ull3Y1FobEVZQ0VBbzR2bEF2Y1VBS1ZjQXAzVFdzUU9mYzN1UkM5L0h5NjI4dUFHWTljY1h4OUdHampBU0hYSEk2cWk5RlZGSEpxQ240WFhubjFDNW4yalpGNWkxbjV3c09SaXVnSDZINTJVeHUxOTZhSTFNOExrNkNvckZPZXB3TGVkeG4wQ0l0KzEzWk9INTVsOWVqeHVCYjU3Z0FkbHhEZ0xUV04yR2pFcFRMdlNHMjNVQk8ydjZiS1hYRy9UQTJBWitKZm5HYWtEck1Zb09ud3lVSGNLeHA4VGhJYlYwVkQvQ3ZXZ0xiMkRpQUxEOHpSSm05ZFVqLzVyUVV0b24zekI2ajcxTk9YT1BlRjhSNitZZ3g1ZkZtVG94bExjbzdUamxyckd4OUVjRXAva2pYTE9qellRUUkrZ3hMK0FPUHRseGRjM3c3OGYzTU54eU5EWVI4QnZLQzE3bjNLN2hOajFzTllUd0dBUkgySExMT2NUMXlDMnhQb0hRT2U2ajB4L3BCN0sxTmRWSS9yaTVtVlpMUmE0a0tGMzh5YVNTSXBzdkhvTWlZQm9aZytqTUJmVjBsYnoveWVSMmgvMXVmTFpJNERONXFHT3REcUVNNUZzdC94Y3BOYnFNSmNDOXk1RXRqSk1kOTRmSXVRMTRYT0UxcWN0d0JKSFVORzJiVzhMRWhIMXJ2bjhlM1lzM2lseDI1ZlRQRTd5OWN1T1VKOXVXRkhvUEZoYWl2Ujhoa1RWek5YUi92dnNDVEJaelZZY3lTZ3dXeGw4Rk45K2pTR3ptUDlKcEdnVXNFaThXTytwQ0JDNzhMTm5KMmdVZWVSVGhJL1cxd1pNN1Q2Sm9Ea0FYT2lDZnJIa1U4QWxHZUJoTEZTQ3JsYjRMSWc2dDRDclh1cTZ4NHdlU3dhTXpzMjRKRE1UUjUyTi9xNndGNHNRcEgvU1B1NGFKcUZRRU91OFMxMUYrY2ZVaEt2TnplTjNjQy9VVll6RWZDMndueEdHV3BnZmhBTVVuUHVDcituUlBMZ3NTekZFUnNWQVRZOXFyMHkyckt2U1ljVW9PVEdrTk9Fb3hLWmZiSnZzd2FYclZNYlNjZVMxNS9ZWnVJNnhTM0gwZUw1QS90YTFycS93bUxPL0wwK0VTSTVoVENkVGx6a3kxNk4wbEZSdVJjVTBPUzBJYWNLcWFTazVnV2ZaeFRzcEE0Z2NiTkRLY01zTTQyNFpSN1hNT1JTdGc1UVV5c2JXUGh0alZ5Zk1tM0QxMG01LytyYjVicko0ejNYRVVoTXFpUElmUEtTZjJKdVEzQ2lPWjVJcFpVK2t4eEJoMmZQL0ZORDlnSlk5T2J0SFUyQjZUaG1tU1MzVXI0YjRpYU82NXhEekVlYUJKTW5iMlpBOXdHTDZlNGtyQlVQRzFuaEFmWEJEZnFpVkdDejc4cjdQL1JDd2JFVU5QaEFFZEFzWmsrd0RkcDNWUmtYNzNBNXhsNGxkQ3pFeGhXOTRpYldTYUdRNEh5Y2Rhb0hpVEV3Rk93K0JzaWJjU0wraXAxMG9vYUlPb2cxQ3VnWGNNREFXVXV3ZkJ4RFV6bG1IWTQ2bHpaWlhYUkhoQzB5OTU3anUwWGNlRG85QnFsTWZqYlhBUHE5cXJBTFk2eGxDOFJOcUt4VkQvWUFGSWhXNXQ5WVU4cE81dHFMWnE4T1JQRHhUN2hSZHJvZm9JZ2pQNDdsQmVsSkY5WVhBS0I4VXRsTDIvQW5OS1p2bVlmOXZvWW4wOTB6Z0Urck9SRGtMSnN6ZUwrWXVxZE5lY0loeEx2Uldic2s0TFBTLzN1VmF3WnY2dHM3ZmpjcnMvZVRlalpHdE9LbWJRQXZIMThrSlpZL3I5cHYzOVg3UEVyV3JpSVV1YU1scVhzNTNJbTVjR243dnBwMFlJQ3huSHVkUW9IWTdpbk1SM0Q5YlBuL2NwNU9oa1ZsamtjMHhsTW9NcW5mUjVEYXpuNXE1VmwrVlVoajAzN1VOZm02clYxZDJDNnlKQ2ZkeHBUS3JJSFVGTi9hd2J1bGZzK09seUpIdHByY1htVHU0d0FNVnplZUxGUFZSaU9sSUN5WmRaVDVpZVJwTzlacXdCa0JpZzhkdlRIZFp4NC8wRGxKaGJKcURGUXNBRlgyOGlyOGtWNHVFU09kOE5WVGJRcE0xUTdrKzJnL1gweDdRUURPRUJVQVovQlVha3kxNGhZV0xCaHVNZk1nc0t1aGdzNlpqMVRDSUZsSU9GeldIYXh1L0RmbjhVdkhCZjBvcDRyRXV4NHpDOXlKUmdTY24zdS9ncmxGWHpSY2tiOHlhVTNaYkZsRWlYY3hIMGlFWkxqNDBvRVlCSTJtZDJQU3g5dG5wb2FFdmRjRnpPb2g1dytURzhyOUVMUGI5RHRuUEdCUmJKbTBieDJsNkVjZ3Z6QTh2YzJ1enBYWDlOMk0xd05EOFpSdXJmUitUVFR3STFKU25iNG9idlMxSlVDRnNkcGF1NHpFRDZvT1IyUlIzRlZxalBicTVKRjZlVTYrYlRBNDNDekhzaUw2UW9UdXpKRExiSGZIRVdlRENzTitibHdPWXRCWUZ4S1VIRFc1VUdlRWMyT0RJL2p5ZmFhQ2VGeXBzVDZxWW41QmQ0Vll0bTBxc082eGl4MkkwTy8yMWZSdnhyWkk1MFNXMGdlZTRDdVFqWW1TNDVMMXRGK2NqM1NyeUFQcWxDZ3VNSWR3OFhPalBiTFlyUUVJZ0dEak5jWW56NzkxdUtTaWp3bkxWVjNSaGt3WmtJdEZyVVNFelNQcGFKWWJBb1ZscVJueGpFanVZUHNVL3hNemFxUWx6YnBoYkVwelhYVVJ4VXEyaVZDMjdWS1VkT0h0Z29OdU9JNlgrQWJsZ2VJY0dQTU0zam1VOTQrZFlKazNIZzk0NmRWNUpJUFB3RHppSEo1endBMS9hREdJQUx6ZEF5Y2xsQXh0TDlIMkw1eGxXYnlHUU1kUFladHBaQmpVMFhDcnJFM2FqVHhOUVJKcGY1MVV0ZU9EUHBTZU15c05uWmVtTmR5SnE3OUV6Mm1FRko5djF5WkRXL2w2bUJmRlQwYTFvMjFKc3djcFZoZ2F4WWZJZUY2WlVsRWg1TzVabmJ6TVJmbUs5TEljSnlNcmtIRW95ZlBuTnJvOExBY3ladUt3ci9HOUhpOXBUUyt3bXlsS2lmdDc3LzBtZm1sNFdwY2wwMmZiWkxRZ0ZlbGczYTN6WHlPTklUMDlmbG9NbjUwdlVHQTB3M1ZqcU5pRFMyaGY4RlQ1VW96RnFkY2V0OXc1UTBlZVNTMi9pbVluVDVrY21YalNDbElObysxanhScHZwTUlEWWM2UStiSHM5QkthOThGSkp0ZkMzZGhjNlVmRE5ZRFlBdFkvVWhsSWZ2WmpWZW44dnhEVTRxa1BrZjIzTTR3WFFuTmo4VUVHbml2aVlUZEFPU0xTR2l2M0J4cUtjWTdpWTZpR1RoOTBoUHpOYzlWais2NXpqMHg0aUF2NmwyRjZwbnRaaGUwSjRCQ1VvUTVFdmJIZzhvSjVRSmFza3FCNTB5bStQdjlMT0tFemJoeWg0TGNnZHhNVU92SXIxY2hOMFpuNE53a2l4dms2cUorcE9qWGdnSm0rQWdJQ0FnT2VmWVRkTVozMXNBSmdJUnJvVWh6VjI4cUdxRU1ROUFnVSttRnBTUEl1Mzk3ODU4cXpNR1hnTkFlaEtLa2lvekFNdUh1N0Q0eFVNYk5obFI4YjlHa2MrcE5vUmZvd0M3UDFJaTVtT0VZRmtYby93Zlp0VW9MUThqTTU1QVI0Kzd3eDZPWEpOOEQyb3REaisxYXo3Z09KdkNxMXJOMWtQbmM0NGwxdWozVk0zWnJEZ0s2YWRuKzNhL3RwSUpLWUthVUpLbTVtYlZTRjZWYUxjY0RURW5Tc1JWWGFJWEZoWU9iVVRSWERrVStwVUFRUVl2RFhmeWtkVGh0M2NYQ0RwOU1kRi8wdGFnYkxQTFZlVTltdWo3NXhGTk9qOGVnL3hDeHJkclh2QlQrdEFiTW5jSG5VempUQm1nc3pqN3ZlSElUZ1NqTE9UL0ZHQllLa0pOL1dCczc4ekFuVEVPS2pxSFF5Rm5YclpSemVMQlVUMXFFYVRZTGVEbTNkZXpYMGNlT3dpYmpGbEpvY3pVWXEvK0FUNUtqQXI0cGU2VmhvbnJmU2lUWWgyRFVodk9aeWZaNVh4K0hCbXg3dHlFZngvOXU1TVRsSWNIUld4ZnpORzlwMHk3WVNaRERrdmVqbUpZUDlEVVRjSnJraXNudU96THZ0eFpJT1ZZZHdaSkZ6L05LbTFZV3RzRVoyd2g4TEJjUFcyRm1HMEFKbVQ0SmRqRHordGNkN1Qya2VEOUJ3L0tPajRSSFJjdWFNNDZzNWdzcEd2aUpSOVlOQk1iS1lHWjU4VzJZaWpsMGxuSXdjbXBnQW5lOEVXKzdiMWNNSWpCNUN4SG5nQkp2M0haNXJNZm1mMHc3MXRVLzRMRzI2bWthWjZMdTNDT29nVWkxREdUS2o4bkVpNEt2d0xtWlFNMThnakZ0YWVCd2dXei8xWm5YZ3lNRDZCa2drTGJMNElCQUJVamNnTlZxU0svbVB5c2NnTGhXYkNsR2xWbGdqazkzcUpZYSt6cVJlaFZYSE4ySGo2eGZuOVVnckpnY3ljc2dMSitpdEExdkZTM1dXVUd5OU96VWc3U2xnbE1xc0VWeEhDei9lYmloK2hxbSt1T3h5QUQzWSt6TjlYSGRPZDgwU0NtUE04bGZqM3lrOFJSMktCdFBsVXd5alZTK3pKODc5NTNrZXNSYjZJUHN6QVdCRWdYeW4vQWl6aEUyL0ttTU1PUDNQR3Q0WGRkekNIaDcyT0dSWU41d0dFc2d0eFphNEJwV0EvMXlNcldxem9wMkxZYndlRTJRUjFkNi9RN0lPY0M2YWdqSFBkeFBwa2MzUGVjVTVUQjBKSzFZUWUwek5CU0lUNFlabFZUOFkyMnFndUVDK3M5TzlHbXdiUFVmWlord0t0UFBhZGNOWnE5am1DeVdHNXFlTE1ybEMrZGQ3WVl1dmVndTNmdlNCZ3BMYWRETHNaR2FtRzZ1N0lsTkFIc1JaanFjbnJEZFpJS0Mxdzg3Q1YrR3JmdTBCUXlyZzJqWFBSaGZBVmVIYVJzVFY5WEpsWTR4VmZhSHdNM1ZQSmpLMjBYTy9TS2JSMWJYbU5QTkxXK0trbUw1ZFZvbk5QdDVFWk1iR3JqcDdzNE8yM29KckFsZ25nSjBFWHZZMENSY0l3bkN4QTZtbjc5TVFxZ3EvRHlrUFQ3bHVLKy9qYWtvclc0NVkweFZJTVdobGQ1QU02VjRhTDZCYVd4N2Y2dTMrdDFFMDhkOVVlc2h3cENTdWQxZm5mNkVFcjJGcFp3UTI4cHZtVTVBYi9QdmhuUzBpUnNLY0RhWFpoZUJnbmRLRVBpNnBJRFBPSExHcjRhNlA2Tk12b3hLa25GbkZES1RkTXY5djRza3MvaDZESlMrbDZhSHlHdFVvc0Q1bWR5WXBvbU9IWHVpT0RyUy9sMUxadFhDUXJSZmtFckhqL0NJMnZkcmt5V3JvOGZpYzlCekVGdWVZVEF1WFg2WlMxTThhYW1LMVNSOUNuaFM2TlJtb3U1cGJiVjgvOEwzWWxuSy92Nks0SE5SNUZQUGdIaFFzcnNaVHUxTy9kZVJ4Zk1uc1VLZTdlYVdaN2I2NXBvL0FNZTNJcnk5KzV6cTEwNmxITUtLL05JVUdWdFg2UDh0Yi9lcVVNaUVheDcyY3o5b05yTTV6VW1BaE9DNkxRWkVxbGJnSFJNWk1XUk9HZzZuczJTalM5OTdoSDBhT0FkdUZONXJUMnN4S1gyUEh2LzA2azZnRlZySkIzTElINzZ3b0pwa2lMTC93alFhd0dJM1dsUG02UEZLS3B0blVLNDVEL09udzRpeEpoU05jQ1NoZjhvVDZuVG5ITUhWRjVlN0lDTnBJWUxLVmhIZjYvTGRRNWRJcWZzZ3JLTEZYVmkvTnoxb0RBR2FPK2FEVFVuUkZ3a0VLQ2lVbXhuTHBoVi9Ga3ZsMzRJYTNpenN5WE9kbmRYUjBIbTdFM2VuK3FxbnAyYTlQNHlOaFl0L3BTc3J0cWF4U0dDWHZKY0tmdTZ6RHVORExpdUU0Q0NWeWkyZVBPbGhqUG1zNmhLMkZVTHg1THB6emNlbjVTSTdpa3Rra24veGtrVW5BZW9SbFoyR1N6cGU5d1IyMUVwYmFPOVZWUWsva3I2L0pIN2JUbEtqNnI4d2dWR1p0NmVUSWY5VXBYV1htSzFTVmtoQXBhUExTY3RXVjBocXU3L1JvWTZzcGVtZEpreFhMN3FNbkpNT0tKOERGTThLNkRPcnJFajloNW9XbkE0YUpRYVo4cEwva0hnbjRSeTB0cTM3T241TVg3OC9EZG5FalU0RGk5VVZlam9XY0dzMkVrUmMrQjA3T3phdCtaZEhXRG9HWjJzaUJzbVRrOE9VVW43dVFrbk8yVmlQM0lBUjVNM2NpU3ZPV0pkU05uT1pSUjdYNEJFSUVOd29hbzZtenJqeG9yWWN5czdXVHViTU9EVGJVUDduN1FzNHQ2eHhtNzgzalJxQ2xocVBUc1h4TFIzcG9KZGZwenc0eUJCa2N4TnhpMk5PcVU0bmN5dW1YZStmcWc2R1BsYXl3ZVZ1dVpyelBEWjRjZ0F2b3R4THNNZ01VMEs2NDdOTERpUC83NHAxVElWRnZRd0ZkdHhMMXJ3UjN2Y1dQR2JWZXFnWVhXZGliYlErVGFFL3M0YnFSRGdJK1JTMXVMeFRLMFVXMU9UdFd5aCtZeE5WUTFaTlYyWmJSdXFGVWR0dE1lZTNnQVo2N3BxTFYwb2RLa1g4Y0Vla0dMSVZCS1VXQnJUbXdyZjc1TVl6TjBYL0FVYzJNbzVwTmZTSnRGOW45aG16a3BTMnZ4bDVDZVdXMGdLb1lPKzk1dUN4N3BhOFRNazhiTmY3bjJzeUNkTU41UVJ5NTlJS3Ryc0JxZUhDaWtmUUVrd1RPZmIwZkdEbmVxcExKVTUxSlIxcFpXL1B4VkUra3hncHMwczliUzJ0NENXZ085YnV2NFo5NE5DODRZVXJUc2pXbWhGUHk0YzdhalNLVjN6WEJSV25CWFZSb29WU2owV0VDdmsyZUFKTFhZaFgwU29oTXF0c3JDNVhwVzFzQ0YwWUVoTVZFZXFBZ1FvdnhtSjRvdklqcnZSWkJVVXVmL2h6ODlsNmphWmNQN0RCdERlN3oxcFdsMzNDSWV1RjE2NTh2c0t0UFJzVEt4emM4d1VTbndhMkZoRmpRVGE5L3oya3VXUnhQWXV1STdteFVsUms4SUl4K3RBMm9qbUVMK0ZwMC8wdmZHUjlESU5PQS9UUXpWbXMzbkxQRWNlRExYVVlFZ2VvTXFRNU9ST0lQNnBKVlU4bEllV0FiRGt5aWY3THpPUUliU1NTUlNOQ0twSVNIdUxocHJzdFYwWDdtUy9la1hTbmV0eWpRdFBod1RuYUxMRVdQeW1LUmhSdnZkWlFyZEpJMUU4cEI5czVLR0dXT2cweTd4RS81QjlCMDhWTDVCNTUwa01ROC8zb2pjdUtoNjhzMjhMSjhJZE1sWHNBZVZHdndtci96bGJZYUsreE9Icmp6cmFTcHdaT1Q2SzdqZmZ3cG5PYURxcUZlNDdaMjJjUi9zR3lrcU1HL1Jzb3J2NEJRYzZHYTlpRlJKRGVYQmJ1QlFNUVczZW1OVWpVRFlrZWNpamhXNnAvS0xxMFNYbDBpWTZWblpySUpJdGVvcXh2MVgybWxKZlNJRzlZZEN4cWx1U2dtNzZ2eXQraEdySk9zenBsWjFKc1BaMU1HcCt5cVUrZExCY1hyMmd4bndNY1VzV3UzNG02b1RQVE9oZm5ZQ2F4ZEkyOEphNFdaRk8za2xpakY1ZTJkbzZFSG51UkY5NXJFUTd1ajd0U2p1cDFyYXJ1RVY5NGkvUFBPN0s2NSt3K3FmTkp3WVhmc2dGQVhRSEY4cG9tbWovaUpNNzV5YStCZWVpUmRKbUpBdE1CQW5CNXNwUEFEM2Z2OEI3T1kxbGpnSTVBVFhCMHRpRFZMMU1rUWowZHR4RlY5WkNCUk5lWXY3UGNZdkQ4ZytWTGxrRmpNNEdjZ3hITG5ySHFYOTVQZCtJLzlMdll6aGo0OC93bTdrU2doaUJqN2o4eEhhQmJaSkFnS1NXaldrU2RDcjdaZkxEekt3UlRtNFUzZ0JMRmpjQWdGbS9GVEZwc1JCZzNIdWFDR3MxMnBDdGxLRk55d0hPOHk4RVVjdmphQytTU0ZhZFlkbElnWFVqNFBja3dhbWNHU1VFdGtwdXBoNFVCOW9YeDhRL2hNTmp0M1pydnZsUlhSWU9pSkZZd0lqT2ZGaXlhQ2hrM3Z6R0xGdWZxRFkrZFFxNU5QYTJBMG1XQlE5TVhRT1ljQWxkeXh6cXhBK2xjaFZWWmFhY0NTL01QWUdVSHNGZkVWY2pwWXJBQmt6dEsxVXcxOXdkNDZXNDEwMnovSDV2QU9XUDlWVVNNL1Bud1ZvYm1jT0RQNWltM25JMVRiYXlIWjdRU3JBSnBCRXFzZm5acWpreVhlRnBDY2NrOVRyZmJldnh0UnE4dHlJbTB2NnozYVFoUnRRL2ZhdVRzekpDem1zQ21xbDZYcHFnL0FZSXMwSTBhaGk3TGhOYzVtWUxNU2h1TnBhckpGN2hjQk9DNDEyaVVPTGllcWhod1ZzaW5ncTVJWmxBYXh4STNMS0IvWVRSTlFOU1dmMmVabjQ1eWZHVnhVZWMzYWZXYTA4R0l3QVEySkZtSHZTcTNWOHh4M1psRlhGMHpOODFpeE45YVJSVFo0NUl4Qno3aXBIMXNGR1pQRUkyM2s3YlBPcENRQlJ0bGQxM3ovR1E3dEU5YnNlSEM0aVBMd2RPRDlwZjhvaURtSS9qTjhxQjNrdkVkbHhZdE11dVRadW9keVB6WENZTVNOdFdibWgrbGJVMGgzN1BOSmVwTFFHamJHY2FpbnRZdFZZdXR4Zit3Z3BabklTVEd5Qkp6d3pZdklkODZpd3JuTktJNk1udCtOK2dSTTdnWU5QZFZwcXY2OHRHbmNpaFFPY3FvNkVaMXVnd01iU0RGNGNJV0N5MnkxOUFKYXFiTkw3SEdWVXZzc09uRktjeURIQlpRU0l2VmJGeDZZNVJLRnhHd0kxQndxd1ZPWmFzQmwxcjZ0V2xaNnhmaGhFc1JnTTJXcWhkV0tlYUtoREJWKzFXN1kxck5iek9RQ0RkMXZJZE8vSVd6MEdFc1F0SjgrbEFDL1VJODBlV3JDRUE4ZFdBN0ZCZnIzVEw4VU1IZ1BpUFpGcWhwUGJMWWZmQkMwV0FEcmpOdlliNXM5c3FubGdBK1BjeGYxbEQzMWxlL1drcSt4am4xbE1YMk5aK3Vreit4bjMyMmNuOE85ZjkvMUNuOE82QU9nTlM0cktVQ1NQMXlHVGxyNktqTUtyZWhUT2NkU3ZMUDJ2ZkVianZvY0xIUVQ4djhEMzJDSnJvdWdpKzZTOHJoclIzbVZ0bTBUNTVKc3IxNVh2akFFWXJWdnB2TWhkVUF0VHNoclFMbjYvL205WHdKV0hSamF1eVp2L09FTG5xWnhSbWIybE1qN2pmVDlEZnlic0VrWUJVRStPdy9Cb0E2K014L2VaZ2dqTnNXYkVzWDRTV0NYNitZN3hTUmpoRzZDM1B5YmMrN01PU3BpQzdLNkdHdFBmT3BXOGlFcm02SHNkWkhEaFBBMGFIdEYvRi9NWFNFS0Y5TFRJZTE0TzBlVm1qL1RuTU5qYVlXYzFXcVpPZGRuS294cVFaT2dvLzJZcFlsYVplMTRjZDlLRUg3MzZJL3VQeUFER2ZKU3R6N0lwaEJwaWtPZjlvdURNVytYc1hqM3BqSHBKUjNCMGNhQWw4cnY1T0xSR3doWG5paG1uTGF3T1ZEZXFZWjlCNXJ0a3FVb1g0a2MyU2JhSDhjaWZQakFpQjF5Q0xYMzA4TE96aWI3MTd6TXA5N1N2em5LVVl5YytFT2dDVzV2Z3dld2JESzA3VG1US1BPYnVyeGFONFZYcDdkaEZiSTFyQ1hCOG5OWW9rSHR0ZVBaZUtwY0tpS3RzT252dnh4ajNManJ5MXVGK2VuUVJ2TElmS0hkekl5ODcweG56YUhBdUkxR0JRWjF5d1JESUh4WVFxM2xlTTZyV2pId01EdVNReHpMZTVYeVN5K0dLUWQwcENiWHJqK1F5VmU1YThxQTJ6Z0VTRkpkZm1ubkU3L0FHdE9pUzZsek1nVmRId2F3c0t5SmJWell2Z0JnWFhYSFFvN3Q3Z2VYcnBsdzNHc3pOUDZQOGgyR1NhT1dRN3hBQnZXTDVtQmdxd0pXeFNuNk1HMzcyMFR1d0R3OXRhZUZzS0ljMFBJNWdKaG4zZ1U1Y2RJYVJuYW12Q1hXejdJRi9oRXhWQktZbGFWK1JxRGdvcXMvUDJJa2FHSjdPMGxkQVFnT2hKL0pSb0RYVHhNVnlpZ0RzWE9BYzhBV25PcVJCMzMvSUhucXZrblpyNWdZNmZoRTZCSWJpL3BDWHVmV3p6TysvcXFPVXFsYmQ3UmFmOG1seUZLdEsyQ3hueU4yN1BETDhrNVpwV2NqQXJKcGU5YkxCQkQzWDJ4aGtXMTRIdVR4QXFhK3hubURSTTRvZTdjVDVRZXk2M2tRUnhlb0lPdFA0TEFwcTd2Z0xmRTVtYUM3Tm1sQkNnT3N6czM4L3d6bTZ2SzJvYnlQRFE3cUpDK3dUZ0RmL1pHb0l3MTdoUG4rSnZ4dlJQSGlUOTZUMXl1VzZhT0lqNVdUck56cEYzN1pXYTdVczZrWVJWTDhKUEd6Ti93L2FkNjV1VUJlLzFPOHdNcWpjTEJQdVpHRXp6cXBvdSswb2NYRVRiOU5jU09vcWxWNXdDZjdzMWF3blpwRzNnQWVPSFpTMXNCZWRHRWQrK1hlbVNuck8wUHhwZTNTMjUzV3V0eGZ3QWRHZkl1V2R5R0liNEl2ODBjUGl4NWtxLzB4eTlucVdCRG1HeDlVOGFGTGdOWkFUbHJ2MmJTcGxXWHJDaVQ4N0grbVZzemM3M3d0QXN6VWdMTUFXT3JoRGZYL1FFYWdZd3V3M28xaFJSMXV0d090bHVQTjZaMVVtMzBjbFBrNU05RFlQb0l3Zm1LWDhqK2FOVzhtZUp5Mm82T2NFdEJMelgxbk43M0tJWWFqSkNBWnRrL1pQSCtUQTN1UUZuZGIvR3dVaXlMUzdBVWR1L2pBMkcwcSt1NjRvSmVvczdxRWEwT1h4eXAvOHJCL0JrTWxBYS85WFJrWGFWQnd4cnBlQkxqaVJrUmc4NzZoc3lSLzdUdjZWeEx1Z3ZJSVFqUlYxSjFCTHlkMzNjVzN4M2JVYWU3VjVXOHJYRlRjR0RaTmFNWUtDRS9PNnFSVzRsQXZnNVg4cEU1ZDdSVkpId1kyekZnWlVkbkRUcFJjZkdjMHJraVR0c250R0tkZWF4V0tqaDJZMGl5dlBtQklsejUvZHBNV0MwTXVpRndGeFA4V0xwK2s0NnJYa09qZ1NrazJHbDNJeWtnK0hqUGNLTDZxZGNqc0Z4eGh1dUtvMldPUWdMckRxZG1reEt1bXBvMzA3VVdkcExoVmE3ZWpzcml4dmdIS2Y3THh2WnoxZnB3TnViL1UwdVY2VlRNYXVrS2RCY3B3M1I0L0Y2Y2ZPOHN5VnF0MXQ1RGszdmNXNlZ6c3RId3BGT0ZnMkhtNUNuTkUrZzNZMkxaT05hZWFoRmtsT2RwZEhGQ0RaVitUbnBTMVZzUFpZY0wwdEE0SVljWVJyM0FRajYxWFJTSEFPUlY5eTJXZ09iZm1rOXk0V29lWkdGQ0R0MkNkOG1oTFpoR1pOWjZqRkVULzEyYlZqUFR0UjY0NWEvZTVSWVQ1NkxBc1pHakxIdnhpS2hmUHV2Y1F1Skk5RmcxamN4aUk5TTdSZzZGcDg3eFA2T2NzYjJjZjBlOXlwSmZNMnpVRjEvZHhZRkpsSnh3WFBBRUM2bHh0YU5qMDlxUXFXbUNBZ1dKRDE3aVkxNXpQZC93aE94K0M4a0JEaC9DTjl6b3NFYVRnTzF5Q2xHSkw0TVdnSlNKcFRBcGpqYnBMeUpJWWoxK2NyVDhWU3JlMUFzRGZYL2RxVXZkV3VHd1l4K3lEeEFDVnZxZk9DdXloSEdSaFRycjdvRkpQZm5GYmkxS25NdmFMZVlFUGlESVlqa3c2OStvdEVNLzlndmJPRktmWjVCNndJRlNiaHVvbFlzb0JFNTB6MDRQeUVpeFNNWm94eVVwa1ZxVmJvMW5jK3hGdUNHa1hBQVlSNVpxbHNJenRLQjBic0w1cUcxdE1hanpaaGk1QlhUZUxKaTRZc0Z0K1hPOGJvdEU2MHl3WDd6cUhJSkwrRVFaWmVtT3JUZ05ZUmFIR0kvZWJFTllYTjdPbnUweUVuWHFBcW9jdmxnUy81VVE5aWpDNS9xQmdPcmJPUWd4a1FPR3YydkNJU1A0ME9iYjNWVi91d21rTVk4eEE2Q3VkQ015SFR5c0FPK1BpZlpFSXZuWmVFN0xtdlRlRzY5UlQ0alNocVlNa25lZk93KzFCeURMUlpTNGJ0VUtHdVBBUG9rVXZWZkRoOUxNMGhNM0FUWEJLNHNKSDRmd0g2NWlTbmVYYkI3VWlkUVg2Uko0NTZjZXA2aWV6U3g1MExsMEZKS3pxM083S1JvS20rUDJKd284c01uVkRyaGhLMG81dVJBTU01STFTcXU2amZrbFB0OGUvNkhtVktISGtvTmdwVFliTmpwTG9LZGlVdERVN0JiZ0xYQ0MwSXl5ak1VTHk1NlhqYjZXZitVaTl5K00wY0MxZ1hxeTZ2elJld3hPUkx1b1dEdFlWNUNHSktxeW56dmNPNlhjVDR2OFpHU0dleElmZE5xUTRsSFFRMzhBOE1SQUdzazhWd2gyVFJrc2dVbENVaWJleitYRmV5YjVJRGYyWE1IaHpuUUxMaXhLMHl4eVBVVld1SGlOTkZFbGp2N2ZydDgzbElZcHpPQUp0UWVXRkdOTW1aMnJRVG5XYmszQndUbVJ0M3BLU1NDdjRJc1U4VGVSNDl2djZ0Wm92NGd6U3JIVStaVVFvQ2xZSXY4ZUtraWlSNUlNeXgvYzJiSnMzZ05QMFBpV0ErWmVnMjI2azFMY1htRUVkWkxZY3ZuaE5lb1h2YzlOckdsVjFDOFgyQkU2N29DTlpOaEFFTUVVcVhFdGlZWG92N3lwRHlVU2xaaE80N0JYQlZ1Z3FEUzRIVjhrSHZzblQ2QnQydTcweVlValc3SGk5TDB4VnVOS0NGMlAwNUlOZ3FVL3I0MmFuaG5ZMmllSG9lTUdGWW5KdlNaRUVFYStNVklyWlZETFprMzFzZG9SWjllVTBpQlZ0Mk4vemlJZU5STWJJRlRBem1HQ1ZNRkFDNDQrV0RxUXFxakZIKy9wV1creFhJQy8yV0NmT0JiKzczNzZScXR0QTk4VWFicmNBdmFWUlp1NWVubTdLMlpaWEV6dVo5WFY2ZmFxN0hkQUNnNlRqZlFsdG5UZ3BBK09aS1pHQnQ5aWRHNjBUUTdNbHBHaGhDSnAvVEQ4Sm1LOTZXSUdQMGVrazdXWllSM3MyZFpNZDQ5bWNYdFcvN1RJckNRVDdTZmk5TTBuVGV5K3MwS2FUdUk3L3hibmk1QVJlV3lheHdHMW9MN1NobEJ3cW8rSTlFd3dqUjdUcjZuOTRWaUJRQVUyVnZFM1JvalkwQllzaHhiemNaejBjUnppZXhGNm83Q1VRdHpPNE5LN29aQ3pKWVptZm9ZblVwYm85c3h1NmlLTk0xaEhsbHZ5Y2g1ZzJwckFERThvWVlHc0gyZkRrRHJWMk5OQzNodHdsQi9OTDVRdjdHL3U3b0M4Y3RwSUNwbDNKNUpYY3RwYyttNnAwaVA3M2J4U1lIK3Ywb3A0Nkhuajl2UTNFU08xZXJLK0x3RFVZNWorKzQ0ckQ5dE1jR2pnTlBwYzE0Z3FDS0ZnUmpEWE54cVBtRmRacWNEQm5tOWo2YzNqWE5XM1lWUFpIRmFpdUx1TU4zeGxxd1VKRERkQnNscTJ2a2ZNdDRlZkdmUk5EN1dJQkJKOWFaZjRsbTJSMGhDMXRqUDk3Mll4eWhPSCtRdU9BQzdLWjhZZHNnVWQxS08vSWNWKzB3Z29MSFpNdlJOcSt4dXpqUHlkM1ZWWWlmQU9QeVowREdCUDNIRzJtQkNxQzRLQzJDaXR5dmpWeU1zbjF5NktLR0NXV3dueTdMc2RYcFQ5T2VHdm90Qmk3Q0Q4cG1XbHlQVlM2dWdxczcrOEdPdXBvK3BDSFp4QmhjdWlwZ3YxU2RIc0tCZURpOXIxSFowa0xEa01meXBuM0d3MXNlYUwxbGVXb2p2K0dYeWcxS0VrV0NIeGMzU1R6T2pwVmF3WHpuZW5IMXlPZ1NpRGZDSEZNeU5YdnkyK0FmcmxjMXNoekJ1WjMzSFp0Qm03SXRzbENtZzlqc0syTHBpaHVmYUdoMmxqcms4OXJLT3lHWElMbzl0V3NMcXZJUTBKbzhhOWtUWDkyblZuNHZQZHppNGlrN1BKQ1pVOTd2SUdXOXdhM3JUNnNpRzZGK1NRbWVOVnpwQXZBZ0NqLy9QZU9KVVNzbHlUZEZxK29EYkQ5MVQyL2ZJNkhVNkt5cmtYQnR6Ky9ERU4zY01QUHZTeTN1M2xaaklDU3JkdFFvOFl3b1B3V3RMRHZ3RExRZ2lxM3h4UkJTR2dTbHZBSHB2bnFXSUNEWHYyQ0lPSFphZU11UWNKY0xvQnVRNU8yMUhvZmxzTGFtbnlPcXNlcDkzc3ZURElNYlFkSzdhQjhqNFdCRlFNa1VkRUt3ekdlWnEza29IcFoyajRxazdxUlB0eHhsYXZUN2xYYUF1U2p2ZnJScHp2Y3UrMkV2YmJQRmdYU1BlWHNrZU1QWWRQWUpEZ2tmKzhIMXdQSmtBSGV6NGNVaG4rZHd5b29qcVp0T1BOZ2I3YkIvNVdCSjcyVUFIMUVvU0Rqc3NjZFYxYWFqYS9FanhNRFFTWElIOFZzZ3VyZjUxbFl2MGZTUFpURGt0ek5jVjZreU4rVk5UbWFaQTZQWnFKbUViUWlWL25FemVnVnlZcUNNbGtqNHVhdmdaUnlhOXFyTjNUNjJLaHFMN24vTmZKUXVscDZ4UUlQc0o3MFlrMSsxRVZDSVVCTDM2ZEZETDZmSm5TSHQ4eHNVTjRlczQwbGpxUms0TzhBek5xOTdmd1o0dzR4c2VrYi9NcUgvSy93YlE5czF0NmJEbHdneExOeDhmY2U2b25wOFdjdTJnMXl5NDZISVF3ZU5vY0JKWEtXZW50OTROLzE3L3hjM0JqS2JuMTdSMlJWMytzYzBjSVRaQUtkTS9yNHc5N0NpMkRYWW1oeFV4K05VMG9DNk4zbjgxcDJPd29jTyt0NHk1UE1NOUFBa0R6VVNFNFBHSC9ZY3ZUN0xIaC9tR2FIWkdiYWtHTFR5K0dBN1FaUmZMbVc1OXRYdnRzcGlQS1cvK2N4ZjhxNWEvREpIMUlTL0NQQmhTeWQ5d1JvZVlzWEcwckVRejN4T3RjekRJVUkvMXcvSEFOK3g4eVFsMzlEcVg2R3N0R2tlU3VZaUtpNHRXRFdmRk9uTDZrNm9ZSldXK3prRWtuRkY0TzRzc0I4Y2ZZNmtwdXJQOU93cy9UR2UrREhUS0d0MXMyUlVKaVVFb3d0aW1wWlZLMGRISGlmS2hyL0YyQ2tvbU1TTkhQT28yQWpUdlVNTXBKK1h0ZkJ3S0xkT0x5cVNYVjRQZWNNZUE2aW9nWlR0R05tMVp2d1JJaUorTnBDdWxFcEd2eFNzNWdXVHRCR0ZNRDd2K1B5WjQrdGEvRzVQN0w0MkZvSndwRWJhV2M0eEpDQ1M5dytJREtYb1IxZ3EwRFFCTmFNRlJUdEgvSFRPWjVaOVJrWVl1em9UbFJ3bjIzeDd1V2k5WlFybGwvenczMEpzU3VHdVFqVVcyVjhjS0ttbUVlRVdvVXNJbEdrK0hpNktka2ZWNHZodURiQXJZbjBPSWlRZC9IVXdvYVl2Qm1VNFpoT0lnMHVvQ2VEcjNKWndCUHdTeEk0V09YRFZaSE1VSGs2SlF0YmlWcnRaOTZDSW9lb2MyR01JOXFxb3ZkRVpFZzRGc3l6cmdGK2JETmtzMzQ4OVlIN2R2Q1c0eHp5NUtFamROVHpKWDRTdzgza1l3TDJ0ckJwVUYzYk1oeE82Q0l5aFg2dWNtazJUQ1QxRStYRmtyaGszZ0dCUllsOE5tUlNEckhVRFh5N1lxMGRKSlpyblQ5Mm5rQkt5RHpQM2pXMWl4VURZTnN0NUNsSno0K3hHbW9HbHBKV3VjMGNQbXFNK01sZzF4SXRFOFRqZWZyZk1sRGFTWis2RzljZWlsUmxjeWJmWlBDR2VTdXRua21oQU1SRUgrWTljeUI5ZkhOVVZJSzkvT1lTRjVDQzFzUXlhbDVoOWtETVBzL3FxTlZvckVCWWk4MlJCQ0JWeDVaTGdHM3F1MDBFakxFWXFSUFZ0R05rMHBFazR3WnU2enliUStlTmZQQU10a2Y0WHZIbDVMSmZhVmh2STJCYXdRQS8yQ3o0NkFOYnhIa3RRc1pNZXNVSFRPZVkwK1RiT3czSlp0YlY0ZzdiUXlIMnRqbFlreG81WVdzVTMzOEhzQzlQbDY0YXJGcUUvK2xtL0dOOHp6ZHFYRzB0eDVYMUZKZTVYU3V2SlRRbXNuTVV4eFlPbmxnMGxpOHBHcTUwS3dScUN5cUp0VDRuTmJrUEN4dTBEU1Rud0ZFaVVEUU16OEZ5UWRESXdTNkk4NUR2V2xPOXdGNFlKNytvSXVvN1BKR3VHL1N5bFY4MEFmNVp6S3VQTXRKVnFFRE5Vd1pJZXJ2TUR5dFIwdnl2MzBGcmsyblVuOC9RcnNzeElJNDhaOVVTZWQvSUpxODd6bi9nZHMrYUhad1h1TjluMTRVS0Y5RUlzYlBNU0tkbkRWVi9UU3NNeE1jL0lwWHFYOWtOdjIrcm5Ndks4R3VZTHNqQXJHeFUyRXJMNFpNU3hiaDZLNFVUSTl5REJGTHBrOW4zVG90WmRhc1BVVFV3Zytud0xDdWIxQlh2WWtWay9BOGFBV29RSUk1NzhPa0pGSTF5OW1lWUdxbnFUZU01Nk9nOEdVQm1WZkMxaVNTamFWbUtRTFNHQi9xZmRZNFZMTU96NUVSZ0Q3Y0YrVFlaNjlma3NRaGFUczBDWnVnbnBhTU0raGNFemNLak5JZndZRlQxY0Z2SWZjM05FUFc3UGc2VTJoMi9OU1d4bVhhS2Q4OWVlQlNIL1U2RDc0MjJSMkFrQkV6akhzR2FOY2hxNDl1Y0lBSUdjS3AvQm5ubXRTZ0Exd3JIaDlnYlRvaHUyUndROFdSQ3g5ZjRTQ0htcXFBT2RBV2t4N0tDWEVqc1p0QkFJOERaRDBJSGM3ak1HZ2ZLcXZ6cnhXeVE5UjJTUnNWNUQ2R0xwLzNXRFY1NWdKa1U3cDZPVkF5ZFpJMG5NNUtQTVNKMGhob25ZbzY1MVVnNk9FcDFjWUZVRVMvSlVNWFVFMXA3NFRENy9mOUg1VnE4RDMxeUlWaUczcEtQdVJMby96K2ZseXlSdFIwZmRBbFlqRnI0QnlnTkpiRlA2WFJQYVdxZXJ1dVkwM3M0T0lhMlpDdGI4dk0yanNqUnZLR3hvTWt5UndGMmZJYjJvZW92SEFuMWUyUVI4TkxMdnBhNCtLMWVsZ2ZLTUE4S2VCcG1MelZwUkdKVlFaY1ZTci9NUWRhUTlYYzE0M1FrNGEycWtlQXZWYWxZWmoxTDN1YnRMN2RoR1M4c3IzcnVlRGU5aEI5N2ZxaDBoK3Z1LzlaRGh3R2FwT3BpcWtQSVI1dE5xanRzYVR5enRvMnRhcWVSUzZOTEtaTWFCZ0YxeERRQ00wWFJpdnZLd2lpOC9zYXFJNnNiWnJaTU1sRi9iaXlIcGUvQzQ4SUxMWlc1QkdqYzd5dk1EbkxLTDR1bEJFYmc4NzR2TG9KV0xqRVhQZWtIS1hrUXUrc3hHOHhBSU5qa2s0b290Y2JwWUtQMDNSZFVQblBVYVBsN3ZMb3pRVTJqdWFLMUdXWTN5UWFMd3l3eWJTRTRLbnFnbDVVV0JpRmJWMm9iNWkzN2FEbnpKRXdraVlCNURDQWNVQld1TVgzNkxVUGtWczFaejJ2TGlpeUhZeXNLYjUyVHFrNjdEaEdZK3dzaEJoZ1RNSStvRTVZeXhQNXl5YlgwVlpwbkpENmpQWDh4Y1R2SzduSEdlcmd0TUMwVEg5anVhRHhzNFRHU2tnQW90bTN3QVM5M2NObGpUNHlvaGtLZ21TazBrNXQ3Vm5yRHdDakNQbEE3ZzVJb0tPYVdRdEhtSk1rbldlOTBSTFI2d3d2cEJBUmh5cjl2d1Z4N3d3bWJLYThnWWZiY09Ldmp4VWRNT2NmYW5ORDBNcGw3U3luZkVJYll4SXdoM1AxeUd0WjJnYXQ3c0d3d283aXJHcWd6N1dsWGY5ajN6bXRwYmhpZHo2ZXFZYzNGRFZoVWpQY3kvREhzbitDMjFvZENJQVNGR3VOdW0zQUFOdzVKckVaMGdqcWxMeWNSNm0wVG5HOFpIdkFXR0M2OE1ZOW1rYVhKdERSTnZmaDhSWWtySy94cFZpQ0ZQeVM0czdFenBlYkJud0xmblpsdC9aUlBrZGt0QngwQUR3SmplV3g2NHo4OUpvTlVhUFZYR3ZYcjlzWXNqcWhLdm1GbmJ6V2ZjUUdOUzA2dVhNSlgzeUtSbWVVQmZwQkNBaDBVa2pZLzZNK3NOcmQ0MnFZR0lHeHlUdlRKeFJaU1RraUtsM0RacEErREVoM2trTXpXcUZSOHZoblNnR2cwUUtuUUpCQmVYLzNjbU5KOGpZWW1Sb21aUS8zaHdwaDhPdGNUU1pRSExzTmFwOWtJb2k4ZFhqOVh2alZlcjdmaVM0d1NoTVNMcmljbFJIWHdlSFhsWE9sczNubi8xbWtSWkFKS1FlQkIxN1hxbzVUa3RIZDVidUJvcUNselNoc0pMdlR0a1I5U2ZSY0UyZktEeEJBM2YrMnozNm9jdGVsQjNJcXZMVFErUk1WdWdJd2pDYTExQmpxWkFPeWNRSWkxeU1qUlU4M3F3WVo4UFF5T0syTVpzSUk2cmdhaThyZWxUZkRDT0VlekZlMVRvNkNvTUl4YmtwMnV2SEhSUlhlS3ozS2Exb0lBRVFqdVpPM29GbXJUTXdLOXpIM01TNVBjWlRKMzFPSEpldFdDSG1GWGZrbFpRcXY4Tk9qVklUaThRREN2bXZKR0lDYUhxRTE0UlRaQk1MYkxlQ0dLYzgwVEp3c2xlaC9iRW8wY3lEVjdDN1pNMFlNbXVFcEJrU1V2T3Z4SWV4NVFiMVNMZGM5WXBIM1FWc3hjUGlqdi9mdlJocnUvL2NNdm5xMlpRdEc4N09TdThoZy8xTzhoZGliV3cxSjdFM1lhR21kWGE3bVVlUmFjaWdjRGxZYVlPUWJDOGVqSCs5ZkdIdGxNWEhPeW9kbEhsblV5OHpZS295SDdYZmluWXJZUjcweFBTNFZBWUppZWhtUU5pUzhCN1NNRzhMcnpFazhTUnUrU0ZVY2ViRzJ0S3lrSXltUUE0RjRCYjh1S0VxY3FacGcwNXRUM0o0S3RtMU1sL1l6blQxOElpY1IxaTNnWEIzMjlKTEpycFZIWFljTk9GM1BKcHp0bEZFUmVwUzZPdmF5ZnlCNHFuVDREdDkzMGxmVXRPVEtZR1VGdnhmMlFqRlF2T0tpY3RPS3dhOHJlMGg5YU9nY0t1SDM2YlJqRUVGQVNYMC9GcDUyWm9MZEpmaS9PNVNGL0NRTkZ4QUwvOUtTTmRVeWpYaGxhNjMrMVlUZGIxNGxOZkVIUnQvS1pQUlV5WGlFM2NxWC9VcWtna2dSOEJnclNvQldESE5rYlZKZjluTEVPVlJQNjBrSDlMYkNIY3ZXNjB5RUVoNUY3L0tJeGRQaFY5K1dhY2RvR0l3ODVTYUhrWnMyc3hLQjhSYkk1L1RPZng3RzMwN29YbDAvVDhicEhiazRwblExeWNjWDlWMEtkSGFwbGZZMmlqZHd4RWNCZWRPaTdmVytPbVRyNmtaQmRRVk54azNBL2NKU1NFMmVqb1p3eGZ0NjNmQXd5UWNRQkd3WjJMY1VRbDJ4K3B6a2p6OGxmSTJ6VFc1SHZWVzdwVDQrYmxjUTVTY2NoZStqOTNoZzlFRThURmxxOGhxSW1FRmcyWlF1MVFOT3lCSW10WFpodFIyWDVkditaUTdvd01jV3pFVVFBekxBVVIveFlkZjg1SE9abDdaUGR6a2VSSXVkcHptVlp5Z0hWZnZvV3UzVHpOQVI5czVQNWtGMHhKMmdtNXJvcDNYOEtQTlNtK3NCNll2dER1QXFHcGtqQTQ0aVdZSXRsNW50b1dYcHpWRkh4THlkNmxPVGVKV2tpMlpybDZOOHUzcUsrY3pGajFRSG12Q0V5cFZsdnlmZmZkNFIrU3l5eklnMnhZUFNKaFlVWVVhTGN0cXAwUDgyWFk0enBSRzZma210b2VBZnZPa3p5US9jWVJIVlZPUmhPem94SUtrd3Ayckg2cE8zaDlzai8xUVJtTld3Q1JRWmZxeXY3NTIwQlVKMGJtd01YZG1CcFJraThMWEVqRm90UFg0RnFicHZkWEVLakp6aDZsMW5sKzIvUGZ5MDhkVEh3OFI4OEs0NG9rVlBLRFl0NU5GUnptVVExOTNiaFU3dUlIQXBVN1BoODIwR05OU1llVXVlR1pkYTltNDY2dFltK1FKOTJQWkhjbFh0WnZiYTlKM2VjVDdqUXFJZ3VDWFh3K3pSbFVhbzNidnZFMUVqV3NuRktYQ0VBdi9GeGx6bzVFNU5kdXlmaDIzWWZSK2NhaTJiSGtBd1ZPNGRBZmtiR3pjYXExa01xYzNXYm1hSU9NV21VUm15Z054OE1nTXVQYk9uckgveXplWHpSZFBYZUhXL3ZTYzF6SFNiWEZ4R2xoeHlhSVB0emVEVSt3WG5NeWc4RitDSzNwUG5FVU8xaVdkemlsUTYzZk96RzhrYmtFNHBlaTc0blM3WEZhVTVoL1VQRHpJeXRzMWlscDZWVDJtQi9zeFVqa3MzS1N6SEpNaUVsY0ZjVFZwdEJoYXpwUDM0c0M5NEFZSzdnQW5aeHVjT0FuZkNsR0RKdTIvdXI3bUZDR3ZTMUkvaHBxc0NDRDRUNVMzcXYxSVdsRllTNWE1cDJCU25KM3k5anpLcTUyODNtekFncUlxZkJMZ3FaTy9rWUVubk0rTnVXUU1xZzQxMDVFb2JSaGo4T0VCRUJHd3B2L0pzNkloc0REUEFld3RJZ0RVK24vS0ZHL3VreC9XWlZWaTQ2RDZ4Rm9pZHZhdGVyYzBXOW9lY1lXOTk3aDg2Wk5DSDBsY3NHRUl6YnBVbkdDdHl1ekZhR2JHS3NhYXJKRVB5M0RGOEF6UldxNllTdWRFbHdZVDBtZml0MGd4Y0h2OFhJWGJuWlN5R1lYZmROejNkTExiNHZBZU9IY1VoQkw5MUx6MWNCUU1ML0JYWENKY1pYb1hyS2h6N3Q2bUR6ODlaVkxubXJqbWNuL0ZPTjZiVURrSmFHVDZJbGRWcmVsUktvNmtRaUVqZ20zY1RpWFk4dEJNS01rSWhNMERxOUNyQllkNjZtZXZ1SjFjRUl5Qk05L2VXK0g3N2xaL243ZEZuUzNMWFFZd0pkUUZBZFRWSEdFNkNRNlFpOWFHWWRaSVJFVHV2OVVYZ29JUEM0VFVCQ0dPVzBUR1JhdUErZ28rOHVWVFpLMzM1Y1FGYXY2N0ZIaEVRUEZsWG5pMlFtUFl1VHJrT2NVcmRCWTEwa1BPekRkNjFidThEbWdZWUhpVVBEaTNQSTZnQ2NIYXUxdk55UW5aR3BWdEQ5VG1JUXZQelpxWkxLaVI5TGcrY1pqclV2Y2xTbmcxdEdrcjJleHliQlBXb1lVdVpDVnJJT2FtaWZReGRLVDlNKyttL0FLMXQ2VE9OYzFEdTBReUdMUysvdzJZUU9rNExrUUIxTHovMWhkbWhvYXd0UXYwLzdVZ1pvbFZvVjVkaXFqUzBVY25iQitmUUpXd2t0NC9DckFldmZiNERHMmU1SEt6VlFrQVU1cE9pd0o2TWV6b1k4cHJlb29zbGZrUS9zY2pjN3ZBUWJuM1JkMjM1NnZEQVl4UnRpWEp6aSswZ01CWW1QSk5SbWlzK0pUYUltdFpBMWpPZk1sVmd3VXRmNllYUUdKZ0ZPVktXSWhnUTN3cWxMeDR4TnBlU0tpSTd0S1dhQm1CYVhjRkxrM3YwbVA0WEdudUhCK3M0NUYxTnAxYWtueG9wTGEvVzgwT2lNbS9OZ3ZkdFJCK1JINS9odHBJTjJnQS9pajI3NVNzSG5DOHZZN2k1dHJueDR1Qm9qMndSdFVQVERTK0xQNzJPZ3VyUDN1aEtmbHVZYnI4N25VUTA5TnFyNjQ0UVV5ZlpieU54cUlYc21OTy9WeUs3ajgvZUpLWjVMTVhzdDN4OFhyT250dkRPbE5ZTUc4YldhWlowYzkzbEFnMG9PMCt6VkZHRmNQcEVLVUZnMjZ5VkhvZ0tWRDdZZnVxTEJPeVozc1doYXlxeVdIank5WlorL2tVbC9HN1Q1S1YvWFJ2Tkw0ZzBvNWJkdGVseE9saHZIemhxL284aFVzbWhMTVcweUlZbnVHaWduYmI4TGYveUd4M29VV2hjbStod2JydXVsazRPc1JKNytQZ041TytGeWJJMXhnRnZRUU12UXVET0xRWUh5Ui9XT21RN205cmQ2MmpKQWJFdkJTelErYnJmZW03Rnhvamh2aWs3SzlvM0tKcmloWjhhTXNkeEpuTWcyTDFhSmszNEpTN3F0ajBaUE5sT01NMUtiTHhQVEJvM2MweUdTRFF5UytMWk55cWpRNTY3d3VMSmxUakhvUTMzTkhqSlVUV0pVdk5STDc5ekNSdUNnNnJTcXpUZGZPRmVOZ0V3ODMvQjJaaFR5aDFUajNjNFVESEtrZkQrTE16ODdLSTd2UmlJSnNRWmFxcmFCY2RZZm1uUkhNdERSSzlIaVFHOEsvUUlPRExObWt4aVYrcXQwbjhYMWpQQU5UWUNQUDhGRmJQbmRsbzlLVXhsQWIrWkhFYVNkbHF3cFdxczA4K0gyZFI5Y3FDMzVkakZWUFhibmhGdUx3Q3NJckpUcndiK1hTSnNzdXNwUk9LUXBhckk0Y1dtU0JRalpwalltb1lYamdWYWV0QUNFd2lTMDVTOGUzSVhQa05DUWlacG5tdzF0a0hKS3RWSkg4NWVUbW1mdkxJL0V5V2RScm9ZeWZ4cE55Rm1BT2t0RTJnWUpBNzBGSVN6QytqMEZZSTBxTFg5RGRjbTBERy8zZVZnUmFBVnp4RkFmMkhYRk5pZEwvSzRieVltR3BHOEZUY3gzWGRrdHhoSU9pakVHOHdLKzZ0TVBjbVJqK0FEZkpxZFpJYkdkQmRIZ0JTMlpMd1lIbGQ3OFJpc1JYTkNpZ0FYemFtanFuRmt1NWgzb3VQN3JadkwxTlJYcmNBejdkVnYzcWd1YUxxSUpEVjNrR3RQMy9lcXFhWE14L1p4blNubGdpeUxTcjlvWHVUblZZK2ppQmhhSGoxSXVLTHg3bVFrOVphdStKNm8wb1pUSFViS1ZBNHFtQzJhWHlPVDlUUG5LZ3kzQXgvbUoxQTRDcGxIWS80c01pdThMcW1vKzdXTUtyYU4yWUdlYmFCNzgwMWNaWjd6aUsrcmtHSzlTU0w0Yzd3bGVmNnJVMGpodkw3aXRkUDMrUUltbVB1NG83OXNZclNQWG5YN0s5TWtGTXp5V3Jpb2ZXVDBNVmhKMHlDemlZbUhrcG90N291NCtFUmdZWFdSaGUyWmxySjhWdWJlNDExZmJGR2hVTE9hR0xMTjdXOGlvanJCblpXU0RGMmhSWnNGcHliMWUrMklUMS96NXlZUjJtYW5OdFp1MEEyUlJiWmthTkxMd3JGR0ZaZk1iSC95WGlSUk5WbytGdGhPT3BRMlJmaExxV3lCMVc5R0pQcU1BMzJXZnJsY1Z2eWdKeFBuSTJxUDR4ZFJWajBXV3IwR2hxZUlweHJ6ZWNnTzhxU3FLSjBNd3c3c2Z3a3NGSGV5MEMzdlpqQldFTUpsbnozeXV1bmZoS1FMVDJZV3paTVZWQk51TmVFa0JjZDUvQllxcHcyZTFZNjNaU2NVK1E4WXpndWw3ZVREVGxyQlBaeHVxemIwRUYxNG1pR2dEbGovUzlGZktVM1NiODRNUTNmNm40TGUzN0tEK0VmZXR6c0oyR0hCMlNId21CRUxQSlM0Nzd2Y1A0U3BCVFMvS1c3RHRHRTlYZk5TWEhlMUJ3c2NIWTM0ZTJ1UzlZRHFUVVVaMEJvdGdmUFhLelMvcmM5bWhDWFNBUmhOZ0ZJV3F3T1FrUUtYc3NqNGFtclFFN3lTK2xsRWdXV3hoZ2lNQk9KU0NDeXhzSXUwSGpJc2pVc2dXbFJBQlRTSitXemw1WWlMek9aVDArdzFqL1lNSmgwd2l5eHYxbmtrU3I2RDVtNEhSYXhrV2ZRS2E0TEl1Z3hEU1NIdWM0aTE4djlSTitJamgwaVNsWW5FRjNzOVloVkdnVnNvVEQ0NFNlNVJwNTFwUGFqM1J5b1dFVnZlVGxkS0RXQklRTEFNRDQyUE9TZmFvbHhjWGpuanl6R3ovQ2ZLc3hVWTUyY1J3bnlUa25PbTlPbStpTXBnU3Yra2JkYTlTTUJoWnVKaFMyU1lKODd3SEpUVDNVZDFnRFo3L1pROERMQ3ljalRzSWtqbWo0eWU4ZlZ0cVdER2VOZjNLYXhibjV2YkhXTm5tVWY2ZzBaczJRcm43RDNwSHp1bklnOHcxS1VYV0Fxd0pIYWpXTW84aVJmVVNoNE9ReUJGY2JWZlpsY3NHbnBpZk51R0FtY1Fvc202NVhNS0x5SS8xaS9JY3ZDZWd1eGRMZVlHR0kvUWtzWTZnRGdackRSMnBuNkFNbTQrdHNDdkV1WEQrMTZXMnh0azBHVUplV0w5ZTZvck5QY2pWRXdyUHRhTFZNWlA1Snl6VzJzeTVoZXdUa2tFRkVjaWNPa09kb0xRZFNCZjBYYU5rZlJscmtwWWIyYWhWbEVBTS9sQVlyQnlGRENTR3N4WitRUnRzWE40SE4yTld0M1A3REd6UG96MGExOHozdmtsNkE2NDV2eW9EcVBPSlBnMEgvZk95UUtmUW83WnBIOThFb2xpL1ZjWmpxTEUvaVhCOExpOGY1OVZkdTJqdkJERFduRy9IR0piWitSNVBUMWJDUzQ1UmF5azYwU2tLcHZhTWVWbmhOWUdvY0JTREFvcldjR1hpdnZpaGtVQXUybGs0QU9OWTIrUG0rRms0SFU4SUYrUDVwOHBtcFFUcG8yeUFjU1lON0U2ck1ZL1I0ZmkwL0MrdUZDaVp6UTVJS2ZlZkl6TFNIc2krN0pEcmk3OU42VWJFQTI0M20veEErTkRpT2N2Qk80UmpWRG1vaTd1bEJrYXNaMFBJOWk5a0VBRjdWdm0wY2FuNFQxcWFCVlk2S0FSK2xHWXFJWmgwTjllU3V3UVduV2ZNZmJacGE5YmY2cEtFcWVqZ0tDRlRHTzVUQ29kdFZLVG5DODJNSzNUemNDZXJ2TjBvRERaTTJYK1QraE02UUhEV2ZxdDQ2RlYzSHMxcE43M2F4QVNqU0hjUGF4a3dvNE9tbktHdUw5L2JEd1NDVy9VUUloTWdWcTRHOVNMUWZxZnc3L2pFK1NSNXJVWWtOMjRCYWsraHJrdFVjdUJESGRJT3d3ZGd2UUlXdVNDZnNtZGloT0p0T0ZYaXJsdXV2QzNMV2NSc291SmlTNjZ2RzQ3dlQxdXc2Y0Jja1QwRmJqZnRXSDF0NkZ5eEtBZjBFRDVFbHBiRHVzdU43OVFQM0NZeTVkQlRDNFFYNys2cVJnRTFnZi9kcnh0MU55L2JtTGFrclEyVUZtYjJTcDQ4TnZodjJtelppdmxHTEtuOURXOFZqWmljMXJKaGxlbGt0SHFnTmpqYTQrYzZLUVp3Nm1YL3EzRDN1UWJaR0NXQ1dLSHF5M3JYZUJMR0wvMk1Ca3E1U2lhVUhYN0FVWWtrcC9wMVJ5Q2ZYV25xVzNEWkI4ejNqQVFMSTJ4L1B3eXNvUU5nYVF1UWtuUGw4cnhrQzVjVVVwSmV3Vm5Dd2V1R1BkOUtETHZCNUozemVRUFhaVytjYURHWkVqNUcxdjR6UVJpK2hZMnhaNzZkT0pleWJCZHU4L0JQdS8wT3lHTWNVK2ovT1FLRnduQjBZM1h4RkcwNDMxNzdKazJDOTFVbEcrZnhHL3ptYmd6WDZDUEhzeGFWL1pmNm9ESHp2OCsvYkE4eENuL3I1SlI4SXMyanNOUkJ4ZzdrRlYyM2JlWEtVNHl2MjFHN0tpQkJWN3A1cmgrY2ZzV1NsaGNEUkJMdXJNYkx4WUNKTTlQOGN2ZzJwQlJpZXhSRllmeWthVzhwV2VsVEFIVkZ4VUZubWtJZ0xMV2ZDRTg1OGVhcmZXNUswaGZxY1EvZmxOSzB4Y21XdXNwMnN5NDducXNvbDhZMHBoU1hwMkhSWHZVSGNlY25veFhiYlY0ZkNaQWFpdUE0a2h2NzB4MGlpRXQvZVJHZUR0K0srZ2FZMHoydU1RaUJPbko5Q0N3bW9TeEtXQmlHQndJU2V3MVpXWmpDdjJCdDFVc1ZudmFRaDU0bzQ0bEpRZFJRZmhVSEdUY0ZTTE5IeENFUitiaE9vUk1jNTE2b2NYRkxzL0NsSUZyeXhkd0tYbWtYTC9Cd2tzTyt0czBaQzE3M0JSVThBcldxSnJ5ZVIvM0VEUTkyVGdrWUpjQi80dUw0ZFlCMGJDZkxRYkcvUWRXaC81cVZWTGZiUGdPSkNIN3hHbzNjSGpNeE5WOWh0M3I5cWd4ZzNDb096WDYycGE4T1lTZDJaMTZ3QWNiYkRoNnBBOXZaMmx6VXBOVitDSW01TVNkbGgwZ2ZNWnpxd1FwMkh3YVd3SWJaOVJjKzFLekZTSnAvS3RGNE12d3lmdGVMU1J4R29nbmJhelhUMWVXc0tmdXNWT2ZOY1lNUTlEaEhIZmhUT1VSVmZFVHE2WDhQZjhFUlExa21JMVRLbDZZWE5ueElLQ3p1aTVZUXFJd2sxV09LcWlZZnBVNlNwQVZTa2s1RFBMMkNSUS9EaW02RDJkamJMNWlTRXlhTDRyVXVDeFVIckJQWEpPNm55VkpjS0dFa2h4MTlxdnk1QmdhZ0hXam9tT3RlbEtPaXcyeFZnM284VWxueEIzOVNrNGw3YVhtbENuTzhHeFJSZ09DRk5iUTlZWDFUOHFpc0ZVUXNQRUttalJ5N0diN0o5RnZzRnBtNHU4MlpDN0o0RE16S3czR1BTS3lTcFluSURMNFVwUEhFWkdVazl6N3Q0M2xFY1NzeCtFalVSeFNjSS92c1paeGJvb3JjR1d2NGRsZ1UvQ2Y4R21rRUtHZDRLUmZEOWFndTZUQ2s3YjljcUdlbVdoVjNtWUVqL0NrWFFtRzY2MXNlcjlUTThRaitjODZIVE4rT3MyeWxORFVrUWRrZEhCeUdNOUYwS0lZZldPSGNmeXRmdUpUSWVqV2VEQnBCcWU1OVZMUFVmRy84TjhYVDhCTEJ1NldZYjZPclp3bWdnSkd0Q2I1Wmh5QW9oMDZRQW11dzd5SVkzVFNRYjlUQyt5WnZFNmFMOVJIdlhlTGhXaVhzZmF6VlhHS3pKQStMV1VndGV3MkV0ZTk5d3dpWUc5UTQ5cWhnNkc1VWhyVkxNTk84aThqYTAzOUxzNlhEWDFPNU5ISEFUOWFVNStXaW9VT0k0aFRJSWMyS2FCS3ZCZXpyUm1yaXdPY1V4RjFxWE9aNVVoWmRuNzUxUWUybHNCWHBjYzd5SWplQ2JkOFhlUnE3cHhOTUx4VFVWYzZoajFuc1hGa0UvV3NWYjVJNmFNZDc5ZC9LWVZWQVdGZXNWRStPVHo5dkQ2QVp6QWY5TnFXS2l3WUorSGlqQUlZYlhmL1c4UXFFeUdhNkVKM1NiL1V3ckVFdDVUeXBMbkdaM3BZdXYvbldyY3RGMldveFh2V2J0NTU1aU5yTTZoakYvK3d2TDZFYW92ZzRHMHErWHB4a3k0dFJ1NnN2aTZvaExYZ3FYWDYvVzV1NHBNdWtPaFM3VDRvd1lVM3VTNytaYTUrdC9GaSs4WFpiVXdDOFdGakpkQW1BVXpGRlFvdGRnWWFsWlg2NXpRcnB6aWpETDlnSXlmcUZzK3U5azNyaVA0Rk5QZE5wZ3NRMEhmQTBieXQzaytoRmRRV0JnK3dUemNmOUUxdTFZRTNkNWtHTmpwVU9oVXQxa1IzQ21sTWZEUHBUejdsVnp6MVFRUzNrY2YzZ1czQndHTzhEdnJrZFU0OEQwYVJyS0RaNVdscG9ZU2tkZk84L2xpK2lYOVlieEQ5VHJENUdKK2hZdWJvUlV6YkdEMkV5NS9tblZnZlVhREs3dG5uVVMwcGhBa3Z5bmc5c1FkdEpkMERub3h0UHJEUVBWdkhGY1VyMTRMajhOYmh6YXlZbXFTejl1aWl3NnVOc2pBTUFNVURCTFNFYWlldllYTmY5TG9hQzY5ZW1uNk52ei9STm12WnFGOXVyZEhKcTI5bDl4Z2JhWGJxdkYyQnZtY1V0VHphako3cmt4UEdLQlpBVTdPcnpLdlloSFZwWVJRN1BaWlQ1OWxRSHVUdzhwSGk3aExodnBFVFMrRWlHZmRheWREcEZIYWxrUzIrdENCOXFGcFFnRXZMM2QzeWZNZGNJYzYzMHNGNjV1YmREMzF3UUZVS21EeG40K2FFVHoyRDcyaTFWWStBUERCdjlvbXhIQVBoMWUzbk1vcXN2STRWM21yT0Z1a3ZzUVprbGdkcjRNOENocnhMdlpIVDJFa25ib0hEY0xzRjNIVTV5MUcwbXdCZE84SkIyZU5DK0YxUloyNHpjQjl6UU43YTg1NnRUa2RiWnI3cEsxNEE2bWtEUkdqdE9UQlZMdlRVa3Z2NDVGcGtMS1pWMWJhSlM3VTUzL0ZOaXU5ZzZRdDNFeGY2ZjZRQitUU2gveExXSERuRjAzN2FwZU5KK3l2cldmTXVlMCtNSjF2dnB5a2I2QXlTSmM2d25jOTVGR2syaFZlM29jTTU1T250bzJwdDl5RzRDU091Ym85bzF6akdZUFE4MnF6bVNwY1NXMitVcTJxeFhYREpaeFJoSyt4dUxtS2ZNU2Vyd3owbkF0Yk9KQTdVZWl1UENTVTBZakdRTzFJWHJwd044RXRkRjdpWFNVdHdEcUgrQTFTdXRmSGdoaVVFTVJqclkyNFlxTWFPZzRXTm1sU2pQN25NYTRVU2lsdmpYQUVXOEJwbTRPMkY4Z1VIU1haaTh0VHJveHgzYW44SFBoYmhhTmdUZHc4RFBBbVZPMWxyOFJDSWd2QjFIelZrbnhQOXU5WnZnRVBhdkkya2tVL2R5YTFzUWZnWm52M3BPVXV3dmJTNTZkVFA4Qi9xOWNsbmZHdjZhL0pWOXQ2TTVPQ3dBRE95YmtzdGNYaGk5TEp6Mmd5UWQ2TWx1NHhOSlpGOXVMRnVFbmtibnNyYnFjU2kza25seHBMck9tR3lidVlmNzVvT3ZRY21aaTlVbHdPUnJxWFVUQmsyNDdvZmhZK1R5OWd0S3hiK3NZWlQvNmVoak10Q3A3aHI5SlMwTmlGNUZHNm9pQkF0ajhxVXkwSnhERFZrSGwyUlFoeE5OMGQyTTV0SmNsM1BpN1JXcEFZUXErQ29XSGY4WlJuSTB4SVRIemxnOEc3VUtGb1Y5SzV6VFBPSmppN0crQ1ZoZ0luNVhpY29Qakk2NForenhLUjlmajVQUnEwd1NBVWVXN0ltcVpDcXRvY21adzljQWV3cTJXVVBGTVVSTnBHWFB2ak5BNXU0Ui9oa0QrcjRzalpHKzIxdkw1em5sOS90V3VvUFdDOEFjcjFOZXR2ZC9rL3FSV2kzWHp0dElud290VC9Wand1cVV6MkVRSXFzWFFGbXp3bVRnOTgzTS9VbXlEYXRxMXgyVFhwZ1FYN2tqOUxxZEtDemUvVEpIczl3YW9SS01wMERnbmtJN2F0Skw2cm5MckFRcjVsazlYYnV2UnMrTXI0aUQvZ01GVG9yREVHQlR5Tm85TDlhTW5hdTMrNGtLQVM4aEpOUm1WeVhGWS9qL3dXOWp5a1RmdmNKblFqVXhOU0tLUjFFNWR3citFdjBQaVY0SkYxd2xUVFpWdGlTQS9SWnlBKzFFQlVjQkM2dU5jMzhiWXFMemJEeUE3V3k1Sk91Q3BWREpEcjZYblowa2Fmd01oMytpNmpmcVJ2bWJJcm9SMUVaTmtEYm4wdUNvM1dXMy9EMnVjZ2UvWjUvNGJNSE01TDBCMUNFdnBZRXl6bmhQQnhjdjk2M2lUcVZ0M1VKR1FOc3hJYTFESkpyNUtuN0ltRGZlZ3FSTVJ5bk9yNjFGYjhNYUdBeVg0bWhWOFhEM2JkbmF6cDFJY3BqQUpwS3VCR0FHNkdvUXcyWGs4MFVzS2dRM0hxS00yWmZnakxmaDhjQm01Smtzd2thSzVEWlU1cmtVQkJiR3RhM1BqZ1V6cHlkK016eTB0a0Nwd0VvNkxRN09URFlJWkhmeDRyQmFFWS9BMjBMRzNrenYyZndwV0ZML2VrL1A2ejU5Y29UemRLbTdpS2dFOEhkaUc5VXZ3RDFucnNNZ2pXUkhoNzRDWGNpeExXbk1EckJMRlV5MHZrY21WanIzVFBkUm9HekYvZE4wcDR3dnNZWktCWC9hQkhxSTlyOUVwVldYS1NKWEpJclR0V05sRFdCZTlPbXFnbmtwY1YrSGZuWmVGUlpSMEtzOXZsQ3JSNVNOOHkwNDllQzlyTklvT1hSS0JQSUcyQlliMk90ZldvNFJ2OFp1NXU4YXVvbmVZb1BucEpQYlJjLzh6c3NYUnZteTRDSUNVSTREeGtoVkdWelRIZ3FNaWxud0lWbzlDZm5aZGgrbHFPd3JhNTM2bUdScEJuS055Uko1RTFjQUhxdzA4Qkx6Q24xUmNJSUt0S3VzV3VRR1pudS9GK2JtWW9BZlhCZldQaU5wWk1rNDlwblozeTNieDJYYXIrSXpoT1d3b0pCb2xyTWZyNVVlZU1GSDc3ZmxnTzQzL1VTdHZRVEQyQWxBOUUrVDJsRU1pQ3p1MzRmTFd4ZmI0TWZ5eVh5ZlVIUUhCZ3ZZLzV2aklCb2RWYmFweDlCM2ZXN3JRek42ei9ONUxwQWZ4NTB1UTN6aWd4ZG4rS0YvaFh5NkRQbXBJZGRvSW1TUTlBRnFKcU1jVHA3Mi94amlpNVdKY0VUZnNUNFlDeXpoUDU4U01OcUFHSFpHaE1EYnIrc0VpT2pYTTJqKzc3ZCtYNUlJMG5xUUFwUkdQWG5sQjFvWG13RGVhYk9TZytZbnBwM3djenBGQjZqaUFiNEZucDk4d0cydlJiNDIrTmVPbEN6aXJFTHlrT1FTUEVramh1a0ZHVW05aEY5K2lPUUpUTE1IUmVWakpodW5EUGdtZTRBUStQN3l3Qy9TVXZHRHlOd2pwWXRoL3Z6Vyt1K1UvVUFNZkliMGF3M0FYOXA1NzJ1aHRIVUR0T215OUlYbGlYcDdTK1J5cC8xNHpkcHdEM21vWUU3c0xFZWFaVGJhRTBsMFRYYmJkQ0JYNnVDRnJGU2E3eVpSSTd6dEdNbHZGby95MU9xaHMydGQ5eXdvdmU1a1pPV0VHdG1JRUIzRDBjcHBJL0wwMHgzS043MUJGcHIwQ2QyVXI0bmdLendoKzE3Sm80b09DYk14d3pacjhVR3FyL2U3V1V1UW9rajJIVXVRUHhEZlRZaks0WkVpRVhsa1MwVjlTbHhhejEzRWpVOC9yZld6dGZ6YmlhTUhxRmRITGF4VDFYYVM2NFZqNTUxMEdRbVg2UHhzcTN5WlVGaU5pSzNLczBROThjakJuaFc2dzhCNXkza0NaN2p4MEJZUVFOUE1jejQ5NVYwMi9oMmxvTS9FdW9JQ0NZd1V6VWpQd1VVRE1EcFJvb0Y3K3I2VlVieVcvNk5JYkgyWEJlTXNRNHI5aEM0R1V3UkdOSUdORTVPbGJzWS9rTko4Z3U3MG1BRWswT3MwQ3lmSm1Kb2p6S3lndVUzL1VTOFJNMDlvQWxFRE5aSm9aNXc5ajRaVDloVXNKV2p1QU5NOXhQZWxSWFB5TkZtRXZZVnoyak9PaVFPVXlMdjdLMkF3UUhRdVRPSkVQNUE0MS9sREJEQ0ZscklzTnBGL3F6N25rNVEvd1g1YW5nOFlhbzZwdkdOY1NpODFvNzYyUVpMbk0rSk9RbVZNbmxPMzZYUkZZZmhseU5sZVk2NXQraGNRa1h2cktiSkw5M011bzJFb09JeDczQWpJVHdmdFV2WlY3VUFleVQxeW9rdGZ4L1lpWnM2OWJ5L1RHeWNYWTBuZFFjeUxrNzZ5K0dXLytBZS9maTZ5OXpqVGFtMXdpZ29maWdyOUlzRlZjK1ZmZHMyUkJxcCt3VXZjeWdmanVldUJJeWZEbHFhUUt0dTBMbzZ6cmNXeGhlK1JieEwzSjZrV0E5TmQzTktBcUViQ2gyOU4xTm5GcUZKU2Z1eXd0dVRUN3cwUDZRT2RQNHNVSWlIRjdLR0dQT2JvOG9xSG9zNlFBV3N4YWNrVzJYQUJ3bXhJUytseDlVSnNoc1RNL3lTT2lhZURoUllQUi9oNWx2RU5vZ0pFTUxTWk1yOXVpckg1b2VKNTcvdWdsbWhQZUZ4Z01paTJOMi9tWTcyaGltWjRyV2xoTVlYTEYwWlhWVWZFaUVubW1XZXhKcFQ1eTd0NXY4dHowVnd3UmVMNzlScUduOU8zUDlEb3dyZU5XRFpYZXZJSzQzbTh0aXJ5dElaSlkxRzZtZCsvQnRPcGJrNmlQbElFUTM2cTNqaHZyekMrcGNCWDNqdDBTZVFvNjNjazkwWVJzakZrNmMwN1lLOFRHY1gwVVNna0xXQzNzTW8xUGN1NFBJTjhmWFVZRENQOVYveVZJOU1EZ0JYQ0h3MkdLUFdVMFA4djJBUWltQUxUYnJ2V0tjbStnRHRObGlPSjMxZEVwMTZNSjNNOXE5Tksyd1JCUmdkZjlBTEs5RHR1R1RQSTdIcHZqYTVFQVUzT280ZytSNlJmSzV4N1Y5WlY2Z1daSWFFWldyZFJKM2NkaTROR092Q011ak9hVkVtUCtvVjlqSFM2c3ZtZEl6OFplcEhidENldlZ4N3RDbWNUcmtyeitDb3UzUTZjWXdHSEJuZUpESjd5RXk5K0g5cWduSlo2ckNzbERjNmhKYkp2N2QwQ1BzVWMxdzYyUjg0OG1BR3dDU1paMUdEbEpJcnNST2FUZkZCVHpVVUJmYTNZdGh0UTdkNWhCKzMwU2NySzdYVlVOSTJaRUpBRk0xZFFHNWF0bCtvZ0t5N3ZRMWJlRjN1cmI1MTRqd1BlMmFhaTBteEVQNHQwL0N1WVpvaEQxTzcwZVZWRFBNNjhDT1pzaUhyT08zajR6M1krSm45UFVaWlNFRmkwV2ZSQmpCaVZaT3lybXpGVzU1WWpXNlJ3RktLMVZEVG91M1REUXc4MEhFSzRTZWJEaFh2UWNBMlorMjZHRWQzWU8wQldpMXR1RFhSQ2hjL1oxWnN3RGRrckVlNkNicDVqS24vWkdNQTdGUGRTUmJCSDcyd0xhQXJYQm9OYjBWZG9HblBWaTB4NUNXTXJnYVl1OVpvdmtUdFU5cDZMR2N0YjJIQzlrWndoeHJYRnpLN0VTK1BXYXdQNUxuOXMrQVQvYWNrdG9lOEVqaFRBMExiakJKVlBnSnIyZWZIUERzZFNidGtVQVFNVkxQZFlidHpsQXVPcEJzZks1YjBjNUtYWlgyZy9kaFkvaHUwRUNvUjZlSnVveXJ4c1NKKzlZNUYybEpDVUpaUGlubnU5K2lyUTV4c1BpUGFzeDRIaEhlMWdlZ3VjUm1QMHVXb1F0VkhOZHdqaXV1VVJFOS9WS3ZKazE3QXVlRFY0TGNrZm56VUNDMWdtU1dJZ25WWWh6L0FkMllPNFFCYVN3S3JNb2xlODI3ODV2NUpsaHJLQU10azJ6OCttWEtzZG9BMG0zVVBwMmEvVTA1eTRjbThRUFpQenFTK2lZM0N2UEdqWVRHc1U2NlZncnNMa3JqckEwVDNCMGdFNFRTUnR1aE9wOVB2b0lUWGp2L1lMK0pOZ0c1N1hEYThXNThsb3NiTTA0M0NvZ0RBcE5tNjRML3cxRWRDMi9GMHFPZVhtblpuQlBrQ1NWY3BhUVpPZExFMkU1cXp6R2xZYWZWZmJDMlhLUGg2cURUOHJ3R2JQY1NUWlpKaERWWTdZUTFZOWdtOXJ3N0ZPNDJVbHhrYVU0bGpQR3ZaamNrUmh3dVRLbndoYWZDbXNBYyt3Rm1YVldqVWpIYmd1Qi9vdVBKaVhwWEFJOTJHelNtb21VbFFpU1JhOGpoWGV4Tzk4MUM5bVVib0ZhSFJNK2gyallnZ20rMmZEVHRkczA1d1NoM3lmRHUrc0tXSFRhSk1QaXBLYi9UeHhyR1ZjMTY0WmpUUW1MSVFrMVFZa1VnSTBuVnVGZXp0aCtrQTZOdlZyRjFGZmJjVmFxZGVIWTdNZ2F2clpWYmU5clhaS1g5K0g2SHJidmVjWW03VGhDWk9RWUxpU0JZb3ZQMXNuZmhKbTBzSWYvZC9kRFdVYjV0ZWVXdnFvTHRPaDF1ZDF2WDhwQ2cwM3YxWEcxRTdlWUpJdStITXRyQjZGcDBGZEpvazV3SUN4TzVIa3dRNEFML2t2RTVBOGlkcUdRRThTVWtLRVBnNDAzNjdXNE0xWjQ4RnoxZkc0aHA4RE5Yd2lzc1k1d2ZSaWdMNmdLZ0hPYmhEQjBDTTNKeEliaXZQUVQxTTU2Yk5ZeURTYUJNRk1kUUVXa3ozUVloaUtCdWVuakYvYmpramM3ZzF4L0pNSmlsUE1xVjEyczZldEltajlNeXo0cXlWRnJsUUMvYzNKYW1WdzVKcHBRZkk2SVlmanRmVWlON1B3N1lIVFppUkgvVSttenJBSHFzdWRqOUd0L1RCaExzM2dPWm53UXI5UDZEaUlrM1p6WDFMR3RHQWpGSUh1eVUxdEJyTGdDYWZBcHEraXNTQ1FqWDhyaC8zNGRvdFR1ZjZsTTVMQ2NwT0pwTFhMb1JBSS8rZG9BMXF6bDh5d1B4NGVXOWwvejV6TVM2b2tyeU92d3A4ZEIxM01WNlRIMmxLWFpQM0ZxU1VXTVdnN2dPR1cxejlyN3ZyOTdIOHA4bjl6SGtRdnE5YnVTZHp0ZEJTcEpMcFlobThLdytMRkgyK3FhQmJOSXZnMjh1MVlKcU9peFRyd1o4cm1IOGdPcm1xM1plSXZnUXVPeVpWNnAyc1pXWlM0MVh3d2ZGMHdwQmZrOEhaL3dEWmUrVnFObmZuMGNXNy9pSERGQTRVL3M2bE5mcm5CbGR6TzhsdXp1TWsyZ0lWQVRGTkQzZ3lrWG1oZmZwS0hiRWFNQnNxbGhhR2M5b1l0c0U2UlpmeWMxQmpCMFFYazNwTEpXZ3FpNjcvOVUvMlpVT0NkNUxzeXRTVm9ZZWNZbVhRaHRSQ2dib2txZEU4dE5BdmtFU3FWM2tHV0lSNFlBdVNPZUQ4UUQ5RlNZa2J2clppTDZubGVyR1UwZDlZZWdMNFdLemZLQTg5clEwQWR5c2FzUTh2ZU1SMEZRMDRrUGNodVNjdlJ1Z0hOSStxTFVxMU5tdHN1WnpoVlFHUDB5V0lWTWsxZ1hzYktjZjl5c0RzVEltdGZWaCtmdXFUNTh2eE5BSHJRdkVrNFpMc3M3Y1lWWjJmOCt3NENEZTNHYkhkNnMwTXJxSHh4Z2wzNklCMUtBa1BjRm5tV2hHTXNrU1BRa0RBaVJ4WW1maGVoanltMWthWW9TcmRsL1ZXV1RtYlNCYkNEamZIbEFpVE5BU09YdEFUdmpYNkJ1VkZYMzJKZE45Y0tQQWJ0MkdMOHNIZlhhNHYydCtkbHZFcWhic1NXT21tTzZBb2R5K25INytVbnBJWHBrSU9XeDY2VnA1ZUJYdHB2dEZwNk1NcTdMdWRiM1BmT3IrQUppTTA3SGw4SEtLbW9OcThvK21rK2JQblFHNGQxRElNTW1OaEQ4SzBhc2RieWgrWFdXYXIyeXpsWE5XL3IyQXRQQ3RkMzY2bXoxbVFYNU1KVGR3eEs5QU05Nm5BbEIwM2gvQ1RleWtQTXl6cndtdmhmTDFnVlJZZzE3dzVwOStDc1ZFOWRGZk0veVA1bDNvWGNrWGhkcjBjYXhza05WSGpxWkNTaXI4ZHZUb095MmlTNWgyN1lLRWtXU2lLRCtGYVh5WkNxZDBoY1JTbEwxWmZ4Z05SVjI2Q0FCbnJzZUt6UURvQXE5bGpaUHI0ZmQ1NFlwTjAzdHJZMFprUkRDcXZOdk4zY2tOYVg5UWc5Y01HTEQrTmppdzl2UjNWT1hhTy9mKytEbmlEeWhSaG13OS9JM2RTdmluZGthYzA1dlFCSjJFUm5GWUhoRDd1Q1NRVzQ3dEd0VU8rcUNneVhzQzcwUTlhTUJQZ3NScmFWR0tzeDZIRGtYUm1wM2REVlk5bzh3M21pTVdObHgyU0wzb1ppS0g4WmI0Zkl1ZzZjblVnQmI0THErWCtSNE5mMFpMR0o1cmpJcXVYY2VUQ0dkVk5PMmh0ckZkSUtnM2JIRXpRZHdWd2Z2SGJ5MkljY0doMnpRSW95endVTHdWc21kMy9pbFRDNkdPVlFlYkpEK01pZnJKRDVHbDEvMktrVGFVODlFMXhwRkJqZkdPUUQ5OW52eWl2OVhUOVBYODJZS0pxUFdpQ2hwL1EyRUtMd3pUdkNsdFpKSTR1L3F6aGx5cWZRUnNyUWJNVnluaWw5Tk1Id3lQSmdYMDkvYUtRbnRmMGVVM0FROTRmUEk5MG9uUHAyYWdyK2FKbG42VnV3MWFBSWN3VXAvZEVSdTBSalFlaDdPSUcwYmYzcC9XcEVUbDFFa2RDSDN4c2VjY3MrT1V6RjB0SCtsTjI4SjFrNU9Uc2tJd3QxT0xGUDVGdVJzZEdTWmZSQnRob1QybFc5UEV2RXA2WHdnUlcva0FZeEVoSVIvL0NvNDh2RXdrNHZjQ3NmZTZha1dJQ2UyQ1h2ZE5WWDhoU0IxVFZCK0ZvR2FRWllZZ0ZVZi9DenZ4a2tFbVpFbXQ2aUxhVHJsdDdaZmxzcjRvdnpwVFFwdldTK0dGRHNuanlCc0tna3IyOE9PanNUT1JpWkdReXdPTkJ4a3M4ZjVxcmNDOWl3M20raVgrR3lTUWpyc2lpdDQyeGlVNjh0MGdQR3BEWGRna1NDVVpMV0U1djZjcmk5QysrTXNzTGt0eHc0UWFtbnQ3NlppZUplUVdtYWt0N0dLTFJFUW11R1l4bmNOR01rTG8wVTVNWGFlMklpZ2ozRkxhUTBpZXZhT3ExTEZsZUpIUElGc1hYOG1ITDlFNjVCNmI1bWljN3dMdjdCZVRRY3M0QWNRdzh6bllkWmw2cTZRbk9VSmxlblRXRWhOOTFob2czY1JIREc5NzQvQVNDMTVHYUhJa0dyZjhKRGxDZGt2bElWTnRRUTFnajgwTjVQUkN2SUdLMkZsZlZKejV1V1JLTUg3S3N1WldkQ3BUWXVMSnhXMDcxd2R2ZmYwUk85eEovc0QzZmgrVW1wYzBGY1JPOURzSUdSUlRjeVkxSnp1RVNEcWlteDhjMzgzTEJvTkxDbUd0U3RtTjlRQm1NMGJHUDZ4dVp5am1oRktFYVA4YjJybmVmbmJyZDA0bGJ5enQ5amwzenhWRUU5Tk9LYk5kMVlaNG91S1dGT3U3OVg2ejR6bGgyY2RvWWFMYTVIRzg5ZGZabzNqTC9RWlpGVU9PeXcxUi9IdTZtUkdicGxFZDlBdXFETUZMKyttVlBYSU9mV1A3akhDdTN5cm5CbEFnMmt6ZXgyZVZIS1hyNE52OUFOZVc2M05hR0pUcDNoeisvd2FETmZJVFR0SUhzQ212SllXL0JVSHZTOS9lcVlrcWJSaGJ3MFZoeGo2ZVJQcmg3MGsxMTBDb25ISnRVdEFFLzF4MURTV0RWa1k4cWoyMjF5anZ3TEFEZDl6bUtFQm5nUy9EdWlMbnBSYS9yMzFQbm9kcFRRMVNkem9EUGdlTVdwNzBEOGpGNkZkRzJJZkNVcWZmUUJtMXMweC9WOXNPa2EwcFV1eWxjd0RZYW1MaFcwM0VSWXkveW9YL1FBNW9hR1A1djh3MXFMUXM4SXh2YWJ4UUt6bXpVcnRDNStUc3lwZXBwOGxYUVNZblpmeHU3NGJnRXpsZGZ3UFp5ZTlpWU1HZm1oTVhuTGIrNDUrVm4rVEhGUXp6YzZpM0dOZUsvR05OKytJTVBEeUF4Vkt6Zm5Iamw1TnBBaUdMVTgzdzdVWGw4VTl5NDg4eTZEN1RuMExQMEw1QTF2dmZEODNkNW9SaHZRaUxIVWZlVm0xZHFhb3g5TU5kME9OeTZ3dE1LWmZmS2FOZWZQMUNqZ2h4ekhRdmo2N2JtU0tjWTNZQ3dVOUlEUW5CUWlXYWlRenRvS2tYQVlodWF3VjYxd3ZrUWxSS3JKcnlsRWhvY0owdGMvMDMzRUFKZVRzaGMzdUJFQi9WYnFDTDUvTXZndUNIb0JmMlNDRDRZTlhHQ1YyWlQxVHpCNkNyZjlETTZEajAxQnY5ZkRBZWk0T25CS2hkUHNFTHRzVi9HZWZHNXliYUhmaU1JQk9iS2RoN1ZvQ092bERHbXhGUCtOaDhSOGFHdE1jT0dIVGVpTEE4M3pSNEp2MDlsT2FybEphMUhPQXJ1VmF1TzJpS25odnJIT2E1cWszYWNWRnlSNnVqa2MwNmZRVE42K2lUM09Wb1U4alIzWERjRFVzOVNwSEZ0cUprRHU5SmUzMXkxa1cyMXVUSUlXNUN1SG9vY2RnU1RJSWx0VUpSa3F3L21Ld0xMbXFORUZvaFBvOEFtL08xZ3c2b1dtMHJ4R2NOcmJ0RUtSTDNtMURIc3NuQytvMGx4LzVhNlVTSk1idDA5R2E4eXBIV2tqbXZDUjNqYWsxVERXbXlYSmE4YzhQL1czaFo0SlZQbFhTTUxtQkNhbmIycnp6WHJVUkovTDh3NnhJa1FWQ3FocVNqRUhKT1VQNm15am9MSzdPMzBldzZqcTlFbGM0VXRXdUc1cW9aNThUbUNrSHdCODFSNjhJZjU3U0VuQnYycTkwa2hQNjMwZEs1REg5NXdQdkJPb09jZEdBVzRxb0o5eUVLWHIrR1FCa2pxKzZZMW1wVlJxRUZZRkZOaHhhZFgwK3VvVWtUYWdRd080R1NHVm0zYWJ6MHU4YWJmRVhQaUVlNUc5VTR3V3dweit3L01LdXBrR0duMFlFWlk2SUtuWldjaFZuaGY3NFRNa0l1a0dHalhPVkRyNG5ubmNSUExGWWltY054N0JlM2NlWnRuUDNwOStkazFuaDZpc3k2L3FDWjRzUG8veXRwMHI4dU1jL0NYNXJFNFNjVEhpaTBVTGhvRFRaMzJabGExL3VOcWZWdHczQTNVSW9yc1d3czZPTHVBTmpBMVVqM1RyOTFYOGRSNlliR2xuWXUyNHV1N1FIaHlnNW91RC9mUTg3ZnhXTUVwdG8wV3MrVFFaZXRXZzJubHFYOWJUaEt4bEM5UUk4VjVGMUM1MC8wZGthWUkzWEVZM0VXLzRZc2Q4ZnNEbHNUT01VMXI5Q1hNelJ3MXU5WWVGdHFTeVY2QWs0UjNNcnB6SXBvNjN1Vm1pTmplTGREYVM1bGtKZ1dBZFJtNUdFQlVMT2p1TWRUYUFJS1JrMFUxb1JjWTRlZjZmbWFnNjZkVXJLM0dwRnFmUS82SkFjaE5ESm9LTjhpcGUzaUxEMkIyRlNicUJhT3gwSmJweGlDUWdUU0F1VU5TUmswZ05DU2toWlVacmNLbHNQcGpsbmljM1VkMFJVMzg2YUFYN2hwTmZZckZvbmF5aU5ld0lydmdNbWI2a09nWTQ3RVAyVUljZUs3cFdLTDBxQU91NFJycmltd1ZML2ZaYXdRZzVYaU1hZWtXaU02d01ML0Y4UWdsM01hNFJNVGVMcjVaZWV2UTZwaEQvbVNXM3o0ZFFsQnliazZocE1KRUE2YlRGaUV2akpsQStSaGlTTjA1TWN1OUZ5V05FejU3MCtERXBML2tvcVVORU0rTjBVcGlVZWJINTBuRzcxb2lJTGM0YmFIenVZZHBWWVpyUW5TMkNnajRlbXhBQ1I3VnVTMWJZTGgraWY4clY2eEFPcFpRK3R2K1RRVTNPbSsyd01pMnp5Y3I0SlZhS1N0bXpBWi9hdlhsbXdqM080cUdZS3RTeEpWSFAvQWF1cElOWDlBRzFPZWNUWkI5eVpaR2VUcjh3ZDZzcTN5OWgrQ2JKdGxnVnZteDh4L1pMNjNSNDFEUUM3RUE0blB0YjByZUdpLzRCUktCaVgxalU2QXVFVmxaMFB6YTI4L3pXWnlub01KNUhKL1pla0pRSlRyeUlYVVgzRWhibDR2aTJZMy9NaWtMcjZRVHBWV1NIZVBsWTVLMGxYR1BhZTFpWlI1OW8vWmVzWW56NjhqM2dVUjBydUxScjQwTVFKbzZkQzRuS3I1c0xIWmlXZXNLbWNDTThTTUZoWWY3YnhsNkxMcWcvS1hPcFRwV2pkUHlXZkNiODhNWW5IMEZSbXZ6ZXlFUE1Xa2dDR1hMdU9uMks2MHNZeWVlN24zczZOK2Q5YjhlaTQ0bFFIbHdOVHhMZ044WUg5RXErM0dqcUt5NDE0Zzd4WlN1dkdLdmh4c2NiZm5sWmVuaEUvOTNQN291ZUxXM2ZOQWY4dE9vcHlMTGt0SWxqYm5JRVl4cUtsOUJLWDc5UVAwOVZrbW1FM1Q0dzlzTE9uVnZFVklPSVBXNFFNQWZDSlh4bVlIVm93ODcrR0VKWGZEMk95VlpyOW40MGdlaURuZkdUcnhES2pZbDc2ZjhJUkJ3azYrMVphbmh1MzVzNEdweUR1Nk5hTUp4WHBrd3BUQVFqcWhreFJxNys5UlJFZk82V2JiUVQ0YWIzaWoxNkgwZWR1MCtvZHNOL2F5TUxiV2k0WHhhYnZvY0tIclB5RlhrNkw5QVBiT3Q2SXlhZTBWN0JSQ3Zzbll3Q3MrOVk1Y09TUjJDVVo2amNDZVZCcElta1JkT3RHQXVWcEdWQTRsQkY5bHhOWTJuVlU4NmVqWVhQMm9XS2ZTKzZFeURZMS9ya3RUZk9HcStsUXZNWm9HM2g4Wk84TWV3eTNpUGNZODZFMTZycUJMMWQ0Y1FEdlpOSWJsaEllaXlnSFQrSzY5YmhrMDdndlhxQnczMlJYQlVLbGN4cUFEQUl6Rm0ydW5iNE44YjBlZ1VoQXdHYkM3emgzRVpZVitEM3YxL3ZBRWxRWFV5QXF2QVVMSVhGQVJkK3RHdFRaU2o2N3FFczNDWVJWYTk1Wk9PZXp1SVNQOUN5NG5mUHVWU2IyNG5uRzZQeW1DV3F6TlJKMHFDUkE1aUtxTGNMcE92NHdWY2QzNXppMUdJbmJJUVVNQ2h3bHdxUXc5TS8yYXhYcEpOR2dNMngrZjIvdlFwbGlrdDF4U0lVeThxRDNjTGdrSjJGMzJ0S2xoYW9jbFNPVVpYNmNFY1hCb0dvRjU2cEprSmdFTDM2QjJrdWNzTVNXTmgvZHFoOHpLZ0lSZ2dLN1Z5ZUJ2NHNJZzNJczVvTG90UUJhT2dPeG9JaW9BYnJPN25qZzN6T2UxT3A1RnpIRjJOYWltVUc5c3NWeUpWTXBEMUpzTTVpSlEvRngvdGRONFlpMzNRWTVPTUo3WitVM2FvdDBOM2xUbGxJYmhXUlplT0o1Ym1leWlvN1FtbHlYZ0N0SmJ6STVwY2R6QSttZlgrTHFXZ1pJUjFYNFJyZUFFQ2tRd1V5MzhMZ29oVE1HUVJSSG5XRDI1dGFRcVRkK0htNURxK3FuN0RmU0UyZVpoMmxDRnk2Sk1iWFBybDFaUStDZloyYmxkbWF5NlRvNDVZK3ljOVFMamFmT1F3K2F3YSt1bkNETUd1Tk5JYUVFWTdjK0daWHVtNWQrTGFBWlJmQ1VaRWsxaUNnZ1FBQ21pWmwxcFE1RVJ0WmtKYlQ0UkpRbmd2V0kybDFudldiTUpNT1A2MFlpNHpad2FLcGE4UFZ0SmVpRjNWUXY4MSsrWTBSbjg2T25QK0VRVC9WM0xPZWxqUFAxR0hQS3VBamU2cS9DdGNieWhOTThEdy9zSmdXc2czNndhT3RVOWN4cnBTQ1N2QTg4aTd5TURpTXVzUTN2K3BLbllBZGdubFlrRUFYYjJUOTR2blE2TXNrKzd0T1ErdXhxS0c5WDN6MXc1bURTNWdNS2xGVnhTM0tBdGR4NEpoeERPT0JwZWV6QlI5ZG5QZG8vUDhGeTJ3STZNaDVKZ3JHdlN6NzY1WnVpTjM5dkNoc3B6ZDRMR0NzQkZvOEloM1IwUytQcUdrNXljWk5lRjVyeHl3OGZtMVNyUjZBSTZCeW02VmN1UjByRExLTHRBSGc4VWRndUxmOEJQWTZ3dFoxVVliblRFYk5qY3JOTmVqUDNMb29EN0wyL0lpMjFqM05hUG9PVm00LzZueVFMVUZ6MW5IL2VQVW9Sb0NVV09HUndvVVVrUFlUS0RuaEpDVkFFRFFYazZaSlluNFVObllLYllYbDVXV1REakRhOG1GWEY4T1A4OGRTa3ZrZkVMZk5qTGoybjg4djdGWndzc1M1bXl3WS9NMVZELzJoaU10ODZMYnRVRG5HYU1mQmtSdlArMFdNUjFwcUx6dzh3U2xoVFJjeC96WUJBdkRtRG8wTjRNVjhoU3RXTDBsVGRLQ001MlNtNUN0Sk5CQWliRWFXWGYvbE9zbXl5SVVSUUVZcHJDU0x5OFRreVRRYUlJaUtRVCtJc3l6MzN1cHJDcUJsaFBVaVhXVVFKT3ViSVhWdG9ZNHJPOUpOUmVHU2hVVzdlV2lML1JBcGU1b2VuQXF1RHJON21xV016dUo0TXRNb20wTnNlYVJLYTkwdUxYRlpTemtnUmpqYzAxTk1kTWtUL1JQNjc5cXBWL2JMSk5HcTJHU0t6RkRacndxbUg5SVhZMVNuMlVKY1pFTEd0QlRkMUhTaU4xSnNVQzBDMUxmYjdEQ0F3ODFyRlpIc1ozb1J6UGdSb2Rxa2x5WHBTbHpFTWExOTVKUnFuc0hxVVJSdlBKeWxQWUtmSzNQSSthWlRidXJHV2kxV1dHMWhtRmVTcTBuR3hxb1lLNXJwdWdOSjJrSkRSV1NEWERHNC9oL2pJeFdEcG4zZGxTTHQ5QVJxUE91bG1TU29XUVBjMk9yYkxZV1h5dER5V2J5dy9OclRKQ294WW4rcFVhWnUreGtxM3pGdW5rcHU2Q2ZsNHEvcWtNa1NVaG4wUXc5T2l4bi91Z2NxWlJYaEVvT05DTU1ZaTVGSVpUQnZ1NWwxNWcxdHJqcjZuOUVGQ2VWREh3SjNLYzVyRnNxVFRLN09yUEJmR3NDUFYxREhnMk5XRUpPaXMrVXRndG9iU21rbEplYXFiYmJwWnZ4SFBCNDZjR0JFRCtpZUZRZ2pNSTVacWFuUUliOTkwWjhzQmVBTkFESllWd0FsRjF0MHV1T2c1aWo5QVhML3JVYVpxaTgvek8xcEVFWmNkbCt5MGJrR2ZieThTTVZmcklsRmd1VjNCUU54akVmaEtDSTZKemtHdHJyWXRsVDNybmZ4cWJMUmNESXZPS3k0bUFHZW1JbU9vZm9xNDd4QXRuK0lYQnZ6T2owYnErekV3Z1lRZmxYSk9KQ3BTaG5UbkdVNjcxR0w2RzJRR2t0KzhrekpvSmhyNDJDS2Irb2daWDJ2SGRFelgyNkprRXhPenVxRXlnWHU3aWFxS3lidXgvS1d4YVp5bWErbUtWckVLdGlvZ1VrWUZ4K1MyWjFTY0VtWWNXaFNzL1RTdzU1QXI2Z3dUMmFNUmhJOU5yenRHblBzNWFIWDhvb2hvV0JZN1FpVStqUzViUjlsME9YUDhiU2hQQkp0YUt0bmxKNThZTlc0TzQwVGtEOFRrZkd0STdtZEt4QU9CL3BQemU4cFl3SlA4Sy9SbXk2dFZXRjIwd1pjWTcyRysrcUtJRkh6SEJZbDVxNFdoYk14ZEM5eHZpZjAxY0wrNlZBM1h6cWlzcnZTOWhSb2lhMVorbDlSYU1IcXdjSHVUNzllMkg1Zk43RDEvVENNcEFyS2xsMWZuejhtWVZoNXdSZ25SNVpQcnViRi9RaTZ1K0IvcThud1c5MzNjRlFEU2tJQWpqRDFUcEpqT3JMcGZya2FBWkZNeGNoNFRpMnp6dnEzeTFUT0dHS1d5ZjlUOGpXRzF6SVNZNFRkZFFJb0FZeHhyZ203Z1Jaek92TTBFUHAvaHljb2oyS0pYeXI2VjJJNWRDbHF2Rjl5UXU1WDdIellZK0tDKzhpdkVjV0diUTQ5U08rNU0wTTdtQlFHQ0FyeDZlVTh2dkVWZGptY1dwbXdYc2dzU1lTcWVQeUwyK2lQam5LY08wN3FiTG5WdGt2YWVFdVM2ZHZTUjgxZ0NjN2lSUWVieWVWT1Fybko3VktXd0FyUmFMYWp4bTgwUmJiUkEyVXR6NVBNL3Y1QXk5RXJWdjBTT01ReVFueWg1VU1JcDNxdW03S3RrQXdyTkpVMGZQVk4yK0w1U3VwSmVFTFpvdTVOR1NpcWlZaXVOb1EwTWVqeWRsSXE3ZlZrNjlRd296bEU3czlhTlRJVlZPU3pBL01LU0w0bXJXWUtVRmhoNkhUR2VxVUExNi9QU3ZWQVhCaVhxMlFQSEhmVjMrQWpGRERtRXpVUTlGSjNZQ2MzalAxQS9hd3VBclR2RDZ4eFpRWjhSZkZrUStQblJpTXgwb21mSHlCdHIvWGxPbytWOU5DZ2NWMURFRW9hYTZmTjhpYkw1bXRSZ1N3bW1SekZBYUp0VzJubkRSZ3dheHZpMlBodTZrME1TL3pkNUxUYW8vYlpGUytWU24zTmh6YWYvS3lVOWFTM2tIY2FOUSt6aUg0dlRGWmlqbmorYm9XVk1relRnZmlwOEFScnprVXBadlorMlRPWDhCT3l1eWthNjVUUkd2NURmQWRPZEhiUkQ0SjhkMitsMUVraEZ0MDBzYkllWmNCcHUwaDRyenVXZytZZCtJYXM1WTJ6cWhKeHVuaGhTdUFSNEFIei9HSGR3Qmw4Z1dSUnJScWMwRDJEV3hoOFYvdEV4VzUvR3EyODB1U0RKaWx5RURxQmMyZldNdXE5V0kxdmVBakpPTGNydU9tUTdTUmR3a2NtK0huSjgwb2Q3NWZDSHhubTE3N3l0ZS9kUkZrajFpY0U3NE9tcU44VTJzM09sSzZLemFZLzJSTWhlaERvOXdGdjF3Y1M2Yy9Za3hNN0laK1VKTFhIUVcyZEpkMENDYkNPY3c2c3dlR0tnT1MzVGk3Unp0Vk1uTG0vZEN4S3NIUFY5V0hhdTBqZktnK1hJcE9qVksrQlNEZ0t1eCs0UU1yN1RtVU5ZWWhRQzRsZTdKbzA4K3YwRXFqTld0RXRZbGVmZm5oQWMyWE9ZZ1dNeDVLWEs3WkJmTm9LRjB0WWNrTUcrV3gyVWZBakZXZng4Y2VEaG96TzJOYXNYUkloRHhTQnh3Q2pObE0zK1FlYVhlY2Yza1FMVjl4Nm4zdm9lQ0pmdTV2SDZJcW5TZlhGQ1B2OGlZZWZ4ZEdhOGttdm9DVm1aazJuUHJOUFFIVG5lT2RYNGc5eGhMbDFJcHZhL3cvSFA5QjF4N3VkUTEweXFxdmtwb0JYbXJsSHBOSG9pU01FQVlMempJeVRhVWlnODlWQ0JHYmJxdENocFpjRVhEaDlQNVMzaE1adXNHdVJhR0ErT1N5M0IwT0RnWXdPcWhob0RkZkRUcmh4WEQxU2hCajdUWS9EUzJHaVprc3BGSkM1aFl6QUxFYlpxdGFRUlpKNHZRbStuT1Zha0l0WXRvOWZDZ1BnT1k5di9TQ0w1eUhIL0gvOXZ3TDBDVjlNb0dUU2RSODRqRVVVL0poSEZKeXdkNFl5Y09XVEZ0RVNSRkcxcThnMGlCTlRKNmQ1ZjVrNmNMLzA5enMyYmRPNFV5cjR3ODBWRVVIUUdvWmhMMzdGTHpBck9GcXJZM0Q5M0lKTEVBbFZOTXNocU5VYngyaWRobGEyUDNHZGZleXJRRG0zYmxXTDJtVEordGV6UTRBRk1pVHJBdXlDb3BhMWVLTi9LN2FKcGpNTU1RY0I3RUdYMWdGZEZDNTZGUlE4bGVHN0pTeEh0VXZ0Z2VWT2xEbWxYYk9VaUE0TE1qTkluQkJkaGNQYUlCWnRtM21CWklYSDEyOE4vZ0lDQWdJQ0FnSUR4L2I3R1A3ZnJndjgzcmQvWjl0VCt6N2hUOXYwdFArMzdHYjluMnBYKzM2WXo5dmROK3owUi96ZW4vbSszMlUvNGZhcDc5dlpIZlo5a3YrLzdaYjluMGt1L2I5b1grejdVei9oOU1iZlYyOGZzOUJ5KzNxWTRmMit1MyszNnpUL1oxYmZzK3V2L00rd1kvYjlERi90K3NJdnAvWEVmN2ZvZzc2dXpPK24zSVgxZEhZRG5WdUNEUUpXV3Q0b1VCS1NJd3pqYy94MnJEdGs4eGVZNEFNVlBGbjRMRHpEWThLVG94dFluaWRLV2crQ1VSbmluZ2tod28xNG5vaVFkVUdUQkk1WDJaRTJhVkFTVzZuZjJ0dFFVSk1MQWNjdDlidmRBeThKd2MwRUgyTU84Wm9kQVZsOXJZUzJwa3pJb2ptVXJPL0lQVjZhOTM2Y0RKTGlFT0ViVXZJTm4wQytlUEl0dnJmVWZ6MlBjVzIxMkVuM29qTGdNV2ZLbVhjcWZtY29LalpZMHdURC9KeDA5SWdVYkhabUpmMy9ZMG1USjFBOFN6dnpxZHIxc3VFNlZaaTNVVnJxTmJOUUhpYjFTaytpc0NRYmNYcGV0eWpUVHo2b2lBYnRsMU83VExBaStTRzVTZm1JWDZOM0J6KzlQYVFSOVVnbzc1L3FrcmlheVlDbVpmNktoWmcvRU5XRmJVWVhtYUJVL1QxRWJiZDRLa3NYQ0ZXd1BmMHE1WjBJb291VENZaUhwcTVVOFVUVXVWejd6YkkzdDFiYWd3ZlFubUI3WEhXRU92N0kwM2pPTzJhWk56cVdhQ2U2emNIRWFLc2x2OTFyZ1JZYlp3YTJaWkt4YlFJUjE2eXkzWnYxWW55ZHhOdjlRZDhrSW93enkwZmlodUdqSEJ4bzVLbndGeEJEOEtQcUlkOUYwWlVJUlFoaXBSODNseUdZc0pTM3h2cDFNTThxSWpRb3IxRk1YdTQrekpsQ2ZsRmM0dEFmZEEzMjZkc0hIRy9IeTRvSmdhY2ttNlFaZzZ1dHFWVkprL1hUL09BWGpKNzJRRmZRNDZjVGNFRU1pOXdVYnBNTVhZK003dVdyZWdLV00vamR1K2xhT1JjZS9CRTNnZEVIUDRJcmhFQVFiK3ptcHduL2VudENjUXZCVWJnMnVvVWw1b0ZtOVpmbGFkMm1OME93NHVQcXIrN015TWljSXJzakpORHVBV0swVGF3QXk2RDVuekZFblhraUhteFZZSUU3NmhxV0ZCTHZKMHNKUTdCc2JQTkJJMjJySlBPNnkrdFo0Nks5MFEyMStZM0tvektWUTFNTm54RmdSN1Qwc0gxOTNEajBDa25TWEZhaHVmalp2WEl2aEhjY05UTHJwMTlQdTBiOGNFVk5xZU9ka3JwSlR2THJ1T1U2R0Fxbk42V0ZlYnI0dk40VGllVVp5K3YyYzhrSVhrTGYwYUd5ZXVyRktORVBINnFiZGNybldYeFAxNkJ0N2pnWURHSkdFSUZiSyt3aEtJcXltcGttWjlFQ0htWjJBNk81amdFcEpDQzkvYjJ6Mms5VUNXWktPYlpsZWYwN0ZrRUM0MlFMUEdkd2h4bnBRc0VDMk5BL2U1R1VtdTF0eGN4L1FwVndKNklpSEF1TUdzUkNxSDl4VllSa0RsakVnSXBqMTYrQk9aN3VEZmFvOUlTajUxUWN4UjZUZ0dveGR3QlVHV21Ld3lOTnVnd1Z1bVBVd3J3MUh1TzVjRkdVTnE5cTE0TWM2a3FZZ0ZBVG1reEpJNWZ3STZkOW1lMnc3cVNxblJTUXE3TTIxemEybEszZWs1MTZQeldPcWpUWlFkRHRSYmNnbkRGMUQzL0FPcEZ2bG1mbENNS1NMSUE0cGFkRzRFczdQRU13Nno4RGRLZm1KMU5tczhlZE9LMmVHWUp4NXY2dlNhdEd6UXZXL3Qrb3RjV0JKK0dLdjFnU2doVWNVUldhbERRNFhiNERvUmFjK3dFM0phNTdja3kyaW1TMzVpNXNZV0J1RFBiMTRSWDhUM01SNDBqKzRYbnVZZXNHUU1KNnhFSjRudmZ5S2xBeEFJeVRmWS82VE8zM3VFNm5pQnVyYnFzMzYyNHQzVEVxbHFIak5GWkZlUEM5U2hZdlk2ODBlc01VeDJpUk9UQlAwWnRzcGhVaWtMd2ExbFJYbUNrS0VWcVdXcm1sT1RpZWtUcllpb29iT09jOURwKzU5STJ3N2pOd3Rpc0tpcTVrTnRHM1JtSjNqbG5mQmEraTZ3bnNvandiYkRCa2xUUFpISU51M094aExyTDRkR3g5QU5OUWNkVjlSaWo0N3EvdGZtZVhCS01IYlp6S0hJUUF2YjlhaUJiTDl0ZG81NCtZY3BWNUF6V0l0cnNkTnhTN0k5eU1abmVzTENSTDZ5dVBNRHBsZjlVVGhqNkJXUXVWdERGTnFHMG1VNGp0YW5nSm9EeDBSNzMvRUNSbFlnbXk3T2U4elZwSlhNbU9yUmVCTy9MMFdoUUt4b3l4QWYxNDZGdFFDcWRNbWYwY21oSGJ5Uk9hb3NvVUpmY1lNekV2Y0xjY1hveUh4SWZORWt2aE9lcngvVWszL1pOaWoyWFNRM01rajArRlMrYkgxbThOR1FDSTZvejNJcTRsUHlNZ1dyL2t2bS9hRkNCWm80MFNOaTJOUEdMTE5OTHVwZEpnNVJvWDR2QU8wZlNmUm56UHEyMkNpbGtRekZIV0ZySXlXWkxuOEIxQ284ZGUyMTRSZUJqVTV3eXFoQ0w5WnFlSlFISzEwbkRzWlpYdWNXYkhleExzS3RqcE0wY1pBKzlOSmEycTAzRUo1cmJZTkxRRE1jMC9leW9MeFFWTnpWcndicVRwT3gvQi9yWUpwV1psa1lqSlpKQzJySzdHWVh3ekt1eGhTZ2JKdFlsbWtTajFPdGM0YldFaFZ5anVkekhFUTZkUXZ0NFhodFVpL1drREh6OXIybTBJUXo2L0lGc0hxRmlPYlFqaVltYkt1NHM1cEliUFgxc01Ta0FjN0cwUXJiZ2lNYWVMRDBqUG50UUh5L1pEUnorZDdFanRtU2tGTXBHR1pjRTBMNnNzSEdSdHF6SCtuSmNsQk1kcTVOa0wvZXJ0bUFZb3FCOUlMNXZFL0Y5SnczakRVamV2akVZK0puTlhXQjVtMXp2Ry9tdk9lOVpRekJublREM0sxTjJUNHNBaU5LMUdVQ3hOcFRLaHJDVXlUYTJzRStUSHhoem5FVjRCajhSZFhpM0pqUFJ1SS9jVDNVbmFVT1p1UHRNbEUzYlJpcWdzNHdmRG93eVgzb0tZeXNiUmowYzVCOGVHYXBCNlRFNFFZR2lUT2NweFZaM2MxVTZnNnhrMmxDV1NhcWplNmhCWEZJWXNqSWl4M1pHZTFwN2hvaFhNYTllNStObXBobmk3TGVWdFhESk45OE45a1FiekV3M0RpK2RTZHBLS0ovd1NUOFZPTldtVVdPVzcyWE5vN3UrTlZHUDgwbmQ3RVhtbHI0bzVjbmErQU1mOUs2Skd1bEpyTEdwWUVIODA3dDdiNC9PeDBMaHlGcjhJYTI3eFRxTGN4QXViL2dVMzBmbjlWV205bW1EbHR2ZXdlREMyanJ5OWZvOWtGZmJvbEdIZGxiQzJnaDV1dnVkRjNFWW4rTEI4dUIvdm50ODV6SGtHMFFsdW84Q0hLaThVeGxiS2dqWVlqellWWGJrbW55YXVVeEhRcGtxYTFjZ1pWQXRwbXl1a21FdUJjekg1TnpJSjRiMjZDdGVPRTFWaGQwUXJ0cUdFWEZpT3NFKzd5STR5bG1JdDY3ZG81SXphRGttYWtXZ3cwTGVCNVd6YXhkb0pmV3RLNGZocFF6c2FueUZqTjVzWmIrTVN2aUJRQ1Q5ck56TzJ3UGg5T1ljZkx0YWhGd25mYTFPREdvc1IvNUlCbHZlY0E5dzR1SHgzTk9vRG1sU1lDRkdHWjIzbEd1SHpONVl1eWNHcXczSEFrQUVpR0JsS2ZwNjJYeTNJSFZKM3BOWW5uMzMxTnhuNHdJMmZubmxaRWVpVFVCVGxxSFdINHh2R1pleW5QTEZEK0NXdmJYZXd5RHBBWHJja1Y4a0hKRkJCc3JuY242U2JZejZFMTNFOHFzcUtJditVVjVFU3hZVEpWNVN5SEhTT1RLNWkwWDNQMDVJMTFZM05iOVhVU214UXBEZjVIcUQyMkJaejIvS3JHVzR0NWROS0RSb2V3K2g1KzBSYnhvOElCSk5lMkJ6SW5sSXpyaVc0Y1pEU2s1Vkdiait2V0xYWEluclY4aE9ZNzZYd1lWUFh1MC92eThWUzJqVnUrNHNqUEJxMUlwMERuZlBIem56SlgvMVdJdndXLzh1bmdBQTcxcWRySFV0NmFHZThCL2ZwanZmZC9PWUtpaHRuR3UwbXRUQkpnZEZnWE9KdzJidWF0UDBXekc4bk5CeE9VUHdZMGRQd0J4VTQ2OHlBQjhKS3k1Y25zeW84YUFvTXk5T2duQjdLUmpJQWovblVuSWloMVVGY2NQTWVucG9pWXZsZU04WGI4RnJWMlBPRXVKN0lKYW1sVVN6eDhkcmR2Ri9QbjU3alNNQk52dW1kMFhaLzR4alE2K2RkYnVFa0xkVUdSc1N4SEFIQlpiVjQycUdvMTJvMFE0em9Cekc4WmhJTHpDVEg0ZnIzejBTeTJpM1V4N2NqUEx0THZJbU9xR01WVzIvTm5wQWpCODBRZnIrOFdkZUNmMVJKaEFvWTlpWVNVemNxNTdiczd2RFFxQm1PMC95aWNIRkYrV1M5T1FNQzJVR3N6aERPQ1ljU1lxcXNTd3NwbmhROE10SWNRaXkvRWdHY1BlcTdkandOTjV6dStzc2MyMU92NkZ2bVliQ3dIY1dielNwdk9GRU83SVRoY0NMV1dXSU1RT3orTVFPM3k3WndpempPSVpDK2FHcEkyRUZEWEIrV3BZOWRvdnFTajV6dHpiMEZheFVJS3puMkEzNGNNR2FsQ1NsMklubTNrK3RpQXowNmFVK0drZHJEWFQ5eVRKd1RGODh3QjY2citqVDUyaHZOVFVibFRRYWE0WDZXQmNDbmZNbEE2c2JrWFVQMXRRVDd0THg4SVNha1g3T09GME01YkR6aGtRajlHL3hNUCtQMVgzRG5iK1YwdWtZTy85R2pwdVhrbG4xNjRka2FuTWNSR2VPYyt1NTBnMUxDVVZlV1B1SldKY0FOSUowcVhua2s1NkNydmUwejFSVnhHUVhmQjJGemZFZVAxNjhSQ2JZb3l6c24xd0dVMWxTSE5GT3pIQytCcXByMFpFSDhKMmFDWjNudEdyUUh4U2dQemtIaExsTFZCWkx6NVFtY05PUSsyZ1hEYlBGQzZZWC8vUk5pUzIwQmg2RE5POW9aQk1sRWh5U09kM0ZSazRHS0hXUVZsZXhHVGFUeFpKRlJFVnR6S2g1c0xTWWVHclhLY3RETTIzYTlIZGZ0VnpKaS9UcEFLSm4zRXhTeStHMTFJV2RjejdDcXRzZXpUUng0c0Y0b2YzcFA1YW1DcGVxZVlrWlBONTJUdVhwTEgyZlhsTzBmeUkzd3RGSDlOOHhudTFkSy90b2F5RXljcGY5TTlxanYwU0lLSHA5ck5sOXVpdVJ0NzJBOFFkSnpqOGNJMHNlZDgybkJFVnE3UEpIQytHZ3plbmk3Q2EwalBwS3pVK1F2NTZSaGRrY3R3VUtzQzhNTWpQakpqMDVUQ21wak5YL3YwZUEwZkRkMU5KTjlIVk82RWFkbFVyTllKL3JibjFRV0JXRHFRUU5HUjhNNWsydFRzRjdRdnFKa1IyNU1JYkZJeWJObXpJc2V4Z0I4eFpVaGdVWWlHNlU1ZXlEVmZqOHo2NGFSN0lqMVYxaHBRVkNPZ0YrUVYzM0RUQ0hrUG9RTzI3d0I5UE1RcFpzdFp1Q2RTUkpRelZQaUpneHFrd3pzNnk2NVVpVWlMVDUyZ1lNRDJDTjlqWU1rTXo3VGhLU2diU3ZjVDZGay9NVVh0ZVYwMGFhSi9pbm5kb1VzNjlRTFNaTFBtb0h6ZEhRdHlDZUpwMHgybWgrK3p0QUpxbUFJeEQ0YU9oMFlaa0YvYUpvbnR4T1V3RWVYc1FLM3Q0ejFRdHFqdVdjUENSb0I3bG5VWjhNLzBMRDlSalp6ZEg2YWU1ZUpKUy9TdFVXQktwNWFQTmdMQk5Ta1pWWUJtckgvaUVOTkUwaDhXYzNhWXc2aWlkSkNnWWJrUzd4d0FhNkVuMDZUSitUd0E2R0RwN2VUU1lyUzFidjNtM1Uwanhyb1pRUENwMmFBeGRoNWN2SjY4SlhoZWRsMndvdDhpT0hRZFRWMkZRck1OeHJFTUgyWkU1engyZFo3RWZNbzBNeDNSUHpna1h4VjU3NS92cnA3dTIyV2hMVTkrRXhlN2FZOFNYRnY5T0pndHRENVgxSDJXQmhZSFNodFlSU2dEc3pvT01hdFhRTlUzbHZ1OTYzUXdpRGZMY1FIYmNuOHYzS2pKNDBBMkdoRm1RaHo1UnVhM1NraWJMWWlXOGJPbDl3dlNqbnVBU3UvZzZZV3RYQlBjM3BNK05rU2FJY0lwSU00RFhnNzdLSjJSSm4vcVgyVFpKakJoOWxwZXRNU0dLM3ZsNWFZS0NsQm1EaGMrUm8xK2Z1cjRWa2l5Zm1Gdno5elNVNTdlaVAzTkdwUit6VWRpZ1lNUVJpZEN3KzF2bkVvdEZPb2padGNGTzQ5VU9UbkFuQjN2c3Y1YnY5eU41QjVubHUxVkdjVUsvbmgwcDBSL3llcEpvOGFPQzh5YitEU29IL3p2aDMrdnN5V3h3VFJOMmtoR1JESGNVVW9odmgzUkpFY2VJTk53SUZmeEhPQkZpb3BjeXVONGlPUTBONjJpK2JncVc1dDMyQWZjaCsrNy96TGJVd1JldnpxVjNIUVNpdTNOL3lvV2hSMUFSODdtOEFtcHEyakFyRzN2U0g1SFFLcGduT1BjdmV2RTQrb3FMdUtUUkpvclB5cGx6bmRiSkFXd2Q3ZTI1dDNRVjRTZWZPa3kvc0E5US9CdHpaYkdZeDNydklYRVJGYXJvT2FhYVg5ZTk5Uk5xYmY4ZGtMbHpTQ0hsNFNJeDhFUEUxc2xoQ3JZL1Vsb216SndLNTRRU0hKdG9UN1VZRnlaZzlrTzV6MHQvcENCNHl4QWtFaTZrSlp6b0t3aHdQWmpEUTdxRVdEVzBrVVZZNHE3NGU4VHhmZDhpWHVETHlzVkVjLzBhcEFtTzE4RW1rd1NRWDdQaUJoQ2N3Zkg3eFhZMlljdmNoRzdjMHowaWh6V1FMcjIwaTdRVDI4c2o5dTEzS0JKNXF3NEtDRG5TTkU3WXhRRkJ3U1MrR095MTQ4eUVsM3JHSFpOaHo0bHA4RHdmUXJrUGJWNFZHWDcrOE5sZDBKUHI4OExrMEFsNC8xWEdPNmVBN2Q0MXBxNHVHR2VxbDc3NGRnS1FrcnZHVlJEWUZ4YmRMWGdqMlJsOUNFUlhKRXJkRC9qVlhmcklYa2xPZzNUSFh2WVZhYzIvMXViblQwTmNRMysvbGprMFlVVkVjWWpoTmRqWkNoSS9aMHpndFJxdzlYTXh1L0c3Y3czcmZLdzQ2bmFDaHNIZzNtWUVSayt4SG92NVVLWHRDY0RRNmdiaFdsaGRhMi9vT09IR0IzUDZBZ1IvaDBTUXpONy9MV2lMcndLUjBDUlk0alBZU2E3cktqVVVERlRvenN2YjZuTUMya3RjMmVLcVZieU9rOFd4MGxKVmw3NC80T1NSY2VHU0JyVnVReTNWSzlZMjJmWXh6WXViV0N2bHBBOXNYZmtkZlpkb3VPVDZDdUdKSUhVNldWZC9KSFJhdTVsWldpc0wxam94Y3NuempnNm1Md3BVR3NOZS9IWGZuZkZOUVJ1VTY5VHFPL1pLWmRLK2phdmU1N0FjZkpPRkRKNGhNV2tZbFE0d2FFTEpKZUthUGE4VVRZUkxVOFlqaWhXVlk2d2VhSmlaZS9oK2Y4VW1CQjlWTEhhL2gzdWhLTi8wV2V6Qko4aFVuVGxma3VRcVVoNGJyeEtvL0lBcHJvRVFkQlJNMWJDZGxtRUF2R0c2WlFVYmpjaWJyRlBQc1IySE9XemFWR2pJQURKVlBjNzd0NXJOTTRKNVc0ZXh0SkF2clZ6TWhBajMyaXpSUmIyOHRFSUxGaGZzVG1CT2FneHpsK2JEUHpPcXhtSGdvWFRHM2hGMXJuMFBJMnZKdjVHYTdBSzhIdVVJcS9GNzVOVlRyRWxHelN4V2RlaVJ6T3FQY1lyQ3BzNDA2Nm1iLzZnSHNpSWdnbzgwZVF6OTQrQXpXaXNMdkxwcHd5MThiNkVhMTFRc3FZZndIQUxscUl1UHpPeUF3NFprT0RoNE02RGtLRTA2VFB6Y0Rud1gvaDRpTElJcjdyVzJEK1RzekZ3QURvSUZmT1NYRzZDTUJmaEM1K3JmMC9Hdm9NZFphaHNiUFdVM3orWU14aHFGaVU1di8yQXZhRFVUU2JSTlIzY0c1eEd2RlA2RVRPSmVxQ3hxQ1piK2xZczNIY0ZnL0N5WHVERkdZSTVuSk1wWFltQ0lTMENSL1kyc2dsbHgybUtzaW9VOWYzeHhrb1BVV0J0a2l2L1EyUXd4cWRqaFZ1UWRXZ2N6RlFTOG01S1YzZHpTUGwyVkZWOGpIdTFESzJMYlA0TkZOUkZFaEJrUTdONEh1b1FNWDhiV1Q2RUlEc0tIazVtbjNmTGwxUTdoNEdmK3pidWljZTVOUDErNWw3bnl6MEU3T2MzTWJQK1JXazQ5b1dyR0FvZmZPd0ZING0wSGhQZUVpY2lZdE9BU1BYQ0tsakRWZkloaHNlMkwzV1NycC90WlFrTmtrNkcrMytPTlBTZ3BnNEF0WWU0bXloUHRaai9GSzJOZEVaZmVzRjhKT25iQ2xmdStoK1VKNml0YlkrSVliRnpVckZGQnZ5cnRUdmhhdG45S0V0ZWxxZVBqVG91cWJNTlVnNmNFWGlhbzB5SmVpa3p6V1FWdDQ2cmlwcmRHWitLNkNSbmx1ZVNVd2ZxcG1UMjYrN3VoREJsUkF2NEJjYndBWEMxdkx2RlBHUi90bysxamZCa2FzQ3FwT1lvZjZob0VLZlpETDlRcXdQZUhOMytPTXlVeUVKWXpKUi9HUTYwSGJCY2FQMGtrRGpucjFsNmxvbFNtTk0vd3ZqVWg3NEhoMjA1TFJnenk5UFc4WW5nZDgyZUhnWDEwZk96R05GTHBhc2xSUWtHZ25DdnBOK3l4UTROaTZwZGYrcU9OMVRPdWJJWkpwcS9ScEFyNVlUd25SZ1NCRVd2ZTgvb2N6YmYvMHNySkM1NnUwYmJKNHlZWDlFSk5MRnUxZzhnNXpieGowRTFlVk1FdHh6OTNZaEJhdFhFaHRjK3JsQ2RFNE45QVkyRTNSczhMSkVtd2pIN05xQVJNdTZ0YjF5UWNOWHpCKzVBY3NXTExYamdhNkQ0SmZGeFlLT1QrQStmNUNGL0dUTFNGYW1iQ0ltWlFuR2JING81WmZadEozaW9JZW85dThwTHYxTHg0N2M2L3JrY1d6RnVWU09NT2l1ZDdzLy9KSVYvS3dMR0p2VnpTTEJXY0pRemQydmtHd1AyQW1oVm1BOEwxaUgyYlVFQ0E2elFLTTVJVUYwcGFqbGgxT0o0cXVHRjErVDg4L1oyYW4yK0E3OFlmK20yc3ZoOW9lN0VtNHpUSitrRUl5aG8xaGE0M2liUGd2dVFuTG91SmpHcmk5Q3NpQi9iOG5UaGZSMDNOWjh6eHEyNVFacXVMTGFCVXVJWTAzZlZPRlhoc2FLOHNPNzRVSVd6bUlTdUJvamhyTHJ2Wjc5MHpldW8vaW1pYWM3V3RpNVNyZVkrYVc3WlU2ODc5OHRBM3dVcW5abEJGNlhndndDOFB3WnNHM1VGMC9lSy8zYXZTcC92MTNIRUY4RFNvOUt2YVZBR1ExbUZYVUlKRTRZbzBFUnZKc3VCemthdmxhY25yY1VNRlhKYjR3YVVNTDcvRHdnZWo1cWhDdHVtU1daM2dNRnFaRVFLMHVPdHI3bFhndlZGcThSa3oxMnNGU215Zm9RbmxuZWlicFNLYWNma1ZsWXpMMXRDdXdxdDI0RGNGdmlKV1MwQzlRQ2FzZmNvdkhyaXU1M2YvSGhSUG15bEsrZU1FREg0d0RKdURvakoveHpoUk00bXNBeHpxYjNLVjRlZEpGSnZqcU4zMGVWdGIrQmY5ODRaeXFrV3oyZERUMjdHL3o3Tk5Tc1ZKQVV1aUprWVF6VWFCck1HL0FoTDcyNnFZbUlJLzJlQWVwbTNZdTFQV3pDMVBoZWFjVkVXc3p0VFlMd1hlbkNPRXdCMDhTTGlRSnUxdnY4MkJNTUFFcVpyajBSVExpZ203OVpDZXJWWFhWbHFyMGNRdWJJTm9HY0lySWIwUncrY1kyRTE4TmNPd1pwNWRndTJ4VndiaE5sY3YxaU95TTJmWlFVVEVWQzBmampFNlZDZHlyeTRLVTV0eXVkNnF0cXp6bXViNHNXZUFKMGxoZkd2dUFvMW9yL3NuTjJRbmtveE4zTC9PYlpRU2s5cGhEWVAybFU2KzE1UUQrVkZSekpsbE00N1FHNVRTRGVmYVV1VnBsb2RrQ3hEa0toRy9HSWlCSmYxMUlZL1d5YkloMEptT2ZyVjBaZ3R6ZE92cHowNFBaYUk5Y1JJeEVWNlY4OGUveEhKbzlDdnNjd29aa3VmRHNSOWd3SHdhajg1MGE5SExxMmZvOWRxeHoyZmFtTjRkUVNqMXZuOGdzQWpjdFB2bzVjaE1CQUgzQmE4ejdlMFd3R2xkWmhOcEdlN0ZkVnJDWmtlUzNYMEJoUkNKYlJZaTF5UExEZnB1aWQ1dW5vUWE5blg4Z3R1VXRaVlcxS2NpWmd4Rkw4VWptKzFheHRhdHJaU2R3U01rWFN5ZDhSdjBZaGhxWjQ3US80V1JORVBZbUREV0FCT3JZRVc0SDJzQWR0VXlCdEVxcUdvVFgwODhOQVVlcC9BTUJGUVVpQ2oxV2tLVzluYmtCbURvUHhSQ00zN0lmNUY2djdwc0hBK0l6WVF0Ymp2c3U5NENYaU9XNVZiYmpoT0xDOVgrdWVET1Z3QUlkUlNXK0NTQmJPTjBSK0MvRENhZlIyS3I0QnlrK0VZQXRRZ3p5bW5Sd01sVnpOTGMzYytRUnd6eHlpT0JwZmZlT0tJNlBGNUp5Yi9NaGhXN1h0UGkvODhYMVZCdlFlaWc5ODdOdlRtR3BtRVJmTm5sbTJLUDdVdlUvczZKeTFET1hVZWNyT3d4WkNoTzlCcFBLZXVrbVVHV3BOSnQ1akZNcFprYlVqQU9FU3VxUG00c0F6SklYSmdrNmlLWTN4S1lmWlhkMjRSdjR2Z0lLMWZyaGl6NVl6eVc1bXdOMjlGMlR1a2psbFljZE1ka3BQM0lSbXlqTG9qbGtxMDJwK242TStCMzZvSStOa1JkTUZHZXBZUTVHYmQwWjFjUGc1c0E1Qzh4cjFmOEhkenJRZnhrWHNQZmlJVjVuL3Vmemx3WW9ENTVCSkhSTUYxUS9BcWxDWm4rZWlTRDdpTTMyanp0ZVVSQktRK3pFWnRseHhqbkJ6ajBydVRxVHZXUDJBaTN4TlpqU3ZUMkZzenhEa0Q2Uy9ETXUzSHE3WUF0R3FFS2ZUakR2T1E3VE0xL0xBY1lqYW5qNlMxRHoxQnF6dFlKRkM5SUt3eXJrTUo0VmZUK2o2aWk0WTdDZGY2b3diN25KTVd1TEdsS2U0MCtjbWs1bG1oSjJ3T1JtaDNqQjV1S3krSVhlUXpTUlVrMGZLakNjWGNCMUl5MFVhS3lPK29jU2ZlcytBTFRaNTdKY1NzVDB1bU1RVy9VVUZ2UDBvODFwYzFQTnN4YXVHWFBzN3Y2bHpSRVRNS3Q3WTVmZ1Ryb0NacUc4NFZjUHMwbzgyNDdQVisxOWlTU0FqaEIyWm56aWZOS0hyY0UxQ29VM092UzBJalJtM3lLcFZ3RnRPWVY2V0swMEo0cDMzT0JISmN4V3JiK3o4OGFMRWlVS252b3ZHQ3BXdFNGYzAzUkdZRE15bFlmUXpsK25QMk5pbDMxdHRvekFBOE5YOVBVdEN1ekdDMlhtYmNXam9pMjRDb2liMVJkMG1maFROWm9rWFlKajlnclJRV3lqRXhiejl1eG1nekc0RER3OXNZcVI0MjBaVGR1Y3Y3VGUrcnBEUU1HMFoxODRsTWg5Rjc5RkpKZy9DcTdscVJ4aXp3SXg3b2FEK0dpV3Uyai9aTGU5c3NaWW44eDJMT29MY2pOOGxNWUE5b0lCOVBKOTJ0OFFiZVA4ZWtJRzRvZWgxZXU2SDRBZmRXc0RQUmM2dnhqcEwwUTJIRDFVN1VZTGl6QTNTQmVJOGRMTU1BWXhwRDZQb1k3akFWU1hWdmFOYjRMRkN6eXhUNUczZFkzWjR6QkZpK0NYTm1hZ1BtM2g3d2pRRDZhMVpYSVM4WnpBM0ppU2pzcjdnYkxXd0dlRkNmenh3WGE1OFpXVDM1bmE0S29ldk5kLzZCem5uZzIreGxOc1FOVUJWc3hwdDRkVlJNcFAyaUYxSkM5QjhtMzBHbkZBN3RnbE5BZExUcEt3SjUzemt0N2hJNUxabTRKd0hiL2Z3QlZRZzJ4SXNDclJydW1QZE1mVVpPdkFZYWxIbDVUeW1vUHI0Q3lRTEYzRS8zcEhyOEdSbnNmY21Md3diVDZwTDJoVWlwVHBZZ05RcVhtVkZXV0NyclpjNFJpOHRkeGtnQVBOeVI2c25SRDcvL2VMMlRHNU8zUUoxK09RSzJaVGxrS0xUR05UWDR3b0EzaXpJQnhNcjNVYXNVVkxyZ1AxQVh0Ylc4NzdJZDhrb1pTYnB5UFgzbXJWQkU1YmZ2b29WUW1KVWZLSWdKUHpwVWM1VDFDbk0zelhLajV0UWNLMDF1bmNTK2xTRDB0S2hBYWRwQWlSV2xEMkdGUEhBVElwM1lHdHVybjk0cDNCNlV6VW5mZEVMMEprWFZTVG1vNGNuYTdMTFF3NFY0NFJCbWFlbkRaZ09GYTlGUkNhdktJRFg4U2tuS3hzSkNKMGd0OEFYQ29hK0RYRTVrZmltTkJLRlh0ZSthSHoxM1RBUEV2RzY1N1ZRU3hNUXhKSlhBOWN0enBIemZjWXBQdmRhZWozMUFOTGdZdmsyQVRRWnRLZTBWYjg2UWoxQUduRzViZDZMdFVFZzVOMTFZeVRLZTlDaGwrTmI5WU8zcFdiU2RsRXJLMG9HTUdtTkNQZFg5RXRpcmU2dmNVTEs3VFlnK1NIcHpNcFlaUUdzWUdmVzE4eUQyNDBBa3FLbWYvUGJVVzJxejJJbWN4b0UvNjFuTWVuQ3l5SmZmMGlxdDN3L3NjQ1lUWjM1RTE3TU1xOW42Y2dic0d2VFQ0S3cyNXFqMEwwUE5jd1hQcUQzZ2QvTThNNGpBY1RhUEgwWGpsK1JFQVZxcDdMd0M4ZzVrYTFnWHovQ29KeExveGpQd3ZVR1p6aTl2bmF2MFl0RUpxSjdHMktLanpyTkpDM25vNnJNRVpBT3hjcXJkRVpxSEJNZFNZSGJPM2s4U2h4NlFFRklVWks5ZGM3MllrQ3ZDdEV2TWlhMXlKY3NMMkVacTE2Q2ZvRnREcDBxbXVrZE9uOVI3OGN4R3k3SXhIb25CT1E0T0tuYXV2YXJmeGVpUHpXcm92M2VHRlFmenVTQkUyU3pQbFVlQTJ4dVpxelJ2VS9uNVZ5QUdweE9WcUtIQ2JNS3I0RXM3ZlI3OUhoeFVlYkxUVE1pa3FyL3FHVXZmZ3BjLzluMHpyTTI3bkpvcFhRS2xDa0hpZGY0QnZLaUdsaGVqTDc1SHJLZHhkOXRMU1VzdmczWHk4QlR1bEFkQnU1K0ZxRmlZR1o2UjQ2R3R6ekl4djRES0x2M242MFYyQVN1L3gvaE9tU29IeHFQTC9NOEg3Q1VUYk9jMjdsd1JjSng3eGsrNFFyQURtM0cxUCtjVThmOElOL1dhc05tNXlDNVVUQjBKSE1uMWovK0hkMldBRU9HT1lUL2RWY0tJVmJpdlRMZXFYak5sQjFpSnJheUNvWDZ0TU1oOWRzUWNRQVpieXdWWjArQ3lQalU3NVBFSXAvTnN0NUNyZWhKMTV6U0dwanZqczBvbGxNNytIcUIzTjIzYVJORWtIZXRsdFlkbmhibGNFY2FZUjY1cFd0bTM1b2U3dk1Qd0s4VWZDWk1FRmE4c1hjbUZ1MDU2d0x6eXE0WnhWVGRrSGc0Z3FBS0N3U1pERDZzSEhlcEc5SHAzeTV6aEl5UWxpZkJ0dEpOQnlzL2tmNzltdTRsb01pdzhpUVFCY1hxUDlQbXZTbTVRTDJ0UzMwK2pYNzhPc3Q0RW5XaEN3MWxZTXdBY0VhQW5wM1lMY3lJL09nejVWSDdwd1hFOTRDQlNNaElXYzY0a05GUHZXL2o3WktCUklBTlB2WERaQ2Fpd09hNStsUmprclZNd1ExbGJjYmZWQlFwbE9EQjMrSDB6SkZuVi8yZkJreEFNNWprYm1UV0pkY0JPYTFoanVrQUxzdVlmNDB0NzlheGlUN2hDUm5kaExzUHUrN0VPemt4MlU2WG4zWWFxUE8vclVkdFZMSld5STZOVmVsMU9XNWZVWVRXdTNBa3pVVkZTQ1RoV3N3NGwzaFpUalkyakdVamEreFRuQlNNYXVpWVJvZTJ5YU1LRTNmSTBNTUM4Q015NnFVNHBTUHloaTlhNnl1Z2MvTmdHV0FST0VnSWRJak9MRmhBVEU5aEJPTkVJTDRNVHNEczBsdHN1dVJ0cENzVGRHTVVRbkUyQzhpNWFrNWt4cERKK2llSEVVVGp2Z3RnaXJjMUMxY0x5VVNNMnlTaFYwQThIa2djZVFyUXQ2ZHNNSWs4eWJCRVhsL2hCYjZuZDY4N2dhWXVRNWtlTkpmS0ZkbjdXTUIwQy9aYUl3TkVVRi9IVlBoSTh6bWIybCtPQVJkM09oUWY2Uk5DdWJwY0ZZaWY4MzVpSnA3RUxhTE45ZktHTHdzTk9jWGFWaVQ4Q0V3NUlxbitnK1orc3E2b3BtK3RzNU1jcDE1Z1ZqaHRmTThVS1hLVEt6djQzTUN3clB6djBGWmNzYWdST2dNdlI2YzJqRTlyL2U3anYwVFkydnlTSWZvbUlzVG9wd1NoSTAvTE9jQUs5dk1ReUl2bkNEcGFIblQ2czFOaXcxd2QxM2FJdmszcEpncmpPUjNNSFBpcmJVSjM3akkwMGRhOWkzOERPWVV3S2VXUXZQT2hucHpwL1JUT2RSY1Qrbi84QkxRVU9FNUNKeDNSOVdWVTNpbkxkWCt3U0ozbEczTE5wanNkY0pvSzU3YWpIZE9DYTNnMGNTZGF3V3AwSXlzRHZoVWsrVlZnMW5pRVpqVUZyZjNtWnNtVTJvMmdsMFZORDVHKzNNR1QvV0NZYWZtdW5abldwTEMrcEtxUjRneWpQTTYrNm5XOVNkZ1JvODFEL2JjS0JRUVVGSnZZd1hWb1g4VUttNzRWMTdaNmlEc0M1dVRzZGIwQ1dlUHNkbXAvNEptSWVROHRvSjFrRE5rZEQ0QVNucUVrM2twaG5OZEhaWkJLOGo0WjU4RnRqem1UclZmZ1hxUjlUNnNHSWI3V3BTdkdYK0FJMmJPVzQxMGZRVWNjUnRUcFFOVzl2VU1WblhISXFZT2EwWnBvUlN6T25UM0VlRnZtaWxOanhjb1kva0FMT0F4aEk1QmV0NVRncXkyTHRCUGlVYnQwNHhweXU2MjZ6Q3VhbWlQQngzREljMjlocVZITFVYZHZ1U3hLeERNWjRyd3hIWEkrTlc5TlJabUNvelozenFUK2VBYXRvRGM0ak5WTzZWdmdSYzcwdi9xUVBpU20rZE1kY3VzNzVrSzBKOUt1V2d6aTBtODZycVZHekYvcXpXTU1iVDB3TGVqa1U2U2ZoZ3p3ZTB2d3JaMmNyTXMvRlR5NVFjNFlDbysvdTZmdVVpbWZmQ2d6NlRmNExrYTFJdGhkeDJ2REpxeGJja2dWQnhydnRvM0c3dWsvdVh2ZVVKM2V1OWZGa3ZMQ2xNUkJ5ZEU2Y2NhaVVPc01DaE9EUlFhQnAvMHVDVG80TXZwMFY2YnN2a0hKNGZhS1RUKzhXbXpOL29mMGk0RGlVUi9uSENPODdMR0Q2VmpmdmtIcUx2LzdiV2ZYZHo5OUY4djIrQXFiQkhPNnhwNWhwYXRkZFZVek1DTlRBMHl1VmZQcFNwL0E1S0FlRGh4N3NxdTBQNFVnVVF4bmxGQmlxZWZkS0drNkdza0RsMXk5STc0cUdKYmdMS3VWVGI5L2NyTlVqMDZCMWgzcTlqaDhyU21xcU02a3dTVW00RkEySHAzdldNbzg1RE5TS1NUbDcwY2wreUpsM2NVZS83bDh4Z1lLWmN1eG5paTRDUGc1Y3B3NTdKVFAvRXRCSW9mbG5QVGc5V3ZBdnQ1c2VzSkhYeFlxM0gyQ1owUWw0eFh3WEM1RDJVaXcrR3YyTGtveERCTzVrNlNTNHAvdTFtNWhFZzJpUEo4TFRxb21pVDlUYlpINTJ4eVhFdGpBRVVab3dlQ0VuMTBXZ094Z05nUDAvdUpaM3BWWUxOdWFkMU9jQW12NUtKQTQ0ajFIWDFHQkd0dEYzN1BTRnFPYzc4ejkvYVI1bFJrNUhTdSsvbTVUY3V1VXo2NXRFbkFaeTA0TW5DTjAwd3d3eVFoY2gxcURzYjdJYXpUa01xWDdNa0lPN3gzTGJiQldrOVQzS0JId05xR2pKSTJkU1kxNFhBcFhXMDlTc00zTmhSV3RybWVRR1dOMHJGL0RmWEdVQnpPM1ZQcmlLVEVlb3FUVU15U1doQUhPaEF0SkVWZ1dVR2NpckpPMnl4dkU4UXliMEx3a0ZhMEJlaFp1RHdlMTBUTVlPRHZuckdMcC9uUFhpZ3FzUmQ1QWNlUWVieXF3MXFkQ0ZlcFdSWDhkZDl2dXBueUs5dFo4UDRmQmlldjdyZXFHTG9MZFRwekk1YXJwb1ArREFWalZSWGhiN3NrbENjUStaZUdsQXlBWnFQMEU0bUNkc2NxYitUa1RZVm8wVWZscG9UbmZNNXhHNjgxWXVqMTdlNnBHUU1CTHN6SC9Ub1RLVlAyWEZqOUFvcy83aDZSeUpjcUFjd3FsYWFxSGwyc0VTc1JSQkcrOUhUUVRkRGEyR1lFWkVQSmwrY2NGaUxnQ25aclNMQ095WVBDaTAvRWovVWR0cVVVczZUcFhPYW1nbjBoWjB5SkQ4NHh3RzMrZFJkaEV5NmVuNTlvU0c0SGlKczV6UUd2ZTNRNVNsbEdlNU8zdUFZcmlxdExoV21VZFM5dkEzNU0wNlpTcG5WTGVMeG54aTVpMzY0ay95eTVGc2hLbkxhVGM2TEYwWXowL0xib2NDZWhWSkxOYndiSk1jVEtSOWxlVzF3SHVhdWFkMUp2NHUwOGlUKzFDckY1MGRQNjVVVEVuTWxzYmdvYnpobWEyVFRWazM5SStreWpTWWtzZ1JPM0JCUDdDY3JKTGhmYjEydDE4ZmdRYkY3cVFIYmZSMzZhVHBVQ2NQSkh5OTZ0S1lwM1J3YUhCNk5ma0pseG1tNUk5dEoxb2ZTZU9sK1VLMm9HYnFuODMzR1R6L1FPNVQyRjBmd0JjSjdvWWhoc0VwNHp2OHMzU1BacSsxZFo3OFc4RzRiL0JnRkdMSUVQZWo1UVNDOHBQdEQ2NnR1ZDZxRzVERVhYbmlaY25KRVlWR3B5elVQMDFUdFN4SzVNKzdmaFYzQUtrdmg1Lys0SEtVMXNkQlVsZzAyTVNTdDUvNU1HQ2lucElZMERXendpYVdYOU1wTUQyT3VTdXk3clZYZUh6ZWVmRzNsdWl3Y2ErcTJyM0xFTE43USt6NkVOcTZLMDg3K0hzZm10WEJUcVIyNFBwbEVGTmFPMVh3VW42c2Z3aDU4L2RKbCtnbmkwaVBRS1JwazU3dW8vR2tRUGhLb0hEU09wMm1KUjZOT0Jzc0tIcmxHT05aQVV1cTZzb0p4TjFhSlRsYk5uZkN4SGhlRGI0S29jL1ZXTGhocEJLY1gxMmpTaHlZU1VMMzRSTTVxa1pGWWpBdUViUmluc20rR1VoOFhHM0NRTks1OVVNTEJiNEVhY1Y4bXJSaG1Hb1RFTzV1RWxLVzFMd2tJQUczZ0VPSFdGdXgxTm1YenRxelhuYTZ6K3FtdlhqeWk3N21wL1c5YzQ4ZDYwRlR4UjFKTlRQNjNaSTNDV21zWGZVUTlJdlF3VE1jWkEzbG8rQkJTQkFVeUthYmdxc1Z6amNOd2MyZnNXa1ZlVHFNTVRrTUdDcUF5L1c5bmlkOCt3eTFBd0QxS0Z5UXFuSkJQUWd3OWMzRmZRUkR5d0ZLTjl6bDdaeFhSaDlxVmVuSTNwUkpoSWI0Nm8vVDRubkwxcnE3d2F5U3RDYm9tem8xa0krdFJ3dWZBUTQvdDFJamlidEhaeFlBWWYzcXMxVURBNXR6U3VxRUFWUGx3QlRGckE3WGFyNWhIT3N5dlRXVU0yczI2a2xZeUpEaFZZdTR5Qk15Tkk1ZXZpUVk1VC9EZkpWRkFwMUZHc3l3anhIN2x2VHd6T1o3R0hUbnRyajJXTlNjRnJIV0RFM2M5K3o3WXNTbWwxcEtMS1pBVitQL2ZxdnNGT2IrUEpGVU90S2VVcktUUEFqczdKakVmWlIvK3pxNDNoSi9WdDN4SlBMbHduZXMxUm1MdXpQdXJZSHE4dmlaMzVPbDNEZnIwd0xENTA1RWdZV0hPM3gxenlJcjJmaXU2REVHR3RXTHZoK01jMFhxbTNOQVo1QmczamdlSHNKSTUxV0pzZEhPRUhNc2piYzZneEZXVWdFZGthVzZjMy9Ldk1OdWlPOU4yV3FVYzE2aDRvQVMzRy9YRlJEVC9lY1NFUHplOEVMSkVsQVFvVWMzemtlMFZaMGVyZFExY1NpZFFUUnl5aUdBM1JoTkRyaVVkZXdRU3BiUGIvc2VYUHBnL0E3SGNxTnBSdkxOZ3Q1RnZBVzR5R0pHTzNjZHQxVEtUNXBOQ2VGUno5aWJPQm5yaHFCREpNOXVLTVpGL3hTNEljbUZnR2JTcE51NjhFYnRFeTFqRmJVWCtjS1hxdEcyZ0hkUjkzaEpOcDRXWC9OR0diWWJrM3lXYTFRNURsbC9DUnl5anUyLzJXdEJjTm5yaXQ0K3AwOGlQcFQyckRaSllJT056Q2Zva0dTOUp4bHpic1d3VFJlQVBvaDhjWGV5VGRyRmhNK3Mvb3c4RHJib0lzVjRyektvSW04SXFqbm1pMlcwT2tyaVIwVEhwRDZoZXlMcG9rMzB2ajJRNmdETHA3UVArVDlTM3FUbXVaUWxmRFlaWTU4VUdOaDBGZjVtdk9FbXFta2hpNThMdE1rOEFCWjhDdWsrMVdYNkhOWmJvU0FSellkUktWRWxOT2RIVk1OMm5vS0dTREp2cHJkTEtSMGp4aVBHb2tXV2V1SUtmNko1VXFTWTlVSXNzU0swUFJ0eXBTRjVYeXlsWVQzWGQxQ1FQbUFOOHRoaGNtODUxeFRLbnRVbUx0NXd2WGE5VzlEdzUxVHM0L0tKVSthM3RoUFBrTnkwTjcvUFJDYTcvM1kxWmZyMktBalRXR1pxVXdsQjcxRlZBajdURFlXMjIyL1pKTytKcGVYdWs3TmpKSDJXOUZLWnhrTHhoL3NES2Z0WFRuK2Q3a0tIeDlyMUtoOFk3UUwyMDB1MklKTmJxcnpycE5xS3BCR1NXcW1SZDUzcjlMYlo2ekU4N05oMGlsd2NQaUovbGprdzk2VzdybkNNWTNnWEJveWZJeEYyMzFpRGJweEp2VW13RjhMalR1WFlyVVQ0WjhzTzljaUQ5aXMxVzlaNTRBYkczd1BtWVZ4RkEzcWE3a0ZNQS9TVlB0dDFUMWc2d3BTRmQyRndxc3BoYWxWdlpteFJwVjJsZEpwdTdCTXR3TTMwUGoveU94Mkh3SUg3YVBLUW1jMEZNTWMzYkVxVW1DWWp4d0EzT2MwY0NaZTRlSmE2VDlaaTdtbmhRWUU2QlV5YnYvZnRoZW1makhjcUJUTzlrQUthVlVabjBINnFQNHRZQWhRQVhJRUVMaGwxUlF1ekFaMFVSY3FUMUgzYXl1d05TQkN5clBYWnBneU5EdW9RbVJ6MC9DV1ZTSkxaWnVnOTVZNGRzRC9ucHZuY1B0V05GaWxEZnhXQnJXSHFVbUlCcS9RUTFmUE1qRWpsSDV0UjJORUpmMXdnbXpBZ042Smp3eU5aelJuT0p2aU0reHUyL3p3YVpIdThUazRCaXJmOU9WclRCanVyU1d5WlVJY1J1TTlEM0FuTGdBaFArMXhVRjJMSWhmazZGUkZzd0xOQk5Mb05VQ3ZNbUgrWkF0cVF4Y3VoOWZQQ2pDMXAwdW9HaUdrT0N6d2Z2SE5OaHRsSkh6VGMxZ2hhZkpIVklBMlo3U1YrQVhrUWtEbkpBajBXbXdmRzVINDFNTS9WN2RqTUEydWl6TXlYaUJ4cFFBazhVTFMrbm9CQWdxVkIwVmNRQ3pDWG1FRk1kYWpST0tiOFNHV0p5QnErdWc3RGJKekpZUXRwc1E3Ujd3aEtxaVdBM09YTDJXYTBGWFBHV2Fxa1VTbGRHTlJsMmZiTGdFVlU0V2xRaHRxcG4wVzZ2RDgrdVVkdEpHMCt6cVpYWFpDRnZpcHE3SGlpRHNNYVJzVE1XTTZNc0ZMUnpFSjFqbjZKTzhWWjhYQzJFcFpOSDRDVjYwclRLZlRMOTNuQzYxNFRKZUVBNnNjSkw1TzBZODBweVVHeitWYm50N1VnTVV1WnZJcDRWWnp0RWFIZ3RBYUNyQ0JWalFJY2F5ZzlaZkd4SmpaWUtYekJQTkczVmlWZDlEcjRRZ1NwTnVQOEkzc3J1YWdKT2hkS3RxcXhtSEpiZEZYRCtlUmNwanZCdlZ0UHB2ZEVjOXV3Q0E5V2FWRSt6bHNzR1RiYkYwK2FSZnY5WlA3WW14RGQ1SGZyVHlnbVg3M1FUTnpNeDBIWE1XVGtyZHQ1RDhlUjBhUytMUkdMMEtvQ1FFcit3QlNTUlNYczB1cytYYWtCK0pydkhmVmVORWpxaEw4U2FKMVZXYTM0MWQrUmtYc2FNVE82ZXd3QjVYNVdGR2lRTWlSZjBkVHd1eWpYclhCZ2xKL1FxczBiUjhWMzA0MWN0YWtaeGMyOXNrd2ZUaGhqem1QbjRDaEgyNHRqVjZBbEkyaGcxVm1WMitSUFg4cGVXZkRaNCtRYUlIc1ppT2hKZnNNbHp6QkMwY3lmRXBFa0N3U2xHQVFXUXQrSldLYXJKVmhtcHZnS1Btd0ZTK0hpNzBtRmQ5eFVXSUtrZFoyM1VCWkJIZTVsd1N1Q0NodFI4aVgyV2FHTUFWYitKMERmcUQwZC8zdjROSXg0THQ5N3NvTGZNbkpLTDlqbExCRzlWczBGTEJvREpSU0tWN3hDK1NSOWVvQ29HK0libmVuQ2ZaUllrdlI4bmZTMW5aQmI2VnBUelZVb2pQcmljZUpiUHQ0NHB1RXdTdUsyL3J0MTV0MGZZdG9zVFIvZU5LNTI2RFNKVjFyaFRHR3ZuWDFqTUM5WVNHNi9DblI2elRRK3lyd25sTTBjeE9RRnRUR3VraFRDR2R6MGJTclNCNXFJR2V4Y3hRRGhrMytRcytLQWN5THBIWEMwSGlBSnZSZGlTSjJMd2I3dDdlMDhzREdyQ2I1MFN2UVNQNTBtK3VFeEJVNjF4L3A0bVFFc2JHK0ZDZEt5REtrOU8vYWRLMnZIVXI5WWdxajRuMHh5b1RzNHBJdUtVOHhMYm1uUjQ0M2Vwa212a1ZwaWV2SGdDaWtHSUVHZHU4WGd6NXBmN1F3UzZIeENzRFlwM2xPeGsxYUZUa3J0RzJkUmI2dHhHUVpqUlljT2YrYlQ5VG5ET1drcldhVmM3UnJLMDNHaW5UQlJENGN6ZjRuQkFjbHRNa0JHV2NzanZPa3I3SEZ5VHI1QVhhbVpJMTRtVG5naVhJakdHbTN5T3oyZHZ3aTRrVHg0a2E3Rmw4VVV2SThrU1RNNUJEeDJIMHBrM05BdEMvZk9mdTVia1M1Mkh3ZGlBR0VKM1ErOTV6Q1VLNDJGeTUreXloRDUrek4ySDQ3UDhkdnloU2VHREx5cTI4QWxPbHI2b3lrQmZwTWZVejg3L3JlcGtaV0hWY0xoaTNYQmRSOXJmUlA3WWVRVlBtU2FiMUFyWHhoL2VTbVR5YVZEZkQ1U01VdGlPeVpVTDRCVCtEbmorT2pNL3oxTmFUUjM0eXBNZWo1VUMwaEZ3L2xlTEZFK3pBdVBocGRNQkhSQzFOa1M4V21rbnBYSmptUkV1Q0JtNlppWDdqOVhwSURlZUk0OCtRNHhuZmRqalQ2K2k5Sm1IVUtwOHgxN1JMS0Q4dDAwcHl3d1BRZUplbXYzZk5PZ2Q4K3NxNVVsdFJvMHJxYzliVlVKeUNyUUNOSnJUUXQ0RG9RVXEzbnQ4WXhkaGZyK3VXcDJRbkUxM1lFdnUxa2FVREcwN096WERjVzBkcno2OEt6dVNTeU1sN0ZKWUpCSXY5eW1XS2lpWFNsZFNSazgvZUczaGoyVEVSUkRnSS9aMUxLc0RxSS8yYVR6Sk9HWUFTamxqZUpENXdDeFB4N2IrVmx5dUp0cFN3c2l6eTROZlp5bFZIRkk3R3oyUVZFUC9YVE9TNGx0S1RFZzZuMVMwZUJZY3NWSmVUUEk5WEpMcEZSeFhKNmhhNGNWa1hLOG5taW9WM054V2FJc0wySVJsVTdTRGE5MFhwOEhnam1FZmZHOFo4RFEveW8wbm1JT25kcXRCMk5ZVjBTTXZPSWRyZHdWWjBxS2QyaEZqNHhVWGpYTUduN2RpYVhHVlJ3VUVtRU96dXN4eHZISUtBZzFWRFliRGV5dStlbnBRdGgrU0ZmRXFPVDlnM0Y2Z0NUUHVTUlF3bi9lYmlYc09sK2V4aDF6VllvYlVrMGxBWGxUZDJOK0RTSFdzemxuakNlRE5IV3hqNXY4c250WE1SY3Y1SmxpbHBuUU1ib3hyUnRnWFhlc2tTSTlrN3pvTW9VU0R6TnFrTmMzTUlHU0k2WXRuV0RFby9LeFZlSjJrN05lTmh3K203eGkwTlJxbDdVWWo1TUg3RFgwbkRuTzVtSzlwNGlFRERoamNhRzNqWmxEOWR5VkhTRXA3SnpUNWorV0hONVZwSGovRzBEa0RLUlF0Nm92YVlXTGtxVzhIVzM1T0QwSm5PaUR5Vm9lbWZZcGtBVEdDTEZPWnRKWXhJUWJ5Nnk3OEZ1aFhGQ21nY1BaczZCdUZOOEUrVXVLUnhqK0c0bGlINkhodkhtREEvWXNOeEZsdktvUDhqazdvdFpUbStjckoxK2VsdVpsU3RuQW8vTUN0dE5HMkNZVkZjMHdEQW1MMVVvcjNiQ3dhS2VLbDVFU2R2V1NYTlJUKy9VOUFUeGdEWlBxMjJPQ1Q2emtDYXpyeVAyZnBLcmlaWDMvZHJiNFY3THlQYzRWODVVeFZ4MHhlMTRURDRlMkZkS1h6TW9PeGZwK3FGcituanZqWnVvQ2d6K3BoSXByYlovWXlsNHg5WkwzR0JkMFZmYThhUzg5NU04Z2NOU2hKNTN1N3RMdGRqejBGNGFFUjRFTnBKd1plSEtGYktnZThUSmgzTit2RmE3eWdaaTVCbll6MnIrV0IyUmV6SmUvTzcyRi95TWJmL3RuenN0ZExGNHdtOWFxcm5iNGZkZU1vNUhEVDNtZEhmVnUzK3h5aTZtUmIwUHVYUzUyQU1hSndSZTM5RFNZK3JTYklvcmQ1Nzcrdk5xMEE5VHZJUVMxME1VbjF3ZHl3bVU1QVZpZmIwR0pHdC9ZaUNPZEN4QjBZSE8zUzlHMnkvU2kxcjVha2JmdjRWbjl0b1FvcFh6Z213ZWZMeFE1QXFVazZpRFNtckhsMWN0MWFMQVRPdXIwVXcwQ2pxL1ppRDlhdHVXNFd6Qk9DWGpONHp4eS8zSFNsMzZaTmpla202QzFXWGVtNHlWenI3M3QwM3NIakpTRW9xMG1sUU5VcWRiZ1VXTWtUb1FwVG5HSzh0MFdEK0NCSGc5UmFDc25UcGxsdC9wWHRlMDZYQ3h6M0VZa3UyWlcwUlRpa0t4U1RWLzI4eFY3S1VRYkhEVnR5WWllT0wvcktLTUNkYkRxTStSUHo5V29palEzMUI2aE1vTlJ3bG8reFBudnpRWGdLUmc5bUQ0R2tpamc2RVRIT2Y0c1hDVGk2ZFhsb0phTXJIaW5ld0d4VXM4eEJaT1lMRCtETXBCNXB4MXpyV1huQ3VTS2lPNHhzdS9YSkx3SWtoUEhYcFUraDYwdjFWUnFNZFdtcFNGcEVtb2xWd0xaRHlhV1RUVFVwd0ZBS0Y0WGd6bHpiM3RmOVl3RGRhSjFTZzk0VEZkcVRKem5nT2VjY1JadFlyUkpxai9Yc3ZMN3J6Q0c5aG5nVmJWK2o0MHEvdWZVRVZ6VGtGVjduT1RLWmU0elh5QVE0bFprS0dmTDNTeTR3QTNNTGt2L0xqVkRXWmE5NkxRSmRhZ1FVNFQ0NGtqMnEzaGdsa0RubDBKejRjR3dNejlkQ1hPRzk1cVRNM1VjZDl6ZnVUS094M3VDMlJZYldDcTdQcjMzZ1ltQVNDSW0yelhJQ09UQ1o3Zk1PTGU4Q293aGRIMWRIYnNIMGpveCtJZXpxTnQ4YWUrdGVkdFBqdDR3bWhUSHl0TE12NXc3bW4reWNacmVFS3dGRExyZS9JMWZ4R2UrUm4wbUNiMnFsVnBaaWpyS0dncmswaEd3RzRGOGRvWmFjbWZMSUdlYXlnQnhtQzJpMmlHRDYvNDE0STF0cjB2Nmc4ZWlCa3U2VDhWUHBkTWhEbkhmUWZYU0t3R2dieDlIOC95S3dWUGdpNDJkanpiRi9lUmcwR2NURTlJTWttQUR3OUJFWTN5RXc0cHVGMWJYRFhsVjRQVHpjdndadlBMSTRiRGUrR3B5WXQvcFZ6TDc4S1BxM2g0MVRRSS9kamxid1hEVzF5R0pNeWcxZ1RlMTgrd0Zxei8ydG0xWXY1Tk1TZ2pwTmR1UlozN1J2NFhvSDM5WnBHTk5ML1lTMmp1eE9vdCtDMDF3cTNxb04wWUdXb25CQ3dndmVDOHNjOVhqNkUycnB2WGxORVFoT3hKVU5HY1lTR2s0RnZSZW5wQmZ6UlRBcDZlTDExZHFDenprTFZoQkRxM1pjZXBubGZvMFRWbDJERXhOZFRMTDhrSm5NNHhtUldyQWlWekYyUnFnQmhhMCtwaVViUGhsd2c4VzcwaVhZd3BzbVFlRzEwNVhpam1EaDllVW44b3RzdmpJbDJNQVpUZ2x0bDlDbzRLVnIvM01CYXd4MzI4UU9peGwreE9EWEFiZG9NUVAvY0cxNzBGNWFINjRqZUpSVFQ3Sm9qaEhjV0IrTFRqQVN4aTB6S0pqR1hXNCsvZmVsaEIwZ2syQVVBQ3pjUlpXMVg4b2ZqRURTVEhtUWRWdEx3MDRZMFVSZDdCSUp1WU5ENERCRjAwZ3BWcWJ2cnFwSzNsM3MrWHVOTUNtV2RJMFVJN0RTb3VOT2l2TmF4Y3ppZWExM1RmRDMxZFN3VVpHQU9lZkdTbnFlTE1lSjRORmFkb2dtcDgvZXpBMVRLeHU1ZGF3OVUwd2pHb1o2RTJRdW5ybWsyQXJzNHc0QkExR0FnMUtlSi9qZUh1dWZ2ODdWMUpmQ2JkTzlVQ21MU0hlNjVQMmNuMDN6dE1ycVZ1MG5GbGxiWm50VjB0bXhyaDlQN1NYckRiN1YxYlYxdXR3Tm1rSEFKa2p5Y1lQc0I0K1FJNjB6dkZLMXFSNjZubXVZMHNpYWtXK040ZjRDY3dHNEVaYTZyaG9aS1VvQ29uTmJFWWQ3eEN4cTZ2WTVqNkcxZ2lyZ3J4Y1Zua0U2Z3NRQ2pTemczSG15UHNhUG1KalQ5bnl2dExvMExLcEJwSU5LNU1NbUhMclpwN1M3cDhjK3JiTi9jaEViNTJ4eUpjckI2bFp4Q1BvR0FhSjQxa0t2UVphZE1BZWNtbk9HeTJWNHBodys1NnA2WkdUMVp0NFk1bUF1NXNZUk4vcTZWZ2JqV0MzdUwrRE13ek84dXlTMkJUdVZTNFY1eG9Fb3NLNmVBV0xwcXRCU0Q5OGd5Q3ZjUVJnbU12ZG1vWG5LeXlNYmRESHJVdGFwVjV4M1R4K2t1K3A1bXhXT0dyTWExeG5KVzFhMzlMM0ZBQ0hZRzY3WUtiRkx1bW5GS1NjWEdDVzNYMmNRbVk2L3ZBTEd2YUdlcGR4TG5weDBwZmVVTG42R2NiMnJaMHpkUHdnY1dnb0JXNnNJUEFZSHluTmVPdmIxYUNzTVVLc3A3aVpha3lIQ2ZOenNKWkhHM3VFVmNYWWcvRGVWTUhWRnpxU05QZmx6UjRCU3NoeXdBaGhGaGtxajBhYjhuN1htc1Y0UThkWVBaa015UFZRNFlaQmNMekdBTmtXakFKQ1BmaWZnZHdGUEVvN0RGY3l1b29Fb3QvSmN0Qytla2VGbTVFOVRjZC9oNnY3d0JtMGRaemlkZ2V0MFZvNlZRaGxUSUN2NXJOR3RJcnE2bEd2b0drRlRTU0IrMVBOSlQ3WGFjRFVJM29qK2dOQW40TlRmc2h2VEdQVWpBenorMlpDeDJjSlIzeGxkNGk4eHU3eTlVK3pidkV1RmRVdlV3RHBtamRMWmNoLzdwMFg0amNzVzRpZVZTVU5DeHJscjliZmorNnpVUG1QQWZOYkJTdHRIQ3VGUVhTUTF3dHVoRFhZaEswdEcrbXpmSUlCZXZkcTFLaUlKdU5HdlVtVEJ0ODlXUzJ4TWE1akRodWZwc21RdlJ3dG1WQmNPTU5WRnlpVnJMQWhnRXRSLzJmb29kUGl4bVFzczJUaDlVdEZ3aWFQK3ZnRzBGSnlZY3FwMVplL2N0K1R1U2xDQVd5TFc2dHl3QjM0UEgvcExsbmZ0L3oxV2pxTHluUTdkb3V2TE1PZnlEYW1KQkh0SVpzNFBHU2ZtZURFbDVyR01laU54ZmFqL2IvdzEvQklma3JJajVoZFZFNFhGdG5pSjJPVlBWRjYyQzNLNFdWZUlueUt1blladjMveWtxWjh0V0RQM0svTmhOWnFRcUV2STduVHJVVTEvSmFBMWV4c2RLZDdtODFCY2pIeW8zU3F5T0NUVWZqNXBTQnhLV0h2OHR5aEJmeUpNV1Z3aXd4T0Fjeitmc3FqN1dpS2hnMjBXV05YWFFKSzlsTGtlN0tYcHE4RkNoaFc1SS9PaGVZeXphNFZrTEpTRjA1NmdjTlFCVlY2dmNaMUFNaDdtME5FOCtlNVBON3VDTXVreituTFdhcWgzbkc3U2x4Q0QvZFpmY0tZaGRMc3g4YXZCb1NPOUcyUEtKVVkzalBXVnp5Y0tEVWluRWpmMHNtcDRybmd1MUpkSDBPaGE4QVF1a2RvU0hjVFBiSm5tMFZJVkd3eEkvOE0wL0RmQnkvSXdvTUwxY01SSWlsUFBNR2lmQUNuQ3hTNTZQNHlYcWREYThZRmZMVVloM2cwemF3bXcyY1d4WjhlZmRkVE5FRXp2MGM4Vm9oNEo1RnJaT1Jkdml0NVZYZ0J6SzRJa1BpRlg2Vjl1bnBPMFB3aEFsL2JCbENkL01QN3hwRWVnODhzOC9NOW4zWmhYeFZxaUgvbGNEdEFaSnR1S0V2enlaMmhwVi9mT2dkN3cyRHJzSUFnVDJvcGR2ZDB1dVk3ekpLYkUyMTA0YWNrQ1RvL3dHbW1KWkdPOGR2R0prNWN1amplRW10aExxT1hwdWNhRE9mVXZBWEcwME95VVkrRnZWVnNVa0w4WTdvUmtHK2ticXFhOFRkQkZDa3BkSTl5WTN3WkkvQ3ludER1MmpYUU5sQTJDWmlnckFhMVpQWTFqZTlhYUtMZ2lMdGZjdXZrYTU5bVI2SHlMOGhOY1BhYlJhVENYR3BQZDhDL0NjYzlVRDJCWDhjMHFyRGRDZEQ4N1JCWFRrRmplejRRM25BYVBUQjZXRkF2dDNIc20vRjBJU2krV0pZQU5pSXFvbEd4OW1qRjlKQWpxVm9rMGh5WVUvcGZPblkxU1FMdy9WUGlWS2w3cWlTUk9LWXZESEllbDdvMndRczlqTys2N2cyc2FyYkxUUDlUa2NzRUFsSGxYNU13TGZES2MyY1huZjVjY0c3TTZ6SWJHZk1uTWxPWjJ4Uk5uYy91WnpXYlFHb1B4KzdwQ0oySG5oV09mYTVKaDhvMG9HTFdyM3lXK2tFTnVEM1NiTDhla0hnM3lWY0wveFQ3K3RLcmh6NHk1VnJTQzdOdWNVL3lWeUk3VzhHQTBUdEYxYi9WUnNtYjc2Q1dlTFBNYi9WQi9kYTFsaVJTOThnbFlIdFdwZ1B0QldsdWZNTzhjd2d4ZW1YaThWZFZzeHJTNnM1VUU4T293SVpnSUNwYW9HT01KamttVllrMEFsMFRSd2RrVmxsc2JkVnFkR1RQd2xOUXNZczdSaHhQOHVOdHlzZUQwTE1pUU9xU01IZUhnN2g0VlphaWpGalJXQUJNTVZPYldGNTRGa1JWMlBrUzczNUhXTlJaZmZEclNXNEVzWmpMN3FBVHhFanpTOG5XR1YzUGhJYjdxYkpHT3I1WE56d1Z3QU5uK3Fhc1krdHloNWh5WUpBZ1VQeFA1ajc3c2lXeUFRRzNSd3NuN0Zvd0FpUHR5VVBkWENUUVR6WHIydHU2REtnYkJvWURzNXlObXFrMW1qbnY5ZFFXOTVnNmp0ZHg0QmZjTEx0YTFsTDlJOVAxa1pTNXJvbTgvbExTSFBxTVp2aWJCRi9SWWsxa3dFYlE1WkZBcUxFN0lwVmx2TDVYR3FkL216ZnFOc01DMlZqWmh6cjIwYWNIZ1hYd2ZJN3ZYa1B4YzJvbjhSTXRmSkVCenN0WVNpclFxOVlrK253T0VjK0JPTFJVOTJlYzJCdDNyZUxzNUNlenJiOXFpbHdjRk5YOE1CRit0d1V4b2hVQkxrY3VIWnlLWnFqNkJMeVJzeXBBVXBTQ1VYRXAvRVE2WlVJdDNBOXRld00xbTc1K0NmSUZ6WVI5VDZDMnc3a3BzcVg2ZWJuNThtS2UvVDF4SCtQcE5ERklnRXZzS05UcDJLL21BZFMxTmk0OExYWXd5cC9yREZhMUFtYTBrOTFIRkk4Q3JWVjVOVURzQW1DR3k1cGpoTWpZNGRZdGdwa3VMMXhHRjVjZnNSR1BaM2psakkyTUNrTHF4QU9XWjU5dm8yRmhJK0RINXRDT1I0NmhJeGF3ZmdIamROTXJTMml6aTN2Y2x1WEN5dmR0QUpHVFc1SGVKc09BUHNrVk5yd3UxeHgyM0VnOHJFeHFqZWRzUHR1VzdTRFk4bG1sT3RBQVdpSDUvT1RSdG9TMS9vM3BTc09VQW1rc3VZbnUwL3E4TGtZWXdIWHBIeXdYQXJCU3lqMmNnRTRkNG5Damswc2NhNzZkOUxzekJMZ01jZHh1cHZTV3ZYVm5mL3RvcklqR3Vpb1VmL0gxMFFoaE8wakVKdUJvc05MSmNVOFMzdVUzUmNYN3BTS3BFR05HVkJlV21zOS9lazF5Y3VXVmlpbDdYN1p6emJMWnk3M3pUSzJkdi9xc0s1eWgrSU9zc29Zb1ZzTnhrZTdPRmtQbWRSdXhWNDFFbUM2OGZjYStNaDZZQzZxMjExOTZ3c2J3dFJ5Z24xTXRtK2VvTFEvUlRzUFpPeE5zZjljV2pBL3B2THhsdXd5V05QUFF3UnBRSHowanZvelpoNzhZZDZ3QzNRNEx5ZC8zMDV3Ymtpb1FzUEVQSUtvVy9FQ1VuV0VIMkNPQ094YzRWWThpZ1FkN2NMMUlySHA3OC9uSDMxTjFDeG5BOTV0TmN0WTB5N2NWdFVXMW1JcW1TV09iNC94KzBhcUNuREVaZVZ0TWN4RzBHbGczeWZrejd5aFkvemtwUnZzVXc2cVNkSmdXdTNmV1c2aUpoQmNmSkFXd1FJY29RVXFKTHZzQUlacTRkUWZYWExqUmhTRm9IR1BTek9CWFljVFpmTGxNU3RvT2NXbWdnVjhRNVJ0UFNVdXdPNzdiREZTcTFqNm5OOWl1OEE1N2RjemdOS254NTRRWlhzUFByTkI5RzFaT25WZ1RmRzZTU0pVMXorU1VwQnFvWTFFL1h6WFQ0Y3V4TnB5eVNvWERlMzFmZWFCZTdKRndaa1dHcmcycytOREdMSW9ESjI1UDN6d1puYkpIWERxSmdMNVRsRXovRlhkRUhxK014SWdYa2tLd1dnQTBEK3RzTmJBdUlDdDRFdTN5R0NlWHZIbnF4K3FFR2dsVUtoMEQ2VTdpdnFNYXF4RW1zSjIyYkl3TGY3cEwwVEd0aWQwd2JtV21vamdQRWtVNFFUdnA2a2V1bmF2RldDVnNhMVpHakg2K1J6dDRIbVQ1NUJCdFFCYzRURy9scHpNUTIrdDVsUHA2WFpBMnhJa1JHVWV0L3UycVk2RWtOS2RxVVZZS1pZVVIxSHVPUkord214Y2taK1BvS2ZKcUNZMS9ON0xhdDVJSmhPWFdvTTJZWGVTbGFwekVrNUFXRXZnTjRsS1FvdWZqV0N0eVQrNmtVYkpXcGttUCtmNGw5VGo4NGd4NGV5N3lHMVR0SXNMd3hjVTVwcTdYdGJjQTNqcVB0K2dPaFA5MDlEaU8rbTcwSTZ4Q29wK0VRY0ZLWHBEdCs0bUg4UjZNZWMyN240NDR4Y0YyYlYxTUlKWUNKWVZDNThiOTIyUnFsU1RzM1Jsb3Z1NUxsTU5TMmxrdmZENktPOXp1b1R2NnBKQ2RtdG4rR0F4elJjUHhDTmhIL3hzYWNlK3hPY2tTSHpoS01ycXJMbytzUEtxL1I0Q1RlaEd6UlVVMHVCTjZBeFEvVVdqQ3liMzZwcUN6aVVyZTU1KzRVZkRhQjdiZUoxN0UzOTlGT25UTVRzNnlqOUorbDZZT0d3VXQwRHd4MjNKbnJ2T3V5WllQK0tjQ2tta3VkMnpXZFlzRGFNUXlZUFNHbm94NEhvQ3JseXlndTVyUW1TcWRXRG1UTHd0Z1Z2a21pQ2tZMm5SZjFjZGxYcnVxSXRPV04rdHA4T2c4aHF0NU1xT0t0VkJ3UjR1RXFLcVRwZm80WkFFREE4eXNmR01WbnkwWWtOVUEwMnpHRkZNMWV0ZCs1dmVqUVhodmhBbzhQaHBVUGFjWHZJSFBOTTArRTkxWTlUbXJHZkphc1FyNnpseHc1bDJLaWkzenpRa1dtRyt4SE14Y3dVSFZrRWJRU0JQWlpaMHJHdDJ2M25WOGNteUpEZ0M4V0lOQjNoNFFHcmlPNi8xNC9aclNHUTJCdVpidDJKTVNMZWJlS0FERHRYcVFNZUxWOS9tem5oUHZPZXAxWnRYaVRoR01oLzhReDA4NlNpdVByT1NybFpKalMzNG02MFBMU2VINnJDYWwxTFMzNzRWUWVmZjZrZ1FqaktBWFREM2tBRDYyZi9nMGU0YXZSZjlma09GbUtqT3FpL0Z3QnlNNXdpZVhjaWwxL3c1S0lLUHNWZHFCc1FJNHdLams2ck4zUUFUUk9VNG9wNFcrTVJnMVkxcnZuZGhwZWFleGtXWkF0eXduM0t0b0ZlanNYdzR0dHF3djc2Z1pieVpQWDhFc1V4WXNuYmQ0UXY3SVVuUUlPekJKTk5aVlhENm1JZ1UxeFZkUGU5ZEg4dUs5dndPRnRsTElXSXlOcFdZQVVJSThRNnE2TXhGQ0hTdFcwNGlUQXJwb1dZc05KVUpnQVF0UnF0bjJUdkIzSE0zamNMTTdJMDk4Q1lNenB1SWFsd1JlemRIWUw0ZXBtV0RPVkdzU1FzNitKemhCemJ2YjVmY3RncnhFRlQ0VExLbE0wb3A5YXVVd0F4czgvcVFxSE41Vmk4K2o3YnhNUGs5dVB0b3FJY2c4L3Q4dk1JaG1QbVlmRlVmeVpOOHVPSWMrcDJrdE9Ib0t5T3RjY1VXRGtmbGI4NWZPa2NKcmZIblhKT0hPb0E0eHRnaVZNRG5IT0JOQ0o5bG4wVlZFTWFhY2xmZTcvQXhUWHdTSDBzQk45K2hvdFJYeU9IVWlUbWJpTSs3RGhxNkNOd3h3a3gvY1hUODZKOWZFU0Zxa0xXemlvRHp5VnE1OWsxcXZCamVGS1JQU3BJRDdFQm1rYjczRHBZSWhXUW5rdEpjc2pUZy9tYWs1Y1RSSXc1WHVTMFh6NmdSZXBBWDQ1ckNzM2NaUUQ0THZ2T0hNNkl0UllqU00zMDNyWSs5Yy9UOU0zYXNaeGl4dVZPdWJBS04wM1R4ZEQrcVNEOHQ5ajNLMWxocldoUGgzL3VNRkNxekRDZ0RsOUFNRWRuTS80alRZQlREWFp5UFpNemtpcXN3OG9PN05GOWZLR2JuN2FqZTNKcitmc1lZeW5YSElkc0JkV0NBK3k4RENxY3NnUktjaWZGSXg4OVhodms2Y0xJNWY5UzdOOFVkU2VkSXZuMFhMUksrNjc5T0ZQQzZmbzhzMVpNS1dreVo0em5jdWFSS0V1dEtOc0lEMWszS0xCRncvczdqZklwV2VBQ3FuWkFnZVBUS0dDMW5RZzN6WEtXZTZEV0hkWTlBTUM1dkRZSm9xR0Z2SHBBRTJYUVRMMVloVndnbXVEVHhzNFkwS1dkYSsxV24vT2tORFhoQXdxS282NDhHa2lXRG5nYkpBRU40NlEybHYyZXdQclhMRlRtazlLbFNVQXNKMDZ0MkN2WlFzcnl3dFRRUkZ5QXVYeTNSOG83R2UraVRJTERNNkFOV1BRVUtTWEtZalVKZ0RNbnBuVTd6NnpteXRoL2lIckIvbzZ2T0VVcmxuWkNNc01abXF2VE1GVUFrNmdIM3ZtdlFjUVlsR3lhYld4bGhLbWF1QkdtcG5ZNDJaL3lMTlZLTS90bys4emd5WjNMZDlTU1d1ZW5yeXIreWJ2dGUxdlBsK1l1QmxKMGZrdEtkNTJTNVF2bXhxK0FIRmVUdnBKTTlFS2ZMbkVxUzFEZlU4MFl0cnZPNk5RcS82aHBtNXhUTVcwUW9NRTJKaE5EdmhKa0dHMHdvTDB2czdYOVFKemNlWUxnWmtxRy8xN1NmWHR4VGkxQXVmME5hNGc5dWx6eFNMZGZqdTJPcTdKalMrWGVCWHpTSEtUbGJ6NzdJcEV0UVYwTHA3Z0s3NW02NEVYdUxTbW41M2dXOTNlSngxZm15S0tjdm5nU2NXMXczdytld2hodmJSR2NiNi9SWE50RkFLS0NoVlNrRE4vR1lrQjBObFljYzFYRkR1MTRXVGE4RUppRmVCeVcxV0JhQ3N1RjR5UlZ3RmUybGdYR2NLRmR6RnBINDExVEdyNzZTbVYxSUVBeENNK2lSK1QrMUo2UGFwbXloWDJDVldwaVhFb2FDSENhNnpIaUhQUEFnY1oyUmFOaFZEcFA4Y1hReUhUUHRaNGNEOUVtanJFY1RyRUxyNkttK1ZjYjRoOTQvOWhBNmJMT1k3N1FxNDRSZzJHL3g0WGprcWxsT3lXSG1raytwR2R2ZmljczkxSE1yU0pIQWRrd0ZLZjBYZVFLREJxcFQ2YkduTlZ5RFRmK0NUY2Z5VGNrTjMzRExxcUQ0dU5SczFJV0dUUllxSkxjbjIrMkJrVUhiQ3pueHNtYUNVQVA2MVdvenFyOWs2VDBPdVhFMUZuVUtwS2JPSHBjWTUxZm52Ty96OGdUZ0FWSVpjZXBhS2xKaFl1dGp1NmhrbVA2TEM0a09uSmxvTFlUKytzenFoYVF1Sk1rcHhkcldOcnFzaSswTFQ4bXlhKzRmTXM3N1c3alY2RzEzbEY1aXlzL1VIQTlQTllScS9CMFJBL2lDVU5MNTlZQkxINjhoOXVjSzlJaWlVQkkxZmdzTGJVaTQxUmRmYU9jZnppYWZNRk5FVjBTNE9taXVoZ2RnZjVJU2txK1JEbFRqVURDQ0wyc2V1N1BHcWVYNzQyTjc5NHpqeHBaK1poR1JxUmhvYXJPSWRXMDFTbmR1QVZINzVGcUdXVXBXWEFwa2tQcXNLeXA0Ymh2MUtQWGE5djJxSjdIaHFiRTdCM3NpS0EvVjhKMkRnQUpsZXVmNDhxZDRsTjYrRnJBME5qOGVNdHJKTG81REJYOUVxYVhCTWNQODRBL0xzTkZ6eU9pb0RWN3FTMk5KWlUwekhIakVQZWFOSVp3U3hSdDMyclNCbGNtM1pIdjhHWGdZNUZSVFFua1ppcWd3enI0WUxlQmFEeTNQbHZlR1RnT1gzMUN5OVJYVmZlSEdYN21HTTJxeHBhcGFBN3Q4SXB2NVZMMFJTdThuNUJmQ29ESDlDdUZad2twQnpoaHVMQ2NZUGpCeVdOWUc3bHJUV1cyVmlBemxwcVFMRjFkaHUyUnN4MFFmL2gvZHVaNVZMQ2Qxb2dhM0dNM0ZIRUNiYjIrT3NzYmw5V21aZGJvdTROV2orbG5KRHNHNkg0MGNtdjZxUk56bTI3azVQVElWZ2kxU1VZTWdBbE5CNFViR1FybEJnb0Z1enREV1lYcWNWVVQ1Q3puY0RQcmF0OE1Dd0lsMk1Ec0ZERmJsZzA5NHo0U1VRTXppdVJYMGgwOHpIcmp2TGdmbkd6NHJQTUREYmlUekU2Q3dXQTJLeGEzZEZyMTRXNXNjOWo1OW5UNUdhWUZIeVIzMWtNQlV5TVBCVldhV0NuWEVlZytLOThQM3hiSmpTcVNzM1lsbFJSaFVmOEhmMVVvNTVoQ3E3cmJURWI0ZERzRmI4Sy9pRmFpdXRPclZMZDErOU96R0xvNm4wN1l0NTFPcmo1ZUFldEVGOEtqZGlTRThySk9HRkh0TDgvUEhxeXdRNUtNR0RwRmJvMjNXUDY2WkVISXdabmc0c2F5ME1NelRmcm1ma09IYkRsb1JhVHRZdGdxankxNG4yNGtTaXhYZmtHd2VSWDJiWTV4VFZPWUw0VlV3c05GanhZTVRvZEcvdGdIMU9UQjFTd2szRFNYam9weHRmV0dqei8xZkF2WW9DOU10ZWZqZC9sTDVsdXNVaHJ2MS9WbGpoWTdpMlFPdzdZdVhDd1ExRms1cW4xNERZcG8xYjFUa0l2STBsTGNiVzZKV00rRkxFUGtyaGZVZjlxRkhkS3JtdWRCMFBZNGVpUFYrMk5ka0x1dDdNciswMlBvcVB3SUdTQVpncFlpZXBVWHhzdkhSU0RkZEdveW5hUDFhR2JUZSs3MWt0RTN3d2xkREZ5SWtXQlpFQldCUmhMTzJ4THJTNDZmZG4xTzFBdWd3dGlJMXdGTG1ibVlTb3VxZWkreUo3bmFxREtnNnlFMFpxWEppYUpaaDg0S1ZqZ21yYUE5SERzem9UQndiNGloNFBXeTVyV0o3eUl3a3UvSHJxYTR0cG5BWjVscUdrMW5FSWtkQXJGVGk3TFJnTC9GK2M1VVp4dS9ldm5uNFVSdGtZY2tsVmRaM2ZMS1owekVnVi94SzFCajhYcjB5a1dwdkhOcC9PWHk5RnV3ZHhtb2t4c3Y5ZTkwNHZFeWtQUU1FT0R6T2J0a2tETGx3Y2ZiU0VlcXFmb1crbUZVSElhdG5STFVBSkQvc0NCSTN2ZithWXY1WGpsVWsvUG5qN0ZhY1FSNUNMZFlsc1loL1YyVjUwejBSV3d1SW9nakY4ekxVWk5EOUpRUThXSmtodXpQY005bWEvTUtiUzZvTll2WDBzU0ZIL0llYnN1a1MyaGVaSE14SGlDNkZ0UmlRUy9tYURVUkNMMGpMQjc5WXF4dm5NTGYzcHFIeXpVa3o0Sll6blhOb0w3ZjVRdkFvYjJVbVY3ZTlyMWFmNlgyMndMNmFINkJGT3ZOUFpIUWFBdWVVYzdSdDlWeEIyalcwakI5TmZQakdqR3owSEFCdklpc0t0cThNSllmQWNsSUJLTjVpeDFINGJibGR4NnFodC9Dc2hJdUlGWEZsWnRxZnMwOHduVWRkMzVZbHNoQ3ZUNktBcVRzWEpncEkwdVQ1azFkY0J4a0Z6TWlhbGJVWWFJU28yZzVEWTVPN2tkTUpkWXVQaXVtSzRpR2VsMUMxU0dxeFRtaVNIdGh5bjdJc0o1YVZOMjdZNE44SkRiN0NDVCtVQ0c2RW5iWmswVXh6aWhwaVZiV25KbU9mMnNMVGxIUTM5VWVyekhrKzFheDgyUXYwUUlOKzIza2JxSVdXWXY4SmpGRkprcndaT3IwWGhFWENUM3I2RnNDWUhVOTFwdVZIbkpCNFhBUXZPZlljdU4weXUzREpBODRJUDRqRFh2MnV6RjY3WVF1aHVFYUlvVlYrRWtCaHRHazVzZlZWN0pZNGdQWE8zSkY5c3JSMFdtVTdGMkxoTjQyVG5sRkRkVGNrR29YSlN4RXV2SEdKRkN5QmkzK1YxYWVBQmhQRS9Wbzc2VVpsZ2lhaUd5ampQSTcyM0xYWlc2QkU1NmcvcUFlZ3NESFM2RmlRQjdrdXRVM0FpNVlISElTV0I5QlBiUUUwYXNVZEd3QkJ0MDlXbS9KZEY2dnp6dTJwUlpPbXVIRGczYUZXQXR4TThUN1pLaWlpc1NSdlpSYlR4T0N4TmYwZTdHUEpRU2pQT0RtU3BzYmhSbE5IdjQzNEVHcUc0M1VGSWpabExVUi92TjIrbUk5RVF0K0NRaTgvQ2xBMnZrdzZjUzJPc3FxTlJ5ejB4OHJCOGdrY3ZuOTg4WGIzaENUVGZwSmI5bGFTVzJNby9JOHJTOWJaVTdOa2NZL1htaWkzcFUyb0xuUFdYWmhKa25CMzR0cWtSUS9QeFdTVzdXU21hQWVKN0o2VnBxbmxhdWpyUlZSemRLOXcyL1ZuZGo2M3huZlhFZWIyZ3Nwb3lHWVZaV2wzTTh2OUVCS2ZZUGRuY3BNTlUvd1BMc25yUzE1VWNlRGZ2TzU1bFI4NmNHVUQxZVRhSEZCSXhPYmlNeWU2dmtqd3NISXl6bVovZlBxNldwT2pZZk5Ec0VDeWFsMTk2dWxQUVM5RXMwSmw3b25LSDZRdm1maUhpWkNWZDl5b0xHa3JiODE5SnIzVEhzOUV5UDZhdTZYbXZlRm10SkgvUEwxM0hwNURkTlgwdFJ6aTNZTXJmVzJ2TUVRYnBhYm1WUVdvRkdBeUYxZWdGMFJrRitqNGtzdWNGL0dHQ0JNb2NVTm5ldVdNY1ViYytGWnM3Rm9OUXN4VzNYVDEyMUJoOURtMkNwdHBSU1lmWlF4WWN4MFJIREx2VEhiMWZCU2NVZE03TGJLU0ZUMkpiZVMzZGtPNlBnQ1B4MEJ4RG1EcXZmZTVNbTVjKzlqV2pZOXpSWS8xOW1OUkY2SmRDSFlKd2lNL2UwU1NoZCtQdDhYWVRqZXhRSGVrd1hzcXhKaENxdG9Fand4cWVLRFN0RHAvbjI3VThVeEErQkhZeGRFejE2bEloVXZCeHNYU0JDT0lLLzJqaVFOdHFQcjZTaW4yWitramh1OGo2aW9UaUNGOVdhaWVxMk9WUWM1cHlMRWovRUFCZDdrQWRJWFZzRVdybVhEeEJNOVZTaEYrZ2JiNGh0Nm1lVUJ5d2I3STRMQzNOSFQ0MXZKb1VKRElaSUxRMFdBTTJTaVJ5WDZId3NzZDc2U1V3c0dIMmgzbzdhMUhEWk4xdE1pb2NzTmRtYnVHK1NocUVLWkRYNGcxMzRicEpUYUlaY0l4c1FjQnlvbGdNc3k3TzcwWmZZQU1RQkpicGU2aEJJOHJFcjJLOXp0bm1SeDBVVUNCWmdKdmFVSXgzWFdJL0pNRWlWdXF2UUNlSU5EeFFtN1B5SVQzZzZ6SnJST3ljVWlzUjFxRXgyeVpFNktmNENOaWpRZHNHVis1VjZRclRVWTRLNlNIMmc5VDdqTTlYUW5qU1Z6VDRFdFB4M292N1UvZmg0allOend1VU5zTHBBRnBmMVZlT2lEUTlPQTM1VWh3T0JPdGFtVFpuZHAxWWZXaERzMmxoRk1NUmVXZGU3UFZrU2w4dk1vcnNQcDBOYTJhdEVielV1a0d4bUlVd0FGU0pVUTVFYy9na1pHUG9FQTByV2RMS1NRb0p3OXBneFowd1MrU3AxQ21wOUkzbzU5aWJ3Yzl5amJueGVJenFhV0REU0x4TU9UU2ltbThaR25vcUpiWk80U241ZzZJVEwrbVNidlE4NkxkMUZkZWVvZlhYa29tNlNGcEEycmd1WDdRQVlXNzdITU1WTWtGMGZ0L1hKRVdqNmk1NWw2MDBTNGpjOXdsZmlaTkFCU014NkhtbjdsSU5tZDBvNDhXUWNBcFkxRmNLU21tQ2FHZ3RxN0toRlpSYkJGN1MzVzNsQzRTcEF5blVqUFBnaFY1U0ZjUW9KTGk0NllMRnlud01RckpNVGNmNEVSWFEvMFVTalJ5ZDNQR3RmYzdGNFI1azM0dGxsMUlmM1BNeFA0Yy9zTXN5SVFHZkduWmtOTFJ3ZjBxQzdsV0t0SnpmNzFlWWJ5dHBSaUpaK1BVL1pEdG1ETlZQTy9qeEZEbDZXVm9ZMC9ad2I2NnMwQzF5RHBzODA3dGR4dnZYYnZuYmhxa3VBZkFOa0c4K2RmeHdBNitYV2VaSWZzODdIbHJkM0MycktJN05lRTErQWZldkRQVVhBMERJQjBuZktwWER5WkM3YThSUVNFcUxqZjhvQ3FQUzJpalhBVHEzaUI5OUNGanhVcCs1cUh0ZjJnTUdCanFiN2pLQ1hCT2VVY2N6TlIrUzBPdXVpU3NaYWowS1VUZ2dGdjdLZFRoRUxyWHRZZldGV2lwNTJ6Ly9GazU3dXUrOVRITDBKWmRReEx0alZpaXZESi9hYUIvNnZKZTV5Qzc0NUZoc2xJS0V5MEVBUjdHL2Q2N2F0bU5KWUlHRGVzSXZhNFhFellpazhBL2MyVGVFbTRwQTBsdUdPelpuTjFaL0pzU0x5SDZvYlZobkdjTmVtMUFUVlgwd0V6SytDektlcHlPZkNHcFdDV0FIWkRuRkh3MzZObUFnZGFwYncybTVscFR2MmQ4SWpPVDZYczVNZk5LK3pyajR5NG03TWk5ditiTVo0NUJIRFJubHNKaHRjUlZFVEZRbUhFRmhMdlhOTllhTWs0anZITGowUFNDWUNVTVZpWkEweUJMS2hnVEhxa3F3N2JOWi9DdHErWjlGMDBGbUlacjBmTk5pa1BiSURrZUNEYVRTL2JETXFLWVFnUG9uUWczQm9lSFpyNHNGamZTN1VHSUN0cXVhd3ArMTg0US8rNEJKWkJpTSttVFkwdkNlbFYrOXdrY1NJTnNCMUdDNmlXUWM2Wm5Ra0o4SWlIZDY3UDcvZGY0bVVmeXkvWnNyS1ZSNThlNjZGandmUFViVWRiWjFJaWVsUnhpZGRFYjFHazdhcXVMZEJLNzV0RTRJSzczaWZtbXRsc3RxUElKcmZtcnVvSk5mRndqS2dhOFRqd2liT1V3cjJIUk5uVlZ2S0dpb3Rldnhhc3JZU0QwSVM0NExzWThWK0JCckNYZDM2UkpwQzNGZkpEWjVPNE5Bd0k3U2NtQ0M0ejlJck0vZWN0RTBHdkRsK08vRW1OYU4yOWF1bVJZdXdZQVF3VlFPc1AzemNPMFFpVGFadFROUUJHdjRYQUNaREhMZFJibnZRb0RCdHpOVmhsdlBuSWZ3ek5UMGFXbmJ5Mi9uQ2d0ODZMeGMxR3VaUVZWa2pyWFFKdm4vV3lvTGdjd3hWeXRGNVovSWtjcnEwbXdzRUMvTGxINFpsTlBqVWpuaFMwL0xnNnZzRW4xbWg5azRENnRlN0lFVnY4eVJONWF4bSs3SlJLK1BGRDZrR1prWFdBcEhYN0tFb0t4cHlGOGY0czZxajhnT08raUhpcEExTU9aL2NYblk1VEJCYTYxL09rQXlXNTJYQXd4Tml3ODJub2twVWFGTDlEd241T2JBZW1SQzM5NWVmZlh6NVBjeGdySlVsL29rbE45ZlhIdEd6RFVMRVJta3NhZXNnWW9yazZCbkVpNHlCMW5GTXFGeDlBVnQ3dHhvbnVLNFN1NEVnYTJaZkEvOVZvY2JLL0JLTlJYRjAzdzlXaVpheFJtZ3pXbE5xSWhLNXh6QVcxWFdLdXpzUXVucDYvVitCUzZRQ3pJMjlGN3Y2SDdzWFJyVy9PK2dpcmlHUGdSK01OQldDZFNSVThuUFIzK1hFdjR3dENEVjBmVEdweHVIWjF0N2hKelNKSWdiblNQTzhXWmx6YzlsMXBpRnl2UlI1SFpMek5GOXdzWXRENDJucDF2SlNnakh3U3hTZy9VK1BxR21qSlh3cFM1Y2dGUE5PT253YTl2OUhxbU01V3RwUWphSnVVYkZ3dmVQSnB2WFRtQjIrMW81aWpPd0djLzhWSko5cjZyRVpoNHJzRkxpaGxNY04zOTZuTXphcEZib3padnUvektQK0VzMlVhcmNRVG1EbjNEM2FTS01HWGVXcTBkZU9OMUoxa1d0MWFXRis0R3VFbFduWHV4Y3NOOWI1QmhaWkV0ekVDakVWZ0ZMdm9Hc1hqUnNpTXNxNlBGZVJVY0Y4aWRTOHU5WWRaUnJMSnhLaWRUV21SUVk4NWgxZXNzdS9UYmVxTUQ3anpLL2tzTHNNS3JRRXRBeWthNVB4YlR3RllBb1o1RWRXZVdEN25tVUFveG92VFlweWRYYmZxUWJGM0ExdnRCYkkvelY1VU4vdHRtTjM4dlBIb3ZkdlEwYjl5NzJEWDRiS3VMMHN2TllPbXhraW1mcGdIeEJlRGV6bC84aFMvZEZkcVN1cUdNTGhEYVE5T29Ob3djdWVBVGd2Q0lBRjlRbkNTbWE0UVFEWkRiY2U5TGdMVE40ZW1USmlKOGtEQ3hxQjZrM3k5NHhvUGxmSlJ6SFNCWitVeFhkT3lkbUdZZGV6RytXZGkvUlBVdTJibEN2TUp6ZUs3WFJCcW9JbGVQTmcxeGFkTDJGSWlHSnp4anFJdmtKdGlFbVpwU2tPdWtPZkF2ZUM0WTZQQ0VacmFpSE1WL1RSZ1JsRGMycm5UenZtWEJabC9LZ0NBNFhYN2xBS3NVWVI4bVc4UzNScFB5V3RFSU1QRGZNWjlXU2dkZFA3RUFGME93YUdjZ2ZvSVJ1bEU0OHdKdlhSZkY0Y0dwUHhXcS9hQ25HdmxzeTAzMUpLQTdYb2IyMDNLMmFlVWlrbXFOZUo4QThOUjdhTEtnc2VkSENZQm5CUEFFR0IwQUN1TGtxKzdRUUNvNER0RkRlNVJBeVdoOUcyeW44eEZ5dzk1RXBDcDR6RmMvbStlYUE5QkU3OGVYbzB2UTlhZ0hSbjN0OE1iRmZCUVpXT1RNNWpJdmw2bUZIUHIydEQ3c0Q5OSttTjhoS2NKVGViTlF3eTYvYWRMcnRCREswV01aV2ZZdUp2SmFDOWRLNmRGdWVMV2pjTU1FTWYyV1o1OHZqRU5xRFNLc01wYWVnYWNSVGQ4dHNXc001T1hLUkZIR3NwWXdWTjlKaEpIOFV1bzkrODVGeEZDV01oVGdaTG9KaG8yU2ZZczhlQ3ovemNWRnBKNFNDdUlGZXh2NlBlT29MVjIrdHh6bjNYWDgyR3hzZmovODdMbU9iZmNZOVFKa0tXcisxS3dBZ3diTHMxTmVLNFk0eEVIb3BXS2wrT0VOUFB3czBpdWdwSmNSaHVjZ2pzV25WV2tYQUJhNWZxUHFtT0xMNi9sZVpVSHRNNmx6SGk1TnI2d01pU292S3pkS3l0cFNnWTVHdmFLeDR6UnpUMStqdnZ6SVBiZCtMVW84WUdDR0dHUGhqYXJFdkZONU9GK2taSHEvd2Q5MHl1Z3hOdmdMNFVDK29XdjhOQVRrZW9qem96czVMRHZFWWNuZlhlZ2JmVzNCRUt3NjJmUHhjcGVRZ1MrY3ZLMDdmQ3hDanh2a3VoRXB2SGVkZnFOZ3RpR1hnTFVhandhUmhvbkh2RDdMbDF0TVlqUUdPdGcwdzQ2blJHbVJhRE15bFNTRmdsQ2VZUytZTkV1ejNac0x2dlRNczVNdHNvaFJvNGlscE9GSkh2cTlkY2pYbXZ3c2RPek5ZUlJJVndJcUNVN1AwRnNyaVp0SzF2c1YySWRhSmpNNnRheDFkc0ZUenY1cG5HWk1WNnpLSTg1WVR3K1lYOGVMRWxFSnhRM0k5YVplTmxqdGc0dmpJcmFYOWdEa3RKTXVnY1dkZUl0RXQ3alNRMFl2YUswQVBGSGZvbVhhNWlJRUQvRFpUKzluMzR3RGhTS3J2eUhERFhiVmVLTkdVcEdUb1EyTk1qTmxnZ3BjcDExRWsxWXg2Qzk2MTdyODcvcEpadG5SZzBTTmZZeG9LZU1JWjQxa0pPakFxOXBvWEc5am5WdEJveGY5LzRYSkx0VVR2TEhQdnhHT3Zwc0dkdVZuMEFNQWdVMXg2aTlmWHN1em9CWjRleEozcFd3MktmWU4zcVpqYk80M1ljN1RnN1Nvalh1TWJrYjRabkJIdFZVNjU5YnZDdFVqZ0xPRkFZbWtHTExidnVBZzBJNWo1ZjdyRU1odnZ4cWpkRkhZeUtwdHk5djFyeXpIbklLRjVsUmJsTTRkNjA5RTNNUWJ5Q2tiK2ZiWkxvN3pxYU5lWVBGWW9PT3N1dGhvaEJETEFwRUI5ZmJhZGQxNWgrK0hER2c3aVE5RlFFMGlmRlYxZVNQNUV6TUpVTWlzdndnR3ZMOTVuZUdiTDdxWDd3Uk94VzVtM3djSzNwdE5OZGZHZmpUTHpUN21JQ3RYcHFBMjF5eTAwcm10Yjh3blgvUWhTYk1BeEEra3VqOTFveHNpdU5rV0l1OFJscHk0bDZCSjFYVGlSdndHdms4aUZpRHIxd1l4MDVTQTlES3MzeXB3OXprYi9jOURVUnFvcGN1dTZUMmNTYTVqbEcxQW9iNFQwMi9XQm5uYWRML0JVc2hOTWNBZHhxNGhiWktRRXNEaDV0a3hURldUWkZKYnpYazVkZi85U05lOWsvVkhPQWFEM2E1UmFqcjJ4bkpHUmtoZnBEZW1pRnZ5SDJmRHJPT3J6eUU3T3YzUTZobTRJS3VKcHdVckxuMVF3cWQ3Q0FSdk1ySnA5QldMZHZhSGYvVkN5OTZxUlNhUTkxL3dUQ1ZzNkR5bFpJUXN1NkI0U2RwbGMyTjVUc3NxRGtGa1hONVFkUWZiZTN6R1Z1MnR1Q0h1T1FXeHhhMVpxNTNnWWI5VDJ0ck8zdWFuZEhmUE5oYlN0VlVjUlRwQnNTcXpnTGRrdjJEZUVyTjhBQzRiK1VDSkJmQVB0Sk5GV2M1YXNQMVk3NVZjVXBqcTZoMVlFc0ZhSHZZZGFoQ2Vnd1VYS05VR1NUUmRPb2NhRVhwdDA0b2xJZnRYVG0rYjFsRHU3SENrOWU1clhqVHY0LzA1MWJ5V3NISkxoOE9NcWxoL0QyZzVxUWxLemJIc0wrRmJhUElsczVlLzJLb2pFY1lNb1pDKzA1eHN0cUtjd0hLYlRQOWN4NjJHZTN1VURaT3o2Q0tUYmM0RWJqVU10bkRCUnIvUXVIM3pyb3JWWUdVckN3WnhsMnlDdFE1enpTOEpROTNZUkZCT0FpOXZTaHJpVGJQODlRUS9jRUd2QmtGL1h3ZkNuNitDNnRnRzdWTzJIQmphaDZaVEJaTSs1L2RuUTk1QUZ2NEs2cHN5OVFwMFgwQkF1amkvNjV4bGdWWEZ4QVFxUlNaNjdONlBBVmdpdUJDU2RxamlwVnpRaTVVcmUyZnpEcklMQlYvNDhFOTYvaFNZOWp2UVQxdmxZY0ZvUkQxTUJSRmJJRm55M1M2S3Fic3kyVFZTb29jMEZtT1lOSkU5SzEzNmwxdUYzQnhoamFJOS9paUF0NFdEMWlFZHhDa1Z6cEdlYVp0UmNLNFhmcEdCYldhNkNKRHYxVWp1TmhUTy9TWTlSd25FTTVaK0JyZy8xeVRaOHpMN09Oc1dheGEvbUVpVC9VbkVlNmloQmpBVEZFYmY3Qzl3SjhnSjZSb3F2ektnTFA3MHIyd1FDdUE3cGo4NnhpNTYxTitNekJxN0ZmeDdpUWhHcmJnTXdrbzVROTdCOGl4eVJkbnBiYmY4NW5JWkZTM3dQRzFBU1pPYlhFcmJwWC9uRVNmNjZwZGRhdFhmU0RqMjRCSm8xRmNSazcySjlEK0lnK0dsemNkcEozSytmVkxLUnZLaUgyZnA5ZG5ZU3laQUN3U3RtUzhXNXJJWnptWlJUb29nZkYydUtjbzgyS1pZTjZFUVB0QkY3OXZGR01NT3FOSEhUSjNqSVBEeUpLM2VqVDRXcnF3Y1FoZjVxTEFlanh5cFJNdU96emcrUi8zVWpaTUxsWU5idUZwQW9DWFVvdUJOVlA0bm1RVlpTUkJzN0JyTXNLTXp0cWFaYUVNM1dVSTE5MjRqMG1NN0tzaWNaaVBMVzBmazF4cTFlU0sxbHF3RHpGN3RtT2V1K2VrTVFwTFhiWXlpc29JdHpLSXBybG0zTy94N0JTL01xQXRDZnV4cWJpVlQ5aXdUTFcxUlE4SGFiWFgrTkoraWp5T21pb1Rqb09JbExZZ2U2MFhPM21KNVRibTFTdGRRdFN3Qk1rclpJOHFGeERZRXRGSlAzR05SeDZlK0haOFI4d3QzYm0xYUlIR0xOanFzamtKemZyOW9ObktkWnZxdkRaTWRaZEQwR1dSM2NOeE1oM0pBNzdnQWQ1Vmw5NmhlbXFiTHBiSHNlM1RRenZuOVZRUHdsYldDZGxKdTJacFZxSFl3QTY2TjlEZE1KelBGbE1TdTFQVmxTRVpTT0VST0hRcmgrZWo2U2pCeGpDbW1oL2lEbjdjSFMwekNJK0NDUlhnWURIMkEreHJvNXFWQVZyMW1iRWM1S2d0ci9VcHBXSDVsM0R4cm5NbEhsc2l6SUtZcmg3eWZsL3BZWGU0dCtGQUpLMHNSNzNHUEdseHRNaDRpTUFnTHBFcFVmeDNtZFNVQjRqNjJlTDVUV0E3VUhkOStUck5tQWxNTGI4ZE4wSjN6ZmU4NDY2S0psc05veFBsdDg3MlBRU1hQM1phQUtDcHNpZzRYRXNJdHRkMStrNEY1RW44ZTZBUnVVVU1DUmFFY3pNOThVNmRGeWVvQmZFWnBOY0VTOEJrQ0l6b3FNRDdwL1lpcGFkdXJGaEcxNEh4eG1VbE1rOFJrUlB1TkVwWitMMjZTK1hRd2ZBNEoyVTBweXN3M3htOG5IZDJ4L25JZUNMNTFwakplVDltNUFnMTlESytpOTZXTy9LbXNxMnh1WWV0K01RSmRuN1ZRUm11Qjl4T0Uvcll3Rkp1V3RUUkVnYmJjdnlXVXBXNlo1UlNxZC9PR1o3V1IrbUkyVTV4SlZlSDJKYk84RU9iTnB0UkYyNHRqWVV3eVBpck41OHVQZWZZa2ZUN2ZJWStIZko0anRGNE9Ec2hmTEwxelM2elBSUHdoZzZrNFNLQy9VbmdINXVjWXpjTE8waDNpUlFJNzJjRGRsd0dNckZ3QjhUTk55akpERkVtbmw5WFJkbnVXT2kwYTc1b2dRSUlGN1hleDN0U0tUZWNtR2owVERNaGpXQkJIOUdPazh6UzZ6K3JCUlFRMVh1NlJ6SW5heWdmckI5TlEzd01FdUNsVWFpTi9ralFraVJEeGducEN6a1hpdHVFL2lXVVR5QmJEdUhTdm5JSElybG8wT2NFVVB4UWtON05HMWY3dGFZMEJ0bnpTNy9DaXIzd0ZQUkNPR0NiMzg2bWlqcGsxcG4wRzk5b0N0eFAxUGpsa2RTNnh4NDhJWVRQSm84OXppV2k0VTQxU3lUQlNDTTc3L2RRd0NwdDAwaEVQOFQ1Nmw3aURjK3QzRWRSMndUUFpUdmRCWEpJeXJwbDVCNW0xcm5qRktEeTFQaTdIcEczTndueGRhcWhISlpyK0NweTJlM0tERVJ1ci9lQ0dQdkFYSHZ5QW83Tyt5OHlsYTRZeklleWNaUG9HWG9TeGdQNkZ3dWtGN1NacmUxYlM1VjdnOEt1aWNwRTNzSWZhZ2JZSi9CcmxQMStkNEJJdlZ6N2QxdmErOWRhU1BFY2VvTWpUT01Da09Xd0NISURYUlpXL1dkOEV3cGR6cTk1cG5KaGR6MFpoWnlGcmlaU0VzVUxKUFduV3hQM2NlaGk2RDFnQ1R6RkpvdlBpRHBsbVZ6L2Rna2lEVmlXV1k0WHovRnFLdGNnQ3BtTnp5bStweHRzTWcrSUNvTm9UMjFjWVR2YXROZ2VmZkMvMGhPY1l1SWFyMzRZYUZ5V2lJTG1PSGFIVDNwcHpjTVhHcEp6Y1JNQzkySmZHcHJoSmgxbGM4dXRUNjkrYmtYRDFtc0Z3VDdtRmQvUSsyZ2ZpZldTbGNXTkxlbyt3eVN1cFV4dDZpNHIyTlNEWVdHWDNxVnQ3eStJRXRQWExiblZjTXBhdUZGMW9YTXZ2Qmg1S1NHUUdab3Z0QmRzUGNab3VnZm5VOFBWdi9QSUcwUnRscXZ2TXZQYm9PcXBEZlJZUGZLTjh1S3VOek5UUERkZmdwbVhsaW1NTEpkcUtERDVrOWF1Z2VxUGlld2QxTG40dlE1VmIvWXNsQ2VvSmp5M2VCT2tNSDRHcEhVc2dmTElZTjIycUM1VVlRNjhtanIyK1RBam5FamFUbzhYaTBYMnJnTHlEUFhKNkYrUHhxWDRnUDVUaDYrS1NSa1RqdDNpaUVXUm81YVBocm1EcWJHUis5Z1M4Z3RubHVVeUZZczBZeTUrYmUvbCtoQTZOWm5sY3djWWFDeWxXY21LMTBmQ3lzNEVlN2Z6M3lIelVQYzNzUm1MNVc4MzRTdnI2dUU4aDZZWkljZE5DQTdiY3N3YndFcmpib09abzRoZXByQjkvZ3p1bXZrMTJacVd5VGE4Y05IZVlodVdXNUdSNVFqM25DbFAxMEJNeTFOV214RUhOOC9JTUVOMkhBeHVHOThiOHFmbTNabnBsL0JuZUlaeDdYYUxPTndwMmF3TTNtUUNPdXlQZVArZEdmUWZvcGZmazkvTlZHQ0F2NXBJU3pXZ0hpYVRyNEduVXVTTmR6Y1d5SCtOUE5DYlI0dkcwRDVHNDZxSzhPWEc1dGZiUFVmcElHS0sxRksxK3ZiOXlHWkRmRUl6azNLVlpOWVJPaWEvb0JMT05RREsyNC8wVGZlMHU0dy9sMGw1V2lpTlVyUGxpL2U3SmYwQXhKUjJNQk1YckZNcDg1bnEzRUFnRlo1MzlCWEdVTGtMYTFRc3RjRDc4YnBsQ1NkQm1SeXJEL1N4UVZKTUpxMGJvRjVSbUVCck1GN0RHUmNiTzhacDlMbDNSQmlIeTg4S0VnVDkvdDAyM1c5TzBMNk5NMXBNeFd3VVN3MnN2ZGdjbVUrQW10R1B4S3ZkVnRjeDFHMlIwS2JVaHprbGNIZnZTSXZia1ltcTlYZFFWMVdOT2ZDRVU1Vmx1N0gvTjFxREo4SXRhL3NOSlgvcFNUenhvSWtMMHdIV3VmYUIxZFRUbnNCalFva0JjVlUyT3MwU3NnbW9GVnlJZUlxckpYVWxYL0d0UWIxdHBNVVE5ajVobmJVS0Q4bThCQ2M4akREcS9VM1hpSTk5VFkxMWxFYXErUjJwMit0OFVDRTZTZktkWUZhbjhvd3RndlJzOWtjRkdIbXJXVi9Xd3RxaEQxY3lxTW1DS2hTNmZtT3VCbkNFeS9ZRkI5RUVFcDZuZmpuM3Z3OXNPVTREUEJsRUNSWlNWZkFqV0lUK04wQmNpZ29renNKc21DdVB0MExZUFVwWWRmV3dJcENoU2ZvbFZEYm0yTDVRa1cyMmYxRFYwMklvT3R6cHViTFpHLzBPT0xENmxJT2pwWG1qLzZpV0xTeDFQeWdCNUNFS285aSsvU0lia2F6VGhOeDZaNWQ1b2d2UTFjUlZPZFlIMmI4RXRJM2R2WXpXSEdyM0Zpb3FjdE4rUTVUWkZicDh2TnN4eko1UURUeDVzUXFOMVlOOW9XUjlYV3VXUTRXMk9XaFI0UEtjblVuZkM2NXZtY3h5SmdMRXRXYjZrUXhOK0xYZTZ2SXBxdUVLVVpJR1ZRdVRuSk8ycWxNaXFoZXliN2RZNDduTlBUVzFRUTBTTGVwRnZGN0g4ZlBsSzhYQ21DVFdlQk01ZUREbi9MMXZwVVNhbWRFLzhVRVVhV2lzdHZYZExxSXR3Y3QrS09YY2NyWkZUL0hYZExNWnJBN1gyMmRmOXk3czB3QlpORnBOcEVabEh0VUxnUUV1b05reTh4YkNLT0Y5Z0lSdTRVbGw5RlVmRDduc3lTT2RxYUpQT1U2VGN6SVpTT0NlOHpWSjVwbldGbWk5MVp1b2k3VmRzZXFoOXVaNjZ6b0xuNmdCVUgrYTRXS0dHaVZYZ25CUVRwUHhiWjB1WElxTWtGS2lkTERqcktZMm1HL0NXV1hrT21BUDQ5dWcrYnd4OUtBdjhsTi83NzRUUmlYMWZDUFpzcXZPUVhuaDNxMVFnWmhIbVNBN3AzanpNU2d6ZnhkZDFKTURFRlJyZVh0V1AxeEYvUCtObXl5Tm1oc1hsSE5TMVBWV3RuZzhLam1TazNiWG5yZGthR0tqa3FUMUVSL2FBb05IWjlQb2RxSE5yem5jdkVOK2s0MGtOWnY4WTVjRmo0Q3ArK2NVYzdLQTRYbTZGWmp2RlBTemJDVlNlcDU2M3pwOG9iQ3Y2cklscnp2eEZVNWFXbVZKaER6RnBXUlM1aURoSUhVa1oxL3dRM2JrSnVDR2kzZkF3UHh6UnBXS3dQd2ZneW93VTJyaGFXRE9sSmF2SHZkT0pibUw3L05UbXo2blpzN0tOalNJR1dEQUI5TXUwTExpblYxYmJWRlhBQnJxQmtreU10TVZ3SDRKZHhDdU9lT2ZFL2pZc1RPRzRaRktZNFl4SmdnNjlaeTMzNzNxTm1kQzRORm9PQlJ2OXRMREtKUlZaMFVQNElGb3FaeUxrZ2FaOElUNWk2dzVuSXdVMXJGdmNTaEhlWktLTk9Cc3JIbW1ad0lTUktXV1FzWXFMVytmdkRZVEFEQ0I3N0gvb001a0h0ZVlUTzE4cnY1c21pSkZPZnAyUWhubG9LOXV5RVpuem9TZ0JZZjRNRXRUK1h6VmkwWU9uZ2ovYSt0VzdDU1c4TUhBVCtrTmRxRVJOK1JiWFNENkk2SzI4K1l2TWRmZUJFVFFuMmJwaEZrL0NrMDZUd1QrQ0l2ZjhRa2poTEZaZkZESG1GOTE5U2d2VHdONnhzdDlEUDBMTk9WZFE1VzJLcUxNb296MUNjU0c5d2xVdUoxcWJUTkhZRmtHTGVYQkRQZUIzanNhS2NDMW12Z1RqamcyTTNZNUlObkwrUzMvZE1QSXVmeGhScUVMRTZpVENYZ2xKTVpUdnpaYy96cVpwenZnU3JGUWcvR1Bka1V4c3dpeGk1OTc3bjRyK3dZWlBPeGVDSEI5VENnalk4SkxUbXBXaEx4ZHRmcFdCYTVLOWRTejZjOTJNVVRod0QvQTNpVjd4VW5xTDBlaWF3eEExVzdIZVJGWngzUzZ0V3MyZnFoUEgrdmFEanJzZ285c2Z5WGhLZnpsdmlBb1BoK1lqWFpTbTJKZU0rTUFJVS9VdGcwSitMZHhoZnhTZ2tvSjNKUEI5d2RlN3k3K2hKY2xnN2hKNjVLOVVhdzRPcEVET3lWWkF5OUdXVm1ITi9qVVh1K2ZRU3hhdVpVOGQrN2Zxd0RhTlFHNzZiZzNhVEdVTGI1Nnd6QTIzUllvYjZoNlRGYU5aK0JtVEFtK1RjWk9BMVNVNEgzU1dvMkcwbk10SGtGaXZWYStxdThVUU9FV1o4RDdHQ0t5emNZTG9ueUpTYk5BbWRrK0REN0RXTURYNzA4WE8zQlhsM2Y4R084aVhxd29Mci9Da01MMml1MFpVZUhzQ2hOSWZJUndYRlluRlRGSzU0Z3NZWC9kR2lIbzRsTHVNeGVDdTNZTkdvOFdpYUhOV3l2aFZjaVdvanVxYVowNmg2M1Foam13c3lkZmhFRGxkdWtKOFZnYXA3VmVVdjJBSVI3NjlseVFVQ2hkMnZ3WElreTYvTDArTU5GQWdydml2QlV6TWYyUE9pU01mdHV4TG93dndPLzFBcFo0bGx6c0s5dzRqMmRDWUZWRmkxVzFKMHBUYUJHNDdLK0lGTUZ5TTkremd1dVhHK0JBempVRFBsV29NejlDYTF0blY5RjFRVjVhd1B5ZEluSEdZNDdSbEFzSDlZT1haeEl5Mk5qdUFmZnI4Y2RHWFlkNGFJVFJqSXpSMEFxRjB3TUVxYmNSMDg5bXExSGVMYVhyT3ROREJkYlFFZ3FXTnpoV3JSNkxzRW1UTXlJN3orbkMyTFFFV3l0NzhTbVRsZ1A2VjFEOGYzbUJxcHJOYis0d004S01RV2U1aDV2NnJxS2JFai8wN21nZkhWNnI4NnpoOUYrRmE0aXZ2QllvdFY0STVsZktNTzgwQlJUN2dCb3FRbEU0T3RYOG54dXNyQlUxcGFDZms3SEowc2xlZ2V1UmtoNW0xckduL2FvSmlVelNKU3lzcjY3MFNJUWY0VWdKdEl6L0JOK0pkVWdYODExcTVtTUdRUlM3Wk45M1V4c0dEMUZ4bXJDSFNNYW11bUh6WGROVmViNzh2RU5UazhQN3dSZjV5Q0ZZclNRQ0NVQWZnNGJGMWFIWGJLeWFPdHZ2VDFLdmNBYUtHM0pzVjM4dEFMelYyRlRWOTRFS0c5YmcwU1Z1bGFvcHhFWmxKamN2VjdqK0U0YUxFSUtacVJRMG1CNGs0SVU2b2NhbDd1VVJnMi9oWDRpY2J5U3lVNjU1RUtjdmFubHN5Q3hCSVc0NWczZ2FFaUsxL21wSjdnb0gycC9nUFpMQUlVSVlQMGk0Ym5Rb2h6bUQ5a2VKK04zSExqblU5WDMzQ2d4ZnRhVmtRVjFXNVZHTEtOSVQvUk5rUXlwb0FOUFJvN1NnWjBDdkJraDA5S295MzNxVm1yV0UrWEFHSGtrYzZVNzdnL085bEhKZjJpZ2pjYjVjb3pyYVgvUlMwTlNwaHhWWFh0M0dJdmpvNjhaQmZlYWVuNjFHMDA4Yk9xY1cvZFJKZ0c5S01hMzcwS2JhenA3SDYwTHloMGorVWllVitHbklwQkVPcEJqVVhucDNsK1kvOWN5U3JLYVpOckdtTVR4dVZCSDh5T1ZSZCtXSnFJTWNFWjVXckEvYVB0SFFQaVppanFqWFNMQXF4Y3JDZTFDcFZoZVZGZWdKeGVBK29Yek1iN0IxdHJwS2RDVHpZNTZxNVlIeGRpcWQyVHZqbWZEYzV1dkhtK2gyK1JqeC9lNzhuVEV4YmY4RHhwRGFhMElwQWJmRnlnTjZhSDVvaDZxQ2R4MWpMRWsybEF0WnF4d3dyRk9lUG1La2ZTWGNUdnJyMjhKKys3bkRFd1drVUljTkUzYVVaRHNWbW1Cb1JlYis0WEprcVdFR1NmMThJSDJob1BVazJ5WnA1RUUrUXltV2drTEpBaXJZRlgyTmwrcjd4NEVXMytOTmpybFI5RVlqbEk0d0RTMlA1OXBuZDA4eFdlczBoZlc0NndMN28wdXMxQzlrZ3VqMFM4SklWenoydVlIRnV1cnFaRnd2ZG40dndJanVXUG9YNGMyWHZlRG5qWFp6VkxSZmpGb0xSZjRSYlJEcXRON01yOE1hSUxBOCt0QVZ4UHl2SXVpMnZ4eVJ4UWZXSUprQmhMZWdiWUxtS1IwcUV4dDdVcUVJcldxN0c2Kzk3L0FoYWpHeEdlejlGSkVtSkdJeG5UQTZkcmZkMkg3RHZ1cmg5bWdGdHRXYWN1VW5MWHhGVkhOdVpaMHRoaHV0NDcyRU9hSzFFUm5RYjV3ZUdvNjA1MksrQVJzbkRYOVNUVzRyOWtuY0dlbUxIQ01DNjlPYStsY1JLTm0vMUJhWXFaWFVzaDJTM011dzFMeXlYdU1PVGpnd3hmMHQ5UVM2TEFlRXJJaEpEN2pidXIyeU94Q1NYME9NOHpxOEgvVThEWS9LekhMd3ZxREZMYlBicUNoLzlJd0hJRnlOVk0rRDNnc0p0M1JNbnZleHkrWGp6Y2YyNDc2Mlp1MnJqZnczaE0rRys0ZEdWNVhwbmlpM25iWkZkUTJvUXBIQXpoN0lBOGM2VmF5MXZWY09IOTh1MzV4TlNDRGRoT3JFNFNwS05iOXAwK2NDY0FTaDMxNGtPeFNDQ2FrdHB1SlhETk5Sems1VGZtK1pUeU9yN2lpc2h4c0Q3eVdaRFl5ZTQwRjdsNWV1SU5kY0NhOTRFWnBkVU1jbDBrNlozay9VKzlQOTh4S2VRTVRPeVVVUHZKZjRpcy9WMVE0NDhkZ0tWbTJuM0NJVlF2L2ZYbzBUcUVtTmk4akRtRTdxZ0ZoMzdPaUtLMFpBTFBZaXZNVnJucThLNlVtZGdhb3MrSVJHS1ByMk9Gby84clkvOS8xTVRxdXAzTkF0V2Z2Z1k5S2RZSXlrbXVLTXVUL3RqVFZsVnZERWM2bC9vN2Z1a0VMNVFsOUFmRlBsb2YwWk5oRXBTcUZEZGs1akszRGZnUGpnQXlMVFNvR0lNMm5uajVpb0M2RXV3OXNvSU9iNkVrcTd1ZW51a2dpclFiZ3hZcU1XKzB4L2Rnc1cxamNLQUJvaTRzV2VlbUhOc0ZMcFdvZENTKzJqbE5jbWJTV3pXUzJsK1JhU2RJdS90VmhOenV2R3JzS0RROVRUTzRTSXkveXRjYzhYb25UUk9ZMnNHdzV1Wmp2eitZN0lKL1NoRk9ZVTBYd1MxR2NSMlQrQm9zc3MwN2NUd1ZDUjJLOTNkbVVnTlIybm13NkFNaG1Kc2Q3ZDFaelZmeEsxUEZwamVSTW9sTjdLSC9HaEtHajVpVW54aEREenVuSjlZblovYW9QK2ZBNDR4WWRPYTlzeVZSMGRGQ1IrZ2pFcXBRbDg5c3U4WFJtcS9DYnZaMk5HbzROYUp0U015dnFQY1lQdVNjc0RIZU9nOTZZRGFOMUpqSGtkK0prR1dUamR0WWE2azlYMjdLV1BZWDNnSEJaVFkzWWU5RWFNRWlna1lLZTZ6K2lMSlpOdXNWWlA5VVNBVWpac3JJNDhDUkhjUCs1UUcxZVNzSmowYWtFMnpZMFRkRHJ6MGFxSnZDeGRuTExQUWNUdkJVaU02eXdzMW9GRld0OU9ucjQ5ZDRBZFJpdlJGYnAwVGhIdURzTUlVV0pkQkczTEZpTjFXWE1kQVp0dmluRjNraC8zd1F4TWk3TEtDblVhNjNaM2cxWVRRWTluY0JLRFIyTGxodVNBQWxORHF5d2tQRmZ4OEtTM1Rmem1Tc1VkR0h3T1B6dktRWXp1Qlk4SEdBd2NWNEdLaEVqNWFYS0tTZ0pjZ21WRU1KM1pUbmthbkNXN3VpR2lpd0wrZklEZkpKZEZBYWM5TTJ1Qlk3WnJjbjJkK2k1ZHN3YkZlRFhFN0hOMHQ3TUxLNXNBOG5UNzZHUkZIbnpaY2MxWDlnVGNWdExyUEtlRC82Vk8xbVdhNGhjQ3o1OEMyV2lNQ09zU3pSSlN6S2FJaVVCdmlubG00dXZ4ejNwUmpnUElkNC8yVzQrZ2NuNWtJRC9mYnVETFQ0WG9XTDFXck55bTZjcS94ZjZ0TG41d3poR2xzTGp2UHpieDh5WmJlOW0vM2o2UHB0cDNLbGhoZVNVaEVhNzdRejlCT00ydGovZzJaNktqVSsrWm44WW9WcXNwVnVxcmgvbEx0NmdoSkpZMHI4dkZwbTVzb09uL29vS0pLU1pWcS81ZE9nNGhQSkttSnpiTThNOHhRbENGWVBSTldYdENiVVR5TzBHVmxONkFLQk9FaFVuS1ByempVMU9PbUtxVFpaNXgzTnNoRFI2YkhFNFpSck9ITkkzWDhYOGtOWndVSFR0bnkzMU92dkp5U2pCZ0Q2SXVBdThiejdEcWUyTG5ub1lBMC96dG0za29Wd0ZFZEZ6V0VOMEtSSE1yTkt4SWMweXNRNGgxRDVreTNPSFlCbE5rYWltMHFjbTh4UTdOZE8vdThEK2FSK01aenFyQVhnTUZ1WHJzZTBPSkNnZFJFSTIwY3gwbzZPUXA1WDJsM2pZZG5ybnlYbFQyWkJMR2lCVnB2b0pQMzFkNEhsMXN1NDB3L3R6a0tyZ1RsYXRPcXdXaVA2Wm0wRzgvQnRKWG44WFMvSUs2TUdtQnBhSzdRREpqNG41emlyMFU5aW1lTXNvNi9ZVjk4MldGaHY2a3JGQmpiMzFjR1pSZWRQVUJ0TVZqREdwQ3NveGFEcjZXeGtKcWJCY1BpL0dWTnhPVEhRV3BiNm5VWHR5UzA2emhtZmFDQXc2NUIrNjVlL2lkd0ltWkZJWkYzV0tQRjdzQ240dXoyL0NWVzNHZnVjZWtCVHFWVEJoUmVDSldaMG5SNzNJTkJCZjRsRmFFVEpVYkZFTkVtOS8zUFJESTNLc3E5dks0bk0rMm1HcHUxUk5nWTEzamFhQzJvU2J2SEhJSnN4ekFxcUdBR0dGT21IVUEwTjNaVWJjcCttTUJrZTZqRFZ4NzhDb3dPMngzR2kwWUM2YzdZVVhPYzBwNEhreG1WanBOSmhqUVcvVkpwZElPMjdVYVJkeTZKZG5hRklTT1QyRll4NVYzc3FGaU5YRENQUXRvNGhSV1UrQmVIenVHZVVYd29qZVRCa0lycTMwVHVjcXl4bE15TXhwZlBuYnhNL2IyUnVTK2dxdHMyOXJHWjdCV0FUNGV4bzJza3FKVGlZTEpVckdnVmtoU2JMaXRIK25HVmVwMU1kRlFlNzg2a296andFSTlENTZhUFUyZHJtcnB1d2tWRHhFbm9OL2JZWXA2ejRUeTlJT2VpNEFHSDg0YmIzNXJ3TEtmaWRQQ0kvUTM3aWxabXQwRHI0QkdzTlJiTmRDWDdSU1hEYTdkU0o5UFB0NmZyNFJWaGh5SzJQTU9wbEZtanVzd2lUMWJmMm5ieGFQUU5FTkk2dmVXMW5nNGZKZ3QwcElSc05PUGNQZ0dkQTBML2x4TTRqQldYWTBkc0p2WUdYd0thdDNmOGhraHIzM3NWM0M4dEVxUnVnY0ZrZ1NiR1ZrRlJhWjhIb3p0VUpNNWFqVzk4cHIwU21Eb1ZMTWs0MXhYOUhvbWQ2UGZaTnZhRzBpTE9JYVlrdVJpS2ZSbnFxaUpITllyd2ttUk9IZENnTll3STBXcURQRVl3Tmo5YndRTXhQREpUM21ZQ3o0Nm5FbmNOQ2d1T1JlSWMvWkJLekNKT1h5Y0t6c1c1S3VHbnZnZ2NzcG9jREdLRHRKQTZVYVhHaFZxUnN4Z3NadnRZRlA2bUtiVStTcExaQnN1eWtEVEVYNVNqclBOeGdKN0JUNUVkTUNyWFBqYllEa1ZteE95cWtNSEl5TkJGY1BSYXVjZGV4VDR2QWp0bHpscGlZdmJacmQxMHhlRkVoU0UrQlJOeXN4WFB5Z2wvMkViUjdSaEtxT0N0UWxxQVd3dEJGeml6d2xRdmM3bkgzVjZKdld4NnpDaDB0M0lBeW14R3lXdVovZ3lFeVRxWjVmVE9KRjZVZWtjYnI3SWJseVVYSkhEbFJmT3F1c3haWVgvSzViM0FLRmFBUGRaQ0dJSFBSZGd4TURYMGEzUmt3Z1B1VHFzZFlKOWd4U1E5aVJqSlE4UkFwVnJRSGRFUW9KUWtCYitJUlZ0MVhXRDV6bjlwOG5xc1dVd0RLZ1JIVXJyS2g3MHBVU1M2S0FDNnF5VHRIVEV0aVZwY2dmNU40ZFZnWXZzbDlhWkVVUURjcmNSV0V0bGgzaFI3YXhTM1prd1p5eUl1MWpQNHc4YktzdHdJM3ZuNkI5N0dTOUxHa1M2UWJXdkNRZkhYVFpxZWRhY0VTN1p1S05Va1BxekFRYnA0dzlzSzBTS21vYnQ4S1hFSGJHVVJ5Z3VzajF2eXYyZDFWTk1aWlNhemEyWUhyNi9wdSthclYwSG5pU3FObVRJb1hFd1RSajErclBCUjRVYUZDcVVWUFVHNmdESERsVVY4YWRmbVVVSGdoVE8vOXlnUTE2R3BKZ05ZSWd6UDI1WGJ5UFpLc09KQ2VvRGEwbU1tcjVIVW1kZERnMVJONENzb0hsQTJUby94emRmSXF6eE5obXg5Q1NQNk0veGdiMHJWUTRjSHJZbmFiSFdiWVpNcEF0NDhmN2JubUNnTDBXQmhjOElCRFlHZ3ZUVVM2d1FMYmhSOUY1cStsU3ZZZkQyY2ViMjZZS09HbUtTWTgxOTNNa1AzYTFuT2NqcityZTNBQ1MxekMydzYxNXNUT0Z5ZWhQMDQ0alVBMEt6Y1EwTmZkVTNraFhELzVHQkdyU1NsRmRpcjNteVFBbU1SSnY0V0dUWG1vMWpSbVdTWk9hNUNyRzl5Ynk1Mnptc2czOGJNczhCREx6cE8vOVhIWlh6akpQbFNTYTdlYk95TVZqMDhpK1FzTU5TZ1p3SmtnSGdJQ0VTTmJpRjlTeUdWZ2FCbEIvYlhseXZUSStJVjgxcUVUdDdCQWdPcHA3TFRXRkN3UkVZdlJDS2V5N0NGalMwMjRiRmU4WHp0QnBVMVNXSWVXN3FOa2dDNEZCdHB3ZG1iaE5kVVlMZlpVRy9TWUI5LzBnYTZjTkdTMGJoV3IwWDhOWDdqZTJwK0ZhYmhScVpVQkZnVnY1anI1Sk1WQ202bjhnajY2anVUcXBHcUtGdnFudnhpQ0JOdG1vbVMveUJDOGFUMTJFWW83bjF3cmdvalNnYXlKY1M4eS90MU52dm5BYUtOTXdaZFk1ZUJuc29JRU4xN21JTVJsZXo3YWIzTHdtV3RObmJrbmVPc0E0V3AyMmpHdUF6eFB5dzdSVmd0b0NBQTlDekdNaGNISFRDUXBEa3NjaEthVHRjeWcyUTJoT2VvYmEvODRNTFNnRldIYldHc0MvT202RFRQWTNBRHpiOElJM0xZN3FVYk9Hc0kwaktML2lIckswVzVoN1FzMCtuYnNFbmVXUWorSHVPTEZqSHF1YjJxSG1hMHJoNGU2SWwwZCtCNGNvV1dTNkIzbEpzOFArVVBRWFNrRHVXS3labGw5eEFlODhTY3lwS0FwaVUyRFpWT2VhLzhUd2l1NFNYZmxDOXJVL20wN21mUy95MTN2dzBxQzVUTVpKMzFmTDhWQnBkWUczU0JXR0VBUUNUVGhORkRnTEhSaFNsbzFVWnNSU0VjSG1IU2U3MmZkei8xaGs0UTNISGwwcWppK3FGWGFBLzdTR2w5OHhpbnhQcG5RT2JldUViU3VycjlRczdISU9lL0hiWWhrMGMraE9Cc3cxVk1RMTRzclJnRzVETTRRbWtJS1g2enRhbnlYbEp4aUs2SnJwdWI0d0JwUEZBdDFxWE1UanF5aE5wZjVVK05ocy83K0FUeGhvbTNrWjlxa2JRZzUzMnZ4MmRUUW9sMlZMbTcyL3ZuSC9vRTZLdlZWcWttcjRSYVZkVCtndERsVXdILzNoRkI4dGxzem02RG1Oa1ZsNE1aa3lJZXhZandxbk5wMVQ3WTJpdGUralBXWkJuN1lmaFowT3F4K3pONndENkl5ZVF1b1Nvb3ZreXBIOXNDRlR6REZjSytMWHFGL1MzMGV4NlkrY1pEMXRSWEZNSWplajVDTmR4dEdhL1d2OHRYVU55bWhxemltWmpTQ0N4Uy9NZDExYUJZdDRVblhDSEFSb1NqTFREUXJTTnQvcWpwbkpqVGZkQklsMk1FNzZBT0VQL29zQ0dTMG5RVGRhWTNKTXp0OUo2M3VYbnVMOVRkdHVtNTdvUDhESzRKcW8yQkxxOHIrOWVLeUJVR0dvaHg4NzJicXJ1c2VnSThONjIyTWdSbStyYWlEQ3ZpbTRzait0MG05eW1aaVZwMnI3Tk5xZGdiYmU4ZU1pS29UQVcrajhJbVF0bnV5a0hucThTZDVrV2wvWHExVjRnOXhSR1N5SEJGa1dYU3oxblNsRVJsSGhIbXZTV1hiemhxZm93SVhHU2ljMEI1cUt0aHdKZ3BwUEhuYlZvQVhoNDcyY0FmTXEraXZKMGk4TythNFZZUW1sbSs4dFloUGsxc1pDU3BuayswRDN3aDA4QkZHRFEyUHY5eUZQb0w5bDdKU3VSZjgrTkFGT2lrNmZxMmRTZTFHcGJKWU51YkdTTTJjcVo5T2V5WUUzSDF5VFBrdkRzRzRjNWtqMms4cHM5UmtCRHptUjliMnN4UFpmbzVYVlZ0ZWNtQjdvME9UdzByUDdNNElxN1pXQnZ4YnlEOWJueHY1Z2tFQys2emJWeVlQMGFVUlRyL1lQWmE1KzdEQSt1YUVleWtrQU85dzJMVjFCQ3BhMWcyVEQ1TENkOEl2VmQrOXA0c3VkanVwdE1EZGZvYVBsdTB2Z0xNUkpkYmd3K0ZYNTAwczFKMWFTU0FQQ01QYTJtL3RwUW5xeHNvbk9wSnQyM3I3cXdFcEt2eFJaL3BBa1NMbGZKZUExdFhiSi93a0hFU3R4MWE1NUFpL0NNbHBGZkQrR2NvQWFxSkx2WVU4bStwVThyQ1ZPcjUzNzVlUVN1ZFc0S3NZOEVYdlRWaUdoOE9QL3Q1YThRRmZLelZZaUYwcVUyaDNCTGZTUEd2Wk9HcUpLNzRSSlI1MmRRRXoxdCswNnp0OU9EcVpVNnZKWWFjMW1sdzE5Tms0dDFpZlBnc1B0Ylg2M3FUbzNYMzJublh3cEY2WFFqRHppMUJUOExGSWRvd0ZGVDBsTGdyOGxBZjNzZWtmTi9UQ1dteWJUWHBVcm5CY09SOEhWOENlVDZYdSs5ME9GMDVLYkRDdXAvQVBKL3BMaGl0aEFDeldjckVlL3RENmQxbWtsclI2b2NkK1dBaG9UNm9FV3BkcFJHOVYybGtMSVhPMXdTOVhJWDVPTHVmclY5bFRwWXA4NG15cjc4OFBFeHdCWjZBalNvVTJXaDFTczltUm1ob0N3b0RSYS9hRXFRVDhTTDVaRysxUFk4OU9BR1U3bWxiaGtuejJ1dG5sZ1MwWFM0ek5BRS9kdEtXOHJuRHRWaHRSOGNFSkdnbUJUNTFwcGx4blhnbS8rdzJiTW4vaEsrOWhWS0N0d0Q4SmwxcFdQV3pnSDl6MkQ3ME5iQ2ZEaTVvK0dxaUpzd3VjazdXQXFrY1Vub1FTbmZPNm1WSnIxeFdZOFpzNnE4MFFDSzJoT0JqN2VUeWtnVGcyd1VyOWhaSHE2QW9KZ3NSNFNDYk94ZFlMVi9DcjdKRWtpRGd1ZUIxdjQ5UGJQcU1yUWpKaytzK24wMjA4Ti9LbTFUN1pDbzBTK09kUlY3bDNSb2ZYM3puandyQmFtSkIxUnM1RGxvblp1WDk5aEMxcVNpdnFHV1h3c1oyOEhmTmhVOVdpRk1RajhieExRd1ptRk91UkRmQk5yWnpyUzdZWkttREVoOVVXUjNiWFBmUm5zYnptZlNrQldYWElGMkwwRmZjN1RvdkVQYXJVbEFYZlViaE4vamFZYldzOXNjV3B4MUtPb1Mvd3NBUFRDeHlIbEU0OXQ2YmVhcXBJbHB6Rkdqa1pETFo5SnZtSlJWUnBQbmxHS1VWMm8zZzNDNXJYdFFzRG9iYTVSSit2QTlMZW8rUy9sUG9YTHJBdDBLM0dBRmwxZHJxay91NmdBVUQ2WGRZMVFzeFZUSjJSNjRGRXF1bXJEQVA2Q1kxS3NCd09IRnUxMkZOKzdSMEY5d3gzK202aVNCODdVd1Rwekk1OE5JbzhrRHRkRFRHdWNwTDZGSjZQb0xyMkdvR3lHOFFrbnp0elRJSUFHVjNiL01FLzFDaUZqcXVsbm1ScytRczdLTTE3d3h1YUxNUkJIL1hBV2k3blBuSlNkMjFNNkhyVzE3QmlKME0xMWFlcXRFN1FJYk9jUW1QRUs3MEdYNW5OOWRSRFg2WVF4bzZwUHZKc29IdXc4OUNHY1FMSFUrdHlvQWFpNFpVTFR1Qm5Ic2tWOVo2ZDFPQ3c1Nkg0YjZuMng5enJUTTJLUm9ETlZtY0JNSUY5dVFFQWEvemJtcnJwQUtncU1LS0lxWnpKK2dlendKRmJxaC9jUWg3REk3dG05UG5wRmZqMXMvcEt4VEtKbjVDcU9RbTFsSkhDaDI0bFpONHFOcFFmSUh2aTlmYy9TSXp3d2dUcTVVMnJOa0ViYUVyOG9DMUprQ0hkWWhMYjAwQ2dpamlUYjRKaUdLVVZmQm5HRmRmZFlobzZFdDZiQUpwMWRDQlZLaGpSNVRVMnBBWldoZkk1VkZta05UQm1TN2ZBeGtwSXpYMm5UdDRDS2dHd241T09aVDcrbzAxbGRBREhSQ2xFQUlETGgraS92cUlJa1N4ZGt3eFozRlZRK1NUNkIwRldlaVk0bzhocWRVZW5NdWVKV29ROThvZFVLQmJUSlF3aWxjeDM2L0krUjJrbTRKNDYvZE9GVjkrYXZUdUVIaVRSSVdvZjJJNWdLSDBXVEh4YTNuVFNvMndCclRqeDJpc1NsS0FyYnJFT3p5VlhNL003RkJhemhWalRURlFibkxtbXlUQk1tQVFxTXhaRk9NUnpKOGtyMG9EM0FteGMrRzVmREplVXBMZGtkQnhSVXdPZ29tbmhIcVgxVlNtVU1ZZ0d0dGVDY2RqNk5lTWFGOThHOFIzdVYwRWlWcnBMaEt6SE5jdmJNV2Nmd2pFQWx4WG03ZjZ4RG04ZGZ3RCtZL3JVUVlBN2wyNmxNYzFEVmNSeGtvRXorVHN2SXNORUNzQzZXMTVadGprMEZ0cHpmVW4rNXBMa0JBeDI4N3ZXdzkzV0FiUVNyK1pSeXIyVlJnYlJwMnc5dnNFMGoyWDYxTWZjV1lUSmptVlVhWFVYOEhpR0R3K2VrQWNEcUhucStleXVHUU05RmNPUjl3aHdOVXFEbm00U0s5UHhzYWkxcXVjQk9LUFFSRVJaVTBPbzNFTStqdWlUMVFtakxIUUs3TGdxaGhlQWZrVkovWjhzbldib3g2aE9WWjg4Kyt2Qmo1SVdHWUZKOHZKL0tjdEFmSnRNWmJEdVVZbDkyZHJ0VXUxekZndVdMMms4Y0oxd0x1WVBKSk01Z2pLRXJDcmRxUzFJTmRxSHhqRmhLOVc0NE55Z3QyRG5Zek5IZExZYWlJSzNvQ1JxbThaeXZMcnV6MVFHRGZhT1dSN0IzTWFzcEYwR0ZiNHFncmxBSHZhQ2xNeEpINWR1TE4yUEtPN1RwTnNPTmRsRHNUSkErRGJobUluR2hjQnlzdmtLd3U2ZXA1ME9BWUY3QVZUZE91N0xUaStCc0x5VVdtVlczWjgzY3U5SnJEMlptNHhwTzQyTm41UmRVTzdWcHN0T3h3dWZxUVNRUXRHMktpTVN0bXhpN1JLUnpGald2V3FGNmpXMVFMNEk1Ti9vamI4eENWd0VPc3lzV1NqdUdxVU1oZlZtdVdCNE5iTHBpNFYxYytIQTJBdHBnMXlZcmgxeHUrbGhDQVJnN0hBMFBtczY1T09TUTl2QjdySVZNWlFlZmNSTjhjTk5FM3JyTVl5OVc4VmdKQklPU2hBc3hpQmxReEhkMElHL0t4SzNzeEFsUVpnOHNmNXZKbVU1aFJQZVVFV0dSbkJQM1ZRLzdHWU05NVV5NnlnblJNNlpoVE1IQ29aWW9LTUVlWHFPaVVUQzR6cVZvRFB3OW5qSUZ1aGh3cXpqMXV4TE5LeUc0WEdtMGgxSkhjWnFVM1FSRlR1U0Y4cmR6NDU2NG9WWWRNcmRtNU5HOUg5RFFRUzlEMVVuQWJHWnArT0NEL05IQUdlSzl1ZFF3UVAxSFgveFpsMVpHQkczbTNKY2VMeVUvWjFQS0p0SkdDMzdVazlkblFHNnBaMU5SSWRMV3drK0p3cDZvcm9xVUtUc0EzN0VveWtsWG15QWVJQmFiYTNsc2g5cFROUlEyQUxkZWJiUjJ1bDBLUVk4LzJ3RlhOTXAvZHdhcHd6WFJPSzBGYWJKSTJ2OUhXZXZ5ZmgzNFBaTWYyNEpweUQ1SE1mVUFaOTZlMThmdzlVVnpHV21qdzU0R3V1QmtVOXdncG5DQkpHMDFkbzJlZ2pjYUlhS2JyM2FDV3V6RlF4Q3VZYVR4Rm1oRTlOb1czbkUvRUx1K3NWTVkvS3ZWdG55NnZFUmtUOTRqUkd6TUZHdWpCZXNDeWRrdTBXMmhhQk1tTm90TEJSODhGMllGN1lEaFYzVEpVRTQveW1vbkhhWEhKSnlrU1hMbzk3VHpabm8xRmVOOXkvSWkyT0I0ZS9DVW9tSjE0a0xsa09jeUNOL05temdxL21EdGhlQi9iM256THpqSWd5akZycFpkb2hhYStlcVU2NjAvRjBrOTJNRnRxS0w5c0M1S0hKM1A5ZWhDeUpIUHJJTW8rVGk3cGw1WkZYT1gwcmNoU3NzY3JnR1lkM2ZtaVl0VlVWY205UXR4QkYvRkRFd3drL2lGTFYvRk9odTF6M2NJeFJuSWQ2MHA5RCt1dGthTHJaejBzaTZxQkFwMmFiTmhhSytzVnI2cjIxQ3RLUFgyUk5wcnJGd05nUHROemNmbzBLenlyV05ZQWlkNit2VDVscExxQjdLbmMvOXpid1lJVFZOVkI0TThvRnA5QW9oWWE1UkJpUGcwMENRRWR0UDQ1TlREM0lwR3k1V2JjK3V3Q0grMWE1SFl3b204K1hBU05DZEt3bG4ydkROenduWTNiTmJpL3M0MXp6c0ROZy9sRVVGaVRtOWtnWWpTQXhXaVpEZnBGSzNkUWJZMUF1eTB2V3NOWTZ1cWxJdk9YditXUzh0UXRUS1BPQmZxWTNnTlRmelNiYVZVSDJqRm9rOUdpUzN5Um1pZFdidHRlOHFMaGY4T0pnd2JiS05sbUc4aFhyc04zSFlVK3E1a3RObHl5ZVB2aFlRU1d3Wks4Uk5GZXo3eWJjdTVCUVFXVjNoQVJDT0pGbm1PVFRkY05sMDlqS3dWREhIdmlyRExUK01nMkg1dEZDRGMwTjBNd3VCWDBEU3NMeDl3Y0NjdWZBZzJyUDhrejdPSGVqUGlKSTlJNmw0VW53VFY1VEI4aE9ybmlsY1NEMm1LTGVRMDczWFNvalpUa1ZtcDVMdncvRSt4bDlIMEc0WS8yUmp1Vnd0T0txWjBpeE1OMHQ0UWE4SUF1SG85Z05QV0hDdkpSVnl4Q2tJSkozc1pQZ0cwUWlTb0srQVF4dHI4R1Q5ODFibjRQTnlCN0tjTTR2WFM3bDFOY0ZIUUFrLzBESVplci80Q2FFNUVqU3FlNkdPOHhpdDBBdEVOTWNUd3NocmpRbUNYM1l6SzFEa2NZNk9sclkxa1l0YlEwUGo4cVZYSE9ITVJFVnZ3R3V3SytvbHZ5ZWJqaHMzN3JJTmFwZWRSOEUyS0NyTkNwOWFDbXVaQmUwQSt5cVl2clY4ekVuUTJCVkpvb2lrWFNmN3NONmxEdkxONE5jZHN5NEp6aUZ3K3VLYm1NL2RkYUFEMm10OUpBOVpqM0E1ajBLY0Jpck15SGs0Y2NwWHU0a1ZLTVFiamJMR1U1b3hVdU9ZYkdhTmtIY3Y0NUo4b3R2U1B5MzFhN0Q1RDFYa3B6TURDUUUzREFzNkZHOFBiMVVXZ2JQZ0grS3o5ZVFZM0Ira1dnMW5mOE8rWFRZNkVRQjAxMmhwdnFFWE41TFRGTzdxc0Qrb1IwanU5OWJOczdQc3VwWGRRNzQxbVpPOVZJQ2h3YzNXdDI3QkgvRHNTcXpLY1hTTUhDM0p6QjloeWxyS2oxZFBuZzhOQTlBQ2tsZVlzSXlTYVVvaCtydFp5YmVoSXVLYy9aamFKWEUvTXVUN3ZRcE5VbXU4cm4yc0VpbVZyVGorS1RhY0hmcG1vRUFvaGpIVUx4cEZCWFZUcDRRc1hkZmptM2pKays5V0gyWEt1cU54ckhjc1l3ckE4UTVMd2UvL0R4Rmp4TWx2U2JGcEx5c29TSjlTU1hhcUVLRkZRUXg3SDNrbnNmOWlLSXhhTmNJc0o0T3JRR2NPUWFEVTBpQ0lqLzR0RlpleWRhdEdZbUw4eGMvdUZIMkcwR3cwNHl5T2tvRVQ0NVlLYUlEVVZjTDFubVF0L0VCa0dneThQeGZ1bjQ5ZlgwbytCTE1WamtaaXdGZzNmRVBHUFJzYUt6Q1ZuZkpST3FtQjhRa0UrWE1oVzFuOURGVUxvSW9zVC9peVkvWFhFUi9WVEhBVFVEMFF3eTBXRHlJWWxzcWJCY0VuTlBZUTBIMUM0UE5lVGNZRzFRbHRrd0JTSnMxTEdOSWFLS2RsV2hOc1NsY2FUcWZsWU1yQkc2SHFnUHFkSFA1RUNMNTdYU2YrUUlaai9pVHB0a0tKa1F6Q1hRZEQ2VWFlV1NOWmk4VmlmbXN2elk2OEM4VDRVNUJZa2tGeUdURUtxc29vTDdTeVdESGIxd3ZhZVA4MDFPTy9WTEhXNDREcGpYMmpJSnRPYlp4eDJPT3RXWWh2azVRRDFOTnFkcTBQQUdPZlhnQXhOK205QmpFK29hNWljSkc1K1NnMC93RTBJRHRwNWlRR0tkd0N6aWJDMGx2TDEyUWpXZkJhM04wVkp2dUZKM205dUE5eTRValJYSVJ4UGdGNElzRzkwalRRRUg4VHZzd0lhNzFqRVpGSzdHcjlSblQxN3FNTVQ1aTFDSHg1Vk81Q3ZSWXhIYzloLzExMVVYcnV2R3JwZjlvd3pKaTFRMCt1Ui9uVHRSeTJ0M3crdWVWWG5uTUVvZVpwakFOV2RjZGZDMEhqRzVWTXpxMVJXQXpFTGRGVjNDYk1MTktseW8yNzMzdWxMQmlEejBMbE10aXBVVUNSU1U5YlhiMVlOblA3WDd6aVFnZ09OVXhuRk1pc3g2M1JiUGNLU3U4d1JLRTJ1akZBMXNlR3NjMkhvMDhsTmFRL0ZsUC9IRXN6Nm9JeHBOb3VhNUhmSXhrM0FuZ2Y4MkVIbVphQWpheHZPR0xRMFlDeFdVZ1ZsTVphZ3lFT2Fqck9ucDlieFRocEFxMXl6M21HLzBpaE9yOEpFRDBEeFhHMHNtMEc1SGhyN2VYTDF3YUs3a3gzYkg2L3ZhckJsZmRSVFBKNlJwNVlxL3pqcE9UYmhPVzJwQTlkS1dsZExHMUJOTS9mUHVuemN1VzlncUlxUWtnQWt6RlloSDFmV0Z6MTFJL01nUUtRUklpRTBUODJRU3VmdzlUSVhIZnRwbEkxWFlwUTJ6RitsUm9WanF1VHFycHV3MUlJQ1ZuV0trS0xFMHRoOWdqWTFEZ0JSd1AwdEFpcC9LamNBSmI2UG5lVUpoRUt1OEFFU2REd0dLUmhUbEV1K0wyMDNyZ0dUTlZoYys2Y2ZPeXlMRi9FVTd0b1J5bmdOYnpHOWlSQVBiNXp2d0tGMFhlY2pvTm51OEVsRlhRamc1R2hjb0Y3VVBMcElETzhxdXlGNEtGNG9uOGNHejVreHRhY0l5aWRZNnppbURhRlNLRTJoVFRhT2sxRmU2VDVGWEFmc2JOTGFaaDFodkRheWNBMTdCNjVTellHRC9FZ2w0aFVkWGlGdENla2VYTTBxN1ZROTNlUmIxY1VrVGcrSzZ1dEVRRUdaWnFRWWdKeTduK3ZYWElxbmhPVWNIa05CaFBGMDlXVndXVW83NVEyZ21uc0NobTB5Q1RWZVhpcC93bENzY1JRSE53RlhaWHdUcU1wckZFTnZrYUVoblJRYjJDbkpza3R1TXc0dkJuRFdFcm1UVWlQSm5HZk1EblYvbkdYakRwdnhTbDFSQ2h0VkJCOHA1YjhWUm9vOUtoSUtmZW8xQzFUWmFNd1lKTVhDTndoakRtaldYMkxCSVFpWGlsQVZWVFptdTEydVJtUlZJWm1JTDJib3RXUHJxWDIrbGQxRjVZdlk1OHRJZzBSaUNFUk1LendXOS9wYWlNK1hBamh4cS9WMVJ0dVlYZFNXTng0SzdxcWlvSE8zZGxDdGxkUGduTkpwY2lYSldrdGxHUEl5OXFjeUpCQUptVmRNMVV5aTYrdENKc0xSTUx6RWFuMlhabWxlN1RYT0dManhwb21uWURDYU44UHlLZ2VISVpxdGd3ZFIwMklXYVl3cXUvcVZTZWFXSFRtbXZMMVhodHFCT2FpaUd6b3dpTkhhT1RXR0d2T3g4YzJ1bmYvYlF0MlhRKzk5Zy84N3R3L0Nkc1Z5UFRDa3hEaVFrNkkzTGpJZlpaeGtvczh1cEk0NS93ZVNCTHNMOU45OUdNTHZ6UVZJUDlIQTVkdG9nQzg5M1BEZHB6VFpkSUFYbUtkSnBVUFBSYkFPM2o3WE9meVdwaVV5Qmc4clVLSTJNWjIvRXp0UVF4Qm5rVCtGZVBMREkva1dRcFBqd3B4dVlmMDk2Z0h6QWRvTFZqUE5PZHV0ZE9FSmxMSWdBQ3VlR2V4cThlQU0vK0J1OVFDWUdlU01BU0xLMUpFbVhndzZpOTlzVVJlZEkxUGFadmoxejgrNU5EcUsrejRISkhQNkwxWURScCtoR1crWTY4UHI4dlBzZXI4TkROTGZLcG9mcVl2SnRNVThGNFZURkppK0FocG9MdGQxT3N4aXJYWXQzMVpCbXRtL2UxWVNDVG9SbHE5UHJDV3RaMnI2L1FHcWFiNkNKYnErTThvRi9KK3MwQitIdkpYU1RSUm5YTEZ4c01WZUkyRWl6NFFFbDNaNnc2d2FuRVNUUmtYZ3RHNHhZN01MY0VoRno3Ky8zSnJtd2tNSmZpdHk2QkdIQmZiZ1d3SE1zWGpiaDR4T0ppcURyZ1EwaU5ubUlGcUZkRjd3SGUwSG92SGYwZ1ZPVVFTQWQrcTRxalZ0NzNQK2UrcDZ6bEdSVkpJM3M3MWU5aVpYZTZYc3ovckFGQ2F6L0V4ZHFQZWFhTVpGRHF3RDI1dTRKNmwwNzMzd1lXc3BFWHRpd0hrNjZ1MVZ6enpudFRORStRSDRPd1NhL1dkL0Q5dTh1WDVDanhyN2wvVTZna0haWHRmczVKL01KeXgrQjkxMnY2V05IMEdUeVRtL1VVcFRFVmFzVTdibC82YVRsWVlRQ1NrMm1kS0RIcytHdHpmdnVVcVlEL1BHOXdhSW4zMy9YTlBxWVJJM204eW9OTnhjMzh6enVnZVo3SkM2QVY1aTgzRkZadU1yaXdsYmxIQTZpeW92bjJqZ1VwYk13YVdINkJBenBIMm5UZFVOS2FDZUtLMEZxVG8reEMyWmtSTVdXb1Ntdk5mQjc2eHM0YTJqaW80djY0ZWN0NGUzVmdLdHNrcEV0OVkyNkFMWDQ3UWloN2ZyOWN3ayt2V3VQSFJaTlBxTERxVDZORXVCYzZ5VldjUm5HbTJtMVhtVSs0VUtrdnBvQ0syUlFKVmc1S2J3QVpMUGpSN3lucC9zN0Q2WGI1K1kwLytZS0tpZUtQaWVodlpDVjhFZzQ4TVM1aG1WN3pacEg2bjVJWWtnaGk3akNNUDZ4MlVqTnVCZWNkcDB1WGIvRnhxWDlMVDd3NElaY1l2OUhOZ1YrUVB0UEZyVXlQbUloQWZxZ0k2cHRvOEd5NnNWNnlKN2dBdHJtSlQyV2xMWlZ3a1hLTlo0a21reW1XNnZ4SGdPUFRUd3Jnd1AyME5RTmROVG4yeVFKWi9ibkhEcmNBMHoyREpLNW5LeENWWjF6RE9DcXVYWTZMZTFDTm0yYVJkWFJOZzZscTdJYkFwcmlldVJ6cGI0SzREdnRtZDBtR1R1RXpFcDF2c0p5TFliWDNjZWJaZ2NPNzdXSjB4QWtiT1FxOWVEbGhscWFEZ2pVSDhmRHl4aHUzVEZwa1JlQUtrbGNscEk4emlBalBGejRKTGpHcVF2cktnUDNOSW92SFhUeXAxcVgwZ2lYWTBWVWNFSncrdFB4VUc2UU9WKzhUYUdvRDVtTVJZYjdBQVMycWxPVUpYcFNKa3Z5Rm8rdXB5M2FqYktyaWI0b2xJaDJTZ2pNNVF0QnBwVUxaRGl1NUVsTmxGVktmajJOYVlDZG5aRG9IbStGaXN1Q1VpWE5CWERweXBFNHg0ZUlFMi93ZjdFNHY0N0krelZ3S2t1V0Y2TE81ZWFFWjRsU0dFU2QxbmRTSEh1RHdGcjVMVkkwVmdWbDRnaWRmcytueENqNzRBOXdrTjh3S3lDem03VnJWOHBtcU5WQTRlOVJ4V0VscU1jcTBGejM4YVpSdWtnbDZhOFY3dWZHT1FFbXZnMmp2YVhsSStqRkNjYzNUOTdxM21yYUwybUNJWFY0LzAxL1hpbStuNkl5YW9kd3lNbXZ5b1NUTGZrRGliOGpMT3krbE5oZk05amoxUnVLd1pUWVJMa2Y0bXJlN2dRbkpOVUpvekN2bzRveTN1bmtRYVYwUUtrb20vSXJ5ejhBRVc5MXc3NFFjeVVkbEpFWnNnVk1PZGtnK1luV1hEUjJEQWpaM0RsS09tbDk3c1pLVjhKMlgrTXI5TWdZYzNFcjBRTHllZm9tbHhiKythL1hZblZVcFdBMGxrQmVEK1hDeUdmaWlGSjdoK2xKRkdnQ0IzaXFmUlAyQ09IZ05XOE5XRHAzU2QrTXpBRHk0WWZrcmp2YXpaT1JlU1VIRlY1L3JwVlpYL0ltN3hkQ2hMNlRwRkFhNTh5eDl2VTVHWVBpZ2JHMitXbFNQOHJySzZEYWMxNU1mRVhzVW5rWTViS0s3SjVQalhUMm9uY3VOdXkxUy91VG4wa3hwVUpRaUsvSzVxM2lMa3ordEVoUXNRVThDekg1UFBncFQ1aE95aTl4RnRaSjVMWTZrelJCOWNlWWV0aGRUeXV3eHdqZHdaVEQ4Y29tcEo0SU0zSXdQL1hMWUFRYUk4KzRiNlNGRWFka0ltZEtlQkhuSERmelRiWHQrM2xtR2dZUHkxZmh5L3d1YTlGTG5VTmJVNkxaK3o0OTllZ21HRDFNUUtaS1NERjhCVi8ydDYyZ1I5bG9tbEFPZ3htV2FhQWxxYXhmNlZXY1g0R3prM0ltbjNTd21LYjJpYnM5NTRzZzl3NmpNQVlBNjJpMlh0VUEzREU4YUJNQnBVdDBIQmQ1Zk5jV0Y1L3FSQWRyODVqSlVYWEJsRkROenN4YkFOcUdwajk1QjZWUncrSnlYeGw2WlNScnZ2dnNwNGsxMlpaRkNEMmFJRklsOXBvSFUra0Q2UGJMVk9FZE5xMTlmdGtRVCswUHRqbHlZVmF2TkhEOXhvVlBzcHc1NkJPNGI3M2sybGtuOEg0VHR6enJzYmROVDNudlY0bkpkQmhBaEhoQXZkQXJKemdwS3hEdjhPV0pnL0dnOW1sbytuUC9ENHY2Mmw1Z3NFYTBEV012OVVGMXVHMW8reGNRQzJIcTJXb1dGdUUvd3FUNjU2eG5kQlpWbEdsUmp0UnRoRUd1aTcxVG5HalEvZ2tZUWdwSXNmYmFuam5MdnBHeXpJczhzR1huVDdkSEZrbVMwN0hqM2F5UFUySFV6cklHSFBxczVsOXFxcHpzMlluU000YXJObGdoR0VsNXhicC9KY0N1cTNRSk1KNUxnazFpYjRNbUhiMytEWEtjWTlsNFZQaElKSGVEZjZWdVJwNUNIWk9qTVpmRW9qVm01aElBOHdYT1JYMWtqOEl5VHc2VkxJVXFtQ0hIQ1FKSFNYK2hkSUo5WkZCMEtZbWtwOHBob1FIak5MQlNYWW9lczlFeXJnUnNhdkxyU00ySlRRMHp3cVF4RFNXZW9OMUVicm81MDZIdDgzbEdjd2U5UDBvaDdTTUFHdUJsVEpsMWFuNXRDbnZpcVNMeXBqWjFyOWx0aVU1SjBVNFpRYlc0WCtGZ3RzMitiUTVUNVJ3RHdKRlA5eWNpbUFwNFFnQ3I2czBJRlkvZ1dSM2NYNTRISlN0eS9lUzB0blFGMXFJc1NiQ0UzeWlCMU9rbkcvODJiTDhTWTlyREZnUm5MM3gwdjlvT094NXRwS0N2SWxXaERkN25RaWx5OTF1YzhYQ0dpS1Y3Sk5OMm85ekhWK1BnL1J4bzl3S0wydVdCM212VE80dTQ4RmZjNmtKV3grcGlXRnczdWJ3dHhvTnNwYVlQSVB5Z3hCc29YVTE3SkZwMjRVMUw3M3Exc05uaG9wc3JMT1o4RTNEdUd2MTNwWlRBdFY0ck5lRi94dlJnV1ArMGF5Sy9wR0NPSDVFSmN4ZHZueFZkZVVINUc1ZHQyb0hvbkpYMlVKT3BRVzBibFFPUmVPV1lCSzR1bnIrQW84dkRhMityZU5kT3dHMmtZNytRczNyb20rY1pUUy9zZ0RRTjBTWE5waE9kSVo0WUh6ajlxTHRXUmV0WGQ5eHpzaVB6dWgzTmN2ejUxTVJRc2d3TEFZS0xpYWlVRDlFOG9jZ0tQTFJUYUpBTTBWQmlOVEs5SDlZODE0NkE3Z3JCUjZWYUpJZUt3dXp0dmtzbG5oVWJvUjE3NnB0aWZNOU1UWkhYdDZQSWxhbG4ybStnS0h4RXAzdkZJS3BBallPNmthVG82dDNmYkIwVFBrUWduMEhSWFlDR01YSk9aOVV3dTM0UVdqWVNnS0pGMlRURzZHSW94ZjhFRlBFbDNoQ1c2aFoxM3hCalRkZnlrM3JXR0NQMVp6QXBzNUJCaHg2aEkyblZSNnZSU1gvdURDR1lHczJhU3J1OEVrVVYzMEhMMm92bFBNV3VZWHJkNWFQdjRKdEFvNmlFMVNRR0lQdjZLdjBEeFNZWVZvWENIWjNnRkQwTUhxZngxVDBHK25JN2kvWkdhUWdSNGpxMlhrc096SXgrWXF1akZMNWkxTnZVeDU0bExLSmNWdGxyZlNkT3U2c2hZdVBWMTZnN1hrZ0ExaFN0ZSs5UTEyS2xqSXgxVGllYlZ0YnJ0TVlFOGl5WVBDQjMvUzBXWjN1WGJsVVA4N0VEYktuVmRpNmxYd3ZTbHZoa000SlBEL1RTNlh2VHBmODZ1dWkxaWNSZnhHaU9id0dmQWhzakhieWpQUk5Xek1QZFU4dXppM1ZkM29aOE5vL0hJRmpad2dWVHhrNm5CaGw4anUrQVg3VVduRFptZldmZFpyUXkybXFrOTdKSDdtVkxESVEwam9sYXhTMHB2TGxpWGJCSC9VQi81TUlPOUYzaWdhamZFVnZNaGh0R21BUGcyUStsQXJ2MzlDbGJGSnNMSmxwK3oyMVU0LzdFeFZYMFlVSndiNjFmYTBURDFqYnZlNExNTGpydlZJMUhLVmEzaFBacktmNHNpanlDL0YrWnhPaDFRR0NEZXVaQmRnaXNZd1FlTzNTdkszSnFjNU9ibDRQVWR0TDQxTVVTc25iTkRqTVhjd0xydStxQkxXMUdUYXNIdUF3Zm5KQlZkd3pseXhyejlHbHBTLzZUdVdxQkxuUkdWNVByOWJZa2hvUUdyaEpXUVlySW9sMDlpL2FVNmpoWkVic0hWT1NicjJ1M0ZzcUlVU29HaVdMOUMwL1FMUmhwTFpGTGZVUWErT3E5V3VLY0ZSUkRnMkdBUGlxU25Pd3IrcExtaEl0a3dRdW5rS3VYUGppeHlJdDl2dmlMbGJtdFhBWkNCTGFuNFFwR0hISjFXLzFlZWFlZTFCZzFEVGtiR09rL0dnSFJsWG4zMUU3S2R6bUQxQVV4SmR6bWh2R29IYUJpUEo2U1RSM0xodEpydTgzL0pYWDBJTFlXOUxUWmY1dERCd05VUUhYVjJqZXB1RTFDZHBFRm9jRm9QTUhleEVQaGJLc3hOWVA1RmtDM24zK0hLa211YVdMU01XeTZhSnA0YkFRWlBsRCtUSVlHM2N2aDVHWndjeVR3UzhmSnpHbGZDVFhmcklDU1BIa3NuQm1qZ1V2MVFjaGc0OGR5cFhKR0NLYmI4am9SOTA3RHVaazAvWkFiSzIyQ0dtczhjZWFwdzlsdDcwUjREQTN5UnlJSkU1N2ErQWhRM0J2ZFlTN01jL1d0aGsrNlA2dDJhU2U1Wi8wcjd4RG04dnZUUXA5UVFTNFRGWXdSNnFOY2ZydllRQjRhSGc1Vk9DVXAvSWdwWjFVVkhxcEpLc1NPSEZyVThrV01rVUwyYVJPQkhXcjZkWGpYZlQ0RWQ1b0RWTXkrS2Uvek04ZS9udE9WdEFaUmJNR2dGRG9ONUkwWkZxQ21mdEx1MFdRcytuOWxjQnRrUjh6NFBaUU92NVp4OFBPR3RTanhxb29ydGFsOWpsMjEwaVFUNWpzOE1YVGVQeGRhMi94Yk92d1ZPYjFyTkRKWDhHOVNMTldFeTd1c0NuZlJVSFlDeVo4WlBVc3dBc05IeEYveEZ2ZTJ4dGRYWUxtRmJNVUZVRytsUlZjLzBhandaMHIzTTFVZlZqSzRWQXZOY1IvejBTdGZKMXFzTWRaZzd6ZS8zVjJlTjBlNGtZL3RKNnFjZ2IyeENYNUNZOXZYOVJHNERVV0REaDVIcmhQanFadW1xdXgra2JCcGU3TUtwSkkzMzErWXZKTEkwcXlaTC9MUVpZYzhERXUydmNidmlIVUFyTUQ5cnl5QUtXaHp6MFJDek1tOUkvWEhMZTdLdUVNbkVzUFF0c252SXNJZ0EwR3ZXU25ZYXA0YldCZDlzU01Cb1Q4UjhTdCs1S25VSUFkZzQ2NlplbnovV1cwSmNiQWUwWXRHY3ZlaXVGblpQQmtmWDZTcWp0UU9haXplcDh3cDF0c2t5NThZQjVJb3JlaWVDNU9rcEcra0d4UkdIT2s3bHlmZXBDRkNQNkltS0I1WG5qcThPUXBHWk1kaHFVaXZIWEs4Y2pFc0JqK013Mm9vR2l4YlZXM2srSURiQzRjVXJCMDdrdy9OZUVNMnc1YWIrK2k3emloMTFIQklvUXUzck44OU5NRlJkc1JDM3RQd1ZUWEd6cHVJQ1VYZHRTZ1lUcnFGaEhMVU1aY2tuazNnRXNUaEhYeHhFdHhLekR1eWt4TEZFTFY3OXRpam45Q2s3eTF3RGwyQS9mNVBSYTBRYmV0THNqczBoVWVhdW9qQ20zR1VTUDVPUlNtQnRzakV6SE1UbkIxRTMyMys4THdLTXJVSVFGOEFHWkcvZjJUTWZ0WHVOazlNRHdhenpBNytJWkh6bkg0U0xVQSt0Rjd3cGtDc1B0SmpxTkE5Wi9xZkJ3VDdsQUpldC8vV0F3TXgrYWM3UjNwT0JVUG9YZlZsNFhQK1VjU3pFdWNva1BSUGFldm9WdnptS3JBSVhVdXRtbW1GNFFuVmhhUVhIaWVLcWJGVjlWL0RaZUJvbUxOaGtscHdRK0djbzBuR2E3WWQyTE4yem9tN2pYVUpoOTZBZFQ2OTlYenFtSFNFZEJQbG5CQkZjbVhkU1pHN25DUG53UzJlMURvaXR5eXJ2MVI1QkF1RFBOdDIrNFVhRlJPK3lhc1FtTTQ3WmxJRVl5eHZTbVRDZFlNMW05WHJ0U09nQWhBQzBIWE5yeWlwUjdrdkk4SVp5dE12bmltaG43eVhUaWN0UER1eEdZTDJBYndsV1I5TC9nQ09BQ3dXNDlndWQzbWJzcDlITHZDOXk5b0o3NFhHOGZLZExtT1Yyc2NjTlI5L2F0Q2FUb2piZFpmd2VCY2pYbXk0V25Rcjl0RlR5K3l0TU5Ralo2RFl2clkySVFJWDY2c0RyN3FDRHFwMVdXd25tSVprUGMyNjBlNHhpUmlodkhjUldVd0NrTTRvRy9sb3p1U0xRV0U3c0VPOEZhTnVCa25ZNWtuWFBCMzlkLzFKY0UrdVNIWERxSElrd3p0eDVqbDliaDBZZzl0OS9ySUwyWSt1ZzRQelhxWmFCWEhROWF4M2dmZkFpWTMwWjkyY1lVN1N3L3p4ZXhhWWVLQ1JTUmVwQ0Y3UDc5WWRDYlhDbWZoN2FvMXFLUFdNZEhmSEoyc0hkVUswTVhsRXJCQ1E4T1d0WUxScThYSG5vUTV1NURNRlhyZ0habzduTjNXdG9MV01UZTRETHlhRjVISGZqT2plakF2R1JTZ29BeVFMUmNtN3dPeTA5V2NBblV0QUZUbGhENUdldVh6ZXYxL3UwNjB2NitTakNBK3JlZ2pQaWl5SDlVSTNtSnViYnc1eFhYR2FwM3YrUHlKOCtYSlVMWFlHTU02dCtPdUdwZ3FpQUFPOXJMQ3pYTXBlVnhDMzdLSlZsaFlMNlhrYmFQWWhVMWEwS2YrZHRoNXl5VlJ0bEJGa0ovNXJVOWV3YXlzczVQc3pReXV3VXRCYkloeXBibVpFaVNrRDRiTkJDSEpnZmtHTDVUNmdmNERKaVA5ZUxqL1cxUmFhQlZFa1RBcEpMa1YzaHBpeFpLZlhWZGNlT0pFVFFwUzlSOUY5bzdaak0rVy9mSmE3d0Z0eVRmMEMvSi8xOC9JTTlZWnlwaDJqRFZEelhjYlJOTS9PWk5JaGZGT21uTHNoTVlBeEpZTEN2Rk03akt0SStrTmNBZTBsOVBlZCtScHBiSUFmQkZXeGd1a2FTTExTOEVybmdGeUwyYTFSaG41TTdDMlRMQjY3Um4rNEswcEY2cEtRdjNVNk51eGF0NHNWZGFiUXhWeGFub2VpY1Z5Zk5SNFBKYTZLc25VZTErdVBjMVYvOGJwY3EwMlRiZEh6WWJwekJIaUtjOUQ3ald3eDVBVk56eUp0WXNpK1BOZWFyL2Q5dUEyaDVWMS9mc2JROWtTZFBjTjdIdlNrNnFhWFJWTk4rbjZwVVpwbFozR1hUUkZyTXpUYUh6K0lhcW1wdGtNN2FmZlZzZXRBVlNkWXRPV3V5d1o5ZG02bkg5N3FucTV3TXE5OGUzWG1LTml0SUowTHJWK1c4TG52QzE0K3hkZGdEZGJGM2s4TjJoVEx0eXcwZTFlc1JGZjRrblBuSXBtSFV1bTNNc1FlNzZVei9EeDlUWTdWdnFBVXJQbTlyUTFrT0VlZDNrQUdjUTJpcUhsTUgzdmdDK2hqU2dWUkExZFpXU2d1SkFxQkpGZU1GNXVuZzlZSU5WVFhSK1c5OGFLWVdWRUxGay9HT0QybDJXZk9IVSthZzdGeTVDS1N0ZXF0NFc4Qlczb0NhK2FmOW5wdWpCMlZYYlQ4NUFwQmZYVm0zNU5MYVYyMzVmRVVGbVF4cWZha3dadFQ2R3cxL0JQLytGdVdaSWg2RGhMUDh6ZU43NkVDVmM4Mys0cnJveVBPN28ySlJvUmoxcXpqUXdPT25sVmg5QVBwTzc2TnRKNlQwQjZiMEdZY2E4K0NMWnQ0aUp6QXJUNmk3dTV6bmFtL3RxeTI1TXhIMkQ5Y0JrMU9FUFlGQVB5d3dMMmsxUDZQSy8rbHBFeDFOSHF3Q0R5MHFjQWNUWUpZZGQ2OG5DNk1KY0IrT2Rtblo3QnAwK1FZSHh6MHBGZlFhM3RHUWx1cS9HSGFldlpBd1RpMCtMYVh5NEtNTHBGZkRPbjN2TVRWbFZ1YTJHQklYSHJjcnVnSyt6MmFROHlCRWFuRzRXOVYvMjU5WUVuR0E5UnNvdUZTK3FBQkpsRlJ6YUQxZEJEaklXZkVWMXR6QTZBZjA1Q0N2ZHlMSTd5eXM4RFlGY01rbis0NHNaL09ISFE2c0hpUHI1UlNweDRtUkkwemNyQmRlYkIwemNIWVlnOVVsb2JyM0g3d2F3UlVXdk80NEF4U0JlSTQ2djlWaFBIcDQ1eExLR3BzZGszb1pPWHhFSW9OVmVYRlJIU3BzLzhaSS9jb3l4Rk1xeG9HVXRqL29PeURzRVMvT2JyWTBuSE9LUGVpVGlWa1NvN2RvZ0lxQkJ2WktLcXdjL3hUaEtHVU41WEJKY0FCdlVuS1pHWWxRNnN6VHJVVGV3cnFrcSt1S2tNbllXRFhDSCtEa0JlYVpLcmduTGMxd284dXAvUXRSVVZjUVZnS0xMNGV1elZSdGRXTmM5OEpPTDJiOHhKaHB2MXc1TDYzN2FTaExYRkFmSWVOQVdsTW1EUnUxczAzaXRnOUVaekhsck5PazcvamFPRHNjNlFWc0xWODNNeURnVzIrSHBUNkRSTUNKMy9odVJUVG82c3cxV3RhMU9LL0RvMlo1VDBncHRIeFlyem4xSHJ2S014Y1BTNVZCUVNKS0NXT2dxNmg0aDJYTC9aZjc1VFQ4SFg3SU10Y2V0b2s0SlFDWHBwUVlqelpnMDZZTEZYSXVVM05KMnlSQ2U5cHZuZ24vd0NyWVhIa25wcmpjY3JmY0ErYU1PV3EwVnhHa1RrcytLak0rdEwwcUtaUUEvVkdsN1dRbFV5Mk1UajYrQlJEdkNiaUE4MG5xRFJxMmhsVWw4azM3V055K084UHd5QjcwLzZyd25GMFN3dW9HTWxPYWFqbHlucTRSbXliWWNMNDZTb284NGY2a1NoOHpnNW9ZV21iSEZpQU5Ud0dxUW9Ja1VVeUxBZkMzQmNZcm10cFdXSnBUSmFEWUFLbnhLRk1icW1qaXNpL0dod1VvKysyczJNeXYvR1ErVlowa25uc3ZvQWdDZjhtaDZ4cDkxbHI2M2h5RFhhN2Y0VUROSytGaWFYSjJQWDR4VmRmS0tLa08xd09pS0hKeHFFZ2pjSlJMenpaSDI2Nmg0b0NoejhhenlBejUzQ29uQzlRWlNBMWhzbEZYY2p1QWdYRDRPRUxoT3IrWFZCalBhQ092djRueDRtQnVtcFYrZ0RXYlFuMlRLZnlmWWQ1QTFOclcxbEFpMnczT2dEblJyMXBnZ0VqZHZ2WkhqL3EzT040emF5MU4vVXdNallVVng1eTNHZ1J5VWdvMnhXdDJsMDNyTDBYc2dWL3BhZmZ1bjg1M1ZsREZMVjBoeXZGVGUvVGp1ZFM0aHJRL0pVaDJPKzZZK2xzclk4VFUzVlJ6WlErLzg3bWF3UDBMUVpEZ3RSSE5pK3BvejlwM0dnYy9jN1htdkxBVUJlYXVMOTFHWlR4bE0vTUpqN1hmRWZhYlhWeXNTSnBMNUQ5c1NzM1NuM1RDck1qWHV0a05na0FOMVlBMThYV0FDTjlHc28vTTNnZlR1NVdBaC9uWklkRSsydGxKTEVoVFZCRVk0TEtKb0wzQ3hxbThvWlRTZUt0Wi9EK2F4K05YV044VEpGZzJFc1NMa3pDRGhQcEhjaDl1RHpJVFNaWVhWZGVCajZjRloxTnQvUmJFcXZFeUhuSFhPSTd0RkdhbFlTVVRQQ1hjVUg3aTJlUW9oeWxERnFiU0FKWjBGdmE1eFk2Z3NLUzNNMmFXbFR4NldUeU5tZDAxeEFTSUw1Snc1ZDRCSHloNDZwZXgxaklXQis2b21qMjdDdG90bXZxMCsvbVltRno5RU13UWVZd1h4cm5jMCtWdzRsTWNXSDBtVTFXQTUrck5Hc2M3MStkTkcxd0k5Smxqd3VhaEZXU05ZdWVDWFlXdFUxTG85cThmbTY4RS9vQWJxMHY3N0xKN0RZb2tRWWp4RTAvZ2dQZ200K2haOXduMHBMLzRkR3V4VS9pdGwwY0k0SlNBUTQ4TUZ0c1pKYmxKN0NrbEhqQXBqUzU4QWJBajJYS1Y4VWN2QmFaV0Qwc3Y4SGZSaXFYMjNDTWNMNU1GSkM4RVIwWm5CVHo3VnJiVFE3K3IvVHBDNFhycHJEeHY4clF1alpZQVJNWDhFcWsyaXhpZTI5TW41UnFBbTk5R0VycEJ6NGptL1Z2a3UwU09xa29NU2IwVFN5M1hPdlVFZ3p6ZmE1VXBydmloeUFMWnh6Z2RFeHF1d2xRYzY1NEJFaXYyRlNSZGJwT1ZQc1J0dGtnMlFxYVRSb254Wm5aNy9naGJYS3JtMVVYVHA4R2FWR3Evc0M0clc5TllHMWt3bHZIMlMzaXlRKzc1bkp3SGgvd2xhVE5PRmFOMWZLMEFnd1VYQUtnUkR3dzFGbDRabmdCaHVGZ1dKa2NSUHRiazQ0T0xhNlBFZThlMHhQSE5SUlJSYWVSTndlRm94ajNVSG5Vbnd6YzB5WHNKVTI0ZWxxU2lhVjJta1l6RlJqbGFPZ1ExUDF2eGQ2M2QzMW1WbTRTVkI1ZWlHTEUxZ1B6MzBhRldGbXR0VFdHR2orSHRoM0NDNUFIbWt2RE9FeWRRbjNscm9HMUdKZ2MwZjVzbnYwSHNSU2J1RVhjVHRYbnJNSlpPb1JBdWxOeGFTWVhPY0JRRDNSeHB2L1V1MUE4YlM4YUlCTVZjcklEamo3dERoM3YwQ2lQSVFEL2ZUN1hTelpnZzI5NjZJRXNJZVBNdTBSWVdmaUhuaFB1SWk0MTA4MTdnc3A2YVAvc2pmZi9YRlJ6Q3kxdzQzVEt0ZEg3VjNOS2R5V3hSS3JtakxKNHhvRm1nY290SlVJYkV2dytCamxwNzREL1dSVGl5eFlMeUlmRnZiT0djV09yeFF5TFcyT3NsYTZFeE1nL210eXVQeHd4NGwzSXh4a1dSUmltbHdnZzlHa2hhV3NzdHFyR1paQzVGa0ZDM0d6ODFVKzlPN3Yvelo0YUNJTTdUaUNHMlFxdFJwWWpZdklqMXg5Y2V0ejg5TXY0SkNKRFNCeU1rRUZ1azQ2VkwreWNMbEd1WGhwbXhxb0ZjU0NqV0p0RW5BS2RXV09nWVhienJTUFVPZ1pnd3FTZnVNQ0RJTjljQ0dKc2pnc3dpSlhNaHdTUWFYbGV0KzBVM0RnY2JQbjZodkM2YnZEVXdqRFpsYzBnTVVuSFp2RXN0SXBXTFhJLzMzbENQckpzQ3pra2twcy81OThIb3dMdUttMkVRSlFXQlYvU2FhZDlyRVR1NEVkbEtZd040UTE2aW1PRkdHYVlvcjBicExxeTZ4RVBEUytKZndMaHdaakJPbTdwaWlMazVhT1JYcU9pazVuTlJVa2VuNVFhSnEwckozQlRrRUIvd0JxREhyY2N2VHpCekx0RkpsUzZUTm9VZlZJTmdVc2tUNlNoMkh4U1p1TzM0aXhtb3kvelpibmJCSzdVbmhsKzY5UnlPeEwrOWJBZ3NpNE84ZUtpc3FmclBwejBIR09oTzdYTWNSaUNHL2M0OVoxbXdrRzRpcDc1NmIvd3VLd2wrUk9pdXVsS2UwQWlFQjRXWHo4SlR4Rng1QzhRV1NkM25yMUI4Qzc2QXhnK3NQSjNEQUpEL1ZFblJIWmlsQVVHb3BKYjN0b1RucGhUUEdNdnpaQ0Y4bDRYZlVtZFo2bkh2TGtDV29hdWsxd1RpNDhrQUNnRUxyMjVnN2xtWmJJZTYzWHdjb0tQek9mbzZrakhnd1IrWFEvc0FmNTNzL1ZwQ25TaXNlWFB2WGdteW1ETkNRa3ZNZitCQlhRaWVFc1JRaHExYXAwWmRmVml1bEpYTjdTWTB3NEJkUDVyNFlxc25LWjRVcEFRV1pUNzlOYVVwbTh6eTBQeE12UlpBeGJMMCtvVlJWSzZlWElEaldnRmlkTHgvS2ZiQ0ZHdSthYmcxa0ZVd3AvMVd4V3VKcEttalpqK0VnTTZCMVExdFN3c0tMaWpaWXRHejZ3VU1nWHZPOWE4VFNsZTRVWkxuY0xVTDNnZHUrMDlGeDRjT05QWTZISENpUHBHV1BkSnpCWUVDTUlFUEp1dTdRVUYwMStzUThZRHZYV0NPekxvZHZwRm55dXlCeVJ2a0JrT3F2VGFSbWZhVnBzSng4cFBacWlMS0dqa2c4MFdpN3FaRmJJYVJKRHRlcVN5dFJYeDc3bFg4dVRMc0ptU0ZoOTl3TjVyL1lyQWJIcDRmVDF2bzJZSEdzZnFkSkwycXE3cGMvaHZBQjJNaXRncHBhWDZ6NmVIb0NiQlFMS0VHeEtiaVVtVElyaEF3cmxTZ2ZUeDFYbWVXUEV3b1E5WVNDT2xSeVFkZUtSMTUxQ29PdkVuV05CQmNxdVJURU5zQXFUQWxHUjNLeEE4ZjhIVEkrYld0MytEY0VHcWdrampRdDZOT1YxcDhzWG5FVWpGU254S2pMaFJLbUJpeEtvaHk5NVF6Z0c0eGJjVlJhOFpsUm9NUkc5NVpKOEdZak4vVmtyR0lRMEgwM2hBWXk2ZUd4ZEVQWFpWYTAxc014b3g3dUhjNkFDQm41eTdIbTRCZklkcW9NSzdqNTZ5RUVOVlUrVmFtakN2NEtxRlArWlk2TlhaUThGVVZaOHpSaUdoQU1TaWRJbDN2R0YvUW0rcHhTbkVsS3lyY0hCU1hESHJXeXFSUjA5dFBzQ0hXOFkrZ29HQUtrSU8xbzgyVXpmYmNlR3h6M0JTZzhPQjhtdzlqT2JqZE9mNW1lVEhqYjhUNFhyMmNyYUZBZE5qcHBNaWNzamlSVXRjendPaVdKbzVMWkRCYXpCV1FBUjk5T1V0eXhldmVDVDh5YmlwVlBMeWFaNTE5akV6bU1PRGdzUFZ2U3hpbDBJQnVmUGhIc2VMMHNvNEpRZk1mTWNnNjVOYWdPdVNhNlBMMSswQndWQUNrR1BnRlZBa2l4NlZNajJVMXBGYjRBMFpmQ1FMRlV6MkhZSFRsM2o2N0hMazQzV1pTT29WL0x1b1UvRVJRUk5yNjdNWC92SEE0M29uOWVlUzNMbnFURjZWTkFKU25xYXZteW9JV3c2WXZwYkpkYXhNYlVVUmhpOG5mMHVOaU0yT3NXODk0UUdqdm1sK0twcGI1VXJLeS9VYnJTOGRtN2ZYQUNGK0FiZTBzanZTSGNsMC9WWHUwbmsxWTZ4RmpTeTdRSi8yaW1wdExxZDdRMjJjK2VQZXJ1VURkc3Q5eXBQWVQwbnFiK0tZcHRxQi9pNDBITU9mR05Jd1ZDcUdiaDV6ekEvVzBjMllJcmV5empMV3dwNndPSVNId083MFBQNjRBNkFNd3U3NE9GNTlud0RzSmJaeXpPcitmcFJ4ekE3Y2s1Tys4OTBaYmV0TEk3OEY5V0hmYnN6TWl3M2JsTUhSdUlyWE1MYjJPeHFvQmxlYUJta0RkZ2doMjE4SU96cFUxY1E3Ni9MTjJDRW1oRlNtbTZPUlNib28yWkk2cGt3a1lXUjdXNElQNzcyTklEcW5XZXBhSjRRY01obUdyY2Y0ZzRZc1JwRnVwdnAwUzUzS1BUWmQ4TnNRdUloOU1XV2VFMXlwRXpMRVVPbzBPU1I5WjJtY2NWVjEwOHRxS2lkQjdHVUdRRW1iR1ZMdTV0RGJJQUszZWVJUktOd2RyajVQUEtvdlhqUThWWmZ2ZWNSRUtoMHBXZ3lqT2xlcXRkYlRVLzc4UnVlOFU3bm9xckRoWXZwbUlEeldzT0FiTklPQk0zN1I5T3lJYXg4K0t5d2FEOWRCeXRlc3VyaXJXS2lzQ01zQ3dHOTBwYXBVQm8yV2V6TFB4WFFkbW1lZnNuUHIwMjhBcWdVdVRSUFpURjZQdzducWZJazZSSmVPZktLMmpCVCtITVh0WVp6NmJxSE92UWhZVjBSQmFENDVZQUo0QTZwWEMwSXJuazRha2FncDFOR1NNYjlkcEkyUHZDSFRENDhzSnYxK2NpTlAydlFpVkdtN0gvZ0NCOUIxdzg5MFRXMWFXM0ZhS1NjTTlac3lRdnFmYlhYemZQUFlqcGJiYUwrdUJWS2N2ZkhGUmhWbW1EVHkzQ2tzQ2U5dEY5MDdtNHEwWjBTa0dsVm5sb0RvV0NZWFZ6VUdWbTZuWS84M1BsbkM1OWRzbGlxSklsQndFTUw4bmlJUm1CbFJiQXpUd1J6L0hwU2I0Qmtsa28zd2lnam5hc0srUWVLbGhlU2J0WW1lMFFBNFZJV2FIVkhMbWZnd1cxVk16WWIvMHRiSDFFZSsrZ0JtRHVrV0xsRWM5OGVXMmlPR0xhSkQ4L0NNNWl3N0RoZmFvZEVLNFM2MEt5Yk9yTzltMTc3T2RkYXgwQ0ozVDJsb3Frcm9tQmdXcGsvYXQwSmlTVldDK1pCK0ExdGVRYU5OL2tic2FQS2cxRE5SZFBNNEN6Mmlma2xmcjR1elpmTVRWZC9MWGNYSUxqSis4ZXNuL0xtSjNhaGY5alRJcWthSE5ISXBkeWZrN3JEZTdZcFAzR0dOUE9aSkRvQjFZb2lWckhOUmdka3UzY3NXamtyaVFGSUNJaGZzT1M1WkwzZ3VkcmZjMXhDc2pBTW0zczh5L0EwTk9BZ1JCZFpaMmVLeFJ6WUVBUVpOeUlMbzR4NjRvd0ZwRTNrcWNWY09XWFVuTHZDRXZFZlVNTEg0UitNcXZMc2FMVXcwa3docTNDUjBsQm0rK2hIVkdJVTQzbE42d0lZMFR5VkQrdzhGQ0drVVkzV01LN0tUU2t3eGNmSFBZeWlEN1RQNUswUzZHUTF4L0VSZFo5a29vLzRPMDFNZTdCV2tqaFMxWjYzUVBHbHI5dlY5WHVPNFpqcVZJRWJBaEZFVFdJWGRoa3JyWG5BdmRlVmp1R1VhOEozZHcvb0ppeGVUc0szeGpQeXYzRzFlK1NDV2Y4YytKRjY4KzB0VlY4TWhyTVU1bGc2SGFXKzlPSjJOZTFieGpFb1lPamdqamFVM1dUdElvQW1SR2lDUTdhZ1RFRHNtUzVrUGdjdVAwcnlWak4rK2t1SVpCYlgzUXRybVBvYTlUcGkxcmpNbVorNUtBNU9ZYUcrY1NES1NRQ2gwNjZIbzNXSkpZM05XRjZ5NElSS29nWmJkanRwOE9nYmVURUtDaVlGcU9jRDJtTWxyTXp2cTcwUFZqUklKc1BXYmc0dnpPeU9nRWJGaWFTSFpIaCsxWmlrTVFONko4Mm95N3BFczVjR1FodEhCSHRjOXVNWWQ1c2FWbS9mdUl3RFg5L01OSUd6LzNrcGxiMmc1V2p0T2JSWXo4TG13RFFVMjFhaFh4V0k4b2Q2OUo4MjFnMmw4SmRtWERiaEtlN1lqOUprWHdYV0hNdGxHWTFueE91WjdpaGFlWUlYbHRNd0hPMHljZi9WTlRZcytzNmREMFRteXVURC8wckRJRHJoWFBHRHNxUTk0U09ENUREMngzNUJlaE9LUk9JbVg0QjR2MEQwVDQ2WDVSWHZGNGUxSjNtRHlaMnVVcWhKVkFFY05zeW5mOG82M2F6bWJkVlN6L3RZcUZHdDhDMFVRT2tlTTV0SWJEb0p5TmpHR1FjR05LMWRBZTZWekk3R2sxRnplVjhydnc1VkJtVXFhUHpXNkxKRHhLRjR6WjRKZ3JoaExqZ2RjTmhyTEhYRjVBWXVzcTg5QTdMTzNyZlc0V3RpM3Y4TkM5a0pkTWVUSXZnNEtJamtCM2Y3TjQ1ODNtV25oNXRoOFhzZmhGWHA1OG1ObWJXc3pLZTB3cG9hd3pmYnhZMnl1S21oUkFEU1VPVGUxdENZUzNqWUVQbDZ4Z0VjZUplTUx0OHY2dTVvRnhodVBWR3NpZ0FySGxhUlhoYWFsczM3cVU2cFRhMWRrOVBIOXV5eERKUlM1djFCd2Vncmp0bGMyM2hGSS8rRnppY05iUEtFWVFoMDljaDd4SDhvcW1xc3VEWTVTczRtNTVpeE16MVFKeTRYN1FKZVlDcFU2TktxS0NMcDh4YUd2UlM5SzZYdUpYUExrWVFrbnhzV2xqV3E0VVRvKzNYcXFpQ1laNFNCcFBQT1MzRkVPV3o3Vk5rR21mbkRFNWhiTjUzTlJON2s2bDNIZW02NUVsSjNxcjhuSWNJQUtLbElPV0RUWnJxS21ZV3BxL1NEVk53OU1xT0NIV3cyTHFtcVZPelBoV1RmaHZYV2p3WjltN3VMUjdGOE1PSzRnOEdqU2ZxVUc1VVlqM3hiMGtuZEVXTGNjQ3pCZGIzTmRHektONkhRTUhTRFROSmRiRzZILzd4UFFsbGcvaUNNVVZJUFBTcGp2aHJSVzYyWVFSdU9Pd2c0Q3p5M0Y2d0U3L3B2MEZXTFM4QWJsSGVZckNEQnMzWmRYNVRGek15ajJjRCtwbHBGak9EdENLY3MvVDg5TFlQT0tHeWF1VVMyS3hMK09MbGl2VDRNeUVRYk0rcFJMSXF4K1g0dlhBT2N1MnJReWllVmcvendIOFRIRlBZZEVzL1A3djQ5MkVqdGU4KzIzd1lMdzM3Nm50MUdrYkZNdVlBbzVkSmVaSmZZbHpEL3ZlZGhiaUJRNno4SG93ZFFVYWxaUUxYSkdZd3RocjZJZGNmYURZZmc3WGxROURuQU9BRysyUlF6YW5JVHJYYUw3dDFRTkJNN1U4aW5GcTlZeGFRT3lzRUYyN2tjTnByVzBreTk3Zys2ckszUTI4OFMzZzRSU3pZejZMNVRvZjFFQmsxYXZwdGM2emJQUHJ0S1BPQmxpQzZiTDEreGt1TVl0TFFDWFhsVDdubUdJWDNSZ3gzQkFxWnNRR1dSUkZ4UWlFVis5bU9oeVNMWVJ3SWQvNUloYThHN3RiaWhTRzkvbnlYSFVrSUVYcHZhMDAyK0xSU2tpdEJIQzY2WFNnUk1xQWhHR2NpOUNVWUREV1BOYTVxbm9kZVBKQm9sUmthSkhsR1BvQ3QyUTlRaWJTS2wyT3d5b3JLQ0JiRGcvbzVzQWJXZmFyYnVGclF0ejNQOTVpUjVOV0NTNHBEOUludVFCd2xjMlFoSVBUUmUzKytYWngwc0ErcStUMTdWZnNYV3pVZWx4eHl2b1E4emVMUFMwYm51MjhtT0NLQWJFeUZhbUFCSSszRUpJOThndGR4RUpKRlN5ZGRHdHhPYzEzaXArK1Zyc3hmbzVlZldqYU1Jdjh3QjU0WVBZR3FHTXdBdTV0RFFuQTUrRXU3b0NaK1JCMVBhcjludVdhT0F4L2FVZHprc1hHc2o5dksySHVWUlZ6UWhsUjc3K2lhSTZtZ3NOMTluYWJ5dkd2U0hFbWhBREQvWWtmL0NGMnZHU3MzL3JNQk51NHVuVHNYcXQ1WTlyaEtROEdYeFdDY1U0Z3NrNlJFMXBhM1FSWmRvbS9SQXl3Qk9vbEFZSHBOVjdiUTNid1NTS1NjeWVodUlyMmRuMUo2YkhjZ0NrbHVZMVNHUk1BeVJUWTNNYit4emk0a1BaSVNIdkhDVWo3T3lGSVQ5aTRKTDR5Nm1FaW1MWVFsQU5OMGwwR0k1aGt6UXJkYSt6elozU01tV1VhM1gzWTBoQnMvcDVOc1RLUXFDdXhod0xVWFA3OTZXbGpabnlLRHlRenVOc2RFckpIbHB5M2dvT3BlQ0EzOTJkQWNBTnBqZTlyanR3R2gzUzNGQnhMN1RvZTEvZUZrNVdmOTNRVzVpSmh0TGJucGllVGFtaEdqdzhSajEwRGVSSFFDR2lXZHJreE53WDR1ZW9YYnpsSi9RZmxVZ0hTMXJLczYyeUs5RXdKWm1NbS8rTUFYVSs0dm1IcjN4MnBjcncwUUZHOHJhVWZmdEdGZnA0SG5tMXNKaWh5RDFZQ0FsbkErSzF0U3dIbUtoOHVIUU92M1BUbldJc2NDZEFQTjB2RG5jSVJ5aFZhWFBxVTA4c3JEcmpIdllZamFsOXIrU1JkVkJpcGVkZHpxZ09MR3VFZXhVWXlralllaytqZUMyQ3Z0K2oyZCtidit1citqVjM0ZHM5THZGUisrbVJyd1BVTXpHWmU3U0JyN09iYUFwTTNVSWJmbTVmWFZxSHVKd1hkdzRuRWhoVEtwZ0hKQ3k2dzI3akxTOUpnZDBlcTV3d04ra1lBOG5RbkQyTUIwMXU4czg4dFhUL1QwdUo1WjRlZEhrdVo5eXo2VFAvR2ZoR1FIWW04UTZVU0hFQUFwcjVRVHVUQnh1bDFNTm9jUDQwaWpERDgrYzRLZWN0ZDhMREtET3RxNStFVTV2ZXVhTSt0TzhyTS8rU0dNV1RrTUJtNEpBYU5ORFhZUmlDNnk5MXBVYzEwdUJ3dnlCTFduMDFLTXJjNm9xYzNYS3hLc2Y1Q216T2NqKzVZSlRBN1hqbjlRTnRrZThFRjJKU1RVcFhLV3VYbVR3TEFSaXRoTzZzYWovNFBEYnVwTUZ4clpBWUVyWU1saW1RbnRWanlBTzR6NGlVUzhhYThacS9kY3Z6QWkvSnBPSlBBZVJtWnN0RzdOVVBhUFZOVlQ4dUNpaFY3N1dZa2dmUWFRcU4zOFhERnR2T3FmQ2ZmVm81UkJEazZPL2RYeHRjVkhBaU90VGs0NVBCdEIvVXJLSDY3YWhwM0pYNTdCdFdXd2pWVmZlMzB6VFIwUTJ0UXpOUHpLdlVxLzhXVEFYQnZ5dnZvc0RsS2d5QnIrQW5ESVl3T2pCVGJOb013OHN3R1ArUllQSmFXOGY2QldmT2hxOWM0RW1POEl1TUFVMU9IVC9PWStWVThLYjI1cWg3R2VBTExGU2l6YXNpU21tY2JNRTFGY0dQcVNjQkJlU1E1d05kU3NXa0RXZXRYendDTGV2OE1JL3RPTHo4WkFMSm4xYmhkckczTkNvV2c4UC9nM1lORklvdG9ZbzJhUGdneHdjV2pRZUsxK0hNKzVueGhHaGdOcGNpeVIwd1BnNTdRYjgvWkd3MXFWWmtQRE1TM3hpK1JzR3lnSzlkWEpNK3NXMm5IaUwrT0NDODVZUkpVWjAxcXVXSXBjZHkxWnRGbktsaVlEeHNFc1RBK05yQ2JFNDI1ZmF0YXpLek04WGtZcnEwbXFvY3dPbHVPN3hicXUydzZ1OFNpdkpOSmMvYy93QStWZUJoMzlvLzV4UE1zZEgrS0NOam9CSmh2SUpSYlNOUXRBVUFmcXZkNjJKWVRTVUtodkxRdUE3TTRPalpFSzBQV2FPdU1YTjM5NmlYd0NoM0tzUGdocTJLSkhBdTh6QThGQlhxMHVGamN1citWVklhU3FtVGhTQmxkY0xCWjVXVzBOSERQYWZYUk5ZdXg5bHAxYTFsTitON09oNWRmWUxWaCtQb3c4T0cya0lQWUQ5R3h4bVcrQjM0YjNMeThva0JOOElkVURHelBiNCtVQmNFS0lWaHFKcWNMTURtSFYxWG9yUDYxZ1o2ak1TdXBXY1JHcDBsMXNqbFpETGZKTWx3ZCt5MmpjQTkxeTBvY1YxWW5IZ2R6eUhFcGtBa1ljazh5Vy96VXZlT2NVWE50Y3UvOHI3clMrSmpHbGpzS2JZZXhpQW5xTEs2dGJXa2NpRC96Rmk5dENrS2c0RWw4Y1lKMmVnRVZmQVQyd0xneDFsWkpxZURDV3lwcS9mQUx3RU0yakoyV3ZwaGNuYlFtdjZKUEFiVHRzenM0V3FJWUY5MHVmaUZjc1UyWmg3d011Vkx3UVJzeEJ5MzdXSzR3VTA5MzNjWDVjc3BoK3poM1ZGNkdFeGJhbUptTmZqU0pyTGlhNS9Jcmo4OU92YWtjT1ZTcmdNVWtpWnprQWhTZCtTK3MrZzgzS2NpNXA4QXhKa3JtMTBGRFhkczNkQmNiaTdWY1NtYnlWNDcwYnd3Y2E3bHdQMURZMmluZzhLNkZ4dVBkbzUxbGFtUDlrZFRPUlV6Ylc4cFhtYXgwdE5OV1ZGejVuejM0MXJGWnVpRHlYSFpycW9wUGVBMDRPYnA2REp4NDFwWWZtcUd2cmUyd1lKa2RBbjdWL2dWM3Qwc1BMeUNESUVPTlB2cmVPaTIvNXZyNlRrbVYxcUJMaGgyNGFnUDdqclN0and6Rnl2YkpNUkw4cU9YK1pBMERYUG5yQ2U1NWVuNks2c2JaTnd3aGQ5NktlKy83VVI2M1VKM0xyc2pBSVJpMUs3aFZtV1dxVGV4UzVQdnR2b3hJaHN5OUpTNmtmNnpJM3NuTzlOOEJsaXlYL1hmU1JBdmJYanZZQnQ5UDBST3NGa2VJMS8wcGxkOW4rdWVkWVZuVFZwcEpoTEx3b2h1UHVGS2hlUWp0dnBjaWpKZ2FXSUM0bEtpaXJsRk9tcDVJaFRaUGVmTGRKbHJBQm82bHZUcDRRSmR1YmNoaVpSMGpOUTBhMWVENTRzcTAwQzdnVk1HSndPcW1Zc3NPQ3J4TXVISjBscHZxQWNqeHFTZ1Jzamh1d1VLbmRoUGxnUFFPOGwvbFIxa1dFZGl3d1JZMFB6ZXE0UGdrQkVhY2ZQT0lQS2NwZnA0Znc0WUtyOUxDVHBCb25SZVlWL2ZDRnNvRHFEY0Jhb1FRNU5KOHlxa2Q4czF6K2FMRjJvZ0l0c1Axa3QyL0F6bTgyb1czNzVMV1RYZkdIaThzaWxIcFdQSk91STZ2ZEdWQlJIMXNwUGdPeDh4NEV0L1d2ck84S0pwOWZNVVpqY3AwcnhTRXpmUW52WGpxTSs4Z0Nid3Q1YlZLUVlMcDMzbHJ3b29NVDZxR2VjZzJ2MkVEaEhOZ0E0VU8rNk9oaVRhZ3c5NFpOaGdSNG5HYVYwUFdkc29WeG1EUEg0TlViSHhMQU5pT2FnRmpPTmJibVU2ekswOTJwR1ZSd1oxSWVkdmc5eVJyemdlT0J6WVRuRGpGZXQwNk5MRU5VVlBXTzlQMCtDQkdYQnF0M1ZoSm5oOHBuWUx4YzBoZjUrVllDa2tTTkFqV1RwZGFqblkwNnNxcW5pQ3FwNzhmK0NqUkFBUDZWTVVpU1RvWmhBTU5DSEo4VC9KRFpRVWQxemVJdlBOeVArVEswNnY4U3FQMEZpeFA1ek44NWlaK2JRSU9hbDVhTGg2NDFWRWNYVlFlUnIzOEhUSDRDc2VSTFZlN0NDK2pMSFRQYTlKY1ZXY3MvSUNjMWRNVlJoQndxK0dNYmdmNWlCbFNvUXpMOUNkMHBHQ3dVTlduaS9pcHRlUzR1L3NrV3pVSW9BRXlIUXZlUFR0SkRBQ3VzUVJhdDR6eFU3Vk85eDFxQ3lFR1pZNVdDTjZTY0NhRHd1eSs0NG5IMExqcG1HVkVrUXJoeExzMmhiUU92R3pZZlIxZGxVU3NaKzg1ejlReno2dkxIZmYxaTZDWkZIUmFnOXRMOWxhZmt6VDhHZTBQRnNxV3cwWFdodlBJd0FTc1A0VnFTVHRSWFQrYTdkdXRHY290dGcyS2lrUWp0UjFJaXBzWGRYenViSm81cGIwcjBwWU4rM3FDSlJOYzh6ZWJqZm9xTzQ3VHdSODRKRGtKZHYwRHFXNEhseW03dW0yaDcydDBsMzJ3WmdPR1d3eXRJRXkrbzFMdXlrNzFhQ0syQkRuS0lnNjRNQStYWWJ1cUM5VzduSUIvcG5MQlozMXBBY3ZoR0o1YUpQQzJyd3lVOFNOaWhMS1pBT1ltdnR1S2hTZ01lemZHY0EvUHhEMVByYnFIa3UvTmpJTmZxUVJlR1ZWSzNURyszYzg5WUo4dmJhdmRMNHprdnMxRmFyTEZLNDQ4dG1jZkpMREFUNmNqSEJibnMvTTlkNUhrZWYxZ09JNFh0QmE1UFpuM0N5akkwODlIeGJhVCtIRXRUNnlwWGtSNlZ3L0ZFcEx6YnNuUXFLdzZCMG52dHU4RHcwOXlmVFVxVWhCU1JYM2ZHUzd3US9rKzFlbDhJajBpVUNadUVLVi9ZV014cXN2RFJqT09TVmNiek5YZzlJZUFoeEdFVy9kS1hta0RLRHdVNnB1Mmw3SkpDK2tGYWdZOVFjT2hZZDkvRXFFa3UwSEdSWDlJZGRUZzI3bThROFUxSVZEM0RYQnBXWVd5K3lVZmRJMFNVYlcwQWZsMTg5dlJUd253Q2NnMy9XV0FDZ2d4TlJyZElFY1ZmS2tKbDhOM2l5bnlyVWZWQUl1RFJjOUJtR2YwVjlKMk5WcmRUcjhPaFRuOElxeFQxZExHUnlFZXE0TGR2cnVmcHdsekEzTjA2QThZOU9mY2Y2M1NxSjVuMEQ0b093U3RZSytrN3IzSlZ2NVJFK1grejAwY1pyMTk1RjNDNklGWDNmRWtCUmpRb3lvc0ZPa2RudTlIeVhyRyt3bVRKUWI5dEdlcVdWT0plVU1RMnRqYzl3c05RbEM5VSs1a1g2UDNXSnUxWVRGNjdRODdHNzVIVkZ1T0N0azZadk9xUE5yMkR0Z3hndUFBMnVGblRrTVRlaE96ZG1YYVpXOE8zemp5OVd4RCt2QnJXRHFVdUhIVklzcE5ZS2hQWGVnUllTcUxBY1l6QlkrYklzWUFSMFcyemdHZFpILzVEamdsckczZzVoRm1FaVR1bGh3Y1RuUDlCS01laVVFVy81bis2L1RsbGFqOEQ1Y2ZoNndXRTVQa3VRaHRPbXZXbkhoR1RuT1cxYzh1Ym9yalcwQXpVb3dVc1NlR2l4bDdwYm9TOEJvQjZ1bG9tdDVzWWFwbldrV1lZWDJUWDUwUXFCM3JVSndiSlpwUEt6VC9kaTVUOW14Z3pJR3RZK3kxTG1ZRjF4SVJ5ZEZRbTRtaFR6VGNmMXBaWWl1WUtWKzBqNGZTbG1XQUlhSlpiY3dpVTZiNnFNb3ZVVjR0SmdwYWlyakxVYnkzSVRST1RuUklBRjBCRkprTThkTzdtS0Q0OHJiMk9jL0ZCU2V0RE5zUzhHaGZUa2k2VVVZOU8vMTh0ZzBIN2FmS2tYb3NvYlh4Q1c1RDFXamJDK0xiRnpOQWYzVXU1TnFlcGtGWUNwQ1NjQ2dyYTNMSENVUDQrNW5qbkxaREJyUmx1eVAzY1AwUC9lVFFwMFJpWm1lODhtSTYzVTluVTNTUUV3RE9MVXVEamMyOXNSMGFrWjNGeDR6cUZJM0cySVpDUVM0eXhBNEhkWXVNU3hlN2QyNnBqS0NZUGlBNnpGVnpEL05NaUwveXVEdDd6QlpmaGt5Q2pOMjJRVjEyV01jZTJOenB3UzZjTVl3dTZjN09PZFAzM3oxaFk3YUgvTk1Pem1nVUdNQjVGQk5jdXp0ZDN0YlhuR0VZY01TR3FoMWpCL3pzR05OOG5KSEQ2M2N5dzRFK2xqdmV6WWpuMTFCOWNGTWNTcjFja21IYmdDUmgxNXVla0VkcWRjMUNZbk02NDV0UEg4cWFDY3kxdVBYdE5KUkRMSGJ6Y2dMRnBSV3RobHVnU1J5ZThhanFlZGNHTEFnS0hpVkVYQUdrVzRPeWxPbmNHSXhQL1BrKzhkb25ZbWp6bWcyN2Z3V0hmbWZMSWVSY2ZoMXFic2pzZ3hpOHk1WlB2OE4zOVpmOWx3Vm1mNjhVc2J3aVQwcUZXVEF0cmE0RXVrTnhtQWU3NUMwVS82dHk5dENhbGhFdWFNNlg1Q093K2lKaXlHQ3cyY1VGM3dRemliQ1NJYjVDeDBWZ0p1R01GVWk2K2gwcFVFVWlVK1RnYWxmajdraStoVGZEWXZvdTV0SUNTYjM4UlNSOEdsMU1PNThtRWQ5eUtwOWFYdE5DRHNUQmdrUGltSTNUMVluNi9lZ3NZZTE4ekVCYkhtdXpDTzk3ZG9aT013U1FTUThNVXhoK1p1Q0xxK3BkdHBMYUlUNis5ZEFiTU93bnllMWxjU2NpTEkvUFdObEJnTFIxYUQ4akhZR3EzYTJsOW9MT2NBTlpDa2h0ZVljSzBkMy9ESDFxS0pycm14a3VaWkxBcFNEdFVETVhjRGJnRG5WRS9tYzBnYjV2SFFUZmRTc3JvWjRNN3F1Si9memJXajREa3JaSDJqdFlNU0RxdGppU29xc2NXb2thYWZGTCtFOGhFVVVnY0FlcFJNZUdVNmRiVzhKTWJpb3Z5aFRnNXRQVGtGZ1N2MUkvWk1NZTNiZEp6RE9zWHdFV2hwUEpHYTUrN2I4SWNtdStwY2VMY1ZTSDQwZzRjT2Z0NjNmVmo3dGQzdmFOUmdQWjlwUWljZlFVR0lQMWRwdnpWVnhBdDNTeklkRUM0V2hrNGwvUUVNelNkSUxaNzZ1NHFsNGExUnorMVFHZFo3bkFJalErakxoN2NjeFFqcnZRUFV5ajBqcmI2R0syMzBEck5DMnkvV25xSUNKdExGVVJBS2syQ1crUlIrWW13MUdjVDRNeWVKMFVab1J4K05SclFYT0Q3SWE0L3BpMUxyaVA3YkdVK1U3NkdVR0JlcG1KZGdVdXpBNkJZSFZRb3d0MEtGdVd6R2RjTmdvTUR2QlNtUTFEbVJ3MHJkTFpZVlIrSmJMRGFuWjlBMTF0SlNPUmdUWVd4R0RUU1luVGx3SnFJSXJxRGpGRFgvdjVmelBnNlZWYlpkTE1yaVNwVU9TVWVabFJ3Ujg5aFdMOVR4SnV6d0xYa2dQTEcrc2pCZnM2YUVuVGRxM1FDN2ZYdiswV1kwVzE0RHNkb1pSWFNCdzQzNkR2VVcvd2k3WE5PZzR5Vk9vVEJQTlJrNmk3eUJCZWhxN21lQ0tUeUVCSWgzZE9BMzZBaDFyeUtFcHpuNUJHRVpNNENzZzd6bmZCQkdjZkQyOHBGeks3U01ieStuVHJlVlMrcnR6ekdBSGNCd3d4aE4zcXNHODV1WkxkRWMvcWNXTnBhZ09pT0d0blVqMEQyeTNJSXdOY1JwUmVYUlVXVFl2YUYxZjlleVhQN0JPV3BWcGU4TjRxazF4OWtaTm03VVlhNlA3ZlRiU2NCWTdWczFRVU1qRE1yTXdFcXJDK042TXNGWGZNZlgxc2pJOWNEU0tYazVLazdjQVJRWUFuQ2Z3ZGJSckJpNWtjY1VlNS92SG9EZUM4Q2M3N2hqb0t5Y28wdEJ4cis3R0JMRWVLNEFtcjBTSndET2ZCR1IzUVlwM005YjZPaGJiL09hbG9JRXJlNWI0dFV4N0d1aERUSFhjTERaM3FyS1dRN3NnaVlTTVc0ekdlcjRNOUFVVXpRMSs4Vm5FL1ViMHV3Ty9kU2J6MitNZzZqMlo1c3lESS9Oa1Y5YVIyMDdsSnYwZXJpelpMTzZHa0FYNW1kTWZNT00xdUNpVStSbkZuTElsQ2l6a1Y4MjdLWmFqZ040L09meWhjNXIrZWZjQXcvZUxGUi9ER0s5MGFwRTM4TTM1WUR1Z2U4cnRhWDRmSDV4N1lpUnhMK2ZGaXBKTUxnTVVPYmFxNVFPeGJZOG91TDUvTTZmNUFENE1hcVdGOHA4YklGRnRESkFuR1JJNzdONk1kY2VScmVFNWNSY1B1Ly9EeWI1ZjFlWmFxOE1YUDhyazlabFRCNlZoSDVrK2NHY2M0THJJVkpxODNKaVA1Rkx0TGdzNTE4NE5McEpNRVdNR3J4OFJ1RFgxVHYwSW9GblplQVYxRDJldUF4a0YwVTVyby8yWm9vanNwN0tKeklwVklxSWJPSkhGR1c1ZHlKTXRPb2puTSt2OUIxdWkrWXpML05rdHpmaXFlM0UzN1hFNFp1YmZXcnJ5L2VDdTZwV0J5MS90RWdMOVRJeGZzMW51VVZwUGpzanQ0dXZRM3Q1aU0zeTJ1ejJyQm1MR295ZGNMOWt0UHZWRU0yM3NTbTMwNGw1RkZLRG00RVJvLzZKWmIyZVh3UU9LZEdqOXpJU2dPNk1DNGM4M0I3SFJ6bFpVd1lPTkhmamRza0dSK3V5OW9rNEd4V0FLQTVhN1JwREZ1dGUyWHRnQzVPNklleUxiT2czVDZneWJIcnkwdE05dkk2czQwSDdXOTVUVVh0NjFNdTl0WEVxNmZSa0gxMEJSWU9rK1AxUVIwVDk4cm1hbXNySXU2ZzhHS0lxendPRUI2MzRhWGpFSTlkdytRazNTV2FYNTExT1N6NmZLOTlFRDdmUXFwRTNybHcrUFh3YkNoSXdVMXVZa2JxWUErWGRsNlUzc1lIdjNzTzZwZVNaREZscURjaTFTUUZ0MHZXVXRFdE1oVHdLdzVLWDRDd0hINitpUUVhazc1MXhheFE4d29ZczhQU2tOVnNsN3hrdkNSM1Q1QVI4anZ6OFA3dnZ1Ny9NdldpL29HdGZreGwrbzVxeUhHWVFReWg3VFUzSzM4MTBDUEhZOW5ocEhyeXBNTWM1dzIrczVTRVE5SGdhWDA2RkVvQjBId1U3eVVoNXVlcy93MTVNekhiS0VuS0Myd3NDTVpWN3lyVUtjdFlJVC9EdXdLTmlnRUNqTlNDdzJwbnJsOEJicUFOaEtjc0VkaVR6c3haZWlWT2Job0ZnZVVQL3FOMjdLWDRKcDN4OU8xNFBvVTQ5SSt2TEhidytudkNWanV3K21NQ3R4Z20zUnl1c2QwdXloeTVkelJQYjEvMmtSN2lNd2llZzAzcHBURG5NZjdHOHFzeTNocU1kTW41cEwwcHpQT21DOXlBT1l0VUdLNlAybDZBTFVNUWhVV29HM3NrZ0VEMW9vT1k0bDNaS3Y0aC9tdkk3d1l3aTRNWk5va3IvSitYWGZHQlplTkxISUd5WGVXUk9vZGx1OS90UThyNVFiVndxdVozMEdRcklSVXVxOVhHWHh5blcyQ0pZT1hTME9TcnBYa2ZmbU9xZ1c2eVF3YUdoVGZvbHRCTEdweUZoeFBPbm9saGdyeFJidkJtRHRjT0UrMyttTDk4Q0IvS2tFWnFiK25oTmp6WWh3OGhmSXg5TCtjazlKcFd0MER2MHZsTFVhZ3dGdzdIb3pTclpjWE0welFtb2J2aUFqTnAxWWVxZ2s0S1FzTmNrbFZxZjVvQjh5NUM5d1plbUxNYUFESThpaEd4dkIxeERvaTR6VmJJWllVY0F0L0h6bzRKbnFlTXhsRm1mcEhHL2tXMUxwZlNZTHpNQzY0T1FBR01QejRvUllMODczZ2tSbXdJYU91LzduQndMTXhZZWZuUHJ0eWdvaFJTaHU4ME56VjlNRFFZMTFuUloxbVdmclRYR3IvRzZ5TW9IN0pidXU0UjNTRVp1RjdxVUhtUFhRdDhYKzhkOFNwZzN4Y2RWZ2pudEZ5UVhIMWt3RmRzWmdWajY5WDEwUkx3cHIzbEM2aVAzUjBQOVhKM2lSazBUNjYzSEZHdUVLaXNxcmhmWmoveTloeDYra20xM0NLa2orMkZKeFFPeXF1WE9EWFNsbVYvSlVsSytuQVJ1WkpJeWxPeXp1My9ZUXVZcmFCOXBVY3d3RWtlUFRaQUk3VjdBeHl6WHRkK3ZnWlpVZ1VnbUFjQXd3RkRUWmRHUlJVbE56NTZlc1RzNm5IOUFDWk40eERjbkdIZ0t1dk5zZE9oVDR0Vnd6MllzbW5wTy9waThhOUtHbkkzTldJQlNlSXVWYlhPZEN6VVdzSTJGQlFSSlhjVTh4Umc2UTFCampQVGxrQmJ2cDV5eFFRLzRCM3htZUE5Y2lGYm1uQ2ZlS0E2bFFNQlVSV2t5amkvcGJrM0dmREhTQmw3R29KMFZPOCtpdlZEbVJNRGdhbkRveFJ1OE9abXpsSmd3MmtlY1Jtb2VNa1NBRVgxTThjRGs2Zi9ISHJrSkFPbTFtZ2VUZWFhYWpJWEd5aWtOaG9vNm8wblFRTTU3UzNLcjNlaC9ncFp4MVhGZmVyejFUWDdWUEowUWljNG95REpnTzZObFNMUXhodzdwMGtpb25qMFQveUxjN25RNkRZVk92Vk16a3ozUGt4NUZsMEJFd1FtM3NJVkxjcDFuWExrczJiMjI1ZnVjVll1aERSNkZ1Zm8xUVlQQWw2ejhocDFmaExGdUwxRjRBWkhaVG1YRWNiemhxRVNEZkFKcGd1N00xVEV3ZHJxTkc2My9vS0UwWUtyTEZqdDB2NXEyM1FsRTkvdkhFb284MHhHNTdObnFsWTcwNTFDeEtmSHkzSGY4L2VVV1NRUEVoRy9wYTh4NUk3SnErSm1zQWovVFFxaklocWk5YjczMG5jZU1tMTExbTQ5QmRXRWtjSTRqaEpoa1VPc0pRUjg3VnFXWlV6cElaODlUNitPSVNMT0RzUlk4ZysxVWh4eGsxM1l2SzJSb3BuYnhxRDlSbTJ0a3ZnSXJvTVErRHAxTnlCNDdHYzZmZXhqcUVPVTAyYkQ4WWEySGVocFVhTTZqY2JyQXRnVC93aExhVnpQRHd0YmdaNHE2ZjlrUnVwM2lNREl2bUZiRktmYVdPMlYwZURkbVBWM0k2S09UVzIzOGoyRmVLb1lKWFRBVGFaUUo5UDl5VXVnV2wwQW5qLzQzNDI1QlBraXNrLzJnK0tPNk9kQ2o5WFdRUmIzWGM3YytxV1FsV3NDbjQ5WlJsTUJ3U1lhS0FZQy9BWVVXOExBcGh5c2hLWVNOVmhqNGJwRWR2dGN3c1BuallmbS9ielJCc3FWeG1YMHlVYnRPazZDeTdOZElVMEg1ODZtdEhOdmhLcHljQ1I3Ylk4OWtPaTREU3UvQUExSzIxYkF2NElpbkdYUkFkVExudGpyTjFvbWJsYU5OenRtWjk5Sjk3bmxQN0FzeVpUNkJFaW55Q2gzb2V5ejduRmh0M2d0TVNpMUw3NEpqZjRNcStNMVNyNmh2U0luZmhWRm5hSHZWK043cTA1WFVycFFpSU1UZlFXTElDRVZXMVJZWHZXUWZPUlBUbWt1aWl0bHlaRFFWS0ZhK3l1S2QxSVVyNXl6bXBtZnRsbFRKSHMwMEZnY04vSEU3TEU4UkRPeFpkcEs3SlYyclRqQ0Zzd241OU5UeXR3dzdaT1hoR0dvVWtSQWE5QkYvSktJS0tlVGUwRnY4bE9lSkU2ZW5RQjRlbHdTempMQmpObFREZGhlcWE4dkZlbklXZ3diSWNBbUNIVUVhWXZkUkNVK2hwMng3NkR1YzY0N0NndHRmanFzZjdmT1FleGRRSm9ub3V4MEZpOFV6SEtUZTZJTzJBcXNnc0J3R1JsejRhQVUvbEtMbnRIMHN2MWtETE5LckZkTEErQTJ1NjA4UFo4U3l2VVh6bXVXWHZIVDVjWVFheUhmVm1keHJwa05MMzBNNEF1dlNOUTV5V1djaTJ3SnlOWDBaRXpJSm5wQnZYd1NIMGZzcisvdmpiaWRuam0xNzNuWWFaSkFLUkY3cDBoQlgzSUlKeVpDSFJYZUp3SWVrZ2h4R3ZXMWI1OEw1QmdaSmRPMDBiYnlhZlI3RUxyOWZITVl1Z2xNS2lVZXU1anFseWRqNXIvWjJpNkhnWE40bDJyOWx2ZDdrOEJPVWFkRVh1SkVFazFOVU1zN2g2bm0vTnplQWhLWUhLejZoNmJybk00OXdLOWU1SndMYWlWdGFUZS8vRFNxSmx5YkVTeU1LL1pYMHcxNFpWMVRCcG1VRGlFNFo4UzZpcGQ5MTg1OURicWVhZEo0cHJwcitFbWswUGwyaXhTUTJGTTYzT0MrOXppWjVmdlN5a2hYVWx2VitHdDN4bFFkZGpWVjVSZFlFZ3B0cmY4cVJrcnk5ZVN0Z0hLdWVsUmZST1NRSjV0a0E2ejFFSmwxSVRBcU1Ma2xBN1lzMnpqNmN4S2lpcWFBN2swWHNnbjlFNjIxMFhsZU41SG9JZ1BBOHhUbVZHQkt1Q0dTNTl2K25lMjNmSytZTE56RmkrT1JqNVVjYTJndnVac3BzMjJSTnRmR0diekl0US9VSEhwSFR5c1pzUmQ2emlEQW5XTXJybGpkV0cwZTRXeHl0YjNab3J1NTZ5UEhNZEdHNEc3R0ZuWGVudUF6MjVEeDdXZFhKT1pEK29abHlhS2VqVThBRzdhYVRNajEwZHJTY2lxWU1GMjFTNFdIak1MSWtPei9hS1JST2pnL3NoSHRaeEFPQ1pnak5wUnBHNEZDWnBUdEhLTWdrYXIwSVVqdEs1ZDVUYi9UOWVFZzBCcFd4WklzTmRCdWFRNFRXQXBkWktESCt2WWc0b05Ud1Ewb21GWkltVmNkN3VURFN4UmNncFRlR1pTcEJPSXhlU2VOZzBmd0hBMUQ2U1huTXhDT3JLNkg2bm9EMXhCOWVtbjcxbDJyVWwyZ3BMcUovdDRBbmFpbm03eFhQb0h2VHNjNE9uTDkzTU04SVNXSnRvTlIvUkNWK2Qzb1diamh4dGY3T1Q1c24yZmR5bXRDUVcySDVPN2tjNlBWQU5Hc0M5cUNkVmV1ajgvVWVNZEk4NWJpUm5heUl5UXJzZ3lRQlZtbGJNYW9ZK2YxYzErZVgxS1RRUk9aZFVwc3BNZkQ4L050WmNKZzZjcmlEY0NZUzZQVFhkUHZwTEJIalFUd3lQWUFXZFFPQzZIMGhDeWlmcGF1ZmNRN1RjUDZDSzU5UGZ5SE9XV1pxODlscDlIYVZZTTNKdEdsQ21OM2pGMzFzWG5Ydk5iVlZmTGJWRndzanhvQjkvRktPRWhlNWtHK2wxRDMrQlYrdEVYUm1ncVR3LzkzeEgvcGllckVkWURFQUtrSlh1SGo4Q21yUVU2U09ZK1ltV1NIVHh6THZ5bndST0g4d2pIaWIrL1RXbTdtZVVPR29yd05NWFpvQWd3VERLMHhpZUg3ZEcwUmxuMmFPcGwrWmx3RGszZ01NQlJ1YWtscVVUS04vSW5HR1BHSWJFNm9zV0NQTUNzRVJWUTJtZ3pRMHlIOEl5c2hvQnNLL2NRa1BnYXQ3cEdjQmZXbm5GV29TekJlOXJ2ZUl0NCtmcU1rWldEZHZ6UkZxZ2hoaEJIL0RQeEhvbC94MDRSenVUTm1yMGUxcmtTbHJzeXdkbnU3cThlVmVBVDc5YVlGdWtoV05EOHQ5UTFRNXJQa0MwK0VrQjFXTnlrSGVtL29qdGw1Z3d4elV5czJuZUUzbkRmWU00cHgzMnI0M3BpRzU5QUc2RW1mQkpndllvYWZ2aFJHbkVlQ05GRFIvTzliT0IycWZ5VnltTVZzenNJSnZwcHAzR1oyOWJmKzR1TDFRaitxcUZ4VGxhNXloaDlvYVMvMFcxOFVMQkhrK2NTOGJTRlUvazZwbFg0d1NTTjlMQ2IwTFZ2Z3Nya2syQXdVQW9WK2VCcWliNnI1NThPbnNmQmNWMzNPVlMyazlnNzRHOE1uWTBzaVlESVBoeW11bzJvZkRoUmdjd1BTZFJPTVpIdGtFbXNZcDhKaTA2VUVKNjc4SkJFWXJFNHVDOEJtc0ZDdm1RV2doWjFQSm9sSGw3eU5HeTBmbHRkeFNSWUtMUjh0YTRmQTNDNUd0S0xra01VNDlFWjJGWjRXekhuUWdqWlJ6SjhVVnFFRElOZXlCcGh1bFo5OS95N0pRN3gxYnp2ZTlqdWNla3I1RjJmdkJwWmZNa0YwVXFUZTdDblg4RXJBK1dXRlRFK252VlM0YWhGc0cyb1BNUE91V0NEQW44Q2VVVGd2MUFxcUE0ZGpieWgzTFRiY2J3c05YSUQrVmVuOEpLVEQ2MmN4VmhieEdZZ1ozMi9rcDk0cUlwVUdtdHdLUFc1c0F4YXdYa1VMVlozSVBZMkp3SzhOeUVsL3pxVS8yZTByUndhNTl4TDFWRW13NHZxZFBORi8wTHdOZnd2VU54bXQ0dm5oQmk3OEJGbFZXUmdPcTRacUJwcjZRWFVCYkRZSVJ0UFk3enVaQTl1eTdMZjRKWUliS2V2WEFkZzIvM0JHTzR3dUdpR2lqTGpzNklKTUpDL3hwazd2ZjN2ZTJLbGhjeE5NSzBzdi9GaHlqK3A3L1VqcStGUjVLbThGY0VxSloydFpKMm5vek9Mc0hWZWs1MStKSjQxS3loQ29yaUYvTmszMnI1Wkp0aG94NWNVamhXTTBQWG9qRXZBcHB5VldGM056Mm52ZkcrcWFQYldoWEowL2dYcXk2eHFRaDhYNDk5VDBNbzQ5TUpQM0xyRkNqalFaMkppazZ6MzdSdStpY3pOTTdlSHRVTWkrbzVURjlNeDBUNS9LZUNQTGVZK0tRMHhRc05IdmJHWFRpM3dmU2ZhR3RTU2VrSm4xV0FoTVo4Y05NRXdUUXdlK3BrSUF1MVJSbS9selNFbTdxdjhzazhxeVQrRW9WTC93dVd4T21pQk5xZTV3MVRFSEdtK2p0Nzc5bTJJRXQ1ak9YMHNINmJSYUZZVVZkZUpjZjhrc21pS3VCMjV4Q0FlaW5XaUtlMlZUeXdKcVF1QktJeS8wT2JPVFdtTGlMcXh2VlF1dE1vOTAwKzEvR2VBOUl6cUUrbG5YVkdWR1kxYWEvM2Mrak8vZjU4Sjk0ZFk3RU50Y1dLWklYSHdybU1KYVZvbDhzZEhNeGpYRm1MdWtnREErNVJ6NTlnZmNicW9QYjJaQ1RlZkU2UStGZkVQWlkwaDVjeW1kODIzN01ycnVnVXdmUTNrNnp2NytlS1A1UVZyZmtIVmU2MkhNeTcyUEV0RXVpQ2ZLUGZiT0VBcy92ZnRJS0xwYVJlZzluOU50TTFHcFEydXNkU1dodVNlMDRXcnY2UjFEV3VWU2NkellENnFQeGFYUlIwWXJMLzlPU2tBRDRIcnVJL1JDSXVFVFBlZ0ZnU0hNUFlkclhUK1RZWjhBSWdhY0Z5NHR0dTYxWUpud202SGJVbE4zKzFOZGJTbnhoUitwZUNFY3YrRHFiSW1TM2o3RTk0TGhBeWgrU1EzV01Ndnh2bmJDbUM0dXJpcWRKWmkxNnVlbFVocEhqNVpoWi9qdHA0VW9vRnZ6UXp3R3JTeTFSc2d1MHdkcGp1T29iQ0orWENneFVjWmdDOTZVY09yQUpkcmMxMkpDekRqUXdza0plMS9XcjJvTTEyYlRzLzl3YXFsZ1dUcVlUa1I0dHgydmU2dHA4Rk5URXNVeGp5QVlpVHRvZzB0SXJXNU1OQnhFNGZPNXY3OGh6dFd1d3hLamkzU3BuQTBVWkRvYVpzQU9ocDlSNWkxSUlrUUF3UjNTVlg5Q1lVdkdCYzJqSDJ4Z2xYQ3RjM3F6cVVwbFAvRVRudFYzamlBOENhYWlJQ2h2enpma2R3MVZsNkFoYVk3Qm1TclNSQlIvMlJWb1lYSmd1czBxRXlQa3V5OXJtcWdYWGNoS05VS2cyaDQ3cU9kZm1ad3N0c0lMRlNNN2NTaVc2ak5aMXlUNUFpNVpra0dhWDZDYXJpckx6WElEcyt0aUtpMW9NS3BEYnhmTC8zWnFFR3luZDVUZDhueUZQM1dFd0wzQWFubGVzUm9nSnB0V1pZc0xRekNFS1B1djVxNDcrcjNJQWRvTmszV2EwWmpKRnd6amJjR3hsTDFpdEdweTRDRS82aHppWW9mVkZNUkdLSlNuRHdHeG1RMm41VlNRY2RHNUE5YUdWZVhGK0ROZmhMa29hUW9IQURUUE5JcFZ0WXVMNzRRUldPVDZwSFV0QTY5U200N1BUaXd4TEdTOVN6RGJoVVJWWVBHaUo0VDZGdy9pUkFPNXdlV3QrTjM3c0VGWjZQY0RhcHA5NmNLWjcyd0JxTWJVZXRMQWRGeEUwNjhOYWQxNERKUFdCTXNPYWVzOHhvK21ybXFKV0pTcU1BcUhVT21qc2JwRXgzODNwN25kK0NqcHlGNDhpamFDNmJNaFhqTGNKL0pYQllMYmhJQWpiREpwb0JtbzV6SnQxUk81Q3FBYWhVbzB2VkJxdlA0N1NZaWZJZEdjZG8ycFlaQXdqczUzL243bDNzTnY5WHVOUElZWlY1bWYvU3p0NldndkNXNlBFM1ZHVDNJYnh4ZTQrYVNLSDYxRnRqQ3RPSjBycUlJUHVpUkF0U1QyWlZoMm1GTmMxWTZ4bmo1NjV1NGlYUkw2L0ZTQzBXc3krY3VWYWJhVkNyMHVaTldybVdja1hHUFgyTEpuZWJBaGM4K25aaFdnTzZjcTVTS1dhZktUVXAyT3QxTTFHTHgxUnpLYVdUbmxhMkFiZ01kL2FVTFdXbmpKL3duOE5WdDVEMnZoK2wzQmRIMEVTNjJZWkthVmJvWlBSZ3R1QTVrV29nWWtEanJ1RUFjNElLSXpRYWt2M1l0YnF0Z2QvMVBoT0lsRGdDUEp2ZG16UkNPU1lzV2FTQ3J4bDQvZHRZZ0ErUFFPQ3BmSWpzbWptR01Uc2pCU1hvczhBT2ZlQUsrc0RrdUNRR09KOXE2M2dtb09ENjNDbEZYMXozaExyaS84dkRjRFdQaStYQ292aUk3cEFMR3dzM1dCd0FtdE1FcHZDdzg0aytTRkpPb2hGa25rUExwMm9pRnZ3Y0FkeTkvOGl3eWEvS1ZnZEcvc1A2ejFIbWc1eDB2SmRkcndhVXVtcDg2NEJhWFMxcHpvTE4vYytLUGwyRWtoeFh0ZnBYWCt2RzkzNG9TVmhBMEN0RzBDY2pvdGJEWjhuclM5RWJUdHdZRGdZQWFGUG5mbTZPQU1EUSt3NTdEeUt5UXI0RkJkMWxJV1RjYkhleitiL29WRisxNHRHSmxocjREbE9VOW5uUjdTZ3pxV1FnclhuNGdKdllEdzBRNjczOHRCY0plUk1qQ1pBOHJhUlJHWmFJSCtNKzFlcllKcFprVDY5YVJzWXltK3dWRm5zdUtPem9xcGRJaGFPR250ZlM3aTM3anNCS2E5WEtkRjVoTmpINmp2eHZWdG1EU0tKbDdrMWhHd0hQa0VTNExVV2Zic1B6K09HU1VwWWx3aGdiSmZnc0N4OEpKeGtkaUVVZzRYbmlZL290MkpxQWxGWTVoYk04RUxZalFjL0IxdVVNNlNaWlJ3cThEYUk4VkZVNlQ1YzVhNUdIYlQyZ3JSZnBZNXJ6MUlxTmVJVmxyaGh2dWxaeldaVjZQR3l5MFAzaTczMzhobWNqQkp0ODRlbEQ2UDRXL1lIUFIvOHdyMWYybkdHaS82ejBCczZwZlFwOStsZW11Q0R1c3dHNmNCZU50UGczbDNaZTl0b2tMSkE4c2R4NXZqelJrMEkzRU5lTWs4Und3YVVQRkxkWE9tSVcvak1nVVorMCtUUGV2bTZXcGM1WCthWU11QkpnVzRQcDRBbmZYZmwzN3h0TXhRWkhUeituRFJKZEx4VG16UytCclE2aUxCRTRaelh5NHlqN3l5SThVY0JNRFhkYjY4OGtoOXVORm4rRGYyWXN2OFBuclR2ekFXdno0dHBEcjJtdGIxVmlpTmNGTlFKdmoybFBCNXJQd3VQendsVVNnem1GNjVoT2t6UHk3bmlNb1p1SXorMWtJRjI2dG1nb2ZuZ1V5ek4vbVRDNUIzNXlqeThFS1MzWG9jZW9Vc0pvQTNqQWt2ZVB2T1FZc25qakdYdys4TndKTGM0QzVtZTRZa0lzRU9kbFVpd1l1WmtaN0hnU1QvVmJvMEhGTnBrL0UxZi9CRW42Mmh3NUUrZ0h0eFpjMWhZSURWSmlHRGhrdjQyenkxUStKT2tCa1g2UzBiZk5UZUR1dDkwNCtVOVl4Y2x4TzZmR09SRGxacEVZR2pQUXU1QUhQZDNEU0pNVnhyUmkwbHNtZm0zTEJuM3h1RmZZc2NjZUxIZ2R2SE1PZWRLRW9HMU9HVjRjd0JlVmJtUnk4MndxbkFmdWhYUGxYM05lZ29mYkhac0VQeHpnT1dFYThldlZFSkdGZmpaVW9LNWU1Q0dwSlJEN3NZdTk4TTFIOG4rN1huUktGSHltamdTaFU2enBkcmQwb2dYZmtyd0p1QU5uUlBWSHNjTG9yNE9jcmVvdDlGTFh3QmljTmU3dmtCQjZibmNnZmlJaHliWDA4K3ptS2xIYUtUU1FjN1Jjb0VZcXc3UG81cjEySmZmTndoRUQ3L0JKNzhVZXZtWmpwYTBiS3hETEwxanFqRk9lRE55VXlRNE5nOXRWMVdCMldKYU5lRkhaaGU3dUU1YlNsUUtxazgvaTBLSlY2d3Jpd1hWeDBsdDBYY1hSMnpXRVlQNSt2QkJIMkVic2FNMTZGWmlOelprOCszMVJCODJrZFdYQ0prbzlRa3JPUitjNjV1Uzc4NDNkL2RFVkRoYitXS29wMk5MUFBzUmJXcGZMczBCTkwxMWJnNTduaTB4bEo1blM5QTd0eUNKNlB1N0VsSkVPbXFQZkt2Q1RGeGFLK1RjV0pwZHNXRWQ3U1VDWVZSZzQxdE14RjF4MzZjcmR4bWcyUFlCenlVQkF1UHpDWDR3SjdzN3ZYMDhiV3RNdDVMMEpMQWp6Z0t6a1Y1NFBSdjNib3ZsaEZqR1VFRE81MHNrWmxtYkR3czB4UURaWWk3Wlo2YytISDEwVVQ5NVQzcHp5eTdVc0dSOXJ2VEszSlVOeU1ZMVMvZHpZcDVmRkJPR3BKUVl1TmlwWXhHL1hkNlZkaHBuMzZ6WENFZlNDb2ZJeVNuU3FDODUxRGd3MnlKOENhVGM2Sk4yWEtjTkdTcUlLcFdTc1hZNGhqdmZ1REpxQmFKdUZuVzEvQjFBZVFuVEYzbU8za0VpT09aYUU5RkRpZGozaDB3RXgvYXJ1L1MzV3dBS2Rtb096SWdMWWVqVWlocW9jL1AzWEZONnJCUkV0RlA0cXk4RGVBcWVUNVRPaitOM29Ed0pwQTNsV2dwQ0V5SHNnaW5MdEVpM3JpOVVNYTVKNCtTSktPd29DU09ISjJFRFJBNlFMR0g1RGgraWI4VDdEWGlrTUZmcHMzOHFlSThTREZVV1dsU0lJa1lnaWMwemJkU1l1Q3FxRjVTTWZJU2U2UU9wZnlTOEdYWG5sYU05cEEwMkYrV2JBMGJJYUZheVVqZDF0M25LODk1Uis0ZmZTYzUvdmF3dFREVzcxdlZxQnY3S2hWMi9qNlRSR0NMMkYrNTRWT0c5bjBIUkpNVlFoK3dwOUhmZ1FvSy9PbEFSUTlmUHlPa1ZnNWV0TE0wMWZMWk5KeGFmOGl5dGZwT294aXlSOE90RDROaFFNM2EwaUhlc1BaQXhsMEdIbzg1S3pYeUtrZ2FMOGM1SlBWRHZrWFMxVHpMVG9tTVBRRkl0a25PWGovYUxkTGIxeDAxdjRaekp1SWlMR2MyejlsWnZHczJGRmdBVDluWG9zVzVBNWptd2VIclpQaHVBUVphWTNtaC9kaDZoaU0vSFE2cHpHcE03RHdKdU5GbVRaQUFEdVpBS3ovYmpCVm8xR2IraTBkVFpYY0E3OEkrVWVkc3dvRGhIMmhXeHVqZVNkZHNYVVprR214L3dIQ1VieUcybFp4Tmp4STAyVVM3bGZ3eEUrekJaOFc3UXVBb094dkVWSm9BYlY0dllEb0trRG9yWDBHYk9zOVhxZUNIYXhIclN6SGQzeEVlbEtDZ1FDNkZoWjIxR0dQZ2tWUEtxd2pnYjNmNHFUN3ZxejFiRFNIbDY2dUgrQVBaT3lxRTUxenhtSzR3dGVaTWQ4Rk1jZTZ2eUowYTZmeWg5LzBLQW1iNHMyZitkVWVmQ3VKbnhwZ0ZML1RnY2tkT0FxaStGeUNGS3BmU2lJalQ4MFVpdGI0ejlKdXpaQnFMYlRtd05XZUcrelFzelA1S1FPTldhN1NtQjhkV3pobEl5bVp5VGFEdUpta0k5MTFFUmF1TnMzdHdvYkFrd0p3WkJ1Mys3SFV1MzUyNzBGeDZ1cU15clNITVV6SmNNcEl5Nm5oMmszb3RHNEN2RVEyeVNyYXN4RGExS3RqZWUweEc1bUE5bnBzRlJXajR3dTNMRFE5RkYrR3RxSWZVVUFaNGdRVDZRTm82cG00Wi93dit1UGZ3VlUrVk1zYytSYWZabkpNdkpTeWpGQjFRUXFzSFRWT3BYdkRvYlZkbVZSenFGOVZENGhWL3cwcWIvZFh4ZUkwWDVaNE1WTUNqRlp2am53VnNyOGl4SWFiaEIwZVp4RUk2QTdST09zVXZYMUNUeHc4Q1ZVVXJzN2QwOURGb1J6aldhT2VOZU9FVC9PeC9yKzdqZzFJTVVSRWlsT2hyQVZYMkhqWWUyVlp0YVZGaDdUM3VlMVRLQmRVdFFKMm1wZlZEdHg2UGcvSGpuL3J0Q0NsbzRhNHVJSXhJYjBFWDdqOXB2QWhydU96MWJ3Z0Foem1pV3pWTWViVUhaamU5c0QzMFg2Qk14RUhvbG5qdnA2eFBJSS9QaDVEekxydmYrOFJ1M3JPa3NpdDBoeGY4UzBhVzVxc3I3U3pMd2FiR25YTWpEc2JCeVJ1REgxd1NoQXVOT1pTUk1RM2NVS1FOemExT2h1WEMxUE9QR1RjaWs0NTBGTmZ6STloY042R3RzTERSQWFoVGFvK3JLRm1XUERQcDdvM0d6SUhGNVU3NHhzMGJoYThWUjhBVXR5Mkozdm10dkdHVUoyYTIrSWgreUpoRzFYaHJHd2RaaXRPMFNJVWcxL2krRTBvR2dXdG9lUUJIL2FHeXdQY0pBZWkvY0R0TkZST3hyMlNzM3dXUVIxZUlQV1BjTXFlMDBobEM2bEFtWjZnZldQVmpQSzVLdXAxVElCV1hWeHpQYXBwZmdDSlQrdWdiN283SUVCRy92ajFtb1JpSUdmYytRaURRMElab21zZHExdFVIYXg5eVIvV3Z6YlNhQlhVendNRSt5N0Jpdk5KTFE2NWZlWlNwMXFyY2Y0N01JSlUvN2RCY0Zib3FWQUpYZjNBNHJ1enA2aWFoV3BHd3g4MWhpUm9rN0s4c3UwK2hFNnBWaTJ3TGo2d09SNDdoM2FObENpUm9IcmZlUmltbHVQOWhNNktkWGdkUStqVmF4anlRK2VwN0c5b3hNSG5VcVltV3E5a2YzVDQ0SnN1aVNReTQxYUZGSVYzVUptMDZOTTZsTFoxdDhMRWtINU5KK1pUS2JVa0lrZG9TNk8yWVB0Y2N4YXZoelFrS1B6N3VGcFdwd3hFMTJPMmcrUkpZcnJXTWZTU1hrOHpFZjBEMmlDNFJvRWh1cmY1TURPd2ZndlJwZUFtYk5rZUZQR0M4SmVPRng4bkx1U0VqaTRYWGcvMFFrdHV1Q21IT0pNZVh6RTlrejQraWxGVkl4bWZWbm9GZWpOV1JZcnBPYThWZHhBWjFKanBpRHhCWnBVODdDeXUxNzNJWURUTFQranhSUHpTY2l2STltVVIrbmV5TUNhcWhEd3c0QlJtU2N1M2dFUVd1TXQ4eVBhbFV4ZVJwQ2k3N2pBaUJ4L2ZNVjFYdUxUMlBaSHhJbDkxMUdQV29QeHhIVFVHTXRVN2NyamlwZTJrMHR2bWpHUm96L1UrVDV0N293L1h5OVE0dEg5U2Q2ajhkVDZ2OThWVmVsaEhkejNZdGtHVjk3bE1YOEtPSzF2Mk92NSszak16RmZqTWRyaXdLbTFWbWdTYmhLUkl5anBjOUlUZXdMWG01bkk3dXVrOExneUF4SEZScGxHOGN4NDFrRUh3c1BqTHlhUXRlcjVGOTBEbzF5Mi9wblRWMGxNd3V2eFphV0tTdFpCNEYvWUNZYTljS1dQdHdqNERqQ2J4eExkeFplWjZ2SUx4WGZhSjV1WmhBMndUdjQzVUpKQUU3eG1teEM0dzhSUkNSb3UxaFVaeHJsUHVFYk4zS2JMbEZvZW1ZU0hFTmhySUhyeFhZRjIzcjcvOWxhcDNCMndNeFdadTM3cEFDMTRSYWo1aEYzN3NOVjF3M25MLzRPNURJUXlHRDJUN2ZROGZmN2dDTmlYY2ZySm11V2Z2aGhCVXNmbFU1UXBIaXR5WGE1c24zK3l0aGJGbGxuYjZSYWw4V3RSSDFFSEpSbGpjTHdDazl3ZEpFVnBxM0VLVDNhNDFyR1phNHE2ZTV4MFRMNW96V3lFRU9QTmpWL3RieFh3ak5Rb1B4MmxqRFRTNXlORktqVUZycW8zQVJqd3dzaUdzcEpVWmIzTnh4dlkyODVwQzhMaGpDUWRTeElYV1RRdmRVU256NENUNllWRkdFVFNLWC9VYVA1S0RQczVLR3lIcnpsb0dhY1dJd0FzYU5jMGhUaGR2WWx1OWd6QjY4TENIUU82b3h0S3JrYW5ZOUVoK1RKbk5ybDJBVnVWUEVlczAzNnpXN2EvUGFUcU5zdy9IakY0THdtS0dSMTFYR3dReEs2cU1aVmJpTDgvVTd5RVFYbXZCMjc5aENERmJZdkM0ZGRlTjQxd1dTL0xIb1Qwai9NRjNFR01VN0pCeE4xajZLMS9wL3JtU3c2VjloTDBOeG56MCtmaFlXQlhyVHR5QjhSMGZEMU4wTlBjU3lFNGpaVjk0NS9YUVZSTGQyOHR1Vms2eEUxSG0xd1pVUHkzWUtZOWtRRDJKdTdId0lZK0NpYWkrdTJaRzNiWFZ4WWw0Vnk0K1VYUFdaVE1XTFpGK3NRYXUrem9WaUJIM0xuVFJoK2dGUUxBNUdObmhrYnNxbU03OGNKeXQyTWdaS3JsUXVOMkRMeXFuT3FVU1JnMnJIOUFDMG5OR3FLWDhERHc2b1g4UWd1a2orSVdBMk84dytBeWxQNmNjbjkzWU4zeVczUWJxSTZGbmZzVjBOME43ZXJlaGRaU2xNdnZDVkY0LzlObGJCaG9xMzc4bjdINEtaS1ZWTkdQZWY3SDhHcEFCa2VXbmFCNmVrYTBjUUZvK1JTZ01yKytYQWhkdzJWZnZQZlA2a3BDSlpReGZYRW4xS2dMK0dEbEkxK2xxTGQ5bGVsaHU2cXQ5NHhzUXRDQmw3UkFkdGVrM2hHbjNHWUtkc3lWVXRreDVFaFJGWFYwQ2E3VlBTU0pVWEhlUG84Z1BjMFVTaC9RZmJHS3BCY29aTmRLMGNaN2s5bjU4Ukg5KzJTWUZVMWRrVmx0eUVxLzJ1T21zZHFRdEMrVE03UWxFcW00KzhzSWMxdkExamppdkpBNlVFMUF4TnlGVWVDa3hYOWZvQlhHWDJEYktQUWdIaXZCVXFJTWRSSUh1dUpwVlFSTlpnY01BM1pLaHFlNnQ3NWxvZHM5YTJRc2U1SFVrSmNmWTJvSE9xYnlkeTg4MHdERFlncXNlRWpHVVBHRXlyQzF6K1pxMTl1ZnhsSFlLRnZZRjZSMHlKeFovUjZ3U3JIYyt5bUlxMzZQUkFYNnVNbEZQZDVxM3lReEhVVlBnNFJMSFN4anR5RG96UlM3bXRUWkRMN1pjampvdGhHUVJ0bUZkbjFUamMwV0JjN0o0ZUFQbDN4cVZ5RG9zUTR1bGx3M050bWhPVHV1d044RjBpbnl0dFpvMEx5Um9tRzhEZU1WR2hlQlV4dVZKYUhBS1ZwKzc0eXg1SnBZT09kaENMb3Nac0JaRzVhS2E4VEwwNE1GRDF6ZEhPak9zMXlpZU5HWkpXV1RWcXRtMmpSTTFXeGZpbWdEejRTcHRMQ1hxemxhWityRHBZeWtPTmZhbTdNMi84S0U4c3NxWEkrWklZNy9QZGQ4WHVhcnhOMEExaTRrZWRLZnhUSy9MMjRXOWNBd3pIWWxUS2ZJWVlleFRUNmFyUkFtQzF1Y1lDWWtxczkrb3cxWmNKYzhMU1VBQXJiMEFpYjZRRWdyWWlSbE5zR0lTMXBpbzhwdnhaTVZoZDRQSy9wOWpjY3pIUVpQWUpzTkdrclVwTWdybWZvcjRZaTE0OEd4OE40SkptRTE2K0k4ZWxHU0lFQ3FjckRMZmNGWlUvWlY1VDRyU0FHQ0lKd3VDK29iVDBBbUpUaW5yd2p3Y1ZDK2NpaEhpYzMvc1ZLZFY0SUY2ZUNDTEsycG9ZNWJDLzYyR2IyTlpDbDNnQ1ZnUUN6MlNPL2x0ZCs3aUFGV2VlL216dmI0R1luRnFrTkNrOFlMOHc4L2Rqck1nMkZab3llYWwzb25lK1M4MWUwY0VnQmZlV3dIY28yMHFhSE1RYmNPS3JEbTI5TGZNVGJvSDUzUDBhRW03aEhpazR5bmJ5UEhIdys1WnJkMGEyZEtvSUhKZmkrbis4eFErblNxNGJRb2krUjZ0b2pHWlFqY29GVXhTeFFPendRVEpIM1dOZWZ2aTJwdEdOajYwUHFaS3BGMHhRQ0I3VUhFeVFrb0lYM2VZbXRUc09uRUVPQWRONmYrdEszMDg4TVZ6TGFkdkJTbFZtdFVENzJKbnY1VWNVR0dMQThQaDBtMlo4T1NEdjU0RUEvMUpqbGorZnBacVl2ZnI4Wms3RUE2alMrR0R0bDN4MHZBNzBJQTAva2hib0ZLUlNWMUo1ZllmMTV2NGFEV1VjWTN0VHRudkF1dDJQbmJUWVU3azFvazYwU3hoaC9pMzdJUnR2aEd0bzdsQ09aeDM4eHc4N2FCOEJ5b1hlcEV1dEdlNkcxcDhvdHZPZFZ2WGZibTdacG5QcUFxbXIrS3UrRW5mSW9vaGtMOGdGQmlIcmxUOGZvMGo4M1gyOU9TSmV2bnBYNXFXQjEydDhWbmFNaHJzRVIzZTJLaytXelU2SVYrcGxka0c0RW1obEdzY1d2QW9FQXYyZStUeHEvRm5tUzZ6UmIxMndrUXBMblRhZlhsM0d4YnQyS0xFRzdmUGRrOExxalNYS09nZU84TmxpenhIdzdsSXg4ZXJDd0dYbGhoS1BPUVIreHpyM09tRVQwNFo4TWdUT0xHbHN3QVRCYkp6WmZQZTM5TXRLQUFnaVFUbzNmMUZHd3RURzlTc0loVlIycnBsK0dxZWVCWHBJbUR1V0pSZGFUU1A1aXdQekIzSXFwN2tVbWtTWjNvOXA0TkpzN2pUako5Q3lSYkNSL2NSTXdVd1RMbFNvcUNGVzVLc05oS2tzVzhGQ3ZhZTNadXZDMmtES09uL3FNMnBqVmFBVWRBVXljT0sxWnlXdTBEdERNa0pBKzJRZ1hwckNXRFpGOWZqRThGRU02T25SODJrZXRBUHdmWkNvakNpQWk4SUFPSmZYTnl4STlWc1NGZERySmVzcDVWTG5hN1hJS05FQ2tqaCtNMkl1VGZRdWUzTmgveUFCNTJwVllHVkcxaU1UdGE0eFVzVXBJMFNnYmtDVHJ2Ykhjd3U4bWVmekRFWXJaaEZJelhna0dnYUprM0NRYTFncjNmOW9Fa2lHVnM1THdRODNhK0d0TUFzNUhVSm9QdDdNQmd3RmFiUDdaOHRZRlcvU25Eb3F3b3pRNWYxdStoN1JNbzBpNXppT2hmYmg4YlpZWVc5cm9Wc1ZQakxNbFZoekQrUjl1VDh1M1hFZUhHUGpCai9Lejk1eEh0b0Z1WDcvWU5VeDNrVElLM2htVkgwcUJaT2pZbWpaKzhadmFmQnBGUTBkdnJqOVdOa3p0YUo5QVNoMWJjM0w3Q2xWTEs3R0RPSDJlaGNMZ3pDaE5sRTZNeUJZZStCbXJPY2hBTEY2RVVlTGlsM1dRUUsrdVZ1elJWdEZ5RnhZNlBDTGxYdHBqVXNUU1Awa3pmQ0VjN09raGxrdWFkOGlkMnB3OTNURjdvMHl3aTZ0RGtQUlhKVS96TWhHWXdhVkFYNHdQMUVkbHdCRHM5S1ZsVnVmWHZkSkIxYk94akdGL0RTQktjd3pxUTdVSkZadVFYUFZEOVMwelg2eUF2ZDNxbnNvNDFUMmUwU0tuVEd2RzlJeVlyckN2T3huTXN2U0NSemN4TEM1TGRlakpwK2Vja0I3aG9ldzZ0SXJqUERLZ205bkM3ZitBSVc4OEFWVkcrSVlEUXJIbkhBeWZDRVBLVllMa1F6L05QY0NJK0dYQ2IvUmtnMkppU2V3QzlCcklGclgzdFlOWTl5Szlzai9HTnV2OUN2dUh6TXJDWWNrdjY5MXhKMzV6Ri91bEl5VGJmSFhsTWZWb05tNjJZa1JYNTFkOGg0dFBYRWFZV2JBVEJJTWxtcFJDSDhFSW1Ca1ZkNUlmNDhiNVM4V2pDT0RXcjdaS3d2RXJOaGI1YU8zOHViMUZkVEFHNFFYZE1lNURkUXZoVnc1NGwyak1zbEtsbEk3bFBGT05lY24xV1FZT3BsQkx3SkI2dGN5NENMaEhCTDBicGhLM3RCZWFDSFZNeWNyeDViUjAycEJWdlRlU3RFMkxCWWxRRzIxcUU1a05nK1RyQ2U4OGhpVTY3dWZFY1E0enpraWRPN2gvZnRYQTlsWm5QcC8vTldoUkdaS0VnTU0xa1BwY3Y5UktYZnBJcGF5RjV5bmUyNVV1MHZYd3oxZ05zcjZOVUFNNVRIL01oT3hJRmtEa1QzUGpIUGpVeDRHMnVkOEVCOENFczJSSEY5R3BvT0pMZjBzSXJVdks3cithQlNBUndtekl3cVhRUmNVM2VVbHkrRDlOczZIQVkvb0tEUW5ZeVdzTi9URzg0U1M0UXJYQWt4bzRYQUNFVksvQ1NpRkVZeUE5Z0d0NDAyUFN4RVhiNXVCVUo5cllpT2tRMmNtWWxOWUpGYjRrZGxhU0dHeHhNYWFTZm9KelFTa2VqcmpLV2V4MGJhVVhsS3NzNzBzK0l5a0MxV3Z6KzNTNEhUQUVWazUzMW9QazFuamxHWEp0QUJWOTB2SVFjSDErVU5CZmhXY2dIUmhCR21vSVRJR0hYRlcvMTNPaTlVZkhyZnpwVzNxUzJZRStuVFlrOXU3MWFKTnNTb1NNcy9KZDBweThDb283MUN1Y1dUNnd3N2Q2SUhiS0l6RnE2K01mek01YWJIYWlQY2NXTDk3RmJjRzFWWmJsa2xValI2am5DZFJMMHkwTEZ1TWoydWdkOXFmeDdNV1NwSlRuWlZHVm5JakZla1lhMmFjd3Q0QU1MMnhCdU9ncXh5OTZ6bjN5WmxsNnZ3RUtRcXVwTXQyNXY4WURKc2l3bkRvQm9sWEpyb0MwY01oYVdnaFhqdlBGNytRdWxpdHpKN1BFTEFNMDgvQkdZOHBEY1llWkdTZVZTNVNicUhqVTErVTkzb1BLcW52aUJkWUZjSVR3b1F3RmlTNkVTYm81MVBXMVhhcmJzdnRUWUs3RjdRT0R0RndGZW92QWhqTVZjN3BKMnVGNmV4aHRLakVqcXMvWmYzZnlLT0VUT1V0MWZhelluQnZPdWc4Q3RtQ0xUUXpyNVNLZmhZQzdwRTVTNTNyY1I1WVdtaWVkeVYwdmRGVEdpcDE3aU5DUDVtSEZoNkwwYVJlRGszdi93cnhObUpqQ2g2K2J6T0NXZWYxRk9NM0FwQlFtNDRjRi9nVDNnUDUydjdRZEp4U2RYUG9Sa1k3YU1pZDduelVuL3ppblk2LzNocEdzaWx2eGpDcnE1MzUzZVF6YUMrSHQxRDBHNWhYdElSZlFEOEhTYjZLWDVZdGVhdVlhUEtxYVo5b3JnbTNlN3l5Vmo0a3VhK3UyRGdwenhwVEEwZGs2cHFsMDZhVlpERWtQUlluTnNVc1V0OXRya1RDZkdWcWFGbU1IMXU1M21rYTdUTC9EdWg0dEZzWmlaSU1jbE9OQVJ0YkN6cG5URkovUGxIZmhIcExzOCtlaHR1WGJKcmN6QStjcUpFMENwSTR2NGtNa3FJclB5UFJvZmVBVE1uTE9NQnQxL2Q2am5nclJTb0NSWGFWQngwb25YckJCNC9WejY3S0ZtaDNWelhNT216NzJmSHF4TnZ3Uy82Y09KUnJtdnVmdnZFUFpzR3BBc01hQ2dCM21aSnJKTGh2bWxYSTI5S3lGUUVMbjlpYVBNY3AyMWhUeHVXRkthN0FmcWZ1anFpU0ZxQ0UxakF3eGdqQVU0ZVIyMi9uNVV2Zk1INC96WVpIWFlzdXc0UGpLdm9vSXpPRGxvQ09jTVIxSHFVVG9yZHVMVUZRdS9yYjgvTkdPY1p6d1R2QnV2S2xNaUtFamFqTnp5VStNbGpTbmlON21WUDVaVTQ3QXk0bGJEbGR4Vm42QUdsMmZHaThzeTliZmZvNG01bzY1eFY2YWw2a3dvUitQdWFwYVl4K2FldXNYNjJoUDNTaWNaUXdPYzJSb2x5eHpkSG43Kyt1VXJ2YnQ1a1c3M09yMkZDNWIvdWo5NVQrbWc1V25MZXFRVkppMmt4OWl1UkMwTzdaMlRQUkpNbkFLcEVLSDdmSTkwNlNpNjNZMU5Bckh1OWxiMmtiQVhSMUphY1VqL3AzQnE0K0JJSGNlWjhnY3M5SXVBOE1nTmkvaFFsS0lWeUhna0NBeGw4K0tqL3F1SGpUTkp5OEpVZ1hBTFU5VkUyQmFaWmU5SkdpY3JRSjYxd2VtYjZqMURKSzYxRm0rZXkra0JqTWU3VXZhbm9sZjFYdmlKcTh3MVFCWTZkTkZPSnJ4RS9EYnNGbjhxb1FjNlYvYm4zSi94SGxrcDIzcXNaMTQ3emIyTUlUTWZ3UjhTclEzOUhLVjdjUFJ0UHdZWTRXMEhHUjhhdWlHUlJEek9QZDRvOFZyTHFGUVpJMjJ0bmp2R2k1eklhU2NvNXUyL09lSFhYRnMrSVAwL245R3BMYUpVL1VBc0Nhb1RRdkVwVzQ0RGM4aGhWQnFaZjZmbWdrcjYybnVFRjRLTVVqenJraU5nRXJmc1lQZHViUVZ3Z1lvZVJ2bWw1WHNlTzU3VzBmRlBOWXVRSkY3YXVTaDBqMXZpR1Z0TEJnRVFYZzR2OW5NTmxBN2J6N0ROdlZXNlN3TEl3OERuUFRxWlYrUllJQjEyYkE4Q1ZpT3YwN3Bya3J0RnlRdGNDK1FTV1Y5RWgyQ2NPZ0FTa1RBWjF0MWI0b3RBK3lKMjQxTDV6bmh1TjNiOWpJTC9TRE5QZFdNb3llV2dyZ09JMzQzSmhkRktMWUt0RTRlNlUyaHJGd3g5eEZwbEl6bDRxNEI1RHFocnBwc0JQSnNCTGt6WlRkZ3MwNlpIQVJVZUZKWXZUN256Q2xPS1Y5R283OFJJVkV3b0piV2lJeGRYSXEzZktJQnRZSGxZMVJXd3NlOXBtYzQ2THVjSDlWRDE2b1lpcy9QSXNOUndQWEpYYUlPanpzYlltL0tCS3ZmQmk1R1JqRkxjSXliWFc3aDdBYmxQUVdQWm9tT0YzRTAvQ283emV6cDFLOXRadGVKUURJbUM2UTZlQlZLa0hURWpGWmd6REhUMWhHbExsUmwrbFlzUDJnVDBtOWZzYml3VlkyQzZQOHhwNHlzR25GYmhLa1BFd2FXNUUrTUI0MFRDY29ra2RUL0JxemtVaTVoUUdKVHpXcjg2UDltTkVhNkE0NS8yS2tndEV2aDJaQkI2MVhPR3RFeS9EU244Wng3YitSZ2FOS3orQlRaaTRPRVloNUFEd0YwVW5mdTJRcEpwQzYzUGxIS3lpcWlsTGhTM1d2aS9ENjNxVTZEeEJ5YXIvQmdXS2daWE9qQTI2aHljMERTcit4aFFnb0lkSkRKaWFSS2NDaFVFTVNqUTNPV1ZXb0k0QUU4NWFHQnlPOVNtcUZxbTJWYU9GeElXM0o5VEcvVTNVNExzNEV2M2dyWkRVaXlMVXpacjhCQkUzbW4xZGJYYVAyYXlIb0NwU0k0S09BVVd1YVF5Z1FOcS9hTmVZVlNzM2dnb2IvUXlQYVg3aWJKZy9rYUJXS2hPbStEMFBMaGFoaW13L2dKSmFLcDlMS0pqQjJGQ3d6MW1KUHVYdS9VaW9obHcrRUk4TG9HYXRGemxFQmxDNjN4dStPZXBrbXJMNGk5OXlTTkVBZ1VuY29NMm0zSUF3cTViWWhLdjZMajNVMjBQcm9yalFYU3lVcXBVYnFzNWpXY29Lc2t2dTdyQVJXZ2hlVzZBM09MSTZIb3ZoNHpOd2ZaQmh3b0ZISHhsT3ZMN2xXVmdOaHhlV3F5ekpRREl5ZGhkdHUxcXR6Q01SZG9GY3QrQmNvZ1o5T3pwL1FEUVRHNFZVUWlZNGRuQllyT3FIOWZyVGk3STBiK3AvZ1VGMjNGR1NodUlheDZMRVFhNnlVOTlsV0d4ekRUeE95b3lnaUtjUEpobXVCTmZJKzdKeGoxYWlZaEpuOCtaNGRzbEJtTzU3akk4V3F0Ti9aVlQzYVBIb3RMSFVaZFBkQysrSWFNUWxEUzdsRXRaektlOVJqOE5meCtlS25wWDFMZjVXTkNZWjRwTGU1K3FDZG04eC9KSldMNzVNbGxUdmJIMkF6eWdmcmdmSEtmMWhCZ3F6Wm1EeU1EWU1oVFNvQU5uU2ZwQ0pqeHo3SDBqZjBjL0haRmMyM3Y3SVl6VUg4Q1Q3NGNuL0ZPd20zQlB5V2dCbWp4SmNEYnlycVRDYVc2U3UvN2N0RmszY2NOZ1hDUS9CQkw3Wm9oYlFHSUV3QjRYM2xNc2ltL2dCbHNzK3RkcG1ZamthdG83VUx0VUhxUU5NNWNpMDloa0gzVU8ra0VwMDRiL3VCd1NwOEoxa3k3WllBbjA4ZEdwMHd6ZGNEMmxHVHQweE9icEpKOGRRbXJZeWJRaEZSRkNJVmFlZ2RWUmIwdzd5c3A0UUZMdWI4YlVsWHpwQ3BoM0VobWViMUg4Z0o5QmZweWpPL1lVUFRUb01SQ2RTeCs3Q3BwZWlpZzhWN3gxeGY0V3BwYWRGRTZHU1NkQVFLMkRxZkNtVlFwa1JPMGIydXlGZlpBcjdOaDdHRWY1b3RMcE9BbmJ5em1aUDNKSTFPMHdnSmRxcDZ3NHIvUTlySmNnOXMwUlorVmF0aEYrYTJvQVQxcitkSEJIRVRucGVOMnZob3ZlQWQ1c3dQNTd0T0ZtT3dzWlVDSEU4UHlWRU53MzVWb3I2VWpCdnZmVnk0SEprU3E3dU41aWJzcmZibWltQk56eXQvSUtBdVpFQnd1aHZXdm01SVRORzZ4UTRRQzhScnlNUlp0L2VWQWhUVUMwemZUVkZqbUdySTFXdkNibzROdy9icGQ4QUV2a29YeElwWUdYcFRIbFdSRXIwMkkyVU9JVUF3clU4aGdrcVhLTjdqQlVTUUtyTG5kUElqZkdDclN4S2RXTy90Y1JiRm1KdGt1NkREd2tZYTNjZk96SXNicG10NStXSGJudkJ2Y3lyMWY2RHBTMVQ1Vlg3Rll4L1g1RzJnM0NKWW04NzdaVG1SdEpmVi93MVVqNzJSSXBsMWpoU2FJU0NxVG1BS0pKWnhlUjdXTUk3Wm1zQUhYUDNzLzNuMmN5UTlMSDRGVjJ4NTFpVzluRkxsQUxrOGFKVG4zTWZMY1ozeFVKYU95YVdGVlFCdnc2K0hUclM5bEVYTGNYSlNheUlQUGdlZTVIVDQ0V0hRb21uVjNielVLYW5ubE9nQW9IU01BYnRCQjF3UmV4L29jMzJtMHlFaDVOdTlaTmQrWmpKREFEWHlrdGdFcEpsYk05Ni9RSmdPYWRzaE9NVWdmNEN3NXdraG1wTmgycmZoTnpvNFlnVExyTldXcXNoTE9ZOFZqTS81VTlaeXcxZm5WNWdoZ1lKdFBaWk9LNFJ1Z3VUK05kekpyd1B4RTdpeGphZEdsRWYvUVUvVFpvRXZXSXE1T01Ndnp0dnpIQ1duZmFDMit4c3FMM3JKQ0g1VzB3ZkEyQjREaWpxbGJUTGNSdW16VTlrOXRRS1AwNkF1dm5yakJFamdTQVhheXhKbE1pU1o4QmRwYk95L1lhYStwM1BBNGtIZFR4cUh3S0JVNXJnNkRhcDVXelVmVWgxeU9jZU1PQUl5QlN1QnVPVTNSU1phaWZZajJoNVNSd0ZaZTFrQlhOQlZLaTFncTJSTytZZWVuSXhtSmcrSklzL3VqWElFaE1nTktxbVNjaGlVbnhCbHZsdmliK2tNM1BBNWVIWktCL29lcFhmTHNBSXlSV3krN2pBdlBKRmhEcEJPM2tlSTFoK1lROVJJcUZNdXBGT01GcGVaelUyMzVTZlM4Ym12NGVxZy90SXV6QVFYTnE5b29VZWRaTGxSakJKc2dDaVZieHBvSWRBZytDM0tEK0YrK0JieXh5VEpHRXJDYWtncXlmYUJlUnVIaUlzVzFoTUJ6U3YrMmo2M2dtY1dWeHhpWEtXZXNiMWRtbzh3MTlvOUFuMFpHdlJMakhHcDVBUzlyTzI0QXFwRDhGeVA2ejVlNjdOOHhONjE3MTVaK0RnQ2E0c0xoSFRmZUJoSFdwalRhS3JROGdrakdPOHJ1SDV4TU03TThKUEJRcDlMQ08wVWh4YllpNkRSQVpITXdNNlg5eWNBa005bUdoVWdRN1c0L2w0S1NFTmtEZm50K2l1T2FJK0ZXdXFIMmQySkVRVUpZNnBrZkZibjJERnM0aTVhdEFXU1h4a2gyZXJhbzBsekRCN1Bpejd1TXhGZUxGeWRhb0RyeXd1Mjlla2x5bytCa1J0aXhXS2RYY1BtOFpEUDV0dk5IblpoWmdWYmo5Z3krRkNtQVRTL2NRSy9MZmN4S1NVTU5pL0FWN3lxQWJLVDdqZGF5YVdBTDh5OGRMam8zQU1HSTlDUGxVM3dSSVA0UnlnYlB6cnI3V1hDVHNlZXordEtkM2d4RVVnWWNIUWhHVVMyT0pyeFRqTCtGbnprNTd3TWhtQlBTc1JERFBHK1RIYmVNSXRZWDdyZjhZRHQxU2wySzh1QlJwQ0tpbksxQ0FJbmhLMkE1d0tWamdjT1hRR3pscWFQUnFGK1VPSW5DaThPcnZWTUlHUGcwanNRN3hnZkF4WFVCQm9IMlV2U25ET0Vya1IyYlI0Nno1WDlvc2o2WGUzZkkrUGFSZ1lsY1YvUVh5SVE3UFpSWWFKRkIzWDhYTHBYMVFIMXZPM1BoLzg3MnBmUUZEQ2RTdFV1VjFKcS90bjQ1VlBHZkcwaHN6WGlHOGxrQjB4amJ1OVdtd1hsQnBWdWJyZSt0eVFxVGZQWit2S3hVMXVYUVo1bVozZnZyREJ4ZHZPK2RDckpiNW9WZktsQktSU1I2UUdEbGh3d0t3TkRpL3kzZW05ME1RWS9kaS9ZOGNXM0RaYkI2Si80WmJuQlhsdERGeHJleFp5ZnlXUi85bFpUeEZodEloeTdhU0V4QzgrL2RnR2VzVE1UUkpzNTArMFBNVFUyOGoxL2hvaTBDOVFGNjdKNEpRazN2VDBVZEN4R0VWM2l2cEZHaUEreVlyZHlQSXFuRjJHc1lsVmJsV2Z6d0o2a0UzNkkvcEtTWWY4K0lEZ1VtMkZzajF4RElSMVdaTWhIcmNTc2ZMWkhCeHAwbndmMG00c2ZTanFHelVxR1BSVmZPaEw3Y1pLMkFDSzBISmV2VUpZVmNNTzlqUTgrSFBwdFlrQ1JKQ0ZHQjcwbWMxd3NtNFRIaHZGYmh5Rm5LZzJzWUxpZG5jVW55QWREMjBza0wxampsSzBJK1NlVXVqS2FEWFU4cjdyMm8vbjNlaGJ5dWJLcDJFTW1TSENKYTdyWS9oZlZUbmRCb2xmTnZzWHl6WnBybmQ0N1NrQU5ZZmMvdzZvOXBxRW8wZU5VYk5kZjZiYlY1aWd1dkUrdytYS3BucXp0Qm9jU2g2eTYxQWNmL0oxaVVCWUgyNGNtYUJrc0xZSWszL2IvTEZ2blFaTzllSzYyemJSR0NaU3Zxc3I5dkgzS2taN1p2MUR3VDlReDUrZUppZ2s4RDJCOVc2b1FDY2hYSFEvbmVIT0czSlJ2WlcvMTRTcVk3TEl0R2tFZmxoL0tZa09NOXJ6QW9OOUNnV1RoY3N4aEhvaGMxK1ZuRXZraXVobXZrM3JaT2h2S2RtTXEyY3BEZmFjVFRwYTRRQkhuRGZEOXZmMjR6N1dvaXlKM0tpVEZkcTBUQnljcEJSeFozS0JLWHlWeGwzRVk2SktrbDdDVDJQb2JyRjVJazhWcWlxa2RZUU1Nb1l2WWUrWW45Wk1PU0Q3L0tJOXdPSWNTeHRramU2SDZqc3NGTC84MlZZWmVTc21sdDluR0cvWWQ3MUR3dHRlL2F6Qjk2cFc3ZHREZ1loTmZLalR5ZWpra01TSnVlL21BU3V1a0lidm1hRGxVRWZSZ3prdTQ4blErZHdZZ09TVyttY1Z2NGdISVRPalA5SGE0T3dDb2RuRFlUT0lad1lkNjh1NzlsSTFsSkwxeEdmZWRyU0ZzRUllYzNPZXdrYkxiSFpaRDdsVUNObDg1cnY2a3JiaWlGTDdiVnNWWTlQN3V1bFE2NlJqQWwrT0Qzam5JWG40MXNRQ0RDTmU2THBwSFlnTTNMNS9UNkFudldzVUY4VFZxKy9UNHhxN3NQOWNKQlovM3E4WDhUL1dENkNZSlNYanFqVjFLRStUVytOdzVaZXNQblZzTGY4b2pDQVZKMlVBdlV0U1I3UzNVZHd1T3lEUTQvaGlwNFJvb0k1eFpsQVRTM3d0Qjk1UzhPWUR4R3RBMHdCR3V6UG1XV0w2UWNXd3V3MWFZR2grS3ZQcEFXTFYvaWp3TnQyQjlzYkNMdngrb1hFN3RaM1VjcWxDcDJibFJJdmI1VzhBOUpRTW5iMFYwWWpjSlJ4a09ic25OUmpEcUZHbFlmWHlXTlc3M2xLR2JjL1FnelBiTlpsU3E5U3g4LzJWNVIyc1k0dGsveDVTaE1WZGh3Zm11K2UrWERiRlZqRzhGZUtMbUpvZGJweE1LSlVlWjc3cXR1SmF6MC9ncGY4UlZ5cGxEdlVlZ3hrZys3UDIvN3RlOE5QcW5lTS9iQlN5VXhvWEJhdU9oWExpYUNPV3hiNzlCWWxnbHRicGZhd3hRMUNsSndsa0E4MDNXa1pvRWhCZS9EMEpwL0tuQ1NaMWlQekowekkwZEJRU0U3YkpLMnVQblk5YXRWUEh5cXJWRlVsWS9mQy96WVNqMVArZjMvYi9jTkY5TXlUZURyQXc0WnJjYmNZRjhxY0pJeU9SMElGWDRoamZVUGpxT2NTUjVMRTNCeXVmVmlpMmlBanM1dXp0SUNnQlV3Y0NSbURnRUlRZVJUUm83dG9kcnJqNVpSYnEyeXI1QkhuSjFUZm5BM1JkaGtRWGtzNDhXTlZUSzdMNVJYWDVVaExmSkdlcDNGRUtRUlcrQVpRaTRoTHdtR2NCTENrV0tkZFFCZ2gyOW16Q0FHeUVpQjdSSVVqWTZsVmRFTC9ueU1nR0FITlBrS29TT2lGMEtNemI0Y3VySXdNRnJvZ1U2NmJLcHNxYWpsTFp5d2VmQ2x0N0c4aDY0ZVN3R1p6RWNxN3dUemdsbGRYN0ZySmdwQXI5WC9IMVNFMU5nQjVvQUdRTWtseGVsQ1VkcnFvQmlDMmtHWHQ5SkwwM29KSElUYmJZTmdBaWZpdmdJV01ENy8yZDJ2cDc1Ri9OWkFSTGpLWWNGQ2VOQ1hNUzRtRVY0RFRBSVkrSmN0Nmg4WXdpQnhVZFZROVRSYmtIRzN0UlowaDlhbks2VldicS83eTZxN1J3NG1aYlYxeVd0U0Z4WFlkZDcwakxTUVQyMzdjbGJidGEwVkt5SW1RTnF3ZmpaaFB5MDRvcmVzakFJMm8xMjg2YmowOUZjdVVpTGZpalI2enVvMnFIRjBnL0NacGMrZGZBZWZ2V2J2SGpDakNPdjJaSHQ0NEU3bUFDbWtXV0ZqcUUvK2FpM0E3R2N3ei9iWlFVZjdEaXlWZjBPSjlVdU94TmErU2lJUE5sdjl6cGFXQW1sS3AvUkI2dWc5WGF4SGU3bjRNVjcxbjk3b3NCa0lTU0M2WW1ZUzRTWCs1VlkxaGhGSlBMRXFodHlaL0pLaG41OEY2YXFBdjhkbXNrWkRJVzBONVVhcFQ0Sk9CNFoyMnZ1NDQ0RmpSVmwzOXNxMUxnanlCcHVnNGVwd2sySWpnd0RKWTRqenlpaFc0WGV6Yk4zMUlYV3JUR3JoMEtkendteTROTEwzUGo4b0lRSFQ2YmR4YVdxSXZ5NHk0ZklseUNac0RkZEpGeUtFNGw2eW9qYmY0ZkVOYzIxWWM0TFp2Y0dIOWNLZDhCS0s2ZTZTVzdLWHZ5bTEwckhOR3hJTmhXMndWb1NyVjFZSmR2Q0JHWGl5b3ZERUNoWWI1cDZ6UWxsa1BlZmRucWI3V3RnWlFtWlg0djNrSm1LN3cwNVBGdi9YV0JFUkJubEkxeG9zMnh1RUNlaG1UY3JIbEQzUGVjeWhMWW1uVjV2UDRRVEtHR2NNbXRTVVFaT0JCc3Vza3FmK2NJMTVyL2wwL0tDSWlKWWVxNVBiVmJEelF1bnFIT1AxMmtLZTJ0VEZtbldtdGZXZVo3MnhxaUM0S3RMT2h3eWhWWlg2OHpGcWZ0cFFjSzR4NWFEakhFbll4V1Rlbllja0dOLyt3Z1JTcG5nZXZoa0xEdGhXQXJjc2luOEhMYk1BdG83cE5odGpEempFK2w4c0hobzJrL3QyZVMveVZLeTl1ZHZGeXVMaE1iY3dHMFhDZ2dXNDhkL2lDYWdSRzI1b3dDRHRkdTBpbVJ3dGx4b1NTMU5GQWgrbFFramRGb2loVjdPaXNyVTBIWHMvejd6am1jQUlnU2pueXc3ZGVxVlVqTk9Fdmw4dnNjMXdSM0liOU43bEFWNzA5eUxtMkJFcHh5djNxNnJXbm5Od0QzNk5EKzdJNlFMVkt4TnYxdzhZa3JIcTQ4bzdEYkFOaFJWQWt4a0RLTnNEdFh5cFNIMWJwaVZJUjBObTJEeG9KMitsQ2ZJbU5UVFA4U0FzQklTelRVR09aZWhuOTU2MjJGRlh5d0RCdVlEZ3BBQnZqRHFVelZkRWoxL2kwVEdVeTdaN1VnVmRGUjk2c1A1b0pjb1lNY3hpTmk2dkhOeC95VjB3UzFlRFpPQjJoTzhzc0M2TWMxaEMrTVVSYVVFTHZrVW9nSFM2emZncnQvRXlOVHlmZ3BwZWQ0Y08yNjlQcTdKWDFJL09Pck4zWVZkU0lZbzZPZFVJUW1ZTXUvM3A4dU5xdDdyYjVaR2hlK243TE9ROHJBamp0SkxXVVBMVDBGc1dBUWpXSDNsWFJWbDRyb1BOZXBLV1VvTmp5bDMwL3J3Q2FhMWFtOVVNc3ZqRVVSaVU3WWVBb1RNTm9IMGZZU0UzK3BjQ0hJb2l2OVdwSTZoWHF5K25Ibk1wNThHZnd3R2lkNEMxdkcxcndtS0Q0TXJyZktURlNPYitYSlpDclZYblp1ZlRyTnAzZ3h1cEN2b210aG9BcTJZekhiTjA5UTRuNUs0N0VUZ25IQjNZWGFXT2ZrQ0taZDVLN1F1Q1RlY2NCby9QWW9UY3BmaWFLMkkwTitEcVh0S3ZhS2hJcldZWDRkTjVFSnZlcjNobklwcTRmRGdpYUhWcW5hVnpsdC96VlpnRzdzTE9acWdHZ3lOS25VekdyTFN6WVRkRFI2eWVENlV0RVlqRnFNdzFFcVoyZlVmdGhGOGhKeC9ZL0crWWRibDh6ZEs3S1NUTnNWc1U2K3NIcUFGb0RXQThscEVCK1lkZHdmRXBTUHAydDlVL3ltUmtYS0RaYzJoZHFhczEvQVhoVkwvSjdweXFTdkNuQnMrajlSRlVkUlpxaHNFMWJuZ3FlQldKSDZhRW1JTzFidTk4UDVHWUZiKy8ya3d2SUs1T0JxMk9hb0pIcGRTSitFenhkVEg2Qmw5UXpFd0pvZXVpN29CK3BlV2UyaExHc09qSEk4bk5Yc0svU2haNDFNVklQdEJKczdjNTI5S3QrREFqRCtsVy84Ums2RnBvQitVNXhZcVZGSDBlekUxaHdKSGZJVmVURFp6TXlBMnY2SjB3eU9DK1hROUVUYkl2Z0h6b3l3Ym5BRk5za2RJSUZGaDNjMlBzNXgvMjErQW5ZSTYzbkFoMlp0ZHBQczVMV1RJNGppWE1Qc1JxSU5hQyt6SkxISzFKekEzeU9QOG9qbStld0w5WDRESFdUVVQzVW92YU5aemxpanpaOWVQZGg1d1VLd2xYQWxLdUxZNzFIQzZNNG4rdUd1VXovUDVBVVBUQVhzZW9xMVN2NHJ2RStzcFYxNDZVa1BvQjNBaGpkM0pzMjkvaTExVlVneXVmalFsdUdFOFVzTnE0ajR4emJWOVpCbHZnVk4wbHFoK0xOeG1MSit2RGFVbEJuaW1JWlU2VWVpSExxalN5TWQ3WWtpb3VYRVp5TGxtdGovV0g3elpkemxZT0JMajU4elJlK3B2YVlycE5zU3dYT1NUZUVRV0JNMmRWRmI3a3VOK1VEc1YranRuODltQlYrSDR3dUg1MnhpN0hiTWxkc1VqbnE2Y0lWMVY0Um84R3F3SlEvSlhSY3BBanloTTVsRFcwTWxnSlJIMStUZS9WOEtRQ29RQUpjWlYySlFNZXVrWTd2WGFhWFVBZkNRR2dLcGdsWW8vcVJyZ2xBdE5YcXhlOURDR0tWMStrZ29YWWpDYitLTVRrZ1Z4M0Y5UkUzeEM2UEtHdzExNmtzMFhUOFl3b0phMHMzNm0xVEhqOFpaUzlKd3lRZkxBeFR6WGhtcktmdWMvSVJROEFmSHF4K0FsdlA0eDl2T0hMMFgzT0JSUDhJdW81UjhSQXFVNzVpM3MxU3RiNUV2VWtER0JFaVRWMXByY2VGTDRQbFRGM01KY0s3bDE1bGF6dFRQV3JjU1phL1YwQVlCZVR1dWY1U3N6d2o3NzdTVVp5eGU4YUFDVEZ2QXRJT3U0Vjg0ZFRsQ0UrQTBLSEpxMkxWVFlVdURidzR1dFNJSFNHUVRQUDdWc1F3aDZESW1CWVV5d01mYXpqM3kzMXJBRWVPUitlN2prRGtSWU5Ib3hVTTFYUis0T25WZ0RWaUZCbnpuQXA0TTM5eVkwRTdhc0pmdzNBTkVZU2lkUGovV0RMU1Bkc3lDU2JpWGlDeDFCYzdWTUxYSHZNY3lVakhvc0FvQ2VKMVh5c1BHREVNRmtVTU01djEyeWQ1M2tWWEQxQTZwM0dUN1ppdHdGNlFIZlp2RFU5TnJKSGU0NTVlaDRqRWU3ZVRncW01LzdKNHlpREo4Rng0Z05PS3pGa1NHSUxNbytCUnFxcyswR0VLWDZLeHM5RXRHMjVEL2g1aW1yUWk3VlIwRk40am5JRTZ2YWt2ak9hYyttdjQxZ2RJb0hMckZCbHNhT09maHRXR1dQN2Q3ZzVzNkQzVXB6ZWx0YVpnOG51eHJmZGs5V2hCODFCaGpMejRBd2Y4SkNEQnA5NUxmWEFvM2JYQWk2Mll3dkk0dW5UdGcxRDluYzF6UWtuSjZlNUNUSmwxTlVjMzljSDVCZmo2L2RxU3lMZVNnWGdNc3FRTmVKUzlQeWVuWHZGQ0M2dFB3dUZkdFF3K0lPcS9JeFV3dzFBekM5ZFd4bWt1bjlIeW1rVTBOQUFSOTE1VnhLNDJydktrWFBFbllubHBYcXhMSkNyeUNGK0xvRFFWZkt2anZyM3FxMXRNa2s0YzJFazQ0MkEvbnpnMHZ2ajlwektlRGVWVzNLNFlSanI5dk1HTzJIZ2JvbWd4NjRQbU1ITGFTSHFTekxyUjQvQ2d4Sk5STzJDelJlU2lMRUZPb2wvdmtDU1dINW9rRDEvMWt5blJrLytBTjhVazYvTjFkWE1JaFh5Q2xPbWtFMDBTMmxBNmZpWXpXUDhOVnVwNHFOeS9TQk9UQjhVVHZCUVB3TzZDYzg2Q0hna0JOaWhPQlMyRWZNaWEybThsVkh5bmNCVGtXL25VUGNUblUwanNIK3ZRRmx1V2VkSWZDYUIxTHA4cGEwbnZQTEZxZEx2VE1kK3lzUmgwMFJUYlN4OFkxdUU5ekZSVzRyMDdzRXZtNzZqNE04WUNMdElaQ3BvekhaRERMMnhJelliQXZQNTlQVXpvN1VTUCtJSlMxcGxuVzRhMDd5N3o1TTdHUjVCT2Z2dW93MUFmZk1vOWltS2VvQmVzNzVvMjNwN2JHcjV0ZUd3MC9wL1c2VnFNK09aSG1mWUJzQnhJMG1iWEVySTRFUUxVUWFkTXJTVUdNRDF6VEtmRldDZVlUQTlETm1OM25ZckhpSnIxWnFwTXZ3Q3RzNHdZT1hwUmdlL1E3bEFpYmpYK3ZLZFRLVElvRG0zb25VeEVRd3A0bVBsWnR6YmdhbldvbXFaaS9kUDVkcFJWT2g1SGROaDIxWW1hMUpNOHZhM1RMR0hLV1crWVhBQ3Q0NlpMS2pTNFBuM3Vrd3FFb0Y1RXNsRFc5LzJrdnBkZEtpOFZzaVVLK1JFL05qeVZlalBtSE9Gc1AxckFTNmNOQnYwOW5UZWFNdEZDVEJEZE1xdGhXOU5ZR3NibjFjOEh1V25wdTIrR051RGZNWWl0Q0IrZjk3YnpXRk1zTi82UEgzWXkyNm94Y0J4RWdWVXZZWUFzeWdvb1N1enZpTTZqWURySXhpVEhOa1gvVUoxanVYZHpxbnZNeWVXREJEOUltKzE4MnNsamJyZnFOMnlqbC90RjV1TkdsYWlFaUhCUEZyejEwTjJsQlc4K2owK0hkem1mSXg5SEFETkhwdmt1MnJSRnNkZXZxdUpNTFN0Mkg4NHhNaHFKVlpZbStuQ09rRmw5T3llejFSNm9uQjR4OXZxL0Y1WldYOUVnVTU5WVJCZ0ppT0J1R3JGZkQxeHl5NmFoTjl2SWJwc1M0SkFSaWp2RldZYXp0emZoU0ZTZzRQQnpHdHIyOTJKWFVHb2pXYzdDSHVhVWF6MngwMmY4eVJZaGtlenF2UjNSMmt4N2hWWFpNcGJMbkoxZ3ZQcjQ1Ni8wZkM3NGNDVmZtQ0lyWjA3WGx1dkJuYkpONDJvazNiNmVlVCtXbG11QlU5WDF0OFV4MnEzclhzTXRKVzRNUWR3WjJSN2xaMTVKcGVYdG9PcmhVTEowU003eWJ3WlBmWStQT2dhS0x4SjlzVDJCbS8vSFF6bmtvbmVNalJ5TU5PS1hWVnhZa0xDWmNuYTF4dHl3eUhJNVduT3paczUzOS9qNU5xdVpRaFRiaFBYdUFwU2RHREt6cFFsOWtya2ZSbW5hdFRHVzRTc0xuUWQvc3QwL2xUV0FSUnFCMDgvZ3lRTnZ5NVBLZkJrU0VyZmZZbHRlRDBka2VoVTZOWGVHZ05sdml5aWhkenlZQWFjZ0c3YWovdElLSGVYa0hKZmxhU1htckllUzBYMVNhUW1HNU1YZHlXMG9BOHRpZE9XWmNKcGdQMjltRGFwOHlnZDh1bmJIQVdvWkg4WHY4VE5tRkJaRU5UVFVIWlE1MlAzNnhYR1B2UVNZZjFqR2xHd1ZaaVZibm1pSEpIcGtTYkE5cW5mdGtIaVh3Uy80Q3dIM3l3R3QxZnNuaExONWhZYjB5VWpFd3MvaXZtOXIwVFJCdEs5OUdxaUJkSnR3Vys5eXY3K21xTXc0YTdVRlNIYjZLZFJWZ0VUS3NQaElIeTZBbWhxcVpWc3RUTkpMZHd1MEo2SXdha3lMRHNxUy9XSnlmdXhDLzVNdHc0OXgwS09aUXFuTXJtdHRIWFA1ZG9YYnRxdHNVbTREeTBMUERPYTNLSXNnOUpIeVo2NGVBcDdzSkZkU0ZNemx0OS9sODNUMVNwbko0T3I0SW1va3pHUlZEbUhKN1JKRWU4RTc0QjkxMGplcXlHTmFPaUo5OFZrYWFOSkVaYUxHOHpveE52eXRvL01KbGhQNFE0eUc1VDRuendFZUF3dVYvZlBiQmtNbk81dnpzYWxMa1pIa3ZwSjRieHJRTE5MY3Fpb3VBU2x5eE9Mbit2a0ZySU84bUVjdHZkajlTaTdrdDZmaHZmdDcremhFUXkrK2VoKzFETmFHelFGalpQWVc4V090aS8vVVFPZ0FDUk1Va1RuMHZHaHZOckhCZE5WR1ZtbThmYnpVUzdoMFpPOWwrczcwMnBhcTZ6aTJHWmlRbHRJdzlKd29RcUdRcTczTldEYWdLNmQrMlNjbG9ZR0pwZGo2VTZWOXFLeFBTeC8zcEpWWktidTJPZE92MVUveGR6RDBJekFtQ3NKVXdKRXBtcFl0cTMybWUxUnlxLzZZZ250YnFZdk1YRjh3K0luTmdZSFRtYXhoaFVHVWloVWxhcnVYRlp5QU1ETWxjangrUnhxZU9MNlkrdnFJL2VwZkM0Nm1TRmljaGlBY1dROWlQN1N6THovbG5qSUtnMnN6YU1yNkViaHg4Qk8wQmVoV3huZ2ZnZDdCR01rQ1M3aG9XVkMxQmNCbDJIQm0zb3JUVWJpbFBsa2JHK083ZHIrOG1zRXNxbHhGNCtlNDQ5d2UyWFJOWTZkZXdjd2NGd0VkWVNSa1RXVERoV3UwM25jcFNiWEdOWThTakRJOUMySkxsNjNnOVUrVEV0OERmRHJ5TUNyOFl3a1p3UC9zWU44WFBpanNhalFlR3VxYXYvYlZnUjB4L0d2UGxkOFp5RldNbE96WkxyRks2RUw4QXVsaVFLTUp6V0dQdCtoRDRqYjFWV1lTWjloOXgxbGJLMmFkQUE2dkxXL21rNCtGckVCeXRRUEVBamJIWkNDbXErWnh1Q2ZDYUVQNWZieC83TDNPZFdqTDcrNVpUZEtDSVM4RkRqN1VKUzJ4TkZRLzlIMmNhRE9qYzgwVnFhVmQ5M2krd291MWl6K3p2ekF4NFVxZXdabHVENWFZekswOEF1RDE1dVZPbk9hV3FqaTl3VUx4M1ZFTllWWWhoVGdXSWVhL2RNcVVoeWM5WFBTUTRESFJTWU42cy9DQk02ZGtCMXpyc2w1cURjTWRNbnIzRHVRL3Q2U0VtTGVIazVmeldkMkJLbkRaQjdsZ3FnOVRRV2E5SEZLTnhpbEE4UVJEYTg5ZzlGVHFRejFDRE94bmdwT2hHQldUdmhUR3VuT3lFOVc5T1Y5RFVqNWpmNmR6ckJGelNOVStNWGR2ZG1HR1JFMWY1MEhVRlNaODYvL3FGSHdSOXdBblhCcmRUbHdXQ0Z1clFzMTgrT3dxR2JmbFdEY005N1R5R21PR0xHTTNKQWk0WXN6aGpDN3JoVTkweUVxdkpNa1JJZmxldGJ6c29XMWJCaytLY2lHdmxIRnBXbzZIWXZybHpPYXZrcy96ODZ0V3o0bnpzbTBzTHE1MnRlbnF0RVI1emdMdFpIaDBvM2hrSzZJQS9Nd2VMaHRYY1U5R3BrODhLckdDWVpCY1Nsb0hTNTlWTzJ2ZzAxY3pPbUhYZEVFeEoyc3g0b0FJaktNTUdrLzJhdE11YnF1c2k5MVhXWk5Sb0RuZEFjSGQvdzlKeGVtSTBIV0Z4WWxGaGNaQnRIaDRMWVhaZjlpN0FzUzY1MWZxaVJlQVhSRW5LQTI5Uks2Sk1yUWZ5WTdjM0M0Wk9XRkpGbCtmc0RTSXE1Z3NuaWNUWHY4T0Z0U3A0dzU5a2VseHFCNno1MmdJRzRWcmVqZHFYeTdFYTFMLzJxaHJSNEd5ZEkvMFIzWkpLWFQyRnczejV6V05lODNuQ04xMGl1WFlHdi9mVjRkdXRRbVlRL0JQYXprNjNZZW5RYUV5MXhXRWt0R0RBVU01RitQUEh5VWFPWldhUGtsai8vQyswaDM5VURUVTYxUnBjdDE0U0pRSWdqT3MwZ3pTTzBPT1F0RXhtTDcwUUFtenNNL0ovVmQyb3FKeGVsVktWTkVaZzJuTmgxQzRlSGE1V1oxOG9QRDU5amxJeVdnbjZBQ05tL0dPdWtPSFBHdmVtTkxpa3ZvNGR4UnpBVWZtMHM2bDJYQmNTN09KMWxMWlVYc0lldEFUNWgwT1ZhaW1RR1R2eDdueVV6VC9iZDVPcXd0N3N3S2ZTekxkV3MyV0VyUExVblBkckRPUHFwM3VjMllDMzFIVElRRW05bG52MjRiM0hHN0dnMEFMYVJrbTVVR2d4bE9Bako0Y2d6QmdZZDBOVnlPdjh2QWFBdFV1STdMSEsrb2IzaDN5OUE3c2xONnJPR3NNc3hCM21jTmgwZjl2S1F3c1l3VlBGL2ZmMkZ4djR2Yk9RVm9mNkJ4dlhMZ2Y5ZlFZV3doZUlTYWJQWHJrZGQ5Y2I4UWZLRm80VkFkQXhLOE9ESXNNVzB6QXNWcTJaR0k3TllxWTRiTHFwQkNxVG9oU1d5MTMxcVU4QjdGd29wMjlBNi9QMlpvWTVtMTFZamRqeng1VE5XOGZJdkthcVIycCtoMHhKVzBubTRBTURSTndWT1NTK3QrSHBXaEMydHYzZDVlclVDQ3ZHNzVUN0xzREFDV2dUKzVVOVAzZDFVYmRid1pXZm0vZ2xoU0tFR082d2QxamVjci85VVdyWmNSWGpVakJNcFNseTJoUlVyQlVDRlQvSnIwdFRzNVBjREtIbzlSamNaYllZMTh2ZnNLY0dOV2prdWtsK3Vud3BLQzZPRDFxd1JXNzZabklJQkU5bGtFMlZRbzIrbTQxN283MlgvTkc5RWRsM0VEWmpKV3VNOFlucXE1RlV0TndWWDRQMlBkTU1SNE04dDhicGYwWWlreEY2Y0ZVRFlCcU9kT25Id0x1RkpWQ3c3L2VDang5WlVNUjdEdGxyU3RmTXN4QkorVDhFZExMR0dQVEw1a3l2SFRMaGNDRW5aWEFpSWZnaEYzQnF4a3FYN0xaWllvem9ySjQxdkdWdmdiNE5PUkVRVFlORGRDRy9Zb1Y5eXVHdnhzNE02aXVBMmYvbFFPUm82WlpPY0FxdVViblFxaXJRRG5NcTZKb05xajFrYkI5ZDNNK3BMYmE2anFZV2U3aWxPWHpvN3lBbVVhcStRQ1ZiWHpMRmxzK21qMTd6YXFUZ0VQUTRhaUl1VUV5d0tlbGV0WXhaNnMwWGprRzJSM0tld29WaTdOWDR6bnlLTXgrSWwxcTMrMy9UTGJ1L0lMaTNNaVZiUjZBRjZ5M0FTOFVBaE5yL1JZcWx6Y1VzcXpScy9nVllNdng2OTc2d1R6SVZsWmhKSWROb0NYR3Joa3lBekNpMklLV0g5cUNWRkM4eTQwZTFCcnlBWUpvamxGY0Z4OGdwdlhxekRDNFExT0JuRnVZdW1BWmNUajh0ZGs3RnJDZkFva2tTSzUwQ0pjbjJsWmNtRUgxaHhEOGk2UjRMKzBTQ0xwL01qTHlnSXg5ZEhMdGRaaW1kUm5PMzVYM2h3bkNpb25WT3duVEMxL2Y0OTFXenJZMXdkRGx3dG9rdnpETFhCWmVuQlBGb2o5bmhwU2lBWHpWQTkxdm1OYjdKVGNqcnpmU1lwR2lCTDBjdks1QjZuU29SU2tGd2tWdzZZWWFUbEVkZlp0SHhQWkZUbFJlU1NaVmRGT0FzUkVFdW45UGtaZXpnRnNzN1Fsek5nKy85LzJpQ1E4SzlBcnRpK0tkUGtmcTh6YVVMVldHNmcvU0RwUlpLUGJJcVNSSlZ5ZU9NZHRwSHBsL0JuZlZWRmFZUHl3bzQyd2lpZFovd0svU3EwaExFMnhCZHZEQU4zQ2E1Qy9JVndja1VuckovbzVBUCsrc1VLS0ltUHU1MjV2cER2UWtJeDBxb1RJbW9xRHFSd2MrUWRHTUkzWHZoZlY3RVFIUTdIT0ZjaXhwaUl4RWdOc3hBMDAwa25LTVFVSk1VYWxaZFFvSThFMXBWU3JjSm5VcFcramhTUzRWTFBiOXhKa3dIbnZpcW82WStMb213NDcyYUcrY2hQNzdwQVZTRkIwbEo2cklNeGdTb2taMTk3YzducThoRlUxeGpHcUo4elNwTVJNYzE2cXFuUWk0RlQ3Nzc3cDVsMzFzQzYyUHNjSmpnMDFsUDZZOENuV2JQWXpCWVFscWQ2K3FNUGlUY1B2UjVvcEZERnFnakxYLzgvYkhBSTVDdkY4OWtVRUhoZDBLNU9CaitGMWlyWjlSSWxrYkplZ3ZuVFN3N3NWQW5WQjBUeTc1SlY5T2tHQU10eVFIMXo2eUNiNlp4NEtWcmtRNE1jaEhmRUNsdFdOL1dESHNwVEpCb0R3ZzdjZFc2NWZUTUM5VlJHRDRYTkdnd0xCMTl4SGxLRUZPZ0R4bXJjY1VBY3RJTE1SQWxwY3JzREdQckFZNEUrMXd3VU45dHlXVmtETHh1N0Q0dGkzOFJMSHZtNFNOaWVlcExrVElnS1pzV1BvQmVEaU4rWWNDR28zb0Z1ek14Q2lyUzl3TUcyQ2NBUE9CQ2NiUDMrdDNVTlZySWhPWWRVTVB5K0l1a2t3a29NS2lvV3RHQlpaTkZ6VVpoaG95eGZqUm1Id0dVNXR1Qi9qRUlxL0JsVW0wWjZjWlVmakZ1RDljNXBpeFhBU2NxNGdreU91SEFLc2ZWZ0UxYTdvMUw3SkVKcVR0Y2RORWtkbUZPN3VTMUE5UnpTRnJGRzAwQVE1RVcxTXJrOVl4SGg0WGxNNVRudlpkZnRXK3ZxWmRNeXpMS1JQVGZBUEJwWm9Vb09meE80eStUQlpNS25zYTkrVENscmdDVHdiN2V6eldWU2dYMER5QkVYdy9zQ0tEeXVtcDVlSllyUjQrVkJaaW9ETjdpRzhBZi9iREVVdUUybkpkZEVKTC9yMmxONFZJdzBGajVGMHp0Y3praWZaaGpTcDFwcWl1amdsVmRFQ2xuc2tkZG02Z3VYTnJ0cENQZ0JUWUtoMUVtQXFhNkM3UGRqSUROdWRudE9kUVVmd1NVcE9KN0Y4ZkdlcFU3cjJnQ2FGaVliVC9MVUpSTW5vSWpXZlJBdUtaTDlnaVVZbHpOYi9IK3R2cUp6SWoxdG05N2V6bEN6aXUycnVPaEw1M3Vsc01Nb1lwUG9mYWpwSVZrSTRxQ0NWU0xNU2U4SXdXa0VWMUU4QkFUR1JKZVo1eGN0RWd1TWlPdGtXUThwSUtnaTZFMW5ETWVIcmNXbWRoVllDZEh0T3VIR2dmdU1JNkQ2SlNWbjE3YVNZM3h3QzFOUHY3SEdmdXl1WXlVMGtrQmNNU1JVN2VxRTlYK1hlTFl0MnIycTFKZmtTdXZ5ZWxWWm5XYXg0YXFpSjU1MmVPRk8vVkQyTWY5Rnc5RDFpSm5Ya2I2U1RYS0V1SGVmeW51Q0hXOHpHODdta0FhTjVEZHZIcFRyOU42ZXlDdjhNSmFnMDkwbUxONWFxa0F4LzBra1FpdU1TVkNsbVA0V0ZEMDJqZHl2ZlNtcDkvOFMyRzc3VjBsd2YyU1piTFZzcmRPd1BORG40am5sZ3pnRW4rbWphZms5NmJCMS96c0tYVmZDZ3VBR0l2VmpYNnZtMTBRWS9rVjBjVmx4UTh4UTdwdW1KNXRtTlYyOGhiSkpxMVlrZmNJUkZXdXU4OXQxWFgxQXdybUFDcWpQZ3dLRWpUd0xLWEpkemllRU1QZituNjZZRlY1akNoenRPdCtjKzE1dEJmcDRHNkFpRU1UMFFQVWVjU21RbXY4TjhKQmwzZ3dZdXEvbHoySFJaazQydzdaTk1janR4MHhJZWFSY3o4aHkxUmx1MGwzN1dsWEdTMFlySU03b0w3cngya2NGOTlBTG1YRXAwODZVeGp4dGxmTmJsZVVnQ0M3Sk8xa05mVVh6R3FKT00zWk5LREJjMzkrSXJJRXRwWkdtdUlIMXltNUM1U2VxSFljckd3clJROVlndkV5V29KQ0pzdXFwd245Um1vNnVCV2VoMG94RTFkQUQxcVl6eGdFRWhnS1RFNlM5enlCSGFmaGs3QUlidlJocXFOYWNUYW5DcDExeXBxS3ZseVV6YWRYTUxVcmhEZWkwZkgvOW1NalJKbFc0V2RCZ3VuT0dsM2lxWFVaeTRLRXpsMDMrVEZBOVVZaExqa2w1cU5FYkp4b3VLZ0oyYkpkTG9xMHZ0VmxUWS9PdEFOczRnTXdZRVhNNW0yR1NOdGhocVFabkpuUlowVEJqbUt3Wm1ET3FPc1h2NnE4TDN6U0ZuSFZkcUk4UmpWL3NhRTNQa1dLaUp3TmJuNkVxVjE2NzVJYnIrT0UrUkNXY29mUVMwMlU0YUNQWUs1T21EVDNkOTVDS3JBUEk2Wmc0OGJadmdIaUptV0libm5rbmRzN3ViNXVBdGhBaHZlZmlLeHgyYnVJb1M0d3M1RUh1ZGMrSmQ2ZG5QVDFUT1htdmR5NXNpRm1RSlNWd0hQcVA0NlFnVGp1M2lBbW53c09Cb09IdkZiazB1TDl1TGV5WHRXNEFjdEJkTEdacm0vaUpXU0UrZXA5NTVEMy9ZeUpFTXhVL2xPVFd4bTZVQmk2U0h4dnFYRDJlY040a1RUSk9SOFFoeEdFTWcrRGtpSndzbHBoeHY3TUVmUllzejNZVTZPRGpaaGdHZmlZc1QyZHRiTGVOTjRNYTVOcndnZVU1ckVHRjR0dXR4Y3BJR05pcFBaOXBVdE5xUzVWVW8zY0lQVndqbm1zdjl2OWg1OGIxSWlqZUNOQUo1M3JkLzF6K2hwN2t3Q3ZVVXVDaDJ5UU9RTGhZQjBjbDNQS0hjTWR5aGJzOTZnbEtrMTU1UXZOTk5ZWklTM0JLcnlBWmtLaDcyVlMxa2tnN1VLUjV2cWUxc21pMms4M2ZkaVplVitWN2lMYnJGMkUwdkJtejNKazNNRVBKOXlUL0F0YzFocFdNY09ySzNVMzFDMSs2Vk1HQzlRKzYybGtEY3l5ZldSL1MxNTlrSU5qSkFVNUphMmc5TSsxZWJoQU9LcmV2Z0tTa2hYcVdPTXpWVzArMzM5eTZSemF3bXlKRE01M2pMM0d3U3pFV0Z1b3dnMDc2UTdQZnFaS1puMzlFWVg0cUx2RlB0UVB4SmE2SnZYSzM5dXd0NHVuOVBvSjk2QTYvcTJTUzFHZWs0ZjBxWXpmbHo0SDUwYTBkK2t0bjRnZmVkV0dIdWVuTDRPK1NKSUVGNUR4ZVE1VVY4WjRoaE03NldMK2gwdnNYeGptYlZsRm0xTnltcHBjMHhQNFRuTFA2QnY1T0RNTzBEeGk5bkM3Zk45Z21kclp2QkFSZXJZN3g4SEg0SUIyWWttL2lUQTkxaFdMOEpVYlhLMnhTWXZxMnhWcWg1RXhKYmU5UzU4RUxla0NFaEFkeGt3NXNNR25JY1BOM1IyTFhoWi84RlF1WEd1ek9PcUtDY001UDNKOS9XSWFtZ3VlOUQ1Q3V2dlVybEhPRUUreWhVaW94L2xqaXIxZUpJWkJjNXovS2RwR1ZJVm52SGFyNVhTdzhOdnNlaEJvZXh3ZGw1ZThjZWdwc1NHZE5JUS9SK1M1am5NY3hTa0tGOUt2bS9CNVZ5elBDYmNtZ1NvRGRNMTU0TExCNDhGVG8rd05BcGVlTDNlcm12WjI3SGxmVHVqVVdEU3BtekhOWkpSaVRodCtFZDZiUjNScm42L2Z0WGRUTXl5YzhINWx0S1MwVkMvTkswaVFuRm5EcFBjWjhoMmNlZU1GMG9Tc2MraEc4ZmdrVFhxdkFaK2NJTE9TbnJXYktlbnFuZW1BSHU5MzgyajdPSWpDUmJtb3p4MFZqTW8way95eFp1YThGeTlHWHBSQms4SU81TEUzQml1Wmppc1BtNWVBdUh4T0F4VC9qN3BQS1V0eWljNkltdFlwRFVTR0xqQ0htVGdTaUxSRE5oN3JtZDdHSjBHOGI2U0VRWG9vRm5uY0F5SjE2bVlpVm1yS0xod2JGK2d4T0FTc0VLNFJhc3JJeFFaL21aTTNqVWtLR25jODkzS0VZNnBSMDhSRGc1OXpPMkx1M0Y5Rlh3Q3pZcHhVamx6NU03RXFiSXlieURxemlNRGc0TWltMlFybDhwOVRydDdxQVNkMG94T083d1BlVkpHdFAwR3FwdzVvMDEvMDZoajZJeGdhOTEwZzQveTdRczVpczZ0dTZZaHN3eGhqeVpTV0F5aUUzc1ZoNk02bitWQTltTlp0dkNpLzVYaHk4U3NKUnd1cUkwWGg3bUVnU0dNN0xLMjZSNkZNWVptTnFiUWY5OWZDc0t6aVhCZ2VHdi9HQUNJQVo4Tzl1WTI0a2llbXBldVk3Q2ZkbDZpc201cXVaNDBoRkorblNwQ0N2bEQ1MUphK0dKbEpQQ0VOL3FpU0tJVlJaNjh0aWhvcmgrS0pLaE9lSTNqNU9Ya285Z3hRYy8xMmFieXVBOG9BNFZBMDlFcS9FTHMvVUI5bWVtS3lHY1J5cTVmZGlNaytVSGJtZlRkVVJQajM4cWxTdWtOLytralRpV2x3UmpheEsyb3ZWcm1VeG5RK1FpUFlCODQ3dHhQZWJUMzRaU05YekJaM3FOTTBqdUdkUGErUWxsOGZsWHRLZEdLZlhGQnphMEZZV2pORVE4RFdJK3pTU1ExV1VaaU1QejYraktaT2M5aVI5bDBBREpzZ21KUDNiemxwaGxpTXlpM0d2SjNKTUlibHdnM2VTOXhwcXM2MFBhRTJzMWhNWG03NlhFZDZuVFY0enIyMkdabitydjRtZ0dBVGREQmtuNkxic3Y5NzNUaGJ5R2lqMXlySHFjOFA5TlRCbWJkN3dmYUNCUFF0K2w3VzU0NUtsNDFSc3E0MXR3RTYvYUsreHh4a09FUTZON0N6QndYT3ZZUjR1ZnVMNkVNeEZBR2ZZWGV1Z2k1WnptMXc1NUZLZzQvdnpSZE5EZE56WEhZaFI4STh2cUZTUWc4RGUwSnhsbkU5WEcvd2FoaDdLQk00ZTBxL2xKa3lPa05odFREcWJJYnd1Y0JkV1BGQVlPZ0Z4UEtTM2Fmem5FaGp0SStQR2JVKzhpYjdVZW9pc2g5VE5WQkluTkQvY3VwdTcyUFk5SlpZenkzcjZTS1lJbC8rQjVtTzllYzZVSTk5QVlBQ3VjQWdJcjRRQzRaMHFiU1BIOTVkS3BQS2tHemVBYmxkV0x5RmwwcVllUmVqdlZhS3Ewc1NCRmZMUy9jQzhZRlVzRmtaZDU3NTZkZTAzS0FDekdvNmpiTWFhaXJzR2FOYnUyRzVhV0NkZmhzT2h5NWpCanFDaXZiNCt5Q1lmVmFySEFVRnNPZ0t2WVlIcEJnbStJanJqRFZROU80bGUwU0VnaFFQdHdudEpZdmZPeHJkM3dKSm41dXlkbEVwTkZRVzhudFVJTndsWjdkT1ZjcUh2ZnZ0S2hOZmZqTEUwaE9WRHZJT2dZcEpCZi9SY01FVlN1M1RuTnVJVGRiSko3NEtiM1NzQ1JlMFlQVWt0bTVnZUF0ZjJKaUZhNUZiSDJ6M1dqYmZLV2NKbEZmMU9IOXhxa3BHbjdBUm51VjNGd1ZEd3JzZTR0citNQzN6Y1hvUlBiRDdBZGEyVE9jekI3UVZFZGJ0ZC95Vlh1M3M3RDk5N0FzTGwvZmxZSGZnRnhkVnQ2V0ZBY0tDQlFrVmNveUNYWHNSNE05MXdSc01wTTY4Vnp3VFVHS2VSM1FBZEgrUXhoNGdrV2d0VGhzLy8yUUFCQUJvQVFBQUJUd0JBQUE4QkJrOENBQUFBQUFGZUFhdEFBQUlBQ1FJQkFRb0NBQU1BR1ZSb2FYTWdhWE1nYjJZZ1JtbHVaMlZ5SUNnMktRPT08L0JEQj4KICAgIDwvQklSPgogICAgPEJJUj4KICAgICAgICA8VmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I-MTwvTWlub3I-CiAgICAgICAgPC9WZXJzaW9uPgogICAgICAgIDxDQkVGRlZlcnNpb24-CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvQ0JFRkZWZXJzaW9uPgogICAgICAgIDxCSVJJbmZvPgogICAgICAgICAgICA8SW50ZWdyaXR5PmZhbHNlPC9JbnRlZ3JpdHk-CiAgICAgICAgPC9CSVJJbmZvPgogICAgICAgIDxCREJJbmZvPgogICAgICAgICAgICA8Rm9ybWF0PgogICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5Nb3NpcDwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgPFR5cGU-NzwvVHlwZT4KICAgICAgICAgICAgPC9Gb3JtYXQ-CiAgICAgICAgICAgIDxDcmVhdGlvbkRhdGU-MjAyMC0wMS0wN1QwMjozODo1Mi42NzFaPC9DcmVhdGlvbkRhdGU-CiAgICAgICAgICAgIDxUeXBlPkZpbmdlcjwvVHlwZT4KICAgICAgICAgICAgPFN1YnR5cGU-UmlnaHQgVGh1bWI8L1N1YnR5cGU-CiAgICAgICAgICAgIDxMZXZlbD5SYXc8L0xldmVsPgogICAgICAgICAgICA8UHVycG9zZT5FbnJvbGw8L1B1cnBvc2U-CiAgICAgICAgICAgIDxRdWFsaXR5PgogICAgICAgICAgICAgICAgPEFsZ29yaXRobT4KICAgICAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPkhNQUM8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5TSEEtMjU2PC9UeXBlPgogICAgICAgICAgICAgICAgPC9BbGdvcml0aG0-CiAgICAgICAgICAgICAgICA8U2NvcmU-Njk8L1Njb3JlPgogICAgICAgICAgICA8L1F1YWxpdHk-CiAgICAgICAgPC9CREJJbmZvPgogICAgICAgIDxCREI-UmtsU0FEQXlNQUFBQWd2TUFBRUJBUUFDQzd3SDVnd2NEQjhUQXg4QUFBQUFBQUZEQUVBQUR3SUFRQUlBUUFJQkFBRUI5QUgwQWZRQjlBZ0ZIUUZsQWZnQUFndExBQUFBREdwUUlDQU5Db2NLQUFBQUZHWjBlWEJxY0RJZ0FBQUFBR3B3TWlBQUFBQkhhbkF5YUFBQUFCWnBhR1J5QUFBQitBQUFBV1VBQVFjSEFBQUFBQUFQWTI5c2NnRUFBQUFBQUJFQUFBQWFjbVZ6SUFBQUFCSnlaWE5qbWNvQUFabktBQUVBQUFBQUFBQnFjREpqLzAvL1VRQXBBQUFBQUFGbEFBQUIrQUFBQUFBQUFBQUFBQUFCWlFBQUFmZ0FBQUFBQUFBQUFBQUJCd0VCLzJRQUl3QUJRM0psWVhSdmNqb2dTbUZ6VUdWeUlGWmxjbk5wYjI0Z01TNDVNREF1TWY5a0FCQUFBVVZ1WTBsRU9rZFNRbFF3TWY5U0FBd0FBZ0FKQUFVRUJBQUIvMXdBRTBCQVNFaFFTRWhRU0VoUVNFaFFTRWhRLzVBQUNnQUFBQUlLVXdBQi81UGZFK0FKUVRSZWxQQkUvcXRaTVMyM2dkK3NhK01nSlJ0MnhsbExOckhpRHJwTVYxMkNRM01scDVWTTdvbFpTejBOSm9KRTBDbWVzQXA1NGFOdDVneFZWNERhWUFJd1A2TmZ0QjVPZmRORXoyUWpJbm1BRDRLQWdQRGcvck9tdXZPT3BPZkdUTFdVOXZKcnp1djluYmVOSVVmamtrQ3lVb0R3MEVtVzI2SFhROVZqTmJGVkJQOEVlK0ZNbGx2U1gwQTRId2R1L0FaQVZkdUZhcFRYVHZJeldvYXlGLzdGcHkyNURCOXZ6aEhDbktDcFZhREVuWWhOVjh5UEV1WkRMZm9OMEdpOC9sZ0hEeWVSMXNDT29WRHVyRjdSNXp2Qm9vczA5USsrUEc5VjIrNWNEck1xdUJPQXgxcU9zRE9LQ1Y4NVpYMzZER1RwMFlnTmo4aWwxWlZHUnM1R25TVjFoZTMxbDM2WXkybXNrdmNuT0UyenZhd2RUQWJqaEt1eGxwQUFwcGt5U3R6SHA0VmRURU5zblNpajljamE5c0FxY2VUWG9FSzZSZkdOVVZjM0ZvY3dtWm9Kc1NDdnVra3Uyc3AvZ0dUb0VuSlQ2bzlMZ2V4YWlUTTBwQ3hyRDhKQ2NNang0Q1ZvOU1SbGwycWpPbUpGcGtIVElUNjNraHYxNE5wcGhhQ3NqVm5jVThuaVdKZ1dTZ2NiKzVNSlkzTFIzOWJQWTNSaW8zdUM2SVpoVitKakRZZGVLZm8ybGU4WlAxYlp4VVVBd2g2SmF3KzhPa3VxNHp5VnRlbEJpL1h6dXZQOFpLK01vZk9hZ0lQOERVZThSblZXS0s3ejBvNE5oK1M0QUdXdndyTzJndk5sbVdadlJtUW1UaEJSKzZGdWdWQStNYmsySisyQzVhMGJlNjZCeGZueENGNlJtNXh3bnUrQy90SHYvRjIxSFV1L1lRbHd1cElHTzhMNWVtSWZFT2hnT2hydm1SZGt4bzVGRXI4NnduMTNRRkJzV3g0cVg2Qzl6K2ZXMW53c3pMRlRzQmVwRkFhaXJwdmxCUUZ6UUdUcFEwaXY3eVRFSDVFNGRpSEc0UFgxQ1pqaG1vSS8zVjRCbDhpalJ6UE1ucmxvd3Zzc0tkcFhkT1RVUThtcVpJVE44OGl4QThtREJOL1E1d2ZZaHMzdXZ5UEZUK2h0RVJBOERhc1VKVXVDRklaSHZxNHhtZ2VQcG1TMFpsa1dsUW5NbE1HZTVhUUFqdDBpbU02NlVpM3RhbjEwV3dhVDNrbzMrL1MvcHI4emdEK2sySFdxOERzQnJIS3hsM0lnYm5GdlhTRUFUMzdzQTZwTjNUVWhGOWFGTWgwSUxjSHZsVHF0aHd0Q1FJRE8yZW9kbzVOdFBzc0NhdGNPSG03ZDZzRWp2RTBlc2Jib1VMT3NZOVNIYVVEUjNBbG5abjZodEdPeTNZalk5aVpGLzFLTGx5aDVCVm8xQlRqY09iY3VpWnZVaUIxRG80clBrYjhQUXR5VGVCc3NLM2p1SzhZNWh6Zm41eWpIRzcybUpsSHpnRUoxb2d2T0Nzd3cvUk95UkhhWDVMdEZyN0JOUHVtTGxjRG9CaElCSXhXZEU5MytoTjFzaFlYdGFzSDdPcVlnTUlTbjRPamF0a0xSeEdYakZveWVCcmdGWXdjd3dORDUyZmdxdm5yZnNOZ2FRL05TNVlNUUFGZmg2RlptT1pEMDVIWWl3OVZrd3Ixa2NrYVBQeTJTZnUzUDdDc2dCdGErQ2FTTWI1VW1Tand5SUEwTXJNa1QyQ0kxMXNYdjZjVEpHNmhZUk1jRXFkUXFsNkp4RTgwN2NPcmZiMDFJWHhnV1FsUGo2V3pkR2FZbEcxYjVGRUxENGV5aW9VNjFENmVDTGE3MVZHNENqb0k3VXNZMFRXQTl6YjNNRlF5dmVnS0cyR0N2R3A0ZTVCQ2k1Vkl5UlJzaUNuSGo2eUYwMDZlUmZDNDJUcTNEdnBXbTk4RmREbzV2eWVxMGh0OCtqTER3RGZOeFJCREg3ZG13SUU4SWNYMno5K29QbHFqS3hrVURPOVY1M3labGZWRDc2WlBBZnNQc0JlL2VsaFAwOWZyVXRqZjF2N01seC9pcTlhWWE0a0RnMTh5d05EZnc1Q1FOcEMyY2g3NDVCRE5nMStINFRKb2FyRk9rMmt3dEM4c3UxR3FHNHVJVEg4WXNCNUVBZ0VkcUluY0Y2V2ptUVJTY1ptQXQrMmpIcEwzN1NvajNNcG9sYWxMMTRsQXNyQnpUY0p6TUMrOTQ0bjltQVhPc3pLZTRBWW1pUDRONzBYazlQTkdUUUNnUDRIZm03SktDT1pFaEpxaFoyU0RXdkdRN0R5TmlEV3plS1JsQWUyOTdPQ0NWc2x3dGlDZnY1SzBoSFlxMUp3cHZsN25zcjVkbmZYTjQvalZYUGIvRFdFV0lBQnpMSzVGSU54bktDZ2hPa0ZxNDBiZEpTeEVWNW56T3F2SnFTeTNiaXEvcnJHWC9aL2pRUy8wYXpxYkRnSEwwcUVSVkxuM3hlTFk0ZCsvZ3pMWmtEdm5JOVZOZEFiQ2l5cExBWlc2STNDNm80c25Ybk1qUytURUVxN2M2L01ZcjVUQi9RNlJBWUdHM2ZUUnBSUjVZcFBjRjdGK1h0c0k1QmQvWEVCNzUxdjdlYjFkeTJ2ckF5dE8yZXJHdmFjcTRvY2xMZnI0QmhLdmRwRDlEYUdtS0p2SWFrREV1ZUErVnR1QmpGNTNHSm5YejBrdHUyYnJsbkowOWZNb2tLSmZzY2hrZHE0M0xWajNFU2RxUE96cFpORWM1TGlweTErVTBsWG9YVnRGMkJVdm9temlUZEZzTVVBR3NnK3owRkpIWi9zU1BRRXU1YXk2MVV0Y0I4SGptNnFuMFR1RWxKb29KNzRvK1JaZkJjbXRzY05wSkJoMFdndzVQbHhiYVFPdWhYSEFiUHNZWEpVbnY2UU5JOERFbnpGZ0RNaDBYRTA0WnZSbHpKV2JUTnVocktIeGhLTnBZUzFNaEdyc3FUbUxZN1FSRmEzOFpKQlpsd29pWTZlQllRQ1lzVGlBbEVlbTV3em1ncDV3V0ZaS1BuOG9ZNDBRT3B2SzBITlJxcjdMMXBuTkp4U3VIZEhqVDBFK1VZR1BlUUUyYm0vNFFGQzlXSFVIN21NR2ErQmhIeHlXakJjdUtteUNTU2FjdEFQQWdrQ1U0Z25LbDFTNjlXSk9JMkgxUkozTGxHNlN6Y0FFN284Q2pEYXRSWGhDSElhY3BSUVRHeXRFdFl5NzBydmVqWWVFSnNuS0JEcnR6dnF2bmlRWS80ZVUwSU5pY1FEc05vUEtwYUVka3BULzlROGFJaTFuT0hxd3pjTVhOaCtsb21BQzNIcnpVSGhobUNlRWY4R3Fsd0IrRkZ3YmdvS1dXTklGZWZLaUZIVnFWUzFRWmRnQXU3cHNpQWs0Nmg3em9aQnQrdXU4R3F1T2ZERFMvazFPZkVtbHdzL2xTRTJmYVd2MmpENTVFazZ6ZzJ0MXNPRlVRQWFJWVdlL01xOUJuakhqa2taa0l5VnZuZWZrOTFvK1FVUm40cEt0azFNMk5CejRGcHRGN1ZJRkFVRDRVRjJCU25zb0tFeElZQVIwRU1LNjQvSEc4OW5OeW9mWTlBazJsUEthU1NubGlkWis2ZVR5OVhlUWhqUDl6QVJzWGExNVkzSzUwcnlzZ0d2WjlwQTZod3Q3SGFxNGwycFVrNmswaXhLVm1qR1NQTkhkT2dMVE9GdStPV091azhST25CcUNFRmw5amlCUHBaZWF6eXpPQ2lLU0pXUjBleUJzbHRWcDgwNndFWkhOTUUxUWxlWWNRckc0V0JmZ3FjSUhMWHE2ZG9vRWljYkhiVjllTTJFcVFDYXBmT2FzK1BJWWczTmllRno3clNDOE5pRkxJUnhaMVE1UDNWR1N6d3BsTjRITDZJNVBjelVCTEh5OXJqV0pZWnB4TzdxdWlKMEVwK1FGNVNMOS9rK2Y4ZzJINWNTYVNPS01heFYzZi9oN1owZHl3dWR1SmpXOEdNRW5sL29GUXY5bmJKbzRkNm91SEFZK3JRVXFyK3VjbUppWlZlYzdWLzI0WDVPWS91N3FTbVFuQStJUnJES09sRnBtclRCTEhvYTdaM3Z4MklSc1R1MW5LZ1J5OEV6bVhWd1JjZXpUQ1IwdUlNbG9hOUMxOVphWG1QUzJjZkpzbGVjNG9VS2lmemhTWnlqOFN2Q3FtcktGK0RQWlI0T0VvWGRsMC9rK3IyTktNck1oMGJuV05uQVgzQVVCdGdTNnZJU2w1WjNLYU1wL2ZiWm9sOHRrMyt2OXdYeG0yVVpuYVJkQ2RleFBjQS9GN2U4cGlVajRvMmtqN2dJMVhQY2RRZGJGZ01raXBPTE9SUUVQbnRRNGFzYnJqN2lKR09NcmQwQ1lVdnYyZm0ycURaU0lyNmw4aVVQV1NYM3phcERpMmJ4ODFZaEFDbDZwTFVsYUY3QWIrNHI2SklMeVFzYUJzdkFtbUszRXVEeUJiSEwyZVB3eFozZFFTTzZpR3B1VUp3bERlVXM0TGMxR3BENEZ3U3JZWFZBSnZsaXZYeVlBcVM1YTRyWnZSaTVuQnI0TmRVMnRkZmJ3cjlBUWhrMkRvektReXJtYzlSb1dVblcyKzdQSnRITWorbk5JK2lERjJ0Q1ZZM0VWaXEyOTlTaXlFQ3ljeXdMU0VQUWwwTVpiTUN5STdIWWoybzVIZEtab05GZzlLWmVQQkVWWVplV0VmVkh3TWJGTlp1dWRQOWJURmF4RU11Z1VDS0FKdnkzcmtqa3NSNzRkRDc5cTF1aERxRi9VWUtPRStzYUY0Q3R4SkdsWU55eVIzWWZQTHJYcExtRjY4eTc2ZERVb0U2aENPRnQ3WU96bGZHRkVxNkRqNmkrWnphRDNoN1FJT3lUYlJ3Si92RTdHV1Z6V0lVWExvZC9Ta2wvVHNXWjBJM1RzaHVkaFc3b1hVMks3QjlqaEtrNmVVd1ZSUFBFTkxiV1VaclBrWnZmYUZHclVsVHNtaEs2Sks2U1cxUmpxTlY4MUprVXZLbU9MZHQ3bFlrTDF3OC9zUGt1a2tmVGZVa28rVUJCKy8vbGpRR1NhaEtkR3hUUHBDK3E2NXppWFl0dWttOXZCM3RCWHhHWXEyOWo2ekl1WGErTHUxTk1YR0ErR3Z1L0Y5cTR4QWhoZzlQVU1uRnMrcWJLTUU2WHR4MFp4bElBek5nYVlmbSszbERIY2xTaXR4OEpBaTdMUk1YM04vbVJqcmlOSUp2OUFGOXQzMFU4MTFVWC9PQTJPd090Q24vdXVUd3RJOWdSRU4rcVdYRStYUjdaeXBSbkNTUWlXY0FKbWNMWmgveVp1cGhJNDA0TE94SGdQWnZWYVdXNkxPSXZHeThzYnkwRVdUZ2V0WlMzdkhvc3AyYndsSWtsQktMZGQzNGhLMDFpRHlPSDJ0WGlIVjlTa3ZqTlEzaTFpVVpuMlJQYzJsOXBMMElLeStRRlI2MjVtTTZ3MjBWajZOQ3VoZGNnbzI3NUxBTU9WSmlzNE90OWt6WUxFc2NScncvYUJ5LzJTTERydlVHK2RGbjZGcG9SczhyR1h6MnYzZ3EvNnl2ZFRkV1dMQVNDMStjMUVuZDFBMGtqc2dZTEcyZUo2Uit5WVNGVUFBZDV3bi93VmdCayt6M3g0ZXZQOGE3bUx5bU9NL3NleWJtbzlKZDkvRnRWQnN1aEZ0RzhVclVUOFU2eTVXVEVENW1sLy9aeEVqY0NNUGxnb0lWdkh3NWNlVGthTEFhdmpocERmOWJabUFxMFdab0luZFB5SnB2Z09TeC83UC9scGVNZ3FlT0Jmemg3ZEgyYkU1TFh3Q1h2YUllR0ZjdXB6d2tRaklaOG1lbXRHdU1BRmJzYmV0SlRpQVNCZHpHZk1kRUlQeUc5YlFqR2xjck9rYk5kVHlMRW4zQWRoQnRGWDVmY3M4a2FYU1BGeWpCMHRyK05rbjZkZCtoeU5VS2ZCZk9WOFZsRWM4enBKaW0yTUcvSVNjc1BPTmZKTTFDaFZVYkRUZXY0bHRSYU9sMEJNU25mODdKWGZ5cGRhbk1rWUtZdFdNVGpQMThxL3NQbFVBam1nc1pqZzk4bCt3VUI0eFZObzVOaDBXUy9wTGp5VjNSYzFyUGcrOFdENzd5bGxJNCt2S0xONjdDQlJQdDdUcGpRZ2JwYXdEZVZVK0NvNVk5cXVpZGpwZ1UrcXk5L0V3Tk9XT2E2YkZLMW5uc2QvSjhMSEpYRXlpWXlRa0U4L1Fmb3l1QVpuM09iMTd6N0VUTmNBc3U4aExGd29mdEVVOGdqZThlSEQ2NlBHbE9DZnI2NUNtdENSc1VNVlBjOTg4UWVJWEVmVW8rc2YwT2JhQjRNQXNlby8rRHQ1OGpXWUYrTEpBMUlvSHRXZWgyR0d0K3JydVdiQTNGRTdLOE13eldvVFVMckZnWXJwRWs0UmdOeWJiekpxQnpudzAxOStTU3ZQQ1o5aDFpRmxJdkc0ZXJnZFoxY0ZTRm94TlRocVVCa2Mxd2h5M2liK0FZV2R0UW1ueWp4MkNQMEFyYi9KMkJqWHlTNzVYbko5TVh1V2pyZnV4RzhwVlUwQVVQM1g4dG1EWmtsMlIvdzRmZHRmN1lQUHhJdGtCVmExOFBCY1VaaGYzOXl1M25oR2hzN2RVMFNPZm50ak91RXVjVjhCM2praDhEUEpWQk4veFlGbFVGMm1mbllpZWtLT3JMNkN5VndDYlhnU3pYMXVKWjdSVGxjb3RHSjVkK2xaZ3RQVkd6ZmhlSWtEekEyako5RmxPSXVocE1TcGgvd24rTkwyWS9FTFk2TXR6M3VwQzV3U2RrVVFwdDl0SCtNQ0pOeGowNVMxVFBHWXhtcSt0czVKUnBxZVZBdDAzTUt4ZUhyOWZrdG03UitRVU5idGtSbVpXeXg1QWtyZUN4S2lGb0o3ZDNqK0g5eDQvUVIrL2NyQTlEcXRySUpJZ0NsNEJ4bk1BODhxY2VpRmxvWThWZFBzSGVzTExmVUwzWWYzNUlVK25EQSt6UmxWZGhMblRtQ1dySkRoejVTS2F1SEtldzFVdnFFOGp2NVl0b25LUlppU0ZoQ1RDUzNtMGhqdWxyWk80VGxYMk1idTZEUDExZnBZSmhUSDlnOUFFeFVOUkJlaGwwWmNuaTFWd1RDd2cvdDRwa3ZsSUxnbmNwWk5UMy84aWtJV1FiR2xraWZibzZwcXRGdzNnNGV1Q3FBS2NjUlA0VXlDK29DVEV0NFE3RXpYT0NyaGlFZXVKUlhkSzl6SnBCTzl6WFRFcHNreXJibFBQc053aTN5MjIvWVN1Q0c3UEZvN01RcllKS1JicGRXSWl1SGYvTkRwSGRVbjZrV0hROG5PbTNxb1lTdGFNb290YTZ2Y01LNjFLNzBlKzFWT0pjaFlWMjNkSTNaUGdRT2llVWVWZThmcUJJd3lhWnM3TXRvdGwwbGt6Z0NGUk5DODQ1VzZqaWtCaFoyOWliQXg3RlVXSnpxZzVCS2JrSDNkcG9vU3JhMFZ6Z2dKMlc4N1p4UXpBVUVsRkxRZllPcmw0NkJnWUxPR0E4RTB1L3prbWRrcGplZyt1MnIwL091QzM4MGY4d1hSYXBZNVVqcWNrUDJPRW9uTGoyaGFkZXRRYlNDaC94ZzhrOWhlcU5aZmFyTUFwY2dIVnpCK0JxK1BVa1l1VUhDdTB0a0s4bjRVdzVrNGhlRFU1RG9Sa3RiQ3B0aURIMGhSa1pBdXpueThZclFKd09PUk44aGNYQnIwQUtIUVRpNytOdS9KMUc5N2hEWk0wbk9WT0JXVmN0OFNYUkQ1SHJMektGTjFxbm5OOEZwZHBxN3BxMXZ4NnRVUEFJdVkwbXZ6UUFyRU1oUUI3aVd6K1N1TmlTTTN4SGxKUkV3UDlYOU95U2pVaTB4Z2h6Unl4SDAwRmtvT08vd1h2UHNnbWRMNmJpRXBYYzl1Z0hvSFhRS1JQMjVYditzZjEvRzNtd1FkUHFPejV6eUJ4YVltZkZhUFhaYVRNMW9xcGt4cFRuZnhNbWk1OEtidzI3Rk1RQ09aSjZPVEJ3alR2Z2lnWStTM2NEb0hvUmdjSy9hTVhzN2tCQVo1MXl0aG12bFdwbjc5VDhVOHdrenVGUS9mS25vUkhrd05waHp1RVA2Y0lXWVlZYnRiUlNpR0d1SlpFd1J3Z0xqTzdTVGJ2b2xDbUpDdTNNZUhjOVRTYnpMS2JhY3h0UC9MaEVlZU5VTWVzQnpDNGlzYkUyR2JUajRzVzZRZ05UNEMvdGIxc2FLTkdWa0w0QnhYeitFYWpTVktHY3NvT1RyNld4bTFOcVlEbWpMRVZwV1ZTVTZyTEVndFR6amZCbnh6aUcwd1lpWWErN0NmYkFEUnlmUDhlNUVEMU1EdnZTMWEyTHArQkwyV0lDbXA3Z25FZllnZzBPWFYzMGF3cEs3MVYzUUx3a09IbkVaa1VVRER3VXlrc24xVEExemo0dXNhaDYydzhWT1JFU1Jqb0J2MWxZZnI1RUd2MlVNV0JaWHh4SW50bVV6NENXQmUyTi9BbWRtdVQ5NllHSk52b2NDM1o5aE13WjFRcnhMWUlqUEdSWHdEaTRybW5nSExjUzAvL1l0Tys2MjNMWEZSQzRQZWRYNnhnU2ZUTjRUUjF6aUhlbmFMcGlmRFlSZHJrZTVQNm85bmttV3dzRUV3YVh0SmE2R0lEZ08yZWdkK2cxblpmcnFKK3liaStxY3JEUHFUS25ZRUJQMGZLRU9wLzB6UjM4WC96eVB1bldaVC9kcW0rRjRmcGJVbUt5cUFvU1pCVlJGVTRGSFpReVZJYnM5UXhVQnp4dElkWE1zdThDdUpkbERTbTBqdStrUmZqTXhzZHM4eE9nd2tTOTdZWHdUV2x5OVhBVk8reXlqR3JRanJ1QitqS2N2VlVxakE2bXJ0a1VvSE5uN25zTjViTjJERW0wMm5LeG9PQkJHT0lGeDRsbTc5eTJxOUxKamxTOXhaQWwvNC9pZjhiRk9UMm1DOGNFeHRrOWh4S2xaNG1Bd3pGejJzZTdvc0dGbjFLSUtjd3pKaDRUaUduaU5XQ2NBSllIMlA0VVhHRUZxVTlYVldLN2liV3N5enZ6YmtIZzlpaE9KazlEejB5Qm5iWVNabXJESm80MWVlSnV6d3lUeFRIYnlGQUY4M0FVU0ZuclFHcjJCTHNydVREbk5zeUZOVnZOR3pRRmFyOTBEbDVJZXNuSzY5S0d5dHM1RHdqWGtOMm1ybUZ3SDBBNndGUkhoWVM3WUtUQjdlMzJMQzZ1eEJrWW5peUNyTS9UeWgyQlpFOXl4RERBZk1Uc2FqS3NkQnZHMDNlTHQzbk5nZnd5YjhNTnl1VXR4TXFrKzdxQ2hWa0I2cWQwem9ISG9PYnIxb0pTZGVPWFZPTy9TNDE5TGpIMUh2Z1Rwd21SWlZmYVhyV3NNbVVBN1pydTBockpVcFNCVUM4ZFFGbUlCdXhNbjRONkJKOGR4cStZUUxHd3lFOG5lNHVML01OOXUzMUo4T0xhZUpLd0V0Ri94Tm5VNStoNzU0NGRQekdZZGpBNzlsaU55ZDU0cnFjTk85MG5lZWNZMXJwK25iR2oybjFQcXFDSGRJamtZU1k1MkMzSW5DdUd5dmFyNTZZdU5XWXRqVXZTV2k0Rmlqd2JMR2VmeDM5WlFmQURrZ3Jpb1BGa29VVEtVZ3Z0YjR1ZFd2QkJKNjJ4NmJ5VGJ4UzRxaEJzdlVPZ01WWHMzbjJKT1RDVlFxZ1hpK21RTys4TkVBV0tOVnQ3OXUrODViUjVlcXBuYlRwYk11V1M0bDAyT2hITmdEck8zZlltTnhQRXBiUUFkZTR0YzhNdGpHSm1NMHMrb3J1Tkd4VHQwUDhSYk1tOHo5M1BEakVKR3RQeVFJZXB6N0k0ZkFnNW1mc0lEbGRHelRqQUl2T2E1eGxBR2NaRzkvdUFqbVppWVBKb3Rmd1lRaVdtMi8rTGJTT0tBZVNaZDIxRUVCQ2VUUnRNaTJuQ0Y3aTQ1bDJEWjkyWDNJdjd0bWM3UUV2YnAwMTlONnNuK25KODNqaUE2akdqYTFSQlRFeEREYWpMQmpDUDJEY21SaTBrVWdNQjVnOGlDNEpEQmprR3J2SEJxS0k5OWsrVmZuekh3R3M0VVZHdWVUU2NISDZwSFZMb1djZzA5d1J5NkxaaGg1dm5tWU1KWThGcEtmTXVNVm5vVW0rOE11VlY2YWxUWC9ibFA0djkwN1VvVjY3dzdpU0pJZElNdURHdlNNMXNKbENIeDlWS2xaL28ybDhsRk1wSWR3YVdRbEViUXZna1plazFjTTdwL2NyM1BLNHBRcjhOcDRVWDhLaDZrcVQvanpqRmRQWHVPOUFKa1YxVTJSNmU5M1VjaklKaFUrT3FKdUpRSFkzUUdvRXFWUVlUaUU1WVhhVjF2a3JSVjRWK2VWTzN0ZWJ4dHlqQVA2Mm90WkdJSllOdWtzcUJ3SWlnQUlUTWIvM1RVVGUzUjVkUXMxeTNoWkdDZ292cnNxblZpVzRXM0RzZFFUL2dQbUM0K0xFZHJzZk1DNzBmOFhNOGdSVUpENXdPVmIxMlkreStSVzgrclQ3NnZleVdUR254U0tvbVF6MVE0NFBVTDF5V3ZlZ0ZDUGh4eVpZMmVxZE1ocUZVZUp5WE9rSjV2cnFrRUk3Y3kwS0JBY3VTRDFQNHJKeGhaY0RGYmlEYmRxMUZMeUdMWWZPTTJMcU50ejVBalJ4U3RwTE9EM3JBODBLYjVNV2VLY25zS2VjdnJlZXg2VGFDTGhxYmk1Z1kwWDEzcEpscUZBbTdvVHlHRndyRGFPV3VLRnhqcHFkMVkwVkh6YVpnWW9xNWo3OGwxYy9BWi9PWnVvem8vQUxWTzl1cGFEL0EzZzdTNzRHREV0UDBoWGhOUHNyVTdla0hSTW5ycmRjcys5WklDcm9DWkNZSE5IaktJWnlRd1gvQ2V0ZVM0a3hGTk8yOXFna05OUFB5Z3lEck5BSXZPeHlQVVdjQjJ5RVppbVkrTUdiS2xEVmRFZXVBb3hZTkFXdjFVaDRZZUNYY1Rnb21ER0t3WW12RzI3YXZVVVkvMlFjU2c5WkgveEpHNUs4eHg4cEcwZFMwWlZsNFJIbmVlVXJGOWo1SEZaTkd3NDNoOUNmZ2QzQ1hYT2ZxTTFOU0h0dmZkNnM2dk5pSEdCVkVCUUI2cTJGYWhaanVmakpJaC93Mi85Y2JWSlpYSXlVa1QvbEpWS1NNeG0vSkFlbVR0by9ib2ljdWlpSW9ld0ZudHN4OEZ3Z1FJcTBPTU83b0o5VmdQeVc5THRvNCtueEJRcmtBNUJNekNmOWJtUW1xc1FHRWdKOVBDeFFqa3JVQW1xUGJiTGg1d2E2Mk14N3hDc1ZnZGtVMVFaUlJXa2g2NmNtWGgrLzRHS2RSdDVlQkZMT0luL1N4S01YeWxidzBCRjFpaVVUaE42ZnRuT1NNeDRPQ1doRVVjMlpWSFYzWUU1TlBaL1ZnWFpQaytGNXcyN2lreVpoVG41RlhVaTgwMHBNRFVIS2pGZTFwNVhUVU5pRkUxQktxUEh5ZG8wR2dqK2haU01jTHBwcWxYMldXUDVzelZyMlFBcktyTm1oMjJ5U3ZPMFNkRWdQdERFbU5PRzRKQ2VmSUJUM0gybVVKTnM0NWZlVTdib2U0OHVNRTMzdzE3blRZWWFONkV3Q1NjbWNBMFBUUHQ2eTVPOFdZRnJvRnVHRlFndC9pYmFwS2VDSXc5OHorS2JkZW5XNEYwTjQ5eVljeXNlVkxOUHZiN2xzZ293dU5CcVJvaHJKNjMzdEswQUl6a2RQR1JWU0hMVUdWZlB2clhpRm5TbnN1QmlCUmhWQnRDR3lCckwyNmE2N09QV2ZZZVl4ZzdXanl3aFlzZWN3ejF6NFlOT1NyTE15cXAzc0lBU2ZodVdLei9wb3ROdC92MWxSeWNYMkx2c2Iva2Y4MUVxamU1d3VVVVhLMnVsb2hyZUJMZkF6Q2F3eFdKWkU1N1BMVGFZV0JSb2FEM2t5aFc4ZUZ6TTVzclFOSlRYYVd1RW1zTXUyMTJLajV3eFFrS081QWgyYlIzZFhEaW1CNS9sQTBrTUxNQUhIWnRvYnFPU1RYNWM3ZjJQam05Z0s3T0FwS2IyS2V3azkySDBjOXN4YktxSjhvMmUwTTZjKzRDQnVsR3d0ZkJVUXZOMHpzNkNMZjZ0Z0k1cmFLTkd0Z2YzekxoRm1iK1owKzlJWmtKSWJtVzk0Z3ZNWE56NFVRWVh6OXBRMEJwbWRNcmVDUkIxRjdOT29Yb2JPdW9ORGo5MStlY1JCWElGR2ZIelRQS1dSeE14dEc4R0c0VHdxUXBubFpENlc0TUNKc0NISVExa2w2SGd6YS9wOUlCOXZUdkFoQXhGbGRHNHJKQnVkMmFNQlJUUGYvcVZ5Zm9yUTcxWVA5UnZGNXZqK2JQbVlLaERlTXlIRXhZSkZLRjhFYm9kczBzWHZoTU94dzFVcndnZmlDR3VIVkxaV243RE04VXMzSGVaYUVOeGJKM3hrQ0lZbS9aR2FBL01kR01scVVYcGlvai9POU80czJ4VDc0SG4zQXdlaEE2UG0rMFlpcDhxd0FOT3lDUno3RjdTNEVPK3JiUkxXOHM2dkR6emlxbjBCYjFkbkVraWFsRGxBMXdOWmxZaDA4U3JSMzJPdFhhMUZHZUNUZVI5Y2x2RU9MNCs1RkFDdEdNbERsNUJIUlpDWXBhRzIyWUoyMEVJWlVrSDdmTkxmcldMK2hZdWJxTzU5Z0x4SythR1dzN1FrVEFOblllYUd3eWhJN0xZc0hYcVNTSlRpSnVFd0pHVHRHSDRiZDJ2YWlyKzdIei9MSXhyTVNpTElXdXZxYVNDc25GNnBIY1MyQTVKZitiTWt3dXJ5blBiVTlNMElpWmY0KzZQYmgzQThMNVgxbFBjSW1GbWFTdjczVGxTVEpTNzV3YzJNazlFcDdNaTdIQlQ5c2tNU1pKWVhya3VQTjR1bVQrWEhXU0tBT2MrZjFKMVdmTjZIVGlqTFN2dGFWbVFxWllIQWZtQ3RrTHkxVUxlblRUbHE1Nm1TK296OXc2bHBxaUFIenl0QnNpais0UzNHSVdGaGhGWittZEJJSmYwb3hFYUVyaCtyTnI4YjQ0Z2ZVK3ErMVRjWGhWSDczeTlkakw3b0JNUHRDRjUwblVmZkduSGpxNC9NQnl2eW9hYk1lZzdrdW9BUEhpV3o0RE1IQWdHSWIvVmRza2lXVTdWcWNpTnowM2tjWkFQQXMxK1Z0dFFQVTlTNXVDMldDb3RiUHJGV2dLRjhsU3lVbzMzZXRsbXVEWjF3MWp5MURKdmNhQW9TY3ZSbUN2NkZ4MENISHgvY1g3VlNqTWJnN1ovODFxbXZSeWpnTzQ4a3c2VW5zb0o2MDdubGUwYnBqV0FwM0F2ZmtMZVpraXJlQ05KdnVmcTJxaWZ2Smxmanl2dWhoajhDZ2UvcGhwSjBVMEYwR004ZmcwVG5td2FMVTZmaVJlcXZiZkdjWlhRNXI0TzRzeHBPK2hHbDFwOEdOeUNLWFoxbndqcVBIRGNSTWM5UUhWVDZTa1k2UEgzMld3ZVFvbnhadVFsUzF4aXY5UEVEd3dvc1pueFZXK3JUd3NNS1VPbEV0Z1QxVUdHM3d5cDloR2pXcUpkQzlRQ3pQYm9oNmY0RlU1bzZCZ1pnR05SS296cnI3YzU0K1ZBRDNkaGczZ3ZBTTdldUl5cXJsS1U0akpuUEVSSkVVNlQzcHNSR0NBSlRYcUk1L2NWNXpjVTNVdkJjN25xc3hWVk9XdFMrNXFqK1U4NXVSVTZ6NlhsaHBIdXpnYVRHbkJ6L1BScFR4RFNjS0ozV041eEdVbklqT1g0RXNjREwwMGVXdkUwVmZDUmFJeG1ZL2NLeTBTZzZFdDZ6ei83MnhFN29MWFdoR1dJVDVJcEg4ZllqRDd0YlFOTlE2ZTNJUHR1cHNUTDZpWlJuYllhOEVDZUxRUE5xM1dlNGg4dk1mMTQzZHcxaEd6Z0t0NHcwNlhpOHhVMENwRUI3YVhyNm80TGVYcy9WRjJMVDliWE53OHNEKzc5QXZWQWRSWldJYkF5eENVZXdCcjlrK2J6NlZvSmpHSzZoOGdLT2NMelJQajErRC9XODZiOU4wMTRpZ0lIMEg5SE9veGVmVXBwWlNGQXJld1pTdjYzM3cxbmx3M2NQZy84eU5QdGMxdzdNNDFEMzVqWUdLNFRwZ0gyUnZNc0VNc3YvYnZLYXlyTFZKcUR4NHdnSXAyOWRjekRqaGpYUHZLamE5QXVYS3kxYVFENzdUeW92ck1qTW9mSDNVa2IxWFlSZVpST3BmSDZpakhLc0ZGTGlrL1FPWkZqbVNHZnF4Y0JWM0Yxb2drVi9wb1luMEFuWi9tV3dPMFNLdkxYeEpySlhocUN0VVVnSWNpZnNRaHhTUjRBVlBwUWJDMVU4T0ZueHlTTHIrSDFYZDBuT09Bc055SklnUnVJaWNsWktnMjRTTXJEd1V4a0NmVW1YWnUwVDdVNHVZM1NBWXZlYXJUN09GeFVqWkdCTEs4cndERWw2WmF0RUc0by9mSDhkR1JBTDVGSnkzT0c2cjFFcHAvejRBT0ZNc1hNOGhsd1ozdHhrYVJnTEFGN1VzMWVhZENJN2NqU1JPRVVWcmIxUm1aTERPTjd2QmFDNlRCVWtwNUR0b241dkNrcjlsYlZGVENKRWd2RzViNmtrN1h5UHlqc29zcHhVNlZTeDRXVEZKdG0zNzdSYmdBS2k0aDFKZzYyOWJvMHZhVXlLWHcwdHVabkllS1F4bXN2elBtV2RJQUFyNmpYTTFWRFQ3WWpIdGM2QzhFMmdPK2VmVnBtWVdBMWFIZnZCTnVtdEtkYlFuUUVYNkh0bE45cHRwWmJkaHJKeFVRN2Y3bldXeWozZ0ZmN0FhLzlwckxSVTI0RE1TTWkycGlNVVlFKzkydFhHTDV6Vm55K1NEUzZ2OXF4azJOUGxSOVhLSzAvV3dqKzVSMWV0UXcvUHh1dkhPd0lWWmV1T0ppTEFrREp5dll0d1ArVXcyTnZQSzNDcUlnQk9XT2IwTUZvMkh0dWJ4OFlCZG9tM2N5ajg3RmJnTXp0VHdoc2NETWxxdWNrZVJrWjJqUXdYcFA0QS9ZV2lNV0xpZkgyb2IyUUdFTVB2ZGJQRnJpbm5wK1Zaa3hLN0dBSWFhOExHYUZaWENDU1V4bWg1WDR5a2VhSVBVSG55WjI2TlZxOW5BOHlGNWNsdWNnN2UyMEd2N1hUVE54QXQrMjBYc2o3Vi94YVhlTGVWK21DckVDaHc3TGliNjM0MWkzcTd4Szhlbmk2ZEVNZmVtWHRMVHl5NENyWnF5dm5GM3haQnlROFdMbVNiN2xaY0FlTGRZcmZwbWhTY3ExWFFTcDQ4YnEveFNPZG8rTTFpRVY3MFJmMnEwTHl1eGZ6ZU9KVzlJVEU3QnF2WTEyVFdYckdtdmNNU0piRWkrS3ZPQVVORXEyQlZZT2R1ejZFaExVY2c2N0RIK21GWFBKbVNEMXErZXBQOCtKdmxWWHo5cXBBb1A1SUNOQkk3ZWxFcDJ5bkFqWDhPdlVZTEwxekc2eFpOUVF3RXlrbitYVmRlTmViNEtBM3lKNXhodTA2WVVUM0pOTmdoZEl5TlM0NW9vVXhUUXU0L2x6RmpzQTAvWDFHV002MG9TMW5kZ0Urb2ttVXQyRGFHdE4xcEFIVVg1QWhkR3ZYZWRwdEMzTlZhUUtBb2RHMjVSTXBTaVlORkhWZEN3ZEptM21yR3lUbkJEZFNwM3lTVGFkMXZPQUdyV1hGZ09ZSndZNUNjei92MllYcVRHKzMvZjBuTjdDUDVyaGNpNnJNUzNFOTJWajZIWXRNdmpHbVYvaTRHUUttaXcrUWF3L1kxcVRXcWJTUGdZdjJHejJOajMva2IrSHIvZlhhVVVqZ0VuSjBOdEdrdE1nVktYSWRVNVJOVnNQNzY1K3E3V1pDNjVBWFdnbGFMUjZlV3Z5NUhqejlHU2pJUFFTbWowNm9ES0dqOExNVHNDZ0JidW5Pei94U0lzMVFtU3F3cWpScGY2b0Q3cnA0V3hlSzNUOW1PU2JGRnpXMktndE0zTW9oWTVMMXFPTmNpTVUrRXRLK3Q1aExvSjNCd0RVK1VoaWEvWTNjTXJHRjNFdWJRY25TV0ZvR0dlRlRBdnNQcktVaGVzbjExbkxER0hJdUJ0bi85bkJKZmxiTk1jeDVxbXJKMzdyS2lnWWJpTVZvWk8wUXpKNG1BSUVOemt6MFVuUERsZi9zZEFwajJwdGdhTWZuckM2Q2hhOEVrUUtxWHpMazFkWUdFc1F0T0hYUEZMYjNFUnNsd3ZWNmhFU0lDTE1RRmlQYUJXS3BnY2ZmSmJxZUh6ZHh0cHlKNEVtYWJZb2djUGxydHJHWndSL0RZemtvU3VWbmlYcXdaN1k1d081Sk1HRWx0V2xVTUFNdFpOMGxuaHh5Z0lzVmZQdktxVDBxKzBsdHJSK3lCY1VVdWo3ZFhERkdFeDZwQ1JxSmV4YTh3NEV0WElxdldOT25WRHVBaitoUVBZZTBEU0hoZ1FLUTNIaENLYUtUWis2MlZVOEVOZ2ZYdENDeDVTdm1CdlU0Rm4vNXhqd3BCR3VBQ0tMbkUrdWszdUpZaVZTd3doemV1NVZyaWNUR0NtcERhUVVLL2p4TklnT3EzSEJLQjIwUWxNZHN4bUY4eTUyaytWVFQzU1pZZDNYaEZBUDgzd1dycmFicnVqa2xFV01qMUZUYkVxb2dMd05HTmNYRm9sajJtR1FOS0ZTdklZYlBPZVNVTzcrY2d6Qk9UWnJaUDdLQmhWUGM1c0Mra1BVMHlqVXpzamNHaWxkNEE3bER6TkFzOEFDZnROK28yckNkaU9zN2lpZUlLbGNqMmY1WWVrNzFBaDBWTjY5RG9rN2htZEFBcE41OGlaRUNtMll5MTJ6NjdnZXIwMlZyck00R01JQm1kd0hZN1A2VkZvOWdVU21hckFQUkVEQWk2aHNtaFlMTWdCR3JsTkNWbFNCZWY2bnhxUzViZHE5U1puak9FNW5YWE9nN3ZaUExPOVY4Zk1LbUVDNDFpTlErNEVSc3V5eml5YzJIS3A1UDVnOEQ5M2tRMGw0YXBFNkJSWDdYM0lsdXFBVnpSaVN0U05DUHhtTkR3b09Hc1ZJdkJRU3orS05sbEtOVFc0WDVidEZUZFJ2OE5uN3ZZQ1diWUtyd082dkRCVk5oaEZjT2FSZWNHVGFQRFdhYUdlaGN1TGhHVmEycDlxamtMNm8vR2d0Nkg0aWVoNGRTc0txWUxOOVQya1V0NmJ6NEhBejJmTXpXUW02djE1NXNmVlo5My9LYWxla21KNEZtVGN3MHNGN2phOVltZTFYWHRnN0VmVHZtQVJESEpXb1JBK05kUnZOWDljU3pUM0tyVkg1bDVMN0dGRmUzRGVRL0kyeVdWZjc4bmF3VXpNdlE4Y3JCYk9CcjVLdlNwZnM0ajhQVWxHVW1PVENQQ1c0a1FWcVpvWmcyN3NaVWN2U2lDMnpQdWhiYWttck8wMkk5cmQ1Qndmc1h1MTRGNXJyMnZnZnhscnF2R200bTVJYURWamhZYzJSTmNtMm01UzNxS0Z1eHZHNzFnd1BCckh5T2x1L1ZuaUJiZ0k1dDBOMUpHU3U5V0d0b2cvQlp1YW5NS2dCeHZUV2tkYW9nd2pIK2hTMGY1NU53U0NQaU43eHUra2V4bEpqZVMzUWxQSk01djh5eUx5Ti9pbGUvWFkwNUxrWlBrTU1NaFFYSUNzZXhwVXE4MDdsRDdZZ1o0dG1CVU5kQjBRTXBTbXA3L0JLRVAvMlpOcGI4Z2ZTMUNBdkZpUklLSThlT0hQVGFhenFXeUZKVjNWZVM1ZHk3bTZpSUZydkpOeTNmSkJMRHFzZ2F0YTVzcU50a3BZUFhoVXJPU1ZoWjg2cUJXTHVFajJYUWRyNXRZM0NhTWhjTmtMZ1FhcERGL1FpWDlucldVRm9zNHAxSVRtbFZIUTQ4MUlaVlhlYzBmWkszcWV4OUVCUkJ2QzhrV3pHaUxoYXc4dTh6UHpiU2E3QklTZHdxMFhIMEEybUJKYkQ3d2QrT2swSlNEcSt5SjU0V3ZpbzhvdFo5b0pqOTVhTDZPb3pYYzBEU1NnL1Uxa2s4LzVRR2sreThpcU15Z0RNOGpXNmJ1NUM5TFpLOXB6bU16d1RSeTRYZ0N3aE12VDZjblZqRWMvWkIvanJBbkZMQUlRaDBaQlZyU0U2L0ZBeWRXZ3FaNStoaW5xU0hlUXhaZW5iM0FhUWZwODdkMDlDTVI5OTNiOXlFTitSNnV3SjJEWFFhR0RmOXZFdHRrdGFJM2wwU29BaUxyWG9XTVo3c05WaGtlYXZpaUFLVUViM3V0Tm9UeWROcFhsMk0rNXY2V21aVXI2bzlJNEpxNk40VmJWenkwbjZNdVNPdmlWQ1N0OWtRTmRKdFhGTE82WGlacUVQbXd3bkVpS0NCd1AxZHE0WUNOeEVrMnh2Y0hUc3JUeWZlL2xObGd0dFlBWWduSHcvQXI5ODduSHVTeE03d21LRWdYcGQxTEdmYTA1elVEUm1BK21WQzFKM0tNN281a0o3WW1za21uTHNMWFZnSXNuaXFuVmFLNXRjZzcveVJVVy84VWpxWUErTlJBN1A3cnhYWkErU3h1dVIySGszS1JFbEFLTjdnRXlhV0JkZjhNd1dMOE9lQXo4RjJUNmJKU1JTVmhnc0ErRUVsQS9JQVRBZGpuWU1kTDZxWStpWDBBM1dhWEJlR2FQY0FUUGpsSkx2R21vUEFCdmluOEtXRDRGQzNFNVRISHF3VGhlUTYzSlRjSjVnbXpQWG5uNXBhSzAzSTNtb0cyMDYycWlQaWhQMmxxS2w1Y2lpNXhmRzhOVkl0QTVxamxSc0RNUGlralpqNjJCSXYxNU10RWNRZW44bnV1RXhJRmQzWXZkR2ZpRzg2dTk1MXRQSjRxdGM0STkrbzdZeU01Q21IOTJOQjlGc2lXNFpBN25scldFN3MvdlVJRjB3eDFmQ2dnOVhqU0dOYWI2eWNmalhyMHVmMnNiTkxJZEIyOERlMFdNU1NQa0M4QWJOVXJHV2VHNlhnR21lWVF2eC8yazdpNVNwbXBZRWk4bFROQThIbHB0bk8ycS9ZZGJlMGp0bkpPSGg2b0gyc2NmMXRScUF4YVZENDUvMTFDUlAxRzkySmo3d0xISzFKbnJqZWM1WG9MUU9hVHpvWnpxVkNZc3BiWUc4Tk5WOWM5cnJHQy9ZVThMc3Rzbks2dUlyV0x5UndGMzQ1WWV5cFI4dWQrU3Z4R0hTVUFyZW1lWmVNL2dJQ0FnSURtOWEzVitldWQxMi9COUlBQXd1aHcxcEIyZ2IwakFWTEhmVlcxaDdoSy96UEM5c3krYmxraE5YOWF3ZUNWeDlwRFFWcngxSFNFNlRWM2U5ejltUU9KYTkyb0ZlUndHT01JdHhXRm9ud0cvcldUTDdIUzQyQWdrMFQra0VTLzRiNzZTRVN0SnhxVXhwMnFKRTJSeEZiUmpSaEJtNlVtZVAxMWxwQk16c3VqWmgrcjVVVFkvWCsxa2tvWGpnZklWaVRMMUIrSFBnWmd1VFFRMkF6aGZBNzRyUFNLOEY2N2xYc1F5aUp1QXg4Vm44anVadXc4NXhwakZUOXQ5Z1Z3UU9vOTN3NE1RQkUwNmJKNHFWMXhnYkFKOGVidDZyaS92dGsreDNVY2FZRzRRTVdjVllXOEZHTjNtVVBWZTEvYWplK01qSmREWkJISU53dTkrdWdRdm04Z0g2N2d3YmdtVFVQQWJjOGpoSjdRbTNmMEZvWVZHSVZPeERJRndFN1hhTmg1NURxRk42RGhFaFc5NVBOWVl2Ri9OUnBSQXJraGNqcW1VT2ZzTW5kQWpzb2FWWGdLQjA5VW9KSmtGQ3kzdkdOdCsxUFBkZFVjWkVwKzJLQmp6NWUvZEx1Y3BCbWFmWlozL3gzbDZpY0tZZFhpc0NHQVEwejBHUER4Z2o5ZkpVcDZGMnBmQW9xdWIwM2ZrUzJGMXJBWUdPUzlxSTk0ZTVEL2RWQzQ3T1ptSDd6bEx0c1hjbGphc0FoWW1jSlNqOWw1bE9GN2VoVThPRnFJTDhkK1cxYjlqSVkxZWdmQ04zeGNFL2xJRHV6L1dXMjNIMlY3cWZLZk9IQmpVUjQ3SzBpN3B5bGxaU0cwRjY4ZlkyVzg5bHgrSnc4dU9YeFBBV1VhdzF0S2tTOXlrcHU1bWNXQlNJV3RWa015eXlrODFCRmdjelB5Ui9pUmM5aEcwUm9tTUNsNWZ4SjdLWm1WeVJodlJLUVB0RlpFZDdXZW84VjVUa0E2WUxlTDVYK3dUbUg1QzNCQjVsWmtLOWpZNXJVb1VKdTJ1aTBLbE8vcVFrUjhBVlVUa3NHV3hwN0djbUo1YUhvdnErZkkzWFBGZWpRK1JYZDYvdG5xY2JqR3FLcFkzcVdaVXFsSzlIcjFnOHowRWhhRjZEdnpnUXUxVTNQNkhGanlUMS9OSWZReEhEcjdiS0tNSWlld2hHY0J5ZUlUUmxUZ0NtN3FTd3pSRlV3VVovN1RpOWJiNmlnd1BNc3RGTFNCaE9HNytDUExSdkNvKzZDaWhxeDMrTk1tNE1QZmRPWmRBZFNscUJZWFovekxpcTRMcis0QmhuUHlKL2pMbWVBOW1waVVmcEh1UXZrU1ZNT2tEcUx1TmlXbkFURTZZelFlbVZYY040aGpjTEdkTTZ2dWxYMkFIOEtNWFVra1VBZnlta204OEpES0FJUGZrangrWGM4NFpCbmFMNVhFcFRNY0h1NjdCV1NzTnhxUUoySHRnNjJPWlhHRG9rZ29wYy8zWWtIa2pFcVdsUHNIZ2JNcWJPMkdndXY1STNJdE9lRHhnUWxqQ1hPS1BIOGp4Q3o5OVFKeFMrTllac20vRksyeTdtZksrVzgzT3FoaUl1U25KS3AwK1ZjZlNSbGZhVTEwZ1liVDFGUjFjZ0Fja2Jha1UvNTl2WGlaVEZmYWRZaGo4L0xBY2RuS1JramJmM2ZkME5XdGlEZU5GeVBSbXY4dVJQOWR5clo3RjJjQ05hVlVnekE5SGdxc2RKRmU0MW1wT01tbWtBUGhOdzdEeGpCZUFQc0p6SWxkUUdVeEtPbmxiNXNtcHdnSWFabVRVcmtMQ2tnRmZaMkNZVEVHWmdTUkhLa2Z3UEYxYnhLQzN0YU8wNWNrM1lEaTZLNTVHQjNYT3ZRYU5wcFJmTEtwMWRmdk44bXRwQVZvMnV4VFhIZk1UbEJJam82MWk4ZUtzVlplc3BOTE1WR3NXekR6YzkxUVVQaFdCamo0V0JRUEVWMjB0Zk9XMFZTS1ZNYWNwUGhmYXpQM0UyK3NGNGh0WFdZaG8yZjR4VDdobjJYUXJEU0NWOHVrUktMa0I1eXAxQ0NYWS9ZREY2K3FzVXYrOEhRcFZiV0dKaDRWWmh0TmdPZEduSlJvZCs3dFNkUDhyNUErRzhDWUMrME5mNURLZ1hUYXZsVGVobkQvUmZ3bzE2NHdsK2toSENydWxtclRpcVFEbjZDMjZlUlFMcFp4aUROY3dNYTI0Y05hN2dDRlg3ektGOEFyaWV6MFkrdjJMOTQ5RWN6emU2aVNyMEo1ZkpOWUdOY3habGF0bWpWNU44ODVlSllSM1VDcG45Y0J5ZFRlVmFDTEVEUHduUFRJQkk3MHptNmUvSzdVOHQ2cWxuU0kvUk9oL1RJNWZWdXhIZ3RQd2F1RkIwdGZyY1RYdVFyOTdNQmFsT3NBaTNpT3RZcERsTEg3TmtvQ01rdlp2NWgwaDNmRjExZDBNQk4yUkRSNlQ0VjJqNUhlaC9IM0lDOURVSWZNRVBGV0lyTlRHa1A0RzYzc0oxVEdwVEplYWZSbFZxZnowMHVDMGdobzFQMUFjWmwzbzlIVzl5NUFsbWcvMytmb25pRzZqS3gyZ3oycHRGNyt4NTQ3Q21qTENLOUhZb0JVckttM0ZDbkdkSXg1aTBURmJKWndXNVBvVlJWWjEzMUJjYVhCeWdzNTFTZjdaYytraUVLL0tBYUNUbmxGQVRwU0FkVGVVM2tFQ3JmOVNXU0M3VStrKy84d3o4eEpNdWt0c052ZC9rcERTN3Vtam9uYStHT0VmMDZJQWs3b015K0N2R29KQitacWttZVphcGNzalA4RlRWclRDbXdpeFVNZ3BPVTY4bkVhWkRMUWJ6cUhRc1dqWFgxQmVIV2N6NE5qTFFHY25SQ1lPbkhwdDA0aVZ6dGNWbW0wNlRJa1hPYmhVdDhFN1lHWExSYjBJd1NFQnpvMGlZQTRsbm1lM2M5aXA1djVGb3BjQU9zZldpL2s3OUplN3cyWFI4NEQ2eEZhUUM0U0Qwb3kvQy9DSFNvV0l3a3JBSnY5b3NSZHBwRzJoTHJkZWVWRmVjYzVxZ3h2Q3NCWTlKVStraElUMnJ6d2Nlc0NRNnBRWlZSbnpqbzY4QW43bE52Sit4UHpWV2Z4Qi9qMk1veERtcHFYL3cxN1VkZ3MyREk1NmRUR1pHeE1HcWZ3eDZDckhBR3lsU01MY0k5V2ZFMm9xWVlaYTZaSVlHd0U1dFV4UlByV3F6NFJQNmtoT0ZnTDR1eDBiSEg0d3F2dEVUMnZMWm1IUWlsUXhUQ2pGVHdnbXkrWW9qNlJuUmp6a2xhWXMwcE5PMkQ4aU1MN3ZaZ0doZkY2UjFMVG5Wd0N1eFdKN1NGem1HVUhXVWNQZTRpbzBHbG9JUVhFNmp6RW1uNHpDTW9va09VaU5BaEs1NWJoaXpZN3BaY2FGUmFYRjJqV0xFMlFqZGRDZzhuMHRWQSt2cDc3OTBOazI1QWZOUEVyLzFJc2ZGbEdPV2l4SWxCM0NKVXgzSjh1ZFNkR2JycUJGd2Faa29xMnVteXNWd3o1bW9IaTRBcWlQcHRMM1FiN1JNc2ZkK1FwSUoydUxDY1pPNUNDeUY3NHBrTm91S2daTU1uaXdOdTRnRFhMZ05aSS91Wnc3bmpkdUo5YjhqcVlvSktaTFRQMUtNMU04UjhyS1NkUUM4Qk9FLzV3a3h1RXJKWUpUa0lmejJsVUI0alM4SXBzY3FtRVVqMjhPWjlDVldiNVJGUVJRY1lHTHk5YUtML1BoRXl3TCtZMDB1a2g1UDlPc0J2NUxrVnRpSGxRN2t6UnhSQ1VWbjNldW8wVW0xVUJXbTFqOFJsem5UNmFHK3VlcDZvSTAxOWRGRVdyNnNBRjYwZFVvK0hGS3loSUlDVU5zWlg5bnBtKzJIQkJoN0FVQ0pCejBvU0J0ZjQ4NW12R2FMeG53YlUwNHNLbTNRSmNqaUFQbU1BSXgwRE82ZUEzalNibVYybEQrekkzTjMxbjRDWXl2VGtpRTdpMEFwT01LMnJDZlpQQ1JKbHN1Tm5UdEtzRzBuS3F1cEs3ck9mZzlSYm5mN25lQUt2T01id3FCRkcvRExLRnBFMUlBakN2M0JaYUxodlgxQm5tQ0p1WnIzdjBZZFo3dDR6eE9oNERvZzhtQUJuL1I3bnM1eVlLNkJpRGRzWFJSeG80dnIrL21LVWs0dmJhWmRLK3lNaWwyaGVSWHBSUkV0N1pxRnZUN0lZQU9md0R0RTAyb3dWUnprRWZyWEx0OWMzQUg2eWdrU3hRYzA1T3g2RDZkWTRRaU1zYVRvaVJKenNZdEs4UlVLMXBldU1wWFBMUSs1dFhTRjNUZjl4YjlPdTFKS1p3SmMyOTVKdVc5VC9ML0hweDY3VENpTkZVdzBrd1VjN0tSRExLT0ZxcXk2aFNDaTIzUk9ka1dsWnF2eWJUcTRVTmxFeDRaZW9HUnlTVmMyS3M4QmVZTytTRUE4Yk9uVFliOFVIVmZDa0wxTUNyVTJxS2s4S2dNVHBqZTc1QlBlVDB6M3dlWm0wSjRVdXFZVW9ieG1QWFI4QVdjTWQ5Qkh3djVSNFhxWkFYVXVQcmF1R2k5SEo5NDF6M0xMN2Q2c3NDMUZ6QlZjaWxlUGxoNU0zZGEySnFCQzBleXE2YW1aaGYrUzF1alhGbFBBb0hXNS9mSFVmZTU4RTkxekxSRkwrUUNKeVlpem5pVi9UMGhqclN2eGZqeFZ1a2lFck5Bc1JPbGhTNFJISE9Bc3c1QXA4emxjeWdtUnIvZlhFN1pxLzROL3lOV2l0NDZCWmlrZzZkdlFIUnd5d1VhbHVNajRXMUZPMDBzYVgzZzBkVHNBLzVFdzMyN2xjZi9yTWdGRXZ2Z0VXQWduY2d1YTMrb2Jhdmp0QnZpc3MyV3dRL0NKZ0kxQnV3VkN1ZEFGeldBekJFSjE1T2hscHpzNVpjQXlBZVNVVnA1dWVKZ2N0RjhSN3MxMW10QXU1TWQwczVhNy9qWHl5UURIREhYandUV3MrZFRJWm9yRDJ4bDkxZWdORFN0bVhUd3BYTzB3M0ZGdytEeUprQUlUWFpKU1dxL3JSOHFISlhWUmdsdmhONWtiK0ZjRGIydW4zTk13bk5VQityektYc1I2R2FqRzIxVG9SWmw3TTE3RVNYWCtuL0RWWklLREZMa0RDekRCelFJOHpIUmEyVHNjczZ5SmE0MTRreGRsSXZ2TjJsQkhGRC9ubmlpZDNTN3BPQVdtNzltdzFyWE1yOXJIbFZna05zSDAxOURFczdBcjlpTEpjZkFZWWRjdzFxOHlQWldlTGFGRUJaNkJoVG9MZmpueGhtUmYzeS9QSFdsRnNnMVZMNTdBV21UYkdBdUdmTGxtUTZ1ZHpHRm1US1FLZER4S1N4SlV5MU1mTllycC9DNVdTMmQ2Vm1wUkxGekNKV0hUMmFZMUFRWi9RS2d0azhvVXN4Qk9PMWFUTmZlTEhnc1UvaGorNjJVeW5Ya2tJcTFvQU9sdkJTZmNJd0VEeEc1ZFhXVTlNZzRhbW5BOHlXN1c2NnNjZDZNc2Rwd01PbEoxM0ZBTDlJQ0xtZ095RnIxNDhLdlJiNDRnUGpWZHRFbzF6M0FOSTIveDFpdzBUSVJmTVB1d05tM1NjSXFyZmZ6TXRrWE5GVzBpODRpdnJoSFNsYkhQR3BjT2x3TEd0elRCblpWTzdlYThvYkd5N0NXM1MrZXJsVVVBOUlkcVcvV2l5UnR3U0JrdWx2ckY1aitaMVJoNDBlOWROUkR3TmM1TTJacXgwRUFwWktBTE1laEZwdi9IVFlJck1RWkkzK1JaWGR1aWsrVFU2TzJ4QjZZMjJ0TWJjMVZBSEZMbGlGTUMvcVAwZ1VUY2t1b2FCUDg2eEN6NEdDMURTbGlPcXlZcG9BcFl6K2VVNXdUamRyNWdpOWM2clVBZDczRGZZMjZRZ09QUk5xM0QxQ2NCcXVraVcyNTNUL00rU2RvYzlTZ3JOOWg3aVRldUhGZW9FNE91NW1GRkRXbVNqTDR3cHZYRklieEY0dTRubm9IZWxadHJhR04yTnAwaFR3eTRnbWl2RHpEc1lPWjVkYzlpVVNkRGY5NnowQXdudktoQU9Zb0xxRjlONmY0anRmWUIrVEJhTmhreGRXeUxMbXFwdVNJOXVzazBocGVJQ1pCK05xZGNuZ3kvOWdPUTBWR3B0d240bERtSUNEb0pQQVJyZnpERHRybjVvQUR6Zm5OMURjOGRkRHA4czlHN25YK3JEVmh0OGgySEtNajVDbVhrSXJQTjZqNlA2VlRLOWNvRVE2cStoNjRxWDNzNFZnNjVhc1dZQ2pEZmF5VHVrbWc0Ui9GTytIbi9ONW9CVjVPVkROWkxuTWZMcElhYitoVVlNRzdZMXgwbXkrSFVxRWRKYWt2WUhuUXcxeUxHbU80R3VSSlB1c0oyZDFwOWNYNnVkYi9Jc2I5Vk9QWWgybVVGNmt4eC9uQ0kwRncvOGJMVFVIMFZDWEJkT2E4c3pTbUwrVjhVVGlnWkx2TXBkeUY4L1FVUXFQeEhWdTQyM0QxZTg2em5IRlpDYTRtS3FsRXhHOWpHOXQvTEpaNGtHOFZxZXNGT05iVmVlNko3TjU0NmRnYzA5S1YyVnVhNFl2SnlBbXpDRHZaU2VSZ0owTVhwdVZtdXdDL2xhejk4WFo5Y0JkcFZESTN5a241TnJIZE9yZlFhSU5nWGZtMm9DdGcvU08xK2ZXVHJzckpJTFc5dzQwRFl1WnUrQWwvdk5sbGR3L1EzQVRidGV0SXpHWnAxSzVrVzY3ZEhDc3kvVGpLMUFLbDZTY2tKQUpXb0pVbTJLd2swenovdGdCSDBsaW1nSUh4dzlqNTZQZ0lDQ0EwZkhWOENGa2pMVCtPWXl4R2lxRlBKeVdKVXpaYmtmemJCVHdtTXBvTTRqRlhZUXA1UHBZZ3dHRFVJM1htT29uU3ZLd2hneUxRMmxSMTQ1OVdwTnJJcVpNcWFjQ29EczQwT0d5Zk9jSkJRWDgwQlBWWHBhRVM3M1lvTUgwaEViRm96a0QveTlyejFzVDgvVDIybVlKRlJ3dXR0WWxPcjNHTmx6cnFWWlRFSDF1SGx2MXhjM0p1cmxDbWZwT0J6K2dHMEJjWlArSEpRYktIYkdKdGNhUXFxbEtUR0w1WmUyMnY1Z3FrMDN4cFU0SitZK2p0ZjJMNi9yTWorc3N2K3hMLzFaVHI5anZmc3NjUHIwNmZ0dEcvdGVmOXUzbXZ2OHEwT1RlU1RsaDBQeUlCV1BxZ2YweWRwUDIyOWd1NkluS2Nzc25mT0dkcnQvSE1DMUtZdjRnRmxTTUd4eFdCYlZqOEE1b1Y3MVdUM21Zb0dBYXBpTUJUMkVJYnVuc2RScXdYVEk5aHFpWkhVK3FYUk5WbGtkTkhwejRUdjNNREUxWmlBbFVsbnJ2NzNOS1QxQ0RYZVpRbWdoOUhwYU1GWmFEbURxV1cxeVdIczh1MVVkTmFkc25xOWdNQW10aVBZRVU5eldZQ3pZVVc3NGpwTnF2Qk9DTXA2Tnh2WFVFU3k2YlhZQys3eG9DaEY5ZHkrNURIWlVKcG91YThxT2hJTnVaRE5wbG5PUExGT0hQQmpBSFE3TlJEbVhPek15blNBQjhtY0dBM0Q2WFhKOW1MNXoyZS9KSVZVanVEOTB5K3pEWTA3WVVSaHp6UitwcFQycHMwN0U5ditzWndZMHR1MWF1UkZuUE5NWHlKQWZRU1ZmZXVNOWRJd3dwVTRRL3dXUUIrbEhRWHVrUlFXQ0MxQ3VjaDJZZitldkc1a2RnN0tVS09ySDdRWU85VG5hSHoyQTgwQVBZNVhvTllKb25xNlc3eHc1bFFOWUM2aWFZS3ZMYU0rR0YwVExCa2NBQURVeVNlS2hwZm0xY0VROTY4MkZqRHV0cGNDZWVUTGVKZHpwYjA0US8rVHBKVlpwenU4aVRUTWdjdFF0WGMwdmJSaDhCSytOa1RuUVMrZ1RwMW9UVlZDT1lmaXdEU1kwZlV1UW9CcDgrMmowMzVQQmFsRjZVRlJSdjdpV0hvME1pbEYxSjZlZmY0VEtOOWhYWWd6WGJlMXdjRkZnMUM3WUtqby9DRGVEL2dna3l5dm51Z1ZXQWlSM2lCa083cWlXVzJ3SVMyNCt6a1NoWVBPZGl1ZUlQMThZK0FoeXNXZVgzTVlNRXBHVTlVS2Q5YitEb0FwNFNtQ09janUvQjBpN2NFTWhFSUh5QXc1VTcydVEzV3N3cktVSkRRYisyTnE1WXlOWVd6OWlDUGsyVG95Tkg4U2hSM09TeVd4VTJEL1NMblA5c0FtMktKeDZzTy85c1B3MHp3MVc1cXhES3NxbXlwRERObDhCcUY1UUNKSUdhM2tYNVJRbzVabVJqQzlaL2VPK2t6TVNGZEZQYStwVGE5eE1valRiUVU2Rll5eHZDSHFTbWsxQ3J1MmE0RTI0dkZBd243bS9lSTNBRjVmRDZxUllQeW9DRDc2aXhDUnlNNTZZYU0xdU00RTdNU2Z0QXZZM1dPWU9NcHVZajkwYlNUMFpja0Y4MCtFOTcxVDFVTGlrK2s1VTdGV2I2V3J6TTlyOFd5czRIZXlLbk9uMmV5eklWcWlFb250d3RFaUZJWWtiWkJhcWgwOC8yMEZXUTVzd2N5SlBxMitycVZkYjlZdzBlUTVRZlQ0Z2ZacG9OTUN4N3NKR1F6Z0N5cTBnUUhsdDhmdkwxRVNiY3RIeFFKSlFhT3AzdGRtayt2Ty9MVFpuT0xoSkY2L0RCWDU0QWRRdzhPN2dmR2lhUklIWVZSUExZN00xekxlTUZNWGlSVExiWWZBcVkvblJkQ2QrYjloZ2VKUWpLanBOcU4wY1p4alhia0JHYlJNMjNLWUc4cHo1NStlOWhWUVhiRm90QWZzZzF0emR0SnE5Sk9lV0lsVWhBMUx3R3JJQ3BiUjJtZ2huR1FqcmpUUGFQNEErcXlJR3NyWVB5VnFGYXdZUURnWGpvOU5EMVpIK0xNYXR1dEhUL1VrVFlUcGpvNWhSSy9ZNUhGTk1EaDBsRmFhdU9JMUxtS3hwcGNnbTdSQ2sreEdUM0FISkJhZTkrcXd4aTl6R2k2djQyc2FmSlBKckNFSmQvQ3FqcFpHb2hRR0U0VE15clBzczMxOG0ycnRHS3I1RVJLWTNrbENBNFhQYXFZYWhZRFExWTk4YStWSFFZK3hESEdWSm5PRkE0eDhKWlRVZ2ZkYWJtblY2Y0Y1cDF0VWVKYktRRlViQ3R6WmZiVlJUbzhjZmkrdGNQWGNsbXhmQlpua05BdFBDa2M0aWN2UWRQdytxTVlqQUkvWjFocjB4a3hhbW5MOXQwcGt3U0dWeWRsVVJvZlZneUF1YkdHUXdSYmYyemdBZFhWZDlQdG8yTGlXdnZkWWo5OHVLcmd0dzZkTERuZU5zWitUaWs1a08yTVJRNlgwV2FWYzJVYk9kSnhiTDVMWmJzeHVSa1VHbnQraWtJOWhmVFR2UEFoVjZCdFNPMTlOL3FXNGpNbjc1SzBJbjJSVG1HaUtxb05aSG1kNzAzVVArQzRLbG5NKzlQYm5HejhvY3loSUtCS21HTlJqQUVUa0dUWEluYW9sNXdlb3F3U3AxTThGdnpHNEs0NDRSRjkyaUxramlBdW5VZGxveGNxci9RU25nZ1VPTlBrTFZMRU5nR2NXY1ZkTjhSS3BraElMVDd3WVZ6M1lMRFVZUVNRcnNWRmtFMVd2NTFFbjJmU1BSS2dqUWtwMkxsSTVHT3B6WUNhUDZUeWp6ZmxtcFQrNGppVEh2eDY1WFpCS0FmOTZtUDZtSGdVclNQcVIvQzdWYWZIK2NxVlRLQUhCNUZiWTlpMUJzMGN1UG1uS3o2NVBUSzRhbVpROE03RFVKVURSTUl6K0JUWTcrMzVMbDRLZ3FtQTZITXBBejBsM2NrQUlmcVBINGYwRnViWHRIMnVCek1pYkFqWnM2cXZzTno1dUc0V0UzWitUQm1QR3lRekdlSTcyRysreWkvYzI2bHNsRExmRWYzQlZrckNvQSsyMlBRZ2pZNjk5SHRxamxYZlZXa0lhbng5Rms5cEFGaE0yZmVoZkkxZGFla08xWXIvaXZzbWlNTW8vMU5jMUJqMVFud0Fwa0NSbTF1NUtUNTFWa2RSSm5Sd2lidHZ6VzZkcmx6M2k5YUJHNFJKdk9abzM2am9GUXEwUlNFLzFCSkE2WWwxeTZPelVwMmtMZ3JNcGxoQUIyN3BsOXlsU0hZejY4RkZZTlI1cUFGR25ja2VVM2FIKzJ1U1FNaE5qbDdDMFU3RUJjMnBoL2JsVkEydXpRWElXTzlzWFl2c2toa2FMbUs2dXp6eDRTa3ZQeFdPRUR0dnNnZU9wZVpuU3RoMXRvZ2xVOTlqR2JydEQyaStuakUrK2FucVRRVjNQZGZzRkpmeU5UZjhLVWUwQUd6Tm9EWnJxeGdVTHNINUNyZVNIdFJpc1QwbW5VVWEyeHJiQlh5QVE4LzA0R0htOGZ5S3E3Tnl1OW1ySm1mQ1NTUWtST3kyZXdQYVR4STlZbVNBeHpiZGJ4WnpTN3BmWWRvcG8vUTd3LzkwcWwwWjJhVGZOZTYzU1BsV1loNFBidnJkcVo2aUkvNFdlbXcybVBCZjZBNXVKMWZCbFd0RUhLUk9wR0VwT0dFcGE1NW9OL2pFTnM1UXlzU01UZTRwKzZVakRHMjU2YjduTWV2cEg3V1M5Wi9XMzFzYzM2RzhjalVEUjJ4QnNNaCtJbHE2WmdENEE5ODR2OW9kenRkQ0Q5MkFFSXpxdDF1SUN3UU52YkoxczAwSm1ZUzJJT2xzckd0NTN6amhvMmF3eE1FL0RzWVJHMGpYVWcvVGNCaDZROHEyOU9RRWlTcFU1SUtkVmxubWJtSGNid2xFbFRxa0wydVN3d2UyTDNuOU4wT2xDNVhibjg4aGpNdWUyODd2Rmh3L2MzL2VwdzlFZkl4Q2kxa3RlOXBvQlpBZG9MRFJGdW5OajdXWE5rTHZhdFVKV0xWNkxpR3Q4bFJxZjhyTDNCbm1LNS9Fb2RwS3NOOVg4cXFUSUtGVWtDMXhoVmlZUDl4OVR4OHo3Z25tSWtzcDJyVnNWNkxrT2cxaUJFNVdUT1Z5aEhsM3hMKzFpVG5jWXJ2d0xyQXBjclVPLzljYXFyMWIwME9aTm9nOWpWRGs1MG80TDNBNi85dmV1c2h3TlorMWo0RzZPQll6WUZRMU52U2pOWVltNk81OGNZQWluV2crZkJKRm80N1NDcTJyT0hRVGphZTJTSTUwYXBNQkNuZGd6bm1mZGE3ZWdOMzdBUWRqL0RYaFQwakRrYnNkRlBYcm9Md2xCaGRYQlpDeGl1UHdSaDJqT1lJdUtlc3ZNR24xZ3pCUmdzL0VZUWxSVm5pRHhUdnowM3ZvMStzK0V5dCs5cWdUS25kME5Yd25MME1JRGVONUh4QlJVYkhaNExUdFZnTmg1bTIvZUtTZmJEbXhVQjRtUDcxM0dyTFlTL2tQVGVhTndUQ1IzbFpPQXhvSGp2YVRZZjBjSjVUVHpHTi8xZEVONTJjcFJtemkrMHpEME5ZZkFNZzdhYXM2ZnR3aXJKMytuYXJaTEJtSTBjdEJUamsxMDBmR052SmFKVGVtZmx4QVZsOUptdUpzZjNVL2h5UStXekY0UjFmczFDb0lkc1o1QnkwNGlyOUNXbEVsYlBuSERkRGJTTnZ5YXBTUnM5ZWVRMHFDMGM5QjIrazJTbmhEMDVzS2tiYTlsM1pLcWxuNWZYb3djWVFPL0JmVDZxUE4xbjREWkdvMHFabzFWM01GRXVZM0g4cXpJNmJwNTFnZ0JXSVJNYzdDbmRxb2tVVDgyUkxrL3YxOEVYakR2Rkp5N1h2NGVLS0I2MndvQUdYY0wzRzdhTnpIMTh1L3lGaVVKd1NUWGwrWXplbitQdDNXKzRHNWV0ZVd1NldrUXNaUGpXVDhVVFA5aDJkSGMvWVY4bldHRko2TWhvTytnKzJlREgrMmRzcWhCelY4UmZ1M1A3R3pEWnNia0tjNXBhaGFWWGVhTWRiYWJLS2dWZUNMNWxWWDVpWnJGRm4rZ1RQOVVsSm5lTi96eUJ5cHl0UE1MbmY5ajEreWl4ZXN0R2tvaVB0cUhWRm9TanRjNU5mZjRwR2JKQU5IUGo5akNlYTNkQ0FJMG10OHl2WXM3OFUzZEFteWphQmFldmhOb0tod0ZCRVovcklocjk2cktuVHUzYjZoeVJPR2ZqOHkzK3pQOXE0M25TSmhYR3RVRmoyOElvOVB2Rlk3SHIwVFo1SHRaUlpzY0paMEZ1RW1FQ2V0NGpiZENCUGhUd1ZMZjBFRUN3RGgvRlZ5TnNoNUxnclRZa0xINHBkT1NycHVEdmYzZTZqSkYxQjFSb3BUdlFoOHB3ci9qOElHa1lOQXUrYTlrbEw0cCtacmxZeEZjQURCWmZIOHFDVDVhNWZTOVJvZHdvUktwYlJXaDZrTGUwZWtGYytjakRmWUhRSEhJOEpaWGtvN053VmJ1M0RxN1Y3WXFLWnJ5Yk9BWjIwcUNpMFJlMVJBRkQ0UUU0VmJpSlhyNnRUVkRQY2UxdWwzbHErZHdsbEFnV0krVFZJTnNpOENtTzh1M2djTHNGOTZiYVJEVHpvVkgrM05MYXFCeUZrNk1LMFJRcHBFQUMwSmM2QjEvenEzamg4MmZrcU5Obm53NlFuSERVMUpYTGtzVmxwNUgyME8xN0RHUXlwWFRUaWQ2dWVEM01vQUJmaXJIMVlzNzA2VmFzUTNwNlNJemthbVcyU1hiN2J3MGIzTCs4YmJaV3EwUEJYZ1VyeWJ0c0VCMnlUZnZFK2lVclREK1hienN6L1lvODBtRDIrY2luMEJDSU8vWStERjU2QUlSSk5EUG5NSWNXQ3NvdTRkMWhYekVad3J2aVdzbXUvcjdkRVBWcWpwcnoxQVd1R2M1WGdqdmcxVnZLdVZ0cUtsMWlvdnZtcEREL25NajdCb2JHbTNXUmpHR1VORkF4UEJkM3BuY0hwbWdHaGVuWHQ5STg5aUxtZm5hTEhHdUJsT0lWK05RSHZQMXYzcDdGY3lNUkNnMW1Nb1NpbDRYQ3d0VU5zSmxoa0pTR202L0xZeFBCT3VaQkdOYTRDUXZDUUIwVmhGZVorK1NSQXBLUlRwMGxYT0dwU0NIeUsyNXB1RUxrUzhweURuWmlIeVlLL2x2MzR3MFhzeUgzc0xUVENsRTZLOUxOa3I1anoyRjRNRUJuRTVkZDBKMDhBUkxaU1l4VXZqRXpCUmFuaEFHQXMyckp1dndBWkdzRkNJaXNsU3U2eWp5Uks1WmNuVWxHakR1MG1nMHlTYVRwYTYwaWJBbDlkYmFVci9wbGNMUUFxYTJkUXlnWndaSXZ1bGp6MmptTnV2Wm9paXYxMXRDL09xY3RyWTkrT3FURDVPakNQbGxSUy8xNkZzQXRhTHp4ZXhnMXdheU91U1ptdFQ1VlVYM05Rb3hwTEdoem5CL1plYk1QbXd4eVltS0dLZVRnc1U3cnNWY3RaU2JDNHVTUWJVdXIreG5tT2ZvcFpDK1BpY3c3UFBUOE9xdk4yaGJ6dWUyU2VNZTJZclJNdXZlcHVtck4rMXVTcU1xdU5qb1VWWW1NUTE2cGR2bEdKS05XNHArSnUwYTVLNGtsbzJJVDFCL0VqQ0hIQUpkZUZQUUsrUUtIZHhORkt4ZVNzZ2o5bDJwOWg4YTlybXRFckRTOGs4bFlnQ0lPRVk1a3N5Tld0dTlxZHR0U1BFM1ArZ0I3cGt4VlpkclhWUWkxYlpLOHhMbmNsSUd6WXMwU1h1U1M4YnNWd1FzVGwrZk95QU1sdnhvaURxN1JpTXkvVmJBejRWSU9sclpqSTgvdjhhaGNIdGVVL0cxTDM2bDNoVEFJV1U4N0ZKdnd5bitWSDRJWkZRaGtYeDhiKzdleW52enpNNmZWWHRFVkVNVHBWdVloZlhIR3kyY2RxWXpRZm9Ca0ZwdjJ3a0JvaXl5SDBCbFJaNFkrNVJSakY1K1V5dk8xWGJLVFFwTVFRV095ckFTQmxZUEx6cHUzVHl6VForT2NCelN6SUllRGV3YWthRW1BVVVlRktvUk9HeTkxWE5uVkgvc1ROWWFBazZhcHlhdEdMeE9uSlNBQXBkcDk5V0RhNWhNV2JIMVMxaEY1RXVUcXBUSmR4dmY2c09BU0QyWnAwWlUxV0N1OE9XV3JxajZDOHBybUtlSjdtMHlzYzhtRCtsL01PRjRiUDVBYXFkV2pRL3d2VnZtczlySXBkalpkSTJQaThQTW9ERitmdUNkTnBZTXdCT3pwcHcrVXU3bE9nWXhoYnFZdWVDTHFvMHMwQ0pKZlEzTmRpWmxqRVBzNStJSnZ6WWxKaExCWHh0RTJpeFI1V2o2KzBuWWkyZnA1Njlzc1NJVGtkYnJlMjdLVXAxZjhWMkhRU1BhOFhvdkF6NWZJL3FpVHUwNXNRNWVGeHRUY3JHY2NFcFpMdWNRc2kxN1BlL3lXUE5pQktFZG05R25LMlRjbGRVWnBUM2VBZTkvSXUwNVJ6eHJab2NuV0J2a3NIQWNWTGZUalB4Y3c3TGp2YjNIaXJxNk90YURUTkhGaHZRdS9RWHBVNUhXcnM2eWhGdklPbTdCYjZ6dXdUNHpsNlZBNk0xcGxJTkNiU0hxT0lVTHNaKzNHWVFDbmdCWDYyLzFiS2xGVmJyY2ZHNlcvRlZ5cnMrOG1FbExQa2VsdnJTaGYvSHJSejVzbS80aU9SMi9wWm9ic0F2aGRHL0JtZnVPcUd2LzNHVVdSR3lOMURSb2VKbHR4NzFaWWplVnBycUhvcm02ZzJjeG5hT2lyZWkrZDVpLzRzaHhja1ZDc2RIbHF6OW5ScEgrck5jNFJ2RUIxSXZnbHE3MTRCMmZ0YmFzOGdFNjF6c2tGL0MwL3YzRFZyNWVFYXZudGhxdDZxUnIvRlE0M3FXOTRTMUttMzRUZ0hBSm1YZCthZmFISWdqbmRvNFA2S3h2SjhxWlVGeUJ1ZUM0MlNQalNScnlKVGZpS2NOZG80bXhYVS94WWxFSlBodXB5YUhmdDdFQXI2eXR6WEw2Q3Erd21qaXNlZVJnK3dWWW5UN1Y5Y0QrRld6ZmU5VkpHNk00djd5a01TeUZGanRVT3ZZYysxTEc4YUMzbkNyeUxrYnprUyt6a0JnVEoyUEtMaklIb1JrVkhtWVlBSzIxUTkyTkpORHZ5SXUzWGQybzM0bVpjKzgwRHNBdVBwOVkwNGI3TkFWSkg1OGt1TkJja1FZaVBKLzRCNE1YMm9RMlRGT3RHMnVYd2t2Vko3ai94dis1RnJMd0ZTZE4rU1Q0OGlodE9yTzgweHVBUDJpc2pJUkwyZUg5VFZoTGYyZnVIVHIrb3ZKV3BHOGphc0ltbWFQZXpnUzAxVUMzUGJQOXlPNnFqNXBKc2hwTFFUUjE3ckNmNEtrOVNmSTRUckYwcWVKN2hxaUJKaDhUTWRlOVUzQnc4bFhVU2JBOWN0SlhhbVR6bFpxL01aQWRta1pXRTd6MHVzNFNWenhXTHJPd0h4Yk5kbXBhYncxVTBQYThLVzRtV1N4MUJCd2pONE5rRXhvSGhlRzJxeGJ6R0FaU3J2QTlrM1dCTWNKZWxTemc4dUV6UE1ocGRhWTBRQnpoMGE0UG1JZncvYnpOTWhTWEdZNk1oSndkdmFOQWgydzdwL2hEenpoU0JudTd1aVJHWkF0dFZRWjNNbUZzVmN3NFQwMG1lTGNBbzl3NnN2Tzl6b01nNnQwSVVsY09oZGlwOVE5T0w3bEFlUXhZZml1cDVQSUI3YW0ycWc2KytYL2MvZElVUzMvYWxxSUpHZjJVUlE2dDdjayt5NjJ4eXRCQ0kycDRibmlGMkp5a3RnQ3h2WGtMTHRPaThwSnpzdldZZzNSSDJvM213S08xUWF3d29kSjZiL2ZiRW9ieTJpOXZzTlUyVFZmYlBDM1k0TS9EUzkySWx3M2VtUHdmUlpYQ2NGeXN5cEZtdU1mRVJKSmdNS3F5KzVLNjBrZWl5QmdPZkx1ZXAxOFM0bFNHY3VOZDk5VjQxTkFGeW43SXQzYzloUXhNTWxvOXBLdzN6MmZEVURTMU5xeWR3WU9aWGxJN1hIUTUrNDlwYTAyOTVGSUtDYi9rbDRJSERmMkpBWFFQMUxaWmtmdWdLTStYVmhNd2FwWVRjM2dtdzJ6OCt4RU11SytpcXdKZkdBUUxPYmZaQ0VTamI4Y3JpVTBmMUhHQlRneGVuL1g3aWFFcFRKNWVPUWF4NWo3Z2FKZUIrREdzTFNzNWhRalo4cWZKRXd0dE94d281aTdmVG1rbUxETEFiR1R4dkJlbWxUUENSR0Y4VzZybDJ4aE90YVhocmRWTGFrdHR5NVJ4UTc0SVpHd1dQSDBpTnRBQlNFNVF5R3JZZzZ4QjYyQ1JOeWtXTSt3RndPclo2UExaOHA4YkYydk5NRzV1TGZuT2p2ejhoTENvditOaUhVUFlGTkpzeWV3YmoxOHNpaUNnbC9uTmlHaXAxZUtqN1BtOW8xTGw3MEsxaU00Y28yS0JSWVdZOXpmSzcwYks4WGkzTlJlMEt0WXpaNlU4YUw5L2R3T2phY2c4M2VGdFFHZUJLYXc1d21UcjBUR0Y2Nzdma0c0L3hzMi9zRklrZy91QkUrbE15aWUyejdkZnpBdzF5Nyt6Vm0vQVpTRkNzTUh4dUVTbjdudFNXMzg0L093Z1FsdVVyVzlkVEJuWGMzN3oySnpTRk1FZzdVaW9uakx5TmVtRFhQRnI2RkdHOHd6SUx4NUlpVEozQ3dXUHM5cW1hYzNrblcxYkZSbzlyNlRwY2syeXp5QTZnQUpQc0dMMGpGc3dkS0U3bzlQdHBJTklhUW16MXlKLzB6b3NobFBYUUEzS2crWVNuVzlzQTdzNUdhQ0l4MDRjdGxKY2diU28rVDl6SUdqcWRQMXdOTFdvOVh1T2tMN1ZScjFBWStCWkx1L25UcEZ2MGtlZ2hkaVlYNUs1UHAwSy9NMlRIRGVoNjNBZXM4NWxYc3ZtdGJBUkxtMmYyWmVHNzlSamdPRHhacFVNOEJCVVVLTU1PR0ZRTnJtQUVIM2N2N0xQa25uS0ZLTGtMY04vYjd0OWRRUU1VMFBJTzFWdWVHYkY0WENMUGRsaFVNWEtQL0NhZFVBMElnMVlLWWtCWUlacitOSE1mUUpPWkl3K05FYjl1ZTUrTVdjbTF6dnNTODRMMTRKcFdSQVE3M1ZVSWIxcm90NVlHdmFPNm1acTBwMVVHWUVXZmk0Y3lLanY4SW54UHRiOVFYVUg2WFVjcDdUbmVEeWVJNmRDUnduUytReElCN25jS0xpT2VVNHc3ZmxTOGVpdGxEVTNmMkM2YXNWUS92MzgxUnZWR0xwTzNVV2lQYjJ5TithQ2RMQnV2SytSMXpCSGNxZEZXRnMyRjFTdjV5MDNWRWpNUlJzcUJUY29ldjVTaDZjVE9DMFVQRkRkTXZVKzRXNi9vZy9UQ1hmYjUwTFVFQjAxYkRVbUc1bGwzTERjZ2cvQXp0TTFpQTl2Qit3c2tYSWE5SVZiMkhQaGFGazZvK3BnQ05Kbm1Vc0tlTU5NcVB2VFVTa3ZYYzdNeDlNc2VUNitSc1ZWOGRiT1lSMzBUd0w3anRkMkEwNlk1MUlJWmx6KzVoaER2aGk5ZTBub1RkZjh1aHdxamVSazR3NlVqV29FdWIyVEdJbVkyNGJBNUFHbFU3bmZQUTBidStGRzQrM1A5T2V1dlUwSmxMOURSRXc4Qi9LYm54R3FDV0hFR3g0eC8xLzFSbkt3MjFsTjRySkFuRVFISGZXZ0IrWFpjb09jS1h6V3MrTUQ4cjJEQTBOUGFrTG91L1Y2OWlhaTVhV0hMZ2JHNXBtMkxUaWN1cjlNSFgyZVcvZUh4aFFKcXFZUWJOZG5UKzFjaGdhSVVGNlA0UFQyYWhzazJ4SXVmbmlCUXRVTExpOWJWaHA3YkpBVVBSL2tETWZzOFVwRkxJU2hFeVVQRGo1UnlYc25nV1VyOGpQRklGdDcrOHRVcDhYelhRTDUwYnl2OHgzSU1HWVdsZTlpTnkvMU8ydlJnTGRKTHNsWXpnNFp1RWNrbk5qOUdlY1NyTndEeml3LzA0Q0NobVVJWVdFbFc1V3dPbkYyanN0dHJrZ2pDVGs4ZDhJMlJqRDluTTl0ak0vTzZMWWZwcTJja2xxeTNPaW0vazIxOEwwS2FRbXJZS2ZweVVGQnRvSnhxNjBHcGx6ZWJhYjJzRkc2b0lQY2hrOUdoV1Z6MlMvMDhoZEMvcmVmaUpJS0plY0ltNS96VllvZDl1a2ErazZWRE1LMnFZdmlmNFA3RnJLWmVFYmZqc2VOS0VZTWRSQ2l5endpRG9uL0pSYiswUkZXMFZGV244VmVNQ1B1MStma2ZSbWcxbDJNUFRNT3BiRWZmNFZkRkYxMmpHOXBzL0IzVmlIQVhiS1pYbEhHUzBhWkVzRkphZFJjK2FHV0tQQmtmTFNvTUdWVHgxeHAvTk1SR0k0WkNSTU05cnBtdmNHSVpqS2E5aEF3RldwOGhCQjl2WjIyU1k5RFNTUGQwc1lCUWFPWUd5WWdWdWlEaVZUQlBBdlRKNnJOSm53cFYxSGMrWjVKQXN6S0s1eWRuK3BENjQ0L0daUUpxYndEMkF6REFxY2pXdU5XZHljUkVLSm13aXBBVGpiU09UWmdCelUyOHZXdHhxSm10VXFYT0FuVzhOQVVVQytGaVRYQUFNbVlselFJaGJ6RnpPMW53Y2hUNXM2QU50WE9kcE9nSi9RY2NZM0RrMVNuTFNYVUN6dUJpVE5FZEpMMkVmVUpYVlBIcjF2TlRtOW1KdEo0R0NkZGQzeHFkQ1p0a1pMbFdnVTBoY0NwdUVtbjAyM0hEVjdYZmRGYTdpTXI5S283dFgzWU1RVkM3RDMzNjF6SmcrR2p4OHBXdk0vc3BCaUgySk04ejY5aE5XTmFlVVYrdmFNancyRWFseVFUSW5jMWpUcXNwN29QZ2FwdGNTa3FqNjZNdDg4SS9EY0xwcyt3MkpaZmw1RTI2bWY5a2pGd0FWRmtML1pOV0Z6NjdkSjZ2bFdhTHRRQ1pjRG15ZEEvOCtFVmNmL1duOWFPVG84NG8xZjlmV0JINGg5c0xBSVZHVSt1VUZRaHJMeXpBeEFGUHE0dWQyUDdjZE91cFF5TDN5K0hIMFVrbkZrUENZVmJUY0s3ZXV5cFFaSVNoNDRSemhVc3UyTlBmNXZQV0tSdWZwbG5pM2VVdTZKK05NWGRmdjNpWTdQVWZ6Y2Rrek0rVEJKeE4xK0lRSGxGWkdqSXhzUEdBckJ3Y1A1NnN4Zk5WZHZzcWV5QSs0MTJpZjBGbHdWbnQrNzRndmtWeFVMcWVnME5tbWUxNndVU2dLRUcrSGx1SEdLYnlBQmt6NXZudWJ3N2hVMmpMSkhmWHo0bzFpa1J3NzRGZlFVRlpOajY2NkNQcnhiTitkSXFTRXpCdWk0Q0FYbVA0VVJBVGoxa29QbzlvRi96SkxlcHlyN1FMK2VISTEyT2VkS1MyWnFHcitDajJCdWlrRlBwRDR1L21GWG41V0svSUN2ZDlEc3htZWFyWVU3L3pXRDNkbHdFTVRMZ1dqWEluSGIvU3F1Y0JHNHg4bEN4MUFoQTFpaWRKbWhXeGMwcktlVWdMb2s4MG1qYWs4L3RkbWc5K2ZiMjFVNmNLZm93T0xaUkdjQndLUGwvS0FxUENqdFRqZWw0dTh1djlxeS9leUZKSUVGZGU2VFlMWWZ4NVNRSndKNFVjOU4xTDJ4b0tyMGRPWFlsTTR3bDdtQ3lGWk5aNzFkcGZBQkY2TXBXaWwzeUZmQU9tbkJoNkU1ekRzUGl6RDZLNzBOWUN6L1VpcEpNUlVHek1ZOFVxQzRFUm9sTlZrWUhsS1g0ZEJsTGVJQ0c5N085eUQ4TER2QkZRSUdaNUhYTnlxR0xackR5T2ExVFY1YVJTWGliWUZUdHBoeTFIS0ttUWxBT3RTVmpacWhRSDBOdm5maU1MazM5QW53eGJMTzF5ejUzY09QWklrZHB6SkhhQjMyNXRZZkVoYUZLSmExMXpRS3hpMEREZzVybU92QVh6M0R6b2I4b1ZsMFFqSGlHK1lJSnprdWllQVQ0OGI2Z0VqRlpYazA3d0MwTFNOMG8waHNuclNMQ25XMXd4eVVycnJTSGtRQklmSDlxQjlDeEdrUHdqVVUxUVBMYVRkRFp5SUo2eUEyWDhVTzVNUzVLT2FYV0JlY20xVnZ4aGRYa1cvL3p5Sm9pZWkyT1VSbUdzSmQ0NzdBTkNuQWFyT21COWdQS25PWTRPRzYzUGp2NGw1RUkrUGFIbXdFTGNEWXc5RjZ5dHYyaTMrakY2YXJFbHpPTk1ES1U0SnpiaEdDUUdEa0poNXFNcXBjWGFTR3Rvem9FOUZYOXZxWitsUnBqeXhyOVU4cUJUdmZkMlltOGJTd2MzczMycnVxNzBrYS9vNi9sME0yejRkWGttNmQzMHVJTVNXc0o5MkNoTG1kUnVsQVM2VHJscjZHNm03Z1ZyUjVpZ0I3bE42ZmxZbW5HZGEvRDI2MTNYczMzNjFld084ci9DSzB2UjE1VE51ejdqUzY3aW1CMWVnRm9SdEExdi9IQUEvZHpUWks5WDgrY0JQeVpZSjRzMTFlZ2o2SzlUamdTcEZoVlFHUTBFZDMrblRJNW9NWm5ON1p2bGFwTUowYndUNG1yb01lRk1kQ2tJczRBYVlVcm9BMHhScmNNVHV3a0xuYlpWOXFuamVnM2U1V2gxS0tSRTFrajdUUXFNUnlWdWR0WTJyU1E5eFBiU25QeDZUQVNuS1BJa05kN2t1OUFmZFVPZFExRDI0Y0RycVlCNEZnT1EwZmZpRVc1cEVXbDdsQU44MVY2eloxS3JzWG5HL3ZPM3B0QmtpeXkrSFhjNXluRUpkRHRVNkYvSTRWSFpQbjhEbXhKNjdYYndwU0RhWEUrOXI4aTNaVlJHK2N1bU5jNmg0VEQzb1BMTWd5TzFvZnhtUCswN2g3d05ENE5CRC92MllXSzRLUkkreHBNdDByR0NkS1hoS3owRWtCajNkOUg5b1gvMTdZMDNvZDV4bzBaR2JOSTI4WFB4OGRUUlcxbHM4bmZLd21jbUw1aFcxbWgydXpEWnJkVU9HUUhyWVZ6TEYrWTZKYjNad0RPRjVQbUlLM3BlNEtscmcrMDhNeFpFVlptazVVczkvb3FWNFA1NzNWNlkxZEdsbzlmWVNnMEdsTU1pc01oZzNlVzZVdS9semZscUUzSmRzaHEyazRrUzdoWU5ZaEMxZUlEUVB1Uk9XSEk0eDZ6NHRNUVJwYnFUTEhmdTZyeWg3TnBESFFjYVM4RitlU3lmKzFwQjBQTS8wU0ZLRGZSQ25uWE95c2tCQXZGWVcyeWxyV2ljQkFERENqTDlkemZDcHYzeStBWngzTVpnYzM0THNPNS9pOTVRVzQ3VkVOK1ZjSk5menZld25WdU1XNnF5MDRZNUxwMFZIR093aE5JQmViZkZFM2FOU1g0L2pKTUVBNDB3REJVWU9mbWRrTmpJdTRoelVnYjZzMkM1a014OUdUa25meHVGcTZwRDNaR0pOeGZ2VlVuL1JFQy9ablpzdEZLOVJaWjlxZE9rbDBRWUg2ZDYyMlR6S3JJeUllZlpTOC90SlV4a1pyTzdtc3RNbXdwMUpDSjRERFBGeStnRmVGUGhEcG9hSjlZc3M0TEd4bFd0Y04yYWVYemJ4VURNZ240TzRYVjk3QmFUZFpkYUgyN2xjZHZ1Z3dnNnRIaEZWbUJnUVFPajZQLzl5eWJPcjdiTjI1Njd2dEVVbHNKeXVvZEV3YXJyY3Y5YXU4UTYvdUZxa3gwK1czWlk2NVhTZlh3blBnQk5wOG56N3FzYXdNYW1sQXNVQ2NwdDF4TzdFbTUwekhiaHV6c2lRYkVOdmcwSEpaNzF4Q2dFcnZLQjZtNmtRczZ0RFJQZ1c4dk9SdTlMbTdsY0VKQUlEbXJrZzdjMWNHengwUkZMYjVVczVnNmJscEkxbWdzdWEwY0k1RG10Nlh1Q2M0L0hlOXZYU1lZb2doZ3hqckRZYWNYN3N4enVySlFZeldSd1ZQV2JZYTBraTRsQTNkSHFwZ2tXYTFjVU5NN0lKL3N5VGUzMG1Ickt3NndRci9TMVMvd0dpZ3dyN0o1U21INEZNekpJT0w0SUl2VWdhWXprOXlKd0l5amgvMDlkQVovYzFHZFN0b0RTMXFPRlZ6YzJ6b1FqYXp2UE5CMmx4cE8vb2x0M2lUaElaViswTnBIYlIvQ1NGL2VxT1lvWXN0cDY2YjBOcnRHcEYyQUs4MHAzZCsvbi9WNmZpeENXZjhDSFo2UjVQTlhzakgyQjcwSmpXODFsK2RFd25hMWJrN0lLRE5IV0VKd2lmaHp5V3RIZHRRTG1ZMm15ZGgwY3kvTm1RVlpodFJrNkFzWU1kUGdMMnRLeStzNHkrOHp5Qk5KTFFsQmhvcGE4Nk9pUDlrcFdZZmNiTHRKTURYdFcvamtEQ2JYVGJoa1l6Ty94WmlxQU15TEMvaytIY252MjI1SVYzcEIwTmZoeVp1QmVNZUtVb1pwQ3VRcFZnL3JPREowL3FJU1NrTGJwU0p1aVowSFVId3JRWEJPWUx3RnFNOHdUaWVGQUxLNmN1OG5XcnVBZ3hmSWlQdkdBUHF1TnQ2d29JQWdCNHpET1ovTjljWERSeHRHTnpKckx5bStqUmFsUjZPVnUyMTRZOE9wRTdQZzh4L1JVcm5uQ282aGdyM0hOa1p1SHMrcVduMFVZWXc5K3FhVE0xdXMyK3lFTGdYd29ReFdlMDlGV240ZG1UNTJ2eDgxU0lCN3BGbHNaQ2xkNkVHWXlUSytaQzhaOHAzVDVnVmZEQUY2NFhUNjI2MTNGUTVicVIyOGlkZEFMa29TaHd4Y2ZadFkvZzB0b3V2b2x5cEtEQnlqRmREMFFUNG95YzUrdjBzalJPQ3NSbnB0T0NWNk96SzU3bWdqY2VPVFFjV29hSzgyakMrempmVzhZd1puK3dvRU5UVDBDRTlGSDVlTjB6VEk2U2w4TERqeHE0aHlTdDY0SXNyclBHRU5HNlpRcFF2RW1TMkN4M0Q4NGdWYldJSTVpWjZGZE9jOE1xbXI3UnZkbnBGYm11UFFRbTJuRDlhZlN0aS9HQTBIb1ZVVjRudGh5WXgzKzd0OHpNdFp2K0hXSWZtNmlrVlJmOWFObGIzajErS2VCUWRoSEFMLzF4eUIrRHBHRTlkVXFUSmZpVXp1b1Vjd3NMZHFqY1A5ZDVrbVl0UHFveTJ6MlBKNnVsZ29yMXMvVWloVUhGM1ZrVkNCa3MyNGRZRDlXbzRDbXhiVVkyTzB6WDZMODI5TmNRclc1L1hidXhVd0R4dGlxdDROamQ3dEtrbGhmV25NSXdMWlN1bXMyNGlCa2R4NU5yMnh5NjlWQVhmbld5N0NJbzVuN1NNdlNMN0xjdkk4Q09XTFJGY1dYMjIvOFdwSDJ3R0hTT1dKMUUwbUk3NXgrY1dJVlppdUZqYVd2V1BNdW1uZ0wxd0NpN29yUngzWTdaSVZVZHR0UDNzTVFWZzZDVCtUMGtHcFIwZFF6UzY1bFgrbVpCUWlPL2JIckdHL0hBTHJHVlhZeDNoQWpwZkwzV21BUWcxdU52TTJGRVFoOTkwRHBmZE4vc2VzRDhQbVExTXU1Um45RUdyNFJkMlk3SWJXVk12NWxsQW1Sb21KYklOVXo1Sk84TC9ZUG5aSGdiVndGWWRxZ1VwOUNZQXRrakxRV3ZOckFOSmxHd2ZOKyt5aVExeGd3bzYrQ2pYMVpOSkkrc1NtazJGTzdiNjlhbFNkdS9ER0J1M1loSVorSnJUbFpHU2RwYXp3YSsrajdQRXF3NzFsRU03Zkw1ckZGejl5T2l0NEp2bFNnNHlqSWRjY01MNWJWL2pWSDQrTVZBN1lOdFNNUWRHT1dNZVdFOTJPRGRyRnJSMk84RGhlZzMrVXBwNVJTYmNPNWJTeFVpcDNCUllmY0ltM0FyUDl6eThEdThxek43QzVJREd4TlZyR0xnU3I2SXVsWkpiSyszeGtVcFpyM3M2eXFnUGtQQTY5ckgxZzgyM2NFd3U1Q091MnJ6eldseGtrS0RYVVFyZDVyODgyOXIzOStGSnBOSWpGT2s3dGM0NFl1dVZXWTFmWUFIQnFzQllabzhlMFF2c1lFS29PNHRhNmNPT201MVM5U2lTV1JaWXpFWExyUzNQSURFZEw1VENCNXF5c1lNSXZqSzF3eTlIWFYxUXBNclY0SW8zWklSQWNRcktoakE3NldjQjRQSEFaRDhjTlZGWHBWUVpIRWRVN0NEN0ltQXFZYWIvT0VRcVdUYkVna3hjMzYxdTlhVGVTaVlEQlBOc3RiUU91UEJkWVhRbnRxWnlhN1NNcDM2MTA1blZvK01tdzh6RytycWRUMXBFdWE1dFBPc2ZaSjFaYUtHdFNQRUF1eDJWMlNwWjRKdU94WEszbWtiSWVjSE1kUlhuazFaYzNDQ2FsUk5vR1RjelBpbHNmOUNsRDBRbHJGVlJpZHltbkRLVjlGQjBqVXdnZGlCNEcyY24ra0ErVm9NV01nL3pSSENmR1lrYVlMQys5OVRsSnJGdEJiY1kxKytwZWd2VHk4bWNCRXNONC9xVm1jSkNFc3ZWMjNSc3ZaR21iZUNDM1I1TTdvS20yaFg5TTM1Ynk0Vld5Qy9ER2hGSXJQMllYVk9VaE54STk4WmFVVXA4ZEdMbDJYM2JlYnZqL0hMLzB1WHFhYmVGMnRsYm5DSWllUFVaQlhsekluZnlCakhQMUE2OW5WTVNDSE9GeXBEUjdjeXlOcmdZWndVUXJ6MEs0eCtqRmQ3WE5wclBWbDRMaXVJUVU0Uk15d09TMnNISWpZazZBUGRFRE9acjZBVi9MVVdoTTF2ajFKSjF0QitScFNEVGpGMHEyY3FmMkQ0dEEyaGZ4ejRobEtrRFZaeG5jSHFLSml0MXVHM3RYbGEweUtMMXpzTENHS0FQMW92aGdKYW5weTFUMUQyQkZ0ZHpiWWlYenlaT2pEQUxrS2ExTzZtcVJJVWRLSkJZY0lvUDhpWGxOUm53Ni9QMGpYVmNicVhXbWZKRkJsU3hmOXRFS29MQzJhOU55WFdYSWpOU0t0elBGTXNHMXlXMlRLK0owWVo3anVsZDIxSk9PbHFEVktaMjR5M3Y1aWlaS0IzOWJIMlluVVlmdktXZVZzcDZSRElobW1hTkdFdER3SHJtbWo0bjM2dzNUR0hzVmJpRmJFb2JQSktWRm5USTFUWUFMUm94RGkvWVA3dFhXbkNuKzV1TUVoZE9sUXdLNG5pS2JvU2RUSWxyL3NHaytFempyMHlmU3hkbEZrMHhxY0xWb0s1ZU84emZ4dngxeEtlcjd0M2xYeUdqcU5aUVB3Z25KNTkrbDJPSDFnRjgzS0VqTUp4all3Yjlsa2h6RkdrNGUrSHNPWU83UkdwZzhJcTFGYnVBT05xWEZMUEx1SVVnL2hlRzNHVHIyZk02MEVGbGNoR0ROclBqaTRKNWhXRlFzTUFCSDNCVHZYWkFIRlF5NjRxODVoaE81dzQvM2dkZlhDSEh3WnFqMSs5OWx1RUFoU0hDOXVDVUxmUW1aSGcrMDA5aEhRalkwZ0NuRlJnazJWRzdaRDI4Y2VLelI5a0NxaFpURURaaHlOcVdUcHZMWDVmSzRuTlIwQ2NhaE16cDhhWkNIamhQUnFYYU10dnJ0RmNKdjd6S1pOTjlFS1gzcjVERktvNHZxenAxUnBXOWE1TXlrdGtia01HY2ZtdWZJSEJkbDdTZFVUSFk1R25EMi90cWFqRGVXNlk5SHV5YmE3N0xUbkdpdXNnUnc0RUxTTzhhVTdzTy9kSVZjSTdmUmhGcHplcmptcEZhcnRHck9xWi9kTEp4a3hJRFpKbmhpblM0Z3NkMzdsbVpuNDlmR1pGdGQzelA2T1Z6TUE5MnFLeFlSLzRYbUlpMDdwL3hTeWtMRnFpdEtxdGV4YmN3SFpGTVhCUlRZblVIY0JFam50YkxCMngydkRoMXRyVWtuR2xnV0J4cXIrbWtmUVNoVGZDcU5ESWdobldXRlpTTnM4OHZ5WmhzYW9mcTJlalQ0VWVKL0xxL2dIeDdxZjVKYTVwRkU5SmZTYUlPSXA2ZGFhVExFUUF5TE5FVXd3Z0FHUVdlN0JVRS9wd1RkMXo2RWkrazR3b3pFb3pYZDFMRVFnTFFXSDFzNjk3WG1hRUhrM3dTUkxKTzI2TzM5YXBvbGI4M2dYNDZ6NWROZTlMRFBod2lTQXpRRFdBVEZXMGRhZUJCS3pRT3J3T09pWHgvV0h2N1A1NUlmSmtYbGkxUU52Z3E4dTBKRkg3RDA4M3B2TzdvSm52Y3FXdm1ucGQ2cHp5NnRINGF6WlRZQWtxanJmb0RMWmdxb3I2UjNWVzh2OG5MRzlQVFpvRGxCMUFWZW1KMitFV2RFWksyaVdxcjVuMDZJOVdtUFdFZFJKUG9PWEJaOWF6RHl1bXpVaURmOVVCL0VlSlJvekVnQzV6RktvMzBpQ0RmU0NpQmdLME5oNXlVZlI5VHFZdzNnRHh6TWJpNFRsdGZadHdMeUJTNmJVbi93RTJwams2Q2h4OU9PMTJqWlFFeFhRNi9NMnh5UWxHcWwvS0pBeHJhS0YzQWdlRWMycmsrS3B1NHBYV3dFOHBXTFFNZUhxSW8zRVlaWW5xdmpUS2ZhejhzT1R6c3VQQ1B1ZTdHTEo1ZXJxRnlpeUtXMktqem0xUnNTVDBIWHF4akRQZStyUDhyYzQrZWdObHpRVUtqTENNUWVVWXk0ZzJwTzZKaHllUWt2M2J3Y3crd1duQmVYVGZXaG9seDd4TEtxVGg0TDdFbXdTcmFENXZpOVVPeDY1TUdMditaYU1tL1lMTkI3SUlMVXZrNlVESDZhVDNZVXlWZDNnQ3YwbjlDVFgxd1MyNCtZbTZqRlduNlo5RXRtQWN0aERlLzNsYUI0K2tkU3Y5SFdvdlRBUGhVSXVYcFdOeGlJMWZoMHVreXo5b3lkbGU0bzFlN1NXSWl4RkJvdE9jUVY3NEtCTG9qbDE1Y2RxR1hSRGZWQ205VVFWSndia0g5ZXZGdW83bzVHOFJmdmZoWUJaR0VVNzdxaUtQMVpOUXlnSktPQlNrZVBLSjh4bGx5eHNOMVJ1Wkc0WHF5NUx2MXV4dFFqRjJqZWwrTTJiVmF2VWVDMU5xQzhTTHdLN1NvSCtwRTEwMHVVQmxUd3NOUERmWlJvUkV4UTRjRTRnTld1TTdvYllxUGlHRVZQenpOL0xXekdhODczeWdUTzEyb2hiUGRZMHU2cUJaNnZIQWNVbHIzWUV3aVlFNHl4WmlZTFZieFNpSjRDMGdTbXBreG5nanYzYUxaRjIvR0pqclo0dml2SzJrZmxpWkdmaFk2TDdqY1lhZnlIQzh3SC9rNmp0TXBkb0w2SU14TlA1Z0xncUhRdTFQVm9vcE5QVjRDQ3VYdTlTNTVtMXVxbXpUS2VDUkZhTUtaZ1VYQUUwWURmZTdwd2VIamJhM2ZUbENLTU13ek5jNjEwMnI0S2pMU3JPUlBOUmVLcy9TNDEvSGpjV0NlTldoYlVERHVSU1pNRFdZeFdaR2RYTU1TT0ZOaGZMTHlmbyt5YnB2bC85ZXpKazhBdDhBMXRJTkFZTHFwRSs0Z09jQjRPSWVHZVM3Qis5a204YlJMVzJHTUFRazlSaTdVOGc3UGxkWDIzdjVSOW02WE55eXl0ZTdCTjhNcy9BRGZ1am5nR3Mreko5RWxlUXRESHY1dnYrSlVSZUpIZU4ydHBzSnJyVW5DVFVZTGIyR0YvWTlQcDNwK2FVWm1ZV0NNOEhwZFRiT2pVcTVsNGdIdFUxSVh0YkxZaCt2Vk5oYldzdzFjUDVjNUh1M0g3eUxMbC90Uzl4TFZxd1dKdkE5VERxUWZTSnJSU3VzVDFvMCsrbmRVRDFrRHo3blhYaFNPN1pCWURsY3lKOGJJZ2RxQWM3UGQrZWNlUkN6eWFsSkJvOWM1SVZrNXhEd09zeEJKTmtLdkJidTNtdUE3ZU1zTDVpQXNJY2Y2UTFXWHVLMS9KWWdaU2tKMTllc3dveERyYXA1dTliV09Td0dRb0dzeThhRUhwL0t1SnBUSHIrZVJPa2JoQ0hEQ2piS25EY1BGVWdmZEtxc2dEdVQxejFucWFSZTRuTWEwVXhteFFZSFNiUHBNNVJxdmtuQ2FEaW92RS9NdFo2ZGlqS09uYWwra3J2WEhXZVVoQnZMMGxPWHZNMVE3L3U5NXA3RjFCZFBGMUtGVk83OExjbGloQXdtWTRBaW8zN0o0b3BhaWNSYWJwek94NXdmSTROL0RnaW95OUNKTjhzVEphUE1nOGJjM0NaaE8xNDR0RW5YaEZRTlpjL1QydFhMdUY1ZmQ5WXM3dG8rYmxYSm0vTEhManpnTUY5blY4ZVM1WEs0aUlDVGtMWTFXcGpETmVUems1aWlFekFtaGlRc2VOditoTEgxRGhiUG9BY05BQktkV2dFemlCektCam9rWVpxM2Jaa21Edm1yelVtajZ1aVZqVmp6V1NSZmZmMFlQWWtVL1FKWVVJM3dHUFc3VlBBdnBzNzh3UmY3QmF6Vk9pcjVpMnFVcWFhQ0luQlkyVW9kWkpVWFVWcmRBSXhTbk9IZ0xETmxVZzAzNFBoVmlXeFp1MThvZ0ZOREx4d3N3cDlQWitWYWlOVXErLzNvRGVRRS9VaGJSL2NVc3dhb0dmTWVzb2NkcmtqVzYvbmZLTFlCUlNiVjJ4Mmw3dGUrWkszR2dNSGQwRHY5eTE1bzlDQkZuRXJzYmpTNkdRWlJmeFY2Z0ttVnRlTnZ2bmN6Y3Vac2JNbmZLYiswUEhEb1ZkdmZwcUdnN3V3MHRVK0NlYlRqdmNJNWdhOC9aUWVFbG93STVLUHRGTTkxZ1c4MWxHZEVwTmlrRi9FR0VndjBSbUZwNXhNYzFqK1B1MDY2eXZLeTI1N1hDcXp5eW54RUJyRzVpekJxNHl3K041MklZM2tRcmpFSmx0RHFHWlEwQXdzRzJFK1hpNk9IMWp4RXViTUs3cHBGQ2FEL0hGamxmbk01TjIrUGl5Mk1zTGJtU3F4blRScWJjMFdWNDh4US8xMUNXcG4weHBhVTM5bXkxK0txS0lMbHFhNDVGT1lqeGNsRVloalZucGJCb2hhaTFlMmkrUUhnUkJOUzRYQnEwbU0yajFDRlN6cjFRc2RxcFNTdmxXYzgrbXhwcWtaWGRlZ2JsS2o2UHRjdlh4UEFPalFndENML2RpUjdRRmJ2YVY1TUVVZXV2VThIYXNHSStDcDBNV0FCVEZiT3Y4L3ZOaDRZckNFZ0pyRzlna1JGQ096TG10Tm9GWStTcXZPNVpEN1N5ZGJnSmNzclBkSjM5eFNsYWpDeE9nbEs3dkExMGwzL2EwbDZNSXJlc0FQZFRWZEV4SEtTZmI5RWkzSGJ3VkZPT1NsdXNmSklSc3FHd3pkM0RBWEk4a3RyaThiVVFMUDBvWnRVMCtaTFlZS3g1WG0yak9IbFJ2aGZ2TXJiNUxoSUhPSWxNZHdzbUErVnV6VUc3Q3NWY3E5UXpFNEN6Tk40QzJLTktmNXZKWCthYXpsVGFzWHVpMDNyMW1tYXFHRWhYOTJSYkErRHlVaG9MbzRXK2UxUEg3VzI3Zk5OWE9tcGxoT29KZFNRSld3RXM0c3lGTHFBNy83L1RKdHhOK0NlTWZtMHVhM3ZBNnpmYzVNY2szVVNXaGxTakhsTjNyY2t1cEdHZzB0Y1h1dndxZE9yQm45UmFGQUR5TWg1Vkp4TVJEWGxkMk9VNXJ1dHBrVzlmRzhDYTYrc1lOL001cVFIcDhBclNrMWdLc1NnVnJQQi91cXA0UWRxVWxHWmxYaE5uOHI0MTdPdy9rWUw4azJrNkVJVm9sc3YvMnoxSnV3L2ZadHJDMW1Xa05haWVBWEV4cC9qRS9HYjhjWjdNTVhZTWRtYTE4dFc2dmRWYy9qWUhBTmlMblFiNFRpTU1QYTJiSmd5dHlZNUtVb2FvdFlUM0oyLzMzbXg0SDl2RUo1dm1RSW05anZYait0WndtOU5leVZIc21mU2N4Uk03SHdZQkxtTTFucEhtTTNBa3A5UEFnNGJDTDhTVDYxVHl1QVllQVJMS1R6R2pkYzFjZWFqUWE3bGNENTJLUFhCbHMrd25pT1l3Y0ZENGx4SkF4dUFLRjFvR09pN25YZFVUb2hDa2pVd0VZMFZzdldzRWRza01vdEpzUHNIUzRabUdtb3VQaXdxMmxrcHZKcU5iaGhha2hEM0dXMTV3Y2hOZEhsblhYNHkzRzBZYW1MRStENnQ1bzN5UERXQUNvS3JCdmYvVmg1bnJMbENNMXJRSDdYUjB4bm95SjVWaDVweWJLeUNKR09aaHRPRTZKZTcvbjd6bElUaElUcXlnSnk4em1TZHRwSXB1Rm9ZREdaaTdwQUhnSnhReWl6SHRKVWROMSt2a2FYbW1XaUthcHhiMzVDQ2pKL1ExeHJ2Y2Nzem56MGpLa2pUSTVsWWNYVktTQWpEOXRZWml2ZU15c3llKzdXSTAvUmdZZmtaR3pITm5IdkgrRlg5TUtRR0JBdFNrYmQ1Ymw1dUpYUS9oeGRiYjJnNWJNOEF2emgrc3A1Z1ZqYjZkcXU5cDRENmhBckNrU0hVak0yRS9qV0ppMzlkeTl1dU9YbnZrc0FubVJhZlU5cFh4ODd5SERvVFN4eDBqS0U5d0t6RDdxejFkYnR5MlhINEhub1BDNjV6cFUyMXFtanZrVXlIZjRvcW15ZFM0eGs4R1JLT3JqN0dSVExLUCtydG5uZWV5Q1N5SFBxaTlnUkxXb0RXNWhhNEJyOGNUaDYxTFlBaU1Hak1IOFpRRnZPRm5hZjY1WUNaL0JsRXcwQzhIb2M3UXBkNHhCdEZNTjdNTVhYNVZiY3VndEJYOVdRbXIvYmQ3eTd5alRNaTg4YThETENCWExkWEVjdW9DTFNabTdqRElmbGZNaU5FdGpCQnFzTVlhQjcweGxtZmF6eFNFVWwxV3BxcEJvWGN6MHlYL1RTUEFybXBLc3ZKZkNzVjdjRFBtY2ZmcklDN2NVczVKVkw2YmsvR0R1OW9mNFFBU0pqYkdyYlppcFA3MUxaWXRjZUU4RWJCRXB1ckVsbWViYi9BL1ZmZk93cTFxb3ZhTHkrUWtjcTBBZ1lWS1B2QmhlOERsY21BZUgzVXljc2pIeHFicmEwbmJPYm4wL0FBeXBleHlHdWg2YThHRXJ6aHNCY0VhL2Y2L3F6TUlCUXRYZ25MbTZWZGFrYUZQMlEwQmpVRDBxVGxzbS9jc2k2RWswKzFublZtRXlzcWdpbkVxR0pQYmQ4MDZLOHJ4SmVObkd0MXIyUS94Mi9hcUdPcGlNcUxLVU9SQnlqQVVaQWdibEJTNjhsd2lEODZWNjhCd3gyalRKODlwUUF2am9aQ2hhTXk5NmRlbTI1Slg1VVhpUzZPVHVEeWc5QU1mZ3dWR0JTeDk1VEYvMzFPMWZpVFVsU2o0M1FGQXhzeWZEOWEwWlNNRWFrSGtjUnU3SW83ZHIrZzBCK0hlcXd2N3hBQWhRRkhnWlpVQUZMTCtmSkM5N1k0emhkZVdMTkdJZnMxUFhaYisrNERQRFJzdStFb0NxbTlCcFRKeHM2TWpPN1JyZFJORTRtbndQN2pHUThZbDRNRFZ5N05oUTVJWUozVUllNTN5SmlGeFQyc2VVYVl0dXNiM1o1RHBCSlpwV3FseUdEN3hQOUZtbUZGdVJ2TGNGZXR2QlF2RGViSUEvYXo3L2RXb0VHZHY1RlJtYzcxdmJTMjc5WTByNjVpWHAreEM2cVFJVFRONzVTeG9UajU1N0lFNCtGdjRBd1RVUDJabTR3UkRhekt0RXhFcXNVaUx3MlZDeDExamUxR1FRVFRaNjYyd2p6RjV1akJKZm0vcFpaV0VGUktpcVAwQXA0cVpHdmFEY204Z2NHcmUwQW5hd0tEd1lBNGM0VHFZK1FLeFlqbkE4alJCekpJOS9vRXZsalJyZjFWcFRleHZVODV3WVEvVHp3K2VuZmR5eGQ1Yi9qK3lxVitFbnZZVll3RWlBeDViMlFKcHdob1dyWVV5d0tkRkFneHZrWFJGVFZkYm1QQm5GRDhjazdvNHBZaUtQa1d6VklmSGxpUmFXcEN2bVhrb3VaY2JKNTdYVXRWMFR3eWsxSDc3eWRNeVYxR1p6M2JmdGlKaEN1VnFtYTdacCtKYUZKS3A5VlJUaWtJbkVYZURoYm1rRXN0cGFuY3V6M25iUWtxUWhHZk0zWENJcGluVnFmWWNnUDlacE91YVRqbEdUV1EvMDJTazRnMERHcXlhbUxBVm0xdTZRdWFudUV3MWFvaDR4a1I3c0hpQkFMZEZsZ1VhZ3NwUUJZQk9jTnc5WlpwTEt6S2VPMEpaTGhzNUdyMmRvdHNJdTFiODBMeVZRa251czh2ekwyMCtIWXBSaXJLOFFETDNrMUpuYWpyVUw1QzJvNzFhT3dEMHpBZWpiL2I4SDNvdEtVRXBzTzk0YkxjR2xXL3BVeFpxWVZWSE5WbHV6WXFMeTlvSkU2WEg4bWphZEswYldURnFMZjNUS005R1hHUnEyZk5jazQxZTlHWEdMQWdIZGNDOUZQVlgrbVEzaG44RW1nakdyR1NZalNndjRkLytZdVVIcWxoRDZ1bjhiRmhvNTdwSGhTQndPWC9Tck5rM3JyTmJKZ1dDL2pxeDRrVHh3SmRqaldjSzRyZkI4bGk0MkgzYUtmQ0FFQ084ZktSZ2luYjhKMHlrVlg5bE5TakpGTlF4dU5FMCtaSVdlZUFlWGZldXowQ3d5MGxHVWxBVzFQTXdYd2lMdHZIZ1BhRzkvdWUxZURtK05jNzQ5SUlidHlORkNJTVJJdGxRdzlvamtTQlc1cVlGbjN1bVVBSVlwRlhvNDNYd0pLTVpibVBQVDNLR3JpbXRCam9FREp6T1EzcHlsemoxWS9iNS85MTFqNkFzMFEzYzBxbjd2UEhvbEovRlo3Sjc0UjlmcFZxaGMzQ2tHb2lxSGFVRXBXSjRMSkdKVDhSQ09GMHV6ZU5lQm1UYjkrTjQ2YUV6cndpMFE3MXJDWGVmUmNrSTRlM1ljZncwKzd0Tnh0Q1Qva1hUSWZmbG12OU0xVEVpL0wyQ1lqbDVYczNmVXhNQi9nTm9ja1ArMzQ5akMrUnpSby9wSUNDWit1ZFhrTEJNTDNUbVY2bW5OM0tsUGRZQlR2ZzdsMk40QWRUalROaklTTHNJNmtRbXFteFJ6YVVSRUxrZGR1RVJYZlNqQTJNYmlWL3ptYWdaMW55anFtdjdnYW83MEtHdldsTG1QNjhIVm5EVFhOQXFndUlobSt1UTczVUZNdjVGeEloT2w2Q1dzcW5COUoyeDVCRmEzbVIvSEVWbzNrTUJIU1EzK1JHbEZoR052eTQrc0hFK0JacStPbVpya01rOFdHSUQ2bStQUjhyNXo2d2ZPcjBwQllsN0lOS2Y3dUF6bmYxTm8xcGZOaXdwZkZGWmxBTFZTZGdJeHk3QlZ1RC8zWTlOMktnTE5EUHE2VHV3YzNLZEdPd3dMdmsvcmJxdEtpK1NJa1NjNHRJQ2FPcU54cWZhY2xGU3hZR3NyaUZsQ3FzODFhUU55T3NWUko0dTdvbE1OU201bGdxcC9nRHR4b2ZiY01zK3p1RUhPa2lJZjkvNk1OSWlSMEdUc2lQUGZvUVFpZXhOL2R2RG1jbGYxV05RcFdXNlYyUmVGc0hsUWk3Y2xSR2JscUlSWXY3QTBOWDF0Nm5wc1JCY2N3RUtBelJVOWZTV1ZEQyttNENmL20yNDNpNmc1akNiS2M1WENXOVErOVRBTFZwTThRdW9oT0ViME5mMCsvMy9NWS9tL3RMK1ZGNUhBWklmaWhNamdmNjVjS1FBb1VGd0VFQWdnTU5kNm50RTNXM1pCUHoraGVvTUVTQnIvZmE4bkxab0tDOWlzeG5jbDB0a0xzeG9vZ0pKZnB3UFM2VVgyeXdYSE85WE5WWksxbng1UTZWcXcwMmJEUzhzZnFnMVhqVDExaXpiRGd1aWlZWkErOHpzTHZ6OW91VUJBbFM1S3pSRFBkcTNpZ3h3UWxJVWttOWNLWVRQbkI4M0FUdWRXV0gvMmErek9UaWdGSXhBRlZJWlQwUnFOc2hyTDR4cCtaclpVSkFib3ViUm9ubDlkbWF5NXZpYTVKR2s3U200V0M0QzEyL3FzM3pZakdFSEJXSVdrcmw3cTBmV0dPemNpdzF6UG9pSG94a1NGdGhZZVRKdXlTZUIyb1hZWmdSdFVWVkZ3Z3BMeVlzWEhQREtiSCswSm45U2UzdnkyYXdRWE05WUpvcnhzSkQ5MkVYa05qL1Z0dFByck96Q2w5ZHg2NU1NRDhwUDdjeEFSb01EZU9Db1FOVW9iNzNEQWp3WmVmZW8rV2NsNFY0UCtPcXN4VnlJSTQ4TEE4bUV3RUIxRGd0RlVxeFVydnRib0d5dGZndWE0azM1T1R1VFlMdEN0bDBFeUVGOXpBU1FGRG5jc0pmRmhpSkVkcG53bVA4OHB5NjBJdktWd0h2eHNkOW5XeEZDaW5qQTRrbkl3Q3B2K0R5T1pOTlJmZDBYQVN3MG1VMzAwQWI3NUNxMVlWcWFLZXpXMnlzS3NHc0hscHQ4dUlZempIZzY4bElPaGJ5VkM5MXVoaEF4aHFZb2RjdE05UlFaQXR5MjZVT2Z3ZXQ2L1RuRm13WFhDd01ub0xTMzZKMzMxUUZLMmIzR08yZDJNNUY0TkNnNWVWNmY3WVFtMko0ZVlpdTB1R3E1b0VlM1JrYmFmdTNjTHkxN3pxL3VFb1d4aVhtQ3M3dW9LVUY2VjRlaWVLY2hIUlBOakdzd292Q29xdkZFa1hCUmNXTjdQa1NYN1NOVkNBVHdKaHhnTlV1cUhVNXlFUGJZY25SVEs3eWJIOHlSTURZa2p0L1FkZnErWmVTZzJxcnUyblJMMnpGTWNISTFnYTVmYXFpQTZWd08yem9MZUYrTmF4T1J3S05HdXlUWEFKR2lWa1hFUDUzMnZHRUVGdzBJazdJNW5VZVJDeHlwRUlpcW5rTGd2QjdMKytETjJuWS9hSllQdEhRRFdUdkhuK3pRbldEZS9CbUlvMTRmajlZRlRZWE4wdGlLZnFsenczNzVEUFlWSXZjdEtvUS93ZXo4bmE1aWU3ZnNoazRrazVuWXhYWThCT01XZnlDS1RiZk5VVmNCMTd0YXpHcDM5WEkyY2E2aHU3OFQ2dVNiKzZPbENqbFNiQjdyVlNhWExDT3YzZFZEMiswbUYxRmx0WUpQWkh3djZZMnhqajRzbWpmMFVjMm12aDNqS01EV3hwUVdodXIvc1BqdVFmMDN5dkRsZ2QyV1l0bk1TdTAzWk5LVUw1ZnFld2oxaVdEN0RTMFpRbGJkcm9RMkNyM3BSeG5GZ0pYVG1CK3ZNZnMyeHRzY2ZIQmhaSzhsRnZIVzVBd1N1RWFVMzVmV2w0NFBCS3Z5anduc1NWUVBwWWNMRldTRlpRY0JicmVKcXZrWEhsNk1XT042WVRJYXFyUXQ5Vy9ORS9JWjRxZDd3eG1sVk5SRmhiY0V4cUordXEzeEVlR2ZCU25uUjQ1QURmS1htWGlMdW5UNkpFbUYrSnFyS04wR0tvQ2s3QWNtdnJWYWFKMU5BeHRldUp3anZKQ3hQTWxhclBKMVA5NnZqOGhLY0NsekxBK0xJMWNIbkplT2dhQ2RIUkJPMStLU2toWFVabFA4OXhZQk9xRldYakxIL1oyemczSlNmdnRUUkJoTDlKYmZvNGlUS1IyelA4azVVL1Vxd3RIem9YOFdVOGZDejRHWWpVSmZXeVJ0OVhRUXZ6NHpIM0w5S09QYVBOdW00eEE5SGdsRnF5elhBSDhNZEVyUFhac1RwNTliRVNlUXQ4akNweWgzNmxjR0JRR1UxbVZMRVNyN3JzRnZjRDhxaElMMGhNVS9HS3pyRldIWE1rQ1UvS0Nuc0pzTUJ4OXlPQVJ5WHVqZXlkem5ra3dRY01pQ3EwZkdBTGJVNGNnRnRuOVU2MU9HbzNwZlA3MmtManFmV2hscGZEVVI3U0p2ZHM2ZzBKWU5GcXFzL2tkdk5maFBwckJFbHBTajJGYURrLzBJZmRFcXNmNGlVMWo1TWIxcFNtK2lTTkZ4dEhmTXIrVE1ENVdOKzhsb0dFNE83cUNmVnAzMWw2KzBIV1g1YTQ0R004U3ZsR3FoWlNxclhDS21reXFhVDF5L0p0M0pxUzk5NGZkVG5TcW1qWmhQTWdxR3FBNnRhWitDSmQxR0JXR1pzTVgzaDNZeDhOTE94Sjc4WVVuM0hpTGxPd3F4U1NCUXJka2g1Um1vYjBOZG5ncWd0K1lxaDQ4bkpDWWM1anF1UmNDdHFUdElXaEoyV3VnN1VybFREd0FweDhDb0Y4MzFqQ1g4SGFsTmN5Wm1wZlBwVmo2ODFyenAwcFZ6elV2a1Byb3M0aEZTWGhWeU53c2hqMXJMUXpTVHNhVlFUTWxyTE5sYlZZSTdiakZac3FMS2VXNHdQREtoSGpsNTdrcHBvU0VERGlENW9RVDdWMHJEbUtoL3hlOHBwNUxabEs3TVR5NXAwbzNFOVU5TUFrWU1jYmIzclF0OUNOdlFZUDRBTHBCaDdvNm1RUDZVNEsybC9TVWFPdDVQVnJYYnROZkVYUlhOVHpkeGxGVGVVY1djL2FER0lzdDV2R05FZGsvdnJCeFFEV3lER1JQbVVnU3MxbjEwakRwK3pvTmhqa3VqM2dUcWhzcEkrbUsraFRUNXExcTB4K2hla1R2WkRiL01qbXhlTndPTXpBTzh5UkExdjlzOVlmNHRNS3VkTUxlVVVuNXR4WUdLd0syYzZ4Vjh5cWpQZW9mK0dOZ0FOSEcwTkNpVWw2d0hmT0MzNlU0R2xaQk51cmo1TlN6clUxMUtVMDJxS0NkdVkxc3lmaUdaWkphVk9zUXJBTHozQ1FaWE1hNlAvREJCOXVwTkZndFROeDZ0ZTcvQnlSVVN6bXIxYXNoOU8yVWdpUFpIUHB3aHZQR3B0aTNwMks5dUZ5UWVGTVEwRmlWcW9kb3FlWmxqTGFuUkNFLzNIV2RyOW4rMU5ET3FUc042cHBTUFUza2JSL0w2c0VpK21HTnFHMml1SG1wK0V6Y3hya2Y3Rm1tdFQ0bFB6WDc1eU9nYi84OGtuOFRrZW1kSU5RcTB6cHVqakpZS093cVVSWTE4bU1uL2dXVVNhemJQZDI3Rnd2b0d2VjhlK2Y5aW9rSmtQQ0JPOGlBMW5yMitYR2NTVEFOVFo5TlRPeUhXbkpncTUwbjJTc0NEelpYOXJ3QnV0TXFNRi80ZjY4azVTbEtBYUhPZ3Z5cktHaG1xNU4vbUsyYTVhM29LT1IreUI4cXF6V2VvSEdUaHJFdUdiOW16MmlrRXlmelJhbGtNdjFHUDlUWWhZRDZkb0tkeEtudGpkTHpmZVp2WXorN3c1cjJzZ0R6SHZ1dUFMSHhhUWEvS2t0TmpaU1VCUFZ1QmdDV25Sc2QrZG5ZbUt5ajdrdjVIRDlERnNwUGt0WkFNM3JqRE5QWXNQanBPNitMYXFjU1VTUEgrTEMxMk5oWUY4ZFRjU09LVjlKeVdSV3FzWU9UaGpFU1BYSGNiUHRxcEdCUEY3YWZLelMwR1hnd2N5TDdLT0UvRk5jK0xGdStoQUQzLzBEWHpKSCttM2UvMkMvYXgvTW42VzN2UVZlUWJzVkQ0Sk9PQXA3OGlybjNvdGNRV2dvL1J3MUNDNDRIOXY5WEFCc3FxdkUzaDJJYWJOZEVzVU9JVjNYRDZpaWUraGlkQkEydy9xNHJxQkJQbDlwRk9ybzk1ZnVoWVRVUC9nLzRxSWJVSnh6ZWZIWGVDQ0dWRnNsQVg4WlkvYzF3TERnR1JFK2tPWENzeCtpQWd0K0FOVSt0b05VcWpkZ2xCWTM3N0wvdU5zTjhZSVpPMDdUUWVkNFp6WVNlUXhoT0lIY3JRdFV6clZ4Mk5zQndDQUZ4NE1FVmFYci9jYm43MHZkYWFYNEU3MUtjNUpFYlNTUnJLcjA5VUwvUExucW03VE50bXVMWCtQZ2tqaVBtQjdNT3NHSGszcFhoRkVkNzV2NGlPWm9zVkJ4bXZBNGhhbTlESmdHM01XRHk1NE1jUTdJcU1SM3NTVm0xM251dER6YkZlajNJRWNkMUxQV2NEcUM0c2xaVEs5emlORkpHaWhTbUxVakN0aUVNVjBQZUc3WHBlQlAwSmZUTW0rK2IxVjA5Q0ltaENlaVBGK0xBaVVJL1NacmptNjJnb2NWWnpSQzFrWmhIU0V6YWlOTWtPUlFVc3J4R1ZaOUR2OVpVUVZQUlM3UlNacFVYNURYZ2VrYWlpZjNRVDJWOWZLRGpZSEdtY3dTekYzK2VSZnhreTN3RitoT1JIMlQyMkpFaHZkQWFxQkUxMUJNTmlJM1BkV2NMN3J0bVNDNklqenpRUVNkdFlsSVBlei9aRE9BWEErTWFSbzRVZFZVVnlWUXE5VVc0V3JsUXByRytxdVcveTh6d2JEMTFBc0xRT3VaOXFRMzdXT3g2WWR6K3dvUzJPS3pjMU1mS0Q4QW9tQUlmVklPMnBZeHp3ZnBSanRLL3p6bXlVdmg1YktiamhQc3l0ZkFBMDZqSk1QU0kwM2tVSDhDNlBrOGhqM0h5MFE4bHEraVFGaEh6UFl6QTg4eWhtTGN1d3BacjZuSXUraVliVjhwa2c5c0JxL3FEcjZCYUlUYlZnVmYxR2trRUFuN3Y3c0VSNXI0dTFSb1Rhd1Z5SW1uVm1HWDdmV3Qzc1VaVVdlbFlBZ3pDdXRuWmU3SnFiNTBoQjNpZE9FZGlNeU41OTJENmRRSngyTkZESCtkdFNJa0NFTnNiODArMDZvd2QzMGlDS2VCR01CcXN4dFU2a3VycUZXWWsvVUdkeUY5UlF1R1pWZW5uejhFK1ArN2cvcWc2UnJFTUwrdnI0QnBsY0FCdDZkcmVOaW5rQzd6SWExc1JBdjVSRkNVMGIwbU9PczB2bG1hSUhreEI4RlRQV1IrWEVpeDVVTVRvd1BsSW81ellIL0hIQmNwL0lKWXk0UTVaU1FTcmEweWJzeDRGcWZvRTdWdHhCc3VLY0VmZG9ZeHhvcXlQUFhCMHhhemhQb0s1MmFIV0NQcDMvWkVBN2hlZEJCNTZPb21jakg3c0dua205YmJHZWFnRi9nUElUVEJlYjhNZlQwdC9qNUZ0Y0xSZC95NmlHNXkwWVFPelpteFdQRUFLZ2ZMN1BjZmUzV3hjOCs2TjBvMzIzK3dyMlAxZjNHMTVaWE1hMzhJa2tBU2JCWndpQXlHSUtnZmEwdmtiNjBNNjJlclBBbGlnRjRyUmNXZWtNWno2TU1wQy9rdGc2Kzk1eTkxcmMwbk1wTlFPS2x0aVhsS2tnMmNFazN2L0N0ZVhmM3hscDRyMStYSEowQkVLRmdRZFErRUxkVlg1MnhjVkFhd21UejdVSGZaQUI0ZHh1OExxcE1XVDQvOSsvdVlnQTJONS8xbGNxd2wveU1zRXQzY0kwMis0V0VwUDdGdmFyUGhReUY3elBUTm9CeEdScWQ2QVQwSDhqV1k2ZWxxU3F5T2JWVEVpYkN3WndMVHQvWlZjYzdMMGMxL1dqTjZtSkJTZDJUZG1nQndtS0NkVTNYL3lYVGpCakovUmthV1BxOTlTRmlsWjc2T0RodzY1bkp6ck5jMEs0ak5sblFFQXE0UlhvWURldkJnNDE2SzhHVmtObGZUTzFpcHd4dmV0VHl1dmd5TkNKRC9Tam9Ubk94b0NPbDRYZ1RkWktMYmw5MUptYUJhUElMQUQ5REFVMFY1OHZQeEJPSHZ6bmdudFBsN0hubVYyYjdOYjVpNDJLY2hHSzlHVEJsYXNxbWRFMHVkeUlTVUF6Ny92ZktOR3oyRk50a2lMaG5VMXN1Vm43emRFZW0yVklFN0xMSnIzUHRJbWw4OFBaY2E1T3dRYkhKbHB3ZkxtRERCUHRmNzdkUHdIRGxwYjJ5SzErR1lRbkVXbk1XbmxvNUJTOVpVbGN5UGxtMndCaC8wdGlLMjVlNVVoMkl2ZDhvRTlFNWYydWFWbThHVWRxdG1FSGpKbWZqbzFzd1BPWFA4WkdkaDNLYTZyaG9TdVZUSjlvajd6L1FaMG81RUQvZmJNUHBFWnZnVGdUWXRkQ2NtT3dtN2dTTWh4RjJsUXlNNTFoRGNNa21FMWROMmN4ZW5nOHdvS2xOWUVuZG5nL1h0WW5xN01tR1FNYzFPby9qWDBlcDg1eFNSbkVOcUpzRm5LMTlLZ3huRVZwWDZ1Qjd6MTZ4VUxqa3RkcWNFZ0xBbVhwVCt1RDFKWVlyN2dxNm1LMDdocndldjM0VUFGYTJXODJZejZOd3l4bEE4MFFIbjRoZ3BUd0tQWDZ2N3BVSjBDNjV1dmJldEhlTmhNbXlqeldPcmRpWHFLL0dXM3lkQzI5SzVRU2J5ZmFZRVNXNm5lZ0N1Sld5TS9KZ0huNkprek5LWjY0Ung2bFFpSWZickRyaVRJcUovME1INUhQck9pOFpDbmptNkp1KytVOEZZRlp3dFNQVmZMSkJmQS9mRzFwK1FoMmxGeVp0cENQVGJnYzl1OXRaSC9kNVlvU05ZZjUxRTBUSzVjMjVmakVnNTFIWDlGT0Q0a0xpSmVGb3VBdGprU0F6SjZsMU45cXo0OHZPb09JaDhyT3pHc3JSWlh4RWlmektqcS91ZFEzQUtGbTZkemxOanVjVkcwbkZGYlBBWXhOb3p2VWJKYmxEYUdxRmVrU1FTbmVEcHhWaHZxYjhSRWxXMDJNQkF4RFg2V3N2UWZHVUI3NUZyZFJ4cVZjZDFZOU14c0szbWU3WDVpcHlBRG9MVkNySm0yTW5PTkovcGdOMnNEb1F1U1gvNkpRSGdBc0FDZ0V4WlViQUZEbUF6TVZwdVpRcHRUNW5ZZFMrbG8wRnlUb2pubkg1aFhHOG9za0tFMkYvTnl0Z0ljRkJNSEhBMzNoUWRWTXZhNmpMODVtbW82UzBrQktEUWF1WlVHeU5RUklSQ1dlSmV0dXdaQ3htWXpMd3NMUVdHcmMzeTFNZVVpMjJyT0VZNHpxK0xmWCtrYURac0Fvd2ZvUW5nMzU1WVVpSGJiUmJaWWk1amFUS3ZJN2VibG9uVnJlVURMOUdaMUgxQ1pkVHlrL1ZSVCtoZjZ5eTZUZ1RUMmpkWWZBbUdLN3hML044MkltaW4wNmkvdUJJWHJYVGtST2psakxGUmRQRHJHYnIxbnBKTjBtYk50MEpiSFk5RmIzek1HUVF6d29MazVESS9LR29oSWxQNWZJMmZzWVhZUTFldkJpZHpJL3hNVFZQVmZIWTRkU0hQNDQzVWxIUjRhMGVPWFMvYU1MRlhnWjJxNjU1L3pGdG9qQTNyL1hLUWxoOS83SWlscEE0QWVYS1lDRzhBYlMzekloNmZYalp2bGQ3RzFEVXFNcXZjMzROZnlCdkFNdTZ1ckIvSEY3cDNwTHY3bkFkdFhsQU5yb2VxanN0Ukt1dFg5WGJ0UHVzemhjcUp3VHFSUGphcS9sUkJpOE5NdFd4TFJ2VDVwWEpWQkg0WkpIYmVLTUphbXZWK0ZpOEVkN05KTFlndjd5OWpHOGY4Yk5kdE5yOGRFNnR1QXkzZ0tZallaMEhQSjQ3UnEzbHZWdU00Y2NBNUpNYTVFejRsR3ZhekxVZk1JNkt5RS8zTmRHakRIYi94LzZ4a3h0TjZwSzVPWHVQOXBDbHhheXU0Y2ZNTWM5R2NwMmNYUUg2eVViVkkzRStNdkdLcmJZUFNJcmV2QlM4ZEI3THVSRlFqVkxYS1h4RDlGZ3FITUx1eDhDenNXenZuL1NqcUVnenBJZDkxUVVETEdSeWhEY1BQT3ZLOXVSZGVUM1V6VGRPc2ZTWWZGYkR2QUhBVkxSSXhQeWVHdUNkUEtETWxHcWJQN2FPQVBSUlFtRTFycFIvZWMrT0t0aUYyVmpYVmVKV0ZiY0syOGZhNS9VSVE2alpSNTlEZ2ZoY1R4YlBXSlBJMUFhSkNmSTBwaVZaVFlXcmRlVi95RWJKR3p0U2dyU3d6cld5NkdaWG52WEl3S2tpMzJSRmMydmRjQ254Z1U2YTRPelJIU0RBNEZrS3hvUVNGNEwvZUJpYTlLMlUzQkhPMmkrTktDTmY1WE81QVR5NEdkYUdzZTFPQ0YwbXU1YTE2bHJCYm03NXRubDBmOGRNbTQ1ZmtMS3IwTjVBTnJ4b3NSUVZQMHpUWHlkSktPWUo0dEY1NlMxc3ZZSkE3UzlkbHhoNWpxV0o4ZVFPVXFQd1F4bkdOenFHdHNOR0Yxa3ZveTFCK1d5RmxpNVJQR3haeE1NSEs0RmNKRlQ5UFF4Q24rK2dEcDUySmFNdkdhZGt6dkUwR05lcHdFNW8wb0hNVGtWZE9QdnA4NDVTdTNGdk5KQXBlMFdqZks0V0pONzlTTjM4QUg5Q0M0SzhXbFlSQTB6Y25MdW1XQmRjY2c3UjZudWlIYTM3T09nbDZ0alFkaUVaQ1R4NWJUYkd0TkkrSGZQVVRQQldZWUpzb3lZc0Zxczc4OHZYV3ZHa210dEtQZ2FKQmppdUZBcnUwLzRqc3ZYRlh6RG51ZkRoQmsxS05OS1ZQaWc2UHRFMTMvYnZxZmR6anEzRDdiNnlON1llMGFwK2pOQ3pTY00waFVjMlRFbEZqWnowS3hNQS84L3JmeHlVeUV6bUpoVHVRMlRpazkydXR1ZTZNcnVVb0t0Yi8rS2w5NHdsQ1hPd1d0UWVJYVpFSGVnQ0hNMk9qWHFrQXFCeEVUcFVzbk1zZGdWMVJaalZKd0huSkN2U2tHemVVWklQd0dhbU96Ky8wNDdOOUEzTkpRK1kwUGxLakdGK3RKYXlSNisraGp1am9oaTlsTDl3bndrS1QzMWNoWUtZNmgvaDJSQnVjSFFBNXVqTzd0YnArQlVuMm5HQXJsZHB6Uk5xMjBOM0JmV2ZJMHkxaXJodGZ1eWtMY2laMFBMdmhsRHU1WFdyd3FubXc1MGJaY2tpSDJ3Y2pUbVVERmQxLzNVMDJrS244aWZPTzNxRXcwbllZMC9VYnZqVU9KRk5ROWttMjF4R2JpWUNqL2YrZGhLMGFDVDlkOU5vSTlaUWlPR1JlWDFzWnJMWWo5ckhGTE5HY29FUHQ1K0htQlY2dy8vTWhYcHFoUmZmUDBSbEYxdWlrNEdCWisvcEovZ2ZTcHg0b1RDR2VDQUtkVktaZDF3TkxYaEhMd3k0eE5MMUNyS2pLNFBPTWdQVUozSi9ucm5SNWE1bVRsWkdqYlh6S042VVF2ek1yV0wzYWRVcXZoVytpVC94WE9vNU12RU1BeUhBdk1EVDJ1eUg4a0FWS3paazFsV0MvRkpSdDlKekU1Y2RjcWlkcjNPbVYrV0o5S0s3Sjk1L2hzT3Z3Z2NRWUY0YzZ1OFNpMzFzLzIwZXRlZUJkaEpCRnNaNUxLb0dmOUVHWUp0TVkyNUpiZTlaa1UxOVJkaVlJMVV4Q05hcHlFMzFRa1NPZ3hFOEdmbmZSQ1liWXd6NE5HdlVzamFRN3Bqdml2cFFIT2ZpazhaK3NOQ3VKMDR5eFA5bXFkdWVhektKREpuOWJFdUljenRsYlNTSjlOQ09KWS9FUFEzNWcvaW9La1Fsd3AzMlg2U2ZTeE53SUJJd0RsKzVOWW4vRlA1WjREN1JKK21vNmJtaUVEZFRldUJOdUdXZDN4R1kyaHEycnpWVmptM1A2NGRVYWJ1WDhHSXkrcFJnSnUrbnlBdDdjWG16cjlQb08wZzR5RnpuRzJ4Nkd4NGhrZXltaGZrQWFyRTdYWEkrRTR0UnMva2EwbXRKNFdab3I1Rk1GSGFZZVgxbGFNbzJzTEhheGlTM3RkanorTkJiU0dnOE9OTXJlcVNVRDNzU2Z5RmowOVBHNlhnTU02S29Hd1lyQy9WNlhKK0tnbUlNdk15RWpyY1dZeEhuSlYvUGJpVDNrRTZhbFpTUk1XcnZVNFhIeHMzYVUwUFJ4KzFIVkZrQXgzWDNDU2ZUWXNQUU1wbHJZclBEcVRTMlRYeCtpc1RITjNrK0VySm9BYUhnMm5UQ0RqdnkrRTJEanpkMERBVktOMzA1Ylc5ODRDS2pZcmRiYmlwK1NPelREM2lHdUlHSXVlTVZRM3pVS05LbmhxTkpjSUZkMzViVVMwc201b2dXWG1NL2J4emxmVEc3dzFwN2dneUtqa3RveUpaRUFZcTV5UWtsc1h3WExmZkFKbTVwTkR2emZhaVZRYldrTC9IaitPSzVwUzRJQ3dxNnMxV2NLSEc4cENDMVNyWm41SEIvQWxUTWlMTTVxZm1uV0c5c0FiY0VsREt0bWxKU3d5RFpENEV3a0wzdzhWdzVCWi95TCtxUzI5WnluU3FlV2JJa1U4bTIwd20yWVg0R0lPOGtMYXM3UW9UWUZ4a0p2U1d1OUd2U21uUUE2dmhLVW9IbHpWOE5USkhXME9SL2h2NXV2cEovZzZpcU5iYVZ5YnZiRVhxNEtOT28vK1pVYVc0TWI5Z1lhdE8rYWlMRVhaSUxWTFUrQWx0V0pjcStwVFVYWmxRY0JXRnZzN1VocmpRd21ZZ24xaFlIK3Y1Q3d0TmNkVWpnME52NlBEb3g0dDZCT1BSUm5vdlhtNGNFNm1XUndBNEpxZFdNaUtNTm82MW8xYVlmT2Q2Q2JvSEFRTmhUb3ZNN1h3VHFPZ3VWUUkzK3JQZStwWXlwWkE4Y3UrcEpkVHl1YWVLeXh6emZOT0MyQzF0a0pBU1ZJTVJhOHVBekE3a0FFbGNpbHYvd2QzSEcvSUVsa3ZwUE1XeGdQTXZ6dmxZb09HWGx1UHVaOTVJbVpkR3ZTSE04MUNVQ1lSdnlmTjByckhoWmtmbmZRV3Y0ZnEydllLT3dkWDIvblZWMVhXWGhYUDk0eXNEeE1yVXpwSkxRTE9VT0NxN3pvTE1kQXdvVE1ybFVKUWVlZXZqdG1PeUU5V0xBaTBpZGgzZWlLeU84V0c1Q2NlcmFSbnRya1ZHL2dkSFNUTzFCRUVVYThVVjRLeERCSTBVamNUbnRiVWFrK1p5cTVuZ3FmV2VjSXcrOGE2bWEyNTlPRDNhUDM0L1UzbCtNaWFrWW1oYjllREY4NGdQYVhOY1d5MDlyUUdPaHlvcEtDUEJxWFBCYlVOcU9ISlNZUWRGaW9QL3hGcWFzUjJ0Vk9hMk0rQ1Bwd3Rnalk5SnpvTVBpY0orT3JnWTVYb0hGU1hoajRDYTg3WEtkWTA5VXE5SXk4My9GYmVnYy81dWk3NzIyZktFa01jdFhLMzRhWHVvck53YU54NEh2d1JQZXdYQkI3bU1EUXA5SjIyS2d5YlNudUtaQjFISFIyRVRTbTVXV2F3WUhLcHB4bTkvQzloNmlOT0lMVFVQTllGR3g3cm16dllRL3FWc3VsZnFCN0d3TmVwWlpqUHNlU1h0WmdSZ2dyb3ZHMHpaTUwybW9WOVA2UUZQNFlzT0J4ZzVkY2ZrbTNlMENVWDBIZGJkdXJTbUdsTHd0UEpYVERSTkkxSnArY0pHQjVmNXlodVhrN0lzc1JmaEsyc0tKR25SM0hlUUpYZDVjUUt6QmsrbjFHUlhSR2prZjJOajU3clFqK2ZoT2RNZlE0MEVyMWZQNUVMVzFtQzRmTTRpMk11NnRLWHRPSHNtMDhGSUFMU29KWnN6aDVOL0dyMzZJSkVXWGZtam1WSXpZR1JWd2pjbjRxWFFvZDZudUIxZjE5Um85cnJrUUd0SUFYU0ozZUp1SDlqYlU4eEFrNFRKRitsZVV2SDYvSkk2WFU4NUNSZWs1WVRkeTBwME5TWUxVWFErV0RVdVRwYjl0eHhtdUFNVHN6cjVuTnRPQXc3bGNjTlZ6L0ZVOC9DZkxWcTdHVitaQjhOOXUwTzZmZ293cTFRRnVkWWVhQnRhRFN2S0lhOUlwaUpyNC82VTVTSmRYWlVGbDlGQW13MzgzNjZmbXZEOFh2bWV5bUN0MnJWTVFvUDBSWTVjWFJ0dWdLbkJtWjE3bVlNUkxQRC9neDRDQzBNRzlmTzhYVk02NFlpTzkxVStPcThSRUpHYS9XTFdUa0RPTUVrTmJMT2l5UG11bytMdE5wU2lYRFVpb093NHI2ZVcyK0R6N0xSU1REcEZEaG5EQU8rUm1sU0ljaUQ2MjY4eFlVQkdmcXJPU0lyNEFPbHJIRnhoTE5yMTQvWVVrM25UQVBQVnFYWTdvU2R6QmxKdGVkdnVoSmw1c1o0Sm1DYldnUDZQNS8yL2M5NzBDU2czQTBPQzZ2OWhEUzJNQ2xzWmg2eVRmdkozNnJuamxjQXJzZDUvMm8wTlRQbVVSZ2RtWDVuOFJLRDliLzBVL1RBa3NkSUsrZStORlN4T0NEZ1BTN2t1aWl5YlZvZ2w1bTIrM1JRQWZtZDRRWlBYbW1VSnhpNEl0OU1tMGRkTXBHaWhOUm5FcXNjbDNoaFVEbHU1MVB3N0hvVVhhZCtScnNNUlBta2FEREpQbjFpODNYYXludkt0WERiQm5aR2diOFF2YWhFQkxDdm5wZStqTHFCK1RleGVWQU85b0cwdnlSN3BETEg3THdGLzJjT2c5WU83b1h1NDlzVzNPdVhwSHRtSG1BQ3ROOFNKU2JHb3dXblRjK2xqUkFrc2pMMUZQUldubDZ2MHF6L1oyc1oxcXg5LzJMc3dYaFNXRlVuTHczckVUeWVVZUtKcktsdkt0TzZyMUo4M1hpdEVHbk9rQm9rcHVFN0orME1nRkdNekxZZHFrdXZVbjY1eC85bHVrT3ZzL0U3cEtlOXZmZTJQVitkZ2tpRVhrZUY2RVhUakFQOFBqZUVNc3dhY3F4cmpBcjdKVlRhQWtndXRRYlIzSjd0cyt5YVhjVlA4b1RYWEJCamVTM0pvU3ZGMlhweTdtRU0vUXpscGtBQ3dyYlBEYjVaaXhxTGI3NDQ2VHprTHV5NndKbUdIeUYrL3JtaktiditkOVVDL3luSzV0NnFiYW9VdWp4Z0FCNmtRNGVCeVpkRFZHNUZmSmtRdHhlNTQ2SWFDTENTcEZaUERYVUJGMDNseVBTOEcyME03R08vOUdkeFo1OGY3K0Z2c1psYk9oNkhzeFBHL1I5dUFmNWxWRzR0aUN3aHRxWUlSZkJHbjJnZWtLNFRLTjk3NUxuNVdiZjhZT1Y2TTJBQ2lMTkZINzFoQytVaXIyNzkvMVA2M0NNTnIzYjY1YmxJWmVkamUwUmp1WDBUVzRUKzhtQUhZSWdCbzNOVXYvTS82NUVjY3JXdXpMVjlZc2NjdVFSekNaRUJZV2VHQ2dkQjBOd2UwbkRROVp2dGRSRjNxSHlKZ09SbTJlYW5lbm9ZK2h3WlpZZ3hpUmpFbkZMbm9QdEg5VmxjeTIvMDhoc0U3aVpuOWY3MkM5Z0pCQ3Jqdy95WTZnRDNsM2J5SXJXWTZmRStTSjQxekdYcHpZMGVBeE5nRlFFL3QrWjVnaU5BMStxVHVmc2pLa2JSTFkvb2pqWmxPUEtIN0RPNDQvVTJYdml3Y3JLMTlqVklHaklHZEtEdnVEZWM3eDlWU2RMTW41R0RMZURNdmZIQXFRTVg5NXRyd1doeis0ZlNmMkIySm51SXdJK295dVcwNVZZK1RFWjVSWlM5d3FaOWF4YlpXMXNjcHVzSHpuanllcngrRHFBMCtrSnZUWkF3RktuRmo1ODVMc1pSY05wV1FzRHlZb0JvTEVGMkVCNXB4Vlg1YWI1bDljQzF2RGVLWTlTZmpxdUMzUHFiTklCeEFqYzFGTlJ5Q1JWQWhTalJLWmkxbHk0UzJ4L0Zpa2F6M1QwZlBPbUdzalRUVGxkVWEwdURkemVyS3dtOERJNFY1WTdTWnBIRk1GOGpjdUdMaDNLOXMvdFZEcmJrRTB6dDVqSCt3MG9MMUk1ZUJjMXhkYzlhUFB0SHhWUUM3dU1jLzFLU3N3ZEZFU2YxS3VCYmJRZ2REU0dPaEhKMTQ4RFdTQWlZS3hJZEp3d29odlZPdVE5OGpoRnpPb0MyNlkrRlFpejU5MzhKN2hNa3JYWk5zcG84V2R5d3FEY01ab3pXc29uYzFVZFhxNzdMbnFkMHBSMTlYOVRlcnFGTzRSdCtoZWllUVA5a05nRVhDSmVoUmdvRXVXL1lHUHJtb3pkMjJtdDExTW0rM1AyekI0WkZXWEd3TStna2d3aDBIMHJKTFQzaWhsc0hTUjNsSU9PeHdCWGN1dzdDWUtkVFVjUTE3cXdoVExqbUNpdWlENXRqdGZLZ0MveDF0cXFhc0RhWXNBc2gySHNnSUlOajJ6bG9uSG8zQ3FzYlFMdC9ENitxL2RpRFVyeTZHRnRCQTVFV01ya0lwU0M3dW9OZGg3eWl6ZlhiMkFBV29DRnlCU2dZQjlsYjdwcWRyL2E0eitkWlY5d28wM3pRZHdiVm1sWWZwb2lHRlhWT2R2NmNDY01lWU1PdmVSVkphZjErWDhlUzRESkJ4TVMveHZaci9kV0M2em4vRTRNMFVEKzNjSk9qazVlT3FRdnZ0c1dmZ0JIM3B2Zk5pYnhRRDNQMlFqQ1M2WVNhQXhpVFowaVlnWlZhTElkemsxZjRXNnNPZTdwZzJqemNKak9VSEJwS2FvZTgzTUc5OTFwWkR1WFhUYjlLekhZOFhJUzZseVFwZk10NDJHNi9RM1o5TmI1T0drWWJUWHN0Skl6emlQT0RsSjZuejArZWtZbnd6a3E4d2FhTUpCdUJTZGNLQkZqYnF1R2RCRzdxRXBXRk42eEd3VXJkRDQzWHc3WlZxQ01yQ1ovM2xCV0h3aUNqUlRGQnJhMXJxNUVJdnVSaFN1Mkcvdk5QaVo1ZUMyUDdJazhSczVRbmNGaVNOQzFaNHpYOXVnM2lsVVhVSVMzcloyejNMM1RFVXUxdCtXdkJMY2pvZ0NES1lPUTFJWjluZnh4S2dzbzFNQ2RoaTBUaGpmQkRJcWNqR2cvVkQ1SW8rTllmeVFmRFZPbnNabkw1cDB4TGg1Rm0yUnA1VWhEOG9haW5yc1BuQzRucmgvN3gxWDRsTWRyTDRpK3dYeE5KcXdLWmh1MzA1aVRlVEYwTGV4bzVBVnJQcjJhRDBoK25SbDFkN3p0V0p4SFRIdHFEdkFNRDdiMVZHa3hxZk1QSmZmdlNXeU42eS9SZWxwUDZ5UmthWCtzOEplQksza0tQNHQzejExb0pjMmhwZGxhZ1NqQis0MDJ5cTMwUEh0WDEyOHZBRDJXKzhTdlUzZk9aU1BVcVZlenlVWGlKT3dQUW1WcHBUOUc4STZkSUZFYWRxS0RFcHNwVWR5TEE0UW5jcmdsRnlBTWtQZnFQSEdhMUdKQ1plZkw2UnlDZm5SR0tiZWk4ei9INmxkQVRzOHBidSs5MVpadW9mVXgwS3pMaVVzNE1CVy9aSFcyaGM2OFRnUGxVQTFFTU9GZk9ieXIwaXc4ZGpmcElVN3JNKzN5K3puUmZlTnNmUEdJdW5pcXFsWVJqQ1NWRUtUT2RScG5nMHp0dUFNa1pMMTlOOWVvVXU5WGd1eE9pYjBLMWMxOFBNMTg5ZUZTOEVXU2EzQlpBeXE4Z0k4ZEhEdnFJNld5ZUNaaVB4TnVmUWhoYUdHQUhublVIU1VCdld5dHRTWlFmN283ODJNZEI3VXNmMFYzM2p4WlAxMU1qeFBSc0R2bVpJRVlPaWhpbGkza1FjK2l1aEZpUWdsTjFlN0JCdnJRRnlUby85RlVnZGhuT0VoV1NOVnhpN3NiTi8yWTVKd2VtTjh5b1BDYXNTVmJQbEtuc3V2Uk1YQUhRbGMxdndJcVFhNGhLWmx1Z2EyUVBXc0pOdkJMcjU2TWVWTUQ5MkIrWmQ5SUsyUjRJMG1waUU1Y2hrSGdYbzNLWHRZeU55T0I5L3pRWTBaMUExY1d3UXlLS1lha3VhUThCVkNLeFRPQlRyU1AzakwrVXF0V0lpZ2xRU0JjRWVUZERsSWtJQ2NQOU02NFV2SGRDVjNEYjFmMEZVNDBDWVBhcXFJVThjQ29mb3gyKzAvekZSM0N0QmFuVS9xeGtYc3ZSV1JvMHF6YjgyY0ZCbVRQS3pCdk91b3c2Mm9RS3VSV2kraUNqUnNOT3ZNRjJIL3FIK0twekphNEFmcEpMbGVEdmpMY0ZvNkRuaWZZaGhjQS9PUFFhbmQyN3NkUTR4cFdOcHpnRlFCUWllejJKRWVENVpBRnI1TzJ5Zk9PNDNmWUlubmp2Q0lBdndOSDFmVUEzNWFWVzZBcDdUWGNBRnJUdDNrRHpJcGhrSTB1YjJDbUFzbnNJUVRSck1PVnBkZ21BdGsrcHpseVFtUE1XTU1PQSttcDNoem1sVWF4Q0QvYS9yV0tYMllkM2RGWTJLc1VmOTE1ZlFNYi9SM05lczJUMy9kN2ZnZjlaZkoxVEZpMTM5dWFKaXRCNVZGMkljUDNQUktXdWFCY2JHYUl4OEV1aXJIVjY2MDJjRTFYUkNvb3ptUTZzUlk2aU1vOFFOK2xqR1lxOHcvdGlLdWxhT2NEYTBZaktab1puOEFCNHJ6TEpWSDgzSVVJNWZSMEc5dGZabXJIY1UzcWZLbFY3VVBaQ3NGV0J2YS9jc1VFdFlzYlkxd3ZnclNEVFZScU9ERFhCTXRzVG41eUtNRW9JQ05VcnBxb2hDWm5DeEpKdU9NdnVVSnp3NHlueWR1TXVCYWlDNnJhOE9jUjZ3VzkzNlp4WnpscVlZaXNLeEU2Nzc3a2dyT00vSndtcXgrd2FWU1JvYmZwc0QxTzg0Y2N5L0M0ZlkxcUt1cVFaMk1nVCtBK0pRUVZlS0I1UnNsQ09LKzlRdGVNZVBYM2FnS1FzckhuU2tUbmt1VnJHQUhMRUtVZ1dxa1Nrb3FCMFh3SzlMMC82ZHJ0YlhWMnE4WUxWVGNNQWlWQWxyUkhxM0VnaUREK0RBWmZVaEIxNHZDZ09XbGNDdXlUbWpYTHdsc3FXbDJiS21PcVFpbUhqbjhQVE9uQVBIZkd4TnpqMnpIZ0U3WDg2QmpxTjBJVkxKdnJ6aUhVdTg0YlZoTzl2eGRuNzU5V2RsOFBHd2dnSEdVc1BIYlE5c2RwR1lmYyt4alhDc2R5cXBxM1ZwQ1kyeE16MjNtbWZXNFdKcTQ1ZG9Bd2pzYllLcEdxRC9lRzV6eWh1S2RVV2RDZ0tSaHU4MjljeGZlcFVyakpuS21qcmlBYXZDQ0FkS0pNMlZGUW9nYjdRaDI1eUlBNHhWMTllNkhwcDV4WC9XT1FsY0hZRXcxM1RqWnRsTk45T01GMUJONlNCc2I4cFFLbzdrOVcyRE8rblJpZGlxTWY4UTVHdEFsNFh1bHgrMFkyU3ZnamtiOXBsM05qamJmc0ZLNmx0VFpwZDFHdExJR2FRQ0Qza3BJcmk1Y3VtckpiVXV5a1NFdUFPQVhrUXFyamEvZ0k0QVp5djhTajcxUHhHeThMNnJtTEd4UTZaalRpaFFjTnVRSlBNUU9RdEdOMXZHRkorY0pHeC96cXRJenRrMVNraDRBUERuMitZZnc4RjdheG9sUjFBcXRnVjJkMHJFYkgrcXk1Q09Cb1VCZDEzcW11emowNkRUZDZJZWg3Mk1aejB0SnlNcFlrS204RnZJVGtjNnJoUWtId2tjRFpXZzFsN3RFVTB5cStyMTZBZk84Wkd2eUhxa1A1UE85Uk4wb0JuVmhEaXkvdHFPZjhaR2ozZmNZRm9ReHJTTE95TUNlWHVoeko4cTNxQndGV3MxdXlyK0hQY3lTZ0xNNldwTkxXUm9abTdQVXRpcng3eEx2bVRVNlZ6Yk5mRE9aS0w0SXVyRTB0c0ZKTThxSTFCb2pPTXc0SWxCRDFMZ0lDQWdJQ0FnSUR6L0QzQTc3ZnNZZSszdFp2dCt4K3ZzKzQ2L2g5Tnp2Mi9ieWZzKzREL2NQcTZmMi9TWi90K3JqdnQ5blBuK0h2VC93ZmJhYjl2Y2QvRDdLZjkvenM3OXYwMC8zaDlwNWZaOXd0djJmVTAvd2ZUUVgyL1dVL3Q5bVRoL2I3WDM3ZnJxZjh6c1A5dCt0bC9aOW5sKzM2TkQvYjlpVit6N0Z6ZnErbGcvYjlEMSszNmNQOHIxekR4d1MveXdyVzJpUktHOWt4K3N5MXFldnhUOVV3R2lZc0FuWlgxSzROQmQyU3VWSWNDclBWelY0VllJbEhBSUowYWdnckozNTUrbTB4UFZsRDZFaUpDVVhDcFUzSWZrek85bVhPc2hGUXhrcGxHRnNQRCtwZCt5ZUhCbWRtNWpZRlMzTXVkdE5CQmx4c1VNZzhHclRBRTYyaElHS3UzY25UYVZCTC9lOG12WURvd0IxQU9tS0hxZTc1ZGxHN3VZU2psWUF0eVpBR3YxRWNLNXByaU1iNG0rQysrY3lBQitDMjZpVHJqVjZCZk5CTTlzY2hOdnNrTG12N0Zyb0gxMW53dmUrU1JtRWpkcVFyYWlHak5JbE9CRXpmZU1WK1JETCs4b0dwdVA4UGxMekk0ZVlwRzQ1b25TTXV2ZzFWSzVxTnhEUmFCS1JLSnlkMlBMaVphSTFqN0FTZ3B3SGxlVXh1RjNBZVFDZVBYNWtoSHJPQkxUeThIYnhUaDFZU2VRQ1I4Y2haaFdwTHRUYURVM29MS0tNbFhwbFpiSHMvRjIxZEJucHJoMFN0ZVBIMFZIVyt5Q2ViVWJEMXFJMmgwQTY0UkZhT0hzWXZpS1ZDK1JVSjZZLzlhcEhFWEwzbllNTm95OVVPWXZQanFzTnNyaCtPSGVBVGNvSFBXRzNIWE1ySnk5aUhaSSt0eURNd0tySHUxZEZHSnptM0dJVkIxZHlZZHZEOGVUZVJlU0x1OE9YMEFNaitmaUgyNWptRjc1TFRMdjFZNlNGdlIwNW0zTitpbGhESUxsblRNZ1FJQlFUNGd3Q2VDOXU4TG83SWU0NGlSazk3UHJ3S1lSMHBxRHBmakxjY3pNSkdLQzhwY3VjcTVFc1ljVG5laTNjc0V2R2ZYbUN1eElEWkJyUWVMMkN1M3ZsRVRCczBxMXkyT2FxeWp4dzJyOTVJTEpEeTFIN3JEQmlsSFQxNjh6TVNodHZobjNBdlpkK0dvSGpRL2wzbnBSUkRkekJ1VzJ3TlVlaW4rT1NHZk5nYVJyYW0xQzhzSS9VbUVEcmNIRkVTaVhpaCtIeXRSbWJDOXlNR0NKdW1oaGlwY0Z2TU5hTnFQMWFGWnEvTmwxSmMvdW92d25obHo4RmcxckNCVjg3eGpZVkQxOXlPb3NrRmNhOFBBRlQyYnpFNEJLV0I0Qmp2YkFzVnRkaDJUeE5tT2gyUGRwdXlDOElIa3RWWm9rVmt0OFVWdkQwaTN1Sjd0bmhGMW9ibFJOSXdpWXVWZFlDU1pSTmg1V1lKdTNUZTlzQVl0dnNKYktsVE9EMGlvOEZybG9NSHdEcVZMZ29KeWppOU96N2JXSkFXM05VZGhlL1NhaGZlL1Vrb1JSc0JRKy9PMkNNYzVSTHpGYkVTd1EvbXNrZkFNaDk2S000OVRKdVhycnE5TS95aWZvT3FsOWZ3ZFVZYWwyV0RVTjBYVWdzanBoRU91OWFmalJQMnU4UEx3aXcvd0JjQzJkVU5rNENPRmVWZlBJaGlSRHhmNEE1Ump2dkpaQ2dhaEFmTXFxVzZZaGt2aDR3eEw5SCtEcTdSV2tzMmtYRW5DQVVpTWRCK3Z4aVBzVDd1U1Eyc05vRmlzU3g4aTRaRXJZaHZlaXI1M3NZMTVLRW1EQklPeGh4NkcrQnBKOGNwMlVLTjV3enY3cGpWb0ZVUUxLU3RsdDAybUVHMGYvdFgwbEJSTU9YNDFJZkpsaWVtL0RKVXVVdk1hY05aL3QwYmJKUnhhS3pCd1Zja0tGclhYelhOUFJhaGVsMWFmWEZHaHhCaFNoT2RJOGFXWVN2dERyZVdYbVNnTHdrT1R2SkppdmNrWXMrem05T3BqNCt3YXc3WC9CbzJ3V084Y2t1Y2h3U0VmQ2dpMGtnbDdOVFZlWlR3Tlo5N0hrRWo1T1lLcnBEU3NXaDNxMXZOb0FnTDVGYkdFbUlhei9TV1FMWW5hdjl0T1VJQmlITHVhczhVREduTVdNQ24yYkRCVzRzOFMzYzVOaHRNaXdyMnNkVEVvTjVzUnIvM3hEOTNFRTVoclFxSHJMRjR1WjFTNTVWYTljQW1xbjFQWW1VN2tBek80MndnUGd1WjNRSG5QOExxVWdyUDIrK0YrMG82Y24xZ000S3JBMXovZ2VkTmxNSGZiQnpMd2w1WVhYc0ZVTENIYXVEc1FyNFBMWjRRUVJ2b2ljclh5aEJSS2x2bzJ6Nkh5S01kUlNBM3AyVi9abFBFUkxpRVVDeGdqR1hyNC9PODJ4by9MZURLS2NZZGZMdXcwWGFHWDJSS01HQk5Yam9UYVI5K1hReEtpSzlLQWNVUmRVUXk5UjFWaXJaTGNDR0VRVXgydkhKUFNVWEhEMDdFQTBua0dTUE1EVDNHNmJPTjV6cEY5T2lDc2tUUDJGbml3ekljaFVUanRtbW1zUFdSV3JEemhxOHRYb0wzTWJIU2w0TUxTVm93YnVESnRDNnd3Vzcyb1hMQVNkUDJ6L053VTZxU2JaSnJYUDJ6a1IxaE1QNk80RW5qaVdWRUJ5aFpEb3VyQlMwemczNS85WEJsTkh6d09EV3dtb09ocXNlNGcwQmtORE5rQkdQZmhGSGl0WXlMZFI0MWQvMDR1Tnlsd0xnU2p1blB1RFJPTDBxSVlxaUNlNXJyMjBNd3pVbGVqNkhrK1FVVXlRSXJFbmNhMi9nM3hjRU9Ed0RQT2FjaEd2VEtERGdyNDFFODJ5RHdRQkk5aElCV25hVkVKQzNUS0ZwOXBOd1d5aUhxOEgxSm50OWNibGtqMEFwSXRXbUZkSkpHYXFMMDVSb2hUcTdPT1Bka1kwZ094bU81cDRxWTA4TmhxTVFIMmRMbVhTQ2h3VlpLRUMrcW5GVEJ0U0p3L1N3Y2V0K3Fvam5BS1BGRnJ6L09ZeVYyRis3YjhOOXlzOHdQWGZ6Z3g5aGlZZ0sxc05UZnlmcVp2YTcvV3FDajdIdWRqM3RUK2pOamlJQ0xTR0ZKMnJkN3Jabk1HcU9aNE9vaVdzN3p5RW1TNVgrSS9BMEdreThiZXhmNCtyTEwzZmNMdUtZOXdGdDNwc1dGQWsyUjhYZjc5RlFBZ2dZT2RSRWhFR3pIWXRiNXh0Q05DSzB6YW1VMlhXNVNIMnRJem1RemR6VDBybm15ek5sdk4yTGlHTkZzbGNuYUxHOXpWQjE5L09WdGFqY01VWlU4MWJZTitlcTloeDFoVTV2SzQ4ZWdzbUZNL01jUzJZSnR5K1lrV2F4Ymk4dWVsOTJ4c1pjL1NlbTdHaG1jdHdVT3VZcVpaVGFDT25WUVJoU3lGakVBNnNDRi9BVitkZGFBK2E2YVdnZDB1MEF0TE5kdFdYdlBPSmROa1Uva3hwNHJGMGp4TzYwcnQvUTBsaDYyc283TDMwS3JBeXM2RnYzUnF2SlFObFhaeHhYOHpaQUVnODg2RzFnbXF5cTg5YStveWNtMFZFczc2eHFENDMraEhiaVQxM3ZnWitob01pTVV3b0M5MDZFWTR5YlBhdkhabDhwa3p1L0t5VndSOWk2NXhHTGY1RXQ1TnVTbHMzektRdUd6MHBscnk2OFZSbWxhRE81MVUzL3FQNkUzbnhISjFvTERvZnhMczVYcGhCR3N5ZTgrVXFpRFpETVZZSmdBaFArNU0xVTA4QmdWZTdJWE9lNEI3MjZoWFBrR0FnaEQ2dFRaWkZtZHlMKzBMelpFRVpLNmVGQXkyeHF5cExIOGcvMmZsajFYZ0k5ZlVsblU2Tnc3eTByaHpMYTFGTzMyM1NINytJOG9PeVhxOXV6amVSeDByZ0h6Z3p4bGhSQzAzcE9hU1M3Zy9WWGphUHZnM0cvUzlRam42QTVyZmd5TnpZY3NUcGFqd2FoZlJXR0RqMDAwTTU3andyZjRNYnpuZnFMNENSeDdOcWVwalQ2d0trSUVRM2N3Z3ZPZ0VtRkJjZnMrQ0RxZEdYanZGRlJnemYvRnBXa1k4RDU3aUZxTWR4QitNUmEvVGtJZTRrclRmNm9sdEtyNkxtMzgvK0syV3hmQ0xNLzZqQUZjZWUxUEI0WHF0dGE5Rm9ZVDlScDBZRnhESnVwM041VU9sVnF3Tm13cHVFRDhERHVmRzU1R3haa2lHUms5Q2VPbVFXUE1Qc0RKemhsQ202MTNEVTQ5UndqRUp3YW5Na0N0VlBYTVlGdG1IMzdMR2QzQmYwRW1XSStXY2tvSmZqNWFsQ0VOK0xMYTRJQlN5U2h1b1M0MTl4Ykc3UVRYSml2TjhpelFqTmJPaXZ5NitjSzVOSzFqUEJvWVBUQmwyb2xIMVJKekJwQTc3MG5yUEdNY1RpRmMwTGRYcDlXcll4djlncitabGJpVElSa05JakY0aThrZ081Y0J6ZEdqaFRqaHdCMmVBUVNKc1Z6L0p6NG4wZlFIc0xWaGZyNUh4ZkpXalArMHVxQ3BGU3JScVByeFRaenBDSGN3SzdndVFENnlWWFZpQlpyV0VmMVpHdTJ4eDlRaUo3NlNFbnltZUNqU2VkV0xWWm8zQ2Zzb09uQmhPL1NGeUovVzVFZG1UMnhVd1RtZkRFSmNSNFdOREhTTHRaeHRJcng1U0ZqbEFZQnZscU56OU54Uzk0NkhYbE9UcVI2Q1pSZ2ttczlkcTNDRFQ5alA1NFBrRW9XeERsd0ZDbDlHaU13WElWWXEzR08rajNxRHFCLzUxb3NaaGVLcDZOMmFUNnRUdHVxWGRkT3ptR2gzRmdta01SdEx3Q2FSVmFDYWlrVUlxVzBTcDBlbnNDcmYwbEhMa3lscU5hcnV4b1p0QjJ1bzV5TkxPa1lvQklBR1lUdERrK3lqL2g4ZW9nQVo4SzUvdXdXczc4M2grL2hDeUdHajVIUkxQNmorVDFkOTVuU2NyZERnQk5jdStrenBZRzhGMnJBWHFzSFkycVpIY05MMEtDcU55Z0IvQ3RjV0ozL0VLaWFic3FQOStzZURyRUVJU1NOSVBidS9NZk42VFFuS08xbFpkZEZDbXhQZXgxVW5mMGpGd1huZXJsRzhUUllTZ21FWHR0LzdNbUVjY2ZuNmtZNkdKaWtMTzRsSzBqRWY2UWIwaUd6SkVaZEF6YWZETG5NeXB0dkhBMG9rUlhyRmk3WStkU25KU1N4V29RZzRYWHZ0eVcvTUFvUTUvZjQyZWh3dGtZQmVlOGtUdnh0R3lOckFMR3laK3ZMREYzRm95VzhFMnhldWRrb3ZXSld6WldMck9KVzM5TStiWW9GTHlQamVTSzJNbUwzaXZmekJodEVSdHFsNVdXMnJYWWhOQlNWS1dxZVBVdThhazZaYkdKdmxqNmVHeHBseUpDVXRtOG1LTzJmZG9KZnMyUzdDbHhQVGQzL28yaHhEak8vbmFZTWN6L3JZeDJQMk9DK0txWURUNGw4MTg2c0ZxWWdoSDNxZFltaVpzU0V6aGliOXcvSDJjSWsyUHJEY21OdUJxV0xiUVgzem56a2ZHdXk4cXg2TkcyU3BkdUxMdGdkeUc1WXI2NUZLZ3lINE5weDVhejJ6MkN4RWp1ZVlndDQ0UStOTDBnK0s2Z2Vkc0ppYUZWYWRYd2RST0JvRHlwc0dPRFNIaHhxc2R2WVVnL3BDcWlPMm12RnMzUks4azlmRHpiRWgvZThBd0dqTm5RTG53ZlhZZFRQRWVNZDU2ZXZzZGREb3hkR0YwUExKNXNBR2R0QlBSQVFBVFVjNlZPV0NBTENHa0JQYzlFTnlTbGxVbmNJMCszZjhzK05hdlJSVTRtOUpUbVVKQlF3bnBaaDZsa2w2TVVEL2k1aFdYWHBndUxBaXNzUmUxM2ltSzJPZkx5Rmh6WGgyKzFjb1Ezd3BMWnRzaGh1dGpEd2cvS1JNNkNnUDVsUkxQcUpIT3ZSOGFnRGJFcU0vNmRFVTU2cVk1V2h5ZXNwMUdWYnZOTVlmM25TOFUzSGg5T2o5THNqNDhKNmpMRnk0QXAveXhncXkwSHhtL2VHMXNFRllFRk5nakM2b0JWbXJKU0ZCSjBVM1dOand5UmdTUEx4R3V4enZPeG1rditiV2lZK0xGb3JRQkF2cUg3ZFFsVlFiQzQyM0Y2eUhzSDJ5VmpoRFdNMWxjUEY0VkFuanJKd0d1QWhHZGh5d2JXN1dHQTVoWm9zZG4wMjVzV3VtbmIrQlBMbE5mNk53OHFnbGNaYVlUeTd2NWlUejlNVDl5RUNoVDAwYlFiSkpHVDg5emp0cG1odU1MT2dzUU1QalVURkJSdTgrWk5QVENGd05IdVROc2VVdFhYWHhWZmc1V3VqL3pEMFpzYzJJb2xuTS9VaGJuUm1vaHRaZnJjUVJNUkt1MmJHckFFTWJYcmx4SWppMk16YktncGxvMUJjeTB3ZE1qZkY1UFNRTGgwQjVlb1FPYzk4dUZoWWJXcm9vM3Vkd0RONGt0WkoxakJDSW4vMW1GSm1tdFhyNEtFaG9SQktJUk9hdHgxOExmVEppaFBzWHRzSTd2aEZqOWFMYW1PSzByb2ZXbXlrYmM3ME5ESTBjcFpFeUlVMENxT2pnQ1JTNmp0eGNrcWlCVkxzTEU5b3RlYzltcE5EZTJlL0R0Y2hrVzdyWXZFangybUVxWXJ3OXN1Y2lWdmUrbStGWVZxaTBJZEdZa3k4VVpnWHVXUXAyd2ExNldjeW1IVUxjTXRaSG9nSnM4YzRyZFN2TzhNajJIZHNuQ2JvcG0rSCtyN3hoMnVGakNiVWtENXd0L2RlZWQyaG5NZlQ0ZHo3NXRXS3RSUUMwSzJxWlBMUFhCSU5SOWlLdVRTbGZCbEJZaE85bGFTK0E4S1hKOGNIRFhGKzlzem1ER0ROalY2VllLRUpEalJ3b0xhTFlGM1Bsd1VXRUVYNmtBVEg4aHBEZ3RLcVR5VFpmQ2RmcnFOYjVoc2lLLzBuMkxJMVN1MncyTGhkTG5zcVpJcTVYZUxGTzhXMTMxUnkyR0RPWFlUcnhZS2UrU1hDSzBPRzVsbTNDUEIrcWhoeDhmbFgweXl4cDQ5TDU5Tm12SXU1enJEZ2ZNek1VcUliUEpiZjQrd2ZHOTRZcGpYTi8wK1AwdEErMWlDQ042Z2xTSWJleWRrTnhZc0pvMFpxWjFuSVFSYjNIZURvU204S21FZGNkemt2cWdyTnVVUzlhb000TWliVk9Eek9KVmJsdUZ4TThRS1RiSDY4Y1hMR1NXM1ZpOUxrTjZXcW1BaWsvSy80S1M5bC8yVHpsbmJMa3hodWtUcUZXRDM2Wm4wQ0dyRHJNSzlidTc5M1VreUk0dHhKWVZBUVM3S1pmSWIwZ3dnbzYwWWtQZ0RyV0ZCWktPdW44U1VUMDJ2RmtGcVdlSTRjMW81M0RDenBWemcrS1BUNUhnMEZ4T1diZGVQNmc4Vll2K0VSNkF4L1JreG4zblBnaEFkUGtHeExDTUx6aytGdjlLc1dFZlhPb3djcFZKUHIrVUd4dHFNb2hGaXpEMmNac3FpYkZjTVdyQWp2WjE0bjNsOEUzQk5ZKzN2UVovWStZem5kRFVNckpxOTJhOWRWMkZLb2J5UEl6Yk1VUDZBR25zYVYwWlRxMTVNUmd5NVFtSHhjSmIwQ0R2RFg4OU1mcFBpMVFDK3RBRnRmdFVZdkVKd21TM29MYWY0dnVoVVYrai9SQm9aZnF4QU9KYWpGRWlSdGk1dW5pS0NpcUJoRHI4QktPd2hTVWwvd3N1S2ZZaVdQdkY5UTNCRkIxY1Y3cTI2dVlPWVcxUjhta3lNb0dMUGY4MUE2RlNJR0VTU3QrbTdTQVRsemlwNndGd0c0RzgydTFmUkxRNnBIcjFISnFKTkpKbFN3ZGxKeHNrckwvL1VZcmVwK0hnWThTYXVocGNBZlJQeFNmZkRLM2JTQjlaaXJubDYwUFY5VGZyMVFDRzA5TnFqWjJKR0gxckt5c2lEVE1oc2Z2S0VCRGRtaWIwOHJEekdoQktIR1NEQnI1NFlMM2cvQkdXcUVBRlo5UGd2TTJQUzdsbmJDcVdYQnh3blo4S1ZaN3lyT05lMUZPeWQ2R0h4ekRJMGc3SnlKcjdCMlN3dXVDeXh6dkJSMWU5aENGTm00dGU3bWY1WmFlZWJmNzFma0VpOUtnK2NkU1JaaHk0eWhsRFd6dGcycG1mMW02b1JEL3pKNytobndxU2prOXlUQitZTDJDbDBFNjRIUTRVZ1c4YkNiNzBJNWpWVi9Denk3SHNRUndFOHJSNGhlNisxZnIyNE9DdFhXMkFXNnJKZnE0NGpEVnFlL2x6cjdzZFFGNENLaVRuT1lvMjd2RGpFUXNWUUs3bGtocUM2b2s2cFd1TzlYWEV5VXZ2NWFLa1ZLME9tTTkzMEhyUExKWWdVbnJQZkFZMnJWRkRkeFZDaDcwa3JYcW1SeTFYLzMycStuN2dZb1VvMVlRVGtHSlNPZ1pXbXFjZllqTE42dXhwYVI3VU9zQ3dkRkVmVnZNNzZ1aG9DS0VPL3dBMUE3YjJZZlFTTkJWYkpFeWltSDd3V3NySkVES0FDZ3N4ci9mTHNMVWJkM1BrQmZ1TGIxMFBPUDlnR1QxWUtNR2ZjdDFJbFR4a0NLUDR1RzBwamxyTTNsUDlxcjE1UUR5THlnTXlVOFBlY1lmTmExVU5OZXp0REduSUZMRFJremZLbVlramFkZzRpbklPUTRSdThCYWJRZTVPQzQvVUtOcGlheEhsSW82S29FeFRDcEtyNkUrZEJtczdlZ3dWNmErQ3lCanFvMmFuMlRyekJBSExMMUtjc05HMzRHWDB3OFQ5c014RFhNZUFnTkdsbG4zOXByYUhlNllvVWhLVFArb0hZRXEwdmV3WWZRZVhLdmRlMFBHd0xNa3RFbkVab2lxcmg0SVF2VDRxRnNaL0RicTVub1lNeUNSeDMwdm1kbm40andWRmplbklOY21yNFY3U0Jtb3ZNZm5haGJSZU1qekUyUFMrd2lIa1BGUGhQdjg4ODJkNlBwUWkvZ2gzK3Fid1c3am10YTlrYVo0TXB6eEUweDFMdnNvdDlTRjl6VTIwSCtySGpIcDljdEcrZ2MxaFdwWFloSDNGWGthUmhRdXpxV201RWQ5YitodmtXUFBUeFh3YjF5U1dlSGptZytqRytSRzhTNzVTM0h0SGJSczFwMmRONlF4Zy9qU3B3RUdvb2Qwd3hKREFONy9adkxUSm4rdXRmUGV1RzNza29YVFFCd1R0ODhJWnpDVTVTMkZnMTMxMmJCbUt5Ui9uMkhLK2QrREljdzlCMjQxcmh0TG1wNE10aWhCcVhSQ010VWtNV1hiaFg5bUxvcUhSY1dNN1ZrRkthQ2VrRVEvYWZJcFFtK0dxQ3hSeUwrQVBENUZMWUxEWjF1bkN2bzhnMlYzbHBwRWdNdjVza2N3VVJRbCtXcXpteUpWV0d5d29GVFEyUzkwWjMxd0pSK2orR29uU3NseTV4Q2FSTk1saU9VcDJPU0RXaXpyd1pUVXpRNE4zWjVhTmFsVkdkQi90Y0NjZi9mbytabkVZZzlQcFFRbm1nUlRpZEtEbVZOU3cxSGJwOWx4MmNaY01Jako3b0srRk8vS1p0OXZpRW1oTHdEeGtNR1d4a05xOS93OEhadm1OblpNZS9WSm9KWWFaM3I1TjJUdDY2Z1g4QXJWNXhxTzdyYTBINFhrQWYzZ2ptbHdKbzUxajZoM1BIZVl4ZTBiNUt5K2hvYWpCSVBYaFdjelhnc2tBZmtGQ0NIVi8yYWJ1OE1BSUdrdmFnMU9kd3hVazgzUTVGd2FLZVlka0ljdUJZSTNtRDZoWXhsaGNFYUJDcXBkL2FCdDFzNnlhQ3plckV3dVVvc2FaR2Q2ekdvZ0dseW9XWDZqK0dUd2xTK2E2alFwanZvNFZyeEJmTVpRL2RMdzhXSmgyRjE2Q3J5YWMwK3RBdGNZNEorTVlPY3o0ME51emVOeVhDZUVuSC9aaUdlTzE1NVk5V3RrSExsZHUzamc0TmpkclRoaHpXZUJMRWdZbVJTNFlSanhjZ0EvRVZtUUc4ZFRvSmhDaldjTExQTEdJcTZHN2Q5M055azg4VE5NV1BhSmlpK2NaNHVYamVPVmUzRXJQMEJvL3N5bmZ2UnZkaXFNNEhBVGxrSTFGZWpXVkNNeVJQSm9TaUp0Rjk1QzhGQWR2UXNWazB1U3R5MFNvSU5RRHVtYkxoTUFsZTVNbHdQaVIxNkdCOXJXelk5Y01lWlNkT0VZdHNQVzJFa3VoVkxqU2g1ZmRTajAveGNSVTdjTEw4cmRyeEpZZHYvWTEwVWYxYWZxNXBHUkQyb2I3TSt2ZmtHU2JweitVVEp6ZGp6OUNLTktYY3hHaTFjOHFneEVXTXQyY0dNcVVtUnZQYUxiK3NlTlVXMVpzalFxRHFocXlBMW9QRFBmcWQ5SDVQQkZPdnR5Y0dHckVsUkxQUFp0VGRDYWZpSHc0VXlnZlFpS21HcTJTem8vNnhRejFvVDkvb0NRWFZzenVsWDd5SE92bWtLd251RG5WcVExV2dEeFV4Q2puRHJkMnVSdUpmVTc3dlJXQTQwa24rWXRPOWhhb3BWKzc5TDNoV09MbUszYmJrTmRwZHQxTFhNQkxYczRFWG4wSXdwNVNGZWNtRnAwWFhRa2lzSUFPKzZEZzB1VFRXbDFySE1EL2NFSW81WEsxdlI0amRRNExrc1lOeFhVaDd4Z21wQVpJYXhHODNqUkFSbHRsa3VhK1ZjdStaQ3Z1Q3NTZ2g4YUZQSDB4RFJaTFp3b0UxbmJSVFFBbEZvN01mdTJZV2V5d1hEd3E2dlpBZno3bXZqVmdQNGdhVlRjU3Z0Y0xQZFRHWFUzQkJ5SS9Ibi9nVFpUKzN3M0ZPVmw5WWtzamVXYmlCSmp4QncrS1hMaXBjNllwbC9GbGl5KzlML0hKVUpZOHRrNlJqZjRhaE80b3BPMktsWFNBd3hSWTNLTGloRnQ4NFp4Wml2RVlOT2hHTzI0UTJnR1ZPeWl1alNCTE9GM05hQ2xMYVZvOGQ0aUVGVjh4WE5PZ3YxYlFxS2hFcjZZdmdpRG1WcUlkUU96QVlCSTloZ0VKM3czV0RrNnBmVXlKTDJqSEt0NHhaMHBTbGFxeDFteVN5OWI5Q2hydFZuMlQ1U3pXa3Z5MXh3YmErTjV2Y3llK1ZSWG42bk14dUVYd2tOMk9kcll3QWtna0RiNEFhdHZMMUQrOU1yQWFWNUsyeVd4ek9xZ0Yza0tpandBbms1M1hrWGNuT3pzMW1zZndvemF6MzJteHhlRkwrOGlxL1dkSzV6ZGE5RTZxR0xBL0ZadnJ6ZzUwcUxYRmU5bW9wRys4N3J4ZnpLOEMzMktqbkg1OG5acUxObGUxMThJTHM3bGpKU3JYZGZVK2RHN1hnWlE3YUVoRm5kZmJ0K1VjeGpneXFKcGpENzM2KzY2T1pTOU5Rd1I1VDJqdi9KNDVocnZWRGl0YzNnWXJhVldaeXZzeDV1NHR4aHVUZzFiU1oyN21QYlppakNUSWhIWGp5T3p0NFZRc1hXVzNrSEdPb09hajI0cWZjTmRGdE03VVNGeUNUNGdFcjE2UG5DWTdhZ290cGdvWXdIVXN5VDFWWXA2KzJma25kRmMxdlg5Q2d1TU1zNzVzN2JneUoxbkcxRFZ3Tk1sNk1DZC93NFdxRVM1czRTelBrb1pXN2g4RVNMeDEwZWF1TG1zMGJYTURYZFZ4SEhZLzZ5MWxzcDVJVEZGTnBuRlV2OGJLVVBUNGhtclhlaWdaQVRmc1YyL0kvUVd5OTFudkZvKzdHRk9Oc2c5ZVd2eHoxNlUvRG1lNjJ1MEhudURuRWpwTjNhbDJMNlpuclV0VElsRkIxRUoyV0tIcmFXQUdLZTYrb2VJa0VWeDE4NWhBZHV1VnNya053MUY3TXEzdmtSVTB0VXE1SjZ6MUdaQ2RVaHNSUkNBbEM3UEc3UHU0K0prUnNCZDhLTDJKK1pDc0FqTGN2eVVnTjJiS3dYeUpFOE1BYmN6WVpKVC9mOEpTRGFHM3R4YThualAvU25aRWxNNFptd3dGSkhneEhaMkszSHo2R2RCeEIxYzl1QkczOGJwdFRHblBjRnN4L09kdDdIU01QTVhOL01OWG5PRStaNnhzdTg0QjM1ZVBiOWhYc3pZMjhvZ3puVmJoL296Q2tUWDIzeHJCQitob0wrektPVGZrV1BoMG1qbUhKbTF2R3JyZmFoaTQveGk0Q2JzL0NTSEdTYlh4ZTM3NVlKZmFZOUpOS2NCSURPRmhxWjdzR2hNS2taR3dIRXk5UUZuT0dpVjU0c2V4U3NRUyttTWVFWWZEWmtIL1l0eG9mTzFub3p2T0h0c2ZvOEdDaTdLb200TDNmYTBwTjJGTzl6dlRYVDMyakZCZDdNWTJkK2l1dWVGdldFMTg0bEJFSURSOVd4RnNxbVpqc1hNV3JEQ0NZcmtwUVluQXprRzEyZWdBV3UwdGh0czRkZVA3MCtJQjEyQ1ZkYjIweUx3bkppbHY4bUhwcVVBa2pGUWsxdnc0QlFJS2QyRkdKUHlsVXMxM21KK2p5aFZ5LzJDVERGUS9ieHBHelFTektDTGhmclpUVUpPRDd6dnhBaklHZnZqMmpvRFB0ZTFyVkVTZ2dkVmlFK2l3NDVCT0NTMDVuYnkyell1VTFvZ1pwdHFZbXlMaVgzVUpKR0NkNFdtcFJoNzRWNSt3ekF3Q3FsTHZhZ2x6T1ZXSXh3Z3FENmFlNk4xMnpzQ0JyMkVHckltVUtJbmJCdUhueEFlcklIcTRLS2F0M080UkZWN1ZFVFZTQjhzQm9qNXBtN3FPQ1VQaVJueUJUeHNSM1BpWXV6OXE0bVFkeWUvTEVrU0VQNC96blVrR2kyNnlNNzdIdW5oSk1OQmpwdlRjbUMwcXN2bVJzejRmQU5oMU9qYldNQ1l3Yzh5US9DWDJIZDNtSFRPcTBBam1UN1JkRHo2TURXVDJ3c0gybGRuTEl4emxTZU04ODdVZ3VJL2ZVTHg5TUl3dEkvWmpvUmZLSVJLbHJGaG1wOU5PUnQ4SXowYVJBYmxhNTRyaVNzTGx1TnkzcTc4dFFvSDYvWjlFR0lOdExZQm1KYUl2M0Viak1waG1ETld6RjRLUHFCNlFqOCtkcHVTTXVOd0VabnVwdFU3RHR2dkhRaVRuY0lzMyt2cUFIbjljY3BpWGRjTnVjRGc3dktLS3pPSUFlM0FHVFhVbS8wMVluTVhXZHNVMzZaYno4eU9TOXJMNEhEK0FzNk5BWXZHYUN2WnJ2akZPczFXZzRSVWsvMEFjWjhMWlV0TXN1cHI2djdWbk9icURmOERMbG1QdS90SDYxTlpKWXlVT2hrRlpycmNRSm5sOU5LL09UeDdmZkZvRFhSeE5FakVYSXlVUXYxcUtRSXRMUm1RK0VvTjRacHhUb1pFTmV0ZS9NU1RYOENMU3JRQ1JUQ2xPakVNMzF6NUw2V2RGa0tLV3lMeVplWHhKOUVySnRjZlQwSHNIZ3BpTnRoRFNySjB2dU9hZEJGd2xjWTNyS0VYOUk1ZHlkT3g4VFNxc0hRQ1dPYitjZVFzMlczMDUwQnNDbFBTU3R1Q2hTaXVDVXM0emZkaHgvMnRVWWZUVUtSNnlUTHNrcmgxaFYvQ1RxaVBraVh1aW5KS0MwTE1tWTlxS01KaXo1TjBPSHNVZGdkVXNuekhwWXFUaVVwd09rQTJNb3Eza1RnYjNDQnhhSGVJNXVQYm1ZVzVDTkx4VExxckFHOW5qaEkwTTh3ZTlZZ3VXQUFUeDBhSFBMb3BVaHdMczcxZHVxYzl4MmdpMUJVMzBzOHQ3NG9aSjFSNHNlOStLRUNhWllBR1ZkZXBUNTlVSGRwREoyaHNLVkNQZEFNYjRCTEJFRFlXakVwT0k3QWUwWEoydDZ3TGh0aGN0MWUrSG5GSHlQSjZIMVY5VTBkb09UL3BEQ1htajV4OFVZaExTMTVzWjM1YUFZZWtTdDAwK0hUMzdNL1Y2aFdpZ1A3M1EvVTVWbGZpYUhzQUxlSmtyQXJKbXdSMTlWNklVNWdtVzI4SmhDVzBPeEtBVnJ3Z2dIa09JSHVIWnRjcSt4NWM0VU1uNFBYQXhsL0h4WXowY3ZLTGtlRGZNeWQySUlVS1k1MkdEYTBLa1BxN1JwQ0NEQlJJbDVrdSs0azl0UEZCSER6UzdHQjFKUEVtMmZWcnpRejczd3hwRVAyY3BSQ0lyYjZOYVdsZUtzMkg5M2FyWTdNMTBUU1JwMVhXMDVtZU4xM3pLaHlNbzY0K0trWUdHNVN0OWxPbHkrcUJoQUtkK2s4VTM3TlVzZnRYcENDU2UyNVVyMFF3ZHk2TDBuNFZOMXI4M2FZU244dzFrSEszL0pDSDZFaWdGbjFlVjRuc0FVWDZoQkJJd3Myc0l1SjJMTE9tWkFjTUU4eVBvdFpqSWIyWXJRalhva1djMXgwSTVYVWRQMGNXVTdXUnN6WnZLQnVUVTF0Smc0alBhZHUxYkRIMTJhdHZwd3BnUTY1SUpHRkxwMHhLbW9sSVRzZGs0TUZ3dUZIRXJMNmN0SE5GaFBrcmZHMzhoakk4Tkd3YmQrV1NiLzBqMGp5VVczR2htKzJXdTVDWVFaN3BhSkI0Y3FoaVEwK1BoM3VncDcrbStZKzFjUTd4aGlrS2p3SlY4TGVDYXdYQ2p2RjZrYVYrNzlXQ21uWVZjSG5SZXlzU3VkQTM4RkdZWFpvT055NTZueTVzcUNxbktRN1VnbGFXUjAweUk2VmY4MTBhVW50RHhJbll3dU5RQUpNbXczd1hYeVprTWMybjdpR1lTUDZxc2Rzak1PdkpJa2RXZHlvUURoa294UWRLazZMWUp5clo3ZkNEQk12RFlVc1FjdjhOT0l1bWRNaEdFVlVHUmptb3ZqMG5FQWdjbHJaa3ZrMldIQ1g3OTErd2Zrc0h4NUJnYjlPYWgzMkk4ZnUxd1BmT3FWNU4xRkkvUU1KSWFhbWMrbHJla2RMelF5RUFEYW5jczBOZXFQc2pLMmx2aFhMdktlTzJLN2JQQzFlb3dxTW1mSmFNcTNoZWhmOG5TWjI4Vm1FbklQN1BFNldqRUhxWEYxaU01SnhFaThlc0VmVEdLQ3RmdjJ3SnhPNEdYT3k4WVJDTjFqcXg1dDkvRXNzV1gzZWpMS2tqU1JFZDg2c0xyR0RiSXlIM0Q5b2NzN2Q0eVB5c0lodXc2Y0xrWjFFd1VMdjhveWpJbHJCSFo2b2YwazlPMjdsKzlsMjR5aThwUFdwRzl0QTRQb2tYSWRuc1VnL1JqWDU3dncveFNHdXRET1dWUVQyY0M5VWp1SW5Sd3RKcjhhNGJhTG8xVDNTL28vaFdHcUVTOWxpbXVVWERjQ3JtU2FIL2EwZy8zM3FhMW5HdG1EUzExb2lsM2MxNUFQTU9pVkExeXY2S2hrQjhSU2hxZkRnMUhTUi9lRldWcVFMRldwMDhYNjlIQjRQUFlhQjI4bGFpMkJabU9sUUtrWVYrZVZsOUEzSVIvNWw2SUtmNHBvdVVudGxjd0FGQ1l0VHMwMzduVnIxeUh6R2E2N2Zaci9Qa0FmekMvY3k3VjVCaXpzbVhMVHQ5K0hTRWc4ZWk2aUNpVVVFKzdyWWg2b1hOL0ZyWERpS0FGK0pXNFFWN21NT0NSOUt3QVZYeHNBZ0ZJcERLdGRhV3l3VXFvQ3RJMWh5ZStiZWVhU0ZsNzVtbUxONDNaTWI3QWpvaW5DZ05GUkppRVZxRG54ZmREWUlCU2VXb2Fpek52d0JGQVRCeEhRV1MzUmNmTHhFdGpVd3FHNTNQL2R6KzJCbEVBaDhSVWhmYkNvakxtS1k1dFQ2ejV1blZrbUdjMWlNWUdnMHRRQk03Y00wai9Bcm4vQzh6M3NmaGFYazlOcTlvSVVvVUFRelJVTDdSQjJBek9Zb25CbWtDYTdhdFdab28zanc2cWhtdXNPZk1RTGx2eG9sbkttN2plMGNtOVoyNXlTV0oweGh1N3dzMjA3eElpNlVta014NEd0NVRmTkRhV21xUzErNXJyRlpCSmYvTjhydjY5anZDYmNwMTZXL1dVeTVRK2ZoelNSUnpiOTNIa1NiNkdCVmVCd0ZkU25jZy84SEVKTTQ4VXdFdDJMMWIrS1VQemxCb3hlL0RENThtY3crTkpMRFJNRGE1aWJqMjNQY2tMN0NyTVdOK0x0ZThaUTM3aE5LU1NPMGl5Yjl3eW8vdEpudkRCRjgzbWJnUFVkbXF3SUtLemg3WjE3QmdyTU90QjA3MHB0cjVsQm5nNlB3cE42WTZWcmN0OWxPV2wyRGlTZDBMT2lsRGgwTkdlYjRWZXIrQ24yeHU0WCt6aEs0VDRuMUlSVk92R2Jxa0tUZ3JaL1ZUWlFob0NMMUNINDJyUE03TWFVUmxRdG41L09HY0J4SHdFOXczQVUzOGRrYTZpc2tqMUlQeFFIMjR3Rkp4U0NyQ3BrY1JQaDlpVXlBREZJV2RIVWZwMjEzMjNsSjkvdnF0Mm5pMmEvVGhRU3VZU1dmZy9SMUgxc3JGeC8wcmtqS09zYnN1RlM0bFRRZ3cwODErNlc3eTlWMWpDcUx6dTIwcHAwS0hiQ2d4M2JZcFlCOTBYMWZDSG03cytrTEEwTk9SQlNTaWNQRk43QWJIcURISnBhTmtWSWtDTjUrYzlQZGhyWDF0VmxlQjFOUmI2ZC9hcTBnaGh1TnVwRlpSQ3ZjaUZyc1l3V3hVeVJLWVRIWDBtUnUrdXlHZmxtVXllYjBRbklreXJuRUNHbTlOVlAxdkxESHVmY1FtL2VPY29BRGJyMkg0R1JrNDRZbU4wRThSWjBsbGlDTk85dURaclNIbHRTM3RRU2FDV3JQc2hyczlsYnU2M0lKb09xT00xK05uTytEYXpqYVRNVkhhanpCdHg3eGdrVjMyMThBcjRkQXkzZUZhRk4wNVd5YU5mNEZTd0l6Y3VaRlhFd3NhVjg2ZmpVeDA3K2QvTThFZW5lKzFQa2pxMjQvdm1EVVVlOUpKTEhsMmoydVNEbjhITjdHYzZ5UWlEOERpVlo3RmNtSmw1RFFObk80RVlDVmpEM0F6bytCdXJpM3hxKy9RL0NPYkdGVG5YNjFrOFIvY09QeElVd2FkalFrVUFGY0pqSDNna1Njekg4eDV6OHdkak10bGdyYnJ1c0o4UXZhY3B3cVloQ1Vhb0RzNGtjakFScjI3RUR2THNjYzMzMzQ3L2E2SktMc2xKa05ueG9UUElqQTg1Y1V3Z0hXMW9DaWtlQmFiRHZyOGtNZnZjcEJKRXF5bWRtdFkvUzRkaXUvYkVjKzRBbHVCdFJlZGdxaXlTTU1JWVVwdVBuS3BFcTRmWkxLU0IrdkozWkRNN0p5ckZiMHVtTTBpUWpPRnhzOEpnY2VseWJFeENoMEh1NHIranBmZjZsSCsybkhWdmVHRFFSUUN5bjBwQS9uVWhSOHhuTXpBWGdKRE9VT3c5TnRCVldVb2JQSlFmOWNUcE9kRW5hL1ZOMHJtZDV5Yy9nZlBUZlFJTjlNNXBIQTF3RDlGcFBuUGJTb0hhVjZrOTRmdlNqMTUxaXdlVERpTE1lQXQySS9iNkMvZElXdkVUemVGNWIxaU41c01acFNxOVJxRVhaQ21wMXd1L3lNYzU2M0piak5yOWVBVDBuR0lvWEZERUZPT2lwajNaM3d0Ukg5UEd6dHBVWG9iempvbmFSWGc0RjQzT0hwWWxGQTdLU0NPbTJpYjNKdWxMK1lMeTEvOHZKYkNvSXZIY3NsNWtrZkFqa0lzNkJ3aUZUSXdpMlYwMU5TWFRCWDJRbyt3UDBKRkQ1cTFYQ0ZWYUwyaUFGUS9FWkpSS2RwcnhNb1M5cFJXeUFHeVVHQlJxOHhsTXZ5WFA0ZTRXZXFYVTFESDUzTld4NmNiYm1MelVxUDVpbVZSU20wc3VPRmRlZ2ZnQnVORWJWYXNkMUl5ZDJvVXBXOXNBWlprbWt1NTRhUmZxQkNRUTlDZ0RyVE5FYUJ2WDlUYUk0WTNsdW42NlJMQnpvWnZhVzJWRzNDdlRqZGVOSDlmUjYwc25BcWc0YnRZSHpJcy84QmlKaEdJa3JmV0ZTdHZOUHlKNEhFbVRFeWNlSUlrQXVaOWlsZkJvL1dleDVHRFFkL0FGTXY4VjdTcUt3MjdnQWNYTmhpRzZ0ejhOK0Y3TG1CS24rM3BuTThKdy93TUxJQ1FCaWJ0Uk1KZ3gybXFpTlRWY0FPK3FSa3kxTUllNmlmQzljR2NXOWhncGtsOGduMHVGNjNKU01iUEJ1ZS9QZEdoN0VzaHAyOC9XTHRPUVFjOTdUUHh3L3ZiL0pVZmdDQ3JtS3ZMOTc5RVlrR1hoSW03RVAwaWtxS0UrZkRITTUxLzNkc0t5NndKdTFTdU9ubVRQK3hTOERPUTliRmlTN1J0aytpSWowRDh2dE1lZmYvajRUY1k2VUNtOGFOa1pVRFNtZ2NNTW9ldWI1VWM4T1V2ZGd2eFp2RGRIb1Y3aGY0V3VjVEY2V1pEZGUxMnhkc3FaUjE2WXdYcUEvRFAydzJJdXhaVE8zMExDV3N0QlhDQjdCUnVjZ0krZmd3YkpoRFZnV2F2cUxHTDZSUno4S3kvUlVrb1cxYWc4alplVW9WcVhLSUp3ZWRFb2I5VlNHR3RSTTc0aHFTaHRKT3dyUkRabVNlU2cwTTdoVUh6VlhHWTduVHlkZmdKaFI4eHozNHNMaVFLczEwc3E0Y1RsQVA2T1JtR1N1ZlF1N2g2a2dUYnF4aDU5YnptdmZsYmY2NHpkR1JjR1FrcVdVdnFLZUd6anYyYXVXRlRZRFFJSFFaWFlPRTJFeE9QUExZemZ6SCtnMlNMV3JCL2paQlA4SEN0ZWRUU0xjeDBqdkJsWU4xS0cwS25ndTN3eTE5QnRtSU5HOG1zaUV1QU9kVk9LZmkxV2dqRkpPekhaYUQ3eFZPS3Q4R3Z1YjZHN2U1bzZOeExpRVczT2hUQzFRQytZVGhWUGE1bGQ1SjhRNEVuRzF4YlNhL3RpYzZlR2p2cjk1aFZxNzRCZ3R1TFgvT3daQnJVeURITVhlWWlhL2ZJUDVyYWpmQSsrVm5BL3ZaeHl0VHU1WmIwaEtXQlorcE9NZkYvT25rdGs1eHoyL3pwYXAza1QrN0g3Q1dnMmxsa1ByRTBtRnhEZXJpUzNZekF3SWJsOFVjaFBnYVdGWWIzaFpUOVBTdnoreDRrb0hpTllGdWNTbk8yTHJZemFSRTd5c1NzWC9aTzJIMHVhcXI1eVdHcEdCUVIwckNkdTlSMXBtejhsNy95Z1FwRGFNeUU0b1hkL0hRZmhQaGVkcHJMSzYvbjNydWVtVnFNbm5mdkxrWHppNStDN3hnd0lKRVVSWkdKSGVxbWkzVFQrMnBaYkhLRjFqRlQ4ZjNiREhra2J4aWJ2WkdZd2VYVzNTZGVweG1hV2k0NGNlbFRHMzdGZWpSbCt4MzFZYnluOTZKY3R0cUdlZmdRejlVeHdlR0JtcGJvMXhSVExlejIxYWtCM3BIYjBSQVpOTWpsOUJid3laUU1YNklyL1psWnNaOVBQWnFuUTNvZGJmRFU4V3l4OTJQR2tHMno2Uk92NjVOWXF5bll6d25MSCtYZ1RNVHlKNllGS0FWakphczVxZmtJMDhZRVJCZHZUdkFkVmJUVDBkT2Vtb0lJR0xobXMxdTFCVXd2amwySEZ3ZlVjdmNtT0R1S3J5VzVrM2l3eEV5Z0d2QVNoc0psYmRxcXpxaWZCVW5TNmJqNGlFbVQ4Q2ovL0d1Sms1N1FuSnpxazE1L0V2Z1d4Ymt3TmlpSXFiWEdQa2RaOGlIQVlpYTJDUGtheDNYNy9TamdSenFNOFpxN1ByT3BkeEpWMjVzRzdKRXUrNExSUGRrbE9TaU95OS9saDZSc21sb0FHQnFpM21HTHY0QTlWcXRMUXVnWlpNa09aNExNZWhIbmVpYm8xZXZRZVRsY2w4T2J3ZVBrQ3R0bU1ZNC8wb1ZQUTc4dW9SblgzYnJhN3JObFRaUDhKakM2bHAzZFg3VGpDQVdKU3pXdGhndGx4MDQxRVphcGtkL3hleXpLK2YrWk8vVFJaQkhSVXkwR2QwZ05lMVN2Y1paSkI4aUJIdFNjVlRVckFKaXlSSC9uNmFyQzZsN21BSWc5REc4V0l4NnhMQ01vdGsyeldiNW1PNFNNUFlsYU80Qjh3Q3RzNjdJRVlMUnQxRGNCYTJzL3p3NEVDcm8zM1htRXB0T0dmTU5QRFNEUnZzRW91TzBuQXowdXNya3ZUd090Tm1aSHRYZmg2WmtWM3NVK0VFdTBZYklEQmNha0owMDJWQkVYRFpXM3FLSWRDZGJaQllLRHR3Y1dPWEVzMHIxYURERUJtdHExM1NtUjJYdUxsRWJETFdhR2NOVTFjNjZtQU4zOVBZRm1mZFphbzN0N3JmZ2c0TGVGRi9OTEd5blkrbU1FMEtydmlKT1dVY2ZnaFNLMVR0VE5XS3kvTEVqd0hTYVE4bVYxdmozRjhtQ29aRVJFNXd6Z241bnhkTXNJOVdoMlJYUmhpaTNCRjNTZEQxdUFueUJLTXJabTBJS2RhbzlqSHdtanJHdmM2QXR0TStBZmRLaDAvdEFRT3plM2p3eVBUMVJtMDhoQmRCbFpvMnhKQjNUZWdlV1IwUFVUSTJpZ1BIRTVCNVpKNUVKeDM5VFR2dXV5b3ZrelhGY1htajJDNVRrcU9VRmVCdEFncXVFcS90WWdUblZaZmtFSkMyM21wb2hEdkV0RmM4M3lCYmRlRzd5MHI4MTVVMjc4bG5ReDAwQkxWc2pEak1kc3U3UGZsRjQxek9NczVnVkVoUUp0KzZDTTc4U1hQbTM5ckhoTVdQM2RxVVBmT1FtNnFKaEN0S2Z2SGpKZzZxeWlodE9adHhIeGhGdk1Wa3Y3WFhsVTR5aXAyMnBNRE42clBOZzJxNDhsa0dGV1ZlM3RmeXlFR0RkM0p1MmZwaWJySFVSSE9FZ3BzVFoyZGdxWFh5U1RacVZHdXZ1c04xWm5ZUlZpSXQ1OEVJa0RLREZER0JhZElHR3I2MGd2OFVKeVpVTThvVFBPU3grNitRYkM3ZHJMU054cjRKVlRFNjNmVzVqY3F2N2d3VjZISkk0dEd5QUdBb3kzSm1vUVk5NkZlczdUdVNxdHlwR2FDMThPcm1EZDY4MVJ4U1JyK1A4d2UrQytKMlZLdnd3QmsrbVpkazJPM1BTMk04NkpYY3FzbDJBWHEySFlZOHc4dW1JL3FkOWZIcHRicVI5Qk0zN3VrWXB4NVRIcEMwZDBaaG9MN0J2eW5jUnAvNktoMlV4YlJXU1NacVlHUVdtUGZwL25kckJSSFRlbnZsbWRqdUZzamErY0RWSlprVDhxR1FReW9zNUs0MW1uN1dobllrL28rSVliTjFTbE9ObjJKaWJLZTdWOE5taldBaCt6YlNPRm5LQXNyMVEvUEJmWkxsdUhzanVvL2dWdldLV0M0N05wQUttYS9YS2NsSjQ0U2twbDhuVUJTcXVveTVQMTRjOFpkbmc4Wm1yZVVNRk1xclJXWXJKYlh6VlJISy9qTU01UjdwbWpRYkZCa0c2UDBrK2hqd0JHOUlNZzExNkFmb0p3Skgxdkc3MXBsYWcrekZnZXl0d2tEWW5kd29MeERyZE5KejV5R2hYZ0hwU2o2THF3RUllbVUrNlJkT09iOTh5RHhUZkZJajZ4WUdsZk9aeU83ZlZnU3BDWnVYczFCRUh1bXpqY3ZmcW1wQnBENmRVMUF4eUkzbDdXNVVhQXd0cmFHSWU0V0QwTm5uNk9IYlUwV3Nmcm5pdlZzeEVIUk9wMTJPbSt1OUIra3kzcXg4WVNkbUZFYTlPc3Nkemx3cjlGTTQ4dkM1WjdSRCtqNmVsczJuS1N1UVpWbjNldWNvUDNSV0V3R3piVHc0Z056aVdmRWM5cGZkL3c5aUdsQm1VZWlRSGhONGJSdklQNWx1c2lpTmVveW9ldjhoU1FFSmNHcFpEeFBPOWFyM3lKNXQva0NXeGNLbDl2N2Q4MDA1WnpNR09uT3UvR1o2YTR4d3R3Y1l4WlkvMmRGbkRuVThVSGU3UHJjQ3VGYm84YmZuUWRaQVdEV3BmV3Y4dU1saWpVaEplSkd6OWpwd25FWVJ0a2J5VWJjbTJqaVFOOHVWc3J1bGpKK29zRXdiVEVQTkZ1cXo0Yk1VYXYzdW10QXZSa3JMMG02WDViemdXMng1bUpiYWEzZTBHbHpNNUFMa1kxcm1EM0dFdlNYUllBVXl2YzNiVW0yOU5SSGl5N0VuZCtncDNOYnVNNzBINjFKSEhYeWR1NitzYVFUN0FHVEVWTWpJdGg0M0NiSXJDQThpYWx4eHhkVUdpUkRMZWJmNnM2U3V4Z25ieEw0RlM2cThnZm45WisxTnk5TDd3S0FmTFpMcDJScXFVZEpTSVVlRDhxMzR4QWNNeHREYTZHRlNQOS84VzlXWWJUNnIrcCtSbVVJaU05azVpYUJSRHRVVGdiVjJwejIwakJqYk9jd0lVWVllZzh2TTBRTEw3OTdFU0hxZXdQVUhtL0taR0xJenhLdHNKSXZjM29GWmNWcnRkVyt5WlQ1eEtOd3JnWUMzUnlBU2hyV2tRVFdIbWU5U1AwQlFkRkExdDREdHExVkdVcGVma2dvUzlxSi9ZNm1TbzJvakFvWFhncG9nZUw2K2N3OHJ2cEM3Q2Y2YklNSkl0UTAwUExZVEd5VjExWGRCZDQ0ajlMcTR3SEUyVVB1eUlqb2JMK1NjY1JZZk9DWElZTjVQelQ0UERuZGoxQ2x1SkRGeno2TklXdE95Ry9udHpQUEZnam1CYmZaR0pPQnVEb04vMlM4Ym9hZ3hadHZwWXdwRm5yb011eGJQL0lEdVJBVDNiUmtvY2puVTExWVR2OFAvM3hNL3piazZ6K294Y05EQ2pCdzJ1MEdoTjJ5N2FJSDExa2IxSzBLZU9sVXNCb2tzMHlrK2dTUmxYa2lTTVBrZzlkSlNPNHFzWmtTVnRUTnhCRWxQc09GbW5qRGxXTUJKMUUrSE9jR1JqY0ZWQ3VBQnVjSFV4bFB4aVJsQzR0UjVNZ3h4UndVVFdvNTFySFJxZ2ZmUG85ZGFITTlPU0s5U2ZBbDZLWWYrbVY0QWdQMkxQamJ5OXZWWHFYQ0oreUpkR29VaGJlN1FiM3V6Z3FOcS9jUjRXcE9jb0ZBZGI2VVArUFhmaDhpRUFSY1FIUCthV3VmaktibXRnMGNSR0tUL3dVcEZJUW5NcDNMZDNyNWsyTGQ5Z2UxN2RIb3IyZ1ltRlRTRm4rb0dFYVMwQ0Q4c0pUbWVjZzFNeTltN056WDB6SFpmWkFQV0VYemVVM1kzZzBDeWt0c0lYeXowT1Fua3MxQTFSbmJUUXRTajIzb3BWWkZ2MndvRkR1d21XeExMdmtWWmtXeEpYRFUwWUZUMHBMTGZqR25TMW00a2xxakdMdUpOendpUnpVNGFTajhwcUx3TGtSNDIvdFlHbEk5ZHdVZkplNDI1Z09wVUQ0VW9EaVR3TTFSVmFvMmREV242OVNEZm80VFdlY3NZSk5IMnFNUGYyRmNqNTQ4bkdFd2cyeUxBcXBRd1M2SkE4dXliVjlNMWtRMlVHb3JaVU1FMldEYlY1ckFZUTkzWFJNNDZqTWJCQWhaTG1nR2RFZENibHRNTjFSQ1JTQ2o1YkhuanVudXhTOUVCU0ttd3B0bkd2d1V6TlgxcnBoc1VMVkIyWUZGZ0g4SGQxUVFBdkVBdEFndUZFL201N3R5Tnh3dUZZdGdmck1Yek9RTU5TdTNFaWlJRkUzclNYbGd5VHZjTHFDY2t5WGt0UjZvZGxtdEhrNW5ocjVzVXI1bHU0ZGdFYTVGbk9kcVFPVGt0TlFhUWhUaWRLRHg5M1lndTY5Y0NBRlYwQStMK1dSV1pWVjkxczRhRTd4Z1ZVTGhmY2VPeUsrbWhGajlUbkV5aE5hSHRhaTBNVVd2SEd5dWNlR0tCMVI3M2dOUHpUMXVtVmhQR2pwUmZUR3drUVZXSHpPQ0FiQjk1ekhwT0ZlR1pOWEp4djJjT203eVRZY3dnL1VnaXZnaGduMVNzNlQzZVI3Nlo2a1ZmUTh3bGNqYllHVGErckZTY2FQallGYTJBejdZMXFFb1ErWmRxaURIMVVXZUVuWUlOS0h4K1AzZm9lTU9iRUs2emkxUGJiM1dRRXpsR2Q4eXBlV2lpV3Q4RVRiMkFoc29CSHZvQmc0Wm5zMks5Q0NTZllJR25iTDFTNUU3Q3EzWFE3NXZ4b3Y0SW94T1h1Wk41dzRSOVRqaVh2OEZlT1RzWmltM2pxTmttblZ3TXk4WUVPcHJKS28rdHRrVlRNT3ErUVRFTXpESUpYTzFDQUF0aGYzZlQ1dUtKWk00RmZPZmFMQVBhOXIxNjRZRzAxOU1VKzhwaHZqdVM1di9BQUt0ZWU3QXBoRkZGZHJEMnRoR2U0UlB0TVFTOEVLbzBYTW5QSG9idVVLTnJUbFg3M2tlYmg0Qy9icGRVZDEvSjdERWFDRWFkeEVZdmlacEsrOGJiK2xyQWhVMVFTNWlPYS9LRGlndlR0Z25xUkFwRUVnU29DRWNtbE5aelIvN01VaEI0bnlpeGN0TVVmWVptWGZ0Wit2TXZZR0tiVkFrNUtMZW5nVlRsb0U5RnBieVVia0poa0Uxd25PSzBtVmxWMHM1WkRJbWU0UnBQK1NyOXRVejF5QUhZU2YyQnk1Yk9ZRFZqZ3NrNllmSmRiSU91V3h1SGdsdHk0RkVMZzhnN2Z2Y1VEdUNFdWtlMWJYcUlxYW1JbitGMEFsTzNQUTN2TGc5UFhkQTJpNXJNcjVEdHhLM01RYzNSU25rYkJ3R29iUldjdlovZDJNOEZDWTJydW54SFRmT3ZrY3hHdm9PcTIyUFdySnNYVnRsYUhTcjk2a1Rvczl0NC95N0tGb2U2cVQxTW4zYjdlUWVHRjZGNUxrYjMra0ZTNGlDN2tqUlB4aW5jTnZqZXM1YlQwNGIrdk9ORzBJZVk5UE9kelVGSThpaXZEVWMwblc0TnVVeDdNbGpqOXREN1Z1N1pKanJjY2grYlVuUFlMSVpkTWN1RXJNVnI5ZVdZVTZSS0d2azM4UURxY1RvOHRLWnRqZE1DMDlGNS85QU5jWDBhQy9KZGVCNHVwbVo1eWxvWVdydjZDZG5LY2JHNzJoc3lCS0xXNHVKOWt4WnA4WVZzZWVIR2g5eFppTVE3VzlCdS9hU1pEbHBzaGRGbXZkVks1cVVoUGo1T1Y4MDNKZklTcTdTaUZGZTZrbkxtMUlOTUlnbVhiSnJLZEhmSjc2Wk10a1A0V1BjZ3pOYkFwV1hoT0ppTmRYMm1UMzBIeTh1RTBEWXlDV3F5M2lkQ1hTSkZHV2hRMUNSN0pXdllaeXdiaXh4aWFRVEw2NEQya0VBdFNGTlpMYWZxUkY5WXpmS1R1TlVFMmxMNk9yNGhQTEZwTldPRzJXQk40bGpDYmNDUkZLM2RINmNta1pnajJoY0cwZVlMdXo5L2tlV0xzNjJUb3VrazJOTlJ3blpBNkYzRjR1UDYzWm5yZDdEWEdsZXhHV3F5VnBoQmdoM0Z0b09NemVYdjdPd1ZEeUh6YW1aQmxmQ0tSdGZzeWJyRXJlVE1EcXpzVjFWODVhOW9kNGtEUTlqTU9OaVIvNEdtM3EzdVhOek9lTUsyMGJxTUlqTE9UbWJDYUM4YjdJU05wYWtyV1pFcnkyajZ5QVo4RVNQVWFxYzU3U3pHRFNvZk9KRXBwdklqdm9FMnNCTjhUNGpqNituTTJDd1Yxb1VjS3NhRTBQWHBpVmhTRy8wL1lDQWNMQThYaE5aT3lpQlBPc2NzVk5uWUlNejJwWTYrcmROUm44amEwSEdNZWo5UXM0V3lrcGZxRkFKaGIzbDN3NzZTeGc0d1kydmtXaktQYkozSERqWisxaDlCeFdGTTZIdXNqZDJPYmhteDBQNzFZeVd6R2FBK25WRElKYzEzOFRmMUpUR3FqbVpIK3BFMTcxVmRUSVVaMjJaVlZSc1lHdkEzS0YxeVVhT09pRm1SSDZnSVZTeWdPcUdiV21DYmtlOVJrOUJaMnJud0FKNWRSNzlIU2x4bUVqcG1PaFM2Q2dtQlJoVXNCMXNIQjZDT2JTdjZQeDl0eWtZZ1ZkRTl3aXBINU5HcDEzNjNrOGtqM0o4WEI2NERNV1RRb3l0QXM3VmVidU9Gckw5Y2VvQW81cldNWkhST3Q3ZjJYOUcxdzEyd0dtemFMWEpUSE9lTExKMncwQ1FuQ0htcW5mNmdLVUVVbjkzV0ZRRVk3Vy9teGs4NEVkVWgwcE5IS21uMnZObnlEZm5uQUJuYm5Ib3JQOTRFNmRrMXlCRWJHMW5JdEFwaWt6WkxtZStyaVprYWdjVVExelhvTWZZdVdHbUlLdzlhNFp1K0xQWjJydGRuZWFsNHRjUmJoUjBBTDI2TUczVVlaaWhvYXNscGpCVVF2cWFHakFvMkY5b3RqSnVkMlNleVpBWTRtbzR4WFFrZlFKdlRWd2hBQlV3RVlPMUlWQld1b0VjNVpYem4zV3RkRVBzUVRUQVpTdEF5VW84a1pQZURkeGNpcHJhR01YRCtPYmFjdEhsZ1JKcGdvODhwL2FmMm9PbUtJcEFPTUZmRkxUbnFQczZTYlhRdkFmMnZJMmlMMWUrR2U5WnYraXVUa0xrRkRDZ3FOQXA1ZG9GWkxTMzh0OHVoR0J5MlREY1dSTnJmcCszNHJYTFVZUElTTVUxRkcvdmVXdys0aVY4ZDhkK2lsTlBIU0RDR0l5M2FkTmZyU3N1VXZ1Y08ra3l6V1lhdmpuL2QzbnZlUXFCV0FnQW9ITHlyS0JZUXdrVjlzNnRlWlN0Z0ZLS1FqZEtHUitkbndMSTNhRTZrYk9OMG9URUR1S1ZibXFSNXNVcWdXMzZnQ2VWdXBsMW5LRkIzd2V0VHkwN3NnTytNKytHSTVaclYyYSt6TmRHaUI2alhpckxOWDZsKzlqZFlhdFdkQU8yRnhBLzlTMHBYbngyOVJTWlBoUHdOL2hiYk1KTHFiMEZrc2NYWlEveVFlVlhXZWxGTFBYVGl1TnlFUkRuWDF5R21zajAyK0lRejlJa0Z1b3JyTkVVUitDZ0JmNHFSODlpbnpuODV3c1NhYUVSTlkwUmFnUy9MTHYrNmlWTll1cGh0d2R4UExIanh4U1BlS0dCd3RjMFY3UkVjUENQb2ZvYzM0encyRW1oZlZvNXFQcW5oa2FNTE96UTltc1dLM09GY21Ndm1kZEI5NDVvbkZXeVFKWkp2aDRKZ1ZOL3FOeHBxZGNNbWk5ZlhxaGMxQUkrNTI5c3JxeHFWV3NuVVRacFlMbXRsOTRVU0RHRm5GQ0hEQkk3TVB5QlBHNE1uWWQ5Qm9GTGlsdTlFSG82UDVIZ0NQWlNsTXlDb25meTVZRVd6dnp3LzNJRVV1WTRDZ1RRMUcyM0VteGNHNXNJT21mSllCTURPYVd5S3RDNTFobzBja1FBdjAxaUl1STZMdjhtNWhuRFdwREJnQ200K0pRckdHaWdtWjhFT1ozWDg5a2FmSTZSQ3NTZ05adWtDUi9oSUllZG1ldVh3WVMxR2lDWEpqZTN2a2gyTXFJRjc3ZWg0Rkg5dlFLM0VkY1g2VGNDMnc1dGVuR1E3WWtIWGZxdEplVk1JbHlwK0hLMENVNFJGalNvYkk1K0NpSDVJZklGMTlTVUR0L0hQSm40VjR4UjVpZ2hFb3ZGQkZ2NVNkYTM1SUJCcU9xRmorcjd5cVFxWUhKK3NiUm9Ba1FwSkpDcE1TcHk2eHVURXp0NGViRk9iT055bmlNdURLYmtQZmxXaTBvVlVnM1MycEl5aXVZUk5MenE5UGQ2Y1g4Q2N4TzRMZTNEb3RXQURCdEVYemlkY0hKZDNPRG5KWkRBYzZ2cW5MWXpyUEp2LzMrbkF1SlM0TExNNnNUYU13cG81U0tXTGhGYjFiSzNOOTBUR1VEZmxKS3hGSThSZVprNlUrUFJxRm1PVVZjWGNGK1liU1Vwb0JxaUNsd0R3VzRuaURLNjV1LytXMTBaVkJvR0RaVGVrcnZvWFVsYk1RQzM5OXdtaisxQ0ZSNHFiWE5hNEcwWS9nOTc0WVpZZXVRN2ZsZ3E3Y3JmcVhPajR3RGo3UEF2UWdNakJiRGxhOEsyU3VEUk1xR05LM1dwT2ExV3NBWGlhYWtKV0NWbWM5OXZrM1ROMGxFUWJTVUtNd3ovQmV1QXFLU3Y0STBpdSs1VkpsWDJkRENOVFl6UVFNTU1tV0VtOHJ4bEQ4R2hVaW9GT2plZTBERzI0YS9ocnFKeUVrNkdXSWMyc0JUTGZ5b2xiMkFwUmd2dzc3Y3hoQ2FQSHBLeElvek9lOW0yQUxXZDluRW5xbXpKVENFeUUwTHMveGN6cVhBenArRER3WWZ2V1d1ZUwxL3EzTHU1NWlJWGs2dGgycUhUUm9rQWtPeGZRRXVyL3VRME1tSGMyK0IyeXBVK1dBVlc1eCsxQURyR0U4Uko5c3R0YUdNSHVZVFV3aSt0TmxVVzRUTzZWSzFGc2xnM0Y2ZzdCcEF5NjRVM0tIS2xkYUtMUVphWlNUQTRvc3pyZWRiMHNlS0ZwUGpnVXhJTGo4RmwydDJLZEl1SW5BK25vYmdKYXB3dFRINlF6cUUwMVdvRkpIQ3ZVUVdkT0ZyK1M5MVZOOTRzNHYxc3NtUjBlb29NQkNZWGNSNVBIQWZmbXdFdHNYcUZwQXpuRFVrT1liQW9kYzVYUk5CK0tOdGxZbTl4SW5YdlBpWTlMVHZGNmxUbmJpZEUwN1Uwa2tJcTZBRy9FMmJjKzJtZkliZXE5N0VFSTAvWklMU1lCMnhwSlQwcUxUeGlBd213cTJqbW8xQW9pTnVqRzNCd2FIWjl3SGNVVzN0ZFF5ZkRXNzdFcUU4WVFpMUUrTnR3WHUrNTNNOXArSU4yMy9SVDJJVGZyVG84UFd5Um1uNGtzVTZXWEdoVWwwY296ZlVJSUhSNUtPTmI0NzBxRENOb1k3K2tvcE1kSm1RSTRtSGRTc2xlN0lISkxVVlNRN1JNa2JyVlAzcHJmQ3dhWEV5UUgycWtJVE4xWllUbU4yM1ZGZmNOaUJtRlh3eEpXMWFDTlQ2Wjc2ajFTTmM2U3RrV2dyeWtIMTgrSDN3TFdqUmN1cllFR25SbE5jSzZMV1gvWHJSeVNpYTQxV2JRT1NMKzEyUndCTll4dXRQSkRBalQrOVFOanVhVmRxc2I4NTZ3b2VuMXdlS1JkcDkyR1Q2VkJqK3JZM1VEanpVVldKelhXcFQxaWE5MmFPMDUwQ200OUtPYWlTUWhGUVVjVkdsTWVzQncyYWJyQVM5Z24zWDBzNG5BVzNVTklqT080Y2NKR09lby90WEZvaXZSUGdNbktjdmdyOWFqeFNNaEplNkhWdGpKNXVEWmpmSGw5U2hCQXdaUGk2aU5sbW5NSVlFbEJLdDNmQVZpZnlnYkgybFd0Vy9tYUt2a0hQbUtZMTVFUE5ZejdIUTVRSnh1WnNUT0xnSndiMm05MDI0ZVFkbGJJajBWQWR6dDJ3MzcyUmZNNmgyL0t4ZFAzWlRFNzNXMFh5NWRyRy9YTzhQNWRrQVVhbHhLTk5zbGxmclBiZERCMmozVE9tWW8rYk1NVU5wYnhqMVdFWUY1MXBEUWZQVG5LVXkxU3JrMHJmOHZDV1JsYzdtYncwUkJvV3JJa2Qya0txK0hBVlBSUlhlNllNNTArNUNGbmhZTVFiQ3pxK3pST2NpK050VVVvMXozV0tRRHJGQU9weC82NU5IQ2loRGova2ZCM1hYOGdlK3RHa2Z2VnZVTGtpblBneWRJc0szVW9IL0hQL05HTzl1azkyNzFjVjhEMmN4VnBKZFZsdlZPRDR2a1FHRnpmVmxWQlY3WDRzZCtmUGEvQU8xbG9LTXRXaE9jRXFGNWtaSjlsUHltT1k5WTJmRGV4bHJDZWxWZXVJTFhsVFF2N0pkSGw0WnlaYWV1QmJVUkYvb2ZJMktBNkFiZEFFcEdoVGtlbFQvQmlNUmhrdnkra0RWcXFGWUE4Z00vblJQdmlnSHJjSVR0V3Y1VkRRbllzMFVjT1dRVHBhMUZ2VHlHNWl6aUM5NDlsZm9wU2k4WkpUUlhsQUJxMVZBSWhBenRLNlpnV2dzcGtmeUZwL1dwbGptd210SVU1S2lsOWJWWlZkWTBNK1QyTm5SUFJQZ004bm1hdG1GR0JxdGE4UUNTbmt5V0xDL2hRV1hCd3pIdDVuc1JROEdKNkdBNW9QcW84SGlmSE9XVnJ3VWJHSkRDTFBqRHlicU5ob05vUHpjN3hMa1ZqbENLVWE3QzROcFVoNUFTTDBYcFRSaWRKbzV6eWNUYWE4NWRsYTcvTlVwaDhOcVpnNytvMkdqNEhUVVk5cHl1ajU3QlYxMHNBalRreEZ2Z2JZam1VOXpnU2RjRDBPSS9BMWdsZXk1NndJT3NoS2YxcFlDYkdTRWQrUU11Zm1ESnE3NENtb1ZOZzlhcTV2eGNKNVlKQksyTlF4dU9qc0RRRHByYzZFVTFuaVdJNDBPck93cTViTllIenB0NG5UVVRRNXdPc2NqcGJmVzN2ZHRwYk9TeXlaT2FTWXFYR1BBVEdUU1hRSjFnNG1GSHhDOVZrTkdxUy9paU01Yy9WR1U5RUtxWEdTQmxJbnIzSUdKLytYR2lUMmdqU0RCTnNXdnBPMkdjdXFyVzZJRWRoanpyM2wvVnVET0Z3UmFGUy94VDRIUE1adXBEdFdHM05wYmJwQ1NiZjZvUkhkQXpTNnl6TGlkbWkxa1k0WHAvRjZFMklUc3JreUhibnQrV1N0dmtWb3FYZnR1S3lnN3V6SVNHd253VGtlNDQrNVNsM1RraWwzcmVGaW16Z1plTEY3UWR6VWdoZXoyVERWWTJmYVBERG45TklZZHE4VWFIN0VnMnVvMURyL1dycThkaEJscW5nL2NzYk5JQU93TnJpYnhRWi9FZzFUYWs2Mm9leEVOdDNpMnRjL3JKVG9OQkFsTkR5bWpJakVZK1ptT0JIT0x2VGRCb29tQnpYSWNOS1lNYTBQV0JKODlrMEJ1VGdKdUtaclZqY0s3Z25Ca3pMOUxTZDRNNWRlbWVWNkJtV0tEeGxmeDRQVC9CT2g0clIrbUtKZ09HRVZGVW1aZno5QTdTSTc0SFQxV2NyYnlIUWVhT01iaWFBT1hneUo0UXJKbTJ4MjJ0T3dHcmUzaVNPNytMcnJqL0JkVmVuYTlvNXdvRExueSs3WjFZZ0dURldvYWFTWWJTUWJNRzg3YVpnSnNqRmdEeW9QTnBObldUWVZ3eXByYjlIMmRJRTA5bFozMmpKQnNVUnFDWEJ4SmhXNWtBZGlHTGgxenBhSGs1SUpVSWVEcll2ZlUrMXBtZUxXUlFtc2dwZUNNUysyMHBick10d3ptalVFZG1WcXRFZkpDWjdqajVQOFlGU3VabEw0Q2lxRWtkZlI3ZHRTZUU1YnpyOTM2VnUwUStCbnV4T1QvNVVXRXZWdjdud2NWRURwR2l3R09jVnZ1MW53ekluZlFkUmsyOVI0S1JyNk9ucFo5cGI5dFh6MkpPVE1rMEd5YkFIU1JKYkg1eXlobitYTG53ZGZLbENyREpYdDhVMkhnNW42M0gxZnIvTXJ1UUd2MFZNVkJ5cTNBNUg0RzZ4SlQrOWpQcWlvNVkxZkU1ZkdBSXRDWEoyeURPOXhwby9tT3lrcm83NDZGQ0tFbktIVklhQzBwT2RTaHViSFZQVVFmZFQzUCtkeHBWR3IxT2cwbUxrY09jeTJFaFFGUGNyeEY3QWFSaVpBYWp3a0tQVEtHS2UxTFhBWFpkalpiNjhCVnMwVFQ0Tlp0bzNuZkQ1MWZVWW10OWVSUmdyemhmQmg0SFM2OGZ6enlVcDVhOTNvS0t0ZUdzWm9RakxlWG1rZWxNQ3hVdDJMR0xHcklVZGpidTlVWU9ndnE1Z3FNblo1N0hzNE05Vmo1YjJDTWl1eDB0MFE4ejZvanVhN3pTbmVKM0FxMys5OURmTU4xQS9KTUVsNWdMWnZRQ1VRRm5ZSmhYLzBWWHlZbFcxYmJ3ODNiWmNkYXdQVXdpK1hQN1ZyamVOc2lKQmVKbWlGVnEwYlozbzUrSVcrbDVRdWo4elZWYW9FWjA3RUdMUTcxcllDWHZpakZVMlZRZXZvR0ZKdjJZbnJrN0NGQWZ1N2Q1VS9kc1RXdDJZOVZuTm45OTVyN1ZuS0wvRTB3S0ZWRTdRY3NDeEdXb1ByUjZsZko1YW1CcS95Z3lLSm5uOEQ3RzdtS3BhWWtFNG5BTnorcjBPYWU5RXA4OFRZTmpXcGErU0czZzJXcmtndzFrMkZnOTVCaEYyN3BXNkkwOHVxT0J2WjZENEh2R3MrOENhR3JYM1FLV3FzUG9ucjNobHdRT3h2bWhXN2FvdWNveUdqOVE4M28reXFKTFBxbVVhTnNCRmJYSEhnQUNhRlcvdkFiWXNJajN3QWN6VGxpOUcxUER5azRpQWlWNUNLalJmM2pPZ2NkYTRYaXpwS2pQTWJ2d0xNTHRvSzhXY3VwZFhnc0pPV3YxRmlVc1RvcCtUOTN1emI1b0UwZ2VGN1hPZ21LcEphQ05yYlRQMTdPc0d6VUFZWlZTSVhzbEJnc1h3K0dkR3RkZE1xKzFpeHBaNVVGbmlHMkpXNyttUUpYMzBQaFlmZTJmdkRDOG1KVnI5c1lHYlkraVI4UzU3L1hZOEhFcDdEWVdBblBkd1JwcklRYXFoT0VneUFzSDJJUFArb1RWTzhIRHQwQ0ZjTGl5RXhpc2xGRU85OUw3dWZnVVJ4amVFZXFoWW1vWHB1bDNFYXJkOEpqbEZSWDJFb3pLVnN1S2FzNWVSbzVqL0I5OCtrQ202K1JMdnl0OU9aaUppMEJPaGxCeWdpV2FuZVprdWs2QUtKWGZHdzFZYTYrekxTOUFMaVBML2s0dTlVbk5uU3hGL1pUNGJSQ2toUjg5cCsyRkRrQmVtZ0JWRDdLbHZMVmNKWHFxZEkvMEdWN25ZRnB3VDFYV0FQZHFrYzcyeE1HRmx3dTFTMS9SQXhKdkN3TEhPZnNQaU5EbU5mVitKMW9kQlFQOUNsMHlWV1ltOVVKMmd4cVlkNHozZnpaWEYvOEszN1p4VlovdzdmRzVxYVpqTjVEYjZVUkZZOEUyekxoRVN4TEZuY0F0NGhxMFBGZ0ZyT0JPUEFkbE5GWlRIeDU1dWNNNkhVUHh4YmRQZ1dhYzRHYnBwd3BQcWVJZjhINlFxSnJOYytiWm9TY2VCcVIxUTArVkFjemw5TDlLZkVLTnd1U2REdFhYV2crSGpTQkxOOSt4bDBJU2lxRjNwS3puTk9RRU9jWXJEd3p6SzdUQlJjTTJ2VlVzS0RRMXRnRGp4ZTdaZVhMci9IZHZ5RFBHS3FzSEFEWnIwOHhUdXF5ZHNGTjd3ZGNXMGc3UEQvT1RnenljeWZzOWN0YWFlNzhON2ZBSVNWM0lvNHNGdDk0dmdnWVloaUN6UENqcXVCbVA4ZjQ1eVhieUUxdnc1L3RBWTVGWFdZV2lCY1RmVEpZbk52QWtPYXhna2o0TjFSVXBHcTQrSXVHb0NVRCt3NVhHYjJ5aHlnUHg5djcrZ1NsRmdNKzlUTGFGbEFDUG5PRGtHS3IvT0xBMDhpcC9nQ255bE5DSVYrL3pSUktOTjlpV2kxZk5QY1dQWnlQVmVLQTh4ZTRUWDRGRGVpeDBsV2JkcWV2cStlQVN4NGNWS05MTVhLSEFqYWZwSUlqM1FINWFKQ0VPaUQxNGg1L0VoN2g1U0hUQ3hLNFA1anIyemI5d3FDZVl6T0xqTm81ajlnVGVCV3NPekNXMjN0Uk9BZzc2Y2lCV3BuODZKcXlwSnQzTXhKYUJXdXJvdVgzSFlOQVN5ZHFvdEQrWXlZQWtkbS80b3puMlpxZkVZcm5rbVZ3UFB2b0E2VFpGK2k2d2FWdlgzSU15akZETzF0TzA0U3hBM09ZUU9UQkRpTHhEQnRkY09Ic2dNYXFKR2tYN2NNWGJQdkMyRmJJL2ZYcjZ6Sjhrai9OZmdsQVIzcC9PcGRQWU9UVXJqK1RLSldrWEZlWGJQSlBRWlVFbWg3RXlPYWU2cXdOeVU2c3pjdzRFcFo0dnI5OEt6aSt6WE9nUjN1bzBWU3hqWjR2N0c3ZWtDTGtEZ3VyM0JRUmI2akovUGJyY3l3MUczNFpURlZMRDJjQndYTUozSlBKZmdtK0g2M1gvVmlMSVM4THFIUmRMNmJmSDJoK1dsR3VTVWlsVzhsYldPTERnV0FoS1Y0dGJDNThxZEpVbmd3enJUT3owVU1sT0xMOWxVSUxjTWc3dy9HWHFERmhEc1JwVnNtRFZucExZMXQ0MU9KQmhiMkMyMnFpcEZXQWg3by90STVoeXRadXpUcnhwdVdoUWJhTXFBcFFOZkdrZ0ZLbXUxSldWSkVCY3YySFlRM2toUkdyVitKK0t1SVBBYk9mKzJ3aG5kcDZXMXJzWXZYVWIvZ3FOdi9CVkZLTFlnTHlhdGM5SStCUWlSTlVuWkFWbU5FcmlFb0F6bHMyY2lkbFFtK2k2Y2wrMHpxcXdwZXdXN0ZxYVhQbGZYWG1DRFQva1U3T285cG1wTG9UL2dBN1hmU216WmNrNUZYTWRhNFVRNlRkaEZNdXhLYUFvK1BEVXpEYlJ3NmtMdHZRWXNuY3YvQkYvdk5Xb0lvamFZNVBOUUNTb1pRcUU2UFk1Zy9SSlo5cVJiQnBvWkpJTEJWSmN4dEpKeGRYVzFtdFMwZUNuSlVuL1JmZzZ3MFRWUWpxbjVoQWlNeW1wcTR2SkhrNUxVOStIUm80TnMrc1R2RC9vYVEwN2NWV3VwYUxsMDQ0VnZuaXFSOFg3dUNDaURoQkU4YVRpVlFqSk5uWEtjbmhRc3ZMZjhBV2p5WktyaXBsajhBRERiQWRlemsyV0tFVDVaL0tPZnpId2paT3JvLzhMTUd0ZisxMFp1QUxEK2w0YVE1N1VPcFRBTjFzb0NXUE9BWDI5Kzd1MHVwdFhvWWo0VVI5UjRuYTFpNC9ZbENZeTQyWkRxSlB6a3Z6OVptMFVRc3VvVVppZzB4aUhqVW1WRng3WCtoT25NVUxuYyswSk0ybmJNQmNVbm9uSTM1OUVGV2tjTGdhQXlJRXVTUnN3eWY5YTVMMFMyYWNPalQzSG9wK2hHL0d5aGdZdzlqVWdSN0JQcENDZU5sS05ZV1FHL3JIL01Ic1d1UFRnaURTZ3orallpQi9yQ1BlNjQzVFRlSlN0Y2Q3VyszeG1vVHFscitMMHlFdFVrZk9jUVd0L3hyZWJLWWg0ZXIxZEJjNzhHN2NIRUYvU1dGRzdmTHJBbHhDb0lGekFpLzVuT0lNZlBIeUxMUHF1RWZWVzZERndqVmJ0ano1R1FFYzU4WGZZRVdVNnhpTkFNSHQ2N0FodWVuUnhhV2tGejE1VzhaQmFVTU8zM1ZGSE1JZHJDb0Vjd2ZhZlU0bTh3VVlQRHFaVzlFUmNsZzBRTzVnK0t4dWd4UUxBeGV4V2FSWFp5UXVkRzUvWngyV25TU3lHRjdNYk5uam5rK2lkOWxDZzlDMXZMUHdHNmhZQSt4OXQ1ZzZ0MkIwbmpYaC8xMHZkWDM0Z1Exdlk0NXlCWHRnV084dFFNZ0lEVW1oN2VPRnBBSUx6RjBPUUpZR2ZtYnA4aUNtcjhqK1p4cDlUYzNWNC9xYzRuNk1mZHVuMnVmaEhkNGNjMTcycFIwY3hPRDh0TzE4U1RwdTJqTk5zUFpvYkdrNEc3NkpYMDhXL3lVUC9LNVV1N3VUUUozeXdCK2lxeCsxQ25rWExZZmtNdHN1a0xvY3BXS0MzclkzUTUzNkRDeWkxM0tiWTAwTjZmTlpWekhwZ0VFbWVhQjJiQ3BzR3JuWHdqM1pVZHFUSUJLQkNHVUx4YzkrbmdhelJiWCthVjJCcDZwdDJ0ZHpTV0FnbFJhb0lmZ0t4cjd4UjBRUldsaHZqVk9GRE1YNUxaaE95cVNVTHVYSUhWT0lER3FOcWc4d05CWlVjRWIvSE9xR0I5YW1QNmNJeEFJRGNEZUtqeVhvOTVWbWFDWjdEOHZSaTdRRGJWYmdVbkdIS2RTNE50ME9NOEx4bUs0RWVjS1E5UklraURqUXk1MnhWL2dqNWhWZkJpYWhQa1BRRUsvRGN0S2NBVUdKOVhPMVdSNFdkQjErU1Bya2VtVWEzRUZ0TG5sQUZKTjBYMFhkTUJTSHhUQXdKMXlnYnB2TTRnQnFrVmhYdE9nbEFESDU2eU1tMGZiWmNEZzJyd2l3WmpnNjZ5S2ZDaDl4cWZaeHJSWUxOWnRsUnlxS2tQM2hCRVUwT2F4bmtrck1aVVVHYlJsQTliNXZJcnE5d25GYUt2Vy9XVXFzcUxxWHExZExTN0dKOG8yRkMrMExBZWtCaEtEY1EveW1ka3NvREpKTTB4VEFQVWlIaFhXdUpZYlg3eVFmN2NoVHZhOFc1UU54WFc5eGdreFBrTHFjUS9CamlaUWozRE5DdEo2V1hiN1JkaXI2bWN3SkMvYmFCRjhVZURVU1ZpY3VxbUxUY2hTa1hqMTc1ak02T0wreFNma2paZE9YMGVMSUk0YzdVNGljUUtGSjR4NnUyb3VybmFXL3Zac3F5SFNVWDdwdUx4dVFyd3RHY1lYTUMwemd2NGNQc0pVMk9neDhGRDFxUzY5R1hXcEZHV3FSQ2NCUUsrOWtoL1RKd08xaXZDbG5veFFvUFhzTXlFTDF1czAyTWNhbit3SXFCL2ZLSkZkbVhrWWtKM1A0bnovTitFMkorK1JsejcwNXpZcVdDNXRJWHdtNko1aFVaSUVadi9ZS01uemFSdzlRM29zSDVMa1FpcE53Mkp6WC9kK09EcURUaUE4ZG1WdzdiZmg0ZnVsVWFFSnJyWWFFdTFOTE9nL2sxWXJwb3htUG5VUnRoQ1lOZXJBdzZldnBZM3RoM2ZMQ3puaHUwb1ZEWTZFbTJhb1NsMHVFT2tXSXVoOG83Uk9kellkTFdSaVRtQ3FIZzVveDhLWjJJMWh2ak5pY0kzRCtXaFVPMW9wK2VZeE91OUpOZnIyQnRxOHJEd1pWcFV0amhQcDQrS1ppMkJNV2dlOG5uN0xLRkRvcFZERWlBUUdOUU96YnBVMFhxNHRXaWswSFVhNXRTaXpMQjlqb043ZWZudmdUMU9nTGg2SElieW1rRDVVYUhlMU5MTDk1d1A4NEVlME83R1RFVklFSVY1MldBcktKaUlQNEtKZHgwTE1YZ1Z0UU9ibldNV3dUeGlPYzl4N1RHT1ZTOHRFOGwrbW5OMm9ZVzYzZ1pBdFJRbDd2UjBHUUNEY296Ym8ydVFXU09Gd2R5NFlib2thcDhRMENua2l2Tjkvbjd4emk2OGxFTmVyLzYxVnRSdTU3ZnlOTk5PbWJaTmN3SDFCRlZPWFhKSWxzbzNWcEZhanVvNnJrWnhzSUpDL3p4YnRTWVZrVWdsakQwZ2R3eVRxTlFxUlhFcm5LVWVUTEs0YUNCcGtIK3UySXVEMlRxNmt0S1JRMW1JTDJhNno2ODdIRG9YbXBTaUNEN3lYdDlIMjJEZ3NqWVZvSW5XUEF6R1hZZjlrZTFKVGpSY3BJelRHaTFCT0JTSkNyRS9xVWNEYk5aYUJWSU1HNVNIdWtLYWRYdEMvMk5NeDA3RDZDMzA1d2Q2Zk9vazlCUjhPYmk4OEF0aW4vSVBmMHY4djZkdWI3VklwTnZlLzJJdnR6RFhrS1RMK2YraFZ6NGxXZDRYa2trUFc2RlpNNVhBRE1SeDY2V1pXN1UySk1TclljWmJPeWNmWjJKb0ZnYnhUTGR6YlJtKzd0Vk9RbDIvZUdhemkvNnRDaXNxZDFsUHZBVWhacG8yaHFVcHJtQmhYMWNleUFRZmdpZjZOQTB2akpUbHVyUisrT1RnMTF4aC9odzkvK0NWYThuQnhvL2JoSzMyQXhOdTR6YUtwWHFxTW40NXlyZDJwTDh3UEdBeVl1dEhYWWN3cmJ2c1QrcUJCc0FMVHpVQW5YNHhXajBsMmFUYVFWRnBQR3FYY1dBZUNkVlplL29tT1Y4cnFrRnBCSVRkbTZGaXoveU9DcVBLRDhVOHVGQ21zeWs3VjZORUJ0R3FoQXcycC9nQ1dyWXh5bWFBOUxIaHZxVi9GNWR3RXpwRUQ2Ly9aNndscGl1SU8vcUZRY3ZLck0yYVFEZHdxaDBCbVVGbU9jYnh6ZmhwNVJMdXZlTk1odzh3cjlxb2Y3Wm4vK0Nid21qbkNwWXFPZ3RFSkt3d3pQNDA5ZlJScjREcXlCRlBuWGdSbEh4UDdFYVFpb1RScGVTQWxzQXNXOWRpM3Rld1J0SC9oZ1VuL0tkcnNxMUl2M2pyaWo4OW9yazFqYW5UNmJ0QmU1cCtMR3pUU3hOcklrdFNzajhZT3Y0djQvem5uWGQ2QTZhRGwzZVp4RVN5TENFNmsxVVNSZmdlUkdaWUNtcHJkSUhoeGNMaEUrZXZ1MjNQRXJJYVdpZEp2YVNUNk1SQVJDWC9BdVVlOWxhQTJLeGNCL0FKcXpTN0NCcEZHcnpRN25ZSm0xK1VxVnRDKzc5ZTBFM0VsbGVhS1lUbWdOSU8wa3J3TXhtelZPUUJCbFY0d3kwME9rTmV4Snl2Y3k2ZmplZElPS0xIQ05TZ2FUTFNzTkI3bW1IcVF0OUhJaTREOWZackpyTjhpN01BMjdnSndTeUFLMmk2dUFJODNVOWNMNU15SmljejE5WkREdGpNVFRybDhMK0M2SWNJaWZQNGZXNmN5eC9qY0ZXUzlYVUhXa0J1U1lSZmErRzRMU2JwbHhwRjhjL1ZBbExhK2VhQWRKbExBanNMLzJMTXQ3bU9HZnhzeTdYRGg2UFVKdkpiMGozeGhjN3BtT2ZHdVZwMkdQWVZybzRybVh3Q3ZzTG5La0FudG85NUtpRHc2SU0zZFhsaU9CSUY0NUhldE03a3J0c21Cdlc0VitYQVhuYTRrd2IveTJ4azNqTEl6UllSdGRaV3l4MFk2b2x1RjgwU2V1WFozV3N4TXVNQ0g0SDB6NXVrZWZyQ0NQajc1ZEJWOHNlOXVrN09QNWVSZnI2SXJkVkYyWkFMakZzZE9IRThJV0UzTFk0VE93a3VKblhCeWZxSEdtTlFGOHdwZFg4SFdkK2FpNXAwTlNKSlAyVnF5MTZZTjdGV0RpdjJhMytOZGFRRm9nQndIeXRJdFVRbUpWc3ZNR3Mwc2lKdlNoczdwTVRaSmtTVE1KdWRyK3JXdngwd28weUwwaW9MYWFTOW9Pdm1BR0lBTTEwR2F6QnhUUWpTRkJKendCVkU1K24xSDI4M2FUdzAybDNqKzQrS00xNGRIMU5YZFJPYlRvN1hzc3NFcS9LMDJ2OGQ1NFRKT0NQdDRPRVV5Y3d5Z0haMzdkd1YzclpaZzFrQVliTmZJbkFpSWo3NEY5c0MvcU1Vd2IvRngvbjhaUmFzMzl3a29ZK0tMUmI0SC8wM2ExWndQbGJ1aUltZ3AzVW12SlJ0eEc1d1BZWmlPR2dETW5rbnlqY0VSV3ZrTnJKam9lV0VTSlRZbXEvUkxlQ3FIUWowT0Z2bUR5clpSTFVpVkFsUGZLU1oza1l4ZFJGTW5Hc2FjNjZHaEh3VVNENXpoQnhxNEJvNmNHSDFDeERlTnlJdk0wRDlGalBXMnRrWld3NlhTK2ZKZUdRM0tLS3VPTy91RUJROXlXcDNrbjVMMUdubitHK1JwVzViTGdiRTFyN3cvM0JhemVSWEZnSDZEV0J5OTEwNnAwakZlVFFNalJTZWdGdnY5Y0hiTEp4VGNROW9YWFpFOU8rcUxHNnd2VkpiMXAweURXblJnaTR6Z2ZPSm5IS3pMVDJZb1hMc2dQMDlwMXEyU2lFdVdJcVplcjVncHgzeGdxNEtPVWRlYjBuSVh4NGZzQVd0ZWwvSVovbDRRZVM2SHE3dG1vUkFuUG9nTk1FeHdwSTVSb0tvbzdVMi8xc2RyRFJ3dGNDZ2RHYlZhUWJCSTk1MnB5UnhUMkRnRU44VEJ1VUdNeU9peVFaR1V3eFd5SGh5dHUzY3B2SFVrREQ4b3NKREl5Vm95SEYwQkYxblVWZnd1ZTJDS0FhemdxUmxUbDRMdFh4dmhKbWZQNkFObjE0OTNIc1RtemZ5K1N0K0NlKzQxTUtBTVA3L0gwR2RzVVhidDNXYXRPdGRXNUZKMnZoUWpjTlR0RThpeGlLa1p6Z2MvWnc3STczbUhKTFNKTUhlMzR5Ukpxb1EyaDBZV3RMYkhDcjNTVkIraks3anpxV011eVhLWDllcDE1bi9WbWpaQkQzWTZaWTYyOE5iZmlYSUsra1ZnSnRFc2hJSGJnc3hOU0VteTFDU3h0OXk4dGdsMlJvYmNIaldxYXY4aTYxU0pCZm9XSHpwVHhHZkNVKzMyWEJSNEtZNWhSajFRajBvM3lyZGNkek5OOHNPSHk1OWgvbnl0K0Zjb2pxQWJzK1FQRDRXQ1MzWmJGYTIvVDFKZGs3YnFmVzZpTUtUTFFyeThSQzlId3pvZzRNWXVmVWxXYmxzakw3Q3kweW5hdU04Y3o3MzE3VkhmaGtYMlE0N3U2TUZtNGFMcnVuSHZuRTlNRXN5dE02OWxvY1dCMHppT3BReGhmWWs4Uy9HL1I1ZHlPeE9hR0F5cHkyeGJYK2Q2VHFDM0UvcHUzbjR0Z0lRNTdrSkd0Lyt4MVUzQ2F4b0dOU2hMZGZvQjR3V2xOR2YrRWlGdmgwanRJZEhGRWVzdmwxelV3VkplbUJ4N2pIdVhNSGc1RTE5TGFCY29JQXQwMzVoUGxld1dqb1p0Q2RKUzNzYlkvZ2doN0Uxb3diNG9KcVNtMS80clJvcnNZVStlVER2dWZSTFFjMUlnc1RVWnljOWh2d1dYRVRSNHZTWitIQTZBTElidG9NZjQ3djFVODNBeUhIOUg0TDIzajlNeURWN3dETE9hSmw0MFN3WTg5L3RkZlh1UnNmSWpYUldaT0kzTVN1VXl3R0JBdVhUd3lvV2p6blNQOWs5NTY4cTBWTVBPTjRZQ2pWVTg3eERIajl2MWo1Q0I0UHloTnhwdStXanFMNEVsbW1kTHRZSU9jMlgrM09kVkxzSnIyREYyakp3cmt6RzZ0MWJPSXlwZXZ4azUwaUd0Zjk5Y1k5enBMTjFKci9kRUkyODRUamwyczNCM1JEZHhhM1lvTGRSV2FnSmUrVHArbmM1dTAxU2x5QXV6Q29RN3NWcG1HRkN5MWRlMkI1c05LRUZ6Y1Nsbmw0VGlncWJmcms4THdMQzQ0VzdVTlA5elk4dFRKaEtPaldoV2szanpieEJZTG1WbEtRS0dsbkVRL3NhT3haaXFicVozTEozTmRrZWdMclRvaXNGdTQxYlVjdDJrak1uK1JWL2FqaC9UL2dqNEpzUlFWMlJNREQvRTVDM2xoTDY5dEdMR1l3Rlh1M0VJM0lYdm5FT0RydmU0L2RYZHBPM2VlbzgvMkxoTFRRSEFqTDlET01CYm1OaTZwQVpuSmI2L3VOQllnSDhHeTJVY0VTQVU2ZG1Xamd3TWpkbWRyeWRUN2Y2bTBBeG5WV3ZjbVM4eWhrTEdJSHZQSDlybkhqK1pXbVY4aVM1WGlLYnBWT2V1YjFNd1ZZVk1VQzk0SnZlUXgrWk1UcDJhclZVektnZzhIZ2ViSVZlRTVQS1ZmN1Y4U1NQeHY1cXpqUGkxQXo0OTBjNkFYd1lwRjFnQ0MremhrU0VZSitJd0I1QWJWaTZ5L2k1bnN6OVZDRVBaVGdYZHVFbEdzVyt0Z0NVSTI0am42ZEF3UG1SWnhUNWZnVHZxdUVJWTRpRUZsQzBsbVBhMFlLYmF2RGw4dnJWUTNDelE0QWtEUUlSdnpXWm9uckJmYm1oZEVvc3hqN0t5L0lyektRUGoydVNGbXgzRENqZDdmUmFEaG1GOGJ2RVVpVGJaOHBjR2lQRUYzNXl6ai9CKzZNZ0NwNXZKYVF1cjg2SWgxWEYzYmZETTZLWEEyL0pQdDR3bytSRkF0L0w5KzJIWTRDTWhaREFTTll0dVc4cE1EclduL0RxS2paeWkyZjVpRkRsQ0VXZjN6STRocVJtY2RydDE4ekZtMEZjWVRUdjB3c1J0RlplRm5ZVUQ1MnhkaFpoanZiVmJvc05FU2lWY0h4ek1DSnl0d1NFdTBZdzF0M202eTRtdTNpOGt5OStWbTFqZFVERjQrb3VncGlESXNST1Jsd1plUHdXcEtRVGEwYWJXM2s3dXRVdFk4Q3QwQWFWMnZHd1o0ZkxWV3p4RDk3ZVR2dHU3blVMVUNDc2dkSU45UktzRmJnQTlUY0c3bE9tSzVrNW1TWHNaVExWYVI1WnhpTmpLMGYwT0xETXI5SVYzYzlKUVV2K0IwaFZsYTBkSFI1Ykxab3NMNnpUOTcvQVpLTjhYb292eUFtY2ZQb2k5bG1hTXh6eXE1NTJaeWFmbWIvRkEvTmZVSnVQbXZaUWhYSFRtVVBSM2RaTWd4dVc0NFBOMFZ4SkJheFF0bWJiUkZGRDVsU09oNnlLSk5rOTYvSTNGQnlJYk1rZEI4Qit6VU02RWZoaVF0eEtVdS9qTStIYW9GMHRIS0RSbFVZbnFhR2pqc01IcFBrekpxeEUyYXFtYVdiMTVoZHZNSERkZzMzaEtDcUhZSTNIWkZ2NFNVcy9DZkFyV21OblByQ3pMT2lHZEF2a0UyZk1iZUx0dGQyTlluSXU4K3BPWnhpdHRPL25ycTdnUzFWV2FMWDZzeEszSFhwb285b01YN1V2dDNJRHNnQXRpbys5eEpNVDA0WFg2SlJFVjV5YnpIZS8zcXlxMVM5bWtyZGpodVNaNmxqUHBoUW5DYmszZkFLa0grMkVYd0pYZ1E5ME1qWXdHOGl0aVg3dGVka2JjT2ZGa2E5eUxHU0dzbTIzM2p4aGRHSlE2Q29aaDlBRkQrZzh6QTE1eXc5YkpCdFUvUjRZZ3hlc09YZG1tM0NYR2Z5cjRhYlV4NnJWQWlHU0hJKzBEa1dMODBIcVhsRXNnTVd4RlNaQ3Frdm82R0l5UDQ4NE4vSDJ2OFhFVEoxcHdXZzVKNmtjdGdPTlZYVUdtR1N6SVhGeDkyZW1wN29ncDVRNm1URitaTmFUSndrbml2ZTJSeUVicFZVcTB6cHdNaGF1dTFqbVp1S3dSclE0b0gyOFIxa0hZYzloU1VyMzJNU3NUNGExK21Ca3gzcXBmendjSWM0b3FEektOd2ZaZzd3L2hpQlZ0MzZKci9qaTdndHZ2YVo4SG1DZ3F6andpRzNqNFY1d1FGT1lJVDh6RjkvWmY5VlNzWWl5MDZPQ05nN0dRSDJqZE9hUXpmaFl4b3d2MExNNXVxK015dnBRN09vbFJkd29ESlZ2ZUN5Qm1WalpMa0pNUm9ZYzAxRVNSbTd5VTMwZmNBdUtaQ2l0WjlTOHdvK1Nveis3Q1AvZkV3VzRDdUU3UFZ6RGE0bmwzMDBkRW1zY0t5Nm8wR0xlRytYOExLSkRva0hmMW9OUUNpQVBsdzg4Y3E5WDg3RnJnV3JIYVNGdmxnV2RTWDJyN0tKVTFGNXZ4a25uK1dDK0ZVZ3loUkYyWnp3OVdzMUVNVWU5TkVmUmE4Wm5JZFUxYjl6WWFqU3Y4eWpzWktCTEdEbUJYMkd0Qm5WY1BCUzhiU2tzUzZDWWFTWGRGQmdWOWxxZ28wMHUyQmtIbmFIR3ZKYjhsVzFtRko5NGtRamVLbXdlcVJTdWVIOXp0WjAzMnZkNHBtVURDbFZBcms2aURtaWpyUitacTlITVBHWDdWelRhanVhSW5QUkVNc2ZvREhJb0xOekVCSUMxMjJWRkpPWllWUWlpSTlTN0dHNUJpNHF0NkJrMXcwaS9DOER3R2JlOEZrRWhjTHQ4c2lqU2sxU0hMbzh0d0l1TUZCdVJzV2ZKalA0STh2aitCeHBCRUFMekFDVm9FUkZUWllJRncyZ29qZ2pyOVlTOGlsMk5vNG4rTHJsYXkyUDViYU4zc3EzQjNJU1UrOHhPMGFaVmpzSVJ2Vk5DTDNnN09ySG1xWXAzS3UrQ0hnTkVXNnlWL1ZRbVB0ZzJWenZRRUNYRFlNN3A1SnVnekhrMjZxSFBTQ3FyNm1vWG82L0owa0srUzFMdEVOYmlyaHA5TElaVXdiTWlaV25jbUp1VU1jTURhaEY5SjlDdHdsK09yRTVPU2hpOUovUTdmOUM0dXY3SS9qdURlNU9FTTVMTXVnclAycFdnYUI4bWdidVl4bU1SZGlLUUNESzI3cWNaQU1IczVnTkxkcjZQQU15dnBVdEhqWkdHaGl1cVBMQlJXWTg1MVZ6K01TUDJZdTVaV2J5WGdLVWJhQ1BueVJ6OER6MDRDN1c1cWdjazBjZVVnQWZJQkY1QkYwWTRCUnNiNjh0dVd4bXc0MS93b0NIUFNGTGM0cDdnNlVqRWVTR2NDVDBFVjJjZ09URzhWaTFCdlVOR0tNeHczVE1xVU5tTU11NG5OYnRxeE1IRHJwRGVpZ3NFeU1kNG5CMDFHSkRYc1EvTm1tcHd6SDZiQm1XY2ZZZ2h5U1RxUXlVUWxOWm9Bd2VzcVJCbnM5TTlDYUJONHlCc2lyRlZsVElMTW56UXQxeHVzbUFkRW1jSVVEclVWRFZtUGZabzQ4ODZ1YXBTQUQrLzNBVTZzOEUvSGNlTm82Mk0rcU5BcmEzZ3k4WDZwZjlRU2kxMFQxNXQ2UENSV2hIcEI1Qi94Z0ttOXNmTWd6d3FrTnFqRzl3Rjg4YU1VbUNQaFBTNWw3b0RGdkNPb3BnWjhoNEZvWmgxZTBOV3JRbU90Nk14dDl3K2doWWV4RkJLY2FlNEN0SFhHdW9zYk9kZm5sK0tzZE1FUGxacUpDSXYxYjdqQy9WNjBEUVVzdlBMYXRRUSt0ME1Hak1TdVVaY081dHZSbjJQdGFadG9TNjMvQWZBRitmSnRBdzBtdGp4WHJwV0x6b0RjRkVPS1NVRkRZOEFyR21EQ2NjU0Q4SHUrVDgwclBlMTd6RUFQaWN2TlhxL1N1ODZCZ2RVcHVzcGUrd1RqSnpLOWoydkNLNTFINjRVU1d6bFBCcThsYzlISGRaSVkwa2wwZDhURjFxaWVnZlZRL1B6SjdBQnJZbVgzMGhzRS9kcUQzQmdMMU9FVWEzQk13eFpJTWJSR1hKOEgrckVlS0pYT2J6cTdqTzdUcEFBOGo0UjNOdHJXSDZJT0drUnlMNklZd3F0Y0tSK3p2aFdUY2ltVkx5UGcxRjdUYTZwVmhTR1ZsU2I4bElXaFRnOWdzeVJQSVMybi83ZFhiTjdXV1hGQ1hWUlJMTWVKM1h0cTQ4V2U3NlVoSGNLbVpZRXhqSkZnRDNxRE1uK3NpOEt4UUxLY2tvcjhseUlEQUpSNDJPWDZmR3VsQ2wxK0Uya3lFM1lKd3owQnVwRzFJV1pGaGxIVE91VWZadzRFTWNCeEgrWE1TMUZIdjRib0VEU2pvV3IzTGNtRlJHd0FTMW02T1VUQlJucWVpYTcwM1AyTjRuSk9rb0lwbEcwWEhzSTNGTk5oZWh2c2REU21ZM3YrMENjTDlWRWtqV2kwOFY5ZUkzYTJxb0R0b2pPbkI3UHJ4aHR0UmIxRTVmMmIvSWhBZ29ybVlaOUdkKzNlNGtja3J5YnR0NTNzM2xRSjdKcVNWOUFnblZRMjlDRUdFaEh4VEppeEhOcFU0UmNvRDBxUW95cFRGNXlPM1dtSWFUcGlqbGxvNS9zbXM1OWdTTU5mZ0xDNitVWFdibEhDVjhPR3FJcUQweXRvN3ZONEhiMXRnMENIOUlZZDk5OGZxNUdxRXkyc0l6NWxZT2VjTlRJNmJSWDVBTHZLWHliUkRZNFBUN1ZET3p0K2tEMlIza1JCYjhEampPZzlISitlNDhXRXRJYktKb1EvZlA2Y2sxZmY1aGl0M0k1b0dMczZLNFhtTzJNeUVZYVNCMkdsdnRhWU9NdzBBdGlSOXEwcm5uZE85RWJKdnhCcnV2T3Z6OHpBNmZlc0hiVzk3UkJ1OU53TWh4WlpuUEhaR0NCalU0bjFwNWNxcW04SzJ0a1ZHWkFHU0phTHBtTGtINWtJV1hkZWZOL1U3WG44OWdKZnRRZnhPRUs3SllwamQvRkVuMnlCSnlqSi8rMnQxVE1ENmZVeFo2a3o3SUtkbVdmbE5OL3l4MEZHRTk2M2lOZTFPQVEwaTRHL20zUEttd1dQNnMyQkkvR1lJdTZVSTU5bjJyeS9wSHRORmNkd0o1VmNOb2V5SmlxemVxU1doaFZrVDdLTUFITjRTR2RaZzIyNlpuYWtsUWxHUE1NbkxoZGJMU1E3WTIzTTh6ZnhVNEZySDNJdnZhdTFaTFRhdEo1TmVWT3I2cU84ZHNNRzd0OHA4MzJiU0dqSUpEaEdKWjc4OUIzbjdzQWdrc2E2b1ZxTFQ3OHdTMjBCQm85TmRqT2hSRzF4SWpGa0svOXNRMU9NVkJFNkN5aDExeUlXMGdTY2pOOTcxZUhEU1RTRDlWN25nYzNjVTB1T3U0bEpQUDBtQXZoNi93N2tZSTZ3WHFLZjhITUs0Mjk5OS9OWjN2Y3BFV2FTeGhicHdYQlBKOExMWm53RWI3eGM5TXZKME5RK0lKcnhJMHhpNVdXN21KdUZLRC8zeHlBb2Q1Rmg2VUpIZ09NdFJzNmZhNzdXNkZ6Q29GQjdmNUZlZ2UzZHhQS2RUMEIvZ2lxS2cwMmU2QzBTTkRJdkpybnNOTmZVOUR5OWp1ZzBIOUFlSWx1ekdvY0R4cVRENlQxT2tPL3dyaXltTS9oemFKeGpuaTNlUUViRjlhczZYVGtKdkRGL0prRnFwQzlIeG54WnBDWGNHODJsYkpsZ01kYXY0R3NiRDRQd3RkUVhiL1h5d283bHBqTUZJVFh5NUpvU3djZFJRalR5VVJ5Mys3czJkS3B2WFFZQnZwbUQ5VGgvazM1elFUakQ1ZmNnU1V3Smc2MzdDNzBQbE5weTh6WUdwc2c4WXNNdmNJNXA5L05RcUFlZWxYMi9lL1pERWlZQ0psVVNqTjQ4WXdoRkpQWmhoWVp4RGJOMndRTHBJU2t3OTZDVWh2eWQ3WmVRV3RITXJaRVhrZVlzRFJPc1k5QWxQNUlKR3drNE80ekVoVWYwVElDYWdtQnNSdHBrN1JZcjBJZ0h5bHRPejk3KzZtdmZkQnBsRHY1NmtVdmtiMlB0SVRLVS9yeDRZalRHaWJwek1nMloxaFNKZWdYcmpMZ3BJWit5bVhLNFFVMGdKVWs3bDBvVXU4NWdUeFBrVjVjdVlodms5amR6dHQ2QXhvejBRcFhvQzNMdDVkaEhHSE16WWlUM1E5OGRYWWdxaVlHYlBDQVMwQVB6K1JDdWlTTU5FVW5VLzhrOHJUZnA4TnJ0R2dENUtSdkduOVo3TVV0V0JjeUlPQVBEWW1WeklOemdlSlVuMTNoQjFFMTR0dk9FeS83R1loaVcycGEzVTZDTzdXVXA4RGk1azY4bnJrcVQ0TVBGWjFDMjIrYk41VTBxVldIY2gxVndWZlZ1akVvN3pURFFTNEVtYmpHT2FBRjF5Q29xLzhlYktZWEhNL2Fyb25YSWlncHhqYUE0TFFKUE1DVzJKN05VemNCQmhUTEF5ZUNjejMyb1k5TXQyVHlVYjBoNkpFQXd0VlZ4MUVWTGpqNDdITU5UWlVobGVvcXZMTk5rK2Yxb3JFL0p0TnE4YlFETnNPZDJiZGhVRldtbXJGcjkvaE92eWhudDFPcWpnYTdVeGFYSUszUHJwS3gyNDhBekYxZXh6blZtd0hqTnVqd3BQZ29oalVIOEhKaldFTndLTk9jVXFKOUZ0VjdzN2xkWm54TUZqQmVSZDAvVG5mQ1BSdGtHOFc0U0xOREdETlRCYUkzQ29KZDdKZjFyZXpEYzlmM0pBRkVnMjk5cHBMWitaTWZiK3N2TlI3WnJPUTR5eVIrQ25ySkpvcTVmQkxJc29aVjZtRDFRY09hVWc5cnRRL1lqUnZnN3ZBdklsOEJFMVBEQllZeHhLK0J1bVhiNXdsQmJOMWg4Q3ozOEZxcXMvSzd0MFp0U2dkZFZxVW9KZmt2RG8ySzU1c0xNTzkwYXBqZ0p4KzEvSjM4dGlhTFAyN3BvNXg0amJnVW9mU2svOUFrdVNNaXoyekVIRSswMWJFTHc1RHFteTJOVWQ0R3Mrb1Fqa0ZCNG1JZ3RONVZCRGw2dEV4KzRzNU0wMWdDeFk0MVpsRVNyakYwdjlPMUhuM0VteXc3ZEM1eVprQmNoK0I5Ynp0WDRqWGVDSFljbFZsSEhkb0luSTRKbXNXRnM0S2g0dzhUUkFlTG8rY0J2TkZKelZEMi9zN0VHWkMxaEthblpVN2xnMXNFZ1pVcEo0L01Ba2lSeTI5eGVpUUkzdnpCb3FQR3hrVEpqZzcxbDVOL3JTQnQvZWMwTWRuV240dVE1VnpXRndhUVU1RWhJaHR1Y3V0SDAyZVJoNFJEQXpZVkxhUDFMbWViOWNnLzIzU0RLMWZ6Wlhqa0wvY2VkV1dtL1l6TlBNd3pwc01hSzVtQk01Q1FVanJaelJYdStWTU45anBuTU9ISzFRQ3NsRE5mejNGWHhJalRlSE9BZDB1dkVnQzdZb2oySlo1b1BFaHZNSmZuWXgyMWVIWWRaTVZQUU1nK0RHSXpZR3dSZStTbTN1bGJVS2JLakF0MFM5WGg4SHJGSTUxWWZ6Rno0WUNCamRjY1ExS2hOaDFGMG1DZHdXL1ZlSmxZQVRTUkZKS0pKQXN4L2RkVmo3VjU5OXhCQ1lmdUZRcEtLdzdmVmFUWmZVeE5VV3k1ZUZXMkN4bFl2SmNUNTNlTk0zY1hOdGZBbUR6MmZ5cEc2SHAvWmVSYjNJNTNNOEtWUndhdUYrUlhid05YNFllSS82bWxmNEFHT01QUDZJZmhxSUk1WFEwaXhlU001MWt1NlJEK1ZZRU95S1JWemN4dkR3Z0xMRDhBbWpYV2JSenVzRVlDYlJWOVRsYVd0YVk0T2IvU05LSGREVjYzSEs5cXJxekFPaEdkY3JOTkZGci9XbWdRWTBwVUlVd050UUNsL3FMWk9vZmpMdWNVSEJxSzNYRmgwcG9QMHZkN05OdGtqdTVZSU9TZWtVc2hJVGNiZ2w0TEkydys1ZHlSTXhtS1lqVXR0SzNicDZZZ29PeHJrNjFnVXE4MFRUK3BkRFhFWjgrWEZZb3pPMjFVbVRadzNIdmZmQ2VXZjRzWk5SL0t4NUx1aUZHQTdiY2xJUXVWcFpYOVVEbTFXazdSVFJUVXdLa1lhYVYyY3pleGxxcStkVDh1S3FnSjhoeTFwbURMSDRiZzE1dVdhQWpVcXJJNGNHL1NERkgzUHdKeEozUlJweVhqODJPcVM3VlRHaTIvSkgvVW5rU1hOM09GR2lMTVk4aWJxOVJ0bHUxYThxRW5nZHZEbGRCU0EvUUJibk84RkY2a3YwQzNUM2tVMEFsM3ZqNW5hZjFtOURTT2F3eUZDM1JLTG1KZUI1VUo0QzhzV2VOdmdlQmo2dWN2MmtXL0Z6RG9MbEVSUVlIQVREdHJScndTSzdSbzA0SUoyWlg4S0Z0bjUxUzlrN3pZbW5SZWVrekFFK3l0N1c0VCt6MFlEMDgxWE45Z3J5VXZDNzhjQnBJZ3pDSFFadjA5Mm9iRTRMSEFxdVdQMmx4bENycDJ0NXpjTll5dWVjOEdGUEJhRjV1elk2c29IVnQ5RFNIYXl3S1NGTS9uL0c0TGo4UUlHNExTY3p1aFJDRUR1akRuVVpqWW1yMVNCSURkMzU2RWFabG5YaFZ5cE1SZDBZWUNaWTc1TW1wVzBIdmZtYUs4eERWUytscVhvSkhwa0hicy9TWXhQdFh3TWV6SWJodzhyOGIyd3JBUXpjd3h0eWl2UkhzVzVVOWx5SGJkSVBsOUEyWlZuLzE3OVV3V3FLYlRSbFRYT2laSlZLYTQ0bUVidERYa05Idm1XdnE2bndnU1FCTTBpeDhuQVkxMUoycVJYKzduSFlkK1pNN3l2VktVditBOWI0czNpaGcvTFhWZXd4alNDM3owb0dmY2tkVDRyZ0Q0Nm1QbTk1dXdRWkdmREMwV0JyUjVmYzJQbmxkTzFNQmdEOTBSQmhUdHFBUDg4dGViT0Raa1g5NzVxa21OeUR5TVY3NE5yeU1RT29OVW92SFdWd0lDZk1takR4Z0RrZGtDMUxMUjlBWUxNeGZQMXVRUC84QzNUbEx1RnZ2emNYMDhETzBmRVJIaVdNUkJ6TUZvdW45UHVzNXlQTU9DVkRSRVJsS2ljOHZKWnFpb3JyaXcweGx4RTEySm9XeUJHU2dyZWtId1J6UE5STVVlVTRaaCsxWXA4b2lQTjRGbnRmeWhhN3FLU0xnK08wTGh1eXNOV01zZnErcmlvZjFvNHl1REpXZ3J0L2JZYTduTnVjaGQ2dnppcktReS9oVGZ3eCsyaDY4U0Q1VDd0R2htS1I0QUVFRVV6Z3dxeUJGYXY4dHNTTGQ2WlZTTXR5V0wzRm5wSGEvMElsdzRFWXd2ekFZVmJHenJkQ2pqTHdaY3p1Yzk4K1ZjT1NqaGd6YnB4UDBQTUp4TUIyV0xnUjRWWTl4UmRVblpaVEV5bVpsWit3WjVvdHNMZHBmRVMrWlBYSzRiKzQ0dkxIVk9NK28wNWFzZHVZd2RGR1JYdy9RandsT2dYc1d6b1U0b3RyZ0dBVk9ZVkRrSGZ0bEsra1FheEJwd2swVXU5UUpEdWZkWml2RHphcFBUS2IrcnJsc056WTNJZjhBT3hYRWovUTJiQitMUXRUL0c2OURLV3ZjVndlN1JtVWZOZFRPUGg2M3h0dmZ3SzVoUXg0WVgvUDhQc3Q1RzVab0pqQnZlazFwRzE0a2JsR3hUY0Nzb2xBWExPbVp3aTNjd25YM0R3alFGV1B4cEphdGRETFU0bFBCNnRlN1pCTmZFOWtXUktSaHJKSFZCdWNtaDArTmdWRDZHdzlveG9jOExNV1RIY3ZSTXJPNXRyVEtGb0VFa2gzZzNkOCt1M25tTHplSmlpVWFMMG1nSjFlSkZCMGJ1aHJKZDJnTGNwV3dDM2FVQU54ZFp4SW1LdWNMNTV1K2ZWai9IUjBud3ZIbnd1ckljMEdJVEFjcG42N1hXak1xK0k0bDlEbllHOUdzTlpsdlcyaWZnVFRZNHFpN0dGYjdQdyt1akNnRnE0Tmg3YzNuQlI4V2cyeXdPVDJTeWZvYkQyR2dhRnI2VFZBS3QrWkRncjdlT1dHVFhtT2NJa29xZGs2cjE2T0tLWXJUSHUyM1g1SE0zY04rRFBESjVlSFJlRmQ0ZVJDVm1mZHBvdlpaTUNJL25uWS85VWpoUnV0T1VZTWtJRFBmMFZpc1lnd3Q4cnpRa1dGd2wzZTV3UnJoL3gwMExCT1F0MWV0QjlPR01PKzJmZXdLRDA4WGpYMkc0ck4rWWg0aWhpU2txZ0dYQ3A0S0UvUVd1MlZxSWs5MklMY05veUcxRGNFSlFjZ2RRVVMzc3VsR2s1RG5DTXBObkM2Snl6QUtrRUY3ZHZCanVGTGdWM1F1dE9jOGptTzZIcVNsditpWDdTLzNQMEZLc1NaU09lRGx0TVhXUWRneW91elZ1cSt2cUxUOFBOK2RqZ2JBVzl1ZXRCTnBYVll3ajByTzVoREFveEIxdW1abkdEMkVwcjloY2p5YVpodVVuMWVYaTZDZHY2Z1JnazFFRzJFdENnV094T3VoN2UrQ3R2VlUybVp5T1FPQm1uNjhmMmo4WklSTlRyNGY0OGxJNFpxUkp5Y2VIbXl6amp4TmphV2FPWGFQZVAxZ1dqVzRvRUpZcnJESFV3SGFMWkU1NVNnV3VsKzZ5cU40Y2NKV2ZoOXVsT25Nb3Y3UHU0UmwxL01KUUF3OTBWcnp4cWRTdjl4ZW0wUUZ0Z0dzNVBRSDFCRmNIMEVSZ1dzN25HVVVLQlZXYkx5OG94cUtIY21DUm9WcDlYcUl5U2prV1VrM3hTUnkwS3JOZ0s1dDZsR1U2RGFvRUM5WFRjcDZnQ1ljd1RJcVZ4Y0E3aTRzQXRocGMxYkkvejBlWEVVc1B2TCsvUVI5cVhmRG5EOFdINTl0b09FTmJoSGl2TUI2b1J1VFI2eEcySEFiSUQwOXFkV0xRUmRCUi80a01UUXFlejArN3hSenVLaWpGZ3pBZHg2dUhDdGNKQmM1ZlRBZXdaU3pEZDl1YmU5RURkRWR5QitGMm5kUnJBaC9nVVVxdjlrNWhtSzZpWFp2dzZQb3V1NnFpM3RqdHR0NkRzZS9hazdjb2M5bFlWM1R3dkVsNGxCcFhSSERxN1pKWkZpa0tBcDFxWGV2L09QVkVxL2sremlLZVR3TGgvQWdDYzFhR3NsQ1B6eVc0SWs1aEJodXNjejN5ZUNPS2dsRTNrZnB3NkhEQmlLbnY1anhoTmd3cngrR3lYM1ZrQ00yUTZVeU1FUldJUW92d2F6OW80dktOWG5TV2lRREdEaVVGVHFseUpRUUdURzdLU1N5b01wRytQekpHZWFDN1hqSnh5QjZVZ1MvcThRSTYvSjdVa0FzU1RzenhXeURGbzV5OVVoN0xzTDh2VnJNSFpESXBVdFRrUVkyRmZEQ3Z1eXNGZWs4ZS9zdFlhLysxUTdEazAwenVqNlBQU0M2aGxJM2J0QWpqUnhFbFFuQVkwMU9RMWNJV2ROR2RpQU9QMUVRdDJBYWthcmtLbHdNSnlBUW5CelNGaFp6eGpxemxhY2sxRnpiZ2VOcDUvakxsU0JYZDBJZFg4M0NsbG5XWndRcThuYnVncldQVUJBLzVLclF2L21RalcycFlSdkN6ZWtKb0FTbk1IWUlFUGdBUGpVVFQ1NlBkMlFZdUttOWRsVDlEVUN4TStQWWc0anh6dXVpK2FWWmRwVjhiSnp4cmx3cmtLOVBQWklwL0k0eHcwTkZleWpMTHpYR2dOVjZsQjBPcWZhSHNUWENDOFp6Qi84ZzBhQTZURnRBS2JTZ0RiUnJ1cWd2Yy9aVUdkbjdjMVQ5RG85cGpWc3RvQllIeFpqQXVzYUxvWU1wY3UwRXdyN0x3N0FURlZPd2wxRVVrQ2lydEVBYXRXRC9hNHJvRXdnM29MM0xrWFI5akZ1bFc4czBlcW1tNUR0QnkwQmpFZHk3UnU3bE9PbDJqWjA1cWNzWFJyYVp0OVBKSnZkRjhHYjZPM3dOV2F4Snh1b3dqNkM5M1ZYYkNKcWlNTUswbUUrQWJOTVZhS29iNjlBNi9VRERDMWNZYzhHaWNYUDQ1aVh6dW10Y3lhSVpHbFJEY2ZLVE5yYzJpeExQazB2Y0daSlFZL1FYR2xYTnFIeGZudWRqY1hUczByWlZtQjMzeUtnalhreDZ5aFhpVzBzVm4xUHZlbU9KRnk4WXI1c0cyNXRybXZldWxWOXlQcGdicXNwZi8zTGxVeXIrY05taWJjaG5rVXR1WXgrNHE5OHpzellrVjdHelFWZllqVVFOcW94TlZCbHJyTExab0syU3RpbTFBdkovREpXNEUrOVIwUllEMnplS3hVWlY5MHFQOTVWcHlacTN2eldiQjBlRFQyZUpheTlmSi9OamxXcWtJdUZRK004RStxYVhEek9JVnY1QXhuWnRyR1ZERHZubXVFUFRUMFphZjZ2Zy93ajN4R1hQUVVkNjM0UkgxV2VZU21senRnZVN2VHNzcjRSWVZIdkgxMjBWQWxaQ1U0L0h6bDRyVkpGaU14RGxlYUhJWnRISUNwUXhXQWJqZzVqdUFNejVYVmlkWm5DZG9VM2dYM3Fxb0Y3Vkd1cjJnWmk3UDFjaWFZZlJKaktBcERTM2xFQVF5WWtQUkNvMU01aCtUMDVNYWt6UjhQTHM2MTY2dUJCWVNoWlEwaFpmV3RFZ2xHak1KTkU0U3BnejluZ0hjcVd6d3lIMEtPN3I0WEJKSE9RVGUydExFdWEydFJYY0hTMXBHdWRsVjYrQ1FIVGNJVDZ4dkp0dWNPRlJ3U3BGYkcwbWE1K1dKNXEvVzdHbnFvUWhGR0tMaXRteDhYaWtxd2luVmd3Skp6U3dBNnkyUk95SVFRV1dVU1l5bmJSdW5JUVZ4RlBJTTFHWWprUzRPTkVka0MrVHpWT3dZT05lSHpHSkFtOGMwK2tFZ3MvaXBvM3BXcTVyVzljMEV1amtWR1RpWVI3ZDhEWktnNjJZU3hjL0wrRWF1cDVKWFJuN2J6ZDMxSXA4WmpzcTZMNzlYa0lMQ1U4aUI0NkV3NzhPekQ2UzJ0TitiRUV4RlF5UE42K2FoTWFFenFJd1IyUDZtbzdZYlVnbWk4M25jUmMxbjNQQXNVYkE3Z0g5U3ZPVG9LaHJWUDhob2FRa0I4NFZTN3N1azRSNm9ETHpXSFdVc0JXY0hvR3BhVUdTRmpucGdrbkxEd0hFcDRQcjBLemZtK3lRVEMwMllLRkxnaWVmVjdRM2lwMHRja0xJRHhDVUZoVGUwY2FiU3h3cXlWMHBHZWdNQStDSGpoQis0M2hUeDh4dElEUVNEeGdiTmJYMVFnd0xZclVtNDhRdFkvM29LV1Z1d0dsMDRqVDV5bDFiRVlzWFRvZ0FaZWtjRGJPYkpQb28zbEFNOUhtWXdSaVRCbXpsVzFxcjVNSy9lM3h0WVQ0ZHQ2Y3BFbDFxR0lBR3QrVVVsek1lczVqcDVnV1lzMkdYZW5HZnJQaE1ub2V5OFRDeTM4alYvWGFqWWc4SytER0tXUFJMbjZYRmt0d2VicG45NkxheXpvU09yODNLdGpiL0lWQmtRQTRYMk84c016S2VJcFRLNkNuajhiU1ROMUIyZWY1cC93M3ZYVjliaG4vOFN1RVMwWUwvRDdqT1dxUXVSRk9hakVFc01rUWNnWnFFVGtDd3FPME1OMFBjT2I1Q2hsd1c2Sm5KMGU0cEpzTzFLM0NsSUk1VC9ramlPeUQrdkRqUEFjR1NCckZPbk1Ob2tmNWMyaHVPZmozRlBkbXJVS0Mybnd1NmFrN2dCL1pnRE9zekhKeWRBa3NiSGkrVWVadFd1NFFVU09qVmRhL0Q4UG1vNVBwdkxiUnJIdTN2U2R6cVUwcGRsZ2NYcGtVQzM5WGUzQlhlMlovMUo0R1ZtbDFUaGtIUUlmVTZqYjF4RlF1RzIxZHpDUWQvQ3p5Uk9na3dWbVlKdE9ZWWk3Q2xMUFZNTmpjcUsvOFZISFZ4MGNZa0dQaTdlMmwxeE03L0dpSlJWeHM4WlU3enNNZkpwajFpNUwwZXgyeEZzRHNUNU96UmRWNU9MNkdmaVdlSzg5WWswMjl1M05XQWxPNWQyT2d2eWZNa1prenRLV0txMUZ2QTY3M3BNa2V0eXMwYjQyb3FYazJhdUYyWE9Va0NmV01Sb0N5YVF4NmJuMmdKOWo1RFBabzNnME1sTzVtYTV3RTZBVnZrekF6U1RQUmlMTTdnTTYzVVVYYkt0T3VoZEZmWVJDbWYxVnFKZUY5WHhYTkJPSUlwOVdaMUdmT0pmbyttZ3A0MTNFVi8rM3BJajVGSUErOS9PRFB2MkxtUTRvSkxvakYwOHFNVGh5cjk3SUQvU1B4S2FMa1AvSXl0eEYxVlNFYkhUOUV1RmxKZ0paVzRIMEZvY1ZtTHdmd2JkN2Q1YW95K0Z2bU5kUklkSUs0aU1Dbjh1U1lFNEVMSitNekRFc05VMzI3eFFuL3BCdjQ5bXk2ZytuWVY1aGg3VkxwVGprWUxXTks2My9seHdNWW1Xc1AxQmVGMno0d0lMM3RIQ3hmTkl4MHJCeVdFTFMxOXhRMkl6V25mTE1POXFSZ1l2b1g4b0NoaUVCME5IeC9xMjFCZGFvbFFMc0o1YjRWemNoV1BHeU5sTFErQzlkdUl4Y2NFQm1yR2kwSEJHNStrNEVOanZ6aS9ja0tCaXp5NGNCdFJpV2p3elBmTnBtamZ3SlNDd1E0c1BJNy9PSjFGTitEY3ovZStteUlZeWx5VVp3SDJvQys0VEdxVk5tMzUzYWpBWjRDcGxCUzN6aHJtdStyWjFlU0g4SUszUXlqWmNZS3BoOC9GVzd1eEYxZjg4YXhmS1pvUUZFTzI5RWxRNmx0TnlrNnVYWlgraTVwbEx6MVdoZXhZdCtIWkhzRnVNclFXWUJBNkxlaldramVGMHJWdFRQRHN6VTcvRnVBRDFEVGNxUkNSTHladDVwbWZKTDFLVlJwUzYvYzZsQnp6eGFSSU9iMDVhSlpvU0JqSVZ1N0U0REQ2UlpyZWtDcGpFZkl4YlNuVUVHMFdKdWZEV3duajNhUUhCMzNvaTFoMkZHZ2Q3Sjkvb3dwR2l3RXhGTVRsTmJLdHFpNHlnazRqMzQvUmEyVitlZHUyL1pKUmVWSWpuWHpRMXdSUEFKYWxTTmN1UFRZRkhqZ3lYdjhMK21naTVnRXJXcFRIV0hScSs0b2dwSm82K2NENjJKSjQwSmkvNnlURERpTUlpd3dmUTFzMHlvTlRlbklIYVRob3dqazBrbThLQW1mVnB4T01iMXdDdHhCTmRjU3J4dnNhWjRJSG96WWxLUEs4Tit1Nm5KeXYwNFpTY3RSRUF1bGYvS1JZUFFNZVowRDFGamZmUjhUTzNHVkhtMnd5WlBEdFNvOHlaL1ZKZU1JeVRrNlludXE2Zm9sRmpHLzZ0cXl0c1FWTU9kY0pFR0tpTVhTNjZacFhDR2xTdnM1aTl6eG9zSGZib1BNNngwbzlwcTlDdlh0VkV2UHlrUUc0S2REWHdJd3dxTEtFdCttbC96aWZTSlhwN1g4Y0YydGVWVGN4T3VmSFg1eFpNMXpJcm5ZVWtzRm44cXR4b1Ywa2lmZEdINEIwNEVGaEtyQ1RmejgveVo2TnZKZkVDd0V5UHJpb3lQbnZ3L0w0VHRCK3ZXckhlaUdnNGZSYkJSaFk5UDh3Nzl4V0pqdEZWUHVFZWI5OG44bWg0STR6d2JIS25pNU9TbmVxaFRrOVk4TFYwbEVKWHBhbXczVGplb0NFRDYyTFZtdEFkTFpWMlBjT2tZS0VReG12RHZ1RGVuWDBKbW5nV3p1S0t3M1RKS1ZsNmFpbU5WL2xjbjR1d2dla2xzdnE4NXRFUmJzc0NMRFIvajFLRXZNdlZkUXNDTGJaemRzOXhFY0tLLzlEdlNnTWpMYkF3U3RVM1dlazVpY3R6SThoNFpXWDJRS1FlWElRWHN4QVdsUVBUVE1BdEVJN1MrTTBoREEyMWdZWHp2VUY5Zk9pbG5lL0QxQnRJenVqemEwUUl6TS9IaGVZYXZDTnFHaGtNa3NmYXVPZXZnRlk1WVo1WHA2bjIwVDl5N1NaYklKMk9Hbnd2ZzhwNTBmTElCR2t5ZnpVbG9MdFNEdUpZbGVtcEkrYTEvZThSeklobWI5Y05udzNIREVYaHlEbXpDRDh5VlQ5Rk9CRUtrY2V5MjdPelFab0hFakRRUDZrajdpakxRQjhZMFp4Nmk3N2YrbkE3WWNKcnBUNWZzTVhvWXphRjVZeE0zZ1c0cmRGV21VaEU4bTF5dXZSYStJaE5SS3lYZUQ1b3BwUkRBNE5IWnZOc2ZCMG9yV1pLbjd3a2tvTnI0Z3JPUWZoK3RQd21YMFRBaVJGY0tWNUl5QnFnZm1JZm05N29FSW9KREpyOXRBRndKSCtVWlJuL2s5L1Q4cloxYmdwUGtWU3NxOWtmK2g5aEpINFVlMENGeEFiWTRPZU9NV3RrVjVRaEJpTnNscnZPYWxZTit5WWxzbGx2U3pUc3VEOXpvRUhwczA0UjBJdm9XVjVqYndlQ3pETjdjbGJFdkVKK1JzR2pxOGQ5TDlWY3dUdzVmS2NIVEJnekhjak4xWjFvclAyRUlZTHdHTGIvWkJjQW1kZ25tVnVnQW5Sa0tWWS9VRlhKZ2dzZG1YSUozV2NON05ld1YzMmh5TFczS21KeWJOZTF5WkNSWXhSS2FXb2dVWElJVHhpeFhGU3hEQXE3Q3N0b2RweEJCYnlVRUVYSTBYVTRVRGx3ZzIxekcrUnlybWFuczVJWXRIN2JpNXNIQnlDYXZIT3d5YiszTUZSazFSUGplT0VYQjAwUUUvREtpcWxoWURScE85end5TmZ4OWN6SlZkTmNEbGJ5MTF6dVk3akJMMTRUVFIvZnJXVUhwMnJXczZyNXpNeFhWMlJiYVlQOC84Q0ZHd0hQTHljKy9SUS9ET2lhVnJkMFAyOXVTSGJOZ2JvQkMxTHFJZkpCQzFqa3IyeWNoYXUyam4vVVl0NlZKNlNMUDZoSDlidlFlUFBodGhaT3owNVFHTU9yU1lkOXByNE8zaXFYeUs5Nm1GU3ZibjkwZXkzNUtndVloYzh6VDdqd2tFNVJSRUNmSm1OME43NnZpNHNiZXJiMHhFUUpXQVVmb1IwQ3pUaHh0SklvYjFuRUkwWXhuN0xqNmlTV0QzakhobGxtemlNVTJOMm1rY3hVdzRHR2dYY0JKSzhiaDY0cFp6S0hMTVhzV2diYlRNRjFjekxQWkxDR1B2V3o0ZWxwQzVDUEtVMVA3d2VLRy9rT2F6U2szSUY0RVowc2gzWGdFbStJTXJtNXhnY3hsM1Y0T3d4QmoraXluQzRxQWpxMy9EWHpmZjF6RE1nS2Jydmk2MURvaitnVGFPNENncGZ5VHZwVGxKai9SMkdCWStqYlJGRlZhVjlIN2hMclZFNHJPLzl2VHZsRDY5dmxDZXBsYUFZbkluTjFUS0tpOC9YZTYvdDBvZ0VkMG5PNE9pQjBMR3YxT1BMRDhOWGdpMWRhSERSSGtwNU5XNDZmNytKWUJFNjBxbmVFZzJnS0hNV1lIamk2R0pWVGcxekVTckVYVkJjaDVWRVpJaVd3WjlxY2VSNVVkSTQyOTdGT09yOEZUaEZVZmVJM2JHVG85THYxOVJXZEZ3UXg5UHRTTkpkUk8rWnNOV3M0bEUydGY4NkRPRnJlT3FYVU0vNEk0UWtFYytyNVo5dFFVSWJEVXp2elNnSSs0anJ0KzNpS1pGRVZWWVRnWkhsZVp0SWI3a2pDd2FwU09MNno0RS9PRUQ0N1MvTWlmamwvMy9URGdqODZseERrYnVESHFPT1A5cFFzVkI3S0ZJemllUGJKUnVWRzRJc0x0eTh5TzZDL3B3bHpTaWRrV2RWc3Z0Q2NNMnFsOTRVSUxMeWxxTTNtOHNDQmozL1ZjSEZHYnVIVzRid1V3NW02c2UwdkR2MjdtMW11OThCMzIwRUpnU1h1WU5wVDJMR2NuVnRKcEZjYmtJRElWS1o1QmVhYktEdU51VXpnSWJ2b2NWVHNDWk1RQ0JNNWFVdEVSUDIvVloybHFvbXg5NTFtZHZ4NWtIK1ZiMEprUVdIVEtsbVBRS2lMbnJvb25MSmQvbWdqWVFYSlJTRHJ5ZGhQaDlXazdHMkJrb2ZoRlBYQmY0a2VzQWdhRlBET0Qwc1d3MnVGRVpwNzB2ekp6dnBIbGVuZ0doOWZVUkEySCs2NXVDVU04SDF2c1NZeW15Q2NjS0pKcm9pMm5ZYTI2UmZTbk8rS0lMZGYxVzhsbFJJMlgvOWJRMkE5ZDNuUGJTUVpDeFlpOStGVkpWbUFtOHZMdEpaWjRyZkYraHNsYW1zRGVRWi9OeExXQS9Da3VQa0xucXFZaWJPQzFJalNsRENkNldJUHl2elNqaUQ1dWtrSTFjNnJpYlpCbHppdUVRS01iWXpjTCtEdWl4VE1iZXBKLzQ4SDZxbndEQW9pV2dIYllQUm9Pb2s0M1diaUlLUUpTY0F1NVV1UC83M0Y1NWFXWU1MZTF6Vk5RWm9rTEYwYnBaZ0g3Z2huYkxIeERhcWVFSGdWSkpaZWl4ZE9XYXBmY2lrL2VzZkNiTEF6VTM0Qk1lcTQyYWVkOXYwWE53Znk4VmVBWkEvTlJ6TFBwOTYrMFIvd3BZYXppb2Y4VUEzZFVwZTRyWkUzN2VnZ3hja3BZblM3bWhrWEZBOUJXL0RZN1dONU92c1VIamJ0VC9Rb0dKL1RCUmFRRFVlcXZPa05yek5yUmJ4VVV6eUpEZlRpUmQzc00yUVR6ajRSSWxvVWo5VDVzeTdIZkIzcldOUHBjSFJZSVVpYTZVczIvMWlwOXFoSSs1RUZiMVFhbm8veS85ZzlmbExnTGhBN2x0cnV5a0NtWHlJcWJEWi9DY1pjb1hDdkVPNFJsRDYyWENZZ3V1d1J5a3lJUEU0TVhtQmlCT0NidTZkamFBVzJIN3dtbVRab0VyYmZaWndrWEdJM1FNQWV2eHllc01QNk9nUjhHWW1oeEE0SjJnWkN6amNEY0VmMXU1aVFoQmd6em9wYlc3MmRhQUgyWUtUTEtmdnJmaGluaGM5L0oySGprRENWM0Y5RGtodFQ4MjBrQ29OVFR2RGRkVHVWNktqSGNKUUxEdVlqejRUaUZjQmR4bEdEdTVPdGJ5aDMwdXR6QWQvU2VzRExNbkR5UkxmaDliZDdHdWR2TTY3YmFjcVVnU01RVENUQUdhcE9pWFJUUmVlY3RCUFhJQWlreFJ3T3V1ZzJTa2pNV0VRNGtHTVlQSi9ZSm41MHNHMW5GZXpEVUFzemh6dHMwczJpaXdLZWFtaTFpODExaWpWWjdVanJEdjEyRCthTk9FbzhBdGIrMXdXUElZODJvTXZYTENWTm5Id0U2VkRKM2pIYytsMGtvUGZqUWZEaVhrbFZGeVo4L2dBYTE5VmFTOEJJUHgxcjF4RGNuNUxYL0lvdUgrTlNNK004YkFuZlVncE8xUVA2d0dKK2pJNlFFQkg0YjVFTTNEREo4ak5rK2ZBTzd4aStvMmJsdWlWL2psaUdmcE9hRWNSZFFoR3RuUTFNRmxyaGlVK01kcjhYdG00TzN4UHV6ZTg4TWExelRFYW41dEx3UFhaK3plamRXMG9YUzdiTTFmTHNEcTFtTGRCWGlBNm1SemxwbzQ1YkxWQVdRaDkwZUFMQzB4bHZqSlkyQmNoRHdhcUlyUjRjRXRObXhxZ1pSdlIxcWNUbFZ0SlRMaTNxdjlsMmswNC8zbDd0ZmwrUk9INm5IUy9HalgwVE5qc3RveXNDdEZLWnNFamU5T0VuYjZScEN0YTl1NUVoSVlGU205K2hiK0hRalFTV1IvSkphcTBkRGtIOTRpbmQzUitDK2xTYTdnSWtzZ25FRFpZcWZ0WWk0eHVqM0wzTy9sVmtCRnhoK1JMMTZZTDRYSE9wM3BUTU4xckYvcHRZeTBnT2FIZitlYUw2Z1RqbkgrRU5GSzFIbVBzR2dWRGQvWDRISXFHbFozaDczREdrMWlUWXJyUDJQWSszc0Jwa2pHUXhYSEtFeWkxVWsrWkVGVG9TUEcraVNFV2VMVnJEWE92UjFyV2NtcjJ2OG1qd0RnK1lySEtBaVNEdFE1VkFjRkl0TnExQlpJVnRTQldGbVFEMkVoYVN5V3Yrb0VyV0Vpb3FGUnMzQjhubW9RS3d2RTlzYXlrdkZyaXk1NzE3ZFVlMlI4SmVxK1A0ZXdGNW9zcGpzVjRvazM2VWQweEE5dURaSVBFNGI4U0NkUThZNW51NEQvWm41VmF3OEdMa3U2MG1qUkExMkFhTzlyZm1MNUxQTzlQTTRLOG1UUjhBK1lWb2V4d2g5c2xFcExnTG44OHMzVXB1WThnbFpnNjV6cVVCRFRoQ3M3WDZoR2M2Zk14dDBpYi9kejhKY0wzQXJncGxzM1NHV21pOGFLNU96RWozOENjcEFXWVVjYVFCWTczVW16bTJPb1BiM0ZZMFAzWHZheWtOREYrcHNQaFlYMTdJdGs4WlRwU21aeFBqOUJsbWNScmJpQTJyWkZ1YmU4Vk9HK2FSS2xtTU1RUzdjTE94SVZrWFhYTUNMM24wQktsa3Z1THh0Um1lcFk3TFJ4aEc5VU1LQWwxRjN4L0FuQzM5aTloVllZaXk3ZUZqWGc0UkZzYnhwM1B0Zlc4eFFHaUFoYWhscVJncGd0VGtIR0lSWjY5ZGsrWnA2WDZtU3pEMmRuUkcvQXU0RXIxUmU1OXB4WkI2WThZUXF3RC9mVnZTcUUwcnoxUUk3TEg4M0ttbTg5eFFSTE9xSTRNSGNDeEVQQnVJZVorVXVOMEtjaWYxaUZ5cEhxdFdzVXdnTlYrekN6SnVOamNwN0VuU1lGcjk5UDI3d2dqd2pxYTFyS3VJMHVpWmJSUDRrMkhndWduSXUxYkoxY2FiTEVkRWhNRGVlSWRRWUdrUlJHV0VzMm9vZDZ2QTU2citpSVNQbS9sRnFheUFxeDQzaWs2emk1ZGU2TjhhR3djZmFKU3g4aFVtb0phTVlHQUVnYk9pclFERmI3NXpiYVBZZ28rcUxBc2MzdDhQMlFndE03RWE2MCtkYVdzMTlXMzhBem03cCtzdDkwUEVlcEhNNlJJdGZsYmRIdzVacE83OC95WEtMOGQ1SlZyd3o1TjhxRjQrVlVld2JSS1ZSendFZE5wTExHaHpjR1N0RFJnbWROdW00cVE5TGFmVGhhT0NmOXl3QWdvTVpnTjRTTU5haEUwWnlITTBhVDROS1N2OUJ2NkprYkU2ZFBTcy8rQUdZRXVZc25GTHFQMzh5V2p2eWRkQmY1cEpxOEhkYXZXbUpEWmY2UlJBTGlkRTNQYncvY3V6TUpYTGZWbVhpVHpUQUNGYWYzNitPUHgyWG5DZ3RYR3dHV0ZQRzlwMHErVU5FeHR6eHRONFU5QmRDdzJ4ZG94dzhmS21CMWo2Sk1ESW9YOGZqMWljWWFiemhwTkV6T3grQzFzL3dDZHZlQ2N4SWgvOTI5V0tRUFJNZ0VVNGhVZlBPTUs0YTlyZWFhVGNDMnZFckNkZnJiVExmVXFPeGQyUWdSYTIyVitwemFUbW55L1liNnVTUUlVbFB2YlBVZUM2UE1DTzAwMmhrZG5tcEhpTDNzYVpBdkdzUUZBb3VzMXQveGJuY0VXRnJrR1A1Z1FvenpSUFRGZlgrejJJakdRc1dCZ1F4VURhNzVkVmpiQmJvVW1OWGhxNlNGaFJiNjRqU1dTc21DT3llMDNvV25UQ28zK3FvSkZLdW9YMk1DUWJLb0o5YTNid01lZnJlM3AxWW9LWTVmckgxaFBkem9TSVlEc2NTc0Z2QnoycC9UU0FYQmhyN2FXMUtyakZzTDlRZjJvSUZhdE5YQ09YOUpvQ01aL2V1M1BlVTFhTjlzRThFMk85ZXVPejBFS0VwSnhtY3Z0eVJHVWRLNzl5YWwwNkZ0bm9jWWFzTzlrN2tSZjZFNDFlS2dnazJpbE9vaXZRWWt4MWZ6UjdWT1hkZk1yeThOaUgrM2NVaFVoOUlPVC9VZk1YY29YbG9LV2VzdkllSVE0YkFWcDF4bHd5QjB3VmMvckF1UTYrb0Rsd3VKaG5HSjJrMWhJOGw4T1g0bnFGdVJxSjJReW54MGgwSXd5dHZjZnQvUVdBRzRpOTIxSmU4Yk9wZ2VnRk5RcGVRWGJ3aENmTG5reTVrOXpRTVBPTENLWEpWd2NvZFRwSW1EQXh0L25WN0o2TTMrMXR5NGVIc2RwN2M2VFdpOUtLOXlvUGpHSzU1SXZqRGpTUXFuN3pNRmU1WEo3cEtTN1IvZkFwOHRSL2swU1BweThld0tmZ0E2NVFsaVJ1ak0rRW5wZXczZnZwUUYwM2FJbS9LdFE2aXhSbUdSUklQMjBBY1hqSTd2ZmdtQ0cxN21rTmZXV1lvaW1XQnM2V3R1MGpxQyszODZ1KzkySU5zTGFNaFJCQ0hmZXJsdGY0WkJYKy85NGRIM3dPOTR4M2dDVmM5bExkN3lmWC9VcTNGTHVhOW9RNHpjRnhSNzZSRUx5bW5jTVdDSFk0WUY2Q3lSaDhoZ2dTeDRWcnpQc0pWNUtaelBIOGZUOGxsc3FCRGpwN2NNdGk5emJ5UFdVbXN0MUx4UWRRdCtoNE1nbHplc3ZtbGhkc3BsTDdtdjB3RGFubmM4WFZmRzR5UEFRaXZpVkhkK0lHbTc2TFVsL3VjTnV0UTBkYkZWbCtONTl2bzA0YXY5SlpqR2RqR21XaGJjblZ2THNYTWkvTUxWaHoyemJFaVd5c2NPS0ZPOGVrejd4TmdSak82NUJYcFdJZTB3Sm1pRjNKMGpWN0RLNDE2aWZxZjg1L2hTQlNNSTVFZ2UyN21ZVXNlazZrbEMxeEgxN1ZkdGwyRFFLOXBwbEtDZkk2N0FlczlHYW1nbng1bS9ueFNid0pJSk1jcmdUU1lMNERvelFNelhwcW5uNkdKaUpvQWtVMm5tc0hoMnVkQzlrdnNvTmhqczM5bDRINjlVN1J5VXlNc3FDOURFWjhOR0FCTFJYQ3Q1aVZpTm4yZ0g1U096K0VtVG1UZXFmQWtEb0VWUExsQ2dMVjVRNVJmbEdZSndJWmd5OXFOa3NVeFgvTU5zVEZ0dUxwbytDbDB1Q09wZ01QZUFxS2tyQVhiNWpGLzg5ZTRVeTZLNDdCQzVCQmZXdjJSWGxaN2ZiNEZKTG9EMndzNzBNOUl2L0g4TFBRRFFtWnhWcS8wOUk3aDJWL3NzaWdzcndkblhIc3JHUStYcXhmYTlzdks3WWNBS0lYcEtGbk82UHhVM0hEUUxZTlE5OE4wczgvYnFtbm9McUJPTGdER0h3WGhHYmVLSnk4S2xjNVd2SnNFekFrV256c3JPWlJLNWZKMGl5OUxNWGo2MUlJczV1V0tzTDNaekdRcnFUV0NmQVNzL3p1VEpiZmNoNGo2Y0VBOENvS1RjVHJvTHlEQ0l0UTl3V1crVFdYU0ZJMmo3WU4zZlR0bVArYndGTDFkcU5zTzZZWDNVbHhJeWd5RUhkTTd4MFBSRDRkSmppVmZzUnZQd1hxYi9xYXJxMzNIZ0h4SzJweDZ5TDVFR2hNL1dsSXZiRXZsc0wxUERxelVLeVVrZmRjSEsvV092amN0QVFwblRRUVNGbU9CTmxpMFZocy9obUt6cjVyRkdYZEpmendiOFgyd01JNGRtQ0FaZmxSK05UbkVudFR2eUdpS0lGNmNJZUs2QzhFdTREbUVDUU0xMnZHSDAzU1VLM2pBbzZDaFFZbUlrMkFVRDR2QTBXS0pBelk3ME1GeGZJa3VBQ0Y5UmNYbUlaZG9ocGtiVzlHbCttVUZyRDZkdVcyakdDeFNVWStNUDAyeHpacTRSRjlQSURGUlNWcEplUDdCQzl0czlLTjFadXpIMVZ3SitUaEt1WVFoWEFIa1RVeUFZcGsrdktvNFVPZkNycDJzaTQrcEt5WGFQdUJ1Wkpib2c2YmlCL3dsMGUzZ0RTa0w1ZFBZb0RvdVpTSUdFbk5XZVJtN3ZYSmQyUldIRFE2Q0dDbjNOdTFCeEJ6YS9yVWh4VStkVTFabGozbXJiTEJsQ3NibWRVd09INStNUlUvVE5pU1oxbnBmQ1lvY0NRQ0xUbkxkUi9RVFlpdDBqRFNja2xLUmNvWUxmSm1Na05MeHFTNWdIOS9NVndKalhWN1MwM3dkZXJTcUQzUHdYMTI4UGhFakRIN2pVQ0VIem1XZEFvbzBWTE1sWnVYZnREUmViVFYwUzVNNk5yelZSdHRvMXRXa2YrUWcxQVB3b216bXdWUlAwell6YTA0eEpWbVFQN2Z4bEhtSitHZXBFY3lrYVFxVk9uUUZWQVduekpTYVA3S0FxNjlLMDZLc3hZVmJqRVY3ekd4NVp0OWVWWUJ3R3pHVjhydklvRUpxejBxMmNoY0lyTFZhMHA1Mjk0RnVtK2lHWHIxMXR1UFdvQVVCbzlhcFowQVRZTnBUcGQyQmN4ZTIzM05wamQ3MVY0N2tUdTVscWlBZ0QrWm9tWHBNNzNyTWhCaEJxTHg1ZUJna2VQaEZiM01BTFM3VC9IanJ0VnJsUkRaMU5EQmtpTWp5eGx6Nkd2ZHNCQytwVFFXTWVkNzZxMmJsMnVHMmVUV2VRMm1aZDE5YzVWUnpzQ3pZd0x3WFBPblN1R2N5MTRaUmUrdVdtSy9ZcS81dDNVaVpmMERkdHp0SW9uTVlYUHlZUURIZEMzT2h2ZXp1emZQQnJVSG1IUEdXc3g3YktWNklVaEl4Q08wRmNEbE0wbkVWOW9pQi9TYlFGZFN0eDJIK3h0Z0RmV1BMWW5hcTdIZ05VckhIeCs2MkROY2d3a0k0TkwvQnZuUGVrcTJ1SFRFWGR3NTQ2WDI0MnR6d0dMVkl2d2YrYzFvTEdpVExqakVYV0dRSkRnSFVFamxWdUhIWFRqVFdkTjVRYzdGNy9kZi9URXV0a1B0S0VzcE1xZ1BrTmNyb2lQc0FkUkZPeisxUXU1MzJ0eU5EazVFUUpIV2Y3Z1ozZVBnclNKUXBSN3hHQ1hWdUxyU2hLZTVXWHpJZ2pCdUM4Q2diM3BoY3NqWmQ3SEs5TCtGZHFZL3FxeGdyWkVnaGxzTXNKU0k1T1puRzlOSEVzOEtzWE92QWY3dUY5bk9UM0FUM1hHMW5GS3ZaV0pBOGYrRWUyb0tjdCtYZTdQTSsrUkFhdE1CSHphMmJPYTZrRzFiMXdrZFh6SjQvVG8wZDBpdGhoTTJBbEZxWWlkZFB4WkdDeitXVUF1dTFibUZOcmZ6RmxzOCtPeW1GKzFFTlVBaFNEcUUwOXlHTlpINGp5ZFN6MUFJZlhTM1pwZzZnYjFvTVdGd25sSDZ4dGRMc2NLVWMrc1JsYmtub0xHZEJ0M3FCdHo0b01PVEl5VHpHckVOK2N6YiswdGYvTGNPQ0syQWVZVDNHNEtvVGN1RzErRFRYUG1KVXcvMVBiYndyaUZ1eXJYNm53MWhWYU1idVFSWTRUNUVuTnJXRWd2TUVQZk44UDZuSHUyaG9aWmpsR1dSb2ZvUVJIR2VWTFhBb2dSZmhaSm9ocmpJQ2NkMVZwY1NnQWNpaVV0Rno0Y09kL0IvMHhzZVlEcVlMU01lcjRvRUdoUis0ZWVGRWNYSjg4b0ZUMHpxTE1DNVhPTk1vb2hhdCtNZ0FGaHlLaFlmMjZHMlBmcGx6VFRmVktONG0ySmUrUjFNOG91NnZRSmhncHUweGVjMWQyUTcwNVhPVFh2RTdyenl4Y3NVclR3M1dENHBvRlh1M3lzN3BUeTQxVzJBb09wZTJFYmpJVTg2RE9CUGhGaXExZzFDMTBDVm9Uc3JuQnBOWkVleFowNjV3ZmNxdWZxbDB2N2k0N1lVUzBIRXVLUFREVlArK2dqTExVRkVvNm1leHM5aTRWMWJRR1loeDNETUhiUG5jYzAxNVZFTFlxdWxqYUpQS0d4c2xvSlBpanV1ZXNmZ1g3WVZKY2tTbWJnZEJ4OWdwM0pEc05BZkpqSHVrS2xuTG5SbVhWMXZ4Z2o2RVQxanBKbHJ1TlpkZ2MzZTJ1clVkWXRyZ1VkM21lWmk4VFNSR1ZtM0VNdFhvTFFMckx3MXpqUmZUbUo0Q3pUTU94SEZtc2RvMHRwWVdMalVtQ2ErSi9EaGpSU0pVRWU0Y2twQkwvaU1TOVhFMlNaaVlpUG11dExBS3FmeVRtSXNlcGVzVk1kb3ozTUI4MTBXL01ZUTZsUFNzc3N2MHc3NjlacDZERGtiUnQzci9JL3BOY2tQR3lhTmt4cWZMQktuNHVQUGdQemNjM0hyMGNuQ1NqdXJScG1iODU0MmcyQ3RKSE5vS3pLMDI1TkVlb1hITkk2S2dLaWRJc3hWcllzS3kveGxEYmJSQjhaREs3L1lMY051VTNMV0s3Y2Y1M3Q4T05qWWJwQW9yaEo1c0g0QmliZTdiMDBpK1ZCdVZZRW1ndjNUS1Job1lraHlTL3kwZlNLKzMvNFNFWkN3OUtCbnl2QU9IL0pBdjI1d3U1UFA1WGlpbFZFZ01YTmhIOXlHQzhGSG1wSFpoaU55eitSN2sxOGN2NXhCRDdQeDVKWDN6bG9VWU5EV1VGV3V0SzVnUmJ3YUhRdi9KWll2K3F2Wnk5MVhieXdzcm12dXBvSU1EYnhySmhFbXNnRzBxMWlXTjFZaHErcnd3S0lZTG9qSy9TaXZZMkdsSm9NVnk2c01XbXo1RmhXdjRvb2VVTSthL00weVVZN0hCaWZRQkpOaDcxRW92bk5sU1ROTEtBa3ZiUWo0czYzNk5DK0NLckovR04xcDMyWjh0cUNpaTlGNDAveUQ3UGRHK0pOWDlvL25yVGdiUTZQUlZJMEFMN0RRUDdweTVMZ05NUk5jRFdlaUgvQ25HQ2JYSVA5RlhPVWdzOEJxKyswWEtnNGJPeVE5bjIwR1krZ2hycFE4VkxnUDFORG5wQjRkajAwVkdIZnNjTU5OblNwbnpGbkI1ZHFKdjg3QllkQVhNWVZoN0ZQRysyN09oMUplUk5GOXFkVmRlWVVaNXRHL3dyNHBFa3JIVy9lN0s3enNmdVFGL3lCNU8zVjhLb0RERHdWYkJ5a3RuT1A5ekRXSFYzbmRTcXEwdUtRcWk1MHUwa1V6QkdVTUhETzdueHM5OTM4ZkJiTFZqVmJRWEJwWVpTL2w5U3RiUG1CcXVSM2xScGZLSzgweGJSUDQ2dkk4eTRSc2xxRGFEZHpWNDVWZTRFeVpWQi9odWo0alFwdENac0hxMXdpbVNNUUtzWWFKQ2Y1WXBLNThUQ2RqRy9uTXdnbVdRcnFic0N6QTZ0ajJoN2hNQUJTaXRZZWJQTXZyQWtDTFR2cU1QNEZHNXRFdG92aHBtSFh2UzZjTjlJNlJFQnB5eXI5K05KRFVRc2djbUJ4OWFYeEdEUkMvVU85RWoveXlmaDJsayt6dDRhVndacW53N2RQMUVvcXdueS9GNTQwbm5tWjdTYWtDVmorVEhPYWhGYXF0Q0E4UEZRblBQV2l1RkxxcitocWhWaWx4aGIxNG84TTZNYTJEVFBaQ2l3emVYckdwb202M2pRaHVYUzIwdTd6Z1gyTDdLWTVEVC9iTUVubkdLQjhMaC9UOW50ZVpGWCtocEtJbERQNWRVRVRkbTlTVlFoVEliMkNmb0ZjVEoxb1B1NjF2U3lDUXhDQW1xYjVxMEpLWmtqTjhaOWx4SWFGNzVZbXZ5aG5rZWNGZm1VcEVYY2FUdWYvQ0pMdmprQUdYU3Q0S0NNelNZeDdLYnJnK2cvSFdQUDQvMnJjRzVVR2hKVkp5czZYcFJ0VTcwRzdBUXd3SnBCTmVSRGo3RUxyektqendpd05TWGVqbE0yUHpsdHNvR0xUZGRJeVMrUndIdTdVOVJVaDdOZng0YXJkdE1aeEx0YzhrcytncHhhckhzRkw1SjBJTFhURFY2UzJuWm5pVS9YUTUwNGplc0NFVHo1M1hxdUlmNnZuNWthMzlKTDJIbStRcGhhM2diMUZoTVFvY29FaDJLaE9ERFdKK0hqeDk5M0M4eTVlbHlyL2E4NXRXSlUyZi85QlowOXRqa2E2OEVvM2d6dHVCUTYxTGJHOTlwS2JWdDlFQVg5aUNoNE5EN2I4S2kvampmNDk1V1M3YVBGRDgrSFVRT3ZNL0ZTMytLdlZIeXlhKy9TQ01meVhIOThsd09pUHgrb2hvWE9RTnNvaXBZSi9ZVmNSZFVnWjF3V2l6RFJkR28vYXJkdFNQcFhXYzRubmlIY004eEVvUVZoS3labmhUY0VEQVVHRDZ0SVBPMmpOWlJ5USsxZkNaWTREL0lxcldOZ0UxWmJ2eDB1Y2FuUlhkM3lYeE1Fc0tXN05ucnlqWmZldGFGZ0NpMUwxUGdUSWpKcHRSVWJHdGVDY0hFQ3dwaWFMMU1menpQSWFrU2NIcUxLZnFSQjdWZnZnSU1YTDhsaGxLdmNtWGhwQmRQS2VqTlVHb3dZUEs5WWNTcGpRekFwSGhhWXc3K1lrYzJuYXRXOEp1U3kvZDVVN00vQjRMZTRFQ2I0SmhjV2pxcFVWY1Zqbzk4STNNeDUxallzeDJRZkdydkVLNDhkTm56MlhtTy9DYmNLYy9HKzd4UzJEUE5wOFpuMU9CeFJDT21jSjIzQW9WUk1KSW5iSWU4eTJCbHRKemViOWhMZ1J3VGlsR0lubWg3bThmM20xSHdWN1dSK1oyWndMUjNQbXp5andIVFArSTQzTDFIOElwSndiNnE2YU1zRjl6U3JQQXFQcU1kVDRzWnA5Y3hjWHc4VGp1QndnOEtNdHRmSXhpSmppeG5BdHN0TERXMkRVVm9PNEVPT3daT2FXOHkwRjJwWE02OXFESklDMGNhSFFoREh3cCs4ZzZMcWJ2aE5XYW0xM0p5OGE0aVBvN1RGMUVveVNwM2plQnRZWWxlcFJSYlV4UHJ6d3NjeGVQUlIxalp5a3QwY2I4RU1wR2hnWmRJU3dBa2I5UTFNZ0ltV1VSc0tselJaSXdKeDN2ckVwZFJhb3pPWk1iaUtteUlBK21oMERSalFvc1RGYkxpUFFySEdpZEhwZXJDVWJva0ZxSDA3UDZlSndrYnYrZnJoVVRNdzZSOFM0Tlp0NUkyRHArRnBUVWJpb1YyUmZwVFFYU2lLSDFXaXl1N2FlQkFDaGFSaUxid1lhL3YzcklDZ1BtZXhhN2oyd1hkK3B6U2lYNFpacjUrUk52c3pjYjFVWlFnQkZqSmhGWmtxNmFJODdYekVsTDk1RlFsdlpRVmhYWEMzem1jU0NlRmloWUc3WTFpV0ZoTkZRWjQ2SS9pNVhDbjVMbnZCRUpjUi9PWDRwZ0dBL1V2cTJaaEFGNGJWSzZEdHJ0cWhOdFRXMGRNTXFQY0M2MnMrM0diOStNaUFVeDZ2dFJyTWcxVTlxNFdtMjdueFVDWGd2aC9nV09qZk5xZ0grU3FYV0ZxSEJwT3MxUFZISWtSTFdvcEs1a3J5dDQ2Y3RnbE8zNVFOUElnQ2N5cUNtRWFmd0ZNMXhwK1hPWlczRGhzV0JZekVqVFp1Wm9MV2x4QnBBVmhJUmh2dG84UXRsazV6UWxqdy91ZUhlMVJJaXBBR2FJa0Y5aHpEUzhIbHlsTXRuNW1wUGl0SlJWVlB1Zmp2WjZ4RWdNREd0OE54WW9KWWhUZnIwMlRyUVNrU0hhUkdQT3FkallPOGJjanYwVDJSNGRrRGJyWjk0Qnp5ZkRLc0U1ZkJHQ2FMQjAvMHBKY1Bxc0tJVVVUTldCK1dVTUt4VnFBcVRoK0MrQ3lMYWYrR1ZSaXNiMU55a3dLN2JxaDJwQ09mc2tTUnc5cFRNbFlyVkNGT21MR0dQTFBEb241TzZYWWZxMjBQVC9TUGRHNkZ3YzU5UllMbWlHeXpxQ0drNC9nRUkyVk9EektZZk9iNmY0RDVjTVRQWDNZNmdZeEVFL21OSjhTWk5LOTV6ZUU4OVBFN1RBV0FEYm9DUnZHVFRFY0dKYXR1YmFpVHk3b1pGMlFCNUtISDdnNTVrclpUREY3eTRqZ2pnZElGc2lJSFBvM08yaktveXR0cUluZlE0VWxVVGxiN0VPTllZNE9RaUIzWFQrZUxXUnNvUUREM1hadEJYdXo4ZXpNQVl4a1k0U0FSM3lZbUVXV2tObGNySWIvZWV1Z1ZqVC9mUTdidGxaeENPcFlQWnJhQ3dadTY2TkpwSzF0bjIxaFN2Y1haM2tnSExPTXZrY1hucUJDTmVUdHgzZDBGZERMWlI3WmZYaVJkK1lpQ2ZrVEJtWGdPZnR2V1JlMGNyOUlWWTk1dlVKWHhBdzAvcm9EUlJzZkpYcysrR1djQUNHOStIb29NRTg0MDZZMWpDdk5ZZDFKU21WMG1IaVA3RHJMNmhGODNXdlBTcklMM3VORXk0SWZXT3dMTjNUTzVkUG1GdFRkVnUvQ01uMTZoeERoS2h3Ykw3cUxWVzMyUUVXeHV3cGtCKzNjT25iaStiREZ2TVVuSkZGQzRIUS85RENadFdGYW40NUZuQzc0NmU2cHdpZWczZ3MzRGNIcmxUQUorN2gwUGJVUDlxZ2hoUTZNeCtJYmhPVHR1Z2xqdnBJdmtrandsSWJkdmllNUVUVExPU3FIQnVJdGI4U2NMalp4bXhMTW5pbVkrTkF4MXlCbGk1NnZwRk9mVHhsaTZnZzd0UStxY3dGQUNUenkxa3F6Tkg0STlOSjRlcis5aGJQK3VpT2owSi9SZ1dpZjh0ZjZpcU5oQkxpOVkrdmJhNHprbjZtTFhrdlZPTnFDanhXMnFsQ3N6SXdXMXZTemFrS1RocUxYQ1lvTDNyMVl5QlBycDYvdFptSXR4UkdEZ2ExZm9TOWMxa1B3R01OMVd6MUtYYThnR0tvYnVqZ3NtZXQvOFpBTmtJN2gyZVJzN1VocEZiVjh6Sk5GUWFSNitwWDE0K04wN1FtRThXUkl3Skk2Wkc4QjdyS1l6d2NvMUlDZStobmpkQVJYSjdDSGltN2FDamhxeU9XQS8wUlhNWVdvYktrSmR2bGZYVGdVSHo5bkVPQ0VjeGNXcFhKUlpaTzZ3R1g5U3VOb3p4N3BBMXRPcFpIWmwvTFFnQWZUemhpWDJLMXNKcUgyZW1MWnFxRC84M2pxVXdnbUgyMDM0N2QzZlRjc08vNXA0czgrNlorOWRoM1A2czUyT2ZhWGJoYlJDcTlDdCs2QXZTWHNvczdJTkFSbUVHSVB0SGVMaVd5aTZNRWZ4bDkzd3o4VjJISElrOVVJeEU1MnFEOUxVZ3JNQmZQV3Nic0tWNmRMTS9EekJrejZnMXY0azBMcGVXeU9KWVc2UHd0UUdNT2JpQnl0YlBTL3dGZVQ0bmI3RU9hZGRzMDR4SHdUU3NYNHRBSUdwQVgydjZoY0U2eGI1WGlzenhXbWIxczBpUXc1VTNFSVd2MUhBRFFZZ2hQSDA5OEM2c2k2aTZaZjF2WmFNT1pxYUlrTGNXQk1VTGY2ZFZJM21pSFNCUnNvNDZVZmo0cmR6WW0wcFlDSkhGTlkyQjdXM2VraUFyb3dFVXM1eE9tU2pDUXNKazhVYmpkVVZ2YXlIQlp6cUQ4NlE3QkVJa0RHbVdPL2I4dHl3ZDJENEVraHRMY3FodzAyeTRkeFBrRTI1dUltNW5EVzlheTFwSEVTZk9yOStTSE5TZG9jNVdtdysyMzZRdHVLTHFnNStjeVcvOXhaSCtNZjFtMi92TWN1VEQ2YnoyTHdHUFlQeHZiWFg5N0Rjc0hlcHhCeVlOeDhiaW9SRTF3U3pTNi9nZ0J4UVBCcFREa1ZqdlhtNTBjNStvRWYwcHJCOVQ1TTdlS3NCaUJsekd6dUJIM3BDbE9YMFh0UjBiZFRFNFFjeXFkSC9RRU1LaERYRnpPemZGdmplM0xlTVVvWkZSc3dkaGdXS3FRenJVSElJM0Z6ZE56bFZrNlJFQVF6d25qTlhBQTllVkVrZ2xSbGJwaVlNdkdId1dpQTZrM2h3bTdxS0tPQW5PZG1jSjR6cDNLZjlpSXBVc3BYMnloZjRzUi91bXo5Q3Z5K2JIT0s4WE8vUFNWLzlvYjhTSEdyOC9tZ3gvVjk2cFdlS1MrSWlhOWN0YWpTaE4xR3dmcnJSbnJIa0ZDVUdJYjJ6M1VmNEFhRGV4aGQrR05zN01TeUlITUhQcDJSV0FsMDBZYXVSeE9ySDZNOEh4S2I3UE0yUDJCZXduTEFSc2NLZEtBMnE0VXIvcll3N0FxcmNyWkJRa2w2SU5WYS8zenRxT2o1ejZET25TbmIvRENHK0h0UncwZDRWMW1Pa2g1SDhhUFdERXAzZzMvVTVuV3gvL2VGaTA2bXV5WWx5a2VqR1djOWtiSlMrZktzaUhyOGs0bU50SDUvQWF6dzdoK1dCZ1NIUHliZTk5ZjlObDY0cDVXbDNUYS9ScE9EdDlmVDJTa3d3OHhxeXg1YW9ncis5WElYczJWVTh3ZmNlMEozY2c5dUVWYVprR2dWckNZTy9hZWNydXdPeThocGJldW1PbG9YSFlBVGFoeGZMdk5JL3FJYlR6M0FQMmxac0tnY3JSMFpXT3ZGVS94VGxpUVJKYk82dEdYendDcDVDS0hmdnkySS90Y09SS1FYelNPYmdZamNuSXJacHQ2ZjhMQVowZ1I2cFYyQmJTTTNxdHpuL3A3ZEh6dTNLTEpSVVc1SnRMRG82bHlVQytGenN6VUl1T1VYcmo2SHVlZkdVNHhNMlNob3gzUnQ3blV5M1krTEU2dGEyWUxITzNrZlhrUjlGZFpoZWlaS1NHNENldEVhU0JjaFVBc0lvWW5BZ0pvSUZMQWhWaFB1TFIwUE5iYUg4RjBtYzdhNDFkU0psSGUwZ3UzZ2ZrQXpMZDdKWWk0U0YvREZKbUhOQnN5L0hGakxUNDA1NE1DS016Yzd2OHZpWWsrZ3FiUnMzT2hTakI3dTFxa3E3b0RSd0NhUUtocUwvc3dUREJXVEp6dW9GZXNkWEd0NThmM3JQUGpabi9NNVBkR2Z0RFJTWEducUpIeVluOFpZeUd3MGlwcHdQUnZVOXh6RnZXNEIwV1hsZUk1TXVHOVBXSmphQmovMHJQV0IwYmxsTDBKdDJWdnkxajFxK2t6ckxsWEYxZHArSWFjNm1ZQ0pjRDVQZXlFU1d3ellQcXh5UVpad1h1MGNIMko0NFhmR1Y5TDVwQ3ZNOEVHUlg3TE9CRHJyZnBlY25ESE9KWGhaN0VnS2doVkY0cXN6bmRPYUhGRDd6cFJzeFcvWm5yL0pNdWEzclZHc1YweWFJVXFYVHpJUE5YZFVsYWZvOUtVQmh5QnJhTnZnNHFqV2lJS1dZZ2tkVHlxZ0cxVEFwZ2tvYXV0MWIvU2lzKzRxV1MzR2Y0MEJ3WjU5d2xHeDZDdVdMSWppRTFPTzRHUUMwZFlMWFRFOTBJTStFYWRydVBYMUtDL2pHK2dzMWI1R3pVeUVrNlBhOU52Vm1Ud2tndmFFRG1rWDlSRStJcmNWKzN3S1QvWGI1czFyVGJSYWlKZ3NoblVUTmlzcmFXYi95bUZTNnVjeDJFMUM2SGZ6MEFjYVNvK1Y2Zm1ObjRMbEpvVnNpYnJKS28rczk3dVk3cVE4RVl6K3N4YUN4QU9LcWpUUW1ZYU90NitUL3ZNMFlkWkxWb2hJRDcySm0wcGw3WnpYUW1JSGNQMFhSZlNGdURlT1hzVm9xT2hEWjlzNS9zbjRLMmUvbWZUdXcxR2gwbzlYdVZBQ3FpaEhVRHFidURuMktLdzVwbXVjRU83c0RtMUNvWjJkd1Y2NGJoY3NVTGx4Zk1QTEh1UEtwZnE0c2RsaGpzemY5MGlpQUVtcEFXRWpFTVA1eDFhUDFuSzRQNG9tWUREeUlsR2NlVHZDZFpPS2V5a2dHOUdwM0ZyNTRuRVZaKzVqSC9ZUGxwak9NTzdLOGNVY0M2V1cxVDEvTTRMNFZhQUFSdVY5Z01BbVJVd2NhRzE1WmoyN3YvVmxKUldINmVBc1pkU3Y5dTN3QmxRamMzOHlTZEswTTAraXlJYXZwaW9CemZmaStQT0kzYnVIVnRIa3JVWUV5d09zbktzUmNsbWF1NFdkQ1U5Y1IvK2kvakVuQVZpY3dmRS8xb2ROOVlCRE1jRjRzcmpIZ3oxWHQ3TERnSEx1cG9LdjVLUmxWWHY0VGZHVjVpcS85ZU5Ia1F2blVVVkNLVzIxNkdHZm5mMENnQml2S1VNVVl2Szd4SmRoNm1WUEx6eEJqT1FQUFJzZk53K0VuQkJmOTJzdzk2L0dDQ0lpY2gzWG5PQmZyaXNldkdLRlcxczRLYk5SK3p6eVB1eHkzWms3VXhFa0s1enBWNys3Z0RCNkpNVExPSDl1UDRtVDB2dVdIRjBPR0xMWm0wS2V3dE00MlF1SkhVelZGU0wzVlJ6YUVmUm9xZzJVTHB2RENjWjl2WTRueUxDaEtKYm83Ui9BckV3R29FZldSWU9sQ3FSNThrYnJmNHY3VUUvazdpamovWW8zaVRuSjJmTWZaVmtMUG1RSTNDODI1OGdQMWtPS2tuaHRhU1Yrbi9CbktScWhpdyttTWFMTDhkMGRVeXNIa0JNYjhtVHJwNmloaXJDaWFWWlJ5Y2tSVXJ4dFF0Um9TakRiNnBpeUZ6V3BRMzlkQzlYV3F2cDJhQ1ZnQzJtT3RoUXNLNm5QWUFrd01oMFVwbVN3Ukt5UlVRSjZQT0VKazU3UlN5OThhSEJxYndieGFQTlkyOU1XRXpxTXk2cW53aXlSc2FIdC9qTEY5RGFLOGlodXhsa1VRbllOeno2RlozWUFCWWtpeHpPOTd1ZTV1Q0lvMk1CVXArWWlseDJZR1ZvUzBoRzJMQWRydmp1Um9OVzkrWnhtZUJOcTI2TU5lSVFmbEFuQ2tuWGMxZnZpVWVaOTJLNkFzT1NVT08vbWRjWENRT3d0ays0QTQybE5OSjE4clYxUTQrc0g4SW45VlVWL1lFNlhzbUZGZ0ZQNG1OSTRGdDN2aG5lYzFFblJzVFhGRFJyL3UwMHZ1VmF2ZDM1aUwzZHQ1MHp0RFg0OFk0NjN5YS9hSFNPQUl1a1o5SG0xR3l2akEyQW0zN2lEZW9XeDJXckNvMDJGSUhYd1g2b2xlY2thOVBkdDNCamRnV3ErYUduTlFPVmVYWFluQjhsQSt6by9mMm1uOWhCOHlXV3FycVk4WFlHOURycUZHSExKTkRjdE9aeEpoZ0IvdmRob2V1amNuUXh4NHlKM2duQllrbSt0VkJNbWNVZlVCRzE3YVQ3MUdMbmlvYmRZcGI3K2tiSThSZW00Zm1tTVQvYVA5SHNsQWxVTjdrY0tVQmVkYmxwV0NQY2FUMFZiejBESUxZMStjQ1R6VmFoS0FFbGpPWWd5WEl3QTR5ZzVZb3hRWFdJa3VoNjBFdHRzR2ViZDJDQWUrVnNXVG02L2xHdEc0aUw5Q3h5TmE0M0R4WHVpdEtaQ2ZRV05MV0cyZE1TZHlxak9iQnJObXRjMTc5MUhvVXhVRFRzNEV3NHIyZ1RZYUVxSTRMYVVSTUdFRjdJOTFXNmlTMFhzNERFZ0s0QVA4ZjVQYlhVb2Q2WXVuL2FwN21pRzFrZ0s0SFlVOTJWOE9WejhXRkRwSTBqNTlLYW1QK3FpaVphaytCeUNFYWRNV010OGZDM2VKclcxbGZ3QW5GT3FFODFMZmJiSjdqMmFrMnNzV3Bjc25MY0RtWWkrTitDVmdkb1VLRGRQOHU0TTllaDBxUjVzMk4vM29RTkkwZlhRL3FIbTdBVS9FYTVoSzF2TUhxOStZTlFwdzdOcjBCeTBIZWU2eWp4dkZuUVJBbG1jS0h5em9Yc0oyTllCTnNXZHpiT2xlWkhQRUFkTnhpcS9vMkJXMXFHeG05TWRmZGFMbnp0TUZoMFA1TVE5SG9UcTlRelpRQkRxa0tncUpsbUJnUEdPQTFQOHhKNU9lZEJXd2hUTFJKLzBJY0sxNUNBUHVTamUwTWRPRHpMckVudDF4QTVPM0J4K3pYUHJBL0JZeEczR3g1a2ZFZnBXN2NJL0VtSGtYaXJVTHB4T3h0NWkweVFnWG5wc0RXZmFZMVk5OXhWdHZQK2pOOGxPbWRXcEU4S1hJS1BSS3hvQmxwTk9FeXpSVkh0VXRRdHl4YjNyUDZFVERPOWdXWFRjbk12UUtUWGJwM1BqOHNoRU9CRE5WbTNzTFRoMEJ5VU11eG0ybzNEdWl5U0x1NHJuakk0c1lNSFhQZGZtQWJVV1oxdHZvS09XZW02RnZxOEI4Zys1elpJalE3UG41NG1lZnp5M3pSWE1VTld4Y2Zid1kwVEhxVVpsOTc4UVM3SVlkSTc4LzhCUnBxRWp6Z3QyeDFVSC9JbWU3L08yTUlKN0IybjhKLzJsTXNDclpIWVpmMktIZEJ6Nmo3S0tVS1dqbEdYT0grWDNNenFyemYxdXA0dXAvN2VwMkZoKzlzQ2pvMVVRL2NFNm1CeW83RTVOQ2U1MTl1cmE2MFRGdmRJYlowUGJ4ZUhXajl1cytpS2RaaldKTzRGdXNITmxscXNnaEJhSGhPaFlqeUl5RHZ6QUFUTWowL2VPSStDdE9UajFQYXBZMldhVXlPWFhhbnpHVXo1Nnc1RmovUkhEU2w0N1VnaElJWUUwQURTV0RGMFdoZDRMcG9BUWpQR2c2L3BHK0lPT08yZkM1dGxOVis2SGp1dnljRnhxMVljMStKVklUNHdkUGcxTjlRY0Y4U3VyQkpLRjZoSkJGeW5ZQUhNMyt0c3U0Ri9RM2djYVNjR1FGWVVVNm90QXRJYUIvMGl3WU1DTWRhYXZGSUZSS1FTNmxNb0t2Q25CODh3MTkrNnd3T3BzTzdpVHg4V2RIWXZVN0xsUi9SMWNaUXZXRnI0dnJtQkJzdzhWRk9UcGdhRHprU2IrRzdFeXF1cmVQclRIRTc5RTdadVIxbnFWR25FanViU3pabXMzQmlKdkRTNGRHOWpwbUJvbVluNHVncFp2aHlBT3QySlR1VFZraEtMcG9QdVpXYjhRdFR5K3BYakNnVHcvelY2MzNsWTduc3IrT0lsbHlTVW1vOFU0Z294VHJLOXBoYW1Tb1plQ0gzeHpUTTc3dmpEU2lESHFuSHcrOW9yM1Z2cXFuTXV4M0Q2bTFXc0xQamFyaGRMY2lyN0t1VW5xeEYydGwyQnF3eUtCeGJvV0tPcHU0d29Mdml1MjU4K2ZsNVE1UWF3eE90M0NvZHFaTHJpbnd4M293c1FObFRqQUM3QlViUUFhQmVZa0JJdE42a2tPcmVaTjRsU3U5a05xdk9GY3E3WmlGbzFoUkxiSHpac1RqTWJsd1VUN3VJUnBuNDBjUzlDdVo2bEtFSnpNOGkyNmVDTU9pa3dNak5yUkhHM0g3R1N5WUxZUWthRitzWmEvVm1PdWp4MjFHRkQ2b1E0MHA4SXlnMlJJY3h1TW9mOWhYdHNOZERDdzhvN2luSVhTTGlTbGZDOFJvenJwc2J3NlpIdDQ5VHFrVzBQblZvSVlFVHNRa1l5ZUJnSmo1dWEvbGkybGdvT3RlUHBmRFlRU0lMbnc2blNhUWpTbWsrc3ZDbzE0TUsvczB1YlRCdjNUSUFkamlPWDBicGMvbnFQQjdOcGJmM2hQbmI3WTYvTWVGRks4RTB0ME5BaGpBTUpQdVpHK3hSa1p0bUpFYmVYZUlZQXJtUXFiRkZXUlFYUlRmVzJyN250Qlc3WE9lc2F6ZGdrS05ET3R4b2NrZlNCbnIrNDg4SE9VTE8rVXlaVTBLZHpGSHByY2Mvc3QyMWdQTkoxL0ozeEsrM3NxaEx0V0Y4ck51MEkzRmNmdHE2UXF1N3AzYk5yc0VjY2poMGFRa1lXZ3NZdldEalFWYWRmRE1RVU1CZDhzZkMzNEdwc3pqV0VFNHYvbU1ueTNZRUJuT0V6Zzg1T1crREtuYk9KR3h3R0dUamMvVDh0UFRjY3BJVXNOb3V2Qm1pb0FlVGttOE9LRGxoT2lFWTdwMkdDWmNxUUhZSmxZWDAzakZjc3pLUjdRSWZxNGpaVjRscmlpQ1NDYjBTSFI2YklkdElxdngvZ2lkUE5IWFZGUVI1NlFoVDE4NkIyWWYvUlc0ZXhhQ3YrcFhxMStYbmdjN3pudHN4a1RwUytJVmVuUVdEUytxdDhwYnpScWtRVFljakNPSStmZW84eEJFY1M5OUg4U1NoOHVOSEJic24yYkxxWFZLMnZxS09MMWhFZkhuYzMra0VhQUcyRUY5NjNXUElXaDhtMnJPTm14ME5yV1lIeWlDZ3V5ZmI2RTFkYmFNSlk1a1BpN3laSzNQdkp3V1ZmM3JleHpKcGFTYUUxQkcxN3V6YmlzR21IWFAxZVBPU1BPd3ptOG5hNnNkeHdqWTlVYXhNUjk4eERjbEJTeG9nQk1zMnlzbVo2K25RTWZ5NkRpVDBIa0w0VlAweHl5TmFPVURpT1E5akZZWUVTd1FLMVp2V1NSY1R1dXNmWnAwRStrQ3V0dUpXQll0ODJTS3MyVVplTi9yRHFFZHFwSXpveFozZThjTlZIMTM3ckV4bDA4TW1FNktWb3ZYanlxa0lrNU9SNWFUNDJ3OEd0b2lJTkF5dFFsT0RBTGF2L2VqZFB2SENteThlWmREQ3JtRCtSSnF3ZXVsZ3FGcFAyZjU0UVd4b1JicnRydkE2czREWks3eWdBbklIWTVoV1BhNm82dDgycGYwQXl4Q3lzenRIZXRPQytxVmJFZUtSaWFKNnMrNmhsWDBTV3NycDNwTk5Xc2FHMkhIY1l5a2tBb0xJRnhCYS92UzdUTWdQSElOQzFnT3RybStMZDFFR1grS0d5RDhERmhROHVDcFhFTWxyZTBObWhoT2FyQXpmd2tZUlRqMThzNEpQMzZIWUdwRjZLVy8zTUd5L3lOTXQ5ZjBOWjhuc2hCM2h6dXJ2MWd4QnFCNFV0WS9EL2NONWFMakc3cnl2dnN4RGw1OGFpTytEQnhGYzBzV2V2c2E4SEM4Z2oyYzBJei9jc2ZOSVhFL1ZCOHE3QUJVamRrbUxId2RrWDNCbVpEem5QbHRhc2ZSTGJTNWMzT3pFWlZ4VEdNaWhNUWtscGh1OEZjNjBObUxmOVdGTGh5QTFVTzh1QVZ3THZETVRJV0tsTTMrTGYrdVdkdFRUL296U1RBVHI4MHhUeFBkVjhNTmVEbWtTeWd5MWtDdzdld25rcUpHTFhRU0hRYkQzTUs2MG92dFZsUlNWNWg3ZkJOOS81bnBUdW5HemdWODFkU3R6RUdDdHBoV3QydS9aM0x1d0p5YXFtWThQNGlucTBSTjBiMWJkMVJQek9ZYXBkdDgyc0haSnArZ3lDWGR6SkhIVGhOM3hoWTN3MlQrQWkwMXVQZTk4YS9VOFBocituWlVKcHhtOXVpMzJQR2tvbG5jejdWTkhpRzZmYXVaQi9MQU02c1JTcjRWYmt3K0h2ZkxuRjhydVZKUTV4bmJyclRWdUhEa05RY2ljV2NyRFRrZVU2UnZ4SG9yS3ZyVTVqZkE4UEx3ZlNaZVowdC9DME82UStNT0pTZWxUdXgvZXlhbjJEU3c3emFJRGs1TW9UdzAwaUhzZzdmY3ErRnJSTVRDZDlHNFBDQVhpcU5NSUhFUlFlekMyVlpmL1lKdG1CMGphZ2xycTRZb3cyV2FucVovaE5POTJVRnVxbll1blMyMFN6bmVPa1hFcFpnOWJ5MStyaGliWjhndE1FQXpMbkoyTWhqcXpNbEJXaE14bmxTQ3pJQ21QNXhBckFNMkhqT2J3S2FQOFVwYlphMTJvdVY2Vlkrc3BtWnk5bm9WQTMyaS9sbmNJYVNrNGZUVThJbmFuSFlGeXR2K0gvc3Qvc2c2U0JIUWEweGhIZkxxamQ0V2JpOUJMOFl6ZzJJWDFqN21xQksxMlRaQlB0VXJEMkhLYWlRcVNvV2VlZ01FU3ZySVBnaTMyVXhNa3B4cFV6OUVMaVRXZjRqTTJWU1ErYTZrVnpuNFZDOEY2UUNpa3Rmdk1aQkdSYjlpVmlNSWZCMHVmQklBcHFZTjByYlJLVDEzbUZYanJsbFFwcG5ONkEzZ0tFNVpIWG9CZFFvcUhJbmZPVWhneG1yU0ZHM3RHaW1kTUY0THkwVXQ4RjFQeXJlT3RHQ2JLMGxCeVo0bi9PYjJ2cS9GeG9zcklVNjFIT1dDckI0NWkxeGNTOEtpNWFGNW1SYWpJN0FHSUtzb0VucUtQeGNDVjh1dG45YWlUWjEvOUN3WFdtdURLMGl1UStORnJualVxZUJUY2tMYVBTYVF4NGh5d0ppNG9PNktGUDNXNzNxVkp5TTNQenI0MmRCdHIvUlorRkdZTVJtbEpQVWdxQkhkRXRBeC9LR3phZzJOeVFBbHI4d09nL0FjYUxVQ2M2bGJzWUk4aFpERnp4OC9jTWhHN291UDIvUXhCUzd3U3MyZHpHZkZ3OFNtZkNQUjRDMzhOMTFWTmpqb0ZQRXdxSFoxWDBUZ1N1K2xPbDJUTFhPUUNsTzdZQjBJcksrSkMvb0l4MkdscDV3UmJOQ0NMTkc3Sng5RVRsZFFzRE1uZ25CY2I4eG1kNlVYZkpCNlJsbjFLZHd3cU9PWHF5L2RxZ2RudEljMzEzMzlnNVB0U2RGTENkWmdET3JTMGJSM0JVcWFsdlpna2FwaEpCNE5kcnlyWUtPWmYzbmI4TVorbmFYdHNZa3N0bHFOV1NMdHlwaEdlN2xwRUFFQkgrdTl2Q3ZGUEluNWlHVzcxRHllRkVVM1B2dERJd0xBRFgza3hlem55RUpwYW9aTExhNklybStubGdheUdrUFIxRHo4MSs4UzlzV1RDalJEemdxMUVHNktUcWdWVnErN2o4RkppSE9FS1U1bWtPRFV3alBya0JaTXAvTW9NV3RiWENQUFlmd1RJTWpmQzNydGhTOWVkanl0b3VGMnN6M3owVVVsVGtRR1hEVlZXUExLalNXc1pOZzVwdlFFNUQvSi9ZQmZNRkQyOENuOG1zR0tHa1FuTURDcWVQbGtrSTF1d3Rtb01JVVhYNkl4VU9VaFA4Y2lGUFhoMXVJdUFHa0RpcjA0QkUrRGFiLzhHc2lqNHg2RzBTaEVWSkNYVHpBelo1eTR3ZlZTQkd2cVEzQmR4MnpqdnRxUEYyc2I4WUV2QWRITHRiTWRjODFRZVNlbngyR3IvVERSUm9xeW1HSGRYUWVEellITUdlUGhyMjZHMGpVbDA3ZlZETDhta3h5S3kreTNUMFlKekM4TzRlWEpOS3liWTBLYVZ1cFYzOVNQV3I5MHlnVjNCN3ZFR0VSVys4MWthVzNzRGJOb05kalo1YytxeXl2QkRRMkhQYm1ROTY4eVZuMk1MK1NPaFZURUNkNjMyNWJmUFV3Vjdld0Erb3VVSHl3RUFTMFBYNExhTGF5MkRlSDFHanNiWVU5RVlJVVM0L09CNEJER1dreWZQTGs2SXY3b2ZVclpwYnlDSkRrSTFoQkpNbGFZM0cwalVCQXlqVkNFVUViZVBrZjRENGhvMWxvYjJOVzd3UUpSM0x3b3Z2c0lRWTVnMnczWlJBWUN3VE5QNzBRK1ZETzJKOWxEbC9BYis1VWR4YjkyODNFMG9PYzQrRS9CSHJxekJIc1Y2b1N0bk1OczlsSzdUVThsRzhheDNoU3hrR2tSQmdZM1FZaXQ3ZUdkYVQ4UGdjUGhqTjZMTDFTb2pBN013RmNhdCs0T3cvMlNXWGFpK25JMEgvWU40b0NqN1FVOUUwczIzZ2lqTTJaOGRiUHptdmpNU00xb1QyT3V2WllpQjdPM3lrSVUxVkVlUWhpQ3V1eWxjVEFQS1RzWTM1VkhnbzFKUEVZaHM3d1NrZzVLRXpDc2k3SmdWa0dFdWhMeEU4Lzc4aFhTYk9FUk9PTVA2VnltNzVrc2NxRjQ2S25NOThLVVgrVWJSTUN6SG9BVXdOU3E3MmpjTCtTam0rQmtVYnlZZ3Y3WXEraUVtTnp0U1Z3VEV6NytBcFhzK1kzQzlxWHNRUW9qTi9tWFFBR1VTcWFlR1VMTTBZaFpwVks2UU1jNGQ0Y3BpeFIySjB5R2E3Nmczdi85QW1FQUVQVUpwcFIvYU1BOERLUDdUVC9KS05Qd01LMlBFTjF2dzNIU2tDVmhCNVRYWk40QVlqd1NTV2JlckJVM0ZoeUlsenBUMmFHUjE4WFZITTY0WDYzVW1SbVpLc1dYMHFaaEsvQmtUaGRyUEtOUVZUd0tzQkpRVG93UERsQnJPZ2pST2dJVUo2OUtkOTlzSTI2Ym1xbEN3VEorTU94ZDMvVEd4Ti9OVjBnYmVNRnpBZDRVVUd6dmUrcWxlU2hMSW5henRjM3ZyQ0FqbWp2MlNRaXN6Q3Y5SGM1ajRqaGxPWWpSTndsdHYrY1FIZWczckdxNUJVcXdCbDR0ZGh0S1VuaTMrNE5aZDFPbUxHdndvd2dnR0VORXJsTTNjdk9MeVJRbDYwUFVOYm85VFJ0RDE5M2liVUZ6V1paUXNKM1Q0bmdjcEl2bFJRcll4aXNoUFlieUYyVENzQ3JJSEpua3R3b3EvaDNra3k2WFRYcnp0M2J1cE8rVnZ6ZGJ3UUNXWWhiRjQwam9HVFdTUC9rYTd6MlNwcXBrWlhJV2xBS2kzZUovMnNkU0xZL0hxV1VjUjBZeEZLN0ROQWR0VENkbVRhMkFVVkMvRGF0dlViNHBCSW9UU3AxMEdISVdwUXRqTVMyRkhuaDg2QXQ4dGtJTTBIL21kVVFYSzJKaG5tZWRzdkRza0tSR0tkVXNFb2xWVW9mWGtYblZGR2ZLbEpXSFBiRS9xdjNUTFlyQmt4TG1VZCtJQWp1Rk9QQUprMytBVUNodEpLOS9nUTlyL05ZR21IVHNFS083RU9OU1VXaU9EODZhL25CZUdLeGV1ZFE0QitOSzFtYVAxeXI3cDMwTHBLWjBzRVRtOURwcWhnNUxrcy9RYjN1U3lEQ3hIWEh4NzlRUDBsRjJJcUpjVy9qNE53N0VLTkNvOExKRDBydllETGdSdUhrbWU4aUtIK2NGTmh0cm55ZlMycDIrZEVMM1NRaXdlU2lRSHdHRkY1WVFOSW5TVG5WeVU4Sk43bDhnQk55elgrSXJFTzZFZFBkZjJZbk9qc1JBNmRuWkcvaHN5TlNxak9VblEvSjVodTQrbVo5SFNFZGRGWDJPZTc0aTkwVVdWOFJXLzFmUTNMSlNEVWU1Y0RBbzJaVHBVMTBTaFRqYi9HeEZUWFUxQnVtN1kydE9KeVZ2aTNzYmRPRDNNS1hrNXM1MHVMVGgxd1VYVXpKL0xMMWpOMzRMclJmVTBpcmNoUS9tMzBjNEpUOC9KY3F4RVdBUWFJOVplSThrRDRxcUtVVnpTSWowa1dGSzhLOU43QWNWVWkzeGxlZ0NuYjBCbC9VTzllN011eDU4TzNxdDVjQmZ0VXB1WXh0bnJWdXk0cXUzTmp2bW9xRXlENXRTcFRFZ2hEdWFnbGlEcVB5SUJHWmJrdExSbTBoSkdvSy9MNjZWTTM4Tk9EMmVyRTN2VHBBVjVicVI2Z3VIcUgzeTJXclpCQUQzVEJNa2ZYVXZ1MUYwSzNrK3U3UVZHeWFxaSt3MktOOWtYVEpoZFhVWXF1dG1NMzRGeCtESnUxbWlEQ0RRZW9JK21DWUNpYTZCRStsY0JiOHV6ZkpHa2pvdEt6eEVmcWZLRkFCUEVFaVYwRlcvYk4rSk5jM3V3SkpielhwRlJRaWlXb2RORTlEcVA2VGwxcDNnYTUxN2d0a3lRVHloZk16MkZicW1JbnQ4Rk4wVGd2ZlJlR1dSdm1CWlB3bnFLaldkWnpraWtUdDhLRkFlTHRndE5oc3pHSm5LWXRGUVpjeEpGd0RLL3dTWTl6Tkk5QWpiL2JheVpML2d6em9vVVRUVGJWTkp0TEF6bmhUVzdHZ04xUm1LQit0RjhCYmNhT3FITmJaUnhRdjZYWHBTcjdINEZrTUREdWVWelV6aEp6a29hNGdSMm13WHIremFTb0hRVFVYTlJ2Vm5ib0VpOWo4SEx5U2NJVFV5QWxjd0hBUkladkNqMk1TMEVqWGtZMkNRV2RaYkxYdVNKRUpNZEI2bUNsOVJ6b3lCdG9XUk1GNEsvUUZEWGQzeUNPdS9DRktkcFRmbEtCWXhVZkZUeTJSb0dQYy9PQTArV3FTcS9ja0IwdE81VTZPV1NYS3BJZjhuZXhXK2tsdXFMU0JWcGs3MnAyQmF1MURLZGlUQU81QXZJVEJNUmRYRmVCY2ZhODIvSkRyRGVvTUx4Y2VTdm16RnBuN044dUdwaVVNbXgvaWs3UWQ3YVhBL1p4U0h3NUttb3lqS3FRckFyUDBFQlY1U2tYT0FFK0lmZ0RORHF0cC83YnZUc21ZYW1GRjRkUTRhcHRka1d6V2VlcThIbUREVnR6UGhLV0VtQ200TWFsY2Fqcm1IZ2ZzUzF5WFdGaVNnS2xPeFhIN1IxazZGQy93QkhpK3l2eUloYk53Mk9jeGVObmIzSk1ueTdBWWhnUjJKaFpsTXJpUkh0dkFkcjFHa0VkN25SS2lyUHhxMjFudWxIUDRFTnBTTFdNT1ZTQUlWd3JFN2tBRitEWEl6RDQ4UnJtT3NkTklsVXdaZndGUmY2aUk5Wm1CYjdNNEpNUHJHTEpKQkJVR3Y2QW9aOXBSRmpRY05FSC8yNzZOOUg2MTJRZGM4MjA3bFJZZFVPMFJKN2dQanA4U2tncTFPWUJTcUVkaVR5ZnNScGVOanJaUHJ6c3p0YXNaQUp6QWJkN3VwaWRXZ0xkTVlMbU85VUtBVWR0WmpuS2toYktxeC80UnJHTXJLM0dwMXlGQ3dsSVBYTTk0RTJrYVM0eFZsaU9hb0llNDJncUY3dEdKUWw1UzJJS0tjM2pyS0w5dWYxSzI0blN6OGRUTDVKbFp1QUluVjZzbkVCM040ZE9TaEJQTjBaVi81WWpraHFzV1dkM2xyQXRRVEhHSnR1amovbkREb2J0ckh0MU90TFROdkFHNmVFTkJKV3lqVTBtWlRaZW5JYklDNDVBVlFHckhMRWZFRGJxOFhLck9YYS9OcW5mYlFUc2kwbVNuM1R0VURVNlR2RFA1QVlZVnUvMWh0YVY4Z25GaiszWGhxUituYmo4dm56dlZpOWNlT1JyRjBBVXdUSFZRRE1pVW40WmVRaWxHRWFPeW1TUTZseHE0cm9MbS9GZEhNS01naHNoZTNLYjlyVzhhT0k1SWVnMWM0cCs0Nk15NExaZHZnNWhhU0ROeEVQMVB2dEEyNWI1T0EvYUVBV2xGcVU2NmUwSXM2YnJCbnhUeWRacmoyWDQ0eVd6ZGd6eDBjQ21yTjk5aEVKUXBoQ2V6cUU1SXpDcFpoMXlNRTdYQTRmSGV1SzJ5OEpKckIweHYzcm54WHdxRzRzN2diL1dFVFZYdUxGaGtIRzYvaTRKREV2VSt6NHFvSnErVUxPSnE2ZVlzSlNvUW53QUhrejhRMndQeVpOVG9KTWtXYjZKdVFIT3hGTlgwRElyTWdGZ1NhaVZzai9CS2JRV3U2TEVneEVwZzJIZm0xRmVPVzZ6K3E5TitzZ0MzR1ExSjhkN1ZWelRORFo4L25CQjJYYno1Z21FVEZzSUllWlR5QXNzMXBuSVJrWm50WHMrWnBBMHRSN0pFYVNCSVprR1EydGhBRC9OaDVyRnNpZE9LREM5dHBUd3FDNEtXRUNieXNNc3JhcGh1QStqOHd0UERYUTRmSEU5YWhvZkRSUEQ1a2toRTVjczRqY1NSakpMWjBUZE1JMUtPTUtQQ0VzRHoyL2VpUXhGNVJubU9KTTRNT3M5K0d6QWViR3FUc2tzU1pxbDhGWHJaWFU2K1hMUnNlc3E0c0tldmFHY2dBK1FRbzFEWWRzbVVhMlJ6ZWs4ZGxaeVRqUklvZjlZNmg5SGtNeUtJczQ2VGl6NW5hdDFTV0NONUpxL0dJMmZkRGtodU0zYzV1c29SZElEUkVRTlNvWHFtWjZpeEMzTGlUNm0zN1p5dkc0a01GSW0wRG1SUDR6cnpSV2ZBT0VFU0dPcXdva3dwMW9DV3Z0ajY3L2JTTHF0cHcrZThlV25WNTNXdTl0ZVpIa210eUp6QVdONHl5eWJPZHgwaDNoSGhZTTB6ZVpMaHRXR0ZoSE9QRnI4NmZhL2g0NWxCeitQbFRUbzFYN1VyRCtGV2VTN3l2L2VraU1EbXFxWTcvU25zN0JYcUd2UXhkU0dYWVU4OHBHNUNoLzFpRWtwOXcycjZySERGbTEydjI2YkZNalBaODZVbGdaZjFoRWJtL01mc1JHTEpUTjRta2VSWEhDRFVteTMyV1dmQngwL2tBeDJmR2pVUTZucVRGQ1hjaU5zb2ZiUVRlTW1KNFhqVTh2WERlanRiZ0ltRFZnbllsRGdUb2hiZFdhY0VYbkpNNTV0OTI0OWUvKzl4SDl0bCt5aVRtUzcwMnRQUWYxYVlqaUpoZlp0aFNMUzJrODRmZXJWc3FINlVTUmIrM25vL3lHQTQ4TkowdjU0ZjBFaFdFd0ZTaVZwbzAyc1IzSmNzZldCRFdwQStKSklzOWNNaEtwU3U4V21DbW50WHJDT3l4eWR6dE1FV2JGSGVBdGtiMWV5d1BOeDV6RndvajFWKzBacEpDaDU4TWU5NW03cURwNVRTVDlxVmc1M2ZjS09WVTRWYmZZMnQyZVBRTC9KbWRQU0RQVnZEZTYvWURyMUVORjluM2tkam4zNEFDL2t5dEdzbDViSFVYUmY4eTNKeXgrcGF6MHZoZ21pSVpqSElSZE5OS1hudHVoaVNWNVUwa3BWRjQxeERMQjQ0R3VMQTV4QiszZWExb1ZVQTJMQjJySktKdDg5dHg1eHJlN3RudEpTaDZGZUI2bWt4UUExaHlpZGtxeFo3QmRiWldvNVVBUW9nRlpkdW0yQUQ5RzB6RFMxUFVvTTFTQUtVK3Y2T1oyekkwS0dUYm96elA1Q09qSFVyR2xTRWFSS1lWdHAybWhSYWFYN0FUOStVREpSN2x3TTRVYU4yZHd4MnNUMnZQaE5oNVF1ZzNUM2JsYzlseGsyaVJheERHM3RVREI5Ri80QUVmcll0THlkTllPd044Qm85U2x5eHFtRjNEZWQrcWxPbFNSKzhUd1hQWkVKcnlJc0IvQ2hJbEovQURyZTVpQWFFZ2UzSUhIRHEzQ1FkdGNqbm1teW5wOE5JNWk5bXFLdnl0WE9pcmRCYWlmNHdVUThyVWxYVDJWUFJxSnh6Wno1SURFd2FXMkxEZmthNDJtbEdibWxSbTBvaEt3RUttZDFuaFJDTzl0N3JwMi9QcGpxRDV4amVPam0ySjVETGdkaWcyL0lxNlNJVjBJeDM5SEZzTGtzK3BETHpORTEyTzJvRVdVZXkva1ZkeEZpdDNCdHY4cExRaFVyOWs0OGsrcjFmWmxBOWF0Q0haTysrSEUyTUdxQ2IwcG1uY3F3SFUxRGswL21aUlN1S3BFQkwzbFdjTkJuN0ZzdHJvNlh6NHpIcFFjQTQrM2xhemV0MThuQ2s5YnMyd1d4blViTnZCRFBkcUNJanFjbGNvZnBReTNUZVltWlhMYmtnUjlQVjg3QWJraGNpbjdhK1Q1NTBRQ0JoWXEzKzhLR29rbzNlTThITTIvencvVVFSQlBkN1RsRk9NWVJzWFBxWmxubUhEaWdnOGNRRnorNkh6anlzbUFseEhDc3U2V2lyTm84WlVJU1NsVWdZZXJYM3YxaVJ3QllUbU1BRkpuVXR2U1YrbElNMkFvandvSDdnbmF3aTBYUFl4QWxLZ2tTcG9rNjVicTNrUGpIbk9Oa3l4c09seWY5bnliVllVRVJDOXB0MGNEUjhZSUZSbmRxcDBzVWh6NnFnSDNRTjYyZUluUU4zWHNvMTRzdmdzSXQ1d3htSnBUTjNURFBFU2orV3BsSzc5OFM5bkVXWHRJdjBXSWlINkxrbHVISmJybnkzY2RiT2U4dExyQncrNXRiWlNTY1hnZG1Ub3pQeWNHV1doQytPTWJ0WXU4anRnTFplL0U3bDNvWjJhUzYweEJMTFF1QjN4OUlIdCtpSDZURitrR0Y5MkdQaGh0VGJoWXRnaWlFYllScktXa0RDTlgwSllVUU5ZZC9FMzZvb0tYbkFUT1MrUGl0cHgvOG40ZFloS1Nhamx2KzBuMWZaVlA2TWZzSFBvMlF4U0tFd0luTDloa3RnRTB1QjNoRGk1UEptaUh4YWNkU1pmQ1BydmRRdTFwclBWMWdibDUvek1FZWphcllYdU9qUmo5a3NrWmJFRHpObHFRVHU3VGxkb25zQ1FtMUdySmE5ZEt1ZHJOOGxSbmhrVStOd0srVXJjVTdzWGRFNmhWV0lBb2doU3lCYlNELzE0andpcjZ0YVNQL3dpZTVuR1pramhpaTNIekpETkppTXhNY1Z2a3BmWGYvRHViU3ZRVzVvU3dCdy91ZzR6SWRCZzBVY1NBS21peXZ5RkZSVlhvMlFmWlFwL25PR3pZZTNzRlJ4anR3b3oxc1FIaGFleVRVZ1UrZFllR3NnY2daaDVHZWw3VVYxRjJJYitKWWZsbHl0NnE1VEEzY2FXSktxQ2lNVW5wT0RvaWRoNnRRMEE1TlNsM3VPcnVkMmgyVE1sb3VjVWJGTVlhcitIVzVWUFk3amUwOFFFNUhsVllDeDF4Vi9TNHpPejNqZHZGVnBHUlNqb2xxUms4Z3hGaWJ0TC9KTXpTOWNvTUdMMWRZRVVmdDIydzF2Z2FjTVZVZkFrVW1DaUhEYmNBMytjcEhnTGZHNFRuZUxNMmZCV2hjbUZhczVOb2ZBZ0Y4bnN0MjRBKzJ0ckVWRWM0aGVLTW1FSHBNbXlrcmFvYWswSGhDSVcrVHBRVXZ5dWFhaE9mRFZBNmMyYnN6UlY5SXpiNXRYUDVydlBUSHZ5L05LWGNOenZTaWYwcElPcEZhQjlFbGpaeERrNXZCS0dXSGVxSU81TVhOd0hnUnZORG9XQ2lRZUNwZzh6ME1GMnVKR3haMFc4OThYWWdNQVk5SFVZMjZZNnRZZGJYTDV5S2dmb1I2NXdobVJuNGh4Y0VnNWZlU0gwdU9XUzE4a0VBa3JDTDdtS1JPcEZxc2tSTVJwYjJhaXZSaDlLT0ZXRHV6WVZvVGVUMnlxaUlQK0tIN2YyQXFsV09KVnpPMnBxR1ZrMHlQbm5RM3RkQU9jL2V5YW1kMDdpSDlJUkUvcE1mdFVOOXduKzdxcnBiSFdxQll0SWtydFVaUDJ6Q28ySjhhM2F6d3k4UmRtbUFQaDdPejROeHl0dVREK3FCc243OC9Gdkp2M3NrUGJyL0pVb1QrcGtVOTFGb2hlaFpxOVdzVzNrdTRGY1BjRDdmTGVyZURmTm1ZRU5pNXI1ZENOZHpmNmpZUFlPeHBGNUMzYlpMZEViY1FzdUFmWXZEWlpOUHlLVWtoemRQRGUzMGNFcFJEL3N6Y3p0NFlGWlBEWjA1Z01OUzZ6cFgrY2FXVU42dWtzZEUwY1FaQ1hmQWkxT3hYUlhJT2VXcTJwd2plaG02Q0VJcXdhWWRwTy95ZGNVclArQ3FwckpVOUVZQVNsdWxLZEFVL1Y5ZTQwbjdLV09uZWtCRDJDZDNmSVhZUjBQekkxNG5GQ3ROeUF3dWZzdDI4d2cvTUNIWThWMFQ1b1djeE9HcGZ4T1hHK1NSMXlkV2grRnhtNG9PaEpvTWFPWWx4dFFNSE03ZmRHTWVlakh3YytyZm9KQlhsLzBtbkVkZ2ovbzk4NWxzZFVSK3cyakVKNzRjWHQvdXdTbEhKUy9ZRkl5WWRva0JVUW80dzhObUtSZ1BJYXZ2UG1Eb2JvRnJUZ1NZQ2tiVDgvV2Z4TG9NTHdobjkwTGhGRUg5WUlNZGRUb1dBclRnYVJPRHFacjNlbUUrUmcyZXZFcmQzVkV2YzhjUUUrTGQwYmJSTVdzanJ1VlZPMGhUVmdlcHM3a2pmcXVmVnFDc1FyRDlSMWtGb1RTVzJZMndQeWtEanhZMUNsekRnWGhsejJ0TldTNXR3VFA3cWxrM0tjMWE4d0lkOVZiTFFUL3pqY2RxM3dxNDA4SHQ0L2N2aUVEMGpGQ2pqa0xwdjNZM1RTSnlxOXF0TFR6b201c2dtZTMra1ZUeTdqU3VoTG5pQXF3QmJPVXJxRmhjM2VHbGx5Q25jdU0ycE5kd2Yza3FTc1c4a0ZGSHpPN0d3eEJJcjRiVzZuZVFYL2xwa0NGaWlOQW8zb1JLSGFWMVFmRXNHSGpMUDZSYkhPUXRkUWppcXpINzdnUm5XRlVwcVNjdWdDeSs1QzVTYVJBWGV3UFlzZjd1emZCWGFsNlFPNGI4NDREK3lVcGI0RGhlUFRseHZhVUYyUGJQRTR2Z0NjaU5MUUhmQTNuc2pKUkNWSjF6dkJ1ZHR2Y2ZaTFYvMmpIV0s2Z0VIM1BhZjhCVk0xNHlWT2xQQzNqYjczeVRaRkIySDdya0lsaUg0U1FvdCtheUlsS2JHS3VhamJCdXhUOTMxaklpaHRlVUZseTVpd2k5bndxaVUyR1hJSkEzVXdmd1BZRjlqaFhnVjRpMFVDTzEwS1VQUndGQWJuTW1nVHZkcUpyTkFEUGpwUjVhMHdFSVNoYjErTmNZOE90NXlMYlIzQ2RTa3dOQ2lSVmVKNUFTQXgxOEg5TkpVR2NKRENZQjc2SWZ1MEovZVJqSENxUnNmcW9nWEMvNEZWdDZhcE5zd3BaQnVHaXg0eUF0ODBYMVF1a3MrZnMwVkNHVEtNaGtwbTJ1L2JDQmNSQXdpUFNkTFJJV0VYQnNER2c0ZVpGenI0U2lyZGJNdEt0US93V3FyU0dIRldlaVE5bk5RMzFQN0dvQlRNdHFrd0xWV25HNEVtMEx1QXhyK3ZTTlZqczVlVDJ1dFNwTjFDeGx0L1FuQ3IxQVBvS2s0Y1NmS1VGMEFDajg0dnQ3elpqL2pJZmFsaGlrUEN5SllDaDl4Uy9YR2ppNndFVjc2UHVkcXUvaU90UGV1ZjFreERNbm1CNlJjWVNtUnNyMk1aVElzd0JVTmNRT093dUR0WHdRWFNjazJHTlU1dVVadDdsQkJDUjhCMzBseUlEbGtBNVl4cDRLbEZQeFhVallnMHdCU1FRR3hQQlM3UktSZ3gyREg2ajlPNkpiQWNWS0JUcWt1NlIvWUllYndVV0VYK2JEY1NtbmJxNWRROVFrVFBJVlI4NG5kUlRIS0xIUXJSQXhmU3JpTXJYNlJwY1prQVZqVFNqbVVmRVUwQVBHVm9YV2FYNjRibTAvNDdTdXNRelQ3bHROTHBzckVYZ2JSdzdtb1FYOGJYdUJWWktMUis3R052S0JKYWRSOGNDZGZnTm1hRjRMNWlyc2pNckdySS9OQjZuNzMrZ25VZmpLMnJJMURMN3lPU2Y3ZDFIaFlJNHFjRGVVVkhlcXNONXo2TTBwNnJqaWYyS0RQMkdiSTU5d0xRY3JzMjNTSlJERk5OWXhpKzJMTmRwQ3FTektqK2pEQmFtR0JVandTMnBBNmErYmtkQjliNVoxUGVzaG0rMjhKRnpMWEtFYkk0T0dOUlZuRDFGcXMyd0hBWEcvSGNvbllzbmNWbE1UM1cwOGZzOWk0dVlXek5xZE8wZ2pzOGNsMHN4czhLWEprM1VYTGszWHhUeGQ2UGdZMjBLakpmQjhlSldRaTFuV0ZNOEc1cUkyVkF3RCtDK1kzUFFCOUIrNSs1RXdVdDRSYmdzYXNWTXBVY0JORW5WSERQdmQrVDBjYnlFdEJiQ01DU2pndnZmUUZFRFk4MUhDWFYxV0R4eGttTGxZTll0Umt3RnhsQ3BEZUUvWHIxQnBoZUFFWFVUY3U0NHBBZm5xb2dsVUs0S2h5ajc0WW5tZUppQmF2b3oyekxlcWlJdXlwcVAyZ0I3My9vNlJ1QUhBbnRXQjJTWU5BSGJWK1dQdXQrTEkyODlYTm5rbUFITGpMNWNURFNhY213MS90MzJ1Sm50WDhOWHloVFFGaFpZSGJvSWFXaUd5bHgweTlFNm43VjZQNGovTGEyN3VHNTQ3YnhMYVUzSU5rWlBvT3I4RW5aRnpBVzFZdnUrOEwzaW1DQWNYdDhDeWx5bG9RTlpSTXZsRFZCKzdXYSs5M3FLcTRlbkNNQ202Wkt5MDg1K0FXSVl5QXNpcDgwNXRadmdPNkdWbWlxNTRmelNTY1JFZmdHRWZ6RDNYK3B4d2JOallvZ0d4cDBuOS9FOFJCc2ZmUkNZUWhtbi9HSjZKKzRpalRyL3FwRUYrT0g5TFd5bTJkNXZrUjdWNCt2VngxVVBHa1JVV2taY3FHK3hsUkNJZ0Uvd0JxaUdaT3k1Q3hEUkx4ZEE3MDd2NkNydDN6MTYwaUpEV09Hc0QzVitIS0VHSi95c08yMmp1Y2t5OXp2RVk1NnZza28xbi9TTGlER09PSGRJeTRIS2p4L0FESnRqNmNLYXBXd2xkc2JoVDlWa2lTeVdiU2FKMXZNNnpOYXUwQWRabjVEU21oWkEzUER6L1lBdksrZ25FRnExTDVqWnlldEl0b29helVoaFEzelhTcWwyRXN5N3dGZzE4L1p3UXh2cGlmWkdUekJ2SXVsYWdtUDhpNWFNYzNmY1Q4Rmw0OE9hMVdTaTFHM0JwR0lpVEZUeVNhSjMwem1DWG1IWnBRQmYzTEdPcnpEZ0ZkTHNCb2tOdTR1aTZLY3BEaHFXdnFrVk5DWWJFalhmZW12N3ZWbXRjY25XVFJtOWhGTG9MM0UvcnIvbGNFbFRpQ1ZEcVNDRHZxZlJqcG9qbGZzcHNFYkRzTEhEcndiMStPcnJwRC9mVjBlRzNTQ1M2czBGUysrcWNkZ3VPT3lEUENoTGdRRVRqQTA3UDNDeS9KWm1wRG5pVTU3VENhVVZwbnJjMWFPQmVhcngwc2JmVWQ5cHNJNytIZGszMnNiYWFBUk5vbG0yaituMjFUNFV3SHRnRHN6U1JCOUtxN29aWEJRaU1rckMyU0JRUU13QXVPM0w3WVFIZGJ5bTBrVUxoQmxSa2FLZE9OdEM0bXZSL3RBd294U0dtRnNzdWprZnNERk94M24zenBBZmtGY1dRVzcyRWJYdjhNZEE3UGN3QjJteS9XL3l0cjlaVDVKdEZPWG40SGl0NjhwNzNONllJR3kzWUhjWXlsUVJQUTdVcmV1cDFPcERSUWZ3STV2M1BhZWRjNGlRNFViZ2QwVDRZdkR3VEc2Sk13M2dZSGJYSXB1MXdacmdnNXJ2RzIwL1hPWUlMQWZCYUxjS1VheWUzT3l2TGp0MHZYQkg2VlpNWThQN0U3K0hDNWcxclZPVC9VM0VBZ3NoUEdZZjRIeER5ejBuZnp5MlVnTGpFazhiNjhzTjkxRko3ckN2YXJTeDdBcFVBL3pJTWFlbWpoSjRpbEFLSkdzNUZhTDRSZFZQQytpU0FlNWFwbDR6Y0RZMVR3dVlzM0tCMnZSWXdseFhkNE1uT0trMDRxTE9LSC9nOVRkbSsvMmNqUnEyWDNYRmZzcHlXNXU2bTJmVVd2YnJJVzNRSVlKbC9RaHp5VUxsWVMyTUE5d2IzZWdWc2kxS1hvV0tOUWpDbnRFaGxhTU9PQ3k5OWFjalZ3S21qUVVOUDFuNFgzUDk2R1V6OXJ6YU5BZjNHM2hVU2hGYUhjOXpGNHZtZ0RsTVYreERhTjdqZk1kWHZXOElocnh2M00zMHBpK0YzeHZvV01kWlB3NVdDWTVtaSt4Y1JyNUErbHRvQXBPL1pydFRJaFR2U3RKWjB5bnlBcjBHVFNFcWovcVRpWkJXYTl0aTh3ME0wc2gxOGdjL09GVSs4YUQzQTRNajJMY2FoYzNPRWZ4bUwwbUp2WU05bktrVzRuMTVQYXRBR2VQRGs1YlkzNG1PRjZkdXNKTlNXWmlHNVZkKzR5eGdGdmFicjZOcUxEMEx0TVhxQzV1WGVVTUNsdGtRVUgxRjFKVGNUU1RzZlEwTjdpMkROVWxXTGI1eXNQQlQ4RTRqQ1IzZXRlZmJINnJnVi8zTUt1bHlMOURySzF2UkJKTjlsUGt1VCs3dkovWi9VbGwwSGcvWTZIWjd0MVJEdkllNjByVmNFaDNMdkIvSVBkaHBTRjloa1BEdFpKQmY3YWlvNjY0bFVVQVNpemtsZldXTXZUcmNDQVRncUxhTS9pc0JLcVRSa0xMUEdDeWpZUUZ0eWxSR3htT0JUZWJwZ2dYZ3ZheG5SeGpzR3pKZkhKS2JLUmVTUGZVdEV1UjFJNk04MURnM09ta2dtN0FVZm15cnVtSzltWEV0eUJvR1NiNmpxcW82ZGdRUTdzTjRTS3Bxd0FJR0JBcGNNNTQvTmdjU2h1dHRIVENuNTdnbmllYWVobmxMc2hkTk4rZy8zVmt1L2dVUWh5aUduRmxpVVFaV1NYelRlRlNvSy94UHNyZmhLeWl3WFVzbHNLUyt1bkwzWWZqV2dGdVNpT3RyYW5JN0lDbk9HV1hYays1VSsxVU9GbnR3QTI3SExrUmdoUmdYSFNsRFJpYmZ0N0haTFpoczZsMzJFM1RKYlNWNjFhNDJxeHZUVDdjV2VaWi9HdldUcDJNOEd0RjlFL0J5R2RTRjJQY2RQbVpub0ZwTzdMWVJlZnNuaTVVMmR1MFl1YnpiSEVQdFAyNUFsREFsZTVwVUptSkRsQUkyd2E5RFFEbW1vQlBablNFSUYvcjVVT29WOXBob2tVTzJUVHpsVGkrWHJyT2lOYmVKMHd2eXRkY0RadGRRNC9CRzVGVFZVRUtDZU51N2VQZnh1NFVicENnM21xWXE5VHJFUGVreGFycEd4NW1kcVFsYU5VaWFabGo5eURZSDhicy9HKytkMzl1UmxnTlJMWDd1UllmY2tYNHNUWDBiNWJuWFRHMkhOR1dpZ0liVEVEUTd5bFk1WnlOV0VwZmNuZUFML1l6bCtpOHk5VFdoQzg2dDZwRXJML2FOTWFEQ1ViWjYzZlVoVWZYNy9hOWdHVUVRcm8rYWdScWdudi85cXY0N2tDdFBMc2ZEWVBuTWRZYzZ5TUdBMllvTTZ5Y1Rlc0RGekxxOUtPRkhsT292c1hwclhuaityakpKdGF6RG5rYWFLQVZYdTVUczcveStwU3hDenREcVZYYTBPSUk3YS8wbGFPemp3WDAxZ3hZNkxDKzZnSWsyVThjbTA5ZTdBSWRxOG9lYU1xUEFOY2pId0Q5WmwydjI2MU1RNVJib2VZejI5SmJaUXBiQWgya21CcHlvWHQwS002Yk9OTWROSmU3Z2I3cmpycVFxNzF0Qmkza0JSSFIzb0VPT21MNmhpRzJ4UE8vSXl4eVBBQUlzK3lrUHg0M3laS2FjV0tjUy9LRUtOVXlDakt6QTlRMHhZUlFqZmd3S0Z1dHhKMHVPWmZ3VXZwY3prTHhPTlYxRDZSK250ZmtKOXFOc1JwckhsdGVuTmxDMCtUdnBDZXA4NmlQaW15VGpzSk0ydWlGMG9QbitaZDhtbTdjdllRQVNMdkFRUTZqT0VjYm13UGFBaDFqVHgxQ3JadUFZTG1Tck45T1JkOWVDMElZTXhNWDd1NnczZE15SjVBcUJVWitDU0I5THlJN2NiYUx2NTZyNUV6eHIvQXU3ZGp0OWdRMWJvZzZMeFREMWlXbXdwbHhnVUZRaEFWclVaS3NqRmc1RDNEejZJMndUT3RxcnA1QnFmbzE1Z281RUZPQTlyMVVBS0x5aUdBaEN2YVl5UjlWNHRXSnJjcHY3M2NRQ2NOUmQwZjQ4UmVpWGtLcW53elIxMzRraVh4aWpwMm90dU9sdWtKZlhEeEcwSlAxT04vMEdyWVllYWtKVlVsY0k3cWgrUW9VaXJoTHpSaGpXTG5ZczRSVHNrZy83L1VITWd0RmpJRE5MZmxxVWVDbXJZbVFkVkM3MTdqQjZrRkpUY3lUK1BvOFQzcWw1VW1IMmQrUXo0Q1JUQSthUEpvSWhQRVRSa3pVVHVDOE9PUmxxOUZlREtDaDVDcEVSRkhVckYzV2U5TmxlWHRMYWlhM0xQaW5CdE1ONWgvTXdYQ21tMFp2OUZFaHQ1Rlpua0lBRzE1elRCL0o1eUQzMXZtc0srL2dwUjliWEhWcWlMMEZVQnlYTnBxQm9OcUdXL0Z0T1Qzd2NtOFN1amVrc3psSmtSb1pMTDhrUkF1MGJBOFhDRVFhaDdUcVhGL0ZOUCtjLzdaWmhQQVMrckxIRWFzS2M4RGVsQVgyM1FWWHlQL2R1WmJsZ3hrWjd3ZXdXNmZXejhNV1NXbmowbUp5Y21GdXBMbzFobWR3T1lEMmd2RnpiRWtoZEtRS044T3ZkSDU0ZUwrNGZ2cU1tTHpHOHl0N09VNlM2RHd3OXN2enNHZDhQb2RETHlQN1FESHdSTk42S2FhQ2ZYVXhzdVd6RzdRdXpCSjRiL0IxYkc4aWF2bWtxWGRwN0JlZVBKWHVFQWI5U0dyM240NmZVZ3pGQVEzTHRjWTB3V3g3bEtrM3JsL0RJbngrS1FvbUlQeHZMeE9YcEU3L2QzYW9UMVd0cDJRY29naSsvTVZYNkUwOWpLc1diQ1hUQkpGV2NkOUo4T3FJcUUyMnVRM2tramZGUUo1SmhiNCtERXZWcy9QUEVzZjVuNERLY2R0TlFDY0xQQTAvbXlBbFFMQUVUUUdlZXdURmhHK2JHRlFkT2UrbG9mV3g5eXpNSDFoUWVXQStZb0hqZGpJN3FPNm1iMnhubFZ6SFFzQkc2R2VGbk1pV3NtVzlVQzl3TkNCS3dlSlhSamEwbFRCZk9OWU1GV3NsODE4ZVY0Q21ubzkzVHNudXJPQ0todCsxczUzN2RVeGdhbUx1b0dKeVQxRGlpSXN1cXRxdUpGV2E1amhTeVZpZlBVZHFoWWpBMnJPUjRaWkxKcy9RN1FuT1hPNE1LdmxrSmhsWHFPVzdnWkVJbVljQzBTNGdxYnBIcEl0bDAvbXo0UEk2RnREdE1vd1VadWtmZW1HVzFLcXlLYVd3b1FtZTl2VHJ6SkVMUmRNMDFMZlFwRWFuNEd6bVZRdXhmL080dlAyd0tYUjhjSy9YelB4bk9rV01QbnVtUHo4RmF2cGVVK3lRSW9JZ25LL05LS0wrKzRIZnBLZURwMG1JMXhqWEIremlBSDFKbWNYeGl2UUNGcUswRjNETTJ0SHFlS3Z1VWNzcXcvVGgxQVlZVmtmM1BWd2J6ZWFpRjFXNjc5VysxaC9OSHZOM245VEtjcFZZbGtqSE43SHZnaXpRUFQ2cTJ0dWFSVENITG9zaFB0RkVmYnJLOGxFSEZNRnhBVEs4eEZ2eVJUWGlxV0ZkbHVod2NlOEpIeUs0REhhNkVvQysvNWw1OHlJaVpUMjI5cjdhbnhSY08yOXpFVmtCZG1JbXdHSFBBUmtXYnhXMUVrSXA2UkJ4NnBrM1BWUGNidzcrdHBTNHNlK1htd2ZFSjlUUXFKUjdvSm55bTRjbU1HUXhtRjIyWlk0WUE4aWlQTFlNa1hDYzdLN2FNdjBZRENMd0U2eG04Q05ROW4rMGlzQVdqWGtsblV3Z0d2UGRWd3dVRFRveHdxeWo5amsxYXpuT0NmR0V4ZThPUGN2WmRXQU8xaU5zYlUvSVVPRHJYU2l5c3NWdzROSVBESUlTY1hqTE5jbEpjSjBjM1gzb2lXQjl1Ry95Vk9sZ2lvT2hmMHVqbHlRK3lXaHpDZzd2UXh2Rk5OS1JsNEpIZmtrL0NtY09ySkFtOWp0R1FwK25CbXA0UmlldVFnRUZEeFNvQTJJOEVZM0tlOVNRaWEvWE9VQWY5d1dTcmx4SVRTVDI4SUdKNFlVMnlVSkNsYldhT1RocWsxYnB4T3E1ZFdOd3VyTytFQk9qWXJwQW83bkJ6U2ZCcmgzdWlzTFBNWmt4K3dESUcrcFdERnVialIrQzlBODFJdkJiWmI1MjJndTdhSWhFcGI0Nm5GcWFZZlJFeUNObzBzem9IVE1KMi9lSmMzV1JOaVAzZGVaQ2xQNFYzU1gyK3d2SFJ3cXVBQnZjdlhsTHE0enU3Y2hyZXhmTGZHemNjVmV2cVlhZ1BvQ0oxNnRScmVDSW4vRVQrYzRPeGJuM2xmQWZxWndCUmFyQmwwUXRrdXBpRFptZWdZQWZIbmJCWUpnZzMxVTNRMVRXcjNBbW8zT1JhVEJmaGFNUnVBVzkzUEd1TU8wZy9VMTFKTzZLSFBKRlduZUhYMHRRbmNTcUZOSDBYZUZHSGpmdUM1djQ0Mnk4ZmFNODBybWVRN2NnWENWVlJFTWxxZlJtV3BNZ2E4cU5NRFhzOEIyRzRCWXhQNG9Kend2YW5PQ2ZVTXVjOHhodDBKOU96VG5Kd2thUm9nalBiTHhkb1RzQm9UMzdmZDJOemJHNTk0c3EzNTNoNXdhcHIyb0NuNTllTEFrTEdXeE5KWTk3aXNzNmw1ekZNM0FjK2R5MDRuZlZucG9ZMnMrbExuTEhySmdDZ2pJZlRzTjA5YUcyUXBZOFdtd0hFanJQcHFmZW9Qa0VQcStDSFhRR0srcWV5cmlyZFhGamZsSG1xNlNaUEJXMTR3bjJGU0ZlNlNMcWJNc3VpQm1GRk0vaUh6Y0d2VGJ0N1VuMm00ZUFpNVhGZzBHbmVLeSsyTHdZQlE4MjFweldDUlNadytZNkFNbkk4bXV4SmFLZkY4SkxLQ1p3dlBnQllObTIrWWRxaWZqbnVtNFZYM1l2V1N3bS9BWXFqUEo3c1VkRnJ4OWsyc3lzd0RNbU5qR0NpMVFpMmdaZDdoMWFNZ3lEbStqT01YY0pzNUxlUHFNK2hHNUtkeWxoVmJvdmJURS9MSHZ2dlI2QXRHa0hZaDBkR0hCQ2g1M1hyYkxCeUxHRXVnclN6Ri9OUHprMExIRkF0S0VWR0JYOTluaHAxR3c2OUo5RE50bzBaWHpSOHd4WHdNSDZxTnZXMDBtVis5RDVTRlc3OXI5Rm16YWtXY2llajdzY3Y0cmxiZTNGVStwN2FxSUg1aytiREdqZ3lJR3ZtUitNVWdoL3EyZDFxa1dZODdXSFNHVFdNOC9ZTlBOYjhUMGduQ2ZKalRVeWsvOFVRUFU0MkFRekMxSlhXR21oNG9hTTZMVmRCVzBjQm41QVI3bHpsWEM2Ukkyd2Q2WW8vUHU4YmdNZmpKbDYzRGcvb05RaGtlbDZFSnNVb2dCVnE4NHBjUndadTRyVFFIRjMyU3NXdVdlM2drYko3QTJTdzc5TXhnd0FWQXpFRjhlT0RQWWJtYWk5NkIyVEdleWVJc0pLYVZUNWt3UlRJUS9XYjhOWkNPTk5VWWdWVEhHaVJSMUVldG9WazRMUmxXQTBuZ1NLd1VneDRnR2tlZ3VpR1N5dlZVR2tpQ1FVdEFIVlhMOVEwNHloVHNENnpmOHBpdGhSQU9JcWxEN2pkYjRXSUpaQ1BrVDRYMnduV1ZMSGVQTjh4eEpjWGpQNHdCZ0JmTGVhTW9PcFdyZTRPMk9OOXBaZ1ZhL0tQVEpyUjN5NFp5L2FFSENmRkRQRUVTZ1kzOGpoV1ZiS013M05rWlhFUVFHbFNhSFcvOGlzZ3dvRkd4SmxjYmpwNDhHMGlXaFl0ei92aEJuenkyNlpOT1c5UUhnSndWSUFKSWxCbUdqL0tIcC9HTnlJSXBnWXN4V0tpMEp3V3czQ2l3cHhBSGh2OG9aYWZIOTR6dDlSNFFCTTFSRzZBUkFxVVR1bmhtTXZRUk5HZG1BelJLLzAxNitBZ1ovcVNWUFFpaGl5a21kdG05TFYwWGtNNVdoWXJudXFWTjVDbjdpSk1IdUdLWWk2eE9TbFJpY0VucSs5R0kvbjBCaWd0N3RENEJKQU53SFVlTjlpM2RzcnVDUVlDczFUcWwyci90WnhKRjFiSGxncno5bkJFTnhPckFRQkVMQTd1dlB5OEtTeTJTaHpTUW9JWHQwQjIwdE4xTlRoK0lNR082UWdmRmFWMGc3eWtFVCtPN21mSmlMeW0za0w5ZzZwTDdYbDVYaWNoN3ZuWTdXTm82RW9RUmdTcTVCa0M4WEhIeWRFYUxhTld0OWVET1cwRy9RSE5Uc3FNbno2NXd0WUpjU2d5N2JuZGRYczFGZkpGVFJ6NGU1b2ZNRGpKZ3A3eDh3UFpDd3RKd2wzcHk2L05BVkNoaXhGSFZPcDN1czNYMUYyY3BzZEtTOThvVFQrQWg5SHRNMk9NUXIwLzc1YlN6L01Fa2JXdE5YSm1YbDZ1M3BuMlo0RnU4ZEZFRkJCL1dmWWJQdUJyZWhkYm1OV0Zta1Vwc3RwS1h6N3UzNkc3ZTZYTmNiTjhTTFoyTTI2bVlsRXREL2hWMEJPSjBYN0dKRjQ4RDJ3NE1xdlFJMVlCdHkvSHBHYmhNSS9uN3dHT2x3c0llR2xWaHNKZGE5cU05SFlaVjlSLytka3pvRzB2KzloWWpUbEtxQVJwajVpZ1N5ZlkyNFN4TGZwWTFpSEJkMndzVGpZdmJlb3BBYnlTUFE3aDdtZ2ZHdXVOL3lsa3FoTnhoKzdabXFWQjNEaHlveFFMZ3lBU1ljWFdiYzl4a3FhMnk0bWRITXl0N0Ewdm5rTFBOTWVGSzlCT25sMktYSjNvcVpoZ0dqS29BcmdFemVsTkRvYUZNL0thNmZzOUhUa2xHVFhRYkF1ZEhjUnVyMmpXSkxwTXpNUlhDcEpjaDFBbnVSLzdmck9YRncwbzJsUDArRUw4bjBkTSt6QkZPcExCcDlmcDdpdlV6RlU1Snp2Q2Q2T200U2hzREVRRGh0akxiSnZOYUpGTGRYVTU4aklWY2lnaVIxMFl5S3g2QnY3Y210N3lWMFlrNy93TFZXTEo3ZXJWWlNCdC9ZaFJwSUtOcUw1ZzNNRjZINklHU1l2bUVwMzM4N1pRdWhzaWlXQ3Y0Y3NwTWwwOGNBTzI1TnRweFVoVytiQVpmVENUVmZ1aHJhSU1Cd3lES0JhcmluRlFYNWFVeUp2SEpIZnVVcXAwWTZnSjVOTUdubTc3R1BTVytZdXpwRGFjOGxGb2IyeVROWThtK2NQcXhNWGk1M3FzNzFhRkRTclVTU2JYWUo0TUFRSHhRM1ZnU3BONm5sV2I2bHY4VG9VcGNuYVpOVnhoaVV5M1RDWXc2ck42SHlqRWFaU0pNRGVkaVFtK3ROYkhQUlZvTDhlM3J0c1dtY0doZTRlVXVBVllIajNyL0VPM2xoSUZ0Y2pxWG93d0VoUWM4dW9HM1gxWFNtZk81andnditMaVBOYlBaV1pjMEhqdG9KSUN4Vld0dHFZU0lPRmdQdk9oTitaZGxrVVE3aWhSSFZ6L0t2UTIveTRKSU9TaCt1N1BoRVl0S3hFZXlUNC9XL0gzd21Na1R2eWZUSWh5YS96VFA0YXBjcFlYNFhBL2ZUbFRWTEV6WWd0WW01MHE3TG1tc2JPR1ZLRXM4Y2ZpMkM3ejJ3MEkxKzJENzlaWmVrbStLaHpoQ2w2bHRSNlAzTlkrajFGV3VxOXk3c21yOGRha0xjc2h0WlpYZDhLejRsWmcvN0F6dlcydnhrVnhNY1hUL0lCc3dwb1hUcFZPVzZTWHcrZkJJbWt6MWVSWHZEOFRBSXZsSXpJcVFweU83RldNekpaZi9JZlpSWjlJMGh1c3NXeVZ3dE5VOVBCRnBHajJuQUZjb1A1Vkg2aVVJZ1l5UkozTDFDMUtGQVhuN0dhYW1sazdVVHY5cmVqS1hRVFRnV0VPaUJlTHZzek1uMGtTeW1EVTFtOGZWRzNiWE5pMVhkMVdiVzdoQjFkMWJDcGNhQk5GaXlnOUNjM3RJVHNYWWwzcUlkTmhqTTR1dXBrOWpIK0NNaFF1ZzNVUnE2MG8rUy9XYlM4NjZzem1uWmcrTVdPSDRRZXBjbVNPVUFuWVIyaExzTnRDVlA2ZEtob1RjcnZKdzM1QlBONi9YcDduTFFlaEZ4MGpQTi9aOW5vVVgzS3M3aG1sbHV0aVJsZjl0aTRvaDltK2N2c3pJbTdDd1RZdVQxbjl6NGFDSWUzNWFjRFQ4RmNkVFNhNVp2L3psWi8xR2Z3RzRrdFMzTkdxcHlOcjJmcXBvdC9vYkUwajYvamhyR3dvLzVLV2xLM0VDNmtpd0hza0tBa3M1a0p3akNmcVB0M3c0Q3BGVEJrTjlvQS9iU0E2VzdPV2FTdzVOT1RSREw3V2V6MmQ4WVJDVnlCb0lXZjlETEVtVFpKL2RUOHVTVFBaRis3SHRhUXFyOEdqTHJpczdyTXFQS3E3djd4WHIySWpHYVNod25kYk05WWhzb3BHdnFMS2tJdjlWM1phTWVqYTl4SmlGOUdUU1NLQ3NoNkZwdTdFa1pPeTRtbHUvRkdSUytZQ0tJMWJFMWFqQXQ3RE9OUzJKTExhaXRhc3RFQmdpN3JWYVJ0c3BRTHhDZUJOUzlMcFBpSnJBYlRiK24zU2dIMG1Yd1J4aVZBMjVKRUUzb2YxeVRXdm5udXFYZ0FEUXZOTUVqWUY3bE44OTlMRFFxbGdFNzJZTkF5T0VVK1d0eWVJV3NpdWRUcVk2cDk2NVh3MXh4QVVKRUNWaHBDTHVNQWtjRm44ZHJwVWF3TTRHNEhkd1BhNG1lNjM2WTg2aDd0emU5eCtFT0lPaUNjdS9ualVFN2M2eEFzTTg2Mi91RHZLaHhYQ3BidmlWQkk2cHJ5NW4xYnBkdFJBdUY3UlZHTEpTUkZDU3NlYlZxQXVkTjhSTUxpcmxQa0kzV1RXbWQ1eVJaekdxd0R1Tk8yNVp2alFMYVh5Z1lleWJmajBQZzFZRWdXMjFzbzR0K2VvKzNRdDh2SGEvaGV0dzY2bktkZUp3ZWlENHkxZ3M0TVRxOVBzY0h2SGl3d2hVamMzZk5ibWJ3dW5nT2d1dnprbzE5dnMwVTF1SGNSMTltT25qU1N3U2tvaWlLeno1N0RyemJPODN5a2NvcGFSNDE2bmN6eEdrL3ZQVTdNVUpra1RLTDdxYWI1MVJlQ3Rac0xFdHc1OVVJVHZZU1hRUzl5eWZzNWY5eEZ0c25PRHpTbG8rV1ljSnQ5VUx4RGdkU1ZSbXpCL2UyYkRMVTg1RGVkRWlPb3NYTEY1TGF5WVdlVlIrcVUza08vT1lTdDRubVhxQkdXMklzNWVncFBMMEUyRlRURDZUN0tRTmhPSGNWOXM5SEMxWlBTL1d0RnJRak1sMGpjdDdsamkwbEZqd1BjUzZic25ielVHdVJrQkFGbWljUXltTjlNMVNSaTFqTkZSVk9VVmRzWjBhNE1KSVNISFc2MkNmM0tHanlpQW12cGZzM0lNYWhqWk52Z002Y20xQWsxS0dydHFLdm40TDg2N1MzUFl2Q3EyNFBvbGZNSXBZMkx1anloZW52VHBDL0k4TUtpRDEzUmUwQmNuR1RDWWU2SjYwMDB2Z21ZdTQyM0dTSnllTHVKZ3cwR3dZdGtsazc5MVEwcXpibkNIR0UyU1BseFVrdGJUbDNIVUg0YzF5ME5CY1paaDVoek9Gd2dzaXdtZUFvemF1TDNIUjR5WEkxRTZtdHI3R1gvbERGMXg0dkFwSU5FaXFWR2crbUYrdmkrR2huYVprMzkwYTdHTjRrVjVNSE9aOE1waE5VSTdoelJ2UkpHNUZBcGZHTThYa0RzTEc5Qldtc0pJRHZ6NEZXQTZUd3I3U3NOQjlkL3ZKak5RbDl3bDM5RWQzcXkxN2FhQkVVc3dXWVhQNi9pTVh5VFRGNWY4NmpXaTk3dCtDdzV0dHIwWjNyMzdaWGQ3emJlcGhTcEJiaGhMbHRoN3Q0d3oreHhDY2pqM3NKdXF4NWVmWjFQZDNxRWRKK3ljcVNvWTBPUVZNNHBUdndEZGYrQm5TWjJVZHVpNlUzVGt4OXdPamZpZWEvSUtBOGxPSERUVmF0ektCWW5JTWF3NWJUMGhMVmVvZER1a3pPUFBDdXJtVjhQNG9PUXZqczhZVGxxbTZkZytETExDRFgzUllpRlhod2hYRllTRnFCZ0VqN1FxRkFFeVh5ZXBmT1VyVmlIY1ROWW1mUDlTVTN1Yng0YlBWM0s3SzhrNTdJQytnaStWN2NJUTE5a0dBdEZ2aEs0Y1NZdDBYSzJWY3oyNDMyNFBoVEF0UGtQWS9VbkwvaERzWDRpY2prc3JtKy9ZK2RlTE8rK0hkSXpPSGpXUVBsTWVZUTBtdWFNQVBDK3pxK2VQd0Y4ODdCYkJKN2lnb1dBMHlZVysyQlF1cVVnZTdWMmRXS2ZWNnAzb0dadkowRGlEcjNKL3JuNHNJWnZpVHNiOXRBSUZBUklWYmxBejNESzFnR1Z3bWswZjRhU1hmaWhWUEIwemhZS3NQb1BtRDZQOWJvWXcraFVaM3FueWdDdmlRTlAxSWdMbnk3RDNZWVFaUWhTbVlta3FLVmhUV1RlQk16TXFMbENVcUlicUN5MnpGZDhYcSsrN3ZQWmVzTy9QY2N0emZ0MWxyZlBxS01IV2pndko3TTIwT2JnVDFyc2wrQUJEVkVVOWdweW9BMEVaUjZpTnZRSWdqT24wVmhZYURZdG5hTjVIZWhLQjZMUDk0MHJINitiMHZPSVBWYnVza25DYkFkNXlodDgyMHMwT2E5VUNwbG1YT2libm15T0N4bVBYam9xS1NYWDBsZWFWWGZ4bVh4S0loaGxIY3dzZU9DYmthRzBwY0lyOFZrOSs2VzNmdDNKM0ozcEhRV2JINXpVblJqSVVXTjY5VzMySVByQzQwZHpjejVOMzJPQ1paMExOM0FUWEVtUjIyZVJpQnpzaEsvNEVDNm1oZzFLdnVHMzlzUDFGZzJBZmN1UVBnd0w0VTRXcmNiVHNSdVIvamZneUdmTlc5eTZCbmJsV2JIMDFWUU15UC9NaDZrckRISUgxR01PM1lyLzl4WXhUQllkRWZXUUhZbG9CLytWUTBmWjFJVEd5eDd3UjY0cnV0VkxuTURNUTBPRlV6TXh0VUNra2l2emQxYUMzRUdCTllPQWVuMU1UbStQczVLSjJmU21wRkZUSHZWQ05wKzhwT203dDZQT0NaY2p1QVRCdWxwWkNaMGw2cTJ0NDJEaEF0VnN6aGVLbGR6eXRldkRJcGpUYm9Da3BEMDVuaW1XdHR3UUFYUzNhQldiSEppTUFvdXNnZHNBYXpGL1pBMWNOaGswaGxvaHVTVXBYalpGUXErWDlPZW1nSWVUQmowcHgyaFBDTVdQUGwxdkFOaGJ0YWp4NzBnd2xWdGVLUlEzVnlmVFdveWFoWWlFUE15MFR6Sk9hMVBFN0dmekl0ZjJ6bmxZdUg5akFFdGtPR2Z1SWp3Y0I4a3BPMmdZb28rVUVIa20wbW9mdGQraHBHWG5VZmJNRVZvYWZndUZ0YWhEU2xqdGVHOUNQVmtsMHRxaGxKTlBqcUR6S01XakVlR1cxQStMbytjcnJNSlNqWmFGUjRLYWZuTEhoL1pEb2kyK2p4eHNTdkxGdGRaazRsaEhvNlp1ZHh0azFLMmlUeGRXZHJBMDlndlhscW9yM3ZzY2FieWV1YVdDTXM4M3l6TWtTYjlsQXAwSWVkaHNDUU1HVjQ1V2JjZnNVSzJKalhwOERLNVNZYWFsbjQvTkNMekpHV0c5OFlLSFhLYnJoUjJjVkNwbmEzSGdwZ3FFci9TVzhETHdPWEhQVUhBRHRBQTBQMGV1Z1k3M1A5Skp1ZEo1dHBCaCt6UnVQU1B1d2dqYU1oWG92MUw0d2J2TCtlNDNFU1p6eFAwN0hqU0lCbWVsaUtWS3g2c0ROb2JtWVhydEszY1lZeUU2TlhtTnlkZEZ4eDdLZnNTYXIzU3RLMEFyRENxK3B2QjlhV0VnZ08rYlBCTlNpVnZ5RVQvZDJZaVczS1haWHkzNDM2Tzc0ZWRqazJPaVIyek5lM09GbmlrSTNpLzJaTHJKeXc4RVlGOFFoUG0vTndhZ0ZXK2lESXE3dEZGODlEMjRUUlNNZzNMTmFPaUZxL1V6d2Fiek1hVWhYcmRTaDh1YnNNQjhmcDZERTVyOG9YREFPNUtNajFSSHVoOU96UjV2c2h6NmV4KzVGYUhlYlZZaDNXVkVEZHF1RU84WmRZWUdMeWFFVmwzZHJ5TWhXNEpMYjgxcWo4NEx3ZTRIRWptUzdaZVA5R0g2Q2ZHeFQvTC9peHVtZExjeGJxVzA4Z0JRRkdPTzJYQTNaSE1ZMURId3NkdUxTcUdiV0V0NXIzSm40ckZqMlI3QXcya0w5M3VaN2c4dG1MRWNtSWk1YmNMaTRuekhzSFBoeG1oWnlXN2ZZSkp5NE84aThlUDJzeVZlUjM4QWNGZjJSQVNHc2NaQzlEYnJpWnJERjI0bXo3VlRjRks5d3VVMUx0WGZReUFva0dSU1hqN3JBdmZhRk1TSDBBR2l0cklmVWNKUTZaK1ltRFRSdnA0d3JmaUFYQ2sxRXdIaGlOc001SUxXbFlqV2pJSHFIa2lPVzdhb1puK3VHUUEzVEdUeGQrZUdOV1JyWDdLazh6WW05Tnh6TkdFMVFkMkxvRVcyMXRwdkw0TVJ2YlVWK1o5TC9ubWIxYUxFbW5GL1M4RWx6WXlXcWkxWHZYZjZoNUhvbmxRWVZib2FhdW4vVDFjV1ZKb3cwMk5td3Vlc2o5TWNoM2lMR3hGcTZadEFHQkRRT0Fva0RmbVJENTJNNmgwMG5POTZub2RJVlM1ZERmeDBodUsrVmI5cGdTd0lMUWgycjdPbVV3QUVYL0ZMbHFZc3Y0ekVNTjlJb3VEV0VkdEMzM0JSWU1aUytLVkoybE41eERJSlpreEhNTURnMktMZWRNNlJmeEdncy94T0pJWktadFJFWEI5aUZtNHZRR0t4eWV6bzlHSGlXM2JpOFVNMURhVHZTTUNHN1BtdWdyaCtYRjZjeUlRbHNEenF5cFg5SjF5bmNVZzRGMFRKQ3JqVStWSDJsTDNiWjdENjNBdHBTMU82NEZOb1dFRXFHczFwNVVuY0x5aFFkRlE5ZE12bXNnOE85ZlAvOWpUM2cwQ0ZybCtEVm1QK09waHVZLzRVVW9KMFR5OGx4SnpVOUlJUUJ1QnVrR1FIVGJzbnhoN1F4TzY2b2FsNW9xSStlUUtnT0hYcTVJQUwzeGU4RFhEdE05U01jc0h3TU1KZmxQdDZJc0dFUVUzbjMreDFoZ3lHQkJEcXRiRVlSTUFFU2lVSjJuNVBjRGh3RnhvRWU5aFJJOGd2ZlpOaXlva1ZsUWpqaFlCNzNvOG9zaURFSDJNQlc2QjVDbmNuOE10WFc5QkNRVkNBaVIvbVI0TnRFS2EvdnRyM1FnazBuVzhsRG5SeUE5MUZFZitiY3NiQ3BqRW11RnNKL1JCcHFwVnc1eWlNZjFXZlhicjVEU21lR0lSejg1dU5VWnhEcERsNTFRbEMzNGswbVYvZXJSUkJYTEYrWmF6bGRIVG1lODIrUlhLUmlrT2JxOC9aMFc3K0twb2QyNzFsQXRlK1Y4czhwUW14SE1ZWHQwK2pzei9GT08waEtjWXJpeHMwaGJhR0JlMVF4WkpBbmRDYmZOODNuZTg5TlpDQ0gzNy9nQUcvcVk5UTZCZlNab0hwdmJPSjdwdGtBS2VOM0p1KzdpcEExMHN4TzZzVko0d2dLa0VoQmU1czBpTExVdHB0cU1NRmtscGUwUDBiRGJoZy9OdGV0OTFzMlF4aStjSFNkR3lqcmpOTEp3a3M4cGgrd0RFdjBkMGRKUG41VTF4L0pUWXZTQjEzRzFCUGxHV1grL1Vnbm1nYmsvb01HTnJtVWx1TmU1ZnlCV3NsaSsrSVNYOHduV0ZuYlUyd3dsRHhPZXIvNkFJU3FYcDMweGVlempRcG14V3g4Sm93RXlpTEI4Tnl5MTd6WmI1Z0JZQTlDb3l3bmlGeGtrdVZ5UkRadlo1VVN3NUZ0K29ESGxiTTBSY0J1Mi9NcXFsQkZTcHE3ZGFMUVVJeG4zcjFNUXJSdnBiR3FrbHJzbElVVm0zci9WTTVKa3l4QTdjb01CMkRadWZ0dS9QUFgxU3BYSTF1dlVqcmtiUGFUR3RLZkNkYUJlRTU2RmFRTUxBVkI0b2Z4b1ExcHduYXB5elBNTmJGQmJvSTAwRnpuQTJtOTlxVGV1MDh2b3YvWlpQRFdpTnlOeXFpMjBpbUNKWGZtVm44bStPMWxrQkFrOEMrb0VzbmUzRjMrMzJOZ2l2dDM4MUVmMHM3bGNXaDV3OGMrY3FDeUlFNEU1bEN0bmpJL2x1cDdOdWVPUnFCMnRycnRNRWgzTGNMOVR4MFJ3RmNiMGUvOW0zRnlqU3NJRTkvWWE4NzNkbUVmYkoyZVhIaW5VdHdaZDd1eEN1VzhtYzFuMlJBbjNEZTExVWl2VG0vSnZYU2RCQzRaMWVrSkNGS3JCNW9MYU5mWlUra2ovUzg4eVhHcWI3N0ZncVlXNUJ2OXZsVmVGTjMrQ0NKQkc4S0pVSzEwVTlNUDZKVkM0VG9RaERPekRLVWpQcmxRbzBQZmRITXkweFRGZlJoVUFkM2VnMUtvdmVSd1IwZEprM1VPbEdVVFNpdWEzeFdmN1NWR0FpeU9aNnBzcUx5cExhcHlQbXBGU2ZQVmIxR20wNjRSY1hnUWxxYm9mUVNGOHE2ZlAvT0VGdHNDTllOU0hnSFI2QnlMV1NaSXM0eGE2UUFPN3h3OCtoTVhNYzVJU20zYUMrU0lUZlA4ZEhPaXlVaTY2aVFPelEyZVhUNXFsclJJdjQrWXhFdlRnV2t6bk5CNWYyVEZvbTdmWW1LUE1zQUhiWDBGTDVLcE1uVGF0bDRRc2l3WHpoVCswOVI1UzlmZHlaN3VRR0pTZ0t6VWpPVDRBcnVnajRSd1BEQkdWeTdSZmJwUmk3bjJ0ekdIazZTZk5VbmFLVEk4OFlETm4wZGVRVUEwRWNBbFBnVk1SVnYyN1RWcWZDZ0FXUGo2MC93ZFNGTStzZEt1UnhlNXQ2WkRGVXQ5V0pmanN1NFM1cWRWNUlDL2VrR09mN0NIZ1ZQOE1CZ3oraThTM2ZQQy8xN05hMFUvYzYzTUp3Qm9HYnRPVitwcklScUs3Q2s5d3lMVG1jelh1QnFOdDVFcVFyejNGVk9ITWJySFh1RlZ0K2JEcnJZbGJwN0VwZTBjdTNiSE96UG9iVDZ3UUI1WW1CNGpGSXBCUldJQ0s5YXpsdnhHaGNwU3Z5WithaUhSQTYwZGRENTlPdTI3VjlEWFh6V2FONnZXS0RHbE5VMzZ5ektpOEdxN1JJMXRiZkY2Q2xna05uU2dUZ0dsYWlWZlphTW9GUkNmU25aR2ZkR01tUXNEQ1ZVWHJ5TklnQk92ck81WDNMeC8yN1pOTjJ2Rkt5QVQxVlI4OFB5YzJyZ2lFVUJqR3JxVXk3WjFoZVgyanc0WEU2eDJQVmdhNWk0Uk51c1JHZkpBbURPa1pEbTAzVXpBaEhPNjZuZWExSkhwOVZDTDB3a2JheUVPWTdDQlc0Q01sbGZuMml0ZFV4T3NZNkhjTEppRnFLS1BDSUJvaFZ2dzdGMlFvTkJ6WFN4TlhJSEc0OXNlSVloak9ZOFJ1d3hjWHJ0eDVmUUJOVERFdG00UENrWmE0bEs0T3JBYnV3Y1VXNnp5RklqNHFnbFNsWnlUT01XdFlSYzR2U2NINTRvMnNDbG9ZZVJtZVV6cFR2NlhISlZZMTV1dFdNOHlaSkQ0Q2tuQTBmcGlCUmVSeGtSa3RIeXpDeVlSSVRLeUdhVHRGb1hmYVNWYjYzbHd6RHgxZzJKR3B4dXpIYWV0M2RUWjYrWWdJbWJMN2NSNGhnS1FpWDBiU2tUYVFtQVRuejNNSUZWZmNuYjJBbHZUZnE0VmpaODluMnkzU09zbEVPR0E3UWtvV3V3ak5pZC92empRRUh2akpNUDJBQTBQdFBlSW9PL0xtZ2s2UXhVRVZ3aWpQU210b0dyaHFrWVJTdUg4TytYWXJSY3laNmc3WDUrVWVScDdVdDI1dTBjOGIwanRLSnczcWc2bXh1U0loL1g3MDVIaVNlMitWcTlJK0t6clpWTFJMdVRIQzI2cHIySU1mMEVCRE1YNERsa3hlRE16K1R5ZjFVZ256NFRHMHdmUEt3dWVCbkI4VENQWFB5RjFuZmtBZWY0elNSYXY5aGhxMDRpamVvcjh0bU9nOG1GTGhjSFpnTEN4OW1MOHZ3RWdaNjZudDBGM1ZMaGhWS29OdSt2MFJtK2JLenhGSkREUlBPNW5DRFB4d0FrQ0czNTJvQ054VGk0eW5jYS9oWXVnMkZvUHF3eDl2RThlQjQzdVJNTVo5RUZvVjNrUEwyOTJId0ZsanVMUVF4bVE5ME5FNmJzcUw4ekQwb0xzTWV0bnZPdVVsdWRmditZUHRmcG5PQkljckRMbkdFMDl2UWh5dnhlUmI3VVBiNFZYZnpIMG5tdXRuaSsvYmZsSk1yS0pMOEhhbTZldk9QU0pUdTMyS2ZHWUhEMGdhWUVuQ2FjQkVHdlRSbW5mNDNOaEg5ZHJLU0lvQXgrUXJNVG1CSGVQQ3RyTU5rdDlXOHlsbFM5ZmMxTU81TXVweWgzYVU3amZNVldOR2t3dmdHR1VJSExWaFdEMGN4bzIrWEJwYnRFNURzajBQZVd4ZlVLa2x6d3h5OGdPMVdhSjZlaFJOc1VqN24zdk1Edlg4KzYxMDJtVUdxd1FYSU1ISjMrWWJ3UTc3M29mTXBTNk1MVHZRUll1SWd6RDRuWUJQaEpmL0dwV2x3bURXRlppbUJYNmdKY3oxQ3VKczJhNWZDaVRyZ0E5eU1teUlyV3R2NVpBOEF4SlJ1cERaeDY5ckxINXVSWll2bDdVcEl1N3pYUE1iL2drbmtkdjRqaFpkanBnSnNMVXNDNFBEa2VzaHhyMW4zZ04xQUx4QUtFTkNHdzdlNVozVlcyd2hjWXFFS3RGYVd6cXEwTWh6MHB0Qy9VcWphUkxGWXM2M2NWc0RsOXlDdUxQM1MvMUU1SkhqK2JmOVdGczZzcUVLQysxN1ZDZlNNOXkzN3pPRU4vQ3ZvUkFxYit3TjBGeVlrMXg4VXZkd3I1VGpVTS9wRzlMZ3NMMVkzTjExQkhwQ1dteXVuT0thWVJ0V2ZILzJoblNGdi9uR3RmZEVONUZQb21FNG9iRTFSOVlPK0d6QXUyR3NVcjNHdEVMeEpHT3NZOHlIMXc3WnlTaktPOHJZR3c5ZDlEQjlhKy9zbmZ3TzdiK25kV2J1MFZRaHVKclVnNC9YNkhQSFpjemd1TVZndmJkblBuMk5WcWltMDRwTUNpQXp5aXUwa3JldERSMWM4SXNIenNlclBFZ0ZaT3NLcTVZUFcyWkJGRkd6Z1VwS0NOQ3A1MERPZDdUZVFPb2dER3JRQU5INGp4UlZobmp2YWZ1dHI4b1I2MUhLaWh0bFNJOEkwUGZreGFVTXVrWVA5N1hVMWRNTnZmbXZpQ3ZEOFpOdjRvNnFZcTF1b3J5eEZRbFRDdnBTeXJrTG9MWDV1V2lzKzljMFJsYTBBNVMvd3EyaUV6STB3ZVA1YUFsVmZPMEZDcFJ2ZEdTdnJjN2VBQzlVQTQ5QVhyZjFzeU1SWFZ5RHJBUnI2SUNOdE5lSTdUMW9iaFhNZllRa1NsQXdMK1ZWcWZKMGV5Rk1mL3dOZ1dwWEFQajQ0SGMvNWNtMnIzT0Zqb29yUXJnU0RCdUlFUXVaMnVpajBtY2lXSVpiUWNPT25xcWhKUjFKTG5TTm5nN0FWY1Y5K2prc3ROcUhES0kxVmZ5ZXlqQXZ4QmhBMXBBVlpsWGhYcHV1N1FWSnROcElDci9aRTA3bXFUWGNuNk9BOEN5K0FhR0xkR3FyeWR4N0oyV1grdU9uS25JV3F6WUhIK2lYL25MUmFBOWZtZjhRTnRicDFLRTlEYXU1aHZUMlNPKzFJeXR0bTRuNk03c2FDbllhaTdtUG1PVUFtVEhIWmx6Zm5EUlFIck1oRFFFTFV6cVA4UkM2eWNvNU4xa29HZzMwdDBFN2tJZ2RlU1hsRDYxampNNnBHTld4a2tBWmlKaHA1MWduN1dtVEdnY0txV2M3T0Q0TGtkWW9xMk56MGFZTm90em50U0wzSGNRd0tMRzkyU0d6MW1GTm5TWHpBZGFjLzI4UzJDdXNSbjV5OVA5VlVGNDR1bm5zOTB1TE00UnFOSGpiWDQ4ZkdYTVRCdmpjWGwvd0hNYWxHQ25OWDF4QU5SVjZoWUdxTGxFRGpxQlBIMVloYURYbVB3M2lqUm9SaDlWS25yRWtXZ0Y1TEJRMGZiSzlHd2FQYXJnaDNNUnZFSkw2cWpuVzcrbG1MdHNqZEpPMEc4N0ZSNzFYd1NTVEVGOXNTWXhURG9WMk0wdC85cEZwWjIxQ3VYNHdER2d2ZDM1YWRodGZSNEcyb2VQSW0rN01iSEVQdHdHRUJMVzIrNFYveHN2TDNEVzR5c1ZlNUNHNHp1YjV5OG4wK2hnZTJ6WmpUMWZuS200MFdlUzZONCt5a0FnYWFjQVJkZmZub0hLaFRXZWwyMUNRZ0Jld24vNUNRR0EwSVlzbHEydlZhVXJ0OWd1N2JzZnhnVEI5YnpRbXJrazRIY29KZU1iRnVXN1Z6TTZJamNzSCtNcDhHcXVaVmRGZG9vMEtHOWplSkQ3Um4rV0hGcEVYaEtRb3pIaG1tZzRBZTFVcStiTGNhUGR6S1RKRkZOUTNxYnBQQUZWSWVzbEVPRnRiMHZ1MFJJRnJVRG9OOHVvUzhXc1JLNG02K2N5dWVoeXNyY3Q5VWZTZVFjMkQ1Nzh3Qzh6T2hHNis5ZkVHaDZ3UFQ4UlpJUlJrUGRBSkV6YWdZS250SmFibzRzMEFyK01hRTRkdzZxdzZVZEZIa0dZQkRDUmhmeWdVNUtmS1lrOFNXOVVnZllMbjk0QjMwTFZ0M0ZObHIvNk96MGFBd0o1eEQ4RGE0dFZvYWtQL0hqemZPYjN4UTVqSk1rc015bDNXdjdCS2Y0ek0yVkJLRXFoeUJFdkt4OC9yaGp3aGVKOFhtQTBYcEhtVy9Fckw3N2tyemhRN0VyaGExeWdmbUw4dWtFMm5GNTJVcEF1MHV0cUMrMTRBaXJrUlYvVlV6eElHLzA1ems3R1lIZXF2MVdDQlljQlk5VTFQQk9YVWJjTlVnT3FwZHdJUHBSMHNabDZFZ003K3hhRExMd0xBVVBwN0RodjluVmJpYWM5aTdoKzFjUUhaZytNVGYwYWhPdVVSdkZyTEV0R1BKUWV2UTBKSjJsaHg0U21PK0huazBxSGRVdlJaenU2eXNPc2JzWWFweUE2a1JyOTBYN2FROUxsdGZ3MVI2N1ZrclRwQTVrV0oyc0U4dXpuVkVEb2lpQzdkayt6WmJRTW5lRVpMTE16SmNyWGRmbDN6OEkwM3FKQU03bENuaTdISDdzWUR2ZlNMU1pFSTlrTmJWc21iSkZHOEh5SWFyK0d3d3FBVE80V28vaVJ5N01IN1VPYTY5cmxSMUxEUjFNRTBnc0NBSmpTcll1eWI5TzRPLzBQaTlFWEhtSHJhZGZhbEJpRDl5VlVESTljVEhDOHV4RHp6ajFtQlNRT1JjWG1HYWZJU0w2dVNUbWM0WjNONGZSQVIwaFFHR21hUVdzNGF6QkQzK0dtVmh2SFFRYzIyc3hCZHNmSk05U1JlRTFzZTcvVWUxY0tUTUl2SjZkMStlL2xsZGRkVzFiUDQ3RTlHNnY3Rzdtc2c4dGczUlJrSm9tRzRKNVR3K3U1K2ZyMnpJV2Z4bjVsYzl5ZmpqbVpOcGtVMUdTamhKSWxkbUdkbjVMRUFnd2Q3MVZzckZ4c3Jld2NxRnVkOVlROEVJVThlRjZ1bDk2YTl4dzNDditRKytWVzhwdzJ4TlNxQzNmMVB6bFd5Y281Qk9TM0ZxeU0vaWpyRkw1RFpMMk5BbHZhSzZIUCtqWWJHR2RsZDZPc1JORldKaVhGS0tjZE54QXpNeWRidkJzVmlvdnZTcjZBT0l6YndSdHZzM1h3V3hOUlZWcncvQTIwOS9WeG5URGRPNjdFREw1M2lnbWNZSlY3bW1odlJZMXRNTzkzendIUWU2ZDBqL0c3Z3FFNzU3Wi9OWHAzNit6bzcxd2dydTIzRXVnL1pFanZFU3NrUmd3S0RxSDdkMklwZlRVODFVWmhjWmw4TFIvdUVBMThWSWtJL1Q3SzlEd212UmJkNnM4M1dVZU41ZFhBYnZScUExYVd0TFZocnNHUXg5RXd3cU83V2ZCOUVmcDNUb1EvZklzcW03QXJrekI1NjZBOVpCODRwV0V0OXFnbzFVVXdLMG9mM1pXZ0lMT3lVc0lDeElCYlJXSllOTVRsRWYyVmQzTnNmVnZ0MWFJR3J5TUJBeDl1d3V3OEQydnRpMlQ1cnB3N0s4Tm0wOGhrUWxLbmgxelpJN0RTSU1RRVU1S283eTVSNmpYQXB0bitVTkNZV3pPZXNXMHdEc0dPdGowZWdwTm9Ha2w3S0pWdlluM3ZiTkJieHZCTEJBT3VYYzlwdGxxTnEvVTJyZnI5T09saWIwVnUzaGVQRVlmWHFCUkJsMGM3NWtPZ0E3M1BKOE1JZEc5N1A1VUp0bkRNbGJudUltSEE4YVVITUFHNzNEU2xjSnhHbEw5Q011YXJqV0ZWQ3lXKzh0UTlqeFRKUWZndE1YTCtjRCtoK210d3ljTjgvNFFvYUIrT2J5ZjJSbjhuTmpFRTVyT08xZjRCcWRpQkE2UE16dmRid1lJOUFRQVZwNEVHTTNCTVB4VFlNV0FwQVM3REhKZmZWcVg4eDUxd3ZFRXVSaHQ0c2h5OUxEQTQveFBOTW0wbzBxN2hBRmd0Z1lieE03OVZqK3NyOFRhSlMrMlNXMGpyZExhLzArZlgyS3gvK2M1dFFMREFzMDhJVHUzbTBGSDNZSXJiWDhUKzcvRmZUZ2xXd2lmNGxvaWpyaGw2TWljQk9xNmMzV1llYUcxc2VHblB4MmMwK2puS2VLU2FWMUdhKzcvMXNHOXBralpxbGFLUmxGWjZvc2pJMlhnTjJzNzcwbmxNSmN1RXBIQ1FHeG02YnRTeEVkbllNZ1RlVGcwRCtnUUZsMjdFRVA2VjNSeU5FYzhmell4ZmRyRkhyaUFoY1RtMm8zVUdHL3NMWWg3MWtlYlk0VDBzKzMxTnA2VUNzU0IrNU5JbFdDOUhyWHpCRFY2UlROK3dQSzNJVkU3RDR1dmNKSHBKaDl3eS9vRG1NcndwNzB5Um8xK3M3RmlveHRGb3l2Y05DVm9hTTBNbjI1ODB1dFI2Ni9xcENKMjByZEhsaU0vMzJaQmpyU0toUnZOb21rVFVVR3lNdndmUEJsck13RmdlM1FWeUcrQXhVZHdianFBMjBYZ3RMTGtNV2RCSmphNWtDdytYc3EzK05YVERJTTJCL0NrNlk0bzN5Q3laazNRd1B1ZVh4eCtGN3VsSVFhaFgwK0RZK2JPTkErQnpScGJvWlJIbnRiVTV3dzR6ckFwdlVSeVl4MmhkMEtxOVFCS3JsM2dxZ3M0Z3M0K01vRTdmaW1aR0pHMTFHbXFEYk5XUzdLeDRML1pVMTc3bDBJQWlDWFVjRllueGRYSnpPUVBzWEI1OEVweXY2WnhoMmlkQjJRczYxdUx6RVpFeUNIb1lYaU5Na291NVA3TGtJNGo1VXJMdElienoyZDJtSlVOeXlGcDJDY0RBamxnRFB4MmYyK2pXcnRsWDE5aC9QTnJxRlFZQjVPWENRYmZhU0psazF0S0QzUFJwYXM0Nm5iVlBOaFBDWVdzMkMwRC94Qm01UGc0T3lZeVNEb0JIaGZhS2hXYlNpa04zV1BGczBhNW9YN3BwTmN4cGNxRjlvMWZWeStlak1WOUVKK3RGeDJFVnpnK0RZTjdET3FGalhHQWZRVHFLMURNY2pkbzJTQkxvNGZRZVZsVSt6cFVHSXdhTE12WDZWYlcyenByd1VScXlwQUlRL1hjS2dFUzJ3bDFVY0VQWUswUEw5S3NacUhuTGxmRzhzdWhzU3gzc0d2MFZESnFGMmM0aG9xcG55TDNPWXI3d1hNWFVONFVaWDJqZlMveElTNCt0TXNidkpiRnFwWUY3MDdPeDlsZnZyVjQ3bEJHZE5qNzR3bHlVNXBJd2YxdExWME8xN2xKVk9lUE5INnltZzBTdDBPNVBMdm5JMjBQRnhSTVUxV1Boa2huMzI3WEdNL09oSVIvTmg1U2lPcjJiVkhhSis0RzZ6cWY5aVg3Vk1WOVhzdUh5a3R4amVxcnpVOE5kN3lHcnZPNWN3RmdlNVVCcVF5K2ZOSnBRU0NiZytyeFFuVlpobzdxSmowR2JoaFhIenB4cHFrMnJrdVZqTXhGUktnNWEwNXI5ME5jdkpEN1BmQzhGT1hCNDFlbGxjWHJxSHRRQ1kyV2FOdzBEQ1lUbTZnYUJjMmRHL3Zodlp1YmJzTTl2S3JNRlltajhqdlVQc1RzaWJvM3ZQdUppbFIxV1IvZ2VteDA3RWE0R3ZwRHVnalVhbWFmRjNEaXZSYmlqUWtNaENzYXpacFVsMDk4eEs4SWNYdlpZVWNEYWdITk9iNWJvWk5nalI5RjMzdmtmNU1YRXlzM1hsNmJrRFZmZlRUWk1FNTVrRmROTmt1VkZLRUlEdE1PSWZjY01wb1J2dWxTTDJ3Z3hzekVlUFBqMDNUVm0rNVlzTEp2M2FvUm9FUHVVUEZ3RFl3ZXNkS0JSZ0FXZnp6T01lbUJYWlBiVGdkMzdhdlpjM05KZjNKWGEzK0FpbkFiZjl6eVhvbmt0UkxGZU9hYlUxT3dnZlJ3ZjJnN09wOHlPSVZVVXFXWFI3RkNWaFBWZ1RQN2UzUXJtMUIzd3NxZGJBTzE5bHFyb3Z5dkxVYndGVkJnbHhZeXFObHlVNlFQT3VnTm5MUHg0dFA3bUtnN1RJVjZFd293MS85UHZFVjhTSlkwREZBWVJ3cnhMdDVYSUZmYVZQQ01GWFMyZDI5SkVGbWhhdFgyOFpjZjRGSWErTk1HRkQydGk1c0J0aGExYjFJVlBmN3ZDYkZ5c2hWcWpuTElRMmwzUERMVmI1WFpadkpyQ0h4TmVFODZuWkhCSTZFS2EvTEFPS1VkWkRCZnU0ZHJpM0lBQWo4a0ZBak9kZkdPWHNZZkxybk5qSE9SeGVzcnpDekplRUxnUGhOSURvSkZSSkJHWkRoRmdJT2VtVnNma2QycENhR0xJUThQT1NpMnczZFprazlLallIZytDbTVxMFRwZUIrZUorU3EwbTYya01JekgyTXVTLzhvZ1NtRmdTMUdSSHdqNHhabkJYNnZUdG92eXVDbEpRNXV5c1hHVGQxWFBJSHoyZ3dnK2s1TTRCTVVLYWc5ekNtUWdhYkU5TTFxVExZM0w0Ym9MY0U2K1JXWmpXbnZDR2Y5aFpmRmlZSmRDTTRGMGZUNlUvQitHbHRWaDE2NHhWTlZLRDFCUEpmRWM1SGRsY2xPNzFEZnM5aXJKSTRQdCtaNnpaU1NpY053L1dXRTlScWJ5Z2o3MXdqWnkzVldoOURVS1ZwMnZnQWt5K0FhRjR6NUNiWmxwbGZXRUhoUkhsQmFCWkQ5Q2lBYWFzVW00ZUVUa1U0QUdiYXhwYlBlc1FRV0RKT3VCdVN1S0Fuck1tUU9Ga1YycUVsNm1KYngrSHZpSzRXaTcyZDQ4L1ZJMFdHamlGM1FieEQyTVcydDlYc1BlTlFqbW50cnhhcVJEdStVb3ZGS0tWRm1rTHdpZy9McXhOanMvaVB0T21ZbkpSY0ZHREV2aUpYK2dYQXE4bVVCVFhReXhleDRrcHdGMFoyMlhxSFJQSUhXWWZvbXQ1aVBGUnE0aVlRMjZwOFBVeFJPM21XOU9ZaWY4R0lSQ296aFhOMjFRTDUwWHI1UkRadVFRTW9tMnhsS0R4OFFhYWd1NmoxUjZQbk1Vd0owZ2lydWZvTDk3SHhRZ1ZkTGU4d1lkamVmdjIveTN3d0NDU2o2Q0E1aEljalJZTnNvd1AxRXZUbTBQS21BZit4amtlTXVYcG9sVzRKUXNDcFVWRW1tZnJXSlc4OTB1cnh6YW5jYU1PbWxPRlJRZmNuSXlrUDh4NkpINlRqYWM0NUg5SEdJbHpWUzcybDlZUVRRSnZQcWltTERMUXZkYzdmNUQ4VFBrS2J4bWlsNGtwRGt0QnMwSyt1WHNMcWdaU29QbWsyUWp4ZUJXb2tqcnVDdXQ0WDVIUTRYVXlseHZ3WHN2R2k3TG4zZ3pib0g2NEJoQVVPbXNoZTNmc2VSWGdlM0t2K3dzcE4xN21zWVVDdlBXYUo5cVF6bSttN3MxdjNRMmwrUzlnMXcvL0lSSnozNkJyZ1JjenZONkpXNE8yeXAxcDJxQVZ3c1doNG43d3R3SlBWdnAvRjJsSlNNOWVzOFlxRFlXMFNGRU9mTmZJNjBoVDZoWVg4TnlvVUZOSjZoY1k1R3VGNDZPMGFBMnNieTF4VmtVbmRhUGFhUE9rUjVZb21RWXVCNzUxSXdZY2tEd3FQcmoyRDhYSndBM3AvbVBIR2luN1FJdHIwakFybUJuVXplQllNcS9NRlJwQVMyM0hJakZCeWdMQUF6dU1HNnlWTVcxeXJPZ216dk5zdi9oejMwM3hjb0MrTXNxa3dGWFB5a3ZIOVZUMVVBMGVXNk1LK1lkQmNvYXZndTJnYmMwZlRIZ0dmTmx3MC9MNXMyWVZmZGdaZExNT2dlZnk3cTFRbEVCeDdYN2JrMnFTenhNRjlrMWtDbzA1eStYNXc1eXFob0xoTHhvWjRuZnExRm13TlZUOVA4VkhBS3c2c1J4TlpYUklKVlk4czdMc0J4Mk80UW9SKzRkV1h0cmdiUzNlZnVxQ09zcE8wTlFZVUtHL1dsVXRtdU05WUp2VzhpOFhWTENYc0dUSk54OWl2VG5pYWl5UW5jemlSSmpxRS80aTI3bjFvdDh0aXV0VmJNNXhVODZFNzlmVFZabHQxUmFjNWRiakl2N0p5RU9xOENaVHlpaWJEdEJBWVQzOExucTZHQ2lPcDd6OHpxTmFCeWphYUhzaVp2dUZXb0tVMG9kTDJVVGY1Zk5TaEpSaU1BQlJTUENjcmxnK1N4WlFNR0h6NS9GbEJ5VlFqNFArR3RvckMySjFQUVV0NGwvY2FoQ2RNQTVuR3YxcUNEd2tLTUNCWU5qejN3WTlBbEU3TS84OUJUZDF1R3ZqUlM4WlJSNDN0NjZOWnQ1Q0t5dFc1T29pMkhOZHpPN0JCM1VCWmI3cG0ydGpUbGZMemM1TDE0M21LZlE2S1h3b3RYU25BWnhuYnJLeWVGc2JqNU1yQ3NkZHBSWEpHVjl4bndiL1V3T0JxU0QwZDJ3VHZna3o5V3VGZDRQcmJPcGluVDlJSFBjMjh2S3NLejhHS3M2cEF2SHhaMTdvSW1ld1hjT1NobU1uYVliaHJuZ1haYlk4bUlZa3g2ZVA3bGZ3Z215WmVvYlJVUVVlWkZuc2o0TysrK3plelRVVFd4TkZqWFhUczZmRm85NHBhT3BuQUJOUkxUK3RKKzFkQkltTXhUUW5LSVBwUnRQK1NIcDZDSXZOdDBSQkRzYWdtZFhJRFM1RHU1L2FNMU1ITVNLNDBtdklKTDVQb0RUZlAvU3hYOXp3Z29uajhyQWsyU3ZzWVdXMjZiZnp0VzVWL1FycXhySG1kcUJNSVlObi9FY0U4WjU3OTJTbG5mcFlQREFWelVxVDlxYmNZcXJXaGt3YURKbGp6enl2TUZ3eWJUSVJzVmRzbUdtS2ZKZW9xUmtVMWRzWDRSYlUrd2lsRjBRS01rRWdLdldZR2VGc0lTcjhGYnA2WkhiVTBTRXBITlMrVGIxOUV2MWNBWndpeC9Dc3p3L1BaMjhwVmd6SzQwSHYrb3NVbEJGTFhUT2Ira1ZXalZVUDM4UHZvZGdUUjg3REpmZzArOHJtd0JOMUxhak05TVpvRmZlZGp1djJ4cm5rZUtHbWExMTQ4WWpTSW1BWi9mRmdvZmEwb3pLM0xnaE1yRkl4VGxuNzJ5MEZMczNxV052VHdyZ2xIcFM5Ylp1RGlzZExuY2lYTW1zSFNtdjFmanhzdWxnc1VjVTdLUDVxVFBCZHJmSW41TmNldUlDcWxCMzNYTU1lVmNWYWVyVkFTZ3lZNHpIaVpMc2loVlVEQ0wxeTA0Z1htSi9XMVlJWVZnUUlIQkxpdUMrdnlRUkh3TkVwMGV3OHd6M0tPV3pBMmhrM2pzdTdDcTdrSXVRSjF3MEpvRVdqdnJmT2pEcDVyK0Z1eno4eUlQTWZ5eXlrV1RIR0pZY2JuM1M2eWtYek8remdVd0hQN0dBKzBMVWlKUlVsWWwwUUxKOXZmNlFYcU1DRi8wdU5GTFNNOFliTWxScUxrWS91QjkveEd5bEUzWjhJZGxtMUFoRlVuK0M0WDRmMmV2OGY2SXBjVGIwQ2l2bXlFVXBFVVNRdHRSVzNHdWN2a2pVMm56NXROa0ZVa0lhcktvaHpZVXJneFptZTdZTjNFUDlZWE1GbHY5SERKWldzRjFEK1Vzemo0SHM4T3M5WjdDNHlXWVFKdUtCZjRwL3hCMEdFNUU0UndUOFJNMktxYzdtYkgvc2VKNU1kQlMvek9XWGcvQ1N3R09zSi8zbVFXR3Y1cVphSktTdDZmdlBMdG9RNUZkMDJCNnpJdkszYVdDRW9ZelRYdzZqeGUxbzhzNFUrWEtsTFJzblYzaktaeVh0N1dFTHFEbWFnYzJyY3NGTldJVXZ2MVBoVSt6OVFKdzZDS3lmRGJ2bm5vTW1Xa3F5V2lhcVUrcWU1VkplckFOUnBlekdZd2RtRVAvNzJ1TWJkZkV2VGNSMGpwcCtuUXFzSWxFc05Ga1oxZStZUmx3MGg0TW93a1BVY2Q2aTdEV3B2cHhmUXRRY3AzNm5raStaNjltaVYwK09vektseDJ3K2F6eUZ6V1pxY1NKM3BRNnB2eUtJanFVN3JOM0VVbGdPbnZUOFZEbG5hZk85MWg5S0hET1AzSmE2cU8vNEZwcmttbFU0cVFHaDVNRGVkUGYwL2o3Z0lQTFNzQlFCVG1XMDJLZkUvYXBrMU1GaW9sKzAvS1BCZTNDdGwrMWxqWk1YVWtGaTJ6QklLTzBCUVpsdXp5REdvY2lhS3M5Z2FCUGkxUktyMzVZZlZZazlWT0Z5RnozVVd2Vis3dmt3U3J3dEx6M1p1emFZY3p0UTNUL1dlTW8wcjFlMFRMMG9relEwS2JGRzZ5Y202eHlrb1drSGJHL0Q3UDlxeXpsRXpaQ0RkUFdROWVyaXlNdXpzbHZVOXNRektZOUZjR2RoMVBOWkowOEZmZm5MN2VIYlc5RjBwM0MvZEVreDNZdUh1TXMrM002UllwbjJzOGFQUFFjZ2YvQkV6QkJIRWJUMWdPRCtDalNzVWU1em5tU2w0WCtxRGdMa3pxSytDTzhvUWpGVGw0UWpTeStCbnVVb0F5ZEFFbHRQQkovQ1JsQ1NYZkp1NlVOV1RLRHhsVlZoUGMwKzdXZ0h5RWZpc2hpcGNqbXFpeEJUQzVyWTV0M2I2RlpqK3hsL2ZHRkVWeFYrZFRlcWViNkE4bFVveGlnaXR5QWk2KzNzZ2pJUHNha0VDS1A5RDVkeTVmd0xkVEJiZ3hrazVzNHJCVVhRekNRSWl4SjcxdE9YVjc0ejU0Q096clUzaVloK2lxYllGOFZ0eStDYzlDOWJ4OGgxTEY0Yy9RYTNLN0J4YXczMU02aVFjbTY0N0xSUUpnUVMvejFuM2dBWGQ0OFNQa3dSaEhjVHJiMkVTN3lFWXRTZWhpekN4blFCRHp3aTdiSHp2bFpaVXFiOWFYbk5UeC94VVdyRW15K09yN1JmVWRMcjV5RUxyTkE3KzVKNW8wTFZUS0xtZTFRR1E1K24yM0MxS2ZZM3dDTS96VFlhQUdGV0ptOCtZU0hPaEFWVksxOW1EUTNCT1hCVWpTTHJDNFVVODRkRW1ZVTRXRm5WTE5oRFExL2dWUDl4YjJXa0ViS1NnM0xmNnpqTDFoRlhaSU5vclNZN1EvbUp2Mmh1R3AzQlFack1WazJPbFphSWRqTVdEMnRBY0F2TW44Qmt6MHZ2N2VJeG5iVEV4ZksxUjRYRTJVVm9UdTd1b1dvRTdpRjVvMXJydThnV3NyZVo5dVN0WndURGxnSTFRcWVuZEFOU3lPb05BMzF1SitpelZWOTVpZEQ2YTE5TCtYeExiTmw5dnVtWklGekVHb1U1MXdkRVZmdWJOYUw4aTJUUlJ0SDZwUEJra3lhdkJZZFdMQkFPSmdtVDZodjc4QTlrMmVBWkN6S3VPOVNqSFA1bGhNTElkZWNyN2x3WUhHcUMxS3dzaUxydlFPN0srWmdIVytEejZzRjY0bER2VlZIR0cvMkVYY0ZRRmQzRDM0RXpURDFSbGVCaUxlMnFzVlJueGZSLzhmS0lLNVVRVTlENGUreE1oYllsR3l0TDFBbmZmWXE2TFh6aWdGY3ZqalZ6S0h2QUxObVQwY0RabXdkcm00R0xEQzJ5eVphMlI5RTd6TW00M2Q3Tzk2Njl1V2RDZmhTWDZGSFh2bElvZEVvOStmOWM1NDdqVFFaNEtQc1d1VGppV20yUHFXRE9DT2RVK0VxS1V5Z01jVU9oOWNrT296K0xpWnZVZ1pxWXpLdHV5MnE2OGM2Q3MxeW01NjFIaGZWMHBXYkM2Rm42bnZOaVpTS0NCOUFCUHo4SHJiSHdwWldWR1hUNXh6UjhxUDNFNFBVZWF2UElVU0VSdVloNHg0a3BkTEttSGduL2pNWm90TXRiejRMWDgvVWJibDNaODFxMjZhb1NMaEFsVGJUckxHQUJ0UHBVckxHRkN1Yk5pMHFQc1hZQS8rWXZVUXFCRG9DU1FWU0JjWDVNeGNXeld0V013NEhnTkZadGMxSG1mZkdsU1BpaHgyNUJmQXpocVBJM1NieFd0bTRuQ21kZC8vQzZFTEI0MXI2VXNCK2YycVNFSDYwT2lTSFZ1eFhXZTMxZGRlZUR2eFkzQSttbmkzUzYwSTM2NmQxMTRsUW1aaytFS3Bra2FCTXhyL09ERzF5MVpMekU1YWF4ZVJleTI5cVBuVzNHWHEvaXlnWDFxbzVXbkVuNUJZcDJFdWdkM0UxU0NBZDVIK203S3VmSFRLdnkyZW1QVTdTR3RjYWVLc1NPTmxCc2h3ZHpTaFhUTDluUnpFcFMwRVRyZlZhY0l4RUc3TUhPV2FkY2RSai92SWlJSFJMeEJzTnlFejluekRqQzdqa3FPc3NudlVQeUVWRVFBNXR5eTBlcEE2T21VTTB1NlVrRHFBVHF6WVl6SHEwSmt2cXhjYVhiYUQ0cHRBUk1ubndjazg4ajY5NWJOUE0va0RQRkFKSXdjYWpubWtzTmVDS25iQ3d0MG5wck0vUGtaZStxb0cwekxoaW5zT0RYcUs3dVBxcS9LMXkzeUxJdVhCLzh2SUZZWTJlelJDZ1JoS3IzZy9ZQitoWHJqQlNwVjJTUGUxYmZjd0o0WnpzenphaWtoZFluVTVEVitxZlFqR1paYVdIY1grYkJmMVlQeVI2RkEzbStRUjF2N243TjYzNjlVNDVoMnlDSmhyay9Dbzd1WGdkcERpWE9DTzZnd0wwYmlLUk1mejZnWWxDaFVPQS9jZDM4T2ZIOWRzbkNITkV6aFR6ZDYyeGkrNWJKd1AvS0ErWStSTVNUR3pmR0ZjWmRtR1B6dXkwM055S3ByK0hndmdXbmFvRFdCQjVUck1zYk9HRUtxaVd1MVFZSi9ZcGlRUWNHTE1vekpQdVFxTzJMNWE3Y1FOWWQwTHVUbFBGM1BMaGFVNTBhMFhUV2ZVTDFCOHIwbjczRHpmT2NmUW9ZR25YczNYTEhEK1crcjI1M0ttLzE1MnVTeTFjZlF1MUs3a0M5RUZ4OTNUbkZweEhUdzZWNHQydmxENlZ2WHIvYjJqSCtXRytjRVQwUVVjeTg2dHNoZk5naXdsZ2xGQThTUU9HRXRyTklvbDc2VTFVVmRhWFFNMXJiemM4YVVpbFVKd3dhN0tZRCtCWDVablMrUm1CQ1UzQlVyTTVhQzdGcXFWbjZtYlNGVDAwU2U4NEkreG5zUGFwNWlYY1RuSWVEYTB3NzhLQUtMcDNOZzhTemkzeXFUdlZiVEc1ZU1FcG5OZHhOQnlqSk1iZmsweWEyOERaQ3BmV3BaUVlZN0JJRDNXN3ZDS20wZWV3ZXJkVG1Ha2EzR21wQnA2WHJxVGNCWVY3YVpVb1ZyMytzOXdKeGUvcXJHcldxVEJHZ0xtRFQ0anhpWTdvUWloWmV0VkJsVER5cmpQR0hCQUJFQWh5S1B5YmNRcXM3OHhjRm0wMGVnZ1BUMndLdENrME9QZFlFd1JLVE5ZdENRbG9UL2Zzaiswcm42RkpGTGFEZGFCV0Erck43Qk81RVZwWUpDN2lvdWxxcjRvWWNDK3hmdGRQQTdzcWxjWmpxMXY2cy9Zcm94ekgvK3QraTVOUVVvd2l3UlFjWU9zaXIwbmdlU3FVemEvcXk3ZWV3UjdSNDF2UGNpV3BZcEdsN1Z2V1ZoUmJqd3RmOVRzTGhvNTQzYWdTT0JRWjN1MFdXQXNoQ3YvclV6QWwvckl3VElteGhvVDRicktPQUtMVGhTdUd2a0ljMkdTY2NRMFZOd1pRSytXNFdHUlpGTC9UVE91UEVrRXFDdlYySkh4aGhtR3o4SmtyRUk4dEZSVlBqeHZjTW9Qc3I3aWZPWGZKc2tVYlB3bFpvMDA1RnBLOWxZWVdYTlUvTSt6b0V5bmNaT3VkN2ZubG1KMnp6cit0ejNwVWFqcUg5cS92SUpGYTVCb3I4N0poM1JybnBVRHFRaGZNRGtWZlA3TDlvNjExcG43YklvZXBYVDMwT1huZTVQNDRsT1p6Z2VCb3Y4Um1tYldPaTdQczN4MFpzZ05QU0VsVzU5Nk13MVFVMEtXTWhtSXo3SmNqc0NGTWpHWjYydGhBWTRJQWRlK1gvN093TEl4U2lsNERES084SVlUQlVOTm1NR0JFdXdhblFKQWJQb2RkSTlFTHA5NGtIVldYLzExem92MWZvT3pTa29yZFAyb0dLMTBaL29DOThJTjQvWi9rWk1aaWlpMXVGNXh3T21GMDdOR1ZxUkxNT1YvUTVJNFlaT0wwSGNuMXpmSWRFWDdSMTZqeERENGZwUEU4Q2t0UVVDNzB6UE45L3k0MzNmdXpHb1phQnFvSW9SWVpWa1JrTlJvNm9aUFhyL2hLTVRlMUptL2g3Q1lyVk5NWWY5bU0rcjl2T1BnVEc3ZjZvTU5FUVUxbzJ4YzR4R0dpWW1sVXZDRzJyU2dBYm1JMVF0U2I0OXpPdGZoU1N0NEJFbWFxbWo2ZStaY0ZsbjZjK1FFd01rYU5OdFlldnFVVURXYjA3aU5GeDhsTFpQS2lNYmhrMElqYm1YSTlQejlXZTJaN1ZUQzN0QlU2cVg2RU9IWmxZQnJsWlViNDZaUHAvRnZ5VzlXTmVkUGkwdlcxSEVPbi9VN0JSMWZ2NFhlcnZjWVg5akdONDk4TThKZ3MyTVIwYUtsY3ByanlCZm5lWmU1RWh1UmZnSC93ejZ1VnBMZFpwSUpRYVpNRkxnR1A3Y211aVgzUkFmTGFCRTJTdEFydWxZdkxjUDI3RWFRdWNWQ2NqckxZTzdhbGtiTVZVTEVGWW1qZUlDdFRRWnc1S2hCVkJQdlo4N1NVZjhoNjNmRHlZcHJ6K25OaERadk8wcmlLU2MvM2RLYlhOTmQzZG90MXdxdEFldjhyNmVDZnh5VDJHU0pmOGUySjNHL1BLYzFqRUhWRHpDT2E2b0h2UVBZZmdxelBseFkwTEMxODhPVEFvU0pDRmUzejN5amJreXp1SFZaQUtseTltODJWVWU3QXVuMlhydmUzYkFXY0dxNTBIZzBEeklpemZzSHNvYWYxZHpsYVJGNGdjbFA4b1BpeldNNkJQYXp4MTIvcjlIR2JpdFVoSnp0WldEVEpDcUZRWjhPWEVadUhXWlN0MU95aGNhdmg3bFZqb2tyblBqcVFURUczeTFSWW54QWlqeUF6dWdYN09hV1NDRXZNRTRSK0toVVdFTnNSc2FWK1N1ZVoyVHhqSGRVakJrYmdaVXNsNWFoV1JLdmtiVEFtMjhoMTVyUFBwTVEwZTdZVHFIN2JvcUNMVFRtb1dpWi9aYk9mUlF2azlDQ29ZM3BIM0NDRFFEakE5L0pwbWNML0h3MXI5cmpQQitNYmJkdlU2Y2s5T1k4TVZCM0FvNk1iSmRvNjhybkEzTWo2UHhzNXBUYkpYRjZPUmFMWDhrQ1FmU3FicEcycm9MUm9RNmF1eEdONHdjWnRlNmdEUFpyVHRXengvL1AxWVdpUG0yTWdVUlA4akQxaHc2S0hhR2pNc1JjTGVYOGV3ckFWZmxGS2F1azl5QXFuQ28vZU5Cem1Sc00xdUNqYkJlZVhmaUNyaHpLdjJ5SHRtR05aRlhzMGxCZU5pb1Q5Wkw3SzQ1a0tmOXlDNzQ0bnJ6U28wWk01czExVUt0S240aFhRZ0hUZlpNZmhLN1JiV1lqYVRVdk9LT3VwakxOdlhsWW1QTDFUNjNENjJJakh3bHUyOUdUWHVBUkxYak1jbU5TQjNoQXovOTRzMExicjdhcHNrYnBUdzlwTFl5TEFKOWNOcFJKY2Jwak9kUlJUaHMzd204VndadmZUNXkyRnJLVkNvZTdleWJZamVkc3krL3NJa2F2ZG55SVQwUTh4V0xnNTdvUUV5VDRvS2NnUEVLc3RXenJTMWpoNjdEUlplR2VmSjJiQTFkNHNmeUVmU2dOTHMxaWRTZ1Q3UWJSZDEveVY5WXVieWlhUDVNRVNaaW4xVlk3cTh5eFhQWjBtNGxXNTdMWWZxUnVRZmZId3YvTFBQVTRkd2JlTlIxbFNKYjRkVjh2YTI1ZHlqYmFJTmp2bHFWQys0bTVVaVpZT0VlWDVjMko1VjROd1VOS1RxUFJqU2tod2IwQWpaMjNHYmd6bk5yTVRDeE15K2Y4UnZ0TDU4TzNLdXZDNW0rUkNtU040UVVtZVN4bld0dkRLb0ViaVFxWHZsN1g0b09wb3UrNFFKRDFjekpKakI4SUNpQjRIUjRVaXM1b2d1NlozSmo1eDNMM2E0eGZNY1hwM1Jldm5hOWRXdGdKM2ozL3p4dlM0M1B6OUFYa3ZCYnJReno0RUloT1AzZXZtU2Iyb0o3RVYraXE0SStBbzIwQW1JdXdWbDlxSnl4a0tkYzg5dXZydjcvVTRKR0VmK0J2R25WOXlEelRjaFZMK3cyVE9GSzVlbkowRGZmZDMwUm1WV0tmY0pCR2NEelY0RnlSeGMyVFpubWZRS2FXRStpbkExR2ZEUFVyVEZWMllhUFN3b3V0UmF6dkdsMXg4ZHlVblNxT3hibTJYNXFEWk1LaGpVelhKb2RiTTNya2taR0ZQcVNURlY2RVhsUnlTdFZJbHR2R2xINytwY2ZDZ05JMTBvbXlyWFFNL3NhWnJpUWNKTEs3TXJEVnVlc0FFQjE4UXZnenArVlBxYkh0ZGZwY1JDZEE1cDUxa1hyVWFsN1dpSzAzTVphV1R3SitqYjc4RnZhWkR4VW5FVkJVNE96QVJxVzlwUi9SYjZ1eGlhL1NvZzRtSm82a0RleFdiVFV1TFcxV0NwcTQ2T2hyeTBiWTNORWVZTFlscDRrK0U0YWtUcmg5VjBlRG9zamJ6N2dUa3NYZnlFMHhrRCtiWjdIcTJvc0R1TzRocGdNZWwxTlQ5S1QyYlF2d05jVW55eDEwWkhyemdIOXNHSXZsSCtDTG02aXFUdUFEVStuRlNZa2docnNvVXZqNVgrUFhHQnZvOFUwYlFvNEpkTkhERk1RNWx4QmpWVTMzV01waXU1aDlGSnJzWTErU0pKRUlwejM0K0pxNCtMVnJGVUtEdjgxbkY4V1ByR1gxcjNjWU05eUVHbWx2NHBUN3NEcFFuVHFoc2dEOHlxWDJHRmRQTzZPWCtBS3paYk5BNTlwVlRVMzkrRlNLS0dNdENmaVRVYjJpdkovMFkwVzVBQ3poSFNFMjQxMGU0cVI1RXorZ0RxVEhZamJaZG1nc2c3ek9uclgzUlAxVDhhdEtUWnBCWXVoYkZSUXZUTGpzOHhZR2psRkg2WjdmNS9SeXlFbUk4akRkUXlCNzJNc2NaRTU5c0tuZWtVTVdqWnE4azd1ZlNSdlo2aHFVcGlBTk03ZlR4SmZWRHhvRG4vWVdtTWViZm03dTJUaEdWV0x0SjR6SjhHdk1nU0d4Tkt4NlRBQUdyaFBrSU40bC9SYkl6bzJZQ2ZMQ1J0TTBKU0Vob3JKSC83Z0V0eGxEeDdyRDNRSFZ1dzAvT2VCRVRrNnhKOUxWUUQzc3Vob3BQOTMzSURMZEJxckQ2TWJ2Vkk0bXJzb1gxZUtoOVpuR3F2anVJN0duTUR6Q2ViZFB2TVRIS3VocEVibVZUWmM1RDJoL3FVd09VM1A4eU81R2JkSk9zNWcxdUtadkRlUEcyZWNGTTZqZ0xDYUxJQU5zSG5yRis3QXdCakpXNEZ4NjhwZVorNVBVNUFqRloyaVE0NkVwd2dSTkpMams2bnp4d3VIVE1lR1FYYmxHU00xYXdITmJIcXpHQkpyaFRZejdIa3hQWExSSW1GMjlZMnM4c2pxWWlHbTRKWlh2UUR4QXpZdkJJODBMV0xIanlGQWw1SUNxOHRGQTUvM3VHRDJvMGhTUFA4azJHL0FsTnpFQXE0QXhHbGVzdC9KaUh2SWJNc09mR0w0NnZhUHBBa0gwb2w0TERCb1JKL0hNbUlhTU9kUmVPREFlaWZBeSt2QzBNWERtbnN5NGtvYXdEeStxYy9RdWtrY0t2VHd3MnMyUDBPVkxEU3N4REMrYk1TV1BsUnI2OWZNQmdSN3hRdzlocDZvMXZVRmRnQ0pSRXd4b09HbWFyc2dweUZiL3cwWGE4QTRQWCtoOEw0Zy9WbFJlZnVXSDc5Qm04UEFjWmhlZmRjSU1zNmRZeno2b1J3cXRqZWM2cW11WG9FMGMxcDVjNE91UnpXNVNwQTVVempnK0RhZG93bTBtbnpld041VWx5K1JHZjdHTFhYOTdRSlhsc2o1Qmp3cTNFc1pCR1huTU96OXFvYnU2SHZmRENHaEYzT2NyTHBtTFV2SXRyN0lTNXBhUkxrKzl3bko3MkVSamIvMVZvaFdPS1phdk5uR01YbkZTV1phK1VYc0JZWHBQWThZL2FsRE1aNkxDdVlPQWVnRXNFc1g1ZCtCb2FCbzBKUlEyTitCMXNxZHRob2RaZHc5bXZKKzRiOHZyY2dTYjRCNzgvS3pJZEl4LzBKZy9Qd3JSVlZvby91anhNb1RFcnp2eVVJVmo2b1d0UzlWS2JlZFpIbExsRnZXYXh2UzBoMmRreVZNM1BLRmQ5ellHeWpXbGxydGFtMTU2andkMmRnOEtDSk5OaHRQOWt6c3hITi9FY3NXbHZMYlpRUFlhWDIrSG8vWkFJS3N6aEJIbHh5dmFKRnpnWlkrNE1nVEZKa2JwODlrSG9FWjM5Y3N2OG1zZVJENmFFTVJQWTc5VTBjNk1OODgybWVubzdjYk8zMTM5TWExeWNNYnBpWWMrenhpazJOaXpEVU02QUpRNnVuRDliZ0lqMTIzMUM2YysxNzg3ZEJFc2NIanU1c2hhUVpIUEt3L1UwanV4dGFoZis2K2JJT2V1SmRCV2tZcG9kbFJTTm4wamEvUGNWLzBlK2pFZ01DNFZYRTVFM2VHRG91L0lHY3hYOEY2OEQyOVJBUEN5VEF2R05hNkV6SXNqaXZHa1JpU25SZldGOGZmT0c3QXhPL0tUaG9oWnE1ZW44bS9XUHpFT1ZOcEl5MFBhNDFYcXdidGtKeHhBdkk5OGpMMGQ3R0dLVWJ0UzB4THF3Zm1Ybzh4SFM5dUxncjNkaG9USk1zU2k5L1p4UmlEekhwaWRnK0tmeUJSMHNRbXFRb3FsQlp0bFZ4cHpOa0ZkUWhaSkl6bXlZQThQSmh5dW05ZzlRYTJ1TTBnRXJkNlBoeU9HUHYvUkFZTEpxS3FSRU05K2NKR1YvS2pNN01ncGJGV1pCQ0pUdWFsZm82Q2E5TVd2TG55Wkk5R1IzWkNJdTJLbDJoaUhhMDZRUFN0TnJrUTBSTVpXRjYvT3pSSlZIZ2pMa2g2RStxTzk2OUFyQ0p2OGhrNUlLdmhXY3BVcHF6M2pMRXBxblQ1UUNyZHVvUVNWNmpYSHpBc1FIN2gyOGZtL1FVcXVQckxoeVJwZUpMaXNUSlRlNDBwRG1KVUREWE5lSG1RRC93U3p4ditWNGNWQ3BFbyswWmpQMUo0SW8vekdwbVpiaXFXb1JkT210NnNCdGJmYWptZWVZeEd4NURwSzZxOGVQeDdqdWQ0dCtaYm4rWjF5b28yeXFBck5TRkNLakZkOVhIenB2Q25Zc2dYNUNrQk5RamluWndlNm9wbGdGWjJra0ZFc1pQOFBYdW9nZnRxYUtHYzc1R093MzM5UXZpT0NjZ2dnZXRmSEJmcnpzU2JiVk5qbTU5OHdPMHA4K2FkelhzOWMxNTh1OGszQ1ovcXhCanVReDN4ZC9MaVVQVFFlRFpyWm1BUXNjRUhoWE5BVHh6eDdFT2dQRHdGWlZ1dys2b0txdVBOb3AvTHNGMFh4NFBQTzlmdGRBSjhvOHNpeHMvZk1kRE95WVlub2FTUzVoeXd3SUIzZDZTS1ZtL0FzWDYyNnVwOTJ4WENlWUhUb0F3M1NDeHg3aFhjVXNyYjY4Z3dHMlliVmY5V3ZJZnFhTXpuQXBma0FZUkZ1YlJXRnNHV1R6RG1UUkZGNVkvWHZDVnVpWVZyRGNaTElRYS93eFlJS1J3eXB1dktxMWprcW9ZNTFTNlV6cnE4d2dMdTlFTnRzWG1iVXNIZ1AwYzJzMFVrWlg3cS9uSW1QT2RsUHVEczJwelVpdFRJZzdVcTZQY2Z3SHlYTCs5a0xKWTNoejhCeTlGSnBuV3VGbG14cDZoQ2d3amRrcnR5LzFDUmx6TWZYY1dJRFNzSWRYSTl3KzZkVGhrV2VmWDRITVJHTGs3NTJGWlJFckd4dkN0aE1wREZKYTQyYjE2YWVvc1A5TTUxNzkyZ2kxdFB4dTRjTXVucDljYWN1WGJqYnROeFpIS0MxOUREcU9CVm10QVVvSUFNcjJEeUZDN3Z4cVBaMVNMSUxPVU9TajU0ajJOcHhybitiUGJlTHo2RWFmZlRVQjJPcy82WStWN0JaTG5NcEtkK0M0VEFjVnVhNlJCaUZpQWJTV2RQTW55bnMwOWJTcEVCNDdUYTZkTytCTkVFMEhOell5eXowc1B2b0JyQ2w2cFhFajVjQ3V2dlJxcFpZT1BmZmpCT2o3cHF6dWd5cDUzTUJZYjZSb2xkdTdQaEt4SnQyRlkwYWVMM3hqTE1GVTR4QXVMSFJyMm1uUnl0SGJoTW1QQ2tsWFU3ajM2YlBLOHFKQTNXbSszVjIrdVdUVDlDUjVLL3VnWEYzMG1NNHVKTURLL1I3Y3dWNG5XbmtHUVFLMFJyN3hxaUEyTmF1bWlWcVFJMzAwZFdld01QbFpwdEdnRnpXRFVLa0RLcGh4Y21NdGFISVRDbXRNeDZjSlZDaFRVdW95ZDNGUml3TWRQYkhpTVJCRUg3TldkTmVuSkozQ2hpaXhLRFdIeG5xVjVUYXNnbmJNdVZVc2x6bHZseFdaeHhtS0ZyLzNQVE9Za1JEL2MyRnZDT1FoWElYVG0xT2VDbjZnT0NvR0h4NGxDVlFuc01SV1BDZ05DMytuSFZLTFRmSVhYTHEzMEF1ZE1LTUx2VTNoRU1EaHA4czNBaHdUWHlNUElyWG9sWTFac2g4ZnJVc1Jrd0J2bUZQTFdsMUxGaFVJblVsU2hxdllZK1drdUZMVjc2VVd1cW8rK0pkbzF3VlUrZ0s2QU03QmtNVzMzcitqT1NaUGE0eGo0MDdZK2dnZ2xTNmEyd2REWERKQzhmNU9DN29DakJsa3lPZlFqUEVqR2JPRXVubnIxQ2ZBT3l5bDJHSkR5RlU3cFpFbHdWVTAzKzc1eEpYVlZTYkhPVldIQmtSd0cwZWZGZXZYUTRtcnA3RC9UVlgzbGRnaFB6R2lLZ29LbjhiS04rWm1WdFFtYm1TaTlMb3gzRTRxNm5YUlE5bkhLR2J5WklQdXZBdFJmSjU4eHB0SUxrZmJvYXZnSDI2YVhURnZySmRMYkVTZ1czdHBlYzA5OWI0NjdlYjRLUk1mOG9OS3JUT2Vid05WbHExKzBycG1RVWI4ckRKbnVhTU1QSldDTy8xTWN5bUpFOUJYUEdQNHRiMHhoeEE1MTFycHdwNDFnMHVibGx0c1FucHBlU1YxbVdBekFiSm9Fd1dCamU2TnRlOFcrTVlldWczdVM4eGNnVlQrUVpSY1NzblRkZXpXZFptN1FYUXVLdjc5RVBacHdpRUNscGM3WG9xT0JTY0pielVTVnE3Y2NRek94aUFqR2RFd1gxNzhybkJuY0tlendRMldnSjR3VGU3cVUvVDFGQ21ZWEtFa2tyK2pldUQvZ255THpWeXh3V1cydDB6K2hTZ1N6MExRYTdBVjRyd2l0Njl4NStXTjdteVNCY0xqYmJSKzZTK0JIZTZWK3ZjYkRVWVpiQUlGWXZ5S1VFUDJPTVR4T2VTajRKZ0UyMy9RQ1N2eDhVMXlKQmZEbnBUZytJOVBHY2lZY2cxNDc4WTh5Y2pUU1N0WGZlTFdzaFNpQU9zUUYyU0dQTG9ERXIzRXMyQjkyWGVIWFRBckdtOCtkS29VdjFZNENLSFBDOFUrWFpSMGkxVnRFTlRQckwwd0VOM3JLMnNUN1ZYSG9TaHpKNGtjSkdOWFk4ejc5YUtzZTNJY3pybjFmSkNFRFBMdEdjUEFURzB2UmR6VG4wTEVpdmlHQXg5NmE4Wk1pdDQ0QlUwS1BMRlM2OUxjQlllNEdOQWdvcGpFTU95Tk1uMXovOU4yalVyRUNQSmx1ZVo3UTBRWGJBV1FMcXZHZG9CVnllVGk5QVlEdURqMXJaT3RNN1BoZ0puTnROWjJnZWZRV01KOFpBczNCckkrVUZWT2t2RjNoaXVhQk5PVGdla2N5eUN1VStMRDV4djBGNjBCM1RMVXYxUzJRem1KUmsxYng0MXc4YXZjVFo0cWorY3VEb2QvWm1xY29wa0pvQ3ExK1QxY0t4T3g0c0RCOWR1SnJMWWhZSDh0UC9kbjcrUXpHUVd0dUtRVThKOWpPWTlCOXpXcUJCWlRzU0V0SmlDTURDVDBFTFlaUzRob2themZjaHBseUIzN05PWHBVdHcxaGs0WmVpMVdDSlZRcERmNVp0ajB0WTZVVXhMQmo2Q0lXZVlQcVVqbndZOE5YY05ldHhKMGpmUzgybFc1QmZyYnVHWUtaTnBoY0F3Y2lnNkRTYk1KWUJlVVo2WWpRMHVUWXc0a3lCWDN2L1cyc1VLMzV0SnM0ZnlxaVdnTWhkbFVrNUw0aVovWE90STB4ZXkydHpid1pvSlIrTHArK21nQmRHaml2clNKeUhkN01uMGZGaFFuaURMdEdWUUM0NkorbFBLYXMvcVlVZGNKZGNQWElCR1VKbE1QSnozT2EzRmRzM0pEUmVzRVdXdXFuc0VWSTNZZmRKcEY0Qy8yQU1tQ3laZDlPdDlmdlpIMzY0K0pkWDlCUXo2VU1LZjgyWXZodGljRTJEU1ZEY25nbUwwV3RjamhCa1BkMzg2VnNHQ1h5UTNBTjIrK1J1VWpOdG5qUzNBeDcrc0Jnazc3VmJPdnNZbGVlR3lLZkdtOG9USWlvSytPN2t2eWFOVTExOFRPalpJa0dadlF6RTJUS1kyQWZKT2s3Y2tFeHlBZGNlVU1mQnZqbFZRVmVzK3QzWjFMSXE3Tld5Qzk5V000eTBqRzUwZ3JRZEFuUDNOL25oZGpyMGtkUzJ1cjN2YTFQaW9wZ2h4clJiVTN4Y2ZTQllLRDIyTWxTS1JuTFhpN202MHp3UEdqcSs1dEhSdFRyVTFMYmpQVUxaYnpPNHVzeU5UNVBBQUMwTXU4NWVTM08weVpnVGJLZmF3UHNyb1JqeHMvbDNmUGY5d2l3dXllbUg4TlRxMUVJZGtrY0paNkRrMnBuVmVwVEE1Z2U3ZDZ4cEdQakIxUldLcUx5ZzB1SDVyd1dYZzY0UjkyTmtQY3JNTkt5QXoxd1IrMW5sQ3JwV05SRkFxcmhpeHVNNk1DUk9FTW9zNmM2VkdsbWRZQlBJWDF2cEUyaXViZkdVVzd1TUp6dVVNdjdxOUdZdGtta2EzZThIUlVsY2J5Q3FDQnpyR0ZPZzlSaFRpT25KbWFZNmdDVlV6dm5najhZUzhkaEJxdDlReCtBOGkwYXFNT2kyZHRpYy90Sng3SUx2VFJ0dXZTNGZzaituMzR3ZjZOL1p1citKZ2dHL2h6Tkk0Sko3eTNJRVhGRlJXT0xmTnlVZ2kzeHZuNkd3MTZoRjNiVlMxK09uM2dGZkpTTUJLRjlpc1pLU2RCaTNsS3hRQUdkYUhEMXdaemo5ZEZWb2Z3ZTIrbVlVRVQ2UDQ5dENXS3JOWGVhMDZFSnh5Z3ZTaTh2Tm5kQ044My8xL2dFMEFPMHlocHRSOVZ0Ti9OVUJTQTUwemk0WWF5TXpTNkcyN1h6Q2VzRUNTRTVXbi9BUEZXQ3ZXVm5rQUx2UWlMeVJNblRGbDk0UEFWMThxMlJwaHNvU2ZVa21tbWZNaHVzQytEVG1KMnlac1M2czZGL3FjN2k2VXlOQW9GVXN4NmQ2THJjS1llVVF1REJTek5pN1FMbXRtWTZuaDFkWFNsNjRRZjloN2lsVFdQMWZ2OGFjM1BwSHpCbmVoSnd6OXprSmN0eUh4dXZCWkRyR2hOOE5jWUU4eUpJWHZOUjJ0bVVraGdQanQwNVdKRnBLcUlqcHNTeDMyQzkxaiswMy9zZGUwNDRNeWM4V2tCRTdPLzlBdmxHSVRDZEZQaVNaOVhaZ2FuM0pnSVlOWk1pNDZObngwd3I1SGxDWEhrczBCaGFsTytaM3FFWXp6MGREWjlPR0ErWXU5alBFNE1Ib0paQm5JVXFtNUEvYWEvMjIrSEpjVEF4eldiaWVBbWluRlp6djlqM2puVjBaa2VpWW54aEJsTThuZ1FucWlVM3ZZSTVtV1haaFJ5ZElLTVNuRmVlTUIwTXRwSUpzUUE0V3J3VnB2RFZ3b2VXOU5DWndWSUtvUTVzUWYwOS8zQ0dKQk5LMUsxRnRab3E0WmczeGpFdFRHcloxZk9vZk1MMktvay8ySjBYQ3dkKzVEMFNFWmVSUjd3Q1A0ZVpUcEhsT2VtVit3RkZDSU9lay9UZVMxK0lPQkdUVm1TQWh4aC9FNDQwVmZCeE44eHZBVEgreWhEZ1B4QkFXK1MvemhVM0VGdEl1SEZ3akRCem9Cc1I4Y0FmOVF4TVFiU1FNMDdRMVh4UVMreDBVVXUvY01NN2N0eXpGaXNTc2YrK256MHpvUHRDcDNiaVZSTThXUU1Celh3RXFNd01saVpsTHd5WTh0UE9DeUlzOTN5cW0yODh2d0FLZnUrL01oa3JCT2hXV0FuWVV3YTJzamlIZ3MvRDNBMU8vVzU2UXQvQzBDcTFCR2E4VGRKY3BRSWZxTFZjNERhVTZ6WC9EVURMZ3EyL0lKRDNkV1pjcjFiOFM2OTE4aFdoUG8xdzNwVHpCV2p4b2ZNS0xsNU4vOE1lb05uNXZzRGlCKytMZW11OXJCRExJS2pwenMrTDUwVTJ1Z21ubHpLT2RoQ0xDanUxYytIR2Vmd00rYnJ6b1NsMGNCVHZjeFg4ODhLS3NZT0VNWHJXMHQyb2pXaTRvVUY0YUg4UUFNcnZGN3NqMEh5K09tNWVvd1J1NU1jSHp3OWt2L2czYVU1K3BXTW40NmZoUk9XSk53SDVDbnljc1A5ZEVzZmN4QTArSEs3ZlViQzl5Y294RkErck1WYVlIajNIWWNXa1dFdHlXaFB3VnlMREk1YWpvNWNOZ3E4bTdXQWp4S1dVaXRKV3pra1JSWlcxSk41VUFmQVdWUmtCUk9ReStHd3Z1UXR1eVc1b3FlRTRSS2lIeC91WU8ybUhJYVFvR2Foelk5RlplTHVpUlRYMEtha3EyQUdldVpvWERNcXc2MU1tUDBjQ0VSMUJJdzlFd25FVDBrZDA5Um1rMERqcjlnU3ZzUmxLU0F0bmdVZjkwdWlkSFlEZmxIMnBiTDdNamYyeHBuSjhNMERmM0w5UWhZSmZQY0JKbnFWbmQvcWc2eWI0YTd6RTZISzMvWHJUSzFlcndNUklaV1kyc0JtWkVtUWNwR0ZhUTlXLzJ4RHFBZVI4QS8xTEJTbmMyYldjOHVwT3oxNEhKcFQ0eGVWcmNaM0dWN3JyMHU1ZGpjOC8rbUczRyt1QysrZkFpakNuSDVrRnhRQjRTTmFCemk2WVA1enpoS1hyeVpTdmZuMHpqUnRpclNlY3dOcW95U1drbnQzc2dxVktEVm8rWCtSMzFrWGRuR253cVNvUXliNS9JYllBTW55Mm1DYWVhT2NGZXA4dmNLSEw1NVVKQmxaMXUzVlVLY3BJSmo1a0Q2UjFMSVhuZFFXYnphaGtNTDl3dTI2SWYrYjhWSm9FcmxTZlJBN2JOWHdicFNKcUJFcTV2bTVRcy90dWg5eFk4SGF0Zy9xUzkzam1TdlR4WC9PMjNsMXVydUlabFBPYlF1T1dyVTRxYVFOK1ltREFIUllOL1l2aTVDUXpHSzZGQVpQUS9BK1A4Zmc5bVoxZm80Uyt2cWIrN3dLSTI0NjJnRzcwdVRuTXk3UEN3cXJScGU4ckpwZlFIT1RGRHlGSGgwZHF1RVBZMHRaSGNLVXpkdmRlMUhXdWZydFg1eU1VdHl5Zk8zck9FS28yZjBYL3YwM1BZMkViSkJpUXdiRjA5REFycGY0WFR4b2s3NklDNEY4TnRxK0hmWXkxY2FXMkNoWExkN3RFbk1HUXU4VzZ2Zm5XcE9pYVF0YmlKQStOUXBaSDEzMlhjZWhBa0tqNjFDRXoxWTd3YldUOFhvNkc1S3Ava0w4dDYxRndYNkF6YWpRU0NrWDBkT2p6R3M3MWI5L2djcDl4c2RsanFVU1kvbEhkWXNYYlRiUW1ieExYcUtNRGpCeWVNV3RCakxDcHZRdlprYjJrOVJXakdxbkQxaGZVbjY3aTBHazdLV3hzVVhTL0IyczNzZThIOEZtY3V4d2E3ZElpTTErZ2JhZWNLMlAybkZxQWdMUGtQdHJ5YWZ3TUI3aEtDMkZUZUE4NWNtall6a091V0UxNlcxSGFDUnRRRFpUenl5MXJaMHZiMTJodXA3TkdyYVMrbGhmeUcxSXFzV1l5UUQ0cm5NN3ZxU2xRRTNCeklKL3hSWmNWQXNHVldlaDI3NkVJYUsxQjJ3ZFdFbFNjaHd1QTdZTDJnTkR0VzBLZWljNDhwZGpGVWcvalI2UDJuRlBpcTBhM2txMWZCVCtzbFY1ajFFVTgvY2c5cGtUZ0JNN2hZejRpNmpRYjZmRCs1ZTlaNGoyZDVQWmNzRHc0VjVWYmxXcm1Md2xMOC9sUTVvc0x0aDROUnNSUFh2MWxEbzN3R2pLbjFVWHpWK09LMjJybnZOc09OK1loYzdwajVXTXJPNnBwT0N2N0Z6OHFjaDQrSGtVbjVOdXZsTjF6bXoxRlJGSDlseDVUVVZmUVRuUlJDN21WMUZtaFoxWWVwbnJxNVo0Nm50c1JhRGhnQ3pRbGRNMVExb00xSld2TUk3WFhrRmh1Z01vT1RmWTl0VzdrVUFzMmViQ0lhWWdxdnJLNmhVTmxNNnRqN3Ura2RPSUtsd2x6RllrN0dvOVJYZlZrbHdvWExzbFUySnhlU2p5dFhUNlh0Vm1TaXlQOXZCcHRDODBvQnBlak1nV2NXSkVFSjA0eHY4aVFMZzRVUHhzdGNQY2ZqOXBGLzVWWGR5a2ZxY0J5azJrUXhRZnNDaFo3QURqZWdQRjhTM0c4OXNaKzJlVjU2QVBOZ0s2YWxnQTRoR09HbENGRDFiWjBsRGh1SFhaOWlMRWUxWDBCSDJMVkZFQUlGUmlQbHJBUDcySitRZ2FXTkorYUZQK2E1TnpFRGhucWxLQzJKejh6cXZ1eUhQdDJmUit1MnA4ZEl6aTNUb2JrVWJLUmRiQXhtWXNVbDUxUEp4NEN1d3paQkhiWXpBTG56bFlGb1lCRTZrQlJROTRHZnpzTXdCV2JyeGVBWVp0MFRWd0hHRDgrMVhjODlKUnVUSGFvSzlMU204SWd6MWtSa3hWOU5kT2hzRzhRdlFtTUdjNEpZMDN4dE5LZmxDS0VzMm9pR0pUOVZrMzBWaGF4Yk1mVVNIRGJGSjZKQURybHVrNkV6cUpnY1ZjYXRFdUlIeEVsaTd5elVZUzRJSVFzTktCTXNiUXZPNmVCbXpiT3haQjJQMkxhNHZRREN6L3ZZbUlYTVI4NGFSSStvUWZhNmgvOVFLeHdqMWtTa3YrMjBXNXJtZzE1aHFiQXhoMGpzbTJEWEtiTTVTb2pnTmlmdTJ5dkxjVlNoOXk2TVp2aTFvbXRBT1NDa3hBdjVLYXNkQWduczNKZFJ5QlZDUmN3dEtqV0VxczVpVVR3bExmcERuK0E1eHN2aXIzdFVaQjRrdmZJTFFWcE5mSDFFOGpETXAyNk5sVDNrTHRIZ1lLemtrZEMzK2tBVVRacWdocnR3dDc3elZTQnE1blovUWpLWGgxOFNLeHV4aHdHeFJlVEFjRGZiVXE4bFRZNFpKdEF0QzNXSTJkcWRHdmJyODdDYjFlcVhCaUlTb3QzOStvKzVaQlFWcWczY0huNTl3OStRQUladUZ4ZVZZUFhIOTl3Z1pnV3pxd29kck9rYnB4YlNKQ3F6U2Y2dzVPVHkwV1FRaVVUZlJ1T200RTJhNTZZM0lNdHI0S1QyYVJNNGx6ZGE1Sytldi9uTUJKYlJleDVOcTFLMUpEUm1GQzRNRjFWNkFFUVdvMkp4UTR2L2FWaytCT3VFSXo2WFh5Z0lEaXl0MHJvcGN6c3NNSmNoTkp3T0NHME1tbXdEYVltZ1RkMHA2M2k1SHZTNzBzSkl0cVY0Wkh6TUY3bEdDclN3d2ViU3gvMmlaVUlnd0RuSStxa3QrYkF0US9HK2pKZGN5M2dYa0M0eGtCRVhDa2lTU3l6aHlPb1JOSm9DbFBRRFVhakF3L2hVM2tVQzdKdHJhK2QxSThkWDFTdWdDbHhEam45NkIwcEZPQVEyV1ByaG0vaUYzU0x1T1lZZ0hBM3lHVHk0MkRVMWFpZUsrWVpaTXVjNEF1dXR2cVZqZ3E5a1hzaXRIKzF2NVluZWpwK2xRUDhKOExyREd0aE9SMnhNOURDajd5WXc0R2JucmNROWs1OEYyMWF1cmdYMVVkUURzaVFNV0l3TFRMTGtEeitTbG1mRXpYOUJBeUJ3SE9LWnZQQm53bXNaOVRUMU5rQkFUVFJSR0lXMVlmRlNMNU9Xd2hSa0VrY0ZOa0pEeXgwb3JJRmloSVNVMGtYOGJNRG9UYzJDNCtsUC9KdHpZUFhkSDk2Z2NnbFdIWGpNVE5Eai8zUERkczV4Q1FIaGRiT1ZFNmZJbjZxUE9BQ2ZxVnhFLzMvSVNBMDAwUVRsbWpOeGI2TEFOM2laOWhBblZpbTFENDNqcVoxN2pCQlpsdFFhVVRkalJBdSt2cmxrY2pBMit3OVBjNWdiaGRXM2ZGRHkzSEhxaWpEc3JPaUNCdGVzd1FjRXV6RmNOeTB5N085VG5RNGl1Umo0M3RLK0ZTV0NEanZVenVJdU1JZCt0WW5zd2Z1OFd1dUMxY0lRRmlkanBZelRUWFRGVGxNMHFGVGNWTTFyQ2w3Q0h0TEVwdlpQRlcrcVhlVUJZdDhiOTNPWWI2YzZoSEdLSFZVNXd3WkVTQ2dFMkc1RHNETkFBc0FQb2VmcVNrTXd1amRFemRuWHJyVDBSU3A1S3VQRm1TKy80dDhDWlV3RDFSL2VsRjdVQ1I2Wlo3MmxuUW83WDh3Y0tjaVhid2RzS0Y0Wng3QUVocFVRMHRIWUJsdTRHbmJGQktFWmp2NzJDanpZNkNrV3VlNUZtQ1hWbE1aeGl3Njk1U05pZE5XaVNlSjJKWFdNckJMd0JjV2c3T3dLTnhYaGh4RVhhTzhIRHBPQ1N2ckI2T0ovRDFmbktKUEFjNGMrTmg0MUJrWVE4YnZhUFJZbkNoUnhUNTFMT1dTelh3UlZkbGEzMWdrdGp3WXNiR2FKam1IRU5LblZ2MEdSSjdBblc1REJwNUJqelZUYzcwWDRtWlA2dW9pUFpqYno0bEcvb3FGbHlXdDlnWTJ6WHg2d1pTbmxkWHEyVUQ0ZEZPdWkyV1dZRXdxZlhkM1NKN1A2eGVGVjlYZytPQmREQUNnRWs1Qk9vYndFUUNOMlFIUmNOOGd1dUh4UkJtOFQrYWc0YnRZeUJ2bzRWMkdnYUxaRWdHdjlOU3JUVWR4OEEzWHJBelgrOXUxdE5nL0RjQ0hFU0tkSmpmQ25aSDZyQldGMGpQVkZyZ0VtQW5UYytQQnVTYUtnUDc5dCtZdzFXVldDVE14UXcxZWIxZWRHU0xwNTFncDdWZnVVRVc1emdqbHB5dzFkdlEwOXpySkZtRGtXekZBQjByVEpnTmNEc2pPL2g3Sm9VTVhrRTBZajNMNzhpMmFGZi9US25FUW9ibVVzVEdmRURnaEtSeExpTjZub3h4eHBDckMvV1M4ejFmRXQxTW84SXZCODVsa21OSE5CKy9XTXMvd1JVUnZFTnRDaFdYZmp3VmJGU01qWjRvUE9mNVdmYmR5S25LNWRmNHZSZWhGOHowN3lRK01TNnJVV0NLdmwvZFhHbmY4UFQ5WWtGWm1ybWQyS3NBanprdUQ0QWN4UlZkLzZ3M1Q2akMzWDFLWTNhQXlkSnhlbFFjb1lqcXEvS0VGV1ppZHN5VERWeWt1WTFMdndRajhHdllFVDh2Yks2UUpBWHRoaFc4N3pEMWFQOTB5QmVLdFlXemI4R1M3V0xYWDczb2VZNEUwTG1sSDJrWkswWG10ak5FbWV4dHlmUUg3SmxaaEd5eTNWazhQZkRaT3BDdEZkejBSRWJ3NkUwWC9vVXl1ZktvblJOQnRkM1VQQXB0REFHaExON1NSMG9LUWFvWlkzVGRPS2dIN2tybHphbnJ1Q05udnNWaEovWDFtbTl2eUpPYmhYajJSb0JKNmxhVld1NjBZNlA3QmV2RmZOYS9TdXNQeTVtRUduZVEvV0RJZ0tiV0JMM0dIVkJIMWI0RG1aNUlSV0Jnd0duQjYvS0xla1FNK2l1Y3d2bGttbjFNNDJ2MkxOcFk2UGppeUc5VnBUaDhQU3BoZ3Vsc2I1K2hRakxycElnS2JSV2d3L2xRR1pWZnd3bWpMREFrYjBmdk5hTnFEVktxTmdSeUlJOXVwckFuVjIxTHN2TjNUMVhyWTZGQVQxYlFHbmQwa3RWNkVkT2lpbGZUS1ZJc1B3aEw5Tkg3TlE0RFlLTnVaVWg0R2FkTEY4RUVyUHZQNldyb0dZQjhBU0RjL04xWjdBSGdZRVdNdTI2akNab3VBck9qQ3U0K2hNeWRRR1pvUUtoRjFQaGVQcU8wSU16Y3VRV1dPWHJCRDF4TjVQajdRS243a2hsWm1PeW91V3h6ck92TjJUbkdGZ3cxYmkzQS9uY3JNRG9sODNmNVVVK0lPdHliekc1M3hTK3FQNFlYYmpUcC9xc0ZsVSsxNXZPSHJ3dHc0Z3JaZnNoNXcwR1owbjlqaGMxVzk2VzRJNDR3ckdZbHdPbkVuK2Y4c2hPMHh3SDZBNSt3d0xnU2I0aWNWS0h0QUhnWEZFdzBoV2tmOEw4b0dDaFVwNXVaVVYxYjlvb3F2ZGQ1SkdTWjZNanRhYW1QdUpxVjVkemw0cnZ2RmdpbjhlZnllN3JaaFJpSTR0R3d3cHcxd0tRM0R2TnR2RDRiZHF6VHRycjRsTkZDL05PZTVaSFJrNy9XL3dpZzJscjRnbUxMdnJkd1RuYnpoWG1rK3Y4ekFubWh1R3VhTHBzeEFJN25YeEZUZjFOSDRkK3dtZWdEWElscTZaVys5aVM4TjlSS0FlQWdhckVYSjRuVUN2OWpHUVdPTWpOZWFOaUZ4Uk5LRE5PZ1BkRkxkcC9HZGVxOUhRSGpEaVd1b2t0dFAvSUxleHh2OVIrbU1raXZ0UXNJcVN0MzBPa3dqSDNiZHB0UXQ1bjJ6M01wZkxsc1FMYTFWQ0toUFpqbndERzBWWWJMQXBzaUNSTGRjTFRhS0VzcUlPbzZ0R3hVY0NyNmE2SlUvR29vckRtOWJ5VFZnVGU3OUtzdnFpUmQyQzU3d21OTmVVK0puOHdEeGhFeDcyUE1JaE82MjB1VUFLL2VDQTFJL2NNUnBvbTdyaStPWmxsb3Buc2FlUEp3NWJHbXNIV1NsNkpqVXc4Mm9QMDFFcUtTY1RyOHFXby9uV0V6TmtzcGhwQjZ1N05PNkFnRTAxVGtwRnlIRWZYZmNEVDdITWcrSmZ3SHo4dGNOWk9keEJ3aUpWT3g4V1RPbmdWTlBHWUp3U1Zrd0ZxVHZJYWtnbExQaXY5d3g2TlRqRkVkcFEzYjNqUVE4NFRJeU45a2JqUmJ4WEFJMkx1UnY1T3F2RHNmZW1UVU1TbFdDUkZxeUlDNHdJWDRRUTNwVnNZUEtjYjgwalhGNDcyRktYYTNlMmxTeWt0VkN3NFQyVFNYbExwdkplczkwUmkrUTBCMlZPNEQraTd0aWFad0JXR1dsTC9ERlF2UGNZVk02emVrQ2hJVjJjbG5KYWc2SlZZaEJ4WmZvbWFhUHR1bk1zckRaWjIybEhiMU9veFNIVlRhUTNweGdhS1JKUXRlck9DNGU5a3IrbzY5Q2tBWmE4SkFzRXRWUVNIN3JuenFMUkorb29OTjRzWlNuOVJPeEVTSHBpTzJWVEtMK2NVYnk4TnFFN0FwT2tPdHlxejVXMmMwanBvTGRlOTBWQzlmY3NXczBkbXovT2ViSU1rMXpUMmxyYlRhaU9tSzY4T2tiY21DSkJIQ3BvckhsN0x5cGJLZ09CSU5Va1Y5NFVNYm5sUEdENVFzeElvR2tBNVdFRlk0SDRiZ2NpaDFOd3F2cmRsZjBDdVNySzRTT0JhZ3N1UGhscXpEZ3lpc2Zodm1BOS9lak5ZN2cxbGlEYW9nY3ZNT0tST0RLVUp0cE9ZUHR0aXVzZjB3TGRIK2RCTHhZSkxzbGpUWmRjdmJTVGtVcTJNL2xLeTR2VnI4ckFMQ1dFWTJ0eDVTUnd0VkNpeEcwcFJTYzI5S0V0RlF0NmoxdktBWTIwQWF0M0w1RlprMW5sekhYNmFzT3dqRnl0WnkxNWhFQWpFVFBFYVpoSGNINU55YWw4QWlCZFBqODlTRWVCRWx3N28zTmJuZFFaRWhWdFJPOHVVeWV3cWtaK3lvUkFkVk1WYmdXM2NMM0JkdEdoQlpXS2xVem1Ud0ZLaDVtQWhZakZiZTRxVE1mNE1yNG5QalhBaGlOczNsQ1pCZU5ybnVocnkwdEV3OHJzOTZhTkY2Q2R1QlN2U1FzcDdYb2RQbU43Rko2RlVmdi9LdSt4dU1JWUJScVd1Z3BsRllhQmx2d29XaHBDZ2trWC9RWWxIbkxESDhpd0RIdFZxcEpSZzE4M0xxcWFhV00yeERCb05paWxFck5XcUVoNlBjQUR5REZrM1hjYzhZMU5YaFNXNGY4VHpyOUpmY0ZkRE1GcUNWOFgyT3V0TEpwMFlHbzV2d25ESlJ4Znp3dHQrT09SWXBaS28ydEc1OU9XTEtadzk1VkVHeHZhRU1uUm9pYlUrQU5MeityQ0RnNEMybjhOTHBHU2lYZm9GMHZ5aEU3RmRjbjVWQmorSEp3VjJZNTRQSjRiLzBVeUc2UldvaTdkR3FmU2FhQlBFbUR0a2RYcE5YZTV3UVhFdXV0NGRrSFh2cHI1bS9JK1FGU0tPaTRtS05oNkNGcG5TMWFMbEVteTh6dXpaUXVObk04aW9Fb0JWY3dPQnVONHZ0MU4yY0NYTmxCdUxKY29xTEVRZ0pDNEFLOHdPTTY4eWx2MWIzbllFMEp5UjB0RC9yMjNoVVpWSE0wTWdQSEo3N0hZRWpES1VLYTh4SFRiV05KUU9Xby9OeWg3QTE2WXhMQ1ZudVdKS2NDZ2ZjeTl3alpEbXlEWThDNjZYazQ0cW05QU1PWjQrQmViSVJDNjhKYytFa1hyN3V4YmRjczB0YmliVmlWODdTU3h6QnpwR1hRU1AxbXdUZWMrUkZCalMvZTkvcm5sSU5xelZTd0R4RVdDQWhWemcza2sxR0ZITkFiQXAxbXlsaGxvK1V2SlpDOWVHTVBnQmFaVXBDT1F6RFg1Vk5oK0NObnUzRTByTE9IOXZsYU1VZFZqTUdTREZvZ2tKZmZtcjIxZ1BFcHl2SGpVdVplWHZ1Skl5MXdmZmNLUGpBVFgvcDVNU3pWSFBHOWFXeERyY2x2YXZNc2UrSzllM0FhYTljc3FlcFYyRTJMUFIyU1JtcjN0aVJFQys5alliSnVqZm9wRlBzTTdaWkdxSmIvN3U3T1hJQ2NRYVRMc3pDTW82ejdFWHlxcDVnK2g1L1FuOG9BNXNtRVM0d1B3OFhMZS9VWitQeU1zSHAwL2FqaVRvZnpKejkrcWRDRENpci9MRnd2UEZlcWtnT1RqamN1OXo0bzZyV3QxN3I0OU5VNGRnM0owS1dvb0dvQzRQQjYrTVowaHJMOEphaDlTODJxZGxkMVZmMWVoSEpnYWNGT2xaZzN0M1hpSHZPcE5Sblk1dXhvQzU0UGt3SmlKdUR5SUpnSjRUallFSEZtaHZYYVNYL1puY25SVGNxMXFqZ0VJY3M4V1BrenE4allheUR3cHJCQjFaVlY5eVRrTTBZaDRFeUxRZ0tFOUFZY2pVSU5lYVhMcmVRdk9XZ0ZkNUJjWWI1dGRMTklJM2JHYnFKc1ExRTVQdU9kUG10N2plMnhmaW9aNDQ0bExramVsaGZrNnUrWFFXVXYvVUJLV0VJemhtY2l3TU43SkJDdkd2L2ozdnpqOS8xZUg1QlRSQjNib0N6OXgxZXdPTFV2RE52cmJUa0ZmK1IwMDJpeXRPRjJ4NnVCcy9IM1JzeVVhd29PMFJ2TjF3US9LVEJrVThaT3ZxL01qbEI2d1Z1RHErS3VnWlZDQkx5Lzh3RGtidXgxZHkrSUVUOVZaV1BmWlBiNThuVGNQOCtJOHA4MHhRWW53TWpEWit3SGRzREsraVdhUnhKd2VVL0p0NlRINmZtSGZ2OXNrKzZpbE5ONkVuY3hPeEFyeTU1bFlFK1lwRmpHblRxd1hvSCtYMk5uZzFlS2xOeDFtcjlIajd0bWZNcnJLMzE4SGQ3K0JPdFRENVZQbG5MRDRtNWw4QW1LNkYycHJuVUNVYmgzbG84MTAyVmdQN2VTcDlkNmYzdkhqakQvQWliaTlCVFlQWVcrMDlieVd1OVJBY3I2bk4wVzlRZkhpdk4vWmV1cUZ6ZXVuczR5ekVtQ2JZNHR4WDNWZTRQQVJibWtyMW10WEhpUXhURUxRdVB0ekk3SWl3enkyTVVRakI0S1FXODQrM3l4cDJ3Y0w0bEo0ZjRZYkFiWWpzcHJXTDlYWWpsZjgxOEFCYlh0dCtiUWlxU1dMZjNaM3RlSHZNZzN3YkZXbVRzRzZkUHExZ0p5Rlc1OVNOdjgvWk1pUmVaYW5JUWVGUys1MVUxekk4K0N4WE5uOGp1M1ZxRFJyY0dXN3g5NXM5K2FScElvWTBucTZmaXVnd2dwZEJ2aCt5cFZndWhYVGc5VEdNQTRVcWpCR0tFTFpMbXZYS0ZIWTZVUnhuWGduUWFycnhibTV5amtOMTh2R3lWRUxIdGpnMEVyV0ZmSndOVXFacXlxOXRIUHhKbWkwYlJEV2FMWElqUE1zU0hwbW1EUGRiY3VyTFhzNU1hV1VyVjhNdHdLWTZZb01jQnNaQTUzeFExb0cxSWU5TWx2Sm5RdS9aYjF3Rit0dWJOUDJ5Q2dhYUtHUGFoL0J3cGlEN1JOK3pHaVRZYk5UeFZTcnJCWXpubllTUEtvM3IvUkRrZzVIUkwxZUsrUzh3WmRGbzlHT1pNdTB0YnpSOHNiRTBQcVVvZFFKbi9wc0V4bnM5V29UTU5RaEpmNHMrc1k0UjNWUWUxa2ZHS2xlTXQwTU40aVFqcG9weVVoTUJzcEdUMlJFSm8zOVArRlltR0p5N21vWEZ1SjBYbllxcjZuT3pnVlE1ZURMZzY4QW5FVWFDa1o0Smh2YjdiZTB3L3N4b0VOYkVhZ1EzNGloeW82anQvcEdoTFAxNFJpdno0YXh5NDI1UjJwa09xcmlxMFZSSjgxSGtMWWN6c2dOR3VuUUZxVDVtaTdsTGdQRlQvNjZ4SHFhdDM4MG8rZUp3SnF4eDJMcWVVcmtUM05IYVIvL2Fhek9qVExpQUVTZjZuZ2J6Tm56UDJ4YjZWWVZaMjNjMXFzSC9FZ0c4TmNlYmJCWGFZR2ZrdFlQOXY3dDdlUkFIb0FBaFVrYTR6VVpEN2F6R3k4UWVYYUcrRXl6NUlFNC9XUnhXNko2Y3lDQmUyaUZWOCtzNllKcjRHL0R6RnJKT1V2WHNkVW4xUEpYU2dqQTJrNUN6N0twdXN5bHdvcDNVMnFLN0RTN3JNWEpjT3o5b2xjYXFLclh6ZHllS2NPeGJTSGVCbVN0a0c3ZnlmbWMyU1kwek05WS9xd3NoWkJtc2UxYjJJb21yWGhoaC9kdGhpTm9hNDdnc2QzOUxDWm10WUM1OG0yUVF0NG1TYkdCQnNXaDhJY09rS0ZVeWtqQXpJZlcxcnlvOStOMVZsbnN3V3V5S0ZsUXJoTWFrNnhCdWRaWnZVSTNiWFhJQWFXVXdxRkI0V2cwS3FVTmdkN2poc2ZyS3hqZ0lUV2dXbUNJdlZHWUh1WmNxTVNLNWd6ZXhDbFU4Yi9iTFlZVFV5TStQbEFmVlZESzl0bGZ4dnI3NHNBZUxjRmR6NERVa0hyaEJUazZ1Rm5hanFsblY0R1VUTVlZNWhHclVJVkEyZ0xRV0g5SlZBYzNBdjBFNUExZ2Z3ZmVtL0g0UEZnY1hucDRRRkorN1UrY2J6VXhGZDh6a3oyV3VxNVdUVS9hSEVXVXRPY2lIWTY3REZNYWZNdGk5aUR2MXFMSC9LSlREU0FVaGhDYkkzWndPQ0dESk45ZVlsMnB2NFJKV2FxNXpqQ0Q2aEJab0RZbnRrQUNkM3d3RlcvblYxa1MxR29oMjhZbzBSM0x3VlVGSjAxcDU3UnpBd2NIMlY2ZFdpVnBJWGh3WXRBd0dyMVdxcSt1SkVUdllUci9PNnZsbDNjZ3NTK3RtQTN6RFUraWk4T1NvWUp2Nkc2d0xiay9ZRDVic2FGSmxqcW5EM0V0MlozRkk0Tis5c3dsbWRkUkVEYThHWlJzNEczbDM0T3c3RVZlditnZGNuZjJITVlTYlJFUlM1R0tFYlJkQVZKcENrRnFick5nNEFZSkY0ZjVselhQcENIQ1VLOHFqS044ZGVFMUUrNE82RzdWVzJweGJrenpPVUlUUXlxeGN1ZDZNWjhld1ZtT1dwVHZ1MjU5VkRlaUZNd3hBNUJVaE5TczJkWHY5QUZyZUpMS29NV0tua3BVYjlncW9tVnlvQlBwczZUc3k3V0FFQlp2bzJ1Q1gzam1ZS0NhMk91NDg2cDNiNGovZStjdXlqRW9YRzkzelZ4R0w2QktydjQ4L3lva1RtS1J6VEhFZDdvbXVFMFRMTFVLMkRTTllaWCtwWkw3b1EzZG5iUnk2c0hPRVdZdHY3dHdmZXZ3VUNVS0xsUlMwY21XNElZMmFFMG0xdGR2azQzeE81cFVsSHRSdEZKNE9LUmI4dUVONnNsTURxTVZCK3pMUWpNU2FhbWlQazQrSG9WM05OUXNkYkEyZnhsL0VmRDUrYVBYTG9oQVdzNDhsek5hODhQbEM4aTF0UnA5TkVzQUE3YVgzei9LN0p6MTdIN2FwZ3cySU1oMXRyTVEvZW01aHBmS21WdEljVGYxUmhHeUJCS3ZLc3B4YjltQzJrbG1abmlFZ1lIR2JjYXJRSkVJWU9GdGQwZmtwUkx5YjlvNVptYXFSTWxrQ3hWaFRFa3l1a0w2cTliQytRRHd1RVQwQVBMQ2UxNlJjNGc0b0UyajF5RGwyOVFPUnlMZkdhKzJHZzNsUGVBMzF1Ykl4aDdKandua2d0cnp1L1UxbTIxNkdWcERWK0R1TFIyWWNHVk5yYkNiWjN5NE5yaldxUkg1M2FweGU2SExLRjY1MkI1R3NPOXQ0bW5FS3pFRDF6ZUp2Tmk4R25tRHZLK2tTK2hDaDU5S1lJV0x2aEdzTXg5bWJEanFjUG9WMzN6V2hGSzF1NUR3UzNhbU5oNnE3NDNQMkx0YWtkT3BiZnZ4a1hZdVpISm9LNFNodGo5cnNEcUxuV3dHTnA1N0dXQytIRFZoeXpCZVU4b2Zhd2JDS25DUnliRWZmWTA1T0tPdXRzOFNmdEgwWjJYeWI1VUNkL0hlNU1ZQ3lYWmJzL1poSmErZTJ3TCtGYkMwOHY5akdCeEl5NlNuTTd4YzN0YyswR1pRTFdDaGpzMW12NXgwdkpjUDkrMWhlZVhvOTZSNFp2U3NUNHFxZloycHhTb3gyeHZHbm9YZnhVOHAzL28rTzhzdlZiSjlsUFo1bGY5NytNbExpZEttQzhtNjBGdlh6VzcwK3ZkWFg5VmdZeUUyR0pxS0NOYzkrOG1EQ3J3bTJraHhWdjBPOUNuWVZHN0wvMDZScUtLdDREekhoWDhIUHJxNW11OHhUREt4OFhUT3VBRHZtQkxrb3JrWUdZbmlJZGRUS0lWT2xORzVQeHZuYTZqL0IzU05yc3dVQkpnVy9BcjJQN2FJQ01OblhRRWJYYnBpNmZ1cWtXdjc3NFFLekpSQlpEb3ZyalRwL2lyc2hCTXNpVVRmQ3YzRmtxa3BIM0NuMStyY01ENENFTkxvQkpIalE0OVpaS3V4U3h3Ry9BYjdmamFTdTkrVisrZEdYWVp0b0NoNCtRUTA3TW5tRWpZVEJnN2lVZjIzOVRZelhwK3pheldpd1RvQlFjTXhKL0QrYUg0RzVhZ0I4SjhDUkQzMmNDUTlKUHhxSTZwU1dqL1k2WW9XWTlqb2Q4REV3ZWwxbUIycUZyVXF3Qk5EWXZrQnJMdlBjRTNBZU1uemNzbEV1aFAzYkZUWmtwZmVFVzJoVHdKTTJxL0RTNDg4ZFVBKzFsNjdlRHhLMkNxWTBOZnU0cWRqNVB1eCtITGNZRGw0SzU4Tlh2dlZ1TmFDMGZRUjRRT3pqSitDbSt1UmZiMi84aEVMdDhqbXV2VitSa0M3aVp6dWdVc0VBTHZhTXZjNHQvRXZVbjZCYU5hUGxubldtRDBick5PcjY2ekNyTUlvZ0dPRXRud1M1cHFpUDZ4c1pKNGI1aWJDb3pybHRKL1VkQWJUcU1lRld5dWs4SkVqSERtVEo3VjJCUFB1ck4ySzltTkwwSVlibk5HQ3VWQVcvcnVyZjZZdzhSa3ZVUHBzYW1hNElobzB2bHRXeWNGU2pSMHMxS2E5UjN4RDMxWldhOWZtN2pVK1M4L3NuU1M3L1ZwUWNrK2RGV2t1RjlQR2xlL05VMnRzVTJXNXVBaGZJZldkeVdjZHI0S1JLT1hMK3VEa2RXVTAwV3RHMGg3eTFYWWpzbDkyMTZzWnBnU0xubGhmNmZMVklGVVRjek5ldmRxS1Fib3FqY3RxS2laNDhVYytvVDM1U1hYM2xYc0gvTXNxMVZhSkVlOTVwWDBJeHI4L0ZvQUF4cFdkV0dsUWlSTE93T2tmN3pOMlJZVW9pR004M3doSDdMck9jUEtYVkFEVUc5Z3V2ajE5ZW1ZTHRJK0h1SG9NYlV3VEc2SFo4b2NyQ1hOMHF4S3dWT3prZmpnWGdSZEhTQUhKV2pKQnA5RW54QjJObFNoZmVaVk9lVXRTdVEwSFAycm5aTStCRTFrM0FUcmVtbDRlODUzbGRkNG1BM3d1TTNER29WOVdocGlaTmtDMWhpa2g3R0JkQmQ3dWhSVXNoU3FPT0JmcHZqTllveVdCc0VtbHBSRnhzc1NZbTZhakMwdXJ0ZlU1Wmg3bU8yQnQ5R2xKVGg3SUJKNW5DRlJxYzdHTTFHMnhyMTJYaXZsbC9jRGdTNEFKRDMvK0RTUnlMSittY1E5QkcrNFNTMVJDenliS3NtK2N2Q2tCZENwK3FYTVE0ZVg5L2VtQldSTDMxL0ZwZXJaSzQvaDdic3l5bllxMEJHUnlIMWxsbktSc0lSa2szK1h4NkE5MkNHVUNET1psOGZaUTVSVDZLSjlOWGdsWmJoR3Y0UklrNjFqTkxkM0ZseEJnOHU1d0N5WjZPS3k0LzJNams2bDVFL3JhcFBsOGNiQjFkRGwxL2NHQ1ZRdXY1TVVOcllBMkpIbDBoSEVyekp1OEZLNFNab2pBMWtWVXZTK3JRaDhjWGo4bHdxSk9QY1c5SDJscms5OGhwTmJ1ZmEvUnE5VVhSOXlRS2k0UVp5QWEwWGQ3eUxjUVFEMWNBZ2JvTm5YbjNoNytrRmkvdituMzYrdnBIQUIrbVJRc2lJeS94cFBKMkpCR3RjWUxXNExGVXo1Z0pVdXR0akNDNlZBZE1MU3BWZFFLdDdYTFZYNWxnYmcvSWFIM0RlbDM0SmRvUk16akxxY3VvSGRUKzZEV3ZFamNhMVhjWWRicDJwdzdPMTlPNm9FaVdBRStvOTVjYVNDWG9ydm5SWHZDQmxibzBFenJhUTR2czNlOGhySGdOL0UweDExS1RFY3B1RDU1N3Q1QjNieHlma3Z5ZkJzekJ2dU5qenNsWldpUWVrTVRRVGY2T20yVnVMbW05TVJKWUV1bURsR1M2eXVjL29CNTZVbW55ZW92MGpFRXJvcDdnSXIrdW50VkE1Q2RCZzZmWjMyQXFWb2VNK2hObGtYV3p1aUZ3M0FzcjNFVXh3TVdQRjVQaDNnVGVwams5amJjdmhLNjl5eHVueWY1MU9rcnQ1OFR1dTBOL0pTODNJZDNBN3NvL3paUngwYW5pbzUwZmVSbzZ2aVdsamtmb3dmUERRSTVGSURIL3hWQ042QjRPUjlFY1VqellkaE1uVTk0aHgwME9ubXB2c2oxbUltdXJhdlFCQ2JpQTZCMEkvQ2lTbWtEa0NoRW8xam0xNEpJQTBxbzBwK1NOdzZROUtLRTZJTHMzRm1LZGZTeUpYeCtTand6aitwZFA3Wnd4alpCTFg4ZkpxSkJlU0VTTExGTTQ2Mkk0alh5Ykl2T205cGpaVkVmdVEzSm9VQ3RINnVnbFFMWmhVNERLU0gxSFNtY083US9VKzFKS0g4eERTeStaMW9EaVhyUnliNnVoNlQzOFNveThMckc3eDI2ZEFVTkkvRzVHKzdmYkNHTU5XdFZFU2tzOE41SlcrQlU4U01xdy9USkxNbXo3MjB2MHdZbVlySUpzMXJVeTlURm9namRoUlJIUmhHUWc2cE4zUnhaT0JWQUVrRG41ZzJCSjZWM1BSNWFMSTFrOVVSTElvbkhLR0RrSTZ3UEw4NFQ2OVBabE83ZWo2L1cvNEJ1WGhFcllGTjVXZktRTFAwZng5S0ZTRDZkNVJxWkFKR3VkQ0NSRmZnNy9kYWQyRjdBNFdBZ1QrOFg3TkVJa3lLRjVOWFBmZ3FHeWkwa21ENGJXQTZhdVNFU2M5STdWaEpCSTFmeWFEU0RZN29hNlR3Mkh4dW52U1pBdU5EeUlNZmkrOTAwMGFIWFQxUkhHQndZUEl1elM0OFNIWnVFbWFZc3lLZkpyMWE5TWpXZGRVUytlekFxVDZMZUdia05ibm9PMktvUXBTL1Jib2RpQ29NM3F6eTdDQWxvSUpqNEpZb0JLM01mbTlKRUsveFQ1azU1U3RiQWtyWEZmV0QzY09rWjN3UUZHelFwWHRQT0NtdjIxYWN4UzVMdGMydHZOZ1VwWUtiNmhOYzQ0S1NCWUtoNExxbWdsQm9YWDNBN3NuT0pzeHBlQlloZ3V1TnhxR2VoOUE3SytwWHVqOXRQdHgzVEE5RmgrZHpMeVMwbHQ5ZXVXbldYdGg4bWRVbWJ0VzdkK2FCV0ZUUTh0NjQ3NUpya2kwWkIzSlpWUFpuK1htcENoWkxQOWtHajVJRDk4aW9sK1h6aW81TGpRTUVjZGtLUXZFYWpidC9qK3JybXFycXYxdXdCc2FFTkJQOUlINnpyNjV1c2ZJc1MxbHdRTGVaaERtZWF4b0dRdmZWWVRIcU8yQnpoVjZRWVdDTUc5SlpTMWZmYzMwalFkMzR1YS9hazBLZVp4ZlFEN2hpZFNXWTRKWUdSdWZlY1FzNHdrYmNqZzhVWGZweHBEdnJZU1pTOFdOYlVFU2ZIejd4aDBNREhOemwvVVJMNHFYWXc4T1cxZWFGak5MRFhqcTI5UEh6OWg2SVc0bWU3eGs5Q0dVazROVGRHc0tJNWRVdnBKQ3JlZU1mSHF5Y2ZrVG9VNnBScUxTSTUzaDU0bFpIM1hLSHM1SmZqUi9nV2pDWEIvMGk2Nk1OY3RsUXpGS2pzZ1RtMVV4cTh2Mnl1eVhjcWFVZFBONGorL0FkY2x6c2c0d1dMS2pocXdvalhkY2psR05vbEl5elltbyt0bUJKdkFXZ3RZbzVucGk1ZTFuNDFham1LYlFNMk92RndvTTNaU0lJOXBmeXA0NGMya1JhL2s1dmI4Mmp0WmxvWWdrS0VTVjBoL2E0VnRUa1VrWC9uV3BxNWVyL2JHYWFKNWdtN1Bod1hobTBJUjNSOHJsUXpNSUhUSXVPVGJpdUdScmpOaG9lekJNc2RYZ3FsbzU2Y3FmQ0VmVldoMncySG5LdHU5aXhLcHRRYndmb0NrMVEvekpDV2p6WElLOFp6Q0U0TU1sNk1VUmJ4MkFhZTI3VVgrVXpuRTZSU0NtVjVKOTFJUG1VNUZ4WTBheU5ORXA5NlRuZkdoVjdUT3JUY0RGQmk5ZE0vVEVKNXhrb0NINUZIczVYNDZYVnRiMHNSNmpvUzRaZlJQMDc0dHYyNDhPL1VpOFBnOXhaY2xMb2xMbnJUWTBwVDVPYU1kMGhZcDFLYWFiNkp0MzQ1WjNEamNzZDRYTHJkQyszMDhPYko5Q05FZ2VqRHM2UUlrdzAremxMM21XaXlMazdyaThzM0pLcVBnMG5IYUdHZXgwNDhjQWpreUZnR2JHQndFakZYeldkTUdkSTFEalNpSnhtZ3ZOWXNURHhkUDg5WlM5Q1VzSzRJZ2hDZm1yVU1KQXVpT3lmYjg2aEp2U3IyN2FsM1FZeno0cVFQTCs4bWRHVVhRTGlmMXptbWRpUWtnNVB6M0doU0pEOEVGRmlSOGhueXlXbGVSQ05ZV08zS3VCZmdLekJxNm9oZUxtQkJ5RXlnNzUyVllPTTNyOUNHNElaeWVvVTRtb0FxWkxEWVZJbStoZ3N5bDlxVkRNWE96b0tlWG4ycXRTdmtYeGdkKzgxL2N5VGRBUTUrTmttWXlYV3ZJUk81WnBTVnIxbFRpU05RaVlOWFNqTitveWtGaE9ieFA4ZkI1QXlhcnF1aHZwWkttcmxvT1lJcFpxLzY3TldjYTg0aHQxOE5JNUtIZllkeWxGMlhvR0NhcFFLWWk5VERDQ1M3MUo1MFBLMzd2ZVlCNThZYnVHdVRRcXJua1FVWXYvOEFzMTR5QkZweit6V1pOYjdYV1l2UG1EcCtBQnRTN2pMcTdkaXFzSmVxdHlQdHY0Wi9DNW1lWjFBTDh2NjZaZkZPRXozRXdOaGZid21kSGR2RDlhRjdrY21ydGtuUllWSXhwV1ZDV0dTb0RKcVBFYmZoMzNVTmFzamwyV2hTQWR3Q0JrcGxBUDJVV25lVURSRDQ0MmowVmVIWE0rL1F2Qkc4K2c4OWxlMDkvdTRWRXZLWkRKSHFrQXJHRXJ3ckdqRkFLaXFpbExlU3NERGNHL1d4bFU1d0xSaHZTUXZLdmhBOGQxYm1nOU9iTnEwejJKVFhHdFlaZmlBOUwrRk1TTlY0d0dHc0pqUnVWbTNSM3BDeURYSTB0VFZZNytKbjVoSnYxakt5NWtOdElRU2hBK1RpMElreHBXNFRiV0tWVk5UNDY4eEJXZVhMekhSSW5DSTJPL1l4ODR3YkpTV1dXOFAwa0xYbVpSNlZNOVVLSkVpdUQ3R2taOWxwUFN2SWF6ZEFZalhWUWxtRUYvWjhrNVhWai9EdUpmbTVXZUdjVDc1S3F6clhQSXlvTEdzUjA5SGlqdmhtV3BteGRXN29yU1VYb1o5Y1lPM2pGeTM5YXcrTkp6Nm1NK3V6K0FGbmFNYUdEQ0tuV3RrUlNORFpXSFp2T214ZHBWWTM4ZWhNM0FBVGZaQkxiZThJNC9ReUtneG9KVi9JUzJQNWpkTkgzTTZGZkFLNDc2YWlDSFM5TTNBeHo3czFjS285bStXMTZRWkI3U0hYbTZVL012U3ZQeWptTFE1M0VaR0ExWUNsSEFLYlVTcTF4VDMyQytBUW1Zdk5qOFd2eU82MnRUbWhiMW5HbmxqZEN3QzR0Qy9GZ3A2SXRKZDh4bzBUVHZ5Ylg1ZTZXRXhNYmUrTlIwbHIxZGdMakRrODBISkV2SHRCMFVlTys4WTF1VEFlL09TVlBDU3Ryc203dWZ5MFU4NkRnYVJiNi9MQVRGeTVJdnNXUVFEdzA3ejJzY2Z3NjIvYjc3L0RYWmJQNzVjalBadEtNMEY2NkhHY2NJNThobUlaU0FTVDAxZ0xFQS8xTjNJUkhZRWk5RG83S1hUdXZRK0twenRydmVqMC9nVEJmV3ZDdHFQTkFDbWlMeFV0M3BKVVAxdjdBOVUwa3d4anhxRzJBa2UzUXVTeTNlS0FuNjdQZ09paE1ZMFRweFdEUVdEQWZ2UlpNZldhd1A5V0FrS2VLOEhuZStvZnVzOS9JcVduTHFxNTBiVCtnYmRyVnlZODVKREJYOVpqc1FkT05kWFg1M1p3NXpBK1pnS0VScjFwOEZUZy9Nd01OZmxWb2xucjZHMG94MFIvOGZ3WG9MdXp6a0owSExXNzRIWXRkdjF4NEIrdThUNHQ5S1VvRFFYTWkxcmpsdEkwSm1UbHM4U0JPY2E1KzNWSlBNYzhRdlhrZUR1ZU1qOWJKT3JVZVNrS1F0aXdHelRRMmpPUmFXTXBIaTRFTWJENVFKNUdKd252clpYY2lTOXhkRkQ4WFdZZlNSUk15U1VxT3VrMWZmdU1ta3RrSS85dFdrRDFtblVBY3Nud2dDc2RBL09IYm9VMDNCaVVTR1FjNE5COVdXMmFMTDJPdUxVWW1OS2hON2lNZ2ZCbUtVZ1crM0k3UlNCV3lTK0ZNQmk4bzhja3g0N2J6bVFjRXRlUGYvOUMrTzg1T2ZaM3RsYjZJcTBBaFhOV3Zlc3c0OGN2TUhUU0M2ZS9VaHowclIweTN4eXp3UXhzS3pGcCthS2RTMzJVcHd2aDFIaCtWUE5FdmtpT041a1BPQ0pkanhsUDlQTmtPRzJqMHBib2o3cDNremxQZzJBalB4bEtCalYyakhBU2lFcERKUGU2S0JyL01wUTRZZWFnbDB3RXMxcTN3Nlp2THpaUTk4YkFnTDU4Y2N3TDJ0N3NIYWpsWVZCVkRTa3JxWXBMWGRTZzJYZDVHWjduWHpjbDVkdllnTUIwWkFZV0p6M2cxK1pkcVIxa0lMcHB4a2YxKzgxWUt4NFpEVXBqMjZWOVl4OTNWK2Q1Z1Y1TFdLdnFjRXRtM1hGdzVTaXVMTVMrakxabmhzakZKV3pqVklySkZmUFpwVVo5OXhSQXVCOE8zQUh1Z3Y3UVM4OWx1U1JxWU1ScFdEdVJZT0NvVGJsd2tlZ1BTRlFxWjUxUHl0SjIxQmttb0pWdXIxQllEazErUDB2b201UmI3RzU5a3dpYmNJSHpXN0tpc0lTMkcvWWh4WjFETFlReFRUalZ2VExoRVJIWmY2V0Rla29nSUxmSzVmUWhvSzJ4YmI2Z1JEajZlTEF6MWMzTlBjUFR4bDhQVk1QekNVL3I3VUltaHNYdjFad2xhSGtiZ3MzRnpURlBGbyt1TlFOYXAwd1pOREtWWmlVSEVrQnI2RmpLMEhQMlM0Uk1ZUkZIL1JhWklMcGV6YTRpcnNTK1lDVkxZOEd6REdrbXR3cStIWUZYY1BsTDB3TGlsTlFzNlZmZm1KZVZtcHFMcm5SUUI4aFBqaGJBdklxL1JLcEpSTGJjdko5V2pJYkxySFF5azIzamJzb0FIR0ZmOG5SSHI1N21mUnNZdGVUSHRaU0JoV0pTbFYwdFdITksvWVpsME1uSUVmOXBBZVhMT1JUYnBjRXd4WllkMkR0K1BpSk9xUlJiNm1temJyVGxmUUNuRDl2eUNQTHZNRkdhVzdzVFJTblFPWFRacVA4TDBpWjJvWFQxQ1ZNTXZmVUdHWndnZHgrRnV3SERjUDcxUzlSdm1LN2pPSzFDeFFIT0kzaWFKQVdybEY3QnNGcE5QMkdBdnFaY0hpeHh3Y2xMU0tFeHVqa3FjQXF3UlBHcTlWWDl3Z1p1RkhGRzdQOUp4eU1mZ1BvWVhJMDIzWGkvTE9NdG9xaHhFQ0xHeXpsclhNQUltZHJYZjFCT3hGcUZ5STlqQWhxQ0FXWHAra00zMHVNbHhJQ0w3YmVkK2ROaHBjRWZ4YXJmVmcrQkZ3VXc5MkwxWkpDVWkyWnQveU5xN2pGYzBmRUhweDkzc3l6bjIzQlRndDJqcUEwa0kvRmUvTXJ4aEcrTUI3dGo1MjljUGx6MjUxQU1QanI5Smk0ekFXOWhVWkVXa3BDU040RUxadmVLdU9YL05jSWY2ZlJXaG44N2pPMmdvOWVLQmNYRG1Ca2taa2lwS2k3Q1ZsdWYwdGllZkgxbjhWNjBTeGFhUmZJdjllcElaenloNC9KODIvSzVFRXZ3azdiTFI2dndEYU40UWxqR0U3bFJvUXU0dzRpQUh4bVFYVUR6WU8rTlRVemtIT3BvOGxiSDFveG41RFZnVFJkaUdSRGhwWUdHY25CQUtYU25aZ0RzWDlXb0JSR2VHZlBRU0VaYmtCTzZqeWpFMU4wcDdJNTg3YkRlV2hSb0YvcnBIRDBLalBmK0cvQ0lIcmlCVFlnSU02dzZBMVJXTng4cER3VUVlbWtFcTd6OFFzT3QrOEppSVdlME5YdDRPaTMwaG52cHhZTENsNVpWclFSYkkySlQ5clNLeTVsRGNJajdpeUl2cEZBNHJ3OS9qZFd5VHNzUTJkRVdaLzEzMFlib1BwUWdJc1pYRWpBMXZIZ3FselpjYXNJZzhsMXRaSUZjNGVmMnBGRlVmOFVaY2tRMDFoMmQ1Q0QzZzJwUHpGSGprLzloU2JJSDJScmduYmdhdCtuQ2Nnd1RsRXdGck51MG40VkVkd3QzS1dla2FPcHRZL3VreU1kcEdSdUVHWVZ5RFBLaGFvTlh4a3A5Nzd3S3dnZGVUOFI2NXNZZG1YaEZDbkFzYlV3bDM2dDM2ak1YMWRZTVJPQU9XM2VFRUJnYjNEcE9Vendld3NaNDlIaWdVbGxka0Jya0ZoTUY5d3dXTzBHb3hveGhHc1lueDZmL05VSVpFa25ielo2UkVwLzFTQVVyOEEwN2ttT0tvdHlCZVllQXZLT2ljUU5tYitZOWJPZjFpb0ZTOTFjeGVuWXpsVGpWd1gxQURyZ2J2WnNZWVREVkY4MCtXU2JzZkd2RTdYZ3pSS0lUaUFzOFpoOE9WUnNtb0dQWHJTYmxka1lqSFhwN0RDWjd5UFl5NTFGaFowZjZpRk9ndyt6NytFYlhuYy9TQmx0TEo0NE5DUVlVT1pkeWxzODZUczZhWUNlTWNJZmZhcDNhenhoVnZMckl5YjgrTjdtb0lwU0dBZnovRjBybUowWFF6SlNhOFF5d1g4TFdqZnphMnBrei8yUVVNTFh2cVhLUStpa3Z4RHRCNEVzNGpWVjM0K2dmMys0N2tJemhYOHk2dGVhZUI1Nld6cERTVFAza2FBVEk5VDNmQlQ0ZXZHUzVOSnhaSVpBWmNRWjlaOWJLaTdOSmlqcHdYdE9ucXlCWEFCNzhpRTF4QWZOeHgvNnYzOWFCbU9aYVBKVDcxL3k4bUhjUmUybWhJcXV1alhNRlh4V1V6MDlXWk55a0V4WFlUeTdDd3RyRkw1K0tCN256MHRqeW5CQkJzbGtXZ1h4eGR6MXo3c3pQOGVGdWczaHZrWUNGV282RFArdmlYQlRDQTkzTEcyUjBHVHFRdll6S2FobE1FWDZlTFhJcERWR1FvMFlhdWZ1REkyalVld1pQN0tRdHVhNGlNbGpzYWxGZnhqYXpoNTVHM3BiK1hqa2JlWHdPZ1NWejVHWDNtbDdyd3puRWtsdXY4VlJHOVpzaDRWL0NZK25XZzRpZzY3YjA5cDRkMHFGTkpSYkptWmVuVXF6bnhYOUtMdkg0aW5ON2FzZS9Mem04TldQaWw5YUs5bDdLM1ZLVHVGQVpCcWsvWUFqL011NkEyZVdtM2I3MTU1QklNRW5iL1JUYzY3dGNQTUhKV3krWUIrc1VMMVdhUG1wdEIrRzJGTjYzVnNhOW9yOWp5ejZnVEpNZEtVNThUYXFjTEMvVWp4RjBUbEpQa3NENUl6Uy9lWXNHdWVYSnZtUFVwUGxVQWh2WXZvN2hFc0dVZm05ZnRFMDlGV2cvMk9Gblc3cFpDa08xdUVqNnh5c0xpblUzcCtjVTg0cmNjZHNrYmc4S2RLNFlYdkRBdk9YM01ZS3ZkZVRVeHlPY29KNW0wL3BrWGVwSjVPM2xqM3ZMYVRGRk5EVlltb1Jmc2tiZDgrVnVoVW5EVjZTNS9pZ3FjNzNrdUZEclpDYU8zdktTZFd2M2JTT1FydWZOOTNKY3pXYzNhTkEvS2JYTS8yRnJiUkVSYURKUnNRdTNRS242Z3NRa3JZeldCbC9SazVyUVpxSktIMmZzN0VDUEIraDhTMTRuYWQxRk1RWFNPU1djRnU0NWRNRUViY1pYTjBkU2xDZU5TWGhKcSszczJpMkMveVZlYkUxV1dIYlgzeVRmTzRVNnU0V0t3eiszUGZ0d1BNY0JTNzZXYXk0bkM1NGFySTdIMXhXbU5CTDB1cTJvYVVQOCs2TmIzWStKNEZLbFpUZG5HNlVnT0pua0RFZ0M3TkdmWFVUeGxNZHBVZzBvY29IL2JCYUFodHZ5NGtwNFRoK0JRZEJLT2Iwd0tPUFRBTCtoUWtNQlowUkZmRGtoVXQ5dzdEOFNQbDV0R015cDhpbTRzb0ZkODFvZTNhNW1TQmpIM1JUbUlNVUhWT2hzNjVTMHcrdFU2N1FSbGRxSTY5YXVCc0taa1NQdmlRWG8zdjh2emFDRzFSb2ZEdTBPMzdPMjA1N1gydnhqZm5YRWRFczJaYW43dDBWVDQ0NDhML0pWSi9tTzN0T3Q3MFhlOXVXa3Y5VVZSd0JOaXVBci9DNHExSjY0MFN6T2lObmJodFFjMTFhNlI3WHUwUWpQTzZTWVlvT0FNeExMbmMrcUtvZ25oWTN4cmhaZVVJSENuVS93bVhoSG5McmtwSlduSWEvcnBQQlNMQVE2ZEVuRDJhMlVUUk9taTYrOG5QUWxZd2dDQURXTllxbjMzN3VacDVzNVFmRm8xSnZwb0NxVEpVellsbGt2OFhJeUpXRm83c3J6ZjhFdmZYVWlQenh4bCtVVTJJNmVhZzUxQ1dIR01UVC9QWmlnK0RvQlF0bmVhZHFwRTNsVHpFK2ZsK1ZBNWtMYXFXWi9Sb25VUyt1eTlZdm1BMm8xS1o4dmZDLzloQXhyVjFhZ1JpeStWUzJ3bjhOMGh0aDNQUDE5VFZwcHdsbUd4SUhWWXU1SWJ3UkVyQlZPVGQ2QUhnT1R1YitCbzMwbktESGU1d21kc08wbmlpTGxkRGFnNy9iQXVJaTltZksxS21qbng0aEFTNjJyTjd0V2QrR2pmYURYVVY1V003RDZJSTIreDI5RHF3dHdPY1hLUDBKczdCTzUxdmlsbWxFSUl1VEJXbHhDblU1aElSejU2bFlFK0F6ek44Tmg1T0E2ZXRuS3psWmNTR0NHaUFnaDIxN0UyTCtHK2liOXZFVjlrbHVWZ3UxeDJqUkpoNlFrd2pOSFFwTDdzY1lSbnJ0V2FQc3BXUDQ1SUVOTTlqeTZuOHE5SkM0OWdyMXlkRjMrc3EwOHlkUURhRTdKV1ZiV1MxQUpkZ2JhRGYyUytYVDBLZ1djSjBkSkRrZGIxdk4xWXBJKzIzMEFRTHJDcEFtREsxQVJxeVVXMm9zZXdRMFpiaXlzbEZsQUR5dG5aS1FQRDNkeHFXYU9Ka0tFaFNyK0IvR1IwQXA2YWZPeS9qeE9GdmJoRy9ja2llTUVnQ3I4RW5teFB2cyt0QXFMRlhxZVBlS0NzaHkycFkrVTFYS0dYSHlLS3cwWXJJTHBNYnRXRkFnOFg2Q2JzcS9xNHlRaGlWNUNDVmdBU2NCWDVwTTFjUGdvWldNS3RhamNWRzhaT01LbTUyRDhsd013aFJ0d0NsQ1crMUFIOURQOVZvVlhndzlXaEdCb3FEdmtRQVo0cGFGUlhNbzNGd3ZnV0RScXIyVkc4SmNIN01GakRnS09oUXlSL2pVYmdrSDdJbGFLTDJGZ3Nxd1RCdVR2NFhFT0UvZXRJR0lyakYvOHR5bGprRDVpTXFJMURQWHA5WGtiM0w1SDRBQjEwSXhYSjNoY3RFWVFIMkVIMitlbm5uU00xUHo2LzN4NTJiNVZ5RFpIeFFQaktFYTlNY0ppNTJsVG5zdmQycnNBbnh4dCtrLzJscnZuRmFUZDI2RW1DTFFsQm1vNCtGQ3FtMGRHZkxTeFhxZHdESWZDcTBGUjF0YWNwVEI1a0ptK1FsUFBqMEQrMWkrTWc4ZWgyYURBU28wNDhLMG4zYXJMOHZWS3BSeTcvTnU4YXhXaE1PWnkyUVd2YWhtb2I1dG5YSWMzNSs2RlNUQlB6aUdXZS9Fd1huYnVxaXJXNk5RbWYvYitvZnBWRTZPa3pudm1LVXE2NW4wZzMrMGp1WXBIa2dyRWg0V1pUVDdFMEQzcWZQQjlla1hHQUJVRDh5Y09qTnNpYmgwZm1hOHBDYmhlU3Nuc2hkM3owYkZwR2JZdjc0MFhCdVV4eUx1Ylo0cUU1N1d4RGkvZ1cvVTJWUjRZclJRQTFWSFZEVWpKNEdoKzF5RGdSSFpiQ2FiZ3NhcVg5OHRqTUtaSDZJZjRDQlBkTzRZTnRNK2ExdzNQK0MxcjBYWEFvUFVEY3dwZHhCeG9JRXkrWTc5ZE1UMTc0NHBjK2hGQ0tCQ3J6anQ0U0JCb3pZNW41S0c2YXEzQzAwdzdjcmwvM3B4QlNnbWJuVmRxMXRhTGgwWHV5VW9kdU53T0lFWXpEeXBpN3FwZEY3US9CSHRiM0l6cWhUalEza3Z1SG00N2ZNUk9JSko3RW5WVGRHWW9QQWNvQnh1dlJVWFFvRmpsWHRwc0VMaWhYUEdhVTBwUi9UTWp2eFVsL1ZRcE9hbXN5WGZIdzJnQjI0b1pqc0pnZ0UvV1libUVEYjFZeGRPKzN1Vk5xdy96TlI1OVc5MVlua0pCWU5MYndFVTI0cTJlYUYxd2M1VjJQRGhFMk5od1dqM1d5ay9qMXM3YStxQ2U3TEhxNUZGSTBCS3JTdXFzUFdLbnMybE94VDFPcnNkS0ZENG5Va2ZGSUI1SlVqeFh3RkZNOER6UCtmS0h2a3VJMUpibzhpZTZET1N6UE1NQ3Y3Q3FqYlZadUNxV3FBMDJGc3VNRFVMOFdnaklnRWRLTENpME9FZXQ0TmpYb1UvK0c5U0MrNXNiYjZJMXF0L2lkSkhETTRtU0V3TE5KbXh2UHNPS2lFYXllT1J5Q0ZxcGFrcTVhcVQ5VXg0a0hvbWd3dlZZSXczODVGT2tubVI3ZFZmamdOV1F5dVQrVTF5eGpQeFdFUytFMXQ4NHhqanZiUklVKzlEdDdPMVllLzlXZFd5RnNnYit3U25xaUJWZkJ2SUhRb3NtNytFQ2gwQ0FhVXB4cEZMdHNKWVJtTzBRMU1oSmVSNUlkbWpXK0g4SllTQVMwYStPRG1aVW43S09vOFBIb09CRmhRS2NJMWMrV1k4dnV1eE9UL0JUeFFDQllycSs5cldGS3lsSDBjZjcrb0VvdW91Y0xEeEo2R2RmcGJPZnFRbWRxcjhlWG1SS0NtWFdmRGllOFRNK0dJa3c2NEVYVGxxdEVucjFGSDBYU2x0MjFDNHR3RGF6cDhBTkJrN084R1o5Z3N3STBRcmVLYWlwTDVnRzlGcEp3b3FqSE5DVHJ4Mm51L2JJVkgzTTRZZTAwVGdZRVFTbW4vbTd1bDRMWkZSOFBRS090TGMzZDJha0JpN3RrMkxPZTRBeTlVOHhVVG9PcFV5NDkwQUNyS05DSFQ4SDNSOEk2NnRJRHByNWtpelladCt2TllTRzdJWStTSDZEY0V5bXRuejBmWXJYTGNzdkE4WTNNK1RIMFdVTlViL2VIWERHaHpQZnhCM00ybi9LY0pLM3VUNjdERGpPNDl5TWJmUERPalFFVy84OTlqdEkyVE96K1ljWFdxemIyeTRtQWp1UEhFYnFxME9CTlRpMlJSelF0SzFnWm9oMUJ6Z3NqbWdXNEpEZGtvVTFnVW4yOU03VmVVLzNFQXBSUlFBYlBIcFFUYmRmQ2UwaWdNZnJKWHU1M3dTNDAxbVd0VitYUlFiYVVuS2ZzUEtycFo2cmZmcG15b0YyeURQaDY3eVhGYklrS3ZVUWlia0J1QnBhclRRZnZ4UFVtdnNLd3JPR0F1SFloU0RmM0pJOXFOWStDbHl1VmhWTHk2Q1BVSnlkUDhEOG5wdEU2b0psWUNTamlVWXlaVE9PMVN1SVc5R2hRMDFCSDRpN2pUaFhzWnd1VUY1YmQ2VmRrYkdEakcyTS9IYzVBTE5qeHdKVHc2YUlEdGthS3JRRTBJL2xvZUVWZ3FuRVZHSVYzMUlEK0tocDRxckkvZGlRa1lUWlJTWnltR0ErdmZSMGJwZU9BMDNJQmVYQlhORDl6U29oNkFISEc2c1VpK1NWR291WkZicDlrekJoa0M1MlNCVGpnVzRselNEeGV5NStkVkR0NWNIRUhhcGpEVFZIcWQ0aFZ0YjI2c0o3UngzK2U4MDU0Mzc4Y2hhNE9zVkdPZU5WZnlVU2JFSGJLbGhmTkgxcnEwM0JWOVYxc2p2UUVBOHR2SWQ5dm80Y1ppNUkvSmhtbld6ZWszWjVCc3VpL0ZLZDJRaTZYRWFjeU9SSHRvWHZqeklPbHc2ZTB0YVNlYzkrSG53TDRuU0F0SkF3TEN1MmQwczJMSEovMDNKS2VuckxCbzJsOEhaSW1Db05KYi9rYmM3THhpbkpLV0hWQThUNW8wNlIrQlhXMjQyQjlRU0Y0VnVvbkZUZnc4WjQvVmZEWnFocGpMcmtTdjRNbzNwRlpHQ3RMeWdRclJTaFVXeUw3M3h3ZWFnSFcyN3IySzE0dG85Y1gxSnh1elhJUXkwUG1DSWFST2ZxN1U3TmZZTzZTeEtHRndxcXBoVWl2QWV0VGVYR2ZlOXVFdzhnVlFVaWgvYk1MdVFJYVQ2SkFKdFdacGZtOTUvMk9wRFNGQkpXSzlFZG9sRytZSUxYSUxENGJURnlZRTRrMFQ5U3J1QXl6d0NwZ1FzK0ZWb1BWS2R4TjJ3SUcyVGZWUHBtQW40NFBIdENaSlQ2Q05VZHpwckc4akZOOEJWZFI3TzVGdENjYnIxMHZ0OTZtZkcwZWY5WHRRQ0c1Mks5MW1VQlFCQmJOaTZWT0xHQ1h1dnNUQVAxTm1pVW1zemJvNTJsU2R6U01KK2Y3YnpxR2tqSUtlaWp6Vm5Ed3QzYU1FSVJpUEpWdFBUSEhCRUtoWTRJa0VNUVcvZTV6SVRhRzJPVnBmZ1RNQk1kVEJmLzJRQUJBQm9BUUFBQlF3QkFBQThCQVVNQ0FBQUFBQUZsQWZoQUFBSUFDUUlCQVFvQ0FBTUFHVlJvYVhNZ2FYTWdiMllnUm1sdVoyVnlJQ2d4S1E9PTwvQkRCPgogICAgPC9CSVI-CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24-CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I-MTwvTWlub3I-CiAgICAgICAgPC9DQkVGRlZlcnNpb24-CiAgICAgICAgPEJJUkluZm8-CiAgICAgICAgICAgIDxJbnRlZ3JpdHk-ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8-CiAgICAgICAgPEJEQkluZm8-CiAgICAgICAgICAgIDxGb3JtYXQ-CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24-CiAgICAgICAgICAgICAgICA8VHlwZT45PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MVo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU-SXJpczwvVHlwZT4KICAgICAgICAgICAgPFN1YnR5cGU-UmlnaHQ8L1N1YnR5cGU-CiAgICAgICAgICAgIDxMZXZlbD5SYXc8L0xldmVsPgogICAgICAgICAgICA8UHVycG9zZT5FbnJvbGw8L1B1cnBvc2U-CiAgICAgICAgICAgIDxRdWFsaXR5PgogICAgICAgICAgICAgICAgPEFsZ29yaXRobT4KICAgICAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPkhNQUM8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5TSEEtMjU2PC9UeXBlPgogICAgICAgICAgICAgICAgPC9BbGdvcml0aG0-CiAgICAgICAgICAgICAgICA8U2NvcmU-MTAwPC9TY29yZT4KICAgICAgICAgICAgPC9RdWFsaXR5PgogICAgICAgIDwvQkRCSW5mbz4KCQk8QkRCPlNVbFNBREF5TUFBQUFNcnNBQUVBQVFBQXl0d0g1Z3dXRGlZWEFIMEJjMTh3QmdGaEFBQUFBQUFCQVFNS1FBR25BVDBJQUFELy8vLy9BQUFBQUFBQUFBQUFBQUFBQUFES293QUFBQXhxVUNBZ0RRcUhDZ0FBQUJSbWRIbHdhbkF5SUFBQUFBQnFjRElnQUFBQUxXcHdNbWdBQUFBV2FXaGtjZ0FBQVQwQUFBR25BQUVIQndBQUFBQUFEMk52YkhJQkFBQUFBQUFSQUFBQUFHcHdNbVAvVC85UkFDa0FBQUFBQWFjQUFBRTlBQUFBQUFBQUFBQUFBQUduQUFBQlBRQUFBQUFBQUFBQUFBRUhBUUgvWkFBakFBRkRjbVZoZEc5eU9pQktZWE5RWlhJZ1ZtVnljMmx2YmlBeExqa3dNQzR4LzFJQURBQUFBQUVBQlFRRUFBSC9YQUFUUUVCSVNGQklTRkJJU0ZCSVNGQklTRkQva0FBS0FBQUFBTW5YQUFIL2s5OTlIR0dBZWRISWFDdWZJMVdCMEFrdmZqZzVKaUJOY2FIdk4xb29PVHM5Qnh2NXZ0b01tbkNWRnVFdEtiRjhJNjlqeEs4RDFmTElLajZkSGlXb3pOUU1uK2RuMlpYZ2wvamF4SjBLRGdIdUJoRmg4Q3cyK0tCRzBnYkNxd3F5WUROREsyY08wRXVnNDZWWXZ3ak1qSythdElZV0R5ak5RWFlLYTMzQmxxUkM4NEg1a2ZBd1VYeVY5azNLdWJET0VsZkgyTnNmWTd3K3h1QTdPN0pFVWhvMzV2TmpKcm9rUzV6TTRHT2R4Yk1IanNXcVVrSWZKa3IzQmphRERTMGtmbWs2aVk5RjczUENKUkhBVkE2R0swUVR3M3ZlVStYandyL0ZkMXYraXVFMVdjcGVLVVlOZC9CUGd5ay9ScWlsNS9aQVRwQXBMbHVGWTZwNmNEV3hGZlQyaCtqbWhScy9KclBUTFoxa2trMTdEZXpwSUc1OVltdGY2aE4xU1VVV3V2cUdQWEVNUnFJQ3dWV3p2ZjVhR3RRM1o1b2hvZWxBV0w4cWIxWkhidUxIQXJIZ2xXcnFoV3BPbXZtWUYvSFJ1T2JuTEtramptVXlNVEZ5WFpZUitseHZhVXYzeTNvZHE3WThUTjZrcTBYVnIzU2JIb0lFSkFXWTlaSk9yRThyOTNwODNSUmsyZUFzbTlCeE1DMms1aWFkZTF3OGppaHZYTThjZ1hWM0RTNXE4cHE3Vm91dFlJTFlUeVY2bVBFMnlYaWhZYWUrTngzSmxmV1M3RUMyYXVNUnY5dThMd1lZWUM3QzJaaERsallMV3pMaXpjdjYrRTlMdUNLZnYvZkMwZ1F5YTErVEpJQU9XUHlIMzhmWnJMSDJhNFErelcrdGt5aGVkTVRKZkhic0VkZWlic0c5Y2RSTDZsaHlKcnY2MkpFa0dGMDFjL2Z6VWN3eEVzNFNFK1hKN09wNWdRelBYYXVQWnVoMUV1K24vT1lBMEZXMTY0T1JiSUVoNm5kY3Z3bXVBSy82czhKazBFUCtsdXNjMVBRQnpueUJwTWtLaFJhcDkzdXlCWm1VTjVXakZYK3F5SkJGelAzS2tWNC83dUhGdVR4Y2l5K29iS01MdGdtTzRSNXNyTHk4U0NVVlZ2Wmd6YkVnem5xOExSQjFVWXhYb0ppVUlQWmJoZExsMnlobHptQWE0eWlaUXQwVE5lajh3MjMrOTYya3JXOURtY3FLZnlRRnZsU0NxeUU1eFMwQnNpcy9ZNVkvZGF1NDIySzMvR3k1VVR1UHNlRExnOGFRNzloYlRXTmhJWHl4UHhtdlkyYUtjQ2NkSWNZQ2U0bWVBU3YzVnV5LzlHUE5acFlHcWlDQUJZUHl4Yk9UTFJnOEJtbmY5TmZyK1Z6aGJJbHp3ZXluZ3hHUHUzR091d1FOdVNWd2kybGRMM2lSKzE5NWNiSHV4OG9LRFpncVBpdGtlZ3hGL09YdmZsQStwRC9xUnBpNjN6QjBHaGlYVlFDZnkyZVQxNnhKOG90eUdxdUxtS0IzRksyeUJtdFJoc0wvZ0RDRmN0VlJYYlZVWEt4Um91SHpSK2Rjb3hWTCtRK21PTTAwRHBKYzloM3hyK2FEdkg3V0dxOC9GOWgvd0x4cFU5TDk3SzdnbW5RVUFOaFo2bjRUbm8xVkhwVTNOZUtiMGhWN3VXS3J1cFozRGVNa3E0cnh0OXNvN2RZdmEvZytBZ1hCdHpFMkdIZG94VW5VQWZwTXhoRjliR2dHQkJCM2IwVmhDU0U5eUJOM3NIdHhEU1dsdkV0dm03NWdHSjZ2VVUrb1lhNXFCTkYxd2loaEc4RnVVOERXeitqUm1oV2NtcWhGYU5pWFNCSmRGV2lYdFZnNGVRWHFHVi9zK3B6Misxcm1XMTVzMnM5Vk1yMzMxdUxSUlFRa0lUWXJvRzJyd3FMVkxVMzRwRklHV2JqQkh0TzhRVDV6WThabWZNakFRdUlyU3N6cGZsTzNqRjR0S3ZFT3g4b2ZpcE5EaDBkMCtsYzNPOGVGNFpubnZxR2JIMXJKK0dTYS9EZUpENVhYVTdTelpLZmJuc0JWZzY5RlpzYlRWZEhqckJONHJMRW5aS2JoMnoybW02OUZXWEpuWUVOY2lLQXJwakRNZTVuVWJOaklVSlF1QjJaY28xUXhSQXlBM1B5SGxHNmFqWGRVamV6blFLdGpDNTBoZkJnT3BEK3hYQkhnTnYzNUQzRThxSzFCcEpQdkVDTEtyQ1dMdkdJUkJ5VEkzYXF3d2hoVG5ZK3gzZ2owZGU5WkxGV0JFc1RaWHR3WmY2bHcyejNZaXluVHVKcXNaNlZjbjh6THZZWFBUT1o4dWRLajgyL3d1SEpubzg5cEhJenVvS1M0ZWFGcG1IYzFNN0ZFSnRXTlp1eXUzTG1rMk44L0wwNUFsT3VjTVhpNkgxcDdyaVNQR3NWN2VYaTRCMnZtRnBaRDZ5Zm9UTXdJNFR5Q1R1K1lHblRxOFRUOGNHU2liSk0vNVBUcnhQa0ZIS1Y1VTZldmlKYStTaVhCclRQdzNuSjJYUDVqRENERmdOSWI0eEdYU0pWZDdMYkIwcFhiSWRJeS8xTG44UXFDMi9LZE5wOENzSTJNRElBMExJdm5OZjFldjB5TTUvb0pPd0I3NFl5eFB0d0Z3eU54akYwbXpxYkxkZXJSUnRZTnd5Wnd6Nk94ZFBXTnFTOTlqWlBhN0tlWHVxTksrMmF2c1p6OStPTVJKZFQybDdNL254NWhCT013cnYwWnJqcXhQT2hGaUVjN2FzUDhrWktFSFJqWTgzUnBmR1hScjVmTklYL0gyK2xmSDJlbG5INGVtY0NGVE5xQm0yMktiSG9ZQWgzcEZOWVBRZkwvRVNiNVdqY1VEWmlGNWVIVlNOZnp2TEdQZzNIQ3JMWkxmOGVqRzI0ODhuUXJoakM1VklKTkxMR3ducndZQmtiM2RBaTBOOE1LV01MTXVRZVBrQTVCaFc1NFJXTGZPWlB4RlNLLzJaMlhTSG1odTBWTGc4RkpYRlZ0OXBuL01MZkk3aVRXTUdpaWN4c0RjdjhPMVRsalE1YUtuVTVpTVNNWVlwWVdoZnhxazA2VGhDWHVnMVE4WDhCTnBZeFdEUUUweUdqQkw1a2lYTUFINzBJeVpQWUloVlZ2MzhlYXBneXJpb013QXNxWG9mVzd0V2tyNFMvMGh6b2ptN0E3NmNIdzBLZGxPcENoL3pWOGxSZ1RpdEhlclVhdFVUVGlWMlVudnp5b2Q1MHVwbmI3R29uU0ZLOEFoKzFib2RoZ1hMSWdFLzBrd3pTaThkZFc3NXZZeUtiQ3p4TGVUU250OHB2UXFaeDRUZ2NvTm1TM05pRys2K2JmRkdMcnJDRTY1ZDhzV24ra1E4Wmp4RndjZktjN1BqeXBLNTBIM004YWV6ZjdYdVhzend0ZEFZNm5TQ1gzQkh5M0thME1VWHdUckh0cjlzTU5WOU9mTXhSVEU0WCtFWlRSTGhWbi93L1Qwc0t4aEE1RU91V0xxeE9manhMQnJTRlo5WmZENnZEVGEzT051Y3ByMTBGRnM2QXRPdW9SRWpPOHpFS1NjbWJCeE1IM213NXlGR2xhYmRBQStyaFF1RENYNmQ1d0p5dFozS1NrOEM4M21zZXJoL3hJU1FVMFdZRExWbC9jdXpXNTk2SE1QMUFSWHJSbWlNMlRhTGlmenh1anpRWFliNEVMeTF2THdaK3lzZ05oY1FRVjNzS0JtUGtjTXpwcDBEbGprNE9zemthVVV0Yk5vSzNlNFNNeW9iZ3BpaDlWdW5laGpLQldCWmNyVHVSdGRKbCtVT1ZkSHdma2J1a0xaLzRNMVViZWpUcjVReFIxTVRNaHlZZGdmT2xMZDJWL0FrOEhaK3o4YXZqNElFUWV1V1M4UkdmQkpjOFUwTFpETlBrSG5sc0dtNkJCY2k5eWNjejBacExHcCtiQm94eUdOMVB0OUdlUmYvWHk5a2VLQ0E5Vm5pcWFVK0xCZzJwMzlHSjdFSGpoVllENDdKMVJpU0hFblE2MXhvS0cwZlFQRzVrb3VVUllaZ1loZkxTdTV3czlPTUJEamFrL2ZPajZkUTBYdXR5WTRuQ2tXL3hYdFZjcnNSY20xenkyUFVSMUMxZVhJN1NnZ2tSQUZIV25SSVdPYjdxQ2dQbWpiZFBLc3QvWG5nTHcyc0RlK3ZzSVJjcGF0bGRlWGVFVGhwMmVocDRIODdIM1dDa1BoNGdZUnROWXM5N2lSWXBQMGtlaXF0dzVmOG1iS0M3V2x2SHJsaTlXZGlhaUNLRXA5RlJ5ajNCM0tzNmFSdzZLMUZIc3ZSVGx6ODIzN2F3YkhTSzc4cGFqY3FyUnY2dzN2ajdkamdLTkJ3aFNNb1pxcDBJL1BZdFNrQWhLVFFvS1g3SHVqK1hqWGh6TURUUjVNN3BMODNGYXRVbzQ0YW1vSC9qdGJaZlVCMWRlcDRMOFNZWGVuTUpEbit6L1hqQmhTTTd3MVI2czlIV2ppZzlhY2NaRVllUUZvMk41cVBadm9EcmdocTZjdWxra1ZjemRVdnZWdzZhWTU3WVpMRWlZcDNNaVdiWHNkUFFJaWFPQmYxTWcyaGQzOUpqcGt2VUsxRlVhSVkwUFZMaCtoVi9lYlBNa0hDYUVQUGkzcTN0ZURyYUczTldQaTJML0ZHbDZQOWpOek9oeU04SFg2MDEydGxkM0ZrakNYREVGNmllTFFnOXducDMybW9rVExVV1cwOGRuNXZuUGgyTDhvSExyclc1WVVDM1ZGZEdWWjFVODUxMG01cWRVK3ZYRUsvM25aZXhEd2c4b0VEL056Ny91Q2RHSUxqOHkrdjNXL3dBTWRNeVlEWU1OcklkZG8yR1dJK1Rpc010TDlqbHpTWGZQZkdOUi9YWURza1lHT284UjZJbmx1UE9kOWxrSnhPRFBzT2FkcDdDM1RnRnN0bDU3VCtYRGpvSm84eVdLQzBIUVByZG9PRm4wd1ZmY0czS05NK0g3UXlJWGw4WC9jMS82YndJVnRoZ3BpeXdTaWpLYVIyM1RVZSs1TEw1R21UWU5SVXBReWVkcCtrVmhGQkxNVUFxY0wzV1lTQ0dtYWVpOTl4cHlITWdhaGoydHR3dDdLTnA5OG5wL0ZQdUI5ZTBDaktRclNIdG9LNWxkV3ZnVUQyTEw0c0djQmNtQTVSUzJFcXpHUTc5L2RWL3UyOHZPM001L2M5Qk0wc1ExQ21tU1ZZamtpYmJiQUpoWUVNQnpzVlc4bTNnd0J3dnJwa3N1a3JPK09Vbzk4QUxDMXhwTWVJVllTTFphWDZWd01lV0o5ODJqNXhaV1ZiUS8xQVV1T2dRdkRVRWhJamZldllBRjBvZ2s2Q3FXTkx1V2Q5cGp4Ui94V25nQUcwaFFaSmpFVEJaNHBMV042RE1heTYvYlo3Y3YvcXlReU5CM1JSbkw5Q0hGY3BUd1F2ZmF0Ky9LaFRwanU2aFUvckM5M0RicjRGelBMQnZhVzVzQnZTMVduaGF5VVQ3VE9sSlhYektHZDZjdlhMWHRzSU9nTm9GRm92Y0V5TW0waDBwc1hiTGlzOFhObzdVRjJWeDZ0V25rY29aMVJacFk4YldwWVJHNnhDNWpndjhhdWVrSzBrWmRaWjEvMzROUGNvc1FSRkN5R1ZSakJkU3JScWZobFNqM05rYVJKYlVUTXRLTGpwS1BGMzRhaWtuN01VbVFHWFM3Q2JrNEZDcEliWVpyTmFKN3F1ZGdFTzY0SHA3S0RoMWNiS1czb2dUSmNWeUZTU2lnc2RvMVp0bGFBUWw4eUtHMVM4THJYaVI3aEZYbjBLSGdhYTN1UHZodGF1Y0ZEYU1Mc2xhTjNGcVNQb0JFSFcwQlB4WTh1dUcyQUw3VUVHbllMOXlqdG5TK0V5RC9jck40b3NSYnNJMkZWdXQ1bFFoN25WSEN6cHFyZmhON0UxMFJybWYrUkhDK216d1BlTWtOVUl3bjlSUThLRkxMTko2K3ZaNEtwSzlsdnQ5L01WNlVFZjk2SE9RRFBjNHI0eGpPVFVwRWtPWkRMSGhlUC85M25sZ2hmOFB3Ry9EUTBoWnBOZnJRaEhaUUZqYjVBNDdHZnVLVTlIOElqUndkRStwckRCMkc0b0FZZTRyL2NlU0NTamxGMHk2R0REVk04bjRJZWxSZENKRFNuK0IyNmxlRE13REVkSjVSMXM0UTJFcVdKaWV1VnpSODJTUUZObkhNMkUvTUtDSXNoL0VwNklZR3FMTm1STEJOOE1JRHpGYk9GTFZXMVZTbnV3TUZyTkZZaHRrdkZCdnQ5VzVjUmJqUHRmSTJjdXhLSnprbExwRnpwTFlITnZjSlA2WlpGMzgxb2lhYmxNOSttVjlzaXZiOWZXZDlmL3doMGVuTlI2Z015LzhiVkQrdHIzbDlPL0FXQmZDS0JDaHFLOGVoWnhzNG9LOFRPYVh6a1lHVTlNMGYzZW1zZUNSL09TZm11dHZsSU4rMkF2UGpNaFRncTdiSUU3THpMQTNMeGdkYVZVcEE2SVY0MkNQMUtlai9RMDJKRS85SnhKUkxodDRPaGJmU2lDaGk4bERSeFJrK1hCMENMeXpaclJzS0NNbnR6bG5Xa2FjOEt5cE51S2gyQUhTaUMvelRRWXV0UmdaUVN2VmpjcGp1OW9RNk5XTzBoUWIvVmZaZTRpd2NYUWRFbEJHSmtWTmNVK2tFWTJwejZrNE96Zm5jNy9UbDhHZHZZdEVJOXMvdk5XVXZ5UDlDem9rL3p3b1hvUDkrTWlScGNpS25HYUQxNFNKNlYzMCs0cy8wUEdRREw1Z0xUdHk5KzhRcnRuR0hjSGxzeU9FeVhndDJKVi90RDI3MnBXSVdPeEwyV2RFcWJVNzNpUTdnWG92VERHcTVRSklIT2Q0MmJKYVNrS05kUmZJV1NuYk5VZkYycDYvVmJUUEdENm9UNUhoa2ZHUTQ5bjJ4MmVwaVVqSmpPNENRZ0grdGtuQUQyK0o2WHRPSExtN0d2WTlqdGtQMmpPOUNYZGdNLzJYSC9mSWVMUzVwQTZiUlJpRXNWMWh1ak50WE0yTjFiZHVUaWpoNUpBVVdaZE5wMnZrcU41RVhLenE3VG5pM2MvWDZ1TWpqbXErVDJvdFNzQnR4Yk91Zkk5MDhwMEhzTXNDV1p2UVpxSnA4RnE1bHBRSDk2ZXdqbWZPbTFKaFBoeVU4VzIzNEQ4NElhZkxqNTFjRVZjOXc4MXl5QitDTUxvVHdBS1BGV3FHSWFKVkFVelpqSTh1UXRFOS9YQlZSK1cvYUVsc0xDV2w0VzRmTW9tdzdkZDFXVDJvWG1Ca1VsMkdkRk9vWXBNc280T3Q0VEhxcDBSS0VXR2RQSUFKaERad2tYUS82d3JDM1hPQUQwdjczeDN3YnZVSGxpM1J0L0Y2WFlNaG0wL0FSdkJmQkF6ekkzdnNLVVMxZmdRYi9OZENjblRrUi9tdEc4MDBYblpUSkl4eU1pTkVUU2lOQWJPMGxoaW4zVU5SZEdXMjFMVmRidWpPU01HL2E1OWFlQW1keExaV3BNRkJoM3h1a0l0Qnh6ckJzOWVnY0Rkblk4bzBvM05OVTBab0NMSStGci9PREZaT0FDb0QvZ2NPak91L1VPamZFaEhqeGdodnlwbnJOL2R2U2FnM0pBa1YvcGQ3ZHRYeWlUK0JjV3lvZC8xdk53SzQxbFF4aXlESWFLbVphYVR4WGdEUk85RTVUZjk2aEpZaG1zWi9WMjRVR0ltYldWMzd3WWhlM0t2UzVFRVpsT0xST3VmWmZGYzlXSVJ0WGNSdU5yOUNkMXpBeHlLRlRQK0VHSm8xdnlwV2RWL1FOcmc2S05QUFcweFEyWURRRnFqREFJY2VXcXE1cEM3STdEMC9mTitNVHE0cXN4WUduczNhWmI5NlR6WUUzL0FSM1hVaDhDNkdUbW0zSHY4cERKUXdRa1BUb3NSNTYrVzd5RmpDaDBOcVhudFl0NFk4QXhoMGFoRTZ3OUZhZ3J2NnVnT1lFQzBNa0U5aERwQ2VpMnBSaTM5MjZVOFFzSjVXR1FuT0V6NzVQOFlaamh4enVUbHAzcWNVcVRDNDJ1TGx6MTBZUEZJSHl5bys2RGhxUndReFMrZWptK1dST1JtN3dxWm1RWXZkZHY3a0xrVVVZYXZ4Rm5kNHk4Vm00ODRmZnZYRU4vZk0rMENtQmdhS2Y4VEhxVjNBUkQ5UUtkaVJHMG5GTzZiZVVNRXM3RFRpZndjZUJ3R1FCZXpuOCtRSHRhcWp2VU9qSXRndG0wTGRVbC80NndHSk1kUDNNL2FMbEhhd0Z2TGhxcDRoNkNibWZoMmRVUDRmTDFsbTdVSzFNaGY3aXJramtRblBXYW84R3l2WndNVGtZclRTTjBxcWxxR0VHMy92UGJEbHRCcXBlVTVZU2NTUzc1M2I3dnNON2svM2tBa3dlczBjS0NVS2NJZkFpYzFqZ0FaZm5OR01IVERjdmI0MGNseEc0eFEzL0phbkJ3MExHQmVDcFpFNTd1OCtadkQ0MGhhRFBBTU9PbFU1Z0pHb2xZUVVnRkJzM1R3ZGNFa2FXb29tRlZQa1hjYU9xUjAybm9OTk9yd2ZnUldRVk96alA1Tk5IclR4RVNzWnpQczZ2MXJNMjFUaCt0SFN3YlRpVUthWm5UaHdxOGhaaWZYUHFLMVlDUU5YMWk4RzJGKzFTVHkrU0o1cHJNbGJHYTZ0enN6U0J3Y1hJL3pKTEVLK2VTVStVbmp1bmtheFpHLzArY05TSWNJVWlXTlhCK2RmYUxPRC9oN242UjByYW4xWTlsRDFGc0labS95WXZqODhkR1RlR09HS1FVRFFuWC9ydWNVUWJuRzJIYmN5aGc0YzduQllSNFdIcUxDa0tWV25aZ3hmUGF2SGY4R1hISXlJaHRweHRDSURhWDNSbjZBbFN2NG1uSjdZL0NvUXFxVWVOMElveWJyQytVYm5jR1NHQm1iNFovYTM5ekJ1ZXAzUzV6amZNWWJaMGNEQ2VWek41QVd2OERZaU5XWXZ2dnpQSzdEVVR2VFJjWGVxVHZmRzh1SUNjUWYwZ0hzcEtER1VYOE5EekVuZElKWm1EYkhHRG82NWNqdlJwRWp4bTdBRnhjaFUzbWFJSGViNkhrVDNGSkMvU013a212TDJxbmhBSmsvelplbFBaTHNRYmZQQStDMDN4blQzWW1SUVFSalhzY2IrV2FzYnZqT0orZXR4UVF4TWFFdlhWQjk4NmRGU3AzTmkwc2x4RjBPUDIvUW0vdDlkQ1BrNkFUNTl5WS9iOUJuZlQ5WmVQazZIWDFYN2grMzZHVDl2cndSOG5RK2ZQdk1EMFRwRm9pdW13QXBVNzViMFpCb2ROenVITk1KNkhEWmt1YmpLd2htRWV0cGYvWGNzTm5adk00UENpaloxaTFOL0pnV3IzVmRuSVhNUk1CVVF5QVN1WGdyVHZINlZacWRMMzdyeUR0LzE3cXVFelY1Wlg4VFM2YzVSanl4cW90UWhLcm96dTVGbEN2QzZYZFhQV3VoR2dWRHlOVW5nMkNtb0tVM0FLN2lOWkhwaXVTaHdSQVRkMU1LQXFBV082TTloM0ppWFNNNXJ2b2tjbG03bmlwTE0wKytxdlVsa1VScGJYNEFnNUpQOU1tZUk2WWU3ak80MFdLaXorN0tDYS9MK2JjblhOMFZWd2hyMUZOL3hscFFiYmJWb3BEUDlvYTVaZmxTeVlnOWVheWZWRDVnQXlib0RLeGovTUVKTC9SaFZidWMwOFg3S0dsWUVod3ZadllhQlZ6T1VpQ3o4cndsQU56b0lGK1lpMG9YQ1RsSnlmNXpqV1BLZjd6ZEo4bm5aTjcxQU5DVEYxOVFyQ3FkdGI3RlFLMGNEaTRYZVozb1FKMU4rY3kzUHdGbllkNEFGRjFpb3lLd1l3MEk0SUZtYVJhQXQxeW1BNlFaemg3NTRjVUlQRnRDOFA2ZXhPa1pNUnowZjdMeVZYdW9OQmxrdHZlMUMwM29iQUl6R2VNM3FBMFZCS1ZMOGRoWjVmQjZNdEFGSDZPenUrK0J0WWFSSzdhQk8rNGdpTVJjVi81VXBURFZzeXFnSkZrdWNCYXZrUXF4QnBXRnR0VDFubytBQlI4NnVpVi9XMFk5R3J0NVVMbUFpMjJZU3VZNXo0bnNicUFZUVB2SElMV3lMeUY2RHkyZ0N5MXVMSENKaGlpSENjcC9WMTV1TjBpZXJ3eno3Z3hsQThOWlFkRnF3anVYdWo5cGlzdjlaalF0Zys3dHJZa3pVeWtkeCtkWHNydE9TWHF1RGNMN0VoMGVxa3ljRmNXT1YvU1FzcnFZZVN6SEY2bFEzMHFCMXZUbUc1Wmw1M0NVVkVUc2l6d2NYSGxoOW8rZUlzMFRJQWhsbzcvaC9TZCs1NHF5d2ZpZnlkSU1SdjB5Y09VSlFLeWJqMGc1WURRb3Z3a0FRRFdBeG9nSk5uTW5BZ2ZzT051THA3cVR4TTNMc0diT205RWhuRnh3WmVpWnBHaWdJbHFOUkxNNHRtQXdFaEp5V3RFaWhMNEFyWEFFOXBWTms1VmhkdUljZExLbktGOXFYdnRML1pibk9mbVJ6dGNFM0I2WlB4bWV4dVNZdmtMS0pmU3BJTzJKaUY0ayt2UWxFV2hsRzZ3dHJTbWZwNEhsR1lveXdWV01oakpLb2p4R3N4c2pObmo2WGpUWDVkY0g5SE9LTTdReDdxMkJ3amVFakU2QXlBYWUwSzRSQUdkZll4cC9JbVMycVA1YUZsbTFvZE9LSHRoU2ZtU1Jqb3dmOC8zY21KRlpZSDMvTVBRTE1ybk9obGJVOTNRaHJ6ekRYNmRkcWxSbWZJNlpQdE9RSkQyR0llM3hPNFhjcDJ3ZmdDNDh0emZrNmg1YkNtUk01c0FTREZ1UVNiSHBmVXNGV1VwY2NRUWVDYi9OWDB6T1h1ZURIZjRaVUFUS0IweWxEcXg4aURMOHJZNCtnWUk3M2VrTnlRUHJnRHBVNEZLYmpMM1o0WVQyV1dHclltbC9SN3BCTEZqcytWNU4vdG9ENk5JclZnMVpzcDNJdm00dklaRzZYOWtwNUc5SWI1d2daclJRbVZRTDcvYlV5WFFCVWNkMmhNU2ZZcXRGY2xtTzcwZmY4SWx4bGw4a3R6c1NEcTR5R0g0ZXZJdjQ3L0pBb0hpWlI1VU9nMjlxK1NzcjdGdkFZMU9ockxnSkc5VzhrRWFRekVheEtWdnNHaXd5TFpzLzhNU2JvUkxTQWNSa28rTVgxTXptamE5ZnowSU5icnRpVHo4RTh0aVRFK0VSa3R0dlRDYk9scjl4Wkw1MHRoYllrOGhza05Md05Majk4VEFMUElSRmQ1WFRmanViZDNvL2xoOHpxSlVGeEVHVzdsTVZwdHEySFFxcGorcGhLOENMSmk2bERmZVpPNmdiRXJmdXRsNW5nWURGZ0E1eTk0TFFoZ2hQVmFTVXpscVdHenFneVFQcVYyakc0bGlFNy9SZWx1R0FON0dUOWxsNXlzd1RDVDBkNzN4NDVId3JWbDRwQUhLb25hazZjNDZ2Qkd4WlppaW5wcndaYm53bStSeXl5TDJSZmhUN2VOR3FrYk03OGRvSDBSMzg4dVVEeUluRTZ6TkluWlUvZGNENTI5RTdxREEzRzhwcEJtek5MSGFhajdlVFRVeTFtdmlhYWxSSFpYbjcwdmFVcDhWU1lmZXQ0UitHR3JaSUNtaTVZYTlHbmkyajFjYkN2cGxzT3hlZDdoRTFZM2l2YWl0ZlZFcm4xL1o1a2VGUytEYTk4VkRPNzdsR2ZQZWhpWWZhemlsb2lDNmlNdmMvQ2VkTUszS04wYklUalBqdmlIUitqSnYxL1ZvNU1iVUhPM1JIZmRnWXhvUUpQMjdQZitQdGYwZDhlVldYdHhYbmY3N01Ubmw3Nm93cnUxOEFPYitaQWN2eGZ6NWFCQWQ0VHhqMjVoVVgxbFFXT2g4cklSdlRCaXpPeTFDVU1mUkk0eExpeG5NL2VQZUpPRUlVQUFyZ3ZmbnlSaFA1a2NNMWJ6NU5aZnkrdzdTRDZVV21LcG9xZ1dBUWdvV3pSZzF1VGlOWWRaeUVhdFhQZTBORTQ4c2xweDJLZW9iSGZmakNKOTBuTWZ1NVliVkZic3BVemlsY2RhNlZZcE5QQTJYcC9IL0t2SUQ2UkplaVNEQi9iU05xT0dVeWZvWDFHVU9DNnFWMTNya3JmSWx2RUIyTzJwbDczbW9vSkZHYjRjbnN2ckRwZ0xNMzJKYlNsSkxVQlFWa2dhbURDdXZneGgrZFFSM080d0c3MkdiWUxlM2VKWS8xSzlUWGU0L05UM2h1Q1ZhUG1ZOVJhV213NzZpUFhRbkJEOHlXSDhLSTh1SzMwd2Nxa2tEaVhaQnZZYzJIZWtHSEFaSUxQbWZ2eml1UjVjZzZWNmw0ZGl5MkJBMXZVdFp5R1B5eTB6QWVqMjdoWFVNeG5jS3hRYXZyK0ZBSVVzSDNOalY1WUZGc3BZTFhXSDdhL2YxclhyYkEvRWUyc3dnVnBsaGFkeVFoQ09PMEJKN3E4T0hoc01NWXJhVjNpRFdmNWthSWZteFZ3UUpQOXVCKzJFQXg2TUlEbFZUdGhiZk5KRlJBWmgwVVdwOUk1M0U2Q3dwcXoyay8zK2tHUHh5YVhKV2hjbU5IamNMU2t2SVFGbmlhVkUvWlZOcFdGS1JBSXQrZlBGMWU3YVJyQzdlaGUwT2lkQ2ZjWEt3U3NPTGhsOUl1VnNTQlBJVFRQQzdkZDNIaFpLai95ZEhmby9USjJoSlp4VGt2blJSMTJEbmtVUURMRE94ZUtsajVNMVVWQWpPbGF3SUVqMGRmUlhEZXR1dlBvSlVBY0JCRXhPMTh3VUdJaUg2Y091V1FCZDVNSkFDbzN3cG9qZzdsL0JrTGNWUGtJVGoyZjJHZU05c1I5QkdtQUI4SnJIT0xIVXRRZkVmRnBHaVNkQ3VKb0lETTVlSE94cFhVYUI3MFF6bDU3VHJab2JYTnZ1OGsrOEdXOFE0U1hTNklGa0t4UnpSZkZzS05mbUdWZVRYSWdEZ25DL1lSYVNIQW5wZ0hURWdjb3MxL1Jxck5BUG4veXhDYU9mOXFYakluOGNlZHU0Umd5Tmx1Nkd2enNoMllaZUkwWmk2bDZIVXNJN0JwYW4yZ0t2SmFNYnRIS0pwamtzYk0za2xyUzJ2ZHFhdUgvaHB6dGhQTnFpaU91SXdmUUVqTDZheW5EMDRLOWdDWnlqK2RrMk4wN3FOVGFneml1UkhkWHVFS3dyOHRoRUhOUlNmTTZZM2Y4R09PeXNoMzZhUjQvdVdoTzFSTUt4RCtKcDVIdFREVnZzRHNDZGRCSlZZWE5RekpGVGVzdG80S0xQRGRQUVRZUW1UaFcrN3Z6b29UNStPWlJVRmhtM2U1TjJRN01taHh4WUkzNTdiUUFmRzErUFFhbGVXbitSbmE5MUxSWEkrMExiRlUxTzEwODRhdEJJS0t5STZja0ZUVlRLZisvVGx5TXhxL290ZVMrZGtGVHkvMGhHZVJHc0xYYUpSTGpNb29XOC80MXZmT0xFQ1ErUGNhenlpWnhWTzRFQVprUklaUUthU2syUnJLaG5NS0ZNK1UySks4R0tOWVhtczVidVFidmdCbnRTcytYZlhNMWZMeENhVG5YQnYyYVBvaTlwQ21KTGswZzlDUE9YQ3JmYXB3NFQxUEtzZTZBelZrSXI0aEI5THdkU1pWbFdMdEQ4ZHJuM1ZsSHNJeTB3dk9WOHhVamZrOTlxK1JqVWtNa1RiaVZTNVRuVTZNVlhPUEVCeVZCM29WbW9GdHBUMDJWbVdOQlNGbit3aGxnMHFkSnU5QTF3cWZ3VHovRG5acmZEN0xNdEo0M0RzQlJHOXppN0ZoTVJtVjNJdEluSm9NYzcxc1c1ZGx3S3BTZlJ0VlBhWThsdjJPV0xNdS9yTmVGN3lybVM4KzZZZnUvWXZjcHplVUJnb2xaL0hSTi9UdnVXdWJuQys4cGdITEpiR0pBcURwOHVWOWNlMXVwRHR4UVVoUmdCRW4vcmMvNXI1ZEZEaUdBMzdwSEd2T0ZXbk9NazRPMG4yaXlIVnZGRTBjdzJGQXdZUEpGQ2ZnQXRzb1hpdUcyZ3lkNDcxRS84YWVMazJlN1NxcVVRNGc0ZUxHQ2ZmN285RWRwWk52cUJrQmV6N2R0bWo4aC9MNzYvdS9ZQktYNUhaZ05GOWM1cGxYNUJBUkhSUk9GVTQwaTA5RXZpMVhUaXNsWEpwb1h1TnNpK0pxWWVFZTZhNjUxNFNxZFBoTjRFQ0tLY21yRTl0UytTVnlFampNYTVWbmRPYWp2d0o2RSt1b0FqZ2FCejVocWFHbFJ2SnlsODhWMjhIdy9lYVJPWk1GejB3UWt0RFZra2NZdXd6cHpWdDlESGZVeDZmZXBzUkJvNTYrajhET3g1a1lrbHhvY05hWFlSRjVucUVpcUMwYXA5U0RKSXdlNElneWo3TGJFandhMy9lQldZSDNVN1VkcXFMMnM5dFN3eFRoSXVJTzhjTElQZEFuM3BBNEt6TFdDZTcxbEhDVjRGSXVFR2I3aExXcmpQWGdONCtKRmJ2Rk1wUTFmc2ZuWlVnYjcxSEhnaVVvUW8yOXR5WTcxeFFsZ1Brc2dNeFZsV1RjbjREUzZOQVQzK3RlV2laVEVZRllIU1l1em1lVFZLaHBSbFJnUUpKS3NyaGhlSEZUTXRaemZCbVE0dVNYVmhMbG5VUlJWSW1XeHdzWVlpZW1YSE1DbkV5UE8xcEtCbmRZV2c1UU9qMjBuc1o4SHRuVEx4Y1N0SkZPQnM4M0prb2dmUm13SWlZZElmTkFQNWp3RVZ1ZUorVkpiaTlXam1CQWgrLzJNNkZNT0J5aW83N2VYTFdzNFZReWRjZXYyR1dYWlduWVJsWEhLaHZlMjM0QlJDQ1JZL0MzYmdWWFNiL2VaSUxiQk1NTTFBeHduQjl4bzYxZERjRExNRCs4NnZrbXI0T1pnVXIvOThlQUFOdkU3Vy9oTHBrblRoSWprRDNDb3BVdWV6V0tHcWduaXpSQ21SbEZsZXE5NTlza0ROWG04Y2t0Sk1DTlBtemJCWGczVUplNm11QXFHRTZjWXpjWFREVlYydnAxRzZsQ0lnK012WllrdmFlR0pIV3RYWFI3V2dFMUFzbWZFRCtNUXJTQzZzZTVPc2hGRmlBU0l3cXhGdE43VHNkSmFWU2ptcXZXUUdSSWZjd1A1cFJqQnhBSWZ4aGZTbnorSGdhbWF1WDVrM3VrSHZSdTVORU5Fcjh0czVWSjhuRElCTWFxdDBlWXFMemU5MThOZkc2SkYyZzRDZzdNZnhleDdSL2h1bEEwWjN0V1UrbUM1ZzZNMzdsWEhxTmNKVys2TzloalBLck1FTU1NeWRyM1I0RnZueGNGUlJyNXpGZmNrK2hKaFY1SXVScFJOVEdORHMrL0FmK2REaXBVR25aejY0MGZmQ2xGYVBwZVFaMmh1UmJoRDMxZTJhQkZ1NDRBRzYwZnAwMXV2Wk5FakhtZHg5dmViWjhBb040ZDdVKzVGQzVVWDhXWm9zVmo1b3ZuaythcUpmei9RTjFoc2NVUjFuLzJHOHhZa0VaeUN0dnBIbkFlb3NYVmhDUXUyWFpHVDBKa2Z5Q0pyMXh5OCtVTGFVRVRCQVFIU0M2d21QRHEyV1RLaHhrYUVCUEdxWTN0WEI2cFVtWlI4RkFOSy9RYnNsSG5vTjFjM1NCSXI4aTZyVm83dldxZUZRNzM3NjQ4WkpadTNOSndORWFoSTdtRjBJL0JBcFBranh2czFMQ2NFd3RkWEFFbjdjdk54bExROW5rS3lpRjE1WU1vbDVCbTg3eFJaY2ZlaSsydGJrVEtJZ2xNdUlMb0RwUVpxNWVqekFBd0ttQXhSV0dsSG83WWhwT3FORDBHOFR5OEVqczRkTEdscmxBUUQ0NWZjUnJoUWs5N0ZqU2tHQ0dqVy9yZnpJWTd0QURnNjRXSlBzSm9GRFQvSVc3eUlHTzN5Y1VNSzVTL3hoa0pJbk9UYXQxUnM5NVVCaHRxQU1rdlV5S3Z0RE9oUmY4NUI3TkJla3lYN2lEWDFMdk9KV0xiSGtlcXFvNG5zQ0M2WjhITE9TdUppOHpCaXVwTXZLWkMwZWpXeEwvV2kzeUplQkMyVFZkMmRJQTlUOW90Z2d3TWNVNjROTHJxUnp1WFRGdXR3UlB3azhmM0xJUmo2T3I1djYralgzTlRhSC9mckxGU0NIUGlBMGhFc3g4dGYxNTJYejFwUW5ER1hWUnRvZ3dER09aYy8waUEzOWJBNnA4aXFNeEloaTcwaUhuTG5zdURPMStETno4WC9pb3ZxRTc2c2xQMS9VWHd4My9rVDlOOWtibEhhcm5QcmhJazZSbEdtdTYxd01kSlNBenQ3WWRGaDU4YkZZZkg4eGF5V0xZUlFpQk5SUFlJMFQyOEUrN3dlLzZPR28xRExhQ2J4cHRWNlhIcWJaK3ZmaDRxL0hES1FLa2t0U3B1bGxrbmdDclpJWkg3akFnOENUUUpYMGtIanhXR0RnRDRCM1lrZjhxWGREbWdaWmYvUldhUS9INDlFcEk1OURxMkJyZ01lUjdpSDNKdExVb1FGRmdldnhDRkgxeUcwTCs0SWVPRENpUk1GamhlQnZtZHZwSXNZNnZ5ZWdUWVhNVEpxTWU0QWIxNEcvYTAzQUIvTUlJWWl0UWM5ajVWTGxLUlc0SkMxWWpQc29idVNqVUQ2ZVBZY3NVK2pZZXdkQTVkZmxjd2VpdmtHOFUyM2hhN1paaGNOSmE3K2dHODFSTjRYeDNlQ3NQcmpHdEJXOHMwNWZSSStYbFplWVREellGUXJkT1cwd1hISzNTNXpQTjRjVUhjZmx2N0h5ZGlaTW8rTTlUK05IMC9ZVHJQUUhiRVV4cFBlM2JQU2h1TGZGMWdURlMwcGk0QXg0QThHWVFFeDRiSUdkTzNCcDBFWmRYNFpUajVxOGx5YUk4eXo5NWsrbW55LzhNYUlpV29PbFdiRHBMT3lmZEhnTG9HUWI1dTFmS1VZME5CNC9YK2N5TnNBeTY5OENiMjJDL0ZvYUZyOTg4bll3b2xTcXkvT3VHSzZrcThnbnVRWEZ2RDBSRWZYWWZSQ0QrN1N0UTJDR1QxQzBHdjFMVml4eUd1aElKZmNvTTNKNUM4SVkyL1ZkNGRJMGtqTlgxS25Lbi9BR0liVVlPTHVlak95TzdkanhWU0YwRTdKQjkzVURXSXdrTUZ6amM5N0JteUpwczlaRmJ6MmFROC9oMG8wYUJ2NTF6TEh1WmVCZUdYQXdIcEh6OW9reDNXRm1VN1JoelJadVNJUWxYR1hjajVJcER2MVRDazluc29USkl6QnlSNnhidXJURW9DZEpudG1idkEzL1FxVGhicWhaL3hXL3JZNnhFWkNFNnZRL0pGeVN3SmlFZUU0VTdyUFFrNFo4U2ZtdzdGOE5mL2c2SlZ2WlRmTW4vY21SZTBwNnRVL3c0Mk5ZMURhaDdjN2RWQTZpSHRkWk9BbXF4T2tBYUJabVNSVi91bU5HTVlld3V0NXBta212QkNzMjhHRzMrL2FwQ3NUaDVXUVdOelozUzM4SG05bnhFd0M2anFKUkVsUy8vQTNEUHF1enhHSmRMcmFidHF2b1F2cFJYMlIwNlZKSHplMlZSVzJnNzJhRDYwcU9GcXVTZ1F1cG1sL3FiUU1kSkUvSEx3RXlpZjlZSHpYako4c0grT3VkeDFYajlsMGNLV2ZFNE43SFlPSFQ5V0dXbHI1aEp0alVXUHN4L3dRcnFyc2w3LzRKQUpMaWdsb3llUFhleUlXTVNCUnZGVkpnU0NnOHNZd2krbzNoR0hZTFpKMDZ5OXJkRFB2MVNjYWZhVHlQUGFnTnJybmJ4aURSazR2TjlTRmorNjNBMkx1TmJ2R1VyTUNRQk40QzVUSGlLTGVYaDNhUzhhbHFTTlFKRzJQSTB2U25FcDIvcEFvTU1CVkpaRTRBYldpZ3BjcnpQVEpUVHhpREVlTGE3QVozWXQydEI4aHMvMlAyTDJDZkdEaWJKUnV6WEZUbFpEUmxQT3FqTTB6OWtXeWZxT1VTeFhlYUNZUW9zMlV0TEFTc05hWDRKMW1hcFBKR1RlNlZzcFRBbVVpTytOTFRBcTdzWmJmYjNMWTZBZGtkek55UWo2QzdKR0JXV1k0TmhyOXJTVFlHZURkWU1vQWpqQVdmVXM2Z0ZmTHVnUnJtYnhua2RESVM4V0svSzZWandWVGZjaERpdHRLdlBkdXVWN2VUZS9JZllORlYwQXV5NW5vSytjeFQyV2VRaEpVV0ZOWS9mUXZyZjluUWRSQjVuZUsvb3ZNbTR4TmI5cXNpN3FvMDN0a0J3cmQ5WGN3VkZmYmo1S08rUC8xU29vL3JwdjdLYkJLcTFOZmQ4aHNqYkZrY1hPZ3FRTkwvSElFdno5NzNQWTZZaGxHd1hoa3M4TWdNRXZNWGpySWVxN1FYaFkrbXlGNTE5K0dZVlpTZVUxL09yckpYaXdlbnRnenVKcEF3Y04zQnZPbGl4TUxObEJaNEYwUmU0OWt1SGUwSmFEVVFpdm9KWEJXVTc2RHVmNU9nREZDakNwdTd2dm9XdHZ6YUpORWhyckcrajFGYnRKSlJ0WGJnOVNEbHVadXNEM3pPWFNEU3J3MnEzdTNMc3JCRGwrSkdSb0RzU05oZEFmeVpuZXZYYTFuYzg4SVNMeHRGOE54SzVyT1gwTnJGTnNHVVBVVldodzNQQjRmdk5hN0x4OHh1eWVuVCtFbGFyMEZ3VFJaNEJHc1M2NFV5SzZ3aE9rTTdja2lxS3o1eG9VNUMvdjkwZzdnRWIvbkhrVEdWU2JZSjNMYjVWdUY5cklGY21NRHN0dVF5TGh0TFNaaGxIY3NlUTZlaENpM3pXMHIwVjUvMnZkVG81NHBDMmNDYVVINk5GZUFWc0dTZW52RkxaOE5TemRUdkE2TTNwalVWTWU4dlVVbTBqMFpoV3ZHak82RjhkSktNRVk0QlVXM3pqV2Y4ekloNWdRUXJiUVJNdDg1YmN6cXZ4QUh3L3B0dFRUYVlYRG9VQzRkL0dMZWdkY0ZaSXE5VzhqK1lsSmN6UlZQOEFZVTNBd0pHOEFYV0Z2MUE2bHNyeDFhc1pYZk5BV01EUmdES25Fd0tWMzIrdjFKVGVmbS95b096YlJKWkVWbDlrZ000T2M1UGM1bE54VmdkQ3VXUjFRaG12QjBaV0xmMEZFODUvT1NxVG5rY2laeW1EcFlYVHYzNElEMExmSXdPaHBUL1lISjZmWjdQMExaVTlqbGdKdlVJNXRaYzFmbU9TMVZ1amhNeU84R2F3SnYrQU5pME1oK1g0ZUVDU1hnNzRSZDFHWTM4dEV1SlZNSzhhbWUrc0NPVDgwTisveDB4cncwdmwxdk1oZElPNGRac2FRc1ZtVWxjQ3I5VVVIZTcySllDVW9rWWZmdXdZUndSVkJxVnpCbWJhOTROTU53TER3OVRiM1loczN3QXRGLzQ5U3FjMXdzQ3ptNDIxd0dLT0pTSEZ0MnRSV3dXeDk4dDc3V3FWY0NHTG43c3VoQzNZeWtxSURITEh0NEoxZ1pOYm1BeTRKYk01QS9TbWoreEZ5MGNmZVlZVWNxT3pFbXRIUDUrdW90cmVNdTJwd1pRWU11QmEvcDF2bjAwYnhlanVhYTYxeE1KNW1tQy9aQ1Fyc3p5QjcxcDVUMWNTUzRHUTdmMXVqcmUveUhDdXB5MnYxNDZuRFptSldCSTEycHhZNmw0cDhMUVZ6Q1pmS2lHWkhsQ2pxN2FaRUczZ2xxcEVFZWh5Wmh5azhuVDlXTzdSc0c5bkVPWGVucTY5TldQZzUwZ2pCMVFhQjdQT2JSUmxvZDVCcGQ5anRqSTUzSDlzOHFqaEF5L3lvMGZXWkVtVWlJbVBWZTRZcDE3d0szWG52U2lmVC9nU1NNcWNkR3RPeUdNYkthSTA0WGpJMVAzVlU1cFdib2pBVjV5M25Va1FvcTZFRVh6bXA3c3BXWVlkNXFzcDBjSVJwaTRENzdFdFViNzAzczJkaDg2MzZwaU5sYjUzRmdCSWJGZFZ5a1hOQTRNN09sQWdkZWRuQlZGZzZxaC9rem5PU1I1MWFlbE5vbTZVdXRSQ0w4VU16MTFXTFNVV2hqdGx4bEdSb0s5ZHMrVEFUVE0wc2FUak5VOXJDeXdxQksvWmNIRzhiZEpwUEdhQXYzYy9XbjdkdTUrN2p6VlQ3c3lxMHE2dW9TMUxGWjRPNjFKRDFJZjFraC9uekdwcW4rVVhWYlZFTlZMUVllMGRvMXZBYVBabmVZa2wxUW5MMmk3WHl6RkxWQUhZcnYvSkRBUFFLYnRqbWdsdG9Kd3c5QW1vSHdjeGc0U2dHemJaNlEvZm5Ud3Z1UGszcHdoTHNkb2EvSENGbUMwQlNoK25mOHd5OXppUGJvRWRiajdCZTVQblNIQU5NaHRiNHdFSm1RUUw1QTdwTThtZ1J4NjROM0RzSlFlcURVZlNrOExiZFY4dEMvZmlHTFdWclZDN1EvQUp2WkhoSnZiNHZRa3FyM3lUVjlIeFU1K3pJZGt6eW9CbHNkZ1FLNUh2ZXl0YmFsOSt6VUs3aVMxS1AzeDBiSHJTaDh5TXFYdjRtSWxFQ04rSGNlK1FoZFo0QlQ1MlEvamUwZHc0NlRCa3dkU2Z6S3o0QVNya1lFN1ovYXR5RWEyaTlXeVJkSmI5dllab1R0d3BsRnFCNWxnZGpLOEZhZE5ySzA3cWNad3ZkUjhjMnAzWDJEWjEvRXRtSEE3ai94dFd2RmRzQXM2L01vWTZleDlGbFd4U2FnRWM1WTVGYm1aQ1IybmhGa2NlQ2w1N0txWXF6L3BDaHdpYTd1amM5WFBlY0FmemM3cC9nYVpLeGZlV0xPYmdXdHJJT1QrZnc4MEpXaTVDVFd1Zk84SkFKWU0yb2t0RDN1d0Y3RHB5Q0JOU01Ed2JCN2dWUUpOamxyUFZ0MENyaS9USFdZSUdoczFTUEhjaEhkOEhyRWYzSDczYWFVRElSeURqcjVvNC9Vc3pWbWppUWZhTk4vK1pkbVExbHJVelh5M2VocmdHTzJiWmFXZUw0UTgyaHh2anRFRFZiL2c0djdHdC8wUlZ6aW5kU1FTRUNNUjFYSkppbGRXVXlKMjFZaVJ3LzdBV0ZwOTJ4THU4Z2ZuNG5ZQVFFc3A3TGJVeG0rdUczNjMrY1d3OXVydW00QzFWWHlDTVdVRTloS1hPODcrQnpZRWdJbXlydVhoYjBXK2htYmIvdjlabFlnUXI5MXc2U2ZNdVJoN3c4Z3QvVFVTRElZKzhFVE43RDg0ekNsbkdIaEhucXZSc3lKaFdPbG9lR0ZxR0IreUg3NnRpclJtUTdmbFZLYXp3R2xzbWNZVFJrMkV0SWx4QTRNQng1MnJGQzNJUHFrWWhOZTJ0a0J1VmZYTllURU1JcS9UZWRVay9QUlNpcWZ1T1dBM3ZyV1dEeWtTaGlsVnNXM2thclZYYUgxV1Y4K2U2c2FRd2Y4SUpycVowMWMrQTd2VVNJRGY5NjFRUUlRcEtYMUdJOE91dmtNeUkrUzJFN2RGV3FJWVVJUkw2aDVjTUtEL2JLSEhpYUxGUFV0S3U5RGo1ZmZXT3A4NGNBaVgrRzBneW91Ym1JSHpaTE9PWStkWE1GVklHdm92VEJTaWtFTXhDSlhZQ2ZqVGVIRnlCckFsRjUvVkE2dUlwS3V0SGlZSjBqRE9YQjB3TkJ5c3NFNmJZZXZUN0JKZHFyRndCV0EvTjVXS1BlVk5pdXZ0cTdzTG1OQ2c4aUF6amtXZUk2R0hOZ3BnSzY4Ym43eWRFa3dqU2U0SkpCdDBiRGc2STk0cUR1Q25PYmVsMndQbVlCQnlEY2c2Z1dhWEhwUnlVRHNjbitpV1FRb2lmZTlOa3B2bUhrbjBUZ21QUStVZFV0T3J6UEx5MDJkTThUMEZodU9aQlQwb0xGTkxTMUQ1YlJZYlExWEdZOVdDRHI1bkU0a1hDV3FFWWd0a2xDa0NmQnc5dWxLNWk3ZzhXU2VUcUlYRy9XazlHNlpiRWtGdVZxYjFaeW9zOXlvM0l1ZlRxRG9YMk0rNWlpaEhyTWFpYVpCdWJKUFlIdWFONjBYd0wxcUV0aElrOW45S295UDVNMWtzZWJOdnd3ZHZ3enlUYW92Z0hJNzZpSks2OEpjaFBrMDB4a3hjOENWUE1Feks4Wm5sT05CUmlJQ3dMMG9wcUJsVEJ3aFoyOVFYTWdNNTh5NnVRYkp6OHNENERMVUhwWFNBbWU1NGJwQ1hCSmlUZldsb2srNE9FejJTWndDQnIvN0JGU3p6U3pXNThuQTBNRUwwbVZxQk0wRTVWUUxJRDFoUGZOUHRQSEpKM0RBN3RSZVhYWFlqdk9uR2ZMQ29RWWk2elo3TmNSTUx3c2IrZGc4c2ltdUNjZHY2eUFzUkZkL2h2ZW1mK2N4N0xISEhOTFJyMXpLZXNXaUFPQmxFQjhIbXVsWFk0RDJWOXBGVVgrY0pwbE12aHBFbkZIMUdubUZ2WGRaR2NXQzE2dGk2NzVPQVV4VzA3RnByUEJmMzJscE16WjRra0JzeEUxU1dTQ0IxVUFJT0xINDVTOWZNUkV2MzFjRUdlK0NkTi9sNEdMMUdRTDZsNFdvVTdoaTc3WEcvZUN0R1hWT0daNUJwNE9zdmpMTnN2ZFBHQjRJOCtrYWw3WmsvSUtSTm9hVk5wc2hBbzhzVDVQdmlQSnNiL0pmRGVyVHZMN0p4bWtQa2ZyNWxHdS95OUwwK0xjVUZsQW4xYUFWRmpSdC9BT01JcDBTSFN4bFJ0T0g4Mjlsb0Mwb3B1dysrS0VtSzEzYVM1NEttTWp1Vy9SQ01uSTB0dUsvVWd4R0JFcnlnS09VNlUyWlhERXg3eStwa3daOEgwMXZGemhXbjcxRU5VK0h6V3g2TnJSaVVWZDVoYi9Db2x0R0dFK0Z3S3VQbjFSOXJXYXVYcmxsSzVyaTFpekV1NUdLdWZIcmNoM011aUdBYXRGeGEvMVlTanNzZzVoTmlxaml4bEtHb0FGczRIVFhvTEw1MDZlUnEvVE5POXJyZDBBazlQQTFNVjlJQ0F0R1gvMW9pNll1TUlRa2o5ZTA3MUhCWlhFZWJISGRlZk5weHJOVjBYQ2pXSnh4ZWZmNjlvMEM4ckk4TFk2WndiRlFhV1p2b1B4alRQRWVzZmU0OTFNMlZGRjA1NUw1WVovcnB1emQyZ1RudURjOE9kRHNsTG1nUmFla2FwWWxuT0VkVE9XcVI4dlZ3WHJOZVRYNS9oQVlEMFJuNUx1M1llL1hWQkVoYVpoMGtrQ0QzWEhxalBVSXJ0UytPanZJcEsyYStRNE9sWG0vN0crWENzZTVycGY5UHJCbnhTQnprd3J6SmJEeTNpLzFJRTdSTEkyTmVBbEd6S1FqbXFlQmthM0I5TEFJUzJMdFYwU1pxRlp3MjJoQVBLWEp0TUI4N05lOEhTc2dHbUF2dnc1U216UEk3MDRkMVdQY1c4WWRLZkQ3aVc0cEVWbUh2WGJ5allxMW9uRFhTbXNPUGR6WTh3S1BaNjl1emtidVIweDdlYldTRnJxNEU2WWR6ZTF2c3lMSi8ycVBRZ1NIblY4UVRRd0tWSksydUxQNm9SKzNLT2VBRlcwNWVMalI4WldLSnpWRzhzcmV4S1VPZSt6bVVDdVc0Y092Unh0eFgycDhkNXc4MENmV3NwY2NtWDNyRldSTWR3VFNBMmlYcXFsM083UXV4R0plVUNwMzdEaHUzZjIxL2FxQVZIeHdHNnJ3MnlUUmtvWGc3Z0NGMGtJYnRaL2V2dkJGd0ZFaGd2YjJJejVKWXdsTWRJTnI0VUNGS2NNcnBxc3I3am9leEUrU1I4TjlrK3l3WjRvSCtEdnNmMko0ZTE4cmNzTWdxOE5IcnkxdVdySmREWGgxUktLSEpRWTdSRzZMWXl6N0JYeG1NbzI5dDVtNWdyOVNQcm1IbGZDM245Y1lqaWQ2QmFScTNXQmdHSWlzOEpOTEZPbk1HaUFmN0p3ckxSc1I3eG5pc1FlVStGYTJWSzJIWERKMGxrOEpNQ2FLUE9FNVRUcWtCbkRpTjlWOGhnanp3RmlqTjQvUU83ZFVaNlYvSkR2QWRmc1NNY3paMyttZEl6NDRFMlRLQzBsVGNTWUpZTTR1THBFNFNVcXhDV254SFQ3Y3h0WWo2amJCVlprK1NUMXFiYUY2WXlPRmJzdWY3c2hiOGs0NkVWZUpid3JyUUg0azZ5K1RJTEZqbHZIMVRGME5pU00vL1RFVWMyR3B1cDY1aExhSVNpeTBnRFhMb256SExaNk1uelBlcDd1UklBeDFTTHBvb0xDaEk0b1F4cTBjdFBTcndNRzVRYjBZQldYSzRXc3VjVmhqRzY1bWtmKzA5bGI1ODM2M3RENzhxNjg3OEtrUytycUhSaWMyRGRET0ZOMUdFYk9vOFdTVDhhWU5kWmFkaHJjNWtTOXFQd1BpWXphckplWmRycWx6bEV5TE91dVpUeCtEcTkrZFkvRUROL2dtZjdqU1VqM29NZnkxQkpRTFRxL3JHMDVKL20xT3JURHcyVDdoTGlsZUx0QVJPL3hhTk4xZ2VvM2owb0djRUhZNmo4bnZwMlh3ZjhkeitxUkdJUWNJNlp1YTRBMGpnK3Juc2JDSVg2MEJML2FOeVh0S0tvTUl6b3dVNFlyczRlWFNlV3VhSjE0eXFLM1FLL3h6dDVha1lVZmZrM3ZNRjNYZ1NteEcvZ3RFUk05YVJ4S05TNjZSblNJM2ZuYWFNUFZoR0J1Y0s2dTRrTG9tOXl2TnhNUVJJdy9IVGF3Vmt3NDRxTGhROTQyaDUveFRWQUw0dXVKdkV4ZjhXRTZQeWd2d3E4WFVVUnptaEp2UGY0MCsvY2JOOG1nY2M4aFJ0L3lJU3ltckhleWwxV01sM0IzcXZSbHQwb0dvL2tvdFRzaVQrRGhvR21FVnZVQW81anhobEhmYWFidlNzRWlWQkNScVVFN015QTZMN3dFNHhnT0haNFp1N28zQndzdWIwNFBXVFM0MmNScGR4d1VuWWd5K3o0Q053ZGVGNmpUcmpGMXpuQi8zRVIrdU93d01yQkcrVVF6Q29oUmw3bDZmcVQyTzVmRlBXTXhVdzV4SzZIT0hxMEdFc245c0FFa1JzVkpVWXRZYTI4VWEzcjhYdHBOcFd6bTY5ZGY1aEdvUWZ5QXZCanlUVjlBTzN0dUNKYlUzcWNiMC8rU2t2bTdpb0U2TkhVTmNYd0hmVFRiU0JWZHArM0RpdWNzVE56cGxScks2WHBmSEM4Qml1NHRaK3dHSHdOZXdScUxORkJUZHR0bC9LVkpoSUVJeEJhcFgxTnFOMU4yNHVvbG1HYmVIN09LOEpwMi82OWVDWDJtNGhVemZTK3RtZnJhUTF3ZEJKSm83VUtPU1piQ0FIcG9Qdnk1Y09oa1VKUFM1K21MVzBxNlJSTXRqRkRQbE84cktFRGpwUUtRbktkQ3dKRVViS21qcVUvaTZPM0I5eDZGUTJjQXYwRitwRnQ3aHRYV0gxcFVhNStXc0lsRzYrY0w0K0lJbzhJNFUwN1I2S25WajhyeVBUejNJMlJ0anB0Tk5LNjRuUHVMUEdjZnpGU1pzUHEyRHdnR0M1SUNJU1d6aVczSllHYVVLSHJ1eldFbFp2MSs3Rm1WOXN0N0tHZzlNRmR6YXRFS2NnSUJsdHBwenhGcVFaY3VjSjBhbHNvNjVlbWo2eXVUQXJZQ2VDQjBBcGt5d0diOG5VdkNFNUFjSEdVZWZvSFMzcHBNZnVHYXhIejlUNGVhZWlMVXFWRjdKZ0FGSU5SamRJU21ZWWdDSUUzeGM1WCtyN1I3aStsNjhLZ1pudk1YY3hsZ0ROWWdPUUEwUHEyejBOT1U1ZGlWUVJXdGtRbUV2OWVQbi9COFZ6SUw3cGdQSmtuQlkxVTJsNWNtVHlGNDRyY21UU1dLVGNUNGxUc2tnd25aeTRVMFFQSmZHdjl1REhzdVVqcHVwM0lRd0JWeEQxY3pucWJ0NWhEbXk0MXJ3WXRtanJjTE1wcEhYKy9WZlpJUGxyY3k4bEFZaW14RzNON0J0cCtBcnQ1WkhKWTUrcmZJZmRuajlJT3NBRGlJbUdud1QvR0FKQ2xYQk4wd0M2ZnVjYnlQN3BQUnNRcFpZYXZ5SnY5OGFPRDU1RElqSXZSbVlVdU9MSHlDZU8yMVJLOFB4cVB5YlhJZ3NqMld3R1M4NUpPZXpTWlVCUVRhVC9RTXcweWhTMjVvbTJkcEtRb0J0TCt6MmJQdXVzTHAyaFU1Z3g2ZUhUN0g5c1JjWEErT2Y5OUc0M2x6WGZ0c05weVlYcTNzYVFxWkw2dUtqdko4SVp0M1VKV1B5R3ZXWEc3SWJGbUFVSmlkOFc5R0RBNlJMajZRWUd2anp3ZHdKTEo3bUZsOFhjUXdPSDFpNHFJSEx2RSsxWEpUNEEvd04rUGVEb1RtMzJsVmE0d09aNHVrL2E4Rzl1bDVsSkd6UnlQQkJxWmg2Zmc4NjY4dXJ6VzRGekNoSFFhaUtnWlFoZGNvRFdWUnZSRWpHVE9wamdlQ2UzVlcxMVYzSEdEeDdhc3NnS05qalpFME51NlJKa2RLNzViZ1FKRXZONTVkZWhsem9hQzBSRnhjR0xQc0pOR0VuRnBRUW85cVROS2RCYjZFWkxxZjY4NXdhbFMzak9iLzVNS1RDYnhkV1FDd0JhM0ZUQ0NhbXpNK2Y3RUNYRXlTWFIrZkQrS3BaNS9sMDc3Tk5EVXd3Y094Nnl3UmRCQWwzZ1RINUNUeXQ0YXhsRStvOGVNb3pyeVNZcTZ1dVQ5MFNJd1NwcGJyc2l6Q255V2ZCSSs5OXBhUzR4SG5ESXVFR1lHUHFPNmIxRWlULzErekhMUFoyVktHQWxUWFdQOWVFMDE5anNpbmV0ZHV1bnE3RW0velhjMVV2NWk0czVrZVRiZDREaUVUTW5DRkpyTUs3QUQ2RnJHZjhMVmtpZk5JQU9oVzVVTTMwdU41cE1XcStqMDZGTHlWZlZCckZPNmZXY0RkemFJSFgyZVU2Z0JYNFY3WW1za1Irc1hxK3k1ZmdvNjZtL2ZaUFpIQWxOUXZrNFlzNXBueHBLbFFxOFVsbXA5SE15dndHZVdETTQwK2hxMEF2Mm5YMTJFRkFEOHRsSTBPQTB2N1lpUkZ6R3I0ZUtoaklRVUx5dEF6NnVVbzFzYTVXeUFJeFJyNWs0Qlh2NXZRcHkyRUtQUVdzKzZCeXNVd0F6VVJhdk9PNk55Q2x1RmVYSG0zeUpKc0dvQzRUWWRUL2JKOWh4aVlybmMvRTB3RXN5bFlWS1grQ015ZDlWNjMxTlNERlh5SnlpTzVrRkRoSCtWOTd5QUd4c2Q1ZTYzRnU1aWIwc3lla1I3VkhGTVZjc1U2MkxPd2ZEakh5YVVneDRyOE85dVg5cVcxZ3hic1R5WVNNdzduWW5neEpaV1ZKVjJoL2lrZUpCTjB5Zk9TTENoNzlKeHp6a3c1OVArOEFrSy80U2NMeVVPZEMvc25Jb2tKeU90cHYxckFkblBVUFN6eGtEL3VlSlFMR3prYUl2NUpCemo3aGxUZWdPRkR1N21yVGhmNVlUNlFQcDFyRTNubmd4Mnk2eDFvd1BKaEhyMjRJZXZobDZEMXhzbDY5NU5XOFNNYnRTdkVZZUFKNnBpQjdOcUtqa2dYS05KMW9mZjN5UnVDTktkSVVYSEZ0Nm92Y0RZcklNSHBKWHJNenBzSVRaOGorTDBkZFlxWGs4L2xZMUFXT1h3WUNDeURHbFpGVlBpRlFmaGlITFg3dWlRa2pYTUhkeCt6L0xpT0dMbDJ6YmZUY0VZNHJiTTVuNFd6bjdTNU5YcCtJeW9BV282Y3FtTFlENUs5bW9KWEdPNXFLRnIwd1E1anRuSUhtMldtYzZXM0JxNUp6d1UxbE5weEpvekF1SEVWcXR0dk1oMTNVZE1qRzBzaWFwYWJlZjlJeUpWV3F6OE1BTTRtZkQ0ZnFBY1Y4Y3BLOVZWM0xlL21lMDA2YVJ0SFg3d0g2YUxhWVFBSTBKWkR2M25VS09icEZSNGczK2l6MXN4YzNtWWdPOGJuMURJenFLUzFkZmVqVmNlWkdqQlpmWmdmeDBNS0ZTOFo0Z2hVYXYwc0hyS21KN1JOOE5MK09CR1h3d2VDQ2V4U2xKcUo0VzZBcnY1eHhqY3JpQ2FrR2tZUWdkeXpVK3VobXlmOWZTUGR1Zjd3UktEOUxHT1J1VGZZazZBUTErRitzMk14aUkxV29DOCtsRDB5Rm5hbXVzVlprM1lqb0lEN2plYmRIYTZmOG1GcXhva0hibS96TWYxSWhFTmFqZzc1MEN2eDRCQnlNR05JQzFURHV5VVVLdisxbFBEY3dCZWhmdU1YUDBmNVlnY0xhbjZKdXFJeTBabFpTWTlGMzJ2MnRJaWo1YnVjSjNKN2dKOTVFTFZDKzhrbmt4UnVuQkVIZTBaeENEY25yellMOFhsdzI3L3o2VkpWNWp2TUZIVHk0S3NvWTFnQ3BXM0IvL2FWY3BJelhsNTYzNVV2VGhVRHhEWFZteWQ1SG9NcHZDM3pZL3RWWVRoYk9IZWI1a0lhM2RkaDcwWUkxRWUvVW11Sy9JclBTc2RSVnFJK3pnZmpRemJCU1ZtZmpxTDVrOUpyL2ovMDBCRXB2VE9QOXN0Q0xtRFgvT3FZbkx4ZHd2QWtYYnYwSUFYdVF4d0NvSjZqQnN3eVAwS2ZycFVTT1BVSnNzYkFiSW50R2xwUEd2TXdTRWpWeGFmSUZVa21wSnp6QTFwbGN5aXBMTGF0TWdHNzYxaUJtaGJ0Y3czWXFidWRnY1RzcnR2NndPcjV2MEZ2TDdNTFBvbXNGaVhlbytrYTF2cDltcUJROW5MWEN1MXNScUVhdzJCZUxUL2hwVjNTUm0xVnZCUTQwV1JPU3dXY2xlS1dpSy9jOFBabngxbkw3T05ObE1TWlo1cGl1MXRJa2NFbGh5Q0xKRy94WTgzNzFFQ3dqRzBmQTAwT2dkMzJrRmpUTnZVQ3BKcjR2TUZyVW5mM3pIRG5SWE1wMm5nTU52Tk9MUTN3TVpDSEJ6clcvYWdnc0xTc0s0VlZlOWpoTWJoRDFpQVFBYnI1ZTBDTUU1Q1dJcS9Gb25HWlpLem9uaVZRYUZGRDVKeVhFblRDMXpNczBBZCtJdmJRSFNyYURseWUxMzFpTitnU0lKemxFZU84UEgzR3F6VzVBcTJTYVkybEZ4RlhnUnpwcUt6S09OYTVYOGZPSTRxSmVCWnB5QXlvZVJLWXphTktRUjc1aHBTYXJnRXozb0U0WWJNcWV2YUxnV0hMVmtNRlhVSXE4S3R5bkcrZVpsYkRBcnpPekkvdzlENjVIZDN3TmpmUUJhbEY2NmtRRDEvZndJWDBmVFd5cWhFSnhPR0hmb1BXSWdTdDVzZDJMRW1aWnIrcDVndlptM1NOdTR3VmpCUHl0OWp3MnFpcW9wRE85SXk1SHFRMUU1ZHJvOG9jSG9XTjV6c0FVcDA5MldVZXRHZ3h6OHhHTFhOanZWSUtwSEs0eCt0TTZyczVrMm96U05oTXJhL3hBdjlhZ1FaWjRtN1RjMzBMbXFrcFZZNW1kOG1idFJ6dDFTazdpNjF3WVdnYnoxSHJyNGZPcTh1QSsvR2JPQU9xZEJ1dGRUS1hQczFDTHgxc3lEd09wL25FY3EweUdkMjVUMnpJRzZTbXAwdCsvcHJJVForbzhpUXVsWVdya0tGeTg2TzBkUUtWNFBadG56RjlIUDRXZ1M1dkZqWDJBcWhLSS9hOUhlQVE5NGRiT0F5Q09YT0JQWDhkS0RJL0NzcTJlMVJLZkJTUkViWFcxZHBUd0s2dE9KaWxjOW1Xd1BZQ054V2Z4K0RYeXNjcE9MTmxFWEowNUhMcmJJUmtQWVJXVVBUR205R0V5ZlV0SkxWdTRZNVFYNDFreUxGU2s3bzl2ZFNIWmpWMEdMMS85ZC8weWFSd1NwTGlBb2tRVnRXY1ZMcTZPbXdvZlgwOGp0WCtlZUhZbU1OWkwxU29vUFE2NkNDckNUb3pvTExSdkJJQWxENWhRR2pibWVwdEZiNmY4T3ErOXFXQ0NodHViR05QRmpNRmJmcEVGUlpQd3dFNkYyZG5LeXhCSERSZE4vVUtYMmNOOFY4R3BVWEJxYnIyQ1ZQdndZRDE4NXllTnhSQ2UzcDgxOExieE9icTkyaC9FTVFHWW0zT0pmUFQvYTdqWkk5SkpkYWhpOXJoTDB3WmR4dEtLQ0drdHMvY1VPaGZ5MyttbHdpRTd3TzBhaTV5ZlJGOEtNbXZLOGU4cGxncGw0V1k1V29QQzFVbE9pZ3BkR1VmUTJyRHIzK0l4OUtUaFc1c0l6cW9FcGhtREk1TUYvZWZpcEpRRVRpbzBLcFdjSkt6L0wyeG42WEtFcFJqODhkaksrUCtmZG1hWXQ0Y3MwWXpLSXJleW1mRStLVEdzcVV4TnJDaTB0Tlp1VWdUbEQ4S0tYMys3YjJUMFBveHRsK1VoVkUvMlVucEl4RWRzRHVsWjhDakhDU2JMSEZrcVFiVERJOEFWKzExQjVYNFJyZUE3dUFNWHFLYlBUbVAybGR4OUV6OUt2S0k0bkJzbnVUbWpkZWlLRUYyWUk4eU0rZFp5bTNkaW8xb25kNS82bjBJUFBuZmhST2VNSWZwVk5CQ1IrTkRjK24yemJnSzRncUVWMUVPZjBOM2FLNVYrb1E5NVB3dzU4bk8vVTJKNTFjU0NZbzFoU3ZYWWxtdzd6djdnWUZhMGplTTRsT2llOHBKdFk4WGNzSEJYUmkyRVJ3REpuRTdMZHhFYTVMOWIwcnZaRUloOXZYbVV2MXRuV2tTNVpwbmFFTzFDZmtlNnIvRzNLY1laSEFHcnJOaWVWcGJPVlVHZGpjd3duR2t3SHhFR2xHYmJHRFliVnJmSGQ2cmNEWDVpRU5rNnlZNVhOYTVSd0UyUU1GQTlXWDBNSFNkdHY1NW9MYldtdHQzUjFrbndrVTBIUytuUFBNeURnY2NwRFl3ZTVlVWpQcFdqTXN1Q3pmcEdNdSt5bzV3RGY4TjgvMnNmMWV2My9WZTMxK3JwYnZuK3NSK3IyRnA4bjFjYjUvUVRuNU5zWHcrL212azdUZm4zUnd6NVB0ZjN6L1pBLzFlMlRmTjZqSjhuMXN2MWV6RFBrK3RYZlA2WE0vSnVEOG5wOTE4bmZMOC9TRGdiNVBxVi9uK21IL24rcmwrZnUvZko5R3o4LzAzTDVQbzkzeWRyTmZCMGQrVHVCdnlkYi94TmxBSXhTZ2ZMVVRpYm1wMmZyOVVIQVBtT3J2WFlCZEE4WU5DWmpVYWFEdjcvU28xalJxdHJBbUJqK1hzQjJuRFNnRFdieWxwQm9vMW9qTURNQmdvM2o1UVFoaERyMnBweldQTHdlUTVIRnd0WVl3UHFpSHh3ejFxQ2JBMXB1OEMxMHAyeHFTOVZoalBxY0NPSmRObUoxTnNGL1JoODd1MFhTc1BjbkRVRGc1OFR6OE9nR29CMDJQdDJTTndpL2hhcG11UFB1bnQrVml0alpBeHlVOHJPNVdDYWxTb1VibXNiRERjN2VzSlhoMkVDeTF0VmRGYjVEZWdHRitEc2RZalNIWGhPeWdFbkdzYTNlaERocm41VWhmSmkva2svKysrZ2l6cnZWVDJiQVlpeC9CNzhZSnV0bXJCK050MTBrQTV2VDR4TmNnQWVWNytaTEZVUUhkbWQvZS8zYUM3QVA2NEFjb1hreHpHWGdPUHpEYkM1d3oycHdoZDRhZGs3UUx4R2hNQ1A3dzAyK2I3ZElGM2pOZzcxeU80dWZnYkFtZFNRWGl6bS8xbEcxa3FjNi9NSlhvRFYyem1XVGxSNE1TWHh1YW83TVlwY0xCVkxGeW42ZVgzTWR0ZThnT29Sc0Y3QzA4UHZ4YVJxVE5mamhyZlZOaXYwemlqL0RGOWZIN0lnTDFLL0tZUnlXSzlBOGIwdXZ1R0FDdjNWWmFwUWtlTTJ4WFdOakZmaEtDdkZ3SEg3ajA1RTdUaFE2Z3J6UEhrSWRaR09LVUlMeXdnU094Q1hpRFBBRStHcmVvQlhodWJPT1F5ZjJ1ZlcwRUovb2RvY3BablZRZFNTTUhJOGZLTkpmQXI1WS9Ka281R0NYZ0E2OUxVVTZaMUFuL3NBS0JLZDZYSGE2ZTRCTm02NGFYazNEaS80U3hkNVR4TnBEeWswTGovU0VpeXA2MjB3MGZqTmZYdVhuU0d0bUgycDMyVWRzV0VUclR0bkJ4SnNYSTFLWXdaWmNubWRMRERKVERWZWdXY0psaHkydHAyblNnUFdnVmt3R0hQVTFJK29YR0orNGlEbHk2NWNYQkZUTHE0K3dCK3FSdXRSd0J0YnJEZkZVSkdsY3pySWY4RDU3YWtBMFRxempKNHNFWGFsRks2RnhUTVdHVkRsSHczVDNyanVEdHZzbTFRWGY1aWZsWitwL1YyOCt4N3dZVDVBT1BtTE1SU1ZiT296ZmdES2pzMXFHNWo3TkM5UUo5U0Z6UXhKTlFpcGVtMHVNWHdKVmFvR2Jrd05QT1RldmZlSTk0SEtaOTBJa096UnZEanZCd0ZXcDZIaW1wWkczbWh4NzRlS05nSW1ETWtnYlVOcFgvbHFGbGlYcys5K29VdDQzM3hsUGd1dFVRbjJrWXNUeXVvOXgvQmNBbGtpOGtPV0lOclpzMjIwTXVwS0xWUTRVdytGdjJjM3RWa0Z6QXhpSlhXL3ZXbDd5VFhqQXVDK3o5dFhSdUk1dEgwZk1LVThiVmVXU1h1ck5TQjcwVGt5NHI3bW1VYUxtVTJvQjRpQnlmOGs4ZmpHcW5oMXkvM2F0RDYzd0F3Y3hxZkVEUjZLS1U2Y0Y5N0wzWDdUSnBRbnRrSXNaZEVPeWl0SXZYK2F6MEcxcGVOUldQOVR3N0tZZXlPL1dldTh3SExoWEhjeHNiajk2SlFManp0K3VpVFB0K3pvQy9zbmZGaEQ0NGJzR3ZaQjFhS2pMQklxb0c1QzZpaDVzS1NtQW1uOCtvOHBrNzJsMndsdW5mZ0VXSlpaeW10aWxjYlJZejVRUkZkN2VYRjAybkdDeFYwWEpOVG1lUU1zZERnKzMvSG5XL2NGYW0wTVhqa3NUTTFpczhoYXZUT0VQbldwZ1IvdTZVTU1pZ0ZzS0pwM1hPSW1kOXBzZFBxQjloS3Q1d2UwaStMWlBhakFpUGh1cVB1UE9kNlExV1Q0c3ZqWEhqcGxYTlNxcEVVMHdsblpZVHJ5cDdzUURGbnV4dHl6eG5kNGFXbi8vQVkxcHRKZndtc2YvSWhGRkZXQVM1dUoyZlNRdmhvcGQwM2VvVVZxSjB5aUdaWlU3TWdHTndnWGtDYStMTmtFeUJxUkZSZ1JRS1phWElhYnNUOGw0dlUyM1I1dlkwbkJVeC84Tkw1ZzdLZjlhMGVNem85aWZXNjNPc1R1N2hTR0FLekNaaE9odDhNeWVFMzQxc1U4bUF6Sm54WDgxLzNuWEw0N1dxeXNJZXZQeEtuWm00Wi9JSm5hZEVaUkt3MkxSSXErT1dicDVIYnJFeHdhbmpuMTBjRFZVUnVtc3BURVhvcHQxREdsVDgvTFFuVXFDcitvMkFNNTNmb2lyRTNjUjRIa2lSa0JTQVFzUzQ5QklyaVZTdkpiK1JHcEc5K1MvdW5FWnVDVHRUZnBrdEFkRmhnemlic1FQdDhSZjExVDlmOUZWcVM0NlFFc3V6NjY4WVNvYmtqOXI0YkNXMmw1Qjc0alUwS1lQaEIxelJtSCtobU5GR1V6elVLNjRpSzgwdUZjeldWemxmWkU5d2s3Q2x3dFE0d3NjSkVKUVQwSklIbHNnMHVDN2VhdGE1RWp4WEt1cWNISHhZQjJ1OWRvWk9VOVY3ZVBXT3lWMWg0VllyUUg0RU4rQXdxa1JTSWxNRDV6bzZOVmIwa0QyZTg4RzR5aGM4Rklzb2RiOHNsWnlaOFVGekpwY2NmQ1FDaHFYbFJGb1pEWHBHZXBRSXdqQXFVWkZuc1h3WWp4NTB5M0V4Q2kvUERhK1g1a2Q3ODkyUG43YWVmbUtzbThwdkRaN1lPTjdHbjVTc0MrMnlHcDB5dlFZKzZpSkl4QTBJZ2tqZElqVi9wdmpmQXQvRCtncjQ0d1RKQmp6ZUQ1WDBiM2taZGZTSnFGTHlVRnhKRSs2WTVla01qWVVvczdnN2czMitPN1FoejNwUm8vMlRWTnhIVnVwSFBObkVmRGNNRFN2dmRpcVBHZS9SbnFHM2RyYnZ3YmRkY2ZXRE1Oc3NNUllod08yY2hiZVIzSVF5SFMxWStEcXh1UVc3c3NBdldUUmdEOTlUSEVDdkd0RVVPWUYyNmU4MHNhcW4zT0oxNEt6eDhjc0RGTkNlNU1xOFFQV1E0K1pQSDYxZkM1ZDZxdmg1QWNPQWJrMTlQUnJiaW9qbVlodW04aG40VHRBTEVzdk9NSWJsMHhYeitpMVNvSmF4QzA5anVRR0xFNjY4ZTlidGorb2hub0wvMWlaaDBYN3orU1RacGZFbFhjWnY0aldDd1V1SzJGakVTMkhPUDhIZkdqaGpycUVNeWwxaDUvRk5CQk1HNmYxZFhjN2Y2Y2tHQ0ZINVA5ZWRCTnFnd2MrWGpzVXVKWlFqc1Y0cFQwcVhYVm1HSFl0OEgreG5qQVU2WDIxSEVPeTBNUFJCVms5bmJOMW5OMFJzZHFqM2ZiWmczN1BCclFpQzA3MUxjd245QzI2TVdxOElVWjQxV2UxVG9JdDd3YkZlTDJIMVNNRk5OdHJmcnNuaWQybVd3bWUxQTNOUzBtMHRrajl6ckVtaWhGZlhEWEpNQnVYV01XQ2ZlK0U2cVVDVGlieEZIMTB5N3VSNWs3QW9FSnhlTzl2eS85UFpTS0M3QWdUc3JNKzQzMktwWFBiOFkwcndqR1FXaUVUUEFCbXU3YXV5aEZDd0dkRWpEcmNiOW5ReHRzaTI3MlJlRTN4SzZsMitxRFhDcWNzeDV3a2h1V1FEMU9HTkg4cmNwY1hpbEkyUzREVE5CMEc4dFg3T3RRR3ZMQXZsd3BXcmsvSHAzY05JUWYvWE5TS3NpWSsvd1E1MDludGRNRnNXVjcyTWdIMUlHUC9Wa0txeXZjejdhcVFXRUYwV0FQTlVqSHJGam56ZndRaXVEZWlkSTlIeTRKbWYwSHZ5MG5INGJQMjRqblRERTlKbWMzYmp0NGFuNkRTWWtXZ29ZVDZuV2tKQVV3eXQxT0tkQWtra09XTmZhZGh6VStZNWU3dCt1K0huQXRGMVdINS9CdGVDL2VKREtLYytYWmNSQVhlcGUrQlcwVkpPMjNrQ3lmZGYxM2lRNWRkR21jSk9hcXUzSGhLcXF4cjdHcGNOMmZGeE1hTjljMG9aQVg3ZXdpWi96SkRMOWtBWXppUDNtazV5d3dPWjQyZ3hJMlBMRUVxUE5aVFBheGI2MU83QkkrYlA3WlREeDdZZzliOHFDc0RkdEhoR2k4bDNkL3AyTVZuQmpTUkg5a0IvZDRCY0dNYldJbVhSSGc5WG1DNHNKQ2pjMllBMGpXTG4rNGJnbndHc1JOVnZDaXd4WWk1UUR1MnIrSmQweDZEd0NiU1J1S3Jyc2k1N0pSYi95M2J6ZFdteDJ6Zzk0L05kQVI2enZuaGFqNVk5Wit6clVFNDRENW1SMnJoV05xKzkyYUZVR1FReXR5NmZvN3NKNWJTNGZkdUljUEtaM2hsb0pqeHhFamk2M0JpZmV2bHpJaERpaUJ1U3c4aWwxRkNRYkhlRWJiODRMbGdEWTdnNUxqNlFXOUp2eGVETWNoNy9XZWN3NFovVndkNzc2cExiVm55Y253NUVtQTY0MDN5K2NHeHdsazVVUGRmZk80VTdGcXkrU1puOWd4MDVCR3BYdDR1K0tmMXdka2U2eWhLcENDaVZVS3cydzYwcTFkWDhRa3NvWnAxNW9SY0NFSVRTMjhDU20xMGQzZHB5YmRFalR6MWdnK2tlUTA0VXBoenZneWUvQ05JbDQ3UlZyMUh3WExnSzh2bW1QUXBwTHIrSFBUUnVXU1M0UmdDSERQcFk0WXZUQW91S1FmbkZJVHBCRyt5Ni92YWU3SGhFOTIzMlUxZysyNGNnNG5BbitTOVlJWXY2elVDOElZZzlleXR1WENEa3loRFJYWC9hV1Fac0UvMmlGVEJvUjdid0NHNnBzRkRjMENoKzUwVFk1dkpjVitvZ1dKVmZKdzk5bzRUWFh1dHM5TEpSZkVuNDFING5YL09jN2JiTG9TT2p6WFVDZHlSSmt1M0F5UWRpblNjMEwrdzFmUCtWcW8rVzQ3RncvV052REFPUjZ0Y3ZEZzh3R0ZEUlJqRitBcjVNWGJydjcvN0VxQmppMUYvb3FPaTlycFlmcXZ0eEJ5NlFhdnNoalhVb0hzRTc1Qk9mei92VERnTThXeUVCRkZEZUtWZ0lKVXBEdnd3dXRFeFpXSkVsTmZ5N2Fsbmw0a05mMTJmVkZucDRFRmdkdnZYUFpMZzdxbVRxdlF5Qi9McnAwMWtRNWlUSWY4QlVaWk1WK3hsRkU1VzVnQmduOGhubDJ0SVpnVjhhYTE0SmpyOEFhRDV5VGRMRXdhdll1NG0zNTViOExsVXprQ1c2QU52U2prMTJpb0pUUnk3S3dtd0Jod3FCM0VPQllXUWVsS1cwdFN5dy9udFU2aHFXNzZMcXR3YTNRbjc2eGU3VEptOTVIbDlXTEJUTU9yOFhuWmVNWmpoWG14eEg1OE14dWF4MDNJZGd5bWtlRFg5bnVORHk0RG9DejlnbEZETnIrYVZ4R2NaNTROd3NaYlpnblhibzd4S0kzaEZoVmtzaWNNck1wTHdPZm1DMDJVT1JNV1paaXJaYkxVUUVNMVl2cVZyMVg3SFBtdy9xdHBPdnE1c3E1NkRTRStKakdQZTR5S2JmOWtSREJXZ011R0k5WEl2ZGV0cTEwS2lrOGJyb0JzRlkvdkFuTTZORGE0NFpCM3didUxncENCRjNMejlRSGFYWVYvUXQ2Y0VqUHcwRDZ6N05yRzV6ak0zbXkrbWFWVjJWaTdCbk1lNEFkQTkvckZZUnJyakRzMURpM3hkYm5QaFJCbnM0MVczSjVlbjZaNHY1S2JVT1BiL1JmS05iVHBqQURSRk1sWjEwczZSbWxMTE5lN09KbTc1QVoxb1djSGQxcjNoSVRtYU90cHJqYkFsVWtkb1B0eVFrVUc2TVpZT0ozZ3EyYkZWTXdYQzNhN3ZxeHNrQWhuS0RERzBDZVp6MGJrbCttR3RMeFdRQW9lNmgybUp4TmduSk12M2s3UzRvYUMzOG5Ga0ZTUGZNQTdKNGcrc0NnUzJkaXFRSWNPNUFVYlE3T1hsc0N5MTRXbFBKZmV1N2JJZ01vZElia2R4UmdEM3o2bngycUo5UjJpWWtTTU0xM0VRbkN0b2dZUVcwWW5CL0t4NnhrVzBxUEIxTWducWl2dDlrTzgyM0FEUUlhTXlSVzNha3didkNNMkNjZUNFQXVCV0RPdWVCalY4aExSS09PbjdwcGM3Z1BPMDhZcmVTYVIrRGg3RFY4ZXFodThsZm8zVWs5SW1FUUw1bmtxWFJjcTBUZXZzR0pFNms5RmxDaDRoVjgzTlJiWjE1dEFsL0hVSTlKdG1tQnVLMDlnSXk0cUZBczlDdUNNTFJsZC8zcjBnTitrMWlkRFpHMy9uSzd3VHpvRSszbnY5WEpnb1pWU1J5WW0rbi9zNE9ESTRScEdZcVRPOFBGNEE5YXdUOXExOFE3dXFKSjg2cncwNXZqaXQ1Mk5TNHJnZmxIREI2Nm1mdnlzVlFaUktoYTdHNStRbDdMSUZta3FxUEJwVUZPWGg3NkxHNDNJUER2UzhJRC8yVjFjRFZBQ2VJRWlaWmIvQkRJcTg0Q1c3MjVreTcrY21yL2xkUStwbk5BdTk3ZHdtdHFxaHdOYkh3SDhQZEhTMnZmQ3ZhbzhmT1ZLWUtqQk42SjhmMFRIb0dvTUdlakRYQ2hPS2N2ZHVMWFBmWk9VT1VnRFM5MURRUXNaVlhCTDlDdHFJZC85bStrRnVtVEMvMndSUUdXTGNpdU53eWUxZmlZQm5vN0doa1ozdW9hak1qTkJUVVVpRVNKb1lhSmJjSk13RHNXaURwZTdlT3gybTdBaW5TY3N1Y2hEa3ZCSnQzOCtMdkdYRWJnNVRzQ3F0RFVaTTk4RFlJTEUvZXgxSFRxMGFpeCtFUzkwUDI0VEpCaXE3ekl4QnJXYmtoWFNoSWd5d3VPdCs4NWdEZXl3Mk1CblkyUXJhWDV6cmY5OXUxSzB5bnh4djJsbnp4L3Y4NGh0UTZ6TkhHc2UvWUtDTE1XVTQzcUJMRGZmU3NYSm84bU05Nm9QUWp5SVlQckpkYW9VZVJDNFIyMS9GTmQ1UWdMajZieE01UWZOcFlyY1BiUmpNUDdJMW9BNW9nUWxCMktJVGdISm9OcU9pbzVCTldxVjRxMUhTMy9nczJRYzBYeXdJZWZQcVFyRlE2ODY5bkJTQm5yRkJlbWt1bTN4RFUzczdRWG9URTQzUHJ2MGhJSE5LM2FiQUhKZnAza3VlZ1JoRFAwcXVROHZmdEcyT0V3OXV0RFlDODUyUGQvQ3k0T0RRVWg4SXBwbWcwdS9URXd0V2FWQys3NEVMU09jS0ZHQXJqNWJNQ01ETFNQanBYVk5YVmZXWVNjYzNEY2xLeGhFM1hubzhRMnVjRzNzY1ppcUNxbDFGWjBnTGVFWm41azRKY0NwWVZVQkRrcnY3WmJjbzQ0VGlSZE9kR3NQOVFZU1ZOcVEzMVB0aDhPTnBzb05aNmxoOXVqcXV2ZlJYbmxDb1hQU2VXWFhPUHUvNnFxQmd6cXJoc0VRcGk0cDl4QVNHT21NVFVsQ2xYZHN0ZlVxcVhSdDRlc2xBcWxtSW1vc0I3NEQxVzlQaHpDamwrckszVFpKbXZQTzZlUERPMVh1Ujk5V3FvRWdEOHFJYkFkamdTZ0c4cEM4WG9uWm1XZlZvSjdaZEhGUlBKdk9Bd0hwS0t4Znc0Tmdjd3hxMmY2VHZ5bHJXN2pTVGxab29JT3M4eXF3UjhUSVdPNGVlYTZMck53a1FMdmkweFRMRFpHa242cmw2Ry9FNjdwR0JwSEkzODgrQ3BKdmZxSWFOZm9sWW9SVTJFczZYYnlhVTNxUzltOFdmd2QvUjRneDR3M3prc2xySngrY1M0ZkJ3emt1MzZkUXpJUG1JOW8vYWJmYWpTSmlodzdvc2s5QmdhTEl2SVpyV3daSjIwZlhsajA5U2lDWFdqTnlYM2J0Z2FYMzlCbG1HRGVZMWtLMWNoQ1BObVNITjhxekh6b1V2YTZyc280cHQyT3czMjU3VFNxZzI5MVJVSDNFMGsxL0x4VkJESnhrUklCVEk2QUlwVzlGeUZaOHp5bVBZajNZZ1loRkdReExWRTR5SHZpMmlLbkNXODVWMGduYmpDMytGRDF5REJKeHFQZVhKVHpPa0ZyMk1XL0xaT2luN255d01yQUhmaVpGbGVjNld4QytHRjV4dzVLWUJ5R2cxWWsrN1VENVhUWnZkZ1cwZ3R2UmR5OXBZTEE3ZytURjVmbW5raXVRV0dVMFoySUdCaGt2cjc2OWo4L3dxSXFjbnJ6UC9LdG5MT3NnZHRJRlgrQWlJN0VKR284dmlPSkZSRnR3QjIxQldNYmFINzRtVDhsS0NlSnBWTno3RktLZXFzcTR0eWFJODRoRlczSUkxQjlWZVJwSWtjaDNUQUFvWURrdlNXSTI0NGNoUFRMNlh2RytaZG1BYzQ5ZDYvbldrdGJ6L1FYVFhESGJPeFhZSDJIMENrbnU5SG1VVU1Xd0pOUWhIbERKbkZTbnBvTDhYNC81ZmZlWTBwT0FIbXBaSmlWTGU0WUFEQ0RyMHVNeUhGaWZnbzd2K3ZYeU93Rk9rM1Azbmt4MzJ3ZEZvNU9kSFIzekNZazMyeDdNU1JRZ2VMOVNaMk5FS3NsM0tMNlhpc0NCaGNXV0NJbDhCdUkxYWdhZUVmRjk0MTJxRVByc3M0bmJhYjMxM3NtMSt4RG5MbGdkbEdROEwrY05Sb2QyUHNxbTNJRnNzQWE0c2h3V0h3TTFUQ1ZkUkgwNmFNSjNaR2tEMHdzUnBpWjA0SWVpeGxGZkhZRDg1cjJCUXFHMUg3QllNeVdET0oyaWYzYmxXZjhGb0NRNTdycURZU0RKalBhZVdCL2FkdHYyMG9OWEsyNkc3YWJFY0xHWWM3c0JOc05DMEt6R2JzTVBzNmJyckFkd0ZRVzM3VFM4UzZrb1FFNjd4TGcra3dHRUkzVVZDOW9TakpFZHdxY21reWVhdjFRVHJKa1lkN0Zudjc5T0Z4M0xwUUVlQWF2VWZaaEIxVm45OXdxL2J0TjFhVlhCaDhMS0pNYXd1K0lDSkszRDNXV0dDQmttVVRURzJzSzJVT3NyN1psOUxoNk1VSWxrWjdQczA5TExNWFJZZk1VdFRiUWVjU3pFT0JTTGsxVHQ2cnhlSEVuRzlwQWgrNzZRVDZxV2piZjI2VnRtWjM1eHRtd2p0TWZUZm9qRHIyNXFKdmFHL3RZRHpqWEhsZUlPWE9uUEllN1E0aGp3UDRtVkhadDdmOUg2WDVXZHBmVUxSZkxzWk1IT2ZTL0kwTGxRVjlIUXIyR2NuVFZBRG14WmhwZ1NyOXcvbVV6dldjQ241dGxzV2dJNVNXQWNkL1hjUE1nR1Rwd24rMk45MWhwS25UY1dMZG9MSzdwMlVMdGhOZTFCYS9WR2NJZjJmbWxLaFN2cytGR3pjWHRYaFlmT0dJK3RBMlBZTkFRcEFVZkhHZ0x3cE05UGthZTBaN0tDVmhuZUZLV3o3KzVzcGJBSVpZZFJuZ0R2SEZJT3FPZXNzRXVBQTNlN290b1BpaG82N2l1Q2srYVc1MUtJMlVka0o2TGxoRVpKME01cWdJWHcxWXM3VnA4NkdsZEptaGlNMjBWc2w4c2dTdGZNZENsMXhnMXlrRUdFRXFEMktnSnBhOHBKU3BQc1gza2U4bUxCRXdoZ1JPOHVUejQzUTdGdkV5UGJSV0ErTWlEbFNDbjhqcW1nUE5ZR29iU1FOVWs1bmRIOUdrdTJwVW1hbndvR1VkT1NyaG5YMlo0dSt6dnJzTzhEYkczYThuOElGNEkzRkUyWDAzU0c0MTV3clFmelhDTXQ5TWJNZlJNSEJnSzd3UWpUeit6QjVZM3dXV2xISnJsTk14RERZQnpXSTdEcS9WM1hBM1puMVFhRnM2Vk4vWTgrYytOYzFkTENQaXA3MnIrU2xoQjQ4OUVJRWoxVG9TYWhKSGJ4NmVPb25aRXUwY3JZcnpWUXhSK1U0NDE5ZXFmMXJmcmNxT3pNdjJ3SW1EWmo1anFQR0Y4TU8xTWp5SkxaZmhYOWk2Ni9LRkdwbU1SbUFkSWJtMERwSTNOVVNod2Y2endNNnNRVkFQRkh6K0pwMmJtSi95Z3c4Z2pXOG9UdXNxUWM1VzVTTHFFeG04UWxNQTI3cncrMzlFYjg0N0RGUE5hMzd0enJzRHNJWHB1R3RxQUFmaGo0OFBUZCtwVVlkQmw1a3hYekpwdzc2YXdwT2EwL2d6b2lpNENZN1FPZjdzZ2o5dU1qN3FLMmxHa1RYMWIyWjlaNXhoanVlaFlldVVzVkJ6eHdVSlloUHBsZmFSUDlkOEE3M1BEOXEwSW13MGY5c3h6OU5yYlFIbnlWdjc1SGRhRklIdytHeGdidWdHOUp2V1FWN3g0ckx2aEczVjdiaGQrSWJZcVJuTDFDWEdIdGY5d0N6RWRYUlZIZStuZGIwWTh4Q2xzOWxNU1F3elpscFVkWEZ5L3ZGQVY3ZllHMnc2NStBbll5WHpiWnNzUnFiNzRlT2xxYWFHaVhzY285c1g3aWFqU1pDZFg3OXBmQnc4QUhsL1RkN0ZJbXUwSGx3MytqNWhkVXppTk5lOFQ0cFRWemEwdW5RMEZsdXRGa3owTlU4elFwZFNBSkNHVERHbmlnbndOQTI5TElXcTdiL0lpZ292U0M4Qk8wcWxjUWoyNVNQaGwrbGpFc3NsZ3VGbkkxM3c4VkdwMW1aRTZPZ1hJRmxva01nMzJ0N0o4Y0pjUXpCSE1UaXRkWE9UY3d5WE81SVF6d05nb0FMbXNWUU02NGhQTzd3b1A0NG01QzJMdEFUNU1sOUpWZkF0UThBVmFKd203VkppbHVEbmhkZGFtbU1vaXlyR1k0YkI2NElENUpRejVNYXp6Nm5nejFibVc0TCtPYzlWdjE5N2VqQnNFY3FmRHg4MzVOZEk2QmpkbU1KK1V3NURKWjgxK1RoQUQ3TnlnSGxMVTVXRTJ6bnhPcGU3bVRaYVl5UWlnL3ZRNjNmTituelV5MldzQkNjUTUrMWp1dDhoSnVjc0Y2a1ZrQkZrSjVqWi8weS9mWTZwWkJUYmQzNjZzaXRaSHZkcHV0KzBsSzBROE5SYWtzd041Zmd1ZkQ5Sk41QldUUmFQSkNDVWpjeU84RnZOTG10UDAyWGhWM3FhVVd2V28xajF2cXBaQm1tSFkyQk1FSFIwU2F3Z2luMzJlcEJpbVppeW41aXpseTJBUUxTczFUbFYvUnhUbmlmT3hyVUtGcVpFRjVXWXZHcjFGWFlCb1VwNmV1aElaazkyVnhNU3JvQlMrZ253Zng5aGpIV3RJcUlXSTNLbkxWRUY1WXQ3SjhmblhxOXlOd0ZqdE0rN3NFcjg1K3lYTjhyWXBpSHp4YVZrNDVHUWxrKytzZkhYZktzRk9BUXplZ2hUQjZFM0R5dHZVQ3NxS0xZTGtweWRueEpqVitIUFhPQXRzWmFTRjVCRWtxcFNSbmxxZDRjanJuaGI3QWRLa1crYXpScGcwcVM5eHgxdU9BL0Z3bVE2ZjF1UFNHWXR2eWw5Q0ViSUdweHp4YVV2ZDY5MDdmT0Frek1QeTc5cmFwMkEwNWFobkMxU2FvT2FKWGY2Tm9hallsVyt6NFZQWmpwVXJKMEYycDlNV24zTVNpSS9VUW5GMjBJNjh0RXFoY2RqUDJldXZIVjVKWXNsdmRIUVprSEZEalpaVzY2aTFoUHQxL0RabjkrR1lHMStEcXM0OWFRSEZIZ2MzUW5mWjA0d3FMOTJGMWwwSkp6bFVtaGxtN3NvL1pTMkQzSmJYQ2t1TXVSeEZTSUxPNjlRRWJJdEUwUHN2MnFkeXVqOGNWaWplRmFJU2l1KzA1em10TDIwckhVL0xvNm5ZeWhoaWJhMjlqeEZ2dVlxZ2xzMkV2VzlBQkFWcUlYNTBqZGVGcDJUY0plakEzOVMrNloyQy9FNlQyaXN4cTNmNG1NUFV0c0ltNDJZblA4YlFKMlFSM1loWE9vSjJNMk4weUp0Z3pYcnc4SzBBNmxHV2RmUDdyeFF3SCtBSVBzUHdIakZQUld5eGY2ZnZCczV2djFoVmZmcmVNb2tqSUhmZFhGL0RMMUpwc29BNGdPcjN2T25uWS84a0prc2ZlRm5nTmFMYXY2aHpaT3F5WENMMU1tYWRIa0lEdU9LcHlPU3paZGRmRVZTajNHY2JjaENuVWxkek8zTWpKZ1VlVXNzc3ZlSzc5M1RyU2dLYTd2VmFFMmdDTTgxRlVUZDlYb2R1VVY1WEFiS1FOVkZLTmtJbzlNUDdaRGZldnZZdUV1RnhUTE1BaTdoN21zVmdjRFJVWld0NWdJYVZpWHNUNkpnL1IvMUM0ZG82UlI5eDJFMmlFeFBsaWxhK0hyQVFCK1FwZHNHVEZUeURjWE55TTFxU2l6TWltWmFJTUd2OGwwSVIyK21RQW5uZnlkWFdlRktLNEZpcmdtVjVJQU9sT1cxcXoyR3ZQSjFISFkxL2lpWnRMeFUzQ1lwem9VLzExTzAwL1prOTRCOE1vV1Rmd0VWakFXUkE2cVdQOHByYkQ0K3dFa3pvVXJTRWZ5K1A4L0tnYWU3L09LL3VmOVJVZVFjeFY5NklMdXIrTVRxVS9vbTJLNCtKcVJPeWtDdXZvTytWeTZGdDNYelJlVXdGamtJR0pwSXRJYmJTYWpjK3dVZm8rSVBjWnhzQUQzLzBFemlNK2IrWWxndEM4eEdIU1NLQ0hRUUVyQTUzVEdKQjl3clZWUE1RbnczVGhYN2JBNEp6UGV3NUJvMGJ4SHQwK3RUV2c1QkpjeFFJUTJhQTJWSW1ldUFJZWxTSFlTQ0ZqM05VY2hCd1gvTkJPYy9YY2wvdzhEQnR0QWQrTzVNY0ZRN1VCTGFmcVFXYzNQekhjNWNkZW5vN3NUQWFiKy91VlRmb25jUEVwYlRlR3lPWkdpN2lIbGwwUStXKzBoY0t2ZHVzQWwwdzMxeDhDVnJEZzQ1bVlzRzJFVUhuL1k1TWl0WW5hWWFPQkFhSlZPUEwxQ0JCNHFpMWpkeklrV0g5RFVoSkJ4L0ZyeFNwSWM5UXdBSmZCT0hYamhOd0FWKzlYbzJiMjJmZXhkeUpsa0duMS8xZ1lwR0oyZWhuRkxZMzREMk16dFNNSzJycVZ2dU1UOWV2N1JvOTZvcUZneWEyUHQrVTZ2M3NJbm5QSVM4dFBmUmE5N2NLZGtUUWl5Y0RIMkRBVUVnMzRROERZRzlrREJwWTVibGhyZEN3TGF2SmV4TDlsczJtcWdOZVJYTkQ4cURlWGt1NFpVemhOS1BCMHZ6SnhzNEhYRmdaalArRW1HL2NGUm5teDZFODExRStzdWpkQ09JcUxBNGJ3QnR5bk1lU09uRWRncElMQTVCT0ZLMjBoZEdWK2JyZkNhY1BwTXB5VkZyV0xZNlpGeGM4ckhvcEhPRVlBQ3hNY0xzeDFMTmVCU2RzTzUwVmlYMjNyZ2NlWUwyajhJN1Fna2NobmxKOTNTZ1dhNS9VbzhWTjBvSTlSeERUdmVFUTlURCthN1o1OVQ2NEl3NVZyQXpLNStJdWJHT3pENm5Cbnk3NWtBZS9YVy9WdVhWU2t6NERReW1vbk1ZQVRQL0VmbVNHdEgxR0ZwbE9KVkgzYkRkUkJhcTM5WGZpNVZQUnFLQzVTQ1ZTVHNKVXZPcEFvRWM1WFBuQnpCY1lIM1FDd1dhdXU4a1ZHQzNlZys0eDYyVVJ5c1hKRnFRajEvS1Y2dWgxdlFiVExLVnNXVzJCY0dWSVM1WVY4Vy90eHlWTmhnV3NkZTNpdWlJeDBWOFVOU3crV0lmK2ZhYUxlcElRQlBzQmtMakJGaTJoNXFDanBBNHU4bFFheUNYTXJiR2dwUkExSE5adEVYZk95R0dSM3Rrb2FCZll3bEM0V21xdEJSQklpcDBTdXhTZDZHUTJQUmw5WXBuU1ROMVNYSDRVYS9vcDRPQ3UvSyttaERQczNCdzVMQ1VkL0I0VU5meWkwMVBCUEQ5K2VNTEIxNU9ZSVBRdy9jbHBzcGRLcEdRNUtUZFZvNzJHNEVTdzBDK2VDNlFHdlVBRis5UCs1TmlKYnJVMloxK1NMSWJpb2VIZE1DT0Z6R3dFL1dMZVFOc010RE5uREhLanBseGFZcHQ3L2wyM2ZEMzJZY0dTVVJwa1EyZGFkeWRxdnJ5VkppMWFQSG1rWWhlUWl4bnZ3VHQ2REdHUUg3emdHVjVUak9rRlZQUzFwTyt0QUd1RUV2WllERFZ6SThpSFA5TjNxVmRyemY2Zm9nTVhyL1BPMllhMlNyUzBwVVZqMkpTK08yNS9pV0NIOGVwTUhwRVI5Q3kvbHN0M2FqOHh0UUhSc2JQZEs5TmdBbk52TUtqdzFRNkRuaEdQVXVSWDkwbjViVmh1SDE5elFGSGhBNjl2cjFDRnJiN1ZCenp1ZDBNMXBDRGtONThYZEpXSUhiN205ckVtaWVUK0JVWVJxNWdnSkR3N1ZWWUI1U1pOL2pNZHEwUUZza0J0Z2lpZVNkUGxrT3NGRHQzdUhOV3NKdXNrSFM5bkQxZWZJNURJZ29BMnVFTGZKRmtpMFIvczhURitNZFRveUo1dkdFQ3VrNzYrOTdvN2FkOWdjeVJYNTF6MGR4RUVwMzhFYzJvRVhYYS9wQ1BPQ0xwNFZTVncwdUEvTXd3N0E0ZjR0aVFYRGhaTC9iZnFIVjdRT0JsK3RzV1RHOE1aODRtSWdsRGg2K2kzOGxwcVljNFd4bzZUanZkUnlnY3hhVzBOVklzL0RzRENSQTROenUrUVVYK3g4N1hUb2ZXZlcxSncyckE3OFRaaFZIMUh5NDdYQyt4OUdYK2VRTlRpRXZkS0lORUhCVU9tcDFNUVhqWjZCR2J5SUhaVjc0cFloSGFzb1NwU2Q2N1JUdmkxNHBaTGNvYSsrYnZacjFvdzZwZ2kyWmM1UmxvbHdFMTNJdE1PWVBudk8yNTN5dGQrS1ZuOVBDb0h3STRHY3hqNHJGVUV3MVZ6WDNYVkJtK29GLytBOWc5N0p2Q3k5WVNXQmFueGkwMHFPY3lsaGpDT1ZyMkJTZkZmQUdXVVJNcEVSTkFINWVMQXMvVGRJM3ZCOWdQSGJDbHFHTmF5ZlY1TVRqMlh2RU5KbzY3ZVJ3cEVGdWJZUHlPdTZDMEtTaC9qYXV3SEJkYkg3ay9DMWFoODg5aEdJcnkvbjRFRkdNZXA5ZmYzRmdZV2loUFFvWkV1UjROeXk5L3JzL0hMNi8xeFNJOUpZdFd0NnZNN3NIV2xNN2xsYTRTTzJIN3FqSTRBZkdFL3NONTZrNC9LZmkrWVNXbXpvUERrQ0huZzRoZ2dUR3JoUDQ3V1RiVVFIdnQwTzJTNVg2WGN3UXJJU1l0UlVrZXZwSTJjTFhoUDRLekc3aDQrT3Bab2x1OHZqa1Qvd3JtTEk2ZDA0ZXkrbjlZWEhaZTUreDB2UmFFYTNoY0lWZ1dZTFVnVkRRMHRVMVRvUVdJOC93dnlrbFpWcE81anBlSk9XSUpUN040T3AvREJWdlJUandvV2szU1VRaDA5RG1SdTRoeGlSQncwRU9JNXJJdUE4ODlMM3BYZ09FaTFiblJOWlVBcFJJN2g3Qm8zYWVPODhYZDM5TDNMREtJclc0b0V2aU00d3ZvM1d6R1p6UlBXYXdnQlFhNGFTSlJHeEZyRENuOFhsUjZFQk9zcC8wNFpsVnBKTC9nYThaNGJrNTF6ZStCbWJKUTNWMVR5WHVKUGZwTTFQZkw1aFpqc01MU3UvVmlkU1E4VW5nTUhtQ2R6Z21HYnJPaUVZcnd4NjZCUEZVUHF4VmFIWkNRVFR3UVZDNnNldE9udjcrY0MwTUswdGFNUGxuZEFMZXRSU2VzV2UxQVRVNWJrbmw2S3FFUWc0eGt0Qk5BYTdZNDloTUExSzZ0QjVkWWIvS0hPdHJoOVJHcFFWOFFRWlVFbzY4b3h5YTk3WjNNWWtUQTd6Sm0zbmNkTXhzazNrV2FJUXJOdURoOWFUcnppZzJEb3ZKZUt0RTBwUWtOSTdFZVBBQ09xWWZqbDhVYWF5Rks2LzFZSG15MDhiU0MxSUFMclp0Q2g2L0VrUktiMndScWtIOTlSL0toUUtlSzRGZzFkWlYwb3dmOUZYU3BzTVY1b1pQUnBhbVFzbWwzOHNSZmlCTGc0WTFCQy9sREh2ekFSdmxMRStuSkt3eUZPRDdpcHhKaG03SGRrald4eXlwSnV4d1hPdWFlK2VaR200NWV3SGc0TFI1M043ZGdmbUUyWUJXQ3hielRTSE1YKzVkWW16Y1hMVTZIVUkyaDY4SGlvNmhUMy8xZVN6b2JIYzZZU0ZYRk05SEtKTmtra0ltM3IrVGdLckVHSlB0bjZ6NDhSckF0bmFId3lEOTR3alNKK3RBQTZHa29hWXFZaFY5WTZDNno4YzEzNDdRZkYxZkZBQmU4WjNCaHJwak5wYmlPQmRrb1A4UjVmS2RGcDNJSzBTUzNEU2JnTDIwYVpya1doS1dVYnZramRHUTNvL0RTelZuM0lBd0NNY2xjenFrRmVEejd4SzZGOGk2V0tETVhhSW12VUwxcUZzdkN5RW5PVFJHNHRPdjJRWlZyMDZYL09SUEZqUWdkV25oVnI5SkRldVVMS2tYc1JVaHZTK2xpeTBMYURxR3A0Wjk0WnZtOGtreFpQWnB0MTlEK2I5c3ArazBLenUzaVJyUDBvMnZnNDQzeWw4NytEbTM1QzF2MTNhakhaUjhFRXkrLzArSkRoQWpFdVdMbW03ZFhQQWgrcDJmd2FHaTF0NmhEeFp2TTJ1WFVieG0ydzVUUjY3VTdGSitmUFZHYTRleFhsenhQRDdsc0RHc01WczFuMFhsV1RpTi9sRUJLdlpUSHJmMCtzU05uN3F1SUZJeXRXZVFaRERQQWlKK0ZWTi9ySmFUSnRRQ0o2VlJvOXg3YmhlekRKMWNQT1MzZVlnRnJmcWttTjBhVUQwNHFRZUtNelptT24wdmNTY0tNYVM2Q3ZlQm50OHI5MTFQWkMxTEpZOW54emNONUg1eWhPSGI0eXRYQ1dndE1hbUFvd0huK1UvOEtqMVBOSHBjWjh3QVZEMnJnRlM4bWZVUmduRStQcjMvaE5Rd0hPVm91cG5qRmlPSGVCWjVWd2pjSmFnYkkwRU4rUVM4QUx4VWpESS9EMC9GMW9ENWF6WmNVN25CdTNORU9DeTFQZkl2UUpyK2NzTnlsN05lVW1CRUtaVHJQYUJZU28rK21taEdUYjZxdVhUV1pUdC9paEh1bEEyVFd0ZmxYRDZBR1NmaVpIekgxdUFMMTBTV2FJajdxS0pQSUdVQkRWM084dTV2aEtUQkl5Z3V5V0hLdEkwSFZHTHp2cXNiZ2FIdlZqdWdFRHdUdWRPNTBmN05GTWJqN0FTZkVUSGNicTNuY1V6UFpvWTZEdjA0ZklnNmhmcnFreUxxS0hWbE9DS3cyeGlRZDcvWGhqNTVBTkFzOWQ2NE5wblV1K2Z0a1pXVEYxWVhMUlVVcHdIMkZMUkxWZW1BMWYyZlRFWUdrVTRySnkvbmtxaVg3cnp2NmJnV0pUaDg2dHAyL3hCZ3ZvYS9mM2c0UWdlbmQ3R0RDVVBNYmQwcmRnT1NqZzlQb2hNNEYrT2RxamdST3lSNjZydkMrazlZbkV3YVFZeWVJU01DczZVYkdZR0VQMWE1RlF3cmhTWGQwdk4xejlvWTkrZ24vSDlwVzMzZDd4NEl2Mk5ZbThCdHhxWTd4anRjRHZTUGJLMlFHSjBnRmlqZzVYanE3TDltbEoyZGtqTTdmMGVFaVQ1L3RILzNlaWN6MXlzb0hTc1NuRCs1dWN5WHdPYmp6c1RIeE5zWXB6WXNBbXZlVVV4WVNKaWJtRjNjZ3RrV3drMUtzT0VRZllhc1RMMlNpT2pWNnhvWTBvcDRXOW1zYy9HOERWaWZ2SHAwN0dEWElDMWFVOWMwRjRPR2NLZlFvLzQ3MEs5T2ZmWWdQK2Zhb3lTK2s2ZjJERDUyQUxURUQzNTBlajZsTHQ2NGpkdmtOaENsUWtoZ0JZK2F6U1pQa1RlNXozYXplK2IxcVhaUmRUaXEveWFPTEl1N1JpWk5zUGlYUVlzalpHTWJnSUFOZ1FuVjZpOExHQmc0TTIzQm1DbkN2S0ozeHpycUxhV3BmVERYaFJuL1RLSlR1ZlBMWmc5OVIzZnBGSmtPN2kyZzZXS1BWd0RkOU5YWktSVkNLblU0ZzVPeVBodzByWGdqUVdLOUNCcUVvMEtxYmlhdUYrNktHWXVuTUdTTUNHWng2a2Z5L3B5eW02aUFQZjJtZXBGYXlZZXdBNHVnZGNGaDlzZktMVk05UUFYRHBrc3lmdzQzM3orWGExWFpoRnNOV3F2Zk1NcGh6NnFlR3FYUWpPZ3BpM0NIQ3lUZkh6eHRzaDNnSkVGZXN5T1dNWWNkdHVoM1R6YkxlQ0RRNThncFpXZWFTS1h2eDZsTENzUjJqNFAxRjl0ZVBDc0M2N1lqdEtRQnNhRGZ3U0pSUExPN1pNTnNmRzFlbHdjUVJXKzgrMW0rM2Q1Qy80OUJDWGhtQi9vaGYzUmFrY0FRVnVkSG9jTWpEUitPTHhkeDlJbU9tUVRMTHhNWkRwVkxabG9OakhBdnIycTFIZHNkVGFBbzZ3NHZhUDFveDFXRVpSWW8vci9YRWkzSWNIVEpGVXdQcCtLby9WdHhHczN5ZnpDWGduRm0yUE1DZHpvUWVtcUtMSmVWbnRqZWhRM2VFT2xtM0EyYU1kbjluZXVEVmVPb283UEJTQXlWakVHZWpQdWY0WVNGckx3dVhubEVDU04walVqeDBRT24ya3Z4dXFzZWVmV0Z2UHQ1VGNBMGZMVjluL3ZvZmxwQWpBUk1yOGxTdWZrT0RPT3BJcWZaUmhtUFY5YTcwYUxEQlFneHhHai9mMDBTSXNnUjJLWjM1ZUZJNDVFOHc4K0tBOHh4cGE1ODZpM25VZGJ5c2c3eThFZENlUW9sZVo2QnFDV05TYzRFY0h2QVIxUks5eGxRYjRBM3dxZW50cEVDVUE4UTBycHRPY3NMU1d1V29jUHZFRlJmR0ZDWFMvaFczRXV6dktQanFnUlZhMDVxby90VVdmczJwa2FsM085SnpiWmx0TmI0WXFUNHg0RHBSUmZRcnJXYlI1Z0VsWDBxd2huZUl6TTFPTVplT3VBKzBOc3ZNYUFYNmJacUdzU2xBNHpQSWh5R2FvQS9PYk9UUmNaV0JzOU5JQlNCbWlFTHRBNWhIS2ZDZVdJYlo2bWxIRUswN1BCUGhxd3R0VTVmWXNmUUtmYWNmQ3d6NXFzZC9PUWV4U1pkVXZRWWJ6S2VkZmhNUTJPNEtNSk80aVJ6M2IrbFo4ZzlzK2dpb2VJMEdNWWtKQjJ5Q3QydnBlRkJrbEpuY3h3STJ4bkc0VHFCNGltMEo4YS90SGxMQ2xWYkdyTGdKWkg2aDhpSFV3R0V0cFJ5VlhyUWo3MTlKUWZvRFl3Y1YzWjFMRUZrKzhkakJWa2lqSFNQUHlQVTcxUHRKVHQ2RFlJZDA5UGdoeGZURjkrMVpqelVOTEU4aHNwU3duaGN6YXZSUHFaQkJZSk02ZHVpMytaaCtYc2RjY0pBTy9iVE1pOVZ4TkNLc1dVVWQrSmZ0ZTJmV00vbDFRR1h3ajRyQWRjSmIwb0V5TmpaN2YxN2paN3B2bTg2cDlZVnNZL01EVlFPZHBSOVFLZWFVSUFuQW1EaFQ1cm9tVnBqWDZWbmt3S0NOVFdFQlZIaGxLSHptZXhUbXY5dmZXaE9sQ3FWVmRQTTFZVjRVVlJ0RW1tZ3BvVU9seDFxWGpYQUNjTDR1SURLV3pScmtVcFJDMkZtUW9FWW91YUpyeFhURHZ0bWNZTmVralZkTTA5N09UclIxWlZTVXlady9aRkhXeDgxR2xuN090SlN0NVFPN2NvZzREeE5FRksyMm5oYldZWlRvcjh4dTJycmk4aExpMGtuZmJRMkI2ZFdLWndpQlZ2VWhNZ1dCakRzQUw4STZNOVpGbmw4Y1BZMk52dnMvUVphUWlZN3N6NTNlM1dod2xVblR0Z2JaZ01LZEVCeUtsUUVGYjZFM1JZQVhlb3BCU2wwNG9oMW9yOVB6QjJCR1RsekUvdUY2ZktndGlzeVY4WERobFRQUk14bEwwVmZhTlNreW1JYVcrK3hzME94Ym1mci9jTExCaEw1OEo3Q0hhcTdIa0V4cnNEN0swRVBHL2JGc0prYVA1ejArS0ZZeE1KbzY2eC80WVJNeStRWjBJWkxjTlpwc2gvNEgzRlIyWW4wWjJ6a2ZXcVYrcHl4ZnRlOURHaHBGSXBGL2lGOTV1TW1kNFk2c1Vlc3cvcU5zcjl6TmZQYTBicXNMRWZnSlJ1ZUUwd3ZOYkVDMzlUbUpvM1NhczhmWEhwVzZudjBVS25sSnFSOS9aNWNRbXp6ditzWFlNVnpxRzVXeWJRQkdzcmdzVjlhbXBsQVFFSmtORGFlWlVyMnN4cmxKc00renJZeUUwMVdZL0ppZjJUa1hyTmN5THYra3c0SGlGNEt1REpBd2gvQlp1cnNZeVVPZnlMM2xrMDg3cFIzVFJZN045MHBoa1VGdnBWVFVkVlN5ekZUcFVDUUM1TU5TZWpMQ09qMW42NkVyOEF4YUJJWWdLNjlPZ1FxVC84ZVo0NWJkS3dCcm9sRXNzaUZNWktscGVxV0VkSk82T2RxUzd6ZTNqSndxZmYraHFwQ0E0MTV6ZnZ4cmpMdUR2aVcveVIzV3FnZXUvVU94U0hZWmY4dXBodTJwUE1wZWRkK3p3bVdpMlB6V201MndON0FubXZldHFoZEdIMFp1MlQ5clY0ZXIzTkZqMG5qQXBOVElxZnpveG03dkFDcURNa2FwcExYblpsdUltMURkK3hTRVNZU0N3YzFHalhLNHB4UDgyaUt6cFYrb3V1dlZJSXpvWjZRbmhhb3VTRkFIMlVHNzZYUkhLM0JsMytLV0RLMmNUTHR5WnFIQXZxaWtDVzJOUDhPMkF6L1MrSlE4NE95L0pjVXk1UG9OK0o1NmpMS1gzaVJtVjhiT3BZNHZKN0lPbitBWkcvNjNTV3puazU2KzBmNkpEeHJDT2thUlNVck1GT2hleVJaR1Y5STlZaXZ4d2xma0d1ek9yZW9YUUhiNDROMWFNNWVBNjNsK1RqQWxWNUcvdGRFTHhlMWdobDhPMzRWTnE1bmdJTHQ5ekJWVHJMSFBjL1pZSWJlcEFmaWdjamFFRllDcmdBNDlpOUlDZHFGUFg1dCt2S0lWbHBDTUpBUkl6K0NwcFlLWG9KOWovOFhFVXAzKzNWVG5Na0E3S25IcW94MjdCbEptNlVhbStFYm00aTRDQWpqMlZTRE1kV3lxa0p3dTlURDRUUDU5VzR0L1ZUZFJjVWltSEtzbnE4TmEvZ0FkejVmWHNoYUx3dUxJSTdZOTZHMWdwWnBMU2FFdTZrZTFBTGxEM1ZOMjlPNUV5MWxSOWswR2ZlZWtkWWtXd1BULzRoanJtSjN4Ri9pNlR4d2RoSkJaUDRYaUhBelBOMEZ3Mm4vR2dtTTd6cjJCTVZQNVVKcTJHSlptZUExUmlXZi9wektUdCtPOVpZNnRwNmg2TU04Z05SZ3hRZGFKaGtKTmZYNHV0MUc1dlVJVFV4OTNkSzZ5M0FZcSs0bkJwV01tVHlxQldGSUlxQzd6dEF1OW54OEJ4US9hVyszTVFIR2RyR3QyRUNsOW5BZ1ZVWVRrSXdXWGxEQXR5ZVpweFcrTkwyOEtBNWpTY3JLbUdBRUZ4UXRqdGViUVZwQmlQcVcwYitOaFBGdUZJdzJZQkFsWEdXZFNJN3ZVOFZySWw0MUo3eUU5bFNTK2dDaS9GMHFQaWVXK29jSngrUGtGWE0vT3JCOTFOQUE5YmpqNjBlcHBweVRRRzQya2FJTlViL1lsZmptdSt2TC94RVdtSXlRWTFKdHlzZkUwdnAyV285WEl0eWFBZDhKZkNpS1JOOFlFRWdxUlhEblNhMmJ5YXF6Nlk2SlNDc2luRHdwMVJYbGFnekpoOTY5ZFNYb3h1aCszNXlvTlpQeEdodFp3Q2Mzd3dWZE43MXYra0pCL0twYm1BUTZxOHBqVXQwOUUremhWWU9OZWZwNnl5aUdXUzVJVTc1WStvT00wUWM5SCtNc1EwaEFVNTVaOUs0VUdRTzd6NDJyUjJpemYrZFFkb2JDc3FjRWhhcXZwemprNG1HQ1ZrN3daM3UyM3RrUXFhTzlVY042WSs1N3Y0ME1wZDliTk50N0JNMDNkM2ZtWTJCSTRCdTM0SDkxcWxlQi9aeVVIVWxoRWpubU9SZFVtaWpvNmh1a3JsY0djUWNDN1FzLzllcmVRZzNtWSs2YXpzcU15aXcrTTJJL200aHBGMU55R1Y2VGM1dUlwVkcvczN6OFNxSWJseGVKclNjOTI0NkhUcGFPMEVFRGdRSnFPZFpEUmt2VUZnVTgwdzVRdVRCSWFGeW1SNS8vZUVCSkIvME82MHJmcXBCclZLSHlYY3VGWk8ydXFTMnYrTHFOYThaZ2ZxYnRWOWJ1SlJXSnlrTzczWGFYbHU3L1Byek14V0d5bE5PR3YxN2RleUc0dUwrbG53M3NNazZPS0JYR3VUY2hCcWFIL2NIcXE1NkZaY3hheVJDVjJQOEl6cVJUUGtuTSttYXBmTTRsU1lsRUlRMk5pNmYwQisrQkY0bzhlQnB4VXExSXZaaXRJclZMZnZNaVdIL3R1dVBoRlFlOFNIYlM4c2hlMmQ2cTFXRUtpYk9MSllzUjE2eTR0eVNJQUNNQmJJRU5Yb0t4R1lFWnpIZEtOeVFUS1BrdHJqRE05Yk9vWUw4RVlOYUdiMzFocEtZc1FzQ2pUY2crbThRVEpueWJsUG9rT05Wc3hzcEpNMDZJZ3VZcHJQbDhYdWdScW9SREdGeE4rSGJiODN1YmtIYmNVWjhuRmtTNUpvcDBYY1BqRDFJaTB2VDUrakI3Q2pIQTBOc0NxL0pyN0ZrNlRaTUhreUY3N3dxVS9BOFlkbjBHTFcxWWc4WUVPUEFFdGR5a0xpSWJKQjZ0UGVlVVZrU3dTQ3N3QnZTY0dkYk1tSW1lbnE1MHE2M3BkK2ZTc2lidlgyd1ZKUU1neDhSYUZpYWoxcGlHYUxDS0Yyb3BiR2FTbmkzQnlVaFlnNncyV0U1cWZVaUJ6OHpBeXlMTjJJbWs4L2xZZzNWK1JxY2YxL0p1UHZWL0tsd2g1a0JBbUxUWjBycFVEZExKNlNDS3JvTEJOQ2VmQzJXdW9CSCtFSDVhOEExREdxZERsaDZEdG01dHhTQkZvUkNCdElLRUJIY29zN3lWNzVoSEE1dzBpUXIrNFdiejl4NHhwQkZQNFlmWERvV2FRQTdrQk1oaWtFckxCVVR5UTFlTVZNQzVJNnV0aWNPUHVYVW0waWlJUzJRaVU0WGlSVXFxRmJaR1JybU1iWnBXSDhXQWQyZldmdWVWRDRzcWxkMFRoa096SWtoc3QreS83S1owaWVzWkJrN0ZhNVA2dk5jSnkydDVpK2N3cXlKUXpVYTMzRUlnMEVzSDRQRXIycVdqNHk1MTRWRlVqQnlJSVpWZWc0SE9qS1N0VUNsWlhmakppZTFDSUZPN0ljbDFEcWcrNEhjT3BZbDdMSUt0OGtuazJLeHM5ZFdReDJSS0lpWTlxQlpkN3BoQklrNnBGb3VoekZBeXpPbkZsSEErblR4ZElKeUZlZW5ETDgvVmtjS1JhWlgvQnpMMDI2eU94dStEdHJmVjQ1bG1zTG9ob3VHS0tia3FyYXRDWmk4NlpFa3BpYkQ5TVU3Znh5Nk9ucllxVlVxTDg0dkVQM1FXU1ArSUtRbjc4alcvRzJjNTduTnFUVVZ3WHNWY3YzcXYvWitKY1dHTmE4SW93K3Vpc1BTSEdDTGI4cGQ4ZDlFa2VzLzJqanJqYlA0WmVnc0RLazU0SE95QzhvaDBpdG42L2xpKys3WmNkOVpVRGpxZ0dwUGVDRnNlT3c0cjV6SVFMbWxqSndpenVpQmpuK0RnVTVwYjBOYWdPSDFVdW1pL3dKbWJqZjVzaFM4OTluUkNsOFF2OUhjZjNWbEJJSHFNVUo0OHFGcVBDcW1leGkwQWdJTVFEeWlFSGN2ajZWUWJqRG0zeUJ6dU9nV0hUZUhLQVdTSVo4ZTFPdkNIdmRhVnpPbFBIR2dnNE5KTGVKRjY0MkNtL3p5RWVwZ2VERVIyeDZRQXQ0WWZOdTh5djF4bjdVcDBSczZBaitnRXJHeFVldy9scy9EaGpmWExqcTVJOHZ0cXo0UTdWbW5VVVJaOVU5cElPWnZNMW5DQ3luaC9MdU9nNVlMTldabVBtajZvSEpUZVpiZjhyN01OWVJyMzJYY3JFUHFUNjVOMlVBVnZkRFRwSjBySGV2b1hqYVozcWgweXhMTVB3MG54RVFqV2dvS1Fla0pzdDI0TFRpZzg3TGFDZHEyUzVadzFqQmxnOHgzcDFOVld3V0lLa01mbEFvQ3Vib3hEdHdSWENkaThwNUc4SURKTzRObTJxc3RnUGZjMG52T3plNlNCakZRUllxMGpuaTR5TVlNMmJOaHgvT0FOY0FZYmplWkxVek1QQk9Pby9NdkNjN0JuTUVDZ0FXbjR0SVJGdEY4MHVncENvdDl6b3BVSVpCU2VPNWFvalBrMnJDd0JLdW01cWZFZFhNekI5TU5zTUU1MWJDS0x6U3lEWjVpRHIzTGxTc3hUenAzZWNZcW4venNzUlBGVnBsYmVDU05YR29CZGRvOCszVUxJQS85Mm9Mdm4vbEhUdk5uYzlaaTVrM1JMWmo2empGUG9jNkdLZkxWRHo4VFJyY3JDUWM0SWQxRThyOUVxTzRMaWRwdEg4L29ubnQ3L0JzM3pIZ2lyMGptNkZWUkMzWTVFcFhqYUF4YkhkUlFuYTZrVTJpTmVTNWd5U0Y3QXF0OENjU1dNanRqL0xmSk1QTHBCZ2FoSGRIUmw0c1Q0L2JMK2w5YTlGUmxEc0pnS3VIeVZ2b1VldUEyaWQ3bmt1STBCT1JwTStlN1IybExLUnU2ZEkxTnFLT3FVUUZYQmFsb2NkRHBNOXhaaVB0eVBJd0RZa2E4M01FcFNsajhLWDllS2llMmlWMHBUd2RGNVhOT04xWVVJc091dkIydEN3UVNtengwUFFuMGlQSG04UjJKSHd0KzYxL1U2dUQxRktucXhxdGttN3g1ajAxZkJibTIwUTZCSFQxZC9LMWl3dWR5N1JBd1NENHIzd1BDR0FCZW8rTnQ1dGRLcis5cGEyVk5GZmZLV0lidGZhRnJtQzNGVDZMb05DSzJDbFFLbmlYRzZTMUFDUUh4dWlza3RhSUcycEIzUjhkZWVNL09mM01GYlpDeHAxa2p5Zzd1Zm9PUnh1ZEJIS3krNlZQc1VsQzljdE5mdEJEaFJnOEQ1TTVKS0tHWXFURjJRVFhDZ3FBY3AxTTM1ZXdKaFIxanNTWXBPQjk5ZjZwa1A5TUs0K1pKSEp1T3NZNW5PUTBQVi9DVkFORFR6Yy9vZk11ajVIQllOVk5aOXRPL0txRCtwNXMzL01nOUJnTEJQTVlGNWNxTkVSMFpxOUlSbE5QTUk3bUNLcXowWFMySWlNVjBsY3JCVlpyWnhqZXhSSEtZQmxxOUZYeGh2b1J3TnN2UXJJV0FuV1I3akQzQTZBSklOY1BIM05FY2NEQTY3SnVnY2ZCM2tYdGU2aDFsc3lON2ROKzVCRGZhbVNuMVBJM0FWeFc2c0JnVWdJNG0xb2hRNFVrV1ArSUJURWh6NXR4WS9jeFZjVW84WVErT05welQyUzk3VDgwYUZvWnpqV2pDL2Vld3NxbzExMkE2K1l2QldYdGc4UnVTUEZ4SUNXa2ZmMXFTeFArb2FnWEVpWTVreDJBWDlENVAzMGpRMHNocGJKc2xyNUIrRkRPQmJxcm9JdTY3MTQ0WkpZdXpaN1dveE53Vi95UGRsaWJ4ejZHTzNkektVVnVDTDVCbFVJUmoyQ0RmNzZyUWNkOUVsWUtvWmJmOVJ6UWg3bC9KM1hDRVNWaE1iMW83V1BTakNKYzVNbldzdlhTbGNuZ0VCakZ3MFAzbVNsNnNHYnFWcmFnWHczOXVtbkxOblYzTWU1UG1GOW8wWWNsL0VTSjFucHdHM3Vka20zcHl6d3BjNFkwaWZva2NBc0xGTTdrUXppRTFNNHVNMFhjSTVheTVCekorUDRRRGJlOUMrTm5vTVZiZldFc2tDaUJnNlpUdi9aWHBIeElMZElZMjdSV080T0xYWU1lWXB1Nmt4RGJ3dEZiWUNJRWJlUFgvTkZpV0o1VmJKbTlRa24zY0tKRUpqb0RmNEcwaUE5YlNPcWdTaEl1WUgrZzhDSnRReGRtUGJnaEdmOUJIeVRDTWUwa2d3T1JVMy9JYVJDZGRPMlFocDNMV2RFT2VWY05tdzFZOXhQOFZlUGVMK1RXSS9zL1JmN3hrTW8yNjJYWVNGUFJkQmU0UlNFLzZiUStXV24vcnU1K2t6Q21hNjR3VlJhSEYxN1FCelJocEMwK3dnRmZLcFZHaXBWMTFoQmRSZ2xMdnBFdnlMOVBvN0tuRDlWaUdxSk9sdWh5enhDNkgxeEhDYVlWbzMzNFhyRnlXQzNXcnJYdVQ5OHZTUGNiNjhrM1l3SnB1YTlLODg2bDhiN2JPcEpuM3N5aWE4VnVwQldycXZDa2NrcDcvYVRlUVhQK1lNQjNWbFdmTEVRV2EyekIwZFdVUVRydDlCODZucjE0ZStEcUI2bEJmL2FFeExhTmZlQVlYaE9UWk9QWGlXYzdvVW5Rck14RTR0Y28xa3AwNW8wemI1SUdJK2w3SG1xbTYwNFZpYkJSL2dva094NWt0dkZPMG5PUXYxMXI3MGxyS3prOXVxUlFRSDBGLzI1NEZyVUxRUWpXbHBVa3RjaEdGbkZsVmtONVZsQ0pDMzJFSEUyOXBjQVc0T01ncHZoWHlKQ1BRYm9XL1B0ZUNYNmpIT09mOUIxL1M0M202d1ZZUGFlNzM2QUlxS1dCbU13blBSaUhrOG5Ed1NvV0krVDVMaHN2TkRCRnJpTkJOUFJISVRmQm5QZ2ozMXRrSVNTTldWOGFjN3A0V2R2VmxlYVU5Nm5zN1dXVHNoSktjYWZpakZMcEt2TURuSjM0UE9qWDR3NEhwV0tCZDJvdWxkL2J1Z001dFVxaE03djRmdVJtbzBVcjRyNEc0eUVKQkV4bmNHTDU0VGlJQTJxOFRUbEI2dEMyM2RjZUtramp4RmdZdjNKcE1lTUdRUHV3NzE2T1NxNVFYZG1HUWxuU0pqVXhGVks3ZzFyLzFEbjMxTG5pVkZHMEhBTEgrL0tQU1NiSWRtenY3Wktvb29SK0xtSGRSRGlBdzNFc3RNdXd4VVpnSDlRRnF5bW5oelFsRVM0L00zT3JGanVvd2hrRXdqVENvd0NvY1ZEa0FCQit6MjVqSUdROUpQZkZoTEkwNmhLQWNvMFc3MUZLRlZDaS9pOGpnRDU0aE04a2tycTg3L0trRzJCQUNjb01CUEpHSngwL3c2ell2eS9MeE9MNHJlOFl3N2Y5YmhvUk5YR3kyMnM2QXZEZUMxZTJ6SDczb05XMUQzUTdaODJWVlFwWjdHM2pLQWRjL1ByVVFGNmtVYVB2Sm9RejBoWmRNTDU3aWxtVWordmN4UUkwOHZFblZ3U3B5Wjl5SjBFTkhwMWN3SmFxN2hCRTJRN0NIQVlqQkd0b3dkVFd4dEl5N0RjTlMzVFNJdnBLc1JGV2NtYnovOUdLQ1pWY3NMTGNEUXM3WEp1Y2V5bnR4WW95YUNIN0IrYS8yVjB1RlAzTm9lQ2RVNFFsWDFmYmZ2SDVyRlJiV0k2STFGRERDNWFjalFIUURmUnV4VnF1WFlIN2dWUWpVVVBITUxRYVUrUVplSjBXcHAzOERtV3JscXVOQ1NoT05YTEl4bjRIRjNXTTA2NWJoMkpQTFoxbC9oMzg1T1A2MXRwb1FRd0tFOHltZW5mVE9YMWtJM1Y4d2xEZVMzU21sTWoxaXNQblowaldZS3F3Tnh5bGYxdUFUcmZtUjl0L3hUaVNNdlRSUWhQcnZkY01zYVFGQkdKbmJ6eHdYcFVibnQ3WUNrWVNXWkczM0R2SEs1WExIOVNhYW50NlJacTc0c2owN2xER1grb2ZuVEpJMTZNalVxbjhNSVFmRXNMTEs4YmF6RTBvZTA0WnVITHVDcDFzempTaTZHWEZpTStRTGNMWnZhTkc3eit4VHBOM21sOGIxOHRwZ0c5aVphT1pBeEF4UFRuVHpHbzc5aVNhMjkxdHFyaEd3c2tBNGt5cGUvOG1kdUNHS2JwdGhYR2dSOUpuS0tpeDVCWDNZU2FsdEFhWW1Kc04yMmFOVDFBOEVZL1YzeFp2MXVNc2cyN2RJa0NJb25rTEg2K0JYSEtPYVMvU2JZZW9rUG1va2JHZythcXBHcnBSaDN1R1dUREJ6ejBJOTR3NHovV1RiN1RMN3ZpZXVpVER3YjZwbEUzRVBvc0lMZ3ZmNXJSd09senNycXJRa0F4UW9lbDdzbmJKWnl6NjR3dW0zZXZmS0xEc3VnTWpjV01NOTIySGZ2d0VKOGRTZTZTVnArRlphZjhDSHZTYzNTUTFacGlEN2kyUHJjVFNjZUwxYTdpaVZvUmJ5YVNnMUFoV2lqaG1sYkNONzJRYnB2b3BLdERzUUZZWW56V1psR3dPckQ4WVZCekNtcHNuYjBHVjE5NzBTTHR5aXpCdUo0Y09yYjJRdWw5WTMvS0RFL1B4OWk0ZW1vbmZZTGtDMEF5YlZxT3dROS9KL2ZFQTBjTmZLQ2xiSFVOTTRNdktmalBpcWxMTERIOE1wcm9nMGY5WTV4dndsVHlUR2liZ1BLSUt4TlkvcFd2bC9wUXp4VlpYMjFEalNwd2RtaU1TaEt0bWFHVm1IdUxGVndRcGFzcDQveWd6OUhrUUMxZGNsTVdlUU13Y0FwU2Y5c3JXRUdPMzgzMmczb1c1bHNnVUhvaFlzMUpsSjJRYmJZWkpuRnV5K3Q2WTU4djNEbDNNRU9CazVkSmplSjdZYlRNVTZXcjQ1a0hIS3lSSnRQZ1VWUk8xRkwyREdTR2kvSkRXTUYyMERWNlYrY2pQWTVsMVErZStHRjh4dUorbVRGMEVKaTJCYit2Z1UwdEtmaGFaMHNZQmFaR1NFMS8ySEl1YnJEVE9ZeDN4TEwvUVdKNVhjdUY3VGtud2UwVE4zV3BRK2h3cXpvZUlFNCs0aUd4WWMxK2tXYWlCTzE5VEF5WkUxV28yRm1OMHZ0NFJhUTh4bWYvT01mZ1c2SGowZmNLa1RWQUgvWWo5WGdMM3RRcHlFUXg5OU81TVI4WHM4KzB5UDF5Yko3TStxalBRbElpRUh2V3BQaHBYRG44TDlvQXlrZ1ZCMkNOUU1taSsycUY3UUgwUzVRRWZLT2t6MWorM1FkeFVLc01MN0F0WjVtdzNnRnpMVWVPQ0J2TEhEWUd1UGhuc1FnTlhoZmJhcTF4Q3RScWNjSlE4aURsN2ZqWjYyaFlpVVg2bXB5VWdndCtNUXF0K2tYNk1BQTE5SnhBNVBRQjcxeG1DMEpRMTFRZGV3ODRzSlROTUZtcnJhZnJwaTlQU0pnYjgxU3Y0WVZQSU5JRkNaYXY2elo5TU1lUXgrUi9QdkNpVHoyeVZLZmpoYjRvOUxFSEJvZ2RaSlkyenp4VTV6b1YyeTRmNkM2ampkLzdYN2VpeERwR01vKzR4MDFIUGZWQ2hRLy90RXNIUEZxbXhua2FEZGpQVnFnZG5xdUpWTGVWbXBSYzBXcVg0M09XZU5zZVlmaDlxdVZveHVLTFY5V2NxOE15TjB3VmRmUy8zQ24rM1Bid1VobFlYdVprSUJqd1RZeVZjdlBCdkxwQ1ZXd1F4TEYyTzVqU3ZqWEtQdlVQT0pkVldlZWhzL1BWRERTbTVZVmtRMUVGbGVvWDZDanF3YVZ3bFo3ZlY3Y2ZNb3NleHVNSWloNkhwZm4yb0FRK2h5TCtaWVFOYXI2WmgxRGpjY0RNVHFoUlkxZFl2eW1Ndjg5dWs3a0tFNDRqVllST2U0VDVrWU5CSEFPbldBaTF0OGw2OXBFUnZHcVJzVmd2blU0N2UzQ2lqSEdRTUhSRFRqbERZS0NCbFZVajR0TDM4aEE0T05yUE10UXdYc2htTzI1QmhtQ3BZUWE2UlZRS0s2OGdRaVk5bmd5NlJNSzB0elk0Vys2UWYwK1orTkpNSnZRSmMyQjltNE50ZUNwc1RDWkZKVi9aRW9INlhDbFZ4RmVINlJaRzNGOGh2cDJycytNa0lFOHJ1KzE3UXU0R2p6dTYySFlCcFhTMkYvNWZreHZVWG5WZlF5ZnRjVlAzL21iV1B5ejF0QTNyb1dzdmJUWmpoZXg5NTBZd0NtUUVrVUx6U24zUDhnR2haVnZyRm0rYzAzTWhXUmw0YUptbGNHSVlPUnduSWlXOHZIcEFuTVFUWTdub0RIZ3g4Tk02VW1FR1Z0dDdnWS90bTZORzNOQ1Nna00wSUNGQjJxYk9BWURNbGdSSGNCNnIySWdKSTRXbVhrRERmdE1UM0s4M3VVQThtNjVOakoxUktLYy9MK290RndvL1lPakxReHNYc1RxeGFkT3BDTkVhZW5ZVE9jRDNUNDkyUTU3bG16Z24wUVYwcXJPRTh1ZWRWdE9ZOTBENUYyRlp6bTZDVXVkWVIwdWlPdFp2czNHcVkvQ0xFcjdsUWJRMDJJTWNwRXhnc0oxQ25ybnk0TlhJM2pYUWc4aFhhS2dHTm1BMVpRNFdsaFNBT3A1bkc3QkppN0l0ZUxjb0w0eGZKY0trRjJ5aTRJRmFKK2Ftb3ZSYTNNdXVMUzljN09xd2pEQWs1V29hMTBGR0xmNi9uWTVsZ01Gd1pieVB3ZTdnVXFEOWViMEtyWXcrdEhtOGIwMlJFNGlUYS9rU21EU0l0alVJcVlDanNZUkI0b2xMR09mWFFWS2xhQndhYWxuTkIyZ1ZRMFozc0R5d3A3UWpGMmpuZVBoUENXRTV1Rmx2dTJMTC9CaEJlRzI2a0JlWEljMW94djlRRnV2TjJHaG9WM2xmd1VQQkszRTY1Yld2Y0hFZk1taEFxZzhDVkJjT0g5UEkxOEtnUjBkRFFqZUp3b2E2QllMWjhRc1VSOEJ4eXZwb3hpSnYxaFJjWlgyU2FNK0FpYVNKekg5UnhXMi94NUxvVGpYSGlUZm1EVnZvZFM3dXhlWjRldXdzQ1BQNGdQN01HdDkxZ1hvd0x1dy9PYzh6SmhXOE1CUlBFNkZnS1Uzbk5XdFBIdmY3NTdwM2grRDJiK3FVWmtvdm1uQ3RNRDRzMXgyMWs4clhjaVFwbFBMT3hHOGdINTIyRVN1cVZyMkYyZWlPcGM1Ui9IVjIyMmVzM1dsa1pMZmJJTlZFMnYwYXQyeExad1FYWWZKTURlRDBwV1FwQ045U2F5Y0ZVSWQ3bWNSaE8wekNnWkVGOXNDZUgvSEl1RkI2SmtDcUUwT3NpL2lock51b3RBZmY4cmhWVWs5L2xnTzRzSlpjbnljaHpiQUZLT1VZbUozZ2lXalpuRmhJUEdud0d4ckhaeHRyeHR2NlNHeEtJY01hMzE4RXMxVnFqTDZ1cnZ6RkU2a2N0L3phcU5zUnc2YVNzdS8rSWtTOG1jbk9xTzFobHNDYlVINStFcXNDRXJZYlorbTFxdHF2SlVTRWUxWVYrUCtuaEdlNVdxamlXWWwvUmNXQ3d4V3pwOGkya0tQam5Sb2hueFROaFJiQ1YzOGVSczJSeGJUb2JRekt2N2xubGlCUFZGNStSODNKSFh1S1JlbElqQThCeE80TzRGVjhta2QxMjRiSUZyZnBBaXRDWXk3QkQ0Z0pNNjdYY2luN1VIcnlwMm5tb0VaRDlVV1B5elFyM0RpMC9zaUdaenhXMWZObkR1RjhIb3JvMnVvTWhxQVVHMHJKT09YQTVyL2F1eWpvMzcwbWhkWnVnT1RTQ3dZSm1tRVVJMFhpNy8zem9WVGpFUW12MGx3djBXNHFOdnYwa0ozSmxHMmVFZy9wZTk1MllvVjNZb2JaMnRwUGxibGZXekVKYXd0VTNCY1NrUlZlOGJrcGthWVRMUmRSa3RreFM2UVlSUmNNa3ZQWDhHd0R1Ujhjb0gvV2cwdmhpNkh0SmpjTVBzbUVaVFdZU3BzTWxEY1VSOWJLU3ZubDN4Mnh6NUpBZ3ZCVXBNb05vaE51SzNtTys5d0dYY0VkT3hzVmFrRFBhb0RrTC9JTkhjN3JLQmVTdFlHc0w4RnpkMUkybXdQNFdaTk9XQktFNUJiUXVpS3BpYUdIZXhJbjludFI5R3BZaDBuTWMrNHlPaTllSElWQUJ3eTZGVE5TS0RvTVdSZTFXTTNrUWhrTStpb0JXWC9Bd2pUR0srUXBPM0wxUkdUakVkOUdLU1JPWUpUb0UwWGliczE0amJEMTM2dFlJbGdEcWtGUlI1TlZqSHovMHpUelZvRFU4ODlyaTlIeUNRWmpTV3lRRm9CSXdxc212eXdGR2c3cW1penpNTG1TTmVrb3FSNlM0dTFia3F2M1pLZVpRK1VaNHFleGhPaW9xTXlGS1dBRkNGSjA0c0dzbHJqbzNXN1FyUGdreEZldDNhenp0U1JOTkxHejQ4c0hpOE5ZR3kxei9XbEtoMFpMdnhvNmNOVHMybStFV2tVc1FWb0JCNFpoU0NxcTNJZEhHYjJPTjZtSzZwWmsrd1F6cWRNRG9FVjZjdlJiVThoMkdTVUp2N3VpSW1uU3hFdlltVmM3NFd1S3dPY0dYYXNkZ2RBMzFoTkxPdkNKOG5Wam9vTTVXODUyYkV0dHVEckwrWERaNVJnby9QZmN0bDdXS1Z3SktNZUt3SW5pYTFjRDhaRU01YXdRWjlBQjUvNzBrS3MyRW5yYTJSUlJmOVpiT2RNMmdjTjVmWlJSNzJnMjI0SzlCYTBUcEtyL1doWDd3QVRQM3Uvd3FDamJzZkhHWkZ6NWg5cWxhdy9OWjA0bnJrZDJhUGJlbFhVeEdrbGttamQ1QXNGRVJRYkI3a0dhemJKSEZ6VW1rcXZMK3VNRy9Yb2RpaElwaWFnUngxWmIvMnZaQlBudzh0bVIwU2RTekdTTDF0eWdVYWF5ZGV5NEZrYWVDYjl1c2s1QklVSkQrOEhIdU5taXlpK3ExRnFqUnJKcGRmRU9vWmhQTEVMcHRKa3VuWnYxL3JJREdzNzhMVnZCR3d4TDJVL0NsaE90dE5HOGxJOVk2cDdDMzdPdW03TE9GU1oyVitpN0t5L2JHUWYvMjNvclJqQ1hqK1ZtRk80WG4vV2JGSjZDOUZRNVRUcXQvTWZ0SGpOQm9uTEdOVXliOEdhSkJEaXJTaHFRN0NtODBEekxiaVo3em9VYXQ1K2lzeGhPRW8weFkxdlFpTW1PMkJHTHFkM1BLd3Z6RkF5eUYvSzEwWFdKMUZnS3BjVEFFbHYzSCs0TkUvMWZFQ0lmTkUyNUgrQkw4MHRtODYzbDRKZ0Z4azA5TlN4RXlzYVpKT1lkY2lKMUFPK2xQcnRWZzFvckhTdjg3U3N0VHBzN0ljcHpsbXhqQmJvMjdUUGtXZ0UxVWM2b3VPMHVYcFFwSFgybEptQWlvQ2k3b1JEaGZXbXpPWHlxTFFuNXpRRHplbW0zcXl0ZWg2WXB2MGtWSTRBaGROV0t6QlhNQU9kb3pwUnhtTmJMV3lnb0xVSStvMmtNTUJ3djJ6eE5taHdTZTZjaFRxalhjOWpVKzVnZSsvT2o3bDlTTUYvVS81bm9tdmdqNkovWWVGRXhud3hzQTZ6L1ZmR1dIeTlIYWRTZkpLalhGVkorUFFXVUxJTS9pcDM3bElpckJYckdnVDhMSTk2M2xaUE9DT2YxNytQdWF2VzZPY0srWlBPY29zRktRTmMvZ2V1NkFiL2ZaZzRNMzcrZFVuUFBNT09ETEVJcWFSZHNITnVWVnQvTFk3TTVYMlAzU2J5aGpJb3RlZjFnUjJNREZaZGJmVEdEM2JoSmdxekFJWDlPWnZiVmU2MkltWk40SXhsaHAyYTJNNCsveFl1aVpBdktDbXlYeHBpOWY5RDcyYm93bCs4a2prdTgxSG5iZWhMa3dmVFJlbVY4MENQM0FnWktVMklOdzJmT0lnNG14VDIra0cyNzlLK1IrSlZMSG5wc2U5MnVtSVdzWVpvM0d6TENkMXo4SisvY296R3d0U0hwYnluM1ZXL3V0OWlNMndLL1dyWkVBMDgzdGpzVmV5Rm1SUjl1T0tFTzRldkhuREZqaEt6M3Zidm5vUVg4dEMvNmR3cnBqWUQ3OXpRNGJyREJ2U0JSYlVFK3FsWDEzcjVZTVVzcCs4U0JpaGp6SWNPNXpucXgyMTAycVJnQ2pPcDlvb1piWGI1eGUvQmYvMnpiMTNVS21tSEZodHBtSEsrejBEVy9tbnFUMmFsMUhxM0tmVzN4RnVrT0tJcG5HVC9lSGdld2EzWEhScnUwQi9mNG9XMDFzaHJKZXhjcDdzbG1LQTdvWWI0ZTM3dldUVGUvays1bDRSS3p1YVdWZnN0M0JpM3EvOGZTTUxhdWZMWnVFSEZ2R00zWUhBVElWZzVzZ1hpeVhrUVBGbllaejRFekJyT2xzWjRCUTk4MVRKNHc2cHpaTSswcUt5aFpPYW5jUUhZL2grcEcvODlXaWtzZ0ZpR0ZQY0hZTnRaT2dpcUNDSVJSVEdEUXYwWVJaeVp0cmkxYkxyOGRaYXBpVFV3SkNXZFEvb2FsY09NaVdoRC9wbWdkVnMySjhrWFhvT3IrUUR5VnhDVkwwcHlUZnZTdmdvSUxnR1lEQk9yanNSZGs0MWN4TXpuSVNtTCtHR1VvNGQ5TUdURDBPVmZpaUo4c0hNYzh3MDJmUGpWcitFdURoQndHMzZJWHJxYUZWMElKaDV3YloxOXQ1OFlmUkJKVkRrRDZxT1ArU25HSWxSSUFtTzVYMHo2SnRkM084Y28xYysrdHVObUtFS0dvY2lNMlZxdWZDRlNMcE9UMzEvTkg4NjJlNEw5ZG5iYUs4ZG9RbHVEajZaYUhjbkZHYUsvckozM25paVFJdFhXRGE3TmhhcHlVdFYveHhCNXZnVTVWUk10TkFUN2hBM0RtVDlIME9rMU1LdDQrck9qdVk0R0dxaXFWeDIxVXQwT0RhZkNWTHp6T0trckRscW9OdjZsbWJNd3pyVGFvbEI5TzNLOG5YdU5PcHZZaHBnb1QvQy83bHhUNDBVSDk0ZG0vT1IrZzdhSFpwM0g2MFg1MTlTbFpFdFduWnEzVXlsamI0c0N6TE5xbmlXcWxLTEhIemRsLzNFRDAvS3krV0VkUmFmNHFVSlJaMU1NVzN4RUR2Um05RG0rL0N3YTc4bkNsdUtCR1k4cUhXY2VOUTdEME9rZ00xZm1uOVVjV05SSEpaT1dUVUwvR01qbVRjY2d5a0p5THVVdlQ2QTlwNFhaUDRsajRtdFU1a2JpSjlVZzFMS3BpZDVHVjhzeGlkK0wvT2tYRlFIRlVtaXdBY1VteS9SQXo4THVrbWFFdDVTTko5Ym9BUlM5aGZyL1VDRlZRREpMSUhhREFGb1Eva3pHVWpJUUgzSTdpV1ZlSHB6Q3dGdFIvVWlJY2hsSTJSek4rQm1za0hVcm1qS2UxQ0c1bngrYXNndG51T0tTVjVoOE4xMTZZZlc2NENLdk5CanptSkMrM0NydHRGbEZ4NWg1RjdRd21zQjZyRTNGeTBra3hVdmtqR0owZDlPd082SGNHU1VPQklwQXV3UjRHd3l1U2dOK0RqNDZBN0xOa0tQcjNaTzluZFYxak5LU3JRSndBalF1NmlIL0JyVTJoeGcvdnV0SlRkQXpGcGVXUmdGVjEvQ1BsdHFja2xhMkx2SWtFYk9IbGNKWlFLRXI0VWxYOUNOMzNlS0JQTEV5V3haN2Y0THNnT0ZKa0xVT1NubkFpRXVoN2ZBN0lqaVdac1I1aWxVYTNzcWovangzejB6WVM4SEh2d1pmUXVXVmV6anNmRitXUVlXVnM0YWpYeDR0L21BQ2hDRXRwM0RNeVlPeHlJRmlWaW83NWFENzNyVWR2L1pQajJOQm1CZDhVR29NVDhXV0xOQmVSQzNMOXVZTnFrdDZpa0hlSnlRZkJxMlkrVTNCZU40Y2E5cDQ2bVllbVFZKzlQdTJlQVlPcUZGdFc3a256REFwRHlWVHFtTnJwSGErUFUvTWJybDVPU05RTWJNV0hxZ3pTQ1dzMFhNSU5IWUdEVk1kSEVDSVZGa2txK3YrTDBmRlVVNks5eGNnNmRzN0EvOXp2TlBKUEMxNDhKRFNXWWMwLzF0Z0MrRnhtZVlKRERqWmlFN0t6R0kxWmI5V3lWYkEyNCtFRVdVV1FORnNIbTN4RUdWQTd6ajRmNG54ZkQ2SmNhN1dsTE9JOEJtOTc4SzcvdHRabXRhY01wT1FjL2RGUzNrRllEbGhhVEpZTGZBWE5CeHJuZVRUdDVJckRYVGhHWkQvVHErWWJMNm14NzZhRWNaNTU0ZkhFdURna0YzaDBxSUx5M0pLQWtTdExTTEtSTno5Ylg4Uzh3U1ZMRk1ES0NoOXJNeTh0RlI1ZmxhQnpQR1pLL1FNdEZUTFV4WSsrZXpFQUNjUm02Y2pEUmd5TTc3SGZabXpEK2FEQjlSRDJFSStsSDNOZnJRc3l1QzJScFFieWhOdzJ6eWV5MWZzRUxKcTJiZWJzcmo5V2c5bjBiOGtUU2YwNWtGdWtBY0xucVRxOTdEc0QzeHlnRzBKNDdvOXp5TmR0ckxkZSsybmtSRWE5QXRqQWxNTjBUSnBhbDVrNkhUZHhObzZJY2lwRTNXSzl0QjZoVWR0Rk5DZkhPOFVlQS91NCt0N05LNmxacUxrRE5hczR4Mnh5TnRBQklTdkozZHpVbUlDa2xWbVZPWnZCUXhXWHFSSnV6K2Y1ZGU2cjdLY2llOVQ4VEg4U1ZoSE9KcWNNN2k4RDJuMW9FRWFPOHBkK2h0REw2YW5PWVBhcFgrRGpaMzA2M00ySDkwaDF6aStyQXY5RXh6OU0xWEcvMWxKaVZPb0dFUDdKemx1NXMrb3Fsa0cwRklqOE90Zk5DdFZ4M2Z3T05vNFZXaUh6blRUTFZjaGdPRzVLai9TdWN4YU9iRnkxaUVyV3Y5dUJJZnp3L1AwY1VITlJhRE9RUTkrd01DTjltdjJVZ2ZZQ1NLejFXQU1Kb3Y2bE1CQ2xBc1RDQWY5UlV3WUdIRS80dk85eTNtRnlvTkR1c29yL3VQVVVLM2RKSEVEUDZWR2s5bStUVTRzdkV5dnU2c0hndjQ0Y3AvcWlTeFVCZFl4NGYzTnhQT2ZuUnMra1Uxd2ZFYTJXdWUyQVZCNU0ydy9IcTVmTCtZRXNUU0Evc2hYWGlSMUY3bUlpZXR3YXBRRUlqY09XQXV4RlZJcUNqN0hTa1FrdS8wbkNMZlEwVWJMVmJ1eUZPcjV5bzNOUWVOcHE0d1hYMEhpS3F5b3JLRHBsR3FQK0VyTHpseXRjTy9SQjVnY0RqM2ZXQzNRdUdPRERNd1RVVmRBQkswZklkV0RrcDlrUk9nUTFJVnJnbHlYQTRQVzRxUXZLdHNqOUtOSHdvTWM3emNhUmhxRHVIRUNoSlZZQVY3Uno2dWQyRndsemkxMXR5b2ZBd3IvVWpCOVI3NjcxaGdtNGZsSGo2b29EaXpsZnorQXVWSjAwempVbWI0bFRwY0RXOFpRUkRVNEdDTzJCWEdSL3d6NU8rdFRkNDJTdDc5VzZESVRWaWVUMXNpbFNWNk5oRU9RUXdBU1pWSldTSW0zQjR6U3A4WU4xYTZBcXVCZ0pzcXNha0hVOFZFdVZGWUtKaVNOUjFkYlF2TjN6ZmJUVENibDNudkYveUNua3hrR0VpencrMWdESXdGZ3lrcnV5bzJhdzBtb3R1TjhTeEFaNVppUWVRMGp1dXlqbHBmdW5CNEpOSVpqNWtaMkV5L1lLa0F5YUF1T20zNi9vUXkrV2YzempNZVIzZXI3NS9GYytTTnk4aE9ybmpES2M3RGxJMTMreitLYWRYNXZzeDh4NEdXTXNVY0Z4SjFwV1ltS0tPRlRTdkI4N1hLSmkzZUhsS20xZUVkSXVDVGJ0K0JlKy9qZTBTcFQ1UElEWDI5SU9FaW04MmgwUlR0Z3A0SENTcExMZFZTU2ZZZUUrN1Vub1UwSG9iOENkb3lRTjF0cTJsaEJMa2xKcGVTN1ROTkM4TW5OcmlNand3RmJFbUdBK2R1V3diOTIrZTJ5WEczb1l1dzE3b2tyZlY3QldYSHZwYnZpY2NZNWFNbTFYUzRhaDJBVGcveWt3aW9iUkJLL2dsQ0g1UEpOMjl3cVJYSWdOamhLWHlCMklRSEEzWFV2bWVtSFp2bWM3bkxRQkk3d0lJeDFkUVMzRXQ5aHhiaDBBcFBlRWZ5WXdqWE4xdmtJdTAvNWJZa3dhRjI2WVBoblhiZ3I3UXlMV2lzK1RMcng1K2UwLzJybHVkenJ0cDdRQmdENHNUbUhtQWVBTFE4ejVwcWI1a1ZrV2NpMWNOK012bFh0Z1BWRHhMMTdseTlNWGJLOThiL2l4WnRWVjZqR3Rud3NVcmRESFJXMVpnOE1GTXlPUW9TZmhaSW9ScytTeWw3QVRpQ0RWbVBUSGhacS9zWE5mNTZpYlNiYVBmaGs3dUsxZVpxaGdDSExTeDJoVVlNWWJJeGV1SXJmRXdYK3lKUmx1Y0huNHdaVlZySVNwUlFXaWI3V01TbjVXazZ6WnEyN2JLSXlnSDNURURRQTlreW9QUVB1Qzd5MlV6eVNtK1B5NFRFL1Q0cHROMGlpdENMMUt6UklSRGtFb0JOQ1R2S29tY2lOcDdic01ZeU1jZWo2dVBVMHJWVUhJYjVFUFZVWk9JUVhMdHJZSkV5Z3FRcmdWbFB4YVcydEZydldnNVl6cU45blFPM2YyOTJheFBST0haRjc4NHNjaVNhekdzQlcwZFVyUTFSdnJ0QnpTL2hScmFvbk91ditoMldBQW1ZTVF1UmF2T0dqRXFPdWhzcm5weVR1bVhqSklxVHNDdVJTQnRYVDFkR3pSMGdkQWt4M3NyMnJ4cFNvNmxZVmxuVXJYOW9MZm9tUEdzYWx3dzVyZ2V0VEtxeUZEZ0I3V3daSmlOdXBWK3N5T2FHUEFWV29xZzdJL2VRamt4SzU4NjNVM1duU2xUMUVJblRxWTBmZEhYY0xyalVIb0RodUl5TXJ3d2QzWEQzUDNZdm9HNXhPN2grMlpVRC9Bc1dycm9aU2xQYlp3TFpUUkU4OHdDdEdmWStkWUs5ZjVXL1AzQ3lOYVFUZVdsWDRNZmQ2bU9oTm5HYVVCRnM0WWRwdDR3RTFlUHdEUW8wZk9NRWpWUk02NmZVZjJiMGp2amthelJEYVFYai9WRDNuZk5iMGVpK0ZZQlVKYU1rSnlmMGtUMFJQNXd4ZXd2emVCanArWG5oZElJTEZjTzNxeGhoOHpGZDI0dTRZRk9OTXM0dU9Tak4rUXczYUswb0p2S3plT3V5bmZIdEtTK3NPTVJMZEQ1aW91NTRNWDd6U1RNQXVaeTBnTEd3d3hXbHVDWVB2RlBaaEx5NDlRMWw0M1Z5Q0ZubWs5enZqUlZldVBnT3B0M1NNcjJQcUxqRkpLRjZGZWRXRkRGTzZYN1VmRDlxL1REcFB4V1lYVExaRytCN0gxS0lzanMzcXlKWEdQanlBYjJrQ0ljbG1sQVN5a25zSlJLUit1SWVvdzFGWnNuRGxOVnNGa0xlOEFYcXM0Ujdjb0dScm9IaWhFcU1ONVMwelc0dVBDNGxoVm1Ed2JPUXRSdnFySzh1RklFQURvT2RGL3pkMGFCZDduSDB6WkZkeGdDU3plRTF4d3ZBa2hPSVFqTEsxcFNBc2VKNytZNWtod1EyZGZYMTV4bjFhaTU2dlhZYVNRUVNoakxuT1FaYk5NdUxiY3ZYeUlxZ0NzZEpaWHBIN1d6bnZYTHovVzFyR0xUT3NVdkZWUlNORmxvdCs4Tk1PNmZRdkVLWGZPdnNzUzdrSHloMlZCaDR0Ry9tekNQMXZhTG42Y3RncGxXd3hLdFA3Mmo3VDBOQTkrMGQ5bVRXckJ0eUQrT3huTklkRGZQRnVULzhUZVEzQUJIMEtrVHFocDFFKy93akY5VThVOWdZSjZodlVIMEx5SXoxUXBrUXBMLzZia1QxL2l3Mi96QWlZY0hMSXhzUVlzd2cyN0g2TzdHY1poY0NJTFBaUE1zVjNaVmduVXJad3JkNU1obDFrbFNpTm9BYWhQemp0cGVsSGJyUGZmYTZsUHdyZS91bXpzU1VmNmxJaVJibkdGOWNGNVNHaTdYRVdpUWdOc280VE5sUGtRMHJZVC94SWRSUnUxMy9IbVM0TG04N2E0WVdRVi9iZS8xdktZK3U4cUFXQlVDTnhvZzZ4OUdwQThScnZVN1BFTWNOSE8xZUduclBaQmJoajZCY200RTF1akhlMERKczhwL2NoSGlmUFJsdHljYzR3eHQ2TFMvWmJQODlJTWZxbUFXTi9XSE9TTTFHbWZKa0tkZ1A5cVBGSVlzSS9qTS8xSFIxSk8vck1XeE5VejNhS29EdjF1QmZ5ZFZ1aDZteE1KbkRQWlVVSEhrZ2pXbVZCbGNKeWdBZGlZckd0SlRnUEdHSjR5cmQ1eGsxbXBEQ0pyVGpkS1laeG5jSzBSeFF0eC9zcXhNcUltU3RMc2VOTmhLUWR3SkF5aGk3Y1doUFd4ajlzTGNmRHBoYTRnTUZoQ2kzeVJldWc3bWNwNGNJNmxXTzBMT1FGeWlMU2h4TGlOTlNabWYzZVN3YUtRejF1VlN0TG1yRXVKREI1OHBWL2Y3R2lHeFNQejR4ek9GM3BxV3NreUQ2TG9ZMHkxempBWWFUZWJKcERPN0pXNXhUUmJjVDRBd1ZGY1dCVWZaVWo1NjM5L25aV2lyajJWS0x1WEVTc01iWmZGcmROd1VxcWE4NHJqVW0xUUswTUJON1NxaEN6OUYrY2R6elhrZ3JjODZaRFcxN2pTclo0WDJ2OFI5U0lzOUlJVFoxR1ZOSGh0ZU5VRmsrK3JubUdLMlozTHJCWnl1MUhSZnE4YkJqS0NVUW1td1k0ZEtNTWNnRGtrN3VqN1RvUTdtdU5vSzlhbUNDVExINWdiSy93Mk5lZ09Cd1hZNFdjWXVPVzVlMkZ6bitwU0hRMEk0YlhaOWtzN2hLK1RIV29FZUt6dXBqaTR6a2RqR25ydXY4bkM1RUNwS1hweXZ5dkV4eGdnRlprMSsrZ01XNTBoWURZMGRUWXJrL1pVTFArU085dzZsUXZFSk9VYWtLUkxnOWtHcUU4aGxkbi8yekNjdE9Tb2kxRFlLa0txYVRNRFJIb3JxWWFMbmc2c1hsejRVYkx2cDRwRzU2R09kVUZVYzVaRVVPYkxuekF5K2ErZWZUbERkSVBnZ0tTVk9xTUxFK0V6THNwc3kwTG9tU0xFdlQxVS8xcXQ3Y2liaFdCdDVwNzFVcW8vUngvZzFkTXNyYlVRcTdTd0FmeTY5TFhZcENYd0xKRUlzYWVlRmx4UGpJZkZOM1BNa3lIaXpCMkROcnRQeEJ5UFpGRzdxWkZNWjVqUTdST1d2cElaSGw3T0JKZzRZVHJORDBqcC93NE96bGdaTFd5RHpMN0hFZXlqNTkzdVJvSVFvbTV4OGdpdGhabFMzdVJXV3FZcnV0bFVIOHJJblI5OHlPNEJ5R1FMbzJTUTBncmJvR3pqUTF1bndqU1FpajYyUE5zNXVqdTgrL2dIU0hodGFTWkRkNm9kOWVoYks0dmE3ZFJWL3JuWC9YYUJRS3lQbzVEbG9wN0MvZTZ1aDF6U0xmbGRTMlZJTGdXK1NRdWdlTEJXdURvZ2hKMnJiZHRPdHpTei96N1RkRFY1Sm9TVE42ZFU1Vld4UEFkT0c3V1hFQTV4U09ZQVFXZGZJaGtTZ1dDOHZZWlRTY0RYbFExUnNuRW1GdEdlT0tiSjl1YlRYOFlnYVQ2cGUvZWhySWZGZlBCSzlSOEZqa25OVFovYTRaL0RBY1BnNklIMGNiL2F5M0RVV3JzNzMzTGp5Q2szVEV3T1ZRYTd0QWI1VzZYL0c0N0JLenNxV2lITE4yVTBXZG5adWFqMGluUFNlaE0rVCtVOE9sdXVzNFVScFJQNDM3alFlTHRBV2dVZ2ZCdkowUWM1WXhPTTZ0QnNyWWUxa3NMMEttS2UwSzFHbVltNVM5Q04zOW0vUXhkYUZxZ2dzRHZwYkh4ZlByQVVxZjZOMTRUbXZWOFhDSSt6endpNURZbTVGVXdNYUF6YlUwTFZpVTQ1VGFLa2xxTG5lN3hJQjFiUnd2VXVhR2xXTjIrdTF3UlZTeTBxcGJjWmM1ZWZuWlVzMHFGUEFPa1dHNG9ESUl0d25MMHlpZDZkSm02aU1XZE0wVnNDOTlvM0wzQXRHcUltdlpqLzBGaFAzdEFXS21BNUJmZ0hPVENLWExYdGkzbkxXQm1HVERCU3NjdUp1aHhFTDJUMlM3bVhEcExFc1J4ZXJ6NGtqUnhUYXBDbFd4SG96SU5YaUcxY3d1WmsrR2ZydURza2Eyd29rdGtONFdEcmpGb3BWaGQ5YmwwWWlKWHNuL1B6YjhUNzd5WjJXdGpma25wTHdpd2tndnU5TVJHb0k1UGNwNmZHNG9zcVJVakJOTzdMS1hiK2NFcDJ6eFJKNloxQUVMZlB3NUpmcmd3dkdBNFdOelF5TFE2eEJiWmMyT2psdmxPeWMwRVNZUEp1ZVZNK2dHbU8xVnJmSzRvS1ZOQzNndmVXbWtIb1dNMlZCTENNWTFjQUVJVGxNQzQvY25PbFJtT0EzTENFbmZXd2tWNUVQNGR2U1h1NTNyZzAxMm54TU52R0tVVkNtdkZsOWhkVUc1SDllUmVIbmJHUk1jUFp0MUxvd05FR1M5Wjl5Z0l0ZFJEQWtEZ1JsSUJLZ3Q5UkVMN2ttRDJVT05GOTN2S0cvWFFNOFdzSjdua295UGZRN0hMQjk5Q1RsZW1DZjhGZzRzUS9wNXo3ZHBhcFZydWNxVm81RWRCVkZHMGk3WUVxNS8wbG0rQVVGb09SOTl5eFlpMitHQVBCS014QWQySlIwQTFJemNnREhqRnVFZ0RpZHJGWjNQQ3k0YTQxMll1U3dtTnNHWUM1OU93SnZYVkJZZUlTTEdLUlQ4ZVloenA0c2lCbGNwZkRmeHhQUnVkcHB2dUlCVTVOZ1Q0YkY5NU9tWU1ZR3FGam9obHRhUTNlY1ZWTXhmZ0lTVjc1elBWUmRKWGR5cExKSExtZm9mNm9SeUE3OE44R20ySWY0MXNUWE85WjRsOWtNeURXUUxFdllGNHhKa05aSG5KYjRtWTczdzdXUjVub3hYczRmdmNhSHpMOVhGbUk1RDJSWW1EQVNJYUdFTTVJNklCWndFVi9La3IweUgzZDNhUWR3Q1RET1kzQkVCbFV0TjZDZ2V4d1hEL1pmWW5jSHpQZEZ0b1RtaXY4NFdLUW9QL0FpYmR3NDBpamVQQnAzV3hYUTdRSFNOc1M2RkZ4NmY2ZzBsUk1FWnVJaEhJZDlpeW1BTlVaMG5zTXl4N1hMRXQxczVXU0RtSWp3QkdrK0VZR1Y3ajhoRVhUUXZLV3hqbTl2U1FaLzBqejd1cStKUzIzRmJhbFZCcjBMbjEveEQ5OTMvdWpaS3pvUlNJRXdtcHZtTm5zMFdBVmUxZUw0VnRnQXpwQnJSU2RscnBPc0NZWHpOaFdTMXFvUU9jVjNOSlkySGdUdmtvaXBlWXc3WWltTzR2bzBNOXo2NXRENS9WVExIUWN1NUw0ZVRiTGdCRk51NFVvSTFDYjlMaGNHSnNySDRDYWNpTFVwR2pZUzdxa2RpclBCUklvaWZIOFNkS1J4bzBvMTdVNmo2VFJpMXY4QkR2by9rN25QcjVnWkR2L3hKaDAwWlpGc2tSZ3dXeS9valBwQmppaEUxZkVMOEUzTFRaTGh1SG1ZSVN5d2ZveVF0Z3d3MTh5NHlKTmhRZzc4eUZFbjNWMmgyNnV6SXNnb2VESGgyNldBVTFQVkxsRFNtaFdaRjUvcEZlZkNvTWV3eU5maERsYktMU2oybmhNNHN4VU9IUVdjWkJBbVBsSndmNWF2ZlhQNkpUb0FxYTEyMFY1VFpEcyttYnFxcjR2RllwUDFNazBHR2F3a2Zub3lTU0szQ29QaUZEaGFaRU8zS1djYnR6N1VSOUdiaXdnKzFVZHJUWjZMbTlwaDFIa3dmWnNZTk9QMlFsTkNhalMxdjlvYU5IYkE4TnZiZzZUVkViN2FDT2pGazAydW5VTWhnelhXSnBlcVMvdVF2YzNWUGY2Q0V5b25FYW1Ub3V6dTFiOHNDMFZHbVh3WWMyL28zMllQVWM4bVR4K2F0MjZJR0lDL1JjNXlja2xPRmtVcU95WnVUQmlIY1JueG0zVDBvandHa1QwQzlIL0xUWXh0aDZURUxoaEJSQndVUWd0djQzWnMrUlF1cng2Z3ZmdC91N1FUV3krN1lIbXdIb3YzWGRSS1QwTDJmeEhqaE1HakpzMXNQSlNrcVNDM1Jod2MyZVA2K3JRN2U2RG01QTdPZU1QSUxOb2tVTGpNTW4ralJybmJSWVI3R1lQMmMwMkZZK0ZtZStaTkd1ZFQ3NHJVN0JkRHlOaTJLYUdQQ1N0Y29zZ3NhNWdZaWk4NEZydFlqRWpyZmxqSDVNTEluM0l5b2U0ME1oOXlFZjZXZW8rVUtaNnlMQ2o2Y2l6eFhMNS85RG9GYm96TjNvekdqemc2bk0zYmZRVDFlK0Zqczdwa1psYkVWdTU1UFVHZGs3ZjNxaDZkZUZDbUNyK1pxZXZ2NzVIQllGalhWbTd5S0o0eDZRQ0VuU3NKRGVKdHBCODN4Rlh4TEVycmtUTCs0TUdwa3Y1b0E4UWtXU3RmTDl2ZFo1TmNTZkhjdTN0S3pFbE4ydWp0SlVSWmp4TkFxSmRDUmRpYVFxbDZyUHNzbzdSSU1QUTJsUjl3b25XMko3Y3E4NmdmVjc5OExDQ0ZwQ0FJNkUyRm9ueFk1bGdDbmJUNDExMHRKRFpxWGptSnJMRVIrU21pTU5CY0xFNUlvV3M5bzdGZjBTbFFZUlgxbkhjZTZPUzZlTVo1V25MSjlFTzI3QmtIZGk4LzhsNGZmM1pxSzZCdTY5amhTZitlVitka2hGcU9VUUo5aVJiVmJDL0xzdlZJQm1VWWFWN2UxRk9OMTc4aEZ5ZEFiSC9HUUpibWcvZzdZZytsbUhWNnRsbmlRdXM4WEowYmNXeGhjVmNkUmUxVDhQa3p0MzNjWnFYTS9EN2pUdGZGb0JCVyt3c2QxNHhuWitxRmFRdWFQV0FmUmg2RjRyNllqUEFPbjBSODB3Y0x3YmVXVXdRcGYvUGl0MHh0YVFHUHQrcmthd1hPM0Z2OERLZTVxVFlHOGtyYkx5RGdyanI1N0R6Vmo1UmloWUZkT3NwNFdVL210Ui8xY0hOdm5kRHl3R2poNkRQRFJOSGhjVjI0YmZ5Ukd4bDF1QXV0cDBvL0hhMStuOW9XSHpPZkxsL3ZxUklrQ0tzQzh3ZVFueHkrSkplREFqRTNsQzBJSXVwYlRJd1A5SERxNFFzc3l6bWFIMmtuMlJyUXcvYzUvL0hHY2hzb1dBYkc5bHd3WEtNQ3YyNjcxVmZlRTJmb2h3ak5NN2pMMGJ5c1pJUXltMlBvTFFRdm13ank5bmQ1N2Q4dVRXNy80ZUpzRlZnZEdyRUNXdzVPWTdRRlVZSHlSTGU3TDJwRUkyTDFMM1FUeXVPK1JYSHlORHdGQkRrL0grNFdKOFpuR2dwWVlNOTdmT25BYlZrS3ZwOUFvNnk2NWdJRWNERGdZZkhtNEhnYng2VmMwcTMvbVNUWjY0Q25TUWN0bTlUMUQ3bGVqc0lvUVJ6dXVpTExmNERkdWJKOGNYMithOVFWcWl3NEs1SHRzY291SU83NFlCRU5OMGVsbXE0RzZMbDR0NVdMWWUwQmVHZGxJL3dyaitPb0MvNlJJbkMrYkxFblg3YWlFU3lDbVRGWXJBdDhlSTlvY1RoWmR3SXY5VVlrWWU0ZXhraGpQZkQwODU0Qkk0MmtCWDFQcnZQNTNMMFMxOEl5VWcveWhxT1F1Mm5FNjRuYjlRS0lqV1BNcWx4a0RwVDU5aytLTmVSQ0p1MVVWVzc3VEJKSWtrTFIzMUE1YTlEekVNU3NHTjNQZUVQWXozYjNLVGlVeVB3SWo4d2RVeXppTDE1cHpIWjE2K20vOEdZenh3NG1SQ3ZmTWlrZkcxS3U0bmNEaDVEZDlNdmxjREROZzh3cHNKYTBpOUJKVHdzZHBxTXlwcjVQQUdMOEtGY0ZlWUFuUUk1NVFhRzU2aVpSTllKRk0yZjUzV1lTQ3VKZ3IwKy94R3lnVjdCeHFMTDZibDZoN1lOWDZadWFqSHdNUjZQOG8vZkhwMHVEenVRbzdYQU9RQ3VuS0pyNkZjVUl0VDF1MWErSGNxUHkvSVRRS3JhZzIzbXpaSTR4UUxadnhPWXlHdm9vOVloOTl1bkdEQ2dFN1JqSGwyU3VyWkRnSjRPYzNmeEZpQkRVcENyV0h4ckxJcEVuczcwcUZxODB4M2N2cDRnL2I4VUNvQ20xZDBnU2E3eFhUVmdwejliTnpGZWVJdzhlZ3hjZFZxMU1kYXMxSHFHNUNOTVVib3dldVpLWVdjdU5LMFM0UXlwWkpnWXFudFo3VXIrUlRHSlZITTVUYzVUU3A3N2J6VisxaEdhd3hPRHM4UVNScWdyUmovSWFCVEJ1SVJFLzJ5d2tuQ3N2ajhyUE9yN0FKTUxQSW9aakN0RFJOWURhZmQ1SEsrNWMxYW0rN1hYK0c5eVBOWDZFVmhzMXgyczBVNjF0cVlSS0lVNU9ONjZzcG8vb3RXSEttT2hUN1lYT2hRWG45TmNhTVk0ZlRyemVSM0NjNDRTNXRpMEloVVJLdElKV0hDb2svb21KVUhVQW1oeTkzUWgrYVc4ZFNEakI3cGVhYTlXcFBjYU1PU21QeWp5bzE2UndSQS8yNmtodHhVZHI5R0xQMUZscVY0d0hPbUxHTFBhTkJOQU90QzBOeDFPVDRYVHIxUzBtczhPVVVrMUZETmZMbkRyWEdoV254RHNybFM3aXYwYVk2R05CU1NTaFNxL3dHNHMreHdNTnFSOWQyK2VLdlo5NGttVExuZ29xelNvRHRZTDB6d0JnS05HQWxOMmE1cFI0N1BNOWVpUHptVTNyU2ZWVGRIUHN5WEV2aG9HMUEvckNQUm1Pck5EMDJaTmF3TDZmSzRHNkV4RER0VkJNei9RMllwckgzZDFsN05ST0M0WnVFZy9qUWtiMU9pOElMUS92T3BIMk5MZVhsYnBFNWtMQmNRd1JLQlRtMVFxNVNKdkFHT0FQdUY5elkxTkU1Z1N6dFZvNzQ1ZmExK1EvSzZWY3RMaUdXc2ZZbE1PN1ROS3ZNMzBJZGpmbVJnellMbXpRekhyVVRGUXh5V2x3UnUzQmVOVjF4bHFrOUZwcWpqU3haUllhZkxwOHAwUi9GL3JCa2E3Yi9DeGZPaU5aNXgrZytCa2tqUXhiRk14UmljSmdZUXRaV1RIaTZwOVZjY2NvVHlyd0EydWVWQnZMVVEvbTU4OWk1K2ZMbElwdUJzQTFxS0YvUmdGWk1iNkloY1NiNExIdHF0a1VuK1VGYmhEU3FWdnB3Si9MbUlQUjB3LzMxR3RrbXN4K2duL0VJekZyM1FBK2lmaDJXaiswbXkxZ3NGWXdJZmZFOXZlc2QxTjl6YzNCMDhKTXpZWXBXaHQvaEhVcEZYdWJnOW96bVVOU2h4VU5VNkVDbURCK0FjQVlaRjhrT1JlcUFaRjBkV1BsSmgreGNLb2VtdDNkaVNmaTRSKzExY2Q1RXZlQy9wcVF6ZlhDZ0NiMkorbWdQTEVlYmN5QXZjOC85bExMTnRXRWdtOHVwU3drZXBkTlRXaUJFWmNmb0xhY3duRWZIbEtRNFRWZFhLNTJ1N1FkZmx6bmpuaTRaZlB6MDhMZThNL3JrWW9sZjJKclpRM0dzRmZUcHNSWWhxM1JIaXY4SHJ1YTMrK2k3SEJQakx4RW1ISVFTQmU1WU1vNVhib0x0bXBkNWdYdEhCZnpnR2V5VEhqU21BZDJqTGxxYXFFamR0VkVmbUorQTA4c0d0alpqR1pnbkF3WWVteERYclpROFFCMnM2MGtiZWl6ajE0YUVjakdQckNFRVkycGlHRmtYZU9IbkVjODBVb0o1NWdqVXZUTTJFQlA1UUdYa1pTc3FpQkhhTGFnVHRCS1k4MUcyb3pqWFM5WHA0a1NZc3BEMTluWjZsVENObG0rQmk1bHd5T2dxL2h4VkttZXJ4c3BycWhaUHo4T3pZb2d2UnJvWHRqM3ZiNmc2Q0pRbTVHdHo5RE9aSE5MN0hXS2V4bzF6VEYvQ2s1Z0t6MWxnREkyNjVBS1I5QnRzOXh2WW9jbms4U29YMmJVQU1OREJUZ3l6SVdTcmVhZGZvbnRJOFdKSW8yMnhISXVPWUtzYUpJcU9aclNSRXhya2FqVEYwWnBvUEI2WlA4UlBuUGxnTnJiR1JwUDIrR1g4WGpTdVNKYisxRlRQaUtVMEVQTkNBV1RLOVh1alRkc2g0WVBENlRDRE0xTjVMYjVidm95U0I5dnZWaUhxeWp5aEc0aWd0ZWVVN3ZHSDlKaUkyaFBoTGJXNkpPOEVjRUloWlRRUXhKWkpPSzNqSUhDa3g0QkE5cElsazY3WkFpeXRtMUNvdmVIY3RLTUh1WFJuOWx2elZ5NUdCQVJWZ3B2c0Y2Q0pidnN2VjVqMGdqWVZEcGFGWVVnQ3FoQzZrekpxbXI0V0xtUzFpUWMrY3BZaTR2bmxBckowZW92QWdZSGFHZ1pwWHN6TTFSb2tLRXFqRW5TQWRubVppcGl5NVhPRXBVRnJyTTZuOTh5M2Rrd1Y1dk5QU2hwUWZpTzNaSGErdXQrUHNJa2ptaTlFMi92Wms3NnBnTlBOTTJxUEFzaHl3U29VSEtSSERPYUJJMUprWStEYnJJcWJRL05YenRjVVpzY3BYMzRkTkhpaTVncFdxSnA0bzFsVXpQWEJ1alEzNFB6Z2JmRHZXOGptdnhBSjJJbEF5WTR1cktDeGZNOTFNNVBkY3BHVE9HNW1ZcCtTbmdMRTQ2MEdzTklpelpDK1RidWVNZmN5dmZoN2JwMGd0Q29KUDk0MGZYWFlGZlE0NUZPY21EYzdjbFZxc25DdWxmcCtIakI4eXJrYVF2TEM4c05ta3VqcTVqTkpFbTRMdnBQRWV6ZHl2MVdPZmVyWitRWXlEYkUvM1RWS04wY0dmdFFTbG1kNE45NWZHZmlMRE9PdWtpVm1sQlVXVjFwdVJ1bUZ2ZVpBQmFvV1ArWDMrangzOU9QRmt1M3dhcGZTOThrUFN2K3hXa013b0p6MnFNM2s5aWZLMkUzZDE5WkdWc2Zaay80RWZEUWNJQjY0UXNuRGlRK2pSMEFteDkwcWhaNWdDNXFnSXJFOGU1cUt6enJDY1I4aXloUURubDZIREhIQUlCWW5zaUFXdDdnQW41eDlzTWR6OERhUzBjUlNDWEhveSsyaGZiTkc5SEtIY3YwNkxqcGFoMTdZQ2dxelBqRDJiY1cvSk01emNsYnU4RkJqQXZidFREWHdWdVpDWjhLZzNRTXU2OUc2cjJickhYV2V5ajdqclhXM2RBVmI0anFFdXlVR3VTR2pFQXNJa0FzM0E5akJueUNVSmtNSE1qT1FJanRxekFXWmxyejI0cEJLdTdSMkpqMVBqbXQrSFBObWR6MHlRS2IwdkNPYUplNFk5Y2VyOElCTDEzZFhQME9iWjFpM2k4L3B6ZWhjTUxGemhMdEN2UWk2c21DeGxXOHBoNTBSWXZ0c2traUFFaWhNMWNadk5VNWFYbFNTWlVmVkM2WXpMM010YTlGMldSLzk3d2sxc1cwWHkxTDRPQUMyYmtMOG5sWG9OSzgzc3FsZzBXd0N0ck95eDZmN1hSWWlxbksvU2cxL0dtaVRrS09GT1c0Y0dqWXhzYkNRZmwwaUtqQzAvY1lrRExrb2J3cEZ0bmtGejNPWU1pYzNjZnlYdHluQVJhOG5YbTZBYStEZktsbFhlKzlwUG5NOFdBQWhlUEI3TngwWUpvakRvcG1wWmR4N0IwT3FlL2hJc2wwVmJQVFdyZlB2S2pUUk1Na21CMkVEMEFqemxQSFJoTUpCTllzeTVnV2hObElPSHlHalZ4Y1doaURPclFHUW5XZjg1R2dmWXpyZ0M1UlBkYjh1MnhnOTl3VzR4L1pld2p2aFQ2NnVNZzQ2d29RaXVKenBSb2RIcHZQblhXeUdIZXhONzdVWXNIemgyb2lOWnFaRHpvQTRlZzhNb3FMdmZhRWNocldrWHNiTjI2clk0MEZlQTdrWVZpeWtQRjV5MTVnY01QY2Jrd3lQcHNZTUR4akFjY0I1a3dob01VdEFmTjJ5MXhpMVp6YzNjb2RIdHNycWFmMDJicUgwdVdJNmxXZjh3dWFRVXM3VTNHT0l2VkxaanZMODRGNVdWVXhzY2NPMzVqMjBoNXI1eVZjVU53b3hmYnMvbitucW40d2lSbUFubmlseklPUm1QWmNEVHJkUHoxZXVWL08rRVVDRHJnQzJEZ1k0RlI0U0lWOHB0UGFqTCtaUzc5YzNOaURDeit6c0ltQ3ZIVUNISUVaUWxqdUxvckJnUmdLSW0zV01GeGFEZlI5aDRyU1VzL2N6eU4rRmo2cldGWjlHajdKUTFnVEZzeDNFTnRoUWVPSjNGRE1lSDZ4aVhxMEcxVmFXQktuL1d5Q1lZWUhvWm42WEo4aW5YOVZsOUJEdGduTmkyUGJsTFl1TkV6Ryt1Z2M0eFZ1empsN2dDWHdIWDFmTzFNcENSNHA1Y3FTWlNqYkFJcEw0bktTMGFDUW8rOUpKREJUQjRpQ3FqVE0xL254ejAzREhtYWtsRXl2VmhFTXRRM3l6R3pkSnM3SWRnRHl2RjN1TFlobFc4cHJsVHdGVWxXQVc3c0dGWjYrVVhRcGFhck8wc29LTEwyRVVoNitvSDVPMUttSnFTVVRIQkw3Zld6UGY3Tlp2ODdNOUJZSDJCM1pWN0NIQ2cyYUhtajVtVFR6eXE2NGtjMjNFcWhVeWFzWFNFNGZGWFhUQjY3cHhIaENXVDBmckZ3OU1PS1o4NjgrN2JMWWMrYjdFSXduYzAvYUQxZW1VWTZSbkhzVzdjWmhwbmJxRiszSlhrekFHSm9ncnJOSEFVanN6QzBNMVBaYlBTcnBlZGxrS3FjWEh3R292aWl3S3FONGdwSlNVbkFtc3VFR0hRa0RRY1YzaElCdytZMVJ2THZ0bktCRmNmNE1XVkRnL1pWbmFKazh5S0N1aTZGUTdwclRZMDMvTEFsbmZNZ0VTRmFYMDlNNHBCbnhYUGxwM0ljeityclJVTkxPZUZRdkVtamNDWDNTNlV5MHU1aDZVN3lESWpQSzNldjBTZ0crcTN1TWZzSld2VTc2aUI0Um1TNUplSkx3dU5VMlBlZUI0N2M1eTZsWmxmcXZlWElJQzdkZnVWRUJ5QTBueCtFMk94R2drUUxiRFhSL0ZRWE5JbWp1Nmp4UmMvUzduTXUzT3hkOG9TU3JBa2hmTXZCTkI1NjdQMXFkZkxrRXM0eFk5QTNOSW5RTjI4V25RSXpnbHV1WmVoeTRobEFNMk1EWEpRYWEyMHJWcGV3bm05aUpPTjFRM1l2SVdvNmxmZUEvMTRNZzZkTTA5SjdmRTR2dXA4YTBCek56VUxBdkg4MXQ5WkpCeFoweEUrSm5TUzZrSVkrK0JiVGVkU3Z1MHBRTXdHV0pIWTdMS3lULzlvVGxXNSs3b3RseU5QcXY5NmNmT3VkbnFyaERDOHltN1FhY2ZEc3F0RVFQaTFOd0lqU0twRk5oTVZmdjE4ZXBnN3RObU1Uc1owVlBIMEY0Z2FOU2ZzQWpxbXpWSzhtMG1ISHVKM3ZLM2FMTGNESWh3SzdBbUl2REZMb0RRN2lNaHVuQURwNzJGM1FBdjFzaW5MRlVseVEraXR5cVlOQkdJa0lxR2F5SFRDbXh6ZHpZMkVwN2RjeHErRkliWUhWNlFTcDV6c0NkeXdTbGJOYng1V2RDTGNZU1VULzJ5alRldVYrclNnQW55YnhPcVJMUzNHeEorbHdrT2pRUG9Md3FUNGR1UU04WERqVmJ2dDZpaDNOQ3ByWjhGRWFESjgreDh5cEV5SEVWakx1bEZidXphRUF4Vks4cEZDdWFJNTIvczAxdWFNWjdRdGtBMUExM0VvRk5IUDMxQmw1aDFpNFN4VUo0WmVSeDhGc0FPUGxUYkJhRjZ4SWVkQVJyNytKOEZzb2RlWmQ5enJFak1ibmZqVEExWHR6TG9HQmxTd1dOcmx3WWhtdEU0OCszTkllNndLcEdzYVFybjVNaEZpdSs1Qmd5TzNqbjduaUZSSVZQRWZMUmhqYURSVnZnWHJTbEkzUlQ2ZXp6SlV2ci9mQzgxSEVwcys1K3NQQm1jWTF0QnhmZEZKZ0MybDNhVi9NZS9WWGF4M3M0MXhlWnVFd1dKVzNOOGlzZngxRmQwcVgxckdRMWxJSmhDdkxwSGRMdTRlQ0t6a3FoTUpVYW16SEQxQnFNT1lSNWhEQW01MWE2aXlicGViTHdyMml6YlVWMlRkSEVYR1ppSnNXMmlBZGlBMTRnNi82OVhWU3dUTWdkQlZUemYrVm56S1daUW95S2laUWRlVjVUdG9jbm9CUGdmOFhqRjJmOXpYN0ZwQVZtd3pxVEE5UEhqQ0pIOWRGUEIwK1ZTYkd4NWFhbDd0NWVOTFZPWTVKbnVBUkwvYVhSUzdTbmpWTXNobkszbTFaemhHNGVXTVd1TUE3aXQ2WTU2c3VmNWZwejhNZ21idDZiMWM3RzloQnJ5eUhTU3FzWGZkOVBsRm5XeFp3Rm8xOXo1MG5LRk02M1g3VmRGV2FDYmhyUllRTVlwemYya3hVaVQ3dGx1RXBsV2pNTHBoVWJRdk4vdTgrbGxTcmdFelZlL3hZNnpnSGJRMW5Rby96a2RBeFRSc3dpd2JRNG51VXBIQlhrc2xZeEJ4Y1ZxYzNOcVpNUGZPWGNGNXFvVy81T21LajlPS1N1YUtRVFB4TDh1d0RyWUJMR3ZwRlJjQ1NlSFp3N0ZoY2cwT0VERzZEUFpUMFZYZ0MrVVJSRXhkb25kRktpUk4vRXFvL3B6VEtEVVNDYld4ckFkazJrVWxYMnlKaW5OZXNSZGJiTzZHcmVaeFN2NUpEUFFoN2xlcXlUVjRERHlneWdnUHhPUFI4QW55U0g3L0ZXNWtoaWV2cW1QeHY2VkNWbExjaDhrWjgrcHhZMFd0eUNxa3hrOGRQcitlcjRhaW10ZGJLTFdzVVVZMm5aNU4yckdScUVsMU5KeFljdFVPejRXamVmZk1hWDNrVmRUbUlKeE1MS1pDWWFQelFhenEwSWNSOGhCaERKd2cxbVI4SUdoR0N3UVpnaHc4dzQrb25aY1VWM0tOeDNoOGdHMjhmR2hzR3hsRDZ1bDY2eWJXS2EyMGhSQ3h6UXdiVGNaYjBoMW05NW1qUWRUMEpJcWpZLzhpcURNVE9XKzY5TnJ1UjFibEJia1k5WnRaeTBLdEpmR1lnaVI5OHE1bDlOSlBUSEpOMzhVamdlSGNZMXYvSFVwTk84cDVHSWxHRERIS3RVb1FqTWExYTI5RkFpQ1BWS0k4N1VqSUNsKyttcUlHd3JxMm5QNXg0SlRqL0cxRUxWVXo2Y0RmbUd4R1dxVGh5V2pGbUsrL3pZdHlRc3lHckNycm1MUUI4NVNiTysvdXhkb3V5d1Vlci8rQ2pXcnNReTg2SjVRWXA0em02WXErSFA5eUcra0QvMzNObmY0NXFFd3FJb1ROUGs1ckJIdnJGd056dTN5WHB3NzFINjFSYzN6RmluUlQ1MndrZHdVb1YyU0QrOFRnZXFJYXdmWGlreWlTQmVKeWh6RGhxWndHN1FJdWswSHdxUllZSTlpYy9QQTZwSE8xR0ROUXpCK3E5VXNBYkFjck5FUW55MlZRMGVmclluVnFpL2tsaDY3dDd0dkNCVkw0TTVCRTFsMit0a2IyZzdLM1R4MHZZQXUwVmt2TVJ5UHpiMmh3c2MzQno2WG1kTnBlNittSjZjZnJrWmFqOUNXUCtRdEhodDlwcXNEbnV3MFp6UDVrcHI2NytMeTQ5bURWaS9jQ3crc2FkNG8vNVhlT011alVReVROanZzR0RleldqY2pGSnlUbXZ4REwyN2c1dTMrMDZvYnFZT0NRUzZ4My9iTnk1UzRGa3NSbHU2V0pBbkFQbGNqTlJtMnc4bEJjS250VHp0d29tUEdXelNGTnJRUXlhTHZXK0VnYVlCLzVEdTJlNzFyWFlUV2NDU0J5Yk0wSlNDZThzWkJMa2tvbzlCVDBMTmREeUczVVhSOTlDdURmRUZobFM4R2JFdVhQNDAzbUFQZ29sNkFRVG9lNXptRVpEMUZLajc1Q05ZWWlmT2NXN2FzL3dBOFFueEJRYkllSUxYS3FGZC9GMmJ3dWNmOTFXY25MbXBMbGVvNmdUQXNkRXZTMzJmR1Uxd1p2WVVJUmYycGE3NzNpQWJyaWk3dFNjVDd5T3dOa2dpb01XNlAwSzZTOENJYWlnaTg1NGZKWGFHbkxCSVdINVVzNDIrV3d5dXpBQjVMeGdzcXdaeWVzQ1FFaDR4dGNiYm5WZFBJMGlKa2U0dXhDM2k5Nk8vejhPV3dJRkM3QXpxVFFoU3hWSTRVeVZxVmh6ekdDZDgwU0s0eFlXcmNmeEdXTlI4LzZ5Z0d1MU5PRkt6UGFxdU9ZUEVtcm00dDFFdGZRdUY1R2ZKNUVNWFJ0cnhHaUZLUmxLaFpSeXVCaU5xNXBBLzBReTIrNVNYTFh4dWdpTVpaNmFZZ3c1Vnc2N2FhWXFaZ0YzMkxURjhHSHcwWTNDaTRsQzlzN2FZUWdqeW80WHU3TEJGTU9NVTVoallqSDV2a2RHcEk0cUwwMVJ3WGtzbWM2RWJGZ2FCNjYyWnlYeFJFbjA5cUhyVjVDZ1daL29RMHVTZVFlZm45UVgvZXRmcVdyWmY5UEw1dWdOV0NQNGJpVUt1cnpPbk9kU2k0VC8wVFp5VlpMc1IrYXFlcFVHWngyUjhNQlhkRGs2N0I4cmlHRHNVQU4vY1N6MmJWaTdqdnduMG5LMkpMMVhKbGxJbkZzTEJhSzN6UkUyWWhZUXBKT2VWZ01KY2Z3VFltSThOQVoraHd2aXA4eStoNEdScFZhVUxHWUlOeEtMTnBWa3FTaEFSRjJhdWlKbU1BSXMyamZxQ2hwdkR2VVNweTd6VGhXb1dKeCtSak9ZUGo3dDZiSEJUUWx5UGl3ZWowckhMQjlZYnZyWmpidWtEbEVHYzN4UmRBM04vbVdTVmRFbTJhY2JlL1hFMU9sZFBaeTZOd0xoaGVyVzNzM1pIM0RPNzZvSERVVG01dEg5YkU5WURMMWRXK0JqeUJ5SkQydTBZM3VCVUZpL2ZzWUxFNGQ1dGhEckRGbW5BVmJ6Njk1U0VUYVBHUERMbUlHR0xvT2xDOHl5cFZLSG4xdS9uckxuZ3pOR21QVXRpOEozSVRxRXp6V2NiakkvY0RIc0c1bWZIV3FocW9zbHRVS08xLzVteFFnSFJCaDRyQTRzR1FETmN2TVRoelkvRFhMSFZIakdremhRZDFLQjVUSm81NThGRzJQaThSVEp4dHpPNWtQeTJaRkYwOGF3Z2tnamQ3RUd3N21SMGU5RFZUbm0vYU01UHBsTlc2NGZzVDRSVG9XYnBseFlFTERRZ29qVkpneGJjeGRWSy9pYUZjSEdpS2ZpMDVsSTRjL2tHN242djV1VUdpMHIraGtsaUdRbEswVzdTcHQ2dE5ZeFVmNFg3V3I0TUY0Y056WG1TUTdBZkpuWlF6SW96UHAydlVPclE3RUtneXRWVXNBNWJ4amVkakJGUVQwKytnbXNpMEJIM0l1Tmd1QjcyZE05VDVTazY0aE5BWExuYVp1c0ZmUlhnSjg5UnF1ZTRpMjNyZVJadVBwTVZLQ2pjVGk4VnR6enBNejFGTTV1Z0JNV1JsM256MmJJNzNsUUFGRUhjY1JvcGhhWW1aelpuMlZYSUw5ZXNyOWVpTU9Yb3hnSXdUNnQza1AxTkpaMzdROFQyU0MyaHZiT29SZ0lvLzNXVDBjVDgyblJYMWhpSUN6Yi90dHMwS1MzY3hSZlBTclBxNzdEREdncEFKNHMvbklobHRqaklzeTUvUCtMR2NFTnZ4ZG9XUEk4LzhMOHg4SHNncXNSYW5ncUFEajFoTU9ZWEN5RGQrTFVUZUNWU21sUDY0S2UyVDhOaWVBWlhybjJxY1VqaGsveWMyUjZFSFpPcW1GZDNBeGU5T2RMZGs1bXVmVlJLQXNnRmxFbUdHK3dDNDRqY3dVNUtoVmZDTHJJb1BTMk8vaFhENkhwOFVZM1FXbnovNTEvVWpvRTZ4c0NJQ2J6Mi9ob1ZYWHh1bEZ6b2NIYmVmMytvQmVPVkdCQ3NoRmFBTFlqc0lEVGprVVIxL0ovV2xLaUxFZi9Za284Z0cvTHFqdUVVbnl6THU1V09ySjQvOTFOd1BtS1laQVdCbjB1L056eXFoOC93QXdaNHptTGxUNHJwSzRqTHYxSGlxcUtlNFdZM3NRTVhqWWdEZjhxc2E3YlZrTTZBSzBoRGlTVkZKWmQraUFEZ0NadzQ4N2pwUHIrSVB0VkhBaU5sdm4wN1NmajZFbVpOc2pmREQ5dUZJM1pmY2FRK2NDK241aVNtRjZ4aHlOSnZHM081YTFadlV3bGd1NmtHTDNZblJjMTRxMXE1UkJ2Uzh1YTRGV1lRLzdUSjF3VXd6czlxUzlDZ1EzbGRpZ2pwMEdCcjRhSmZBdGU1WVNYb2UvMnNTMUJidk43Zm5uWWdvSHpBV081Vml5Z0lBRTgyay9Ea1ViSG9QVGdpYXRsRk1CeW1DTStNUXhRSDFhV1c1TjlRS2EzVmFaQnk5VWh3R2I4LzhxNFdIUzBSWFpJUnFTVFFGNGt0eEJHL084WnFZcklJZkdURDBPZDZPSmRlek5YMkFWM2FFNzBPVnduWFloZXJiNFlXQkMxcXVXZ1hTNzZ6MEF4YVdsanRPRVg0Z09sNmZjdjZYZ3lVT2ZoUTRhUnFKZmd0RXhZTnkxemNuQ3hoL0ZmQlBhQnZ4U3BKS1VGQkh6MmgxSHZ2a2JMWnZNcnpsVXdWTzZId2JHZHlPamJvZHk4QWZBVUdEYzFDTDBzY0JlTjZGWDhHbENzYURuYkgwTjgwbVo5ZDVVOTc3Q0FLTW9PdU5MWHVoaVppMDhNOHlYVXI1WUF0aGgwbGk2anpzaEc2aUhqaytQZ2Q2Y1NwNWk5MUgvTm11cE9uN0RUWFhZSHA0YWR0OU8rWkJNTVhQeWpvOGgya01YbFpuZ3VVSThnVEpYS2kxRzdFWU1EVkY4REwrTlRRWEVidkRuNWVrV0FtUXFmV0hHNEtKR21EUS9aYXNyNisrODVOUVFOVDM2Y1NNODZDcENKVGM2TW8vbyt4eXIxZTBuSmxabmxIaFhTVktvREV5cjRsL1lZUGFmODluT1BKQVdobjArTy9IMDhoNllDc0t6R2hWSzdwSjNUV1lOM1hyclZId1crMWJGMzhJZFd2V2l5QUZWbWhQQ0lzRjIrMEFRVGJiVDYxSjNSS3NuSUJZZ09NV0J5aG44T2cyZHdDUXNhdFZsbTJRODFLTUViMnRqditaM2pScTgvWi9sVytkSzliSEs5KzE0eG12c3B0eVFGVHRsWE9IUHEzYndzakJNbDRMOFk5cmNaRVA1cStlUEk1RjVLaENTVURBanhQOFFFUkpVK2wwcElrYWJidXVlVkNHSlNwOW12OVhkMEJieG0vNjNIeW5jejc2L05MV2VQUzl0ZlFEV3p5eDVpcURsd1A2eStqei9MSGcyWmEwbXpFYnNmU1JLZ1czb3VRbEhTZWNmMVcrUTlsQjkxZzZSbmdqSTZkcndTNUR0ZHRMeTNpSVQ2dzExbmVlNGgrU2creDR4emZ4MlB3ZHljYkczNWxGcDIrQnFneGpyUWFtQXJuUlBybU05Rm4zL0ZFSXR3dzBJVi9mTTB0UE9SWFZUcXR6UzlkaHpWcWNnaHNyMDRwWU1xOEFWQVJPa2tVMXFpa3YvRmkzMUNGN1p5a0FBY0lCSnVzSFBtMXZ5RlFpcFNKVG5XRjV3WVpLeTZaR3ZUYnYrTnZ4eG5lb1UwOTJkQmV3aHg4K3MrdVU5VTlaOVJFWUdpQzBtUFlpdnMzem5pZzJOb1dXcWdZOHBJYnBJOUpXbTNXWkQ2eEU1RnJ4SEZxMkV0bWZFbHV2bHJFTTUwRlN6S2JCSVQ3V280TytmSGlaSE1ZK2xEUGRUckxBbjduL2V3NURZWWhyKzJaZVJmdmJuMmkrSG92dEZRS3RjR0ZWK0RXbXZHaWNWdXR1enNuUnVXLzBscnc4R3QwZ2QrL1BPTitiZW5xMCttbzFpWENQdVdkeGNqT1ExZFlhZml4RExYUVJ6TkVVYWlnK0p1K1l2b0hhZEJMNFFlRHJFenFJWTNxSjlzZ1VkWVJBZWFrVkgvQVU4QjVsYU03UWFNbE5TMWhtTFNPNjU1bjJvdGFFYmlGN3RjWm02SzlBaTVrc081UFAvZHZYT0dmd0hMRXowWFg1aFErcUo3VVlpc0toR2Z6ZnRxaCtWSFl6Q3Z6Q2RhdUdydEJ2d1R5N29qTHAvUWV5bk5ndlo3UithWW1WdSt1RHVRaE5HNnF3NHdzbDAwTVBFU0RHa0llVVhyTjZNYzloV2ZsSkxMdndYMFhwZ3ZZYjg4V1BzU2RKMXcxRzk5NzhPVGhFQWRNVys5V1BtcnQ5QjNSUUc5aXVYaHhXcTNRbUorTmtCK3FubzBtMUlKZGw0M3IydWxaeTQ3ZUR0Q3NZY1ZlTmdOV1l2d2lkVm4rR3VZWVpULzM4Mmc1T0xxQWFiWCtUSFhuVFRzeklXRVV3MGliZ0RNVkkyZVJBY0MxdFJzVlJ6MEJWR3E1aEJTdEFXTXdSdGVjYmdPMnozaG9RZE9xTnJJRS9kVUVNM3BpblVlWlczSlI1c24yMHI2enNJVGhiUmN4RGUydXpiK2JxUnM4QXBLTHNxTEZXN253OHVNYklubzlLaFVLU0syRzMzWldVczkwTDNhNGgxQm5FaHkwMjg3SFd4TnNhNWZwMmJUdGNOSVp0N3pqN2Vxcy9HVldlY3BXSzZXaS9BYjNtQU1hWU5mN3MxZmxFVENUR0pSLzlDcUljTkE1N2NwcnlVWXpzZkFnYmNpdUVPOEpOYVVaUUdPMWpPZ2kzWjM5WDZnWTZaVnI1OWxTekFDT293ejhrRzUyY0tJY2wvcThQSzBFSUI3bS9kUVFSRythUDlkNCtjZUxxN3I2ODJubEFheWJhUTlPd3ZZVDBhL1BUY3NwMDk2dUNTZXZYQWVpTlpXWVJzRGFHaG5kMmVJYVVsTkYxcllpTGRpV3JwbmN6bU1ZL3pNdm5MZi9tcUxtVHJjdCtLNkRUVEVPSi9ha2dFc0dFaWpzakpWQUFybndvdVphOEJDV0xqdmRLNjlERzRsYUpINUNkaC9FeSt6TGRGMXdIb0ZqQk1SZUZPRkhyVzNNcDFObTlJUWZ3TTVrK1hrK1p3WE5JaFRkY2xZZ2hkaHVxM21MQ2RHUk42WUw2NVBrcVdoU00rMk5OY2pFWFN5U1c2R2RDWFhOUTJkU3hjSGFVaGhaRUNNa1hoU0NhNmFvOWk5bVlxVGVBSFRqWUpsYytIT1c1cnZoK1F6V2ZGb2FHL2NPUUtsbkdselVxSk1RcjE3T09kNnVUNXJ3ckltcXZ0RG9XUVlDMTZLZFVhMy8vWjwvQkRCPgogICAgPC9CSVI-CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24-CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I-MTwvTWlub3I-CiAgICAgICAgPC9DQkVGRlZlcnNpb24-CiAgICAgICAgPEJJUkluZm8-CiAgICAgICAgICAgIDxJbnRlZ3JpdHk-ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8-CiAgICAgICAgPEJEQkluZm8-CiAgICAgICAgICAgIDxGb3JtYXQ-CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24-CiAgICAgICAgICAgICAgICA8VHlwZT45PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MVo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU-SXJpczwvVHlwZT4KICAgICAgICAgICAgPFN1YnR5cGU-TGVmdDwvU3VidHlwZT4KICAgICAgICAgICAgPExldmVsPlJhdzwvTGV2ZWw-CiAgICAgICAgICAgIDxQdXJwb3NlPkVucm9sbDwvUHVycG9zZT4KICAgICAgICAgICAgPFF1YWxpdHk-CiAgICAgICAgICAgICAgICA8QWxnb3JpdGhtPgogICAgICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24-SE1BQzwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPlNIQS0yNTY8L1R5cGU-CiAgICAgICAgICAgICAgICA8L0FsZ29yaXRobT4KICAgICAgICAgICAgICAgIDxTY29yZT4xMDA8L1Njb3JlPgogICAgICAgICAgICA8L1F1YWxpdHk-CiAgICAgICAgPC9CREJJbmZvPgoJCTxCREI-U1VsU0FEQXlNQUFBQU5pTEFBRUFBUUFBMkhzSDVnd1dEaVlXQStJQmMxOHdCZ0ZnQUFBQUFBQUJBZ01LUUFHaEFUa0lBQUQvLy8vL0FBQUFBQUFBQUFBQUFBQUFBQURZUWdBQUFBeHFVQ0FnRFFxSENnQUFBQlJtZEhsd2FuQXlJQUFBQUFCcWNESWdBQUFBTFdwd01tZ0FBQUFXYVdoa2NnQUFBVGtBQUFHaEFBRUhCd0FBQUFBQUQyTnZiSElCQUFBQUFBQVJBQUFBQUdwd01tUC9ULzlSQUNrQUFBQUFBYUVBQUFFNUFBQUFBQUFBQUFBQUFBR2hBQUFCT1FBQUFBQUFBQUFBQUFFSEFRSC9aQUFqQUFGRGNtVmhkRzl5T2lCS1lYTlFaWElnVm1WeWMybHZiaUF4TGprd01DNHgvMUlBREFBQUFBRUFCUVFFQUFIL1hBQVRRRUJJU0ZCSVNGQklTRkJJU0ZCSVNGRC9rQUFLQUFBQUFOZDJBQUgvazk5OUhHRVNMQzBiL1pZWllxVjNuUVZ4TUFXbXpYeHFEVWhlNFhZaDk3V0RISCtoR2RMV2c0bGI0elVrSlIxMFkrUjYzaTBSenl1cFc5N0VXb3RHNnRpUy9TN0JQTW9qMEFKWVpRUzQyOHU5VlJodkJHQ3p4dTIxWVhUYnpqcWpzcVhpSGhBeXBjRTkyRDRrUmxpd3FuSXE2M2l4OU9VNGE1Mm5INVEzVHZKbXVQYk9BTGkxMktTdXFNTXlGZHlqbGIvSDJOOGZZN3creHVCdEU0Ry9lblRvelg2d215SlVBSlltNWZ6SE5OcERmSTdkNWo5NFB6SEJ5eUFqQzBvRCtDeHhtRXhwL3diMENRWktMOFZiMnZyNlhXeERmaHB4ZnpYK0JBMVhUeGJBZjFzdytvOXFkWEdBVkpKRDBwQ3FqSlpSKzhXV09sYmdZSWRzbk1jSS8yaGUweTZwNUhzVVdkb0hUdUxvY1V5YlFBNUU1WUJramlvVXFHckJQVkpmcDVoREdOR3VTUGtVNGc3dlZWa0JEMlgwQWpzZU9IYWFjME1CRHR1bUhobTVMSmZ2NXZUZm1SMzdQRFBGQ3Q5VXdGUDV2VGJhQlNPcG9oUWg4SnBpRmlPSm1aQU56L21uSFoxQUJ2Y29kblArR2tKdzRhNkhENzdOaDJmSk9TRkNKMCs3WStGTGhuVndDQUE3SWlqcFkwWDZWYXhOeHQxbmxyWWJmaWIzSjBJMU1uS0FpZFhNQTBaempBNHN1U0Zkb3g4N3pQNEJqRVA3Q2xGVndlOUt6NnNzSDY3dkpGdk81Z2tBQ3RKQXdTOC9wdlJaUkFKOUJQWDhXbFlsTVNnVkxTc2ZVWU5YNDhxTVpBODZtdW8veDltdEVmWnNaRDdOY3EyK2tYdFRZQnU2MmtEOHozU3NXRTcvZk9SMC8zNVJjQVEwSlRVWXFHSTBNeWhncHlPN2xhblJjcXBpRUxLU2tqbSsveDNZR3kxRXp0a3BDT0FLNGZ6MVJOTWFYdWpoTldhcjVsb2xGSXQxRS9DdUZrbUpPM3IxSWtlOGNQOVFXb1JlT2I1OHJkQnZJRUZBVk9vZzlWWGw0czRPck9wSStPN1NLTU9HNkxkYnFQMGZvVlhPODRtUUNmUUxvdHcrYjcwaUkySm12cUNPRW14aG50dlc3WU8vRGVlOUpPbXFMV0oyVTFya0lZdGgrV25CNGZ2YXJWSmVKY24vUkVDTmtlODJnWUhUZlRWcmdpbTQyT2VBNlFRT3lHZmFtbW9rcmtya2kxUFZiMmdKYkxYdE4zOTVlWTQ3ek1zMU5NUlk2TG5YQ3k0QzVYVlhONDlvU0FFWlZOT01rdlpuR0ZjQk1BUWQrSzlzWFdWV2JNOWZ0MGtNWXJZZHZNRXdqTFpqbzNwT3BnVmZaRWg4YklOdW5jQ2UrQzlqQ0I3TytyT1J5RUpMc2g1UWlVLy9LOFFsZ2Via3VoRjRmSVJrWHBnbXdrSXZzMVBkeVgwWTR4RkFCTWpvMDl0N29iRDVMSVhUQlRhK0hldkFJZWdReWltZWIrSlRWOHhDSUdieVV1b20zOEFsQXJXWkNLTitoWk8yREo5YXNlMWVGcFk4enlUTjJ0UTJCYWxKaU9LK3JmZ09WUDhBOC9Mam5HcTZiakYvTEhTTlhEd2RwNUUvVENUT21aNTFwNHRFdEhScGk2aEFSa1d2NURzSFlzbFRLdk93dG9zdDZJZVEzZzZ4K1VyS0lwNVlmT25SdERjaW9FUDRyLzJ2RUtMaXlFMUJ2TmdsUXZsb05BSXhyVWNpV0g4UFZGOFplb1hHbEhhaEhwclZoSVlvTzRJbFVSZ0RBVkwzeWY1QTNJY2xaemFoS0Ridms1emI4YllpV0hGeEhYMHFsTGFpZGYwNzY2b29VcEVudTdCeDFESW1lTTd0TGdTVGxyNDhGTWN2Yk5YV1ZJeFo0R0lwTWI5d3lKZnlUSzV4WXlNM1NyRXpKdWpLN2o4ajEyaTVvckdtbXAwL3ZNdWQ0NmNzTG1yQkJRRlV0Yk1SOGgweXhmdG1mUFQ0aTdBUW1wSFNrZnprcytWdFJHdkMwbWIvTHIxdjAzRXN1bCtIQk9zMHRIOEo2L1poTUNKOGRhekJvSHpleFpvcWhzWXFqYUticzhJdFJDeDV1UkVaVzFyNm5nVnlhNG1qQlM2R1E2YmRnSVN5UXN3dEJSS0VHUmQyaEdONzliWUpUaU9zVkNpem9id21CSGFORlprUmtGdGRuWXdhKy9YOVRRQ1BFeXJhS1Z3YmNBbk1mVlFUdmlDMzVqWmRXSFM1dklHdWdaRVhJQndOMkptYTU3Smg3dnhXTUJ5M0wxSDVsN21qLzIyTWZCMTh2YXQycGZCdk14YzV0YVJ4TGhkOERyZ2tnNXllVUd0dHF4bXhSS2pIRUVmM0pjVEV4czM3NHMvdVMrd1R5N2ZBL3YxcHhBT2dSOHphem9CdXl2MnlQZGVVZWFQbllacE5JNVJVQXpnWEptY1RLYmRaN3kyMjRscDFjVzg2Vy90RzRTSmhkVmFnUk9va2tnVmQzNU1YYWRBbUkwTUs2eEhYSnNQVkk0ZnlWRExNMzBETkZDdEJjUkFlNThaWDM4dHBxOVMwK1Rya1prdUVVRyttZkhYRGtQWlM2L1lGeXY3c1UxWlJaa204cTNwWWNQNStjSWxZa1VzL29FdXQvM3VLaHBLR01jblVvTG0wUXArdS9sV040SGJIZ2ZwUFZ6YkNmRzNoQ2JmMWRxaGZwZ05ZMDlqdElxbWRNUUxNNC82QlBVdzdaWk5aVk5LQy9IN0U0NkJaTHFuSW1OL0hhOEdNaHNpZ3VsMngwbmhuRzY0WjlHNzNMYU56UUhkRnptZFhvS1JxOVQvUHc5TDJQdDlQdUgyZW5tQjdYSk9kYi9mc2lsWml1TFp2aVYwUUczM0I3dTc3QTM3YVU4Z29ZQklzM2tKUERyODY1Syt4bTJibHZJRTc0YzIwZ1UzZVN1QVhMMzlrYWpBU1Z5cUxzdk0vM2JXS1pmMFlldFZvQUZEQ3F1b212ZHZZRUpmQ2J1VGt3dVB4YzJsT1oycXdONmZtcWVnVjNwNytOZW5pclBodXR6aHpIOEJ2UEV2dmMrak1yOUp0MkJWVGtwbDM4NTJEYnBBL09sQkVMT0h2c0NkMFlUVEExWW5SLzNwTVpHYXJzYjM1WWtSb09PRFJmQjM1dExQU0ZUTm9lQnZEdTRtdXV4RXVEOGhQQkVhdXlXcDZNYUZVMnlFMnJjdnZHeHhZd2Z0Rm03ZEZyWHAwOGlFbDl4dXBsWkhGTDQ5ZDNkbmVxMXc0NDBFWWJVQ25XSCtXVTdlN1lRU292UmNsd2xqTW1OSDhkWExrY0Y4RExWbWJqeDljdUhMRmY2Nk1rTk1lVnhyL1VIVXd2a212TGt1bjBncXd5YlhCcXl0ZGRBN3Z1VXgyRkx6T2krZEhGK2F1OVNKQlg5YU5TaFVZYXJmb2hmREM0Vjk5S3J3K3VySW02alczdUcremRmQUJXWXVadE1FcHYrOUJHRTEyU0sxZytjbnBRV0ZUdHZJbG5yKzQvT0FGTWRJY3J2eXhyd2JDTjlDMXVSV3QyWnl2YXFaSWFVelFxTWhGTlhkdis3d25uMjBEaG1jazY4VTZZZy9CSkxHM0Ywb3JaSGV4QXdvNHdMOG1OSGhMdStybzlVZTM2MUNjdE5lekRVTlVsWDN2dGI1YnUrN0F0VnNLZkVvKzRwbXBjOGszb0VYNlQ3bGI0NEx5TjRyNjN2QkFKcEtpbUIzTndHcTU2c1BiSnR6WnVoSGttMEM0UVF0VjdtajBvR01vSGdXcjI4a0hOb2Y0MVVuUUxRbElMNEtxcS8xZit3YmdrL1prL3M2encxWXZVY08yK0pwaGdYQXNRNTliMytydzdUWlhYbG8wSG9EWGtycmJ0T0xzbXBVR3J3SjdpVzZTNWN3S1FERGRpbmgxcFFQbENwRkFmMDcxRElTcXZFMXdaUmF4ZEFiRWFQVHo1WXE3MFpwd3lFWFBONmg2OHJ6UmZwRDRPTnJsREpqV3FSVVR2KzBuSUEyYjYzQmM2T2JVRWVGUktUUmg1RWt2NThUa0hjL3l2WVFKMklQRGZCS1hVVm9qdk5UVk9ZNER0MHZhWi82d0RLQk80dUc0c2ZFMW9UeFhyN3BteStFUWJXejh2Nk1Ld2RQS0NMZXVEOU12dUNVbWl0ZG9VbkVEMklCTlpKVzdqTTg4YkxQNW0weFV1ejY1NW1Ba2ExeFFMTkJLUU5ZRFhjQmwwSTlwTnpNUm9hMEY2RnZHR29YYmhvTldrTzFrbXJNbTBvZVVyekx3MFBFYnBTRDlMSHo1Z3RNZmdPMFg0bEUxeHJ5MG1BTmhaL0F4YzhMRXJ1SFRESnk1Sjh2YXQ3Vy84OTIveGorMFdtaEwxNDZYRjRkbUZQb2h0VzRVTmV4NVN0bVdxbUdVNGc0YXo0UTUwbjljL0ZQRnBzekoraVNKaTRKR1M5dEF5K09HRGduL0lTQ3VzeXdRZDRPSTNDRHV0VmRHZ2dvZmxNS3ZjY2x2aldlUVZWaHJteFNnU3FqMFQ3T1RsdndvUEEvUXVtUEFvdEFMMTg5Y2J3ZHh2TUhLZTlhWFozM2t4RkhTUUlodVdheWtHeHR0MGRqL1ZYT1NpeE5EVUN3QStRb1Nhb0p5WXBLS2dNTEgwRUd5VjdPM28rQ2licUZ2RExsTWF6VUdZd3FIQWRDOVlSVG14QTdLREhNdFRGeDJXNXF3N29JSkxQSW82ZXdPMnhZQ0pSWFVudzUvdDdPeHZxZWdWT2NyVkgvdmw1WlRzN2JDRU9pdzI0REwrYWpQUkVqVEd3UXFySlhQSEVqUVZIcy81bndpYkcxK3NIVnpuQmEzSW9KTVJ2VG9xT041c3JDSW5RVXU2MTBVTUx1Uk5UYkxqbzRTMDhSKzlGVnFnZzZjQ1ZDQTAxKy9qWUNPODNmQlBWTWxkTHBOUGZTbnRTOHE5V21sMGdFeGNsYkh0R3BOdzZpSUNUemhSVUV5MVd4a2U4bjdBajJDbkpBN1ZCRXJPTlQ4UHE0bEx6K3R4LzVwdmZKcVE5K1FXT3BBQUVZZUdiYkpTMFpEcWg3NFpQOXdOMTlGMmN0ZDY3cDg3bzBLZitzYzJPMTRPeHBoaTVucjRDRHoyaVIwL3dqRllJVHd6enpDM0dEb2QwM1RFU1F5akdvbkZhQlh4V09xVk1Xck11Ty9EM05iSnpqSHhSQnlLcnl5a1lLTVYyeHBIK1Bwbi90OHJMa0lYSEJsS2k1QnhTRXZIdDN5d3NtQ09aL3E4c2E2TWlZeDgrWUduZEJJTmZVS1A3eWJSYkp1U2lCTDVTTzlUaG5OV21hNG8wVHpTMzZMajNPWEltcHZSQVFtNTFnSXp2UmlvQUIwU08ySExpbnhRUUtTa3N1cXMzUjBqT2xZbG1nd3JBQml2endqQzgyQ2M0NmhtNTVqYjl3QXdCY3hUekdCUWdKWG13OUFtZm5WY0tPUzExRXdCdFhXRWxBVmtHQ0JaTm1JVXpzTkVEUlo0aE9xZk1ZamxDY0tsTHB5aVl6UWVJUzlYMkVjM1dEbmNENlNuMzlROXAzQ05rSUhYNkNEL0RwZTRpdDdNYk1YWC9qVVN6ZDBOSFJyZlRIMU1HWUJzM1V3ckkvSWkrc0Y0aEgzS2xKajRseTlzTVpmOUhHcGVMNzZFZ0RhdlBVS1Fuakh3eFdxOGVNRTRvMDhZL05nTnFGdXpqbGRzTmdDbE1IcUVWYUJxa0xlUys1UXgrUjIyVkpwVUEySUxoNmozS054ZEp5Qjh1MFpsdkNXUGw3bVRYcktQYUJlZjRoNU9uWFA3SWpnaG9LZnRyRTB6NklBU01vQjhmQlR2T3hXWmg4UEU2TWlQWFFLcHNDemI0V1V3Y0pWMnBTQ3h6ZWlzeVlSYU1zbWFiWkkraCtYVTFNMFdjZ3lqY0t0TkhjbWFtSjdMMHpaU2ordG9zczU3d0xXVHNwRlIzL3hmY2lDcHBRZ3diZzZ3NTVzRU1EMjNwL3luRXNJUzVhbDdld0RuZWhOSFp5YlBCUjZRcXprb3ViTWZ0S3UrMU95YnE3M2toc244OUdPRm9tbldCSGxiNFpQWFg1emRwbm92aW0wWDNrY3NaZm1tcTA5VE5keFJicEJjS0ZiTjFjUVRIU0YzM3hLeDR1ZHZ6VTBtQzRRNjNCT0w5UUg1eXpVR1VHcVI5V2EyOXJySEpjaENjS3VMV3JZbmx2STcyZ2ZYQjV3K2MwRHpWNzE0NzRCVDZySHJrYXlIcDVpcVJxRFpha3VUVVlVbmRxTDl4WnN0VVlLTXJKelVLcWxmS0xTVmlxKzhHQTlLNTRxYlhMRHlBZW1YMGhNakRsbm5qQXRFdGEvUklkWXRSNnVnL215U25qOEd3UTNHS2VJazFVS256bnBTcE00NnF6UXZOY0hLVGZDV0xBMVNDNkFmNjBRdElDbXBnUVFCM3cyR08xUGgwL0JHZzFvMDVwdzVLMnJocVBoMThqajZYc0ZHQVJudC9kWU56RDRROE5ESkRldWw0OG9FRUNwdXN5Z2tiSWFnSjk3ZVo0L0Y4Q2xtb3drM1o3TXNDU09FV3FuVFZscTJ5Q2IvMkROWGoyMFg5d0tmYUdwYmRuamF5VEJSWC9wc1J5RmpJdndoeWlycFJKdlNJV25DTzZYcTZEUFBsVVJQbW9SbW1tOWl2eVdDQkh2U2JlWWcvNFczNGN3Ylkwak5EUHpOWXVRZDVYYmVFYnZmUU5hMTVwb0Ezb01Yd3RXUUZmMmEwV29YdnNmR0lrZ2xIcU44NEZqd0NWM2xXa3dhUERpVGhTbTh3S0tWRHR3eDVndzh3QzNob2lmNTVtT1dhU1AyMWw2aUdwZ2IzUGhVUkIxaTR3Y1RlNmxGS09XVHJoRUVmREVVTU9abTE5YzJDanBJYS9nUlkvWVJJUm5HdGFDMmNDMXBMQnFOc1lYakVOQ1lydG5mNHZIY2ltaEhjRXhLN1Noa2RUdUJrc3pMU1hCckUrcFFDVHFxcFQwR0gycGdXZ1drNVRFK2cvbE1WWHpUMHRYNW41WU9Sa3FlMGVqMjlVNy9BZUZhRGs0Mjg0ZE9VRUNHd3JZd0tVczAxenlmRWtyNmdlN2g5ZjZWT0lvQW9mNjRlci9QNGQ3TTNnTDVFSFFEVEVRMzl3L0NaWHFvdUpvUkRlbGJXczVpbEF4c2MzWDdmUnRsaURiQ0gwdkVsdFh4NXplaWVwa3JvOVVNczhyMW40WmhwL0c1UldmUWFoYm9GNDZ5ancxeGg0ZG1RWTYva1dlT1o1bnRKaHZBL2wrRWgyNVorSzVHQVJ5SDlRSTVMYWl5cUwrbVViVFZRaW5XNVQ2NjhjRFBOTVlKbUVCMUNmUzlGY3AwYlJUbkVkQ3VUNUVUbnZHVkRMam9XTGdZZDhwWnBtQTNCWCtTa1hTd3dCc1ZLZFhRalpjU3ZEQ2lSL0VyZWlya3EzREFvME5LdzZRZ3ovVU51T29RUDdkM05EZk1VQjlTNWFHUWoxRFhDdEpnVzFuZ3NZbXY3L2V3N2FNdC8yVG1UQXZwME5ZTENXNVNMeVZkVmhBbm12VnBHMEh0S09lYXlOVmtIMzY4OU9KanNRS09CN0FBeU52Tm9CZ2JTaGlkaUZ0b3NwM0dNZXk0QWRjeDBYUDZyY1RBcXB5d2xpVzNmNmMzdmZxeGRmdXdTUG5ic05oTDloalp0emwzRldmYUxJMm03b2dlclRHazhlKzU2ODFLcUJHcDlPSURNZTJFS0w4Z1NUR3dtV2JCZjlnekNCNzJvWnBtelB4Nlc2dTBETnFLa1VjZjVtcExsVXliS3RKZHVMSXNKSzN2b3NYM01uTEYxMEI4UFl5V2ozZ2JGZVM3VEw2enJOZSsvTHZYdjdBa2hUWFdlSkN0Sm1hUHV0MGhLeEtCckdXTE5KYjVXcXRTd2pVZ3J5VngyNTFUSU9OOUJmb05pamZ2THBmWnkyeDZzelJYY1oxZlQ5S0JhZCtmNnhlTTNoU0dBRGVBT1dVMHVhM2ZROGQxZk1GREo5V3g5d3hYN1NYRmRPNTREbHpiY1dEWDBDdlhPZjI5eGQ0d3c0Z2V2WUF2RXBVQzVMcTU0azQveXltUzFWYjFLa1RXN2NXZTJkWkZ0Z1lLUFQvSFNqbVJTL0JHVFZrdGp6bGE3V1A0OXU4MGE1MG5nTkduUFc0TFphZU1OVk84a0t0dGI3OEhscWk2RWU4Q05aMVBkZ0tBM0pYKzZOMDBheVVPVkF3ZWpaZ0NnUWRKaXNHZ0FKcG5LL1pWRWtWV2hVNEdxUThvYlhhK2hGZlFPZCsrRVhUbmt5bnNRVURtVzF0TkFyVUdvZE1GWGwwNWlqRkVmaHdiUFhjcThWdllLUm5GYksycDFob1V2SkxPYTFERnJnN1VGY2pTOWh2SWdkaVNyTlVnak9QbG9yZGhCRXQ5NWgxZW00SFRwcHBCM0pobVpDME5yLzRvZHE3cWwxQnByMEhZdmFPZGdYZE9FaHkzZGtoUFpLMVhjNjB6RDFqQmhlN1kvODYvTE8xb0toemw5S2FMczd2eW5taWVwZkxIYjVDdXJ1VEthS2ZreS9aOTF5UTNwMk5nM2NTeVRrZU5WUHJQbnRZME1hZWdKcnk5RXZPZXIwcUpLYXRtQUNnOHVpWjVXUjRnWmtOQkUyeGtyR08xNm5LN0hjYXRQeUhnRFZDaTFPc2hBOFdCNGE3SkppcEs5SFhKeVlJcHkxcTBObE1MNC9BcGdFUkJCeDVWYkVPVGpMQ2VVT21lQ1dPT2s5djJFU2YrVWtxTTczQnMzQWljdHFyZHd5U2dVV3EzdXFwYlRmZ2JpRU9BMjRSd1pROWFOWXFORlk4Zmh0V2o0TDhjNWlzUUEvU3REbW02dll1QzNXVzZxTCtLREhhVjVyZ2F1M3hWUGE1ZWlZOW5GbllTOWlHUGsweXI3VFdDZUFpQ0l5VUowZU5jVzNEdnhoV0FyK2xYUTM2cFBDYVg0Sm5aM1NDbTJ6SEprMW5mTm5ibEdYWE9MMmM1b2xLYWJvb0hUM2JqM2djNmpjbzZDTWNYdEFJU2w0VzlIWHdPbzIycXV3WmN1eGVKYzhDYXNNQmczc0wycXB5bnN2RHpHMU9GY2ZsQkdiOFJVNGlxSmJERStaT0RpZHA1NUgwT09vRnlCT2lGQjB4OTgraCtBYzV3TFM4UjJYN3MybHNlUmgzeGgrMVRUUDJWOE9uWHlqcHkwOFJFaUt6ZWo5VThWdkp3SU9jQlk1RURMRjVLWldQazkvbFBHYVlBWG1vMFh6aFZQOXR2R1pxNEgrdjBkeGNlVytkZjJINlVBNWF2VGs4VitGRWwwekpoeDRDV1BRSzVJaUFGR1I1Mld1VEp2eHlpTUZKekRPWXJBMmNCd1dVTXVBUktpUWU0N1hBdEIyMjAyMzB5ODBSazdlMEREaE5IbWxXcWlaemhPMUkyVWVUODFVeEpkM0d0SHJNa1dyeWVFSGMwK1AyZlIzWDAvVkpuejlXNCtUWHVQMi9TUmZzOWRQOXV2bDlWbVlmdCtrTC9aNjUwK2ZybGZWWUFNYW9kbEVuaVcvNHFBbkxTSHRoVmg5alZQQ1htRVFGaUZNTVpxZjRDNTZmZS80WkJESzQ1VFdmdzVMVTN2UjVJaHJQQ0w4RGNGeWZlWnVNcEhVc2FRMkFoaXRVbVllNVYvNXJ5c0NvYXdDOEU2ZURZMFl0RmhqT1pWUUE5MFA0TGRuZWJWeFlwZmIxN2NkUkVuN3pnays0cTJUQnJlb2hhVWY0R0RYQnRZeEpzaURCdEJ1cVF3Q1o4TSt1RVl1SGJzUXQ5eFdYdWlwNGNIVFkvQVVNMFlrZlhyNGlwbG5pSUpNSnp3d1lrSDBXVTk4RFlhOThSaUtxNjdoMUpnVUlaUWpRRU13UUZpbTIxS1VzSG91anRlQXYzODdaZzhVT1NDekt4MHI2RDhOcXdveFVXblFubGFNYTNUMk5pQXl4R3JRaTJ0d1pJbnFTaGhWb3NFZXdSaW8reHlwV2EvM0NzL0FiVmg5LysveWc3Rm9nYlhFMmJrNjFKZnAzOVVjbzFiMXRWdWUvN0JnR2V5ZVdnaFlsWGdKS0pOMXMwTDRCRzd4WE9FcSs5eGdjSy9wMlB3ZXFoSTBub3JKZGhRVHU0Q1VibEErZkgwSlRWU2dpdUZ5UXVEZGRDUkxEZ0J1V0lxaXQ0b2NRN3RxNWxnQXVySnQyMlI3UE9WRDNDZ1FuQS9kYW1DVHpGd1hkR0RvakVmOFp5dFhNblBLQTZlV3RKck5VRVg2bzlEam5VNzVNS2grb0J3WkxOQUlEQ1pGQ20vaGJqZ0gya05LRlV2TGIrWE9pbWVZTzRRcVNiVzNZdVBxb0ZiamJ3cGNqMjBzWGNmcTA1Nkx6a3lHUGVnVDNTbDhCSDhkR1IybXFkWldpSmFPaCtqUkI1MjhpSWl0VEpkTlhjRktjcFo0ZHpKV2NrcWpOV1pNWXlRYmcrL3lJVi9uc29wWEgxbE9RQ3ArNVo4N2o3RjEzM0E0YVZHK2kvWWVlMEp3UGVXbVVhbUx0SWdKa0liVEpvTFhoaVBOb1VRWnVMT2VqRXB6eTZTZWdwWWc5eThGZ0huaCt2L2JKVm8xamUvM2Z4UXdEbVRMSGJIdlNpa1BZUGZTQnpxVkU3b2M0c3BqRExleTZya1Y4b2FCbHhETk1EOE9mRkg5bktWc2l0YXJOSzQrczlBNVRGaW9Zdmdxd2NTeUxrbjF0SUlTT0srTXZaaFN0M09UTnF2YkpFck5aM3N1YVp6Q0JmMkpTR0JtdTV0L0psdUovNm56UFJqRnY4aUlTcEI1Z2pWRnRwa0RQa2VGMUkzT0J3K1RjbjZQR21BVHJTcXBNN1JGZzBYOUNGajlBcjhkTzNxMVlOZDAyblJBRlR1TThUclNiOXJzNlRUd09nL21ITU15cVQydVkzMmtUeXFhMU4xK0dmbjRxYXBQYlFJZ012WTVXWkh0YndzOHlac0t4eUtRL2JiYjJncDVlUGxpNWVJTGU4RHNQUXNBdWlZQTgyVU1iekt0TVZZZTk4cU9hL3lObUdTcFRWYXVNbTAyM1IxR3p1eU1YNURlcjZnQzFDcTJLWWRGcko2Z24vUnRDT0N3Rmt3N0FQcmxpV202VDRBWVZ4TUpycXNndVRqYjFKanZtb3Qxdm5NL0YzZ2tFOXo3TEVXMkkyZy81R3gyd29JWFp0dVoyT2FsOU04dVI2OVJTZVNBaENIMEFhNjRhWWVwNlhSV0czdUtFTGt6bSsyTmY0NUxoOUoyempScVZqNXFjZk9NcXl2bFlTVzByMk8rbkhNSTQza1RWVmd5RVFWRHIrWUc1MFhDTERVc2cxV0p5Slo4S2wvY1c5bzM2aTVYYWZwdDF6bWw5VU91UzZxQzZzL2hFQkdPY2dkU21pTE9oNUJIYjFjYS9RUFpnNElITS9Mcy9CZ0NMUTlQL1gveEU1SmQ1a3M0K1FoUDlGdFF4UThCT09oL1VJTDNpd2RucXFXVDZoNUI0dTkrR2tWUnpUYlNCYmpRRVhhRFBUb1pRRS9oM042UHo2ZVp5NzRIaXpRWWt4M1NsZEE1NmJ2bkVyWHNkRk1GWnZNQlc5ZUFnM3pSbnBaTnRFang2cll5dTNYeC81UG56VzVaZzdJd2VtMzV0a2UrZ0pwRG1HQW40Yjl4QS9Jd1ZFUlBYaFJSUmRNVUxHdW96YXhoczlsaWVudGRhWmpDaWphaFlWb21rMGZJNEIrVHNZdFdQdGhIeFJvaWE1ejJsNXN4MnRNRGVCbGl5NWF1Q2VlbTFySC9qWGdxSE9LNzIrVzlrUVYwdjd5b21WYVIrbHBFVGs3VWtaRjQwd3kxcEJaYkVvUnNUd3ZqellvQkh2TFExZnpDeG1HWjJ4R0p1Wm1VVHpCZWFUSVJ6TUhNdlBVVkhvMGJwVG1mMUZKclNuUTQ5QVdFY1R3U2oxTG4xckNHcHF0SEw2REpha3RseC93ZGUrTlFtbFc1Wkwvb1FObjk3cXhLT0ZERGRWYWJZbDFXTjJtR2JNWWhJb1dUMHZ0K3c0YzFnZmlZeDhhVFJSNTFQUDc4aUQvckpicTNuVVdzVHJBNjdESy85RG5rZzl0OFhMOVNyTzJSU2h0R0F3WkxRTS85Sm1EMDVCeWoxT1lBM0tSV2F1QXRpMWxDZmVXSDRHQk1DakxIOURJVDFIZlF6aDhBdGdVMEZjanhRb1ptNHdTR1plU0hudlIwM05SOFZYS3B2WUdpS3JzV0gybXhoL2pqcGpJUmdicC9BSHp3V0Uyc2x4ajBMckZuL0ZYbyt2KzVEZE52aDA5YzA4eC9LZFNIbVZwVlY4L0M1Zk1lczE2aS9oZXl6Rk5za0s5VDVnRXkya0Mvc1FBby95QzZnSkd3eFFObU9oVzZiYzZiVFpJaWl1UGR6bHZVK1Nnb3BEZFJ6RDBLT0lob3JNbkhoeHY4UFZSNG1LWCtWNlY4aXRSQmx6b3Z6WW0rcDJhSWZ3VG9pUmMwenZWZjFPWC83bFUzaXRsZTV2eE1GajRTMlM1ZHg0OW1pbW0veXN6cWozWUN4WUllL1NGRkMzdFNXdHBKVTUxV0hPdEhYa3RSSjBQdklwL1Z0SUVhbkd0b3RvcTh2U2lzbzJkQjFKajF4ZEk3RElCRVNGNlQ0SjIrR0FMZENUMlhIc0hVb2kvek1MZ2tFczd1RE8xeDlRMzk0ZlJPV3lGeXJXY3dwWWlQSHlvbTFET2czZ2tBWXhJM1lYTmlhSFVhUzF4VjFhaEZuUkl4U1NnUjAraGxSMWcrL0ZMUGE2cWZvS3lyVVE2MG1Ob1A1Uy9xbldJeXR3Y2gwZUY0blV5SFkwNG9VRldyaXlaN0J4SVFGcm1XMUt2eWM2d1NZekh0Z3hQN054cW5ab09Ddnhwby8xVGk5bE9BWHgvYTI2cUc1OXVhUEdsVnZWalgyRHRqTTRVZmJyRTFWRzBzWVJwYVFnVythRzZkMnJCMWw2emNocmUwaHliYm1yUDBmMlhCK1FmUlVRZHkwTUhVSlpjYTMxTGN0VFcxdXp6Q1p6WWRxYmVJWU9IOTFpbGFlNDVadGh6VEhuMmtORG1neThWNmtRaDB0KzFHdng0UzNYSlp6UDhCbG93cjFGY0FnL25oblFWb1Z1YjJpTDNuVzF0T3YwRG02THBnamFzd245TUgza0kza09mWlNicHhmZmVJbURLdHYwaFVmL0tvcmJsbkZoYkpkbDRXTnBoRWt4b3Jlcm9YK0ZpYSthU01hTFpsWHFjcU5PSkpGK29ydnFrZVIvbG51Sk05T2NmRnB5cDNHMTJiMlJ3THN5dEFTVllWb3kySGlSc0MrZFJLQU42YkttOVJxd1cydzB1bG1SZjNhWnlaZWhBbndqdk5kbXNqdHVJYXhHN1VzVUI0UWJEUUFZM0pyMEhHbWRKQmxwMVZxWkcvQmplQjlVREZsaGRMRkNMODBjZG5adzdHNEQvZWgyV2haaFlsb1ltQ2d0NmpBemc0d0NRc0FzZ2E2OEtHeXR5dEdmMnNBOVAxVnFRYWxsZEtmOHpvVVhqR1BCaGtwK3hobWEwRDdjK1VYeVZhSGl3RlpUVk5DbkcvbkZiZ2grVEJjYldFN1pqRHNUaDVpM3AwMmxIOXZWTmw3YkJsZllXM09qbE0vRG9iUnBSb1lncGYwZW9TUWFIZFo4NjN3N29RNEF1d1RBUzdXK0tNeFRVUGdvbEpyVk8rcjR5bjMwTEd6bkhXZ2k3S2xrOFU1aStWU2I3ZjNJbXlCZERXdVVOM2xMTkdQNVJaRWdQOGdQaWRZNS9GOEtXRTNHdXBDMGhmcnU2akdwYWUvUnpWVEdnTVo0a3pldmpjaTBLTFNXcFMrUGN2OHZhaU8rVFNaVlI2MU5ralkzellxRFZGemdhN0pXSXVOYytuQjFlNDNlTmxPZHBaY2pHRk5aQnF2dWl3YjB4d0YwQUQ3TzZjd2xqdzZXUCtCYlFaY0QzajJvQ09sMUVNUWxwTGFHL0wxOEkyd1dPYVJtNEFheHlGUnBDQm84T3R1WXBWYTJOM1ZPMnhFa3dyR3ZlUGxmSzVTNDNtbzNMdmtBc0haQ0ViWHptQk1KdzJJSWc3QXNSb2dacHJIUkhtUGc0ZklMY1F3MjRNVm5sem81SXh4b3pQUEZyQUpWbHhmK3Rvdk5oOElMTW1SWHNteGx6cWNYblY0c2FnUFRJTmQxNXZhYUR5OFp6R0dqUUtlbmJ3ekdjUzVySCsvL2M0TVc2M2x1VFZsTWQzZktucFp5SG43M3N4TGlPQVdQYzJWdmRjSHF4SldlR0JwZ0xFSnU0TS9kVURzMEwxTERDYlVsT0E5SWt5d2R6akp5WmU2OFhTN0dsWGZRK3pVODYxQTdrcHFoMjYvWWhHSlF5RWt6ZFZJSHFnWng1WjNPcDR5NHRxZmxFbFlRUVlQM0hCaGZJTTZISDJkc2pQYzMwSGdFZGdCN3ZRM3NvNjlweFFjSWlwYVBRRFVtOUdyeGVNSjg1MFl3QnFvaSsxU1dhYzZ6VVF0NkZFU1JYN2JaUUQzNWswckFTN09SWVdaQ3I0RXUzTEZUV0QrRGNYVmlOZ0lXb1ZTTlpHOWhLQ3JLRDh1bUZSMkNpaDViRkJGUjVsSXJETDgzVWV6RW1OMisvZE9SdzBkNTVoL0EwdUJ5NGV2cUdGcGcrbE8vclhhc3EwRUdJSlBjY3NKMndWN05FNk1WdWcrQU1HditDV04zVFlSUm11emFjdkw5WkVqMGhSYktsTzlpSCtweXhlWEduVkpuZExxUzlHN3JNaGRPWi8vUEt2dGlOMUZNYnVRcGkzaTBqTUV0eTZTQ3M4Mkt5NCt6aWVoVUtpdHZNSGVEVkxYdUs0NFJmQnRrQk9TSHpYbEZKdmpLZHRwWHZqSk1yTkZiQkszN01pT3J4ZFluOEVJYlBSMitPaFhVTTFLQTlUYzlNNitud01lYnBQMCt6YmpyOGpBYVBmVVZVdW1PYzVRb1AyNEI4ZFBIUmlGbTFmRy9zekNHclNycU0vWjJ2NUtJOGVFTWNlRmpySkZhaGJNdmZvc05pSEE4SDZrYkVwMkxZL045c04zYm9hU0hRa1lvT3doUnU3R0NtejBMSkRXNVh1U2tNOTJJdEhlRjRDRmFzQlE4d0hwdEt5bEEzOFU4a3Vjc0ROQytQVHNhN2tKdXprQlR4U1FBK0ErOUNjVkpaWFNhOCtYVndsRjNnZ2YrejMybnpBdlRhdWxuTU5LQTM2TkNIdkRVd2tsOURsQi8wV2luY21wc1RyVExodnY0TExPWWZDamlMc3YxSUhZOTZMR0pGdEFhMXREWnIvbnFMcUhFWERkVDdkWlIwZnJWK2NFQVRGbGw5ck9INmp2VWZRN2VwQ29mcHdibFQ3M25HT3A5ZnRONlBEQzViU0dsSUVQc3IvWlBDRkpEWVRzMDYzOW0xSmdwV3EvVGZCMnlTdkhMdEtRc0lsUFZGQklQTC9vdWNIRWY3VHVnczg1Z1JGTi9LWnVwOEFSZzdaVmNGOE10c2dzbC9pRU9pa2ZJVnl6azhSTWkza3FZeFp2T3h1VFBtWEp5Rzl4TjAyY1RSZ3JFTkNIWXdIa1Rxcm56aUhRT1NxNC9yc2xQNFN3MW0zVVpndkhjdEJtUzBKU3poUnByRDJBdU9KYUVHNmkvbDZ0alZjK0RlcGViU1krckI0NC9PdHFzL3kzMTFYOHZuQTNzenkvNmhOVEpIK1J2d3dGRzNEUzBmRit2eWRJOVFINGlrOCtVVW9KUXQwYi9ZREUvZkoyemxRekg5aWIrdW9GbkN1VFR4Yko4RDZmQ2gzN0xORW5QSHFVVGVBSDk1THY5YWJKWDNEQTlhK0IySkRJUE1KZTJnL3B0VkhYclBjN0FrWVRZajBvdVZ6SkZPUjJlODRSVlpoMVExb0VQbStnNFk0d1VPMWV4RDRYRlhpNWo2WndOdWF0ZEFxTDZzcUZmK09pQ3NJeERnSThCeWRjeStPK0I0S202aldaYWphbmloZjNtajJ4UVk3K2ljbndGa1JWZW02QTRUbmpBbmxzczRzMGExSjRRZVYweFRCaGo1RlZCM20xOUlDdzFtSm11YjRNUEVDVkpHRTIySzFMRmZWcEFzeXExQWpMMHZ0MXFLb2JrSXlMNUx5RFZLYm1VKzl3MVRXYWJOcTh1V0xlblhVaiszYnBTcXF6a1VYOW01dk55ZWJQZHMvRXpraHdjSmNQREhrdnMyTjFGck84VUorckJmZDlldndPRGVPZFM0SElDT1ZSYU9GazdnYUVrdWk5V1JEL1dYbXZJRlBNcUIzdys0VUYrSjZBckJRUmZXMW1ZQU54c3I4SGN2a3k1WGpFTVkxZHN3MjBTclBDODVmOXE3cUhCUHA5U3p1em94RmZlaVpHVmFWOVVONG0zcm8ycU9TVDJxeHdZdlQ5M2hOUk1WMCs3YUVpejVzRXZDQnl4ZURoR1FNYkNrZVN1VTBGZ1RDZnY0Yi9US1EvQ3pya3d5VkIveHhGT2p0Y09IU1lLQXpRYVR4K1ltRDN4ek0xYWFZMzl1dWtqTHA3M25teCtOSFBjeW04MU1tL09VWlVjNEVGa1I5NVFwM290b2M2VkZleHZzcWdlQzB5V05sS1dsU3RRUDJsdHN6M3l5THdabXVNazEwMlNQcWxjTFhBWTJObXJXT1ZEL3paTEhQU3hkQXpVTmdmWmNZVmpBdlRuWElkRVNyYWdxeDdDNGRPamxhNldBOU9Tbk16V1Z1blBPZ2trbXBHeFFJRzA1NnVieFo5akVpQk0rWFhsOVpuZmQ3Vms0cDA0QWxWZXhsVEFwa3AwelRxTURlaTR3TFU1cHo0eFIvRnlwclgxNGxEUGNCSDlsMG0yYUdPMDJlR1ZzOUZFLzhneVgwdFFvcC8xbDNQZjltWGlKRWJON1NDQmFGTEVDVStiZTZ5RS9VdGY1OEl2TWowY3hjWUs4Y242Q012VWtDeHJxMHMvSDJDVjJsOEIwMlFYMWVqcWhtV0NlS3pvN1hkL0QyMVV0Tk9IMjA4UHk3T1ZuOXNKT01aeTFPa2JqeE5lMER0OXdqaDhMVzNjdzR1TllWRi96ZkMzcG14MDdMaWIvaW5pd2lHdEd6MEJDd0dRb1RXcmM0NXdJcnFva2hiNFJXaDNTcHQ5aHpDUVd4WHk1MGQyTWxXU3UrMHUwbWtDeCt6ZXZML1pOaTZ6SGVWdTVKRHQ2Q0RHaUtOa2dCcDN3empTYkJ1a21sazgwb3IzbXNmMlBNZlF1MzhtTU9mdGlwY1hqb3B3Wlp5UVl4RVMrL2pCaTN1R0lpQzdId3B1bWVmZW9Eb2dic0xTbXNSYkg0ckxZYWl3VkJvczVUNUxuSUNpK3prdkFXeWg0UEVKTnM3RG02UXlqWDNXOEtYNUVNajFNNVlqbjRrSzl3Nmk5Y0phOEpGQ3BuL1doM0gxQ2U1RDlhdXhEaVF6eXlxa1UzNHhhZXRxMThSNEp4TWJ2UEFpQ09jS0wxNktlSzBvUTd6ak1VaWRZWDFqU2srWEg1SVFFMFNoRzdoZ0wwS0pYSmlyQ0pNbVJtZE95MDJwaUQvUkY4aWlhRkcwcW91b0RJQkRCcSttSWxTV3hSaHFBZjNHcUQweS9jU3lGMys0ZDd6UzFlT3poRkg0SGpIY3VmNzVrUGtCYURXNWZUWUpvMjVkZ1N3NWI1RU9UQkZ3eURYS3kwMnlPS1U0U1BWSVoyOFk4YmFZeWFBOENHeFlTT3AzMUNRZGJTUVAyQldaSkZ0akRkZWcyKzRVSzNUaFRnVXJqYmN2SVRyZjdlSVQ3RDFjNnpuVDFuK3l5dHl6L3JPcVdhcndQOXpvL3lOVTRlQ0NLZWMxMmNGZlVYNlRvZDJaREU5WDBodzVPcDZoTHArTkR1SktQbGVxVlR3N09ML1ovT0N4Y2QvRmxFUDk0TXk2cHY4elNaWnBhQ242OHk0cEU4WlY3UWVhVyt4YWMweU4vOTJOOXFmajNOTzJDYVE0K3Z4V1hhM0E5WjBqRVpTdjRKOWh5Z3VhYkpUdDRaTmticjVDank5aXpRckkvNUhpN3ZDbzMzVjVJNVlPSW5jTXZCWkZVZXZkV1hkVnZTaXYvOWJOa0hjWjR2UUlaWWloNkY1TktTY3RUV1hBSm1ZaGs3QUR4c21Uc2UyQjhwZkxMQ1A1clVqa2h2TmJZWFJkWlRlV3B6K3plQnl3SGR2TElzVFRJekc1bEhNcDkxN3lwTWFnSnA2UVlpMTNrbEg0emN6aHdRdmRHK1NtNmQ5RXJQd1lvK3IyV2pyMGdkNW9lc0U0VVRFYTN4SVFvemJqVFptaHljQ1JiVDBCNE5Ga2ZGZ3F2V3BucW13dUZ1QXArNXI5eWl4NzBzSFllN1JvZHlHSlU0V0R3TnBEeHJaZy85dm1sNU1uY1kvaDhBZG52OWdwamt3bWRwbkhFRU1OejFqc01SQ2tlS0RPZmtBSDdZRkpveElzajJ3UVZoU0QwY1RKWkVMaytIWGtyL1VodXdGUCtoSHZJQzJtci9Eam5hR1BYOWNVNEdsZExTQ21sdldORXpVZnFMd2lHWHFUU0MraTdYbVg2ckMyM0ZvQnllRGJjRkpzY0llN1BmVFdPQk05ZnQ5SVgyY3hmWDM4UWgxNnJJYjMzNVZlUDdhK2xKNE5UamV4cHNUdmJrVlIvdGF5aFVyekFIc3NnQ3c1cHF6Smg4WFN2dmVGUlNqV1d3QjlVQlRYZjdtaDViTkgwTEI1TlBydlZFdmc1L3J5UkxXVzhzeTRSa0JXZnR0TnhReWxzR3N4SnZzOGxPNEUwQWJZeVIwSVRidm0wODJvRjdaQmxROTNIUlZPZFRMUzRzck50Y3U4V0JySFQ4TWxhakdWRzRsaHNaK3BnbU9mWnhuNTZTQ0hjR1haOVZwd0M2Vzh5bi9HenBhY2MxdUl0NUFCWjJWclRhS0dsUWpJYWgxRGZkWFQxMmg4eUc5Y1p5OXU0MkU2TEtLTWVvWVZsd1NPL01jVkZRVkREM1JuYlFJMHBWT2l4L2Fjbld2dWVOOE9ScGI5VS85eEpoVDhmdDVqNXFyVHA4VG5nalNHZEt4aGEyU3FOK3hHZzcwdXgyTEQyNEFRMUZlck9taHRlNnU0WHk1czBYQ3gvRHoybTN1V25VL3pRWmJkR3RwS2xETnpKZ2NZODNGUWpFck1PRzN0SVFOYTJuWFJnNldZQ0NNMjA4UE5hVnh2VFhPOS9nckVJd3FNZFNSZWRZVUpzK2t5YzVhM3d0a2s5VTJwSk4vSlUvSkI5MDMzYi9qT050T3NwVVRzaVJrOXZIVjB1bVdRVzVXVUtjS0VweU5FSy9BWDhrdlpoL2JkRzh3eEphM29NRytOV2dneENEWC94TURmcHl6ekNTbUFmNkR0Ym93MjNUcFQyQS9WbG1pRVBuM0RWZmt5OFA1WlIvbldpKzdmYW4wVlRiM0RXdCtvWWdtYkFFbnpWOGVRYnduQ1VlZk5sZ24zN3dnUnkwNUZhV3FONlcwV05BMGk1d05ZdFJ4SVIvcnlOQlVaYWFhVk1hbzBmZnUyS1J3ZUxkRHdwbVJqWGVqN0lHb00vU3JQLzAyaHZuRG0zNzBNYlBCcnFBTGFoNHZBcFZCak5lN3RqYTNlWmlqeUZMUnZYeHBtcEhMM1ZOMzFUcFowa25tSy9KS1Qwc09QZEJPLzBUU1NCWHYvRG9KUlJaQ3RteHhDUk9pYzhWdlM1c3V4V3JFc2hmdEtxQ3pCSGhCZ3Z2T1Z3VWJWakt1SUR6UFozSFVHU0psaG5UbHlJSnE4WWZvTjF4ZGtrMzloaEYzcExHT2JIekh5b2FhRFpWQjdmbVpGWFFZemlHNTdFLzF3aEU5MkdKeHNCWUY1eU9mQTZXOE5ERHBHU0xmNC9IRisyN2VYcmpNMWhXd05iNllONVN6VkxBSWJFamFoNm80Yko0eW9OcXlFd3NOeml2MDgyUXJwMUkxWjFrc3lGaFhia1Q1bzYrUVNSd2xjRHRnbWxhY1JzaHhTREs5OEZvazEvbGhGbWtoaEliT29Rdk5tWFdjRVFvNzQrL2JieTFLOGp1TEFmY0JYM25yWVVCWDJ6VzA1bkRZcldTSnZCVDlkUi9vSHVBUmJqbEN5R2x3aHBPTzAxWDltczlFRGJCbUtvYStBMEN4SWhMRTAvOFBaRlBkN3NUb1kweTVwem5PSDhzUklIbTYxdU1ER0N2VDljT1F0VTBnUDAwcy91eno4QWN5eXpnOHFvSkFmcnplZGJnOVh2bzljQW5lMnFNaDFsVU5GeUNtUmNkQW1ndEF3TzhIdkFnWmZQR2pvU1IyTHB2a2MvMlVQYzh4MTRxNVdlQnI2aFRDTFhwaTdaSEZVc1NNWkM3alJ5OFdjSDQwUDFWWlNkR3RrTHdUOWtGelFyVi83WjRUZ3BQcTEyVGZqdFZEZWQ1TXo3TDhIQktwSGQ2NnFkZnRRd3hIbUMzSFJ6SUZpUjN3U3JqVXQ3ZkU3MTlHRklldHV4WXhmZFVmODhIQldvYVpVRVpLakE0M1ZQakRpTkVGM09CTTFsSVQzR21Sa0lXRHJWQ3VvM0x4Wk1FYjY1ZWtHR0N6YzdZRktpTVIrRjE5SUVSenpBRzI5THFpYWZXc2x4TzhaUGtYWjVxWXZqL0krNCtNQnFma3RhSWYrRVczUDZhNEI1NTNSVlNKM29Gbmd0eE9UNEo2Z0pIUWh3QWJRYld0QThnR1BiTUtObW5laEtwUCt1RkMvdERHTGpxRE12UGZOZHg4TDBhaGNFYTVoWmt5eGhSSldTRVNTNWRxZW4zdGRVeFNZUnNPRVY0WlZOc2VoRlIwbzVBTkx0RHM3SnpRc3RrL0dYazAwaXE4MWNsbFZ0YTI5MU9PVkRkSkRvUUQwNEZmTmdhcWhXMjQxTURUVGRFOG4zZjBhMjlHVENKSEV4eGtyclMzNzEzRlA4ZmtTaGI4UnZuT253d0tqSElPNXdObnMwUkQvNEJwQW9nNTU3YVBnUnc5bng3Tm9NK2lHdCs0MXNJRS9tRzNsL1pqZjF5V25aMGYzQ2ZuWElkZ2Z0UzJiNkcwS2t3MEJNQ2lMdElIUHkwVWFOTGtDZXVmYW14bmNXVXZCR2lvVk13bGFKdlVCVHdNc3hYaktXTFFjSnIrSGJEVm45WUxmY29HSnFhWVJBS1FLMHB6U2phYmkxSXN4ekcyQWtza25Vc0tvK2JPaFh5TFZuTWt1TjBqSXNpdDRFN2M0Nnp1WnJBVFM3QlFFOGg5d1hrNnY5ak81TUwwcFN6djYvMU1GUVFpQ1I5cTFxVU96OFo0UXRQQjR3MVhCOS9mRDZvellnNXhUU0RnNTYwMmk0V1NpYlNWenlHcnhZbjlNN1RlekVWM0xwcnplYllCQm5Lc2lHZ1J2OGpZUmMwVWRKU0pTNWRBOE43ajFoOTlDTXRZczF1aVFRNEkvME44OVV0SGk3Mjc5MGk1Tk9ML0dGM0JKbXlSdGc3cXQyVm1pTGpRMDNDZ2xaVW1UeHl1V2FvMmZZZ3RhM0NJM2FTajU4eFBwRFVWOGNta3lJNFZPWTUxQ3BmODdsaTFDYlhlT2RKZ2FEbFN0UGtXR3NIN2t6Y2dZL0pzNHZBV0doajRtYVgrQVdma3Jldk91MU12bnJ5a25OQXErd1R5VkNWRDhTSFNiTXh5a2g5UWtpdUNxY25sTlltS0F6YUYxcUR6bmxHR0tpbGswaVR1bjNuR2hhRUxhbVVEWGRDNW5kTmRSRy96U0dSQTZuY21Zd0JSZTErb0FyZ3ZtUWc5Umpxc2hvMFYwSnllRjZ5eFNQNkdhdDc4a3JFeTY5RHB1WFAvRzZKYVFXUnFyMDJXbjdKaThWbmcxRmtBNzZUNUNuam94REVFMFZIWWEzU0NROXRyUU1WdkV0UFNib0wwc1BwRjI2bmZaRVhLS0lmOHQ1NXFhdFZFTXNjTzRlT1RzNTQ1U012dFlRZENYN3hJK0l4UnlLTUtTa2FGTkFCQURNWEs4eXorUi9sT0owU3h0em13QmtUako0aS8yU0FLUjRLT3Z4aUpkUVRRNzR5ODh3ZFNhWDlaSk1zL3VuSnc2SHg5SlVKNzllNVZ2TS9EeS82Vkh0a2FKaXU5djVweUpCLzFMZ1VKbit1Y241WTVXN21wQ3RneFRXNzBGWWQ4NHdJSTREYUdOZXRiQ1dlOFF1dWFDcit4bXliek13bVBmaHVJL2hpb1RiQUNULzBkUktuSkhIMzJGVjUvellsNVpOd1o3bnlCTGp6dWQvcTlHVkUrbWtkdXovajhiWGdXdjlBL2tuTHZPaS9UQlRjUE9RYUEzNER0dkJhbDY5RXZrVmRaWGw3a2Jac2Rlbjd6YVQ4ZEM2UE9PWkdDamRnWkVhZWNoM2ZDeEFFU3RnSXpuS0tOTmlwOFZGYVFsdE00N0RIaC9PK2RPYVdrK21ZOGo1WGZvWFA5bkxldCtIVnNsRE90dGRhc001MVFEN2hldkRJTU5UWU1uaC83RjZrbGpEeW96d2dLajl3OFNvSVlyRkFVS2VnRE9EcXFndUllc1lIVWN0S2NKOXlyeEQrbFF1bWJHdER1OUZmSmQzenhydGJIaVJmUnNtdGZidytjcHg4aXZQM2JUekt0Q3o1NzJ6KzM5d09aMjJGaG5EcStQeWsyZEdWeHlnYm05WGxrbnZNeExGOUVmWW1SVDNIa29Zc055VWtPZHk1RlphUjF4d3BDZXkvODIwR2p5UENhRHBoV0pGM0FxVmF5czJzQXFUam1zKzBqbjFQdnZ6c2pmODQ4UTlVVnViclJTMkVocWpTdE9Id0FyczNKWHY1OUpwVGhlT0NlM2xQVytVWHlUdTdIS2UzRWdHakQ1bllwME14QW9zdEFlbjZtcXNRZGptWDJxbVJmdEJVWVpFTlFCS2dmeDlBNXlsQS8vQlhWTzRteWhxdnFzSVhtRmpteC9kUDQyL09pSkppTXUxUVhQWDg2UlA5MGtuaFhibHpkNExobUw3T1doNGRyN0NvTDJ2TlVrWUFEUjFrNGFlelcvYnJOdld2L0FFNmxsMG5mSGJ3ZVFLTnBLMXpzNmpURFg2VUlDcmVSRktRdkxRenNjZ3pQWThnLzRvcVY3akFLTituOUpsT3BhM0NtSFZYeFF4SVpucDNWK1poRERWWUtxM2tTNzNxTDBha3EyZ3V1UkFoWHJhTUgrd0ZaNVovRjNmamxuMEJSbFBxTmpjMEhSblpXbnptd1R2bmZJOTg0K3F2STFQd1RCYU45WlVoZlRpd0hjOEZQRU1uSmlkUTBaQnhSTEhzRTNGejVjZnRxeGhCRDBlN1pEZjdRVElBQjdRMzRmMnRxSUliNFZ1ZFpNZnJ0eVNMZ0ErUkdudG5DUE9zQ01zZTZHRWU3SG14TEZ1cit4V09vWEUvc212TTRaSFBqT2NlbDVHcnRRSFhDNE4waXJraEFNbDV6NjFwdFMyazJITEUveWE4ZTg2MFhFcUxFREhxb0RhRG9ZdzEvYkhSbmsvNklwL1ZVV21McWwwejFheW1LU1pVSWQvMG5tMTlYVW5PbkU3dDNqd0tScFF4UXpvZ0Q4elZLSkl5MXhRNERsdStUdTJRQjVzMitZZDRWaWs5dk5OQU54bHBMMDFLNGU4WUNvZHZCREpXWndpQ0lEY3FGNE15NHUwYzlmK0MwYXhwODZ4WmQva3NmeGxlallCWnltMXIrZkdKWllBbERkSVhJM0R0V3UzYnphTlpzNTNSajBCeHAwOFVIQnNsdlFveWgyS1VRdXFNbktrK1dqZGhpOGphd0FxZXVJQTdPQ3FFdFBOYWp1YmpqMU5SalUrSE5NZGQ2bzRyNHZZTEZHdFU2bG5pK3dEbzQvQ0dsVFhtRXJTbmxrMFVWWk9ocDNUczJnVGdZVEJuSk0veFZjV3hRckt3Syt5V3NtWU5FZjVIQSs1Q3NGWUV5MXhmZlN1UmpMeE1ld042V25kNDd1NkhGR1dLajRhZVZhVlQrSGhMOEh3b3Z3MXlNY0RkejVOelYzb0RWb3F1VkVrOU9HaWhWdFM3R2ZlbThkZDVxRmhXYkdJZ0NzSmJoaW1MeC9GQ0ZYVWIrMm1jQnMxaG5NWWMwbmxWbWRtVFJZa292R3Q5Q3VKM0NXMzNTUmMxckliZFRRRjUzT0RKZGxwQU1KM3hKWWFJZUpqWW55clJQYUhpaGFiL2xxUjlHYllScVpCVUJlSGFnTEdWM1FXR1Q4TXdMY2hyZWJqODNrclgwUldlT0dEYnBIT0NnMmkwZjR5dVEvc25hYkhuci9FSk9DUGF6M0JMOEFxVnpVYVNGSGd0TU04VFVmcm1zZ2QydzA4aFFES3czeXlFMktsY2JqczkwR2V0b3lhTkJCak1ZR01XWTZQRUxWNTI5eUFkQmVqTEJjZ1RRTC9SZmdvSVh2QitZL3k2bER5Zy9oWWYrSFFEL1lzak5aS2twT3VEcFIvWUY3MHBYenNGU0lpQkg1QjdpdFZKOEMxT3hSUDhWNmh1NkZpNERPNGx6U2p5QUpRVFNzS1dPSkxoYzVib3c5a3FLRU5XM1BwQU96R2oxQytBanRLUmRTai95ZDNZdW5kT3FZOERPeWhkdGIyWFZQMUQ5U0R4dDNIa0pqRUZyRnJLeFIySU5melc2TjY0UkV5SEl6S2Jrd0RBSHJrUjhIeXRlV1NCS05odTRtbWdyeldYVE1JSWZ4TmZjREl1ajU2cmdnSE01V01aaUNobGc3WHU3RG53T3FUb3FMT3FiWm1FOGxwa0JNc3htNlA1eG9UeWhiRHp0eVR5N1pYT0RsbTRiQkhkUmhQYWZ4dVRLU3BycG9RS0FLMFFScjBvZ0lPdDdkZU13K0ppT2lheE1wbTk3MjVOdExQYzBsSzFKYkxPcmNCT1FBZEtrdUNMbGJlZDBOUXpPUE1ET1Bra1Jhb3FTYU1GUG5jSXBMa3hiQUQ3Ky9DR3J3KzNpTWM1T1MrcGlPUzZqam5ydVNkRHFxNTNXWVF2dE1ZUEh6NFg1QitFM1poVzl1N0hDdzMwb3NzZkhSekNYYkxKUzZJSzVCaXFMVjE0UkRVckdKVEsrVGV0azFrcDdCcWoybXdXNk5QUlJQL2V2cElRMFgwUUZaNzB6akU4VXVoclFNUmtSdllVRUdIZ1FlZ2VnYlFsRFNxUWxyR1Jqclk0cEJqRTFzZDBmSk1zczBBYkhFb1ovckNOU3Vldm9WMWFoU1RJcUdwS0d1YlMvM0N4RXVQTUhYelVBY2s2K2ZTUXVlZkUrdGh0OWpnQ2pxc0JTVmRlQ0pOMmdJVnEwOXZjOEthWitDSWVkMkx0WXMwN2d2TytVOFgvSlIwNU4rTUFvYk5tTHZBOStwcnZ6RVZtSmhUQTRhYW1rSGRYYTIzT3loQmVZeXFrc21ZK1NjUms3Q1hjVFg3bS9leXZZZlZrNHErVVVKT1gvZ1ppWEwrbittOW5jdzFPY21WVEVuUEhMTDUvOG9CeHlvd2Nod0NRdGE4dllwVk1YWkVtcGRiTmZSYUd4ckFjMGZwK0RyUGlNTVFhU0JTUGZJL1JDeFh2aXkzdE84MG9xOFBNbjVWMk1ob3ppTmhsdHZjZ1ZHb09qaGtXd05LczV1bXAyaUFhTjM2RUh0bVJIdVVPZUIxd24rekx5c0tEeDNEZTdYMHlINHdqaHJzRkFFSXAxZHY5TzJScnhDZHllSktpRGlhZDE3ZEsyMWFKdFJFRktVQktDSjFHQk02RjdWWHFIZ3hiTFJLR1RuRDlTWk1HRkI2OWxJVnJWdjdQT2lZd2NpRUk1WXQ3blNWMHBxTkFVR3RCYUdLb2JiYUtMYlJZWDQ1c3hHRlNRY2NIbDZibGV6MXFUSGhBaklyUjRiMjd2dTM0ZHRTcTZSRzNLL2xyRlJnOHhJMGM5d3c0Vk1uZjI0UVRoeFpDU2VkWkR4NzlXcXY4SnVLQ3lWNDlCb0Q5YU9pSktCWmFHTWdFQTFFUm16QlBOdUZsZGZjRkRKNitib0VaQ2JkWGhGNWxQWVZwOHltOThzZ1NleTBFbjRraXRZelZibXBndVVlRWo2VVd2U2ZkdDBLWXlyV0NucWcvVEI0aEV2LzluOElLRk9Ibm5CQnJLdEo2bUVnYWdDWWVpT0I4eGk1czI2VEl3YnU5dVRwQ1BmNXVqYTRKRllaUGdJODJUeTVkcWxiakZxR0FlSjd3VFVWbTRpTkF1ZWVzRFh3WCtiUlR1UmxSV2ZJY2grVGNhWEdkK1RtblJuZklQUEMxUzNhRVQyenVTUXlHY2Z5Q29PRlJCcVhJRHhBdnJxcVJUbWQ4MitTRFFBcWIzTGlISVEvdWVjV3BTTjczVWRGYkhkVjNqakQ2N2VXc2pjQW9xNzBIeDBsSmFFMFVRNitSQ3hTOHFQUkZReWszbWgrWUFEdG5tK3NBSW4ydnJ5SkZWenpYOEJyRVlLUHp5SElYSHlGZlcwUUdPUGJiVWJEMEFGYTIvSURTYlBvR2EzY3p4czdQeEN5STBWU3lwdFdQcTlFWXJwTmhxbWQxWXJtSVBFR1BXZnByd0hXSUFFRWtNVTljY1hhZkJ5SENRQjNDNkRrTVh6bTNJZFE0SVNrK3NLVzNLbktSV3E2UFNoY210UWxUTVh5TmRFQ0duTlNTWktYcXZwa1lKb2dQZDl3NVZVcVdsb0g5YXM2bG0xZDhBSlYwaWtacHlFK2ZFaTFsOUwrWjM3R0R3YkxMY0lGMnlvZ29aU2Y3Y2EyUTRSekdhTXlOZlQ2Sm5lSGNKcWFGVFpKeHMxdUludGVsSEwrOG1VY0hCZ0NUek5pWFZ4eDRWRWdvdC9mZmNwR25WdzVCWFpvc1RDOHFweDB3UEh2S0RVWnRGbU9OM294cEhHOUhTbTVXdWFudWxveExLVGVKTm9mZDdnM0hlb0VTZEZINWtDdWszWS9PYm1tYW5kdjZYUGFGeGUvSEJtUXdSbkZqL0gvbnU0SVJvRk91TjltMWQ0alVhcWVpWXpYdVgvZXlRWnl1Vm9yd0ptSUVzcitXN083VVdhcUJCYUd3dU81ZFRXQ2N6NEtzcDk4dEQ5NzVFbS9BOUdDNXRWYWl4UHBGTmNLMWVKdEk3RzVkby96U1A1TCt0aFRuN1ZTMjFxd2lSK3Ird2d4UzVnVWpnbi9jL0hXRURaQVI0Sm42ZXhDaHlySUxIcTBHVStiOTBZSHBUOFBmclMwMTJPMVJwU3JqTHNBVTN6Y0VWeFhwWTJNLzJwTmYrOUhWckZTMnNFdkxrNlIyMFJhR0VXMzE4REtLNmtIdlFzcjJwV1B4eXFhbUNxUkdTcVVJSlpRSUtxSFhtT3pNdHdLL3FicmliRjIrcTZWZzZOaGhGTDMrSmt6aDFITFhmWWlraW5qM0pwUURRWnVncGIyREl4OFRRYXlGZWxQT2VOcDhyajREUU5ISmxkUEhmQVhGRDRNeE0yOVlPT1F1L3hhRFR4ZnRnYXQwSkpCMUpDcmJXblBCeWhvcFVoTW5SYmRpU0orcVRSVGVsY3E2MEpaQTVaUFFybHdBcGZKbCtCbFdPNHZiR2xwSzRQOFRXVzV1TkFNVjVTM0c5K3gwWWNMNXpvNU9rNG1NYXpCWjFVc1U5bFkyMVZ3Q2dDQlNjOVk1SnEvV0gyZnZvTTJuNW5mTExmcHFIb3ZLL3dTWlAyaEpNdktuOXdhU0xVaHp5cVR4K3lUNmlMeDVGUFlmVlBLeFM0S3g3T090L2lxYW1vTGpHS3QzWGcxbDNrYVRqR0lCV0xlVHdFZzkzbDJiWFlmbUwyYlFNNnVPY0ViU29XUGZqMHpyZktwN2dHRzVWdXZ5MS93Q1U5WG04ME4vZmVMcTFIbmNTWGY3Y3N6UTlXanFUL1haKzNscllYYXg3TlVERnNlNHMwYk5rK0ROZWoxcUtDNVB4YURKYVdzdU1TR2crSnkzSCtsbjFCNC9SQXJyazROMzBmVnhKY1QrWDdISWd5QlZtTWdsaTlHOG0yN01nMnE5NFo2Wjh2TWxwMFEvcjBJVXAxRkNxVFA1M2dkOGx1SHUwZTduRWJqck1HR0Y3c3JYZUxNUmNlRjRqVGdJai9OSFZ4aGZocFM0V0NGZjFhZGc1WXZ2ZWttTXlwc0xPUld1UktXNU9VMVRYUWJjZVFvN1MxeGZZV2NLa2J3b1ZtZ3Z5L2dEN1JoUktDUEpZU29DVkpSZzVFTUl5ZXFDb0xhQzd2RStSNE1teHVXUSszaTB2MlBQaWJ5K0RMdld5aktJL3lZM25GRjFpVHBCVCtNazVvd1U1MVdBcERXZEl4MVN4T0twTTcyd1VhZWwyd1VHUExYZkQ5SWtLZGhvMDNwL1NVVllRY3FhamF6TUFpZWxEMVlTcGtOQWNheFN5ai92bU1PS2t2ZUxKQldEZUxDNFllNStYNUZRRVRLTzM3TWZuZ0d5em85ZE5aY2VaVElpOElmOHBrSjJ1SWxBTWdJYTVieGorT2JwL0RHcVB4b1doZzdKOERuSmI5M09oTjZsVm5xbHAvbEtiMEpqVWE1U2xIRmFQd0pqUXhLRTd6SXJZSWlqZ1loY0N5ZXJDRW1ORk16SmZQRnpDa3FWR1k3SkdzbzdnV1JlOTk5TGpDTFF0Wnhyd0F6SXVqOTNoTkJKeStKNDNrNW1rdnJ1MnVrL3Fpd1BMbm0zQWZBaXBpMUV4K25HQXFIS3JNWmYrWG9XenVSTjF6NzRSSFB1dDNnSDNFVkpnVGNUOE9OQUU3REZWcTd1eWN4dHl2Sk1Sc2RwWG5CcVQzYnlRZUpKSmQydTljM1BueThBekJOUWlCZGVsNlBXc0VMVWNGUElsS0k1ZmV5eHQ2VEdBUGZXVDBCZWZZMHA0cXdPZ0lzNkh2d1dyOUJqUFdDUnU4REtWcnNtNkp4MDhrQy9qY3pGcmhXQmVOWHMxVFNiVWxVU2J0WW5KSStmSzF3T0FtRW1IZEFOWVkxL2ZSM1dDSjh3cHFUdkdaMytuTUI3azB1bDlwODBnL1BwL1kyQ2VBNHk4OEhGeE54NmFNYlRRNmdQWmNrWUZSMWZlaVhhZGhMMFBUbzV5NG4vYmxGWlhPRW1OakZIdzlBV2JVaDdkc3c3WEJyNnlhbmg2Y1BGaVFUSnVCVTYxejlLV0FoVnpNYjhsYVlqRXA4eHgra2RTaVlTL2ZYc2E3N0l2ZWJRWTRPNW44UDl0cklyT3MxVzRXc2xoeGd3S0hLckJKNlM3V3pzb0VvRFhOVkR3azRWVW1GNkpXMjNxYjNyTnVpTVhqNVVITlJ4RWc0NFpjUElUTW45QmRhNTh5MnBoYWE1U2M4enBQd3M0WGtSZ0xRL2tRcDR6TnU2VmdITmtMTWpubjBEL1gvanVxZTlNMER5dUxXNVNLd2hBaGZkMWFFNnNUcDJydWJOT203akdsSC94dFFldnJrRDNqRWhiU01SS3FtMUxsNnVkbklJUHZoalFHRXpRRElFRVJiR210czhQWDV6SDcyN1dueVMyOStXYy8ydnloTGZBZVJrMzFLb2hEMTJHSU1XNmd4NnN3VHJ4TVZuMUNDaWI3WEVHdmpWUTRGRC9Eb1YzSlhFekNLeW83M2NLWEs3WlRJOHlXais5QmlFQitIL3dZekdUQmxNK2Z2ZDI3VTlpZ3l1ODZ1WmlNcWFwZTc2THNLZnhmb2F1aXFCU04xTXg1WlZ1WDMwYUZUTFhCRTN4T05sVk1GUFgrL0FlbWlKaUxkOUVrM1E5c3ZMUkQvV0pOMEJxOUJaMVFSTlM0aktyemQ0b0taaHJ2WTliM2IyajlFMmF2Q3pGUFRuU0tDN0pKeVFoc1hydEVSRWkrTjBmUkFNNUVDMUZMc2p0VmhyQzd1SGt3WWFjRGFXNWRPSTVwNzR5eTMxTm44L2Q5amFWVUY3OThVS1p3NGcreGVwazBMeGFPS2lMYXo1R21IRU1BQjVkb3JHQUdJMmdMS3REV0ZHbEVyUzdQTkVnMERTcldUT2JGSXYzdEd3aFVCQlg1cmZZd0tZa3pFWUtScGh1NXZSOVRzVXg0a1RmL3p4dEtzR2M2OEIvUUJha1dSZFlKN0FXckhjSU9nMVJ0WkYraGdtRE5wYnpPVzVHK2djZlRneFdEbGkxZWtzblVmV3R3OUh1TTFodm1ObGIxSGtrN3FncFFWdHVWcGxhYWNabDZmQm9nZDB6SHRNZW5vRSt6WDlQN2k0Q0hrdDBiT1VSSFZ0anI1T3ZEUDhSU1BEZlpEZkRvQzdXbUc1dWtqdy9RYURFaUJYZFJ3Vit1NkJQOWdnNUt0b0RDTThnbXhxeC8xb1J2YitmZ2I5d1liVTRKOGt4cWlZQlY3NmdMZ0RXYzFaaG9NQTNkOHdIZ0pTN3hWM3FuS3BTSHhRY3E3Yis0QlpsbUpHWUpRcXRUaVlHbnV0TjlrZUI2WXFoZEhSaFZBUzhiRXdUSE5OUDlCSUVxc1RpaUtJWGlSRDRYczgyV1I1SWN3WlR0czdGKzJPcmJLNW5HdUlOUENGTlZUSGFkK1V6dlJtR2xWN3VPNitCWHIwYlZkSDFLLzJNanN2Vnl5M09qMmtRTmxSNlRHVnd1RExXM3ZDOHAyMno3MmQ1MW1MYVBOcEJsQ0xEU3kxenhXT1RybURBelRCV3JFNHFkeGZoNUQvUXlRZlJKTUpmeTU0UVFrSmlwSUN5NmhEa0llUU1xODcyNXY3UWtvR2xIcGxwMTAxOTdzZmc0NkVVa0dCYzNsMTNIOTd2aURKSHRudUQ5QmlKUUp4dG9XZDRmT1ZoSVpnRkZJWDQ0TUt5d3VHNzVGMjNqU0x4N3VkVVh3QWE4dHczeFFMWnN4b2UyZWM3N3d1VlFSa1cvU041U1Y0aFlwaUdQc1hMZWRCQjl3ZGhidVFCUEJhZC92aXRGd3A5V2lNOU1iQmZ2YkpCRFhYdEpkR2d2TGRQZHAxK1ZFSG1mK0o2THk5Q1JsNFZLdzZjOHF5YkhVZURRWVJnV2R2ZjJkRDQ5MHVTdmM5REZHaWVMYUFDbUhMUmY3aTR4NjlwSzVXZmhVV0Vic2s1U1VmSS9zL01vanE5TVVYVEZSU2M2Z25rVE9TY2tVdnhwR0dZNDNiT1lzcjBjRHlaMUQ0N1pjVUM2dkVXYmp5dkxLcldIZG83c0MzejBPeXdtTjhuRzIraHc2eDJlU01IV2pIZnRneWg1YzJOSUcraGROditBWm93ZHV3MDgrdEJ1TkxJeHFveUtHODk2bURqU0xpVnUrRnlPd3RZMHduU3Z2djAxUWxmR1E4b2QzaXpCQWFXelM0azA5SzZmKzU5NURaMnVCdFFkbnZhVERsY3BSVkMrclZkbkhzN2N0MU9DMGFhVFdmNGgrYmtuTWprTjEraFJ3eitEVWkxVTcyOGVMM2NSQ2NXYnBMMm0wWCtkLzVDTEJTN3hxRVYrbHQvZGhrcTR1VjF2Vll2NEpKbjIyWlJyM3FINzQ4QnFBd2pyRHVWQ1VqMnQwdmpCMlFZN2VEd2ZKaXk5VStUNXQ3aGxpc3NYTVRHZHNoZE5QWTJCOVdJbWlXZUkzVDBFbm1zZWdZVCtTNDIxYnRIM045amw1ZzlGZmduNzVuWUt0cHFXRTZtVTB5ZXBldHc0S01hTFR2TWtrci9lZkRueHFSWnU3UXg2Qmc5c2tKWi9tU1Y5MEVDS1ROc3JxSDlvVVR3UE5Ra3A4TXpTdUhJYklCNWRkTWpBcldDcVZNTTJsN2hkbnlLdjhLZTF0WlJON0ErNGdGNW56TUpDVll5dmp2SXJUNTJZQnEwaUxUZUI1aG0rVEgvUEkzdmcyNHNTUGc1WVVqZFhzNUwrVGROdmRLR1NDZlp1YXVST0daaWV6ajl0RDVCNVArREhGK3lRL1dhTG9KaXRiY0JKRzFBdDg3dzBSQnpEL3ltSVpweVI5ZFphRjFLRWhldjVSMFRUY3B0dkpEYk9GRC9LK1VVU1hUUFhyWEpPVU0zRFR2WU1EOERIdHlKVFhaVW4yRndRd2gzNzV5bDZiOGlXTjlXTWFHVlFiMXhzTlJmWExhTGRPa2JxY1piWHpGTlZsZkV5a3FROHFyYjkyQ2ZQUkI2aTdRYkZhZ1RGVnltcC9CZU1tR3ZnNEhnQXhVNTVlUlN0U0QzdUF1QkNUUDB2V1d5ZGJGb2ROT2NqeVBoVlVxVm4yTTZFU3ViN0xaSVpoU3JNTlJmcjBQWDZHRzFtUUpTK3crM0JqL05QaE5FNC8ybjl4a2JZalJVREdDVXhxbnppYWtsQTYzaVVXSzU5TSsyOWJUL1FOOCt4T0xMeWh3ZEJrOURQSmFxTHd0bmFVUlNpVU1lTW0rUjZ5OTZWN0J6cjBpNEV0cDNHSVMzaURBd3VIdjFNeXpuem1kclYzZ1YrRGhqQnhMMlFrSEc3WjJiWmJIOXpWbm9FTFZEQVdHYlorNmsrZFhsR054eGYvR2ZQOXlYOXZzNDUrZjdRZjUrMnMrZjdJVjlYc2FmbisxeGZKMk54K1QwTi9rN3JZL0oyanZoMjNoL1Y3elA2dmJ4L3l2ZXAvVDZGNzUvdHhmcTl2UytiN3Q4K1R2WC9xNmhMNS9UWDN6OTF2MVVkd2I1L3JjL3E5UjNmbitzbmZKMW5ueWZVQ3ZuK292Zko5WDIrVHFKbjVPNS8wbmFMUHg5T3Z5V2dNZHBZdzFhUUtIaXk1UkxtL0U2NVZvV1A5WXFUck8ycHFqdUNHVFVpMVNkRmF3a3V3Y3hScnZLS2Z1eENCVFFQZlc3WGx5ckRWZmcrdkhRSTlOVWdHbklDZzY1RVhERmJJUDZBNlNLY3pqbjFvT1lZVEJ2WGNWam1UUTM5enJoV3pZR0pBY3cyemRNT1MwQytLWkdhNm90bVlmeFM3YjJneDAyeVk0N0pJeHUyenk1SVdkMWIvSHpRR3l1OVhURXIreDNLZUJMTklqQ2F3bXAramNCQmlWQ3RieEYyZVh4MytlNWlORWtpa21nTmFJb1Y0NVZKcDRCR3JVWGhUcUY3UGlJU1BnajhUOHo2QXhMMFJzbm1ja21RTnV1TW5CcHJoc2Fuc0JtcHhYVlVlRG5jeXBHZWQwY2Jvd2ZkMWVjVHo1eTFOSGJ5Z1FHNE81WmtpWUN4WUZ4OWh1cDdWZUFFMUJ3anhSN1ZxaDZxSE9PaW84aVhZOTI3S3g2TzMrMHFUbVdkUklIVERVdTl5T3NxaGVudWo1ZUJ4VnBHamJVOUhsRE9ldE1wT3VCZjkxcE5yUzBDM3pvdUY1TmNvL3pRSUZ3djBjMWloeGFibVM2alE3cnlIaFVDOFNmaTdpb2dWcW1QNnM0b1d6dG03a3BId0Vkdlo0YVlvb1l4WkVKYlg4dUFYaDhsano1eVdobkt4V1J5eXM4UE8rUzFmNVRQLzhuTU5HZlY2eFE0YzdSQXI5eHU3QWppcEc1NnlCVjcxdGRFRHozWmlYVlRUb0RRbGNSaCtSNVZzaW5HMUdvMk5CdnRTTVpPZFBNZEhrOVlkdGtxd0hNeTlGektTZWwva0t1aGFNQllSa2s0SEx6bzlMVERMSy9zc0J5dmxtMTZRQk9QWUZWcVhIcFJvQWdDR3FrQURtZHNuYmJ1SUpEbDA1d2RYQ3V3WmZNMmVpam5FL1B3cnFqZ0lFT2ZseGovZk5rYnR4ZEN1enJWNXhldzV1dWFsN2h3dmtxZFQ5U21GUmk4ZjZVQmY4aEVOMStmK1hFbkRkTFBkekFHeEN4NEorVytRY1g2dWhIcmtEWVpzcloySGlnRHZvSWRtcXl5clJUV2pEYTkvSFdsZ1oyT0Iycnp6ZFpUNUtnMGVxa0VlM2ZIRmFVa1VQdm1YcDJCSFZXNm9wZzJjWFpRei9jaG9YNzRVYUFNTkJQbGxrazQ0Y01uRWwzRi84ejlQQWVXTGhFSW14bDNJRHRwWWxiRURXcldST29wb0JnajRaU0lqa2JXaHVCbHdUbGlIRVhzVzROOFg0ZHl4cHBpekNvWUJ5Q2UyQ1BNV1pCSmREYUl0SEg3M3VlMldSY3NsakpmZzJQeU1US3FJUXgzMHR2TTZ3U1JkU2habTQ1SUorcTRUQVl0TDQxdXMxNzIxaXBpUzRuc3hNY3hFVHlZdmFyUkFhL3NheDVXUnBUaW9rcE93WTNoQ3lHODBLOUZmVnExenVhWWJzOWVtRXVlRFprZHZqcnlKMVQ0NVN1UHJBOUlGZG4vQms1WGVmQ0xIQS9Vc09ZOVl5N3g1bEFNUGttd2JOYjFsRm1RbzMyQ1ZmZll6RXZFdWl0VTlqTm8rcTRNQjV0RStCOFVMNXpaVUJ3SWJMV3kxMG45d2xzTHp2clh3QXRROFVEV0F0NUNzNW5nY2xxZ0crV3AyR3VrNTRJOEx4TFMzUWxUWUYwMXQ1elZZc29ZUVJ6N093M1IwRUNJZjJEVTdBL3VnWE40KzFUSXdJektySnZZb0JobjhvZk9oeEVmOTBlZ2taM2wxcGNvQWFPQmU4RnE0dlQxa1MvOU9JUnhqSWhjRWpWeGZqRzlGdGpKQmNDUEw3TXhBTitQN0RCd3l5QnZ0MmN3Tkx5YS9uZzQ2SmVSOFhIWE1EUUdENWJHWE9GWkhBTnBVdXpQcGtia2tpd1ZrUEtBcmluL0k3VWg2M2xxZmE5U21VY256SFVtZ1p1ZW11eUZHMTFaUFNHcDJIMDhrdHJ3RldCTmo5UENONWI1alAvZmFTSCtHYzNXOVNVY1R2WDBlcXp6Ym10RUNEWmVPTjRpZXVtUS9uSTcreHdpa0hwZ3FLWW5BeU0vZ3o2YzlPT1B1RDIrNGk5SmVIdTdWWTlBcU9hSjlCMVlOVXZrZCtHWkNLS2I0WmN6NE1SYkh2QmJqR0d5YXRUVlRiNjBVNGlEYStDZUlLaXArUGtOa3ExMGc2bGRGbGt1dWR2TVFQMUo1c1JlVlQwK1dqMUVlWEFtVTJMOVZkbytIV25kNy9IQzB1RHZyQjdsSitra1NPcHMzb1pLaVl3T2ZxRVZ3WFFmTWVYWlVFZ0pGMWhLQXZmRkZMSEtSYnBlbG1nVnZsNjg4Y0dXYTBmR3RWOHdCUE5MdlJsTG5RZjl3WWZKQ1hTaS90ZmpIODJQY21yRU1FbWRZRUR0c3ZKcGx0cmJXSW9uaVExNXVpMlRzWng0cFUvdnV3bFliUm5sTUdlM0hHYTdsVlk0UnIzTlo1cm5YaDdIWC8wc0VWb25CbFl4ejlQNlBuZzdIdVR4TnR4dkUzM1ZaRHRPN1JnaEQyWHIrNUdSSDBZL3FoOXhEZ2V2d2hPU2tSZmQvNjI1NTN1YXB1RDIyaFdZUVdyOGZQbWloMWFWc0ZVTUZ4aU9idHhRbytnT3UvejdHcy82VlRHdW9VVGhkQ09HVVhIUmF3M1BPMGhnd3RUUitGSWVTSmNXbFVvSXN2MUtFb25JZE5nMUk0WGtxNUQ2TFRBeTkwamtrZ0NUUldMMVRzSVFjV2lJSEhJTS9oSFlqV2k3VnR1Q3ozV0xuV0ZaTFJrUSt0WUZqOXhsUmFlaEZmSCtxN1F0aDQ3UjkyT2hoNWprRCs3cXVQejN2Z2g1SHozUkZpeXMvbllDZ3FuUjlNTS9UUjROWkFCby9sb2pYL1pEa2svL0l4SFBab0ZLVnJ1OXc3cWJLL1kxWFVnT0FvOFAxV1hDbHN1c0FXQUxLQ3oxVUlFSlZjNk4vd1doZDRIeWl5VjJXc1lMejdjU0ZMTHFGUnBXVEtvdXg3QjAvbGI0ZHRpSGtaV29sck01ZHBDa1JrL2Z4Nk9xd29LanVzTmIrQWcraTJmVlprY3pHWGhGMGdLUStqaGwyaTVvcXNnVkJwUzBDUlkrTTFDQkZwTE0zWWFlbmkzMlZCNDJwUlp6TWI4VEljM0ZzRHRDNU4vSDRsSW5DSWZqanpDcnJCYkRzTzM0SzE5M1lFNGhlMG5RWXUxaVZic25tSllZSXYyWHo3WW1IeGNybVRpblF3OHFuQXcvYkxhNEpqL0poRjU3RDhsOG9oeTdVSWNWR0wwa1RYSDNxVXNiTDRiRE5uQTJxZmlmVVI1UkZVaTR4SzNLeUVUMENHK2gxN1JKMEFwY0dXUFFDSWVaQm1Yd09ncm1rRXFPRks3OUFhWGM1RzZEakhLZXVPSXRvbkZiOWFGSkVhcXVxQXJlNk5xK3IzMFAwQWNkSTJNL1pkZUVJMS9ZcHgxQ1dlQ2dudEZjb2o0WlFnUFZpY3ZwYTFaSHNoY3habzExQ1JONXZvVzNLaUN1UnBHNFkzMGU4QzdPbGVNNGVsWlliTG14dk55R1Z1UDgybGFQQVdmeXdaVDQ4OS9ETjBzYVVpQ3ZNNENvUGsyZVp5Vkx2eWhRMk9yK2lVOHhsYlNuZzB5eW13cjJnWmp2MXZNWW1rSkliRGFQNFcxbzZYd3MyeTVaOU1HV3JyaHBrZW5EWTdHTkE0ZHcxNUE1bjZFMUV6YTJ0b0d0eW5CQWRaaEpZRVpkRnhwTk9ZaUlsUUtJSmZVcGZVTFNaU2pWaEcyZGVOYjJveDhlTVRZSlRqaVFUbEhvdUQxYUoxWHVtWkZmekNrdGlrbzBHM1YxMk5HMURFQis2S1VyQXhSRkwxbTB6bXpHMTlvcUZxSzBNTkhqY3RiZW5WOHBsTlB4QVlzZ3JpOVF6amY3WUprS1NRQW1YMDhoTlBRZGVSUEM5d2l0aFo0aDMwSEFTOStqdFF1M0g0N0tZdkNwNWJTc3pNTDdOY3VSNXdDMk5PaTEvOFpNS3B1NDRvVGJmbWx5dVBJU2tzMzY1N3gvWEZacUVuYWM1NFRqNC9jMHZQZWxaYllWNnl1WWIxRE1IODEwS1BCQXo2ZHJkNTZJaUpxRDdZVXJqMFhiLzFxbU8wNDFyRUVrYzBwYkZFc0pwa09PNXZ4a3FuR1V4K3BDOWpCQkZ6NXZTdzV5c3ZUc2MwckpyUzUvanVDc0NrV3Q1TTBWNUtqdjlhdDErTDliWVcxVzE5b2hCQm9HdVh3UkdtaERKS2pyRVhBRmpXb3VzZ3l5M21vUE9YdUlXTDViWGV4eGgzSC9acktCa2JheGJ5eUY4ZEhwSStUNDk5UG5zcWxqell2cnhpV2kzbUpnaEhYcDdndjRMeU8xZ0VNNGh5Zy9tMHBzQjJmcjd4aVV5TkhxcEQwTnQ1WnpROW5qWFVFL09YV2pHTzN6WFFoK09yN2N6RDlnUk16bkw0UVNta1RPd3ZzbzM0T3NXbmJsMGdsdXNoVVQyWUdxUjUvU0FxSnhLSDdYUHlDUytBMUdWMEJsUlpzc0tXUEtDT3k4MllIMmVVSnhZV2FVOU15ZTdHeExuYjJGbnJzQ01hOGNRRjV3SG91cU90QW16S29ZNjdaYU1aNFoxNGViQnRXMDcvWWdaVkdYekgzSEVGcndyenJFbUlHdzNoYjNUSU1FZFVYdkdqdmVSV0pnY3lNNzFKbTgxLzZlOVNKdmRMenpWWDd2ek1ubzFweUc2Y2dkcmJtNTFJbVRMV2ZxZFFacVg1cnJPdWhDdXd2MUFOcUNmV213MUcxY251dytGVVNnUkg3aDZYOFpWalVlNXA5QkVsejYzb2RUWmtTeld2WHFrUWxIemh5bzJFUklKaGhxa0lvWnNTSlpPa3kwNXgvRWdhUlVkVlRUblJMVzVqcllqdlpyaC9BTS93dGV4YnUwc0k0MXZycFZIRjRGa25UZ2xoM1lNVHJDTGFhNWdUQ05CdE12ZTJSUUFEMktIQXBMOUVFZXJOWFpSd1ROYmdkaG9abFhQYU5qdDJvZjJRNnUzVlpaUjZnWG90WjFwUWdKNHE2UlNGMm0zSFoveTd0M0xZSk96YzZhaFBBVWFYdmRwVnlNeGthS2hIU2lXZHRLU1R0N1VTNTJuT3lGTmN3Wmp3Skg1Ty9DTVdQVEF1dmdJeFVST1FGcTQ0cjFUbWttYlgwNkNvWVdUSUdVdXBNS2pKYTBxa3pkdkZ3K2xIdXJZeHl1bDNadTFMbWQ0SFpmem1xMWJUMm1Ld1FibGQ4azFRMzhsc2prUUtSOEFudDBLRlgyeXB3U1BoaU5CZTFMV1htcXlubFNYb0xiY05sUGF4UTd5TUwzM0g2UUd5M0Nkb0FTRkErSEZjMysveG1OdzRvcWE3OTc1L05sSndvT0tsNDFFWm9qSFN0UmdIMTVWaGNMTVZ6aGJKVmt1K2pDa2hKZHY0WWFWdmtzdnIwRENoMHZ2ZGRZbklLSlN1Yy9IRm05RDU2TWF6QkxYWHdVOWdRb0NLWU1lcVFkRXl6RXRIWE5zL29IZ0hrT1Z5ejU5M21vdHlTeklRUjk4a0xiN2FYb09jUnFSZTNRNU1ENkdwRk1TUjV2bGlRUGJzSGc5YlB0Ni9JUHBoOGxzazFCN284UVZHbFZnSFBHOU5LdGpzYUUvWUdCOWtHajB2OUIzb2orTmlmQSsvYVV1OVBZTFUwdkVEbnY0UjJEMi9qWHRaYXRSWWZUczlxZzM1ZDdCRDJCZ0wxVTF6YmNNTFNHVEV0eVlSeU1GT3FmaDlRd2dsTit3SUdjckRVdThWOCsxbVhCcGNxWFVGUmNDL2pzS3crazRuZGgzM3FYd3NXY0ttazZrdGp3MWMzM0VwZmFoR1lqNXNPVlVnQU5PYzh0TjRTRGRxRW1yc0RoWlNJZm5lOXZSRUtRbjBhNnlJL3FHdHJBNEFXQTNQK1J6WDBoaWpSbzJDdmZBRmdrV01xR3g3Y21WRjFmS3FJSHVadkpwOFhCWnhnRGJGNzBMZjl5bjExR3U4aU9iZm1VeE9XSDFscFEzZXNJb2Vld2NnOXdXUVFLaC85QUJQc1luckJhaHQ3QkpjWnFlbkpIMzhsWjZqaysvQmNtKy9wSENESjN5ajV3VTZVQ3IvZWJXYUYwdGFocEkzR0hTZkVSQ2VxNWJSSGN5bTRPL2Q2SGVEYXpMS0dqc3pJZEV5M2YxMXh5bi92cHZxNVdEQjdFZFVMS2F0bUdINTZGaXpaSmczRG9LYTNZUVBHK295NlF5Y2E4RVB4cEEweCt6c01hWU1CQnlsUnNTbnBCMVliMERJclhQblM2TGliaTcrZkg4dDVHWm94T0RiTVdDNmhaTXNVT1pwYTN3VFkwTnora0d4WENaL3ZERUxUVThxUUFlS0h3NlBJL0p4QjRRY25YSGxJNVV5d0w5bTZoNW8yazJDbnJoSFV2cHZiTDFPZG5tL2RVMjRxWndpam1IaUVUOWxwSk9MNGlqNXp2NTNpUDlWbldSM3dJZ0ZnM0hFb2Y4ZitMNDhodkNuS1cxN1drSForNlB1bll3Tkt0d3ZPU0w3cFcySjVGcHZTT2N2MWpLVWNNUE9lV3VhRGVzUWh0WUlwN29LREpOSzIrb3JlaVRwOXZyV3Z6UmxnM3Z0b05JenNRMnZwZUpXU3JZOFFoaUZxbmM4cjh1NDZ1UlIyODdCM2RGV0xxclN5ZWlYaEVHbnZjbTJpbUZKQlhUVjFzMExsbTUwdDYvOFE4S2gveWVtclIzN2RIMDRkZHlMbUpaZk4zNUlNRFhCVjNpMm5sN2JlSnNEVXFrMkNFYXVnemdzYi9RQ3FXNHRTTExqWWdXVWNLczJ3Ulp6ODI2S2RYY3FmYlU1SGQvQyt1SE5tTHdiOWdiUFFPeTJTMFpLcndmQWJWN2xjOUR3SmdzeW90aHhBTUJkdi9XUmJESTA4OG5WbG9rNExtRFUyd1RZdW9lckNMaXBxUlVzTVlyTnpwSFlNYTJ6ZTVOdmtpYk5TamJ5MTVFbXdNd1Fta1BBdjNHbzlLanJibTVJbktFb1JYelJrWElRdENWZ291Wk45RkN1Um5XZ2JVbi9SQTl5SVI5TWZZMXpHdEM2cElsNW5Kd3dadXlkMHJUanZQdWFRWTlFRkZML1ZIM1FCdm9jZmF2RlhuT1IrUXFYanFhS3ZqRmI2ZzBXN0drZzVTcnRvVVFnY0RxVlFFNVk5WDVtcFErZGF5djJyditiOFZLNXE3dGQ3Z2ZndFMwWm1yY0VyeHpvR3ZaWkxwd0NwWHVEVExhYVpub3dSaVBRc0pCTW5ITFVaR0NhK1N2N3BYeFpKY1NlMmU3VjhHMDlnUUdDWDRkek1wSklxblFGcTl6NHRuaGMrTVlpVWdPWE9lSTNIQW9NVkw4YmR1RThrS2dMMzlXa2M1SDhEb1JHdG5MaXl0MmJnd2hWMGJXYU1tMXdWWG90UzJ4dHVUcUg4RWpUbWRlN3pJVmR2RVREbTR1NG9PalFSdDczZks4TVo5WjFKajRZcEUrQ0FaWWgwUFh6Y1dsWTNJNzZkOUlmSDlsT2Zld2FmY2QwVnYwODlJSkhRUHZrYzIwbXFPSE5JOHdCekxOM1R1b2JBY25hdTczQTBpNUtlNEpUMGg4Y21BakphWklGdVVER1R4b2tRZXBjeVR4ZGlzSEFuZjIycVEyWmJwaTdnSUU1SHkzQXVuVEdmd1ZjMm5uT05VNjFLQWdZMnFaT3dKOXY4NXJhT2FQV0tCR29ac1Y0cUlmUFpNNGc2MG9DTkd5ZGp6SVNFUGZ3WE9KUWRNRmQzWGd1R2tIVEwzQk82Y2lDYUZkK0ZVbWhuemZ6QkJRUUQrZ21BamdBb28xMm8rUkVzVnpmYXZ1TjFMWVE2WVBGMFJhS0ZkOWs4VjRPbzNEclVUakIySVNvd1BmS0JjRlNXQ1d5WUFNM1grS1psdC9RSUtZYnpEQk5rMUo0K0ZYSXVYN0lITGQzNUp6VXJqRVdyMFRUWXJtbkY0dkxRQ205TkE1TFJhZThsaFR1ZE0rYjUrS2wxRi9QcmJWVExJOXVFRXBLRUlKc3F1N29oT2dSWWlDY241NWlCTzZLSHg2Sk4wc291dDB0SG9nWEFjT2dMdUNINmVMN1lhMnNrWk01NXhuSDRWc3hmTGFFK3YvM1lya3RNa25pakwxZ21yV1lBOThSMmg1VWNseVFtMklaMFJBODhGVXFZM0hvWHc4ZDRsMzRrdm11YTc5RWl0OXM1V0JwZndsMVdaQjFwaEd5V0g0RW05Mk9xQjdJOUhnY3pSbitvSHJUT0g2Z1BOQ2xET1oyUDlYbUNHdk1hazF6ZWhOcU5meW9lbjFjUUxIWHBLbUsxU3V3QU1Bek9seEE4WWpCUXpqbTVNVmdlTzdKUGs0UFZpNlJpYTlleFpCbkFFOHVXYmdmVlVKdjhDSUdpRWRKQXNqdXZaNWlBMklaYnF4RWI2Tkt0eDRrRVJhaEQwTXEzQ3FmKzJrOXdUSDlkL29BWXlwL1M2USs3RUFJV1laN0paYndKcW5rVHl4NUZQWjNKeGVuQ2tSQWNvZzdJVUJERC9iampFSGMwQjErdXlBTVhTOHZKM1JkWHN1QUlkV2poOHRKR05RSkFpZ3IzRkhkOVJvcGxZejgvMnNyaGZ3bHJldDkwUlRZUjBqUkh0MEFwQlNSQkFpSFppZkh4b0JYa2s3K2lPcDRwbGhGNFB5UUJaSjBQZytQVWF4SUxHV2FGaFVCUUpsWDFHSlp3U01ldG8rVlZKak1ocWJjRjN4d3djRzlVVnhFUXVRZ2xEMnZuOUpWV3pETkc0WURQckZPN2ZFb1BYajVSNHR3UkhnMlh1N0FENklIeFYzeFN1cTlLUXRoM29lNjFvRWJmWG9qOEFEWktJVjRpVHJqSGxrWXZZSW1neitkVGdnSi9UMFdMZEc3SG1ZSmxNZkFvRmExcmwrTExjWGoxQXlRcVBSZ1JmQXRFUkIrUmYybkRlM3k1d0poZXhuMzFqbDk3cWZoMUxVWmErMmVrd014eVFoVHBmWXA0djcyS29vUjcwVFBQbUE3R1lVcGlPU0t4RUdrWFRRZTlUS1dOU1IvT2g3MFhFQWZCTkRBVlBXQmFXL1BMK01SUVhqd1VpWUhMcWUyMFVlVUtqNzlFdklnaktPUEdreHdnREF6dUZHN1dvMWl5S3VOMnNSUkxjSGRpeEoyVFMxN0ZzMWZzMGdyeEo0NFpVOEkyNHJZWWpUVWRCU0lxTzVHQmZXSWJLcmhFZm9YamtJc3VtdkF3YlNkL0FlRHFnZVlRd2NBUHIzb2pjVHU3eFBEQnZHa0RXQXRZcEYxOU9GQjZpOHBaWEw3d002cHJocTBhNDFTQ2NxcktmVUFrN0N5S1hOS0hrUzAyVnV6R0ZuQ3Jyb1RhUloySFJxODY3NzF0clNWdkQ2V1M0SU5UL2w1SFJoZUhvck0wV2FSaHFrUmRZb09pd2FMb1JGMWhseVV4VitKcjNWVVZoVGRyb0p1MjJNZzEyR2xlV0paL3UyM0FvUndxdkZvSWlaNTJXRjZFZ0hrdFYxR3F3bUxJS2FOYms2TXdXMGpMeitQaGFrU2N4bEdTRmJjVWdWL3czRE5lU1RsWmJtS0ZIK3k2b0MxY1pOU3M1d2RFUk8wQ1JhK3FORU5obEJaZ0dUZUVoTDZoRW03ejYzU20rNDZJOGFNMHQrdmxOQ1paa3hEdTVnL3hjRXBYWUVHWU5MR2ZLekdmbDNkVTA5dlJCMUtEOG5jcGZmUFZGNkxseDFKaXpDUWs3azRvOXRrUStRY2F2Y2xjOEpGVGVYdGwxRFhMbU4vMXMxOVhsRUlhcGtMVFYvNmNmbzBEc3JkWFZUQVMzdnZpamxyNlZ0Um40UmtINnk4UFNKZnQrVmMvZGlkbkJFU0ZSOFpGOFJBL1RhQ2JudURKM1dwWnZYVm1qZy9IMEdDakpJT0trdjR6WHk0OXRrTDRYK1FhcG5iSGFMRnExck9iTDR6czZpTGwxbnhqRVRaaFBWM1VHNWx6b3BlanBWWXBiNmsxNFA5OUFNSjk1MitlUjN2YjcxSFpLcWJaVUtDVEg2WHFvbU1YOExIUTltVDRMU3gxY3lSVzZESXkycWJxd2ZJeEJXM3dxOUUyTVpIa3QweTFiSzhKOVlOY01wd25NNlcyQWppZm14S0JIY2FkUkI5cGd4SmY5bTR3ZjkxZ3NrSVY5dGFlM2R4Rml4RHFpelNid3BsS3NOMXhUQlR4SE41MEJvNVdTZnBCZDlxaXZpQlVWM0svODlSeEMwNWx2b1BjazZRT2RnRjVaRnFKUGpZNWc1djNPbTZpM1M0ajlCcG9sZHhqU0trbXYzWWN2MGwzN0R5QzBMRnFqOHZJcnVGWG9TM2NQOVJTRUJGelFiUXpsVXZNQlBhUUlSZndYUUx2NHBpQ1huMlltY1E0b1RQd0Z0WlJ6ZWdIL05tbHFCYi9KTksvYndaRFc5QVBXUG1lVTJMVWpwS2FuaU5GSGhyNU05d2dkTUx1T0YvU2FsOVBVUG1jRXV6Y0VtMG13Nm0vTENFb3pVdWxFUlhKOExyNVM4VWxabDExZ0tYaEFhTjRsbkdMTldROCthdTZzWFE5NUN1S3VDd0FDRnVSUGQ2djZyMHZUMXNjSEdqaWxraXEzR0JpYzJyajF5QWNWRTZCZmdQQmZBVFpXWEI4Njc1U3RFR2dhd1ZqOVk4dWdGL0JWSEJ6NHAxSjJlYWNtUWNBVXFNMHhCc2tDMW5RdGphbHN1S21PZXN2TVpCNkNFbHExeWNkMExydUJSQ2tGRk43ek5EWlE1dEhDTFFOdXp6NDZBaVlyOFhoWXltTXVYSnhYMndteTlaMTViL2h5VWRzNGZLcGo3SVdXckhUTFNSa1VHZnF1ZjYxdVpucHhtWUtxOURiUU9DeUpmd2xUaXlqYW5uYXRyUlVVeCtKdVNsU09qVW9KQzRYRDJkRkVOamZLc003ZmJSSzFhcVBWN1ZYQlVRNzQ3a1RNMlRhNEpUK2ZoemNmWGJnUmVSNVh2MERvWmVIOFZ3WmE5U05COTN5anJRa1hxUVJjZ0xjVW53Ui9WY3lSajlvQXlOWmxlU3lwMGZxaUFyWStsYUdjL3NQTW5qZ25QMHdPd1FHVUZieXNubEEzeFdDRzhLQ3BydHFTQ0ZWL2dNRTF1UlV3MiswQ1NMUlZpZXd1YVhlaEJKNVN6bm82bVhhMXgzV2tmaWQ1eVdOYlJNaXFXc3pnUEo4TWttUGwrbjJ6Tm1qbnFPSStqVGZkNEpFV3gwajFsc0NLVWdnMXgvUDZkdWxtcm8vWUVEL1MrUWRwbUVhM2plNXNDanNvdnZDRGEwS2ZxVk4wbjdCQlVQdkFnM0ExMG5tVWRWUW1MdHFPOVBrQVhrdVRyb1NyeTBQUTd0NDgzSmlsSGRGNUVHNFMyZndURzRPcVFVMjQyblhUUkYraXJSMGJIN09WbUxWdE9BQ2JQcWxwNVhRY3VhSUZqeTdqNnp5T0w1VDNvRXpWQzR4YWhHMG1JWnFLZFcvU0J0N0o2aXdhVDNWV3FpNnJIQkJhZEc3ZUtPVjZNckZpc2xzMUNzbGxsMEViaExQczU3WjhyTno1SS9wVDZkS0tkWmdkUFgwMk81cEpUM0V4SVh5SzVBZUFDZCt4RjlVb0pyL0ozNTNPZCtnNmtiR2dCNzNPV3J3eFloNWhJRzl5cjlPS2s2Qzg3YVhPZVhaQ0w3ZzlEMHVrN2l3YzBDejNOK25YcEsxb2R5TVBBd3lEWW5ka1c5T2tsei9iTjhHaHNNVWxiUmZITTVIelVYKzZaVnJ6cHJvcW42a2JuVVFMK3Bwd2dTTE9iSEk4V2NkcTlrVncvOHV4eTBMYnZER2pnUUNzT3JoNWhjUE13dGt2aGhSa053NHk2MHBZbXErYyt5U0UzdXZRT2l1T0Vxak8weXJEeDBXQ1JwMDl6RnNQcTRuQVFnT21vR24zTkV1ZUx3cFluTWxyNlZZRzRZYzhsTkg0RjdTMkxYNW9vSm1tdmFaS1BBRVNjUS9PSHliNGV2cUF0ZzJDL25jWDJxaVg0aWVyYWFlaDFiSUc1RkhTbUltekcxOE5NYkp3bmp0ZzRSVHFEcXdSR2EvZHAwNW5Ld2JXVE1URnRHSEpNNlNPb1VHZ0dnSEhuQjdSS3VCc3dsNnFDMVh2U0l3OEpmdU9QMm50Z0JpNWU3NmRaczR1WDZrbjljUlR3WkJJRE9jRTE1VWRRTVZUc3hKZ2twT0V5M3pZVThsQTJPSi9uMW4xWHZxbkdpSWtSMnhCczErd2FtNUhod2tpZGkwZUp3Uk9aSWpscmpsQW03M0VPd2RYN09Gem1WeGMva0M1KzVzWnpraERrd24remJxVGx0ZHJEWXViM2hqRVZmdlBJcVE1NDJET2ZycUNCMUFYUFZyR0FQVTdscTd3MmU1Q3NqczVLbVhSMXlsaXpVRHFudzZ0ZkpFVHpYSFFBTVUydUhqUWJ5U1B6WFhYRWFmOUE5NlAyNDBuUHNKSmJ1cWtqalEzSjhvbTh1TmFUcndCS2ZHaXY5UGNacnRWbGV5MXAyTW5Gc3ZseERyTFlabWRYcVJRWDVqVjhKTEQ1MDBYNjZkL2lMNU1wOG1VOVp1K0FaTExCS2Y0WVZsYVhsY2tWKzVTcVhwd2NXSml5cnRtcTlqdDd4YWZjSnkxd3lDTDJOSnNUdFFqWWdJaVllRmFqVEJqdlhCWWI5UEhhVEFqVWhUcWxzUmZjSldHKzBrMi9SY0hSZmVhL1dvNTRWbVA2UDVxWnUxZGdQSE9XM3YzODZtd2JOQ09EWGF1LzFZOUQyR0R5WkdMa0V5ZDdJa2FuUzY4aThXbU9pek5xKzVyZnNvNWduV0prV2dWSHBIdm5qeEhtb2tpb0Nsa0xERGRkRFV6cXZCcncyVkl6MVJjZVNzT3N1V3FzRVB5c0RQTnlLTHM2STB5bXgrT05wblM5UW1ybUZTOURySkNjZXlGcmFZTDJ0MlREa3lsbHVXUXZyRWZDNkh6UHBCc1ZDTm41N2loRjRuMmNkdFBGSzVqanVqWktHR2s2Z2ZIMmlLSWlFY2dxZUh6NlhDOHI3VTZkUEp3VWFYRTNna2g5YWp4dWltbzhmc2RQZWZ3aXBaRTkzZjVHVnBoN1hqVStSZ1VWbGxZNVREby8wVitBaTRPckx5Vi85T3ducEVEL3VqbWhBM0daRnY1K0R4ODJZVmtpZ240WjFjemtkRXFnUk5QbVAwUDBOYmU0U1VJU3J6WWxCaVBNT2lYK3VoeE1OOE12YVFrZ2hjSTN4ZVM5Wk95NjZuODZJZ2dnZ2xKOHZUeTNiZWMvUXMrem1UVDNrY1QzUWZQWG5BdlRCemxaaEFOUHVOK0paamlXQm9jMnAxbmw3RXNiSUZuZnMvVlBQL0hXTzhEdFBzN0JoSFo1VjJ1eXBGdy9hVUhab21vdkUxckd2L1RyZU5DRDFIdG5xK3NQVlZUdGs1QUNyWnZNK3pNY1lhUmFSTTBYZ2hVNlpkdHdMaWtqWGlXNlEyY2VNMTA1U0ZSN044ZmxPaWNLQWhkZllRTFdTUk1hcUJXYVNEVG9GdUhKL1NHQjFXVGQvaUNZVjNyaVU4cHNHKzE3a2lNRlQ0VXNhQkNjQjRSQzVuQi9ubysyemhXMVVkTnpFZU93R1Nyc2YvZnRKdVA1eGVSWEcxQXpBbk83dDJhVEZaS3pWQ0Y1OWpXS0piUkJjNUEwdVo2K3FBV0NkTXN3M25WT0xTVkpVcmY5WWd5QS8yNHU3R1UrbkNZbG9IL0hHenhCYXlRcnpRamxzU1pZdUNua0U1V2NvMndsMHc2bG1ZYXEycHd3ZzRWMk5XYkJFcWRKSWJVSmxIUlJmZ1V6NGNycVFGa2hFdUh1cDdjSXRJK3d2NDhjSGJZRGx0QWpxalZqVVpNLzRiV3c4c2N3Q2RtMU10WGNQOHM3YWhrUkJ4MWY1QzlvWU1UUS9BV2lPSk8xekgvQ1pOOWdSYktSUlYwd2xRNnp6Yk9talozWkEwTUo5ZzBvNkFHNDNZNHU1K2F0N25SZDdtRjExWFFXQlFlRnh6UE8zU0ZLcE9maE4yUkJXMmRIaW80V3pPeU9TdGE0eEc0TUVaQU1ZYmFLMWZLSGZSenptYm1oeEh0SWVsTkNIUitPZk80SCtYVzlFZndkRk5QM3ozY3VQdFVPVytoWTVMQk9RcWNQOGs4ZnJzWnh0WHJaaGJYVlFyNHY0WWdvejZIa0c5WkxzejRwN1Y4bVIwUVgrV2ZwOGhvT3Vwcnl3VUtNU1ZiVnpIOXFLZmJ0d2h4elZOK3o1NU9peDBuR254b2xKZ3ZYQTNRZmxGa2VidXN3L0VLQkJjOXN5aDl1dkxIVjBMaGd2Yjh2MEtrNlN1NndESkdPSVF0eFBsSm91ZjhWRlJoTGZvdFJzRmQxbEhDWXdFM1VkdW1kenF3eUJxU0kwcDQzbkFXRjhieGZNSDN4YjNTLzRPSGtiRjZTamZaNDhuanNkcVUzd1NhdkR1OHRIdnprQSt1MlZSZGd4ZXRsa3lEMkZVL3V5TjdOaGxvSW1ITythVVluRVhPdXk3eFM0alVQM1VlTGVnb3NuVU03WGlpYnNqS09qamhCVFJBcVVSL0g5VGt6RHRRL1IwbnFsZjRaWGFuNldDVFdvTU1YbC9JUXBNcmpsZlFjVm80c1ViWnRFT2RwRS8vbXovREFsblcxZjNaeHVVN05nSjFkYkdFbU1zbDR1YnpBN1o3T1BHcUh5SGJka29VTDVTYUVJVDNlLzNNcFMxejhzdVlXRGxzZTlrWDVhYTFGSW1sUm5tNjIvOEpQT1Qvei9uNG5sblVTaVAydHJ3eDZPdGg0MWlLNHN6NmJRUWwzdkM5Z0lBYWNRMGFuMWNKcGQwSC9HVHZLU2JFSmlQMmZvYlZYbXphODJsR3BxcVdPY3crU1l3T0ZKc3RYbk0yekFBTkx0aUU4MVFyTUkwZ1VWYTBhRWJqT09oam5yT0h0ZXFjS2MzMDAzbFprYTRVN3k2RDgwMlRBZ2hKbmVjR2tpUHJ0elIrTzhWYjA1TCtnRE9VN2J4ZjU3SG13WGp2S0t6ZHkzS1grOEx2WmloZ1V3eGFBYlMyZnlFQUxrUGNBRm00U05ONGpSTU9TdG51Q0lmWk83RHNIbVNXZjdiaXczbDlCSlVpb2RUdEhGTXpVSElnd2g5eUR5R3FXUE4vWVJuR1hqSHdDMTd6UnR4YzR4NWo0cTkvMjBNSTFmVjZFSkNlZzlCTkRWMk1xWk54dGwvWnJRcXlpaXpSSm85NGEvZk9hUjJHUE1RRDBLYzF2MGM4RkR5Zzh5eVByWXNvLzZDNm9wUk50YW9ab2p1S3ljMVkwSUtpMW9mbzMzVzhTUldTeFNVUU5nWmsxTi8zaDg3MDcrMW9jMFNBOWl1bjVvSDlvaG8xbTYrdi9aZWdOd3ZXL3RNdm5QVHlNVFh2dDJRaThlek5WSVFUcThOdzAvVjdoVVR0U0t3VWZ4ZklUamIrQUVweFY4Si9nMEYrWnJ6ZHBacW9aelFhWUFWdUUyMmU5dmRpY09IM21HOFFOYkR5M2N2c0RrWjRQc0JvMDR0bzFleTJiUXFCY290R3orSmQzd1U4T0JJL2tLY1lPZEtYSXZDU1RIS3VuZHZRSDUweUg1b1Ryc09Cd1JLSXZNVlA5V2Q5YkZ1WGZXWTA5ajRnYndXemh6cmxFK3lmbjhKOTBRMVFRVTMzVHEzYUE5bW54bGE5Y3Y0VklTemhqSEFpcjdLSEdZaEdxNllWWDRJY01sQmxTNm1oUGhid0xuYlVwdURaMHlBcWttZEs4WitxTGR0ZERTb1hDRmxyeHo1MkFGQVE3MWVQL1VaMENaWjlGM01tTFZkWTBxeHEyYm85dGtiNGZkaExOc2xMbGNUcFcxL0ZVQlRwSUJCMVhSQ0tXL2xZS0l1MmUySi9RTFFtWW9VanRBMDJQZ2JrTFNscEZQeStsNEFxaE81MUlPQ0ZZL1pNNXRENTErN3gxNDNqcVVUaDJPR0hUOTdvdjV3ZXVkUVBjTGY2RC9lNXZlbkxTT00ybnM4WVFkbjYzZmhFb1V2ckhKWC9VWWl3QXZQb0RlbkdZcm9GVkxGakdWY0dIeEVSMTA2bURFZDZnVnNTK3BlYm04bEVybHZFWVpkSXAweFlBUFRoQjNuRGZocXpuc0RtN3JGTThMUCtZbmFpeUxvVlNNRnVrVEZOT3B0bXBaZ21pOG9kR0ZQY1pyT2VDWnlpdnFOLzBKektPNEdiL3YyM21xeVIyOW1sNm5PVDdMRkFrY1ZzL0NtYWlVeDNsZ2RhZmRiUExlOUVVYmxnMDFWSEtyd3NtZEZveFhGUFNVcE1GTmxVMDl6amZOYUpjL3NJcVhSczM3aXRJMGh6Z2piU2g1WUZEMGRNcjNZczdBQ1p0bUFMeVFUa1BWVEZscTZidDU3ZnFzMkFBTHN3TGsweld6YnRneVNKWnFEblVzbzRyZTlSQm5VUnFUc2hPQjdTV2RqK3JyM3RhSUdjdU9pc2JDVkxRTFFOdFpFV0N3dFZJaTdYbTVocXllb1o0N3Qrd0paU0NGYVN6bStnS1VLc2RrNWI3V0dxelV3UGVmYlRDbks1OGVDREFodWU5bE5rb0xMT094SkRLbUY3c211bSsxNFJ1K2hmMlZyWUh0UXJ6TWVuVGZQZ2tsOENtQ3E4TmlVNU9xeG15ZTdHeG1icHVPKy9DRDMrL0lRQ3Nud1lhYVdSM3lNQjFHVlFqMU9mTHdtcTVFMm5LN1Z4VUREdU9LeGtMQWlSK2RVN2VOcjZVa3dDM2I3Wit0ZnpFNGd6VFBYZS9DZGVWbzJHSE5DS281WmRuejdoTWMxL3hkUWZ4T3BicGR1Z0EvMUlLdW4wSlVvRU9uc0Z6dmdia0NHZFlDUExaYlBpcDlRSmZVUldSNFJIOXhBaE1NT3NDbVlvM3orRVFYNHltbVFCdEJzdWJDdm0vOGJ2c2MzSmZ6R2hBQlFRSm1DVXE5NHpIYUFicnJyWExYNzQ1RTExU21IMk1WT2xPbVpPWTVGSi8xSkhIRTd5M3J3N09TVmtETFc3L1RuYVlwOVVQS0hvVVFDdjNoY0tzZE5VRUxVRlI1c1dLZUxOYTVSOENxWS9xYlBPeHNINDQ3Y3p6cElSQ0dRVzgxaVdjLzZTcXF6ZHpHUUVjNWpQOGNIekUrV2xOMlYrSlA5dFYwSzJIR2VHSlEwR1YySUxRRCt4M2VJSnE3czVET1FEdnByM1VNTzNacmNzQmVoNWV5OGs2ZkMrVmJ6UzR1K0ZIbElDNGpqbmFTS1lZT2tQSkFqTkVJV3BsNXhJWU1jS09FUy9oZmFVc3c4RjE1M2VydUdhN1I2a2FwektGL21QT0NtSXVMb3o1L2pmdk1qMUZpQkgyU2RnTlZtampzRjg2d0UxcEdWaWkyUGZBUmZDYXhvNURBamZ2QlNnSkJoS3pVZjVLUlpMa3RJMlhaTTUxMWJwSXI5MmV6K2JJTkpBZkhyL0d6ejNkb1NnRE9sQk5WaGd5QmI5SzFlQW9lb1FmMmw0Uk5JT3huMVdmb3VYcmxoYUJoT0lLNkliYktCZWdQS1JXZ0pxc0NBMHdhalZsMEwvdnBzMEo5UTRYMlMzdjkwNWFDeGdHR1EyL3FVZXZTMWQ0d1l5S0VZUzZsYnVzODlCNFozWC9KZTRDcS91ejVsU0FLTHFSdWtOYmxVSjV1MnIxdUdwcVpKcGxrZDRmejU0eURxOVFWSDUwTWFKQnNjdUVqV1BiQkVUN3pBNzZ6bkVvUXB2THJwQ21VTXB6bkl1bzJHYnJISlVyNDlsbWo4ejlLOEVicldicXh6c3Z1ejNYZHFBYm5UUURyOWorbXB4WUpXRXlVbUdOUCt4RUlyMVVlcjRuSlhKckZNNDlhTGFJUHJvbllWcHJoempJMWVKbGJnczAyZWVFaWY1azNCdVI0NG5nQmhHOUFiZFcxRUxXeDlIekZPd1gwSGJEZm9nSXpBRk1DZlB4MkVjL2tFT0ZxdktIdFlDeVlETWVWb1JnOTZseEVveHVTeU5odWtaQ0VHL3dNa1dMMTB6R3lLYnU1ZG5ZeXY1Tk5PNlZzTVdvRnRHV1dFVjVva0NaTmsxbXNSc0srYXA0ODBYcTFPK0ZmUzRpcURGVlhzVytVaTB4OGU0cmEyZzZUUnpycWw1TW9zRTd1OXdiOFpyM09sT0FjanlsUjRxNmJkS1hQSUl1cVBkMy80SEYxbk9BQ2lSMGFlKzNjaUdaaDArUGg3aTVtSmdQRytVU004bGFwd24yaVVhaHpPTzkzSFRnV1pXNy9HY0NZNXNPOS9SeG9iaWMrY1ZTRTRKcUhrNWRHM1VRdlE4dlFGQm5XUEJ0Wkw0azVuQlRLNExRVmpYaWY2eVcvQlJ6Mk9LdGFpbHBrbG04ZTVXeVQvZ0NWZ1Y3WmljYXVQL0dwMWZ3N0NJbXE1MVVlekpKcElVS3MxQmE0MXNvTmxxMjZFZG5GL1NWQlZuS1V2OVA5OU40NkN4OFc0OStHNVQrNkIzR3ZlUWdPeHZ1QUxnbElYdVhWRFpwcEJ5VVdWVkZtVE1xSEN4L0JrWVFDMHQ0QUhQK1paVWxLN0g1em9iRS9mcmpWNWl0Vmczd3JPbUxCTXorTEE3enQ4VEorcFRMb0RleDB2SjBLbERWaFRxVUVscFNXZU96NHpYaG5CTHhYTGtpU0hpNHRUYmovY0ZRb2hVai93TCtIMlRZV1dpS25lL0Q5K3ora2ExVXlsUUhWeW1zWHdLSFFTL2NLWTNOV0s3NDRoOEFNNUhzR2xGMDVBR3d4dGg0amFCRldWOUFrZG1lMmlaMmExVzB3TTFNSVRFTjRINndsM3V0QkNDekp2azllbU1zOGFBM0tJQVJZNDBLVVczeWwybHl2RWE1clp0R3g1c3pZNWZSK3FOZjU4NHRuTHR6OHV2dGNkSTcwRGpPeE5aRDNidzhlMXhZeksrS3pVZ2s2UGswR2cwWk0rNGE0M1dVUnhnUGVocktSUHVDcmFwY0RjSTRJL25wVWxUQ1RHeFVhSjFvckFKOCtEaTVzanl2aDVaRWEwYTUzWEkxaVNjRHJpL0loK3dxOUdoR0wrVzFBYmpJNWVQWDkwb0ZTWnRab1JxQllkK3hJS2tkUnBkTjkyN3podkNlWEtNS2duYWVDNmMzSWVWN3laM3k0RDFIL3BMQnhUeGNobC92VWFkODZBRzZvZ3ZXMkd5UTBLNGxkOWJiY0V6TnBnY1FqTXRzTXdLMEVnRzNuZXliZE8xSWtBUCtXdTU2QVJ4RTE2VGVIQWNXenFueU9ybklsb2dCVHIvMnJxWGp4byt2VlJEYTJjYW15dVpLbnRzbXRDYlpBbHpmdGdmRjU0U1lna3ZhN1BZVWlndVBGdEx1Mkx1YnhMMlJHSE1MWU9PUkg5Mm9icTFYaXRuaWh3ZWkzZG5ER0diMUZHdjNyWk1LWnczdW9iVWVjV0MwQWUwTy9oQ3MxcDh2RWpFYlE1QkRLMkhLclRZMGE0N3RFRi9oVzFIZlJyZVMyR2tQb2U3WS91d3YzSXlyNS9FUXR4dGQrSXBmUXJmZ0tFb3B0L1FOUjVpcllxMGtxRHpvdW14V2FEc09zbW0zQVVKZUlOS2xYME1IaTdTR09taHlBTUhYZEpTSi92UFJRZ3lqTVc5Rk9EUXVNaTJoa2lCVndmVEdDRWh2VThCdjd2aTFGL1BKVzI5d254aTRvazEzeXNYb2tVMWQ4N3htTmd3WUdhVTAxT25qa2ZlOHVXekNGdnVaT2FUUGNIT1JXNlN5L2hHeHBVZDNFVGxnMk9jdlorK0preExKOWpXVERxdVF6eFFBWGxQdzRjQ2IrY0RWcFJWZDFqS3F1Qjl5NGFuMzNmeE5qNVQrcnBabU1ZSUMrMDFFZzhxcTZRQWZVQk1mbHpxS2JrZUFuSVc5czFKSDlIa283TVprazBaUFRaVVhMUWtWMzhCTjRBclRxbHpsb25HQW1YRUVYcUtEbDVhd010OTlEL2VReGNlL2E3RzU1cmEwY0JvY3BqbnAvcjV3Wk96UktBaTBtTkgvOWRSR1hSUnkvTkpKRnVGNURWUndWR2lLbi9ZWjV6U2gvTXROczFVakNMZ3JOK09OenRxVzVTQnhYd1Fsb2ZyQi9WMWFLa2FYbUVuYjVyL3ZOVGJCaVR6RWdQTis3ZDdqSzh6Wi9tQ1ZRY3hJcWZMUXBmRnV3bWV3SXlWQTFOL2JScHFwZXF1azVTQjlubms0NzZ5SmorYk5UTEl5RTB4akUyZU9EOGVha3Z3SlhNUXpXVXVrNDVQdlJkbTRHY2Rud28xTXdPWHJvNmgwektMRDBNQkJJOFdQczJVNWMzSlMrT21pVnZsb2gxWlByTnVBdHdHZWM2SkRWQnhnclhKRWx1MzJjNSt1Z3Q4SGVteWx4NzlpbTFpMUl5aXN2aHdLaHNFQWVpVWhzNjVUOVJKdEZVNDdiK000WTZLYnlLSmtZK29KV2k0UkJMbFJUZGpiRUZpTXJDUWl2VUJONThTWkJwRXpsYzhTbmkwaWR1NThMMUVmUjBjQ0NVSW5SZmZuaElPQnJlenJ6ejRESFkrRnVSZzNvL1d4Z1pERVR4T2hVa0FrcjVKbGJpTkhSQk9RUmloemVIZnlGM0ZLZTd0VEVLY2N0cnd6TFNSVll4Rmd3eTFndUtydDlnb0tQWTczQnRuTHREaVFSeTkydEI1ZVdBdldmZVBETHFvaVIrekxNeCtUTU1JS3FlYmVxbGEvdjNRTWdjT3VaakNqdUJXOGNEMzdySHdqVzZsYUlaYVVwdXB1N3pWNVA4SnJYeUQ2aVpzZUxkK2tyT3lXZzJxTDFIOThhTFBTL0M1V3J2WDUwY0ZEZ2JkUnJ2UWlEYUhlbXNWU3hHeGhHVEZ3NEZmbjBXZDZkaGl0Ynh3Ymo4MUJ5SDNZUWgyK3FUR0hKd2RDTzRUMTZ2TUNRRmJtQXR6SlpKMTYyb2hHTnVQajNSNGZXVmIvMEVWWisvTjlIalI5SmlmMzZJam04ZmNBSTEwNHhyblRZNjFzZjd6RWhhcDZjWUNCcmViS0tXZTJRb1Jyb3owck91OFI4ekNacEd2OUlpWlFqYVNnSXY2N1hrYzZrNU9xRExMM1QrRzh0SGhneHUwWGtvTGhVRE91aDNoODM3RVRUNjlOV2N5NC9ETkRzaGhtaWFrSFVvTUVhMXR0UnNMOW9Ib3plUW83SmxBM0xwZXN0S3NnSlYvbkU4VTUvbXRBS05sbi9IYjREZlBDbDVyaUh0eEltTWtFaE1BQ2c4Vk9sVUNKVDNwSGUreEtvZzBxdEdCWlRuMnBmQ0xPdVZ0aFpSWUI2ck5wbkZBS3Y2MGJENE9CeFZydHNuVjhtVCtwMUdySjVHQVdWMENCMmkzVEVsMnVycEhMVFFSSThjenZ4RVRQbGs5QXMxSUVLdTBhOWlSenREZldnTnRkNlIxSGVuRyt5UGV0cGVGbVZMMXduelpLOHdqQS90bFdrMS9DY0FzRkZFYkpVQVM5NVpzZHdqdHRycjV3VkZyYTdycWFROUU5V0lyTnFZdEprd1ZxdXpDWE5kUW82Y2duNzNQWjl4SWVVcWwxSXVOcHZMRkVGNEFsWElDczBZQlovRWRCREpvN3kyNm5BaC9oSi9vaW1rb3lyaGlJbTg0K2ZsRkNvWG9MaURNTDhsbXlUZFRZWTFFdHo4YmVaLzArYU5IWGRLMXRaMlBoNER5enovRzdwdVdLaGk1T0FZaUVGY2I3RGhPMUxoNm02L2hRb3YybFhtT3RnWjR4TmFBUDBScWxob2lWMmZqVllQQURlM3hhbldFRXlOQ0Z6bmN2ZjVoNEh5akQ5ZTZFbC9EZ1hsSytGNkxkV3lBRmZpaE9xYWhFZVNrNFFNUG90b1pMUDVRdGkrYk00Q2pGMEtOVmNjRHpmWFZVRTZNYkZqbzZyM1M2T2ovUUcyaEFxRnBoMlF1bmFrM3JodU5kU0QxT28vcGlPWXZIdUNjQ1V4d1JEUjJZZGxhMUpweitPa0hlTW1oblBKd0h1V1VwL2pVVk82eG9ocW5GS2dJTWszc3VUVDUvU2pWNTErOHNYcW5td2hQdGNES1FmOUEzYjRxMGdyZDhVd085aFpvRG5SVmdQRlRpM3l5Qi9UcHBJOFFZMFAwb3hybnR2QmtYZDMzbm9tV3ZyQTcwNnd5dkM1UkhPdFNKQ1dza25HR0xSeGxBb0ZOdUJIVmVQVENmbHR3WUEwbzJYZ3VMdXZyQ1dQbHU0TW9jMXVEYjVReThUKzZJUklLNGhjcTkyaGJwVWRyZjd4c1hzb2FPZ2lmT3RITytqY1ZQRWdkTldCTjZkOWNMRCtOeDMzVnhuQ25DSU02STFUTnlLczVlYnVlWGVBeEdCdFFDODJCcUlvdFJFa3RWY0tlcGtEWmtvTm5FWG9aVTVuV3dlMUF5TzdhOUkvMnE2N1JjOW9KNC9kRThUUm9kQTJpdWR1dzZoeG1YRmhwWkJVL3hINWxOZW1WMHIvQkdNU3EzK3lzSWY5MFBzYVkzVjFGeXU2SlNnZytoaGdpUXVOV3IyQnMxZUFUUHJyeE5BaWdLMU5oRjIvaGtLMnVsVXZiNEtmZkRIR1U5NmYxeGFGNXdqS0p2ZWZMdHJRT1hKK1lVWVBaejMra2tMa3ZQVU5GN3F1TlBFak53am80bldoejZpckJyamZvczVENlZUNkFlZFlXbTFoRFRGRjdMT0tGeTNVL3VWWHdwbXkwcTlEcC9CZndwU2xNNE9Wb2FwYXdiWkhTOUFHcWppVFBJaWxZQXBaeThHTjA3ejlFd2FValRQRWJXbTU0cm5WK1BMdTdHaHF0SXdxdGsrOW00QmFDVDJqanNnRVVxODM1SGdld3pNOXRldmhVUkRpOFhRaEhpRSt1TnU5anp0WTAzWGpNalFrVDZRMWtIcEZFM01uczRPQ092ZVgrcUhNVkJ5SHVCT2VBOVR4bjBPUTFJcVJqMUo4YXVhUkJIbUE3TGVsdHpLOFhQaVFvZjFzUmVIZFdPTDlzTXdCdm5NRVZNR1NuNTZJNmMrMWxhWXhCNUNJVWR0QnBqOFZMMVZvdDRUd0ZoZWxDS1crTmlKVDNueHN0aWRkVENzVHlwN0FVM3M3VjJmbEJTSk52WXV3UnFMd2xVS1NQdzBHMDg1eDFVT0Y1ZGxHNk85Ym5WUWtBbkZzNzMzcDVVQ0I1N1NJMElZV3ZrT3pZR3B3NE9zNnhxSUwyVm4rVGZHa211ZmR6ZU5CYzN3Q0w2Tm03cWxYa0FSdG9XMmw2Zmo1U0xCS2d6UUdGK1M5aXQzc29oWlZ2c2EzWExvZGloL28xODdyNE1OUGduL3dlTmZyY0Z2RFdKajVnakl3b2NlR3l0Mzl6SDJzanhYd3B1cWNjM0xxdnlZZCsxTk41WVYwa0Mxd3IrMERnc2txaW1xamdRMllmRU5SRVNlVVN1a1dEdEpCYWlDSTJxSzVhNlVpVTJWUWdnZ0J5RG1mVXZORmpSSWhUOVNDdFRNUjV4RndiVXQ2cmY2KzlKUGdoNFZGckhyU0hkY1FUaG82R1NQd21WUG12ODBXcHVKSEo0Q0l3THoyRjIyZUFHSmp5OE4xcEV5N2EvT0NURFljRkJIYWhCZFcrL2NNTmNjUS9zcE1kZnQyQ1BDS1N1NDJOd3IwaUgxTkNqSG03ekRJcWlpcjlSZGpLUlhoK0k0YjU2NTZ6S1B0ZGV1RHlnK1VJYzl1RCtpWTBSekFaVUdBZWNxR0RxaDQvVCtmM0N5OHlqZ09KZ2lDbXI4ZkdDalZZU1ArU1Q1MHQwSDU5QW9TWC9XbHEwZDhNSXFONVZnRjB4SEtkUWFKUkMxdVJ0dHBuMEdPUXIwTG9TRHpHdUhHM0J6M2gvT2NUZDZyVmkzU25FYk5RSFZjMUF4ekduV25VbjlPN0NGZHhBU09peHFMSVUvWWVZS2pSM0d5a2d0UWs3UXJucVJMZUJvZzFyU0dSVkJwTG1UNS9kSzV1cFB5dHlEVFNnQ2FML0pBNkljR01ZK2EzV0FUdUlPR1NFcEMrcHhxcUxTK3c4c1l4RWJHZCs5KzQ0MWF4akg5UUpOQ0VNNm1rWHRDaklMQ3U3OERkeUlmMVJkb3dqbUNDNjRuOVduVlAyV2I5QmVhSlhkSHRzRlI0YTh0V1dGdEE3eldUK0tVQ28zaGtiSkdJZXRRMFdkbW85QmVhcERRaitadDk3dWgwWU80b2Q0eVN2TGdlcVRNdEp4UEprc0FVZDIyUUxXemVnSHFqd2FwdVlEaVRzWU5SdThRL21kUDZ4eVBDUTBENWpZeE9XaGZwcjhuZ0dFVjE1OXM2anZsYjB3SW44Sm45REZTR0RBbnR6UHVmeGQxSXdRUG14elZJT1dIWVhQWFdnMGNoY0tqMGszbjdDQTdXUEEyQ215eFFuUmplLzBBVzBhd1cxblBsR1RHdlc5Y1J5Z1RQRXVPUEpPVnlrT0hSdWprbi9EeDZyWHNFOFJFOTlxWDBxT2w3b050VDlvK3UveEFEYjNyalVqVlB4bUFRc3JVSFFOZTdrcEV4TE5DVUVaRmlmbXdVZFc2ei9VQjhRdzA4SzVBaExCbld0S0dEMmhTNStZMmJ1TktMbXR2Z214eStRRVAvMUJqYkltb3djejFKaDBLZjJ5cytaN0RjV3hhVUllZlVYUlpDVTM5alRURDNYNkhuYkdVRS9BbElqSGtJMkEyTnp5clJEWFlha3IxSGZUbVI0c2RDcTh1aWpxdG5RV3hsUjhrV1BhdUdLVjc0aW1EZjZXY1FOVHlzYnVyUVRKUHpJeWpYSGlONjV1Z0tkVUgyTm95aldZOWpHTXVUU29VdWRsOGhRdVRKNW1UWmxNdGhYRklSUmhzV29XaHJ4Ym1lWVBGeGprdEhqQ3dCd0NpVGI4M3ZsOTZxU1VkRFExUkZwQWIxdGUwZlpKNk1WVGE4aEl5Qjd4YVMzbzg2dkNGdDErVXlNaWYwN2ZhWmRYbVNic091aVYwQU5RT0lJUGEzYVYyY1Z4eHB4blpVQ3pYaUVuWW5yUFRETFM1b09qdmlIZVVaSjljRTJWNFBLMUVpYTRMclVIajN1ajdlcDZWOVlEa2FGandEOTRvOFNpUldreUswNHNhSUQ1VUNKSHJjdFoyYkNpWWNqR2dRYmdLU21CejFKbDNyUm1tc1FBYldmRHJLRTA4R2dkd3liTGtMbllUOWxCeDJQTmplOURkVVhiRFYxNzFTS3RDdVpvWnhuYWpUMlo2UmJIQ0pmRFV4MEZmWVBnbmowMnFpSlpwSlNQZ21pbXNxSUt2ZGpvNS9TOUExMjJJMTdha2x2WGdYeWxhL2JrL3FyeXlkbTh2NVQ2SDc5SUI5dm1iY0lybjg5SlBxVUhJb0lvY21CaWhkSWJxSFE1NUlZbjZmdWRkM1hvT3hiM3pxWE5rTUp5dmVHdzdHSkVuNDlNNDdMTkVuUFNDMkh5b0ZZZEp2OTF4cmUxTEMva0xyc2RCclVIZ1crZkdoSEovdVNkUWZwaXd2blpiQzd3SVA1a2FqTzhMK2UrVUI5VjlKL3VoVGlYTDZSaUgwTWU3QVdER0lXWVRPeXFyT2cwSUdVQW5MVzRRbG5zazNXeHM5R0xxRWFYbU51QzVyUDdISlFOQytNZCtOOGlCNUhldlNPNE50V1NkR3VRTVptSFpuVkxvUWpIVXF0RGJlZ01nenhBdVlmTlZlYlFWVFJJRHBvUWVhUzYwUmovaDdicS9vcVJEOFhUMytJNGQ2UkxGOWdTVVExNTMweTd2Q1IxdlZ0ZmwwREFWZVJhcStWc3F1d29jeFB1SEJPSjhML01LcDlQUS90OHpyWDhiQjQxdXJRMHpBaVYyYWdnTXFkazBabWxneUpremNMQXBLaVZMLzB6UmhjUVVFOSsyZGVka2QwcmdKTklGcHBudnIyaklIdk9zdFo0aGVrK3pFc1F2blNEUUQ2UzRETlE1SHE2MDlXZXdaZFhzMDVHQWEwOGJ6VmJidVVzQlFHV3R3SU5aZzdNeklDUXFpWi92SmUwQmpRSGR6MDFLNXhIT2ZkQ0ZwVlJBMVhkdU1MNDNNUUxVWXdVMkJiNWtTQXZTQ0wyRHhYdUxrd052TTdwcGFPK3Q1cmZhUzZ0b2J2dW9VU3pralUvOWJnenp6amI5QkM1c0x1Z2JsUnVIT2VqNFFyeWRnWXZtTElWd3dabUoyTW1KejN2YjVOVm5ybUIySjZMeE9ienRZM2hNL21EUVdWVTJWNE5laXZFejREaG4yT3JqSElqSGZqRmNLTlZNWlU2U1d4YnlEQ3pnN29jcWR1MUdJS0doMlp2Q3BGWitkeWJCLzBYdlRBZFRvT09LMDdzbnkrRVVPdEQ2VU1kdkZaZWdnWWNERVlueHlocTAxVlhEQ2Ezd0tWQ1FJVWg4cVBEWngxcGdvV0c5eDFDd0pjQ1RHVkxtSVhKaG1WbGJMbWlJOGlXMGVqcWhnYk1oUlNLeVhNbGZiR0tUOVI3K2FtMnliL1dMQjFwL3FhVlRLNlF3blNrNGNyRGdwdWNRdEhiTDdYbFl0a0xLaWxLSDJ3ZEdTNW52b0RSWHhiZTh1RGIxRmtqcXZxSTlQR1p1MU10S3RnVHU5enp6d1ptWlJzd2Q1dG9HZUV5aWhjWEpmY2M4eWdoMGExR0dlVGhSUmg2dzJpOGJBR05iRHREKzh6a25TdlpJbFVCWUxxVGZTR1JRR3ZFbmwzUlhadnpHUG53L3FWS1paMHBvRWJEb3ZkY2E0KzZMZ1B4WThmQVhKRVN0dW9lc2F5V0dHTmd4QVlIVWhPZEdBTzcyRkpIak5LUWg4QWFyK0tZWmprbkJENllPd2RoWWdVOUh2dkFUVUtaMVUwQWMwL2RRT0krcmh5WEVXSy84ekIwdE0xb0x0ZFZPbnk0RjFHSFBzdjc4NnhwUGFlcUZ0VFdKNEdmK2VVSDlwWjBreW14VlVZcnlKQjVKT0ZIRkNWMHgycUpnZDl2RUVKWlBkVzNOajM2bTVmS1VORWliNlpXNkRRY0kyMGNPSlJLRmEzcEVGdHF3ZHlGSXl3VUhxbmdCT1NXZmxKcklCSjJNcDlaSFJia291djRyU3JGR3R3YkV4SjJDUXBCUGZLSzlyYTBhcVBDN2RhcC8xV1p2M2hYMzFmdDZhT2lEK2RCS2FFOElEZU9WOVZJTk9sNmRZRDVicHNrZFFnZ25tREVXY1B4SFdVZ2w2akdLRGZ5UlBDbXhSVkVKd1JlNUxndTVOajN6MnRJWElvZURWZTZibkpzeFNZOUtSSlpVdTBFclpvQk1VaTV6Zm8yU0hVTXczQWszZXk5VUR5d3F4YWsrTzh6SmxhWDE0ZjkyUGdadE1VTFpVYjZiZXJURTlzVXFOZVdwVCtreGZhSXNwYmJlUDdaUlE3MFNWN0VGNjI3MHpmcExXNmtRRGFLNWU4MHFmRXZUcXllckR4VGswcHQwS2V6K0dnZFdERzUwRVJJMUVKaWIwZS9OdWFzLzVHNVAvY1p6Q2VIaXBlbVVqb2FLRS8wWTNSbGpSMzNjdUo1TUtNRHQ4ZVpicVF3aElMUFNWbE85cXpyZG1aVkhzdFpTTmxVdzlDZGdwdW9MRkxtRXM0TFltb1FpN08zRjBkR2YzbkdpTkhacjJHdjk3OWcreloxaVdPTGhqL0gwLzJBc3ptd1dqWFRLdEVXSSt1QkpvTTkxZXdqQlIyUlBhUDdta2hCMlpsZ1AzUWovZkVTVUFvdG4yV0JELzNNekhSUmUvbGlUM3Vib3M0UlBURGs0NzE1blVnTncycVV6WS9jTE40VENpdXlRaitRc3h6WlMwcjNNUERJL1FVU0l5VWFRR0dxNUZZakpTTWV6Z3FhRDluM3RQYXN0SVBxVEQ0MmIvMlNTU05qbTIreFd3MklUQnVRdFk1alpidy9BTyszL2ROWWR6ZkZEQ3NrTkZBY29Ta09KMWNjVTJVTis3NHpONFJIUmZjYUwwaFNyYVJUR0lJMEJDdGNXSEt0QnNMMUMySTdzenc3cm5KUVNnSlVhdjFueFUwR3JMbCtRdVJkMk9rSVMvanVIZXk5RFBWVktHUDd6TldTSzF3OUFVb21jMnhCMFB6RTlQem16akRUbWJ1SUcyK1dOdFc0NzhFUTVEeml4VHN0TUxKMExyckhpNGFLQzBFeCtpTTVjNllIUEYrNHNuM3MwcXR2dkdGbk43OEF6aFJxNDZob3lGTVFuV05KTjhFTnJBeEZKV0EyRmVJQmdFUGp1L2t1ZTY2Smw0SFY2OS9ldGgvMFhNbHpvRUYyNy9qTGI2akNCY3NDWHlZS0xpcE9PTkc0WjNiN0tJOWc4QmNnbThoTTQ2ZDA0NkJIQ2MyMmxwNnhmdEdxT0dFdkVsc0hJSDkyU2cwRlhZYVJjbGx3b1NnY0JOWENhREl0SFVpbTdpbkVkN2RnUGlORjdSejJsM2cxeTI3ODFTMmplcmQ0dldMSVNTd2s4V1BCUFBoRGNqdyt6WmhZN0c1aVFyV05FSkVuTDI2WjNpZk9DeVNmQ0lGamxnUWVqSmVtbnhtNVJPSmNabnppbGtuc2p3aUNibmJaTERwWHEvVW4vUnNDRFFOK0xRVWp4THNraGRoQ0thcDhVVzRlaTZKek5IVStQYURNNmJXdVI2dExpZ24wcUFvbmN3MUY4RTVsbW9zbjhvaGlyVEFIbG03c1d1Sm1FSDR6dWQxbHdlNDI4UTlwV21PV3AyZ01TZ1YvRFhyZWlGTU1hNTVNa3JHU1lSWVpWeUpNbDFpMTBzZmdBbytnOFdDa2dHbkVib3JtVGQvdWlSNDVlVkVKODYyL013bGRZejhLODJLQ0dHNmdDeW0vYkFnNEFUVnlmWjMrUlFQK0RBTU1tUzVCMEhTSEkrem1WcytVU1hocnppd21HWkFLaE0zU3VBQzJWT0Y5RVpuWkluMlhaOEI2dU53enZqaStpOXBOcG1iaE96UkdoOVVsUTZuejRuaXhJOWx6MWJFbnNxZ241dTV4eGVFL3MybFhVSHFndEZHM2dwRWVjdTRBb0QwWERub2tBSEFqaFlTZzJRWlE0QVJXeGg3UU5XOGZHb1RRWElqejZmUGFwMzRSQVVzTGNxTjk0OGlGTHBORnQrS2ZPcFF3R3NhUk9EUnpJZEhVeHpwQjBaMGljclhWc3RpRk1Yd3cweTZqdG51dms3L1ZGOWNjUGE4MjBPeFJyZzJzSlM0ZGtaV2lQTVFwS0hMb2J2cEdmbnRVMisyWnNLUVErZE1xVkw0RFpkQjZTb20rYTdhZGh1QkxwTjI0R3pmVzdjY0Vrenl1ejAzN3IxcnUyL3pIOEVRWWI3V0FMME55dUlVcWQyUVhxQ2ptZmJ3V001TDVBMUNKcnNTN2pIRlZrd0FWdC9xTTl0UHc3cGFONWlnZmc3bkxaeHRBOHYrRG1VazFGNUR3WU8xaHp4NnBCbmUzREtSTUVWQlFhRjd0dU9uZDRVU2M5cTJieG5LUmhpVXFvY2FjZFNwVTNZeHlhaW4wS2RPMnVCSEQ0THFlaVg5UVlrS09lRHlYemN5WDlXbUZ0TjJvWU0xYWdEeWJjZzIzbXoyeHZ5cTh1WXh5NFRrN25kMmlZYXZsWStQcEFaSDRWVUFJYVJLRXpMT2dPOWJ4ZWVveVhnVnk4UTlaVUx2emdjTXhSNzVOOThtMDRJRUUycForYnRtUmMwclozREl1V1QyS1RsdXExano0ZW9KOVA2WVg3VFBqWHJTUjhNQzhKUTNqOTNSa1hkTFAvVWsxRTRYMkg5SURwb3F6WGZPdzE3ZW52N1g2VFB4dHB0KzhkSVVBNFJaOHI2MnIzYzNSS05kRFZLeGZRbXprMlROUS9Rc0dHeThZQldIem5aY3NNU2htSUovWkhEcjdnS0RubWExMjNYM05JMDNJdTl1VWlLUEZDd0R3SlcvWEtQYlQrWnR4VDBpUittWVV4dVRoWGVwMEU4UHorSzcvMnJJeUZ0RDNWN3FDM1p3NGgxWVo0ZzBncnQyV1ZIeGxWeG5uMDdoZThBcnNSbGNRbWh5ZVdXMnpEc1ZOQllSbEpUSlJNTmNFcDhxQ21ReERQRExMeW5mT1ljRXlRQXc2Ny9RUmlWRU11WFlYSDV1QnBmN3hpaEVXUFlKaTZ2d1YvZHAybVN0aUJkaldLSWpIZzlla2g2b2VadlY2OFF3YmU1RDVBb3RFZWJoaU9yVXlmUXMrdHZVVDZ2VGNVc1ovQThqM3VTa21Td2tlVFpGS0QwWldpQ3MrTVFUQ2oxZXdTZVlmSW5NWTZSTnVKbVZXcENzYUhYNXNlWFJSZjdVZGlCSXQ5VkNnZFhKa1E2OCtHazkvSWpRSlJBTEFJZXliMGhYOVdMQ1V1UUpsL1RXOWl2OXJ3em5GUUo0SE00Z1RmWFRPOXVVcEQyQ1NKTWZQMy94RUx2V1RwZkFlcWduM1VGemEwL3dlc1hmNVFSOXNjb0tIMndsWUNPRTg3MytmcG1JRHhrU25ySVhRd04wZlZ5Mmx4YlFnU0taM3lRR0ozUTJxUTQ5QlFjc0lQb2MxRVVUcExGUUFReHptdHd4d2pyYTJTL2xZR3Jjd0JLcmFpVWI1M1JXSm5IQWUxSXk2SkJaZThlMHpXZWc4Ylp1ODhlU000YmQydmFiWktyU0l4bWxob2NyMXFWbkd0bTdzQ2Y5c21FSEF3aDFNTnJCTlRMK2g0QjhjdVRyejlIM0lxd3dQK2VzQkEwS2lFQ2tkOG42MmFWc0dvb0x2OERFWVhUMWlTSU9ZREF6MFJxakdJMVZDVHc0c1dyUk1Ydis3ZWVoa3JHYk9oek5pa3Jta0FLTHE3VFNzMWcrcVJuNFFsZnJzV3NyNU1lSDYrRFRaVjFnNEFZaGlrYXh5VjkrNXVmSjFIMnIzeTREbm5SZEg3UHFMK3EwVmVIUHVLMndmSG9SRnZ2YjBONExjNFRlUDdQWHZTM0M4ZWphRktoeTRobDRyS3NiZjhQRzVNeE10NDB3SU5ZNTE4d0dlRUpDVlV4UGpUT1kvSWZsb0cvWXQ3UzFnZ0gxOGtVNW02Y2Q0R0lMaGoybWNtK0pCdDA3elEwdFZhQ0c4Wng4WGNMalpwdndUVGN0c3Z3K0JhMDR3T21Sa0VZY1RPT2cycmh1NlRYbmpRcEIzQkFYbmJockZxREw3MFdBV1RZWGpHcUM3akJMTWpzSndtMjBBNDM4Z3NjbnBBNDJTT1ZWQXEvby9TZHRBVUV0N3lQVWZGaWtheUo3cUZpYnptUjIzZmN4bm5PS21vT0Y4dGZ5ODZCU2oyaEN0UjMvZGdXa290eUVvV2FoMFZMdzJBbkFRdHVBdGFlRXNVZ2xtcmxuTjJ3S0ZZeFVFRFpVa0ZWTnVtbWdBT0xxcFRVUTFFeEdXZDlFa3JlYUVhN1ZKZWNQR0Zud3JvYzFMZFFOdUNtMno3RllpQjM1M21JS2dydFMxYXVkWVlTYWsrcVliUVZqUWluZjhJTG9iQ1JEU2IwZStDeTJUZ3lkdUNIaHQwSUlLTjJCRE1hK05pRXpnT2pRK0V6MVpRbG9SZ2piNVN4VkpodDA1RjV2eVlKdWlmYWpYampFczg1RnhVMjZ3OHpwcDJkK0RGZ0FlS2VCb1JDUGZGcWhiRVY3ZkVMcnFmbitKaCtaNnlHTHdaQ2dvQ2NhUGxBZFhoWXZPOTZPVVplTUp2bG9hMjFycUh5akREdEhLRUxMZU0wSG9pMStURm4xbGNnaVplUVZ5NEIydWhtT2YwT05PeVRXRi9yWVVsQ0c4MUZIRXllTTU3cU1zbVlVTWJmeDJNUm92ZVlQbXVsa2Rya1YzTVh1NlN4RFVTVEk5UkN5eVZuYnZPRU9LZUVrcElwVmhNRFZMUENsaFV3TCsyMlpXWkF1K2pBOVVQYTBPSGhSeEFTeU9hWlYzc1ltWTdtd0t0WnlpNWVtclRkYWZ6TzFWTGF0VTlva2w3VmlNMzZ1ZDlUdUlXL2FBTU1rMDhBekpPMUFoT1FDN3Z0VXUrVVhZMXJNc2JTVG9BUk4zaTM4T1R1T1U1UXBzWm1GMzZKb0VNckErU0QyaGpSdy9McUw5T3A2OEZEemJSVTZackdqZlBaS29xZlpENVM1RG9IV0dtUG9CU0JKUkZJVlhEVEVURFF0RTY1M21nU2I4aGpiWUpaOCtCb2VYL01vQzZPd3dHS1lhcVJJakJ2SDR1NEFGSnV1TXhhZE80YkdFYkNmbW1NYlJ6LzBOSVpCVXpYNnJCTEhBbGpIUFdkcFJ1dTNLMEpqbTFLRzhxTU9TYm1udS90ZHhXOXQySHQxTVpvNEVKQ0NSRHA1TTZIZThSZXVFdk1PdThtVUtKSGcxMEpBd21ROE5vYlZNVjdSem5JVS9GRThtcWlQZzhaNUR3NTFFK2JlMytDTFI4K0daeElORG1pZTAxdklWKzdJY2I5bEFjZHg1emYzTmlNZ2Z5Z1ZOK3pMaVltUldjNUlWalIraThJSTdleFdibHFraXFyTG1ydzRKWVdBanlkb2VvWmVnRkk1QXBRdGdSRjVMVkxjbUpHNXNKTk5yVTl1cERhcVNmRFRZQ2U3VldBS3MrWmlHb0pCbkhJcUZOV29TYnhHdjZYUXdVV2NLbno5TnZHakR1YnRYcVJjTkxpNzV0Wnpxb1hqMU50SlBtMDJHU1Z4R3p1SkxJRGxXeXBEenBIT0VaMDJxM2ZKbEZzZHR6QVliODFHU0YzcE93V1VLbk5vblR4QTB2R0Z6QSt1by9rb01QY2lMVG5NVHpadW5rSXFySlZTckIra1FWNXJqZmVOdTU4Y0JocW9EYXNCa0JSTTFDanlrVUY5MFluS1dINkROSUUwbWZlb25BblVQK2FGQUNZZU4rQmFWd3RsSUFuM0sybUFsamVUMnpFOEswUTBQbXBCRERIejRxcnI0dXNNYmwra3lCZjJtZjNuZ0MyOFpzMWtNZmVkYlNUSUh3T0VMdG94bDlKUG1jN21hemRVeEpjeHZSVTZpZHVDSGZnY0xuYmUwMUNPYlFVb3Jlcm1DWEtDWlFRQWNjNUlQTXdnS1lBZmFEcTEyR3h6ZnJVQnFPN0JLSVhDVU1YK0JBTnArZVAvNmlwMndyNXRWVFNXdWRISk5QS0NJR0JIQ0tnNjdnbFNIMXRxcnFzWnJvZlNkakx1NWlGUTFVcmxEZ2c5bE0wOXdBZ0kzUERiRHNKbWNQTXAzenJuYkxGbTRrYWc3WDhPQXZnZTNPdDMvem5oa2VQN2tDbzVPZE9PUFRXeEJYbDhmeWxYVnZqdjdPcEVnZ2JWWkFyWGlNM2RjNW1tV0kwZXlDR25MVlRYMmJMS3M4dU5CNy95Zm10T3A2WTBhTm5Nb1ZqakdITENTSDNTQzJJM1l2enRhVm1BUUNRQmZhTFgvNUpXb2h4aDZRLzNYUHdLODQ2cEJWeS9MbEpTMmdibVBERFdsU29aSzRZU2QvdmUzOWlkTzljM1c0V1V4NU91NHJQWjNSbEZYOVB5VnA0WXBFdVpKL1RpczZyRUNzUENQQTRKWW94Rk9nWDM3cHlaY3lOZDZQUTUrZEZ0WWgzWGdERlg4ZDhSRlV6a09ndldZNzNocFg5RUJIWFlYVWNCUXhPdzZjRUZIUGd2V3BTSzFOTjA4WkpSZm1udHNOdWw3ZlFQRVRhZnRwd0FTV00zdUcxUUFSdHE2U203TFNSV2FzMy9tODVER0VCUUhpSzV2eUppSXR5ZzgyZHpOcFZGbWVJSXJHYmhlTjNwTERweHpoU0svQ3dhRFBkZ1lYS0k2VW4wUExjdGVmSzVqMC8xN21Va05sRVo0RTlWMUlEYlpCYWw2VTl4YmIvM2pkRU45RnpqVFdIclFhZU9td2YrYXFMVHlRejFQVkdEOEVvS29TQUpWSjVKVDA1djFxdlF0aEtlSjVxSUhFZFNtazhpdVRJUW5UbGxzcFJKVWczbm0zalhOQXlIN0IxK0s0YWQwSGlOcDluY0xLNFZrV0NLMEx2dWlqSExmWW1NNDdER2xZbDIxdmJNS3AyMHdBcUt0WG1wdjNWeUJXNk1MNDZOTkdXNkU5QlhsR1pqbncwdnp3VnRXaHI4Vkw0bzZTUWZ2WlpWRjZyM0dIbnRVWGYrbjIvdExKMUFZZ3NtY1NhQ0xYWmlBZ1ZQM1M1OE1jd2g2WUJGbVhlK29LTW9uVUlUUzdLMS9zK1BYZkliZlBJSXpES2dVbXlmYThSMnZ0cnVobjUvOWJDOERrMThkZFUxeFJmc00wY1krc0kyUmhaRXlZb01PdHg1V1l4TVFUZCs2WXhGc05zSGRXSC9wbTlRLzBmVVdiQ3BLS0Z0QngvdVlNOGJUYWYrclpKdlZMTEdpM3k4UDVVb2xIWU9mcklXRDNGRUVqNno1YUVQc0lyM1VYYjNqL1dhVkFobFR0eklMQlNpZmd2M1JXcmk0K0VtNkNkcU9FWVpqc0diUDJOTTFWNmFNQnBmdHhNSnVQdnVVS09scXVJSU5nY2ZsZ2dteHRVV2Q2Tkp3K01hNVgzb0lKaEkvRDRReHRYdTRlYmdGeS9zYTdrU0ZoTlBHR2Y3VzVRQ1hoUndQaHlYNWpJRGQzMGRpQ3h5YnB4ZGpjTGFlcTAwdVdocERvMnF3RkszeTMvQVQwT3B1RzlHZ09XWC8xS090OEN3azN5MWcrRmZPaVFnaXNhVFRFbXlGT3FOVXBlcC82WTNOdE5vZ2c4ZGtJNmhpd2c3YVNDTnJXOWY0WnlSd0l4Ty9uMXdjeEV4TnB1SDgyWVl0M29iVURhbW9jZ0RWa2k1RDBGTWZMT3RWMFJjMVl3UVdMSnZidGt2VktrZ2J1R1NLaHYzQ1NhMjFKdkNFdjBjQkF1Q01tMFE2RUhlQjl2V0cvYk5lTFhTNUR4QmVqNzlaVVZibUxrUk9mK3g4T2d2b2w5TVFMeGtEcDFNUkJ3SjI3R0pickNiZk5wN3RqZlJRZWw5dFJwY2o0N2FMdmNKTVU1NUpnQVpEVXdleHc2Tk1VODRNNU4vd2RxZXYvVmFTRnRpME40MGxYbDM0b0oxNzlaZU4ySzQ5L3puZHNhRDA0TVdLNXRsZUJOMzZ3WWZMV3dmV3FSc2pGWXpwb0dDS096ZjlvcjRnWkFXM3o0TWhHd0RROXpPUXZrUHNqOWtmVkgxeDduckFWTUNSMGVMaGRYTUZnTzlOcWZIajNKcTNxb3hsaDhvbzJwWUFNWlVHUS9HcGtPZktBUjBENGp0a1pLd01WS0dGei9CSGZ1QWVQMFBhSXZzdE90VWJ2SEpoYkV3dzRYVTVYZXkrcHg2clNJdTltV2w1R1AzVHZ0R2xnMEg1d1AxMUxEODFlbHcxVnJYTGhwQzVLaTZYbWh1Z29BaFp3b0J4cHRzTXJKM2NXTjFMZ2RrTGp6UWw2WnpzYXplWkVBN2NGRDBPOU9mY3l1TzNjcUcyWmRoWEJ2enBSTGQwY0ZTME1uMHRRK0dtcnk2Zm0weFdicmhXbnNrd09FRmtZeHBUV3ptNWdyZ3VVZmhKOHJNSE40dnlrV0l3STQ2SzVQRDZybzVHNzlnTWhtakN6ZmQyT2pZMnE3TWFxbnJoYUVzRGl1NFFybGsvUnI1YXNYRDAza3p0QWZSdm9MaGN6ZWFSWWRHM2dsQ3JBZ1gzN1FjQnh0NVhxTzM3M0hwMFB6MDhnMjd0SXdnSFgzdmZyVk02aGJiQlA5bklybjJRcTVxL0lsT0w3VkpuQmE3Q2xuWmx2N2FmdlBkVzJuRmVVRmgzVHNGd3QwbUxvOUtvOWJiK2hPeDlvcnFKYVF4bk9tNitUMlQvM1k3OU1iZC9OTzk3dHhvUzdNWHN1ZDNWZ1c0NWdmSFdzUzlkRktOMmgzdFhKakJ1MWdOYUlvYTlEaThiQ3dDUjV6UGM0SlJIS0UyMUprUERZdHc5QWlpVjBHUkszVXRZc0lOc3JDZ2NaRHVyUnp6dlEzNURyaVRIR1ZxL0JXbFVyMVh6YWIvaG9vcVdnRm1pamxzUFFEaXZ1d1VzTU0zTWIrUU9rZ1NvVEtqRWk3RW8rY1ltdHF2WlBRQUYza1VqWTZldEhFTDNQR0JmVHVhY1dxaXNwdDBpd0dVdzNaVm5UVUUxY3hIZ29lczJOVkorWkM3dlkxSTkzWVlZaFpxRVNXMnk0ZlEyMXc1ekU4QzJNcGNJRzRuK0RXek9EQml0N0hqNVp1ZVR3dXZCbkhCbU5rY0lHSnluS3ZINEkxVThyVjAyVUJyL3hmODl0VFRWY1c4ZWVJMkRtQlE3T3FzWnZuK0NwTmtiRXRMclR6UWhUY0lYU3dhbEpMKytZeGl3Mjc2ZkFLRm85TVBTVmNTOXVvL2xobTVUZ2pVN2xhQllFVE5hZkJ5djZsZDczelNEakhkUFM3a2Jzd0p4OUxvSGNTMTVvQkRMZVFhYkIxYTQ0M2hWam85RUloT2Vsd09TUmdYcW93eFFPTTQ1YnRLTit3czdNUjdndmtOakVIdVRFMnhrVDJmblU2MDRjL0ozd3RSQ2QrbFJYU0p0dmp3VXdGeE1jR05mc0hRd1pRQmIvVy9heFdYeGF5cUwzMXVMa2RZU3p2cEhQY2dpc1dqYkZIdUF2Rkg2QUVrbnlJMFI5N3dadHhWWDBRWWlubXBLRFRhSlV3UUFnYXQ2OUFVUldsQ0hIaDNCWU0yekYvRU5heGJBWjA3cWJ4cmtDMjV0bHdYN2FpZUlpVGNjRDRWcjNpTkFpdkszTjJKUSt4VGpFdlRXM3JhejN3Zm9zR3I5eTZHanF3WFZJMlMwekVML2cvdjlpV2hGTWJ2Y1NaeHNKamcvWERXWWdKQnlDbXNpUGNqTi9lTW05NUpVNng4aVlqZlhRY2gvczV1OGpraHlNKzV0Y2YxWnRVekdOS2I5RHRsS3lwclBqb2xKaENwNmwwa3A3QXIvNElycERVS1VnRkpoYWdXeUpMVHJDKzFGMU8yVEpvdUk3WEtrVlc3dlpKSzdaSHNZOGM0Njk4S252d2hqM1N0OFhjeHpSSjhSeHhTUFB0SFVzQTdRaWRLKytUWExuRXdsMHdxVjROZjNaWmxSdElpdFZyYnI2cVpqTjBlSzY4VXQvaVJIUUFEU2FoOWJXZDc5MVczMmVudWhkTEU3VmRPMDV4cXA4RFB5UmhMc2VOMzVSRElnU2FrK2pIUnFoU2JDK3Jud0J4Yi9iTDRmS0x4WWlyaXBOL0ErKzljSnRQbGVWRm1jUkRjR3d0eUE0WklpbzcwdUJDWFYwZTU5OXBKb2xBSEI2Q0VpR01QSWpqdGpGandEem5rTWN4UGhRU2FnZGQweXkza2hKTEo5SnV0TUpKNURBYURTcXJxZWY5bDVvVkhMNVl4N3FiMDRjMXhPVmhrYlJRVzdOZkppeGEyc2ErWWN5OGVETXFLNzZ2eVNBZ0wwZUZHcTZkajBndk1GVHEzMTNROGJuMzUyMXlCSlRCZkhvd0dNNUNURWdGeitLWi9BNFJCN0hwV1k1TnFkNk9IbTNOTDExZjNQeDhPQnBNMldkbW5IRzBJdFJRTFFvN09acWJpdlNybXVKditYQmdiZlIwaWRqaU8xMFJUWXlNV29GK0RUbzRUb2hNWHl3NEVOK2tPc2duVzIyL2hkNi9Dem14c2Q1QTdENGR3VjBmdE5tTkh1MEJSWC9IVitjcnVBd1BZUmo0c25iSW9YK2VOeElVYXlrcE5kbDJ1dWVkSGsyVzlHdGM4TmN4WkxWdU5pTDZLNm0yQXdkWEFpL0IxQVdiWGFCUDVzcXhOSklNMU5pbEpyOFJ3SFFCRFpFVEVBcnhHVWlVa2RrZmo0WjJVNCs0ODJoQ1NzYkRWV3gyY1pad21EZlQrTThlZGJjdEpzTWxjekkxbU5jbGdZaUxDSDdYekQrayt0L2FMeUx1Z1lWaU9DWWxLUiszS0h0VUx0RjhRdVFOQ1hyYjBkTG1jWllkVyswN1BtUGVveDRna002R1dFS1JKZFlON0lkY2d4aEFwVHJCNjVhN2JUSDlzMVh4d2M3aHhpRE1IMmdaOUl1em4weWl2eWk2OVRJR1J6QlRDZDFEd2JkdjJURlM5MFJlMGVDTGFyUG1aVWwvb0hUWkxIeUw5eEZYNkx6dmh2T1V5bDZtMlFDUXFCUEFBMzB2OW9iTExTbXpwMnMrTU1FdllZdTdwZHozVndTSDdrQktQazZLL0N5K2pvM2dKUlhlMUJQeW5qU3MrZkpoYzJPL29sck5oL2JDQUNnVUFsV2xZbmNTRTJQdHJoOGIxVGV3eHhHOHdraXViQ0VYRk9NV3RJeXFzcFhaa3VpL3ZqSUR5eWx3R21wckV2dkdwM3paWit3RlNJWEpXRGpXUHlZNHBOWEdWaTdtN0xSQ1o4MWswdFRMY0ppQmVCakZvMzk5ZnFFaTRRKzg1enh5S203YXZ4VEJsVDMwUVU2Q2F1MFBvbEFXWnFVTEpCaWk3b3BDbXpVMm1yT3ZIRHFuOHJGNzFnc2NsVXkxWnduY1NvS1FsdmJZcGpzcEt4b0kyMDJHYkUzL3JlQ09HK0NvazlucFpBR2Q4cEMwL2p6U29hekU4OHJNZHRKM1BWdnUzK2FnRmx5VVdHV083V1VxSUUvWUUzNTBNQ011Q1RMNmZpU2U2Vkw1TS81V09Qckp0MEpDcGFSeW11WGo3RTVuWGZ4NUFoTWdienZWK3U5dDhhZlNNWVE3S3NSWFZKNEt1eThIYkZkamVBcWkxTnVhZm9SYmhTR21HNjlkbnFQdzhCcktVRUR4N1lTaWl4RTlpVERyc25UeHpkbXc4UEhHNGdDMXNPRnhuenZyZE8xSS9UdEN4NXhyOEd4dm5zTjI2YnhzNHdWZmxmalROYU1RYUNOT2R1THZPbWE5bnpzMEVla2lhZ25rd1FnWG9GZDZESzVzMHZnZllqYjh2RkpHRmpsUUpNSDQ3bk41eXZqWkVFUkJRcmF3bTFXMFlxamRsckR6ZE5yVm9kend3NW1ZcVRGV1FuODdZOEhvMzNwV3c4ZDFycWp5WVY0aUd5SC9peS8yVERaaXV0ekc5NDg2aDVDOVlkUTlBYmJFa2ZISW5qbTZLQ0VUdmJLRnVzL0VhY3RFT2FoczlBbmlkNjRaTFRqNmFXejVIRTFNdXFZSCs4SzloczhOYlBvNWNtWkNGOFU0d2MrVzU3Z3ArME0zZDJlbG5WUWtNYTZuN1VaM0pBMTlKeUtvL3JEL2cyK1NpZnVQSmROV0N2QXRSdHdGRjkvNzJJWkNQN0RhWFBJaG9FMXFCOUJ1NW9aOUhYdzR2U0hMNFBtVEN0NHdzZS9rTElFOFByRXdSNkxCNUVkNzdiR1NoWU9uREtjRkdBcmk3QUtYSXdpMCttdy94QXFpckdDeTJ3ZmxJMWN4V1I2cUtpdzRFcGxaSEorSFIvYTRSUW1jQmdLL1JWcC9VMEFYOFpaa2JiSGNjbk0yRkw5bWIzZ2xQbVFlOFJ4SEh4bWFYM2t1NkxDZzZyL0JGR1dxWkZpZjRIOWREZmJjcUdaVFJXUjl0SGNnQ1IzNUQzai8yWTVkcm1BWnFMR3F4Q2w3Wk8wbTZ4UWdjZHB2OEN2UEs3SW9sYXNVKzc5ZGVHUllPMEhEY211bU56S1UvQzl3Sy9LMlJJNllsY0RtdGY5YzVLTEh2YWZTNkowK2xvR0tCMFJtcnpsN1RqWXg5bnhKNmk4UUtwNE5WaXJkZnFFZnBYckdsWnF1M0RDYTY2a0RrckhZaGY0N0VIbmZnbXgwQ25GczdWUFROUUZYVVo4SUtkZnJtQzdPM25DK1l2bk1PMFFaTE9nTk9UTTNORHRoN2xsVVkrQU5Xd1BOZE84eW5zazQ2eDBxdUl0azNWcHFuT2ZiY0IvT3ZsVnNjZnc0bnZOS2EzRUlKWEloejZTYkJjSEFQMnRVR1ExSDZHUU9wdzhoSGFscVgwYUg0Y2tvRGpDZndrS0x1MDNuSTlMYU5YZ2N0VGRoT2N4WnlwQUN1U1FuekxlY1k0ZlltaXRzclZmaEwwdUY0THIrTXJYTDZocStxMjBUQmQwMUpsU05nN2RGb2lPdi85L0F0ekk0a1JuSnIxNmk4enk0Z1g3U0pwQWsxMzJkclhITE1lckZuSDBlYkpBNm80THRVbTk4ZU00TFBXS1ZmcC9maHJNS2NYRmNPQUZtV3lZL3VFcmZZcUlPYks1Zm10Z1R5NzJtNTVsZ1BSZUQ0WkRFamZUNGUwVHBRS2FYOHJVWkFtM2h0R3RJbGtlTG8xVWx6YnpjVGpyRkRuSWFrbHNIU0c4RldvUW9vSUhsV0o5cGFoZGozZHJpb1Y0UUpxUUlMdDFSQUcyZStveWdkeUp1d2dNWU1sRnhITGIwTjN2ZTFCbFVyUXBwRE5zdnBkUXgzU29McHo0UW8wZVRzeldsNjlkSjFhTEg3bG1XcnY4TElxZk5vc3NrVnQwdlUxRzNQaHg1cHlWUWRqek02VU53a3hjeG5CcXE0YWtaRmVYaVluWjFUL3FLMzAyYVFGeTRvVDJoSktaQ0xWUDRVZEkvQmVsVmNKQWwybSs1bVd5QzVPVFMyYTFjVTVvMGVxNFJyQ3JLREJjRW1rODJuQ2RhT2JPejcwMTRENi9sbGhwMytXUU1VR0pZUTBzZzhRcjI4RGFtNU9rR2lMZ0xVM3NKdVZITjZuczJmbEpIRHF1NytYcUlnMnF4UWhtRUk1a3ZlUHhqUkVRVHUrWEllK0pYdjNvVHZkd2I2R0lIYTJ0YTM3RDBzalhoUVUrV3NDLysyTDVLaGZ5NVJUNmhjVkNBaWdGa0JZa21XeWdrM0FGOXJQeWRvSFFyVWRzTmhRei9pbUE5SStTQ2RZTGxxN1g1bGp5SmhpNkpQQ2hNaHk4UWNHSnkrWUJrc3gzd0RvZGgydG9JenVjYzRwTVFMajVwSlNYaHJDZTBqQjB5WlNkL21HSEw4UXlTcm5aZ2ZJb0FQZmZCTkxXYmo4dGNHc1hDMDRGV0FJYlpVbmdaQUtwMjNERllEb3FrMjd5dXBsRzEyeWM4Tkg4T1hMQmhINWNRVWF3anpqN2cxRk9lUmNkRlY5VVh0b25yS3F2UmtiNEdveE40S0FTRHlDaUFMMzM4S3dUM2dkaUw1SDF6MEZZazZvaFlZUlU0b2R4ajJKaGxjMGF3UEh6eVpEcXdiS1lzUUR1Q3pUUHpXSURhTzdtNFZGeEYveDY2aVlLbmM4YU1xWlVkY25mTnhCTVBSZ0RDZ1NTcVlMNXlEdDVWejNTd3VDMXRONkJkNlhlWmo1a20zNm9XYVgvSEM3YWF4bGlnWU00YUZRdnVvMmZXYlNldjlydFlJb0RVMkFHU29lbHAyNzRvbkpCeXVBOUZpZnNDMlp1RytnNU9FaU1pVXEzL3ZOeHMySmlmcjJTaG9kVTllOGltcDRqYnplNEE0Qmg4SytaSWRaSC9Hb0ZUa0J0cTBXTHc4RkhhRFVaSXZXQ21HSGplVUZJaS9PWktibkR0M09OcFhVaGJmRmFuUHV3c2V6TjRUTTU4blZhQlFDRTd2Qm5ibTNHVldnUC9JdURhbU5BcmhCcEt4Z0cxZWNFM3c0cjFtajhQb05FK0M0d1NnWGZsQWwvUTQ4dWUzUXJ6OXYrRWEzbmZMSC9RUlczZ2ZoTVBqSkRQcTB2SmIvbXBWUkZyenpGaFBBaHhTcTJzOHkwV2NIenFGS1hQYnNFdE1taEl2ZENOVjFiWmh4NmVpWlI2bFBoV0lsWjhGVGcxdE9uOEROQkJwRHU3SWllNGN1ZWtJcWVQOE03dDZhVkp0STR3Nm5LSnF0RlMwSWlkMTIrelNLZ2Z1WW5UbTl3RlovbDNwckNtVklHZThmaEhsb25iWmNPU3FZQjN5M3kzejh2V0xad0tYa1dKMEJyUnM4YTBQNis3M2Nnb1JQN3hJM2tzWWsxYStoRWV3SGprZllKdlZ5ZEFkOW5NMlRWMXk0Z3F3S1czUmJzTGhSaTNTUTkrU0VGVkYxa0JZZE9kL0ZHTm5KVENEWFdENWJiMG9sVW5ob1M5K3BEODRNa2RpUjJOU3hjRWNDQmI1VUI1U0xwRDlQbC9UVENlME80OWNnVUdvSEtIY1hIR0Q4MVJnaWxaWmorZC9RcnF4UjN1cnM0MUhkTDhPTGg2SkRPVDk5UDhrTjBmeENsWjdOcUVZbkJnaDVDTWxqVVh3TWlRd21aTnJSdEpmbXloZUZrWFhla08rUmRLWlkrRHBwNUdwbW5kT1l3UklxTlFXOWU1elVjelB0ajZwTSthZnVRa0NIT1BQa0RGWVFqTloxV2FTZzFEWEdmeUxsLzBtdmtvTzVFNEJkQlJ2U2p1K3N1RWpNODJSMXhjRkRtZDF6M1R3WEhhbnRac3BpSndjUUZHYUlzbVFxOC9EWXk5d1N5KzBRcVB3SkRkcXM3TGtBNW9reExyMDUvTldLeCtXaGZwVEdhVVA2d25QS2wwdzBCbThKNTRuSUUxZGUvQTNaYUF2dzQ2clcxS084TklLZmJ2dXBRNlNGY3pmNy9IUTlWYithZm9QbWZlNUdPUlBFcDg2K2ZYR0RoQ2hOMlIxTFBsOHQ5RFJzQWpmMEd1eVRQNHZQbE1zL0FQS3Z3UVhxM3Z2dXRMVGFZUnlxdldZVkxNZm5iSW04dC95cjIyWFBsRUJsZENWc1YrL2RxSDFTN3NldjNIZGNxUnFpWTlhRUNmSWpQWXVTa01FNE9ha2VZZkR6TzdqR05RalhrbERWa1lsODlhc2J1bXdQNGlYU0tqSjFCYmVOWDJGdjMyOER1VERlYmF4OUF2NEZ6d2l4M253ek1IbVpuVUJMVmtmZDRGeVVCaUs5T1AyYlZXNldEblNCeXl3NEtSZWxTR0JyQ3V0VHJtNzlEbno5OGQyb1hQamVlVkp4ZEhqdUZZTGVFSGQwR1E5Q1NKOFk0UlJzRmt3TE0za2R5Wng0QzJGU3ZFWXJGandiR1Zjdzg0cDNiUEYrdmhzbVQybmtIczc0RU1zY0NuY3Q1VU0raFVXMHJUWnFaUkduQURwdHNNaVQ3cG9SblNodjdXYWpyMFpFMllKS21aejFmVXdzYWhxNUxodUZ4WnVqTnpRVVBJdmlnd09jcURGQmkrWTNuZDVmdlk0RDdBOXlSUFlFVXQ2ZjZ4S0t5dWp4ZDRwSUd3anp0ZERxSE9RaElJNzNZWjZEbk9XSmZWVmMvWmo3eWRCVFNPMDVJV3ZxRE5WZlRoZWRoWFZHUEd4ampVb1Rzc1BSeXVLeEYyblB6T0o3dlZoSVR0c0VzcXEyM3RjZ0ROaFBYeVFjL0FkNGExK3JlYzRpU0Z0cVAvVm42RlFWMUY1a0RHcmNqN0gxRkZtL3I3QW41QmNGdVJ4L2h6L21FaUt0UHRuWTVQbWFKeWpCbVRBYkZOVU50YnpJc05td1UwUVBvMnpRNGhKRkJSaXR4UU9EOTBhMjRERU42eUpMbzMyL1NoMTBYUjUycXVsbVpXVlp2YzgrYSt1bUNBZDQ2ZnhiRyt4RC9Scy8vTzBNSENEQU4va29JSllabHlTOXh5WSs2VlhESGlxSXUwdWtPWjEwRzhrVWZUWVFpdGozVGtrbms5TWZETzNCTU9lWWtYdFlmRzdaV0FWUXM2UGgrZWtqanREUFM5NmMvZ2Zza2xlYUpLeHgvVnBuRFhkS1NPL2o3QUszZ3l5WnA3YzhvTjIwT2h2a1NFWnVIbVBXZHZWaUZ3M1hyZ0VhSWdQb0pMSEE3UEdLYmFydUl5dkdXNFYzeVplOVZzYmZFaU5veGpEc0FVNmZCOWhiMDlUdDJwN25sM0x4Wm9SY2pKR3pPeGtQeWtjcGVhajRmSU55NVp1UVpIeDgvVDZFQTl1Z0hoL1p2VVJzR2dXLzBtLzRLYlNzSmcyRUN6UXErYkFtOWZqalozNWhRUkRXWWNkbmR6TEg1RXJWeWhiZHlNclU1WWJKUHc0MmR3MTZ6VlpDOVMyemhYSHhzR2ZnRHJiUkJGSTZBRzZNS2ZURVJjQTlPVmk0NjRyQ1ZNOThPd0M0NG5SMlk0NzhiZy9BMUh5TFNCUlowc0VYbXpYaTF0VmhVVUl4Z09QVWFGQUxTUlhvMmcrRnY0SFJsYXAxYk01a3BucHBNUlJrUmQ4eUI4UDFMak9JUEJ5N3l0NTRqRE1jMUp3Mmo4bmlmZEkwRGRVckdHNTUvTEVmRFhvcFlITXBWUUIwenhmYXZjc0RnWVhtZ3pHTUM4aW1DRnBZSUFXMHJMaldydDR5b0pMcmVkS0diY3poYVFjWjZvTDdUN2gzM0lER3EySXg1S1NURExBNGJtQm9FSFVaa0VDa05UZ2d2N3RWUGE2SWlMREVEL3ZUOWhyOFhwbHJNSWtXMUxhQ1dadmttR3Q5UkR6MEJsTEc3WFY0c1ZXQTZZSlBLK0xVQ3ozUHZKUDl6dE9DV2g3czVBYUNSTWY4cTRJeTZvbjJ5NUJ1RGI4QXIrcXVuUGRxdjNJVFBGeEV2aXRMcmZpeHhDaitERWNlVW1ZcEZLMWxOdE9wQmpXZEk5dURtSHNhWlNYZ2dCZ3ZEaEJSMW9qWnlRM0xLei9naDUvOHJGcUs4ckgvZ1hiaVdka1dmUUVtT2I4RDM5b1ZHWW9JbUNjU0NRUGI2N0x1akpJN1MzS2l3M2tPejJDbzJNU1ZaUXdoZlFMeDZWSE1RdkV5OExvdFJKbVp4N21mZ1RWeEVGSEZnMHBBQWRMbFhkSlNSZklEcUhQN2kyUEFhcWx3Z0xtVFdwTlJTTUVuSnNSVnl0TnNHZWxudFBONUNxbXhqamsrbExQTVMrcUZmcjVZK2lrcDljMTZJcnRtREcxZ20zN3FXTVNmeFMwbkZ6ZUluSmRsSGo1SytCNGM4NjFQRm1KbzNNODdnQXRQRWR4QXVrcElZdllVMHpGUTNXOHQvaGtHaklJL3NvbVA0aE1pbE9tQTIrdkRuY1Z1TDdDc1VzN0s5WG05QkcxeWlnejM2QzNuZHhPWXhlaUxxWkROZmpzZ21XSDYvRmtNWnJabVRycW5wcGdxQmNmdXpVamJzU3NXcDlaaXVMMlJOK3krWGtyd1BLUnhZNWNzRWJ0QSsxWmFEZTJrdW5haC9Dd3NsLzE3TmhSMnQ5eE4xMUJlUnR2bzd5MmRTWFhxa2hwbUw0Qm0yU1NFN3hKcDJQcC9RaHFEaFJiUGNEZCt4bXlYQVBaUFd3MmNjeWE3WjZLSWVMdEtNM21aRTdlR1Y3bTUzdkZLakJWdU94bVBSYmNMcGsvaHVHOTVIcFhWNDFUd1lmbUhNcmFhallod2Mra25JMXFWbVpVZ3YvanJXU2VoelVwMEJ2d3lyVmxSSDA3WmJueVp2N0NXcHVxTVo1b2x5M3R3aTlzWmx6TUEyMkFLeGVPeFRkNlR6Nm81MkhVZlFXaGl2SVJBQ3o1cTlLQk45S0JRWmprbnBGYzNXNzFKd3pKa0pmWm9oQlJ0UFlwWHJrWUFub1ZPVldodnBQaGhPQzlzZXB1NHNRNGhzMEtidHcyRVVTN2R2Vmt6K2l3UFFOR2dsay91RGlaQzVxS3p6SFZuSStNTE01NWFaNWxDL0FXWWh0SC9NdVhNZ01mSUlTdjlIaDFkTENSU1EyNHpZM2tXS09XNW41UUQzd051WGEybjh2aUF0Z0s4bUQzK3VKUDkwaWRRSE5La0tGVjVNR3I5UnNtcUl0NmxvMmp3eU82RS9uT0dNY2dTb2JPMWJZMVo1TFlaQm9VVnNoSlAyWDljazJ1Rlp4LzR0aFk2TEh6U0luSXlUMWxCUnRHUlNVa25FazNkSVN3RGxlM25WdzhzdWU4b0ZOSG9mQnUyWEtzVXlIMnJDc3crNlJScTh0WTh6RVV2cVNyNGIySnhMcGJEK0ZjZ0dJQXovRVRBT2d3VmUrZmRwd2RiUk04TWJBT0dKREhpd2FETXQ0QXY3Z2pFMEJYeExtM2VHaUlzVTNuQjNOaHgzUUl0U2ZXeE5HM09zdU9nRmdqQnFyQk9LL09FQ216RnNxZkN2RGRaaXVEeEQ2Wkkyd3hvMDVvOG1xdlFlY2lkZTZBYTNtSisrWnlmd05qZlhwMHVpa2dQY1h3UWpHbVY4TC9LNEFYQVlycDRMSWFaUnJ6YTFOaFNQTmgyV09zM3hWeXFMb2lBNEJ2R1VUR3N0aTU5cFUxSEdHQW03Nms2RkpTMjMrSjdBUU9WMXFFQ3hPckl1QVBFNUNGRjhIWTQ3b1BYL0tDd3I4Wk5XbHNxOHYxOGc0Y2tYbnUwb1ZXNTk3WVh1cG5yMWd5Y1k3RVBWUktUWm1BZTA0b1RJai9jbzZNY0p2Y0tMUFh0ZE9vWTNNWVVkUEFvS3prc2ovVEp0Rjl2ZzB0ditwRkdSNUhpSlB5aHc4Z3N5aUM2VlJVQy91eVVvcDB5YlRqMzdLa0szZjhlWUtMV3FsVjUrVGJEV3I2bTBLWEx5cXhDMmR6ZDZyT1ROWDZYbXRIczUybFgvWUppMk40YklNSEFaTkFIQWkvT3RITC8rMnRBVTNuY0U1Snp6VC9RZ0cvejQ3NGZiUWxJbE1WcnVFeCtDSTNOaWc0dXhwUzVQa0ExZk1mSTZia1ZQWStQMTM1RFpmMnREeVF5eXArRzZycTJxUnZqT08xN2JTSTM4aDJ4TnhWNmdIS1BCSHdJZDBBRVpqbis3cVdFK2hFL2gyclNMM2JSRTk1bDRIblQ4bmhPMTNKNmw5U04zWmhKeGZzeXptSnZSMlR1bHRRMjhROEpkYWZ5RTFGWno1dENXYzMwVUtvRDB3cFdPRyt2THZIRFdLd2p4cHZWNUtwNG5qZkx5cjZYMkM2TWxLdEYweXNyWTRBSnM1d3h2UjBiS0Q3dEFGWXd6dkpyeDJkU0tyMG9OUmU3UUhrcjJhSzNEZDh2M1N5VHFSbExmWEo4UUJ5S2J1ekxoYXJhNkt2cUsrQlFwejVkcS9pQlg5aXlHekNLRjd6ellhc3draGRZTjljMjRCZHdEcCt1WGc1WUtNSlZYa1VZbERLVDE1a2YwOUdVdnBPS2VwR1B2R2VqYTdkVFpkUzNsaHhLN0ZaUDRGS2VUc05wZ2wrTC9Rb2o3eHhJM3ZRcExlZURjSVVPdzFHNUtsdFVOODczMmtha3FWb1VlVXJhdFhPeDlGWTJHaHVBYlpKM0ZOZHdYUUpQOG9EZ1J1NHJ4RDhURFJJWEtaYWQ3MGJNR2l6Q1ozekxIUWNRWUs0Y3RrcjBEMzF3QnNKK3FML0ZqMGxGdXA2NHc5V09BdjdJaEt5bFQxejdJbEtGZFVhZXdrVlFsM3o4a2ZkWERTNGJ0TlJSdXREQWZSQktrTmtzL1JWZmhyTVBYd1lNSncwcjN3TWpJUUpHYXVqdkJqd0xONXd2dkl5b0lKSWovTjM3Wi9kLzdRWkxQVVBZOHZqTzZqbkJ0SFJyV3lEUWJOVnUxclFpVjVSbGpnOGVWc1ZqYTBFdkFiOHdIVFliUlN6ODY0UTlUVktySGlJMjhMZUt5MFJybkdZdHFIdFNPN1VKUDdZbU5aU1k1Zi9JU3loWmJ2ZWZ1SXg2dGdweWxVWTlVWW8yMHJQU2lOejI3MnJoYlptRXc4ZENkRUFBcmc1RnFvOFJBSCtmRnJDa09la2x6eEw4bnFmVDh5THNjQXNUMjlXc1FLTkx2Z0VLSTl6STN3NTJmcjZRcGk1ZHNZemZ4eHo0RmVYY1UyeUxpMk9tV3RZcFVTbEJpMUZvQ2piTGNOU0dmbWFOSGY4NE9ZZHZUdnZtWnlHK0w0eHBtcDBHOGc4VnF2aTJXcWg1MlY3OUJ4Ykc0TkcwRk5CUWN2dkZmejEvWlIxeTlpZWZ0WDZIRTdkaXFqcHVDN0ZuVWtNc3NGdzA3N04waHlIb0hJZjdIRnl4NHVjUkd0cm0wVXYwZkJMQjU4N2FBd1hTTjFRaXBUTkp3TkpmejBxTmVLK2E0MGdKTnRuTm1aNThsNURkSjdpcDdSK2VQb0REVzdpV0duSjg1ajhZaVFORTR6Umx6cUNSSW1xUXVxc20zYTUwMFlLZmdPTStjSVRqSllWaExYNTNRQ2pIenVDZTZWOTZkaEFXMk1TVGZJRE9hdzMxMUZOZU9tN1ZFSHlaUW9OOGtjWHQ4QllUaHNNUUY3ZUdhL2Jpc1REYThWbno4MUNaMXFacWUyUklNVUJOVGpyUkQ5dVpMb3dNWEF3N0c2Y1Z6OXR1OEM1bk5Od0dvRHhKcXM3N2IzQjlGVmVUZGpXRzhlME0rMlpVQWVyeE1icWtoNTh6QjRmZW4rRUUyNEk0bEZmTnlQVitKOS9HdHNvOVEzU0FjNzMwYXUxUS85RW1UekFWY0ppNWRRZzlUM0E0bEo0d1dPVW9kendBVVBPWDJ0WGtwL2hITnAxaHRHdTZOMURBNzZQcTkrNEc3c2prQWJGMCtHd0tVck9WOEVEelp0Y2ErZFZuTDZpdmJ6RElkeWxRTnZpMVQ4azFKMW1vQXhVa0RGQkVtU3hUSmp1QzZXS0J6VjZ0Ui9GdEE1RzV5NHpGR3ZUSzhPRWpwVlFJem16SHdXZHJ3SitEMXZmMHpmbEdhSXh5Wjkra3BhdDN5M1NxR0ZGUU5BMWVXVGhjSkNkSFlNWEpNaDhOclV5eWRlZy9oQS9tamJHL0tKUGx0RzhhSVZ2R1hXRFlxVFhQMHBOcHhncEh2ZGRQdXZqbm1ZdXZGL2dUa01jSWlCQTlJblRpWHJpdFYwWWllTHREZ0ZrU0svcGxyWkVxVVpjSXlvcFdlUGtMY2M5cHdwS2k3UEN5VzA3enJkcWJtV1ozK01rZFJrNEhjVG9iMjZUSFhtN3FveHBIaDB4dTV5Q3hlV0NIWUw1M2hRbW9PRk12bEFqaFdpTm1ocVYzWmVTUDlOdnhFZUdNdi9NSzRzcWdzVUFuV0w0NmF0ZjJVMWJZYWVnbFA0N2VsR0NsTXIvTUNpMGxiVlNqNk9SVjBuc1lhRTVSN0JTd1k2bUV4Yi94WmxFU1BQc2VHb1k3WnJGZHlvakFJWU0wM1kxSUFRVlNaaWpzTGF5REx6YnYxczFDbnBRcXh3RUZ1OG50dGVrYU5OU1VKbExTRW1qUmh3ZDdWd0RGNkhpWWV1VmlwaTIvZEY1M21GQUVsc0dpN1dnQTJZSXBSWnpMQ0g5UkRtRHYrbFFDN1lnTkpvR3J2dXBXSnE4R0hGSmdHNXBCV3lBMk9rSTcwem9zWlozWnU1R0dwR252OEt5ci9WVGxlclFVbHlXV01DOHFObVA2NzA1Y1kwVTMxRlgxRVlFRUdZQ29LbmgyWjRIdTRXVkFWMFNRMjdySlAvR2dRUVB5L1VlSUdLOXpvd0xhZ29vcVZNZ3I5TldwVXY3OEdhdjZEVHJ5M0VFTUNBUDZvcEkxdzYwRjkrVlhPaWN3ZEhBYkl0WUY1MlFDcGZZZ1NFV2s2TnBLVHpSSThOSVU5MUNzU2t4SjI2TWhnYmZlYlB6azN6Yk9FeThjYkl2MEkycTR4Z0pGWWYzUEY5VVBpaGRlbS9lT1pMN1ZFdVFZV05DaUJRUEMyL2dCK3QrVDEwb0ZqZm1EbWNnR3p3c25jUnRITW1MS1RhN09ic2dzWG0xY2ZBeFdLdVJBSXQ2MkpwNGg4Ym13STdwaS9EaDdQenIzMHJoS0FTdmpyS2N6R0dEZkwvbUg1a2VxbnlSK1FGdmNCUll0RXNRQnh6cXVDUWJmTnQ2anIwaDlPZUF3cFlscUtHamlVdkJGRVp1eFhFR1NSUngyUUJaUG91NEM4bnp2R0xYVnRHZ3p2K1UzaitGQnFjWDZIZGJCcmN4ZEt5bFNFWVRPSFVCVVUwOHJqTVlpek42WnFDVnhEY0tBV0ZqaUlzaGxSUWtybDRDWlpHcXkrbkFacUo3dlYyQ3YzTVdQY1FmZWhpeDZmd2piOXdCR1BDNmt6SHFWVU9CVGZrMWQwbWIrbE1MYmdsYkRlaGtOdnVCdEgyS21RVG5hcjVLR29veXRDNFFKTzQ4Z3JpcDJKNFJDZlh4UEg4MlprVm0zNnR0MEVnSy94SW10Ni8yOUYrYnJXSjlMYTg4RE5yNTJTalQ0WkJIWnRiLzJVcDBiR0p1U0Z1aXduS0JsMXY1TzJJcGJMZUFWWkZKV0ZXL0QxckZoUGNuaG5yaStpdnZsa3dpYndYMmN2WlZRR0VNc0o5aXR5d2owQUY5MmdBZGowT2ozeEVyclh1aC95cjc5aVR5N2l0dkJjWEZzdTUyRk0ydktKNzg3TlZSRlArNWxXNFFsWE81a1NFQ2Z3NnFKTTUvNzBHdUZFNnlWTmlWTVUwU2pHdEhlOUxwU3JwUi9FcDNhV1BTUTBEYVNWM2ZwL2lJS2UxRUhqclFKdzFSS3BGb2E4OE81bzVkem1BTkhQTy9YRy90SG94V1U5ZmJ5T293ZUlNRm5qWlBYc1ZtaER5NTRXbE90eFlWSU1udjR3bURVUk14NDhob3Azby9Vd2lweFIxNGtvdW5IMEhoMDJlYUFkTE5zc1BGUEZtaU5qR21aZWk3ekUyTHhpN21xZlFBMzRrVUxqckVzM0JLQ0lNNk1TMncwbWVqL0ltQ3plc2ZwcklmTU9aUkpYelU0MGgzRjA0NjJ6YmVwYk5xc2ZjMTg0cWFSSG9FYm9kRXhwK3BGaGNTWFJYSWtzQmpxTm12MUhiSllheWdBaW9lOG84d0ovRm1QUlpYcmFZSVlQejNReXY0dktzM0YzSERKSXljazFEVmhLNFRMS3cvUnZDR0Y3aTFUb1VHdnBDVXRuQktkT1VOZmlHa2hDMTNQYngyYmRabE80NGcvRlhCZzJwMW1URWR1TkEweFZWNk9jLzJKTjhzT2hwaVJVbXJGTDRjTUxPbGFCZS9Qem9xWXJtQ2lzeUgzUTBoN3Q4bzhhQmpaOVp4S1BPSHJKVzU4UmxwZHVBOFFTOGxJWUg0SnNMUDlQaFNGVXJVQys3NGRBVW5XYklvaUN1NnFHV1FGZDVhUllvaWRvWTJ6akVOSFMwdEU3WVJUaWdKSnVXQXZMZ0RtUW1jYndKd09wRlFTTTVGcGYrYUllV0dEUklUNDQ3QWZUS1BhTktuQ0tQeXBJY2xleDJLWlF0eDdFSFNVV3ErTzhxamtPM2RhN0hDTC9LSFNXVVY2ajhVY25zbFE0UG0vWlNTTXU2ZDFoTnFCVngra1BYZHJBYXlmOFN4ZEM0Q0t0Z2I0Ny8wTGZNejFnTkFDcWd4Y1ZpWHg0NHVlSWJWUzR4czNnL056QWFNaEgveDdHU3Z0Z1B1WnBYY3AwWXFsMytLeTgzY1ByMWxBU3J0YTVJaU1NRjl2NWVmMHAwQ1k3eHhFbE44UEtXOTZXOFdTUy9BRjI3RUNlMEhnT3crOWFSRTNxR244NzZWTFg4Uy9odld1eFhxU083MzFEM25sT2N1eXRISWFlV2s0NlFCT0pDNkc4eVhvN2VnZ3BFTGZNWW5VcFd4ZTVUN0tJY2R6QXBKeVRpdUc3NnJsU3BndHlFRXo2TmgxbytSbExDamlSTTJha3M0bTRGVFNYMVpaVnptTFJZTDFjT0tocjFHb01vMmFCd2dCcWhCSHJSRHVnaVl2N3R4dks1V29wKzlqdHRkRk4xd3BnNWRZK1dNWjZIUnhuRXJib1BwQ1VDQXk5QXhnZ1ZGK2dQSGV1cWhKaVE3WlZHeUx0UUVtZ0JUTktyclF5c05pYmQ1WmNwaDFRQWVmZmpxU1g4enV0WVlheG05MTZZMFV2bFFjNkxobGErTXlnWVNwNVZaOXVFUWpoTGd3SkxGQW53d0E2enJ3bXFpcnNoQWQ0dVNVK255MGlHeE9QMW5sUDJyVk5zd3dFdW1mb1Yva2gxRHQyblJxbGFOMnlDWm96aldvQ3lCS3ROdmU0NGZrYXhlcEJOQ3EyclRBRVVGWmZvUjlmdUcvK05zWlpSMng1MzNhQmdSZUJKRHo4L09sZ3FYcm9lUVZCbjlrUmZDTEhpR0VkZm50cHpkMEpHVHN6OU80eXh2VUw1ekRqTE55VGNPSnNBeWRHYjdibDd2MmVKZWlWRkdybEVvVjc5N2JrV3pTbDZyTTEzOWdUMm05YWdPa013N2oxbVZTQ1BjSmFhcVFROUVHQ2sxSy9WckRWZ3VkZHMwOE1XcnlicHRwM28rRTNtWWxjZ2w1YWIrVkJhd2Foem9IZk43U3ZpVi9mVUtXT1Q3dXBxcS9VME5JeGcrY3FLaTgxRUNicW9oMmIvNFNPcy85SDBtWmhCU0wyREI1bTJmWVRFcFJRZVk2N3puTmJKV2VsdkJYUWNrVS91dnVGZkcwaGwzamIrUGhzR3BTYUI0MTJ3NnlmbTUrS1VhQi92T1NMdTV2VXpsR1J0WGdMZzM0ODFWMlYyWi9Mam9vcVVLYVRGbE5QbXcvQUUwQklGaVVtbGdHRUtBay9ZZGdxQ3JXV2JIYW1YWGNyL09wdlFHVDNYMGt3UVVzSlZRMUdCUFdrd2sybTNOVVJ5ellQc3YwZ2g5bnZTYjBBMS9CWWJ4ZEFJT3NhMnhBaFJDQTFNK2gxWTRjZ1hDODd3Sm5qZmt6S2MxbllCTmhwSGdkV1AyOTlrUDljQjgwcW4rRkwxRElYaEl1VHlLV1FQa2kzRTNJZUl4RDlaOVZkOEdhUEFmZGhVWW14QmRJYS8wTTl4K1phTU90TlgzcUpNSjJBeDN5WU9vaWV1c0pBcmJaQ2l2djFxenRpUzNINGpUZ2xqd1ZFekxhT0FrK3Jrc1BmaDdSYjU0V1pLb0tjNXQvVDVDRjJ0TmE5WTJ3YWJFc3IrSE84UUhaOENOWGNvbHFhYTNPZ0RLN0VQWWNqN0ZJbWd6YWVHYUlmYlFuNStiQjFyTlN3WlRLTVVpR1MxZUlJSmlTcm44YXFDTjI2b2VIQlNDT0c2TWlvNGZROFlIaTV6S0RJdGovTG9TM2Q2bFVJdmZhWmZBcTY1RHQySktLNlpBMFpCMXpUTUdXV0lyNW1oZE1yak9YUUVJRjZPZ2pwb0YwSGZyNk8wUlVPM0hPMWhSSWZybGNQTG9QeTlLdTVzYWlFSHdXWElwYVB1L01yK1EzNkFpZEFyMzlWTDVjQThWSExXaWVKYzltenN6Rk8zRTVVQVJtMWVac05tclNLMlpRdUxTRFlxUXZvbHo3UkEzVExzdEZwM2ZWL2dFam0yNG9YU1diR3ZLMjBKbVhaTGNIUTF2NXJqRWUrVjc3c2FiVVNyS04xbXBFbi8xd05PUjIyOXJReDVRbVB0ZWgvamIwVkJzbjdwQ0t4bzNQeEV1TlF4bzRiQzZ4TnBCVjA0eVRNVHpLbDdkcWE3eDBWM1NXUlNqTVRqR0pYZ1cvNWliZll6Z3gwbld4M01qb1MzZ0Jyb1NSTkNvcW9kOXdRV21NTkRHV3BzalVkRGdqdkNyZ0RZcTBidmZaSjYxY3ZtK2pDaGliNk81aXVtTlEzYzlyZktZdGVDRDJxVGRpTDRwTW56Vnc1QWt1eDJFamZOQ1d6OWwyM2pTRUdBa0UydmhRK3EyK2xHRFgySmlBN1lpQWhLWEdHTWFQajJoelp0MGJMRWZ3b29XTzZBWndMWlRLa3lwUTJUamt3YTl4UVRPRGJGSlo1L3FSN2w4Y005UlY4c3BEWUhpYUN5RGhIdVZab0JKbkZoZFZLaUp0V3RuSEpiRXhYb3lDanVlN29RR2g5K2MzcjFSWm9KYVlUaFlOQTdYZ3JaRFNhSGFYVUtLbEsvMHh1N0wzR0Q3ay9vT0lyT2s3N1dOdEhGLzZOUFl5ZENURzRySGpGM2RVRXpsRjc1TnlFaDFjck1YMVRNMnNxdGpjWlpvMkIzQitGK0xURFFGUkplblNteC8wdmFoNHEweEJYSXVjc3E3d1grc1FyZW8xWUM0cWMzU3pXcnFkTkxtVHdiTEJDMGY1dGtTR3FKY29qK0pnZnFUQUJFMWhGTlNMQldYOGFQa2x2WFZ0L0dzUkJ3VHYzeDdQOFdEaHlBd1BjeDhWOTM0TnR1SDRHMkYzVkZURUtnR21MbG8xUm1yWjdxZG8wN3ZyTkpuVWhtaEtldmQ1cXBoYm84bnh3UUx1MzkzdXQrMFhJbDdpdE9jNFRVYitacEIyS2F3NlhUSjd5K1lKTzFnVmhJd2U0TFpERkFZVzlGdHc0YUhvWmQ3V1dHZWtmK2xWZFZDZGtnc3ZBemhsQWwrUUlpNmJaZWhYTkpmSno2STVCbGFLb2E4d2U1T3dCRnFxVmRVelpiL3orYi94NFluOTJGOEJLU3pJUlFjL3RIOG9lRHhVVEp1YzF1ZnBwdkZYSElqYlF6SWg5L3NpTTEwUkN5MFJJOEgydG0vMktRNUNjazI5ZUowNzdDZ0ZPQ002TndsMDZlck01UHM0NDQ2YStXWHBpQ1VTR3NROXliNVk1a1Q3QnJWQnpKc0hzSkFYd216SjJ3YWoxRnhLWHNCaFdQT0dTNGJ4T3JQUGpnM1h0djQ0Y2d0MkpyRUhYSTJzLzBYc3JmMVM3cVV3eDUwMWFncDdWcWhUUktjK0p0Q1ByMmVoK1NzY3lTdkxjeHNvZ2pwYnhaQVRwOE03RlVudTF1VzdaSVdQUldCZERUeGxRd0F3S01KVWhycUFKZkxzM29nRTlCRzRrS2gxczh4TFdHV2dVMGZJRlp4eHpNNWpQODZxaThHbFhMS0xTNVk1Kzd0M0pvVHMvZTZMVDdNZVpPL3o2QTFDN3RaOG96M0RjZGkwOU5RckQ3Nm1ZTmhLT2F0L1JETTV3Y0FtbXpxK1pFaDVFUnhYYUFqL1NaNEwyaEQ5cXVmWjZBdUVRaEExRk9FUDlFRmt1dkFFdll6Wk9oSTBoV0ZjSFhteElsU2ZsVUhPclNPV0VSbDlRcEcyYTVsZENJRkk3SVNQcEtnSjBEb3YrMldNdExJcUFsSnFYbnRSOWNmNTlGZTVOQ2N2bzFOc1R4WXFlK2NtOEZhYnBVLzNkUFN4N0tLekg0d0NqaC9SZ1pYSGY4anp2N3JCdFVtbUYvenFWRzF1SHBNV0M5by9iblRXVnpZN2ZxdjdWaEp3czNwZndBd1JpdE40R3U4c3dremhzalB0NjJvRFoxWktPTWdyVlMyblpzeWZrQ05FYzN3UzE0MHJ2TVlRalhjNkdSUlVzalRiclR3cVJDVFpETWVIcThlejlTZStiQTlIcEQ4UUFQbTJlY2RRL29CUFlHbzhkK1lqYXo2ckpsbnErV2xFMkJadHIzb3p4TGVnWVJqOXFLWWFkMmQwNW1nZGpvbitDVThmVzVWK3hHbGl6SlIvdE9HQ1ZHSnVFVjIxRlNwTEgrK2pvMjRWbE1oWG9nTnVoM3k0Z2dsYjhhUG9IWnFsWlk1ZDdTTEt3cm1HZG9PemVid3FjeFBxVzlQbG9pTG5zSVp2cjBtdGhwM0xOelQwc2Joa1hzNExIWTJ0RmpjcnJ3Q2YvR3NDVG44UkN1ZTFKSkFGR3FDUUJvRDJOUkg2RW1QOUlBMzRUMzdXU1RXMXV1dWVoMzF4NE9EaTMvSmRJM1dXa3NaQjFCRE1ZWEx3M3VhVkx5WU12T3hBc0FMMXk2cTJaVndBeVZnZHI3bEdvWUNld0g2Nkg3RXVDaWp2OXRwVXA1UzUwV0lCL3N5MGF4NGoxNUJVZ2ZBV3RnanhLYWhvYXZ4MDRjOG9sSXhTSmxUczBqVzk4c0pvT3o0UDRMQklPd3VZUlhtSzdhejlHYjhkZkJxcWhJdytTNnhBMWtkblkveWsvRkxxZ0prUVNOZWpsTXpxUlg3TTVBNm1oMFpXK25NaVNHcnBOZ3E0cU5UUUVPNkpBeElKTEsyemRmd3dOdEQ0Wm93YktFZ3VDM1lQQ05WQmJCMEhBQmxzYUF0VTNnaWI2MWVoOG1zbDBVU2ppb0ZkMFJCVm9wWGEybXRLbkJXSVRJdWJtNjdOSEVCZE4xa3Q3Qno3aWpBUDBkcmJEa21XQ3p5bExkSU9rV2pNa0U1RTBBYUJtTDJ6MVFOcVpXR0Y3UUsrbmFCQ1IzM3VXY2VxcUJaZHE2QmxNZ0hsU2ZoczduVXBBNzRlV3o0L1MwTjJNdzhKT2NrK2loSzE1UjJGTjBCTWZMY24vZVhCNUZBM2dLSlg2QlBqMTFSdmNvY3NSQ0JQR0hpOGJPcCt0ZlBacklOUTdGd1F4VG1DVmt3TXExYU5CMkxBNTRDT0R4dWl5eVZDNzNKTXhTSElQazYxVUlORnhmZ2Q2aXYwcUlxZmpPU05pWXk5UVJITVNFSlJaNHV0MG1ucExDSGhTU1Q0YVRZSUdYdzU2TktkTk5lYkMvcDFZekoycGtKcjhad2REYkx6Q2VpbUh2bm9vaEtIQXlCUkpTUm10T2w3QzZQeHh0K3ZGa3htdk5Qd1pzVWlFZE5sV0l1Q1oxVlBZWVc0QjY3ZHR0dzdIdm1rdDNzTEpTbHUrVEZjeHI4b1crNVRmQ1NkUmNmRk5hU1p6UWNaL0p2K0k4NFFkaWpnUTRSRGlwZEcvbDgybW5jUXA0MnBkRG9uMURCVWFFeGwrVjc0MzZ3dFo4dld3QURObGEraVYzclE2N0pQSElBclJrTzZMeDA0OFFtQXp1SkFRa2tYeGxVZDdxaHB2Q01abk84QVJvdGFhS2s4WFRvSVFkK0FKbW9VNk9XU0VXaFBKSzVKWG92TmZqSTdzQTZtSXMwWVY2elhBTFJCT0dNeE9lNWFMQ1BkTU5uM2ZjTzZHNVFzNWdZNFVob0xRU0tFdG9pVGZ6OWQ2YUdoQ0JEK3hIN0ExcVA3ckd2Nm41L0JCRDI2RnQybVFqeUdFSWlLWXRuU1ZtQWF3eUV6dVUrb0doSVRxeGsvZUJicW5udC9TZGQydmZUNmJZVWJreStpQXRXeWVrQ1lZaDNaUEZFb2ptakFlczV6Zzk5QlFxVVRzVXZNY3NiSmZMeFdXdDYzZEFZdnRoUXB1L1ptY2VVcWJkUFl3Zzc5cGZMOW1sb0NmbFhlZkM4L3NiNzhwQVZ0aGxBbWtlMG4vUWxQUFYyTTBuVUIvMVVEMlpoUWRteE93elBCTWRkWUcyWFNXdUlZZ2JXazFxWVM0OHc5dnU0ejRiaXc1cXFtc1JWbWJQSmczZjlaNUp0bTFFYnM1QjJoSndDT0o0aEFBTG5teEVuZzJFRkV3b2dKMzBzakpCY1k0R1FHR2wzL3c4UEJGNlpsaElZSnJudWtpUHluTmg2cEFlRjBTVzEvSFFDcFJUYmxEMUdIRDN0Rld6VDB6eThoQWs3dktPZnhQU0FOVk5tcFNsMWh4K1dzZ0pRdGgveU5jTHNOUnlxcGViRkQyckk3M2tWdVdBeS9TTk41WEI4U3BkYWZDN2FEZmpUbHJ0NDhHZy9MTStJTDlDSUNnN2dTbVlLQ1d3eDVWd3YyS2lyR09LanhtTkRncHBPb1J2QURyQXQ2S1hEVkFHSHFueHdjU2hhNUZuTXlTVGtGV2psK0Zma1VpdloxOVZGejNVeXdDaVM0dG1PbFBGa1p5aVI0SC92SGJjdjYyV1NaM1lXNFd6b25iZkthaEc1UUpUc2ZHbW9JMXN6R2UyMkJQdEUxMGpFSUwzYk1MbUpoT0RTYzF6WmN2Z3RHRjdpT2phQXVENWhtU0ZyNlR6RWJWTVdNbEliTFA5dUJnVlNjSjJTS2R0MzRrS3lvZlBScXFldjM5eHZBZlFaY2h3VXpXcXVRcExjUGNDUUVFVHpJOVpob1lZNDBBekxWNERuTkdxNklEOU91SzhiZXJIZTRtQko5YUJ6alBpa3NzdTVsSzV3MnU5V1czUVk2YUdGdEt5eVdBUExEa1lvdnlUVHppaVFCbldoOG5GWVlRcFcvUFNQeEo0anpQNVNOS3JYNUFLRDA0Smt1akt4RDFxb3lYM0p1aEhDak5YR3hZR2s4S2Y4M2V5c2p1d0t5V1BWOE05bktUMWE5cktaVkJHRUJoeTF2aVhTL2ZBc1Y5MGpPWm9OZWdRSndhS1dqcUhRaFRwVmE5bWdHaXl1UGEvZHpKb0pnMUhsRmRId0wwNlk0SjBhVnBhY1NtSFJzck5ZQnN4eGM3R3VOTER3UzNDNjRKMnk4eW1YWVhscUdJN2g4Y2JDbHNEZ3EwWTBsOHJsNENITWlyLzE1MWNML00vc0IrV3MrSVllNEJoUmt3aThTMVdYOThjL2tlMWpBaFM0N2FoaVI2UGttSWFYa0Z0bUdjVVZUa0VEc1BoRGQ1bnhGWkFXK0hqL25xQ3VrODIxS3pLWkVWUTVZNTFieENUV25DU0JIdm9LWTVyZVpReFNBYlk4SkI0Y2hXeGhPWlJTeGF5TTllaWpDYVppc2szNWRTeUdweXVod2dLZzB0ZmJzNGdJNU5sUDFSaEVuMWdpOFhTTERXd1JES3N1VzRsMk5HSExtalRoQjJvSisyQTk2M2VCa1pHN0x6WTF5anRVK0FrQ0xiRDczc3hLTkRXT2x0cXZiT25PZDZYYmlnUkxjb1lnVHlGbktxZ2dUbVlHRWNqUnMzN1NERi95VXRFQi9VbWttOVZPR1pRYlZ3dXUydkJJL3RGZjlpUWswYUlvTTBpdkpBemxTVzdtaTFYQUtZTXJkTVdrRENKRVVkNzYzK1hzZzYxN0RRUDNORjZCMTc1OHM2RytLMlk5QU0xTVlsU1JBa3VVUE9uK3crK2N4dE5yV2w2ZXNPSnpPbVZvYklhc2RJVWxhNUxvYmdlQXg1V1l4YU5reFY1LzZ5cjRYb1FkVHdUVXNNcTVOSElFdDVsZEI2K2wreDc5T25iTGtTT05SSjBPRFdDSDZpZ2VuUFNoM1hPSVNXa1k3YzlsZ28wWm4zRGdIVnFSaERVdytDTzF1eG1FMmVkL202ME1WakZoODAvMWhZTUJ1YXp4OHh3WEk5NFlNcFptaW5GdTNpZWpNT1BMZExzbUZEUHJXci92UTFHY21qdFk1QVovTkc1UFU4S2RmS1prek9Ba3JkMHNMeGJZYXRPTUNQbGkwUm9iZHI0dUNreGM4RVlRWjRROUtyK05yWXEwU3J4a0NNemxidU5OS1dZcFVoSGdWbisxejMwNEw3R0NPaG1aVlhSV1lmOER1VHNKQXc5NEJhNU41T1JlYnNkYlUyZHc5djhPbVdNN2tROGhISFdPd3A0U3NpRDZsV2F2QTlwb2ZLeVZMbTU1ZGxQU2FleFppMS9sMTVnUmJxWWFIUVV4bjlDdmU2VkhQQmpQOEtWYnVmTFIrRm1TdGlkM1lLL1g3RXJ1eGU5N3VNclA2VlV6SE5BbGRaQ2NjN2F5ckNPT0pnZ0N5dzBjTkdkWCtGRVpuZ1hVbFhqbTNJNEpzUEl3ZVZYNzhUZHF4a3d5YXA5RVJlaTRyejI0UFBxTTVsbXVoNWlRYTNCQ2Q0Q0JGY042ME0zMG01OFQvcURHVFJNdHJReVdrd0toME1QMDNNMDdnbjRHaEQ4cGZWUjdLNEdha0xIdUw3SEllM1ZVMHFpSStMTEpHdGlqd0RKWkFTRm04Uk9jWnJSdU9uenlpZklleFdNMVlmeEowcHdKSzJVZTdJRk42cnR6VmltR2Nya2cybmw4RDJPK1hzemt3MHI2bFh5aXVUNzBUZjRiU2YwZmpjQS9OMmhZdW9ITnZLbGFOWGd4VGd3VWVSMkxzdmljajFjZEJLZ0dWUityR0FWd1R6c25oU0VaMEFmekpLMG5odUIyTGhRY0ZtZnc2SExST0ZXWGdkZHBpS0hLQ1RUVmE1RjUwcytEL1hTUDdPL05UQks3YUVFaTFzMnVMSXJDRE85RzhFUjdybDN0dHZ1VGE4djVtNFBIcVJ4ek5hVlIvbDZkYlZucGhvald6c1IvWnlTK2dTZFpxK0VuNmg3NkFmUFlVczlwM2VxVk13L3ZnZ2hPN3ZqQ0FXZ25HUVFla0RIdVFPRk5DTHhuRDlJUmNPTVdudWxNUGg4eDF0Vm4wQzlVekVUTEpkR3poalhGYjZUb0toS2lzd3BrNEdPaWcvU3FpS3JDLzJ2Q2VkNUJtZFVQdDRzU1V3cWprdUY5VndCcVY0T1kyK1ptM2lFSThETE1pTmpaTFdvdUVMS0NMQlBabkxLY2xNVm9hSy95NXVuN2V6cWIzNkVrbzJ4d24wQTJNRU5DODF0cWJpNHBhdTRidU9nUzh3VnN6dU9zaUVxZnJJK3NhRXFoYlYyZmxrajhEU21ubXNNNkc4a1JibjBya3JUY1FPUVpHRUVpZWFHaXpMaDZySGdBSEV2SWJjdnNpcjVYVEtTQmdHc2ltNkY1Y2pkZUZKeitiYXJEVDNMZWFPV3hrc0VIRjBqTDAyNnE4WUlHbzBoSWdDNEwyb3lRY1MrWC9hL1B2dm5Nd3Y2SkpxWGJDZjNKMmc0UHFQbkduWVpJcVNPV1Vkcis0N29qS1h1UmNHYjZTZWFkRk9Wd3R1YnJJNWsxNHhpMkJpaVlKTVhWZ2E5cHNTcHNLTXRPZURyUUJnQWVHVUo5cTJ2dDVwelFYRWJBUUtBWTRkYlQ5M2pZRFUrb3gxTWFPL2luQWc1UFBWUzAxa0JJSXl5Nnh6UjgvOWZPc1FCbUp5NGt0QTNpRXdzV0Z6aHh4cnRLK2RmVXhkYnptWURPL25PTy96Ym5lREJBV1VYY0ZQNnlIRWhaK0pjYkFpTVR1eDNsd29za29FRzVIWGo4dTRGM1BIZXZOSlI4Q282QVJzSWczL1NhdFJ5ZXJ4eGZkR2ZRU0ZpZHJab1h1b1I3UDBOcy8vSTdvdUkyc0RJeFdqSDlqSlI4c2FPcVRDQ2p0RHg3VHdVbjIwTHVyNW9Ya2NaOEdhZk9FU2ZXdVJVeFZmaW5RVFRyTis0RXk2VnlLOHZtTTB1MjJSMnFFVmJ6bkM4aS9KUmcraWlBak9QVUpxWGtJWmE5MVU2aDN5WmhCMVFZalN4a3VMbnJtdDB3OXVlZTQ4SXBlZ0J4M2dnT0VodE0rNVJsMUhvdUNad2J4eHoxeEMxamZJREljcm51RUh0VklnbmJJN2tCazlXUzdNZmFacnNsTXB5Lzk4TkN2VENEWVRXYkNyUWFrOXVxSEpXc29lMVdJaldob3d0dStCT29pL0w2NFR4MGlITEtaL0RDeGRtRTRFcGlUYm0wYVlIT2pmZHh0RGI1KzltVXRKTjIxRVhwZFE1M3lWbE9hd0w5SThVT2d4N2RvdndHc1R5UWdCOXRTMFJZUXoyblQ2Y3RlZ2hmSmZlWko4cy9QdlJXaHJhaExxcUtWWG44czdHY3FaZXVwUjV2cjl6YkxTVEJUTHIxNlFIK0ppa0VtZC9YZS9Qalg3bSt0ZUNGUkFzOEgwRDMxOWU3ZlpGZDdud1hQbm1XK2YxN3ZkajdRMlhFZ2RnWGxyVXZLWjRWZFZZM3Bqc0pQU01zanNMajhHTjcrVWlITUFFZm16VXN5cjkrZG52RCs5a09YTU5pazdwMDJzT3FIQkpXdktQdkhTRkY3Z2NFYjlNUEFnempjbE9WKytjUTUrTVhuVnpyUElSTC8xaHFxWkVCQU01bk1Wc1kvYkFicElMUm5PWWkvZytoY2lnNk1qaDdKMFJUSm5xSVhUVTJMRFVsWWlJaXJVOXFseDFsMnJhaDlHNUhGVkZSWkZwdjM0M0hhemZuRDRrUk16ZHl0UDdEOGJOZXNoZlJjUG1ZWUVpMnBKbGtWVkhOd0ErdUI3VlNQZUFndWs5cUVhK0Qxc2xQeE01WStiNURiYkhEU0p0UjN6REZtV0ZIbzg5aVdZT0U5YVdaM0pWQ2lqc0NTN3FhN3BGKzBJZTZpazRPdXZWSjJyU0NqL1FRYzRxSEh5d1BvbEh5a2JkYTltVUdVRUxPRGJHc2llaXQ1SWFNR0NNN2NGM2lCMnNIS3V6Skx2Y29tNzJFeENjZUJTR0E0U1hXNDl5N1F3K1QxMVhBeWZWWncrUHNOTG5KcTJocGpML2dONU1wWGtRRWdIVEJqZzg3VTZsKzQ2ZmZPM01rYVlrTHF1R09nVTVIVHJlYlBxNU9IOVlTM2trNFlhczIzMjBSTzNtd2FkQk5adGp2YXFjVVZrUEk5L0VBbFJzUGtFWXdNM1JNR1d0dG1DWHU0RXpBRUw2amlDaVJpM0Qzbkoyc0hSVDM4WXljK2pROWRESUJQT29iUE5tU1BiNWNMRjZNR2hTTjRrWWlXdlM0cGE2blBGajY3ckZTcGdqYWg3SkN1c1R1TW56TWN3UzJCbHdzaE95WEg2em9yK1ZFZFRpcVdIaGNGVUZMbnFyV2RKc2Q5Y1pBUmtMZTQ4bmxtRHNyTFVVTGVsY3N3bXlvcmM2QXdNZFpxV1Z3Y1gyMnorUHo3aWNzbVRxcFB0N1J6ZmpmTytQaUdHOHBGK1pvR3RUWC9LMEVVQnk3L0VzYnhhcXMrQ25xbWs5TC9tZlNreHRBekdHL24rWThjQ0V2R0RBM0pqcEpSQnJhZFRKb0s0TVN4TFJyRzlwR2tDUTRmeVpxNDg1U1ozMmNWeGRUZ01JcG1XeXBUR1ozTjg1cnJQUlJYMU9RNllmd0w0K3dOZVZWR0hXZS9QUVdGYW5FbVJhbVdmZ0MzcmlRTVhOOCtWR01ZL0dvT3Z5MXUyZkJ4eElEMEhUTjROdkVLL0pSR0FwY1pXSVRJaWtHanRna0dYS2UxS1RHekVZUEFlT1NRdlh3YWp1cWZTMDRFN2dmYlBnQldDMllMcVZiSjNjTXNueUxLU3d6ZFJmOXc5UkFZN3UyM2tNdE1Vb0FmUEhwdVJNQ2NWSzE0bHc4SlplUWhsTlRiRExTQVNIR2dhRmljR0tWQ3o1YjlHZWlHSS8wOVBVOFRNSTFKUVR1RVVweG1rK3ZwZ3M1TWJRd2FBOTFnMm9ySVFPQWhXTDhGZVlYOTArQ2MyYTlvSzk0NSs2a29na0V2T1JubHE3Q2h6eTg0RnJxRWNwZU1HZXJidXExQ3ZlREJTRXlsLzE4U2pRNmdGZDJRUjJjaEFNeDJLOG1HUmdkbHJjUjMzejZXQWg5cnBjQnZCN1RiMUpPS3NvWXlBZGhpMzR6SVp3Z0tMVkRHZkNVZFpUYW93T3gzb3R2Q2w0Zkc2TkMwcHJydlc5RTlkVktld0EyRnBDZUVBeHY2S1RGTXorc0NIRndhK05UWjVyZmJpRjRSemE5NVZSTEpmaFIrOXVlU1R6aWVFa2hwTjE5RDBJdWpGZ0ljTzRjQUY2YjE4OFlrY1pJRzlhbzI0MlA0aDR5QUZ2eXpqK09Nd1ZBYlJpM2o5ZkJrUGkxaHdXdWVWYmJicU02QTdxUVJUYXdBc0RXTDdPWGVYTE1WZGx2YmF6VUMvS0F4UlVDOUg2L28yOGk3TTlERFJYR0dhQjBpaCtKS3JncTdlYUpFb2ZmYktyRVNZa2t2SEMwV3VIbW95bUdWUU9OWU9PbUVOK1h4bU5WMnlVVUtoRE9XU3d6WlNmdzFmaXRZYlJDRlBnLzR4QjFxQStJdFdZNUdrcnljd2Y3REMydTRHTlNsaDBkODdGV0RqSnpsdVJXSytlVFFzOEQvSzFBOUFBRkpMU3JhQUQrWmRtQzRjMHhBd2Rkb2Q0dXlPc29KL3E1RzFoUnBiSU4va0tzY2ZOeHpkOHhTY0FZSzZyQlQzV3ZHS1RaOWovTjdMRWNGQnZqOGpoM29aMzlkWENVYks1WVRLUVFmY29Pd2wybDJTR3ErK1BaK0FlUWlRbU5NZEExTkFHWjBYUVJxbmNydkQ2K29HbWY4MTMyajJ2YVlOVHpWMnV1aUxHaS9Yb3B6NWZnMFFrL0JxYnNjaDd0WS94bmErS3RxMHo4bnd5MmZBaTk1ZXhWMGFFaGZveXB1WTFQM1dUNGxjNklKSGZLZXFIODdwRW9hRjJIYVlkTWJmZC9KWWVMZk1CRW1zRytxQTM5bUtweWI4Z1dWOTYwL045bmdtM0JBY1k0aDRxNFM4TmlkYkREUkZGK2s0Y0VEWjRKZ0E5WTd6OE16b3Q0TlZpRUhtMTN6eU81c2loQ21veC9oeTJnQVhOd2xPemxJeDBVS2ZOeTlDbFpRY2kzSWVvN3N6U3VyTUJ1eWRXMnE1UGxleFQxSWFLV3YvUkNDQlh1bFlGK1FpUTQyT1lzZk5rbmNKOEM3WDFuYjdZOWNFZ0FaaDZFSzVXRVVGaDhBZ3FXNDNQcHJSUkNxeXlLK0VuVEVBYlFKbWkzZVVVeW9wbHpBclU4MVhnT3J6UkRYY3A4L0hZYnc4MjZJNGp0VU1uNk9GcUVFM3JLRmREd0JyTWkrVHV2MUVIRFE5SHFXZ3BBTUlhbmNvV1hCV2N5ZXlNSE9qYkFEUnJjcDNFdS9hbHJLa0FCSGNyVzl2RUNzanVxcmFXZWYxd0k0WllIV0pmUVJpWHE5VWdiZk54b1grRGlaay9CeHNEUm4vUTJ6K3hyUXdwa3YzbXJBUC8zNUxSSWFXUTZpMUk5SlNDclUvUGQ3Q25tMmIvaXhqa2ZTWFl6bnZOME0yY3ptRitmZHViZE5sTXgwVENuemNYOGxxUVFoLzZZVVJ4ZjJrOTY4dTB0L1ZBM3J4MGFXbGIvdVpsZmJpN3Y5eFV0cE5QMnVReTBpdk83dkcwTDF4RldsWW9MUEFWSDRtcFFUTWd1anRnV3RJcFlpNG5lR0ozM3dSZXI0T2lGUDcxVTF0bVdlNy9yMGRuU0p2aitkU0dONERrK3JMa1pVcHIyS2U3ekdhcXNmLzJRPT08L0JEQj4KICAgIDwvQklSPgogICAgPEJJUj4KICAgICAgICA8VmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I-MTwvTWlub3I-CiAgICAgICAgPC9WZXJzaW9uPgogICAgICAgIDxDQkVGRlZlcnNpb24-CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvQ0JFRkZWZXJzaW9uPgogICAgICAgIDxCSVJJbmZvPgogICAgICAgICAgICA8SW50ZWdyaXR5PmZhbHNlPC9JbnRlZ3JpdHk-CiAgICAgICAgPC9CSVJJbmZvPgogICAgICAgIDxCREJJbmZvPgogICAgICAgICAgICA8Rm9ybWF0PgogICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5Nb3NpcDwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgPFR5cGU-ODwvVHlwZT4KICAgICAgICAgICAgPC9Gb3JtYXQ-CiAgICAgICAgICAgIDxDcmVhdGlvbkRhdGU-MjAyMC0wMS0wN1QwMjozODo1Mi42NzFaPC9DcmVhdGlvbkRhdGU-CiAgICAgICAgICAgIDxUeXBlPkZhY2U8L1R5cGU-CiAgICAgICAgICAgIDxTdWJ0eXBlPjwvU3VidHlwZT4KICAgICAgICAgICAgPExldmVsPlJhdzwvTGV2ZWw-CiAgICAgICAgICAgIDxQdXJwb3NlPkVucm9sbDwvUHVycG9zZT4KICAgICAgICAgICAgPFF1YWxpdHk-CiAgICAgICAgICAgICAgICA8QWxnb3JpdGhtPgogICAgICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24-SE1BQzwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPlNIQS0yNTY8L1R5cGU-CiAgICAgICAgICAgICAgICA8L0FsZ29yaXRobT4KICAgICAgICAgICAgICAgIDxTY29yZT4wPC9TY29yZT4KICAgICAgICAgICAgPC9RdWFsaXR5PgogICAgICAgIDwvQkRCSW5mbz4KICAgICAgICA8QkRCPlJrRkRBREF6TUFBQUFRWVBBQUVBQUFBQUFRWCtCK1lNSEEwcERRSWlCUUFBQUFBQlVBQUJBQUVBQVA4QUFBQUFBQUFBQUFBQUFBQUFBQUVDQVBBQlFBQUFBUUFCQUFFRnhnQUFBQXhxVUNBZ0RRcUhDZ0FBQUJSbWRIbHdhbkF5SUFBQUFBQnFjRElnQUFBQVIycHdNbWdBQUFBV2FXaGtjZ0FBQVVBQUFBRHdBQU1IQndBQUFBQUFEMk52YkhJQkFBQUFBQUFRQUFBQUduSmxjeUFBQUFBU2NtVnpZd1BvQVA0RDZBRCtCQVFBQUFBQWFuQXlZLzlQLzFFQUx3QUFBQUFBOEFBQUFVQUFBQUFBQUFBQUFBQUFBUEFBQUFGQUFBQUFBQUFBQUFBQUF3Y0JBUWNCQVFjQkFmOWNBQTFBUUVoSVVFaElVRWhJVVA5U0FBd0FBQUFCQVFNRUJBQUIvMlFBRGdBQlRGUmZTbEF5WHpJeU52K1FBQW9BQUFBQkJQVUFBZitUMzRkKzRKdDBQTTlPY2pGMVR1K3pILzAzK01EWkxHN2ptaUQxRDZlL05YRmltZ1hnWXVsK2VZMS9rWTRHdmxzb0dBYkZ4NHBGU2x5U1JwTUU0b3RJUlk2cURiTFlSMjZIaEZjS0hPWVJ5YXE2VUtuQTBaYjZxNUgrWlFjdzlnMytMVU9JdS9mbGFzMkhoSXNYMWpCWUN4Q2kxWk5jUjBHcXhhd2FJY2VWSm9VOXA3akJaQ0hscEl1eHJrMnJiZjhqK1p0RWVndUlwVGxxU25ZYmhPS1Rhb1kwVUo5cDdTZU5pYXNOZElkSldQZCtIRG1Sem95ajR1V1R6T1ozTjFtV0VCWXdLbDhLdWRiVEJLcHJPdFd0cGE1VHR1L29vQ3p6SnNVV2t5VnFlM2xrRGhtRkcyR0VIZm1henRyV0d5TDJoRzJsOXE3YmdQYnNTUFpFc21wMlRzWDNkSHppSEZuZ2hIVy9hRmo5c2NkMXVYTXpLS3ltUkFQV0VNLysrNGhpVENuSmx0SFM5cVlPZHIvUmJURnJnZmcvWVJEVE9EdWZuVTFuRnRCVmo0SjFnaGdXQkR5VlFHMjBpOG5SQXRoZ3Q3bEx4bXhvc2MzRXM1OU1ZNmZXTHVRcXhMUkZSbmZzK1RYeC9HM056ZHlaZm9iUFBMNWNIV1hmZVFMc0RVQkhLbVdvc1BkYkMrVUNEUVJ0QWFGTEdYaHRoMkNjTkgvbDhHREo2QXhoUUlHOEZRMlIxZUlVL2pWcS96c1JyMDM4djZBNzVpR1VYSVJXYmt2Z3llWmVsMG9MNlBBZlFMY2k1OXc5T01ZVzhJWDAwRnExcHNXSEtoZWx6dUR5K1dFaVdIQXVMUE5XMlZ4R2EvOXlUYTNLL3JsNE9JalRkNjBqcFlrL2dCRFhWcVAycW01MS8yWHJKTklqY1VqallkcXJlL3hESTlodTBEVWtoWnhpdzlwOWw3NkFBZyt2UWV5OGkvQTJ5bkJwSDRXN0JyL3dZWWM0OHdiOEdtS0lCSnpDRnNFUjlFbk1yM3Rwc0VncjMrSzZjSFhFODRUMTN2bnhRSXgyQTBrQ29kMjFPRTZJZ1ljMUpCM2hiazBldnZhMVNUM1QrNGtyTjlhS0xRU1pSYkNVQWVobHpZRndoSnRlTWY3K1dqa2s4OHdZZmdyakFIa1I2NXdsNDVzZHFxeGdoQmcxR3hYa1phOXZPbTRoU1hQWWxxQ1pDTElLcGtsRE5zcitrb2x4b0JDN09kdEpPU2k5Yi9ISUF2Q09ZbnV6dTgyM2RKME5PU0NqYzFuR0tvRkVoWFJqbzAreWZCKzBuVnRwU2dHUVFLb3k5QWI0U0NqcW42SWE0ZzNMMFNKaFBQYTdpdTIrRU15ejBOMlFRdVlTVDk1Y2s5UWFIZ1EwYkcxcGRML05EcjZPaWhuZkdGUmdSZk9XdTZnaktsRVRVbHp6MUpzNGlydXFXVHUrVTFDZXVpUENPdWMzMnBKVk5iN1R2RXVMSFZOd0x5MHQ2MDErdnNpZU02d3dQejNhZkwwQzVPSU5Gb0FObGlsMHk4cEpnUXh1RzZHK1pDS3VkZmJBWVZESFp1OXliVGZrUnI2S29ZVTJLOWR4SjNjMlRseitoZWpKUEljajdXSm9yR3dwOFdoRWNReElOOHExeUN0RThUUTI0dllRZ0FaZVA4MXc4RC9hSWFOck9NRmFTVWJCRkNHTmE4K09qVWhuOFRkZHBvaWlGSHpPaXhQTURGSFZrU1h3cDBKTm0zSmM2cy84RnEyVmV0VGI2N3J6bGNOV3R1ZFNzZVdnOTZmSDFkYkFFbUdiUXU1a2pFNVpERGtjWFZ1Wno5T0hhZTJ1U1BTU1NGMGFvTGpoUnY1S255ODBmK2h0YU1XcEZ3TnBjUWhDZWRCc05HRXg2d3VQeXNiK2luQ1RidEdnMGllWXBibWJsb0hLNDR3SS9FeDVwYUoreEhrWWRkYzdCdmtGU0c3MnVxZjZZUEE0Rk8rU25nRDRkcUV6OFdlUVBVVXV5cVp4SEVtME83dllyWTEvSzcxR3dISi9ybkM1VTduK3FLNy9TdHZldjZGamxCYUhHZWJEVlZJRFJTL0k2YlYzTTYyZWtVWExTbWc0OW85M1Z2VTk4REkzcktMcDZOeDhXTFlSRWNBUEx3dUM1K2p0TW9CMnNMdm1QcDVZNXJnME44VmxPOHJCSlhWOXg4dFl5NVlpVzVpaDJXQVZMaG9ISkpiTUs0UDZhODJndVJqQnNXbWFVN1RweVdzd1RWN3Jxd1hZaUN3QnloWEltKzZ6alMrSjc5aUhPblo4NkhtMFAyRVFJNlVlekpTZFpkS2FoYldZMDJ3S0ZNd3VCa3hWeEsxOFNaTHFnM04yaFIwWENZdmo2Y04vaEJVR1NrYlJrZVpFeFp4T2l4R29YaW94aGUwSEplRzcydmdqYW9XMEIxRkVKekJ3RlRVYnUzVmlzSVYwdUk0TDEvQms5Wkl0NlRUYkdQNnZ4YmtnblQ0aml5T2VnTWlKbU1MZXZBU1RvR3VWZHNxNzcwdVZZTHMzTFErbXB0WSsva3MzZVdLblZialo1ZjBzTWRDZGtuZFhBT2dCSDJHL1NaVTRrMnFGK2VobG13MjdLdnVadU8zR2l4RnJLUFpTOFZtS2NJdk5JdlFGTFp4dU5VM0RKSUNxcG1hTzQwQ2x5YWZGVTc2aGhreTl6NDdaL0R0L24yUGx5Qnk5K2dJMVk4YTV6VjBHZm8xdmJleXV5SldDWUZIdEUyY0NReCtCY1E3NEk1SklyUmV1NjNZYWdkMzBTUHpxU2lhK0JhZ2EwZlN5c1JLdG5zaWthTnN5d3BpTCtySEpFSmFRcGlIWGl2Q3RSb2dYTzdPemJvdkNxL0E4V0MxR0w2c2d3WXYyQnNOaFROWmtRZURGQXRJbGl6MVIxckQ0ZlhWbkx2TUJob1pYNEFWaHhhRkpmY0tQZThmTmVjZnRvSUFFeTdhYXJVc1FLa1JyTmpxV2ZUQ2RybWprOHhWZERQWEdMOEQ4SkxRaWF6T0hnSkJMWG50K3dtV1BscXNXQlZmTXYwb041eko5ei9VU3pOdUp2bHFzM1VXbTRyL2ZoMWFnRk9pMzdzS0lmQWVpL3YxSkZ1bmMvcXdPTlFCVG44UmZrWHZDdWhUZHVBMmZObW56MXArM2lXalNKZGswRlRXbXlwQThsOWdMQ2tjVUY2RjkxZXFyelRDWnZvV043Y3Z5ME82c3hFWEdKeXY4ZGxVS0d5YnByRGpFMThhRUNNUU1VV2JUMlZEUXZrWnNvekdiS0FIZEdIUmZkN0xWd1hqdk9qWEx2ZGdNZXgvblRPQlRUajI3QzlXREx6YjQ0cEw1QjEySnAwdVlEa3FlWXBHZ3RTTDJLaTdKWkRUTkxzelBmUHpLQWk0eWRxQUN1c01weWhCTEJod2hDYWJnc3V1VTdvY2dhYk5tTFZKOTBHamJaMWFIam5lejlCQ0g0cVJUVFJycitWRzlnNmpETDFqTzQxa1dPTVlXSlFHRWNlODdRZjFoT3BTdVh1ZWE2WUhPcUxEdC8zc1JNZXBjSFA5SUQ1SVJCQkJnbitRaFVQUUtXNHVXUHZvR3lZc1lvcUZQUnRLNDJiVDR1NExRY1pWMXdWTlVhMVhIREdnSG5pS3ZVL25jb3Q2V3RQS1BQYXpvdTA5N0hscWRYMDhySE1oSlBvK0NVbjZVd2dqOG85d1NrYW5pMENwWVlhckJqMGthZjN4QklEbml6eURNZ1dwK21laytDYzNNZzk0ZkVIL1cyOE9WS3FYN0J1TWRoUVBoQnBENUJNV0wxMmlnQUUyL3RsTjVoMDNJMVdIN3RxRzVyN0NoZEg5OTdxZnFGOHFzVjUzN0xEVGwzSWlTbmU2WmEwcDVLbXBGOU51anowVHRkZCtOejkreXJLY3NFdDVmQnM0TjNWaG1HQjd4K2JSOUFxWWNBYnJhUWsvNGpNa3lsM1UwUUxyZ1dOdHpnRTRKa2V5SGRpNmoybWE5bWNnSGlSODVGb2JZTDhLOCs5OEdrSmt5MnVncTJEYy9zWkxaWktYRjZXRDVobFlMUm9FaDlGSGJiRVM5S2hwTnR6VmcrNnROTTdUSlNnVDNVcS8vVWw5Sm9KNWpUV0ZkSktsM0J2ZmVBbEdobSswU0ZCckY0VHFrY3pRWm5saFJJTFdpa0grZGlqaXY1SDJYMTZRejIvc2Y5MEY2VTRpV1hycVpMZStwbENXWU03Qno5UUQyM2duZlA2V2d1cU45ZjA5VTlkZHhYMU8xRnhQOVJUYmtMbmZLYTcxbnp5RW94K1pwT0JTNHJ0Q1lZb2QvejhPdEtmaDJHUitIWDREUW52QnplRGdyelMwc05EUWJ6eWRKY0t4N0xqT3lubjN5c2plbTlFaGx4UWRrT1JvMm9kNk9hSWNnYmZLQzFhRFBad0U1Mm92Qi9iN2xvbjRtQi90dEJSelFHVG9qV3FrbzRNTHNnMDRKVkIvUWxRWW9nVkw3cWlXaE8yMW9pSi9rTFBWYXh2aE1ZY2FDYXB2RHFCQ25WTURUSUN6RzUrZDJTeVJVUG93UEE3eWxza0ZhTzlhNWRyTzFSdFp0WDRYb0xDRndkK1J5UHd1LzFwVnptdHk1Z0RWSUsxYlZnQURQWmlhbHl6cktYdkpuaHZXa0VNOWdWR0g4ZGlTWXJ1akc0OTNwTzBCa2J6VjJxNnZEa1JJblVVVnFjTUxlbTcrTWc1N2ZCWkgwc1U5aStoKzgxRWoyVGpEQnVocmNrdXZkSTF6WUdzbm4wbG90YldOeVJObXNPSi9nSHQxMEhsejZON0x4N2lRNkZTOXN3ZGhLbzgxRWpacTduZCsrSit0Ym1EZHpUZUczR3czeW9zbkZwSitXRlF3a09oQUhzNVdKYkhaZTdlSHNmRHdsV2dZallUYVM5eDRndCs1RGZwSmdySGM4M212ak10US92NHhIODVnZTRTbG9DVGtJSXZYVUdvSk1PN3dmaFFOVkxZU0xkTXU0NEViU1BXaWJXZEdFNS82MkQ4RkNRU3VqekFxU2p4aVMrT0lIVnhXSThJWXhWUGVCbkVrTWpYSldmZjdFSDdSM0IvMTEyZDdFbDIyc0NtM1RZV0pBYVZvMXVwZzd5T2lCdHJuTUd1L0k2VmdJaVUyR283L2VheEo0Z3lmNGlCVTkvcldqRFRGTEVVR2pseWh5VDhPVTEyN3hacVRTNjIxVGpPU1NhV3hRWGZPZ05FZWl3Mm1MbXNGZE0waGs5SzRpM25QdnE5V0lnb0FGMFFUaFZub3dTbVFkYUFkV0NYNDh2MGNocmZTNExtL0JabmRzYS95aXpBU3FSeGVzdWpxclBTQzNuU21YVk1DNUFKQWJ1MktjS1A1MWZUN0JzbnJnM04vcFFzNGpxUTZ6ZFRnazJNcFU5djgwQXdHTWRSRk9wQW43elJyYVMvSmdpWW41QlFJR1kxaGczK1hjQm9pZVpRUjIxdGxaaDR5aEpwcmJEcURCQWRVMzZRSm9CeVRHMWtQYlJDSlZHUmVuSWFabzFjQ1RPb0FUY3lGV05QTDh0Zkx1WDJhanc5UndtL2MwVk92b3pybWk3UEdOZVBISFlXdlF4T2VvbEZLbmw1NnNkTC9iT2hnNjRXOE1VMEdwTEhaYmltT082SWpVOFdwQTJ0TEFxU005ZDVhTm9kQ2tLZW1RMVpaT1ZNVDZTcW5CNUozOFM0UUlWNlcxM2ovNTEwYytKRmZjVkMyUFhTSmYvcDRzNEMxbzVqbm1FemwyU3BFUldWN3Y5MHRGS1JxNG5Ub1Y1RzhBWDZoU0NvOTVDby9rV1lmWG5qYWtIM2I0aXRlbC9xWVFhVWF3OVg3dWJFZHBOWHM1QkhrYjBROG1WVFhCZ0p2cU5XUDdIS01TQmp5WUZEWi80cXBOSlNxa25vVndOWnNSbC9DN3IzdG9wZ05jQmJRZ1BIK0xGQzJ4V0R0WGZDVHg3TnJKR2UwTmJiKzN2b2d0Unp5dnZ3KzBqakU1SlFQeXNHcTBvUkM2dW93L0VQdlZLK0pHQkRtd3pCQ1J5TC9WWmsxM3dWY2k3UDdBNFE1ZlpLL3VsRm1COFk3T0xJZ3UxcWg0V0VFaHhoempUUFpXa2xKSXRpWjhBeVI2R2Ntek5PbWNSNjBDcmI2eTJCUFdMbFBwMXdha0t6NU5NeDkwRkhyd0h2Rk84bWs1NW03dzFZMURqQ2kxNmpKRy9xbDZnZUszenZCdGtWMko5VUE0YlIwVG5RRXk4ZjE3Sjk3Tmtxa3NDaFlIWGVKV1BWb2I1WHR3ajZVRE4vcXBHdXFzdWNMMTJiVnBlTnBEeEVqakpQaFNzK1ZESXY4SHd5aFBpQ0c0QXpvZHoxSkd0MHIwL3pZWUhWN2hoWE5nSXkvNU9tQy9kVEZLYTFhaWdWanBRTXl2VVl2MnJZekYvUXBBYWY5NFdwelMzNjV1MWRYekoraXYycEF5UThMb3VZOFJsU1B2UEJSWkJKaXdpTDFWbWpyNmMydXM2a1Z4MmxIU3NOV3pDMkx4WDFNdGhkUmcxeXQwWExldlRsTlpFb0dOQ0I1QXFoSk5BMEtPNHFjUUFYU2ROemd2QkhocGJ2ZUhOSENwU1dSdU1iNzhyL2FwaC9Qa3lmVHEveVplSjcya0RlbFJ0QitpRCs1b1lzRnFLMXg2N0dORktZY0FmYzlDOEF4aEkrUDRIaE80WVNXMm9jSEMzUE54dWorT1Q4ZDZXcVN0OW1RVUZvUVBHejFwOHkyWFFZWVJUL0dUTnJjNGdwdkRTakxzWHc1T3hZVytkWXgxc2ROWEFLZEhpSTZKUmRaa1lUNFlPdFVFWGF3RnNxTTBNVmY0eWlwWUNweE12VjVJUVc5TG5uWDFUVUIxYTFUYXEzYjBxNjR0Y0lHRzhNRys2RExuWlk3OXAwQlVqdVRMNXpLWGNYL2JTVkFvTjBaa1JRMGxxaHJMS2ZpNUNyaUZEc0xSWm5NY2taOUpOdUxidGI5MGE1YnBZWW1rZ0FSanR6TkdKcjJHNHl6L1BobXdoVklZQjl0ZytwZHF2ZFVzMS9QaXFMZ1pWQ3d4NXFmMTB0L1FPamUwNUtBc0lhbEF6RFZ3VmViV1pkcmxvVjZOMnV1MTJJTVR3c0NiNnVNelk0MW4rWEEyaG5yUHhKb2Q0bk5lcmJIdWVPQTN0d3AraWxYeUthWUhpQXNONEhNWVl2RVZ5dE1kc1NBTmtqeUFlWFhaNGRqS3kreCs1cUE2UVhRa1hDZ0Myd0UydEtkaFplYzZjbUhHLzBRWGtPS3dZeE1xYTZiVy9BbGRLWjhncmVheCt1TGNYYTEwTjZjT2R2V3lYQjYrcjl6L1NOU1JNaUhCQmFGdTVQVDloV0ZVSnpaWHcwSlN5REEwcGM0MytSSXJjT0pqVVNsaG8wZ3Zjdk03MDNmYk9KUHhuOU1EZXJSRm9pOTdsUVVhYkRBS284ckVYMXVNQ3pNZVkyaVo3d0R6bmdIeHRlRk1yTWZhbWMrNTBicWRJTDlXelMvMzhnYWhvY1g5Z1BidkJaZVJnSGxGc3FLOE56MVgzaWdYV1hGSXEzdTJMMmxnbGZNT3BPOFhITW5xTjBpM2RSYm9CeHcxOGhRSVZIeHY3dFZidGVxK2lYOGNBSk1IM05lN2hoLzVCMXRhUTgrS2wrSGlBQ2JMYnFOSWV3ODdUWE91S1lnMXEwTFVBdmZqa1ZLZ1BkYmVzUk8zd1oyeC9BQ2lUSTFVNUUwZFNhSVZJQ1ova2VlYzlBYjJ1cUxYYzZqNFhSY2h6MmRVTnBUdTA5bG1XNkxqWTZybndjZTRrQnd3eVRlVGUrdjI1TlR3Q0xETkIxMmF6RkI4dlVHOHo5ZmhtN0JsdFFIRTg3QjRrMlZsTXFoWU9xZjFLelNvWXVwamxrTkdySHNCc1R1bjFMZmRJWkxtNE42VDZkL3NSRkxKeEVRYVlkSzQ2eDZlUWJ4V0theFJXbzJ1elZJdkpONzBPZUlpaVF4NTE4WjdBVi9ZNjlyMUh1OGxDZnpLZmxLYWp5TjVrV3dNNkV5UzZSYXlNb0JtT0IzazVwSXRyOWU3VTZJbWY3YS9sejBteVppUjZHTnRxaEdNMWMvekROaGpBUk1LbGEwVGFrZG1xVUVxYVRXcG5TTHJpZUxORWZXQkNEWW5sTjVnNkRRVG92OUE0NGJweG9ucE1UeVduNXZpNSthRVJLNkg3SUJxK1R1R2hZdVM4ZUJEdWtueEw2dElxc2I5ZjlFOE5pak1MZ29MbTA2Sk5oUlFSL0JEZ2NPa3ljWEo1QTRoV2ZyY2xpTm81dk1tb2M2RmJuVVhSb0VjeXlFcGxxamg1ajUvd2ZQNlNJUG45UlVENS9VbzRRdlhqay9LTCtSeEVabEZMTmJLYklFbERLYTZlTVNsQjlXYTJmVW1WTkFZN3hxYnZKdU5HZEhVOHA5RzV0ZE5wem5xb1BzbWV3ZFpWUTZDczNMV2lUQ3h2KzYvTitSN2Z2clhIM3RxSkpuQVU2VEhZTE4zd1BxRGRmZktLTlZmQ04rNjJDOVk3WjN4bi9adWpDU0x3bW9lRnBvci96czBqTkhHQTdFZTRkeHRwWU1IYm40bUREMkszUGdZa29icHYvM1ZPM1NOWXhWanYrZ3QvUElqVzdWOTdXcEV4ZjZwUnFYMjAyUm5RNStpTFR4ejgxTjg4MUMyYUdvN2poQ291NEJoeWI0b1FsNW13T1BoWnliOXpjcGNOdTFtL05OWFN6NDN0bGVTL2RXcG1ROHNTd1pGb1A3V1ZlYWZOa2pjSkpvMlRCV0dnenpSTXk4VEcwYyt2RUptTko3aksrYW1KZWRYZStPK00vd0ExU29rWHdTS0xjUzM4VnhHWFNvaTUyZ2RkaG9vUGJ3TEI2QlBCd2ZWWExUNEorYVZhdVptSk5KQ0prRmJ0MjAxQlpGRktRUkRXUHhxdmFKcEwrL3RQRjRZNDJLREtyZWVMeWNyOFNBaWlvQVdQWnk4VkZDaDJ0c1BXaldHOW9WSUcyZytuVy9VRkdjcmhwa3dEV3dvUC96RGpEYThKbzA2ckk1VU1MQzB2SnNOOStNOVl2TE5vaU5sblIrVDVwK2hiL0N5OTVHTm1jZHBqaE1FU0ZhOUZlclFPMFcweWwwZTBpdGZvRzhGUk54ZFpwM0ZXcllqRFludWduOFlzVTJRUStoV1o1TDRXRHFtVHN3M1FaM3BlNzRUSERBVFdDMnJSaW5SUmcyN1dIcjErelNrK056N2JLRjZtMXVzeUg3bml2dmZqQW1wS0MraDJ2aHNmNkJOY1E0OG9BVGhNVDA5aTRkT2UwY21wQkhZakJYbnM4UHpWaS84d0ZoYjJDc3FTZm5hd2ZBR01GcnM4VGtLc3VyeDNrbzdqRnhicG44ZEkyZDl2RjM2dkdzVGZGZkQzYUlUcjdVTXhITjBvVWJObmV0WFpZUGNTRG1IZ0JkY2gzMzJTdFl6b3ZuZFdTRVdxNHNhUFM0c1liUk9TTjJ5M3BjeXNFUjBtalAwd0JLREtwTUpSV1BlSnFZOVp0V05CanBLc1F6Y2hoSXMvbDlmM1pJNUJnUHBjWko1eTVwK2dmNk5LelFrd09Ib0x5UDh1Q05WVk5aOWs5UjYzOEJSc3lxOGVuTTRRbUdSbjA2ZXQrS1hvRHF6SGlmSmpHeGErMWZJb1k5SlhRTklCcnJRdTk5M1lXV2dhTzBsMjRRWjI1bVdSblRRSVp0dnhOK3c2L0RZd3IxK2Q3QU9SR1FlOXFYYVUyYnN1MVJhU2d1Yk9mMmdLQ1Q3QnMzbnErZGJKdXU1dU1aVExVVDhBaVVEc3pEQUFQcVhyWjdGRTZUbjRicmVqZk1pZlVzM2NoVTdFRDZmVjlLcmU0dmZMbUNVcVFoRE05Z3Fwem9xcFp1VlV4aW5xeGd3RzY2b01UTXVGT2tBeW5rSUdoQS83ekthVDl2VGFCUzhxTFRHb2ZHVFdsajdxNEs5VnphdGF2Y1NMbFZ5YXdTbEgvS2g5dEdTTXFCWW5kK001Mm9uR3BNbitwVGk4MVZQSjh4ZkRzdWlwOFUyRkRaUWFQR0RGTUFqdm1tM0RQY2RXcEQzMllpYzZqOXMzcStmZmxPUkJNS3lzc1o0cXlmbVZkbWNZSytQcVhCMEFNZFpUK3U1NktrVG5UNjJxUmNBL0tSYUkxUjkxMnNjYmQ3UzdqcElJdEl5WFk1OGcwQW14MVpjcnd3ZTlmeitJSlVwajF4ZldGMWNodjNQb2JtQ3pvTm5tZFFZTFVxM2RVU3k2dEEzcnZ3NnlPVTVKM3p2WUNYMFpWOG1XS0U5YmVwY0NEQ0V3OUN4RDArc05uQklDL1pBb0FZb1hDeWNlK21HQ2hmR1YyeUFPQ2NORkRLNzlPOTRKamprc3dMNFVsOUlhQ1RBMVJ0cURVUzNTUnFXQ2VoblgwNjZVb2RUWVpqNFZTZkwzYVB3NWxmSXBnVnZraVBROGtEd1EzVk5HQVlYTjZnRysydFY5dlRSNGNDMzlsVmp4WEo4MytlTS9SRkI4eWFRZ25NRHg5YWNtQzJIQmtnbWFoNENKU0NqbHI0UDlub2FKRjd1TDlkUXZBalBzWllLOHJwdmFqQUNWSGNRZm9LcFE2YUROMDduNUJsQVIzRjAwaU9TRm5naXlHRnJxWkFQTk56dmNOK0JlbTU3NEp0bFNEVzNWOEJtVytnUGVHSDA0WkxIK3F6ZWtzeS9UT1IzRktReEVPUk5lZllaOGwyTk8vWGY1YzdaT3drOE1aZGhmMnBnd1hndTc5SitoWmpaUU5JczZrVlBDSHo5Ym9WL1lDVGMvS0FnUUM5Rm05VGtVZUJyUWpRV3h4RmxRbThPbDgzaVhxOVA4RlQ1QUgxMnhJdER2WlU2Q0FEc0NrSjc4UXhBdlBnUUk1RzM3bzRUYlZqOUhZMStTS25xVnNXSEUzQkVRdUxKd3VrTU42YjFheFdsb0RxQnRBRk8vTGIrTW13Wkoyb05kbzFndVFvb3pxNUV1QmJ3RWRrbjMzN2p3WXhDcDlhcmpGdksxekh6U1BtcGxFRkpQckk4b2JxVFhyRnlrd2wyUmNhUlU2RVZtQkZUdit0cGFSWkJCSllXYWxFQVVXU3hnNndueUxUdEVLSTFnSTd6WUhOaStXc0pRTnJ3SlNTemc0MGZFSXpjSmQ0US93amNzaFN5M0pKdEt3OElxQldjR0ZBZXRpUFBQK0hhcCtEbnhWNjdnNFkvSTU4ZDdPNDdmWHlGTTV2bWZDLzRsRVluODY3cUczMzkvbjhGWDgzamVIRmRidDNVUFIxeTJzUVdFV29DcXh2UFE1b2RlZnJOaTVHNUF2TEkvZnpqb090aG9vM21uK0Q4K2NCKzhFdXdQbVpNRDBmNlJBMFI4UE53R1JXVTZlYXp1VVRNS0I0Tm95SHVha3hjWS9mamVFc2w2OVUrOWFGbmU4eVBuWnk5QTVrN3NWcmMyQTRyVS9ET2F6ZXVhRE9yL1R3eVhISlFPMlZSMVVpMnZyb1V4WFZMRHcvZmxSN2FWWE5oT1pQN25IclNWY3lSZ1oySzVaRzBuMnRYeHIxKy9raWI1M1ZkUGtBVzlRMjdmV1BpYm1RNnBWMkhnbnA2TzM1K0VxOVpmT0tndVV4MmYwSVVKYXN2b3JZTlBwS0trcU1qTFUrL3Jpb3Vsc1FoRWNyM0V5ZDk3TkNJL1MxSElBSGM1OEh6K2lHSDFkTGtENS9Tc002Y0tGOEE5NURaeTVQZVp5ay9OWHNhNGlFcHlpa3NFLzY1TEU0aTkzNHBTWGwxMjBSelJxZG5Jc0J3L2FhUDBHMlVZVm1BR0loV1pkUzFmMWdEeWdjdFJzSnhsSGNYVjM3UmoyN3kwRWduSTF2ZzZMTFl2QkMyK0ovQ0JEcGszVDJlaTRBd2lyK0p6U3Q5UmhSQ1RxNzV6TkEwRmdVOXQzN0RyTXg2V1dSZnE3VHVmNE94QTluL1BRWXNWNEQvQWhmNWwwQ1MrMmV6ZHJOdUZsRFFLNmpIUlQwaWQvT3ZKT2RUVHcwQ1p1Z1J2aktqQXBtRFhVV0lGOGhtdk9XMCtXd01DMHpzcm56bmdjVDd4TXF3OVkwUVlWa3pSVW0xKzJGVkNoWm9iNGRsS09SVDVMejFVOXlUcCtkaGU2THIvT1M2MVE1NVUzWDlETnZFSWVoL3I2a2MwVytGRHQyc29mREVTSlRjZUs4OVdhcEI1cWM1Ui9wZkRVQjhFYXQ4T1lRT01aQkFaV0RHb3hVTDB4cnc4VzU3d3E4RldzelRKanVPNEplSmF6ZWFOS2tZWGVhN2xCMVp1RlArbkF6bU9TSk8vcGVsdzkzZVFQak9mS1RjOTdNU3h0dk03VDRYcWFMbkJPSVZrZ0VtYVV2TmUyRzU1YVZKZWJScWZXWXhSamJJRjQxNUtaOG4rSmZ4RWxPdlN1ZHJ5aVZxTXlXM01HdzJVMEFjcVY4VCtxQS9zdVZWbHJvZmxvT3ZhaW5CZXp5akJ0SFZrNXJMaUhWVWdremNFY2JDOXVETmxvODJmaEZxN082clRESkxVYTN4T2Zhc0NLbWFLSXVHeThNd0l3ZDkybkxWaG9pcE9xU2crQlViVFZXMzRXVXVuUWFwWTNLa1JINmQ1R0R3MU9sSDR6S2w1T0MrWHljQTN2ZU95MVFzK2U2Sm5MS1ZXUUFRYUNBVldRWi9GSjRtbC85aENrUEZXdmZiN2ZUZkFhQXY0TDFnZGhwVWZvT2ZkMkdUdktvWGxVUGZxZWxjVit2bjJlWkF3TFZ0S0hUc2w3UHd4N2p3RDR0T3d1ZUNSS1VwV3RLcXpoVEVjZVRJMm5CaExvRDhtRHkxUFo1UlhqSC9PRnRkM0QrUENveHY0LzRTbDAvTU9EdlFNZm0renlEOVAvZlNnK3NUcVZEZ2JuR1pRMUlMcDh2aE9ta2J0U1FrcE5qOVlQM1VrQlVraG1GUU1KQjNOVlNTeFAzaVRRYlhKZFhjMkxkY1lwNTdCY2RJMHZXalFpbXRyVTFQUFNvSFEvQ1E3Sm1TT2VCaUNVUWEzaTFCbUNlblBUNHFBL2ZIOVhFditHeGhtL09uM09SOVozanB6VTVPZUFXWjVpV01sNTdCMkc4cTIxamJyRnNTM0pGN3BUL0tOWEtORTNIWXA1NFRleEx4VXRHQ3NSS3E2OEpxbVlJVUsrZUl1RTh5a0w0SjJrTFU2dVM3QlRXbFRLTUhTeWpnS0hHTUxZODJyeFJMQzloa2cyMHMwc1ZZYmQzaElYcjdvOFBUMC9GYjE5T0puUkxQZ2Y5MFBFQmlkSXVQS2EyaHhFTzBzNXlkUHpkOGE5UHhpaTQwU0lYbXN5cmJMTDJLQmNzTmpSL1dlYUJHUGJKR0xIazM2ajJtMVRRNVQxY2RJc00zajJHbnRMa1NhMDJUVUFKeEQ5bUVMZUNJSUNHY24wSEM1S3QvWmNES0NxSUFUb2hhQWdmUlc2Q3FuZEJ1QWVaZnlTckZGNzAyMGs1Y2Mvd3liK2N3aFN6SExoUTJJa3BYVGQ2Y2kraGhxQVVxR0xTVms2RldTdGlxV1dMUzEraXdLNzFjSmozbFd0blBxNmYvSW5nbEczdWE2bXV5SjRFbDhPYmduM3NJZWRGREg2SjZZM0U5eXh0UFFMblB5enh6NktMbWFGZnlOdjlaYmtaeHQybnVuVm9XTWRPL1I2Y3AzZFJ5d2NRYkVndHQxTTY3M2s5andZWDYwZVJUVDF6Q2ExemUxUEt3UUZBUnM3U2JNeHltN3psMXgxTzkrYjdPdGRoTS8yVDdpYy96R1FWek13NDVHOFNpOG1JR2lBS05DYjkvdHVPM1l4bitCRG83TndpSkdaQ3VIVmhGZzV2Vis5b0hDUGJEcHIzM2YySEg0dlVnbUlRbFpTbDJGcHVpL0pYVE9uaE8vTkFUSG9tV1NrQlg0QkxxWDk4ZzZvUW1wWkdsSldrOHlqV1ltUlJ0ZmpJdnhuNUlMNG1zQ1ZkelB3b05SM2ROVDR2dUtobFJ6OXVmYVVzWXJaRVUzcW9RWjBIUWEyMHZIdDBPaHBKdml0ckJyMW4vUy85VTkyV3hzWWRVWUIvaVR5ckhvWTA1NjhHWmVtanBWN0daczd1RnpJQlo0L0N4dnZEeVQwSFZXc3ZoZnlKaEtoZ05PZUN0NlUwbnptVWNyUHpUVWFKQ2F2b1Z6UmRucXFja1A5TnZSM0tQbmVaZ1AyY1hxdEZmZVdsODN1eE1WOHdoRXQweXlLS3Q4aGYyZ2tTc1ljY2gvZmtoUFgvTmpqVC9SMXpsSFJUd2ZSVWtFL1VvL0FFS09FQ0oxcjMyZUtnRERKekk4MHNnaWwyY29xNXlrQkJ1aWJQTlkyL3pwM2xNOVgzd2o3NThkMnJncENFYWh2UTV5TmxObGZKUGJ5MUN4eVpCNEtvNldnOTdQNFhRMzFMdFJDSmVseENRZnR0N3c2VzBBYlBwUGhaT0VoNGRJRnhlWnJ0L0VZTnN2MUxDWEtkcVo1Mi94L1NyUitPR0xDOWdEN2VvWmthcWQ0Wkd0VCtiWldneXg5Y0VoZW9sQXpvelhLUk1pYWdzaUxob05ONHNjVG1wRFpNSFlubWxhYktaNkVRMlVNSXdPcSt2K0p5YjQ4RjRyWmZlZUplZS9ZRGw3TGZPbjUweG14bUszSUFVbXhaSEhrc0dHejNzUmNXQ3A2NXVzYi9HdlJwSlE0WmdMR25wUmU5dWw2WHZRY3ZyNHRUelM3bE5UbUlHOTF2eEhPTkt4RFlhNGkxbHozaHg2aW93OVR4dTJLVUVwU3A3Tk5MOTh2aTVOM2UrMm4vbDl2dFdmdzZFc3Z0OTFEK0hSdGorSHRCZnc2RXc1V1dsb0tGZ3VLN09UR2k5cENtMTZ2RzZRMnQ1QUNlcVl0SHNuODBKMFljaG9RZ2VLK1dsS0g1Q2oyRUlnOE51dmpmZHhPUXE1WUZweFBmTlVoYzEzTk1PY25aa2hKTHlqWFovZG5acXM5UklteHFGcXh1VUFPYnJQUkpXQVphRUFUcjZmOFdCZUl6aHgyVG82THFRbnBZZGFTNkxVLzhVUVBHKzJQbFV3allGODBVM29wQmJTbms1YnBpVUtSV1laNWF5QmFiRE9zTDV0MU5za0xvTDg2Qzc0c3l3UUN4dXA0RjlEWkhMTmV3RnN2YWtXeHVLSGJCYkVUZDFjZ2dMRXdHcjV2YWF2VVpXWE5wRWNPUmM3cHVQb0JhTHlGb2FKK1dtQkREemtoNWt3bTRaNWZPcWlRYnRMMjdsc0FNNjNDbXpqZjhSUk4zaERnR2tMNGQxT0RmcGZsWG9BaHVWK1lZUTdWUy9CTDNEcVpsVEdUZ0dEVFNwMXVpK1I2Rk9pd1lzMW9Rb3pENzBmTVVwbmNxRmtLSDVrL0xoS2o0UDQ2M3Y2aHE3SWdxSVhHYXZsb3hLcGl1MHBUUVMvUTVtREllbVlNY1lQZGdIaUhuNlJiQVNUWnd6VGczQ2cvS2RydmpDUkJidGN1OG4zY1VERC9McDJwWW9jNjJrOFBwMUV2TmE0MXJseFhaZFdEZHdjeWpuWGh0Q2pITVRwWE1XZ29MeFo1SGxhTjdibkhEandPL2FzRXg1Ty9yWitQT0tzYXhsVHFYWXVlY1B1ZllvVjgzbmxveDhQSlBKUGRVWW9iR0ZrSzZwdmdubU0wV3RjUURJK01aRHFGVlBBUnJSaW5SdHh5dnQ3RllUM3Rhc2FMZWpLQUtOQ2hLalFNcjhWVGo0MUJSTm5uNEtHaElQYWx4b3c1T1UwMnZqU3dsQUhIelZsbEZabzJOWlF1U2JyS3Jzb3JNekpmdVpVWTRRc0JyblM3RFQyenRscHMxS3ExMmdMZm5pZkhMaXZqREZwQjJyZFE4OXgxZHFZd0tYRFhTOTFIVFg3M2lOWFpzQi96dlQyeHd1dTJEYzgxQW9UZ3NIK0QreHhsdjRwUmJUWHRYSmNDUC9UeGl2N3dZdHZxeUM1L3pkVDlrNndsUmhKTnVyL3hTd3NQOEprU29sOXlkTmlKUnA4T2IxU0U1TFFXQXBVMVd6TlA2ZFNOV0ErUytPTWxRbjJPOTZvdU84M3pqeFIrUmgwSkZOQU1ReDg2cis2SWNOZHI5YlJ4eDRHSzFGR1kxMlF0QVM5aVZCSDZ2R3lFaVorc2pIbmpTNXZ2ZlZ3b3NYbjlvSy9mVHh2Ny9UL3pYZHdKcGxhMHRraUJlV25pWXUwQ2FIL3R4dUhlbFMvQVUxNlVxRWZDaklLb21SY1c4UjNxUGVnNGdmanI0YVNUZEh4RDhxdnJmc2pvNmhOWWpkdFpYczlSRHBvQ0FzV1c0Y0M3U0FRYlZwcyt1cHd2dXVHRXZ0MWhxbWg4dFpLeGhQZ0dyZktDQi9oRm9udDJsYlBaRTEwR2s4T09BS0gyNTBNZ2tNbjdPWktNTjdsS3dtMm50Q24xSjZUZGpDOVdmNzVCK3ExbHBoRGMxbnQ2MzBTU2VRZlMzci9VVndVdXZ5S1JDSVVnMzgyYmErZXZNUjlUVDF2MTY0blRCUTVoUENrKy9YWGVURzVQNWVUM2QwSUxOcEw3MEw2S1Z5VDFqOGFGelBZV1JNVHJqN1lkcGhoaG15TTJNL1lFTHJuc1E0ZVJVMDdGRm9PcHc4UVF0T2RaeHp3K0FMdjI3cWgrek1mTEF4WnJkQ1pvemprRU5pL3NDTGpMOURJQnRxWHBWTUNuejgzc0Frb0Y5c21VSUFVanNSRkpSSWk3T3BmM0NBV0pHUmpqaHRpWGt0N3czbFRnTXlFWk8xUU4wTlRJd2d3NTQwQjZPRHQ1eW5kN2tUdHh0NFFDWERLQlY0Q2VvQllhL0ZKOVR6M09BY3FIUkc5M1Jnb0ZKSTlyZVlYcmN1RnoxVDB4VktGZGF1Ynl6L2JFUnpBblY5cE5TYU1mblNKdVFJMFcyVU5RYW44RWpsS2ZNUVFNUU44K3RqOVFrWVFxR0tSVDY2VncvVjRZNzBOTzMyeCtNR1FuRmdOdkl0aFlzdFVIclhNaGp6NmU0ZnVuNEoxYnQvT2ltRmlnTldvNG5DNTUzQ21Ca1FnVUcwVW5lQWRKRGtaL1Y0RzJzZisvWjV0Wmh0SXRmMHZySFBweEZyNjgzUHVEWDNUTXJxbzBQbW1BcVliaDc5dTRKa2YwM0ZHMEtIb090UjlNT2JLaHpSN3d4RTFGaHp4Szg4SHlVM25LVjdyUmdRN2hWcmNreUo0VlJ3MzUzU21iQm9YZmFacUpUcWtCRE5wRlQ2Nmsvcm1CTjdhWU9mYjNmSlpoQVUyQlFuY1NuQVFlQUdqNWhPUk5ZYUxhdS9PTGFVaU56Y0FxUFZteFFtWTNDWm51Q3AzanovRVFMNVVDQ0Y2WXY2VUpNM0p0TEh0bHUwaXptVHNwOS9WcXY3RVd6enhEemk0d2lrQTJEM2kzb2hJRUxkN05IR2JGT2VBdXpjTmQxZElQeWR6bkd1TExJS3hmWXNHb3NZL3lPWE41empPcWNLMUFpRzFJcEVXUDhWL0pGdlBITEtaUmJsYjlncU5HNmtFemFlYTBpQUROYlpvcm1CMzNwUHB1MjRzRjloWXFHejIxRktiNHVFZVNaM3p6YnB6T1BWYlNIeWlQWWdnNGNaNFltdFZ5TG1CNkFiaEZLSUxXaVFhRWJuSW9nR2dUTENxRkJ0bUh1Qk5qTDdoZUxkWlN4QS96UjdhOFF0NlhRV0tpeXFSSjlVRitZakdITytxdW4zN0hsRHlVRlpSclpyT2lOdkdCZ2dqbk56UlBGOTJRbHlJeWxTQmVWM21TYjR1TmpES0lkUVVHMzBaYUdMNW96UjlteUxOTGREZGJCMUJJRFp6TEs4Q1NpTWJQWGo0MnMwMmhBQmY2bGE4TjNaQnFMblRuckJkYldoUjlFNUZmcitXOFZKTWhHSDdDbWhHS0ttSzJjMDJLVG0zeVVqZDFFbnRLNXYzb3Q5bk1DTmFzTTRhSHF4ZFYycmR6Uy9QZmhQL1lSOTVUL1Bvb3psYS9yUTZRYXAyOFgvRGluSFYvSmZTbENpNDl5NXlYUHd3T2JiZGpjdk5sRVAwYzlWNmZoTjczUVZhcU5kZnBod3ZoM0lvSHNWVlZaSmNGNFFyWmxyZGNYRUJ3dDFzVzdsMloyZCtSZXRTNkR6cnN6ekdya2dwMStXZi9jcW5TOGx1aExHeDgxWVd0VW1adkVTdlRRSS9JalVRWjVMaHowUGV4RTVpcXFEdE12MGtGQU93WXBMSkdQWFFVY3hZNGx0L2JZRWltamxPNFg3TGxhSG1ucUhzNDJjZUNPVTVETlNFOWMwTzZLZ1FEREFRZFV6T056L2VPcVkzTmw4M1VlcXZtM0Mva2Y2TzVSNklCVmZxOTRNYXkwUm5MemVIQWcycXhkbGxOdmgrdUhybC9ZK09XWEpmL1pMR0FHaTZ2WnRvVGhoR3VIS1JOMDhuQ1JZTE8rblJMTHN2a3pmalBMWjlOdXAxUjQyUVhVNmxlTkJ0YnNHcFh1YlgveUc3VVNvbk1DY2hISmtFRUpGZ0YzcEJscitDdHM5WVdCVGtmZlBpRWJ5bHNhRkVxNVdlSXVzVForc0VnNVIrN09ocTBQcTdpZnIyVjUvNTZ2RndoVlVHZzFMYkRENngrOVcyY0haSWV6TTZ3R2NXN0EwcUhtcDJoeWVQRjFodXUzWDBBczltZjhTd2VhbkhSRTFSeFZONy9TNVFoVVQ5a09DelR3VHRpelRNRVhRaXZNZ3VEdHErMGhnWnlrY2Jmb0l3RWR0SlpoWTM3YVdIeldVS2piaVdldjA4cDZaaXBxZjBweWhSMHJTM2R5SWY0dU9vQXlMV0NrK0x1WW8wNjFNU1QxODc0MnB0UG1WTFJKQndpbUoxclNvN0MzSXptL3hYcDFDQjRpaFV2OERudE5GM3FNUDZpK05mRXQrRzFDQUg4U29oTk5XREpJVmZBWEsrY3dBM0dHb01IbUFMM05obk1pV2JWZ00zeDgvMGYySTlhS2lpVkxWZnBvS2IreGczMnRubUhZTFZ2V2NFckZIM2tYc2dKdEtVTVBlSlFXRjdEclVHdTZNSEJNY3hqR2R5dE51aXpDMmpzWXlaS0ZaTXQ1MXdiSEIrVm4ycytNRHE4VnJaNWd0YXpGbHI3WDFheGhrYjlJQmwzVFRjV1NNSnNVdXpzZFU1Y1lxYXRFdklESm9IWTNnOU4zR2VmQnVka0JqazRIblNiV2ZjeGNPVUFySUpLaEI5TFIreEF4RGRBR21nanhtMWYyRUlGb1pyNURMcDNZL3kwN1lkTk9YK2dZcnZTc0JNTThqVTlndWJwNnB6eFdGbXR3UXUzZlJEU2RNMFpTTW1DL2dQMnhtUGFyVkxQWlFHeEpObTJaQVRWZ3VoNjdVbkN4RlJjUmVWN21OY2s4cXFpblBERUVyYUVydHZXem1rRktyNTB1MnduYkdld2xsd2hWVjk0Zm9xWDh6S3M1b0dlN1dEaERGYXdibnF0RGRzQ2JUaTduTWZVUUNNenM3RWFoZ1p2TTBQdnZZYUxMeFN2NTZXYkllNnJHdWhaZk91ZHhXdlVvL1FUWDJraCtXUFY0MmxHQ0lJY1JpK2VLQlgyQjU5d05GRHFOVWtYVmlSeEpoVmNXMkJlanBuV09ZRTl1RlpHQm45ektDN2V1b2lUMml4aHZDYjlCYmdraGZWV1VZdHpOeC9ISktpVW5aWFFsek5SY0VYUGVJQWdyT0JBaWNwcDcrMmRGUUdYSzliQ1VLenNlZGFKQmlMaWVPWU5RMndBSWZPTVRxYWZnaWc2U3pYVWF1M0pETmFxMVdDY2IyTkdRekNoVnlFWUlRbVp5cE53RzhGWVlURTBscWY0MTQ4NStOQ1A5MFdzaFM3dGtreTFWRXlNY1pDeVRybmhBeHVaR0dVY2ZHejIzbis3Vm5BczNPdzRVcDUrNDhkclNIL1c2Z2xDMzBiRXlndEl1S3daRjkrNFJvZUZ0elZTdTdpRjFPOEpsSVhJRlBPY25sSkU1bnp5TjJYK3FIdld2SzV3OFljcERVRUVOMnNUWTlTQXdxei9OcHdUWndBRUEzMTdOdEkzZlZ2TjF1NCtaNzNBc0VDTTlER1ZDTkN1UWdEVjdDc01DbXg1YmNlZHJhYmV2bzhnVENkdjV0STVuZm9YRTBYYkh3MzJPZ0tpLzQwSWs5OUZkVEpySzVPQS9SN1ZFYXBic25MR2hNODUzZHJIUEx2RlFCdVhZTjlOY0o0NE9lSm91ZmpsaDNpQnZlckdzVEhDb3ZIWnVRK0k5SXN1M1lMZFhnMHRjaVRJZzRoZ1Y3QXZkOXAyQVBSSWlhUldpTzlCUnY1Ujd5LzBNL0QreTg3TytjZkJXdTN3OVpsYzI1YTZmY3lyVEl1R2VjU28wN21uT3VsazVYYThucjlCVndlWWR5TmlwMzB5c3pWZ0V5RFdOSHRqOW8vU1p5Ti8xMU5NemJaVlZ6NUF6bktMcnJhcmgxZVI0bG9YcjFZSndwZGtvek1qdFdQUHZFZ3hvTXVRbnBVQjFkeWwrQ2cwc3lsV3g0V1pYN244N3dEMFB3cDhWclNJZXhwQ1g5OGl6Tlp0U2lKU1l1dGF4ZDg0RVB6WHNSWG1TZTVhbzd6MU9FaWJMRWkzT1phRmtMMGFjN2hYa0w2MGJDZTNmVG9ZN2RBVlJzOGFHa1ZlTFQycGxWcnVIcnBxK2lqZTViVzRFZWl2NXFBNzd4aFVKcXEwWnV3S0V0a016RnkwS2dLVzBNTll0bURWMG91aEw1R1YrVEtoSXlLRGVpZXhMUE81bmhocmExcHc1TnhPazl5ZUVPVnByTDU1bVhYZWhSKzdzQTBzM0dWcTdFdS8xTHZhWUx6bS9kT2VMWUhkYUNrRVJ3enFtUU9abnNYSGkxaEN5a3R5YjlGSktDS0tFT29mOENFaVB1dGIxbWVtRTlPYTRjZ1JHeG5BdWZRNGxCSmY0N09yNmdFci9aL2lCa0RDdlBRSFRLak1ta2RGeFJjSDRrRk5BVFhXTFV6amVjM21VbkhCQk10QjNaVWdEd1ZvQ3ZiRkFMMmdDbUhvUFNmUlNkdFQyQnh3Rk5JbnRJTFFVeEc3T05Ga1Azc2RxWXV1RGM5TndZWDNaZ01wMHp2TGpHa2srS1FtN2hlbDcrb3h6cHdXVDEycUdwQzFPWXZMN3Aza0x5TnU1ZXdSM0NpR2dYMThCbEE2Z3hET0RySEh5L3ZrL2YxdWtvZ3BseVNsMnJkWVpwQWwvRHUvV1FROXM5Q09WRGRRS1BPUUNDUkdnVVp6YkRUUGFNYkJoeExwTDZQNlZ6cDd0WTg1K3N0dDJ6YmFRdVdETTE1K1hTaHdlOFgrNnlNcW9SUVNhZnJFMVBrb2dtTm1la0oyUURpMGVyZThsWUFoNUVmZGNucU5WQXprVTF6enRHclFrS2MxdFFlR2tBeGNobDJ0aTlUUHVMUzFzdWVzSlpieUNFdWRrb1JXU3FRaWg2TVdtY0ZEa21TWUlBU0RIU2JIUHV0MS9mcWJSL2FFUFFENFhJbkI1WTcvQm0zbHFnUGo1Yko0Kzk0L1krbWc4TUVxZGJ4d1hUUmNEUkdTS1NSTWNRTk1YOU9Bd2VKUXlZTlFmcnVSbWhyazB4V0JyREZqeFhsMVlxeUtxc3I2dVBlVm1pWVVPNnIyU0lrbFd6MU56ZlpvV3F0OTY3akNqeDQrckhpUjNBREF5eVErUzRHemJZRmxFREpqa0xMUHhvajdSSTZLZUx4ejlwSytlM2Fla1pFcHlsQkYrZExJb3N2TEhyODl5bCtJelRBeWhiOHFEK1dCakJTNTlJVEtLbTBta3JoKy9OU0Q1WHB3MU1uNDc5UFpKdklVNEd6RW5YVEtBZDVPSEp0UEpMTWtUVk84S1lyL3VDZENpZkJMSFRMUjNPY0FVTVNiSWN3TzlPajJBenJTeDQ4M0pTeTVCQnYvR2JFYWZqYkRsbHlHaEhBWmFDbUYzZzl3cWUwSmU4dURybkVtb0NKY3ZVZS9pWDN6THlzNG83RnpkaHZoQ3FiSUVsV0RWeG5RTzRZd0R2b2ErLzJISFFTYWVrZFJlRWdQMjZNZEI0dlIrLzhmTVhrT3d6ZDE1ZnBsbDVPYlVVWVNsNlo2VE84aDhjanZzd0c1N1dZUmVDdklZMTNTVXlvdWwvV05WNXdLM1U2WjVLemYzZmw0S010WmE5UzdzRkxyZDBEa3NCM1RqWDlvdDB3RnIxRUNvMHpWS2JDWWVLaVFNSWhEOVdtWnRGMnJzSzFrdnNpWGJSeTl1Z25JUkJJbnViR2VFayt6RnpBQVhRZXpIZlZ6NWpFUWt6bXgvSjlCYmpLbG8xZlYyZlBzYlJ5aDdEaTcxT2dWWnhjaDBreXRIa1BHanhyQXJlNUsyOUEvUHd2Qjg4OENPNWRUMGlSbFR1eDZwVjNjYkt6K0FMVjFIRkoxbU13dGZkRE53dC9ZQlY1K2QyejBwVXZGOWR6eHN5RTRRdkoyWFFVU3hDYXd1bTRRY2tZTEFCVXVUbEZkYmNtTkI4VkwxUVdCQmhKK3RjSjkvUDNQblR2YkpsdTdjSjJaR0JiK3BQcjY3SnFDdFppazFpWG9DSWw5UFVSamNFWmcyNXNyYlVoWjFnMGt3aEhRMFhvWlVnZ1ltcGVkWHFwNXc3bjIvRDg5UGFQeGZoK2RaTWhhTUFsdDFMUTRtZmM3SDZGcndzTHV2U2pqMUc1T28zZGJ2MDI2MUo5ak5YL2pUTHk3KzA4ZXpYYVQxRWtxZXBXdzllb1dtL1dIQ2U5bE5mT3F3SkowM2dOT0tXK0pxVG9KeHJHT2N1Ums0S3NPTHdVRnBkRFNWVDF2NXU0REY3dWNQeDRacWtlZ0N2eFExYmk0TUV4V1hMZ0xNbE53R2VBNkJMc216OFV4TmNQZEZrVlE5SFpRUW9Bc3pORXlGZGtkL2pGcUJtc2NNU05mR0N4aStlVmhnUVVFRWlXRjEvVS9FV1F2ak9yMHlSK1pmOXVKU1d0M0RnZ1pRNjlMU1V0U0d0NXR2Ky9LcjFVbytYQVptN2c4c2I0bFRCU1JXVnFlc3ZKQmgyZjhhVE9rWC9OU3JPUU12ODkzWjUweEZpeXUzbFB6WWp0NmlCc1JoNlRJdWJBN0ZiOC9CMXBDWURDMm1FSWFlUlF0c3ZuTzUrUVBGVkVDWW10MXhjbUVxV2V5SDVUT0VjRWhhc3JwVlByUmRJaGx1bWRnNUlPM2NZcVhjdjBKRk9SZzVkUGdqTmRmZCt3UEQybjJLNGFWMVFPQ3BDRW9SeWtlMUZsNGkvaCtoeGw3MjNwaHdWZDU5N2xFeW9haW5ORnNsOEZncGlxNlRiN3NTME9PWmc3c1FRVkRIUHRpOUZkeno4R241T2p2eEZWMy9TdmFOVEF6aFJuN1hZQnhNT0NtZXNoNk5QTWs4WU9NcUhiVENtRnFXV0tJOTlFc1NwRjhrdTBMNEw1TkczTDJFcGhVRVo4SW1idW1VZ1p2YlFHOW03WFpWZC96MTFxUDNWbFM4ZDIxcG5QMzBrMnNSa3cvbktNTnFaMG15OVRFZXFYRTVWQ1dwSnl3SWgyR21wNWUyOEY4bmowVVNaSkFrZEpFRFpiWHNXditBWDMzY1hYRkNFVXVZWlJyMU14TVNKaTM2czJSeXoxc3VuVW9PN3BJbml4UHJaMHB6NjVzVlc4R0hNOG41b0tHZDBIdVR1MnY4UVo1d3F1b25ibWRIMmYwLzQ3Mno3aVF1MXJubmxGbXZzTDZidnB3Nk5KS3RiYzRPNGx4QWJ6ZlBKR20rQ0VNT1NxQW0ybXBaYm1QNGEva09nTlUxNTEzdENzK0hvODVEUnNmcWtnMUpRcFJuZnpYRXNSNENGVTZ0K1pvWithMnEwek5tbWhxNmpQWjRqTFV3Z0ZHM1B2eWhjVEh1aU1HanFGdE9yM0c2bVQzV2ZPTk5vL3JYYmlBZEc5M3UyVWxqNTR2ZFZKb0NmbC9zRWhSYWJRR0xRUDdLNlBzOFpmZzlpSlVFY1hYMDNVZ3crMllBMnFnUXNOWTJVUHNGZE0rY3ZEQnF3MFY0emJrdDBJVDhuMDA3anRtb01KODY4bjE1ZzBMVG01eEErQzVkendmNU1rTVVRRzRoRlZ4alN4bkYrdzUwK0lVMHZKaTZ5blFVNWxmcmJMYWJHNHFGaGV2Nm1Ma1ZOL24vbUhDdmhRNkJJZmF6TUVDMjJsUFNYWEU3d0FqdHZua3BUeUlDeWNSK3ZZUk83RUJrM29NY2pxaGZrRlJKOWdYRjRrZFpiaUFzSVFLcEdWUzBaRmszY0oyWXJkcnVEODFVbzBjS05nZTYrRHc5MmZsWVlsVzF0bnlTNVc4ancyZjRPQVdyYi92SUNZbTEyc2JIWk9HQ1dJZzIwUXo3dWRiWVhNeDNzbGlBanl6Mk1HSG5uNTRxa3lUdG1iZzZOU3RNek5Dd3RFL2E4c2FTemFtRlJDN1lGMHBsYm5ISkdvcm16NGdybGVTOHJxTmhSdEc5bWtJdnN5Tis4ZlJOcjVVVExXOXhLZDU0MDdqbjBZR2VmdFlneTZFR1FnclJPcWdHUTJwWGFKTmtQWGFPajlGQzM2cEt3Ujh0eUJBRjZXMC8vYW5BdU9UYzZ2YmxVdHJpMlR4VXpYY0k5RDZmRHd3eG9EdG5nV01lSklDNDhxMGFRQUp6RTBQeW8rM044cWRXM3JpZHJDUm05K3lPcHd5S29BTFlsWERWeTRkTXZSTHhDeFJrb3A1R2RwNE9mV2Fvai9wRkR1b05DT3M3MWpYWm4xcEFLWXJaeDRsM05aeGczOEdrYkdaUHJ0RXl4RUo3ckpYNGtNOS9PbU1SazRGY2dLNnlOdTliYkh5WjRsMHE3MkVQbWNVeXc1Zm00OFdPanVMWCtmdTFJeDBkYWEveVRmYnRpMFJ5NmdSQk1EVzhNMEpRcHJLSDBTejhBYXk5VHlWZXVZUlk4b2VSbDZHeVVjNW9ZU0ZYSm4vcGtoS2h2aDY1cUpCcGFSd09RUjhxeXJlZEF5MW1YZDZXd21NcmVpcnF4RGdTR3RLMm1uLzZpRDFJdm11NXlkZXRudSsyb1UvemlFc1psSUxETzlTTisyb0NaZEJJSlJVOEZNUURqWThkN3U5N2dtUjlQRnFoMklkZ1BxSEJSVWRNNGtrdmNYNWFJU2p0RjBIVkNxU1U5QWt4SWFHWG9FVVFLYktGUUxXV3A3aG05aEp4cmxDLzRpanhiQ2FjMFJDaW5kL3IvU09oWHIrK29RazduNGNsRUFTQlpES2RWdFhCZ2lxUlBWTFVCYU9wdk5OWVBBRDl2bUw4NEZCblFHYzRsdURWU2NBVElPOFgwaEdwNGo1SGJFbDhJUlAyZUpFdU5hcXltSDgvWHJjaG40QmRIY05pUE8xVkhqcUh2QWVScDV2ODFtM3RoK1JaalBDTWhWSFV0TUd6NCtGNjNnck1LRmkraktxckhDQjlIeGFUZ0p6TVdUbG5hbHdNbW9KaWoxVHVCNllDZzBEMU9RcisyVEc0aGdocHowTnhNUFkvaEJ4YnBMVXNKbS9wOVFSUlIySXRTTTU0QlZwZUhPK1JhL0NKSFdSRE9zYmYzRnJvcjVOM282T0ZUdnpFS25QeEwwYkdzMUp0Z0tORVExbCtweWdOUlZXYW5EZG5qOU1yQ1VZK2UveXIrVnhBeUFtV2tpN212RThYMjVCdFNyZGowVzc5WmNVYW10RnVIdTlZVnpqUlN0S3ZwZ244Si9kYy9rRDAxVCtiZW9xYi9kYlBJY1dsVDcwTmlXby9ZczV3RnFwcy8xd3F5UEpWV0thZ2t5aGFYVEdTWk1EYzdmSWJORnU4L1B5MG4xNk1oNlBvQ2F4T0M2VEFlL0dkZjdCZmpHNmdEYmk1WFBsLzd3dkRWRDhEZ0VUUWYycDZ6WVRPYVEva2JuQjdYWWFuV0dhVmxJRFUydXJqSzRTODFzYkl2ZmorQXl4ZUt0VHF5WDh4MzZYODVBTHNhTkFrVVVyNWxBVTJMS1FyeTlJRW5aUHBMUENEOG44aWJaaU1KTXBsYno2UmJETW9mZTZSWHMyaVdzMWI1ZzlrVEFKeVdHMXFuNUtlaUo5UzhYYUIwenk2bmk2bC9paHZtUmpLT2k2Q3ZZcEYwODJPemlkOU9LbzlMSWpxeUpXcnBaeTlQajBQMEl2NldleklWYkZoVjVMNkdXQ0s1R3FLNWF1MTB6Sm1RbG01QmxMd1lJSXBFaFNMV1crWkIrK2dldHNqb2FONEJoTUcySEdZUVpJL2MwaFROakM2bS9YYjQ0SWR5YVNJNjQ5b2d2MTMwdk50Uml3Wjg5dTJqWkZVckpRMnF2UTRTNVpMZTNHNnJadmJaMWkzdE56WG01V3JsUXJTaE5MamdqTVpoVkV2WFhNdGdwcXdCS3ZUUXU5cWRqNTB1SzBOWVMrVDZScEJqUVVxZ011R1poeWloYUt0R0lacmZCRmNRVm55alF4UU15Q3A2aDRmbU1wUTZNenlHcTB5UzZMWm1SeVc5R0Z6N1dqNjA1KzlwS3JjSitNUzhqemZiUVI1bmFoaGJETnB3RWcxMFVKblVtck1vR09ENHV6dDJIL0hlNFZ3S0FwclRDcndsT0JtdmhuWm8wcW92dW5OekVBRjJvdnprajBHVGxRSGJqQ2xlai96b3NsKzQ3QmlsdlFjZUlCZUg3K3RHbnpERXpIWndZUkNvMGJvcFZpR2wxU3orY2JldHJNZWRyQTBuZWdSU01xaUJOZ2wxL2NTM0FHMkVUK3VaeVZhWnVMNmFzZW5SdnhIeVVPcUoxZVZ6L0ZvRUZwaDhMWjYyVHhRS2l3S1pFbnJsSUNPUHJWbkplK0pxNklYUjczQXFEWUtWQ2VSVTk4STNiYW5lR0FQRnpMU0JvK0RiYUpsWjA5K0p1SGlHUnFWaE91K2FMLzk5Y2Ewa3NmMTdNcU8xYjA3TEFoTnVKZ1dPbGhYYlpXeUY5Ris5bC9WdDRMNVBxWC9uNi9ZWHovZEgvVnYzZ2gzNzB2MWFUa3lsRkhOajdRYTFtTDFUN3NRSGlsQk5mTldBbm54TUVFaE5yU2pCSDdHSlE5U1JVWmRUZHhHaFJPaVFxeXUrMVR4eXVQTlRPY0IvNWpnMUoyMnQzQkNnbHBPbXgrQkhZSkpuZnpBYjl5dXgyTEZaTlI1b0xEa0NTWGgrWFVweUZITE5rZHYxK09Ta1RwQWxYUk1FamhIOUo4N25ZeTVMT2h3YjI4UWhhSGJ5Qjd0ZEZ6UmFFSnFNU2RyRzdSQVlhNHBBdjgrYS9iMmlrajVxMzM3d2tmYkJ2bXhNd0NITWpnZGRGV2FzdURmbSt6WGpOTFFEczZJRlIrV3dHcDRZS1BqaGc0NHR6SDJLVVhTTTYvZkIrYllCS0VlWS8zR3FnTkRPOTFVV0M5bE55OXBaMjZhL29tdkpCT3p0Z0NLRVhBdWRUc0x6c3AzbWJnWTdyVVNFZ1FUaEZuNkxlbFZUYWlEU0IvTjR5V0xlYmR0V0xOem9TM1hiZHB6QjZDdHIrcHdES09kVVkrOFZ4U0M5ZVJYUHo0d0NyVndHYWZHcmswUVI2T1NjZGp1aDhqNkNGT1RpS05Pbkx6cU94TmIrWW55VHVITEJyZGJMRlU5a1lTZmJwYXFScElRL1pGcDVLZlpVM0xPME9qQ0UyNjZZZkZKL1JYQzJaZ1ZBbWIvUjUrSDFlK3NxRlRNWi8wU1QxSkZzbmg1Q2ZGekVxcFlzN3VKNzdBcTlmU2Fma3lFcVdaQlhCTWt2Tnoza1N1SWhIZ1ZkSXN4YmJ2d1V0L29KaXVrbzE1b1BIenZSNGNTVVQxcS9KZXNHcFVoK09wRlpPN01JV3l4NmJUY0pBQkthbVBaYzFpdWJueUZoa2Q4YTRVM25vWUIvWWsrY2EzVEwxcGV1VUxyNUpMZ2hocUE3d2xxWEMvUnpjUlFFeFExeHJBYmFnQUVLR3Uwa1N6cHVjeWsybitISWRGVXZCMGlVczhNS3U5OGdlYmdBbXZmT29aWTVPUEJuQjNzc2RaMlB4OS80dWs5SXlCRDdPWmNKRG1RR28vT043c3hCQVFhWUZGN2FpNkQ3SWRwOExZdjUwNWNGeDNybHc3ckhOSVN0ZDBPMitGR3NDNWkwMkIwb3B3RFp6SWJ1ankxVGRHbTBxaVcySm44bkd5ak9rWHo1bzFWeGUrelFEVVZpVVhGYk9WcjJ4cGEvUlE2MERVbXhsa1dzNFpTeFlZSHJVNWVERW80Q1R2dHBqdTQ2Yi9YRFIxd0syUWI1VVQ3UnhSQmdnbWdlczFGQTZPUmlacTBhYmVqVkZjRWhLNytnNThjRDR3RVE3Qk9rZCt6bW1qZktNZllzaGE4L2xnWlBTTUZFOGZTdGlES1poeGVxU3o3a0R5Yk9PNlNrWTRSTmRITnkzMnZPajFjNWhQUzNrS0VWa29lLzJHTGJicHY1Q1Z3RjV6dUF1N0NKSnhvM3RHa0FFR1VHb01zQ3FYUFFMZVRZNlJPS0RKWERlWkxzZGVlamFHSXNxV1NhSFBKVmJubkJPc3JCNGdyMmJiY2ZRKzNzdkNzUGY3R1JseGs0ajVSMmhGQ1k1T090a0t0MzhiS2htSmRpRGhoeUZYWTlsSkVFbWIvZnhLbm9BUHlvTFIwU1U0RjFaWnJDWmZMdnFBMzhoeVFZRUZVdXNSMFFidFh0N3hqcWVFMzROb3I4V1FicFh2MkhmNUdHOHRQSG9kQUZxbEpxb2hmaUhGME5nKzFVWEhiTXRvVGVJc2NGc0dXY0lxbXNGSTRYMjVkWWJMSThxTFFQeGM0Tm94NGhvWDZoYTE0K0o5TkxJcDIwdlBETVM0US9kbzYwZWpEWitXUGluSG9RenorU0ROYzFHV1ZHMzU4VXZXRWlpdnFqc0NSV20xaFc3OVVZbDFqODY4SWtlMGx6VmJyTTk5QTlzUVBUNURxb3VONGwycTRYNDJ1U1pqYjIzNFZNbzFSdHE0TjYrQVMvTVU3cUxQTmlLMEtBcHVlNlBVSG9SN3pwcHZDZ0tyMk44Ym9qNEZjR2htZ1UvR1JVdWducE0zazMvazdXUE9yWHNJQlhxaEt6VFBLcHhZUER1citXcEtLc255VERCUUxjcW8yZHdETE9QUHY2SmpiVk1EcjNlbE5JL3NHUE5ONzZGMWorc3lia1lDdnU1UGl2Y05UaXFVdndMUHpYMlZYUzFjWVpHZFErSnBiNDlPYW96cUUySTZqMC8wbUFNMlppQ1B5VS94U0tQS1NkbUdsaXpuMnNnLzdmVlRoQ3huK251ZDQvNzRmZHpyaUFENVBmMk83MkRqV2Z2R3dNdEIzT0dNVGJ6K01QUE83UXRTaFFCeENZeHIrcGI5eFRMWUZCWEI0SDFrbDZKWFRjUG4zbUx5U0laMDBqdUw4V1JIT3JSUnFIcHAvaVUrOWZYUTB4K1BJaWxsbnEyZm9USDd4bUJmVGk4cEF0Nm9NbkE2dmRIcytkZ3pySU9JVG1ReXVjWDh5V0taVXk2a05wVXZxaEdmRE9sUUZGRkZaWEtwMjlGY2tPN01LVHE0YW9ZY3hLN1FlaVlBc2hNeDlncElaZlRHbDdOOCs5eGVOcDNjUmptdVdxSWV4cVJuNU1Ta01Xb2VLdHByaFRSdktidlMxZXVUejB6NVdLOElwUzc5Wm9MeklNcE5GZ25QMFd0ZVhpVC9KT0FJRHpNSEVEWFBQTnBBZUxPL2Z5YzIvaEJNMDh1d1k2T1BQZlZ5RExUOFVDT2hBekZuTkZqUERJejBUbkpGQVQ5WTN0Nkl6U1RyUFFaU0R4bDlKb3VLMk5FN2dsWmNQTjNETER2bnVNUm5tZjM0YTQvV3B4eXJxREJlenNoUkNxbTdFd0F2dTgwd2p0VFlLU3RjUFRJRUNKZDJqdHlIeVZvVzdNR2JURFJZUUZkM1dFbHN4N084WkJTd3FZTTgrazdNRXNWcHFleUcvOWRDUFZmUTdqdFdjR0NVK1ZhYkU5bXVlOVRsWldGelhaNGZ0dnk0enBMOHVISHh6Uy8wVkgrQlUyMUVCTDB0alRvLzljNzdLWVNlRUxiWWdoM0Q4bjdaUFFWY25PS0lIUmdIVllGV05HRjdNdURJR29YM3ZkMXhmRkVCVGR6L1FlRlFvTllvcnZqeHdVdFEwZWx5ZEZuYjdRQjRxLzdIbDVSKzJOL0VRNGttai9NeEVQTWpNNm1jRWtkWjNQUVlGYnNwb2FSVzdNY2ZUcFYwUnBwN3h5WHluZSs3Z1o4TC9GSFZEK1h3T0ZZTk1yMUp6QzlTc1hGTDRrYjRqYlROM3V5YnlkdlRQRG5aRnpVcTV3bEZZUmkvSHF2TDY1a2kxVVBGWSt6OElTTlNJelUzMktBdGxKOTliRExZVVdxaTZ5ejdiUjN4RGRZTVp0eXFiSkE3cHQyRmFjencvZWtFdHZRNXJYdHNuSUR5a0tsZmtPSWQzNVlrbndLampwWWs4N2xIelZGOGNiTUs0Z2EzWnY0bDExbFNRN083WVV1SGhqSHkwVXM3eGlUUXZkdkZrM21LQjNYSGJtckdKVERJT214OElVcDVNWGlkRjdaZ3l4SlFhay9jSWlObU5rdGlCQS94aGp2WkJTeno3bGtSZWsxU0NLVmVvMnFFR1orSUkraFZLdkpLeld0UllldTF2b0RFMUNJTHFPb3hURStpblVLNHFUVUMyZkZobnBVOEx1Wk9FSGpmS09mUjRuaDBTMHFYSEdtTlh0SXBadVRENTRZYy9zOWdSU3duNHlpbDc4YWhUWFRqQlZsalVPV1NxeERCdXFZN01VUkNpT2sxWDY4NGVwdTUrS0xvc3o3VHdhY2V3OHUrWHFudEVaZjdtZDVIN2ZhdlpBUkN2VGlvWWVBL1M5dnNtc3kyZkdrTnRrUmJtT2ZoVTM2WWxnaW9ZTTEvVVczNkswUGJteU0xNVlxYnRCSjdaSm5iN3EvazZjWWhDUGM4Q2tVbktMT2pSelJOUFZqQUFhQmxEL0VyanlBSVB3ZnJHem1DSnV5cWRSak5zRk9zSGtOT0lQMit2dEpZTFVsc0c4LzBhSkVpSk01NXZPQUM2RXpaUmVYK3lMVkF0YnFNRlo3WlU1VENRamdkcXVVUlhKYXpBTm1xbXdoNnZCQklmbUtKOU5lbDVzdWd6WnlsKzBWT0FEKzJOczR0NUovRFVzOGcxcHBRazdEZ1BrOUJicngzZzBDeW9tT3NjSDRhWDFtNmIxZzk4aWIySWFlZUtwS2lvUkpnNkg1MTFRamFmQWlOc1hIUlVPU0JOMkcvbEtxTlVkOE1NSGowakR1NUlTUjVNaGZhUEdQUllVVGcrZkFTb21VcHNzcU9SSlVpUUh1ODM1V1kxdHRKWnl3aCtEU2szdmd6cE9YQkp1NDZsU1dJUW9pU0EycVFDL3UwamxyTGtlV1Jsa1BxVXJrZjdxdGNHZU92TTVwNVRQNGh6ZDB2eTdOYzZWUFJ4OTd2VURzUnl4L3UvL2EwVDJCZ0RRTC9VS3dkdnJ6VzJjZEUxR3Z1QW56S3piSW0vSVlrRStmM2ZOMGpvM21idTZ3anVRVSs1a0U2ajJlTFhTd3pJNUR6cjAwY0JVTjRaQjFRZTh0S2x1SWl0MHlXRy9zeVA5WUxRSHd3TUxuUUdoUUJPNEwwV0QxcGtNUHVtNG5WYld5WmdBcXRJQ0NzclVxT2hwQThaOFh6QS9xU0hWWHZVSXlXNlFyV0hRSWFxUHhUTEhZL1o4WG45VUhvQ1JpSW1DUWVZUVRPUmljT2JjM1ZiVWRsRWJENjdjbENZUXJQZXJVZ3pSVVg3Zm1ORmNOY2w0aHMvaXpVUlA3aGNMZWhMWFd0N3FZT01KVWtFOFVZZVZaclRTSFFIL2NkTGc4SVR5YnUyVUpOZ2RRcTE5d21lSkpqRVdFSDV6NGhrTG41SGh6SWJIOXo0Zjl6NmVrMGxBb05WZ2svc3RjaHJFOHlXcmR6V0ZTczloUmRLcXIwZnFvN1hZVEVJTzZpb2R2YThPTk4rbFp0T1dUazVkaGZ4VTNiVVVqdHdTQmxjbFpPckRIYlZkcERxZGFvb21zdDdMcVFDM1lpR3ByVjhLeU5hM3hwNUl0SG0vakhGby9oekdGSjBwK2NWajRiSmZRdENEYko0dkQzcHdzSFFWcDZBZjRzUW5SVTk0cTI2TUdIb25TUDZIMXI5U0RuQW40dmtLS0JLRldPUGxkeWpVUHZRaDZqbndXNUFKSHdiZ0xZcHlEZ21WdmxUY3pCMVRrSHJyY2l4RkxDQ25PbHV6OXJiQkdaK0ZEWFdVVDNOcDVMRFRvUmlkNGI3bWFKOHE4eVNUdTdiOGQ5SXhDcWNZc3F6WlZLclFITFlMVEdJT2t5Q0lrcHU5Sm5HU2JmNDlnQjN0cHN3VUFEYzcyUXk1aGR3ejhsWXFtc1ZSWXRKcVduaTAyTjNHWm1Tc1hGbW5XR0twVkxabWtEcmRETG9MRjFTbGdLTVNGNnV1T2s0L1MxeURDWkRTc3R2NFpabnVjTklOSkxBdWJURlBaMCtzM3RtTUhhQnR6djdRU2lQQy9yU3JSR0N4eFNtMGQwNUcwTWpnbWcvWjVvam1CU0hUWFRUMC9hMGluWG1kN3B1cGV3a2NXWTJiS3NWQ1QzOXNVVi9INlBOaW1WUXJHdTMxSjU1bVpQbUZLa0N4TnIwbHdtYnlrTEI1UkhjTTh2U2F6VHJzRlVYcWw0WTEzc1NyWjlpdjBpL0FkcjlPanZzcVI1bVN0US9MREloTHpUc3UrS2RwSHlHOXRzN0VpeFFsb0RWSEwxa1JZWlNYeS84OU9tcis5MnFuYVVGMWQzQzM3dk8zbzZkMFExbHM0clRvRC95TXNEb3dKRFcrY01HUWpocEdNSE1KejVUNXZXU2c0VkNLWXIxUEZLRjZ6bVVCeVVIZXlyaEVWU3ZBSWs1NVFjalNadTVrZUk1R0ZEU3ZJd1lMcy8zcGgzZzh2bVVJbHlXT0ZDb0p2bTRwalE3OUxrUmh3VDNMUnJqWGtkQ0NvWjltYldqb2psZ1cxd2I4eTMzUnMvMG4zN1hacUhnS2o4cHYvc0RQa3dRU2lTdnNCUzdzYjJIL1V4NFExVVZpZGtLRmxHNWpySVB6cDVmSXBBaVFWQ0RzZXo1NnhqeTNHdmNqYnpFMWZVaENiMFBsWnpncm82K3VvRWJGTkxpRmdCWkUxYkdsRG9rTmtOeXRKbVU3eklVbjQ2QzA5WGJ6bjZZRE02QVpvQWg3WHdUVVhyeHVHcUlZVlkyczVPUTFpSFVTbE91UUw2V210ZGZMdCtVL0c1ZVJ6bkprUGdoREpESi80QThaNkhrcDAvanZXY0xNc1k4bGNkM0NvYWNYRlBWVzdOZzdDdFV4YURlR0kwVmZFL1FGbzZLRVhuQ3YyOEJ6emJjYW56SnZxUWxWdlhwRGRyVC9WM0JCam9uRkpPTEtlSW8rTXNiWHFtd2x0WTMrSktEaGsycDZlUGs0Y0R2NEg5V2xWNk0vSnRtNVNwZkRMaUNlb3JmTjI5MVRQb2o5aXZiMUhmcUFFeUhBVXREcnhQVlhrRjdnMFdIazhZYUEyZmFOMkxmcksvd3VkQmJJbnVJYU1wbitudVF5UmVwcHNGNkV5dGJnZ2xnZW5SZ014OUpFaC9JelowM2dqVDJCSEVqeXgrREZlZEdoMC9Zams1TjVGUmdZdTRhTVFyS3FkN0ZLNm9hTlcrdEJTQkF3UUdUSml1dkNYNXNzUmt1ZzViZzdNenBnL3FXYTVVN3cyRTNzNWNYL0NBb3I5Z0Frdm0wNmxKSkVqQXFJellhVlRxNEx0a2FybFNvMitYdi9YL3ZueWZmVU1PRnM1RUxJb3JBS05lNDFsZjI5dkhKQ3NvR2Y1NUJqQUxHRTMyYVNuZWpNUHUyT2Rra0JhZUE3bWw2aWM2Z1ZRaEdJbW8yKzBZSGdxSzAyQXhjSmNVS1RkelA1V1NKaGRTSWdnZHEveGVyWjBCbmZEREF5Tlc0cmtuVTlaZ0pnRVptUzBhS1dHdzA1N0E4Z1VPd1pvUnpHUFZlUmxnb0o4d0FZaTMxWFczYXA5c0hIQmw1OE5xaklQWVRiUmQrV1pMeVJ2MVZzU1lMOTE2SGxmWGN6akNXa3VMc29XUkpFOWRqN2FHeCt2MVk3dnRlSFQwUU5RS1BLVVBBb2lFZ0hyTEFhZzVDdjFvUW1hVEdTRGlIME15ck5meXlQQXNtUGt1WUtPQ1hVcHBvL1IrYTlEbEhNSG5nMGxuYk9mSnVQdmJBT0lDU2VuTnpzN0llL0VWcHpEUHpPWjJmclMvd2l2VkFXMUluWlNxYjNnK1RGWm5GTktUQWF3Wm90QzJrYUhERUl1dklVYWhhZFZSazMrbEdmMWRIUXRxTFJJNGhVUnFXTGNWWDduZXROV05nZE52UWlIVjR1N2dNdkczbEMyZ0hmTThQMDlPNDRMN2tCSzZRYTdYUWhKL1ROV0gxamNNZUZLVm5Kd1ZXSHZDNzZqaU9nTHFGSkczS2t1eFVteW9IZ0IrUEFtRlRwZWhYdlI1UUhvZ2FKRkFCeTcySnBJZWJHWEIxRVAwWk95dGJ1VUZZaml2SHdIT21KZ1hTUktvd3YrY0RYemlOeTRGR3hBeXVVRCsxRGpJMWt5QUR3K3hEclRrKzBoYi9kZkpzai9WbGdaZWJ4T2lBWjkrL01QZmhhb3J1TFlsSVo4NFJGNDhKZnE5QllpdUlCUjVRTFFQcGdaNDRMS29yV0NxODFMMzU3b1hvOXJDMHhpLzY0T3RSbkdtbDlzbEVqWitRYkdESDJJdHl5Zi9jOTFjL0ZYRUR6TGtyV3pvNHB3V1UzcW5HVHRNRFp2bVBmQ0ZyV2FUajJDVXlaRTBHenI4T1lKQ0gxQ3Vmb2FRdkM2UlozR0ZKY0wzTlpySi9CZUI3N205N2NzYmc2WWJ2R0RiZzcwbXIzbW5LYzB1OXFiS0JPc0oxb3h1Z1c1cXRPWEhsNTZaTExRTmpJOFBxSStUL3c1N0E3NDZoMHI2d1RlYnVSQ3I0ZHpMNnh1UHJNK3BoeU5TWTNKd2puMHFUSTdxQ1cvdjV1aWdSVlVqQUpJWFpzR3M5cUMwMHgvcW1FSEd4QjlzL2M3eVFiZFY2Z1duTC9jUG5EUGM1VTkvMGZ0ckJBOTlmTG1LTm9KcW9OREV1NVdwZ2MzbnBsN2w0UmpLaWRJbXVVQXFKS2xQZGE2ZTdEZHd2SWZhVHBLTFdIRkZBYTd2aDNMUW9CcWpoQVh5cTJ1UFhQdnhrZkcwem9NK2pPL3lPU1QyREtrdGhKUUJwR3NSYjdqOFZ1YkZYanBiOFRzbGJUakR0WWIvWWlHZXVJQ0liNzJ2WW1kM0MyUmR3WnZCRDhQOG1idERtbERCSitWekRueWFqRGVtOWlxOUNsRUxmNzJrMlVySWE2UmN1dk5Gd29rdElaS2lRUTJudHNyWU83aS9FcG9tMStYWjgrZVJMVDdPcm1BUVp2T013MGphdzRtelhJa2ZUZm9hVkVvaENadVZLdkRpK2IzZTZaWFkyRVBiaUlBU2lSVWw3N0V6Sm1FcmlRTHBycTAwc0tBUlVmSlMvcWQ4SmwzODl2L3FzQ3pWNTlyY2paT3hQRmtjUllQVFBqUzNYMzVZV2J5cEVSSUI3clR1WXhTV09oZjY4WGdUejBpV0o3TXluTnVCYVk0WXhUTmRLSDFYTDgxRmdFbHI1VUlLMHNsNEZGT3ZMd3M2NEw3WlNjRU5pZVI2OXloTFdCMzRQRGdoM2lEZnBBaTMxZ3FLc3lrOHJIaTFOUkxIMlRidllERi9VQlRRWHB6c2JtUmNYNHU4aVFlcU1NZC9iSjBzMkNRMVYxRTQ2NzdTeGw5UGV3SzE5bHRNQUNla3BpL2NCNnRZeWprVkxkQ1NScDh2bmRVYWRvV3JTVFNDNFBUY05EVHBzT1lYekQzN2VUajd4U3lTWEgwbi92SVNjczdOSGE3ZEZvSHdvaG01YXUyaGF3dytkRXFUVDBEK29PcFlERzJ3WktBRERLVmhRQml4aVprcFkrSU1POEgwTW14cUJkT1ZsbW5wRENLc2tTV2s4ZS9PNmNLNVdzSnpwNXY3d2QyVmtiRlRQV1pUUjdiRTBFVGg3SHpsNG5kSXZMbWRuclRtakV3bEZDbjZYTjRYZG4wZmw3QUNlVkVDRkU4aDR2eURiSWdYcXlKQzZTcnBDcWNjZHlkT1QyczJhRlo1a1hiQUpuKzRTQnV3d2huYjNEZkZ0RkNneWpWeEd4OXUxUHFrY29oc1MybUxsZDFyVXRaanlSS0FhTWYvb29SVXkyNHY5cVNOd1ZNSFh1SEZNdldNeDFSVlcwb21FR2xjeTlvY3ZqVklBbFV2OGRBRndaa2ZMbGdsZmlnT0NSdU5pTHdBSjVVNkV4YXFkdmd0ejhPajhrM3VjQmRvdGdXZU9md01CUytzbWNDMmhKQjZITWYrQitUM3YvU2RETVAxZXk5ZlAzRHdEOFAzVS9oOUFnakh1TExjNUxrM3JOSFlQOFNocnNQMFBsYjVUWW9rTmx2OGp6UUlYQUhEYkVCSTNrQlBid2VEeE1pVldkN0kvc0FiZ3JsOGg5WExhS2x1UmNIV1U1WTRKdUtDR05jdk5MTTQ5WE8wc2JycVp1WjYwdWpGRUlwR1ZqOEMxNTZ5RlBaN2l5V1NYalJPTnRuWi9uekhTL1VTNG9JbjZPVG9VQnNJbDE1NWJ1a3VxeGhqbUpzUkZLTnM3eXhoUUYvWHlybncxdkI0S01qeW12MC9aS28wMXlETjUvTXg2SStYb25FdVBjb0thVXlGWkk0cWtNd04yeE5oTDkvMHdqN1JaajF5Wi9sMncxeFdKVGcrZUpUd2EveTdJMTZHWHJzbStDSnRJaHhFVlRpSjlrY1BkYjVrditmWjJwOVhRNVJYTDE3OUNsSkRzRlVVNHN5dnVYcWY0SldWOWMvSkRxVkFmVythMFJMNUhtdTd5Qm1HMnNxNDAzNUI3MloyYU80bTJEdk9CcGdSeEU3dzNiQkJ3dFYyQVVmcEovNStqdGJ4UENtbGQ5enlpanFJWnNXNlFZcVhwbDJqTVBPY1BKdWplRWcrUEpmWW85RmlYQ1hKb2U3YzgvY2xhcVNlQ2dyUmNDTDlFZUwxc1hpVGJtRUZDNEhPeEwrY2hTRGw0bzZWMU50QjRWQnEwcmJCNUVZdG1LMkk0cThvMFZVcmFrQUU0UFBoTWhsWis1Tk5PS2RKamxyZk9iT2ZsQ0RPTWNRM3I1ZE1Lek5OOFNlZ2trMEpOejJqaVY3d0Rwc0dSN3VUVGxnMldCdzR3cGt0eUJ1ZzZINWVBRjl3ZHlQYS9lV3V0ZkRNRFYyS2F2amNocHg5Q3lOTWpVR3paWG9ETHJwOXAxMlJPcjFHcFk3ZWxwbGY1SzF6Zmo4dVNKM29hbjJGNUE3bHRpbWNQRUtoc0hhWXdrdDArVVQ2L2JUYTNPRzhPQ1JFS0pJaGlySzdwcXVxREtldWRMWlZuSy9LWEJINXFOQUgxMjcydktJQU44alI2S0FGQ0FHSGlrK1lTUml6T3RxM3AyM2VaWWh4cHJXZTRTMmNVMUh2OW83TW1HRytBbjl3NHZuY3VwU3ZsVU9zS3RtVzBPalc0MEpSOFp6VUR4d1lqYzUxVE5SL21JdEVVQ1UvbnVWbEVhdFhHbHdjVC9YNFMwd1hKem13Z0tuZzVJR01hUUFHNE1tWjdWTHk2Q2VqRDg1TW9mRi91U3kvV3hEdzl6M2VZOWlFZ2gxT2FmMnp6VVJFVEtNSlp1ZlRWR2E5bmVCMi9pemQ3cWtJQTdCSVpQdUdQMVlTTFhqVEcxWXg1WmdaZWgydzhFeTVNVXFqZE1EOUNlc3lDTWZ4LzVhQkprc0NqUjdHK3JYcU5DRGJyNjNpWXZYUmFlaFZYc3NOb3pRNmsrN2Q3ZzRvYnlwSjB6L1VIUGJGYXdBSkNwaW1pUnJPQTNVbXRQRkpCRDVubGdNQzdiUHRYQ0t3U2JxbXducWhwYll2QTN0S1N1bzYvVXdOcU9lKzgvNzJWaGtGYU1OQWI5bkZ0citKY3RIMndpZFpYZTFmaVFzYXFlMzlpL1NFK01hNGt5ZDFVSzlRWk5UZE93OW9ITTQyVlhJcUJUQysrd2hxeDJMWDdCN3Z1dHNBcDhmU1BjY2NHYis1QzVFYTRyZ0RQQytzVmllK2d3ekw2c1RMazUrUWhPN1h4V2VxbkxPRGlIZ01TMkpHT2ZIRzIxRzJjb1NWZ3V0WllhcTNMSE9vVmVNdFgwNzRNRUZoS2R2WHRMZW9ReXVHUXlsWGgrTHlwZUE0eEtmYUVjVGdkVnFtakdlL0ZIM2ovSWhaWkJqWXNCbjRYUE9aYzBMQW0xQnhFS0YxQUZBV0Fra3VjLzBSalMrUElKRUtQbHQzUk5XZ1Zad2ZGMmRzblBHeDU5MUtKby9qOGpSUkRON2ZmY0R2ZWZBQm45ZElwMUdPQkxhOGZrQnE4bHVCbnV5d1lhRzRrcUlMMll1M090cXdoZlQvaXV4d0JPMHlyV2thMmlhL2FVdnVVQk03VDBEd2d6Tm8rUjYxSGdxT0E1M3NjV3huU0RBZkUyWStGUWJod0dzZUJtSzZEMUF3K0haUmRpeUIrV1RHTWNCR0lBdDZIYTBRREVnN1hGUmhmclRVQW4xaDc5cWxXOGhQSi8wRnBEQU5IYllXSnR0R050bGpNWHMzM2RkSDhpVGlZb2E1MnI1OVpKbW82Skg2R0NvSE9RbmRweEZmcjFITzlIUzBEaUZlaFhyc3p4Z3VsN0VyRHExMzVzcmFGem96Ym5BZnlxa3h5S3VSNzhIRE1XbWszeHJVdDNwYm9YWUJ0akRkMW5qcnpadmJNejRQVTJhUEVaNkZJUHo1R1VyanArQmQydU9sMlRhNzJTMXlNZkdWUC9WaDVJbEdCTDg2WkRMTEZ4eFZmOW1vTUIvVE9SYjNFR2dNYThjeTVrOHIvSGVaRXkyLzlyaDU0dTZGQnoyVTd1OTRndGtQUFhnQjZwOXVrYlFwaWJ5S2M0SmtjN3RwRXJUZHpSSnUyaldhMUgzNm0zRHU4WHFRaTVnZ1VLeDM0K1Q5VUVxTm1jTTcrNVd2aXFDeENwSXNBOERDRHkwcEdsdGZGQ0t1Qk1ObHNKdUkwS2k3VmZac2dWa2RpbXIydTBhbU5SM0pIYXBJZmhjTVZUV1VlcmtYVEFmSFArRFNTRzIvQkdxUitJWnhZNE9SUnlPZGxBWitRRzZSS2taTVVDQ0pwZ0UySDJDdE9QNkpHVElYNHNzdDB5NHYwL0hTVWlMeDYyMkZ6aUhBSGNwVUpRdFV6SmZ6MEVXMjF1V2lIbHlLTmk4c2ZpeWZGU29EZSt4ZThCcTloa1pBRkVCcS9RQkJUalNMZVlkdzR5eGxmWWlxWm9VK2lZN1lQUmEwdWc3RkdReTA5SlBVZ1hpQldGZlN0WFQ0RGJYK0srQ2s4RG9WQ2Q1V1FTR0lUNHVSN2xpZnZRUW5GY3pDYU9odzMweHBmUGZJNVNSUHVUUCtYOVJMbUpFMGY5d1NBVVl3TE1JdlhxWmlxclBGTEErNU1PMnVCY3QxeHA0TkVFRFlUZExqemNmUFRzeHFvMGxyaUZCMlBNVmFQYzZRRFErWTBLdDlwV0NWS3BqejVGRlA5TENWUzVsTWVSc3hZQzBOYlFGYU44bmNlMEt5QWt2Vis2cFFvNW5sOVJwb3h6ZGNXUlJtN1pnNkFDYlNia0x1REwvRnZMb0QwYWVKL1dxSEtYR000MHd0ZjgxUi9BS0ZVdGxtMkNmellVZGVKT2hqQ0NSOGRFOUlMWnU0NktFQ0ZQWHNnRUVqY1UyUEdiSjQ3cGhHbWNZOXh2cDF2Z3pOYTZlc09PcHo5Nmhxc0Rua2FGV2lqYmswSWlGWWZEVzZNTENobEhRMS9kV2hoVkRJa1pXSzNjNnc0T2dReGhvcGY4T3Ryb0xoNFNqNXBYMXIvZUFEUVZHR3dmZWNtczl2YWs3VGhJZ2RhT2lOdk1SZUQ4QkF4Yjk1UDZ3TFBYL3FoaTQ0QXFWOTBRZmtNYm1UNTNadE1GeC9MV2E1NkhWQTZqNU9sSjVGMXdKVzRhaCtZdnVxRmNsOEpodnM4VGRmakVxMmxDc2dvWmlSZkdMaFAyUHJDWEFJRnZrNENWRHVTbWJhN3F0MU5oVkhGVDY4UXBTUFhGOXd3NUJod0Q2R3ZJWHpWK1dpczhybUtOL1ZaUkVLd0tWZ21qMXRKeks0MlorbG96WG1ZZVNQcVdmblVFeVFmSy92TGRadjlLK0ZsWnZ2OHd2VWNIS1ZPdEdzeTRocjgwdmVtS2grTUFvMFAvWFhRYVo0enRGdEZFRmI0Q0dQSVBsNklLUmRMdmVvTFFvY2tMenRlV1B6UGQwclVieFhsSlZTVUdSVmRRcEhaYjNDZjJ6OFJwTU5zSXUvOVFGTnZmdndTVHFqWjNhSGl5TXFDaFBxZmtseGFyQzA5ZDBDQUxBR1VwK1lKVHdPSXd0N2lXSXVjZ2pNSlVBWDNCWFRGR1BTQWdRVmlzdWZPeEUvNXBPNU5pSW9PVnR4RUlyNXZxelE5SndEZ3pNK2wvQlZ6MUplVDhocFQ1clJSalU1RDRvZ3cySXdiUlB2bE9pV3o3dDMrbEJEUXhrT2pIYlJqZVM1anp2OG1SQkp1Zjl5anBPR2d5UkxMa25mNCtrclBuRFB6QUNPKzJKSVlkUHZCVVZnY2lHajY0cUEwKy9PRENhZmRJUzlxM0JQNnFXNGU3RkdUMGtFZ0l2TTFrWWNFcTNETkRZdDFpYUVnZHlNUG9aeU1sb3o4cGZmejVXQWs3aHN5cE1iRkZod0IyQUlvUnIvaUtJSTBoVnJ2eWRhYXY3STNmRW8yTmV5ekNKRzFIZmI1T1g5VEUyb1FyN1c2NVR1TnBuNmdkVXZNU1BvaCtUNnFmKzY4Z2RMVXd1YkdtWVg2RWFncU96RmlYeEREMkNIMmJ0VWlUOERkdndwcTcxSHlmK2M3dkcvUUdzYyt4ZUNEY2owMDdWVjhTd2t6V0ZKdDdPcm1FVjJmTEVhdmppbXl2eEtjVC96YXM1Q2V0eVV3ZjdGL2ZDUEE3MS91UkhEYnh0SGljSXh6QUQvRmhkUGFNd3F2WHVvZXRDOUtrT1publAzT1lUalZTTmo4dGtodXpqcXJFTzJ0TlBnNlR3ZEdEaU1PZzBuWlN6Y1lMemFuWTl1VC9ncldsTzZ1MXh5ckJxWFBTZkR4akR2Q0d2amZhcG5lYW1KTlJjdVZqN0g1ejJoSUM3RG16dUw5OG9qSEEzeU45Y05hRXd5cUZPdUhhOWxYS3hJM2d1blRMdjM1NEJxcjZIblZYVisrMlJWb1M0UWdNWThtenhBdkNFai9hRWNtOUZBSzdNZjNTYmg3K1NpR0FhVDdPVFdiUG1uNCtLODltdktJN3RGK1RqbVEvTzNLM05mdjI2cmJBOThpSnI4WDlUQ25vM0VEb291allFTDNrc3JFYm41N1RabTd5T3dmbUpYUnV4akhuMmY2bE1tL3hKOHVmZU41VjBMQ3ZNZHhiNXZUUVZJUmdJSGNYbW0vZStaMjFHK3lWcDJtamJlY1ZtanJ5Um1zQnFjM05ZOGRvNWcwVU1DSERTY1dyZDRRa1ViQW9DRjRlL1lNMjJ1NUxKLzJhZnlJenMyOXhETVNBNGdkSVFQRFA3Y2l5YWU5bkVqOFJyVlRLQUVDcEtEdW9BbVBxZzNpWXhXai9PRVVRekZmNXA3aExoS2dLcVpTbmZUWjd5dTNnQ2JrMUVBclBQS2RqT096WnA0Y2xTYU9uSVBqbjEvOHNLV2lBS1pORVkyaUNhdlhmR3RETUFxd2NPMUJOenRTYU9wSWNYek1nTmhZRXdReUJSY3RiRE9GcS92SjlCUmk5a3dhUU9wamFjOUFGcUpnOTgxSDIwRGZXZGIyaCtnS2lZdVFKNmpKV0UyT1VVNmdnc0FRNTZMcVc3cFNFRXZZUEhhZTNXK2lyOGp1T1BkZEhlMWcydGx4WlB6MkRIUklTS1ZMZytlT05neHgzcklMNGdJbVhTanlHRXkrT0pRM2J4UFNzSVU5VFZPLzBpSWs4emtpZ1pJTW1DcjZwU05LMGJsYysydWNVMHkrVFZkSjRMVzJ5TCtJdDFBcHhlTnFOWGtFcnY4NGJFMFBEdTBxeXdMTVg3RVdHeko4M1pYWEczYUVRMk9nWW01ZCt0bTNJRHZKcmtYWlBJdndTOXE1aDhJVXZHZFpEYlZyTWFROURIK3gvR3FCWXdyWC9ha1dpOTV0Ym1QMXh4aE0zbEYyTkwvaG1YenlDanBqQ1cwbnB1Q0tUQ0E2U0MweTFIQU1rSnVWZGtXb3FXWGgvZmRvU2U3dmJWblFpUXZnV1h3RmkxL01jV0ZFU3FyVFNuUVRaRnZQZXo5S3FFeDB1VzF2ektiT3B3Vm1wRTFveG04RHBlQ0FCeHpnTzk3cmFUN1FmR3ZEamZHMlplSTMvYkt0eitIN2V0OUNhZ2ZJd0toc3UvMWNYSWpLbmNOSzYwb0pkSjROYS94bXJRV0VEMEtnU1Z3aU4zT0NubjdFV1JEWHMvSFVZSjhEMDBheTFBN1Y4VUZFZmlBY1N5Y2t0VHBmemRNQUNiWE5YeFpiWWtDbDlmZ21obmRVZ2FmdXhzVFp5RjV1cWlCVzNqVnlxb1VXbnZpR0ZSOG9uRGtmUUdua2JqWVYzRXQ0b2t0Rk9uK2JlcUttNXFKTGxjcG1ZK1BoSXk5cVBDWUt0dktxRXRpVG53RlZmNHJoNkErQjRBYldYaE1EMzhMMkdoRk5MSzFiVnRCZU9NMUhrTXBNdE5nV1d5RjhURWxka1FxZXZkblVHRWV5L0JxSVFsNWNNWmkyTFE3WGZXWU16M0NrdUpldDkwOWJCbVp0MTArRjZ6OGtOWG5jcXZBcDQvSS9pMkkyWDFBSC9YMG5yQnh0WkJ6aG9Gb1RnZHdKV1NRWi8xN2cvMTBIeU9JTmhvQUhOUzVIOFh0OUJYZmx3WDRqR3hYbUhtMDFEem5jcXFGeTJyNWcyNHQyajJZRHEzR3o3aDlxQVdKMWllNTRLcThaeHF3cnU4SFF6Z2VSWU51TXY2eUxxTnQvdGFPeE90NG9LMExrejZKRjBwbmF4R2JrUGFuVjlwQXdxbWE5b0ExVHBsUGtybW05VkwrYy9YRHF2cU5hUVZsUldtVnFwYnpreGhEeGlCbldiSmhENU4zSk54RldGR0JQcFhmRkpVVmo5SDdVUXlhc0tkS3M0THU4VmU3Tmt2NmxuVDBFWStwamJlY2VaOTlWa1NZKzhsZHRLdFRFYmxZazU3SlJhOFQwc2dmK0Z1YmEyZTJoWHFHQnJNaGllNy9hZzlzWmMwYUhveURxUDZwV0oyRmxuNkVnQkJ5VzdFQS9uei8zN09NZi9KWnRrQTRMdVViQ1BkaldRZ3ZjZ2l0cjJBY21NczcvYVA1L21rekx2WkJXTk0wcFR0UFh4d1dOclBMb1o1V0ttQUtYOFV3a0VQdVhkblNWTWwvT2NpM1hwVnhDN2dQbVhONFpHNEdBTkx5Y1o3aUcvVkJHd210OFdtOTFacVRaUC9zd3R3djNtK0FZak81UFRmMklsVmxwR2NiVHgvVnl6d3F6QUtJSUZneWJjeHdmR3A5MW85NmFMYmozSzlwN2tReDBJSEtoTyt1b3RHSzhwSnJDNzZQVjh2Vmh3eTRJaFpSYXZjMVZSZGM2UFF4Q2E3TllRMDMvKy9rQUJnYmQ2VXFEMnZzTlN5UDFvUWV6cXEzNFRsS1F3NlpmVFh2M0VqKzRCNmZRVlBSRDNydmFKVXlYVGtBME50bmVMSG0wbzlDbDlFR0JSZlVOTEgxWi9XMU9ZTjB4cnlINTNYNXphM0R6Z2NEdG9XNEdoUXJIVXU0SDZWL3haM29nQXJ5SnlmYmNtOFkyMzBXNmt4NldBejJwMUkzL0ZGVk14WllWYmNHUnpKZCtjV3c5TVNyVVJqMXZMZ2x6Y3JwaVFGV2ZSUWY2anBJRnFZem1jemkrblJldEI3UVVxSU51YXUwajg4K1F3bXN0NmpTUkUyZnJITlZGRWxubkRtai9mRDZBZmZnMGFzK2NQeGlzeU5GK3FzSW5MSkxhVldrSVBjUjFNRitieGdwdE9BdmJ0ckpMbitVbnhiTTZITS9Reno4VUtJN1BWKzdmMjlQWk1XL05HMk1DTzA2Ti9EWDBCbUp2alVOTFR6TmlUeWJKdHpCSm11TmRDcEdnYzBSVElmRkRlc2c5N1lWUjFkN1hXY0xLOWhjN0ZkcVI5dHVFZkJpb0hXY1JXTXVGVzlpd2UzL2JibHFlenZwZGx3K0FqeTRadStTZ2VrMEJpU1JzMnZ5R0FoYWhCZkdlYzdCK3ZaTVJzVVRaRnZHenlLTG9OaFdETkxmenNlWXF1R1hCbnJLeDhiSlpzMjFGanpVTDhqYm13MnNWSSs3YW9IYVZwK200WjhWaG5jYy94dnE3MGI2dXRIOXZyRmZ0N2F2ODNzZ3ZxMzI1ZnQ5TmI5dmJiZlY2ei8xdmRCMzI5blg4T2l6aHZxN29QMjljbDlYb0dYMWRnZS9WMUJmcTNUUERYY09taTlyRTkxVTVCaG9yRUN4ckRWWExnRlUyWDhFMkJrUGFSM2xrbFZMK2VNNnhna0tGZXRpV2poWEwxcW1kdHV2VHdSNlZXSmNacHRJK2ozakxWRytHTTZPSlc4SXZ3WUZIeFZsblJvQjVBbEF6Vjl2QktjdVY3THROZUJJajJSKzQ5bVJkTWNkT0d4Z3dGNlV1b3Z4TFIwQWtFcklYb2VXcVRFZDc5UTBIYWpnZzJmUVZlMXN1bTBuSFN6ZkJNa1hUQUd0K2R2eDlPSURodWQ4M2pIR2xsRklrQUt4NlBoTEoyYmt0R2JBdmZtVWtLc3pxVE5tMjNkSTgxVldOcEZBRmJ2c3RhbjZmbk9CTDJxanFpTXgwSjBONUJ1bW85aUs2SDEyT2ZhNHBBL3JhbTZRR3hnZUVNSkhrd24xdVpGeDJaUW50eS96aVZpaUxnVHdsMCtsdUN6QldtQnJmMnhZQXcrbStTN0gvaWUyK0JSVkhuQ3p4dUhvV1ZBUDkxMGRORnY3RmV6b0xML3dKWENMRGdWcFA2QnIwQldORGJIM2U4WHc3VVU5RzZaWmpHbzdwaDZDUGgxY3JmQUNnWXBmWlNoeVNkSTdSUzZScmpFSjdQVGxFTkNjVGE2aW01SGxZYjdYcS83QlBCcVNqQWFIaDMrdXB0YXFvVDFuajh4NkwzdW52OHhOUURmUzBTMTFibThaYjF1NTNMVko2WWNmU2xTWWRaL3JPbWZ1YXU0eHF1NEM4ZWZIaysvdk02YTZCYWJQd0dydjFMOWVhdnFhWWRjbndRcHMxT2NRUlpUazJrTENMQk9GeWtUWmlSV0pxa25qSHFGK0RxOG51aHZSaHdOa1NNSGNKSC9lMUp1aG1EZnBNMEZxVHBHc3dZMEVmRjFUR0RybEZ2aEhsK1AreHVwMHZqSUxnMno0Q3gxRGl6SU5WcTU5Tms2Nk5aM0R1V3ZmaFhrM1l2Q1czU0FKeFFTVUhOM1VwbzhuNmlRZ1dOWFpDRFFyd2FxMFVxWFdFT1NSRDVqNGoxL01SZ2ZtTFJvaFhxNlVyamJyM1hyWi9rMnZyZk5UY0sxU2VGR1pKaVhWZVlhcFVNdkorUXByNGFkcVg3Mm1ZcnE5d0NYT0lQTVRJb1RqK1phcUxwV2QxM0hZeStkclBxVE9xekYvNUU0VisvZldDSzgzQ3k0M2dxZXN0eUorNElqb2h1QWR0bUVObHN5dzNoSUhQQ1dHakVlRDZ5RG5sRkR6UVQzOFJlalRDWDN3UU9sbVVJUkNVbE4ya2JPSFBXV1hDTjhVeXJaM3FIUXFvRkhvTWZJY3lRajkvOFRreFhhL1FWV1RXMDRobXVMV1Erdzh4N2hnQXBHVkJYcXlUTG5QOEtYNGRYMVlVSXdObXYrT2U4QU5JMGFoWlowd2h1VTdlcy90K0xEdjJ1RXkzdzFQbVJxZkFaUy9yeXU1eWswd1o4ak1RWnhXNVcyZncxSTJqbkFSNFFEZUNGWW1zOVp5ZXVBakhVd3ROMFFHS1cvMDFMbGRjMFYzdmx4OEtFOERpbHdlQyt0bk8vbzJHemNHMWRVcGNYbWdtcVVXbTNIci9lblZtRUlibjR1OHhTSWdZa1NxL2V2M2dDSmhBVXpOeGZOQ1drV21BU0NJRFhldVhGMFhPK2JsR0w3UHNBaGg4c1FoU3VBNm15RGw2ZzdnNGFxRHlmWWdrTTdySkdqRk9LV1pCbDhYRTA4ZmlhcmRUUXlPZmdKamNaRzFoaGY3dVhQQVczT1ZuUmF2c0NyaWNMMUUyang0TTRHRzhoelZGR1JnVHRhNjg2RXFpMUMzMUFTNCswcWZtK1lKZ0s5YWVJeUpJNGR1emY1UFFmRW5nSlZsd0E0QlZSbnltWnZwOGVaWFRTUTl4eitOVDhkeVhVbGxsTXVYbWt6Z1FTVEhXeXpQTWFTNmI0NWtISTZjV2o3ZzZ3NlBMaFJPRTdqU0hTd1o3N2tnaHlUUUtJN2xxR3ZQMWpudlJWOEtwTEtFYUh3bmFQNlptZWFJQWZlSzFRQWkyU1hNSkV0R05ITmY3dDJSSGNlU2JZUUk2T0JDbnYvWmw0SWwraGNBMmhPQW5pSDBNVmdZREhqY0MxVzNlUGY5dnNJRC8wM1E2YWwzcmJxSFMwTUF6dzl1N00xOUtDbEFPanJtdlZQU1VoYXVKVUVVMFRldEpUTGFlaDZ0aVNzcVcvSXFiSll4Y25KZFk0V2ZYckxhYXh6SjgweEJsT3lGTXZJTFFEOTBSbXRIWEFoaVJxWXRxdElXZ3VHOGF0bHk0Z3RVYVMzemFhWVp6VmM5Q29USGwvUG5zRjFtMUFnUHBJTWQvVHhyam9kaVBXR3ZVUFkyMFlLbkFNakFtVW1zZHZld0IxTmVORk81bEJXRE9mQ3lYU0FOQkN6OTUycXk3a21KbGRKVVFrcEMvdjNHTVUzaHE4OHFETW1HWVdyUjlUUk53Q0FRd0pIQkp6V3E4THlDVFljM0RYUk51Z0JtZkUxbW9BMEt2MTdLOEYrZ2l1cHRSMlFtSGpnaHRFZjRkN1JXUnhCZHpYcHBTWGNza3VzbWV2OXc1OXl0MlR4akRXV1Q5ZG5PVlpJQWNRUkdwWjUybnJKNk16KzBJcW4rVnV0T1JlRU5IUVFJdmVyUENFeDNZa2puUjVLRFUwdEQxUExjUitncENhbE81R09GcXJqcUdNRmJGbTVEMFpIUlVNek8wYzRtdUtsbEtVOEhoYkl1TytkNThFQWlYT1FHQWQrNUYvSk42MGVUV3hvaDV5cVJ1eGk1NVlHVGc2cllQQzVKYjZiOEtZRlJwemJhcVY5LzVMYW5YUFBTRXR6V0F2dnB4bm9YdEs2TWdqeDRCWitYdXVNY2ZlMkp1K2lwU2g1Q3V5a0VYbWQ0WnJ2U0M0bGdIZ0hCZFkwZStxZFZUQnZKM01COFViVmFMS0xHamtIalVGZ21od1VWbWlZZW1ORkt3aXF3UnVCbVFJcDJoM0M0ZG9uOUJ1ZktteklyU2loMVNnTFlUTEZMUmd2Z0hNdkRyc2dvRU1SUTAyWjh6TzdteG45R0h6bm9GdWJUWkVHenVJVEZpL01qNWZ4MXEyeVU2VlZuVDAyaUZEZjRWdUVLbUc1M0RycDFFMnVKNVJYL2ZQbzdhUkdiKzdGbW1oT0VzTmc1RE1HVzJZZFNYK0VlS1BKTE1CRHRCaEZsRTZkZDRXTGpRWHNQSXU2Q05xemJ1L09hdmN6aDNBMUdoem9LL0tvN2Zlc2lwRFBjenpMRnNSdTUwbTJqVUlNZzY0MGJUTm9wWVJKblVXMXA2WG9RWkd0ckVJQjlyYk9BeVJxNXR1VVpYRC9iRkxkelAyMnBDRHBjMUFwN0grSWlpTTVFK2h5Q21nNCswUmVwa1FoV3Vsd1hRYTJVa1ljREtCNDNlTXpqcHZXQ2tERzFSUzFOZHZwUGRBcmRGS1pEbXdVam5YMExXMFY4R0RCUVdSRU1zMjFQOHduNDZaTHFiSVpUNVBaWDRscmo2ZXlHY0RZbHcrRGtWSzREZk1OTUdGSEtsQjRKSFZnUEVHNVcveTVBNUt4dGlldHl2MXRBaWU5cVpzVTFVZ0NrM0Q1dTNkbmhnd0JxdlhGQjQ0Qnc4YnR2K0hwS1hVMjA3MnAxRm16N2dQK0k4Wmw3SXBRZGZUM2g2UTkvaE0yUXdIZW5XeVdERk5EamNEcitUb2xmODVTOXdSc2lzWmVUS1pmakFlNTFzekhFbDhpOEF6WmJtZkh3Z3RyUVVyVmNvb2ZiODZTZkZtWERSMWxMeTZPV1JBck85bHErRTlKUVdURHNqZ0FZdnh2emVXTGlQRGdGVm5lNlg2SUp2VCtkMDBqYlJOaGpaTGVLcmJRTFZoa1M5SVJYUm8zTEYxOE1tV2JHZW9KOGJLa0c5SVNkOCtOd2lXUXJWR0JyVjlNNG9VVVdmTlFUaHE0Zm1xbU5mbWczS2hsdkhwSTdySUN2Mzk5VWJKSENMK2FMUUxSamlDOEZvZWsvcDRuZ0w3ZUZBRGtNV0gzbVgxbmhrcXlmWXZIelRacWZueElsbXNYS2dqSm4wRzVOUmNLQmRteW9taTlQaW5qM01XWHIxRkNYbkc4WWNYWWQ1aUlqK2pQSjZVVnNzUXkraG9ad2tVdFkwWCtzTnpoL1U5WGwzb3QyeVBZYVI4bUtUbDIzSmlTd1B0YVp5UnNoZnd5c1pXTGlXNWYwdkpZWjc1UWxpcGtFMHVTU2I5QmJ6Y0Q3T1B6Qi8zTDBaaW5CaFhnWnJEUFpPdmF4MjFOTG5wbytGd3p6WlZKVUh4dzRJN1kvSUZvNWg0MFVEVmp6djRSSCt2NmZvTDNTME5xYVc5SHNvc3E2MlkyTUlqV0w2dE56T3VuQWJpNkR0Q2R4V2daenBna2RFelFBQkFMeFB4T3VBazBVL0xKRGE5SjlDVW1MMU1IaWlQOGVjcmZ0SUs0TFJnTlR0b1pVQWpCK1BMeSthMmJ3eWQwWkQrNWJIYjVtRHNnajVMVE1CSFRHajkzczgrZFFNWS9nTU5Rc0dVb2ZYQnpXN3d3N05SdHRjNUJmUStlMzNqUmtIb3AvM0J5OUpJSks2VEl1MlVLbEFOcHIraTZQam9aQVdqRnk3UkxWOGQxQnR2V1JjNm16OUZuNXZELzAweGJrYm9LaGlHR2RnMm1JNXhJbWhEZHRucGZIdGZXWnQwKzd4Q3V1eURPNXBsdFM2MENvdnMrby9CTjJVWmlvQ250TWlmVmJMODlsZXBVaVgxdUgvTkVNZWwzdldWYlc2Y2krMEVqODl5Tjhrby8ySFk2ZzhFUTc3dVg5UnhwdWZmTlpjNDAwS09kVjBsaUgvUnVUbUNNTGlTZ09xL3l6VUxVM0xvUVZ1UmZJZ1hjL2x0elJHcDlhZ3JqMk14QVRJR2V3WXl5SXduVVFlWmtMVlZ2bGhZeU5KQWhNdUdwL1hMT2tycGFWSG1pVFBEYVdSd1ZOenFQOE16c2o0ZDl2OG8rUE1TUS9qSi9KWnRETVBqRGZmQlRMSlpFYXE4VHZJSDlxejJkbkxUU080ZmNVU3VISS9XNnNWVEpZUEhiV3Y1MlZzM2czSmJ1T3grcjlCRjBzNGpuTk8zMDgrLzFhL2NLejFwcFZkTHoyV2w5Njl5MkROS01GVHl1bGV6MWRmNXJFZFlOOSs0NkNBaGcvMkhrcTdaYzkvQ0NxaGNPUm43aVFwMk9zTUZWaCtBWWhTVU80TG14ckc3S2I1YkZZNGRyQVRQclNBQ3JmYURQK2d0dDVmRUZXV2dhRi9kNzNHemN3VDcxZHZkd3RvOWlrVlNCcjRwQlpWRy93YUNKZDQya3BOeVVoOFh0VncrYWZGNEwzb2tPT2pZQi9UL2Yvb1hIRmxKTTRsd2pUVk5ITUdmVHZaLytZQkd5M1d5VlFkWGZPZk1LODMvWXhoODdxVjNjMGNXVzV6d2d2aVZzYVh0Z2hNanQ2MGpzNXN6M3M1Wjlxb3Y4ekkvd0xxdDBNQnpIWUducmVEVUVXWHRGSGNCU09ZU1JJK1E3dUg0eUR4b3pDbW5kZ3hGQitlRkF5eHBsR1dVM1VMRTBKdGJ0ZGxZR3RxbWlSTHVQVEQrVHdRbzF3RE0xS2RIQmlXLzJyV05UenRVNE1CZnI4Rzl2SFE5MGR4aHhSbXErSjFnVGxwVmZoVEpXTHdHYU5FRCs5Wm1TY1FhZWRsVVdYSGgxbGIraUxmbFJReDBRbW1namZ2NWZ3Y1ZJVVA5UGlDd2NIejNYd1ZxZEZVT3I1K0xVaEFFWGgwKzVlTEJXNWJVK2VadWdQbGg2KytZNVlpZ0hzd0FpcGlJRDhuRXpDWkxzOHBOaTZkSWg3Q0JmQ3dEU0YwZTJIVHNIYTdaN2ZwM3krcVZMSUtoL2YwN0xTNE9VVzRRL1lvZlQwSVlodEFvQWU0b0x0Z1lpV1NUQy8xdVJDZXl4ejBCdlJKRG0wL2xJRnZScVVsR2d2QzBDd3JQWGl5QzdBbjFIMDZ6OU90MWhuUi9oQ0dYeEU4QnFCb0hnbWIyc1VtbmdWT2pBZ3Racks5VncrUDIzcVQwZ3VFclRwREdraEVDUXlhMGFJakdzOHZmL05PVzF0NUtSYWc4dm5TVHFJcWVBeHVNZFFDby9wQWhTZzNOenlJTXhQSHdIdFFJWHRPWHhqREkvck9hM25SWVFieTdObEhWcmtia2JZYzdGVUFnaFZmdTgycnlvNHV1OTdpUUI1VTFZaHdMRUlTTS9rb25vVzRNR3RyY1pTemRhU1U2dkszMFNmMktXM1ZaS3ZHMGsrd0FlZUNJNThSVG9VczRzNVhFMjZXRnltYzd4eU5DSGg4SVh5SEtOZStRNVozanYrUDFlZm1IM3ozTGZocHJoK096WXM2RjM2TTIxcjFJUHNQM01vRFBkWlFleVc2UmRLNnEvSkh6MkRUUTdBT09QaWxORjRVTmlEaHEvTUlaMFQ1RWZBTlBURHpVcmdoMGZMYncxclZLQlB0dzVOd3NJaHl4cC9jN0RMOUQzR1lnQW1YNkdmbXExWGtJcmxqb0dHV1BYTW53VGw2SGdjek56clhtR2lxQVRrWTRQRG9lTXFNeUJKME96VlNxc0VuL2VaQkpXRHNHaFNXOXA5SU1QUVdxNXZneEU5MkxjNENPUHp5aHMyV0N1TldLWk0yNmt4VFNYb2lOaWszYzVINVNnMkdHdlp0YmVpOHVBMnIrcjlLZWZDVWxXL0RUVHcvMi9iK1BtcVB0TFh1SHJZbWdxaEJTNmJraWEycnFNcVFTRXp1ekIwM3ZCMEs0VzY5QWFrRUhZdVBFdjhzSGtKZW04MFBrdzJUOHNCZGQzSWlOdlprbkwvd2JTUUdKek91QXNzZGI4TWRKRFBSVnhyMjVYVEx1TkNQbXIxbzJ4dFM5NnBWQUlhL21KZFhwdFRsbUZtYkRhVFlnVFRIU24ySUdDT0ZBd0d1YThrbVBoekpoOEZtMGQrVzVzc1hXdDhvNG16cVRiem5ubklWOElYd0YyNVlZMnFTVXV6VjA5Rm45UytZdFFUM21POWx6TVZVVXg4T1FhL25ub1pTNktGRjgranlQT0ZhRVlJd3lQL25JTk5hb2h2TThXM3lNSG05c3NjcDM2UzFPNWpSQ1NybjhpTUxHZEdmTnptY3N3R3lCeDZFRTF0Ym5zallDQ2oxSGg4bUd1ZnBDelJMNk43ak9EblQxUGhsTUhXUUVMQXVrZzZzRGNOMDk3ZU5WeEpjckVzb2pVK1NOMVkwY1djUXNYRUdrSWRNdlR6VGYxZGRiajBndG1rRGtwVlBXOUUzTDRDUGUrcEI2OEhmWktNNFI4dzZSMWNIdVpqSzVMUmZBbU1SZkh4RG9xbHFHM2w5eUxnTklMVlhwTE5LclZLaURLYzlLZTE3Q2ZyL09qcitmN0d6VmdJeVpTRnd5am1nQTA2dmlxK0ZCYXY5QXJNMnJtdWNjajRmQnZHazBieHJ5dW5OWndyd2ptRzVGQWJLdU15cEN2Uy9jeVYyci9MMXlKV1kxY3VFTzJYRGptaTFWVG5TM05IMDNDWVYyaDg0Y2Z3ZTF6UnpHK01CcjNLL3I0cjI4aWJtSUZOeGFXcXlaV0JsVDNVNEFFb3VJZG5PTFdUY2xKY2tCcDlWYWUrWXhic2NHbE9sZ2tRekxvQ3cwWnNhM2dHMmtNcWxONUNTT2ZWaGNRTjEzMGZ1QXhSMmhGek4vcXFyTHhMMXR5VExqN3UwRmFOendwYjdQOFdxM1RmRk1lZFJ2Q3JVL25iTTY0SVRBMXVKT0EwdUVBcURyQmM2VmJNOXVQZGxrckt6RzJDcTRERXRBNUhNR2hZcjdMNDlXV2Fvb1R1YTJEL1ZvL0xQK3l6cUZsVG02WXU4NEhKckNHSUEzVVVFMzc4bXFNYm91NVJMaExHQjJCMVNyZVI0STd6eFIxdm1lTEhkYmg5YkhMYWFsMjk2OFR5bGhsMDFEcnNaK3ZPYkNQUjJvK0NZdU45OEVyYmErdCtnN0pBdlhYVWl0bUFsb1BFRklWVTFmVVQ1S2J6MjNCRHlMUUlzZ0JXMzhhWDdKTXd1aW9raHZ5WnBBdEpUM1dyR1ZRR1B5Y1dwVnJubFM1aWNzVkk1ZThFcG55NEZsb2JBVS9jUG00aGEyQzFaNzJtd3hvbjU2d1Q0NnJHZk5EMjFWbTd2bkFFbllSY3hhTTVlNXVoZk5LdXltazhhRjFPalcyaDdqSUNXMlA1SjBWMFhhdVpnaWc4d1dqOVR0L1FXbUZ2RGpzU3RvZDhabzYxUVBzclFzRmtXYmRoOVViTnN5cEJWVGlwY1pqMnNLTnZnSzFLWnpUb3ZMaWFDUE9CL0R1c2EwR1UrRjA0ekZIQ1I1ZXk1cTBidjFIdjh3bmpxM0JSWnhjUVJybXZFTTlyMjl0Q3dxSUY3VUZ0QUlQVDJqMk1YZjRTTHBJc01jNG9vK2ZiM24vQitncFJxU1U2RkNGZ0hmWTJKMCszVlB4WDFZbXB2ZkhLL01aZk83RGNKNHVybHpEbHRaTUVkUU1KRkZweDM5R29EaSt1bHQ0eFZaYytrK1JVUWtCcDNqUW83eFNJUlhQWVFHRmJDNlVWVnpjb2MzRXBnZDhYaUpuYjR3NmplZmVZTEVyVi9mMFlCZVZURG1KNGFKNW5ZdVVNdFhSaGowN3F4K2RvWlhJNzVnSi9aUWx2UWtlS2F0ZFBvcXlOQzNXMm9kR0c4cUt4blIxbytEanlMU09yWVUvd0w1b0lQSS8yNkQ0WldjN2FLeVhSWFRSbUd4VThueXZzQUR2ZWlVWExzc0JqU0tGTHRRQlNOcW9WYmh4em5ScDBYRlJRRlNHTjZQRElwODZ0ZTBTcWphYm82YlJhUUJubUFLcGZleVYzOXR4V0Niam9QbVRDZUhyWUljZ0g0a1JrOVJ5SjVZZ29XWUt4Y0JYT0g4VFdLOTJFYkhYam1UckF2aEkrLzExQkVLRW1NSnlWMW9DQlBHQW1wUzVPN28xbWZod1dNUWxWOFFUMkNyTjQzVzBZU2VpTkxiSnZFVCtVUVZYc21SR3NlQnpqMkM0OFFyZFQrMGVGU1FXbERsTlR1bXZWRWhabUcyZHdMRjJjRkpWa3RDMk5UVWlrT0tIVWlIb3dBcEtTWjY5QlpUZmNramUyZm1oTm1xc0ZOeUM2cEJab3R5Z0pxYnUyVm5MNTU2MnhQRGY1bG1NZU9GbkY3Vk5SWWI0S1dFL0NteHVJYTJQYnE1QUIyQU1kbjNabFBXMHV3U2xLSUIzTXVZOE0rWXpPUUVRSTIyczZ1c2RIMDBubkpKVjJ0TFE5d21DazBTMVVlY1g1d0lUK3V2SldQL0VqUEdDVXZrWDMwUk9QOWgxU2pMRXRiSExxa1NCRmU4eWVUUmZTTEdnUDF4aVV0aGQ3cUxCMjgxU0FmdDRxOUhNRlBldTVTWEVtMkYrbVhnSmNrUUxUWGJkaWNpdnVPa3lBVVBaRjJYeTJJbzJzbVRBNnAzZGdES1dvTXN2VXMvY1hxa29CeHVISWhHZWpLZ1FaZnNPS0tHYXRqMVhoZ04wVXJkT293N0I5bXVsTFNzOUpiVk05TWxRK2lENXVlcE0yRGRINnRTb3BvZmFQOSt6TEEwOERGb25wTkMxazdzbmhBSy9HZURkUjl0aklaY010SEx1OU41NE5IdHFFSERxdmJqbHIydG52YU1XeHVXemt3Ukp6Vk5LQS9xbVdwWEhxd1ZueWtzbzBBdFdCRGMyYmkvdnNsRzZ0My9IT0w3VFdjbDU3T3o4VlBrd2hRRTNHOUVSTnlXSDl5TXBJQkdoWTJ6dktsczNhZEdyRHp0NU9pVWlxVk1yMXdRTnlQMFkvcVk3RmxWTUh2S0QzYk50elRyWWk4d01Qb1lUbUt4R0lNZGZUNzc3bHRFNDZyUWltaW1uSW5FS0w5OTNSaEowVjExY1l1RTl0M1pZb2tNQmRZU0QzczlxK01uS2VGR1N2WTNiczhtbjJ4eWdzdHVLWWc1ZTdhbnpOVUNKakN0RjdwZ2pzdXF5NTFGNWRXQ2VLUllaa1RSSHgzbS9xTkN0bW1iTmhaeW4yNHJXaW5OWVFWWm0vRHpsMEp5dlozVUhsMlBqUXljQjUzOGNsZTlQcHZ6Q2o0bXRaajVGZ2cwd2hTSXlOR003RkhxdXNJbWtlMFh2b3F2S1FVMHppMWNjVGhheEZ1MzBIVnR3Q0FhWXdzYmhhU1BUOU8yWmxUb1l1MDlsdFV3SE1NMm9hTEs4b2FMTXpXMzlrT0lPQ1Y1TU1venhrcEJ2ZVlScitBSDVmUEtNdG5JcEo1Z3crSWFqRzMvS0dDMWFnd24zc1Rlckx6OTQxWWVkSW9BNk5XRGhWdnpsRmtCbGR5UlhGNVc0bUtCTHVkNUs4U3ZCWkZhTGRyd3pmOWhrWFNFa0thOFdZbDRhYVIzZEVZNEFONG1LZElPMHh4NE9POTA3RTFpWGcyNFM4TzYwUEkrWk9PQTYxNDZGbG9YREVzd0tyTDdPMVZFQjM2TTFDSlVtdmVFUFNWUWJ5RWpwZkp4NVhYS09HR1pac0ZYZEpRMnZsVmxkc0tKV0FmaHpIeEJxeUNWRWYyQTBZNmFyd2NXVnZFZEZCblhTTTd3RE9PWE5LUVV1VStCN1RzZGV5VEh2bDZzMlJSNURvUFNQb2RMVDhZaFFvQUxKdldnWWZFOGd3b2JhdjJkcWN6bExrbTNVN0U0MkxyYVlHMXFUZDlOUU84K2NKa0k4bzVrSnRyUk9sWXNxcEJ5OWtLbXBGK3lyUlN6NFJGODBybmx1MURKd3JueTcvSUdjRFgrS3hySEdGMkthbXExbkt0ejBWcGVaNFVtWTk3RWtOWGtqaGI0OVBLQXJ4QjNHZGkyM2Q5Sy9zOXVibnB1L3BzdE41R3pGbkRKU0V0emhodldFVFRyRHY5eWc3enRxd3lHdm92Rzd0WXkrVnJURDJNVHgvQXFRNGEwUmZXdUJHczFSM1NvWm1ZcVNGblg5cnllRFRTdi9qNVROeDRLVXlnY2sreTBUVVNkVFZMOHQvc25KN0NvQTlORkJKa2tVdUZHdmtpY1AwQ0N2ZS9YaTQzNlhJTWcxV1JsKy9ZZG5yVW5TMi9CSzRmb1puYmRldGtHZm9YMHN6RFZoSHlIMXUxdGhkcW5FRDRQOFJGVk5FY3l1TzdmcHVDTStZbjdwUEVkVmI5SU9qZUM0TWN3RGJzUVJET2NmeGdjbkdwelZtcWRIc284UDUrbUlubkQzb2hRK3dFTmlCZUt4K1VlQ3c5Rld3MkxVTE9yU1FEN0ZGcW93blVNam9JZlNqT09kUkErRzZvdjVqM0NVNXFIRmVSQ3daWnNtVlVnMWJSMVIyUnoxTGkvSFNlYk44RTBSQ1ozaC9WZHh0RUQwb0VLMGZ6a1ROOHQzLzVMM3pQYU1KcXZJQlpEZStwZE11VjdLQm4zeXlFSkZHZ2tZTTl6eTdESVJ4LzYwSWR5UGsyWFNYR2FNMlFqS3Rla1R5UGlpTVM0SVV5LzZOQm9Md2lTM0FWOXE5eTl6NS8xWTFrSllEL3BGMHlES053SUFEcys1UFh2L0tEQXJpMFBOYWVIRjRmbnZlU0VJL1FZZ3N0OE81UVYzVkxmWVBBaUp1dEFlc0cxMTlIWTJlZ0RaTm5RU0NpcnprSkl4Uzd5SE9BNXdZR0F2eGpORHZuSEtKSHpPUDhhRVI3czhTTE0wSkNCcXJoWm9ZY2gzcnA4RC85eWc2MFdCY213M2tzZC9USHl1RHF5UlpKUEpzOG11djVoaXJyTTNZQjY3bVRJM1ZjWktDQitKQnBYYko5MHNpcFB6NHgveVpCUVRWWDlyQ01hSWdlYzczNW5zT0JnSFdHMlliZzNqRTNib1pHR1FtOWp0cnZJbzladTAxMFFyRDJQdkpPNmg2OGI4d3E5TXkwS2FKYTREUnRTNXZTUEJOQjBRZFZMN2JaQ2hXbFBiWUtzY0d4YjNUYUFjRGtoTzVsRzFXek80L2IwbmJZS1BPV2xXdkZQTlhmREhVRURqMHlNMlhJaXhYU25YZnBhb3JGYkNReXY0MVZKUm5CaUhrbUxmTG1MSGM3OU5wVFliRWNJOEd2dlFaRlJpdjcvTmtTa2hGTTUvakdQMzYrVUZpQ1N0NmVWVmpJVkd3alBkTXZRRndVOWc4SHJvRTZMZTl4VnAweGhKclpwemEvUC8ybFRqdFU3MDViNG1HL2NmSDNFWDVIamxaMkpTSC9lWW1Tak14V1BRR0w0cFRsK3N5YW5Yb3IwQlJUVUZZV1JnZ1BmaEhqQlpoSGNoQVBkMHVsWUlzdWtKdHFOL1JRc2VGUDRTN3BTKzAzUDNNY3k3Tm4yM3A2ZVhGRHIzbm50ejZTZzVDSzFRR1d4SjZXUThQYmswdXBLMEZRdDZzTUtEUEZneFVPcWxQZ2xiM2RSMjhzbmQ5ajVIdytKd2xDZkFmVFlwUlJtWDlxZUhEN3BEblA0cHJmTmVLQm1Xb1BEMzR4L2haTzZEa1JaMEpPemtRa2FKTGFVM2p1M0RPaVNvNWpTaU42SkZzRlNvejFzakhKN25GUVdsdngyemp5QUtFWTI4elJoOTE3bDlpUkErZ0RORlJDVC96b0hTMkdXUllOU2JYdlQzd0doZXFOSWVGZUlnTGVoQ05HL2lDZHdRNis5WHU1VTNicUpVTEFINklYcVVSYVFqWnRzYXAyS0JmY0V0YzM5Tml3NUtyakdpRlllME9GYi9wenlxZE9DdUNOTTFCS3V0OWUreDJFdHR5di9TZnFKOTl1NEZzL1dhaGhoWXZnR1U0MTBWMGxwd0pCaGE1SUFFT2lIMmkvMVYwOSsyQUVzVE15YlNaZEtEN09GcWpyMmQrWHNsemk0aU00U3pGbjFKQTlPc2YwRGhxamcycDVJem9HdTYwQzFQT09pQytmNVBZVDg0dCtWNVZvV0RWNzh2U3BLQnU1UmVaVVNHQmtLWGRqWW5pVUc4SHZYYk80OTRHY2ttOVVWSGk0Y3gzNHI3ZTg0UUhWWHg5VW14aTBKZ0dySjhDcXVQajYwWHJ6aGFDNHFQOFo5WWFGazNCblNjdTJHWE5wZFdmbTRaN0FBSFpEaTE5Y0s0T0srb01PaHBoejRmVkF4YlJWRjZEcUNKcTVjZUU3c2tqYkFORC9Vclg2V2YxeS94N2VWRHJFWnEydGhuOEI4VkdQS0ZIWkgyanJMN25va1hhYWRzeWtJMUNwb1JhL3pteW5rY0MreHVoYngwZjZGdjNIa1M1R2ord3VmUWQ1VUpEQlZDZ1I3eWR6WVlZVnY3MUpiWXlXdUVmNSs1Qm9CN1Rjbm9kL2Z6RG4rS2tBcGpHbkdjZ1liTjRNWURFRURkZXdtQTIvMHBoVE56cjZUWEh1aTdCaDFLUHhGcFFseG8vNTJ2QkxvRE44TFZsWENrTzN0NFkwcWc5T0R4L2k2YW5RcVdvOEZjWDhQeWpFOXV6amFleVI3TUI0bk04UmswMHlFMUt0dEovR0QzZWMvd29KeHkyRkZiSnc0TUF4cUdFSklPRzZTOGc2ZnlSVU15a3E2bGhUekZYY0FSUDhoZlp5eHVZWVpWR2NwQjFlRytXaGNhYllYK0FETk43anlJckhXV0o4ZXNBamxUOUFjZFJxRlFCbmgrYStoai9QQ3MxMDF0cTJUem41OHA5RXh0MHp6S25vV0RLMFhpZTMvZVpZYlNuVXNKWGwwdkZJUCtCdzJ3RUtkcVRHNndJTUU2ZDU5SWRWbUJxaStWVjlNOHgwTXRJZjVmMURzSGZYRFYrRmxROHJlaU5HVDR1T1FLcTJzS1BHUTJVY2hKekswMVpCdHQ5T1dCY3JmcEpaT1J5MVdRZFFGbE5leWMrbDA0TmlQVHpvYVVuYmp6OTRaVWhJcS9aUWNNeWNyNE1JRDU4eUVnRGNoMnVCNUcraVdoc2JKb3pCeVp1Mk5Na0ZaNGZWL25mTGtrVmwvWWNLUlBna2xiR3d6ekNTaFVRdEc5QUxFYTd4TFcvR0NtV0ZSK0J1cE8yQ0QycXpSU1NKb29HMkI5Vm5HU0J6d2swRDE3SFRuV2E3OW1wRlhGb0trZ1dqTmh0a0Jrbnl0eTU5V2ZBbEw2SlU3SzFBZFc0cDduMjZraVIyRFdFK2QxTytBaDRXOWs4QjZqT0VOWXR3eVoxbWhDaHNPT2pKSnhFMEJaYzRnY3JpSW1WZnNka3FsVm9sYzFLWEVXZFo2WDhBODBtRHJIZFZ4VkxTNEljaUFMRS96ejB4Y1IvakNFMEtWK1BJSFowYnZGSmlEbU9JZ1VTaWt1QXpkdnpKRGpiazhpNjRsb3kweWlINUFHYWJsbUVOTTZSSENEVFJqZFlCS0g2TmphOFREbWNyc0hQbXltYUx2d1VNdERhTEhMby8zMDdZTjRNRG1pSlhqWE1pSG9YaDB5NDJMSzNGUStkd1ZJS2hPcUFML2FDbU1zWFNXOTVMWHdIRXJYbWtwTk0zdm9ySy85QnZQZm0vWmp6T1ZOUUVNSmtPRXVSTmltSTlGNEhFZUtxVGMvT0M3b2VOS2l3ZTA5ZEwyc3JlTUtxSGMwRmNtbUEvbjJUL05nTUN6enhhaW9hbHRoWWdYZ203Q0FlYk43YllvN2tXTXo4WFg4TkZ0c0xES3Bjd0hwekk3TzhNZzFvcEJjYklQbzNhWkZBQkd4TVFITi9rcFVxTnY1WHYxcFdFS1ZtLzk4bGxpZlRTdFZ4MWFMSlFuN1lmM0ViQzljbmYyRHg2YkREb2xtN210V3JpZU0yNVBiVUhHNU5idDd0UkZJbnVKQVhWUVZHZlpmR1FmV3Nia3J0NnJ2UWhKOTZsTmVOMzQ2RTB0bkRuWGdWN1lneUZDc2h5VndOQzR1RnFWKzRUVVlWajcvMWtVamlNQndCTlB1NklWTGwvc282WDNMbkV4MGJnWWtNSW4rZE1YMnA5YTc1TEdTd0Y2cDJBQmMzbkUrOGZYb2Y4YWMydlFmOWRVOFhBMHNoT2J1aGhldmNIK3MrT2Y5eWVFQkxMaEduMVVtWXlxUXlBbGsyUEF4STdtWEdTSDFSM1BYS0VqbXRjVTJKRFM1ekFxRnBRZTlNemFtTnRSc2VRTkxJblZISnlFQUU4ak0zY010V3BzNWEydW9Ia1Z4a3BaUWVncDZvaFZjZ3ROWWxXTy9CaUszMUk1N3dta2N3U0xxbmk0QWJtWU0xREZqOWtsMDF1NWhBRWphdVZRNmhSNjlPSDJLRktxUVJFRXNlaWRzdmJhNjkrN0tyeEF6MFpPRzQ5ZW5zRVhZQ2xwRjlPSHBaNlRzUG1hejdPOVVPa0NYUXV0TEV1NUNUc21aYkNFWmRydnpTU0g3M29OQjdWa0xxcGcxMExuWGxzdis0WmlZUmZXNFc2MUJtQzRMbzU0N3dWQmF1bHoxaFB5ZjIwc1FuTkIveTdqZ1JWK0IzK09sd2U0QkV0VkZrNGtIalRUSm1zUlUxd3QyVHBBeDAvRU5Md3ZlSjF4bmZkSyt3eXF2c3BJUnp4V1RPd1hWNFRmQmtiU2J3K09PM0NPMFRXZStZM0ovdnJTTzF6TkFsZTBPdkRlNVZKUzIrUFdsRExYejIxNEVoSi93VU0vd0RqWFl5QkEzN1pES0pGWmVKYXFmTXJJclBiaUJyQ2RxQjltZ0lWR1FTb3M3bFhOWGRoKzNITURkMWxodW4xWGhrWWZkQVdRbnBMdnI3b2s4Z1loc2J3SE8wM2IxbkcxZXVzd1lqQWpCa2E3Zm9iQ0lRMy9VSXQ0ZkNuNkt3THpYbjJ1S3RSRGgyajlGSHpOeXFZMjhFa0dCbUxUc0JNVVRYREsrSFhNaG1UQjBodzFJRlc4SmlIV0FrUDZQM1o1Z2tMUkhvRFBqdTUrMDIvK1ArcDJRZ2tDUWFjc1o3SjlpYzZTaitkSVBNbFhjUDdYN1k5M0E1NWRvNndKOTFOSlpnZ1Z4alRFaldHdUpSdDgyaDZwMnlRY0cxSFpJa3d6aVRSU1lYMFpEbVNxcG1aeUpCeW1hbnQ0RTR3cnJCSUNBcVRpYUxSR2hNVnVmdmtBaEhRSmZadUtUTGtjbVV5NlJVYUVOZVRGQ2VsS0dHRTViRlpHT2IwSS9xTERoR0FNaVh2UGc1ZzR6UTZOTXhzaGExbFhnTHFpVGlRZCtIbVN6MENmb0JrWDAybGJoSzZxOTc3VmZ5QkxhN1ZCbFRyUk1xZVJocnlFZGNnQkZxNFFBZzdnWUpRNmdESTBnMERucHh2dmVSdXEwd3BwalpDTWw1d29PZk54QXV3SFBpMnlMNkxDeU9WZkZzTDhnVzJSZEdsdHdaR3E4Rzc0bTdWVExzNklySFhadjlWOG82USs4VHZIQXR1Z1lOdnhuT0NNbXRJSWNMTmZmNWdESHM5eHRsMHdkUTVvdTA5RzFicC9zMXBZak9YSGZ4WmVQemkyNDEwb3JwRnhaTGJsL2xuRGZoam10Qlg5UU82dWNWUkFoeWFWbGpRVU9jL2c1UjN0SGVTWGMrbVA4bDdaYTJyTUVuM1IxVS9UMHRkQ3RQYTlxWUJCUDZTTHY4SG1iYmlMR1ZNWUFia0xmcTllRVJNNWdYcWRXK0M2NkhxdnVreVJGdW5DQUg2TVpxY25mK1lwMWtON0xYSGx6QWppWk45cWN3K1AydkJlS3phc2hNRytyTGs1aGw4YUhKUmZoWDZ2ejhUVGNsK1VxK1l0WkNpZk9tRjA0YTl4VjNlRmY5b3AvbDJtbXRHWU5DWEdWSGd5MllNWWxjSi9QT2xkWWxwOXZNOVAraDhVR1hCelpwaFZhcTU4dURYWXNPWWFkRWtpcHF2ZWxxOUxZSnJ3dHJORGNHMjFidHVrL3pLNTNFV2IvV3Jrb0ZBYXJqbGxMZTBPdkhWM3Y2UWtQUGNsTEpPdXdZR01lQ2c1ckFzM1BjbzVQQzM2aHVuVG45MGVGOWhidnlKVE12dk1YYUFoL1E1d1poSE81clExdUdVell2Sk0zbHloTmRsQmsvZ2NNNitwT2RsVmpNZlgyTjVqaFNQZ2NqSDlJZTVJZjBpVUQzaHUzdHdveGdjemlWR2xrdGpTR2JFWERjTmNiK2x0SG1Sa1crY1lFQ3lOeXhIT0RQdHZTV2pBZG5laEtlMFRhZUpGbFFFREFJQ042WXBvQXNjcUZzN3RuOWM3elZTTDFuQXliQmpySkNHWDIxTFNIVDNsY1d3N2ZBRTVtdmg0dDJTTHdtWlZEbmhWK0cvSlQ0ZXZpL0RjL1hnb250eW84SUxaaFZvVThYeTVYZUJOVWRSMTVuZUMzdUd2cjQrbEluSFgxSkpzaytYdDJsdFNuZ1poS3U0Q2o4WkZpT1dJUUEvODVROFVQRnlQY0ZUUUcweFFXdGVZVzY3c1JXQ21UVm51dUxuVWZOa0NvMUc4OVBrRDZicVQ2N0QwOUU0VVVYMFZlZVBCVXVVRHBvMVFLZ1dRc3VidDZaSzVpNXhJdWNwVlZOS3hyOWpqMWJEcUNFZUVLUDIycmlIVjBPUXBNdVhJZFA4cDMrMkllUDl1NnNNNlBMaFlIL2VlS0tzZ010NzVqM2h3UllZWnA0dnh0ZDA1RDZXMVZwOHBtSFhVT25qQ3R2b240TVZEdUxUZmFRSVZVYkdaWHMyaDVuNmNNcmZyMU1yU0thVkFmU2VYNVhMb01idGY1ZStGayt3V1pEejcwOXpEL1RFemlENktSNTRjNldqcExFNmRucFlXS2NNTTlYNmtVSDFyUVRaWEc5UkhsRktndndxS0hQNmZhbWw4b1VjeTF1Y0JjRi85Zmt3ekdkTFRTWWZJUDl0UEJnci9TUW94SXlKOTRPYlhPMWhmVEVPMjFTdUdndmpKdVZ4SVRjNVI3SHpiU3Y0SklIeUQ3eXpBTjhTUU1pb1doL0xIVkl3VnRydWxOYis3S1lnYTF4MUhXRFJDQS84eksyZllXOFhRZkxBT29rUTBBS2xpWDZXL0ZkNXRJY0V4bFBKZk9wMnM5RWU3cTFXV2NnRlhNYmw3dkI2OEpiQlBNMjhwYm9paFB4S0hJTjI0NkRWTW11QWRKTHhpQ3I3WW1BVWtLdjZkbmRDRU5aSGs3UStKOWRvOWdrOFVzOWVWaFJQSk9NcytrNWVKeVNSS2dzY2FCRXp0TEI3NHNrZkVyeDBteFdWSlZGQ2hRemlnSjJPSzVIT2F6SE5DLzA3TkpYbDViYzRmMGpjdHBFakROUlVWdXd1YmtFQTM5ZDl0aGZLQ2hVZzF4MmNOdEdpWUFnRUZNcWJ4Yll0Z2ZxVElpOWlkQVJpR2ZpMTlZcWsyTmFyeGVObXdlSlFHaFFnU1IwZ3RqTEc5R0JBV3N6T2NaUWZtcFlkUHZZWGxXcm05aDR6TlQ0Z3ZXdEVMZ2RqUTlUK2dqSU8xRkRsYVNKaldERjVvdWFudm5HeU9JYUNLQkVGTmxLM2RwNEROU21Kb0Mrem1GTzI3RDNTWVdVQk1nRVNCZkRGS2xTSnFaRlVPWHVGSlFpaDdmRjl4Y0lZUmROcGNlSTBsUnpsSERhc3ZUMzdvZGJBTXNlaTJLZVVvVXNMZmhZY3FHZzR5SXNpRzBYVU55dThZTStZNkJWbTdadWtEdmhDb0pSSXd3ZXZEYUhpc2k4Q3FhYW54VTIxQWk2T09SWU52Qk5KYzNhOVJLSVgwOHRkSEEvSEdXdEg3aFJCTWtDNkY2dHBWZVc1ZTR1L0dDcHdaYmtVZkUzWmF1NzFuMUQ3L0VOMnVidkN2THJPZDA4S0RWTmJjSFlWTkw4MWFkaDZTbnpuMGYrbklreGNWRTUvTmtuYWZSUGxvdEwwUGtzL2c5Z08vRXFQTzA5YVZTd0UrYjJKN3RrMkFIZTRnRmVuVHY4aVhiaERKaWdub1FSODltdS85L1UrQ3NRZmZyMGsrMFhvWXBrK0JsWUVsU2Z3cWovQ0x0Q0d2cG0rY3l0L2JpcC9Wc1RoK1pEOFZGaU9CVE5TL0EwVGg5bzZ6aCtWd1pxQWRpM2FUdHZuNlRDMkhLWTNEeUlYNjlxeEp6NW9pMXlPZHdQUkgwTU1HYjlTMGRoZFJmNzBGTDN5d3lrTWhvY1U0Vi9vQ3lSZmsvMEpkTmxtTXdCWHc1T2Z0WjNLOGZabjFLR21ydlNockhxU3J0MngvUUdnQWw4Z2laQ2kwb0JyR05US1RITEZKUkhvWmpYY2tKdXlZTzhvQWhSbHhsWjlPOTlnNXZvRkhSQXVwT3RsY1hKWGI3dDByWDh1U1BSNHNEbmxXdnBwMGg3eEYrRDJROW14Um1HSTVCWW5EYWdEZ0g5MURtcnZnaXNPOTlPUFBBRitHZksrMnQxNFpHQ0dDYlRmQ3pDbVF2UU1Pa3BLaEliZVViWDNlTjlSR2IrcDNvYlBlTnJkQy9WSUVTd2lNUXB2OTlZSXpxdEhqTTZPM1Avc1BZUERNVWx1eHNPV2U5cXlXb1ErZHlQTzFFU1BYSW5QTi9xUDZuMG5TSDhBNmllVGJacGJFVWxvUnJ2ZDhsNHljU3hhYS9nN1BPVkwrTUFGU2RxcG5PdnB3Mmx6ZXZjU0VhbFJQWW11ekpIYkpCUnBNK1ZncWZkb3V2SzhxanVFVEI1MlpLY05pT3N1T2NuelBvU3hvMlFCRDVka3Jmb005WDBFbGlzWnF1MEg2V25sWnRqaEtVVlJRYXdLVEQrWlZ5L0RpSTV3ZjhNUnBSTGl5cGF1b1ViNStVSWg5THMyQW44YWh2M3VWdXoyVEhiamNpTTJCYVpoZzRyRFVIL244MGtIYVRqU3l0RXl4UHVHMkJXOHBGdW1uVCtuMFpqQmtEMjR6RjA1Umd2WDRCV0VqRTluQ3c2V0lGdXBxVWNSb2x6WEt0QnFNNHBDVnRDaDVkc3JZS2FZQ2h1R1hmNG5TUlA4ZDIvMWIwRm44QkIxMmZXWUl0Qm0vWTN2d1FaV3ZOS2hEb2dEeHlwbUxobVZ5SGgwdWZmb3ZkR2ErSHVYM2o1dy95NU5xMTFhbmVMcFUvTFJZcVNmVXo2NlczOGNOSEtVUFVzWW5vSUZ3SjdDQk9YeXdCNmoyYVVCVG9qUWVCK3VvSlA5NVNlakFhV011dUhWaFhNMjNxNmJWOXY4ZUsyay9MYU5QekpoM0FEa3JwS1ErVEhDRFo0akt5cm9HcEMwQVV0T0tXR1hjZVFaTy9jdG00TnRyK3B4b2NieGxVTENFOGhSdkNta2xRK2pWSUhyemNNYkVHSkQ0TlFsTGlqZERjVDB5ejNOc2NRMnkxWStacTJIbjI3RXJYTjQ3NVhjUkgva0l1MkpJcEpNOU1JQ3Fzc3BqZTE2V0ZONkc0dWswOFpoWUQrRHlaVXhmbktZUDZkVG91OFlsMTF3ZmptSm44MUJWeUQ4eXNWWTRkNHhVWjJ6TGozU3Jpb1ErTmh6Q0RyTkkxOUNyZVREYmZhOXRhRzRWZUVtcFp0ZWNwdnFnN21MRGV5WjNHdVNsdzR5dkNMTDEydXZzY21BV3h0S2lGMS9oaXh1WnVWeWJ2WXhZWUUzYy9QblZUczBma2p4dHpjRW00R0s5MVFaR3dxc1loT1FNbjVMUDJJbk9mbEtTdkVPR1dlVmdHVlYvQ3pITWRCaitZMjU0Qm1SYURuSWRhTmpCT2Q5cGg5UCtxV0hDTXo4L2Zvbk0wc3JpWGtRTS9jaGo1bnNPMDRScUVTSDg5MjFJZllzYXQxRlpIc3dwbVY4d2lqZ3dUYWI4U2FPOGVUUGtNaUsySVlmbXk0YkFmWTdzYnlQTE9KMWE3T1dmY0MrazhUdGszenpSRVd3a0psSmgva0xIL3hBbVB0Rk5WekdzVzdpMUFla1VUK2wrTFpjM2FiYTBUQmZsb0xDSVZpbVE2bjM0VWNkdGpBWFhhSWpPKzJtUExWd2Erc2RMOUJ1TE5NcUlNZFJjQXJQbFVBaTlwSytYZnIrYnM1WjFwWkpFdkdONXdjSVk0QlpNYzU4Ty9wVzBPVkc5UVhOb2pMR0ExUmVMZlN0WUlzOThpTCtBWlEwZ0Q5Yi9KbDhmMTIzbS9Nem9tbitxSjUxMTUzd3Z1anRQNzBEeFJmY3FObHBhWmdQQlVobjQxc0RpclFNSEYvOVZzZXUzQU9NWFRxQmpadVE2NzZFZmZydnBsNHIwelYva1dkSmdqOG1RSFpUNUN6amhaY24vREdKQ2t4YjRrQVFxVGRReGlTWnNGQ0tjaU5kdmxMbVVXbjlWQ0xscW1DMGZjb2ZVckhJWTE4bXBId2h3NkNUR2tjY3VPVEowVDBMRVNaMnFFSTEybnNRVVBHRGJuNmlKSTNqaCt4YnZ2aEZVZDNWY2l0b2NmTU5JT21ZdHAvQmNWVHBzM25HaFR1ZTZ0V0VReldOc0NBVkY0YitZN2dkc2R3TDdNNzM0T0dWTTZ1N1JlRTdXc3ZuM3NESkIxUU9XLzJ3ZWNjT2l2WDAyQi9mSmhkTThGS1RNV0I2TkJTbEJaN1RQekREcVZEUnFxT2VxUnZ4VWQ1NkRPQXJIM2lsWjFuLzJDYzV4eUJoWGJuTGNYREtnaSs0V2R4YmZ2ZWREYjVQaWlJMENmVU5VL0c2cFk2UC9Cc2N4VTVxelRsdGRsTDVpUWlJQ0JpTU90dlVVWksrSmg5MHBsa2lDNExLMldVbjA0TTRKZW93R1JCYWw4ZnRPVTROaVlObkpJRVlXbjJOQlhLRnhYMHplaUxHcnFsc0RBVlJQMFRZR2dENi9WR1FkU0pRSVRvUyt1bURLT3ZCNmRhaDFWSGR3blE1V2tralE3eER4YUJCV0EwcEU2bTNwQzdaTjlsaE53NVloRDd5blRWUEMxTVFlQTFXaHdXd2FJRXNHYW56TSt5bi9ZWDg1ME1YL1YxdTBFQ3l0MERQMTMrUm9iOXZZRnQwTytqUFNkaUVML0d5dGQ5Tnd3b05Tc0xJTDMvQnBnaHFwc29JaFl2RCtqckJwdnpHY2YrNGVTZTB2dWU5d3QwbEJLb3ZwSjFFOGRMc2czVUtWM0VrTENCVDVGZVlvQWNiRmlFYjFaSXdyTkxick5jT1NiaGQ1Nlk5NkJucFlpeFppb3BaSy9QOENKclNqNS9XbXE3TEttVENnODRWZTVEeHRXYlQwV1BZV1NmVVpZQ0MvTnBtZDMyNmJWUWo2bG1TRXNhZDdpQ3g2bk0vRjlqQ2VUeE8zTWtoWXRLWVpUeUtPVGZUNnVpNXhCRC9Pb1JHMkwrZ2JUVis5bVErRDErYjNSejNGTVA0S3JIamhrWENTVmRxdVZKUGNtSFRJaTA5R0RaL1kyem9TSWNJMUdlSTBiTkZNcUxNeGZOMXRESGZmT3RjdDN2TjlwT2V4L3pGNU0zLzk5WkRmMHhLNUxlSDdNQUlVWTVGK2g4U1htTjNib0RYL1h0bGI1MVlMSXY4bHh0WVdwaTVhYk1vZE9PTmdlcno3N1pvc2RkOUc2a3kwYktqbGdmUXVTRWlyb0M3NFVwNXF4ZVFjcGY0eURtRUY0ME51azIwUk1lWHMwOGtYUEJ2bWJ3cTRJTUhmb2czMFoyS0hLTklsUkdyVzVUdldCd3J4czdhYnBBdkpmbUY5T3k3cjdBYzlIemhZZHBBNkM0WlNGWmNGNWdoUTZEdDlrSGFaRmFvNUZhbk01Q1l6U1FjN3Azd1A4YUlvUzhGeUw0dXoxU1hxM0wwM2RONUZsakt1dnkwdVJHMjRVWENyYkVoZzBNc2plU3JZQ1VJeGtpM29LV25ZNU1XMW1mQjE1SWRFMTk3TExBbStyb3VHT2dYWHVJdkxWR1RrYm1XVXdSaXpYajNuZ2ZVeUxrakJyZVp5RUZrVXZEV2lMeWxlRzNhalg3ZFBla2hsZDhZOWxOeFpuTDN2RGx2blA0QWhhYXdIWFNvS0Q2MWNBdHptL0I3a21Rb1N4VVRhb1ZPeklDcndjdUxDMFNHcklMeFp4aVFSUE9uck5NQnN2NFl6djNTaEhEcWJXVVU2NWF4eGp5NEloYmtZb1lQOVNjUVJDL0ZicmNPSEhqaXBtSHhzU044RWNHbHdPeDRLcm9WQUVGK0lJRTladkRjeVFTeUkzVjNUaG0vUFRQcUFaTGNkbyt1cWc3bHlpZkRjampWU0ZaclMwVTFqdDZJd0FUSzB3eGhpZTdlQThTc3lEdWQzNzlVRFk0a0pjMU9lcjJVdkpuNk5lUGUxTmNZdFlYVzYvZ0ZhT3BhNUlCYVhLSGZZaDFZN0pJOFhQbDZXbFlhbnpTWHJPN3RTNUVtQWNNVDVUQkxkZmgwVjlzeFdONkt2QzNtUnV3UTBpSytDZER5ajQzWVFzbE01ZUZobDFXdTFjcGxteXhRVDh5c2JrNVl0NEV3SjU2d3FOQzR6V0loSDI5eGJYaFgvQThsRVdlNWh6MWxmVVNMZUQwa1NqbnFiTHUrSUR1Ujk2Z0plUWhPRytLUDgzdnI5MVBJM3lIWWN1TTZjaTVoaU1yQzR2KzF1elJKYndjdVR6eTJpQ0lkbGJseFhPTkVuY0drcnpiOTNhSjJsUWRaRTd1L1VVdjg2cTIvaHpGSzdYbndYeTVSUDkrTzgxZ1kyWUlqYmlMekd0aEU5aE5oUWloQm9DemhRTXNjMzJETXpXcHNjNW9tYVp4MENZUkhkVlV6V1k1STF1M0lQUjU3dVlJZ0RocDYvdDR5WGJyTDQxWEQxUkJyQ0xHMkM2VmM1endmQnExdEpyL01rMHM3enRLNGtpKzg5TnB3dXg3ZDNtMHBTK3BEY2x5dUV3czBZYitJQUY4Z2VjNk1pdTdGQlpTZUhzdmxIaFZQZ2ZkUFhiRVdYNHYzeVl5dE9JQlpEVE1CK1JSK09IeEVQbkpnMk5CV0U5Mk9XVENEeWhNbkw2L3F0WG1pWUNHU0kvZjNoZEwrNy9hcmxCdG9NblM2VWJOVXQ0ZXN5dEw0RWViY3Z6NnJveWd4M2J6S3A4dWs0VEIvYmM3ODNja21SeE5lR2czakNLVFoyR293WFNGNFFvWE96MGNpdjJYc3FrN3czcEp4VVBZZE5PME9BZGsxQXNqZW5zYWs0eDVXeFZ0VEFiYWRCWEtFWTVGNGxTV1g0a2tSZE5WLzNqNVI4aDlLUUlKS2EzU0hlUDhrbmlVdzBWUkk0blh2bXNyQkY0dWJjd2NkSU9hSXFlM1RJNkluajZqa1RzbHJIS0NJT2NTd01pTm1sV21XMFF3dmkwRXdZZS9kc1R1WE0rLzlwUGxMeXF4aXU2cVZqajdNUVJPS2JuY3pQVEZZWmF4aW1pelR2UTZQUjdwWjRWVHJOZXhQckVIcTRUV3ZHODZBak1vRE1vUVlVVkswNDFJMGk5WkhNM0pHZmpwODlqeFIzcW1abEkzb2pBZkNTc0d1WnI3WnZXd1kzQ00xcXpmaDlhTktFWElSMWRGSDlpNGpmMzdtc2dNUmJkbGI5OWErVzFLaTZ3RGxsT3RIRWt3dXU1Y2lBOVFIRkNpckMzTWduck4yRVorajZQKzRvaXNaTUgrQ00rTEY1ZytENjJxVXNmcEZTVVMrN0ZsbnFYMW5Bczd0SUZCZG1WYkxJTmwzb0tvZG00RE9jUDREek1ES3p1dU5qVDdrUDhKMkNUOEk0Mk1TVDdpQ243TnlyL211byt3Qk9pMG1VZmlFQ2d2RG1RQzVuOHA5Mk43bVJPY2gyWWJCMkEwckJ1djVmS2EycnpsbGtIQlQ3YXVxRWxQRjJPL1pwMFlNRXpzc1J3Z042YXU0VTU0SExnQnRYVDlqakhJYWxiaHZBbUZXNC9QaXh6ekVyQzR3eVJoU1VPTmJPTlEzUWN4Z2tyTWRaZDFuZ2lROExLQ3ZSUndNelNOd2N2L2I2YnNuc05MLytBOFpnSE1QbWJmdjNTUlZxL0Rmd3YvVFB1RUJqL1NhRVNWeGZNVVNJL1FhWWYvVGlBajBidFlLVGRZZG5NRFhMOVIzRk1RSjlFdnBWS2N0Q1BJWVY5YmJtbWRpckNOazhKS2VhV09UeFg3N1h5UXNXck55SGxYb3NRbUpvUVBPUXZvMEo1Z2VyTSs3QlRTZ24xU0NDOUdKZzdwNHloSUthMXV4RXZxOE1mQXBUbUhaNTlheXdrQ2lLeURYQ0JHeDJGZGdScGZ0ZkJSNG1NMy9ySXZ6anF0OWkwWmJKM3ozOXd0dEZ3Y1dpNnVoN2FZamZ6Wk9BVW1vZ3NNTGJOK1B6Y1hDVE1PUFNBcjU2ZDVobE9WcDhKc3IrUnc3WCtpL0lhNWV6bGZITkZjdytOdnRFTlFheVZPUitjbXhoUWNQbEFJUG5VRk9aZDN0UlljWkpCcWQ1SWF3NXBSQlI3bUZHdDIzVWNoeXlLOXRTc3paRExmWWUxQjExMitwQTdVWkMzYkcwM21Ma1c1Q0JER3JJWnZmeCtTZWgrVDgrcXZSQko0anVLanNTTDlPZE1TMFF2NkpUb01wSE1wVDV0QmpYMnBMc0ZiVU5WL3IxaXRSSmxMc2FWR3VKbHM1cDk4bE5hTjNMaERyeVVvTTMzQ2dEVVk5VVp1SG1QSHMzMTJ0ZElVVSt3R29ocmZXdEh3Qm1LaGgwaHJ1YXNFOGFrNkc4ZTRRMHpWM0xOYzBhSjgxdk1hRkU0cEwyeDJ5U1lNNHFBUWdFdUpyOE40NjZpRVdCcDZHYjFSckZQOGFRSWZwUUVIWUc4Vk5pRWpuOS9MMTg4TFpQODNEYzBkOFcrTUJsMmFIdkMrZTNMMm82eHdIU1ltM3QwZ0JzMWppSWJBN3JMUDVteHpSWktxZmt3MnlYMHZUVnBXT1Z5Zk5Tc0JaeU5aRStyTlMrTXpjVVpVQTlEOTNsOS9lU0R1VzNEc0J6b2laL0oreDZiTTFmR2FOcFYrSFZXdzR5WkJwdEhuZ2tLOXRVZGRxTk11NjFiWVB3cHM3cWtFMUZ2S0dGR3EvUFZVT2oxbGs3dzMvMi9BNVB5aENOMElKUGN5Z0FuVkNMZlZMd0NWUTk2RSs4SHI1Tmc5N1ZKaEdhTkhsVDRuZzZYQ2ZhaDRRTUJtNUgwWmpNQm5kMEdLL0M4WDlyNlVoaHpzUXFVS2pkVUpDb0t1L0cyOW1mNEJvSUowWFpCU2hucDdrR3FFSWRvaE9DalNETGJDc3VFSVlYZmxuK096dllhVTc4bldjV0krbHRxYW1uaWJxUHRUdHJzWjhTUFB2TThYV2hIcmdQQUxybTliQlRXN2Qvb0swbFI4K3Rnb1MvRHBzUTNHd3N1Y1l3Z0Q3ck5HY1RlUGpRczEranM0UHdadzFCTTJCUmlSbndlWThHYzdvV21NbWUyaENqRHlLVU8zelRDZjgrd1ZjUjloK2JyZzNudTIzaUxmWDduVGZjS2RrUDlvU0lWaU4xL2Jva2tyaVBoWktWS2dsQXpySEM1cXB1K05nb3dKdFkzTDRNazkwMExtU3ZCL0U2NXBOcGZ2a3VpTjZXTXk5MkxPMHVqcXVWalZJTEZxZjhpUU5ZUUZ5dC9UQk80eVZndGZtVkE5Tks3M2JJRHdkOU9GYXdHcGl0bmxSMWg4NjVpWW83NFk0bEZIU1RwM00xTWRFUFdkK3ZkUExIaXh0TVE0bDZQUWZaUXorMFdXU3MvT1FhVjU0UHk4dDNsdjRXMzQ3cjFocklsQ0FQWG4vRXJBc3VLRUNUR0JvS2tldjZnTk11dkh3WjI1aDNCcXdRc0hwUnROV2g2MzVPZW9uNWJUOGxuVHBxS2pBOE94Y2oyb1Q2NEpMdk1vTWJWQXo5d2dRV3kyU2UzYnFTcXhKVmFpWU1sbmVPYnhGeEhRaFRwbTJwY0xjMHJ0d3BKVHF1YncvUVJ1OW1XMGRMNjIyajk5enVxcFQ4aW5CRDZhTzFlQUtIb014ZzhhSkx0OFNuei9oNUxpYzJDeW1oTnZTL2NQSUdhWWhqK2xEcGJUSHl2RzFhTFZ5Z3RPMGRmSVMrSVh5bXJHbmhLMWU5bngrZHpRNG44T1RKeXlueGJiTi9DZkhaRklxZjlpbUJ6OFhuME96YjkxSU9TNVN6K0xjVGwxS0g5ZzFyY2xVWlR2djdtUE5rbm1zaGwrY0E5dWhwb0J2dFdMNUJmbVBqVFF6L1ZzZkZMSXlmdEEvYWlQemo0N2htU1JjWVlyb1BXQnlPTUZoK2crbXM4UEN0S2V4elBMTW80QTV5RUlpVjdEcEo0M2hWM0YwMVVabHRURjkyVEpoallPTHB6ZUxiWTRkVG1OanZoQzh0OVk1ZmFYWUZVeWJRVnZsVjhoNmVpR2dpUG5nazRSWVV2QkRreXVLdzZqU2ZnQTVPb01pS1FIaTI1QlNreUp6QlJEQ05FekE4OUxkVUNmQ01uT3gwemRaMEJ6L1hQSVZVR2orekYwZ1lKVklIdHZvS3p6dDhGU1BTMjJLaFdreHVmdm5vQzFzMndoK3RXak1hU2dpUmtOcWhveWlqNC9weCtTSkF3K3h6NVlQQjNjQ29XWU9CODVDb1NrcE9nUmZrRGgwREw5Rng3U09BanZJOUFSb0x5WEtWZUZJVEF2d3VOMTd0cVc3NjZZa2JxbUU0d2ZkOW9CTlJGaERYUEtyeG5Zb0ZUbWhWR1RvS05QOTRnaTBqNTlhNk1xRFBSYmpaVm00aDdDN24vcEk1T3l1MlN3bWZxdzMwS0xtb0o2U1EweVA3WHlhT0F1WEg5c3JLMThObDYrNkZvT2RZbU5ldkZNbFFJL1I3bW1ra0tBTDMzZUhRa3N0NWZaNzg4VU43SzI0UE5WeS8wYmNUNlFMOGNGWXNMdmJuTklmR2c4blVmVnlhcVFRbXJoNHQ0VGJxZ3RyOUk2VXdwZDZ0cE5UY0hpRHY4RmZEOWpzNzlTLzVQY3pmRDlUZitmMDAzeWRkdURmSjlTUytUMmUvbitrbGZKNnZQOC9xRi9QNkhlQkh2MjllL1d2Nzl2bnYxeC81Kzl2NSt5UXQxK3N2N1hXQVVEY3QzRGt6QWlnQzkza0JTUmlVN0hjeUswamRqOW8raGRUNUZ0UFkveVRRbFZ3dGZPcmgxTzBOcGVVQjR2RzVXcmdWSTdva2tuRStmMjdQM1RsZXAxYjBZMG1LeEZGQjdySTh4WXhVdGFtQkkyL3V5Y3hKZGljUnRob0VjSjYrRmtQMWltZ1EycUxuZUN6UDVMNkVXZUZ3RjRYeit4c3VBT3JmRjVZcUZRcVBFWlFobkpuZ2xqQUhwKy82UnBJS2g2MjlsdGhnRkpnMWdYVkhKZko1MUhsQXNMRnFpY0Z2VDB6L2ZEVHhiYzg5V2IvVkRJUFFFb2ZySTFESCtYYUdrZzkrKzBma1Q4S1lRUllTdDROaDlxMStqa2pZOGlhbzZldHRqK2Y2a2FJMHdPRUJpU3lxaVdYVURGdnpkcG8xUDBFeGVnZkhSaVpMMnpGUzhvY29uK280L3dqMFJ3RmVxTEprb3BtR3d3Sjhua0hWblZ3TTZFRC9idEhmcnRSZjBuWHB2OW9UZWoxTlpCRjY0amJ6aXF0VjlNNW52SXZrc0FuOVV1ZzJDaFN6a01uWE1zZ3VQZER0bDVCay91eG1sbVZjbllMa0ZYOGE1M0RFMmRtdkk2K05zUUloOE1BU3RpU05kNGI0VGRrZ25MdlFaakkrZ3IzQ2p2UGxVQ1ZCTlhaRDlmUXRVZmZ5ZFh2ek5sQWl1dURLNWc2QmxLR0VYS1E4MXltOHh1YkVJRm1DY2RiVDVKWmxWMWtySWFhRWNGb0wyL2pVckVrVEtJV2dMbnVEY1I3SWNzWWpiWGlOYnRLYnVUcC9Pc1NCR3ZMTDJTVFZNa3V5aTQ1OUt0MDlEOXdGQkRpMEFMRmRFWG1PMVVIVGRiRUhnV3pyNExHVUpXQkZZN1dEaHgybVREYUxSaEZoRkozTVJGditpT1hFWHg3dG1VNlFpRjVnODFTb2dkQlhOTnhZdlUrbTdReDFDeXlWRUZJQkxMY2h2ZHlVU1licnZMTTEyd3cvMHN3cGVGL21yY3F3RFh3ejFNS3BrU1NlMHRJVUhPd0lhc3R1b20zcUlydnZkenhTR1JkV05ONUxiNXZSTFMwSFVjOXhja05jOEhrSDZxMGpTcHMyOXg3Ylhub01ZSXdNeGFQVEswUGtSUkhwVFRjMFN0UGxVTjhiOXVQK0JMaWpnRGphV2xQSnFiR3hFazJDTmhSSEo3N25EeFo1cVpTQmJoZE9qa1pwTXRZRkcyWGMrZDA0NGZZSXd2VUcvRnAvS1VsQnkxSEZrWnlWbksyeHE0dVM5STBsVlNjR1g3OFAxbExYa1F6d0FpbHY5a0xlSFJjbFBCNDBnYWU1NVZnTm9JR09qTEo5SXdIN2I3emQ3MmpXK0tod2lEakNRVFN3bEdvSExtdnRzNEVoWjYwaDhEUXE5ZXZzeHRGclVrMXpLdFMySDA5OGVrVzJqTExJenRoM2dZU0JKa29hd2JYSndpRnpnL3ZJWlVybmN6bjl6RmN3dlEwS2JVVW9qMk1pN2JhSktJOVJiZitGSURNZTlrekFPelI1SzVkMEJxRVFyeGpTSkJwM0dYZk9YQVVhdWgxRTZBc1ZPOHdZdkhNRUpOeUNIaWRHK1FTL2FLQ0toRjlsNW9iV2I4YkF5QTRYK1NMSklmcG9GQ1RlbDBZc0E0N1FvUXZLcTVKUzQzdk9WVndIaUhQOStMSmlSNW9GQzFNQ3FzTWpVWUp2Y1l1Ti9PdERtaFZ6c01FN2JmNTBGNU9jR3hmQUt4T0RCUnA3cUJSNFduSnU2bFc2NWtJOG85Tm1pc1N3RXphYWJQUW1zVlVzTGhZUWk1YkdxdmlwMjhmY0JVOGRtVG1BQUNaaCtnL2IyMlFCK2dRYjRxMzJYNGJ2OWVFait6MDZmSW9sSVlJM2k2eDRUOWpmTHhidUMvaXhNc1E5eCt0WDAzOTFwMVVxWC9tZVZadVNWZHNSOEdSMXIrcTh4dENYcWJBbzd3RzZNSmliMTdWVHBOMmgweThBUFNoNnRISWhOWjFvSHB0elVhMXdJb3U4RzRnUDRETkpTVStOL3kzaEc1bGpNWEdtOTVxKzF1cTVQRnRRRlBEQUpHNklVb21TM1ZYV1EveTJydzQ3cFNNZjVxOHBibHcrNTNZOVA1MjE2OVlMNGpoYjRXUmN6Q2o3T0E4MGVpUkFQZTFIUnU0YUlsRnYyaHdJWGNIcit4RW5WdVd0U3pXM0ZiM1RXSWcvc2FIaEhLcWtmaEpObForWm04VmE5MUpFdlhQQVBpMlpvVjdPc2VZTGRTT1hPRlJSL3BqNm9RUnF3ZWhBdno5REdoNUxCbnNwVkEvWkNmYXJkQkttOStIYmpEamJ3akhVYVZpRW56V2RwLzloOC9PVGJab3VSTFVaa1JMVTV3MGZwUnM0anM0WTNPZTEzR3hPM2dhSFNYZ1pQZllER3VUL1hmZ1RKclp5bWYxWWVKZzdVeDdFR3VGRmt4RFhiYW1vUFREd1Rmc1NPaWZ5U2lDcVNmZmpza0dBQjBDMnhqeTh5M05ZamdEK1dPSXJTRjBlakdCV3RZKy9mOHFqcHV3WnRlb2VtaG91OWtmU0QvVGdWMzNnNnVjamRGT294MGNMc1lqbDFJQitJZmlsYVgwaGFYNTJGb0d4SnZpR2tEcEtHWUxSQlVlYVNqOWxDSGpXTmZXRUdvTEhXMC9mVzVvTTR2aXh4YjAwczRVMTZ6cmpJZDhoM3dWNXZ3R0MxMFQ1UTVONTU1V2xVdHZVMWNLM210NXorTCt2OXROMko2YXpBRzlBQUJzNUpveVFjWWJwM01KVDhDcVRxV3JzOTlpS0hwZmQwR25hUm1qTEFBWWF5eXVCeXpKWjNDck9ZSG1HN0tIWXhvQ0tCRHZ1dGlvM0hMVzdTTWcyZ1loeTdaTERLSXpONVVwak1jbGROUExBSW1NOEtkcFlRR1ZKdkROd1E0Y3dGTkJ4SDluS0d2aXp4WjRMNy9ON3dNbjF3TllPV2NaQ3dGZlBONkhGWW9QYUxNd05vOG81UVhJdFZ2TWtIRkwxNmh4TU9yZGhLSXQ3VFhGYVhoNFdjajhPeUxobllTcnQvUUJ5RXZQRFc1R3M4QzhwMUlDUmtBSzdVU0twUFgyeERzWTczWlVWY3ZQVTBadDM1QVNmS3Y5TWpiYlZsOUZ2aWFTMCtnWEY1MG5pMVVpWXpwejY1WXhWUkRGUndJTGdkVmRjMTNlSVhQdGo3UzNOOFEyekJmMTZoQ1d5eHRYYVZLRXg5eUJWUEdvVVVZSkc5RVlKcWpmVlE5alltcUsvMkNWaUhkSXgyOXh2WEEweXh0aVg4NjZmUEFPNldxdVZneHlFcEIwTXFwMVFHZVkyK25WaTcxazFjZUs4WWpNcmVCSEVXdXhtM2xDOUU1cUowUWVFL2NVdGFjMkw2RUZSem5QZ3VreXQrK1BRc1RJdVVudUpZSGVPbVZ6YnFTY1IvTGMySjZKYkpNOXJmcjFJMVVFVzJVbzcyMzRueFNnNVRVTFNqYS9od2RNZW4xcjNOVWE1Q3IrZWtxSVRCS0ZoZDg0bFZQTjlnVm1uREtoYkVFQ2N6YXRJSWtqdmRmTCs3TzM4UDM3aGZ4TUNOeGcvSC9JajNHVHUrcy9yZ2F2eUtSRU1XNVRnaGlvNW5xNjlkWGZNTEorc3dUUnZSMkdpM1p2amh4V0VqSE5jR3BWeW8wdlh3Sy9iT3E0cVhzOW8rR0lrT0lLT2FKZjQxWXRzMTQ5SDZmU0JsWGZmSDFjOG9mRTJCZW92VmRyVnhZdlhHMFM1U2xmc3djK0FNMWNteXBnQVRPNWhiSWpkREl6czhRK0dJc29CRFpIZ1pwc2QyV2xGSVRKWjRCNXB5dEJIWEFieG4raFQ1TE9hSnk0M0ltU2RLWldvZU5ObUJGRmdqR2JWL0Z2UEpuV3ZWVDdreUtxYmZyd3lzaVVVbTFLRyt5cWJXeEl0K2cxWGVEaWRaOTdCdzhjNmhjSkFudHQxYnJnVkxSbnEyekhpWXM2QlJ5VWlybDFuWWhPZStHbVduUlhHbERGQlFzWlhzSllyT0w2c0NWdDNRbmJSbHhsSkFFRWlSbFRNWHVWUkg2cXJ6ZnQ5R3c5ZWFLd2lXRkF3dDR2U1E4Y2RRbUh6azhFY3dPMHl6NnlQckMrSlc3dkhOSkxqZU5pb3llNjcwMEJjMThDR1B4MGNvQWRXWFMreEo0Z05WamhlanNtQWNGR3FlMnZwRmVOcGZWUlRDVG5FUTlLMisyZ042bG1IUENmWWpOSHM0bHJkMHA5WkxwMHFFTTY4VmlNY1dvVC9TejJkVFQyNU9iSGViNVpqNW9MZWRVakdOWkI1QzlpM2FMVVlOZXNFMFdFenhYUWRUaU95REVsdjU2TnV6ZXVYcUJhV0V4YXpSQUx0c01NWU0wRTZMWWwxMjA3dG5HM1VOTDZIekQzdUR2RE1ncnExM1ZBSG1OWXlTVDZSdEo2dURYMm9mMmlvR0JMUHBrK3J5a21iY3pCVHpoSHpzeklpMVg2Q2dvWTVlOFFtMVdaWVJpOEdNcTIzQU50U2V4WGk2bXhGSUNnbk8zLzBwZHFkMlFXa3hFNHdoeVR4RUtuQ2h2OXRvRkFWT2xyY0o2NTBHWmZrSm1mVGtJSnpnQzFFcXZueFNiMnNRUXFvR0MrSGsrRk9vZEhnU2pCQ0JXS0hHeUc0NzZJdlE1M2xBVStJS0REaEUzaXdFNkNGUCtyQ2pVbU91cEh5eW40WTJmREJtMmV4dW1CVkJoUmlNMy9RQ1dqTkU4YjFoMFBYckRnczJCNFg3Qno4ODVuVTFpUlhXVURKZ0RtdjB6QTN0YTRsSUcyQlQ0cEp6M1o4K0lOYXdiNmpzYURjVFZLN3FZRlFLeDduZmd2MEFOQUY0d1BsYnltZGVXWENsRkNkRnM5ajlEOGVkdTJyYUVBc2RuckxZaUZOWnBqWVJEVWFhUFhndXRsQXFrUkZOa1lYbzd3bCs1dFRRQ1ZON0EwT08xZzBBa3o2WjV0M1BUcHNGVHFQUUJJNFNENm90OUdCdGRRdmdyZlNVNmdvSEFaMG90R1Nmbk9sYWlUVTA5dzY5WHlBUzI1bmxuTDN6SElib3hyZWFVcEIvR0EyeDJsVEJVRThzb0tNZVlMc085cFRCVzhPL1BBbUFYV2VZd2hOSWxabitRbWhaY2w5M1dLTHZWMEtkb1M2UHJBeE9JT2VjUzFVQlgzK25zWEYwVHZuOTFpSzVjSk1udno2UGFJVUFLbitiazJ6TC91TW1ibnRNOFpGNGFweXlnWHBPY1ZhUEltVjZkK2ZzQ2lvZzd2eUppU0JwODduNzFRcTVuMFhseWtnSlBqSFZXYTRUeHBnRWovbUs3TFFJZm1ORnQ1a2JMOTYvWG1TYTIzOHFNSkYrR3BwSHdlYmJBd3lNZGJHVUptZStKQWlUNGZ2cWw1L0NlSjZTVXIycG5ZWE9EMmxIYjJCcUVvbVhCQUVHZ2tuK3hOVEs1eXE0KzRTWUw4cndLditDS1FjMlRHbXN1aHVzRWlpaThKRlg3akFJVy9wTmtreDNqZlVNdUpDNTQ4L25tSjN1NmxkbnhDN0xML05sZVJhSDBFV3NTcHZtWGdNcWtUa2xIbUxYamYrQ2VKMTlOZDhqUnp3V2srcWQ0cDNZak1BazV6ZG9HNkUxMFBzTmMvUDNrYUV5UVdCSzNYekFvRXdQME5ia0wvWTJHUHMzSko3WFcxYmdtdlhnbnExR3crMEIwTDlWWnJWUFhWZDk1UElTb2d5Ull3b2ZRcmNLeHdyZzdLaUZhbjUzRDhQMDZ1emg1a01RSUlkNWdYRnRPWFh0cWJ0Y3p6WUxLSXJSbE1qdW9sUEhnOS9ac1AwdkNBcVdNMGo0bS9TUFpXRW9jNzM4YUE2UlZDZTVRL29QcWtKZ0dJRE9IVllhT2FZV3IwSFlJWEZPdmI3NC96M3ZuVm5TNWJIY0QwRWx6Z0JYL0hmcTg0TmZmWkdtd1ByMGk5b1d3T3E0MCthd2RvZjNFckFoQzFaUFI3bVlYdFM0S2IrRWYyajkvRG1iZGlidTdwVjNTaEkvaDdHQWlRMXp0M3l2cDVVS25tM1lJalRkUHJIMDVoRExRSjl3RER1WmlGWWRQOXFBOGthT1RUeisxWERNZHR5RDJkTWVCTkFYZk0vSWJyV05wUExKaXFDZVZaa3MzYmQweDk3Rlp3eTd1SFRTY241UlRKeGtLaEpsbkVGTC9oUFNHRWtUZU0xVUhnWU56VGpjcXVWRmtLcmZMS1JwMEpERTc4ODJjL1MwWERDSmo3SWR3SkJGWk1uc0JudW9EOHdobi96M25qaXJaUGxuYXBpTmFSWWpOa25xSFNLdFJQOVU5Z0gyLzhjNVptUjI3eXkvWW11c3FuMGpMbVgxOUdsTkJSTHlLOG9BWkRlejRiNEhrbStGSE05b0R5UTFqTExKOFgwd2xoZEVaQnZQQ09ab2RxK29jWExEelpQR0dxUzl3VnJzcEo4NjBPcHM4aUJaOXZyTnJkeUg0ZEpZUUdNeVplaFkrdzFIQVM2c2xWZUd2QWFDQWwrZ2xqWjV2Sk81WEpsMnZoQ0h0UjNoMHdhWisySmJCTVJJakQzdUZ6eVhzRmg3S29PNGZiN2MxK2tKbVZkRFcvNTRPclhvQlJLZFRVY2piSm1JYnFyRHBvSm85aGFxQnRuWVZscWRrQkxhd2FoU3EwSGlNZEhtWkc3RDI1OW9FTUdxWjJhQlRoQkVRTEJCdDBROFk1c2hWaTZtMjdDYkk4V3h1eWhVMVVYVkFBSVkxMHFMSFJEYXZUNWJpdDdPVzNtVTBSQXZEN1FvL2EzNWVKV0NOV1VPR0ZxV2U2OEZ3eWkwRlUvMDEwRzkxdHh2QUtYTCtmMTc2RFNvV25IQnRQVmNYZ0N2ZnNLY2ZENFVaQ0tmYi9CT0lzYjlIRU5pZTNhMGwyZWIvMWxNL2JaeG15SXp1eHJLUklwK1ZmWTF6enY1OHFBNG5hdWtUSjEraG5kS2YwRkMzNDNVa3FmR0pBblExQ0Q2TmxSaVIwSGFzNjBMNzhMVmNZMDcyRXM3S09zT1lvbTlRL1NOblBEeU5hVzl5Z1BJbzhIQWNrL0hicjJtdXVycGJlTE9Sc0NwSmIvWDhoNkJsdWdPODdVY3AveUFmd2FieFFaRUtYbERuK2J5VnFXNWQ3MWpoWlpnSWRCRldrd1RlWjd2T2dJblVUZ3lGS1NKZ0IrdjRUQlpjZlBmVTYxNXVmektHQmMwOFBGa1psZTh4UDBOU1MvWFBIa0g3cm5iY0pNNXp1UTRvSjhHbDBoa2Q3ODZPZ2RTSEhmZ0tnQzE5WGFsV0RrOWhwUkc3M0xsSHdNUXJzcDNXZUo0bjV2TExCZ3dQajQ4TFdPdHVPRFUrY0d4ZUFhcG1QRlgzREFGUVQyam5taWY3eFVSRmZuUSt5akZoc3RmL1VTeTIySjlzcEhKRklZSFB5Tm5NaURyV3gvcWFvMDFDaWdFL01ORXVVY2loMUh0TU9UK0IxWVN4UjBWNnBDdDB1bG1VanZtMnpQYllHNWlNa3N5dzVVZHQyZjN0a1hVVStoczNHbG9GNDJHSTJvSXZ2aEZjNWdHVkNsMkJtSW1Cb2ZEZzlCZCt6QVE2b2J5ZnlOVldZQnRQNlJjajBjQzgzQ2VlaEoyMkRZdmIyWTFiQ2R3cXh0Y3VQSXVMR0NXdXozT24xZnZwQW9hZ0V1Nm5abDkwd2g2S3Z2bEhhUHdIMmxPSk1RaGF3cGN6cXFJUnRobkVkdC95OGxYRTVwVThWZkE3aGJqY3dudTNPNVlZSEpqNWFmS09wRnJ2d2NCNVNHSzk2ZXNkL1pMNG5lTnlUSHhkUGFBWHRBTkw5L0lKSmFVZjlsMW9KK1YrampoWERObE1PbCtOaFQ2QkVLRkRMWnM1MFRYcEJCN0Qwajl3bFhkRDdlcmVWdDlTYk5GK2MxdlFGMXBCbWg5Nzl6YXl2NmZZajVIM1NZbk9FcGNqQ2cwS3JRMTlSRVBKdjV6Nml3ajZpUVp2VUJNSWlIREJyV2lhaWRmeTJ4R0xrVmppZTc0cmZDVHFrVFBndkY1eFh2L2tuT0pCNTlSNjRCcE9UTHpJcUFlM1c3SmNVRjlkNWdVUjlTZHNsQUozcmRYUVdIQTJIS1NwK0xjay9sM3Y1SUJ4bHVoenRuSVhjLzdFaGp1elp4RHh2TEpBVVU5WUtNVEFLcHBNaVdWZFhEWnhCbkxKK294dCt6bC9HR0ZDS1NQbjZuSDVML1dzQ2d4RmhvTzY4YkJJRXlzOVI4Z2pOeDR2Tmk3S2lVaHc5cHphakQvVGxqcGVHa0g2NWs2eW9YbFhYRG9xcDdUaUFJSnpTKzFUc0R5ZEpINk5WbkJvYUpreWV6Wm9YQkhPT2hSSUZCcW5tdFJ6R1hlZjdmL2NFRDFES3gwUnhUbHE4YlA4cEgvMW5lclV1ZWd4SVYyRyt3Y0dvOXhjU0R6MGE3VXhKamxoaW9NTVVVR3JXb2RORXRKTThsbXpEcmIzS1F2OWdRUXpMVzdKcTRZU0IzRXE4emxNNWMxVk9yaEVuOGJ5ZTNzQ084eERSalNIYWVPeWFvMThoVFA4YUN0ZGVQVmNsaTdacEM0NUxLa3pubGUvQU1jbmpGdW1KRXRFTHUzZk5vRTZyRXB5aXp2TVBsOW1PUTNtNDQyVG13ZWtVbGplS1M1UGNUazYrMWpzb3lCWHNNVUp0YUZjTmttWmhPMDNwU1FiSDUyYTNnQUt6ZFBLQzNpN0tpYkRsTGZITllkaXM1R0VxcWFzRGlleENDUFRLZFh5Q2hmeFptbkI0dkZvalB3bGJmNzYrYnJleFpDcTlFTXdJMXB6YmJRclhRbWQ3cG9JQXBWejZ2cVhEQVEvcjhlQ3FsNVBBTkxZdGpUMHBsSi83Y3pZeG4zT3J1S2s1OEJGbGN4cVVtdElTM0RQbHdxWWNpVDVTU25uTU5KMXMvTUlHeGRESlFwZjlWV2RGNGFzQWV3Qzh3WkNDYzBMTUVRZVQ2a0FybEl2dWZ6R0tOdnBpbFNEWERZemhyQ3JCT25USVJpY2dzT0dtV2Z3SXVCczNNWGFRSGdaZEdsWWJBTWJNKzVSK20vZjB3cUNQQW93UklINU1LZFBVV1FQeWgwNUtKVWFXM3lmMzc1WkJ1Uy9QdFlHS2hSd29mb1ZpTFkzaVF5WnpiRWlhaytnZ0JLdUF3aHExVjhKU3NvSWZWL1I1MjdVdGtwSFNGQUp6eU91emtqalNEcUFPOXRLVE0xbVhCSEd0cWdPZEp2eElnTUJYQ2pXUXFDeVZOMjZvTnNod0QzN3I5SVhCL24vNnJQajVNMFNHY2dmeitQbmNSOWwzUjU3RFBnam5nZXBBK05EK0dHMCtHMTFGWlRzMXdPbWFScHA2SzZ2b2U2cXdMcmV4WTJQUEQ4WjFZRDdmd3l4K3NxcWxaUmJ0N2tuZitnMnhhQzdRblRCNzFSOVBoUFl1NS9COFFqQjZBR1VYMjdUQ0FIZGp2MWljQXJDR1A0RVF2SUJqNEJqN25pamMyWmpxcW02bXBVNlJaU1hCRHRYTFV2MWQ5bSs1SXVWTFB5RHdYS0w1UmYyY0hlc2JmS1o5T0V0TG1xa2NoOFIrRWZ3K0E1TVF1VlRMMkRNM2ZoU2ZiRkE5NXYzWXlScXAzZlBnK25UTmFwWFJ3YVdLOXR6c3Z5bUUyakFRangwcDVLYllJOWhHVDNUUHBNb3U3aWpWRXpOUXFrQlQrOFdKcGZjZHljVlY4QjZFRDFGZ0M5WUpMUjZnT2FueEtUY1V5MlRjUUJlMjBqamYvaE1jN3ZBWE1mR3VEaWNZR3MwZGlQT0lBWkJvWjQxMWZkTUhsUm5vYVE3bW83UmlsejM1Q3N0aDhOckUvMW4yWDBtelU0Zk9wR3JtYWkyZkJEQ0txcTQ3a1NiY0pTc3ZwS1hSdFdTb0FwdC8xd2dPclRvYmwzN1ozdHRTdFYxbXVBMTRwMFYza0xScWRVbzduSnhqYmN6RUoxSzdGMDZUbkhhRzkxTCtaR2tzZ2pvSXJGbm5BUVQwZDlXd0dTRUlmdmswOFBoSzdMU2x6L21VYlpkS29JUWdnUXdGVkp6NURBTmtjaWxoYXZBam1xSUliZkw2RWhOTzlkR1ZoVWZVa3hXU1AyVEZmeHhsckN6d3NJQ1k4ZC95clRDREFPVWwyejRTUmppWTFwaGU1UzYvdmFlVi9GN3d0MDlLcndJZ2kxZ0RkZ0RHdXpaQ0VHWFl4VHp0WnZzaDBPbFYvT3RiZGFvRklpVUNlL01rTEt5ZDFmSS9PNVRQaEU1dXFLcjJaK1RjMURRSjN4bUpBOU4xdXdoOVBnMXlGUnAwME5pd1EvSmVFMVRJdUxFVUdKdW1FeW9FN3I0MEozd3ZmSXVwYWtXemZhZFE1cXRqdlhvNGZyMm4yT05HSkdqdGVlSE5ITEdrbEM4ZXFCZk82MUVRRFBnMzNLMkZIVi9rNTRpSDY3Y0NhcnRIL05jd0x6SDJ5T3ZhWVZCa0RldHhQK0VmaEUrRTJIZ0hKVURocXgyOTAzU0R6SWdkbEx5cXRYaWx5cjlVZVRhS2RWOHdob2c2ZXgxY3YveW9MZnFjbGd0OWhvUFZHMmh2R0dnYW9iVnRjSWU1dGFkYXZ2L2RZN0I1UXlZKzROb3Z5eTlhOWg4T205TGcrN1c2ME1RRTl1MUFKajdEVE5xQUx3VlJaRkNjZWxpc1V0UXcybWJPc2hlZmZrNkY3SWVaZmdrV3pPUldMUk5ZMWRnSGRaNEtTR1RIbFV4RGpZNFIwaTZSdWtERm9ieHdKcllEMUs0bHBsRnFXMmRmdHFTSU9TVHdkUi9ISndCek9SUGtxMzZTV1N3MDJsMDcrQUdQcDRxMFo4aW9GVUxqRUlMRmhWOStFZTl1RW5iSUZRdmFIU2dNT3V4NEZLeW1XdU9aWXpOOUIyUDdNbml1Z3pDNURQZE5rQnB2cEVqR0hMcXNyTTROME4wemRRMTdNS1dEUjd2aWh4WXNzWTFJZ3dLTmQ0R2ZVN3d3S1doMk5od2V6S2hLbFA1dkwrSkZnMFpFa0hNMG13OEJPRENJTC9hUWZJOEU2K2ZyNU9ZKzFORm9QNXFDZ2tuNmthUXRCY1JsU2lFM2dNc2NpNmMxdkJQZkE5akUrSVFJemg2M1lGdUoxNENkVkNTNHRZUEozekdkOFFOcHRhQXAybXB3Sy9LekUxQWdUZXE1QVNLVFNsaThtL0N1VFZ4dlBxTEpiTUFwTWc4dk5mb0NsTGl2ekdCV3hVQkJmOXd1b0VJTldNMTdTcFdhbzhKUjhPOTZyNi9uMUtzdmQ5T3UzMVNqYTRRbFRvUU8yZUhnMFloRzVNaWVYUzNVeFowNGU5eFdUWVMvOEZQdzZDRlg0N2Z5d1VSWXdybExJdjltWFN4L09JWElNUFd4bXk0cFR0K3hOREk2YnpjdWd4VGRXMlZNOXNjdit6b3ljTWtzdDQ3Yk15WjRXQjQ4MWFSQ01jSUhqdnRPSnFrWi9DODdMNWtLR1VtcktqcmZtbldHU3hNWFdWdVZ3WTN4bWZyL0podmZZNjQzMm13NldpNGtJYms0dllWRkZRUk5lclBrNngvelNGSWRQcm9TYnZIbEtrR2FSL3hjQlNKQVd2NlJkRTZubmJ4WEdOb3FnbjM2dXZXeXlDQ1kzb3FKc0dDY3daOTNmU3JlaXdLZ3MzcjRPMUNmUTBuR0RYQmNXcmpFdmZjQ2szcDRSbXBzTTBuZ3l5b2l5dnBMcW5ZTHpQcjNxUDNPTTc0RXVTNGI5ZEJFdDdxWkd4dm9uTU0xcURacm9PVDJ2ZkJvclI4ejBYRm9hWXg2c0M4Yjd5czJ6Q0JiZUQyaXFHM0JOdUFlUERjemVWcTVYRjNKT3JqZk9RME1ENlpSeDlFMVlYRUIzbkNGNTBORmtzSTY0c0xhUWJWT2dCajY2NFBiVkdQNVpIRkdvZkJBU2ZVMHlYRXY3emJHV2dFdFAzWnRxVkFXYWtOWHV1NDBxUVZrbHZRN2JwQjBUK0RpRkRrSGI0NmU1K0d4NFUzQUd2OGdBQzk3MVZwV1RRcHJBM084WURsSVRIL3J1ZlBUMlhnMjNqQ2QxbnJIdzdzb3BGU1FsSHQ0U2syK2hqK3ZFbzFwOGNMa0xVbFpURlh3TGN1MlhYZ3d2SGUzaHM4STh2OUxZUC9xV0xlenZydlBaeDZmM3dDbTYwYnlSME9MOWFWcGg0czhSWFFHQzZONjVQMFIzNlBLU3VHYjUvcEgzWUh3QlFkUytaQmNZcXVZNFZZWlNsbVNnblFDNkxLdklXckZVNWp5M01kL0lXVlZEeVRXU0Y4WC9Ucy9ZUWxTeHNucXlyS3JlNXdJQXJOWnEzeVhCbld4eSs4dEIyZTc2cUltbHJOanQxeWl0TGREQkR6akIxMW9oRElKUG9lZHhJa2E2S3drYWNWRW51ZVBJSmNmNEpoYWIzMTJISTRkNXNMMkxUOWhDNFFiY3FBQ0c3K0dsVGZZNURUM2hjM1RvVU0rUGNZdlpyNElVbVNUWHBhc1VPenJpNFJlZ3ZFZGxPMVQxK29wd014Z2hSZk03dHVqL1ZCd0I4OFN4dlgrUFVCSjhMb2tHZDFqaFE4NzhmYS9aWTZISVB5QnpIRzVCaWxZam9mUEFvTmxzRTJIVFhpWG5GU1F1dG1CQ1RpQXNvdU8yb1NMbnNnM1M4ZHBmM3VVNmlaUjN2Q3o3cjlvdWliaXlEL0lUL0ZGOFVFV2lURU9FaS96eDFZR1V1b1ZtSmtNdi9iK2dXS0JGRkljbG1IUGQvSWh6UDlrdzk0am5DT2c4NkdxNWxnV0xTQUZzU0k2UG9qa0tIN050djh5QnVEOG1Hay9OamZZZGJEd05tWlNNWTVCYWZ1Y2pneUFKdzUyb1FNVnV5UVBwSlVSaXNPa0RpT1FWRmZydjlGSGd0aWxzV2tvbWF5dHJpMmx5cDV0blBhZStDV3JaSHQrbE5Zd0NCTE03Q1ZYcFFoeGw0WVJvL3JpM1k4V2wyVTIzbHJoelVQVzMrQ1BLa2R4WlR4MUdldmhSckFYajJjTG11RkNydElTeWI3MEMrTzN1Q0UzVzY4Mk8xTFdSYlNIQzJHWmpZSkY4aGgrTmQ0MldndVhXSDNKSDEvNmI3RFY5dFpQVlo2K0ozcmVSZUNqd3hYRHRWV1UrRXhvN1EvUmkxNDJBaDNUdFpTSGx0T3ZUL05IS0ZwRHNuQmNyNEJnbmJqR0dicnRQK2hJNFgvRkxCcUVUbk1pUitpRm1OeFNGcWtad3hLMkVjNWN5ZlhCamdwR2s3R001U1pxQnY0UkpjR0hyRHd0ZUtIV2NqZzlSKzBHQXVaKyt1cDdkWENBeGp5eGlTV2FNa1pLNlg4Wm93c2JMTWd5ZitBcEhxNEYrMFN6QzFyTmJGeEdYUTBEakRXZ0FtZWQ0c2oyTnAzNHRGaU9jTms5R2ErY2IyM0dlSFp1V1EwMW1WVW1waVJWTmFmT3hBNkZ5TS84c2UwcGQwbzBaZXp0cWhRb3VZSFMxSjg1REd5a2N3QjUwdHJDZFROU0JBQ3pYc0o3bWl0NlJpNE1LR0tnNWp2djFlVUxYR29DYmQweTV6M3FDdHErOHJ1b3Nza3BLZlNSSko3MGFxYlM2ZG1aU29oR0RDYkVreXpPN2lXMDdhc3haZWs2L1czUW1jK3NZY0RFZzhlTkl4QUp4OFBnZXRKTmZVQzlNYmc5NzRLUnJEOUkrVFdhc0VqSE12TjcrWHNCQ0NOYjRBOGVqNS8xNVAvY1Z4VEx1dzhTK25RK2JPSWhnY1NmNGhNOVlxZ1k3R1cwMVYxdklqbzh5b0VIZFhHQnBIelo3VnlFaHo2eVRES3M2dk4rRVNBYXdrbVNIQ296YVhmOHozOGkxLzFXVS9CckNxNFBKbVMwZWZvNkJ3SGdKRSs1UldqWVY0NFFiMlNjb3ovd3lBKy9sSXBmbXFpQmI3bjVzbkRaWUpzdGpxdjgycHVqZEVEK1dWaVVyV1N0dWNJMlFaWHllTVhwaVpCZ2c1V1pXN3g2YThOSWdsUFpnWVpQc0VQWElmOXp1TmZ5QWozY3Nod2dLQytJb3dUQ2I5eHZXcFA4MG83NTltVUh4Zk5QcWJwQnAxNENIU2w2b2Ird1dxL0xiT2phUjdxY3dqMU1TTzN2RjEwT0gwMFo1UGlDNmFVS2J0RDE5WDhCTjVZU0dWV1JwT0p4RXFsWm1LNTNjbytYOGl4S09QTTNFMC94cTRKRHk1K0htM2l1aVRlRjVtYzhrdFFQVXhWd2pBSFFUY29qdHIyeXZTdGkvOXFYSlg0aGptbE9HRk1CSGE5VkgrbkdDVi9wS3dZS2ttdGZaZWJoTUp1V3dmZDhFVnRvR3cvelNLYXFCYnE2VVpDdXU5eEY3NTY2Z3E5WFFJR3RaczRFY0pPVzVMZ2h3UVRSS0puSUJ2RStIRk5ZbkxpK09RTzBFSWVRN2FyWHdMTzlJQ2lQK3BIMjM1RG1Ld0NzWWNEZFZWRUhlOTNKbVpLakVpVy91TjQ1OVFjUnJMR1UwT0E0WDhmVStCREdQM3pHdFgrWTRVL285cUprT05md3I2bGpMbDNsazhCZXg4QkJ1bW5QY2YzVE4wNU1RZEZFWUIrU2VkVXMrS0Z2UGJZc2V3RDZkWlF3VWp1TS9LRzlGUzJ5L0tvOEpqelUrem5ORXpWVzVXRk5JWkZRa3gyYUVNdm9NNnBxME43TzdFQSt6NC9ENlRncTEyK1QvQjNhak1rNDc5UWV2SndtaFE1SHFXR0tnQ21UQVFhNElSaTQrN0lmRmhQUXd3WUVZcWZtUHhFNkw3K0FhUkdieGlPYTJybVFmRnVhQlllV0U0a013QkdpaHJLdGFQeDI1QTkwcXRqODJPcno5dkZnS2dxV1JGNE5EaXliYW0za0lrSzZHUGVPK2xwYk9vZDJ2eXdadE9iWmUyZEU2NndFM3ZWWThmQ3F5RUlsWHFJNUZBZ1JRQ0hNdDNHZUE1eFdFUnczbmlqcTBncDdvcnJHUzJpRjFwd1VZN3M0SUJ3ZHZJS2s1bWtQWjZ1VDZ6dWFLaVpkZ01LY1JHYlUxci9BeHhvYUNNNWU0Ry80eDhxcE96WENnNGpzbkJjaElyZ3dKRWlnbUhQTzhFL2xsVVRFc3FVdWl5UXA1NzJ2RFpNL0Y3Zyt4K1NheFJBQWlyOC9TT3Y4VEFucjFWMm5nNDMyWnluYnRuQzBRT2R1aEJxb2FKRmQ4d0NMdDdVVmltMTBQVE1YU2lYRE9RdzIyVlJocVFVclgwR01uU0VLSlk4MTVBelU0ZjhZNFQ0T3ROTTJ5NWpqeWwwOERGZXcrYWZWVGpvdlA1Qm9JU1UyRTJHQWM2Nkh4YUh3cUhPeVdvRUFYMHBreTN4bjI2T3VLM3ZqcGJJRERaczBPOHpjRGc1Q0k5c0N4bmZVdG1RRXJXc05Qcjg4K3NGYVRvemxIRUE5UVAwT3ZTRm1qblk0RTFNQWl4cC9rNytZNVFYRTRwQUZNVVNtejlzTXhuU1lSVm8wSXU0ajUwVllTWG1aMGI2bDF4b01ESG9FN0J3NmwyWVl2UFoxVXNWSzBLRzhsNUZuQXlxTG81RWNlSjVQZjg5YnA1L3MybE1mSVdHNmdPMnZSNWZFTWhLM2k2RkRhUXpRRVpxOHJXK3JmS2FBQnZ6akUxbGM2eEN3NXBSZ2QzaVdXLzJmYUlaUW43NldDcEJzQjZ0bm5GQXRvOERqN0pubkNLbXdEQ05iWXJUbEFyQXJpQlpMVStNZlVqNlBOR3JVRG03VTVJV1A4QmZjYWdKcFlGaFUyOXRGK1ZWZnU5WjhkK1RnUDllOFpQL3dWSkFsZDJlSThJejFHR3p4SEVUa00vYTVwbWMvODd2SThaRnRGYjRsa1k0Y3NwNDNmNEZDZ01najJMRVJvbGJZa3RSSmQ0dmowb1ozUjRDNVdSYjZiZWZJMEV4b3lwWXliMXBxZnRNL1kwa29HZmlpMkFCSEVSV21HZ29IRGxwSGRyTkJ0cElIYWVsa1BsdUNGZS9OSThlOXFrc1JpZHY1RTNCazhjK0RGUklndUJ0VDVscnRybURmd2F6SitHNlFDektZd0Ntdzlrak9nRkdlTzNFMDlMLzl5MlZTcmdlRThPWjJlYm1wN0gwemFqdE1rQUNsWDR2eTNNZzhiUVFXeTk0SHE5QXl4dzBFMTdaa1JUbTMyblpRWVUrSFNscmdRajFBSGV5a05URlpPK0M3VnVrTjhjeWxPRzM4NGsxTXNXaXRFanBXMDA4QjZybXIwMG5MT1dnMW1NdzA4L0tsQ0hnZ1hteVd3Vmx4ajdyZ1EzMzgxS1NxaUsxNytvSDFXUDF1VEJ0U2lvdEwwbzRJdDNrMWpyaVZ2VXZmUTBiczRvWUhhWnZJd3BYVEtGOVZxY0lLOWptWHRMeU90dCs3WTdKMDd6aGJ4aHdSTnFDRHpOTGhDYlFFWVVBSkc5SXM4SW5Xa2sySmFOWkJzNEVVT0ZBUVdtQU8vNmxJV1dqNnFBaVZTVG1sU1JLWHZsNWVLYmVyeVl4ZGVuYkxSVERWL3YyK08zcmhLV1RuU0Nja0tXS0NPV0xXcHJJMGVUamJzdUxKdEFUNmtMWjRkT1F0a25rcG9vUy8rdlVmbkU5ODE5UzVhODZETEQ1WW4yenZNQ2dEY1JCSllVQTFZajBCOThlSzJXN056Q21zRTNONHNxZHJJMU91VldLY25wMUpkWStvK0FpVjJmSjBrREtaYWwyQ1dkc1BabmtvYzZLWEtQbk1lNUtqZDFXWHY1WUNwMXgvb2g2TEgxNHpLcGlFbFdybVVKTUtoQno2amM1RU1IRGRsbXEwaDQvc0JyM2V5RzdUNkx4MStZT1pVTVcyVWJCUUZGM2IxZHVja2FNcXgrY015SHVUc1I1dW12d0NGYVJLNkVKOVRqK0FlcDZyRlF4bHUyeVBxYjNHQUVvZm45S2RQelNpME8rY3k0bVpLb3IzYXpEK21kOXBYaGpOZXd4Z2lBVFNzVkR2RzByaG5KR05UYzE1RU9SZXRvVXBFZFVidmx5djJxUm9wa3ZKRURiTk9ubjFNd01ScE5WWlAwejRBREZodkcxc2NuaS9lZUlvWU52SStGdmY2cFVRcEkxRGdGaktmY3JTckdON2o4QUNwR0tUT2ZqdE9pYUpqMk5jeFUvNENTamV6ZElLZThBbk5HRjc3S1ZGRmlKQVo1bk12UmFSWXVQZzNkS1dYS1hkcTV2STdIajhIVFpSdVo0VnBVT3RUMDkrQVk2RGJqam9rUzFqQUdKcEcweGVVaTJnL3c4cXJJd0lsRjJoajVpZXdCQTVZam83N09odjk1UUhqN0l2SXlhemJBWDJkbmhHdVJwbXpsTlM4SEN4TjMwUU1EekUzVHIwSEIxVWVFTEVvQmY0dUVHd0YyZW1VN2lodW0wRU5TMEVNRGQ3U0tzS0FBSzNqMUF6YndXd0JsQnFYTmlieUFWQ3dxL2ltdmRvdzRWUWRuU3p2alhZaVozQkxHOXNoT0RDVjNDZEYyYU1md1pPcXpVV0YyT05rb21BTVpyRkRkT3duNWNQL09NcFYzSFpTd3VjeHpXY3RVczZGNzVRcExaVEtvbW1jbmVabzk0YnBhbWprMGFEbVBlL1Q3ek0ydXhPQUFrYjJyVkt6eDU1eUdYbFk5NDUyTE01T2txcSthNllFaUNUVkVTZ2N1OTB3ZGRmMVEwWTJoMVNSdFZJell1UHQ5Nmc3blhTSDZMdzVJeXg5YzJUcy9lWnNwUEhPZThZMlF4Mnd0TUNjNWQzbGNrK2ZlaTM2ZUFMUXlEcWFBdTIyRjFReEpMM0NvaSt1TEN4djd3N215QmRlck84bFdwRlUyNjRmcVJkMjNLYlhrNTBlUWw5eXlvbnBMbEwzVHZ4RTgxaGZBYjloY2pndXpNWU9oTHlqMm11cWtuSkRrRDk1RTJ2MWZUWm5WcDhmWEtyUkNsKzRhUXgzOHVWWEhrSlNjZFNwdnhuUWhqT0xydlF5MVpwZ3h5Mzg5WWlwL3pCL1BUc2o0djFpOUs1clRsQ2k1RDZqQ2pqd2lnbEphV2lISHFPQytDTVlxa3VhSjNlVHRQUXMvZVVOYWx3M002WjVlNnlFclJTSUFoVWJBeHo1WTlCMGdHdVhsVEcrNTVDWEE3cENVOUEzMnEvYlpRNjk1UlUrNE5QajFiUFAvZ00veW9FSTdvQ2M5cHJPY0Fmb3RxTEphbUFYcTNJdndRb3M0SW1HWDc5UGxkOEo5aHhvcHduV2FTa3dWc1djTkNQakdtcHpVL2F0YS9VdU91a3lyaEFqSGxURGF2cm5WeDl1d2p0Z0ZiZStIK0VYQWlDc20yRERacHJsR0xXenhwNjNWcEtxWXNBUEVIQlNHWGpmYmJVOWZSMGtjeTVCNEtpcUQ2bTFiM3I4eEw5Nkg4bzJIVS9xVHdmYU8zTUh3WjE4OE52L0J4b1hzdUpqZFVQQjVPakFnMnlsQzIyVm5vSzNYbStuaGphMlZtU25TbVN2T3hlNUl2bFhiZ0F3aTlaaGREajRJTWlueWxHTDJWZmpIWmZCL3prYWZNOTVUV0J3bmw4MCtiTFFETWphcGhqaFR4V2J1YUZ5NmRIeVIvUE1vWHlXbXhQNnl1K2RubDh3VkJ6ajIxc3JILzd2TEFhWWp6QnQ2T29OenJYcGQxTWZ3V0FYVWE0MUVkZk5kL3M3c3JnUnYvVUtkb1U4MVhjcWpCUmswRXJ2VGYwNFJLTW45MjU2TDhTWncyZnpob09NcmhTaVQvUnZtR1NzRmZrS2tYRUZRcloxRWd1eVE0Wk9zUHN6cUNQUzFoMWhGNVVhMmhqbXpRakRoNzFFRmw0d2NHK2c4citTTnZocVd4akMvSHEvWjZReHN2Qys4UkZTeUxSSGQ5aDRGeDhDRzE3Q0pCQittVXdKSEtlY2NRb2ZCYmp2L1E1NnFpMW1KSlQ2OUFwYzdrR0lNbGlXVW1jYndTWW85MVZkOERpTmE2d1E5Y3dGNUo3QUR1U3FiS3o5M2QxOFp1aC9tOXBIZnhpQUxEajQxb29GNUJrMHRBanVTQTg1ZXRqU1dDZWxENFRNUS9FakQ0Ym1lWDhzZWdQdmswUnNuN1hZR2xvWmRqNXU0eU5VYWhKLytraCtZRkduTEFQby9TdDIzeWZ1aGpiNm5VZ3BKNHNlRUNSL2ZaU3hyTWJQTzFIY09PSzlQaUJtcUVWRGl4Ukxjekw5M2RNa21nbVc5SXBQd042SEp2YXVRdEplY2JqRGNKTThOcnNuL0xPeGt4WEcvSHRYeExScXdqY3FMQjR5QXFsanU4WncrSW1oakIrVnFqK1puay9UQmdKa0xIMWlQU05WdVhBSUk5aVNRdDRPcC9KVkJKNFVRanB1OFZLa3ZWMDRQVy9Bb2Jyc25iY0Q0SnluODV0b0lDODE0b3V4cnVlOThxc0tzd2Z1eHErNXBRUXpnV21ob0I5NDBIZHhyWHlpdnVKeGt6TGdPdEhobTVIZnlGR3FnNzIwU3lOWUhvQmw5b05qcjVEcDdPa0NIaEVSY1RhK0F2Z3JNQWZSWlQ5SzBEWlp6NGlLTVhjUjN0ZklOeXpNanp6Z2RwVy9wa3RPM1Z3ZTVWd0VLUUhSSVE3cnZMZEVXbVVWM3IvNk55UWQ4cFptVm1BOHFWbjFNbU9OTGh6WHNwUE9CbXZvaHU0SGc1U2ZTbDU1dVJrM2J5UWlwMTM4end5M3E0UzVGQ2FyWEVXT3NBc3I1dW5pNCt5TVpmS3k4dWx2YVJzUUR5d2FxNDFjMXRVMTJUNm5XbUcxUHdVeHFiK29OTUFhMDFPamV6djZ4ZTZYc2h0Ym9LSHRxTEVxL2NPaFY2THJrOVB5b1NITWR2dGd1cmpCbmpMSk0rbUNBbnR5cDhEeTZUZ3ZGKzVhd3RuYWM1NjBlUmlBZzJWUU9SSWRncEp2UzVGaFJYdDdhMGp4SDhKUjNEWW1oYUhKRGFibkh5YjdJMXk4WXlCM0plWjJhb2JSUEtUdDNZT2t5Zzd1am9UWTRyUVFCSm4rWkIrbDhubGpYMmZWS0tzZitUNlRuRHF1SmVrd1FMOFBaSkc4VVVEVE5ONmVkUjh2cEkzL0dMY0srYTA2dlVTVDh6ZzJydE12bVMzb2locC95ZkRMZkozK0RRTUtmc2hjK3pPeklWeGc3SWptQ2NSUjc2Mmc2bkNrUlJWbmprdUdXS3NaL0NlZ3BYNkg0U201OWNxV0ZvSE55aytnRkFFZTAxeEk1T29JL1JnQWQyaUV0bHlCNWE5QzUwc2JhcnhlaHJQTHJPL1lMbjJKbHhGTG9NVFdGNTV4QzQrbWV1NTN3Ymc2aW5kUXlWMm9lOFRUOW85K3JUZllVWi9ic2dzSXJOc0tMaEoxZVhaTDFtQXlSd1Bvc25hSW5BMjhydFhPKzAvNzdhQUZTNklyUGt4N0psT2RwV1c1QWxING5CTHNPaGRqSUdvdUM4bjNLb1JiVUUvZ3UwT2UzVjZyVjJ6OWN0SUw1d0Y4SkcwMDVMc3E4L2l5UmJCZldEb1I3QVM4S2RZTHBOSTNtekZkRGxYeTR2WUwwSnJ4S0VKUUdBSitEOC8zUE5pbTNET0Q3V3BONXRRTFFiS0xVOERjeXdGaG02OWRHYmdYSW1wQXFDa0FXNFEvTGx1UnlZV1FNVklDSHV5NjlNMFVCK1hzaElSa0JYWTBkejBFL3lIbDNibDdJRzdVRFByOW9WbE56MVhqcjBYbDVuanVLVkNnTG1QMXVlK25kZ202dmV5cXBTTGUxZDB0T2hMZkFpeHpOMVVtaVJ4eWZMeVdTU2pDVGFKY1JmeXRCL2w2Q1h1aDYvVWdQZVVWYzc0T01Bb1RCTlllOUFSS1ZVbDhhVkRERi9IRHF0djd1V1dyd2tJWE0yVmYzNmROTFlKZ2ttRnRVeldQOFZRTXJoKzFqVHhCUk9JcXBKc1U1N0Ezbzk3NFJobVFwWHZxeFVOa0RMb2xBS01ISW5kanlEcmkvbUNYeXZkOTd4ZUJnclF3ME51MmhWbmg0Tk9QUGtPQ0UwWDJOU2lXUVFJTlYvVGxOWkRFNEc4VW9oNkFJbUd1VjlsM253YXZNTEFXZERKTjJBNGJIZ2MzNFU3VExzVGdabnpSNm9DVjBXK3MxcXpjSFBmUjhWUElEeld2dGtmQS9OOGFKd2JNcktxbjV4TDZ6czE5c04xdkZ2OUxZTzFvc08vQXZuUU9BWGNBb0Q3TzlZOHRoempLdU1tdmdyUHBiMWE3S0JkMzFyQlVia1hpNTlHQmkySkhucjhFdlFlTE9hS08vMTFtb1Izck14NTBlNHp1emN3ZFZrODlCRDJxb3dMelJiM0hPdEV2cXVvTU1FTVZ0NTBQNE5QNjFENldmVTlQaVE1NVdidEZjQXpGOXhRRVNJNGVtN292UkxKNDJ2RUxaM1JId0dDbzFSYk9aY3piNzQwZ0IyKzVURE93cmxMVnFSVmMzaloyT2xzcVNvcGNPRW5aQ1lGa2JpcVNKdmg0VVgzSVkySWpCMlcvRDhTREtJSDlCZ1Z3VEx1M0ZoU1NCSzJkcldYNE9aTDRRL0c1LzJTZ0x2UnZUMGZzSk5UdFpha1A1WU9PVmt4bm5td0Y3UlBUemd3K2JaMmVuaW1XRERMMjhSNVVyOGttYm1ubEFPK2tHS1J4NWN5RG9DSGpJR1RwL3d1R3VJdUV2ak1pS0RSWFlDS1BXVmdBZGFUcWRjQmxGSnUyblFVbFdhZFA5M0NRbzBRV3B4UndUU2FjZTFRRWJRNnZQbHN0ak9pRFA3UEZpejQrdXhxeHBucjRUNHlaT09hNVFPQVozTHJvVHRkR3NyNjhYUFVDSWovcXMrRkpQaFI2UFNvOE1YdnlkdDJXREFhaExOaGFpWk5TRW04bG50TGl0N0VtRFJiKytacm1GT3UwUFJodXY3Y3Fnb1hISkRxR1FzcmxMRjlQbmkrc0cwdkMwUVNQditIeFp6ZWNwajRwY2VUcmxyMzd3ZGRjUCswU0pxSTA4VkppWm1iZ3hUSnFMZEVEdFczcXZHd1dWT1MveGltU0VkczBpRjF4bm5QdjhhL1hIYTFzS0s1Y1E2Z1BOOUJFc2UxYzRvaHBrT3lQcGl2QXZSVmlCemM3aHByYkpCQVNXYXQzbTRrdXU5ZHBUR2VLREg1TVBBclFaRDVRdC9idUhtelRmS3dpcjZHVXNUZGRuRndIa1A4RU8zZllrWGlTT1J0UkNKMHBLNTdDR3Y4QmlRUjg5NHh5K2VnVU11dmVGK3BSN0dBbUJxNkFncmRhV0M5cGZGTjlWeXhEK09rOExpZ3NmdjFKZWdVbDgyNTYvMlhxUnlxWWs1cHh6WllGVDRTWjhZRXlmYTQ3ZFBuUXZmZjZBUUQ2U3l3WDFYSzZ4QVVYMUR2bU1hUVd1MFNaYWpGcExuOEluK2YvYU1BNGh5VnJwVW9UWWY4WGdyNkFmSm9ndHhIeEo3dFRHZDBydFJMWHJadXpaQ0R1ZmhpVCtRc0NtVlo1NWx5S2MrU1BmcHhzOUFjSkpBZE5TTEY4QTRLQUFVcWxWaGxoNWRxMVBaeklibkIxQVJnelprL1VOR2xjTGpBYUxqWlRBQmRqenJNbDIzOURjR0ltRmFLNFFSWFRpZW1UYTI2K28yQ1JMQVNnSDFlbkVZaE1nWlhXL3hTb0JsS1BMOG8xZS96WFhFZGpXS2NPVjdVWnlNMHc0MzROZkIyMXBKSVBKLzlNKy9iOWJYcG5Db2ZlWkxOQ3RFdGRBM2NSWVdJS1h5NWVFMklTdmdkVXhNMllma1dxRmwzK2Z5RDkya0dhVCtKZms4SDVWS2Y0R2pKbm9iakEzQ2ZGL3VSblhNWmtKdFNsQWtseXpGZVBsUDliZGVhK3czcVhEdkpQcWZWQ3BHUC9OTGM0VXdpSnpHYmozNDZORUJKNGZzVFZmN3dhQXZqQThxdFkxckNGOVI5bnNKb2MzUWk3RjlNbCt5UzBSaGNSYXdFQUtSdUNGVWNzWWt4SWVjbUxIYUJEb1JRYzBqb3d5UUpmb2djWlN5MGNxTWdaNmdmQ2p5UWRHU1RmS3lZaXRCMUZiTERSVUpLM1dhN2RieWRRbEszbEZFWUd1OTNiaVQ4WGMzWU1Td1Z6S2cvODZ3NStSTUtJK2t1dFRySFNXcTVZWVcrd2NEYzI4b09yb3RNK0pndEY3cHMwRVdxclNaRmN2TFpjQjRrMUpvSEZYL0xEUVo3SVlPMTV3dzlmTGJVNUpiZWt6d3VqdjVrMXJLa0NLK3E0OHVXTXhnQys1MHA0OWthMWgxVWVjdEgyS1NhQ25YVncwajRZeU14M0ZndldTT2VPNnQyUTczQjdDbW5TOVhpdWFIZk9SMUxEYzU2NWduSTRLUDJHdmI2bG1OTDVjWjZaN3pCZTJQQ2dlZlpINVlQTUxaL0c2WFNKdjhWN0FqOERiWFRjdW9tL044b04wSTdaUTBUK2lMcUo2bEdjbTZGNnNldGU0VlJQNGdHTUtPK3g5RloybWxqdCtlUzE1eFpCZ0U4ekxrZGZSTUxGajBGdGxzbndiNVBYMUhmcC8zbjlzdDhucXczNU82WDVPdEhEK3IwVnA4bnN0bnllN09mSjZwTmZKMzQvUDJzNEJlL2F2NzlidnYybWUvV3gvaDl2L3dmWXdCNXM1UDBmTUg3UC9yWWQwR1l5YUxlWTgzVGJqVmtZRUNwMTNVMStVbDIxdlRnQjVnM2hockxHbm5wK1lZKzhQbG5Kb3RaZkxYUzZEVWlFMUNqc3VZWkljS2hVVTliOHZpZWtPWnZhc3orSTJVZUtPeHhnWjd0czBoQ29Iekg1OE93SUE5L3c0T3BlS1pKTjF2a2FZY2VheHgyNUR4UTBrSW8wT1dhN3ZHbGJrTGtLazd6UDlDb3VJanFkMnVtdUF3RjkyUzhNSmVSbEdONWhIVHY0Y0xLeDZ0KzQvTmxBMFhiV2RoeXorZ2ZnWERMenZaMGEraDZISUdEdmRSKzJpeUlpYnJyYzIvYVFSNFNYRDBhdVljdmNPcE5xbUdlTmw1RGlRa3FSN05GOUhPSW0zM1ZscGcwUTRjTkQ5dWJ0eDVCbzRtaC9veEtKV0lPVlJ6NHJFZ0pMU3ZJWDYyNkFmRkx0V2hrbk5neEZlQzhoa1BNVXcrRlgvbDlmaEp5a2lZM295Sk9KNEppVjkzajFmRUZhTlQ3ZjhYTGlWOTFZcHMycktPb0Y2VEc1SEp0WklEVHZKc29vZk1ZZzg2Z2FzdkVhbWFFeCs3RGtJZjlvaE85S3k2d0Q4NjJWMkN0MzVGV2V6d1JndzdFdWlIdzczMkIrWmhYRWtYc0ZDaVBzbDhUMXJPOTUwN2loOW1KVWx6RmFIbENXYUR4Z1k3NjcyM29FYmF5bmlwZmVLakYyZFRhY3FaZmpmWlZXekg0M0srd1ZuaFdnWENhYlVYY01vT2cxYUMzR1pVS1ErbG9udGdWL1QzNi9OWW5OdGxMYVlacmVJMTRsbEhjYXZueStqaUl1RUNnUUhhK2Fpamd6bGRnckJZTGI4Sys1cGdXOVpjV2s5SFFRakx1WWZ0VExCdzl2ZGhPQ01BT3A5ZVEvYkY2cHlINmVVUkQ1bEcrc3NLMEZKVS9INm83YmZEaUlpRUJwTDlEZ0hjK2NnTE02UzFENkZsMmNnV0pGekhZMXgwaVhNazVNdGh3Tmpxa0VBVStXTTlvczhEOVFZNiswbldYWlIvUE82bFNhS1ZjRnkrTnBmM3J3Q2pDOTVQamNneWpBbFFpRWVKWWlJSVZBc2VoaG5NTEh3R3RCSGVCQ0NLOThJZ1NrU0VxcWdMekZubnVlb3Q4U1pra2g2eCsvT2xLWlpCc1NOU0FxbzZDVU90UTJlQTZCMWZ3aVdSMVJyc1pieGFDOTdHdDdQY3A3dE9rQmVWQm5zTTg0WnBxU0dKZG9KU2Z1K2QzeXFjZTFVbG5RSytnd3NhV1ZDN1EwMXBLRENjYUZEL2N4ZVdQOUwxLzZtRVdldnc5NG1yTlVoYmpLNHVIb1pqR2ZKS2svQjBVeDE0TTgxT0plbDNTcjNxMklUN25ta1lERlpLMnFZbFc3S1k0bS9Dd0Z1V2FRRUV0VEd1VDBkaDVTQnJJaURuWXNoTGdRZExYdkR3RllzTzlGY1dKTFVoUVhuM3MrVjlaVnlTRXlsV042KzdtaUZuSnQvakVqVHJacFRnSWIwSis0cjFKb25TK2k3T013aEVyWDZacE1VS05HazdmOXJjcHhMRXFvY2hqKytHeTV0YmtmdExFVDR3V2FHK2o0SDRzcCtWL2dVSlp3NDZyQTBOWVRCUlZPcmVDZFFlTWdTLzhQcm5VeFUwMVEzYmFQMzEwNlZDYnVhb0RIUFViSW5TODM4TmR3NkpHeGhyRjN5OW1HVTArdGtWSTZ3bFVQb0srbldDajk1emowMjMyMFdSYUUxNFVjL3pGMk1mRVN4WFB6M2xzSTNtZThMV3l0VU5nVmN1NE5BUTIycnFCQ095S3lTbjhIcnVxNGZ2dnFGU2w1bFZEaXJ3Z01aYWJJdHA1VlUrQitMbmJmd203ZDVJUU5lTm5QR0E2Rnd4c2tvU2hwbGhMRkhrUkFiQnN3NzJTVTdSYkY0Uy9yZFdpOCtFMHFERHYxWGdhTXVwRVJTRkcvOVUxZmhwTGN1TUxHSDQrcDZEYWpvaFIzbTFuQ3NqbVUyU3UyRUZaTWZHa2RaOVpUdVZnanpXVWFFRmpHWTcyekczbzRRUHhCaDNmRysxYjRQN0c2RWVjOWllODYzSXJsQ0tPY1VJRzA3VlNubWhOVXJhYVptekMrWjd5eGkvZGVZTGZ5R3l2OEJHNVZEZDgxTi9zUUdmcDQwNTdUd3lENExpdEdqS3R3b3p2d2xMaStEZGhwRk9FU2todW9nYTBnclo4WGRLUEdhWmQ3NDUxYXltNkNBUUFEREtxdGNuRHZ6YmYvZWtkUEgwRzFkd00wTGZ2VGtJTnZSeGZpazZyTVpMaFN2cXp1VFlnM3YyOW0xcTFsYnRmVUp6QnljTllwRjhid1NtQjFTeUFUWVc4RGdSTVVRU1Yvamk0dHJxWXN5N2UzVEtQbEh6VjEybFJWa2dzYU5wSGIrV3VEb3p5T0I5cEpjdXBLUE1GUFd3NnVDYzJOQ0dJV2NHaE1QUmVBcHF4eGFSN2VyYmdmdW1HemhYc29PMUY2aUwwVW5wM09IZFVPSFpoSE0rck9aQ3FFc3VHbEE0TWkxTFZZTC81dDc3bnJZZGdGVXliUmt6TnRPbzFUTjczK21uZ05nTEtkRmF3ZGp5YTZNRXRQWTZ5eU5MWEhMMmM5b3RLS1NGRUJCRGZIdzUwaFFadURpZXI3ZEZRQ1pJUkdsS29zMTF1Q0I3NjM0SVNBVlJ6cDRjTEh1YXFkZ2VZV3U5QzdLSm5qYVR6TVNEZTF1UXlzd09PVTdzUGJSL3NDL0JxVDJqWm94dzdVbjFJYzRoR3paYWsvMHFMTWxjY1R4MHA5ajEwc3FJbDhZNFh5V0xrcTlTdjhCekh1ZFBSeFQ5dmFCMkszOFNNQUEzb2tnUE0vUjZsb3p0a0FkendQMVRHaFc0VENHdUdKN0dxeTl5T2Fyd3lnbjBiSGpqNnhuZ0tTODVVZVVWKzBiejlCT2dVYkdvVEJRMHl3SUcrdDloSGloc05jdVZmNlp6R2pueEFJZTJ6c0tVb3k5dnFTTXFNUjd5cUN2dUhXa1BSZ2tJam5hbGpWdmNKY2JEd2k5enJPNzBlRHFaTm40bTNzWnBBbERxV1hWMVBEQkdub2Q4dkJ3bHBtTCtxVll2SUZ2N0c3bmR4bHpXYTV6STlKYndBakRRaW9xSG9ZcThYc1dSVy9mN0M1eGxVTHM2ZnJYaEhndDVweTBXaEU2dHBiY01NSEpnVzBqNkRDV0JSOEYxYjdaVmcxMjlaMnd5a1oxRktER1hYZWhmcXdyenNCOUFMSmxHK21LdTVSMVNKZDFLNlRRQzArSmxYZ2RLYXArMWpXdEs0QVVkbFR2WHBxRHhlVk5pOG9URHA2WHEyKzRmcFV4dHByQUE5ckVRNXliM2JuWkVyMG1rUUZSblAwdGFpcnMvRFBWTWdMQ3Y4aXlWZndFdmNGenMwVHVxaExlTjdndXlsMnFsOWRZNEhTVjNOWC9vajNqM0hVbk1qeFZ0bHByc1psQUszeVVwTVNSR3JocWNjNWZRY1hmenN5bDIyOVhtVW1CMjB6ZGZLTmFaR1QwdzdhVlJZN1l6YjlTVnZKY0daSVdoSGV2RTNwbUdGNE4vZXRjdlVyVkVMcjUwaWdxNExoZldQNWhJbUk5L1dWU2lIMGNRUVhMclQ3Q1lIWkVYbEI5YUZ0VVdIT2NFNTMzajRBejhTVGlzR0FWUTZOV2dFRWE1TXhUVzZ6QXZtTy9ZdzBObEFpRmRieGQ0dFNzeVg5VzY1YncrN0xndUdycWZyMWF6WVJkUHlTcld1c09rN2JtWmNDb085WUlxNzErK0JoYk5RQ2dJaWNDZUhyUHdTTWxqSGtlaGpJaUFDTzBDNHhncGk5bklKWVZiVWxnRFJKcHU5eXhxUHh2KzdjU3hnbGxDUGFnelRmSTVJcFpDWGx2VHU0OXFQeWlxZ0RyUXJpWmhCb3g1bnNXV002VlhSanRoMFkwd0JYNFYxV20xbzJ3SVhQcVpSK2QzMTI3YlFCelZDRkhrSnMzcDljek1jTllxa3RRbXNiZ1QzYTYyZ2NnblliWXY3VmVhS3l6RWZJNnhxSVRGK0g3QzAvTWhWUm1LTnIxMi91S1dWTXNBSFJqdW1RVWltQVZQb0R6cVEvQjhzR1FVaHFNcGcwSXg5S0ZxUVFLcUZxWGZvTVNaTEY4MSttS2JTOUxIWUtVRVFqV1IxTkhYRnAzai9OOTdwSndlaFhiVWhYTWRHeVdkWC9la0ZnWE1Da2hTc2x5TVhSMVgvdVhMdTRCWnNWKzVCZnM0Y1YwazVwL1k5c3VMZ3lyUGRjd2tYWWF2bHVoanVLV00xaFhFV3JEak5zSlRkRzhDN3Uyd2RiN2tCY0FObFdyUlVqSWpKWGNNeEZacDB5djVHblFKcGpLaHNkQXVxOGZIcy9FcVphRnlxaWlpWFJmZ1R5cm55UXNVVDZWRHhlRmNyRXpjZ1NkNlFoNFh5YWsrTEhXRVJiTGNYZExTUHNEN2twci9xVkRiN09jQjRmTXlMZVpHR0J5Z1RNTFZ6UDdseklCS2VWVmhrcFZMUVJWcitrYlQ1bDVnR2pMM082Qjcydno2RHZvZWFQdGh5dnVSeXlEU2k1OUVlMHcvak1RYTJNaFByY3JIakRLTGJiSld5YXRnWDkyTTFNV3FLNTVoeE84VHBwdDY3N2lWSWI1d0htMThrOTdSRVZlZldTNXJ3NXVQSGR4dXJLdmhBTG5GWmlEVmlKTXdkSmdnNlhnbnFPdW5UK0l5QVBhMFRaNnhXRGJQZXJoeGdqdUlDZzE3TlorM1hzN2ZmM3daTE1qeGVxVWxPbnNJT3UrQ3k4TDMwcFF2V0FjWThBUHFQUEhjdERIOTQ1M3Z5eFRQcWNlUGRGSHQvVVFLN3ZCUkVqWFVwL2cyVzlETVJUYVBxRE9lcUoxZTd5eXFpakNPU2lna0Rsc1NEZDhTdGU3Y3dOd0dVL2MwdTZWSU5JZEwzVVByV2pNNkRJWVhhYkZ2VTZyNWxOWGJmcFpORnZCdHlhTWhGelp2dmliQUhqSzJQaU5lU09jSk1KaGNHZ0IzaGZLdjlQcjNTc0h1SEpxMFczVjRSZnA3TEZEUXVzb0dsa3VoVGtpYXE1cHNlV3VZSGg2aGd3cThSTG44aGRSZExHZWZGZXdYM1ZyYmM0YzN1U2s1U0V3Y3ZWRlU3elBkd1BJQUlzQjlTQklVY3NUYzZMa1BUcmlZUTVMM25ZNTF2bGNuOXkwTHZ4dmNjOGl2ZmJDMHUvVGNINmVmaVFXbzZXd1ZBSk83ekJvbCtRSG9LTFR1S3pia2hYclBTaHVRSTdNbkZXeXlRbG0rNDNWM2hXQ0E4YkRNMWprMmFKUGxQd2FwUW1sUlpUWm00ZVgrODZxeThNZWhOeGx1NTd0WXJyTzN5eE9EZXN3NnBjM3FGTlpaR09NWEsvY05IdG4wM0M0dDViOThkblV5eEovVXpZbzlUWXV0K0hyeERZRHZlaE03SU5zSkVZL3hkWTd5R3BFVFh0c0JQaklEYzRka1kvdzFuY2pXdit5M1JUQm5Wb29GY2ppY0pEMlZiYnA5RFlqTmZFc1lyZFVnSzZ0OFg2L2VhWEVWdTA1VWxBMjJQeG9QOTB2R083SDdJSHJEeHJ6UFZpeGtGRVIrYjFDTE0wT0wwRE5YY3UrQ09XcDBQQVMvQ3BLcVZ4RDRuWU1XMk9yeWFYYVBNdTFoM0ZDSzMxTSt3WDBBRXhtdmtrcnRKZVY2NnMveWlhMXZBMTQySFFTY1RqWmUvQnQ0UndyVHpLb0FPNGlhWlhoYzhsaVFrQnNXZHU1czAzZlVJcW9GdEE3VDBBUGRqMXc1d1lia1VqZm9EWExHUnQvQ2VRZW5PSGdVMm90bGpkWmtkbDZWQVdvdWo5S0FMRGJUd1AvTTNqbXZ1ais0S3U4ZE5tWGtjaUJKYit5UjFrZ2ducCtZZFRDMjBlMDREVVc0dVNNNlJRRGo4WlFxSjBSZXdwcW5GUk41UDh1N1F5V2lZVlU4YSs2bnZGc0pFa2tZOWtqdStJMWpVeU9mZ09tYTdZWDJFZVJGRnVCaXpDUUtpQW1PT0E2aUN4L2NiUERyZ0p4UjlJRXB0dDBwK1VCUHp0NGZuMFJKeGdJcmJkQ3hpQ0RlY3VNcU54U0V2MnN6cFJHRWxYTWV2cFByQTNmcGptUVo4bnhlRmk1NzJnVVlDUWZMNUc4SnFwajlUUFJPdnNQV1UrNzdHZTJnSUwzRTQvOERON0lhVzBTUjV3WXhFZ1dIV1lnNi94amlpRG1tNnFnS0Z6cit0cnNteDVucHl5NVh5YWhVQk5MVjRDYmJsNnpoUjl3MFEwTGpmL2ZXb1JMMVZJNXpYSWZHZmpaY25KVjRTTnFXNFF6UlBSUDlOckR6NnVPOXQ5V1Z3WnlHa2JLZ0tuN21wNmdUUG9LMm9KUEIxdWkxOTR5MGlNOUZoMGFaTXYvU2hQMVNJWkZyUlBVUGxURG84ZWl0UFd5K2tDQlowU1ZGNHRIYmlzNC93eVpoK2lUYkk4WklOVi9JY1VUQjRlRjNSU3QvZDYrMGlvOEpKam1RME52WGV6NVlPYlVHMFlkYVZWZUtJaEJsTnJEbXAxSlBJWE5rK1FxcHpzTTlKQ0N5RFAvQk8wZVFSdnNQaUVlczhlZGZNd2RqM0k3Wmh5Mk9DS3pBaW5kUHBDcnA5empaK05DalV3V1JhMVhXR2U4R3RNMGl3RWhJbGwzMDRwdWhIUEZaQ1V3c1M5d3RhVElaOHEwTnZUbWpWU3VqeEZGQjRZMTNEWjhPR0hMQ0Y3MmFGUW51VG5iYjFlNFlXY0E0VGFoeWdCZitzc1ZiRlQwdGtFcmh5aUdlSTVRcGtpbTFvUGhFdll2VDRRNFJxUExaZ3Jwb2FhcnAzWDZlM29iQWhsaGwwZXJmV0Y3WnRJRzFqYVZQSDlxV0dnSHN4bVZRQWdkaThkOGVwQW9jM3BkaVMyajg1TGtQNUdFRlN6VGkwRTNvRHd2ZndvdlZkWGdLNmtmeUpmSGQrd2gveWQvdXJJMGYwYm9scFNGMHl5aGU5Sy9ZY1lyVit1SVB0eDBmU2gvZC9LcWlSUllPSEg3R2pTWTNiWFpxODlRUzE0UFE2dGxtanIzWVRseFJHSzdIRmxWVWNmK0tYcHh0Vko1NmU0ekdpOWFnY0llQndiZzhzdTdqaldYVjEydXpMQ0FWRXpKUlo5bFk5QklaOUs2REowaDZHNGZVTW9RaWR2cEZaMG1mT3VBaFBzTzBFb0V4bUFUb1QrMWRBSGErVzROTkJCRXdqa0lnOTQ1dHNZc2ZwOWZEWE5hay8zYVhKQ0x2dFhGcjJ3alB3OXUvZDRUZkZWMVVJU3ZKSnFmbklXVU4zc0IyV0VUaGdhbVNJZTNGS2Mzclg2amJwRm5GVExyMStGMHBjQndpOS90cUJtSUQ0SjRGSkxYdjF0MGhqMVN5cysxdlAyVDVnbVJSNHVWQjZqSzNMQ0lIYUxJU0pUS1lZTlJqZGJsY1N1UW13cVdObWRLbVlkakEveXo4NVFSNHkvUVRpdnVnakZEMmNvZUNGN216SmZwSTVlM0hSTTAwRW4yclhmNWlKVEdzODJ3UldQL0hYRU1iR016ZXNVWEdPS2gxdmw2UFBkc0ZETkVvOUtYbEpzK0UvRnBVM0ZaeTA0dW5XeS8zM1VsVHZzYnN0dEhXcHVUOG5EL3lGcGw5VE5ENTk1ZnFKR01XSmhhNEp5cEY1OG1jcmNIdUdEVnZueVRsTzYxc0pPV2RRaE1hdUNOVW5GS3J3QVZVcFZtQW1oMW01YTNPZGFxS0t6aEIyMUpXa0IyODZoS25CMHRDcXAyallFWGlmb25LYno4eDF2SzZIeHJVWGVFN1cwYUc4YS9iUE1xcW14WjZtdnh3cHZ3ejNpSnZKdUI3aFpzR1ZkN0NObCtwQ01xSVBEL2ZlR2pmMUh2OTNnOFlqUkNNUjZ3TkpUL2Y3MDZJWHVZWmRlR254OTl1QWtMeTk4TkljUitCZlcrWUFobi9rWXdERG0rQnNpNm1oSXZPV3JxWmU3azRodEhwbFI1SU9pRW4zZU5ZZUtXNWdyV3JqMGcwMW1DcEJOMFd0S2lyd3Y3V3VrWlFpMy96Q1hVcjkvMzhNT3RpUlB1Nnhrc2hmWWRaaVNwT28wY29BanBERHdhTnVJdW1QRkU4N3VkM1hsTkhGNEl5a21GY1FOMWlaaS9rVXJQYWZxaVE0UUVIUDhtUnIwMXFDOWVUY0djbEdKZ1dEVk9yUjFVMzgyUm1zZGxHZVdIaWU2bWxoL1F6SGtwc1B0QW5FYllrY210K1VNSmhWanRRQjZZZFMxM0pMRTVIeXdHWC8xSlhabXlEZTN2dXh5dDJEQUh0UmdkbEhjQStsWmk0c1UwQXdrRUFkckNvRE1FRVFBeDJVUzRxaFNmUGRoaDdCTWkwS0hmazNmUnJDYnhVcjMvcmVWUWM1WEtLR0ZSK1pNKzQ3RXVRUGhDeUNkZThaOGsrUm93SnRwVkxUQm8rVjVVRklHMmhWTTZGSG1nYUlNZnMwK054KzZhQzR0cUJzTkZxUXlsb2RKRm52Ri9YSnZUaWc2emZIRys4bDdBOXdhTDh2TmhoYUZmYXhWdmFtMnFBSFFIZmR2Vmx5TnNXNXQwaGRxc0lxK01OZ2NGd3ByN0pySDBiM0xwZGh3VWZGUGJ6MFRMNm5WYWthSlBydTVzd2hJbFRXVS9UcWM4TnNWV1RSckF4OUhvY2pYeE1rd3FndEg0bmkzMWUvZzhzQW1GLzIzd0xrVzVqT0hLSFdYb05ROFJTblBraW1JMUdnUzlFVjdvc3RMWHBNNG1wYnMwTC9JWTRmNjR4RzBRcGRIUVhVZ0Z6R3ZGMWVhZDhZQXlUejdDL24yK0FRT3dJQ3BJMlN3UTF1VlRHc2pUQnlWUkZDcDlxVHV6US9mYjZ5bVI0VEVlVWlwcFZUSDJzL0c4K0FIdHhXd25xNS9DVFRici93L0xuS1c1NnhwaDFURXQ0U0VDK2pLTUwxVkprRnE2b05wcnZ1UHBwSWMzZnBYNnhFcUdqMkZDcHpMa0RGWmFzSk1MUXR0ajlEQkw4eTZWUk1IYlY3d3ZEZnBMSFRtYkZ4VktBWmoyL2VwWUVGYmJ2QWpGVnN5K0JDNmd4WFNJbTE0OHFGNmhKblFSMlVqeFNlZldzcGoyVEV4MGpHRythZlhJdWQzNXNiSzVWZC93cVovekR3Sk5ubmR5UGJobCtmbTlHKytqYlVqeDI3MGFZdksyNDdUWWtuUzJpdGF4TEswQlFvSmxLOGZablBaVE5HUDRoaldaL25vNElmdlhMRHB1RzRKMDhaQXN6VWNuSU1PTlRRV05HRlN5WjZScFREUnJIS3JBV2pYT3B0aVJTNWJIekE2TjcvM0Y2Mmp1Rmo4clhnR01hU0pYc2FGNjlxTXBta0hsSHN2V1g4LzhyaHVmd29JVy9uRGVhQlBqek5SdURTdWkvR1VOVDlhekZvenkra0tESGQwUHErcFhTTUxxNkxReU11c29GTkpNbHFZVXpzSFdQWW5QVFhaSUpqL1VVNGFxeFoxc2EzRWdQbitqMWF0dlVIM1NuaWpUZzl0TFpqUk14MzNBR3Z5VnQ3aGY4dWtsU25NWmZ0Mm41RlhqN2hFR0xTa0pFdldiWWRUUW8vTGtWU2s4dU1jNzNnMHpmdEVBcGl6TEREOGtTdFgydU5idVoza3U2dVZ2N01JYXN6amdYTUVXMDJzZHF1MktZU0tIVmtBUUdBanluUXYwUURnZnd6Y3pLQUcvSFpwVmt6QmROMWNQYXE5TU9GY1RLK0Q2YjlTVHM4dEZCMGNJdXNMbWRBVXdVeXN6RTYzL2NCSzdhZHVEOFZCQldNeW9RSCtzNks5blR3S0Y1c21nQTFpUndPUE5NQmpFL0pVUk5xUXNteElVZDJkRWVyb3Y1Y1pRNWFhMVJFN2FyVlVCZngzTDMxazJRaWZJK21Gd21TcnM2OGdmaVU5dFZ3R202SFZrc24zenlRYUtiakMyVGFtZVQ5RERqK1d4am40cmR5ZjhuaG9VczA0aEJlSU5EU1d6U0tiZURlMHpwUTg4WmI5ZmZ3R3lBRzRsaGJuMVdFUVpjdEhROFhRbjZsRmwvbUlPcjVRa1VYcGd3T1g0RG1QU3oybVg4YmxDYkdLNmExZGhzU0V4TGwvU1VWUjFUdHlGaDk4NTBxdGdyaGVMS2NicXpaVmR3dEk4SThNbUhvSS96eHVxOWREV3dweVpnTzdWdjlVc0t4MUF0aDZ5a1pCdkhnSVFBTGNqQi95SnZudDBud1dra0hiai9LZnRhN0tXUU1yVEZOczJYNmVhMXVOMXlvVFh5eTlpTE5mN3hlTjQ4dFd6dmhLblE4MUhjVFlWY2ZyVVpZazI0bGhlUTNRcERrZFVkU3BicUxQNXZaMlVjS2h1R1lWNGEvWnc3WlAxKzA3M2MwenRpNGZKQVJhdUJ2NmRTN0F0Q1k5Vkx3NU50OFo0NW5ZY0dYMG51QkpMTVR5VEp4Qlo0dnE3cDNyWVU5cUVWcUZVWUpMOTJlUzVoNnFvQ3lyQzR3QXF5blNMTmRMTjNGTGVQVU93MnVNWUJUTWF4ZW9ITndtaEVKbFNOOFIrSE9STjRzSWxZcHdQc2h2NjZLVHRoMjE4QTVYU092VWpoV0cwM2tJUkRKZGpMc1A5TzF0YzZqRDJTWEtaZy9xL0pIQzUyRDAvZ0VCTmJjYTI3SFR3N0NFYXhGVHpqeFRENFNDN3FtbXhGbXZtWU9aenFOWW1EUGgyZDNzRmRuenhSdTB1QkdIK2tGM2hZeE5LUzh2TmtTdHBSZ1NpWFhuUDROcU1LUTlwMEh1M2d5T2xJUEUyaVJiak9VZ2owaFVyeFJCZ05KYTI5UEhCL21KRm81U1BSOXpLS1lpK0FRajYxdDZYMEZkbWZpUVRxemFybVVzVk5SaUdjd2NKZE9ycFMrV21TVmk3cXl1YzJTaFhWN3V1dk1MQmlmWFZKUnVoU1pwVER3NHpZbG5iaHFFQjB5a1U5d2w2bmgyTEwyeHNoWVpNOGVqQ0hvZWNkTnFiNVpHSjVuMnMzZ1MrWmFxNVI0Yncxa0VUcXpybndHUklTbnV4SUE1dTZuMXdZV3JvYjhNTTB3SVYyY1llL3FYcmRQN2ZuSmdlS2paTERLNXFSNXlLU2U5RUlnSjVnb1hmb0M4OGlWaldDN2lvSWpkWWVmVnI5R2V3TnZNSGdXWlIvV3puOHZuWWRlZzQvMjhLQ1kzS1ZlS09BaWRuQmxqWE02L2pyVVMxWlFGekxCSzhXd3NqcXJFYWx0NVVheU9nOUh6eDNRQjhNZXdtUWVUL2tHUWRyOUEwOU14YmtFT25ZTjN0UGx2eDREb2RsdGlwYmxtbjVESm5LUjMvMWIwcXBVd3ZJcGtEekExZmQweXFxdGFYcDg4WHgwc3hNbVREbWZtTFI2QXJTWUpwUXJ2SU1GSDRqT05tb0tBVG03NC9zQ1dzczkzdkVkQkw4alExb3Zia3FzK3pKTkNHSTBaejk1OXJ4eE9NaCszM1E5UmJYY2VFS1p1YnhWWG9SRFNpOFZZTi9SN29mMExmZHV3VkhoQ00rODBFRUxsbUluVTQ5dzI4b1czdU5nNnFzdUxLaVNGL3l5MlVIZ3dLR0duaUpDb3lLVDV6UWwwSi84amQ3MHJrOHBYRGV1NDNmelBIMGdTZ29qU0FvSCt5a1hJcTQvc3laaFQrK29xQWRHMnJlcEtQclJvZGthZVN3NStxaWlXZkFOb1Q3WTJCM0JlU2VhRmYxVVA0VHRKTXhZaVU3aFdzYjhxUkRvMEVzem9JSWZJUE54clF3dDg1a2phZTR2aWVlbkZpYTUrZGRCVkE5NVozRVQwMlNNSUZENlVOTEVCMDcxaU1yS1RkOThMa0lhc2NWb2tuTzgwUWZNNGJpK09MWUpISnNTN3REOSs1aDE2aHFkeUdwVG9WT2xQU2pzRFczdkY3Z1NNSXIzSGZKSGovU09sdXZzSWtUeEIrZ1dDVTljMzVhVWJiRlJtOTc1MHpMVTNHam92dy9YVUxaQjBQTitzMUNGVW9lYTgrZlFxL1Btd05mMW5QS1h4RFBuVzQ1bndJL3RXRE1jR2RtRnJnbnVLTzFvN1N1V1BHWHFIazF1T2NEYW9rZnBwT1FhdENqcHpQUkhGTXp6TjVwZ01aaDlMU2UwQllORFhoKzhpR0E2eGxUZFZzb2NpNWszQ3NnMVgwbWNvUVFaVEQyUU1JZzIvS3pOa2ZoTEZZQ3RFWnhPdFZqT01iam5PVmMzV0V2bC8yK05lcXhRN210TW04YkxyUXJhTWZHbVhUeVhTZ3JnanJXVERGdVloaXVOaER4NENVcnpPYk56RnVsV3NNdmo1L0RZMGh3R1ZJS2ZWTW5QK3FMYU5LbGJ0Z0dSSVdYNjdQVitOeTZLOXRla1JzWVFRem4rb3lDcGNTa05OOE45L1VqRWdoUkNTdGpiaE1CQWIvUldGOXBFdEJOaHlyTXZzQ2l3WlBPQ0c3Nm95RUJSOTBGU1QyYTgyMEZTd2FnTlNDQnpZY014cS9WQkFYV2ZWZEtDeFQxUndvOWdEK255dTZtVjEzK2dRNk83L2RMQmZweWhqYzZTc3E4ZkhhSFdKSGJLeUNrUVJ5N2JMV1dMTUQrczFIVmpKdGJpMVdwZUs3L2c0S01ja25zdXdBRnAyYmVyWFpyR0VrRFdodUFJOVVDa1lyem5YcXU4NWRYRUZzTldSVFFwdFZFeWl2RW5JL2g3YlFEYTAyM2NDSTJWODBDWWFSSTdBS3ExK2hNMkJNMzcvWis3d09JVVkxTDhxaWZMNFFqaFJDbTBZOXdvUTZGTzFzeXRIbVNkMDEzLzloVTZsanN1Rk9uTVE1QVU5bjlIbUkwVk1RY1ZKV3I0Q3lxcXpCZXJVKzlncVdQUloyMUVxeUlOSDhJRS9lUE1ySUxvNjJWNmRFcFR0U0FxUS8xZDRiZ0tFVGZUekRsZjA3ZFl4TzBXTk1JV05icjFsdlh4OUo5V2hXSzNLSnFkbzFyaWJ2cXJjam5yMGJBbzR6K01nN0tUYTVadFloL01peWJrQXZjRXpDSGV0VlpTb2psQkh6dlVJTWVJcnF5T2o1MDBYVGZtdEpGYjlHbDJ4N29QUzd2MHFlZEVidTVMV2RYQUhmNmkyN0x2Y3hrT1NMVHpVYjlSN25yRkpDVXBEb1hGeVVQeGdCUm9yYXlraW8zanZWY2dFcDJhMm1mNDFyWFpRRE5pV1BWV1FUVm44dE42OENMTG01Mi9pb1M3dk9sWURlWXI2VGxpb1dGVGdSakdoNlI4TXZzWEVHRWtGZUpncDcyWnpoaE4rbE5zN2lLVHFrK0g3RkRkU1B2TFpWL0FJNXNvSml1cGl1c2xtY2hGZ281R3I3SVpxcmpqUDNGZHFnNFRnck1OcUEzbHdWcWcxL2ltRXJGMWZEREJvemJ6NXd6UnlNc3NJakMzK3VjSmowM3YxR0EwbVduTHY0M0t5Zlo2TEtBcm5ydlpxMkZQUWJ2SUo2VzJHZ0RCbmFoWXJhZ1ladDZpVm56cHlWVXZaaW9XVnpHVXY3MjhmNGNtWlNETFFhOVgrVlBNc01PbXFKbExPcTU0WjIxdzA3ZGRTOHNPMzJQT0gwbVovdmZwczFZQ1MrajJKV2MxaFZHUzBBNFdmc05vS2ZTRFV0ajF4MWdOWllDTG1OWE9IUHNoOTFUd3E1MTZpR2tvT3JHcER1ZEZVVVN5WVRVV3JZenFYNDhBRFJSWVViWS9HTFpGY0pWc3FaTU9Ec2w5M3QwYXQzbnArMDJFRTZWZzN0TUhDYUszdVd3LytTYnliQUMyWXM2dzhmeitBNWRVT2lUSzg0end4RkhDMWk3Q0FxWXdaUmtyMEZuTzJCT3RBZHQyUy9KM1lIRWQ2V0ZpYkd1VHNEQ3NaV2F3cDFoVzZ0U3ZvWStMQ3Q1dDltV3UyaFR4TVFDckpLcFJOTnVzNEt5NEFOZjhwVThmWktVMlRscjZxWlA2TjRGanIwSEM5dUVYWmgxQ0R1Q01SZ2h4TTdBeVNhWXhkTWZSdGFaZHhSYnlrQWtCVmRYVXFKN0cwWkYwVTBYcEg2ZTNRSDZ5bUlUdVlBZUFLQitlNUhIczYxZWliOHNzU0VDcGQ1Y3IxNnozdkdrRlFUYzFHZG1uUmc4OTUwOVovQ0k0Q1VTTEpFS0J6Y3hiRkoxRlVPRUZrN09ma3NZNU10b3FUR05oVGRML2xnL3h3M2ZYVGUvWHRZODliSHFkbTgxc0hQU01DMGJsVmZwNXd3NndRRHNCRjB5algyV08ydmJkeTFtN0JQdE1EMThzaWx3VVhTT29YdW9ENE9ON3JSeUhBeEp6Ni9YNUtvY2tEeXl2ZGgxUUpBa1BzNGFpc3hSQ3BwOTR3dVNpWDVIUDl4dlViclRLUGpkaS9HMUJPMDRjd210YVZ5aGxmUDlMWGlkRHV0YkQ2SFQyZU5YWkFzWTQveUJDcDhUT0tTRjVyWUN2NStlUnAzajVITHhJd3JRVCtabEtmRy9Cc3VkekpPQ1BUTzI0WURWTUV2Y3dGbHlqeWxqMVQ2OHhqYjhTbmc1bTRDa3JnMnZnSjJ0TmM2TlZNck1wOS92ODR4WHVmcE5uWTIvQVIvS3NVNE1mYlZJMzRGVGNUV3ZzSkxERDdoMjlpTWlkNTljVldYbU14WDZXUURNR2c0eDFXbW9KN3drQWhBTE9zbTZnbE9nMDlqQ1p4Z2t6UUZIZEZvc2xtVkRSWkJwaDhORmt6UE4zY0dVVUNWK3I0ZXN2T1FFRkJ3aVJrdk93bUNveGhTT1dxNjFyQnkvczFyUDNWenF2dkJseHprNlBINy93WDVJUk55eWs4N1B2L1VXVkpSSE43dTN3Skp4NjFFcUxSVW43d1FPWUQ0aVlwRWljVmdGTC9IZmQzRFpHYXJYblZrcUNZVENhamFoYURCV2JkVUJiNW1kTTJPbkhuZUVJN3Y4RFNwdXlGN1hwYkJaM3ZjL1JycG9rVUJ5aEhTR3RmZTNYNjd4SDR2a3NMN0FTeng1OGhzcDk3UUxaMHlIOGFDRkJBMTVLbWY2S2gySVdYMnROVDBURVRxMVB2Wm1hdW02QWFwT05nN00ydWdzVkhwbzhDQlpwSndFL2plMnZJNlRZMlg0cUZ3Qk8wN0VGZnAyTVdiUjlMbkxIQVNjY3ppTTU4d2l4UWxGU2ptYThGTmRsN1QrRmxFYUhRcy9OT3F1M0NLUE1oMFhjdHpRVS8vUTRpbjdlalNYQ1hqMGhLSVhFaUJvY3VpdkNDV1lIUUJXajVyeXM5WlphbkdXNEZ3dXBJRnIyLzlzcFdKRDM4TXN4R3BXUi9jRTk1KzNzNUFiaFp2Z1hHdGk4ajlMYmptYUt0b0pyc0V1STBSNllxVXlHZXlVMFplWTRST1k2b2oxZWNKWlhpWERYSkc3cEVKQXdmVUVVOEYySFVxWkdvV1hScmRvRXhJcnpSNG85ZUc1V1NwWmhnQWpJYTIwVWZaS1NZZzRWRmUvb1Q2UFR4L3dVTlRpLzhWYkIrRVNaUEk3OTNIdHFlQU5MamtoWDZvckZYM1p2aUZLeE5FbzJZNzVSZkVHbWo5ZnJnYzFJcFhtcnpkWmV5anpWb3hmZUI5YWdra3pyZUZLeCtZY05lbzBrcTZnaU1CSTNRV2djY0R0eGZkeGM4ZW9OWU0zc3hjYjVSNE54M3QvdXNVWFZuOUpoN2tMUXdEcTM3eVluUTlxNzFuTW5tdGpBbE5kM216c05XZTRPUnNZekpncTNtQzJkWWtxNHA0WWNodTA1clljbUpxMWVLbjlCRmlmcTNPOXROVnlNcHpIVEVMYWg0UlI3Unl6K3BHdlRyaVV6azdDV1VzNTRhd3FGbWFsZ0Z0bnAvd1g2bGRJd0ZhSFl3UjlWdnpNbTVtNDRNOEYvSGhOR2RDWHovZVVOTkFRVDNKOHdCL1BYL1NsM25nZnY5NERydkJlNlBnNXJ2US9jQW1VOGlaNWZoMEFlS29zMklDaEF4YjFPMmVUQklYS0ZDQ21PdjlDNDdRWXowdXdDTmZKZEFIWVBra0xPWXJ4TkY2czdNbVhCZjlHMVdIQ1paN3YzdmpVWndaUlJiZVByU1o2TUNQMmgxT0pvU0lydzVzZzVQTWttZkhRRjQzQTNMY08wanNPWXdQcE1xWUgrR3o2TStvWVZMZWJNeEhsR0dwbERFUWRyWm9NRkUwZEZaeXNxMkJUN3ZkOU5sS3RreWxnNnVFVVhiTXN1Y3ozZHFSMXRlcktpN1ZOQ2J0N0VRUnhXWFptcXNJVEREWEdyRUNyN04zakdkN0RRSXpRYXh4K2g3eHpaQWdMcHlBOEV1enhKdjJEM1hwTmFFZkh0MnBIbEpaWW5tc3FyQ2VWSmg3UEhGMzdjZ2J4U0VidElqaEtvckVBNlY0SE81bUttZzgxTEhtcmFxSWhrVVUySHhTQllIaFVTSzdqK05aczlzUHB1b2lKMkgrY09LY2FyQTV5NGozK2QrY2ZTb1hjL0tGMHhGakZnQ1Q2VS9TdHRzMm1FMkozUU5OTTM5bDFuQmhJTStyTHJjdEdMODA5V0VxZ3BIblhTMktidE9PUVdsUm5MUU9Mc0k2cktIWVdVU3dzMlFBVEI2SVdQRUFXUzRQSTU2c1VRaHZoYWdkS2N0Z1Y3djNSWjluaWlFNWZtOGUvSU5Qeko1T1lKb3RsbnYxamNSOGZWWFU1OWltR0xJWkxQcmRLa2RJMDlXV1B2eVhjMWN6a0xXSjYzNnJrNzlOQ2NkN3FQMTc4ejdoOUR2dVk0eU9oNVIyMTRZZmFQOG1JQjBwNTlRMkVZeGhwZmQydlM2NDVrNW1mNVIxcFpkM2hWU1g3VUNxS2l0YmxhTkZPR3dVc3RjNnB2WENML2xoS0d2ZU85dTZDK3NDZmVGZWFhaE9LcHRseUZNUkx2SXBPUk1QQTdraHpmSW9ucWxLbHNmOHVhM3lFYXBIRk1qeG5LU0NtdU5seGRTaW5ibnNKOWJadnFhaDg0M1ZHMlFyZ3lwZGR3WUxpNDU5U0NsR1hQdUNGYzBRSUpTSUx3K1UzQmUrQnkvOHRrTkY0QlJ5d0tVK2pORVcvNXhaMXY5d3A0dG1adjRMeThQYm9zSkI2YXVWSk12YlU4MG9yY2lML0kxV3l2emhOdU9RZFJuNm9KMkg1REtMVTdLUFdOb0tEbmpEenprZ1pvMWprMXFuK1FvVEp1TVk3S0VLUHcyeXArb1RycE9UaTMvSUlYanJBTDFIeWF0Z3A3VUxDWXlIQ1E5SFBReThwZTBjWVdlbUpOanFObXhRNjhmUG96YzJQcFpCcW4rcHY3L2IwZFNEa3ljSk1YRGNkaGdQaU9sVWYwYTRHTDdpYkVLdnJySHlLSjZUMjBoUnY3OTR2S2k4VDEyb1BrbUdYSjM1VjA1d3U1bWEvYnRmbFRaNEpmVFhQQmFWVEQwQStiRGRyVkpMMUpJVU04Q0JKKzF5V2tvanQrd1cveGpzZ3l1YlA4YjVEMENWZkFBcU9tTWsyWVB2d3BWeDVLd3F0WGhqbkZmZHczSjZ2Y0tIK1lkZkNva2J3MjNBUzdNNUZKUTZrTjFmalBuN28yUTF6QkwxeXBmQVdoTUNUOFRxUVA0K3R5WnpHL0dRakNraWdzanBKeUNuTzVHbEpPcWtUSWtTT2ZLTDltWlpPSXRxYW5ySmRob085VUJrWEJJL1lTamlYcXpvOXNtNFRCOG9Pb00yVjU1Rk5lSFhxVk9sQ0VBQ2F6bWwrUm1GTEJxY2dJbjJkZVU3YS81MEdVUUtheU1BbXBVMHluVWx5bEEzYmJ5Nk1oMGp4YXpFWTJKMlBhVzBRUWUwRjNmVkNWS2xNYjNubC9YQk5MNHB6dkd3bUFQLzIwaDRmanRpWlVnOEE1OG5GSEZnMmJDTExITWRqdFh6TE4weGhpaXl3bHUvQkhqcEhoZEkwMjRNZHVFNHR2SkdaejYwRldMV0FoV2RtR1ZHVC9lbHl6YlNpUTJjRmx4QjB1eklLL1hWMkNmRnF6WjUrU3ZVVTBRdWJDcG5wczFtck1QV1Y2R1o1elNxbWZRdmtlQSt1Wm50VUMyWDZNYmduSFg2YjFQNHpWQXJZd3V1eVQ4aEo5M1dSNHZLaDJGOHJHWEJFdVRIZnB0dStPaFRmQ2xVaDYvektiaWRUZ1ZUSlZqM0x5ek90WkdVRHZZZ3Y5cTl5d3d0NmtzSitSWDdDTURPTUJzRTdrYks3SWdvSUpFbDB0dHR1RHphaWNTZW9hUndMUVhlTEZ1TU84c1hBSlF0ei9hQWgvNWVTL1B3dkhLOTVlMnZjNFFXVi9LbDhsRXloRGE3dTRjcUlUSG9IazRkbGM4QTBsWHV2OVBCUzRiY1VOU1lFNEpRczFGZVNOSVJxbjBXbVJvUzJINDdPWkpBVmIvYUNRVlg0Z3RpaWttT0NmRG8rQlkwQlBoeVorMjlHeVQ3N21oYlhqaEFNcENTSC9PVWxZMkIwVHdOQTdvckZlcmRtYXg3aXFzcS9yQTVFT3p2aFF3M3FyTlBXZXBpcFBoNzNQdGEySWRwaTMvZVFIS3FkTktjVGhRTHdINGZFcVgwcHVpOCs2ZHI1a0tONVFTaHo0VHFNSnhXcGRmSWRqU2M2WkVWRXE5MWt4NXBiSlh6T3lXekpKS1BYOFpMMGNrN1Z4Vy9PcTFVbDQ2dlVEV3poTXFmSWRkaUFXeU1wQ0xyZEVpMkZNU1picDRMbGd0WTlYazFEWlRkY0pBQS9QL1AwM0R3cnd5SWdpQjVoaTJTUko3Wm05T0QycURMZFFzMUFVUjY0UGoycHZHWXFrMzdTL1I0NXhCaUo3c1dqUkVnb3B5N2JJSmRldnJrZjh3R1A1amE3ZE9TTGZoREhtbDVqN3R0c0ZmeUNEWHo1N216eXEzS3JXNVRKRGkzRjh4K21pZS9DNXdWZ1E1SXQ1dkhaOHFhajJ1M1YraXdiSjc4aFhMU2Z4MW5yS1lNM1BqNFFPQklTYVFaYnltVjVBVGdUMEhCOEZGT2Z0Ull4ZW1uamxWWWF5TWVCVzVPekJQZ2NiK09tcmdjZHVGMlFDM01vTGpiaE1LTEpPakJITXFVZFFGTzUyNTZUbHdpZWhhdHdrWmRxeGNaQzlOakZCMEVodFF2MEh1K3hFR3NWSTVWcm1lOW1Mb3pZRE00Y3FFVUZ2eGZtcjA1K0pXUFFFSkVqdS9mTXVTQTdIb0pLamM0UWVYOExKcFVhSVNKRXMyZ0RQVkJPOXVIV25mU3ZsM3AxV2ZPL1krcVFDMGNDWXFXSExRUDFhN1g3c2hHRk9VUjVuSExDZ3RLdDYrT0IrQkU1bnR2cDhzajlCWE9CVVRjdWIyLzNoRXBSTkJ3c2ZWQmc0eEg3R3dvMEVMTEhZTG03aGpXQmtyYUtXZG1zTnpwM08vYklxckE1YzcvYVpDSEU4YytIQXFyZ1JGcWZRdlgzY20yeHE3Q2NCbU1iZWplTmVtY2NwUnFzemMzeUovcjczRlFkczJGSW9UK3plNEtXRHc3OWdRZkkxcUVkUDhUZThXMWNXMStTR2RxOExRUk9vNFNLd0ZVSEZaTm9NVi9KL281L0NDUDhQVjBPL1QvUkl5c1NFRTdzeDZzYTRVQ0M4dnpmN29VejE1STcxZWVXNXp2Y2s5dVZRZGpJY0Y3VlBRRjBTVTByVHdTSDg4clpVNEVJSDBrQ1U1ZXZjL3JoYkdaNy9HVXlDckFsK1hzLzlTdEFQWUl1VHovSXZIR0FtamRGWGlpZ2FXQmdQVDF0VVRGMjM5aDJ1ZmswVU9LM3NldFJJR2J0eEJ4QmVNd2oxMkVJdVJiMGRpeThJdll3cVU4dzd3Zk9XL1o2enI2MkZnb0E0VHBtTmdBR1Y4Yitob2pZQUxJRlNjZUFJOTRJcThNTHN6OGQxUGlSS3NQNlNRQjNPZ1RMbDNmUTdWaEk0TzdYNkpCekp4N3dYZGJweWZTWXlLS1F6L0tWUjBFS1R2RjFKd2k5T01Mdjg2VlR6cDdJTFU5ODJsWFNkVEk1eEQ5cVlBekxoZUdWY3RIdnBxY0FKM3hYSjBEb3FkYlkveXJaL2g4V2M4bGNWbXQ1bzVUbHVtb21rTkxFUnRMWlZ4QTBSOENvQWU1NTc3TnREazF0cmxLbUluSVd0TlBhUG05S1dpby84ano4c0hRRGdRME9QcTJYT29uazZKZnB0Mzh6Wi8ya2oyNlNyN25yMjdJRlJHeHJ5SnlzNmx2RmRTdU5YSVY3eDhkMVpyaTNtdWE5NWNpcC94VFF2aUVZWDR1OXpDZWZOcC9ieXZodkpUZnowZVBabDU2b2xUeDY5azNKT05PZjljblljY09sbUI1amFZVDFrdk5Vd1Q1QlpSaGgrSE95TzdDNFRrcElsUnRuNkN5c25VejNLWnBLOWkxbHhtUzVLcStETGQvV3I0TEU3cFlzemwycDJ0aHFXc0pUbFFrTE1vTmZYTEgxc1lUaStFcG9pM0hNWGQxRE9na1V0VzVMWDRYZWJiMWZoZTljWER0eWVCODdkWWVVQklIZnUvdFdWYklvVncvcGZGc0NnM0Jkc1RvRStVU3pLRkRhcVlpOXB5Z1VkSyt4UjVaQXhlY2N4cE9QSmVwL2pxUkhXZjRTN2p4UEJOYnY3MEhVS0pmTTgvTHhGVCs4Y0pKRy83S05EV1B2bmY2UVNieXVKamJIcERWdHp3bm1XNUFXMlorOU8xUjNTbGJjanl3dzNvck8zZ3ltK0VFMHhHbWJ3cnMrTjJmdW01QjgrZmU2Uko3S2t5MThRZDAyVzVKeC9MQ3pITzM3MnE5UW5PMjh6YzdJQytsY2toakF1WjQyQ3U3WWUweFZIcDRYV3ZMU1RxZWdMR3FGQWlXNDJobks1NFJJaFd3WTZxYmRBeVZEbFpGT0dDV3pUQXk5TG5ycUJiQWVhUjlxT2kyU25sYlByTm11elZyNDVxclI5L1duZTZ5bTZoclBEWHQ0Vm1hVGFWZVNxQjkyQmtXT1hFa1NtRkNjazlWQVljNWsreVlYNWFKUDl3NUVQV2JVWlVsTEtzRzl4eGt1Vi96ZDBrcm9VZ0hBUk84bW01ZmNGTlJRd3VOR3lDaWZkY2FNcTZkdXMwQXNzNkFjM2c1Vkg5VlVzRlFPcjJLcjQ1R1lWSUhqaFg3WnoxR2RMbG1tdlFGWjgzbHpEeklObmVhbm9LVmFGRlhJV1cwUHM2eTRHNUcvcDd0MEdWN1JncjFqS0dMQ1l4VUh0dUR0U0tscmIzdGp4Uko0dUU2UUIvRldCV3IyVXpvK3ArSVp3NXhudlNPc3Q1M1VhQ1U2MmI0QldSRDhoY1BRQVpzL0srS2thL00yY2l4QXJmdys1aXZDNzFoUlM5cGFsdFBuQkhBaldZMHhXZVlGSmRqSENUWDhONm9yRHg0UjZNY3k5NFVyQzJ2NmRObG5jdmIvOUFTTHVwUlVvZGl5OTBhUUdHQXBwZUQ5NDl3cEVZTDJDUCtuSHBGVnJrWWZORUF5NXhYVTBWTlJqUHRSRW10ZTlTRVZZZm9qQThkWDJvcVg3WnVtekN5MDJBZW4vLzJRPT08L0JEQj4KICAgIDwvQklSPgo8L0JJUj4K + +#BioValueWithoutFaceBDB +BioValueWithoutFace=PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/Pgo8QklSIHhtbG5zPSJodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLWllYy8xOTc4NS8tMy9lZC0yLyI+CiAgICA8QklSSW5mbz4KICAgICAgICA8SW50ZWdyaXR5PmZhbHNlPC9JbnRlZ3JpdHk+CiAgICA8L0JJUkluZm8+CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I+MTwvTWFqb3I+CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24+CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I+MTwvTWlub3I+CiAgICAgICAgPC9DQkVGRlZlcnNpb24+CiAgICAgICAgPEJJUkluZm8+CiAgICAgICAgICAgIDxJbnRlZ3JpdHk+ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8+CiAgICAgICAgPEJEQkluZm8+CiAgICAgICAgICAgIDxGb3JtYXQ+CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24+CiAgICAgICAgICAgICAgICA8VHlwZT43PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MFo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU+RmluZ2VyPC9UeXBlPgogICAgICAgICAgICA8U3VidHlwZT5MZWZ0IFJpbmdGaW5nZXI8L1N1YnR5cGU+CiAgICAgICAgICAgIDxMZXZlbD5SYXc8L0xldmVsPgogICAgICAgICAgICA8UHVycG9zZT5FbnJvbGw8L1B1cnBvc2U+CiAgICAgICAgICAgIDxRdWFsaXR5PgogICAgICAgICAgICAgICAgPEFsZ29yaXRobT4KICAgICAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPkhNQUM8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5TSEEtMjU2PC9UeXBlPgogICAgICAgICAgICAgICAgPC9BbGdvcml0aG0+CiAgICAgICAgICAgICAgICA8U2NvcmU+NjQ8L1Njb3JlPgogICAgICAgICAgICA8L1F1YWxpdHk+CiAgICAgICAgPC9CREJJbmZvPgogICAgICAgIDxCREI+UmtsU0FEQXlNQUFBQVdEYkFBRUJBUUFCWU1zSDVnd2NEQjRQQVZrQUFBQUFBQUV4QUVBQUR3SUFRQUlBUUFJSkFBRUI5QUgwQWZRQjlBZ0ZIUUQ4QWM0QUFXQmFBQUFBREdwUUlDQU5Db2NLQUFBQUZHWjBlWEJxY0RJZ0FBQUFBR3B3TWlBQUFBQkhhbkF5YUFBQUFCWnBhR1J5QUFBQnpnQUFBUHdBQVFjSEFBQUFBQUFQWTI5c2NnRUFBQUFBQUJFQUFBQWFjbVZ6SUFBQUFCSnlaWE5qbWNvQUFabktBQUVBQUFBQUFBQnFjREpqLzAvL1VRQXBBQUFBQUFEOEFBQUJ6Z0FBQUFBQUFBQUFBQUFBL0FBQUFjNEFBQUFBQUFBQUFBQUJCd0VCLzJRQUl3QUJRM0psWVhSdmNqb2dTbUZ6VUdWeUlGWmxjbk5wYjI0Z01TNDVNREF1TWY5a0FCQUFBVVZ1WTBsRU9rZFNRbFF3TWY5U0FBd0FBZ0FKQUFVRUJBQUIvMXdBRTBCQVNFaFFTRWhRU0VoUVNFaFFTRWhRLzVBQUNnQUFBQUZmWWdBQi81UGZHeEFPelpINllyNnU5bisrbEtwZ3ZleUxHR3piZjlocHNZSGlHTlNCK3htTWVqV09yS2d3S2dXTDJTbXc2ejZ3SU5oZGdJQ0E4b2pleEZBQ1dON0tOLzBhM2tNS3Fnd3VLNENBOFFBMVBJQldRZkE1bTN3RmxrNzZTaTg4L0FlQUwxWmFNSnlhRmt3Q05wY0xCOVJxbnBNZGw3Qld3ZGJMdXZHdGpRcS9nTWRVQURnZ3FnSWNIZEwrSGxqeXpId1hzcVZ0MzM0ZW84eENxQ2E2SG9qb29ZdnZQeDdOZXIxNnA1azFCMnN6VmovblJoNXZkeTFIU3A0Mi9BSFZKZ0M5M1huWW1yS1cwY3NZVE9sRzBVWm4wMnVZWC9vSThTeWNRSzczNVhTaTJ5ZnhuTHJNNEV0NExGNHZtOUZuZFFad2szSkxCSmdnOStyTHN3WUNxdWNBaWNrcFArcFEyUWMxWmFZRlhoNnU4ZlZLUUFncVdoT0FYc1lBNE9Yd3dyOFM0bUpHdFZ1azBXTEZUSXJ3VGlGOUJXWjlPRkp0MlB3cXZqTGZtUENRUG0xYkRZenVlNThtU0VmdWk1bU9GYXVZQmNuMnkyQ3Nac3UxdkUvdVdRMmpVa05RUmpGZHRyOExwV3RVSDlhaWpISkVtQnZxMXdReGVIcDZoSEhqaHBUaGNhcXEzU0RicVF0MUZUVzQvZUx6U1ZGQ09qRnpBclFpYTA0VlcwR0lORVBlS3BBOFJpZEZKNStnTjh4MUhpU2VYYkRqdWlJV3BPYjZuWXlYbi9IM2Q4eHBvdzhaM2pkMEVpaFQ5dlZJbWRlbXRSYlF1b2RhdkxLTG10UnladDZTYlNwWVBBQ3pSL2RLQ2t0QTBIWSthL0wrWWIvOFV4WTV2UXlvZ1QycFlwY1B2OVpqQ1pOdFNiS0F1bW1EeG5zeUUyS0d2RHVBT00wVVRObCsvdXJPMFlCdE5teG9QMWsxbERpRlBmMS9yVkIwbjdnU2hncHhnSndtQ0o0VE5sMFI4c0s5VXEwRlFtWjBLTExCdkJremZuUWVUSnhIaFFrVUdLMjBZbkMxdjZRRWpjajVUSEdMcnZjd1Q5Qlh3STZ2Nllsc29KN1lxSUxZVGR6VDhja1I4TXNtNGkzZkhINE04dmNOWWRCOTJVVmI0NHVDb2RoREIyVTYxcmpZNll3SzlaczBhcksydG1XeVVvL0FCN2tsMWpTZFZobHpEcGxGdUc4dThNQnFQb0xXdU9Cd1d5T0o4WVFOWmZya1FEaGF5c1k0YTEycjVSTmgyakF3VWJ4UU16bEhYU3kwcm05cHdHMG9OeCtJaEdQRkRHZEJLeVU1YkpJZENWeCtNYnZicWRicGlQb2hKTHRDeVBjNHpSNDJZTlVYN29qQWN3VjVUcDJ5eWlyYldoQWJDV2FjeGJBYzl3bTQ1ZEI4d0ZNK3hmakFEa25kTk91SXh3eHRnM1llTzl0ZmtTWWlQLzE1UVJXRkU1NnB1cVBST1FvZ1dpcUcvcHRMOHc4YWpGb3BzOVAzTXp3L2ZlWlJ5WllLdytWZ3RiNTBVdkVEOFl6S055Zk80ZnhLbVZWd2I2L3pzUDZCOE5ia2tobEVCd09qNUpORkRYdklWakVZNFZhUXk4YjNqc3FtcDRGSFpCamlWZUlNTmNOd0RIUUQrR0RzZi9aSXhKeC9mSHB1OTFpdkFFT1h2UTVaQUhPYmM0MXFpZ0RudUpLOGNOQjVFQ3luT2pqRnBXdDFNQjhpM0FsdFFHZHpQQnViUmViNDhNVkZGNzgvY0ZlcDR6K2FYQlhaV0xDOXo0cW1kcFNnTXFJYjQwRmNtd3k3VDFuNHJEaHc4Y29OeDU0THNNRmhuQlA4aHQvS2Yvem8yTTVpRFI2TGlJRTBTeGo1bnVlYmRkUkplbWxRbE1DbGFGbDlvN3VyZWdRZTBzMC9ieGNzaitjUFFyNWQzRnoxQ0JtNk1GVmhoejV4V1NXV2UvOVNUVFpPNkx1NVZZWi9LVTA3Q05NRTErcWxaejN1YldQRWpjWWxTL0VXdkFLOGJGYmZuQ3VVYjdhbjZPZjF0OVVKYWlRSkVBbWV6aVREVUozRnE1YXZ1TVBTZm1SKy8ycWw4QkZZRTBlek5ObmZlTEpmTytySHFkT3lqeEIvUXE5V01WQVd0T1VjRm5HYkNHdDRsWlJJRHEvZmZ1WHVWdk0xcTVKL3hPdWt2YUxuaHdkOXhBMVcrL2x4MnNFL1JnTnVzV01tMjVPdmlON0o5Tm1MTDR1UzNiem91VU9XNDVwaUx0cGxidDJIS3JKTTF0ekh5eWR6ODJ2TVRvZ01qYW1KMDBSY3RabFV6RDJ0SmRJM1hEOEdueWdIMUNTaWhSdHVvUWNOSWVrenlma2htd0Nnc1dudjRjbEZ4NzMzbVBZUVZBMEtXRFlyeHE4aHg4ZkRNZ0lvQk15V0xmU3VuOFE5T3ZBdE13NmdDS0N3RGVuRzhUZUZVK3R3MGZPNGR2dSs1TG5MU2lvYk5lbTZ1bTdhYzNLaE4rMUpONVVXV2dxNFdQOHFBYnYzQVpjMFJOSFRYcWoxYWhWekZNbG1YWEVkU3daUEFQWFRFOFVNNTlDVFVOdE91VkJyY0RSZEEvYmpRc0hJM2VOczVKSzRHVHF2a1Vud0p2b1YxSGVYcFlHdjFaSkNsaUNCWVVJOXFydGcvU2NCVlhZVDZXY1h0STRWdVYzR3g0Um9aR0JrMk91SVg2azQrcDh0UVc5L29aV2JzSUJQelA0cWo4SHhCeENUWGJocFRzb25BbjEwK0VsTlAweDhLOG9TbEcvd0dyVjFIdVRzYW0xZnRqSjZoWWwyWnhvckxmQ1d5OU13SEZ1eDNSTjI5YjBCTTYvVEwrUUUxSWpmbjdGTUlGaGQ1Q21JckJHeFZlTFFCNDllUDRnMWYvQXQxelRpRlh4MXJlVVVFVk1UcTE2VkFlMlkxWEF1NEpBZHhUUjZWc0FYZEU2Z29SYlI5N3Z6SllIbm5oQlFoQWtHYm54UlhWaWxFN1J6bStwOWoxNlRQUW1aU2F5Z0xJc0FXdy85R0kvanp2TWhzV2F0QWxvZjhjY1JOUzdteHZwcVJYMS80UkJoM1BnTXlMTVpOVXlHdFh0SkJmVnFpMElJa25uUUt6KzZyN1ZNNDg1b0QrWWNkU2pzcUlvM0x0cjYwRkF4Uzdxa1c3MGpuajcxYjIvYTNibTA3cE9BeTk0QWdldzU3c1B0SnpQT2h3QVZMdW0xTkdrdkQwenkxN3lTL0ZZSXdlVkM2VU5HM2cvYlVyVDZMVUhZL3ZpaXNPRTB3clZYTnJCNC9yQVFxakRYYVZOZENMSFY5MlVQaE4wOEZxR2dYSUFtODltNmM3Y0EwdHdmaHVxR2xDamoxQU8vWWRkRTdYNEpCaHlKRHh0bnNQY1FwVnl5RkJuZGUvOWl6ZkwwWUpnNzFoK0dlcC9ScTBZVDZjWUhjZ3QzWjRzc3NiMUtzL1pMbVZjbnkxQm5QSDNjU2JQL0tUMUIyT1Z0SGkxZG91RkJBUDhJTlBuQ21jY3pIdWVoNldmcHNHSDdYNUlWUWVKdm9lemMwL2lzbEdGZ2loRFpTQ2gyS0diNkR6M1g4R0pIcE1oWWd6K1pkT2JvK25zZERVMnhZdm5qRjhhV0Nzbnhxc2diZG81WDV6Tzc4VjNDVDhjSGI4Y2pxYzgzdUg5TTRuL3dZZmd1UXBjaEQ4c1RDeFJ5MG12bGxEMXZGUFNrWVJaelJnSS9NTGthM2x2QitOczJ0QzZ4NXA3SEorWUlDbmlBNm10YWRpY08rVzBWcldRTE56ZmtCanhIV2MxUGpyeSs1d3dQc001OExCeEdxaFNiWmdybXRtS2c1VlpUNVhxNStMSzNQNjhDYms0Sk84RFBPQUZ3aTFWbEhYdnNMMkUycUNEd3VOYTRzMDZvTzdvSVlOd0ltL1dLN2c5SWxEcmtvMkVJMnFwbUpQQ2ZNRFNXTVI0c1poVjdrUkdVblA4N2NMWXQzdlFjaXZDYy9yRFR1a3BoMVhYcVlMcDZKTUdoamxSaGxjUlMwblNHSzlGSFduaklzeDZyZ0RRa2N3NjB4dzc1QkJOSTBRSU9OUnE3THdpRkM1QzVTWHN4NGltYmNPdFFWL2lBRHlMSkxOUnF3UG0vbHJxb0NMMFVvVnNyK01MUjl6cmJyV3FmVm1NbDZvMEpyVElqaDl0TGh3ZkREQWlpVEdzUUpVZVM1TCtIZERHN1I2MlRBWHJCUVVRbXNlbVEvZGJPMXNpOTJNU1V6eEV4bm5UaStjQkpEVGlwWURvUENkeGlqaHFEOGZ2R0lJS3kvTmJ5YjdnNndBUm9WS0xJNlJ5MzJFamxjdENKZDVNejU5RDRBa2hDa1RRS2tuSjQxdTBFMUE4WUxvTVlGU1NGWldJOFUxUjlRSG5waFFhdUNQS0w2MnduK01uRlZjK1RucDNGcWVGU0Y0WkJuSWlpaXp2NTlsbTBhcytGb0dnOFZ4anY5bTNkLzNzempmaVREUWcyNHlteWc2clFjNDhSeGZZUUFURjBZV2EwTUF4dmlkMndMZTlpT1lqUjdISysyeEhvemNaRU5PUmFXMlV0VjRGZVgwc3JPaWF0Y0NpSGROd0plY1BYL3MvaTFLNlJqdCtxZmtvUnhtYURvZWdmTnhlUmZXVmEvQUNIOG52bVNEY1lUN1hKL2xMWXBkTEtNbWVJYkhvWkdacE0wZE1FT2FCam9IdVdFeWxSMjUzS0kxeDNRSXJEZEhnK0VNMHphTUNLbFgybDVZbEp6SGlpejh1bzJWQTJpS0ZsYSsrZjI1dHVidWxOVVpzaWY3R2JvZXdVMkpZUk9yWUExTHVXOE4xSjlaVk5QNnpKTDZpeVBONG14dHl2ZC80WjBWOTcya2lQdFE4NHErWHNSMk9LUFBlK0MxVzliU0RsdklmSEw1YW1lbFUvTkZjOUlEQ2Nyc0NQZDlrRFdVL1ZyYVJSTDQ0eEM3aDNIaUlWTllwMVhkejBDRnIwUW9LWFFidmhuckV1cHBXb3NHOUhFdjVTbDZkemRjNklrUXFKTGtmMjVDNGNZV0N0VDgzbnJOc1JoZDIwWXNBS2N1TTE2U0E3bVo0UTRyZ3lIeXRIRlNES3VUbnpUNG9ucGFqR0JpR1JER0QvZEd3bG5HNDY4WjBURUxCcEd2VERXbWlrOW4xTGtVaSsyOU5yTFVVUmJZNHNoNERZbGIvd1dveGhTRFNXdXQwZ0ljajZyb1Z3TTl2UjVEZGNnV0xqNjhxZE9uZWhoNmJaOGFpdFlkYUR0NGRWRG1oc2JNWEQyNkhGSnVIL1ZDSENyMHZEZHBrbDhmR1JVYzJ5ZC9QcHl5QkVnRDRpZnIwd0FLL09odFJpR1I0aGFQZVROa0p1ZXNUeU1CWFlROVJLMlIzWlB0WU9aemxOMUVFQ0FtYnRDMlIveUY3MkUvcFVSVXdKUkJITEpFcEZnaUFrNGI4YnFjbWhZRnpSTVI0R091VE1xUHg3eE82RHNYM3cyY0t0WUlBd1huSmFrSVZCWmdudHlhcTFjYUlwWTRQVzVRZEpIcG42WjRXdnRrTDhmdkxhVUltbDdPQXVEKzJERnVHTCtWalh0L0pBaHJTTVNzMXN2eG5PWkU2ZWdSVkdlQTcyTFNtOVZkL1NNNElWQlIzbUJyRDE0c0cwTTd6SjBaWjY4elpySE1qL2NwMkRNTllUT0FHL1c2NldJay9rQkdkaDE3S29SL1hBNlEwMDRPbFREcEhNNUs4OTB5ZGVscm5BbkU0U00yQ1IrT1lJdkZrL3U1WFQzTkc3UGw1aklQeVR2ZDYrZ0NJYk12WmhjSVdHZTJhQlZSMjdSR0RVQkRXQWR1YnUrRUpmcElqeEs2d2FCZjk1NHhadTAyWENTZk9oQWJSU1hVZXZMc3dpMjlHQVh0d0x5NFhHZURjYW9nVzFCd2dpMENhTHlibWJFMGdLSGZyRTNTVUhFQVI3MnpKYXFqTTdnWEg3VFdQZ3V5QWRHUWEzbm5sYThEOFJtaXEvcHZMOHZ4Nmw3eG84TjJQbUQyZkVOZDlkTGJCS0hHYkZtd2JFaGlPc1p6YS9PWi9OMFFTWklqOU8wL0luR2twQjJYMWlDYzk2bHNoYnJwRlY3UG9Kc1RjME54aEhvaUxzYXFwMXNSdUp4SUpxek1rVmlQWjBCaG16OEx3K1ZNaWhaZDBsd0t1QUFDUVFNQ2ZxeXlyNWFMVUk2WjRZak9McWNiaktwL1RwaDZ6K1c1S2RjWXhSdU5RR3UrTzR6N0Q2d2dyc3ppakpUS2t4a3N2Ymk0aktwOWpnTzh2SVdRNWdDVVpOaXo0UW92RUxZN0dyQkh5dW5hbFBhNklPWXFRaXpWMzV5M1IvNDVJRHlUZ2RueG1BYnd2OUNFZjBKbGZXVHdDandDUEEwSVM0a2JtTDgzbnJ6S0c5L0MrSTJOQkR2MjF0NGovUXc1VE01ZWhNcHA5bTFkYUNyWlMzS05wMVNObVk1Sjc2bk5ZdUVHREpEblZSOW4xY095TWtCVTNiM0RqdGtEbGtsTEVtY1lKbnpoczZzaGJWK1A3YlF3TXdVcllDdkVHdDBIbXFsY2syMDVEd2lTektCT1NwMDRwQkY2MFRXK2szOXcrRnJvbTk4U2FTMEppaHpwM2ZIMDYvTC9TSXJ3NWRMOGhvNTcxZVNkS1d4emRLRzJPemx0TXczTDFJR0RPbGFueW9pUnVmWEpwc1hncVBhRmZyWEZ1VmJFYVNlVVg3UUNNb2xOTUpTd082OFV3MHVhMkZyZEIvWFpWZ3g2UjRITEtIZTE1UnNzdUd5ekEzQjlhOUVleGJNdWFydzJiRE04Sk1ETUtjMnVmaFducys5dDlnYXdQOURHc3MrbjFCVnRYMGtKbWZneDgzWjgybGUrS2dwUXppU24zaU9YamtTSVZDdmlFTnpQZXpMWDZoZk5DbUtVaU1wUzltMG45ZExRanpDT2pOTWRZeXBDOGMreWRTVndTRThpYVBTNGpJeWRJL1ZBbGUwOTV0Vm5DTHZIVmwrN1JFanFxM1Jvb1dIKzFHRm5hazcrcDNIL0d6VlF0UEU1aFBoNk5Vb2I5WHNxdnA3LzZXNW9PMzBNY241UDVLUy9qbENiNTllQTlCSnRqcnZwaU01VWJQSVk4cEFxclE3YTNQSjY2WDRTUUVBYTYyREhYS2xBQXRSczIwRG9FejF0QlF3NVI3aVYyWjYvMlNwSU45SEQzSWZIaEhZK1hMNG1DOEdsQXByKyt4VXFkcTdRUFhBR2pJWmJKdFR4a0M5MmUrUHByTm8vbE9VSysrSUNSVS9IT3lOMnEyOUZ3OVMrUnlFM3FCa3lhR21pV2U0cjZpOHl3WktwaGdwQ1duU1AzL1h0TVR4SUtXRVFJRGNyS0xYeEUvTExmUWs5TElQTXJSZzYzNlVBcHdSK1RIZTlKSkhZZUg0QWpXQ252QWNtZHRmWnQ5TXJsNFFxRVd3TjcrZXdqeE9SZXlFcjllRjhscEtaaWQ5NmZvZ3kwaWZybHlxTmtscndCUFFzbk13RnpEbldEVHd5TWlFVHovR3lzN0NxZ3gyWldFUVhFNkdubFdHMUcrL09sVzlZeVdUbFE4QkI1eHdUdXRURHljaVlrWmxIcjdvL1FyVHpZMWg0YkY2UVNydGFqTHNDallTSHhhTDJ4T0hXY25lamJpSmRBc1orY0c0MlBNbjBybzFWZVh3NXNEYWoxOHpMS0ZYUW1ZM0tSVGxtK2xYbyt6cDRCUEJYN3pVYjZ6LzNTUDZVVlV0dExSVkR1dkNaN0MyQkZTc2V1YktuK0Nia2lUU0xUMFZray9IOVBiYXRya1JnS3pncjdjT3J4TVU2eDgxb2dsRGoyZS9wWjE4NkdlZEQzeUhiZkcxaUdtdWpqcFFvTEZXOURxWGs4eld6aFFObFBLZDBhdDN6OHh3eFBKTVNkU0VWTHl0WkdodURsbzZKdW56U21CQW5mWjNzTjN6REhjQmZiOFlyS2x4S2xNL3cveHhjRmhaa1FCaXNSSG9KRDZxN2Y4ZGtNOGJKcjAwME93MngxbTIvWUdKUDBtWTN2S3JlQitLblcveS8zTDc5WTA0UW9ybVh1NDdtSURsM1ZRUFVpNVI5NGFNZEQzK2wvSEFYQk1hT2V5QWlvNkpHTG95R1dGdDRSOEZHL0krblFwUHh2NnlWQXdzWThFWlhHYVV1S3EzTy9iUG5nSHh1TkQyNkpOTkVEN3R0UmQyNktSTVNpUkxEZlV4WHJ6bHY5YzhJMHdHV3RUTEhwbGRXMXMzWjdHdldTcGpzbUV0RjZFZGN1Y2ZLdEJZUTd4NHNlMWhPSm1vWUY0eEVyK3k4aEFSWmVIQnVNdTJmUTRaNTZTMHEzbHg4MzE3UGxDVlcxUUkzSXFDZVMzQUFpVTFDaEJ0WXZpbldoQy94S3BwZXp6eG5YRTlBWkd5eWhoZHpsVFBrcWZWbWw4RVBVUitPMVc0cEZmOUVWeDBjNmhxSEVGZ0FCN29JYldSTWpKWndxYllJRGY2TG8rVy84aEVpOUQzU1dJVmx2SXdCTWdMOEI3TlI3ZG8rY2o3V05HeWRzL0lEdjEvalZJUTVVYzAwcVJLaUpZaEpjYVU1UFd1VGhWbVJFWmhYa0I3cDU1cUNOUXNycTZ3QmNPemFlcHNkWVhFODRsL3NqZnJiOUp2dGU4QnVDaW1NOWR2LzJyOUp0eVkrRWI0Mm4yVk1ncTlKOTVCTkVZWVcxYnNtTjdLNDZjSkp3MUcwNXFXOHBhSVN2NTBkZW51Ky95NVdCZitDbjA2ZmtTaXhwdng3b2J3KzVZTjVVNzYydGNGV2x2Z1BsUGdXNVhTMUlsaWFNZU1OaVVZUkJ5YllURGxDOUNvZS85RjYyUkE3aVB2akxEQ0ZiNEVBUGhUbitVSW5HRnkybzhwbzkxUkFTK1hEa0U1QlkvSFhyWFBaRmgwcHVYMTd2NHRjNldOc090VEhSRmp1MllyZGE1SFo1c0ozNTh3cjlVL2M5eHdkMHhnSlFlS3hnSnNuOHlSRlkweUNja0lnREhxV2JWSWtVU2g5TWFlQWhlYmN1Zkc2YlRudGFNekFGOWlqMmhTeWFpU3pGQk1GMFRMT1ZXMGdYVjJIWmM0WElxemJOWVErRHVmSjRQWTR5d3RGRkJUOVV2NThVK0M3aDR5TGYxTTVFWCtPT1h5cjRhTEs5WUM5aTU4aCtCM3d3ekY2U2FRdGxPalBaK2s1WHVxV3hvcm1PK3hMRzlWbXNySHRIdlczV2lpS3RDeWJGQlNKUFJDWWlkM1BaNjJydENkeE5qNUZTem5WSG85djBENCtzWDhJbEd2cXE0T2xMV3ROdFFwZHJIL3pETGlua0ZOMHRTajBSM0I2b0FKMm0yNUNrTkFMY2xIK1Vuam9tRmgwWGdnY2thVkpwYWt6aVZhTGVJcmNLbEpsZlZITHFaeTYza3AybER4cjRRUnhMejdNMmtmYmR1eVZ2QmJLSFhLTUc0K1psT01hYXdzTnI1YWl4dnJmTEZITWV1b2xJQXpUNHQ2ZVFPckFYWWozZnFDR1ZXUTV5dEsyTmFzemJMbXZtYTFoRjVTOXJ3SGthV2pSdU5WenFic2d5MCs3b2IvMmZTQkpzU25BUHFmSmhsbUZaMzUxcjBjdEJQSWRUOGR2TUo0eS9xNnlJSkdzdlQ4aVpDcXMreDJvU0tXNm5zM1VtVzUyODVwOG13aHNENTFtZC9SSXc1QUFzTkJCL2VwQTl6MWhEU05wNjhtL3JhN0MxQ3ZsR1lNNVVXaWpkb2tUYzA2Y1ZsaGljZnhROXM1ak1JRUNXWDFCdnY0eDR4OG1oVWYrbG1SaC9rUTY3WVlmMWNOOGRPREMxbk5aSjBZM3JpQ1MrakJ2M3gveU9KUGwzVUNzb3FoVzgyeGpaK01UVU1sSHh4WmNKS1N2ejF4bmMzQ1pIMm9vYitJQkVaQ0FjRlh6bGJYQ1JtRHl2REhnbE5kM0dvbjBRamNzL3gwYlhCR0hBYVUrU2poNERHa1hPcVducisycE5rSlhrZG9UTDhaWkp0Uit5bC9ZdXBhWXhtQ3UvbGtmRVV1all6ZXBNN2FrU1FoQkVldnFRVDlYK3JVL2ltWkRxUHZ4Qy9XakZmZmVERnVVTkZuNU9IN0UybEl5RXBZVjRBelpYQmFLckhYMTVLU0h6dHBDVFpFeVdIUWtYd2VjQnFQamR1T0o1SEZaMzdsazRoOHVubVZBTERrSndyYk5vNnRtQ3hyQ2FmK2FvTVQybUthajZuQ0ZYQXFhZHo0Y1BkVkhqeTlHZENaRmppMEJYUTQ4YnoyWDZ5N3hUOEpEbU9YNVZWV2VFcUdEZ2tnMW5lNTZua09RK1JZd29KOTNsclhsODdUeVhUd3E0NWJIUHQrTWtTaDdlbVhIQmxkbmtOb3FaV0hhc0tydGpsSDRLNi9MYWduZVlHdEpsRU5BcXhxZG8yVUFMNE5kdXAxM1pmdytubnMwWmdSUFc4L3pXbW9wWVg3aG5xQXBLZ2I2ZVgzanFFaVZWZ1FUZGhJSnBRMUN3NmgvUm1MKzhwQlo0Z3drVHBWM0p3aVdNY3RjYlpaQlRkc3cydHBhdjFrUjNzQU83aDAwNDMvQ1hwL3RwVkRaZDZtT0ZJcjVmb3QxK0FndThzREFHUWljTzgwWTB6Mk1aaEZwN1RVQ3VhM1JQL0Jobk43aHhJaERGcDBhQzZ0SFJqQ0tEeEdqV3N4NnM0Rk83NHdGd09lYmF4cVdudmZ6RlRUaTk0Z2VpK3ZDZHA1bmh4N0drRzNMQ2hRVUVTM1h2TW9TZldFSTlaT1VGZEVKUzE5VmZGTzBXeE5wVmdPdjhvWWJpUVNTTTZ4N0gvUUpuQjhtalQxLzlzZWhmS3dRUGk3WnpYRFJyU01LaDRTYU1yVzc2WW9rTjhNeHkwTEVZbjVOQ0FpNktGa0VvYlBDYUhPNkVZdlY2RWVUZW15dEdTbHdEVmZicklxck51VTdNWng1ZjUwOFUwUUVlOG8vU1RsdkJjT0RpenlnQXZKK0FVQTBoY3JmZjh0TWYwU2Q4b0RNQXhqemNOZm80aVY4dU1jeFZaSUY2OEpTVXhQa1liZ3JYOVZpa084Vmcyb09rMFJpZlRPUGcvUEVmQ05OS2w2R2p3dW9zTkpwQ0tMOUhOdkRpcWtObmhGc04yK1RoZ1Y0dG1KMGhuOUpQdVJ6RWg0andPaDRzL2F5WjBiZjlaWmlocUNYVDBkd21ObzZvZDRnSjNuZXhvMWVOTWE3VUo5MHhZVFN1M2dvNHZPS04rallMNkJMMUpTbHF0RlJVUGF5bXRuRklYTEh5TU41QUxsVjByY01hTjVCc2crVjRFYTlsRUltZVcyZ3ZBT3MxT1NTYzNwcDhjeUlZbHE3MEY3WnBVTGtQbTBQQnZ2N25FUjhHai8zczdScXUzc3NFMDJRVmZITXlMZlVIZmZ3WmVhTWZqNmoxWmlYZWNtdGRFNFd2ZkFnbmhPSXVWN2h0U0Y5UkZiVlozTnhIQzk4Nkk3MWhrSlBqTW9BNE9CaXZoSU8rRGxhTHNJbWYxWUVTTnE0VVZENVd5R1pwTEcrMXhXMjgveGhjR3oyZTh0U21vOHFWTDFMbkdNRkx3V013em1hMVpNQmd3SFY4SkNKekcrVEJ6Qzg3TTNTRVl6dlBqWUsreDBkQnhBWEFBSFc2VDdva0Z5U0NRWnZ5TWlmcWxqWmVmTHVTQWRCVmFBTVV4UFBvaTlPUmoxSnVjK3l2MXVaeEpzZTFFTEtnaDJQOUV4UHlweUIvbWdCYUpGOGpXSjdSWXRSKzA0SnBqVzVmdmxYZXhEb0tXMUtmZ2JPYnlrT3NlWUwzT0kxVEF5NnFiSHdZZXUwdDk4dzVrSmUxQmw4RzlHMW0yZWpsWTgwcDl4b1JRL0dTV2lUWSsrMWFBbGNLZ21jRStkOVNlNFhQS3h0ZEV4Q1BLRCtML0s5ZVNaaEgyNTd3NURoWWFTVVg2cFJrVnYxK2VuTkQwcEJQOTd3Q2JrS0hLRUV0NU8rYy9abWRHa29OcWFhUXc2UjFnWXU1WGc1WG83Y1VlUGJlQ0tEMEhHL0loVm1HSU11Njl5UXo3Z1pyV0lyYTNiVVlCNnlGTFhtQmxJUmhTU1BYRmdaTVArUHpkczdpUFphZ3dRRmpYN3IvZy9YN25XM2lVTVRUc3Jlb3hjdzgzbmorWUJQdmFuYVQ4clF1ZUxtQVdNclI1WFJ0SlgxbFRiZzd1dm9wZnVDRWh4Q2VPSG1RNWlJTTMyTUp6cVNUZEVJaEdMU25uMVNVYlBtOWQ2MFRSbTFTM0NhR2FuTTVOSVo0YUVUd3JxaDdrSG9NS1VGNHJqOWpoWmRvbVppTXYyYUk2VzNPUThzbW5VNmFPbWcraElRbnNBZ0V1QytTQ1liWWVrYS9wQWd2Y0xzQlpsMjMrTWs2enlQMG01N1dQWTdLZHBqT0JTcDJ1S1NrQkhjZ2w5Q1Q5YWxQYTdaYkJzejc0UURleFJHS09TZE8xbk9jQVZrQVJOSEIxdVlCSFBCKzBvS1lHeDVGTFI3N01IeEdwNXVzYTFXWm9xSUtRZkNGaXhUZmUySGgyVlBlempzd2JWR3NLMnl5bVNCcEFTdXRxV1RyTkI0MWdYeURlU1lwYUVDNUtKU29aU1k2VmJhK0FnSUNBNXZlR2JzalpYOEhwZ2RhcmVqelF1akIwcHg3dVpsNmpWTklvVlFVOVdjM3FwdlFpS3NNY0dSV1ltS3d1eis4RDhxSkdML0JML0dWVlNTYUlqTlRCdmhvNVFSdDltc01rdS9yZXN0cjBoRUlxNUF2WDRmOWt6aFkyNEZTUnZXVW9wemZMZXpveWhTOGM1UnhFYytpTXh4K29jRGxoemZZekl2eksrakNIT25nOHkzQnEyOUJkWGpjMXJzL2QrTXh5dktsc2YvcGF4dVFMV295Q0RMZGtjM3NRRml1dlgwQ3pZR3VHdTlDd1Zlbyt4NkFDNkxBYzFLMTFqMzVGdytFVUVtdE5sNFpwd0ZqNlZMc2VkeVMyRytrd0IxTUpnZUhLYWoxa3lMUUFpcFFnSFNwenM5YnJkejZIQ1lHdWdTcXJtU3I1MGFURVJHQzVFSFlub3BDTlFKUnZkM2VnQStDYk5ZNVBRUnpTbDBTRDFROW1YT0pWWno2Uk9mNEJqRnBnMkhwdHJtMGdDQVdMZEQyVkJrRVpvQkdzenhZK0tWMU43MXVzMHVab05Obzg4RzlnK1JkaElGekl5aHRmZDBvZWNJam1RYTNGU0RoekFTamVEdWpRK3FLa0pQdEgvcGZXUXJsUGJsdDhQMGlRRExXNDNZSXhtRENOS0tQdmhYWWFFVkdtK1hhZ0gvNHVxWEpRTkZ0QWdQU0xKOSthRnoveVZtbzN6NVRpbDZVaWtMSlRiT29QVFdOb2kyTTllb1BRcGpFUmZ6bVNFNlVCa01KWGU2Sk5lNUIwSlI4aVRqU1Q0SEFlNDk1M0VpMHNVc1dNTFRDVXZXRDg2Mmp6TFNoRGZLUDRRMWFJYlY0MStrTTRZMWVYSXV2NnJsa0FYT3lDWEdnVkVyTVpnOCtqaDZQaWdoaTE5QWxqS09SdHlZN016MzBDZSsyUUhvdlVyWG5tMHBydnBJME5HNnFpOGE4Y0hsZEpadWpzNVdtWU5VWUozVGpKbkpoeVV6U3BrNnJ0VitqUWdWU0RtSTIxNGpkVVNSdWRpOHk0dTB2bjJkWFRmbzZxRjRFU1F5MjhCUmZkNW0veEFLNCtlQmFsbHVaSEw5c3V4b1c1NkViaWR1OEFSa21zRTU0REF2VmRXdXlEUkZpZWdQY0NzanBqZE1BQS9VQTVWU0RhYXlsSHkrbWhaTzN5MkNZMjBXT2dlNDNZbUswVTNISDBrZDJPZER6SzA0TThqNVVUV1JXZVZaWTJ4T0RFUlk1UFcvTytBbVhvTFJma1ZkZ3ZVQWhpeE9qRDFkeURmb2dqT1VxZm4xWnE2dFBHTTN6SEpBNSsxT0QrZlRveUMvSHhUaG1DRmFLcmtwVTIrTHRja1dhY1NuNm83N3RBYk0yaHZBczI1Qzk4QWMvZ3o1MExzbEhEejEvdzhqaFljQlc4U1l0OER1dW1DOHZXeVE5R0ZOeDVqR05QeW5KOGJKbGNRQkRyMzJvcEt6NnRqRndjY295NHJPdlE1ckhibkIyRjg3U2ViVzVNSUxuZFFPekRNVmpZMEpGaFlKckNaekxFR2Q0Zm12ZWRrQ3dCTG9UaUZyVlRlZ3VUUmxJL0orblNqaCtvUmlrZG9RVDhMcWlHeFVDcGZSMkdYYlpHeVd4dWRZUERPM3hyVmg5Zm03YklKSU9EY3NkS1gwRzdZVXg2UTBrS25QTE1xWlpYdnJRLzJrUHVFeWcxTjIyZjU5MVhMQkQ5QXRjSlNTdGs4Y1RpemM3TGZuYU9NUGlYY280Nk5VYkZwTnJMUEthMUh5MFlhZXlEM1BlaXRSM2pEMkFwT09hQ3cySUw3bEZNTituVjlha09rMFlZQmVTMW1TOHE0eEVFQzNSNzRQUktzaWU5U3dWV0VENWY1a2x4dnRYOHYwdmZWb0QyVHViRW1Qd0l2cWN5enMrdzY5K3Q1ZkRNYWgxemxEOUR1aDF1SjZBUkI3RlIxRTMybDBseFl2Mkd0Yk9lVDFrODVLcGxSR2FseFRRWXpncVBsaW5RNjFuaUo5L0tZUWZnenV4ckNPSVN0aXhFSkZRcjk1eC9EaWplYUNXZWVXNjlFbjdmQ2NWUEJ0TGNHYk1odmRKOUx5UGNsRVJ1S3VkMGlGbTdzMjdGZm5ROERkN21IcVdyb2xsU2NRRXdJVGpxL1FBTEVsNVJvU2s0MDdJM2tmbGQ0UnpRdnljOXhhd0RSTzhLRHJVc2ZCVWtZdjl6VGJsNld0eDhNSzNQa21Sbm9oMTJJRU1GS1o3MmY2Vk9hOWJIbkNEbk5NazRsUkRCUWFMY0N2VnorMkgzN0JnQ09yTitvVGwwN1NmakxGUlFDQTN3TzBaVjVoemxiZkZZMlJYc2NJTU1FcmRXdllSVWkxSVZVNzZNR0FabzVEN21RcUFwOEt6MXNubzJCRWZjVmIxYmhjcmVZMFZlVkFFNk9odlNhOWVGbnZ2YXlBdHgzMWg0VzQ0OFpDb1JKKzUvOFV0Tjh4WXNhWWI3YkIwdWxqVEx6akpwc0NOT0s5VnoveGJWbVd2N1lBRHhLRlFzdGdZRHU1aktaL1U1aW0wSUFPVU50UjFOQk13YUpwYmw0OE1WYXBaVXhXWlU1Sm51M0ZDVU83NjYvTE84cmVnQi9wdG5zV3c0Y3FjSmNvcFEzNFlHWHVyTkRwTG9NTEpKVk03Ri9PREh5cm9ySjBFcGNPTEdSY2xjNmRIUDNFUURSeEFjempja3hrRlJMQUF1dXNYbEsyZ25tckFDTDdwNkJTM09nTjJCWUZFbG0wS1BuckZrd3c4Y3lLeWoyZlRmdHJDeDdVQlNpdERQaDY1M3pmT0VHS1Vack4yanJmd1hNdHBwMGdLYzB2bk1wSGpaTTVIYzlTUis1VUhXcUFCZ3psU3poUHBMOUkzMEFTRUd0OWpVU1dEa2F3azk0WHZKZkhzSGRURHF3b0ZJT25Jdmx2RzcwM1lBUy9DK0NmeGtCNUFkZ2lac284UXIzSXBRdEJrY1V5aDVSRDRHbm9lRjhnZWw4RFZwSmZHL29kcDZDREVLVTlld3pYUG5XN21Hb0FOR1R0ck1PVkZXV0ROVGVaa1U1eTZwQ2krZjZseUhaZWlqNmd5REtjWGsrKzV3c1FVSDZpOXhOWk5EZVpyendOYkl6WkhEeUp2NFgzc2hYNWtpc09xK1BEc1JwUU1CYmxzTkJVRjY2Ylg3bW93U09xZFdOSm5wOVNYTFhHMWZxSC91U2orOWJiV1prMFdmTUVtdFpDZUlUOVFyTGp2TjIwcWVkT3BUR01KM05mUTNjczBUYVRtYW1pMFZZYWM0ejE0a2tBc1g2WTFvU2NNdEFxYVExd1p1bXI2QnRkWThaNklKOUhDRENFZDNGbTZhajNyY0NxczZDRitMb2hwMmFkS3FXUlcxdm9oQ1NoaElqLzhSTCt3UlJFUFlpemdzdmJxZXR4WEtXTVNKYVdVa3BWanlEc0FMVURIUWRTb3BvTStGaGFFTkRnRkZ1SlZZUGtpOGtvVEFoSlY4QmY0MzhLbHVFNDJLQ2xpTnNUQTR6aHNnTTBYQmZRaFJpMmlha01jZEsrS1hIS3Z0cWJvUEVKejFnWUZaejVIdFo0WlR0bEFTRE0wNE80WnBjSE9uWVh6NHcva1JqM0xHWWN4RWowT2hGeVcyYm5HYlZWM1ZKdXFraFJJMnBPM2pVeUxFTTdyQnVlRVYvMjhkWkM5RVhsY2d3TytZa1NQMVBhd1JNaUVmM1V4Tnd6Tll1K3E1WlV5SkxsNVlYSElQZ1FmZVNobk10NEFLcnhyeXZaT3Y5aEdNek42Zm43KzZ5WUtFVHFLS3g5UWhXbDUxY0xXOEVITXJxSGc5NWZjSEpkTHUzdWRaZERzZCtFZndoQWo3MXpxSVdpYVZ5VmZhdVlxZ2Y5TTRyOE9jUDZPbldKUjBHbE10SlF2ZlJxcUM3QlBzdzdibFZ2TlNuTlBzNFdYdXdwaXQwT0R0alpNTmc1dmZQTEhWS0RzRWdvMmVMQ05GNXA0eXpwbUxBektuWWIraEp3VHozZUJXcjk3ellBY2lCTFNjbU90K2k5ZGlpV1Uwa0tHdnJMRkNjcTNVVDI5OHl1cU85ek1tWVliVVI0WjFqWEVmWmlaRHhGUDR6Qk45d1Vlb0lvV1RaQTF6S0lXaWpGaVB1eEMvZC9MMGZPRFJsUUhOazkzOVpQcjlsVnQ5aTZUNnlPbkg4UHRTZjRmWHZpeGM5ZnpMNzJLVVBpYzltazh0b1Z0Z3RWNUNVTVg3M3g4anhSV2I1LzAwS2xSb0s5S29sQ1B4YjNDMXJzK2xoN01DS0VQZWZBT1ZlNkl3SEk5dFZLdUZVVjBhenptWFZGMWFxK1d0azY1U0NwaHlKWGRpYVMwNEwreFZrcWNGQ2VocGxFcFRlemRiTjRjbm1SNE8zYUNwVmJvYlY5V3pnZzlpWFFXMlRpd1FuaTlGd2taUE5aTTZqUS90L2owZXNpS2VxcXhnSnREWjVvSmVqeHI0YUxvTTF2M1RQTjZISXFMeStndlB1Wk5BR3hUL0w4cXVPRDBxdXlOa3NNZGlTWisrS0N4MzdrS1V5R2RiODExc1FwbzR6cTZOeVJSaklUVUJUTDRqeHlLR2JUbjFkYnZoMmF0RU5vRmMwQVVqMGlMWlo5U05NVHhOdHJ2Tkxsci9KQ2xSbHhIbTJXWTUrWlZEQXhMazlic1VtM1A0TysrY0pkdG5DWnRicVhZYitQTk5oN05xUkI3dzVFeTR5L240R3lPa0paZytEQlNPdjlYR3E5ak5tYWd3VjVaUzZVM2c2bnZsSUYyMjhGVDB5eUZucHJ0cFpoYkNGTG9PT2U1ZmR4VkIvVWRjTkRQdllFdjRVbnhkT3ZLSXYveDJNMklEZjY4YXZySmozcTJxUThFbW1uc25aVEFGaXdGSmh0N3YyMkt6Nk1mdkprR3l6eEJzRWlvc25naWNsdW9ldzB5UElvLytoSWIxbG9nenlzaFcwd2VsLzBGU0ZHQUNDb2lPMHVqL0hBSFd5ZUhqUS9xVnRNUlU3UjJJZjI0NlZCdU0wM3ZuR3ZtQTFGd2Z1NDBLd1Y3UnhjdGtQUjVFaVF5NnFRMFZ5YWwzK0tjS3NtL1JiRE9PczAyT0NIU3pjM0JOOElNTXVVQkhKZ05LTVRJbkJuWXhPOElVL011S0EzbHpmVUJsb3BaeDAzdnNnZGU3WEtEb1BKSGlSdlR4SFZGYjRkdFRscFN2dFpHQTNLcmRCblA0MTJaekNtM1o2Z3AyczhNaFFkaUU4amlMbE1sQU9LbGJ4SlNaZWJ5aEhzd2k1UDdwVlpBSEs0M2hwSzUvZjZ2b1FLUEZaa2U1M1hUQjhPU3hUTEpyVXBCVTR0cG1NcHFNWG83MkZVWkp2cEhLNzBTaTVnN2szT29IKzE4ck9iWVBuT0FGMmhhRFN0Titnb1pBcGxYbm40bEh6MGRTVjdLTE1xNlAwalV2RlIwWWlLVmRNV2tZK3NqSzdVaTJGWnprUG9RQld2TkFQWUNJZGJQRUl0OVN1Y3ozSU1EQkJIemJ2Tm1wWWQrY2Q1OExJODg4Zkg5R2FoaTNJUnhia05KYitUTzZ0WjZVQ1hvR1RsVmFhUHNFUWh0SThva0N4QWNVeXpFUlhEYXg4TDNnTEtiNURlNndubi91S2JvTUpHM1dkS2dXVXNpUzVsdHduSE9OODZkbUpCTU5EdzZRZGQ4RUV3dVhqS3FJZDU5VUs2MVoxdEgzckpSWTkyb2s5SEtmNEVlOHgrWncrMDNjY2FkMHFjeXhkaUVLQVpxYm9kR3RocDhRMmFNbFQ0THpYVjd1RWkzd2M4UkFPSldneExzRldMV1FaRG9HQkJmZ3QwQ3dZZ0U2R1pvR09YaDhFdVJFT3ZyeFJTYWNCZTBPTmNKQ2VHQjI2c1QxUjY4TmxNdTJFZEVoZzZ5U3ExME0veXNYcHA0dmJobEFBQy9kck84Sm5ROUFINjdvQ2FyOEdncTlOSm1vaDdRaW52Y2ZqS1JFK01kN0xSNVRPVFM1KzB0bVo2S2dGR0toYlJCeFp2OFVxemhvVlF2c1dWazkxR2ZIWGRUQXJRWEhIWEkxcmdCYUU0c0pRRU02MXh4Mm1qY3dEdlhTQnIvaVdYeTVnTkFJeGd0WUZjY0YwSEMycXZqMmk5T2hlVXNOeW1YZFpXSFZBMldKclFPQ04vVWFzWS9lUXQwOU9lWXYxT0YrU2ZLdmNLM3o2eDh2dEhZamduS28xYXhHMmNVS1VsWHg2aHdSMGpaenl6NWFlbmxpQW9sTFltMkgzQWtMWFZFNWU0dVdkKzRKb21QZllyRkVzamRyYlRFZm1LaStXeWJGVHorTkI0Y2hVQUV5K0xFa0pRT3lMenFHMFMydTNyMCs3Rk1kSXZDTmw1UTY3NWlDcWo0ZlVPNzZrUnVBdzNaV0J1Y1c0ZkhNRjIvaEtpM1FwZ3pST3BGOUFiU0oyOWVtd2RMNTJ1WWJIdnlyQjQ1Z2xEd0x0L1RYTEc3NEdiVlpwZVM2Nys3dDJTQnhydEIwUDBhc0RSOUdLODFyNlhsdWRETnNadEY1S0FZWnROUVpyTk9vbno4M2EzTUEyeVNDUWlCb1BVVlFRQUFNUDJLam12ZFhnRjliZEFqZTRXbmxXQ1pETzUyTTNtQ0t5eW1hSzJTdEpCWmpxdTlPYWJKTFVRRmF0VThHN1REZ2hOdndsYzJuZzVBSXdsSEEwUktXWHZtallwcHY4Zks4TVA5ZE95cWxHMWpPcmY3ZWRNTWYxaWdZdUtMaU9IZExaQjNxZHpIRFNoWWZwRDc3dzFYZFBoOWVGSUw5MkRjckJ2M0JrMDNWdnY3V0FiVXVPSzVENWM4ZEFHMWRZS1pGeEQwNjAra1V0NHgzR0dCMUlmMUtBS05xcy9Vc0JHY3FoMXYwdWdTTE01SGx3N1duUW44ZXd5OW1IZnNaZEkrOTRZSlgwZ2lwNjBrcUNEMU9CcnNBT2pJeGVwRzlZNGFjcFlLdW1POWlMY2YyL0xRenJGakVXa3pBM3g3VmZ3MkNnMGtiOXZzLzJQN0ZEUnZSV29uMTN1dDJ3cjViK1ZBaU1BcnJNWEFsdGxDWWgzalNtZUhtWHRoOXpwM2I2N0ZCc2d5aHV6YS9Ua21PbjlsN29ELzlrb3FHMTF4dVJjalVlWk5GNG5LZDQ2OVNPTTVHeFc0Y1hiOTk5dnNoV1MvdGsrcmdLM1RleElBQkZjd0ZuRzZGMktyZVRQeFgyakZEL2dRTmV6RjBFY1Z2eEtrcmJXTEJyVm9sUkFibkQzeXRkeE9ibUg0RWdJRGo1TXBMbVhSS2c0OXM3VjZnT2xLblB5UWhkRm5COFgrU3gxRzh2Ui9OdzI2ZnZQY0ZBVVVOOVZVYnBtSzh5RVpZdjNTQUNBUEdvSzMxUFMvcmRUV3ZUclROM0w4VVc5Sks3N1BSdVNCS1YrSVN6R0kzN1RJZ01tTnZGWnJlMGZaYkRIaWFiamNuTWI5Vk1uL20zOHRORkFxL3Z4R2N0Q0tyajFPRkxRd3o1MmZGMFFWL3UwUWQzdVlEWFp5NTZ6TEtIOEpDOHIrQXNQeE1QUUwxVmc1TjJRc3ZrbzFIWUk0OVFWQVZacDJhTzFhWmVkZG9jenlIK0F3RTZDNW54UlRYUGhmd1ZTbmVwZzg0OWx1K1dxMjBRdzRCb2F0dERTNWQ1NG5lenhrU3FtQllHeG5iYWF1NzdzSjZ4VlRRYThKdGFEQitrTmR1ZlVUcmkzVE95elBOWkdNUCtOTmM3MU8rbGlqK0g3eVM5MmhxTEQ4TWlRbEFqajVhM0hIT3FZZ2I3blh1N2tOdG43NmRMZENLTEZJcEpVdXdQdWJOaEU4blVIU3pjRHFhMmpwakd0V2t6eW81QmhCanFoWjc2b2FFT29IekRXbmZMbloxT2VKcDBPcytQVExiWkNoZnAyTU1hZW9RSjRIQVgvOGFlbGw5MDdpeHI1SW5xZ1dLSTVzOFEzek53TzNnNWh0VWlRejNHOGQ4ZTlPNU52YTVDekNNQXVwL1NweXI5QTRTMUNCQnZJb3dtM3o5cFkrSk4rYkdkKzZLSmFIWnJBdmt5bjByL3RlM3cwVEJtRXRyOVYzSTljcldvRWQzL1g5aUZYdXVHd3c3blNjdFFWaFNZRE1RYzMzbFp5ZlR3VjVuUWxzVWRNSmV1TjEraTR5aEFzWmN2VUtPUGxadDljNEsrN1NMSStBemRBWmZlWHBLZWl5dkEyWHFscmxJWVdnTGV3cWtwOHkzVi9pcVEwZTZMNk55N2hBSnIxZHdzSjBkUmdUNndsWVJ1WndHRjFlRURHeDhmcU5nSGVDMmc0eGlGUkwxek0wRkpQWHB0Vm9pV2Y3RU9uKzR5RlFCc2ZGdDZpNm16MnlCWU1Dd2RmeHg3cTl4aHNEL2RPRUJEWFhubS96ZUR2Y0s4azFqM1JrSlZpUlRwTUM4b0plKy90cmVtWkRKY25SckZTSzNsR0sreDRhbnZmY25aL0l0NXJNN1NncTlvenJNZ0hsREZkUGFJT2RQTU9Hc2xUd2l3TWZ5WnlaZ1Y4VXdwQ05RVUoxck5JbFBSaTJCb2ZETnh5MFJWYzl1S0ZmMlAzWVZLMzViVEdlQWlINjd6bVZXNVFEWm9ydlBXenF4bUJOZmJiTDQzc3ZpZEhib1JFa01qNUhuVWRobzVFKzdYVVM2MHlZdkxORHE5RGZqTjYyVGhTMmp4ZWZ5YWx1UnpJWFlTRHpPaHdWeXpuZUhtd0J3L0QxR1E4VUpNa1QvSWhTY2l1U202SVJ1SlU5MWdCY2lNZkVFU1hiZ0tmWk9hY1ZBUTg4SytYRjRGYW04RGluS2JhdGE2cFZNMGtmK3lCd1h1a0JQWG1rS1gyK0I5Q3kwbit0dG1QR3ZDcWE4SHhsWjNoS3k0N2ZIUHBwNjhHa3pjdURVWi9EdUUvZFdNQ2VCQVBENnZPa0g3Umk4Qy9wWVN4bnlCN1dHOFpHamZaUTJvOVMxY0VLdXNzWGlGK0VmOG1leFdmcXJ0U3JIZGdLNmlyTE9nT25PaVhUcEpQaWNrRU5US2Fla2E0V2ZIdzREVlNDOVh3Vjd4eW1KaXI5N004a3UvWUF3MUtQNTFoM2tpZmZEbWQzRTB3cUNacXNGTk91d1M0emFJS3RtZkdocjVKdzV2OVdkcUxqWnF3bzEyWkFROWZrZGdhU3pWSWtlTVRGeXNuRWpqQUEyZ3lkZSt4dkVuOVg3UkRGUDVPclFGaGNVQWdNSlBIZW5iOUk1Qytab3IwdXFSdGNiNHBUSEhsYWdVUStsbXIwNDBoWVNiL3NMOHdVS2tTOUEzeUlWNUQ3ajUzRDNDYWNyT0RiekYvZmF6Y1U0R3EzL0d4SDRIMldPZ29tZ1ZwTnhmZ1RDa1Fpc0lnb0pMYXRKUjloS1FURUxlaUFzK1JjaHROaEFTMjJoRWdFdXpQWnlWNTBtVzhGVk05ZWlKRGt1L093YklweWc1RVI2SU5WYUh6emdpN2VnZ2RabFFnSHBtdDA5WVA4OGZEZ01GVmphOHNucElLck1ZbDQ1M3g2R3NFQUZJMCswYlFCSjdUengvVkZZTE9KSDJtTUVQVmZmY0Q2clA0QW5GSzBPQ2pOcEx0UDBiSElUb1Vndjd4aU5iRXQ3R0x1UG1ScjVYRXo3ZWFVWFR2VlBIZVh0Sk0vOTd4OERnNVlzSDVSOWNCa2VVeWsyY0R2dzlOSmlQN0pXazVIcXBmUGRFV1Q5eVEwUlRaRzdaZG9adDNhRitCOFpNSnVNb3hvOHdHNkdrVDVjRFNTdlluUmpqdzVSZFFYaWYzaTVLbDF0NVc5dktWRzRHczdzaTl4aFhZbTJyZ3pmZ2hDT1RieExYelFERHdXZktIK3F6TUhZTWpRejM1ZXVCTjYyWnU1SXIrTVdGeWZ4QUQrSTB0VGFxendCakdEakYyd0tmbHhGWWRyRkxFR3FKY0lsM1pqVHRnSjRwMktoRmFFWkV6N1BCQUJhM0kyQXluR0xPQ0ZPRDRjbGdrWm43UytDVlpCaUYrODE0MTcyT3JNWVVSRHN5SVl2Y1Y3YnYwdnpFSEExcFNtdnVmY2xjQTFBU1NZcjlSOUViSFE3MEs1WFRZaHk1bWJWVmQwMHIrem1yeFByeGx3WjlITXZOS1NQU2IwREVZYldLd3AreDRQT25OdFl3dUdMQm9HcGE5S2xHTWxYVjJVaSs2QXNydjdIUWlaRnlJakIyb08zcW1sclhWbHcrQ0oyRmdiL0J4b0NmakdEbkZvUFJwUEo5QVlFdnl2SGFBTTNUb1Y5RGZnNHZ1ZEE0cnB4VGJBZm50THJsU2dUbXVVYUt6QzVVNWg5YTRacnptK21ndC9jMXUyUDJEOTYvb0tWQ0xZZ256QTRhanFFZjBMOEZRUUtsamNuaFY3WDJqWnNiVUlBVzhSM2VBRktKMDZqekY2QjFicmFRZWRZRUd2Ylo2OWk4aVJIY0xBWFNzRzI0ZWhRcm91V1ZpRTlRamU4dStrN0I3N1c0U0JJSGpmbytnQ0ViQWFJdjlTelNmU2hTNVN1VmNYRHpLZmlRV1ViT1JmTjhLZ2E4Mlo0RlVkckwxVUxNM251aEQyVXptcjdxTkJPNThEbWJuTDRQU2hFT0d6Y0NVTE9CSXg0Q255ZFIraThtcVBDUjMxUkVRWVdITldWRjA0KzFUNC9sOVd4N1p0T0EvUXZxeGhMaUE4YmptdzFKUlFuWFV6Q1pVSFRHSE0yakdLY0JlUFVIb0Q1UjNMWTJBNHNPSk02YTZNdndPM0lWOHRXbVlkSGI3RzVJb004NVRrQmdOVWRBU3U2S0VLVjRYa3JVR2ptZGVTaGRmMWF0aHhmQ1BlY1lIK1prbE5jZ1JSdkdyZG84MndWUUJSa25menNwSUEyeGE5NXJOQW91VUxibGoxeFlvYTM2Q1RIMEl5NmV4aFI1Q0xXNlkvOVdpMzdkTGt2ZitLUnllUTVDS0ZqZmx1Y1ZxL0lMNjVrb0J5N1g3RzQzakNta3phUHBra2ozNTRxU1NXV1RteCt2dDVuY1BwbEF0ZmFnb1VwRm1hK1JPU1l6a0VSdUNJdWwvSnpHZE1OcGpDT2pLWlFFUno2d2JhV2tFeHUvSVZUdTF4WXlTMS9MQ29zdUZhcmlkUWprMXZIUmJCd2V1aWtSU295RnNqQlEzOWhkMEhIeDkrSkpXckx0STI5NTVRa1BOdzU2T0RINHBuYm1NQ0J5Uis0cHc5cDVGOFlnZytGRllYUlYzVjhlb3ZURWwrWGdzSUhnbDZpQ1JrVjg4NTFzdWUxRmU0WVpLYmU0eHc3Q3lZZ0NzYjRSNzZSTitOK09wYkM5TWs5NHVRS0JSUXN5Z2JnUm9VcllLYVlhNnh5WDJ4VDZMODZURDliZS8xaFRReFdobEhqbFhOUVAzamYvY3lyb3hkbzQ1MU5DMnF0VVA3N2pOMkZPVzVQdisybG0xcDdPMTk3Tkd5eGVBd2VhVmNZL0FLSlRyWS9uVnVZY2hzS3dpZEdGNkxCVEtJcDUwSWwvd2lXTmNTSzhCREdxR3JlUTcwckV0cjRDamJmcXVEaDc3YjRRbXdoajhWQ0VKTU8vMUVEcnpTU1ZqWmgvZnBwTWtIUXJOOTc5ekp5OUY3SVdWVEdKNk9SU01rTUlTSzRKcDk2L0lVRE0xVnVrNGhZSFd2Smc5bUxuKzhndm52aGt2aFVrZGtPNkpTNVdYY0c3RWtvU3lyRjIrVDZlb3ZqMXNIM3NtUEorK3VPejlRMmRuVFlDTStDdjVLZHAvbUlmN2dvVnBlc0V4NmNETFlIelhseUdHZmNYbk4wdjBjMCtmaWE4aXl0ZGhVQjkxVkx4TlI4cjkweU90MngvQmdtWXVHVmx4MUtFWEd1MGFEaVh5bklUYk5wT0xQOVBTKzkwWGp0NktLd1B3MnpBRFZ1Y1NoR2daem84VCtpekNsNE5hWjMzU2VpM0Rxei9yOS85YTBuMlluRmJCSDNZYVluSFF0dTgyM3psYzZqOFhzSUxEK0ErdlNwWURhWXFSRGpnejNlTzM3djZzYitLQWY3ME9yZmtYalZhWk51YjEzYWZvM2N0SjZmckYxMVdtTDAyaHVpUno4SlN0RzAwNldLVGE3WmZ0Rm41UzJtQ2N0eDNHem0wUk1TUGpIY0FGVTZsZzk3UzNwaGtvRUxXQjZTeGxHalphdW5ybGZJaTFFOWl1WGd5b1dwLzM1d3prUlZWS0JBTlVHM2VsOWlWR1dVSU9vYVhYcGJlUG1nZG1FbEwzRVlkTjRTbkh5SUdZS3RzWEVCa3QxaTFuUDlzUktMMlcza3NvUVFDSllZTVpoUTZ3TGhUYmNxWlFGeDRBUkVLK3dDQ1RWNC9QSU9RQTBKL1pLU2xrVHY1S0JNOE1qRTkxRTB3ZnpyTytYMEw2cnBmUVhrWkw5ajBvRE91Nkg5UkpLQ2VNSkhLK3FIdWhkb0NPZ0JDdTFFQVV2TUkwOWxEOFhiVEcvVXdxR3Mwb3BtLzFEc0RkOHVYQjVOWkVZS1VhejNPb0ZsUzg2M2NnUlFHV2h5RE5KNFd6ZS8xYlIyV0VScnNaalpMc1JUR3BUWXV4NmRzMnpmQXpuazVxL1MyQ0dZMThYcFdESThYUDJ6OHkxSFNteVAvVU1VWjdXNVJpSFQxbkR3WDVPYnFKTXVyZzVLRVpiMHYyaFR2YU81YzRvTlN5QWN5MkdRaHVOMG1xQ3NnYVZVK3hyR0hxQjRJVGh6dkNMMEY5MWlZRngyQ0Q3Tk9ZNGFOYXlUSklDZ1FXUHJHS2xPTGxPdGVVemJhVndFYzRsM0xqdDhlbnhveTBodW5tV1VOcGZwdFlFek5oTHdmWUNxYkpKUzJlMGtRUlZmODl3a1Vscm85NS9ZYS90NkI5Y3NOcEdld1lTWUttM2ttZkhvZExaMGtNVlRCMlZaY2NIU1pKbnA1OWx2c2lldlpKZ2M0YlJrVjVDWE9sU1B1QmFCaUVjelhoREd0THZ1bkJXL2I5a0xGWWdkWVl4cnVPYTI1Ym1IWTNWYTltZVcvMnY2QWJZcWFKQXdXM2ZyRlBsbWkzUnBud3o5bzEzNTBFUmhBODZhbmFUMkFkOHdmMCtTaW9kWjRNdWNyQk1iY09ZdjZRKysxMDBDN0NKZUNSaFNCRm1QNFlQcHJ6YVlTeVlhVzMvSFFIdlZlc1lOL01ib3RvTXBRSFQzRlNhbi93dVNPT2N2clNySkg4a2tadldhclljTnZZSG1HUEV1c20rdlFtMkpmSkJrc3JROUJQMVFvY0JBZTlRcFZITFJ3U0ZDbU9HbkFpNzZiTlRaRlBzTzVzNHpEMkIzZC9IeFJGcURObnhOZG5pT2c4aUhsc0sxNVlCaWx6cmU1bDVQUld2WnA4S3ZLZXFNNHZDVnR6Z0lGTlR2ejZsblBlT3loWWhXTVVzWFNNK1k2TVNaUWxxOG83b3BIOE1wWm9lYzhzT0VEVVdHV3hheFRaL0p6ZmY1TjJLS05adXhOZlQyMHVNdzFpQnVoQ2d0enVHZ3Bjc3pqYWswdFU2RitmdVQyZVJTNG1MUG00ZlZOVzltS1FMUStNSzVQSE1UQXhRMGpBQWoybWpnUjNOSXFoMFVZNEFEb2JNbDYwOTVqSU5LRHVLRjY4WmFPQ1VRTjVqWXVuY2R2SWwyWktTQmM4ODc1OVVJOElhWXNWUk5GSDJRemg5WVNjbWt1ZkFybGhRRVcxekNIeW1rWEFaQjk0WUlMK1owelNpL2dJbEpwOGdNcXRHaXZ4bUdUSCtIRHRxOVgyNVQ5OHBzbHR4NGZtNko5M3FyWlhJcnJhTDJoRXZiTTloSWkyWGErVlhacWhtMVVJVkdDdHMrOXpsRXplQmI4WXhqaENDVlJZZUdCaGZaYjJjMHBhb2d2aE5IMGIzRVB6OWcvMnFGaXZTRXdZdDY3aGNRdTBkRkdSYmlUSnljRUZYaml4Y3dZTHYzblEyeEE2SzlFdkkyRURobUkyZGxRajN0Zm1DSE5QdlQzY2p0R2RZVWtxNVVCYVBSZ29EbWh3K1p5VWRPRjF5WmhteHA4bWJnWi9WYkRCc21tS2ErMFdxZTF5NVMxNTFMekVJNHBrL1kzNkx0RWk5WE5ZWVdMT2tmaVBxTFkrRmg5VmVaaE9CdHFTOXo2WTdKOGc4RG5aT2piK3N1eWVsR2RJc3ZzQytuMXB6Qis2bmd3MG92blRXWi9XaXBMM05nb214b0EvdWdmRnFTRS81QnBVZ0QzenhlU3ZCUjB1T2NSWExBSHAzNkZHTTVSUUVsSkFFbXlLUmt3b2pnbVVXKzlUenJIMzZWWWhSb3AvcFBsaXQxWG5uR1VERGFaKzhxdTUvNDdtUS9jSnJVSFpyenh1T1JCUmJiODV6Wmx5QVVWZDdjVGdTNUJITXY0aWRCbVdCWm8xZFdTaW9kcm02VXE2RnJKa3FGTkRQeU5Zd1lkeDMyUmErT21jcFhuLzhrVEUzdHB1VjJEd2JhRmxwbGUxZmtCQy8yZFJhT1NSaUJZUFFMQ3ovVWZjaXpoUTlXUm5JS0s1czRjV3IvZ01ld2h1aFByZ2ZGYkdKY3NpUU1BNC82NTR4UzdXYWo0aHh0UzB6cUlJYk5VZjBUbWdZdWVSUVBhSGdxRk5RWlh5SzkvdHV6MWJWUm1WMS94cUxtNFFVYkh3eEtoSVR3TlduVVNJQXVvYlBaSmkxVlNMa1c0T25kSXJUWHFaSzBXMUtLaDArckZyZjVFVW00K1RvdnFuMmYwMmJuVVp0ZEoyVkxnU1R5eFdseUJHTjN0NE9SbW43bmVjMTF5VDI5bzZTWXp2c01MUVZGN0dOQXMvYzRWMElGV3ZEMkFIOVlSS1Z0dDlLME5qcGZLWXRlYXJ0NjhiVk9VZFpvV0JXMFNHdFN6Z2U5QjgyZCtEamoycHlqcUZwSDJxQTR2QnlEdGEvcGNPaW95R09uczR2Q1VPM2dITVpQZFJZZUo0a2k2ZHVuU0xSMWhLU2Y0SzBOYlo5SXZFU05wa3hEM0pGbEhXZEoxT1hFNFJWbEt1OGZvcTVENll3Um8zWXdiNitrckM5amtmV3dyUjM1ZXo3U1EvczlHQTlHOW5McGNaaFROSFh6T2RHY0UwNlJkM1hMcS9wRStSbHBMQmZzZkxrODZuK3UzMVlhTm9mNmZqVm83cGdGb0xxbGVXRHFxei9jaUlyMmp2RVNIcUw4WGUwU0FaMG81WkxtSjhzSjRtQjloMURwVlpmaUJnTy9YcG5KMVljeHc4NEIwcU9obUY4a05kVlRKMjBMOXk0aG4yTXZFd0VoSTliOVhOeVdXZG1jQmp0ZXhDWld3Z2t0bENRcnlYcklEUWlmaUFQN042dlplYlhRY0JZcmw0a1pDTEZVZjVzK0FjQkRMUng1eG84VG9scmgzKzBwaUhxV2svazdLbmNFZnU1Kyt6Unp5WWt5WVIxTHZMRHc1S2ZpMXQyWS9EZkY4RlBEdHdXci9CT1ArOWZ3d0owV3pkSk5acUdTenN5RTZKZFNvSEZNOXpIcWJQbERETHljZTh2UmlnU0RYd1pJbjBJekU0azkxVkFUYS9pRVNQcnp2SXlTcVAzMmhHMjQ5M3dTY2hsaWl2SWhIZTh0VFVUVndJazdoTkxBRTc1QTlBNGRJYnFCcGI4QnVMNzdGcFhrUkFJRXdWR3VVdXVEcDNHVjJNQ3Bob05aWC9QaXRib0ovVHhDVngwUWVpUXA4bHVKRzgvSU4wTlA0U0RBakw3dk1MMUt6YXpzVENxV2FvUEtycFRLeHErVzlSTDBVaDBsWWFaZ0FkWHhESFNqUDlMVkVIVTgvYTB2UktxdGEyTDYxcklUQ0VCL0FwVWwzd2JxbU1hRk9xdE9kRThrYnM0UkhDS3JVNmxHQnpCd1MvS2gxbzBFRm16L1JHQktsRjR1UlZ0RW03akxXQVRZYlQ0SUlRSkxwZkVqbmIrOWRGcUNuMVc1dXpEYSt1NFRaZmsvN3VBZk5GMXJwYTBWV2ZPcVRuamxIMEtDVW5UdVhuLzlpT1FQUGZvczVweC9qL1dpdzdrSC9BK0VtVFRIemxocnRTZkxncEZOK243ZklNSStMVFB3dkNhOXphbWlhYXZNWkZiU1JFM1E4dDZhSktyb2JQZmFnVnRUcTFyczBPdkhYTjAzN1NBS0Zsc1NWSTErRVllUnR0WXNJU1hYTVVIUUNzVDYyRzcxMlRNUEMxZ21SZjhxUUFhK0dlSncwRnptM0RrUnRVVEhZTm9DRy8wWU1TMmFhMzlOVjJtS1NyTC9JVHRmbXArY3pWNG1jNDZHN0IzSmlvanBlYWI4L3dMbUpkSVNiMUFZT0kyRG1XSHBPSnJ2Z01zYnJDeUxWeTEzWm9OaHlTbWtJaWZUUTk5NlBEY1B4SUdRT2ZWOXF3QVcwOStadExxSmZ1ZWZaQW85MG9aYngrMlkwTFZ2Wmdwc1pJb2lXZUs2OW9FdnlWMTg3NDVOdXBWcjFtNkh6bWgzdGtURzNTT0EzMGtGTVJNYTljc2xoZVNuK3YzSDBtS1o3OXFkSElDblNxempHelRjY05kYm1hL3FsdU1ZcFBZMml2VWRMYTREa1hlOElnRzd6M1dvcklzVmhpS25sUGFPeHhpc0N3anhua2U0V0ZTcVQycnQ2Vy9sdEp2QzNTcElnT1VETUpyWkhoUWRReVg0SGJ0VzhWTnVTdENrZmVjQkRjRkd1WFVCb1AwdVpDZzd2UEhXZFZiNGhSVW4zQnpKckFlV2xod0FqSnFIZGhVWlM4UlJpM2xuY2w2NUZlSjQ1NytBZ2JYSC9VZTJyL3VscDlQbXdMNDM3YjdVUU5VU25LTSt5UStMd29NMnp4dTlMKzVnMlEzakNmdzR4VmNVQ01pRm91QmdHQUMxNUR6U1NmQWtSUlR1ZW1oRWgvRGM1RlUwa3RoWTl1aHI5a0N2cWhOUTJFUDFpemxVZUhONzluRmlnckdwbjF3eHIvSldoa2pONnRHS2kyaG91d1FyTnVwWSt2cW9NZnJ2b0JtU2FVSWlIZHBna0ZjN3ZEQWJGdGhyRUlqUW5FVEN0OFhZc1dQYityNVdzaGJYbFgxZUoxV2pQeXJJcXI5bm95bmpHUUFTYTJuQTZyRkdtMnJLRWxwRWhBakN2Y2Job0cxQk55NmlzY0JUdC9QZnE3dGNjNVBFQlQ0bXBLaEpmMTJuZXZBRmUzUEx0eWhyYUc2NnN5NDZzdzNkVXJlVG9qalhFc2laeXUwbEF3aXFsREtjTDRQbXhwNnV6Ym1UWTU0Z2ZoeCtBSkU2bjdhMmFEU3Zoa0JrTjUybFF0OWxlN3ZqcHE3MHptN3JteUJ6SzA4SlRJa0ZoSEZXOW1LM0JKRWcwQ0hvOVd5Rk4wVTloY3hRdGMwLy9Pc05HMmFDc3Y4ZTU3S2hkV0JOenprVUtSV0t5dWhvRjRXQ3ZKTlp6NDlrVWZOZDFZcDNxVFZBTU1ucjdXd1F0MzdDL0ZUUjN5YjMrbEJiRHZaWUE2ZzhRMDEyV2xma2JEY0M2NGxaTmdmQU50QnFab1k4VU80U2JLcnFadGg0bVNjTys4azM5cmxSVnc2Nm1FN0tMdWhHZUZZM3ZXWjJvWnBnNG5mSy9nTE16ZVJ2cFloM1Z5c29OcitYRVdURCtNdm8ycWVhN3V5Tk5YVDJiR2ZhdmwxbGRNdnllcXFMRWxldW5lZy9rbkYySTRnelpmZlZJTHA1VzAzc3BNZlBTZ3Z5MHBzbHZ3R3MvSU5lUCtBYkhKeEM1VTkvdXF5alkxbVR3bTFocjRJVEkxaUttcDNrbjQrREZMQ3hOdWYyMHNMbGdGMFgzekE1TVpUQXhDT1NacklxZVNpOHVGR1Y2VFE3WTJvOTVndnBXMy9hdzhOSHl1Q29qSUFicDJ1U2lBbEZPMXRTdk9mNmcxejVpRVJROE1odzRRb1R2Y3R5dEE5RUprVHRuUXJ5MWQwb0U0ejJUZWpBWVZ2MWtNRUgycVRZUmc3WHcwY3lHM25FNytSYjd4czBCVlhkckJibTdqb29Za2c5V29HSE1JU0VSRkFNNmhpOURiYlZMVXJ5UlRmUWdaZHlyMWxIOFI5NUlSNjNobFRKWkc4OTBzMEtiRHo0TFNIY1R6RGN5dmxzMG02M1V2YXU1MFdQT2t6MDdDNzk4MEgvSU1mVjQxMCs4Qk5HUmhHcitWVlJ1eUNBWnExVmE1bEp1ZURBYkQxNUlUa01ZNzVTcllyVktOaUZCL0pqNkNGSzFLOXZtZnk1MGV3eHAyTE4rVUNNQ2VKaUdvdWpNYjBPcmhnZFRRa1BZNU1ScmwxK3dsWm9lSkdaY09BTVhQd041ZjBjR3psRWhZWjBNMkdUY1VQcjFBYUsrcGttWkJjTTFwOHNTZTh1ZGtkSUsyS0xwQ1c3dzNlWTFaVXgrM3dQcTRMK0dOODFJbkVIcXQ3cnEzNWRlYUNRUHZDN3VpeU5aRWlzK3pVamVkQ010d0FzNVN4LzZQSjdod2RBU1NId0l4SDZseFh0MTEzVWFBWXBKNkVvMDVXaUI0R0grRFlEZUd5SzUzZmpYbTlGV3RFbjVjK0c1anV0TVdaV05MUnl1aUwvSTRCazhCZm1KY0ltWkdOK0YxajUvVW1YcmxyeWlZZzR2eUllaDREQktGUmVTS2Q3dVhubVJsTTc5eVRJYUxvNHJlSC9ldkNaTEVPaHYrcElybkJjaXVwU0JTU25pMlhOY2N5SnNrN1pXSHJvNXJNWk5HN2hIRUVEcEo3SFB3SXZJdmxycllaMkdUb1FzaUxWYjBwNFlab2duU2xCelp4MGhQTk5sUno3cEk3L2Y3TnlLTWlsTkRZSDAvMURNL0tKb1B2MWdjTWZONVFTMXEyN3Y3aUFSMTVXM0JCVWRCQXFma0lZZGxZUEl6ZXhBRUQrb3hqcUozZ2ZhUkhoUmR2eGszRys4bUg4OHlnRzdoZFNuVkFFbEhQajBmS2NnR3lIVnZLU3laYVFxckRKVndYTkZ3SWEwZDNxWlp3c0xyZGJYL3dOZDVoSjhaZHF5clo5RWZlUXl4ZWFzNjNNUm5kMm15YnBRUnlvZ1pJais2R2pZdU1ubFJnVjRQRG1CZEhsQjVaTjlMTFhlQVJZb1k3bkorMnpRY21xNXUwUm14cm0wdFJPNDV1SmdPQzh1dHZ2SUpFVXZxMjYxZWk4ZmNvUDEvaGR5UDM5eDNoM1VNWVJHTUtsYlI0MzFPZDNnZGpsUmtPOEtVWG1aREhnNVBhTC9ZVmRCNVFXOHArQXl0RU1oSW8zTzZ1Q0dRY0o5RHVyRkMwVGVMazZTaFAwTG5COG5xbkhVMkVqWUx2eW93ekhZYXMxUXVpQUZSa2ptT0ZtTEEvUWF6UnNudks2MW5qNnVvRzg4bVljeU0xNnhINjFsNEllR1d4S0NrUHVJRFF4UUl6NFZlVVJKbmhmbzBEamJqTHRTM2EvZ3F5T05QYlJrblZvaS9SZm5hSThjbU10QWZra05wQTd4QjV3VnJDUVBSNTljbGVCdUFmSEpwVnpFYzI0SkRUR3IySHphd1FnQkRjcjBqdmxwakZxcktXeGEvOVN3KzlNTndzMFN6N3Y4U1ZHOWlPem1QVjJnNldLTENIUi9UYTlRL3VqdmF4ZmZMOVpENDh2bE1DT2c4YmorK2xLbCswY2FZZDhlcFlldlZPMTB1MXFhWCtMREhSRDZJRXQxTm1vNEsxR21hTEM1NUpKdWxMZTUvM0NmZnJIZTVrVHNRd0ZiWldyYmV4cWtIRXJYeVM2NmJwZ3Z2UWdnRHZTSnl6RDdaamdLSUdsNXovVFoxYkJ5NkRqclUxQXM5L0Evem1Yc0xxdkpDZjVOY2o3TnMyMkowMk01T1BSTEs3VzAwNUtBMGFZbE1nYVkwRkVDMENTNTFFVVpnWWNaU2F5cjBBbHdHVjN0eWpockpIZkRXcks3N0hoMU1GOVd0czJtTnp3MEEzMUZTdGpHQXZpNXdQSEsraVpCNlIwY09PeTlWYlVTNFVFS21UNm5iY2J0K2hFczdPbmpKaTJmQ3dVZTZtblZBNm56Q2c5dkwyQXlHeWdrRUxIY25NQWtleG5kTFF4dkx6V2JSYWpkODY3OEdHK0lMblZOcU5uZkV3b3VCbGxCU3ZYOW9uNVdRSWVUSlpIVXd4UmtPQkkxVCtoODdVZWErRUZTWjkwL0Q5N0lTWDhyRUxrSGlaa2NrcUQvVVkyNExEVHVmWitiOUhGcXZOWUJhdnp5djhWRWJqZEg0RVhGRk1XMk52UFRFd0wyRXBOQVRtZGlvSjhMZ2ZENEtGbUFHeUJnanNpSEhRbW1jQlk5dkZTUDdHeGl6MzFDUlV1RiszSkRvaEc4bWxzKzVQVWR0OXhQRHN0MVZvYWVYTEdacGs1VVZzU3FHcmZMTnpiYjlUSXF5d1JVQUlodmxRd3VzOVRpVlkxUjBOanJFQXk4dnJCTEVLZHk2OFh2aWZudnVhVlptOGs2aHYvY3dkK1lmY2wrQ0VEL0xENUYxUjRITitoS3pYTzZPSm5UUEdFSjU0SmljeDVLRnl6dzNoL3hVYm1qZWpqVERncVN5c3FBRXJwMFhZWUd6bS9IbXJ0OXJRZlphRjUyRSsyTWI2VGJjVngzL0xXOGtsdmhsRWxhRnRJaVZkVjF0Zjh1TngrQUI4cVFVRERlTnpoeE1HRnc4ckpHVGQ5K1Q4WXRtQytqSm50TkdLK0JFNzFBNmJPVGdudUtyWjUydEt6SkZTZDVtcnNsMk5zc0RpWkdjTmFnTXlrRUhHLzY3ZEhQYUgvYjJoNkhhZzl1MW1Mc1J3MzdiUDk1dEFtZUEvTDFkdUhRU21tK3hLMWtNUUhUb2w0MHZmaDk4UmVSUFBaeEZQTmdSMStLdStIc0dMWlZPYnpKT1AzbkQ0Mjh1WkRsWGlJUDRBYk5yS0NQSE1EQ3JVOFhqKzF2L2xaQU9oeWJyMkZ3L1FqYVcrdUc1Q25Gb2Y0blJwYzM5cTNydFhTWHgyYUtvNFd5Tm1HcC9MT3VjdCt4VEIrVlY3ZjlwbXVJc3ozNDU1Q1ptOVFKbVhiYnFxRFBtWHZEazdINVFoeEQwUUIwR05uZDFDMHgzTFYyVk5pQ3YzUkRzYjZWUUdsd3FnLzZiR3A3K3gwd1E5dEh5MjFlVEZYU2VvQ0FzeVNQRmdYUEx3SjJpQnZScTZJNXNCL3M0S0RiQnJLVTh3UzN0Z3UvY3Q3VURXWThtdmpzd0F5YTFjYitVMElzMHFoMEp5NURDSSt0OFRFY0Y2UXI0Vmg1VEZNdElnVkRlOWk4Ylo4eE9GTnRHczVSZ05XWTc5amVaeUlDamN4TUM2Z0lwdWJtdExZSjA4elZLdG5CVVBFcXNhaXltL21PSi9NTk1iT1pFT2k2Zk1UTHdlMGVIK0Jta3FPMXMxdzRONmtocHpnM3lIRzBHck1NQi83TzI4Wnc0T1pJc1p3TnU4QmVCeEVCeVJObnRyR3FYc1ZZTkNDZGp4ZUhteDAyZzZJVUhYVTg4SmxlTDIwZWgyT0haTjlqbTdLTDI0ZFV1UjZIL1k3K2RPWEV0dlY0WGMvZm1ZZlNXcjBEdXV6aHppYVdHbjdHRUFRTzFZd2dQSEU0dWIxaUVab1JqODZEVDM3c1htWVd2OFc3bmhiZFpLV2xhZjQxaE1JeGRrTzl5Yk1haE9DQ3A5cU8rOHlOeldnMDkySWVBaGZ4L1Q3VVNndkhQdktUb25DTkF1K1RNZnRMZ3pCeDZzbDJiNmR3czQ0akpIRmkzSlE5aUZPMVV0MFltTWY3bVZxTzFOOHBOc0poTXZQazBvR0t1aHBTS01NbG1BSllCR2x5bmhzVDFnVnBvK1RDZzFHekFjNlBkZ2hGV3NmUnBob28vMUVHZWFqWmQvVWVYenViQmVSWW9rSnExS1l1b0F5NHpicHNsMUlXVkJTSUdVaUY1SUtpVG1veE1CQUQyc1lqU2hxcVdHK2hGODJFdTdLZ1ZJM05UeExjeHpWMmVzVVh5Sm9kWVlPK1ZRd0tyTTlFak0wVFhOc0EwOFMyekwxYm5hK3VIRlZVWmFzWW1zWVVvR2Ntc1l6cmRrQW5VQ296WWllaXdNeklQck1FOXpTSmZnZUgrR3JxVi9BNWpjM0ZjenI3RmhaNjQyc3ZSbHIwTWJic2J6OHM0cFF3cXRrMzliUmV1NHMyeDl2a1BMZkVJTEhYVlJzeTlqME9hTTM2RlA1WlVxbm5RcmJmVG4vZXA5c0N3VENYckZPU3JrTlVnek5zSldLUmJpZDdGc2RvYjdQWm1ncEZZdGx1ZGNhR3A2alZFd0FlMjBhTlBKa3U1bFpVL3Nralc4R1hJWE1hRFh1M21reVNwdHVubWNNUWEySHJTeHNaR0hZbXR4RXZqM2UvWWVnc0owRXlzNHYrcmw2ajlka0hTUXJ6SDZMVkY2NTZTZkVzQUxFN0ROeWNWUjhRN1pSNnRjbkhtc3VNeWs2d0FvQnlpUjVsOW43T21nWHBqTmphNUJpc2RMZW9DeWRuRzIzQzF5MEw3Wm5JY2lNRjJBaTNzbWQ3c1BpOXlBTWxmTlNzNllXRUhOandNK240ejE5c0VYbHA2Z1cvWVd2cE5OcWYwOWRDelE4NGZBb3ZuNWxrdUhyQjJlSGxlWlp4MU9FTERoVnN0Q1FVSC80WG9BR1hEYlJqak1PM3dYYUFxbHJvWWQwMDVXTDVxbHNKRUdQR3hDeUZPMGYyTUtQNERZcnhRZDZrdldnTDc1YUR6eXJPaElwaGJUT3NHTGZTZW1TN0h2blBHdW5xOUpEQUE0N29uNW5QQy82OUJ1cmpBbWswNjFxNE9yV29zRTlacFhPcnFwWUtPbVh2UHVKZEJUK1p1c05UZWx5TDQ0UlNEMlFySlJGeWZuNzgybEpNR245SHJnZi9ITVVsbzlkR0UzY1ZVL3dWdStxTGdZNTlEM0J5VS9ZU05JMnBHRFV5eUZ3QWFsUmJLWWRhZ3hsTWdHem1zV1ZBelc1K05IRXliVFE0S3RoUGNvd0dUUkppMmZsUE04MVA5b0c2WWVDSThxcGdpSEx6WXo3RnJ1eWNnV1pKaVpHemtHMU8zN0VnMlI2UDRQd3paRExDeUprNlhIWjRUdE5VRy9NYUh3cGIxUmRIS2dpcGg3MnNwbzFzaTFybXZWd0l1WTRqM1RSOW41RVR6a0dIR2xTcGZQTDFEVzFzWjJ2VEc4bklVbWlxME5tQmJxaUk2UDRoRHpDR3NtY2wycE1aTlRnQjFXWmszdWE3WjhyUzJEN0xaeHJnS3BFbVhNOG9hS0x5OGdJbUIyYlRDa1dBVnA3Rzdsa1kwVXo3Tkx0YU5IeWx6YUV0VXA0Z2dXdnQ2Sjl6RCtBU0E5eEZnYzJFdkZhdkl3MWxxc0lKYWUzNTA0RzFUV1BvMmkwamVPWEI5djd3cjNSalZkSnJuNTRsa05iYUltdnJsU0N3TURGSjNMNzV0ekRqWW1Cay84STdJRW1nVGgvTVZNYndRbW0zbEZJblVHNW9PVWxtSjRyc2tLSUxkd3k5ZDlVazdibjVUZENRT0IwZkg1Q0tzbzRjT1RBWUZQMEFMUzhsN2s5Y2JjZXp6TlhZU0QxNXpiVHB6aEFvMURrbnlZN0lRamNpU284amNyTU90TTFhUjF0NSttODhRVm9PZTFwd0xtUFJyanZiQ1Q3M0NDRjJScExoSnNZa1FNeUFadW9xcmhjYm43ckdPbkxEcFRWcDdqZFVjSUR1Mkx0WVZROWFocWFjUzRpNm9oRU9WVDhhM1lxYXBFOE5rZlZWMjlyMkxWOEdDcjA3dXh2QTFjYUJqY1M0eEZqazJYZEROT0J0MmNJNVRRKzZpMmgvTkZDVmdCUVRQempQeUtBNkw3NlNVMkRiem9pa3lwOWttWUdmN1UzRGJFNFk4UiswMWRhNXp4aVBPVHkzNVQ2VTlTclRsVlJ5UWhkbU1paitUcW9RWHdicTFqVEpNTEtWMjVIaXMxdDkyd1p3bDJ2dlUxQmgvYUtUT29VdlZ2eDVaK0pkVHFYNmRodWdLNWdsMWxvbG1haTNlbjZCY08wUVMwdlZ1c1ZaQXViNVU4dnltUFd5MWh5azNja3h5Q3FhSW9XSVJOK3c4ZDk0V2tLR3NmS2RSL0xnQi8wemxkSmN1VmE0MDEzVFlGNDZKS1RvUEtna3BpQmNha3hXcDQ1YVpDNUY0RXorbTZ0dVVxT0Zza2tDVUY3YW53VkNCMWxSYlc0UTd4azEzOFJ5bE12Z1NXYkFLeUdvTm1keUpoZ3BDTWlpSkhEZmU1T1RKMDJRM1BFajMrTGhrbm1rbGh3VVpIN2swZWpZejFuaDA2dTJPb1c5SHBSTFBzOXVBcjljckhYY3dQVHJ1bi9XMnJsVk1jMDdySEt6WXk1bUkyZzlFcG94SmJxWmRmSytVOHZqRHZwR2xVMnhFQ2RrRHk1cVkyMjhMenRScmhQdVNzZDkrTUY2eTdDY3F1RjhLV0VidlV0VDk3dHBPVUM1elBSRG5lRk1pMXF1dDZRbGlPMHE1My9YdUZsbmRMVGFybG85YzlWS0hEeDBNRlFldy9GZDdQaWNQVGsrWjNHUUVhUGR4VjcxY2s2enFRTDhGQU9ZS1JaRk44dFBFY3BMSjBObExWWmRkaEJobUJrRUdwcmw3TVM2bWtNYmFCbkkrbnNtRFhjUGNpalFFOHNobjFSeTJHTDNwTE5BaWdUL2lDa3crdWRKL2kvdDE2SmRnZ1BjSERFbVB1TlZZUVcvZTBVd1hkaEUzSXFET3ZyMktUMzdOeFMzRUtHdjBuekZUbGdlcmoxNzVGSkZuNkUyUUJ0NEhGTEJjdVZ3Nk1mY3FNOFhTWlp0RTQvOHlyWCtGaXFiQ053U1ljaHJXVVNtK3AxOEJsOHVDNHZzaVBkL0w2VzE3MHphRUZMMC9iUm9qVE8vdEtweVlISXd6UW5qSnQ0YWFxTjh0RGswSVVSWXJ4VzcxeCtaRHVMYzZRUFl2VVZwTDRna2U5RFNzeDZOMUVrTWoxMWxsRmlTeWhJR0NKMnROQWtMOFJwNlBwNnpML003bG5UeEtvVk12TFZ4dm9JZ2t0NWY1dit1NnJUT3N0SEtMNHZUdFpYblZTdnhic1dSSkttSHVNelpuM3gzN1VlMXJSMjZhdzRPcVd1M0xDSFNUZ3RhWWI2YzRnbXBNakR5TUVpdlE3Z3B0Y3FTelJhc0x4aDhGVGFFeEo1alBIMmNtREFFRW92VTNBc0g4VjdaS2p2WkplNjdWWTdJNkxmZ1I1NS9GRmgvRzVtVVVZM3V1dUhQVjBZYmU1SU9PTHR3Rit2VU9jNjNJS0FyMzJ6L25iMWQzdWIyMWJTNWVZd3J2Ym5QeldqRElKenVWbStsVG1yVklsTzVONHhpMnJaMDI4MW1ydTlrV3l2ZC9EWXR4TWl4cEdlZ1FCTVhyek0zN2lNVjBsOFRWVWswQ3oraElSMmVMTlV2TlRwTWhzM2RxdVBuMWZPempLbGRhNEpyTko5elpQdHdrSWkvbk8vNmlEY0VFMktkUmsxUzlnc3BUVFFLZjI1eGR5ZVlOQnNFZDdxa2RlUlNYN0pKVXNZcUNIeEdqcThhM1VnM0hvUk9XT2M4QkxtVGU0M1lNbUZoSm1sOFg1bUdkVmxrK0o1Q2Y4UWpKTGJWK0twSmRPUUE4cFZFbURhVVJEWlhObVRYZTFhdXhvUXhoQ0UvdWo4Tkl0UlVQT2RCRi9RS3hvam9UVzM4WEZBVXNFNEZITE9LQmIzbExFQTBETThtVUcrT3ZzbG5QOGtORUp3NCtqb1FhSThRZGhsTGJ3dzEyeHMxNk14dkhqTVNiYVY4eUtzRmVNUnRnMGhMczFkWER0U0dxUUt1cUtLSlZSM3NjSmVWZ1d6NmFQbDY4N1lsbmkrMUZOMWFLME14YWhoSWw3akpYd3N6dWhyRkRHbmNoR0hzYUQyR3JqbTlqai9RMmtkeVhpQWs3ZG9xYk1uanowcWxhZEtuckdyRTJrM1NGRVYxWkwrWXY3ZnpiTlFIK0dKOUxZL1dwMHNVUkY3YU4xZEZiMjRqME9vcloyblYrQUFrT002TlNnRjBIVVBqclZrY1h0Qzc3aDREQ01BTkZQTDBROWtudzIwNlNONlowV0oveVZZa2dGWm40cHJYR1dNUWxUQk9HLzFLS0p2eFBhdDJpaWM2VlZKNDVVZFVLUXNmSnFoa0hKUmRySmVmK2plUDAvNW50UElTQ1F1TVFYcnVrSFBZcUJpTnB6L016RTlUZ28vRzJ3d0tKTXpUZmI5TE9WTmVIWE10VmhWbXlqcUpZUGQzQ1JvMCtKcGp1SmdqdXNYWVRKRU9DYlZNTnhKRUF5UGMyeHBYSks3UitUdU1mNzY5OXk5eGdkajdnM3h1MUNqMVhHdTlveGd5Q3ZNYUdwZW14SmtFS21oSDdxQ0NLay9iYmRLM3E2TUFjNmVpOGNWakpqRi9RaGJwMUM3Vks4b1VpVnpiV3dQR09MSkJ3ckpYeEt5bSs0aXorZUNMUWMyTTIydVVvVCsxQS9ybkpaN3pkdWloUUZOVldFa29udVlCUUR3cjhLQk9lVTllZ2ExSnBRMVpQTnkyY1JmdjdleS8xVStDUmVOZW1sdHE3bVBIbWJpUnM2cVNNMkZzUVdGcUtoQnVWbGN6QithNE56aVNrNVRybEpqc0V6RzN4T2FSV2VSNnY1ZWZodm0rbmVZeTJ1SnRJdXRmeUt3OUVDWDBCeWJFRk12NXFyS0xPMjUwbE9jTkl2S0I4Qjh2WGZXK0FtWHZFT3dOR29BbGM5QkxKdk5VZWw4NTRubE5VM0ttbStIM0RZMXJRcnB3cTlzZnJZMEk5NklpZFBGdW1aWkZZbnd5OG43NFFjdXpWSHJORk5ROUF4Q3h0a0J5YWdsY1VBZ1hHTHI5WEwxSHh5MWlmV01aSDcrS2UrcU1tREJhcE9IN2JTTG5SRm1uV2ptNFZCc1k2S0JKOWx6cS8zb3BMVm1xdkt1VlFIeDVvL2xCQjJ6SWpnWjRDaW44M0VuZ2tESjJTMm4vTUJhbWg5ejFWcjQyU1VJRU82ZnlaQ2doSGhqSkx3NTZsZllVcE1KcmVMOHI5b2dKUU5RYno2SFdHaUp5RTNOcFZhWWF3RFNKeVdwb0p3UXVUVWpneDdJN0JpQ3lmMzhPNkhDOFV1dStKQ0xwWnhlUGk4U3REa1JqSXBMSlc5b2drU25iUERsYjcycGJUV2s0RFdobnpWUW1VaDFJU1B3VUc5ekplS3d2WTF5eFRIdWMxK1ZSdEhtTjU1T29lLzFhOVBMMzdwanJ4UlYyQUJTeW5SRXBlSU8zdjcyRkZnS2xvS0I4L2t5cjBmU2lUZDVBeUZrMkZTYXUzUGxMdmY4T0lRTnBJaVZKbk4yVkl2TzZieEpLMEFabTBqNkxLOStHaXJ2cVU3UUtZWEMzMnBYUGwrekVidzRBZ21aZ2RrVkhCUWI3OTA0K2FXekRiY3duSEVsYUNEY2JieTNtdVI3MEh0bmFuREFTSnpJVFg3UzFSZ3p2bVcvQmVPaHArb24xKzlWSlQ2NFA1UGloRVRCWExCZ2lYbkdIOTFWeTJmd1JXZ1d1NG91RTg3NWh2VFVYa1RSV0pqKzRUMVRLanI2SXdLZzc1dmUxR0FPbHBnOWxQeEZySHFhQ0E3ZVZWTTdwVlNrNCtzWDYxemdDd0VwUTA1VzRQVUo3OWgrVGdwWG54WmdQMkNjV0hRRGFwREVTTU9qK2JiN0xRZ29RaEQ3NUpMYUVxbi9aUG9kRGFFM1k3RS9xcEszQ0dqTHJkeHh4c04zSUtZY0hNcHFvd0NuK2Nsd0xNMVUxdU9udHA5ZVNhWXFzK0xHVHhxN1RHRWoxL1htdjBRVmtLWW9raElneXAzeFM2amRPYlkyNFZOM3BsZTdoSzljTDZtUE5iNFhsRm1NT2dvYkJWSnJaUWVUNGNSZCtqcjdKbjRpUkFFVnlBbit4NXRVRUpIOXUzK0srUlhDZlBKbXQwZW0vd1ZQRGQ4YXZDU0M2Ym50U0J0ckRoQU9BU2NYMEJGeURDR0NTMkNuWWp0c0dQQURIQkdqR25MYkFqRTJBQ3djUVgwckFxRE5GczdacXZxa2w1SGV1Qm1xc0pZQTA2REhZQ2VWR2g0Kyt0T3duWTZoQ0EwdDRYWlBEd2dIa09kL2hxWTNNUjBUTFJWL0dkWE9UZlc1bndUb1BLMGtQU2pzd2F6SXc4a0o2Y2V3VC9JZDRjSUNpM3pHQm9FUk54ZENEblZaNXRxUnpYWUZia0dkbis5ZGhkWVU0Q2Q0YU9vK0tiZGtUVm9jbGExUmQ3N3Qzbnl5VTFYRnVUMFZnRnBXMlREbFY5TW9sZEFzaWxaSDB0UEZjam1UUHFzQ0U2NGRpakovVW9rZG9sUkNqZ2ZmNGlVR2dsUTVUN05rbTFlTE83K2FyVWVtTFBqVWJCdEVIb05Cd2dkWk1vMHFkdS9KQUJ6ekhGUVgyamVtRnFBTTlXa2ExQTRhWHJuUlU4b00rOHhacWF0RjZMb2lFQ0VVQTdVWTVNODJyd25UZksvemRza1lJSDRsUmJTc2FqQzJZVmN2ekRaYk1pMkJUbTFncCtweW5FVzdZcDRxa1ZaTFd0NmNKM0EyaXkvNjFJUWRibXdsQlNQRStpcGRrS0dzYlpKNytBWkN2R3lkM1liSU50U1FSNzRBd3AxOWhzOHdURkRFNlJNNXV1TFpJSlh1YVBrT1dYMUd0VmpOWityZlBRdDhJeG9rYXRFNU5pelVtTTIyRlU3RndwYzFTOWZqK292RU5RR3pUMnljdG9PWk5sQWJleXpVZ3VteWNBdHFnc2FXRXY1enpvcGl6ekpEUXord3VDbEdFaC80QUpCOUJhalkzNVJ0WmlUN1ZGb0JKeEd2ZDlYVndJY0FXRVJ1UzMrK1NtQklWWWZhNDFPamRtV05qSitQUDhhQ1gzbVNrYnpMeXVkYzVzZEZDbEtHRmQ3Y3A5MC9XWWNaVUpuTkYzcy80cWxhTUFhOHNsK2FxS3lNMndHa3M4MTlQTURkZDRwaWMraElrZUlEMFVrOGVJY0YxcisvbFBna2VIc3BwUkxQaEh5VzNaOVE3SzlXTzJVSGxLSmpTeGt6Ylh4NzR6K3ZLK2djRDB3ajVzOVpPaHlQcGlpa2dCWEpuMUJ0ZFJCSW12ZmRTcGpsL0V5MFFLeWZHT3RpRjFXYy9lS21MK29CQVA3bDZ5RFhFQlhtdU5rNmhvdi9FZnorZEkydUF5QVZLcnJLSU1GZDV4OHRZcUpyTWdFeDBIcDRYd2dERG8rYWNUb00yRlFFUU1PandmU2gwS082b0kwUDhwR0pocm9wTWVMaFdwS3piRklMQjAyVEdQWkRtTGNCeGRmQjBjZ043OU9qaDR1My9TMkQ3V3R4YktOS3g5dmZLaVlwMFE2N2QzOXE1NXp4azVSUzcyODJ2ZE9jMm1QS1U0MnFuVFhyb0UxNk9vOFdaWVhEdU1DR3NXbVlHa0d3QzROaE9kU0oxUVVINkVOZjVjWkR5ZWRTOGpRUHRHMjBQTXA1OGdmQjlud3N2YTJBcTQvVkFvZlY1czlhOHJ2aGtZKzF5S2puUkJiWWY5T2NIbktrSlAxc3V1NVJvWUVNT3FOVDAwblR5RG9hSzczWloxMlFWc0JMVERvWStwWWoxSTNHQkpMeWdOQUE4KzlRZHBMdWxKeGxnQmM2SHB1TTZZV3RWdHljd3VOb0c1WERqcnU5c0RLVnRCcXh2WTlvbEJNN0hFZk10SHg0Wm1tUXRZSjBOOWUwZC9JU1ZEdlB0bCsvQWlHSEtweWNCY3MveU9SU20zTVQ3TjVBYzA2ZkN3SkV0bjkwV1RKUERNcFp5UTBwWER1ZkZZcHRyM1BBaDlKVDRyYWwxeWNVL2ZxMEJZQVJMdUNySStuTWc0bHVJdWJtU1BnYjY3N1lYOVhUNmtobTVnOC9WSHQrMEk2RVk1enBZUVhqUGdaaUFWR3ZQYzRvbEtYMzVMMDU1TlQrUjRsbHZjL0Y2WkFWVGZDbDhVSGhYTWNxbk9FcFFZVEVlTzNwMXFvWkhBYTB0eEUyWE43eTJkRk83dXU2WnNrSnNhc1JBb3YrRFFHVWh5eVFGbENEbmpYMFdqZm1xZTk1YmJvV256eFJVeDk5N2FISkEvUTQ1WUZEYTczckIvRmRhc1JpVlVJWGJzUjJEQ2FqRkJVc2Q4ZkRZcmZmRU9VTXQ5ZDd1SVRGSzNuRGVOL1RyZ3F3dVhxTUJUWlpObUZ3U0RwWkxvMVY5TnQrVUg2cWVZekx1YndOUCtabmJBZTFTZzdIOVRiL1ZBdU5ua09hR3l2NVZrMncwZDJGNjVmQlQ5dTRmclAzeWh4SmYyU1QxSUMzWjBMV3VqbU9QUmN0aTNEdDdBL21BcE5ZUk9uWjJCemFvZGxKaVZGUjhLL2VUZFlNMjFtcTQ0VXBmZTdwRFpOelk0WTVmc3QzbktpTUpiQXZES0I0SW1UczFjY1FaTXhISmRTSEJRQldEek81aWNzbG9ORk9BQlR2VHdaUm5RSzNMb2RUWmc0TTdpRWE1QWh6b1FZMnNpemM4dTFhVExxbU4vMmxqVW5KblFGY3BKMU8rVEFHNm5IaU1Xc1NaTlNZekNvNlhWV1Bpd2Q5UTZneW1xQmg4U3hGUjU2QXNVa1FncWU2eE5KZFVDT0c4ellTN0hHL1h3STNOK3ZHMEx3RGZJRW5vUHN6SkR2UjVLZnlFSTJ5SlV3azByeEliclJmaEZsTjREYm9tZFFBOTkzS3I1N1JNNTI5dXd1NWF4Zk9CeTR2cFo5QjlKMzRORVY1bGU2RXN6OGtkeHZ1RzZDc0ErVWdGdFlzNCtQUkF1eitJRFNQaEI1NGFqUTVCaitiMU92b0hvS3VBcmI4eUh5ZEtTOXozd0o5Ylp2aVN3SDhTVmNrSW5lbXoxN25WYWQ3N2dDVlJyOEJsbVBCUk5ycUQraW5LdE9WZGtGTVc2TldGak9KeVFuUjI0VUFITW5LUFEzQnhxZ3M5V0dIRnlaYmkwZWt5d2Z6M3pxVG9jQ1ZCdmJtcldBVkw1NnRCcVR5VThZYlRpdCtZZVptVTNrR0ZYK2o5bUx5Y0VNQWJ4ZThxL2txU0k5YTYwWmN0R2VBcnRxZHliaWFyZjVMeFY5NUNldjkvci9hSmlOMyt3dnJZSEJjbkc4dXRrZ3YwOEtFVmF6OVR3ekRsMWh4b3Fvc0RMZkVMbi83eEFOUGtJU0VGaEpmQ3ZtQkhJdUUwaE93eHBzNG03M3A3d2ZUK09LSXVveWpNMHlZVG9aaDMvdnczeVFxRzY0WGRQaDhjTWZyK2dlNFhBc0l4STlLaXo1UG93OTUyWVIrUDhtYjhSVjJ4eSswdDlkenl0WnhsUDloYVRFK2MwYVcxdmFjeWRWMGEwWGNYTnRJVkU2dVlvb2lQRnFBdFp2bnhVaEtYU2tJZXArRitNL2NsOHo3OVZsTHZnYkFDSzNxT0NrSi9jNVpsV1NTMHdkRVhIcGFUVzVpOHZidmJyN2hrMDlKVm9Td0NWRVplVDVVSTdSNnZmZmszSFpTVmNqdUtvUkd5UVdPNGNDMGRtdWNSRHp6MmF4cll5QnNONkxUc3A0V3ArVjY0K280VFpSbkhkNTQrR2Z4bks1TUdLdEU5Yzd2bkd4cVpoOEJ2YmdCeUxKVGFZdUR3ZVJ4RjNMc2NRNGxMRmJDV2xRV0lMcjNGOUtjaksxdisySXUrNUV3NU93ZTNzZERnMEgwZ2swcnpyNDNLT2RTK212L2NOdFNEcGtwcHV2aE5zM3dFaUlRQ05qdUhUcjNObEJIT0tpL3NLMXZZM1pwajk4WURjNGcyVU5BS3czQnFKN0lZc0E3QzVDUUFpVi9BekVSMGFVcFRjUkhzVWpSeGtGMEMyNFZyckxtMDVhQTFPMTFVTk54V1NmS0RNU2xIY1d6QjlYZkpMR01qRjNxRU1jSjFHNWZUSXRMREtSZGk1L2Fvd1BIVHczcXBLU3RiWWRZY1RRLzVWSndlWldEOFpWeVp0ai9RZ0Rra1lOckhhVHIxQW1tSHFRRThNWGNQYW1ndTRaTlo5M1FEb2tBbW03RG8yN1g2RXhJb3Y2ajVJQzZIQ2NMY0oxUWdXY1pHSDJibVRIZS92M2lNS21Cc3Uyc2xUb0dUTGU3SnNiY283Zkl0Qys1ek95a3QyTGJIOVY5QWhBNlFFTEttUmk2L3I5bGRnRU5QbEc5aHZQMzVWNmhLdDBVMTMyV1pKendjbEdsWnIrMko1cHpDaDZ4aWNBTFVFUjdxU3VOUGhCSXZ3cXVsVGdHaVJTVWFSMHpqSVFtWC9qcVFaSEpNQUx3SFh5cE5VeXVWNkgxdTZPNnV3MW1pQkM1cUh6VHZsZnBiaHBlTmJ3TGRtcmNTN09CdTJmL2Z1WVY1KzRNOTFLZ1M4M3FZdFlNd1gwY01FUG1TTlRVRGl4UHdIblZUUU5CQmxVeXF3VVhQaVFWTEhscXZpdzR4RnlBaTFVTzg2cjQwWEdaaDlIQkdXUFFwSjdmOTBleHY5TzhoaU92K05xRXFaeUlUZmRDVGkrK1RZa0RVYkcyakRseTl4TEMxaVVXU2lGUEdwQzM0S01OL0ZYWHNyRkF2amtoTWh2d29nUFYvT01vUUhUaDRIeTI0cmlNSTE4YkNveDFuUW1ab0wwRUNqOWpMUkVLTy9QeG84cnZPWVF6Y3pKdXhSQlJwRnNRZVk0U09Sa3h1WGxQTHN5TFZpb3FwcG4rTUVMV1ZqUFBaTG4wMEtRSHRSSVlhei80cmo4MVBjWGUyMCtIRnZ0K0FZei9UY2ZzbHA2U2NqQm5CMVdwTTRjcVJwNGM2Z3lvS2tvcFpqdU8xRFRzQkVxdW1uQXZSRDlQYVZNS2JqUWdTSEdFMGRqQlF1Tk5IQy9yR0o2MlBqeE9tMzdqRkNYL2hjRHdJNEtHUDJwWW13bVFkK3N4L2xBY1pvQmZXQVBXVjRCajNLNEM3dlRqOUxtdFhQV0dOczl6YktoY2ZEQWlyVXRPWkxHQm9NUWdKMU1UNGlKMy9ET3g2d0VTaERwQVlrdkR4bGszRFBXVjFWLzFwYVc1ZGpvR084N3NWQk11aHhUYms2NTdSTXRuckZtcW5PQTFzd2Z3aDFocDlQQUpWTkFaK3RrWHVFc3UvenVFS3E2WlltamNQL0tDT3M2UTRpdXhseFpzUVZZbXJzTVdNcjBVWHNLaWVxakVLQ2FKQW0vdFVxVXRQTVpISDhUTkU4MTVRZGQ5eVZIdkJISm5BeW5GbW9BR0dwbjdqRGFUNzM2bzAyRXpkTlFXb01HMmdENVlwK09pY2wwb05taC9BbVQ4Zmw2YkY2OXJjd0NXRm00V0ZXZU5xbVJNWklVY3FtaHhlTWVWNS9MRUliVzlQR1dtb09tTkZYU2hYTzdKZEpJd2V4eC8rb1gvaFROVjI0bTFyQ3R2SGx6d1JySG9HeHNFN21wcE5ZTk8wV09XQW15NzVkL2FPaUZ6M05abUc0N3ZnYlNQTURLYjNqcktCQzUydEdjdnNwU0lLZ01nVmhlTmV0RUFGWG5HYm9KS0xRcmRzQTFXY2FwT2N1ckxRZmFVTnl6NWNVUUR3V1FFRHNZVUlnYWsxSkl0YjNYeXp5NHcvTld1cGtPU1BCZVo3dWp6OHhlY1h5alRPRHFidkdPTU50L0toTk9xeHpkbktYcUxiWFVVdFZnUWlwblVzZTU2Q0tvQUorQkIxcFJ4TVdHRFUva3hNT1NXS2lldlF2SmNxV3NtUDUyTk9iRlZWOG9KdWphb3UybU93K3lrQndCV1ZvYnVCUlA4Y1JQd2dBbUFjYUorZG9JMlNzUkovYWZZQzR5c1VMRmVXdzJYV2E3Y01nR3FXdm5FNkg0MStJNitRR2szbDRITVRZS2JveGtGSFFWRmVoMlVNSkxCWmFIQi9Dc3M1T0dRTDRkWnlHdHlkOFcrRUc0ZFp3UGpJWlRNbFBtajFhZEV2TThjZDR1ck9WY05VUHkvOUk4Z3BMMHRwd1cva0VNaUpBUmVmOHR0T2piQ0h4ZSszdzlENENiaVZteGt2QTFWUXpOZXV0U0R2b0VMTkhueXZ6b0s1YUdWck9Kd2JpVWxlQThqV21FTDNpTnVKYlJ1UTNxNVlPeWRkVHNqWUpYQ1IwYzI5bUZYdms2NFNEMm5FS3V0bXBZTXZ3WFNUSXVJTEtJekg0Q0FnSUNBZ0lDQTgzMi9RNzMyL1ZTWDIvYUQvdjliOC84SDJGZDl2MlMvNy9mSC9oNzcvTjl2MFN2OFBxWHI3ZnI1YjdQc3o5KzM3RDc5bjJoSDdmZjQvWjcvVGgvWjd6WDdmcGJyNnZySnYyZlh6NzlYMVZQNnZySmYxZTNiK3IyOWdOaUF0TTZRb1BxenRkQlB5ejB1T3QwWjZRVjVLM2szTmRkS0Q1ejRvc094dkMrYjRsaWVXbkR2cGJ2cCt5RzdmUVcvTXo4R1l1djY4aE92SjJJL1JYNkk2UkczZDIrdzVoaE45MUtnR0lxNTZISFErTU13d3RhNy9HR2pQTzloNWtEdkJ3N0pUSGxrMlpCejl4TVJBaDh6MGpyMTFuL1JVR0hJL3lVV0VCVjBvbVNYM1JWQVhrZnZkYjVGMDZoNkMxSmYrcHhvVEREbjJuaS9IYUZTWVdwRmJtSDRDbWF2ZElsOVN6TmxZR2hlVkFTdDQrY3ZEdHQwMTc2NDVYNkZ2cHpYekU3UDF1N3Y0Q0ZwaHRNVVhSa0FTRzBBMVNoa3N0ZTI1bjJPZ2ZTalhQZHpVNis1RHFxdkYyNXpBaFpFWktYamc2TjZWQjJZNVlrZWt4OTVBVnRWSERudTdDUDJmTjVzZnIxcTI2RkFaVHpMdmE1bUtiTHpFMzVsYzBWcnNJaGNqVEZoeVB0cFRPYmsrS1lpZlNram1uR0lCa0xzQTM5N0Mzek1SME80ckxSVEVodGNOdHU2VnZWOE8vaGRPTWdCQmFjY2t1d3RDQmx0STE1RTBRQitPZlhaTUZ6cVIzNCt0N3pvSG1IRDZUZWViOUxpcWZrd3RtVXY5R2U2Um90czliK2d5ZFlrSzdpR2VHNVE3Sk1nTFJhZWltYlRaZkVlKzdaeXdTc28rQ1F4ZkxSL003VmtEczNHQ0tSaUpRS0hvM3ppczdFM2tPcjVMWFhBRGtBVW56UHhCVktiUDNMWDIxZnlTNU4zdXJqMXhTZElJZWxZRXRnaEl6TnBwYnBQQ0VDdnFkekFoUjE3bGVzLzZpUW1CeXlneE5wRmt1d0hhUzA5dXVJU242U1p6cDlrZ1pqbjg1R2dkTUkxV0FUWURhblZWNDFrbktRTzVodzErVndMNTM2N21sTXQzQ09UdUpaOUFjekIzbjMyWXhKbVNTZXdyNW51V2JGVGtrcWUwRXpJNk4rQTUvSSswNmwrREMrNUFxTjU4WTI3eWVBeFJJTGhlU0krVzd6Rk5Rd2FaZVlQN0RlL0RIVjFlYldPMFQvUC80UzhEV1BwQmF1M2NTeDM3elN4Mk1SZnIxNVVrQkI2U0YzaGdIQ0pFVlhFaUVabDByRzQ4ZzhKRENUczllZnFRaWgzSzVVZ29kMDY4cnJZVHJvZURwSkQ0TEo4TGpTTzBpd0tpQjh3c2lsbDkyMElkZFNPaktTUEt0TGpMTjRsNGhpYTRBVC9lNS9VNW1YN3hSa1M5WXBicTlFcjdRcE8ydWpxUVV3cXNmUGxrYXBBUEU3WWRNWjJMNldubUl0dzRCY2hQTWU0b04xQS94ZGFWbjJIbjdCT3Q0R25OZTRVN0RXV094M0tiWFJua0RrTWFuRzRXVWN3bmxka1VMMFdsNzRNSUR3NTh0MHJqOHJLRVBMdzVmK0M3VHdxcXEyYVZYSmg5YWthN0FUUXVsU1hYN0tYTnZ0R1JORGFERnpPSmxjYStkUzAvMitZeWhtV0IyL3MzQ25pYnVET2FmSjE5eCtsVnp5QUdHcUZvUVFFNzRWcTlJaFh0eUJZcmpOcXRRR0xIaGg0eTJjTmZvUXJlMzYwVnhEcHg2amJrd0FobFpzOXRjVnFhaXh1OG1zSTBKZE40VldMMjlMYi9xUnFST1ZiZ20zMWdEamdBOHArWmx3eUpBbGR0ZVh0YjhPZStyZUgwNkZNQW4rWld0dlVRb0Rpa2cyRHhTSElpMFNxMFRaUFQvcURZK3FSNFhUcHlYWkN2WEllMjZJZ0tvMUVubHZaM0doZjlhdHdQZkt6RUdWeUMvWU12QWVZSDBwbTl1TjAxeFpkYUsvWWFqTGJOL2lvcnNWRE9aazJmNHd0cmliM3YvTytoWVMvdW52U0o4LzJQbmxPNnZLRXBmb1EySWE3Y2pCcFBDckxxTzJtbTZiOE9hczdqSncxeHVkSnlrdElNZU9mQXEvdzh6TCt5Rkd1YlF3UkRtUGJuSkxqbVI5UnJqTitydHJNcGhQdVZlNWVkUzhPNEZPN0tDQ0VLbVNUSWZhUk8xT1Rob2hBT0pGUGV1SE9wTGNDVTE5UjluQWJoQWQvT0w0YmptYkZyeHp0ZDYvYnkrUDRsNWhDbWlTY3lmdUJSeUxWK01lemR3MzJsSnBMR1BodzZraUx2dUhJNFZEZW93TEJqZnZYSTRmcTBiSXY1cFJrb2VNOEtDb2tsK3pnUkYvQ3dLdXZSNjl4U3g0NGpyWDlBWSthR0lKMURJMlZDOW4yU0tWTnl5V3NzSFhPdTVLQzQvczllRGt5TXVHejFnNE9Jc2h4NmttYzFqdlRoa2EwdmxLRC9ycVFNWnJPellQVXVhWTRxZC8wQmZPU2ZlOENwVzVoVkdNM3ArTVVPdVY3OGF6Rm1PTTJnU2VqcE0rZnhSeStWMnFCMERIdkwzWEFOcnNaKzk5ZFkrY0dwU1pVR3hUNE5kK2s1dk43blcyTVZjUWhZMUFNb1Q5Zk4wV1BZaVhDZStaU1dnRGthdnNWZWd2NEVZL0VoZTdkMmpqVjV3eVNKOFVwM296YThYS3ZKVnRSd3RjeXlSNkptS0RyTDFDcCtJK2d5aWJEM2MzMGJpZVlzNDExcytkNjF6ZTZxTHVwSStMbWZTdGl4bkZoNzQ4U3RxRVorTVdvNy9WQVZSMHErNGJOTGpFd0llMEJRWGt0L3J2NC9saWdkWjhob0Z2Qzd3cDh4SVZSUEhPaTUyNHR6WVBZcTUzenpiODhYTGxBcmdlbEd6aFhtUS9KampTclhKYmFCMWFIZyt2dWNYeGs4ak1tTUVOeVBWNFFnWFpCRHhZTWxsWW0vb0pBdkk5VmFNSU1jenNTN3puMExaMzh6VkY4RWtqY3F1MUsrenhDWStEaWZ6aDVnUGdYeC9ndk1hc2tuTXVURklxaWFYbkw3L2d1WUhib09kZml4MTAwNmZ5RmJ2dzlBZWJGUGpWeWlEMnZGYkl0NU9uS0pmeXZ3djdpci9CZ3Bmai9WT1BTSTViRGw3dEFuKzEvamJWR1JNTWV2cGovTW1mTUNUY2E3RmR5R0crSWJOciswUnFHWUdlYWRucHJGNk1ZdmI4QlQ1NUVydVJwQ093d1dqK1EveThCNFFyWUorWE93VkVSZm9RMm1ZMVEzYmg4bWJmYU1ScTNqMTVKNFJ4U092OHFXQ0o3SXBvRWFaZkloRG5raXUvT1ZjcGtqOFFUcGdONTFXRmJEeFM3TmNwN2dJQ3hTQTRTUnBTeW1NYm5tSEZvWno0VlgrRnlXcFl0eGlua3BBb3VGZ3QzTlBUMUtwYWhOaEk4eFBkbDc3RFZjSFBCZVBtaVBwaVVlTXFVeFlFYW1yWC9MVi9XOXo2a3p3aTMwdVIrbzZ6TEtWa1VFMDhBODhjanNyL290YW1OaXpkY0x5cnZDS0N3QTVpd2dpVTg3WmV4WkQreDI2TUFsNG02Mmd2SjhyMHRMTzBFRjg4RXZBdTNPVGM0ajhLSzNhaUdPM0VnNEFTRTJyU3dGNkl1dllyU2VSdjVrWC9SUHorc2Vtenhhc0x2cFptZFR3RTVSVURKaXVtY054bUJzdDg2T0FTT09hOGlpOWdwSEx6MU9hQXJKbHBQbVliellEUEhEZEZna09iWWhFeXFaVVBMSzhZdksxbjljZlhveWl4OHdKbTVQdXJtWGdxeUcvb3hwWG1QNlEreVViQnI0L0pwdS9GU3FTWkczMk16MmM2VzBSZkpvZGR4WjlXOXdaZ0ZxYklSZWI5V2kwZkEzVTlhcFgvQXVpakltUFpnMHI1MmxXS1QrRlhVT0xtWnRKOW5RL05DcStYY1RVV0ZYcS9MMDhpcnlCWXA1QzRzVGFUdTE2R2dUeGpEcjRPUy9pQU1sM080N1hIaDRDODhwU0luRUlZcXQrZ29FN0lNSlFEa1pvd3pmYUxsZGZBYWkxVElSSng4SzNyVkUyanZGcTJzMFNzZmpVNTJqUldsR2ovQzNIN25ZWUlRL3cybHFWYmVyTGNOMmpiZjhzaGdvQ2tDTlB5SGJxa1MraG54QVNmb0NOOVpOUFEzRTRUa0dzV09GS0RZVDZmV2NKNkl2eUhabUF2OUlXeFFZU2NIVmZJeEZydVQ5b3RZVFZlaGtzSDFrMllqeG85RC90eU0wSkpZOXlmNzVnTkZrWi9keUo0bmh2ZE1mbW9CMnM5aGU0WmVwZk9DcHlid2ltRFdFd0ZxMVkwbEhaMmt1c2ZhdjRzbTBTTDB4NDhDa1NHRXNmZG9xTVhJTTlJUkwvUWk3SVcveEJiQ0VOSSt4eTZWdjcydXF2Nll3SXJncVU5OGl4cGJveTBwZXhseW51SEZwMklORmtBcUVCTy9pU2lPYnhQemtrTjlwUkthN0VWbmU4VUFuMVpoRHlQK2I2UUdkc1BXdkVpYUlmcWkrVHBrUnlvM09vSXljQzArVVA4aWVoR2J6SjVzM3NLejBGeit1ZGNUNDYwTFZxZnVSMVZYTEJoODExL0NHb0Z3S2pzSmNzMmltVko0NUI5OWQ1dWc2SC9iclVSdUFibWU1NGFET2N3Mld6eTBvZGlYcXlzTzIrUDhXTXBVV0RPSWZKdmpOc1pPZVk4TTFBRjFib2xtOS9md00vbnFFQ0ZEWS82TU90YVo2MGRoS2x4dllrVk5RVTg1Ti9VWmNmVzVvZUdzYmRmUmVTYzhnajNlaWVBbElYVmZ0VVZQRkc2RTlxVTczLzUrWkhoZTk4bWw1dGtrQmVpUXN1dmdyaUN4c2RnZ0tYTkRWazZFdXNmdWJMZG9UQzg4NXc2aUZXQ0JaaVB3ZWwvZ0dqVHhHd1pRN29NaXI2a3NmY1F2VERGOXNSOFZ4OFdiQlkvejBkcW9ncEhkK0RWZzlSYjRYY0NCQmhyUEF3RGFoY3lxZ0pVM0NDQUNDOFR1OGVzSElqYnZ4aXdVTUl2VzNsUU9oRDJBbGdhMG40R1kvVFFaR3ZocGZuWHgwbGNiMTEramFrOU53ZGQzQzI4K3hFYUxydFBrRDRYMzRlVE02YWQ5T1lCZStBSDVXaEp4WnpzQ0Z2bktyVCtySzM4RCsrdkdrNXl5N01raVJTUmYrUlgrbG5OWi9KV0NXNnJwbWtEVzBzTXVISGVScmVsd2NxMFV4cVZIS1h3WlJESVBWZzhHQlE5eXRSd2NsQTA5Q1FyWGtTYjQwKzVhWGI0SXpvZ3F2NTE5YUxOUHh2amNCSzRQdzFYaGxmNjhQb2RUNFpEQTFYVWRPaE1tRmY0anBWTzlCenJqT2ZsS3QwQU9GeTFIMjZXM0lVc1VQTjFJQ0NoYjdwVllzeGUxR2MySHFXSjJNSGUyUC9oRnIzaHVBUkE0cWo1dllTQ0pORGFVQm5pZTg0RHpBT28za3FzK0VoRk84L2c3b2VXcmpaSU81anB5MndxYXU0MFg1V0kvN3B2cHZMS2wyQkNWbFRNSUJ6aGJ0dzNUc3JGeUpIUUcrTWdaSXlHNWhkcmwrMG83RGl6djdsVU1XVnJkbUR0NnJVUEZhb2JWNG9RRUQzc01IMXJRMVd6MUUrWWE2NkZEWXE3UWVPcU1PeUdKSlg5UE56SlNYVTBNT2IwSHF2Mi92cEpDblB0cTI4ZCtJZUw3ZUFCbjREZENZb0pEejd0YVNpTlJXVXYvUVRKWFhVdWRXaTY5VGw5MHpzZm9Ob1RqUWg4bWtBdStiNWtibHF5MkR3MXk0aTA4TWxwY1lOeDd0LzhiWStsS3cyR1JBd3hHem5rRTdQRG5Fell3d3FicUZOQVFyRllKQ0dwYUVuS00yeS8xbWdFd0s4akN0MklWZmdWc3A3UzVMK0pyUzg1Q2lwZ0xtNVpjREtWYXNIWVRVRExRU3ZnUXFZM2Jpd0V2UTlseFhzWnZWdnpSUTNwWXFQcjcxT01iQUpGSjBhWUQ3bVhzZWMwcTZWWTQ5Yk40eHd1ZGFqcWpCSnVtd3hLdCtnS2k1OEFOalU4b2pDUy9qL004elF4TUpvdi9NamVyYXdUL0RCR1ExVUU2c0tTdTc1NDk2aG8wRmc2NDRYbVhkUU1jOVhYOEtuVEZKdlhPMG81bVQyU3NzTGNkWXJTakZLckhLM3pST2xBTDRWblE2MFBZNmZMUjF1VDNSSXcwcDVYTTF5aUJxY09MR0o2U1hBRzdTOUhsM3BiR2RBZUF3YkdCWDVrb0F2UWNqY2YyTTMrakRxZG01czZDRHpxT21OcEczWXZDWkNtbHJLZmZvYi83eEFkK0kwSE51Smt6R2ZaY3Y0cFVCQjZ3YTdoMm9kdXdBaG12S0RoY3VscER6MUhpbjFkOE9UM0psNEVKN0x2aEwrUWdCeGlpNHhxeG1MZHMrc1d1UmJjSy94NXIwaEovczJabHcvTzZZL0VJaExLVVI0TXhtYXJjMDV4Tk1XYWphNlMzbUdhTXFwaExpZnZFczkvdmNnV2VESXI3SzFYUWIyVUw0ejhBelpuU2dvb1k3cDVTMGFoaUNwd010WVk3UUJKNm5RMFltYVhhM3NLRWVNRUp6VzAzcWROazFGYXQveW5iZ2RKcnZwVk5tUGZpR2VCUEQxbEoxay94dkJxdGIzYzQ1TG1Qa3B4Q2VISjJ3ZnAvVU5PK0dNMU5oak1DQlg2aGFCV2ozMlFzdUtqREc0R2Ftb0RVOXc1c3ZFK251VVk4d3pIWnZ3QWJvSExLdVRRL0FiZlZJVitlUlNiTW5xaFdZajBqZXlaMUhsRW9EMnhvWFFVaWtMZjFJOUFuYlcwMkZYR20xYlZkb1hKZ2ZKNWZ0TnRRbDFjM005K0RMMWxDYTVMNlVkUDZRTytabDRjbG4yczUxNFIvdFJHQ05QSm05QUVjMzVrQjV0OUMxblZmL3ZlaVY0Y1g3Y0s3SFV0TUF6NThnZHUxaFZaZldvZW9VM25qbHdmbmlEUHpCR0x0QUF4eXlDUDBuYmViSkdWcXlaL29qTWpzV3l3SXE3a2Jwa0ZVd2duemtuOXpzRlZpTGkzekpZNFhUMXQvRTFna2V6Z0x3c0QwalhYUkFjUkZnZkt1R2xpNkxNa1JaVG56OG56N29UY0JiWlJEWnM3OHdITktucmhRa0htd0YwekZvVDYvRkRZSE9mcVNEbThoNkZVUjQrTzNZTnF1cVYyVzNNZHBDVC9QbnJvaWhxL25NdmVnT3FNWjJKOXFvbHF6ZnoyTjYzNGtoSjVNTnRxa2FGdFhmZnllR0toV21TT1k2MlJhbGRzRnkrNWNYeGEvQ3VFMDQ0YXA2TTUxenVuQVdDYTRNaDgwb1dQeFV0cUowTEVXWXhJOUhMdEs2cytOLzNhODBNQTZVUWRBbUg0eFZaVnJEa1VTME9aV2g0QUNoK1dpbE9BRnFkTFhGdzVrNFlyc2trY25KRTNVYmt3UHNMTXF1cnFpNTFOaWNyQytXUldRRkV0OFdaUGlwVUxQWENQK2g1Z3EzZzlwS0pBZTFvbzM1UUJjMVFwb0RQWHBWSlNjU0VqOVgvWC9IZUo4b0Jkd0pYYk1xanVSNUdUSlZaWkxBb1NuVEtJZHZQckNvbjlxTFNmcmVFR0pmM2hoaG5PZ0NvN0lya0ZpNitjV2s3RFdSbnBWK0VDVE9HS2hVSjVrQ29teUMxTTIva2hwUnlxZDlmZEs3TkxWc0F6dTVoNnlFSExyeFhPNGxLNFgxS1Z4NGtNNWhiL1Z2UFJldUg2MUxzSjlOaG83S3VDUXdjOVZOeWZxZkNjYm1tcUozWUwrWWhwWlVKSWRqdk9hWEpRQkxyMHZ1OHplZ2NDZHN0VEUrM3kzU1ZnZlp2d0hpTHk0d3kycGh1M0NQdFFsaVVDM0tDMlpUMlhacmxDV0Z4M0dTS2pKNjZNZzV3cnVkQ2pnNTQ0djhmYVFibFUwZ2NOOUZocE0xT1I0V1l1d1lDaGozMW51eFVJdXFUZzhGdytQWXNPc0xYU2kyc09XNHdnWm1XQ1FTejJaaHhxQjJLQzVJYXhTZldLMVJHaVdpNWg0QmtDUEpIaVRVb1BCaEhCeGRvT29qNEpaUEZuK1g0bXpBT0dmL2VTRUF1RXNObHNFZ2w0b05aSTNlSm5nV3FZZ3AydVdJTDYrSGNWc0t6MllmSzRWNEJVUXprLzNEQzlWSDZSK3gvV2xPQzVHT05qRUFaRUV6SnpGMmkrRFBSRkNadHAwbzQwbmRBb01mVTlPZm5jVm1qNGc2NHIreW1mWm9NSlFMMHhKOHBGcXlhc1UyNnptYUpOSUZmUUhRWkE5WTNZVkUvbGZXZWkyOGo3Q2RNc3FDR0QxeFNtQnpUVEViZWhFenliUzUyN3Vja3kzTG1Uc093d29CajN3TmRxRUJOcGQzK1dDbXNndW03b0tiR1REM0l4VEtXTWlSMTYzRkxmNzNnMEFoRTEvQUtDV1lHTDloZkRGWWUreGtFV2xiRGZHeTNlRHNhUjNiYkFNeFl1UXBKdXptbXhvM3F3eTBtdGp1Q2RCRkltVUJoeHNnRUQ1ZEI0ZlZjT1c5ZjFjVUU3OEp5dFBiUVJrYUZjMWwxSHc1Um1tVmJPZEdpNUxtSzYvUmVNMlBTRHd3YnJ3NTU2VjRFb0RNWmZBVjQ4SGh3Y3ZxVjVSSFNUQVdVRmlUVjJSeXZOd1hzV0RzMnJFYVBaaWZWUFBIVUFocEZWclRVbEJMRDgwUnk2SU9uV1hDWFlDZ1VCVmhZdUkxcHVjcm9La1dtbzI3ZVNoZk5UUkUrdXpYd0NMVTBIUFBSZ3R6YkVTVmFON2RzbXU4ZjJVeFg1TVJZTC9hdTdBUkNad045RVFXQmJQdGFER2V2ci9ZYjBOeC9acis5NTRDd0cwWVQ3Q1pHZVF4WiszeHFDVTdrcGhDOEpubXBSQ3gyRnNBOEkvUllrbHNOOTYyMnZoZEVyTEFUZUdOc3FoaWhYNXlLMmVyY2hUTEoyQmVmWGZiM0dpMUZuaU1sM0gzMngyY1lHNm9LN1IyaVFxMXFyRXhnRzJOUTZ3bnlNWXVEQ1dWVytOeThsMG5NS2NQTzVETk82Sk1hcWx4eXFUTFUvK01mSG80Um5NbldnZ2h1YXBDMDNaVkEyN2tBMGcvUjFoS091R0FWL1FadDZ0MUthRFBnVnY2eW80WnZMYngyN3FTYjN6V3FXMUNBbHlKS0wrbUZJMHp3K0NEZ3hVeElaSUdEQnhlY2dMM0NRdUE0VE5qUUdoRDc1VWxoYkFob3UyOTJMWHlwSkZYR2FoL3c0czNENzJtLzU0ZXppSmxTemNrbkJCdVV5NlhRUUpKeGxVWURRZmFZN3ZhZmd4eVAzeDZzWXpxWkdOcEMzdUpmTE9tWW5NY3NEWFRodG9KaDRSYlhFS2x5Tkl1RGZkay9iVVNteEFuZjJJMGFyS3NtNEhQam9rcjMzcVVwZW11aGxrZzVxMGtzdkU5MkhZZnBPeVgveUVQelQyR2d2K2h6TGxRZCtCTFF1U2txZHVrTTlPeFFEejhsYmUvMXp6TFFqT1dnOHZMUWJOczB2WGJsSmx2T1dDQzdncXhIbWRXaEZROGVjQ2xTUHJVVHMyblh2d3NyVTc4YTdTUHo5cnhxRXprZ3lvZ3NyN25OUGdpNTZrWSswWHJJWkwyOWV0NXVETHAzd2VOODhTQjdoVXBIcUhab0owT3FzRXBFSkc2UnJmd3d3eGNSVzBwUFFQSThLTWsxUEplRE9KNG51Sk9UYXNpMGNmZ3JRSlArak11YTZabDR5cy9YMm5VNXhHRjlLS1lrQ01CbTdzWlpWbEY1ZFdoQnZsaUdXYVl0Mms3ZG5iOHVZVHlZS0pXSlptYzhxcFZQcTFWTkhWTGVUSm1OMFlSamtmTU9RMU1JZ2wxVS9DZnhoWDZPNXBlSFQ2NS9xWmhvdVBkRTdIV09RUm53bEtYSDVJdHR3UWsxVUZoR3ZOZkNiWmY5dmFpdTVKMjhselA2Z2RxNkNqY1FrWXhjUkNsRURiZVlWYU94Sm1EOVBrcVgzQjZMblM1bStYbldvdFg4Y3hUQ1JSckpCYTArMzJYZzZMUGsxNXlYWjNtR1YrTTVENCtwOVRHNTQzSkxQQi9td2lsS0dJdkhZRFdNOXN6M3VDcEI3QUpSUmJNck96enBuZ2xIRTAzbHNIampYS1BBcjJRTkl5MExWTG5BR3FmaWFqb3JqVFRNYVRCMjJNak5rWVh0NmdTaEd5dFpZQ3o0T2MrbzRUa0ZHNkNwQkpOMU96U1dVNTFPODk2aTA1bUVDUG1zbktoQnZUQUdkck5sdnlFY1c3Qk53UVp0WWFkYmYySnArT0RMNGVNeTZrZERVUUlmcElheVNIbUx5SHNQT0FndFhsdFlWdGZyUElVOFBNaDMrK21QTEhCeUkzd1plREhQcGVSMUh3UkdSWUt3OTRwbW11a0JwRkk2YUdkSUsrNHZUekVOSDdLV2FKTmdySGpuKy9OR2ZJSkMwS2pGaG1QZEdWY2NwNVdrekZkYUFxeUg4V00zcGZMUGZpd2hNN05GUGZqVDMyUFZUaWFxTkIySFJnWEpEWFMwdTJVMk83TnpHMXVLNnI1RmFKZ1cremZwd1dBaC9IV0s0ZUI3eXlDYi9VK2g4d3R1NUNWSCs0SDQ3QWw4eldXSXZQMFFhTU4zNWRGNmJRa3V1TGM2Rng3TXJqZDQrY3JReUM0N0krUHNhSktjTXkxelNFQld4Z1pwWlM0MWlURFRBTVRqTXNUYkVUMTI4a3QxNmNnY2swY2R4eWk1WlRRZ3dGZ1dFQW1Oc1VoOHA3TllXclZoL2ZFb1ZMOHA1Z0ZBYStOYllCUWY0emI3ZGRla3ZUbFR4bWlFVlcvcmRORUhIbDBDY2ZsaDFqK2tVb090NG12NlMvVC9Gd3g4TWZSQ0llYUovbFJPei9ScE1OSkRNZXBhMGEyKy9TS2pJKzNzZ1p5T3pEWndMSDkxNnMzU2ZxU20vaGg1Njh2WVBJdlBEV25xYWZsd0hyeDN5Nm5uTVJWdDF0bjN4dDZNMGhaUFN5V3BEYm5OSzg1aUFVc2VVR1pTbEpRTTV2ZFc4WE83THV1NUxsUzdHeU8yTjBpeVk5UjlIdEMzWmszSXI5Q1lQOWdSRkhoOWFKUVVTSDh3VmZGQk80UGZzVXRrQ1ljQy94YldZSTNBYS9DSnNWSmcydGh4dGdZaEJZYSt2ZDJUSmlvQUFPb3h2SHRTakU2Zld0R2FsZ2VlckxKVHlETmdLSGZ2Y0l5NG9xZWlhR29yNWhseUhDcjRYUkdJYmhNSkh6V2V1WnFvMzBqSlByYmpMdW81ZThJQ1dFa2lxYmV4Z3ozWnpQekJ5NVpHQWE3M1cxQndpbDZXbHl5aDZpcDloWVNWRHArcFVuZHhzRUhSMWpIdlpzZmpyd1hzMVY5M2oycDlXd2pSejBVdCtobDN5b2lWanFydnZNeklTKzQ0Wk1kb2xxUXBmdnltVjFoejRKN0llcTcrcDdQelA2OVcwcWVEb2E0VWJZNStJcms2dERNMnptMGZNQ0MxV1RzN2N2SHVVd09MWlUzUHlicTZ1T3p4M1oyTGdDbDZ3SC9MZGdjdm84aUswNXJHMHNLOFlZWmd3YkhhWk1FbElicTJLUVpNd2VnczFVdTZ5TjVJRHZTL0c2d05uZ2U1K0UxZ3Y4V3dpUzRqWVAyM3BrMThDZUE1OVkzSGlFL0pHWDlDcEhNcnRiOWd4RXpVWmF2SmRjV2lQQXFFdTlHL1p4dkhWZDBPU3dBeS9ReTAyTFJaUTFIbWRNb005Wnhpa2NBd0QwdDNBbFYycXgvVVp6SHRZWXEwOFdydVY5dUVCS2FTNXFYeE9pOTRYZHZkRDVJNU5oZmdCN2srT09GanRBelRyY3d3QlRUT2djU0Qyci9YYzZZclRiRnRNU0pGcU9BZ1V1RkVXK0tDNmhVbWNpUVZXckl5RlRHcUpXcjFTN1RiTmtYZERFV1AxdDF3ME5rS1lWS3N0bldUMTJ6Q1k5L2Exc2hFeUVvOUhkaG5pdkN2R0VvY2Y0VnRQNm1rNkJKL1FwbnhLRkVzWEtRMEM5ZkZHc0sxMnVlNUtVUE9GYyt3K1BaYks5c2VoNFBSVUF4ekozMll0QXBVVENuN1hDdDU1bDRnU1V1QlYzS01qY3BwUFg2ejZ2TnJ0R2FzZjNEQ3BTUDNRZ1lsZFRSakNsWWdsK3g0azN2cFV1YVU0QVJzd1orZWU2Y2hPUE9SekRlY2ZyZUNRNnJWcjRjUjNIU3oyNkVqaDJ0OCtDTmdoRWZMc1ViQ0d6WnV5NFgzL2toMFNheWFxNFU0U1VpVE5GTTBWVzJWbkNBZDRBVFhkWWwxb1ZwQWYzbGRMd3VQV1Nmb2x6OXZRM1hNMGt4WTN6Z2tjSy9GdThCaXh4Rzc2VTVDbGdWS2FoUG5MYUVyNzk5bFpGMUwrbytCSEhGWDdSZ0NnYldiNngvaWkyM1JmR0Fra3B0L1dWWjU1MjUrU1ZjenBLYWNRZHFDdlpiQUJCbEJkdkp2aysvazlGcE5VUmZ2NmxNNzlIemdYQ2tQaE5XNzFJbGlqUXRvcDF1VHFZMU4vVkFmaWNVUlUyNEo5WDhVY1o5OEM0M0Vqc2VSZjduQ3ZtVTF6cktNek5sL0x0Q2IxbXF5RkE3VVkvRWtZbjNORTYwbzJxY0I2eVV1OTF6aUpVcVlsS3p6RE8vUnFId0Jpem1XNHpBTkhKamZ2Z001WFoxenBJRlFTdU5xaEFQSTlhQWhhUUp0TVpyOXBEc3U0eWEzLzdrQzVnRktmbkkyOGt0YTdaSVhXVHpMazFIKzdjRjZYNUxHNDNONG1hcWJkdEpnRjV3ZTQ4bitiVS9vQXUvWENEY25RV1RRQng5bUpHTHA2ZHFzNFJGT1d2U3pRalRlaEEvMHBjUnJvYXpIcFRUb05uSzhwVWdGd21SL0syTndXRTg4WitISVN1VXNhM1o4eDB5S1p6empuOGo1OHlQdVhXenorZDltdUJ5YmxJVks4cHdKN3J5MFA1dSt0Vy9WSGNDR25aR1BLOUtEbFpYNWpKdFpMRWxFbGVoS2Fsa3hlRHNMZnd1N25QMWY0YlNOcXlNcGtQQnFYMFJmYXdyTmxCTCtZZGRZS1RuYUVQYVAyVk4zbTJTZ0l1bmNmY2g4dUxGQlh0cGRaS0pESVFINUFnai8xNzFWSTdUcGh4WUhBUG96a0FlZjdmR3FKaDFESmdXWXJZMVlCNkhvWTgyQUd0TFNROFpZejd0V2FjL25mVWdUSDlFZXJIUW9hdFE4a2ZqZDlEVW9jUXhibzRKYWZCR2Rubjk1QXFHUTBFUEkzTmVKNFpyREVJS2tyQmRkV1ZkdjhJL3Z2eTA3TTVZWC9zVkVFendIZDRZanNaRU11akdPaEF1MDdtcUpYQWdSV3ZaVkNUK1hlMHNLRWhmL1dEb3pRUkFPV3NuaFdwTFBoSDl2akViQ1N3ZDNQa09YK0NkK2Zxd1RLRml5cHEvQXNuZXIzNlBKeG5JYy9QU1dKME5aeFZGdGEreTFoZU04ZUlqM1pGT0dveGN0Ty9KdFMzTUUrR2JrUnU1bmRncUYzNmhGYzIydTBmUkhXRVFyRzFGMkJ1SkZlbWN3ZDhqallwVVJzMnBSbUdBZHA5UHlvK1p2NkkrZ1dReDJoZC9kRjNLUEM5bzdERTZ6QUd3c0pETXhMQ3E0Qk9DaEhEN3lHdG5mU0pKS1loL0xkdzRjSWluL1J1TjR2VzVCaWJUdTliVXQxRWUwc1ZGeEgwdzl2UHhheHNHUmhVQmFuRTU5NTZTeS91S3JzVGpwODR4SDZheDNWakpvNG5DeGU0V1E3YWVmVW52NnpSQkhCWnIrNXlVR0traEdzb1ZUTzZYNDFDOUNXazVCa21udUF4YWhkU2psdHRzQjhxZDVLUXVqRHZkUElGS25ob0U0OG1qWDkzWGpFSXROV3Jkam5zbytoVS9mN09VcE9XZWx2alBMalBHdVRlUVFoVGRqOEtRUnlmcnlYWDAzTk5lTkZLMGVWVkNGSFJuQ3p0TytPOVlhNFVyQnVseThiUi80WE1EamE2SjNHZXBJQUp1ZjkyZE82ekR3VXo5UVpxaVkzVWdqZGljMElPNTFGNUxpY0k1RERFNUxKSkI1WWI3Wk5rNG12NFFpbjBlKzUyYUtQUkowa2Ixb3BsMkxkODI3aGVqamM1T1MwaUVBUFhlVGI1Zk1xMXcrNkV2N2NKN1VEOHduTDZKT0lMbUp6cjAvdzJQUlY3VFRjcmx5RXM3ckkxbERqRVNTbFJkNHJ5cHI3VUVJWUV1NkVCdllLQU5zU1NpbFBvQ1ZKMktIVW1oSWw3aGNTT1l3SU03QkNodTF5aXBWckRqUldUYWcrNUZSUmxQWVBQQ09ibFdERHZMdmZ1YmUvMHNpVi8yQnRBL3hEYTVNeitLYm9jRGhBZHZxVE1WVUlEeEJrRW5XMHVoYStlVHpWcTFteGowTFdha2EyRDREVTU4SEgxaUVoWUJoYkRiUlR3c05yWExxVUhHK050SlRJOTZlc1hLcHVlSm5nNXRuYjV6R0UwbnZvRlgzNVU3TjZUeC8rQllzMFZNRjgzdGl0TjRvK3VHNzg1cElJQW5xd1lmK2hkWjR2VnN1Rm9zMjFQZHRzM0tQZXBUN2t6STBtaGU5WWF1OG11bWh1a2V2eU85b244TG94dENFQU5lcmcyTmlKVDY5QTJJUHBYWmpQaHpuYWxpSnVvSkhOd3NFd1ROS08wcjNxR0ljTWM5RzI0eVdZOGI1QVczbkljb0d5NGZZdGdkRTRra0lpMG12eUlIZWRrbWJBMy8wSDVvbXJDZTZtanNWQ01TbWNmd2E0M1ozTGYvMUhQU2xCODFibG5tdzk5ZDNqWW5xSXVvN1RTaHlpaW5LRzAxMnVxdC9uWTRrSFVTMHZyM0RpdXEwUUI0YmNMMWZhS3NoSm9RNkRNdVp1QU9qZDFWSnhQbmlETmtGQkpIbVptaXpNbVZsSlFKMnI0SWxsOU9tbnMwczBKZUVhNmNINDQyNVBoRjd4dmdPTmQ1a1gxQmxVY0VLd1R4eWdUQm1vRXFCOHdFWXJOcG9UTDZKK3VpaTdmWmZBMlgyQk54a25ETGtwK09WSWFtQzZXNlNucEc2Q1hJSDJGN0dSdVFaSDUwanJES29mU00xbzZmcy96SFRyK0xOVmpLeVVnZDk0UVorQUh0MFdqdU1uaWl5SDJLcXgxbkc3QWdSNU9FenUyZTRadFVPUEw0UGt4NG4xeUxsOGY0Z3ZxbGp2SmF4amNOWFdacW80QUk4QnFoUjFWNGtTOThYUCtlQnRoQnZGdnFGTUR0a2JSemJnNzFSOGpMM1lEOHU5QWRnZVdmcGp6ZW42QzRPbkg0Vm00MDZ0ajBNcW9CaW9UUEF2UFJSREYvVTBndG15QVd3eDJ2TXAvdHJQdWhPakNibDB2MEZueExwTW1KeFZQSDBwOGYwcnZtR0lOc1hQUFZBQkw0bWxLRFlvSEhVUmN3eVUwb1dHVElGdW1VbWNoVGNOZ2hOcDBLVTRxVjZiMVBTT3ZtbWsyVEx5N2hSREhQdU9VL0VKRmRwVjdwQlZwSmN3R0VRbW54RzFLZ09LV24vTGt4VldpQlJsTTZZMXhrbXNTVWVUQ09HSXdldkh4akdHbWtHWUdUUnVSK3Myei9wZjhRS0VKVm93OElqdy9oMlR3UXY4TFJjRks0ejVueGx0NXhYMGI5WVpjZjBrMHRuazhVZEozSGFlc1dhZjNCRmMxVitUcFgrYTBORFVCdmRhWGljWk01Vm1xY1B5NUdpTE1DQm00NllQUG9obFJXd0Q1VG02dEdMT1J5aEp1d2xaWkVFQkFORnNUNzBaQ1phRldQQmFMNG05WnZSK0lNMFZNVEZaT3B1MFVYL3I3cVoyNHNuSlQycUo4UlZYSlJTMC9OSmIyczVuMTJqUlRvOUtPUE40Znc2WS91RmlER09xVkhFalRVRGZvaGpxS2JVYUNNU2QrUWdsUHZPZEFFM2Z0UlNGSGRTZGxjVnJ0Ti9haVJnZlA1VkxTeVhtSVFkZEZxcVI2RGttSThDL2o5TFkwd1lpTTNkdjJVcXBqVndDYjVRREdLY0JyR3VycDgvaWVEcFNWdzcrU24rS0p6STJocGRUenpqbmZnbHo4UWdRTWZsRnc4cmVRYkZKcldiWkNEZzcxMUU3RG1Zd3BUK2lQTWNUSnowendiSkNCVnBFRHgvZFVwRnFDNFRIRzlvMzZTbFIxTmN1VU5LUmxyWVZPZFMyb2RMeW5LU0VnZXZWbWFoUVd4ZG1BamRERUJSaVhQajFjMHZTSTA1VWVyd3NQNWN3VXdkZ2JKR2xITC9ST3RxTjJCYnN0czVYTHpvNWdWUTRHY2R6ZkNNTHlpWkNMVDhGb1JESEJJNWtlbS9nTzI4ZGQzbW5tbU45OTdOc25rWFpKalhwNjhXNFF1N0F6YjdobVdFQ3NiT2lIbmgxZHB5YmNOOVJ3U3RkV0RJOXBOTGNod3dPQVRiSFZzYnBGcnNSSmdGeWs1MzYrV0xHWWNXUm5LWk9lSDJwVktLMFV0U3E2c1hoRmtXK09RcVNHQThpbHA4clo1Nk10VVVqZng1RjZPY1lPQU90TzBRQTJhN1NJWG9qQ1lCQk1LUmJ1ZXRPTTVwWE0rUDhOM0M2eE4wSXNKanRDbUdpK3hnRVZhdHVNN0QzR3gwSHZtaHRjNzlpYWJMN0FFc3RaMitEVXNQRkk4cXBtWVkrL0FHS1A2OFN0M3d6Tm8xN2x3MHJRMXpqbmZDendTV1c3TG4rQSs4Nk9qdmlOUFJyMW96bzd6OVlYY3pjK0hVaXJNbzBMNG9kRWo0YnROakhFMDJDV1ovVU5zZjdUMVByZUxmaTRtSDNFbkhmd01mZjcxS2JNWjRaUnFGdU5DZVZTUndTZFUySFArRDRTSzd6ZG5aUkZFOGphZEJ5ZWVaZFJxazZLRUhIZDNkQm9yQnRDOGRlLyswYnZFOW5PR0VLZGJZM0hxL2ZlSUNyYzNiUHY0Q2dRaWJOQkxZdXdUcGtiWHo2TkZOaVQ2RW5CRVhSczRYNVRrTmROYzd4TjJGTjhjaWdoYVJNSjI0MFlSY0dYS0lKWVc1bWJmMkM3ckV0VXNxaSs3cG1GOVp3NVRnM2tkNHlFS3A2QStrMW5DRC9PaEVqUTFrU2ZWdW9wNXl5bGtpRXc2aDVpSUdUTVQ0dVJJSVJTZmowUW1ueGF5d2MwT0Y5dzFMYlQ4MXNtWEhjcVV6OVRweGtMVlhpblVVQW1pdFYrbGwwMWRxVEhTSmp4MjBJc3N5UkVoU0FIU3VFWlNRN1l5Z25SdzBEdklraDZObHZadWkwZHFIZHZpSFdiNVdBWW03MGxTVXRzcmNtYlpIbTc0cUs3YXRKdjBTZHZZUHBlRThzTzByWm9qRWM4WDF5QU9WVU1GNTVBZDhXSndnOUdMQWYxV2JyTUIrTUhUOTBqdUFQYnMrbHM0dDdHeENyVVl1dW4rSUJ4R1VVOVpHak1DVlFvbVhwMFo4cHNhdXFkbHJEL09tOWJPd1Vub09XQmZOQ2dQTC9tTFJyc0tHakZEb2c2ak4zcU9MVnV0YXhwL0ducVo4UEFuWGpFTldjUXEvU01QM1U0RmgrRitzeGdNK2dWWUVkeGlsYit5MnhBeVRCM25TQlYzYStwc0pqbFFGZk1TQm5pRlN1cFVPNXlkOUlrSTlTWGNHS0N0ekxGOUplM2M1d1NzOFdUeUZPaWpqTG1rOUxDdXgxV3lhT2UvclUranNwK2V5bDdFNk5BL090cjBUbjNJeVN1SlRsSE9CV2dwdnQ5bm9xcDV6bWlYazVLc1VocXhWdnhJRm1DLzE0aWNIRkNQbkp5dno0N1h4Z3hUb1phVUJTUUdqUzV6VGxzVWRBUzNPc3lzY3QvVWRkUjZGdTE1OU5aeU4wYnlkM2Q5bVRHeEI1TEhBZmxXazdPQlhxK3NjYkZyYlRxb29Dd0xITGt5eUVWWHpDaXhYT0NTak9WYlpwTENsa3hOZUpuaDdHZGJsV3BqMloyZGlqQTJYSyt1WFZQa3pKM3U4RVFYa1dCa1NXMFIxeGoyYkJWM2g1NmUzdi9IMlhzY1BVWkN6RFZ6L0J6alk5YXVWbE84dHkyKzhqNHFBYVhyVmhZdUVjdkF5eGJaY0taZnV1ZUczYTd6akJEamcyWjRwMHlVclFmZDUwY1JReVg1K3NTaXNuRE9jZnZzU0Q4UVlRUWZOSmpvcTdza1d0U2pXaVdFUmdPcjM1MmUyUG9uazFGWk9yUzhjTit1d1hycWU5bjVIS1dsRW0rRHlPUXNLcVdxc2dNVC9HdW1FeURZTnJ5eHVCSnJCb1VzbWlUVXZqSXlnNFZWWVZLSDZKRUNiL1Y0OTRuVVM4WS9FVDNDZE1FZ0dtbkpTTmI4bUdham54U25yenR5MlpwdzNaTWNmems3dmJsMmtZTmtkZDNud1hlZ0hEREU3TzZ2cVVqZ295cTIzZWJ4anB4M2ZKVDFsUUNNaWtuK2pIZmRUSGVqcWdjQWUzY0ZPSUlpR2lpMHdYL2RWM05OeTRVcFBZTjFBVXZZdklIY0s2VnZPanlMSktzS2JBZmdVVkdiNGphOUhDQXJSNDNSSzVLNGJCbEh6Q3VTY3VvclFuREVaM1JiZTJzT0l5WXdDMmRGZkN3SUJyNTR1L3c1L0pMODU0QkVKRUJHUDhhbmJZeGsyejMwMm5mbDNTR1YvUGZTelp6SXlXYXVsdW1tMml2VEgzK1ozUlMwU0lHM2o5emk4SDBsbjI0RmVXMzNFc1dvcXRaa0NOS1kzeDRMTGZsdGlUeU01VU1TdlJWY0ZJQkFGdU5pWUwxOEF1cGU2RnVLbGRsbVhQWFlDUnpqR0syOXNRaWI1N1hVVnFzK3NGamVOZVVLS1Ewb0dsaVVvSUlCbnM1SzNodWdya3hXT2czY3JadFdxbDNqUEl0ZkRpbEQxRDVyS0xZU0FjRTc1SnFhR3V5VUFidnp3TEhqcHFpbXZXaTlsMENHOVZRWFBUR0E3VHF3L0ZNaTAwYW5udnlrUzdoYkZ6eVhBWFFocXdSUVU1Qk15emtJRFhQbUZrUi9mTlVEWHhyT1JaeFczMEhoOVhUcFNBRnhuRkNITCtmdWJiUWFoK3dOMVZNNzJ6cGNFRXBQVmFLdFhmTVRJOEJCbmE0S212bm1RQ0s1TW94VDBjSjYzcXF2WHROUzgxQUJna2dkdWhEVFFuNUdRWWJBTmhHNXBLaFZtMHFXL3JRbHdoRGdVTCtWOFlDNXR6M1VvN2oyTDBoK0J1M2xpMTBoSU9aWXVCUUpLZm84NHNIUENvOTVnd0NCUnBqbGFua0FDc2ZpMGNkckp3V2h6UnBWKzdBM1ZleVBoZExvRTc4Rjh5QUFyaE1pL016U04zcU5sT2VscnRzSndieDVmOWJvL0pQeW10bUF6V05mMWhra2JlSW1JSUFGcXdlZW5xZTJ5WnZVSFZSaUs5alNobGtWbDFXUFVUL2NrQmZkMXlFS0JzZVlvbTJWMnJhck5aODVwQkNpeG9XNmtaaitmc2QrODRIbDlGMENFWnJhL0dmeEdrbTdONVZDTmY5b1RDWlE0eVpCQkZ0dER0VzhQNkowNmdDcXZuOHFvY0dodGZ5RTlFMGNRa0lGVWk0TXRSdFNmdW8reThWK3hFQlcvcHlDaGlBaUZGRFhOa3I3QTdSNWQ1SzREMWZiVmtabnZJWWRTaDZ4V21DMDk0Zll4Skdkd0g0WjJYaGI0ZEk5M1RrVHJZa3hLL3FSZytFV1N5NXhkZUJOQXlpMm5GS1JTQWV2R0x6L01UaW4rVUNyQUNQbzRqWkRkTi8wWWtlN3k4d25heWdFS0dIeXFUeWpFUlVGRnFQYTR4Vm01RVdLcDJxQ2J0ZURCSlFhMzVxaEQvSnBKaGdOazQ4NndTQjR6Ym10Z1hjYW5rUEcyQzVVN1FWYjhkdGxjMTVqQUVNREt3TVdUMTU3T3V6T0U5c3M0VUdWR0dsS1hYMktHTXcvSHZGOVZ2dG1OV282Z1E2eldVZ1JvY1dzSnpaWHh6MGZWTHB1MUxOQUI4K2tYVENSeDkyVzBGT0dvRUdGM0ZQVmxSTUdEalZjLzYxUDVIUEV3VWxBS0xreisxVjN2OWd5T2NRU09qUnRjN2w0OFU1c2RvdWY1RHRoaEJMQ1owb2xqOFJDSFlnNDVGRUs1TVRMVmZJS3JWaW5SdmZWa216aWJEaE5CZkluYm9EWWlzQ1BGbkRVclcveHY0RTY0K0RyRFR4aGhRTWFpMFdMa29rQ08wUFBJeHNBSmNZTzJCYkJDS2VnNTVCcW9nRThWdUlRMDE3dDF6VHhSMitSclk0Z0ZDMjN2NVJFTi9tcVdqUGx2UFRyNWZveGxxbWF3U2FyNW5MQnJCcHVNN2VOalkvQ296MUdrTVp0TjU3SW8xMVhDZi9COTFOclZLWWwzMWtENTI2OHRuZHRyNEpscENtU2Nsdm1pWFF2ck1yNEtwem9lS2R2d3FpWDJjSHhNOU9SRnJZblJmdFoydmJRU1lKeHdxdmpoRzJFRWYvVk5vbDU5S01LdjkwNENTSzh3NkhVaWF4cVZPRi9QaWFHdzlYdXp5Kys2ZFRtcXd2YmQzTjNwTXlGRG9NVGg1ZzVaMTFqRGVNUFUrOXB6clVBRkpuUy9yNXFwR1lBMG9uMmxFOGEvQVQySGo0ZytIUjZtUmIvRUg5TUpqay93OC9NUUxzNlc4OFo1U1RjYnN5UnV3SkplTndHYzBPQkFKRitJVW53SW5ncHdXY3RZL01xZnpFUCtMR0lncDVaTTRaNWxTWHhGQk5lbEQwMHVzaGRqbjBYbG1WZlVXUTI4VmV5b3BtRVNiRm5Idk1PSlJ3N1g0Q1V1U0lGOTg3RzhqVTRubFNRbkYwU1NLREowVmlmRTc3cXNLdklwMDVxa09RTm5TYjUwTkRRR2taQ1pkWjBoMXhoRE83ZHZ0d0F4QzRlelZYRm1jUE5YOFZwTkNkMUkzRmQzOHFVQjJMckpBWTdnWnZ4YjE1MXJ6Z3kxMjRNV3JNSEpKblo5MEYwTXNxRmVQWkZ4am5FN2FhNElPVmdVM2dqVnpNY2ltT0lLc096N3VJYWlPSHdkNDJCaEZ1L3JtRTRpNjFrV0lQZEdDUGdudjNJL1JWQjFjL3lTTDh4OTUrQzY4V3lPckwzeGRWdUVHRk9yczVzZ0R4c0tyOFl4ODgrTFR4TWQ5SGNuRjlyTm9FdlNKV1Q0UnNSckRrNVNRbU5FeDNOZjlnTmhVdlZEVlBSNFA3L3kxeFZkYXhhb21adDFhNzlBTGtYUXFhT01aWlJ4MDJzcTRlemVIMkhOL3BWeCtwbU9FSlhMNVBmczNXRU41R2ZEdHowQ2RzaWZUMkZFR1hteE5COXZqUERiVDJIaHRldHI5bDRtQXhBVHhmd1k5Wk9LNVJTU1A5aVZIMVJRZC9lT0JSUEtrSk1FTDNYaFowL216ZTRwU3F5NXR1NTU0anNRcG9TUXFEc2ZVYzh1NmZXNVhZelZWNTdyZ3lQZFhwZFUzQ2UrVzB4MVF0bWhCVnVCaHNiWUtENTVQRDExRmExb09OSUdDelBkYTJkVHgxbUxramZhZFpjdlA0OTY1RjFoNnEyNVpSRHJkc3JrR0pTckFQWEswUVFzcmQ3R24zdDBxMW1mWi93VmxzTExmaHpESkcwZTNpdEh3TFZaaDlTNlNjQmErU2JndjRsL2pYN3lYQVhaSTNNTHhFUWdPL1hzNlgvRmRpUGZiRlFzTnBYL01DbnFGWkVrTTgvQ3lYVDRxL2w5SzdKL3N5VndCdFArRG8yQ3VUVFNQYmVtVzl0OFBwaHdNMDhvNWdmU1dvSmNQV0lLcWwxUXFxWmJxK3lDUTdsK2JsenNodGhoUVNzUmUvRHlWdHNNRlg1Zlhqd052NjluSHB6NFgxY2NSV05DOEg1S212SVNMdndtaEVXZkRmYVJtSmVpZVpzR2ovVHY5VVhNMHpDQlhzcU1nZFJHWkg2OWQxRlBrdHo5cFY1aFhEUTA5V0tUZUFZdEpieFc2NTJ4S3ZOWkdpS3FNMFBaRG94U0FVZ1Y4YlZoeW9yR2FvV1lkYVROWjNZeS9PTU44NFkvNWxjcVF5WjZ3SmxPMWdjNTlOYTNLVEhDbWQwYzNCRjNrUnRvYjhHSDJPTjBKSHp0K2lSSGdTWGc5V3Q3OFk4djBCSjh1WDAxWW03UDlmVE5aZWplMUdZTmpPTGxlMFIyUDh6dG9lVG1aOUxqOXRBb2QxZjlra3NsTmxoRkRCT2Q1VVdkK2lvdkk0bG9IeStDd1k3NXlmTFZOT3JYNHJGeWFJUCszOHFYRlAwQkpDYVF6UUdTTFdvN053cTI2OE1iWGpCQmJ1dnZMUnVpZ1MrVC92SEIrSk5UU1RMUUJ3ZzBBcm56RDMyd0NhWWlLWWdhaTlUakJZcDlzTVNpaUFRUFpqdEE1ak80eDR1ZWl3d0tqVUlWelRHRFVmKzB2cHZZTUhLaFlPajFQL1BJd2d6RTIxQ0pLaDQvUjQ3SjRJMEwvdjZMaG1ha3hvcmRYcEk2WDZXekR1NlpKVWhyVVJuTGxrMVNzaXQrME5CcFBtWkJNRi9aSHZtL25lZ2xENCtwYTNnWGs2d0EzcUR0VXRtZ3lQRkREeEw3TnVqazVQRXJaV09FK3YyRGpaUU1rek9PMU02N0JST3hBYk52OWhmMTJMYzFZR0g0VHU3Uy8reGlMTFBtVGNPUE9NdUlMS0VEcktTQVZ6aE5zNFpaMktqeVoxRlFkUzhiNTdWU3FheWk4SnNhUDdzTzFINWtWMWxaVk9Ia3lGMVRxRzZwdHQ5MHdxaHlYeWF6SjJ1djhuS1FRL1lLWmJoc0NQaUJiN0k5R1ZrZlpNa0dTejFBWGRaMVZoQ1JuUlg2QlE4NnRReDFoTU5mWjVGUi9uaEpaK3FodVVOWXJtNy85Nm44Yk5UUzZ3SnlSNlRoN2svZEdWRnYwS01xMUptVmp5MmZhVTZzWjZNMnRIekg1S0tGOXdoMnNRSkorVlNwT0dma0NpdHdKZS9VUGF5enBiZkFwZmxWb1E5ak5MdjRqMGFGdVBJUmlGd010ZVdna3R6WDdrWktLSU1Ea2M1ZzFwbzlWSWZMa0U1ZWxwKzZIR3dDOWJqUDhoOW93dmwxei9iVkVFVkppM1Y0SEZQa25wRWVRVEcxaENzQzl1QXZDYXlLOVVXajhWZVE0V0ZvazlpME15SVpWN0V0VS9scENhbC9zNGMrWStycXFuVjAxVWQ3b3FjNFZjdldvTDU0QnNTdy8zaGNkZ1hvcDJxVzNSRTRKYnhLNGlOWU5FdzZLZHUxUlphdml2VEowMSsxVXgrRUU2MG13bzJpRnd3RFZWbVNnQzRuSW1KMC9McVFUemtYbU81MklISE41NDRoajlrNG5rTHhnWEkzT3NQa3p5elkyWUtOOXNtMk5tR1dHS3JNSVRuUStHVjBSNFJMSlBtRVBrRkE2a3ltTDY1QTdSL2dBaHlRdWhxRnBpVVJkcnhYSTBrbXRKNE50MXdZV1YvaTgyVmRIRGJUZWRwaFRBM2FOelZ6VkNZTjV6Nk80WGdxRHIrVE1IcmdBZllWbGlkK3BCKzZRU0xzTERuaXBMZlRXMVkwbUI1aG1Mc0pTQnFCWlNaTDFCZnpjMm0zL1JsdkIwbGlnNmdwTVdENFlIV0cwTDFNMnBFYXVxN00rSXpaMC83dmkvSzBjQmNuR3lFZlF2Q3RFZnBPWlF6MG9lNVBMWFZrekdHTTJaVS9Lc3pnMHJlcXQwWkdTYlpaM0g5R2xpdDVpbnJHaTNhdGJJa2loUFNEYllMMFRiZ1RScjVRSkNyVmlvT1lpbjJNUGNncXpiQUtmeW9VQ3JEOEZDUkhUYjEvUkx2WHFaRXpRVXpucFE0S244NGMyaXdmQjJ6ZHNTNTNBS1RZZGZLcXh0RmxhQlBRK2RaRDNzajJpaUIzOFh1Qm9aWWNDMXM5bEFlZ3ZPZlNUaC8ybmZpMzN6WTBqVkVDOFNrNTVoUFo2VGpxZnJtQlRwZjU2TmdCZnFRcDVpbERyUHJlY1B5VThNVnJCeVpGdmRuU0N5ZUROVCtIWnZ1MzJlSStqNThDd2hRNjN1aVhyOGJkY3pmcGRkOTNDMjNYaWJzU2VOQmwrdkg0QjlqWHFKL25SdlRGc1JEWGFjSVRyZ1J2S2dmaU81NlZkaVRPaHJzOGlGSW0zQkpXUCtRQ1FJYnZ0ajIwV3FjMFl5bHUxTkVNUzVpUmE1Wnk3a3ZoQVhKVVRCQktBN3dCb3Y3RlhsL1JtOHBmRmxaNXNXUUJ2U2xFaitLWmtLVVhESDRDdWVKelhVcnhlTGFiNVVFMW5WYjVNRlR2Q3dmVmdQYUVzWUpGYU1kVkQvYUFML1kvNUxmWThFNGJJRWdNYnl5MFpMSERGMHRkOHRNanFZMjNic2l0ZWhkTEJ6d0pyUzZOOXNTZDkyQUo5d29hQ0JXaXg4YjU3bFQvUVR1K05wc0k2YVMxd1BIOHRqMlhDcHFlVGdLbkhvR2srNGprUCsvR0FEZWM4bmM2WDdJK3NnQWhFM2M4bitGUkVqZUtBWmd0MldHcm1XTTl6VEZYbDNicXdaMFQwUUVKT1RLZllUWFFMc3l3NVRFZjZrRVdZVUpSaVRBWml5WkdLVVVPb1VVZjhxQm5sMFBsc1BldHhLSHVmUmgwRnVhd084NGQzQ00xN3RpWUl3MDVOM2N6NEtMNW9peExwd044aDRob3JTUHdidFBNcGRLTjBFNlg1SUVtSU5udEVRZWtHMXYwM29lWkcxV3RVcmVoaHBGdFloNlk3VFoxMDZlS1M5RFh0TlIxb2Y3dnY5eENRMHNrSitsRVdvU0ltODBFVUJMT0JoVTB3ekJqd1dRNmtZT3RsMEI0ZGVYeGFmZEF2cFRVdGRlZ2IyaUhDdzNRVzFJSnVtanJEL1pNUFY3VU4wWTBnQzJtdmRUOXhkY1FrUzEzTm83WVp1REpENi9FUi9zTGlPRCsya1lIc1g0dDFEdmlJU0VML3B4ZnlPbmV1K1E0MmYvT3V1YzlLS3lHa2o5MlZZU3BjRjhQNHZXNHF0bHJsZjFjUWxnYUwzM3NsQWVXaEc5bG5xMWJaRi9CcklOeERWM29KL0t4NUVOUkxqNFJJWjNMc0RnZGFRb2VBWDZTMTh1bS93Yy9UYU81QlcwME85Rk9sUjhWUE1ZL0ZKNXVCVDBvNTVNVW9WQU5ndTJRanJoSWV3L21KUmd2REVpb29nUVBzaXNja09JQkMwRzljZitVbjFPai9YbFRITCt0dmhiZHByQkxQd3V0VGR1MWNsMmdnL2UvaFI4UmN4WkdXWTdYTlJNSWdveng3RmthWldRL3RUemRIajVCbWFhdjhOb0JwZ011UVZXOXhkb3h5VlRuV2JpM3pIc21ZOGpSMVhMUHA4aW5QbGlZck9jQ1FDemw1NThldDhyMXpTc3ZaSzNKa2p1YjY1cXdrMUNIbGF3Z01YdzRMdTFxODFrUzBuMDNackNhRFhzN0VpVzZSNG0vYkhMaHVyQkZSY1pnVDRGNlZneEdWcWRZYUVSeTFJMTg1UGtEaitZN2dBaFU3SUpvSjNYMWp5Ti9ybnF1d1R5QjNSRFF2dk5ENzJDNWhHRHdnOW5uUUxqZ25BNEMydXFYSTB0K0g5MjZYa3FZdEcwcC9iTGZHN0dxUVV2U29QQWZNcFpabVhhTUZyZldzNGRYTEh4Q3FtcU1DNU5xcUpuc0JtNmZ0Y3dnTkhLUG1RU2dBTGRiMnEyS1J5M2V4am90RUk4Q1pYaTRaVi9wYlpERGdBb2lVbmFsNHlmVE1QSHErcE1WNjNmT2JsQnlNdjczRSt5ZkwyMkw4bmdibHlQVzZ1WW01bVBRSmZqaTh2TXZzNnBNY1pFQWp3eUZ4NlA3RmEwVnNYWkUrdk1yaWhqV3JoeWJxZUl5VHJ2dURIdnl5MUhGTWtkdHlRbXVPcUhJWDRxN0hMOElFWkxtaU9yMW1XK0tSNWlYZFJGWFdIeXNiVTFyRWtjSFNCRU8yOVo1Ni9lRnhRRFdiRVQrOGN2YURwSWRDS0h3bys4dGNPcnNpRzhOdzcyWGxsWktnZGJEZUxFMDNraHNzdG0vaWZHSzJOcFJjTnRrYUx2R1RmUHozRTRSQ203OSs4UEs2RklpSERuTDQwL2dGRXBMQ3R4ekIwbDV6ZW1hQUJ4b1VLUStxd1N3cEJSa0pRSy9sUllvME1IbmdoeFR0eGl1dG9uMTdCNENEOGhBUkhSTk5vbEtlaEZKVjcvMUt1anFnQmFBTEJtN24zaWdOSW90ZEFodjN2NitTTVM0ZWN3L1A5aHBsNUozQzFSTkZnY1F5c0gwcXBQUWYrMmxzMm1BVENoYWZrNVVrTGxnOEdZN0c0NUtXV0d6QjZ2OFdvRWFoODBQUGhaakphamhYQ0ZQbVRPaVpMMzJZYUNVeVdYdmlZVTVmdFAvQUlEWjNiRENSNUZna2hCUU1tVk1vQXprc3Voc2o4ajdGL0MrZmprWUlFVWlTa1ZHODdRaTBwTWM1S2RyUzVCczJpbTMrdFE5anBaSGNTc3VqMGRHbkM2VUtla0c3SlVQRjVKQkN2MkwzTTdaMERqMlZHdmoreklXcHY2VXBhOFRXbnY2TlpLbG9HL3dla1pGd2dKQzdjVWczNld5N3B1R3NvaWRhNmpGTmZkM1dvS0pjM3VsY1VIMVA4RmNJU3RjYjJjcUdaWTZENkxhbzlreTNTWXJUdWNQaTN1ejFoRTJKaTdJRGtKRFdsZzY4ckNrWnNiYlUweFlSbzFKdFFFN1k3b3d4NHlzcXc1WXg1eFRpNVhzUW9lRFJ0QXU2UUR4MnBqYnJBN2k1TEhwTTBOQ1dyak41V2NxMldtSnF3VFdtSk9LanpHTkRMcEJGY2F5eEhwbUVoMStLdkdFR0hCQXFnRlRIV3p4ZE5OOW91SjJNZHdGRFNjbzFzZnpVREpIZkhpMGpCRk92YUJOQjJKR0dqcVJ0WGtIU3RrUkRQQzhxRjRlbHdjSFUyRjE2ckI5ZFJjY3ErdUxyczNhK0VHazcrYzk0MGw3NzNCZDliZG03WUMzVnRxc1VDWXpHcjhmUnJQbEQzVTc2eUYxM2hkVksvbzZWNlpUdklRNGVUSlZHMExJc05tMmcwWXlOMWRGb0s4S0IrSlgxUFFxdkhBWjlrOGFNUUJvSUV5QldYdHNGNitOdXdYUHVGdHhkZndUaHVJZTBDcGZScDFNY0xrNjZiNW1CYkdUaUxNNDFtM0VwWXhpRDNyellzZHpibmRBVTRjUkI4TEg1dzF6QkZ6M2k3R0o2OEJaams0bS9kMVh5dDlMNzVNRU91a3h4dW9HWFZUWHkxaHR4dUtDU2hBRzZLOWpWSnR4d0dwL1pERzVTc0JCZXdCTC96ZnZkSFYzZ2d1STIvV29HOXBrSjhVckxyYjFDc0NrTGlXYm56a2JsVUc3YkQrbXVXaXlnMXZvWSsrdTB2NU1VMFZPNW1YNk00OEpwWGRNd3djMjY3YWdKY0RLV2ZabENCUWpkajRZWE9qRitlRTk3ZFNxTW1wNURZSk5rNDRXRGd3Z0pvK0R1SW9GZGlvaW5XdUZOamdrdGtFU0FDeFVxd2VqaCsyUkt3Qk9GaGZWRjgyN0c2Q1B5UmNPcmhyQnRJVXp2em1sOGdBUzArMjlHMS9TWDc2MDVYcHdjYnRGcXBaZ0VsWlNVb3Q1M09PNnFXMzJaRVRuQ0FCdmt4RStWUmxrZkliZzRwWTV5eU9tQ1ZFenM2ODVDT0dhVGlhMFNUTTZLbFp0RktIb2p3WjFGcEprblBZMDJlV2djTUU4NmVzUUR6ck1HNFdQcVRBa2lLOFdSRmtjSnQ3c0lmZnNWN3djNHluRW96eUsxTlNibGoyams1Zm5DdG55RXhIeFN2NGZaRWkzRm44ZndEN09vbFhjeUQ2ZjliZHpDWE5QblBXREtqOEpxZFdnZnpYTExTZ1MwOUgyb0djM0N3cEJkQ3pCUVQ4Nk1Fc01QQWpaUzlhVzdZSmtPb0JmZ09nSHJCZEs2VTRFS2lnU0F0L1V6RGFJNkRmaXk3YVVKcVluNXNHbzhwMG1OdHNtMkxORlpCSWEvUDErYU9lSG5FZkJBdlZTV2VpWk5sVEE0SlRVQTNZUGcwQlZxenFWTytYb1VTaUw1K1h6ZXV6cHdmK3orZ0FPK3VwdXNIQ29MaTJWRmx3dU42NjNka2k0eFdQa0I2UG9SYSs5UlBjTnMxN0ZlTU9hcXhhYld1QVMva3hOeDMySE15Y3dhdDZOVEZQNmladTBwWXRqbnYyQm5ONnJwYXRiVDh1cWx1NmVXSDJkUno4bWNEd25FbWVteTg4TyszK1luSEZEME5lMHhVWDhkNEFhTTlPOGc0Y2E2eWpvWUpHc2YrUFpGeUNsSVNCQ05pTGcvdWs0SWF4WG5Wd2Y4alRZYlErUFVqd1JGOG5CdEd4bW5nNzdjRkhTa2F4VWk4SVEvMmFMUitHU05GMTdxdzlPeU9JUzRyY3UxTDAweXhrSTh0emlaQk0xbGMwQUw4bkpOUGJVK2FkbnNEeHBsOGZic0o5eG9TS25TSnplUUVXcTdIWTFjNTNPMkc0c2RFMFlTWm9tb0Qwam1oYVJCL1hzVEZLd3dxc2JCbG5NdTJ1MnNlVC9xbExld1d6azhWZzF0SjdnQjROOGMxaEdpaWFGUVZkQzQ4R08xWDByd29yZW9IcmVwSFRYV3EwbzdzMVlka0JueGJwRTJWZktveCtaOHhrWkFMNHR1QWFiOE1penZiVU1IWHRVNXV2dkI0cnRZcU1zRkxkNXBSQjJleHIzaTJqc3ZxSGp0M3czZDFiSVZOdExBZ3BGNlo1bkQrcml6ZzlacVF4M05uZ3FZbGdYVERXRUVMOENqRXRhVFBnVjRoR3V5UG5ya2lERUkzNWxCTUUrbHV2d2w0eGxSZzJxeldQRlZPc3c3aUJJdTJXcUYzNCsxeXZVZHJNS3FWRTdoQk91MGN2RVU5UzVaRjVUaGdrYlRJRDdHenFiRHhvVXM1eHBRei9ONklKSElVS1BobGpKUlI5RHgyaEhXemtwL0pEelZLb0Z5bEt3YTBqRWtxaE5UaVJWeTFFaTRSTGQvL0pjVytxYUNKb253Z2lmRnFGZEZQcW9lTnJXNTFiS1h2d0xMc2hpNGNhRXQvM0xBMWViSThCWisrQWxxSGJYZlI3SUJCWXdlaXdYRk02UjMraEt2M3A0blovMGIzOG52cTQ3M3FMUlo1UXdpYS9HbUZYeThxZVRqT1Nidlcvb245REE1N25ZK25kRERsbUFnQzQzTjcwYmtTNzA3S0JGc21rMlpjUlNZdkRUVUdyZkN5SFdYSUxDSEw3M3RuTnVNNjRiTmQ4d2wxSlg2Y0tQODdycTFOM1FHcG9CeVdtRHFvbEswMSsxYTNsVGh1Y2ZFVm5HeUw5NCtnOUsrc2NFTGE2TS9LQVBYL0pWcWtRYkpOelhISjFqTDk1eUJoRm51bEdXamVLYjBKejRKakNRenNES0lmY2x6Z1YzSHlsRVc2NVRyeldFNTdPRjlsYmFhbGthZzgwa0FLaHRMbWJFaTlITWN3NWVuSSthQlArTDBLR2h4dUd6OFZMakhVVktjTU5QOHRlaURFVmFFU2pLZXUxdU9pVDE2bEdVeE9XL2xVRDRGWm5DYld3V2RlcG1GbW1xTVJQZXFQL1d6a2FLdWhOUVFYaFhyNlBUazJrYzZEWGlhNGZxTmY3dGpPWjR5L0hiZG9jNGE2aldPTEdVaXlxb3lxNlNPR05NRmZvaFBaaWlrdjhoc3VNd29SRVUxZjJlMFBOVnV4d2Q5Wko2WisrRFVRNmZhWmh6bWFwTm1IdTQrNGpZQVJIZTY3N2NuSkZ5bnozZG5IRXBwekRNNFdaZExDb0F3NVMwN3hMUk5aRjNrOHVmT2lCTnB1M1FBYmRicDV2T1huZTd4REhybkhhQU5vNDdBMFFHT1pNc2t6cHB0bE5ObTIzYVYra0UxYisrR0VITGp5QnNqZzV5QzRrS21zVGZUZlZSNUluMGlaWjZYZHNBcVZhenhCSG9zUkZhVUdXeXlGUXJSRnFTNExuaEQwTk9vZkw5b2xiVTV6blRKK2R6VU1makZzbGhnQVpIZnNLVFhlUUVPR2RkRzRmZUdtbmYxMVltRVZsbFJnY3g2NmxNOHhmblJiUU9Eb3pJSkRHU1A0SW5lS3MvVDBMSkYvOEp1b2RjUDQ5K1hLMXMxd2lMQlNMbWl2am9aZnUzMCtzNFdRcE5iSzFCZmFMRVdqNXFqY3JxMnB0V0dBMWFGK1BjTUpzK3NJY1ZJVzRaMFpHaVBVdnJKRkRxUmVWaFZQYWFQUGh2V1lUdU1OeHRWenJTWmQvZExJZnczMC9mcjJ5Mkd3dEdtVXlEUnRscHdva01UNmN4RnF3SnFuOGZNZnI4c2lMdkhFdFJsTWRNbWt4cThPVGd2WGRNT0tETnlOVnNxMUdPYUpHV1JqRGJ0Vm9UcXoySFVwUGpvNWhHOGQ4VGNkVUNLajU3NW5MaG1lU2lnQnNBcHNyTEl6ZTJEVXRCOXpPVEdrRWp3THVWQ0o2OVpoaVg5MDczQmdXcllISU5jN0J2UndXK0R4RTRNbVF2b0JXMENFN3JJdGNCeFVtYlRJZGhaUjJVMW55UDhTMC9qWVNYQ2ZUbXZZcmdRMFlROXNla0ozOXpVTDNvQ0hSbklDdzQ1d3NjckIwN2szdHpFeUpBTDR6WHBQdFZpNUlWNXNPRmpJTkQ3MzZGcTBvV2lFcUNRL2RMYkJubEZ0cW8ybGd5NkhUdWUyVjlEYjZhNytQUXFLNWdhWnB5cm1pbmlvdEpWa3N1cUhaNzJWSXlpME9MRDBYbkdjT3NzMUQ5ZEJQNGhQRVdNZE1sU3lyall1TkZKSEFDU2JDM0QxcmdPbWJBK2k4cFpNRmRQYThxT2lwckpPenZNZVpORXF3R3A3TTVJaGxaT1hGVi85Ry85RE9lVzlacktVK3pBd1dHakhwS290TlN6Y3YxcmtibVRsNnJkT3p6WFUyejBzZnR4dERpN2ZxcmlyVUhuMXA3ZWxPakhhSGk3bXlmb3cyWmlpSWlYY0tab2h2WUF4NEFxYUJaSHhrZUtwK3RZMWtRUG41MC90Z01PNVR2VmE1MlpJR0xzUkRoTlR4dUFPQU9vb1k0a0NsdzBjRGNWMTVUYTlpMmhGam9NT3FTRE1sd0w4VnpiTlJzd1RpempSWU9xaXljZ2dIZjQrKzRvNHZnUGJxT3hkZWZ2N0ZZbXdZWFNDMEwrV2RDeGxVdGJFMXpEZGVnN1VXZnM3cE9KQ2RRak5FQmorZVdhZHdpcjhYYldyTGJsUmZQbkt3cmhpUDdzNjZmaktsK05CdlMvZ3lFQmJhMlVMYndTdGZUazk5emZ5ajR4MmV0RWJ5MkFKaWlDcHFGSWtoK2lMUUkrdllsNWxiVjUyTVZwbTRyS1NhenlFM1d4VVdyOTFMbXBwa3paQXpqT2drdHQxdEVJYUZ1UHJsVHhVN0FTM3RzRnlOakdZU3ZRRjR0K2ZNdkc1NjZWaUVqZ3Y2enVZU2o5Y3RUNkhFaDRLSU95djgyYlpkUDBYN1NNa3EyZFV1WGNTYURZZ2ZaTmRWeHZ1dHFzL0w2UFlrZWUzUVZXajdTRXBlanQ3OHc4V3pEcWFyQ1VCMHJzZ0NONDFCUzcrdUZwNGR6NzVLalFwWStBK2Jzd2NlbGQvRDRxZmhxUU9OOVUxRERMcUtuSVRpNExBK1VvMEhmWGRHNnBtdkZiZmtpckZIZlFXN291eDRpMHRydzVRQ3krMG9icEJDaS9sU0dTQkllQkZwN0VQRktNVXlDeUQybkVvMEMyUnpGeWQ5SEc4WWVQaFpTUlRIZW0zMmgrd21GWEJreUdGclVJVWtIRGt5dFdKODBxQWd2dll2ZitJWkZpM0dZb0dCNDNuS0NLU0E0ZGJlV3pVZmZGSzVjekxFVlRsWEF1T3BLdHZYQ0pOSU1UV0hwbXR6eVJXME80SVBxS3hDL3hJRkZ6aWNaZ0VtVHNlQzlDUkxnYjQxczMvWitDNm9xN1I1NXhzSE5kTWN0M05OVkVuY0V6V1BmSTdoV0ZwYjRGMjgxcDd6ekhIM1FIcytTSmJadEJBRjZxVjJTeGVESE9SVTJIZjlTL1lEMnpYODArSlhiOU4zQmNyQkhOY0pETFh4UjZ5REkxN1FJbjV1emhyNE9oK1JIOHVTRUtWTHZNWksvb3U3K1poeGlKUjJiUzljR3Y3L2tJZ0ZtVEpNVHpHWUl0RjhjbnBBZkp6Wno0Tk1WMytqLzZJSlF6blZoRy9PNHRBZDBjaElieVZhVzhlQjEvK2Y2YkE5VE51N0lyZnBRWm54UzZRNVdIRGJ4emNjaU9MeDliVGFYTDFtVVJOK25LVWh5OGlydmoxOTZJQy9VcHlkRjZZU3laZWV2ZmI0aHZyeGlYb3RvTTQrNVY0bnY5SEtjN3VVNVk4cnBwV3lQdE9UU2FlRkxjTzQ0TzAwb3NYQkJrVW5SRytQUzBSK3d4UTdMTnhvUk9PVUhhRE9hZDNyK3dQY2cxM215T1VOYk9CUGRJclh4Szl5dHNGeDNpWTFGeURSMnJKenR6M1NhaGZIRmZ4dmJHMDdyTGlEcHN6RTBQUndtdERrc0lJYzVHYU5DcUhkdjU5OGEyWDZXNStMa0VQVnA3QjhMV245aFphU2ZIL1NJZEthdUkxKzY1V2R4L1dKeStyVFBSeEJaQjZDNC9FdlBSSUFQTFhlNGNSb0dsU3FhSi9pSlY1NEpucmVmaGhwUnY2Z0xkd29MVEJ2ZDBsUnc2TnYzUEZoMjFDdWtKZjBIcnZnODBGak5icE9TbmJuWVoyT2NrenVpVlZydEkxb3Q3UWlBdEl4aSsrUjNpY3pQYWxHNTlqTG5zeFFZR29DV3pZYTJuZUZFdkVBWUdQYmJaU2J2UHN3dVNBdWpidEZkalU5QnN0MDAxR0QwZE5iejN1b1ZPRkVDaVNvOGw5RGEzdDJCOWR4WDhKOHBaSXpKRDZ4WVJJaGxVcnlkVzYyYXVEMEtHZ1pCQldRV2ExRFVPbExmQ2grNmhzZkhqNnFyKzk1MGQraEEyYldYQ0toaWdQeDhZL1pER2hBTUY4NzBPQ2l6eUJXR29LU0dHaDRFUFJQRnFSU3FZZHVCOTdsWnBTQ2F6RENEOXBRRkRnaVhqR2E2RzBTYW1LU3F3RGtzZHgxUWJFMWp1T21scG5INThFNWFLOVFhaDZGdVdRWS9jNHpsSklMemZFc0ZJTzN1U2hNVUJPTWhVM01QdDhoMS9MQVBsRlpkaWN1dlFMdzdJekdORG9rc0dMREFPVXMwbWlMcTZWSGZGT2JGWkRGY3NxK0ZjaUNFRmY2ancveDFsSlV6UGUvVDBheUtXTmZxL0IxNWxYVG5mZzFRcXNOSkxtOHhQcThKdWE0akZIMnp6SGJCaEI0dGNEMUtKMjZnU0d1MEVVMDRndFRtVERWL0dCOWRIR0hzRVZUQlpoUE5MZnI1dGQvME44cmUyUmtQMDF4TGc1N2h2T1hBZXBrclpWRDJIUlcxdW94ZlAxSG5NN09ISUlKN1o1VWc1Rmw2aEs5WHpSTVd0VnBscmc3b0gwMGQ5cHQyQjZQSkhGN0tVeVZ6bFovYTRqNzlKZ3dhVkJRVmhkd1lOdDk0bFovZFQxSm02ajFncVhjK0p5NHA0aDZhWndFOFcva1lxbnBEMDAwcFZBMzFHeVJ6VDJMTjYzQS95TWQrWDd3OFBjUXJNYzhkTjFXenBPNWhMUGpENXJBbTJhSHlQUjZEWlM1Z1F3b1hmeVd6UnRnSDBoKzMzWmNOenlkLzhidWh0S014L3FZVlVMVUFIOTZIbEZTK0xiSWdnRlVXYk1SQkxLbk0xbGhGSVQ2TUEvSmVlVE5tU0U4ai9DTXQ2QlRpV3U0MEt0b1YrZUg5d2hMcE5Td2ZZWEo1dVF4NXNFWVp5cGVRWFBqR2dYb2NORnU1NVU1R1ZLTnJUcTJVQXVLNTYrMUhKRGEraHptY2tCWWFsY1Z3ckJjY3NQL2JMM2pleXU1MmYxUTNMd1l0dElWSEhJa0VXSzFLcnE2blpxVndFMDVPNFcyS1pJNnQrTSt0dG5CUW1kWksvb3kvektNakV2L3RpNFVEUzlqUXBuakRJb3FjV1MvRHAvMXBlUDFsSnhna2p2RVVTSTVidXpTeEYwRDExMGY5NnB6QzV3WUVkVjJJM3ZOK2I1dTR3UTNjUDRta1dNd2ZCSy8yYzhUZnlNQ0pvM21QemQ0Y0pibm1xUkNwV010R0krQ25jNi9CZ3lnNjdmVHZDRUNmNW5KL01xMXMxbTJxNXIrQjQ2QVI3TmRiWGM3MlpJdEp3cmVyL2JxYnpjbHp3cGVzSUFVMGlLRzFWeVBDMmZxYjZKSDd3SC9GdzdJaVNxU3YydThiaHpyWExoUGpyWDluQW56MUxLbjNEL0Q0Z2ViWTVwMFdWdEE4RDJhNC9mNWdscUZ5RkdUTms3T01BY1l1WHVsYWcrVDJzS1JvQ0F3ekk0RU8xR1BoZnUwNEMyS2xEanN5MTkyVHRQVnhmd0Q3ZlJWcXc4ZkhZWjJNWm9qcjFjL1FhRFhCaDROOHpoMitDL2dTUW9MYWdJTnVTTjVBWkRiVmdxS244dkxxdzNBcFRUTDdsMGM5LzJDYUppV2pmbGNEdmNiZ2VIVTA2VkFqWER3SXV2T0RVTFJUZHNyY1cxWExubjBXdmRpUDVON1Q5QjhVR1BGd3o0MG0xTWk0WjBXMnp3K1RMckp5NHBpTDZObGhGZ2hBZ21ob0pFU056c25DelpTdXljaG1GNlY2ekplOUNGK2FXMzM1S1lHZHFxVGdJMHJlWkoycXhUMXdWRHBoYStnbnlNd3I0TU9XR2FZM0JvdUlZUXFDYkp4RG9CSjJ0cjFVSW9hMnFEZUpaSU9kL3hjRHRhdDh5VEU4MkxQUXJ2Ykg0TGxOQWRWMHgvdWU2SVRMTlJWMzA0TFAwME5UYzFpck81NVFudk9XdnRXVWdnTE9rdWRPMDI3MGMzRjdBTERXR2RUMTFCZUJyTHJsL0lTVTE1TjNnUFVxOWNWaWRTNkhxK3NhZFVxdjl5VWxnejVOZ09KSVZQQ1hnaE5GaVIxa2ZYckl4TnZ5UnJJRU10Q3ZyY3JnVE92TDJsZW1VTGJkVERwc09EckkvSmZzS2ZKcEdhY1hFSStyMTlDaW5mYldxa0h5aXVMVFNsek0zN3dwQWpHUnFNWkR0Z0NETGVBN1JBUUI0eEUzTVN5c1FrU0wzeDVjaFp5YkFhOWRWN2IxZGtwNGZYdktyQW5FQ2JJb3Z0T3dpNEtRV1p0eG5xYVMvVzFYUkJPZUFrY3VkUDRNem9MRjNaK3lkNjdFSk1jSllBN1pMcG91M2NsZWZtQUVTMndtVnQzNDlEM3UrTEI4VnJUUXNqajRzUmVMRkVtVTE4V2tXcjhmOUJNMG5IR1A4eE9UK05mYmkwcGxwZUpCRXZkWkltYmZucjhyMzMrZDA2UHdMQXZncmJHWXVjWTNLejlUYnp3Yk9USTlib2w4RU9HbXc2NFlEd2tWczFucnZ5U0xiZ0FNdHFINUpQWXlteEx6TS9namFHczJ1d1N5NE1aaXFnUE5lczgxWGJWeWVSdlBKU3RqMVNPM21OWDlaNXJhUEFCR2hLWmJ3RlhFcTA2VnJQTnNmRVM0cDczZmhyZ203SDdtOXlXL2h4d0FWeWx6TGJBbTR3Qzg5UUxub1VJVnpoYlp3Qk1Ra1RIalNLZ1JWUEtyblNVUklNeFAyYnkrcHdtY0tXVFF0dWF4cDlOc3NiWmFMMFd5TitIdk1lZHduL1p3bXpVWUt5ZGJiUG5ZeEVTTjJCWXZUald4TWtCUDhnQ3FSVFFTdXdUbkU5WUZpOGJFcFEzRElZenJZR3lCLzBNOHN4UENKYTB6a3hud01wWXhtNjFKazVLcWF2THF4YkNrbjhHQjJlNkhJcngyZVc3V2hoZ2tlcEJ6VGlySlM5S2VLWWY3UTJTckZTZFh6aW5rVEM3VGdQdkxEL1NGUGRseGNrMkxURnFoZkVCNGVxOTJQdncxRW83dzl2NHF2TUZxeDY1TktMSHV3Z2ZUUDBmdlRtMCtHYUl1czlETEwwQmpKd2R6TTB0cUQwMGtsUE5CempHcG9DaTFRd0xka2xVWHRpRG8yM3dPaU9HNUo3eHFxbzk3anRma1kyUjFhaVRkWjd0WWhLYVlQQXlqbnVETmtRRmtFdG1IUWluSmJrNnBDS0ExTTM0SnMyenBHSzJEcnVnWEFkaVdlYXNRRDZnVHpYRGRQWFR3NzJnRjF2Uk50bWl1YUZkWlFkTjBPYy9zQ1NYNFUvRm5pUFBrd3hOenhlYmJodWhXeWkxSmRObC9lNzJNY3h2YTRqcE5qNVZZRkpRSDdPWkV1VXZ2aUR4akdLQzZlMkJpOVh0bHNaalkxSUtxMFNDM0ZwaUJhTjNnSnFPT1IrUlJGYmNROERHL3VVSitheGpyTTczVXRvOWFGRTJyNWc1Nkt4MStDNDRuTVY2cWU3ZzRNTWJwckp4TDR1Q24xdExGa2czUGpaQnBCNnlBV3FqWDByelBoMWQxSk9PQ0tYb3c0SVU0aUlRL00zM211WEhvejhFVndld01GeUhOVEF0NTRhd2xVejZ4R0MwNjBHUlhiSDEzT2puQ3VvbnVOYXRDVzduSlhxbUFlalczaWs4TTNjOUpiK3dlb1QwSklSMUxrQ3MzYlJ4eXBGSVZXNTJVajQ3clBBalpDaFVJaitMWUhaaDRSWkRaZFJDTmNLN25iVlp4NzgvbUM5QWI1OXhXaExxOVZicWV0VHFFdnEwclBXTVJneTR2QXJlN1I4Y2s2QkRSK0owTlQydnkySDNMYmZNWVd4Y212MlRYUTRDQ3I0YWdxRU9FMVBGaW8vQ1pqSjJpWkF0YTBvVE81UFJ5RTk1SnJ0UENZdUg5QlBEaWJXeG03WDEvOG5wTHhWZC9WM2JCamw3VEN2R2VIWDFtaWhKNndGOXl5bSttcU92MGlMcVM2OTM1WFpMYzJ3Ui9VWWExM1dSZHBoVm93OUh1M2g3Y1hubFVtNXB2bVY0NHRMNnN3OHR6endWNm4yZlEvTEY5bnovUDhKSnZYeEdCdzlqWk1HeGF3M2IxZUtHb1JkZTZIOEhPUmxlaFZVaEsrNHY4VnBZbXJYMXlvZ2lONGJocDgrZ2VkeVlXY1dZMGVzS2JQc2JpeDdUM2FyYy92SzhFZEZPK1FPZGRHMGxra2lQMzFFVk5Oek9oMnBPQUttNkV5QmhzLzVnc0k3c0hkVFIxY0l0SkdjN2pkUXVWR0g2aCtPRGJFdFZsWWphSUFhSDNLc0FnODE3cTlSVU5zdzhMSmxaMzY2VTFGRFBYcm8vWGJrbHZnYTF1RFZqb2RjVnBhUTlsYnlPem1MeDlLcmlaQnh4dTk3U2ptMmFiUGdHdjlJSm1PalUyOWdxTEpmbTVtaENpV3FmU2NPSldyVVE3WnUycmxndTJkc3l3Tk9TSVR3SHRYTVh0a1BYS1pJNEpBcU5veVJCUVdqVjBPWVFtVFNwemg0Sys2d0NFMjBZSFlRZUlrYWdVWE5oV2g3bG1wcUFDWmc4VUlneTYxa2UwYzROUk5JTGR1c1MwS1hrYnVvR21LUWs2bUZRUDkvUy84K1YxQmlmOXZwVVd4aktMODYyenNmR08vL2VKbERpTitEVkNxMmtaemRiUHZOTmxYRndxdmVxdnRtM21RQUxxSXpXMnR2bHNZSWEwVW5oUlpiemp4aXNMUm9sOHhzVnBUWUZsc25GbFhmQ2VsdUtMQ2tVb2lOSFM0MDdsTlliN1Z1L0tBbVRyWXZyNnNQSVhRQ0hpK0NZUVRjeU1aUXpHdW53QllEVGNNc1FheEVFSC9WM1R5cTZsUmovakhEQU5KMk5yWnp6QitzWVo3RzFNcnRJUmp0MXNRZmY3c0hxL1hrMEp1SGNUbW4yLzVVMTdCRktrdGV0ZjJ5Y1EwbHNOME0vWEJxQVB4and5OXBId2VMblJCN1hKYWJOY2lSeGRvREFiSVhSdG5Yd0VYSkpjZk1uSVNJaGt2cGZXWW45bzVpTEhWVXQ0czlqcEJJNXYwMng0VmJ2RTQxcHFPY3RaMUZhbGptc2VSLzI2cmxBbmpwNTNxNXlCaDFrQVlBYXNFL3ZsMzNjbHIycnNDSzZ6Y1F5ZmgvTE0vVmZoaVQ5UzViemV4Q2ZodUNBNDU1Mk1OZmZpVXdXOWpvOTdhcEZjU1QrdllGbGswRW9Gc0liSmp2RUpid21YU3NRWG95RXJoZzBWNTh2Y2pFUTRWL1JiMkhRR1AwNjluMlV3ZHc4TGpnSE5iUjlDbGdaY0VUdDNEK2RHN3RIRHRLLzFsaU5xeW8zdjlIU1ZxMkRnU0JTU0xwcGQrQnduQS9WczE4RWxmNUZleDVrYVNDMGF5anI1RDJiYjlzWTdUZm56bjlWSGY2WHkvU2REcnVCUjN2aENYZUU0NU1FeThDY1lGZ1NhRnhqNXE4UGZDSzlYcGFUUmNuQnd6M3pQNENGUnZTTys0ZEoyR054SDFaenh1SGNPNEhYL2ZpQnhtMHVldFh1d2sxRDlPamhnYjIwK05KaVpwbFRYeXJ6NTg4UTh2akJvaTFiOFFSZCtobUliZTkyeUJhaHhtbC96bklmSDA1VzVFZ1ZKWERPYjZUUTdROUliMnpmUWlNZmZVQmRMelBtL0dKYVVzQmsyUVFoQU41RGpKUThmWFV3R3BoUGhiUkdLVzIwYlJHL2krdGE1YWN5ZnBJZUJWRXdPMDcrRVZDc29pMGRuMVp1Rng5Z0lqMTlneWdUTEpsOUM2cGVHMlJuc1pzKzY1OHJ6Vm1nQ2dTRmNTZjBlTlgyblAyR1FOV3kzb0owbW1YZTBzS1NJYXZobnNrUmtwd3VzRkJDV2hZbGREd05RSWE3dlV3NWg1THVvZVU2dVQvT1VVMzFRQXZFYXI0bGIvaFdXVnYxcnlOK1pmSWVsR2lXV1dxZWE0dmVTV1lXUDhXL0U0YzJFS0I1Y0E4aHQ1WHFIM2NrQ2hEdnFOcEQ2S1Y3bC8zZm10STlEL0dCbDF4SVczMUNFSzZGdmhPSDg5UTYvRFNndVJ6cHczN2RXM1JqODZpYTdKakF6S1cweVA4SUQ0VGFXR3J4REhTWWd2eVZCMkhsT2ljb1NCNUFqYkh0amk3b3M5cU9MWUpTRFB3dG45cXdKTllaNzVDMnNSSHZzNUY4RGp4YnJZNHdra0JsWGNsMm5BS2gxOGJaQ1RyWDRMQ2xWUXRQK3JkSVlhQnMrd0tsSXFITHNGVll3TUV2TDJ5M1lYU0g0dndUcm1QQzRCMWNFR1NTSnlnV2RxeEZQbUo3enY3TTUvS0R5S3dlZ1ljOTJxYUl6RWlMekx2dXV1RTZCOFBqN3dDWlo0UUhyUUVDcHNIQTVQa29Va3p1ek9SODQxdjNkR0pVRXowQllxYVN1VFJQSk1WTXh3Wmc3enZpNG5SWlIvU05RMWRncFN3RjQ1QkdxU2pWekQ5dzVKT0pxSkZGTzg2dGVxMnFBUmMycUJIbXEydit6M1AxeVVQSG9rNTdNL0IraFNtMXkwby9OS0ZQa05iYlBrRVkyT05Odjd0SjI0KzhZZktZQjJ1S1JBU2o2ejBCQ3JOWWwrOFhPeS9tZzBKUWNGWGhUZm9NeU13QVA1RUtSNU81QVBxejVCVXRNbmRjTG1hN2sraExHRHM5Wm1jZWtFVGFqdkRMa3E5K2FkTHIzZ3JxeEY4MWNzcDlpMkQ5R2JlNW94QXdqREc5dXpsUmwyNkl3dXpYM28yclRKTUQ2MCtBK2JsTWtUckxpcGRMeVp3NzM5SjBtcjV6R2NzUVNsM0lwNFdueFlwdVdtSHNDaWVKekJPQjNob211MjZjQzdtK1lqQmxKblA3SVoyUmM2bTZSbFZTMzdYNTJBWi8wUmdZd1RHWlRBaEFzLy9SQ0xGb3VQQ2F1dUw3WXpocUZ6Y2JpQVA5VVNPYW4vZERpQmZNcEZ5RmxQSnh3aXJCWVppbnhLOERTMGp5cFNvRnZ2dVFOTWo2czR5eUxjSElZcEd1Z0Z2ZGlJcm9GZGExM09KZ0Z0WGVobFp6QjduS2pmbmF6RThJdFIvemNDNU9sMWpraVR2Z1Z1YzJPK0o3dlFkekFCYTIwdVh4M1piYU5LWXpLREVjejNhWWpTODNuVkhYUzhXb2lHam0rSEszNDAvZnVuVzNaKzFTNE9rV0lLbm1EczVZQ2ZpYWl5SDFqVm1POUVOejB5SXdPRldkdVd6V0RDazhjNENkVTdyS2o5WDJuYitqQWdKRHJaanlHbmY0MFdBSVNEdG1DbE5GeU9ZN09mOGc1TFozNDdhU3FFZDgzREcwZ1g4QmM3WnFDYUF3RlVvWGpFSm5ndEhoNk04UmI3MUlvaWwyU0dqcWxGMnV5dXVrbEprajBqS0FBdHJVcHE4cUJveG9WUVJ2USsyZ3pFWjlESUNPZXVGZkhrWXNkK1k2K3F4d2RVNXNXcVlta2V4LzN5VVhoc2trbEpYM0xjY0RFakZoZXRIV0tyL1pXc2Njam1ZK3c1NlBPZEdGdUhzYkdTZWN5TC9QL3ZMMFVMMWpRVFgvaCtXM3k2cnJqejRHNDlFblZ0SWdEUkJza1dXd2NOaTgzY05CVzVYaFhtR2ltTVh5WStkb010NlFmcFZCQjNNVnN0aE9CZlE0NmliV0p3WDV1WjJCcEJEZXlJZzBPWWVQeU8rY01Ka1dLdWlHWWlLMW41WFQwblQ4SW0ydGhjeUV1VjZjN2NYVXNteEpSWFg3YXppSGV5aDBGOW9KRmJOUExVZTV5bkw3bHRqV0RLMzJqSDZ5bmtGKzBPbmdsMnVQWURSbDZ5Z3BWTkFkNitKMTl0MEovTE1pNG1PMTloZHc2cTkwazBxU3BaKy9TeGxNMFE5VzY1MTJtRlhZRUZnWUNxYlRzSy8wYlBxa0hCQlBtVSs4ckRjWllaVlZiY2dHWjFyZGZId2FxYXd3V0VmeU81SUw0WVNtNXZLVmtpUXI3WnJUZmRaNTFYTndFSDlxdDZ0cEZhYzFOYjZUcHlJV1M4dXJuSDNNMzNFNHdoeWxzM0g5dVhhbkJVczJLaGhZYjFjeHdnZnIvWG8yR2swdWgwSGQyNkx1cWlYVHREcTM1LzVBRlI5OE1EVGFrUFVpVXhBZjZVaU5IVU16Si80WVpZOE1PS0tKMnY3Witqa3FDaFBqM2ZCSzdMUjRLYWNVdGFCZkhJSjdSYit5NmUrQzVKVHdvZkI1eVhlbkNSU01pTzZ2ek1DNVFIa3NXZWxYa09PTmQyeFFmVExXVHNxRkpGWFpLeDE2QXFocktWcml5Yyt2U2lyK0dhN1R3NXVMaGlVZDZqT3ZNeXBhK01CSWM5M0tvRkQyK2RpVlF3ZmFmVFRZMXcvUk82dTBiWitrTHpPSnFTTktUODhPcHd5VmpnWlcwVGVRYUNqM042Q2NueTBqUk1EcVhRWGxXU0l3SkNRS0NjUWFpMnlNM3ZoNTdObk1KSDQzMjJ3RlV5eWIzVCtKaTlZNWJxUWh4cGRUK1YxWGh2ekoxU0FoNmRzdXFLL3VHUGRSdVRaMGkxL3pHT3V1ZE1wdXFJSFBGaEV2anpJbHNUYkx0ZTJqOFk1VkgyR1hKRlpYTjhWWkxCbTA2OHBhRjVINzNTSHd3V1VQUEw1SVJ1aWZrSmhyWjJRRksybTlzRlllZ1FSMW5yR2dic2RUNllldE5hQ2VWZUdTMWN3MjMrOFhYMUR2SXVsTkFaVExnVmRybWRmQnp1azBKN1VURUtkaEk1azhFWXViVFdvV1V3dXg1WVEzejRkQzhkVDczbHE4anFwOWNNU2lFTzgrN2oxNGFFelpiN2xEZVkweXBLR2xqcG1pSmRuS0Y5bUllSW9MS215UHZBVnBDSFlZbE5jZWlrUkl0dTJZYnc1bXpVU0tjMm40b01GMzQ5N2JyWlI2L1NOR0tNT0IxSVM5RlA1VS9iNWJRNVJrOWp4bVdDODh4TnF3VHVlVmZXYS9TdWxnWm0yaW5CMUEzMjNVYzZUanB1UTZocnA2YzludGpkVEREdkZ1WXJCUjR5NlRuWkY4RVhuTE4rUk11YTdrWFhIaGpIbVVkU2N5eW13cFZ5bjRzUlFkNjJwSXRIdFRpL1B3M1VlUjdYWWNqdzh5SWdBekFlbVlITWh3d3FQSlh5MnI1MmVpbmpxWmZQNklPVVRmaENTQkxzeHNVZzdTdVJnTW8yaGR4RmhCR0xxbFBrTHgvQk9oME5UUjNWbC92STZzUGNwQ1V4VDFMTktYTUpTak9DNStFQWdQNk1BT1llbUlxeW1BazUxTlVJRlptbTdRaS9kdHh4Z3MyVThFZ1Q2d1YxMWp2Ymw3S0xXRGFYblI0OUgwenJoQ1YrNWFFekJ1UVo5M1VqdHpnQ3J6QVpvSVJMcHpKZzJpUVZ5cUM3Mkw3VDVsYndvOTRXRjQrQ1R4YTZZOStGcmJGVzBDbUVPTDF2RnhXVXNXR2JTanRHL013MXV3ckU1TUp2eTNhcUZmZ3RhcG9ydXplRnZZSkJoVTZIT2F4RUw2UlAvQjVObFliUXQ4RVIxU0Z0MTNIdmVVQkp4SUlzYnJlTDBkNTUzYTZYck1ydmI2YkQxcUdlWVN3Z2J1UHQ3N1hsb3l4Tm1vWGFucFZTVW1RV2xFa1hsb1dZVGQyV3ZsSGJDTUYxbWdwT3o2SDRBemw0WDRIa1BzR2trOG8yM25zOURKTHZNQkZ4dFNIQ1V5d1E0N3hPTGxkejJEam4xSkdGNjRKbFZwOHk1dHNlQkJXNXg0cE53OSsrWGVYYjRUU0psMXZPY3FKSWllUTJMS0dHZjNqZXVrbmZkR2wzQldBa1pHLzFYaTVHeEdKc1RZZnFGVGVIRzFsNDI3UklYWXNCWEZac2Q0aEJpd1F3RTZOQ2NqajdYY3FEK2pWNkZZNnA2WDJtYmRJdGRBcVk0MEJRcjhkUVQrMU02RFFNU3lnY3pZVEo3SVVwN1pUaXBPNklkQjdXcHRnUFFmazgxYWpINW4waGRUdXVYZ01pbVY3Z2c0Z1FkTWtLQWpDUTF0L1lLbFNCSjlUN1BzWjBmN0oyOFVlV2pMN21hSXdWdWVVUm4xWHlIdW9nYWJHdis5SVNEQnFnaldKQWJ2ZXJKemo4cjh3d014OWs2RkQwWmtaRW82bkJoNFpKUldDVUcydTJYOXFBN2RJeHQ5Mm5UWkwrZTdNd05sRnRuME4yd0U1dmJsNktDTzJFVXMzV2FLSWlHaW5TQ2Roa3k1S0RYdG12VDNRTHZDczM0dDFyM0NOVk15alNGRDE5MVBaQUdJaTBYdUhsTUd3enFTTmtZRjRTM0NNRVRVTjM1Z2xjdVdwU0pkREVzcXRUM2ROcUJnbjgrT3dFWWM2OW5qSTZPbG95N2ZhSkV0VWtWcEZrQnp0S1BLZUFhZU56OEdrei9hZXpEL3hJYmFPK0dKajZxc2g0cGUvVDJicDBtb3VVSUg3ZlhDa0dOdjZ6eGdsMFBaRlVsRHN3YWlGUytUc09aQzRhbWt3S2FITHBjQncxeC9Ncmg2ODNQc2VzQ3Y1TWw5ZFFZRHVwamJpbDZCOGRhcUJLWGI3SmVqRjZOS1prbjVoem82cmVISW14Umd5akRNVUw2QmFyNmtaZHI3K1ZZVVl6WngxZk5ZdUZybGl2VWp4dWc4K2g5eUtBVWNyUllYMXl3VzBpbzZMQjdteFJSZy8wZjdubnNjQzJkM0tFdnVFRXA4dXhOd2g2d2N1K0ZlM0wwS1E5cXNKUU82NElrUVFxU1VBTHdsT3hMdGVUeVVzY0VjdTUycEF4WndjZ0RrNVpyVG9WNHJ6TTNMVEo3aXE4Znd5LzZBTVNsSGtLaDhCYkRVM3k4bVZ1czZjRTRSQ3BzZFZZVG4vQUR0ZFhzbEo1TDVvT0R1VjFSdGliVDhSYzQ2YXZWbVBHQmgxRzVjckFlbTRqc3FJbnZ1eEt3bU56TTJSQ3VDbmxPK0JqUGRZai9VNndIek5KakRKelRHbUhtV25uTlZySkJxOXhkd3k5Q0NBRjlkazVKbFRlWkZwNmoraTB1T1RVbDJqdmJ2RzdYSE40cVhsRHNFRkh4bjY3VXlOZUYzUVFUWnU3L0g3WWloSUJzaE5wdHI5Rm81UFV3cTZJV0E5dmgwWTNSOTVOMDNadUxWdFhrTnZEditPd0xkTWc2NGp2NUtjRWxhVFdvK2tkVU1IWkd6NlkyRmxScDVWWFVqZHBhSmY5RFB5QVJxN3dNZzJBODVNRHNVZ2JtdmNHRk1tQkRQOWZKSGhqcUI3VkpqTy9NQ1FPTlBlOGhsQnRYL0lKcFRXOGhCRFJyOHlBRUtqSUcxZm9OT3JLZm5MYTFaRHltd3lMWDdwVlV4V0RaVE42RytweGRXUHlVK2dkTkN1aEpxbkppOG8yYXVrTk1lbUVPMVQxNGtiL1VRcGNrUmkxbFd1anNvaUNXcVA5TVc0amUwblpWNnhoZ0JlNkJTanU0ZW51c0g5Q1FZWlhLZ0JUVVVQZmM0TWRSdDlmOWRqaWdxVDdWUjBKR3hXVWNLcUYxZG9mL2VtUCtaZ21ibzVrUE5id29SZnpQcUIrbzczZERiU3JxTDJRU2ZwMFBFaE1EMkxmVzdOOFlIT283a2x1blZ5VlZHYzdLZnE4N2h4MlZBb1JpNW5qd3VCWE1KQkZoL0lydlh0T2pkUklWTThick9FSTVYNnI4S2lPQTRWK3NjUFA3d0toNHBPalE0YURTbWRDYUtHeUNnM2xsWm9aVVM5eUp3NHhkeWxoZXA0THNPL3p6cGpkVlJuK0lIbGR4R0JRdzB4MXpTMGdVeHVyY1pjTXFMMW54WXlYK3BaWDdkZmE0clg0c3IzZ0tTS1VTRHNoK0NxSlNxbHN4bGRjZmhTSlJNWUJjdUtZa3BVeThkbm9KZERLVDV1QXNLV0lmaEdhdnVxTXhGckYyd25ySUl0TzRDL1ZPMEtQSUpWRkI1VE1ITmlrQWFXZmd5bWxXaFVMd3JERXIra3g3YXhaZ1pCTVdzcHN5bUh2ejRnRHYvZkZJTGgzTGE0TlhwZ04xZ1dGMExwSWVXVWpvMElOVXJMTHRUbVpMU2wyanpXRUdUR0xTTVpJSjlPUW9FcXFmTjlab21tRjFQQVdFUGV2WDVIKzFiSTIzV3hacXNDY2Y3UXpTSENNZmdpNGZvcG5tRGIrd3NxVTJOT1pCdS9lUGdXMWxlTm1mYWRnK3FwK3VKUlo3WjQ0blpnRWhpQm12TjYzd1FiaE9wbGQzZHpTbGxCZDlkeFlUNlVHRktrbmNLR2hBWEJOVEZCWlJFcEhieWdRaWR5bGF2d05NaWRBdHF6U3JiNWJLRit3UG5YNVZ0Y2E0cGkrMksyZmRlbWpBUjR0dEM5K0V4K3A0aDFSV2FEc2tmbyt0YVFpOC9RK1pPbCtGdU5IbkRmMjlLM09iRlpqaTNQeEM1a3B0RnVkcytOWEg1WTU4bnJJN0JTMnFaeGR0M2NoR3FCcW93NXo4MDc4VDFHclpRbVl1VXd1NFU1Q1BrbVF2Vnk1UGtmY1NUOVJLaWZEK08wTGl2NzBTZW9pSXpJSE5qYmFvNWlwUlAvUnNGZjVQMzk1M2cxY3BWNStmMlRjQnlJcUFZc3RDM2hpdVFmbkd5TElRdHFiYXIzQ3ZYRC8rbXJEQnduZVg3UmtCTmt3L0IzejM1djJNc1E0TDNkaHpHQ0NRM1ZpeG1hM0VvWXk3dmVZdmdNRGVqNXRBdkUzMXhyclBKTG9kUlJQYUZoWVFzWUVqUml6Q3N6U3BaSkpQcFlQb29uRjFmUE54eWdBZURQeU4rQlY3bFh6dE1YVy92WW5DMHcveGhvZ3NlL3UwVE51QkdONXgwUytRbHRtcEtyUFVyWUNoZWFpbGw4TzlEMW1BWjUzTlcwa25va1ZQaUg2N24raXdIYnN1T1g3d0xTN3ZLNTVNUDdxNytUVXQ0V1JOUGpxUmI1bk05WlI5NzlYdlFjcjF4eGNyblR0YmpKTzRiRGYyRTVuZzBveGFPcmQ2VzlyQzJvOEQyd1BLMXFYRHU2UGN1dVhBd0UxeU5JUzVVU0pvSjlqSTZYVG5LSmNqVnNZMVpTK2UrTVEvNGpvdHNkdkFlT3FvUWYxUmFEa3ZnTndDUTc0RUZzY21XaC9SK1g4NWJnR1I2WitocWpGTGNRaUh0YklvRlZRdEt0ay9ESCszV0J3dEE5QWlxTC9sK09mbHRSZ0Y2SGdxU09tVjVwOG1rNkxuV2kvWWl2NUFoZ0dxSHM4ZmlhcXVuNmFGU0lINzI4dzRDczlFL0ZiK1R1Qzl1ME5Ldk91WnU3aFZtSk9lRFB6eDgzZEpnd3pTZXdsaFVnVitHLzNvMlQvRU1UcVZzNVZZK2RHVmN3cXFnZlRqMFNOUVZpZGpqYnltQUY0TjhjNWNHb2J1ck92WjArUnZveGE0RURLdCtBNEh4dXBWbGw0S1dwYndkMmdWR3Y0R3l6OGRBZnQvUVNOYWgvSE5zV29UelFrVDVQVWVQNzEyaTkxa2I1VDkrV2YvSWNGV0JsUFhUTFViU2FTU1NPZVB6YjZOQ1BxWFUzWEZPRXBjSnNlNzlaOVFPS1BYbU9kcm02eEc2cUx1TnZJeU1pVnJYRkFNOUdWbTM3VjJpczFXdytXNStIWlErc1pXM2FERmpDT0o2ZUpBNXRoTGg4bmJUZC9JRzJDWE9rTXltakhabmlvK09qMW9hVGRPNEorZGR5Rks2MCtwQm5ESFJpWExNcjlyWVE0OUVGN1J4Y1NwWURaTDFqWTBxdWkzc3YxUVV3WnlKREhGYlB1N1BpK1BhSnN5NDRJdEN2SDdsYlJnVlpBWWRyeC9PcGl0L05tQzlLL0xpQmpvekxCSnZpV0lRYmFxQUpRNWl0KzJjdVQrc3hVQjYyWXphQW10YVNpZFBmZ1c5eHQrZmJqWUhzRnhaMG50eGYzbjd5a283bUhmZmFKMm9WRUZxckRvNTY5NlpyRkkxTXZOZGNRdHBYbHplWWRJT2FQVk0wTjJ0NFZkMXJ5NzgxbjZqVGRHOW51eDhsSEM1RnpSTWhQK3c5MTNHOUYwWWNEU0cxUEEvQ21jTW4rTGtyYW1SMDRlV2NCMk1HdFhabnZHSVFPa1ZSMnFtSTh6QTRSZlY4UkluWTNCTHF3UTcrVFp4NkI0eWNqM3pOME1KVzRlS2k1M09WdWNndU1TNGdOY1RRWjZFRVVrcld3SlltR2F3SWhNaWFZZTBNaXZxaXJkV0ZCSml2Y1NWY2ZsZW1CVldudUVSa2w5UHFiY05WWWpRYjhDR0lJQjJRVVFFYUI0elVtNysrZENjUFlTcVJpM1l2cTdvczlXQjgrYVUyQ0h5L0ovNmFFTVd1ZGF1VUtFcXI0TGZwejBCVEg0dkJNU0N1NzQ3QXEyb1VvL2oxTmJaVElFdFhER2lubTVmQWE4UVpML2NoenZXNlNOMGdPTDlhWGtxdWtNV0t2VE1QWDEwajR0UzhORmVSeVpSRHo4T1BkWldrTmlBWVMrYWtQSjVER2NFMk1raGk0dVVCc1pvaVVjczFLd1ZScTZBdWFyeGZhMnFjMXV4SW80QWMxLzRGZzhmcmE2djIyOU1iZjJDcm1qRFFCcXRlRERvNnpIMTN0cnd1bFlrZ3ErU3oybFNKelFWdmZMVlF2Z01tNjA2MHlVWnlrRmprZFhJclM1SXNvZFROY2Q1bENnc0Zobit4SmxMSjV4VEVYeE8wNzlCMUFXRk1Xa0J3QWh3dDlvUEFaZUhRUW5qSmhWblJ6SFpnTmdpcll3SkhTSU9wS05wUStYdEJXZGF1Z3B0K2thWTBNbkkwMGlka3k5cnBjd0VaQVRRWkxjZHpKVHhTd09EaXhIeTZUTUhzQUhzTXQvVWJHZkE4RWtVbWR3a3g5cllOS2tJR0VEQmlIbHA4Qkp1L0puN0xCUlhMcUlTbk5uUjdWSHQzbGNwVWt6TlFGc0cxQkI5NlZodFVINFM2TytYeHZSWWRpVmhSWUNHYm9NTkdPdE82dXZsbmgyK1JBMnVCT3dNOFNUaXRKb3lodmhycnVRcmNDZjIzcXBGSzd6QklMcStvNlluL3R6bGtsUmF5c1RwTCtYNWE5RjlQNWdtSGV6RGt6bnZ5SVdRNGFSaDNHWmhzY1V6RDZlM0tkcGhLT1NnUWhiN28yWWh1YlZwL3FHcUNmalpQYXpsNzZwUXRZTExSNUdsbmUvdUo0YWsrKys3VUlra3pUejgydUtLbE1qaitnY3U1RVFPUnRtWllTV05Wa2lnUzJsckl1eHUxM0p1YW4vSm9XQzJWRWVaemU2SVBIQ2E2SUlaa214U2hWSC9vdUhVS0FXMG5VR1VSVzFNblM4eU9PSW9lOFlUSWZJSjVRU2FJaFdqSXhqOEhGVlVOb1MxZ3dzU1o5dzJySTBKUFJ5VTZLaGxHNm1YZSt0Znp5NWVjV0IrazlCa0xDYmI5TGIwMnVCU3c2OXRwUGZhVXU5MWhRd2dheHVUQ096U2h6TThsdFF4bTZQU29FNTlQNVBEdnkwZ3EwQWV0VEJCWjFZMGRSbEwxdlpXamtNc0gzWmJ3UGdiMHBOdjJPM1RJdmtkRnpDaTh5UDUyUXV0bUlxakJONDc1ZUFMMjN4OGhYSFB3dVg3MUpZajdkY0F6U0FpMC83ckFwdERHaVVQekM0YmluM0ZlUmlpTnM3RkxiTUZaZzc1QUlWSmVaVzc2UFh0Ymo1QzdlbmlwTysyRFVPNVhFSXJVWGxTK0RHSEJ3RUFYNjNkaWtzbjlsWEp1cks5aTMvYmxMVnJURVNDR2V4bGZOWmZteE01MnZUeW9va3QxZnQ2eUxqNnFWNUZnY0NYZVpsWjBsSisyS1MwcFV4Z1ltcWIyNUI5WmhYVmNHRGVkSjZxZ0psSjJncDkza1EwU1UzUUo1YzQwM1NqbXYvRld6TFNtbXI3dTkwTGhpN3hTMHVPZkhNd1QxWlNlQk53blpjWHZoYTFVV01kMmVzQy9DOUVlRHI1UmNlV3dySlFyU2hPU0pBZFU3NlZYOHlha0IxaFo5TjVicnN0cDFPdUxsZGdmeVlVT256eXNoQ0ViMGZaY1NrK3ZRZzlITk1qRHJobjZvQ0xNNUF0aU9nQ29tWGZhSXpyU1ExQjhyVXVuU1RKV0NpY0pPL0sxMjNMYkNnakZRdi9yZ21IQTAycFNZU0FhcWNrbUVhQXdWRDBWVUFKZ3J3RmRDZWxISmJUZVkvQ205WWFYblM4ZEZ6dTN1dU96UkpEQ01ZVzlrb1B5ckJCZ0R6TEFoZUxXRlFPYTljb3Z3cWt5SU1QNnR6VXJBclZlRTVLNURrblZHNDJsd21EYjBTRnFBNDQ4TjAzTmJOVU1EZGZRTXZ5WWt5OFVhVU5XTHRhdjk3REllTGl5TDJqT2NqQzlBT2Y3RU5rME4wczE1dUFuRkwySitscjZCWjk2cktESEJjd0RhSlhVc3FhU1IwZDBRS3c1N1k4QU1OYWpmdlhDMlQwYVNYQ3pYMm5iSko1VkVhQVpMWW5QaHFnNE1yeDRndFJXSWdaMDN0eElnWGU1YkJHTnR3eGpKdU40S1hkRmROd2ttS0w2eXVwSjhMRERuVlN1a3RnY1lGaVBqL1lNRENxR1ZseTJ2VmZ3NmU3UjBtbWxmdTBJN202RlFWUDJucGkwNXFCOSt2RUc2ekxhVDllbTd0M0dMK2VsVHBqZXFETCtGdmtwdVd1MUtZTnNoT3owZzJLSi9ZNWlTWEpGWnkyWWkrd1pBMVBMcEN5UnFwVDB3UGRReElkN1F5L1E4ZW1aOUlKVGRzRzZ5bHoxWXJpZnJ2ZTd3eFRqUmFsT3pvVjNDdXFMREJDWWViRFVOaXY1UW5Nam5BU2FzL1Vac05QUXZFdVg2YmZJVXJYZ0ZiV25FZzcyTWZzM0tZS1F2S0czUEVCVGJEeU5UcUxWcytmS2syeE5DS2RhcTlNcGVXWjZiYkNqblNWc2dHeXVPZXFhdURTa0hqbWxhbUhXYzhvRkF2bTVnRnVZZHY3MUhPQUx0RW90NjVJNHgrZXltSEtLVGRZTVViUzhKRncrb2h3WFdVNWNudUVkNm9nMEZ4SGpRYlpGQ00zb0VMT3hUZDFTRS9zalpXaHhQdXlwSU94SGhSQVFXdjZxWW1oZVY4TEtQc1pkOVo4QUoxTXE5bmg0ZEV1OERoZGRrTWJRb3RxeHVUUm9KV0c4NXZJMjFNVFN3Q09vN1B0MGROQ2NtdmJYUUxRajEzNzJhSEtXUGRNU0xReFAxaXFBdzlZdENiT2VOek5XR2JBOEpPWWRMQ2pqM0pPWVhLcU4xeUlGNytMMS9DOEVsTk02T0ZzSnZzYmM5VHBES3daVzdkQ1J3OUhFK1FTVElxakZmM21MdTlaK05PZlRObElUWStIK2ZJY2RCcjhlRlVUVlFMaEZxMTE0Zm9yVlVadU9DdXh3RkhDb1M1RzBvSXZ6aEpla3RLVjUwRllLQk4zLzVBVHJpczZLcVBETjRqYXFxWVZUNDNtSitqRDg4dUROZGx0VmluY24xMzRyUG9vQ1lzWnoyOHpoK1A4ZkQ2Q3ZtTk5zTmpBSE16UUJ0c05NVUo4dGxRZnhlVnVoMEFOajJOc2xjek9TejdWcFZnOERZSm85alFZdzFZNGcrS2E5K0phdUJSeHVNVlAzSnlNalZyOFAweG1XOVJETkFDQlZvWkFKblE0M0xBNmtSelh0NGNOM0orTENFVEFyZVM1T3lQVDJvendFTnMwYjgwdGNTZnQ3Wkx3bVM5elVKMXhFdWdiRmRmSUxRYXl5N1lrV0l5dm1PWExtSWRYeFpCczIwZTI2a1FsUHFzL3pScW0wMG1IdDZNeWRaOUh1LytOZncvTkt0UlFCM29FOWU2K2RkQUV1SmJLZFdWdERwMzhVaVlITWtZTW8yc1ZncDlHVVgzSFFNL2hYLzNjZy9CcjI3UndkWlE3Y1ZvRkNPQnpnTTI5MlZsM3NmcFlKb0loamF0SGc2c2cxeTFTaGNORDhtdkRRbmR6cXZNQ2xsNURuVjJpVlFVUWs4S0ZpOUVwNDJ5aE9NdUttOTNrckNqVktEUlNla0lrWTg4elNjLzNuOXRCaDNEcjJuZ205VlZCN1RHNm5TUUR6Z29TUlZtVk5LdE4rY2wxZnFCT1g4TDFNVEdOcU1zN2JObncwY2xHSzA1Z2ZCTTk4MzRnUGNTZm5qNEhqS1VMV2JTblk4TVlKNytmaFNXcFNjZXQ2Q2VVaGticmFyRDM3cVNNQzVlUXBsdE9ubEUxeVlrdk51OC9DcXlFMVZORitWbzgzRnAwaE5DWHRiVnZzYnc4SFZORFVwR0duUDh4ekYxZ1lUV1JsZkpTZk01YnYyTnRRT0JSWjlYMUZzcEdJcVVxNXM2THBucG9FYThlTE9ocWtXUkRmak9ibjhHQ3dBeW5oK1RJcmNkUUtBU2JUOXNXRU52SWFuM1RDSVViMXgxWGd0b01FVkEzU0N2SVNLZUZ3bU9HbFdpMVY4NEJ5NEJhQUkyVTU4YmdjbGNza05RVTRycUpFM0ZHUDIzUjBNMnMrSnhlQS9xQjEzc3dlNWRZbVU5bWgzQWsxQnEzczZjUFR2L0kyTXJtZGpzT1B6MVpOb2UxR2ViS2xRM1NFcVJGL1MzdE1mM2g5YiswRGw1a0FWd2cyUVBjTG1JTUdRMEhndlZ2VVlYU2RHQTJYN3ZSTHU0Zi95UitCd2t2eUdjcnRNUjcwVXlsK0pDSXBsbGN5b1FvSlZGUG9JT1Fkc0wwSmRnaU9iWUs2Q1lKT0lPYStqUFZRQXVneXkwalh0YjlKbmQvRlNQTlpRbXZicjB4ak5tRElONm1RazlXTGV3YTJGOVVaeFRqODF0b0FCRVVmd3prbUhVWGx1amQrb1lleUxMT3NlOXpIczVlR3ZWczlQNzNOMEQ1VkdxS2pJTk1uUDBsMmxFRkh2ZG96MlRYVGlFVlZVanVMWE8rRmtlaGh2QXR3RDFib3RnR0xlSTZENkxHdXNwQ2hkaTdiSGlUSDRDM0lldXZCaEFFQ1lOOXp2SllSNXVibkVnUGNVNmVMNEdNY3IwRThHY2hXYWVRbkxxTTJUUTNsZFJlOEZva2l1Z2ZyWCt4MWtiaXVhRWVHYi9GVmpPZkprd2FCcHE2U3NUSXE0VDBMY3ZJdGFmTS8zenRXT2pRZm9VSzAxNENiQTBUQlRZdlAzVkRQQjM4bXUwNUFRSGZ0M2NtQmU3M1JlenM4Y0pscFJCaEU4Qm1hY1Z1bzhmaTloQkdLNmFqYUpiUTFjT3ZjSzZqOTJVVit3cFFLYjRkQnluRFRBSnBVNVRwQlVSZzFTeVpDeTdWWi9iTGkyMHc4K1dydlFuQTlNbVZ6emR5VExxWkcyWUlLT2lBTHVOdnhTUXNWekRubjN1TGZPa0JhYnJtdUVCSWRDMGtCT0hmY3ZJQ3VycDd6MUNjTDBSTE91STdkNUlIUXI3eEtUbVcvT1ZocUJYMVpGWmNKdUwxSTl6bnlEZ1NPa24rOVVIc3JQOXp6d1daNFJxQUdtRGJ4Q3RHRzZ4WXJDdlFFMWQxK3VZYU1KQ0xpRXlUWlNxSHIzdzJrUnViaHdpN2FTd1dVQ2VJaFdBUHJEWnMvdXZoZXhxc2lONXpVbFBpYWd3T0hKenh0cmJKZ3B6NmFjWjMzK2E0S1lSeS9hNGVLNDJyWFJwUHRQTzVaK0F5MUFBYkI1dExTcVBmNE9vMk9nRnJPVWt2Qld5VVpLN2xpUEdINm4waElpY29MUFR1K1BuSjRDNmNmc1owRjlHdTJSN3N5dEt5eldFUTd4Ti93QlFoT3BHNlFBMXNQbStEejgyYVluTng4TThoSVhsNCt6Q3RWNXZ1ODhSRWdCelpaK2ZUeldHTWM3UllWeWtOc1JqVHFXeFI2UCtLVVAzWHlFL25EQ2U2ZWtYUTg4NmJiTGlQZTlUZWZxdDQ2TVUwcmszNkJRcm8zcHlyTjRCZUpaTGx4blNYYWYzWXpaT2g2R3BiMThtZlBQY1lBN24weS9sZjNIbGpBZjhCWXNLOS9kK1NOODFGelN0K1l0RkV3MnNyUHVNZXVITXQrSGRvdktsaTRobTFGeWd1L3I3NWMyQWN2TE9OT1hNL0tvaW9SYjB2dXFDREV5MXVtUnhzSmZpOU95NEVBd1hNZ2ZuYXhqa1FiMFdmejB5WFBub0tVSDArSUdPekd4ZUxITFloT3REa0pRTXEvMkZRSjRRdVBuRzBndTZIU2p2SGNKYW5lck1mREpVYlAxbjU0YkhsZ0V5U2E5ZE54bVV6TVdWMC96U3grMy9ESFVpczBzcmhNYjV2NUxIU3Erdmw4UXVhbVFQeDBrdnhYS3ByOXlwa1Z5VThWUmNwZmpBVnpCM0FNa3kzNGM5K1NrNEErVmtUNlBEYlhDSklVdkgzUkduSFB4amRqdDBJdzNvbHg2dUVOS2tsZmdNdU9OSkV2SXltRGhFcWx0SnZwQjJ1bWZzVVl5Kzh0K2Jva3hXOElQSnRSRllCdXNLMjVORktIcE5xdXRhVlF6dFFSWm5idEVhenQwYVoxbUZZMjZXNlQxQVovaytobi8ycEZjN2lrU2VzK2Zoc2dCZVhHa0ZkQVFlOEN6QnUwZnlIWXBXSWFaWXJYVlNJczN5V2lNY0dIZ0I4YVhEeU9EVlc5VTJ2YVhvY0RJa1FzUEpVeUlNU1lmWHZtd1JaUDc1Qm1Xd1hNdDA3dmlGM29xT3FPNlA3U1ZGKzFLOFU1eWNQaXAxN2ZZdW5VSHA0Z2RPNSt5RGpEZjJUcW9MRUpIWTZ2UFRZWnNOanBRR1FHTXZYTnJma0V6NmxTSnBFUGtiN1RNV1dPWFdVamIrbHhjSTF1MHJCRXFYMmE1M0kwNkcvMVdwOXN5YThtVWlyNDgwQW1iV1VUTEhqWFpOSXNMNXpMWkg3M3V3bHJsS1lMMEQ0L3RTWVhHa0psbWRZMnZ1N1d5SFl4T1dMSmt2dzFHWm5lZi9iOUJNbk1VUWlNYkQ4djdkSFNNZHVMYTM5QkdjT0tocWNwdHpUWXNjQW9XMlRtMWQza3pXN29lMW82NzM4TTh2SnBBOTMybmwzelpkZHEyVGUrM1VGaEU2R0xndGNNUnQxL1I4NEJrcDErWXQ0UlBFM0Jibml0L0t2aGVkLzJwTWNzMnlmSFN3NGNNQlNyK0dLREJCcGV2SStqTzVyeXN4TFZEckRjZ3lxTHpwTGJ5S3RCOStzcE0rK1NMY0F2RUZ6QVp3VHNNNU41QVhld1RIeG1yMXM4MWFHVHZ5bDh6Snpna1pqQlZ0NmRtWkJlMUY3d0JGcUI2aTI1cmZ3Q3g4Z056czV5Ry9FYUw4UlBVZ05GSi9Jbit0MWlVUHordENza3lKdFl6TzNvQUdJSlRXdDBZN3dJVUEzMGFoYVY5TS9zY1IwZkNSZEdOZ2JxV2xSdVlLT01nS1BQQ2hucVJUQkRUdXpVb2FWQldHTWtzcXI1bHJzU1MzSVc1K3JZYU5zTUdZdHZrUHU4MnIzY3E0WUREck1yWU4vSStJU0gxVUVudlZDQitzSWZ2NzRZU1pXbnlVdkw3b1ZOSjNWV2xBMlBCa01BeHM3cVJWNjJXTEZlaGpqazhWcFdYMHhnWWY5UTBsWE00OU55WlRtY3VTcko1bUwvejd4Z3N4cTAxdWYySVpxLzNEZkpidlpBeDlGbFNFSHlwQVlYd2dZSDJ4a1hmNVF6cDJQb205UytET0k1WHdsc0hXYVZzd1h4a3NhZVUvaURpVmt4bmRWVHNiWUdleE5vMG1yRFJyVmFWMzRCQkNxWGcrMlRxeC8xNEt6TmtsTmk1M2VJeHVhZ09UWnZleS9aVGpOZFFwNVZTeURMMU80RVR5TDNPcHc4citJWi9BNE9aNGJxdytpc3VDNzJBTUZBRmgvQkZ5ZCtVMk90K2tWV1E1ekJ6VnVnMEs5MkNMa0JzazBEbkQzWWFSeTJaclpwUm9QRTBMWjhvc1YvaUVZTmR6VytFV1BvalJReWRiOU41SXk5VGl1UnF2Nk5PNEtWazFnUm1TT2s4V3JnMWZ1eEdadVhidzl3UHpVbkZmRGtjRXg5dktxZzRuQkNUSW5TWEozZkE0ZjB3c3VsQTMvMW50a3hUYU1CTWtoWndLTmdtRlhCMTg5Z3JpZmNxNGMwZDlMenpNYjZ0dmlwNEhoRk9sM3h5RHRVT3NZL3plMlRqZDRtT0dKWmVtNktyZFZYSFhFMlRmbEYvem9EQW0vbU5tS0lnUGU3YzRzMnovZmRCK25DdWxxY2tGTDhNSUg2aHVONWh0Q1l0TlFTZzZqZE4rNS9FTGFzd2JOelo4aEYwbTZTdjVWMENkcTR1cUlUUWg0Z2dENjV6VkhFQU1JMW9XcExoZmkvOE1LOEZLbXBMdDdaMldiWFRVSVpYMGwydXA0anJ2TDRXYjZDZEMvS1VkTnJsRGtmS1N3NXVGY1ZkcUpuYWFJdTFTUjRTbzVXWEM4SERTWC9UVVlCOUw4cU85WHJKK1pvaFR3RGZiREZOaUFtdXVaVEIzV29ud2V6WkpNOHFnbm1qTG94Q1FDV29nOW1ZL0hSUFYvbzM5VTFKakNMYWZNTWJyeFRvY2NuQ2U4Nngzbml5dDA5Ti9oNjZYZWRtRDJsWTRJRHlkUjcxNDRnc1cyQ2daWHoxSlJUZjRTdGZ3ZHRwMkt0WFBwdmp6UWlFNUhQS0RVOXY2TTdJTFV1QUtxMWd4NmZBZGxnU3JSc1JFMHF6WjAvWDdzQlpaSUtpOG96TzE5K1ZmK1ZXRTd1c2IrS3lOam1BOGVJZGZVV1ZQc2dreHhsTU5MSjVxZmJFYlN1NUxYeE5RWjVEVGh4OG1ndTJTbGw4MVRaaHF2dzlQOGVLUjBqa04vUzdSdmgxN1BGNThvUk9qSHFOdEpZcDVmM3JvQU1IeVk2bG5lQ3ZZZXJBYjY4MjlEcTFlZVJzUEJJWFZJbTVaZmV4ZGJzRWpLUzNScVovZWozL2xCbzNCanZCeDR2WlB3WnJsdCtDRFRKblNpWExzVFlEbHVNL3ZrZjE1L2VxZkZIa1cyMVlMVDRzYW4zWnBkSFM1RHBzZklVTS9OV21kWWRKY1gyRng4b01ob1h0VHdHWDFLcUxNUEtQN1BETkdxaUxvWkV2MjFDK0VpRnh6aUVPQk9KZjMyT05QbmdiL01FcE1LakRFZ1hUbzNDZTBzV2lxNjVWQlRtUjY0YlB4SElHb2g5ZnYxYWQ4bGFmWkdqNHJWaGZjQkdiRVgwQzYxQ1NIdE1XbGxrTTRvOHhPS3NPQ0MwUEZVaG9YOEFwV2NpSjdoNjhPMURQamMwbWI3NVBEQnVZa2JFak1RMllvMXNqNjdOdU54TTh5NnJ5ai96eTBnT0hVMXdkN0lEY3dIdjduSUVqN0U1eGQwTzdhMm9nV3ZRRU9kamJPMDMvR25OdUpUTThJMVl5S05vcWw5T0tVQnBnUVp5OHpUaDM2aWZZZDJSRGlKRWZXKzUybnNWTXBLTkJkcllOaWRYMFgzTXpKSmxwNHVjdjJvWWRhTkZiVHNIM2w1WGxleWVEMmxyK2NCcFBIQW1VL1BVOFdTQWNET3QvZ1IzZDBhS3pFRmZIRC90c3htL2ZTSk5KdzB3bnNtWjEwU2lROWlHbG5BZklXUjBsaEZDR20rRjhuV0JoTEljZEZWMTJaZllGUWdjY2grTlNaYnVpM3lKODl2eHVaV0tXcnd3NkEvaE1vU1dsVzRHdzFOeXhFeXVKQWp1OG9TU1Vzd0hKTmxyRkFPMG1tcHg2Nmd1K1o2cDR4N3JxOTRPcUQ2Sll6SURhSVhQc2pDUDhyTjNqOE5kSkIrY0JYWjlDdlViNDZ3VEFSM1I0UVdqYjI1QUlNeTdtd0RjZEUxcDkrcmVKbjFDY0FMYk55N1B4eGk5cVJSVnBSSTNyTFRLR0VtLzlrUTdSckNWb0dmOWhKa1d1bVhNTDloTDB2bnhwTTkzbmliMlRPV3BUL1U5ZUcrUXh0ZHdOVm5NSHA3bzhrMmR0WnBsbFoxWkJTb294ZzhUSDZKZXFST2s2NGpNZzN0RDFZYVNrbXRZQ2RuaVVycGRtaStQRmk3dUpWR2dVRzZybTNYZ2xNT3ZJYmJzZ3VadmhSSnNRa1BONjlWc3VQRms3akdLanMxWlNhUnJkOThtcDFPbzJ6M0FzQjZxbW1tTCsyaGx2WGFFcXVKSWhpOXgwS0ZBMm5mdHRXL2o3QnJnN3R3MG43bUZqMm1mVE4yNzFtaUtUSCtIU0pvRkxMdnd6WXRqTEdDaXhuWTZZOFdma2VQYzZ2SEw1VUZFRkVXR1pCcHZCWE0zeXBlMkJrSVRwRlRJSFkyRjBPbnFqZ2Z6YnVOQXhIQ05OV3JkRDA1aHhOa2xGMitkZEc3cE1CYllIYThqZUdZU25sZGVPRnRqOG4xYmhidVJVYmRtckROM2VWQnoxcmpPeDZsaU51a21lYXJRN1RKeGNvUjB4dXVaSVNNUk8rK1N1SFRYYktnU1VVYUo2OUFEQThoOWFTOHg5NXVtQkl5UklRKzBJVkZHWnpyY3plMjU0Q2VqMVRYMjJKMU9rSGR5Q0szQktYZ2lSM0dqaGVYdlppdDFmOVZOcUtYUjJvcWMyRExva0ZqUXZoVjlKVFl4aUQyckZOSUp5eWdWMVBFSjFLenNBbURZcFVSUzE3ZmlPV3M0VllJb0VIVUwxbS93amRHbTFZL3hzL0hEZCtoOUVSbi92OXlsQjc1Zm01SUFwaDViRlZyWWluTkoveGQwMHgxUWVCUk5PSkwvR1RqVkpicmNJR2lWaVA1ZlpQYTVraWNPUW1XNEVLNncxUC96YjFMbDc5dlIyQ0VSdVZxTHQ0cnJOSzFNQmxRUUgwUm9VUHpUOWN6eWlHalQ3ZERxbTN5d2xSQlV0SFphdDdzWWFSTlJNRTJyZ1Z3V2pTeFJtRFlMVTJkanJ1QlMzUGlCeGE4ZlNTdmlDY2hMRWhkNGxZa3d1NFpQVkhxRnVqQVZzdmNlZXFNdDZmNysybUducHI3T0pTRTNmR2FrUkRTVGViRGIrazg1VHcyeUtWeFFocnM3eWdIeWtadEpSdEZyOFBEUFd6Y1pscXMveStIV0xiNVpCRjZoeXREd3lacWZXVVV0Z1dJamdTN0VpL0NDM29Fb3BYWGgwbDU4MElyM1BZcTNhY2Q1MkpxeGV3eXBuZVNBaVU1bisrbkpYRThFWlpKNklIUXRGSjF5cG5SdzNabmJIY3VVazVXeXRFOHQyN2xKV201bGFnMStIQStGR3l0UjMzb1NPMVN5UTVhY2dOdTFjaDlzaGJ5SnpnOHhtZ3VrSjRoTCtsRW1Ua25GbEZZS0VCSjF0MitqaThlMy9McU9sZkhvOVRRODArdUFlL2ZIcGl4aVpHZlMza291bngzMWdHeWZaYnpsOGQ5dGE1NVNjd3pWQlJ4RmNPRFNWbk8yV1NYeE9xUTJnTnIxWFFZemVSRE05aGY1S1UwWHVyNjVIdms1blF6WlFlWHV3dmRsb3B1M1l0YldZRldvYU5hUSsrbkFrYnVtMWdFOERWUWUvQXRTM2F2emRTSEdCUUh6UUZhYzc4UFkxWDdHc0hCT240d1hFbFVyUG85MzQyN01LQnNPaUhBZkFTUTVOYlJWS2l4U0lNc2wvM003dGhjQTlxRnE4SExUMVNQN2l2YWhLbXFicGl4eE5HM043NGRVWGgwRDdvZWdqS2dqNWcwbkVtT1BOOXhXNkhLQys4bnBBWmMyU01VSSs4NU5aeWpWeXNQajdNUVE5dW1nRFh2Z0NsZVVuclhMN3dCblBOZ3ZGNkJJVXBJbUZ6NGxFWi9mOUdySE9HSy84NlZldlV4bFIrVkI0aFRzQkplRFRweXVLazlRL3QwaG03djBNWlN1bHgwWERuRzBTQm51RXUrWEllTmlkRFJXV0cxU016N1JkSFYyUW90TXpYYkFqUEdRU2dpNjJ1YmVnblpYbXArYW9aRVIvRU9JRThZL2VVWWp4dE5HWHJVNURsakJZQkJocTFlRDVRamlrWWpOZHRFdFgvWFlaY0NoRHJ6MFVIV1ZEOWhFdE8vZVpvY3o2dFZ2OFppSjRUR29yZzdUWHhaTWQrYWVJamFuQ3ZGRDBSTU54eXlRSlhRZU84dktNVmJkdzBmRXpQRWk4NElxT3RpRUlMTmNZemN5OGhqUlFEakRPSXpKelFnYzlYejFTMnR5WnBSOW1TNkdibkdHQmwvVk5PTitYRmhFSFpFVzJJTXozbk1DTE9ybmdqb0RYOFg3Ty9DZkhTVHhwampJRFNxeSsrLzBvcnU3dW5JbUtmTmlWK3BQWE5xSGU2eXF1bWFOcXBjaDJhUlVyN3g5M2VkZmdDMm9XejVYaHVwN09QMnQ3b1BPU1kzVVVzdEJaUy80Q1RJeGJGTmR0V1VNRmppYmhOQUlEMDI0eEw0cEFaWWJPMXQxSkYwTHNLUmw4dGJQRldSdEhuQ1JFUmF6bzVNTEkzaTNNQ0JGNVNoN1ZCZDJ6N2ZXY3l2RzFQUFZ5MUx3OU51QUJzcDlMNmxiMnRPTExaTkUrczFBKzBXUTBGSURmZXgyK0ROQWpjS1VGSjVJT2I1UUdqUzRJcE1Uc0FHQTVvcmFpdUVlNHkxS3JaM3J5bHJQQkNNK1FvaG1sV3NPVjh3WkNlOFgzV1Q4UFNxQ0VEb3dxWEl1NTNObFZ1aE0rQnExUWVMTzI5R3FzSE5VWndEZkpuNWx6R2FLZFhVU3dNaUlCVTRYeWtOVTVoUkhRS0J4M2VXSlEyYTFxZlg1YXRKYTd0ZjhlRGpwcnR3VnJLT3FkNjZMZnpYdXBLT2U1aklrTW9lQWdCZ1RvZkRSRGlVTXBVQUhNdmtXN0JRaFZhbEh2RnpSVUI0OGhtOUNXVUIxSnIyUWI2M1REVUgyWUhyeFd3TEl1NTh6SnhmanpnVUN4Q2dZQk03ZWxjT2M2MlFhQ1djWG9CcEdPR0FScS9iVHB6eHZUOWs3MkgwU243YnZ5ZWt2aWJrUXE4U1V5U1hqamltWm9XMW5EM1RLU3pzRlFPZ0JoNWh4d3FtZkYrU1hybmJoUXFhamUvWTMyMGRpSUpaVUJyT0tWOGR0Y3FnWUJHUklOTUhSSWZyYUt3UEtQOCtLSFp3V1Z5OVBuQ2lOcFJZa0VZTm1zaUF0SDl2VTZDRzFjamdxalFxL010Mlg1VEttamU1OTB3dHhnT3pFVll5VlVKaGUzSjltNUE3TXNsK1VoTmRrMDc4UFg5VFB3aEpPaGxBV21ZOGI3ZWlIMmR0aDRxMS9xRXJRc2FFZXNGWkpBU042cmRLcnRmbWtiNFhsMDNVWHpTZlhSdmk1NXZZTzFoNk1wUjJSTDgxRm4xQkdiTVpxRkZVdmNrd21va25SN0dZWldObSt6QjU1N3JGUDFEUVZsZ0ZDbFlRNHhLaTNlUGlBMDRodDNqcVhkd1VzNmlGWnVKbGtOZG00WitFRGZ0T0lNVkFKVW03aXdTdkdLcVhXWk9HR0FjSVg5bm1NdmFWcThhRSs1SUN3ZEpJVnpGdVdHZzE4akZOQ3BSNG51WjZkaXdFQlIrd0lNOXJkenBYemJZZVdZVXFoSzMvTGQ3NWRocnFuR2dFejFCM01hNWw0VmV1ajNQeENzMkhWcUdvQzFlU21vMGI5b01LeWJXdzdtWmg0Ukg0ZnE2bk5LRXh2ZFR4QVp4VjJEbFpQWTh2bkhZL0pEV0l4RmNqL0owY3pCejgyVld3eG05REtyeW4wb1BwR250Ulh5NHd6ejV3R3hmdzRldlBCUktrL2RFQmpGK1N0RzZWMFYrZk9PWnlJeHhxWFYrSHhyQ1BVY0ppQ2Q4OURjRVVtblM2YWRrMzFqNzhXL3JRWXRBZDF6Z3RzQkpLWHBkMTV1QzQ3Ulh5SzJyWTU1MnE0VTFwVCtid1o5ZG9id3REeXBndE5QWHBQcjZSR0VJSFZiYm9taHprVjEveExVOURrWWdsdk5NdFdpZ1J1VHUxeVY1TnZIT1Vtenc2UER6UHNDalJlSmdaeTFyZ25EMFd1ZWZCSmc1Unc3TllyVjBlWnpRZWJPWHVPZFlMejFZOU95aUNkVEpMOU9pV216ZCsxeDNvcHJsRXYxbjU2RVVsWE5IcnhJSFphNW1FYlVzaVhHUmhkUzA5ZUNka2RqeHBMb1hyVlZ5UGpvL3BaRTFrQXc3TWhqVHFZUkVrZUhkYkQ1NXNzNkxpSXViWWJqeVF5WTAvaklzdmwrc3lIYXNVNGdwYXpxYi9vSGxJRUlMK0g4WFdHQUZOM1h6L2E5c0MxRkJpcTZxVzdnUTRqMlVETnVnejA4c2kxSXVFZ1VhVkR4ckljMURXQVNEVGNDblhFdXdwVG1aZjBSY3hiTVhld1ZHV3YzWVJEL1UrVy91WEpGM1M1R2pLZDNyN2ZpeTFVQ0N6NHEvTHNkaUNZT3RrK1FKNFErbHZVNEZRcVhYeFFjemZUbUVXYUE1VFlvMmQ2dWl4WktPLzB0aWtHNmkvb05ZbnNZcmhMRTd6NElrUDVxSWhRWU0wek1SQSszZ3Z1V3pHS3pwVHlhRFVPV1BYMmljQ1VTMHZock55NDBqekF0MlQzajR5aVBSUDBBNDF5a3U1bE9ycXQ5ZG4rNGNhbnJXY0RkL2FFN016YjVTY3ZzMkRKRGhmUVlvdWNHcXB4UnZrUXYwN2MyY1ZCNHUxRzNSV1l6elNBbHdSSFN0WWthemRqY3VKdUtwcFpRTEc4QTNDR0Vnay9CVmx0UGJVTys5TWpFYTRJZE1NSTZscmFFL2RjOU1NNVV6NnhTUjJuUVErdzBCWlFEWUJnUGF6cDNPeXZET1N4cyswVXdhMkt2eThWalB3eVQ5TlFNd3VWd3d2Z1RYTWY2aFIxSmw1UVdMU2EySWhHM0FKd3ZsMEVFbkZleTlyYXVleXhjZUtXZHQ1QlRVWjdIN2tsb05TL1lkTHpUUXVyTnNsclI2eWJaY2p0QVVtRDBXV0hwTmJJNEV2MmsvelQ4UzB5QSsxNGRTdWhFcnpsM1VTSTN0U0Myb0VINzZITnVWdlcvcXNxOXo4dE5wOWtwUFRPYnZKR2JxOVJPWGx1SUVocWFobStpeDg2VDY3NFJiMFpPUW1zNk5wa2ZYamZRQnRxbTdDUWhPejZ5dmpRNzdBdUx4SWJVYW5GV0VSSjBobVhEKzFqMktSVGpWby9FUVBFaEpOdFJNN1RmenVQMG81UnMyVlRRNG9QV21WWE1GQVA5QllBc25xai83Ym9pSTIxQVJkYkdwWXRRTXEvQ0RqWHc1ZEF3ZFR3ekZyRHpoME5Fb2VHanVIVWVBckpyZFp6YllmajJXRjFHbjE5UHdlL0h4YmVVTm00SlZERlVHeUtESDFJZk9FZlJGdkxVNnJCSzFCWHY3U2ZGb01ZWFJrWkRjejdKcFJGVmJ1VTZmWGhKY0hHWjhhSWxPTnJJZVhTVjhTSWVZYmNWWmVNZXlHWk5mUjVEbGI1OWFkdTdTclNKS3ZiQmVUQ1hzdlRwMTJpTjFqZUM3V2RzTmNiWHVkUWtaOEhLMG9kVVp1L0tyNEZqT3YyZUFGdkJiaXUrQTZZMlpkSEtXbTdOTGQvVkcxMXRtUGdnVS9zMUVUNGYyTTFOK3l5elprUlp2TERmaVQwSjBTWnh0MkMvRENicSt3Q2N5bTE1elR4VlZqdXR4c0RWOFY4UGdzdDhJZ1JDTEEwMnpsSm12ZEwzL2hnbmtXS29SNEd4dEMxcityQnhBQXIyc2lrblhRRHFQdzNzWWluS2hEZFVENmxlU0owMHFqV1kyWHpiallhVHhUbUQwQTBoVGlNZVEzWkpqZFZ2Q2FLTWJNRUNIZkF0MzFTeTAwVVhSbmJqQ3FZMGowNDArQWZ1Tk92c1hhREVicXR6RUVSQkowSjF3Vm1taFE1VTJzc3RKc2p1ckZaVGtvbGJNdFk4RjZiNHd6VWtKYktHYWRIazU3cnkzN1R0Zm4vYUhzaFNBS3NZekpZUElZMzJkdXNBY29ubXlJcGttNzhFWXhiOXhSOTkyZW9NRDFZRHJPMWozeVdnNElDVzdYSUdHb1l4SUo4SjJ2USsxazhmTEI2K25PVWdXRlZhU3VVRG9VSXU0a3RGR3hUeUwvd00vb3NqY25HMk81aUQ5NWlmZ1hzcS9KemtwZkFjY1ZRc2wreCs3a096SGtjaFoyUWlDazJxMld5YUkyUDh6UlMyQVN3YVBoalZjd3NGODg0dzR4Y2FNemcwTW4vZTJuL3hYUkU1SFM3aHdWZWhkcjRzV0dNT0RSbks2TjVUNW9nRjVuNFNQcGxoZ1BsU3VPR2RMK1JRdDhoZ0dRZG5wUGpYRGk1TEhOUGNJN2RsMUI0TXM0UFRUdm9YMER4OUtLRVFtTitoYUZDN1ZIYjNESlBLMWU4aHVYRmgwSnVUcDAwVFFlQnlIWko5ZzQ1S3MwZjVmczZIZUNFUnA5OXlVSjV2SWxmMEJFanZTMkZ1dWdkNTBYbzFKbjQvV2hiaUlYSmU4d2JpMzg1TnRqaU44OFYwWVRGcnloeVg0bGwzMEhsMk85YlVXUFlQZU45dzFFQmd1UGd3S0hIMGpjVjdWWjJpdG9hc1FvUEdGb2l0VzRyN1dwRTBaZWtsMGQ0aHM4Wjd6c1ZHdk1uQXJEdm83NXNqUExGcFp4ckgyZWZWTUpRTEU2MzlFbUM3YnpGdGVMNVFwWlQ1K1pua0cxNGk1QlAwQ1Q1NmFZc1U5a1AzR0FUSkFBYUxJVkM1V2lCcTdUM0cwUkpPbXEyT1EzR3puVUtMbWtXSDE2MyswOHhkdzg4ckNrazE4U3V0YjlVNHdRdXJ2S1dLdndBc1FDY2NvNDhEcnROM2xRU3JTNytwSGs0ZzBFRjJMTGoxTS8wWW5BZ0JhWGNmanI3U3JldDdoZ2s2ZnRqbUY5T3BLT0VycmIrd2FHK21kbmE1R1lROGJMTzFzSGtLajk1eHlXdm9Fc0IwUWZXaytkZERGTVAzRHBDVTBUVm9XU1U2blpVbGFmNmdIeTVQRExLRmc3OE9JUWFackJsUEFRODlDQTJZTDdlKzNzL3dib3NCcnk2Q1pyRTBWZ1ZZWldNZHQ1cXg5bVRDNDVOWFFLQUhIbHN5bDJpQWVLc0diL2Jpay9zRUVlZ29rMlJZS2tJVGpCdE9pdUd1cDR3amwxSys5WmdmbEV6WjdYa2w4bnp2OU8yZWQ1NGxjd3YzSzZVRVQ3MllSWGhrdE9LQjJrOVJIMVRDdjBPakVDSXY1UHFVbndNN3ZkUUZKRGxlazB3VXRuQ0NOdWs3QTJiOTdOWmhTU2pmZzhEeUw3M2JwRGV2OGZOeEhhY3NUTHUvWG13UmdvUXllSWRvU2cvQVByRlo0RkZWOGRJT2NxZk9EZmhKT21uY0xuTEcycUFvR005b21nVFlLKzE4SVdxUFY3ejNKeWlYM2Q0bnZDeTlsU1JrTWRDdSttYnVRa0xYNnkwMWhvTVUvbjR1WnlNN05jcHM2bEZaOWlZbytCZnE5aWwvVlZLczRZZ055TVFxK1lQNitOUlZrMGwraW9jRVREa3Z5dlJOZ0hCR251OU9jeVV6MzhSeEFuTE9qYkM0WDl6KzNZRzJQV1RsSmxKeEdyWFQxSWdzb2ptZVBDRndsY1JSVFdncWFnRTNTOU1tMGkxTzJtVVVqYUVwYVNZajI1NTlDTFN2OVFhdlRWYmVQcmJkajZqWEVLc3RVWnp1Y3JqSm1BOXQ2S0RTNFBMWUpZSFRITWt6clpncHZ2SnhuaENHbnl2QlJNVWwrZVNTOXFidDJZd0o4dHpFVGpqK0JsdmdvVCsyOHdRY3Rldm4xRk9BbVBFWFh3dlltM0tYSHl4cDhUR1ZnR2h4UFNLZk14NWNST3dJNTRuSlNYTW90dEhLTWx2VG0xU1dEdkxRa0VOQnJwUDJoZ0VmWVBMWmNJWlZDVmRVS2dLZ0xzbWVDdU1lSFlNVGZvN2FvcWhvQzJXZTN3d2lnZXdNTEp0Q1dYOHFhdzU4ZHluV3IrTlcwckhrSEIyZzBCd3JxNHZ3Wk5IVHJXa0d0Zk1DSDhrU1FwRXdpaFp4VnEzT0lSL3RRY21LTmNvL3VKYkc2Ym5IdkhpSUNPN2VhZm1zK21pcEE1K2lQalJaVkpjN3ZFZkhTZFJuOUNkSWdQZVRiaGhyMUsrQ3lGK2VreWU5M2ZSK2V0VjBBSS85T3YxazdnSHN2U3l2aG9rNmFjVFJYM2I1YkRJQlRPN1RLUys5cm5IUXNhYVBSNjVjSk9qdzNSWlo3VzBBTEUrQUNkcWxSS0lYUk10dGZ0Q05tQWRqZUQvNWMrYWFuMTBkOWplQXFaOE5WeS84eUxjUWZnQlF5UEV5M2duTmFWVk1mU3hjOENGcXlaM1JGSHlNVXk1UElQV0tPQjlVeVZIczhqK3llMkwrZ0dmclRod2Rpall3cUtkRTErMDZsbFFCRnJiQ2ZqVE85STVsQTF0NUFacVlGbENUQ2dNSSsycjFBN3ovdy8yVmRxZkY3M2RZZ3R0eUl6S2w1M3RtV2hRWkRSRXNJMnNHWFEyUDU2ZnYvWXFuektxT0MwR0lqdkFJYzU5YXc2endNQjBjN0tuT2pnd2M3K0IxUDFvcytvOG9NWDVqSmtHMWh4YmZZc1dNRjFzK01GRkduNU8yOSswcHcxZzBhbkpMdjNuUW0vVDFrbzQ0QWRicUw3eERLYzRZUUhlRldWNkVDdTBVd3BKTFRzTTRWM0pZVG8zQWNoTWhncnB4b3lsd1lLR1hmMGtTVTF4NGJEd1FVRzVxaFA3Zk1jNkFsdWZGTDFUYllhclZNSDAzZEtwQXZabDgweEpjT1I2b0Z2cXVkVEYxaExHNVc1S2RnV05mSVBpNEVwZTB6V0s0YjhRV0dGL2xHbDBqUTJpZXZ6SWtzcGhSM0ZOZFdpc1o3eUNVSEVMWHNaOHl4cXp0THpzemF4dW4xT1I4dnJXUVcwM3dQLzNmQjdwT28zK3lwdFFEdlFFNnIvajBRdXJiS2VTZTJqREJQdUYxREJYYVlEWlpUTEp6R0ZSOUI5Y3FqY0w4RklJSFNaR29vQVh2QWFTem5NMjVmQzFnY0s3aGxFYm1Jb1IzdXRDejJOOXFGemNSV0VrTnlid2dLSExzMmxhR2RkWnJhS2ZFdGJQRUVjREVVMkJrLzVCNEgyVjg5SU9vUFduMy9UK1dPdkVFT0dycDM2azQ4Zno2elpyWnJNZk4rZ3lub0dSbzNoQW1mK3BYbnh4a0Z2bjZhSDRhNzVVejNpMk5ycG9heW1BR0VuRVRrRlgxM1l4U1N1YjJPVzFmdlFyZ0ZDQjlIbjk3MUs0WnRPQXd6VVNubWtQRVdqZG0yNWVvOHg1OHhJek5wVzNpWGoraW4rVlBVUzVYajRLRUpyWCthcVZ3S015Y21yMjVPMVU1OUtEbzBMdzFTdTAzeVh6bldYN04xR2VqcUIwRmx6WjBCMWZ4QTB5ZVlmOTFTUFgvYmpNN1hOMWdMalVqWWF4eWpNWEhzbGlJNXdHak52eDVJMWdSZXRjVmxLMEtaeUVFbUozeFgrcUtiaWROUXZrdW4rU0l5c1B5c0hoSUhIWTlFZmhUaFN1OFlRR1RxNFhSZ01DL28rUmZESnVMTGZtdHJFOEFIVHE1enlFcTNYd3dqdy82TzB0bHVKSE5lUWpWeGhlSUl1U2p4MVlzbmJXZ09ScTcxODA1YStpeEZraEJ1S2ZiL1JreWtZMzlNcGdXSE5mU1NTelg2ZkRxSVlQSzlwQ2ZBRC9zMU96WG9FNkMycjhady9rdG5WcUJ1UW5OOXl1eUx1Slg0Q051dzNtcmhXRUcrbWtDWk1pZUMyTDhvc0dNWktBNGZDZFF3YVNxZDdKSk9tZncySmNMbG5QSEw5dTVCUmFoM3I2YS8xeDRRbzdnSk1Qc3A4VGFEL1YxL3d0b01OMjNDT3VJUVFadkxEUzVTWXFnWTY3UUpTMzVRQ28zbUpOdENWVGRSNDQzVHpBZnhFcm5oc2xKc0NQa3NuTUx4SjNoU1RWZG0wMkJZbG9BaVc5bC9KUTc3aGlBaVprMks0NUUvRXdycGRFaTlqY1Arak5SSkUzckYwd016ZFJ6QmpSZStPY0xOMUFXdFFQaU9hNXQyelVWUnNQTHVrSUJONzNnZERieUE3WFNrTnVleUhjM0JzZ0wza3NLOFczVVNqcDVMMFRHNThMcEEzS1VLYm05S2FmTUROR0txWWRDZnY1OHZselVCN0RWRlRJdmtGOCtkUldmalAvZWNueU9laFRRalVkNVJXT1M4eGNmNHArMmFBdDF1MFpEeTE0ZVBOWHNjYWZGVnFBekVSYnV5bjBWTS9oYnJNNmhPVGE0b1QwZk9RM3VHN2xxYXJvYzJmR1oxN2xIYUhEbjdLSXlZeDl5ZlJoQjFVbzY1QnFhb0QxcTV1K0lhZzZKQjdZb2pBV21veis5TUVKTENYMFBCN29sd1FkTTNRUHVGVnZiRmRXN2ZvVElpcEdUckI0c0UrQzcxQ2x6MXhlUmpLVnFvUTA3NnRlcmFZVkNBQi9ZcFl6QTE1dHRkMk53cWRBSmUvaXF3cngyeUlncTNnOEMvbVM2bjZhVGtCY2dMODR0bDlHby96UzQybTg3emo2bGpDM3MyQTNtdU01djZaMmNoWmp0VFBiMVppRVVLM2RoUlRhSmFaRkhPYk1ucm9QMWJaQU1jSUpqNkhmWDBxR3lLTzhtUlpGNFlRbElzVjlYVUpzSjNsNnNaK0Z2dE1maE1uSUdRNU9TNTlPVHZMUkxjbi8yYVU4MVo4QUk3ZDUybG9jaHRkem5QYkRIZExGc05zU1k3Tldka29vWi8yTG1lMjI2RWdFNHA3UWhsdnZ2U3ByT2tFbE51MU9acXo3eTNSa3lrVTg1RkNZRm5ybHgreVU0WHFyOGVnQlNxOHpySDlYQVV1R3JVcjN1VlJNWDJjMnNNZTkzVGlVSEljREFtNFlBSS9wYTArZTJHeFc4T0dHRG90N0l2ZXh6eHZOdkcwTmorTElmS0xPZ09iT2xmVjBGR0JZZlIzQzJEVXk4dlRaMlRQSVdxUG5uaHJTVk1Lak9JYVhLclhJS2pld2hHOVVXRUpNSUJPYUpCbDFYTWZSNXkvTS9ZTjY1VHJVNm1uSjRiM0tTc1FrK0tSZ2hhYVBWaUp3YzczRG5mb040M1dka2U3UjlibGY3UTBKZE41OGtoZ1c2WG1hOGUwb1NGZk5ZRy9uaC9SOVNZbGVvZzNVL3IvZTY1Y1RaNVhzOWlad3RHM2l2UExIN0wzMml0S2F1Sk5xWDBGK0t0dDdEVVE3ZkhoSGs3WExMdlRnSFNGUE9sRGRQUVFZVG9QbFdlZlJxVUEzb2V2SWZpM1BheVltV0JpTzBBd3J3dzJaSEhHQk1OdGl3eGV4RTJXYVhuVGZ4WEo5R1VGUG5kWkw0OWpEOXBXSXdJWjE1MFVIaU52YWd0WmpQL0ZHam1xZEc0Q2xLYW1OVHkrNlIxd2lEM09BL3VSdTJTUmNkdlVBWXZhUWtyTDZFeVZJM21uOEhxWm9qN1JZMWE1N1FVcmN0cXpnNVltRXI1KzRJcUtCTmZMOGhaNExMTDc5ZjcyMmU0WEd1OHdkWTI0YnpKZVFLOXpFR1ZpTzJPbG9VelRyVFV4eUM5RG9wUS9ORkVzd1hLeVNrSnBPL0RvYmlVS2pEQUVaamJWMGxydmp3KzJsdWpDL2s1S2VTTjFoTGprbG94UFVDcEkraEtaTCt4UmV6cUFhMkRXd2pHd3NrR0ZreUFydXZ2YU4rcTRFL21iMG1YdG01dHVEajFoNmkyWjYrbUJHRUZGdXFqZE5XVEJUeHhxcVpRbEdEY0d2T09qMGpuaWpOT3hMWE16V1VpUjdBbWhqcDgwQU53U3JsSEI0L3VINzFRQ0pnYjFXYTlmVjBXdWlDOEsvOFNUeTBkVVZ1RFJ4bVp5aTNxTk1pV1VvcG5xYWVqUG15emdOMlY5YktJOW9zL0JRMzVQcGxDNDFDQS96WHRqR290aEdQd1ByOEJnajkwOEdkQXUzcEs0WmhwWnlwRWMwQkJtdCt6YjMySFlIZmR4QzNBR1c4d3NFaUtwZlRyVVl6WnZ2ZTg1dUYxUlI1dWNGcXIySjZadXgrWVNxMEtaV1hiV0FzQmlDcnBQUWxnd3NKOFlhdDdvOUF2bm5jblRyTms1SXF5SzJpQWhYZkhWcmxuU0xUdS9xWXFxQjhrSC8yTWVIdGJ0OG5vWUdSaDlzSmlDUGwxdFBGMTZEelNYQ2xMWkdzdVBTWEp0ejdSMjJiN0tHUll2eXdzcTZaNFdvR3RaSTB0dXBLRU1CcUROZXZZaVdXQ1l0KzZIZ1c3UjRJNGlhSzF0dkRuTWFqaXZ0Z1Nrc3NFSnVIbGNXRi9DVlc1OTJ0d0pEL3F4UE5ya2RZdzNIYUhoaGN4WlRxVmZOdzg5ckpTdmxyenJINUlGUHM1SWQ0VHAxYS82elFzQUlHNDBuLzVCb0hCbDFlbkhBUEJ3R3NlQUorRkQzbGY3K216dUFnSy9DbG50QVpJeHo1Yi8wcHp1QkxZWW9uVUVJRXdVUGxLTHJ3VjVDNTZKVDNLQm9sUkdoUDhOSVR1UVhqaUZYNVBoSXdYS0REcnVaZWxFR3VZSUJ4ZjR4SGR4SDAvaHZ4NUI0UjRaMTUwVXRmSlMxZnFXd01Fd24yc0ZDVnB4YTQ0NngxUEUvcGh5RzVIV21Vc3V1cFd4R3diQmgrMDNEaHB6cnh0amxXdTdkalZhMGdJM0VqcGVOTHhveDhyeFdZekhnaXNFd0wrWGlvdGVSRjFySDFUQnUxcEFXNXhXMXFGcGUxWDQrbWlTT1ZSRGs5dFhCZ3d5VHh3L0kwTm9TWnFIbUl1SHh0ekVESVdwYU9YZUFIN1pkbGdVQjBJRzB2R2FWa3hJU3RpbzgvUkQ2L05WaXIyM09rVEpxSXlQbVJnYzdOTStSVExxV2htYzlxMXJYSkJUaGN2MVBucFVLQlpsYWhCNjRRV3FGY2hGSk9Xd0RCb2tXeW5pYmhjZW5nRXJrczUyY0wrUGkzVnNCdVExM3ZsejI5UW5YU1h2M1JWOTlCeDdmeHIrVlROWjJCS2d6WW9wNDczdDRnR3Zqb09hTHpONHB1Q3h1V092YUJDQkc2L1dWalBuZ3ZJM3hxeHlMYTY1bjBlcGFJajcwMUh6TG1BVUkvWXRnQ25zckswazZjL2xienBjeTV4Ym5lSHQ3NTBGRnpSdk5ZUVVBak5YSjlqS3NjQjl4bG1nbkNKZDNJeE9IMGs1dWN2b1FZRURIMzc4SytXMUQxQmM0aisySkpLaEZxNmZZNlVURENIUGIxNDJoZDBxczV4QXBhemZXYTJPRGNKN2ZJNUxYSUFUWTVSQVcweER3MTVQMTBrNXEvc3dYRmFlUHBIblRrbklCZml0Vjd3eDdxTU5jdzd5V1VXbElxQlowRkU5bllDNXdZTEorVkwxclN2K0ZLZG45NmpJaHdhWi9Gb01lWHFUNm1pOUFMSkFZTmFHNlduLzNUZk11MDR6N1FHTnF3WXU5dTdKa2xIZnpoaUhQdGdxZXNkbUYvTnZTOUtkK0JRS1NIdVRmRHUwa0lXSm4rTFBUSjZ2L2RNZWVxRTNXNFFJVjA0WFFLQUoxcWFYNTJ2Z2p4Qm5WK1BzK1Q1UVgwbEpySi9DVHBTL0FYVU9RazJLN1BKa25tUzdNSkdFOXd5TFYyRC9GUUEydFQ2dDlMamp3djlNVXZWcXZBNTh4MjhkS0QyVys3U3JEMi9VTitMTGJQbGwvbHIrY3RGVmdzSllVb0RjM1NvVS9kM2VVeTRxNkU2NkIyQ1ZObVRoWDY5TWlub0dlcFdUOXgwMWxHQmp6TlJDSUZSL29tZXcxMStQai9JeW1WWnpOU0ZsSTRjbjJxYVVNbFhqQlVhQ3RnMkk5amtIWndMNjE2SUs4M3VNQXRGR2tRd05Ob3hQK09jUyt3R2ZVUzVLWUNPRWJhRVNvUGc2VE1nMldQUTNwVDhaTXl5QUs1b3pZV1ZRN2ZwYUs0YnprZmVEV1B4TFBZcE9zdnhka05VYXdpcWxSZmxQVko3a05LZnJlVVZTVkRCSkRqaHRsL24xV0pYZ1gzVXBvOUhkWUlXbU9aeUFKcm9Pb000Z2wzNzhJcThYMjJScTNMdkRqMDR0WlJaRGtqTTN4Zk5jZ0tjT2NVY3dCaTQrMCtWWnhhZnJTbFVaK1R4TkdMZVNqRXRBV05IUTBMWkxuUWg5ZjgxMXZWckorcVhKMzBrTTNTTmNsRDk3bEtrc2FidThQS1hCUkNMZ0NSdVlOeU51dGNLM3FNUStOL3hpRlpQZk5kTkRueG1OaU5haE1mRzZmVkorQkZHWEIzQVFnMnhxQklPQXZ0REk1SmE3UVpzOVJENUFHU1FPME5JR3BNYzJRTVY5MDM3bE1XUXMxSURRQzVMTlJQbFlBdDdpU3FSRk5OdjhZWHNOYTBQT1c5QXh5NkFWcjk3aVpKVHdRVG9mQU53cHRaVzQ0eldjeEthbEtVdkN5bHNxdDY3bXpBL3A1dWlBZjg0b0hRNmkyOXFXejVVYUR2VHptRll2cDFvM2tEOHUwOWgvV29yVVB0UzZrVVRwOE05REVJaVV1YXhYN1NxYk85VVhCQlpQcG5rMkdaT0E1bUNDdEI3UGEvWGF2Y2FwYllnWjZ2VzJRcE9nekx0b0ZjUUwybE5QMC9tbUJLNnhMVzA1OURwazgwUFpCdms2TmZVeFVkemlRc0EwWkZlZTE1RVg3bjVFdjNFQkt1N1dpYnZobEdiaGhQb3ozMGZVdzFiSndwR29McmkrMlpacTM5c0R3eldESVNTOWw3R2dmU0tBSkVta2IxeHc4S2dCMXJxdG9kNldYYW1pdWx4ZzZvM25JcmdXUTV5MWUwNndjVitnbnVwTTMrTXhRd3JYVWFGUmhsQ0pCOWZhTno0ZXhjOUFZZm9OeGRMOUhxcWVQTGZDWUpOSGNDNHN1eitzR0t2bnF3ckxLc2tWRTNaV1hERjAySFhrb0xCeDlYRWZKSnBCeko2aDBNYlljQnQ5ZmRuMXNLaUxyWUV4V2g5d3dsajh5NGFDY2dxL1dLTnArTGNtSTM3YWttbG5XTk51RTFRKzNCd3FJYlRsZTU0MW0xa3lzSENxcndUSlZxZERzTFFiejlpazRYZEMzVlNZS2dUalVrdVJjY3drS3dQU2xGbGtnbm5aOGJ2bk5mNzlCajdXMSsyM2M5UFhYamtDV0VuR0ZxNXlvd1RqRU5zV0NSNFpkYnBnZnpMOVdSYTZnS3B4VGtlNVN2dE9lV0dlaVVpZGM1MldXNWFHYmNSNThBcWs3M28rc28ySnpReWQ4VDJmdHFSd3J4UjAyZHVEZ05DZXNtWitNWkpDN2ZodWlDTnVUczBqcmJMZSs3aGZ0ZmVYOEx6eG00UEdGNVFna3p3bnkzOUNoNnNRMlRhQit2cHcxUmIyTmRHTC92eURnNzJ4TzhsME9YcXVjdGczQ3VBSnZQbm55cll1eTI4Ry9KS1dkcmdOZTgzSHNrYmEzamwyUlgyby9PM2JrZDJxdTluL1dwN3ozdzF3NXBHWGdUQmhmU1h0bnFMNWthdmMySzgzSGhpRExGSDBBNmgwUjVYNm0xem1GYmZrQTlvVXdPUEt1aFBKSzArV0xqTXA5NlUyV1ArWHU4eEZ3VGNQRWlpdEMyWWxqSW1RTEI0VjlaWkQzWG0zc3JDS1dzVmtkUUQzVTd1aGRPMGZjVnI4cnJVeFplNDRSdm1TeFl3YkVKR1A0SDlpUzVMQkplSnU0VGJhMHdaM01iWStXTCtzRVcyT1lqODFMM3AwdC82SEJORmRkNEtBNzN6YjVOSll6VWU5V0RtM05vTHcyUkxtUGFud1hqYkl4TkRwdnN2bEsvdWRHbGVpZVBocklNVjQyUjVIVVJOVFRESUVGTUN2akVBUk5Rb250MjZHdVJRcGR6NXRlbTJENHFLdlVVNVBwWFo1WWtvUDRtN2doMjVQdW5malBXbmtxK1NOYmlJUHBuWDdpVnl2bGZSTTJPN2dDZ3VKYWlJRUpvMXgwNVB0TDUrUEVJQ21rTmovZjdvdTlyd3diTFN1ZlJUQldMVkI0UC9aeUw0bk56cWVacXNVSkFhdE5Ma1RqUVBUTzZreUtlSTQ4WDNNZkZDU3J0dWVRSUtxUGtzcldEREttU2RYUzVNajc0NEx2MGt1T3c1TWh0TzVyWVMyTFdBeVhnWWcwd1FIYUZaaVlHZnlMeVlxMUV6N1F1UkFsSS9sVktUcXM1cDM0SHgyWG9OOG4zdWlBREdkNU10bHNwTncrWUgzTUFVdVJyUGh0bWdWTVhkV0d4YjdPSHlTWkhRSDVhYTlha3R2NmpodUZHN3JxalcrSm9lU2tnd0plYi9mdmR1WW0yakFHYWppNjI5dmc5dDdoZzJDZkhnTFdoMXRTOGU2YzUyckNCbzdOa0tnbDJub1BIbTlXM0RJUWJYai9ta0tKWFRlRUN1a3dhYzhJZm50ZzJYODFHamx3VThHcVErdHE1OFArL1AvbGd5eTZ0dzRZa0RjaURMSkpuV3F2dmM2MUg0Y3hTb0xEaTAyTnBScEtBTklDVjNYcmhUV2Zjb0I2ck43dVNjelU3d0hidW43cVk2VVJpNnNhVTNDR1JUMUVESExacmdpQWE2dnJ6L0RGTWZZTW92WlhJU2M4VTZPWjI2bGlxTjFwTzYzRDFBODh0dXcvdlAyaDZYZldoOVZGNWR6cjdNclBNdWFrYWxaSEdEWFZQMDRzNjVHSG8zY1MzbXZOdTRUR2pZNXQ1bEswVFBuSXJjMCtCcEFrY2NaYlY5QlZJU1EzSUNDYUVVS0xJaFNXTis4YkExaTZZeU1sMW9XRXhNNS9GNjhlSDBGTDR4STBsWUZ2OUovTEU0cGFBeEVoZHFSZXJxZEVvZk1yQU9HeEY3WktMaHkrMVM0VmUxNkdTMS9DU2w1VlFTR3RWeFc3REdtVDJpRHlkQVZsSjhVNnJCMXJLMnhINGo1Vm5tWGZhK3l6elVRT1NSbUl2L1RWRUpvWHJYek9LdDZFcXFyTFp5NjFvRnZvME5YVUVudUFMa21hc2dPNlI1MlhZTWU1RGN0Z1BsSXBKSkFxZkY2cFZRSUVpM1drSEljdG45anAwVGJkaktQdkJDRXBwdWpkRGVuclA4QUI1QjFBdmN0Qm9vRlY2NmZiUkFOaTl1ZjlHY3FBb3E4L1NGRExPenJkRjM3Y3B6eXRXUHhaN2hVSGtQcGRkdytCemJBWmhTeXJ1TEhyOHBhZytIWEM0TWZGdXgxcFU3V0dVWmpBK0wxaSt3V2VkL3dXcGZOUk56T3d3Rzkrc1p0ejRGQjc5aktZWk1yd3VEbkJSeEVhc01VRnRQRE1kVW0yTGtjM0Q5MS9vTEorUU1OZldwUWt1cW9YY1AveDlrR3c0a0dRbFlnMWZ0dUVHY2x5N3dabFRRbTUwQ05oVm01Myt6Wk05QzdQcWFYWngwNmlyZmlTbmNETlRDRjQ5akRHRFlZVGNRWUh4cmR1TzJ5QW9BMWFCZk1lZnY0TlVTa3JrSjNYbkFsN1JXdDR0bGFRcURqY2duYk9Cck5qSDhWQlhrM0tJeXdBSEZwc2I4Z1k5cENxQy9OMHZURFVkZ3lZS1Fic1lmQ1E4N0F6NHQwREFEU01JNHFrWGoyQkZENzN4c01tRGtRaGFaMkVTcHhqSGdmMUF5Q0EvOU1UR1ppa0lPRjdvS1pmUENETDlQV09pNEJkU3lzcFNmZE5rSkhJREt6SWdSTEdQdGZadTlLQjRBUmo2NVNUYUlqUkhLTE1Ja05KL2VSZkFJaXlPSTh2Mk83Z1NVRDNmQ3R6dGs0amZEZ2t2a0w4Qmw5UWtvSnNLbEhOVmpnOGE1K2tMOTRQcForQis0Z3UweHFjeVFNVm1Vc3ZXMUZSdndQOEJYOUQ0STFZaDViL050WDBIRmZ0QUt0Und3MHlWRUFTcFpaeEtkc0JYQ200dFBPQkVLYnBQM2l4dUpGaDJrQ3BSRmxsajVpQzhiZHFab0Yrb3NzUWVjTUxPNk9oN2lBcGlHSEs3cS9YVkpXVHVDZW1mSjRtZmEvWU5FSE16ekFPK1AyYWhYcE9nRTNSdnZ2cExlZzJNRERyK1JVOGkveENuTU52MUFIWnBvT2wxWnlockovMmNMS1NUdU5FQTRHRCtXRitod1lLOFJPUXZIeThjNVg3cTRyejNwWE0wSmlCRjJxTGFBakpMTGI3enowK05iREcvUWpKQ1h6ZGxnZ0xnalo4L3FGSVpmUFRwTnVJQVZEaU42RlgreTBwYTBmVTdwa2dhVzlyVjJOYUdtak9wZDJZZDlTdU1BZE5MS2xBbWlwM0RVSG9mcWIyMGk2Ry9zQ1l2Y05YS2M3ajNuYmJOOVo1bGY0Z0U1NThYUjFHUFB5REF3N3BtdTRTMHhScmhvejZuUmZncndhT3FPdnhtOFFFVjFlVnJSSHlVK09JOG8wV0pDZllOWk9SS1FoK3htdjBKbkhNNWdHZzJydHg0cUpscnZEMmMwOGc2V25aQWwzWTUvZXVqMzlrN1dNTG1iT0Mrb0tLUlRlRE9OS1BiZndReEdNbjdoSC91ckEvVkdCRGFLSWRHWUQrdkw3dW1sZ21PbldnM2VPd2dUL0lNdXM5REVoaW9jRncvN0Y5a3dyaWFFK2ZEdEJSMmRQQm5Uek9OWXhkRWt3Zm1HS0QwSEpRaFFSVW5HWjZ2SUlyV3NBdUZ0dncxK1NvMmRCRW1kd2EwQTcvd0V4L0ZkMi9YOUhVaXJXWlozaHhkTEVlcndvS3Y0d2RzbmZab2hmdGtvWkptU3VlaXVHVlRjYllWejBoYkcxTUJSeFpXMzZ1b2hDSXlGenJ6K1lBZlBCa0dPRjluZm1KVUZQc2JBNWw1d0dGdVcwbjFEUS81M1JpK0x5VnBIYURvY1craUp2SGQ1a2xhSE5meDNvdlFCN3RnZ1didWUwWm8reFA5NFVqdDk0bGFIT3R4Z1FmU1JJUy9kaDBTNTZyNS9FSkZIU1NjNGN4TVVnZktFOUVvc1J1YVB3ZlFZN21uNmo3dFB5TnNQVEdUbHJNQ1h6R1pWOWhtL013SGY4QmZHd043bTY3UmoxM3FoSGFZZWpvQ1JUclFab05mRDlBbHZTS1U1RllGYzNnejVaOFEveTV2OXJxWkhnSmpMUFdkeXg4L01Ca2RLUEFsNWJiRis2cmZIS2FKS0VwS3E4S3dCMkVSTGlSTTVpa2N2OHJtREVpRlBUTVlwOWZvdGJkOGIrbTU0MnlReWNkeTZXU0hrc2xlekhVSjljT0NjWjBTNS9xWjdpSkdFWFRXbmdheFJ2cTFxdDFPZDVwTUpKU0pPdmljeXQxM2xQWVFYZG9hazUxTHdHM2YzMFAyVlQvaHdsZ2RuUVVXVkdmWHFYTGZvNk1HdWVFUTFDekZCeUVxVzAzNkoxeW1aRnEreWdzUklYRnJTRXdTckpCZHJOS3piVTlKaEo3eVZ6NmIvWFdBOGxsOFl4SUxQaUZ4SklMUlBGZGI3WGw0NWNscHJkZmh1V2FSZFozQ28zZ0dPTmFxSndOSTdSaEZ4S3Y2YVdCZjhkR2JWaGJqZ1B0cTFrS0FkTGZYMVhWZmhHcjA2bHFyK0didTJPQlFVTmN1WjdpQVl6ZldURWkyU2QxcjNxWXNLRFFYRnpXUS9pd09PZldhRlNyQUM5V0k0MDl0Tkdsb3o0ODR0ZmlhSnNRSWlTc1pqS3dzQ1NxZFpvNEl6ZXd2RjBteTFQejhFRFl2QXR4U2FCTjhwQVhacXBITlBjTURTZW1iYlZrNFNCd1lyM0hhTkRGZkZOa1FNNmZuVHNRQ2FQRDNpTitJZy9rZ1hpdGw1ZG9HWlZ5L2Zza00xTTVsWk9KeFF5ZXhvUnBSNFNDa3E1UW1EVHZLZi9jaE1OOWtmS3AxRVlmZUY5RUhoY2h5OXdQTlJyNGwzbStLR1NUTHE4aW90dFV3Ny9OaE5PSGNoS2ttUkFxWjd3QTNlNUdhYXdtaU11ZEZsdkRGNjVBZ0hNMElVSEp0M0NWbnJ4ZS9ZOGoweUJjd0dRbFpCckdnRE9wYm9ta0pZVFovMzZ3T0dXYXNaOHFkSDl3UXZxSEtCT0REcVFPa3ZNS3JpWUlCRnU0K081Y3hiRzJmUUQ4ZHA4QzdYVk50VEY2M0pnbzd1alMyNWlCRjdlSjdOYlQ4NG5uczJIQlRWM2hrZ2Z5cFhHNlYvVlNldkQwVWQ2d0U0SU5Rc0RaZkpqSnlGbGFKbDNrMitGelhLOVFTSFdHSmQrVXpJK2ZMQ0dYa2NOWnNpNXRqcTNyMElxYnQ5bTVPb05GQXRKZ3hwZnVRMC95VDdpU1J1RlFjK05PY1pKVnNxYlJiWENUbFJhNCt6bnUyN3JOUzI5R1E0RFl5VmE0Z2F2NWk0UThYdFUycyszREh6bVVWcmdZckhhSGlUVmJYYVY3dFFjNzhlMXBvU0ZSejdXN1phM3ZjbE5xZXFqbDJML1p1Sm1MOTJJZUtxb2ZtZHhYLzVmem5xZm5YRElKbFFIZEMrUkFOYnZhVjFlaVIwdkM1OHZBWVhzNEZIT1pFN1ppVXdZbVpDWmloWTdjWkgrdXMxbWlyMm1vUXk0dWdYSDRLNVdXU1I2ays5YnJFWStsZ2FNU05sdzJXSTFUSFViMS9WUnRnZWdBRjZGTWZ4T2JWeWJTOWFZM3hVcmNrV0JxUmRXU0w5aSt0cW45LzBOMmJHL1lNWTNvS29oaUx5YTJTcXFhbGNpVmdXYXEyd2NFOFdIc3dQOWlKSzFNaUtsaW43R3RqMGRTYlBHK2tMdVNQT1VkM0hObEU1Q1VWMjQvRHhPVDlyWUZXUEIxZnhnUEpvajdDbSttUTZ5dFNhRFZsZFlLL3hlQndsbVVJS3RBMEdCTHZLUkdkc2VwM2lncFNEbHlxS3Fpc2taaDJrY1BTME9nKzJFc2JqYU1XR3VTeFl1amtERGxUbXJnMDd4WGVuL3liaDFUY2N0YXhDdzNWUklqMXdxMkRlYng5MmJNYjZyODlzOTVNZ3hBYWJ1NllJT3lmNGtDeGlGbWN5c0JFMWNhY2hNZ1FsWnY5NDhsMnJwRU95Rk4xMTJpU09EWjhQNnpHb0hBbWdMYzN3SVA4ZVhUMDQ2bjdYbDIzUzRsK1NUb1N5U2lEdFRNb2xRWG1qVExlUHBobnNBMFZ6aDBZcjEwNCtMNHdIM2k5bVlQd2dvcmloak1PMFZnSnlRcHZmbFdGZmM2b0hWeGw3MTVVczJlNktPbWN6VUsvWjU1QW55TEw2RGU5NkNaeERpRE5kcnNDUUJIUU4xSWJJOWFReDMxbG1jVURQUHQ4L1JQUjVyNXFvUzdCNllwbS9XVmttU25vZ1BoWXJGSlRKaTA4bm1CTm40RVBJVWYzWlR0MWY0TnhoMDFEREJ2bkp2MHRXa1ZYNXBJdkRvTURlVTBzVExyL3MvMm1tNmYwVHJ4cDBQRWNKK0xUTHpxT0xreFlhcEdMdW9GY3d5N0JheGtGUzdYSUduNktRcDROcGswSnIzNGgzRG9Dc2VPajhuaDdiS2ErMExRQWlvbFp3RDNZbGFBRU9XRmtrcnZROW9yRm5KaXBmUm5TL2QxenllL05UZFRNS3lnK2xhTnNzTmpnTGZ3VENuMUpTeUNpeEtRbXFuVS9CNFErdVdseElUYzdPbHpMSGhqYWYvWEtWU2tqcG0yMDg1a0huK3dLOXp2QUdka3I4dkVvdkZCSmtzbFdGVkZXY0NVQWRMUmFLL2wwL2ZZT1g4Z2N2aXRKVkVRT0c0bi9DWEJtTmpqaVQvMlYvRk92QXZRcUtEVHU0RFJHT05BQTNKenNvTGdlMGJocDNDcEJZN0ZnWGpuTkl0ME10VitkVk96R2NVSjF6SU1sdDFQOHJnOVJaQW42ay9XanRDc1VOVDRIUkhvUXE3YUhqTXMwUzRxdTVXVjgvSU5aQ2tyaGdMdWtDSkxlS1pRajR6NHNwaDdJMlZHRVVvTXN3b1o5allkMERtY21LU05HOXMvcEl6N3NqamdSd2JjWVZVdHpNUGFNNmtOYUdiV1k5SjAwQis1eGxWdWQzVmtUTGtXRTdqbERPMHBqSiszYVBTbEdhaXF4ZlgrRXhBbkVOa0dpSW8xQ2lYeHJ1U0liR2FiZGpHTlo3QU9jWFcyVnNsbUFwZ2w0MnFrTHhzRzRPV203R0lkZjdrNlpEZVdibFdGdUl5TU15V3B3UHhzdUJqTDUyYmNybmthaGFrT2U3Q1cydXM3WGRHVzNOaUVzOVhYbm5yemhxem9LS0ZtK1RBTEFPbjBVK3o4bjBoWGN2M0JxVSt4RmduUW14Rk45eG5pbjBsR2RxNmpxRmhCZDRySEI0MWFnMCt6cEdhSGNnalcvOGhvZkZCS2U2SG9COFErbUVTK3drNEN6NEMrZUJDTnBjQ1JtdDlxOVlkeHFpVnZlUDIzWVo3RlZZMEtyMWNxTkhma3dLelJOYVg0UkdTL0JOb3loUVo0SzA2cllzbnJFZU5tQUlYQ1d0ZmFCT3loNnFLOERYY1NzQWxtcWt6aXpOUTFuNGJENGhyandkUDNkMi9MRjZWbHZXTTNJdHRjRmQxdkhVa1NMUzl0TkdQTkhqQzJaajNRMXpTRkloK1dJRndoM0tqVVR6eVBQVmZFK0t0cnVxdGhySmo2TkI2Q0FEcUcxdUY3dWtHQTgzS1kzODhoVFAwYmwycnZNT3dMQ2JSdXl0MlptY3Y3QW9CUVdvU0FpaWZXOEphREN4WURIZXZabCtUOGVYbDNOdkhNaUJqMURaaGZhZk11NDEzeHpMeTQ5Z3J0T01IdlRwbEQrclJXbCtrc3NWK1g0MjBxRGxqYzh2dlZ0ZlNrT1RCMEN0ME9aV0NBdHNzV0dBbWYyYy9IbXFQYmFVeUVmSGhiUk5zd3BRNTVsb2NCTmUzczRuVmcyZFdoVE9oOHZDZFJtMHF4NHcxTTlsSGZlc09WOEJmTkR1M1czUTUweUc3WGorYkFJQmdCdmNFcVVINDZ6cmE2Q3BNa3Y0K2kvSHdHMDVFNGhsNGhTK3NtdE5kdFJicHdFRFIzdTZlUG9oNUNFZUJGT1l1MnVnaFNJSjg0bjJkckl6K0FlUG5HTE1PWUJmMHhBRmpOc1g2UGZDbS85Ry9VWnBPd1d5MTkvRWdBUk5ib25YaVJaN2UvbnIzcnBFQjRZbVI2dTc2cFRJdGV0MTZvZTlmTmNnVWlpVWJYVnRwR2tJUUFKSE5DSnJqSGJxOEFPUERGZkJuLzJoNWpmaEU0VDhJVGhHZ0FPL29kaGxDQUZvK0dpVzhUNElzNlFmbEFmTGxpd3RHQXZLK3FEc05vV3ZuT2RnajVTSHRFdHhsTjNXb0VkZlNydWJ1ZW9Najc2UW9jVThKRHVTVE5ZWnU1Z2J6b1RHUTlpNVZyTzFYMHBxTE9HaG9vOExKSE11cG9KSGFZYnRYRWprZW5qZE1PbGN4OTBncUh3UEh5Qm1vWDR5bUhSZXBuZ0Z0NUk2L01xbEZKTmVYSzBYVS93Y1BwMXd6Q0FGQkNCVmJRZldSR25PZWhzSGF6SFFYSE5HK21jSUd6NmltOVI1eWdpMzBWQlRMYXg3UUxRYUZmOVhySzdnT2w2RFRkMkoxRUk5N2dxN0x1T1NyVzRySlJCM2V0cjQycGpldDMzaDk2RGNLZlMweWxwWVRmR3dZT2JidU0wMVZqZlhjbkxKZU8yT09VSEFUcERaN2c2TU5zeENnaXdPdjlRTHo0TnJTTzlhR0E4d2JkbTJVa1VvVUNlUWpVeWpqb3phbTI5RVpDQllteWNJcUNYZWJNcXNGcWhZZmhCSG9mMXdacjJPV0hCRDd6Q3daZ01URUluVVlOSURVTDlrQ0pvWUF2cTF3akhjR2dNVTlJVXFBTVdPdWxRRXlxc21SQW9oU0loREJtS1NKUm91NlFxY1Y3djBzNDBWRDNpR2J6eVZwL0VXdTRad3lpR2VWWlhxTjNqSzZodVFyN21ZRkE1S091OHdSZjR0UmRwYVhxMUxpQzJBc2ZWYUdtemt2Tlp6Z1cyWG1JMXV4V2RUTTRhMEh5ZFlJK2U5ck93RTd5ZFhlTDlRb3pralhtRllqQlJnNHdqTi9qZHVJWnBLL29HQkJkN3V1SDUydURqN2g0bTgyb2R5OGJyZWNodjRvWENaeFVZWHhObEo3dFg0cHR3RE5hVTNJQktiNWgxY01NS3EwUE1wY3JPc0gvbzNPY1p0L1RGMzY4YzhCMGlZYXgxS3NyQ0R5YXBMelRpcEszb01EbnlpOUFmT0ovYUx4TmJLblhKT0tBSHQxekh1aVh3V0VPTC9iYUd6b25QYWE3dnU1SkNBUkhxaUROLytGb25aUld1TE5KYUUrTkVHY3dyZHYvc2ZxZWZGcWFGQ3Q0L200cUFySTU1a0owZkh5R003SzFEN1RYRTJqdjdWMkgzL1pBK0RGRThDUlpZK1VPSW9RakN3N3poSnhsTzNMUE5LVERDTXM0YklVeFFSZlN5Q1pTbnEyMG5aUisyUWI3VWJpRXpnbkQvUjgzYW03bFphUzZnS0MvaXFlZlpnSnJ6WHl5OUtteEVNKzRMMFA4TDQ1K0lhaUp1OXRiaGFTOHBsNWdSTnp3NU9rYldoTmJaWDZwZlJLanp6UDB1Y1ljT3luUjh0L2EzY2wzTUh0a0NVUm00NmRXUHV0aVZDdHo2RXZHOHhZVFhVN0ozeUR4ZTIrT0xDNXd6ODErck5taEtwdDNLUEdnbTlNTVhNSnpmbVNwY01qS1h5dk5VdmlxelJOOFhEYlRnSXYwTHB0ajJQVC9YTXRiWVorTEZVTFdmR1VyL3pNcHFKSDYzQ05Ta1NQazY2NUpCd2xwOXR5ajlkOEpZS1hhaWY3NlBybmNJYVY5cENvaWhOUzBEbERRSVMxbllIVDJtQzJ2eFNNZjgwemVEOGYvbmRlczF4QURIRUNzZmlqOGtZT1NvK3A4ZFFjOHhzNDBTTXo2M1Zza00xakVkYkdjczBSbFlzbVRWeHFSUmtuR3JzVTVxZVdYNnF4ZUVqY3cxcG1LMk1lRmRrTzY3ZHZxK25samRQbysxMTczVnUxZy9QcnRvQm5wMTVFK3k1L1VlNmxpMGxSL0FYZGp1a3FxakRod0w4eUl6SVYxWkRSRnF0UzEzNWM5SnB6SWFQRE82aEJoQk16UnowaG9JMVhabjBrVUk5eUhpOWlQNG1jWkU0elZ6OE8vdWdJcVN6cVBKQWRTQWI4LzVwV0dDUHliNGY0S1dxYU9tMjBTS2w1bmFZWUNPMUR4VW0vS0Fyak1oZGk2cUVYZnYyTWJxTUE1Y1dNdHpRR2FnYnNZTmhwSEFkVHY3TUZEK0dPQnZIa3pnZHpOOVUwek56bVpUVU83TEs3MEJnc0NNQmNuZ0FKU09vWnFUaFk1STk3c0FwNXN5UUVsTHhSMWFqOXVVbXNjTU5qaVJJUnp3Y1dtdE9UREdBbGJaMy9oSERBOEVZMEdheUo5RFQ1SU1sL2ltam9oK0gwS2Z4L25YMVFOQ3E2aTNicnFVYmVyUENteE9CNkFidTQycnZQMmszOEpZWTlZUFpYSnV3MXp2Q0NIQ0V3TkZ0eUVKeTl6SklNSlVHVWNvV1RrcndSVFo2Q0VpRWJ6MlQvMjMyYTBrK2hoSkc5akhoa2RLWnVDanNrdkM1cGxTU0RuMVlHWFRjSkhneExkWHcyZDZOY1BuVlVZV3EvMm9pMGNYNCszWnVUZFZObmZybGw4a2JtRVlpTndqK3pGRENUVWNuVFBiZU9PbUx5ZWxsMDFFdktnSy96a3R3MWdXSGJRUlNoNm1TTVR2L0VMcHRaYTNwL3FmdE15c1BEdC9tak1kRkR2YTI3M050dnlNZit0NjNxM2I3VUx3ZzAxL0pobVV5VlhtQVJWU0w4bDFBUlpjTFlpSHFueWJXTzVNaWc1WnBkaitRTFRzbHMxdmdrY0tzLzB3OS9uQ3lSaUE1eGVqOFJPM3F4Tm5FVktkMDV2NUUwZEgrZ09GSjlQcG0wU0MybjJSZ1hESnhacWZBR3Z2WUZOOVVCbVJBTVZXbUFXOWNZeXh5ak15L2FCUHdqUEo5ODBYV1NaTTlTdU5HR2QweFduWFhHTXg0UEZhZXBrbTFmNEVXSG1iZEZJWmhMSzFwMklFeXYzTmhmV0oybWQxc3NTcWVNT2JjVjN1d0NkQ01qcjBVek0zMnJRRDJzU0xNZGNGeVJnV0FLbkN5MGdQNEpDbEZ1Y1FYZy9KbWlUL0s0UlBiQkFXMzlIVlhvYVVnQ3hFZjVtVk1zNzFoeWJQQzJDMTNoR2VwbktJMjllN2lvTWZCaGFMSlhKRVk5RE83MXVpT2tpWXpEN1ZIdk51aXo1SC9ORFBhZENCR2ZtUW5PMi9FU0dsVXFONXQ3VDBrZ3hCK3pDRm9McWVpT05yc3NKZHZ2Mnd4Q2VJNEw3M1ltMkkxVVV3WERCTXpidTZCV2ZCbkxtU2hQazhmR1hSV2N1dm5KdGdTcVVFMnpHTU5DMU9KL08wUlhrYnJRNElzQnI3b3IrQ2xUUU9oZm81K3B2Rkg1TStKa0oyaGxrbzMvSzF4TWVjUEthaTZSRHhKQWFaYlpyeUY1S0QvZE1GVzlPWm8rSmhKamVmYTIxc1FGUGpBb2FTWnh5WmRWWlB4QWxRUmpPRlJ0OEdUdjhEQjQ3WnJuYXpEbTJ5UjVaTVRrSWtkSXc0ZU5zYzg3YTBHVldnVVl2QnEyNG5uMTVLeTJVNlFrb3dxYlBqMVdVMXg5YlZQNDc0WkhqeXFHM3BkSUJTUGVselhtUUtRTVc4TSsyak5aZ1lrS1MycG9oa2tIbm5qVVRmUW56YmMwSlFHbFZCY1htRW8zTmo5bGlaTml1NzNVbTJXeE8zMjBBSnViL1ErY1hiV1RKekdhM3N4b0szeU9HYmM5aElnMHduMlBpOUdrVVlXWHY5aG4rR3A1Tlp0QTVrZHFDTXF2NDF4TzNFZFR4S2tlZ2MxejBNYjFFenlvNGJ2L3cvMnQvc3FwTEZOYVVUQVBQdURYa2JWYVNBUEhoY0JGeVJwSWw1NzdHREhsT2dMNEx2bXkrdzFKdVBVSmtHdUVscHE5dlVoR2k3VjNxVktpTVNuSzVQUWdYQkVySGUwR01NelNoWmtPWFpWNWZLVzZSMWR0cHVkdzFneWhQN0Y5NytKUEdyY0htbmRtVlo0R1NXSGdPUEV6WFplQjU0NW1MbStjUk81MlNSeHhIWGJJTDA4VXFoSGk3NjErbXZ6VTQrNzJWYzAvcDVCNHVnZ2hIaklmQ0tpTWlBVFdPdWZMTmV4Tjg0U2M2UDR0K2RFdmh5eTVoZGJaU0lTL0wza0V4ZUZadE9KMmtnVVk3aUZWMjdFa0diTi91MlRieHZCaUlZQjVwRnpuYyttcitPNFZKdkE3QjAwbjVib0tNMDArbUhYNDRLRlBJd1kwalFEUUlUYjhqQ082d1pDS0NOWkdPazBCSVVCbTNhM2hCdHFXS3VRS2J4UHdTbGZORTBtajhiOXo3UU9kYUw1ei83c296ZnVhT3hWN0xkRDZJL3RXbzkwemVzYnBBWkw2Q2ovQ01FSlUvSWFLb2wyN2FJNG5sSGtjbE9SYjZCTFNrV0psMkgwamJvU1dDd0h6VXBmOGtzcFBzZ3A3VFdRY2RVY1JIUXdsOFdZYlpQRzVEUnp2SVJEWHMzbklmdGZzRjBFcWt2K3dtOVhQWFd5ZzFON1ZrYjdiV2VXN1VUKzFFOEJ5UkxzMmlzRG9zeXAyUnEvRmxYaTdsaHZPRUdCenZpM1dSM3ArbVdhUlpONlJIUVFaZDVnQzc0bEx6MEtRSjRIeG1FL3JSV2MweWZvWDkrTVlxbXZYMGEwRGdFWDdacEgybUprbnkwa3k5OTF3K2VXQmlHdXhEUnEzTWFlVnhHeE0wKzRVZCszVkRYclJGZnVOVEIrdCtIVWxlNXdGWGxleUE4MUwwZW1ONzVMNjZvcEVCNlNqMkJBTXY5aEhEMGFaYXVLazJPbHcwR0YxbmRZbHJxZ2JEZmpMSWovRXNOWTFmaW5tb3E5aHI2ZGt2cGJXZGJXY1hLU0dwQS9ZVUtDeEFPWnUxaDhnWmpwQ1VJcWJEbW9iWElUM1lGcFo0enNncmtDOWtHT0hZNEVwR2dRZTBpa29IdE5XRGV5ekNIWlBWNFhsYUFCTHdEZFE0N0tscXVHYmlZUm1lMUM4Z3dvRFp2dGZnYjlINUtrQVVLR0JxZFJmSHBvVVBkbCtERWpWQTVzek51dHFlaE1qZS8zemtEM21GRGZvYTRMallPbXpGNmdzd3RlQ1JUamVOdWdKbWhiOTJ3NUJuSkZMTld6MXpSTlN0ZzhwRlNWakdHNFN4dWJOcDAwdDNXZU5kSnNUUzlpd3hrSUwyN2U1OTRWT3RwaGxTREFnS3ZHVXovSVpiRXUzcFh6NWdkeGRsNHdUWjAvQXFiVnpRbXMyeXp4bGJZNXZQdDhZOWpMa0kyaTZRNlUvMHhPc1cwKzg4b2hObmlpZXkwZ0YxTG9LSmdBM2lLUTFzS04xR3pubkJIN2FTSXp6UForbGJRaldsdUxtb0lZVndwYUcwSmVBMGc2SUV3V1VVanpaTnlRemFmWDhpZ2dPUnoxS1RGUk9LVzdtZ2hNd3Y5WVlpcldHYS8wb0hiVmFyQVloeWk3UVI4WTdTaWlIRHAwa2F5NU5LSXM2SC92aG10MU9wV252VS9kbjUyWC9ucUEyWUxmZlVmOTBHa1U2ZHRjK0VyZlVNMWtCdXVlZWRLOTBrYlF0QmpyWjZoOVVYRlpsSCtCUXIrUWtGV244QlptRnhmZzJFL1QwSE1SQi9idDdqSXl5bEJRQ1lsYVo5aXVkazV5d2tqd2JZT040WGxsNUc4RXhobU9uL0NvbHg1L2JuOURhR3lvWXpnOUd6Tmw0V243OGRWY3VDYnAyYjlMeWZFb2k4QUZTSFJCMGY5YzNQcVhmWjNSTUsvQW9lWUxGK1JTcFVCMC9DOXlCVG1rMFlBdHVRZHFmZEFZZmdIKzg0RXhWMUZLWEZONHRLRWhjTmZjSndUaWpIN29lMVVwME9vdE5QUXFTWmttZ2YwQVR3SUg3QlVnUGpWS05JbTFsdG92SEZsRVB2TVEzMnNMUnp5QkEwOVAyZTE2QXR2UmxTVGdKaDFiVUZhMmVITXlKeEEzSjFFNlo2eENrTW1rQVVYTVFRQUo4MzNxbTlNZVFKa2xUYUt5RGpBY0hUemRxcThEZWQrbGlsL2ZRYUR0N1pQMStUV0RPSnd6SDNQV2FWY3pSUXZWczBQYTJTYnhnSXoxOG51ZXc5WndDd3JQZjVZWm5QY2ExaGV0UFEvRVVYa0JFZDAwc3lPdHp2UGszMERoODNmYmRnZTMxeVVQNkpVbENQRXhEWkhTMmF1MG81U1MwRFVNT1pSNGxVa0daUVpFSjFvNTZ3WXErY2ZoWDE4ZnRvZzU5UGtad21ZNFdCWThOSTd1TmhOekl6VWIzbGtwTnRKdjVtTndOU0NBK3UyMFJNRExob3gwNk50WGt1UHZPeUFvTGZFTTdocGhyYldGSTlVemQ3ZVVIVThObEtzd21PSWxXZEdObS9HUFZjS3BzV0Nkek4rdU9Lem5SRmFmVW9UOGlDU040MnJHT0xHTDJrRWpDS1F3ZmRtNmhrVWIySzFHajFlQ2VzNmpxWjYyd1lUenkzVFlIQU1TV0REQ3BrYlNuTVdkdFhYVkpwTWx6ZVptTkhVZXhJU0JXMkVCWDdkUy9JdE5CT2N4S2ZJWGVZQlduTEh1aTduMXVnZS85VkxqdllsS09HSjkxWHJPUng1aUw1UFJza05USTBqV28zTXptdDA5V2ZBZU9wT0ZoZTREdjdNckJ3NG8ySDlWRWsyeXFGMStOc0NjbUtCL3kycEVoWndLc3cyMjZHamR2b1FBdnRPVEo2QVFHWkpVSnJkdmdRTVNzRDdpRi9mUDQ2Z2g2NWpQNGw2VzBGaUZNWkVaK0FkQmNXeExtYkpRMnlUelZtRXlwWnlKQWhGWi9VbDUva1c5ZFRBV08rYTJvUDVMRGNjSURMRndmZ3RQa0h3T0xLWVdVNHFpNStyRjIyUHAraklKZTlLOUdRQ205eEhLd1VLRU1QbHJqWU1KTTFhc0xOSkFkbHBTMm11eUR0RlpZcTRIZW9raExHTGFqK2xveFhqajdDajI3SE91TzRvY2VFZmp5b0tpeG1mRzZtSytLLzErOUxJeFhaK01Mdk9iZ1J6elJ6MjZvR3VSNWtGaGJEelVSM1FseDBUdXVJVnUrbWlYeDV2U05CRG9Pa1ZLdXhlNkNVcjFtODlGTTQvS1dPL0RqRUp0MlcwYmRGdE4wOHhWVEYxdDZtQkpFdjhxMFYyM3g3cktpck9rdkNnRFcrRnV1Tlloa1lFVkE4QnNTVFBWNjc0eEhwek5FdnJ5VWV6R2V5OTh6N0VrUGFvZkM5c20rZ3ZxL0pDaldiRVZGaWpIOGpOdkhsVlRkY2xHaW5wYjBpYUJOZ05FajBTY2dmOUxCeUNPc2ZhQkI2TGxPbldKMkxMeWRYd2J0UzNpaFlZMXg0ek80dDZNWnhSWHovUytyVUdQZmE0SFo5cHZPUGRXcGwvVVRGT2VFeGFlVE9lcUg5SitUQjFxWWdlblNPUmJweEFrQS9wN2dDS2QwNi9tT1BuYkZOUjZpQWhoWTVESUY4WVViREpZZHVoSjZlS1ZzYitFMWx1UVlLdHg3ejZEZUFPNCt5WCtkYnZjS3FpOEFZNlF6Snl4N25pbWduNCtDZnlIUVMrYlcyemNRS1ZnYkRwTDJhNzdOdkdyUldXQzJ5Rzc4bkN2N2R4OHl4alRRUWJqbVp2bXg5aisyZ1YyU2dRNWQ0MzhtSUZoOHljaXhWODFiOXZ3N1JVN3F4UUNFUjRZMkNBbWhZUHpRZGs2V1ducGtyUWRwSDZPcHVhYUhnUCtOL1dMdk5vOXpCYzZVWHNuWEJUbWJ6eEMrcW5XVStDdkJNNVVOdndnck44NTgvSkttejV2VUdnLzE3bE8zSVJ5d01lMEJ2UEdoMHJoTG9PSnBqZzR2ZVFPdmFkYXZ1Zk5QT1RROUdyRURZdHhDeXViSnljQ0dTbWVDZHludG9BSDQyZVZIZVhmYjR5a2VsWDBGSzYxTDNFTWRFMDM0RHo2cDB4cnlPSE5aazNWYTk5WkdwV2hLRXJ2UEhUYkpiNmdGTHJCRlBmNkdRUVY2bTQ1MVdpMEg1ejVaWXVtSGZtQ3hLQ0NvVjNVb2M3VExuanZBeDkwcUx2TE1UWFBIYisxYUhBMHZsMGxBaTRJR2hlT3ZMcjFTZllCSjIvZXlPTHB4V1RmNUlWY3NIOEpTb1I4RjF2eDg1bjc5Q3NXTkhoVnUySXMxeno0cmpLZHJvN0hObDZaVlpHK1prbGRSOS9lR1JQb0EwV2Jic3ZCdnA5bXdtRHZ1VmRBcWdNamdFbG1NWmg1QnNLV3hKdUVoUW52Qnk5Z0I5QjE5Y3RVc3FCbFhBMi9BcnB6T29YT1JQZ0FGZWFCWU1hc2lXazlLNnRKZ2RPdDJ4SkxyTmpNT0kybTNsL2UwbThnbXRSdFRvN1NORmI3RTRQVWFiWXhmR0trWTFiOXhkYmo0T0srT29TYnBzKzc0QjE0M2pnK3I5ektnZnBCRVI5di9tM2dTWVNwU0FTYm5iMGRubGNUSHN1QTJZZzV3K00wWE5MU2syZHdZUERZOEdSMjVzZmRQcEgzb0RPZ2F2SmxEQkZJYTZHWEFJWEs0VnVtanE2L3U2bHR6ZU4rYUtRa3hNVk9wWHRkclgvdWtBTkNLS2hWbG5PdFpsTjB1b1ZnMXhiMlU0QUZkaXEvU3o1MFVjY1BORFUwc1grREZEQ0RmN1Zpd2d2TnVub0k3T3AzQjdHaGtsbjZORFBSNE9zV1ovYWZXRTh0REJjTUVHeFdWVGQxQUM3SWJWY2c3eWdSWGtCcEVTclRybjZERVBlRmNjRU1nTHJTQ2NET1hHaGs5aEVGUE9kMlJBS3BJem1sb05VWkc5UW96b0hxTHZBdFQ1Y2ZIRzZTUWtoK1J1MElyU0V0R3ZsQVJ5WERTVlZaZURzam5yS1FXY3VSNnQ5V1VDU3JXeFdFN3NGU3ZXNk9JcUlEMXBUTk5wT25jcWIyOXd6YWhhVm1lOGlTM0toL3l3M2tSS3V3YW5aYzJlem1ST0JYcXltdDFZQnpBWnpMTnJrRDZJeDhlajBhc0I3Z2VQaE9wTDBEajUrUm1jWGJMT1grMzl4OHNpb1NmMXN0MG9pNFNnMlUwZDE1Z1c5c09ncS94R3hXb1hMbWR5c2FURm1kQU9vZ0dueXZscXJvckhMeTIvTndSc3ozUSsxeFZTa2tiUVpleTU4dWszK3JZK1RkL0pKZUdtaG1aMlZzTk1YZzFpZWdlYmg4NnY4ZXJOMm5GYmNLQUliTFN5cnpDcWNIOEdiRXY1elkxT1RmZkVmTTQ3Q2RTTWRiSkQzMGRwWEFaRThLZzY2cFhQd3ExdzlHWjZLWFE3WmN3VW5wbWFtNk9ONzlxN3ZvZmpXaEtyczZUZE5iWFBBdmNmV3hoRVJvWHpwNDNDeVJBeEJnZ0ZaMXgzdENjby9YUFFFV0ltZy9qZ3NoM1IyQlB3eEFZQ3drYytCcTQyVDB6cXdISk9pSFdWbndRSjZZYzE0SXdpdWlsUWhZcnZwVHFkNllGa3k4SFhkVHI4cHozRE90ZWE4a25xY1pEYzN5QzBBWkxlZDZ3RDUyMGd5bVpTaUMzS3c0YWdBY3owRFRTMjA4ZzRjSm9SUTZ5TTBBczhmdTVma20xRERVSWFqL0NSZjNBT2QveWJiZTNacnZKTUh4ek5IcVlQMHkwOW84bERXRWl5TkZsU2luMXVGckdKSk5ZVHNaaHNNNFg3Z1orMTZQbFZwMlRjQUZvRENBVXZYb0VTQ2IvRGVQdG9kb3AyY1Z3M3dyai9RMFo0ekhKL3BoN3RQVjBKNFU3UEsrRkd5Q2k0NFJySlQ0QUxKemduTW4vTDBwN0ErS2NRYTZBc1hKM0VFTkhvR0txVVY0cjA3dGVwc09xOUMrczhZVEgrbCtUSGtpekpNZ2gyaTVUV1gwMTlpYitCTU1YdDhPM0drYlAzV25nM3ZFRnBmREsraE9nRFRQZkxOVnJHRmx1dGlQQWJTM0w4NnBjenRXbElHdktySEwzK21jNlY3U3RCc1RjM2ZvaVQwdDhrQ0Eya2kxQXRxL1Z4bFhudzlGWTR5S3g4L3RMMUFvaEs2bUYwOC9hNVdnbUlONkZMRWRrQzJ2ejJaMVlqNERJY2x1TURIUmxoL2VXb1ozSHNwSmEvOXk5cWEzM1BJWW1sVXBQYm5sM2RsdC9BTlp2WjE2OURUZjFUUWFFem9BTCsyS1lRaUVnWWxlL0ZVRG03UXNPYjdoRGFjRWh2YUdFRFpQdWZzOVF6MUFFeUZNY0hwaTVQdFRxaXRaZUN1UzdNTmZsOWRJbmFLOGE2QmROS3R3aG9RMDlHM2tUK2pnSTJlNi90UnBUOU1tYXZKMTZXRDd6dHVVYm9nR0RGblRXblUvVWVmb0k3K2cvWGludlYya0RDaDBWUS9CbXZsQmE3VHkyZmNHaWZIVkhXU1ZCTzEyYUVrUUw2MUJwZEgweEprL1FJcjVqb3RiT0k4QnJ5VXduS1Y3U3NqTVBWcTVTZThldWJQZlJKalZOTXBPbm40MDVLMUxpVWdCODlNeERaNmFWSXkyMjBVa2RIb211L045QjFWUS9lLzdBekF6N2VHQld6cW9KbjlNUC81R3BueUY0UDhGOVgvNENBaVlIVGg3Rm9HYm80dDlmckFLMnU1THZkd0dXRk1EN1hRV3Z5QjBTVDZqQm9seWNUVUhPZG1lQzM0ZkRaZVJMUnh0YWIrdEJhUWloY24zUDhiSVd4d3NGVlM1WDBhZ0pHVWN3RlU5clBnMDZEV1QzemFUQzhMbDJrQWU3Z3k3eVB6ZmlCcEtCNE9URUk1cURVemhrV295SGtnbG9ZbnF1YSszUmwwaTVtYmZlQUovUDUvdHlHbTBsa1FySnZZcWpiUTl0TjBFbWxzdjBQejc1b2ZRMER2WXdTalc0VFRFWElFNm9hYjFlazhXYmV0WGdwMm9PamlSQk4wdm1hWGt0US9TVm9oc2NxVVVXNUFoRDBrc0xZYjlUR3JLTE84ZzNyUmNIbDFNQU1kcmdHN2dJYURCYUJCdGpUUGxyYlNEc1ZhcXN1N29SdTdldWRyYXhyRTdyUDVRU0RRYTE5aXAvSUk1K1J2dkdSSlBsWnB2azRlM0dPRnJXdDhRT3pxSzNvSjFUUDlSVWptaFludm1WNjJIODZFSTg0TU9QRXRNKzErZVV1WnFIRjF4UWd1d0FFeFdRZDBjOWM1RnJqWWJIcXZWV2JTaHNBRXpsSS9OM3BHYmFLZ2M4QVN1aHZFL3hTdlEvcmdPbUVGZHM2RWVZeWVnY1hNd2JaQ0YrellIRDNwNTB0WHp4cFFrQkpjQm5CcFR2N3N1T3dxWVNsSkRuQ3A1OFNRdGlNdVdiSUdFZFpXaU1aNHU4N2xUSXJrYTdMYm5Ib0xKT3F4VkI2SU01WjcxMVMzVmNoUndBUmp0MU05aG1KMlZJSlY3NDErRk1PY1NhSTFyUmlUMDRBTndCQ0NacEs0V0MwaGMzWTRweDh2ZzVKQ2wvWnFsU0g5VEdtR2xMR2haWmV2elpEZXJvcFhvM1REbkcvalRlRVRwVVlCMzBVWi9lejFUS01jTnkrK1F1OEZTK3NrVm9GcnFaYjhad0RGc1pqVGxNV1N3bXJMODBxbHpkK3ZnMlhITm8wTUVBS2czOTg2Q3Y1dVp4b2JzeTIvZWprMFp2RElEWVMzOS9vK2xFRUNhejNWNHpaeUdKT1A1YWl5VkVlMTNCS3ZlMWN1dW1rU2ZuV29VUzdnY3FMdVdtd0tGSzcxTG1IcGxxcyt2M3FrMjBKZGNSRXZNa0ZuaGZJU1F4SjIzYWYxak5FeTBjMjZLSUFZQXZWWUtvT0lpbmFMUnJqZkw5MURrV28xcWUwMEkyam9TWklvclBwbVgweDVJWlY5Qm1nNkFvV0orUTZWMEdHRFA2OVYxRnpZTzhaZzRUU3NYa3NMeW8raURtVnAxRk1PY3VlazNyQ0daNGY5NG40Qm1maUd1V2pnSVRIQmhZNTgwMmk4WlFrcHErS3U0NGpNOFduWWlLWmJlZmpGMjdaS3JLbE9PUFJHK1lTU1hTRjlFQ2N5cnFRS2dFYnlGNVQyeVFJczdNVUhiMG9lbGxGQ1dXanc5RmNUME50SElGbjRzY1c4cGNQOCtGVkhPcnhsby9FU1dUaDN5NSthbGphQlNyeHpBRWVUSFJBeko3bWUxYjhDbzMxSnZMTExmODJDRUJIdEwvcTM1SWQ3WlVsY1ZhU21KMXRrTVlJdnp0QjFhelpwd3RpcVlwcGhTMXRENlVobWtFS05vVXhXYVJMUGtXQjBKd2hIaVZ5MmphZmRaMEdCUVBWODY2eXpYZE1UdFd2c2srNWhJNHF6RkhjVWVJWU5JUmNMMUVtSVJQMWxFQmFuZ1l2b3VjVk5aOTNqUnM1TlVpcTNZV3hwaFdiU0JCQmU4cGpTUldpRkZLd3N0WXpFWVFxSlZpYUFGdUZKQXljaHJORE1lcnIxWG43Mzl2QWRsVzJHRmg0YklLRG1DQkFGU1B6YUFZSnhhNjRCbE54QUN3NllvbVFqZGFFSytOMHFyNW0zeFd1QUZYYUlQeGxZMHlrT2UwWW11cXdkMytBeHBXb1dtWHF3V3djNHBzYU9SVFN0YVlsdmpxS2l6YU9LQTYrSUswYi9OdWFDLzhNa0NkVHlEL3RjNlVwcWVubGxvUHZ6cyt5TTk3ek5NZEFXSFVVYVJjNUROSFhQWEVqSDdITUhWQXNtRGpQc0ErNDkrRWswa3VwS2o1TVB2b1I2TXpqMGd4WnNYOTdsWjlPazFtaEoxYW85KzNjUitycmtuL2R5cnpnWG5qUE1QVTh0Y3h0ZDFtUkJmSzFxenZJOG5uVkdyZVh6NjVObVRDQ1MwRDhkcHdrOEhwWC9UT2Y1Ym12eEMveC9UNVBiai9SS2xVYnpZMFQ2RnU0YTFWTFNJbXlZVTNKK2dDNWVvY1pKV08vZEJRTkJRRU41VHVpcDViazhidW9XbkN6WG1oQUYxc3lJMXo1d3hYd2dmQ1Baa3U0KzFoeThyZFNta0l4aTJIWXVnUWQyS3lRaXF6R09DRlFVRVhWNmN6L09mMTNDNDNJRzNLcDQzMjlPREx3OWJPZkVqbGRUeVNuRlkrU1dBSWxyUml0WXoxMVkvTzV2Zm0zRXFaNHBtekZYaU1mVzRoRUJzRksvejFidDNLY3RmV3ZMY21TKytTeUs4VThlVGZ5N1dPL0p0NVhXWUV6RDE5SDQ4cmVub091SnIyNndjcGwrMHNXbncwUlA0MW9tMDdBM0NhZ1pRSUlnN1NQSklBWkFIS1MwSjJSVmpnbm5MQ2NNQ3ZrSmtLa21RTDBvNFdaZDhIcG1LaTVmVFdHam5tb0xOdnVnREZaeFpGWEZWTUtuaDcxVHFFNHNGS1JBZXFaNWoxcm5EYlNHMWV0dkIxRUVHMDVsT2FqVVJZeTgzVmJVQW1WelM5ZjVmYzVUTUJWQnJrZ2hNc2ladXR6cVZTbzNrdDQ5TkE4cE82ckpZVTVpYm02aitFVVdBU1N4YUtGV0I0bmJYRDJiR0pzdE9ZYjJTUTNZR25ZZ3dVNTkrOEdhcUx2a0MxcVBMWjNaY2MvQWlCbXdubldKTTNqWW1PQ1RhaEdJWmZvbmt3VmlJNit1OUdsQkVGYXc0U29NeWJwekdOL25MNDgrenRoMXNXbWhHektyWGROeC9FdEFVMFIwd1N3eDVBYjV4ZUdQdDd2YXFnR01FbGc0VTIvaUc2SzQwRnlLdjlQZC82NmloMS9sekhqZ0dKbUtZWVYvcGRwcHBpN3d0NzVHSi90RnY3VXMvMEUxR1pZcHJtVFQ0dkMxMU42bnBzYWtJOHF4OUFmV1dMSmJ5TkRiUjlYb3JHZDh2Ynd6TnFia1FFVHRuTjBaamtzNGs4bTAveFNhK25zKzA4NHE2V092T1V6M0ttc0ttRjh5TUdneHFxZCtoVDVyMndldEhDZm9QSGZtNTFtd1hEV0JManBkdGNMNnJiRzN1WnJxSzBxenpCUEV2cnlyZU00TFdiREtpUzluTXpxdTRpVVNrWUpkcy94dm01TlFJaTBCN1Q3NVZzT0hpM09RWVpqMURkM3NIOS9NdDh0a0o3VWZiUUtDVEtWR3lZYjBjK0VldEkyYTFDSVFxWFlGbDVpWXp0cUJKVXZYcEk0YWNBV3BwemVNbjlzWk83VUxIZHB1NXBnQ1BOelB0aTR3OHcrNnB4MlVmZkZCSGFpY29MS2NjeHFvMXFuT2hUbVdkamw2YTRJSHpFakxzVmNuenk5ZDFiWFRabTVGUjNPL3BISkhxc2xpR2FKVUw3Q2lraWtjajVOdmRjZXpiL3ptWGpqMFE1WUxWTmI1Yk4rNnRWUHRwS3llUGVEYWt3a1J3cXU1dkU3RGFUOTZCb25UK2svQmsrM21vQVlCWUhCRnRzYU5sbmYzQXEvVHdDRjFhaU1YaVJMcG1PVC9JajAwVzNoQ0ZBbnBPWmh1cUN0enNEc2ZIOXpYU1B2MTNEWExjQ25QUnNjZjR3VjR1RTFUaENGOExHKzl1NGFRMmdTSG9ZSEhYdVg5eklCdThsV05aS0hiY1R2MVFoTWhtZFFkS090V0twL05oUzRVTWFRSHovUm1aSDhkN000a0VmM0VMeStRUGUvOVFMOFdKMnNGNWdIZTZRQmtmWUc0Mkl5WTUrazlUdmZ5N2ZPemNsMkZWZmQrS244MFlFZ0M1QTN3S1lQai9QbXllektBa3NYV2dyZTE3cndSbnNuU1dvbGRWTFFaVVRpYlBOMG95K2U4MXBmTlJSa2FUbHVJVE1ZV3g2bi9rcjFzeEh1dTRFWTNqNXhvcDQ5ZjlYVVlaWWFCbnJmOVQ0NmQyY0lRM3QyZmxsZEJmY3lnRUljdUFIVkdxTlJOQmFwZlEwOVpBcll4VlFhbktRQzBiM3hCSmJ6dkczdVZaUlU4c29YR1lxRXh2MU84Vis0ZS9zYSt6WitkVjltbUtDbDZwZmZhTDIyQWh3WGtPV0pzY0h4WnZKVzJyTDVQSzh3MUJBVUNoK21oMlovTGZvTTdrL3Q3M2haRWtIYW00ampOaW13Zkl2WHVRRGczZUVPczNyaDVRd3p1eW1MRnRUdFE1ZEFabklMTE9VamVwRytnbkhRTngrMCt4dnRsbjFrVi9UK01SdGxSUStKNVR2RktzUFYrZ1YxSkhieXJJdm5zR2g1Tlg4Si9YaFNEVHNFWGs4WWVpS3drU1dKRkFmdnFwUmkzQ1pUaHZLSkt4b2h4NmdkNE1yRUd3bUxSN2taUzJpRXdXR29VYVljQXMyWjFMOXJRbW9kMUI2bGgxNmFJSTdGZC9SUFFCNEx1R2xkT0p5WGlSdkJnRFFMbHdVY0laREtnOXVwNkJmMHdGczA5ZXZ6b0o5TFdvUTZkOXQzNUJHeDQ4alFYL1kwYktjMnlEUGFya3dMVzFUcWJnYlVWRmRtQzdjeldWd1JldXZjUXdzVlh2Vmw1VkhwZ1NLUzZISDBEMjBQczI0dFhnQUVYNmxhL2ptL3NDbW5OZ20yRmhSb2NmVy8yclAwY3FNSnVoc3EvS0pmRGFGSVVzdkdyNjd3VFAxK0hBeUhENU1wdjZkYnozMUg1dzhVUHRSRDJ4b0VnM2RVRVIrcmYvWVZ3aU14c09WNkJNUS94NXBycWhBb3pzeUpDYW43THpqNFZ0RTdIelI0SVE1Rk1SYWpsVFpaVXh1MlVNY0RUcE9VdUJUUUZoMDVhY3owekNIbldHRWZDb2g2QkJadEFFN0cyUU85ck9CTkluRG9GL1RIU21qUXhLcnZZQTdsM2llWHNIUERlYkhWWGxLTEYvcmJ6VndqNEp3aCttN3hBck1BS3RlQVRUVTBKT2ZDaEl6Q041aXpnU2RGWXc3OE5uYVROeGlCTFp4L3ZoZy9jaGpTMkk1aFJ1dE80WEV2WThHeG9FOVVtV2VqTzRDZUZjTzBPRjJsTG1FQ2QxMmNCL0hCbzkrYmVrbk93RC9Db0ZrSlZIamNvN2FFQkxvWDV3Z3cvOUZ0d1hEeFJzc2lhdHpLOEJRVXk2RGNkcGZQRmFuRUtJVGdxUWFvVWdtLzIzNEwyVVQzMVZpb3ZqVFJuK3hZMHp2Z3JJR3pvcFJhdnhILzkxRU5CY1FvK3Z4dDlZRjY3TlF4bzJuTUVmUmlWRGZmUmdxMW9yZXQwWkxTY1FuNmExVldPYTZBeEI1MHRsTHB0KzRDSHZHQnI2cTBhckVaZ3A5NzlHK2t2cG9EUDg0R2MxZXdtbitCUlg1UGtjbGp6ZzRRWWY2dHBYYms2Qkw4NThtUk1xSkJZWHlXU0FyYkpvN3dycTBlOFZOWGZFL2hHUE81aHdCa3BYbUNRaEpBNUUvTnpBMS9aZWRoT0luOGt0TGJkMHQxT0diUGQ3UDRzN3J0cEo5dlpSNS9ORlk5S3ZZeXVNNm1SWm9QeUt6OTFiN0hpTjR3ZXJPdFBlL21pdE5lYWhwQWhYcVFuWk1zREZwc0pFNFpYVGU5RGpRalo3bHhJbm4xdUs4L21RZmRMaHBlNVNTNjU4dkpucE84NFJINnlSOXA4aFA0M2VKMDJ4OUlvUmpTZ21jRUVDMjlyTnJzejF0VitWbEhsK0lySkZwdjRrbXlwTTNoWEpXbEF6ZlpRb1lBRjd2NTBKbjg3bE03eVViTkg5ajdHcS9XZlNnSFBPekJvazRzaFhkK21OdExIYWdrUE5YQ2hlRVJSVmJ6Wjdad2twL1hqTzE0TllSQm5SQ2tWaGpmUlM1RXpkOWUzWVJEMFYvRU9QdU1BZmJDMEgwRlh2V3BZMlJ1d1Nqb08yTzg5Snh5bWdwMjdRUk1KakxLck5EeG10NHV1VXJkVFYyc1llUzhja0IwM3ZobllwOSsvYUxNOGVoaE45TFpHVUszQlV3Y2ZnbE41Q0ZkcUxYWktLYnBwelJhZ0tNWHlSbUtCRk54U3JBZzVBNUtoNU91M2Y0N2tCVkRCWkRndEdBOGk5dUpGTkpQWkxXZXJwbHp2T1JTSW5VTXJScW5wRHg4NDFiZjlsa092YzBxWUx6eWQ0cWIrc1IvcHBkSGs0TGJGRkI5V2lhaE4wYkpmVkFtWDJzR283UW1UNXNIYnFnWnNBTkVxYjdPVmtUb2I0S0k2UVUzcUNUVG1zUEU1UE9mOWRvMW1zcWtjSjZyZkgwdVBSVDVwTGVVcWVkamwxZ21OY3lwam5CRldJcHNZK3VjaXVaZzZObTE1c1hhVXVFTFVxUktEcmxyeHJIZW9tZCtPOTRGbldIVGZBL21lSVE5Z2YzSVVSZXpsVFR5ekY3L3Q3a3dmOHg2RmFKanVFNHlkVEZXa3o5MXpBSExzc09CRTFaNWIvVUxqc2d1RFlKNC85YW9yUFQxUEFmN1V6T0JpTlpBeEZnZ1h1K1h6cjdqcG1MTWpvVHF0ZGNSRS9GRUMwSktKZUJoYmx6cStiN0RVdnFTY2pLZ1pGd2FRTVExRDdWN0RFM0E0cUl6a0haWDZkU1k4YnZHd2NaVjlOZTJxRFZDMVZMSEt0YkJWdWV3NFZsYTdtSE5iR3lWNmYwYzEzbXRVZE1HeDNWQ3MxeVlqd1ozYWdlcTFSK3JlWEN6T3pMNVpaZlBYam00ZEJkU05Lc0liakhFT0xjTEZ1WHBtZkx4ZzdSTVBJZUNxZkhlTWlEZE9Gbjh6UjIyRUZEeUI2QUJMcHdPOW1yNVhTd09Mb0FOa3VrQ1hYUTNWQTkxK2JmL25lcUpqZS9pTGN2SDF1Wm0yaUt1d3NwTTBBaFZZZmhrVzF4ank0YVc1S2tqcEJuWFFqWitjSUZFVWJ3R1JZMzhML0NiczJhbHBQdjJ1TjJ5bVlzTGNpRDRJZ1ZPREZqTUhUWkw4UGVHNms1TC96UnB5bVlrNE83eXF5cDUrM3pjdnlnTWVJeVp4VGtxVzVPOWV1c093Q2VMdE9DUm5EU0FpZlRtQktoUW9HdCsvMjVYMG1FcTJzR050dWZZMnRsVmtGc0hvRFdTWFlWUGZkTnBUNjEwU2pmZHYvZEZlVXhXbTFaeHRLaXZjVnE1M0hnSVhQRVBubGRVQlZBa2hPYU5PWTlkR1FxUmhlaEdEcWNzVDJnbHpHZXRYZVlBQTV2VjJ4a3Q3V0JkQkp3ZTBJT3pBSTgrNGQyUStaM0JVZlBHN2VVSk12U05BRnUxU1owUkZOWUlmbkhyY0ZCeXQ1WXNPNEV6d2dTSVlnOFBJdVJPSVltMEgxL282Nmd1eVp0SVJlYzN1MkxuSEVtZXREb1NZdlBZZnJLdDBPMndEZkxxeVBUUG95d2U5Q29jdzVZMFNHWVNnUVdxSGVJVzBYMk5oa09BemVqZDNrVzBMRWg1bE1UeUZmVWwvSml6OG5pdW9VWjFNRDlZK0F5SnVwcHVndis3UlJQSlExQ3JOZE1ueXQ0eVE1Qi9XWTFTZlR0UUhGajVjZ3Z5STg5TkVLaTlOSTA4VXRGdzZRNEZkcWZZdEV4emNFZE5lcXFSUmhzd2dOS0dWcVgyYXdSc0ZnQkxQY1ZzUXhxSWp2QVhwUGVPVXVZcENLNkc0alZjQy9zRjg3WWtjUXZZQ1l2MHFOODI0UHIvMVBTcmhvNmgvUEtycmZpSEtBTyt6RHJDVnpCYThCblpnMVY1cjVwZTJBNFY1NitKTXI3OHRlTWpZcGE0YUVEWmRqamdNaXp0VVhIL0huckFoSWljMm9uUFBtVHRLQm9vWHFLdlVnRncrWFZsWCtqeGo4VFI5bmlWcVVValVQcWN6cUd6S0o1NmQ2Sy9DV0R6M3NoRjFxYUF4YWhPaldtdHkyNE1mYjNDanhJNW1aYktDZ3BlWnI2dG5ibkE2Slg5UjNMbnZnRDJ2Q0x2QnhFNVJmUmZYR0x0U2NRMjdBdEN0QkpSQ2Z3aFhtUmdjL01mUHJWZ2FCT0UyeFlLS2tNZXlwSGx1bitzMmRLL1FtRElvTmdISzFBMUdRY1c3VGFIVndZZWRWRnJDME9oanBGa0xpUU1kUEdpZXNhVGxpTTVUL0VJUmVDQ3VBRDQxc2k5NTBSYVRMTnJqSnRFU0UrRm43UG5YRGhxd0ZJNlVXUnRzaGZZY1hTZE1TYnAwNzBpRUNFSGZ2UFNGVmV6WFUzZXR3dUVzTjNLSWVlbE5HNjBjZElBdElEUVdwaytKbFA4N0d6Lzd3cmZyeENiMUN5TmxyemFXNkhJemYvbm50NVZhRWtXa0dMcHViQXdNTmxZb2FXaE9reVcxdTl2Rjk4VXZMc3MxSkwrVWZDUlFaMm53MVFaYm95ZHo5aGlJMWZRN0lmdTM2TTJJbkkvTi9xcVg3cFdTNkNRbFFpRmtEQmxBeGQ5OEJEL3lFQzh0UTVGTy9EaDJ1bk9pZlNUeU8rdUxWZkRNUG9rdS9UYStBb3ozZ2ZnalFVTkI4NysvWGM0VHRWTXZEcTZQamRDcHJHUE44S3NuRitwaHdSMmdjWW9jM1Q3V1lIL3BKc1lsS2RMWWViUDNZN0pQYUlZeGE5Qlp1RGpaZWxZdGZMYk5uRVhuWjVnU24vRU9wbHozOFFGK0dOZWFsZDU4RHBJMTNFQSttczhkSmJEZW5jZVk5NzJ2TGhIblFaUWtDengzVnBuakNEWEJrOTgreW5EQ005cnltR09RbkE0TEp4cjQwRzJ0RWtjRyt6Z1ZMeHZBczZWSXN5Z2VmMGNvb3Q0RDhkRGNDV3V4YWEzK0czbnlUcE03d0psZFZDSWdFSzFzWUVEcy8xQzdNV3NPT2hCWnpPQXNQL1VVcjJQSDJmbzljVU5ZN0d2N1RBN2JhN0k4dk91YXdpMktEMVd3RXFYcTVpYUduNWdUbU1sVG9WeG1xd2FobXJOZnA1blQ4c2Q0NkJIN1Fsb2UwNW9qZG11c21KOUV5UXVKVmpkTW0zSll6UG4xK1cxREZaT0NRaTY0WkNNUTl0bkdOVEk3cjBKZlBvNHNqU0pPT1pvU0hzOEFxZDNoVktXUmhibitDd2RmWXRNWE53Zm1zU1k3RjRTaWkwOFpibTc0WFpld3JoQStLdzRzV2xhVk1COFI4SFY0QmR0ZHVyNEdWZFdjOFZSUmY4cUlNbzJGRW5VVHpPUDNoajBUUzNoY3JmSFI2N2xPV1Jvc0w2WHR5Tm1ZMlFzaFNZNFRSMHBzNUhIZ1JYaHcySUxYQWZtVUFqOGtVTU53MTRJVEFqY0NwazlXOUdDT0ZYVWJ6VG00aVV0NXJBaHZ0NElva08zdzJzaWdGYlNUWWVuSmU1OXV1dlNISEQxY1lROEF4ZSt0c1dxdlpCMjhjUjNZSnc5VlJOa0pnNlhuaWk1dHZUTzc1NENvcDFwVXRhUGR4S0UvY0xkMFY4bDI4V2ZCUElkRStPc1ZkNjdoTEJkMlhJelg0Mno4RUxwcFZtOU1FZllhYzhCRnExQWhRRC82dENRY1I0M2F2d2RlYytqSDRYT2Z1ak5vVCtoWU53d2Q2L1hLSHQ5YjV1OHVWaDJsMVJjUlhNT3NHVlBXYWNSSVUxcm4zWnNzcDZydUFITXZBRUNsV0c1aU0wM3I5Mk9RNGFFM2dIVjVRdlpwMUJXTDh0OUgwcjBzQkdieVc2S0QrK1Y0WUkzRGtISzZmWit2dmJsK0J5M3RpaGV0eXVwNHlSZ0dmQUtaTENHelNMVXA3bDZBbGJscU9uUTBOSkdIb1ZLNlpnL0t6ZUJ0TXNhK1cxeU84K3pFdHdSNkVBc3hJdWVkVXpzM2JSRVZaMXpOcnJFekpIQ2Q2WVhTZDZHVFVtK3VzNmtkY1A3cjhoR283UnU0eWs5NWdWa3kxYzVYZml0MmpmMzJqTk04NEI3dm5lYngwVzBjOGZHcUZPeTJ4ZExIZmJDRXk5a2NGR2x4SXJpNGFvK1p4eExhL0VGNkRBV2lVbmh6SUlMMnN1RjA3VUUrUFF0eWpvNTUxbTBnZGpwU0hkQ05zOTQrZnhlM2VnRkd1RllwMUVORVVnSjRHelU4eGtZZGdyT1ZkVDJEQiswb09icERFRjVpUWRXcjZGNWtTNXVocXVkV2lLNUlMTkhMM3hESENISUVPUDhFZnhRWkN3TGluZmdXNFZqUDdzckorTTBzb0hmQUh3M2tCSjRkRlZjZTBmYWw2RTRBa2lDREd6RHVZZnpYbHBObXk3cjBPaFdLZm9CTHRXUXhxVmliaXZOTDA1Z3dIakNsaHhXT3EydnF1Qk9nNFBNMTdLSGpzQzdWVnpPTjh4SzRmVzZNMDd6cVZOUVZPQlhIbDFkbHJCTlNVcytIVS9vZTZlQ0NLS1RVbEd0SmtmWW1QdEVxL0Z4UDJsTmRrVHhZcUY3YnQ0cTc2cjNJNWREb2NqdTVTMjhqTlZNNitIclB4N0VyajRlM25DdGVuSjc0ZWh2TUNPZkFRbkxZN0NiditSKzBTMlNQd0RqMGRUd1RMMG1ZSm5zeXdEaXloZUlqaGhDK0xWL3AvV1I3K2hlaDZ4THZrb0tUbE93bFRUS0ZJSDRoUnYwSDR3dXBlVHV6a2lGVDEwTU9EUkEwZ3JscGJEQ1pZMVdIOExYZHZYU1d4bVBvcnViMDhwL3BXaWRVZkFta25JUER2ZUcxclJ0blc1bmZLOWFTR0ZtbFdMR0RSNk1DQ2ZyMSttS29PWG81dmZSYWRHTEFLL0h5YnFDMjZ1a2Q3T2daYkNPbnU2L2ZTZkFjSWVja3REYlBzMi9teDZHVnBxb3FDOWZmV1hWVEdXK2hpam9HTzdpSWlSaXh6Z3JxbWRDakh6cDgzOFUwbjRsSGZ6L0hvZy9SZ01mcTdEbEZ2TzQvdGN3dXo4ZW5CbytvMEJvdHNNNXVqVzhjVUgxWTl0SHRoZU43NlVBdUFVcFNoVFBDN2Q0bTNwMEFPK1hIZnlYUmpyTFJHNTZXN2NqR09CVG9jUXN2cStVUm9Na284bXcwQ0tZQmxrWVRIamlJMjVpeE1xYXFrTkxPZmE3Rk82UXNENnBrM2NXQmJhT1h2UzJNdmRZVmVmK3BFT3lrTnZXclRDSUNCaDF6VFhjMmE4aDkrdUMzTXJjbFVuSC9IMlAxWUhSL2IwaHl2RklrUG1OMlZKWFNvcllNUFVRM0R6eHFGdTkzbmxVSGJKOXZNU0R2RGtZWVhQMUpEZnRvWWt3cDllUnh1SUo3SDd0VmJCUEREMjhWeERSTzBteFgrclFKLzZrVnhpQTVFU0h0Z2hJRkpnTzdpMmZ5Z1R3K1hRemRHeHZkNll5eHVJUG9hM1VXSThVbHdUcVVaRDNnUUlSUXNFUUwycm5oWGx3WVY0bWtyWTBZU3V6d25xQjhLblNoSTk2RExmYmlybFAxSXRoMFJPOEJqbExJd0pnbExpTmJhV05oNXlwL0dpTWMwc2lYWjZ0RitXY0NhN0R0WVpVRTNtZSs3aDZmT0JOVlFkNnIxZ3kvWWEzWGs3Y0VSeVZ4N0kyMnZaNWFLSWxldC9va0NyTWJ2NVN0bGgvRjBlaDc5MzNKMDBsbk5MRWo0ajNLQXV1YXoyOEd6NXc2SHVPVVhJbkhaK001WUgyMCtrZko2ajFVVnpYejhsQklIeUpXZkRzbkN1YWs5cDAreWVNSUh1NzFnOExHbk9QWlptTTg1aTFvM3JUVGE3QitreDdYWnNwUmQ5eE94azY3RE42MzdxSlVKQVNoemtUWkRtNTEwb3pSZVRjdGl2eTJHcm5rSk1xdGw1bmRpdjd6bnhOcWVTdFAxa0tnNndKYWdhTmp6amQ0QVdhTGl3ZUFlZnhwTmtESWJ6TXp3T2RNZyt0R29rZzV4cGp2b3NaZzQzbm9JYkI2YndrS3JYQVJxNm0xMEZhM0dSb2N5aFRPS29hMCtValdwSGczM0hJZ2RVaEU1SGFQaXhSUDJkL2xicEdMM0VSQ3hNRWlkMllEUXVJWVpoR1JOMjNQSUZrQ2hoY3ZIZ3B4ZzRlaU9iTEJrZ3RMU3UzdCs3STRmcXlyNDFPREkzODhpWDJLZ2hHVGhnRTNyMEk1MmxMamU5K0ZuU2NTWm0xSzRuSlBOZkQ0R3VyR2RaeGhSeXRCTVNCV2ZYL3k5YXF2UEpYSXNNVjRjOTh3TVZ6MzhJTEwwZ3NyY1lYWnppaEdFNXZBWFJvcE1XN2d5MXpoWllrVytRT2EzUmNFd2ltc0I2dmxLTFFRcVVEcmZ1TTBpSTd5VzhIZTB2aDB0RDBQV3llVWdITkpBMVQ4VmsvV2wrQ3RQb3M1ZjBKY3FudENESEpDc2h4MGcvU3V3QStUaGtlMnl3dlBLcGVRSFNXaTg2eGFzV0xHUFo5aXRSS0V1TFB5dE84NjVBZzJCYzFrcllqcHZvZ2VlK1NyWkNtVWI4T2lWQVFaa1lrUEEyWjcwRDh5Q3NHQ2M0RzRuNVFJdUZhTmI4UVdLQXFSNHh4WDFQQVQyNXVHYUE1NmxFV1JsZDQxQzcyamw1cTlCUkVUcGVROGdSTktjWTN6ck1zcE9tc09RRm1ybDhtZlh6eWNNQWU4QkhMVmNuY1F6clRITHRzTElVeHFya2QxVnpKVDF4NUJJVHF5VVZmNDBvZXRMd1hFQkltMDl1ajVHSmQzUEU5YTIxT1A4Z21BRDNOMTE2YjA4MElqeXNyWC9CZy83bzJmU29Ia0RIcjZJdC9RMnA3b1BJV0dWNWQ5WDZFTVpSdmFldUdsdXhUOEl4U09xNWRvK0dFNFAweElNSDdwR1J1b0R1eUZjZStNMXJUYTNDTFMzdnBPb0ErUzhwV0paa0t2QjI5S3M4YmdoQkgrc3J4Q3c5T1h2MERwdEFobkJUYmdESUYySkpzeVNaQ2NGcmVSbFZOOVVLcUp2Z2FKdTRWR25IemIvQlNKK2dLT3U2dnhxWmpCWkdsSitHRTVaVnZmVUtBVGtpL0wwQk5MaTZCbnk2eW1JRnNjN0owQ0gzUzFmOGZJTE9CdlFuWE1NMWtadklvRzNuSHhtS1FCUVVQODJBazZaRWhmYWtkTjRpbmsydUU1Y2lCWjZtWWFCS09udEd3QWg1UzU5V0thVlZ0VS9tZGYxaDNjTnlSZDMxN01jdXNQRjFsWDFIMFRjVkV6aldLUi84NUt0RXBOREhHVE5BbTQ5MlMwdDY1WmhtVk9oMjkyclE4THlOUnh2aWZ5TlB2TUd0S24yS3hqM1g1N0dMcVhEQXA4clRzVUFRZGg5N1p5MUFVMVZ0SDFJNGN4VVl1MEhYem5iRFBQVDhPTDBzUlNUbTBNcVp3QzF0RzM5MFRrR2NXckZUM0llS0dBQ2JQRWpwcjRMcWdKZm9oTW1CZ1BXeDJIZmtXRUtSOWp6Q1J6cjZwWkZGdjZCaFBWV0hsQTFTcG52V2hEejZ3eUVWc2JIREdnMzBVR3BYOWFOSjBpRGFtVk9sU01heHVsY2Z1ZHRjdTR6c3I3N0xRdzdHb051MnJnSjUzYTZ3QlU4VzlVckpLTVBlRENRQi9LbHMxWlBEd2h3OWJLMWM2SG52TUF2c0VGUWRlNlVUb1BVRkNmUDBIa3BRYUROY1NFYkYwU3dzcFdXRXhUUGNIVERmN1hXN2R1ckNrVm1qOERuNEVyaURZT1lxSmFibGgvckJ6eW0zVlExZ2V3dnFMS1VQOGhvUVQzUW1jODFWK2EwY3d2Z1o1Y1NTU29oaUZhdnBvazRGYjFRT3J3NmtPeVNKQVJNWXZqYktubWN5TjZMR3pHcGhkWGRDbnFoVllmUmR4ekg2NXZrR2pyR3VGVXRhL2NSL0NaS2Vkb2QyT0l0RDloTTJyZ1Z0a1dUaVpuY1FsaU9ndkZPR1didHVEcjhwSktrYTA1ZERFVWowWFFYUUd0Wi9nQjJxenVjNXhnS1FkamVsYlA3YTZEMFF6aS94ZlVVbThJRUp3ZDQzZ0dTaUZwM0ZXcGxmeTVuTU1kbnY2VkdCUDNEalNqd0lqbENITDQvRFhTZkxrMXVzWS9KZ0xWUDY3Ukx0dFpHMUJpT2xIY1Rxejc1ckZjZjVEQWF5Zjd6eHVzZmllVTVtSzh3MWRtNWRSMUF4VVAydnZ4Zm5XdHBSeXNJR3lEc0dIN3kxczl5VlJXOUFaOTZORHhPZ3JnbFVTbDhQS01YNXQrbkUyeEQyUjJ1QitxbXRJdDNHVWNEUWxyK09uR1ZiSWtOYklST0kwR2Zyemk5RjJ1RzRQdHBIT0RaNFJKd2k4SHAveWg3RzRwb1kvaUVjMi9YTTVyUXNrYVR0V3JFd2ZoTkJETG1BL0JmdGdyWSsva0xORmR3bUJzNkNnWWFDM2kxUjVqaTVkZUV5SFVWMGp4T2FQdjdPQlBXVUFmZVU2dEhFS1FwZ3RJNzVtZXVCZnZPdmNwMWxFaEZNcENacXNhakoza042dlI1TWIzZG9ZVGdHZzIxcXBnT09KMm5Fd3REUG53dFhOUkFSdlc5VmJrRGlPN25PTVFKNHQ5U2ZTa0dVQmQrRjZ4OFhGTjhwWGFCM2t0RUI1elppdlRFS0FKZnNHeFY1SWVYOVdvK2NlNVlUeHJFUHJzQWZrVEgzUW8xNFFpSnRRS1dEeGt0Rml3QkVoNndmcERwOVRDbWZwQTVKbE1ONEVaZEwyaDZ4RElqd1cybHlSK01OKzRkL1pUNHl5V3ZXci8wRTZRQzMxWFBUMHQzNGREQWVLZGVaY2EyYnNQWHE1eWFSSUhScDR3c25vbTFiWHlHSC8zbGxjTStHNlRPMWpVMmwzcHQyaktIT1RkSlBkWjd4MEZMclhMcmN5eHd5MlJXSnpHMGZWbEJaZVNZaXl2V3Mrb3J2NWxFaXBlb0YrU09pZ0x3V1FNZ3YvZlZITTNCWTFKOUZrOWg3UXd3VkZ5elZOK2w3UloxVlhCMmV2OGY3U0xJdUs2WVFkeEoyMWJZYmFFdXp0VlIxTGFmdCtSQm9DUHVkZ2l4M2xwMlhHQjdYa2pqV3JkQWZkZUJ2WnVSSHBNWXR6Unc5UUY1eGpIbTdRekRyTjhOa0xDYi9KaXFDajZEcWdkOVE3bmNiNTNEMjlBWE94OVNwTEVVZVdjS3dxdG5oL2lxQ2hiczVlbVdkc3JZY1ErSjEyM2Eydy94aGpCNlI1elBDb0tjVi9rNjQ2dng0U0UxQWRVVjZrZ1hlYURiY0ErMERWeDdrdENPazhpSkhHMTdkc09CaXRsVDRxS2tPY2ZRdEZUTVo4d2FqcTgxY1paWDBaWE9GV0luZ1lMUkViZ2ZsL05ZTmN6a05lL3Y2N1A1UXg5aUJkV0I3anZiN1U2bXpZNTNZRm02TXpOa3gwT21Rd0ZrTkZVR0ZJSjNLb0Q2RzZMbEs5VVNERWswMUx0Y1h4VWpPck5WcVJ5NzZ0eFpSbW5ia1Iyc2dZVTNmNG5DaVgrOGlqVE9SMXdzQm44YVY3UktKWVJINURiRXk4Zm9wNk04NzV3RTFYQU5RRWlaZS95bk9HK0Q2elRLSnVCZHluTDMvNEl5Q1VyNmF1czl3d1RXVElXNUZEcCs1MFAxeUFpd0tnZnpacExFcE5BU1FsbDU1U0lSY1c4UFJUdG5SZWZYLzEzUDEzZWYveERGVkI3OHJ0Nk40SmJhcGN5aGpFaFZYeWJWWjRoMktxZDVRRExIY2ZKejlpY0k1aXNjamJQdWJZanI3L1BXMnFMMmwrRzRIVUlSU3pIS1VuTWdKOW1nd2dEeklUaXVDOXkvQ3BPY0J0ZGhEMVJEU2lPeTY3Q3JDdEFSYzE0TW90OTRpZTVnZnZFOGNZUWliNXZ5cUtGRkJqa3pFSkNBaHdXVVFpYi9ZcE5KUUpxd3llbHIrSDBKcDNuaEZ3SkVnL2lBK2JCYUl5d2tYbkJmVlVrTGkvSUV2ZE80TllRNFc1REM3RVdDNzExVmJnQ1VLSFNlRXFveUVVZTJDSTZPZWp0STQvMTF0UGx1bTJ1elJSb3RId01nN1dMUmd3R3FhZ0FzLzRZWStMUmlEaDhqWjc0NVRkcDFpSGJPY0N0ZURRdE1JSUE4NkxBckxPeGJ4b1VSNDEvMFRQT2JRejJyaDhMR1g0ZkJLVXNJaXFJT2lYU0VQTVdjYUhsUUJ3Tlp5bURYYU5IS1dVNTFYa2p4TlZNTFhtaUxLVUFzbXdYdmVuNTlOL0E4WCt1WHdTZWRsclh6NFpVOE0yUTJYMmtHa2hZUTUwT0tuQ3k2YWpPUXB1bXBjZWRuY3Z3OURNRHJDL3NUOU5SNFJEMTRvU21FOGlZTnA3QjJEZVBtckQ1a0hWL2VHQzhjWmlxOUtML0hzM2svSHZIKzdoNW5yWHNPenFNZUZ2QXAvemdZSHExRUhlMkErYjkxV2E4OFZ6Tkl4UTE1VHl5TkdIV3ZFaWpJWVIzd0Ywa1ZURFhyWFZXU0tCVC9aTkNjY01jS0xkazFlRTR3V0hTNW1aS1lVYnFWcVZrdXZYbm95dGhXSlNuWGQ5aWh4Q0dRWVFGaW9abWxVMWxBaFd5L0psY0VCZ3krWlhKVm5zaVZLaXB0VUtWZU85L01RV1RUL1VVSEEyQ2x4cU82NXZQNlRGT20yb0xFMTJBTTl4QzZpRUFtTTF0aGlvdjA4VjBtZTZKVTNKM3dOL3UyR3Z1YWx2cGRlNGI3bi9yM1hjWGRZRjA1UVd6MjZUQzl4OENHRithbFEzMVoraUdSM3F5bU1Td0N0cWRvak5KY25sR2ttQ05IWGVsdzI1dkFKVmFodzRkdEp6Zk51TFVZcmhCbGp4UmVmbHBTMkxLWk1aZnpwbkFzaG1oSEVRS0c0UFBLYnZaZFdUYkhlaDRmc3lOemxOUFdXd21GTHNEdi8zRUN6Sm9aZjBzdTFqS1NhYnV0b080anFFbHJaQXhWcCsxcGhFMERWUG9veDhLRUxRTW1aQjJHVzBjbjg1ODdLNFNZbnlpTXBkSHdpUTA2VVRvcnQzb2J4UmE0cGh2emZIaGd2bGRDSU9zZllRWTJ4MVlVK2w4RlYzc3Roa2RtKzVtamVwTDJJczlhTVRyenJLanhzbW10UkpDQ1hrNnl2K2k0Z1ZyQVFYZFBCVE0remFkLzFKR1Y1c0xZaVdlS2pxM0p6LzB1aytCYnFnMzQvbXI5MnREcGE3WXpLdmdRb1NCb1hvbG04eTJqc251S3NodThFMWlqWVI5L0RGMTRoNThkVnpPTjBFeEZkdXJHK1Q2NDRqSmdMMFlYK3lkSUNzMmNoL0F0OTF3S1JVOUNQbGRsWW05c0cvR2ZJYThZTVBqYWJPRW11SEJUcytyVzZmcmhIdWt6dE5IZ1dHZnFEbmFONjhtODl4blpTMXNIYWU5NForSExYQS83N0YxVTFsR1lDK1l4ZEtacTBQTklVSmM1SjZMMlE3TWlBREhwMTJkbXhmV0J5VHAwYlBnMzUxajIyVytrd0pOZGRrQXgrV1N2ZUFWeVlocTRHUExlNlBYL0Q5K0tIbkN0Ykh5bE9BZDY5OEYzWm9ZRksvTmJORmo1SlRKbE5Hc3hWWkVWUG5QU3NzOHE5cVdpZ1FVcUpxNVBGYWJjbXBxdThKR0pDc3hmUlZCV0dZMUhMdEVTRERZeTM5WFFuZmdsY25BdEI1KzZaWEZFRkJHUk5qUWtST0NoQnFTWk9lMHAxNjlqVkJmK2xra2tnWjNHZkdkYmczQmZVb3QrMWVtOFc4SWt0dk1mZFJwOTVTWkM4L2pOdzBpTmhwTWJDV0pJSUlCNDRjSDJvRHVFbnR5N2JQaFpsV0hiZ2ovMHZ4Vm5ySlE2djIzS25LeE9SeTFzZC9sdThvZm1BeDR1L3NjcjE5MTRqb1lFVlcwaXRESmRlUzFPb3k4K1o4M0dDZVdIdGNleEk2K2N5ckRIc1ltekZlUy9GV3FyOUU0UGlkZ1NkKzVGUmdpZlU2Q1A0UG5OWFp2eFJ3Yms2cDdNNFBsRXV4RWNSRGtyRWlnR0dwOWF0aXk0S1JJSlVTdHFISzM1YitKayt5SVJWZG9KVWRUREk2S0JhVmgvbmovdWtwSXE5WVh6cGFiTG1RdUFPOVlqTTc0TSt6R3VlUk5ESkZ2bmt5WWxPWGJzbVhmNllwSE0yRk5FVnkwQVhwYWthTGE5UHpDZlJTUFlwQnBDTTV4VnE5R2FIMkdsM0ZzT0ZOM2xybiszcnREZlFoc2JxMzNpb1o2MW5hTnI4Y0JuaEJFTUdXS1JrWkZ6SnczbXBNSGlUZTlnTHhGTmtsb1M0SlpOaDlYSU9WaHJjQXMzYkhpelN3bmJqWFJvcUlEeHlBRDFHT3NkbitSU3FVTnlObFlpbGJiSWJDdGZCbk1uRkNwVjJlN1dSNU9WRmhyZXdCUGk0V2VsOTFudVZWY2F3MVpMbjhVRXpheWIwV1VucktIRU5DcjBXcFJ2LzMxemM3N2pROG5uUnJoTkZKRmtsdVZVUUl1L24vclRDL3dKTzFiSWt2WDBHY0d5SkNWVXgwaGwxbHB6aFFNZGJZc2lVbGsxVjE3QzZDT3RQeWswcENqZzAvRytNUXlYVGZYNW5xMFluejF3bzVuZVp0WkJ5MW9IcVV0Rmc5VS9tdFl0R0dTekROWWpNZVpWSko0V1ovcy83anFNMFlsTnpMamppMytyWWYzRHB5MHMydEJXRWZONXZWSFN4THJPVk5NV1NaT2x2Z09zQUNrTW04K2ExdjZPeGFRM0J2OWRrcFhRUmFjVjhnNlo0Nk1CMzcvTWl3YXY1bnZMQVl3MW1OV3BXdEJOTm92YXo1TE4rZFJGSW5TNFJxUDV6V0htN0NoU3dLT3g3dzJSYVM5eEFrbHlmZzUxMkYyQjdBNlk1amhTQ3BGQXcxakwrRnBQUHRQbnVQVTFCRnhkSUlrWkhZQ0NCY01ONDkyWmNrSUVUVlpHRnorSnRnVDUyNEpVSWM5M0Jxdktnb0xOeldkTHg1OEYrNHNldzlKUVUrdTVyeldVVSt0V1EyYWlKVldQNjQxU3ZmRFZFV2VPNXRkVG9VLy9Qb2NDd2FnbTIyMnJWWE9Db2Q1SCtCdVRoSE13d05tdXhlT1IwSXFZNGVodFF3a0VaV2hoVzlVV250WU5kb05zQmROSjErWTVQdzRCYUZBM2hOK1BxV0FFdEhWaXNIckdkZnJPQUY5eXkwUlV2TjhKeTg4MUoxWi8rZCtNMG42YnoyVmltSjBsbHQ0cDZQNFJ2WHlEZG9TVWFRNmpTc3dmdHU0WDRLN3pFb3hBa1dzZ2F6ZXl1TzFxa3BjdFNsK0FUTHNRakRpWmRJRnptZW5tTk14UmFKaFBpMmtndGxvSjFXc3krdDh1b2IvNDlmVVVXUi9sZ3FSSStkRlpTNEVxdnppQVpueWZiVlU5VlhyNkxXVU9wY3R3ZXl0K0Fsd3ZsS1phVTY2Q1RRWm1ZRDhNTmJtOWpTVnVaVWRiKzFnV1hlS1ZmRHRqS0dDSUxFajNBcVlYMDM0ZktlSElLQ04wcTA4d1ZmOGR0OGNOcDNhL3NwanR3cUxaM3U4WWJBbWNOZ1hoaEhwT3NNbFh3REowWUhxSFliLy9VQ0ZQWmJIYS95OEZyRnoyWWNPRHU5c2hXc0VUQ2RxTnE2bHYzZXgvdmRReDZPNGlOZVNocU8rNjd2ODMrYVo4OEdZNXpVcHpwQXlxKzZZV0hyaTRhdkNsV3NlMlJvUkk5UnJRaWlHM1I3UllueE85OXVxMjIyQS9KMG5vZ0k0Sk5vTHphOGxIUE1ndU1WRWdUb0t5OVB4cXI5Mjg3YVVYRC95UGJYUlBUeEdjQjZqRE50L3JyVitoU2t3MklXMWJUelhsaTlOblR0ODBLQzh1cGRUaGI0emdKaDBJa2FVcXY0WUZRVnBJY1h1bjZ4dHc3T01UOTR2TWE1alRYTTZneFBKYXJSdVBIWHBucS9wRjNzcUNwYS8zbytOaEd2Z1lVVVBtcW9jNDdCYjJoNXhmL3UzYi9DYWYzRFBxZDVhaTBCQzdoUENWRXZCaGM0c2NyVmc1SjRXaUduUjhHVWNoN0RTTUZrR2ZwTXcyOVcvbzBhMzNOdjlacThYbmR0bWsrWEVvOXliT0hvZ0I5ZHdHN212bWlReHJKUk52ODlndmNqZ095eEdmdGRPUEJ6Mmo1MWM4TkJQSXJtam5URE9XcHZHbXg5RWZZZFFrc2Q2RUZHSEFKWm1VdHkvbEVOVENjcUlYZEEyY24va0dBZkdTYk8wSHJGZnU2R3pXS1oxRHhOOTJxV0ExODVqZy90d0RvRE9reGNBRGJkbVA4dFh0eEFyR1lkV1NpYnd0YWRGRERwM1VkeDhmc2k1aS9oaDRtdjd6dUR5NmI4L2Q4NmxpbDliOHhUSmpoWWtPR2c0Y0tYUHVzdDhmVVhhWmpudU9xVC8rcXM3SkNMdm5mN2FWd0lIcHlENkpVZytCZ3JqUlV5TTUzMXYvMlFBQkFCb0FRQUFCTVFCQUFBOEJDVEVDQUFBQUFBRDhBYzVBQUFJQUNRSUJBUW9DQUFNQUdWUm9hWE1nYVhNZ2IyWWdSbWx1WjJWeUlDZzVLUT09PC9CREI+CiAgICA8L0JJUj4KICAgIDxCSVI+CiAgICAgICAgPFZlcnNpb24+CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvVmVyc2lvbj4KICAgICAgICA8Q0JFRkZWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I+MTwvTWFqb3I+CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L0NCRUZGVmVyc2lvbj4KICAgICAgICA8QklSSW5mbz4KICAgICAgICAgICAgPEludGVncml0eT5mYWxzZTwvSW50ZWdyaXR5PgogICAgICAgIDwvQklSSW5mbz4KICAgICAgICA8QkRCSW5mbz4KICAgICAgICAgICAgPEZvcm1hdD4KICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24+TW9zaXA8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgIDxUeXBlPjc8L1R5cGU+CiAgICAgICAgICAgIDwvRm9ybWF0PgogICAgICAgICAgICA8Q3JlYXRpb25EYXRlPjIwMjAtMDEtMDdUMDI6Mzg6NTIuNjcxWjwvQ3JlYXRpb25EYXRlPgogICAgICAgICAgICA8VHlwZT5GaW5nZXI8L1R5cGU+CiAgICAgICAgICAgIDxTdWJ0eXBlPkxlZnQgTWlkZGxlRmluZ2VyPC9TdWJ0eXBlPgogICAgICAgICAgICA8TGV2ZWw+UmF3PC9MZXZlbD4KICAgICAgICAgICAgPFB1cnBvc2U+RW5yb2xsPC9QdXJwb3NlPgogICAgICAgICAgICA8UXVhbGl0eT4KICAgICAgICAgICAgICAgIDxBbGdvcml0aG0+CiAgICAgICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5ITUFDPC9Pcmdhbml6YXRpb24+CiAgICAgICAgICAgICAgICAgICAgPFR5cGU+U0hBLTI1NjwvVHlwZT4KICAgICAgICAgICAgICAgIDwvQWxnb3JpdGhtPgogICAgICAgICAgICAgICAgPFNjb3JlPjY0PC9TY29yZT4KICAgICAgICAgICAgPC9RdWFsaXR5PgogICAgICAgIDwvQkRCSW5mbz4KICAgICAgICA8QkRCPlJrbFNBREF5TUFBQUFYNUVBQUVCQVFBQmZqUUg1Z3djREI0UUFQRUFBQUFBQUFFNUFFQUFEd0lBUUFJQVFBSUlBQUVCOUFIMEFmUUI5QWdGSFFFZkFiSUFBWDNEQUFBQURHcFFJQ0FOQ29jS0FBQUFGR1owZVhCcWNESWdBQUFBQUdwd01pQUFBQUJIYW5BeWFBQUFBQlpwYUdSeUFBQUJzZ0FBQVI4QUFRY0hBQUFBQUFBUFkyOXNjZ0VBQUFBQUFCRUFBQUFhY21WeklBQUFBQkp5WlhOam1jb0FBWm5LQUFFQUFBQUFBQUJxY0RKai8wLy9VUUFwQUFBQUFBRWZBQUFCc2dBQUFBQUFBQUFBQUFBQkh3QUFBYklBQUFBQUFBQUFBQUFCQndFQi8yUUFJd0FCUTNKbFlYUnZjam9nU21GelVHVnlJRlpsY25OcGIyNGdNUzQ1TURBdU1mOWtBQkFBQVVWdVkwbEVPa2RTUWxRd01mOVNBQXdBQWdBSkFBVUVCQUFCLzF3QUUwQkFTRWhRU0VoUVNFaFFTRWhRU0VoUS81QUFDZ0FBQUFGOHl3QUIvNVBmR3dBVGZON1VUZWdzTForL0RQakRqTXp0bGtmeWtvT1Zza09PNnFhR1JlSWpaZDFJc2xJZ0s5RENqTzVpQUFlRzg3MkE1SUE2RVJkLzdTcEdmaW1BZ05TQUFaZC9qOW1pekJDaDRnQjVEMVoyQ3VheEtzemJZdFdXRGx0amJ6aXFNOC84Q0lBOW4zVXBSb0hKYWg3eEYyUTlJQWYwdGV3RlV2dVdQQVNGODd2QU13TVJhZWgveFVSbGdFT1NvWWhacGtNaklqMWkxbFNLVTNZYzFEUHcwT1BFcGRoTVU5Z2Y5UzE2V29HeVk2aUE3ZHhnTjlEVHdRMzRQd25yUmh0SXNVNklJVVB5aUEybEdtR0E4VjFIbElEczJrWmJhZklnVDJqTUhTQmp6M01Tdm14cVIxMW55ZUE4SkhrZy8wSXZhMWZMTWFzak5KQm1mWEwrTURlSWxWZjFOc3JTck5BMnJzdE5teHRMWlVaNUkwSmFaYXFsRTMwVnNlV1ppekd5ZDM2Z3NnQThMUFFKSFhmWWRxMUR4VDFDeEtON3g0L0RnQ1VvQzZ0amlDelRTWmoyTXFVc0lkZjc2TDM0dmRMWWlDODN2elA4Wm44WnA4aDQyVTZWOHFxQVFRV3FaZWgvS2wySzhVNlhKYnltc05yQnJVZFJ6Y2xKc1kwbWJqekhBU3dheC9adGlJVG54MmJpSHM2NzRUc0NseGlhWlBZVUtzZk5HNDhqdW5zeFNWeWlmTWFNV3BOQUpVWS9MK3NXeXJ4NjZ0U3VlM2dDNnRMbFBKRzJ4UkxsdWl1OThYWHZOV1owVmZPekFXZXhoLzhBbjEzNkhUZHZlSklDbGNYY0EycHdEOUE4bld4Rk1McmlGeWlDRE9lQlNJUE9pN2RuVlpOQnYwNTdqNENtU09BK0pmdTlBUXBQZk03VDY1RnZBS0w0ZzRHYUMvNG5uYUwrcTNISmxDQjFMaFlzVFVtZTdUTEFVN3gyZm05ZGhtaXFzcjVtdHZscjJMNkpKaldmMGNrR1ZYTWhlODJER010U240NG9jdUcvZWZBa25hUHJ1OUJ6bUR4MXkyVE5abDVFcVZQYUwvbHZHaGRwWW5RenExYXRHSnB6cHFSSHQwUldoZjlWTnhqVUNXZXpBK285enNLNVUxcGRUSzYwcjNJL0ttdkM4djhIZU9oSmhQQlVYWUZFa21SdVRKNHZsUmdwY3JMSFZsM0N4czdjTWRlZy9nZXpqaFJjVmZPZGx6UFd0Vm1ZaW9KZVFSbzRQOTBCSHpORG9MTmhwVW5XQytuVWpENmFTTjFUcC9pVHBoSmVCNWpidHY4SERWMnVFbXlnSjJHVHo5RWVlWG82dnFGUjR0UEpjbThQMlQ3ZzJ0bDZMdWNRVUlwV0xOY29URmpuWGRyUmxuYk81aTZsTVMxVUs3eURicDZNREt6ZkpHZHdYYkdWdUpkYVUvOWViSUt6Qkh5Z3pVVTVqbjB6MGwyVHpzckljMnQxdUxxOXQ4UTBCQkJzNmMzazNuczdqRnVCQkxpakwzL2FpVlAxNU52WFUxaDQ1eVlJNUkxS05yUTNtUTFIckorZTZPNUZJOHEyUW1uVFFnUUtGVnk1NzRGTVVYbHo1V2dZMEJRUFRjVG4xaHliWTZXRGFYNTFrbmZqK3hNQzJrOVNTdFZCRmlHM0NzVStPeVpyVFVGT1JpaUczbDI1eE54d1JyRGhqWEZ5VnE2T2x6eGRrdDNYZTAzc0ZkNGQvdUg5aFZWTzg2UGNXdkwyQTduaVRnQy94U0tndUFETmtveW02dTZvYTZyY09KUWVRSG10VWs5TTcxamxTY0JhalhpQXJNUUNrMzQ0ckN1bG9Uejg2TmZPaVAwcXFGRkI3bkY1bS80M00xZWdvR1JzdFBWMFV4WndSVEp6elNSVS8xTmJoUkE4N0Q1Q3BrQlluL2xHalR5OXNPRG5vdFJGV3ZNL1k0OEgrU05UdXQ4UVA0YnM0N1dnb3dJL1EvVEd3UHJGanprSlpPYkY2QWRCQUgzc0xFdGZ0MHlqMDVPazFHemQxZDdKeTRHYXlDK3VIc25LRWJzUVJaMklvR0Q2MVgwamljUE92ZHRiSHNEeGNJVHJoQTZBTXNId0tFVnBXb3FVRmtrOTlvZmhhbm9hd2JKQVV6Y085MTlkKys3YkxUVEdEQjZqbmhKNDFYTzMwYzc3dWZRNzZSNlAwR1JLN2kzM3JBKzY3VUNYN25VWjhKN0VBem1PNnd0T2JRcDd0R1JXY3BHeGNCKzZWRHRlRit0eE9GZGlXaDFCcDhWRFM0SmVRaDNxcG5raVNSdWcyUTNBTUhOR21iTXgxdEdSUUVRaFJWS280dlYvWFJwN1JRVUJmd09CRkdMdTZaOVh3MG9SMmlrYUJVQ05RTnpNaHNOcFl2dlZkci9BblFsVjloRzdoNjJETUJFTGFNMTdiNVlLckFCTFVGL0NTMW1FMHJONjczMksvekJ1M1Foazg1UVM1Vk1hL0pJK21TbzJjM2RTbjc5NStjS1lWdDNBYjUzMjdrdVArbVk0WjB0c3lDZDBEZjdiUGdxdCtJQ2x0SDV0bmpSRzNJSnBzTitaeGh1OWFoUnF6OWlMZlMxMWhXN05ONkZoRDVacWkvYVZ3MUhDOWFhNXEza1Z6UHlmMGZhdEk3MU5lVXdWMitnL1ZpNlhYRmZpbmh6b3BmNUhuK281MDBFZ2hXcFR2T3o4eEdLdXUvS2ozL1FPQ1Q1RW1sSzJ6V0p6MFduNEhvTCtwTU1xbXg4emh4b0ZycU9JVEFkVGRnejlGbTJlcXRJZjV0TUN3L1dGMHpqUzBwak1xbElKZTdsVkF2ZjZrNS90SDArWlBGbjZJMm9NQVErak14ZEYrYUNYcTFYYTBjc2ZHQnh5UzNIYnVjTXpsQWZFK0JXVG56Mnh4bFlUdHdvVnRxeEFveFVBcVlUUlp0Qk1JWlNTbVhNN21vVk9VaGlFMlhtV05MNlpCR2w4UElHb0wydm56N0YrSG9qQXczYk5UUTY1c0psazdWZUI4c2RJSjc2VVFqanppMlJjc080S1gzUzM2TG52Sis5SWh1QUQzSnFtS3JEdUlNOWFGUTVmYXVkMEpXMjFuOHdZYjNVSnJIUHc1djAyVGsyUmFZL3NsZmcvOS9VM01PRWN3aXZmR2NucWowczNiZ1FOczRKR0JmdVk0R0p2WWpLWHVxbDh6OXZ3SVNOMDZzQkk0WDFoSlUzUWhuNXJoTlE5UVozVTlDeXdOU2dGYmVFcXZEVTJzOEFPVWdsMjFScm05SEY3TzJ4ODVhbFZyRUE2VnRVZmN1TWhZdmljQU0vMVNwc3B1L2tUazRXc0JvekVSSVZxL09Ta0lSWUVoR01TVUlpd3FncHk5ZldHL0hPV0NObnlra1U4TXFFUWdieHBxV211QTJ1TUEwYkFtTU04S0ZDNmp5Q2VlcG5QZ04zcGNOSkNvbi9rT0Z0T3FUSUZuSjVBM0FnNHBqSzRMZFRkQzdFODd5UmhvNHpRaFJqNWdiZzhPM1o3UVkyeS96MWVGVmU0NmFoVU1WcTdpYmZsWmh4NnBPNjdWd1lPNHgzUEg5bFdUL05MOVZsTlM4Qno4M2JHWE9sVlpibzNrK0E0Rklxenc3aUExamh2RWo0YTNGc0JVQWdoTTg5M2RzMk0vMXpENWorY1NHeHNvZHprSkIxWXU1cW1ydGJ5TGEreE13V3VVQUE1QzV5dTdTRHVSWDV1c1AxZTk2S1UvanpOMEZhM2pEakxyUXlYdWRNRDNHa3ptZGVIaG53VnYxMjVPU0R4M1VmVTVRTFlVemd0VlFybDFaS2ptdHNuVmp2WXdkV2t1bHFJZFlUWWRVZThiZ0h3VU04RDIyVG0rbkx5M0NvUU0yWkYrYjU5YTN5SFc1Wmxab0p3SVhyWHJhSG02R0FFMENnQWlDTlRKVmpMUiswODlocXkzQ3NEeFlrK0dLZ3NJNU4yeThzTEF0YW5lemdSQ3FhaXhKTjkzZDJZYm1OMFFtRENhUGlsb1hxRGJjYmhzTXczNVJHcHNRTjZJd3VjRHIvTFpOMm4yNjJya21tWFlqMTQzUFZwaUFsUisrandNUkdlTHIxdEl4T0ViY3JHLzNvUlFsREhwcEpoN1VrNXFXVE1CeERnak9nUVUwWTBPVDhnbk5ianhOdTkyUGZNZEVPa2VNUitodEVrN05ORUttL21tYy9tZ0dSRXRwWlQ1bEtQU0JDbkIxK0pDTks5dko4cmpKTkxsTm5ibXcvMGVMbHE1SW1hT21LQlI0SnMvUk1RME9malRqenoxMncvT25ZajJGVklsWW9seFJyaDUzL2o0SGdBQ0hjL1ZCT2tUem5rcU9uY3A5bGU5NzFPRzJlci9renBLWml5N2lidkpncmh4VVNsRWpGTmg0ak51YTF3RnZrdlZHQU9Ja29aN2ZNYzlkRVdpenR1TkQybVhudFVnUW9JSU1GcmZ3eGQ2RDFWS05aMDltNTRBR0RpWklXYWdGN1dJSkNSM0QzaHB2MEJKek9xL3Q4a1RvZjNJeHhJdWtZajVQMkxyWG9NTTJRb2xrL1NJeGpjSW1EZGZncUdkMEIrcjI5U2NPOGpxVUR3VGlyVUJKamVPWUtUMzRyTkF4K1FDaGYvQVZ4cXNSakk0cUFtYkJpWWQ5OWJpVlNwNmJQSE9EQlFSeUtjM2pCNkRvY015TUN3ZjFndmh1SlZ3bXhzcEc2VWxDNzVTQU5Tak1qWGZLS2huNGdvRzRIQnNrbG80RXJJMGJPdnBIOFFyMFh6d3lmWHhORzBPdENxTGNxZUplQndlZ2laTU9mL1Q2eGZzU0VpRUlld3RYTFkycmlkUnJVOU5UUWNoaEsxdzRKZ2JkZTVSQnp2WWw3aFhQVFowR3JKRmFtMmFVaUVjZFJMc0VpSkRIU05YMWc1STNEUjljYzB2K3BibHBVbjgwekg1S0h4OGxvRENyMEk1UnYwL3BoQzhQOHRhUVpQTk50d1I3ai9MTVh0YXd2VU0xQ1VQbnBacDM0WldJeFJGZnFzV1J4TkRjTGZxRGZ1YklZNXZSWmRjV3kvYUJ6Rndla2hJTVJ1RUQ4L1hFWjB2ZzNaNVJScXRpNzF4b3E3VU5NS1g4MHl4OG94dGs1M1VjdXJJcElWbTNaRzQrb2hSeWQ3WGpSZU0xMFpzTHRFd2ZjYkZ2NGZmOVpmSUs0cnBFMHZMdFN0VE9GNHF6YWVjcG9QNmJMK0ZPR2JrSm9GMnJsWDFwNWwzL0pSV1o0SEdmTzV2VE9RTkNvZUt6ci9MdlluNnlHWUI0endObS82U2tUM2VBVDhEdXNYL1RlZmF5bEpNcFdMR0kxMlJFZWw0dkhtOTgzYlVudFFaMGZDdGp6YTZ3QVN4ZEFhdHJFVXUrSldKdk1pTkNZNXZPUWZLMUorb1lGV0RTMXNlVEw2ckhva2p4RWpqcit4Zi9QQy8wL0E0OTN2TEJxWTFlbmVvaVZrUFNjaHNRN1pCN3h4Y01LQURGZjFBWlFpaTkxaXJnWmdseDgwazdkOCtQbjM5cWFhUGxCM3JZZWtiNGNUOVFicnNJc2pVeGxydkFkNDMwYWRkc245b01RZHlCdUhJSENCZkxwbld3STdBTDFwcWVSbFVPV05xbk5CakpnUTFYbVlGdEhVUU8yc2JqK2RWWUcwSTZOelZFdlR1cDJqRVlZTG9nQkhlS3ZWeVhJWjM4ZnB5REVmVEVuVmw5VzhFMzRBUXBHOWlzVDFSR05IYzZVVDBWd29Nb2tlakp6dkJLNGpIK0ZjQmdCU3JsZkpKekdjTU9MQkJZaDJSWkdHMEduRWNwTXVHTERualorMEhUbXhORG9WQW5hN0pWWDdzMjZDUUw2RTk4MFAyS2hNSGhDOXkxOTdQY21KVUJlUFhncWFRdDZMVVlpVDRkOE5jc2dkT2tuZDhHcC9JWDFidEc2L2xIVldNTCtwaEJNTnFWNjdIVUZUUUZZTUFrbHluUVROajgzeHU5NkI1VHh3cVNXOE1jS1BRb3lrWjRKVVZIdXNWRTJlcDFNa3hCVWFlM0h5YkNXb2RlaWtDZXpIa1A2VUYvcDF1NHd1WklOT0JValEyWkUvOGhTS3BVRllRZFlLYmE1MEVvaVcrWFpxSVhvWXFmd3JNS0RuWDhtWTV6eWlWV3dOa2lIb215U2NGU3ovSUNUV0cya2ZTbWdXSk4vb0hjdFhiMkdwQUdLdVM1Y0R1ME9zVzFSRlZKbHZVZ1lEZkhESzNCVDFwcXJNWFhjNjkwUEFHVXB1U2JyWWdlcm5DcndBUlVTMnFQYW9vTWtpL1dIaTVWVHdPaW5QQ3MvSk5pYlZjVDNyTDhOSjBSV25mbjJiTkROWE91S0pkSDhicGFUT09WcDlVbGdTY2I1TWN0Ly9BZ3dVdUlWWWVCKzBzSVh5N3htTktSNUpEcllsVHJoZ051T0JZOWk0OTZ6Wi80VkY5TDZRSVcrM0tjOXdWVi8raUtiSFcrNzBqdkR3VE54cmUxazJtb3dEdU5vc0ttUUpBSFlDZC9aUHhCYnhhOXZrOFdueFpPUCtCa2F0SXl4bTFFdUVwVW5UbnExRWlqUW02aHdVckhGSjZoZi9GOXRITDY3bWdwWVd0dXNyZTc0Q2hSaUUwdjBLWWZTcFI5UlgwSDA4dUtvZzI3VXdBSFEwYitCNFNYaUQ5ZDNveVp3Z3RTNlhKUHNScUhVNTRQY2xMbnJSRU9BUEJpbDVEZVZNU1Z2bUllWEdPUWRqVUxnUzJzWFJmSW9YNThFc0g1cUk3OElqVWNib2FyTVRnUEkxYWZ3dzdvTUh4MHFMWmZseXZzYU5STFVhb3cwY2NtKzlWaDJvMVJmS0RxUzlXdG1VS1hLSjNMMTcveXNzSmd6UCt5NEQ4OW9ZK2psbmJQS2hJb3Vlakoxb1NlS2hvYWJCWHlBSWVmWmQ5ZzFFTGpjcUdlNEN6WjBKSTJaYktSTTJDdG5RQ0Z4RmorY3pUVEw4UHBjeWtGQTFKZ0l3NnB3QVRzbi9lVUJ0K3FHWjJWeXJBZHhRems2SFlDVFEwODVPQkcvbmhmZzlUcU90U2NQRmVkUEJTV3MvNE05bVBkcmVFcjdFZ2M2SCswamNQUEQ0SXJTRE03djhYZTc3RVZWWncyaHJnMm5FUWJtaW9nbGFtUGdPTllpMFltU2UvbmR0T0RMQ01nZjF3TTZuNVNzUkQzZmhORVhYYTRaNllkMC90VmFtYTNvWk9PWWZkcDZRT012K2MxYVlsRzNtT0I0dkY2Uzh2RXE0UEFoNUtWWm44MmlzWXBEZkVnZzBkMG1iQllIa3FXbmhha3FVL0ZNN2tWaVhMdUJ4UjI4a0hwY1EwQWVUVlMwUk0rQ2lleHlnd0lPczErVUJrQWw4dDd0Y3dXb1FVK0trWTJtVkxBRDNrM0xLNXliMHc3bDFmRjZ0alM1Sm9XQlJQMlY0c293b01ZdzQ5QXdsTXNpY3FBZVZtUis3Wmc2NDZ0V0lhNmFwS3NXUDRSeFZnWklRMHpJRUgrYlZlZU9nTzEzSk1KUTVqT2lNMjRReU1aTzNlc2lVZmp1eTF4WXBzbFVpVnZ0cXp1MEVwMXFrMHdpNDZJOUxqTkFxbDgyTlMzMGUrTGhNYzl4SjdzdnBFVzY5MmFHUVRWUyt2Tm5sMHczSG85ckpzbVFPOEUzeGt2c0NIQnE0Mzh1cUo4Q1lWZnJEQm1zRStMbkZzd0NMQkhJTWswWXpGbG9wMW5tNC9SeS91OEJMaTlvd2tVT1BXS3dMUXNLZkpUODBRNEtQYnFvVnhBekpnd21rc1FxVnJiRzVnVmJIQlVlVjdNSDVUdHdsZmtYUlYrZWtmczJuSzhpeS9ISktGaTI4Y2xPZktjYUZLU1ZEQTBnbXl1Sk9zS1VQcHZDUnF2TUREZmRzeUF6dlIrVjIrd21VYlpEWkdpb2x6UlFZVnZNYkt2dnp4OVdTSTRjLzBObEFSdnFOZ0NNQnV2OXJlRDB5amx3RzAwMENwcmpXbXM5bXNtLzhHL2t5Y2NoSkE1enVsdTRjOU5VcXBtU09aOGtVMWJ4Z2pMRzl3OUtBYitRLzJZbkwzdWF0bTNNR1VWNWdnVWNRblVpQ3lGeUtkTjZleHhhdzltU1phTFdnam03ajQvZ0RZUU11UHNpL0VWQWc3M2tTcGxqSEFuL0FBS3hIcWVmb2pHN3orYTRzanlmRVo5a3A1cWdXQmtiek1BRmFXR29ZV3EwL0xqNjRNYU5rYWw1T0MrMXRmbHgvTzJHMFJvaEdqQnJ5NVVYUFdmTEhJc3ZuRXY2MStnWm5JbHN3dURSK2tpaTB2dkZuQS93UEJxbjJ6S0ZPazVmN1dNbjN5VnJROHFlY0huRUIvWUE1bFdZWnpNc3dsUzJzU2M4Z2d2ekNYc3NQOGtHcWozSzhCdmFCNWx1amJNN2hTeVhDbW85WmpHRnczWjJZZGNycGNEUTJVQURMamU0MDI4M0pRQUM1d2o3eXR2Y2QxK2RhcUxncUJhSm01bkpoM280d2lqL1p6cDBnYldjWjZiT1R0RHVyVkJKSmRubjBTQ2tQOW81YVc2ZzNlTlVzNzVzdFJ0aDBwOSttMnhZNE1Kc00wV3BJbmpaZXNzVGFVdU81c1dQaTdpRTVvc3Jzcmt2NHZqdjMvdW9ndVA0VFhsQTZrbE8ybzB2NVQ4MDVCQVVkYjdPVklNaDRrNUVXWklKMFNaTjk0NVJHVU5UeWFaS1FBY21EcDRUK0hNd1RaeXBlN0ZTUmkzTVIwNTJ0azVWRlFuVnUwdXJYalVuTC9kTEJZaHZkMkt5RW12Y0Z6ZUIrWW1SYlJ4ejIwZjNwOTFBUmw0eUJBQjBkZ0hHcjBZRDFNQy9PbWFqWnp5WjEzU01JNFRuK1YxMzZjbWJac25MTXpHNlgwVk1KSjVMdkNxaHNWVkl2eDR0R0pIeklONG5xdk8wUVRGd25xR1FNQnY5UWVqeVFHMy91TUZiOUl4ZVp5Y0Zab0J2SCtHZTFsejRnV1ZSVDNXalRVY2ppOCtYZ3VFY0h2ckx1VFc1YzlPODlEUkxlSitJaElMQmt2dE5TclE3bnpHWVdVWXdMTTNnZlhqSkdRUVRWb2VIc3F3bUJTUEtjaSt5RE9Kc1Q5aEtQMUhWZkFTcHhmVnR4dUlqbFNxZDdFK2x1R2thc3RxeE0zcHRqWmZ6aC9wSCsyRWlQOHlHS0lnbzA3K1RReEgzdHRtTUFWYUV4N0FVT1UwQXp1M2tpS1UveXh2b0Z4NXFUU3lNOWF5OFRscS9FdE5idU1lQ3M4aDFRb05rZW50RXF3YmM5dk42Tld6dUxyeEZENHYzZmluWDFtNTl6bzJOaTZ1cHBnOEpwcjY2UmMvNDlVUlJQUmpNaWZWVXlpaVo2Wkw3RElacVdYYk5pK2RoV20yVTlkY2cwcndRSnZqb3duL1hOaFE0dkNJZGt3aHVOSWpJUUVmVmlwSkNnU3dMc1N0d0RKdUJvTllvUE1ERFozSnIrc3Q1RC9PRmRTYXZnc0pKUlE0QURDdkx6V1FXMkVwOXVGMHBZamh2ckxHcWFYdHh2OTZZQllSWEZqc01ocWFXWk1VZEJUU1p2Y1dYdDQ0UjlFdnZjYThDQ21yME1STUxrbVpwazJRYWRuTjVlSTNOKzRRNE9HODAxSWZJbXFiNzFjZzFYcEtFdXR5Y1prVWJLU1ZNNk96RTBpK3BRTDBtajhGcUdIMHV6RW1oaU9FYXh4TWJlR1poRXdxYVlxdytYeVQvWWg1dThXblFWV3Z0TDRrNDdnb1ZLUTZIUVBvNGM0aWx5ejU0MHBRZCtYb3FwN0NFTHdQTVc3Ny9MUHUxaEYzYWYxaFN2MllIOVZBRDEvdnlISWUvT24yZnMwdDk5R1JUdklka3NxNFF1NzV4LzJsbDY2L2lZaGFNNEFkaE9DdC9QNGIwUHREbDF3dHY4ZzgvVVBsT3dQRm00U0pJc1NOUzVtWUI4RzM1VzZrZ0wrcFM5WGFNVUNVY1VFN1RwU0dwWGZMcnNhQ2xkRy9mUDlYakVCRE51M3dFQnZvQnllVDdhemhzUCtvcW14V2dGWWtIWWtLbUZNNG45TmR5UFV1WDN3VkFtcGcwSmFaczZVeDhxYjg5SjZrRDVzS0tKT245dFExRXBHakpIMVRKTlpTb0dQelhKZExuRUZTR2NTRG5WTnB1eThmUTJnUVFseFBjc2NiajhWbDU1emtIWlllUHdWTjA1WnQ5SkFVcWtYdXZySHN6d01kWjFib002U1MrZGsxd2tvUG1xbTNvUk50WXZTV29STmNhQzBCSzZidENqYmtZSkYvd1UydFZadGQ4NnU2SGRGZ1lrSzAwNHZBMUlkRW0zMTlHMjVkb1Erayt6RFo4WWZNbStyam1IREs2MUh6VFNneDNTNkdrakxZL1lhU1JQbDNjMVVEUjM4Vm9KMUJOd3NJZWEyRGJ1WjRWd1YzNjQvc3d2L0N6dXVFQ3pMMExucnVzOWxmcGZ4VlJ3VDJoQmwwRUdWZVNJREp1YlZEYkIrUHBjY2xqYlFSOHFYemFmdGVlZG5SbUhJSDZqcnpWSVNDdEkzNFJUOEllbUxWRFVFV2prZXBRQmNzVVNRN3lnVHBNS1dzbWNkbVBydjNvak9MZWY2Uit0SHFwVFNvU3VqRFRIZ3EyQ3BZY04wS1ZFUDdIdGFOMjI3Y1hJNHNWUFZRM2JhLzg1YmtRT2Nucm1HQjdMM3VxVjRZeDVyZDdOTUtEcm93TWdMTDZSU1VOYTFiSmsxU2kvMnBRc0dNOXVrMkNTbWZla0xIVGFBWTNJaFUrV2RQUm9QYTlqNS85eUxXdEpBQy9SMVNzUzN5K0EvZXh6UUJCaWhIMUc2Zkwza092TnA0UWJuRzZROFdiL0NHK2NSNTFnREthNVVXbnZTbjc4OUVCVERFQlBMa01BOEd4MVY2UWpjZklESmRSZnlUR3dIMXQ0NXFBRTRJZ085MER0bTdxK3BGUDNvazhiR003MkNtS0ttcVF5emhFdXV5YnZ5NDFiVVUvS3VkYjB3c0RBbm0zQXZlNFJDVUpiK3o0cTJFaVErSzMxdGdMT01SQWpsaEJURzAvYlF4eEJ0M2t1ZnQwSUFabnpTZEZzVU9NcXRmRkROSXZrVDc3ZGlVWnNKallYQlR6MWh2czNxeitCbDFwZUdOckR0SHZsL0grNStHaEdJMUd0OGJlNDhOWkFhSit3b1JXcE9FQllBVmtJK25YRExVUGpTVUkvc2s2VVM4TklmcS9iTlN2SmIxSGRYSHFvSmtDUXptcGc0MHF4dG9ET3RIelVoZG40QzVsVDQrMEZIZ3NUNGlNVUhSOFZFZENwRVNtSHlhSHdCR1pNUjRQYkVYTXVac24yTkEycFZHLzRHYmZMdzg4ZE0wQlhNQm11U0NjM3JpOUdJL3p0MEpqbkRVSDJscDlGSnFzNWVmblBqdk80WEJvRkRiMi9IT0J2R0QwWS93U0VXcno2L2xwbzZzczNRQkc1ckJWYWJnNXdMVzh5WktaYXlwZUxaK3VuR1VZVU9YRDFQWWpENXdVMk55dVM3bFRqd092b0NUOHBFOGZuVFc4VW8wUE5mRFBvU3kwQVJpWmpPVi8zN1BDNitrWG4wbzFtM1RtWUZPV2ZXYzROWUQzc3lvMVlrazU4SSt5S002TFVVRHIycmJwRE9NWElZK1NQR0JMMGVxbWIraVNqYTNwQWhXMG1icll1ZlN5Y0NWdnM1V0VqQlNRQTEvTEY3ampTUmFmQ0tiTkVpOHNyWFgzQ1VSS0lxeUhtSWptb3Mwdk8rY0licUNvTFFjKzlYMUZsZHpXQ0lJVGFZSEtaQ3hBdEV2b01OdWQrZmJzR0kramgySDY5MFNneVlkcWdJQU5HT2dxRXB0Z3V6cDNxUWJrK3paWnRTTjlVU2x1V0hUNzg3QUZEU0dXNzRyZ2NHWGlQcWI4bWdQVjlKaUttVndwKzJaWnhBZm5EbFhPNUpFRDVkYUs2WmxBVnNpVXZzaE05eDdCZ3RzZ1JGUlFVN1hrc2Nadlk3dDFvQ0RJK1NHNEpPUnpRdzZxWWhFMkI0ZXoyT1FaQ1lBMGdGczZLOEU2M1QzQWdveDN4V2k1cmJ0NlBRd2tpZEUzY0s5cjV5YmpHSnVxM01Tb2hOZWVqMlVtNWJHRmkvUW9wSDRKV21Vemk4OEFkUkl4aURLMmp5RisyNlJGZWhLNXZSNEZWbUhrbHhzR3ZURmR0WEFNU085b0tpbzBSYWVWYytaa1pmRmdDelN6dDBxNTNVQ0hPRjljWlVNdTQrckhZc1l1NEZTUDdrbitqYmF5ZzhzS3RMQnloa28wa3Y2cHhJZ2pEN1V0Z3NFT0sxVy9HV1lwbVRKeHRpa3JJbGtLUTRTSjlzbWhxMjZESXNLZjRzWkd4L2ZGMEhReUZ4TG1nb0M2Q2NycGpwZTNPMldZbk83WkZCdll1T3hRUTdkNTYrNkxCc0FtYnZWck1CamxQaWFSMERsclU5MUw2UnYwZUNqUGNtMEp2ZTl0dFVuMUdoTU14Q2VwRXJyZjN6d0gvWWRVV25HRUtCN0l1Um0yZklHVExJRG1KNjcxc2NPbkd3V2RnL3dpUlFIYkdYWkluMk96RmI5TG8rbmxHRFZaYXg4MTM4bW5MaXRHY1l3TnlWR2JzTm50b21FVFI2a1lOWHZ5cEFBaHdjU2FUNkZEWVBCTlcrMXZGRDlLbXloMktGV3A3YVJYcTV3VmhmUEdKZkZNRFo3S2hPOWNtQndwZ2w3SnpHb3Rkb0hwQnY3Z3NESUk0UjE2d3lSQzhURFk0ZTFjN1lMRi9FcWZGZk40RG1aRjAvM0hQcUQ2SnNLY3BDVmEwTUNWSHZ3eGRhUDBKaGdZYVI1RGxDQm5lenFlc0tYVzFHd3VycVQ3a2hmcHJ3NUQxMldqbW9FRklmM255d2o4Nm8yNUw2R1ZlQnQ0QUVBVk15d1k2ajNZME81NG5ISk01RmJoY3NBVXBKUkdUVThKRGIvaU1yVDFWKzg4S2s4NXg1amlTMU5qOUdpaVIzTTdBMzNuNG5VRkl2akpCMURYY3ozZHNwbTNsdXVVWjlsNVNiNGxhT2w2RXpUUElubHBiUWtZVm9UcnJUY1lyVmtpOGRVamV0R2ttYUludVRtRmR4eVQwaFZrNWY5bzRvWS84eGVlNlBEakQvUWhqeGNQQlUrY0ppMWNoZmtCaGNqYkRkQjJmd3AvUVdjVk4wNy9tdFZGWEhyK0tzUVNyVmM0ZFhOOXpSMitOZkZjK2xnTEluTW00VkdyejFvZUlmTFpXZ1VnSVI4TkF6YTVYWlBWNDQvTjNCd2dlSTNtMFBRVURicWxtSFl6ZTA5SVlURG5UVTZmQzVtd0hzRyszNi9SKzdnRkQ0dEo2ZjF0YmF3T1NSUWJQbFl3amVCSnYxVHdvOFdrT0tHODRnRjFrRTloeThraDd0NFNaYlViWkZmTG5jNjYwdGd1NTQyczNseGJaOUt6eUFsc1dPMzhrOVQzNHFrRDlXcEFxYU5KYWRibU96czNJYUFKYUJQYk16a05Gb0RibjQ2NmdUMVllZEdMcStXTy9BVU9UeTlDTmhOaUUrbUp4MkljT29FQmdjTWlkRkh3UjZvY0NGdDdvazlxRXZmSTBSRTdWbjVxRFhxbnFocUkvcXhWOG1KVUtBTVBvM0VEbTB1QnJYaXFsMFF6MWNpbjNJdzU4UVlrVlc2ZEsyUjgyK3J0U3UvT3NZRnNRM2w3ZkpQQVpBWm5yUjRUbGNrNzFzVWo1VXZEMGtJNDNRNFc1bVJURDJna2kyL3FuaElDQWdJRG0rclFBNUxGVVhzNXY2R0lNeTROYzAyZ0lEVlA4TEJKVE03M1lDMk8zUnNETzIxbFg4bzUrZ0tYUlMxU1J6SG1SREVMaG0ra3cvZkw4K3BpVW8yUEhQN2RaU3RQbldSbTBxSG1BSEZSRDZpWlNCRFBIeXQ3K0lZcVBoKzlyWkF0aUhlOVlidEhEdURNcHB1YWMxUkxBa25vYzEwTE1ZVzdlMG9NT045YlVXOVJtQ3NwU1dZckIvSDFBTUFQMExOK2h5ZDB4NDA5andlVlNFNDVMT0U4ZUJ4NnV6eXM5SVVTeDdkRVlLZE5kZWZqbEdicVdidjI5UkxmbnJNUHFyM1NmaURIQXJkTTVScHVnK04raVVpeVQ3VGpoUFV1Y1hsRmFRRE5kcHFCdkNRcXJsNHg2WGhwNzlrVkpYeXNBSGdxdGljNjhhYXFneEl4M3BDWkpVV1NVOGJCQUwyVFlEZ1IvM3BIYllIQXRTaHZGSEtWYXc1U3RTaDdMblhjTWVZZkIyYkVoSHJOckFYWEdxbzk1UGdDdER5UzdaWlo0TVNpeWlPVHdrOHFJTXUzQ1dtMGNpRmxLSisvSXlYZHJ3Q0MzTjBDeUZTVTlBdXBpaUZ6QzdIWUI4dTBUbC9pVFoyZ1pKc0JZNEtrZitiRkhHTVdSWCs5Mzg2UUF6WWdqNmhLVXkrM1FnUFlDZFlHd1QycEE4c0t4cHJyTFJWMmxrQmhZcEgvbUw3bWt4L1dvYStMcHF4enMrbDE5SCs3M0VVeGVwY0pXTUJMRFVlVHFnUzhjTkIrS1hxNzViMDZvb05ldTE0THp4d29hWVhxQzlrTWZVMTBLL01YZWJIeFczUVo3UTFtSnhuazBsamlRUWhGOG92dnZJRGpLU3lGUWVCUHRBNUQrN2pGZUpCTVI4NnM1SkQ5c2swY1RUczZPcjI4Sm5DSXhjNUU4RHQ1d0J6RkprUzBCQWY5RXNxZ3JyMmFPeFhWa01KaW5JVEQ3bjRibFRreWRwdHdFSDZvTTJYcWRjNHMweFB3RVc2eWlaTitSMkZFZ0tQaC9oOE84OS9pSkVxYUZXWFM1ay81ZlIxcUM1b2drSGYxTDQyOVVTS1RsbzFIRDl6bkZ0OXBVSHVsbWw3eE9WLzZFaG5ReU5iWkZLU2JGSXdiOUdTU29IODJYbExXUVlTMG9WNXpuRkN2ZmZteklPQVdhdXdocms5NHIxMDR0UXdxeGx3QzFvMGpLZjJ1NWR6TWpsU3ZYd0FZUEdTNHJSTXJMWms5elVNeWhNcEkvMlJTZW51SlZrWk9XekoySTNralFTTVhqbmdVRE5sRk9xbHBzOTRaT3krTWs3OEFUTWplUjdzeUJqelBuNzFUOHAzMnlrUG5rT0JjeTYrTDBrc2xPOE9VaW5jajI5ckJhRmplVmszVlBGL3I4T3ljc2ZlSXo0YjVEMFFWZnE4Ky94b0ljd2ZFY3pnSEhKcmRVNXUyRndCbE9WRG9JOUxTa3VoWmFyKzhvQ3lpUnp1eFpJZGlETzJTSlV2c2MrS0pkQTZTUnpZaDFxRUFuOTVoYml5NjVQOU5qSndVR21XQlA0aExaUGM4WGZkT0hmK29MQ0VMdWdRNXl0ZEVFZTh3UjZjU2JXT3FuUUVTUTFaeFhYcW56T0pnSzZMU1B2SGxaVVk1Q0dVc3E0dWgvS08rVUJkcFZ6Q01rRUowVGFxRHhDRXp4Y2xiTU5sK0I3WU5kUVlKbjVIZTUzbkZOVUd1dXkyTUNueENSaSsvL0pHdkRVRld4T25hN3I5c1IzYk5HaU9Tei94RE4zSnF3NnEzdlprZ1MwNEY0SVJ5dDFzV3F5eXpWcURmQjYxQlNxaWUwSGVmK0RQMnRhY1ZvOE4vRkRYcHhLR0VKcFNMS2pvU0I4SnVVNWJ2VDYzc3NqY1JSZTF0ZzU1dUtCbGNTUjUrMXEvOXo2NmF4TnlUcTdjeSt0TTFORFBtYWhqRDI5TVJseE83bVN1cERvc1dKQUI2S1I5TFoxNC9CbkUwK250MmMwcTFBMjZPZG0rVU1RblduejM2Q2hwTnJOMmd0UWROeExLMkR2dGJkYmh4aHpsTkkxdGhraldKZ1lIWkhVdjhZL052cTlIY09jQzZpaXV5UXM3SVNVekU4bk5qT3RpdmZXNnE3TTJmK1lXSXAzUFRjbk9RajB6OVVuM0ZGcWhwK0gyRDI1eURYbnR0QXVmMmgxRDVZZ2lRaWw0MDM3a01MYWZGeEk4M1k5RmNoeGlaWjlMTTBhaTc5bjhwZ1EzbGtkYUVuR0xrb2d1N3kyUkVzWCtRck1lUW1nVUl4K2c0YnZONHZjTzAvRUxvZ1dPTThpUU4wWWl4bWJrYk5kTzVjL3k1VGdkVG9YcVdMbm9PRWtxV2R6ZG5penJPOE9FY1Uwa1R0bW5sVDQrY1pNeFNPanI2S2pTNXd0WkdVUGhOZEY0eTRmQzJRWDBLQis4YVZSWG1aZ2VvYmRnU3hjeE5pQXJTWmM0eHB1OGIwRzh2Tm9iSWc3UUlIdjRZa3ZqbVo5ZWk3L3dZcFpvTko1TzJBWFlCVHBKcHlmUElRTUpaanVaQXp3OWp5STBUdWpoTWptV0N6VEJIRGh4NGtmV3daLzFmcVlRbEkrak9NT0lCUUdCYjhITmk4czRQL2JuUzdVTjFld0lycmplN2dtMm12amhHMWxLaUIwbExwZDA4SGlqZWorRG9XZFpZbitWcjZrcU5CbmVEMGZNQUZ5RmRJWndZUE1XUkdXcEFQRnE5RCtFVWgxdloydGM4UzVJazI2ZC9Sems0UlRPa3N3N2pNU2ZDNHJiNHVYa1lwTG94SzVIMllXd3hTL1hsWHowblRGaWFXa2NQcy9kWGF0SzByWGRhNjA4ZWVvVzZrZEE5ZUVyWjR5R25NSFpvbVBVNk1hYmIwVlhCaXl0bGZHT2oxK25NZm5QcXBuRmp0TjdDcnpKMnhNYkFiN0Y5S0VCTHkwaUZ4Y2hiZEZ1QUhaelcrZDJ6bGZ6S0FIL0U2UWF3bFR3ZkpKMFVoRDZuRm5ZejJ5aEtTVTdPL0FCakhZaTNwMGtvZTdGTitFeWN5cVB1aUljSTZOd3N1QlBmaXNRQzRBd3lFWEE0eGNGM3RGdUQ0RzNZZ0R1NzRmWmtqR0FOUzdrRkxGQ0E4dnVPL0FKZ3hjR0pLV3F3NUUwZ0psVDhmQWg2MkhoNzNMRDBkWXVEcVZkdTZsQTA4N082UE9MMzZTcHlDYWVaS0lKWGpvZFF0a2F3b1U0VkxrWGVrU2hKWTV0OE5naWdlSnVWVzNrVUNyMmRoamNreHE5Z0lFR3Bja05pYzhVbEFPWmJoaFhkS0ZjeGo5emxxTVNaK1RHenRnNHJQV3YyUkNjbG9iQkN4R0hGTzRWRzhudTd2eHIyYmwveXRpY3BpREYwTm5MSFJndFRZSkc0Vk00ZStVVlRRbjB2WHBMQ2JSTnlvVWJSU1BRQWZEWUJSWDk4RHp4enZJd0cvR1pXZGNuS2crRmwwV0w0QW4wWjRWNzlFV2ljd2JSQ1pBanVKUkZ4L2ExQnEvUkFFQjhsYzhHNDlnN2NuMFFNRW9ybGwyTFRzY0NaOFRSU3R0WUtST2NJQWdkbUJqTCtXUWJXRWZTVndVbFIyaVZFN2d3TDFiM0ZsbkdpRUtqTWcyTG1rR1Z4UzlzUGNabG1LeC9nNG4rSGhWSDFvRXVxR3JrRmRSSksrcnMySGdvYXJEbWJBR0ZMYVRTaHVrUWc4Z2FPY0F2ZlRBdm5yZ0k5R3RRdVdleTBySUNwdkpBYmVSRjZlMDk0MkdFVVF0MEFoQm9YQlh6cHd3emFJME5IT1IwaU1neGFUaUU2ZUt4ZGQrNXJVU2x0S3FHRTVZckMwTnlHMG9FNHpBT2xtdDY2cE93OHNPMEFsWC9ScU1lTjdzV2ZMTllQZU5FeFM0QVRUNXZjRExiQ2xpL212YlVLTVVDSVY4OVdpcmlUNTUycStBRmJSNUExcVVyczJRYW5zMTlpZ0RsOVNpeERJemF6SjIrV05pdGFNcCsvQTVxR3U0dFdabE9WMEZvZm9OanE4dFlmRnFuM2d5R2dwbGZlRy9GZTArWTlTajBPNjlJVWF2UG9ESkhJc0dEYmpEc2hSY0JRRVB3SkdBTnZSVlh6bFVXSnJqLzNYRnhXcDZQWGxlNjhqVGVPV3hDME5RRmhhTkVqWGhRZlJLVXd3WXVGcHlUYzFzWCtMMnlMOWVmNzFzblNNNjZ2WWNzMUVRTTRYVlNDSlNwSWRQbGJkeG93VjBNeC90emw0NjVFcnpvK21XWU9sUE5kWW1NS2h6VjNJTEhmbWovVGZiMVVDS1ltamxaY2l5OWxZbWVmeWl2alhTdHNPTWh0SDJCVXR5VEh1TDh2SS9XV0QvV2VYMlV3UDJHSjlqTUQ2MHY5V2xFK3NxL3R1RS80YWVmZnFmUDRXdUhoZ2pzSmZxd2pKck0rdEdoYUIvenU3ZEFoRHRoZW5vUWl2MzVJdXVZcXRmUFMybVJBdmthSkJnbmZma2dpZ3d2bG10MTJGWXMzTHpIczBFNkdMcFEzSHVrQWFQMnN5WU5NOVJ0cjhVaTB3UEFTaFE0L1dQZFNweHRiREZJT212Wkc1NlVYMnpvNmhWd0puR1VOMFBIanVIS1RoeS85dDhqRWxoRzV1T2NtWFJNOWRnSG9CRTJKTmo3QmNrOXk2Y2dLUEtPYi9Vdm9MUFhiMkRWczdSL3YxekxoWWJDNGJKWmM1WGZQbzFsQVNrUDV5ZEhXQzRrc3BZckM1c3BhRVFGeXNnSXBnVzU3K2Q1MWoxWGNUYlNybE9XSm5LYVBVUHJhNm9aV3ZkalJPREpjbTh1OTNXQytuOFF1RnptMDhmby9vcWF3WithTlRvZDMzWDlzdHQrYjRYKzk2dFhEaGdySWpobzNGR21udEFNVzVXVTIyck5lYko2SG03OHFkQm40MkhJbDFEQnVZdTllM1JOTkpWaGUwdmFFNGFTSVVFc05WV2ZwMTl0cE4wek5ybFJxaEY2R3pBOVpFUTBrQXMvaU03TEdkaUxIc3hjVElTM2IvSVRKYWp0eVR5VUJYcXVqRVprUjB1UWVsYWpscXhDd1NXaXJDeC9ueWpBK0lNNHZoZXQrUSt0S1hZdTVCSE12WWxLZ2hqRncvRFJJOXluWndqNWk2WTQ2Z1QyNklabVNHcVhleEgxMXlTNkx6QlJDNDJBaVRkUEN6WElnYUhYTDRjVkhEZzl3TlRpd1ZZLzFKQUlGaDdiTmtrdkkvUDlTQUlKNkpKWHBZS1daaTdXQlJzVmt6R0l6NEZQTVA4M1ZRYVQybXVnSjhjc2drM0s1NlUvVE00NmF0U2xvVk03YkE1dW1QTURzTEIySzZBaDF6Qy9RaDlsQUt2b1dBQk4xOEtKTTBWUTY3MjR0eUlNeEFnUGNQREthdHZ4Z1RRSEZpQkpnajk2M1h2MUlGc3lsQzlMT1UrMFNBeERQOUNsLzA0WkRHeW9UWXNQSHREZWpKNWVQaVd4QS9EQkd5VEJad05qQlpXSXFwSTFkRFpJRDdYaXlSZGQ4MU1sLzdkNHpxS2E0SDNxN2orMm9reDUrb201OEtpSTUxM0Fldm5xb201ZWliUFk0dlNVSEN4YnJ0czRDZ2NKNzExS0FkSXRWaVZIUGVEbXE2SU5uaThjYnZaU0RuOG9VSTg2bGx6K2RINDdZeHYvcmZuT2dCUFBtazZLUTUxZ2p3RU9LY1phNUl0VTNWZnJrOGZKYzBMQ2pCV2t5M0hFZ0hLTFlZdk5hWUdxOFJhbVpoRGFRSjVpN2tSS2ZveFIyRHk5S0p4Sm9EMHp5b25Bb2JlMGlVamF6T25LeE9LNzI0M2NqNDFTR3ZHUkV0djIveFF0YTNMcHFFMWNPYkUvNnhlcXh0emJid2x1MGJsK1cwRmJqNmlRUzRnUkNFdFNjVVJwK1YwbVRpelNCaEUrQlZTSTFWY2NLN0lBNjFZME9UbWZoeE9KUEk4Vm9jQXVhNmkvZWtXdE5mb2o1RlNnVlQ3d3g1T1hINWczYnYveEJGamFRQlV3eXI1SmEreW9WelduMmdNNXk5YlBHMW5QWWRVQXo5WHNuMGZLZnNQcXcyaDFQSlMzaEdwbkhoSXBsTks3emNqM1RWVUV2elFCY1FxSFhMQ2dBNDE3empTTVRzVHpzU0JibHpKRU5ISVFiVGwxU1FRelR3NFBsUnQ5MW1RZFVvNjJqdFREZUdFZkNnckVtbEIvSHBEc2ppbkt3aGJsL3lkd3paZ1htaHZmc0UvblN1SEtBcGVYTUtnRDNaSU4raWtuYmtQWmtFcTE5Qk9UMzV2bHRDcjlqK0RDcnFYYTF2a3RCaTFic254MmV6OWh2enZ4eHRvUWQ5OElwTWFJMzVJZlQwQUtYbDZYYkpOVXg5UFhvMGo1MzFDOHFWMjVBa2h6MklEOGdBcnE3YUhZVFkzcTFwd3Z5NWhkREZneS9YTzVwZGhzTnQ5UjNhcEZkOXVqa0t1UHJKQmVxaDMzSEROZW10bzhTdDgvU2Y1VWE5eHdONWRGZFJlMnQ3clNGbnJ2a1RYa1dCVlhNV3A1Qm8zMnhFa0hwRWJYeW1kcW9HVU9GWTNJdE15Qzhydm84SnplMksyQ1A4dXRmTkxaMThVUExMOWgzVXo0TW1PQVIvUENsLzZWemVqclVycnRtb0IvOEtRa1d3Qld1YVRRNWx6Y1FpQ0FwNkYrdENYbk1sdXhocHNBd0hiSXZqcjRDVXltalM5eWNvcHJIZFM5YmpZVmVVTWI2S1V2S3ZQM0hDRXFTSmZrZjh3Z1cydjdQYk9zeVVmUXJNcW53dkFlNENyTVJqY3RLNWxuUmhEK1VXbm4zUlE5V1cySkFhOUxYdWVzOHpITTFVaWJCMkJWM3VRNVMrZ2g2RDdGK3pzVnM3SXVhSDg2UHZTK3lxT0pJZzZOb0VUZGYzY3dFWVlTVWIweXBpTHo0MEpYYjNYQUZVMFNHYnBEQ25xUkRkbjFGVS9ya0k4Q04rOFhsZjJhbklPMW1BOFZTc1FibkJrdjZ0cTRMV0RISXB1dVBxNXJEN0RLYkVrbU1yYkNJa1R6bmEvMWJxN0g1K0tYOEd5dTlERDhneHJHbHBUZUhsSjhoYTJSeDBvY0lXV2tQTlE2UmFVcFVxN2QwM2hrRXJCS0c4R2h3RitmOWpLek80bUIrUG4xUCt2clVkeFp1RENCWGNSMlVIWjcydy9TdExNY2x5SFc2clBVMlp3OWJ3QlM3R0ROOGtvTDRUY2hJVHh5em5FMVRKdGlGWDdSajZJZmEyTFNJY1JBRUVuVkZsL3kyZXlSUGVzcU5OOEZFenRwQW9SSkhhU3F5VTkvRHc3bzM5M3luVGhsYUZQdktEc1YvWmpwOGdOSkNSZlF6bW9VVEFxYi84SHRrS01YVlhLQm83ak0xa2wra28xUlgzYTZiU0kxNnVoNVdOTWdwai9JMzdVam03TTlQdFhCdVNCdGNYa3FhV1FxbUQxS25ab3hwOGQ1Z0F2WDRUMVFHa254TTVFWGRGQU9FMEEzOW41bjVjOUVhTUJyMFRvYWZiNUZCVmx4eVNpTjhxQU95VXAwVUYydWVaTkFLMUZNRmhjRFN2d1dqem9hQnhDeVQ0YU5KVndTM0tWS0xFdEpWN0tRRHU3ODRPby9SaEk5Ly9mQWQ0dGZlUEJ5aTZNajdPYlcxNUkrV0xOK25iWStIRytMdkFvRW4yZmRjRlNJczQvMUg3MUphS1REbGVZMER0STM0d1grcS9OTzJlQ29uMGR1M2pRdDk2NW9HNXpTUVBSN1JZRDZqQUkvQ1ovSnYxWDkxSUlJbDZCOWJpN3Q1RGpzSjZrQ1pWQjA1aisrc1VSc3FrVFJxYWcyWnZFY0JWT2lDMGZVN1BIVys4SEJ3TzlYWFpzVFVpN3JieWErMkZ0cFRuLzM1MWNsZWFVYXI5MWl6RERJRW8vWGkvQlNNbXMvWEJJamRMeHlyV0g5UHJVc0pFc1ZzU0wvTEU2T3R1STQrdXVEMWIvQUtoMWhad2lWTm5xMnk2ZVJYVCt5SEFaVmxpN3dWcjZlSmEweG85Z1NacjhiK0FIOFJJa3Y1WVRTK3hCTzJKN3BWL0VZNUkwK3lnNEsybkdaOVc4enUxT0UvQS9Ea1diWjFHRkg1LzZqa3lwcHNrVzVmaUZyMG1mVnlaMFF4SCs4VXJVYnk4dHNlN3VkT3NoSGdkVHFMbHdyOVA0SGM0MEJCWkdwNmdpYjUyUERYcW1KU2hYa1ZTdDdpMDBEUDMwTnFEUGJkSEdvNDlaUTZmdjVOTVE0YndwTUV6OWFPQWhWaUxTbXdDV0VRUG00TGdUek9BVnQxSzM0dHlwQ054NFBXYjJ2WkNqdXJhNG52N090TVBGdUtFM1E2Mmg4T3VwdzJlTm1sUG9NYTF3ckQ3WUFCL25OUnhjcHZLczVMWHVEYnFSRmtLSmVTdTJMbFc2djh3OVY0a2VVSjMrZkdtRXQ2MGFBT0d6S1kvZm5NL0RsZU0yMmNVRDlpbmI4YUFvUGtZV1NBS0dqUGM2Q0hVQVYyR3E3ZUxYblFIRXp2MW05RktuQWk3eTUyYXFyK09pTFZ5SHI3d01SMjNscUVia0ZTeFkzVkNROEYwb2UzaThlelBDNzNmSnk2a0Y5Zk5OYlZxYmJoWjFuTTRaVmtHMTNCWFlZdVc2emJ5YUNxeU5xaHlHZWozUVlFcitEVkRvNWlUVWZpWXBhTUJQOVowdG9sNHBjNk5OZlAwWkVzbTllRllHWDVNWTFEQWxQRjRWbHpiYzBZN1RzbEx3QmswbUZUd1hSVFBLeTNYeHBMWmc0WklXTXo5dTYrcThmRExXVzMyRFBHNzdzYzJJemMxVzZqaHREdkdTWTh0bkdySWNZSktmVmFQbUxESzVJNEJYNTdpYVJqSmU2cDRQdlNVdzBwTlg1K2d4c0dMMmh3aHJaMWZRYXlDeGlYUS9PdG5FQ1V4TTBxSkQxa2poYVhEYmRTUUhNRTVOZlNpSmNjR2NGOVNBUjg3dHdSRzh0Sm9CQUI2WVFGRFRRVUpnUWZ5cUgycnQwcU4vZUtNQnJ0MDFhNFFJSDBwcjNvRmdlZzgxVndiWlE0NEJPZEhaL3dSVG1zYjFOM2plWGdhQ0dyUlMvSEw0cEpXdmovVzhEQk5FWTU4azdJS0M0SWxld1pPV1BQY3J1RmRYNDNRcERnN21xQ0dYSkZad1ptdnFaaUZ4d01YUFMrSVdtTFl0bGVHSEZWU1laVUIzNEl0TVo5REwrNy9MZGQ0S0ROalNkNTNjM1JDNElxd0xuOEswMXlxdnhab0xqYkNzenowQW1BUWxRbVVIMndnQ2VHUzM0WmpiRG9tUHhzNHNkeUlidFAvTTNXZ2F5L3BWUlNud1NTeWs5bUtvaXFkaGxhNlhPc2hyemMyMVREeTFldVUvMzBPaHlwQkhDUTZyWnZLRVg0cEtWMDkycFV5bkZadldObUNKZjgzWnNZckl4NTVBNlhkWnV6NGNDaFBTd0hlOGNxbVRlWFBWQmVSSTVaTXFHTXVuUktQV2xlbUE5bUQrM3FESHozbm5yVDFSZGFVbmNrVTBBbktnbGowNGIrakJZWUdWNDBLWkorczQvZEsxNytZRDA3N1hBcGpCRnhZMlM0WkRkZm0zOXYwRkJ6NTd3N0NrRVV6eStVRzNqMU9KaE5FL2kya1pqM0ZsQ2U1VU12MkFVSi81c0dKbnoyN3FUakp2d1ZzVU4vMzJnQnB0dUxqeFhTMVVVbFNTajMxYVhCbVQvMjZhMUc2MWRuUm92c1pRUnFlTWlQMVZuZWhKZGlkS3U5c0kyRlBGRktDVElld24yZC9rM3o3OVJ3YURhMDBJVXdyUU5KbmQ2dHZtZk92eENHZ3M4NzYrYWo5QnNlZzNtZ1ZxQ3Vwb3d6cEN0OGJuRmdUTWs0NEpicW8zQVdwams5NlcwcU5sQjMxZCt4YW1oU3B3V041Mk54ZXlySnllVnA4YVlCeG5EVkczZkE5UVNoVjloTW8xRHpwS3JURjQ4VEZtMEN2a2FuYXlISkZ2VThBLzNLalF3cEEzSXloU2hNUStLZVAzN0p2S09Rb2hQcmxhKzBQNi93S3pEUWUwanpEWTBjVVJxQVBlZms0WC9kWXRnb2VtemVrK0xxVEdob1UzRkRkODQydzYySGg1Y3dTMmlOdzV4RUw2UXdVODFwMi8ycTA1RWJJOTliaTd5dHVyYlp1VzJjS0tuUWxqU01tZUMxT0tyR29VdVhTRWQydTZQZHhTTHpWOURjV0dWK0xnd2Z1aFYzTXBySk9mTHFJODhtbGtjZE9MaHowZWdSUW9XYVhvYUZnbFJMWE5JaDdCMDFVYVcveTZ1eDNvN2pEOGpDdG85RFRuZkE4aFdvR3ByTiswYVVqV0F5cG5YVXRJWGRwbUVhanc5MkptQlBYNXliRElxOXBHZ2VBK3VTc0MxQllpQmkwTkZBSnQ4bmF2NTVKMlNVUnJvRytGdHRXYWRuQzJlMWowbzQyQ0pndEYrVnB5SkZ4OGlTRHgwNmM4VFpkSElpYlRLRTBXWXp6ampOSjBNRDRiWmtHbGZKVlN3czhUanp6ZXdmMkNaZXFXT3JxaDNzKzdEWjdCRWl4VlloeDkxWTNGR0dvODJZN09DbU5nYUZ3eU1Wd1Q4WDFtRjZqWTBua0pCWFdaVFN0cEdBMGJJdUZYZnczSmZsSWdKODlJNXFTdHpOTzBPMTV0TUxkZDlXZDlWRW11MFR3WmppNzgxRE95WkN2bG1STmNjcFowN0wxOElnY29lSlNSZ3hZcFlpZDJzNnFhNTBYQSt2K2l1YVVTQ1duZ0syOGlmQU00ekhrOVIrZDRzd2U0QnpCUWs1NkNBaEdRdDRjQjZhVi9mNloxVWtUUm9JTGV3NlhDbFJpY0YxSDJTRnhpaDl2SCs2M0dDcDZySGx5REhDZU40bFY1alNnUC8zblg1cDdXUncrTTk5MzhiWGtyMVNDZ3F1Qitxa2FZQ2wzdHNUdjRQMk93YittcDVSajNpMStmOEhVSVRRVG5MbG9WWHFEZWozRFIrMmw2TU1LNWorWnJ6WkN3SnVTYThxa1NHTlNaWlAwTHJSaEJndkxIdnR3cldVNmZBVDlSRFNuUXh3MXhJVmhTUXVSYlNJb0hHc1RGTTBFekpGZ1FRd0NLU0NPTEtUaHBEam9ZekpHQ1NUTWJsb2tsenk5THhndUxXeGRYTEpjVEJrTWJxSFA4ZzdTeXY4TGxyRzBtbUVjMjUwd1lOUmMrekxNdTIrTUpVREx2dVB6TkF3T1JnN0JDVnlMTnRLTzVXUit6d2RnZVNkU1Bja201VThIelN5eXVDTEluTlhpY1IvK0V6NmtYTGhwemREMVFCK2dBYk9YcGxCc2JKcGVTUExDNjhIeTQ4M00xZkR5Y0c2OXE2QUlHWXlaUUhRandkdE5Zak5aRGZ2RkdaUlRoZnNobFpDaFZ2YTA1Q1hWUWtXVkhjb2lrM1pIMnlhSHJQMkIvREVaUjBXNER1aCticHVqTTZnbEpxbklKVjlNZDZkdGZ2UnpiQWZ1UkF1Y1hiTWVCN0V5UWRYMlVDSkpBbnYwdll1dndnbVpvdE1RK1VORUNlc01adjJDWDNDYWZyTVRveVBiTHhxc01UcFdnc0thWEJhS3N2TmdiemhlUzVpVHBKSXdXNlczTE0vWWpxN25pMXY3cjNMNlgwR1lDWUIvNTZwaUZ5b2ZhRXl4cnd3eTFlREI2MEo2dEhmaWJZQlkvZ0w5azFoZFM2dW5RcndBM0JxTDBJNTJRRCtKRG5QQUh1Mk1hcFVBa2RsS3RJR2JtZlFxQzN4dFMvbS9JamNPVHBjY3g2a3RpeU9lQVJZRzJDRjVKUThlQmtQbVpOdm9BMmtZNmk3bVJYMUVqeVhTWEZqby9xTCtqRDdyem8wY2x6MDljQVNBdUlsNGdPWGxTaGFCbUZoRXNRcTVFcWppaFpxQ09yUitQWXpQRTBWOHVWRmw0TERGYmgrQVVIZmt1bElpRXg5QlZQdUwyTm9ScVhoYWJWNWRQMnBQcThQYUhwUTNzRm5IcS9xWU1hQjF2U1drUGVEbnpwMERhVWxnSXc1OWRiT3FKK1k1L3lNd3UzL1JMNGJpR2k3UHZuK1JNeWd4MytkMXV0VURvRGFKZU1ucW51U0puSVVjNmkxLzZOT1ZOWXAvWFF5eFZWRTZJMlZJbUlnWVJhd1ZMSHJtMmZwSU4zZkg0QUk2QSszKzZ4NmduNkFNTEZlTnNON1V1ZVFHZEJHOE9vemVaNFR2UmdmeFYvMkxJVXU3RzR4OHl6Q1ZVa2dkZ1VPV3poNXZXN1RHeXpBWTE3NzA1VzVtMDBZMWMvZFRMdFBwNW5yVDEyQmo5M0RwM3VuUjBuSmhXaWw3OGpCTWVuMlU4MFA1VCsrOTRxM3ErOVdDZVZYSnc3RXVOZjlDUTcrdzdHMnBJMU9NcWlBSUhwZEJVOVpyQlEzRkM4OWs4OVlMRmxOQkVkSWtMajc3VThOSnh4QWNKR3ZhSXlmVTJRSzJnNk1BTENqQnZuK2poYlM3RmlkRHArbGZiUXdJUENmaVBZU29yZVdnc3dHNEN2R2hTQ0p3NDh0L1JtRFJPU0hsSGE5M0pLMTgwUTkzTCtiZW1KVU51MUpOMkF6RldmNWJENFl0cll4aEJraGE3Rm8wRXRFSkt0N3Fqcm1NbWcrWW52d3FkM0Q0bFdjTzI3eUpkemNXN3Z0eHJVeEJxaFh6cklIdVo1YlhqaU5nTWJFRlZGVmxNaTFpRGo3ZE1WMEdLYkwrQnQ4VXVFSS9kNy9iMW8zUDdPbFo1MEcxZWowYXpEZ3hrV25WM1grNHFueVk1Tld5blhrM21jdTgwMjlkVlMzRFkrOWY0T1lEOUVzTXdSbjc3TkZiMVNSS2NIdEZXeVBYMURYL0FTU05vMlN1N29YYVdCdkI5TC90UmhXdm42WGQ1anAyQ1Q3YkZSdzFpY05jSVdmeWFsbWZVOWY5T1NMNTlsSkhJcm5NSHEyTjVjMU9RcCtOeTBoMmRJSTB2NHhlMEZwZlBIc1VFN0pvZmV1cmxLTG5SWktZZjlUMkcrUDU0YklncTgwbWQ0QkYwdUdZVUE4S2Z2ODdNWG5yZFV6MEora25GUU56RXNNekpCVENuZFhLaUwzbUFMTVg3WHZCZzdUVFNvMnhHeTVoTzF1ZGhINlJLcTRYRC9OcEVlTFlRVkdMRmpoL016bEFaK1BwZ2JzaDJEVXdOSW9GTHhhL1hCUlU5ZG9wUDU3d084QVhsQ2hVTjRUQTRwVXVSRzhRZm43TlNQdWUweGhuVlpPc0V1N0x2ZVpCL0txOWFFUjV1UktzeXMvTlFnOStSR2RabXdEdHlRWE9BRTFaOXZWRkU4Z25lKzNiRGppb2k2bW12RFRqMFpDblUrenhadEovMWlKbU16S1pYYm1SdmUzeW1YdklFdld3RGlMakw3VXdwbGtsczl6TUhRbFJDTFgzYzJxYk16V2J0T3pRNzF3ZlRzWE5hWEhmR1BBRkZCZ200Z2hwZXdjV2pjc2FxL0grZzhGK3ZpaXR4YTlBSjRCR1hrdWJDZlY0dlZoYmk3VmFnWHBSWUVpV3R6aFZKQTlySHVZU1VlMnBIMGNVZ0dhc3BTZDNVNGJDQVlzMkdwb0FXcFcwYzlHQWZ6YW4vandsUVQ4TmpDczExWmhpUndPN3J4SS9QNzJhRlFXd2luY1hJVzB2eG4wSkxCbytCY0c4SC91MWllSnl3ckV1RHU2bXBkMmpUTmU2QWhjelU1ZGE3d2U1T0xSdUdkUnZ2UjV6S0krWERRVU52aFhRN1ZGQ1RkcXoyd09EQ0FRSUlwL29HbFVyd1ZRKzl2ZTIrSDVOK1hNQ0tjcVhHWXVuOEdWWCs1anlIVkQrKzdlK2R5YjdkSUpROTJPM2hGT0dKZGJINzloMERBcWVVcjhJVEtaNkpqNktYVU5ONlN5UHNuNTJPb2c1bEh6dkM5RVBwOS9RKzhrUG02cHFTcHhhUEd0R1lhTDdNMEpBb3BvSFI2QmhoRWlLd1NjRnVMcTY4UDJmZjNzNitabUlXcEdpUUpEdHpJMHYvU0JUNnVMM1pTbXVtSkplVmhvRU1VeVJYS3BUQUhmenY1NS9vQXNEMFhzR212YUdKT0xLa2RzWERiWmZPWXBuR0FHdEYzMWtMUDhPUkdiQmJvOXFhdjNVNXVsbWZhOGliWGRKdmE2NHlmaFNqdG85Y1RPSlRvNUR6L3FZWFBVelJxWDQvZUlkejlHa3p5ZEVPbjBmbTRxNWhWY3pGT2N2Zm1lUUY3TFJtYzdlSDhReENralF4Nk9YdmpNbENRVGdKdXBKejR0WHA4VUZOb0NCYnVVeElOanh5N1h3MWJzVXpJeTNNcUlHWGtFcGlLNmZsa1dpQVRiWWRVb1Q2alU0TFlUcGpXd2FianpwS0dFK2o3TlVDWWFpOTM2c0JrYkJmejVJRFU5VUUzZUdaN040NFNOVUlYeFUrb01WZkUwZHMxSmZWakxtdytpMkR1aDdGYnV2NHJSdmpDSXVqTVFVb3R2TGg3QXZ6WllHR2NucVpWeStwazdZdTlVK0hnbUxyc0Zkdmx3eGcvdU5zS0k5NG1KaHYyOVpHa0xUdXRyWGsyYktoMGkwUnpCSmZyVzR0VXRBSnFkNWo3cnoyc3h1andVek83SjZRTE5oWm8vSGpRdUZoQUgyQnhsUGRJakhaL04rRlBIb2dmN1M4K0xUL1loay9wTERweGhaWUQ3QXJPYUdBdzludDJmWjAzSzlrU0FtQkQxRDF1dHF1SGg0NWtzWWZSK21CL3N1eFJXN2N1bGV4VjhDeUFXblY2VnB2alhNRWF6WGQ2NmUxNk1xZlRpQ3ZSUlVMUHBrbndONXRLU0E4VjZabnlCMGEzdUVEUHNJUXhkYlI2ZG9sdkhPRi9mU2JLQjBVUHV6eHQxbDdTUkRNOWpIbFdaQk1RMGhRQVhCWDBLRlFaczBMRGltMW14K2tnR0Nnc0lwUTh4cGM2VHZ3NHB2YjRFNVE5dklSQ0ZRNUNmbTR2MklHR2NsbzUrb1hubzhJMjZkWW9aTTRtVXU0dlV1blR0bXJNNEZMbW1PejM0dlZGNUpHOFUrVi9zcGM4SUxyUlJtazJDdVIvNEoyTHBUMU5ia2lyUUlCZWgzYWY1NGJRRkJuNVc5Z0pDaFkrTGlJbWdNS1J2dUR2M3crK1kvVE41alFBcWQ5aCtGTHNaejZ5NE1lWm5vaFhiZDBhNW4zMldNb3ZlVkh5WG5KTnZEb3VYZm91ZjJUK1JyMkp1RHQ2TGIxOS8wNEhHc2ZjQUFMODVoY3BqTGRWTmhSYTNXMlNhWjliam84aWFXU2lpYU54MnVnMGFNWnFGeE9RMEczTURweGRSblJmSU4xNG54RmowdUorWmpNRWw4Y28rVTJiVUE1bGxUT1pOa2lXRXV4MmVoTndQUys0ejlFYjhsZEN2YWJMQ2FlcmVOUkJCb1ljaEt6WmZGREtSb2lvNzY1cTV4eWNBbjA4R0pqUk8xeC84ZGFkRyt3dXBBb2tMVTNZd1RDS1pNakNHekpJSUdqOEFoR0NDTURseHhxUXl5azhuZTBFRWxlRkNxK0JYU3BzWHdoODd1MS9ydHNEVXFnV1V1S1NYenJsV3JkOTYzMS9xcVVucjlKaTBkeHNSVWxMY3lrNUJ2ZkIwa2RqRjBra2lNOEFmejF3Z21mTCtNSElndGNPazR1V1JubS9PdzRNSm1lVGtDTFJiSThWVWZWT1EyZDlPZEx0MGdZMXVKSEVNOUlDK2pwR3hERTM0aGYwaHdHbVcvWjR1YjRqNWJBMG9KakpXTklQbCtqMmo2VXBTZVNHbUZiQlorNnV4VWNxYTdKQm5lUmJQTzVSTWdZRWhGTGFzOWdaWkJsbit3VlVUdGJFRU1CVi91dVpZMHVLQ3RkZjNoWFVHeFgveDhZVm5SREQ1N2lqNFlSVTNKbFhWemVFd2J5bm41NXVuRHZ2Y1BzVkw1UXBaMWlZMXQwQmpqTzIzRnFxdy9nNmRVelNMdUc0RndkM216bDdwR0VINGkyNXZaNkI0NjlaeEdRSnNiQzdrTXA3cDlKcWpmNGNWazhBTmFsQ2RvZGFwcDV1L2gvSHZoUXVPQnNLMGZ1am84TnB3cEpvZ1U4dkdtQ0Y2cnNUMUxOSjkrUFNQOElSWTdTMnkxckhweXZlYzhrQnRNTzFyNmozYTVISmF5c0xqL2ZDVzIrVXlVbjBaRTFsUFQvbjBnL1FDSDVmZDQ3cHppYTV4bEUxNzBuek5ydFo0ZjFrbnBsU2c4WXBka2RKbkhxeUhZUlI1VUI4MkhMRFBZN2hUWjB0cDBDN2E4RHRKRm9mb1lRMCszZmhDRlpSWTMwTVRWeG5ZYXRtZ2gra2JyclZkV21adko3QWJOeHF2NWx4ckl0Vm85azZWbllEWHdGbCtTc1J5RWo2OUUwTG1hY2s3emFYVmZrNEVnWTFoTnJCMWYvd0NZbm5RdzZ1anpmVFY5NHVpeDlXUmY1M2Qxc0JFNW9qcWNNSi9xeWZVaGpLMUdiT29wdXJKdmhLNG5kNm1CVEQxTjdVdWgram11MFlobCtndHJsRHl0Q3Zkb0JXamRqbUFzU2x0cWlFanNaQld0OVRHLzJSRzlhQ25xdVB4aHc0WXBxWE5NZm03TlZ5dk82UTR4cjhDd0FuWXR4RnRidGd5TDhxQlJ1TnkrbjBxSXBDdjZidVJDRkxMaHhaT2IxUERHUlB4SXdXeWVENTdkNEtZQzN3eHlsMG5ycS9KcUU0MkdBY3dkTVBpZ0o2VDkwMW1qTVNlYW9QdUZUdjNZWCtNMXBKdnBjU3RWMXpjVVFDQytjVVkrV1FPTkxUNWREZjNMNTgxYmtMVGJKMlJDbFF2TkU5MWlvREhPbkN1dDhiUzZINGdKT0VkeUxpNi9nUUxhdU5POWgzYWpGUk4xVTQ0UlJVc21SSmEwODJMTHd3c3JkU08veTVPY0tCN2JRT3lOcGZLUHNVQlZUVE92dEF4MTVwaE9vRVhHeUNndk51K2lCNnlHeTdZczZWUW1wUGRLRDhjeGY2QmU0aUZtOWNWRmN6MHQwaGtTRVp3ZU96UVVuTFVoQTBqbGtud3hqQVprbGVvWm14VGUyTUgxVkl0U1VacExScnY1YmYydEY1VmNIVHo2UDZsQ2ZsMHM4Q2xZTjdrK2RPVGUxOGhseG1ib1lMNkRaeU43L3hNNGNlenh4Y3V6M1IyblFlRk5wMThVRmVyaEhKTW05N1lqRHEwaWY1N1Yvd2ZxaVZnaWdPTHV4OTZVL2FCNFA1aTE4RytKZldaclFqL1doRTZEa2podzhGdHRINmJKMHorQlNLY05ZYkFTZ1pjcHR4ZFMwMjN6dUZFUk5EcHkyWmZYTm1zVVZZc0FIakFVTWU3U25BcDg4UVUwYkRkaGhkRFZJNHJrWlZGV2ZEVldnZFY3dTI0NnlrVzVUSUJZVlRYWnJ1aEFaRCtWdThNRGhpS0R3Z1JUeGdYTGpjR2pLYjlNRXlmK05CNFY5aWsxSGw4VWNZTjhmbG52dTROM3JHL3U1bVpySnMxdTBoTVVlK1loc2hmTFNlWDN4Y01UZmFOMDBNS2oxMnU4aVRkY0ZlN1NBNDY1ZXo4aGNkYnBkSEx5aWNPaEdLSk4wdUQwVkNzaXVhYWdKa3RKTVFkSHJxeW5QK3g5Wmx5R0dyUVBJeW16ZHk0ZGdrZXplWU9EdWMya3ZYYlIxUUhtZ2VvamZ3Qm1JNUI4STM4cS9JVVU1RXJ1VVdiYmU3TDdmc3ZqQ3RCNkJpTVdTaTc3OHoyYmluSkdZY3FjdWd0aWhvV2JQeTdLSU50K2VWYWZkb0U4cXBIMzBmWkZEcDBRcXhuMWpDUFVLcmlpOGpNdVE4dURVejBieDJOdHVDeHY4ZGl1RFJsWDdWb1VPd0FNbTBROUdmSHBzeTZ5Qy9WSWpNSi91c1E2eGFoRWNTMW4yU3RvOGRrYUV5N05IdFBlS0drN1kyYmFjNEZkcytIUjlCTTU0WVpuZ2RTcWxJYVRIdVFwU3p5ZDRDckVoSkpxSkhhbjV3VGNwZElvZ0IwV2ZxbjJVbWQzRjdpQXJEblJFLzZNWmg1YlAxVVJ1OTJERlRHc1RmRU9YNGNyOFRqb05Tc1dGSkljUTdtOXIzY00rUEV0QjZ5MEUxTVJjK0pjc0d5OEJUSUN6a0REdmRtZ1ZXUTkzNjFrQm1Cd0RyRnRmTzlHSFJ6elR3emFQSzB1YXBnQVpVV2RUdTZwT094MGFPVThSYWh0WHhROFN6UktRUVNuYU1LZVUrTXQzRytDYVh5MzZWb3I0bE05eEVWWm5mTER1aU95RG4zSmZEc0hkWHVvTFlLeTduamNzU1IyZnlTRGNaVU92USt3cWRGODBSV1BneC9VUnZRMDhKSk9hdDNpVXlpS05USXRqaU1SeXNMK2Z4bFJBTzRpc2JaVW1TVkc5T3RPTS85a2FhZTliTDdwTjBiTGYvSkpMamhkemVnN1RSaVNuREd2U2VmSXc1T2tGSy9vTU9uR2lDeDQzcW5rTVJLZ0c4cGI4ZXVFK3dvby9ncWFTc0xVVGErY29RSlB6cUtzOTNvZDZNTzAyNndiWlV2TFhXbHE0QUJQZDBmT2pFUXdrYWZtSTA5Q3o0S2lXNDhBSURhOFpQNDBVUDkzd3JIWWZ5U1VlYTNHSkppWEFJNmdDd3Y4TUhGUUhzeXZLSjJSc29iYVFjK3hWdDJ6L0dxakpXVzFROGUySm9CbVRyd3M1UmJnOHJoT2pIa0R4V2JPamlWb0dDSitaYjlLKy91amhRNGdRWUIzWkxRMmJUK1dJdUJxOHlmVURKeVl0cDZGQkMzUW5nVFdnQU9rNnBtaHFqYVpSeTliTGJiUEw5U1FocjdqYlZEZFR1bGRUU2c5cVhzeHJHL1VwZy9WQ2pXelVuV3d3YXN1THlETnVyT3QzV05ySUY1M1EzT2k2NnJuSFVqcmYyMVE3UGNXOC9RZGc2eWtrVDhwb0VWYTBIZGRUdnQyZVZPZDdaU1BGVWx5VXZyK2NrM3VPTUg0TFdHNWwyRTdVamhtb3BVME5BMXVoT1prN0hubXZ4bHdSbTlNd1dEa2JjU0RBT3ZaaVNIZmcwcFNLY0hLeElGd2lkZ2hFWjVEa1dCOU80d3FsTDNlakZ5TGNNL3FqMitHSzVkK29XaEJGWUdwYXlaQ1dpcW1KbktRQkNBMXJoS2ROc1Fub2lPQVRHR2tQdjk0K2dlc3ZMM2JId2hNM3JJc3JaeXpGd2k1RG95WEYzU0RUSktXRGptR0hzYXFUM2s3dkNzSm4vSGRZZm1yeG14SC9Gc0hSRjBJVG40N3ZtM0Z5V0I3RTVrMXV4MXFibmpMU0x1QTQwOXFQR0kxNnNxSmRBZWdrMU13QklRSHlGb0RFMGlBY0hJRk9tc0grSklkdHE2dWtmUTdza1JCNFBuZHVsQUdIWktTQWF0akloYkZ2R29xeGUyMnhINlNVMWNmZThXY2Vac2RzaFhscTJQbnp2UXBGbExCRUdYdnJSalFOMjR6blRjWnhSQ243elByNjlseFdUUEpRaFNkbDNTNDdBdzJTdmhWbzAwK3hQT3g2MUczNUxmazlBaWdUR01IQzJuV1JtTDdESnpTbmR0cG9NKzZlMkxFUUhrbzBTUzhYTEp4VkVKb2VEWW4wT0htakdLSzNrdGtIRitHclJXQWdmNHZDbE1HQ09OaWpMM1R1ZXExaGptQWR6WlJ6cFlaeVpiODk3NGFRa05DNWI3cVJvRWM0b2puSktCblBaMVl0ODd0ZGJrb1BYUm5XaEcxRWtsWGc4MHl1L2ZNL05TbHlIY2owdzVXQWZvelU4K2NTZHduSFNNUURDQmJqMGRwc2VDUXpzYmFBTXRINWZXelo4YWNVM2xSWDZUUWljUE1uZFczUFRLWHBvTWdJYk83Znl2d2FCU0x1OTVjZkhWQWovdHptSVd2YTJKd1dYK082Sm9Bd2VJeExBZTVxOGJqYnc0eGNkdWdVZzByMFdYamRGWVFra1RQYi9jc0FHZ1p6NHVsS09Pb21vRXhBS2QvVFd1OVI4aFg0VVQ4N2tzb2VDMkFtMVVnSGZqOE00N3JXNUZEY0hMaHFqaUdydTBlOGVuQmpRTWdtOWJaYmFtYVNrRkZDMXBIais3S3ZNcHpNS1QraUV1YUZiQzd5eS9IY0NzL0QvVjRHcHUyT3FMcWtYbTR6aVJWQ3BNTFNoRVpyeklESTlVcHB4RDc5TjY3MkxKWjBURWlUZmJNYnpKRmNWTDhWRnlhVHczOTVKbFV1Y1htaTA3TnF5OVI4RzQ1ZTBwMHA2a1JZYzdJRExxSjM1OWxzcTY4U1l6aDRsbW51N2p0bFJkdCtFdTF1VWZsYVo2by9ydmE2YlRiNTBWT1JqVGtMWStCUThVSENSSEdRUDRvTDNiY3FyeG9vTEdQWFRsY2l3SXA5RXNvd3FxYUM2SHJIWjJCRXY0RGZTZ2pMNnhEZEduQ2pjWDF2eS9hRFFvSThhejYvUmJpWWpsWE9HTDVXaTR3aGwxdk4yYUErUHdqNlBqWFRZSXhyUDZIRnBxYkRob2RhM3dGQWJqOE00ZEVxakRmVzM4ckdhRitkZFN5T2FrKzJxcjdMdWYrWFE2N0taK3pOWVZnUHRUa1BKdElrdGg0ZkNqL2JVWTJqV2UrNmNpbGF1c0JkQXFES2pkMFp6eW1kRG92cjhLUUIySXlYSEQ3WE1JWlI5OW9kRlI3TFpZRWJJejRxanlGTjNRSTNvblB4SlFsa0pxSXdacG9OeStkYkhCQ0tTbWNNVU05eHpjR3kxS3ZWS0M1ditEMmQ1Q2VkRE4wbFZIV2xYM0daNGE1VmJJR1FibHdyM0ZEV3J4RG83MDB5OUNCM3pyUFRQeCs1S0JVNGJVbmJsUWY1dnBBb0ptd0dtck1QN21aeTdMRnFyRUw4c1h6ZmhGOVR0QnY0V2NubjNBN0dJVVE5cHVNRFVWLy8xdFRpRzMzbEF3bmZTVGl6UFRubUFMcEw5VzBia2lWc2d6YlB2TUhabU84d2k3ZnhKM2t3eVhZRzNlTWhUcnROUFpwSG9lUisxMmM5YVRiTVBKd3NBOFRjVms0RnQ3TUZIRDNoWHpDZVFnK20za1p0VzNRUGQza1dndmlzd2lMdmEwak1hOENVUTlqMmRFRUtUOC9MWm9WclFWeXA0N0R1SDE2T1g0MGZiQWVYYW5GTDFTUFpPUEpCS0hkNWFnNlpHM0NjZHROMVZLaDdrSWFUTVNvaDB3QVkzUWMwTU1zazdBdlVEcDgzbjMvWDNOS25nUFRoYVFldGtHRGNPekphMHFiUHNpUXdiaDY5V3RmL0luM0NpVEdSWmwzZndLYW1nOC9aRGRFQk1lUDM2em81ZGc2OWxlSFZ6U2ZLMVpTYi80T1dlanJPYjVMd1NtZXoyUW9UMmNGVHN0VW1yYmthdUY5RVQ2ODUzT0FqRzA5dVJiUzhNU0k2ZVN2d1dtcDVwKzJPbkc4UmsxdlowZnF6QVQ5RjRPdXBlRmF4cGk5bERTa0ptU1VqTkRKOXJmSnRDOXdLV1l4ZVNreEV4eCs0ajllZVpXTkw5d1VqdmdlZHBMaXQ0TndCRFVyMjBFOS9lMm9pVW9VWm5VNzBnNEhNdEFRRHFsRFI2QXN5cjZybm5Ra05odVBoTFlwSC82M1VFaTR3OFRGUHUrQVZabG0rdXFweFJzaXJCTlgzWFRNTE9hL1pVMkRLV2dYbkZaeEl5R3I2SjQ3YU5SRFQwdkR0ZVk3S1lxaFZrdzh2eCs4S2VITUIzcDd5cDkwandXanFnNjJ2NVd3eEg5TUluOGxpbkNhUEU4bTRJS3VDSE1acTUzbFI4RWV6Qmt0VWR0QlhpSTNUTXkvUVZBVjl5UjVvUzQ1MWVEUDRNVERYeWVJRGMxNTlQdUVia2E0aHBOTVRLb3lpRnY4dnhUbWRzdVB0ZUxGdlNYeXd2NXpWL3V0cjNjaGdRSjlnK29SbGpGVjlxdlA1bHRmaElrMngzNk5QNk1yUFg3enkwQ1RKaFdXMHo2RnM4anBXK1RpVGU2cWFHVU9WVC8wNENRc0F3cGtTU0FYNDl6TnROMFlVd016bTl4bUpEZDMvcjBreWdmeUZkakJOTlVla3FQam1HUEhFQ2E0aFdaYnlQTzJPTWp4eDNDN0ZNZC9sT29nKzcwcjI0UGRQSktvZWZrSm1iSWY5Mm11d2JjdktVMDlxOWlzby9lSFJRcGZ1OUlxVndFNkZWVjdCeWJnQVU3ZWpURjRXbGh2K1dBTHh5ZGd0M25xaHNidElZNCtEWTJNdlljN3FveVpqOW5wcS9MUmRod3F0clEyREhFRVBxUmdERTl6cnZYNDRvUTlwYkFsQ0V6SVNEemdXL2ttMXpyYkJpYW9pK3FMUUhKaVF0UTZrZkd4ZWFPclJVREZwcVVWdWtkcXl1WTN6V1lvUDdYeXpGZ2RRUiswV2JnVXhrZGpQMHpwWEdQbEd6dmZtais0L0ZmVjRtNWNtd0M0OXFNeGErbFpYNDJEMjE1TStaVFpzS0JBMjBkQUZIWXVWMVEzUEZ5cTZDM0JWaGhLT0RmTzNEb01mY1dWSTlrN0loZitNanlwSUhpWFk4d0t5ZnJLZCtjM00yU1piNEpEY3BFQkxyQmV4eTlFSVNweHo3STdEWHZvYlBEelNWVVEwSXQrcmRqeEpKSGUxelNSd0xIN09WWk9MZ2FIaWpyTWtlY01ZYzZ2bkhBcTU1eC9MZ2s5NzJVQWtoVnorbFJMT3plbDdodDAwZW5nUVcwanp0Njh5RU11ZGNsK1I4bHczM09taU1XMGlsSUcxRXJJTnNJUW12bjRDREdrNkdOR3k3dFA5K0F3aWVyN3B2VlNGeld6NUZBa0RVQlpOQ1E1eThVaTZKUHZjNGJvR0dMWGhybm5QZHp3SXdrYnlzblJOMnZna29BZWtERXo4UENkRjJTVUoyaGc1ZitBVEk4eWZBRnYzYWlMK0xpU29hRCtnaVVyV3JGVVdVNjRpaDlwamV5aVlIS2hnaWZwVDFSdFRESjR3bjBaSFRJQzM1QVd0eDVLb0krVmtzaVU1RHVudHJKdWtGTlQ3d1M4cDFhY29aemlkYWgyNVQ4SzRKbzN3VXhaMFprWnpYUXpoTmM4bTBhSFJSY0h1Y1B5YnZUQk1pbWZRQ1RIZngra09NVWsyQllaelVXWmkvbUtKWHBIRXB6V2wrVnZNaUZ2TERERC9tT3JqMVBjelI1WER0ZnRoM3h0eTdzbU1nWEQ5aWFVN21CUGpYYlE0aCtjUXdKZi9RUGlzak9iVVoydXlaNi9UU0R2bFJ0LzZ2S0NJQ3R6ZmlCTXFRNmtKK3dxamhuTENvSXdqa3VYdEwzTXg4QnZTSVdXeWVwOFdrZzRUdjltUjhwaE04bkNOWWhnWERiZlJFMGhaSVpZS2F1UGdlMlNNTzd5bVZBOFRoUVBPdDRwM3RqVlI1SjVIOUQxczAvU2xRTCt1ZzdFVUduRkNld0Rhc2o4eXlYbEx3WDNPNSsrcXJDU0s5alRsLzRhTEttdG4zQW9uVkh4QTl2Z25VeElWT2RqWkZNZjF2c2p4SUhKMysvZlBQWVZSVDZ6TS9Bc1lLRll5N3RFZXJ6V1BXOXpOVFVFWW42WHJUM2l0RTlkMEFkY0p4dW5HRkZSOGxGZ0NLYkZBYjlYTnlqcDVCa2xMZkdSQlVwOFYyeW85b3dhcWx3QzJhQmRjVHNJanJXTFVzdmFrOUx0YzFwc3FzOE8rY0s5YVZMcVc0OHc0T21Da0NOdDFxc3NPK0J1bWhlcW1lTW1SL2puVnhjdXF4a3oySWdoRk1uUW1OSmJtTlpuVFdyQmF5YWwzWHp0KzdhWUVHcHgrTFFUVzJkTm1GZDhOUVZYd0QwTWZUbURwYm1Xc2VKWndBMHhHRTFYODRLVzRWcGMzYmFKbkVlR2djditsWHBGZzZSMnFGS0pMQlR1bzdoTEJhUWR0TXNZemxraVU1QkJWN01sTHlMeTE0VndONWdhbW41UnBTWWRud1dGdk5YdGpQQmgyOXR6SXNtZGxZTHpFNDYwTzhCbmxHdmRsYU5uT3BKVUtLTUxTT2JaUjlsRnZFTUxZVXB6WTVnbFc4V3g5V2lYQUR1aFhFbittNVJOcklaRDNBVkF2aWVaWlFJVXhOWGduNVdTQ2ZDbDdXL3poNHRlRFZ1Q2NiREVqQWJZQ2Y4eU8rNGR1VnRrb2hsTk9XNU5JeWZnQzJPZGUrQzFpSXZnY0p2QlRiZ0hPMDF4L2pJejhROFN3alpnQ1hRUDZoMnlHRjRLN1lOWDI3aCt4c2ZUZGc2OTJ4ZENrbnRrcnEvM1VtVlY2RWNXMk1OQWhVZEcyRDhNZVZhNUwyVGVsdFphL3lXN05yQ3JmVGx3VWtDOHE0YjhzSXczeHMxN3FNd2l1aktIT25rRHFNdGhRT2V5RGRWVDNLQk95UTBZUXhLa2pRalcwOUVraFVBb0NMcFNuejBoRGtFVmVQODgxU1pWMGZHMXVKckNXb2ZZSkpvbkIxd0lsUzN0L2VZUGhsTmduQVRrelBWL05sNnRYREpSanRFNGIwckgzQUk3eGVUcHBwaHZuMFVJWmJpTDB2ZWJXVlFrSW5adGxFMHdPdGFmWUkraGMvY0ZwcGF1SjFPVTlFUnM0bTZPNUl5VUdzSEdnRmhyS1gvRGoxYytKZWVwQkxJOEdWYmxjQnVmZ2NQYXh2WW9aWFVMbTkraFQxUXVxaXo3Sk9LUUEvQXZZSk0yYytGQ1ZaN0p2NXhrc2pqMkpOMmRpa1VKNWZJY3hRZm1pNnRzMHdMTGlucFdwZndidkZGRUpjU3B2enBoSmtqQXdreGUva1U4a3FYZ2RieEVDRmdQajhjbGJOdTBUTE0wVHZQN3RTVWYxTTN1cUNUSXdkNjk4c1l5dzlxdFJqaHNyWVV1OVBqdzNHR2FVU0tOOTkwQ2cvaWRYQzhpUTNXWnZlM290ZVIzeGJmTWduMzc3bzVJNGpWNVZCVFVoUmgvUFlMbEcybWU4VTgwZ1AwTno2dWxmN3NIbU0zT1ZWQUE3M0todDBYeFQxTjFEN3hKa3NoWW9jeU9IdVNidVg1Q2xsUmhJMS8xM2NXb3BNNHFsYzlCaXl1V2dRbkszZ3VOcE9tUTRtSHJWTWRyTVJnVDdOc2dRSzhnallDcjdTc0ZKeWpoTEhpM09XejJqSUhhRTFTbUNEaVFycSs0eE13S20xd0tQQ05iVy9vRzJEOFVDSit6SnVBTG9kTHRwRG5oRmRPTWxKRktvVHJKQVNkdUZVUHpUNHVlcFI2ZEp6NjVzeTBKbFZLa3h6QnVwemw5TUdUbGZ3czNqMU5uSDhJYmpzaW5XNjhhdlQ4bXMyMTBmU0E2bGFFZjFDSjNENjR5SFh4a2t2d0swRTNvSmdRZzAxbU1YWjVxbUlNSmYzaE5lajRUUHhjSWhXZUN4Vi9NdFc3bTNNNnB1enFqYjJUT01wbll5WkxEa2lLY2hidFpNMjZVWGFObEV6emVObnZzTzFZUEIvcTZWSVFWbUpMYjUzRUNxRmRncUZWVzNUamxKSzREeTBUZkZOMnlLT1hnNFo1dytmZGN3NldYM1FqN0x5am9BcGlIdHY5Y3c5MzRoNzUzaFhFd1V6TldPNmpFSGF2U3JDMElTejd3c054alA3R1F2aGl1cmZrUHNIaHVqNmtPL0lWdmI2SUlZWnkyYS9DZUZIWnhuUEtndWxqWVNUZmRrU1U5UEdoSDdyVCtZcnJ5V2d6N0gwalE0dW5oSmNzM0VLaTYya0g4RkhpSmlZcG9qSWJtSGJjMnNSMCtPVUtmRFBXSVAra3N3eURGcVBiQXVlSUg2UVpZSy9HbGowc0VmbVIvZXVNN3NycmN4RUU4RFhjeHNDUUk5RmpobDUvOGNRRXljTEduTWI1Rk85bndaT2d2WTRRbWRlYXZVQlBLbFVDUlhWd0RYZjdrWUE3N1lyRFE1djl3N2VoVEdOMmNraWM3MTlqeW1CR1ViR2xjMDE0cHFrUjRoV2dnZmlHWVk3aVMzV0FYcU1wUERJZnkzb016cW9kclh1dEg2U0RiRkQ3NDVJb3lkd2xPcWhYc21Ka2hyRHhNcGI1a1V1N0Y1ZTdEaHZ1cWVaTVRoT1V3SnJKT2ZzMWtGSmg5QXQ1S3Q1d1lKUitaZy9TTFNpeEVWUUdnOTVQVE1kaERsWFdkK3N5eUtpbWJpK0E1SEJRVjh3YmVXOUY0MHFrM29oQmlIMVFUS0ZVaGJidmFTU2M0ckxYRnMwSDlxZ0c2elFSeTJYalhSOVI3TkJPbUxldWdOSU1lVnNkWldTZmVlUlV2bnVIcGd5T0k4TVlrNWZ5b2tlVmY3M29ybThhZngxd3o5S0hGSjc3VG9BTEhoN0VrV2tlWUlWOXF3QVcxQ0wrNWp3VllKR1hRV0xBUFVRSDhlVzdhTE1kckNqUDVUVkMxYkJpaUhLY1k5SWg1MzRWLzVtbm4vVTVET3A4THV4VmdyaWFPSGJ5aC93TGVVSkg4N2VBTElMeFdrWHI4L1ZPb3NFY2g5S3JtbmdUa2k5ZzcxQWtvdkVzdTdQMWJnaHNwdlo1bEJ4S3VIUVJLM0wyNnhaZ2UzaXNTSnJsWmpLbkhQNTNwSDRjcWJsV1dpNXE0SGhkT2YyUzB1MnVkdWhVM3hPeE5PMkhRQ1UrTkdxZlZtRTJUajh1TGJwN2Z5TGcwYzV4TTlGRXVqZnM3UUVkYVJUak5hQjZjZC9NekUwR24xRlpYOVBIdUcweFNUN2hScFhxbzExRGZsNkNrQm1LRWpsYzZNeVJxWXhSeUJuTGhJbHBjUTZMa2RMaENDd2JwNkxId01kUmNJNUo1SGVCME02VVBua0xrNDNLbG1ZZnVXQU9UbXprSy9rWFNGYjhKRC9PaGV1REQ1WlBreHhrOUI0NnNibFJYYk5RS0M0YmR2MlhXSkdrcEJ5VWFoNGhlUjZIVW9TN05wVjlGaCt2bUg4WUZPZFlQbXBTTjFHUE1Pc2xBbHdwMmZXczIxcEw1enFIUXpneHVPbnJrVWpoMXNZTzlyMFlHVUtZZElES3hPS1RUVm9vNnZIMm1oT0h0Z0NFbVhMSHlNaE51S3BTMzRRU2M4c1hwaGw2V3Yvb0h5VW43SVl2akQvYmFvdm5QTlRsV0pOK0tEZ3ByZ2Q4RVc4aVVDS1MzN2pmcERwcjUxUWMreEt5RmxOV2tCU1g4dXgyL28zQWtzWTNHOXl6cEhSVk8rTjIwTGJYRys2ODZSUzF1NDBScXJQZzczZ2JCa0hlZlBNRndmclVLdlVMOW9jMS9ZWHp6d2JVL09UeElyYUtCSkRzUGhodm9lem01dFFKaUJVVlBMUXJpS3pjZEpwQWt1Tkd5VzdBMHBQOUtmT2dId0pLR2xxK1BWZ3kzVEFTUHRUQWpjZ0xWaGRIQ3AycEtuSlpTdGdVWHJNQllZYTM5WnlEMXpIUWtLUUo2Z3dSSElldWxGbjZERW9TUUtiM0JXWnBwV0NncWMxZmNhaENrMEZWWTBrRHViNTgyQkVYUHZKTHd2dzRnbE0zUXNiYkR2SVZvMlRUVWFlZFJ6SHcyVEhpZnZRWUxydm1wZU9UVnNGYzRYcGFYSlh4NmZqOUNTU1lzcWRRNzF5aGRPSGQ0b1pGZllKZndmNHNVMysrWTIrZVdwdGhTeTVaUUxMK1BYQ0dNVGhBMm9BZHdReW8zdDRqVk41YmpuejhqUjUxZ0V0VWJ2UTltazdMSFd6dnRVLzgrZHB0b3NRMmNiV3FTOVBVMGxtV0Eya3RReWg2VmZWdTlXM00zUWdETEtNQXozQStQMkZ1am5MN3N3NjB1dnQ0R0JuV2FGSnpnZlByNXdpbk5NVk13ekQ1UGQwZXE1RTZHbUxHWGNHWEE0SUQvYTdmQUpmU0R6cUxVUktET09scVhWUmNob3VkWktYU0pNb2ZqRDkzYkxUVVdmZTVUcDdkc25DRmlYYkEzbWJ2emx4VkVEUm4wQndDZDBNTXU3WThHa3Jzek5STDR5cVR4RFBoWW14Q3BYRlRxOHhNZDhGY3dPSnZneEprNUc5eTVIM2tlbDY4UUNNY1ljWFhQUnlhTHA4cnFYK1IzZFc0RExSeENpVkF0alFrSVEwODdmenBCZnZQOXBBVS9rNzk5MlJUK3Y5T0NIMWFXYXQ4REdwOGo5SURPVFc4Z0V2SGc4RTRHbkgrY3lDeGFFOC9nTjE1cTQxcktpNzZPM2psRDZQMWpUaGljRW5UK3l0Z1l4OGRqWjA3M1dTYXVLN2t0OFR0TEJNTktvR013QWVxV3lkSHg4aUZVaXhvZFFaZ3VmOWpBMU1WS295L3Q5QUJpZzc4YjhLcFZ3YjdETlVqU3h1T0RMZ0dOalA4Tnl5dzNmeVRiQzI0K0lwNXVmUlQrQ2Znb2hYSVRWNXJzQWhvbndQWUpkZFlhcGVMNVptM3Vodyt6ZnhYTUY0eE1MbDhXcmhWM1YzWitFR3RWRDNOeVZ0SUhCa0ZJcXNBS3ZmUWs1aENDVk9XUDRTT3AzMzl0dVo0bVYyMGJieG8vOXFHRVpYbGN5VWJuOFRoN0JJdnZEaUFjejd2ZDZPOE1vU2NlNjZOdVQ0WHY2cUQ1QnBseWdzY3p6T0l6RkhzdnJkQXNKbTMvSVpKUDRWUXpmcTVMQzByM21QOHQreHVLSmtTNEpES051Z0JrSy9wK3RXbktiVGMwMnkvOFJPRDRsYU5CSElPd2J0a1BDaHdFbFRYM3EvU3RkdWtyMDdVQ0RkVmoyZTVxeGJBQkZESmNoVW1UQzJzcGdmd2I0UDlkVVNTam9vMWdkT0JVM3k3czA2bjhyMXl3WnB5MVVaWXpoYU0vcTVmMlhhU3hidzU3MnhNTmYxTjVvZy84RGpmZGpJODRyTC96SFpCODdoWjhYR2hUVThCL2QvVzVoNjZXRzhmaVlJNndlWGtncTBvWVVWamYvMyt3V0MrRTgycXlnVWwxQTVnZmlKVVdKbldNaktTSmhiY05PcUNoSUhkQlB5K0l5UVNGdWkyclJWalQwYzFGcitxRGhjVW9wQXlGK3hBaEJITVRlSDhwak5XWCt2cDN6eWpmM3dqSFpCNGdXZnNURFpMM2pGN2pubmEwOTVrd203RThUTTQ2Q2JmNDJ2RVZDcUdWKzNieU9GeVpWQ0FiSHpDVjdUSyt3QmVscGx4ai9zNFZycGpNM0VsaTVnV3JnaklTMHhDTEh6QVl3NzNDbDdOK3FYbDhyOEJlbkpXbXprc09YSkRjbGEzeU9TOVZIcVNFTjhGSm9sdC9mMmJLM09QSGt2NEg1VVpEMFRidnloaXE2T1p6bk9XYzUweDZvbVF2WHJqaXg5czdyRXhNcDEvcG1tYmxEbnM3aHAxWi8zRkovbDNmbk4xcFJSUWVrUFB6YnVIQVFDRGp1dXV1eG94R0J6L3BvZUd1R3FhWW1ST1FlQXZwZ2h1ZngzOHBQSzlFV3Y3T3dWVTR6U2ZsQ0JJVGRuWitldS9KNWNNMU9LSWxteE0zanFKTjk1TCtpTEJjcVQ5bkJaaDZUYkdRVk8xTVdzNFNuai9RTGJlY0hHYmpJZUR3WWhRdjB3dEEydmo1UkJ3MTZoK1NBYUlSc3RQVHlqTlFPaEtrc3VXQWNGdjR4eGdocElEVHk5UGJQRXBPZ0FOK1FDK0ZvTEZpR1FPUlk0S21nb2ZiSFNydVluL0FOZ0FmWEgrcjJvdmViWmZicUFZeC96VXhaMGwxczdLY3pldVhRMzR4bnIxdDNBU0lBK0I0SXNqaWcvUGUrd2pGRVlMbWVFWDNUNndYY0RHcVBnVTc5M2sweUx4TnRCRGgyMFNhcUZDNHIrN2taVGhpY3N3QmV6QXAxOGMxYXpNRU5LQWF0QkRsZnJKRkZ4NzN0Y1owUHBSdjNKYUw0ckM0bU00Yi8zK1VtbkpwMTdUTFY3clM0V1ZQSUZRejFDaTQxVDVySzlDYkRIMmdrWUhJSnFtOExkWDhJcmFjNjlLTGpVME41ODBLUWtGdW1DUlIyZURsZWJnNk5ad29VaVh5ZUZzUG1lbVJiUkw0RlMvS3UwVWlxbzNqWjZvdTYvUDNyWUp0STZBVW5BTU1pRE9xRmIwQkFQaGViY3BZRGt3dENvL1BFdWo5Tng5SmZ4MHlteTVpWWlXRW1xb04xdjhDbm9yM0lOWGRIbVk2aVdCYzJGVDYxSzNRTzU3bnNKcnVQU3FsN3lJaUZYVStlYkxaNnJMa25TeFJ5SDZ3TEwrbGd3c0NLbGRhZ2dBVWRRYlREa3BXaXBubytiRDZ3Yy9XcXBGeGU2bUI3RTFabjBDY09NNDlneGh5azlMaVRuQ1Z5SDhKREgrYTJ3VzR5SzhaSHBuaDZ0Nmo1M3ljRFdtU0JTWmtBU280OXZ5UTFVQ2NMY1NBQUk2WTlVY1IyQVJ3b083VkNLNlhkYk9pV3I3REpKV1Y3SVVISTVpeEQ2MVpaVEdqNHFHZVh5S2ltZGIrL0NWY3ZqdlNEUGoyMVV2TmozLzBETm1ieFUyMnJxYnQ2blhUdFV6REZDWWVGMDdVZWUxUmtIQXhGcXFPOThRclFEcE93RFR2b1FWdXZDNnRpN1NEMExQVjIwN3ZxZDdKcnVOYWxKa3ZZMUJxRFRmekJReXNjaVU1U05WYVNucS9aU0UvRHVKaHJkTXpKNE13eG5tWnV6UEZXL3FBRm1zbG42bElZV3FKVHV3c0dZUm1pMStkVHpLMFpVcFh5Z3FrdGpreVM1QWY3M2hzNG9paE8ybG10bjMyeFo2RWxXUmZKOHByZW5EczVvRldMSFdlbTNsV1RtM2FhWE5wNGwzSE9ITi9rUTJWWkdEV3N4UWJ5eGhpeEZqYUE0c2YrclFGL2piOU5CSW5nQTN0QlZDUzZTeVVkVDhjTHNGeHB0VjhJSzFBMERxWEdqOFBuOHdHNkJJSkc1ZHhMRXh1SU84MUw5c1FMVkRzL2hoRmdVeE1BNEd6UTVuZWFXRGg4VW5HeWxoQUNpaWxmUG0zaHdaVUNndnpFVllkeXZ4dGw1cWhZY0VnVlM3WG1PUFFBVmN4ZzV4MHRDaVM5dGtmTVRiaHZxZXRSeVFRQVZQa3FjNGMvRjdCT0ROZU5jYkorZDlrTE5VSFM5cFZoa2xybHJXb3FYT0hZSHgrakErbXRkSU9KM0hEOG53QTdWbENUM2R2SlhFZnBLZE1hTUpuR092OHNxNHVzbmpOektkbmhRV1BycjU0eVdENkl0aUo0c0VrSVkxeHdtVmtkVnFOVWtMZW1YSXNUd0lPMitRZFpOYTJlNkVQL0dxSkhzS3JrMVVnS2tITVJBWllvbVhTTnBUejRsQ2ZpSXd0cUJXYWllaGVnV1I5TE9GaG9CL1FNU3FrS0VUNUxCS0ExYTZwWlRzOTNFT0VIUmNyZE96aGVUTkVSdUFpcUVlTTdXY1BtdnY0cytGRjZobzlwSFdRci9WbDF2TzUwcjhndHIyVnEvbXNxdkRjSXQ0c3o5M1MzaFVtM2R6WjdWSWJudFZadGpva2MvWVdyYi9uNFRoYWhoUHE4djJ2d2srVCs2eUhJUU92R0FpaEN2OGNBNGZuY2hXcjNTNGU0ZVhxb3NuSkNQWGtqYVFEdVZsZnp5dTNvbldpZVhFOUNUV0pWSGM5ckt0RnFNWWl6ekhtY2hMb2s3NlJyUEprRm92bUcvT1ZHZ2NLNmJkWlE0aFl3ZUZvenZ0MllDWXB3YjJCMVg2emh2M1dOMmI3dDhNS0ZGS2dzK2V0UG1MV09NR0hxRUI0dGx1cXVyb3V4dE4wV29pekF0TytOVmw4ZHI3VXlPekVQcVZHaWxjeDNEbWZPUHdkcFVUckplMmxXcmdIempmUmxDR2xNNGpPMHVxb0ttcktUMzdhMm5ob0ltWm9DN2NuVjdyNWVCLzkrL05IdXU4WEdGZE9TcFJFU2VkQm0xUTZweG9hN2E2dEV1Q29tRkJtdEMxQ1dXWExSOVBRcVBBS20rbGxnMXRHTXBYclozbkViTGp0MmF6b2owMWxEMTR2OXpSNEpHQTdtaTc0cCtVSFJEUEpzbEZvT3lDV0pDOVU0ejNGcGdWeUlZREFieEN1djZaQ3Q5a3Z1T0oxYVhVRU1DK1lhMjZlT0JEQTlCd3ZSNVMrUEhaZzFVVFNES3FldURSOUJzdFE5REJISnhFN0x5SHRRL2tzckpicVhhUnVFR2FFTUF5Y1I3UkVOVzAvYzVHMElYSCt2Vkc3T2dyc0hlT0hDZUtycURCaEhUVGQ1RUtoWUNFejZLZjE0WTNQYmJ5SDd5a1JTa1ljVUYxMTFOYWpxaDVQdkFMcnJ6ZW5tVm9pWUgwQzB0cTdHNk1tUU5qOTVOL28rckM1ZDA0eXZkREJYcTI2aERuYW1QOGhTbTRlOWRXUEo3OW9lU2psK1pOM005RGFWREk4dEFRLzk4WjVPeVNFTk1xcUlXdm9zdWYvTThSeG55NmZMQytuTENlOU1FTUlMc24yVzhScUo0RlhCSm1IdGJIWHVkUDk0THdQMHVhSTZhUzBzcnRRQ0EzUUNKeEdFcmk5NWRaZ2ovcjZveUZCbkJtS0RURlI3b1FQZHJyOWpWUEF6TzlzZCtmWmdCYzlidldRajJLRDN6TklNalEyVmhUa1JtRUY2djBqbU1aV1piZER1dVRBWnVPUU82bk43bHc4VHRqMExyVENDTEcrMGx1MGRlY0pNRnlBbHpIM2FBazFXOVVQbEI1eGNlcGV5VEhPakFnbDhtWkJDRlpnVXJTVG1WY0tTQ1lrWXI3SzFyZVVza1d0YXZvdlAzbGdTRTE2SGRHeGl6VzI3cThZLzNjTnRHUG1HK2E1RkJJdG91YnVQeC9yME01cVQyV2trNS92QlMvSTUyRkRHSmJ0RXBmZjN6VytWWkZDZ0VEMW9EZEhrTVVlOVFqVDZBWHEwNWJGbFhLRTlaM3AvZ1pYNlRBZ0FuM29aTDJsMFA1ckQxQmQ0YmR3U2VNQ3NXNFkwK3ZscVFwbi9aNS9XWjdoQWozRDM2RWMyUURnWENTdE1Gem11VHU5WnN5M2EvcC9PbVNFUDA2TG9ESVlNVHBnaTZxQ0hycXV5RnVxM3hOaWczRzZnRlUzZ0srTTlEUk1uWXRWNWh0b1JONTZEekRkVzM5OWUydThOelpBVFA5WjVaSEROOHFrZFY2b2FZWGJXYlZ1b0V6OE1CM01RWmUrSkVRa0JXdUNPUmZsMHlRb2ZCQzd6aHpDQ2VpUUN6d0VJM3JGUU5UYlBManB2MHBySm5QYVJyOG1vRUJMbHRVK2NtTUpxeXRMZGpSaUNKL3c0SWlBL1g5WHJzUDZxK0lrWm1HQVdMN0s0S01UdjJSbzR1bUZhODRaazhlb2IveUN5Qjl1dkdvazAxTW5qUTNLK1JETEFjNkd0Q0JISkl0Wnp1bFJJd0RXd1hOVXh4Vit4RkVrZllYNDVXY0ZuV0xzY3dxVVRlN2lEWitsQzNiRlZHWUxvYllXblZQc0RFNk1USVJtdTBwRHl5R2dkcEc3QmNNbnFBTTdLbEQ4TjdQeDZITFRlRjg4WHpGeEppcGthbHN4Qkl4bWg3OGxWRVRjdlp1TzEzaTNNZTFDVjh5MDZ3b2s2RENCaFpkS3JKREFEZUdtaUgxME9EYml0Q2M2bkxxZjZGYjNBSUhWK2Fvc2hsTnFOdzdubmJmVG4rVmprd0svSURzZlliY1lCd0hFR0pVNnpnWnVTQU11TmEzSTJuRDhuUEVrZ3o3UHgwS1E5d3NFdDNUZzFDbUpINmZLRUFuODhPSk16R1E1dkV3WkhwcHFWOFEycDA2UXBUNXR3eEFBZnZtL2ZxUkp3WjhDRmxta3dQTG9RSWFzdFNEUWZ6cU0wSjNWQ2Y1bWxNUFZyRmR4RDJwVWdDeVdJVVE5UGVuSzRHL29kczJydVl0N3Y1RmFuWUpsc1hLR0s0d3d1UDhqLzJxaGpiT0creW1sTVlLbmxyNmUvV0NrQTQ2SWVTcjZXZ204dE53Q1J6ckZINUZicHFudWE3N3plRU5FSExodGJHdThqUXBJREdrRUdMNlJOQUhvQ3VGcnpCY2REMHBTYmltM0JBUnp5VjBXNHdIRG9kdXZtNERsN3NEVGNnWTNUSjVLZEx2U28wRXBBbG12TDhteDNhK1hRYUhRRUZhaVJKdUlRVHpvZjdLTDU3dTIyQ2RoZ0xkcENzcDF3M2FtVmh1bm1wYndHUTg0ZVVBWXJZdWROK3NlMmV2aGxwZkVITXFTMXRWTWRuQnJCdFUwTjdxM2k0bEFHVkN3WHpUMG5EK0N4YU93bzlIUEwweHEyWVYrc2RoM3RoZE9WTkVyMjBUR081WEtzSDhjK1JDeHBTQ01QNkt3cTI1WklSYmVNZ0tDNDNpOU9kUVVaODdwNEg3d09SL1hhczBUWWp6RVRvNTg0SGoxaURHbDJnVkJJU0RwZHlGaUtrTzllMGw4bjJ4Z0s2N2g0UUVKemwvNDFjWExvQVNOSCtLMEduYVFaeVJhODFRY0ZJWXdTUTZoMkZLZHZxUHMwTE83dStpRjl3UkhaZldOVmVVWG50Qld1Q3JENzg0NUtxKzZYK01YKzFWL2Vic2NONWpYNjdCcWh5OG1lbEovVUJwK09vVG9xUVpxUXVVVlJ1b3pHTlAvT0hNbUhrSHkxK1R0dFhzWVhyWElvR2tSOXFVQk1NV1hjRDMxcmY5MGNNUTVlekRIZkxzM2RHc2JZZ0UweWxMdDdUYU10TmhRYktlUGRWMXl5Z1VHdDF5ZFBvaXZHSm9NSjhPTG9GZnZVWHBicCs4cFZoZEhhdHNZUkhQNWN0ZTJhZFN6RkhITVR4Q0pBejROR0ZjaE5RNGJpbUhDM0R6aVdLbytKbWpPMlIyZ043RTdSdEthWEhveVBLS3FScDhVVWhrMG9xNVM5N3BHWm0ycHRKeDVET29TYXlMTUNOTkZDWTc1UGNOSURWUnFaYlJQRjBvRnVTdm95T0ltZXRvOXRTVkZLQ2QwaCtiZDlSM2VkaUYxZUFiOXdtRXRRb1pYSW1qdlpsaVJ2NElIWGt1aFcvclpIRGRtVmdwMDViQVdMNW5DK2VwOFlldWprTmdac0JteUFVRTVlMFdBTGpVT2VxOXpSVlExeEM3WnJ4Z0c0RkRvWkU3cFhCNlVieUJJZ1BLSUU5dEpVQzlKbTFtQTIveFpkS2M4T3lxcTIxRWJFeEhPbDlYODdiM0IzdVI3Ni85UGtRZ2lpVGNxMFZISTNsWXlTbHNvMFdhcHJlZjllb0dDcFV6MTdGbFJNVkEyekhiUXJLNExjSXhjcjA3Q0ZEYUduMlBOMGFyVmFKck84N3FBSEN5OHhVK0ZhMC9Ld0pYQy9rbm1Sekd0c05nbWN2QWI3dytHL2M2ZTd6YTdKdDd2Q0xOUGVrRGZLNE8yS21hMm1hK3FwWmZ5d1ozcjViSW52WkEralFJNWxUSjNQQjY2SXl6M2VDaG8vM1NPU0pLOUVwOUxpQ202RzRETWF0N1NITFBxV1dPWXdvM3lGNzFETHNnbVhUQWd1SmFIeHV3THVOQll2WW1HTllMODY5clk4WnQyR1FwK291VHdaNVJuaklsWFBYYUVoc0p4b1N0eXgva3U2UERhcXAxbWVxZjNpR21GOFNOSzUwbUFrRk1JTnZYcGdtL2tlbjlJeTRvMVI4d3p1L21xZ0ltUWJOanY5alc2UTRIL0ZCOG9ZVjNkd2c3SGFoZzRqR2dUYzVOTEpSTEFlcWFwV20rcTRUUllaQWlPb3lDWjZ6djRnY1g3SW90MGxaTXBKdTRZamN3a1FEbkVKQ3paQnlXNGY3UElObDQ3SkM3MkZBQXk2RzNJQ3NBRFR6ZVJpZXhEb0R3RDlaYjd2bUdPOHVydWEzYXBldTVoL0ppeEM3akdSS25wUHpqMUdyVkp5QzM2L0dNOXhya3JQTGRVbFlwSFFrM2RveWpjbEthYXd2RGtGbEFCYTFyM1pxL1QxUnZKZGlNbk11V1V0eXdHWi9iMmRacVVySUJUUXJINU9Vd25BYlY1TXA4VUVjWXRYMDNqd3lLS2RMaUNhM1JqVTBMaGVDYW9PTHhES2FScVphMTZKTlBDSHFKZWloYS9jOERmbkxUT2VKVDJmWFdaSnl1dnJ5UUl1YW5tejRrMDd4VHY0eXJXYUtNSXNoaVkvclJ4clo4TTNTT3haay9jN0tWQ3l2SnNhbGszQ3dQd1BBdStWMHVRYk4vNmhqbXFwYThmWjc1RllJTmU3SDNZWnVWdDcwWTNXT20xTS9BM2J6OGlTcExRaFdxZFlRTUdlRkFnbTNNUkVxY1pCZVdLWlpWN3RIcWwwNFoxak12dTJwVkVCRXBkSjUxTXArWjFIYzJ0aklEZnd6YktxMXdQWnRiNjYzUEVKeWVFd1pubHlMT05MM1ZlYTdUTk82aFVpMnE0N3huR3BZUXM2cTAyWUUvenhGOXUxbEVrMzJYcDF0Uk1WTTh5UHFITG5uWDVNaHYyRjdnZmFVK0U5VnlscFlYbUJEYVo1ckhqQzROTVI1ZWE5VlBrTTZHQlJxemNVKzM1ZTlONGJJbG05dzRVYmxDZXhSSVdjdEEzVzNZcU9YU1NwaTMrOXhwNlJIdFBGNW00ZTB3cHIyUklMWlkrZERoalh3Q1Uwek5NM1ZXSVNKa1o3alRBejJyYWxkLzdKZFlnbUdubDk4KzY2UHRka1lOOG53d0FOUW8xbHZRL3JNMEkxUzBrdUJYV1krNjByTlZ5SUx6NGc2MWpZZG1yVTJtMmpEaG5Xa2FBZ3MrVTZ6N2FncEdtZHdBaGQyMHNMb2dLRTE5VythdnZrWm9mVENOYTVyV1RpY3p6WWdmZkdLejZYV2FGelpsRm9JNHVHRFE0bThFemZtaVprbnNVeTI4THpUazBEWDJqUnJ3dFZIdzdsZDQ2UVFNY3Q1RXpDa0JXR1EvOFRJeE1QSmZOOFVkMlRmd25HZjljYzVTa1FySlhxTjRURU5EZ0tmREtTZWVPN1BUWHhZWk5Fa2c0ZmpDWUovdXpmaGZkQ0VRdTdIaU16OG9FNE5mZWtGa09YNFd4cmljSXpIVWxDSmduL0VWY1JTUGxxRmVNSitQVzdSYjQ3SkRTSzJ5a3lnMGtjbFlWQXd5NzZkdW53S2Jrek5PK2hIUGV6dzBPRFFFWHl6eDVQdjZFRTBvWlRLUnEvMm5CeSszQzk5SldlS0M0eitWb3hscExtdm8wdE0yQWdJQ0FnSUNBZ1BQOFBwcTc3ZnNjdCsyN2Y0ZmNEL3YrNnAvWjFSOTl2MldmNy91SDkrM29pdnQ5TW0rMzA4cjZpWG0rMzZZYitIMmt1L2JmVjl2MmU5OW4ybTM3ZXFIdnQrMUd2cyszbDM3ZWsvOUQwOS80ZW94UG5XY1A3Zm9mL3pmckhOK25aLzdmc0Z2MmZZLy9WZExmKzM2MUMrbjlpTHYxYjMvdDlGQytyMFo3NTBiMDhOVXFxTERvMTNwK05RNzlIVm9OM0dxR1FBc1FRR0tMMnhaODFyeHhOUFlDOEhmY1NtTDZTYlFoZDBBd0pQeElqM1RPc0tmbzZQZFBtRkJhakIvTjdkdzRTKzZyd3dGc1lWZ1pvaE5mNVZ2WEdpcDBWKzRvcDN6T3hmYnQ1amFncjBENjFyQllOK01lUkFuNGN1UncxVG5uYkRoWWx4cllDRG9sajloV1NaTGYvSG9zcE5lcW9zY2FqTTFWNG9DVGwxK1pJc3NQb0tneHVKMmZIaVlaSWRnRmllRStyeUxFMmRsbFVZVkV0dWdkcXorTGozTmFpenllZnk5MTcxSHA4QjNDaEMxblhFRS95bE9ObFo5bWpzMXlOY2wrR0lDellBUDJ2cFVhdklrdSt5UjllbTQ1bTlVdXhZcXZTYStjNjFNNHA4N0VONFpDWnVSYkZtd0JUSWsydm5VSkVvQkMxQXFWYTZYVkFyMjRSTFFuVXI4Wllpd2x6aXNZQmg1aTZPK3R2ZEJNby9ROXh6WXcreGx1TDQrWC9pVEVUd3Z5WjVlbXA0cWNIcDlkcWlaaUhHU1lOZ2x0bDg4ZTA3NEIwY0tOcCtvOVM4dVFQNFpydzgzQm9SKy8velN0cHdTLzEyc3RmTDY5SDNZTm1EYTg4a1IweDA4VEFocTR1SFZJNFN1Tmh1Z1FZYkFSUXVkc2VHWnNHRTJyTkxoOFZXV3ZkOENOWTFhNktEejZ3N2pibFBQTmVzYmJXNXZaY0cvSkswMUlzSFdlVVN3Mng3ZkVmdEd0SzlIMEl1dVkvWVlTQnVHSnhCOE1QT21DRmFUUk5KY0d2UlpoVmdLZWJUZTRQY3FyOFIzdWoxUU5URDdtMjROM21FcEJaTHJ5WEM0UjI1WnZPWWk1d2tQVjVUcXJtRTZSSlBkNllEdHFZSmRkQzhYUG5ld2c2elkxbEpLRnpzaHVrditCUFNnRnZrVTdNL2FCZllhL3lHSVg4Y0F5ZEhFYnR3QitDd1FUQzFoajRVdUR5K2REKzZWb1FFVzQwb0FVZUh3S1dHTGxxZ0FQZkh3VGxrVHhuOGJvcWV5dzN3dDZpN2dFYUNSc0xNeTkyYWxBcUs3cm5uR0w2eTM3OFdzNnlFRmc2ZU9RaU5uTHplOHVqM3F1ZkI0MVlWNkU4ZWxaQVJxY1pxNitsNGtXTWlUcEtiaExFclV3L3EwZm9Sa01TQlRIbkhtVFYzbWs5bHFGQUdWQUxZcGY5LzdhbGprc1J6TTVEVDZUSUdEcisvVGRLeDRpVWFPYUF3VXlnMWZER1pXUnh5QVA1L3FENkVOZ1VFS0NXNlZiVnpVSm5OOVNidk4vQWtjNERoTWZnR1Jnb2xucnc1ZUp3SXZKcm1tZ2hKL3dpRG5LNXo3M2JtaHdQcmNmZWw1Vjh4QzUrVldneGYxK003c09kay93clF6d2ZjeDRINnRVV2gxa09BNHVVNS9odGhMYTdFQjUwNTVHZmdkaWhCb2FxUFpFbHBvbFFQaTRDdHlvT0tpVHBDRUJGYUlpbk1qOHpSaWRaZjlCK2hIcXdSTWhoeHA0cUUwRnRDR2hBQmxBSlBtWjZLYThkVXpMdGNlN2J1STAxWmw5bmxENkwyRXErR1crOXZtanpaK3laQWhnZmVPVnkwTk1JZ3RlQ3hsMTBFR1BQZWpWVXU1bHpqSXFPdGd0cFJvSzArWGlMeDZRbVZyOHhlNDdsTndIYk4wZ1JRYTNHR0I1MjllcjlLcHIxVzk3dVY1N1JqbFRvaXZYQ05pUUxWWFpOQXIwbkxoM3QyaDl3ZGpIQlJvU0lGelY2TFNjYmY3MWZOa296eFg1OGU3enE4eTBSa3ZQV0lCTkVOcE5DUjU1dXh5K0FNd2VwSEZJTHFvYks5RW5LWmh3a1k2K2xQeWZrYXVzWk82UTN0RmRqWmZ2QUZMbVhPMnpnNWpESDVaeEFuSXFRaWxaY1RSN3RsT2V4OXBodXJ0RVhyNDZuT0phdFE5NWZOVmVuM1BqOExMSG5ZZ2htL1dFL1BZZlF3WXE0ZEZTYjh6NlR3RTJ1N2o4bW5kZm9PL2ZmMmFzSjVTeFVCRjg1b2NRVkw5MVVVRG9lV0FFNTlXc0JORjZBSjJLNzU3eGdNMXdqWGlVemFiMGFaNzZRbG9PUVpSdWN0Y1QzcnpJbkM0N2J6aVNrN3VLWW5GRllselpSNXMxWThkQjc5U2F6Ui9sUy9raHFVbkY5WTkyL0pYQU9CTWpkZE5ndDZnRGVlNndoMVFFaWtmUUN1bEs0bzQvWWJkbSt3TDYxWUF2M2tzeklrZ0pvNVkvL0xZQU05NzdxSEd4NkI2UGFIWlIxLzZFZ1NjRDdOTmg3eEljcFo1dW1sUTZQOXNrakgxa29GRDhXNEpEZzErSWdCRUlYU1hBRXNkRjBtYWJFdW0xTGVJWlJRdEFibWgraFlCaG1lZ2pmcTBHbnNmWVp3NGxZUTU0b3htUHdZK0xKUHNkU2xBcFVZMG5ZaGRuT0sxSlEwRElha3htK3BmMlk0NFlHT2p6WXVvRFFIV0lWenFXWmhiSkRQd2JMREt3NjFKVllPQm9acFF3Q1VUdE9VbDc3K2p4aVlsNnhIck14WHAwU2dTcy8yNEVJb2FOVTlwVElBRDBhRVQremRGTEtRT1hKNXQxNTdTam5COURBL0tNYlJjWlVVYWRlWC9YZ0cwSEJKYlpuTGVWc0g1T25jencwc3FhNmxTVGg5aWFoYmJ4VkJCQ1YxVG4zNGk0bytsaXhTZWsybWIwc2RzUExiQVVrWlpKTDNZVEZtSE03Q2R3VVZEczlnbHF2dXhvamVKL0R5UkplOWw5MWN3N1BjTVlwK0t4UUhqb3cyWDJRWllKTjBScCt2NDJNOFphaW1Edkl0UktsR3E2RzZXYUZtcmpXRzhNWkh1aTdSVE5vRGNaU2dhWGpFVmJ0TFlxY1J5dkJobnd2a2E5NTdGTW5ucCtlZnBvVVROZU5WMnpFVXhnNmlEMHpRdG5jQ2x3NWlqWUlndE9YYytSVVNCbWxVOWl5ZEYycXROZW50VWFWQ1NrNDNpdzRFMG53bzdKQWtMSkkwVk5TU2NPeE40ZTh6VnVUUjdNZnduZXFMcWQzN0owNktNMGZUM0dYL3Q3T2JrNEVEOTNRdHNDK3A4NHFKelJXelZOVUhIcUh1Z2hZV0JMTXo0RGMvd0w0N3Q2Ukcxb05WWURSNXIxTndQTUdmNExOWm8vL0NSVWpGZVVCVVhUTXZZcTNPYlBkamUzRFFtcGVZOU45UFZFMHpUOStONHcxejNabFE0bnJXWHd1NDNyTU11VllRUkpwMUNZSXRaZFNzWVRiZmZ5UjZqR1VVMFhSZWxyYW81V2UzTTl1TCtzOGdwNS90U3hqR2l2OE5XOE9DSWliMjYwVzZjbjJpYUVCbUk3OXBEOVhtb3FyckM4TGFVeVdlZmYwSzZ2VUFMUFk5YzlXVlRoNVcwVGF3b01aTEVhaS9rTnI4WlBPalhBMEJiNGpUakR5NW1hOFF6OFVPR2F0R0Mxdlg0Q1krS25IS1d2WmFhb056MDNIaGxQL21jbmc4RWp5TjdERDB6YVJOY1lCTnZMOEs2eG9Wdm9jOFo2SG1GcExwR0FrUFlyTm1xTTcxa1dURUNqRG1nSVY2aVRnSWl3cGcyVkhyZEw1RlJ0My9QMGdpTlR4dDdwNzRPTGpYQ0ZjeWF3c1QyUDJCRkVxdkIxZGxUZ3pJVXdFUWpMUVhJT1NZMTEvUlRFcGJ4c3V5SGRDZ2xwZ1pYa3J0V0xKRGVUVnVpSmdpOFRodHNzZjRnc0xIMEV4dmQrbWRiZ0tiWjVyclc1UUo1c1BKNVZ0N25wYktFU09VditLQTFqODhaSjl1VUFsMHgzYndGVFMxekdyTE84c3ZqTFQ1VVZ2bmRrQkZLclFVc3RKbUhyRE1UdUpqdWpmRDhuTmZ0QUZYRWFJaDh3Y2JIQUNwWXdvMmQrdXBSRGtoSGFEcDczVlFxM3d1ZFpZQlNLNERCSUJGMks2ZXJnL2NGcjBXSFBDL0JlcGxldWNNTmloVm9nSWlKckYxd05zRDhVSGNmVzFqZEYxTjhDdXNiNzBDQ2pzYWcwaVZsQWRsYlJqa0wzWDhPWko4b3BxVDlJOFR1bUorL05CNmdVMjlUTS9RcHBMQ0tHNitnNUJIMDlIWE1mNnR3QXVOVUV2a1NrTk96d1k5UjVudjlCcURVa3RNZzErT1hHTjVROWFiQVhXNFJEaFcrdzdZVkxUTFUvT2FNY1Q0K1hwclZTcUx5cWJMNGtuWGlBbWRjdEE4YXIySHhuS01nUmtkUWNGSlAxZWFTWHhZNWhrVGZJSmtqcHJlOXMzazY0enhEU0RuVlRvSkRDTHNoZlZjclZIVE4xYnd2UFhLZTFYdmd5eXdFN0E2QVBGaWRDeDQ5am9QQk9ueXU2SVNycVcyUlhDbnFEWHhsWXJ4VlgrRURRa0xHdkQ0eVJaTVNlT3VvYjZCUStiSm9pTlppMlJ3T0tlNlJadWtCNVZqdm5zMk9nb1M3Rm9ITlp0bkFyOHRLZ0hQOHdHakFpRXJMeUc2U2JDZEd4RXlmbTN1NXhxdUZ1Y2JVRUxhTkZNdURNRmFnUVVqTWpnWTlBcXpLOHdPN21BSExxUm1uVkl3b2JzdU5QVGZCSjdOU3NkL3JRUkF5N3pLSjUvcHg2cHNHdlFWbGdlYkdFQUltOERPcVJaRVJaMnhFYXVhSEt4R1hja3NTN3hmb1g0TGhwZy9uQjZLUXZuOVpnV2VJN1V3N0xqeVNqR2VEYkRaMGtaV050UFdFNENUOUZ3ZEJHcStYL0VHZlRNZ0R4Ujdla3p3Wjl3anVpczFiYjhWSnRFWkMxR3psaU1oZWN1UzZDTm1xeVM1SEthTnU0VTNIa0t1dzgwQWZOMFJZNHR0Z0xpdFFyWGpPaGV0N0lUcTc1Q0VnOWFXNytvNVFxanJCcHdpbWplcU9Dcyt4cTdPWDlCMHRiZWxheTdsd1JJNjBueGovTHRiN3NvWFJvSEJwVGtuZE12R3JlNkphZmVRNk9WV2dhWVI1Y2Erb2pXUDYyOGFrb1FMa1JVejFXamI3akZESUxERzIvMWhVSGxmVkJScUlGaThSMHlqaFJsQW03bStPVW9qSVAxSnl0dlpsNGZCa3JrQ2NyU244MjJUaEZraXN2aHBiK2VFNXNhd3hwdWs5T1ozeWpGNDNKTWJhc3BNemUxeVc3Y1FubHIrTmZHN1FaQi9maVVhTHFPU3I2SFZhMXEvd3ZEQlNGbFVhbjAxc0FsWjdBRXZ1bng1d3RqZ2M3clZ3eXVGdTA5UXNIaG5vcHJuajEyL2tpMEVUSXBkWTNtNWxtQVo4aTVObUJqNnRGNUlXVTBjSENldUlBYXBCem5WNDFTOURzemVldE42VlhEeHdqODR6QUdJNUtSVzBremRCaFhGQmw1QzloNU5JNjAwRTdNTS9sSzl0RmxkQlVqMm8zUDJZd1JsRlhXQ3pyajAwdnFla0tEUEorZUFKYkRYcU9CWmRYMlFrM2VNWklaTVJJaHJOK2UyS2hDYXBaSEdVbW9DNmFnQzNrU3J3WGNTWENOSFF0eHNZb0loZTR0UWF5b3R2UnVYWTlrb3lZbTJCb1BodUVKY1pMZTl3S09BSi9uSjNweTBGczI1dnZldEF3SG04REV0VGxNYkN5cytnM1MrZVZwOEdPY0lGb1NGNGFCUjdzWXVoQVN4RzJPaTFDY0RhazE2Y1RLenI4OUUzZ3FmZ2R0bXk5MCsrTmxvaU1wbFIzd1pVc1lQOHN5N3Zoc1QzYlZZWkFKMzNKaVRUY0NMNzNuSmlzck1TdGc0U251ODZ4OEdIT3lzYjZWM0lCbmZsSW1uQzE0OFpYNGdDUGF0TmswT3BySjJCeldRQTVwS0NORktmcHA5djVuNytIV2FoZzNzV1ltZE5yalJVQmFlYVBZSktxRXhHVFZMSmRBenFDdFNuK0U3N1JXSWprVDN5UjhVNjcxNUpYS1I2cUZRRis4UUppNXhrMGs3Ny9hMkhqcTl5N1ZmN0FqbE9jOEZIb3ZUekJpNDhFcXFsQjYxditqRkZRZFkwNitjNCtoWVEzVDFCSWRRcUltaXZnV0hYWUZhbzRzMXk1cStRTUg3NFZ2N2EzYUg2emxrcmR2QzB6UDJXeUZGN1VsSSs4Y0huRDVIUmZLZ3Fra2hZT2hNNGl0ajJKQU1EZkgrOTBXUElRWHJUOXBpVlFCajlqZXFHQ1ltMVRvSlduNWhmcjJWN0YybVpkNFZqMUhxT3FPTFlsaDUxN25qWWFwRU1PTUYrenFqOE1QRHhqSUw3SDBLcUJNcldxVVhYaGM4SFRuSnp0Y1pua3RkZXV0aFNXZkg5ZkRITlc3RklXTTdodkxpOHY3THZBaWR2K2hmTFRTZGk0TnNzZDZ4RklBZEJ5c1dMQ0xub3R2NmZpYXVUL2lSVk9OU0FSTjlwNlRXR3BKcm9KYWsvamsvVHR4ODdmbmFBSXN2M3hYT3hrUXNmY3RBckk2aUtxSDg4Z28vcEJENEJoSEY5OFJlK1doZ3ZHVUR6OGo1a0ZiTTVaWTFPUktXUktOVWpYdnlkYjVMOWJMcGRaVTVjMzROS1NqeUYySnJCM254MVpCRXM5cnNoZzVsK3pFQkZpRE04MTQ5amY3TnppaDhxTndndkkzcVFiSkZMRDBlQ2tyZUsrV2t6QW5SMG40ZzVUcWhrQ0xTK2dmcjQ4Z1F6cG1sTGhqUzJ6Njd0SktKYTZmK1crSkIyODhyK2YrSFpWRGxzeUNtNkYrS25MOExWa2VvV1k1YXFJanFHeHVzbDIwWGdINHlCczljZFlpNldDNUdxSlFaVFRVZXBndy9MR3h3anE0VEZQMzVucE5TbkdtdVE4YkpyeFJkWjBmbEhMQU93djllK0pvSU1NOW1qWHdFTEtWQTdDZkJoTXJMM1hBYTQ0dkw3RklpS095VkF4SklJelpoOFVRZGtJTlRQSm5iRmFBUTl3cnk1T3pjRUdlQTErNyt0L2E1Q1dsL3FuRGFvMzZwR0FLc3R0aC9NdkNSWXVVUG5BcWlSbG5SalF4NFNnRytwVThEa0xFQldWMHEvdDRpV0d6K3haaTFvQjdPUlluZm4zSjR3bVh4aHdwczVVTnNuYStYb0phek42WDBKOGF5MUpZbFhiVXFmY3ZUcllrWWNULzFIZkZHaitKWlRNdzZwSE5pem1hTEtLN0NXNGltTXphN2xhTktKQkFIUmh0SkxCK1BkZWpXNmc5MnpzRlhJOWZzY0gvQkZuTDdkL3FNM0tzclBPNjQyZ0xpUU8rN3lTT2JNN09uNHU4VDRmWENEMUEvYVZzS2tSOU5SUkRMelpNRitsNTdOb2xnSlIvdEw0dlhLVTlmaVlGaWl6TjhQb3BkYnRNTzAvSTRYMUJqbHlRQUxPTjdCZmxGWlNZOWp6c0lBdE5jN1hNRk1idHNaM3ljeHFEYmdZUDdoamIxSW5vK0p1WTdZb1U1REhxREI2ZjJzbjhNeHFRYytyR3Z0Q3NqelBQd3I0bjN4dTJCd2tHS0MxMkhqc0tUa1NEREQ3TGRobDFzVGFRM3NTMDVINXExYTZJTDFEbjgxblNDTTk3V1NURS9UNkgremUzYXV0eUNIMmZkNVN0U2ZUSmJNV0ZmbjhkcmRhekZUQnUzWDlGeEozRGhrTElWeG1UZ1lpcUJLd3ZuVmRYSXdBSCtJbXBnK203ZEl6YVRYMDlSeVI4OXNhRERBYzkvV2kvYmJpbVMzTG1iaGxtV0pvU291WmhZTUgzZFlMTVNmRTByemtEZktuQXVGUDhMdVhUcWpVTVZYbUx0TzlKdEp6UHdLSDI4bXBTOVRmUy9lVHN5Y2RnRzVKUlBJaG9OMHg1WHJwZFh1cXczUVh2d3FSZTgwaVJET1BBSWxOTWx2MUZDd0dSV2xwaGRhdy9yK0ZzaEc5RE10dGVPRHJ3eHdkaXVZVWxUbldpbVYvQ2FIVEpiblFCYWJKMEJUSUZuY0l0bHppL2E3Qm4reDJmRnZ1bnZWTTUrcXJTbUNvNzRVZnAvTVhOdXVmYytsbHR6TFdOZFhqUlZkdnRwUkN5K2xEdTlZV1JQOXJ4T3I1YXMzekgrd0kxWEtiWXdjckEvODI4R3kvL1BqaUF5Z1JQZjhzTEZmVGV2UUNJN2hJaEhwWW41R1dudWR1VzZMek9DNGQwNk9uMVlVVUZVM0hyOVNOM0tHMTdvaDVNclZ4N2lkQkcwWGZLcXZzc3ZkY0g0UDVZQW52YUluS1lOb0luRTUxK3Jia3NBZDBOUllvcnNYZ1JGQ1ZYT1FiajFKczlhTkxQVXFTOGkwY0ZVUGt5blRZR2Evbk9vRzlCZDB5em82Tnora3NCb3UxMHdKYUlmQUlyN0w4cjROaXpZanRxdWhPcHFMWWlkUlR0c1hBUUNkT2NqK2tCVVFsQWI2Tk90bHd2Y2RmL0JXSmlzRmZmdVNjVFdmbUgwMlF6WXJWNkgvZG9OOFpleHN1YzVYYVJXSnZYZDd2UzluQkl1RWRZbThtQkw2TUpOVnduZE8zV3dPekhOUmlPa2cvbUNOOXVveDFETFo5OTIxeUlPUWZiZTBOYVJidVRnd2ZjcFFPSlpHbnVOSjNuVDVCbzh3MG5CVXBOMGthM1NwcGZDWGNVOWZHT3FvanlqRTVTZWJENVN5UDRQenprTGtkaUxjTGx4eVhKbURtSVN0VGxuZkcrV2lYYzZINThSaFlqckc3V2U4U0lPRGZwSWsrZS9Mbkh3SW5DYjYvUVJkWmJYUmw4eG8yTjFlQVJaekpoVUplMWJYSjY3OXF3SGhpSGJjbmZqU3pLVkRsenVSaDVaZXVyOTBWT1lLcDF0bTZsdlA2QWdyMWtOK1hvSXV4aWdENlVnaTJzL0FDbG96Szc1Vk5ESjNEdDlEUFlqRE1ndnJyaEN2VlFXUXdHUGd3dC82L0pGdHdjbnI4VDJVOWhFVC9HMzFLQThHLzhkeVZ0VlZWNE9JL0hQbVV0aGpPTHM0VktYTldPNTFCUzJSV2VkTEd1cVU4S1lSWmFTaWc1TmpqWWtudE9TcDF0TkhaOU5SV3dJajBjNmtPL0p2ZW9HMXNhUlJ1RWE1Y1ljSUUzQWhsZWNxcElRR3dkWUw4SXVHd1Z1Y0xNUXVqbmMwY0hGUHE3dVRMTmUxRlh3VGhuTUg1VGFRdWpVTXhGYzc2OTdkS1ZFbUJQM1J3QlQ0WHJ3U25vajcrMUdjcWJ4VjU3dkN5cTl3cWNtRlZpdGsrUWtXZDhlSUhoTk5XQnRQeWYvTGdSek8yWjVKYi9uTjBDUEI2aGtHanBXamRQWndNTEFZQ2lQTExzSTIvcFZIRUdJcldqdzdtbGtBY3hhSTZ1VTFCWml2dUQ3a0NKRnJKWkMyWDZaR2RKM0htUk15SmhEN3dkVDVVdHpJVHBmYUFqcmc0ZEtPRnhuVHJMZnRvRFFBUjdjTUEwemdJdDZIVWNXcXZQd0pPbUY5d3FYVkZCcVhtd01pOFE3Tm54NVNIQnZJbFVtOW9WZm1LQTJMNXFEZis3RXYvZWthTEordnhaV1BtcHRZTXMxNWhHUkxlenloRmJXQU9ocENGTXlJYU5LOFBRQkNadjErQnYxVERhWFBmM0tkY1gxell2eXE4eDFhTUo0VXpIZGZZWFZaei95WXR3NG4zeC82MDNvaTAyeWRQMjdPODlRT3ZJWlY4TUJVQ01jczNxVTN5NTY5ZUsyU0djN202M1lIa04rTWxoeXR2ZGVSL0QvdUVxZnIwaGl2Y0NYMXdLaEVJR1NaWTMza1MrMC8yTWxqSnpObDZpeXJKMjEvZmtHdEZyZHZKckYrbm80ekU4U3plTzhXK2VIYzZmK0dmaWhGcU9DYStoekV6eENRbjlDMDZzNnFyMDJ3NCs3ZlkwVzBwVDBHTFVyeDdYZ3FCK2h2SG92dU5adC93U3lyUnRZSlA0S0VMV2ErUkJWTitEWWdaeHJLWEJidm5LV3VlcnFaSHpiRVUyVlNXQXN5N0xCSllCcTN5UElXSGZ0QzNRYnNQZmJqMlhzQ0YrbjMrQ282S0ZvMGJJY3NDaC9RLzRlUlUwb0pJMG1CVys2alR0SWR4STBTUnR6VkxaZEdwaXYyM3JyNTNXQUlhNUpIcFBtMmxLRWx6dTZaVlBuMHc0NHNPeDVBQXZQaWdKZ3AzN085N1RkOEZSY093T3F2WmZ5WG5vd0hKcWpFR3dyU0RVQWVkeVA1ZmFwZGEvb1drVEJJbWVIRFhlUy9DbFpFbzBSZVFYS25FbEdLVlZkTXdxTnlybVY5eFFaczJkZ1FtNlpoOWRwN0tmNWZWTmJUUEViY1lsaFdhVjNFWWE1TkxFbm5nbmdBb1U3eTZxbEszQ2lSZnpCdm0xZmpVQzRhb25XSHFyUDFDbVZTSEg5eUpVK1NQYXc5QVdPTDY2YUd0bkdqbEgyNVVnQjVpQnN3cnZhblROYlFLVU53UUdlQWcxWTZvREh5Mk1VZUJaN3ByY3NKYkZqVHBlQzNrSDVTeTQ4cjRjZk5XNHpNWkxEN0UwWEgwTmNxNGFjLzBCN2hyRFZOTzVvME5iYVd5RFhMVjczQ1hkNG5rRlhhZmtRb2FLWEIrOHVkckpHTkg0SDcyL1YwL29oVnBvb3pnM3lCWGhvRlE1dXA5WXVqWExHdHpZZkw4dWt1bFZERHJrOGVaQzFZRTJha0d6czdzYmNzMEQ4OWFCWXRYYjlPOVJtSW91bDJTajRaWTMrM0FHcVg3ZlpTczdnY0NNVjdnSE9YRGJaMjNFS21Namw1N1VqRmNSQTg4NncxZk1ZMGlBNkI2aWF0U0JmOFl4SlFWaWh4QWFsVDg0ZXhHSVROK1ZLdGUyOFB6VVRVRURPbmZZME5jN1RWWlFpVjlpemdNcHk5bmgzYURET0pFb0VyM08yRXgwRGVhVFMrdW40RW1sdVFVWk9tNTZjbG1ZM0NHeWU1ck43V3pLNXRKZHAxMm80RjMrQU96bCs2VVh4VFZHdjdOenllSmxPRkVrY0ovQTVFSXpWYnJNN3Z1SFk2L0J5WUFjcWpSWk1vcnJLNEcxOXRyQmRUTUczbnNrbWZUUnpGRmRrMCtkbDNEektLU1pyZzhQNXVHdVZJQVp4cVl2YmgwdXpUUm9GVmNVSTFzbVZId0s0VTFwSDAzK01YZWoyNitNZXRTcFQwOUZFYWgrZUJNUXdYbVVSU3l5dHJMN3RGdHFLTmQrTDVBa3cyQUN1NGVDT0Mrb0pseFVWMnlYZEdaZ1N2Qi9VaXJ2azhta1pQejhUTXJHcFBpbG5NRUxDZk9lSmdSUTBXQ2R6enFRbmViMXZwWW56UWxQaHYxa0ZXbUdsKzY1Nkp5MmlackxTVHdCZnI4Zks5eFc3QWRMY0dIS3RIVzh5YWVuc2RSQ3QzNm9vTlNwMFNzUEdLZDZaVDVNaXFkeDczVXpKMFBRNGVMNFQ4UEFZSjdhb1h5WjFxdkJZMk83eENka3VQYjNxdW9nMUNWL21oV3V5bW5Lc05FZmVJelFqeSt2c0psRlQ5STFRRlRZK0pza3dVVDJKaUMyVTN2d1RPSHgxMWN4dDd0akhIcnZydEFaYlVWa0F6eUxybWJOS0ExcjFPM3pGMWlzWWxJTEF4THdkMjZzL1h0ZllVSDMyVjNqNUY5QmR1c0ZtV3RlY0RQU2VUS3AzL1dTRnZXZUN3NU9iZEoydU5IZXJ4NllRYll3Ty9XYTd6WHFHS1Y2VGNnRisxbXhtTDJ5S2FjbTBES1pBaGpyc0dBZ2ErV3BpZGV4aGRzd2hBbys0dDlPKzFGcy9qZ2Q3b0xmUFgyVjQvNWY5MXhWbnVSYWlzaFAvTklUclo1TndTMVdWNGp3OEdmMXRndFhPQVR5VlhtVWxEeUxDRFZlbTRDelZ5SkdwUDNxRE9CY3h0N0lFQTM3ZW9GeUZKSTZqNHBVMGZtQVZ1WTVwaEhUNTJQcVNyQTdoUEZjY00zeHpCdFN2NzUrU0dRMUdBbUh0TFlSZEtIdUJHY3dlWGpXOXlDeU5sWHo1Y01pdWdETnhDN3FrVk51d21JbzN1WUtYUi8rSkhVUkZOVk1YU1BrNHZYWmE3bFZkQWwreDV2VElVenpXQ2FTYjNIWXhLdG8vbzJvM3NDQW83OGZyVDB5KzUxb1NjQmF2NTk3NjdDcVJyaTNZT0Z2U2hMcHJGOGpoMEF0aE1STXl5cUZHVE45amQ3Y21RTUVtSGxwMEtHQzk5OU9ydW1JY2tuL1NWWGFJU0liQlRiZ2pxdUdVZnhWT2hqbTZ5bno4dlI2cHRMdFowMy80TndlYmVreDk4cVhkSWlIL09udEdySXBuK0Evcmw4cEdkSHkxTGtGQitWSlhnYUk4N3hVU29od3lhUUU2b3I2OGhzd3RoMWd6VHo1aVM5d1MwM0NiQ3NwTkViSHpWSmtMeG1ia1U4SHdETUJRSDRKU2NBbTlmamFBbXh2QXpGTThBb1dScStPV1drM2FrNnhGTWlONGluVVl1OTJ3ZU1EaHg4akRZb1didUZoR3lKeHdCUE9QdnNJQWRROHZ1NHVYclB1bUpxcUxRZmtobEtKc3UrTDh4Q0tVQ1NtUFhqZkIzRkpTclRzMzFTdWV6bGFlVXRiNmF4Uy96L1lmTElsRW5UN0lTWVc4Zm9MRmJOVnYxZnVLZkEzQjh4bTM2ZXJUMG5pb3NxWFZ4SG5nUUowZzBhWk4wYkloeEZmUTB2VTN2TjJuRWtXRGsvMVdRZU8vTkI2aFQ2RFpiS3Zybmllak53Vi9xMDRrSlhlNWZjVGpZK3ViMzRuQ2FyYXVPQ1dDMmN0SUt2MFFuV3RKdWt5S1ZvYmtkT1lwMWZpM0NVN2wydHY0bDFZYTVRVlB1a0tPTnhnNVVxbklOT0poZDlsSWJlVktYOVp2TDdWczBRVk9FdXFCZ0ZMNWptNG50QURNRTBxVlBxb25ETm5pVlRMM3RrRC84SE9hM2VMRFJyUW5wNldnaUNNb0RsYU5uTW14dkFJMjJtNFc0TVd1cEljTEJpK3o2eEZWajJqRDJzaGttQS9aZDJsbEdZemg0WGpKck5vQkFHY2psa2lmRXdOQmtCM0lLVXJPbUVaOUk1REZ5SWVkb1RuSHhUK0tqdVNNaXduam5ReFllekRueE9BSStSdEZldU1PYW5VZDdOMDBEbFg3d3BJMnBDYVhyeG9mUHpPZHh1QXNIcjM4aGNObHhwTXk2L1NuL3BvenZiaHA2NXR5YTFTMGNuMXdGWjdmNjFDNE93bi8zb1p0VE8yQnNUTkR4dzY0WUtqbTJNN1pBRkRvbFdpQmRmanlHSnZjaGkxM2RQUmh4Z1haYWthYTNxQjgzYnJDS2hCNit3K0VkKzNFbkxXU0loVG5DT3NwcmVJSWJYYXpJY2NPaUp0U3pzaENGT1EwQ3FhTXJHeUYrQWV6TythbWVSc2g0UDF2OHZrOFBWVjNtcFJVNmJjcE1EMlhvZ2JFSklQamphbUQ0ZTJuZkd6NStvTWYwL2REb0ZIZEZuKzE1SzdjVG5sOXZKOTN6cTVUaG00aG1NakZpMFBmUnJjNjR2SWFOWnlSa0p6VGxMMW5DWlJkUkl0aWcyTVA4Y2hzSnM4dXVDODdXSnZ3SXlSWDZ3TlhJakhhdlBzeDZ5Yk96cTVUblduWHo1akpaK0VYa00waE1ReVdKclROZWcwSFJuQ2wxeldBNkEzZHZvMTBWUWJRMGlQYUpwaU51OVozb0RPMHd5MnVZdURncERmUjQxM0MrbWpZVWJLY2NhakVVQ0NPazZRaisrZ1VSTHRZb0N3MC9mQzJiYVg4bHRWbTF4ZnBVeVF2Y2hHcjhmc1dxYUs4eFdtbC9hbytDaTZuSlJtcGxxaSt1czhVRnhLbzlRbDBrSmdEcWt4RDhxbzFlNVRDQStNcExQV25GUUxESFJpbCsvaVNuTUZBRGVvWE9VdGYzUGFMQVVhT1lOdUdXVUhjQ3FqQU5yWkRyRCtLRHRRQW9uNFpRRFlrUTFBd0VGRk9oWTR5aXcwci92Uk1qRVBlTlMrS3RXay9wdkVRQ1VEc0dIT1Zoc3djdFcxdTU5UTd3bDd0ZHAwa2NNa0RhQ1dkZ0xKWDN0L3JCcG1VTElFeDlPaFRTYkd0Z1E2cjFKRzdoQXVvcGNRdExFRGhJZmxBU2luMklOTUxHUkh6b0xwV01qWFAydXNMdjNMSy9Xb211RFd4RWp6eGgrS1doZmVaVVYwR2ZOY21RZHZrQTc0b0NzQ2ZmQStjbTJuS1V3ME1uWEMxY0ptYlBncFhwbkR2dXRBeERwU0JHV0NCT2NScllsOVNkK25HWWZvSU9zT3Q5dUk3MkFWMG9nNVl2MnJUTVNMUUdXSWFxblMyQTZYWGpSU0tweFkxWDZWU2twVnZ2L1NBWmVIUXVCMTRvREE4Snl6VjVYTU9NUFVxZ0N1Q1lveDVEb2tIL1RUeEJiaGJrSmk2ekNsNmZvb3FETnFoQmNreVNvbWVRVE5OVjlxR2hrOUVVUXd6L1VGODZ4OW1Pd3c1dzhEYnBzeUpremVhVlhKUmRndW1sVFNLbGxwcXJObHZrSGMzZUtpWmVlNXNnMHp2YnA5a0VYUlpLVjExdzZvY0NNVGJlM1RQWExUN1FpSUtXZnZUWTU3Vnp3WC9GMEs4WlUxaW5JcDNodW5WQ3dZdlUzSzBZaERpZC9qS2xRM3BocXR2aTRpUHNERUlsZFNkQTNWSWxiMURCbDZSRW5PNHEzZFhRanRDUm42eUNhL1JjQkxTeXQ3T0gvRXpwZktzTkdsWTNuUGpqN1MyMFdHajFEV3hTRk9oNWJtS2t0ME5oY0Z0SnQ4TFJtS0RJNUhkYlZ6Q2VqYzRDL1hMUk5ZbGlJc3hKZEkvWXkydVE1cDlpa21KcFFhQ2o3bkxnUGFraFlXSEZGYnVyYWVVWlc0Uk4rcHVOM3hJSTZRMjJtdk1SNi9mRG1ReVBYNWh1WGdYYXhJWHdtaTRpbjNzUkEySXZzNlpyQ1QyOEljbDhYcnFHaC9MdjF1OFZsWWpORmxBZnRQbW5MNlNGNFNWSmp5cHpYMkR4SldvVzV5QThrUWVIVFVab3VINXR4aDFRYmV4VWpuaXI4YkJLZGlubkNWZ0VNbEpKaURRc1ZJZ3pIdkhZSG9nc0kvREZJTkc4VWthWFFXMG9nTVdTRkRFQVp2cFBKQVRTSTVXUFAwa0V4R1NwTzVJalVGdEszZEY4dnI5cHRUa3NkVnlHOG11dzd0TWUvM1BvZkFvRmJhMjExMnlyVC9xR0JQcnZaMDhDSU9OMW1DeHU2b3lKQzFucXRlcVcwSlg5c1R1RVl3R1NqQU5PT01XcEl5QmQ1eklDb3FFU2Z6WDk4bE1EUWlzaFlGRXllQ2VkNDIwRmsyVFpWUnhvdXlncWlrTHhPUEdKSHFlL0xjVlc0ZVhVbnJVUnVhN21mU0QzUVBhK0EzWlIwU2lzTEZGdzRObmlPTFBVTkRHSEcrWUk3VGZlc09Pbk5tcDFDd1pkeHpVM2RvYmlOcUl4Ny95VkEyTUJXZTN1VnZ5MXZqL2MrajVpdkxaVU5EQXBKN1RmcUFzT1phVWZOa2FGbGp0dFhvVkxNTWdRYnpJMHUySGUwaE9aUTRXMXFWa0ZWejBxeVRqbXNXUlVwSDBYZnZuODVPSEhWVmZlWmdTRm5PSDVGbit6dlZkYjF2ZzdublM1ZERWZlliWjhybXljUmlHczhzSEFxRzI0Zm1qRGxiMlVSZVdRN0Fna2RaeE5GZ3hUYnRmZ0YzdXkwUVdHSEVuWEtGQ3hsOFRhTEthTHJtYzUxWHFiS291c3lnK2E5dVozL2RPaEdJbFRyS0llSWJWT0l1aUpZd0w4N243MjM4cXh4VWhLTE5NRncxWVBPclZKcGx6YkFDTHdMSkN4RWRjb3hTY25FVjlCWFVCKzYxcHFIaTB6TTc1U1pHNVZ1YlpLWWlVR1RvbkI0SGtnbFA3VFd4aVVWRm1ySnJBalNYaXN4a3BJZUxDaUc3a05ua0ozY0dRR2JudHZ4MVlKZy9VYTZrRkJqQmJlcVdoOGJWMmFSaXBrMWFpditFK2FjMnRxK0t4ZGw1dnU3L3hOWWFwM00yc1dJZk9xRFBjaEF3NzNuSlJORzV2aVZoWExTZE5ZWUJ2UFg2Zm01N3BiUjIxbWtxMWRaMXNLZk5xYnRyT0ZjQjgvaDExSDFNdWFaTzdLR0ljM0xwajRQV2pZQWdLRTVCTHo1SmVvVUtxYVYvcExyUWdPc3lYT1QvTzV1dkMwT1VHcEdROHV3V21FNVZrQndwOFRqclJKL1VCMEd5alhXd1Z4UDcvc3NwYWl5NzA4SnZJQ0dVMFN1M202R0FPU1RxZVJabVptVUI0WjFTdFplR1Z5UzZCN2F2enhKRWhESHBrZVNEb05VNGhBTmcxcE9EUmEwdDB5c3c2TE5nVHUvWjhDU2dna0dpeHlEOW5kMzlRVkdFRHE5bWNQZ2RsMkpSOFlwbDU3ZGR0NWphYnphVHhsUWRNTVdiWUR0cWd4YmV2SStubkp0Um0yLzBPeFplSFptMk1QN3FYL29iOVRKNDA3OXZjQ0RBNUpLblNRQzBlcDdpcG9BUFNCb1dzMWxYRFZ2MkluYnJHbnpJeU5lSmd5OGlVRk1yUjZINnpBMzhMNGYzMytxSjFqb0JHdFRNRlVHcGdXaHI3ejN0Lzc1bDhIbXE1bzdkMGpMNDhyc3dDL2dvaXhhbEdsN1Y2NzZSdG15NUZQeittdy9PRXpIN1FIUkU1K0J3Q3dWVVk5TlZxVEFGcXk0cWlmVFZIdEJGSUliZUtHeDJEMmQwSFlZNmdPb1NrdUE4cmJoLzA1UnVOaXU0Nm9talNwYVZQVUM1VXZPMTBLUGpZL0JxcU91UDRTbVhEVXlkVVFDV3h5KzZyTEFsdUhxWVdaSnIvREY3aEN2Skx2N3JpKytnNzUwdEJXUjZKMEs2YURNd3o4T2g3V2hGNmIrQjlvdHBOME5vQ2h2Mk5lVEpVbXlhbGFqVDRqS3Ayc3V5SXRRMmNORXhJYUk5cGRLMW81aXo4SmFWN09hK1ZyR1FZNzdYdlU2cTdySkJ2ZktNL1p3Q1RvVXJPQ25IL215c1BNYmJ5eHdXTXhscUJuOCtQcmlCMkFZYkpxVmRPV0hHcy9NZURmMHY1VWwvVXhDQy9JRTB1bkllNkk3UklOM05WUmtiUFpGODNrK2oyanRxUkU1M3dQQ21NdFljbzczM01vVWh6UktwV01wYVVPcFIrUXZqRk9hM3M5bDhnZ2pBYTQ3alU1ZnZRbWUrMHNBKzVIN0dOamdpYkNzazZIQVVaTmhIQUZPdkdDaTlPeUNHWHA5R0J2cTRYdENJZDVuQjRwVDZFZlFmY1VIQXRjaENVUkpYcnRXWjdpcWp6ZnkwNWtPbkJMb1ZCbUxGOXJnVXRoWjU0VWcvSTBmaFJCekQ0dUNIczdxOFlmaXlVNjBvOXB4RFdVR0hOZkREcGxydHNhNk5nZlpGMkQ1RWhJb28wcWNJaUJScVFxRUhEdTZjbUE1MFpKcEZuVml3TFVSTUxxQWF6VStua1Zya3BGUUJFYzVIN0NrVVRWMlZOTXFHYlpReEVpOGlDRS93RDhZQUhUelZIRGlhQUJzYlg3YnFZdEFyYTQ4Nmo4bGlKT0Jlc015MnpOdE1MNUZXWWcrei9DVmNUakVKaU9DS0d6cTAzdzRKeXBCY1UxZ1IzNlQ1NUFmUzNic25hdmhIUFVyY29ZRGxFSks0QXkzSGFkYUdwWmlyVHJFYlFiU2krQlczQjhjUE04TWtONmhsQVVXWmp1MkdjNFc2cHpKLzFKK1dReUM3K3JSSkpRRXVLZ3MvUlRlQXZGbjZwbzFFcGN5TDVzUm1SMzRNUlZZL3o2bjZraWxUZlhqeTlwMDR1UDlVMldmVVJTMEg2Tk1wK0Fqa09GdUEvVlhHeGJrUmh1TFdrdjZyUGR5dXg3R0RwMnJ2bHpleFNJTHRIclN3R05LQ1lNc1I2QnV5aithNnd2L0wxQktVZjlsT1VNOXdGY1JsKzg4UUNRaFRTRGhndHBxdlFZaVczbmJlMmhyb1lDaHpGL3Z1Y0JJOHEyMzNuQ085T0FHbUJqclFPZ3VzbmdYY2JycXA2SGp1N2daQjRybzd2UlU2eHdWd29NUk5JWWx2a2UvaWZ6cTFKZlEwa3hLSTdXblJVVjFnejNoZkFORG1oblpDdGRUK3luTHIyRTBwbUtRcllGR0tHU3ZQNExFbkdUY05VbndvaDFOSUgzbXJKN1RRb1kzbHhBZFVNbHhaaEFFR1FIZVRrbE12dTBrd01wM3pjOHRmazVHdXgxN0ZacFZhL2thWlZzTGo1b2JrWHpMWk5Dcmg5YmNKNnhpeEk0cTgzdUgvbDFJaU95YzFhWFFyQlFWWTlmOXdWWk9wTnpqbWNXeVdZRXN3bG9ZNHV1ZmlkOUEvUFppbTBYcFRvY1JibVJLTWlKcjdYb3pjNlZZNjRQMnpOK3JRSndkc0NhRlZHRGpOVVNsenh3WjhlVDU3MVplN2RFZXRGTHR5TXNwM2s2YUZqMFlSYWI4NXlseGVGNUVTQmtqQ3VIRTZJZmo0dlBGSWNOT0phWWZqbkNkSWtMcWNndjN4azJEcmlpMTk4L3pmV1FyakJid0NpZUl6dHFWUFdDRTdsamV5OEFoSVZVN292cnZkakVZNGYwVVVtOWdPSjg5K044VXhJWWZpRXdiZFJLVUlyMXQySENGQ2o1SEZHY1BocXppZnV5U1pjZ2JhWC9ldis3TUpiSS9ZQ1hGUEFubGxSaUJ1U0trWVk2Tk5SQ2t2a282SE04QU41OUl0V0FTckxVSjFVYU9ZM0N1R1pzc0g4WFI3M2xBL0k0dnJISFJab2p4ZlR4ZXFKc1RHMGYxYlpkNUlzbzNyVElQMjlLbmNJYUNPTEduVzJYaXA5Vzl2QktoRm56am1jOTEwdGxUN3YwOXFHZ0kvR3hNMWRwUzJxSkVyS3VUbzV1dXBoeU9jTXpSbVBVVXRKbEI2VTVPRWtOK0dJQmlCeVBJVzQ2ZTNmVjl5T0RRMVZyVmtxRnFaQlpwWXd4eTlKQ0hQWGgrZmhoaE5TV2lZWnQ1YXVUT0FFUHBvanYrc09YS3VQOTF5b3gxT0pRTzBUNmJKTGhVY1pOZWYxUHA4MG10K3c1K0EyVWZvcm9XVGowbWJkaVB0OWFsSGtiT2hENGhOM3BOQ0o4WEFyUlM2S0ZKUzArR1ArNXdVaTBVL0p1WEtybGdhaWFjUklOMFJzaFo3S1U0TS9MZTNZYjRrT1pDdVFkd1hxRGh1emNpVkFDYUpYOUdlSVNubWRySVcyOVN2SHgvdTBML04vWXI1UEI4UkVYZjR4Tk5hUUx4UW0ra2lvWUVYdlZkRis3cW9pNThvcjc5TXZaS01aYmdEMk5NYmUrdXVEVlc5V3BYRTcrVWFlWWlIV2dLdW91QXhSY0ZxMFJZdVJWcGVsVEJxUFJoeCtidnFTZ0syMUFZeTRRcExDR1R2YTRUakhiYVFUUndFS2JFb1lEMjdiUU45MWcvNGl4d3FwZW9YM0F1V2NtbEFFUnBwcDcrU2hxVXRDRUlTbTREdEtNV1NMQUZDcDJmM3A3UlU4MGVrWXhSREhyc01DQlBGQWVyWmJiUnZtdnNkenZpbVF4cFcwc0RENGR2WkZzeXQyREJmbXlpVURRV0Eyam1xaG9pVU52MU15dVQ3T281VG1SaUtJZVl0RGF6c1gwUHBRK0hmYW5FY1B4eURoQ3pqaW44Q0p1dE12cHF2OWl3QVBHUmNaVXVZTHhheFRZVmZ2ZlBlNW9mdDkvNFZSbWM0MnV2RGVZYitrNjg0UXljWG4yMlo5MjBoQmw0SHFyUXA5NWpYaXJoYWxiRk14TVA5WHE5bXd0WndVTVpCdkpGTWZlMnhpUDQrMk5ReGFYcGl2ZWRHMzhSTVdUVHRZWHpFN0c2UlBjNWc0RU52N1VYbnExNjZDdll4L05ZcDBzdTNubDZzQ3ZsRTJXU3V4TVcweXhIMzlaMU5RUlZFNzdEcDI3U1VRRWo1c3FWVGpzeklBTmpROXVDN2VXQ2RGUHErdVZ5YTRjSWdRS2FyNFovRS9NSkhlTU5HR0xpUWNiNk5jdkwyNmZXTVJDZWo3UzN2WllRdk1FTHQxTHhXMytTWHZRZHpXWUE1TVBiNHgyU1EzV0tlRW4zdmxSazFXUEQ3bUltNFhrcjRrbnh5ZURyNGZIY3ZVNnZRZGsvbzIzSnFzcXFlRWRucjhGVFUxMXh2bFZGMFFJOUx1TG1pbVNDWkpvQ0xtaWFVK0YxdmoveUFNOE9ncENCTDZPT2hMa1NlZ1V0Q2ErbXk5Z2wrVnorOVBmd3lZb2diRVdSbEtlVC9QMjN1Qk5sOWxmNTV5MXVVc3JlOEFxQVdCai9KNmtzWnJVeWxWSGVnTndHbXlmbzNJZlBmdTBnQzE4cnptdVUrck9LbWJ4ZXVnYWNRNHIzb2hxdmVQOU9pT1JHQWlmMWVlWjdFeFZ4T0NjU0VWUmRWSW02WnJtY3V6d1l3TWp6dXZlY3VxTWw4UUkxdzJuY0lKcDBSTTZFdDd6N05Dd00walorMWlxdTh4ejdPS2Z5ODV4VzJBWUtOWGFGcUJRRzBEQ25tclBwSlBSM2JiTXlkUHpFZ21DSkpoSG9ScmFMcVM4UnBoYmc0bzE3THczN0VONUE1b2MraUdOeDVFRzBBdmdTM0ovNGVRd0R2Y3hPMkkzaXl1MGtpeUZ6NUk4RVJjZzRIR0wwRU9YaytDN3RkU3N2d21JTkNzZUVaaHRWMlFhSzRHODBvRVF6U09jWGIrZXU1SmZqS2V2YlFOY3U2UzIybW9vOEtWaGR6QVVscTI4dlY5OXJBMWM3N1cvaGhGK3lKdzVXZzg0dXlLS3dpZGtLSVRjYzd1NkxFVXFZQzNVdXlPN1l2Kzg3bnhUb01wSDlqY3FXNTlVU1RjeGRhYjFOK21NbUFIVS9qNG1rWDAzU2dzcUR0Y0lHeXpYY0UyVUhvQ1FLRGNWbDVVM1ZDR2NtdnFLUk43VTE1Q2ZrTVlJSjhwVUZJRXdiZ1h4aHV2YmV6bjRtMCtWVHEyeDNRU1ptekxOc2tMbUIvSzV0ckJCTUR4MmhDeWFlNmtGK0JTamRNOWUrOXhoYmJIRTIwQW5oRlJVZVpXLyt2bDEram5YT0JzcVpvL3BKV0xBSkI4bVVxaEZ0b3pQNVlzbnFCUGZWNnBkZXd6RVRaTHBkeTdWOGNHSXoxNHBtU0RRY2NrWlVqTkVHa2Z0MWlhckwwb3RxWTJBc2c2eDBrem5UcEE4OVNDbzFCMUVJM2M1Y0tLZzN3blJlanJNR0c3ZDh6SFBraWw4WFBIS0F1dHhwdW81UEZKbG1VdVN3RGwrbWtmS1Rva0ZoMXBFRmc3ZHJLLzBkRG9rYVg1RGsrZmJlSzhydGp5cnFmNWl0SDd2Z1NZZmhCcEV6eVhkaWlCY2FGWEpaYlIyWnBMekdlRzBoUWc1MW1kNTMzNVlmVVc0SVJVSklxTmVndGRhamZHMnhKTWRtN3hkbEg1dFI3ZDhnWFVtQjluQmlldmsyNWJ6K1pCcis0QndHUm9iZmtobTl2ckpQRmRPRVJPbVZVdEF1c0c1YVVJMFRyWkNnZCtzb1UyeTVib2lCeG9xVDAyK0szZ3pTcmZXaElGb2ZJVmpMbXRYbDFWc04yalYySlRTa1BQVWVPbFVCSWEvUVByTW5VLzhFeWNxdFNCc1NqN3prcG1jbko1RGNXc1VTS2g1NkorMXlSU3FXenlDclBZZG5QVllSVlZQSThlUkVmTkhqL1JtWFJzUmVoaWZKVi85dzJyTDZmWnVPYjdnNFpUemZJbHluRHBKWk9IdXg1NE5LNnlDTlBGUUZXYlBSUzBWQ3d4WmwrNXozQlNJT3dRVDM4WWluQTZidE00aFkyNjUvQi9zR014dW85K0VjUjlJdDJPL0lzSllYSWNLdU1qK3VKM3dHYzQ2SC8xR0ZqVlJQZU4rTCszS2ZmSjQzTDRkS0NiYjJMdkZxblBvNldNQnlwVWJtV1ltS3hDeFp2S3Eyd3BKQndZZEltUWZIZU51d0RSa0VaMHF0Y09samNqUUNsWGkrMXVKZWRqcGgrYzhXZlpsdUI2Q1doSzdPTU1Fb2V6VHZSZFp3ZTVYa3d4ZStmcmNSaVlRVWtXWFpwQklwcSsrbHBiNGoybXJhVkI1NTliTmUvVmgvYVY5NVJsTmNpVVZzVlN4ZDl6ZzRlT0FYQmxvN2FyaUp3dUo4ZHdJb1lnaWNFZ0FTUEdrYlFyZHNjNUM5UFVHYUs4Snkzc25ldldtd1I3djhxSnRLK3B1bEVyODRoT04zWWs4WjhuVjNFaUJZTVVKZTd1K0QrdTRYb05KOW93TVNqZFJJOUplMXB2cmdWRnBlSCt5U3cwazhOMU5JVEltWVAyaVFRblJ0NTRDci9KSDJFanNUTEUvWlRpUllIT3dUOXVkaHgwUDQ1ZHExV2hRb3IwUDhlTTZKMDNtRVcwSVo0NlVjQmZQVm5IbS9oVmtnL0hoRVZHcVEyVEN1Z003UW1hK3VkQlYyT2l1MkdVQ3VWcnhjc1J2NnRab3VRWjlheUEwR3ZoWUJFQ1NmdlVjUDI1TUttMU5idmU1ZGNzVm5IdUhjTTFHc00wQUVoUitpRUlTZnl0R0JZZGc2b2ZuL2R2ei9NYXBtcTlCSEJqUnB6eWhSSU9vZEVNRFFRL2ZBR09XZllmRFptU0ljVXN5aGdidjhTNFpXQkF0c1RCQnF5Y0l2UFIyNjZ2R3BJa3JIdUUyOXNGZk1pdDkxTWM2YmQrbUFDWjVRdmtOOHhLd2hiUGNOc05DZ3lrTGtneGpTbThQVHhTWEc1YTFwK2RsUmxiMHQ3VUcwTGdldlViNEkreXVJTjZ1bURoTVVtUlZ4clZmL1ZWNlo0UWE2UENLWVdzbHNPcnZneVBpdkhoNFN2cVhvNG9zenRTQlkyUUNscXVIL0RwazlTQVE1WjZMUTdnUmZocFNjaGZDZFVDdWNJNGgxWFJIUDA2NjBLNWt2YUI3N1JTWGNiU3RVWEFvTlVKNUpCWU1XMiswUnJwcGVMejdTdXQ2UHhJbWNRWDlFVGQ2SUhuZmNnMm04QVR1UEVObXRodzdveURvbEl3OTRyS3R6NndxU0JBaklZemFtbGZScnV5ZnI3WGJ0M1lIVTlEZjN0Qm1jczdCUllGYnpqTGt5TVZZTDVsSDAxUGFxaFdZRXl1YUdCMmllZWZxelVYK24wOE5mR0hXaEYxbHprdlNzaENodEpCTWhld1JFWWY3TFpCcjcrN1B4NzZyRDNsSUVEMmVuREhIOWRpY215RERoRGxQZ0FudWQvYVNpL0Q4N3FwNGEwWkFoMlk2REJpQ2xOSUNtZWNlYW1FWFczVy90dU1jNEx4VERYbHBRc3RlUEUrODhKMElCRmlYaVlhMVN4NERDeU5JUUEyai9ibU9LeUN6UzNzKzdCTGxodkVLTE9YNE5oUEp4QWtrdEExMmFJRUtmUUpHZDFDM2w1ZjdDQkFES2VPNUZhWWVxbFpWak93bUFFWGUvNU5SOXkzNmxLVFkrK053cUVTY2xLL1k1V3N1QmRBWHF1R2Z4cHVPT0RHaUNROHU5eS9rRHV6RExQT2wrbFBhTldlZU9uR0NzcVdBOFdiblFETzZDMng5MGZqZTFTMU91eVNKNERsSVpWaDZZY3hXeURsT3d3Nmt4Q1p4WVNBd09oVVU4aFJuRnA3RzdqeXlSQ3RoM3NTRnU4bFA1ZklDNXJnZVpnbkVhc2dneUlaVVRscFI4dC9PbHpOc3RLZVNMenI5SWpXbnN3V1RBL3VrQkZnaVBDZGxxb20veHJmNktGdm54WTlFTmpZYmUxenhodWlZUWd2TUh2U29FR25MRHJrVkNNMTZCeWlkbkZBbFBia01jWGpHdnpXcFBBS3lTVWhZVGQyUXVwZWt2SGFSazR1MllhMlNVcU4xN2FUWjUrMGRiREhFQUV6WmhTZ1J1QW9pZDhyaEZYS2RhM3MxSkdWbWpXclpRMlBwZFNQWnBueHdJL2VJbzExcjdpTkZyRndmQ094em9IVTJlSXFmNE9mZWZDWkZZMHBqMnh0U21XUEpETkRHRnJ3dVpVNC8xNmU4V29OL1llMUJzNnZIblVhdHhDUXM5WDk2dnRHTm5PaEdFKzd5T21tTm9XbEFRbGNwZHRZSHNRNm1TeWdaTnh5b2ZPdjI2SjB0S01MWXFKRUlUNVNlMU90TldSd2NMQTJpMWhIUUU1TTJjalhuYlV5b2xOMUp4clE1MVdOeUdwT1JkRmRmSEl1aTN5NUh1MThva1NVak9heFlKVTNDNG1ac1oybFJyRG95U0VmMTJDeVo3eld3NHpnelJpeUl1dW1nV2tyODlzZXN5SDJFQXR4VnNraHNablVmdnhNb3Z5S2VrOUNZS0hFTFZ5TXVuWUtOUDV5NVFUVjFDaEdIUlVCMFVsZW1LRURMSENZYXorUnpmSmoycEhxT1BWZFB3cDY4YXNac2RrTVJuZjBRckJvOTZ5SStzck55cHU2OG1ZNDRZL3lCSk9SK1RxY1JmbXNxTllYeUlqelFkQXFTZm5HWUNKQzBrWEdlYkVBcFRQY1JxaHo1TDB0M3ZpM2NVclg2NkdxUVlXSU9sUFFPRkZQd0xnVll6Z20yK2VveVpPck1CdkNlYlQ3Z2p2OVJlMXRlYzZhbS93UG4rYUtXL3h0bzQwMDRrR0pZM0JsbXdtM2lGSnl5RWVKN3YrbldZZWtrL3U3OEFqcGdMUFQ1NTFqaC82VG94NjdUQ3ZkTEw1ZGRlOUNBeldzWWZpRmIybHhZUTd2UitSLzVtNWdlcGt0WU11NkVqRTlRbmUwaVVwRCtaWk5aT0duTm5PeVNMWXYyS1FmS2xjbHBmSzhCM2l4WHU3M3NoWllwb21TUVgrMUxhSG1SSUVWcVJIeHc0ZVFjd0wrQjJmclVkVnNrRnFvY2g5dVRRWGViQWdvRExEQ1J1TndIQVNLQUxmR1R3MmdmTmFLWHhPMVMyVkxSdGV0cWgvVEVaeklXZEhLc1hkY0ZoK0F0eGEwMjV5T1NVcUY1dGk1N2I0S04raGY1MW1VS29RSEJlZmI2ZVFrVG8yOGZNbGtDaTQ0bEdxMDF0T1p0czV6YW5yVXVQcllGOFRFRDJBZjk1R0FicTcveW1RQ0JzTytCK1dMTFVyaERsa1EvZXBZZVgrUVdMMGNMdWVPTHR4ekZoNi9TdVhMWTFMSzF1U0pnQmc0emc3a0p5bnk5Yk82YXRpTC9QMjB2eGxhRWYvZjcwY3Bqb1l3L1pwN0VYL3Q5NlNWWjRiL3FVTWNzL1lvZWdGL0hsaHRGM2hUbHhpUWxUbzdoWDRPRkJPQnJIOE1JS0swVjNEOG1NdDdQMElWZGJJd0UrWXBYOHFnVG5hblo2TS9nN2QrOCtxWkxhUDdQdXZkUTlrNkRKU0hENGFnYStFK2xBeHlZVm01NUdSSTl5VUJHc0ZYVGE3Tm5mNTlFendPLzl4dnBUbmpObWp3cThDN203Nmh2L1kzdm9mS1NhMDdvTk55V1liSC90cWlpWnJaYVNzd1phemhYMHh4TC9HRmtYcFFQYnJxb1FOZEk4bHZJWG5MejZxQ3hIakxKRG1tWXlCMEhtc0dPcUpDT1ZFT2dGK1U5SDNyQ2JWcFBWZW4xYk9TUWdGTThKMmcremZHU3NmdDcrMDRlUW1HbTZEd1hZeXkzcTZYbnJuN2o3T21XUjlUQ2s1a3FhQkRuYk9nR3FZNHoyUmVQMW5GNDkyVVR0c2RVaWt3MVJ4TFVvcWhhT3M2NXEzM1lzK2gzY3RsbG9XVmczZ1hmYkdWUHladGVHNUFVbWhVVWgvdU9BYy9FNGhvaXBsa3NuQTRkVUJDaDBzK0Nhd203OHNwWTF6S3ZnRHQ0VTA2SEtteEdqUmRFcWlhZDgzekNyRy9xcHNEcE01KzhldWZEZTNtTWd2YXBUNmtGUnN5VDRGS3FxdHVBRngxVHNZOUxzK2dlTytyQ2RZcFViRklyeVZTdjhVMlFkdjlwUjBjQm5ncDhnb3N5UTd1WlkrckFRQzgvT3lRQW41NmV0S1NMMWR2bmJ3VVc5eG5wcEppeStINTNVRnhESUpCWWRYVFMzRW4rbXFTNTcvd0w5bHZoQmdFY0FQU09tV3Y1Rzk4V3daLzMzSHpqbWU3anZOVjVXZWcvQ2o2QUVMMXR5Z3AvRVN0aW91TWtndytaZ08rdVp1MXFoR0duVUM4WW5CVmVsay9HdkMycTJNZGxTYlBWUTNCWDBWOE9qUnh6ZHR4S3NUMEdsUGNoa3VEWE1IakxlYnlLWmdQdU9wUVByZVRCbU5ud1NVSjUwKytFbXBFSkFSOWZJSlpaMk15MnR1ZU0zM0MzNklNcHVGeFJaaDFuNDlCWTNYVllSaFZsYlJyTUNsTkhtS0RUTDZubktKZDRIVi9GWityYmplNVE2dk1OR0hCK0NQVUlIblFIb0Rlb20vaXNldDBmOWxFbVB4SXVjSVpnZXNaejJad1M2VTZJdi8zL09KN1lpY2VIc3hob0xqeUVXT2RHdkowVkI4YVZmamJJM0pZYWxXbUVRUHZwa1FSdWg3S2kyVEtQUFBic1hSeklvMitBSTNiU3hKVkk0MUtyRHZiS2RMeTlrb0cyeWM2R25nV1NlN20wVjlDVVBnY3doS3lsMGQ2K2Z2cHltbUpPTTZSd0VoS0tyUm5PcUlDUXRrdjArTVpYZTZrbDBUTHJvM1kwMGxwNk5RbXJLcVZGdjlWZXdEVEE3NW1KcldZc1F4TFluZ2ZLQXZzUkI2N3VyaGtvTXF0REJHSzhyQ0Z3blhyeVVZdVd2Q3pWY3JEazNBTEJJaUlCaVpmRzJhSkRBb0lSdW9Sd2RVdnFsZ2lxNStxbDVWZ2VtTERYRFIrUFNTK0Z0cFk3eTlERktLMGdtbkZSN0FoS25FN21oQkV5RjBRQUs0Q2FUMVJ5WWhFcXVjY3N0UnFXbHY0TUNaQVVpeUxpWllOckE4WGtuMGw0OHk1bWhoOGpIMlhRWlVrcG9oQUlkOVo4N2lkS0VJSVEwUkhjeDZnakZ5UE1PQ0p2ZXg4anFPV2J4UU9yRTFtVko4eDNVZ3Y0YUg2ZU5uUDRMamdRWnNhQ1FCLzNUa3prNXRFSUY5OFRUYmlZRmswUUd1S3kxUmR4aGdJQzl0Q3RJb3F0Y3JIaWhhMmdJcjdaMlFXRFZheHpYVXFNMXhzTnVKYVBvakdrK3RvSkJQRXRRTGtMa09mR0ZKNTI3WENwMzIrd0kyOEVXaE1QZ1g2OXdVd0x3ZnRzWWpQSGpwdzUwS082Ujh1Wk90WlB2WDBNenV2eERWUkRKYnhwN2F4UnE3TzBRalNFTnhxOXkweERlaThQcWJKUDVpYzQwVlgrbWg0Vkkzdmlzc1RjWExuRzNZbFY4a2xIQ0IrcEVDbDBRd3FzMEpqUi84MHN6bXhjOVBXaWlhbUhteS96ZDcxTnpaZXRRV3dPT085QkJLVm5VYmdSUnhRVndnc2N2Y0JER0V2WGkzazRGT1hDRXdOQ04wU0lpZnBLWTZUUFV4VmRjdndndWd5TTFVUUlMcEpSL1BLWWdHOVQyaTRJNWhpQnZEbzNvTStZKy9kYTZ4TGJ6dk04b0psdmhUeldKM002SXBxbDRMT3NlSmNKZDdZZUs4ZjFpcWlTMU1VQW50ZTVPckZpQmF5SUpzNUVHeUdoekZtaXJwRVUvNEI0SFRHYlo4R2ZDaDU4TUN6cGFoVHNCZmpjRVZheXdnYzRYUVFkWGJIWlJLVjdhdUx6bDVBOVBoMldZV3BRaVd3blM4U24rcFlUU2lYMXRzSlJheTg1a3RqWFNGVGxuU2dscDltNGZSQXBhYnU5VzlFUFZLWk9zbE9SZnlGYnlqRndoVmZhZVJmakJIWTd5eUNxMW9QNGx1WmhHcWpkcmk0Q0ZxNTRCVmNrQWpoOXJDU2libVNLdi95SXR5YW1Xa3h4ditQOThWNm9wREhxVnhwOVYxTXVlZHhvWm1IWlk5RTQrUkdBYkNLa3F0YnBidys1ZUVMZ2x0MjVzajVZY0czNWExWi91dTdyanlsTXVldWg5Znd2ODJiczE1eVd6dkhSUHpoMjdlTUxGdWp2ZWlGUm4zQUZ0aWFSQ0gwYkZ0N0VGVlBWUzJjRTRkMUdZQjBaZUV5Qm12aGUzREU1TFlycEpBU2ZMV0VwYW9CbGRJaTV4ZFB3YWxsMTJTNW1lbzV1UnVpZ05reVl1U2JEQjh0QTEzL2V6NTNPRGM5RlBGUDZhVVljc0Z3RkFFb050YndaMDNyeHlvMmpHWVc4cFpWeHQxWDV0a1RTRmRrWWhCTjJLVTdXSWpGSWNyUUl5dlliMFQ1U0tDb1REWm9OclI2aUVyWW55YmNxV0ttdE5oenNHS3cxM1l0YjZqL2FUY3RKU2F1NGs5SFBVazUvZmxPT2RNSXltcStWeFpaUmQrTEZlUDZpK3Q1RVlZS2tmYURmKzdPdWs2TzlRZFhqVlo2NThUaFo0VzFic2paZlQzbzFrMG1BOE1WeUpyMmMxN1N2SEFMOG56M3lZbkxVZ3doemZzR09iYUEraEJHSDAwYTc1dG5GbUJKOU1wYTNjYXZlYjdXRkFLSkRnWHlwTzhJZjNVekh3RE83dUpzaU5IajZMRUI0QlNRMUh4RGVKUXFld0s1NGpBUTdjN1dxM3Y0M0grdTdQaURBR0Z6THNMK3NIeW0xODA1cTdLdkJIcHFVU2FxMEZ1U1k5TlFSTEhqUERqOVpaQWpVdTQvdUhlR3kyaGsrdnkyNVkzeVA5c1NiNzRPZzIrMUljSHoyTzNrMkQ3N0pTR0owbUV6V1RBZndJRjdjNUswdzkwQi8vZ01wYnV5SXplL2JzYWtUbUI5VVkwTUwvQXlBWktWQlRZMGNucmtPaTVBSWNkZlV5b0h6SHBsdTRaM2hlZW1qWTRsODNwak80S043T1RkeTZFbjI4M3dibU5aNm1Nd0NHaGc0eHBzTldDa3h0UGxhU3Z2RXVTSXpnVEs0S2kzQ3JuZSs5UlpFd3RUVHpWckVLaGlac3RkSTQ3K3FpNCtad3FQYjR4SWNSYUwyMVoxV0NHOE9NeUJ5amp0MGJLQjJUTVFzcDRtaXFhM09hU2NWVTgzV1BBVmRHbGU2MS9FVlI5d2RoUWJFK0JvWUhQSTE3SHVKQ2JTbEtPYmF4TFR4aWFvRkVLZ0I5TElXUnQvSE9iZkJPWEpwbnk1Y0tGdkpiaDA3alJmOHVuam05aC9zaWtKNHNrZ1VnTHU0enF3ajFTTjZxOHVZNEtKRUluNkZ6RVFnQzhDQ3BFYnVTUndldFVmRzBmR2prNmt1UGUwQzhxVHBLL1E3UmlkdndPY1F5eDF0V3JWaWpya3hNTzhQZnNVdEVsdUQ3VjdUUzUxNExQcDdzYmZaWWdycjY3Vjg5UnN2ZWN1UHdKbUVRZ0tLa2RFQXVSRFlqbUM1WGtmYnI3M0xTNTA5U2FGNWdPeWNtY01vb1hNcnZCQnR0eU1Zd0VVaE9QNUxZd2s0WXZ0QVd4RWp0NUVlYjFLU2JTeGY2WXRBMW1zWG9KVGhFVzBqNW5OMzRwTy95eEhoSHorUEpwNWx2T3FqbnNQaERBWDhwWVk5WUQzYWNOSVFDTHVNOUxVMEViQlB3WHc0UjlHMHF4TkV2MTZDclRHTHkvanp2NVdKVXhTVkZoSUhMaE1xb3AxbDNpZmx1cDkvRTF5dDNBRXJYRU1jRXArNWgvZ0d3a3ZVNmlocHhCc2R3cWNpek1KdSt1cExoQ0RlL2pUREpsaUNKa0dNTjJWbHZvYlV1WDRFM1dsSzJDZnA3N0E0bUJNYWZKTnM4TnRmaHNYckFqMUxGenZHZlJZMGtmSXhFRXNNU0YrNDA0U3NicUlZTUFsRjJBTDJaY25pMzd0b2RkQ1kvMFJxd3hLOHNTRWdwUGROY3pWSFIvbWFycytrekhyWXUzakxraUtWK091MklKc011RlZWZWliSWI0dFFmK3diTTBNRFIxV2JNc1g5a3JDM1VVOE90aGxQQlF3ZEZVM21xT1VBeXpnY0hUa0J0L2djTzNkTzh2UkkwczlnT29nVjl6SzNmdFJpMnRNUGdaNDJPS1FmaFo3c0NYN2s2bnVvaVNTRVFFa1lZSmVnL1V0eDQwbkoyelNSMldkejJ6RzBIQ1N0bmdJZmthSStaQU8vdDRaSldSL0gyUHlkallJVjd2WDlWZ1VoUEZ6bXNlQnhXY3JhelNnaUJQOHZ6VnJWc0R3N2VnMHNOSVBkNFlpK09mUDkyNnE5MzdMMFdEUStYQXVpZ3FrbmpwTS9XT2ZRd2pxQTJaNXdXM1RlWUNCVEl1K1U5YU1HTDdWMlRqQ0p3Z2VXQmlCeGEzZTI4MjZJd3hsQ0VVT0lNa3lVYk83VGovUDhUZmpsVlcxcTJSalJjV3k5bFhCVTVTcnJLK21QbGpVcU45ZjFNUnpLQjZRa2VRL3ZYQkFpdVhpbHpGb2l1TExyV2l0b1hLY2p0c213RVNmWDdjdGVBT3JOT0RuTXliS1pWWFIwbUgreS9uUHZZYm9tOGxWVUlIWldURkFBR1ljR1YwYWRFeVV6bGVMb3BodG1POTRYVW1GdEJwZTFzUmo1Y25BaDBQWndKUCtBRkV1T2U3SjNFZGkxU1dpcXBIdzVMN2hDd242Y2VTQUlLOU4rcWdMdTNOdXB6U0d4ZkE3eUhlWUo5R28wK0IvMnBNUG9zemc3MkRkM0t2VUJQVGdiMi9hMlF2SWd3eWlObzB1T0VVTjdPRGpOWlBSK1hVclBLZXpXZXFIY1lEUHJ2K3d4cGFqeDgrbDFWS1V5Uk1MQ1kzcVZXNy9LeXZEVERRamNTZ3NJdjdSVG0veHRxTnNmK0V0UldkenhxamVKZkhDQjJQWjdveldhcHpWeXhtM3pFbVRZUGhSTmtBWG4rdWV2L0VWaUdFdDB2VGRrYXhpODN1UGdCU2VaQ0h5a2g0VUN6N3V2VVhkVXBvbEVSUTRjVTVseWNLRFAydzBwU1poS1crNEJmRzdXZHUvM3laNkVrZDQ4dWYrN3owYm9ETmF4VmxGR2pJbE84cDhGOFM2cnhJOCtsVmdmZU1wVk1jd1lvZ2F0QXVnaDdQRmxUMXpxaHRZMXVpekM0dG9TbzAvck9lbXN5b09USlNBSFhKcVgyYU9ZcFBSNlFWcDdVQXpRWmV4OXc2TFh1aFJqRld4VnIySmUxUVZpMWZuL1RlUks3aHBscG8xNXhocXAyRXJwQ2FHLzRqQ0hEcU5XdW5xUDdLOHhSeXVZekJSei9OU1pvU2h3NWo5UysxRUI2RVdCSUU4RFRvSytxMEFudk1jZGJnT0c4UFpFWWNlOWVHYWMyWVU4RXlyV0ZpTzF0bmcrZ1lMNHFoZWNvNzNUQ1JCTFl6Yy9yKzBIeHN3R29lem44c2g2c29LWll6ZjAyV0xZeVdoQW9BRGtGL3JQTmgwV1JaUGhyTDJ6VEtNbTJveExIM3ZQTkVWQW5lOHZJWWRQaHU5Rkx5Vi9jQ3lKakxlSXNvMG5SV3hublRMTDBmRFRRVjVBMk9JVkFlWUtqUWYzOTdMWC9IdFc5bnhzTnVzcGhKYlkrY1E4eFZua2pMS1lkRFMzYkxnOHZUTXJEcVNJZnFKeEkrNkpSSjM5MklTektITmlvRHpYQWVDRFhVNFM1YzRkYVlreGtZNkY0VHNLbjJFMjVPNVZBanFTZ2VtMlNvVEdidWQ5bGUyL3RGY0VCb0NteXRjK2dDUjEvWk91eHpPejRtWlFHUjg5WEpPaGE5WXkrNHZXemRPaUU3Z2RNa0JnRExPa1ZHV013UExCbWdvNmJHaUZHRWo0U1hoS1Z5Q1B4OHdzRlNVVm9IUVI2bFVyaE5RaHM4RThYMm9JTUZWRDUwVVEvNG1zODY1emZoejEzQWRBV2RtZGh3OHpUaGl0RlRqcFlBbEZoRWZjREdjdzBVQmpxT1h4Kyt6a0xtdFBTSmVySno2TEZyckNkajByVVl5UWZGS0RkT3JaNEdUMlJ4OG1SUGhVbmlsMTlvclU0Vk1UNklSVVNkUEhLUmVyQy93eFZDTTVSdDVHZ1NPbUxTRmpHNWx2RXdhSXE5VVZLSm50bHNONTQ1K1V4N0ZXcjBoTTVxL2Fyc3NENnNaYzZzZTNzZ0paeHRQUmcxWnJ4dEUzc0RKeEtkSUZlcnVWWnVobGxTeWVLMkFOWFZueXBjK2xESUhlNG92Rlk3VDd0eGI2MWZzL1pUVnFCK3RVelhxK1NjUlhYL1IwekUyNWdQQTducjI2clRYVFUyOVRNRHNBU0h2SDZwZy8vUkhGTlAxZTRMOWlzS2FnSzF2ZjEwNklUQ0xPNjBHSjU3MUcwcTc0WWZUNDM3ZTJaMUpxTlFsRWlzc1hUSFhkU3QvWVhUQTRFanBTS1NVYXZZNlBVNkloWkR1bUZjRWFuMVJXMzFaSDZ6VnRNN051R2w2dnFqSjdTVVh3SHBaV1RlS1hZZDRBazZ1bkUxTDRkckZPOXpJNW5sZkRBVGRYOVRpOWd3ekdWSjAwdG41TTc3OVVTVUtURzhicFQ3bGYrcm05OTk0L2FlN3BXc3NUTmlsN2FzalFmZjIydGFkcXZYcGlPWkxpUzU2R2xycTQ2M1crcFQ0YzY5MTZ0R2EwT2NkL2loamxuak9Jblc2SkUxdVg0ZEdYY1l0bkNFRDROcjVzbzIzcUZUZmFFOG5yK0V2akpNSUNmMERTY09yaGtRWkxPZXhqNWRjSzN2MDErYzB3NHJhRDdpQmZRN2hLY21QUXhIUjE2c1RjSnIzSVdYMFpTV1FPbmlJUS9vcEt6Y3NkaDVhanJEZE8zRXBlMWhiMnFlY3lSYmdCRXNleE1XZzJYZVBoZ1dHdlBCZ2pMS2xGU3BoMGdqSFJLZjZtL0djeFRyRnQ0dmVPUnl6N0xFTkl3Z2lad1FRM2M3cldJKzJ6aEhINm4vc1QxcEp2TXZSZWtNdkFLTW1NRCtUMEt6VHUwa1hIdy80RGtNU2pQTjBIRGhuT3BHUTlkR0ZGTWhtSmJxMTEyeUJWRWQ3WTAwcldrK2RUaHc5SFJmcm1XSFYvOVV4VFBjM04yZ3BONHlseHhCa0czVkJKMXVLUFVpdUtaK1BOTi9xTWp5RXEvQzhqbm1BRUVZMFhuNzc0bmJaMFRzWkgxdjZtMk5uYkFvQ1ptcnY5UmRHelBXbWZndUl3RjErM1psanZXeWk2NVUxM25NbndIekdkbzdEK3VBWVRyUHN2cHhuK3pNSy9wUUNXVnFqSmJ4SFRNTVpkalRQemg1TmdzMSt0cFJjR1k5NWk4Ym5XeE9nYWtWVERBTTRqbEFJM095WlFYUE1tcWNaUVpZWnQ4ZjNBejRtcnJVMVMwTnM1UFZoc0ZWUWF4eFRlY2UrNXBOa0M2dFlKWWJIVk1rWWM0a1FmN1IwazJpc2ErTzJGKzB5L3B3c2pqejFwN1VKeDQ1NDlMMVV4b3ZWU3BnOXYxSGxEK1pUYWJSMS9yMnVQb29LUzRDWHBYTTJlVk5LU0g5VXJpdWZJdVZ1cUhSY1B2RHpNaUEvZmN3Wi9BUEsydXBNczdaWnpHU2cyQTJlQnZudlNhY3NsamE4VkhQa2hQa0VteFFJY0tQSnplNzhGTE13dEFxbDNQSGl0ZjI0M0lRcndOcTd0ZER0dTFONkpFTzJtZ01OZnRZYVdFcWc4N0xXaFNXaWRGTWo4SWQ3M1oxZDdVOU1PTTk3UDBqNEVmSFFPNHlZSVFqczJGRitOaGI1TjAvVlVZZTVKVVRYdlJXZTJwaU5WNE9uV3FYcVpSNFltQ1k5Smxpa3UyUG40RS9vVW5GNlp1SU03NHJzaFVKSXFKQzhWcXVKTHVEZEJSMWMvQVZ0Rk9kZkVhTUJKalNaQ2lMWU9nL29WYkVISE43eWRRQkF2b29FTUQyUU44endWMzV3TnFsQThtTzB3NXZaNktndER3SzMzL1dVVFlVZlNwVTFmRk5HaXdJYmZKeEtlWGV4VFh5RC9WL0c1Z21KS3lpb0p6Z2liSFZRK0hkeEZZQTdNUGZzYWs2SmE0VnRJZ3RJVUZFdUVPdzRTdnQ3Y3o5eDFIeDM4aFozbXNSZERCdkplWWx1OXFrUkxSMEl1bERUUzVzNm8zM29SQUtEai9CK1VxUExOeEM5WGg5SU9QbG5wSnpYSlJpekRrck9Rd3orOW4zaGlmUGJISWJmWnJ6S0VaYk9hRUpCdHpHS2VoUTM5ZDJiNGdaWHpTQmlocnM0ZTVWTXBmTUxpbiswaU1qbTdEb084b2xEUFY0aEpjY3pGZDJqTlByRUNjT0lEVk9RZjAwME92R20zNWYrUktJMlJPS1M5bTZ2WVpPejMwSUVvdjdTRGY1U2EvbGNZZnJIeTYzeWduYUh5SEtqMndwNmlhOWhScldDc0xuV3N4ckxpTmhKZytNaHI1aDdDTHg2R3VKWkM2UXloYWYrVzl2eWlGVGEzRlhvMTV5cjl4NC9LOGpja3FRL0k2NDdyUi9vYnFpVTlvRWdWWkJDc0NIR2tkRnlKVG9qTnRUek5neElTS3NjMVViMExLV2R6M3hldzJzWk1aRUJiNzhmZEJOK3NLNG1STTA1a25xOG5DUnE3Z2ZOcWR0dk1Gc1lEMW9GSm4rZDM2eUhQUkRUV3lVNHMvTTVncG1QMjlpdFliVmtrVTBReXQyK1EvSnBwRnM5UGJ1eEpQVWp4TnVia1oyeGhFVDlsZkc1dXAraWpFVGU2ZUpNVWtvTEhSQmNtc2RtKzRqK1FjbFVXeXFGQUp3TVpVWWNCdktkQ2IvaEYwRWxoMUxzbmRUcFZrd2VhV29vZTVrMEhUam1SVlFZV1VMWmRUZUlBbWxrKzNaQlNMVXdyekpIeEtLN2d0ZGVNdHJxdVJjOTA1YmZhUUlxMDNCMWNRdmRsaUVTRTU5bTYraDlyalZUVmdXZ2pYTmVqRDFNNnVGU0RVVWl2clFwamJIVVZXQkhkdlYxYzg2djVZdmMrcTlDbmVxN1NVY1BhLzkxYlNpUVN3RTVOQ0U0UUlWbjJ2aHZiU3pQOUQydncvcFkwV2hVYjc2a3M2WmhWOXVEaXlSUjVWekYxUDBvMldRN3BWMmRxbEtMTHFZNjgxM0h5T3NFdG1QRHRaQWRIODUxU0Y4QXo2V25HUkVHbTVSQXlNeTNqWkZISXF4R2h6NTdoRHZuQmxVY3hGekJQR0RXcXEyVEZ6M1JSMFBIczRiYTRxckVKdkhFSktyN0J2OUNLbFdrT3dWR2JsU1p2R1d3QldqMDZHOGhWVXFZRlZ1Mnc3N3pmb2I3aThqR2RhdVlYOE9iU3loamk0ckdoTmhMVjY0T3FsOC84cnlHZWhabXNhbTA4b3FZMVN3UXRYWmxIVXVoNTRWQW14ZFpOdWFCUjlFYzMvUGI4WWtXbEUyWjRScFBnajJxaTl5czl3bVBlUm1KamsyZXVJa2VLbUxBQUdZckpYZzNGUy9yQ3lCL1ZYQkJjSFpWUWpySWxPTUExeFNyTzZJMFJBdUd1YlJEbkRUY3FlR05PaGY4VktselRMSHJEYjRTYk9NQzdsM0w0WlMwM3k2Z3ZBb09MZnA0djR0MnhOV0I3YStrMGhKUitYNG4zT014cXRPbFpLVWZRdU8zQmZVRDJBblR0a2lYbllQdFJ1bnNOVFVjTGJZd0dVb2ZzM2tRaW5Xa2VwNERSVGt5Q2dZaUNBSUR4NFUyV2kyWVVyOWFGdG5XWWRTWHF6RHdaeUZCNW53SmdObVk0NFJ2NGdFOHFvTXNuVjlPSklNTzBseFNEalF4enNtRWlHZXRFQU9Uckt0SVE2eTRJRVhoQ25WY1hmYWt0eXdTNTZNdHRjMnpDVlFmOE9XVHRQWWRhMFFOeUNjMklNRGdicnRTM1hwWFdRcCtlRE5DSCtGd3dlemhKL1o3UnhHR0VQRnZOWkx2TjNEcGQ2MXd1NjlwSU5IZFJMU01mUHZGbUhNbU9TZTBaMHRadkNHQ2l5WDRvQk5mNUpkeGJjRURkY2hwNG1MY0FpSXI2ak1iSXNZTjhucWk4aGRFOGkyY1plWTNGMzNtTDdRMkpRbmcvclFwM2cvUHgxKzZpMjI4SUVDZzhxenorVGJSVS9uelJYTFZSYjRoWHcvd3ljdEJNVkRIWFhqdk0yZHlRZXpuSmpWaExTbzBCY1BFbXJ0bWFsTVoxeTNCZjZrWFNIaHVtZ29kZisrSzJGa29KR29sY2VnVVpTLzNHcmdWcmNvd3o0U3BScWM0TXh2alJPenRrUEhFKzBMUFRUbHFITFp3Tlh4YnpGUkU5cG02dWtWdEZaM054ay9qM0JJOElHSmcrSDBjWDBCblE4SVQ2WERZOVRJZW9NVkhVWWc1d1BVaTlZTWZVWXVtSDFNZGxHSUcvSUdOTUliSHUrbGQzQWswNGlDMDZEQndNMnVJcmxBWU9CYnVNUTBNMWtuN3ZRaGxxK2xjZitVVDZyTWtxOWliNTM5WEd1cGs0aUhxRG1KZlVGMFkvb1VzaGxRaU80MzFDaTJKSGkwaWpPdW9TK3piMmNuMWxCdTRudDBPeTRJRTAwNTkraGZ5YTB1VFdJb1I5TU5yT2ZScTVyNGNEUlc5K3l0ZW9zZWhDT3BtaXcxbWtOT2lTeHNISkgzWUNTOGRoV2UvVUUxb1JHSEFFQjlUZ05XcE1jSG9yK290Z0N1SkpSK2JVNzk2S3I5ZTNHWDEwZW5rRFk0eGxJaS9LT3F1LzYzNHVPR2FmZ2Nud1A0ak13U1FpN3JjTWxCMU54RXdVM3hIdmI3NVV6KzNtQTBTM1gyeTBtaStxSmI1cXVpaTk1dWhEMFE3YmpyZktiL3lRbXRtSkJxdjZVVkIyTjk0V3NjUmdJdjhHaFpoRjhTRjY3WHA2a2xWSWxnMW1Fb2N6bE54YmxDeWhWaCtqczl3QkVhb0ExRzlHb0VFYm9EMXRkaHlubnRQZ1RRYVlPbUEvcFRUMFlOaGFtQUtVMlBPRGF4UlFHQ2FrTWhIMUd4bzhxNWxhT0l0d2kzYmY3L2hZR3FYZzcveUsyN1grMGo5ekpDMVNpc0MvYjQ2OFExcEFmNGxDQVNMTGFtaGZaYVA0enBoMkthUFQ4Vjhzd3B3OWdFR0Z0ZWRjamV1YlVaeXVCdXA1MmJ4TnliWlpqb3dyb1IxN3pNZEMxYkhsejBPOWdGZXIrS3M0L2NyVGQ2aFhMMTNDdkhFSnNXaVVsbVNIWUZiSTRlRUQ3c1VRaWgzVlQ2bWxCOHZMVUQvQVFJQndhRVQydUphdW4vcTEvbzhyYlByVjVmb2I0eldIM2VubllSbzd3U0xNN25zNWZ4NWptNGViU3FBTEtaeW1yQTJ4ZWdrZWoycHRtbzFaQjZFbTEvZE1uVFNBeUE1N2VhNEpXY094N2E1QVloNGRHalVISmg1Sm9DZ0krODN4NDZBTUZwRWQ0UWtKNmorVWcyRDFyY1RTSU1rRi9RUnRId2JyZWUwUUdyRC9UOFpwRHpnZnY5bVk1WmNXc0pNVnBpZ1IzbVVRT1JKb3pNSDlnZjQzaSsrSFZCT3VZeUpIVzFlSEFFWXBzRDVlV3ZISG1SWUFtY3paS0NQMW9ra1VpZER4SlQ1UHl6YzRZVlFGam14R2FNUWEyMHRJQzg0TGl0WkZIU3VwUXdGM3UvaWdXbkg3dEQ5R25zUGNpU2E3SE14NFNjL2dtMHE5MGhoUVlyODNmOTJLTG0xakNUUEVVTzQ2MGRSZTEydldDdWV1aDJlVHVUc0V6RVJnRGJUUGJSYzIwRmwwL21XVU1OdUNXdFlwTDgzTXY5OC9Pd0tpNVk4Q2xrQTFhNmVocGlXQzN1cDdVUStuZDh6SXF0ckh1emxHUllEdkdDRDdEVmI5by96Z0hNMW52MmJzb0JkbURSOUhSSEdONzR0QkM5YWg3NWEwTFZQVEFYR1pZUjZDYWI2ZVpzYTd6TWI2UWtmaHhPbTFOT3UzTkVoM29qYzNmRzZaQzhMVk9VUDFnUWRjQWp1ZkhJOXBkWlBTMlpacnJmdVZyVy9ZalRhWFFKbjBiVzRqRmI1OGR3YXNRTVh2L0M2ZkZvWTlQMTNId3E3RElyYmFCc3huQlRFQ2FFNmVFRXI3bmxKNVFRUWhnOTN6ZmREZzQ0a0xrWjFRaTQyY1BiSWluYTJFdm9pdmNETHlZZ2FoWG5LRlA1aFdGaWE5NUJmSFhNNkV6aGdDckc5WCtBbTJucTFzUzBWMnp3Q09QS2tHdWpzbXppbkQwRWNRbzJGei9TTTlQak02ZS9FK1dEQWxHZ2RLRS95RmowckMyU3I0QVFJSjV6WlE1S29LTnh5S050L1liNnRlYVYrM3MxVE1qaFZQRk0wcXdLQ0dVY0FwaWF3ZGV3YTh6MEJxUjZnd3lwUHVwc2RJZDViZ21TMUEvTHBYRENYcGpSRnZIZzdKdHBFLzF4SStZRmY0VFdXd1VBOU50S2dqYU0zWmRkRFVOTDB6clhZT1loeEtXMXVNdnZvTGFmWVZwSWx1Rm1uVGNaWldXZkMvU25NMzNTQ01Cb0d0L0NyUGFhMnhxRXNqaDRnTkFJUTlHaFp2YXZxZkpRVm1vT3B6SDlvUVh0dmtMdDZOWjNsMTV3VHVDN3dwV3Yrdkl1bG9rdmo4N3RUZTdTWW53Zi9OMHVEbUN1Zzl5MTlVQ1hselVzanhBcDltRzMzamQ4RzlxMWx6bW1OKzd2TUUxUmMrNEpBVzJzbUIzL09FT2pYa2luNGVjanprSkFrNnVsT2ZIZEZnKzNqWHdVMEY4NXNQd2pibFJNWGI2MHRITUV4UDJzamFhczhwc0xQOTJjd0NaVE12MmVBWGxYUGE4S1BhaU54YzJQa1dBcmszYys1Y2xoMTVXMndod1B5eCtBVVM5aGxnUDdxeGJuazNUaVBVTG8xdGNoQlZvamFtVFowMnR0dnlVQmtNb3JSaVI5S3NxQmpYR3NrRllaMDdGbEo5cTdsUjVyVGZacXB6Zmt0YXdXKzFmMm1pYWZYODBMdWJidnpSVHRWOGF0QVFvdkk1QURBdmZ3bXluTkI0enVVSnIxOERLS1lDTC94Y1Q0aWd2dURZbkVuRVhZZDhKNzB4b3pRMi9yL3hOR21QaFpnUzRQOFJsaDd1NmIyaWNFenNGc2ZTaDZXc2k5c1loM0VoVVRyR2kxLzFRRTIvRDJOT3QxSldqY2VHZk10eFBaeTlBWjB4WTdxYzI0VUhWOWhrQUh1WUF1K2ZxTUdDNWc4TWprOHo2TytRWU5mYjJ0UVJIOHpZM1VNaWsxWlQybHJSMnhvV1plOHJ4TE9kUXZYRllIV0xGSDdWeW92QmRUaUltbFZOTFNHTHFzTTBlS2hGM2UzNyt4ZXBUd2dNUVpYRU5Ib3UwQlk2c3V4TUdpamR3NkJsVnJjbHZMc2ttMEJjY0lNMi9NQ3RJN0lVVHFuS2Z0cWNOQlhjTG1XbVJVRk41N21vUVYvd3h2cE5UWkovNVpkUUc1eWxFUENRQzExMzRQdXVOTndRNU8yRS9FSXI3cG1uVjRabHkvZUR6NzM3aGt2dUVxZFgyM3FnK21YemoxOTdkWGJ4b2ZlUzNxSE5IU2crZVNsVThIR2ZlNFB0akk2V0RBa0dZZFFJODR4UVBhS0NSTHcvdUduTGMwS3dxanVUdm9pVlpDZjkxWmNubGVyRitMcURDSGttWHM0SW5DNzlzaGd0Y0RmWTRBZngzSCthN2dNNXBadkltK1VJcENPTWM0Q2VlMmNteHpwQ0xIbWJSRHFqMkxTTWQ3NUg1aWNHUmxXcGo2TU9INU1tM3NHTkRqQVBPOFJYZjRoMmRrTXVxbDJYcXFWV1BNVERNbVIyNjV0dXJ3Vjl1WWtVN20zTjY2UFg0RGxkTUlCdXNiemZrdHZPam5xVVNQOStjVWhxdlR0TzRxQUJScFI4Y3VLWmZNTlZuMkQrOWtMMHZldnFieENFMTR1dGp0aEx2M1QrWVpIdHdmSUxOWVVLN2J0dnVSNmxUTHlGK24vaEpjSmJuYjZkTWdJSTdxcDFxZVdLZGN3djJJRUdIckM5U2o3MDJjRDFsRXZLMmU3aEJvMDVjYVkwRFR6aUFZNVBCSnVpOHowUUFKOE9YRk1LaGdJeXdIclBWTGNoK045YWU2b1pUOHhTa0twUWN6NE9VZHhqTXJJUW14bkZaeGxvTnFzc1FUNXZFRGhVTWY4bUpmZTg3c2orSy8wN0NoWHRLM2dDbmhCdWFpamdPYlJocG9mM0Qzc21lVG1YVmpsdGxiTmVCajBhR2N0Rkg5VUowRThGNTBIc0xvZHl5bVlLVWMxT2hIM01GY05qUmpaWWZzT0NGWmJiNDEwNVltZ2tJVDltTyt0bm5OQmY0Sjh0eUhDbUpKYzd6cWk0VlZsdnc5YW92Tjk3R2d1U3IwQzh0aXZiZ1BTZldqZ2Y1cEU5QXJmM2tEb0pDdCtSQnJ4amU5OGt2bVQxSGxkY3cxMCtkZHFJNTRRVjhURnhaYndSU1cyQlRjYll0S0EvNjZmcHhKMmNKejBYUXcrUWVGVnpmUlcxQXV0NXhxQURHcWd5MEZuZmZiOUtzcllpODJJZFg0Nm9USTBjVUdPb2NURlpaenROZG1DcHoycWs2QlVVSmpwb09UUHd4ZDNsdGxvVHVVSmtsaFZ6ckpzbGZWb3RkUFBaNUFHQnA2RGx1bE1QQ1MrUmNhdlNES1dTaVpDaGtLREtOMkVJMkFwV2hTSFpGUkV4a0VGeU1QeWhyV1Y2dGVxOUZFV01qSzNYVGVFaFhpbHlaN3BxMVYza0ZrRlJ5STNBYVlUN3RCeVdwc1NrWnVjM1hJczFVM0k3THRPbGluWVhqbGdIVzZGaVk0bWRmQmZDRWZoTXpPYmVrU29iNkFLTk1SVFh0YlpOQlZiKzN2aC9VejAzdFBwVWhCaXJqcFVxNGlKL2VjTmRHZ0dzTzZqUXF0QldsMFV4R0xNTjJ0NnRab1pjeUNZVTZEbVNIL1Bsa2V5VGJGeGJac1lrblN4WXJPcER1MWtoZU9XOHQ0OVhkY1AzQ25HbkZpb3BUODY2dkFVODJ0eEUzc2N3RU5oQ2pFeHlYTExXMUtaMFZMV1o5RHVMK0c5bDAwQnZ6TDl0UFA0Z252cmlnRnBjc0dEMC94eWtmQksrUXMrdE51b3dudzRBQU83SUlld29CVXh6L0tLbVMvV0Z4RzQ1YmQzZzEybkRsZXY4eEdGSVF5K1hpNFFRanIrVU04NE1rRkRLa3pXUmc2aTZUYXFmTk9waUowWitGUnU1N001dGE5eXBEcE03Y1dUVnA4eTVEeDUzSWg3dG9XRjJDbXVKckRKczd4K2RsUDNHbDk5MDlFU0RrNlJnaGxWUkdVeGl6RElyNHphdWI5cTVQdDZuV0t5VXVmdDFtZEJZNnEzVlZoUE96OXdGS1dmek4rMndKd1B1SlN0bWl2QTI2MzZYV013VFl4REJIYWprVUVVY1FrNDd4c2UydThZWm9vaDY0eS9iN3dPZGV2RFVqbVkwcXYxZVdJOVhnYVFPdHM3ZGRKa25VeG9yanRnakFUNHMwVTlKYnR0U0ZJTFFlLzFZdDNxVnZZQVZucExBYW5DQ1ZWYks4OFVuMitmdE1YVGUvVTJRT2pyRHNLWDRyT1l6RE9PQXJTb3hLVmJEVmxoOHgwd2F3Z0lXR1RsU1BDbExGN25oM24vOUZ1THpGdUxWay8zdFBsalB2bCtxeGpMOEp0UEpQUmgrakMrZ0twNUdSdWVOMzJhRklXRXBta2sxbll2aW0wbVQzQ1ExRDVtUHowNUZueUQ1a3Bzb0dYdjkrQU5FbDZZWGFSUGdiYW04TDh6VW9ySElaeVBnb2lUUFZhQmpqR2xQS2ZFditWQ2ZFeElXbGZ3aWNSZ2ZwM3VscUQwZlFNTkdqL2syRGxyZUFWZ3pFRTl4TmNjMVdzVCt3dzYxNytPa3k0MDFDMCtNUHd3TWduclVtY2JxcnBlYkY3VTRST2MyWkFtbkZqVWI2M0IvUnRuQ2Y5VFU4WXBqNVg5dTlsajcvWlc2SjkveWJVMkhmeSsxd3QyOXJOMEZja0VJREorKzJpb0dheHlGc0hEWTdWZTVEajlEMTh5Zmo4L1NXYS84c3gwbVJMMnlaRHZ4VDI2elo0cG0vTUFzcmJLdktDajBYYkRFRDRiNmcydzd1Zzl2QW9udjc5ZXhIdUFZRHlEMU5mcytDaXlpNWMwRVgzcnEreE1VckpGem5hc0NpelRCcDA4U0svMGtsd25aVDZsaDhKVmZmYWpRdDR0MUlTc0pLaG5jWjlrVzc0S2x1SVRERXNXbHRUdGNlTVVxV3NxNUM4amFERUFOZlRkWXBxWlZKdlZNdDBNNmVzNzRDdkQwWFBKQ0E1SG82WlVkeFJVVGF2RzNPc0lncFNidEZZN2NlVEtVNWVqNlgyQ1gyRlNXM1RCY2FRTkVsMFhnQ0RVMUtvWFdROEoyeTdKcGxLa2crWjhhTUx1b3p0K2NoZDBEMkZNY2IwdWtFY3NPcjhHRzRxaGJYV01CQ0FET1dNSHpzNHFpRzhUWE52Y3FJbmtocXZvc0pjZm9sb2FlSTdPR1RiOThoN3lRQWFCNlVwUE94YWpJTTRLZGtNZUF3S3dzTDNxNE16MDNwWGk1czRiSE9GOGlRVXhwZ2ErUFYzN1h0R05ja2VyN0RUMWZVODlGR3lZa3N1eGlhTG9pZUhTS01hRDhXVEFuUmFxWjVDQ3VuM0l0dnhQY2UrZExMWUp4Rkp0WHVoYU5tY2ducEY1VmxVRUhkUXRTRVBicFlJb3EwQzBETlF2aFRHRXpoV0gycEQ1VWlZR2NGSnFMYWRrK2FIbk54czlwZWlnWFkwSEVGUU9aODNuZ3g5Y2lzdUxwUFhyNVNhd0c5TE1OL1BrSFZRdDUwdHIvaWI3aVl3VEFyY3BBV1hPTmF2S2ZueUg2QWg1T2lRa0NKeVJyaFIvWXFTYW9rcDVITnVZb3FBeXE2aCtQeHhzYmxsZUx5ZVZTdE1WSEJxb1NPbkFSS0g2c2hSMERBbmIvTWpsRTVLTi9LbEI0eXR3bmtTMkVsOExRUEhKZythejBwTVJ6ZlY2WXdnUHdSejlGRzFTRWRTZHUwQTJxSUdUUm9keXJiVk8wNFBPM0YvZjBuTmxaV3QwMFQzSkJtVDZha0VUMWxZWVduUnZlZGlxdFl3RWFaajc0WXpISUtjM1RiUG1ETUQvdXRpR1BuUkxLOFVaNllDVmkwL216d0V5QmhNQjBOb3VjUjAxYWNnOENLa0pGNVFWTFpnVEp1ci84QmhIYTBWckZEc3NndDUzc0FJdVc4RHJhR0VySkcxN3BpRFc2YzBwRVBYd2VZWDVWcVUyY2xsQStRdGNUU1I2RVorek9SV2FUTjJoTXh6SjlMR1hnb3pKUldlNkxGazRrelA1Q3pmbkZBNkJ4ZkRlZ3Y1MzRoU0d0OG1WQ0Z5Q3kzOW5KQ3hGamtmTy9kd3BsL1R6SnpBdkhhVHFJUTFCNVFaREFNV09qMTFtRUNkS1FqcCtNdEtSU0p1amtmRnh0MXVqUXdzVTZBWTh4YmY4V3JtcFJTQk5UWW1RZERBNGQrbTZGRDYvNzBQcSt3eWNaNXg5Sm9McE0zaGRvcjBsa1QzQmJhZE5VblVGMGtwNUhFMFh4L2h1Q1l6SnBrU0trcW1FbHpZdWZyUlRLQ0szWUhDamZhZW94Uk5PcnhtUXdJb2hLUzJmc3ZXMjFYOGc5eWo1RHFlRHhrMjhocFQ4MzQ1S3VNcHNTa3V5aU1pSnhSaXJKMU1jNVJkUnpBS1dzZkxLOTNjaHRyekI5OHB2a09lS2luclNvM3BWblNoRDBoVTVmK1BNcDV2dTRTMEU5Z1VEbDEwbEhITVlkQjhjSnlvQS9qTUFwMG9oam1mVW93WkQ2MERmei9SODlaMzlaTFdEKy9hc0t0VHBnOWNhVHJTbjdsbUlyMDBMZ2VMNUl4MmllMGtzd1loSld4Z2tMSG5BT2IwSHNaQUxEQ1BIYnVIZzVXUXJFbG4vRFMyTmczeko0ekVZdVMySUpaMFAwNlI5VmlqeVQ5Qmgxbysxb0d3Q0hyQ0QzOWo0eUJZZlhteE9WTk5tS3laZmp5N3JiTnJKd0xTbW14d1dEN291NnhaZDV6Q1RlSXI5aXExUVBmVDR3OW5vMWJObVBuM0dNU0RFQk9aRUtaclorc1hodVk5ZFYwanRRMWVVcHhoY0p0ZnpBc29CSHVncWhPNkxuWGNoZG9FeW13Y0hVQnhJV0tzdlBOMDV2ZVdsM3Z0ZVJTOVd3Mlp5NGMzeThZUXVkVDhiR1I4VStsck8xdkVyektuYURUL2pNbWRuRis0a1prZTh6Sy8welorOHdSSmhNNXhjS250dVFaSW4xczdEOHU3ZjlyZlFzTUY1K2ZSc2RsYmR6WXNjL2liY3hsUGRvU1lkWGtyTy9SWk4rUUVNSUJWc01tZEFtbDRpdXp4Q3dkL2F6QnVzM2IyMFVwUi91UlMwUW5aLzQ1N2NsZUV4a2FWa1g5aTFKOWl4WFVraEFWRGJuNk9hOExHSkFvQzMya3R1OVZGdEhZbEV6L0xtTmhVTTNVbW5NVzZSS1c0ZFJhTHkzNXhJSU9jb1JmNWdQYjd2amJ6UUcyalVDQVJUcnp0ZVpQanNjbmp5ZGJITWdWMmJpc2FrNDNXcFBuTkhtYk84VEViTmdBUkxXZTVrSG5kbEtCZkwzWDVETS9WVnl2WkJyMUhxZGhVcjVCOXZMMHdyRHd5WExFWUwzR0tXd0NMWFJDa0NGZmFuNUl1TXg1NTY5QzFrTVEyb0ZqaGl1QTlRa2J2dVB5OXlkY0c1elo2UVVkVmcxR3liaFFaNHk3QWhpRGZLZGNnbWlNdWFaR01QUEZKcDUwS3JnanFIQVhLSGl5QVgzZUVDS004TkNIQ0tyKzdLa1liMHdMWDNUczc2Q2I4bWkwN2F3Nkc0Z293UEdIaUVCV2lvaFlxa1VnRWM4dkN4VDFhMmFaZHc2cXIrTGs0dnJ6OE9XOE1OcDJuZ21pQWVqVkdST0FIN1g3cWl3UFlJVmw2cXJnc0p0MnQ0MVJnS3A2V0YxWFp6eDZlcTdhUTQ1c3FsQzZ5TWhUZWtQREhMS1d1cUxiUzczMGZCQ1hnVGRsNmxPckUxN204VEhzaldxS3NuNzR0S2o3NVpWSHdWMUg1NUJWaCttWDZuRTgzV3d1VDg5S3djemsyYVNXcHNDNHdnNDlYVlVaR09BQ0RKN1FUelpXaUJYSDBlRnZ2aVIrUUxMRHZJU2NjS0t6MXA0dGtnamJ2YnNiVXc3MlV4Ymc0b2lwdXFhUHZXR25oQ1gwa21lR0ZtdjNycWtQaXptTno2WTVWK1psblp5ZFBQWWtPYlFQZkZEVll2WUM2SVRhNS9FWStBbzBscEV0STQ2ZEk0ZWdRRWNiTWtwZ0daeFRLSURLZ2p1d2lqL3RPNnNGbnZtUUFhRmZuNGhkZXZTcWpwOTN5c3d3VVdoekZxSUtoZ04zWktZUFZrZHVZWkJ0cmdOQlpvdjJvV2J5UFF3aHVjcWRPTDBPOG5WRlN3Z3ArYWFSdjlQL1d1cXoxQUtHQ09HSTgxMWhiWHFpbmJ0M1R5eVd2QlQzTGNmZUtvMnN3Tjh6UVViUFFTa09UYkJDb3FxWTZoZXVEVk9tQ1pBSDBMU1VSeXVSUjUwTDZmZTVCMTgwdS9mRm9MNzhIMnNYUk55UFo0cnE1L0RJK1BrTUdKNEhkM2tLdGVKRzd5NjFJZmZuZnN4UlZFSituc0ZCY3RuUHNqckdaRmdIZHkzU0RxMWcxbmNOWXQzcHBaLzJsNnl3WElTT0gzRVJrMU5LcnZTd2FWV096Tk1BQlB4SVZLR25yeVFIY1AyQXRKNkJIb25xWDB6eiswTmxPdTMreUFSajdrQzFURjd4TkpHMHlzNCtVMTFDK0ZweXJkVjg2cHJ4blEwQnMxU01Oc3lnMmhjcDVYZkl6RzNRRmxmalhHQzY2UDUydk5oMm9aRFhQNU5oVEw2QW1IUjIyR2dhbjNLYVl5RTE0L3NPU04vUVdjbjRuN0krWUl5TkJTVitoTHh0VTdBZmxLTVhGa3ErcW5BNVRuUHkyVE11eWZia3kycEdsZDNjUzJONDNKUVZRSExSMjNwTWRTZmo4NTQyNFdLcmlOWW1LU3g5Y3gwS1dvWkZzTGZ5elpLMGZmU0h4MDNlUkU4eUVzZVFGTGRGWWxFdmZ1dXR1clpZR2J2YlhEVWdqRmFXQm5aSEI3NHVKRERySFVpNEZFRkEzeWM3VEFOeVZub2Qvd2prNWdIcWExc00rQjVzNnRJem5sUzlxb3VYMmlxMUZNakpWdlp1Y1JnZjVvZ2ZOUlpZREQwS2IzNmJzd3VrTzYrVzUrYXIvdFFUSjAwdzNDdU1DTmwxUnQ2b0RqdkNaejJRakR3NVFvMHZBNnVRSlR0TnVKNkhVRm5ubjcvRVZqNm5na3lJQk9Eb0hEbXVuWnlDd1BCNFBrWkFUUDFqWXVRanRBcnJVcWc4dmxuOVh2TTlVM3RoSG82UE02UlpPSFVSMG5iSGNQQUtJaXArMmN6K0VOOUJXTzBqbGJuK2NsbkJBdDlZRXh3cXN4NmYzeWppVmoxU2VITE1XbUNKOXpVL2FEOVc5alZRTEZ3c2ZISXphQ0s0Vy9FSnd6Rll3REVjcHh1RjBpSEpsUUNubXgrTHdvY1BrWjdteHorelYySlJ5QnU4VDc3aU1nNGJDUWw5T0U2aTg5SktRMlMyNWxiNVNyT3FibkFTTWhDaHphc1JiRkN1cnBUbXlSWUN1TVpTSGZScnpHd1BkTnpYTDAvdE5VNmRPTXRqQm1zR3JIQ2w0L0xwN0VrV09zeDUyQ0hkRWgwRll4c3NDOTNQdGJZRVRZR3EzeWlZd0hPTi9DMEtpTkNHR1pqbENVb0lXSURLbzBLVlFWZEhZTmduMC9LYmdJcmgxaURGRUFwQmdZODNTRVZDZGtGK3JPcGYwSE5GTmtxa0NLb0Erb1plSWxaeUkvd0Q2dldIbXlUbW45Z3ZZK0V1UTNEUkJ6MU8vaWZGNVQ4SkpiVlE1bm5RNENFMDNaeUJ0QjRMcU5JRzlDT3gremN3Mm1IbTk1T1M4RGlJUFg0ODZ0UnUvaG5KRHVUemxaRGUycjdXZ0xNbTFQTHFRbzlSa21CdFFiaWY1QlpvY2JIS3VVVlRyK0ZTSTZpTndBTTVzNjdGbHNPQ3Vmd3BuMWxRa1Z1YThjRk9obnFPZktqYThNd1FHeTROTDBGMUNTWS8yTUFPMk1DSmF4YnpMc2h5TmtXY3Z2YlhWSVp6OCtabncxdCtKc0Q4YWlFWitmMS91Y3pNemt0VGo1OTY3cGdkczd6VUkxSTYvaXQwVVRzT0lnNnNGM3lINUNQSjRnZ0RpQzM0dDJxQUZZQWdRVExBMzhHUnpQOEV0SEcxSS9pOXc1MVc5TXU2NlNMbHV4M0t5M0tYMFJzQW5NVkdITEhpeDZGYnlRajBDVWdYcWpvYnVFUUh6UzJlYnN5OVNWUkorQVJxQUFSVnM3YmZXYjcvQnV3cEtJYm8wQ2V0SXJiYTlhV1h6dUhpeGRSQUlzM0xXSVd3SUtZSWcrcS9OMHdRMXpBaUxRZjJST1VYQnNBWE15ZHJpc3RTdlhHaUgxdWVTODB0dHFkcGlMYyswaFN0L0ZNalNpbStaM3VFZG9aL2VIbXplTGxzVk0vUzZqRncxMU5PSlptZzQvSHpPclRPVjE5NlBMK1h0YWNCNkhYb1c0T1NBaW83REZyMzVuSnNrWDBrQVB2WG1idTRTSVc0THBsR2NkdXhhTlJGMUx6ZHljcTVRaTR6a2RjTGp0UjhVTXZDK01xRGY0ZjloWUFhTXZ5ZExqRytwU2o2VEg1SGlIeDZpTkNYdUliWjVrTmRDSTN6OW1kYTNrNmJIRW80amJtR05aZHQzdVMyci9jRUc3NWlFRHQ5d2NxOHFHdmQxY3dnaWhtZk9DbEdQSW5FNWdtS3VkamtjV1h5ZFhxd0ROd3I1MVUxSkYyV01TVExESHplZ0Qwbm93TlR0V1dpTWZiaG1RVDFiL2lMVWcvZGc4ZTBJZnRMdEF6OTBEbzNFUFlYYkJsUFl4aWZjSE43dzhodUQwaHZ4eGtjNml4Tm1Kajg4RlpMdXY0SFNLMHprVTloNDlvbjd2aktudmJMdk1pa082Uk1xMjJkbjdadnN2SWprOFozZU01OU1BQ3hZdDk5RWRCL0p5eVdobVRVMitxRUN3SS9haU9Jc0pqbEdpNUdCMnVPNDN0MDloY3pLSWVqaFhUbit2UmJxUXI5NmxLeWZ1b1BQZm9Ub1UwSmZsek9sZnN1SW5VZ0t3cHNxdThVbTNRdUllZVd3OTlKNDgxN3dUTEcyVzIxcmh4MWlSRURTd1VnVVUyU1lGSy9KM05PaHp0SFc0bEFvREhCejJKU2hoMW51QjVrQ3hFUVpLYUhJSzZ6VHRhRFllRFFyRVczYVk0UjBkR2ZzRlppVGY5VDlPemtaR1kvSCs2NXp6S1c3ZzRadGVJVkFGT1Q4bnZyWTNuNVJTRHBZazZob3FJUWJoZEhwTVNzTXBxb3hVMVh5STd3OVgzSmZkTUtwdkdSU1JmNnphbkNuL0NUNXRxZy8xVVA0Z01FM1IrMG1VUC9nbGdqdXB2ZzdnRmRHbUtVdUZKK3Q0VkxXZ3BFWVZnNUlFUTNrNVhDRlRvSVRRYmJQaVVGL3p2bDZrK1Buby9XMktqK1Q2czJGRDhuY0I0THlXKzJGeGhuMnpmaUxIVjFTNmxaZFhaS0tPaWpncHdNQWh5Q0RPVU1jNGFZRm5oOHNjYTdKbjVKVkQwTXNlS3lRcEJwTWh5VkpzSWZrSWNUVXBCd21rakxMbm1zZlUrcy8xdFExZm1YNHlUeHpyeGZYUFZZNnJJelkzWWRhMDFGVzBqNk5GMmZneVhZQ29WUUxlUHZUMUJPVStiVmpBUldmNlZEYTdGaVVWZGs2ZDdFajJ1dTIyMlNVc3V3NE4xSnc4cU9VeWVKaVBmUmx3Q2hEeDJQOGViemhtUkZaREJwa3V3alRHMHN2eXpKdjFxbGtKWWxoajN2cEEyb1BaMW1NZVdHeVBuRnU2dWhkRTBLQjNqdEE1eHJjOUNrc3kzeUJmVFFuTVNLVmkxaEZUM1o3Y1dhWGtVNTc2elRNNUJXVmNJaGJxalBVMU54R0crSzVXNm9Ea0VSMHRsMU4yRFl1UmxqUjA1c1RVYVdjZGpKTUdjaFZwRUN5UE55VVR1dDJ6cGtlRHk5NENOVHFhczBOUXkyaDBvNzVPcHNyWmpGTXBnUlczZ09vKy9QdWg1M2Jacm1rVjlWQmpaK0NNZVlXK0p3NGdXQWJYaU9hOEVSRHBSRnZWMTRMU1JCUXg1bCtEVXJBTWE5Q1FKV3dnWC9RbGNHZ2d2aVBDRjFCa01ESG1lbGU1NklWWlZaYzdYcURRTDZoU0JUTE5WTG5lWmxjcmlhb2lDWDVBTjBhS21Xbkh4bXJtbjh5TU9yaHhVSUgvMmZmVzUxczlzbk4yaHRwT1FlY3BNSnAvYWhJMVNHdGlMUEZYMnhpcVBiWVhTdHNpZHpGZVUrUTZmaCtIaWo1YklLRGxYbklKa0lQTW1pQWVkL3N3cXZCL1cwQ0lsczdNV2F4aDMrTnVwcURNSVp2V3BobUs4cHlucHlKNHB4VS8xRUxtOGtLUVFGMXF6VWJ2MWV1K292aUV1VjBQM0R3RCs2YVJrTERtOXJqSEFqaDVWbndVM0t0TmN4MVVSd1B1b2ZsQ2M5RmtVaWFwdHFXUyt1MGsrZDN6MEdlcWpOYUZCdjArMUVxaDEyU2lkYzhKOFY1ek5qZThHTjFLZUFGWm5udmdXdFRUSndmVVpUMWNPVWs2eGEwRzAxZGlQRURFK2RBZ3NDcUFZOVRUMFNnc0U3Wk02ZSs5Z1JidENSY2ozRW5WODhNVVRBSnR0QmFpQk5mK1MxVGlDcEsxMnkwY0VibVB5bDZzSEh5OFJKUDlXUlBpc2YvaTlqcXRXd09HeGdwaGFUN1UrTFJiaWR6ZC9qOGRJcjE1MkFtZGNiKy85VER5Q0YvMGExTmdNOVRvbVBVam5ISk54ZStDYU1mbG5NNjJ6ZEUvWHhvaGZ0UWp5Y09WcG9Hd3RNYzY1ZUJYU1VkRVN2a2VoaVBZbDhXODdYRFlVeit4Si9jS3ViVEFrZXZoODZaRGNtOHJVbkNRTVQ5UHgvRnZYRE9LUUhRc0YzWlRaZ0FGVEtzVWJya2tsNXAwZXFRSXRoSWFUdzc4cXd1RlYvRXlZRGQ3UTRZQVhnR0N4MWxMSlVSL0IyY3UrcGN5OVZJQTRRaERWdHF1ZzZJb1A0dDk1V05PZHg0ZkhIZUJ2OU1WRGQrVWM1QkpEWTB0NU1QdEQ2U1N6RGcxeEkrdm1zQVdlZS9ucU44M1JGZDVVOVVJTHMwMitXL2ZuRkJnWkxPUGJWc0JqUXI4MVdtZEpvdjBoTE1jM1NxMlNZOHRNdzhrZ0xHcXU2bmRGVTM3SytIVzNETTVuNmtvRDk1dlp2QVJJYmVyajZFNUllL3hUQTk0c1JqSVFLQWRyeUdpNDZnV244YS91UUgyN2l1YzRCMEdOb1BEWXJvTjVjcUJJWG0wVVNFNms0R1BpU0hMeG50ZHFDVFY5Z01oQi83WnNTeTZ1UGJsQWNnS2VwK0l4bDIvY2RNUzdzeVVkOURHSEtSaFpRMkkyQVpWaVFoeFZSa1YxSUZKK3pvdExYL1NaVDMyOGhVa3J6RUxvNlpLOGlRTUFBWTBCVm9ES0o3NGFoSTFXRFVVUXUvWVF0d3BsTXdadmlwQTZEZlM2S3YwQS9CZGVMS0xDSTduRXd3RFVlRXNUSnpHSzlOa2xUZGpUd1FqR3lSdzBRQXN3SmhSbW0vYVVWOFJYTDltczROWU5seDd3ZmgrZks2Z09OY0FZdXBtQzZFRVhrd2FnbkZaSGJkeDBtclRUNzFyaXFHZHBhODMvK24vZ1JlU3puWTJVL1c3a2FXN2RXQTBtRm9pdVBBZzFDUVl1Tyt0WkR1YXE0RHRyQUgyclQ0ZG1YSHZYTnVvdTNMV1RiMW9rcXI0VG0wZWJCTGplQkx6cXNlY3F5RjZ1VmJJVzJSZEJkeGRrei9WTnUvTHFDM3NzS0FHU0RGVjB6dnVjVW5DbE80VmdXS1RHZk4wc2RaWmsyeDVyS2pVM2NYZ2NCMFp5UVBKVTFyWitxcDB2NWpUYTRmWDcySUNuamRhWDVPVFBxek9aYzVFdHBsN1c1N2lCVDR0Ry9FOTQ1aFJjS1pSMlBjd1Z3ZzQyK2o0R1pjcEVzT1VRRTkyeVJVTjBuTmg5NWRzdlI3UXdRWWpFY0F3TmRBTjljdFYwbUlwOG01b3E5a3J4aGJsYmtiaU5ZT0Q2M1dQb1ZpMEMzU3NncTE0VENRRVRTci9CTmJkcFdTZjhzSEcyOXcxcTdyb041aG1JVEEydXpKZVR0d0d0N1BDUXVtbVFlSEVjVmtjR0JQbGN1WlRxWEZsNFdKMlRWQ1FVVnEwWFFydWdUakk2MDhtN1Bhd2d1MXZLS1pEQkRtZnlnMDM2OFNvaGZCUEVnNnBBcHZnZDhXenF4Vy9tZ0xNVmRlNmIxbTRaYXBnSFI4TEVQeVV1MytYWU44dVdHam5XVThXa2N4WFIrYjdCTWxBalowUjF2dXo5d3VnWlNyRmtSdDNETUtqZ2JtcjJxMXB2YkRwQ0tHbW5wQ2ZkWThkb01Hd3hYN0dkU0lyWlNRMGt0eFlFaWE1Q1lxbnBsSzlmaXcwM1Jld0s3MUFqT1F5KzdDdkhNWWFGVjFlYlJyRTVReVlxVG5iZTgvS0RLUjJWVGI5aDY0RFJQQXBuM3hsWGRHVXlYQU1NdFVweW12cWUyS3lrTEpmd2NHcllXMVdudFdXMGVSQ2hOckhlR1B4UnJ1VmVsak4vMFVZUWNvbHFKd0p4emJuMWdMZW5MVWZMVVhpSVM1dElCalpqNGNqMlFDY09ZRkkwNlU1NkNlWGlLVDZuazZ2ZTZBR1Y1Yk1SSEJORURjZm83aG1ZMEphZ2tqMmxsTU1Wb3djU28zV3JzMmk4RTJGL3VmL1RQVnRiK3RnN3hEcHJEUFVWbWJkZE5vY2w1VU5aYlRZMFJ4dzRtbVlJSDg2QWJzUHhMdkFUNVVIS3FtVzBvbFBYckNhQmF6MHNYSEdXZzJmWVpTUmlqcFY5VDhLejl2OUtqVUtQSXdTSHZlaHpYb00xeU40am0ya2RudVV3Nyt2OC9VU2FkRko3UXdkK3JvNTQ0ejNNRWJ4OHVLaGEvL0p3NDNWbzdKWm9GNUVBSmNNYmFWczVvWlNaajVpbUdTTld6S1N1MmtIOVhyZzFOVENaMEx1VjMzTU12SEQrYWYyanlncVltMnhkUEJuZ3NQeUtod21DN1Rab1Q3ZXR0eDh5L1RvcjNZWHFZNFBQSnBMZ0Y2TXNEVUFjc01zbXhYZU94Y0FqcitEVTcveU9UQ2ZLekNMN0p6VnZuTmFycmh5MUpWWkt4NVFRUlhLWndIWTVlOXNVQmlRdTBnU1pBNmcyR29DaVV4Nm0vTkN1RUsyb204WDk1UnBxeUZmYWxPQm5wK2h2dTRPbGtxZXdrV2l0RGR4OXRTOWxLRDdvQkN4T0xpck5YVDRuT3RvZUFYN2RnYkE0SmtzdnRGM01pTE9SOVFNQXM4ZEdoQU4rcFJWOTZYR1hCUk8yUTZLb1VwTVJ2QVF1WndVbEVzVTBpT3BtVXdQTnErS0ZvMEVsc2t4NXYzalE0aXV0c2tMb2JUVjVFaGFCUkxUVkxFMHBERDdaUlB3T2JxUEFjaDNHMGErSGhlbWNhcW82Z0kvYm90UWU5S1BoaVpORXBIM2NTTHFkZ0hwLzlTWU4zWERVeWJEWXN0OS9SV01OL1BkMm1QN05CNUdTS2hRZzJtdFl5SHRETmcxMUpwYy9PZ2dHNWdRdFg2N3JTQlNtM2pKYnREUnpiaTQ0S0pQM1d2eFJVcElFVUJCbkRqZTRHbnR3UGRCOTFGSC9jbm9CSkZUVnBOSHFyU0o3WkFUZS9PY05ka0Q4T2pQTjhsNS9KakFqeWkwNWRVamVnNHVhZDU2blROM1JwYWRNT3NhaWprQStxalRHbE9Wa1N4RWtpblRyMnhNOE1ycGJRN2xLdzJKbmkwR3hzck50MXY4TkpBamUzYnZCOHFyWW1lQVc2VUpCUFZnN3RFNGdwTk1nTnFYTnBaR0FtTVpKQkNMTS9rVGNJZGN0Zk0xYnVDYzBZcFJUbjROYzNKSWdMcWgrdHlSNE9sSGp1RTZLSmVaOEkrWlJsekxmOFlvM2dldGUxakFOb0tFRU13Z2QyVDF2aldsdEZQOVBlUjNuMW9jM3ZmclNPbks0USsrODJoWWdlMFdMc2xtMGc0eFJUa1liUEFIUHp2R1VwVTd0LzhQOUR2UHk4ZDZwUUJ2d25qeU9oWGE2TVdkUFZpSS8yR2R4d2RodkVJUFoyMFI1UEhmSjE3MmNWUDJ2NDdaOThWVGVGcTNqZmtwc25jWndZbHI4dVlzeEpLdzRZME9UL0pMa1dQTTNFN0kramVBTlp4d2d4RzdoQm9iL2NMVzVHbTZlUEI4dTVJUjNwMEtHUjZKSE4rcDlVSjlNZmtSMnRFaTdodGU2OFk3UE9ieWZjQ2FjVEpENzZWZlh1TEsvWWhVMm5tSVF1SDVNem51YmhRbEhWQm1RZkFTZW1XM2R6b1FkbHdjZURmUnMrSjFkOGJ2ZFlpdUVObEtFYmZpZElHeDBZZjUzUmx3NVRxRVNydzY4b1gyNmxwTzNxQWpheE5sdSt6OEN3QS9mdzFXZ21QZEFsMTdCcndWNzJtbHpieGJxaG4wYWE3MmRMSTMyZXBrcFRHZnRmY0IvT1ZSNE5IMnpHSklud0ZVSnVtQkFsdElxSkV5TEYxL3g3UmQvVGhSOTRCL3U2RWZ5Ym14WXdyZjl1S0ZBOEkvRzlsaUtQeTdZU3Brd3ZjM3NOSjh6YjRZcXdtNUMxSUhIMmhPT2RKRDMrTjdDWUs5MUF1c2lJSXJhcGVPK1JST2NDWVVSbi9iWkZRVEloRDFBRnkzM0FrRnpSejY1aUF1UXdVbmw3WWt1UGlmVkZ3bm9zU0d6NXRLS1B2emFVT24rb3Baek1EUExFZElhNkxuRklOQWRzc0xxKzJvbXJpUHJzejlBUjVueVFoVStORTNzWVUwZW9tUEFpOUs0VnNLUzBvMVB2Ukw2RHl1RlZKOGp5YjNGdjhFUStXbERLZk5vTHMrUUxlelR0ejI5OVljemYxejFiWmdHd1UwbzlyK0tjdGlPLzZZRDFPQXk2b09zS0RaU2tGVHJtU1pWbjQyN2hhQ1VIWUZpZ2FIUEIvUW9aRzBvTU42UW9Za05QTXhNbUhXMU53bEhUUkRNaDRsOC9BS0ErWE5ZVTkvS0tpUmFtQy95V0syNE1YYWZlTmF4OWNVT1M2YXkxNWc2Z0xQVTdNYlVvZ3dyNUxtdU1hcCs4c0c2cmYzV1lFZ1ovR1RLTGZqTER2Q1VHa2d5eDFMbGovUHBwWVprdVc4QkY3R2ZzcWxvZW5LaUZjWjFKY3FnMGdOU2pRQnowUW9UQ2J2YlJyNU9aNVpyVjJxWmVwSExOT2d5d0pScmtCNUJXcWlqN3RBNVJ5QWZtQ05wNUlVelVZbjY1S2dIcUFXbktva2M4RkdvWnh3OFhtOTJzKzBHb2pLRERTVFNaYk1uUHd2OUMyamxMZ0hxdUEyWnR6Z0NNOG1nTTNVY1BHalZFNndaSG5jSTFhcGx1VzFqdWJubEo0dWRiSDhWSXRzUENxWHQ2MURtTVNiR3VLZkxjYTBKUXV6V014V0dHdzNMWllGUXBHZ3F5Q3A0OWxuTFZHcG5rQmJoTGNGbzYrd0Y1ZlVKU1RieWZmTVJCOGxRemlKRGxLUWhuYS93ZmJKU1BENzZMOGFqS1d6NEJhWndiQUV1ZVhmbUFNV2Y0M3E2aGdtZUZaY1dQUk1qckwzbUs0QmlZZTQ3R3k5M21MeWZFZlM5S3ZjSnZTbFV4Ny9MQVY0Mk4rbUI5cW16ZGJwVWRVUWtvZlhwTzMyTjYvM3oyZFQ4bXFsWlZhOVlrMUFhNHpMbElZeklkczU4TFduNy9Ca1RlNG16YXB1TjJ3MWY4SkpvTnhEd0cyVVJxZlVma1ROZklBdHFPRlJUUzZ5UUJPclJMSzVSV3BBRzVkU2R6cHdxVXdjelkzRDhPZ3BTNndDOFFDNVRNVHZzeG9ycGpuZWp2UzIza2dBekxlMDJnN0p5akh6YUIrSjRxZmNVdHB5TWVRY2xadXJocXpobHg1cTNtNXgzMkJDdWNFUlJ4cHNHSEI3OXZnTENUd282aHV1MmcxVW8zWG9kUk5Fd1p0RjhmazNOeGlMWDVkZTVBUkZIMExmckFsRGxJd3AzUmNEMGxkM1hoYU9Id0sxYnp5SWdUZFJVSUxDV3RMbEh6Qnk0K09tRW9wbTVLM0dNeVJFV0RQVmxzNkV6OXllcVhNSS9NVXYxcmJwTWVGalAvSjU3emlJbi9KemlxaEZsM0NNeWJJY2ZTRFdCNG15ellVbDFycGswcjI0b2xEcXpYbUJPZ3BQMUtHcTd3eTJiYlBoZ3Vvd0hnWm0xaUdTbjF6b05NK0h1c04wbmZtaUtla1hHTGMyNmk2bU9tc0Uxa0ttTHNMZjhORnRiRnlIMUx0TythMUVZcE9NaXlDNWZoKzNOd3VYWUh3R3VZZnVJVkFlSEZ5N3hyQUFrRWF4RERXbHU3c3RSclNkMnp2a0o1V0s1NzRNdE1qU1czS2RNd1RSVFFGaEs2dTJpaldpcGx3Si9jU3FOdWZqQ0NuWG1PNDZ3U2t5MmtibnNRU0RGT3d4ZzA3NmR6WWxNTDZUbkN2bGNHcTV6SjMwT0g1VldGYVI1RHFuUUlKck9WbzBvMUh2dHpwdHoxbHlXZlVNbW1FS2pRdnMrajBaa09scDFWL0ZsVEl5NHNucmlhWUFpcis0NFIzSnkwaExoN0tabC80NzRyZVMwNFhuc001VEl6VDEzdUdFWVB1NHN3eVRUNXNRTFpHWC90eitRTkRiRWVXTzNtbTZhSU5vQkw5c3UyWWh3VG8rdFBCTndjMFNqZjJ1MzI0N1FHSzBnL1VhakVKZkZzQjlSTWs1QjhMK1ptOWZKVjJCdjhDbitBWEF2bXZrNXg1R085aVlUcVpqbHZhY1ZUZEdMVFdPMmZ5UW9XK3BST2dybzFzMFB0TGFwazVaS0xub1g2ZjdGMVl2SEI4SUpvNjhUMnRBVXdpaHhiT3crMHh1QlpEUVlkaHdiNzhDQnhEQi9vYnVWME1hY0JEenVFbUVXMVdqMk9vK2J0VkE2cjVKczEzZU03WUVCNHVGZmRiZHMxVk9sWDVkZ0dYcUtCV2dNRlVNdzZCTlNGS2dQY3EvVVdmQksxT3NXcHIzOThubDVwZU9yK0YwZGNZV0w3RXovTUVtckpkS2tsS1VSUVFiakc2bHF2L0l0ajNwU1JoWVpkT05xMmJDSVI0Z0lxU2k2VSsybHEvaHpZazZFMTZGTzI0TmZMY1Y0SUhGcjlscXhoTDRzNlA0eVFCc0JlOCtjRTdUOVRsOTJia0JzN3VNdUZ1dGVtelBBZzR1YnBGVlRCYmlzMEZFM3VRMis5bUJ3M0o4RG5ZYzNtL3FWV2llcmpBM28zcHJ1dFhZTENhQTFSYnJJUjFkMGFtYlVGWGV2ZCtPWUZNV0FQblFPMTB2UGVtMVZHKzFDYytmWWRMWkpmNUY0MnU4U1BOa3NTNnZuMUhyMmhVeFluMThSSFNBUERLcFFZOVk3NUhRT2VxcjVFd0hDQ09JODVneFVlclAwM0hzbndRV0ZUWEt1OUFsdHJNYzNaanJjOFMvaEtrSXVIT2ZDdnBNdTdhQkdpWUpOQkNzaEVONXVxS1FpcGE4WWFzblZML1FrM2NXSGtuN2JYckQ3THQrNFhUa0RMSktzZkxFZzJlbk9JQUJRbGZkMlpMbEVmektvZTdZOHJ2M09Na2duSThlSEJ1SDAvT1B5SEU4ajVBTTJCcUJDZXRPNkdaZ1k4aGg5QmVZWUtZeldoMnh5bkVvMkptTWNlS2hBeTkvTjJoQm5GUDczempKL1RXS2VKMlpBUzdIVTRBY0tzNWtWTDNNODFKMnNSTEVrenRUM3RkK2ZBalhWc0prQWFocGJFb1F6Zks0QTNQWE5xdzRxUUJwQ25ZWWNzVmt0SlpnVXFndmRrUzRVRldwR2dHaGJmUk5QQThJSkNGRVJDMGdvWk5nbHZ0M1JIN1pwSzVrVmgvU3FvQmRoZjlQMjc3cHovRnVxa0lCUDEwNU9aYWxiTHM1cnFyR05zMjRZLy9pYnM4RXRpZ2k2ZXl4amdsZDl6LzBCZTN0Z2RYejQ5TEJKQ1JQNi9semdaSFlrRm9jOFo0a094MnNhUVBjUmRVZjRTZVgzKzBsbTVSVHZSQ2EreVVWZnJpNUZuOGZSR3BualFkNGZGaGlKUGorOTRONVRyc3hEa3liSDJFZ2M2SFMxOGVoc1ZPYW9zNkM1MDJKcEc2YnJmem9lajQvV3k4YXROeTFwRmJSN0lHckRqc3Z4L1JzWWhlUS9NQWNOcEFBeG1qbGppUjFOZmlZWUc4STYvSXJDNXVjT2JISTgvdTdWVjVpMG5Pb2pQRmtNZmhhSjJwVWFOUlQyQ1Y4dHQxelh0anA0a1hmZUFoYTlvYTRnbU1QUEs4T3RsMllQd2tNc1hQaDQvcW9VSFp4dWZjcmQwUHR0dTEwU3NSVGpOMVQ4M1FNS0VoMXNoOGJybWFzY1lkcTFRbTBSaVVSK29PVkxxb3F0RkxnbmNNQks1djVGaktpWkoxMmhlT1BPcm9QWTg2MGk3UG9lTXRMRlljWmk4OTBYU3A0c0J3OWdHRUVINFRpWXJFMEdHL09JZm4wdXN0cUdYdFhtWXFZZzJ5UDg0eElJKzNRdVJKNUhXQ3V5UUl6blR6T3FFTXFPTmJSYjFNQWdPY3dIOWtwVjdSelo1UGxCZURnM1F5RitUTjIrM2F1bUo1MUZsOU1zQkhxaDNaUWlJVlJyYnlXMDlUaDcvRFJDSzlua2RaZzIwVnJleVZQZDRicDVQZWpSQnhVdEpNZzE3WXNKK3RsMnhpWXczL1dWNGNhbkxESnZMakF3bUVOWE9RTktwczNUUzZlQVhVaGtBNTdEanhtWG9CRFBsdER3VE56TkhnV0FET0NXeGpZaDMwNC9wWDFOMThJLzdSVVhtN2l1bHR1RFZCam81UHBsUmlOOGNOTFFkL0RkeDFyejZWOVRtYkZIRmhJR3hpRC9FNFNaSTlOaW9Ka2VGSmFaK3VZTkM3Uk10UWgxN290QlhzUWJsQThwYW01T1BzNWhmcUl5UFhEcUNTSGdycHhwRnlPQUNxRHVmTlR5cFhYUVFlVFhzTTQ0cGJ0Q21WTklTVk15L1o4S2F3RkZ6d0d0dDdUZDhNMTZsbkVOei9SNEkwTXd4dVdzZk1hSm41RVd4aTNZTXhYYTY2VEJPMENlNzVVWEcwbjBoSTdxQUhJUXV6S1ZnTnp3WjVMQ21Yb2pQVkNPaDVBb3VBQkwwR0l0Q2lmVnI0dVRRa0JqS2JqeG03YWZLdjhOWTZua1dpZ2hKekRHQmpobU9xSjJHNkw3UkpKa3FuSHRGaVZ3Ni8wNXB6aFE4SVQ4aEdJMVN1UDZtdWVlVVNwandJTXd3QWpzRFhSWlhhRjBDRWlqS0tRYzgvSHFpa1V3SysyQlpIb1djUGd6UnorN2M4UjVxSFR4UW1ZRlN0b3Q0U3NDYktBTjZvMDN0UU5teXJCNG8xSjZQdjRsN0htblNwLzUxaWNPUHZlbVVyRC8wdDRsbFBFemNRdWZxeDlWWkpHM25pcDRoV3JZdmE5SFpURVhEeDlMUE9QZVhzVy94MnY2aFJLdlF6SHpZZkpvMTU5TUZvN3VLZVdKdWZsZm5OclNqYUxlZlllZm1QSkk1c3VvMFh0S0U2VlhIQVczSjRpVVAzTTBJZ2RJcm4wNGhaUnhYMGswZjVHTE51T3JJdDhaU3JKUFlyWGs3RlluT3A2UXp1U1Z3WWZ4OHZVSVV2cHRoaWZXcTFuY0FhNkpCZVlaQ2dqMFhWd3VXU3lJUktkTVR4WVcrOUk3bmhheTRaTjJiSExpR3dHYWZjeC9yazNaTE9uL09QM05tak1Wbld5RlZUa1BXNUJTVk1Ub2RYTWxCRUkrSDcwNnAxLzVvM2RQODJYRGFOa3MvSElQV3pCVHZFUURka3FGTEovUkZpNEpiWmF2c2lLdnpaVVdVYUVyVHJhaHFhTm1NRVRwNmxRaUVMQmVhbzFzN2ZKWUhSNmNlMWNIQVYyNFF3OXY3L09qOTBQSWE1amJqajRhVHB2eWgrK2RYeUJ1aUEwaU1WVjU4RUI4TFhhMXpiKzZzVUtSUUYyYnV2ektZeUNnWHE3cE9TeUtyN0dXZWNqbWhsdjZyZUh3SXhuTzcvc0pGa3FCMU14UHh4bDQ4bkFYbEtsbXNET0Z5d0R0VElxdnlMa1FnREZhS0kxektrSkVnMTlvOEdoRStqZVJFc1BsM1RkbEhNTTI4NC9tYVlsaS91NE1xK0YwUE5KUXdQMTZBQXpBRU5vdUdOSEg4amt1cTZ6NjJkSTNQWVlNYzJrSExnYTJ2SkFnK1l3bWVMWU5WYy96UThZdlVGZUNZK0JaYWs1VVUwNnpiTXpNQ25TNE9CaE1CWFFINWUxeFJFbDVhbHB5c2lxM1A3Zlg2N0Q2ZmFDd21PVVRMM2lqYkVOY3pFbzFod1NvL1dXTjFMZVV2aXZsaGx5c3EwSVU2SSt6OGI1bUNXWmpKeVN0Tkx5NE43OFZBSGVyWjFJRmJmajErMW00akQ1dTFGYUN1a3BvWXBJa3VQWmExVjQrdFVFVTVQRjlPU1hLUVZUT3piZHQ0R3BrU2txS3dRTGhQZjV5RlVuY2V3RVRoa2s1NUROdUJXVHoxcW4yK2lZdmdibzB3RTZxYzRCT00xby9ra3Yyc0VUZWtCRlYwVWlpV1dGYzkwcGVhVE1vaWoxOEQyZ25wcThDdnlvSStKYk1RbnJicEhyWjdCQlVhVFNhekZub2g4Y3dsWHpOcU5EcDJvQ2ZpYmNMSlpKZllsWFNIcDdscXV1cDh6WHpialJaNDJQclBwMm9yM0JqL1JnLzVKUW9IRXJPdVE1VGtGYkxqaHFBeGF0N25aNXhUcUdINzFNSDNlUm9OcTYxOWpMSEhEZ2kvOHRXRi91NGVLcXV0a0dCbGRFeTN5ekNUbmE5YTlrb1ZvL3NaTHNvYmlYcmxTcjNTNjNCWGRVZ0RyU0pPSjZvUTVoT2RCbmRSZFZGck1WRzBmUkhTM0xSdm16MWJVVk1wQ0ZJMFg5eDdBaXRibnFiT24zbDZWcyt2b2plVmdZZGU0cGxoZEJMOWZyeDBpeW9vdFUvcHNnZ0JMeGEwS1ZTc0lIS1MvTE9EM3J6MFN3L2FxSjhxVStCdmlwcUF5VFJXVWttcWNtTFdpZEY4WVYveVBEYWVoWUwvT1JtNllXa1Q4OThWTTI5N283aDdjWG8vcjlxTEVQRUt1Zy9GMXpka2VVNWlDaVk5RmJJSmtMUEhNVCtMbVp0eHh0MCtMTE5SdStIdkt4TjVNVXUxdkVpZTJTbVJkdlEwYjMvUlVSNGdqWjRHdWVvUlJucUZ6VVBvRDBJSDhyaVMvTWs3cVdtSDlFNGE3VnAxUVdPekY5WFA0bGNuYmV6TkxpNU5aeUQ1MEVETm8vd0RqRHRFL2IvZFY5WG9wWTZleUpaYVB1R0xuUy9KT3dXWDh1N2hiWW9Kb1FJRVZnNUZoZ2o1QVdBK0NGN1ZJMmFCLzNubEVQVXBzRGdLVUt4dkVWOEFpSjFoazF3S2crdWRpSXlueVRXYUV3eWp5ZWIyczI2bUtINGZxeVpiT0ZWRVNmU1ppemVlREdBSHFaUk9kRlBDSFhLVlVOWmtvMTROQUd2N3VpU1Vsd0s1SURURkxYSTN4N3NUSkJuMnRDNWoxYUloNzhtR3ArUFNzcFpBMmlhalZuRUhvaWkrU2JJMVdIYTliTzlIeU9TcjB3QjZUazN6VFZaM0RkK3hqdU1pVVFaR3ZLQlpMQWVFeWtpd3NUTm1oUUI5cmIzcHdkOXh1ajR3bmh6VE94QW9wUUhrc3FsRGtkWUtFYmluVnFMZ0JRekRNMU1SUkJWdk80Q3pPeVAxOXVHT0hNUGdpWXYvQStjUlNpcHZzeG84WThVS3lIVG44WnFSb1JVVWw5clZvMTVoVWVBeXFpd2N0aXp6ZEpzYkdoNUpuZHgzMlpJbURWQjNUR0lsYTkyS0hLK01WdjhJNElHS3BvNWtLRWhkMDNrUkNqRU05czE5VGZ5Ui9NZGxBYnZiSkI5MGJEK2g5ZXAxSzA3Ry9yL0tybzB5dytBWEpjMmlSWm5uL29Cd3BvQkdxNDFrODBOMGpJVGZMN1JpQnh3MUU5aHN5bkpZa290MTdjeWtsclM3Z3pXQ3pub2pLajM5TGZvaXppQnRHZ0xzSkk3cEZpS1JHajBQTFBFWDRzWkJKSUFMTHlEdVVHMFlkMi9UUUZpYUNyL0xScVlEelFLYTgvd2wyT0FOWjViMGI4dHIyZnVkRkIwUTEzR3ZHM2t6MkU1c3JPN284OUhuRXJKazcxcDRlSERxYTlFbmcvZHNaSUhwVTRYcnNzOVFXaU81R0JPK1lYc0NYemJWb3hUTVAwSGRJZGVVem9tQnRaSXc4OEtyL0F5Z3VJZnFPWUJ4bmNGcHFFbkpVN0JtNmVpQUp6MnJvc1hvc2lIdGlvc0NZSGltMXRiTzgvT2ZEV2FMeUF2MFhtdGg5cFNRN2I5NlJqRXgwTjlOMGw4L1ZwT01LZzVSd2FFMEpOUTkvdDVOL3lRVVlGZC8xSmlQcG5hMy94RmpPUFdheStPZjRlQ2lMVkY5ZUttYS9uTXdrejdmNG90S1FuV3o0ZFFwY3hRbWJ5cGh4aGUvVXpEL1QzWnY3SGg1YmRpMXZqYmVab1B2VDh0L284b0l2eTBqLzJUdm5HNDd1T0Ztbm9ITEpzK3FOYlJIY3M5My9uLzlCcDAwWC9BVU1oSGZraUx4dktLajBsMEhBaXVCbWozRmxxcVJVSVQ1YzdwL3ZDTGJwaUN6YmUzemFicXo5WCtYclhkWEpCZnZpRFBOWkZ5ZkJNNEdtVWZTT2JIYkYyb2EwaDY3VGRybTZudGtjaVZOTmJKck5uTVZONXo5cmU2NTdyQTdzUFFEbExZTHpkQ2FOSkVWM3VhK0l0R2IxVlF0SkdleVZXaWh1M3hacFZ4QWpURDRLbmtLcDlaU0M5MlNjdVFuQ3dYTTl5VUNkT2R5U3hkR2ZmY2VtMkM0TnduV3U1Q3EyNTJiY0tNOUNUSktaVVhGalVGSk5qWFducEorYkhlcDE3aUJlQkFQSWxaM3Roa0VUMmxia2RoMnFEZDdSYmduOTl2d01CZGozSFdJTVNmTkhiN2hEUThGQVREVWhTak1PZkxBV2lkSXVyQ1cyb2ZJTGlwNTFFcDFRck5YN0h3VUtLbVlYMjZmaHVxWGNnTWNkd2RMaUdXY25YWlE4azRhSlpzQlpPOEhWVHFYTGRIdGZLeGRKVmdIZDVRTmNha05hKzVIVDdNdDhNTFZjZE9xYVhUY3R2dlZVaGNvUVJ4VHVSNFQxU1JadWllSnoyajc0Y29UUDZWQUpINGcwNlk3Q1FHd0ZVK3lHWUd3elA5bVg3Nzd0V2dmcmJ6NEptK0FTMjN3T05pamZCRzV3dUxTdnhvQ2lNTlZuR1ZIWlNTcjdBVHZyYnlVNGRnVGJUaDRsWFQwOTdWM3BFVVF2UkJzaGYzK29TSENXVUlFUHNGV0JBSXNuUXRGT0pZVnhoYkxzZCt4SVFrMm1KckFiS1JvZmpoRDJhcnBOWmRPaERnMFZrdDkwbmtRTCt3VlllWHducUVOY21NM3p5TkFjR0RMaG1GaGwxWTU4NVdxWFRqRHN6WVFpUHQ0TzNQUWJXaTI2Q2l2bW5PVmNmNGY0L1FzRzZsd2UvY1JVVDZXa3hwVEs0S28wQzhlR1M0Q2l0SEZNRGpSc05rK0pTMHJVOEE2NmtHTFRWK2xZR3JrNU1nRGp5WTcxUW1jczZ1SGJkUU5ua0Q5dElJanpaUjlTclUzNVMyQjBhbC9mZzZxNnF6TmdqUHdWSDdmdVl1eW5iUjdEQlpkQXFMREJLYjcrUHNWQVMyb3RQU3E2UlJhVE9YdlJLWUgyekRDVDcrSS9uRklaRThQUUVQelFJbGp3cUU0ZnJhbWoxUENFWjR3TjZNb0x3ZEFkTHViRWp1aUpialVwLzloMmNvRStJNGJRZnZtYm96TUY2TUgySzVEcHAwaGxvUWo3c2NKVjNXZVIyK0swT1ZhZEhNL2EydjcyYnY0SGdSUGhrZFR1QklnNHhpNkJJc2R2UjBML2FPV0xxNk9XbWJjbnM2WXR4ZUdxbkNGa0hUakdPUlplSUhBUlVzZkZPVTdqSlUxenJuN3JXaFVHa2ZITlcyN3Z1UEduaU12VFF0S2NHdVVXMENhTDBITG15QlpjcTdEV2J1bVprWFhGT3hCaGlUZmo2UzZqNkpGY2tXaTNpMjJQNlFOT09UaVV6MjFzbmlMaXhlOStGbWZtdGU3d0t2RXowNDQvbXNzSERqc1cwVkF5UEZzNkh2ZU5XK1h1TGNvVU1tWmlqLzkvMko2TEFZMFdPZm1iUExCallSTnZaTU9oYmYrZ2MvdmlJV2ZwOW4xa3M1aFN5dk1FSzlkcmFhRWtYRWh5clZFTmRmemQvclgwL0syejBIMTlwaXBuVkl0SlpDQ0h1ZER3ZnZ1dXNaa0JqL21PeHBJNVBBNFNNRU5WOTMxQ2RaUyttL0ZBSXgzN1ZZOE82YWxwQnRFSS9Ob2RNZmxiN045Yy9DQnJrT0ZYOWYyTEN6dXJRTU5LSlM0VFNJcGQyc1ZsRXZJTjFHTnZTR3pmVzllVi96aUtRcjVQaFJLeFU5RG4zaGF1blorditBelBaV2JlZ3NyS20xNytUNGtrQkk2S3RjalJQcjk3VGhrUlBZVVdGWTVFR2hiZXFGVXcrN0RUZVBRUTcwdlBZTVNjYU9CQXZxWTNETDdlRmI1Y0ZzbHoxYzg2ZXZESlJZU2p1d3loWm5wYXgvYndvVzRKejNEUEYwVE9XS21iSHo5ejBRYjFGaDcxRWlneERLbUFCMFd3SlRMZXExcCtOTVdUM2ptRHNGL2VKOXZubjJkbS80aTRidVNOb1V3bmJneGgwNE5CcU0xdksyK2VlY0NGRng1d0trN0hSMThmVjJrN1BQNCtEd2ZHWnFEL1VrRTBvYllyWjVzWEZGQ1dBZ0ZvKytTaHM1bXJKWHY2dmtqRGlScFVncWFLTlhkZzFVd1NEeGo3NjdCd01vcnowdEsxVUtGRWxFUG5ISXoyQUxraTNyUC9PR3VheUlxenAzc3RYWEE1czFreVpMcmdoRkhzVzlwL2NSZnU4VXptamNYSktaSm5TVTBiZnRzL0NmT1VQNmgwbDQxYThpVjRra1JReVRQd1Q2OTQvWFI0MDFscTVNZkxVZFpHcmRTbElEQkQ1Mk05cFkzd2k0M0FnV3QweGE4SUkybVpJQUYzWXRPQmlOdDJGVGU5OWdyL3ZhTnJWcnBBMkxneWcyT0U1MFhydytSektJWndVa3RIU0VEa1V6OTVSUHhkb0hpR1NoV3RoSXVZem0wVDZzQ2YwWmZRWjI0MTdINzJENE5xbXhodUZtNGQwa1licTFXVmhyNUFTNlgxMEVXdm9SUFpIbHJ1aXZ4Tlk2Ullucm1TbEJMM1orVkxwZHNRTjAwK3BSa2xvRXhBd0NrazZHVTIxM0dEV2lVc1pQd0J4OE5YcFJsbkZqZE4rNlYvb2E3d3pFY3cwZ1ZGQmhOWVdQNTVacUNDTWtNL09XT01OQy9Wbko5K1kxWE1jclBoNmlYYkdnNWdVVU9hWlVZM0dRdk83LzRkVXYyRGNmTk1NY1BTZXN1c1ErRGpRYlhRTmlqM2gvRmQvbitTQ0F3RU9JNTZ0YlpReDB4ZjIrdG9VcTNieHhING41QWowZXhKWHM2d2Y3dXRoRWs0VWdubEIrc2t2cVBqalB1WEp3V0tRWlo5aEZ5RDRtNXVzUHdoUFBaa1Yyclk5QmprbW5Ta3ErT1Vrd2JhbnNjV2dMWG91b0xLM25rSitVUEEzOVVEYWFuZklMVklqeEtldXI5TExaNnFseGdNNytDMm1uZFE3MHozd0Z5ZXV5dGhWcHdHRGZ6azJEck9xSXlYK3ViTUkyaEdpREFUdnkyY0FSbEtlR3hZb2ZWLzBiZURVbC9MQUFiMStxTWVvY3N4N09UcEhKekpGNjNRV1hiVTBWSk1CTE9nQUI5bkZURFZMTFJoMW9vR2VPVkZPcW14dUNUcThsRDNwdEVHTDRQeXVGbTNhaWZPYlkyVGlLT1licStXRDUrRW5jZ1ZEc3FvRnk0dFA0ZlpTQXg0UFpYZllJOGVrbGxoeE15bkVmQndPczA3RUlJWm5pTExJMFJ2Rm5pckswcWYrSVZRYit3SjNJMEVqZ2ZSNk81K2pFRThFT3RZMURLT3cxZm1ubFlna3BBb3NHeXViVC9VY2N6aWRvYjc2ZEpwY2J1d2Nsdys4TFhNQXhZTGNUVW9iSzNPTUNPdzZMYk8zSTlpQVRHNElhc1FOZ1ltcFdkalNkbmxQWHd5aGIvY3VKQVd5cmdiZWhVZHpjRHhvdUx5VVM0blEvMmwwcm5nS1hUVU43ZG8weGZhWFV2eHZERnB3SjROMzJaMm91RGNOWG15L0F4Z3NBcmdxRVJVWkM4RysxUXR0WVJZazFwWDZPVW9Ga3JjMlpRWTZsY2NPeUhiejN4YTlnSVhGa3NSeFU0Nm1ETWpnZ0R0R096b0xlL1NIS1NFNWJFT21rdWNlTlJDVVNLUkVoLytJbGQvQ24vTE84VWRMNWV6QWw3VWN3dE9iN3dtWFVDUk0ybGJMbW9rVlhCK2wwV3FRZHI2Q0NUT1p4SU5xQ1Yrb0czVXpHT3JrY2hrb3oyUlpseDdhSEc3RCs2c2pjWFJZa2hjckNHZk9pano4OTZhRkU1aDEraWl0clF6anlMQ2lBWGd3YnNTVUh4UUp4cTFra2dZZmU2VmgyRlFTbjkwQ3d5ZU9ZTU1vRGdNUGxURGNKTTFVbTlYMll0eGtTRkdXaTgwOEpMS2ZSZkcvbmFlOFA4djBUUEkvSHlzL1pGUHV4aS9OMjA2NjdrbXpCSkNKVC9jaXJCWGVCSXM0SlhrWjlJK21BUFAybTcycHpwQzVscDgzYUJCOTBpb1JDTUowV3RSUk41RFlHYmsxTDk0T2IrNzNSWkhhc3MwOXdkM2IyWm56ZDRIUlU4V1dQYjIyTXk1Mzk3cmxpL2tiRDBQNlRwKzNXRUxHc3hUcEFTRVZldzEwUlJIU05NZTVUWEozVUFJaDlCSms3a085UFArb1VpVWNNQTBla1grS1JaRC9qcVFIWGE4N3V1OGNOc2pkYzUxNUlGb0VvWlBFZHIrdjdGM1A5NGZsc2kxOTBPb0NjNXQ4aFZtaWJRYmlrT3VVOW5rSVpDVDIwUnBMdFIxUVBGeUNGMDE0L2FyVi9IdlNIUmJid3dJWThQaXpCSnRmOXdBaHVhVERMWGZzNnhWYVFoeElUUTQwVlhKcFJFd01GSTlCNmdZYXYrQWw2NUtUM2dDVnRRSUEyRWhhamdWcjZWNFR6ZWhpZzdNVnlGV0ZoZWlaQk1MQzZqdG9LTnFIUTUwMG9wZE9reE1VZGZwM3k2bkhvNGpCS1NwRjB5cWFtUXRSMnJ1SlZ2Z0EyaEtZZjkwemFwTENjVGduSzZDK1FFWFlCOVJ1c1pSakJ2RkhqZWdrTFpMZndLeUNiOW1CTGNkelBMUjZsVHI1aFR5NlJwRnE5WkllbFR4SG5TOGdqWWgyNXpnVWdBeGw5M1prZk0reU1RY3E0aXNhNDFWREY2Z2lpZWh2c2tKMFRRMXEyaFJVbkV0VTlNYjB1RmNCd2NWNUdIeXd1RlM1UzNBVHhrQWQvdFRwN3hnWHMxVHBSQmdrQ1dRdUR0TnQzWnFJaWxvaStjZHlxYUxwTE5XdXh3cTJUU2c2RDhLUjJqSmNxOW9VK0pYUVFub0l5eTU3VDZRUW1VR09sMzdkWHkxYk9oTEo5TVhFZ0tsdjFlMFBCUnRTbVMvSVRPTy85dFVoc3hxajBZMUtOWWNVQlh2RDd6V1VEbEQ2YkpFZlp2bjd1Nkx1clUzcTFqK2QvMDJFcFpYalg1Ym9zTUt4R3dKQmd6QUR4T2pWR3FWVUx0MlgrWE85eUlzMmxoMzlpMjhCRmFZWEVPay9mSmIzOURjT3B2WWwrWThPanlCRVhYOFFsRUZqeDV3dytuTVVOcFVQeEh4dzc0L1NjMzJ5S3BMQW4zY1hRWTJWdG9mZlk1aFQxb0tVZEdFSWZVRTNKWnNORVY4aERaUmtRNFRoR1VTQWw1SzUyRmhmT0JtaUY3Q24zRVAwNEpLSDZ6RXZ5NUpRQzhBN29sWmJ4bzJlZVdUK3M2a1FPV1l1bkJIc0V6WEx0SEJ6WWVpbFNmYlgxWXNMbms2TlQ2OFRYa0h3Sm95NXhjVlNTR21EMDRBcmd5U3luK0ZVdWMvQ3RQcGRiN2ZTeTdsS3c5YmY4cWxFWi9QTWVPTjhDZkk1TFBySUlPOFd0cFAwQ09nb2hWYkIrZGRsTjJ6TXZkZTdqYjhPSFRDbFBhT1d5T2VrTEJVTU5zQXBVSjZvdlpGRlU0ZE4vaGYrQTMxRnlseXp4d1VSeFN4Qkw5M256dGlXbWNGYUpXamtGWXR2Z2MzT1JyNXFKK1VVVUZMQUorcFgvY2MwVmR5ZGVwT2dGQXNqNUhTbUZlVW5WWHd6ZE54Rm5yeS9GMi94Y1l3ZDBNY0c3aVVVUUFqU0VFYVJNamd0NVYzUGQ0OGowb1gyYXk3Szd2bWxvcm5HTnR1a01Kb2xyUXNzVm1LMmhpczYrcHpmYXQrUEljT3VIUndpUDF6ZDVnVis5c3Z4QUJxSnF1SmlyL2RTSEY2RnJPa0dxdFlFZUlwMUhCU0YyZU9rT2pFVGVqQkhhQjFoT2tRdHJRRk1XdnhLSXo2MmNPOUQ0QXVOKyt2VFdnengxNHhFdVBvd2U1a2kvczNSVVdJWXVjWnY2S0hST3F5dzcxVldmbDVpUUwwdHZvcGQxa29obWM3YWc4QW9XL0kzdmJFQmR3OFZkKzlqaVFPaG1IRmROc2ROVGtKTTdUeVFONVl5OXVDSUdTdWNMaGd2QVpQUFhkaFdOaTZmckRBbWFTSXM3SXBGN3VML0ZzczdjRDBnWkRtMjRRUEFlS3NabGVPM2lyZ0FJNGJNbzVseGM3dm1kbkdabEFYKy91c3I4ZU94eEc2LzBzM013WDlKWjNTUnVaVm1yWk0rVksxdVBURmtKWUJTM2ZLSitoMVZnR2V0QnF3ei9SNy9FL3pRcjRvSGRRSDQvNU1Mb1FnTi9NcDIyVUQ2c0tpSWY1eU9jYko3R2wwbVRDcnhYZkZsbDBTbDZoa2hudmMrZnBaZDZJaW96RE9pV0x0bzZMZUNyZEJ4OEFVL0ZrcnV2NnovTC9TY1B2VjdxdFFaUXVMZnBwSFU0ZXZRUHRXdnRnYWxHdzFmWndCSkFzdzM4QTF1eGVaWTVYbWxuTncreklZZWFiSzgyVnpSQnRPcWZDdW5mb2x2aDFyRng5cHM3QWhZaDdFcTNuUnc4WDBtN1BhdHFhRHJHejl3b3hmL0tMcklTQnczUEtCQVk0NmJUdXUyUzFOb3hPTmV0VktUSG9XRUFtUHlxcTJmMmJOUDhoTUw0blhmU09sY0FHUFNhTVJGUzkxRWo2UFh3RWJvdkx5Z09IanlraVZTTS9SQTF2L2NwWSsyUlZhNjMxMGlvaVNvMVpNU1I5MHVGMnRmNlJCUERCTnFHUXJ1bVNzM1poS0YzZjJIVFdkNThWd1IyTjRPNHpPQXFPSkZBUXNTUWRWeXNMRzRMRG0wYkJaLzlSOVJNN1MvU21nVGJTQlJLTVF5WWY2WEl6K0Z5dWp0aEprdlpmWGUrOTd4SSswRnJ4dHFXMC9jcTRjSUpnU1NGSlZHRDFHZm0vV3l2KzhOOXRSNUhCZ1RNQ2YrMDBkM2hhYytxampXRW1ZV3lIeGs5UHFQczhiTDVYUGUrZWtJQVVsSHRPR2JJQ09UMW5tbHFvMmdmNytkakhpUHd6Q3BDUkM3TGVYa3oza1RZWHpTb3F5c1BTNEp1ekhBM2ZxaEFJRzJWTWV3VWQ2TTVKQ3ZFeTNyWkNwdXYwOXB0T2xPb3k4RHYycWg4R2pWMktpdmk2S1RGQzBwVFM3YTNCbGNEY1BjL0Y3U2RJbDR1VUxTMTNWZ2xKc1hXTlRVMExTN1dwQ2l5MG1uSkk5dy8weUdJcXZMMFBlakRmQ2RoSVkwaVM4NkxlN2I3NURrV0JuRFdFV29vUzJmZ3NWQ3J4aHk3Umx3NGV5OHBZQnlaUzAxdndibHNHRW9QdkdPcTVKSmNpRUNZajFFVHN6b1pxcjQvZm5pVFBCc3JYd29tOFlnZXFmR25QUFA3L2YxQm1RaklWcENtak1DczVBaXFxV3dhbmxKVnMvemhBWFlzVTQ4WnFyZGhCVEw2Q1ZHWURSRk9iT3J1WlJqZ1BoakVyMTFyQ2J3L2p2aEt2TG5sZUtqVFRqMXp3N29XZk4xM1BFRXpTRGwvaElhbzFrcDJDTEpBNXhKeW9rN21qZnp6cUJXMEhBNGN2d0VkUkdTUVNoM09kUG9sMDEwZlRKRFE5RzRnL2poRUxreFVJQWpWS0F6bmcySUM2dG9vTVRqSFJaaW5ZajQ5dGM4dHFqU2tlTlA4QWNZK2M4UzM3dGswV09qY1c0eitxMGxxNVE1MzJubGhCRlVKMTNVZHJaKzl3SlVoNjh1ZjBMZDZCWEF4czh6cWozaHIwWUsxZXMyc1lrQytYemszK3FISmF5TXdRNjJYdFhPOHlHaGZoUHZqeTI3clp3Y2ZEVWNmbGoxeDhwb3dSQ0IwZ3VSQ2FoL21aWVpIanRmdmxtM3ZDMUd3R0dxbFNvVGZLeVErRGpnblozeXYrc09YNEtYanBQMlpXM1l5eHJLUnV0Wmlja1ZGQXlVNGlzbkJGSHdiTmdxYmVjWmh3WUZXT2RnQVI1aVp1NXlLa3hKYkF2c0RyWk9DMXRNTDhSNGJvTGYwVnRKcVNNZTNJRUJod0pPaGl1Znp2OVd5UmJZbHNYUTdoOTJHR3gvdEkrL3BGMzN5Sm1GUHNUTk9SRW01WFZDL2dpbVJDZVlyL1hua3dWRFdSTUdRQzE2a01XN0ZSY2FPZDh5bzJQTkMyRU4vOWdWdGtZU3lNZis5ekdXTHk3OE11M3N4cVFUQzIveXpRNXFwUjdIelB5VER0cDlhRFNKK0MySU5ZZE1zcnZVdmZqWG15U0phWU02UXFySEF6UE1hcXk4dnducml2QVVzNnhtSkVDMGtoaTlubTIrdXZ1UHVaTHMyK0F0T0tjbVFxV095TjVJMVVyQWZXQmZFS2U4VldNb0lHTkNkSzN4ajNGUWVCN3Vyc0YyWElTTVBHZzdMYk5mbGRoME5ZL0F0VVBHSVduczlpS3diT1BiQnh6WTAyTk1kK3d6U2c2bWo2eXhQbVNxUUFjanFhSktyY09kamxkbVRORHdQd3YyeGtPcDlva1MrNGpXS1F5MVd1dGt5ZHJXKzlMbVlaUWcydllETUg5U2tPQkY5WW9qUTFWcW00R1JtcmJXSjVKR3hqUUhIanV1cDJuWWVKOFJITGdLRTV0bVpkdTdHbStuVEd3cXN5ZzJkeHBEaDYwYzYrdVZ1UVpQU2o1aThyNXM3aGxnU2JvdXJBdXRUWUhadnlQU0pTQ1JIQkcwK0Y5d1JUZXR3bzk5OFNhNkt0Z3A2Sk8xMnpwMmlwVEY0T3ZiNk4xaWxNNXVKbGpKVHVCL0psUFd1NXZENVdYelVaNFdEMGpNb1VMa0MzbUhtbjM0SFNqVnk5ZEI0S2JDYkhYSTJ4VUlXUDVKZ3oxV0ZQanl2NFpuQ3l0QXdDNlVmRTVZcS9ZWXBrTGxWZTVFdVovSWQ0dGh1a3d0eXUwUlVXREp0NDBtUURWNmpaUyt0Qlc2UGtwQlFuK29oYWhxSmJkT2lMUUpGUlV2RkNEVkpBM2V3TGFYN2FPS2lXMEg1WnVaMDYvVGZ3azI5QnlnL3dYTkN4Wi8xUXptK1ZacjYvN0Q4K29UUXAwem1IcTJBWlFyMzk5OCs2NldacVVsc0hIenFucG1YN2grMnJFb0IySmRNM3BzN2x1MFc1Y01TcUtiNCtsSDlidUovY1pwNWxURjRXVlJsSm5rbHloamhuaFUwWHZkbjdkeUZicnJFYWVIVU5EK2lwMWRkRm5hQzFTeGVSVDBsSmdGeWVNbGM5QkRpWGd5bUlqRUFkZTE0RVJRbVluOEZ0NUtkL29zUm5JZzRTU0E4L1hsNnM4c05HaXdiU3ExYVNLWUJOSVlNTlJhQ1ArUkJBdE5pSXpRVjlmZm4wRExrclhvY0xkZTFvZkV6eFhPa3lDU2NMVEhDajFsRWRwdHFiL0lJbGlNc2YyUnN0VHZmM3N0eXB3eWExd0h0Ny94K0RYakZJbXVHWHFNdVpaZnN1N1VOQVBoT2NoVXdod01LSm9XMGwwaHgyTS9wdVcrb3dXVmZ5cFB5OWpjRCtLcXRjekZzRzlTV2lrNVpQbkdPdzR1QTEwZ1V0NDg4YVJhQmtiSG05WHpPZ0xqVTdiT2x1YVl5UEhMeVUyTTkrV1JxVlVBSnJTNVNIVnJvMWhkbGc2ZGdmWGxGZkFlZjM1cXQxRWwvTkVGWXVGZEtWUGtzbGFPZmdDRnB3Q05yS0RHSGdyL2hMTUMwQ3JLaWZJaTc0QThpUENsdFZvd2VlWi9Ld1cxRTA2RnE0b3V6QTMyRjN2ZDM4MzAxRjJYeG93TmF6ODg5Vkl3WHY1STlBc1dDTE1TYXRNcUVDcno3dXQxUjU1K1ludjRpU2tVR0dENlpBUWZGSTVPaEZIQnZmSzNOVEk5QjlIMzhka0NiVWFTMm5oeFV3Z2huWENsb1VRSHIxVDFaWUVJWklTQkU0SE5KdFJHc014Q3VUOTlMWjl5MUcrQll4MWMyR1JHUElEL2xtWWJ5QVlEbXlCY003RUpEaWd4SlVoYUFBTm1PMFdTRFJaK3haWnQvK3h6UlNJNlU0Njg1L3kxZEF2dlNyL0xxc2ZPSS9zOXVRYk1YQXhSSFZWYVNTY1VaK1N2TXhST1pra1NTa0wyajF4WFhOaW9VUHYvVStvMjIwYkV0amlkV1Q5dFp1VG5EMnRTdk1iN0dibnJNVkNOaUJnK3JiTWJwVURYREZFampudmh6SVhKWmEvcm1VZjVEeXhid1lrNk9wclJxQ28zajFOWFBkOGpjWDVSMk5kWGtkSEhrbm9kb1N5aWlqYTdDOVRWSTdPeDd1dU9rbXQrNEo2OGlEMm1VK2oxdEZ0Z1FySWlaVjYyOFkrZmwzYlpjUDYzMWNGbFVtYUIrRnIzaHdMOWFENXZzdFhZS3c2NmFMbEFBZlVtM2xKeW01TWVxc0ZKV1pOR1Q3RldaczFOMFpTRDRJQWxDdmZHbzZ6QzZ3c3A1M3FiM1lSRUJNK3hzUXVIZ1d0OWY1d1JyUXcrcnF5MFVyM0E5TWVHMUlsNkZOallWK3VUNWt3aENSalYrc3U4UWZCS0I2eVVuS0p5czdMNmtZYjgrOUN2ZHUzazJuSm5lN1BVcnY2ZHhlVlNON0JOUUpEY2d5Zis0QWo3azEzZE54SlY1aWUrZTZlQklhR2hmSDF2M0dRdmZxODZWYXp3NmVMV1pkdCtnZUMxSU1teVJQT2luN2F2aWUzbWVtdSszTjhXZHlQVlg0SkJ3YS9CMG5lWFZEcUxGeGw2Z21BWnVnSlVXTC91RDZCWHFDWGVTZHpKOHA2ejRkb2lDdGxNRjBIZjJiM1hWdm9KQ2tJZUM2dWVCVlRPaWk2MlVCNHd0a00yN0NMZVFNeHNDZTVlcjFjdU1RQTRHQktmeU84RkZsV1RrZnFOenMvT1gxT2ZQUFJVclB3VWF2dVdNeDRDV3RBZEoyYTIyNE5EUlQvSndWWFE0SEg5azVqR0grazFUNDFtaEFQVnlLK1hSYXE3Y3l1eDdpTjQrMmV0VlpwZ0FCMlFNR1JET0k5K3p1MHpHRmsrZDZ0Rk5neW5xM1E3VlI3RjA2MUJuUFY3aVgwSGFzekRxa2ZNTkEzNnA0a2xxUHlsbjhaczdqSXgzakJrRlRtZmpEdFBETkt3KzU4R3J2ZWV3T0w0V0l2U1dFc0t0L2RJZ2tPSGhEVGUzeEtlZmI4RFVqUGdHRnBFOGxsVWZUUFpDNXFpaUxoT0VuRForT282RU5OZXZSUmE1ZzhjcE8rZXNlTENjNWNZa0JwV0UxSWRBeTBXdEpDWU9yT2gzYVhTd1JHSjNQOHRSeFlaV0FZUiszM1pGNkpyUC9RT0I5VFVBV1l2bW54b2NrdHNKR3lwMFlJWnZIYjlXalhOcklkdHBOY3pwUEpGVEV2eUtObmFJY3pldCtoMWQ4c01Ub2VXRDc4cGxCZ0xueEdVYTIzSHA5YmlDK2w0WGw1YXVXcjVQNUgxalN2MVdyaFlwa3BvU2NSRUQ5SzZaSlplVUtZSHRIODBUbWZWc0VRaHlzS21uUGVCZFZ1dmVpOHQrcDZwdzZJcS9hVWVZb2IzN2svUU1Oa1VVQ2pyQ3JpbXZnUWxYVDNZMnkyWkNnYk5EN0l3MHpYUklKdW9IdnpwT2J5akM5UVZkWUFWNnZVTUxybytYZERySHZPTy9LcmQ0MUN6eUVBVkNjUmU4cjNmY1NINFdSWDRjWmVWeUUvUTRVV2RyTU1IdzVDTWhsVXNudDlZWWVoWXN1alVmRkdMOWJ2SjZxL3pkQ1NXbGpna0M3NmpJMmY1WmpFbTU2dG56MnM3dzkvZXdwaHZQc0FUWVZhSUUzODlValFBZjFZajdFWE5FOTNVNDcwNlFET0o1dlVMZXRTckFtNlkycjI1NG8vR1BxdDhhc2tab1NRdUVIU2Q4OGxwWEZZWExrMVJTbXJRWFkzTktDRzFEUk0wd0MzaVpKTExERW84MzgxM0pUNnJXbkMzTUd2Z0JtbDJLejZUU3dkMXY0cUF2SWZXVEhCV2dtaVdyWEJjOGQ4UElZd3p5a2R0Q3pjMUdFUTdhWFNEbmZ4cFdERXZNY1hjb2lPVG5FcjFHNi9idkVhVVdoclByekVFZUdjTllxY1ZiaHl4L1UxRnBVVnpSSVl5QzI3MnRocW1ieDZnQ2lHQWxmNmJoQkdrRnAyOERDbXlIQWQ2a1BDZWNSRWVqTXRIT3pORHB0VThNWDFLZHg5amZKTDJjWHR1eEZoZ0Z1UmNHT0Z0TjJabTNqKzYyaDRLQ1RDMjRmSUlFRGdDZDNzRGd5a29FbTl6SVByU1V5ajlCMU56SGMzMkQwV3A1aEsxMFhHSjRiZGNKWEpSREJHeFQzcFBtNW1aWjk4RkFWNmI1MmZSYWlSQmk3cjhUbng5WEdLTFl1aUptTmRJNkw0VkFNRjVoMTZZZ1R0Zlc2eTJhM1JhV3VST1dmeHFxcEVCZDR4bXIwN2xyWjZQd0lyTXd0T0tXMVFxQ1VyVUJqb3UxMjE5OVZ1L0RzYzg5am9GRVUwZ1JENE1PRDNucmh6VHhUdWFtU3dQWS9hdUtvWTJJVzJzOUt5SlZkNXFHMmppN3VRZkt5TkNIWTBoV1RTWit5K09LV0tLdFYvTGlZSHJlcXJySDg0Ri9PSTNnakZ5eGMrMzVOVmNpeVNBUzFDa24rYnNIWVI2YzZxTVBiR3JxYXY0SXNYM21kZGJ5RFBDUi9oeUdMbzB3VHBIbUFVdVhmVXJ2ME05SDZyRXJBdHkwL0VlQXVKNElRVmpWRFlHTDBaMWR4cHExb2hjWU1iODdEdi9sZjR0ZTIyRnA2NnRvM2RsTGJIY2N0M1VPZVlubGhZYTNLWW11WVVuaGw3VE9RMzgzaklGd3RRWHpXejJuTmJvN3FsZ05PZlprYUcyN0FnY2tIT3Qvck9hOFJMdlpaSWJwb2RuTXZJc2RQcnArMDR3RG1zQXE1YXR0ai9JYjc3TkNuaTNyNmtZM0kzVGhPQ0pXSFBYS1NlemMyZ0JwbjE0a0QzUTRRZlBCOHVpbEFVRWF3U0htR0JvN2JUb2s1WXVxSmhJLzk4ZHRqSW9hb3pRVjNFNmhXdFJCdHdqZGN2RlkwRWFlVXBSZThwdWlER002QjY0bFZSUHE2Q21NeDdaa1g3M25GM1NuTFkxN05XMmpoUUNpdENDanhTc3l1SnRIaS9SMllCVzBNME5QTWx0dzk2aEdaOWRiYXNzenhZWDNDM0k3dlFjNWwzNTNuVDVRdUV3TGJQVEpkeDhvcmdlamY0MVExVzFUSjVyRzhvdEJKZzRqcmEzL1ZsWTN1anJwODVJOThpVWkxQWxZbXY5TEVSRjRrNXNFYk5aaE5uSitVajBPV1lrYWk5eE9lTUlvUk5FOG5pN3lDWHVzcUxzeEE4LzFiSi83NE50Q2RoQnhMWTdVeWkvTWRUU0gwdmZ4UEVaK1FQU3BpQ0hWcE1VTUY5M2dhYm83azU1TkkwN1BOaGlqcmtmVTNzcmc0c2FLZk1QWkFobGdVdWErMTNxdXpBZXhIVmlMTXFJZHNqSTQ3ckRZSElXd2tVUEJJV2Rab3VhQlV5VGx5V2IxZEZBWEFLa1kvMDloYXpESFZkRHVlbStWVnNRQnVyMW5MUWpGejBlK292bTlEallFdjhXY2VMYVhNRFpTMGRWRTIzOEE0djUyazJPVTluaWcvZWp6UUNaNFZPZTRhck8xaGxsS2Z6NHNjY1Z5NjhjUmh5MzlkRWxEZXNwYUhQZndlY2VXWDVKa1QvTko5d2ZWd1praWRFdWhEaGh5NTREMTV3aW1jTGFzaDJhRHVweUVqQnliZk5EOWN1VGtZeGZ6ZmIxbmljZTRLS1Q4ZVJ0VXppVFFzRjJYM3ZSeTEveU9HM2RvcEwvckRleFNYMEhQYUNXS2pVOUpKUXM0dnBsOUJ1Kzg0d3N1VkFTYzlOT3p0OEU5L3JlS0RreVVjd2dYTnNmdTVSbmplZk5KaHY0ckVRMldyNElHdWtyMUxLU3VyR2t0eSs3MVNnNmtsdUJmalp0R2Eva2cxekxNc3VaR093Nlk5V3krUlVDTmRlYTluVVJMbERBanhpTTZIa2h0UHVDOEJRQ3ErNjBHYmJrdGpCcnFpbkN2RUpveDJOSkVHY3I5OXdyNnpuWnRlUGVRZFZtTTNYeHY0ZWY3WGR5dkRNKzBxSC9NTzlIUmJsVzFOTHJRM0c3NHhFVzBuRnFRNThGY1U3VE1KYkVRNjdaZ1dac0lRek8zb3NFYkovc2hjR3hCc3F2bXVCWUsvM3RxVWt3NkNTUDVrS2JtMHFpT1IzYU1uR0ZoK244dGc4bTNYQ0N0bWd5WndnRDhhSVpNY3N5b1YzUi9hb2pDMi92eXphdXBKVUduNWZrdG9HcWFUbEtGNjd1OFZQd2xZb09DMkx0Nm1mcnJJL3k0NG1uKzdtTXB2YWdITTllbEdSUGJTbGtMbnF1eXh4UzIvdHA0M3cza2xwNlBYTUlhVGJWbm5COE9UT1l6cjBoQTFlSUlqZzJ5Tk5rQmplSk1ySHc4dUNUemZGU2tNTmY4WHJtTU9XeWVpSFN6T0VGRWxCSlZ4ZG5UVDc2ZzJyMU40VS90cU9LZ3NTUklDSjArSVBLOVJYZ1JxSFkzdnpnUU5DYmtjaUtITzh1UjhVWW1RNmgwVTNsYkMxL1Q2czJ0UlZhc2EveWdyU1lHdGlRNnJQREFFVEdZeEZ3WWtIUFdKZXhUcktVVEY2d0s4ZEtwcTQrQm9MakpnWGFUMDNIMnMvbHJ2TmdGcGc1MzJ1VSswZExyL1VKaWhrZUlYVHcvQjVUdEN0ZnhGZHdYcklTelNsd3dtTS94MnN4b01TS0JCTjFZenhHR1A3b2M0akYwdUpMNVlVWWM5NGJPMDdhK3JLWW0zclpIcGFxd3dqV3F3MTNpekhZbHExa0poS1dhQzRSbVRBM0U2bHAycW80WEUxNlo1aUhaRWFiSWpiL2FhWFdUQXk1TkNRVVdRSS94ejRFSC9WbWttSVg2QlNmbUpEaE1OMDRIYnJRMzhrcFVrMVBncWZTMmpJNUpMczhKb1BzUXlTcGlqdGZ1K3g5S3UyNW5JS2N2ZlN5eENVdklHM3F6WkRKanA0TzBrNXFiM0N6RFVPaGMzcVVpVXhiY3hjU0dvemFyejNVQUJ0b3hRcXZ4OC9IRVQ0cWFERE54UWRuMXdHa0Fnck5INWtaZTlOa1JxbzNRaGVKVFY0N2lPRWQ0TDdLQmN4aldXTDJYT2YwOVBIRGJXdWw4MDdkSlpTOGVUeFIvc3ZSSWZxcG0zOUJ6QVkwNVdja3VuRFJYUUIzaStSVHVnMTVoYXhzalNwOFoxcHRlWkc4VjY5eUtQTnVROFplYXVjRllBL2ZzTUxwZ2ZBNUxWcEV6QnZCbzZRUkJweWdZUFpHWGN5M2NuMGRpVjRXcmlZNGw4UXlSUFR3YlhwMFVKZXpnOGFiRkU2NmtTbXhyK2ZHRDVSQlgwY0dKYXRuN0Q1cGIvVm9PSXJyTjBWRzE2R3lzdHBzSU5pWW0wV1dCY09NMW43aUE2c3NLWkRQcEJHUXNBenZXVEgwYWtsOVpXV28vQUF0L2xHekF2OWpoQlF3T0hYdG5FR3VNbDFKTTJ0UUVkMVpYRHRjVFhSUE9xS244RVVBM0FmbjJXUXNPbHZDcGpaUkkvK3RhaEg3TW9WSHN0REhtU3FoRERoMitFRXNHQm10NmNaWFluMjUyVGxyZXRJL1JuWVlRNURyTFYyQ0FkOHF2STVLcGMxU3Y1cXFEYWFqOU8wWnJvOGtnR3FzZnhqSk5KUDZzRHlPZnZGQ2hCWmZOaW9DTzJWZmxBVTNoZHNyN05ITWJrQ3d1T2JTQTlqUG1GYTFTOWlRaXlKOVNDS3lua2lIVkFGRFlNaW50TjVEKytlaUtEN3lTbU91ZU9iKzZBQUJPdExheDVHSk1BcEkxUFJCTjVFcUN2OUdLUHZscXc0TWoxaEZIWUJZcjdHY1ZVZGhWa0wrUk9XcFpZYlhIdm4vWkhjMUhnRHk2QmxPQU1sSk9xMEl5bmQxY0FNN0g0clg5Rit4Lys3TzVhc2JjUGVSdll0Z200VUxCZGsyMjBVd09vVWYyYmsraVh1WlNxajNMS2tpUDc2SGh5RmhRNFNRTjlmaE9ScGdFUkkrMzVnTHU1eGtLSjFXOG4xb1AyNnZWdExja0VsVzR3ZTFxTFZVTzBCaWUyM0cvWGlyb0d3a2l0RDJ4cEhYUWRtWS9HdzQrZGNpM3JpSzhaR0M0Y2pwQ1JZUVIzZHkvSDcxYjMrU3llUFl6cEUvcDI5aGZKbjcvd3psc2VxMWc0ckZlMGp2REVSRjRsU1lOR29KeDAxbURRRStGc09FS2x2MXlZbTdxdzU1R0NZTUV1STZmZmJCUzNvLzRrN3o3cHlSVjU5M0MrVTAxVzdoa3FVMkJaUXlUM1JuWGM2NXd2d1hMSHBFRTU3VVJMcTByZEE0aFIyUzczVHBNcFpTbE1aTC9CaUYxMFYyMXZDaVd0TmJFOG13Y09KNlZHczdEbnZXK1ZSYnk5bTlXdTJ0QXAxRTVXWi8zOHQzYWpNQzRIVE55RkRGWjd1blVYek9WZEJRblZGUWxldzJhT0hCL2lad2pLdmtmc05iTUFNOHFLd3NwQkM5bUZSNmJFNEVGMzd4RWdYTkNyMnprT2t6WFVxU2x6a1JtV3FKcW5UU0JyQTNMaGhkVkpuWEZhK2RROUVUb0xRNmdZbnM5MzgySUlCaUdDZUl0Um9PL2gveTFZN1QzL1RXck9BbnlSY3ZuT01tOVpqVHI1bkZPYWs4R1BiU1MzanNrMDlualN2SFM4Q2NJNHcxbnRkdmg2cm5ITmZsK3Nka1VNQS9DQUZscmdEWEhZZWtUZGV4RFZkcmgzajN6SGhuWk84R0dSRnd3TFVEWjFrYjZzQWwxWnBvUzN5NGxmbTlLM0VLcE5tRDJBZHhqMHAvUWtwaGozY0RpRXZSRjdHZWs5UXBjbXZ1bDBLS2hoSEZ6YTNyNFQrY0s3M3ZrakVHYkFUMmlJcVRJV09PUGtSNmdMTzJrTWpWTjdOR3hubXo1aXdRNXgrbmxiQnNvSnFlTlU2UFh6NEJjMXY2Z1BrZkNxemNVZ1A0WkNuMDlsL3pLNXNybmh2ZWIrcm05b09najZqUXZncGczUmxXTlk3UEI5NUFIOTRpbHZyZ25FMWpFeXdmUEFCcVMwK2Z6N1JWcUJsYWJRSm1hUy9NWndrd2pJOUxhOWpSWGo1QlNmVXRVWkhzbXp1MVFPbjhBWmlqVGlVQm92TDcvajRNNmNXY0Z2QkNBV001Q2hybEkycmlqV3VOSUdPc1JuTldvZ3NRNEgvcGtwTG9QM0ZHY2UrSFlTV2hvVWRBekJzRUE2MVA4ZUtPSXlqdTdDL1AwM1p1Q2lXdndDSW1xanMwQXRjelJzV1dnalBmbXNWQTNJemdzaUNHeG9naWpoRXgxeTJpcXM2NitCVzczSGJuaVhGK0tyWi81ZVdROWpZb2RMMXZRQ0RVR0NJU09lZDNIQXNBMlNaYU42eTdVN2k5RC9YNllNRWE2UHdENnpjazdVZCt4SXI0REljeDJkQUpnSTU4d3hxQk90Slk4MnVyV0lnTzQ2cWRyZFFmQVBVbVFtdmUwdERIVFhQaEpUMkMxQllyZExlblJFUFllcDRudXBWUXVqNjZxTkRQaSt6cTZxdnNKanFOcThwZlVpMkVCNG40N050SEpsRDR6bVdyMUpSYmUxRkoxZnVlTmV1aTZRSjRrd1ZBd3NBZGw5UmFQek45eWszY2hudWtiT2RUWm05ZXlxQ0JSUWJJM05LeitiemJrRHNvcVFydDhMSHRTSHN2MmVaQVhIUVhMbUdXWU93MWlaN2xxZDk1MnBhTVFVTXc5YWpSNmhYc3VPZ0U5U1F1VW53Wk13blUvWnA0RmFpNVc2YnRzdFN3bU9HRTJtLzFBSjdyZkZjWDdZTk10ZHRNc1RWeGhSQ3BxekVKZ2tkZE1zSytzdElvTjJHTEh5b3RJTnRYWUwydks1YVQxSzQyN0pxNHY2bXVZU1lmenJ5NEtzaUxTOEx3UmpJRDU3LzEzcTZkMEZmSXlZaWdGMkFPbEIwNStkWHZ1MmROQk1ydnNTZG1WbkdOMjZMaGdHcUI4ZDJwb2hVcnQ3eGI1YTlxSDZGZUtydlNYZ1ZtNmlDakRPdDROVXNyQWwxT2JqVGgzNlQ0alIramJOWFVvdEsxd29zb2JyRTlLeXJhVEw0QVFYZDExT3p6c3E3dTh4WTBaem15MnpERWJnNjgvSUgyZm1ObVNPTmpGWTlHVEU4bVRMK3lKRCs5aTJxbnpBU20zeUsrN3FkY1JOd3g4OU9tNmc4UGpDaW9HcStYM1p1ZU9XYkozL0M5WVA1Y1ZJQkZFeUcwQWV1RW5DRFUyQksyTmJhK21XaVFOcWxJQzN3U1l2N3VzOEFMb1p6bDdHUVI3bkxyamlVTmxQcndGTmJLSTgyWFI5R214WjdYQ25VcWhTSzkwb0FVb3RaM3RQcWxOQ1Y3dTA2eFNYdTdBL2F5WmsxbW5nN1JoUTR5dG5BamQrQmx3Vy9nU1ZxVkJJN2plZ2tlaEw2M1h4d2JpdmN6NEFZSmtWVlRNOVFnZkRYZS9hcDFNNm9jZ0VUdjBKd01RenZ4K25Pd3pmVUNINTdxdDBsR1ErdmU0MzBUN0V2S0JKZ0RiditmQ2JRdE9wQjhUMzkxUHl0TEhYbHlWcjZ0b0JGUk5aK25USXltaWxody9mekJ6Qmt5ZFBXaTZmdWVENzV1ZzdDb0ZocWRML1diZmJHTStJQzc3bTZORmNMUnQ0c1VSSUtwTkZpZlJYRmcydjB5dmtTRXU1RG1DVWIzUEsyVWsvZk1FdFdXUllmU2tXaG05SXJNODdmWFZscjF3SjZ1T3VGZ1U5ZnZSekovMDNIZEFJSm9QNTRCZkVoQUg4UXI3anNyOVl2VkVLRE5BbXNYL3grUTZQVHRGS1RNUnFMeXdxY2dIMEkrNHpKalhEZ01HQkxjWG8zeHNOYjgxRGIvcmNvRjN3OGR3UmlqbGF3ZVovVDBKMGRUQ3NZUXZqM2p3OS9mRkJURmxha0RUbWwvNzlPSW5lTURUSitWWFpRUThDczU5R2hNR25uVnRIMjZqYU0rQlF5M0NHVGFQcnhDTG1IZHpxNkhkblEwQkRpcmdPazlHaDByclg3aHJ2NkxtcGFNTUpjb0xYR1JHQk1WT3FjajhocjlZekw4bnVmVDAwamNuT0w1RGwrWTNueXI1UEszYTJkaS80RUN0bjRYbFJFTDBiQjlIK0RuL3VCM25zT204YmorUmc0b0preEtRWHpEWDlEWWxaSzRpOTBlNGwyT28vZGhrclp0NStyRlFheTRVZzU5NmZaREZ2UnRHZkV3Sm5VYlNrTll2bDd0RzM0cUt3d3FicEZSdmdkZEhZN0JwN0xxOWR3SXVjczEyZDBjUCtWNE0yQW1ONVJ5VXcrVDcxODhwNHE0QUlTZHVWa3Z6REI5dUVNTEJlTGJHbGFHQ3d3NEQwMjYxcm9hL2t6d0laTEpUM1pJYzRHNEErUVVmMmw0cVRXY1I2NlBQbEM0MFhwS0tHZllpMHl4Y2lUaEFKbHJZbmM5b1picFEvNXhUb3hmOTJwK0xaU2hKQng0ZE9pMnQ1ZnNxQ1lPQnQzTVd0RmhLcG9sL2tUR2hZR0VHY0Q3R2wwRTl4WUdGTWt4RWF4d0VpbVFrOVZYcjVnT2tGMk9adWgwTW4yVHU4NTZvL1dYeUNjVUlZWEliOHVHY2N0Tkl0ZWVvSFczRGd6MG5xbUNCbEIwUC9VSWYzUlRxbTNHTlFoVFRZekV5NXVWQVlyTmJYTHoxNVUrUGZ0cTJYb3RaOHR3dUxpUVQ1aUE0UEhYeTZBQnY2R2VhMlRKM2pVSTd5Nmk5VWhobUNocWhieVdla0RldVB3OXcxRDhxaGJNZVRCRDM4QTBSaWxoelVlcXI5QkRZTytvU3VkeUFxTUhEUWg3UmdoQ1Azd2N5SFpVWXY2V092MS81Y0h5WC9YY2RIWlpLQkxrUHBBODYyWDJ0aGJ5c0NlWWhhZlc1VEZoSUIwRXc0MTlnUXpzVHk2VGdlVSt5cHg1ek9iNlNzK0xRUlNwNWEvMXpTQkhvSHpuWWlZbVJhcVljamtCWU90ejdwQ0xNUzBJSEUvdDJGVEtyVm5mU3JPRmtBM2IxeEYveW5sZDZPUldxUUlWK2Uxam9OQWpDVDA5RHlMSzJTaDBlb2ZhTzhiQ3ZjcDZIUGhqRVV6KzBIS1AzS3BsT0FQcS9RdDFNNlZ0TVpzNWFrWkFxMFZiWEdsaFp2dVR2VzFaM1NGWlp0MWtPMnpaNnhHeUxZblNMMUpPdE1KR05tYlczZDRwWUxCZlFjcXQ3R25aUmNSU0F0aTc3aDVQRGs4ejlzV0JEVWFISUdCZmJQR3VndHZtZFF2dVRHZGx0OVdIVkZOVFgrdU1PRks2VGlhNTl4TDRWYUFueHdKdXNJcG9ybGd1WWRMelBRZjY1WUoyOUdEaDkwSHZyb3hRaXpSSjMyallqZUkvdStLaWNxaHZKcUdyQkN2YXlFZzBkWTl3WTh4RzlqT3dOSk5TYm9aeXBDcEpWVUEyYjRKc2tTRVg1dEJlRTFta3dmaUg4dzBEZGU5OEFUQUtPRk9qWWhEUnVzSWtFR1BrNFBYNnFONmpvZy9jWEI2NnBGbDdsd0pCZ0FIcU95SDdPb0tvbGJFYVJmNE5qblRKZ21ZTDhZTmczRXZjMTdiTWpGUnV1aTgzSjJkK2F1QVRqZGo5OGFNeFFyYmgrWS92dno3NkVwdURRWmw1K2NvN1NKY21BeUFJSTBQeG85R2pEWjdDN0lpbVZWL2kwVkVnSVVwMjhuUlBEM1BmZisyYit0VmU1akRYU3dXQ2FMS0NXV3JFTGUzQUhROHQ5dklqZEpqMTU4LzE4b0tvZkZObFMyWFZ5Qm1aN3RtcXZSemVSM25xSTFtUkZrS0ZLSXdvelIrSmpwWWpKVnM0Q29Oa045Tmk5ckF2UjRUcjNaVFk3aVIrNVMrQ3g3NFNhWEI2RElmdkV6akJLamYwOW1jOE9qbmU0ZWtzaUVodTVmZmNNWjZDdjQyUDZ6eTBZM0lTQ0xicWNzRW1WZmtUMUxMMnhmTjFUV0tER21SMEJ5UUpNdkVNVXpmK0EzbXNtdjNSalBXR21Xbm9raytLalNQenN3Z1pUK3BmYy96eGJnSko3dFJ1WjBRelp6WmtMRWhyaEEwZXErd1gzVHY3VmJXWXUrcWNRbnd3d1BhRGV0TnQxTFZLeE42L1B6VU94dVlpYzFkSHNaU1p5N3IzOG1pWWVIV1lpUDlnU1ZTTkp4MXVYcUkybnBqMFAxQWdFZkJiUWcvbTJvdFdQV2lnU0I2WlFrSVdPaFVnNGZoQk55dVd2NU0yOHAreHp6VGViemw4a0U4QXhCRHpLeXYwaldHSStiWExQclVvSVc0VUNRWkQ5N3hwaHdUdktpMHo2bEp2amRTemxOd3NjZVJlbzdFSWJGcTBxNTljTWlxWE9pcXNWQml4QnNVdWU5ZmFpZE1oRENvdGdQcG9xYU4rTnZicXY4UkhKREpmcFErS2w1SWpZcDJuSDZyUHhMY2l1VWx1bEtxWjBZaExyTEVoMHJETWNnNnkwQVp6TXRQbFZjOVFZcE1keVhlOHRtcnFJRThpT2ZjV2Z1UzQ2ZWVwbXFjVGNySG02b3RsMktaZVc4ak80czRTZjM3LzJ4d0pITGo1eWFnSjREUGJNQVNacmFWMzk0aFIwVTJPY2grVGN6QlEwa1dqU3h3UXQxSmY1andiL3JkRDVqWUwycE8wR0JOV0RYbnV0TjdhcnQ5TGtxU3FtRFA0Nm9weHJISzZha081YVQyVUlmeXkxWjgxZE95K1J0c0RCTFdXejd5eFJheWZxcnd0c01PVk1hQmduWjgrVjVGYzROQVZVYUcxYXVzRngrZDIrNFBvN1hLR3V5QVlUWHpIVXVxODB1T1JKTGpSZkdzUWJWeXVXdlpFZUVuT1Mya0VnbTZ3NXIwOUViYmI2djRGUFJxK3RWWTJkN0t6ejFoa0ZIbW1heGNNMXRteXVNaEZBSm43VnYxVEJGMlRHVmh5dkI2elozKzdIT3N5V1lwZUM4WllTT1pGRC9EWFZIOTJaVWEyR015WHpHUU5NNnZkdlBLN1dNSTBWMlJiaTVPUDZCcWx4SldsejZ4K3dza1JDTVFSUzJrb3RjWWZqRnZOQXp3ODFuL0FaQW9FK3Z1ZVpqd2JiZk13R1RiL3dkbFNPOEZEQVRObXFkdlNLUWtjVVZiakhuQW1IVFBmOS9UazZRbWluOGY4QkEvMlpRWXdNVEJuQTZtOG9FclNDMERRYzJPMmtuODV1T0ovTkNXWXppcVVFNE9PNWtURkNTenVsNGlaSXZnYU5IeW4rbmg2MWNNbCtIT2lMQUp5VWozVDh1em9RWUNzUTA5YWJoeFREZkxqRGFCQlNCMkNVNnljM0FUY2dONWEyRmpBRWdtUEppRmVCRlhwTmxTYkczSHVoQktVOEx4VDBBUFBlOWN4VFUwMEhDNmpPcm8vVGg1S3l0SUFpTVF5dWFFa1prOTRWeTcwWjMzK21oYzVGVzRvTjhSOENJQm9ZYnI5RlZuS1pldlVvaVAzRmYrSlV2V2VRMXA5ZFBRYXNjTkI5Q1lrcXhKdlFpb0xXZDkzUW1hR2cvRCtyYmxaanZUdHlPOW5wYkZQOWVpTEFybFgzSUZJOVB0aHp3bklZc0E2aHVjT3oyOG4vTmJ5Q0RKdjFwRks2eHQ5eFpaUDZKZ0tQL0Y4NUJSZlFyY2xpY3hUVmRMSE9hb2xJY1VBT2NRSjB2WHA5YWlOUEc2RmJ2a2tLakdHMUQ4SlE5ZmZoQnRDRzZEVlRReUR2dExVVWhpSFdIandMNDVOak5tTkVxTlFLM0RyV0FZb3RvNUdTMEtCalN4a3JCQXdpd2RYUDExZGU2WU9EWVZWWllQc3ExV0VlSVBHWlJpbFo0OHlHUkZQRkNBN1I1ekZUcjU3TlZZWGVMK21NWFBFb2dVakl0ZlNNTUxlNjczblpBWk91WTl4ak1ZeFhpZXY4di9uQ3NGVjVraC91dkhIR1FmRjEyL2hheXgvcmdNL0pTTHZmVS9FVENvUjZzb29OYjFOanFCZFd6eXpPWTFyQzZGaHh4bENWR2diaU9WK2J3Myt1MExEdkEyNzMzc3lDb21PcFVUZ3JNMjBYVFNJNWhHWDlHdUpER2thdnpqNkd3UVVzQXlJY0tRTHJ1WHRYSzR4VW5BSEQvTHU0RDl1N21CV2NBNjV0UmhXeGE1M1lKZ2ZxbklCalFWWjRqVkgvWDRNYXp3bmQzQWJXRnVQa1B3dW1nbFVaK2dMNFEyR1pHOGNmVEtBZFF6V0pIMkM3SGNXOHErUWFHSzIzeVA3QnRTQVkrWWwxd3lYYmVRYW1IR3dKK1k2Tll4SDVVc1ZnMW9NSXppK0RVcFpHNU5LK1pPZ296RGFJU0NaVHg5SWFlTjdoTERqT0ozUGFhb0dhQnlIcGhQc0R0QjBGR05TQTZOc2p3THBoemhGOXU3eW01d0UzOEwzYS9ZcXE4NHNyZkFuYUx0MGFEeWIyQ3l4aHZab0pXMmpUbVp4ZVJsam9jMExQdWdJNjBlKy9EcHBSK1Nvc1pVMXUvalpmVGpzRHM2NXprQ0F1K1NuL0VSa3ZTYjFvbXYxRnA4RTBsUEkrWG5KL2htTytCU0ZMaHJQUjh2UDBDb3AwRGJhU3JCKyt1ekJOSjE2VmdVRnRkZXZKNmoxTlA1Y0o1a2hJdE5RR3E1SldHemtDUENwSjd1b25VcmdXenVKQjBzS3F2S3hQSmM2VFg4RFpDU2l0M0pwblptOUZmZFYwRUFOaVc2QUJKOTM2MkU1ZGRKZjN5K0UzaTJTZFIzQWliWnJreDJrVW9ZU21pcXdWTERaS2ZvdTJaaktuNE91K3pqaUY4Z0R1Wk55L2NwQUhIRGpoL1UzUGk4TmlWUm95cDY0UXFZOXh4RmNOMEN0NS9Sb0NpMXBrR2JlZVZrSnVsdm9ObUxXT0thbENzRktEUGJrMkRYKzFIODFFZ0JLVk1UQ2pzRHBHRmpiRXREWng1eE9QVEhJaGFHazY4aXFKZlV3Y3BMbXhuVzhrTGUzdjhEL0Y5dm1aNkQyTmdSSkwrMjZUSEdTNndCbTkrdmVwdHdlOEFhYkN3dUUraHFYSXJKNVRrTXU2MHVrb1FWNXZmSDQzaHZnS0RIQmljY2ZkVm1rYzhpa3hFajErTkxLZXVWME1uUUpQdGd5QmFUem1YQUNFc2ZoSTJEUnp4ZFJJWE5SQnNTYzA2OTZ1V1p4c1I5VU5Wb1daV3BBSFhLZmtXRnNPNXlubnlNbUNRWENHL3ROUXJhUXQ4Tk9VU29RYktwZ3paR0c0cktnQ0xCbzhXMXBkSnBIeWphclZmWDU4eVY3S1orVmxLZUloYXJLdit5YkJYZ0FHNHJ3eGxuYkQ1aVdadkg2QWFTa3dhakZsU2NhMmdiSnFSaExnV2RzNU1ySEF2eFhjM3ZyeWovaEhOVEVjUmIzWDdEMWc3bXVqb2R2UXFFTThrQisvNk95ZXU4MmFFWlU2UVF4MFNNcDZMTDlDU0NTdCtGRXhvT1ptTHgvYlh6WjZ1YWpPU1VjMGFVV1pSd2tlTzZmVTU0Q0FLRTdTQXhYaXJzUHd4cTAzeDdjckRyd0M4R0tBaXJOaGZ5dkkxTHBHRWthakRCOE1QL3BxdWoxQThFT1hoc0NjK3BiTDFzamNHUGxtcUdTaFlNZ1pma1FZTmJmTWVDOEJRbTRrUE41VVpJQ1UxN2xJamhvQ0VxNnNSQnV4OTBQNFZDeTZ2V0lqVjBjR0tLZ2lOMVEyeTVhSlZtTWRuR3NQek5rVXQ5VFB1ZDlDc3hiN0UrcmpMVjNFY1NOeDI1RWRIU3U4M0t3cEU5cC8yM3lCQkFSUlNtckxSUUNGdSs2Y0tOdWNQZUpySVV3TU02V0p3eWpTSWxpaU5RTFRLMmxqOE8xRzlrZUJ0TTdtdjZ5NEVyeDk2NUpRQzZFVmdrUnFjWThYNm9CTHNQQmdIZnBUaG5nTUY2SzFIdDRiMVRXNnJEUnhDem9PQjNlY0R3MTBpSTlmMmR4Q2o4cm1uWEhmVzVvVE00U2FNNWt6c1FXbFhzaTlEWXZGaDRrYkhUR1ozdkNiRjVGVTdOT3dVUitaWjlZWWxtdmtsTzdYV21iWUdoSXF0MVlUSGdEa0J0dExxZDE2QTRpQVI1Z3ZWN29ZRmVGY1dUSU55ajU2cFdJbGFSbVNIdmdhQUZ1ZnVyekhmcDkzV2VoMm1meEtGTWgrRExkRUdwUGVGMlhZSVVvUjBWVlgwQWF5Rm9TaCs1b2lQQ29NZFh5cjNaWStDSTNqeGhTMmNWaU5GdUV1ZE9MY2RSMWtaMGZsUDFzZXp4ZmJoMmFkbWpBMDVlNm92ZndobmZIOXEzRWZESThMdjFGbE9BeitZZFZwUGFlNVdZUUZUL2YwYlMzR0N1WkdBZ1ByaXcyK3hwYlNVTjRSRVdBUmtpZ1YrRmZSQkovZWlLVEVTdm41d2RNRUt6cWdlR1paUzl4OVM3OW9YUkhBblRLQUpYN1VXZ0tteUdhS1ZpTTZKRFFISVl1RGMrUk5rZjh5c3pNdXJnN1VPSlNSSlZFYTJ6cTh2SHdrb0tIcWhLSGZCUU45SFNWbFBmRDlha1RQa0RLNlRyK0wxQkJBS1E4akRTNC9waXZBVCs5WFpCd1lSa2RLTEFzcTRwaDRKY0tkZis4aHZ0RERRWGt6MmlFRHhZTWR1V3JiK0Q2OUJCMEJoYng4MW5iR29IajBVQnpQSVRQRVJpR0VQU296eXJKS0xweTk0VS8xR3dXWjBzVVVxWjRYV3I2cG5WUFhVNXRYRWpFQVRNTk9PUmtCOEJrMzJUSGFtUlNoUWxrOGNPQTltTkNrOFhzVzdPcWo3V3hQYXdSTDhNVnk4WkVWU2FuMGRPL05IeGZ6WjNxM21HK1JiN2cvekUxRVpTSFpBRjlvQTN3MmtGbnpXQ1BXVGY4N2RGN29mZVA4MnozUUQyQjdSbjZRcmo4a3FTcTJVK1BYWFpHbWdscitjSjBsY3psM0t2QWcrYThETVNDMkhSRzg2eGpqYTRyOTUva29zZzZLMXNMREZUMW5MTUhhMDhlUW9rd0kxdFVTYkUvV3hBaUhZV2Z4YUFsT2JZUGZaMys2a2hCNndRcVZkQmQzeTZZcDF3aWYxdUZYK3o0dStSdW5wWDl4eWdudGZnYkgwOVgrR0xVR0E4aTlXaDFwVVpsUHJENGhKMnRKMmVnMTZ6bkdJaXhXTklMY0kya0ZpRFhxQm94NWY2eklXdUl5MnVrNFF5MGhWZDNEZWk5UzB3UE13dGRqNDJzNUwvM1EvdlJBK2tTUHBkaFloWlc2MWF3akZiVEZWMXdoNm5aRFoyQ1F1bmNSdlQ1VTNZQlBZOW04MlFtNVVSenVSVDE1UGN2RGd1TjI4OUxHT3BySFArRDF5dkh1NldTYXpkdVhiVnRTTC90dEROU0lzdHQyMVdMbHkwaWZtS2E1RDc3R0h6SzR1TnduTkRLd1A4M2plbVN1Q2xETGZwdjkyREhWd1dTb1pOTjJnMWNSWVBSeXhIRWg0dzlnVzh2T3RVME5EdmlSUVBNMkZZSzVUYTJ2VjczYXA5SkRCcjhTZXNuVlFrL3lUeDRGK3RNV3g1dFI3Ty83dzBST0FvVllvYWlpTk9oaWx0QkhWRk96a3FmcjlkQVNiSGNqQ0prVGIrNDZ0ZjU1SkYyMVFIbDdwNW4zNktMdVVyUkplcE5mUXYxaFZ2SWdVQ1R0Y25BdW5nZUNiRktzVXJKeUdyWVZYZWFNSERZT2ZzS21hWSt4a3dNZnJsbzJCYldJbGd6dm9PaWpKS3Nac29oVWVXTFFoeWJiSXRtT3FSek1ITzdGNWJRVjRycnBqbzUwN0JqMWJ2UHA4VHVSL0xIL3hGWnZqNkoyb0taMVZuc2g2WE4wVmVLbnc4eThlWnZRZUVJQXF1Nm5WRjA5MFJkdVF0WitzVlExNDlwRXZkMlBuNDJWR3dNcmhocEovaEtjUGpueDZWQTFxcU9HcjRiNTR0RUhFZnFpcHNqc3IxRU5DanUzc1NNUWNwQ21neE5yWWpXczZDVEF6cHpxMUdwRjB0Z3BneG05QytoMVZlVVV3QnZjQUZnbzJsa1hmc3Z5MzhjQklkcEtnRHkvQzA2QkhIQnpIbkpuQnhocWkzTEdoMm1XYnBpN0x2QXJVcHJ4cmpKUXhhZWtSRHBZcEE1TWxqWDhETVlVTHpxV0xCak00elBNUzFkVXhJajdwK0cxQ3ppTXhlcXl4bmtTZHNZaEZrV1JLTnV4OEdTWGMrY1Z3aVo4aGV2Yk1lM3pFSG1ETFdndTRxajNRbFI3VnN0OENoNlYxZzBqeXcwR3BDRWpOcHpNWFRjaXRlN0RmeFg5VXM0ZVpGT3BJTGdBeEQ5NVdXMm00dVAwZm1rS3Q5WVpJa2o1M0ozQkNiL1lXR0plaTdXZHl1em1sbWVHTnE3Ukl5RDBrSjk2TklCMGhRQW9uUkN4ejk4UjFTZEFHVHFUUDZVSjJKSyt6R3B6NTlja3U3UU9hbEdlV0pIUE5HbUg4Sjd1Ti9vTThwNFM3YUJVK2d5REd3VWdHSUxlYUpOVERiN1REN0JyMk95UjA3cFBhd0ZuUnhUSjZjWmRMOHA5Vk5zUkw2V0MrOURNL0RuWEFtc3ArZTF4TVIzM29reGJSN1o3em9TQk0vMld2S3NjblJBVTlLVjczVjNjL3lMTVcxejFkY0VhejYwRXdmU1YwU1dMTWdHM084a0FSOFMvOElzSWc2eEFCM050dStvaWI1Z3k5SHdETlZnODJrYkdueXIwbWw5THo3SCt5TDZucjEzSEdOQko0TGVyeHh0K0taVnVTdUlyblZuRitaMjFKNldPdnJydFZVR2FsclJ5aVRoWW1aYWZjaUpQRlNjams0c3BDc0NiOGhwLzY4N3ZWOS9xUkZ3ZDNoYzhXQVdrSHgrajg4dHl3dVUxajQ0ZmtPOVo5dUI5UDg0dG1HU0lMTnNReUpLZlNqbTJueU5LRmo4NjQwaGF5MDlzRXpYNm4zUFVKT1FXSnFPVWxYWVpYbzlDSFNLcWIzL3FpVjF3anQrZlFhMjRtVnZzdWtDZXh3TnVCdlZzcDFoa0tjajBSL3liUGdIeGo1RHdOaXYxVm5sWkVaZ0JWbzRYVERyWXdJYzFnaGRFRzBsekxWMllFUnZiK1hNVENWRHNYazd4QXBPYitRcE50M2k4dEdXVUxhVVk2Y0JvaGRpSG9KSm5TTTQ0Ti9OeS95dzdaTldZQUpNNWNtQXRJenpOSWxMY0lyQ1BnNU91ZGdlUXhoR2k0NFlNOTN2QUNuOWJDY3h0OTMzZ0t1bHdGQnRER3hmcFFTS3E2SldSeUNpUkduWkRubmhIVmhjUXo0L1krbEd5ZEtYb3N6QzcvZDlFSkxxUnNLU1djbVNJa1pMOU9nelhOZ0wwRTJXaXBRc2VKMDFwK0tEWWtlOExudTIzSXozNi9RcjVaM2tJYW41Qm5yWGppM0hXTjVKK3dzYkl4V3M5bmxXamNqaEpHcFhGcnZnMnB5Q2hwNStPb2E5UllrdTBwMG9ucHhRQVpScmw0QlpoYmRRYU5EekZHeXQyTks5d3p3UStGeGhOQ01NazI5R3hHVnlhaldubjB1OVJqQzJBZzhpcFdjMExyajFSaDI0OGFSWVJFbHJRR2dROW9LQ2xqZWowK29Zb0ZrVHBKWTNYemZQOUk1bTVSalNyZ1ZDb1lIcDBZTWdoT2lLQ2xKNGdwanNIYS92VFBYNmNGaXFpOGt1RFNydGZjenNlVXloSE9OR3lXSCt5ZHZ1WDMrMjJhanJYelJITEFZOVBMZlFyblN1VXhCa3UydVlCNm5vV3VjWDVJbFBTcURuc0M5NmlaQm9Gb0w0YlRram5rbTNlSld1NEY0MjgweE9HVExPNWRUeXl3dmJmWDk1eTJhc3FjU0R3UklVbEV0TnFiN0Jqd2RzNUdvWHBEZ2kxV2JIYjk3RjhFY3JzNXhGUWtPTjZSNkUwOFB4SVZYRkI1ay9JeVk1WmQ4TG1BYWVwWGltMytNbExYMDNlQXlsbUNOS0dQaGgwSlJSVUpBSUk5dnR2ay9uY013b0d0a1VCRGRYQWpPdEo5Y2Zuc2hHenVHTnBzQ2d5aU1YcGc3LzBkT1JhaEZWZzFnVml5aTRkMTc1K3grY0xxVG0wZFhxRlN2bVhWNjh4a2xEUWZlNDlVbHZWbGs0RnAxN3ZZNVBMYjdTQ1lzcnZuMnF0VXJxVWYxU3BCYmpVa0FNeElOeTFNTTJyejNFeGFFTGY5TnVXQXFhcXVVV1BEYjl3d2I0dTMzc21rN3U4dFNnQnhPUGN3RDRHRGF1TS9CZSs3RytNUkRoZy9WM0ZkZ2t1dlNwY0NMcE9jd1pjS3FtNHBiZ1RVazdBSUVaY2RVR2VLaXpQNG9UbVpQRjlyM2RhMWNiOXI3S0VldE1oY0ZBZ3diN2NVZFhNbjMvbXZOUkJZOVh0VlUxY1g1YmF3dGFjcGJ6VWlEVTRZSWtBQi9WMkdwSlpYU2RyRU5xOTNjdjVxS25udDhLZ2tJMDFNcXNuTG9DbTlOblROb280cEhJUDFXb29BVGp0RWJva1dhUHMwa014K0JWZmF6WnJuais3ZjZ2WG5xTmlXUHJyWHVxNjRjSGZjQzMwTzQ3aUhyUVNPMFJDTzdXZlZIbUpNRmpnNHBoK2V0UXQ5Qk12UUd5c0NUcWdTckQvcUdnUERCNldSa1B4VzV4ZUl4eWNWK000SkVxQ2xKK3NmSHZIbWIvbXlETVc3SkZMR1MyQTFtQmZ5VENtWERqZmZGS3ppS1p6dlF5eWxMMzdtNTQ0L0Z4eE9UdDlja0cwUVNRSEljQWtQeDFaTDBkYU9lVzRrUUdjR1FDaVVpMzNENzNtbWhUTEdTcU1vOXYwMHFuWlZNLzY2ZmwxUkZncGp0aHpaRW1mRmpXaDJONGoxWk5JandGWGRjRTJDN1VyelBpM2gxODRUTjV2TFFmZExEZEJxZjJBTjZwK1Z1ZG1CSUpONFZMU3hldFgxdnoySnJjS01weGVJTVh6SXplUkRDZng5ei9pbEtsM0l1Zk8rZ21hN1BFTHpmektZSWxET3ErUStpWUhKN2VJNSsxQzFFdSs2Wlh4bjhUWktuOENnWS9MZU9rOVB3eTR1N1RNZFh3VDJyVDVDOGxUMHNoSytxTm1MTXBvbEFPd0FrSVZBYysweHJUZHQvZUFZSTR2UzNNMXNId1N5L2xSQXpqQ1NoNVBBQzlQejM5QkVlS3RweitZNzBUcEJjVnJMWTdmQmkyclpmRmNMUm1tVHpzZWdBVTJWR3dpZ0YrQ1lUNThjaUhPaC9nV1QrTjUrNXhyemxDU2dhYkxDVWVoTENJZi9HQ0lzM2ErMDlOeWo2MzVDQ0M4NzdPTWpKNlhUM0NNdTZQaHk3SjRZeHh4WkFHTlltemFNN09UdDQ1UUJvYXVMb2J6aTQwckJMRjZRbEVSTXVkaHZ3OUgwM3NSMjBTaVRLczlvMXpyKytpZnA5eVBjeUFRLzU0R3JQRkg2SitZcVFLVHBYZTJGT3grSVRBRzJYeURNNUJ2S0hqSm1zWlV3T2o3U3c4bHRYSCtxN2VvWlhoZDNVT043UXlEZVhveUdHWlRMbTJzR2tQeEFyV00vTXl6dHpQZE44SEN6WW1JR1ZZTGZZWE1MU2hJMFh2cTF6bnNkUkIyMWVvNkVtU1lMY1VTNGFDanhkRDRtNDM2b201dWpiam5USXhDV2ZEYllyVWc3M3lsK0ZKdGxhcm9hSlBObFZiMEtYUVlLdW9CZkZEMDNmTmNlL3JHSUo3ZVZLTVFtYUJLK0FVTzdmWitRVzlNWnIyWW9jTVNneGIxT3htNi9Bay9teVFWNWtQQ29CbG03YXRiekFMZktINjZEZUxuakZyeHZCOEpoMExCY2F5WDEvMGc5bVNVaGI2RGpzVXBWMkFPMStWelNBVFNNVmQvOHg0RUtkcE5TV0FkM2cydm96cmJyUUJmQWxValY3WVIwK0wyWnNtQ0FYamY5UjJEMytTdkxmOU15QkdqdkFVNFR0Z1plTDd0UVpldVJOQ1diL3pEdjBzQ0d4SDRjZVVUL04vTzQ2cHM2OGxUVW56QzMzbmwzRHNmYmlPVW5PL3lmV3N3TFVLSVBFc1BKR3BjRndTem8vMkowd3NTcHlqS1psZ0ZOeVQyUE5oZU8wRWZqamVaOHE2Y2o2OFM2UURRU1NNbmpBZEZiMHdWeE9KTHJFUjlrSUpNUjloSW8yOUVnSkxSVXIvNTJjVzlwWmxIVzZ0ZHVwUnB2NHZKbUFISzRDNUlrUUh2aG4zcjVsY3V1UUREUWtHMEFkRml0Sys5Vkt3Qy9FSTRNbCtSbitmc2YrMXhWK0ZKNlBoVmgxNndpRXFOc04vT3Q1MGFlTU9BZmt1L3liYnlIZW4yLzJ6YUlCYmRFeXd5TEhlSVZnUzFWbW05aUhmVklRVDVFdnhocWI2MFRRNitLWVM4UWR6S215WEtDNHBGSlZrNWFkNmpnS05XazRtbGdCbVNJcDlOV294S04za1VXdEtUVGE3S3MxT3pNUnliMmFCT1IwN3JFSm9nRmhzazFwTzRNQVJKQmlDWUI0VWZFWlRXaHFhZVFGcEYxdXg5K1NLWktwcUxhY0VwSEEyU2VpVS9OT1ppNEhiVzRkYUJyc3dGOG1iRnBLaTF4b1ljVVpxVXJSVU4xMy9tcnNaZTZzQ0I2MHFDVWtCVTN0WVlUa0xKaVBHMVpoa2oyQ2RPK3MrMGpTTHRURVVRR3NyZUhvVDJRbG9yVkx6YmFQUlhYM0RiNG5TUENwQnM3cklId2JQOWpTZ3g2bW9uR3R4NmMyYTRSL3hCMVlycnpNdktialVOSlpBdTlVb2gyazRLTWxUcitDQ1pxdElMbUFWUXRUekZQYnN0RlZHdkNDZlJEYmNYRDlYVi9XWC9WRXowMkdqY2Z1NUpJc24vNHRnR0xObTdwSnhxeUptZ1BuUUhJRkl2R3JZMHBVc21ScjdSUkRvRllSZkxVR2xvY2JUdU14Q2pFWTFtM2hEZXI0R05uakNoV3dIQ0thaEo4a2tibjZ2SDVJUWxucmZQaEdWL0g2Q1pvMHBaMXowU0VqcTdFaFJuMjR5dDYxM0U2QzVTdm9qWkxPUi9TeWpYS1Nha0xCUWEyMmUzMzhuOE5Ea1pkdGJIZmZRMHd5V3RlTUs4dnNENjNNMTRJTW8xYXdGZWlteElMNWVUL0ZNVjBpNmdlVmtidXY3R24xSGd1eENESk5YZGpGeStmVnY3NVBPVWlGWWZsME85amdiT1ZCb3ZSejZGU2hBT21qcG5FTXRXSWhiNEEwYlhVa3ZFY1lUY1NOTmJGOUdCUUliTzhtdjhjZmVSL1Fpa0ZtRHZEaGYzVkJZU1FPQ1ppTDdXYkJzS1VIZjFLUWFzYTRMdjlNNHdCVjJ3RnJOdVR2dDNaK0lRRXhGaDlhYWpVaElDNGhNMzhRN2liZTRTcFhBbUUyOXVFTGRvbkZqczc4V01wZy82bTdpZkhVUGJzODlkMkxoK2hJdkpvdkRBd0k5bDhlNlNZbVUzMkZNUjYvakdQMU5xVDBOckdyNk9aTldlT0ZjWWJvdWw2WGE4SytLbmtBbUl4bTlaemtYTVNORHE2TFZLcXBiUmxzcThiWXRLbjc3SDRqZ09EQk5PTUJDWG1ickh2dVY2aUhValVkSlhVZE5Qck51RFdCcUYrNXczRGpocElIRHQrMk1sNVIxREVnRHlka2xIWG5nL2JxT1JXSHpqYmtmS3kvVXFNRWh6ODBHTFg1OVRDQWZJMXhpTi9Tb2txdUQydGNZR3A3aFRPbThaeVpkK2lHU2pIQ0UzNk0zbWhPM3d5OXY4UkVFL3JybVUwRm9iaFlZMXRTM2lsT0xDcFZVTi9MQUQ3d3FLYTB6blVFejFKMnlSTmFGQjdRMmI4dkM4aEhIS3p1MnJxNE5VcVMxV1kvRTZiUllBcWx6VlFqcUlZdGUrd0Q5azhkb2tFcWtERnRoWmEzZnJ3Z1dHZTR4ZGJSVHYxYzIwU1dZV3FVNFIzU1FLRVpsQ3dOcVpvVGZKVDhuQVVQbE9uYURqRnlOdGpiclR1QTFsQ1dCelBFSDhMNURKYmJnYlVYektXTGV5VmtmQThaWVQyVFpTL1Rwa1YwSGdDMkl5MjRTMXZIVzZTNktaV0x5VTk1UkQ4R1gwQllRMkRPaGxDbURoSFRnanl4NmVOdTg2eGVkRnhYVG5LQlpvcGRUUkJ6YWZLdkRIeE43aEdyWVBsMGVyZjh0MFVwUzZpWW9SZmNDaEdJbHI3djFLd0p4QjJIMHBBc2NxTXVGWmNYRE54Rkg2Y0l0TXJDTjZCcVgwMklMeXczOS9jbGRLR083WGhXOWNlZWFVbTE1VEtZbUEzakxwbGF3Rmt0WlB3ejFCaWRNU0d4OUl1VnRNaXdvbXg5ZE04a0VnMmN2bU01QzZYdFZJRnNMNmdDMlJhblBENUlqRldxYUVDWXJlbm1yaFp3dTZxb0pxNkpkZDdYdW42R3JuR2k4U0czNHV1dHlMV0lseERaODNCblV6RXpTbzFkZUhXVTBVUUhUWDQyL2VJakNDSmNuNWZLNzZtaUJyVHkrR1BxWHRwTWwrcXpKM3M2OWUvVVhZT2hSSVZqRlJLNVdqVXd4KzN1V2lrWGVrWmQzU203MUJSQ2tWL0FNZ0VodFQwaWg1dHB3dFVSU3FmMkhiNlNsckhsVUZ2WjRsays5RmcwMUFDWnZ5Y2paNXVySk5GWmUwOUtXejJ5Ym11bm5pRi9QOTBjTnM5Z1U1WmN2NXlVYVIvMVZQd1F1Q3ZhVHhlTFVXKzBxRUlNd1dDNGlPR0w2MWJUT0FQNzREbUEwcVJ1TlRVTEJRaXNkOEFOaGRoOXN5VFpUa2ZCWnJKakRaRmQ5bGF1ZnpkbTdMTmdscDViZGxLRU1GSnBEQkMzazhUZzNkTUNvT3BMdzFHcDA2YjgzSVNJQ1M5ZUN6eE1SZU43WXYzYVR0REZUSWJXSWlXMjBqNmJ5VnlkNEtSdE5rVXQwb2Y1VllueTYyTjlUd0RsOEJkWmwvcGpUVytRVGhYdGdVTnlKZ2hXdno5a3NNOFUxWFlyNWliOEJleVpVTEZTMVBJTnlIMnd2OVk4Ry9CdmIvYk1PYWtCSE0rVnE1aWFMeTNiZW16cEg3Z3lLdFUvbXJ1MldydE5waXpjdll0ZHNtaHpoZDV5QXFGbVhveGxQQnQyaXM4U1dtR1R0NUh3by9XVEJJUEdJR21ySjB3L3M4Q1pRbGxFRFVRV0k5WFMzUE5vbENlMVoyNEp1RUdZYktDQVA2TjBSQkx5TTl2OEhSSXh0SGhVNzd0cjJRWkxjT2Z5amptRkxVZk9Xelk1eWpxSGtRZzBucHQwUm9MSzhrRlgxRXRzQ3JKUUdnbmdmRnV4YWRDeU9jblk3UHkvekk1dmxjYndTR01yYU5vQ1ZXTmE5K1NhUjZtV0RNeUE5UC9mbVp0bGRUTEZ1MlJTVzllY1FLL29PeHRQa2RPSmh0RW5xaGdlTk9jZFhQQ3E5OG91dm9FNDRCdTdDTjR6b3BYR2lpaGpuK0U4OUhNNGJMcDA2SjYwZlpxVnFlNVIyZWVpbWF1UGNXVVA2ajlhbHN5UWw1MTdDK0MzcjNycWhsR2plQkxiVkw4aEhSZThjUUpKUHJJVmE2YTRQODA4TkJTY2xJWGlpeVBGaFFXc3JNRmRLVXE4YUJYSnJRMUNYenBIODN0dm9IRnBvMUcxKzNOT2UySGtpK1N4c3djTEJUVHIwMmwxUGJNRERoOUlraXhrM05tWUZBQ1RUQnl0SFI2Y2tQTU0xQVltTERxZEtEK2E2THd5aHBGSy9QTENHK3VXNkRXWmg1c0JCWEZaZ3BqK2svdTVkTTF2cWEvd3Z5cXVRSTFZMWlzTXBjRUM4RC9LMDYzdCt3YWJnbmpFZ3ZMdW9SalY2N09YeU9nRlJTWkM5NFVsbnR0dmlKYllBaXVTZ01DaWRwbW5BOXp1TzdmTXhZUmFhM25ZRDhFb0VFZTNzNUdXL3M3bmlzS3oxMExpY2g3ZTdJM0lrY0MydHRQYWVUNDBiYVZDaG5tSE5VZFBLRjlsZjY1SjhmcC96YkZRajcrZUFSSVlvcmdYWVc4VjlwMUkrZ0pIU0xkK0pQTVFKZWNjNWlNNHNGeWJUWHMvR2hDeFdYdXpKd3ltK3ZlSFlQc205M1dTZnpiVmpUeFR4ejJpTzRwb0p1cEFNekRZK1Nac08waTRJd2ljQ0g4SXEyVFZmdzNwc05yZDZnOERzLy9XYUNnMnFxeVJyS2REd1p0aU1ObzZla2JrR1B2ZWduYXpUa0JUYWRnc04wVllBOFdpNmhZTkQ0WDVmN1hVL21YdHRFTVF4eExaaHo1SlBDSTJrS2dJRlBZYjYwV2pIMDRaTTZ4Q0dMdVBqRTZVU0tDbGJBYmZIenZFc0xVckx0MDlIWGw3RUZpTmxCSm9ydVZMZmN0bnNDbWdYaTB6dFpHR2lBNHE4MSsya1BlZXV5NDVWRWtrUktMc3JZOEFjYTBtcm1NSllJK0EyVy9EY0tIU2lCQ0ZicWsxOXNqcUNQV2ptTmhlNUZ6NEEwcmM0MGpwUXl6ZzREVzVTUERudzYyYlZKc2ZyNFJyWWZNRXBKcDI0bW9uQWpObG05OWJGS1hkUHdjd0pRdDNJS3lZdGhTbXpGODYzeHJDSTFVaUtxTnFYN2tlOFljVGxVN080c0NNdGhpR0IzL0VzbFRVdUJYQldLNkdjazFobVJwT3VtTVF2Rk1kTmV3UXNNVFkyWDNOOUdOc2I2Y0VucE50ZFVvNjBPNUV6YjFGaTBHTFMyMXRSSVRpRXlvTmRqNWJ4WGt2L0o2amJvS0pMVWw0L2xYRkFuaS9BUEtvYWxBeUlEbTlMeDd1QytBcExVYU53U0RzOThXVTAxNXZnQ1M4aGRsOE9CNEYvV3NqTDZHNlZXOEVtRUw0M21MbDdEVGNOWVFaOE5vSlpJeTcvbTJuQVFod1VjZWYzb2IwS3dmdGdPdU9FcDlFQ1FrMENJSkhDSDd1UGFuMFdLTFVYSittbnZwOHpXL0Y1Tm9NNFYrdVZGMXZpMXAwYUxuUHlaMlZNY2hWcEJ4ZEVET0lPV1Jlb0lMeEpiZk5tSWlvYlpqWGxsWjlxWDNPdEtqb3JZWDB6VTlkUVJ1MmFaa2FNaFR1RzZOaHJQOVJTOXZEeHlBWG9XMlBJUFpGSmNycDR6V2t1dTN4QUJxcWV0UEZ1ZWcrRWp4UEZLVFNRNjdhVHRsY0l6Z1B5S3F1QlRYOFBPU2R3eWVmeWhzdHdNTStkQlhlOXRCK1l0YlB2UE1CV09HU0ZKWDlWek80OFFSVUNERFF3R1lUbGtuV3haeVhvaTRnVVZwUXprSXBybTFOdjh6dGRGYmUzM01PaEZIaU5FaDFwMjhZNzNxeDhLYU5pZ1JtY2RkL1pWckFxZGtVWkNIQlloUVkvOUFWT3BPcEZLYTR1TVZXUmw3aFUxbE8vOThRc2I3Ulk2eHowZlNvMHpzTldaMElxUWt6ZGg2RXYwZHZva3RiVUlPWWFsYm0zN0xVblQxUDBSZG9wamgwZjdBd28vM29aWTNUaUNHTkp3RHlGTEZwZGk3U3h0MzFsUWtoSDBxaGx6SHIySDBQUWp0dEZFaTBXcTlLaW9ET1BKWTFJUjVUSjBkSjU0NDhUUTdOam5Wa043SVhRZzBEU0V1Q21kODNLRUxNQ2hFUTFxSnJXL0NCWkRoTFhJQlJLakNxbkkzVkQ5R0Y3cG41cXNoU3hBWFJhQmMraURwOU1sYlJiUnExa1ZneU8yNzJOMEhpNml1Y1lvMVpGd3NnTlNNYlpQNmZ0SVpTTytEdGx1V2E0b3pYL1AwTVd5TEFzbDVJWmNoT1JNYWtUanUzejhCdWZPL2hTMlFUUExVYi9oSFM5UWVLM0xsS1VMeW1FZEg2cE5BdlU1MitIeHZtU1VYZkFiM2grOTJUeE5VL0hsdFF5NkZuTkJQbi85Sjc1Y1NqbTRROS9VOWppcGtTUTVnMERENGhHZG5HdjI5T3FRUVk3eis0UVN3alJpZnNONUY1c1dHcnVsQnd5N00raHdsQ2xlY0lLTWF1SDl5UGsrUWZQQkV1NUJXNHNpNWdPVTRWc0tRMXV1YytBeUNjazUxQkd6c0RxNmZPbDdoYmJjV2xSOWg1c0U0U0FPZTFiTm8zN0lQa0hnYzFMK1pjTzZ2dCsyYVgxeEIrRjlYUE1OOEdPekMxeHlDb21DRWU2OTJUMklIdVlsU0F4QWpQMVVSeUFMNC9HQzJzTDgrUHAvQm5udTlhaUdWV2p6WFJFR0FwKzZGTjhEQ3hBb3UvTG0xcjRCemcza0c1U2dYcGdKQmU0d1hLM1NuRFdKaE4yV25Nc0NsMEFKc3lMeVgwUmJualA1dk5IdEVuQ2ZJTGRibkhLQTBhQi9GS29FcWV0NlZBWXduRUFRUFV6ZTQwV0k2SWRFcnJoNXRleXZDQnd1R2p3YzYxZzJOTDBnVnpXSG9GU09YSTlhV3lCMFljNmFuYjZUWGF6d2pGeEVrSGdKZVdVQVlLYmhzT1lMMFZ6dDZqYzZOTFIwYW5KYVRueEUrT0Q1WU4rNDJhQUd4WFdVQkx4Wk5uODZiQ1ZjVFF6L0FZWnhsUi9wTGMxbEZvemNGYnk0QTVQVDV4VFg1TlU2WFFNajhlMVIvVGI3YlAya3lXYUVpNy9BRHh6aVU5UW82ZFYzMzRaUW0vekdvcjdmSURFRmFiMEJuNFR1YTI3KzJYdWpUckdxSFBnWlBUaTRZMDdsR1R5UXNFeGk5cXRpUUxhUCtMdmxMSzlKR3ltUjZ0SUNQTE93MGd6SEFieUNTbWJnZjVmTnNhRE50b2c0QjdoM2hjVjhLdHFWN2R3NXczSXFjOTJoQk5FUDBPcVFpZEFWbTdkSWZPSG1zRmpHaWZseUdLUXdLVFhsdXU0YzRBd0RBR2QyTm05SXpGakN5Z0VQREpiaXRPaWpxN0JRUDBVYXRCWVI2b25NMnZZNUw3bzA0Z093MVo2Y3RUVkhrSDZ0N2ZGeGxCZm51d0xMY1llZTZLYWVJZ2dybW4rYzljMGszZ05IckRKV0dmYnpXTXJ2V3l2WnBpNXU3UjB2TVVaeWt2VUh2dEp2NG9TZSt2MXFCMWl6QTRTSHYyQXpHOXM4bFVrYnByZEJyUGpxUnI2QW5mZHpmb2NyK3pLRDYvSERQUTBDaHdzZm1rQzA2WmtKT2VzQzlnWEVLaFRRU3RWWmJiS3ZGcUhjNm9mdzZ4Z0dYWHRocVUycGZiMlRiTWJLb0lPNGp2TUU3TStCN3EreFh2YVg4OHBSN0NQRUx1cE5oTldFa05BaUZlckh5ZkpEcWZBQzRZUG84cFFMeDhhR09jczJRc2ZDSmR0WTN6ZEFjVTA0c0FPb093QWxKcGFxSFVSdFhuNjZwR0VObS9HQ0lTTmFnTWxXdzc3QjRSL1dOLzFCYVFtSUl1K1NyNEYreGFwaHFKMW1pNVcvdERMVVZQZTk2NXdxMEd0TXpOcFI5TTNZK0JjYUhUd0N5Tm5XM3dqUFhLV05Oa0l4dnhxVkVKaW81V25MVmhxV25mRUJnYVFsQXJIUHllQXZ1MnJKS3B2elVBQWp0ZE9CTXpOTHk3K29uZW0yT0pjTEhXOUFsbnVKZVp2R0s5Mlp6R2toQzBENE5Ca0htY0hXKzdFbFZrMHZPN09aNmZubXBFYzBiUjEzMWc4TTc4K2dBYTBaQ3dyLzZpeDJpMTBKV0EyNkFWOGVaODhvT21FYnVsR0ZXaWdHcWhIMkNCS0prR2dhQzV1WW56YTczSFB5UEZQYjNyWXpZTlE4Q3FNWWRyY3NDWXFxRGZTUkkzV0dHUmFXa0E1d2FsbXd0NDNWZ0ZrUVZLallZdVYwangzR0U3OHdXa1EzMElsWGZZUFBwRGlIZ2RVa0lsazJ4aldzbTVTZUZtVmsvRTd4VG5BNFVEVnFacWpZZXlheEdaMUd2dXlXMVJGdTJkdk9xSWQ0ZFpiTUV2QjFnR2txWUtyL2sxemIyTWJkZHl2d05VTWMyeXNReVJ1VzRpQll6UHBsMWQ4ZnJlSWZYRURGY05QYW5DMERrMVZzZWUxakdua0xqRWJFTU1DNDZMRFg4RkFveU9Fb1FKejVnWnV1R0N5cjgxRG5hMlcrN0Z6Zmp5Uy9EWlVubk12ODYrSE1hckc4MU96Ym9EL25uOXRRWmtsbGNVNWVpcytTRGJZRURYYjNRRjFuYlMydmJPdW9zdURQVGRoSVJGQld0SndNSmdGKzlJZ0lTVWg5WE53aWNjOUhHNk9MUFl0NUtNM1RmSHd2SkhneHdtM01EUzlRYjBZeWxYcWtrZ3BGM2d3MUE1ekhBaXVEY0Q1WVVFanJnUzB6N2U5bERWRmkxMUxiVUhZSnp3Q3BXbUVPMERKejJtZjRwd0owVi9nYmVpUk5YQmlDc3JDSWJuSnprVzBkUFk5blJKNXNHUmlDa2h2dHc5eVE2RHVobjhmbUNxZ0hoK3Z2RUhtSW56cGY2REdnVm9yWHlrSE5aTzdJSzBZbUFPWGhMWDV6YnVPTkYwdUh4cC93OGxPa3FpVUV4TkxTa1NYOWVnaDdzODAzbUorNElla3Y4bEpmTUZtcjZLRXFhWjBXYkp6dzdTZU1RdWJSZDFQa3JzKzQvRWU4WjJGdjVvaDlnczEvdE1ocVloMmNYeXVJcDRPWGt3WkZsR0lCaTFoeHV1aFBER0lMOUV0OXZpK0gwbDU4N0ZmVmVkZ1dHK0ZKREZMM1ZPZ25wZWs3WlkrSXVPY2w2dXBwRTZDTHA4MzdsQXh4c1hJOTdENTFsRWhrdjk2YmpBZno0aG9HM0haTFpUNnRjdUNDRVZRL2kzdElqYk1aQ3RIL0NyK0syUytETTlzMWFmS0dsNmFzZ3JzQzZlQVRiMGVuakJYeGVuZWpsbjV1a3h6VDRrOWVlVUhwVDRmd3hhWXRoRS85OHhuMDZCRXZKLzJpRGUveHRiRG85aU1iZzBzei9SSHVRSUd2d2ErblVFUk9yZWpCSmU5V0NIOWZTNm4vYUdWZTIyRjROU2tyZ0xYM1FsYURhcHA2Y3o1TWhJTGs2ZE9EOVdoZHZ2SXpkeWRBY3BHbjE0VUFvdTFBWHlzNXU4TUIvYlYycnFVck54cHVuRXlWNS9Yd3MwYWluYmJjdWE0UGVac25yVk11UDZ5Q0V2TGIyRk9tQ205NnNzUkhnSjZzanVaZG1kdndaMWpBenNiczFCYkFJaSszdld2OVFDdllyVkQ1QWlua1dtUzNpS2xLUVhsQWV0eXdRRm9QUjM2dWdmTXJSZ1dpVnFaNUNObjZsdzB6WFlpUVZCS3NIQjJTWjNJa2YyYjRIOUFGYjdyanBaSStJR0YxMVdGU2MxOUw2dHFEK3dEenpFWERBK0Nma3dLMlVUWUtBZkpaSW9GMGtaQWdvb2ZjMGZqS3loS0NaNTNrZVpxV3kyMUtzNHVvaTBEQlhPREpjNFlkVzl4UGVQQzNCaGVHaGE5L1hXYnk1aVVkaWNTdVZPY0RHdDY5RVBUYytMSFZWcldzRGN6T0ZwalY4TGU5YzlqVTk4bzBCZzZRSW1paStVdzZ4aW9IYXV6MUJmajJRL1A2SFJZTmxZa05MK2F3cGdzd3Y3SjV2MEgvcnY2dUtETDNhTnhVWU1QUFFMSERRaTR6cWs1b0Q0aDg3cHZUV2VGc2dPV2h4bjhxTFVucDg0emUzKzdocDRKWFFsOGtMSzYvQysvaGx2Wk1LV0t0dkl1V3RHTTU0dmxvRXY1TFpLN1JaS1Nod2VyL3ZxQXBxNUUrenkvelRUclc2TDJtdWE3d3FzeVgxUENpNXpEQzZ0TVpCOVFpY2VvYmN3QzZmMzZKT2ExZGk0ZlpGYjhQNmlPRlBXMzM5cUU4bTZxK2RqaVphYXdyWWZZSFM0NmJYL0ZqTGY3SGZaSllySEZiL0ovallVY0xwZnlsWFBoS3lMdUVIMGJPaXVQSzdVT3Y2cDRMNHZGeVpYSExma1c0QzBhdEpjWmJKdlluTGFaTitLS0h5bzE4TWQrZk9HTXJkeE4xdUJNR3VYZ0J4b092bjF3TVUzdElrRFRCUk8zN0sxS0c3bU42VDJOREk1REtUeGNmTGRrNFBPM0d4NHlkcWRjUTFLREZoRis5MFVINzRTYS9IcjhSY1h2cjg2YlR6dGxmN0dhK2YySTN5cFdNSmhhdnEzS1dOWVNGamkyZ1QyU3VXOXZ2d3NOZE5zdmlWczdIajVlS1B0bEc2RUtHMThqbGxXaFhhM0lsZDlxcHd4bzl5N01vcE0wVjFydmxYQUk4ZENLM3d5ZGQ2dDhCaE1pVTdzcFR3NVJZUzF6MmU2QVNLOXJzK1BEMmRIcDViL3Bpdm5nNXFvL014TFpZc09lNElwNkhiM3VtNWRJdkxad0lhSUxadHU0aWMxeThJNlBNSmgzbVMwL1hjMkJ4UnY0TXhBY1ZJNDc4Snp5cytqcTlMNE1LcFM0enZKS3E5R2ZkaS9PUlM5T1hQdHFFdENKSXl6dEY5bG00Snc1aEJMcUhRWUM5NStKZUhHVHRtMVc3eWtGY2poQ0Vuc2pKWTgybm1ONitaYW9vWDRTbkcxMlQ4VWFuV1lpbjVHT0ZOMGJlTnB5NVRLc1F5QWM1UWs4QUlsWUJzR2lMdG16SDc3NWxXTTBBeTZTYXRwV2FONHd5ZlhKeU1ONHM5RDgxc3NwaXIvV3Q5QTZnSU55ay9KaVJTU2FKaEd0SmdOQVdBSGo1d0ZiVUNoT0RiV3pSUlJzNzRmamhCbE9yMDdwNVpjbVBRdXVFVE1GTjJSN3U5azVENk1OQXJ6dFV4QVo2WEpKQkh1RjZWUmplZjc3ZS8zaUZLU2RSRUN5MEs4NjZSbFVERTU5ZnFZUDREdmxCMFFMRE80UEpGYnBJQXFKVjhjMXpPUDAyYkExQ1JYTm9vQTVyeFlFblhpYVZTMVhpbGVydmtORGQzTXd0SU5pck5JNG9WaG5nTWVqZ0JOeTVaUkQrVXRrN3FQSlk0by94YnFWYnVucFNVRmhZM090Q0d4TjF5T3NNRUF2U3lSTEJJVHYxNW5CcDZPNEc4NThoTVNHbTFSVWhWcXpDbmNDTE9ZQ3U3d2EzbUpvWS91R25rWTdzYmdPbktDUS9vTEs5SXA4dCtzclV1VitLblFORTl1VTRFRTY1Nyt3NlR6ak9pSUthQ0FDZ2VOaHllWncxTWlLS2NBTnlvWUpUVUEvSS94dmU0cmU0ME5CeVBCSXhQbFZhaHFWMStXK3VEeWNzQW9WSWw0WXRUQmlDSWxYQlhNOWdpZHVhMjNXN2dFekNCQkRRVkxaWndwWHE0UXJQbHpMbHhUMFV5ZE9hZEI1QzRYU2JpNWVsL3pLY3VYcGEyTlNFeHlId2I0bnArSmxqL0JaSkZNMjVadzQ0U0V1RFlRMDFReitEL1M0L1dyZWVxNlBLQ0l6dEZ2K3BUa09sa3N1aS9ad2RpaUJadzlOS3lLSWZpZjJzM21iVkE0QjJ2c2NmQVE0eUZnNXdmdjUvajhyc2hRaUJSNTd1bGttbm5KOTN2VzE4bmtTMGpyZlhqWmtJVGlFT2lzVVhYU3YwWVRHbzgyL1JpbU9YZFNiOEJTRzhDcndZVTlLZGhrQVdkMGZkTDlzN2pZY3FmTk5CZFBORmREZ1JzeS9RMEFXQXhLWmNtWGhDbGU3b2oxSU5yZjd6THcyNldIVnAxdWxLeGRuOWFWMURHd2JOMzlQZnZQRUtVM1lmZlROMFNSWkJ1V0x0eUJPNVpPUTVmQzdWUWVCUklqUTJac0N5U2FabDBaUVlVeExwZTZac1d2QVdqd2tKempaRFhBOW5XejZBcFFnS0twL2ZobE80cVE1R0J3K2llRUdQMkVEZWtVVURTdTA5WXhjZ0drOWZ1K0RaZUluaVE1VWt6L0xLaFhrL3VCd0ZHZVhMOXVpd2tNVzJsRSt5Mk1kYzFNK1RhdVpRblpjNlpQclhubHZmUTBxVkZpTzNSeUxJTzRZYTJsYWNOUW1BNmlDTXJTV2F4aWdsOEtVZ0x6eWJoTXRtR2x3RUtKM2pNV3NtNldkejBVR0tPOHFLZjFtNEsrLzRQQ3VoQWxSbWJ2Y0xlN2dTamZhT3FZb1FzQUpHVURFUWl3Z1Q3MWUrZ2pmS3ROcElOM1BIcU1BazM4SGszS21yY3FxNS9rL29JeG41Y0k2aWh4RnEzYkZBZEpCMlM0VzJiU2RTeXNCZHhkUXg4VlFVM0xvVzBTbTErdEdKNWtjRU5yTlJzQVVxelUrRWxLNFJxRllpWGhTQnhhUVE4WW9VcmpyalhhNjA0Zy9mdVNuT0NHT2N0MTJqZlhObERIOFdnV3NjZWd0WW5ZS2tTNkxjcWkyWG1MQzNDZ29OWitxV3dkdDFpRGJYdW1zMzM0V3JyZGJBeVF1VDhEQkx1YStCSjhqd0ovZ2NFZXBsRytpNUNrNitGTFlTSGdDYkMveFNHcWtYRTlwQ1VkUGJGUjM1aExDbkNDTlJMYWZBRTl5a2VNN1pOYmo2bmQ0QVNXOU5XUFV2ZlVYelJCbEdObDFESVV0dlJKelIzTzFtZjJqVkJRNmpvNXpBL25OdEtpZklVUS9SOU14Q1JROHpQR1lFb2h4VWZWejh1RHBQcGxLZFpVVERldWJDS21vcGtVbU5saUNOUFpEWisvdjVGR003V2JTMlU5VkJCUkY5WUtHS0sxay8xa2ZZV2ZJTlJpSkZoYlNxOWxMSzhqdDZ3QnRZUi95OVhTWDB3bW5GRytvRzkwNFFmSnBWaEFCaGVWSmhaQzdHbTJza1E3WlJ1U1doajhkM2tuRFZpei9GajRPbzRpM25ZaXlFWTRnUG1ZMmlRN2JPVUlnby9HNERITG51K0NRYTBwdjNJYUxIUlYrZ3FyUjJMbG9XakxUbTBsV0d0Vy92NFk5NndQR0s1V1dEMFpxalJwMDZtbElranVtdmhoZkxIanZPaUl0c2VneXVWcjF4RHFYait6L0JId2hCUnB3RGF4YkkyQTdCdlAxQnIwQWNTbXJhZ1VLWlpPY0c3T2wxUDBFM201a1R3c2ZGSTRac3VVZTFZczUxblJ0cVNPVU9lNFhvU2hmM2hjS25FR3ZDdm14UFRQdGxkNGRaK2RDWDU4MlRoQUJnekpTWEtIYndQTStCU053Y0pTUjREMlJldFl6M2d6Vkh3M0dub3E4MUo1b2g2eUgvaVF5T0ZHQ1lqWHIwR1ZoVytoYmdiNzVwWUI5Wm1XZlY0Z3R2SlFFeEhoMWVuY2t5VUhPUzY5L0lxSlExTmlOKzA4K3BxdGVmdzlNWDd3K05RZ2pMMTBVODhHYVh0OU1uUGIvZWdSckVnY1JRckxFaWxjdldTN09FNjhVSlRFTXBjSXBDaFZTT290eFhDc09CMktaTDVOQ0xRZmk1NUpVYmxPNUZ5dlZuS0NMRklvL0syZkZPcnJMWExodlJkdG5oSHZhUExIRndYNnJ2MWZSd3RuZmxneEZlSVpBMW9jdkU3bm15ckRldE5zVzZRMTFWdXd0Y2U2U3pyRmNGekhRaU1DQWVRUTFIUnFieHhiQmVGUmV5eTF5RmdRWDg3SmZOS0poNXROZWNNYm0zZ3kzSkhKeGlNcHFaZ0crelhVRHJIQ3Z4eDdhcmxOT2FJZzhzZGw3NFdnMnBRclFuZGg2Q3lqR3NZdFNPdGZOMkVJQWlnL2N1MWxSb2pZMGhtSVFiUHJJZ0xLQzN6UUw3ZjBrRWpmeWZwd1cxL0ZBU0t6UlVCVC9uNTloWEhlOWR0cFF4QWtTMzRScHhqUS80K09hVm1IUWZqdG9WcE12S1JoUHBBbk9hdVpZdy9LT2xWcHZtUWVMNHhhcWlSVy8rQjdIK0phQkFEYmwxbmpJRUlZQ0pCL05IdW9hWDR5cUlPek9taXBXWWJwNnNKWVA4bWg3VEFpdXdqTDFYbm9RN3piN1BZQUpTOUNaMm5COWMreTVZQk9xVE9JZjZkMjNoQUhYbmZnYkVwd3ZBdnBUcEdrTFFNUWl3Y1VEQ1R5a3hIZk5uZk1CYWdNL2Q2YTZJSWxGUE1Wc0t5U2NzaHVNOStXeFQxakx6b013a3JvUGFUL2U0TVdsY3dOcTJ1UE1tODFaM1BrNGdjN0h5UFluQURscmd0NVYvcllhY3ZMWmtVQmFSeE0xMnNpQXRVaGo2SHJJei9NR2s5TGZqaXFITzl1dEU3THQwS1J3NVl2T0FiRWVVOFBwdm1YK1hScml1TW9ZdXkrUlBHbEI4dmNLWDlxTUkyMGxqeHBiWW95aFdaeVJ3a3NUNGFGMWVwQkV2MWVDOWtabXB5d2pOdGZ1NWkzNVJIeEcxenhRWElkbS9ZV21EVmF3T2lCMzkrbk5LM2kxQllrMTVkUDRvOTk2eUlzL0N5QXlxYUVGTUErMjBOZWJwNit0Mk9xdU9KY2Fwc1gycU9yTFp2ME15RDhabytmTnBXTTR4c0k4UE9wUDJsVHZUV29CU2VXNytxbWZ1Y1dkeXZsY1NOYU4veVdjUkQwSUdaY2NFNlhuNVNnbTVmaFlzamlpQ2xTYXppQ1dtaXZFNlJRV3hWRzgvQ1R3MXhVc2duN0VTaExIUmRXcmVqdldVVjdUTEh5bFBSUFpSTCtMNVJRSTloTVpHVlVDelBneGRKOGRNK3VzWDQxRkdrNE5SeXkzTnR5dE1oL3V2MzAwQUM4WXNEZG9WaGkrM0tBb3lrS3VweW4yQTR4ejM5dExXS3NjQTRlMUN5QjVnQ2VsSVc2Zm9aak1LZWNJNjNVWk13YjBYc0h1UGlKWmpXeUU0aXQrWmpjVkMyR09ZQ1liVlc3akhXWFVES1ViVTZzazBsS2luckdDYUlyNzI0c2RpZ3dPeWVzS25DNG5hdnFHVllGWU9GM0RGVUhrQXg0UnlrVW50WnF1RS94VXh3L0ttT3ZhN3pHUnR1UG5mbnljcUFQaDdzSGVVTWVraS9zRUFGWTFZaGhMdnV2dHVkbjFSTW56b2NGK3RZSjJaZ2JCb2RGbHkzWi94L0xOaDR0WDlHYWpjZEVPQ05JTnRXTFNXODZoUzRIRE1Bb002ZjlvT0pzdVFEeXhDaVNXcEgxTG83UDlUSkExa21ncHpaRXU4YXhWQTBBVUdXZXp0ZUlFeUFKOFlvQVNFZ0N6TGszaEwvTXpnUDNnZXoxWHZhbWcvakU2aUoyZ1l0T3FxQkxuTlVDeTVYWU5BUHBpejkvd0xsUVZsNXFGU0NDenJydDZJNXFscExrTTZacFQ5WTBvUTRncThEalh3R0pwblk3VzV1bzVJV0tLcitxZ3ltUlg5UjcxNzN6RmUwM3ZERm4vRXJES3pTN1hYSWthWkxmS0d3bGwrNHlGUTFON01VV1BOYnZDYnZhbTZRM2wzemt6MVpQbEtWSGFGVTRHQ1RRaFhOYnBMY0V6T0Q3RnJJbFdzblcvaWJ1eW1qQnBaUU1mTEJsQis2YkRQVFphalJRdUY4cnBid21OM0Jaei9pekdHYy9BVHliSlFCZ2g2UkxUMm1jSGhqY1d1U3pkT2ZieXl2UVJweXdPZzRPMENBdXh4ckRMR0VCZTJ4bHA1WkVBaWxQckV5aUdzZUNORzMwTERlRGdEbkNJNnRIeUVzdkFLMkFtenRhaVlzWTJBUk54Ri9acndYS3FiNVB0bitlSFZycFdLN3JRU1lKc1pseU00SjluTjR4VTVjNy9NcGxUcFpud0VrRWVCTGpNMXZQNS9TTGczOFE5S2lJd3V5dnQ2dzBTcm9IdEJRTnVyS3V0VkFmeUZVZForNU1XSi9YQUIvMEZsZEkyZzRrZ0V2VXRsVVQzOFVReGVxdHVRaHJuNDF6RnBQeDF6bkx4RDNOMHExbElGVkdzbnkveUNFR2M3dWVIZFhZSGZxcU1GQ2dscHlJREFEOURpbHVzeHZpNS9aTnM3L1VnZkV4SEZveHJKeVl3NHZGRVFGdXc0UGJkTXpVWkUxeTZKT2RyZHlwWXdYOXE3QldGb1RWYWhWSno4UTRIN2JJWldTS3JYZERQdzhxVW01NklZNDNUcm53WnU5VmFLWmptTGR4STNmZDBvaHFIY2pid1VxajdEMkQ3ckUzVmUyaU80aWVta3pOQ0l2Tlo5RUdVek9mQk42akowa1J3OXdwdTlDcmVQcDN6a3NacDVEYmR1dUlkRGVUei93cTVXY2R0WDR4VWQ5YmxGUWpyT2c0b1JiRVFxakhBdzJkZ1VXUkgyaTREQXVpU2V1aHAzNE1HVEtoTVRYT0tFSHRFZ3IrQ1NydEJqb3krcUJpZXZzTkxaaVdtQWVVUmEwayt0eVN0NndnTUluV1hiZG4zRXZURDhzaEhZUTYyeWYyLzljdG5qc29UNzA5dVl0QnJOYjFBdVFQZ2JlOTlRK2JrOEI5MWErS09LZFZZQ2p2a21MYzUrYkdmY3FlbDgwNWIvUFlLdWpyTzVYcmN3Vnc3MzZiYXNTcWNzTy9nOGNuNVNBcEs0M0oyeFVtclF4Mlg2L2NMbkdhZUdTMEdDSzJ6V3hhQUJWd0N4Q2xQWVVsVmZZMlQzTHd4c1lSejJscm9wUThDN045SEE5dVZGMFJtbjRIbjZ0RjFBMFAwS0U1a2sxcHpPUUtCcXkrb2pnVGkyQ3cyWUFVaTgva2ZnbGpoeDMyT1gzbFN6TlRTcGJDWXo0VzR3Q1dndThXZll0ZkFudTdvR2I3dW1jYnlnbkJQZ1Z4cCtINU9zQkViYnFuMkZQdTlidnljZXNFWEwzNUZZY0N1a3VoU1plTEpLRFQvaHVCanJveStjRjZQeitSTzU4dUFJV25hUE5YRlhvcm55Ri9LdHFzVkJ3REJibjhIR2tIcVpaZHlsUTNCS1AyUzYxK1VPSUNpclhKNFpxcHZqbnJxbHIvQTN2UGlUUm1OMjRLZG1vd0tyYTZBeCtTUVRyUGNKMzZkeTdDQkR2RmY5b3hhWm91Z0RaRUFWUksrdjFYYjdUbUhtZlFtMVkwZnl3WlBROEoxSEVLYjhIVlZCelZ4dXllMXdzRTErSkxBOGxQekQxNjM1VWdkZGZkMlN6RUhmNWs1VUdIS2JaYjRlS3ZlME5WQVZtV25VR0FzMUZmVFZvOWlOZFMzOUcxd0NHUlN3VjdFY0dQdzJuYlpObGtObWRzdlhqVDlLWTNxeTFJSHViK0JpRysyNkhqdytON2s0RVJGTzhEZEx4TXQ5bG0yTnpNSTVIc1RkYk1zdW1sNDVES1pMOTA1elBQWG1WSWRKUW9UNEcwbUFmanAraGo4MFRqQmlZVUpoSWhWMzVmbFl1azZPdXFNMUpOYmVadkt6dklka2RQblFaYkFRcG9WSkg2VkZOdXBLbFZnWkFXaTExU2R6bXEvVFBVV1dWYlQvYUxNZ0dPRk9KSXI1SWVNb0VjZ0hnTXJOcWVkL01BaU0yZEJTOEFLZndubjNlR2xFaWN5ZnQxL0JmbE9FZEoxQkh6VVJidmZWZVRrWk14Zkh5cW1NT0lqNnBBMVBvOS9TdkdLWnlHMmQvbGRsN0hRZ2xOQTZVd0J0MXFBNGVqL0dTZnZhUnU3RTlYMFllendCSDF5VU5sR3BsWlQzbEZycmZhbDIzdEtOd0NXUmNxYzR2S2RCZTNtbTh4czU2Y2gzbWNWT1pBKzgwZndoaWhmTlcxOGJndGt6cmdVellIRzRBeDlxbmxka1I1NWNSUDN6SkxTTXdWdFNOaTlocUxpelRnZ0dFdGVMY29ucnpmeE4xQk41V0dqNWw3TVFpVFZNdFR6YmFYbkJ6WExTV0RBUnQrSjJ0cEVneGpNZ0lpdXJlSHRZc2RWN2h2bDFqcjZNb1NueVNpRWNSUmd4aStkTHZtYk5LV3BKcnJzZ2N2R2pnS2RPZVptRTJGb3YvRWZuSWVPTTYzM2ZTUUMyYktBemU3THJmSXo0M3E2YTZFTlR5NFNPYWdqbzFGTlVkaHJpMDRtTlhDME10NHlReno2NHNHZFJxSit6SnUrRVUvdmpZWVJlWmtLVHI3bDVqc2ZMR21UNlVWbHpKRTQ0STMrZndpeXBXMG45bmxIc013UTMyeTQvZnFNT1ZNSDlra0xMZVBmSEJQVHFTaGdrczQ5WUtDVnZGSUxaYjlKREZYZVlXTjRIL0ZlOUtuZnNtSlZlNmRMbkdYb3k1VVMzaVhtTzhVeTFlSjhLT29BUGVEejR0b1M3dmFKNmdadWhsREpKRXoyZ2pBQzBoYnpjMHArMlVtMmpFTStrbklSV1pqK01WSlp6R2lxMmxySDRVeUhOaE1oaDd5eFlUYi9jeUd0eVVZQTIxTVF0OU1oMkNwOVVsaXlDMlE5ZlZLUzhZZkthYTQxdHc3WUJXaEhqNXNMT0lRdndNNnZXbVh3ZVNQMUNwMno4b2M3MXc4MTFncHNmMUJzSkl6UnlCR2NmYmVoRVkrTGVNeWFZSzR6Q2pPUG8wcktyM0ljTXkyaG1ldENIUnNGUVNuSTY3R3UrK3hZZDFQYllOT0hRM1FOaWRrK01MQlBGdzFTSW02RnA1di84WURCMEpwMG1UVTNmWTh3Zk9QZnZGTWN3S3Q2b3dBbGFLaGVXQ2xwN2VZRDFYY09wYTJXbE52R0VWL3hxRXMrKzZLOFlYSWdZeUQwb0IwUUxEalEzVkZqWE0rUFRxQ0RWL3ZtanJmbWtsYjgxRk83U1BKSHRWd3UrbWt2Q04vdFdiOU5lL1h1QklUN2VIck9PbjNzK1BnVXFWRDRteWRZb3MzcDdZK2xSSlAzdXJxTHR5WENXUWd0QUloZDBtQ3ZRczdaeHVMK1c3MFFyenZZdGlMWVN4T0JoVWlwNnRWSWJuaE9rUlZKYmlGTFU3UkhJMkExTFFETUhlRkpXbmJhcTdPU2ZPNm1EcTBHZGpnZ1ZUTTNlb0ZGM2sxOUcvWURESHFXc2EyWW5IZzNIdWJ4aDlGM0tJSXBTd0JQalB1NG9mR0lTNUxCSy8yakJjTlA3UHd5YlJucUJZUm9vaHFRUDNMY1JXTkc1bUZaWFVKNDY2djNxOUNzbnlHRlRDQ2hKL0dnWDBvSmZtM1RCUzFWbHhCU0VJTE5uSXZVUCtOVjNPZldFNEZCTkhsUG1sS0FMaU5aU0ZJVndEeUxUeUtjczY1QTVSOGQrQ3kvVkNjaTNIR0xzQndXSmVZM0ppMk1GRWNNWTdUdGcxc3UzRDRBTUhsaU40L0YyOTJwdjVpTEhHRDFXTmFxM0hEdmNjMFU2RjVGSFJockUwb2RmSCtZck9xWFM1RTFvWkFNVmQycmx1RFBIUERZcjNEL1FnMWNnRE4xRUFqb01nUmdob0h4aTdNc0ZueUxUUmpQQjZNVUZWc1liWTJuK0tLbXBBMGJDRW5Fakcwc3g1NnNNdFFPeWtlN0Y2VHV1c21HVFo5VjFncytXY3lVSmxUcGdUbkg5ZktFZnd6TEJPVUZTV3RsT0llTXZxVmJIMTA0MXdPRVhCbzdRUS8xclVNbWFHL1poMi8zdVBiNE9xQWIxcEpNWXp0bXFseWpqakt2Q0Rxd2gvYVYrNUdnMDVXQmJNZzdHbTJFbnFueTJHUjk4blJCbjY4eTFqQU9NUjY0bkQxd2h1TFJvK3BWRXV6TXI0K21TS0RjOVpyNnpjN1ZYU2tiWHhSaXEzeU04ZVplYUFsSXh6cktqd2toWURjY2VCY3dCbUpVUWVuK1h2VlFnSjRJVTd6a3FJN1luRDBMcFk5UWFZcHQwdHlhVW9pUzlkQzRSVmRodnN4ckEzN3dEenB2dDlwdkFXTUpjTmh6OTF5anZvSy9leVJiRzJlSkdBR3FFbTF3bnd6Sk9TMC9OZ2pyeDQ0M0c0Z3NUZnNzYnpUSzlObGJEYzVFdUpPNnBrbzVHK2wvbGZOTjdSTnYyc01qYXRtNE92UjlRT3QrYzUvTTNwQk16L2NoRGJVbVpEb2VkN01hRytrMUhIWkhjNW1yWXN4THdscmtuSW05MlBLMWk5dm56SDg1UnBCVDRmVjJic3FrM0JCSHlaYWtkNFZzTU44aktkL1dhc0RNLzVSb1c0dEhieElzY0RSblh4M0pwWlZTb1h2MXVzOFJ4RW5EdjU0VHpZTzNrR2hRQXBqTXd1WDlzdU9maFlMQk05V2huUUlUUlNnQVV6OFl4aG00d0FKNk5kNTFTSzhGaVJpenFKcFdjYWZmSHF4Uk5QcmEvY1d6QWgrTmVLVEs5eWdnSDQySkdzcmNNTnNiSFZFVmlONlFGQURnL3ZhaHJ3bWtTV1htQ3NKZnh6QldaQXF1a3FmYUtUN25hYkVMem51TmRsNGpUbEY4SFp6cWlQUUl0bm1UOHB5UjVYOWZ1Q3dpUDZ2L0VHVy80SG5sVFJWcUVJU3k5RGMvYzUrZnJQUVRjQVNJSUJaTTNEWFFGd2JWS0cyaEN4Z3RuOFNKSC9lTXZnY0wrNENxSlJrMnJzWlVqTUFZTTJZM2xLZGpZSkdDRVluaEFtY3EyTmN5enFXc05BMUxlTFNZNE50VFg1R09GOVJFL29Pd3FSN3dZT2VmMkdDYUVUSWFzRVpMMStKd3ZmaUh5VUJTQlNlYUZ4ZlN5Y29ZVExJVTRaVlduNGJENFU2ckwxTnpDL2dYZ0VuR3hhMUg4bjhZNld2bGg3TWpGMzd4U1RjNHNZTE02NURJUlA0OUFBMWVVVUhYa1NNRG0yQTdjN04wUW56eEtNdjY3bk1WMU9YNm1kN29UOXZKL0xHUUpNd3pXV2ZHUzFHYXhHZkNhQzU1TTE1S0ZGZ2lNcFlEOGEwRjZjbzhIdytnQU1wMjVYWTRVUG5xRUdrTXdHSDluQlBxT3NnaUFoOVkzTkR0ZE9rWkFVN29CTFM2MzBBdy9vd0NBN1lneGNIYTI1VWdwYjE3YkZYWC8zbkR0S2ExeGl1Vml4OXdTT1Fxd0N0bnVGNTJ2bEdoNTNURENDMm5yRE1pcFBuSmZaUjdKdG93WGZPZUFRc3llUFNNWXdNWkcrd0YxWWtycVdkYnV3b0lKaFlzWVl2QVRpWFc3dktBb0Q0N2lKb1NIQzFIRzVSa3Ewc2NuYVgvMHdtY3Zsbm9kNWRlZHJxSGIwT3RYV2NaS1drWkZqS2YzYWh5d3gyeUhwQU01L3BsdEE1MDQ4bFNEd0JwOXFPZndKL3pCbU94K0RLeHowcmJhd1dtZEZsWW95WkhscXhBTC9LS3NFbmFrWEw4b0dIdEp1RTJGdGM2REFLNlhTV1FuVmZxQXE5QmRsRnFGSFowcFV5TkdUaVY0dEVNUkdwZ2I1c1VGcjNDcUdkblJLNGdYbGxvQWhUZjhBendlYXFBT3M1SzhPOE9TdE9ISzhqbE5ubWIxa2VGU2x0Sk5ONHYzUGNYVTlpS3ZyVzlKV3JBMGhiK1hLY04wS05aQ0ZDdU8wRkE2bXdzRVE2M1NkMTZzSGpRVGRYNVdzSHJiU0FxdVFiUXIzVnFHVm8wbXE4Q29EandHbUs3QjI5OWhMZFdkWGs2N0FLME51ZVNJbnM1cERoY3YyQmFaOTdDNXVDOURUU0NQdVNYTXh1c3lQTTJyTms2bHNIcEJVZlEyYVM2d1k3MDFGcmtsWXN2RnpoSlZVTmpwVHhwM0REeTRzS1R3dUFqOTlXWFB5MUJtOFp6SHpXdk5aNi9LMHVMY2VUcWZZMkVUbmM0YndONWRCWTZRMGxlUUsrT0lVczZLcExRVzJlU0NhelV5S1NnVmZWMHpBdXNNc2tHM3IvRGYralVqN0E4Qk1pb2xNWTM4SzQ1T1N5RnIxVG1QV3ltd1pseFhpcm1HV1ZjWlZzb2JRZGVPSzVKZkRXNGdzQklNYXJvV0RJdWhreGlWenRNUFdnSlljdTdxcHR4REhWZjlod1VNaHloTzZJRWVML2paS2NMdzgvMzZka1hHdmN4dkxIRUFGWmJkZHRlZHJHZ3pBd3l5d3dEWWtyUVFhUE13a0t6SmtFWkYvNkwxcnBnOVNmd01OUDRCUENKMmxoVjBLM2YyRHFJT0k1NG1LcTVxSXNWRlRpMVRTUHV3ZE1PUzVIWHEvelIrYkVEbXIveWk1MGJnNmFFSW5TQTd3MncxNG5jTVlXV2dXZENucjNydUdWdmRpTDdSelRHT3lvOUVpWHl6V1R1RERzSVpVWWFmSCttV0oxMWp1T3pQTXUvNERFN2dnS3pHbmNFN3lFemhGTVllS2JTeDBjU05VSUhZN09aLzhtTGEvTzFzaWtSd2RRUWRpcHptNHlxbTRJTSs2MkdYNmx1aysxK1JidVdFditTMTdMN2paU2loVkdRdm5QZUVnQmVyazR6N2hzUGZUc1Eya2czUCtzaXEzZFFpR1ZuNng1TE1SaDBoRXRhbVdhZFRLcDk2ckFid1dKemhaYjlvSkFWQ09FQTdHejhjdjA4SkRkU01TUnJNY0hjUDdzcjJYUDdzWnQvczl3VjVRQlJDQlc1dUlFTVpJU2xIYTRyaW51L3QvTVR4V1ZzWHVhVUd0M3BMTTl6RG82V2dXTEVuY0tGOGk5bWM0YWpnWlZPNmpoaExzKzlOS0N5VXZvNzBhSWd1MU9IclVQMFpTRU5oMlZrbkZ3SFRmTWg1MTRTdC9mMWxjRTUyNDFLNGYvM3MrTVFBbkpRNks2cGV2NVJ6dklOalRsUnpXSmFyZGdhSVdXTUY0MUg1NEdkZ1p4bGpBT1hkVkt0VGxkVjd2MnFoaUkxem9uNTVWOUMwYk1EbVFvcy83VW9odU0yUUlQR21FT0tIcnd2cnV4UU9Ua3p2bE92VFVGNkFVVkRnUTlYSTRiWUgvS284ZUdDcndEam96WkhVZm1Kemsvc3NTUnNRQkdXK3Ivd1E0b0FubVloQms0QTVKUHNEL1Y1ZDFmTzdiWWpHajg2amtJQzR3RG9vOEl4OC9MTjNzcXAxbE9oYzNQbUs3Z0xoNkNrcjdDTGw3ekFYcXJxZktOTE9tbTBNTWc1bkQ0eHh4K0l6bmdvUjRoaFNSTXdRNHVsRE1TY2ROUFM5OEd1R2pWcC9NYnVNU09NRmJESUxmMHozZFdLbVpUV015d3dxM1ZkUmR5Y2IyVGovbW5UalVVbU5ZQ0VmK2E1czAreXc1Nmc0MzVvaU1EZ1pnTUdmNjRVYTAvUTgwdE9QVUFKSWdlNmd0aHV1UW9DMitSamdiWENJMGFUYS8zekFOeTVkdE5HNHBXTTErT2Q0cGNHZE92cElVVmRsekdNVEhGcmVNblVXaXdRcHN0MEhYS09TTUNQNGlsZDkyaHY0L3IxNk9HR095c2ZXN2dPSzFwVTNuNUI5TnMxL0trYkM3eENIU0MzL2ZsbnkyZmZSVThQa0tleEQ0Q2I3WnAyQTBuMVphbDRYRE1kbTRmMU92RGVzUFBTdmZzUXZpUkVTNWdWeVVhaVV3Z01lUzVWWDVkRFBPSmhvQ3VXMFU5ZmJlaTRLK2ZIUnAwbWcwRjZKMW9XeVptdUtpY3FLWjF0MlZFYzBDbDhYSmVkUnZ3ck9RVWt5ZVkrdSsxNWpqeklSQmR4cmozM3hoSWZnd2pVL3BSZVB2VWViNXBQT0dadXF4REp4dVMxTjc1emJOcnFyL2FVK05lTlZOUU5DZGVxRVJXNjA3Kzl4cVpIMnB1a25YZ3dxNm1UUHJoaTBSMmNTVHJOZjk4c2xsLzE2bTRhUUlSMzJDREFuMDhlSUUyVG1BbHNTSDVhTXRFM0FETEN4YlloTHVSakVuT3V2eXJ0ZWxjeEZGUjdINFlHYTQxZEQrSTJrTXQvWG4xb2xvWjhpL01ZRitqWXNDVlRpb0tudHNYdUhrWHlNOGszWmVrckxZNlVmS0RaUmQvQzV6bEppczNESVplb09xaXBxNHI4cE13VFhDL3k5R3FiS0prOXlrTXptN21BQ09IRzVxWDVLMTdPMkRRRGVpMGMvK2RiUUNLTnVXbnRBRXZRb3oxYTdXNE1rR1Z1V0NhMXVrV2FpRS9pSDdwd3Z4QVlMTFVJQTlHQkxoM0pvRDNGUU5qN3JWOHlOSU9BbTZKaUpYNFloVUJZR2lsaXJzMWI0c0ZzOHAvYkRTR2ZjQXFDWDMyQmZFOFQxclpnRnVQaEdoRXVQVXN6dFFZOEFISG5ZQUp2RWNKMzFjcnhmUkRTNWFEVnJQQ2txUlJyc0lxMFVaNnlraVdlMmluekQ4TEZmVFhET1JHeiszOTJoUDJYRVRkajBPOEZ0NEcxY2hXaW5HWVdKMXQ5NUIvY24vYmhnZjAzL3dqVnptOGVVVFJxdnpDSmN4dVVPQ2crd0Z0VVA2emRRb0NVTDJOek1MYUxBMWt0d0lvTS9mVFlGOWd6NFc0eEpGWCtiaC8yWU9sWjhEU3lsMFVXRG9QU1JKY0d2bms2MjJ4VUE0QnJJK2hmdzhDS2MzU1h3ZUJYTkVXQVhtUHBqaWkvdGRmUlB1MVRSN2tDeHhEL2lrdk1CSFB0S3o3NGwrbFhDMHJqenZGLzBJKzdNaEQrdDZxWGhTVFZndUxmOWJUaG9WRjhaem5SY3RXRG9JU2hCdGlQOUFNdWFoWCtBVnhPU3hBRERXbGJFTFpxNi8vdzJabmx1SjltbVl0Y0RYOWorR2dVZEx5RURId29zSWQrWGVXT1dNWHVBY2pwYWRQY0xEWnhBMHpkUFIvVENXUmFBZk5TN1AvdlJCa3loaThtNEdwaVN3WHUxcC9aWmdhZXlJdjdpRUhyUzlyclZBeXdqYjVuWjhrQktJUUxVMzJmOHliS0gyQVlPcTNOOXQ0b3UyQVFCQ0dMTkl6NFc1Y1JiMkR6ODNQWnRPRjNWOEVWRkZrVE9hMXNJMnNLUnBXUm1GczV6cVhqZUJscnQrSEhka1FzZTJpUGgwa3JRcXpFcTJFVlV0dGl6V1cxbnNZc1RtcFVMWUpmdldDK0ZYaWsrWGsxVm5rbGREWmpoS1RRb203OXhESSt3SWZGaTJ5Uy9tblhJczQwRmhwTndmaE1uZWJoYXdsTXY0azM5QVAybHYyNVNEakpvNGE3QnJqaGQ2MERoUVlicGlhU2lkZ1RMZHBWNmZic21XOFd3ZzVXVFBYQUphUi8wc3NNRU8wbWlOcXZGVDd6K1MvaW44c1BtdlA1cjQ3dk9PMXV4UTBHSFZrSlByeSt0aUs1UFJoWk5XZmNyRyt5N3RaU1ZRRE9XOE9CTVJzaGZlUkEyQ08rT1Z2S3I0ZGZndkR6N013ekJkeVhMa3ZTUmlmUzhwN3dOUXp0L0dwSGlvT0VFUkpDd2w3ZGFNMXdSN2NucWxNbUFtZ1Rnb2dxSVVBL2xGNkg5b3lGODZMdW5LbUUxaUpMa0dISFRHWit3T05hN01LRWRJREJzeHRja0pEZFlIcTBNZ0JydkVCUVVHeTFvOHBEbWVuaXM4TWlzbTMxYXZzV2N0RUEvS1JiZXlUelMrREZORDl5aXloTno3VEMvcGNhOUFwY2lXSDVuaE8wQklmcVhzRGMzbXlmNEdCL0ZtSlorL0I1ZEZXVEFlcDFmVDRwNFBSMGhpRHF6c1lDNXV3REVLVmlZQ1lDUS9nQm51M2p0enpab29jWVpQNXZNOFArL1NGRHZRMG1ZVUptWU14N0xZbkhSNm1abHlTQlJZWW92Rmp2ZjhuMURiakUwbWI2T0UvdDQyOVVFYTNLK2lFcXp3TkV0SEhIMjVzOXpTaUcrSG5PVnpaK1R4VDR0VWxsRVlVZzIxbnhzeDZjbjlLdDkwTzVFc2p3WTVvUFBxODFxVFFyNVJvYUtlT0g4a1dETWwrT1A1azJtVU1RSGMydEtZVFFDNXEyZkRlT2hDUHhFdzdCMnY4cURlMnBNc3B4ajV3d3dQOUNIdER0QWdPMFhKUDV1clZoT09CNTJSeC9kSDZEajluRkdkZDNCWmFKaVQrVHgycDdpUzczNHlNMGxzekdWQ0FtNGxIdEthUHBKWWlyaGNoYnJmWXMyWU1sc1pxeDNPUFJEdmg0Q2JGQ29HeTN4QkRoRkQ4d2RKYkpCMGVYdzFnbVA0cm40L3Q0MUwwZzB2UG1pbTRUNmVEblJ5RWlTT1A5RE9pZGxDdDZtamFseS9uZC9vbXJaM1FKTDRubmw5WFB1VjlXK2Y3Nmw1dWNxcWNxbjc4U0J2U1JodkxqeW5yU3VidjJUa0VkdmdnTlpIeFdMM1BuOVhjYXFET0F0UVNYVmd0VURwRG1lTVRJOE9ERExVM2ZTOGtKbEMxZEFtUVVlWUJhcWZTM3RDWi9DRHZudXExeHc1aHkvU0t0L2FaKzd1NDlQcDFwVXhDMFYybkxaYXRGSm9wZk9BcXVWbnpqTWVSVlUvR21oQWZ1cGtvcWQvMW1SZ0F0WmZmNFo0Y2M2dFdjN0NwRndLSHFvdzJ2WDhJVjB0OC83THprUC9IYVB5UjlFRzNmMDU0anZZS3dwYWczTHM4dU9jNnZKYUpxd3pOSWI5bE9zT0lXZXN3aVJIMlpjUExnZWhUbk02OWRMZE5NVTlvQzRaZFExTW9oVnBncmZqSE1sSm1kN3pDSVc0a1JuSVVGclg2VE9vUnA1L2t2V2tWVytmRUNRckZrRENPUyszS1YzSjJOZzVlV0E1QmJ0TzA1ODhIZDNyQjFLcEdha2tKMDY5aXAwaTFERGFNc3MvM3lEdHE5ZHl5czIxWDRiTlZRQnBTMlZicjkxOHNDUWNZK2FjY3V6ZEYwSFhtc0FIcjc4TGxEUHpKNmQrcHdENEtueG5WUGsvMk9TSUx1RU5FcC9uaUt4L09DeUxLK0RwdDZrbDZPbjd0eGZPdm5Bc3duMS9RS0JZRzBWeVphWXBFaDVlUkJXUDdMbFRFaU5YTkdjcGo3RE56SGlaWlhRNWk4WGRQT1NWRnBTRG5tcGZJMVh6VmJPQklEMGV4YUtjRTJML0RPU3NwL3dOeTl3Sy9lZ3BZa0x3cGI2d2xPVWdqVmxGcUlDQWcreStjMnhnMmZsYzB4bngwRi93UTR0Z3ZLc1ZNalpJYk9qb3N3NmxkR1gvR3RKdmZodkhLWXMvS0g2RG4vQzFkSDB6Y3VOaFdtMHFJZERkU25JaUdBdjByZU5OTTREcUNmQmdyU2FZci9BbUlHZmo5dmhGOUM4WXpPdzhsM09ZNkRuVmVXRlRpZi9aQUFFQUdnQkFBQUU1QUVBQUR3RUlPUUlBQUFBQUFSOEJza0FBQWdBSkFnRUJDZ0lBQXdBWlZHaHBjeUJwY3lCdlppQkdhVzVuWlhJZ0tEZ3A8L0JEQj4KICAgIDwvQklSPgogICAgPEJJUj4KICAgICAgICA8VmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I+MTwvTWlub3I+CiAgICAgICAgPC9WZXJzaW9uPgogICAgICAgIDxDQkVGRlZlcnNpb24+CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvQ0JFRkZWZXJzaW9uPgogICAgICAgIDxCSVJJbmZvPgogICAgICAgICAgICA8SW50ZWdyaXR5PmZhbHNlPC9JbnRlZ3JpdHk+CiAgICAgICAgPC9CSVJJbmZvPgogICAgICAgIDxCREJJbmZvPgogICAgICAgICAgICA8Rm9ybWF0PgogICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5Nb3NpcDwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgPFR5cGU+NzwvVHlwZT4KICAgICAgICAgICAgPC9Gb3JtYXQ+CiAgICAgICAgICAgIDxDcmVhdGlvbkRhdGU+MjAyMC0wMS0wN1QwMjozODo1Mi42NzFaPC9DcmVhdGlvbkRhdGU+CiAgICAgICAgICAgIDxUeXBlPkZpbmdlcjwvVHlwZT4KICAgICAgICAgICAgPFN1YnR5cGU+TGVmdCBJbmRleEZpbmdlcjwvU3VidHlwZT4KICAgICAgICAgICAgPExldmVsPlJhdzwvTGV2ZWw+CiAgICAgICAgICAgIDxQdXJwb3NlPkVucm9sbDwvUHVycG9zZT4KICAgICAgICAgICAgPFF1YWxpdHk+CiAgICAgICAgICAgICAgICA8QWxnb3JpdGhtPgogICAgICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24+SE1BQzwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPlNIQS0yNTY8L1R5cGU+CiAgICAgICAgICAgICAgICA8L0FsZ29yaXRobT4KICAgICAgICAgICAgICAgIDxTY29yZT42MDwvU2NvcmU+CiAgICAgICAgICAgIDwvUXVhbGl0eT4KICAgICAgICA8L0JEQkluZm8+CiAgICAgICAgPEJEQj5Sa2xTQURBeU1BQUFBWUhiQUFFQkFRQUJnY3NINWd3Y0RCNFBBOUFBQUFBQUFBRTVBRUFBRHdJQVFBSUFRQUlIQUFFQjlBSDBBZlFCOUFnRkhRRVlBY0FBQVlGYUFBQUFER3BRSUNBTkNvY0tBQUFBRkdaMGVYQnFjRElnQUFBQUFHcHdNaUFBQUFCSGFuQXlhQUFBQUJacGFHUnlBQUFCd0FBQUFSZ0FBUWNIQUFBQUFBQVBZMjlzY2dFQUFBQUFBQkVBQUFBYWNtVnpJQUFBQUJKeVpYTmptY29BQVpuS0FBRUFBQUFBQUFCcWNESmovMC8vVVFBcEFBQUFBQUVZQUFBQndBQUFBQUFBQUFBQUFBQUJHQUFBQWNBQUFBQUFBQUFBQUFBQkJ3RUIvMlFBSXdBQlEzSmxZWFJ2Y2pvZ1NtRnpVR1Z5SUZabGNuTnBiMjRnTVM0NU1EQXVNZjlrQUJBQUFVVnVZMGxFT2tkU1FsUXdNZjlTQUF3QUFnQUpBQVVFQkFBQi8xd0FFMEJBU0VoUVNFaFFTRWhRU0VoUVNFaFEvNUFBQ2dBQUFBR0FZZ0FCLzVQZkV2QVVPNjhJZE5rMmtDMVduUW5pOS9Ga09aQ1NzTVJBK011MUxYWHAwNVhFSysvaUtaSkpHTXZ4L0k5SktOUkZLWURVQU0zWDdiV2x0a0VuZ09JQXVaRTVhcGs2cnIzTGlPdDhtRTZtR2d0Y1hDcUE4U0FqNkg3UVRLK3ZGWW5yemY4bHJKREh1UG44Q0FBTE5xSTFBSm5pRzRMVWlqQnI2THRubHNOVXBPdCtPWGRIREx3ZWJnLy9BOFpzWndCRGtwcVRJRDI1M3lSaExCeG1KcStvcFNicGxCVFFnTTFiYThia2dOVXBwOTFQcWE4NCs1Q3ZBNmVWbTdtRzlhaDkvYTBoNThhRnVVQzdURThFV3FMQ3V0RXZQY2NkaHFXZjhwNG5xRUNsREx2eFR6ZnlCemRyWC9TZFdVbmUzVG1IeGsxSDdNb1l6ZHhROVpOV2VJR1QzeGNDemhrUzVlZmhjNkdYZmFrd2orUGhZUmUyNWs5b2haenhnTXllbzhVSVdTbDNLcE00czFpM3JxYTZzRXBJS2RQa1ZGTythSWR5eUlzY1JINVM2ZDMxby9nYm5HeXV1MTNhcWhOTmdRTDhabDhacDh5Q0pDeHJsM293TnBwYTdEQllJV2FTcXVmZ0x0WjFJUkFlSmp0M0V2aXNrNnNlL0VUTGpkSlErTmgrZ1ZIRVZRSUZVYVpHSW9oYjZkUzVUekVaQnIzMFgyaElRSW1wcTYwd1JEcXBPWFgvTU9FT1NjNHYzdGJUWXJIbWIwYWpGNlQ3am9jbUpwcXpKOGtpSHNDTXcvdUxRWnlyK3NUK0FrenJ2T0J4VnY4TnRBMWcvMzUzTU5yR3VySmZSZTBzUzdCRWcrZkhqNkNhTnBqUW52WUp6RjRKZW1GOElWNHF6czZUVUM4VjU3bjlodC8wN2N0RHZ6YUthdUNaSVA5NjZwdHFHQzhuVml6NGFPSVg5WFdjTTg2ckYxU2d5MjR2aTA4ZVZyd1JmclhQem1OaXQzRHprajRkR3FqN2lQRjZVV2NVR3E5ZDVaVDJlUnVBOEQ3NVM1dFlWL3JpUkhrNUV3dG0wdkp6cTk1MlcrV2xJQmdUUlB4Z3RjQXpmOVJxaVRURW0xOGtyQmNYcTR4UWFyQ1ZCVEZDV1BVa2l5RG5yZmNvWmsrRDgzR0dPV3A4bGtYTC8yTUVIUnlvdVpjd3UzUmw2L0NvUmxKNDlOc1ZTTGRadkRQWmdjbFNHcVJPU2I4Nm9rY0Q0dGs3V05ISENIZXVsOEtZdmZINUJXeDg0QU9OdzZXWDFwVnllQ1FzN0JhZnNiVXA1cU1GSndTNkZSWXlia2xKRnZ4ZUhONC9ISm84T3VaVGorcTNuTjI4SFJCZkRiNUhHNlUvVklKRml3bWxmcUpMNmRZcFFZa1ZnTmJTeXN5d3pBdDI4cmF5NHZ1emtYb2w1ZndDdlN6TmNjNTFOWFE2M0R3UkFxU3FjdjJ2L3BqTGZWb0RwaGdzbFJoSzA0b0hLeEhmZ1ZDZVJwdWNQdmE2U2s0Tm5IdnpMclJZM3MxaFc0VkFleGlwNDJNR0I4eGxER2VveEtwbFo4dmhYSjJWY29aQW5wTzR0U3dFZlpMcEtiUXJabUR0K1BnclFyTjlpV25HVVFldEVrdEhYMFQ3QUNtZ0JvYWg4ekJUMGs5YU1TZk5yK0U0MWhTRDUyeUQ5MUpvbjYyeTNEQWFXVWZWeXJJeVVsQnJ0ZjNkMm1xNGZaL3dLejNqYkttTnhLRGFXSUJOdTFhcld2Y1BldzBrTHpQZDRHMHlmV1V4NVdCMVlQeW9WOHlOZlFwUVVtN3NPejg1ajdXZ2w2SjdYU1JQNk9IWTZ3cjlKL0luckpab0Uxb0Q2TDQ0Qm9TRllUemJ3R1hFNTNVTEt0MVpUM3pjaStqdVVDbis0NjhJaXNYbEhyUW5CTnk1OExCeHB3YmV3aVJDazNaR2ZWTzh4OG01bnBPOHVhTUhPc1YybmV6cjgwejFyVDlDazBZRkNTWWdpaUVTK0dOc21EUmV6QWtpVUc5bFNQUWJ6V0U1bUU2cmpLM0FWSjFMMnZiVU92T3puSXV0YjNoSWtLU0Z4MUh1TE4zUGV1K24vV2RVVEpUdjA0elVqK0ZpODRkVHFaSjh1OFpDS3ViZmgvZi9LRC9MQVpUeWhtajR2RU9JU29qOTU2WUsvZ0J3UDBJM05XVzA4QU80VjUySDRMdWliQ3g4LzFYTytlWjYvM1hOdGd0ZlRDS0R4SDhMd3BqODFBdHpvbUFuREZKbTYwcDhJeitWUlI1eVBJc1lPaWNHNGx1UVVSU1dUZ1M5aDdHekVpekVranovQ0d4S1RIcGtyM1NneXo4amFlQ0M2aFVuenl6MUtoL0g5Ri9KVGN1RTlsSjgremJySmNQZzNSZGFsWXlHTjJUNUp1Yjl5ODBMMkQ2d0xuVUwxbnFjb2R3OW1kZk1LM2N1NHNnNDlsS0RtZkhrc29rQ01nMUp4Z0RjQ1NzcktzSGpGSnk0cE9QM1dtQTVHdFFrRDNOTzd6VzJ5cWJ6L0ZhSExQZE9WUkJTMzViMzNkbm5OR1NLZ1YveGl4OVJpTTZnRDNWZFZyek9vNWxSVmNXMjFSVHNhQ2p1ZEhFVnhZaFZlR2s1N0g5R0lRQ3d1ZXJZMCtvYXNra081dkJJZDgvbmQzSTRuQjMvUnVEMktub25nV0MxcXRwUjJjUjJ2ZUdpUlJxZSt4eVhFcjJCU1BzVDB0Wk5zbkcvQU1Ka0JheGJxSkdhbktmbWh0aTh0dGVVZmtiUHQzUlVzTW9GTVRNekxsdVhFZFExYndheDhXTTNPd3pKcmVkL0pPNXRsM21wTDNmOXZjQi9tYjdtK0ZUcE91Vm05eDlpVTVjYkJjb240SG1aaWJTY2RROGcvU0hWbnNsL0dNeHhRMXhvdG04UEF6aWlXcWxEdDNtNG5ocis0dXBuRnRWbjBLemJhZ3ZrMEJReU1UMTJIc0RHVGl6UDJMZXI2QnRwVnlacVh3NTMyMVhqU0hjRU11SGE3NmpiRWpUR2lJT01XdUNIZUkvbmJKcE5jQWJKSEJLSEI0OHZVd1BuK2pPV2tTdVBlRDdXS3ROc0Nzcjh5eFZKUk9rUEtWYnI0VUNROXJ1VUlMWjFpSC80TzlWWlZuZkRrWUxCeW9Rc2orRk1XS2ZBakttNGdpV3p4b1dCYUZUWlRVVDJqODlmbkpQdk1xRi9VZEpkeE85alpDWE5YOHNBd0ZvRFNySzV3MzhiL3l0YU9tRVp3dlhteDVRT1MyUHVSNEdLa0IycHdnb0w2Y1BQMnhZT0c1bkJsVFE3Smx5SS9zVDBIcEVLVm0yV2FKTXB4M041ZWF4c3h2YWFpU3VBeTlUbDlEaWNIYUtndWJvcTY3TDdQRUJwZkI1Y3VaSDdhdHFrZU1aNUhHQ3NMSG1WSTQvREpQV3FMd1hTcTBTWDJHeGpvbmFKRWN4bXVraWptT1hCN29NOElFV2dUM0h2ZGs1MGFiNXBmUVhDUEpwTWYxUURWa2JSOTJvRm1LSDY3TmFLd09kWHdnSDVKcFZUdnBkdUkxZmtkTFU5amY4N2lEWnFUK1dMMUduZ3JCTmxIVk1SemJEUG9NTFFRYzlRZ0tGZmdPZFQ1NmZvNDlXNW9EdUc2S2RBTVhrRzQ3YmxXdUZienR0bnRzdHBZTy9aUnBLby8wN3lxY3F4cXZybkhRWkVaREJKYUdKdmJJV0U1UlpMZE0xeVR1YVpnWHN5MGJrSnlTMlNzcExzUUZic2JlYWNtNTdpbDdjQjEyeElKNVZ5Wm1qQVlickRMTWU5UFd4bnpKN0QvajVTc1p4Z2RXemJEaW5jamdEWlFZYk5rbGNsQVBYckEzK2pieHZWZlRXZXpibHRndmJYVkVPUVNDdElZUk0vNVlLTUlGN3VqVmdaN0Jrd29aK2tObk11REVTdXk5SkY1TUtNdmduaXFFM216dmRvRnlhUjRPclhWczdKTXRWWWZBN0JnN1FIOWpHR1FmS1JHSUFsZndrd0dKcjIwWkFLQm5jTUJCTUtGb3dhMDdxSzlVQXNhMGgyQ2xQdlBQZVVXNHNuNnZydkFOVWdoZk9XMFJPZXpoYlNwUkN6RlRSNFlUMjF1OU5vZ2JRaFdQUS83ZnBiZjhaQ3dBMHZ1SzV3K0lmTjZ4Y3JRa3k1YkxHVlRPcnVRNktkUGRLM2N1dlhiRzhDWnBUVWdjL2tqcFZ6Q2xXWndDZUF2eUxyL1NvRVBHSUFKWDduUGFnU0hOYnkzZ0JNcXVOWmRiME9WRGdGdngvUGJKMi8vbkxrbDhSUjNobTFPQjRRSlovRUNiY3BoSVRPeG9XK1lsajlXSDhmREUvYkJvQzcrOTlxdzhvU3p6ekFBY3NEUGQvd29RbVBQOVhDREozQzdIZmdNcCtiK21iK1hvNk9BUFlWb3diT3dzSUsveWJpbmhHcW9Cc1hsR25VUnBjSVNQbkRBTlFSeXpuU3F6VEhNRHNHdFdaWERkVGpBUXIyRU1GUTRPbDZnNjQydDcvK0pRWmtMUmlOTGRJVnVTVjJFNWlqeWo4b2lpMWZDWHJNV1M0WnI2ck1zV2Y4MTQzc0Q0UytJaXhFSklobVVMb1Jpd1RLcGhCa1NtUVFoY1ljN3A4a2ttNExYTGdzVWlxWmtNL1JCMVZid0U1UkhpM3NiOFZXL1ZOQVNBdkRqdFRJWktRbVFaTXVJL2hNUXp2enppSjhnWEdrZ2xhWkJJeHNRS1VubUh2c0ovYk1kb1A1YXQvcHVDd3M3NjNwKy9YOHE4UDd5MlBocHFOellHT0lWU2pTemJlY3VuT1h2WFowMmpJbWw1R2tsYTBYQUJpMVlncitSZVhPWTJxY3BvOGxMSURWbEpianhKVmp6OXVydTZjREtrRk9FK2s2VEF0Q08zaEVVek9NM0ZscEJ0bE1zaFlxMitnUVVyeHZSbHpqK0Vyb1N4NDRNaUppWG5uckhzM2xSemVaaExnZlpBRWtFSTBKc2ZBc093dFprSEdPM0tUaWhyQm5PQTNnL2RIVGZnVWUvTWZrUkVqVW5iUkNUQ1V4UzdEL1NJcTR4QVBvN2lDT0s2QzdFUndnbjV1K240K0syWTRrdGZXRHdEUk9XZnZoTE5kTUZ1UzRTcjhIMzczZElpUE80T3k4bW9WS09POFEvaVA2cGh5dkJocSt5Z2p1ZnRReE5vYXh2clVpbW5UeDh0aVRCdmVtVS9qVFcvOVhRM28wbzhRSis2TVo5c3E2L2FxRExaOXZTNy9RTCtvMG94aWsyS1loK3dwSk9FMTQ1Z2dXbWZGSjYwS0pWVkUwQUh2REpJeHR5RmRJMmdoYUJNcnBHVVgvWEttQXZiZUw3TnNyWmxwejU0bUpWNmswR2pDZGVZRkJIQ2ZRSUpid1ZLa1U2L2VLSW9RWVJoajBwWHJzcm1qdTBlM0FUVWNPZmFKenJDS2FYTHE2WkVpR2ZOcm1CdVZISGgrQzZvYTBXQ1dJa3loclV2aEpKNXJYakN6VDJhV0tRVDZoc2V1aWV2U1pKSUtuUWVwMXlWNWlIZEVpK1N3NmdJQ2RtQVFWZG44VmRuMGNGOFBIMUp5R3AzTGNmTzZBVlN1cWl6b2lhdzhUaXplenZIUUZkN0JtT1U3dG1ETHVYRkZGVjFFa1NiYUZMOEFaMFlNVFJYaCswaEZLU2JSK0NRbmwweU5FQU1lSGpoL2ZIcWhwdGdVREREOWxmT0hqNW1DQ0ZSSWNqWFd6VHpML1ozL082cUx4MEYrTi91TmRNSjI2TFdZK0t0emxpRFVkb2N0ZnpNVG92cVpWVTAxalMyeWNTYzFmZXlrQUd6Z0tybnYrSDN3eU9JMmxGNVZOSVdIcjFtNk1SbjQrOGNJekRZSFA0WXNOWUhMZ3pqZE1rNk9sckZHT1FsTHdFNTVOdVpYanl5ZkhEOTQ5SjlYVTdJUDRqS3RHeTNPVHZ4TWF5eWNUZ2YwSnNEVDRWUUtQWjZwMVV6c3FUYmNuZkFjV3d0NERXRmZTSWNoOWlGcCtreGxERis5UUtFY3J5YXRjZlg3M3JpUUU5NHNuY0MzUGk1M3R1b3p3OWtqbDVPT1h0SHRQa09xRW1XRWdWQ0R4R1o1c2lPQlFhWWNxS3c5N0toV2FBZGYxVVRzL0YySXVKUUJXNndNYUs5SHFMRXRoSnduUHg3dEZjaW5KRkJyTnlnMFIrbzBscVRZSEttSERPQkhPZG9rc2Fnd2lPblRuTFA5QmZNTzJOOC85Q2puMEtRL1d4Y0E0YTB0QzNuR1F4VmgzQWcweTlpT1lZVUpVMzB4YkUxaFBJT0hiRUE5NStMenhwbDZjS0ZBTldmNUtPbmdERTJGWmFhbHNkM0VFeHF1Z2tQbHZCV2JpdTFPcE9VTm1lQnBDRFluRnZEUDVJNlBTV3A3cnlYM29SUFdvS2NudXoyQzdUcGhadUNrcVk0VXB2alRpdzV4NnAwY2F5SkJKL1hCYVBCWng2ZFZGaThtUzAycUlzQjkvRzVWTnE1c3lkNldjOUZ4WUdvbnlvTk9VRTJLeHgzaGQ3QVV1Wm5hY0JDRDY5amM5aEVSSWs1b2lPWE9LMklXdHR5Z3lhT1UwRzFoTEQ3YzdieVdRdUFGMkVESWJDU3dPRTY0VzMyL0FLQjNVRU1DLzFQS1c1YU9rOTk4b1QrRUxjbGE4Z1dhTC95anBxb29FejVuZUU1R251emF1d2NOcjFkTmhOYzRnNkRCVXlXbHVFTGYvTHpVeVRKVFppZHA0dUdnUnNVc3N4QWxIc3NEVUZPUmgyMzgwSnBkL2FZWVlQNEEzSzBrTHBIU3lwOTQ5cGN1RU85QUVXejdna2ZHVUxqc1g5Yzg1QlhsRVdTaEJONHczNU1WWlZhYUlFNWFSTWlPZ3YzSk85QnJ6c3NPeFJSRC9QYzJmVzlieThVaXhmQ0JmMk16Z3dEdHp2YUhTR0hxM3NFVkl6UWRSclVKMXFaeTM2U2luQTlKb25IS2VEaDlZYlNYNkdxMzM1RjBCYXpNbUJnb3FIZ3dQakkzbisyR1pIVVpORkdjUmVSTk9BazVTdk1sZjVlQmVWNTR0SERWSkI3RGRwbXBMNXgrUmRDQzZWQ3Vla1lValU4VDJKOWsybnJVRlAzYVRLNkZYRXgvQTRscURyYVFlM1BkSG9YL25kanVvdit0ODQzUDl5Wmo2Vy81VUdGZURvTHgzQ0pvdWhUeUtLQWhhZHhLME1uUDVSazFIRVJkK2hPa0JNOFBpVmJZWXBnd1JwSUZRTC9SamYvbC9NVlhzT08zeW1HVm5BN3N2S2xMYUx3VEJSZTB4MWtyczhZNklEYU1UOUNmY2pyN3U3NUdsbmtld05Od2NlVzZ3Z3poU3Q1MVJZK09rYUtjbmhQWVJLeGVlOStqMk9oRjBKUHFKUUlzQ2ZoYUYxR0lmRWpQbDlBMHIvWHNnanBDYkl2eFg0OHRaTEEyZStMVTB1bEcxQWlQT0UvYll6MmJDeStZcGdxUmdKejNGd3hob0FaNWlvazd6UWVFYjZUWlFlM2lGNis4QlF6ZGZqQzlPbEZyR2w3ZDB1VEhKQ1ZxbGFhVk5Ea0doZGg1RGowTHc3d2xBOGw5bks5R1AyT0Q1UGMxbWRVQkh3MmFYd1UvekdSVmdnNDJnbHRsOHBvOXcxWGV5WXlhSGFSemhqMisvMndOL1R4bDF2TWtjMFRWdUt5YnZ3ejlYZW0xMCtDRTBLUVBERUh4c0pqZ00xdml2QUV5Y1R5Yy9TLzhOTG5VTzdVcHd0QW0xaVY3Wm5TMWw5Unl3RUV3cVU1dFB2Um5YNjJMVzBRUnBKR09Bb3g1bTRFRkV6N21Id1ZtaEgyZXZVb2VOc2hzV2ttNW52a01kSGVZekxyRjR4N3paVDdid1ZTck9QdXYweWcrdW0yWVQxWXBJa1BTVGhWd0NhaFEyYmxTVnNLZXR2NlQrVlVJSXlFcmZBSStlcDdIN0xaNkl6TlNaZ3hoVUZiOVZldGtxRlRySENnYlZuTzJhTUIrdkdsL1JsNzM5djl3TVlNNTVkcm84RSt1YUtKR1RRRkdzOEtTMUhIZHVXaE1tcEU4cVBwc29KMlQzWjkvVzdVTmd1eWQzclVyVEJPaW1ISnd5Vms1MVozR1NudkFtd3Nra040Q3hlZHQ4SFNNZUt0cmh0L08zYnRPOGhlMksvNFFlZ0JlcndOR01wZGpFb1NlV0lYQnZQZVBKS0lqUUQxQXZuRUFuUStaMGFMQVhSd1pJeVBxbE9kK3BlL2dnNExjRWVMcGNKNjhTR0NTYTlqbFhjdzFOaXg1TXdTT01Md0tEUzhaczIxVmJzbWpMNEJ5czZoVFZkK2c2UDFNcHBTV3hhUUw1SnBsZzlOSVI3YmhLVmtWdUtzTVhJekcwVDhkUEJMYVBvRG13ZjB5cDgvR0FBWEdCWTJncHMyQnB0STJtSVFuRTdpK1F2aU1wbXNzQXFtWmtDR0Rmd0dKVnAyZWEwRnJJaFFBUFVRM3Z0eEQ2Z0ltZXpJY2VjbERVdkc4QitFWmtrN0ExVDluNjBpZWhDN2VFMEltby8zaU02cldtMUJlekJGZlh6d2RyUlBrNlFlb1BucjZGMlNyZDI5N00vcy9pYzRNSDJGVHM4eGF3L0w1cFFkaExiNlNHUFE0cVpLbGpsOWZKOW1ETTlsQXNBMHZRMElIT0RZY0t1SXM0dndycXZiUlhyaWZ1OUhJdUUrR1gyeXlqOVVQSmhValVhOE9ORTJNNmxyamtGcjNBSDdVWng1b2NPSEpVdGVCaWh2a1VPZHREbEdMbDdscVMxRVlPdlZBeC9GWjA3RDI2bkJaY1l6aVZ3RWlqb1FSdHJqNVVOSm1CZVVGZXVHdmltMnFLSklYWllReXJUMzB2ZnNwQStHdTRPa1huRmlCYUMwTnVqK3lteit4Y0U4VDBLYmQ0dGlGcnh2ZmhMdEIxSHI5bDAzTHJIUUxvazdCRFlGQ3hRQnRPUm5UeUFqZGQzT2w2ZXo5YVhtc3FDaGdGeFJuWHBkQWZDV3hRVzM2bmdkWHBjTnM2azMrWGRwOGE3d25Ydi9tcFNrL29kaUN2WEtiUUFFYndNQllUd3Y1b3Y2N2I0UWY0b25vMnRKeDkyRVUwaDlPcnR6YjRQZCt2L2o5R05WSklsL2RUSm13OWRUeUJXdzdOdGRuYzQ3VXhMbVVpbWpCb21jQWp1Y1ZhYjdQRWtzN0JFUktBZ3lmMm1XL2h0endNKzlIN1Bsc1FTZW5QQkYzUW5PV3FRQmZLSWFibEJxN085d040MFREQjJmRytFMnlISDgyMWI0bnIvVEdWSC94aFpSWmErNHYxMGV4dktvYnZieXlnc1FPbmRhSWI4NTUwRXRLdVZiQi9pRFhKcFBLZlc1WmRJb0ZYa3paZDdYZGdnNmRadHpDazgwTitJMHNUQUl0TXo0Y09PQkFNYkF2bDFWaXo4RHBXOCsvNDFHUnFKeXR2L1BXRVg4bEtkZUVFVjhLNTJTZ21ZTDBzenc5L0R0OFpFQ1pXdExmaVhiQzROb0FldFdad2xUQ2IraHVHVml0VlN3LzcyTTdPNnRrdVlGOUtldnFjNHdxRk1UR0pheDhKRWhIUFd6RlNXb2kxQ1JYSEw1WFhRa3U1QkxXT1pralkzZGowbHV1amFiZlo3enJDNW1LUUlraHJEMW9yWmo2M3J6ZUJwK0ovT29vdXZUM25SMVd1T2hucEh6MFg3ZWJLbHNvb2NGalprUWZqRWRzanRQbk1NTkdrYXpzbGFqSEZFSmc1YmM5WXg4dTVlMXhUWEF3M1ZLWU5MWG9MZldSSUVxeThjUEdOallYTkFxS2xCTWhmMTBtVWtJb1dsVXJMWmh1SU8yN3FJYXBMUVN5eWxwOTFPUEtpOW9IckhOQm5BemN1bTdzZ3lsZmN1RlZrVU5kN2g0V2N1STVhVkdBRlVFS3ZSSU12cUdTNlpadlJkQTMwa3pCRjM1bThHKzdWNWhBRjlrN3ZKb2hDTE1FVXVSSXBiaFN6SHU4V0FWNlQ4M3M3S2pBTWVtZUh1am1CZUtLWXZzcGxDdC9JUTQyZzlQbjFZUGROaTNQVFNYTGRRZXFSdU5UVVFwUHhXcjN0YnhZMW91NGNUZzltV0FHNHp0Wkp1YlR5dVZ3a01FTm8vd1FVUmZ6QWdaS3lrMHJyeEhEZjQrK0lLVGRDMDJMN0dmWkYyYUJ5Vkd4Tm5MczZoODNhdFMrRjJUZHJzd0lBZkRkeGZEQTFBWWtubGF5M0tEOWhhZ3RMTFg3d2tuZnFSR1NSbm42cTZVNWhrV2FXK0U5ME5vQVJ6NUtzMEJvM1FVaFc2MjVpVzBOQ2NmVUtIcWI3TFVSSnRYZlRRTUtheG1mK0VDWDZBdDM2NnREYTJHR3NCUy9nc1BuVkE4RkVSeExQQTN6aXI3R3NkcVRkUXVudzhncUZhdWhoUWhRa2RpVmd2MUNGN25QQnVFSTQySWRpa2tFSFNvU28rRENoODNJZXhOMVlyZGhXQWVBTWNZWFZyRlJmRjBLSHh1ZzQ2RFU4Vno5Wmw5K3dOc0dVenkxbk9XcHhUUmZTTlF3ZXRKY3AwV1FUbTR5WXpjVkdZbTZLdGhtYVMxNWQ2Ym9LcWQ3WEs3WGt1YVFsOVQzbHg4Y3pMMWFQRG9RSnlkVXhNRDRNSGhsb1YxWm5UT21WMW5zZTE0WFZiayt3Mnl1VUZxeldmZndNeXFwbTJOVm1BV0ZMakRHN3AvdU5lakQ5L1k4SEZIdW1nN0dEUUg5NUZYTzB5amFSTGlvVlBDNEViYTNHR0dqOGl4b3dmWGg5RWhxS1cvZWgrb0s0UWJWblhjYU5JdHRZZWZWRlZnVFJTV3Evend4YjQ3VlpWdXc2cDVoSHBqMUJSMlIyYnk5U3pyaVBWeXZjbytqNUdmOEc3bjNibGhXN3FjM0l0Si9Dc1dHTkpqbHdlZ0ZLbWlwdVh2bTBDYjVmYW9qYUVUUXBqcVkxTlpGVnJ0Nm4xVnFuOTJ4ZlppTVlmeWNSYWVPbk55c0FxRTI2L1NYcHhaY2FTRDlhdVVYcExBNS9MRXlzanFzSXZZSlRjV2FLbHFGSyswd0RQVjJabnJid2VwZGhRMWdCTVI1dGI4NXA1OXE0OVNYRXIzTWxvMzVWU3lBendKYkhlMEJvU3RRTUIyRW1jZnRUUTE3N1ZoK3Y0Tk1Qd0taVWU0N3JTSlNTTFhPdGwwTnd0azN1dTVGdGM1UWNxRkZTdWFIRUNLOFRWb2JlWHRiK04rcWpMM1dib3BKRDAzZHhZeWo0RVNtcVVlS3dKVXN6KzVrQ3p5RHNBM3lFYkpLdTg2bW5DZ0JYbFFrQ2o2M1RHMEdkVjgzSS9aL3lZS3VERUlabXVZQ2dkM01tMkh4WmFMYmNmRmg3YlNNZzZ3alJzWG1qYnVJdmlMWWdsVGhJQm85SjAwQkhrUlZ5M1Jmb25YUWYzSjFWbWc4Y3NWaUljdWdrbUtuUFVLMVhZN1hyUkpHYVByRGxwY2hDaTFxTGpZUERlMmtTb2VQOUcvTkFLT2ZpamtVUjRPUC9iTjFmVUx6a3QzdEFleHE1YVBpbitPSG1HcjJJMFpUQ1Q0TnNJcXVmTFl0TTZuWTZQNnpRTWVDYm1INDRnVzNaazBnYm5MbXpqY3k2WlUzZmswaUlXRTJnNnV6UHNhbEtUdHp5QzZtK2tNVHJQZHpqV0ovUTJibkdSQ1pVaVA3WmdVMU5rUStpU0phYitkRG9FWVFieFFwL1pzU0ltM3YwbHhLWTg2MytpNzV2Y0dDZ0lqRUJxSGNvRFF6UGd1bzhMTWNHVEUzY2YzZDRvaXF1dzI2S1lpc1VmV3hOZFY2dDEwdFNMcXdteFgrMXJXK1U3azExdkhrbFBJNE5jTWgrSkxXNGFZdUp3QWhIMXYxMmtkSVU3c1hERm5mTEZJMVU2dTlGYjNMaG43VHY0Mm1Mc0t1V3BXRXQwd3hCeW1qek9WSlZXUmx1OWtHZzlxWjkydGNLbWluTFkvUTJiTUVOR0tTTDhCbEk2bHBDV2x3QzBPS3h2VFE2eTVpdHlIL21iZXg5Yk5Bb29KMkJvaURnQzF3WllaQ2NleTNPYytiYVViR1Y3eTdIRU9NTFQwNitReDVWVFIwNUhXSkZpRm5DSTlEQ3U4MGtTL243UW1RbVhNNTBVZDJhVy9uVUdjU2svd295OWNvU2lEQzhDSUxIVGQ3NWNudGcxbjduTXM2UW12WjVvUEszYlpPbEVkd1RqQWZaRE1aWDMvZjFMR0kzR1dEMmhoNVQzZXJicEhoc2FBbzErWUlsUjQyR3lGb2NVZWV1TURjWk9lVkRMNW4vWTZTb2xDcFo1N2lMUHV3U1liQm1pWWcwcVJCOXVUREU0SG0rYUVxc3NBVGlBZExqaFdaYVpPa09pdHpDbmJvMUg5SVhhMlYyR2UyZ1NNMmpicExsWkVEK0JFaHg0MGVEQzZ4RUJ0YWtSRzcwM3gyNGxxVEozc1g3dVFtd0NLTDhVNGNlaFJ0ckRoYlduTkFXTzE0a2lsRlg4TVkxV1Jzdk1ENWtXU2ZidlZMak1YOXFKelUyelZVMnFHNk9xMGdKeG1PeEFlZ3E2YVZjdHhrUWp4MVd2RnFFOGdoWk9iZmZ4MVFtMTMrRmMrYWdFaFoxQ0hpbytRbmozbnZ6MzBXUUhmSHhzaVVNUlBNWC91N3owM014WlNLcnZCVGxJZ1M0OFJpdkJqR1Y2TnlaUVd3Qmt3aVhRV3dTYU9vOFV3U1BTSDkybDloeFJSZEJ0bnNZSWRLc2lXOVVsakZxZ1IrVjN6elZiTnIyR1JFbWkzWlBmT1FtbWFla1o5ejhLS2EwM0dXbjdZQzJ4Q3N3TWhybmtvMmJUUnBMMlA2U2h1TFhQU2poMDduNzBXbDJscXF6RWN2YmpwNGQxSUN1b2xnS2I1SWs1eEF0TmJRbFFJSVlxbm9FMnR5MmIraHhNRnB1RGN6RFhkZG9uamxaKzJjTkhhS1F4cGJOT094WjhaZC9BRjVlOTMvdDZFdzNMd0hWd1ljWGJzS2NmdlVMUUtidmYxOEVlWG55SlA1eEcwNHA4UzNiSkdSQ0tNRUNmeXIvU3c3WnhWUkVSMFRPSkRuTGkyWTVzTysvTHRBL0VlMk5nMkFLazgrUHVDWmxyZkFJbmgzVkI4ZjBaR2UxVVBrbWZHY2NsbmE5M2hqazhUWDZ3R21idTI0YTRFb2FsaHdiYUNDZEdHQWhGaGF2eHBsb0sxeG9sMWdKbDdpbktURzByeHF1dzVFbU1nTFZIdGpmRzFaZXRuOXJUc1R4Z2tzZXYrb1U2OXF3dEJ6RUVNd2EybVZsZmtOOExQOGx6clowMWl3Zks5OUxVb0JQazJQcFZqdGhmMGF4ZVVML2JSY1lReGdhOGZqaVRBZVJEcU9HK1NMUlFaNVJ5MXZRaEFKTGNBUncyei9DYXdJdjljQjI0SitUSWRDWVZMVE96WTYvb3RzOHFQN24xRlJyY2dPOFlnUjRQUkd3Mm5SQWZCaWhxTUt1Q29aN0tWcE05VnRMRVBubnVaK3dvREdTd1dZdG82Rnowc3JqVTc0WTRRN2MvUU9xdkpNWElybGd3TXN3UGFuNVlmc0pzakRNVnhvWm85UlI3SDJqRmF6RjVHeXdqVDJ5NHMwSnRObEFyZGJZTXFZZ1VLcHpPT0dBZ0lDQTV2cGtBT0RranhQWkV2WGlZUXZqREhxTDVqRVEraTBicTh6KzRRQjk5YnZDTFFUUmpuTjNJQ0gvYW9CVld1ZVpZSU5vZ3F1MGc2UmxjcUJTR0tleWJ5OVN2Ny94cUhIcEc4c2NlRjdrcEI0dlJKdzY4b3N0Um15aVZiL0NscExPYm1OVUVMd3htdUpQRlEraXh5eTFqelFtNmxnQWFBUWxwdkNZeG13RmxsVUIxU2t3a2FLRmZybWg5TUJ2cVFwd3FoYWdwb3pwZitWMlhvSGR5WnU0WjU5bjI5cEFKSHRDWEdZV1RLQjNDRDgrMkEvY1NKbmdMeDRRYUI1NklHVHVzakhiQ0pvSkMwNW1STXB6eEZ3OTJZSitBMkplMEV1ZlFwSmhOYjZVQmNNTUhwYXZiTHFackVNZHhkVURaWjVuSEJQTUVoSGdXSTFXWHVXeENGRGxHc0pHMEVSYkFBb1l2T2hFNk8vUEZZbnBRQVlPd1kwMWNwUk83RC81RVdpbEIyNlJrK3hrSWZraGM3V3V0OGM1dWdvV0lkWXZDaUJ6czhndmJLT3RWbURYVDc1Qkw1MnAxSVd4bzNDTVFnZFhwQkpmSDFybVhOUEJNVEg2bjRNcEhXeVNMc2J0ZXZLMTdxQUxpQTg0ZjZmSGM0UEhNVDYydzVBVzFadGNlcXlGRlpNSVhyMGRwdkJGRlp2ZDU1amN1alBoeXlSWEFlTDQ5bkMrNkNpcTNMZFJtOGRLeHhnSmVhTzZCbWNQZDdjQ1dTbzlBSkpYejBnazE4SkpwMEd0R0FWNGJXQmRKNnoxdVRITVVua3U1Uy9CU2tIVmZUeGZlc3RoN3VsL1Jwa28wNENobktPNnNySU12MlFqcHFUM0ZVZERTYVVkZE5wM1NCRnQveFJIeGZPdmlMczBRSCtkUFJ3UWxST09lRDFmNjFjT3E3OXIzWE1KeS9JK1JDNjBIZmVlajA3a1dIb1lxZHN0N0Q2Sk4wT2MvcDRsWVYwT3NsOTB5T25OblpjWGFjR3p4djluNjl6RXN3VjV1SFFJQXUxdlFvMUN5TnVXaUF0SkJTZmxaV2crcTlMNTZzeHpEbHlkdURaNkdsaVZVVC9FMk9IU3Fld0FwNldQajZyVTlYQnUxQjhMUWlja1Q3T2ZEMWhPRnA0Mm4wcGVjcG0vczZXTGlZV0ZQamxSWjl1ZDFNUVE1QnU4RlF4QnpocTF5ZW1rN0hQeTFKT2ZhODJabm96NVpsWDJrSTVvYk9hZk5KdzBpVUoxQXNnZWMwVHlEbkNvQ2t0Smk2YktkQjBMSWhyRWhCaGc0Lzl0SmxMcXNsWEt5KzFnVXVabUFnaDFxZ3loVkJycWkvQWYzaVBNeFlXeURPRTdqckV1b3BHNVBPR1QvcFNvdGxCZjh1dlczRlF4V3E5eVVEWG5PWUZjMzhjRTFqS0xsU1Ryc205TlJiUWtQQUNNd3RCbzhKc3pOOGJDVDc1bjBadytPbmpOMnJ4MHRwWkpNYitjT1JhQXdvM0NVTWtqWGxuOW9SaFFFYzZwL3duU05wc3Y5cktpbHNBVzkxYjVjZnplZ2tvL3NVMVpzSnZmQ21QbnBqWDVBY0I1dG9kNC9RUFNvdmMvcVBublZyU1k1Ukc2ZTIvTEVUZEx6cWVOR3FNMjJPZDdYclJRU1BCRm1CNWZGdHoralJ0ZDVEd2RXY0pUYk9TQUc2aFBNSjVYd3A3Z0l3czd4L00zMzA4dmpGaFFFRWViM1E2c2ZWR1BTTzkyeE4xYkpPcUlVNGcyZHhIdHVsaFl4ZzRpS0VORWNpZEI4bzUvUFpPTVI0ZElUU3prb3pRemN3MHRXTG9ha3A5eDhVUGVuN1duTzZYTUltdG1CM3IxZnFhdnhTOFBpVmN0NlhlMUl3aXlCUXpRUi9DUTdJNnVjallVU2N2c3FGdUd5aHlCNWhJdGNvbHh5NU9oZy85anJzODcyNHVGU04rV3BzYUFsL0p0RGdJVXlqYWtTTWhaYXhSUVN5a3RUeHgwOXhkVjJkOW1rVUlnb0xTRnNnWVV5bnNxa2ZWMmxEL0FzSDFPdnhxQnhTbTZmamxFaVQwMFg4VjVoS2FEdHk2Z2RvWTVZSHYycE9qWUdXMm9VbThvanpuQytFYTdVMkdzRVNXbTA5OEtvbFFLUElrTHEyajlaRnRIM1BPcHhub0paQWExTndzUHYyOFAveDBmVURlVTBSQnZGOWJ4VjJLWDRjclZwaEV1dklESlhYVVBZekRqL2pUODNWWDB0YkEyZUdabGRGaEQ5ZExMWS9QV2JucmZXK2FBbzhlZVdObTJZRE1DalpxUnllYzlxV3FtQkx3UWpYeXZsVnROa1BsR3NROUtWelJDQnlIMWxrTEhxak03M3lVR3Y4bDZCSUprVG5KRW5KU3N4a1RMbTlSdVMzMDZ0OG5iakozNE5MQkJmTHltekNZUXBoYTdkeVFuZ0RRcUV1QmF6b1AxVVBsbHB3N3pUYXNzUWJGV2h2SFI0WGN3cGdlenkwVGJUYmFTVUJNOXc3K1pqV1V5Tyt6cmN2b01RWGFPdDN4MnVGd3hJTmVlRGFiYzFqbDNwQTlONm1kSHFkNUdxUVV3dTZNNUd6UGNTb29tUzBFVGV2ellaUkEyOTRTZmF5dktNbWllTTR3SE44aWJPWWZJT2lKcjlFdUFQS1Q0clFFQ1JsKy9CZ1B1OWc0QjBQUmdQeUhVNHlsUlg3aGd6eXZaOUhlbjh3d2djK3dwczlqVUFEV2tGcGg3MUdNT2tTMG1zcFdIcUxnbzk5YnhDd2pCNVdqdG4zbUxvQjhwS1pQanZyMzh6MEhCV2hVQWRsa2ppdEcycmVEd3kwTUZib0xLc0I1cHhEUGpXSkFDMFZOMkZzV1IxNnhHREJsQk03WE91aGJZOUI1aWhwU1dyNit6VWk1bFkyZjVhWEdvdVZ0eEtlWkcwejBtZGlvN0NzbFhiZ3JqOUlsV242N0Izc3c1NVptR0RGZmZWaXZKOWEveWF0WlhzL0I2MVB3ZDFFVUM2bnYxN2ZXNlNLWmkwdndJZ2UzNloxbWx0M3JXNEZKRGYxZlk0V1g4WU9BeFRrczNjZEFmK0E3dDVRLzE0MkpKazRWaEh4aWJKZUg5czVUQTVIbmUyM20zTlltWHh6NUI3RHB2eFA2QTRoV1pRQ0NqYXVuMDRxM3ZmMGYrcVJneTdRVVZURUs1NUJjaElaYUxiS2ZZWEE5azI0enNTT2tHNjc4d0EyK3p1VjF3ZE9rckJZMEdVSEt5OXdXb3JpM1NlcjJZSlo3RlFYcm9HTzl4amJjMXk4dE5zemg5ZzZGR29ieW9ObmU3SnU0QlNkbFVzNTY2MWtTakc3MHF0dG42SmcyeEpTdXJjeDBPVXhSdU1uVTBLQysvSUM2OVgvcElxaFQ3VENPQW04TUt4dDJpaUZjVThNTHlXeGJaMHBRaEJlZlpvM2JUVEJPVENhOUFpWE40L3dnM21HTWp2Z2hacVl3TERQS1djcitCRHRhZXgxTE5zR0EvWDNWbzlOdGhNdjVGMHZTYXVUVnNkVlBjM2JQWnpkZWU3YjNFZTRGcTVrUW9ET3JaNlpGT1RpRy9DSFl1UjJlMnJLYTM4YTM4K0t2eGEvcmgzamNNaHVya1JCdFk1RVl1NWVnUS93dUpWSVRrNXpGQkxsYnJJR21ZTXRmMWltV2ZxUGpmSHMyY1ptK2Z1bEJZeUV4ME5pWEtBTktvc1lKUUI3L3ZzQ1pvdVhyTHZqaHdwc0duZXVqeGw1OGowMkJnWlRpZ256U2ZqcGJHWUNiS0J6c0pnN05jaEp5bHpyMS94VEhmcmlOajJvd0NEWGlLN0dWMzVYM3YxMlhTRHNIakxWZ2g5b29hT1RNR21iajN5RFlHVk1ZT1plNWpRMU9URkovNElhK2k1R1N5RS92bXFGZEZCV3JyQU92bVdSSEQvWndyZG5PMnpFY0JYL0dFbXBMQzRiV1ZoTUUxZmZSME94WkNXM3FPQTJIK3hTb1Noc2Z5QlFqU0phREFsUVErbzRZVHBrK2dPM29Ia1RwN2VpUWRKdW8wTlFVOXh6THJwdzJ5RDJyZVdGVUtPRWhUd2RNQmpReDdpL3RLcytMU2lkTElBYXZDclF5VVI4SWdUK0gzZ29QZldZY2wycmxKQWIzYmhnRG44bnF2a25vOVZsdHpTKzZkbVJkRmxCZUF2c3BhaXpLWDg4RlhjOVkxcld6Y2ptUWJnUmZ3S2dEM0xPcHR0MEg5ejZUajlsOXZmV01jZHNaanhEQ0FXSURFTHJwRFREMjA0d0lEWXFyR0lCb1gzcTFmbXZmVU5rME96UWU4K2wyWkppOWwvZDEzNm5Qc2ZSS0JSMmoxVzlzdy93QklRYk9OcEFIR2xqZG9HVHZ6VGRUMFNjTGlYM1JzY0dOSzZ2MWpnU09EOVo2MzVmalBiVFJQN2MxMnhaVHduVktzSjVVdGwrR09WMytaMkZBYURjMWpOQ1dtenQyRkZucloyUHYwYVZTVHRvVmx5S0h2b2RUL1h6WHdmcVc4RUxXYjJTcWJpSVFJZ1Azc0VvN1hWU0JoWnNZZXd1cUxxZ3VVNEFOR1MzTnFmZFZoMzFxY3VVTmJVRTdGcGI4RnVZSkFvSjQ1TDZJL2tpWDR1OTFJK0N1VW5PWFdhK3ViY3cvVC9hZkVadGpudHBCV1gvc0xmWG9oeWpDZ1dkOXEwMzVQUFN1dGV6WGNjaGMya1cybTUraW1FU1NnbVl5ZWNUVmJEdTNCZVIxNkNjRjdNL2ZaRTNpc1ExckJkK2pEV2RQaUVML3NRdzM5Zmx0RTFQMk1KZnJhUDFxRS9yYVAyTUQvVm5SOWllVDZpKysyMHV2dnZ2N2RYUGZmZlFERzB5Q2k5MmNmMXh4cGZweHNYL0RSTU5lNlhVU2wrcS9waG9HQVh3cXgwNVhmNS9ieHMzTUlBMVlmMzRFOTIwWXYreXNySUZmblpWNGsyQndFc0tNbXFpNDBvSVdxQnljeTlLNzJyZmtDOGtlTkkrTTFnakIzdkxKc0lKN0NkUEpuem40YTVzbmtGdXExbkZoLzdhbEp1cG1HVFlSSjVWaDdBVHVFQUFsNzhNd25DMVkzQngvSk9ReHMzcVpGVGdMQkxmQXBkOUdNaVNQZElRckxzZzZBRVZJTHVlcDNQS2tGd0p6QXFmRk9oczRvdVBvQ3hwdnhGbUgvQjF1K1hiV0FpRHNNdXhLZnlIdkxGNE8xUng0aHg2dVlyTDFRbUNPSjRFNW5IVU1UNVRqUWdqSks4eFhLait1elVTV0NlaDRXY3k2YkVBYnVHRWRqbmNZNDQ4ZU5EYWE0OThEeHhGTWRlN1pzOThvb1BUa0ZJSDY2MzFUR0VPc2VHQXkyZzNIMlBkNWJvWTEzUHI5akZHS2FPUE9QQjlnWXRPaHpCV01kWm9HUk9RWE0yMVphL3N6VzNLRDVIOHZJUlE1RHlCUTFTeEFUSHlGa0FYMjZLbnovRWhiUzY3ZFVoN0tnRi94NVp0V3paVkJubnpoSURNVWZYcSs3UWhYaDZabFJrR3pRdnRaMFRFeHVNSjdGK2NlTkZOaUMvYnVXbzkzOU1LdC8wd2pGOFh5Um9RREt1TXcxemkwVy9PbHNpaktyeGY4OUFiY3dZMkdQQk5XNXNKbU52TEhpTGRUTGlnV3dRdVBxRDhWeEJOeitlT0xzTWFldUJkZ3k4VzJLbDBLRmZQUXV0S0Fob1JwUkFqMStldkRTWVBLTU0zazRvTkFmajJCcGozc1VEdVNhdmdHNjNEMDkydDl5c05zaVFxZXMzUTYzc0IzR0VzTlZUTXdpUUhMaE9ZVmZwM1dwVGo3bi9zZWg3NlpTeXNXbkRLMmxuOGN1dm13TjUvNXFOQ0U1ZDN0ZUgzNjZOdmd4NllSNHVJei9HRHIraC8ycFBZaVRSMHZBejB6K0FCSEMzRVhVTSs4dVRuZ3hEWkVsWVNUeFJrYjNNY2dPbVlnZU5wTjhSN1NvNWlDczl2dDFxRnZYaW9ZSjV3ZzRTbk5aMDNtS0NSWXRIaTZHa250K09iZE92dGRNRDVWZ28xbWtiUmNNdjhLWHBDOG56d2U0ZGJZdklYU1FaSjIrTERDc200L3VpQ011NktoODhiMzlvZ1lkdmY2V3I5Ung3MjFBTm1KTTFyZVcxOVg2M2g3ckp1d2J0cWk0dCtnRHpIUk1CQXRSN0g5V3VEaGIyUGpQNkE5QUFvd3Z4cmY4NjJiaGhzSS9Yc2wyOGRrVGU4cCsvWXNNMnZvSGh1NlJUWUFGNzYyb0lWSkI5M3E4UXUrK0NEMGw2SkRIVnp6ZDl1YkIyTG1tV1B6WWNEYUI3UnVJT3MreUdMSWZQQnV1MElZV3Fna2lhQ1U3U29hclZLeUppSmZZQjd4K053Ym1Uc25RV0FZQVZpRU5LVnFRU1M2TWxLSTlmRmUyN3pKR3grL2pEV0dIYitrVFpzWDNXSWluRmUxV0E0TlNkeTZRZWs5Q2p3UFY5ZEFDVkdWQ25wQjBtNThwY0FZK0RoNVJmOGliUHZqdkgwSEwyZExMS2hsTTFxV2greTRlUlpRSWVhbmZTVFIwbVV3bXVkcTl5NzFScTlLTWxaajVMa3NyUWgzV2FmRitpSFllcHZ6dUsrRFVxckRvb0ZXWUFvaDJVa0NxOExkWjlNdi9VNElHa0R2Y1JVcUtYVG1lYWtLYnU4SjgyOExUQUJJbmZ0aWtNeTNJSW5yOXNJQWUxWFY0ZDBPWC9BYmt3RXZRUVlFOUIyYmVvWVp4Q2lWTHR4cHU3cFN5Tk1GTVNkdDQvUm8vb2NYTTJRRm9WL1BxVjBUL0JXaFdXNFN1b1NTd3Jkcy9JbklObHlKbFJoZ1RQemk1c3ZJNGhFNnpSNlh2UjhXSEpIT0wvaHg1VTNFVXJiNC9ZZy9LUzdxLzA5QnBNQ1NvTit2WmZiWUpzZHMrVkRJVjBRajczUFlaMzAxWGVRdGN4MVdpcHdPOHo5Uk5vaGhjdU9PbCtWcTRHOHg1L2VlU1FRYWpvSkVHNmE2OG54dUdjOExWdFFLTHJGRTVZeGthZXB2S1hvWm9iaW8xRk9zM3Q5Vk1Wdy9maXZZbmdkL2toSE9hZytsSElrcEkxaS9tMGJraUZNSWN6ZWVsaXhUd05MYzlSZ3U5aDdIZFMxa1BrdWFnUWF1cnlmOFppSkhMcERMQVhqZWRNamMzWHJsMEYreHJIRW0rU09TWDR3WnZpTEEva3Avd0U5UXFXOWxTOWVhZVBDczlMdytEWklpeTdVRjM0cTAxRDQ1OFA1L1ZrZXl3anJtZmltVWNrNXNlRjJLSkFMMFlvemU1UVdkUCtiUWNjSzZCd2JzS3FwSjZpVUZBQk9DU3RQMXliOUk3cGp4TDAyeExhclFPbzQrYVFjTVJ2alNOMDFaRURiRkFHMUhrUlppK2RUbDliUUhyb2w2UlFUbk1IM2xoUEE0NzZuUnAzZjd0Umc4OFZJQ0dpWXpzeThPOUplZUJPeHhTS0VYNE43T0V4ZFlkd0JMOUNoZnRlL0J1dHVnZ3ZCR2dxV1E2SnA2UmEyYTFBbXp0QjM3bDlpYm1DWUUwa1VwSU1OT29OcVJMS3pvUkV4MlhnMUhjd1NUZUpPaUEveFMraWVCK2gySVMranphV0kzWnZqQXNYbzEzR2JRRHBpN1Yvd2ZKQ3dJL1czOGNOdEVTdWFFV2MvaUh2UHBnY055RnBUN1hmQXlhM3FOY2RHRlorZm5TWitpNk5rSWhlV2FmcHFiMnBpSi83eXBSRWxBdnBta0x2dkpEcXRQSzRLa3ZqZFR6LzF1UHIwSTN0TlBYcFVlK2V1SWZ4M2V4TFQxSklpN3Z0dzdQbHJlT1hwRk1hNkhKN2ZpbWpDeUlqcisyYkw0M0J5ZVNjTHVhY2FMbnJSWkFIc2Y4emd6bWxnWUVVRHU5bmlFdzFpUDRtWjZyWW84UGxuVVBIWUcvRTg4K3ZvbDY1TUtkR1BOMHVVREdkMWtHN2F0M3lncDV0N2Noa1Y5TVhYV1pLVDBUZ2JyL0ZJdW9HNVZVV0RHb05tWnBQd3V5eFRpeERKK3o1Q3dwNnNKS1VUeXJ1RlFUbEZVOUJBcnBaL29BcjNTd3lEWWF5bFp4citnazdDSG1BNml3RmQ4dXVNS3pIeFFrZkh0dk5RSElZZEtLVnBmU2QwcGk4cUo1eUdlbVJVVm1YdkxUZzErZHZsYjdCeE0rSDlIb0tVcmlSZUxVSXdsZ0hiVHJ2dE9yeXNXdXZIMmNsK0ZaV1drV1ZDRzhseWEweWRoMklsK2Q3eGRqcDVXMy9VVlNValV1bDhnNXMzS2NvS3dzMjd4bTBnUElEY01ERXBSM1dNUmFKR0ZRbzZDaXgxT3JJcnUzM241dzZ2ek9jdUpFUm11MHEvVWFrRzE4L2x5bXlNQXAyT0lPMHZIVWYvcVdUTEdMNy9yRGIyMW1Sd2VPNjlDc0xzTVdhNzlaMFFBeUduaU9laVJXajFlcHV0Qmg5U05sTlZwblhUb0lWWHJHc0FMQ1ZITGw1NmJmd2Y2K0xMbUlQdW41YXBLR1BPTXgxS0h2eURiYVdaSkQ4bmMwWm1UQkNzd0xCYjVwQWY0VS9pZWJucnZVekp6TjZtSnJxTk9PNTJGRUVyUGsya2hHQm0wQXYwSWhrRjZFa21Ndit2bmRFSlo4dnhKWDNBUmtKazR1MXhPWXlmOHRRb3NJa0pOWXhTZlhxM29iOWFZOXYwb3dOR0FNdHBXejBmdzl5Y0c3Yk1GL0JBV1JIWlZyWGdDY01FWFZ2TU1reVVmQW51R2NZVmE2VVlYbHdlekdsTHJSaVZwK3J2aXlhZUNHMjU0eUR6WnEveStkZThXOU9PSEh0c1Y4Y0dpNmR4Mjd3QldEUmtvRU41TFFjWnMxelBEalNQcDRCdmJKcFVvMUdSVGNUZVhYTGs0NUliV3lwMWZlL2tVRlliemhDRWNKQXNkbXJVS3JpRE9xOEJHMTkza1pQa0ZmVHBxM0dRckxzU0JwTGJVT1FEbVUrMG1lakh5MXg5K29FNC8rRWQyRXdtb3FBSkd1RE9yMGJWTERUc0IvQ3gwdW5OSFhObGRIeG5obThOa2Y0MDJCQ3ZFekU2MWpiRHpOSFR3UmViMUkyajRJMUFrcTA4ZGNEN0xyY2d2NEIva09udmxJWWNWcHUzMU1jb2dwRmNqMnBXUjB4SlI3MzM4cnZKQ0lvdVZIUHNta0U5ZWxxbFlRdytKRng1THZMMEN5UU5KZFA3bmV5N3g1cERqVXp3dmtWVFFNZCtIM1Zub1V0Q0s0Yk0zZXlSdmw5bUNxNUxZUGV0QUNBcWhqNUxyQlNtNzQvZmtoUmx1NkFneDJJOEFBTldpSXBkY3dsT2hiOXRkeTlYSldBM1pUVDNOSkowcXBGVVZwVEx0K00zTE9GaUlha1loWks2bnlUVWhyM1pJajA0ME9ickptNWo0UzRCRFlRbmpxWFBxbEc1bGFyeE10WVAyWXVaQmRoQmhlWWRsNk1WS01WeXlZd3FNK0h5VGQxVjlscjFGTjVVWklzWWI3djJXenFRQXR4L2tYUTlzUzgzQmZYRHdkMWQyM29XWmRud3A1YmlKZGt6a25GNXNUOUhtQkh3WlRjR1F4d1N0aURxOGEycExkOGRHeUkvTEMrTDBSMnB5WEV1THRDZURxc3gyejRJZXhjYzVpOGJYRWo5OGdWMnFxVXVWWmRuZWtmK1M0dXV1eEFoMHNORy9QWUJMeGZZMmRUcHg1VldJWjVuTkZOTitvWHppSFBzWmJ2d05ndnJySWxCZWtHQmpjWWF6VEh5U0k4VVNudE5RZm1tbm9jWTRPdjh6QmQvSkQrcDk3NENHQWRmSnFzaHlSZ2RkMWh3WlhIaFp3RWdNK1NhK3BJcExDdEg0bkhuOTJLbW1CakhTclgwRjdOdmRvTVRxdmZGZ1FxeFNyVDBzWTVHWEFrNm1YaGZIUnZFdTlMblNzeWt5RlFadmpyVFVBdGVTSzFnYXNLVS9ZNmozeTRrWDFVS2ZoSzdDcTN6MW8ySUREcnVLYnZmUFl6WWVBN3JKQmZwTGVvOVdFNG4vNFV5MGdUR2F4UXAxSjZiWG9vS0Iwc1lqdWRCRWJlNWlqNkFERG9lcm9pNkxkZ29TRyt5OG5mQUJuYnR6ZzBRZnhSa2x0YXhSNDlOK0ROeW9ndjQ0YTZEMmNRZGhLbElRUUZhcEtENml4THRYb2ZGZmw1M2tFZjgrNW5VOU04R1ErQWlqS0dpN0NYY1BhTG1GbENuMlB4MVFOUTE1a29LUm9CL0E1Q3lyM3VJMFdQQWUwQ1dwaTRVQXBkZGJCbDVaTUtzUk5HVFAxQXY4SjZkOXpnRkQySjk4eFJpUHFJWk1IakpqZVMzTEpsMFlGNTRXSE9PYStUeitqTEwxTHRaRmR2c2MrRDZSaS80S3F4VklHQUI2TWJZRFRVbGpnU2J1d2pxVHFBN3Q5ZUhDbzROTlgzVWdBNkYzN1JobjdOSHZ6VjBMZzhXbGZ6bHFlc0ZvekpMd0ZRWVF5eUY0SjNuWndON2t2S1dEVGYvcndWSmJlWFpJNCt4MUErZWRKRUJQZTVHTldsbFZOb2dZL2lDMzJhQU1malI2S2gxQytFSlQzZWJRajZpdGYvQVpvR3NrZk5SdlZLTGQrZk5uYjRYb2FzNzhRbTRGTktKUWtPNi95UDc5Z3FDRjVoaEV3OSs4eE5idUdWbmNrSlNpbWJNdGZiaWNTWUJVRkdudytNQmNWazFvbTdLc2dEaDZLT01LT1hFNSt0OHNYLzNPMEZnbEcxbXBjOHIrQjdsUS9Nemg1Uisrc1prSXRGNmtqUFQrZHdtczhjU2hkV2xGeU5rRWlzZUdScmlIbEM4ekRsekNIblNEZm1Gbk5MaWVnR2t1anVTWm9iN0pvWTd4K3F3Yi9hUkRnZVNEQVcxWVpveFcxTEUvZWoyTm9ReG1UNXpUSElGY1ZyeVlHOW05azR5QXh4NUsvYlgyS3Jzak01V3BZdjBCSTI0RnJsWVprR2xUbHpYYU5QVTlmY3ZrOWNFTVRSWEptSCs1THRMaFk4UUllNmFGY3NvalZGZ25DdEdJRk5rNEZkVzFzd1VieE5vUUlWQ3cxU056OTUydysyVk1qb3kwRzVJUHF2TmlSNHlQL2Y0Q1JkYkt3OEtISDRManJBejlZT0tpVDloa3BFR2xRUXVmM2o3SjcyS2VSYTQrZ1c3T1RKTEJIQnhwSVZGWkYyK0lCZUhjKzNwWlA5VHBmYUY4QzVheHpDNVVaLzFlR2xDZTMrTTdrc01hdVFiekNvRUtDcXNpKzFnSjhoMng1VHAzNFVVV1hNdGVEbnJtTHVJaVVnV2xjZmZVUVA5K3E0c04reGxZajZicE1RcXE4Q1hoYzVZU2twdDIyTm02Y1UxbldsaEFPS0JraTVOTm9sN1JZNkNTVXRuV281UjRjNlpLU0NPbXVqZkVIemxWUytTVXFwWkVDK1FiNGoybUVwaTJ0V0ZDSXZnaWtmaDM1eXNmNlRYYjZDNlZqR2oxTExVZDdyRW5MYjZES2ZsM2NEbjJXalRHNGpDVWdDQnJMR1BKWEJjWTUrMGl5SHE3YUJ6TFVUODdEbXFuMFgyQW1Nak9Nby83cksvekhrNWRieUhZZ2EwRXNlRUl0WWdXa053Q09JOUIzZi9VcmFBVDFDVXhwMjBQNmk0TmNCQUNLcFdPUGNOeGVXOUNDc1BvZU1UTWxhS1IxTEJ0YzltZW04bUpNL3N4OEVrU3YrdGdFUDlkcy9ta2VIdTAzQzlKKzJyNmlySGhrV0JBaHQ2WmF5SU1GVXV6MDgraTVWRENZeVZoTVNVcGp4SFZZQUo2YUFGTVpjWU93eU14djNNZy9hVS9TbXo0cWx3S3A1YWxndmJDTkJqYmxDS0tuY0JLL1BDUHNlTDVsbjVFb3R5SnFZbUJHakR4cEp5TStGbE92M0RiWDJyY2NIeG9PZVhRVlZQTWJIb2E3SXB4M1ZpcW1nWUhMT2lFZ2h1UW13bjZ3bHA2bVU2bWRWdjE2cTRDYTB5R1dIL0pGTFhWSzJRWW0yNThzdUppRk9LWHIzVDI1eVU4dVpNSjVtbWh1QkN3MExjUFZBM1p4ODB4Vmc5OHJXeFlQT1dLRWlXL0NWY2dHbVB0VEExeTAxeGszcGxNTU9HOXdWT2xJNm1LempDYVFDVGxaMjFlWnZmUlpCcVVFNGRFb1JuRmxEaFZiWjNjZmdybE5MV0VVSVFFUjg0Szl2YlpqM2NPWi95L01YSXRnTVpIV0R0NjVYSmhFb29PNTFQeUt6WmEvaEIrSlJ1NFNEM3FlbDVZdEg4QXp3RVNDaW9nUFlQbXRDVU9naWs3VWNWVmd2YXd0cStaTW00M2hXS3F6KzRRUExQOHFVVG1oZjJRNmtmODA0c0VoZ1BXakdOc2lBMzFaY1hKNEhPT29tTC9hRmNZMnJYeFY0WDJHMWxNL1RNYmJwSGNNTTF3QkxpVzNhOG5rOWh1bFRDYW1KS3JzeXVTRzE3MWRNT3JNK2JPRlRZd1FDY2hsdFBRR3E4ZjUwOEtwanE2R3JRdENrbjg5QldHOHBtZlBBRW1xQkZtRTVkM2U4b3BJSGo5OXBYamFxdlNKd1QyT3d4ZHR2MG1FdmFSYlkwUGcvdEk1Q3lRL0xQSTE1SmUyczVkNHpYYi9kNkpXT2VCVVJ0V2tBck1FVDBWLzdhR3lnaWVBbkx5WUora2l1aVZVUzhxNFdHS1lGRWRzL2N0TkdTZDdKS3lRL1FZd0ZGQ01sejlYL05OdWs0WnRYSUpsR29RWVQwc0ZWQTRNTy9odjhwV1pQb0I5MG5LVnRQS0plMGxUd0ZVVWE2RzY3WkRMU3NNeGJMa1NMQkl4dEk0ZExKZVZPbVVGdEU1MjZGWG4zU0c5ejNmNkN4ZEFUU1NITGRiY1lkaE85SGhoMXU1alo5QkJwYlZlMFQ4ZzBDNzNnaWxacHU0YkkvMk1waU9wSzMraUdWckZIRnYxVm1xaDJoZlBTTGpyQWhaZ2dMR3lDWUtJTXdKejNkWUNQWWpDZVJIaW84Mll3UmZtNUZuT3IzTUdJWjlwUmwvekl1dHNuZEZ0YWs0bkNQdHlFbXNjaFdLQy9sbDFGbjBaRWxhb3dWcVJBQi9WMXJYUkM4Tk9kU0UrTGlnSWJSSnI0L0xZU21ET01hYmtOY0EwZGVCbjBJY0Q0aEN6UzZ3bGtFbm9tSnNBSk9pZjZhUUh4RDJRaXNBbGEvNDB5UFlDVHNkRVV0SEtWTG8vSW9lcUVtWHVBSldpMmU2U2Nlb1c5SHlGV3g3c1RYYWk4WW9yNU84QTVzcGgwWGxtZml3K0dpeFErV28ydkJiZWVNSlpsYVVpOVRzSHdESEx1YmpaL0FOcS9yTE9aMlhVSnpQTkEwZjkwb0R2TVBqaEFRNGxvZGpMNW5VR0FHZ3QyUmlWTkp0VVZQSVFJT0FWNG1sd0M1V0lxeWZMYUFQOWR4b3krVUM1bEhMbHlUKy9SRW54WXlBYm5aa1hwazh2dkQ5UUQrRkZiRDQ2TFZpdE1xb2pRVmFTYUp1SDNKVitEb3BQeWZGVWRBMXZXblIydGdhY0VGRjNMaVZHL1hWeHU3Y3hLaXcvTFFJRHlJSWNkeWdhS01MYUNpdXVUYkFJclNLSE9kYzZXZ1piSTNOaVJPRnJucjUydDdTcElsSEFvcHBmSVQyREl2RHZKVUpHeTZWRTIyWHlSVzlVSGVwRUk3b1dpeWs5N2FBMytlMkdFT2svUVRxRUxsNUZyRndBbHVqeWZMbVNGeU9BZHpNTlM5MC85NWh3VFJ6RWgxbHhUL3h4ZUpQb3c5WkI1MGo0QjN6aUhzSmlJRGFvVThLZjQ0YlRTc0p2bGdyS1FaQnJIMlB3MHNWNkV2UHdWR3JCZzMzTmZKZ2h1aWplSGo4VVZuMEFnZjJQVEpsMDczbW5TNGtXYjVDKy9zQ2Rxd0V6dFZYaDVIbHFkVUdwbDhmSWNhb2RnRHM5N2ZDZ0R0bFBoMGxIRzZSSmdCaVdSV0Z1RnFHZTBBa2NjZDRDem10d1Ztemh1a1dwdEZ5clBvRTJEVmRHdVJLbWlGY2VOVVhOMTI0UzhxS2lHSDFiSkJvcUlJOFQxYUpVbnNDbWdnamFkOHlhZkYrMHBHUmV6VUgwY202OFBlK011NHVzVnNEbG5GYmF1VE5rWEl6MkhDdDcyaWpqWUpmRmh6emo3ZFV0aEFnTEUva2RKMU5uK1diUEdOajZBMnN1UFg3SW1iRnBKVWVoQzNDek5tSlpNbWYvV1J6blV4cTI1bmNxRzFJejQrcmhndkhUcU1ydzJZN201TVc0UnpHdGZpODI2UlowOWRGMU9NaUdlb0ZxRjNjZFpMd2NsR0dTV0lUL0dsb01JRnJKOTMvSzVJRC9Xc3NBNFFoa3FoQnV1dk1sV3ljRXhwNU0rRkNBSThzZTFaQ3h2RW5WZm8ySFMxYndQS1lNM3F2T2JWUnBSd3Jta29rNUR3RXhsUWFRRWR6dEp6ZTVCZDhwNVcwaVhLTWc4WWZwZ0FNSFMxYzZSVXJndWt3MEg1SnJKRFF3Y1VOMWhuOTN0cmdzb2hKdTEwdTNnYXNkUkdSTHNTU20rdWNtalNNdGhTT2FSTEh2MWd2dTJXOGVpVTFwOUZGaUpLckovdk1SOEthYlVWZmg0MUF4RlpEVWd4ZGs5cGhPbkNvVE4wZ3hPQTNLOFN0VUprLzBTL3Mwc0VldHVkQlBDdzBlTkNLbkdLcHBhTlVYejUzWHk5K3VqNi9QZkNlREpucWVUUVRrV2VBNjEvaEE1M1g1akVZZmtBMHpSMm1Cb1ZvUWlMQmR6aXpaOTdHTVdrNnhrdWZsWVBUTUdiSngyd1NtbFllTXRsU0NIc2JvT1ltcXpHTHlPMTlnZFJ3NVBXREZrZ2QyQjlkS1ZiMitPWFBpaXlhRDRVV2hIdWM1SVh4OUFKTWkxWklZMnozZnEvYmZLbVo4ZlFwWmNqRk11MkdtWjVaUXhWM1UwWS92RHF2UjhmYVVOdElGUTFGYVFlRGRpSzlMM3hNWTROa2xvNnRpekUxMURFNXhvRnZnMUlnVUpBRUptSDZMb0ROZ210MS8wQURXYmYydlovSDBjaEtzWTBzZlRwMGdpcHRPK3lTMnlDcHFLd0xGVy85MUQ0Wi9uNUZqNHFVSUJpNmxvMko1UlU3YkpwaWZpSFlocm1JLzZDQ1RHSW9ZZGdGVk1rRVJOZHloNFVTM2Q4Ni9LV0NHMDNDemYvcFE3UU9adnNqWUdwSE52L1VwRm95bHJjV1paREtlZDdsbWpndkpQNlZUYWZ3NVZ0a1JsN1JEcEwyTFhCZ3BtOGs1QTB2Nk9VanJqYWVHcFJmd0FnM29NKzJWdVh6VnJxbkFXYUUyUjBQZ3QwZXpzQWlLU2FDditLL2VhVzhkaXJCRmZSSnJzb2JKN1VYNGoyOURtdzVQdDMrMTFsckVuNkYrcDA5RWxpY01tSkt1WmtXdzJyZzBZeGJOQklqWUQyV3BvZ0R1Y1FTM1p1VW1NUmd6QkRSbFF2SE1WdkllRitaMHFWRXVTTldNYjJrbllZcjRJa3lIRm9ielpTUGQyZFhyaGdoa05DUGxCYTcyMUl0cGlNaGZBd04rR25SdnBzZ1YwSmdWUkYrNVhNTHA2eThxZzVpL3h2TW94MFlodlVWODdWTXl4QmtZc3NRUXRPdTNCOWg3UGM2ZzRnN1lnZjV3OEx4T2Q2Z1h4dlM4enBXbkZwbXY0VERLbXVCS2l3ZzFzM2FzNzcxWStIb09mdzZrb1FTVWVSYkVWdklPWHNQeFllNS9nR2JSeHkxcXp2clFBOHhVU0lUVGxhNCtlWkUyaGZLTjNHK0Q0Z28zaVQzMVh0ZGxmbHJKUkxnVjdyaURXQU5UU1p2eSsvQXE2bkVsZUFrVXNUMU5Idzh6T2o5VGNNdzFodVRIU3diNm1IV3ppOE0vZ0VtQ3Q4alZmL1NSelZXSEQzQmJLQWp5VGJRTGpNSllGbmRkVzBYMEFrTGhUVTRMWmxWUktYZHRmd0xFVEVxaC9KS1BySW4xMk44N3dVMzNjVUFGTUh5UHN3cVVrMDBlZStNNUQ5cjVkQTY4YzNIZE1OZmY3OExtbTJLenB4WVFJSi9XKzBqVmREak4yZHV2dlEwR1AySkZmMUtYby9wS3dqS29zSWw2NzUrY2dlVjMxOVRtWUVhTW9NQmsxZUk3bjBHd1Y2c3NXWkI2SEhrM3V1WkxyN243VUFlbWFjNlAwZzFmQmxleHlDdkg0SytReUx0SUpVK0xsandXR0JqT1BvaElybmJTUlpGZWphRTViTWhMczI5OGxSZGdOaHh3cTZod29qbXVFakFoYUQzb1NrdERWQW9PS1k1ZDkrYVBxNVVwL0pmTEtGY0xTeXNDY05HMlJMd29naHNTeFc2aUhHc2dObVlIY0VRTFl4THJSZU14WU0rbVRQZk4yazhEU2RSSUxSM3ZCWFBGNHFZZEczTGFlLzh0b0VPbVhKd0ZGQjBNTDAwcHNWanlUdlYvOHk1Q051WFZlQnJRNjNhelprT2lQMkY1dFloWVZPZUU4QzVvcGJNdHAxSzlXVE4zbUF3RUgyaWF1NlZnQTR0R3Q5R2JyaElpSHZwbGlIeEd2aXJESWhKV0MrdUlOWnFORlMxNVA0dGVib01KcS9LMmJNa09IUWROU0hoaG95YjlUbHdldDJVeXRWbkd0eWtnNDdOR2NwMEpNSWx3Si9GRnFGOEpCYkdDcG9VdFVsMTZSOVEyem1WMWZUVWMwOCtKd3dtNm9zTFovemNXRnVuWlNRaDNEcTZSZ2RqUWlnSHFYQ2pldnNyVThRWjljWTJGWmtsK1g4R0VTRGUvTktDVE02MXhpZU9rVytxZitMbktUTk16NWxGK1E5bHdGMUw0VXFibFBacnRtaWs5cTlVZHpTa2M4R1hRRnRaUjd6UzBDd2tYbTU5S0wwcG1lVTNWQjdjbENvM01VbWN1OGpKUkZxcU4vZGZ2YnZQRnpFVk1WZUNIdDl5c0ttSGRvalprbVFhV1JuSWluYmorYUs5ZFR5TUFSNEg5Nno1MTRPdXd1bHJWUGJuS0F2TzdLRDU0ZXJkUUpEekluU0tZMjhwVTZNdTVJNC8zbk1VSU9wcURONjBDN3JHb2xzeU1zQlFlMEtDMmh6U1pGSHJLN05VdVlvVUZ1Z1JoWkxaSThDWG02cm1OSk10S1FqZHZkOHNDVU9QT1pVY0MyTVk3OVNqTGNxT2F6NFY3eWg1TnpFeEFvRDBZZUZQdmlZWXVCNjIzdEZWYVN0MkJ0WTRaalhpamNKMGFuZlYrQVpMeXM1ckEyM216Q1ZDTmN5V2hiQ1BxVU93bzJGcW5ZUlhtWEJZZG9zSEtLZGRrckZYL0dqMG1SSHBCNWpkR2pmeSszdVRScW9TTnZTbXh1cEVLUDltMTkwNVFUcWJUNmxxQkRwS3k4WTdzTFY4eDB3SEVpQUJsTTVYR2VOeUlWc0xlcW9RZU9ZOUFheG1mdnQ5Sm1NVFR4MlBpSGVzemdSc0VwOTNqR0VRYjFhMjZscUlxOFA4SkIwUmd2MmpYdFd1aGFyVmlRaE1CQ1Z3ZFJPZ3NpTTVLQ21GbFRIT1RZaVU5eVp0Y01SbGdESVQ3eFlpaU4zYkFUSDVyMkpZdjNpWlpGNG9aN3duSEtIdm1ZV1hTU3VhS1NDTExFaGNybk96OXZpaHZVRFFrUVUzNEtULzQvMFczSFZzRCtHNG1tbkZrejFwL2QvZy9oTUlXSzhzWWowR3Fma0F5MXNFUUY2enFNV3ljV2RQVkN4aWxsbS8rSWFQTmhMOGtSbTFLL2xkTnRtVHh1Q0EwcUIzS0VKQ1dEU0lBeit2UHhqMUZITzZmNTQyTUlodWxWRUdoSEhVSEd6UGd5VjBHMzBxdjNGZUlxVU1FTGR5eXd6UURqV2F0cXFEbzQzRmJwai9JNmJLVk9QeHQxQ0p5VEF5MVB1WFdMNzdLeXVLWlFjYU9nTWhEYWFTL212T1gyVi9peEZDUWFLcmUrM0Q1RVN6VFFaRWZIbzFXZjhZR3lQYU5KVW1jOWt2bmtpOFAzMFUwdzlWOVVMOThzUHR0T0x2TkFaaTkwNy8yTW1yc2ZVZDZtZUJhMm15U0VaQUYrQ1FMTk96ZEFUc09vdDBDdWpnSTFkZWVzRGpwa0Y5RnRrMmhRZ1JxYnVkeEZPdWZsUWtteC9rRHRJbDk3dUo0bXJ1bkhLR1lxQXNSWnRSY3JjTWxxNVVQbnZwcjVHTmUwQmlCVTg5M2JqSXFUQzdXUWtBcWZiSmM5WTFrcHRPZkZ4ZjVVcUhUSjJBUVpqazRQaU95a2JYcmltbm1KN0dqbHl1OE1vN0pScVh0SG1kTTVva0c3bDlUbmY1UGN6UlYrNUprODl0azhQenp0SUMwbHVqdEhHZS9FOEtPbEZpTkQzR1Z3djg5RWJvQ2hZR2hRdFMxYmoxYWdiRjdpUXRPZHpUbHRRRWcvbklMbHhYZUlFeVN6SGNsek5DeUM5b3M1LzZQMWJsOXBDT2hlSVhZbGNoZW5IWVY1L0ZFN3M4TWVpcUw4a0JySkI5M05BMXNGS3BBaDNzTjhzaWlxNlF5Tk0zTzBoU0RzRUxOS0tjeUN4TXVydWMrcStBSXhhc1p1WVg4SnBYNTluTXJxNDczUlhxdFN0VGptR1E1VWhmekRzNWJTSzVVNTdYWXRxYW5sV3ZmZmhCT0h1ZVJwNXVVOWh0M2FEN0twM1VwWEk1SnB3OXJBRFlMeEhBbitRS2htOCtIZVp3UFQwMm14ZnFiQUUyNktZMlk5OVI2M2pET3lzU1BPSjZHOGlXMDR6VHYxcVJHKzBiREdpZnRQOTlMaHhod2xLVE80Z3Z4NmViTXplanhFT1NpdlVERTNpdzBiQkJYaTNiMi9JZkd2cjhmYlZjSGcvWUZUTUU2SUF1RnJmaytvRHN1QVRTM2UvQ2JDSk1ZeTBpOXEzdTVOTmViUVpUYi9LKzV6VTZkZGtCWnpNWHozMVR6bUsyNC8wbktsMklxd2tFWFF2eXlwbmpoQzEwRVlCTENNYjZyeUVUdEV0aDhjZEVLVW91cjYyRnhKbE1xZGtFWGplZnRiYUlBSVJrSUtldXRQSmtuUHk1NnlRRGxjc3c3dTFmNzdRNUVIeEtGU3FIUW1TSTF5bmhpc1pqWXFTZTNMdzBtTVRpbUYzbWo1VDdhRkp1dUtuQVRVTm1oT1J0VktZUmIraXpTem5ZV1JrR1JGWEg3bnZ2YmZKUFc3b25UMzlxQmx5bFpkTmcySmtPYXc1cGs2OXQ2a1JxV1lYVzlnMHY1WVExTnRxY0VnMlZKRVd6NzE1ajZ4eERaMCtvN1RtWENWRllnUmhqL0tBSE1kejBhZGxBTW9VZzluaUcxWlEzMWx1SkRrRGxuSXdwYzNnSWxjQllQR3o3K1E2ZGc0WVBJc3Bzd3hDRG0vRjBhY3JMSDcrTTlUMlhub0RCWG9zNmdsakZSZnlGVVV1Y05tNzNiUjNEays4TTd3NEhsYndBRzZmNGdyVE5keGs4NlQzMXJWNVpabVJLZy9yWnJBTSttc3cydnVXYzNrQnhzaGVOdXlzNU9xaS9ENmJkeWpWWmYzeHY2VGRybVpKYmtnY05yRnZWZXJQbXZkMVlvbzRLVDdIdHhOSUhzbVpHWkxZdGJweGdTZ0dISnk2THk5a3lvQW9MR1hvRm1Iejl1Yi96eDRyK0dsRDBPRE9RaXBreGRhMDlrc0NmYzkreDF3U001Y01zNmZJdzVHMGZiUjFiRlJLMS9iU3FxN0dOSjJKdHFzMkIydjA0emd1U3VsSTlFbytnMHNQZFpLeHVoWlhZN3QrWU16b2tYZ3NhWlJEUFZ6SXAwNndiSllYL29lRVdUTXhlY084ZmxKdWl6Nm5LbnQ5SzZ6THgzT2dlYUhud3JLekZ4UHlhbEo5ZUFJSDRFM0ZYbGFtVHdrbDR2a1ZjZ3AvNGV3dHpRUlo4N2ZuWlp0MlozT2lROStQZlRIVEpvS0QrZmRETzByUTgrOGFVTy9ES1pmN1B5SENnbnNLbFVlRHN5SFVadFNMVTU5bXU5cXdhMjY5OFd3NWRRMkFvZStVb2cyYWFVL3VwV0lIUnJyZnNCSmRzS0U3cWZLTDA5V2tpaFAvQ1hRWmMyNHJTNndJUE5wcGhwTkp0MmhoU1UrTlV4aWRvNDlZWGh0ZHkyYkUxTW9vWHFCVzFiRzBTODlnNGx1eXlSRVB2YXMrZmJEMlZicTlrVVRKTlhSZkx2OEpKdDJRUzVqaS8vRVd2SDhmZXFvMVMrY0ZmTE1zZ01TNHpabWhoQVI1NmNZMGFJQ2dZQzluNGNsbXJOQytVSjA1eHBZN0M2NUlkclBaMWhSaWFXMzA0YkZnT05VNTJtS1R4QnhmWk5mVWRsRGxYVU5yaVdMekh5anEwWlBydW90aTMxQ2toMTNvby9vSy9RdUY0a0IrUDNpMmZxSVdybHJWb3Y0QkpoRDBxK0x0OUR2TkgyNDJJeHBQRlhST283VGxubWNlTFdDd2paQVBFUUlDMExCM0w5UklFT29oVVMzN3JWdFhhZjN3a2YwV3lHU1l5QnFmNEpMNTJqbHhQQmlDUjJSWjJuaU1aTDFRckhoVVpHQW5vTHhVREsxbFBNMEd5MFpJdUc4bVpia3ZOUUJQNnNzL0xUUzY3cFBIR2lOTU9hVGo0eFZadEVTQUx5OGN2ZUg5VnRWbjY2d3ZQQmpwU1hpMWdCa3pzM2lJVkxrSnRFU2JGVGhKNU4zOVhRc0dORG1DQWh3bFk2QzVjWXRhVnRaYWEyak9mZDFnRFVYdWJkWlpIbTFkMmxUOVl1ZWxqZ1JLSXphK1VJQ3FLMXl1c2hsT0kwMEpyVmhBdUJtWVJLSXVFMVYvNmRlYTY2WlVHR1Zad25pcVl6K2VEUitzRHl3VnFBYmtYTGhBempEalFGN0ROS3ZFd1MrWXN4TldDRy9ldklCaGVQaVpISHJDV1FPdzg4eE9DS092RzgzTExsUktySnR5S1l0ZkZmRGpMVnFVM0VyeU5lWEQwTlJncjNzS3lJM0liNTBLVko3SExHSEJsVVNzVU9NY3I0RG5ZbS9NcS9sTG1iUjR6WFVQTDNleDAwZWQ3cDAySjJNOGVFZXEvY21wNGJ3M1NIcUlnQWl1WE54QldnMzYzbkpXd3dkOHFRUmNqTW1aSlQvY2J0OVhqQWxYTTlhYlBhUlh6Z3NzKzdqeTdkKzk0UUpPNTlHRVVWYUxIMnNrSFVhNzRsd1RMNnliRGRVRlpBMDYxalBpeDFMUTI4c1RNK2NROFBZZWkzMGZIMisvRVFyL0k0U1VQU0pMSkZRazFrekJqSDUxNWtacFVFVXJ0bTRZdjd2Vit1MTkrVDhaS1NpWDdFdUttVis1OU96ZnpLMG0wSHNOcmZpM0ZhOWFVdkxFUG53M29zSzN4OWxJUEE1aVZoam9ISXI1LzNIQ0dUWGdzbDlrL0FoT241enJpd3RldURjdlhwZ0IyZElha0ZGT3MyTHIzUjlzc093cTY3dUx6cmd0SFNwWnFwWk85UTJEOFRSWU9ZN0huY1k4TDVXdFNNc1crTnhpZGRMSUpRdDExYnhKRThrZ1hCVGd3ajB0VTdLRzJhYVJUOTY4YTJvcmJMM2hXTXh2OFhtaFB5ZlZUSDE4cnV1QjlwcTUvOEpBczZ1WXBYUW9iYUIxOGhCZnJvODhsS3lpUVJ1ckRKcDZ2UGpjMzZjMUhVNERCMDdNZW5GZlpLazNCUDRPdGM5VU5wYlNvNzRNcnZ6MmlXakJuaDZEa0F0TFlKNjh4OEVUbURVZFBha3F4cnN1Q3RablR3KzhqZzhNTWx5Q0F1QlloeFRqZ1VNV2daYSsvaEI4MHRhZm5DMGFsQWFhNVNCci90bGlML0FweWxGbE10d0duMFdHSDczN3U0R1MrK09zS2dpZTB5TU50M0FwZmxRcDBJVDIyM2crTnZxOTl4NXhTVTZWR1lkUWk5WlFUYy9yVERkNEZNZW1CUDAvVXFnMG1wUGtteDBNejZOajhETjFUUmF0ejgrbmxORzZwZEJjMlVBUDhMU2x3bFBwNlBLYVo5Y0pkaWFQSDFLbno5MmdOd2hUekkxempkd2Y5cU5rMndtaDFPMVJ3RTQ5ZVZuVGFYZFJ4bmZhd1haU0tNcHdLM04zeVkzZ3hZamRleUhLQnJYUTk2bWRRUGFYbVN1WmtXRDFLckY2V3pTT3JYL1lTMm9JblpXZWcwVEJ4ZW5kS28xWDkvSHJUR0pUQWE1RnF1L05UTklUYXhRU2ZmVmNEaC8wTWdWR1dzZFhWRTNBV1lzYlVjQWQrWjJ3MkdhL1N5ZzM1bVA1aG9NZDFjb0s0Rm4rRS9qd3ZidEUzalUwSGdqUytnZFZhRXhPN05JdzFUdm5QNE8vay9TSWwxbm1RdWlpdEMvMkYvaytzMG5ib3dYcWljbmpsMHBvK0puSTQyM1RpdDFHQjVnZUhnTDVqU1g1eEEyKzhnQzV1QkdYY2Q4eEQxT3VwVlVFNmNsZmtLQXR4QWRMRDN6c1Nxazgwb3VhbzR5VTR2TkovbXZNbGVWOWllSThMYVBPcEltcFRJVUZ0UE14YmJuOHV6cnRKTW41RFNNcVJJSDJodi9yMkdhb3pwL3N3RXZrZVJlT3ZQTVJnayt4SG5mK1FXMXNMUWFCL1V3ZkpPbVV3MEVmN0pUcURvUUc3M0VoYTlBVVFXbHdHVG92Y2xXVE5FdVc1Y3psK2o1RTIzVTJtYUxUNmF0bjF3dEZtdW5RWnR6eGpyZnlCLzl4TE8xSUQ0UGlUWm0rc1R3UWhtbGtrbmJqN3k4K2hmSm5ZUm84b2VpL01HKzNyWVEwdlZsMW41VGo1VWpMMlZjeWtVazNsK1J0UW5RcjlYellEcHNiMmUyMlJGV3lJNWRURTR0VkRJK0RCbExCWDFhTjdUSVR4dTFFY001VlRzeGFSb3BDREg2WWRkbFFVTzlkZ0JVRTlvVjNySGJlYzNOWjlxN0VPeVBqZ1FwSWFGWlRzV09TZlFucmZwakdQanpGK3JxWlBQbzJFN3JUU1Z0UUhFWUcwWk9HdUd5OFZta0d5WDdka2hSZ0VUNytsL2Z2Ynh4KzVtQUYxSmtqSHN3b3pkcUtmczlqd2xMYWlCdnRBUmJpa2szbDhFTi8yYUJ2UEdEa3RyTnZvalYrTkgwQmQ0WUNqMTJ4alZGcEZva25uaTF2UlpzcDlSNG5PU2haZmRnb29nc2R0S0VVYVB0ak5pcFdMeEEwa21SUjd0V1VOeTJKYW9ORjRWcS95Q2hzNW8yTk1UYUVSUjZ0bElaVmticlY4Q0xtdm52b3VsNm5kVGlEdEdScEdveDBqOFJOYVByR3B6VmIwSVc0d29xb1JmdE5TMXNNOXI4aVc0WjRjVG16aEZkZXUyblcyRHJJS2F2Z0ZkR2xCUTNqdjVYdER3SWhCWkhXMUk4SjlyaXhoeld1SEtNMXJmRXY1TkExNTMvZUJIdWYyZ0QzNm5sMzFtRjk2WVA3dW9LNnFhQUFYODVFbzJURmgzOXFpK3FYcGxERVB6bG9VWDNvMkdyNDk1VjN5K2orTnFFa0JhOWx0bWxRd2piSWZ4ZnVwOXlyelEzUWg4bjEzbHU0WHZSa0VRNENFNWdQOVljbklsNS9VRUtQTS9KSk5YbDRUMjcxZXA3ZW1BSlI0WkdWajM1L0xEU0tLRWt5VnR3aVhXQmZsVlhWckxLeTBQVi9nNlVoanFmOElqU2U4OHJXYU1lSHhkOTBUQk1yV1VZWWhTVFNaVENhcTVxZHJsNHJFdHZTRCszMDMxOFlBTXhBeW5NcEdJQTlmQ1JDZXR3NzN4ZnhlRmd3cVRqaHJFRFNZdmdtc0lwb0JPRHMxZnQ0R2h1b3BDSURKckh2dnlZczZCRThXdDMxZDFGTHM0b3RHL3BwT2hubzk4eHNFY0FsUGkxT3ZCWFJPVEtud3krb0x5dFVHK2dFSG5NZEQ4blVSL1FIMC9kZUlUdFBQeGlMU0U1azI5OVJQMXhWdEsrdVJtZ1grUHFXV3pNbFRLZ3pEY2hVeHRnRDVNWk4yQUpkenpaTzAvVkhIUlV6eEZ2bEgvRVJTUzdwQ0tydjhGMzJnbzQ3N1dDc0hWY0ZKWlRIYWJrcDFqekhibWNIL202NURQMnFrUFJxM2lSOWdRZFB2ZWNuaDdlaDNxak4wei92Nk4yb0RRbzI1ckYyTHY0dUk0WER1clBaYWFBZFRqUUdoUnczdnhvK3dCcGJUc1l3eVkvQXVoTEFzcUxQZ3kzM0J6a1RNWW9zOWJPcjIveGJ6ekFlS1pnT2lHWkRBbVlYQkxKQ1h4eTdHK3JhQjg0dlFJTmJPdDJlSFF3M1F3bS9oOFNkaVcvMXI5eXJVcWROemZ1dDdER05JczlSN2Y1QWRmQUh4UGkwRTZxdE1wRE5lclhuSVFXZHY4RkFUT2dxM29SZ0VPWW5tV3FiWG5POFhuZ1lFeklDSVFpZGJRVmwxUnBBQlltc2t3OUd0M1gvUTVpMXJyS21XQ2VPZE94bVMrK0x5ZzYzc0gyQlJwYVlwSVpocnh0K3Qrd05Zc2p4bHZtdjhrUHdqQlNvTmdQSEtwaWJXUG5rR2ZYMytsM0g4WS9Ma0toVnVjZkpFWEk1UVdQbmJsalJKN3ZIM2dWTmZVb3p0S2xIU1F4NGJqSHJWbFRaa3lTc1pJNUFvRHhRVzF0SFByclA4TTlVZjJPcC8wcVRDVVFIUWJTQkRFRjlzcjBibVI0MzNFYzV2Nzl1TnBPeDdtV1Fwa2lxZFJlTTllbnpXWnQra25iRmFuSWk5cWcvaVlXTit5bjFwY3pUMThGUDQrUkt4Y1ZncjdMWnlrN01ZY3ZkUzJSZUZWdCtOZHFkelRDSGVSbXlIdXBvZVBzbXBNQkpqUS9OY1lUdExJZnVMR1FxTkFCTDRwWFVBVUVQZTMxU25XY0E4cjZKOGIrK0xUQ0U5eTY1bktQeDRDdzB3SElVemFGdEhLYlNlUVE0NzFqRlFRVmZJRmZUamNIei8yLzErSWx0ak5yTjhGVWRGaWIwNE8rcno3Y05FdHp4aTkvZkQxR2tOZ01pZUtabmxSOG1yaFdlRlBDQzJJM2pKR1VjeGVZdGxuSWo5anVBUFp0SVdzaFR1SGRjdCt4RG9qTGxpY2JIbTBsb2xURjYxREJSaTlnWmxIMHc5Qk4yRHY3bERLc3BHeGN5UzFGWlVIY3ZzMld5T1dsNlNTRWN6bVI4aFVSVnYzZmpFTUc1cE5aVUVVVXMrcko5Tksvb1FPczFwZHZ6ZFFnSUw3dEtibXlhMHdBRmZOck83MTdQUFAzbVpWMklYaDk5ZjV2ZVNVeTZxVml3bXdaUW00TExBQkR4b3hrcVFWYnAwakZDK0hRdTB3aTB0QWRpbTJ1akFnTXNoeWFMR2taaldaLzFDVTEyeEZ6NUJmcjNjcUhTeks3UGdUUmFnbnpleWFzTmcvVm9pRTAxMEt2WEUxSE80RGtaT1BEc1N0ekp5RWRXaVVGUUxvZWxzZlJJbkVTWXFZa0lHRnEzRS8zMXc4RGpQeksxNEtVbUhqYVVYS1FEWTkvM3JIQ0JZK2JtNG9vaFU4d0pPRnVwU2lORTlVVEN4aDhmdnoyTDlpN0xpRm41eFB6dTJCeVlzTVhPa25reWU0TjNUQ2FwYWxrUnd6Vzduc3dVL1YvZ05GZXdXZ211ZStIYjdJYmh0VHVHUDNPN05zbUNUUkhVaWE0WUE1cnMwWm4zaHF1d1pIWnJaTjYwcU9BNEJobUJNMW5PVTJkWUFsQ0VZQVpzVWNaRVZpcXJ5YTYvYlJnY2xuS0tBLzMvTkl5WUhERFUzWWhkZEhRSndaQ05WZ3A1OEU3N3F2bzVtOW52eXFRMWE4bHJNb2pHRW56SkoxVmtCK09nbWdmK214ek5kaXk1QUZqR0llY3IraHRNZkR5UmpUVjhwcFJzTkthZlFSTk1aNDIvSzh5OXRqMU83NFd4NXYxQWFnQ0FSWVVVTC9iRzdrTVJSeUFrZlpZMHFTMENCYUtjbjhZRjcxNnIzZHU5QitZdkNWbWhBelJhWGJVd2Z3NGtGRllDUVdqQWlPcC9HdnEzU3EvdkZiVDN6K2hNZzZqN0lPekY3L0JYa3IxSm5heXRWWUVvK2hjaGtEa1ZObVk2Qm9BT2JwZmFSUUNqRGJnTzNDaUdJQzNqMS9RT3RhNjFwRGk4WHBEQ0grVWtueDNzVXIyRGRkcHV3c294bHFuUjlmMUxWdWJoQzFQSW81dUFIc1M2MmY4VDlDNzA2NVBCbWNzaEpaZkpjVEZockVPRFQ2MWNEQlc3Y0poc21iRVhBbzhYanBaQjVBUEoyUDBtVVF1OGM1N2sybXgvU2gySmVaY3I5WXBNWVBRN0QvQXFla0luOGd2ejg5WlNDNm9LZGx4cUhGQVBUWDY0eEVFOU1Ja0tZU1VObHMvV3VZTGxyVStTbXNISkhGMnZWRnVCYUNoVTJUT2lQUnk0bW41UWlCQWVBWWdFVkhUZUdHd2Z4V2lBTTFoNnFHOEplcU43M21WYjkybG5LVitENm4xUStiek1hZmhDZ2NqMXAyN1pTb3BJN3BVajhrUkxSU0pwb0VmYVpGTDdmeTBNYWtQM1BHbTRNdWxqZGVjZHpsMTZEc3lsMDVTNjJwYkxoR2RXZUVWVHNlYngrR3FsaHdBbHdhK0NTRnZEelhtZk84SmZOTXhPOStIWnJsc25VU2w5VFgrYmpQRUpOQkpNSVpTcE9iNFhXa3ZmV0ZCWThNMlVxdlZHclpxTER3OUthd3hCOFhubmFjVEZOMzZCUUIxWFM3QjliUXNqeEtDSzF2a21UbFlIYUppYmRCU0x6d0dJYnFWaThONUc5cFZVOG03a28xMzZUMS9RZjhibTluU0NSMm1Obldya2s0QmF5VlMwQjE0VG95OU1TcTVVQWFTVytNcCtUZEpsQ0c1ZlBUbG1QZWx1cUVwRU5hRjJRaWZDTkhwb2hxVERPK1N4NHZYTWVVY0FyVG5wUjJzcUs4dlhKVnllbUhDT0FGSWI3MHdZaDNQZk5YY1c4cUxRMUs1MEExTzYzUjVPcEUwaUVPbW9ndVpwQUFVQmgvenpkSURPTnNBWGt1WXlZbjdISTlQeFQyMnE5WjFoam4xTlkyVUMzdFp0NGNONXZ2UlNDcjNBMUkzaWo4ZGZ3Mi9JUVJxaFN6Q0l2NXV6dGlMa1hDdm4rZk9idFROY29yOXA3V2FDeGZnUlNTZDZXVUlER2lLeVZOeTJWbmRrZElFTDNxODhGcmZrSlN0SUFlNHRJSlRSUnNSVHNPYlVGSUwvMmNhL2RGeS9CQzJBWEMzR0xuZVZaSlJGZnZ0Nk1XMGV3Z1ZlYTF6Q2ZHaUYrWmxUeE1pQ2JCVStZc3Q0YmRsTWVsdlc4WWNnWDRUcjhtQStiRzJQZHIzQjE1bWJtbmlRb3pjbWhoc2toa1BCT2t2OXdhSEp4OXpXUUdQQmtReVg2QWlGTVpCbVl1Z1kreU9ZcXA1anZ2c2tPVXpYQ0tCS2NwU0c0MUdIRCtieGxYRDJxY21EdWRsOXNqQlBZa0dFY0QwR0s0NEdSQ2oyUHJ5czliWUhDdnBQY04wVjNSMzVWQXp6NzU2S2ZVakdZMnJYOENzRktvdEt6anJUZkJVQkZ5dERBdzUrTWtuM0lQNEprcnl2ZUZ1QVR5ZmN1NUE2Yzl4TW5iYjlQTHM1OUpRS0YrZVN5NzRwY3pKa2NPS1BVNHlmOEhQaEdnVVc1MTErYVBxZWtnZW1FOWo2dnNrc3ZQR3BDVG5CTzJWdjhESnJXSnQrNnZqNjVrSlhhS2RFODVtYitzU20wcmc1dGtrR1prK1FRWDN0MHZKTm1hRzB4bURhR1JNV2dxaEUzbGczY0xFMVNtNjZMOEJIMUxMZUMzV1pjeXNCd2hDNGRsc044akpGYlZyb1M5VDZtSENRcTBhREd3dTFtQUE2emFxV0pnSHkzak42UFYxeHBLemRaTFY3cHZNQ2JFTTMwQ0U0L3kyQzFBN1ZzVFJ6ZGdDU00rN3Y0L2pJdzFPaVVad2xrMU9vWEY4MUxFVElWL2plLy9mNmptUG5BNGJWVjU5eU9mRnJuYUkwdFFrclNqYi9MUG0zZ3VZN3kxNEt1VE9USnVBZmlPeUplVnplSjJDNUY1STVYRW5BZE9YTFdoM3U0aVFENFBqWVVYYmJjMHduMG5QS2ZtRktFTkdYVW9HMGxKSy8xNThJUTZOWEFUd0EvaG05R0tnSjlrWjZwbGZrRXVZWnhDWW1tdW1DK1NVWXlhd3YzNWxJMjNzOU40QmNpbTRjQTJXYnJQNi82N0dWTGNuZXdFUU9JNklxM2RhNWpnWHphQ3A5bDFNRkI2UHNIWHBZNlM5ZzNpV25CNGZRK0pIaHJvS1RQamdMMWRHWUtKL25WU0xxNWx6QTFiWk1vVVdEZ1dtOXQrVUNEajlNSXZjQVI0N05hMmprbUpVNTVnNDljOFVvSmhxOHV6bUdvZHlIdWFWL1ROMEd1RDNkVU0rNnd4MEpyTnBTNitIUFp5VHNvaDBCYTJielZteWVMbWw0RXA0V1VCNmszTmVjUGtFc2lud1dYdnpobm44YTh0aG40SFRLU0tjTnpuVFBOM0VmeXIzVFdzSm9rZ2x2TnFLNDgxK3ZDTEFZWDZ1VXlGV0FKUTVvKytacUxvOTZPd24yTmZPUGFXNG9BQ3g3ZUs5d3RpS0tEL1AwY210anFnSlZybG5oYTZvVVBYbHdhQUpqZExTRTlqVUtlWDFDNlk2RS9vYnZrTm9iM2pzWU1aaEUwRFQ3dlVtTUVrdGNzVmRjSXFUb3pFUkFud0h2bUlhd1BVbE8vMmpNYk5rZjlPOGhSSjdFbEwxQTg4amVsa1c0SDM1NktQTkREaS8yaC9HRlZGQUEyWFdsWHkzLzN6TWxWUitwaWl5WVVpVWVEVGVHUCsvSFZmZklCaVh0dHphZ2RCa1lSWGNBZ1RPWXMyeFo5Ty9tQnhlWGZmMXREREE5WDJqQnFPbmRET1FEZzJBeld5NHpFUHVQOWhWTTQ0cEJzUnIyTTFuYUJ5UWdGODZCeTN5NjdvakVKTHpjRlY5RzN0WEFKc2VDU0xJLzZSbnpoalBtd2J5b0V2aWhXb3F6MjIraWhBeldsUXdWU2Z4dXN2WE1rajl4MFFHeG1wUTRHZEFINlRzZGtsbW16a3dhT3BIcFRuV0hVMVhSbUxIVG1kdGFUV1B5VUc2L0tSVDRjWXQ1YTI1aHpud05KdzgwYUJIcUl5dXNnai8wYWpOY3k3L3lZY0daUDlLWE1DVDlQMGkwMDAwUjZtSWxLQVpvbG4wVzM4Y3dJZzZ1NVpOT0N1U3FsZGlURlRhbG5JZHFWUU5XNEFvZkFqbnVwelFxRC9kRTJpdmJzalpqZ1R0NnZIUWc3WWZTZFltT3N1THl3SjFPclF2T2doQnJ3UTBRK1QzT2I5NjhtSmtXcjJ1OSs2a3FsTFgwL2ZDLzJZTnhwT0QwSmlkaEpmRUI2ZVV4L3gya2hzNUhvaml3SjBCTkh4OGlUUWZDQVZzc1YrWkd1S3g5eXZBUGJTUFpTbE5NWVFYR3J0Z0pTcUFJcGxaZ0NoR0s2MUFIR0F6WldpdzVWZ2xORXdZOUpUeU1TQUN5Y1g5alg1NlVzQU5nWks3L2VidlhpYVdHV2dWVU1sV0JLcUg0SnlJOE40TjZxUWNiR01LcFZOVmpxN0J4c2oycjZHOUU3QW1kZVkwWVJZK0FCMGk2ekVBQm1OWmRwUUVCNzlPRzR6U0toNFVSUGl4ZXVla0ZCb0dwc0YrQkpXbjd1ems4REowT3cydHJQRDNXL3VHVU90aldsSUx4OGtBc3VqZTVzenRtK1RxQnZHWDl0VzBPZ3FHVGwyMzVXNHNuL3Y4UEU0UXBUQzhPZ1lBOG8rcEMwM3BuUVVOdEFVZmdaRVlkdHExUnFBdHZSVjlXdldHNjdFNUIyVlJMMjdSc2ZFTWEvT0pVaWdwU1RrcmNrRG9USzJYZ0FWUkFtSXlYODRzaWVYSDB2Mnk1U0loUWlUbDVhN0gzclRQZHlBYnFwZGluOG9sbThSa21GS2NnajJzZk1mM3JOcWpSeUlnYWYwNUVHSjgzNExoWEdIWVVTeCt0NGtDdjV0bkZYU2JIcnZ3Z3RNMVRCS1p5czlVamFsSW9yeG41cHRjQlBOU0xqR2l0MEZ0cFd1eXdrdDdDWCtMclQ2ems4bjM4NDBJWjIzTVkxYTFiVkczVWZUaWhyMlljMC96UDdSVVpmSEFzOXU4anhza044LzZEOEl4eUhIT2c1cVJWQjVGbUJhdHJJRGY0NnVadG9FSWxRTGJpWnpZajh6YUplZmpqQnFSdkR3aW9TY1REY2FsUlhRNEhJS1diR21WREU4ZXcwbktSR1Z2MzlweGlQbk94anJBZU5HUU9wZTVLL3p2TEpSVmphNUExanRad0M0citZVUR3Vll2Q3R6endEeUFrYU9PWGtWb2ZGamQ4cW1yQjBrblZHekNoMEJMb3BtQ0RHQTNhS2pyWndtQ0VZYlJTcHIzd1MrV0tJbFc1Ymh1ZE9jTUZqS0laN1RqWU5ZNURFRzBoUWEyQWhnRG43RlRkeEh1YW43amNYdzNYem5lVkxlTTdEcW5VRnIvUURnbWJiU2NiSDRXZ2ppTGFkTXBhSE50V1p5d2h6OC94NDRBdk40blFkdGNaWTJZZk5ldkNCbmQzTDl6T2NiTkZQVW9Zc2Y4YXU3cHBvT0NGMzRNcHc5OEg2aXF3UVpOeXBGYWxPMU5DTC9QTXZCMzdhU1RNSHd4MHFLMTUyZjcyV1VGVjBRaXJrUy9qOU43UG1PSHEwcHdvZG1aUTFGc3o3TDlFUnBRVUlEdFd5VE1zSHQ5a1pNTXVjbXhPK0JURU5hRVdyUWZyMDhiVUF1WXNzWFFWK0M5QnFneC9pT0l2NnI5VFFiV25ac1dhbmRHYXNHS0dvWTNFZVFGNVU1aU9ZT1hDdmhNcFRONHJJNVpjbHVFVUNWcU02anRoUGJ2SGdQNWZEUXRmZHJOSGl4ZUR4RDEwdkVjNmJUZXFKUmxCcDlUdjIwRnJheWNtL2FzZHhHbWlnUGJ3MGljd05VY08vZWo4NFp4Z0xYY2ZoL3JRY3A3L1plWGtjNWhIMUc2K1loWHZVaHcyRjZ1dm1nNzVRSDgzenord2NTUmVGemtub2pzRGZ3VHdEZ2E5ZEgrK3hBRWdpWHpRL1lZQ1dGbVZpODkxZUxkNGd1MlJEbXlFWmZsV2pBWDkxY0d1QnlTT010VVNIa3ZoUC9aVFRhYzY1M05qalR5dy84dzZlelYwamU1M3g3ZEVuZnZrT3dPR3pSOWtuUEFFeGM3ajAxVW1LcWp1dEt5cm1RdEhtSjl0WEZWMXZQWndERkdjZlJHQ0tsUHdmT3pGQllzdk9zOUsxanV2bmU1ZjRMV04vRTBGMkM0RzQvU3k5K0g0eUFtS3pmbUVEdEdEOHlpQTh3K0VIVjVVTENNMlljOHQ0NlQxVXBDNThiK2xFN3EyQnpEUVc4U0ZWQnJzbkNPWEpZR1RjWHNxaSt2ZlN5M0liZW5nUlZwOWliQStsbWl6WnhEU2R4RHlYYjFpSUdaZm1vOGN5MkVwRWMwbHh3d1JVZEFoak96MjhSZ1packdHQ0ZXeXd1Q2JJVlNRUzJVMnhFUGJ1YjZtOHlzc3dPbHR0K2o3cDF6Mjk4M3JyUmU2VndFTGpWMkNrSUkxRCszVU5EZHdpZzkvUXdFZ1FtdmI4UTM5Vmp1MllrbTYrdkdwNXh4TUg3K3MwV0RSZTByMGpGTk04YUExNEx0L053WWtkM1BuNWJNaGRzODBUZ1B3T1o1R0RWUmZ0WDVRM0NkdzB5ZUJ5aFJHT2ZFOEFQL2pKY1BuOS9YM3p4Z2g4eFFjdnFUUktZdDZvSnRzNnVZblo4bTRGa1BMdlJjc3JIaVNPMFlCOWJna2VOSHlZTTUrWE12ejc3bllFYVEyc241NEY2MWhuamNTSGVWOUFDZTl6ZjZGQnR4dTkrVHR0djZrYldNMi9HMmtFRkc5Wkg1dTJzR0JpeTVEOVhPMlUxM3p5SGQvMzY4Uzl0OXd1djRUOUNtN29iSFlYUTF4dUpXTzRYb0Rwc0tEcFBFb0taeFBCamtxU05hUTl4aDVKOEIvUUo3MHJpbFlCSXZKWVZrN0pOTnJJMWtXU3hGakdFTjBvTmhQcTd6R0JzWUxEUThZOGU3MTNGcEhXNUhSZ1d4bXU5U0ZoblIyZ2JOYnNJQVpFRkN5dEQrNjhzQmlGVVo0WVVCVGRtQU1VRDNaQUZQQWJacERobmpNS3puUlZnWXlSK29yT2VqYXo2L1A5TWZkYjBmd1BnSHc3Y3VORHNSNVI4Zjg4OFZ0N3pQTDhybjY0eGZ0cnA3b3RTaXk1Q1pxSE8wSHpGUGNDdENiRHF3SW1SRzRibnJNVytqTzNoOWhyakdGTnJwMnllbjFyQjVDcEF1NjM5UERqUnpyMHNOc2p4Ny9OUmpJbTNlZ2ZvOUdlOUFmYXpVMmNQbTZITkpYVTJoWXJUOG0rYWJ2SWdtcjBDR1ZUb25INSt6dEFxR0ZIZjRoNUE1d2t5NDVrNmF4MWRoU2Y4emc3RVpSWUdKdnR3MEt6NmxqQUJ3NFdCTUxIcWhtNGcveVVRVHJoU1grRXVPeW5WNGVMaVJBRVkxUDl2RUdBbjcrdUl5TExwVXBTTlpXWTcraHNCUGJKR2RqZFZKMzRLZDJmaGFjQWlhbnVPVWlXY2pXN3FNRWpwK2xvTW9Yb0IyMkY5RXcweVBoSlBDS0RtNUtSMUcrV0ViZngzMVM1S2Z5dVBPRHhZSWNrQmM4a01CUHU5T2k3Mm9JZVBDOUI2NUMxMFVnR2t5dkJyYU1oUFpCQkxRMTlRNlNvYm9Ba08vUUU0a2NlelNhakFUNWZLUUlYSW5OWmoydnpDVTg4Y3F6TUY3MWl2L3RwS0VCN0hyOUVLb2ZmNWJQM2pmVDN1cktKMk0wQVY1TktGQjVEN2h3dy9HWU15OG9xR1UzVStFZHk4Z0hoNWp5VGJIZm1qdmt2dEdvWXpDMXUxVTEwZW13VGZocUVDYzZsaFZoL1FISTFhMytCK2dnd1pMTnBFMEZvWFV3S0ZxdGVCQ2pRZ1ptVVBwOWw2Yyt3a2hnSHVka2c5L3hPc0gxb3Q3SHdCUmY3RnpqWlExLzZYWW9EdmxRV0JtRnRTZjhreUViYkJRMk1VQmNMY1ozYWlNclJoakg3R2NTR0w1VlBmbGdWekx3OGNHbDZYRzdIaUh1NWI2WGxnMS92YkQzdEFPeGV1S3BLb1BZbW9MaTRmRUlmYWFOMGJBc3QvMVkyYlR4NmJGdmJkZjFnYlBSSFBSa1pON0RheDFhUXRSRUR6UC8xSjZhYWhJVnVHMFRZbmpjRDRzWVIvMjlKcThwbW84Z1F2YkdKWGo5L2RLZ29UR3RNWDY2QnRnbDJabmVRbTIxWTcvVm1zdC93RGl4OFlLdTROT25UZDIvWG9yUmFyUit2NXp2M0VpVTZTNFZYZDN6VlBiVEM4MDNwMW9MaTlFUmRKZkQzdDVlbTV2WVBUVWIzUXJocEdTQk4ycEp3Qi9Tem9aQWU1WjhtdUZwK0N6U0grVll1Q0R6bXZyK2wyUlBueHFRNnJtMTczdEtvOTVNb24xcmcyZUNJY0o2S0g1ODhjRzF1RWhDRGdLSmdRQml0WnFtd0Z5NzZNY1lyOUtleE1xTG1Nd2k0L0w3aHRaTWpXOUlMUDZreXVKN2hwdlZBK3RldTNUUUhtTEFFUTV2a3hWSDI5eVJabTBlaURwUjdjRFl5ZnJ0UFIvTFpqbWp3UGUyR0ZnbEREOUxTUUcwaGx0QVM5c0dGSlB3OW5DSStXRmJEYjlROEFuNnR3TDVGU1k0SFRuRWtWVnNCaHV0MlcxOXZvMFdjM2NNTHo2TXJWTjVaK2hKR0o1N1lqNDVBSUoxdWxHaHMybHJEN2d2SEpsYWZNZVdzN3ZCdStGVm5zWEZ6K1NHcDRYYjFlbmJBNndRZjNha0dDVVJCcDhSV1RSekUzZ3Z6TmV2dnVxTnBxWmVIbCtCeEk5Z0tiSUlJODRNMW9vOHF1YnlhWEJSQVdGY2xJeE9kNkNaVnQxVnA4WktCUWZ3OTR1T1IxT0lsNTBKZmFYYStNN1Q3c2I3YkVWWDdrYnA0clV2OGhYcGhnY1FkakZqUGVLRGN4OE9MVUtQbUN5QU0zZnBKR2ZqUEtzNno3a3oxM2hrOGdvdGVNUjZuL0NtL1FWNFpURmR4RGhYL2cyK2JJQ0NsaHNMRTJrdDc5ZmtGUDFJTzVha0M1ZnBwaUVoQkVDaEZJeEJmaW9EeDh6VlpLSWpHWjlhY3R0bm44YzNSOXpaelJNdzl6WnJpWThaUXZTWXF1dFJZSzMyTThHSHlnUllyR0I3U3NING1PNVVzeExndWRURGlDY3ArT20vZUQ5WnFwVW41K0xPTDlYUDI3RnJieE11VndoTlZzSDVTL1pCUUhPZkhweEd0eE43dDdWOTJwNDZsQVVIQTN4MWN3bGN1MkpnMFI0ZWVKUXgyOXdTNHpjS2UrL3oxV3I3L2MySHdZdld0dE4zVk5pbFhyQWVyWHh1QXdzQy9zeXRLOXFBbjRySE5GUVVzbkRnOFRudUVKaUl1eU45ZDcrcEV0cHFXTWlKbHhHa1Y2RTkxSkpiOTlINWF0Tno3Z0pZKzFHMk1nT0JEUUhTK2VrRlU4OFpIM0dkRm1ncy9BL1o5NUdSTE02SFcxYzl1ZjNGTmZmeFRaNkJhOGZPMEhCRkpuMjdaOGFGdFlMYUZZVEsxSUJMekh3VHdDYjlaaG1pZ0VTQ3M1bzBjQXJBVHRXNUNoV2RtSm85UlJPTmx5TmlBRncyZDVaNWpSclFRVzk2MWh6cmovZllQZjhUbThOYVorVWtsd3k4a2Rzem5mcXVZZFNSeW9ueE5aR2M0cVZGdndWNElKOXdLN3A5Nm5tWUM0UXdrbzlpdVRETUhzZ3ZKS3VaMnkyUjBOdFFmamJKWVB4TytkeGFDMzRSVUk1eW8yS1R6VGUxMWtEaytxN08zMXJxVnRiaERRaFVPbTBkb0hPUEFKM0hIQVVDWFpFQ1laMURwVE9mN3dESWlqRWVRTW45R2FTZjRWN3FjSVVkM2xJR3lWU2FpdUx3WGh0M0VOT1ZXd2tXRm9XWnd3NkxIU3IxaTJPdE9jUklPemN4QUg3R2VsWmY4RG9FcGo3OGtDOEZCOHhnL2oyU3B1SjJzNENTcDgzZFBKenNkNXVsMW1yOUZHRjhFZm9DWUVscVJ1anRGSWJCb1Z4MTV6Q3ptc2p4ODVKSlFQYW4vUkcwYzZKWVdzcVlsVGIwNTZOYjJid2hwRU83UWFEb1J6UVBTYVZ0QXlKVG1LaGphN05mTmlSdURVemROTnJQWGc3ejU5UVlXY0JkbU9XcElWSGdWM0xpbCtGSUtiMTdmaGhERkczclBUKzR5SVlkNWhMK0tDd2R2QnhNRHBKdGc5K1JtK1dxejBNeEFYaG4xeXlJcFdjb0l4YXZRZHNmbVJycXNZTW82MHpDS2dJZW9oQ1dZMmp1eUJUN0NjUmpVa3kvR1k0Vy82RWhsWkQxVjZRemtqQVRRMElZZzdFc3BoS3Y4TVBuY0pBK0hTbDNmaE1MQlpMRWFoOVBrK0NCU0tzQlZ1am96M3lrZlpoN0YwS1JxaW8ySVNUN3I5eWdOSjZjZjFhb1F2WWV0SnhPeDlLZzBLRWdRamFEVEhrcWZGRE9XQW5YdjFsMk5XcWIzb1BzZnRqZkZneVdFdnZFS251U2QzRU9XZUhaQjJTNzhlRWFYOEZpalZON2tjSzhQYXpTT0w4Y0Ixb0g2ekpXYmhXYnRhRFdEaVpYYUxwV2lGcWVvWmJ2TzlWdWdvcy9XZ0JKQnA5c3F5c1J4S0E5R1JuNlVQWUZFM0VJK05meTJ0QkFHck8zSWVqaytrWjRtYU9FY3RtUzNFM2syVTIxNkxXbVh4ZFd2Qks1ajNYazFvSlRzZnlpcGlhbWUxdFR0c0hDSXpOeE9kZmJ1bXBKck13MXlYZUJPQzFDVCtiemFOZlR2QURRZnN6ZkhrTmdzRDF0S1BpUzRvalJJNUNBS1RvNmR1N0liMENSSEdkRisyRXF3djgyZGtLTnF2eFFhR0tYUjMwOERIV0txenZrdFFzblZvS1pxblUzTmR0U05XNUZJYmNvYnpPVnlqSlBZOXZudnFhM01XZWRtNmdNS0x6eGp4REpPbmd0WGVRRHoyekovOUZUa3ZoNlkvbTJZcVUzMENWMllONW02SlVKeTNlR21MMUI4MFovY2N2NWlIZUxWeEVybEFuWDBxa3g2S1hpaFVNRHoyc2hNcWNLQTZvVDFyOWxGbjVoeDE1TUcrYmtyYnN0dzJyeGdrbVB2cEtKbmFydHRObGVKaDhWVjYydjVTWWNpbE1qeXZzSVhITGFZQU5jU2p5NlU0bmlEbDRDZ2hNMitWSmt5YWEvRFZTVDdVNGVweHV0ZlFNY1RsUDBYR1JIVjdYYklMSm96ck5MRDFLeGh0WWpEbzJSajNiVDZqdUVGNnJySmxyRmpqMmhsMDh5SEdCcmdwOVl1eldLbGZ2WG9JNGJITHZhQmJYdkV1QU1wMWdRUjYyOE9hN0ErSGxxNEV4dG9MMTB5L3NIRTR4Vlh0amUwRkhOZDhlemx5UDJqVXhxQWJHOVBlR3NOMnE1YnNTek84Tk4wSkdJU0RsblhGaVQzWDVLR09GMUZiaW9hZVo3emh2eC93TjZCYWR6aWgvcEZ0NXkrYXVoOENvWUZodzBhajU0VnltQUJnS2dXNzVHYVp3cjZHWTdjR05SdEhwSmMrZDNTRXluUE5yZ2RpTjRnVWxjQktvT2xlZkFjalpBYkNlZmhTUm5UU2lZSlMxMVdpaG1rcmlOM3dTNEw3bDJ2MlpyVUJzVmhyOWYwNUx5V0h5WVA0ZUlMK0VqNkJ2N2haQWtnS3hrdUlMZGdvVjR1U2ZNd1l6ekxmT0trS1VJWUZZNS9hM2x3ejQzczM2S09NeTlFRmN5WjlzUmlHU1hHelJMK002VWdUMWIwWFRweU5VZ1NRVWlXR04wN2FRSnZPZStGVjNSdnQ2dkpzU3NZOGlWUXhnQVJNN0NZbkF6V0ZGclRTaGtSOW5ESU8vSFZheC9idms1OUExRU1pR2liTi9FNWRnc1BnVllRQlhOeGlCNlZ4ZWppcjl4R2lZNXRUZ0N3UG9vTTAzWUpRSmlKRnZEKzVHNko0d1VtNjcxeXRRSGVYaHg1T1dzR1pZOTB0ZkhEdjI4UFJzeUJheWE2dUFHR1prQzFYZEJGWkJ0Zm85T2tCY0tEbDJ1cnNZZWlURXNIeXIzNWlJM3V2ZkRDUWEyZ1J1bTVQTEZqTEZ5K3BPYllhVW9qY2lRYzBFZVNldmNoTndjRlNkWTJWNFZNU0RsK056Zk1td1Nic05HSjZhSnNiYVBPbnpoMkxRQU9VRzhuTjN0L202SWNPS2FsUjdRRUdxZGIvYS81UXVQME9mWXBTeER6NE5GU2FHY0dJaTVTRUtuMFZLdXBCMVdRMlBMdDBVbVgyZHlYelZBQlRwUENGRjduOFdrMzArc3BiaEZqWFBrZlFSZm5zaXBkVFpPdStiQmYwdEZXVExLTENyUStjM0VQUVNPT1Q5d2ZNUkd1clJmbVNtZWxXaWxhS2YvWEtOeEFpVFRVbHhERGpNcFVaWVlkbFhPNTc5V2NTZjN6RGlFQW5OOUgrb3JHTGxJSW1DdXlja0ZaUkNyNW8xTW5OMFNuc0xqcEhKQnluU0lwcGk1dUJZRmZMN1JEWElJQUN3c25Tbm5pYTQ3d2tMZ1puaHdJS29IOEpFTzVZN0V4bDNOdSszcDdNYVJ6aUY2SWl6cnh4R29BVVVFb0NQbmNsVTI3K0MwQmRCWHhRd2VjYSthQytXcFVSMmhGbFNqNCtUdGQwSkJnU0E1K0FnSUNBZ0lDQTRuenNiNndBa29xcjJMSktnVTlyVForaWhoQ3ZQYnUxbWFNSTZlYk1GR0dtVUFSS0Vnek0reHNqZzN2MTRyREZVL2tyT2RZQTRsajdJeHdHNkRFQ05yQmxkUFcvS2ZEL0tGTU0vakRIUUovSTFreDh1NXJTSkErMG1nSmszWU9IeUVUYnhKeHdLVzI1aVhlb0Nja1h3eVRWeHUyOE9SRWltUkFhNGFBZHBUOVkzMi9UQVgyL1R6YStxeWZzMit2Ny91VFAyZEVIM2UwdS9mODIxLzM5UGw5dnEzL3Y5ck9mVlJmUDhQcDhQNGZXaWI5dHJYMmZaby92KzNoL2IwUWY4UHNyZjMvY1c3OXZVbC9EMW83N1BjZS9iVFBEK3o2Smo5djBxbS9WWFA3UHNSUDJmWTIvcTNoLzIvWEMvcyt3UzM2ZlJiKzMwNzc2ZnNGL3FvYlhQZ2sxcnM5bG5hTmZ3am1iU29MOWNQU3NxOWtHRjBzaU10aEREdlpZb2x5MDFXd2JZVDZkRnB4U1JMMUJVdTVGdVBLRUZoR0lkaCtrTFJBUmxXMkRjTGh1M1Axd01yZ00wWk1XaGxuYWw1bWFjSE5ZWFNld1p4cUYydjQ0NzFyVXZ1OU1nbm5tWUF3bVNCcmszOENIaTB1bU02ajVHaGRrSG94eCtZMHFFT1AyL052SGdFOXVuSGFYazRjd2ZJT2UranQ2aEpsWUZ0anRwcDcyYzczNzdLNHU5Yk5RcE90aGRsVmhhVXpNQnBTYWFuQng0aFlOZ1k4SWd5NEhETm1mbzhNeXRkZS9lb25NUnA3RytkYjFYaFh6OTllU3pIcE00aWVXRzhUQ0dLWmZ0eVA0eG0rblZ6MVhkSUFvUURPYWNpb2JzR2NVTlpPMDZPZGtDWGpab09Zd2ZSY2Fxb0k0MnowTGlyVFhSODlQQjRpQlBjQkFmVTUzTDE4bkFsSkRjT2VveXRtZkRCaGVkWlcvc3pqaHNkTnNSbmNuWHJZZmlQOHN4MVRTMnZVZFFFQzFKYTY2b2NObGNwUXZDRnV1aHRXYWJLSVJoUXRVL2kyOEJUZlMyVUViSEhxWFVKWWRDdTQ3TUZIbDEvbnljUXF6Ukc2U0c5V250bm1yWlZpOUg3S1JrTVdTdlpPdTFXM1M4MDU4VEJKT1F3Z2lyZk9CVzFaekQ4dkZKQy92QzdUVVpTc3gyMzlwek9xWDF3eDQ2RGY0YmNvS0h6SnJSMStDdG0xZ0wzNEpZN0VhVTJMd29IR1UxdDhNNC9ubkJnbk04Zmg3U1Fldm1rejhVT290Vi83NXZ1MGpqWFNiUkdDSy9lMnRMY2t1LzB6MWZkelhjc0R0N2htSU9IZ3JnTlMyczZudGtKM1RucHBvbVIxaG42R0lSR2FVQnc5eHA5aFBTU3pTbEFKM09GOUhMd3Ixc0RicU5OdGh3OEgrUDhNWnhXd1VwNWZzdHpxZUpQNlZuMTQvSWt6bTBFUzZjZFdJMVRQY3kya1l0U0NxdCtoZlF4UXRGU0JEeTJaeHdQTVVjSTBTMi9LNUZlVWd6Wnh5NEVqeFU0bjdyUEtBZVhFSTM2Y3dHOGFqOG9iODByMTBhb3F3SmtuOW92b0JLd011dlZOK0tmOWh3Smx4VDNjMThqVDhCU0YrcGxJWkhXbVdlUGpQNkpMdjdvRmtqbTJZU2xlSjh6T0pvVTNNSTNEWWhXTmxWaFFUYVc4S1NwVE1WMmdEVmJheUZENVF0Ri91ZWpxbU1HbHZKZ1p5U1Qzc1pLdjJ4ZXprRDdzUDQxakpTcHNuL3IvL2Uzd2w0bnBRTzV5Q3Jsa1lsNTFQcDlDbWE5S21sdU40OWdMeUJ6bGpYTm5iRjIzTWVRM0FaVzRPdm5QbERtNlBoOU5pamUvYVFPRnNUZDlibUZpWm1ERDBKaWVGN3pFbUZERjJqVHkyeWMyRCs4NVhDMksyZlVMems1OS8xRjUwTTVsMmhLR04zWEkra2g0Q2NDSGFTTGdqayt4QXVzNU5PcERTNEVpK0NKUzhzTURWc0Z2WC9Eb0RkK1BkaG1IeEU4Y1RQdmNQUU44QnZ4ZFFnU2NBYWtET1ZzcHM5QTdDbXhJQWRSUEc3MU9LWUhBUHZpTG9Hd3BPN2dSTkNPS0dQZ0hpbHIxaVNpWTBlS25HZHBoUldhdjNyejViNXV2aXEwSlVJdVdqc1pldDByWldtTEh1TVp6bDJycTk5VzlXVTNLRGRlek5ycnh4MTJUeWQrYlUrRXdsbjVCVjdEK3h4NVdnRWwyMTV2eWsxTDVLSEh3YzVBZklnd2FFVzNrM3JOaXhqNWtXUk5XU2I1azVqeE54NkNBdlZvMmF1b3BhK1cyU3BoTHVhMzNOaDBLZERNR1RMNkZoaGFVUnZsWHhQcTV2UkF6MURJUUNJQ2twWkZQWXQzTUEwR3RMZURqRUkxenAxZXk2bnIyQXVxZkFzbkVleVVFK0dkSHFLM29vSUJQUHJESzVmak5ueHpsc1VQdkQxS3h0ZlhBd1A4VUdtWVM0WUk4MW9BVE9kbWx6TTh0T0pzejhOYUhOMi90MGI2aFhEVDhVK0VQdEQrSWVqdCthS3RXSVNTeVBxdEN1OXJlQTlYMjRvR0laZ0pGajh1cUxlQzBHQ1Z2ZW5HTHVKMHNjQ2pwRUJkekxHTHJLb0FmZ1pRbm1Zb2UvVjBVZjZNM09QUTlNd0xGcWZzMVR2Q010d2psbHQ0OFp3WnRrSmFrcjRqU0duMUdoaGJzVmVCenMzc1dvcldrcytWUndCS0JFeVFvM21jcG5zNzF4L2ZLcXdXQjBjS0ptL2wxck1jcFZnMHZ2NXJEOU5xbjM0eXJsZ3VyZ295KzZqL0VJamQyazdoQUhDckd1TEVrV1hlOVVIVWNiYmZ6MlZnLzdJMGRKMWFOZkpqNGJPc0Z2Mis4VmQ4Nml1WlIrQ1RmMlpyTXN3U1RURS9SZ2pXQ28vdFlscFdJL1VVaERlcUtCVXFpeGt3YTB4Qy9lMVpOL3B4Z0NwYlVpRTNQdDJLTXpwd3ZTcG9RMEdKaVRoYTBlS083UldGVDlzSkxWYWZMWGZTbUdyTG05R01KV1JWR2pNRDNaY2VPRGtDdDZDM043VW9oODBVRS9sU0lUUk91ck4rbGwyWDd2VWhMaHZSSUNIb1Bmbko2Zk5DNDJOV3lYbTVadk45cUh0S1pVT0Z3RzBNOTVWbDdORlV0VkpDWGxmSHZpd1NGNkFlSXZKaEtoRnJzUzJYbXMyTGVGN2Nya1hUZ05qbVpxdU9lNE00STAydnI5bG12Q1NxTlE1Nmc0YStEOEhaK0xwcStKdUpOYkRTSlNEWjhQNENrdzRaRFpQU1NNdExWdG5qdWxtOGRCMzVNZ1kvSUVnOXluS0l6aWFCL2xBeXhkZDh5cWc2TE9uOUxISnVNYUkzb3MvMWpuWFdldmtOQlR4UTJTNUtLUFh3VkdyU3Y4dDFFTmREUnp4c0ppRjB0aklhMHlXZEtMSFhOWTUwUFUyOFRLd3RNelhNK1lTYWJJYlpMTlBlSVlRV1dMOUZ3QjE1aFBBZkg2dVZjRWk4U3M3dzJsUE5rMFd3Z3A4M3RjSWtTZitJZGl3VEN2ME1zR1hUN0pNRzFYMVFiaGN5Z2FDZlhjQ3pyTWQ5TStDU212MzRhY285Z3FaY3VRdEhORVdzVkZjK09vTmVFZWdBYklEaVA3NEVWL05Cbi9mWmRTUHZ0MnA2SXVoSXR1dk9aVk9PUmVRZUJuSmJTYUVCbGJOK3oxUTJjQXMzWUEwN3d5M0NOdStiNVhCQktUMGIvWk9LL0VQQ2kwcUZHdHNkMzRXM3IwTnZRc2lyaFRLbVlRSDVYbVQ2NUpVZzlWWkt0R29HN1BNTW5iL3VZMzBucW9ZUUd3TVZQY0FlN0k0WWdOdHVSQUdSR01uUW9qWTBjaXd3Um5EYXdhUWZiUGF6SlFHWitTU2dpMGx2WElGbkZsc0kyQ1dIWVlxZUV0bHdCeWxCME1iREl4K0w0MUY5bmkrMFJXRmNnYUpaUUMvVzF1ak80UU1teWNXQU5rcXFNSWw3M2lXcE1yL29EdjkxYUNxTmtkeUo3S3B3bjlXWmxQT3lBZlZkdk9NdTVHVzFDS2kwdUVNWE11ZTd0QlJhaUpFdXpTQWprWkt3WGVQVlFXWnpwTU91SzVIaG5VaUc2enpzVURyS3ZnZGdJNTBjZ3R2UW5aTkpwYzNuQnlXTlRIb1dyY2YwNThpbUJrcGpwL3A5YUtaUVYvSFNqRkJSV3k5UjJZVkdLR1NUblNqUXFwUGZkWGFzU2RRc29SeEN5dWc2L0F6eGhCSjJRVzR0Nk4yTG9RbncxaENLWVg0M09wRUJ2cmpuU1NLNW1LTHRFdDZoWTgvUEpWK1EvMkU4dzE2NTRrU0FldFFnMms0VnJrUjYzcVBCaTNIK3I4aGxuUTY5ZFRFM1BQc2xwU2IrVGIwRHlGVXY5T1FFWDI5ZUI2NEhOa0NPQVk3SFVJVUVFZVF4ZjV1eWZvVlg3cEs0SUtDSTdXSCtibGh3TVQ0TVYvckFCa2VUWUtzNUErS1k2SnRUdmkyUDZkTHY3TEJadTVqcWlVMjU3SWhEVGU1L3hSZ0dsV3JMSS9CbEhmUStIa0dtSE5PU0pzWXVqbUJEZjdTeGI5UW1PeHlYNGxjbzNqbVpZbXJMZDFSMDdyQkxIZ2R2VUd4Z0g0VmdiTDg3R0dMUXZNa1U5K0lRUTdZYVFJd3J4V1FneHh3SXRDTlFXc29TejNmdmFPM0hiNWx2NnhNZnRSOW43VDJSWTVnNEFPYmp0ZmRiWnV5aVU3MUJJalBvWVFNcVI5VndzOHFYSzdUOXhjZHhZRGdvaFB2dGs5c0VTeUc0Y0RiaEdsZ0p5TVNjTU1seE1ZekVIdll0L3RhZ2dWVGcxY2NkUDJBUHpwZ1Q3KysvVDBhYk0xb0lwSERIQWlXSzdqYy9YWFlIajhVL3J2VEE4MExSZDJITlczSjdPUld6NzZYZFpsZk9DcmlaQ0tSb0JsallpbGtVYVU5K3FtYnRuaDNxQVFUaWtTSFBycWpXRmVuRnpCVGlwMTZrd0pqeUdCQVJmcys3eXdlL2w5MWFHaTNZdVdVZWNaSTNpN1pLNzJzSmdlNWNLbDNvYW4yZU1LVGhXUC96d291clNwWGc0Uzl4L3VNQ1F0Wm1EdGJyb0JYamVaUkFxWEh6dmJUOVdMMU51VDhPVTF4blJrZTFvZ0kyMkVTNFVVbnhQUUtIcEZtR2JnVnNwUi9JQVNna282REIrTU5oQmNTYXVvWDU2VVBsM0plRFBjVFU2UlB1aW01ejhBdFNKMEpQRm5YK0hxUDlnYjBkbzFMSlcrR1p2RXBDS3VuZnkvbDJpZDF3a1c2YU8vMzdvRlJPcGw4ZGphNk9IeVB4WnEwdmpWNVQ4NGVBcVlqL3ZpeERqSnN1RDV0TU14bFo3TTNFZnNucjNJZkxuemxzTFdxWFV1MWJyMlVqTWprNFpJQWFvN2gvQmY1ZTZrb2hkME1pdU55c08zZW9yKzhqL2hVbi9DYUFUTHJnK2xhREdrMXFwRXhibFFERlRCZW90TUtOcVd5RFZlQVNVUFlOSEdycjE5WENOYWdpMDg0WW1IMVVqQ3huSEpjb1U3TlhGYTduNmJtVDVzVFZERjhHZ21pLzhzVno2anNBQTdvbGpidDJGY3BSSW1jREtmeTNMWnlYMVh3cXVxdjliNHJUUkE1Mm45cWVCNDdSeFoxWURiRC9abEdCaldFUElqSVBTbkRDL0F0SElaMnRXM0c2TDNwWUZlcVNTTmk1Z3FrSS9qZDNTTGM0ZW9nZ3ROMWRBT1pmeEhOb2tWMHRmR3ZDQWdTVXdMVzZIaVpxdW5nVTFwOExZTFpDdGpPaVRkZ09LK2VBK1FYZk43aXJsUm44Y1k3VTQzQnNCYTlQMVJPOTBVb2lBUk1zWTRic20xK3BFTjRrOGF5VEZicEFUMzBtaDl3YVFYNmdEV3dsU1JSdXdXTUFielJONXQvWklaNDNaRlJNUllJcWRGRUxuWUpSWEtWb0dhQ0wwNnRrQmpzNGNubE5hSVZFcXF4andRQ1dVUUw5aW01NUYreEx0U1Rld2VkdGxSKzhVd1ZzYTRCTGg3ZEhVczJtc3R2a0Y1Q0UrbUVhTkpRYTNtZmJNejJmTlhGZXBMeTIzN2hpWTRCaUtRNDR0MWhxbzh6UUwxZlpRZ21tcGNLUWF1MTM3cDhScFdkVEY4aWlCL2czYU5IcmdMc2FDYXVOMGRZT01lRHdNOERHeGNpUUl0VGtsSVZwYkRkWG1EZWdpVElGQWZVODVNT2h0RHdLV2JuSGR2NWgvQWNOQy9ZZUVvd3NPdllteXNYU2R2SW1yREtsank1L0tSalMxMWY4OS9aVDFibUFYdUgxendmUlJxNHJJOFNPSTBlUEZqQWs5L2VDdC94WHZrZTRvVGkwcnFkUll0MzhmbTdzeXdrbEdmdWErMlp6c0ptTHhsREs5b3RwRU9OcWNZS1dxYVAydEZMTnVHN3hEUVUvYzFIbUZCZTBIQmZ2WTFsTXVDa3pBODNhMUljbS9veGMxWTd0emhiRTltS3lzZXg0dFUrV1ZkMDlnWmkyRlVnRVUxSWJzN1FzVWR5ZXd6REVvcUpDNjU3b0dna0JiNzJLWE1IU1hrYWVXRkZ3cTRZVWJ4WVVDMjlSbFZ1dXNXeTZoL24rTVo1anFqOThaWEsrdmF3SExHM25Oa3ZzdlFQRHRkUzhuTkRsNDBrSWNKOUNaZGcrODJzU0FOWmsvSUdXaW42c3FBNHhsRXRBYmFsQkFYc01xN2tEdDA2ekppY1QvSFNoNGZhUWtRTEJLY1JJNnVJVUFGbDA1SGpLNDVwSlk1aUxXREVUd0FLZzlnckNsVnkxMXQ4QTgycEwyczRKZDVjYmdMeHdvMTV0MWpOeUM4UXJFb0NYWnZRYVZ0cDVxaUhmNzRsZkhxaXltdjJ3QjRkbUFJRXJPaGtxQzh2VzRVSmRIUjAzQ1FQSUphSjAzSzZ3L25kTW8xQzZsSGZabmJJaHNXei9tVUVWOFpKNGl0VVc3dG1kLzRlWjlYQXFzUCsrQTRHQjUwdHJSM2FtZ0FGVFNpN2F4UWJDM3g2RWpwdzlQTlB1K2dOQ2Evajl2S1U1SEt2NStRMVdwWHQ1dFFHK0dSNmg1cVFpL1JQNGY4QnpuYlAxSDdNZHBGTVI2Q3BGTUN6U3JoMDFPQm9ra3krS1BkNXlKZ1E2RnFxUEV4aWtxbVlIaDFONVpueWpmZE81Uk92ZWZnTmwweXh5eTljZmI1UDV1LzBBdDFzbTllQzNHeUJuY1JnNm41cVVtb3R5eFlseld1UTN6cGljMHZEOFpqa0lTeFN0ZVNaemFMZlc5SFFKdjZsbm9oVnpVV0Uvd1NzWlE0eS9qZ1NQM0dyQTBsTnJqRWpFYUNoTzEwTno5TUcyQzhsL0Y0UDhuUnlJaUVremZZVEVnMk5zZXBqaVQxU0J6SlJFNXRIeXlzOXlqUitDUiszenNVcjlueVhLdXQ2Y1VKaytzYTJCMmwzcUpWVkUwWmtUb0VjZ0pjWGhBcTlvSG1ramczQmc0VTlMaWRDZjBUMHVVcTBPNFgzdWJwYzR5MzZSWlVLOEZEd0tMeUhudElwL2lJai9sWUZWZk9wZXdmTDZRaFlVdnhiYnZTaTFQc1VVbm9FcVNEcThlR1BJUE9QTUhQSnJoMEJKRHVDMWlVVWZlbDdzcDNpZmxFbVFmek1qNmYxTitTSWhuU00rZUJ5NFJGaU1KWW9SMkJZM0NPR2ZlZk42MmlkTnFtOTB3MXlOSUY4aERxRk1GUmVvMUJYdk9BYVdwd2FzdUdEcWJ2NllpTzRrTnpteGJlWm5kZDlEOURReW5sZFRQQWFLTFc5VDFrcHBsOE1PMWNPcGNlZ3RaWlpjM0pvcFA0dURSU1hNb2pQbmpqempWOFdtVUFmeWtCTFdJeEl3ZkUxOHYrOTlwK0E4cGxOdzFVamQ3Tnh5MHhCK0RHRGkvYm5nQmtzVmJGbEd1QUcvaCtHNVZNYkhVSkIwY0F0TnBUT2JRSHZKY2VOczIxTmFMZ1FsbU10K2NEQVJSb2YreXVOTzU0NS84bkpFQlRrczR5T3J0TXhoeEdlYk54R01VK2FlN2NIZXZ2dkRYT21Pd2pVKzBXWlZqQ0hPUzNFM0hjYk5yQmhva2hNU1NxSWhiU0lFaTFWRnJVUWVJS3JvQ1daeHZmaU43T2xCNVJueTgwRCswSnVxa1liQ2pWeEpuS3plVXFGalNuWWRmVXVaU1o0YjFsVDBOamFwWGE1Y3dIZkZXZlhQbUk5WWNBMUZhcDRLQUZUOExyaGt1MUg1YnM3V3ZGdXlaVFpSSUNyUzJNRHp0bnN2eHNXNm9sa0REUVA1ei9GUGtNTlN3WXlTN0g2NVdrMStsWWVJd2xSMjdtZk5zQThyS3oyMm5iUkJXQWNWc3p1UkJOWlo1Tk91RnEvWGNuYVdJbmdJS1VGdW1QbXJsUEJFSHNWODUzRlBOKzU3cFpMdFJ0VW5DMU1RUDg4QWtidlAwUHNYQ0xxd1FxRzFsZ2oxK0hJSlpKdk5CaDU3RmhYbGNXVmgwMTNibmkvamtmZFFSWTlFZEo0YkRxVzk0WXlQcTM3emdCb1F2ZGVYSmVvWklIckZyTWxUYWxpV01EbGowTWVGeDJHRzgxM3ZJU1JHRytXbi9nY003NHRXMXk5NjNaK28zOVZ6Uzh6R1dvWXpjbjRLdXNEa1B5bXJ0Szd5SkQwUUEzNkNuZHArcGZtMmM3b3Bmbzg1clZ0bHp6NWN3LzNDSjBIbi9GUGE3enNxbU5MMWF4cEVZb1RHU3pCYU8rYU9aSVc0Zi9EanhjN0ZZd2VLTW41V21teUc3dDg1VTNSQjc1Z2g2SnM3WGs4aC84SkdtY0Z6eHNPRHRNNG50dHEzMEpZTE1zbHFjZEpzaVBQRytRVHRCbEJqTVVoeW9Gb1BQUVBkNHpuUUR0VXhISE9oSmFFNCtUODN3TU8xTUdzaGxqL2oxNHpiT3ZhRlJ4VWN2NWZBZnhVL2dKeFVySkRtVzQ4Q2pNaVNKQkw0QmU3YnBtMnVZU3JEME04d01rdXhTY3NPWmNVZDR0TXBnUFRyTTJaNlFoNytETmE4eDgvalVuYmwydDIvQXl5WmxSeGx4NmI4SlJjSnRId2RORjNNV2JBTDBnZmkxL3E1L04wUVpJZ2wwYkRuSmYwckE3NUNUNGc5UlBUbCsxYnZtSzVTdEE3dFpDRHQ5ZUszQ3hXS0VBSzVWQlBuOWdMckMxeTNheG0yZVNRQlRjYTYxUUZHemg4V1hnQmxUOEQrNlBhVjcwbUZjZithb0xpbW12TXNFUnpjR2U5d2hYbEhyUXB6NUhhOXJ4UUtNOVR0bUpGZWJTNlNzQnRaSzBvcFQ2WlhkT0gyZ2pjQ1hjSHNnZ2w5c3Z4bFhUR1ZuWGdQdGZKK1RDVnpaRFZUbVkwUzYvZ2lYQVBGaktjSjZzY3FlKzM1ZjJ3dXdUQnQ2c2JjSzVSb1hRV3Y0NU5qRDBibXdtcDVhS3lXMVAybmdpNy9wY3pXREM1UDJQNWtwNVZnbFlSMklGekJINXpSajVsY0x5K0JPNC9YTkJ6Vk85ZmVMTittb2lXY1M0QlNzODZDS3BqQTFCVnMwYXNkOUNleE5zdE0yWVFGREt5c1FITmY2Ry8wN0tyY1Y4MU5NQXdqVGRSNFhhOFNFWVdBdXRHM09wSkhzMmhqMUpYTFV5OE5vRlByTUI2UFJMY2FuWitZRUZsTUhhYVZUMHl2R1FYamVxQUVIMUV2RmsvSU11WGp0U1BuQ2g5MW4zQ2tBQndHSzZib2UvQ2dDaGRBVXF5S2xLV2NsSncvZ1hiREo1VkEzcWNzMlJEUEsyb0YxdThJRWZKdWhnUDk4V0tUaXBRWGs1dHo4WEdBa0lPLzhiYml4aVFmd05SSjJyeng3aE1JVytUZm1zUU5NQ1VJcytEbTkvTlJ0R0xNa2dFU2VxSG5BY2hxOXpVR1dvQnY1TFNCV3V3QVF6MmlTc1ZaaFcrTHNRM3BIanZPNUVCVHV3MHpyTlBHa1pmb284eTF5M2xPdXZkb0RNZzg4RVVpSUFWd25NSUFVbCtOUFFMcUNFWUtsb2I1REpTRmFvWDdDL0cybTJrUmNWSTBIZG9hZFdtS0hGZlRsWU11UEhoUUp1cThLb0JpcTlPUk9rNTMrc3dEQ1NERnU3RmoyWXFoNVJEUVJpWjk4aENZcUxPWkVxUFhYM0RsSGVaR3VKN0ozc0FVcDBucmc3YU9DYWhlZkx1QkdhWENrMjR4N3hCWlZLVDd4NGZ4ZUI5OGNoWEkxKy9Ta3RHdDh1Q0x1TDVFaENZNTh6Z1hTZkszZEFUSUZEY2NGNnU5eG1HV1BtRk5wNGVSOGZ4NEdPQmhpOWdUUklWWm9wdFdUVGpIdEpFNHB2M2lhU2FOek5NcUxLWXFuei9hYjNxUG1IZVUwY3YwV1hxNWR1cUg0UHRoc3EzM2pSVjlQRjRrQ3RGMFJPUU9CYnczcGFTZjhRMjhmRUhRbTVnN2JEbjJCV2Y1TjhPQjFBNnl0REZqL2JTSFJDVVBKOUV3S2hRM1ZPcGtBeDN1aXRuOXgrZnpLYWhMZVY0VEp0NFdvTG83dytUenliL1lMT1BreFN2VE5QMkh6MEl5SnJiNDF3cHV0U0JQbTRqMWE3WnhlRDZNWS9GTVhFYTV4SDJoRVdFREdKbmdyU0EyZE5jdnlNNDlKaWVVYWpUNHlLYVl2ektmeVNLbDBHdHh2d1pTYWMzSFFRYWZKbld5c3NKUXJHYTVudGRsRFE0TGVaczlZTUpGVkt4enhBKzBzSW5BL0VqTWdlR1Bvak9VdCtYeUcwcHZ5NG80eXNweWVVN2V6SmVVT09QSmk1dk83RGRTRmJxNkU3R0NrVC9heHVmRVR0eDdKTlAwUkc1TDl2T0plL2UrL0VnUWoweG01bnNZYVljZXFtN09YbHBkcGN2MThOaHYyNUt0UFNRYkFzbHhCRWNvcEpxV20vbkhKMTkvbnFSU0V3S1dsVjlvaDFBelhXdit1VDVCTG00OHlGdW9ZNjRUczJQUkxhRFVEK1NzRXdWUTBLOHRGRTVPaVRFS0NLeVo2UFFtQ1FPNE92L2FCMFNRYWl2Y2g3OXlhU0UvM21KT0l6YkEyR1dPZEw1b0dzTkxzQ0dzR09HNnBjNFVQUCtydXkwUEhPNm9HSlFDWnNmdlh2NklEaUNBMG8yQ1JZQVVnbzYxU1dBRk0vdVRydTF2c2FxVmxTOG5VVmkrRkpJVCtmR1g3aHhJYzRkb3gvTE1nVmFPdEZBUlBRVjJqTC9hZGtBMmwzblFyYU9teVR1d1BLZkU4eXhOQ0VYeStrUHBQN1VoWlllYlJNZC92bmJBZHpoOGdsUlNyMFhpcVJKYm1STStTNWs5WllobDltUm5lTDZxaHFSMy9DK2w5NU1DZkQvaUlmTXQrU0pkOTRGLzkwUWh4ejlpZGJpNDhGcjc2MlNMNnNlQ3V1bllVaCtPRXRta0FNREpBU3RxR2tIcFVyN3phS09Tc1gzWW1ERlAzNHJEQnR3dUoxTnhBZzZoZVR4MkV3d3gwYlBsSmx0SHpVdm9wL0c1QlNuVkt2OHUwdk9sOGF5U09BQ3BBS0VteFUrUkdNVDNxY1BYc29LZCsya2szN21tMlpqN2JFUzVuQ29PT0hNNE93VmxIWHVWWFEyYUNlczNWcXV5dUhreUNrZ0FFcFU0K2VKQjM4WXJLNE9OaG4xY1pjeEVpalVLVURITE1iQkRLc09rV3FPTFd1WXVUM0REakpQRlN0NytVemZ5Y0hPS1lTbmsxZ0VWYS9wbXY5L2hpWlFuS1hVUFhJWm9zci9WSklLUEtWNmROOVpReGgxNEtDaUROQnhGc1Rma09CbnlyWHdTTXlOVTBwMHlrWVc1RUU0OVNoOC85VlhJUGJrMmU3TlBWQ1FwbXBVK1VyK3JBNm1BMXlpK2ZrNklPUlNRcVZHZ3RpTUZsbkRsS05IU0FrNDlSd284ejZUNHVrVEd0WFp2R1dUT2h6dGgrMzVRbG5DdUp3ZUxNdnJJMGQxY2drblBITWE0OUw1OUFJT3JhSU9FRWFyRGFheGFxRDFPeGdISVNoSTJPZjBmeDFoVWdkSUdNMUZmSWFwT3hNdS9jdXprZzR4aERzY2ZMbTlZSThhN2JDYmhlbHRZNzFIZ05DYy9DbEdVVFNMVE9GTlNMbFdjUzhZd0dETG1sSGFhTFNKaWdZak5TT2JFakVJWFdTNjAzMHl6N3pFalUxQldTUk1SbW1GSHZLRW4vT29WdzI0TWxKT1ZHSkpVcTBPV1JMbkhRL1BiTGNnTzNqS3h1NXVLUlFuSWJsQTFaZjI4YVRYbnFzNGtyODA1YnlXZ082U25Ed05pVWlHMWh6cDFaNmFxc2tjUFIvdjliSTNDdlZ2S3ZuNFdRZGovMFRwZHRpNWZLYTdPeFJmMUdQMTQ0SHl6Nmlpa1hvWlkwcEkwTCt3ZG4vTVhuY1FrUFlhdVoxZVZHVkZ5TmJpajBJWnByQ2UzcTBLeWxVSERXN3BDOWRYR0pEQkhtajQ5NXhWMGhHWFl6czhWUlJlRWpPbURNRzAvMGpXSGhYSThvZ2J5SnNDeTFJQjNTYm9XN0NweW02ZXo0aTNIMHlxWE9ISnVUWVdnaE9EY0JlWU52TVBISGQ3R3FTQ2UvSUd3M3JuVkN6T3RBcjJEYmhHY3llU0w5OCsrdDZTYm5VazZsTFN3ZS9DL3FucjJDWWVxR0h4RFRjU2c3TUhZZ3ZRcmJxUkJvQ3ZBZWxCTUVXNHl0c1cwVVRyd2M3U2VKc2VPNndoVituYzFGV3NtNC81aUdDZXlnNHA3NE9haEdtTDhKbjZ5ZUhTLzJKWGlLT2N5OTB3aTBtTzNUUEZhOXpLUXJVbFMrRlAzUlBRYlloYWZQVHFOekZxbG04Rzd3d1VvWE5ja1o5RE42NWtVWlVvMWxsdjNvL1ZMVThHR2FJSW1ONTRCa3FCM2ZNZ2dsMXNTU3Z0YlhkelBmVkxNNCs0M0NVa1RUc0RWUDNwUFVCa2R1L3doeE5UUG52VStLdmp3V1o4aG5Tc3BFTitFc2FwVHhwYjJnODBXTm5la1QzMmFwZnphRzZ5Q2g3RmFiSFVQK0NjOWd1SzYyelVuQUpBaEVZaU5KWlB3Njc3a1RhQjMyakhDVzBUVEgzczRwWGlNVEdPR0M1M00zYUM2U29FL25SZ0FJMjJvRHIyZWhiMWJueVVNd05TNXM3cjduUVdobXpERDBoQTkwT0ZPazVGbkVaaXRJVkY1L2RrR2FTb1JMSWl5OGdhTVZtbUFnRk1aNXgreFBEVmxMQlN2cmtYdHJFT2t5N3dKTXNkVWhOVG81NStwS3hlWXVOYVNNL1AzMjFGK3hEdWc0NC95cmE4R0k0ZWNDbVZldE9UUHlDYzZjTFphdjk2M3JGbXpDTnVaMC9jWUNzYXliN2pHOWNDenhTT0o3djk3K1pla3BmOGVxcW5ZWEJsdkgxYjBVaWMzR2lXcXBsamlkYTZNWkttdElvN2o5cDBPQzBuZnEvZFhNUUR6dVltMkVRdWpXSy8zMzZscXBhM00rbThtVFUvWVVzZzExSDlnWXpVZC9vWDJjb2RiY2RXRkpxeGVpSnNVcWRNb284NGVLSUUwSWRucG1GMmk4R1NiaCtLNHF3MmVxdTRCWSs0dkpSY0FRcGF3WEhTMG5uTmcyRGU5NzczZHdhSEtjL0s4a0hqSVYwdDdiclg2K3VScjFOZUUrRUJ6T0pvMUFwVkRscjlJdUtyTThuT1plVFNXaXQvVGVhMFhDTU5uODlsWEpXc0piNWxMNnViZEZpN2o3SzNXNW0yTFBaVC9QUXcrUCtJRXJuM1JYRkZkTmRhcWc0QmpzeGY0YTcxTWlrUWNoVDF1L1I3NHVuVXNpNzQ3WXB4U1E2bGN0QU5KbndPWno3Q1c5S3NadS9PcFJ6aTVLZFAxMElub3BwcUNuaW9xRW9KM2pOaCtRbmt5aVdYbWNUcy92ZFRveGcvNEFWc21VUFRZcWVSSXJhVGowM2hRdllQZ1kzdEhadEtsSG5WWVZrZFFnV0NhTTdXRjFLVGZmclR4bU83TVVmaGcwZEpLbmx0cDF2VlcyZ2dDSnlkSTI3WWNycGtGRi9zVDVoTGxJeGExeVBuVVN0YzhUdlROazY3a05ZVEhYcjVnV2x2VU5YTDBEWE91TEJlUFRSUEh6T0RLL1hsdEZPRWlSYmtQTGFxWUlPQVI3MUxTVDEzQWRmME45elNmRll1cmg0b2s2NlNpS2tab21NMnZpU2VzTzVWbm04TkM4aytHSS8xanlUYndpcUV2R0xuQkFOaGR5RGtWbm9QR2d0UlRKaVk3cUlZWjVNeXRqdFUxa0djRUJKTWRkcnJveFZEdExvcGlWRlNEdm1tU0hwdHlYZEFGUWpxZEZoRnFPNkovWmJscEpBRGpHQnI2VENDc3R5bEc5VDZhekViajArNGhMUlpwY0hiYUxrQWlzV2xOejM1THhOL3BmSmR4bDMzTVFwelNHVHp1RlBHWkp3T2Y4dHBsbzZ3M2VtOTFYSXZ6N2JHMFFGMnFqRXBOQ3hxbXY3RXFUR3lPZmdUZktUNmVsL0wwTUdOVjRtY3N5bHpVMFdTNWU5emRSaWhPTFM2b2Vnc0c0eGx0ZHlHMUtFb1M0VWJLRHduR21pc2hoM3JxeGxlQUx0Tkx2emQySXFiQnBETUU1T0Vkd1p3aTBvcHB5NzNXcTdSTmFFM1NIRkVTQURJTG9BZSsreE42bkV6VVdseHBFeDRTd1BZMTk5eWswSTdKUm15NHByWTBJUEJxVjEveDBVUUZPOEtCc0ZxbEhrczZmbEFNOWl3eTZvd1IyVzBncE9WSGdXeThycXBUcGsySEU5SkVpTTFpcFMyVkdRQnVXT2pmcnYzMmd4MkVJWkxGT2ZOdW9IcFNXbnVWTTRSMStEVXEzUGVHdFFDaVo0MkJqTGNtT3dHNzB3TVdRR2swR0tUWHJlMXdoK3hkTERoNUNSN1hxaitINlpSdkpFN1dWK29xVElvSVZJQjd3V2I0cUlDL0xxMDlLRWZ0eUFxTEZMOUlVT0hkMjFrVDV1ckc1Y2JDMWg5c1dnVFgzNGtDRXN5ZnpuNVl6aS9KVDhmaHUrdGE5Qy9wQ2JqdVVNM0l0RjNFeHFmZExRTm94WGRZd2xIY2cxV2E1cWlkd1lsS0p1YloxRnY0dWJHWlBpZzcxV04xRllzNy9hNm5rVTFqUEtKRjZoU3Y4alJFL0d2bzFMTUlnNEgwSzBwaFVhV3JpeUlJK2t6SU1JWlo1eGJVaC96Zm5EczNkU0xPQ2tXN2VKTTZ4TzZhQUR3cU9DRndkR1ZEQk41bXBmekR2OUt3ZEM1UHM4a01lZTB1MmE1b05jTXZWcjNxYWdtdzlrWVdRQnJGRGozcFk1UlJ4R2IrbklsSWtqZVlud3ZMbEFsRVZjaTA5bmpocGVoWEtJa2hsbmZwbHo5Q0FmUTdNTEU4TVZGYVpDR1B4VHoxWmpGR2JZNVRzNmJVcS9mVlhrUzZwb093Nzd0aDNOTGJsRW1XTzJMcWFBYTdlYWJsNE9PQUg2YkNEOGw4YWVJbkVLdjNnL2VzY1d3NmRPV2cwMTByQ1dpWjVYdEpyUEY1c0lvY2s5NkIzanBLRlFETGhQV2taMUpyamVZZ3dFODFPTlI1Z1pETDdRdVliMXpabXRoSGNNL09xakRXOXZzZmlNMTJOcm1PRXBlbXovVjBudWJ5clA0cDNhYTVHUmViOXQrcEYraU9RVkx1MmtQYWg3TnRMQjk1aFU4Nnd5Uk93a2h1eko1aWJDMDE4TXM0ZkcxaWFRR1g4aUUyckhkTEVLTWR0ZnpOV1RPQnVtdGlvSFRFcFpsY1pPbGdJdFNBaWl6d1RBdGpMZWdzdmRrdEtGTkQwckNIR21CQkFyQ1B0VEZoYlp6dTFUTTVIUFRoVnpEVmdvVEl4WGxITlFnejJENWNQbm5IMFY3Yk9idjlnZG1DTmhnVnp2V0laSjdlT1JwVE13eFB1WlZSeHlrYXJISEd2U3hSNCtzZE10QkhBakpJNWNHQlI1RmxhQ2QydjdNMFVEZ0JJQnUvaUN1SG5NVWRER3NuWEJYMTBFalB1ZHNseGcyc0lMSWJUVElVenNTdnlHa0tzOGV0TEVjVWlVWnNkN2hSY2ZvUThQNVltZENvMjJ6Tzl0VGtZOCtoNlB5ZTlNZXBmZTl5R2wzTS9kT2hoTGVERlkwMFJXTFEvYVNhZ1ZRL0RNWldnekRFOTc5T0ZiRXQ0MnhXTkdJSS9FQWNBeUVWR1J0YS9PR2RkNkJrcktIbVpjNyt2T1FDQ1N2bHA0YVhrN3FnVWFLVUoyWXE3TGl4cHV6blFXTXl6QzJtL0RkSWc3L01xNXRJejRjVFNadE9CU0FKWnBHZk41THB2VjVQUXhSWGVoS3EweHRsU0VFOGlMUmtMU1ZZRGMyME5jNkg0ZnV2SDdudkpTdzdBOEMwYVcyZHRDbHpnM2F3Ym9GdVdMd1FLNzRnQTdpblBINmh1Z1lFcUhFcUt0S2lwb3dOb1BRTU0zZzMrRk5aTjhoM0w1enJzb2hUSHpIWlhvVlZsLzMzeGhsQ0FMMHB4dzFab3JabEp5Z2JaTC9DWHFrL1ZwcnZ3WmlJeHlzV09PSXkzU2liT1B2S1JUellhTGlyblBKa0RWQ3cvamZ2YW5CdDAycWp0dEVnYzdqK3BvUEFpTDFxTWZqL1hjb2pCMnFySUMyNjFKU3FhSnA4TDZiQUptTUtMVGhQcXkreWNHZVhqWlAyeHZrUDFwTk1CMFpKYVNudHpRREt3MUcwNkRYSHdRT3A5d0Q0UlVtaGpDUm9xT2FtRVc1Y0ZiTDZUM29pdTVtMHowWk9hZFJOU3hWd3VRcmxZYlRzckN1TUdBRVY5VnVsZHh6ZEFuMzlCMkppb1U1Tkc0eElZRTNzYzRvYzFmZ1VQRFFEb3d6WU56RzgvNkFNdFVtQzh6T2F4RENRKyswdjJwZG9ZbFppRDFvbFhDWnlRUHkvM2RnUkhhbnBaUWxLdFl1djVRbTNyR2dFUEhBM2xUekVxbUlCT0lybEZRM0tkVEg1djlMY0V5QURhSzRTL28yMWk0N2gyMHJKdXI0djVUanh2djVTMlZzMkNZTlcxUEh3UnpERjZKT0l4YlFXU3UyWGJ3bS9sU09DTHpHUVkzNWJxWmk1MmtUdThvbVNKRGF1ZDZEcjh5MUFIUks5KzJYblY5bWJoSGJZek9VYWt2ZGgvR0FIZmxtYTZRZVZkc25kNVJkWTRtMlhaRkpCbmgzdWIydXJYOGkydC9TM1NBRUJ1UXhzdHJmcnFqV2lWMGs3cTR1TEZEWG9tb3FvcDd3NUVpV1d6N1BmcFUyQzJDRGhvWmVsTHZqMXBsZGorL0VxbDdJNVE3U1B0Rmw0akRzbCtaRnNvcHI0NUw3TXZDKzRNMmZWMkc3RXAwNzJORGk2SjNsRDdobTdvL29DM1p5a3pXelBDcml2OVcxeWlDRUdlN3N6akRMQlZCM1l4dXI3U2lURXdBSTB6YkthQllhQnRlT0t2WXlsanQ5MFNBUGt1aUhNYVNsMTRmU3ZOc1Zzbnd0bEhSb25BUm5Wc28vTGVVVFFaR1FzTFJHOXZnUmo0bE9Zd0xnaHd0VmZpWWZVMkp3c1gyZzVCK2xpTkM3WGRiUTVoc201OFdsQnBHejhyRDFlaFUwSXVTM1ZjMU42YThRdmF1M0xzcDY0TE5UZWVBOHZXWDE2YTcvQ2VNV0grUkJOdGdiQTZ3ZGxKTlc0RTE1Slhoekw3WFJ6Ym1HM0s5YzYwaWhuZTVnSlRTMm9xcGx1dXRoN3VuTjl6NFlydUN2MmE3NC9IZjFxcHFDalVCTVZjbG0wM0RUTWVVNnBWYzd3WFJRdlBNTEVIU3gyYThsSk1TbW1aNjJNdDNHNVFuTzVMT1U0TUFNZkd3TUIvTjZlbmFRMGM0Y1dVWUJFNEp5bTduWlp1bVhPQWdBM1NUeDZlRGdVblhXWXlIU1Q3L013VFRHKzFrZlpIVVBVWGpnRmJURWdBVTVLbEVKSDhBVlZZbG9wVDhRKzVPd0RyUWlFRGlHZDM1bEpJV3NteS9sSHBzeUxaTG5pcjByekdVdnBpdUt2Q1htRjNnZUtZSXdsK3haajVIalNmcklvUDFjaXhEQm4veGQ0OXN1MHBsb3M1L2pUR1NNaS9Jekk4VG5JTmFIbTR4K0gvdFYrRHdUUVEvckhCcnVyV3dRdW9oOXo3RmNIMVc3UU1YejB3UUNBRTlHYi9POC9Ld2U3VTIySzJOc3dVWnRCQmNaVzVLeTlsM01qZ3ZHYVBuYkJGM3dOcXBuOEtqck1CM3pSNVdSTkVCc0c0MVJQZXBjVE96UCs3S2pQMWNDVm1ZcXJmOTk1UlBOS1RMRnhyaTBuTE1wRFlxSXBENG1Ha1lzbnJWckh2NElkd0diRFp0Wnk4amJuSGxkdjljRTJCTlhQV29tM1kyemhtdmtuWjZ2RnU3K0taSGFOS2VuYVg0cDBRdlpQUk9XdjhJWDVOZmwzcmZpa0NVYjViS1FjbWxtWjkxenhQQWg2bjViaDJFdUZWaTFjandybXVXUnlmRmgzZm9zM1RFUnh2MEdUSjhxMUxKSThYRmU1dDJ1MGUrZnc1VTBFb1lESlpRcUVKcDBlU0E3UWR5NE5CRG1wUTBFUDNGSi9NSzR2WEIyRUFnT0tMYWt5Vnh1bXFxSVdSSDNVY1lYek1KYVVKc2hJdzZEdCtmMHlkWU1acFRPRGxXeGsyTWdSZU9SeU90N1dsYXlhc2FwaVdhckJPMjBPdFJ5eE9EOTg4RG9DaXJzYjFGUk11dTFwcFpnQzh0N0syb0VQTjVPYVJrTzBXaUNQRnh1Szl3eHdZQ2kzNGdJWnQ0Rk9kaUtwUFlZVWhIMkxUSldrdlRMaVZ0UE1iVjJ3Y2NSU3RIRmkyRVk5TTgzaG00ODQydWd3K3lLTDlIdEh0YzBLL3hST3RBcnlKTHJtVVdnUTB4S1dZeTBJQStjaG41YS9jUUR6cmVPVUpJQTdiR1F6b3RaclZ6bTcvdGorUnNVU3NVVWluWUZPZDVPWkhCeHZiWmc2UWdjcGdwdFU4TUhzazRLekNBOVRpM0lhOC9JQzR0RmFwZGNLeTNqZ0U3U2thWWovOHBRamRTaSsvdHkxcGZsb3U4TEI2YjlHb1FKa0hjbWtkczFCTUN2a2twSURSbU85MnNQVXVnUFpsWjczM01JQ29xcmZIakNNTmpmQ21UWi9VNG9keTRvK2pLT01SeXdXYXRwTVNzY0xXeXVGTjBLV0lVc1BiMlZsTENFOVZBbFVWaTBuOXRDYmsrSkZBcHVUd2tpRW9KQ3VqVzV2TndiTkN3dUZOMURvakF6dnkyVjNTeTZHaklOTnJBYmRTYlF1N2FYeG5LUjA1RDdHZVZXVDZRaytxQ0pWV01Mam80Zzl4T21TbGhiWnFDT21oem5pUVA3S1J4YTFBUjArK2kwdStEWjVxbjYwUTBXTkNlc3k5K1ZPeHJNM1phTkc0UE1oVWdaenhRYmZpMno1Z0txYnhLVFFkaXZRTVF2UUUrNzhkMTRobW5IRzRTRFFjS1k1bFpHeTFLbTJWeU8wU0RockVvZjdYaEJnU1ZjZDdqdDd4TXJvSzg1VHVBS3lneGhvUE1VZUM5aDB3Q2F2S2FTTnRRU3BoVUJGWmtqZUVpNGcyWkwyaXR2WG9RSnUwMFZseFE1VmVVcmVXS2dTM09jSTE0bDJ6VG1ZZ1BvaTh6VGNPRlYreHAzYnRqNHlidmoyTS9pdDJtN29sdjFsQlZBYTJWVXBoY2xXN1RGUVFjQ0Njbmg3ZkZNVko2Z2JzbG5VNEFydEtFcG1Jb00yd01oYjUwVlFnYThnU3k0M2E5UTZNSGFZdXMxTjJObGZNMWd2TzBWOHBpbGdmVlNnUVpZTkJ6T0dRUVlxVXMrL0ZmZkwwUFNlN1FUaVB5UDBwUnVsN0N1MFFYU2ZmQWhpRWI2elN3UlBoRnhMR3crOHFSdWFhZVNJVUJtTEkycC9yeHR6a0tJaC9qTkkxL09wbmxSa3Q4NERZSWhXZ3JwUTdKdHdhd2JWMDNiRkJpTXYxbytWQi93MEQwWjM5dVovOG0wYkxFK0h4dDZCZ0pXNk5TQzA1ZTVsUGFGcWUwdnQ3d3p0QWVQays1YVdYaWFoZUtIbFl3Nkt6WS9sejRjbEpnNEJHVEhVczJveWN6dGRWWTN3c3hzdC9YWjB5M0J0ME56bXhycVBmZTNvOG9ZUXN2Qm0zNTZjR3ZMN1JKcGcyakdrTHBxVGluRmVBMGc0ZE1ObDhYMjJVSDhyTWJBZXJzZDRMVFZ2bXhMaFVTNnZSbGI4bVJXeWIvUnFybDZPUnhCQ1dZUnRtU096cFJwY0I2ZjlXbyt0Ny9DR1UxTVNkczNnMXF5VXlzQlRpK2t0K2s5N2dTc3FnSGJzRitYYzVBOVpubGdtMFNtUmIxWEl5MDhBSDFsUkgwekt0N0d1RCtoRnZOaVRveTA4WncxUEpsdEZRaEJIemNpQ0dCVjJaZ0YvMlVZVlhYL1hBVVM4YURaZVRET2UzdkdMVmYrcGlsUEF2aXlrM3liK1pNR0JGUndGUWx5eTUzcytFWVd0UGFxaTAra09oMXdWWWgwYmh3UmE4Zm90L3N4UzRreTZJL1VmYS9sUENKS0pUSFFLY3hCM3Vnc3FnZDZQR1BoTytIUzd4cCtJRDZIcmpJUmx0b2dnOHU3N2ZpVnNlQ2xMTytCcUN3RmxVODJ5YmxxL0lGOEdxWVEzVWthQS9vVGhDVTZoTTJ4UWdvRXlTd0xLMUgrUzRKcGVMZjZqZkNLMnNFU0lxN3A1ZVBlVVA5dzNJL0gzaU41bXpJUlpvb0gycTVTbEF2MC9BdlUrc0R0bmJTOEhkYVFEMFI1NjZlc3ZmWGhxRUloTUplTWlBNjkwdFlkc1dCa2xvc3E0ckNyVXoxWHhWQlcreFdUTWI0bXpCaWppcTZwMG9lelg2ZkJUK0o0QVBwOThnYnNJQ1NqbXJkaUtvYVZZaFVnWG9xTkdHdXVkUDlqL1FmU1pPVGxLSDBCbGhnQzViWWZ5RzMvaVhQUWIvd2hqcXJva1dXRjNLeDY0Y1hUcHVGVGtyTnlhRlhxelArRmd3SVV0Y3VhTzJMMks1K3Zta3BONzFUd2VSbHlwZ01VQ2x6aFZtM3RKa3ZOQ1k4TXhDUGszN1BPWXF3N1NCZmVObVRNRHdYUTl6NW0zTmZ1MERiU0MzRGQ0aTBGVU1TbVNuMHNsYnNKZ3g2NG9LQ2NvU0lRbGhEWHNSR1hPTXZPSlFZREhHNEYrMXk1RGd2bUUyNkpmcWxOak9oWUEzdnkvRktwNHE2aVJpeXJvVXUyeFo3WkpxNWxES055TEFJa1M1RlRuSUt6NXJyUFRYVlkyalh5TWVwNUQvWGN3MGV1WEY4My9rZkJRdmZsK3Z4YWoybnlLV0xuTlI3NHhYeFMwd1QyK2F3OUhjLy8xcE1WRk1oUzI0aWF4dEY2Q3F2VitYNkxSbTBrbjU5VGVYR25qZy9JRDNTSHVONFFpdFFtK0xzTjUzdTdvcUxPYXdoS2xQaDcyc0E0bVVOR0VHdmtvTFhBeUYveFd6UTJyUjA3SHBJaTlUd3JTRkxQbHRzK2pSTHA0WjVibkxnRUhBc1huVStsQ1ZUNVFOQnhYKzdiQjZBWnNiR2NtbEhQVzUyajVFaW80N1VCOTZVOHdqQWNRcWtNakV3QXpEV3RqNEdGSmVEOTdrMEZ3NUVzTENvRFE3TXRpL1pkZ0hjRlVWejZoWTlNQ21laTlNUFZXMjFDbW1Ja0c0SFF3YkFHaXRVRURld2dTR0tRek9lWmpEQ1kxbDllblFyNGlqV0tIb010WmJkbHV0WkZnbnI4TTFCRkkzWXlqNytxVzBHcFJxM3FHVHg2QzhqSVdmSGEyKy9UWGd0SktLbXNvQTdlT1ZFNXROWExwVXhjUkQraDhvWXZjZmVOUmlySXFNalF4MTlzVENVQXpDWGFPTFRPd3FrRThKMi9DNmpDTEhoM2QwbVp6MS9mWkNMMk0wTzF0RjhTbUJBNnJwZVUxNERsYWxRZEpDd2E1QlZGWnJRREJkeXVYWlhjQ0p2S3ZMc0tKUEttcTFIUlBuMi9kR0xsK2w0cU9MdFVMZzVnZnQwQ0VnZ2NOWnAwWEFjSDl1MWhLNEZrRFkxUTNBZEZSN2V5c1J4cFVSNUNoMGJTMEtkN1NQNHpDZUZub1ZYSHJreHVGazhib0hlakVYQ0NobzYrK3BzTTM4bnVuNExUTGpTQ2dkS0lpSlBsWTV1dkZZNFUrM3JwOE95UzI3WVF4M083U2ZxT0pOMWxHN01OQktLV3NhTjJDc2MyRzN5YmJkeFhNQ3doRzFmV203TzN5MlJHYkZ4SktNK2hpaUIvM3BYVUZ1TDZIS1I0TEJDem5sVTRaQ2ZyTkZsdVNzdUcvcVNLRG0vRlN2Z1g2d1ZuWFpvOUN3ZVhXcmNrdXl6d2tVcFZEbXBlWHVlSTFIWDZWbWtrOHRSN3lZanVVK0llbWNmQVR0ekVVQVdzSWtUdUNHOStFeDZhVUlrZjA4c3pEckowNDVsQzdWZ0YwWG54ZDJFREk0ektpbGRoVTBGaEd0MkVUWlRBdmJvYXZKNVMyMXNPQ0FrV2tLSlFFTndXOHNIZDIwSDMySnRJM014K3hSK1hvSjh3d3JmMlZ1MXVTZ1IyWVdYM1ZhUmlmdkNBMUZHRGdUdWtoT2tDcU12cDNJWWE3WmJBaW1vL25zOGduTWJpVkVjZVM2VUU3dzRsWjJiR0hCTUZ3ZjNBQ3psbjNha2hRd24zTSttdXdROEQvVXFqbERaMm5nVDN5cHVFWCt4NlUvQnlieFlDSWMwWUdlUFZNYmtoYUpwWUM4cFJieTVySGdaM3hrc0VlNmpHd3FtOEhmWkptU2FWdUpDKzZLaHdvT3NJTGhNM2w1bE1lT2UxQnpUTmwxUENUN25UMk50aFVETmEyamtEa3RXZ3JFU2JESWwvWTNMNjFkdjdUR0lWVEhYWEpVS0swa21HbE5HZ1ZUODNFMkQrZ3ZvV1NjMUFudkVkWEJQMWpnLzc4emd6cW1lc2M4SjVyS0lIYUdmK2lTSjBRQjBNUkpKMjVJR3U3OU9tME5YQjFod0ZuZXRLUGVPZDdvUGllWTdmMnF2Q0kyQkJrV1V4SFR0OGx0a2syeThLQ0o2UE0rYW9qSm1lakJYcmlxdzMzOFNSTVlibVd3UjVtTUpqcFpuWW4rNFJzb1hsTExDL3g3TllQTnZ2QWZNSFFXVXdHakVJUDFHc3gzc1VVY2x4YjQ0Yy95SFk1Y3V4UVEvY0p3eTNuTG42SEJhK0NYZ2JaTnk0SThZRWJxSlUzWnpmV21RamNqZnFtcXRBT1dNdDU1WTZqSjNFSTIxbS91TnVUTmJMeTV0MDJSMkQ0U0VOY2VsYlN4TENCRGRxTWZjVHkxNW9ROGdWcHJsaFg4OVhSdnBKSFNIK1dkcGpMNmQxcTR3V2ttaEtvdnpYdWcxK1ZoemRHR2JjZ09xd3RpeTd3MzV0eWRDQmcyZlNENkx2YzMzSC8wbWc4emlqT2NISzNWSnpLZFlnYmRXWlpzOWdjSktLZkR5ZFRuUDROc1h6Ym9XK0JJaTVRWHJUaHdFMThIdGlhVHZXdUhXeUdOUGVGWjZEOCtMaE05a2dmOXdpZmNsUjl1YzI2S050YzlzekZIeC9McTNvY0oyc1RzRGliT3NqMDBUSzY2dHZ3U1NoeTZpcWcwb3hBOGh5NGlYZGMxeHpUcUR6V0g2UHByMWt4UmU4N2ticFdCQzRIS0QwTm5ESEZhMWRmOGtuclNPVXpLbS9lZUYyY2wreFJLbW1kWHFwSHVqMmlNd0c1d2VVTU44UXRHUEhWKzNrR1JjVCt6VGI1MHdDN0ZzU3FFNm9jTjdBQ1VJc0Q5UmJLZSthTE5mcXVoT0xWWkIvRy9wOENLVUFNNmxaKzNZUGRRVFc0TDBhbXhkUndSczM5OS9LT0FrRjhWOGpaTzQyQm1pdzREbGs0Q3RWZTNVNVZPRXU5dXIwYjZpaitKRWU1YWZERUhaS0d0SFVWdDQwVGs1ZWJTRjVZWUNPTm91SFdvM3paNFNQdmMvb2FhZzE1a1loMVMrUXMwcnNGMU5VMlZYc0dDRnJ0WjUrcUw2Y01FYU0wTjlEZ1BUdG42Vjg2NXJ5N2FrWGFFSjlwKyswdE41S1UxOHlrVEZhNCtmT0E3VTU3OXZjVitBcXMrcXltb3daS3dudzVIOVo1YTIzVUw0elA5MmhtUjBWRHlSaGMrdFkyWmkxS0l6czdPMVNWTEJOc0dDdVlUYjNZbUFKSjkrQU9CMTB0MnlnWDZOOEhJQjZUa0RSNnh2cjJCdmYrZVl3djlUelcxVytpQXV0TGoyZldlZGRDTko2anJWZ0V5YjBrcVVJbXVlRHRYbXpPUFBibkIwTHpNdzlEQmt5WGkxYkh5QmJhckJrWnBaSUhSWUxab3NiTnJPdzNyRWhmOExGU3FobEkvejNhR1o5NkdjOWRQVlBkSXpMZFJBeXMyZks5SmZ4aEJKTmljL0lkV216d1k1WEQzKzBvMFhHQVZhZkZZVkdrcXBQTVdjOXBnNStaU2NzamxLV3Y1UjNzQ0lyMzlVSHZTRGNBeEtHdGxxdHRiamNscDRQSU8wUkxwOUtkaDRYckxqQ1FoNEYzZlREU21mb0hyQ1FMTllyOVFHaVFHU0hLeEI4RWE0MG9keVFxZHJmTkJiaURDT1p0VUx0Qng2a2M5MmhNVjVyUWlCOUp6WlI0YXMyWlA4OE1yb3M4QkpnNis1MmEwS2hxb2dLUExjZlZJQWordVJnTXdQTmtia3pDMjREYW9ZYVNzUmtZS2g4Sms3a1RwMEszcmcvcURKcStFL2xxY0NodU1FRjZQTnpVWE5ZNEdrUUxXYUZGSDZVVzIza29DOFJaM1RRWkV5cnpiVGRTYkI3cnZiNlEvOGNLR05kYlJwUnA3dHVHanhncHFDMS9EOCtGYnJPWUlVWm9yNFlsNUdjR00xYTZQYWc2Qk9YUDhzV25IN1JDWEl0TnN5eFVQcGdrcmphVUQ5ckIyQmp6WE1UYUZqWTBVNEIzT3dzcEdhMDMzQndxaHdaYjlNQnNzMFdPOXoyN3JKTjNUQVpxdUVwazJ1YThVMDBvcUFkR204VWJNcGhtKzBGenl4emVXU1hudU50cUxVUnNKWHJBdEd1Z3pZZkM2d212Ylk1S3l1RGhSOWZvY2YrZW02dVI4dVZGcHJ0bFRJVDdYaUJ6Z2lybHUxZ2pmRkhEcWs3WEhvS2g4VlJtQkxteGZ1UkJxU0ZvY0FZRzN5R0lXcFAwK2hGa2tyV2RCb21CRWNsV3JUVkJHUzFic0QzN1RYSnFadE54RGFzTU1NdTMyWndzLzdvd1dIb1VFWmErTkUxaFd1bVRoU290V0VmTUtjd05qcGw1eVozMDR4WVQrdDFPenZXMnV2ODVaZFFtRHhSWlpPUWl3VEdCNGYvcmZCcjlsclZ2bGp0NFowWUxJVkI0T2dPc3NxUlkrYktYZ3ZaMHVFaUZVc0JmWktuL1ZtVkx0b3dKS0RNMXBZdjN0ZUloK2JDWnZWTk9MZ0gvMkNWd0VKM1lJYmNPMFdJRUlDdVJqa3VoQXpMUmlBdzFCcGE0TGJCMXpWdzllV1ZmdDFwSmRCWnUxaXdIYlhDNy9oQ3FFeW5IK3grZElFNGNONWI5M2d5UTBjckR2QzI0cDJwS2YwWU9OSklkNFRLNzNhWW9mT3dLTWxoOXBoL1puKy9mbVIwWkM0ampkZEZValhXUmxMRUY0ellSS0c1RVFpTmN6Zlh0Z2tmdmttaUdYZGN5akRqM1RGNzdoWGMvTXNBclZVY1ljbU1SWXJxR084aXFGdy9wUndONnplSXJZMERyRHZlWE41TkZUbXlxM0NXcU9SL3lJY1ZkcUs0V2FsNW41bWFTTGx3L2Rva1ZFRkxWK3FLVXRPem1PMzZ1b2xoei83aUNBdXpoVDV3Mi9zd0IzaithYVpCY2tHcloxdkh4T0hGNTZIYnEyL0tOdFRJTjBzV3Q5MGZkdlJJcVdjcWNRb0VXZ2lFcTJZb3NXZ0hYSmM3UEJuUXRWQ2E3OENtM3F6Y0ZmNUhScmF3UVdvaHVBTTdKWHhXUFo2dVl6T0cvOTYxSEhPenJFbkcvNDRxVzNyZEExUnJSTytHOUV6YlhEb3VYSHdoekFJYjM2VndnZTAwRExCeDFaTkJ5SXl5NUNIZzdwcC9CYVpmSVBwNlNYb2Fzd3g5S1ZxdUw4a0l6RjJ2TTI5RTdaQXBoTUpraGtkVkR2Sm1RbndtQ2NIL3pDSFBtYWx6NFU1QTVIOThJb0NscmRVRkMwRFJiNmsxREc0YVVtaUVPMDJRMHlDNldnN2dFTTdwcDZjV29GM3lrT3YxZmpDZFRpaSszOE9KVFRjL1pYc09qRUNITlNDNGVnOXN5MURuVG9WMFNKd0VvNmJNeTNQc1pkSlJSMm0rQ3hueG1vMzFIOU5xc09qaWp2RWtFSjFTUXppMklHbnBDcmk1Y0diUTFVSXlteXdMOEZzV3QyaEdUeVdJSjA0RlZuM3l2akJVWE9JQXBxdklVd3ozQ2hxdjF3UklZd1Bjc3NaR1l6VzNid25XVG9ZT1pCbFUzVXVKbXYzMURxTWl4cU41aWpKTC9FSGJiMEtNczVHYmFUS0VtVnVtQ0pSNUpuUTN5MW1VOXRJQW9VaDdmUE9EQk1QMHQ0cVp0cUQveXpHSDNlYUVVOUJXUjFCT3BSVzVsc2JXZGNUcCs0TXVPdVh4Vkd1ZGt1V05SU1BVRFpPVUlnTzIrTTRDUmJOWFBTakhtQnRhVGZmS2xIcGluVXhqQUVybndjcWtXMTBncGljZmttM3YyNXpNeWxwSDkvbWF5UmZWbmtqNFF6NXpqaHdqTXoxZ1piSmtMenVFMk5Oa0g2MWlCZkloR1NLL21LWE1relBkYzVQaUcxbFZkL3R6NWZPK2Nma21qcUZzQzdYYVpUVmh3a2hhRXFDMk5LNHBsTURQV1RBTldvZnBwOC9sVTNrbFlUcStXNzdyNU9NRDlBOG45VitnbEJCYzhnN2ZTRkF4U29wN2lIWllheWdQdkVVTXhZclVTZG5jK0IyV3pRMXpmRzI5cUZnQVYyQThoOVZVaWxSUU1yWXY5bzR2YUZObEpQKy9NNmdqaFllWDNsQU1veFA2M1Y5K0NDb3g4MEk1WVJ6VDMxbmw0empQYkNzVklZMHVWMnprbFh5bGhiSkVUMGl6TGthS1JkRmYyS1BpTHdYaHJhcG9vd2p1S1ZjSzNtQ2hyK1A3U1NpUHh3TTBCc0srV2g3eVRpNmIzc2kzQTd1bVRWZ1hYOFJaNHQ5Z0dlODJWS1Vlc1Mvb2pnZHhkMnljMVl0T0s1TXBKdUh6NVlhcnZ3amF1UHlkRzAyTHJneXQ3My9aYzFJWVMxTkh1eDluMzBNRDdLMVhROTYwY29lU253WUo0ck5RbXhyNlVWNkt1SzVPK2hzOTFOKytza3VzdlRhaE9kZnlxWFFjUlVRMjZDeWpDeE1HQ0g3VnJwRmVtZzN0bkR6RlRVSE1WSW9uVUdzU3JGTUoxdzFwSGtqY25SRTYranV0eWRWbW0zUW8wSFh1WVkyazlWdGJkRGhBNXRhZXp4MDk5b0ZqKzAya0Y0V3NSTENKeThxSThzUHBzMFpkRzRDOUp4SlFRd3ArVGVxbk84NHA5Q3FpYldsUmFwOGMxMGpJUEJvSmxMWFBBOHY1cVdmcHlnek9VOFpGU2RBY2VBUFREcDMwK3MySmVhMkcxR3ZrVDh0THNNalFLUjRmWm5ybVdPTWlmc1RnOEtxYnBFMytpWDdLNzJ1Z05pdlBaTEx2RHZ3OUVoU3N1enpyM0ZMZFBFemNQZmVtdUZyQUNZcUY4LzQvMWMwd1RaUDc3a3pPcHR2amU3WkZwU3M0NThtOG1XSzB5cW1xeXBKSGFRV2NHNjBOWDhleE5VVHNQbU5ZTjB5TTRUdDQzMWRoalRVQUI4Zk5VbWVCSkxiZERGdEw3V1M1cFhBS09DTEN4bUM5elRQWE4zTlBibzIzb3NTUE5LK3pSaDdzcTZjRW85UW9ranNRaEZBRWYxT25tdFMwb3Z3YXQ2RGdwazZJT3N6U2JsbUlCczQzN1gxbGhpQWZMWGN5WUNTMG1NYWNQOEJPOHZSRXBQY3Bmb2tzRG5pWTZ4a1FKTWdLVWNlOWcyc2xSc24wcThkcCszN2I5SU5Mck84bys4NVZqelZtRjVoN25vRWhzSnpEbjltUFdjVzZlZFozMWMzSytXZHV1SzNUQWV0ZTJ5OHdqdHlxNzJKcTVyMFMwYzJETllIdDR3UjY4M2lmZmFHdmx0eTJ1ejBnVXpFWWtxVU9NY1RjMVNuOXBaTGVrQlFJdWlEUWJIeTg1Uk9pSWJsNGFFMG1MdkJ5RFdVK3ozQ0t1RHEvbVlWM2lST2ZKSjdpRlgwYzZyQlBNbFFLZ2ZHbXdYMEFyazlZaG5Ib0p1TU9LaWI1Um9PdnNiTEw2a1YzUUcvOXR4Q1MzR0loTE45dVZmTmZ2Wm1iM2Y0UEIxQ2pwSmhkWFUyL3VvYzdWc0ZuNkJWR3I2NEFhcGdoK2JCTC9GR0tFM0lLSzdONEE1U1hQZVBkUWxJY3hyUHJ2UXhheHJZWmFDSXkyb3RMbjV6QUk1TlBNV2RKTWd3elZLUVV5V0ZFUmtQWnBQL0daRUw1b2FkNit0a1h2NURzQ09rdmNBN0I2ZHRmcUNTZGJOVy9LemFTdVhiK2ZkZnJUcUkxbm5kUDVJZXo0emE3WDdFZnpubUVmVG5qUExDU0xsTTlHWnEzUmo5Zm5zNnhqNFR4VmF2dnljaW1GbjgxTWtlcHVXMWxTV2ZnV01iYm56TGczZnMydjRiVGxHdG9sWUJ3RVBOZm9UVzN1UDdnTE1FeHhBWW9KREhrcHZJU01rYU8rTHQrS1NNVnEyOXhUQTJJczF1YjB5ZDJCb3RsVzJLQmh5VWI5S0IzUUl2dFZwWjhUQ2ZPZks1TkkwSW5HaGJ2Y1lodUMzSXo2U3h5VDZqeEp5eWhaWHFuTzJGZnY5RjhaRkRtVVNKSXpKT3FIUWZHRGNPcHZJc3h6bE00cGNPMk9yTmtYQS9ieW9GbXdEZEg0UmVad0x0WkNtZ0VFLzdjc29IU3c4blFWbnYzS0EzakQwZnlPek5PTGY4aXJwbVByMnR6RFJ6bVRBVFcyanlxZG5nSm10aW5FM2ZYdW0yODVRc2ZrdXN1c2VFRHd0WjJpQ0RaNFd5U2k5amswdHZyeWhKbW1TT0lxMXlGdUFPYUxOVGUxNU05SWFPNDAzdDJmeHVPWUY5VHB6dVRsdndINU1uc1JrZ1ZEa2hvVWd6N1dZMG9hZC9nUFg4RFNwTWxKdlJDenAvak43Szd3ZFNhT1hkY3h0NlBDK2tNaVJoeVlJei96ck5zK3Uva3FOTWVSSGYzK1lqSTNTUlZYT050N3loK0tIUCtXdHhqdmg1d1hXcTg1TmF4Y3hyQzYrMHRYN1QvZGlva3U0ODlHSzJodXFUUWpxaHRTVmZyZ1J3K1ZNUHRVWVRBMEMvQ3Q0cW5wQ0NvMDZreUl5OGt2ZllCajRNYUdsV0hzbXllNERqenpKQk1BRnVNNmFLdDBzVVYzdURpWCtGOWdOU3NDd0w4dTFFWVl0S1BkOTNPaDBhcjcwYnVTbTBBZ3JxSDlsUmpWaXl6aVc2L3pjR3pERXQzT214azZpdnR0aG5DdUkxaExvaVVTRy92bTBvVDlGcUxWMXFaTFFUM09FeGwwd2VvdENtYVA3VUhIUTIrRnQvdnc4TU5kZENWalhVelZiVm96WmFXdGEzbUFBTW1BZGR5TzQ0VURLWEJBQklPQWNEalBVVm5uc05BMWNTSnBNWW5uQitlelFLdjdSdGt5MGtqM1dVQ3gzTmZPcmM5emFEVUhlMWNSOFhEZmFCZW9Ga25JWGVFZzY5eHNmNlBJWU56OXh4QlVmSUNldjhhNjJRTFJESVhQdmN5UzdWSHlOMWE0M0RPU0lSdTQ5OUpJbk1wdmFQM0kyYlNwT1ZTNEhkNDlYSENMTnhqVnh2WTV2NU0xMCtkcVM5aENidUdEVnpsT3ZWUXdYbHdubG0zR2I1K28zS0xxN3JSdVo3enVVblY0RXZxMkJDQ09lOFhiVXk3eXJIY0doVythQzduZ0llMThsQ1JuRHVydXBIVnE0V245bzRkendiV09KUnBGUzdxMDE1UDZzRlBVMTdEYzh3WmEwczdZQjJ5UUp1K1o4TFpHUkFpYTl0TS92bHBvTkRQYWJsQXFNMWNkN3pIUHJJaUdHSXFYckRQcjduQ0QvVXE5Y0ZoTFNLK0NXMUd0YTZNK3dPbUp4Vks2NHBBTXlnZ2RuU2hUbUhrTjV3TlIvT3V1andUSXdzUE9mT2VhNDlWRXZacFNQSTBsc3lSdmNRanc5S2VKcVQzR3R4eFBPN3E0YTRjREczTE1QS1NObEVicytVbVd6ZVFaeG5ldEQzemk5K1BtNTI3dlc2QXAxMkFUdWJQSzJvZ0gyalpuaGhzT0d1VW44UkxUVG51MUw0S2YrQlYvODlmNFA4Q2Y4bU5mOW1hYXpMRWZsY0tFczJsMUxVU1lHL1dwS250TXlEbHZJZHBqaklaZTVoejFVekhDS2RWckYxcGVpQUd6aGJWM0hpRFlMeEY3NllqMTE5cWh1T2tNS0hWUldBbE40Ly9yYW9kZmVtQnpnRHJXdE5DYXR4ZmJuVndLRHJQL0tZeTkzcEZoU2FYWmQ1SlVESEFwWThjR1hwSWJ6Z08wVnVNcVRRUmR3KzJxbHF2Vlk3eXZ1NEE1elF4UTNuRVM3TmdRM1laRXdxNURlbEpEZnFuVGlMb0NQR0dPOFJxM2JxMUhYOHkvVkdpRGpwOFo1bDJja29iaW9Fem43OGh1L3ViU0JQekRyajhGSlVaNjNYakRsSEkwVHBuQklDUEVYeXppMGZZRFJvUDRSVGp5MTk0ZUNjc1R6bWc0VTBZNG5oSTZkb1Q3cjQwUmV0SFBTSEF2TTFod1VXMlhvaFNvbk54QndlRzVWTXJ4Y0Fqa1hyUUNLM2p6M3VtdDFRSy9XZ0tNcmVTZjVPbGF4QU9kK0hGNTJZdWJBL0xkU3ZwNmhLbFlhVzUyY2VmMXovZC9zbk10bGNEQUpiU2tHWEZXZkQwaVBWNE1tS0tEbEc5cEtDUXdmSUNOZG1FM0VQK1FBMjMvMG9LRWxHQnRtYU1VanJ2dEFEQm5oVXptbUV1U011dHVVaEkwS2lVT3pBMnBmcmdkb2g1ZHc4NXNlQXM0Zzk5T0JaVy9VdGtQVVIyNUcxTFpyQmtxMzJxdnQxWlEwZVFNdjF6YWtBTmRrQStTRGtIQmVveWJWdVdDbDFwTDZNeWw2Y1dBSE9uNzNIbTk1QWMxVUMyMjlTOWJ3bDZteGgyWGNaYldLMHc4NmJVaFNaSCtJajRQY0JvTUJldE9kWUVFZnhiVktoN3M3bS9vWmZ5SGdNbXpkbURCa3F6cldsZXFBZ1Bhb21hbU13T0hnSkRTRHlZRjlOSWhEblRDVWhlK2E0bEFua2NhQlQxMFJWT0poZGsvdy84QTVtOGkwWjY2Q3VOWkNjbUlLUEpOUUdVTUREUkgycFM0QVk2dkdzM25KUXp1MTVrU3Y1UkVxeGRuNWpiM1NubFk0aUdlWXpIbnVjVjhmYVRVYVg4Z0RyV001VUI1YmZBSHEwTjNZNndrMENoeFRQN1RhdjNPY2JsemFYTjhDL3RCT1ZRMDl3eGFKUGZqcWEyMVFxQmtsM3ZEejd5YVdiUWJYU0szY29uNEdjTUlmRkJacDlFQS9RYXROVFFqREgrRSswV0JIRmQ2ZFRUY2o3elBQQ2NKWkJWbGE0WHA0K0U2ZndINmQxY3NFM0NoUEdEZWtyc2gwUzVxb1d5Y2xMbGVqWXQxV1Byd21uYUJJUDFaT2wrL2Y5ZEZXbEtpZHJqUDJWS0RzOUUvUWw1SkpIWFZnNXd5amJLd0k0amFjNE55a25LZmdkZlA4SndpU29MZFNWa29SUlZvMnlxZmJFL05BL0ZJSDRVMnA3dGRHMVcyRGxkRGMwU1lZS0JWTng0bnpjbFJaV09GY0cvZGQ4Ymw0WWxka0k2ZTNaZy9ISVR2VGc0alRRNzZBS0xSYVdKVTlJOVozMFZEM25BSW9RQy90RExEMGxtcFpTS2ZsNXZzbTdreGsrL1lLR1lFR2FRUURrdVpCSUI1NGVBNVBWSUR0bVYyU20rTnZ2TVNVTnJaUGhUQmlibnF0N29TcWR3aG9TbTZEWVBMSVNyK2RBOTAya0RnUjJPM2ZDdkowa0ZxVWM0eUhkSTN0RVJvcFpkY3RYMUozVWhlZE14a00vd042TzRueUp5eUNDYzVwbU5MSGR3QUg0Q2lZVkovSDZXbnhVTkUvdVpoVDlzaW0xWEVKdWVlcllkWW5iTjhOaTlmN01udlRFbFJHQVBRUDQ1UDNjUG8vV3k4eC9aM2luOFNHWGo4NXlyK0pHb0dHWkFIQTQ0YlgrdzMxN21rbEhwMUdVSzk2ZlMrbEF2TDhjUEhrdVZONVFhNnpKRzB0RHJHUVdQdjIzV1FlaVZhQmFYSGJBNTJ1aWIrdlpNcjRKZUtweHVBV2dGeUwvZnh0WFhtYjg4MWdJTS9RMDdZTUJXQUtpVEthalZ2YUZmYlo0Ym5UelNsTXplZDZRSEJLWGNuZ2h2dUlXZXhOcWZkUEFlY3pMYno0bGlOT2ZkRHNrM0RJeDJVRE45aGZyTDB3TU5UaFAzV3c4bFRycXFVSVIvZDh6UHFTUXhkQnZRYk1neHlXNmdnM00waVNXYWdScnQzbmRxRUt3eGM0L1BIdi9WWU9ITUtwanAvY2RBTEtqdXlFMGVpK2hGbk9raDhkZGtWSEdtNTBod0Y3QWl6YS80V1hBekhJL3hPRi85S2pDY0poVTdpS3JLZHhiNXZqZHJzWlJVNm1SMytPaEpTVUV4bW5pSkRPQjRCbkJ5czlxTUNkNUdHdDhpb1NwOGJBUVRuMVZCZ1M0M2t3WDc2RmVoRWx1a3ZNWlRTNDZpRUlUTkl0OFl2Zyt2YmlZMDgrZENYamhtUDltbks4Mks5MlVLS3RhUis2OFBZNlJxQTRsb0FUZStmVlVlZkc5M1V1L2g2bTFKNHBvY2xGN3NOWHI4VWVjb1JyZUNzQ2o0U0w3a0pvWG1NUGZFZWprNlppeFBWMG43c0d5Z2IzZTFoU3A5L0NMdHlPU2l0T0d0WkVCTENrMXJPUVFGK0VvRmNma05hbnYrajQ1SDd2c0hoRkZZM21EMW1iM0xibjA5ZFpFWjNLeUJvWWVwOG5MQTBWTTl3VlB6akpHdWM4MkhuNmVxeG5MMmRJUmxoZkx0RENWN3ZEeHlRanZvVmFXWUxXOU42dHdXYW45ditDKzRPYjk3Ni80cWFYTkVhVUFmb2YxcXh4MEV2NVVjOTd5SWpFZlk3YXA1WVB6bUU2SXZaSkhES3JNQWNHNS9QWHJiRHJFNHQwUXBuLzhpSDZWSWp3bkY2aVFDRkQ2dGg1djZkVEFWZmFLZGErTnpEWWU4L0RUQzc4NWtoMUZsN1JqNmViU3VFMkJCZXFlWFNIdlNmSms5bUxlNlpya1hRcExsK0N3ckRRRUJLQjZ3MmlWdjljTFJTSjlnT0RnMlV6cWRWdWhMOUhReWlXSVZwVDBLYnBYbmJtemlPdjlEOS9ldjhGM3NkUDE2UmlTbWxFaklzWWJ5VkxvNXpoNDVtU0h4MytWcHRrSTRwMjZtY3FtdTF2azZKUTJQUlBqQXlnT2xmM2lhN0FUWXdLb1BGQnFYd2wxWVBKaDVnakdTMXRIbklKNUk1Y1BoRTQwanJSQWloeFdQblNzb21DNjJ3OEtxYXJNUE9VL2xFWU9GY1F2dFZSRWliREdzd2JuY3o4Q0sySld3OGhjWFdoZWxRKzF6OGl2cWFGVVZBQkxlKzBlWjl2VTBaNVBSbm45OWRzSlVUbUEzRHVadEZuMTBibllDWHQvZ2xSTy94MGJJVjA2ejVQTmhxZ2FhcE5YbzFGei9HWUR3V3ZLUTdtcTg0bitMd2ZMZUlTMWJtelF2MFpSSDNlT2JVWVkrRjdrRXp0MUk0MnZvaEtLb1k0WHFzekdYTWZZSzF4TWhTYWs5S0J5VXlPckdBdlVXVUJmb1pUTzJ0RVlsb0RJZCtaUnlYSlNyWjJ0R0Y5RVdPSDFQdnRLcVhrQmJkYWdOR0VyN0FlMUs3aloza01BcklqUFRnS0FqdnBRdWp2UEkxbEV2ZStJa2phd0FwU3ZNc0ZJY0tNOTg2NERyTFBVdUg1SUNOZkFPSXpFb3k4dHRvWnRJUHlnVkhnMXN3OXBXeElINFoyL0h5eVd3WVN5ZG0wNW8zVDBNcE54OFRvQ3IzZ0lTU0htenJsNW54Y1RZSk1WSDQxbTBDS1V5bTFsVjdudi9mZ1J3K3ZZTGRuQVBJWDhkZ2JFcmFEa21peWNTWUFCL2Z2UGZlWUY4YnkxWXVKNFlmOTdEU1AvZ3hwdGtVdENHTUhRbmFLOFZhOXk4c1d5aTZQTnYxbm5IMHNqOEtsY0FXMlpNZWlBSXFtK2orUGc3dFEvTWVzNUxaZEhMM3drYUdMQldLbVk2dzZ6NklQMzZUUFppTHRGd09MSnFaRUlpZVpGYWkvdkdKM3VFVFdqOGZ4MUl4Q2g3RHRrWmRaYmZHNDZDOENjQzRkbTR5VjBqd0JZd2xBU3dlVVhNd0RlNEtmRTZ4R2xoSitYSGI0ajlzQ29PclRHNzRNRGFxK1lEMSt0QTdqblFVNWQzc293MHpsd0RiT1Y0NHZkbXpiMStDeXNLeGd4cjVrK1ZUQTVoekM2bG1IQmxXd2xPRmVwSXBwdm5nODkxc0JNR0VHVE55TFFFSnNSZ3M1NkhIUDRVbXczUTJmRW1kVjhld1lVZGRpSDZTZzRpQi9pS00rYUdWL0NkRDQ4VFhERlUvaU1EanAxc08wakVFSTFpVFZwNnJ5Z3lvNUlvSDRibUpoNTFUYzJEdVE3UnptLzErWkwvcjdGR2ZYdlpLZTNvcWd1UHZRQjBCSTk3d2RPT2E4QVEvT1E5b2dCL0FKNC9icEd6OTVMRHlUWW5tM3NybURrbTdpVmRUSnhhKzhDemZSRGVGdWRvOHc0bEMyQnVHdGVOM0lIaHMvYmh4MmtJc21LbGtBRm5KRHV5aTZwbHlkaWl0ME4rVkczN0JXS214aWlmNkhtYmZnODVqdVBZb3JJUUxsRlU2WmdZekMwQ0VZaHNBbGV2S0JPVVRHdW0zYktqTStUNUdXanU0eEh6enkyN3lXd1k0cW40WTRCQkJ5NEQ3bFBlaFdOK1czU29raWhRMXNRcVNjVGZFNjM3elhYeCtHdlVnQlFzN1IrdEUwSHN4dXdBUGg0eXBNZlo0dG5STWtwWWJkeVZYR2trNXZyQ3AxU3ZkRFQwTGtGdHVxcGRQT2NRbnJTQUtxeFpNSHF4NDFqTTZVWWVHS05tNUxRM3J6dkFPbTZ6YTRUdlJRNE5KakhOeHl0WUxldGVobnZObmZIZWFOb0Y2WEkvMVVIYXV6dzBqR3NGdTdEWTdjTmVPVVJlTmJVTHB4cnhLZEpBQ1NBb1FJVkxvMzB1dzNmbHBZOVlWVzIzNGRQL05CTFk3clBDWWswa1RXSjU5ZEYvRWRqYUVMa3NyaFh6T1lxTVdvdnI2d3MzbE9TTndsUmxDYktFUHJwOCtKQU14ZlFsa1Nxa3BmeWVqVWdxRnBsWWMybkZ6eEcxN2NFVzI2MEkwMEw5bGZHU2lwVmsya2lFL0VFZ3d5d3lFUnZlSzBGVW01SWhOVDNDVzkvejZQbVc0WUZ2QkxkRVowMEM3OEJ4K2pjR2pQeWdZRnlBenlYNldKMXRjSWptQUxHa0M4anlmNzBVRU41OXluYklpN0FmOHdLNkREc2JsaHZ5ZjlHeUltUmhZL0tON0w4elg4OGVNclp6eXc1YlhKdTFkcGpuYnNvcWhFd2xIdTVSSEVNZDZsaG10R1BzMFlFNENCVDRaQVJHYWV3Z01KOUw1RS9laFQ1UE1adjZKQnhXWjdUNWRicEdSSG5LTUVYSElaTGRDazh3eWRtUGZ5d0N4V3lPVklzQWxPSi9tRzdRR0l0clZMSzdhQzgwOTBodDdDQ2tyelY2TVNCa1IyMlBkSks5SGt1bGgzOEZPbHZTMVgwSnd3bjR2UlNmU3FKM3VITG96SzZ5b29FNEN1Y2JYdEhXdTJmcDdDaXJtSU5vcmlGblRkenc5OVZXSXYyY2xDQTlnWUFWTVkrakJFdTVCaWhuMkZKR0VXK3dHcGI4MjJZZEdYcFdhcVU5QmVxdG5XUEU3ejR4MWhtbVE2RG9sVHRZUElzaVdPRldYZlpyaFQwSGZGK1VJdTh5elh1NDlYWEFNV3FST3NlOVBEMGV3MzVETVJQU2JzdTUxSjBWOUVrMEpMK3RqWndtY2poTWJQbE1jaExqYTJRdEIxaEliVk44ZWxoWTFPcEY1SFBwZ0xkZk5ITTNEV3laRGtJMEo2U2Q3Q1NtY2JEWUpPRE9IY3FibmJLQWtrTzJaOXVSTGN4cm42UzBlRGF0ZGVaNkJ4SnArRlRxR2ZWMi92K1BrWDhjZUM1R3N3VFZ4eWx3aHpBN1hEOG1iay9nb0FjWEkzT3ZGQTdxUHRwOFBMZHdEbk1mSTdrYmNKQ1hFS0xwYis5RDNoRmNub3IrWnpHRlhzZFp5bklPZUxReE1aQnc4T1JHc1BDV1ByNTllOHg2UzRGa1AxS0l3MVp1akozajJ3WEwvQnZrVm43L2Q1bGhBc3VBY1lSZm5zTnMySlV3MVBrSTVMWit4S3JNSlEzRXJzZnluQW5NMllMV0RyUEkyOFFMRTJFb0IxMW5tSWlwQzNEb1Q3eE95cU1VYklja1d5dXVQeWxKZGVGVHRCRWtWYml1d1JVQkJXL043RlNHbGUxMG1zUXUzZXI3ejRGd09SeDNQdFVDL2FKOVAxNHk2d0NIcGVTVDhtNmJVbWxvaXdaNGpLV1lIRW9HUzJSYWRZSXdnQVgxUlNLWWtUSGpiNC9PTmxpR25EWDlIWEFUR3NKcHp5YUFyM25vNmR4RVVMQlB2NjFsY21QeWprSno5WUFsaXFBMEh4NHprSTd3TDB0Tkp0RDlnTmppMGk1azdWajlIUUc0NmdrSi9HT0J4WDVoR2hNcE5EQjBsbUZ3VEpCeFpoQnJWQ2FWUTcyNlo3bDhPbEJ3QlBjd3RHL3BEelZoVXcvcWswaStRREZmVXZ2WnE5YXNETG9lVXBJbEx3OFMydFFWa1FZZWc3ZGpOaFhwVldqQVRyS3ZmOUZTeWtIMnpqTmYwS0d0anQ2RWNpSXQ5djJPYWVVa0xHUkVZZjJRY2dRZkZ0Q2YyNDlrTDMzM0Q0elh1TklPUmVtb0tTSkRxbmFIb0ovVm8rUC96MVdrUnlGRVZtTHhPVU5WTHA1U0ZZdlpoSXRzUGNOVGpyeVFnTnBjaXM4U0hSV3J6c3lOaUhqWU82WGtSemlyb0JDVi9UMVk2a3VWRXBUYkpqM2VUZFVFOHUxcytqQ0lLcENneEoydStRYWIzVk4yT0xjblpmRy9XSURZRGRWRi9LU0N6MlgvRkd2dG1PQTdPTUR2SEphWkh5L1pwSlUvajhsUnF3bHc0TVlPcDRBamNINUJnbElxL3RLRU1WSk1nWldsc21BQVl5RDBnS044dVN5RVVMUW5BWjA2dDkrZmNGME5jRHBaamVqWDV3djZReW96SDgzTnVTYmxNRmJjYmtYTUNuc2l4VUc3ZmJzaFdqakpvQlk0UlliRy81NllrUHltYVhQeU8rMUdJcXpIdnlFVm1BQ1FjY0xFNVJIendBb21GRkNJVWpuM292MFZFZ2x5T2xzWGEzQXJJY29Rbk40UWxYSXRxd1AwVnN4TTZ4Z3ZHR29IWDVlazNMTFVSZWExMUZZTlhyeUROSUNuY3BMTGhTc2E3ek41RWNWanNpdzBpc1d1Wk1BVU5aUmYvbGJJbUxmNEpnTE1yZmF4UWdaSlREMVh1bnBRVFM5U3VpN0crS2p4bmdIMlhxWmRRM0pjcVhzaDhQZzFIM2ZqdDVhTVk2bVV3eXQwN29xM0tscE5zbW1ZMFZZMWZiZHpaMVVCRytleGxLZWx2VytaejNuRHd6cXBTUkswQWJHQ3g3RE82ek5TMUlOVllHVEJoSklScXora0N4T0F3b3R3bXJBMXJIVDY0aVMwamtseURYRkxCQUpLeG5XYVFnMUp3Uk9jT2Q1eEYwdmhWQ0ZqVjEyVXRua04wNUZ4R3ZZUUJPRHZ2eGZ4cGxuN05VUXlQUVc2V2xITWxNZzlXUmIxMnB0TkN1YUVEZGZWTTV1NC9kdlJiaXhTaUk1eUJyS1lPUXg2OVVZNkU5d0NkK3pnQ3JuYi9zQzF3dkppVUp4cExRc1JYbkNJa0xZOTZNNlhIQXEvQldWdEo5MUFVL202Mit4QUNVSkZkdFV6VVlaSVJzSVBld3c3M2ZPbmRIellaVVNIcW1KeFhJUSs2YUpWSG9mT0RjTnlZdjVVaVMvdU5LK2lJWHVtcUkyQTNncUtxMm5IRjd2QlBvcEVOM052bmYvTkhEQTBjREZ0U2RTYmdxSlBZQVJKYXlsZ1dqQlBCNlA2NzlKVWtpVjNYU3E3UEZWNXdtWmJwR2hFWkRJcDgwaW5hT0t1am5XN1A5MHlpUU5xYlByTTdDNVN3Ums1eXp6SG9MWDlWSEVDUExMKytCVG0zYTdKdlVlM1BqcEpxNVdMOUtDcG9BRWZ1OWhiaE9wdlFnRk0rdWJvMkczd0p6aExPTlhjSkl2TzBoTEYwYmRxQ2c5ZUZqWTd3YWdGY05TdlN1WnZKaUEwU0I0dEd2bHZrNkt5RDZTTnpLT1c5Z0JaM1pGZ3E1V2liL2tXamtPSGV1K0lhVjVsSWxBeTZidmdrdi9lOE5LWXJEMnFESlFBbXlkbkUzUzlVZno1VDRiMXVJNWsrWjRwM05mc3ZuSElVZnp3U05TOGhoSVdVRFpqdXQ3VVllcWxiRXhTVWhPSTZSR08reWZWVFFUZjNiRWQ0d0poQ0czckJNM3FsSzQvUWU4ZzByV1VhdHRDa0xXT1pTWnpNelhGclJ1eGJGMEVpSWJCdWdORTBzS0pVa3RqVWtQbUk3bUdLUVUzam1yUytabWFkQUdORkxZMStVcnVONjVnV0E1RFV4TEluckxPRHMzS09uM0gwMjk5eTQ1MGhvY05kUG13ZWF2RXRCZmRKa3hXNlhxSlkzWi9oWGdQZE5sRmpwd2tDR2VyNXk1L3hnVEIwR1FTalptdUJpTWhIa3VrTm14UldoM3gxMlVHZ1F0UllQeVRuZ1BQZVErZ3djNWRjd3hsZy8xc05UdGp6eDV1ZUN1SmlJTFErZW8zMFc2cnFyaGlYR0psWGhRV3p5dHZPZ3NEa0xaY1BERE9uOWtTTk9KWVJOZUhPdHl0TmV2MG5ZRmV0NGpIc0dRN24zL0N4b2cwNEFqNFd3MDAzVnNKNk9xTmY2dkEwTmtNVVRrMkQwTzIrOHAwMkYrNGlndDVOK3dQaFQ4VXdCU1RiYVpmOFNjMEZxekYwOVQ1YkFUY3o4c0FUcTNuVmlyT0R4SzJHUDZWUjYwMlNkVkNncWRYRkl6R2lHUUEvdlFHZlZFbFE0cVd4S0M1RTQvOFlBQ2pkZ0pxZW85WE9uVjJqOGdXZ3Z6WnA5akxkQWIrMDlsUkhsMjd1WW1CNzZoWE4xNXRVUElHd0VuY1FrY0xydWFUeGFnb3o2RkM2cU0rZko1UnlGN3VuQy9Ic0xrQmYwRXRZZ1EzNHhLSVpoM0hQSUtTTzRzRTZJcXp5MGtXa0IyUmJpNEczVElpUGg1NS8wbEFpNG91K3ByMkFYaWt0TkNSOHErS1hFWlhrZnZVZFU3K2ZVb0pvcmg0UGFMV09WZHJTS3ovWGdUZ21XbWs3NzNJMERNUWdMYTZ5dlVHQkM2WDRGL0dvSXZ3S3hxbndFZEF6QnVmYjZQUHBjY0o4bExGV2I0NmMxRWpOWXpJakUwTTVxM0RQRjYweXQ2VmUwS3V6YkFtYldiWGdlZDluNUZRZ3laNXNicDc0dngxamVBVTJlbmJCOGRQSG1FSVdPNDM0T0VjVnE3Q2FaT3E5OCtBanM4ZVhUODF6UzRaTFJ0MWM4N0J2UHNJb1Zvd3h3OVhidDdnVElEbFNzRkMySEZ1OHFoQVY3SUpqMG9nZy9tQStDejRJdnFXdmVsNnRCTi9pWXVwcmo2bzViUGFQSStEUHlUdWJnTEVoYzV4d3dJZTVCL1AxV0N1UWptVlR1Vm9NWTU2RzIxRjBYVU53UkVjKy9MUlcrVHliZHBOVTA2aE50WDBVRFU3bDJ1Y2JYVjl1eEM2d29ZSmVPNnpqc0NoN21WN09teVB5TlJjVGRtK21DOU8zRE5rT04reFhuUllrZFVRVXFMZ1FpNEpSMUFMMXE4RVdsWUYzY3gzRisrOTIyQUtsb1lCOTlOQUhvQ21zVXNxanFOVVBGb2pkZk4zL2VFZjdURWJsNjgzYTB0NDZqVXhIYi9LMFhVamFzSXNQcEJKenY0bDExbmxDay9xUVBxM0lVa2RFcmxlSHZsc2lrc21pZDgyWGtZUzA2WWFGL1d0MFJBT0FLdkFwZmxnN2UzOW54REgvTFdzSWx2VGkwWWtEbGVXUnlVSVFHeHdUUWNsc0Fvc2h6M05UbTBGM0tLeWkvOFFRYjFSOEkxd1VPanA4d29ONnFlOTlNNis0cFVKRWpCZ0huUVR2Q09wQmgwNXlwbEIyckw5TXJEdnNOa2dhZHJmY0ZubWVqbkt2YllBdGZoU3Azb2JtWm40cjBKOUxLbzJ0L0FFZFVORHpmSVZkMXY2SURjeERsdFI3bnlJeCtQSk1sUWpJNGh3aGdFalI2SFNWYnM0MlFXbU91RllkWDFsbkhySHVValllbWV6ZzhQOGp0eHhid0RaOVc4Wnd6cXBiZHVaUktIT3dPQzNZYUNLVVlXOEhscDdCNXVTTVEzM3F2eDY1T3FHMVRHdVRYQ21USVRPcmFYSHVRVWFEMHBBRnFZTENzOVZrOWsvQ1M5elhyT1pLZVFmTVB2Wm1CNGFXWEdjTTZ4bUxLckloNmVSYXpBOVkrdGZSV2tvd2VCMldZSHIvc3k1OSsrd29jVkoxNEczUURiUzNWM2VsaysvY2xGQ090aURaMGJiQ1psd0t0aWYxcWJ4dnRUTnRBNEhvY1VuOWcrRllzUHlkcDk4czRUL1VBL1hsajBtOXNlcTJuSzJpbWdGeE80cnNIWHNQaStzUloyeXRiTGlnWVZrMEZmcnovTnBHenRjSDIydTM4U1BMdFE2WkViZ1JKeFFRMGxVbHF4czFOTjk4ODRxV2liemNZcnBTV2FFeDRmNXljRkQ4N09wUWc1RWtQL0VnZTA0REk3SFgyYzRud0R4WThNUENyWFpEZHdNRXZLS0RDQTNXVnVnSWYxN2l3Ym1VRFJFak9IekEvRUhFayt3YVBSZ08xT1kreDNqaTg5Z0lwMUlLR0xoMlhYYU9YMWg2dWlWOUlGT1NCQXJYc3VVbjJYcmEvcGlQOUtmRHBEeFhmcFlTTGhkcHhnQUZTWlQyOGc0Rm82U0Z1TTNlT0c0Sm9CTTZWZUVyRnFBWjRldXRoWjVUQnZ0MC9sSlRRSUY5RFRDN1lTNjVQcnhpRXR1UHVXTUhHcXlPb2ozK1M1YnIwVzZKcFd5bE1mNFNsdUVlZkl2MUM0VE9DdmJtZGVqay8rZStmUTY4dC9MM2pBdzZQSFVBaXhGQ2JhY2lPZjBUQzhtY2xmSEdtUEhQOWNLeHV1ckh4Yyt5QmlETUl6R2JiYzhnUzFBQnNtMmlkRml0S1grRFc1YmIwWE5YL29BT3VIM2hBeUc5OWsvRkVaME53WWpzYytJenV3SjJIZkNsRitUNEUyWXVaYXkyNkVsc1J2b1BMeXp1dFdmYnUzOWJpQWJXV0dvSmxWSUNmeW1NQWxUNWdaQkNoeGM4dWpsZEVIUGZBQ2xVQzNRU3NUMm02SEhGYnI2VUsvbk5wM2VsZHFIL1JOUW5mMk9IQkJZU01HNXdyYjR4RVdKb2hpcC93TVpNWXd0a1lIdHo1VDdRZzJESTVpN1gwQ2h0elBvZDdycURNV3J6OWhRdkZvZExQT1FSR28ydjc3VUgrcXNiWmJOQ2w1RUdZS2xON2p6NWZxd2wxOU05ck9kNU9jU2hZSHNZNzVCaWVoZENzWC9pZTJiR0EvRG9PcUx2MndrS21TRzh1NXhMUDJPOVEybkdDZmxVbkJrdWNPWjltWFk0ekJjcEpOU3pJTWlsUU9yMmlrWnpHQ0RxS1pDNmRwVklMSDJKd1ZSWTdjZnhTekkvZmpxSzNubmNwd3JydFZsb3V0QXVMVnZCMWJJK3JyRFRZZDExVVNISjE1cXdSOVJVa2Y5RVVIbURjemQwK1ZFVjYvc29ZbVhyMENBalZibEd4VlZjVzV3OVl0a24xRTFOYXFQWkc2ZUxRcVFJNTdOY1FNdzh0Q0krQUUvZWRVUHFmRmxHZ0hSK3libEdPS0dubUtBdGhza2hKWlRvaEQrZG9KSTdFcU5TRFo4RVk3M2YyMFd1eGVzUExvVjJOdzFqWDBRcGlDZTdBM0xIR1NxS0E1MXdMdzhuSHU4M2ZqTkNUWUhXM0hsZnVkdUNmYjVXKzdtVFdScmN5aEs2b3V5UnBxTUVyUFJDclJIZ3F4VEpWWEV5Q0xmc01zaGY5Ynp0eVJxenJzcG5CemJtcHZoTE1qNll5WDQ1b2pVQ2hkUTRlblVNbFpxVmNJdWpZQWpVQ2h0NTdHNDRJUTBGUTBoOVB5Z0pmb1IreWhSQVNxTnY2VUZuUlExSmYvTjBSNWFyRlZNQ2c3THE4WXN3Nk9uZ1lYYW5Sd0VJelpkQTJ3UEZPcVJGL3NXSjVVaTAyRnNLMzFxbTlhRElXWDFKc3BsNEJpMjFudjdhTzd0NlVqUlBqWEdaYldRS1BVYmZlVlppdTdLcVo1YmNXUEh0OUNRVlZtQmZlWjc3VHgrc2Jvalo4OWxVdld2RlNYZ085ZXZURDl4UGVrL1piTHdrb3Q3WTZUQ3JYUXpKV3F0aElaUi92MklrUWRERjFUQ041RmxWMFlNZS8vY0g0a0dLejlyM2tTRzR1VE83Q2RSTGRFMTBQNTh1UTVBWHk1cmlIbmU3aDF6WDVDUksyRjlSNEt2b3FHaE03UWErMDNsbHFFQXBadytxN3A1L0NMNHVIS0cwUEhrZGxLMit0VzRSelBqSXBXVnI4ZWhQY08reWNnU2ZDMWx1bEhuTDlac25nVlMzcE1JaXFFbE4vN25qeklrdGtZTll1dzF2NTdPTVdTRmFGR29oVEcvU09DTEcwUEFTTGR6WUZGa05WeVhTa21iQkNTbURlZ1FCSXZLZUpWSG50TUgzTU94VDR4VEJWWk9BNzVzdkJrTHlxTnJuUmdnYjNHVGdMVGNDYlZYRDRxUWxib2FmWkNBamUxR3pRMzlrb3MxVitwQWV6Nk9maHVseFVteWlweG03VTNZc2NEbXB3MjdES1V1TG1HU05Kc2lLT01qWEpvRE5ESVhkVVVPQnBlNTczbUxxV1VpN0QxMW5ZQmx2SVlidU1KZFB5UXZTMFFzeGhtK2JYd1NsdVFTajNXL2dDdzRhMTRkMVBvQktZWVgvY0E3NkRoM3FUa3Z2aHZyemRIc1luUmYxby91RU5NQmhZQWkrb09KeTkzYklrbkZURGtoOHRKMWVvZENJSTBkemxmMS9JTUNYZDVLRkdjSTUrYW9DZHFTK1lhQlRxcU9IK2o0aUhoZE1xcFBDeC85UThobHkxWnNZWm13VU8vek8yRzM2MTRRK09IM1V2KzZ2TVZ6SzFuSnRUZVJSNWhNeFFZTkgxYjF2eURmR3E1T3Z1N0E0SmlXZXBFUW1kNElWaHhQcGpxRzVsT1VyS2Iya0EraFVIR1g0MGpFbVQrbXc3SmdOOUVyc3BRdmxyTGpJT0crVUpVdDVsclBlTk9tWjFNajlmcXh4SHpDQmx1N3FqNnpPTFNCaEQvUFFXd2NzejUvSk1VNGdsS2M3YnFWU21QMVZlMnVRaVNXeHJOWVcvTXJsVlhkOERROExYMDMzcmFlanhIUW5zOFJoNDZ4eUx6aGlMS2trekZrOGV1ZjZ1UE9jYWdHQTZrMnJrdExPNCtGdUkzOHl6dW85TUM4djh6TE50b1ZXKzZCbWFXYUpSZlVIOHVYSWZ0citMQ1JDSzZBN2oyQ1VLSDZqR0dyZzFvaEh6bC9aUWwzREErT1UvMTJpNWtIdUdrN1hkVWRVejBGVU5vcTF6aTRRMGUyU3p4K0RsRmxVL1ZmdDVaUjArYkVYTldjM0g0VHBiUGQrdFM1K3ZFcFpqMExNRUYvM3YyVkFTQmhTdG9walltUEhaMzllaU40UjZCM1p3WlBDVDdYa3krQzlPMVRnck10T01aK0V5K0lnZEkwOEVaT1UrbDR5Z2E5V3dUVmxvMzJiZHU3OWdQeHFyMG54RnNnUTlwSkdRS3BjMWVIVCt1dFU2b2VJZG5zYjF1dWVSVVc0WFI3blczZ2tyc09rcGVhbDQrQy9tbVJBaTdUTkJNbTQwZWppeCt1S3JtTE5sTXRET3hQWnZocVJSYmY3cnVKM1c2RzdmT1lEbFE0eXlJQ1NaKzBxZzl0aTZPdFJvNmFBdWJDS3UwcHQ4a3J2b3pBUUR0bHJvSXpLaEEva245RzhJdmh5U2RsNldGTGhtVzVYOURXNlVLbk43S1BPZExkaXFUUlFiTGJqTWlrZFJQR25tNzYwR1V5VEliMjVjcU5qU0lqZTBIOWIzNTVkQ1ZrNzNQK0xtNFRrYVF0dU02M2xkUkRHNjQ1ZDJSWjVBYTRTN2MwRFlWQ1I4V0N6a2dtNFhjaEtvN1BZUlhLUis4dHNqVVp3SlpSbzNFUmNGVy9sQndzOEt6RWcwdlFpSjk2aTBLbDMwL3dwcnhIbnV6cDc4MEora2VneGhPQmN3enpJeU1IVG9EalFvS1BlQ0V4czdEOWRmdVI1bjBHdXU1VU55Z290dDl3TnJTWUkyZ3pIbGN6U0xNRnhtKy8yd3JxdFkrWFYrSWNXRHZ3WDQvazB3ZjJTckt2ejBRVC9NSE12aG5OS2xQQ20wdFpsWXV4QVd5dzBxdnNkMHRPdXBDMUtiUUF5MTdmbjBFaW1PYlU5QmZTSUZlbldIQjJyVlNuT0F6OVZzc3FKeTJsWkdvYk9EenhyeXh6NGhSTHJ5akRuOEZSSTNjQWxUM2cxVktwK3dPZGRqMEcvdENpNkxiT1A2ZlBvRDVKNXpRNjZBUHF1aHdudHJTc2NqdFpjd21LSEJENGR3VTZTUURKQXBOMmNUdCt1aDRDVzAvUEdLRDdSdFhhZWU2MEh1WlozYnRRK1YwYlBEVjl1R2gyTXliNFp5WXhIZ2ZLbFZNMnZYZ0VkQzBiZ3QzQ2pTdTR4RDdZbnEyZFI1V25HbXpGZXVsakdwWVNsK2RoazdjTzhjTGM5azNjbWxsanpkZ1M3YU41TWtqUkRDUnlGampaenFlTk5lbDY3Z1Fybk9jc29BdkZrQ2ZRZVpTRW5wZ0h3QXNNeEFxV1IvdDhVdHJ2MW5WZlo3eDEyS2l0MU5VaTM2VXJycGg5WW5YVVk0c0x2RVZCNUtQZ2JDN0Vwb1FERVlrTVV5T1BKQXJLeGthUERDeG1ONUEwZGtXbzBuVU0zbTBGRU10aEJEQmMrcHJ0TWN4UDd3eFVURXFDRktCWmozcmFkcnZOWEZNR3l6bllWZE5qb0NUamhPMlEybmxRbmJvbTFmYnp0dUt0eWJEblBPcGswRFZPTjNBTmFXVHZraUgyMzEyTUlFREQzRm8xSDdkOFRHSXhFMlZGQkNsUWpCZDFkOUROcDZFYS9nOExqL0pJZ3ZUOXJSYlh2TzZsOVByOHNaeXZ5K1N0QjB4bWFvNnBaQjdXcE5XVTYzNXk2RWxwVGZLNDF2ellWbFZlWVlFYVVpU0graFlOMjd3WDVrUWpTaWttODhBM2FsQzFFYjMyTFd4SHJRbnk4WmVXdmQzeFZzcVIvU2d4YUR3QXlJZjR0RWthMVdKdWZBR0lYcVV5VnozZXo1UnlLdER2RFpoVmhNSXFWK2xRSUpwZWdmSTc2SkI3VkZLbWYwL2xyUTdzUnhRUVN5Tk8yOGtRc0tiRUhpeTR1TXArdjlvQ0o5ckJDbU80UDRsRzhidzNEdnF1Z0oxUHZHbHgxT2NTQnlBWEEzT29MT2N5N2paNGFidXlya2p0ZEVDUjBaRllrUFpTY1p5RjVlQmgrTUQrSUZIQnlxSktZZmxENnhJdW5RYUVGKzFMS3hBUFRHZDRic3hGdDhMdGZlbDhKYlZEdEd3cnJsdnlVTE1xN1dyTkV1WlE4MUlEcnQ0bXNqZkx4TEZXYjBxeXZLTThra1JZYjlMWjBBUUpLd2pWRk5hN0ttM1E1V3lHMnpka2tnRVY5MWduNmlpRXJvZVpsaHJCZ0d4WVIwdWNrZWVnd25MUUxRdGQ5SHBhRFIzYUZCMEhmZWo3Yy9HaFp2dmxzbkcrUHJDR01pdm1xL0oxOUJNT2g0SXlnQkJ4MzRXNEZleUJhL1dGMWNBcjUySHk1aEE3aFQxd0F5VjRvbGVSUGpRcENjaGM2TGJFY21UQWordjR3Q2d4bGlaYkJVMkpvQnNwc0x0R2p1VFZaa2FuZlgrRFhSQ1Z2SHlOcmJZM0FrellOajNWbzhvSDBWM3l1RzA5RW5ibjcxeTVtNzdlK04xaFhla3ZUM2dqNzNhQ01zMWErTGNYdVd4d0xMSkZrK3FGOHpvdTV2WFJJQ1dwS0FISVpvUHBsMlBvMFJyMmEvYWhVQk5EeHk0NjdValR2bElnejdNdUlsOXZYNDJpdWFCS3FneVdVenBlN3FicHlFM2lvQkpSUHcvYWl5STBWbXJWM0d4enZDQVVXUWtaTGRqT05JUmZEK2NLbDBCdk90dVFjdFRhcnYwOUlzbDF2MU5RRzgvRWErbm9WRmx3OXBwOStYTUNoWmE5QUM3ejQ2SWJIR3d1NjZUdVM3eXptaFJvZTQvMVY4RFJ6M0VycjdZN2FqbnpEdUt1WVFoRll3aWNyZi9HNHBFY09TK3JjZUR4bDhaRzhkZkZwT0dvL1lhQjIxUTFmSDdoM0JtbHpjaXNOdUlxQUFVNXJwdldVdW9ZcGM5cGVMa1hMSUhUZjF0bjFiQy9ic2Z3WW50TnNOc2ovSW9odGVPMktrTHQyNDg3cWUrSmJCZWNRQ2JjSkIxVURGK1FpdE5NUlhyY3M1NEY2UFV5Mys3YllEc1Ewd2krVXJGaHkvS1kxSEdqV2I4bmt5RFZrN2pBRjRxQzVOcGJyVzdvMTdwWERkRkkwNGR3R0FBS2d1NldYdlVhUiswTElOWlVMLzhhWFZ4RjhzeEZOTGZIV2lVRjM2cVlWd1dabmpZanNPYkYxUTF6THB5Y3lQRFg5SDlnczBxSWc1K2dzVmNjdVhocGJLRExNbGFrSHVGMUZKV3Axd3N5djFnYmlnV0lvOHRwNmNMTkduK2dDTzlCWlVHUm1XUGEwaUwwbXhodDdScnRsTUhiU1gzSzJSUHdTSzRHZDFtclFEWEVjMTE2aUFoMjB3ZGFoN0lYRmhPZS9DOUdlLzYydDRVaTRVemJYTGIyckY5K1lEYkx0U2o0OGR5Rlkwck9WaW1IQ3NUTWk3ajhKaHN0ZkpEVndhTDlDU01ndjl4bmZXeGg5ZVdHditKT3I2SXF6TTArZTNEaU1QdkZzSHRQT0pYS3NIYzZ3RmU4QTNYMEsyK3FLYjhYL214YVlBQkloRkwreVJIbnpZV2xrQVI5MHVHVDNpMHZzTi85M1JoMGlmeDZ3T1VMNGNNci9PS0dEL3Z3TUdGUll0NFB6NEh0THkxTkNlbFhkb29hYVRvejdZWkZsdWl4VmdLemZjL2w4TFEyVmJ3RWFwQmd4eWMwVnRjSGE3Z2xpOUcyNTQ2R0FNUXd0R25qYk9DZ3ZVSlN3UWdWc3NvSnVoZjZFSEx6QjhNWmNBa0RKbGZsV2NnUHVPV2YzTFJzQ1BBTk03V0thRlJWczhzRXpBV3FCWWJxWWRjM0xONVBKaGpTOUJYbVpkR3h3RElOYXF4eDJBYWZOWXVNU2xrbllkMVpFa2lwL1cvU3VQM0NYSHFCd1A4bDhyZFJUUWFFTFZ5VVBIUjh3UWxXd3JueVQxaVltREUrT0ZkMW1ZVG53ZGlIbUMxL2xMQTU5MFBkUnhyUjFFbUpNZUhJMVJtZmVPOXpKYkd2WkpDc2R0emVOYmVHV3JBOW9FQ2VlalZuUEdyNWhUMER6WE5kVjh2YkhGaXNYWksxV3k3ZUxxUkxjWkliMlZNVEFnQkFvL2g1S29mMmlaUmVTelJWN0w3TU9Ta1g0ZVp5Y1JWY2llQUdnTWdNZWg4dUdIVjhhb2l5R25IZnlSTkJaUk1uNlhMdjRsUjNNMjVBV21zWEQ5YXVyc29mbFR3aUtLaFdTY0VwaHZUdVBSSlhJdUFvU1J0ZGZ0SmJvcitncmJOaEFoY2VseVpYVExZQm1idDlzWWZERW8yYnMxWkk4c00zQTZhZjZFQzB5UVQ0K3FhM0J3VDhIM0x5Q1dwMXpldEFRMjhxK3JFcFdLZG14VkVtM1h0QWErWUlyazQyREY4ZWZnNEtTSVFZTVlxWVlNdnl0N3V5SUgxWk1lL1hKWVk4SjhGbHdCQUdQMVNROTR5VUxWNE5acndLWFFBYUJsZkVlZWV6TjhzeTBBNmFrbS9rMzJmcDl5T01aT0dPbGxUOUNVR3krcWlPUDZZSnFTMi9SbkhneHljOWhEbXR3LzN1Tmk0dGh1dThsZTFLQ1ZDaU1mY3pDTGxXeHl2c01YVlpscWM0VEt0M3liTFdta1ZxaDErZXBzS0FTL3o2MU1YaVZwem9QRkZ2cWQzdGh2aENpNk82dExNd2ZRYlFvMHdjeWtNcGN2Z2pNaGNrNWMvWVV6QUNkdXdhWUp1NFVKMVhtKzdPVy9Yd01kLzhGb1grOFN5SWNkTjQ3bDJFeGdRbHp4dVBTOVFPOHJuc2lRT1ZlaFlRdFpvTjhxOXBvdTZqenVIREtJekk3cTRISHNhNkFQUUxoalBWRUx3NzZkQjQ4cFdNaVB1bzE0eGVvd0JhSjc2czljZlE3ajh6STJNZzZpRjJmRC9BY0RJdWcrU1k1ZFBTVXBxOFFLYVI3R3E2V3dmVzREUVhoTHN3cnlveFl4eVdkdWU4VFFKZUNsR0JRR051K0d1NFV4SDFwL21LK3FCK2c2VnZkbHdyZGR4bUt2amZVTXUySlBWR0FYMEJJd3dFNXdyTDRBOHdCelVxYU4xaktNRjFOemlEdjA4TGhZc0MreUtGanRDQnhIKzJvVDA3OWMrL3FDZVFWWEtscFZaU0IrZkU4cDFpbGo4TUlWbTEwV3NWQzRlY0ZBQVhoVWRCeTEyREdvY0RuZVB1ZC95bGZsRkxPcXFMSStRaFhzZkhjKzNRN0pOM0pXN3lLVmtCalpwWG5Za3hrQURnVWhaNm9MaS9qNnhNT0VKTWgxaHl2NXlWUHlnb1dOZE9uME4wMGI2K1gyV29Sb1lNT3A1dnVPQzl3Sm1BZTFDekxlQjlpZUk5YS84Y3hzSjhHZy8yVUtZQ1lHbE84RDY4MWpWeW42elhiSCt6MGVCSVhBMmFaWlJHcDE2ZEZEcmJsSjNzWis3ekc0bk45YzFubVBuUUZCL2FMNEE0bTV6Z3VUaDRiZTFPNHc1czMvMENoRHZQVkZmMGdpeUlxUThYQ3U4NmhnOW5DelVYMExZS2pvZXp6YStzVnFXTGVXZWtNWVY5ZDdTT2xRQ3FuL1dqRk9ER09TcXVrZVBzWTMxVW1pa2I4ZTdzbWZRdDE4QWx3OG5oMEh0eUExbWZmbmZIemxkYXFreGFhZVhxNm1yUURPME1zbHVkVHppVFhUdSthUCtVdlVIeWhqQUZrK2xvM3BtVXRWalVLaGN1WHdFQjgzQy9JckpMVDFPYTM2dGdaNmhtWFJFbzVxMy9NT2RzT2VOSlpKZXpCbXJRakFDS1FHVWxxUXRvM3pIVmtxOWpvMlZXUUZybmFWMk55VGRCVytzeHJKSXRzd2RsK3NCZEp2M1loaElhdkJ3a0lDUWpGd25mcnN5bmh0U1prbWJRQTVYaXBWb3V6bVpsS29IV3paU3BkNnkyL0oxcGs4M0EvVlVHcVBTM0N0UXFiT1RzcUhjRWkwc0tCK0pidEdCTXVPMkhpVko4a3JSMnRoUlZZQ1NkamhrbHRoK1BIRzVJODB1aHFUNmZRMXJvUjh3UjF2WkpUT0xsb094VjA0bFhnZTZGMWtVaHd5K2VIWllBOElpRFZCR3g1SDVsYTRJbW12VkFVNnU5RllRZVM4R0JUQk05Mlk1a1cwelRoRTBxNHdsb1NaM1lPTThyYkRJK0Q2dkg4VUFUSVJQd0lIdklTSGYwazB5N2FWVUtiSVJNbU9SOUEyY01mUCtqdk5UeVh2M1JPQ3hEeExJZ2hOdEpDb2pzaUExaW5ZSStXazB1b2thOHIwaXRYWW53QVJ5VmpINEhOVFNXWG8vZE9PWFhKOG9CbHhRY2J3UjFGTnZGbEI4VDgzbzlQOENlR3JyeEx1cHdad1VuS3l5dWJoWFc5Vldoa3NnMHZwUkUrbFdtekhSQ0x5SmUybjJwdTRpYno2a044eU9ITDQvUk9TWjJqZk9ETndWc3JZRk0zbkROYVZHamJVbGhFSVRFYzdBVXMwK3dYUksvWkxubE9COXZrLy9XcjVENEk3a2paQWErWkhHQVlEUS8zODdVZ0Y3SXlXUDN2QkY4eUVJVnB1WEN6Z3QyZmpyejNvVnc1VlVEZWFmMEptNm5DRE5FaElSSmk4MHllNzBtMmZJVTVwY215OU1Ia05tSXpLVjBUNkk5cEdUS3NlV3hTTytzWHJkLzBqcXMzTXd5aU8reUdhd3dhb0xaWEZxQXpRRTV6Z3NtZXdMYXdzRWhYNVZQMFlHT00rUlpjNFIrY3RQeUZxL2RGOTR5VnpKbFJRcldMTFpLTFhKMzVHUjZhN2RuQys1cWZJeitEM0lFMkUzN1hkcFJrV3VqNThNNkNsT2doazd6clhMaWpXTkQ1ZXhEc0l4TjlNVGR1UFN5NEljVm4zQ1g3R2wzNlZpNUhNSTZ0alVRVVkxT0lLNWhGSUZ0ZThGYmdSVDgvd2ZIZjhIVUxrUVRCbFc1UVNsc2NjR1I4Uy9hQmRRQ1VueTJEZDB5TWtzN1gvOCtKWWhscXdoa0NmOHQ5L213WDc5MUlUdHAvUWZ1ZTdIbUFEMmUwZGxKSnQ2SlR3aDVlclFtMEhpN1BCU2piWHJZWXVXZWtHR09EejMxMUZ0WUJYdEM2eFZ5OTVZaU1uRlFXWkVyKy9YY1FiRmZoWnRYSmZ3R1BneVBGVXM0NFcyVEtmSktJRmJVMGdYTDJzWTJIWWJhYU5jMU5RY3VYUE96dnZDb3h5cVNUU2hPazVabXNYWWVvbzRmd05qVWR1UndlVktGcE5tYWVPRE5PNjlzcXlXQ3lsUkYzTVhPdFVYNkh1c2Z1amt5ekRINys3Vy95V0MvMy9LeTRpanE2TDhsdEI1a28rMmcwaVVLSjZMWUVhVlZQZGpQUnREMFlnb2M3NUJwbm8vT3JzYlJyZFJaazA5K0lIQk5mRnZUVDFoTWMyNUU3T09zMlJPTnVscTc1NEJ3Z2Z6WWM5dHk0OE5ETWZJd0ZOSlAvTFN4enp2bzg4ZHBFTHhqZ01KQUpPa1JxRDcrT0FnMGN6QUJmM0l1RUh0YTFvVkMrTHdZNmZyR1pqdmJEaTB3UzlMSmI4eXovWkluNVF5cFRPTXJNMVh0NVdmVHhIckw1VEczdnJMZ0J2SktsUjdyaG9GMlp4dWc0U2V3ZzBtNWVBSTdKU1h6ZmE5aUZkYkNRaVU5OUxCQUE3QmRLUXg5NFRqWjZtcHlCcUhOMmNBWDdyODQ0MjR1Zlk1eEJ0KzMxQTNWc0VRWlAxZ1RUUjhDUTJPMitNUEVWSVRsSnpQNm9WUm9VdVArWkxtUUtjRG1UNVF6VkNXK1dqdzFHQnJaOUxmWHZ6RFJYdlJMY05lMXFmUzNuUDFDL3JWdUtXL2pBVGpGMlNuV1RLOEY0T2FlbXBGbnlBWnBCWDE3SlVjMmIzeE14Wmo5ZGI0QmorcFZYWlFCdEd5cisydHVCSEdVTzdmblFzR1RtRnBKT2ExTURKSFF5Qlp4aFNUd3kzQ1FwRGZmNmw4aWJkNmJWdDlXZ085TmFTOWNZSzIrQS83YWtXMmxybDNSMDY4ZVJYZ3FiWGd6VzFpMythdUZJN1ZUWVR0a2gxTlFiVW4xUzliOEM2M1k1WG4xS1dHUUJwRDJESnlmWEZVbXV1WDJaNHZIQXFuOGZMazcrVzBpNFFBMjlUbGxhOHlsMkY4N1piT1gwTjFmRWl1aDRQQUN3TjZUdUxUYnpuTW1YSWR1Z3pPWTU0RFcwSUcrQitYODhtRzhwdE9nVkFxMlkxVGF6QUNpK3hmU1FML05hK0R2M1hoQi9vdHRJMlVsYUVubEp3clkzVUV4ZWJNbGthak9TZ1VWZlZoeGl2SmNhamZIakdtZHh6Mm9URWM2SU0yaWx5MDZMUWtLT0R6SVdIQ0RVdTczUmw0RXBBaGRXQ3dCbktOb1Zkb0lQQnU2Mk54ZDd2TWVwekFuQjdUZmJBR3I0Rlh5ZHVDQlpXc0RqMzJhWlA1WmV6cHFpV2ZWV3Vybkh2dWxxM2hRTEFxM3lmanhFUkJkQzVoaHkyMWo2ZzNKMjBQencxTVE1ZTk4d3RZUlY5U1FZWEFyeGRKY0l2dVppb0kxaGFIemNTRWwrZGx1bHFacjNhQ3pzMTl0QjZJMnRIN1prQ0ZZNDNrVUwzL1hGZUMxK2k4RXlpdlRPRFlCeVV6RU9zbUNUVHdNRmhzSHpCcExqVkhSUlI3L1NPbkJ0bW5QL0hobkF6UGhRYXJhdHhBVjNxdmF1TEI4K0YyazhhTkRQclhodEFyaXBoQjdFbTBiRUxIeTZsQ2x0czExRnNzODhMNitHMWdYbnZtM2Zia0V6d2tSdjlmOVdFQVlUL0JBcHdCK0M2d3Joa1ZpNXdRdzZISFFJOFhQOXNiTGlGY01sN2QyUUlOT213dWNsSUY2c1hUWXRwUlJwUTIzN0dycWJrWTBWZit3WFRpWVZ0b3NNMkRidklOU1Jjejkzb3dVc2pnMURCNVhvYmNIRTBPbGZXVGtyZUg4VXAwcWxpL3E0V0ptUEpMLzNkS3krR2dLeGVMSDQ4MkxkRVdxdFAvZHY4NjBVNUYveFRKMWx0RU0vcC9YRWRHWGMrbDduWDByaTM0TlhiWEhORU83bmpwMWJiS2Y3K3RWNW4rYVBEUFU5VDEzaStqbkg3cWxSZlBGOTZsMTJzSnJwVGRkLzhoVG5Ici9TZk1zRGRtVXNMcjdxL3hwbWNUSzlBd01JeDZ1NzloYXd1MnptN1loK1RSbDZUU2hOSmdhaDlIQ0RkL0pNWE9zWU9MMWRKVTVnMS9LS3AxYk5uc0puck1rdEVYTXhxaVc0cVM4R250S1hpdXRJYWorUE4zS3diNVV1dzRpc2htRjFOZTVkbWE3QWl1YW9NMDhSLzZBL05qZ2txaEp4TlZqMVlNTTBRSzZMTDhvdUFFYWRNRWZQdEpoWWRkWlg5VnhnczVIM2RyQ2dlbDBuUXhDV0FNclpZWWNhR01tbEIyMHhBNGpRRlhBQkM3aWVRN3VhUTUya0VGUjBxVHJ3cW1ocERMQlNCOEZ3cGxtaEpOM2Z1dlROclhsRWU1MjVvVEhQQ0todVFlR2tVRzJEWW4zUGlOQTZnTWhuVHhIZy85TzJqRm90SzR3aTdGN0hUbTA2OXdqVnFJTTUrZUNyMW90dFlEcXArN1VQT05qSTU3eFR3Y3d3S0VocGY0SHM4NDdodDB0QkZEV3o2bE16d1NtU0xURHhIMkQ2UGdweVNLemJDOXdIUzJ0bUF1WXFJdWFrWktMb2VFZC9KN28weW45OTVxM0RzQ3lVY2FLSUlBUjdveDJqdUdNTE1MZkQwT1FQSnp3NmMraHVWekxPWWJsQ0xlVlIxRDdQWktvbGtVVmFFdjN1Um9WeHdHaE5SMnEzcFhSei9RK2tId1hLTFFYbXBGczZpOU9zYS9veStmdkhQbk1IL3BmYzZveFExUDVoNHBCSGhHQlY2U0tWaUE5VlJGcmp0VTRXZ2UyZXYvVng2cDBUTElZcE5BR2NTcU9NbDdITCszL0g0dXI1NFYzWWVZb3RnRkh2ZWZ6ZEFBN2F4dXMwaFJPWkVJMXlYMkN2ZDRvWHU1bzRYaW54Yk9QNTBJR3JHdG1xZGxQaUhUTVdqTDlJK0JuOVdrTUtaWUUyQmlOSDFqQzNPNEFFTGR5QVc2YTA0WXRqNll2elc5TGhHNGplcGNRWnFScytDOHFhK05BK3hUUWxxWStyTHNXQnFua2paV3JQMjhUYzJ1VEN1VFBaRytwazZ5UjJxRlVSMExpY1JTclI1LzN1dGVXR3JPcC90ME9zYXU0VTVJYzAvcGxWY05seFY5WXpXZHJNRjJ0TUVGK1dBeXU0Z0xrRGZQeUUwUVpiUnV4V2V2QlNvTHRWQ29GRDNqczBVWFN4L2c5NzdpQTNXM3doVUwzQ1dtSTljcFZCOGVqWllyVkhRaWdiUnFsTDFMVm5LZTA2YVJ0VnphZDNFU1dMRTNCc3F0T3V1WnBOM1JsRUVZTlNzYnJsSGNoSjNKUE9EcG45Rk9Hb2V2M3NETXVGbzRxUkJIcjhPVW5UVXAxL3M1T0RlYlg3V1BaSW1qU2NKamVnVllnV2NyTnZDblFIN2lLUlRHR21lMVhudjd4Nk13aUJnZE9TV0Rrdld3Ti9wQkNxMDdVR2lwSWxQNkp4ZU9Pc2JLbzJ6cUtOVUd4MElWN2F6VVltYWRWbXloOHJZeDc3ZjN5bGtRY2JiTXlveld2Ni9zRTY4ejYvUU5XWnVzbGlGYmRIbXNGaDFXVGhKeGlSRjA2d1lDMHQ0OUpMcnV2akJoRFduWHJrNGVDTnRIMmwvY1BNMm82SXkyWU9FNzRzRkhqVEZtRDVYRFFzNTJZWkNVSFdJLzVWZHZXWWZzNzE4ZHpDUFhRZFRVMzgwUGdJcXpmSGJ2Q3hZNHp2OEVDc2djd3NqMy9zZHFUbSthNUNoUkZHT0tlcFVZdlhBNjZkQTJFS2dYTldVZXpuYmtNYzFEdWVwZDdQeHBhSGg4cHcxNkxGNXNhcmVZamFHclI2YnJ6UHdwd3BXancrOThkd3FsV09BbDRZV0prZHJkSGIzeCtabEh5UjErclF6N2NMaXZCOCtmRmkrU2dDU1hvZlRsSnl0dGJvOEVrbUdvai9Rb2dkclkwM3NMK2hEWWN3a0dVKy9CditjRUNQWjFucmpVR2I2d2dxZlVSaXF3Q3hyem4vYUY0cXB1U3dqbXI2ai9TaEVDaDc4V0laWksrVnlBTDRKa1FkM3FWWnQ3dmZGRCtWdG9YMGFxdGxwRVhJb3VQL2hta3VyZkhZZ1U4OW5zM2dueXdnZjdUTDJtUkl3OXJuQkpZMU5aRmlpU1VhOW1hOXd0VEQyV09Zck55Q0NMR1IzV3RTVklSY1NmK244QjBRMzA2bnBRdk5nOVVjSWs5WXJUMEdGVVFJV1pualNwcFZreEw4N09aMTFseU9pa3l6RFdlcDREcnlWTnlyZDE4MUx0OHJ2UU1tamRlVGdvQkgramdTWWFrcWdPVDBCcmhTNE1JMUMzQVBYVnpsazhaTUVnRGg3WEVFOEg4U2Q0RGhBTlcvUFFpVDB3ODcvMzMxdlA3R0ZwZVljZWhxMmYyNEdMc2hxYkFTekVMVjQ0UVNNOEJNcVNmWWsyV2FWY2VKM1lRSllNc1FNcEt6Yks2Q2ZQcGZveWpVdmtsNG05SWZxanZBOGtmOTJWSW5DTTIwMjFvcXNLVHNDa0xmcnlBd2hERnRIK3hyUE1ibjBneHdVUGRKYVNhZEFSOWFzbHlsOEZ6WGxwbmFhRysyZFE4SXlpcWM2WGFoUncxMHJra3diUEowcFFXTk5LaHM0amFqNjN5QXB1cDkxcjR6K3pTSHNwTFBMektwdTNkUDZDd2VEWUVyRjdpUDRObTNZT1RuNFBhcU5aVEoyUzVnNk1zelhGTEZXQTVxSUs0Z2dQenExUHVQdGl0dVU0d3BHMVRoOFFpVEFPeDhXNmZVUEFERlN3V3ZwSTBJSFhSYnVtSldsRWFJd1BPV1E2T1huNHpVZThzeFMvL0VpcExxbDlMVEZRc3Jyak9wWXQ3ZXZ0ditqd01XVnNHQVZ5aEFKOUlmbFBOUU9OK1I4STZWa25FcFk1ZFh6NzRnTW00eVhiRHNwZlpNM1NwNUU0WHV4RzBBREJGZFVxdVNBaS94eG9lSXoybDJmanJpOVRST05TYWVXN3Q2R0RsYzBwRDl0NkJhaG5EMmtINmdLWW8yVzlnMVN1SjRXNXRVNWtnNXF0N055ZEpzVk56WVNhcmdSMHQ2NG5sbW9nVDRab2duN2h6MkEvSHFMUUp0cnlDT0FEeGplOXFQaWxaSWErcDJGNHplMnFpanpHTFFCbWFvNzVIV0JDZmowQzV4ZXlISHlacUdmcjlXc0hXN01wSDVMWllSNmlia1VOSGxHejF3NVVlQndadU00bHp2YTlWTElaNTNsek1XWWdMbVRocmppWXZOcVUrTStWNDFjMVFYczVjcmp0NitrbzZRMCtudlFyWDRhS1R6UVF5Y0hkMEdRWS9ieGRCZkVGZ3Y3UFB3OUVGcFY2QUppeWxTTkRsNWpLWithY1JhWDhCUElJbG1LSVVoMlBTUUdESjE5NFgxdWVNWmk0bmJiL0dKY0tEYWlnNisvNHlNUFl4MWQ5K0dHMk5LY0VwNTF1WEkxSTA3S25LZlorT05IdzIyMW03OWdaaGl1ZVBYSkxvT3A3RkN5UTdqK1cwTjBMV05TbmRhUlB6anUwVFdiUjczY2d1WGQvZ205cmdrOGVyU0F5VHVsMEQvYk0venhlZmFjWTBYM2g3eCtsZ0ZpVXNzWkd6enN1YkJ3K0J1eXlMKzQyVDZRbkV2U0ExeDhDUDhmNUoxemRtUjREcWgyTisvclc3THVtL0pvRmtpK0w1SER6eXBsY1g3aGN3QXFBS2orTlNka2NpdWhsaWw4WUkwWHNoNlRmb3JpTVdZQnJQMDZhZzhKTzlvanBxekJpbk1oUGdhbHFyV1pneXNObWNyeVJpOE1zRHJIK2tKNTJwWS9pcEFoeXgrUlI2SWc5RXJhVnVuc2t2ckhKMzNHYklqT0dRb1ExYkxnMUF1SlFEUmU0OTBRbGlLejZjZ0o3TkkreWxyREdOcm1CWFhzd2tHbFErRmROOEcybnJwNElDK3FnWSttZGJjOGI3b29ndDNWbVFJQzJpUTZhV0k3ODB1K1RpbHdpaldsRG1MbEZ3Qk5jbDdlTlptQjFQOW1UOEwxbDRTUFF0YVlSMWJ1MHFUMTEzVmsvSFYySCszaTVuRUx1OEVlUUFtbHBUcWlYZDlzU3pNUU5hVzZyOEFlNGNBamVuckpjc3Q0TUxXZXpLdVBqUmoxODg5WUQzTlp1Y2NMQUdlQ3ZGRHlJMDZteUUzeUNRUUMrVHpyNGhucnlZczNRVHRmOVA5VkoxRHhlVHBJbnh5MEsvdDVQeVZ0UDM4M2tZclMzRTJadXdIRlVMYzkyUXRTSHlBZzNNTTF2c1Q4V3NaTTJYRkpNcHEyQ2ZrUHhKWmZJcEdIVXVkTG43Yld0Tlh4VlNPOVBoWFZ0SjRJRU5NeEZoTEpvaU80THZ5a3c0RlZ3WmJsY2pDK0lxeGNZcGV5NlRvMTFEQVBDYUwxVzBjQ0xNYVlQTnphbFMzT2VJcGxPNHJnOW1QNHhSMFk0UTNqcjNseUJOUkl2SGcvajcvOUErajZsV2tkMFV3TG1JWE0weUVjMXZPVjN4VGRVWXQwSDVrNzMvcFlNNmszK0liSFRva3B0MWpYc3ZXSVVJN1cyUVZlMm9KS1duL2JYQW9keFFTVnUvZUl5bzVRZFVuZGJ1Q2hjeE5waHJuaVcxSXk5WGY3aTYzdFVPSXRYUllGU1lITThSdHpTdVNUdG1PNjVpWXlnK2dxNHVxN0VsYzBGeHQrckdqa1NVakVrRWlXVEpXZzMvVmtPVjU4NWZZK24zOVd1d3JtS3MzRDhIVFFGK2tZenFlVWZCV2ZjbFZXdEhxMjZZdEpLdnBVdDBreDcyTnNPVUNHSThBTnU5Q1BPZmR0SW1HYks0UEJLNkp4bFpwdXBKMlY1Z1FyUTBtVXRseTVWN0srOVlZT1YrU04zeThIWUFpS3pTdWNJZ0lQOHB3M2luTlU3cndVVHBUdzZMMlN2d2U0VXJFRS9YUWtSQ1NnTEw2bmRSSVpxLzJ6aGREajZZcDFTbkVYR2tBSEMwMUREdnE2ZVhPV2VMK2dCZjBrdzhLVjI1eGhiK0FZT0Y2Ky90Rlc1aHRhdE94aEI2UGZoNVNKMkU3UnZkT2xWT1ZlaHk2dktsK3JrZGZTVmx0WngrZnhMTkVQRUtGdFpPTjliME45ZnlBZDVwbmlmaWc0TDJjWkpMMTQ0UVYxZmw3Tlo2ZnVTN0ZHTHNvLzN1eDV6UUw4NDE1OWFJT2t3UUJwRm80bjJYK0ZxRXQrN2YzekxZSThSdXROWTNYSDJuRkNENnR4TXBIeVFEWGdMVmhKdkRKbFM3Wk1mUzFpenZ5NUQ1TW5UMzlvbWlDNUYxc016VEFhOVJTVkRnbzJaZGhzZkZ1cmNPekRqcE5mSk9nUEZvLzg1OGZHWGZMMjR4bXh1ZENMSy9UQzg3TDJWTlRUT0p1QlBZcHNMM2xPL0JkWXBWYkszb3pDZGxvTVVobEphNVdWcGJSTFRvQ29mNGUwTUMveng4QjB6Z0NQWWNaWHZ2ZFQ3V0hKMUxveHZWUGwzWEJJNDBybjR3bTR1Y2pBUGJDUmdPdWZ5Nkt0YU9nTmhtS21CK2V3QU1ETi9yTmdEd25EcmJRcnY1NFpaL1M0WHlMdnJSUDhQN1pQbzJDY1liVzVIdG81elRxbEZQSXR1K1hxVFBiTmhqcXF6VlZXL2FjTWtiTmFYeXBJRnl6Yy9WaGRGTnI4L0MvNzZsRFBHMVlsZ295ZUZCUkpxQVlXNDIwVmpaRlZVV2gzbDAvUUFvT29xLzJ6YitiNVNMckliYUFwOXVVV09XTkc4QzZZSnBqRFlDelZHZXZUem14UkNVb3kyOExjc0crN2RoWC9vSnplc216Vzg4bzJRTlJCSlhtZmxuUkdjYmcrSElmMTBlSzg0ZS9vSktVMkNLR01NTmlHSVFTM3REdVRKT2tRRTB6QlFTejM3RXZkcmhGWnFJNTVQc0VJdHkvRW5Id1RJR2Y1WU41Qm05ZEViUXg2KzIrUHd4a2cxa3pHQ1hUQVZMWDhuU0JUdUJsNEZsUHN0ODZzcDRtd0dPYzU4UGltMkg0R083VFNaaC92bDNWOTVNeHFnT1RnYTRRSTJNQ2cwelZLSHVaM0lIaWNDU2hvbXVqRE9vYlZDeDFVS053dGZhYnB3NGdhY1NYckROTGpzakNOa1ljL0VST2trTnJ3YnVDYW4wZEQzNUdNWHVIUUZsMCs0SDBONC9QanNhMzlyTkNOcHAzU29kSHhMa1ZoZ3VyYnFqVStEVThSTGxkcFRaRmJDQ0dla0RUUytrUnpReDhjZEQ1Qllzcm82K01pV3pvQkRxTjFGZDV1WnZxWXRlQ3VYS1RsNTNTdVV3UmlscmIzNkNtd3pYOWhvUHN6RGRVUVRxOEpNVEo5QlRmQzZ2U1VZWmx3QXlpUEhZanpHVmMwK0RCMTVaK3E2Vk9nMk5UV0VRUGkvN0JLWEtFNy9GMU1yYlE5cmxRdjQrZWkxcEt0NjZ0Q05oYVFUT0srZzVLajdsSGFjRVdYMmNZMkNLWSs0MmQycGZxNThaQUdHL3UvNW1EVE5xcDNldzdpY2FHQit2dHFyUG1CR0ZiMnF5Z09tbElMdDhoMGZGVlFhWFRhZW9TMUhoZ3Zuc2NCWHpaZ2Z1VWpQbkRyS1oyV1AyRS83TDY5bHVCYkxEaWVPcEJRanZOMkVUVWtnYm9oeUttUVA5dkVwalRUZXJXM2g5SWFOMklxd0J6MDFNbWtEVFowNkc0UWVPbXNwU2J6c0wraXVPTWluT1AzTWRMam9lV0ZiUXp4NVM2YzFWemZVaGdYNU9QTlN4ZkkrUS9ld1FnaW5lYUdBVG90QVZaczlwSkxGRnI5RHNMRHFYdUlWZWg4cXgrQnd1T1hQUU9oeDlHSVA5OHJSSVJqV3pOdzNSRXRpRURQMEV0Sy9ZMVRvSlp5bk5UdFdmZDZGT3l5ekJsY3FCNWNHSnhtbVdrV0hRbWhpWENTVmwyTnVMVVdlVEtWeDRxaUxhV0VDU0NxOHQ1ZCtEWWc3anhrUUo5VDJ3NWE2eHR2bGlHMUszbmhRVUhaVkJGNC9HbHMvUjdXa3dXdm9QYjFtdU5GM1cwY3lrcUs1a2J5YTcyQ1ZaeEJERDVjeTYyazNmZ3RHZXpvS3hnazU5N1ZobjEvclJ1Q2pNOVNpK2tSVkNxNnExTEptWXlJSjNpRGxuR2VSWHp4MHdZQlJibnF3TnRBTG5HSUt3a2NiTlgrczd3MjIrQVdGeVdndkJpMml2VTNndXJxS3pHVVhrZ3E5enlnN0MvMGtJQ3UxK2NadnAzMUFlcnlzUVRsSzhEd0VvL0g1K0x3bnN3MUxoVlJTT0dnZDRYOTRvenNQbXVOQ0xwNjhDaWtKdm5hajQ5bHRMcitNb1JLVjRnV0RPdDRQd0phMktnZXdnY3JEVEJPV1ZUVDhmTVRERlpDdXY0eXRLdCtMdU12cUFLLzBjS1dBb25hNjg0R04rdmd2WEluYm1vbnQxQWw3b1dnNmU0UFVqcEJwbktnWFRPNWQ0TFJ5c0xLWkp0cTQ5VDdHb2hFa0k0ZVBjTnNXcG5iSjc2YjFIZnFTNW1ESHVKTGJXd3dqN2oycEdXeGlmdUoyVEJnb3h3Ulh0ZERzWDFudUdlbk9DZFlBenhuZk9uRlRVaE9SNVVSalFyMDlibTRGbDhxaTd0ZkZEQTVnbkppVzBmME5VL1dtc2xnUXM1eTB0Ym10VUxHaUFQWHFUVUJPN3QwMHhNYXFmV1JUWEJ0UWc3NjA1Y2h1V211U2U3WEpONzc2OTg0dTMrcUxCNEI0YjRVYzcva2pNRWsrVWhsUnlFQTRWcmxuVkg5Zk9oeXVlMVlWdExiWC96NFpETkhyR3VpdVAvTU14Vkh4aE5HUUpZN2YxWjRETktqNitlNE1GVC9zQWtxcGZzQnRWd0ZsOElLVDJJUWF5OTNVakRjaFhWNG1tMytIRkMwbTUyUzFraVhJWkFGRUlQOE1MTUF5VXJxYlNxTWRvZU5VZ212YTFLU0Y2djJtV0p0YVhnQTJkcm03azhhcE1yL1ZMUkNSRUF6RGJIUjVRQ1JTZHdLcFp6L3hsNVRINHNZSXQyOTZ5L3ZwYUovTjU3RUw0LzRwRmY0YWtzbTFvRDgvL2pneUV3R3lYUDNmNkNzT3h5WTB6MXhrNXpVdXZzb2UvQndqV2dnZG9WR0ErYmNVSnZxRkZMZ2xIclQvUDFTc0lETkN1ZWQ2Y0R1Z0xyRFFzVXVWcmlVWExMcnlGc21YMWFCeE9VdndDd3UrOFNVWlpzQk1GNENnNk9RM0M4ZGdVR3RXbURpMURldjFXRDhNL3pmeFJyd2MycmY5MzhZeEhsRS9FdnBPZkQ5QUgyRjZQNVREamNsV2lOTjFCb2tyMG1MSE40aHdvcVkzbG5Kek9hNGxDcVArNnVudWQ4VUIzbk5hOW52RTZwYjZReWdMU3RMZ2dhRk1JWEkwcmdGdFpkbzdRZnQvTVF0Rm9ud2QyKy91ZEFwaThuQ0pubDdsMEVYTHkwWlBUOGl2Mm4yN1hnc1JJQTE4WTFSUFFKU2FtN2hadnByemNudHdkekRsNDB2RDNDazBQeDY1QlFUYTZUUElOaUljVGMyenpwTGVCWStXWTJmYTZmb3BIVGw4YUF5UUM1VWhEMWptTk04TW85R1JQVzZSM3hibDJiZWRiWjZIUnVhc3VwU0tnRVM1NGdvdmY3Y0FrSlBqbVA2YWxpKzhDS0hJY1BoWCt3QkU3YXRpejdRSDFxRUxrU2VueFpoR0JpUTZHWXE1WllVbU0ra2kyOENGaG4wV2xPa2swdWRkdnFiZlZDZWowYk44T1duWnJiYS90bndhZEJKMVhFM0FVM3FVRTZXSzVTQ0doRDFDSUVMckdLclRjYU5sWUI0NjFjZUE1Wk84Rzl3dFlIOU5ub0pDejFlckdWWVNVYWJ2MUh5RFBxd2NhZ1RHMmRneStOV1VtY0czYllkNFVWSUlRQlNhc2pudncyblNteUhxUGY0TEdwUjRpQ0tZRnVIdEk5Yk1aUW82VDFReW5yakRHZHRlNFhabHNmSmNDNThKelJtUnplYm4wQjVrZmV1WVErQmY1dHdDc1pNNjhVNzJWOG1GMzJ4WG1uSi8zTzRHcGZmckZWWlJZSUhtb1M3Q0U5VXFoR09lUXByQ3B6WHVXNmZ1OW83aFlzblpRb0JsUFJVbVp5NzlsKzN5Qi9ZT1ZmZkJ1MnVsbTM4cjVmeGo0NW96UGhXZVJneGZJZW05VUcycEVnUU5BSS85RWNxdDNxc0R6TytvcTR6MGxENkF2UVlBN1JZN1Q5V2UrQXhFZllrQnk2MnkxTW1iMzdlMFlWNTRlRk1lM3hLQm9UOG5SQjhXdHJQbDZpTVhxUE5EZkkrTUt1V01CTXNGdG5JSnQ5clBoRWtiUEowYXBBQUpkb3h0akh5NnF4c1pSSC8vYnJCTGlYYkpDbTJTelVZeitGNERta1NNcE1icEdpbTVLd1VRbE83QzROeE9GS3ZQOXJqK1FSRFpPNGl1T1A3ZFBNY1M3cndaY2tEWWlJTHN0aHRuRE1pRkErZ1dHRnBJM0wwWmpOZjFEVWd1OGZlQWFZMTVCcmo4NE10Wmk1d2RJalNsNHZPcDRXZmgzVXZSVm8xNXk5UWsrQkRhRW5qWDQ4SlFwMTZaRVcvR2RpZGtQMXMxbzFaWmp4OHZWNElSNVZocnhMU3dQOEs4a1IzNHNYcUtqZzR4NENxajUrbW9kYnJQMCtrNlpNRDVUMDArZVV1Q2luSFF1Yjd6TW9FWmtIUUxQd2R6blJWUVBuZ1ZoaE5KSnFScVJSRmhLWkNzclJqWVRsMGJJZm83U0JjOHJDVGhSM3NqWnNDQzJPNC9abTJKcXlCWjRoV21ucDJrSTVvdllYYXY5ekZVbWxOMnBwbHVHR3RNWE14NDFhMkhKcThxeVZtdDZxZm8zcVlTcG0wN0xSNk5GNXF4bSt1VHZmUzNZVndnb2M3eXdVQ3l6SW1zNTlaYlpNUE9idXUrNGpKcldQY2dXNHoyeVdlMlB5UHByZkJhR0lPaVlyUWRyZDBUT2piRCttOHM5TWJnNm9NdjEwTEs1SGFUTFRMbDVUR3BpekpNa3FnWm82VUJxRlhDSGJ0Q29mVTM1VkIrcGZqeEErNzhIRURYeHFPTnBWUGlOOHZBTmUxTldtY2JwNUpVZkt3VkpyeG9DTjlxS2toWjFTb0VkdTBPeHRjQUtPUUVpU0dmRFFlNnFQeFNYZ1JDVTZuU3hzL29hLzF4SHI4Sml5ZnlkUzRJTTlKa0tOODM1dk1QZGZyaUtIRDRoNHBuanVBMDFsQk11Mms0eVpxd1QvemVKTnlndWpwMlpMRjN4TVUvaVh5UjJmVzg3K3ArNi9wZjRtRU8rMVhuZlhDR2hyeUFmUTNYeEJEd2NoQTJZQ0lNVDRQM0ZoaGZJdW54RFJKUDl6ZDR1ZVpDbjh5YzdqVjdONi9nVUZwRjRsTHZkQXJtS3ZIK2RyL09DRE8vbEdmTGVtQ1dnTmxMOStieGxXMVBNTGJKMTBEclpJM21ocW4wZkFyekZqNmNTei92aDI5ZWh5WDFNczEzRk5OcENzODVlODNHaHArTWRpdmF4UUtQMHpmeGt6SWNmaUJ5azJSUXhSRGw1VGFWcUhRQXVRaTZ6MmFDbkczV25YN1JIWnRvc2FiRXhYaWtJd01qY0dHWGlORXFFRjFwWGxJZFRhQXgzdFlkMjArR0Q3U2JoQUEvQkpOUTlGdXFCdW1nOEo2Y1psRzBLUGtBMzlEaDNxcjVESHdGaHlkbVg5cEUzVWlTWERnN3hoZWFXZXpyQkYwOWFzOWREbGQvdDdEZkVFSWtsVjVpVytyWFJ0QXNCSmJySFpsUDVuSTdFd1B2aG1QT1RYRW5uWElwb1ViZEVoYTR4dmJRMWZWenQrOFZkRDd5SWptVmI3VmpOL2dtdEdTeUF2ejcyeXZHSDRyT1RobHBldjZkbzZjQVRMejNYVWRLWGVsRjg2ZW5GcEhMZUlmZ1FqdUxuSlE3ZGFaeHZiZFArRTkwUmIrRTI2aENyUE11MlFHOTZuT21NMEtzdXBWZ3NFZFZnMlFoYkZxZ1R1TUp3TGxCd3JBcG5VYmVLNmR1K3ZNZzVpbkNGNHpWa0dWTml3QjJKbXdHdnJQWThZTVU1U3Q5alVnR0hwUkplZmMxUFRYQjh1c3dtOU53bC9pTG1JVFJ4VFpFd2ppZnphYnFSNkR2Unk3eVZSU2tkbTB2OUxrUFpKelpSV0hEcVU4eXBqMU1pM1dybVVpeG42ejREYVFLMHJVMkw4M1NLYi83aXE1aG0rZ0Y3WXZTQjhaN3dCbXZ3VEEwK1pVYzZsckJIUE5jSkorNE5renRvcmtvVUg1OHB1UTJSUTgvNldYS2VnRUltdHZzS3ZVYkdWTFJjeDVmVTNqUXJoUUs3N0s1R0F6Z056MUFHeHI3czRyWldscjlWNkJYbkw1MU52MTFaeEg1S2RIZlgyU1RpWXFaWm1FK09SYzkyTld2TVVWVWovVU9KY1h6b0ZQSXRCdnAyZGxMUDd4VHBkMnRHWm1iSUtPTEV3bU1nRjFTZmZBV2Zacnk3a2xmbjFqMTRDcGtRRjhTQ2x5ZForV2NsaE9wN2R6K0FRbmkwNWVvVU90ZmJOVGZxYUtqekU1Q2V5TnN1eWFkbGc1bDZHcHQzWDVpNUpDQjZWbjhWb3JOaCtoQU1KS1dsUE1YYmQxVDVnWFE5bXFha1VlaUQrbGExUUxRaHlXV0paMVhUb2ZNTnRjRDQ0UHYxaFZkZEljaktCb044ZThleGRBc3A3ZE9kUlQ4NU40dlVubENmY0cyaml4TTR3TUU0dS9keHFaRWlyWWxKNFkyWlcyQ3pSV2VjazMzWDZPNDQ2eW4yTnhwVzNRbnc5NG95QTZ0TGhuWWk3OHNEVFpPRDJTanVxVnRpY05LVnRKWGQ5b0lmRkJBcEhWUE5Kd2swZ3Q4aXFrTGlNcytIcE9TdzlsWmVNZzQ2YkZrdWZRbFB1R3hGejNFejVWTkZsN3pJWkZ3ckZtd2h0NkxaQUl1QkZqaTc3dDRXbFNrQ0xDSDRzN3Q0RkZrb3d1cTk5SXVzSWM4TkpSUy9oRGx5ZFJ2czM3NjNBR0VXNEFKZDFwZzR6S2xDdnJ6RU13TTJoUW5wUzlvVGc5VllldTVFUHQ3QTVhVk1EK3dvTERYR0hFVWZTN2hoZ3JXMDV1YTZlRFZBeEJva1VOWDhQR0RCby9UVVBwWG9nM2FiNjhNS0MwQUhLd01DOEVsNm1ENW5RT2F1ODBpbjFHMVhnNWpqVmhFcWRDeHM4T2wwSnEwYkZoNE5IZ1RiWTBzc3ZpZTJHMnFQLzhvNTlJWGR1QlQxMVROYlhpdE0wRkZNN1dUTzFpUTRUa1VaMml3M0FrV0lieW1BZFhQUm5CT1pwci9heVN6U0JlN2lVa2dpNU5pODRlS0EyaHp4WXRYUVRUZFU4WWpGZnRiRmdCaXNVcEJuOEFHRThqM0hxM2t0V2hJYktzeFNHaEZsQ1g4ZlA1a3lBd0ljd3lzQWhGbytwSU92d05TYjhXaVNTeWRzWGdaVEUvZ215VVg0Vzg2eXU3N0hFcXJHWmMxYUdveDFGVndiNXlybEgwSG5GM0RLVkJMS09BdklYR3pGWnQ5VTNYMWR6S1VzYUU0UjlrUjR3eGdoeGNiT0c5NDVxalNKVXZSNXVtc1VHTmVCK3JUNFc4V2laNGUxeEl5MzVma0VBRWZtQnNla3NEdTBENG1yaVJ0WUVpVmgrczVveDB2aW1nSm5WQ0hlZ1ZUdEcrMWJBUE5tbnd0Q2pPVU9tMzg4MmM1M204dU5Ma29RWXVvY3dNanJLRkx6amp3bnEzeVpZdjlvMFlTTzdWTU10Slh2OVFDOFFUc3N1VHUvMm1MbWVUMzYvVXJmSVMyVURIRnBQN0dwVUhtZHBWZ2N6QjIzUld1MTZjS0ZJUG1DMyt2K3BsVjAySmJvZmRENStOc3dvZW1OTTNzU3E3c1pOZlVSQWlJZzRvb3lLajYrSHVmd0tVZzRXUXF3MG1vL2lDd09udWFKM0RyZUZtdnVPalBqZnVUY0dyRjZKNDZ3M1VpWGVlVFhMV1BPYTJYaloxTCtPdzNXMXBhOXdHUGovZE52WWJtaG5kbkJ5ZXhXS2lRbDZuRFMvQUkyaFpmOURMSnhIRU5wMmEwZmVZejJRVkFlS1NDK1gzd3VRa0UxMUh0OXhoWGpNMUI5aERjRHd2SUNGT1pJMCs0SGppTUhRUXoySm9GRVhCR1NvRzhqelZyQlRkdGdQaVkybTRjd3RkY3p5VW14d09QM29saHFEdzRwSjFKdmRVMEdCM0JRWnVrU0VBWHAyZlQ0djdPbUt0OUFHZ0V0SFFVT1VWSHlpT1JEZ0pvRTd0KytLd2VodHoxNXE1SWxqdkdtbkVDVzlkampXMEpxbjFLVFhHc0FQMFN2eFg0ekthTVRtY1dPYmR6T0JtTUY5VGFNcGJUOUdMV2l3SHNJU2c0eEVXUlFtUXlKWXlGTGZveEFUSFRUQUNvRVgyRGRGeHI0NGZDc2JtRG1idTI4YWhkd1BZcHVUWkdBRGoyd25iYTI5QUI0aXRibCtHNTdwdWIxc1F6cW5ucVJDK2NRb1lmOGZwY3NONDdyeENWYmhEV0dGd2FmS1RydkVqRGF4RUNWYXVHenY0SWlzT3lqR3d6N3ErNTBtbmJLMHhXY1Y2UHE0TjNaSGF1Z0NYTmpUcDZBSjI2WmdjaHdrL2R6SWdLbkZIb1B1QStQemhIT2FwQ3JzV2dKL2pSOUpYVS9NeWczcndwNG15bHpjOTJqaFRnWVM0RmZHVmFXcDQ4VHdwZVhFNzgzbEZ3RHRXdVJ6YTMrOC9TeFVZWHNGRGRTb2FwTmp2M1J1Sk42WnJ5RFF5d3ltbDR0anc4UXZPVStVK000cHY4MWRhOTFESHZLZDIxa1c2UmZCOEF5SmxsdHlqWG0xTXhDRUsxWjJwMzAyVVN4aUkwQUg1NGp5OUFFSkM0aXMzcHJWZ25vMzZtK3E1dUpFRjhub0o0cTBFdVM5MGZ5L0p6aWp6THk0U1RsT0RpYjd2UnRXSkRTMUUzNU5BRFpuUkR2RmdjZWdaY2lCTG53M1pmMWZyN3AyUC9IWnpyM1o1VHJWOXNHTHU5VmRPd1prdzc2anlOeGwzZVpQSk9neittN0M2aTNaQ3ViVU84N1JhN2R1Z2w4N1R0TE5LZFdnQm9IY1BSRjFqOGRjU2ltbm85dVFsd1ZDNS9vN2VhbzVzZnhibEtUMjdOSUxUS1UxeDVQM1dLeFUwRjJ3WlI1YW95UU5oRUk0T1NMTGQ0U0RxeXoxeWtYZng1bXYxMSsyVmF2Mk0xenZXTW1rdVdTU21mU2hPNXppbjVTOVMxRmN0eDdOMEZoSkdiczdVa1FKaURKa1dMNWxmcGFzQ05aMGtiSjRGY0RxT1JmQkcyYWR5THdyVnp3L0VneFFIT1hxTFBSSnBTMnorSkk3OS9ZVzBOZHRybmFvSDFFNjd5MnZhZGJsY2tjUmsrYTFCSU4xeG5qeUNUNEs5VC9xUUU3U1VvRFFSNnhqT0hFMWpVQUtFK2Y0SGlzSEwyTiswSUJGYlNsYWszKzlBQ21NY2JneDdsaS9ENk50UDh0K1Z5QmNWMkh5U0xTN01CT3piS3BwZjRqOVY0QlRFM1FBUmhSeEVCVkMyTy9SWGs4ZWttUzBkUHRTS3dtc0ZLdjhMVWJLaUx6cDRtU0YzWURFNHNtQUsxK0U4c2hrS2tqanJhTU1FaXJLUXFERVF3V2JVMDJGSW5TTEI0eW02M01VUW03Z1d0bFIzeHYxOTBkeTMvYW41MXVwZGp0eXJkWXppclhjK1NadG1Nbmhaa21PQnFwQ1lSbmZzcSsvVlpWU3I5ZTVQQitqZ3lkUzU5NTdEbXQyWDZLaG8zMklLa0tPb0o3UTVrWS9ZTHVyYms1LzNNc0Y2Wm1lNGhLRit6YVNHeE1nUkJoNFFEZEFVMlg5V1Z4eUVORXVyK2RWcWErdTFxdGQ0UFFXdVk1MGhleXRNbHZBUzJHOUpQdGo5cFBMQTZHSllscTMyOG8wMWtlaFJXWU1RbVdPV0svcGpoZmJRaVdrMno3d1RsazR4bjNPVjFCZm0xbE81c1VSZFlyaThzNWNOOGVnZ2VENG55eUJ1czM3cU9JcVRJbWZqTUI3VWcrQjc5V1JDSVdPMk9kaDVoYXM5K0pDcVR3ZmZ1c20xbnlhT1lhbkp2WVhTY3NsbHdSNHFId0E3ZXB1YWF3NHRISHhXSkFXa0lIQm9mdjk5UjFCRGNSb3gvRi92anBrQ1hmOGdHTm9paDJ6dklsUDh0TzJNdGxsYUZDT1FNaXpKUENsN0pmZG9mSVpxM1hmZG5pSHBTRjlHaC9CeDJteVRjUmpuZU4ydldub1VFZU03c2IzQTUwaGVCTWxXNStXQ1B0VUd1aVJjR3hBc0NXMHk3eEY4eWVCeWNKZ205c3NCeWxuV1ZLZlVjN2dVOExTb1dXaTFqd0tVdGhjL2JLSVlsUlc2U21PZ1hyWjVNM3dFZERjY3dNS3pDZkxTcnY0MkJGcTc0Z1p5N2J6aStZajEzaEV0QWJoQlFJUDNwc0NBV2F0ckhLTXpXTzJ3NWt0cEViUjZYSzZsNEdpUjRNYzk1NnBpUUViTmY0ZlNsc045dzlFQXBGSGFQd3V5eHNMUUhrd05BdkMycnNkVGVZV0h1NEQrYkk3ZHhRY2VjcC9iQVpsMHhQd1VsYVVjUU5OaFZOMXhOMkZmeWZWdUFNTjRBSVMzTXZ5b3o2dmc2MVYvYnF1alVlVlVhbTZBNko4dTZGU2FXMUY2YVFvNWdlZlZwZTNRbzUyM1NDbG1ObVViQms5QWlObmtUdm8rWXczMDh2WmlXN2t5ZDdDcFErQ1U5RnBhQ3BzOW9XMG1abGdXTUFrN3VSS3ZQNlo1NFFZeEs5YmkrUno0SCtrZkZvOC9Dc2M3TGdkSWNSUjdiSUZ3U2xueUZFazE2MEdoNC9nZVdtcEt5RXVKbjVNNCtkVzJ2ZUdhZFBIWUxKZWhOdmF1R0I0Z1RLWmRPUWFERU95WjVjOVRjTTAzT1UvOVAxdVV5SnBrVWpMaDNpMGxabE1aemRVVlNaQjFQOVkyUUl4UU1yNGowMHRjdEJxMHliWSswSEg1YmtQSTRQYS9BcXZDa1hkY1RtSTg3VkhFTW1xRWoxQXhhNytiSVRRbnZQVnNSVWE3VkgvZnhDcUZ6RlNDVFVKVUZmb1dqOVYyajdxTzN4YUl5N2Y4OGQ3QTRPSlJBTEU5ZWcwYy8vTTdBNVgvNStwNEZZU0NFRFhtV25oWVZzZjVhRWFPcHBrNnhUZXR2WmM3aElQTlN0R05HbXdHSjRVNUluVjBWcTRzK3VoeDJYTlBPaHk0ZXJQRXBqNWYvUmJpMS9ISnpsREJDaW9aLzZNays2dUNFaUxoQkd5QjFpbWoyYm5oVGRrQUZ5K3FDRnlDTmpJcXBOa3RFeUQrVXkyZENveG1za0Z2dGozZmVpNmpLamNqa0JleVBGWUlmM0dFMitQOG9PempyVGwvbkcxaXcvMmZneDhEVVpEcllHbWpmZTlwaXZ1TWxGWmhYdlZJOHBxc1UxU0hiUWhJeEd0WlJubG5YOE0zUEhSSnVQZUJkWFV2MFo2eGwxOHBhbzM5R3h2OWhwZU90bWZ6OE9VVWZsWDRyOVprVG1sYVhQMnlVUHJ0dTdiY3d4SVIxNnNieUVVSm80eXlNZncwYnJsWXpoTkRLNiszNXY0V2cwa0dEdGRkL2tzOWVZRmlXcEpXeXByR1ltYnp6ZHlUbVkyMEtXWEU0WVMwUWUwZ0Y0NG1pYVNOeWNDZWhZdGFjbzkzR1FvTEJjMGl6SitqV0tIU1hEZXR0SWVFWXljd05WVEJhaE14NjE1MWRvRm9id1FndmlneG5CdmpkZXZTV2NHR2k3ajVPWW12NFFVRURSRG5jbDlMM2lIb0hPbzc2RU5WYmRxaW1BcXZRWHpvcHdHUnc1TGZ0MDlOT3dFYmFSMUZRbytnNllwWnJ3djF1RElKc0M2VjZGZTZhWnZ6ME1jZGhZQ0Q4c3h5US94b3JjNnljbUYrVHBvQVFVa0lwaXpOR1Y0eWl6QXZNdktiTFlBeVpDMmt0M29SQkVkdzYrSDIwalpiK01iU1lsMUtaK0o1M2FWU3lqUE1CNkZCTUNwRUNnTlFXb3dWSkVaZ1k3LzkvNUpzQ3JXS3VMZnlxWU0rOXhZa2poL1NyRCsrUWh2azFOejIzZGNiNmFVLzd4cTZxYWNyRjZwQmsvYk5vSXRqYlJud1RWdGFkaHhRc3YzdWJPQmtnZTFweTM4VzNvMGRZaTlJNDFxMnppazJTbkliTlA3alJZSklMUVZTdVMwMXdPSUVzM0Jralo1VExHeFZwR3Raa0Q5UGFMZDdiajlrbFNXVlByQ01DSDRQR1RtR210N3kxS0oyV2RxQkdhdmVRRVhFNjZ2T0N0QXlXZVZtRkUzcU9DdzdITnhhNDg0VERhZDJ1Vzd2eWVsWWc4cDVjMmRTVzdzMHBpYVVVMThGalA2Q2NsUHdWM28rSEcva3htMUJJbUU2T2loQVdVVFZHRXBGVzZuL1FiSDRBN1J4Qlk0RGxKN1MraHBMakpnQjV2NkVvMzlnMFhWenJzcU9Oc1RhcThEU21kRVg3cHhidzhIVStkdk9mUERvbDdKU3ZkM0hPK3ZpT1B6QjZZM2tBeDBTQXVWOGJOeGFSS1ErNHBESjdubzhOS0I5VCtINmk5UWpPUEZtY081ZmZGS2hRUXR4SDIyekxXTHFWa01mbXZLL2RzblNOc3RqMnltbXplZ1NvWWpWdWJZSW9SSHFidmxHelNac0VIRnFkbm1HYkwvQy92dEduM3E0TzNYOVhEL25FWXBjeUEyNHNocTFrQzRzWDh5ZW55dEE0aWlmRHRwN2Y0a0Vzem8xay9KTDNDS3BnQWhwSGVNVVNibmU0YnlkTHhBZGx6UTZ1bmRLYmtTSjEwR3BEdHdXV1NvQndWOEVUdERSaS93a3BGSzRyMW5pNHFXREEyUkE5UlVUbDhqbkFrTnZqTy9WaTYwd2NxcTUyRkUxdlFtWFVOd2VpMVpITWZNdUw4TjFacGZDY09wQ0d5M3M1b20vSGVsMmo5bGlyV0tHRmg2bEZXdVBCeVNzS1lEdHZVeENkOGE1QVk2T0NRaFB1cTNDV2k3SmR3dDBvdC9WWFR5WE54QnEwS092ZG12dm5SWWVzS2w1a2hYQ3RlUDlBRkxaNndKT0tydjVsKzJ3SUpPcVBGY2hFekFVUlcyNUg4a1dmU3RKanpFV09XTlJDVGUwRXpNMHBxSUZkbW15UmpRSHR4YUVvQzZtb2twQ0t6Q3pQRDlBazRkbVZNQmt0TS9hUENrcmJpNDJJVjZHUVRSWWtIOUNxblFKbWtSVkJnNEF6NWdCR0JEOUIwNGJKSmtjL3JsRDdMVTVjbXpsVXpnTDh0Uk5vZUlPZ1k0T2NZTEp0TUlzZ3E3b0pDR1JRT0hSOTk5RWVLYldXZVJ4cXcwNGdLS0laNU40Nmt4NFlUc2xaZnVsdXN6TGZURkVoM2pEZS9xeHhPazdvcjJTYTlqVEV1aEpZZ1IyVkdOWmNnMjR2RjhyRFVxZEgyWGZyWGdrbENoVG1VekdBQVdRU1BOZjJHUE1SQ3dNMUZGeDJQRHFHT1A5K0NISkQ5dEIxM0NUTXlRNU5CYUlybXVVREFaRVo4RER2ZDhGbyttTUlObFZDeFViMXRKRVRrcGl5R25hTmpwZ2FjREZ2RjZVSjhjaXljT3BrSnZoRVA2b1dRUU1qYmVab3daa25jenBrL3hCOW9kTXdsdVdRNEdxSjN1NEdPeUJvMnA4M0xrYTBQMFliOXVHUFEwQlU3RVlGRzNoRFlQVThEc2xydkI3SUt6VERmN3ZtSUpJbWYwdWtIRURGeVovSXZUVmkrZXIxWnFCUXZxSDh1ZnEzTUNnaVQ1dWVsaTdzeDRqdVBtZzFiNHJITlQ1dk9td1BlL0pTbXRkZVNEWm5kK0ttT3BNSWxNTHl0OFlTemQ0UW1nQTJNZTVYRVJWeTVBNFRsazVZcFpLeHp0OTRxRDFRTGRMakNzL1B4RU5ZUWtPSFFCNVkvanVSc05rR25rQ0pUTDRtYmM1Nk5VUE42ZUhrR003STc3eW9GMndKSnR0UTNmdXZZdmliUHVDbGJuQnBJUGVYNmJHQldSd1JWWHdvWTFwMXU1TEk5cE1kSDNsZUZMeEFzZzlVTWNkdEJjVm15ZTlNT014Q2c5Wk5aRGFaTTQ2dVZFK2d3VU9WZXhuRm9VcG9Ya01JNklJaXpWTUZ0RmRJaDY5Q090MlZ4SnpBejZHcFZvYkowWVFSbkZVTlpOcHRtdnZoVXVuNFVrV0VYWkxzSjdFZFV3WVdGMHpHL3dQWkkzSHppaXhqODZkbTBnV2I2ZGdwaWpLaFozT0xTY0lSNmRvYS9Pbm03b0NQUHlpejE5UzFLNkthSlNGNjBLbTlTcm9aelJkNmh5ZzN3M0xlZUp2V1VBS0Jmd1IxZnZIUlVyZW1laU42b3lSbVo2WGxPZSt0YVQ5cS9JSlNhQnZhRGFMaS91RWFXaUxWNHJGTzJlMi9TSlJpTlM0SWx1ZFdZTVBsd0lpVytWZ082R1Y4TXFacjZKZC9NdHYzdnpYa1VSWFZVakRFdkhoa1JMSGIyYlJFWWU2SWJveWVXcVJ2Ui9mMitsa2k0ZExRR1pWTVhobEc4c3grNTN6N2t6U1ZaUmxtditIalMrNEswZ3JWcnBKOENGTkNGWnVlYVV6RnJoSElKWUZxMVpLeFQwekwxZjAyMmZxTW80azlweEk2ZFk5U1BlcUhYZnd4SEZRL1lKaTYySE9Rd1hlVmE0ejdUUVdFeHVIREhtYlErNEdid2kzaUZwVUpweEVYUmdqSkhwM3J3UmliWDhtaEY3QVFMVmJCZ2ZaVFNkY3FxMlJDSUpZWFZnTEJxRFI1bnJkajliMmt3WlRSaDdtRHdKZklOT1JPTGo1bFpJQVFxajRNdVlQanJJRTRxazdVQmNBbkNXWHRuTEI4bnVaZTNDenpwMG1HYThxOHBuMXhGOHdHcXJNYmxwb3lnM21NMGdRZFo0TlM3d0cyMVNMU3NoK0hGNHpTS3dXTjNHVFZHR0ZEUVZBdVZ1OFpMVmgzZnNNcnBNcy9aMXR6T3VPMUphNm1XNWxpNGxBSjFFT0hqNzZYa1dzSWFvTHFuQk16V093R05tMzdaVHZZRjQzeVYrNm5MOHdtMjNGclNNNjhsQWFSS1RDa1VnUDd4RmVQb3NGYy95dnZ6Nldra2JUU3EycXZ0WCt0MmJ2dGhnQ0JwR0J1NndmUWZCc0Q2QXA1MDRnTDRPcnJLNGM5RDRML09sanQrV2trZ1UrWFdldHZsbmt5eFBnL21UVkZtck1CbUtmUERKTGZuMXRBaG1RMzYzNGNocUNtajJWUDZ3cmdWaWVpRnVUNGhHS2Q4MldKTHFJVk9zMjdLNFJsWk5URnNvdFZseEVrQVhNbnpzcE1LZloraFgvSnBoZy9icE4xemsrNFMzQWVXUkJoanVMR1gydzA2OGdJdDMveVorRmQxYlJaM2M1VjVlS29PdlpZNFlXaGRRaEhoNXhydDk5VWJiM2ZRWm5MUkpuVCtSSGNGSW1mZTA5VlVCSDBQT21BelFYK1NFUzUrVWxxM1BGVVI2WlVJUkM2MFp6enByQlRZQmZNVVNzQWtDK2hPNWhxVllZQ0VMeWpnZUhDbWRIWXh1azhHbmIxT0dGSHBFMWtuVWVWNjlUOUExd1RnZ3h0OWVWOWZVcER5WmlQaVJNcjNERXAxZFhjVDJsVlJRWlFUMEJMUVJPUUkvVnNOaXZqcUlDdytKM21aaW5MYUlieXNvcUpCM1RZTE9FbHlrNWN3emJLQnZqYU1aTUdBYnIvTUdEeEg5N1NjNTZTbnZtUDlHZ1BVRjdMQTVZWXc1SUVVT1I1SmM5ZTdMTURsMjRTcGNwUURXcjhDdGRTbS9KRFJLNk5OcmhVV0FxRzFMQkF0SXlnOVdxRWZOTW55RG9aOWpWR05ZWjFmK3VBMVV2WDA5MU8xMW1ha256YitvNDR1cCtER2JiVFhoczlqczlzT2JwNEc5bE9rWHZ2bEZBS1lzNTF4MTFFbHhVVVNZS2ovek42eXZMY2JXS3JpTW9LMUs1eUVYTVJqN3hJQXYwY1B0eGJSL2RJVnRnRWhEcDY0K1VER2pseWZlYzFpTzhVNUhyaTQyNU5kc2RaaXZkRjhzdDJBMVRJMDFJQ201ZmtFZW1oZmRZemR0QTNqclIreGt0ZGFxbTZ5a2FsVU5oMVQ4U3ZUVURDRWFOUk1uV3FzK3licXlsYVVEcWxrSFJnOFVyNmsyRlJSV05LZWcvVmpyR3dLbzVKQnBNb0Y4cmF4aFU3U1hSSHFaTVRyTFdVR2RoNGdQaVZtQ2xxdGhhaUxKb05tbTdnM25wOThhZm0vTFpMNFFkL3JxL0orbkt3OFM5d20zREN0cERxd2szVlRWajVHdEs0MU5QWFRWVTJ2UHNhelVQdUVlU1M5UkVRbWh5Ny93MEI3d1lwRGNmZkt1QnFIc1I0dlhncUE1RUxTM2drTEIyNnBPY3hweHpEQkZONTVDZHp1WUwrS2tCQUY4NjQ4M0kvaWQ1RWJUYjdWUzlkaHVTRi9MOUY0Nm5GVVNzUlgrcnZMMnBqZXFXc1JrODhuZVVpSmlzL015MloxYnZmRkliOWVUeWVONEU0L1FUNnp5c2xVWUpPYmU0U2lRaWV1ZHpFNVlGa2EvWkJmMysyUnlpQXlYN3UwUVJDdytYNSt5OFZlWGxuZ2lnSUN6ZEE4L3d0KzBTK0kvaUVVTG9wNXlPeitJNnlPQzdjUEVoR0NSZ0s2RHhQbEUrYkl4aEFJcGVCV3RMRTFLZElHaEQ1ckxRQ3diQ0x4UVYrbFozc0hSVkpQcmF5SURQRGVXZzgzUURmaE5uMmgxMkpCL0dWS1NpY2xCd0dqa1J2S2ZvYXRraVZyQzFMN2xEdFZ5WjJFYnhsdGlmTytXV0E1SCt0T3RQeHQ0dll1ajZUVEtZL05pZ3QvTk5kaG9nbmtOcm84SGxaYjJtRmF4MllSNmYyNUxES2svY3pQdldTaXN3em1jV0hjU3A2enJsN0pXTzNwUVE4VEVhUUN0bUpVTWNiN3hjMmU3dVgrNlFUUmVOaUo0a21ISzgxNDdMMUFFNktraUk0aHBaNWVZclJoWjJxeGxqUXIzWW1nNFEvODhOdUEyNVpqM0h5MXFBeWxaSDgzVzcyMUZPbnhUZXhmTWcvdUN0VXozZ0c3ak1Fc0xCZ3N2MG1yK0hCSXVqSVpPalhpaTRkN1BKcDJhYUdsSm10eU1GQlg2dGpoWHA0SEFjWXArUUFrM0o2MEQreTFBNk9ZUXFkMElibTdlL3FZNG5pYUZmeUdrSjNyMmJ5WjRwRzRDK0ZLS3lKTmVhREJ4clJsSlBUSlFhQm1HcGt6MXJUbXQ0cmNvSCtHckoycG14Z1JrKytvOWxvQ2hFTVdTaHc5MXNvNmNRRmw2RHJZbUNjUFVNZml3Um9IblhpaUNmWDduSEZML29vL2FkSFgrNnp4dHBhMFQ5UVVpYktEeUdPRmlyaEFtc0ZDWnNNbXY5blhrRlZlOU0xVFk2NmMybE1CWW9EUFVTaGIxcTU4Q0ZVZ3FDZW10VDJFbmdBS3Q5MHVqUDlYQms4T3ZPbSttYndQSWNyTXVxWEhpUGxKNmNoRWFCTXFUaEJnN3ArS21pQzE0dFVzNUIybmlwVzMxTE1JbTVkTFN0ZVQwdW1RSHczNytuSmxRWnFvSWJUTnZpNVpoSk9HSjVOU3Y4YXBjeVBjTDlML3I0TU5DeFlHQnArUlNOalpnR0pkWWR2OTFNY1VIUTFLRUdBNFdmTEtKN2l4MUhObXJ6VkhINkEvMFFXcTQwSGZjYm5BZm1NWVIrcGxuZ2Vnb0wrOXNkdk54VnRzMEZjditaRkViWmdDM1VXdWV1blVPb2d6NHBPQURjeXZIN3dPK0hrQzErVTRVK2gyekd3T3N6QXl6OXFKb2wxZUx5UEVRVFFFdUo0alIxUWltWEV0ek12Y3RKUzB2ZWtMU0xtTFBpcDJkZTRiOHZrQUhlYUFjaFFSbVVia24rRTFjdGI0cm13cVlkZ3p1RDZHRVZocXY4eExBNXB6UTIzQVJSMlZoUzEvdFBzQ3VXdnVCQ1BWMVJrdngyR0FkN0ZuT3hLcW9VaXBJRC9CcjJtVmdqQStTU1FISjFVQyt5UVFwQzdrRkpoeDFwbW51YU9UN3JBU1NVdGE4MDZFOEl2a3ZjWlMzemFRMDRqRG5nWEg2S1M1MmtObFo3OW9PNElKVEdUbkE5aVZjODQ2VVJtYXN5SytNcWVYVGowZHFsaHhyQTRyREZjTHVtM05HZUZsNTN2am9ZOGxzb0Z6ZC82aTl2S1ZDU3hJSS9QTmhqYWU1NXBHMW15RlNqVXF0enhSMEdIbVBlRGZuRFFON25ERlpUQStPeks1V2dkakd4akVCWjAvTktlTG1CNW1WNklFOU9neGprWSswODRKZVRTYVU0Wkh1akZRRTdNWFI5L1IvY0dIMHozajBNMTVHQWw0YWNSMHpuZmd6VEFtOGNlL3N0eUd3b0dXOGpob1lYMzVndEYybEpjdk44b2Z0eHlsK2pXV2JlSHNxRjBrL1JNU3RhNEl5aWp3MWJFZk0xNVNtQ2ZPTGxsN1pLTVNhTExtTWVXSGpjZzlkcDRPVVd3bDVmclB3ek43OW52TEVsTXgveitYTWRtWVVyeUhRWU94WFBpZTJ0VU9CSjN1SWtFMlNaOCt1R2Y1YXd6c1hjSWdXaHkxWTN5cFlVWUV3OExPcXB0T2ltcE1mb3REeHBYMHNhWFMyVjBFVWc5WEl3RGJ5VnQ1ejZsdDR6MzE5ZHRIbTJybjRrWEhjQXhqZUFaMHE2aEpDbm5nNkIya21KdE5LNlRSampuYnNCK2x6cy9iV0dxV1F4a0RJeTBaYm5zSnd2cFVoSUVlbmpVbmxZUURVZncyUmpGRVBYNEtGSXRZaGRCa0ZSc3JIYnBMcGtFb0k3eC9LbktzcjVqQlpQMk9qQjNBbDh3RE1vUU5XV09OR01jRE5wNFNXNWpQUkxoMnNFUlE3cGZzb05xNm0zaW1ZMHVkVVNuWWdIWGlkdWVpRlM3NGdsVytGNkJMV0hOZFZaZUN1OGJvM0RocDhrYXVwOXJZV1d2WkNyTEV6aUlydmgzOXE4VTFhQjBEUWdNWTBQZlNSUHZsS0I3eFptVzFWTkhpWk5ZWDFxSGFvR0M4ZGtPcGFRQXo1RnkyVVRXQU1Uc20vemxZNlljTEU1eC9WbWI5bGdCMEFleGwxL1hNZm1meXRPL1ZGNjAyc1U2NmEyelNuRUtrK3JObk10ZzhYeVFzaFAreFJKNk8vQWJmNnNZUUVUbWRmODlwRG1ZM0VmdUhUVnBHKzAvMkw4dWhkVzg4bXFIZmovQW9TY1pqa1NRRHQzSnZTMWlIQjBzNGZrNWl0RnIxbDFKQXlEZ1Q1ZHNxQ0x6MFh6MDhBRitSTno4aTJhNVQyZzQ4cWdna3I2bkt3bDhhREZOeEhiQndMRW9RZDgxcFlSRDlqYmJnMk5KVU8vc2ZqdTR1Tk9pc0JJTWdLTHpXeDNHejVDY3JHNjZuN0FLWXErKzF5WmhHQkc0V1d6NER2dHdYaU95QVFkKys0VVgzRS8zVEEyazkweVpsdG1ZdFV6ZjZ4YmRoWGtEeTRZR3VZV0Y1VjV5VlkzNWhmMUlhcmt4OTYvdGZqN0RETytlYlVZYzIyUzFNYjNBWTNDTFdSeURyaUdjQXpIWllPaWxFVkszQit2VXBicnVqUEJCWmhBS1JXWXhTdWFFRklpeG1HVnZ0WE42WWtnRkNCRVRMUnVlL2s0SDk1OEN4aU9NZnd4UTBlV2FIQUx4bUNUa1BwcUlBNzJDK2RZM0gwVkZGVW9FaW02M2c1blJ1bldGdDREMGNka054VWZubzdmbDNlQW5SY0hIQk5NVm52UWFibUFkYldxemptaUlBY2YxRzR2d2RGTUtHUXNQOVhVUFVrbUJBTGxZSmc5SC9IMlNGdVZFMjlDZmVWazA3OG41bXhvMGJkZmFyOG5vRWx2YlA3SzBnSjdGNzNMOUVDQmxCTUZIaG5haUJFd3h6M1lqWUtkODhQYWwzQVRoZVRRVG1aUCtnQmxtNmJGVE5TaHZtY1VwK283SXNmZElWYXYzc1RudjYydmZpWHpqSUJuUkJSanJsZzRsVlVWbTdNdlJDVXFvQmFtUjFtUEVFemdXd2hkVnNhNlFUWDdpek5xL3BUMytkeVpWR21BUEdQbDlJNStwVGZOQUo5eDRicFErNEdDZWpFZERNMTd3WURqQlAwWUxxckpSejltU2x6Y3poQm1wS0xMUE1JenpLQ0tPMFFWQ0JXSUcxRGVpTldhc1RFUTFDYlRVTk1IWUhVZ0Zzc0JFdEh3clVoSjNEaCtqT3V2UTFLV3c0QlJ0ZlY4cmM4SEJMak0zMXRMU3RNYlhNL21TRDNsbmQ3RDhSaFBQbFRQOUtWVXQ2d0piM3VUWkJKckZ0ZFBJd1VRd3hhSlFDUGdqcEpHRXc2RW9sWmY3eW0yRk5NdEZFMnR0UE84RzF0cUdabnpZL0RoZC9GQUNrT1M3N3VUOThlQ0VFMGEvTFN1aTZMd29WdUNtSFlHc3BLTXNEeURwOTZuTnVERU1GbTJXU2hrbEp4dnEweDZVa0VPcTFPZGErRzlJSXJYKzY5VEtaajlkTmxVWHM4OElsS0xCRWlmeTdreU5kRXRxSUpqOHZ1dEJpN0hKNFpNdDdraW1qWHpZeGpMSkd3ay9YVTUvTHd2Tk8wYlNQNmtFSTVXL0JvU2NJSWp2cForZ3k5MTJDUlRVdmJpSTlsc1dpVHoweFAyc05VelV3MjNPc1Y0WEFJVnBQNXRxdnY5Uk1vRWdZUDhKYVNLeDRPa1d3UkpSd3dYbEpTVXRBYWhycmtGelZTTGlPUmh0emMvZEpUVE5pUk8zMjIyLzVKdkFHeS9sbzAwZlBXeVBNOVFyQ2VnbXhwVVRyWFlmWE9LY1FTajM1TzRUajdYaHVQMy9hOHQ3Skg3OXZXK3JyWnJtN01ndGlKQXkyQ2p6cU1XZ3VTalNVVythdDhMRzZPTzBIZ20xL3hmZ0VBOHk0SS9wS0FGSFh0bXlwYkZpVkFIdDlSeW8rZFJ0ZnJjaWc1cUg4OGxzcllBRGJOeW51N3ZwMzQ0dTdITGx6bWROVGdaVkJ5SVhwdFJIS1pmcjVEblhEcFV3NkNOYmpMRXBrc0o5dWs3R2ZtVi9PUmxiRitvUGw2dDdXSjA0ZnZNZHFCUkFqaEdHZmNoeXJZdW9TYUdiTXZacjE1aWFTNGxSdndrekJtcUZ5Sk13REF1WDVzUmZyRWt3MmFNbGlGdUJUYjFhR1lqeHM3aWhHajdZbGgwdngxY2J1ckg0NXBrWFQyaWxDM1JKekovMkhQYTlldWtNQ3dkSjhpckxJbzhlQVRjWXlwVEI5S1dpVGF5VmcveVROcDBia0JOSmhBS3RsWWFSTFlBWGNZbEJoMEFVNHUxMjJua0JSTkUrSU9pTThqR3V0N3doUFpKclF1NmNwYTV0eW5LN3JPVFRJNldzRUJVaHFMOVJ1cHJBbEdhQm1aTmtBRGliUkRhUjZaazR4YzA0b3RNdmYvNnc3cnc2eDRaUDNiVHVSQW1kZm4yN0VlemI3S2Z0SnRlQkNWRi9xcGRHS1BHNGpkYS9CNnJaMlZBZjlPSFR5QXBEb3UzcFM5VWNiZXVkZjFUc1diZFlzaGhsa2pOSWVHekxXK1RxR2hmaEtNSWdmSjNqdDk4VE5UbUFaTDFrZ01tbWx5RWdXUDZ0SFJNOHBXMFd3Q3FMNnErSklFalVZckdJbDFBbVEwL1NjV2NiM0pOVU9nci9JYU9waW5RaHJTMVU3N3pkL3RiWXErYVRsTkZSVFhNNEduQURqbkVLUmhaSEFEZ3FRR3BubTh3NjJjb0o1bENCSmZlQ01mZjJodXh5UGtPN0NRVnZSVmJYWTNoZ0s0QlpxVVV4V0RNMmNYRXdONjhQc1hGSFArNktpb0lieHBudzR0ZWkwMktqb3VpdVVYc2c2T0lNRXlkTzVndlpoSitUV3RhUFpnOXJhUFgvQnBCMEhjVVMxa2E5YUd5MXVSK0Y2Qmc5VkJDS0RUcmJLMFcwenNCWlZkSmVKNUhQYUtzdTI5ZGpkSGtqNkZzTnpsSVM2UUF1Tjk4dTI3UnlEMm1EYkg2dmo0V1VlZ3U0SjJZREkyNWVvK09DNUJ5VHB4dytHeVJvSHFnNnpjTzlsZUNUK2pWeHdnV1lBS3hQSG56OFRUK2FiU1IwaDlETTZWbFJPUllZSWNVSXZuMnRTdkR0c0NNb1Y5a0Z4akl4RmRvdVNHMjVBQ3NLMUxZMElVYldiSlFCWjRUR2lnV2FjUnlEWTk4WHdRSjUxL2tUVDZvRnJzK2RYZ3pXRTRkWjl1NGM4d0pXRm12dFg5NzFnRkNtZGlWQ2ZUUDlYRDREb1ZsR09FTittcXUyV0l0Z1J3emFLUU42Q1ZqelI1RUxPZGhNTkxBaUFKV1NtbTFCTGlUakpqRUNyN0RHaEQ3cFN3Rko4NFlTelZwWnh6ZUxWOXd0bUh3ZDhBUzF2M1Z4bEtIVU1lWm1jQ2s5VWtIMXFQSS94ZS85cW4yd2R3ekZyY0QraWlGRFVHMGhyQkV2bVRYOWxldXhienZ1NHFEb3dCaFcyUG9QZks3L2ZIcUlzSWY4M3Nya1Jqbk1wVWxReHhaZzNXelkyZUFaTWdrRmMrZmZxbXFLVnpES0VGb09rNXNqN240Y3JUOFJaTzJWQnVnTm5DQml6L1JsZndGTTZJcG1lcDk3S1BOalFqSnYveDNpZDhlNkMrL3QvcUwrTzd5algyQUVjRlF1MVZpRmY3cXltWkh4TGJNdTJTSDFIZ0VtNm9jaE1NSWZERWdBcEd1OVVNUm1EdWxINCs4TXZwblpTS1VBc3Z3OWhHKytuSEVMMCs4RjRjZ3NnL1RqbkxJdXVWRnhxOGJVek42eDNvQitmUzRnd2hva21uM2lJdEFhdFBiRlU2dTBBQjhNVmV0SjV0QkxaaHRQL0szemlnWlJEY0ZsTXNVVFIxUlFZZExhQXBvazl4VmtZTUorQ05Kak5IMW1wdktUT2s3eXNjbTJxcmIvUlJ1bkx2OHl6TGRWRFRQbTY5ZEdJZmlWSFZFSWZGaTJLMGJkRnZkeTF6R3BsN1VNM0Y3a2RoY0tZUFNjRVZXSG95Wk54c2N4V1cydHB2am0vekgwTmhtYS9MZFRSY1hMVWpTTk5DWFRaNnNSbldwZjVaKzBibi9aeEVaS1hhUzEyeithb0d4anI2N3J1SmpjWXkrZ3E3Nk1PUHBVM2xlWXB6Rmo1b0ZCWXFaSjErZjJPbGNDS3JyZjJja0duZGF2dml0QnZFTmQ5YllqN2NuUmRlOVpiSTNWWk5oN2RVOTMxVWlDYUtTVmd4dndrcWpoMUtqSnBDYkJWc2tMSU5qdEVNQ3ZubkRVNmlsdjlleC9TRTFTOERHOWl4azNPbVJXaXhmUUpVdDRteDRhdjlpYlVUMGFnZklPNUZ2ZTNhNXVMNU9helZsc3NGZUdXRWJmdTVLSEVLRXpJQ3M2Nk4yRzBHU29pSStIV0NQeEFUcWZ0VVd2aG1hM1VMVHAzMDI4SmsrbFdqYXpXbEJOUmJXSTJmVU9sY3g1eFg2M2JxaEpZd3J4ZjZKN2lhQlo5L3E5WXBINEl1VVgybXExeE10dy9lN251Z3QyZ1JCd2dlR0JHSjVDWHRSTDRlcDNFTkw5MnpvRWZuVC9NVnRuZUtyMGRza3JnbXNuQThLZEUvMUJVNlpOeVVhdUJJMUs1QlhTUjh4L1BXWWRhMWFBSGdwMXJveDF2OE5wSkRldlBKVXJHRGtqQmt6STVpaHJPVUg3Uk1YeG1qbGR5SW5YcmhDS284TXdwdHE0NFhUVnhzdC9aRHVWYlc1eCtFdVdLeVA5aFhkRmNZVkk1eHZuUk1OeG5UTG12Y3hpNkxaVTM1VC9Rd3pmaVZWd0tJOVVreUswZWpHYVkzcjFiR2ZiNG8xUW1XMUp4Wk4xL29VeXh6SkRDQUJxVy9maFVxMG1XNWIyc2JJZFBQVy94K0hRTVNzN3FLYlZkc3FZYUJkRjVFTzUvUXYrR2VTZ1J5ZGlLOVZwdStGV3VCaDcrNnZqdWFMQnozdUhFSDlwOEpKZkVMYVAzNWRXdHNlTVBCejk2RW5hM2lQcXQvaDdpQnJsY1BmZDV2bHZIYVErYXVNdmcxYmhrd0R2YU9nZEcxdGxpMUFBTmM4cUZGTFVpdXpTeDZrc2pvUkdqWkhiQkN4b1RoK2l3RHRsNkt5QzFDMFU3Vm11cnJicHdMT0JrbnhUQmFiVWdQRUwvZkRNbmZYMDBDekxobUtjMjEwR2p1NUthaVdKcnZuSnBpbk44VUlZUmVkN00vZW5Pb3U0Q1Uvb2J4a0llOStWWHM5SjI0bCs5NGQ0VGJNUzFaNmY3NlFBZ1hKL2QzQkIrR1BMSThZeXh5enVGTEdYbGowWGRqZkd4dzdQa2NWaHlzenVwR01TMkkzaGRmMGpCTTAzMzFkYTJTSGtZeUZsTFE2N2VqU0F6N3NCMXhHQ21RZ0tod1lhSXEvckZiUThKWm9nR2tIZHN3bTR0dTM3UEFtT2ovRjI0WDZTalZBK0ZDM3BLa05Tczc0cG4xNUMyWFh3MHBmNThrSVNrOHR2azhIMytiYmtoNXZyWnE2NWlPUG8yS3lKYmg2VGNucjR2MFBrY2pqYzUxeklaTTFOVmRHd3oyUlc5M3VKdXc0M1RDMlhxOXJCTU1NdUhVSlVFNENFNHFjWXdlcTJUWXdCU1ZOVHNzMnhOdHlHTVAyVXpGcHZVY0xQSUM3ZCt3OGR1MDFPcTVKNjEzem9nSEFWSlB5Y3ZPR0lqYnNraUh4RDJoL2FBNUhoQis0M3lFM3pZbm16SDY5ZEJldi9FLzVMRUQ4dWVCcFpsVmVtZmo2Q0NWZU1qT1lpUUVyVE1DSkZqRzdYSXZTaHRhdDV5czVFV0wzTjlsQlFyOTlKd3B0R0JLUzc0Q3Zubng5ODFrMHBDY2ZkdHNYL05xek11SThZZ0QwcmIzanhwa3JsRU5OTEc0bGNNeDdYSGVzSm4vTURhQXA2MG5jd0V3Tlp1a1AraUlJRjJxVjZXaHo5THA0RkE3RkkxOVhPZzk2Qjh5WTFGZFo5OVRRcndTUUF6V2RRY3dzcTE4ZzRhWVBJaVludEdyVWR0Y3ZZL3QzVzdPQnRNUUVYaWVnU0pFQVJsN0FZUnpPSTBrSEJrUzZLOGdyOVNhVHA0Y0ZOZllGM24vTEVYWVhUYno5QkZjTlFBMUdFTHdmQkQvUDFCOHVoWHNpVDNDellBN0xwNndwTFRtRHpXVmMycHZrdHJPUlZLTE4zYnlMYkR4MmlzVXQ1a3VoaDhwWFhDK2I3OWZkZitBcEI2VHZ4ZC9JRWw0TVY5WnRNSCtPNjNHTVpPLzg0eVY3WERDS3ZLdjZCZkRjRmZZQ2pFWS9mRlR4ems2a3JrazYwVXVZam5IZmNnK2Q1Z3VjeHVpY0NNODhyOVpOa0Y3NTU5TG5SejBzZ2NCRVVtcnh2ZHliaHRYbHJMb1VSN29pa2hPT0NoZHVHOUxaeG1rU01TR2paa2h2MXh6Q3c0ZVRmWXF1cWgzRUl4ZlF3VmZSN0JrK09WM3pLMVYvSXgwZW5SVUtJYVBHZkpPNWVKRUpxM1VsZ0kvUi9QdVFoaCs0MzlOcmM5bHZrWDJuWWtFRytleTdTTTdhNFA0MjJhVkdyVWo5Yk9YVWkvUG5QMitxNGgyL2ZYR1c2M3MraVk2a3BzTjJWVXZKbjVKU1g1OU9FdHFmNlNpd29nLzhTbjVHd2hWTllLQWM1dEJneStSQkcrREt4TExZcHIyV0RFQnl5NG1DTjlZSWpYM3JEV3JXWDZFSU1NS1FFS09wdUpneDc5K2d0cjhkZjRtV3ArTFFtRVVXeUQ2aTdHNVJtT001Q3ZJdFcwT2h0K0JGQzBhVjhDR3ZCVjgwczd6MDF6cTlDMlordU1VeGlub2JDSnVpSUNQYVdtbWhqdGs2QUNlNVBkL3BxYloxVmRGU0hVNXFPV3QxSnJESFBvRjZTcG9leXdUTUg4UmQxSGxNamFLV1FwZkJnS0pBeFJ2TlpUanFTckMrbll4azVBME1FdXppVDROMTZFQ0Q2Qjdqd3FkQ3M2SkNva25YZVA1dzBUOXg2dml3a0JuK0lsQXUwNGg2dnl6NmhxOFNsWHNHWUdXT1o4aUtnOGh4Y2hzWmJFWUtHbDZZUlNWT1NFVE40TGg2Nm43Zmhka25pNkFmcmx4ZFVzMUIzOU9HMElDZ3BZdjljRUxGQkpFUVlzd0NxVzZ1TytNNGdrWk56SkJSdmltT1hQNnBNbVdCVTErMTJKc0cvdmUxOExxRjkvVmlrTCsrSzhnWlQ0U0gyQnZQL2JWc2ZCVzkrKzEyeERnNHhZdXJTYmlXQW1GMGVwTWZpZm1qNjNORW5tNE5CMVdzMTVXRWtyRjdOVCtTc2JZaWtkWGJKeXhmbmxRL1g4cnJKYlA5MEIxZlI1bVY1ZmdzMDNIN1BYZW9pQ0FuSXhkTFNxSU9TUUlZTW1zS3ZDazJ2eTBNSVVncXZvZDh2bHQ3M2I5TlMwcjdNT0FaS0p1MmpBNjdqQlZKVGljYlJGZTlVOHVKU05jaENKSU1MMm10SzgyM1RwSEh6MmdWQlJBWWRkN1oyNE9vWGdaWXRmcHF3ZG9TcVIwMWFYYlltMnY0cllCRmx1L2lEczg4cDBkdllUMHUyRWI2ZmhYTm1FL0xCcmtKcllFVFFTSTR4MlIyWXlRUWVzNWU0L2x4b0FFbEFpQmpETjFNU0NUeEtkVWg3b3lCaWdWZG1jdmtNTG1xa3B2NEFQZ3Y2TWZYWkR4dEZlWE9Bb1JhZ1NsR1dubnhPWDlqWUI2RE9LK0J2U0pSL3p0MTkyLzFmc0k4akY4dVhaTC9kOFVVam0zVkpnMzNlVDZ3dENTUE15Nm9LbWY2T0NuR2VmYityRzZqZ25ickIxVk5EbWNsMFF4R2xwVVBoTXZlMU4zY242NDVpMGUrRUtma3Y1blI0Vk11L0tYV3luSVVaS05GWDUzR2VyWmtsRXlURStLY3ZWdXpnVFhnNUNTdXY5UFBONFRTRXhNYWRaaU40alVTNTFsUlFxM25lcm52UzkzYnJ2YmtUTjliOUdEeFpSYVd6VUlFR2E3RkU1ZUM0U1F2c0lxMjcwTGQxY0oxT2VBa1I2UGZURWpqM0JPL0dzei91WXowdGF4YXdzbjlCcVROaHNLZDlZOU1JMHM1RVFmdDVESzlaY1N3TkNGYnlzaEs0UVRvN1hPTk9CeHhDem9DVFVEakRjNS9JSklDaVN4enVtQXdkOXBxeHVsRnJpL0tHZm9DT3lUb3NVT3YrclVPNXIvOU95aUd3Q2h5OENpMzVsNVNBS3UrS1h4ZXVQR0F5b0lrQ2tJVGpDZ292K2F5cS8yL3JZK3N4M0RzdGs1cXMwVGRHY2FUaWZOQWZEWUMxTnpkaGluekpLYW03RG51V28vYS82d0RXODhEM2V5NjV5N1BBaWQxLy9wbkJtaUZ5MFR2WCtTTUlsV01vTUVTUUV1ZmZtRGswNGFKWGJZYmNsWW9BZzFlNStUYXNEc2pzYS9EQTZaZlNyWExWQTc5NkIrOXF0aGVlMi9xbmdDQ3BYTS9yMC9KK3E1WFMvR3QwRmVEbzk3V1VsazE2YWFuK0gzQnY0WFY2RHk5cG9JLzFMT3hNUmFOVktNbzdNZ3p3UzgzVjlkT216M3I3N0JhZzVDOUR1bk8wUUd0dmlxNVE5WGc4amZ4TlJWYkl4RFRCNTcyT1dlRGErT1VTeFBoTTQ2ODJ3azFoaEM0TzRsODI4aUIxbmNWUzJaeHlVRXdYK2w0YnI3ZmtWVERoTVVrTVFubVVJdm9QQ3FRSU5xaVJPV3I4TEZsdUlLMjVaODBXeVVXaVRKblFTZHFNOFRIMCtHb2JoM2lLaDlMVXpJR3hWcmRQb1RkY09UVUJPSXpvS0dWRnptVHVsTjJ2aEw0WDY4YUZjSlFheU5jR0ZQaDY2WW5ncjRSNDRmd20yRUlVYzBzUTVjb05VaHBibWN0Sy9Vb2ZFWXdxL2lvMFhUdnkwSmd0dzYwYTJiUWRjZlVMUjhqZ1p2bWlmZEpkYTZYamhndFJ4aDFzUVM2SGwrNVRFWkt3M2NHV2luWHgyUG5rV2VhUHErSWRickR6dElzVmxQUlZSd2p6Q0taZ2J4cGdjY3pRbnFSTWlnc3ZoRlFtVW52ZG9mT1M3UThubzd6SFExV1RDNjVDQkFEUVE5VW41aTlkVUtwNjF6Qlc4OThuSUZPbG9MMXZ5UWxzU1NOTVpKM3Z3dUdmYU5jd2Z2cmI2ZTF5N3k0alNFSWhOajRTK2N2eXlvMTYya0JhY3FiTWVOQ1RydllxNWhwbml6eXkvR0tORGZHL1VBZWpHNVcvcVhMeDA5eDJsZE9HL3p0NllrVGtNay9iSGFXUmVIdTJzUTlCMm1ZbXhxeGhQOVZXK1NLZXIwU3BHSDFVazZQenQ2SXV4SGJTcWxra3A3ckI4dHduM21SWnkrc3lMLzhtcWpRWW5lMU5xN0ZrL251TStLRmhscDdKNk1nT2ticWVrQXl3YkxoK1F3bkNIa3REMWtIdUxRMXBMcDd5Qm50ZnBTU2Q4S1BPK0E3aUJhVWszV0JzV2UydmlCOHJ3NzlvdjdBTHkyR1YraUNWVE1SeGs2WklSTk1aTzBVZmx2SkdMdmhWcHViUGNXY29PTWF2bmxFM2s3SlNsYVpOMEZCak1Yb0xQaGtpNXF0ZU9xamxuWEFmOEt1VXhpMysvYnlkQ1JSNzIrZDUwQjFPYjd6eGZvcmx6aHdJVWsySjg3VlFPM2ExRk96YjJMSEFCR2JQb0ZaNTdzZS9CRTR1UmhGYUhMc0Y4Uy85L1ZNRUN3eGF1REdxR2NFcXBtcEx3NUdDbjE0bUUrUkRQRUk2V0lyYlNMcHcycmxRODFqeHJicVp0TXVoZk43VEhiZHAzSmt2dGplNTl6MXFKcFlHeG5CcDJiZGgweGwxc0FKUWt6RVRJRGh2TEsxN2UvNU9ySVVUV2htN3pYV3lHKzNGM2pYWkN2TElQWm5pamtQYkI0aXkzNVpuUHpvUHZ3aU1WcUMzWkFxcjNoWkYrMFl4TVJ0RDVzOXRqWXlvck40ZCt0Ylh0RGNvNnlKUEo4eTk2VVBmUk1wblpYTmwyVW11cHBiVU82cHhmRk55UnhhQ05VSGJFbVZUZ20vZkhLdlNMTW85cnhVdUYwTHJoU3pqbnAvQmVWS2FvZlpjNHB4MVJvamxYUDRyU0lBWURFQWZmalFZMkxGVkpwRzZHQkhrOUpzZUhZbXpOMTJWcFVEdEN3ZHZGVnRnUkxRWVNRZmdRV1hzWUtwNG5sMG1URTFTSHhvTzA4YTV2dGxlNXc1bjNzdTVtbGs0cU9WcU9TTk9NSGZETTh0dnVoREZETHMrOVcrZ1B3dGZXSmpCUWxwL3ZBblFDazBRcTBPLy9mVXZBY29YNUpDLzJFTS80VFZweTRLSUMzN2VIdDkvbkZVKzdpbExGdm5mQjYzNE94M3k5dnRmd0lPSERIRlFHSnpodUJwcVAwVENEZW42ZEo2MmFVSUJ4enhzOUtlckU1SWUxVVFQUEl4OThMMTFNRERoK3VNYzJhWWlvSjdEOGFiQzFSOE9HVTVYREhmd0QxNVlZamM3OE9Wc3IyVlZLUTlNTlRlVDZacGFsb3hXc3MvVHh0RnE1WDNhbkZ5dlRaa0NWL3RqbE1LdkYrQW9Lc21NWHV2aWY2MkFZbGxBUUpNbGdLMnVjd0d2SWNMUFBWcmxtaExtY1pOSmVQRmhHb0RGRGQ1Y0wwczhxall5dDFKZE1PRyt4dS8ybmdoaGlNWjlyUnpPN2trSyswWUdLQ0ZDRFkwNHVKN29lOWxvSE9RajAyNUk5N2dpQjMvTld1WElyRk81S09SMndsbWFIalpBREo4Zk9mdERGRUtiSmFPZFlyQ1Z4eCt3TjBmUU9qYTAzOEVzV2dIOW96d1VTUHRKZ1MvQXVNVmxvOGpCYmJaaFk0aUtScmxPL0Q1QzRoY0hMdk9CUExNK0tEQUxsUGQ3akZ3aDEyWWhBUi9OMWFVYXhTZkVOYUIzeXVWbG5BN1ZvbUpTZVBaUWtHS2syMW56TEFIdDFjTDFZQURFVG5hZm95ZllnL1YzOEhGWG10bFBKSFpjZ0Rkdi9tZ2pzM0l6N2w5cHBSQU10RUtXK3lsQmpSZmExMDV6U2d2aHZPVUdYOVozakxOcnF1WFhRTERGWG1CU2VUVCt6QVdRL2FsRVBMTldPU3ZWTDJPOE9FRm0ydTdxTGpRZ2ZLZE5ua1F1ejF3SVBxdit5MkRHVFB5eFpxOTlodUNaSGUzKzUySUYwVzJrU1E1bGtpZSs5MnlvandiVjBUVmZKczNIL1cyQ05OczJvaG81REVlUy93eFhiaTZiajBMYVVNa0w1SW4wZVFSUWkvVXkwYmE4WURqOW94SjI0N2RIOG9rN0ZqMHZvSE0ydVUxeHVoR1MyaHd2K21ycnJYNHJPa1VhcmFoWU5teHlleHNGc0xCenNPUktEM0phOElIdkxlTk1pdXl5SkVOUHVBSlVQWDZDeEIxQ0V6Vjl3Q2hwUVBINFpZaWZDRmhMRjFJUXQ4NlpQeDYyZkdpMUVkMHI3dDBuZnNWeUMxKzJ3bGVtUE0vYUlrNGdoamx0VEtPRkhmVkkybmNiU2RBUWVDMVRPOXZxNnBUUDZvSjR6WEJkS2picTRzczkzbzVRaXNQTDBaeTVDVnN4b3lNaUIzV0lRb29UUk1xckZRSTFoaXlIb3RzMkZ6eXk4NFk3V3dZTFg5ek1JVHJZbjdLTWpwQWk5QkNGYThkZFZhOE1WQnNtOEcxOVlBZmtlQ0o1RC9OUkNFOEFsRVhITWtNZWk5TVdEVTdZSWp0UnQ0Q0ZTYy9hTnhjRmpsYmh2K1pRaEZ0S2p6ZG9LK3ZDRjgybEM2NnNoeHBFK3R1VkoxWkhtUDUwN1pta01sQ0NhaUlQcU1DcWNJWlVXUnhnVkxxVi9CUktLdEc2Mnk0Y2tqdnBNNkRIWWF5eS9RNGJUbUpFOGFpQ0RCa3NHaXJ4QmJRSjJQZXRYR1ZTWTBaSnozWW5GWmhiYndDaW01eVMvdXJGcnFEYm51d0pDRWF1Yk13Zk8vWWc1VDNYYythN3d3S2RuZURjTEc3UWFTK0hCWlZ5ZExUN0pVY2JQUnF1ZnBQR2xKTER2czUrY1lzVVBDVDdBWUlaa21NTXNyYVB1aVFoMVBJVHlJd0JDNTVXQU5ZREI3anRxa2huWFVTWDUvc3Q4UU1pK3NJZmxEZkVtYjFpQWhXZ1RlNE8xckFQZ01CNFJtR1VtR3plVWhRVlVxZEl3RWRCdVUvekVSbWEyWk9KVmhQNWFjd3RvMUtwY0VweWdyOTFOeTgrOXhtUytHSElmWHEzWnBFQUwvdWtkUnYrS2YxSWdNcXdETzhpdXRHSnNvRXFNSHFOUXJHNThkeGlyRmRXN0h4dWcrL1BNVkpRb3NVbmh3YWdYVVJKZC84aTRFYk1xcDluWFBoZGJyZ1NOeUdycVErKzlpbXBzMXUvTGdqcDRSUVJlRXZacWFGWnczLzJJVkxuSW11V2x3azhWci9RKzNaaTdrbnJrMnZNaXg2Tk9CNjR1Y215QzJTTU51b0NmZmdUWXpTaGovRWNBVW1BTVRmaGxNS1phOVdMeC90MmNNWGdROTA2dlNKcGFqb2tqSGc0cE4veU8ramhlZHh1WGZ6eS91bHdaMHdOcm1vcGt3SGlHUWFyZTJ5MmhCTkNpQjZVYmR5dlNOaUZLcXkybXZmZk5OSEFLTmcwd3ZaOUhMbGZZd1p3TUJQWlUycHUvM050cE9pbUYvaVg5cEQ3MUxSTlV1ZFVCY2c1ZDFTRnpHdUJWMVNsZVozRHc5UE01WngwUUdIak5xd0VTdTVBVm9jTzVYaitsRWxBQUtaajhaSEdGZ3VSSXhMVkhzZXlweVpRMC85NFAvRGtvTHloWGhkb2puOHYrMTBMNkNwQVViRkpvd1N6ZGRCWVRQZ1YvT1VyTWQxT0VHVmxIdlV2d0RGU2M1Uk9iSmlvTU01dkhEYWlhbDdaUlZTT3c2R1cwb2ZiYjJTTUNFZEkyOHRYM0lNUnZveGp4UVhKRndzcGRTL291STdxakdUZjVnVGtaTHVNaTJRSXYzZHdXSXlwQ05LMEFPS0p2WXNZYkVYaDl6Tm04aEhLWTlqTUR5VzNFclRONFhiRGFpKzYxbFZTdmNDM3EwYnM2NXF1NXE3TXJuU0toaEg2VUdOVW1yTitJTWtwYlltZjlGWWpVcytKSjM4Q2t0dnJiT1BPbjRpMUIvU1lvcElsdk8wMjRSU0NkTFdlakpZMm1NZTFBbGlNNFlvcGphY3FyOUZhb3hQL0tzT205N01ScUdaSGJYenlSZEhXS3Y5ZWgwK2ZDcS9UcDAyR3FwS2Y5MklFK25UQjhFYVA4anFRdlVSWjdDcWI4a2Vtd2VIcnI5WEhxWEJ3ODVITXl5K2dxd1VocXUyUzNJOHVMM1l3cVpneXRxc1F1YVlvOURPeXhaK29XLzZXQmlwVHM3eHhpTnExL0NIYzVGOXFBOXp5QWtNSWl0bGdUelg1dVBjZ01PWlpiZ01pa0w0Nm83aEVTWEIvMkdkZmROV3hWUzF2MXQxU2gyWUlVSTJPOHBaakJIVDAxclBrTDdTeE5UYUxBcTVzdXhtV0xlc3JOZXBtb1crcWUvUmJHU1BOQmtobG5CcExpTHN5emJLVER5UkZRUEtLM0xIN0RZVmJhZlJQRXFqL1ExakFYMG1TQk95cEFhUXZ2VXNyYjNoWXNUaFhEQWtKQnJ6dHBmM2tTaVAyeXVFVVB1dDNybkc1M3pUTGR4SW9IeC93ZFZlMlNpOE04VjZUcGl6WG0rNmVRUHdBcjFvbitGZkVuZ0hkVldFMUJybEhqZ0dFeUlsaVFGSlB4YUVSTzkyMzd0eEc3WDZJNWZsVUlubnR6WWRxenJ4bEhrZ0ZMeWQ2QWh3amp0bGd0TEJGKzNlM1V3YlRDNjlvMExvU0RTdWhsK0VWQ213M2ZlZnBqckFrcU1RNTc2bFRvMWZ2WWlnUUdjVDUzd3NueFVNck5VWDA1eGtONG5FSU81TFB2TDdWS0k5NzBiRFlRQVZjMDdNUTdQc0ZqS2VmKzVkR2toUGdsWnd3MGVHalQyYnU5YTluY2x0TDIrZkRlNUhpWTNiTHhuUTNmS1d2UDhFUzdiS2pEOXJuNTZsRUFGbG5VTHNPQndlOEtSZndLb2Q5UFhKYW5FOEtMM2V4RXFYNFU2WlZQVi9URzY5ck9hUEVBV1NxKzlJcnNLdXJEenlqZ01LTmI3L0VGV2o3N3RVK1dkTkFJQnJQSHYxNW9LWHphNTk5M0VBUmtEcnZCcTUzdnV1Rk9HelhjS2lEb0tLK3JRMHVZNFBza0ZkTzJBMUtFZGg1RUFrU0duaUYraDNjMkVTRElDbDZUNGZ4ckROM3JWVnBjUVFsb1NraDBES2t5QjRNODVXWVFPelp1ZzZYOUUwN2ZidkwwZVJBcHNoc1Q3U0FtSm5XU1FtZHZ5a3kreEdzNXU2eFQrQWwza2tSbS94VWtCQVNJZmh2Rkk2VmxwRkw2YzA0ZlByYzdpOG9FS3VxVlF0Y2h3U1B6SmFzRnBWWXY0L2l6Z2JFQjNBV3VmMmlGcGMrQng1Uk9takt2Q3UyblZkdUJPMmR3QmlXWTBVMXd1T05PQVNaaTZ3OW1INGVGL2NRVlBGeDlIM21meUJQdnZhd2xuenorSHpHbXU1eTNwU01MdDU0M1FYbnFhQkFoeHJUUExXcFgwUGwvSEU2czQyTzVNdFluYVlOd1pFTEJCREkzSUZ6cEwzaUNORldlWGcyMlgrSnFnSTdMcWVlQThvSWpBMjJ4cnBJQkhJZnlSMjRLTnNVNjhtU0hYQUFZS0xvb2pQYnFtMHk5VjBsN3l0Z3QvQUVMdDRjYmk0a2Y0d25pY1dscDVVN1NmSkdYdGVXRDJKWVVRNEdzVXdtbFVWTEVhN2tnendrcnJBSjA0M0dJOWQ0RmFwUTdZb1grNDA3RWlYaDh2RUdhWHZjUk9vbjI5ZXZPanZITHNjY1A0bDdvdkppRVRRYnhhNHg4SUZ2YTMxV3FNelZYa3VuVHl6MUpiTHZDcE1Zd3N4VHlXemQ2bnFkbjJ1Y000aitRYzBtQ0FUZTVuL2ZFM3ZNVko4emdvdEUrclZzeW9nQlJWOGRWTisvU2s5ZCswYWcvWGxOcW5Fd3lWa1h0NHRSRExqa0psZmVmajBzWnBpMnVENHFoeVRxOUVXQ1JrTytYeW9lQ1RBZXZ5MkxuR2EzcW9sN1dHZC9yVXVDbDByeFVSK25jeUp5S2VVc3VZY0p1MmJkYzQwV05XNG91M0VwSitBOXg0U3NQMWk2WWpUY2NYRFhQL0I0OTdyaXJaY0pQVzlvV1pLald3aC9QUERTenI1ajNCSGx6TUFnRVhxbTcyTE9sbjR6VStBY3RCTDh6bUhhcnVCbWhiTWFSWHdlSTR6dWFBYXpENmFUclNJeGl4RmdZYUVaU2VZNG9NT3RCejMzRFprZ1pGZnl3OVZFUGFTdzRtNWs0SEw3Tzg4RXNtSWRGdW1ZMVJCWUNsZk9jOTRwTHY0VjFSSjVZTTNaVmZXUE5qYUVFL2x4ODZQSlBCU0JCQytKMGdZNmFseFZYOXpRWkRnZWd0TG13T0IwcUJhNkl1L3V4TisvRW9FTFFTL1Z6OVBqU1dDbTJ1WENqYzg5SWI0eHRDcjlBcG5wZ2lzVlZCRS96K0Z0N2JuZjRFNno3b0xuRXRWWW9Qa25YclUvb1FBM21HOTFwZW5ranA0clZmMlpGRWp1WDIyN2U3VEh3TzFNL1Rhc2pvQml5YkdZUkJ4Ym5IdXZxZ3NoVTJwTDA2b3ZZYVlicVc2OWYxMUU3Vi9kcVQ4QmQrcExpaytId3VNK3NmYldvSGxMUTlCMlNMR0pNUUNLSjJPYjVTcENEN3RWMjRNUTFBc0tlQ29DZGQ3c2xCRENTajF0bGp2Sk92eXAxUGV2bk5DcFpoUWxtQWVXT3B1a1l6bnVQbVpPOWgwS3dMd3p6QVJSL0FWRzJNaXRRQlFIR1N4bFFCVGlKdHkrSTZXL2pYY25jNHZaeVJ0SElpWTJmTElseXJDRldCOFlha2xjNm8vNDFYZkdQb0tJRDJIOEdSaXdVMEpxY0JXYUthanE3bGNwUFl6c2pqVUhLZnVDbkI0NlZURnZLdUd6OXRNTmxOekFJckdTNnFDNGJLUkF4LzZPMHNDYkJsS1BtbDZiZnhVZHZ3TEVsRlV4c0hYV1ppQ1pEKzgxOGtPb04wbDZkSjB1ZTJTQzNPRyt4K3ZuVXJ5RzZVMTRlWmdlaE84Y1dadk1FMThXREs2YjdDVSt0QnBzYUZ6VGcrSUpFWFYxVVZHMmhMUjVYWFFzMXlZVmZDdUpPVmpZYUsxb1dNcWlJNmhDZTkxVFNaaE9Od1ZSbVR1WmpLZ1RpUWVZSEYwRkNLcnQrUmMxM09BVU5DelhvSlpkOGVWaG1FdVA1TWYyUm9oVUIreXlaaCttWXRrSkh3MTBoR3gvNi9Dc3dTTEk1MUNtSE14bnhicU5XdjhGdzVadUNOc2MwY1ZmTUxMYmR3Y09VSE1kR1cxZGk0YTk5b3M4ZmZsV1cwcUYvVWhtcElob0NBNDU4VGxVWnBWWU1Mb1VPcmNqWmhYOVIwMFlUWk11eEFFbThReEJPVk9iZkNaVVNtN3RnQ1pYbVhkb2ROWXB3TnFVZHd1Lys1T3dETmZqNzN0bXJXcnVQZHBvVjVkN21Od2s0RkRzM3RidHZpOTYrSnhSTW1xTXFJQ0kveUczR0pnMEd0KzMwM1NadndManpXa0JpcVFrSVdTYmhQYmhhcUVSOHd1V3FyWGI3Umo4RWliVTVkbjArZFpHSDBhak55bkltU0FhTnlReDF2a0JZMW9Id3k3WkY5RGd2clphdFJtOXRBSXNrSG9EMkN1em1odllpVEpyQlczL0RPUkJYeWpkaXQ1THZObWxuU2VZRTU2VjIwQ3VkVXhRaDFpbkg2TWZsbGdwbHlKZDJYb0dFakp3cy8waHpnWERmZ21YQ3AyUU5MdlhNdDEzM1lOL0JVTlovY0pYNUZUdjNRRytld2Q4cmVhQjZOc3puZDNzVEhlL0d0d1YzaVRFcjZRc3o2N3FPMnl3V3ZrOHNDL3Baa0FyZkZBZGRDaUFaay9mTTlEYkYzV2hRd0NQQVV5R1NuMVhxWHZ4Q1lndEp1VlNFOG9kSlJjZE92UXlXTkFtWGE3NXpkVHJFcXp6dUZpVXpQdGZXRTlZMGtmMUdGcXlydXFpYm9OTHl0TjJ0Uld4QXV4clU4aURuQThNMmNJYVRsekdvWUlBalpZN1lVcHlSZHk5Y3pZM1BPaWVmbm9OdDlXMkg1L3BTMUs2K3RVQzZyUmYyby9vNjZmdmRZbHp0a2JsbEFyVUtxRmNNOUpEQjQza1ErL2xvS3pINDVTU3g3aHptcDZ6NjAyUjF0d0YvMWN4Z04vNDFXeXp3aDVYenVFWlJ4UEtlaHN6L2NuZW85Ym52RU5UcXRXUnlRbWlKa2RaVGgxTHJ3OEZkSnpKZHB5R1NleEpLa0EwSVJJL3lQOFFVWndqQXp2ODRGNnUyaGtrS251NGcxbktmam5vUkVsR3VRR2pDU05DdXVENVQvSTNtWC9SNXF1T3M2RHJUam9PUnBFWkN3NzRIK0JnclQ1Mlp2aWNaeXRreldsdVFGQ2c1aGdBcEVzRFJLeitna3F5TTR3ZXlVamJrSkdoTnNLb2ZBcmhoaWIxb0lTUklBU0N1QmFTRDFPN0VEWFZrTFNxc2VjdzRuYkVzRG5ZdGZEYTZDbzBOTlJxNk9xQktMVEU5S2RFdWhUbU5tMWp3WDFLVU5sanRVMW5vM09vd3dMMXRpNGkvR2pHK0xQUjc4b0g3VjRqeFpJK3cyd1oxelVQNjFER2g2QkJKMS9FT21QcXVoaFNDY1lXY0dBTjZSWHZGVzg0UzNqS0pjVHFoT3lwV0Q5c0dBZjhNK0NZVUllVkxBQnpwblczeXhPNXpQOWxsSk1DanBlTS9SK1RRei93MmNJY0R1bHIveG4rMHNKQnJraG8wZm9Xam9CdVhwYll3NFVNT2l3dTlZRkYyd0lPVlVGdHY5ZlE4M1pYV0gyNmVsNnBaaElsNDc3T2VFbWsza1U1NGpMQ0QxZG81dDduYjZEOFVFc21Sd3pNc3NicHIzcjE2TFNjY0RNTzJ4TFB3THlWaXg1bHNpclBobnBvSldFeUpkUEJNTzdpSU1wRjJFa3A1QXNGVjJwMjJ6TGk5bU9jeVdMSG90YzAvdHEwdFlRS3dKVHQzUy9qblkwd3F4c1hab1NFT1R0Qnd2ODQvM1RDMXdIaElKSmlnV0RrRUNQOHdzOXlqcXp2eVlRSU82R2o0QXZDdmU4VjdSbDBVOG5FZm1uRUNRc3VjSmpyQzNURDhpektJUGdPZkZ5bHdWdllWWU8wcTBoeGJ2eEl2OWx1YnVraWo1Y294RitsOXFjNlkxbk5WcUpQL0NQblpmeEtaZEc0MURUT2s1d2hOVHl3KzdmZzhZV0VXUFcvUlBWdXRZdUNDNGVoYzJlNmVwM3VVbnU3Yi9tY1VuMk1uK2JmZ0lVTmVIdEJ2ZDZNQXBPT00xak1tUWs5U2N1eDh5d2sycldPR1NtazBNZ0creDBvUjRPTEwvNzc2SjAxRWxGeU5WZWQvdkZqazVvM3REbUU2cS9zWFZGVDJmaWNXUUZxWjAyQjBpenlzZHgySVBRRFBtUjMyb2JOeUdxRWFhQzJjd3BwSm90QmRoLzE2VTBVd1pzWlpLWnJjSzhmTTJZN3lFbDM3TzEzcUsyc0lzak1WdFpiOW5lZE1leW9wSlBHVlB1QkFwSWN0MDZpYnhDeml5MFA2QURwYVdPVFVhaE53QU1KWGhPRUkxNkowQ2xYc1N1aTV0dnV3UlJKVmFHQytmZlZTeEZHUDN1WVYyZG12eG8yWXZnTEc3TWJsU1NNNC9telUrUWRjcEU3a3U0V0JoUlRpczZhYjdtYUg3dFVIS3hCak5YYitIOEgvMk01VUtGSnJHeU54ZDhUaUtRT3VMakxNTk5kU0hEYnYxdGRHWmVwTTA0UVExb2V5TjBaU0ZzWnZxTFRiNTBxR1ZLQ1J4OTk4cEFFb1M4akxRMkV2aFhKVDN2RmFwVnNjSW84cFR6bGsrQVRUOXAxVnBBZzFpUk4zVkdkQlB2TWcvVlBxRlFHcWpkNjNvZnVmY1VsbEd2Qk11QzRKMjZUd0lKUmdSY2xCU2FwZFdGSThSbzVVYjVPT2tIRmtHZ1FPYTBZdWVKZ2J6QXd5M2Z0U3Vlc3FHSG4zQURtQkEzOHVHY2tCYkNQK3hjbnMyRW5sUU5zdWkrVkhJNHpPU3R4UkRINnNjc3pzeVpha2M0aUp3aGJOYWQ5dndSNi8zQ0p0dDZPRmpDMEVSQlFZMGVjTy9MR0tYR1dJYzFHRVBNM2xCVlhoNXlyVzRpSTBTMitwWWQ3bDBLaUErVEZENTl3M1psVnNnell2UEs1Rm5vdmw3M1hkaWxRbE9KQUQ4VWpUTTdsV3UxOEd6a0xMeTZMUG4zYjZZdEs3b2dnV0RhSkVOOVBPS1lkK2tZSU1DRSszVnhEbnB5RndMQ3pHRjRPRWJVRVFSSUg1dTRqNDI2alV4WFJSaUNjOHVwWkdRNi96bFdsd1IwaEVEdUFDWm8xMW1WanMyaGt6b1gvVjRsZWlYcU1Jczd4OW1jd2dpcjJwdVY2UzByc0NuYTk2MTltcnpBN2JtMXU3azdzTXg3Z0ZuTEppV0RoZTBtTGx3c2N0YWFYcWxsdFg3SVM4S2J6N1JTenpzdGx4SExrMWEwN25kaHlFMk55SlJqSVRWdDE1dUJ4U0dSNjNqdFppQnFrTUFnUm0wbzhTclhaNTRDeDJTNHd0eGVQS3RCTUVPT2dXUXdjL2pjNkNXZFRKbHkranorNXRRUlZTVDJJSXBTenVDcFd0aXZJTVlwc1lxUDZEVW5QdHd4VHczdXhCTW9CTUE3ODZRbUJrSFdNQzlBMVFreTBuM1I3RlhOUmxlVkNCRjdtUlBtbS91bzZqYlU3Sk5XZVNpMWdYa050dHBqVkd1cW05T3lRY1ErZS9PaGJZcjZNQzRyYjdyVnczK1EzQUNnSW5PaEtub05FblJvaVV5cCsvMGU5YmNIVHgwdVVEZTAyZENBdTlCSUYya3NqVXRzR1AvZXYxZE1BblNPcXAwa2x2NWJOalE0WjE1VGhTNy9yMkozQkluNVEzOEs5bTBPNjV6SG1FZG5YeHpOTGtoQXVTWDU1dVB1RzFZczRiQ2ZEa3FhQUs3QUtEbm9qTHVsYTE5OFRzYjhCSE9UK0lEaFJoaDdtTm1lcWtMTlcweldjR3BVeldZeUNiSmF3ZmhSUXV2Q29qOXpFelhSd1NMUGNXSG5KQzYyUjJTQXhzd3VEdjlPLzZKOVhQYVREU0hiUkRlZUpJSVg0ejczY0R3NUQ3UnJ4K0diMEpjTmVQVjRaZFZZM2dSd0tzM3JUbjdMczJkdEVJWkw2UXNsZUs5WEM1TkRrbGpIQjNLRzJGOW12MFNGMllVUEdSeHY4eWovRi9kM00rRHVrL3VWaHJQRDF0dWNnVGFobFRXWlNYSmlST0V2WTVyaXY4c1BsWHdaQ29tMERZNGhwNDNSeTczcCtIMFhBdnRRYjdTVG8yRVhQWjJicERjb25OTWdxR21DN2JRYlY1dysrZUhleUZXd0NjWU5Ga1BVWGFUWTFxYlBJc1MxQzJML1ZjOENrUkJYb3VYNGVZbDVwWFNOengvMVkzZG9JWlUrbUd6SGhmR3NlNVd0a3E4K3BMM2F2bHJoMXBVTEpWendrVVlvZitOSlBDbXFNMnllREgvR2cvWXdGaWFTWjBQeUpMYm0vOFB0dXJ6ZGZVV2h6Tkk3VExCL1FFTUUyM1AzcENMMTJkSUd0SW5iUERmalkxbUZzMTk3ODVLMFdxdkZER0NJOTF6YXl3YllEVDRaWmNRYzJ3dGloYUdRTThIRnpOMGZiaGRtNXlNZit3TStNbnhhbUxPQ2tlTkJXbEZvUmw0cXY2T1NPUEp1cXlBQ01TQXprSi9BZllGK3hYZjV6RFpid3l1K0EzSXN2S2JPZlJldnViZGN1UWRNRTBpTVAxUVhaUFJrRnRzZEJvcXRrUHNYajR1dUZzamZJbVlCbDhTUFVzTlFyZVBFOThKTS8vR0F6WDJyNnYxS0JhNFVQTy93UGhUQlFPSXNZdnpzRWxkV0I1STVFdWs4R21EempHSm9iN2hOVnd6N1FMZnBiSUtKTStzTUpJMWh3bzljODVDTnVpeGFVRlZzRWVHNDBVVUhJQXFuZ29qamxocXlhKzdvMmd0dHVVaGhYOU5oRkFSLzJnakRhNkd2WkhMYURxbnJDWkx1bldOL25mQW9vazlUSkZ2N3JHMjZRc1h3bndJejJ3cTV2dFcyT0MwTDU4NUcwd2Q0VVo5bEliSlRya0VFVi90d2dpd2tpOCtlY1VNK0x0VHlZQndiWlM0ZDlLUFdZRnY4ZTA5WUZkV2VYTXh3TEVZaGdnTXRwcG9RbEtzVWR3YWE5V3VZcmgyS2dLUUtIK2VPSWE5UzJPVmtCcC94SDRKeURLZkVLRW9TUmZOZDZwa1Bvd0hsTGx2ZDRoRjhFbzZNTGhrVnZ4cFlvSVNwUWkzN3Flc3d3QlhjNEFMd0NUMVp5QjQ0b1dZeTNxREYyRFhWdzhKY2RYdXNqd0FnZHRyZ3ljU2YxYktIU1htdm1JVzc2TVp6RXg3azBFTGVPRHBML01tVnRZMFRTMG1pczREcTNyOFllZ0x2TE9JS2oxMU16SDMwTkE3djB1eUQrMGJ4WXFOcW9SQmtwQTdIbWx1bnNtSE1NN1ZwU2JmWXN5eEV0MGsraytOMDlSck1IRWJoVFU1cjlqaHhiYVNNMFltZVJhK2pmQTRSQkY4RWVLS3BtTUllUUQrT2JHZHAxNlFtTDNFZmxHWnlsbnVZd3BqVjc4YTM1SlJVK1RkUyt3K09lOTQvMCtJQ0IvaThQdml2bW80TklFODhtNHFQWE1MR3FaQnhTVFBvbjVMTk91M3Npbkwvdk5JL3FMVndUTWFaUm5EbmZYQmViVDB4UXlxQ040NE4vTkZWbHRVL3d5UUwremtocGlZRWZMMk8rUWZ3N01vSWpGbjlyMWFUaTdWZ0ZBd3lKSXdHUFVybUNOL0tQZVFxQXRpQ3cxSllSdVRLcVk2M0dGbEk4SU5wWlVKM2toSmZLeE5yTFcwajB1bjV4VUVmOUdLcXE1NzhoTURjcExMSStKL3Jzck0xSFJJdHdIVjFwM2gySDkwaUFhb3FNMHhHWjd0NW1QaUpCV1VUeVA1UzdYYlhqL1dHNHlIT24za2tHZkorYkRhTW1jYVE3QWRmaUoxN2dXTUYxRHFaUVA3RE1TN3NjYVdFWnhSZC9CTm9Ua085SUhDcC9ZZWFsSUFlWFV1bUpMWjZ0OXNrQjVRR2FUWXJXV0NzazRvdnB0VHZXSUhacWY5dUM5NWFPaXdiN0NJcmgyVUVUcXRnUlk3VkN4UGFURUN3U3JuVWN0ZXpwY2IvbGg5NWMzNnhCNW9IS0V5TmNxSEU2N0Q0cU9EVkpiZ2d0ZHhtUi9Wd3FoV3JTZ00rNWFFbjFuaXVicjRldXdqMXFTWEtHVWhWVjdtQ0pGUkxaY0UvTjhXOXI4ZkcvNjNxRUZTa3IrZ2pQdzJUWkxGNVM1N1RYZ3RyQWwvdDZncXdVR3lKTmc1SVZNa3c1UDlBQUxrWDBLaXFFdk4vTDJRcWFMSUJCeXlUd0NMYXRQV24wOUMrZTdFL0JIMTJacUJHZ3hKc3g2SE50WFVoSUxWUzNqaVBkQjlSZm1GQ0IrWEZ2bTAxMDhua1YycTAyUUFZaW01R0YxOEVhK1FpVEpqQXhPb0VFRVdLb1VIYTRKdk4zMlNlTWJGemhjdVFwQ0tpUXl3MlIybnRTbld2SFhqd2hPa0t0SWtuTENPTG9pT0tabHlRb1RJRWZVMDRzMnRjTEhLTTJoQnJacTJpSG55cXNnL0RCV2UyT2Q3Mldia2JVd0p1TGwvV2N1ZzZyTDlzVFlzV1Z6em9zR0tkakhVaWFpaEpTcVNGTjV0aHJNWkNNMW1LbU9qMG80Q09MbkRSekpQa20xdFlmajh0LyszbUZOcmxRQkNBZnozTTJONWJKSU9IR3QwaUhTbCt6bVFwNS9KdUdPRFJCSUZuSU9VVVRyVytURmVlcko4S3REUTdYQjBxYmlMNllOWmJ0MFRxbW83TnZ0VFVDMGMvT1FsbGZEK2F4am05TEVkUzA4ZWxDankvUmtWYVRLRFpWZDVNaXBwd09YOVc4OWNubHBCUnpFTm9rcjA1NGRsSTNDTmtOWkFwdURtZDJVMkUyajBncFZqbDlWdmRnbytpK3lDSkJham5CU2VLUHhudUFaTUdkUkh6aTBHYWUvdzN1YzdEcWtXTDFhVng4dUFWZWhTbEF5MWxSQnZZR0orUDhQbndXUUZUSWVoazErT01KaWRabjZkYVg0K3I5Q2RjMi94QUdJSDh2cFV1d082blZZU3pBWVFyWWhwQUEydjhjVG45Qi9ha1lhTDhrcjhTZTVySmZsRy9SVjk3MXVibklnTmp3NWZ4aUYwR1NrU2VwVHpNQnlWZ00vc29jVmZ0RmU5SmNvaG1KV0ttNkQrS2dvQVQ3TG1lRnBhYnNQbTVtYytWRjN5dk4ydUdIc3VjTW8zNFFTRHpNb2F4U0IyUGJCUk9tREE5UVE1a3B2QUZCMTJxOUYydG5VMzMrRFFBcVBjOXIrdHVTM1NhOTBVTjUzUFhTbndTbnNScFdOMG9kS3k2ZFFOSnNRYXRkVXFiUmlsbnllS0dWN1RDNC95NXlORDZiNnp5d2xicTcybEhZTFc0V1BYUEtzWFU1eFZDU2JtV0E1NmtJaVhIYlUrMmVQVG5CZVBrSXF2amF4QXpnTHlnN0JwQVUrUnNzcGxCK3lEdFVNM3d3cnU5UjZQbDI5U29aWnZrZFlXNUtQdzIzR2FHM2ppZkJaenNTOE56dTZqRUZLeitzK0xkN3lmQzRsL2RtNDZsTkVmYTVDdklxMWVtOVJRR0VYQlA3Uk1McXV1UVlNZDJJeC9kVjVRMEp6T2VRc2toVXFqQjBNNXc1dTZzK2RQWG9lSTNOaE1qOVYxQ2tHZ2E5Y0diOEVMZWRSQTlhMmpWKzY0QWl6Ni96M3REV1NRSXRiVHVMcnFXNjdUVzhscWpBaE1od0g3dFVaeGRPZmtNb2JabzFyL0NuMXdQOE5ISFhQSFRPendPY0g1Y3lYYmNnVnplcmtkRzFkZmZ3QUxrWWxpNW0yOHpSRzAvd3ZJOVpWU3ZZTFkyajFDYUxtM05BQTU2L0MvcDZsQlk1UGM5Ni9Ld1pqS0VOVkRFUDV0Y1lUYWJsZDQwWjlZbFhCamNaTFQ0UU5tdE5rZ1ZGMkNZTEc3WlBQMzMzRk9FZHlMc1NyVzhES25JK3Q1WFZoSUliOVBRbk9wT2lncVNNaU93eE5vZUZiNEFLRWIrRkZYK0NaTGpkTHQxTitkUHVrcGkvQUxVWWFnbEZFTXR3blV3TXIzLzdJaXNqOHpGSG9nendlY2N3TDNOYVVCMUtrOUM0TklnY3Z5dGdaK2duekJLdHNrSVBHdFNGTmR1VDRrUFZTaFZSYjViNUo3alRvUHRuMk5FUlhOUW5VM0ttQ3hvUzA3WDhMdk5SM0d1cUJpelEwdUZxVGNZUTVsV1Q3VmZYd3NNaWRJcEJWV3FoaDBmeUZvVVlkOFhLRlJNcE54YnEvUFVOT3NuaHU0dTRBdTFLVi9PaGxqSkViSDhzVHg4ZXRMdEVGMnhKNXlkZE9qN3ZKSWh0T3I1Z0tYdWs4RTBzTFdNcmtWa2gzM0VGSURnWVM0SlZ0aW9FYUEvNWJZM2VxMy9rbC9TRkh5Sm1Ic0lqNGxLbWhORjk0ZWp1MVBSZXQ1YWI5ZENROUFUeCtXWWVBRVUzR1pKemQwMmlMUFZ0bW5mMGJhVnU3ZjVEaUp2bUc2aDlEN05ScFBKQnRQaWtPRkdFdktSUTZpRkk2QkhIdHZzcjBpZ3c3MzJOV0J4TEpmOXFKVmVmWXk2bUZmdEhKejZMREY4NVJIdXZlQVJhL1paMENaWFdjMlcycEd0TFRXMWV3STVzN1puMTFPWjdNR3kzUGk4Q0hzUldtZTcwWVBlUnlpbFFnSnhkbjNudk0reFJBbWc0aTNIQzVoYjkrRitCR1NYUFplSXpzZEJtN0xTc3QzUWxiVWVRdTUrY3R5ZUtSVEJ0U1B4eUtud1F1Q0VwQmlwcE5rcTlUWmwzOCtZdWk5amVoZTgwVGVSYmZKaUFsemZubEk5cWxYTjlxOSs0WUlUbzg2aExUeHBLRkdZM0RqVm5YcDVoTTZYaDlpaUdGU09IOEhPZ1R6VjRpTEljd2VBelMxZEY4ZUFYWXR5Z3pHWC9DN3dmbjlUYThGQ1FHWWFVcXFoSEp1cmlCRWt6K3piVFo2Y3BJSGE4NlZHN2V5L3pHSGYvRTRBSkhmcVBXaEpydklKV0swbmNaWnY5NmJNbDVJWVpFSi9XN3BMT2tkT2dvbnpLMVFsWk1qQ0dzWnZRWGZZTmt5VFQ0NzBHWEQxdTFaeDVxRkQ2NG1RR1pCLzM0UGl3TkZybVVIZGNxUklGcHdsaml1c01VaFFtWklnTTZ5Q01lZlM0ZGNjbVBEUFhYS0cyUzZmSVAvdC9aRnI5MmRuc1cxUGtNTUpjc3cwS1BlSGwvelZlV1RDeHc2WFZHc3IwNUdKNk5BOFpVL0RLdUZKcEdNay82bmNGSWFneDh5bE8xRGtUNkcrUmFsZXovMVZET1A4Q0tIZlkzOWNJWmowVWZpTEMwOHBUK01NbG5WTHVCMEF4b0JYTURPMnVPMzAwZDd2QytwaHNjMnBNNlRaaXpwOTMzeUlrN2FrbmQ5cmNVU1poMVJ4cTRIRWFzNlBDU2FMakdLWG1TQmRvVmttWVVEenllUFVjaGFyaDltRXBkT3dNd1lVMHZiS1JFMHdJb1dNS2hnczI0QkVKTStvU0luWktSdVhUR2paeElSQU9SSVNYYjl1WGJ1WWp6MytVdTJGRWhRbVhhTThrVk5XVTd5NmxKRGxDLzFKUUFhSHFMRUlGdE9hRk4yNFh3a2lycFN4ZlcvTDdMZWFYNldjSk5pOTZqUVVHWVcyS0M1QXBsMm8vV25CUkx1YzFPeXp5YUg3eW5ZUnJ6UEsyUE5QOVRuOGlHU0dKeGJXeEJlYWZVdjQveXhuMy80RmNpRHhpemlxbzJvZDR1Y1c4Nml5NlhIb0UwRGdOdkNLYXVBdHR2N1lVRml1bGRDcnhIZTNtUkgzL0phZURBdWtDUFRPQlE5VXBlV3loWnpUN2E1SXRCajFxR0FMUngxckRxL3g2MHdNd1NyQUYzd1NSS2FlRlJPTDZCcU05N3RoNnpKYytpRVZwRDZIM2gvRGk2aUN5bnFmZ3Q3dy9ZWnNiWSsxb002QWpwNEMyWTl0TjBkRENjNUFHUlgwdDFZVWRRQ1hqWHA0MlZwM1pneHBRR2tBUXhrUU51MjU2QnZQRDU3ZzhVSzhXQWxxMFZHZ3c5OGlvbGdXRDIvNG5SSUJFVzU5Y3NhNHRxWmRpV0dKMC9yb2lzbGhwRlRuNVZTekFZYTVwU3lTWU9kZnV5TmQ3WjhSUXRSNkxtcDkxQW9QdlQzeUFCQ3Q4UzVHQm5SSGcvcFIwd3NRTW5XV3NBS1B1RCtVWC9IcUx2d0xQRFI5bkRMTzYyUDVKMjU2VmQxYlZCakdtaWVhcmsya2RtVmZtUDVjNXIrblBSeWltd0tRVllhWURNMGZUS2N5c1NwdHlyUkJqN2NibnhLNDBlby9FMW8vZzVWbkNTL2YxbkN0ZEh0UllTT1AxYU94aVZvaXNJNlhFc1gySjhvWHFEQUorNGh5czRxRzVMZ01QM0cydUY2Uk5SbEZXYjIvOXo2UWxzdG1YTUhwekdlQkVjMmxTT3B1N0M1L2tPWmxuK1J2OXQrVmdqTkFtaXhxTytjRllhSWw1TXBxcC93cHhaTW8xbndNTVdTWW80a09FRldaaFBWL0tMVDVRU2svU09qQ3dIei9jTm9nekd2d3VPK0JjY25QVzcycUF4azE1UUVqbStpNlh6QkxKZlpUcmFmdW1mYXowVnk3RzJocjJpeVdCdnh2SktxZE5nRC83M2xlbUJoNDBXd0NJellESFh6M0ptZHlTRnpBUnFOZmd4MzB6Vk9sVlpOaUJLTkVkTE5hVmZYYTZzaGxiUDVyNFZ6aDBuT1c4SmJsbVpXV0JOQVJsRVE2YzlvOW12TFhYcHJQUDlYbklDT3NOREhFVGZVMzhxSGxvRlVDc1pCWnVLTWJkaXQ4Zk91KzVSTkN1bEZjRkQvOHUva3IrQ3IzQmNROGY2M2tHVmQ1eVdyaTBFV1Bjam8vN012ejFnL3g0bCswNGJzMGVMZVp0QnkyUFhBYTNYY1ordXQwS3hybkFhbEVtQVFsRmlYKzNneld0UGVjY0xreUsyM0YzMG9xYlJLOTkwSWlsVlN6RW9CNmFPMmVEOW5Ha3A0MXdqTytPSEU5Q2hxT3dtZWlSVUZFNnBBQk1hcDJmbjFuTmdnQ21PazRLd2tldW9nTU54SUJwdUQ1T21reVJTYUI2Mk1oSk84ZTU2ejJUWWo1TC92V2hhS3g0Y1VVbDVQQ1k2dXQ2SVR5Qytkek9oQk5PNWlGdlVlWCthTURQZi9LT204bWZyTTRROGF6THJvTnQ4NFV6ZHlDdG9PYlVGNXhZbStGOUxBTXFzeXEzcE9wb3ljMTl4UUxROGE3bTBTb3RxWDE3SGdsOEk0byt0UmJINE82R2JrQlV3ZGtkQytPQm5sR21GMWphMlFOUThRRUt0OG1tZkt2Z05HQTBiek5MRE5GV3orRjBnZmVQbUM0Q05sdzlXalhVVTh5SERXakVjbjdxeXlUSm0xSzh1TUttbWVPeHZPdTR2MkR0YkcrWkcrYWY0WDk5Ull2TWh0THMyb2QyaHVLSzc1czVRbk4xMzMzR3RibktmR0FmUnNQL0REUHJtMWw4M0tTdHJ4RDZrNWZOQWxicXB2WnA4U0pZNFg5MmpWMU9FSWRON2pGL01lQTNrRWdHNXJ4SjE1d0g5OWtBMUFRY1RCVDNmOEU1TTRZNjNJMSs1TktGK1hhUGp5dWVzYTlFU0xSY2RnNytWT1pYK01FMnlDdFVaQ1lsdkpmWjlHRjlwV2Y2SXVlT0JtTFVJdEFwSXhYbHJTM00zd0ZzTitpWE1NV3dycUpyWVVzN1B4NEFOWVlSNmZJVmRZVDlBNlYzZjFrYjFaREpyV2FxRWZFaEpQT2o4c0ZwWEUyT1gyR2ZlQVJ4dG9uZU1MNzhtQVk4ZVBYc0lzMTR4aFdzMGNuK2JlWGpCdVV1SWkzVDRnelpZMWVDamZkZXBFZFp4YmFUdFNrRzJBQlh6WDEzaTJBNnZMZ3BCU3dLNU5kSkZIVlgzcnJUcWVCQlB1dWx2WjU5VEtMSDRmbG4zK0lNZW1pY0tZUmJwKzVyOFMxKzliK3ZTK1piNHM0dkFSUTJWVGdHWWNYSDQ3Z3lWT0FMZ2JIK3BwUWhPYnJzTVNTb3A3dnVBVnljYVZwbHN1c0N0YWthQ283Z1VVYzJGK0gvRUsxTmRZVlUvZTIyUE9xNmhGZXlvaFZETUJyZFJvaXdiUm9RWDV1WEMvRkRodXp6ZjhhNnBJWXpHMklTWFhiNE81Qkc1Q2ZEYjZmV2xzSkRaa1g0NDJzc2xNd2F6WVo3MzYwaVpqajZlMFNrOGFuRGhUYlo4dzJoN1dFSjVTWWR2UEVmdi9MeEFvR2pMa2NCcjdwaVpTNTRRRnl2d1l6N0tJQWkvZXljbEplWDRsRGVZZ3FLR2YwVGVDVHRaM291cG5HSVkzRWdRRDRYMWNES0g1dDVwZVhYZFZ1d3FDekIvemMzejVIYWQvc0I4NnVQRm8xZlpsWmNpeXlCTWdzaDRGUkNBekdYNjhmbXlueVVka2xSdjUvZWlHbGZNN2dLcFlBSy9VYjdHUnRsdmRESlJ3blVwc2w3bmRjNHlOQ2ZYUHpuYnlaRjZWYTFuTkJmY2lrYzlrZEVESENYckppaEVnYmdwOTZtY2FOS1loVVozanp1N05hQWpjMytUdVQxRWk3cEhJNDRqY1dGdUg2alJobmppZFRXeEMxcG16N3RKMEhtSWhiWThXcUhROWxZays2d2pVamZEZEt3c1E3VzUvOGd3cVRZR2FJVXRQaXVCQ1NjSEs3MTNpazRFRFBSa2w2YThYMHFPYzZ4YnFybjV3OTdzOS9ma0xpSUpGdXo3QWliYnNUMTFjVllnTXVaZnpyMmhKVG5LUy9QWElzSWJEYlhVcCtlNzgzWk1mYVMzV0NJdzZDVXlNUTdWOUdzYlZQK2EyR3RlWmJUWmw0cDdoZ0NCTFEvSTh0cjFybmJYWjRibkxTcDFVUHVBUlVwb242dXduM3plRmtFN21mNHRTdDhrSTRscVl6VVBveXpPZWNpYmIzTFB5KzViSUEzdHppd3NwelJqSG9DaXBUaGx5RXcwelArWkl6bERtK0ZBWTVpVmJReTY0NUhxYkFXajJYZTlGUlZDQkUxZmd1TDBYbDY3NzRPQ09sVDJDdHZwL2pqZE8yRVhXRml1dkhKRHhhai91djcvQkpFdUtBbGNhNC9OamhBdEtvNlFjbG4vYUh4dEswLy9QVTg5dk12OVlUdFNZVnBDS0pteXRYSjJYOXZGODBMV2NCMUMzM3I4UFpxeDhxRXV4WXQyTXJOc3VPcHE3a2FIdTVTQnBRdldoZHBkTDhOS0M0NlIybzA5aEJqRWNab2N6Z3paY1l5RHZtT2hPeVdrZVQwM2VrZWlBdjdtenZDMkVCbFYxMW8wQVhoMXpVNTJGcWFQaVIxWTU1M25VenhEUURNMmhxZFNnVTk3NkVuUmxCbUUrbmVpNmcwT3NjMjlGYmphQjVGRkc2QlVpbEQ1RGhyK2JnU3lJNzZsNE9rN0x2cjk5SytnbzJIQkFZVTBtMHE0ekY5c1hBaExjR1VDUlFRZEJqNEt1MXN6Z2p0azE0VUFPdDdGaFlYY01PZ1BKVWl2K2Q0VERJZm1GOXVBWHpYUmNabklLYm81ejkyRlY3V2d3OXB2OVE5TDZrY0R4NkZsZXh5N0drWm1CM2RXbkJrS0pEbXFEZGZZdVE4MkhiUTNzdnJJbmlETjFqSkNsSEFKa0R6ZUQxcmFOWTVkQXhFcTBSeWRiY3kwMFA3NlZmZUpkOHJtSjhqUkhKWjhFenNLdTBqdDFESTVmMWJYWkVtSUlRaWVkbi9TdXNaaHBBRHMxd2NCaHdUYTc5M1FYMEJ1UFd0R29hcmx0Q05KU1NnOVhMV3VEZ1pHVGp3UnM1cDVPemN1WEU2bUxPSlA5ZzJFWmc4RXE2ekt6U0JXU3pENEhONnZwMFR2b0E1TlBETWp0b1Vlb3k5eGdFV2owYUtzL0NCaEFrc3YxV0ZsU0hGUERINVNrWW5GdExoY3BXTnFpSzByVE5QU2dhRnZPUEgyK28rbEIraHRJd2lVd000NFpYblo5djNWbXBJYjVVT0Rjak01Y0dNR2hrNThNWDdDeHZiNHRHaHByQVZBS0l2OGlvUUlTQlI1enFZOW9rSnlxSWZPZGNya0NPbTRXUytWeStPMWFlQnEzZ3hsMFNFWlp6MEtIczBwMktJQUlTbkNiSUNWeUo3QnBCWEo2Z21RM3UxQ29odTdQdWRhRXFGc09icUhLaG1KaHVTaGxZbTRwM3NEYXNpZmJ0ZTBJQTUyK3ltNVRSbElCTEx1OTBDaEswbStGYUgzcEg0NWVKZVJmTHIzTzcvVmpFeDJRQjNIVFBuQjRXdEVEeHlEL242ak4xMUhqcURNTUlkR2NKemVJcEwxcDB1Z3grbDB6ZG9HRVNmZmZNbzUwZkZHQjFxb3grdTdQbUVzR3pGTHJKbGdLMXJySE5PdEp1ckt0K01ZNEt5a3l6NlhkY09SQWpxYXZ5ZEV1T3RZWEwvRG5vbXU0WXgwMkMyd2NXRHByeVFrUG9hellVZk9rby9GeFZEeWlpK1VnTFpYOVF2bENDaXpEU24veXprUkcxUDE1R3RZOUZJRjhqaVd0Vk1jeTRhYlozZVRGaTB4S3BpSzB5TkJZRy90cVJWMVl4ODU2bFp2NnFGam1TdWRBMmMwUThJb1FxT1RSM3lQUThJL2Raa2Uzbzk2Yjl5VEhHc2RLTFc5OW5sNDRRNFM1UU0rV0dwdmRsOTFMQXROWm9DWWVtbG9mZEwvVWlmVW1WSENwb3ZmQlhRa1BIZWNRUVBrcnFTV0VjMHlKbDVuMk1HSDJybkdqZG9GREVRb3RWL05nc3BXaSs3bkw1MEtKMkNaSmY0TWZWeXMxdFZZRkEwbms5aDZNSHB2L0M0Y2VNL1lsTzM4bFp3T2RhbUJDalZDMlFzUExtb1I4Qnl5YzN6amNKbGpXMkdzc1lRQ1UvclNrMzNnN0pCSzluczNZdERJMkJHMzZ5bFVxa1I5S1hqbGFKaHA1aUxqVHJMeGpCMTNBYThSemRUVWVGMmVWcXlON1ZyZWc4MzBpdU5UMS9hMUo1ZDVZL0VNa3lselJCSy9ac1B3MzVTZ2hFNkpTZ3I1bnFaODVVeUdPdzVvNlZCYjBENUtjaFpsOGJJWFlyL2FCRjg1bFpKaC92TDhEN3hXUGcvRUJ1MTFKZXdyRldFQ29aRzM5VlpMbEx3N1BlSG5qNEZ2K1ZScXBjKy9qcHRGOGVZb0FINzYvWHVTdGRZY1pQaEFPWDFWbEZwRVNhZXdRek9qWkpabVVNc3NwZ1Arb1hGRVNadUl3c0piTmRhVDdCTWNqWWpqYkludnlQSmllYW5DeTJBU0poaHlRcjJZZjlZaE5zWkk4WE1yZGJWTHVzUmY0QXI5WElOcGZ4dTZoeDNIeVNRYTFjSU81aWJSVk0zanNTbVJiV1pHcXlvTGNiaFJOaWxLSUE5NVVUM0ZPeTJvaWtQaEpUZ2ZZdHNoeUI5c1dsSW1nOTVlSTk5WmFxb0hvR2wxeU9aaVcxZ3N3cW42blF5ZUZmcUNMWVFSVUJBQWV2REVydnZncTRucWZmY3ZIeTFYaGpwRGxWQk13WmdKa01LQlBwejR6SWNOemV4ZlI2YzYzZisyeEIrRlIxNEZBekFBVlowREV1b0J4STY5REl5cG16YkxPRDBCUHJnRkw2MlNIWjhFQVd2eDFDR2YyQkE4MTZuY1N5ei9HdkRpZzcyVmxZU3R5UVJNUWlySlR3dXdNMklEL2lqbC85bDU2OS9FRytmNmhnUXFTMVJFb1YyNzZzYlhmUUZ5Zno2dXhkL0p3VzRpSDloY2FyZDFiK0tOajdQWEY0SmZ6MWZ1NFNCbm8yQi9EVE1YTjIzQzJvdXptaHBTcmEwRmdvS1NIZDVwcWtaaGxKd21HMFpTY211QS92Q243cmtRM1Jwc1U3Ukl6aTRmU3ZSZlpvcmhkWHZ1UERVclNvRW9JT3YrRVpmczllSzAxeGpBZ0VUU1dXaDNERVREYnR5eGljYU02WXdlMEtMZXcrZDRXNFMxOU9RWld1Qkk2V2Z6US80RDd2S0dYdVVEMGZzMHNPayt6Y3ZUa1ByaUpsOWpjeUVKN1pJbVZobmJVaG1Ocy92WG9ITUNyNmUxU0lFblNaTFRaZE1aekgyc25iMmpRZDFXd202aWR2aXJaejFhYW9ZdHRFWVdRaG9EUFl1Y1JDUjdsZ2owajl1MUMwWDM2ZFpyVmo5ZDRxbDdaQ3NvUTVZUmprRG9PbGY2WjJCRkk4cnd1eHdOMk5hcE5MN0VPM3lNTk9ET3BMaWV2bGI0RFdDTCs1dDRJNEprbEc3eURyRzQ2aHNsRDhrSmZkOXJhRS91WUxmazFSeUc0UFh5cGEvdVFQWHVPRC9GWGtFWjA4RmFpS2xTL2VaSnVxMytVdEtKM054WmdBZGluNEFFQ3FaaDV3M3hNZUU2ZHlWeTEzOGw2aE1JSkZmU1NIVzZJbW5IZVY2Yno4OWdoSWg4ckxIb2xvYXJBeHdKaEtpaFJ6TkZnRWw5MzBabnRnZEg4SlRPM3RPZ2lYeFZkOXQ2eHdqMGtKMzR1QU5td2p2RGVjZWhrOFRHR1hxSXVPdDVhWXp0Ync3Q0drMlhKa3VnK3I1eVNtTzYycG5JY0lOWWRYV1ZJRW5oN3p0ckoxbGJybnVUYSsyVlBxWnorVjJLaVNBY2dxRFAyV1ZwVDBJMlo0QXZWNGsySVJMMnVvSHVleCtyc1NKQzFaQ3dIcmRSQUF1b09uSGM0N1paYnNQUHdHWXFZZG82MkVSWEt4aFEvRTZIYmdlMlpUMENBdWV2MHpjclR0b3F3TEFnekZ3Y25NMkEvUk5weEpORmQ3RWQyMUp4RW15azQwOWExOEErOWRBTS84SUhXVU9oa25qdENrOC9wZ0VYVDNWNUc5ZWhaMnd3ajlLcGxzM1o4MFZLNHFjdEkwY0ZWUDVxNkcrVDBsa0Q4VjRVTkd3WWxtenA2M0pEdUxoMWRaY2Q4WVFMWDdvMXl5ZjhtdzBabEdPbnJ6UFRpdUVvMWo0THpGTFQ5a1BnV0JXOUg3a0xtZkZDb1kvZmxXeU93K3p3VzZEaWtZbk9nQi9Pc2ZmMXY0Tm9vN1QxYzhFcTFxZWJEMW9BbTVidE90UTlsWDJERE9jY2lZNHd2YTdXWTN3UTMvWjFydzBSZVl3WExBNFV5YXlrUHQvMzZ4WVRBUk9Vak5wc2IraTZpdll3OGw5cm5IeUdFdlQ4dG9jb0h0QmgwTUdhWnRTNC9KSWdIUmloY1liU2ZDaHdSemZGd1R2RkFSbWl4YTFMRkxva3JrTldiMCs3Yk1ZNzk3NGVFMEhEMGgrd2NSSnJlWGMwdzYyMTJiUW9Zamc0Q1lyQjFnQk5KbXpKanFuQkZINDVBSTIzMzU3TlU4OFRqMVZXWnFpdE50VHBTMCtZNEttZkxoV0Nqb3VGQWdzcG1FZ2ZnMENoK2pScUpHN3FscHBiQXRTSGpVaXlmMmN2Y2RrYWNLQnVlK00xNndZVi9uSnRzcGlubjVRZFFPdzkyZWpjdGJzN1ZWcTM3ckdkYkhkTWxyQVVSRlFtanpTSEFoMDlZYXltWGE4amQxSElYTG03bnVaT0p0KyttSVl4dmw0blVHbDZMRzdua2JZbzRWUGwwOUJicFFtN3piTUdybVVoTUV6NE5pT29jQ0JNWC9sa3FOQkhvcGx6SlNETFNSZVQ2dHJDUkpxV3R3Zy9oTDArcXB5bCs2OTE1MW0zY1BiNWR1bTkxMms4Q25JMUV3WHdqQXFwL283NHJRTDhWVm5uNmN3YWtqcTVuN3dkelZRRThOZVp2ditOTXRBSVRSR0YxR3BRb0l4UCtvalp3aXB4WXJCQmFQR0pRVnlzUy9BRmF2ZUYyaGxUdERpVUV6Y3RxcXdjWE9TcUgrUEYyaGFUQ3JEM1A2OFB1bitrMVVWL25CN01YN29VT0tINSs1UXBicnFXZStBZThOWGZNQVlyck1SM3F1THNVYklBV3dOT1JEdmFkRW9hVWlieUNYc2tDUnAvZnlEOXJDRnNlOWsxOEVaZHNqdzNza1VTODl1WFA2aVMzTkY0T3hWNE0wekhTUDBPK2tLSHV4cXlzUDlmMXZFb0tMSExndUlRRWowZmtDYlBVYlE2QWR0NnNGL3JRd056dGkzdm5qY0tIelloQVdCM2ZrZDZsR3ZJaU5zWlAwRmpzK2crVCtQaGx6MnVJMkNkcVZmT3RFbENTM0k3bzRiWlpMMFg1bTJSMVh6S2U4VlpOODh2dFJPcWhrQWdEWmFmRWJwTDdLTmJEbTd6b0NaMHc0Vy8zYzUrODBnRXNTUDdXT0lMd0c5Q1hxQ2xEQXlBU281ZDFlT0grcXJBa1lyQ1pwRlBpTlN1UjBlS2daeDByN1Z3Mms3SG1LOW4yRHA3NWdydUFWK3VlSzlNcHo0ZGM2RFFTRUJaQy9lNkdzS2ZjV0NVczlOVE50RkcxWlZBUkVYRXhoRTdzNGFTbWJZZW1kYzVaV1ArcU9rNFdRKyt0ZVhCcDljTnE3TllkOGVjR1hJN0V6NUxCNmlTUzBuZnZDNFdzV2d2RWhmMnU5RTRXWjByd3FCTEVjNEwvbWhSaDREcEF6OGovTmJzYVlaYkVzQ2NyaTMwdU9SRWU4bTUraWhseDlmZXAwVTl6MU1FZFJHaFFKMUcwendGNlhCMy9lRFExN1Bnb3FDcnFCSjNsczhLM2p3VTdsSnB4VmsrZnFKVVAxY3JLNSthMkxEQ244dUpjc3M3YytKNWM4Wmo5VWlUL0Z3RG1YcC93RWtoN1JaRTVsREtZQWh0L0ZKMWh1QXZJUXR3Y3lIKzRINVlNQzhvYkxheDY1VExUYnNiMGJjRzc4bUljbkxDOEJKZjZ4YVRwOFVmeVNXQ01pdkhNNTB2TFVvaTZOako4elE0MW1ORnA2RWN2ZUorcnJFMU83eDI3QVEzV1hZNTBqdkEwcmc1OUpaRjgvUGhDR2xFbG5mYUl3SnlvTHFUWFQzSWhyVHo0SW1hZ09CejRxeElZaDRvWVdDdHR6RE90SXZNRkxZdW0vTHNUR0Fhc1Q4V3FEVXFSWkkvVFNYSG5hbmNnMHJOS0UvV2QrL0JMVFdpOXd4djFMZzVlUUxueGNMT1hIcklOWVc4eWtLZDZVdi9SZUZoQkFkdHVyVzlwV1ZqVFFHb1BGNDNEcWdyMWxjanJjMWFNRWt2YzU4VGZjdVk4UDZzc1BzbUNrZG11WFNJUzA3V1B2dXRQVUE2L1ZaTDN1NGUrRW1tc09ucmN5UlUxTUtkSlRXTnI3RG5GQmZJaVJWS2VZTk9Db2RtRXI5b3dtRmRRK1psNU1uU2JSOVNMeFpPUUg5VmQvUHJhSEJMaDRNUDFaK05kckN0ZTlHWHNQOHBEWWgyT0FNWUwzcUpTaGtCS1Z5dU02WUptay9mMyt6MmtVOHhWM295Q2tEU1JmMk9zZmkrQ1ByeFpQV3ZIaVFkREJRNEVTUWs0c3M1WHFBQzVtZ0xacjZaNWVWbGtXaHVjVVgrNVNzQzFYL0FVMGliTStGUGQ1RlM5VGV3N3lHZE4yVldCS2xUcmlhSXdJWHJ2ellkVWpmbjJiUGROOTk0K0tZNWl3dFRpKzNiV01ERVEvZXZZQzBUazljTm1neHNMZ1VSRGJOWkx3OEVpMVBBa21GSGIzMTJqZXkwSXBMTTc1dElTNU5MQ1VSZ2xUcnRvZWRSSDQ0b24vWHlpMExiU0dUTU5ybXRRTE1FRmRSdDVMbEt2bGZiTGUrOElac21QS1NHQmFNODhGcUIwdWliNy9WOTNjYXNOeHdZR1IxR2lQNEh0b1YxUkRGbmhYOVlJVEpNSVRXbC9CZ1doeXpIUHlZeEp6UjNmT2wyRXB5Umg4blFDZkVPWVNRTS9pRjZzblptTHprVmlPZUtRa25OQVRPODl3T0NrNjBCQWJjYnY2VmVPVVNaWGxJbzBGM1hlc2FPcFZPV1lBVmNpL0JuTWd1ZGNjOEl2cU10QlFadHovQlN4R1ROc1hNVDJlMHFYdTQ3VExBdzNOVXZYM2QzS05ucGRYR25WSWVOZXk3ZERFU2lWb1NvcUZlam1BdjR3NTcrSEJaZnlLQlgwK1o1WE4rTWthNi9FN3YrYTlzNmxPUUVHelo5TFRydzFrOXc3RWlqc3dZMWFYcGtDcU00Y1FaclFicVBtNWNXQTdKZDVESkZocDZERmd6b0JaN0hnN2E3VkVleGxxZHNqYk9VL0t4dGR4dnlHUWlPSFliQ1hmaWxiY1U4M1JncG5UVHJKRll0cnMrV1hnOXBEVjVjempGNFhRMGdPNktVUDlzaHFPL0ZoOUtKdmJYcWFZSDNWZ1pYVjlrSXY4NGZaVXpLTEhUMUVmZ3NRM2tRTnl1NW1hREgwUEJYdURmSndYR0N5SnhtVi9ZMUZFWUtub2psbi93WVRnZzBWM0NUWWZ4cnVBSW1kV3l5NkdIR1NGek93ak1xK2RVTXBLRThTSHp2cS9ocG9nK0xPc3dLblEvcVRoSlVxcWxkemhUcEttTm1nRTZLRjNJaXFJbWt4UlRLSTNCbE83cTlrRE1nd05KZ09VTHV0RlprdVNmTjR1OUQrZ2l1WURieklUWmZIV2VXK09rRkJnNUltdzliMW5rSWU4M2l4MmxKbU1mUWsxVFNWUjJzSWRNYnpUWjZ1ZHJSaGhDZHdFbXBVb1FWQXROa3RkTk42RFduVmRIZ0dzUUR2ZE9ULzIrRERzSXFhSHVBUGc1aDFJRkhLRlFpNG9OZzJBNU9XaTh6K2xiak05U2kvUzNLTi95RzJ3L1Y3cGRsdjYxeG5GWGVZUlVXVWdvbkJCMUVYV3JwQytYZldVTzc2dllxTE9Jdm9nQ0lWQzA5elNZVHF0V3dGQk1XemVCT29hUjM2K1JSbUY3bVN6OEh6ekhLdThTWTN6b080SDdyZSt1Y3Y2QWNlQitlalpYbFQ4ZE44SXJaYlJ4ZHU0OXhuRmtQUkZZRHpTU1FsUGkxc0o1b1djSndQZ2xzQkdiWklBeXYxK01wUEFtbDQ5R0hydjhGMDI1NjFoRHFySDVGaVIwTnhmWTMyMWlMUmJ4bHdVVW5pcjU1RzdpTkNqaDRTa1VRd05LanQ0VktFUzRwMWZTK0lITFhiMktZaFlETWxpb3B1SXhxb1dlRFRmQ0lmS2lIRFIrOXB2Q01mSzErblNzb1VKK3RPQjg1K2RXVk5GUVJUMHovdVNablR6UXlMeVA2VllnbC92dHJjeXVXYndBdEtTeFovcXJOZmRRVXZGWjIwQStveWNhUGFOTGtYR3lOVDNjMSs1MVFwZVRlalYrYXV6ZVpwNk5XRzZDaFA4Z2NNb0FxTkJ3QnlzNXoxL0JJZytNYXd0bUVTK05qQVJnUHZtTWtCd1JSTndMaDUycGQ1MFZjWTdIWGdYWGQ3WjY1UE9ESmNyajJMMCtKUDhhbHhSNjNuU2tnQUdnZHpjSFVvbHFBT09rR29WNDkvZis2OW83L3FnQVRZM0x4L3hvZkY0eGR4dUtmVWlqWSt3elM4d204bndQWW1oNUhFdTQzeG80dE43aEk0NHRvZnQ0NjQ3L2MvYkYxSVVnUUdLVUZpYTcxdndEVk5XT1YyVW1pM0FzMVpYeTFMeWFpS0cvNE1MamI3YXRmRGwvTElzM3dSd0l3Z2RheGxjWVBPZTFEd0VMZitpQTZKNGowWW12OVRzVDhrZGZGOHQvTGJ5ZUtwaDRuQTlBSzBkYnBVTkc3bnJZYTFBYzhsVEY3MDBWNVJhcjdlaC82dnBCRVM5djA2clIydlJPUHRZSkdxWUdRYkxWLzNBd2U4VUNETHhDVkNBazNiU29KbDVXMjRaOHBXV01ubDhVbG1GbnpXV3VOSHEzVUhnQkd5emR1L01NLzJrTHNHVHpQUXJ5TTB0UXZiTEd5d2ZyUGtLdFlSd004NTNFdisvNGNseTN1dXdtZXJkeVhTREtqeit6RzdHdnhmays0MmwyOVFaazNBZDRHSndlejBKaHk2dU94c0FFbDlXc2JXdE9ZdGgwUFZEWUNCS0orbXJoTTJNZWhHNTE4MFpvNlNjTmJsUEdjZWJiYTExNjQ2K1REcS91RU1rWE9JZTNFNVlDRzVON1lpTmJ4WGQ3MzljUS9vQzFlQzQvcURwNTVmSWp5aU1EdEpDdWJIMVA4SlYwV21TVkluOFYwRFdPY2pkYldycUxJNWFEWTFqYk1xaFpQNy9lMldJcGxubjdqNEJQcnJTZXdSMkxoa3gwMjBmNG1Zd1VneC9DYkxnVjY2RmN3eWpzRHlrdWEvbHVNZXNSWVl6dlAwN2lUc3hCSkp2d1VVQS9ZVmdRZFhxcHcvQ3RCZnU0Q3Y5ZmVmZVQvTHpCcFJ5UGZ1M011alpoUnMrSjFWZzBTc21sWmpZOGZZSEh5MzJ0YVlwMUdLMFpaWDdBeldpQm9TVXg0TjlRa1BPbEhrTjFOV3p2d2luQmdrMmdvUEN2MVZLNU41cDA1QnQxYUFFZzFPRGtJQitwakxXaURlQnMvMDU5NGI5ZE9aK3JnZzUvR3ZBNjJiMCtSOGN1UzhTQnZSeWlOa0Zqb2VsZjRGam1ORnUyYWZoVnBnWkEyQ2ZNek5LT29wck5TZVhxRkNjQjQwb28rQkpvZGFnU0p6Ym1Jb0dkMnNvdTY2ODlqSlRiWEY3MXIzUUI0SUZqSkxiMjN0N3AwWkY2S0xxSnh0VEdNRFRwY280UjZ5QmZ3TU96ZTJ0NGszdWI4TTRJS01PakVYdDdJZGxieDBNYjVxREFib2o0bVpMKzhjVHh4YTl4RjF1V3hidjNjUFBwSk5YR3UxTDY5VnNBdzY0WFZ3OWRiYnhFeXYwa1hUTTBXUFVoMmwrd3lJNVFIY1MyckgrajZYVnBDdmgrbVdCdWtTTTRMbEljWC80SUk1SHJWTnRHczgySHlDUjdOQUloOGpZUWwyMHJFNXN5OWMxQ0ZTbzNkdytaQmJsc0QrSGxmNXdNdTFCYXFWeDMxb2NySnR3OFlMNzJIbXFNYUR0WHg2NndoQm03Ymp3WjRESjVTcXh5S0Yza3BOVEM2aVpNWFVCUWtvRStKcFBnRXpYYkpjWjkzWVhaTlUxTlBQOUJoVzFMdkFzYkpYVTdDbXRHNVZ4L3B2c3BESzNucnZ5OWhSZ2RkYy9CQnRVazJBRlpHV1RzTkhMR0Y4SWpDYTVtRlNXa1F0SnJ2ZEpaSHVuSVFjdXc0Umt6dVF0bFVtRmZtc0J1QXI2aElwVDVaSm93dHJjajIvdmIvdG1hbHRJSkg3NXc2aDBvRUlWeG83RUJWRHcrLzFMdWtHbGkzcldESndKeDlVZk9mRENXMkdaWFEvWVlqNjBwRmpqRkNzSkRXSnRhc2ZzQWR5WnhMVm1VUmhSYTRGNXJseTJoWlVrNkdQUDZOai9JM2FrRGhSS0FBMUlxK1pjcHpuM3F5a1RrL3Z3Qlo4b3FpUUt1eXpoY1B2QXl6eitIckxlZDR2UnRUVE9zODNtVUwydzh2L3A0VjhTOWJVVkRYU0RmdS80eDhYNitDYU5WSXkzdXVGdmtRL3BEMWZGSmlvWERPay94b0pvTlhJWkVONGlFSFJ2OWFQY2dNWk9UN1pueTQvSXlhaUxJZTRoWG1iYytVbll2bHFmNGpBd2M2cXFOOHMxU2dMVDNyQmxKYkw3dmxiOGZvQXRFbSs4UkVlVHNIYXFyZmtDb1ZVWWN0RHhoUGxMYmZwK2VNNVpibmdWMHJwbCs5a3pacmJnK0REWmo4ckFrNnJKbUN5UHBxYXNVTDJGbzZVWUJBZWFBaE5IVytiVG5oWEkxS2x2SUpHRWpBOVZzTXNWbXEvWDlxTTJTdjJmUGUwRWEwUDhBaDdtd0VtNXBlbU5ER1hLU0Q5anJkY1A0ZlZpV1AzV1QySHFQM3ozZUVQWDF4R2grUVFWSWZTd0RoU2pnanBJcjIxbkZtcWVNaFF2azhNdWJWN0Fuam1SSWlNTVZwbEovMnk1SWtGblVPclphL0I0UzhpL0Y5Z05IWVNFMmVDL0dmazUwSGl1TWZOZ0tTdlpKS0Q5QTd3SHFOV3dtWStiVE5sdXk2MVNMSGRVS0JqejJ4V1Vqd1IvYnZXNFUvVGI1UzMwNW4wQXhSY1J0LzFnWmdzcVZobzZ3U1oyZ21aK01COHIzcm8xNGZRUEFqUlZzbVNPTUNUbEZucTVmclBrbGZFQzR0WFNWcm5pYnpRUHRPVnBTcjh1T1c0TXdTY0hEdTJCNE5yRDcyaEh2cnVpZFFIZlA0SkFNOGcwY1dHcURNekZXSlpuc3A3QlFmQmIrTmcwQ2dheGUvV3BiM0UvSGFCNWQzMGprUnNkeU9ySEdwWWFtVmN4SnFoTjBsbllRcG1udXFxcFZQWGpNc2VodktHZUpJQ04vNHllUStYY1JKYUx0R3h3Z3FueENqQlRRcUt1Z05VSytVckVqcUJZSUFuSzcva3ByeVBtekhxNUxSampzZ2ZadGhCK0MyV2xGVDhQdnJVa2p3ajFrVUVYK2VnTVdnVmo4bnk4Z0pyR09KV3ZyUkVHbzhkQlAvemFjVkt6bmNhQ3NZdjgzZldiR2pBT3FEVEUzQ3ZpM0JLak4vYlRXK0FxRWorbDJMSWpYMDRLMXc4UjRuU2xXMEx3RHVJYjlmaW9id1BEZEpGdSt2MTVzRHFSdEcwRmN5b1hqQ3Y0L3pYRE5aeVl1WVpsQjJEQkZZS3lCcW9mUjNQem83WjlQUU9NT2ZHbjA1aElNcHF2Q3J0OWpObXJIWHhBQlIwQTFZamdWNkRoUy9PbkJvMGZrREh1ZUxlR2pPUnNyUW5jK2tJZG1JYmd6ampIRjlsYmt5VWpxNHNpVWFyWUNuWU52dkdMYkRmRk1ZeUlPcUJNYmN1eEJvSStUc2RiNlJqa0hvRDVzWkovRXdKckViRWs1WnkrbDR0Z3BGalFjS0VqS0V3U0ovb01jejNDbEtMZGtDWjZnZGlLRWQ0cjN4QVBLVjNLZnROY1BjQkI0Z0F3a2F6cnFXdkVoZ0FGcGpNNVlHU05CV0dXUUQxVndIQ1RYVkJiYjcwcm42a1V5aEpENEtmNklQZm9RN1EyTk9jNW16dU53VGdDb01xWkp4OVBNOUVHcGdTUEY5MFBEWDZSOFl4NWUyRFVCb0xPakNXNU40cmpMOC90a2ZwM0ZWQ0JCQnlhdWdzQTNseFdhMHV2WmsySWJVWWIvTUVGdGFEbElZMTdvZTdOWlBweUJjV25aL3hwWCs2VFBub0hPRXdHcmdSVGVHc0N1S3MvZVdpVm1zRkZSd2x0WHU4SXhHcmVubTRxRmtLaEJqYlFrY254MlBUZDArQkF6VjZzS01kRWRCN0lDcVBLeU5iaS94M3ozazduT0dHc29xb01oaUcwMkFBemU1bzVSb0Y4UWZVamFaRk96ZEYwWklzUUE0c01IdkVoUmlWckE0N2gyY0o1V1pucGJtSDA2TGxzT1kvRmcrVU1ES0ZtTURDQ3BSTkk4d3RkajczNWtFUzBBbkRDVll5ZmRNeURQRTBVSWlxeHZzL25kdkt6ZFBza2tOd2k2WE1laGs2MWVsKy9ZRlM4TENaTWR0WkNUSlQvNWFkWTR6eE9PZ1phWE44Q0xNdkhuWVdoYW9vNThEYnl1TCtQU0ZBTUw1Nm5NbTl0Nmg0UUNYTjFsTXRyVkxheng3b3dyaWkySmVKUVI5UDdHaWlORnNDVGsrdTg1RU80N0dPd2xzMmNoQmRRaXVzekNoTmtjZXJ6RW1pUEhnQUM2OUkyNFhRcGdseGJ2dFhCZW45VHpVVWI3THc2b1BwWUx1bTJYcGtOWlczYStpUDFEUEVER3pSRFRyVndLaW5uV3FwYkpsdjJZMWZ4ZFV5WGcrZmVEeEt4Vm9JSXprNUFtL2h3ZnlUTlVybEVCUGNncWNCNzdXUkwrNlN0VVdqM20rRmt5VmxnUFo5QkZIRTBBNEd0cmtlVUlsM0t6VnJhQXdwVmxHb0psMlUvT0RqNVJIZUNKUnhzZmtjcm15UDZFY3BLQjVneDB1SWNRQU56NXF0cXB6ek9jVHRiUGE4SjJjTnRKVnFIbmFYbWZtMTE2WEc1aHpjalUxZGw0eVBVTVRickIvcDJZNXpHODVPRDB1cEFLckFrcitVanJ5Z1Y3WXVRUUQ0bUxTb1NXZVdFaGxodk5pcDI3ZURvSTVITW92eWtqL1hXeHVxV2E4U1F5RlJkYkJkeis4T2hidjNEMXk3Ty9SYkJRcEU4YXlRMFJnS040aUpYVFVmdFk1YUppaFN1N1VtTk1vVkxmemhFOFBzRDZlK3BmUWd6TGM5TnIwNGFhUXlmYitheHNhMWY2LzBXUzN3eWt0UVZHM1lpRGUwam9uYjBETU4zVnNYZEZjQ29GaGlsNVAyZEJ5eHZJL0ZBL3IzS3I2OVhwTmhvT2JIWWk0OTdqWFJvWVN1ZEJZTzBWUDhyQjRIb2tiS0NHR0hxOVQ5Zkk0VDdiNTU0emtkTFVUZjhsb21ubUNzUXlYT3F4Q3pVQ0JOT3VDb0lBNE1PRnMwZ2VlK0dhV09sQmNzUWwrcCtZN2x4NGtQa2kxUVB6NjVVMTFBTlhvR2Rsa2l3SGgwUEhHUEhQZXhSRWhlNlp2TzRQTkJGQkFqZW5HL3NBcFhKbVhYSmIyNHZoWkd1V2QyRTdVU0IwODk1Yk4yZlNsVzQxSkdNYTEvS2lWMGpNUmVuK0xhRnNrTElrNFhNczJibEc1ZXBQVkhobXVsWi9zVER4SUZuYjFlQUoyNTBmKy9zVWtiNndyWDh5MGxWOTAwV3Z6SEZJTlRqeGIwN3ZPZVppdlFmQWdUM2djZGJOaTA3ZFNDNjl0aW1TYWlMTm5GZWZacWZqUE9CdUVBWE5qU3pHaGtwaEV4UDMrVWtjbWE0eEx3UHFvVi9IMVZtUlR0eXl3SDZzNjkrVmtybllQYUtqMXNMQWhIbmhtb3duRnF4ZGZhLzV1MmxERkNEMno4WFgwdFY0NmhZeDBSMndBZUdrTVV6QVpLclRhaGloSkVsT2dSYVY4Rm4weEgyZWlGT3locGFSYUtMMDExVE9LNXZuaEFyY0txM2lZaVZLREwrai9lbmYxcEdma3U0N01hODhHUUF2Mk5KQlc3SytTWlAzNkYvLzJRQUJBQm9BUUFBQk9RQkFBQThCQnprQ0FBQUFBQUVZQWNCQUFBSUFDUUlCQVFvQ0FBTUFHVlJvYVhNZ2FYTWdiMllnUm1sdVoyVnlJQ2czS1E9PTwvQkRCPgogICAgPC9CSVI+CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I+MTwvTWFqb3I+CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24+CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I+MTwvTWlub3I+CiAgICAgICAgPC9DQkVGRlZlcnNpb24+CiAgICAgICAgPEJJUkluZm8+CiAgICAgICAgICAgIDxJbnRlZ3JpdHk+ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8+CiAgICAgICAgPEJEQkluZm8+CiAgICAgICAgICAgIDxGb3JtYXQ+CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24+CiAgICAgICAgICAgICAgICA8VHlwZT43PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MVo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU+RmluZ2VyPC9UeXBlPgogICAgICAgICAgICA8U3VidHlwZT5MZWZ0IExpdHRsZUZpbmdlcjwvU3VidHlwZT4KICAgICAgICAgICAgPExldmVsPlJhdzwvTGV2ZWw+CiAgICAgICAgICAgIDxQdXJwb3NlPkVucm9sbDwvUHVycG9zZT4KICAgICAgICAgICAgPFF1YWxpdHk+CiAgICAgICAgICAgICAgICA8QWxnb3JpdGhtPgogICAgICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24+SE1BQzwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPlNIQS0yNTY8L1R5cGU+CiAgICAgICAgICAgICAgICA8L0FsZ29yaXRobT4KICAgICAgICAgICAgICAgIDxTY29yZT42ODwvU2NvcmU+CiAgICAgICAgICAgIDwvUXVhbGl0eT4KICAgICAgICA8L0JEQkluZm8+CiAgICAgICAgPEJEQj5Sa2xTQURBeU1BQUFBVWZwQUFFQkFRQUJSOWtINWd3Y0RCNFFBZ1FBQUFBQUFBRTdBRUFBRHdJQVFBSUFRQUlLQUFFQjlBSDBBZlFCOUFnRkhRRURBYmtBQVVkbkFBQUFER3BRSUNBTkNvY0tBQUFBRkdaMGVYQnFjRElnQUFBQUFHcHdNaUFBQUFCSGFuQXlhQUFBQUJacGFHUnlBQUFCdVFBQUFRTUFBUWNIQUFBQUFBQVBZMjlzY2dFQUFBQUFBQkVBQUFBYWNtVnpJQUFBQUJKeVpYTmptY29BQVpuS0FBRUFBQUFBQUFCcWNESmovMC8vVVFBcEFBQUFBQUVEQUFBQnVRQUFBQUFBQUFBQUFBQUJBd0FBQWJrQUFBQUFBQUFBQUFBQkJ3RUIvMlFBSXdBQlEzSmxZWFJ2Y2pvZ1NtRnpVR1Z5SUZabGNuTnBiMjRnTVM0NU1EQXVNZjlrQUJBQUFVVnVZMGxFT2tkU1FsUXdNZjlTQUF3QUFnQUpBQVVFQkFBQi8xd0FFMEJBU0VoUVNFaFFTRWhRU0VoUVNFaFEvNUFBQ2dBQUFBRkdid0FCLzVQZkczQVVONHo5RTlsc0hEbXZXMGJGemNhbmVoV3dQVUp6aDNSeExodVBBejJsckpVRnRZeHNmNnlmOHJtT2RSOWFsSTVieXY0aDFaYTlnSUNBOHBneWJJdlJsUTdjS0VGcTZkbDNVWndhdkxKZWdQRVE1VmdHeDJZQ1I0SlhhSE9vUXRVWDYrdUEvQWhBeUtMVEljblovMjZ3OC9oMjFYZHhQT3dNSmNWaGJYOTlEQlVyM1pBWnl2emZ4MVFBT2VlbmVUUE9BOFBURXFxZjFQbU9GMkpuRi91QW9WMEs4QnBUQUxhUmVQOGhJS0g2MWJvMElrWGxZeHZnenViUVV1NWtwSnhnMTgrVUVpb0laZGRBK21nQkh5U2c2T1VwanVPTkdKQ0c3M3hlcmdjUWt1STdNREorL2Q4NzZwSGpzb0RFNGp4SW9zT0cxKytaNDJ3NVdaeHhtZWQ1ZmgzUHoxT1dDRDdtU3JMWko3VzVpeTRLajVjVWdGUmw0bEVBend3QnV3S1NQWSszOGk3K2xjaU1hOU9jRFl3cHFlU3lkQ1VZZ0FQOFpaOFp0OHlBQXh1MncyYXlnWjgxeXFKRzRKaTk0TmxZWGp3ektRRktTaWxuK3FjOFB5ak5xS2o0SWFnQ2xPMGFWdU9MeEdCQTNPQlg2a3VCLzRmSUlrNmhNYzNXUmNlb1ZFNUpIMlZSYmJERzNCYTFkaVQreWNOYmZ5VkRaaE04RG43QUpmZmVzSk41WkVHL1BRRTVURTlkY29oRkw2RVBZZTVwYTlkeENWdTlVZFBxOWNPQjFSVTJRSEFJeGtibmcwOHR2em1MT1BQcFhGUFZycXVBZ2ZjM0JaaTk1VmgveVZPMUlKMlZPVkVWVGVabmhnZlI0NFBHNkxINWZyekdFVzFOcS9ZTFhRWEw5UEJqR2kvb2Z6Q1RCUUZLVGNsMjFXeUE4cnhib0g3N1ovRWFJR1hiZmVzR0VmUjJFTEtDVjZkRDlTbUFPZUFZd0FScnNwSGpneS9DWU1vUTZqWXZoaVNxQkVVb0dCci9HR1RhU3BLMmR3YUllb1FMUk8rRFJzZVpvSE9lNkdCMThmODRSSE5OR0tWQnpDck0wV2xwZzFWNTdkS2FaMkNqV0ttbGE4bVhDYlhOWUVnTkUwRmlQakZnTmM4UGg2UUkrbU1JVkRmSUI1YnA1ZTNqZDdNS0VNNFp4SGp0V2U0aThscEZVSklITVp4dzRUd3Bpd0RIc0tMZUloL1NiMkdCbVdqV2N6eVdFMVZtYnNxNEorWGpMcVNFR1JkTWd6NTBqUDhwMTF0T0NRWWpBeFRSTC81U0dXTG5TZ0piV2FVSHJYOWR6T1lWY1BOTGZTZ1UxUldJK2JpanZESmxNU21Dd0JCWTJWNVNvUXNLZVRkN1FGbnA1ak1sWjZ0OWU3U0ZYNDI0MFAxNEdiZ1pSNjJlaGVpclphaEVpQVdqay9jaUM4Q3Z6alVJYTZiNStuZmp2em0xQndiVFM5cFRlTTVVd25HamNhOXAyZ0pvUVJuQ1pRY0loWFN4b1o2aiszemdRZnIrZmVGdzZkYmRZUUZYV1EyZElDcCt4N3V4UlY5Mk9rOVRUcU5Rc2h1QXhHSWNNeEtVbXViTGEyODBqTXdkRGtkaStYTDN5QjVLUmZDQjB3YkZCRm9BUWlsMlV1cEVkY2k3YjlQSDhoNFZtc0VCRmNJeHV3bnREM2MrRDAvbWFhYmdkOThUQ05qUHVnbjQ2aVFSdEJjMTlrbnJsQ000VlB6bmw4NkEvUWg0dzlZS0VCanZYS3JQTkp5ODRwRDhOeWxob21jUGFDdGd4WTJPeFo3M3lDbGdMckgrSTk4MWRMTkkxSk5UM3pDbys4QnlYeU9OUmxROU5hRnpiMEV6MlBpUFNCMi9vN2FoQk1QdUxMWTUwS2dWdG5YR0xRN2RXUVI4ZG1MaE0rS2tEUVBLdE5tNGdOd2FPVHFWOTBXOEFJTzdabGlSaDF3bTVZK09WbDR2SDQ0M0ZaYmJyckNyWlEzVGdYWDdIUnVtTGdJbnE0QVVYcmtnTWdYd3h0QnZmMldHNXMzSHE3R1R5bUtobnNXSmlMRHk5NFBWYXZzYWo2QTFQd01xQmNYczJsZGVYOFRTM25XOHJrbDV4TXVvR3RXbmppeUtOQVB5K1RrUFhBT1pBUEM3ZS9yQUUwbFRDOHo1dlZIQU5lZWZFcitSRWd2OGpka1FHdWs0cncrREs2c1VNL2lRbDh1bmtubDUrbHIrQzdVeXV4NFJ2a2VwM1lFOHBJY2lVeE1vb3pzTFJzd01UUitMOE5zU0x0cHJBVzZ4T0ZlaDhyVVdneXFiaFQ1UE5QcUR6YTB3TVJuaGJRdHU0bTNqbHJPTnhOMmp5ZEY5VjQya2ExUXZjaFRPRDRUUXVxY2d4Uko0My8ybE1Td0xQbzFPZ1JkZEZXNndXajgyalBtVUFOMzBleDlDaThBUHNRY0RmMjBSQU1OVWNQaFI4VFpHMHdrMzNJMGgvd3l2Wko2ZXphU2JtOWtRWUFwYi9NbFdLeHVGT3hDTTJpUEtYMHVSdXpWeWc1TjZFcHJ2Z3laN2JCNjIxZDZqZk5YVGNvaU8yc28yZEVmMVQ2UHlBSURuNUhRQ1lUTGZyQkdOSTB6c1FoNXZ5aVl4SkxMWlQ3cHZUcGswOG5xdG5CY1M3eEt5aXpFdG9LSFYweHZETGl6eERtVWgxcGJhb29mOVBQWlhPMnRQemlodDZRTzhyV3dtUzBJTTgySFRDR2k2b0d1bDVWeXlMSGxSQ0IzRENWdXA5dGpiQkJjR1pJRGxjUXVjeVVTdHZtWTlTOWJOdG5KQk5UVnlmcW1ScG9yamVrZU5IbjdIVjk5MVdOMDBSVVVDQTZ2ZDgwL3hpYytKZUJXNDZKcHhuZkFFcks3amZ6Z0hmemlxOW96WC9GQkhIYzZ3TEo1WUJDKzFzSVFNUU15Ukt0T2M2M01SS1cwajRDdTVwSHN3cXdFdEg1V1BOVXhHaUtNT0R5ejFOVytRQzArcjN4Qy9QR0NSVW9YSzJ0dng1NTltbDlua2VLWDRjNTlRdmxwS3lOSUVzTlF2U0E1TW5ZU0pHUVU2NC91bE03WFRJdTZKRXF3b1p0N0N6UWR1a21pNzJKK3NzSHdVS1Jnd2d1eGlpcmRveTlmM1RBREhjRld6MnB6ejU1bnlNNzVsQ2NVcVU1dmk1RW1QOXRTVXBGZjgzYW5qM2tjTWREYzN0MTM5Wjdpdkc3U0dqbjVGZlpVencxUk9TbE9lR3ZRNncwbURaczcxcDFXRlZTaFFHUmxpSGgvTHd3bjIxOFhTeXM4a0NvUHlwcVpzNjlSUVNYUlRYSVQwa0dmd2tMazdyWEo1VDhWY25pRGxpVUh0YUZ4eUQ1RFU2c2xUd2VVdWs4NUc3aXR3MSthd1JvdCtqMldqc3ZZRDNRd2RXZHE4QmxKd0c5cVNxWGdKOG9CNm14WGpXS2dKS1dQdDBiMHNjZ3Rid2hud0ova09hWlF6SlV5YUVBaGVhYWVERzM3SGtpSHlqT3VBRWxPWlNXaHhmVWNMdUEvSCt3d3VPeHptcmo5djFGVzFYNXZqOElTZTUvSmlzWEw3aWdYelhIVjF4Rm9NTGVlMWFtYjJ5NHBQaGtuSUprZVQwSkhyNmVlZWFnMzJzdVRiSUVqR1RYRWc3eVJUZ05Xa1hsZWg3SkY2NVQ5RTNmd005TTZ5aDRiUExIRm1JVjRDa1BMU3hIWG9NbXVzeVlGTnMxemxzQ09ERHMxMWtjMnVjbkxSL3hBSGorc1dFVEFLVi9kZ25PdDFqZVhNWERoLzdab2RPeVNDTXBXVnBhM2dZbDc0clMxelBIQ3laTWtMa0FkTXhJQ252R3k1ZmxBcFV5MmVWc3lJYjgvdnEydTd1RnU3dy9KbDdyd21LbERLTlN0YmdDdmlFamFMeFZJR2JOdmhwMGJtSGlTS08xWGJ3eDVodEdmdSt0Tmg0NkZITXR4b1gxOTVLbHIxd3ExUEYxdHFTS2ppVS8ydm1kZEpzd3pST2s4YlpwN3R2bVBiYVBIZTR5ejVnZ2hURWY3WXp5eWZxcHptbDBkZnlxS3RXSHYzOFMraUtNRkladHNNWG1RdkJEaXVJYjFXdS9YRjBUd3JNemVZSmR1NDR5TnBpdGh4NXRMV0lZSDM2ajIzcVRkQmo3ajJtQ2N3TVZsS1B6L2FTanVmMmd6T0ZUeE01YU1odm01ckNzbENPdFNicU9ndlc5cERZZExreXNSZEdLNWplZDYveEFuWnRKd0R4T3Z3ZVZ2bVhWTFZYQSsrUGZnWVZnUEVDdzJWaGNTTGptNnBnSWI1OTRYTTZFYUpXbmJoSFFBd3pCMlFYbTRzbkI5S0hKa3VmRUhOM3RqTFZwOWEwSGpVa3RQZ0l2bE9xYXI2OGNRWDBZK01IN1R6VU9WcTRuelo0cFp3bmg1TlZKU3U1VE9pZWhZS0l6eG1MTk50TnNYMWhOUkMzUndTVndpSzhxek0zaGxRNkk4TC9CNFpsM2tjbVJ5Qm45NVRINkY5aUpsTkIzS1cxclNCRlJDT0owaDZHcjhKYjlTejkxckRSTThjNFRGYlF5M0psSHM2U094OTI4c1JLM2ptRFZzMXRvSDR3L1BOciszRGJ0bzZKK2ZwQzI5UC9ienlEWlh4d2Npem9zMmNyaTRkRzB2aG1uTWV0djNCOERDZmZ5RHkxbHFuUURVZlpxanNUTkZxcDJHRFZmT1VEbXhRajBVUFJZRkxmekZ1TmEyZWZiRHorcGFvVW9nNzdydCs1WUh0ekE1d2tQR0VaTks0dTI1TEZnM0lWTWNpRm1PSlowd3ZjVE8yTUtLS1d0dGdmNDNtTzVaeDBXVnRaM0VyTC9WQzdRMHJGdy9rbGNSNnl4QVZWbHNkR01OOUxsT2hEQ2FERCtmcnVycTZ5eVNqN1BhcVZ3ZGdsbnp5RUZZUEZsR0I0bjRkTVgyZUgyWi9SUVdVWW9vTmxucUVGNHRpL080dzRIdHRWeXBXVEVEVmdSaVM1SDl0Y1ZkcDMyOXlpYVdkM2JCRXkvdTR6WEd1czBmaG5PTXZSSTJtVGx0TDJlM1daUXBNbzZSeGJsTVBiSEZZNFZoS2xvLytSMGhHUzJsU2txeFNSSUtsaTBVbkUvMG53WmdManlTc0NDK0ZUYWkwY25FNDExY25aK01HVVpuYlQ2REwvTlA1Q2JKbm5BRWlTYjFDbzl0RGg3MnZ2YXIvYXlFb2tMWFQ3Q09kUFVnZHVFY2hWRk1JTUxSblhzaVgyV3gyaExVWmdPVWQ4bWY2SGhPakZOeXJ3dUZEQ3JJNC9WOXYyNGJBRlpobUxpSlRuNURpMVhoRmkyemt0RnM3cXR4ZTJNbjN1MjRlVmlBc3M2S0djc1dka3hsd2Vkb2pWcFhlTjN4anV0WnBpSTAzdmFzTStVSzJvUUxNa3RKNFBKZ2VPc2FxT2xhOVBTakhjWkpuRkNOVWpFb3JlZFMwNTVHT3R1bm9EUU42bVhuV1ppcHp0NXBKb243bTU1eWVTekxuOVoyQTl6UnR6UERENUdMaGZnZVMvR2Y0Z0NldHI3OXdQY3FlWVlNRlJURkJiVDA3WUNFRDl6L3VTWjR5dG4raUpjY2ZBWXJJQVB1anpYS0RUTmxYSFlzUUZMS09scTlDS0oyZlFrMXhVcjQ3ZXFseEhlSEFFU3RueXUxOW5ybVVTZDhpQTYyU1BZVE53dXBKUCtjVzJPczYreWRLMVlxeUJ2VkRUR1E0SklidGNUM2JIZVB1VmtYai9Dc0xVVXgrMzFUTzNxaWs3d2F5K2hwbkRPZmVqUFM2RGE0cUI2OHJrNzM3NWRrcjUrbklwdE9LVHhVc2svMG83ZlNrMzlaTklBRVJnMTVWbkxoN1NhMGtLcEZ4TGx2WEtaVTFvWDZTd29mTmxnK1A4SEJDQ09nYU1DWDFQbjBKblYwLzZtWlpzZ1prazc5a0JVamdVUG40bnQ5MzdKbFRkeEVYc0dNUnk5VlBFdjFFUHJ5QWRSYnJEbmY5MUg1OE1ZQWtKSUpTNjBibEJDb2FxTThQRWNtTjVMQ1hWK3pGWDVVcFJxdzdianFEWG9YT0hqNUc5WTFyRDRIUWl3Mlg5ckNkK2wwbzBvTzhtOGU1b2xqQ1d1WTM5TlArWXMrTExlejhTV0xJdFhsYzArTk5rNngyME5jZzk4VWxFM00rQ3RQQXk1OUV6bk1YWkNnOHpWKzRlWno1Q3hwaWlVMVJRRnN0OG1ialpscnJEbExjWTNxVjlKa3lWenZNV1N6eGZ5SFNmTEVhS2pzRmM3a0dORWppWk9Lcy96MVV4Y0hQN3Rodm0vZUQwT040UlB2QnpnNGhRR05VT3huYUZjRjUvSkVLUXJiNUxFcFpGaHZnNlBxRXRMUTFCOGc5eHNDc1d3UWc5d1ROYWFBbXBKZnM3RGFpajIrSjNKSi80TVJWNlR5UFlVUjVYT0dPeFV3UHhiUHJnb254QmZBMDlWd200ZHh1Qkk1OHVhNk5OUkxkNmxabThSSnY4ekpRZkZCdExGZ3ZmaXg0MzVIUE1XdmYzU016VnNyeEMyNW5hVjEyc0hxNmx5UVpBNTlTd255SDB3RGtQWXdOM3dLM2lDQmVSVzhSYjFDNTJQb1ZObElROStGWmI5Z0RLVmx6aFN1RkU3NU9DRVV5VmRPTGg2bkE3S3QyTXlIQ2Z5UFU1Q2xHblFRMVBJQW00VHBTczBaR29YU0RlQkxtd1FrZitOeDcxNEJYY29rRUZXZ3ZoVTZEN05VSzdwR2FrT3pncTZyck80VFN0dVJUbDIydDJwQnUvMmxpUmMwRkNQODk0MDVRTWtMR1hYMjNEVzN6eVplak90bVJiVnh1Nmo0ZmZlZ0xhcVhINXFLT2xacUt4SXNCZm50RU5GRkwxazRuQjdjdU1taE1UUXNtMWpsZy9RdUZtby9YQW52RjV6dUlINkhURUpjUnlBNXBZN2pDREVhWHU1WU9zejE5Qm1hUVVpRDFmVm01eWdRWTA2dnQ3d0dQV2VDUyt1Rll4cnVJeTNJYXpNSURWY2NJdzk0V2t6eDlUS0IvbUtQc0xtaGxhend5NVhXMExjVU1FT20ydks0SXlCN2N6TUNQOGtVM1JVSEExbGtibFBGV2tpOXVkUWRaYnljVGZvMGFoZHFYQjUwYzdES01TZU9ZRWFOMXNrdlJScW1DT1dQemRmam9BUlF1UHZoVlhYVXFHVCs5dFNBT05QTlVXNE9MWW9Vd1hKdlJWanI2YXlLUEkvbU4yZ0hPNGlRRFdkLzlsSkhDRVRLLzhXd1g2ZzJIOS9PZnBDU2tJVWl1cndsTTlsNmFqOUZ1OTN5d0thVm1RM2Z0NUxJVjB1Z0hiZ1RwMWEwVU5iOTRtakNWUFl6UmRPcGhGbE1uakdJSmIzM0xMcGloTDhVQlgxbUx5OTZBbW96RzRSZVpsMlhrZUdXVStVbmxkVzhMRm8vWmptUjhQNzFucWVHK0xrQmcwd08wMllNdjh2K0NiOVhZWXh0U1NhRmNqKzYwYUpwN25xSGJ0dTliNmFlV3NoL3JCQzhpWllmdEhSMUVzb3JjK05KV2tsRlRwTUZJc2JGMm5iMkZoVDdOTFppTEhQOUVZZ0V5Vk1Eby94dkhzVkt2TkdhZU1Ec043OXdza0hkZTBlL2lzeUlPQjFiUTJMVG1XMHZnalFTMHpKN0czRWVjSWlYUkFRZTJzWWtpM0VjNGdrNit1OU9MdCtTTzM4WEphRzltNTFnMlNEMWNGakZKSUltWjQra01OTzRMc200QlN5QlJLSy9jK0Z6S29mb3dNeGNNQzc0aXdyaEdJSkRRbW16RWx6bXo3T3VvdEo2S3JUeWhFWk8reG9wRGFUZ1I2c1VkQVltN0ZscmZPRFlSZ0dtdkRDOWtNcE90N29SbzloamlxU05kUHFaa0NoQmRiOS82VmtGK2FvdFlEZ2I0b2ZHRW1WVTVMdnVXVkdYaHNDOXlPejBuRVBFQmtIYWZPNERwei80YkZsM2VSR1hzRmJaSXRyUks0NkRnUUkwb2ZOZm83ZjNCeG1hcEsxdmdsQSt2ZlhlV1FBL1VkRGJvcVR0U0hmTlkvTE9panU3RGRna3pSU1Qxc2dXdE5xelc2Sys3SUtLZkxwNzFFMUpYUDh6VWw4VHQxN2JYVmEvOGJLbU9xcTdYLzRFeXBaVm5CbVNSNm5tbkM3SzU5TVNma0ZIK3k1eUpJRzRTYjAxdnpmbjJKMU9mdWVud3F5VjVKK2JOcU1IWHlLWTRObU9MSFhOc0pqRHFzLzhxZXRwQXZpdk0xVCtMdms2VjV4Q0M0SVc2Zk93UnA1MC84QUwrT1F2R3ZJdHJQSEQ2SnZvZGVRNStjaTBHdHRTblAxTnRCYko2a2Rhb2RSZmZWVEE1UDgzZmgzQ3U2MkZuMDhLQkFmc1lpaTM5WDl4QitXdGsvTzNVZmtPcE5aTjRjdXhQbitmNlhOcnBYQVNDZDlRM2lwWWFwSHBzekNWVUhSaWtkTGQ1QWNNdHRyaXJiWEFubzMxbk5rK25ReHpJRld0MlFKbkExc3VSOWpreFo3eHV1TXlTZFEyNHEwV3ZXZFpHS2NZanhQRTcxd0NjcGt1VjVJTE50S2RWRWdXaVAreCszM1lKVVczQjFsc0VncFBEQXZjZklObzcrMVJOcGk5TjBXRG9nR0lLOTlFOUt0UmdDOE9ReWFXdDVBS2xBODJzVFByNXl1R25wV1FaQm81T3FVblhlbVJmSXNqQzFUSmx0ZkVxVTcvVXhaUnNYMU5EVWFNZDRaMDJNZHI5WXEzd3d6NzNWbzJlNWp2bmNnY09aa3NrQ3NLLzV4VWpBcmRSa2xXL09idXgxRVBpQXU5Wi95Y25paFVQWnN1SGU1WlJTYVZlNUNVZTlaVk5JTldiZ3VXRUNGeFlCcHFyMjhOdGhDQjFYMVROMDlUS1M2c2ExOHhSSkVFZXdjam1lQWl0SGlBdUZyZUEwak1jdHFtSUc4YzRrdlhNWlFJc2NUcWliUitpc2JVQ01SdGRFMmpDZiszZ01MdUFnV1ZVY1dVOFV3U0pDV2VFcGNzT2xRS2tNcDBrdzMxYkJOWHEwUE9RY2lEQ1VTWS9aakMvbklQRmcrcGw3REFYUk9lektxTVYvUWRLdzVWTjRPajJ4V2xRV2NtTHVLeUFEVUh1bHhSem01SVFZQzZuVnczRDIvR3djbFRJVjgrSlExSVBWQjJmTnphdExrREgvTzlRRGlQSmhBYXg3YzNibHhzcG5TdldUTWowUnByOTVsVzhValZzODEyc1FBLy9YcFpqUGVXZWRZSlRIcUZ1Z3FzT1l5WXJJY0dBaWs0VU0wNGtGQWttRWFMQ1ZFWHl4TzVxRldXN3pIRmYyeXhHa3RsM3lFOS9PV3ZGdU9RSnI4UlFqWE92bHN4ejVDTDJuOUFUWUpkZlFjejlLdjlNazR4dm9vNFJrUEtQV3dIeHVVb0pEK2JVamk1VGM3a0FwczIyQ1ZuWEtEamxQZ3dBV2swbXFLUmxsTEhkalp3QU1lTlpYOW8yZnAydTFlWCs0V053aTVyUXZQajR3cGF0aXRFOExBb1BMb09POEt1Y3pqMnlsb2dDMlVqS3ZmcGx5U2lGbnVsKzZmam1IRGhlVWpic2ZDL3lTam1CQkpVNVM5ME5vU0pZdzZUQ2ZBZUxXU1ZjZnhLeU9nMmVOUGI1RlJOVUp2UTR2MEgraTdmdEc4S0xZaG55akU4cWd5aGpqcmVCMnR3Wnc0aHB5ZTNIbVp5OHBzNUlrT00wV01qS2NpamdnNjZFMTgrWE9wdjd0U2crcDFsTi94RG9qYmtia0JPaVg4OGVMQjZFUjRoMWZkNXVlWElQQWFCWDRPNlEzQ3drM1BSMlBBU1F1d2p1ZGNaUkdaS2k0cDNnQ2F6dHNVZnpqLzdKREpFbGhWR0NRTlVZbm1aQXVDNnUxTEpqRmRGL0ljRmpxcXJRK2h1cFVwUW9FamQrczRKU3ByNE1sTnoyMTlad0gwVE0yN2RzN2xCcjVMejR4V3I1aXc3aGNReFJDMnNkZFRjZStCSC9ia2svTEtWRUNuSkhKcVlzc2FoRnJ2emM2L2FRNS92NG9YOG8ybmxuNCtpRG1tQXYrOXRDellIc1FwUkhaVTg3N1JFK0hzQU9RbGlLWnFDVHJyTENkRjArN3NhRVVlcE5ubTdFajRCM2lOQ1g4OWNOL1BUZGcwS3dPQzBjQWtndTFubU5jY0xhRUxJbFRtRzJFVW0xdmtjUDVubk1iVGlYdHM1eVhNWTFHRWJiaHJZR3VPYzBFM1dIeENMMFQ5NlVSM2MyZ0xNRG80Y3Y3Q2t1MW4xdFNPNEQ3dWV3aHhZTjZuUVRieFUzNXNqVjNKU0NqODgvck9ZMXRBYi9mNnRMR2NyS2hBRXBBeE5PVlZyYkNBQ3krakhXUG54OGNkVUgzd2trdFJOYkJNYzNJK3MvVG4rRFVSVkQyYm1uelcrT29WZE9kdzlTUFE4dGx3Y2JFMkE1bDFqVndjL1NDbGduY1hYTGhCNS82cnh1ZTAyb2cvYlZ0YWdzeGt4QURnOHdYcEJReEVadjMreGN3dmw0L3lMSGtmN1VhNlpDYlRaQS9aRzN2V094VlpFcElDZzd6SkZIdjR6bHV1RmlXZXNNdDRmVHFwZDhtTzhWaXVPU0pqcVRNOThOaVpXT3pKY0dSNTAxc0dxTllqQnZuS0pOemt0bzdDTURJWDVOeDFoVGJJZDl6UVNuTDZlZDlGY096WnZyZXZMNlBGMkZ3UHJWeGZnTWpETjM1MjNZWlBOT2VpNlppalcvL1JqeC9zWFVOZ0I1OTh1Z3BwY0ozVVVQQnZReVZRUGxHYmJXQVp5OFh2eDNubndDM2RBbXMrazJSMTVGNWs1UmprTWFwRHNNSXZhaHRwZGRLRDBoL3lvZGg3V3RlOWQ4N0RsTHYxZjdGMmI2MTVOMnA2d0VzUjB1ME5NdTVKR2t6NUdoRGU2M0lOVVB3M1V6dU9xcjNqY245c3NmMG5qbUQya3BNb2FlMUdVaHc5ZktZNk4vWVQ5MzY0OWROaTNodVZXTllwK3hGbW5weXdIbmZPWnptRzBuVkF1U2Y5MTV5VHY2bGt1WG02OFB3aGVlOUN0REhOLzRUaWZTQVhtQmRxMXdzYjdYcXIzNmVYL1J5bXlQS0tXMlpNVmJPTUs2TkFVZ3lLVTFzRHhLL0xTMDU5SjFQcENRcy91SFZiZEkvMDBreXRXcDc1Ny9kcGhDVGlQenRCcFNlbWkrT1lBQmdtT1NUVTg5TTR3b2EwYzM5b2NhZUdEV3pGd3dPeTlMb0xTR2QxZDhGRnJVRU5rOEYya3ZqMExUQnltbXlCSk5YMUZBYjJJMmowQVlxVWtKem9BNnFvMVhkajVWdURRb1J4b21PeWJpYThLdjNmakk4RDlyb3Z0WG9jMkJqRm1FWTZvN0dreVZPek5md0llVTdhRDZvbWhzSk03ZXhsaTdtdERkU3ZuY3FQdHFqZUNPZC9rSWhhcWVFVnIxQk9taWQ4d2lRVmh4UmV4SmdQMmFrQWtNSm0yMXRnTk0vSzJyREpDVWR1R0FqN016Nkx4QTNlTjU1NVJrWFlmRGtVY1JQdDlQMTNJK2ZRMmkyTXFlQ0p5SXFvVVlrVm43S3FEOWNKdlZ0WWtZRHh2MEk2cVhVV1dhd0VPUjErMWg5cmlmdmVSQlkvb3JNS2xvQTVFWVhXN0hHYm5raTJualh4a2YydTdmTXpPVU11NGR6Nm8vckNZS09GVDgzVDU1bWxlQjFaS08zSFlhK1Z3d2x2TldaTUdRdThtOHJyMEF5bjc4eGh0Q1IxWXR0UUNxdy9OU2o1ZHM4ZjJrang0MForVDNzZ2trU2N2UEt2Vml4MkFWVm0wbEJlbWh1SnNpQUZyYjYxVVF1UE9OWHlHa0ZWUFVWbFB2dmF0WE1YbVBIR3l4Tkd1NldZd0NBM2pMRWFPMTBiT2lpd2Z4aXZscDRDZEVOUy81RXEvSXN3UkpKRlFjZGltMlJKbzh0OUZyMHRaZXRwcEJYNHVEWXh3UGJGK3V0RXV5QUxHd2VYRXR0M0VmY2dUSHN1OTNuOUdQVEs4TitGaHh0TWM0Y1ptbGhSMW5NMi9sMUFoR1A0Q0FnSURtOVdidlFKdjBWK0Y2NDZZVnJlb3ZFdVR6Mlp6bDFqOFcwbGZHTVlUUW5BWTBpS25semVKUXp0cWJHMXpyTjExcGpVNEtzK080c2tTMEx5UmNTTCtWSWxPcmkyeGxvNjFOTzMraHZNdjVxeVhiSm1WdCtIKyt6SXJpUnRaamhRSVNhTlZ1Y3ZVMHo5S3dZK21MYmNGQ0dxc1J1NVdRWFdyTkZHdlA1L3MyR2x5bEdVc3o5TGM1d3RiUW9aLzJOUHYxbWpLa3p0d050dVVZemV5ZzFScHdVcERSU1hTS0xVZTlxamFsZzlta01xeWVnT1lUeVdPSXFkVFhINkdPOXlrYjI2ZFhMd2UyYWZrUWora01hSGMzVjJRZlBreFJJaEhZTlc5MllrZ1ZHNmoxa0wvektYWGVTalRXVGFhT0tRaG1aY3BTSDFOZzZaK0tscnNMNTRQRmlkVlprUEVBa0JvRUxEdGNyNWRNVFUybnZSb1JLRnBsUmpPYzZyV2x2SUtMV0NMbWxOaHRFMzZmYnpJZFBpb0xjRlo2ajYzdjN1UXd0ZnQxODQ5djJNUU9KT3l0aGtZVTZROE1IYTIxUzgxNTJSYWIzanZhcUZibG90aUpMU3lrSXNYQVRyUVJPeWtUTjRGS1FKb0crczJDeTZuWlBjNnRWT2FIckREY08wcXRGN005YzFwNTFETGRRbjUxWW5Yc1BvR1JOU3ZMWnkxaWhtdnp3U29SU1A0MHlmR1Qxd1plYUR1VnFlK2l3RmdTSldTNnhDNk9rK1hCMjdwazhIcEw3dzNKWUxhaHJwQjhzd0tEc2ppN2pjNDBsSTJhZEZZaG41SUpCZU5CcFZWUHQ0UFQzV1plUjF2a3hMY1U1NVNiMmpIMWU5cENhTjVETkN4dDBaWEdlaGg0R216ZUxHbEdubVpHa2c5MzEvemhjWlBPV3BqWGhLTUdDL1pLcWc3K3o2Y3AxZGwvV3Vpa0QxTVFITGlBU1JsWHVPUFRsTUd2Rjl1cm1pMG5EaTArc0hBUC8wUHJrTk5aU1N1bjZTQThBREpzYXM3VjVkcWNFU1NYYmJWTXZmOHJ2UTNlNnRDN1VoZC8zVmhCNVV2SW5tK1Y4SzFhTEg0dGh3WVpFekJrakVSeC9SSmhCVDRSYjdUbFJ6RmhUSDh0cmN4T2dPK3RMTU80eFhxa0hFbDBTTE8wN3AyRy96cG9XbTVPc1dNdllwV2xuMks2cHdOT3pmOWdYZDFXL0U5d1k0amh3a0dSajhoKzJSdHh5aEtSMDJqK2tweHo2VTRkdHNnMysrTng0Q0w0UncyT3dDMlBtVGM5YjZmVmY4eW1nVFhOWEJHZi9LNVhHVFdYQ3NjZW1odDFaUTAzaGttTVJFNjl6U0xZOWVwTlE4YzBSZnREVHNtMW8wTStIZjhLaS9wMENBWS9CMUtKM0pZcnJkc1lyanlsdGM3bmxhL3U5cXNwZjhXU0E4TzAycjRmV2lxUXg0eVNqVjRJTzB6YUhmMHVqZ0E5NlZ5Wk1WRjUybGNGVU9IcFVmREthQVVkcE1ZaUN1bm9mcGxxR1JqR1JnTHphcTBVempwSFRhTjljZXE2OVVxeU5DTU5Wa0xwUDRBY1o5K1NvNDAvUHZHWnQ5eHp2Z2o0L0U0bFNxNWNvUTZGWEd5QU9scXJ2R1N4dWJDalNGUHRPZy9qREVDR2FOajFackltczhuU3J4NzNqMmZ5VEwvOVJ5QUNDTVpXQklNanVjd0VUeWJYaXZLUm0ySUFFTkh6dGlWenFiN09MSnBlQzlsaHpPL28wMWQ3c0lrRVJYZThPaVR3QmZTZjZNc0FyMzcwd0JvaUVybVltMWZJY0Y0UDJmRnF6dFpyc3BUckN3OGIvbjNVUWZnUFM0N28wc2twcjNNM2tMSTV0VkhjZXZpK3plWGl0bjRjaUFrU1ViMjNrOEFqMllBMnNYb3lmZk5QZndrMVYyeHA5VEsva1ZRbTg4TjV4U2VDdnkxVmtZNFoySUtzS29WeFZTYlMxWUs4ZUFlT1k2WUZVdTY2Rmxua0lRU2Y1eWNkRW9kSjlBZHpkWWQyTVBnL256TTFFZm1FTlg0MjdhSzgwT0pMT0l3QllJWG9QWTBGUWZpbkJya2pvblY2aU5MSVZzYmVrU29NbllzS1YrSVM2S1lhaXptYmg3azhOTnhLTEJ5ODdzQ0NES1p3Z0lEbjhoNW4xQUlnamUvbkNTSjNlZm4wYmhYWXo5Wmp2bkRWdHQ3akh1bFhFSytoVnVSZVdaZmh6TmgwM3oxVm5LMGt6TDgvSktVSnd5MC90ZmFXQjVFSnZZQy9mODFSQ0hnNVU4Y2JwVWlURjdhSDlrMjZ2NGFWK0htNUcxMUZ6TzhZMVhtTXhmYy9aRnlab1RLZmlWZEZCU3lkZUtpSE81OHlDZnVWWXArc2RPc0FTUjlpdUF6ckVTd2dnRlZlL0I0Y3h0N3pmelhjYVlkWXRhN01qLzhyNlppcjVGRXJ0ZTdGZVBncXJUam1ZU1N3QmUxeWFzSEcxdFdoM3dNQkJsMzlQR2RiYXZ1ZXBhYnF1NmpiZ1JzNUlmQURCRm9kRnNFc3Awa1dkYkR0T2RpNTB3cG1JbXZWZDcxNDJZYlBVYmVlMk41Qzc0YU5sU0ZMT0VGZlVVVUpQRk5Gank5RUxNeCtlVXRUejJCZDJrQzhEM0pTR2VrTHBBZUYvMWR3TnhHdDN4dnY1OWM1RmQwbXI5aDF2T29qdTYrNHVBRUJJUDJ1N0s1V0VoZlZ2VCtWVXhqZHdKTHFMbG9ZV3piMGNYMER5NHFmNzBWRzhEcjliMG9UZWZyS0FXK1JSOUp3WEFCKzNDc05SVWVUTFZPdWIxdXduektaSFRzdmJPRmh4T0hPQ1RXS2JNOWttbmFscUREYmxWUWU3SFpISzkrU0tXZHpIL2ZoM0FhUEFEekdCRm0wRnRWdnE1bVZzTXNZT25xN1VWTUpuSWd1NDVBVm1VZ3lOWVA0T3d6cFY3SHU5bUVSSk5Zb0NvZWxhUVZ2Y0tTVExPaE02VUU2RXFDL1IwQ1dFdlJ1M2l6SXRjelhUK25CVUI3TmZtZEJYUElaMjJ2WUpuT3RwUWxmNmlwcmN0SVBlN2xrR29uWitIZWxMVU11UXE0TFp6RzJCZXB6aWRqVGIzME5WTHMzNHpPYXBmVTVRQU1Jbnh5RFhSUDl1LzlHcjBsTHlxNER2QzhwYTd1Rkk1U2thMGZxczlSdnVWZ1EySjUzM2M5RjNOdnY2TmtJVmpCTzVvdU4xNVpPeUk0TG1RcVloMWZ2ZVl4V2cxN2Y3eEExRHl1VXJ2cDNiVythOHBPTjM2aXQ0STFXNjJIQzVidmVSQzZGVGdWeEVDd1hqMTRHSEJLTGNBYVJsejEzMG94anZGeVdXazBvOVg0eHJzRkVxMGF5VHRNWW9NeHpwY1NzdFFiZzU0WlN3REtycDR5Zm1wQVZmTWFXZWFRV1J2dkwwY09mM1l4RmY2TnJwTUhHNlU1TTVaZzl2d04yeklPbzRrRW41SjNzZDZNTWxJM1R3V2Fla1lhZWtXdUpnTTNVZHUxZk16MFhrNmYxQmZodXgyVVFpRHBqc1FleUU0NEgvMjBrVmt2MTJBS2tQZllFS2NwdlRwaXg2OGRtMmxaRU43ZmZaaGxBOCs5U2lrSnNjWThhMFVFSDA3TitadVZGS21vRlBHK0x6dnF1ekE2ZlFzOEtINkM3cklSaGl3ZWN6OWVUR2lWT0gxRkRqMmI1UUVOMUszcjBvTkJybVMrM3NwYmQxSWw0cStNeGl1MmN5SU1UaCtrcEhPVU1OWW5BVjMvT3NtYnJpaDFlckxzUEQ1VEY0NzVqTlFXbnpMZ1dyYThrVkt4eUZIREhOaCtDRU96bVRqaHl4L2RhTnBKZ3RKdjJVZzZKU1RYZDhXZ1FRL3VSODBFSm1KcmVSN3cwdkphWHZ1NDlOSUxjMGpTakkyQ2JkaEljdU5VNXFuL3ZYTHBnUTY4TmVudytjQlN2RDZGbGg1Wnl2am9odVNYb0xBVGdsU25seUJNM3cwclpoQ3F4ajU4TEZraHNWYUluKzAraUdLN0NodXpDMHUyV21zTWc0ZTRqbjBlSEtXc05pMFp0RS83b2NLRTZ0cXVlKy9qOE1QejFJNUxRVWFnelFhOS9IM2g1WXhsQ01kWHFjTjcwMk1TTzV1TEVneFU1cVlBckhEVjBudDZDZzBteWVBRzAxL3A5bmFFSnJZUDJrRFJjd2QzMnA3TldOMW05bnRURVdraTJjYitpU3dxQWNvSUlaR1NJNnEyYk1mVzZ2bXJjanExVGtTK0wyOUFJbkN4NnlLRWpHSnRKRm02SVE1dkc2d1YxeEg0VjdNT0ZzNGZneHpnSmkxTFNGelNyWDVKYTllRkJ2bGlkL2hVRnRQdWRwN3o4YWZ1M2lzOWRWNElZUnQrMnE0NjU0RkdLNlhmY1ZYRHZocC9oL09FTDFLZGVZQjRUNm1uaGJTZjFUbEdoSUk3M1FpdElyMlZwcWdJd1pSU2pPcmRuVTcwYzd5dWgxbzVNS0F6V2t3eWQzNU9lUW0rTC9XVm0vZVAvTFBJUU9pZldWM3o2aWI3S0hXRDRTZnYyK045cEovRDZaQ0Q0UkdJb3ZraWd0RXE5V01aOG9NcldBUjFyWEhKcW9td3NlQjRVRmVoVGVnQkkxTE5kd0JrMUs2MWYvSmZIclVjSit3akR3dVpqVnpkMTZqanN1NjBNRUhyeWx6YUpSMGFZOFM0eDROQjVRUTdhNDU4MnlUMU4rZjFDRk5lSCtpeFNhdnl1VnBlWDcrVmU0TkpMTjZYZGthSmdveTgrRW56MnBBZWdGcEZUVFFUOTU1akxIMi9qUGRiS2JtTFVQekVHcUt0eUZoTEw4WjRvd3gyZFhIcXBhcC9TYXhCQkNyS0VrMkczTWdyMEpDZFdIbVJZRVd3R1V2SWFJRmx2bHdEd01qR29oSjNlelhvazdaZ0N5aS9VQ1hiUklVN0oxbWw5TGo5NHFKbllZK08ra0xBZXl4OTYvTE12OXVpVVY4cWJhS0h4K0VKT2s4T0lBb2lickxiY01zNXZ2T1ZINGRzTnMycWpYYi9LamUrVHk0TEtDZ09rdHVyS2ZqZ00yT1NVREd3RUhueGd0MzlEd0NxNm5RRnR4KythQXJzeTVaZ2VhU1Z0T0UyYklxaVpGY1oyRkdUbUdEc3Z0bm1UTzJpR0Y2d24vM1NrRTFPQUpnVUI3aUthTFNGOThiTURtQ2pZOTVWNGcya0NhVVF3QTJ3WlowNzBkOXBTNlpheHd4QXcrUzJOd0dNejJvYXBFdnhWR3RUb1FHWnF5ek8rUmdvMld6L1l2a3pDMkNTbnZlaEVjU2ZXa1hDZDBGOUxTTHRSQ1lqanB4VHdOcld4Y3Jya3pQZEVCNUoyZnE1Z0VISWNROFhZV2FFWjlaNUtmOTRXaDk2SVpvR251enhKRSs3WitkY3JzR09mOUxWbTRjSlh6ZEdnOU83ZnQ0VlBKTkVXOGpzanFWOHFNbERiUEljSHVMMnhjR25pc2lhUTRwbWsxUUs0b1BnSEYzRkNnRnB3Ui9sUGtwR1pKMzJkSE1BMGVha2pmRm1PaWxyd0tTVjU0ellzMC9GUDI0RXlSUDlUY09aNHQrVVdRNmNtTG8rY0xqSjZNSnBlMjg3YzM0VEpXaXA1RVFtWFBZQUFQamF4TE9sYml4bmUrRHpQSWlTY2IxWllVUnBFbU41Unh6VU50N1pFMzlEWHhTZTBXanJEbHBkNkZKWmRNZjVnZUVnSXJ5NWtEcDBzUHd4Mmx6ZWpZWkgzSk5acTFLS3V6VjQ1SmpsUktncVJoV294Kyt4citKODdycFA4OElPdHJhSW5MeWU4R0pSSk1aSldnUmVGTE5XS2FJQlVRVGpCMUI4Z25NZ0JqNkx0WEwvTVdCN0FzdngyQ2R5VHBCcU5oTlpqWDlMdG82c2FHL0ZPMHdLZytRelhlb3NxTmQxRGIvOWFIMkxHMkZiVzJZK1doRDgzVitPZ3hPUVpVUFphKy84OFZGaVpBVHljODVicVhpVGhIMmRtdDFsT1Vkc2FmSnNoMU1HbUpmT1RHRCtWekg0OUNNK0RVeWF4bDVLWEdWbG1SOXJYcStuamtTRlRnbG1qL2VDRGpSVzN4U2t0NDVmQ2ZUYmMrcnRvWC9DUmNuWkhDRTlVbVEyajdDWTZEM1B1dFhGd3JSSGQrTVdxalFBVjl3N1RwNXpjZktPSDVpeFp6NG9pbFBIY0gzMVdIdHYwelJiL2ZRNW1zSGcxMEZxTzdpbEV0UkNiUGFVN3liZ1krdmxtMGdsWXVWY1JNc040cVVjdGpFa0c1bjFFQi9BL2w1dWF0Y2tIRUJNbUVKWUJWMDBZVDZBRzVtWHphL1RMYTRrWExYWU9IaTRSSThOc3NwQW4xZElraFAxbGVtRW05d21laDBlNUFmNGpUUGYyQm1lalQ0Q3ZvdVdVbE15UlRrRGRoN1NSTm5sKzJMaEJ6bUQ4dE1PNThTVjZKYWhXdVhqNGgrNlUwc0s0RG1WYnhrTFBzamxIRGhRQkc0d1hRQkxjRGpGa21PY1BuUHliTitDQXQzejBGcVlmWGg2SWpDSFVraU9hMTgrcmxyRkt3c0RpOWtacXpRejYzQXB6VU40RHRlQ0R3ZExIcFFZcDVOSDF6T0sxSlZaZDZmbW5kSmQzcThNT3FVWWRsQkpRZUlsSlBRL1hLR2ZIUGdSa0FheUJhN054djRienZHQUJwcXlSZWdiYXVDUGJEdXhYdGQ2STQ4bzh6OHpHYVVIVUFTTmdYdjFhOWZWOGZ4SzR2SGFWcDJZUHlXZFduSW9CejE5TWIwUC9VU0llbFZPL3Fjb1paSmFTVXAya1crZU52Y084bDBnTEdtVjZONlEvRDQzV0h4RjhuMzI2VWZnTjcvN1RRR1A0ZFcvNjB6UnJwaTVGYVFXanhNL0wvTHFPUjJmT0NPWUlrSTdWMjMzY2JOZzdhSHVCbGcyYkVJbGdub3NhckNBQ3RCMVdzODRST3Q2RWxnSCtZN1dJNHNLcCs2WVRGL0t3U3RlRU8waCs3bEtNbWRuRlJoUUtvZGxLRVljNlY3NlRucDdDK0Rjb2E1Y2VFdlM0a2VyY2xvSVczSmlSaEZOeXdKbVZNeCtqZzB0ajhmRHREUWNrL0E0S2ZPcUQrNUVLVU1paVBpQUQzeUpjZDJvZXZDVmNvd0J1TER5K0d1blY4OE1tZUtqSWt4d3JIMTREVzlzMTY1USsxN0ZmZzdXdnRMcVdMU09YS2c4amNIdlM5Q28wZHJ2UjdIWUZGUHk5REI2Q3VwRitYRkdRUERQc0IyMEMwK2t6dEdJVDViYkJ6R0RhMGJTUXNTNE1KNmc3eDVrZlZ6eTNZYWhGa3RyRmtKdUpyRHltNGlkOUNLcDNQWndkM08wdXRndXdmbDVqWXlYZHlxWFdTSW5heWJjamIrNXNaTW9uSmRiV1F0eGJ6eUVTWncwMXQxVXdjZnkrQ2VJa2hzY0tCck1EbElBeVJod3EwVVVTNmdoc2ZhNmE0UHowYU9DNVp1MkNodVNGbDk1RzVsMS9WYTZrN0lIT1FnVUNxYjNpMzR0M2FhZE5WMmhYSlJyWWR6NFh2ajVxQTdtTlJkR3Z2M1pJc3dzU0M1MUt0SE1SdEEyLzh5SkxEMTRiZHlKQWFlZnkwaWpYTUltK1pvTzR6Q3cyUkorZUd4S3IxUmRiMHBob2ZZaFlnWS9CNTZPeXpwcTExbHB6M2orRUs2VGlsNURPR3VKVGxUNEtML0oyMEZKUnlDdmpPZXhWMWUyV0NBQmR6M3NMS1FxWVBaeGJDeE14UjhnckRDajMyZ0ExTVd5S1h3V2RwUVV0OUwvNnh3NGsvTXFacUxSeHEvVkxtN0VEWXY0bjIvSDVUdGJ3YlJ3bldWbjBkd2lpVnB2L0w1bjlHMS9va21yeU9USVpSSmZ4bCtLbHB6blZYTHdhYWF6V2ZYa3FueEwxWVZqRytHR3U5LzZBK201dWdyRVBQQ21CejBaZHdRRVN4WEJKOFNNc3BvQWYyRXdjQ0xYaThZNyszNnVxcG15bUJqQmtabkVKUFB2U1RwWGIwRlhUU21pNzZ2bTBnQ1lPQnNCdS80Uk9YVnNZbWNiR1RTVkxuL1NaOE1BM0hHNkNodkk3Zml2WitSWVlYOUFMVEkvUUYwaXJrVDBFL3pqWVJEekp0S3l1a3RWcjg4ZmUxSmZ6cXFjLzF2V3VubFJFUk9aV2ZvZGZHcDVybXcxOWZ3WWY2OEIwNEMyWG0rd2xiU09oWXV0Y24xK2Jmdy8xbzJsamM2WVgyU1RaSXZEcGhqenZxTzZHZGlQU05YdG5sK090Y2lPUCs0WW5RK3Q3ckEweWhhNm04V2FhWG1BVFVkdmgrSFkvRldjdHBuMlpON010REdyYmlLa09vTGpadFFPdXZhd3l6Lzg5Nm9xY0pNWmZpempabEkyVTJMRityTC9yWHFvYVBIc3lJR1duN0hZRGc4RHBOQVlUWG1kYUdZZk1XTlh1L3JWUkljUWp2eUdnZ2JxL2kreTBPOVdUYnM4c2dzV3Fvc3Nod3lpWkxSeXJQZ3F0cUVvV0drRjVoMktzYm9wUDR2YWZXOXdIaGg4RkpDaGFybVFxL3JxOXhEV0FvcW02Y0VUc3puejBwY21Sai84dUJWeFI5U25HM1I2YW5yYkZteVA3OXlEdnF5eHVHTUMyT0x4RHEybEoyUVdwK1NwN1hWMDBKZUZ6T0JteWZMQkkrWUw2S0VOaElwVFFiZFh4OFFFTUlpVzZMbk5wMWt6VllMWDFNamlEc2tMTm14WnJXWlFxQ1F0UTEyNGUwbVV5WEttRCtQdmo1ZktkQTZvc0gwUThEN3dWdCt6aXU2ZTNFZHlNWTI2dTA0dTVkaVpGT2g5c2pUUy9IYUt1cGNubmdSQ3Z4dEpHL3luVS9hUG5xNnlOSFZjK3VWLzRiTzRGU2xoemhpcnpLRUZqNFVDLytwMzlGNXlmNldTZFI1a2hEdHRYbG9QamZCZjNMd0ZmWVJrL0lQOGdzU0gzb3BmRzczL2RnS1h2cHpCU3lvWktvd3RjcVpFZEdlclJxTnZJYW9FLzZnK2IweS9xbXA5WkhwRCtma1c3ZkRKWm1UVTZKejBzMmY1VzR3bjdPYVpEVGlHU01qTEx2Sk1hZTZqVGUyU0ZhcUNSL3p3TFRVNUtkc2h2TnpiWGxMQ0hGOWsyMVhidTJYMmxCYThqK2VHeFNGMU5qSFJyUEE0bTJIQ2ZSbVo5bzJjd295UmFvM2E3T0lpK3BDRDBsREsyYzkvTkxJZlZYbVVGNlh6eG1hTjVsa0V5emJaOHgzcGZ4MXJWSHZldTBXL21zK09LMEV4VFFEYW94YkwvRFhsVHNnSDBzU2owRDdxL0Z2eTNRYXcrdGxLdzVXV0FYTkNRTEMyRWhvNmM2b3pVY2FXRk02R3JFTzZVd2ZhZmpIaFluK3ZJb2FIS05LVWRDOWRZZnVON1F5b1JMT3JoY1JvajhGZ1NNazJtOXBqL2VYS2tYeWZkTnhiUmdTYVFtSDJXVTBSdW80akVUSEZ2YndRTkdjajFQRHdEM1VrdUYxdnZUMk1ycmEyNUVPSGJZemhQZ1pZRkQrNUlabU81Tk1PeVozZlYvTSt3WVVibmU5SzViNDRJR3FCclJjTHNRb1FLaGRrdTV3SEFpenFOeGhLNnpJZk82d0srNzAyYmlPajM4VFBzOHNpMm5kcG4wOHo0S0xmS0xMTHdtNm9GN01BUi9iS0NGamc2QUdjc3hGVjJ1amtKMlZ1RXVZUkRiYXAvUmtRTnIvZkpqb3BUcCtEVEVYV2pNMHAvVHIvN2ZmRFBUTmkzNFRLS25HUmN4QU1rbWtRSmxvRHNMRktzN1ZmVjJjTGNXZ0xZYllSQmxZZDB4c3BWaWwvbUhzSGhPWGZuMWVnRHRITkI2T2g4aGV6c0FqU0VLU0VyeUExTlFjenJDYm1hU3M5U0pmWVczU2tHelF6NHJSSkxoMkRDYUNrc3g4YmIxc2JtbzlFN1h2aFc3aHJ3S2RWbmJCd0JNS284NzFFNWZ0d1htcE1xNGRpVmRaSEEyekZJa3AxdkJZMEZ0TjVOWENoUWlkY1Bja0ZYWGhtdmhWdyt5N3V6M3lQNExNUU1xREkzejltajBiS3ZJdFFKVVpvM0RzaUIrdTVxSnpHNTd3c3pIR3JpR0ltV2VINVc0bThmNFgwSDZCMEtZbWFNeWx1ZnpjTUMvbUtzRDhjV2xKb1RISXd4elpONFRhUDU5dHNaSHRGZ2F0TjhYdDVpZUV3M2NDUnpJZHdwcUpUT0lMejYxRlNaL1A5S2RyWnFyWi9vRVppU3dKMXdBMUJ1eE4yRWZvOVI4M3ZjU2Y1czhnbzRZTGpWbXBqWVlKaDhJc1Z2UWQrb2VGcHoyenhLN3I5aGpTVUhhcXFEazhkcEZqaUxubHBsQzl3VWtIUTI0clN2VGtpOS9HUDNkcUx2YkFVUjNhclVHUzBaTU1iZ3ErSFlUSUJKTnVZd3NzUi9EN1gvRzcwNDc2TStqQlNONC80Z2lvcnhWUUtJaVBVNVlyMkE5UUxqYkwzNnpJSDlUcGdHM25NMDFiMUxxZEY0RXU4WTREZVpTUDBXTk5YTGpreGw1dmZVNklNVmNseXFiby9zdFF4aVRnNkQ2QktjUFA2VFdpek5lWFk0UG1Ia0MzL2xpT3ozWHA1RmtLNzdSOVFhNk1yUkJpSHNSdzN5TGkzQVBZdlAyZ0JVeW9iRmFkOGtzK0doOFF6MngyK2dybk4yK0JzMEJTR2J5V3A1TEdQOTRiQjZVQm5EUENsTmY1WG0xUmNLeENxTzVZYjJVNkRpTXhkRHU0OUsyQXFGTkpCTDNTR096a3UzeERVT0d0bXpxMTNrbmd1YVk0RVBudXFhcXd6ZUt1a0lBSldlYlBMNUI0cTNtdFJTa1pzUk1hQXFUaEpUY3N2c3hyMTE2ZFJ6L1U4Zyt2SmxSN0x5ZEthNldEdVNNOXJoNWEzV3M2bXRaZ3NXdjB0SlQweENscE5idnpNV2FHZlJLUFRUamZOU1FTdnQ4dHFBa29raWRYUDJrblkvbHh2Q3Q2R2Zkenp0OUUvUGxqVCtRVm5ETW96ZnhNL0tTU2dlMDdwZnErU1pBR0JBUjFoWUJ5Qk11R2N2RHp4VDA3NXBoUS83cXRVaWZlVE9HTXBXVitBZE5xczZ1REt1YnRkUytTL1puODZsM1JXVXdmUlhZWFZ5NWsvcUhHOWF5WUtWbEVEckw3SzVUeEl3L3p6bUE5elNJbENyVG9tK0puMlJpUzNIdTFneXl5SUMzMVU2UlFBWDI0cG5keDdFaU0zaTJVRWxKVFpUenMwWS9uekp0R2ViM3ZvaUN6d0ZxTlZXUWhTa0NQT2ZDNXd5ZC9xY3BoajJkK0dodkxBTGVmQmNnMGdKVVFrbVc0WGVBVlZlcDhqTWxmSFB2WVU0ZS9VNjhxNmpiZnJKL0NVNk5heHp4R0tnemovWWpWbHM3VmhWVm1hQVluVjIrb1FPQ1JFUHJLaktLdURWZ2NLdStKK08wa25rMkZnTytrbHA2VVdnTEIzaWl4UU1ZTVVUa0l3Uld2amZMNUpkVWc2V0V0cGlPVEl2MGVIYm1tcEtab0RrLzFDNmMwa3JITTZTcmdzZklLUXZaNXdsUGszV3dwRTBWMzAraEhLRkQ5WUYvSjFYVTdHRlpCYlNiTFZiekxTT1NxaVoxTXlSWTdiaUQ1QUtFbEU2c3dIa3dHOEV3R2JSTWhqQnZ5RjJKcHM2TFd0cm1vQUJDbGE0U3hUMSs1ZVBxQ0h1bUc2andpMEIwMHNlOE5ZWjc1c2RTWXlIZ01BWVB0SGRUUDRiMFltNzNFQzgyajNPZm81NEZOU3kyTzFWYWRNN2JxYzZJeTFUWFJRdU5WNm1VcWl5djZ3S3N4ZDVSaCtlQVJpRWpkNUFvUkNEY1dvZkpOVGlZQnZUMnFITnBNd0IzZ2l1UTlUdHRvUVVaL0ttS2JrR2VETFJKL1RrdDNqMTJIUnNzK3Q3WUxXTC95NHh1RElzRmwvcllMcFhKREFQQUpZc1c5UTZidXNiWDQvS1gzSldvcGtXbFV5a2VDQmZIeHBmeVZ3d3oxU054czRDT2hEbFRLNmgxSUJoVVJFZ2IwZkxPbHJ4dDg0bkF5Z3p5ZmZqR0JuU0JUWmZiWE42RU5OalUrb2xDbmRtOEx2S2Via0lhMUc4R3dKQWdBSHcrUS8zUVIxazZPSXpRUzdzcUN1SVU4K2wwWGFLQjcvS2dGc2lDT3JzMnpXektyaGtGemhubUs5SVprSzE3eEcxdHJWZnpPcjlZak9CZTgzd1R3SndRT2RET0orMW1KaHQ1S2k3STRaRnVUd01qYjlxMFRvcW0xMzBtTWlkUnY4YjNYbFBWV1Z1SXBaQVNvdjAzVFNxL2M2UkxtUk0wdk5YZWcrQkdQSUtabWxvTDRTdlRXUUVtSGFwNHB3bmRuKy9XOWd4c1R5MXRzeVY1NE9wazNTU2JIQ3VXckdpbytHaElNRTFHVjdRR1hCZEhJR2dxOTRoSlpJWTJpS2tsUzRoU25pSzJ2WnlOcEFGbHJqU0JXZnE5ZzA3ZUtYdWtUOVp5U01pdS9rRHVCQ2poV0RTSEp4QjFJSjN6N05vbmo3Nmd6Y3lXbVM4YXNRZTZLellPZUxESkM1QVVhKytvUUhnK2lCV0tCb0pWRFd6WnFGSnJ4Z2FHSjI5a2tOd2VJWVFVTWhoUGFwdU5HSkpWNDN4dEFaY3l5ejV2ZEpCL3BDVFhJMklkS1pjM1FWdG9KRUZ0SkpMK3NmQTJTWk0yL0lNTkRKZ0ZhamtTWXNmbkFiTlFJeHMrODl1QXRKUVNKV1dFMDNVVkxoN2hLUWhiRHBqMlRUQngwK3k4RXVJZjFrSThqamhkSWw0MFpqMVVSWTUzMjhlTk91UFRoNEtKWlV0ZU5oYjhVem9CZ29PWGNNN0dJOWJNNDdtMU9yVnNuOTY5SVRnTUlMQWZodW9iZFdTY242eGR6RDFPSGZob0JKMlozNHlTWS9peXZIVlFaS0VqenR4YVlVdHFJaEh5Z29BODh5Vy9EOVpHaXZsMDJrZWN6OU4xSC90NndvOENtQ2UwVXg3TVl2NW5ScmlsdHNhcnZoWFA5aXdaL2lSaDk1QXRPajRZNjl4ZXJGWE5aTjlVdUU4VEQvUnBaRllXc0t3cXk4cHp1Z3NyaWVFQlpXTmh3RDB3RFE2TUhyT3N0M1Yxd2phbjkyZzJSUVJjdHY0SXlsbkhZSC9hRnJZNk9iZTdvY0dtMjFIYmYyQVhjSnZrRE0rU2k1bkZxM3BZbXpzcXI4Q2N2cDU2NHB0ajhRTkg3cGl0S1Q3NTgrMzhpakQwOGtCeCtnVHZnK1plU2o3dm0xUGZsZTJ3TURKZlBWYVE4M1JQWWI0SXhrWmRrMWZSazVKaXEwVmcrZzNydHJJR2pxcS9YWVFCZU54Wks3WE1PK2NPYjVjSVRudWkzWHV6OUEwdUtWTkkzODJTekVUdmRMeEo2MVJLVVQ0aWxZemRWUitGaGZGak9hS0lVUERpNjBsbWVCcGJ3Rk8zbHBMbFIyZTFWY1JNemNiOElWK1BsNVV1ZlhBaFcrSW82eTM3SExKQVBFb2d4cHZ0MEFWc1FpYkZ3VHE3QTJJN2pzMXZMVmRrS2Rtd0JrMjVGem9zYk1KYk1LcFUzTHJ2eFJMZmpWM2gvRkc3VFRFTXNReW5JcVJRdEJsdHBsSERVUTNkbTVLNHdoK3BxZ0pGV3FsNWZzOStSZ1VFS0duMFZhMU9GVzFvWjhmMGhXRmVkNzkyVGJUdDViZWp4amc5ejRoeGgrVkwvRVpYdHZ3QXl2a1htTld3dzNMNXhHV3BTTHlaT2c1OEJmY0RDUld1cG1KUE4vckFZSE5yNDhqdzZDUFp0TlJ4aDhBTTB2Mzg4ajBZUVdVcURpb2tuYnRNdG9wV1pVeWNpOXl0a1c2cUdwaXhkeDVEU2p4QUptdk1HSnJxM080K2hNOHRra1cxSXZoME1yWkFWSTUwT2NVQUx0b0JKa1FvVGtNeHFyZlAzNVRGMVJsNG96NS9sN0dKOWY1cHhOVlZXdVJLaUdTVkpTdGRKa3lxN1VEbkJwUytiK3czekdBVTNCRWlheDdLMVpLRVY3MHV3d0xKeThWQTlPUTZ1dGxaclJ3WEdJcGZSZTN5VmVJSEJjVmtIVmVwQnhIL3BaTHRUeHRhbUM5TThZUFQ4cng1Tkc2MURlVTBCdzdmam15VDYzUjVrdHQ2STR6Tk1MWmdPSHZsWVk5UTdhOS9Cekc5QktOWTJUV1g2M1ZEd0lZTGIvVFQrMDB2N1VVZEpiMHlYQi8vVXVSeElTQ3FYWklsV0l1RUxFZzdpck5PcWRUUGJETUtYS21nbDBXOHUwL3FqQTBMaWJ5UlJhNm4zM1VBaTBYYTRueHJuUElZd2dJN2FadWF0UkhqOGtxMXF0WW00ZnVXV1hDWHlOekNGamtITlpNRzBPNmdjM2R4S3RCK01SRDdRelJvT2pKOUtOckxzN0d4SUVydDBKQ05kbHlBVWkzYlQzZ2RudWFJdzM1eU5DUWd3YXNqdGlwWk0xWkNXbEliOE1lMVFTaTJ6T1hockh2OXVCREh5S3VEV3NpRGV3OU9ONEMwTlJJQ2NCR1NYK0hid2srUW8yOW9sS2VIN3gzYWpCT3pGSWZ5L1Y2M2x3S3RxNkQxUElrc1pMK0orak9HaGZCTlJlQmdnVlcvRkRLYkpxUXhVazdQaHExL3k4Zk9zV3J3amY1eTdoSmtYbzRMQW41bWlTOTBsOU1rbDZCbklBUHNIOU5wVUg1UThxVVFvdTB0OWdQaUZqVHlxNTd6aTY0TlBKR1ZiLzRCTk9laVFZaFNxWWpJNXd0S2xSUHhQM3NkYkpWNHNucUJCc3lmUEJDd21uUHp2amtacWc5UkNFUmFCdk9GbzFjTmF4T0FTV2wxajFGb25VWTk2N0o3em5GMGtTL1I3RUVNdng2c1JGajBnbkNUQWFRNkFpVm1pWFV0VXNBcUVkM2tnejRzUFI2SWpVZnJOMnl3bWlEN0tMaHN2Mkp4Mm1nQmRvZHJCVXBMZjg5ZklnMXBaN1p0T0VpbGJsUVRmQVg2aTlpbk5tMlQwRzQ4UEJUOEJjVzRzK2lrTHArTUJ4NC9BcXpXNFRrbzNPdWdhRmsrVGpxWDBwanRxR3JVRUUvdHZsdFRWVlVDUlppejllZS9FNWgrdkdHMTZJSFVFRUI0UWhnYU41aHJ2THVSK2F5a3ZzQnQrOEg1d0hrd0dsVXJab2YxMWdpdm5kWUFFYVNlV1NoNXU1Nnp6U0dLU295RnNjV2hYcHNDcDcvSDF0U2pOakZHWWNXS3Npdm50QTFqMzFyTEliSlFxcGRqWUwwNloxU3ZpeWRJKzhhZHpidlVnR2krMVlOcnB5NXRKN0NzOEFiNEdWcndsdHFQNXpPS0tHZldJNUhXTnRZRnN4R1RaQzNnNlJnZHIrSmVlRDJnNmc4eGFkQ2RQOHkvSHoyTlJXY1NrRnlWZ1BRMWpkRDJJLzlhYk5OanowRmlWQkUwTncvTCsxb0FlWnVYSG1xR3dlU1QwdXpCUXplb0N3VmREWTVRR011QlRjQXJENWx5VlZ1UWZqZGhLL3draksyYTI2U1BMeWI4Q1pMZVA1ejVYaWNxQ0ZyeUQzbktiMG91MTQyWTFQeTBBVVQ2WEF3V1VscWFuZ0lpRytQZW41T1FNNWdaVG00ZERCbDY3ejBJR093WXlXcHdXV3E2ZVNsMGFvZzQ4Y2g1Mk85QmliT2dwbmVWTU93Z0pYQUZOSEJLbWF2aFJzeWM4b3EzWThXZGNIUHQ2OGZSWW1aNHpoWjZHbGhtTFdLSXArNGY2SWVrL3VCSWRCYkhxSWJLa3NIcFFtL25MTVo4SE85bmdyN0VaTThEWjZnaUFKSjcxVGY3RGtEQkxDYkxXSGpYdWRoZGF1bTJ5ZlJVU2RFeHpJUWU4UUNjamZRRkFjOHF3OTFUSFhacVp2eUluNngzWmRmdkkydUZDcDJiUVRCSVZ1MDdsdTJZU0FLb0FyY0F4R1A3RU5DaDZscndSbmRqKzN1b3pMOVQ3VjdOZDRWSTJINmpVMHh3cEtoNlgrYWdOelRpbHdPWEtEZDBIeVlJQTV3dkliNUxPek9jayt3cmZ6WU5FQmwxYWQrUmJaa1hVMWp2ejNKVHEwSVJ1dEtRMTdmNEswMEQzZWppNHdpTlVwcjFrMmh2YVdhQkFkMnB6VGJLckkrN1BTN3hyK1o3UGd6cDJ5QnM5anJtOE0rL29hbGxrdkViNldXWEJVSjFlZTZGS044Z1B3bG9LaWc0T3lVenFxYmpOWEdyamFSR2ZtZmk3ZEdNeWY5NkVCYXRaY1greVE4bmpwOVJZemo5bmVlTEN1QjVJbWJ0bi9FZDBnbXhFVzg1elMvN1RrdENoNWwwQXl3U1pJS084VlpER1JFUU9TNng1WDdnbUlIWllNWmEwSnF5c05WV0E1WGo4SlBzYzV5MEgrd3RYNjZUdnluY3pzZGV2dVZERmsrdFBvcHI4Szd6NmNkd1JiOU9Ldmc0Q3BFaXRNR0FWU3d2TTVhbWdsaEpnZTdRdmVHRzNTZmgzMHpBcWhXV1F1bkNXcDVnZURGZGE2RUdtdUFIZG5LNThxZ2ZWcUJMWURrY2srNU5TMUpKQ3BocDhZMEdjUUVPbGh2WU4vTHo1R0ZBS1lPQ3NlRmNzbng2anQ2OUIwSXpKblVBWDVIZzR1RTZsWHpydXB1Y2xGWG1HRnVIWTBDZnRJTVAzQ1VMa3lkTG04bDF2M0oxVUNFdlIwMThhSklHZys0L3hHM1ZtWW1ERWtjTFdvQ0NCTUdZZDNaVmlpQUZJK0wveDdiRjBnWGdLeUkycm9DTnVpM3pZcFd1ZUIwb01rRkE4TmFZWmxpTnpXMzcrZE9qUnlGVHJsQUQyYnplTm5FNzFnRS94YkQycC9zZVlES0ZnTE1Ea2FKOTZUM2NCQ0dWeVovcXlmNVIxenpHZ2FTU0YxSU1NU2JVR01jK3pNUVBWa0V4MFJIeVVHMlltSDJzd1RNZmJtbmZ2dkZjMnhoRTA3eWtPQ3RrV2hpQm5GSVBpVVVCNW8wdjVCVEQ5M3dtTS8zVGEwYUtKcThEbitFQ0FUekgyekhma25aKzN6ck9hWG9XM2hqaVpVWUM2UXA4ak9rNUptM2JNUmIzUTcwWG96S0VmRGVmUGV3ZzhSVUN6TFZmTXhoZFppUkdvSlcxRU1GcHhORzMvYTcwQmUvTGgxL3dlb3RxNDN0bEYvZjRqUmpsb1E1SkpmWHFSWDhheWRyZmtoZzE1ZWdrQmxaeU00cmNaSkxjMmNibnhUeXdJTkNqa0hjVkZ2YTV5eHhJbVptcXBqSy9FKzVpbFBZaitvZk5Oazd2Tk95ai9uU1BtQVVPbHk4dGF1RGJ5dEFXUXNNU3VRNGxtNGpJUUlmTmh4b0VHTFlLd01UMFgycWk4a2drZUZxUG5YTHhoRlFvb250Q3hleU9zRVR2cFNJNE9MeGtselY5VzhhNEpuMnZ1Ni82ZzVTNHoycXRTNzRaL1ExOHVpdW42YzFLTGtwb2hyV1dYWnNqd1hnWFhHcFVJdkZNWnowQlNoOVZKRHRyNkVHSkdJSStsOVYrMzVEUXpTdElRbVVsdFZybGtHRnFKNC8vcDJFdWxFU1VnVlpDK0lpbmdTT1JaZGs1U1ZJemE3a2hMbEIxWUpNaGFaMUY1THFxMEYzZmhPOFZ6SzFYWXN6bUVkSjhZNlJXalExMDBFZlZ3U0JIRmtKUzlnM3JSdm5BajJiMjlyU09LM0k0eWNOSGVuQWowbXFLVDczRkExN1EybDB6ZFpJd2daQ0ErNDVqc2E2ZzdUemZGSE1Zc0hKdThkaDdkemd4cHpCUis3YlhWZGsyOUFZL0lQVVJGZXlPTkQweFpaTWx0VllOR1p4Yk9CZXNFUHB2ZmVUN3Jna3R3KzVnamp0Zkp4TlRsN2lKaWZXVTRwVENiZ2dmY0M0cW9oV0FYOUNleFgwWU4zbUFVK1NJdDJPa2NLREkzSGpSbnVPTWdaTWg2eDIyUEdvQmtIaVgzaGtvaUFkNlg4aTV6WVRDTGFXdndWMWhsNjM3TFJkdnRqSHVYKyt3Mkx3UDlUekRORFBYRFpmOHdWOTBLUjA5VUY3b2FZN2dzaGY5MzdkSnVPMnI0UENRL3h0S3BjL1NyKzVHNDIwcEFzQW83T0RkQmRDOWhIWGhWRWU5U3lHTWVwb2lqUE5hRlRrQTdPaUV6RzJOb09xNUE3WHpyb0FHbXhUait0N25qOElKdERoT2h2dmFiSHVQd1Q3aythL1pleFVMZTFlRWRPNzFjeldDRTROS2RpUVVjTm5NSjVEdDhtNit1MzV1UmRKcDJZUDF2UlZZT0JVcGpBUVFDa2tHc0xYUmFQNTdHNlNmY1dtSEVpREZjS0RuOXpvZlVvdHB2SDVtU2E0Z1B0akhneTNhakd3WGwyS0t3b0xIbTRCTFJJL0VtcEl6ankvYW4yZkticHJHb1BhMi84dytHMFBWZ1BXdjNraVN4UTB0NHBMMEpnZU05anU3bzRoZnMzRC8wc243TkQrU3kzdUdvQm9adGlZWlBmdFBPRGZabTJwQ2pLQ3ZhaEtTTWxJOUdtMTltQ3NNQVpNdCtOaFVZZWhxYWRGUkY4OUhvV0tHeXNqcmNjV3oyMFZvdWFJdGpsOFdEK3o3ZTNReEx5SVhwM2NiNFFBa1k1WkdtZk94d3FiL1RaN0VrNnFxQVRpb1l2cjkvaGpTd3djcjZtNmgyOXYrenloK2ZCTEhqLzhDOVJJalBIK3pBdDJWc2pabW41bTJjYlZPQlJTTUVUVldLbkRhN0IzaGNKWDF5dXRLTUJrTk9GN3dMVFZVTitxd3NjS20rVlY4U25xWG1LTDM3OW81Y1hRT0Y5NzFWSUp2OVRlR29tL2xWcXpQNk4xVWVJK0dyUm1XL3RaOEJUeDlZOWVML0JTdk1CUlJoNXVJdk5UTFNUTTg1aHBzZ0dkNEM3Tm5lNVlQLzYxbXJpOTdOVnZLMWUvVXFUdXJNdlVRemZZZ09GcGJ3TGFqdDBYMkdGN2dJNTRySUYraVBOdHlqQlcyRDlQQ2ZUSEJSN3E0L0tpVysrNHpjZDBJSUR3SFhCaHpKVE1tcnNPQ29qVGNVcVRZVWxuZGV5YVdVbUt1bFdRb2Z5Qk1HRko5SzZUbUpkZTkvK0FUSG90MVZ4U2hVcDRuRmtOK3NBMnZ0NjhheEpNa1BYbk9JM0lUeGhGT2RQaVFLUGpCaEg1d0R5bkxnN2N2dVRaMHJyUG9NTkZHcGg5VHlhakpWQ29nZ3RadjJXN3F5MjhSMEFhemhYaHJmbGh2aVBzeEdqV2ZYU0xBU1hzbDNVNkZmbTA0NGVKc0wwZDFROG50ZzZKNWpkWFB2RFpxMG9jZEo5L1VOM0FpeHNjcnVidzMyRkFMV0pZUDNudE5BR09tZGxmdlc0YmZ0cWl3aUJtRXJsT09wS09VQXNJTndBNGMzZERuRldKQzhXNkJYdmtBV3JXb0JITW1yU1o3V1FZVDU5cW5BcE12Sm9lYm96ZUJ5L1ZVRVgwcmg4MlFYNHgydEU1R0UrTkE4WHh3UFdnNHE3SjFzZnl0Zk92S0l5ZXd0UzZiVitrNXNvMGdTV0paaTV1WjZ1bUs3NWtLOFJJUTVJU0c5SzlYKzJxZVQvam5QenpyczNjWUtnOG4ySUl6MHplRndWSU9PcFVaUDl5cEFqTEZFbTVOQ3lUSXczckphQlNISC8yU0dRbTZsOStoRlp1b2JHTnpGYStzV2NLdG1jL1ZhN3Z2WFVUdnhYeDJ1a0pVMm1mRWRlWCtzVHdCdWZGWmRxQ0w5K0Y1QW83a1h4cWI2Ymsya3cyLzFjUlFaVlhJaDJ4d3hEam5iUm1Ua05FQ2NMTEtrd09vaEM4UEd5eE91ZGlRZkVwR3lhNG1aeG5NWi9JZTZmc0dKeHk4RDI3OFVYSE9ab2RDSzNpbUd1eExUWXZJODB1eXNmNGJhcnBiR1BqU3lDeGxscFZWdzdlYmpoNmk1MFp3SlJFM3lnZ01zL1hiV1Z3ZVdybXMxcXlyNURJSTVkTWk4WnF6ZHRtTzJEamQ4UFEvV0ErNDBXWDNoQ1hYeG1ZdUlUWTZESmVaL28wNjRWZEc2dTRtRkdxSGpsZzgvRFFKZm0xbkF3a2NCMWxZS1ZpZUFkRWNTdVJYd1NDQ29IODhvOGdUTndOL0ZQUnF4bXhUOTgyaU5BNWJvZmlnbmdoTHZlbDBGMDBjZFVEUGZBSGtKNEVBU2JvV0FYMkN4VnRkWlJya0JVNWdqcGkySmtWbjdzUE5kYk1FRkdzd0N5T3VXWTYxS3hiMEVQaVpLdmg1bmY0QzlKSHNlOHJjbndYeGNkQVBPb0E2OER3UmZCVUJ6bHd0N0dyUXg5RUhWMGNrcnhmVDc5bTBoVkJxZXRjNVluRGg1VzRGOHA1RkYvMHI1eEpOajBudXFEcU5EWjBCRDFmMGp1MEFsMkdjMGJxQzlqZTBTZ25rek9kQ0d3cUpWV0FhS2Zrc0NXZDFIT3pJVU9xTDNKSGN4a1hyeDdoRVR3cXJUSCsvZ3JLdCtwaHhJN2lESTJCdFRiU2ViekJpRmoxV1hXTEZWMHJkendEbzlvVEZrVmtpN3FpU2ttK3RrL0M4YWNXazkwd1BWSEJLVTdkRHc4WXVCQ0JBL2JpYUx4UDE1VkEvcncxSTZ0aEZ1eTJDeU50TkpzYTNWWklrdC9sb3NIVmM3dmN1bWxDSTBScUJEYStVSXRPa01oaWVVMTcvM1RSOFJBYjhXWStuNmRkZlhjazFraldtZmpDVkJYblpXQzMrZDUvSERyWE05c29mZFhQSzNXWDd3WXp0bVNWMnNTa2lvYmtyNndWVUhMdU9OSys2VEpFWFZVYzJaanpuQlYxZTJjTHNHMWxsalYxdFRRMGMvWS9JSGc2a2t5VDZOdEswSC9qTTh1bW1WcE04bU1IUmtIYzJabnBLNlhFWk1ldnpXTnE0T25RUEkydmNDRFlEQVRZdFVNam1OWGw5cjIvN0NiQzhUanZBSlVacTQwcm5zQnFRdDNzMDErVVhlajdEUm5qbCt4bjFFOGt5NU5Za0V5OUNLdWg4VDNmQ2JqUFduUHJ2ZEFJU1N2OG5DdjNHcWRWMmNhTkpCL21XYlJRNTVIbG83TDlyaWQ2UDU0VEpMUFN5K3dydUdpVmJHZURCbE0wSDg5OHhQYW9GNkdjVjRGWUpjeGw1Q0RrUUhuMVlveW4xYkZhTGRjNnhwUUpaS2tZZy9oTCtIcy9pbFFFYXU3V2lCRXkzaGNuZWJGckJjZHA3UnVEWlZEUHFLZzFFamkvL0hkT0tsYW0rV0ZWMmVhZXdiTkI2WVpvWjlPdDA1eVFGK0xXTU0wMVFGTVUvQ3dINVJjT2hWR2d4OXl2dkpiWllKTU9HN3dhV1RFdklqTWpQcXFZeVM5T1lWbUoweEJ5T2VaUCt5TFhPN1ZhOHNwSTR1TW0zTm1CdytIVXovWDYxQVFBZmxyMkhabkJSblcwVFZRaHdZSDdRcVZ6d0tya0JNWm02d25DRy9idU4xb2dJendROW0rSXQvNDBmekp5aVlSazNJSWU5SVYzWVpqV0wrc29vb0svVWNycUR0dDhtdEUydzFoaGJpTjNqWHQzV0RVMExCQTBqUWZSTE96WlpnTDVYaWlPanhRdHpjT1VQVkpxNzlZZDhMVmFEdmNySjIvZkozSmRSa2NRWDhUZjI5bUpVZjV2ZEJOYUVCWFZTcUtTYmlZWjN3aytIbzUyMmdvNFg5TjdEMkN6WGlxSElLK1BMYXgxODdjQUtGeDk5S3VjNlJEMjFkQ2hFbW42WXlvblUvOVROU2tzV2hmYVJZTm5keWVhL2VYcnR0bjhvbjRrY0VJNGFnbnhiY1ZYNEZkS0VlTzZ2cUdFZDVmdWIyMkdjcHpuaHYxWm1CRjJoZ3d0UFRObEFEY3AxcEhyQlB5ZXhVY3hIYUQvZGUvZTEvSVNpc1RYRCtNK0xGcE5kYktSUlBuSlhqSmp3REQ2N2FmOThmTTlGZGEyZlI2c2ZQRWtrM3RQZ1UzVEZ3eGpsRmZPc3JUckhSVFlGVktyMW1kOHlmUlg2dmJjc0RSYmRjRDM1YUVFSlMydzlabGdXb212TmdwakpKWWFqZmZ2MHpCcXAycGVsT1NIQUIreDE0cTR6Z2IwMFZ1Y21kRXRyQUp6TC82LzlRbWtIa1JSMVY5dzVQbjFsZFVOUGFyejcrV0lMYkdBRkpuc3JESUI5bThrbzNlVDNTaEFtZjVMd2RjZjB2TTI2bGpnT0JtTnA5Y09IRVM3VGViZEtodU5KWTh4eEw4b2tWSzF0Umt6NFE2WmNjYWx1eUJ2cnhHUHQrSTdEU0o1amorK3I1eVlvSHNYeFpxMC9wZkJjMlYzNngrQlphTGRLQ0VrY2hFVDdXL2VJWDFTbG1jbkUrYXB0NUxFYTRhR1BnbzlsQXJEZTl0Q29TcG9sVDBBWHJRVTRXZFNRdm8vNmlycm9TbWlkek1qWkF4Qnk0dG16YkVTM01zSTVZNmUrdGlzK1A4Y2wzQVcxWi81NEVSY2ZkSFRwZnY1c1k2L1MxR1pTZVZseGh3YllJQ01KbUdRWENjbWw4aXRvdTQ5VnlRYjE5b2MvRE8raFFUNWVnODZuL3FlczVMVkhtMDhtdUpTQ291azEwT1JJRDdET2dmZ3FERDNXNVllcjhXMmkvcDdpMnlOUG5vekk0S3hQU1lkamhXSFB3VUxMeFZXWHlqS2h1WXVrR0IweEpkc1VVcVh4YkEvQnB5b0hmckpxaytpN0JzVWl3T0pwODBUMmlUeDdBM293T2JlNXE2dWhRWFFnc3RzVkpCME5tMlh0K2JQTlowdGdYaDc3aW1nMkxTQTZnbTZQMjlGeFVuRWxLQjNaTGwreElWTTVTNUJFZDh2WlRVZWlKSjIvMHgyc0c5V2Rrc0V5TDVaaEc2N1ZvcUdKd3hxOW1nOTNVMFNNWGtmakkxVk1qeXM3dXR2UEt2d1dCVlI2MXhQUnNUb3hMNVNKdjlRN1BoMnlvSzVwcEoxWHpwcUNwZmEwbVREZ0g4QjNTNzR4MVg3ZzdqNlRwRTZ1RU82cjIwTXJsZ2ZEdVFpVG5DaEgrSHlQYkkyM0dHVkMvQ202eEo3bVFLZ0MxWW9vVnVGYmtJdi9MZW9GbHMwT3ZLbDE1bi9EL0JBaEtPT0JSWElJaENrOEpOV21iUVIyQmVJcGF5SkhhRGw2UHcyZ3Z0YnV4YitjdDRJanVSMFhWUXZ0L3gxV1h2YjJrcDVQcHV0bVJ0WmsyaERBOHRsQ3oyZTJqNHNOR2paUjlaT1lZY2FuOWtyWEZaZHlZcTVHTE03WnF3WHo3UlBZRTdsU2JiKzZBUkVIdFZIR3pFWHo0eDFaam5laXdKVHBLSHhwQ1Q4NWVEN0xSLzFjZlpwTEhHWStZaUcxQzk2amc0N3NxZ21rc3lPZHE3NFpDOGZGVjhNSkFhbnc4UHlUOUJoUW5YWU5IMmVlbVB5am52M3FWRWxncnFsUTdNWFppdlpIQlhiNnloWHRkdkJsVzd1bGtNS0VMbFAxTzFtdjFvL09MYkJUN01kQTBYMk51cmE3amNGU2EwOG5WVEprK3ZudXpsdmdsVklzYWRTMHlLUVdaNGZNZTRYSnpxWnVoTnQrNHltQVZBbkl0Uk81U3dMck5XYzdZSjFmdVA1b1hRUGpSVmxGQkhMRHYwbU9zZDVKektqMTlBQW9UcnpxR3JNSmlBdkVtL3BQdkt0WlNyc1k0dXI0bkU1eDJuNGxlUnl1Y1VrbmVvQmp1YnYzVHBBY0RrS0NSTDR5YTRJdStwWFgxRjRZOVB6aTU2NzRjQmZ5UkRCZU1IQ3BOWVRsUldPb2FBWElGcE5HQlBDcnY3QnpVSWRadDB6UGdYWmFVeFhMTTdQQXBKVXcyUW9aa2JtNWtTcDBYY2JCMUZUK2JkL1lRUUdDUVdCZUtQMkpwcThDb1lheUpFVytWd3FKczZyanl4OWdIWW5YYlVKeG9INVIzU0E2SUpnZVAzSng2MVhoWGxiUFY5NnVHbWZkaDBLQnl5QkZ0MkNEMTJMRURIWWo4L2xpZzV0Zk1IaENBamNNYWNob0pqaXVhRFkySVZsblFXZHVDbmxyMmpmcnQzSVl1TGNtRTNQRHFBRndpVHoxQmt6d05RbDd3WFRQdWI3aWtqc3JxdVFmOUg4OUJIUHFmOUdFSk5Kc0FpVEZZajRTMllYUjlQVW13MDFwQ1pOWE42OXdQZitUa3R5RmhKQm80YjBQVm94THpURnJvdFQxR3pVN3l4M2pEOVpSSng2TTVBY3JXVnFWWkJJUHYwWUFxRG5kb2daRmtGTGdLV3lkM1BRMkJEU2ttUk81am9KK2svVFlBTy93OVh1VFllNmJYSW1vbGllZkxDQk9SenB4eXlvV3lZd1Uwby9aLzdPbWgySEV4SVFyRGtXc2htL1VPTDlnK2hmelRSc2JwNTlIbDNPaExraEdqNW5FRnRFSFhXcUJHNVdhVzc1MmRGQno4UWw2WFZJUFZLY29MYUxNTXIwV0dQb21yVStPRE1sU24xOE9ubE9keWZhUmZtV2tlTEJwZEZhcGpHVFZ5M2U3azNGMkdiM1dSdVlTbWVMeGRYM2g5ai9jcWJlS1c5bHpma3RLVHBXdDZqbFlCZ1M5YnBCWGg3cWNBSU9vVmhwbjFEYS9QdnkvYXVjM0NGMEZ1MEluM0VDdlRCelRZMmwyUnZaWWs4cGw2VnFaclV0R2djRDhVL2xtTytsVDgxcDB4V20vS0dOeWI2THVpK2RHZDFaaVZkNGtQdHJoUkNZckpkUGVGVnVaMDR3TFFsVlhrMTZzTHNyK1ZnL29DckdZLytCVFR0bkJvRURKNXV2WWZ0SGw5VnBhZGwvem9UamlUdmYvUVpUcnV4TGlxNnhqVmpnTzZuSFJxemttSGhBYktZRlc3SGtxY3A3WVZQM2d6ckNySi9PQWt2K1FuRTBVYmpwZFFxcUd1bHJiM2dhT2JXM1RxZWJFNVNKTEVESHczanNDbVdOdFNQQVhXVDhtZGlIWjdyOXF1NE5VL0ZRTnFUTEoxOW9LdGVsL3kxM2RkMGRZakQyRms0YTlmVE1KZVhhazlwYk8wSXVwV1NGSG83U0c1SVV2VmVBWnRPR2RvNXMrVTIzWWJSKzRZOUI0d3NSSzIraDJjRTg0QmducnZQMDh4RkgreDdlVUtFS0paZHhDcjdNckVwZ2xHTUE0eU8wWU95NGo1RjFjS1RpM2I2eTFQU3hqanB2OWkrVDBlakhuR3FlbFFMMW51ZU50MnlmdmFYc3NTbVprNEpvZkd3WStNTEcxejQvTHhyejBMMGd6MlNrd21hUm8wVS96RWVzdkxneU5nWUhCMUdaUU92RW5McXVUb0xYT0FVV3ZqaUxLMGp0TnZTMzkzdmNSY3J0OEowUjZ3UEE0bFFrMzBZVmZQQnZSOWZQeWFIanpmRGgvbS9YbS93dTZMWEdDSk16QThZN0E1VmVXakk3c2N5d0M4MGJSREpPSnpMMTVaaU02Q1QrK3BzNWhucFI5bXc0cFBmWEtwVFJQNTc0a2wyU2M0OThHaUo5c2w4dmdBL1owK2ZiODlOYlhBbkhOZS9KbmZGUVZOaUlSREY1ODFJc2RjMTYvWFRDOFhvV0pmOGRUMU1vV0M4OGh0OWhzZ0h6dnM3K0Y2Z0tvOGU3ZUlwS1VoUmZUUlJnUml5VzhzSk54cG1YVTYyWnJGdjJ4YjJWdVNaSU9nVFJVbmEya21xcFZRZGREbS9DS3poV0MrMWF0V1Q0RjNRSWxQT0hvR0padDR3UzJIUUpjK3ZJbVZRKzE3allGNE0xdmhNOFNUdTd1Z3hmUFFjYWRMUDhrQmtKNUhFeEpWeGtad1NUUDdobm1ldFBQbktlaVJ5RGRudi9IZGM2QUpWZXFFc2pZNFJxT1p6S0FLajJqY2E5YjB4b3locEtwRXE1emhEaUM5bTRJSitFQk14dHdrVXk3cmR3RzhBUFFZWFpmVFgyR3F4R2s0cEJ0Zm1IaGNTMXAva3E5cUZuWXA3MlpWMk1LSW5Mekp3MmlRVTJXWkQ2dVF5ZzlXREROVTFLc1pkMHFhTyt3djh3U0VHSGhWUnVrWldXZnN2diszNEFlbkRzWldLYmQvWWdRMEVFTGhFV2MycUNiWm4wTGhlLys0UUNYL1FEMU5sdERUZXhuc1UySXpnMEsxQjFWSmpmQVpzYnJFWjJZQnMvdGdNcjlyaUZMd2h4NTQvK0xWNHpDODhZYWF6eEh6WTZQalY4RDBZdzArV0xwUEJXYmFMbWVnYXoxRWVIZ3ViYkhpNDAvWGdiakR0dUhBSFpmaG9nQU43OWpTd1RZNnNITytBcE92cUtDT2c2TGd0NXJmTloyOGptUmJJVTJxbTNod0pIai9WaEdOL3FWMFNVbTRFeEN3ZkVLSWgzTGttelBDVmxiMmJFRnBnc3NPdG9EUVU5cU1CWnFrdmFtN2JVS3hmL2RSak0yZ0xUeVhPK2w2OXYvenBLUXQrT25GK1BLU0NwcUNWZi9xMzBPRkJVOTJWZEI1a2JwcVpwalpZS0E4Q1NLY2JXWVRxNE1xaGh0YVNJMCt3Q0ZoWUVJbklWRWV4RHhQTnk5TFdJMEExZVBlSy9oSm1IblVtS3JIV05WVmFRWkJWTlg3c3h3VnNEL2VZNEM0Mm5TWi9rRW1qNE5XT1lJZzJVMVRXZHMrYXZ2VG5Tb011WkpRbU4vM1Y3MzRxdVdvWTZtVXIrOVlNWWdNK0gxNmhlMEtQSWpObU83TDBwT0VjTWRXWm9jSnRNMUc3SXNWa1BGMCtkZjFkak1yZnd5MXVINENEUXZpTkFKWmE2UVo4U1YrYzhnV0xNME1VZFRXZ2hRYzhNckRsOE5ZV2lGQ3VxNzEyMWF3OGJaWmdGdldTZXpmeFQ5aHhpc25KblFzWHVKQm1TRnNsL0VZb0N2ZG11K3NkSHNhSHVnNy9CWFpHWG1wRXNuUUtnUTFtd2h0bHM3TUZIRllMOUhkWVluS1RocStyeCtpRFl6NFNSeU5RVWVZYkdNbENKS0ljdDByaGhWaEJJNW1DaVBzd0N4Zjk3YXkydWI2TzlCMVJzbVh3U1FYK1JCMUZ4d1NONXp2YWRWQUVESnhzSnVZZWh2dXJUSzIva0YweHQra0ZJbVh2UHQvNlFMaFdUNDUwSGxGemV3VjFJVEdDQlkwMVIvRW0vWGFpclBrR2dVZnBtdFpwWWZDdldxbzhrSDd2Ym5tQTdsTVdUZTZjaXA4VE9HQzFWVVpFNGtwdWtDbm1EU05JYlRnbkdSS0M1VVNXNlJMM0NQV25sRFd5cTJuRlNrUFkzTGJGKzU2dzlWMGV2TkRiZkRYRjIvMkoyT2crdGU5MDlIQ3JJUzdreHFPWVc5S2VDWmptZWdsMFBqVnE0Z044UjZpYnI3L3Vqdnd5M0RCSlZMVVFyeitxZWFucHZDRTNJNFdOc3pzSFl4WlZjZDdZc1hQTUc1RjY4b0pjSU0wcWo1S0o4TXZjVGU4bG53UVpiVTlOdkxpTlh4b3JKbGxaQXBxaVFCeHYyKzFvVEZwOWtMUEFOMGNTZ0lLREJCZmd1L3hiY21FUTR3S1d6QU9qMi9Zb1JtYzhTVVppLzR0WG03ZW1OMWpINGV2bGVmLzVpcFRMU0w1Y0M2Yk9qRk8zeXBMSGNqaStBOEVjTDhSZ1ExMk9aMjlEWElHM2htcDNWcjF4QlB3WUZPdGY2NWpVelcycjFSc0pMTzV1ME9ubVNKVXhnajhxZ1drUndXNWI3enNsWGJoazllWE1Kb3VyT1BRU04xZ3hTaTJGSFBkcDViS1FoWDJkVmZUaGxkaExOSjdWUEJIUDJpUityeHljZXN4cGZpcFo4WDFWNmJUSEZVSzUyNHJ2YjJXQ2xhK2p3WDlEYjFHM0NsNWFYZXpSNTFqSUwzYU9QVGFPZFZmOS9SVjhPMHcxS3JLSElIVDIyM2IwK2JxcGFWNHpJSVJiS3pUOWpzOGo1ZnB3ejRaZlh0bGFYUjFGODBFdTUwT3hZcU1ocW9rOFQvanJWZ0tveTVrMWhqakwza3Z6aHpCZThBVk11NHgyVm9kQm9sYzFZVzlETzgySURXNUlHSkJLd2tQQTZmMDBLQldBS2I5UGlwZDltYkV2aFZvVy80b0JFWGlEYTNKTkkzOTgwSDFvaVgxbXEyclFIUXJCYmZaWVMvTVdiNk53cGhuTHo5Qld1TEpBVFhiV3ZDeEtXZmRrVDVWYUFPOHVWRVZtQkYxQlJJYmRBTk5wN2Flc2Z6UnpuT2J1RkJGYUsxRWlzNTM0TlFhRDI2WlExZ05jNmI4K3ZlaXpGWTMxckNyTGRacWxwZHA5bWFKRUN0UnlrU3ZZRlM1SHZLT1RzNkFLQjBsRGtTeDhwMkd2M1kvWlhHUzJaZEtqTkp1S3VnajRQYlNNdXJBMDBYVG50Zk1yRG5Lc2dJNGpyZnd3aGdnMEpZeG10bkFFUjFoUFR6U1pUVUkzMmQ0MGw4T0d6c3FRaVpFcDNNL3hydXNQRkNzMHFUdzZMSmdyRXU1cW9mbUhSTTFBNk9WWkZ6MmdNYVBFekdIZ3NSV0I5NkJ1ZEQ4TGhrK1FuemI5UzhoMGZyQWkzN3NRaWtEcm0wWjBpSWJmalpNQmkvaDF5YlZhMjJOYklZSzA1SW5pU1BCU2hmWi9KMUZyYU8xMy9YU3BhSXFrNTBYZWY4YTBHWHZxQ2tjbW1VcTVmUm9LSzRudXh1dzEzTktRZUFnWlNtQjh6VWNSWGRTa1FHYllJWmtkTzVhNUVBeGtwV0FnRTFHQzkxWHdlTk8yRVdYS0tUSGpkY0JJV092d2paMnZQU2FVVkF5V2tpaUdab0xvQUR2b3ozbjRXTm1FaVdEMkw3SktmSXZIRDB6NWtJZ2JhalhHYm0xeXpzQmY3WWwvNEV2MnpuZ3VGcUZTWjIrbmtsTXN3Wnk3bVB0aklXN1pJSENtQVVqRTNhUkRzNVgvRnFJZ1laRjFZZXBaVmtBc0VweElNR1JLZURZSWV6VWZCQWx1ZkNMWFdsZ3c4eThQZi93SzRZL2dmdC9sODJsZUtad2ZOMUZQTlVpUlJPSVFuYWpJZVlmcFFSSjhUL3ROZTJucUVjaEY1aVhLdjZHcTB3RFRpeUhZSTZBRUZGa0dnMldOaWRjUXlNUHBNdVZYSzEzcENwWDZ0WXYxQXZOcmtmVjRwMXhhNTNQQ2prbVpkU29GeUdUYU1jbnRCVmtHS2hrNURjODBuWVlERWRUbHlUZnRxK2Z3b3FIZ1FhRXlaUFE3M0VGay8wWmF2c0NOTU4wM25PU1VlZng1bzI2SGtTYnllM29EQ2JIdm9Va3NISUI3U3VjWnVGWktjclNTeDNKV2VBckF5Mkk4K3ZUMFBMdVNMVTdiYm82RmtneHd4WjlyTFZoYmkrb1ZQVTZPdU56cm1ITGI5TkkxUnd5VVVhcmhPalBjeFF5SkthQ3piV2dHdlZGR05KN0RicDhkMGo2Y1paZURqQjM0SDVtSjI4bVA3U0FKeEozYXQwR3NRRVJCZUMvMTZjTGg1VWhpc2lZU1NiVmp5ZFNtTUFtNFlZbjdVSktzL0tLeFVTMDVIV2pkemt0RG5nbzN0ZkRSRFh3bEwyZmorbXhwbi9CbnlxcGdYZTE3NkNTWDVhbS9uT0FyVWQ0aXpEQlRVaURuU2Q1d0N4R1dLU1htVjU3T2x6dWROeTkvSWc3L3Q4TXUvTGh2ZWdoSE42TisxblB4bUcxUmpHOFRIVUF3a0lHTmZNNW1XT0tsWCtON1BLall3bHVkTGdmeGxMTThWYnp4STBDWko4aWU2TFY4ZEZMT244OE8vVDkxN25JN2d6U3ZVNzVkQUo4Z0RkOXVoMTlDWG1BR2d5L2RoTGlKTktXS1F1ZllLek91UmVvZmxuU1R6aXh1eGxHdGlXRmQ2NCt1NGxkNk9VV2o2d1FyY3BncFBCVDVJUi9qVTJja1RBOHBQYXBiYWVHZVZsVUxjV3dOMWpDaDVucHFONFdJR3dabWYzRGZzOFVCNHFPMnhsV3FlWUl1OGEyUUoyZDNXdzdKYldaOWNta2xMUUxiQVdETEkrcjVIZjlSQk5IT2h0NFplSkkrVUl1MDl4UnR2NmJJT0I5L2pIUkdOVHlhcDdXZVBBOE1zMVRTem9Dck8wUW43ZzBxQ3IwRWI4M1lrR3lxK0pJTkg4TjZnZzgyamZqUDNJdnpTUHltbHpXSEl1RVVMMU13d3VsRmowakw3NHZOK1hxbkY2OWllUHBFS2dUQVE1MUh6RVRoNHZvUWxMc3hvYXhpSXhRMGFQWlJVbDJGNFNMNFd3eFNhc296RjhpSENaNkx5TjBZNklNU01IckYvaEk2QXdRdG50NnJwTDJJLzRHeXJNVkRvMzRiNnZ0OHdjc0l1eUUvVFFTbnVOd0U1UWNjbEtYNmR3SjlFNldIanFGUWVwZzl5U1NhanZEUTh1WHRFb0haUktRMGMwNWNuL3Z4bzRjUFZ4eDJaOUExeW9GM0lRZDRFeUtpTXFmSUtzZGdPbmlTVjlvOEwzOGF6MG5qMFVRZ05aS2lScTZtT2tEeXVxMW1OQ3EzQ2x5K1BYdnU4WGhJUksxb3VMR2IyZGRwTEUxanVUL3Azb1VMRWNDZklUb01oTHBxRVhOY0x6VytCK1V2aDIwUUhhV0g5ajIxM3RiTzFBQXA1WU9vcFpUVUFvaVNvU2hFSkIzVnNWTHRHaUd3OVludmcxQ3N5NnZoRytuWllma3FRdEVTYWN1ZmUvdk56aVNnd3hwSjRjQWZ5VzhrcGJBVkltRGdqY1kvSkx0dXorbysxbW5iTkRxeStTY2xzWlNOUEZmSEJKRkl2eGtvTFVaMDlUckRqZExzb0lTTCtxbjUzL1J1bnNTOXM4aHo4UG91SWozcExlRXFlRC8wcWZsSWt0Ny9VcW53ZEd5dGhFVmhzeGVyVFZHWkNyWjBDa3VGdERHYTBkUDZMWFlGYTdNbEVZVUlMdUdLUWYycmN0b0laMHN0RkpHUkluQWZVUjJOMW9PeDBZaVZ0NXdibldObHJHU1o5QmJEUHZOUm5iUFFqTExyMDYwcStMOHg2VDlUZSsyUFZWc1JMZHc0cjM0TkVHYVVGRGFCRFpFL3BNUnBBMXQyODNQZ2JOdWJTMC84SjdpTEl5VmRYVVhMYm05NDNVMWtwUFpOREhLN0tPc0RGd0xTVkx6S01FSUE0N3ZlejNDdFZneldNaVNhN2RlTUY0aXgwaHpjaklGbVI0UHRLR2IxeGlhN0lCSTFFMFliQVVkU2NMTmtDQWx0NGxueVptQ2NzbG1BdkdqMVJ3ejBQMjdtekFnb25lR2Jvb2h1RkRqRlVHNFZGTFNxYk1zeFE1bzFmRGhmdnl4WHloYWlwZUFsU1paT1JicElZWE4xczZ0ZXFKY2kwZnU3aTlZUGJMOG1zcFEyaXZ0eUNyYTkrelZENWVPc1VCaEc2S0FyTHpzdjk1bEtPYWhadks2bkVuQ1NhTFNxSG12WkJNUzgvc3crWWRMQVVWbkZZRVFBSmxXR3JmcDF3QlQwYytINlZmZnlUNW5sQndkUDZSQ0ptaVVMdUNLNVFnakhXdWorZWx2V1R3QUcra2VqM3RmVnRuSWlOMUViQW1lTGpJOUppK203Ui9hYWhsenJndVJkNGJ6bHdXTklqZHFTb3NUaTR3Wk80ViswZGNOUVVyM0sxMG5IOXdqMURBci9qVnpYKzVjUGF5OG56cDFMOVl2bjZMb1Jpd2hFVUY1eXBsYi9HR3QyR3prYWJ2VmhBZlVuZHk0bUc3VXlkaExQU252MnVlK2xvcUZHeW12dE5vYTVCd1ZVdk9hMUVkaTJZZCtGYkRmQWhqOVJhSUNITjcrTEplR0Q0YXJ1dUJiT3lYM3pSSjg3RkJsOU9HeXB3VDlaRzBYQkpjbTJBYjY4ekJacTJnR0xkenM4QjNDY3BVcW41QllyTlZHMU5nOE5lL2ovVEs0bDhabW51MWdWRjljbHBCdnpzN3hNbXBYY3hIcmJwSHNEcTFzRGl2VFQrZXJpNndmR2RLMkpoQkpwL1JaRmxSWGlBNVRGUGtpSDI4SERmK0kreHNwbkJUa3NiSDhLdWhHV1ByYmlOSXhUbkFtQ05XWXNjdG8rM1dsNzQxdzY1TWZrTnByOHpoZGY3NjVrUHZSMWx6UUxJVXZCQkxsWmM2TXRXQkphTE1ESDh1NWxZYm9RWkVxTzZPVG5oT3NVeUJydU1MY2pkR2lxL3VLQ3ZWSGlRbVNuQ0l0MFZKSzZueVFHRmhBTkduamc5dWdUZ3NhVXVGSUw3V0RVbk1qaC9IcHc0eklDQWdJQ0FnSUNBOHYyL1JVZnQrbTIxOVFWKzM3Yzc5bjNOWDdTci9oOW54ZmI5ampnZWkzMjlnTjl2Y1E1ZnQrbEkvYjlXRG42Zy8yMzdaUDh6N1VyOVNoMzJmWlQzMi9ZZDRIcGY4TzBDKzN1cGNOOVgwQUY5WDBmR3ZuRDMxZlh6ZnMrd3EvVVRmN2ZyUjc2dnEwMTlYVjNmVjJRQTlBQldvZGVMRFc2OHdURUlYMnhZVjc2dWtsbUdnUWJOK3JTOGlKL0xwWmhoZVBaTFk2dVZHWG12VlZiRmg3dzdPNVU2bi9FWVZuMlRQRUxTQ1hPSkxuN2l4dllxdGtZRUZMT3NkNnVab1Mwd09mbDNnZFJCTFc1MUo5SFUwaGVMb3AzZ3hudGtmRXB0bmdpVnVneWkrMUkrdXVRTyt4aUV3NDloZjdOekxaOEJaUDc4NWxMY090d2FvWk5IOC92eDhjL09qampOZXBUU1lqT3o3TTIvbFVoTlJhQlVsUFp5VWJFVllVd0FiTFVMMGt6N2s2bVJVVzkxQWVvMjkybU02SVNHM0N1S3V0ckhhSDVCZXAxWExSZks2NURjVVdPRVVYVUtIdVVSOUlobDRTRUdzVFFDdlRjV0dETzNpajRaeHo1NW1mMGJNTW5lWWxNaFRqeGtPQWpydzNVdVk1M1Q3bzNXcWFQNnpWd20vWGdXaVZQTzJDc2ljWm1TSXc0eWRoVTFmeTNsdDVTRWVwWDhMVHBLSzhNWEs2ZzU3VUxQeXlyUHFCcTRQUUpYa21LdHJZRVE4WXF5bCtqUXBTN2IyV0l3S2J0ci8weG94SHBvZ1k3RnpKOGVGWjhwYm1IaUdBVENZMGliSkxwaC8zdStuN3FyVkdwU3FOclFSdmlUbWEySVpMUDg2YlZUeTdHazBsRzlGQWJKc29xeHJ2OGpLZmNjSXpBTlAwMGx3TTZ4aFJveWJ6R200b1I1T3JIbDVtdlc5MjVvdEJZbnFLVVhhWHZmYXdvSmRYeXo4NS9TT3JFb09WNlhpMm5ETXYwSk45eTFkUUtaczRYdm5sbHV5TVFHbnVTN0d4T2g0djhFRUZlVnltWmM4c3J5dXdISVc1SHhnaFU4bStxSENHN3pmdWRwd21ZVjlZMFErZDlham85T1JNQklybzl4blV3eXAzbHlrQnZwZ3pNWGpBVkhORGlCYS9wTGJKUlM0dCtpUDlGVWI1a241QWFNTG01dnAxODFDR0J0ZjR0VTN0RWtpSWl4WmlDT0l6WTBacW9nSzRDYXhuVGYvZmNoOC9UYmtYTHNUNnVhMnQ4MUR4L1ZSUzdYcHJrWUZMRGpzKzRHdUwvSGE5SzZ0cG1qcDExemhDSGttTFRSempIZStMMnlQM1U1MWhDelladi9mSUNHT0RFdWlOTk9jY2lXRTlnZjBIV0VZTDR1UUhuM2E4V2FzVUF4MDVFS2hmN1BnTjA4Q2FCLzNCZHlsZzF0VW1LNWpIWnRDTnlPeTBiSFRNT1NTaGJnSWJKTUFJL2s2aXRTUmxKeUJZMUhsQ1VnUzQ3QmlyZHd6MlpnQnRYaEY2NzlIcUc1V21MNnZtMEVpd3ZWNkwzbXVVdi9Xdm9WMTljRnQwb3RObDhTSU5KbjJBTmRFWVdMRVlzUzdQajdXc1BqdEhqR2RUbmNEWUt2T0dWS0xuV1NoUTNOV3hJVFJlNEVqYXNFMytPS3BpZHQ5eUdVYzF6Qzc0LzFYdjhBNHlMMFJ6cmRBSmFOSFZFbk9BOWZ1dEdGOHdTcGpjMHdpVm1GdHFxd3Y3SG81Y2VGRjRJTllrUmpSTEpobDNJc3UrMDlCSkhja3dEbmlsaHZNdFZ0bWJxTklsamhHazhUZGwrNVZNSEFIaVcyZTBPNnN6eE1tSm5wMGROOW4weWxRVG52Q3VXbit6RFAybmdwUTJxMk55elJxZHF3UFFET09VdDUxZDdnUGc3dGQ1bHNJSEIvK2puVnppbC84Z0hFcnRTclhJTVZBK1UzTHk3V01nN0YzajNLa2FCWCthREdNY2x2V0h5cUpNNlVVK0t4Wi9KTWpNT2k4T3JXdTBMVENiMTJ3S3hLajZPZm1RU21TZFFwRmp1YzdPY3AyblBkUDFwaWVEdTRUMWRKZTh2Z0F5M1BFSHlHY0N3TXg0UUtBWnF6SkovZDFHVXo5TnVtV0RBN2o5UHBWSit6Wk5VbXJxWTF2K05VdHRrdFlFZ1RUZGJadnRzRHB0OG4zdmtnMDBMRkpMa0Z2Ukx0c3RoR2RJMGw3SXFaRFZNM1dZa1VPVG05cDFabVhtQTdrY0ZmanJtb1dVcm9QL01NejErbmw3K1JjWWRnMC9XNWdQY2w0bzN1cGx5aGNhQ1ZrTFZBTnVzazZWM3hLek1WY1dOclI1WHBjODZBMTBodU5zZldmdzBLRlZxQUZwalFzVUI3RFlySE9jY1RWWldKRmZhbENRTVloQzBaU0tEZ2ZFVis5U0RGN0NlTTJtTE5xZ1NpdlZ3cEIzbmdjVGlnS1IrZ2paT05OejRRdEhOSCtMRlBhRU1TQzQ4c0lYSVRKV2p5SVVlMkNCRnFMZjcrQm9ROWo3Qjg1RkEvZHhvTlR4b1l1dWJEQ0pxckdNTmdLMnpmc2NzVUExT3MwVjUzd01HVCtOUnZ2NHBsQjQvc3FOd0FYcWdTQlBWZGNqZURudWw1a3hUYVhDOWJiVDMvVXE3RlBVVUJCdGh4SkdPcVFMaWFGUlBhaHZPc1NFcEtMVUhsSWxQT1ZQbWZxZExaUXhjNkl6VzlwdTVEWFRpQzhZQkVUTU1XR1JLK0J5cXkrdlU0QTJkU0VhaUVXd2RqREZ3ZnhUOURwZWxGaUw4M0hNNUFNRG1LRkQ1Y2VjWVFjTmIzdzdSNVczOWhETlNqU21JamJqUVBpVHdaQUZRNmIvRGhoNXc3bUl3MlkrNTVkbjRMU2JhZkZxZFQ2Mlp0RjBDNHVIdlRlcHpQUnRqNFVpSmNWcnNMam1ndzJRYk03NXNvSW9SNFpOcktlZkw4R0ZKQVcyb3pWeDM4K1JJMzdsVmdNNldjTEgvbkhqODQwVVgyU3VEUEZrVEh0N2p3cjJheFUvMDFWblpseFdvRGU4KzVEMEE4UndLc2RQNGY1NEUyM2taK0xGMWNrT2UyNTFJZWFVYTF5b2tvOGVWUlp4MG1rSUVZejJzNWVoQjQwSG9oSEE4emlDNGNVZmJwMkJYVEpCTkRLYVBpVmk2OXNHZkQxcktuQ1c5clR6cUFQVGJFekF3Yll6SjRmMU1rNm1MMDBJQnZoSmFCMUZJQXFpazBNMnFqY2RydGNHeUdLSnhtUkdSRzJNR0RLamZqTEZnWVA0ZVgwN0FtK21PNFVUMXo4MSt0aFJBd3ArMmM4QTFFaW1uOTdQWUVRa1dUL09VV3BwWnpNQ2JHL2MxRmZhMHZhczZYUzdiRDI3SWNRd2lMVldROVZHdFNxWmRUTVlFSDlINVBRZnEvRVJ6Qlo3YVhaOUpuN0pjMTBJOEtzdVg5RTRMUTFkaWpsNG83eXNMTWFMOUtqYVRnWnZWM1daNVFzTkZxUzZIb3c0NDlVMDRmZWZuVWxWREFUTmI3eGtLcFJZUC9SYnUyNzFsTWEyRzErNHhjUkh5WTMrRDZidGxSMThmVEZiOWJvd1djYS9hbWlmVEJlWEJiQ2NDL3pDUUpVLzZ5Ym9peGhGcTZBUWlhTEJxN1E2NEJ3KzFOczZDU0FJRWp0U3lRN1EyK2FnOE1CeDFJMVhuUENDamxTRWYvUExIOXFNYmlGVi9JWDRKY3RLK3dIMVhpcStUdDFnR3o0U01kUnRoMVpzRnBQdFF2UjlJT1F5bWJ3c0hJN3pramNtZDA2QWNrNldITzRmc3RjRW9vQUNQT0JEc2RKVlpLYzhGM3QzbUhRUlZ3RldLRnBmcjZuVmNQNDNsRzA2ZUh3QTlpSENnTFNSRGo2SmE0QWFzOXpScDF0Tm1VcmVQakFzcmpXRkRmcGEwOU14UzJYS1BqK1lZWFlOTkNXVm1RaDdCUk9FdldscU1ObHArTXVONEM2YkZZYklXR2FGMjRxWXJ2ZURnVEp2dGluaVJtQ0N6WFV4WFlwYXZJTzQxUXIrekJsdys4MjhWaTV4L3BsYmhWeEZ2a3ZVNmswS2RtN2h3WVJzRlZ0S3BlNFlXVTlKMUVicTZZdVhwQlRnNUdaV2taWk5TeWxiQy9PMG42SjEyR3V4Tkwyc3A4N24zdWZHVnVQVThBTkhlUWFhSzFjKzkyZ00xWTc4MW9oZjBCaThvS3RpNS9CWFBqbWlES3d1U0RxclVxVU5mUkRtRU1NblczY0YwN2FrbWVzNHQ0V1QvaGFSQ0tRWnFqV3BXM0R1Ly9PV2tBQ3pHUHhydkRpZlp5YjEzcUFHS0ZvVWNVT3hYWHlEcUNZN1JSN1pZZjZrRVAwdnlRZmxQdDhoYTJKa2N5Rzl1QnVOWkd2d3A3ckRpeTg3S0pKR0RGdjRldHFhbGlDV3lKeHVUN0sySG4vQUlucjdwb3hUU0JCY1c5SlE5dHp2WlRvZXg5bUs4dVhaOTU2TmZRNG5iZjNkRHZUNCtydUpaMjFKUjNmdmUyMWRSQUt0aEEweGhkMnRmdVYxY1Q4QWs4Z3hRUmFEZE5XVCsxaUw2WTcyaGYzU3dWd241UXhIK01ja0h0RkkvcWtYSGxIYzJrbm1KeEZ0bkt0Tms3NmF2a1hyckJzMEw3d28wdE9ON2dQVGRMZU9pSnJ2UGx2RWllV2thRk1VVzNsa21veW1RVC9saG1NeURnYndHYU0xaVJyZGxHM1E2dTRaVnM0ak93NXB3QmZSdXZZRnJlTkEvYm43cFU5Q3p4SE5YZkFzejU2MnBLUlNHekNiOGlVN3JZa2NOQUtUSXNHWnRveTlVRHJNWFhRZ2RRSEt6VG9nUUdYT1BYamovd2szSXhFK0lGdkFnYU5JcENqT3R0ZVJlOUhsVkJMcUhWT0R0cm13N2lWRlFhK2t4Tnl4dVE5T3dPTW1IU2VKc1d5OW05RFh4MmNvejB3MG9iMkp2WEtnTkd2UzRnd3pvQVNJbTBsMWtFQ0c0Y25GUU1LQkxBYmtwaXhWV21DQzBSYkEzYzg3ZTllWnZxTzVxOUlTYitXclF3TW42VEZmdkVlejl4aTdNazBIQ2QxS2dkT3pmVWZzd1krcDJlRnZaajZIZzVJVzE1SWN5Y3RLTzNkaW9VOUlQeG94ZUJuWXZ4cVNlUi9NZytNVGh6U09qeUJObmxaV0s2RmZHWFRMWEZCbjVUenltMXlVWmdkdjY3NEU5a09zWEc1a3BQWHc2a2RMVVMvTmNtcm1idHJoZWVzTmh5Y0h1M0FJYVVsUUtNOENHQm1ZVE8zci9lNG9iVXZTUUxFM09Ha0YySEFtbnB5QkZNbFp2WVFxbFA4ZVRyOVMrU0pSVHcxOGZHdVp5V0hSNmJkOWF4T1hraWkwYXNnREk3WDZWMWlZWmZaWVJjcW9wM2tHditxL0tSWW9ScXVKdjRkbkVPUkNqbTRtTWRGMlR2MHNUZkRIS2xoSldEbjFEaEhSWkw0dTlrMDdxSFpJaWxrOWZ3ZDhqcGdyT1MwRVhDcFdEVXFDR0NQV2o4MUxObXFkcTh4QTRCZEpIbkxoaElXV3ZueUZ4VFFNOVNSY0c4TlNVeFlWcnNBQmxUM1I4a1V2azBSYlpxSUFTYU1lakt4WEREUkZBMFhpZTBBWVRJak15bU9LYVMxNGxvaTZpdkNoVHBqNVVjYlRTdW85MFJnc3MxTCtGK1B1TVllVU1MLzFtS3ZoOEZJcGxlalkvRTRkaFlROEZtMDhMSXRIZzJxZmVKVU5SRVpaM0ZCTW53WmRKMmpDeWQ2b2U3V0pTNzh4cm9CK2RkUG5aNUcxd1I5VGhpWG5zRm9uK3pqTUdCTlJYTnEvb2grVTZnbTBxbG9TVXc5Z3pqa09NN3dHdTlJUithWEpOZHZxRks1WFFpQWwxTWpEckpBcWF6R2VYTnJNYmRtMWtZZUVaRVNMb3M3aGRTQ0NNZmdWM1cxYjcxbitCTjZkNlNMaTNnVEQwa2ZwOXdVbmZqTExUMG5Jd3E1ZTJlWVdMdGZoVEZDYklzb2ZoUURZczFSTkVwQzdReGw5NDhwazF3bjdTRGF6VEJuVjFnS3c5VGtvNnYzR1pwMEJ1TURtMmN2VEw0NFZRSUZXUUpmR0g2V0tsM1FrNDVWWW1tMkN0WWY1V0RXaGdzdC9kajA4VnRldnlad2JLVkZNOXltUnN4RXB5WXVoTk5wMm0yRTJ5TTJrT01ldGsydVlINTJRb0xIMEZ3bHFJM3A0T1ljUGk0NE5KZ0d4ZTV2L01zRGRkMGVOSHN1UURCQ2RHK2hsQ0FRSXVibWgzSUtRajJUV2J5SlNkdjF5cWJ0bnFiWGxHcmxUNnQ0bXUrZWxMRGNrMlAwUDg5TUg4VDhnQ0JteUVFN0xBc1FMaUtSTzE4T2NTR3ptQWhQU3ROODNHVGp1TnRseEVSNkk4MytTUlBDVFlsckZHTzBJaW9BRGtrS1h1UlFxcmluMENhR0dUdUpWbzNHSXM3RU5Uc082V0VPbjIxNDd2eThjUEZoZGZYSzNnaVY1NksxR3RTQVRwbWdQRU9ZaXkyL3QwT1JvNWVaYkl6TVJ6THJ6WEpHdDVoQ0NET0pyQjVROWhQZGtCU3pWc0VSOU1LbWZjODQybWtoL3djcXZRbmJtbDBvYVZ1NHJjTUQ0S04vaS80TXYyVHMvbmxMMkljSlF5UHpRNEs1NTNybXc2enhpMGVmenl0WTduSm4xSkp1UW82UW5WYmk4ZFpYcGEzL1g2RDNVR0dLK1lPWDR2YlQ5aS92NjlGbldHMHkvSXIrdUROMnM5QzJBMFh5SHF3R3ljdmZVRDRRM29UdkVuUmFzQWthUXhUYlNVL0FGZ1JtWkpsa1Iyd1FaOWtGNE9MVzNkRFBJNHJaOHBuTlJYTFFFVmZmVUVCSlFqb0hVZG5vTk1kbTV2Y09xYUZtNmpRR3RxRzVQcEsvWnpXQXVwVk56bzYxSmtiZFhrR3QrNyt0aFBHYVRmbkhmRjVsSnlWdm9xdW9vWHJZZlZvcWhSQi9WK0VOcEswTDU2WUplRWNOR0lQOHpybmJ6Si81bTRFaWZ0aytwNlRLMHoweEUyeU1wMyt4ditFM05RQlFQeFAzT3oreklrTHFYaWhsemwwZ1FmYXdRRVhISjg1TTcvYlVUZUpOYkVWZE9pYW50Q2ZpcEZ3U3FEWnNrQ3owa3VSUnlmK3BWQko1TEFnZmFSd0dGcjdPRDBQUzFReFJnRVl1VEVnaGtCci9HSUMxTzVZeTlVcnVMdGRlSEMycy9jSkFXaDBnSFFKWlUrVWVIVWl6TWxJNkxER3FRSkJ0ckNzR0t0YURUTFh4bkZweWk4RFpvbU1HQnJRY3pkS1pkMXJhT0dmRmFvczhONjF2a0pvUlJWQ0xDTmw2SXdlQWtCdDZQOFh3ZTZGRW1sVXppRWZNSmNaVUowNG41bWdJWC9Mb1FSTHNtNm5zd0duNzR1S00vUlE4R2Z5VmJERUFCZUJzV2xoZ1draUhodzkvYlNUU2lOcTEyYmM2VjBTRTl2L0I5UlJuVnRjd1ltdHdXOXh0MWJNcEVWOUJNMDc2ZFpkakRhNGYxOW1TdXdBRDBxeUVaTy92dXpQSURoV3lRRUswS2VhZXZhUnlnMVpwRFlSb0U3aVpBN2lja3JsbkJabWh3WHZvZXNLVDBid1NRWGZMdnhuNU9yL2V5SWNoQ3BIS2YyQWNZbHJjOG1QZ2FnOVM2ajQxaUlhQmtMS2lOeTVtSUJ5NzJYWkFmQTduOU1qc1lybTBSYnEwMHg2aEJabm4rQ1ZYbHZsNmNORHZwOTd1dTkyUzArRXZFcXBRc3RaV0Y4T1E5YnpBT3pXQnV0eDdHbWg2OTMyaUpDdlh5SXV6QjJPZUZlL0VXR0V1OHR4cTU0YTY0MmxwZ0VoUGtuSlZSNTFXOUFMRkpuWjBlQklqZEg1WjF1UXhqMEtUS3RJNi9nQlBNdytYdk1aMFlMTjFLTjYySTh5bG9oUDJZVzd0UGxPL3k1SVQ5TVQrcXlLb3hGdFNkejFjcjB5UWNielpyRWZDSy9Yc2JqUVNsb0tnWXJJK29DZlVWc3U0S0VzdnRzQTF1VDZIODI4REJPSW44R29MK2ZqNkNjY2pyVHE4RUR1UXNJUVdMQm5zR1FWUDFNTXpBbXBOK1FoamRRaC9xM3YvcWNqbndWaHhHOHp3LzhRVkpna3hHUFNROEFKdEFoQWJlMDlZZk5ycTliWnRsanA3dTFqM001aURWaXBrOXdHUk5FVVZxNEc5Z2hycWx3Y2RXd3VyVi8zUDJzZnVETTlRRmcvb0ZWVytodlRaMGNvaTZOMGxkVW0wRmhibjh6TUl3K0JsSExHcHEzWFZwd3hZTWQ5d1FBNGJYOUlpeEhzam5ZU2syd1VMOWVTbEtYaFdUaXFWM2wwWENBSjhTbEtWOWFoRmNmbTlUZE1mekp1RUdyeWc5NnpXbDk5OHdpV1E4NW1LZmZxeXE5SGFHYnVzcTZTVzdNWkJuVEFtYThWS1ZNMGliY1lycXBvSHBPb2dmWlA5THE0cFliTnZFdE5SS3VnKzJlS0lEY05LbjJDQ05wWG12bGszR3FZSmVQN21CZkxNZ2FjRzFtU1lCenh2bUJzSm92b0ZGb1Z1Y3J0V0ZnbFJGTllPUzRVM1BNMWJrVElweVJEa1hQcDJwNE4xOXNtUnhIOUJkZ3JBYnpIYU5tRktyZEptNHhuVFdPeGtRVnZDK0U0OHQrZzBFbkd2UWVQSnluYWFBWlk1S2F5dEFlcmJzMWRBTldnQm9PcmVkNVhRZWQrbEFzdW0rV01BZXgrK1EzSUlnd0NxUUxMK3V3cVF4bEFaR3VqYVN2eUI2ZFNldlNEeklRblhnRDBSVk5aZEdlTzhlM0RZVTBsamo2SzNZRTltK1EvVkwxeHUyTGRwWTQ0MFF5V281N3Z6REwyS2VkdlRPLzBPT29zWENHcVh6QnRDaUNhQVpZc0Z1cStMSDJuL3pnd0FIMjdXWmt2ZXFyWEVaRnhuZDA1dUI4V3JFdk1KTEJwbkdiVC96MTJSRlJnTG5sd3lXczhpaVNsNm1oTE9zQ1JKS25QU2JIVDhJTU84WmN1b1JvQXNRVGxCaWlzOFVQZFZ3Rm9JYUxZV09idC9sQkxaeW5SRWo3cEhvSllWNldTMktacVFKSnRFL3BsYTB4L3czUnhJQyt1YVRUVkl5YjhacnlvOVZMMEtiR3NvNzc2cVlINWVvMmpUWi9tQWdHVW1TUTJQMjFiZjNoQzZTVXk4VytpTlpwZ0VFajN1dFJKVUNKWXRPcXBjY25MVzhPWEdzWm04MWVOS2owMzdOTjVhNTlvYm1iUzN5RUFhS0VlRFhPbis1Vkxwek1adjJ1L214WEhoQ3hXZVRmY2ZtOVJDRlhrVWR6Wm92NXJ1OUtlMWFCR2pnNkVuZzd3ajI3NnBaQkZJOXAvZXpoZkNicXMxNm82RWRYekRrdGhhN29TdlRtZXhobldJbktjYmNKTUs5T2tZeWptS3dPM0l6enVkM0I0WHh3T0Z5eHlSbFhHS1hiVU9La0liZXdEYU8yWEliUnNVaU12OGJ3MEcwL3M2ZGRpai9rbmVzS0lHblJEdExRWit6a0lQZU1ubysxUnV0U2o2aXVSOHQwTEtwN0hMTERaNXU3U2Yrb09UVmFJVGJ3bjEwYU1ueWtJU3JPWnVWZkc4dEVCRTNHaHpoSGtsWXNMcDR1QUpTY1Bsc1oycTYrM2c2Y2FOTFBwK0dIVlpqUWNZU04zSkZlVkphTFlHTlNRTWNydmpidnZYOEZ6TDU5cDNWdXF1cHZwdC82V3JwWmNBWHcrNjNnbEY2Yi9NQjc3ZjFhMUJ4TFdCb1lYRXhHckZOdU1SdWFxRU9QbGhYcTJWTWRzWU41Tk9tS0kvTEVYYmxLM2FIazU1L1poN1M0Z2ZWYkxFWDBnckpzMkE4aEhaZVFhTWFlY0JibGFKRENiT0lUVll3cXppRkNuNTlXeDQzU2g2ZmtGcDJLMC8xMG4rSHI0SUNiMk82ejVoRTgzV3ZhaEl6RWdVNnB1OFF0c2Nwc0FsMzYzTG0zemIwOUdJaFhHd1lySnpnUUtrWWVJT0FlbHpCdFU2bUtPMHVRTEg3TENxNFEwOCtZNWVsdzBadWljbUUxTTVLQ3g2dzBDQVRwR1ZFZVg4dE8vRHVvOFJBVTZOY1F2M1dacUhNa1gwWTJVOHZvL2JJdjVqYmJDK2QwbXh3RnlmTlZIMWdSdTl5Y3hLZjgxNXBEcUd1WWs0RmQyTTd2RmtDNU5XN09ydHM1UUhsMmdab1hqYUFOOUlJMTBESW5vUDdqcE03T2tjNElGditMeEVwNVZRZDMrTXhGWXRSekI0eitVWWhTMzdia3lJVXUxVjh4Zlp3SWxFSTFCT3dTTzZiWHhZRjlYUlpnbFhTV0dUUTNvelFtNmRaaWZlUWJjRnd0MlhER3VXbUQ5RlRvbmttQ1NIeXBaOFRaNlVIK1JHNm5FQ0VaNVRBU2ZhUUNCblBhZmcwWk40bzFNdllROUpva2UySDloWnR3TXRhNS9Zb21EQUxZZ3hEOFhFeDRZSlIwRy91bWN3VFUydXVvZ3JxdkkrbDB3K1JPTk9UZWlzUnZNZTFnWVRWKzRtSkNhdzdsN2NtV3VVRFAxaFpEcmdEdmM2SW5vaFdjVUQrWmE3c01WVVJLVVUyclBEckwyazVSbHIrb09PMndKN092TUt3cVNsRkVOYmxaeEdiMGJEWDFVRTBEV1RzeWdGTGtyd0hOQjQ4MHpXanJYVVQvcWMwTnd4M0tIOWlldldwODFXcFNPWE5SdjJTODN4aC9XMFVOd3hzcHl1aEZuZXZEZ3pXb3UyelpmRkNCOGd4cDlwdmE2RkVtd2VReENwcXVYV0tmNXVIbXBhUzRpa0lKQjA1bERVUmQ0c0RNMTBDQ2NrUVRKM1gxNzVLeFE1RXFDQVBvZFYrOHpaaXVUQ1YvNk5mR3F5ZWZqZkhqeW1RWGszUkdvelZ5L3REeXJpa2V5cFhoS0tDOG94eVBGRDVLUnB3Sm1oTTNVUktVY1Q2R3YwK0lpKzZKY2tOblJMRWo5QlQ5c3J4VnpFSDZyNTcxQkd6UENTWC80M3JYQ3Fldk5JM2NiL2UySkFDRW9SVDFibVdsWlJyL2hXdHNmZXZzVFdFTG5nNnVKTzRETk1OcitlRzJIR1lOM1g1dURwSEdjb3FUcXlZbWtMZ3dObTRtakkzKzFYZW94dHdJak9XSGdxZ1ArNnRXeEJ2N1krREVxcWRTalJqVXBrT0FjcG8zNTRBVFZmRjlFVjBDRUUrbUQ5dS9Bb0RtcGQwMzhOVm9xQ25sMEpjVmJjMHRrZ0h5OE0yZzFpNDdFMTBpQ1VhWnE3S2QzMU5xcXNqaUFwc25weEkzUGU5cEtUNVJGMHMxV1pkb0hsWlFTcHZ2NEJQdnAvdXo2bnVLNms3TTNTU2gyMUJZNUkvOGdMRCtDRFFCMFhUYlBTMmFnNElnTE55eXpac0NXY1VjbC9aMmFyRGV0N0ZFTXlIQWprd25WSFdySmVLd0hTQU5kQjY0L2x4VGJQS24vQWg1Zm9ZaFgvRkhZemo4L1VJV0pBR3FBOTRReWsxbVVuNmdZelN0UkJKd0RKS2E0dnhTZVZ0U2grUkdPdVJseGUrZ256MlpTRGU4VWc1TmdOckI4c3lSS0dCQndYclJJNERxLzg5T1ROTkhGVkVqYzdZZ2U1VlFnTmJ6ZnJ6TU14dFRUcVV4dHlsaFNyTjdWbXg2TVk0YmVVcEtzVlQwRitIZzgwelkvRUpjalVrWldFSm4zOGczd21lcVVlZm9UT05Da1FPYklsUGlPTjhFVlJUWHJ5VGdPZzg5NTI5N0w4WlQyaHJzZjI5N0R1TXBweng1T2YzSzVOR2FyUlNYa0FNR3NnOWY1NlhYN0NlcjFpbzUzY0g3Rll0OHpsSlJmUEQ0M3FQNzZpNmcwRnJUWGlqUjZRMnY0ZjZoV0RoYXFsRGZjQW9hZzdkeEIvTzVtYm1xUWlCVmRXUFdaUSt5SHZ0aVVzYkplZm96cUJLN1BsNTBvZWRxUndlS2dqYVBRUmh5ZmRJakpRZlVPcENuL1BGT21TVlF5dE5YYXFGS0FFUlVnZ2FjQm5GSnR4YUxiUzFIdlY4RG04U3lzRGNwVnIwaTF3UklLeVFKUTlpVHZHYThRR0R6eGQ5N3JlZk93UDc1bjYrdXNuMDNEYXpDaHBzU0VHKzZRQjRRUGpqZ3pHL2NQeFB3ZUgwMVA1bDZ0OFkxc0xBSGhVTTM5dzhMWm53ZTNCQWlmdmFXSXdIVTlEY0tSRkN5SmdzeEFTTTVvMWY5M3FzN1Q1RUVDMkV2ckdZdk9jbWEvQjF4czZFSEQxM3VlbTgyRW9UT0h4L0hrcW1LdjlCSUxyZXByRHVoUlY1VjIwWGJiK1dRaStsMllVdk1kb2RTRzV6bUNoRGNtTWtGY29mNXZlUVZJZXVyaTE1OTYzTkxkS0M0Q29hMUNWWUo5MmVjNkVXUTd5VlVNblhKaWwvS0o0a3NySU1WZWh4ci9mM2lKMC9DMkpvTXQ2aWJRanQvVVRvWWJSTXNtd0QwMDk1VnB4eWV5QmVDM1NabkhGelZZbWZWaGFkanVvZ1FEOUJ2cUZTY21tVlJIYkI4QytTK3UzTngzZmVUMXhPWDF3NXZuVVJHT1kvVEo4QXd4RHVTS1hXZVJkdThxRzNjRWVTWDhOU1RTTU96NGhNSFlCcWxRb3c3N2hTL0gwdHgwNGF0VmdmZkFKK05QeHBVa25jZWh3SnAxcTBLaytXQmwxak53eG8vTDBHOThqRVgyTlNnZE9WWEZlNWVxNDNjbUx0bmZRY3gzV2JKRTJZNjdra2xxWG9PZEhlKzBoU3BWRmFIdC8zOXRxUXRLZDVVN2Ztb0ZKNEhEQzNZUEJNbGhhdnliVnVwMURQUW1pdnV6b3RUSis3VklGOWNIK2ZMN2tTVDRTVXdtWnZ2emxkL1o4a3RDdmFQOE9odDNuWkt2UGgwZXYwbkxwd1RsZkRaOFRONEcrMjdrNlNtRk9Fb0lCVE45TUJDSU1hQm1EV3VqM1NIMmtLa0R0ZGVZeS9mb0NOWXZSNmNaL0hGWHU2cFZZVTJYbnpVVC9xbmlMdFVOTW5hWXM1eXp1cVYzbHFkME9mWXNlZC9jYklKOTlNKytRWi9zZjV2eHZ6TXVaQVp3cjJxT0FwWnlnR1lmaXBJdWg2OWFRSlFFTUJnVjFHdFpFUFd4c3pzaU1ESXVlaVNCUXhjTkJrUGlaRkovbzhVSStuem9uY0F2MzJpNEIxT09xaGFmMXhoZlh2Szg4R1c4aUt6VkZlRzIrdzNIb2FwNzcwMHRCM3E3TkdZSll5VGVjQjg1bnlvRzRkblFDSThNZThEZ1hIMVhZTDN2cnUxQXZsSHlwamtYV1ZJZXFkMzRlTHVRUFZIa3lUQjRobldrNy8zalhXbjQ1ZlloRGVuREdzeXc4VmhhSVlDZGlTRWdJVU4rclI0cWtzbjVZMTNFZkFzbExvaGFLZWFHbFA4Y0YrWUU5NjZDVGZ1QmFDenJCZ0NtWnNuWEdlYmpNVVdwSmd3UCtVV2w0OXFhNFNJN3dvQTlyNVhvZWFaTC9GMTU3MHNkaUxNUFdGQnVWSEJONUt0Zzd2emRwZDFPS3ZrQmY2N0tIQlphVFpmcTRZbXZ3SU9KeExaM2FzcktaeUxiSU1OZnA4TkIwOEdHQ2xmaE9yOXF6RnMzQ3dLZ2QxSGY0cmVEVExZRzFvUkVpc29tQ3lnV2k4TzgwY0NvSEI0VUdFNjcyTnpscjFlbGxUd3kxT3N5WFRGR0xwZjN0OTd1bzBDMmgrbkNudWoxaUJJVXhtVnZYNFlsNVFWUXlqR2ErdmZwbk9wTzJsd0ZuaHhhUVh5SUVqaDNvUE8zOWQ1bGJEMmQweHRlWWV6VzI5R29QcGtFMmJnemR3MzRzTHhNTXdUUjEvVitvb3Q0djhhNVN2OCtPRXZ2K2hxUWQ1OXBvYzB2L3puR09xN053MDc2bGwxZDNKT0hadGVmdlVBQlZmVDJidzMwenhBUzltYURGSHNuZVlxd2lKeXJoZ0NwK0NoK0g3SDVWcGcrUDB4Q1FkVExEczdlakU1OHFFN1d6VldoT3UxZFlNNjdxbi90b29haWtLWTBSTW9HY0hhemhibUNldThBbEJUQm93QkxZWHVITDFna24ybzBCeXdKNnl0dFNsamRDcFNJbS9ZZWhaL01ZVmdTekFOdzI0MWFoYzB0QXpYU01BUHlhRkFSMUxLamRuc28zdE9QcFh1SVl0UmR1WGFOejh3VjhRS2N6ampQTlhYRHcxYnlpT1pYc3haS2pPZWdTQkkvLzN0cVZKalZsWDF1b2FhYzZzNzN2NU5PanVPblBGK2dZRk1VS1FWOXBaWnpnT2F1b3VrQVd0ckRMaXBsWUhINytEK3N4K2V1ejNpRFR3RGFMZUFzZ0R3SkdMZ1ZMNENETFo1eENZYTdySVUySEF2bytTRHMvaEVVUTQ4YXBuQll6bHVjMkI3SzZETHVWNEpnYTN6dDRmMFFsTjBLaE4vQ3FHNEhlOXYyY2duVmwyc3NwWHpFMTF6aVBsOFpqbmNvWXlzMzRiQ016SFB2Y0FzTm5jSEtuVFlOSlBPaW9TcHZLNkhxWFV4NGVQVUsxQmErZ3QzRnZoK00wV0lHaEhZdWt1SHo3cFFsaDV1RTJidUE4SkcyM2Q5eGZENzRxS3FVS01sOUZCK0c4SjJRT1lxLzJYR0NPd01RbFd2NXBaa1RDTThwWUs0TTFxZldwYXhRTjZYQzlVdTFEUDRMcU0zaDNnRzJob2VZYThlUitQM3RiMERTd1lKcXF6ZzBZM2VqUi9qU3N0azVaWFhyMFdPTWNySE8rRElBUllMUE45ckU3Q0F3Q1FtaFlCYlJwZzBwaFU5bnpuYU81Qld5enZpUmdkRnZWazJNWWxrQVhwb2EzbFRoL1lZVkRSU1J0b2hMWnVBbUpCMmlMOEsvZkhEMCtpeHFNbTBpNVhRdGNLbEorUFNkZDBkQUtVcFhlM3o4L3pYcDZrZnJQWkpHS3grMnZ0b2x5MFljb05mQ3k2ZEJteFVTcElxL3BTS2FVQklQVjB0bFE1RkVJb3ZMMUhER1NKc21NNTRodGtudDdpZnBiamJjUTV3U1ZPaU4raS9FaTlLbmRvSER4NGxYcjZDbUc2Skord1NhTDM2SlFBc3V4Wnk4SDlXZUdVb2U4Y245UVp5YWMxdlRMcktEMGtaZG5pdFRxd1dzdmU0MXFaMnpwT0xFd3FNMEFJU2NXQzhZeWdyT3dSYkJlOGFGQ0ZhS21RZmRvcWJuVHQ0cVpoeTFOczRxUEtLV1FrVDNjRHA2bDZQWmg4SlRmV2p4ZkVTYnFQMW5zMlAyQmlOT1B4OUd2VVRvSXM0ek9VYUVRR2xDa2o0TWZiVmxESk4xMXQvTjZXeUttMzFTVjhJUkV3TlRtZVBjQXphUTBJUml2Y21ycUxiR29XajdTbDNoWnJ1NytmYXBwaWpyV3Y2aGlXNFlaVTB6ZFBoTlpvbVplNSt5bmEvMGVQdXNYdkIrLzA1bXhSaEJWR0tMZWVzbk9hVGxMd1Z5ZmlHYnBlU2dzQnAwRHNWMmw4TTVxS2tsUHo4RzNDNGRRK0UxV201WkNVUVA1RldDblNNQmFaeUQzRUwzc0p6eGx1L3BGVVpYSHVPck00azhzMUhCeHo5eXVKR1I0M2J5ODZTNzBoNnpKMi9oNUVjTVAwcjgrM2srdWJnU0NUcDM4cmpCSGozdHA2K056UjVERFVlMjVOVEFiQXRzaGZBeGpHRDlFTHkyV1VJMFEvVTl4S2VxbGFXZXd1L29XNnhhR3JlVzNDUGJkYjc3RUhKTzBrcnJKeGJlRzVBTnpGa2NWVGR4bzhOZTVNMjI3UGF4c2xBRlJ4eDZVVk1CdHhvbURmVldmNUpqWTlwRnVTd3FPVlBWdlNwbWVNcGYwYVFGNlRDSWdUanBUVlNLZVU2TWxKU1NlTkNhYTNYeWVMZE1rMzZjVTNvS3dERG9GWVdWMzNlTlQzMGNMa3FTQmZCZFArT1JZWXdBKzVvcnlvbWZsbzNjY0FqdXltRXU3a1JPMk5LWThZWnlHZXR5YTFPSkJlVUhIeTRHaFZ4Q2d1eTczZFp3UDVkR29lTzB6UUZCT0QwNGlFR1JmNisxdFo2RDJWUVc0cXl0M3ViRllNeGEyNytnNVhvWi9wa2hUNU13NWR4aTVpMmxRNlhydFRmRmd1blVvVitnMmovNXdDa1JyY3VzSkNXbGcxUHhMMDVsTGNGNU93OEhEL0JZU2xoNlVESkpPSjk0M0NOUlR4MjBWaHdiQVlydkJhbEg4UW12WmphOUh2a1M3cUsrU1JWK3NiNVF1L05TdTB3RldjM2pTblFTK29iQXlJTkc4SGd2TnhuWTFjSCtSekl4ZlFrbXhzMkVaN0cwNVBOc2dsVUJuWXBUMkZYL1U4bzdvRE1vSUVzdVBIenBVRituRmt0aGdmNUw4bVo5QUlHT3o1MkRNbmpmK2lQQ3FZY1RYQ0xOWTM2VmtYRHFCMWR2aW51cnFTZEJzbjlobWJxdzNIa0hQMU54MGhqTnpyMWYwSmYzcUVDRUgzMWxDdGlsNjJRSHl6WTFMTnJjTW5GbFZ0RTZsa3NnblhUL1pYMzAxZlBFVHRrbzBOd1YxU3hpV2hpL0liRVNSRTRIWWJDbTh6VStuNzlqb2loa3BGekFwTktrYjdtaWMvb3htM1MyZ05GYm1XclhsU1FoL0o3NTFGbEUwWDk5SW1mSUlsSjFrUjZPa202dkZOaDllRkJZL2g2WmJZYkovZWlXdGJmbTdJU295MzdCTWhua0tRL3B3WmNNaHdxTGIyTTV5WWtKZnNvaCtnU0pmMlNkUjhGMGpxSTVyK0ZaQWlCVG5CdHZTMFFhY1dkK0o4cmZzYVUrdlNESUNIbS9xVk5RSi9BRWVHNnUxYnQ3WEYzemoyRk5hQ1p3dUR2MDVLYTJkUTJ1b1FCUndXb2dmZ0hFdkQyU0I1aWdYL1NlQmV4cW5YUnR0SGNudVpYNElHYTFrS0EzZGpDM0NTcVJDYjExbkpLWjRRRERSQzd5OGRWeUViU2FRTmVQWUlYV01JR2Z5STZxUFIxOWF2dXlRSno4ZGdhd2h6WFpwdU1VVU1RdDlQNTZkWU5RaVhQMG9TZHQyN2ZTWThpcHBJTzB0VURGWmtLK3FGdk0zcWgyTGpnb3R6T0daYUp3Tkc4V2E2a1luZkUzL3NaTis5YlNRMUVwRzc5cVVUQ24rc2J6RXNsUngrYWFaWkhiZ0x5NU5RUDl0UTJtNHFaZnZmZ05xaDJ4Ykc1Z01QdlVZQUtCaWZ5SXE2OGhHeVVYU3RQblA5Slo5UWNFTlJTU3l1cFJrOW5RZnBKdWdZbXB2bTU1MVFVbTRXWjh1bDRKRWtkRjVDU3g4RGY1eU43RjBLSkl0alJxRXdOd0F6enhrRlE3cEVHY3VXTjB2Vzc4MUdTbERYK2E2NSt4YnJGdTU5Nm9jOUxzRCtDYWJFVEI1SkNNVjdLcklBZHprcGFOYU96QzJhODU3WFRwZys4OEhWYjZpNStxb1dTR2dOZFM5RlVRcjRRTysyU2JHTlpERDcxVHpvR0o1NlZ4emN2UGJOUWRBSDRmUVBHbkUzMUE5QWxjNWk3TStwTHVJUDNyVkJ1Z2lMRnNMNHlKMkJzQVZ3ZHE4aGVEMVl5T1NmYVB2alpCRThOb0luc2JPa0Q3WUJDWXhhZEJkS0NicFpSaEZYK3dpUjhQNlhHSTZQdjdTWWpxMSt3U1p5SlQ0QzdDNzN1eHl1WEVrNW54VllUM0IrdUxQQmFoOFpFS1h1NVFvdVc2bGd0a2NhTC9Ockh2c0c3T3JaYWZYTEdSeE9YWE9jRDYwTkFQczdKeUc1R0VTRXFJYUU4YjduNjJmU0lxWEVEVnJTUVVRUTJqejZkb2xsbDMzZlhvaHRlNDBrTktIaFF3VnZnWkQwUGU5YVJmV2VzOENnWmVLbFZPbndBMWh3WFRxZllRbGR3Qmd6UFV0S3J6RmhIMzAyeUFQQkdVeVdWdndzWVNYU2l6RHZEVzZybjBJdGIydHVOZnl4WWMvZXE2THdEbVVYWkY0UkJhRU92YWVUYmpuNUh6bFhqTUcwNnIzckNEUkRFbzA4aWwxNVpuS2g4TXFBVVVjUWZQL1lQOUpBNTQ3Y3BaeS82UjNsRC9NOG96UjdMdnRYelZjdm1rbHhHNXVteWYwS1JibzlOc0VrdmNwaHE5U1FMcFBaam5oUFRrbGlZQUdjcmk1cDQya2M3b0lrbGc2YVNoQXQ2bUNSeG5XNm5aS1hIV2F0WWFQdklnYmFDUHhGV0RvcnlGZWNvbndQRFVkRFkxbXdKRGl0MUNHeEJnL3lIa25maXQrYWlCMjVpZlA1UXdpSkpVelVJL2hLNEJYSnRRN3FSUVdhRVh2WmFhREVXQU1hQ2xIS1p0Zm55SkFuaWk0NkR4UHlqZFhHZmg0WHVQblRVMGw0QWF2dDk1Tm1OZmVVeXZseXNiVm9hY2VFNnlSL1RZWDUycStDczFqTDlKaDNiNXhwMkt3OHppVUZQVlpOVXkwMEZtalY1ZFpudkU5RVkwL0UrbGhUMGp4Y3FPb3BLL2g5bUxhTWFGOGsxbWM2dkE0dnQwS0YxRUNVcE1jdTZyZGdrMi9SdFl1VjJvblZuWlg1TG1Ha3o1ZzRYeUR2dm05UW9iMFRhMFNzdWo3bERrWEFSdmg5NzN5eFFRTEJ6eVVZKzBML3RON3NucWt6MXF0TUZROThpRlJzUlc0QStyNndidTZjSFJlUWNlVTZxZTRySFRQbG5HaEg1blBkWWpraUFERVl6a0xReWhCN2hxK2dCTHFYODV4SkxFWHA3Vlh3RmdhNmNNa0E2cEphRUduOG1FOWVIYmRNYWg4YXVWenJsUXVzdnZEcHpTVHpQV1BwYk1CamNuYXczTTY3OUNVcGd0RUo3REFOYkVPNFV3RkM3RmZrb3FiUzh2U1ZiWGJVaUJja056R2JLQnZJWlRxelVsdEp3cXo0RGhVZ0l6RTYyYzlGNTlsNU9mT2ZmWlNqdU1mdVRnQWxwRnYybEFiZ1cyLzFyendrSldkL2lZbUQrU0VuOGVnT1BITmtIYnlmNDRWQ20yZ29sTmo2blRXWVB1ZDZZTWlteml0akNrUW55L3FXNlNiTnVCaSs5cW96dlpCZW9ES2I3SlNEN2dTaHpaaWxwTlhvOVgrSm4xZHFqVlBpYXZvM0lnaGNTaTU1dXQ3YWlraDZncUFkSk5OUXdCRXV5WDFIaWZSczVralRzL2h6WGpLN1p3ZDZubmVBUjFtNFpJWlA3andNQ1NIQVpTU3QwamxQSGE1Vy9URS9BSVFMTWlZcUppSHpjam1NTlRoWkxqSDVlaTFxNzVBaTZPYVpWQ0N1OUlBanFRWW1xS2ExL2FxdjhvZzRmS2k3ZVBKZW1UWGRyc29WQStFa2o0VktjNGFiMko2dzZJMkZxWWo3VW0rek9BQWE3NW1zbnRwN3JzTnhLZDVuUmhMZ29ORFdFcm9lWi9SQWhiWjFieDZqUTRoU2tPTXU2dVd1b3pGYnRaanU3cTNTVmM3U0NTWE9YelkvRGpISUxTNm9ydFhqU0ZsZnVnSWJBM3RqWEJ0cklsb0czdUNDVGUva2hiUGRJbWl2MEdXN2VxdGF4Y2Q1cTR6dWdhS2l3TmJnaW4wVFViU0huR2tBNHJ3UG1PRWMySGxmMlNQaHY0SUJNaVZaOWg3bVNqclUyOHc0aFVtOUJiMktjbnVIUlNGdEthek1TVGN3RmtTVEZ3ekVJRG5iSWJBSWlCR3VNclQ1TmJDREhGUWRDVVI0WlFLQW11eHN3eHBXY1NJdW5seS9rTUJPL0lON3JrUnR4STJXaTlVWW1kdEcwczAvU2VXbHRpT1pOUnpROXFZa2gxQndIWnlVY1BHZmpwbUhyYTRyU2JvM0JSdlFKTjFIRFRXN0I1YjcxdnpMbDN3N2gyN3NTQ0lMdG56K3JZUTFUeDVHeEtLYVBBd291Wm5Pd3NDVTduQU5LL2gxR0FrUnR6Um9SVWFUSzhmcUxMWjhYa0lMaHBmVm1WMitJRXhPN0xDaDN5ZzdrMXhqQzNaTUJudjRVZTg5UDRoclYrNjVNY1BwVXFGc0FVdTY3K082SXdkcjlaYnVtRENOaFRvWFZMelBMRCtCb0tud1V0SkQ1b1ZOUjc0QXpxU0I2M0tCWkZHcHgzYVUwM0JpN1lYblpxdEhkMU1QUTNMd0w0RmptWkJhYTlNdWI3ZWZyeTZWMWdLK0tHTVkyNG9pd2JDbTNqdlV6SzJIV0FwUHo5ME5od05qRW04MTNRRW5UdkIrNm9kWHFrdkR5dGNDWEpMb1l6TnBTaHBveXl2clJ6RW01aThheU55SUJqVk52UnFvTWd2ZlAvVzB4eGFKbVJ0NEh3Ukl2ZkJTbHFtd2NzUWQxRkl6Njd2SVVrOTFvWXVCeWlXNUMxUW9KQ0VhNTNyc3J2NG5FR2txb3BHVGIydnBVQXZxY0VVZVRsdDVPQTJwalhxQ3F6c05aWXFEVnNQSmJEci80eEx5d0k4cHo5aG54M3gvTHBsRVZsUW10NzNHYVpianowWks3dHNaL2F0T1ZTWTFzUE53TkZzc1N4eXJnQjRJOUk4K1J0TVRNTWxCNUNHN2lZUndNa0ZVK210anM5UDZrdmgrckdCeCtUd3NoMHRUWlVVRjFUNjRoSXdqRC9BcU5aRzZkL09QbUcxc1V4K25JRXR0V09JSklXbTBZMVl4N0pqVWZqRkp0K01SZ2xNc3VIWk5kenN6ZzhaU3QvYkI2RzVyUFhHN3QvNHE3ZUFPaEYyNzhKNHpGc2ZMTGFKSkFicGprMFpNaHBySzZoVHhwR1Jqb3h2U1o4c05USW12bkwvQXNOSU8yaURkdmVYTXFUTi90UmIzb2c2VG1zb05HWFZuZUk5d09wUmErRUtwVFBWMkh4YUoyV2RNMCtaTjlRZDA0SUNoQ3N6ZEZFSitWN0hkLzRQalRWQ1pwVHhBSFhsUUtvSXU1bXFhYjRKRmZ2UHZWV1RjN2J3a2lEVHhRcVNTazhZQzN4Zmt6Q3lOMU4walpwVW5oV0FaY1pxSE9qOEFHd2Ezcmo0SG1hbk9xTmlvY29CTEMxRGZNRmxTWTBRVkZHZEx6Z0pCYmNra3hadXY1TE1VZkpJRlBXSURhZTBsdDJYZDBFMzZiMy93ZEh2NzdpZnJOekhVUjVuQ0pRM2k4UExTMWNaNTRVbDhqa2RoKzlLRkxFekZkRkRHZFl3QWFCelBnY0NCeFprSVRMTjAya0JUL280Tk9NMnhSMU5lREFNeFNOWDlVMHUyYVNwZVY1TTdIK01YZU9ocXZaYjhQQ0NVbUI4d2krZXZLQ2poOTNUUGRDSlQ1NXRjNVlTOVZmUXVqbGVaQTV6U3IwUzNUS3BkSEo5VEhybVBqdXZXUVZNUzY4OWlMNDVVSUJxTmdsb3FnT1pRN2MzUlN4VHVuV1FpNm52RHA4YUwwSktndjhBNkdqVUdKUDdoYWhKeGp2dHRPQ3ZZN0oxdUlId2txTTBwbkVVYU84bTd2VVorWDg2Y21sM3hHa25jZzVxSVhXc1VPMUI2YlhKQmplRVJ6RWR3N1c0aW81bnRvbmVWbVVodThVdW5xR3J5a0tHdnpHcW5qVkUvOVczRHNGM2RHMzBKbHVqYkgvWDRBTGE1WGZrVy9OT2xoNzBRSlhvQWllb3RRL2xvZmo2dkF0S0RUMFV3UXMycko4MXJrNmo0bTFGSDdUMm92ZmhFb0t3NU9paGlNMncxTk9MTE1URWduWjlyVkRTZnc4NU52RHluQjlQTHR2eFp3UUNPbTk0dnl3QmVzVThzaUpSTlBHazcxNzE0cDBla1FvT3FoU0tndnlxMmI2cUJzS2w3c2R5V2Vyb3RjQUxUWmI4T3I5a2FVOUNFbUszRmJnZElldU5CbHdEa1QvWWNHVUFvcW8zUjR6YVEveEJ2Wk9xNmR1M01wMGttZXpRNkY1QlErUHBGOEgzcVFZTE5oTVVzY21BTkNpbHJhaTZlcGRvMmY1MWpDOG96dDNGUnB4YkVKUmg4dzltZjNRWmxIczF1RGJnS0ZtYU12SS9LSE5HTGNiQUpvZndvS0Z2THFNbjArMm1CbUJrdHBWczdOTW5Lck1ldGtHU2h1TkQzMWdwOXN5THBiRmM5RVE0N0dpek1tcGdCTUlZdUZkR2ZOWXZ6M2wyQ0Z2cmN4Ync3UGtDNlg0L3hKa0dKUjZ6WnNBb0k1QkprdTFMSGFnY0s1bUMyVUwveHJzSEhueVJEbTMzbTBvNFJ6T01QbUdSTnRPUjRDQ1RvMmc3YUpuZlRLeERnU0hKcUw3aWp5VExwWGZVL2VEU1V4WEc3V0R2RUtoZjZFUjBJbHZQeE0vMEpTaGtCZFA5L1o3OHRBYnVRb0lMVFd4bFRSQkd1QjRERC9QNUlrKzNpQm56TUl2K0RXdDlzK1pJcXlJQW9nKzRqK1l6SjNwZ1VycFdTQU5aNEhjbHVYMzVhVXJrdFJOMHdsdkwwcm9STTZKYnVsYWJqSmxDMkFndVBQN2FSYlM4bXhNbWxRWmhGMVNsWTd0Nk1UaXVkRXNpYjlxN2VBZFR2cnFQNGhsTVp1WVhDSUhPamlFMnVSZGczd2txVEd1ZGVxbkxGNmxqZ3FYWDNXMGhKZ1U2bUVibjlxejRPZXBZMENham5WUlpzL1A4eFdQZE5hTDc1UXRnSWhRRytJQ0NZcWZxakpEMkp2T2JLekhsQWtjamppVnVEdWxjU1FtejAraTdnRFVtZkxSRXZMUk9wVU5MS2VRazNlajFmbjRBcGxVcjFydlFJOEZ1bWZyMDBOek50Z21zZ09TZ01OV2dlcTJmZmdoRFpHc2xSeWl6K3daUmIxazR0cEVlaTFtb25icVFwaVc3QzQ4bGRMeEJtdkZVSWRUdVVtQk02REJZREhlZ1IrVFp6NG9yb3BpNVZqYWpIUm5LL1hnSDlqM0ZGSCs5WnZIMHJidGZxVVgrYTAxVEtzNW8wT2F3WTlpMFFXL3dKK2V6ZWJVSzZjc2plYWk4OXF0YmU5RGpTY1E1d2IzaWMzL1BET2IrNC9mNThHOXVSQjNsLzMyYjZHSXVTOUZjSVdHQWtkTEVhQ293Q2FPR1psUFZWVVMvbnAvZU5KMnFUOWlydXVVdWpaOTdONHJWYUowRUpnU2lkYktaTGs4bDYzQXV2M0tvZjFHb2pzbFkvUG16c1dGVE55Z2JRNkdvMGplVDFiRUM4bmEwSTRyZnc2cHVGY2ZLSEkxclJKd2RLUEVHa2drbVFrNE44aURoTzFiZHdyYzZTVHkyRTh5MUJ4M2RrVVgrS0xldENyUEkzRlF5bkNjWUdQMEtnUEhydXN4Z3B1djBwam45aWFFK1ZXejRuN1FzRmUyOGhOM2hQR1BSU3REUmp5L3p5eklYclkvd1RjS0hYOXEvbkVTRTBBM0pYUmdyUVdLTzN3bFJHSmVQWXRXRENCS0dlL3BUd0s2R2F1NG44TnRqTU9TSFpIdXBCeWEyVHRQN0pJdUlVUTROY2FCVFJqU0hnRFlGVC9ZK210TXFxclVPZkFhRzd1aElsNU1wVHZNaFkzSWxJYkhmNytPSFVWbjl4cjhtUitmRCs2MnhZdWhHOXM2cHlXUDBSblQ1VXpiY2o0NWp3dUxtb0VSNVQvbktBQ0RDK2FxRnExbGo5SXlpZ2FZbDUxVGlVa0NKb0g2Vk4yTVFzWldWbm5ERnR3RDB0ZDZBK1htQktpOGo2OHBLRDFCd2xCWXRrY3Q4UThqZ3RPWGxFdDVJcUdjdFQwSmEvOHliSi9VMlZYV3pNM1hPS3d1Kzh1N3NJZjlWcVNnSWx4bHNKcFp0N0JsZDFUT3lOT25WYTduOUZYVVpjWXRwSlppcGFJMFNXeFRWMHNiclkwaythMFV3eERzUEJUbWtIMU4xVDJSYklReVBPdlF6aHMwT0xtbHFjdXJEV2pKVUNTWW5TSWdHOXRhRFcvVzI2UnZVK0cxZyt1Q3orWjdtcnRWTUlUYk9LeFVnd0Y4d3laQ2tsdE5sbnAwNWpIT2NNUTA1Ti81UldGSW54ZWZnd3FtbzlYNVB1WUZnbTJwSjQvSjhkTFlwdmkvQU9NUlZvMU54VlZnTWZoS1ppRUpKbVFJVGNXUE1IUHZXOWlaejM5QXFQbmF1cFF0Y3NZMUdqWnhjVjBKb1V0dXZJeDZyNUdBMmw4dWJaQ2gvWHlvdERwUE16cFFNYXpTQlN6NXRmMUxlOWVrTmJEVXhMQnJQOTJqMFRBRXc1VW9HWkFYRGlKbEhYeDJKOFQ2VzZaM1ROaW1tMHdZWXBvM2s1S0JNWm4rZGIwMS94TXZJOUkzY1ZWOVZqVlBmMnQ3alE2SkpVcEhUSFdaRXU1SkRhZ0Y0N096bWl0SFBYYkhJeDAyTnI2Z1RmeC84VWYyR1pPTG1aNVBpOFlBUmlSVkxNTThQb25pa3JYa1JQaW8vM1I1bHkycjAxY1VVVDdVdG1vRXRnRjlKd2pQMWZsaUlPaitENkk1VjlrLzZqeDZBcjVyNStsS3lIdkovMElmSzBiWk9saDNFL2U2d05BaVI4Q1ZpNTFEL3hnR3krS2VLNHhkV1g0dXpjMTJ1dXM0WFgvVVZRVEI2K1MvR2EvWlZ1dzdnUzRucEhuWDE0M1p3NTM3OFhRUm0zNTNhbTRVdldFcHRTMDZPVTBnZDFEWUFTaWFEWWsxbTMwWjdIZStPWEZKcjMxUDVFeXQwaVBkd2UxaHY0bkl2WFF6NnhZN1c0dndudE9PMkZkMUIzbTU0UFh5Nk1WWVVjVjdhSHZERm1laU5uRGgrekhxanZCK3Nza24wa0ZTNlFrZkVSSVFxQ2RyWW5QUUZudjZHamdSTjlnM2hLZ1YzeW9nL3pJei93ZjRsWjhZUUxCWUZpdEh0YU1RMmZRQ044cDhFdUgyeURpK21ZWjlJVnc1cTdjL1lHd0N4SHp1Q1RUKzJrSUVLMUdvbTNWNWZMbmdqUDJqNmk4bnYxemNHZk5rTUdPYmErcmQvRDlMZ29NK0NFVGZXMmhHbkZFS3daKzZPL3B5alBrWU5Teko0QlQ1V1MrTTYyTjE0a0lybGs4b1oxTWprTE9LVWRuc1kzT01VcDRjVy9Ua2c5Q0E2QVlObUZaWmsvb2xXS093OFRDbDU0NHZFeVlOQTNweHRRcU44WUxjL3Y0T0NrdStlNUc1a3JGdFFtSDJQWkFpN2NnTkhNZUhGK2t4bnlMQ1VMTWR1NXNwajV4cmw3c1BocElzODRLZ1VzYmdaTk9HSVd0WHdMUVNxaTc2Z0NBKzBEdHpSeTBBakpEREV4MUxhdE83OEtlSEtvZGVOWU1ScU5HcmlOL0tKMjJ4cFEyQ2g5ZFBnbklKb3VSMEh4a1ZFa2l3UVFrTXk0OThJb09LNEwzOXdKaWRVNkhlWnhVRi9xN04yNFlvaFZNS0dTRnZzajArYURIK3JSMjdUc3ZKcjZwK3JvczJCZmFjdmN3em1vajk4bHY1d3hRWTJEOTZVaTVaYVdmcHR2NmxNRi9vZGpYNTdCeUV5UmRBbU9tMHFyaHZuWEtyMnFPWlc0Z2p5QnZLeWN2ODluT0FJdGZSUGpBVXVFODdlc2JqNUZZL0t4b1JDVmRzUnk2YkpVRFZjbVJMZ3VMd2pmd0JzVnNodEN0T3NHUnpmeDk4a2lRbFhQSWFsTWVWVWx1cE1IQ09yWXd4M25WTDBwRUtHTldJMDAzMlZLN0hrWWdDR0ZUNzhtdTY3RUlDdFdHaDdPajlVM0RuSGY4Q0kwd3ZVVzJaVi9hbFQ5VWlzaXpQSjVsWlR4Y3ROSTJBZ0hkSUljYURBUHJ3ZzgzeVBNeENxbldseUk5ZTlKdms0Y0prWHNSUzRpOVFxbjE1T2Vja0ltbTZ5c2h4S29jUXBwNk43QjgyZWtNczh5NVdZeFhBQk50SzBqNW1RTXhnR3VTNWlnckx5T0IrWStXZjg5RlBHSG9kYkRQVUJjbVRtUEZySWNMRUZuY2Fmb0NtWnVZRGdtajV1Umo5NU45c3hvYldWUmRDSVFtR1BDUEVoUk9hTitzY1ZmcldrbXV3OUEvamF3Y0VWd1NzbXhNdzNiQlV6SGowOFhUdGNZcno3dHc0QWRRYXkxNW5CVG5ueXJNWlVVSVpERjhsMHo0dGk5WktvdnRmUG5Pb011M0ZYS0dmTTNYRC8yclJXajRtd3l2NEx4SUVKd2NNN0luOFJKNjN0dVhqSDZ1S1p3OFNhY3NPUUlCRHRRQ1FPblh1QzR3a1MvNk1ZK1BTTzdzd25NUHhZbWltN2pHcHJxZHBJY1NETmhTOFdpcEM2enUrRHRCbzBHdGhJMkRRKzIrdzlqSmp3Z1hDUmdCc2hCRWZ0OXNadTVEWFBSUXFLZFlMUklmMklXRkhxbFh2dVRuVWlFTjNoVmRpUEljN3hYN1p4K1lXdjhiN0svOUZqYkljRDJpTERqWkZhbnd4UUkzYlVuYzY3R0ZlYk5SUnRwUUh0dnRIWEhkaXRLVm83RmtWSzlmVWNwMEZKaExjMkVPNDIzOS9ndmFYVFN4YVE3M1F5SHlzTzlhSUNuSkZmRTVodTFZeStBblpXTGlGbEJYODBldWZBU3RLaE96RGNEQWMva1JPM1c4OWZobnhmbFB6eGtzbUxOejYzMGNMNTJzc0d2Wko4QVlmdXJFU0J2SktpMWJXM010bVROUnIvdFJwcktnUmREU3ZQS1BJV29FMFBqa3NWTE9paFl5Wkc1VkZ2dUhDeDNJck80LzYzTWdJY2hIUXBPVTE3cXVWVXVLY3FteHJ5WGFCUTRFMS9JUWVma0ZqbTBpdjJwcnZJVGpwZ1ZGS1NrTzUvVE5qbGZvMjVQZzh3T0FvanRpZm9PMnBPaWkxRFd2dm5UeVBCeXV0bmRSeTZiSzFxRUJCV3U0M0FFTHE0dE5KaHhrc3k2R3ZPbmNkTDN1aWtYMW93aTZsUWxGMWZLYzRsWmJUOGlXcHN4aDRiWGk2Q2dzcUk4eEFWa2NuZmtrMlREQVZDS3ZTZng3M252QWFOZE93RXFDd0xzYUhaMTM2VVh2N2JZV2U0OGtRcjExRGc3VUlvc1lCNGNIb1djMUREanlqWE9uckxRZk9pM1hFSmZpUDl6cTFDQ2d2ajNiMEpLcWRoMmxmZS8yWFVYbGNMNEJKQ1FLTTRjWkhPV1AyK2tjanFVU2lTWEIwT05nRU13QjVTbHdGUlBhR0lPUjZHdkFyQkpjWDZYOTFTODFBcmhrQWhtZFpNU1B4NnJhdVVrVEozVHBvemw0MEpMWE81R2tOY1E1YTZQWVBiYnBuRTV4bXFBVHAyeTlhQ3hKQnZ1cWJneEc2UU9RZHptNERIZ3c4clhpVENVMHVBWUh5bmhndkhIZkMveWdvTHRtSVYyNTBKalcvQUMzTFJiakErU3lZRU9RK1lJcXNKYmtmYWpqbHlzNlh1bDFLYXJJcHJlZGdVOFZoRjNLSlNhMU1iNzJ6TnlIUDNMeFE3ajN3dWJOMkFOdXNSSlRlL1JCMTc2dkJSOU5mZ2VuN0FWTm5OQ0trVXAreE1ZblQ3ZlIzWllDeG5VMnNwdTFmZTZZc0lHUG5aeEc0OFlRRVVuYlhRU0NOZzdONmtNWWxsay8vTUJFTWFYZDdLM0g3VzhtUEpHdXNob3NnM3F6MnI2c2dZT3liaG1Fak1BTnRUVUtkUzN3bFpLRitBZEtySENYZHBZUkFQV2x2amt6VVFtNDZLN2xCNUtUelAzVnR4RUc5MThrbStNbVJxajVJdExNQ0ZKT01GQlp6QjFpOW9nVGNDbkJyeU51T25yTEVKZzQ4MVhIdEpRd1doajBmdTZPak1wWmVaZFJlVG9CTDZoRGUwdHhWOWc5OHdVamFCY3phaDR3WFRta0N2N2VQVzg1RXNZY00zQXltTUhtbE1RMUZKMFhld2x1ZlozM0Jmc0EyREF3VmUrRjhpQ3JTbjR3K0VBTjB3eFg0THNiQ2RsbXRvSks1TEREczJuaWw2K3VTOGxia3hDbWdyTkR0NVM2T1BrS1FPak4vcWtPOHdsMzBTYTNxZ1RSSk9TTlRTUG94aDFWdEhjWnh0aTBFVkpjNEFEeUxKUWdxTXFqbzFoemoyTURZTWJZSXU0N1BHQUttME5xU2ZTYTlETkwzTjNDWGVzbFFsWnZvUU9XODlOTUJsZnpZZTg4Q1hQRnYrMDk4NFYrTTFyQWhRNGpVSkVUamgvS2I3T2pjTG53TkdieHRXWlVqYVBqOHkxSW9KN1poNTE1cGZ3dXJzL1VWNTVNbHRONHpwcjZIeHZYR3VPbnBXMlVDQnFnMkNiYXNIVmg4Rm13aGpjQ000RldGWThyL09UUGhtY0JVbVhqN1lkc2RHNXp0S0lPKzFtVEZqVXNhREhpUjBHaFdLV2U2NERmMWVZM1N1SS9KdUJ6bFEvVnJBVmY5ajBvN0JrN1E3NHVEb2QxS0VoWEJrK0hzZzRMYXFTNHdGL1RUSGY4dWNIWHBkQmQzZThSVXREYlRiR2orT2U0S1BQaXNoS25yVHJQeUR2MXRVVzNiZUNyL0VOV2kzVkFYZlFsb3h3alhDSTAweVZPRy9Zb0dadU1SRjRTaU9MWkJQWEkwdHVVQWZwR1Y0VWVVSlVpSWNGVWVOcDR4Y2lGYTZURCtmcnhEOHFvY0o0TjJJTDM2T3BMNTlPM1RTeXV0aDgzU1k4Wkw1azBBd3RsWXFnK2pjRUdRQ0h3UjlscTh0cFlmT3ZOUVpaOVZwcktYeGlDVDR0YmdjR09sZFlWa20wYisrZWtYbjJjRk9lOHM1RnlwL0JoQjJONGxiSFoyUkRXZUpnQ080VDZnSjNlbk5sOXUrZWpxeGw0ZUhNaHk4NXlTeFcrTjBrUHNDN0MxTGppaFBrVzE4bkRnTUpWNEZFWVcvYTY0T3RSZ2Q3cW9RTzloSE9sRFBtd0s0blQrcnJFTitYbUdTREw1UzRQSjMveUNCMWxYYzBWbHE3WnVmM1VSQ2kyRjZQOEJjRmtRMy9wei9pUHhGNHk1THFEOTgweFhtMGNqUHVNS2FaMm9rMHhvckpoSlpGNGlRUW12bnJGUTd3TU9aaEtiM05zSGpDVUZtVTEyQ3oyTXYwdFAxQ1IyR2d0OFUyTkdZenp5MWIvckRiZm91aDJwYmV3QlpSV1pkVDAycHhTc0Q0RHdET2VndXgwU1BMSkxxU0pjU1p4dG9QQzNuYzJMZ0cwa3dXS0s1NGVlL0U4UkFMNEpqYWoyZmNoeUpmakkycmxpTW02QWlTeWxZMUNNVnRFRVRWRXFIS1RaM1BUMFVVeWFOVmpuakY0eDRZUEF0aVdwK0pNT1BSQzJiM0JYN2M4NWVDcFNJVzlkMzBhb2VtSlpaaGY5SDRkOVZPTHVsQ2V2ZGc2NHVYR3RqNzNHY2N5NXBEcVVFSitWZ2tHZXpNTk1oaHFMbXRBVUxpZlA5eFJmT3JMZG14Rm5JTUo3TktTNmpkelF2R1lWeGxpbHAyNGsyNlROTk40bUVFeFJOdjRtck5LeUc1SlJyMmY5SXpjdXRyZDlGQU1uaUlEc0MwVnU4VzBqbGdOUnhmRTk0eURMZE8wV2JCNnd2RTVabnd1akxIN1duMEpjSmM2UHNCRFZVZmYreFJZcjgyR0xsclZzYytFaFcwTU82ZFR2bWgydll1SDhnVnlFbE1qMmoxbFpnV1ZFZThKNXZUZTVYZTZzQUpsb20vQkQrVUMwR3Z1OVJ4eUVBNWtCb1k0R0JEQlNRZGN2VmlGVE5CU3BQUXo0QXMyMWdvQWJYWmxnYWg0bGtlSkpuMzVKZmJuQWowT29WaHNtRC9qZTk0QnI1QVFkaWQ2MUpaekVaRllZbmJST3Nla0s1RTYreUxiQXdaVkdxRTcrMHlKSjM2WVhKZEloSkgxZnBFdjRwL0FiVEV6R2txK29mcW9YcGExOGhuaDVHL1NManBRMmFOR2xTVDlOZzFGMEpFK1lTd3RCbnhXMGhOSkhkemIwbXFhSFdZRjBWZGhUdDZ5cmplRlJvRUlyaHljSmUxWkEvcFlZeDQvbFVHSW1LNnFIaGlCVUY4WXg4SDNwdnErcE5vN3lDTXN3cUdTbWVPYXFiMlh1dWZmdjhVbnRpcDRLWnNYZ0VtUFF3NWdReGlKLzlMeG1IaDNHMFpYSUJxYkVJZXg1OG51MzRXbTZnTnRjaFMvbXNHUW1wSk8rUFlVUHFDNjF5N1laZmdFb3AvQzFCb3BTZzBkQytKRVJtZ29mV2hqMSt3ckN4Kzd2WDZBUWpvSjJQWDdWOTQwVUNjeHNkUTBYbVZkdDFsdjJDU0E0OU9KR1piM2ZHeEtJQ3Rkdk5MUXdaZXJaZmhNVDlXc2w2NlNCdXNJNjRKbkJtaXpQcjN6V0RYNXZPM3g0MHowQWxpbVdwQ0ZQMTZKY2dPRmRvWmZUYTZGbk5tb054eUdZMzZiV1JSeEQ3aTh5bVI3NFJCQTZ4K2FGdlhaSTExdy9DWjRKVWdsZU04aDBiNHpMTnRvOHoyOGZuTnFWYUtxK1NrUGM2cUp2RHNTYUVJZ2xDTzdTZ1B6MHpZakFrZE92bTdhVGFMLzAyQmdxYm54TmJTODZidUcvVlkzamt6UnJ5TWtMWlFralhUcnF3NlVOak94WksvOWh6dGFUb3NhK25Xa3dDVjduV1FXNXJXWGtyRUdWcjYreG5Da3hxTkk1QmtZS2Y5U2kyY2dxTGRZM1ZOLzltcldmcUUxQWxubDdmcis1SmxFNUU1UWdnM1JRTmY0UDZVVUp1ZnRtbkpXdU9ST21paDFISHBQdVE1VjFuN05ud3NyM2VxL29YM2Joa292eExta21xVXcrM2s4N3BLNUlpakZ2ZXV4Tm5CODIxQVdkYkdnRWR1TXJCTXNuczc2MjVvZ05jUGs2QUx0SnVBUG5NMFNJTWdyZ0RidEkyNDB2VkgxT1JmMGk3Umh0YW1ZUmt0NVpNaTdXbGgxb2ZoWCtXT2JmbG1xOFRiT2M1dElDYnVYSDdIakF0YkNzYy83cXA3YmYwdURURFB5b2JNZFQvZFovc0tQQlU2OG5aeXQ0RnYyam1sNGNlcFpOTnIybnA1aGhaRU4reXlvWkhNaEwvck9ZSTNpM1dTR3dRNFZsdkYxOW0veW8zc3F0OU95N0dOdEErWHhMOWc4U0cxN01IbGZRNTdrV294Wkx1bmM0TGpaNW9WRjZDeXUwZXNxa3M1TjF1RzRTVFNNcHJGZS9wbFMyN3ExNTFHMVJjbENtNndzdHd0U2ZMTGQ3WEFPSDJVV2N5eW9UYkZoUVRUa1llaWRIaWIrekFEckdyM05PRE05VTdrbmZQZmZjY3IwNlFRTmgwOVFGb3NTM1JrT3lqUjRUSmppQWxVK1gwQjIyNm5vMFdqS1RidGxwUlBYSi9LMU9qTTN1RTF0M1RlbnV1b2pwRDEvVGh5ZEJnN3MwbjQreTlJZXhpdy95V2Jvdk1ZZFkzV0NjQVYvQ1cxb3pyNk9pc0xTd2pzU2pNN2UvMDJSZkkvdEl0QTNWZndRNUtDM3N6UW5Zam1PQWc4TnozYTQrUnVxWlNweFM0SGhabXcxUWRCZysrMFdhNW80QmJwVTBVUFpSbk5PdVNuM3ZjbkZodys0UFBVYzFKY2prNXdIN0xjRzYzaTVxQ2hkcU9Bc0lqczgxc2NEaWJnMHoyR3hpRVRBY1dJbzRPZWVZOWdYSW9MblBKUEdwVGFhZGVlcmZ5Q3gzY2JMeWdRajNQL1RnUk1UMTRHdC90c292SFhFVEtueWhhQXdCdkQ4OElpSU5GZVo0MjlzSGxiaEN3cU02U0srSHlGOU5rQnlkQVJxWjRJbmlQS2JUZ3U2K3lZeGthU1o4ZW9jTXlsTUNZYTF3aCtoclpmRXJsU3ZwR1BvejV6QVVNa3BGQjRDT3BtVkdsRC9sRlYxelB0cWNKTFVFc0N4OThCVHl0bVFzeGxNMzJqNjl1VU43QzJZbzdZUmpzUU1CY0Myb3Z4S3RIeGFoKzhXSXQ0MTdqc2tLalBKR2paZE1NbHJyeXlGZUhvRUx5V0pabWVtUFR1NUdOUTF6RVltck11QVNsWGFPY3pSM0xVR3o2YUdkbXBTcVdzdngyWEhCcG83T2M3YktwWFo5dmVsd05FdEpwNHpRMTYwWTMxL3dhWVVCa1BJa0pjV1BEeldxVERiL0NWeGNxZExTRVkvMFBlZllGRGFTNjNyRFQwdUhXTXQ2bjd2c3hnV1dpQjBORWMyRGs1emEzai9STXhha3FVSjFSQjc0M3hhSWM2dVMzRkttWklVZ3hRcFdFZTZKd3VSZllhZW5xblFNdTNKTkt0dE14UlovSERSc3hkSkZpMU1OVFNvSExaVVBPVmFZQ2RSMk1oNGozZVNENW5MTE9neXJQNlUyemYzNXg3amoxNU5PNGFXZm5wOTkxbjdzNlJqck5SZzZxN1hwTHFqN3Q3ajBSa3pMb0tYb1AyTnd1ZFh2SHVyMmRrWXRHTWEyWndCbFZSUHZFOWNwMnlvWStOUnJRVjV5NFdCbXZsSnNNcHdaMU1GZmwyMkVFdVEza3g2TWZySnVhSmFBTFl3Uk8wc1FZdXZsTkRveUN3SytLek9hb09NbDRCWjZyMzVWZ0hxTUhTM2tsWkhpVmhjT1EyMS9WenV2TEVFdGtyK2o1NzFqOUVSMlJOdG1aNDArcXRXSHQ0YytNTVU0TXA5dFFscUxwUVNnZUtTV2x6YVdxOXdGSDlaUE52YWk1RndUbEVmUlBkL2ZvMUN3WUdhajI5SGRHdTVrNHorc1hjTmlJS2d4L1BDUDMraGI3VTRzeWJGOHRNODNIeFlrTnN2d2ZMSzFxbWN6aldDa2x2c0dvUEovZ3VzZTNReThyOFZ1SzY5UVdMSFlQNlRYWlpOUC9kaER5OE9MM3hsZ2VqZk4rQ2xYMHZBZndMZGx5dGR5K3lQNjhCbXVjNm45V2lWSFdRb3ZQdExOZUEyUk1SQnJITWpQd1hIUElNd25QeXpPdFplT1FxbDVFNzVZMGM4SC9XVW5wK3F2NE1MVjhnTTVGQkJ1aXJGUVYraDNmemhYV1VtL24yeUdWNFdRa25wQVNydUd1SStQSlYrL2ZyY1lBbXFWSEVKQUFqYUExUm14NUxjTXcxYmQ4aWFBd2VMdng2c1NSdXNTWkpCQllrYlkrZU5vcHZBTk1Qc05DbnV0c1diOGVSeFE0NTZEMjA3M0luQXFLSWNqWXRqdmk4V0oxTlJGTEIwQlkvcllDMUMzcm5nNVpQWUVNS1ZPTk9GbkNXZnAzNHppZW90YzUyVVhDcktKQ1psZFJsLzdna0xSS2s4Rk9zKzZ2Wld6cXV2UWh2OXNqV1VtUFhSSXBOdE9BQ2pQMEFoL29LOXFhK1J4Z3JWekMwbnpkVEtwOEpPVm1JejRTZEJGMHNjeERGUXJOVzRLcS9jTFh6aU9RbXMxSTF2TnlWTUlhVnFIbVI4Qk0rNTlZMVNqWjVKTm1Ba2Y5aUd5T2ZpZ3dGNEc2V1B6MWd6Q3FvWEtEVlVSNUorNmQ2RVc1N1BlK3BCTjdjUHlzOFZJcGRjWWVjcmRSOTVzTEFSK3Y4RVhVZHNKV084Q21uNlVoNkw2T01WL3lmSm0xampDUm44NzFRdjlDb3B5UUZNeVdwcktaSTYrRXlrU3J0TldETEVZSExYTTRsZlhoYm0yMmpVVWVSa2xoYmdPTEcrN1B5bWV3VElaTU9CVWF6dXByT1drZ0FmZkdjcURWMTlzcUd3M2dMMnl1VWF2WHgySmNLMVpoeGZWZHZyUjRWeFlWaHVnV0I1dEdjQjQ1ZUE5SWRIbmpteFhYb0t4S2Z3dTNMQi81RU9uaFlHbmxrWnhmNkZBVEp4ZHduRXlIVzBnd284YU5TOENjcHRuVGRKWVdJNnFhYzFCdG95b3VNNFJJK2tCdUI5Vms5SUdvVFRxdE9jc2dxZXRnZ3FCaXlJMVNscGgvY095OVB0NVdLNkpwTkdKczVrK1FaQlJQWVlpakxXYld3U3Z2THQvaDdsZm4zNEtrS3hUMFJQZWtSRVFqRlY1Rmp6KzhKY3RZNUovakRhQmRlcjhXQVZLS3A0bHAvVEpQeCsxWHk5K3YxSExlUW1NZ0lNaTk2WGFOTWRiZi9xbHhUZFB3YlA4N1lXOTFsaFFVU0J1WEJiZ0lpaVpBV0NlSFExYlFvWTQwaE5naXZLVlBybDhWNG9Vb2o5cXFNVWRabWM0SG9YaXk5WFZFeUFSTGNKemZodVpYNFEzdkJBdjRoZ0l2ZXZSaEdCZERQcENoejRKbEg0Wngyam5oMHdqY3ZkOHVmYXY1eWpyKy9XMFdiaFVVaXlrcVM1bm1XdlM0QkI1VjJnd2hWaDFJYjZhaWZNMFhndzF0YWh2SkJZcjAwdllZdFhuVGJKdS9LQnJTbXVIQU9KS05FcEh0RW5mdmhKZ3NvV1hhK2dhNUxRQndvbk1MSU9mNWtsN25vUnRQUldTN2puZWt4S3J2L09sNXB1UHpKSU9ZUUtUdHh4QjFXaDVNN3VuRkdrQkh2eVF2K3Y2TWxTZ1RkblBORThYZWROREgrREVYc3YwZG02MEhCdWd4ZEowbHJaeXdQQUVwWTlPZEtDMTRJMnNFcTlweklTUi93TEJrZkgrbjZVTHJaVlJSRHVaOHpEQVNVcHF1TmtBcjNpTDYyUDhZbDE1ZTdrdDNqVWkzR1BwUEFadCtiQVlqbklBc1Q0YTJqTTBCUkxNbGxmWll3cUVoNzFWT1VoNTA3ZEIrTTVhdUw4RDJYRk5iN0NEZk5xQktTV0tLTjhSNkJ5YjJ2bkYvcUNsdVA5VEZTbnVhQkVsODBIZUU2MHM0ejR0d1dqeDF3SGFGMklpTk01QTVMaXhsSUxPMWo3Q3VWYkI1TEJXRTBCb0ZCMFc5cDZDN01RRE5CdnE4V3hONTVxT08vajArZnRsZDBQTXFqaVlsUzJMcTYxUGJNWnVUV1lpdXE2RkVXc3IvQk0raUZ1L1ZNc2o4M1JWZ0VvREJ4bXU0L3greEpHaStLZTVVM2YxYXp2RjlNQTJVOXFzRTBrSG12VnZtRlhrK21FemhxRHplM1U2ZHZiR0hDTVVmQWdiaUI2dGxGNmc0NjEwVXN2bDd5QStwanNPSCtFNTB4NnlRdFJuSFd0UkFFaEdNUERCREUvV3BRbzMyOFc4dlMrQ3h3Z2t6ZDkvS25iSUFacFUrMmg3dVZVaEVkRXdqTDlPUzZ6alJTWkExZkZwZ3hYamE4YlJvQkVEYTRqT3VheWZBOE51bWdsN09JNGlYc0VXbkN1UnM3UlRrb0JZOHVoeTNvL0xwS3lRWEIycytPZnRYWlJoYmtkbFFrdWFnTGFMM1FPT1hIRDMvMXdlZ3VwS3RsUmZoSGxyV3ZuMzdmb1lnL01zVjZ2WXB2RDBVUjZJZFhNQlVWVzhJcDhJdThNeFlFWHBuK0ZlakJwc1JrNElrckVwcUUxZXAvQTNzc1JyZWlkNEtudnUwcjlYa0RKbHZlLy9KdTlTMmRYNUR3amhjc281SSs3U3o5dmdlazlwWExrdmNzK3lTZEtOSG9ySGtmZlRyV0g4QWJ4Ymo0RnJTZjVzQXJKbjF3OElOeUtYdVh1OGo3OFNFTW5PWUtzQWpKanJxOGZLcXRRUWZDMmQ1SU45ZUJWOUxxdlNmWERrZmxqWGhDY00wS28zQ3pMS01makcwUmdGTm9PTkMrZGxKUTgrQzl0NmxFVkR3UXZpa01pQzNDcXdMcDQzdk1tNmliRkdLVE16R0dERk50ZUVBWHo2SWhGMDJmNW1ORmhjV2xVVXNNQjlLT290WWE2TTdrck1NWEpBYjBpcmMzN3dIYVFWYjhhUzJkS1M4bURtQ081UlByT3Jha0VJSElqcENITUtSRmxUMHd6T0dXZU55emtwOHJHZnBpNzdUaEZsTUtOQ05kWUNQeXJYbXlGRVZTck5MVW53bk1PaVpvUEUzTTZQcElnRHNNamxHbkFDUFJ1UkVQOG8wN2wvOEJNcnYyL2JOc3lVZk83Y1dlUnVaOGl6aHNCRytqbVU1UzY0clBzTFdnTXN2eUdTa21tV0VzeDQxR3pUNERpaUc4SVlsbWVLWWt3SWZFemYxQzM4Vzd6a0RhRlJmbTdWc0RmclE4NWNhS3k0dGJZbXl5WlJ6NjV2OGYzRDhjcjVSSWJSWnJRNTYwaUtzNVJDSm12U08wQnh0SnMwUmZ5cDRYQk5mYkl0dVBsdG5xaHV4aEFlenkzeElieXRDVkJjeG4wVmVkdWtQRURhNnBoTGpibEhuS05aRDNkMFpRSHZJWjNVS2MraHE1R2c4TDVqN0N1TU9FUFc2OFRub2o5LzEzRkxwUllXdzhPWWJ0K3BzVGJ1UVBlbVNnblFHNFM4N2FtcWpEdjFCSUNkSURYMkJyUXRpaGNwNDJQTmhlREhSM09yM1dONFRCNnZ4RHh3QURrZkUyR1hnUEgrQkoySFZPb2RTK3ZDcFFXdG5xTHltbHFHb1BUZTB1b0dmck5xeVRPcnllbDhWTW9DVmo2T3NZcmE2QUF6Z213WDlrYTVlaTJvZkd6Y2ZKczJEajU5dmRMM2IzRzd2NlczbW9zM1hMSVNXOGxGOXVWYXNpS01oTGJzV0VtYnNjTGJLaW5ZNi9QdHA5WXozeVNIYnlTS0JiSnQ4bWpaTzhCcnRBYzFqZWI4ckJKM0tlUEJlSmJqNjF6UjRWa2F4LzQwTnJEUm1LVHdxTU5TWVhZazJnWnJwRlp0TlcrZ0krZEJWbVVObWU5S2RuKzdMUVNOaWVGOG1rYW9IUlV1eFIwZWRFUmdqSUFiQWoxdHhkTzh1ajlVcWRwbUVHa2JyQXJzdnJIbWloRE1GNXpjRzFOM0FiUzJ2QWdmUmloTjh4OFhIUUVEbDRMTXVVY3NId2RrVXRzYklDQ0dBa3l6bVdocVV3OXU1czliREIyZUhkSVV5TnpidzhFSHViekcvVlpQVktaRnNKelV6d2NNZ0ltQ3FzY0lLTGIwV21OWU1Dc1RYRVJxLzFrNG5YMGFVcS9rMEdrR1BHaGxuZ3RLSldETTg3TW1YMi9XVnE3NzZ4WGZHcGZXYzNqSElkZUcyM1U0SEN6ZFZCWXlzdWVJVTY2ZnRWZFRJQTd3RUF5V1BsUFk2TUwxQmxKU1dtbWVFVFdJZzdsdXFIVFM4bU85ZFVITldJbnludEZNOW9tUEFjR3hqOXpsNUc5NHp2ZkIxMkN4c2swSlMrcm9DUnJyREI4SE5mbkRZSWZWTXd6Q2RVYjJNN3ErTXpTYTJuRnhxMExNNWNXaXlocFZwclZNU1RGN1BYcUpjaGFCajM4MGpDVWViK3lMdGFWZnVOTUJ3dUhmYVpoYzdLcExXUEErNW9UWm1rWW92cmlJTWhRcG1rOWpFcmpsNEJpSVp3NXFnelpVdTNqcjFpVlBDc0hDcTJSbGNnTnNoMGFwMUI0Y0VZNTU5bFRSU3hmd3JLdUtLWTVTUHpud3lkZXdHakVxUDR5MTdaenVOWTllMjFQUXRlT2ZmUDBTajIwSnpMRUdKWUhYZEJlR1NVTy9PWVhyZXBZSks5VVdWYnQ1bkJROEs3NzlxN1h6d3dUK1JubjhlZy9LTXdGUDNjTGNlOTdEZ05xOExyV1hwVGJmNnI2bjBlN0N3K3NuSU42STUxUWhHSGNhbnAxZFE0aHNjNjdjUDdmbkszSTRKTXpsTFllMXJUdzNFdzd6VEdEdU16WE1NZy9xWjFsSWFTcEY2SVR6Yy9jRjgrQjdBaE9waG9YYnhRSGFiZkRkS084UWJxTTRsT1BnUU5tc1JoQUlUNHJ4WExvWmFNK1V3aTd2bEdScWdxa0V0bHZMTGxHUHpTSGFadEg1VEZJV3FIdGtobnlybGRGZ2JnbjYxamZyZHRPa2pUcUpXOUVSTDdwWVdLU2NRSTRNSW43VHBIUTBDYW4wd252a2hjOXNxMUI0T0M0bWtIcFM1TkN1eURkUHNBQ0k0aCtTNXVIMWk4eCtRc3NuaWJUY3FWc0JzY2JhYURuenhQd0NYcTZiVHpBNEdRSU91RXpJR3JFL2xCemprcE1ybnAxclJUcVJGNWJQV3ZiTUNoWXY0TUpIeDhTeHhuc0ZxUjJGNXpDQkVERk5kNTE4bVpzcHhsSlZZY1dyNTZ4TGFVRXlndE9md0FiQVhHcFRDRjRUR2lNOGNJUDVGSmdzVGJBaUhMRzFIZjZzQlNsY2dYa21FK0Vub1FyZEFlOTRzV3dxTUJSRVRRUTdrTVAvVGVwVHpra2RuakkrNWkrWnNpaFFwRitkVXBLZTMrK3ZMVy82cTY3cXdRWWI2b2grTHFneHZqUERQZDFyS1p5ZjZCZk9rT3ZLVjRaenhxeTJPTVl3RWhVZXEyMkxkTVYxeHZhNVJyNG1Wd1NpdzE0enEveFRlMTJlZnE5TDhtM3dvTVNLZG5pRDlWbkQzVXozRUNVQldURnN4eTBha3RwYzRNdmdIU0ZGTXJjNjJVbyswdXVCY0E0Z1NJQVZqRXZxUnhnd0ZxZ2lKZnpMeEdVbTdWYmhRWWd0VDMrbnRUV1JRZ3JpclVtQWtrK0lQMm1oYzZwbmhZbUVjdVNBN3BZMUNTQ0dzTklRR3YyQ1luUUpKVDNWeVFFMXhoNTZnMkNtS0FCMWRxTnM5YlJDdHRIQ0h3a0pjcm9ZbG5sNGF2VEJuK1llWDN3aFBTTTdZQmNDaEpxUmlCZzdHZ0hEU01iOUpOZ2o2ay9lM0VWQUQ2OFZKZ2JsZzNuZ204YTFGS2lZL2ZVTGFBTHZYWUlTOWdkOXlCVGtqTzhKWmttSDVQaVVUWW1zWEptWEFQVzRYMWRRM0Q2cFlXc3lnZSt4c0hPYmoyR2VBMEkvd3R4dnUrYWc2TzN6cGk5WGpzRnhOaUtrWDZhL1FBaFZQYURDM3dZNmJpV3JmTW56M0lZYXNuSkZzVHFuUnBLd0JvWUVlVG9kbmxEN0dXb2M4N1VzOXNFT1lLbkRrYytRdzgxbXZqQVArZExlSmhOek0vbDY5akVEbjQySjB2SExlNVVwZDU4cjB1UFI2b2Q2b2tVcFdpTGtuclZBdjQ1L0RhSTB5RUFZMHRFTndpOWpqVVhaU3MxSTIxN1huc1VNdzM1VG1ReEVJODZFQVNncHZUQ296bjBSSm1yeVBDazRlTWRNMlJpL0RBVkxkaG5IcTZmTEltOVZPMmhaV0tDRVhvc0RsUmhCQld1R2c1ZmlXVVNvZFJ0Y1dBZWh0VG1ER3dCOHpEY2hEQ0V5YXNPVVJucktxNG5uaHdVencxdUJBY3l5ODlvQnF1YUxwbjhCWnR1Ymh2QXpVVGl4YmtvWlJrQStweDFqWFRpQUtDZHFlUmFwMlFENXJtaEJhVnlqUy9hWmtFMklzaERnc09IblYvSDBWdXYrajIwS0RSQko5VHRGRldvZ2VqMFFuMWdiT1V2SWIyeEdkaWlQVjFNY2JoVjhETGNiY3FndHlUbUNCVk1CVlhuMkNxMmQwalRlQW83MVE4OEJMY3hESGFRZkRyR1RLOE9sMWZrejNvUGozcytobnVnVUVDL3ZHb2J3OEZRdGtFMkZaNzMrVTBBcHB0aERoTU1RMi9mVEI5c0lYQ0RqeDJnVjJOL2hsWG9naS9VZVozSGJhbUw3aU5ZUzEydEdWTnFDSWY4dkdBNDA2cWdlQXF5cnFzdkRIRUI2dWI3dUNqU0V1K3k1Vlc4ejhvQXE1M1NWVmFJbWlVbFN1ei96Mlc5YWxmZEtnZzdtMi9hUG53Z0F3Y2RteG1XL1VXclRXYWxTN0EvY2lSdFlDRElYeVhJQTA3bEhZdHhPTHJRcmlVWEFUcU80T2xqdjZWeXpSQ2xzZzlOZFdTa0pEeUtkOWIyWkI1S1BLVis0Tys1NzFCNkZROXFmWDd4dFVZY0hJemZGMTFUbUpoL0JWSUk0NjRSU01ZWFhjOXdjNFhiaUMyUHpjSFk1Z00xcUtSSU5kUkVJTFYvUlVqdnRvbThzemlPYTVGMkJiamJUMjNGRDJJbDZMOVFKVmZ2aXJVL1VBL3V2cm9VTU01S25NbDcyTW5MYjN6alV1THZPMFh4elVKeHRuZy81ekJ6WnowSmg0ODg0WFlmM3FFYldyQTBYNzY0UjdSbFdWT0drZnBxZkJyOWZiVk5wVHNrN3B2dHQzTC95VDZDTWhIcFdiMDkwVUV6VnZ0Qk5zZmpqYUpGMnRqVUdjUkpHaWUrbkV5ODNoamk2L0I2SC95aVBTdHlZNVlXSEJuMFlYbFdXdEZvQ2JtcXJKOUQ0V2wvaHdiZmtBcTQ0L3Jhdi96MHRRZWYzbC9Sc05iVEpzV2ZUd0dXbWp0ZE1Rc0l2OFkrbG5Bb3k2YkRScml4RHNleW1BMnpsd1k4REppSzJqWWtBRFlNT3V4dHFpczdPMWcvSCtDUDcxcTI4ZlIwTU11RXRBd1RodnM0Z1NJVmQ3SlZ4enR5U1VSNFpVUlBXaWN1RmpJaFBES1ZCMmdzMFpuZVFxdkVOOW12YmpEd2FxdjF2UitWMVByUEMrZlNPUDZ6bWd6d0xqL01uV0R2UTdKUHBVcU1HOGlialk4VGlib0RtLzJiQmlhdUN5ZTMzNjlPNWROQ1Z5b1BveW8xa1hhN2RuRFZTU0JDV2xZSlc3OWpwNE5hNEhqWjB4M0VOaWFrY29rYUlrbUZNQURXWTlqL2lwK2J2MmpEcmRiVE4vSUVGVzdNTEY5NGROVmtkaUZFQ1VkK1pmU2pWeis1MHFDenFOYjYrSktwcTdqWU1Eelhmdjh0cjdXZmdiSE0wcWNWck9xbWpVYUwyK3JwVW1DK3BlSEVsVXJNRXFBV3oycWRnaWIrZzBxZWFmVXRVaWVEaWlNWGl1UDlyMFp6enJxdlk5YXRoN1EzZjB1eUFVZlZFRFFRTEllQ3RkV1hVWjBXTVpCLzVDa08yd1dlQmZWK3JiQjdyV3hQaHVGZDJDcHB2cktKem00NHgxd3pHNjg0VWxsSHREcm1tV3VXU3NhWVJZd20zdHBTZGJpbldaZUU0S0JENnZxU2hJZ0lCeDNzOG01Z3h6OW5YaFFRTDNRZXo4K0orZklyam8xTGJyRWEyL0hnNi9wZ2l5azZOdUpTNFJMQm9xQlNaR2FOQjBFVVdoWWFyQXJOUDNVZTkvQ1VtdjRFdFJDWVV1Q0EyR0FNL3ZPMERGNDVQbHEwT0hiNHBtdDNSU2VUQ1VlaDB3bGZCVzV5OVU1SG85Zk1FQWUxZkUzSS84dHFzZUh6YmNOZEp5WFIyZVQySUE5NE1iVU56a2ZBSVJqRmo0Y0ZjanVQeE12eENOZ05uRXJ1V2RTUC9jakVpSDZLVGdXSXRRcGM4T29ubXl3aDB6QUVCSHZuT2NMWWM2SThGYWF1dXl4MEh3YUZUWUxkSVBMOG1PUGM5V2RtaWtPWHNLK25udlZVRlltbXhNRDhobzQyV1hLRmVOanp4Y1duWEpkbGFJeVpoaVhteFlJY0E2SS9WOU5pMXI2ZitKL0VtVWxBOW1RemE2a2l5eUI1QjhaRGFZSmxWQ240SlZDOFoyV0Z1eE5tZ1ZQV0hFblR5aGpucEhUWGFab2MzQzdSajlENGI4YVZiNlFFcThJQi96NkhZSVZXNGRQVzNuU2dxam5SMjhGWWpMT3MraUVtRXNKZ2tsMmVOQ1BhcTdrbzNnTUNFeEwxeitqVDZUU3FhZW1HRXpUQStha1hPakNhWHdXMjQwOXJyaUlza3lCcUExN3d6Q2phRFVlSkNtdHYrSVJKdG9ITGJzbHhreGJzUWo1NElNeVZyTjh6Tm9NZHB4eC9ydjl6RStkeUNLTkY5cmhpbmlzNWFscE13MDN5aWpXcGRsa0hCQXczUlp3b0lqUWNJYkJMdFRzTW1ya1VpL3ZGV1JGK2NEVjhzTkN6K09WS052b0lzUkNzN1NERm9NSDM1UlFlU25QMTUrWHp3eFJOZ1BUQ1h1WnVyQWNyc1diK2hpVnEwd3ZGcGx2RmI2dlFwRHN3eU81eTRoa1ZWRlBTSkFzMGJ6Y2ZKMEJUS1oxNDFqVjd1Q3ZCM0svWFFoUzRVZEpXL0xYS2J0aCtZcVczdlVJRHlnU1N1L3FId1pQZit1dENTSDl3YTJOSTJMZnZ0a2RRLzVOalBCRXkyeUdtK3ZXdlRDMUpxVURtaWJENUh4TjdZZml3U0txdE1lMlo3YnFPWmMvWFArOUVqMnBBaTErVmpoZlVBb0NKWCs4cnRxdVpVZlRQbjF2ZWFkSGx3M3FXZ1VOVlhLeVo4S1lFKzhyNU45WTl6S1JTcE9Ua0VmVmJlTG9FS1lUSGk0NzBIZ2pIb2hjTzhOUE03ZlZHT0xkZy9XWUhyeVpTNHpKRUxVbWkyN2xKY1FaSGRzOUVqZmNLL0szU1VtZTZXcGhMUTZEUmdSSUZTdTI0WU1YS1JnaTJrR3M0YlBFSVkxZENNTjRvQ0hYSVQwMEZoYXdjaGVhd1VQQlJEVFpSNGhlVHgzRTJQZDZWQ2FyOWIrbE9oZ2NqRVN4U0d2cVZta3Ftei9TUXVTRWc4dTRqbEMrb0FGSzdzUHpVYU81WGlGUHRrdEZLUDZDZ0JGeVdIUXdwTlFBMFo5VDhoQ3VVbDFxSmZKSzA1WW9DcGxGSFc0REpiVmR2RHZyNHQxT2tLSUxyNFI5c0hlSzE0TW5rMjZQR0svdTB6ZUtNVm4vai9JcGhobXBxVzVDR2trZXo2dVZrN1h3YkQyQnRGSjJKUmJXK2ZNZzBUOENibHFNQTJDYUhGL0J6OUNRaFd4QlR2OUtPVjd0T2NveThURHZteGZTcGFyOVUyVU9RbFJZQzNFZUlFOEVwWHM0NDVuZzdUd0NvZW92R1N6b1VMeFJRaWhWUW9LS1hROWpWMlM2Wk9HQWI4d0s5c2hFb28vd240eCt6N3o0cXNFalpkT1ZHbEFxanphM2VINWY1S3pETUFTSThDSzhKekFsRGRJeTNrR0Q0d3VqNHVQMHhwK203WDREcXkwbHBiZmNIcm5VelYrT0I0ZitYaTJPVk90S0tpejBxaUxjTXlSbjdCcFJYM2RKYlhSN1FvWm9ieHNiZVJsS09TSDhWQnNHQUc5YzRJT0hxQ05McHJzV01qYllYanF6ZmcxU0IzV29LUVdIZmZ1WW1QOG1JQnEzUGpPYjNnMnFXVEpDeWROWnM1S2NCWC9TV2Rna3hnZ2EyMUY5bmRPS01LdGRucnc5T3BXdGdvUUZIL2UwVktveTlTa01wcWNnYUpmdnptYmJraVRBMUt3UjlFSDdTMXRrNmNRZ2RreVZycXZJQzR5bWN0TnFFcWZxeGlHOFh4VkxxUm5SazJKb0hIODNEczR2U3lhSG5BblJCK210VXEzM1dMRkdFL0tZWWZQbE03djRWS1FlNFB1UmxWTjk4UGsvYy96cU1BcmVYNERRYmtrRDdmOUhEZS9NNm4vWUJiOFQ1aWM4Q3J1YnMyWTljMDMrU1gzak5tS2JUT0VuTDFpT3pSVXhXNzZVZGxXZElHcFpjVjhvdzdwVzEvL1c5Q2pteG9XT3lxaWxSaTZIKzhsNS95d1I0RzlCbnpzbC8zWDBMc2VZdXZldWJNRUFBaEpFTmxFSDB3SGFQYmhOZzhtc0tyV2VKMXE5T2NZMXA5eFZuQWdKcVo2QjZUZWY3U2diVUdpTHRHNmwydGdiYk8wRW1PVG9uL0c5RHVCR1AxcXdnZ3psMzUyL0oweHcyM2gvZ2ZqUllndmN0M0I2bDlJcXdEMVFlV2hVSXh0blZ6N3FWTGlTclY2N0xrbGVwQkJHTWFFNHlzd3p1VktzNndxd3M1TjNhVHIwbjErdVA4UCtpOGpHOExxbFBCdmR4cXdNOCtScG1ZZk1Hc0cyNlgxTEF2eG9razVGUjhaZVlJM1NtM0dyem0vVFM0anhCcU1WUWhxNnFNRXljdHBLc09nN0ZMY3FJRU9pamdjQjU2VCtZWS9vcUxtRDVsaGlBUFhpWlFRc1IyNWhIU2JPcDR6TFdqWm1kYmRDa1BETThiY2JJcFZlbnJyUE5vZit1UDB2ZWdQSEQ4Zjd0OUdBRVNScTQvNllOOHNnMlNnVU1VbXFFaWpXN3BFY08yTWg0NERoMG5hWG81U1dZNkY4eHBVN1VFYVNTWWI5Q1JDNGpUWGJ5VFJVUlZ1WGp1N0lXMnBFSnBjMldkb1hCSGJ4SjJldW5iWDdWUDdVcE5FcDd4ZUViQUthaXFjYWJQRFE0N3Nnd0ZxaHlNMVZwdW1FZVRzYjVDMXFSKzhNNDRNMHExZmlPQUJCOGVTZHZ2UWg0U2hoK0FLWCt5aTJOS0tDREs0Ny9XdzBpQkIzQTZvWXZxWWNQY1Z3d055bzA4NTd3QWIzbGdZa09HYVcrTTh5cjVtbTB5cjAxTkxIZFplWHlYZnBhaTRUY2RiZG0xSW1MVzlNbDdtSzI0NVlSUi9CR2xKbjliMWlPeCtWejU1ZjR0eFJ1c3RhWXF6c3dzTnYwQkxyREhyNzIyQm11TXVHZ0xwVXRyS050WVN5aGFsWlNuRVliRWppRVhjMlRRMWFpRFVHcjVLTmVsdER3ekdERUUzQ3hpU3JjTTB6T0hKUWlhb2o0b1FSd0ZGVjVBOFJwR2VGTXZqc0x1QXJLNnIvQ1NnNDAzcmZoR0NjV0pLdk00ekFqN1dpelVhNy8xYkc3bVRuVit4ODhyVW1OcVlCN3h3SHUvbEJoSGJ1RHAzTGdjZVI0dG1kRW1jMzFycmRVSGJMWXZoVnFyYjFSdWVNYUljOCtTRUt6emFOTzVHeVVaRGRrMWdwVkxhTWRNQlZGem10UDB4dTR2NlVCNkdZQS83d1IyWTNnSjRBZ2VCa2RPWGVxYlFKNEQyYXJqWE04ampBV3RZQ0FuQ01sU29BelNBK0ZnY01pOVhSTVQyMitDUUcrU2doRHBSTEhQV0hWWjAyRDZEczltUFYxaWllUDZJRncyalpiYlVIei9MeXJKWFhNaWZDYktobm5BY01haEZTb3dwMmRCZzBkR0lMZWtiTUJDSEVBSGg3RnVVYXowRUp2c1h1RW5INllIZXY4eTl6bE9kRmtGQXB5U1NPbnRwRVNaZmVGRUlIcmRjcU9wemxvYW9nT0w4QzNBeEZuMWdDTVJVOGFoM1hJZk41M0JNTmp6M3hUWXZ2UGdpWE5oeWM3WVFOWHZZSW5XakR2b0pRb1FyY1NkQUtZcFdqeWdmYU9OaWpBQVJmb0wzVW1JVE9zTUFzZTdyakFyY3FGZTJaMUpEdGVPcGIrcGMzdU51YjdGWkRodUozTWlKUjRUUklLanJWbWdKa3hQdUdXMVoyL1VNNnNaaDF0WGc2MmVsNkJiRUxYQzFOblZ5bUFoK0hhQlhnOWxmVVZNalRxeWNEb1BESHlFM2xtZFJkU2lEUWNxVnMvRUI5d29kTTZ2V1AwZ3Uwei9jUUZVek5DZjhabTlZZDZLOHdRcXRuWDVIbDgyRitVVlRSUnBrWHpFcVdHNG9RZUFJdXFNSVMrNlBCMTN2OWFvMzlqU0Zvb0ZORzd0NnY1Mk05QXFaQWJEUGlRVnYxLzdYV3VBcGhIdjFjSHJhTGJoQ2liNUxReVlpbENvbTZjK1F0UHpOWE9Pd0wyRS9pblNyMFFacnlSQXJrTHZXU0VBaExLNHVEQ2dQSVRKcFczRkZnZnVwWkFxU2Jna1JLUDJnSklaVSszdUpPUmljdm5IZkthdGQ5dmd6Zmd0ZWRIVkVvRmg4ZkhXaFIxQUJ0SS9xcWUvcEJNRExJd1dFT0FhTmdQTTZRdmlaWjBPa2NEUHR3eTlkcHhtZUxHc1Voemg2UjRMWkI2WTkvOE43bkJlMFJGTUFqTk9LQ0NZRE5nTmFrWDVnQTYyeTdWcXo3VkRjQUx4bWI1ekJoN2NweHV1ai9wN1o0TERmdVRDOFN2aUsvY1ludzV0SDNaanBvRFg4bVdUZEFlbU1PNjFZN2k1ZDNtRkdlOHQ5a1B4a1FFQnVGMWVxbjJxbEc3aEVyRDZlYVJwS1VUYk02czlXbmxyZUtWS1UveWZsSEUwTEVhdDZiZko2K1pBY1FWRWtIMkxUbHRKSTBXb25WTTIxcFpETzBaaW9zSHJNeXcvSnBqS2wvcE9BTERuYTZKWFZzU0NCcndoZHJWZEFFTFV4NStEaXBSVE9wRDlTcGVkaDNsZWM4SStHcWZhcUFiZmhIWnBsWjFIRTRBODAwTGdYN2JXblhTbHVIOXRROVVJWk9rNGZBdTlqdlE2OS9Rc1FTY1dQRUV5TGNGejAzeDVEUHZaeVlHR2pOZHBISytIcnE3cWpwNE5ONW1CcHovTEpOTUtxMXNWSStBTEZNbGc5cG55aEdSRmZLSjdGS05aRjhYOUJDRzVCNnVLUkRFSXNRRGRkTDU4YXhjSGdjVnhxa0hBNk1iN3V5RHJiMnB1bFRaeVRLOTA5ME9MUXJndXhJYW9qNzYweER2dkhicDNhZEU2T2dNWGlqY3R1UFM2UmNCSm1FT1hMMWNMY0NockVCaFRSMnpCZXNaaTdtNFc0UFYvZm8rMUM3dFZuVmY4WVNxUHJONGVrRWZVRzZuNVRUcVgwVlFRalMxVkFYamZWek1DS1gremRpYktJWFoxbXhQdUVxcG53RlNxVmd6b0pQdFNrNjZYdTdjUkZoMnJOcTFFbDJreGFxQ0oweWdlQjQ5SDcxN1kvcDg5eUY4Wjk3RisrdExwT3M1cU1ORWhRS3d2cUtZM0F1Q1NmNGEzMnNHanFvMkwyaFA5VHN2WUVteHJQa21iZTgvQ24za1FBTENjRzdPaVUvc0F2SjR6Q1lvTmJpRW9hTFFQVGtTSG1IWlh0ay8xYW9GYmF4S2R1WmwyalIwdExNWm00T2dpZythVE9PaVB0UGNoMk9OYlVLSURxZHdlcWJOZENySzZwc1kxOVZ1aVM5d1p1aUtZYkEzL1dvT2tuOEhXTzQ3dUtIeGhhWEc1TjVNaExpNHcrTVlyNTl4NVFLTXhuODNBQUJCWWorMFRHR3laRG9tOTlFVGlyamRVTDZuUFJ4aHVDenlMeUZucHJWN3ZINjR1aW9uUkJyRDdtYnVFMG9tVXJkY2JzWFZ6cUtiei9TRHB1NXJTY3pEc2dLeVFmWEdsK1Z1M040ekNDR1NBNzE4MnFpVjBmcnNnL2hYdmNUaHVRNGxIcTNLZGVGcnBJNUpOTWR4ZHMyYWx3ckNqdUN0Uk9YM1pvWGxVbG9QcTZSbHlWRjEwUjd5TytNemxGL3V0T0NJK2lzQkpiOUZwdjVWZEFLWG9Gd3M4Sm1NQmxJeVFvV0FpNTFyeU9PaHBjTGJLUFZrNWU5OW14NUxoNi9NejhpVlYveURGMEt1Q3dwZVJ6RTQ5MDh6K2U0Qy8zcmVudUVEOVlUM1A5S1FmbGVMUHNNQXVSUHRUcHBqSXJwYTdpV2xJSy9JY2RpOG5iekczbFJMT0hFS0xPV0ppVlFNdGJFei9FbGdsMEZWMjRKUHE0Ym5Fa0Z6dk1LaHRQdTFkWTg4c2xPbGoyUUJ1cDhnKzc1ZmowK1JlbmZUek8vWmI3V2VSbHZNTjVOMzdyNmJ1T0dsOGJmSGpZMDhyNS82TCtoUENZRE9yWkFVaFJSNTd0N1lOamlZa252Q2l2RVkxVVh0TTN3Mmk0Rks5RjQxczAxaHBTSzRmNlNjTWl3N3lEVzJoNC91RkJpNW1nTVFxWmY4SmdjdG55UEo4UU4rUWNEdnRaZmFaTzJIWDAydXlPcjRXdXdNb0hocWFRMTFFTUJla2Z6RDJFd3VxbVRiMnpBNnVzdVJyZFZ2bU1jLy9GUmpzNWZCdzl2Z2JDYUozMGw4UUY5Tnk0R3FQN1hIS3VhbXdIQjV2MXVWQ2w0VkphQkdLbkczRjRyUDJLc1Q5eDFiZHJiL0RDNDM0UmxhWWU3RERCa3kvQWdSL205VWZuTGhoYmM3R3dzaWVlR0MxaC9ISG96VnZKbk1XWU1lc3VkTTR6VkVqMmcyLzh2bnFLdm1OVzIvMG5NWGhYMjZLTTZPeDhJeTVGMnBSRURWZDVxZlhWOEpwSGkvVzIzUkoyekI4UlFEN093ajBLeG9OSUoycDFjY3FsRnJsbzRFNk5aNU1pbnlERWlqSjJ6RktBZjg0NDBjdlNLSGZLY2lIRTlVS1pCWUdBTGVzY0tuNDJqVjVqS2MvNk5OWnNJYWFRQkRpVXpkUUYxZmdVUHhNcEhVWExDaWtES3FtWmFnRlZKUFZjQmFUMEhtaG1vaURNWnNXU0srYmhJZDNvejRqOWg1SGZvSUNnckliZzVwTjh6aERodWVsSUUxalJGTjBONVRNY3dRVEhMM25neENuYWFvOVNhUXNYRnl6QjRmN2dMQzBydTlsaTg1ck9PdGxQcEt3bzZvUVFiR3MrWWo0YWR2TEoyaG9zQ2lpN2ltYS96VElQeTYweEtHZUhOWkQ5M0daRkM4UGowYmIydUpZMFJiT0pxc1VIWjNRakcvV1ZiQk4ydjhLVzNTaG1oOWRYZUt4VVFuQWx0Z1IzUDR0YnQzbDdqc1VFc3pwUU50aWRuRE53VkN6ekVUYVdON1pPQ1VsbEpSK0ovaVZOVytDNDF1Smx6MndEQ1BvUTFWZEczRmdXNENKdG9tNnZCaUF5U01vSmhvYU1NMThxSmE0TStpU0gya0gxVlgwd2pkclZWKzQwUTVodmFwaEt0M2phMVdMc0NkU21MaEk0Vm4rZkVEdzZnSG5BMVNhUWJlc0czdG5tb2RUeXRZeW5iVzRTa21Kd21KU2JTYXp5cUo0WTAzbEN0d0dXa1hTODkrR2kyUmRXaUpXdkl2MmxVMDNteEVGVTZXU21LUUZydTkyLzBaRlRxQ21oQUxMNzZ0dGZjQVpPZ2g3Y3JOYXVnajhtSnBHV3E0L29aai9OTk1uVzNpa0pXNHlTN2E5eU9rNDA0ZDFWd3RRTXFrQXo1aEY5d0ZvYUY5Z0Q0OENKWlYxZzg0UERDdGNJVzlwQWZPd3R3NGVMcStEeHBkN1ZHaE4yWjlzSlhHdmlhOFF6RjF2UnphanZySFRmN0N4Qm1JdFhjaHlUK0pqZFgzb3BubTFhR3c0ZmxyWkl1REFsRlhLSU5HUko5Tm9XRFk3YUdyQUhlNWZ3ckVxbVV2VFRNYWJZeFpDNHFWcnIwMm9QM1hrZElaNm5uclZrZEZuZnhsS1FXNFVxNktKOGs4ckdwM0dCMXUvZkU2UHdSaVFDT04xNTk2ck9meDg1K0s5Y2p5K2h2MEtkbTdJWVgveG9EeXp5NzJ4T1A2MmJUcldsY3dJb0oxMHN4RXpIeFBqSkVpMldwOSs0OU5BYnplRTVqb3Jzd2NZczQxNCtFSytwT2ZBeHR1R0lkaU5OUXozR01Gcm1xdlgvZzVCUHZaYmlOK0c5SFFuWko2cEN6UGxldGZqdmlRWFcwUDVBTzh6c1h6ajBlMVlFek9mQWxEYUNnc001bkdYWW9xVi9RSkoyUGxFTitpc0FnSUE0eVkwcFc3SnZzekx3WGxGd2kvTmtnVnllVVJjVnFPS24yY2NWelljYmtFYXoyTWNLOWw2MUVaSjc2V2tuZDIzVmxzeExMVFEza0NUWXI5S1lBMWhTdldsK0JUMk8vZStuY3JwKzZDQUFEeXlsYWs0UktqcTRLRExHVm80eTUxU1pwMW92djRWQzdnZXVmOWtsUGZoMjFmVEl5Q1dSaHRidDV2RUFaYk9NbjV1bnhITTZGZ0FSeVRCRGlMSkhNNGh2NXB1eUdHZmJkSkEvV0FXemlieXkrNTRXNTJUVlFib2VFdFk3bUsxM3V5Y0JWM0dFWURIZmZZcHc0VzJIT2hROGZmZVo0WldlV0pvUTdMVis1VVl1U0g4NVJtN3JwVTQ2aysyT0RvVjR3a2hoVmRNTDA4ZDArV1hqUzRlNzVITU5zV0NQNnVLUnVSWmxNMytuQytTTU92Qk0wM3oxWG56c1U2RVk4MjJnakNSQm9Bay9oSFN1UUNnZ200Qkd1Y01XamJzRE9YYlB2VzYvRnQ0Um5oQVdIbjFFQjZHRzJET1IyYUE2UmdLeFk2NnE3WlAzY2ZzY0xwTDhJWXBIdjY0ZitEM2g1MGlDNVBoMklhUmZrYmVOUVova21xaVAwQTBzSmQrNHJkU2lMclJXVitEdW5jbGhWb3paWnRTWnlFVElvK2FKazQrRTYyM1d3UGE1VXo2eVIyeHlTM1RjbFlha1lBVnBVTzdMODg1cXZsa0ZQeTJ1aG4xY3k1dThZSDRkTWhDbUltSlJpdjhGeUdzb2swSWJvc1Z4K2RXSFJOc091dkVjbWZJSnFIckYwaXZEMEVyUktwdkNNWVh6bE0zUjZ6U1ZoMFZuRmo0UUxJS3pNVElYR3BjUDRLSkdrcFpGTTJMOURncGRabW41WUU4OStFa21ZZFA0TCs5N0V3d3YrM1RsNmI4NnEwbGkrSFB6eTZpcEtFV0pqdS8vcVcxZ3ZpSTJKaWc4WGg5MkZlMlY4SW8wM2tQTFpITkMyQ1EyK1A1M3BScW5zK1Bmc0tvdzRvd2dnVXJNWlBHY1g3TlRTUms5dXBYRVNGLzNGdENkOEFMbnZZSlhURnQ4bVJkWjZ0OWJJNXNLQ0l1RVFRL3FFNzhkSjZsWUhrNEswQ1lWS0pxVGJma0JTa2ZRN2x4dVVZY0RYK0JJSk51MWtPOEhNbjBrTW1wNm5ZNjIyZlNwUkd4M0RRY2xCMnphdDV0czJEb3JFelVmV3h3NjNJL29qczVYQ0ttNWp2MzJLQWFxVWEvTU9DY0FuMU1qMCs1TmhoQ2hsWC9DUWlUblZyWDF3RmZmcEI4SElmbTBjWDUxaGJQdXNvb1gxVjdnYTZ6RzRYdW9ZdnMrMHhIQVFqeDdEWVJENW0vUzJFNXVqUDlrNkRPTFZYemp3Unpvazl6bjBlWWVFeXBDUEFqTWdXM20yeUFGMTA3VmNBcWNEaWFBRDFWU05oQ0tMdjA0TWN2cWxCa05Gck5QWCtjZkhidzB6QTZwbE0yR08xcTRpY05GbGlHM3UwZ09mNFV0ek5xZ3VzUUtHK1BTZ3NjZFRUb0dyZXpOcVA1dFpxRnVhZzNKSXJyOFVPZ01VajZVOS8vWWUwK2YzL2hBUXVqRVUrT0pNUDFCMmNsMHNvM1pxZVNjckNoMkg1VFlKOVdVQklSOUtram9STGFQMm1JdGJiSy80QVNsMVB5UElPbStEczVXSUlnL3p0ekVQbDVHMG1FdW5tQXNKdUZmR1dQRENhNEpZeXpoU0NaNFcxTVNJT0JvQUF4RHRiRUdKTlVVN0FQSndzUDlseFUrUlRzZUlpTWI5OWxVQkRWdG5DdGFkNDBrSGdDOTAyY2JaSU5NY1BEUWg5NzhBZnZFY2VBcU1OTm5VZFl1cmFkeDBWRzZTWDRZMStmQ29PMlhTVkhmMU9uRDdMOXhPSm85MTJOdlBscENYUkcxTWovVHJDZ0FKRUNobFhDQ0w2ZjNrRHBlQ3dqVUZtaE5JVkhPQ1pZV2MwOWNENG81WGhOT09GdGpRb0N3M201aTJkbWJ3cXVaaDd5aWxZU2E2Q2lSblFkQzhYSXZQMm81MFVpbnlsZHR4Z0VxUXk5dHRKUlZjbE5aTlNSTzBWU2lFQnlXb3F3WUxjUDVxSzYycDFNc1ZUbkErNG5vZnBWdmRzc0RmSitMZ2c5aHZINUwyUEtEL3RmZWZUdURGUllqdVlpMWpMZVZKaElHUjRUOW51MEMzY2JJUUt3cEN6dCtEZU5FNlEyakFQclRmUG1ONmsremdVS2JEY3VadGlyaHF4Y1I1T0NGdzI5d01xYTJtVXFINlhvOCtpYnYxT0R0L1lKYUN0UVMzVWhMN09DNGYyTDIyTFVaR2JZKzl0NnZnUVUyY0dHUU5uaFZLSG9GWkd1QmJGZ09uSi80RDVISjlzdG9EaytuQTA5QUxsSk9LOWJlVDF1V2FmS2ZOOEtHbXJUdFJNMG56NnJTb3pBUjJOTmhmN3RoQkZvYTlrcTMwQ0g0YnlibFl5YUxJN2N0TURrQlk4dmRFdGxXb3Zwa0ZYVmthemF5d1BXUTJVVnZ1aW51Q0FiL1I4bWwvUzRydzJJTlJrVG9oZTVqTkVsaXo5UDUyWDF3dEFTbkFrZ1lXK3Q3WjlYL3lMcVhnU2RiWHdHdFVnbmtWczlzNmIrSlpGU1cyRm9KazFQOHdoQ1BLLzFzVG4zVkxJMWNtQjlleXZCaXBZMjNNYjUrbWViY0c0UzRQTUtScTQvaUNrUXZ4UDM0UDhlUFk5R3lrczNFRHpkZGx0MWNaT3M1cHp3ODNnNDd1YUFjeTBhYUNoMnY3NkVQWDZSRTdBUTJuRTFOeldiVEQyZk1vUHRhdU5GOGc0TDR5b2tGdjRpQzlUSmlkM09tNjZtdXpTYjc2Z3ZEYVZVOU1VQVFyYjh0QjZLaVJNUUNLZ21ULzc5SUlmSFgvTGpLeWU4bVk3ajZzSGg5R0VIMnlEY3N6RVlTczBFczUyWGxGR2ptM0hIMUJpSm0zVk40Z3RjNnBWSXRJT0V0aXhMNkw2N0RGYkdkbnU0WHdRMWJwN3YwRHpuTk9JSEZiV2o0djlBOFpQdXZCS1pOUnNBVzlVMkVBN0pHWE1ZcTRVc0kwUi9OZmZnSzF4N0tDZ2ppQSsrOXd4OUdSQ0RYY1NkWDZ2R0ZlbGRhR2lyOGt2WTc5ODk0dDc5YlE3aVJzaWhXVVduT1p1M0JxN2xtN2xDdHJoWnB0SzZoRUFZekFKK1FpSjJRT0FockhNNzlKb2JKV2lXZ2VmN0RnT0lZUmhQL25rTUE1cmdJeTVsdG1SWEZYdGtpejZRdzBPWVVkV0F0NXplLzFEUllaVDd1cllSYVUxeE9XUUFkSjhXYzRpSzV4aUpMM244aGNReW5XZFM0UFBUUm9JbE92OGRkdWE1elZaanJMcm1wNGlYVlh2WUY1bmxuTVhXUVdMYmY0aHV5Z2hqZC85RExQc1Zlb2JwcE5kZEp2WHFMYUh4eEpnNEpjSTFCTFYzcEtrWWpWYzRNeU50Q0t6UjlHa1JIbHE5QTQvZVg1NVhsNjUwS1cxaEJsOTBnbXRQN3RLdE03ZUpLbUo5VEpidjBuNkQ3bEg1U0UyVWpRNkhvK0ZvQjE1TzZQQ0RQYXlycXAzYkJ6aHgrVFV6QXY4MVNuamtDNEg3MjIwakg1SWFRSG5nbGJMRGRxd3Z2WUtFbHhPWVoxL1VoeElFOGF1VVBQblFiaHIxeDRlNnhsSGNrb2RIOGc2QU1LeGw3YnoyYkVJMGxXMTRDcTlGb3dBazFQYVJta3dvNmlITFF5SWxmNTNFeW9TRFVyQmV4UmRYL3ZMYTFDdGtZQTdKcnZwT3VrS0x2U2Q2TERUT1pCQlNqYnhkQkd1QktuQ0l2cVplV2VXNWpsWUVYbjAvR0syaHRjTTNpNjV4VGIySWFCVlFlYTZVTTVRdkxMWVhvc1QwdmZ6N2UreTVRZWxFbisyT3lCTnVxSTJKSUZKbUFjK29Dazk5SU1tZXlXb0I2WUZFSzFPSW9sZ1ZJNE9qSHlZNVhkbkdFSmZGY3gydk9EaEFWU2d2T1ZEZUROT1hxb0hweWlSSjZOYjdPZnNZTEh4YTFib25EaG9acW84dTZGWjNiVCtMb28zaWFpZmN1VytMeTdsaytkQTd5bXZoaGt5SmZRdXRKcmcrb0xZUFRNcmpHY2s1VVZSWjg2UkszMlhrVnFNcW9aRk9nakw0YmoxeEM5d0pCdGowMndFMlpsNFVSR3E3WmRtUlBZNmRKS3NLNGtnQTEyY1FqUDlBbjhlRXZvamxJN29qOWFPakhXZjVTNUt3Q0pPM1E1RThzcXRmNWJ0a3JLQU1hakk2eGw0NmNXWWdNYmZzWU5yNXJibVhNUHZQQmV6bkN2OW80VmFOR3NDd2tjWlIvbW9NNWJMZEpiRHYwbVUzdmUwcWpwbzhRVElZamgyVmQ2ajJCWHp4SytCMlZTZXQyZXlmRTR3bDNjRHBsM3FxbjJWRDVJaGw1S2FISlJGdzlBWEMzNTVFWVFLQk1GZERyOGdWWnRPak1GK05PeWhOZGlVaXRBcGJqdUU0eDFTc3FUM3lFL3dyVmRINXcvV1lvUUtleFc2UUpBRWJUSEVhSEluNjFmR0hJMkcxZW96cmhibWZHRUZuMS84TDhIZVNJRmQxWG5JME5wbEhhZkFZR1E3WlF6dVdQUUMzbTIxcTRSVmNtb1pwRGlxR3N6c2J2SmVkUjN1Y3JMMnJ2bFVTcFhqYXVoMFJtelkrTnlkNmZJMHBmdUN0RzNZNmdUN0dZVTZjcDRZcmExYUNXQzZIOEwzZStMOTI5VUhFd3NlZTFEVDdtdjZqd2FGakxXTURDMURFdmdTcFBVTjNoMldDYlJVQU1GR2YxVFNYYmxaOWxmOUFydk1SbUNyaWhBdktPRnVkZ1NCQXYyYjZXS05YQ2tieUZ4ZUJ2RjZHOC9KWUpqM0l4M0pMSkZuU1lXVHkzZVZDbk1ZYjdKcm5neFc1d2NPYjE4bDk2dUVmMThkaUxPaGhUUlZIZG0rMWFWanBGMXdyZFgxb2pnNHh4RmxBQkhqL2VTc3pkdkNUbGd0Zk1zR3FHbmJTV2FVNkVwTDd1YmVKRUlvTUhQMnpPVnA2V3NMRUNrcUpEWWN5ZllyVG1wSy96VXp4VTc1VHZIUXFUc0hxVlR4NXkxNmp4STd5cit6dkk3WVN1WHdhZ0IzVVdOUm0vSTB5aDBpWW9RVDRLaXVQb2FnTEpRcVZtM0lMUnB0ZFFoRXhOSVpLZDl3aCt0V09rbGhkZERDRlFJeDU1VWcvUGdsSkNOVXROMWxNVWI2U21kNkd2L2g1Y0xGdlpqMDUwei9jMU9MaWJzaDVoK1phSDFONjI5dnBmS1d0eDNFVld3SE5rMEZ0RUJyV09PNTdmZW03VTlzWHB3TG5qcFpJSEhRdE50azhVV09WbGVMQmlCOEZ2eDQ0VFRIcXdEUTBuYWpLMDZxYkkyUHMwZS9nSmhvRTJUbE94czV3VGZncFRLT29zL2dsTFp4dGJkUjFMU3prUnMvUmRqOFdMNUNRbnpUblRLQUZFT3ZIWWpnVWZQRFo1SmhZTEI1aTlJQkNObVY2cXRqZUE0M294RVlHTXROUVNyUXFPSllTUUVZYlZWQVVYR2hLT25URFAycm8zSTV4Y0VkbGtHZ0JYQ1NUN24rUVVINTNhbGpydXR5bm5uMzV0UUJIZ3JJTW44VUdMeWZvS29TZGJFelNMeFMyUUgyRXZwQUZ6YTlNNWJ4RVJQY1N5bHpVNVJWL3R5TWFZYjRnRmRQdkRPQTFRSTBMSzRSVUxRVzlzTGgwemtJdjBrNjR1TWc4aTFFRy8zWGxQd0dYeG8yTVc2bjJTdFVkeGxXR1VDbzZreWhzb2ZaY3RGbk5NRk5UQjJHSXNralVBOXlhVEJzNXYwanZrRnIyTlBtMi9JVmJlZ01CNmQvOGNWNGtObVhlT1hpK0RGL3U2Q2NMbzltUitFQWJyRjhZeHZNcDBaVHRIVWJJVUkxb0ltMFhOTExRejIwUnNmbnFoZnRDYzVFZzQ0NktBaW4xTFRPS0c3ME5MNDlyT09QK2hqNjhrZEw1QTJIajBNT2RSN1BSRzBiY0xIWHZWekJvVWJzUm4xcWN2R3IxaWMzVit5eGc0V3picFp3U0JiTjNrQmIyY21TUGlFdjZOcUduZzRpd0RLSjEvaWpKNWxLc1ZBUVhORHV4aFp0Tkc5MFBIQjBFaFJQTlZjeTZ5a3lUT0tZSzBXYjlLRXFheW5RcnRrYzVTdkd5eGNOdkZFZ3VKNmNnSk9RZDY3L2gyaFY1YW44M1M0WDcrTWNaYkdDMG0wbkZUSUswSDFBNXNHMkxiL3JWVnZPVW9vdHBWUmp3T0I1OWZ0WDVieXdYeldBQzVUR1JIdVhCRy9UM21FNXJHSE84eVBhYitUN09tR3A4ejI5MjE4Z0FTTXpzZ0tzUEFlYzF3TzJvVWt4MGQyZU5ZUWZJNHN3eDlIREpCSHRwL2trbDZ2MFR4S3krdEk5b0wwaHZ1ZC9kVElvU3pPczdqNXI2eU5neUVTVGpVYVovSFUzMjhyNWxRVmdxYTRodytUVGtVdWNxVEp0QU01M1RMdHgxcjhlTWU0cHBUWEZFdThuZmVmOG1xNlU1L0V5dWJzdXBhY3BrNUtoTjdCUEdjd0pIYU5HTXBWSnI3VTVDcXNiaFFhcTB5UnB6WWI2dmhLQ1pKQnkwUUFneTgwRDhOQkpWbUc1SUh3L2JQWUFSMncxaGsvMHhsVHI5SnN3bklYQjk1dGU2bGk5RXYvakx5YlU5KzFPcEFCSC9CeGJmckV0MVJWN3dGT3I1cUsveHZ4MkFtT0ZwMEVidjcvdVNoYjIrSkJLMUUyakx6RzRQRHZzK3NEZXdudEtYc3IvUHByUFdlQTRPRWtyek04eXI5K0YvSjlMSTZRNysxVnErUkJ2WkFWanYrV2ZqWFIwNU9pcVVnZHlxbFdoN1VSN1RKUDB0aDZoUHZFblpZVFhCRFBDUUdndTRtaHRBVFBRSDJkSWN4MW5xc3h0M2QwT0x5L0xIY0g2NmJuVC9nUGNBZXVEaDhuUHNUemFGQ1FoNmg2WXZFM09SYkRMcHJQK0QyNlRjWmxuRnRCSGk0MGNzZGJjY0JVeDBYVWEzOHdQdW96cmp6RTR1Z0lXMTBhQlRxS0c5Zk5mNHhBSGR2azVUYkhCb291WjBHY1V5Sjk1MytNTVZ4NjFmTy8xSVlwV2g4djlYN0kxUzlTNE5URXY5VDErV0h6N2NTaTdMamJNWnJ3LzhpTVR2L1ZzekQyWm9aT3FpYnBidnpjQSttTXBSMmZIWmJOV055YU9peno3MEMySVJIT1pvTUYzS3lkSEdPU0dMbHdqcWR1a2NSOVRGV1VsVHFYcUxibjBjZ3RSZmNmSnF0WEZEWGV5dFp2aHBkUi9pOHJvb1Z4RW1UVC9tTzFUbVNKVS9HM2lVNE1COVRlZDQ3UXNQTHlYcll3TUlxQ2tWaGY1STZDdExQQ3llRXlpWmtudkJrdzlSR3gxbFI5c3Q5VXp5NExVSVFKeVoyZFZvTFNMNjAzTkM1M3h6bWgzaUJSNnl4WWZTS213ZmkxREdIQUxUZlRvblNCbTRWeHZpNHpwalpKaXRLTHJpYytpY2ZXMGx6Qjh2NnpaVnpvUHUyNWNHTzlacjlKSTFOamNnanZPalcyNEduWlNQeTAweVZvcnRSeXZZK2p6aitRZldldmx4Yjg3bUFna1pRT0YrZ25vRXNPak0wVFpSRjlOeFNVaXc1bHJEdjN2UlVQZ2xyem96TE4wZDVTaXRkbUlIS0lGL0VPWGxXdGhLcUVHNllCQVhweldCZUFMUWx6SE1VSFkxdWdERFNzeS9FRmMwTVErVXJkZkloOWNQMDVEYjJHOTVVUm8rSlhHNEpsOU1UU2dkUDR6WVBJMkRhWkhQbG1ZWHprakFHODJhaE1uMXdRRVhVaXcydE1LMVJQVk5RVStsV3V0aklYWDhDcU1aMHhVRWsrREw5MGNmQWpuN1pLU1Q5S0hOZWFCaWJoaCtUcjByNTBCRUthdkd0K01aVHRQZnpTWWFRa3VHZGQwR2Rienh6T0dvVGMrTVdZOVF6VlBFMHovQllidGJOYUVMdXdXdmhjZFlUZnlNWVkvelBHU09WTGp3d2oyUHZKQzU2M1hrdTBFWW03bk5oUVUxTGtyNnNCODNHNEdXL3FRKzZ6VDNsbmR0bCtYUkVETGVKVGpsUWdnNXQ1MXAwM3YvTkZPeWNjV0s3b2MyZHB1c3dER0w5bkhqbkdrSXBKOU5zcllZbXU5RnhlcGZBRnRML2NKbW0yRk1kUjdLSEJDNDhvVkFWNXVOWXFYdWJMaG1QRW9vQkhNRmMrWWtmazBCYlhlTmlObmRCdERXb082NHcvVGUrV0l5T1JVNzJUSFNPNEw1QklHdjZ5WU9wcitpR3g3bjNOVDF0czk3VElOVTUyWFJMRktxVDBzTDhXcjNKVktLa3NXQWRTanZidWlWT2l6VU1QM3VCYXhZNGFnYXBzYjd0eUloOVUvVHpwMzJ4Rzg0U1gwNG5iSlpZNGo5ck03TG1iNDJOK093Q3A1ZUNsN2xNbTFDdlM4ZjhQdm9hdkJ0VFNKcnAxKzcrSFN5bWdQS1Jid2RvcCtGSDlFV0k2bSswWDMvS0xTVVhYVEg0N1RtbHlsTExKQ2FFUVpMSXBuL2dPTzNKK1BhcEpMNWtYKzdjakxWTW5lR202WmJvVGtRQUZDU3JBUVdWNFMrU1ZFaE5Kbk1tVVk3UWZ1eFNLYmpyVVlMWVFYeE9HVld2bUh0dlM5ZEtJZ2drY3BLR0hLZWZJd2NpUTMwOHZSRWhuRDVnU0YwZkhYOC9UMWFkK2QySjdpK3VnbE41dFJleVFZOTJOVzFsU1BaNnhqNE01WHk4UGg5NXI0UHVQb1ZsbW5GMjhVaTVqblFqU0twWlFLMi9nK2kybDR6MGNML0VUV1lnTFZXQW1Idk5iUVR5dFoyQkh2ZGNDTnBZQzdiZWIyOUpFS1JDTzJ6OFd4Z2JDWWpoZGZNUUU0R0dFVkliNDE2eElDbmNCT25QeWxyVE91QkM5ZHNrdmRIeUU3TDFxandKalZhMkQ5enhZTmRZZXlreDR1am9oYW4rd1VCcGZNVkhOZmk2UmdPbEVFSjl2a25hWDVhZlMrY0FlL21wWkpHd0NwQjdWWGZhUnVIKzZPcEdrYjZNYk96b2FIMlRoOC9LUWxwS3czS0NPb3NHUW4xMEZ2aHZ1QVJFOVBXd1A5Wjlqa21LUWZCbUFwMnlOYTM3NERPVzd4RTB3SUkzdmNTNmJkNGUwVE13emltVE1iVDZUVUVZamc3YWpobC9tV0FlUXovZEs4VW1xSURxZTYvOUgrUFlpbFY2ZTJVeUJqeHJVYkFxalJyU3R5eWFYd0xRdDBPbmxtMzNmZ2Q0Ull2VTNndjlOejF5cDd0QWNYSXAxR2lPUStOOTA0Vkp3L1k4a2hFeEZYVjdEWXlIV1pkRGExUmY3dmZzTFBLekRjZXF6bEZLMVdINFd2aSsvWXFaZjV3Nmg4KzRINWM4VnY2bXV1K1pUYlUwdzF4SnJUSmtoSkc4RmxoTFJmajJjbGFUMnhPdG5xTnNadkx2N3l1WS84Q1hzQU9yYjRwbUhxSHNqZ0lyS3RxRlI1eTY2aW5pOHNlOHRuNHJSc2ZxNW1ORDVPVmhyYnJwbmlweFR6bjV3K0hsU2RMU0hhWGpZTnRnVlNOMFBmWm5tc2t5TURUVnU5TE1ZMmtxTEl3c2doZ3cxMThTc1dNSFpVWVZiUmlWRjFDNkQ2a1kxbXkzeDdteGRocFlQM3FKbVFqU3ZTZkU3ak5QZnVLRGI4MnhBM25DNXk4SVdQbzQ3QkJFdmtCOHlwcDBWY1pSdElaUjc2b0RaUzdxRFcxUFlpa01wM3hYaWZSYzloWVNzeitaTk5lT2NhWTU1eUdtSDAxbVN6V3YwbmNTWkVranRhTHF6ak1yd0NtZlhHa1EyK0hpTGVPTWhkSGZ3R3BxRnJhM3lkdVVyU2dWMmhWZ25nSjhGaU0wQiszWGpVTm41Q1BFSThZcitkYU5DS1h0c3FzaXF4MUw2UjRZc2txM1NiN2M3amVXU1gxSFhkeHZ4dlZDVGxrTm5UTnBqK0ZhSktoMGJPR3dqaktWMXBCOE1CYzEvc1owUnFzTHFKdDVsN1drSXh0MWtEeGVWQU9tYjFUcTFXa2hIbUVPUDdZQVIreW5ZYzlpaXdYdGZseDJBU2FhZUx1SU0xOEd3SWNrVk5ob0RJa3VnNlhEVGJvY0VhZkZDbkl2TkRKbFY4SksvS0p1anowV3IyWXNEN3ZybHVxSytGN3UyTU42QXgyeTZsWU5TVzNnblpwYVFNZkFOaVlmRk1xSjM1WUQxTGswSVBSRThFTmtsMUlrMEFuVk1mQ0tjNmYraXMxc0t1RVN1d2luUmdhU3JmR2RLRGQxVDFkelg3N1E2K3FyY1d2Z0NjY3d3NytiaURHZFdZcmtvNGw4MDBjZ1pvQy9VaHM2T0huYXB2WGM1QTNRcTF3eVgvMUE4WWRzK2d1eXR0SitGcHU0S01vdFhJYzVjYzNSK2doSDJNMXNydzJZQmRlUzNCMXFYemFseTRNa0wwblFlclJyYWNyOW5LYTdtQUd2QWxiU3Fsc1lvWXh5dkF6cVRVN2YxODNWbVV5a3B1UGVvdVA4S2RhSS9nTGd5bUVJV2JDV2IycDhKQ3NwMHdTeE5iUVBFMk1xM2c1VG41ZlQyZnpaTzlUbE03NHNPQXl2N0NNVjU4aXIyaVpyYlFPRXJ6djJSRUJMa1dhWWdtRytuOUpRaFlaVEhSL0puN1Z2R3RwbkF3MDhuUkowd0Y5SXRNUGZVVVZMeXFORWJJYjhKdTFiVE05cXVPL1k3enEzamRMT1BHTGVqdmMwWkRVeGxuTFpvU1dsWWJEbW5xMXlSREhLb2d5NGJpeTJCaFVDSDQ1Z0Y1aUxwd3pxdEtZYUZzSHp2SjkxSlVaWElNL2dGS3VXRkFqL3pzMlF1bjZYTGNRbXdaSzhIWnlUYzhrTnZ1Wmh1ZFpsYy8zMU9zWVBBT2hMbUY0dVEzeTFXTXZYVXZ4V2lPN3AzSDZWQlVRcUplb1FCSDZ2UzRoZjYraElnMElDbVFIMm5nVmxobG1YbU5OZXQ2dHRMcW5PTFgxVnBnaXZLVnh2aGtoalMyNVNrOXhVNk9NblVZU3VpSWhudFJydXBEamdRWnl3M21yaHRKclJuNXB6TENob3pSOEpUMnEreDVTenVaUllnLzJoUDlCNEs2MFVPVHFvY1d4NWllOWJhZE41WnlzVkZsUXVVUzNXMVpEV1B6RC9ZcS8yRENhRnBKQ29jOE9wMExZTHFodXNMMzQrVk5ZS0tVbGJRek13R3pRUFRta0txaGRxMmlLUG53OHV1Q2l5NDZ5Z0NTOGlWVWEwT293UEVodzNKczJuR0R1NWZHdGJSWkRvU1ZESjlXclZwV0gxZHVUS3U5VmNwK2lzbkw2V2dzTWkwaHV5dUJ1eDBoOEc5d2tDUTFwTzVZK2VKS3Z4dmVKU1B5SXlZSHNuMlhOcTVtRlBuVVFHZDQxakVyczhvQ0x0TFFpVEtuTkE3RW5wSlFNSmN3S3FieWV5Z0NqWjFFOWc2enZ1eTV1Q25SSTVOcG5acjdGTExhOTZYdUdmTzE3SHNoTHlCSjVkOWlSaHl5YVplckJFYldzZ1lYcUd1c1czUVVlc1Q2UXM4UVJSTk40bHB0MHZucDNJckk5anM0Y0NsKzQrZ3lMY2s0cktnSXBCMENMNTcxTnI1emI3VERSYmNkWjZnMExtY2RrWTN3bXBrNGVCeW04LzFOWHdZL1p3dVhKS3RBb3Nid2lMTWt1TGJzSnNVMEx5YWo3a2J0bU5TNlc3aWM0ZFdMK2l4UllWbGtQTzFQMTdrTDRNQU56SzZYb0Z1a1JnRStDK0tnUExxcnFBZmdIV2JsM2twYWZ3eXIzMm1GbkI3VkhVNHlmUkRQZHVoMXUzQVV6WmtkbkZvWlFYS3Fla00ybHI4eW9Lb3VUNXBxdmgyQ256MHFMSFJxVkdRYkMwazdRZDJBSlJSZ3pveUZkTWErQU5KUHFJOUlBY3Z5ejhLWU85ZTgrWEg2MUdONTN5enFuOWdiUDFMQTErVjhBZUpLa2tRbS9LeXZzUzFJbE96VW9nWXdTeTVaWTJPYmdPS3FRc043dGJ4NU5ad1hhdTZLN1BvL0R2M0J6dzV3T2VsNkFSZEpjQ1ZhUzJYRVMwOHUycHBxVVFPSlh2Y3RnTk94YXB4eU5pM2NPWUtRREYrR0hBeE1rL3dRMWpwTEhseldJUndSR1hkUjVnUzVKYm1ZSHQ0dWc5T0tkUk1iYXFjMFBrdVhYME9UODRUbGs5R3FzY3dsSkJwUERiWm9GQlRyaXB2d2hJNmVKZnZZWnk1LzJqUmFKc1JmNzl4cHM1UG9uNHFJNHR4RFplQWxxYzFHT0dhSC9ZN21sc0ZKTHl0WG4yTmZ5QUtIRUxNY08vaDh5SjAxOXJGT2Urbng3ZGtQNnBuQ2ZJbGhzS2cyQWdqd25EWXB2bE1lVDlIa3duMmY3SGkyQUsyYlFKdkhqMUJ2QXUraWYwblQ3K2ROdFpJM1k5T1NuRHZoSVNFMHkxWDAyMm96SVNIQkdyVmI1elBuN0NiUHFtOGsvcEFlTnBqMjdKL2d3MkRUdHJOTXM4a3BlTEpHVlRHNm92bUI2VFNHL1ZVMFdiUnY2QXQ1V3h2WXpKdE9PYVFzdEVDNXBBSVF2M2RPVHRmQU5HMXFBZUMxRjlyYjVuWCtQejNyQnAzYy9DZkZjclNnWjJQSGFjSE9NOWtueks4U09xcWxQRkNvSmN1S3IyWkRMbDBCQzhqL3NCYVVuMTdZbWRPRCtHVUR5NGt1ZDRiVTIvTXNRY0l2eE5uQVM0aW1pTmNpd2w5TzhlQ1RlUlpHWi9WRTg0WHh4ZkQxQkMrNDMrQWYxK2xuUk1xVjBtOWhkeDY4TnFOWU9udyt0R3pvK3ZQdW9hMTRPN2tqY2UxZWFFd2ZsdVhOaGEzMUdIR0Njbk9DbVllZDdwSWQ4ZDdSRSszQ3R0cGk0UkJWcFo3b0F4T1lsS1lCUGJKUFp1NWVEdHFSMThqN1B4ZHVBK3l6ZWhrSXdCTzFpWVJVQXE3VnhrWC9ITUJDd3crMmdzM25URm14V1NQM2RaazZGRU1vRzZpSDRSM0tGL1V0QWk2RVVqRVVGTjhIYjRaalh5RmY2L056VktibkVtd0thbXJ6OGRjdjlPenI5ckZnMG82QjRHalBTRGZTVEpxdHBPa1NNYWtYNE5JeHo1c2Q0dFZKdzBvSis3cXBUdHE4T2ZyLzFUa0wvTlBrQmJLTkdzbEpSd252U0ZNbDFpeFBDMm9QZzFVRGtzaHMxTTVCSlpNbDJqUlp3bU9WNEpMV3ZFaUJBL2NuMDJJUHpLNGw1ZUJKWGF0MDZDcHMrcFhMdW5YcTlLbzVIRFRkK1BVM2dJc3Q2KzJxUXVZQTdVODYyc0h5NEp4ZnR0NWRFTDh6ZlpLam9YMVVtQ2k2UFRBYjhNZG83UHcvaE5QbDVqWnYyTEc5Nm5HeUltRkpTaForMWM0c1Q2TTdNaldqRHpnVHlyMnRjakFMODhrQzJFTlRDSnVNUjl5ZUlXOUt3RExTUlRYYmdoY2N5N2NVTkl3SHlHZEo0U1pmQ2wxbFJKZ1J1dnVuc1FOUjRSUzVUMkVodmp6TW5xZTNrVWtsY0F2N0xCNXByai9IZXBoSm94OEtNa1JRbXNlU2wzQjZZUENyU1puaHNwM215OVN3U1F0MEgzS1hPdEpLU0dkdDFlQ2VoZUg4UkczWTIveTRKaXhJb2VDcWN4RUcvNDVob29oUG1FOFVoR1l1UmJIRWxLbXA2cEs5eHNqZk9GNGdabDRKSmJ6YzNnSUNxdGpEMEY3dy9TSGJwVndIYTgxMWxDKzUyYVZxalJ3UVRYVEF2eHc0STNSbEtQUlplUnp3VGhJajd0Nkh1S2ZEbTdVaTczeWxQWFVZNitMak5GM2JRckxFMmttMlZLUXc4NFByUmlRN0k3WEh5cXNUWW5NdG5ZSDQzYVJFMDJrbXI1b3RFR05vb1luV01aUVRISWNiME9ZTU9qY1JUMzI3TDNwNlhwc1h6NmVTdzlmOXU3N256Qk12L09raFcvZ0F0VTFBTjZ3WmgyVkY4R09UZ3hCbW1qVjZoSzE1T0l4QTZ2ZkZXRzBLSGxLdmpBQW5VRXd0ZDFwV1lXRGM5K3RrTTlHMjJEQzd5emZsVXFKVFNJVWNhSjNtcTZ1ZXEydHUzSmJ3ZXo0eEI0ZWRRdlFGZ1J1K2w1VTk2Y2RtM1Jhb0dyQTZZVk5lK3VEaGJ0cUk1bklXRS8zay9HUGdPTmpoVjlZZW9wYkEzWEl5T0VtZXRwVU9ZQkdDcUR4VDZzdWhtWXJRcjVwTlFnV2VMNXJvNi9qQyt1alJJWDRaZENSTlpvWHV2OGtVVDRYNW5QVU1DamVYb2pzYVBzaEdMVWxXZWtuTm9pWkhXZGtOZ2lFVm50TkZSek5sOXJlQ3llUlVZWTRDQTZhTC9ZVEE0MEs4eDd3aXhFK0FLcGlmSHRqQU1uN2pCL0xyMGFxZ1pzV1lYajk4SVFLUFo4cUhKRTd1RGFNRTJGWFVRRFp1K0czbkdlMFJBaUdlT0hlbXZaRktQTzFUcVNiSmUvRjVsbkE4Y1RETE0xSFVyTGJHc2loSUtEUFRPeTM4cE9EcmdNVFNaKzJra2lmcjQ4dFZBeFNWbmFUT2dwYmloS0czOUppMmxLNThJUFY1LzBpNXRRQzZQbi9rVXlXVnJwTEluVW5IbkJucWhvMGhRaWc0TTFJdHJzSXpmcDZGenhTWHRDYXBDY1BCMTBJN3hRSldVb3BZR3haUnF5bzhFRXFmcWZJZWpFbDUxcTh5SE9saU1uUEZwOC9ZSkVMVG5ILzJ6c2FkNTA0TFoyTEcwTkljR3p1Qm01anlYTWJqMFdubEZtaytGQkVMN0Q3QmhLWHVlVWdBN0NBWEt0YXp1ekF2QXpSQlNCRmVvUE9GbWovOFE1bmErWFUwY0NsVTlOMi81ekhsWmlkN2wyMG9uc05ETnRNQXlBanBEZnpxMG9iYm9INy9pZ1RIMDBBdHRuYnJYTHpSSjVhS2xnL3QzUllPNUZjWEpPNVpIOERXVWYvOFByTFF4TkVqQ1ZnelRUMURNVFV1aGV6bXJIVkQ3L1dYaVlQR2E2SGZWZ0p2WlM3S1A5d2JaR1lFZS95RC9MYWZNTlZ5akRaOURZNmdFS2lYWVhjNUxaUXBJMU5XWVY0cElJa2xOVDRtZHdFNG8yNHNmaHBEeFNMekIySnVPU203dk51a1RhSzRVM3ZiVGNNMys3c2RVckRPUklNZ253TUVGVVFmelNadXFFUVFBTm5teGZCYmJrVHdXM0h1YmJ5SnZSUEJtNkNtb0w1R1ZsOERzSFhvV29raWIzcVNUSE9rOEljWlVnVjhkZEQ2aS9URVJGSzlnalRHMThMOGRqdSs0eDgxVkdpY05Kb0tGcXY5ekNSTUdVRU9WVkNaa0FwdTBrOEovVG82Sm5BbzI4UXoxclpCd2s3R0xuRUVEcEZEQS94ckx4NEVjS1pGN29ZSlhCTGN3NFpJRVAxNW5icVBnZm9ueHE2ZGZsZm5OQktrZkJMZWNoa1d3cWZFK3dVZnltbW1WS1BLRVV2c3NyZU5QdVdGUXZxODh3Y1ROQnlCdGM0M0ViZWFOYi9OUlpya2Z0elRBbHgxc05QdllsaU1qNWowTDk3VkVHNitVZTF4YUtWYVZLblV6NzkzVTBocFpmRVFBWVpKS1hlb0dSbkxNWWtvMDNWVGtnRU5zVkoyWkw5WHlpd0dUS2JYSkZieEJqdGVmcFVSUE9WSkU4bi9wNnBQZmhqeTdWWjFDSU1CYjFtald4RUIyWVgreVB4L29qQWY0Sk4xcS9rZ1h0R2xRbWtDZW9STm1oUlFEWmlGcUJsZDUzMkEzaDdWUGUybURaa0tXSmxlV2d1WEg1bDgzNFZJcXkyRXJTUElkZ1Zva1B0aEdxalJZejRnYzlPVVp1cjR2NWk4NFViRUREVU9vRm5lVW53Y1dld1RMVDU4VUJIZ1dPY1NLK2pKZWhpYWc2aHJTSXZxdG1OVjduUm5TL2lOcWl4Sk1JdWtpR01VVTFyMkhFYlVFSVBpdDhFM1VlVVdxRE1OY0hSYjBDWE9PdGRZUFhNYmtZZHY2d2IwWUx0clU3dDR2R1dMUFcyWVhobWR0YkhtQWw0S3dRYUZaaGxsdnc2OHovVG5VN25DRzFUdGtDQzdna0FCVVBCRTZJODBmbkRrM3kyLzk4c2oxc3dqTUR1Z1VjR2NFeVVxeTdBZ1JLcythcEpiNHE4MXNySFNGd0JXZElYdlhDVTZtNkVub0JvSFM3NjBIT1dsTlNnbXNpSzl0OGJsMVpWdlRQM3RZSkhXNW9ndk90eFk2aCtkRFlPajQ1WkFNYXY1RFd2WWlIMEZwblhRR3dZUGt4ZU9KSERLdG03OGhXMTFrMDVKbDBtK242RGoyT3BjWEQ3aExBOHVZMEk4MjVIOVJ0Qnk4NEVCMVplZExab0hVQVF3elBLakw5NiswbU5ncmJCcW16VDVqOXdCTDJPWlhiNlFGRFcxSHZReGRxTno1ZG9HZ0ZuRGFJdys1VGV4REFGWWxSdG1Qc3BaampSWXhCWFVNRUFReEZpcFpTRVYwMEE5TUZRaGJJdTNxNS9ITmxNUVpWOUZHaTltcS9hZm9UMldLY25TWEZ6aEpmbmlZWmI1Snpkc3cxSnFEWTVoNTZpSnoya2VhaEQvUTdTZVVDclJCUHB6a1BMTU93L3hMOGdvNWdoWTlkampGa0ROZEJiSjNMN1p4Q2JyenNZS2UzMXM3Z1QvNW1Iay9sSU9hejR1ZEFZY0U5Rkk5TjF0d1JUSjlXTWdXMlMyZkNzZUxqbTNlZGxEeWdFR1UxTi92QTJscG1sbWFON0J6d0toYjRmQncwNW9RUkY1Y3h3RjAweXRMMEdpblJQTjFJcXBBVkdoa1BpZ2J0VEJpeTh6RWJwcXQ1N2V6cUZtZFVXTEh2aVJ0NDlOdnc2OFNQalZTL3pjY2dvcHZUU05Ca1JKOUJiaHRFZGpDNUd3cGkxOVVBV2RjUEl3SjVqSGpNZnR1VWVHMFV5bFVBV3hFdy9HK21uMTREUmZCUTRZNG9PQkhvVndFdkN3TmpPVnZVRXJUOStZaElsaUIvRWxKMi9iZjlBcEcreVFMUUMyTE4wME1FeE5Xa3JtWjBYSjVPODFoSHdkMDJkTGhTNGx6QUtCdWJDMS9kYitaTXpyUDNXL3IxN3VWd2lpL2UrS01Kb2JublN3OTA0WDYvWGt4VURuNVVieFRVZ3hWYTI5Q0ZlaFhiNitpT2RxWnJQd21UbW94WkQrSGMwN3BCblBJczhRMjd0MUFrSWlORTNSSndhY2MrbkNkak1PZWNxL0tGZHYzSTVNbDBtUGhQUUZyU1d5SW1kTXhSclZWSlZhQlJ4Vlc2Slk1M244eXdJZmVhRk40RVo1UWpTN1p3bStzSThKY3NGSm9BbTFCb0kzUDg0Z1F4ZGhiU3ZHT3cydjNCMWMzUE55U0srVFR5VW5BUGpKdHpZTjBtcFBZUmRQT0lEZHp4MVN3VSsvUTZnUUpaTTA0aU1wS25ncThEUGd2U3FicWQxRm9hdnRoWXVUYUk5d2tqSE5MRUlQdWhtdjdBcjhyaCszdkxOSFlUWmtWRmRuY2luSHhoaUZWYzdzQ1BZNko0TGFLRmJxOEw0OWY5M1pRd3BwSWh2NnF6SUl0MG94a0pkTzZ1bThCYk1DVXpRcDUvY0g0c3pGRDRUUjMyOEtXR1RkR1Ayd3N3MVNuSXNiMHErUUtreWdEOGI5bVlwZmZQRzUxUjd1NGZha1BjUjNLZyt6Z1ZOc2hoTW16VUVDL3gvNCs1L1lZdXBzR2owMnFtVVo2MnlsUkJ6am00eFpBZnU3UUxBR3hheHpZdzVwNW94bks3Z2lKREcydC9VTWsyemg3Sk55a3lOTGc0NGZrYUlJd21waFZzM3hBUG02cVNOL2RtZlN5S0krVWVqUDlBZVQ1RisrandKL0EvaHJsc0hSK3pNbGdyemRMQ1NRSjVYSFdHZkhNTzVWckdXc2pWQzhVRk5nazRmZ2tvSXpxU3gxS3oxOFRkd3Z5WXhTZStUZWw0LzZsK1JYTFp5bVB0eVlWbUxmaUFKOU52djR5QkhSN1VKU2FZREQxaUNUWFUvdHBvcWlMTXRqTVltQk5tc29hTlc0RWtxaGMzVlp3MnVuemJhVjZjRmdscVVDcU9IMDZ0bWZ2RW1hbG4weDJVUzlTU1M1UENDemhyelkxMXFWdml0T1YrSkhld1NlM21LbDN1SjJ0eGc2emt6V1hrU1lSWFZJelNCMU81TXBWZmpQZFFsOExWdVZ5R3ViZUI0dXZ2TFhCUi9zYVkzWFlmNDFnUUtrVkQzQTVsZldVNldYZTlMUVVLUEFnNVYxZExDWGZYSE5ZNWlaNE1tM3JDdHVkMXR4eHdPNHV6Q0pVb2VGTHRNaDlFQSsrZUVaQ0N3OVNEem9DakhpWlllOGZzc0dLRWc5MVFuZkd4aFdGN3FaVWdTZDN6N3lDVUJWa1BYL0V3aGNYRGFPN0VUbDV2eEliUXBaRm1yQUJxOVYvMWxNT0tlZC9MRWtsc3VRR0xKZ004c2F5VzQvRytrYkQ1SzczYi9Ka0thREVRcE4zZVRIaVBZaHJiNHYxNEdSUE11N3F1WW1ReE1JSEpEeHNvbzV6b0x0WHdrQnM5TFhqK2IrZWZ5a1JVc2ZuMCtVYitKQUlEeW9pM0cvbXhCSHZUOGhrN0h4RUlyU1I1UzBFUm5rR3RGYnJTWHlkVjlIbjNXdUxDcHhQVFpCeCtRVVU0QW9CdnJsakt2ek5vQXRzNGNvYXhQMDhsNEljbEpjZW94ejkxQit1dDliRHBBUUoyNDI2K1dzOUplb0U4ZmY3QzkxbndRbHpaa0w3a0REQlBBTEJRMlEwZ2pNSXhsS1ArT2JFOU9rNW0zZE1mWnZ3ZmRhZ1VTV1RSNitGazNhMlZ3Q2RCRXhhTEpWNk1Sa1BPNnBhTVJDUUQ2UEhaRHdLMXVnZHhBTGFlNzJHb0VMT3paamR2akd2YjZnMVU3dHhxK2E2Nk1iaTBsWWE3RmlIQXNSRjM0WmFGL0lNYTE2TGZpaUNhODhSbnhNZEtiNTZobzNwSXk4c0hUalZDRGlYMlh6WGJ1NnN4MWZsb0c0cGt4dk1YVGZwMXNCQ3psQ1g0ampLZndNaHJqV3crTXBCU2YxaFpVMTBIZU1JbHBZeHRNclJNY0NzSTMxd0RvcmpIMitTY0JNeXU0Vi9oRUMwZEg3SmpESCtxSmZMd3NzbHpkMjdBVEFrNE0yYnkyc3hJU3NxZk9mT2hUMUJSdzdCUDhNS3RoMW13bzZFUDFTMFJWMXNFY2JaeThlVDE4RWExVVRLb2hlQ0VIZVp4bE1uR0dUYmlKaXJ4OEw3c3EybXk1cTlDMGtTdEcycHA5a2ZZQmxFRGpDMzBNbUFTUHR0N0pPL0MzejlxSHRWck5KZVVRYlR6S3ZyVzVPb2VReEZ0WXYzeXRBNW9JN0VnWmNWa0RpYW54cGt3TStRSlBRTHBpTlprRUpUWnYyZ3JqZVVHWC9iRTlUaXpEaXJ3dUpKbFdLVGk1aGo5Z0g2YmlxakQ5S0w0TWFuN3M5alRjNDIyekNaMnZTTGwrNG4xNGIzMy9oMUdNOTBHMlRPU0kwVXJKSFZRaHBPYVZhMHNUNnZITkplQ3ZvV1duVlBwdXVZYndqbEY2U2I3c0JLYUVERTkxbXdsMlAyV1ZOWjN5V2Z4MDZZZk1XaC92SHJrYmlpcmRibGFnU0N0dUxMMHlvVUs1QTFsNUlpQVBtaG5hTnZ0RG10VlJieXlOWExIVXJsZzlUZnl6ZmxiZFJzeXZFM29OVTJ3c1l3dDAxbnJ5VHVlbTBQQzgrUGlXemVFNXJnRFVuV29mVS9mWWVTVHB2czViMXdSL1dvWjlwOWx5NlNlSkZwUUM3TVMxSFhuQmgrQ0pYOXdaK0d2UnU4Zzh3dFU2R29peTRITEdIaTUvUmJEK3BaQzBhZmdlTHk0Qll5L3R1RWZ3UUpWRHlVWGFhLzl6a1pKR2NhcnFtSTQ5TFptZFlVNlpwUU9jeGxlbzl6VjQ0SkV0anFUOEducHBIM240SmRmOVRGRStjeXBkL01QRk9LUzZ6TkFiZUwwNlo2TEdrOU9KL3dtSFRPVS85QVVYMlA1aHlqdHVsV2FreTlsOHJ5N0ZJZWxyMFVSV082RDFXTnBQcm5Nd3g5T25lak9IUC9LK0R1aXNWZkZMRG1JTjJIQmtZV2lOWFVoYzZEcW5wSHFhZGtaVE1WV3RpTUk4aDJRZzByZkZQamdjdHBYV3FVeVNFVmcrTC9hL2NWS0ZyTjREbHphTkdrdElQRE1JcWdibFF2dTU2NDhmOWFyWTcya3dUOGo5di9XVWMweU50ZUU0a2t4akdMLzFiYkcvRVlaaEluNU9keGpUR2NpcmViNC8xcVROLzVZVGRTQkkzRks4ZHRIUk9hL0g5eHhDdnRQWHB0a29BUFlYVWNGZ1pEcmdkQUFtajZqZHFiVy9kQzh0ZmZmbGtUWlVoQmNGWm84MnRVQ04rZnN6a1lFNFRDTXp2UFFTN21RNUI3YjF6U2FSRWw2M2dHZXZ3L1hyVnU4eFlYT3J3dTRXdi9PQ2N0Y2R2ZUM4ME1jOGxMMU9yUHE0RmdKVWgrRmJIejdoNkVjTVExaFg2Z1liajY1dno2cGk5Z3Iya3pYM1MrUklZOXNrNFlXYURxZHJqdE52b2JCbnhhZ0NObW1uRDRYeDRsTklJbmlDUU01dUJjK0xwWnc1aEZ5N3EwaG5DdmgyeVpwQ3Y1a0NPSDdWaXFySkY0ZDluY3Uvb1hzRUhZU1BCQTg3MlRWRWpveFJ1VWVqcHZGQXNjMGhCVEpjejNITmdLNnVKOTljSFFyRDJPV2xZTERranBFemM0d1NjdFRJZ2RnMUVoUVFlc1g0MmhJQm9yL0RtRHNMU29WZ1E4cDI2YUovWUMvMittNWt0QXpUTWg5bFo5cDJ5RytpcGpQNmJZSGFQNEd2OUtpSXcvaXc0SlF1NGZJcGZkSG91WHhZYzNJaUhCWmZOWnlQaEJHdWtHOU1hNVhKVHlwTGg4eGg3RFVkd09kaURjeEx3a1FVN3FXSnFqTDFRVTZkWnZTM1ZXQ3NDNkpRNGVmY2xmdkNGTi8ySWhQQUdTcDlFczNoNWRISDNYRmFnMEZHUzEzRTU0SC9wOExwRDgxcXRPUSsxbkVPRGs3Y2RsalQ2aStHSFV6bnFuZnI0dS9TYStGRkhueUZndTB6TGFYQ1NnVTZMOXMvOXZzM0RNR2Q4bE1Dc0ViTW1uOXhMOTdRNGNhNXZ6emIreEFwaXpWVTdGcENudnRZMkduVFNGUDYwa1l2Rk1meCtJSlJ3V1k3eVNWM3MrSHY1R3NYQmhMNkhoVHJKZXFVdGJmR25mT1UyV2VUemtSbG1aNW8yYVg2TkZHN09EUkd4dmxlSm5GUjErWFJ6Smt1bDlaLzh6UTdNdURzMUZkSFVPd3FQcXhjNVo1ajZIM2NYNHZIdTV1d0VpSWgwUW9wUmVjNmFEVjUyN0Y1ekJzRUE5MEcxM3piWGdOMkNnK2d1SythYnMycjhxbFVpRXhPUVVGQ3ZGZ3hjWWNLTXg3VEdaZWJDZGhvL3VwRDgyNU94TTBOK2p6N1pQSmVMZnJIL0U4R1Q2UkRVWVduK1hNUURlczZQVlpqN3Q2dmpQUWNiRWhTSVBFZHVlSFI0bG14WFFQME8zWTloYmV5STcyQ0V6L0xQT084a1krWGh4V0VRZmRLRkI3R0k2c1RvVzRxTHFGTHJaTklOMCtUUitJYWoxZkxLM3d1b2RLOUphRi93MFczekkxczR0aElKUzBIRm1kVFFzNC81K0ZlMzVvTDhBSWlsSVdwSGJrMk9reE5KQUpkRU5weGlFOVlwaHVNblkwYjNaWHlkZnhhc1ZRbjhXL0Q2aWFUN1ZiTlBkR0FnL2taNUJlaS93ZGE2N1FLY01ISEpXams2TVBpN2Eyb0NWUmtBV2xzci9KdjVvZWwyTnM1R3Nhc0pJZU8zT1d1dFlMM3lWYnowdzFiTE1IUjRUK1gzbXNOL2ZreWNEb1p3WWZRVkRJYXJIVTZ1dGV6U29tZERjZEhSbUxxN1BnSDIremtPVVdWaVFQcVJUbFhqODF5cnVvL2ljSDFnNnFWdDlEc1c3TS93RUZDSWZCQjJQNGZ2VWU3YWNwS3ZwaHJ1MmJhT1poaWNqOW5CWUtRUTl1VGx6Z01CdmJXUnFUdUQ3bGZKK0FJYnNKNEF5cjh6OG14dE9EMjc0bVg3aE9qUDdmRTJta2x0ZHhzME1uUitjMzdPUXdmcHJuRmZGb2duZi8xTzcvUTFpM0s4VXdWbHBzUDhVbXYzcVhBZTZFRnRNSG1wUEtDVWVWWEhveVVZMEd6cnZXTkpqUk9CZVpXNUFFdjUyQjlWdlpSOGtFaGhrVXhTRkRkTGlVRGhrcVZPcU5acGdWdXFEREhnbSt5aE1hMjl0dFlIaktUZ0hNY2ttd0x0ZzU0UkR2LzhHQTNIOVBKZk8rRVBFYkt2M3BsTEZQNlY2UUFNMjVRcWIvMFdVTVY5TFR6VmVoUlduOG4xZUpQMEFkcUpEYXJTM0RjUmd6bGErRnkrVncvTlhNZjlUTmdSS0pyUVJxdVl1cWVGY084WmhLT05oQmtwdW9Nd2lOaC9BSzJSQkNObzJmMjFWbmdhUHFEQk02NGVMWGtGemhLREdyZ0VLSDA0V1Y1Y3R1aHp4S29WRTdqQnZOQU0zQ1N2dnZ3My9SK3FScys2VkpGcE93OGZXRXE1aTg1MWo3b0tLWGtFcURHQnU2ZENLVUd5QTUvQVd6QTdjbWMvV0dMV2NSUzNiS2ZsdFY5MmhNc1EvWkJTRlZadk1mT2dZNndmU3hVa3FOcG9ML2kvdWJrdERUejljOVQ2bmQ0aEdzQnp3dkxPRXJMWnB1OWtqT3JPcFVlK01GRzJsTCtBcmliWFd6bmpxZzBYRjQwUHlQZTBwaFk0d0ZHVW9YNy9GN3N3a1QwL0tHc2N4cHp6d0hJR3F6Skh1a1VKeWlzOEpuRU5FbllLNDBldE5QTU5MbkprakZSWmlCNG10aEIxNnJiYS9oTTdBYWwxalkvTXZNdnVTbFNIVFNkRVRiYU9kTWRXdzhkd2FhQ3J1cmg0cVFaNzNYN0VzL3gxMWJ0YVBuMFdNa2dZWmdYQTA5M1U4VUhUMk5qU2xJQStOcXl6UmpjZk9rUGJlWm8ybi8wNXBPTjVWNGlJWGNXTUgwSmNFUmZDTURHejRaa2tWVHZROHpZTnhqMEZneXIzbHVURllkMEd3NThQRllKYWl5cm5ONnBrWVhvVURzQy94WHJ1MWhYanlsdW1kWnM3b1ZPWTBEZWhXeWdua0p3UHFZcFdLQ3RZTnp5eEZySEtYRXFXOWdqZ3p2cnkwdHg0eEtteHJrYWF1NE1iUnRqN29GRkp5SWNRMWVjZ3I4ZHNtWEZZZlNGcks1OTYrOExaZWc5L2pWT0hBVGZyZDF5N3puRU5QNUNGWTdXVEd6RUdFUWxUL2crS3dYaHVKa3dWMWsyZ2M5eGdxay9SRldmek55TzhHbVlVQ1BTNXZwOTRrcGpTY05rM3hrYjExQlFVL2V6V0pyOUVHdEpDdHMvdkpqUHBWR0UxaGVERWlBZnE1elVVL3k3eHdRcXk3cXEvdjFjVFJ6eFF0SnhaeW13ZVBDUVIwMHAwUGI5NmZyK05XTS93aHFzMGkwZGZOSVd6S2NnUS80WjlCWTVIbTFUK3RvZUI5dWdtdDh6OFd2TGRSZXFZcHJ0dWs0T2hoTUo1aFVteThIN3FHa0ZkeER4clgwcDUzKzBieTBlSjFCTUlzMDExNG1NYkUzdGNxc0NTWVlwNUVDQ0IzY0tMemZoaU1qa1RWMlBDenV0czVsVE9INkt5ZzNibnF1cVB4ZEgyWnFaNHk3UUtuOUlYbjE3eFZpTHR4RTZ3TWZYMFVQQUlIQ3c3M0huTnRuY1M3UFZxdzRkOEdnY21rTExhL0JRVDdQazU2OGhQZ0l0dGF0RTI4MmU0ZmwxT2tyNmdGVW9kR21yNTltcHJRbEp6TGhJTlladURZa2RpbFZqdW53SnVPVFR1WWFaalU2NGF3dHRiMDlLZmVxdGJjREsrdGdQUmJSQUNsaUwxWm5DemcrUlh6Z1hsenZFbTlWWXNPMWxGYVdsbjJXWXUyNFBJZzZhVk1ZTGdtSnNmbHp4NTB1Yll4dXBWSmtqWDl4SExESks5QmZkT29vYnYxMk1RMUhsOGpodndBU0xzRGVGS2JDY2UyTDZnbzJVeUcyM3pWeXRNeDAyVUhBeXdMdXVreGZCRk9PdWlxQS8zV093TkZGY3gvdDhPZVlnM2FOTGgrWXpvV25sZ2haRkZ5RHZKWEo5U040Qy9TVnQycThPZUhJelFVUm02ZUNVTC9TUVl1blVLV1E3MDZhRkxONVlNMGIwRVA4YXE5Nm45ZjRNYWhFblh5b0FzeTZvYVl3bW9zVVUrT2RaYWgvWnRXR2pNblBpelZWVmV4Y3p0QVB4VC9GTjFVRmUvSVZNaGYrR1NiTGdQTnRUbWxmUlZKNVR6SjZPRGQrZ21EQ0ZaYTlEYXRqS0YxTmlDOEtxTFNvZ2VKNkRyMG9YSWN0V3FXK1BsemFVaFA5c05MbDFSNkROOTcrN3NFSzJ0S3g5VENqS0Y4Q2ZlRHpma0tnejY0eCs0em1DQnIxbW1YK1VwZFZSSVVLVGRnbUk4Q2J2TW1oVncyVWJYaFQvS2NMQkxFRE1vK0ZTVDcyOTQ5NUJlNEdVaVpzUGdlTU5WekcrRXlPZEd6ZE5iRU4vcUlRbmt0ZGQySWY1QzJtc2NndmxvcHFrcGtBUnVRNWwybStFbFk5QkttSGU4TmFCMVdlUTAzSlZnMTdSa0o3TW5peUlJcUYwc3c3Mmd4YzJsL3JVTDFuUlEzZW10NVBNZkx3cHJiMld2ZXlUckxVeHp5OXBLMnZZN1FKVXQxRHp0TDRVUkpFeTl2VFBUYlpjTlNLc3lEekx1R2FJYTlJSFBtZjdiU244MHVyS3F1S0F3UWgrMVcwWTUwczFraUFhOVZyRzB2VFVoWWh3R0FnV3paU2hVd1FFWGdJSWxKS1BPbVZWeEdoNzdmRTdxemFsKzB5dzFWaGpUd2x6eDAzZ2kvZm50c2pEbHo1Qm5yRWFBdUc5cGxRa0RlYjJYbmwyT0k4eTg5d2prcGgxZDN3a2hZZVpsOVhGMHU4UmNkYVMrUHJRekkyUmt5Zjg2ZSswZDZLK1d0RXpRZ2ZnL3BHOXA0Tm00akw2RjZwZzZzUW54S3E3MDZBVHp4N2ZRUnNIekRwSzN4MnAwWXBJNTVMeUt3OWF3UzNhSG8rOU1yMmRMNkpNL3YzclRpTDJjRkRuQlduMnVxVnczN3BEMEtmNElkdmlqYWt2RmxDdzBYaUJFdEZvZHhFSGF4ZzBSS1Y0TmxUNVBzenJ4aXZYR2UrSC9PV010eEtwVExpWWIwV0o1N2RPOGtOdlBRbE1uRmtsTzJiRFlmQWppZUFKbW45MVN1aU1weXVueVpCanl4cDFoOElvdmVpTWkxbVBPWW93MHFGQjFPb3RNRzIrejZibmg2V0p5cXdhSXR0TnpaMFQreTYzRWovdTIzczlRRnpNdTRHS0RtV3dFelAxZE92Slc3S0RwaGVVNXZMZkpjaEU3THNJdEF6TTF4QWZGVVRRZFVMeXQxSWtrcGs4U25KZ0dxbkJuM0J1TXljeFRNMW5vbFZmN2NWbnNwUnBNTEtEMXFzR204ZUp4RFJPZjVkWSt5QjlKQ29zc3Q4dUVxcVhIaHYzTWdHN291UDJuNDBBeXBHYWdpNzZTRXhVclpoOEtvU2pqRVFEc2VuMTNrd3hKNzNaMG9ob2xXSnIzMEszTlhnalVYMUxZUHM3N2Y3WU9jNXNwZUZ2cko5dHRLYnJQSFhxVmRkYTM3WUNsTEt0NVA0VVZDTzRsdmtQUUpFcHdvOG5FQWh2OHAzN0R4MUxucThtclV0NjN4YlJ5Y2g4dlZzYU52SERFUHYvNFBhd1JvZEZkMjgzTlNYdTFROVh6WVNlb3JpcENCdnp1UG5WOUFOTVlrZUd6Z3JodnNDY29jL3l0ZU1uWFJCcWJYczY5ejVzcUFMUEVodkpXUFhKNUcvMGM3Y1B5alVVS2ZBeVVHR1diZFk4TzZFais4OGp1WTZhR2RWeW41VTRYbW0xZjZMWVhtcHRBNDFtQjdhajhISEExSEo5OWR6YW95S01nR01tbkg1OUEyUlg1WjhvQWF4YVR5Q2ZkbmR3U3pEV2NVOFdvRjFZMDJ2bmVjSFA4YXY3VVVNUUFkRXZuTjVxNVBmcUU4K21GT1JBMkdibmpFNWE1NHphZEhFUXF0cGxscXB6dy91WHBKdGVKV0FRUzJJU2JBV2tScHViM1EzUVZEYkRYNkVBaDRVTi80cGF0RnRtRDhTTnRrNTU2bVR5a0tKMjI1YnhpbmcxNEZkN3JnNk42MGVLbGZOMVhhZUcvU0dLR0o5NERVR3d2b2txcDFiQ1NpNC9Zd0dxRDRMc05UOFVvTGdpWXlQQzN2OG9PQnBocHlaMDJRNlIvZ2dJRCtVb3JKcjMyUE1ZYVpTZjJuQkZDMFBhdEkrRFM0UXBXTHgwcElMOU9JYzdJM3VJVm00RE00UGR4RHJtOWc2UWd0MG02LzJlZGQ1cWJ1aEREOU5vakM4cmpocWFqWlY0dFlhSDhKZWdCb08zRjZDRHlkWEh2c0JmSEoyV2oyUkZlcnlaQ0g3eVBobFdHejhqVEVHd21RR1MwTGRyOFdtRmVHYU5Dc21zN0t0T0szdmprL0xscmJPV0hlMkRTNjBETHpIZkZVYm5JUmNwRUF6VGJ0RGxiZzhlMlpQSDlMTTJ2V29iWmVPZkwyc3hGYThJSjJyR1dBR2FVUXkyTVBJcUJsdm5PbS94N2xqODZoQjU5LzI2WHIwRUswamZ0SHMvcy9QR3g0akVxaUU3cGoxY0FwYVdzR3piMjFOZ2ZkSkVvd1FUSWh5OU9qNVdEV3pvNWNIZUNoSkF2WHluMlhDOGtjc0RUTWJIWUJuNmltU3Z5c3YvWFdpZkc4eC80L1hOcTlJdUxkQ1M0MVIvcVJlaTYvRkZDUTdqL0V2YUFsNFBtVXFEdVUvMTVDd3BiUDFtYlNpTUltdkkyZERBdis2TnQ0dXFzR2R6Y2J1MVJtemlucWZvdE82RXVIalZPeENrQVh0MkZrMWlHZmJRS0llVGsrKzFia1hNRlRwOFdrQWt0dXB2OGJvNXdRZmpxVWtJYjYwL2JvQ0k0WndIZzlid0dieVpLTEFRR0o5N0V1L0t3aGdTbFNidTQwUzJUUnpyNUVzV1pUN2lpR0VIQlpsVzZPUVpqcGVSVUJYTS95RTkxcGlDMnQrSXBZT2pDSVZEaFUrOGlzcXpKZDR5ZXhXNzBXQUc4RzZTMFBvVlBiMHZzWVF3K0NkR1lRb2g3b001c3VsSlZ4aDBEcGx6M3pDY0tkZUZodEU0Mk9zN1FaQkpjbExNOGRUOFdnUVZYbGh2NzRKTlBXUnZrNlpNbW8zREhQakpnSTBMcnlSaDlkREdkcDhwOHRvSk0zbUZBZ2xqRnN3dExHNk1kY3pOMm83bnJQRWo3bHkzczZLaUs5d3cvbmRGVHFVQmNLbTROdE0rZEhRMzZlT0ZFcWMvRm51UExPbUF3emtwYVBQZzJ2QUsxZURyNzRnajJJZm9ZWndkclJVdFErbVFqUjI2dFdiVnBIbC9La25vTXNRSDdQNXhTcTNlVkxnYTNDSFZjck5kWlRhN2lrL2V1bFhVazNDUi9WZ1RxRDZZaFBhZTN5S1N1ZktxL1dxN3F5Z04yUC96WW0rdXNQTklzaGFVWTRvRnBHVW96bUdDY25mUjRQNVBzeFFEZ1dBVGpHN1g1Vm5PMHNWUVVCUGZDTEM2UGgvMmRDRGhKbkM1YWxKbllaOTN5SHVzTDBRR0piRUFLcGFQVnQ2WVNIYW9MWE4rZllyY3lzbjN2V0MzQ3VZRENheC9qTVRHMTA3WUZ6Zlk2b0tMUVdIUERqWktXeEZrbGJQSlhkT2VwVE12V3R0aEEwNSs3RTFHUk5lN0lxRithSTVtTzVnQ0VCWXgyYktyR2RWbmlzcmJ0N0lwZTlRbGpvWjIyQmRoY0oyL3RTUVJhYjZ0dG5YekU2VVVrVTVYKzM3NTVYbVVzcVcxWUFNMnZXR1A3dVNhbThFZDd4SVZkVFVCTlJwMDAyNUdkcytoWGZKamRQZzRsejZGb0hNZTdoQTgxWjlSTVZ1T2pJU25ZVWtlcWwwaUUvbEIvR1VuK0Y0aHNaRlJmbjVXQjdHZzU2TFBiVzZMdDBRMWdkRzBVbHNWekxJQXg1RkwzNFVESUd6MHRQQVptL2lxVVkrY3g3UHM0b1d4QVYyTTRYQkdWc0RsZjVTNU5pL3pURUQ4MGp4cm1Ia1hjbXU4ZC9vdjgvaW9qWEdWdjNFYVlKcjNIOFFobkdLeHZSa1pIT2dHYThuUzc4NkJVb2pYMzJaNDRDcmg4OVhTZlRGc2FDRXhRd29NRFlzVUo1dFhxdlNDR05ISlFyVDdUMmVCbDIrb1hxdTl6M1N3NmVIcC9ONGVSZVdmQURxZVlwc0F1cmRxaWxiOW13NDRGbXpmdG9YYUtybXhhUms2ZWhpZVZNU2lDamhhTEszNzYwWm5CR3NrS3ZjNGU1b3dGNTdQU29BTGU4YTQ3NW9HZFNZK2hoaXIwTlJRaEJoTXZEWFUxM1NBMEVESmo0Y2xFZ0hWc0ZsT2lCNThUWU9GbFVUeDVQK04yUVZQNHB6dXF2TDdxRjNJbmF1U284dXBSLzl3M2hDWml5MlptLzJzUGVRK1p2YVBJa2FJajF6dUhSVDI0WnRTbDdSTm9yVHdkbHM1ZUlYRjg3bXpkdzJ0Q3RCOExoNnE1RzdNci9laGpadlNuZ1oxd2VmVU95SmpHanEyWFYyQXozelh5eWx3WG8wcjhuYUNWTkNTd3Q0TEtGN1N0NUlJMGV0N1ZHTVo0ajY1WWsvS3A4KzdkZVQ0eld4VHZiV2VhKzNUcllmYkZ1UVg1ZXVKRjE5TThBN09pT0hwWFBNY2txbmJDMXdJNVQvWkY1YmhrYkFhWDlsaThTZk9IVTBSS1hNVnRoQXRBUzZMTFhXcEQ3TzN0Q005ZlFNUjYraVA5VDkrNFJGZWNSWjVqMHlHNjBWQkhXYzJCSVBzZEdlTjMvSk9aUUpubnlVbzI0UVBxOGlRaHlsL3RUdjhsLzZKNDVDWmlwY1R6ZGFWS0Rlem56Y3JjekJuTDljTzBiV2hmc01sSFFoQi9maUFHazNnVm5VQ2JwT2cwZ2VKZ3FrdUFaa0FReU5CTUE3MjdveVhqSFdkaEZLRzB2Wnp5SGhQdVFXUjBHRkVDUU1zNHpRQmt3dWdWVTc5cmNzOVZaYkZGNXB3T01vRTFPR0JRZEM4ZFdZNktQYTM0LzRCaFpIRzVmUndRM3QxamJUMlNEa091Szh1djFrZmt3akNNTGxPUE1wdWsyS2cyVkZFSC9YMWEvbXpQRGdZZ01KNWJGS0sxYW13SXdzT21PUTdBTXRyMWFLRGVzSWJkekZlOHZrQ2ZYamNvRSt6NUNOQzhyZXhtZXl1ME12Rms0ODFtT3kzazU4czRTOVBCc3lWc0duRGpKbGZZSHpPbVIxM2t1TTVZbnJRMWtVMHdrZWF4VzlTRG0xdEw0TWU3OGIrR3IxUzJVeExqZDdCQ1AvdkpJK290bmxHM0tIUGxDaEFYU2xsMElaVWJudXFUd1FaVWRWZE5yVEcvZUFVcU9mNENoVCs1dWMwb2xTVzhRazNHY0lRRXhwVHZmaTJmUXR3bU8reUg2ZVR3V1JEa3BSVXNxTzFLTm5XRzNMU2hqa3RMZkZDRktpMk9laTdicU9PeHdELzdwcCs2SjNLMGJXL2M1OXd0Wnd6WllrdldDeDh5ZUpmNVNxcVJMUFNRZFVRbWF0d2VNSTVXN1RkV1ovT1JpVE5LVUtaVGtneE9iNzdudGJtcEVIbzRjYVc1Q25BekFCeGdDNVBRdWxhNXJNZXE0aVg4Uk9DZ2RsNFlYSW4yZWltelRNdlBPcEtZTlJTRTM5bjI4UGxERDcrSlArUUt0Z0NzdCtmbzQ4Vm9XcU84QmUxQ25PbStRaFMwUEZNenh5dHpXNFdjMG1rbmt2cmdCcnJWOXBUS1BBTDBZLzFNUHVYMDYvRHlhbXdVTzVNQnE4SS9XRldKTXhpWXdxREhSUzJSaXhDTjh3U2Z1WUxiR3EyajFmYUY3Y0xVajBDUU9aWHVTT0t6aGFYc2YvUWVmQTBSaUNDQ25XWG5iSWpQcVozUWlZckpMSkFZY1NtTDNEaHJMZm5uZU5FTWt4MnlrajJIaFhpanQxRzBIWW8zajFJMk9Qdk1RMDBsZzRNTktNMzl6YnVvdStFUjNuMWxUU2QrUVNWTUJ1c3NyTnhvQ0RMTE1oVUxlM3VBUmdSaUlqMk12THRBajdJek4zRDI5ZCtJZUNNM1NQT09NOEw1cTdzSC9McTk5OXh6V0MvZjRFMi9zREs4eTJIY1g5SDQvMU1OQTVXRE56c1QzYUNuYlZrMDZFUFJWUFc1WnN0SFdZamhGUjRKRjVuMGhvZVJpZ3pUdU1jZUFRNE5EeVpTVy8xLzJWU0ZSL2ZiUVlxaFNHMlNaUHV3c2VCZmNYUHhUSGxmYWhlckk5SU8rV3RQVzcrZk5BTmxEbDE2RnJyeFhFNmhmNjV6QVlGMkVBTmViWmY2ZWpjcE1SWUkrck5qMk00dFlnaDVSZ2NVSE45OWNLMWxibno4eUJ5eE96VnVzZG9lL0tDakkweXVLZGcrOTVYd2FTbDJkZWFoeVVlUDhlelZJYTNGYm0vY2tMeEwrN0JoRkRrTjNvR0FNeDd6VElad2VrRFZZb1p0d0taeFE1Zmdpek45MHRMc01FUERWZmVjUlVCM2hGRW96OFFVQVhGeVFjdEVOc09hTXNYYkNLVWpNVmNvS3QvZm9sR0xlaVoyL2RhMUxHOGllQ0drb0p2NVYzdUV0ZkV6ZkJWZWlidElxcEZWYXlKdm1JK0ZQb1dYVjJPc0hWVVlxN0NaY1RVL2lMZ3RNQVh2WllDWmFKWXVodEZsWDJGWGFqUEhIN1F5bDg2VHlRZWZzSmdibWd6Z3RnSUQ4S2lpdi9pQkJ3MXRhTkZkSGxpQ2xlNThKUTlDZ3cwTEk2TDNtNVF0dkgzSFNaSGU4bnFmYTlXSS9xZHJsRXoreUVPRXhiR3BNVTZZSE1wNDlYMjcwV3VsQXlBamZQVzArK2U4d2VGSTVpU0l4K3ZWcmU0alFJVmtNdkYwNmZMemlUUFBzQzNEYk93R2dIMzVrT0E0eWZkMUhMZS8vRnN0aVJob09CUlY3S0d6K0tRK1pIK1A2SlBaeXBDOThVUFI5dmNub2tSL3NIamh6V1pXWTJZM0ZBbjF1R3h5aGMydUkxTUhuWTJNci9mT3dWTjhoL0RMMTRqUktRa2xXdHl1Wjc5eXV6Zmpndmxrb0dLeDJNOUlocmVHZjlRVUNRME5VRi9aSmlnR25ucHcwdE0rTzdmZHd2eVU0emR5dHFmdTRjdG9DcGVUVTFoYVRXaWVsRjFsTWtBTXFlZDVYSG1CRlo3WVgvUTdZdU94TmM2UjlJLzhYZmwwbkF5VTI1QmVkMXJtV2lwSkVnMHV2Ri9SVTZQaFcxR01LNTEwQi9VWGJFUEdTL2xleU42eVduR0xDQUtiN2d6cXJkaHlwUTlHVXI0RE9BKzRETE9WNkNYVzgvQjhmSCttVW9OT0JLNlQ5ay9WSVRmSkNudDVaNXEwRTdja0l1bEpIWG1IU1pEeXFiemJ2SW1TOUJuV1JkRE0rVkg2dElwdTRqeTN0K0JLUXdSRFdBU3pUVTZsb2t3S1lWbHhyWjRhRGxmVEZub2lROFU5eGtUbkozY0QvS01GbXFWWmJQRXByLzFrUGxVZUh6eTFIS244VDVxRVVMb2ZQbkY3a3E0UjZwWXpIMnoyYnZMZlRSTHZZWEthWG12OEp3WDdXL1lqb2NrNmZTeGtyemRXbUF5b0RIdXJBb0pBcnQ5Q0dvQmpHYTFVdGUxeDNLdGpKVy9BdHI1NUs4M2FXYythUkE1RjFqL2VpVmMvbFlzbTN1SXNVUUhLQmhBcEphQ0JpMkszL0thWUo1UVRUUy93ZjdOQVhKTVEvMUdYcU1keXZaODRtcU5JRXNoVkJwWjE3dzAxbWdDZ3JnWXNQWTBORlM0WGpzTmF3OExnOGJtMW1sS1gzZ2NTdEZDWUdTcHgzdGtqZFdGZWFQdGVlaE9GVXlya3hnZ2lBd0hwWkdYVmNIVW9rRVNsSmQ0dmhINTY2eS9veGx4bGEwWktOZTdoN1gxa0dCTWc3RC9FYTM1d3ZKdEtzYTFTUzU1b1VWUGZLQjdNSEl4alB4NDRic2xoZ2VGRzJDSHkyam1QanRIMUcyZEpGbmxjS3FYRnk2Z2FzSlhJSGJhZFhIc1NsUU5ycHZwRVBpYUkyTGxKNy93b0lDSUdBeXZCMWx1NlZNUGVCTWsvdWFuRFJFaERPYksvVnEwUFZDYys2TldQbGU3R1pGT1I4R0Q1eC9FbjlaS2RUWUJTU0RPTUVLemsxdWVseEJ2V3JHQ0xnWUN0QzNwVGwycDJkMnJ6b0x6U1JSMlc2cWZmaXpqTUF6NkJqWkgxOTJaWEhwWFE2MGVHUGVJSVI3QjFKeVU5akorem5CRDY1NWFDSGIzcmFVd3hzYlN2VEdPNEswSHFtM1d0ckJpbGNGZ3B2SzhaY29Md09ESnFXNFp3b0Q2V1VPdUtEOE4rT1dZbDg2UVdLbE5xbC9xOVlwbWhUcDNhOUM5M1I3clhucFplNnFhc1AvcnNWcHRMSzUwUWJKVW5RZWFtZ0htLzBiR0c4aCszUzZvVFF3SXVlYVJjSGwrK2hBOWI2TGNkdTJqaDdCUEtKWE9QMElqaTY1SnNXby82aENVc3R1YXo5OStuL1NrdTJDbTdCcEpWVTZoK3p2OXNjTGJDcVVPdTg2U2NHcnRpeERLSDBuL2NucVFSU3hIdythaURGYk9CdVBLZXBzRU9xK09NYWZpU0I0aEJMbkNCc2hvU1g4VkJpMzNwcHZyQ1VYdVpSZjZTM2oyWFpmRHpIeVBZWXNTU2FBUE5pTFNaUkdLaURVaXFlQUNKSzJSQ2J5TzUyQld1ZzJLZExTbzJKOUJpejV0bW5QaWNmR2hsSmt3UkJwUHVDMU1XWGIxanZhMkxTK24yb0dFZnpaR0xNaU4zaHdURUMyU2dzQXFzOXZMSFVnMHJWbnhPdmNsaEpJMjdxQ20rSFZTTE5nS1dDWEROL2hoenpJS3BmTWgyL1V1VlZhdFFSeWRKc3lRbWJoaTdUTG4zdHFqZVpjc1kvaEJYRlpHNmp4SUNxOUs5R0dDeFFLUDh3OVd2R0ZVTyt2K2xoRHl5SUVveGJTZWRmR05kMDJqelB5WUJUeFdvZjVrVklLSDl1Qi85YlIxZEJnR3puZmJ5bm1TS0lsSWVIZTBnTEg1YnlvMkFLaVhPaFNBZFFFSDdyYmc2V20xNUFBK0ZJK2RXbkVEZFB0MVU5QWcxaHhCTGFCUXJLcEdlNDdCRjg3OWpadzdHY1I3TE8zaDBDMVRoV21pcUZsTW1kK0RwdVhRbWFSWGpNSjlqTHZramdESGpvVTNNYmlwU2I5VkM0SkpBWUJMcE82NkhzWVpXN3NjOVhsMWozdWJXRTgxSkd6NUt5emYzK1BxemthbmFZSGNUTzVxS0hnWmx0d2NHTWM3RkJJQ3NucTBQY3ZyOTU4K2UxZFR6V0twZmFoeUlzWlVJVXFoZ3NXQ1lqRGJYVlFHYWxybTJCSFZ6OXJrKzlvRTNUNkozcWJwaHVBQ0luRk5JSjNNY1EvTmJmYjhkQ3ZMVnY0WmFrVmN6d1ExZzhLbFBzc0dhMGp6VHVxSk15ejJYWnRoWUJQalV6VmRvVlpPYVc1VUFXMDN1Z3hxcnc5Yll2djZoR203ZFBHRlFjREhyUjV3bEZEbmlDUG5hT1lxQldLSUNPWkEwT0w5Y0JkL2lPOVkwQVZZemFqYzlxT21YR1ZjVmd5cUVOZ0JIZENka0Y4bU80TGFUaEdWa3NSdkpNLzJ4Nnp2cWRreWNrU0ZnWkg4bXRVZWZwRHZWcU11UnY1VmJtc044VjZNeTRXKzNBWGp4cGZjSlNJYlR3Njc0TVNZdWRRbDY5d1REL0p1TUhMWkhmQm9nQmYvSndoZmh1dS9GNC9jRmRSNUJGT0J3V3ZCNXZQcFNEZU1XYWhTdHlGa1BXay9UNitPc0Z6a3djejY4bHlKKzVXTkpFbHowdjRJUk15aGFmZkhTcEl1YjI5dFY1aUtJSmFDME1yYXVobll6eWUwVTJwYkppYUE3NllqVzJGZHBkcXVyQlRxcXdLL2RENStMYzdaV0lqN0dGS3JFMytBdVpNVGh2K1VQUUp5dTcxZ3JjNzNKQS9wbHU0NkIreTJKb1dIRVpwRC93aUNJS1Y2bHJGVXBEQzUvUWRrODRyNzMvY3BWOUxZMmsxcUxvNmhqemNtMnQ4djhkWGhoUlpIN2NoNFBSZ2FKWGxpbEVZUlFrczNUZ1JmQjMzckYxNG0wcllrUTlTLzVqZlo4SDI1SzR4Ukt0OWc1NlgrNFJpTGVQRm9mRHhMOStrZFRFcG94VjQ4MlV5S2FkMzd6Wjl4MmE3OHkwUWtQWlFsTXFXdjBWc0g5eGwvOFU4NFJOdTNxdmtxM2xmT0g2VFNhY2IvSzM5UzRZK291Wm56bFFZRUxheXFjQlB3THlSejg4OFMydWpXVEUya3VVVHU1a0NGSmczWDRFSWo0NGI2SFF1b01KV0l3YkxacEUrTUFUbVQrenRlRkNUT0I5WUI1ZWFKYWh4am1DWEI1VDZBMnhjbGZ2UE5abkgzdUVtOU5vNHZvbFhBQXJ6dUlzOHdEeDE2Nm80MktGZW5NbC9lU29yaHpBYU1qQWprU1ZKbVFmd2lhdXhXS2JNV3dFVDJiQXl0KzhxcmxJVEtxZGsyQ3hEYTVsdmhBRmYyZHY5alZ5UnAxQU85cmVmKzZHaEtHYkpYa2NndXRsRVMrMWdld010blE5bHNzV1dlNzcvMGlza1I0djJPTVVwUEhDbzRheXNOSS8xdHRwaXFxY3MvdHM2TVN5d3V6REhILzdaeWVlMlVteUg3dDhqMWhScVVVY3M5MmQ3YXRBVE5rS20wY29oamRCaDl4ZWpvVTh6THk1RnZlWlNXeHZ1U3pqQ0dOODRkVDJZQitWUFZBNzcwSnVqeERZeElnR3ZKZkVnVXkzZDEvdjZ4UXpLSmtEOWtXSi9HZjRuU3p2ei96eG5TdHM2ZlpCL1JJYlVCbkZ4MDRYcUZoRE5PTWwyb2hRUDJTTG96TlZyZTQ0RVZ1Ris4ZGxTQmJIaU8ybkNCRnRkTVFNeDVMRU5oYjJhSUx2dmlNbTZ3ZTBaZTU2bXRhUGlPbTQ0VTVPYWpQbytLQ1IydFNrVFhzWHZpKzh1TGJSMllydVlIaG1xSVZiK2dGeWJ0ckFqTHdoTCtpejRLNGtkM3Y1aGxjLzkrbWpaazNFQXFTdElmQjJDdTYxc0dLejFqazFRQXZ6NUhqbDlwQUQwZDl3dUhtN3FMcUllQlQxUzJiZlN4STZyNVlpS3I1azJwQ2VoZHFoSUx4RVd4QjlZcktneG93cC9OODBNWmg2L3dWTUppd2NxY2d0ZDVDL1Vuam1CNVpjVkp0bGVQa0EzRGlLVm5UVElMZ2VCaFlkVE9jVU1DSmVnZHhIVEQvVnU5RnlkNEhFb2JLTVlDZi9aR1FQdmV0aEhCQU5xUUV0UzN1a3hZRXJjM3IxVGtRWUp6bUFzdkN3VlFmK2lvYVdaUGhRWHM2eVVocENtUDA5Y1k3cVkza09GaUp6TTlHeCsxMFNIVEpUUXNYOThNQS9UTDNxaDVtOXVhK25rdGxGL2hNK3VNNThWalBSaitaYzRTNjgrVEZ0RjhiclZuQTJWc3BVM2d1LzJuK2tMeDZ2UktkY1JVcEorMnBOd2dFUDdPdHJUaTNRRXI3U3J5SFpFcGFKRzJlYjNsRmJDVVE2ekIvWTE5MUt3djh2QTQvU1o5ZUhvOExDdGIzRGY4T0htUTJnbEtTOUJSbkU2a2FGVFpmdUw1Q3VLV1NXZDhEMWZlRG1rTWdMMzV1TEx0NEIvS25Bd3hOakRRYWlGMnBkUlRNNFVsekVJcWJGYk5NREFHNFRLSzkrOWQxZG1TY0lWWXVNRnRkczJuL2IxdDNaYUdNL2k2aUJueHdqeG1mNDB3SjdoNDlFWEJSQnA4bmVSNmFhQStqY0djc2hudVpnUUZwSzEvRDZOb0xPT3RwaUl2MW9yWUtUK0phQnpWUTNFa2hoUHQ1cG1DTVJ1TFoweVNMTjN3dThacXpDR1ozV3JXNGpleWFUeXVuREhJc0twbmxMM1dKcnJJeVFzemtpRVlEckVhQzlVNVI1ZDV4Zk96dm9PNG54ckRSbUdpT0YvSEpGM29tN2FJYXdUWExTNDRwemVVT1JCd3I1RlRURHpKeVdZRnVwQ0pqSWo2ckVRMlllR2FSNVIwSzlkT1NrREsrUnBod1cxckEwODhUWUNNL2FzTkplVTgvTE9DWG0wZWZiV3dYUHNhRGc4WTFtWW45RVVYQVY4RkhpY2R5cVFNNXp1aUZtR09IQ29pZkNaQ1NHM2FybmprSCtxUUxjbUh1WGl4U1dtWXNHZi9GZjhxdmZtL081cnRjUU55WGJpZGtPM1FSUGpPOEl2NXZ4QWR6UU5PQWNwbHcwQzd0TWJYd3pKS1N2Sk5RcWpJWGc0YU9XaTBjbzNpYkRoMjByc2c0dEZpTjQ2RlVHTFgrdlIrUW10N2p3VHpLdlc1bUd6SytGaXQxTUtDeG1jNWZSUVpQV0JjMC9jbXJ5UWhmZTJJMWdDR3ZUL1BLU2FiZ2F4ZjREMERrTkNKbS9WT3NOUkMxUlNyUlBCY0dmb0RmcVlsWWg1REQxQWhuWTI0LzBwQUNzVUFiUlpBeEVBVzFXTlh6SXNrMGNyTzVQUDRYN0JHWGdtOFQrWHZmN1lHMDRWakE0Y1pHc2JsY1VkSUJBaE0wWFdidFBaemJRK3llMmtyb3pIZFE2bDVLVFdHSUwrblpNRWR0WkJlWmgvRUFId2hKU0JzUlRCY0g3WURrRlcrbEw5M01JM0tpZFFVQmdhRVF2V0pqNitDU0NvMlV6MGRVVW9KZVhNdk1vSzlDc1dyY0FGMklhaVEyUm83OHNZMTQ2VE1Pa21SS1RUcXU5Yk1SS1d0RE52OFVRaVMxa2pXcHZCcm5UemVnaEJKUTl2NWl4OUJmekJ4ZkpHQ3h5Sy85am5aZTN1RVNZalVhTUFEL05ONlVxcUJLSFg4VE1VUGJKL3pDRFpyOUtZbjlDbGE1RlJGdHY5RFlEV25nSG9kTVQ5ZGN5TXMxbG1FZkdacTNhekM4SnhIdXU0Q0NRYlZqZ0pybDZtTzlxdG9Rd2NsQTh5Uk1YUnhzODdPditCSWFpSjJ3M0pFTEFVRGJRb3FxN0JXNnpIWm5seHBZSWtDOG45QW5iNldOOEtIbkhUOXgyVG4zNjcrc1NLSjFxU3JKSUl5b3o0MFdSQ1g2WGVQaG82Q29wVlZYMExkdlZiZDRwTG5FL3BzZ2l1ajJOMWVENHFDYlU3SkRoaHZVYkRKcFhLU0o5M3gzdENBT09xeHpVRHYrQzREejU0bzMrV3hoZ2I3dE1qUnphbDduUE5DQmlCSXVhNGprb096Q09TRVZCTWxIcGxsdVJSR1ZPK0dGQ2p5NlFDejh0K0dVQ3hKajdpQUt0ZG03SHFyc2EwSXorekVsamNNNys5WXU5WmNyN1dGM09TQmVXeFFwMXJvVzM0YmNlbUw3dlgxb25ZRjFjeVNyVSt4d0FqaE1zNEtJTTZzczhreHo2WlpIYTBFbEQyaHFYY05HNEd0UWQyZUNWZkErUEdVaXp6TFA4WlE1MDZ2dG14NmMrM3FuRVpaWFozYjM2QzVzamVrTWx5WVNFVTZWVDFmNzljU0ZNUG5aQ01FNk1zWmd4YWNoTEZpckZuWFZIMEsrYmtNcy91NzU4bWJPSjZwZTJvWTBIQ2RLbEphbXZUcTJjWHgrUndLTXorZFIvbFlQMjNhRUkxbi9iZWpJM20vekd4eTN4SzJ1RVdWMCtmc3oyWDJYaWlmTDNWWkJMSmk1STNLVkRrT0I5ZGE3b0M4Q1M3QnZyYzlSbVlXUWc3bDZ4VHp6WXVvK2QxTkhlNXNMdUVWSTh6V29ONDh5U0JDSFdaTi8zelFkdUdxWW9EVEN3Rit1bE9GK3MzMW8wbU4zL0ZBVkU1a3dvOTc4M2tMNW5ZT0hqWWFVd1VGZ3BqdEhxdGRXa1hNck9DTktkS1dERnp6djV2ZVd2NkEvYXBuUER5WUhMOVZTZjlEYVVRejNCaUs3elVVUWcwOVRJVWdLQ1RVNTAxVkMwbjlicFJmbS91ZlhMYTc1T2F4L0lGUWRIalV0WEFvUXAzaFJOcHBGOHFsc1JNWEc4a3A4QWNOUk5WMGNsb3lsTi9MRWhLc1JtNGs5TG9xcDRlYnE2WnFQT0NpNkNRZEdKTHJsZmhFVjNTc1FCdE9Cdk5FZ1pWTGtyT29XS0prcUVndDFMOFNDaDJ5STlqTFNxM1JSTUNqbzhsVTJxdGovcUpqenJpQWI5VGRIa2NoMTBPV1dIVy8xYWdreHVRV0dNcldHYURqcURvYjd3bGdFMlo1c2tlK3VTeHQ1NDRyUlIvcEVjT2tRWHNLaklSN1U1Z3kxT1FteVZGNGlxelhnczBSNUhXK1RPTGRyVTlrREFGdFR6MDBGYVlMWHhNakV5dW9IcE90T2d4elYza25NQnhoaGpFeVdKRy9DOTJia3VscFZJd0FjODBxRUt0OEkwa2ZvZUVlMEdOcHJtREUwRGtGTWI1cDE3Y0tQcmNmUE9qRW4zMTZnMzZ2Zy9WK0RpMWNlWEZXcTJubFpwQ1NvVUNDaElqNHFuSWo0Zlo1elJuS1BGUHN0K3VaUTJDQmI3cEJ3MHNHR0FVT2w0YkxLWjJuVUhSbHk4SktsVzlvZkRDM2pyMkZjaHNlQWdRTDkveVJxSEVyMHR4OGkwR2hQZXU1UXdGbjlEV25wbU1uZGliS3RxS3hVdkprWEdRVW9sd3hra0JyNUNPVzlROWx1UGx2c2hrWFdKSGRKcnk1R3Z6VUQ2TXU1dk92d1NDOENDODdpSTlZK1hQNHVvSWtJWWdvYXA1WXhQRm1xS1dSUFN1N05vRk8vV2Y0Q2lYM0RjUXNjTDJYVXZWQmZjNUJFS2ozSG14K2VOUVloTGNpK05wSUJIMU9nSXhuaGthdlRYWWlQNkwrOGh4Zkt0Zi9LWFZqM3lobWtYYVpkc3ptZDh4bzBqSUE0RWtRN3pycUhLY0VyRjRMQ0t4S0Y0YXBFZjVYanJ0S0prcU1ZWUlSRGdldWRkZURjL0ErSzFtQ3RpSy9zdjQ4VVpYWGdlVEVaYmJrS3k4UkFtcUowZTZheDRsb2J0c3BqYVJqYkpmQ1RVZ0xVbi9WNkxhdDBKUHdzR3lsWDJrcmxEMUxZbERLREkybnROQUZxL25kNzZyb3N3TVoycHVvME16RmlETEZ3aHhIc2F5UXRGckpkZjhkWDZXemI0V20yZHFyVDFaMG1rOXJiT1lGb01IY3F2SExuYWVUckMwNktaWURzQlNrcEhNeFdVS2JxOUY4OVNpT2NwaE9YWFQ3bUtTSkJUdXl5ZVp0ekJTRU5nbk45SURnYWZXQ2E1QkREL0FaUVdSVUlXRUVwZElsUjBBTzNhbUZvQnF6RkZtNU1FOE5IZTdSSXZldEg2S1ZBWlZTcXdOYnplaTlMSkU1eFJkaE0vRVBXN3pTVDMzeTExV3VSN01xTXJNNTh5eEUxOWhqQ2syUmlueXpPNzgrR0FLWGhtV0FBVDl0djU1aWNhUDRBYlVJTHlGQVJuQWppNjViVnNqdkkyb3RVTzBOcVRNeG8zbUtXczNXdGFTR2daK0JGR2pKMDlmMFlZOG04Y2Z5TFZSOExrQnRpeEF5L3FXQUdSS3lBeFREU3JDV0ZTY0ZvUUUwNDd3RXdGVndiblprTFdDdnc5ZkNTQ1B5Z2tYU3I1blVZYVBDaDl6cHkvZllGR2dNWVFZNHNTS3JOVGQzU1BSQmZmaW1kV2dnejlyeDBmRitNRTVBMTJmK3VOSE81SWRVUDNrOFZrWGNjczcxbGpqVHdQS2lnQzA3QWxJT3hOb3VGakZiTWd4VU8yTmNiYkxiMlMvQ2ZGemZDeHBTenZvY0J2OFdJVHllWG9WZGlpcEtnRVZkcTZKelVDZVhqRHlqcDkxWjVpVVhRaC9wY2ZQQWJVQkl4SGlOek9oaW5HQ21UajY5ZDNnRmFEZXVmTHpuY1dEQXF5bHd2TkV4Y0hqdFVuUlo0T0tyaVRVSnh0bzlLNWF3ZTlWSmQwYU1hamgrUktRS1liZkQvVmtoVHg5ell3K2RTN0VXdk0vMW5hV0g4eVZHUTlGZlZvWTN6TWxJSkFOeEFwZjVYZXJMRHp4TDNhSU13NE15WlpXWEtzL2NpaTFBUnVsS2hIVFMvZE15MURPMVhGcWVqcU11U0k2QzFvZ0ozOEFGTEwrd2JkRzgvd0Y3Ry83cHFYREhoZDVkV21tSmQxeFNKVVYrSGV3Ni9XRklCK3JPSHFpdG0zZjJwWDVWc0FlUUUvMWRTLzhoK0JEOTBYRWVQR1dDUnVSYXU2UUp1YWZiYk1WQkN6Y1BWdkExT3YwL0hLZXFUMitobUNEWTBtT2YwR1ZNMmh4bnNNZU9kZEx4eDl4V01oRFRGUDZoakNDbDVxbEVGUndieVpxRVp6dktGS0xzKzdybURod1BIbjYwRkxPVjBrVHczZXVNUGdTN0pjakxMcFRNVENIbllBMW5FVkFuZThSY0ZpQ1FzSGxVVjZBdlBxQ21RMzJjNnVsWGh6R3FleVk3dEdtV0ZCYWdkUjFhTlA3aGtBWWp0UDMxeXRwd3gxZVozOXp2YVNpeWRRSEJWdWxjY2tuN1ZXTXAvSFRjWWRReHBKaUNZRFZxbXhOYkR0b05RL04wWXBVdVpjRSszL042eElXM20vRGRock4zSUFYZkxZUVg1T2VrQlpjc2VmUENNSWtNWWNKalZxU0VlR3ZHRUVWMi9HWDdFMitCa2c1ZE1iQ3luRDdXaVFHSE9LUVJHZm1MOTZyanlBYWxMMFpVbDBVbUVWU1QxanNWYzFrd1VseS9nUSsyMkFIeENtU1BCOXFqNkJjZzFIWTY0bC9kaFVMQ1krVlRoaGt0bVFINkpQY1RJeUtiRHp6TFUybU9PS2Y4U3ZwZHJIMGRQZmwvdk5ITVpjMmFqZVNwVkhXWk16SWljVkR6Q2I2eHlQV25USFFxNTd2T3Z4RUMrM3ZzTmJjYVNUS1ZNMzhONFVNSm50TmNtdkRUSWVMZTZQSWNGNGE4NmQwYktrM3Q1d0xwMXRmWHM3SjBDU0VkNEdDbEtDSVorRis1aVg1RG9iT2hYcWJTN3JyYmdLSTF6d3JPVmZqSGw2dEhHNkNMQWNmN2ljUHVrMDRTWTFtUXJvNnJoQ1RIVW1jV0YxUzdDWTBUNHp0b2ZHVFRQVVFPUVJPODRsVkRlb2ovNEhKTXY4U1NaVFIxYVVMZTZwM2sxSGd6UmExSndwWVl6RUk4dVc2N1lnYitsZ3Y5bHRqWFlXcjRWRUNUTTlNZXg5eFJWT3AvNkxHU3luR1BFcFFqbFVrNWh4Nk5icjB0SmRQY2VmWkhheFRDUG05Y0NIZFVldiswYllDRHQrdzdnVVlxZmRVV3AvbERFRk1WRU1JbWRLRlIxN054by9Bak5jcTdGNzJhSTRGRWEwWllDbDJrWEtBS2xvaGdIQzRVbWV5Rlc5bFZqTUVWY3RjK2pyNFByeU9WZkIyWmdmQ3hIQXo2QlpueUVHV1YrUU51Mk9nYUlYTUdyV2JmQmlYcWhqLzBUMyt3THRqeGxMd3FmMXhsa1BLZDFTVUdpMXFGQ0FXZGpCZWVTSDB4WXNZaGwzTDE2WSszd2llVWMyUGEzNUVHZXM1YksyNUxUMDVnL1NKUHIwNnFkU0k2ek5FWU9XSGp4L0J0UkxUZ1NGVHN4QzloSlpDeDBWVzAwU2h4eittbDllUXZTMzRNZE84YkpLWmlzbGFKakM0KzFpWmFqbVhRVlU1QTBSeTF3bytXbldrZ0dsNHRwSmZOSGdwdzFsaTlwR1lSckorOWNDK1ZrYWhCQXU1UStiY0dHRlQvS3BrV3dsVFVMZy9naG5VQ09ISVgyaFdvZnpMTkdFZHZqY1F2MnprZ1ptUldlc1oyak4xYjVrcDFCN1c1MlM4bDZHY2dOckNxUUdHOFJlQXBxVlIxN2pjTTU1U1hTYVk4TjRiUnpFZSttSG5TNGtxWHdCdXJ0RlpyYXBnUUNzajZxSTExZTlqbUJTZkpmMzAxek91VFhqM0NyMDlTYjFZZ1A5ODNPNzh1NHhVSXhnMmNTdFJZWlRzN2VvYTlUVXJGVkhwQWZBL25BNC95NGJLQ2RyTlhLMXhKZFBOMXVqVE1TQVBmVCtTQW9PTkIxNGtFMGp5cjNPQlpESWdTMFNtRHpuR2k2cW01Y01CVnRab3RPYm5RNWtmalJ4dkh5V1lLbUQ1MzZYQVNWUGRtTzd5a0c4YkI5amRnV0RSTVZwaTRob1NJUUtLTVkzajlJbmQxc3ZDTHNITmZwM08wTW5JeHF1RXlWa3Q0UTNremtZWERyUWtTdE5kNEgwYTNOYXRHUGdheUx5NXVrM3AvYVhnWkRnaVUwaFRiUnd5OFBBR1EreGR5d0ZRc0tTYURvMythS1d0MkhhSkFEbm9XWnRIdkZFdnB5T2o0QmFkUXZUVkhnMkdESjlSMTlmVzdJZW9scHpCQlgyaEJ4RzY5a0w5dXF3R1FMSFV2M2E4WUVNVkptdFVOS1YydUJ5eGI4a0FSMG8zVVVlc1BtZUU0aEsxM1RqeHNvOUdremVtelo2VkVOWHhDTlZoazBIOUlCaXp6elJYNm9vOHZTOGc1SW9odzJmUkIxKzFHUzUrdmUwOUhIZjF5QXM3bFpJSkpKVXdmRG5lZzFvZWVWaGQzWndzMUlqa3N4c1dVTk51dmpyOHFHNXllT054UG55QnJJQXFWZGloNnlwWVd2UTljZzVPZjVxVmYzWUhWRjhxa3Y1c09JNGVmbnlGVGRXY0FlM1ZzdVMxM2xxNE5qSjBxanNnUmMrVGQxT3BnZFdSK095NUpLMC8xRUt4QnJweUxqQnlrZzg0NVI0WU1PcER0SzJ0WXlXNTloTmlzazNoQ2ZQS0E3MjRuakhaelMxWlUxYXhxK0JWdzVtdmhiYVB5ZlZtMmpTMkduTWo2SEQveFQ4dkFqUmRWMDRydTUyVlVmRFdRRFVmbXlNM1Mzd21BTHVDNVpIT0NkZW1vODU5VUFBNnQzUzlWRy9Fa3RhbXZPK3BaTUNCRU5WUjh0eDVxWWJCbkVVaUxDWmZkZHlGMXFNaE1VekFlZFk2ZVNKanVTRm56ZldHNUdpU2hQOUpuaGpOc0pTR1BiM1pQZlpBYkJFUks4YTc4TUxESXFiR0tyVDBiWDN1TW1uSW16ZWlKa2NNNVo2NXUvNGVHZTEzcVVmbjFNM1JSd2dGNWRoaks1SHZxZGxEelZIaEdpdXVkeTNpS0w1YUpoN2MvdmplSWJ2SFZ3Qmpyd2F0dGxvMGF4ZUowb1lNcUFKL1lzYlV4R3dBUk85aVpDUC9MMWM5eWJZdUpiOU5sSEVyczNWcVZPY2dKdmVqckJPbmRTbXVFcG83V3lMTVNNVG5nNEphbHlyU2pQRVh1bURFTyttb2VmWlZ1eXMwbEZBQmllOC96RWJMRGh3UlQzdG5CYU5mbFUwYzQ2WDQza3REbUxxZzZkcGNTTG9iTGIwME53czNFWHR1K2p0U095d2tXVk9WUERXTkgyd20vVXVwSm1JUFFMSktoQ1pmL0pUbWtlOVUzNlIyeVp4SFowU29iMHZNZ0NSV2UvbjNiVFZPNENmQUVZN05Ba3Fzemd0RnVqTS9vT0Jab1k1N2RUZFBHRmkwSXZWcE9PZFhQQWd2ODNORnFsU25XYS8zUkxUOFBVR2I4b1dvWkJGdXVmd0pBTE5RdXZPVHdlMHVUU2IzYmJwNFFQeERycGFGVzNUbFRoajBtekNWN0tJWG1oVy9JYkdZOGgxaENoRm0xeEo1U1BIcVZ0U3VLcmRXOVUzTVE2MVh1Y1ovR3Uzc2cvNEQ5WnZJUHBYZnJCbzVjZWxhcEs0NUtteXNwb2htS3M0WEI5YzE2TFgzaUp0RG00c1ppY2Urc2hGL3l5WUdaVm5teW4yTDlBSno5blVLQW9BMnZJZ1dSSXh1bTUwQ0pGUnVzS0tVajloSkw0V05YV3U3VVJUSEVyR0JYTmhRK2c1c0x0YUk0TDVKM0dhYmtHU21RdEZSdExnQTc2YTR5eU1hamZUV20xako5S3FYeWpWcEs2eWF2N2p0Z29tVlhpdTZPUm1TMVNFWXBVNmJnZGtiOHBlczhPcDhWaFJaekxMTjd2aEt6ZnFuUllVUWZOVFBKVDMzTTdOc1pZUFZZMUR2RU9aK0o1TU1CemFhbHZ1SGNma2cwWStHaFNnWWh6d0xUQUpqd043K2N6aElZb3VyaUloUEJUMW0rbU1nSGdVNHBoWUVDcHhrT0NueE1TLzIrSHpreGY0MFNuQ3RjT2pOaVFpUDR1TktEMEM5SW9DM0dCRUtkWFlBQmZxdThLVkFqWDIxZEVJblBIYXNhWjFrZnhacndTMWg2TnRhVnV0czB3Mmphcy9CVHFtQjZQN0x2eXZ6c09LWFRydlhEdVJIdzZvSDk3K1hPRG9NV0RpVk0zM3BXRkxrZ1k4dXpaL3FoSXc3ZGFSMXJiSHREcTdvSnZ2OU0waEh3WGtuRWVPM1crQmEyUS95SVJIa2wvdFJQTTJjNm9UUmpwN1RaT3RiU3JJTXBqQjdFNVpOL1JzRktJMVBha2VZWmpqcTZ3c3lWQWJLZXVUQ2t6T0RIRS9wYVIvNzlmWkZhMDN2aDdMUzlVMi95Nkk1cGl0eW55ai9MRnVIZjZrdnZPTnpwWUd4UEs1QklsRUtoejVQZ2w0NEJQMElxeDV4TmZKdkM1aTYyZ2FNWk50aVo4emVJRWx2SVFpZ0hoRWtWOWVCbzVjU3dUdldKd25IQ0Z3Uitrbi9meWdaK1U4QWprSGZiQm1CbTJIZ3U0VTJaYWFZQzZ2YTFiQXAxcHE3SllJUURYS1lwQ0U2d2JYTE9pajVqdWVOVG9WUE5ESUJsMXY1RmNPanJOalpkemIyMGZuN0FEVFZ3VE9uRzI2UDlJRjVmWUJidFM5TllBZ3lSdUd0emhySjF0SWhocTVYamlWU25CTnY3eDVxSHh4c043U0JsMklIZ3RFa1BxMWJDY3dzN0IxUktCLzEreVVzY1lRMHc1M2JoUW1ZSk5DaTBTeXFjdHo2SmZIZ3hqS3FudENuZWVJNXp6ZDhZZmJLUVFZY2NoOHNTWWNtVTB4SHl2RTF6d3QrMGJtQVBmYjE2b2x2RiswQy94UmpzWjZHaFZRU0JMNEsvdk9hOWE0MWZSS2x3eHZqYkxxS2hUSXpxN3ZwaWNDcUdxSmxhK1lrQnlmUG9vaW1tMjRYR2NOeW9rSzlsMDN1dUJjZzFoclZzTUJZK0RxYXBTaUVhRFR2M3paWFhoZ2I3RDVUUzZFbXViRURabVJ6MEgzKzA3RnM2UmZ5QXd5RHVSVmlzNGFUU0dXWEgzR0QyMjMrQWZWbW1EMCs2RUxHdXMvekpZdTdhNnpCWlN4SUhLSVFUdk53SzlqTXpPRjgweERML3hIVUhnOVY1YUQ1NnJGVDlWSUhGY0FqNjhSZ1R4cTFlc2FTMERIcUppbFNrbnBwRlIycmoxSnM3UXVjQzVzNzErNko4NVBlUUxFdFFGRXg2MlJraWs3NWFpYWZkVG9HTkF1L1o5bnFPaWd0NHowMFh1S0V1bGwwMUU0VUlBWWtoZm5BNmE4RmsxZGxocmNvL2grckl2VFh3OUN3cm1Yc1RqRHRDeGFGVzI2TjR2L1pQK0k4YkNENjdWQ092VGNmMjBvOGtMU3hsOFNNVDcxUFVGTHR4SWNtSitsQUxBRE5mSjFMa0hMR1ZlbldCY1ExcExmRWpwZUFPSjVXekh5WEZydGhpRFdmcnEvUldOb3NWWHVjY1E1TmJIRUc3WkFnRGs2dE5oS0NZcHo5L2hDTG9ScmVKRFNNN09wbU1jTDhhNC9MR2FUaENITnlPSmFDSk9NbFdOUGFGTzhDb2wrMDJvSW5wdUFmZENRWFlQS0tWREZFVU53eVM0VHAySWtoQzVHaVFtcWdMUUYvb3V0Y01xbmxWT2k5WWNNQXdqdlpiRklDNVpnTktkOWxiRkhlNE1lVXgrRzg2WkpqczNOUDRsNlRYZE8wUVFsakFRamNZTnZRN3djMU5LTVE0SS9XNlpEdGNaQjZ0ZSsrRUVaZTFucG1nd010azNhOGF0alUzdmR5am96N00vSkhYbDlrdlQ4SUxyYndhSVkySjV4SXZDb3VnTGl2ZzZjSXA4bzVUTWI0Q2tNdmpxSThDR0UvVlZYM2xQbWk4MkptQlRhc2FOVFl3UE5tNVdMOTZHT3dIendqZ3dBOUs5ZFhSOGhmN01zbDVUUWxBdmtmSlFrcnZVbjhVZzlUa3RGOUl0aW5UaTJsb3htdW1TemV5LzFFOVEzK1VyWHd5OHIzQTFHRC9pVkRBVS9Jck1iZGRYNTN2c04xaElQVWRiN3FEVkZHSGtNUkd3b25Ba1pocGxnOGZNUHF2b0EwTXYrQWxLcU1POVJidnBFeWpzV2hqNnh6NTZmWDlnbDhGN0ZMM0VRU3pBcmhaRDdDM25EcEFldktUUTBQR3IwQkFNS2l0cys0UUQwdVI3ZlRmV1hHSGY4NkFENldZSGEwUUtQMGM0M1NqdnhzVXRGUTdxQUJvbjF6QTdFQlBaS2ROeFd6UkdUYmFWQ1BqeXhsNXJISVc4bG9qNWo2NFZxUzE4dEp2emhBMDhJSDZ0UENKTlJBTlpaV1BYOEE0RFRueFBDb29tay9uRWJ6aExKWWRQb2prQmhrN1JNNXBOVzdLSUdhdERodzRzRUpxYy9DNGE0QmQ2YTRzcGZ1NWVtajBOUE4rNlBKTTFydllIT2R6WFpubjcyQTNTcjRGbjVhN21xdDZOQW1uSEpEcDMvY0k4cHl1YkJXZExNV2ZYSHFvRkZoSnBlTjJkdlBXYnd1ejVIU0UzMWNHOEVTRjljVzgxRVdTMU1xMlFSTkRBdEpIV1hRNFdtSWJldDBYU3FNTjdYY1RUSmZzNnVJenpvOXFGRWY5TlpZK1MwdHhjVXdMQUthZFpMMktONE9UYjJiT3AwZE1EOExPQVphU1FGZ1BlOUdyb2kwZllUSEdOVndrSXZqUlRWZG5hTkdSeWY3K3hRQ3g2VnRGMGx5Z0g3SnNXdGY2YWtocFRYbFVZb1l6d2Z3STVSRDhjV1RkUjd2V001WWVrVmZEdktCRXZqOVhYcmVhT2hNalE1dXZDZVc1Y3VzMmNNOUFGZTRkaEZqc0dodFZiSTAyYnZuYkh6V1JOcDcybjNKMjM5elNYcnU0cWxOTDVjVndZSDZ6K0hueTAwUlRVblc3Y2tDZjZzUEl1cjB4SXZpQWI3dWQ5ZElKOGRtTEVrdmRMaTdqSlA3TEZaNXJBcXFpNUZrNW5nZERqMW1pTVpHWG8vWWdZdEphKytiZElzNjZsYUNCQlFJY3d2MTV2Nzlna3RUN1lmK1NoSDZveWFocEVGZDM0cVpPVy9sYmdmKzZ6Sm8xY3lOdFRQOTNhUkdhamxGUzhodzRDanc5VnV4UldnbytKT2F0TERIanlmSlhlZjVsMXNzaU8yUWp0UDhzL0xFNWZuTm1TcHJxWXlqdDFzQUNiQWk0NE9PZDllanV1bGdJY2lPcGFERjZDdURsSDFsaUJFbXlOUVlVZm9Wb0t1c0RaZGw0Y2lBYlBtcytSdnd1TmZxZHYyNjQ3ZHphc3RyRVdHMjZWMHloY1FQbXJXM0g1QmRJU3NlRjh5YUJEQi9Fc0tTR0RCcDM4SHhpYWpSOHJOUEZNYy9pbUpBdmRCRjJBZEJmenowK05sZUlZaElPN3VqckpwT2w5MXFnTitSNjM5enpUTDJ2SzJ6K2RSV1ZGTFVaTWVvWVJZYkE4YUUzYUtkV3JodWxsNS9xUHRyKzNGdm4zK1FEYzRoVDZWbkNwSHBzaUwrdDA5QXUyeFBzbWEydklDazlRTis3c3hGTHMrS2ZmUWdWTEdHRG1RcDA1UVJLSllKNXkraVBPUVZENG1tZkVSNWtwZE1UbS9tNEgydFBrajRZUDJyZGVvV3FZZ2gxZHcrNFQ0U2t5YUdISTNrWFM5M3dlc1QrWFppbFJqQVBTYlo0cTNFNmVXUVJ4U0dabi9TYlFwai9wVmJMc28zbGZmVTFwSmwxYUFTZEZudnlLdS94cGZDYUQwWHVDaHRSVVpzb2ppN3hFV0JTZ1FQR2N3U3pLdTRidHM0LzVhYmhyY3p1YWJSRld3V0VJVjM5b0lqVkNhYUgvMTUzN2kySi8xallDMHg5c1NGWlRDVVMxYW01V29WRmZmaklvSDFGSk5Lc3RMK3F2OGRFdDNXVDhubzh3VFBJWFVlVCt3elRXZXQwSjB1akNLSVgybTEyc2FXdHM5MmtlUkF5TGxDVFpKcXczTmZlWlp4QlpjM3lMQ252OHhvZ3JkWWN6dWRkRXNad1loS1J0ZE0vcGtremljUzVaeGF5T3VIakYvcGhLeVA4dkxUdGsrYk45LzFNNm50L2wrdTR1aGlvV3NGbGZWa0xpblBkZm54NFB3a1FWWnBUVjVNL2JqMVhQdFczckJVamRIOUd3dDlya0w3SE1vUWowU0Y4YUNsVTU4dG11TUFtc05BRTZRcTViS3gyQk4vMjhob3ZaemJXL2lNYTQzenRtakFuVVg0bm5OaFIxU3RDeWN0OFRwZ29INzNFZHQ1dlZDVnhnb1VXenF0Sk1USkFPZEF3YzU5N3hJTWYxR3FLNmprMTFtajhXWFY5TW5IUWIya1J0dUk5eTd0dUNLZEZTcmp6SkttUFJBNnZBeDFJU2RwSGNDU0RldjF6SXRVOHBNcXFodVQ5b3J5ME9PbnUxU0RZUDhsVWlQNnBQU1JMcHp4S1ZROVB2NEJZbnB5ZHVOTHZXRkVXbkdFVVpPNEg4RzFuQUpUT3djRVJObC9TeFY3R0kxWGkxVU5Tc0hlaExPV2RER3dCK1lEbk9xQXFJY1FtK2pITFRWbGw1b1ZZbkxTU29NWktvTUJxbmxibHp0QmN4YURMVlMxczhCbStLcHhrcllLMlhqM05xTmpibXVXRG5YWXY4T0FCYktNVTRBWG5qV3kyeEd4TEVnOXNxU1dtY1JRM0ZTTndFeitEZVNtOEE5cjA5aE8rdnNJeWFCRjliUWJHRDBKWTZSRkJFMS95WjI2OCtJNW42ZGxRQ2F2eHR0ejBsaCt1ZUFlazFaWTlsK0xGVVoxYlU0ODRhVWdaamFrNndtcHl5Nm5zRy9yNWt0d3JCaDk3eW81WnFXWVZjRUIreUR4SHoxd3c2cW9lbFRXbU8wdmxDZVB2N2V1Q2RHZE9uVHZPczJjQ0xubyszTWNaZEtGU1lleHJGc0l3Q05Rd3VTVkZaQWpiRlRxMURlaXJFZHJlSFM1cGZRY096c0sweUhmQjlIRVZCdXErb1Erd1ZsdjZDYzd1bG43cTZDck5lRnNiLzlkNkF0TFpZb1dqeFVXZE1QVUtyd0t0SW14cVVGWkNyaHcxSkticUZaeExmMnI4aHZubnpzZU9HR1dKdTE1eW1LMTEvT3NWRXNaTWExaGsyTHdzV2FtZXhvWUdPa3VIbU02RDlvS3hCd3BCRGQ5d05XY0VETEJneU5LbmdFb0FrSEM0Rm5CY0xnQkxKQVM2QUtqVUlKYmxha3Z3Tlp6ZUl6MUNiTW9EcVBicHk1U3QvL0IvMHpYOFNLZmlac21TemQveTNoZzRVOGlQNlJYVmVGdm1vUS9PS2g1OVNVRnR0aVVOSWllanBNNjA5NnlsRFlQbXlnVDdkaEgxbTlpLzdTWHZSUHdqZ3FoNE43QVBWc2RKLys2YStmQjRYa1ZSK3Q5V0V3N1J2VkxkRW5mRlIxZERZSHJDdHlRYWlhMGxjR0xHVGEvejlxTGdTVjY3QVZJTVdJTC9KTm9rRGc5Wkg0WS9oV3RQeTFUTURRbkN5TXcvbTY0cytYQnl2SDAxZktUdk1aczdiMUNKcUE2djA3cThiUFh3UDR0cUIrRmhxU29yYy9TcEpjRUp6bFloQWtUbmdkU01scDB1aHBZVnJ2MFc1LzA4emcrYWhKWTkwOGlFMGdaVWNVT28wWGpKcEg3N3hhSmJzdEV6dFZlQk1oN0ozU1ZtK3hUcFUxQWE3YUQ3YnVabGpMQ3V1T2w2SWpyVW5vRlprbXBXbTRWWWRyT1B4Nk1BVGRxZEpQNzZMNG42NnhSZG1XSWNMR0N1b2ptZWs5cXBoMGYrbHJlRDJxTjluYXgyenpGTDF6S29wR1p1dTMyZGkzZ3hsYzNaUmd3aGJMZkxoWS9qREh1a2V1RExITUR4NWVUYlVkeXd1bXQ0Rm9raE4rOGFwVTJSRGk3d1YvMEFkejRKNjluMmRtdUs0Y3owZjJNSVN3T1orN2IwN00vQ2taL1ZWa2Z4amFvRUl1Q3hDT3V5SXJFbEV1YWxuUkw3OFRLZys2Z3kyOEJ3QTZMUDZPSGRyMVdZRzEyK2RWWWtFU0JHdEdoQjVoNFl2bm5nWENycUdnU0FYM2pvNXZwUFdONGl0WlQ3aFp2NGRSQ1BVdkkxNmtPMXVhNnFCb1VGWFBIMzQrRlk3Uk52R2NMSFNPSWtMWkh6UXZCd0JLNG40cnkzR1pNWWFCVlRtNExLVi81dzJzbFI5bDQxNzNCbHBtK0xEbkFON0ZXZWcxWEgyNS94NEt3ajYrTFA4T0ppZEFtMGQrVXdIRWI1czBocGZzcERVaVYwaTBDcU1MaFFLT2RrNnNrSDI1YjdnYlBkME5Ham5DMGliZGRzSXVMN2k3cTdDbFVkVWpFNnNJdlczaStEcXBRTlRZVEVycS9vdkVwbWhsRHFMVjdhUlMrd2dNUzVvc3hrbm0wenljRVRwYkRxVWNqKzVzeERzMTVJbkYxQ2FYTFp1ZXJaNy9hRUMzblJkRHgzenVvWnJNbzIxZTBmOVlMK1FyV3pCUmlKK0U0aURrQWJObzlpdy9oZlFlczhtN1Q2WWxvTWE4em5QQ0toMVI4WTh5NnV3UDFvc1A5aWZwSjZZcWZSMTRtTWtsR0k5RzdUUjU2MEk2djY5R1lGL29NTC95WXcxc285anhBeU9EZzFDZmhEaDZBNmt5OHdJb2FBV3JsSkZzSk5GQUp0ZHRDcjVJbWRVOVNpY1N0VzBXZWVFT2dwaEpCUUhweUFvZVhaQ1F4Q3RySWlXQlU1WTFJRjhyeXpVZy95WWZOdmlPM0YxNkk5dCtVUndybWx4Lys2OGprVjVHanU3cWxJd0tKODdZRzZVK0NpbEs4ajZ5TldidGRpZkplNnF1Z0RMRXVuM3BteHFnbzNaNGdQWGVpS2UwU3FIRy9GWnNQN0NlUGtUemhkZ3NlM1AvUm1zcm8vSnpYMm4yS044ZmdSYzZlSHgwQXU2ZkNOUjBsc0FWWEoyOG4rbXkwVVpPRTNweWptTWN6OXUzeHJJVHZnQ0p5VnJwRVptMDBhNmxQRFo3bFNna3J1bmUzcFhFdk1SbTdIdEFqK0FHNngzZVlBbllMWUlnSkxHMHROb094RjM4ZXIxYUgySjBERnBMS2hNaTNZamhyQlJGUTdmcFZxZDZ6TThOMVFXNUFxeXhkQUcrR2pZV2ZWeTJudlFwaWh0Y0dzeEV4ck8wNTlQNDlsb0s0WW9IM2lPRi9zS0RlYitEVEtUd0hmdTVGcXEyTDdLZnhpVmJzK043ZVlNOVNVZ29rdnkrZmRQOVR3N3ppSGxFQ0Z2SWpUZE1YTFdXaUM3UlBwNnFlUTJwbmxyREoxdlQ1dVFTWFc2TE9VZHE3bm1pTDVjUHErdHZ4YUt4bG5MWEY0UTkreUZ2eHB2dG9sVG1qeU5xcFpnRDNTWGFsQTg0REZPQ2h3N20wcE14a3UydHNvSzB4TjdPNU1sVUIzejBxeVRqYXF0KzRKOUgwbWNPVzhqSmdEWGhVaUthcVNpQzRCazNNZ0RLNVNTWVNQVGM4V2cvdDJKOFdHU2UyS1N1K3hKTDBiZGZQR2J1UUo2YWxoVnYxQUZTTHkzb0VnZ0lzL3Y1U0hzVmNub2NacDNFRDUrK00zL0pTd0ZvUk81M0VJYkZqVDc3VFBqb0RyNWlRLzFzQ2o4dUpSdjVmbHFGZUo5ekEvbzE5QlhKTGh4T0kvNmw5aXlZb0J4UzM5Y0tpUGlsVjN6c0xPdkh3VGJEdnVYMmkrODBXbG90RnhXVU9QZjIxMEFXeUxkYnhGUHlBb0hNY1ZIYVRqVHFyUTkxamhtNDBZZW4rSTJ0OWNwY25OZ1RTU0dlN2ZtY0dlS3pNcjlERkZ5RFJSdFVzWTRLUHNpUVdRbU1GaUdQYW45a05USnR0WkpBWnYzNHBuZUVCNVBnbUVCVkVEaklTN01mMzFNWWFkTml3QWZwSTZxZ0pSUlRrc09xWDFvSDNtR1Z3SDhrT2x0TDNXYWJObWRUam43UDNWQVBzQ2pJVUxmdXB4dEhQV2YvMlFBQkFCb0FRQUFCT3dCQUFBOEJDanNDQUFBQUFBRURBYmxBQUFJQUNRSUJBUW9DQUFNQUdsUm9hWE1nYVhNZ2IyWWdSbWx1WjJWeUlDZ3hNQ2s9PC9CREI+CiAgICA8L0JJUj4KICAgIDxCSVI+CiAgICAgICAgPFZlcnNpb24+CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvVmVyc2lvbj4KICAgICAgICA8Q0JFRkZWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I+MTwvTWFqb3I+CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L0NCRUZGVmVyc2lvbj4KICAgICAgICA8QklSSW5mbz4KICAgICAgICAgICAgPEludGVncml0eT5mYWxzZTwvSW50ZWdyaXR5PgogICAgICAgIDwvQklSSW5mbz4KICAgICAgICA8QkRCSW5mbz4KICAgICAgICAgICAgPEZvcm1hdD4KICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24+TW9zaXA8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgIDxUeXBlPjc8L1R5cGU+CiAgICAgICAgICAgIDwvRm9ybWF0PgogICAgICAgICAgICA8Q3JlYXRpb25EYXRlPjIwMjAtMDEtMDdUMDI6Mzg6NTIuNjcxWjwvQ3JlYXRpb25EYXRlPgogICAgICAgICAgICA8VHlwZT5GaW5nZXI8L1R5cGU+CiAgICAgICAgICAgIDxTdWJ0eXBlPlJpZ2h0IEluZGV4RmluZ2VyPC9TdWJ0eXBlPgogICAgICAgICAgICA8TGV2ZWw+UmF3PC9MZXZlbD4KICAgICAgICAgICAgPFB1cnBvc2U+RW5yb2xsPC9QdXJwb3NlPgogICAgICAgICAgICA8UXVhbGl0eT4KICAgICAgICAgICAgICAgIDxBbGdvcml0aG0+CiAgICAgICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5ITUFDPC9Pcmdhbml6YXRpb24+CiAgICAgICAgICAgICAgICAgICAgPFR5cGU+U0hBLTI1NjwvVHlwZT4KICAgICAgICAgICAgICAgIDwvQWxnb3JpdGhtPgogICAgICAgICAgICAgICAgPFNjb3JlPjcyPC9TY29yZT4KICAgICAgICAgICAgPC9RdWFsaXR5PgogICAgICAgIDwvQkRCSW5mbz4KICAgICAgICA8QkRCPlJrbFNBREF5TUFBQUFXN1dBQUVCQVFBQmJzWUg1Z3djRENBcEFVY0FBQUFBQUFFM0FFQUFEd0lBUUFJQVFBSUNBQUVCOUFIMEFmUUI5QWdGSFFFMEFaMEFBVzVWQUFBQURHcFFJQ0FOQ29jS0FBQUFGR1owZVhCcWNESWdBQUFBQUdwd01pQUFBQUJIYW5BeWFBQUFBQlpwYUdSeUFBQUJuUUFBQVRRQUFRY0hBQUFBQUFBUFkyOXNjZ0VBQUFBQUFCRUFBQUFhY21WeklBQUFBQkp5WlhOam1jb0FBWm5LQUFFQUFBQUFBQUJxY0RKai8wLy9VUUFwQUFBQUFBRTBBQUFCblFBQUFBQUFBQUFBQUFBQk5BQUFBWjBBQUFBQUFBQUFBQUFCQndFQi8yUUFJd0FCUTNKbFlYUnZjam9nU21GelVHVnlJRlpsY25OcGIyNGdNUzQ1TURBdU1mOWtBQkFBQVVWdVkwbEVPa2RTUWxRd01mOVNBQXdBQWdBSkFBVUVCQUFCLzF3QUUwQkFTRWhRU0VoUVNFaFFTRWhRU0VoUS81QUFDZ0FBQUFGdFhRQUIvNVBmRzZBVHppTEU4bkJvL1o3cURGOEpubUVua3ZsTVpzK280N3RLK29hdG5OdDdQSjBWQWMranNkSU5jQnRHbjgvT3BFNWtlUkFUMHc0MVF0OExnSUNBOHBCd05EanN1bzhZRGROV2VoVXJpVnlkN3k2QThTRFpLWlBYOUZyalJVbmMxalp6OGlOdDJodUEvQWhBT0Y5NUpHNW9Samtnd0tHM2lTbGtIemVwMHBGRGFjTExCSGEzRjFueWRYRi96cWNUQUhMU05zZjJmYkYwQU1pbUJFMlNYYjk3MHNFblhBbFlTbi8xTGpvVlFKK2U1TU92MC8yZ2NEQmUya3JGdGoyR0Z1UnhkM2JpUXkzK3RyV25pME9tRzcyNXhEZ3ZXSW5tTzZZQTdJdmdwWlk1bkV4L3RUbDR5V2JtU2FCWm5SRHVjektpb1VvVzhkbEFQdnZZczFrTTVKU2ZKN2FsRnhOcW1LUnV3SkhWNERHTWxRQ280RFJYN0JLbklZS09lalBxNkJzY3RWaGd0dHVKdmxvWG5wekxsTFlTaUg0SkxmczI3K2ROdTJlTkF2R0R6TUpBMVJoUFZrNXdQOWlUL2xHK3JkS3EvRzMrTTErUWVuOG8vUklsZUdIWUU5cnlucXdOb1BvSzVXVXB1c0lUcW01MlpLRUZWeVowYjFmenZjNkM1M3VRMXdaeGsvOFhhaWpnT2c4M2I1K2J0c2Yyc2djUzNwZUY3YVZIdXdPS0FKN3dYZ3RDekVQei9EWG5ydFVxdEJwaFFXRTJHMU9KeHM4QmRUcWxtcXByYTdvNkgwbk96Zjc5REZlSU1QajI5OS9QSk1ZMVdNWmNGNWhXY1RpcEhzenpjNXRzczZudW9hZVJHU3pEMjkrcGxuYzdSWFpWZjRPZTNGVjk3c1BxSXArQXpxaWRwTWhsMDc3cFlxMHVvclpQWXpPdHZ4elVSRW03anFGeHkrQy9yZjV2K0FXeXRRd1kvQ29qa05INHZhSEQ0QTNzUXl0T2tSei9YZWFScDFtdWdHQ0RmeWdIZllUWWx1Y0d3RitjYXNmVUVuNktsMnorajUxbE9yN0hIWkJZTHNuVkJ4c0I2c0hxcDdsVVFqMmtlNkZWVzJldFE5cjgya0lBTXdsQllhcXVKMnhETDd2bzBXSkYvUGdTMWNZNUo1TnRBWHVrZGNIazg1V2Q3QndwVnBEYm5naGs1Smx0aTJsVUVjQlZDRzZCVy9WUHY2UjR0Tmh3aEMwNDVXUmc5eUppdjNFdGJNTWhXK1RwTUkranRrNEpDNWpuYms1eU56YUpNY20xR1J0SGoyMUhPUmFKbUtQaDNXdXo2clVUQnhLZC9OS2ZlV2R2TkY2ZElPek1EQlgvZGQxSlAyeVZhRmJuZUs3MFh0MnVoSVR4VitGU2ErWXY0UHI4ZXMzb0tiZDlRTElrck56dEtjYVZVbUxmN01udmNmenZZL0tUeW1ZVXBnZkwvTmtyTnFZcVkzTitOSTNmY1Z4N0E2NnZ3ejNoSjhETHBUODNCU0xzTm45NEcvVEtNY0c0NTZTVXRIazRpN005T2I3eVBzT2ZvRzI1R3hLV1ZMdmJ5UFNjVVNDV1NJa1dMdjI0UWlyaG1hdmwyVEF4bnpSQ3k4MDZFZ2Era2paRzV6RDhnemFaVXZiZHdaN0dlZ0R5eVlld3JZejBleVRZU1N4bm81cVRqTjBua1VWSUpLblYySjdmQXRBdGp3TjVmUWRENUF6THlxdm5pSHdpa2lSU0hsRGhaZjZmeDREOHlJZktrWDBxZ05RbkY5aG5ON01keU1aa1dmcFNCN2FrOTF6eStoNldhOHBucUdBVWdPZEVaOWw4VTd5TE1wSEo4OTZqdXVyNDB0N0VjUFJYZldYNStlckVWYVd4T3kvalBaZ2xDakRPL0Jadk01K3ViWDFZYlV2Q0g4WUJ5ZjBLenY1Q2hMejJJNjA0WWVnS2FJRWtBZXg3aG5XZ2pSdExnZVpOcDFvZzZ0QW5xOEN1T210dUFPTVNUN1dEQWxvdnNPWXZiblhDdzNydEtmQ3ROWUZDdlI1c3IrOVVFM0x2RWVXVjJOY0w3Q01QRDc2ZDd1YmZxTXdnRHNob0VqUlgyL29VSk9kQ2ZHTC9XSCswMkRYUHVmeFdwdkhXdDlUckcvSnFoZmhnUERSNDFTTm5tblc2aThuM1FMTUNHbEZ5VDQwTGdQeDc2WUFNVDd5NTZPRDM5aldOSXZsZkNiM2tzc3JCcng4bFM1dVdyVEJwK1VpVjV0NHdxWlU3ejZhWUJMY0NudlFmb3A2QjdJT3VucFZtQ3FSNmJSNk8zN1lVVXpuWlcvdWhhQ2VKaE55TjNHMURSdHRmUE1oNkxpWWd1TlRwUVpzT3BiL2JDaTlCKzRHLy9tVlpUMEpVdGdGcDlQeS9tcGhYMnZLWUhmd2daUUhRVnZwV2JweHRRWEw2UHA3R285a0NKZ3NFSlhJQmZoQWFWSDVCMGQxWXVvSWFKOWFEQ1RkRW5MNXk5MCs1MFlDaXB1cU1KVTEwV0lKK1ZWUHB1S0VseC9STUtLSkdvWm5JS2FsMGlGWUlGRXljYkg1TUNYd1RXWkNxNjhLb2VoNTBLcWpQdjA5RGRIejNUM1hyZWhKVmJnb242SzBDOUhpbmdtVFd3QVpyV3pwVVVFQUFGWWJKSzVQek1SeXoyUElSd3FkN2R4d3JMYWk2SGhkaVhCc3JRQlAwaGJPUkhMQ2lpT2Y2d3p1MnBRcXBsUGJPamNaa3p2OWhLd0NNWWNuajA3K0J3REI0bm9wRjYxQ2t6UEhvMU9XWkhKT2lKVHA2RFFjSUZlS3NaMUd6ZXJWbmZIaWd6SjF2L2ZaeXg5aG90N2dyMGl3TDgxcFprRVd0a241aGNwRy9icVk3NXBkcGoyZjgyUHhQblNjZDFRbytqUlBYOU4rcHQzV2RDQzNjZTEyT2M2eTdsVXJ3NnVYSVF0VnozVmdkVDI5TzBDbGgydS9Sc2xaVHNTWmh5KzNFell5eFlySm1DQWNxRHM3bVRzamZJcFNtUitCeTE0UEEyM2lJK2dGa1AvQkVtWlo0REdGU1RrUTZYN0ZISnorTjFQN0dBNjVIejBLVUMwaFNYRzRrZTBiQTdXcW5vRENVQUZjMTJJV281NDhnUU56MUV0MU5nbkdNanJIaXM2QW12L1ZiQTllamhSNHVMbkczZmlndDFkU0ExbnJVRjNNVGQ5NnFQUm9hS2w3ODEvT2pmWjZmWjg1anEyc1RoYnJQMEVGQU9iaVlWSTBFSDNHS1BrNG80VWprTzVKaktyelNVUDlsUHpoa2FGZHhOSUZZQjYvSjI5RDZJc0pmS3QyUElVQW5JMW51dW5uZXlGQlhlZnl1NjhDZjdISk8wSFVNbDVIMFFqaEVOTmFhc24zSlNDOTBKS3Bqc2FVTXVVS2FyMmRUOVlwajVyMjlQRmdWQnVXYnBTNVdRd0VkU21lRFVKMFp3M1lyMU1NUEFUcndWRi9KS3h4clk5WGFRWUJiZTlrdlNQMHlwemgrSUdyZ2w2UEp5N2dBZTBJVWVjR1FyRk8rZlY5aDFmNnZiZjMzTEdydUlmTHFJcGlRV3JoQTRNdWI5c2I3UTN1bTdkMXJzTjFZMkRwYUlXNXk2WFRkMTB5MXpQZStIMCtIQktFMWVPeGRzcndUajg0MjB0MVNXcEVhSEVtcnFhTXhyc1Jjb3hMa1NPTktoK1lJSUUrWlFiNlZUUm1FYmg1Yks2dVQ1bjZUUmYyRWd0UVV2VjhqSEpsdllqbmRKR0lWYWZzV2NkcjFva2VvZ2c0aElJZVNzSG4ydU5DSm0vcFBoL2JVUFhRTnNBQXdzYi9WSWQ3eTBFMjNKNzFqSHZXckxKQXRYUDlWS3VwTjExZ2F2VnNROU5IOUxaYXcyVDJ1U2RRMnVKSHJ3QUN2YllMUGZpR2VDTjNFZDZneE1menBsZ2dBdWtjMVlkUGh3ekFmMk1aazhZTSs4N2drWDVMTC9sd2hocnUydXBjWHkyMUNtRm1PN1lSbTdRZlFtUkMxYit0ekFaNzBXcktTOFlHYkVWYWozSWRFckIwUU8zU01SL1QrYmRDbjlqZ3JBZEN6YlJxR2VEUVZ5OUJkejg0RUpaL0wyQjN2Rkl3bm95YU1FU3gxV0ZyallXb3V0NjRsQlpxOW5kazFMVTFuWVMrNi9qUkxJOThVczFsWUtuUzBGamNER2x4UEZXRkpGS3BkSjR5VkowSjRQSVMzMWdDdUF3eDh5RzA2QjFQUVFxbHVxT3BHRzBRZCt3bXZzb1pST3JwTElKSjBaZ1JybkMrVk11WVBZYlNxRHJBQVROOG5hNHJEQTJJRlR5Y3BiZDBhTG5sYk5aYTI0WE5PT24ramVGVE82ZGkzV0liYWhJNzdDNzRONzU5bjdhRStpUTRsQXlkNHc4Wi90OHpQeTNFT0RNTmkva3VNdTRYSHdFZ3JtNzFSdHFjSW9hZi9TQ0VkL2FGQ3NFc09NUHRxMmdOQ2lveTB3RlFkUzJGZUczMDA5WlBiTTEzV3BxTzk0MUEwRExqNlMvbU90RmF6TllXVnd5OXNBNmRjbWpseE84VTZ3R1IyZmRkVENsVDQwT3RlUm1iVlpVaGFQSmxUMEtYRlJVRzNSOUF5MUkrWERSYWpneWN2SnNmNnRvRVhha3FTNEhwYzd0T1AyRnhZNU55K2JqRVpyTTU4aUtXYlNoNmtKbmExbmZpT2ZzZFJwTC9tek5mRXNyVisyUU5NQ2o4Yk1Ia2FXK1J4d2pjSk9HTjBNaWlzWVdLK2Q2S1d4T1M4MWw3VG1QZnc1RlFWT1hBWGRHYjNlRnRNTFZyMEpVcEtsbzN4UFFOdU1RaEs2Y1ZPaE5FRmpWbi9MS0xHNFNER3E1bGFXS1RJVC85bG5HenF4QTd3M3RCMk44Y00yY0laU3NlUlVjYjBjQkp4Z25Ma0MydUxSL2RxQ2hJdzdIdGc1MXpSNFh6Z1NRS3YwVzcrL1A2ZGRJd1Y4eXZrQlBLWkdFbUFPTmVRd210WnVjNW5xbHRtakxGZGpSQVZLS2FqUnZzOUNubXpUQlllU2Q4ZGUwYmtVU1VPMmFpSGtCQXBQVy9SVDA0U1lEa3FmMmtScGRGYXZwK005YU5DWmxhSFFJTDhYWlZPbTlGV1p4ZTkvdGZaYnIrUExybWcxcnZuQ1A4cWJrOVJ3M0MzSnRkYU1tSW4wNnRPOWJSbURuY2NEVHYrczVyOGd2T0NsUU10QzhIcHBIMVBCdTh6WGtVTUFGd2poRkNFaFBib2VHTkNWek5LUHQ0b2ZSUkdURFpjRW1BNFFMOHdUcWZtcFFyMGo1QUFqMnpEZVdDUEM5eTNRa3ArKzhmVVFzeS9SeFBKMm8xU055d1lWY3E4WTExdTYwNDZ3d3dVZlF3WjR4a2dmN0FRaXBKT1h2MDlYK0ZMRFRoVmpMUjlyQ0wxN2pYY2Q0Q2M4WGJGbG5ia3E2Z2ZCY3JVRE9PSmwzUXY4aUNHNVF0c1JBS2pOU3NVREQ1L1kvMEdpNzhjSmhYOUNBSUZTd2xHeHN4bGpmMllRMDlSVzloSWlhcWpuU1BXc1N6ZHZXNzIvc0hZdnQzNEI5bjZBZHBKczEyK0dwL3ZzYmx6aTFFOUdScURxeFV6cHV4ZkoyOEYvZk9uSFNuRGZoTDZtWDF1RW1MeWRxdEFJN2dvWXN2b09QZktvZU1kcXA0LzR0TXVUTkZzYTJNTmJybHl2Wk5nbWVrTnpjWDM5UnVDdWhReFpsOFU2OGVMZGJmNy9vUzJXa3dEZzdiNXlteklBNmNRaFZrSlp4bG5xOHVFVEJlWXZibzZzeWNzVkloc1ZnSVFxVVAyTldwSlg1dWFPcXhsalEyeC9wdHZSYnNQK0QxQUx2QlZSSmhzWS85RXVTbzd4Zm1hVEVSVkEvMlN1RTVvcmdORTRjd0tXeG44M2tYN2ZRQWkrek5Gc2cvM09aNys2MjNTT0wyN2gxRDVWQmNvU2ViMjN5bHNCT1hVSE40UHM4MmttTk90Rmpmd1FoYXlYS1orRUNlME9yT21YR3lUcnVuTS8yelR3cDg3a3BvWnZqODg4T29sRHVST20yQVRyRUlIR3NhcGZhNzh2M0NLZU1XNTYwdVhpMVA1YmR4NjdGRkhtK1Rjbm1JRkFvckluSWhHYVFMTDdubUpldjQ1eHpMQkN5QVdqaXJhNVZPckxTaURDYXo5WTFOeFdiOTExbm12RnYwcVAvU3FIOVpZUUtkUUkxN1padS9LSmFKeUlXMzVNdmdrcW83REh3QUw0MXNOZWF2d2IvcHk4T0lBY2JjU3lRN3dPR1NyYmcvNnBJcWpTUVU5YVdiZjBIRHFBbFMvQTV5VW9FSEJzK1hBVElaMGZQOEc0bndhNy80QWUxSlpPaGxFMU1XUmIrc3VEaGxqSGNyVXdMekRXUGdwb0pPYVN3QlhwS1lUU2JUZkJTQm00b1RrZ1JTcnpyeW0xak9MeUlvdUU5bTZIcXl3MUJ2KzRlckFMbC9IQ25POWhVYXJ5TXdaZkc4KzJRMnlZYUVoRTVoaVNwWW93ZlFEOFZqbmxIT1RyQkUwTTZnT1MxcW9KSGtaT1ZZYTJZZURmOXBiaEpUdFp4UTZJZTJlR1g1dEVPN0R5OXZEd3VJZHR2YnZMUVZMREd1K3htZVVNaVh2ZTRCaUptbURKN1BUdGZGMDNIeW5vclNoWHpLc0NFd1VGUWFldEUzM2Z0a3Y5THdobERPb2JRSnNCMVBrbm5GU2thM0RxaTJuTDFhcERZS3lhNmdQaU9RTUdVdU82eFJxWmNTbkNuem0wRUhYME0vOUtCMTBPSmZtcCtnR1FZSlErUGVHTEE1UW9JRVUxMUhqNUtSeURaREJEVzdSUldnemVsRlF0aDBoS3dTcjQrT0syNHk5ZGpjZUNRaWhGa1JUWlMybk91VG5ybXRlOXo1NHRQMm1CTjdLVlhQUUQ0V2YyWCtvaWVqeHhqL2lwQm1Paml2Mkl4NVBVa1d6MEpBSXlvN1dJbUdIbmpkTUtSZG5lampmZjRnVUxtOEZnUzBqKzlZaUlnQXFTbFpkTEMySWxkWXIyL1ZMSkh3bW9FMnF6a3hWS0tSdzJNQ1RXcElLMUprb2pLc1RmZ281bTladElzR1o3bHlDSHEreXErOFdMSURnUmp5R3NWa0ZXbmpuTDMrNmNWeWVWVzg4WmZhUjdMcTB0ZlpYVndLMTRqcjZrajFDUnB3T0s2TUhVb1VFVW42N1pyeUU4QnFTU2dKLzZvL2hmOXc5YmRQSHF2cjF3MStFdFFVYVJnNHJzSTk5R09UZmNJN0FtNWhTemlXeXdQcEhxSDBhbldRNlRaUytHWm9tdzJ5aDZCdHkxd3RPNGxyL2QyNm9ZNDY3d2V0Q2syNWZ6ZHZReU5TZllCOTRiZTJ5c3F1eHZ6cTRaU1NGMGliL0tiaXk2cTU5aUtPaWg3VnlUcXN3UkQvdHBGU0JEdElvbk1ZVFM1SExGbnJMLzJHejBRd0ZWZ2w5WVdBVzcxZ25zR0dFQlJvN0dzQ2RXK083Y3oxWENrd0J2L0o5VXNmWis2bkZpWHovTjlkNjhmWTJjZS90dkN2UnBXdnZrRGZkZ0tMRmxoaFhDa0JYZ1JLOXEyeDZqaXlXTXJFY1N0UTVKeElpbnVqbTJ2Vm04VnNOYzNFUUVOMERtcE42WnMyN3VVZjFnL2NRR2NoYjQ3ZmZmNnBHTWJLME9mclJlbjlpbWtBK25XNkFQL282UXUvNFBRVXlzUmNIakROcVNRSENpbDMyc3lQQUF2YklsRzNQdngvVWVxQ2RRVXljZ1N2UDVCWlFJMGZlRUJWaS9JTlIrZ0doWlRTaDY4dHU1ZGdlZXRhYkhzSVhVSlpRbmNXUVV5Y09lcTNtcms1REJPc0hVblBPckNhbmIzdDd6QkNUR2NTZzJwamJYVFllK2FSUnRlVkhxWklOZm9hUFhBRlFHNXdRc2VKL1dHVXcvam85bHdVd1VydHlzSjVFeWRIaDRyUXlxVjd5NDJGTDNRcDBWSzhrcjNncDZ0YmtCZW5KQXZFZHU1bit1T2htY3ZPcE1rR3F1bWdXQmhOSWJqcVpKUHZ1aWUxdVVJY0cwU1RTYzlVZEMvdlN2SkNnTnd2V1h1UWtmR2NqU1hmQTJlMUlyNWJlaW8yVElPcFhjVXVaMmRSSXhDNDg2MUk5R3BrMUE4MnpOWXBrSDV0SjM4LzNlY0lhUXRtTnNjSzBUemZEOHJYQkwvSjhTbU9JUEFQcjZ3V0FGbzFTcTF3K3doa21qUFMvdXNiQ2xsVXZHcGYwQXlWdU1Ldys4eENNM3BBemhDRkxmR1BISlRTWEJOaWFkcmdpNDV2L2Q5SHRkbFlwT1pKdkhkd0dmKzZ4N0VFUm13d3BiL1ZsR3hLM3BsdU1INDUrUFpZYm80ZmppenRRcUoxVFVPQ3FWZXVBUEgyM1NWaFkvd0MxcEJoSjJYeWhTOCtHZnI1bGZHVnM3bUk5Z3NZTVdzNVpJYWlCSis4S0NERVJCSnYxQkpRWEJUNGhNL1R1M0Q0aEpndUVHYktTTW1WYzJ0R3Z3bm5RY25KQ2FqM3Y1MWY0YzFKcHk4SEp1eEQ4VjlEL0cvbW1sQ3ZOS3I0U2ZtSmtNYlJkK1Z0VEI3ZDRnZnlRUXgwV0VjcXRqS1dVcFhLWDBwcnNFQ0x4Ri9QdS9aQ2NYMEpjbFRVZVdtc0xMd20wd2UzOUl5YklmakFqNnRMMHBIL3pyNytSK1JPZEdHd21DTEN3angxQnkrU0czNVU1RGdmNU40ZnhBUW1UMFIwTUlFaldFWHVhY0lVWjJzNDRkTDR3Vk9KYlNqVE4zNm5mNXlkdEVzMytYbUErVmJMREhYaXVzZGZrTFozTnVCaTBSZm92a3I2QUhBa1dFYmFEcStteG40SWExTU5MM3JDWTM1OTJXTW5yZFQ5T01sRHc3b21TZ0VHRjZoSjR6WHZHVVNlU2FEdVo2TEMvY0pVWTFUNDRsYUtNd2hUZWR5UGkwaEtnT0k1V0lhdkZMenQ0RkcvenJRMms1OUxVTllQRmliWG0rdFI0OU56SWlYZzJJejdhUnhzRW1zWHVXd2srYjloam1YMU9MZ2o5NzJPbDZPTVlIRXFyWTdZcmU1Y2Q5bnV1N09kNFlSNUJMR2JuL2sxYTBvZ29ZUDZqakUwOUlJYU5zdm1nd3lmM201TTd5RElEdmx5MmkrYXl5Y1VQYm9tYmtWRnJ0WkxkLzBCazJRMThLSzU3eno5SWNNandQODZIbmszT2lFbDJLdm43ZFJwWGVHbzlEZFRZanVoR3JHMTFydHFEREREaHJLUkJVUDRXbVhwQWZPczJ3bUcvdU45Ni9SajZOK1UzRi9Cdmk5cEVHM3JaSzZTRCsza1NQMURrMVFGM2FTVjZOTGNOVnhGTlB6d3cyUGppSGsyYWJ4RTB3VHlIaVZkV1NOZnd1ZFVJMTJoV1B2NEFYMktoNjBnVFB6ZTFQWlBJNUlNaDFYVzMrT2J6WHNIV3NyZjFCM2FoZlA4bWRzRC9ONzlOZ1lUdDNBMzFDN0Nua0NsWTgvOFlXUllYUStQM3kzUlp4N2llWXBtbGlnSUhMb1hGL3lRNlBqR2U3cjRIK29sSDgyK25IOWtRMG9DUVhVTURuUHczSm5BMXFXZFh5ZHphR2lVUDI1V0VxN3lYNkd6N2N1Vld6QW1lWWJreDF0REdmMnJmajRacVdlbW02SzE5N3QrMXl0RWJvNzcvYWErTGVRRC9TUzMrQ1RHZzk1c3JSTytIVkZWTHZzY0hSVDQ4RVo2T25XSFZMbC91bFJXdVVxVjloVFpMQm8vNDE0SVl0d1Y1cHd4NFFMU2xYd0NwR0IxVyt0MXFTc3JiVzE5SzM0VHE2dU1CbHhhVTk5Vm5KNWRxSWNFc1lHd0JKb2dJL1V2amdHalZDSFArVGtLNzlNWStnZmk4SWJndGJVN3dtNnFUY3NDQ214dVZPWEQzcGxvcDhISHkzQVIxeW9aZWh0Y2RIdEhqZDJVT3JHQWZ4N2VOSytmN3V0eHFPdHFCTU1PZTYvVDNtSU0xRDQzak5QODVSY3lLLzE2cjk1ZXR1NUlBNzVORVlialUwbXJ6VU9VQTkxNlJRUTB3bk5GS3RhUUo2TmN6SFRycEpYTW82cWduendzaGJpY3VCM2lsZTltUXRyZ0FWS20rb1BlRTY2QUNSK1VidUlaWUFiVkc3YmRWR1RhVTh1bE5KVy91ZWZPanRQUVBuQWlmRFY0bGpaZmNBTEhPaEo2L2FyTWNIemVuRWVYYkl1RzdwL3dsU2ZsUEs4emREZENnbC9MTC9HWjAzeUVKOGFkek8rSG1sa1lLMC9sMzFXeUhOQ25KUUwzNngzbXZDRXRWMHVvbVk5Yi9PYVZPNURVYUM3SFBkWi9HUnV5M2R4c1lKZlVxMElsTExwMW1uNnVoc0ZGS1l1Vm8wNkpPblNxV1RMbXQ5L2cvK3Y1Q1JlNWNDR0R2eXNxZmlYdzlkb0ZsVVNpemljaFZNZjhTcjNkWUl1L2JOTWtsT3Fzb1g1UzFlS0YzQlM1OFMvUnZvK3kyTWk4YnV0bWJFdXVHSEhoVVVNaTJ0S3JsRHlBUExVTE5rcmxid1FwKzJRMWZmcENBNTEwQ25kWkhGRUNDR1JualBjQmFsVjYzbkI4Ull6YWkyb2RPeS9XcFE1YlZuYVZsTk1NUGdRR0tCN1FYVnFGeDkyMUN6UDVwckwvR2NubzlxT28xb0VSVU1xOXRMSkt4TDdnQWVBSUZVSy9lUUtDZURIVVFGUVdHM0J1WGVxQWVsTXM5NytnQmFib1RwamRyelJBRlh1NWlpcVduVjYwUHBnc1hxNFBtWnhVL3ZBSUtUSEdoa3FLMXRXS0hzVXM5TG9aVWFmYjQ4ekp6VFJFUkFVYTNsTWEzb3YyQjMrbWd5bithb0lZTEZYYkcrS3Z3bG9RTThFZ05wN3RFclA4ZWRGT29XcnVpTkxxcEdwdUVmWlNwb3NML1YwU2lHWk16eE9QT2NFNGlvNHp4aWlxbGhXOEFwSnp3M1hiT3JsTjVyUFlUeUNseVZoakQ1ZE1aUVNiT0l0TStCclArMkl0OGlteW85aW15ZzZWYy9ZSUt3bFZZNFg5Yy9IbXhoWUxmWDY3MTBYcHNUVFhGa1Z2bDN2cGZxMDFSNVRYcnpjaUZjRGF1ZWJ5VE9DSXBTazhmYTRjVmpWOUxldlpWQlFvbmx1WTRqTVlwNFNReW80SDRXS3YrRWFhMEpuYzU2eEFQV2tuUmFtb0RUSWVVdGo1V2srL2xyNUJGNC8wZTdkK21iRzZyOGV1RVVaZnZicmFSZXlUSTRoZHduY0w1SVF5M3c0ZnhhRkVjUXZhV3BYcXVIZG1haGFiVUF2OXBDbDhMVjBaVzVoeEROVHphYVpJZlhIMzlleUZYT0N5ekplK0FJeUdMeWQwK2d3bXh5MU80aVphQjhRZ3lEbVRKSXJzMm14S0xnMFgwNVN3WW9GY2tYeHJHMkMyYVFpb1pWc2kzbDF6MlcrY1pZZjhtWXBtOGVUTHhaSjhvUXg5b0ltdHdUV3NtWm5uMURWWHQ4UjVjTGhabHhoQzN0VEFkWWxNNGp5Y1BaVHpJeU5PcE9pQ1BRU0RUTzhzQXVHSFI2ZWhQbWdlSmhNN05NQTYvMHU1Q2RhTTBUMUhxK015Q2Y2WGpjMlMvK0VUU3lDOXVXUFdza3hJc0llaW0zZ2VGZzViYXgwNEptenU4VGt1QlRkT2NubFZkT3FIVE5QOHdPN3NsNFk5NVZJWXdCOTRhRGthL3FGanZ2aXFJSDdUM3BaU2h3YUx6bDgyNE1Wc2I0UmRkYUJKdlZZK0FHa2RLZmdlcWhRZjdic01SeEd0TjR5WGZLTzZPZEJlNFlsR01USnladkF6VnJqNWhObndKYnQ5bzV3cEVGMDhWM2JNeC8xTmtBb0RmdEFvQmpDUnRIN2FXYitTL056TWxOZkhqSFA2K0hPNE8wUGJJSVg0a2RZWGpWaGdseUxhczA3ckZCc3M5M0JCYTIyK3E2ekF1VGtVMXM4UTg4dTN6WDhwbVJSK2UyUEZ5NTJXZ1BUNDl3VlhwU0tYNjBHa2N1RW8vdFYyZXhHa2dYb1hFN3gzU0I2SjNnNGRRTlRzQWlmN2J1T2FCRWRPaTJabGdxMXByc2dNNi9DbWpkbXZPRWVSdXlDdVpQN0Y0T1F6aWpCSHg3Y3ZmYnNpcEsvOHBnbWdaMHdJbmZvU2JabGx3Tno5RGlIWWRjSm1xY2RjSmpGUUI3U01OZmFqRGtsYnl6dURJc1lLUDI4YmNwcW9zVVBzTWsrWDVDWTlheTYzdzdOcFlhdDBOT3J1M2R0SVNkMC9tN3prTXlPWjArckhoYWg0RE5Lb1VlaGVlVGRDN1ZOOEVYa1ZvcDUvVU9YVitZeldOYjhLWlFENzhHV3d3SVRNanBOVG5iM01YeGhLb2NxYTNVS25uOHltRFFROFBkbUNpN0FWK3FvNW01MDcvSVYvbmJzVnFoWkxiek0rTWhlanZqejdENU04eDcvNnplc1BRa0ZlbHVqYjV5OFJmQU41V3EzeVROemxBRllXYk1RY0pwd2xVMkUzOTBYUVJ6aXhKbkNPalZRT0I1QjFEZDBGUGFKWTVIN0J4cnpaSC9VbElFRVpGOVhtenppKzRRbTN6YXUzUjVSL2lkcHpna3VJb2dWZW4vUjNVTUZWaTFUNlYwT250T2JWNHJyTnRRaVgzdGdmMUUvUUNKNXA1czB1Y1JQaU9KZFlzZFV2MytBYWJIUzhFS3NwUmFmSi9VRnVnOWxDUUNNRXZCcXgrNXZaWHdFQmZuL2JuS0RaN1ZWMlpYeUlPb1l6eTRoUzhuOFlqREJNYkdvWEsyVGhFY1BOaDNwcGtvemN3bjRoNUcvYWdScFZPdG85WnJXVGgyMEdXZkR1V0hNdnBPWWNHWEFmU3lVU1BNYzYrbTYzSG93aEk0bmoxNFdsR1Y2WDFDT29wTmxrQlNSQVRBb1NrT0hQUmZXL0d5NkQzejJuNHlkaVdEcmxWZ3dzRzJoMGZDeTBvMzRYRnNOTXRkTzZ4YjZqVkFPdlNGWkZXYTRoQXhVVDIwaFMzMUhkZERhNHBkdW5lNDl4amVlQnVDZDRUZ3ZudEo0NmF4cEx0ekx3N2tXcysxUnBBNnVsVklwQWY4eGxNTU1BWHlObDNnV05pR3V6RUFLWUxzM01OcENrZmMzaUhRMnIweU1KdnR2aFpkSERiWWlHYjNONnJvWm1YcjdSNW9YbFhyb3RmbjRkYWJ2bzVpMStqZVNodDdtV0h3bk1kYVltTFMyT1ZDV1Y4d3p4dXJTSUxLL2ZPSnQ2aVFQOGRUTU15bkhnWGJON1ViR1BzYzNRZjAyWjQ5OHZFZmpjUjI0YzArOTNwWFBwL2dJQ0FnT2IwZmJyYU9iMzhBTnRJd2ZoMlhpOTExL3pXNlZWRGtldlFDTEEzZmU1UlROdzF4L2JaYmdpeDNHRVNqUjEycUt5TW1ZU2g2TEZjaEc5SzAwVWZjZXhrOUhwVXdqSEI1VDJhT3grZnBrYm1zdVVyS1BNY3pSNlNSVW9DVGFWcGtIZEV3dC91OElCQW9vZmk2WEl3U0dPdW9mV0xqRFY3UXMxZVVwZzJwcE1LNHVXQXJBZ0tQUStuZHo4Ykx1WFdHVkdFWE1XZXNteTI5ODVhOXB5Y0ZZSysrc2tHMllzd0xhL1NKUjhyZml4Z3FHOUlQMnZjaCt2QTBpN2J0Ty8vUjdXVFNBUnlzd0hrazJPMWJqMW9TWUdpcUsyekw3R3Z5ZW5hMFRFSmt1NmZQVWlMOEE3WFlTMko2N3N1clp5aXZTSGEzZmlMZWJwcnQ0K053d0hrVzI0ekRBQVVOWWdZb0lFTkRTZE1aSDBrY2Rla0F2NDRMUjJYYTRHOTBQWEdUeEVaamtVUnRvUEEzaGtveVh0Uk1zZkV6cW51eStadjJVamdNellZTHZ6M3FRSHk1UHFSR0haRjhaenNVQUVDM2V2UHFTd01wTEs4NmNzWDMwUGh0eklVZkM4TS90bWh2cHgxYXhjRzQwaEUwN1pEQmlOUXl5SXhHWUdOcEVJbzNSemIybFY1N0V2Wm14TFRsZ2cwbGJpejNGWEpYeEdDZGhtV2dFY2p1a0NMUEFsVElGV3h5dVJRc2ZORUJ0SGtjY2FCay9oSnhWcFNzUVlkNDdOWXJtMlMzckZzalFHMTRuWUhQckJyL3JLdmlWZjN1RG5uRStYQUpKaVpHVWV5aWZqU3h4VkNKMVVBaUtldm9Yc05LR3U5RHF0VHQ4TWFqOTJMSGRGNE9RMEUvem01aDVMd2I4T0VkTzdOWGhPMFhwTUQxTHZuRDUzMk5Pak1sRUU3MXd4U1I4STROZ3pQU1dVQVdXZk5aUnF3S09GMldSWGd6dXVpU1dUbTl5Ly9MVnlkTDFCaitSV1EzM2ZlOE9RdDdod1F4eElPSUQzajlhV2RXczNaQ1I3Rkl6MGFwaUFjbGhZcWZEOWhNTmUzS2h6WHZFbFFQdGI3MjM2L2plbkEvVTFXZmc5TUZsK2R1RWRJUmpBdUM1Z2NUTVRhZTJrSkFWektXOTFSZTFHY2xaMm5IV1ltVTVibStVa3NNUXAyYWVuMW5JeEM4RDc5dFBvL0xubnlSMWFoTktSdkhrYmxrVDRVQk5QbUp4bHMxbEZPa3VjL3c3c0JraEdzei82ZUFFZUxuSm5vS2NGU1ZveU9na2hJbHkrMUxISG1seklBRGhEK3dadnAwTVRFeE9nUlRXTCtkcDJlcjhuM3JncHRnMUw5OFpldFNLSHducEJVSjdOTUEvY1FhNkRqM041aWxQWUV4NXlvZ1RPQk9mSjIraUpnb2xUN1c0UzFDOVpyK3Nuc1hMUy9OdG1DaHJwQ1dsSGFOWGgxL1ZibmhJOUVRVy9KMnh3cXR0dnJ1SnZoeGZhRC9tblVIUndtdUF4R3AxMWZqZ0tUMFYrdElWRExGeVZzVktoWTg0OVZ4VVlweXdxdTJLSll4RWlFSmpaNjRSRGxscEtWYm1sK084bWo3TWJnODdvT213bzBzdXp0NjhlVnR0dWl3ekphbnp0dS9RdXhuaWdadHhoeVVxSGdhK2RQV1ZrUmsyeUhFSS81eHQ1TWQwZXdNanNkZmhXZFZ2OTdYUlVwcEN5M3lYRStBWkNJZlEzQmNwcll1WXNnV2hCRk5UVy8zbmkybmVDdll1UkcvRGh2L2s4aGlJOUU2QXl0eDFhM1RBeE9TemNJV3lJeTI4S0dZRzNIcW5rY3NIaGE0b1NuNWd4ZE00RnZpam1IRkhWdzFFT1RHcTBiNHRwdDlJN3RpakhXejVyRlFobGRBcTlvR3lMc29pQWVNNFMvZUlrcVN5a2FRMjRTZjZhcTRDR29mL2haMGNwckdiKzVTUE9zSGN2VGpHSXhTa0tBMHNLakN4SHNodDg3MXlHbEUwb3pwWXJuWkEzSHY1cklWNVhLTWpZRDRXWHltRUFUM0U1TzRTbDRmU1c4VHFWS0hEU0RnNGhBaWlXRjlOR2RrZkNRNENIVkt4K016WGRKSXQ5azIxQVVMZm5XRDJ3dUV6TUs0OFJ4VWVORnA0cSsyUDRFZ1M4Q0JnNy9UQllwblVQOVdQbXZjcy9EQlI5bGl1Mi9PeGJhM0xFK2MrcGc0VVlkS1RpWEVnSzFLbnZRTEtQOVl5OE5UK29XS2xWRjZoTHhZZWx1YUsxSE5XNkRUaHdKQkdhaXFuNFRXU29CdE9WYzVxWFZNMkFlRjRuS3kzQk5yTG1LZG1yS3BMaUJhSElVRDdKUzFUUTlGWnJFMXF3SFpDSmtrRHdMU2dJZDA5bXhjdDlKR2RPbDNJNVI3VUJSc08yTHRDK3R1dGpKNytnOW90M01FKzFEa3Bid0JIUlBraTQ0UVZPdFB5YmlreHhoVXZacndXWkhvVWNqeWpDZC9CWDNqRU1zYXpKYzEwWVR5QjluQmptN0tPZWRCeVh0c2pSUFlPRTFFdmZ1N25saTJVd2RhaUhNN0dCYmZ4THltd1NOdVdWS0dXZk0wcXo4MG9LLzFrMmdrNkpSdVdQYkJCSXVHUnNZUUhPNGdUU0pPL1kvMnRVQlQ3dDd2Tk9nbiswdjNkZG4yQmxmendLMUFEYVd4eWFRZWM3TXV0VW1pZjFORWlGci9rVk5CaURoZGZxUGwyZTE3NGRrZjAyRm9DV0pvbUJlL1UwRGN1OHByQmZxMVVzV0tGaWZiNXRRZERqdHdrNmZGdW13eHBjeE42czQ2THJmZ2RXaStFejdOOWhVVDMxcDFQQVJjWFhRUTFCZzVta0FsSVE4VVlreTNock1rZERpdGVObW96UVRtZDN3QnZNUmhOODI2dUk1bXM5SFZDbE14djNzTXZkSTYvc0QxY3BxVDlHTlhWTzYyT2FJdzY2aVJ0dThIK3JjdUtocG9yRVRyV0I2ZnBMRFBFQnJZakl2am1RYURGZjArbnArcmxodk9ZQ1BTeCsvQjlOMDdtY21UL09PT3orREJ0YVYzY1o2aTJTc1NRU3NTaWNvaWNtZzIxUHN1bUcvU3NQUG9xWVE2YXVyUFVMTCsvNEhsVjIxSUdUOHlrSzByWE4zRHBHUCsrR3A3OGF1UXpRN0tqNXBzeVFRM1BnT1o2bWgybno2d2lNV0F6UzdYTjU5Rk53aE1ZMzBnQXQ3c0JRRGk2bUJUdHlLejBOU2VacVp5YXBBZytmUVhoZys4cUJZaEJPME5qd3d5LzJCNUlpTkQ0UENlT3BybjZERkM1VzNOdGRhOEpUMkdoSU1UNndUZk9OTEFnbUQvMGxtTTFpblgxaWh6RENwR2hGMUJyT1F2MzQ2ZHJMNGQ1M2l2M3pTOWlEM21Hb0djOEJmR3ZuOHdpZ2JnWFAvT0RMa0htT290dWVZZ21PMWZsZXRVMzJxWGRhWlRsZHY0NDI5K2xLMFl4UFpJZ3UrQWQ3aFFZamo4MFpKeE9DMERDR2lXU1BVbGJtRklrUEowcytmd3hYZk96V3ZzVkkvTU9JaFFiWDFkT2d6L2NlbnM2dnhZbGpJVFdrNXk2VlpvanovZFM5NmlCOVZlUkMrb3VWcFR0M2JYdmdTUFNkY21Ib0JUZ283RnF0VURwTThTdWNoV1JQUCtld240RjdPdFkyRmxtdjNMMmN6TGUxcGdtbEViMXcySjlSQUwwWmdsckpvaGwvQWJxWCtIUkxlT09IUkZ5UVpQbVgyUFQvMExSRWxHeVhwZTFnaWhTTGk4blB5RUJpUk5uUkU1cXFSYjdwUmppTnQyd2E2aGFIdmVDVHV6VkNFaXhsQk5aUFRpaHM3VW1yTGxOdVc2aWZqWS9UMFY4LzVLbCt2RFhjeWxSN2NxSGVESHlDK3UvZW1jT2RER0Q5UENIUnZTTUZ3ejZJcmhBMW10WHhmaVc3UXJMY0RDeVZnWnJ3R0Z3QitPdENuKzlSajRSUkFiR3VydUlvZE5SOWMrc3UvMDRORmNDblBTOGNKaXJub1VtaExGVkd0cC84enplenZnOXlZZ1BrN1pjR2NXNW5WUDFCcE02b2ZBMVEySGkyY0ErYmV0WEpGRWVoN2ZId3dmdlYyclM0dDFwNzBEeGZFUUtFQWY1TnBqRWpSeGZ0d25mQWhUbEpEajlCamRDakFRUDVCV1BNZlVRUk14WWtNNlVXcmV6LzV3TXJ6dm9wTWJVeS9CVDhCaURJZWFoMU1XZTZGZjRwV0lOelU5aGtHRndkYmZMVnpzOE83ZjFua2RFSUZXZUZ6US9RclYrb3pNNkx3QlRIMjc2M0V2N3lmelNablNHaTFKYkIwT2xXWWVoTkJTVDJGOHZhVGxaNzNJVks2dEhEQ1hnajdzOG03UVJTNWhOUlFqY0VJRUh5M013ZzRVTjQ2c2ptdHZsNkYzbkZTNExGUmw0MjNmeUpOcHB1VGE5V1dTR2F3d0ZXQ2doMFJ0WVg0aWg0ZGZXUFpZeEVpaEpWTFpUSGQxWGJ3L1dWYy9XZTc3S0hyNno2K3RZTjllanY3TkJuOWVobjIyb24zYWR2dTBmSDc5SGhRbmp5QnpFYWMvRTlxZkFJRldpR3UxQ0RwNldreVdvRHlFRWlZNzRhVis1d1BZVm9lR2hWY05STUlKOStrWkxNdTQ2bCtEbnFnT085Qjk2Unh3Zng1UlVQRzVUbjNnb002Vng4YXF6SzRGVjdHSklsaEhPSDkrbWlTbEZBODFxNzl0SVhjVXM5Yk9scXdlWUV1R0owMkt6NVUwTTlRbXlvRDZDM3AxZGFIKzlQWXNUODhIZ3JnSTFvVGIvNmtJTk1MZzMxV3VMS0gvcHhmVlJ6YzdtRmdyYU9HM0lNNk9ScVhIMVJhdGlHZU5oK0ZYNWNhbElzdnJQQjdQNS92K0NTcHdDc011RjVsUkpLcVpkSXQwdHFzZHVKcHlOMDBFV2gyN3dwT3BEUDdWOWZYNlkrODI2VVZPY1BSdi9SQlRCZnYzWFQ2a3FGMlQ3ODVhempjYitlMUVMV2ZuVlZiYkNwQnJSYkJseXo2dFJibTVCaVNkYkhYZ3JPUW1kei9RbXJ2cVNGTGN5N2RZTkpSQ3FxWnBnQXkzNnMvbVBReFZIN05WVEJ0eVZIcDloeTdmMEh4ZCtMc2ZYeHE5S1AwcmR3RU9xVVR3YjNzSUhYdlBHQnNBbzI3aEFKWFZYR0ZiTmZqRzVEY0JwV051NDFZVy9wb21CWkQzdUY0UzVoeXNoWEN5bkhjK29sL3FoL3ZxNFYvMXpFdnV5UjUrc2JoUXliczRMZkl3V24zb1hESWMzUHVlbHZhQ2Y1a1lyMklkMVJiQU9zMmM5aEozSHNsNjArS3pZaVNDcVgzLzFwNHJGMmhVT1dNbXl0ZHpPNHdOZ2hrV1lsdFlDU0sxL29YOXgyS3ZMSmZOeVVGZjQ5dXhPOWl0ekFJTTR2ZzlBS3ovejlWemk4dFlCRnNiY0grUitRcHRCMlQzOC9OTWVhTHB0UG5uOFU3VVZnYWRmc056MnJpa09IT2ltZWFkNndpUm9KV2dIY3pPQ29tbC9DeTRaci9NTmdQR290MVpuSGJNWi82QjFEeE5ULzU2dWpoNjZHLzFnT0lrT0FVcGsvYTRvNUpDckpXNm9UWE53L1VwR1BaV0ZtRy96dVVXck9IUEEwczJVNkJDNE9rWlo5TFhqUEJic045S1ozNml6S1VBVXVhOUdESU9aeXN6eStYV2JJZCtrZmtWeDVLdk5lNjFBN1dtVWdJQVZwVUoxeElPc1M5aVUyeWRnQUdMeDNCcCtaMXlFNldsOVBlQ2QzdDRmSnJmVXhlNElKRzFJNHN0a0JVd2loZGZibk0wMyt3NmMrbTZaTFF4VEFhakYzQXZsSTZLdGNnR1RrclVYSXBXNkpKdXVrTHQxM2tZekE2L21IWUN1UGNaU2ZLcC96YW0vZDNsaUc2YVFkWFJUdUJjSjFQQTc2ZHpTaHdyeno4aTBmdEk0cjRDSkZBOXZGcHNWeWN0Ulh4ODNZalh2VlNiRnpQb2VTSFA0aUdZYnhuQVlXM0lQb3ptb3M4U2h6N3h2QXZTaXdVNjArYWl0WXp3MHVTV1Zaem15YWNhM3R0VlZLSkFsWXMxUjJEMUY1NnlHZ1AvVnJ2M3p0UGQzcjZSRWhNalNvZzZSbWFrTmZsTUpFbmw2ODlzZUMwbE5NcVFkRlZaNXlNdFc5TjlBTThmcWJJL0U2cm4yMGw3L21NaXFiZG9uMXpOK1o1WEh0blhmWnIrRDF2d2NWS3ROaUVsRjI2Z1c0RXovb0tTTVdjWGI2dlcrekp0aUpkZXdKVStnRHJybXRVYjYvSTNZQ0l0czEvbE9rTG1icWpiS1g0Ynd1MVdkMVlZb1hiMWV5M0poVDNOUUYzRm4zNW5rOVkvQnQ4Z3MwajdYVGIxZ3NHVStUT2dEK1ZWcGRCWlJSak1iN3BjT290S2dYdXFMenZZc0NIUkNPN21oc0o4YkZnd21TY1R4MGY1eHEyVEdYZStTTFhvbmZXdkxGOTRjMFhWaEpNUFhLdWZEaEZtWVFkbHU0WWJqYWpaMG1HTTJ0QlhGbU1VcGpLL1pQUS96MmVlZ3l0REFtd1NpSXpaY1FnYm16Mk9hTnJrem10QzB0ZlA2NFA1aTgrdHZtcmRyVVdiVmx3ZHhUMm9qL3E4YXk4YStKcjJsN0RuYmw2TnROUHV2WDFuS1JyNzR4bG1PeWdhVE8rWERMMHlHdVF2T280aTZhdHR2aE03QjdadmN4WEhzKzhWMk1QQ205S3NVRHZjamgyQUR3TG9LQTRYSkpsZWp4cGIvOU8vM1F1dmZTSzhraTRrVVplSGduVFNOTzlmejVocG4vMzAxU0JndzVGc2NNWmhuQkE3SzRTRENuQ2N4WGlNM09XbWJkWVJRWWR1YndCUStRVTVtTmM0UTlMNXZ6SmhBQ25sa055R2k5Q1cxcm9veFhtZS9WRXpFYWxmM3R4NnJpVjlHdy9iVWtoc1VLeDFEMnBNNTNwS1RKYVdzYWRicUhTVHhVc2R0UFBIQVpyUXpKckdNdjVrZEJVeGd1RlpZV0Y3V3NWaXVvaXc1U3duQW9sanRpL0xQRmxoYk1pd1ZxTXFtaG5aMXBzeXNUQUw1SjdvTk1JdlpsUnFULzIvVndreDAxR3loTGFBWUs2eFhsb1E5eHQ1MnRmYy95UWZyYnFkK1BOZHBGQlFOYlFvclA0VXltRVg4VndCWC82U0hVVC9lemhkQUZYQ0RZSEhNazVpY0ZYcjFCL21nZ3NtQzJlTjlVTEhXNFYyWHlFb0pRUmc5c1Fyb1RxcnE5TE0vV3IvVHMvUVR6VmdaTU9YYU4zSFhkcTZzcCs1VndCd0s4RHhLZ0YraHRBQWJyYzltOWxRQTNtbXdhbldMY1ovVzdsV0h1WkxiUkFlQlNGekdJSTBORWNhSVpWU3lCU3JZOGVLbUxkY2d4L0lwMUk1UStRb01LejcwRWM4UENWQ1FzVUhLUVh2UHVFSkNxeG04VGQ2RGFaUW82TnFObzNiSURlVlFtREJPOXJKQjBQWkFXV2ZTb21SZXVyanJ6dUx2ZjdOTm5vZWgwd21wQktFT0lXeUVQNzBNb3V2MVRpMDhOUk10Q2ZEQ2xpSWpDOUVhMWR5L2ZFZEJwQVhGQ0FxNnl5U0hTUUcwenRFd3NpZjZsdFJiNkgyKzRyWTdyUjhkT01EWWRsdFdDdWd4aHdGQVJLb211RlZzSVQyUW10aytmYWhpU05tZTl5S0NOeVhwdkUvUDZ4ZWVKRm5nU3FuVDhQd3B4eVNqTXorWU5kTFA5b09rM3ZHWkxzUjg3NEpaNEU4dzN2QW1pZTZsczFaL1FqY3NISnZIWlU4Tjg4ZEJBdSs1NnpRZ0hKcDhmT2Z3U0l4dkpGVEFhdkxLeHZHMkE1WEJJdlZsWUtIUlhINm9UYXhtZ1NXM2xOZUdHMmlaanJOM0R5NXlSNFd3UGJTYXJ0ZzBLam9ZZmF1RFVYQlZuVHJRNDdPUjB5ejRjMVh2MEVkcFVBa3phZE9Tc3NnT3ZacERwSXZ5Q3ZyN1hZeWJYTDV3eW42MXRxVitKamt6UmVHR3g4VS9LYWtHcWo1Wi9MdVk2SXpPTUNSbmlwSXdiU1drSXZPNnc0NExURDkxeHlRQnRIbGkzaXo0QUxSR1BhbXVzUWtxdHZTVkdaNjZwNUNxRTNtcERwb1d0YlNyZTB2eUFjVmhBbkt4T3FrdWxJSzJianBrakxYUFdlMUJrck5kVzVVMmFoODJYRWtaWjB3VTA4ZCtuZEt4aGM2U1lEenB0MTU0ZlFJRjBsUm1zRE9tZzF4bjVKMHVYRVliTmw0cHBHemtycUZ4OVNDTElDSUZ4SFFxdHFiekdwNGNmUktnOW1kMEVrRjVTVDVRK3Fld0IyN1JjZkpFWXVKckJZSVhObFNsd3VZemFneHYwVGxHUVlVTy9LSWVXc1dZRUxIMExha0EzRFRESjh4MDNpdnk1NEJRNTIzR0FUMndrWUVUMWhOVzdVU2RLT2NOckc5dWRxL0NvVjRNZEF5R2tRRmpsVW1wdUs4ZThwaEoybGtrNFkwNGg3dHN4OHJGYjVKOU1PU0RwZGF3WVZ0UGtKOWphQ1hDbUJMaEdKYll2NGFxVkRpVlNRR08rVDN2QUlVL0VxSWxEa1VrVzhkenM0T2xvbWh3cVZ3WUJJN29XWnhpYzBOcUgxSWMrckJEYm9yWnA5S0hZZHQrcjU5cWpwU2JvTnNET21RTzZRYzNYVXNwYXBYTWJHWHh3M2hzY0hTYzFDbmV5Rm5xekpKaXRwWkZReFFTNVFPdGg0YVU5QmE5cXRYM2t2UkVySEFhamRMSUV4emF2bTJJM2t2MDJTb1U4VTBLV1hBUkJWVWtKa0xrT2djelI1QjR5ams0SGZpN2RZY1djNUd5N0JDeHpJOXBjaDNUcExYUmRuVEVDUWphMG1lUnZjSFYzdVN5MDFsR2U5a1E3d0dGdDdyZjVpNHIzWldrS2NBOE1xMmZac3JnODRqYjBQWXhDdVh2aGx2Ky9wcUFiTzdNT3l5R21nSk5WYWppMkh0czR0OFBxb0Z3OHhNd1llRS84MHRrcmdQWTJndWdTemYrVVZxYVZlMzg0bVBPRFk0TE9PL1hwalNXWGF5MHNsK055WjV4M1oxVHdudU5pL3VOb1oxVkVpUVNyM3BzZCtSdDZmTjRFaXQwb3Jkc0E5UlpPbnpSUm4vTks1aEZ2ODFBZzBGN2J3ZnBuYUEwT1N1bTJuVy9PMmVyMGFMSDlpcmRzWGU1QU5lVmp4Q1llZzdyUE9MUm4yYStveDg2YmdRQ0dOVkZtRmxIbWxrNkcyUnhYYmU3eUFhNUd4eE1VK3lBUEJURmtEcEdyS3ZuanlRVy9vZVZTMHlZZUtlVHNubmRQc3ptUE5RamliNFJxbWlHbXZ0R3hLbW9DUmM4MTZpRnlJRVA5Q2ZUUTcwdjdJUEM2d1dnTk9LVG82a1gzTk92ZXpON0ZwdjhzTk1OR3JMZTAvZDR5bW83WjVjSy9QMlh5M1BIcFVqREp4NGZMdnU0S214bmNEeVdwL3pUTFhJRzF3ZnY5bXFMZ0JHYUJ2SVpxM29Jd0VMRjJZMDgyMkdjRmwwcDVzb1NvbElYcGFPUUlWSGRWcS9aKzNhbmdjTnprQW85bzBGVVRtRnp2WktidFU3bkZSbklSUWM3SUlLUWZ3S3oxL3psekNKbHhSSEVOS011Q1JmNjZyQWVpRzBYNmpXSG5kTVFzWEtFb1o2YkdpWGpsS3Z4OXdQSWk5eU1MNklNZ0ZGcDdDZHQwTjRiUi84NUg2dXdCME9wYzFZaS9PemZ3a05GRUN6QlpaaHJUNWFnaVJ3cUFkeTMzcUovdnFuNGtxaEJja3FHSU1KcDQwUGVIM1E1RUxjN3ZuK3BTTzQrd2RnWmE4U0F4ZHdqMnBaOHZTeUQ2bE0wUXZKNng1dFoxcGE0SCtlT0tTUUF3T3BnRHRhWld2WkVzQnYrTmlkRm5jOFFJQlZkcGtqVS9Md1BkMHBlQmkvRDJYeStrUHJqUEJpa2FBQm5LRzhKNHdMR21YWjdSTHpJL3MvVmgySkVwQmwxTnBzb3cvelIzTEpzWW8xRXgvNHBuc0hnSHVCSEp4YzVyZmNGdWhWaTZwZXFKTEtWMG1YZkdYRnZOTENSSERYRDVXM29XT1F2dys5YjFkMGdjNnova1NyZlV6dG5uSTNTV0ZnRFFyU0tzMVdGR1ViQ245NmVYQmlpS3pqTjhGdmFqbXgvcDAzNjZrY0lYczZ4a205Q3I0VklnQTdHTXNsK3NhVHo4L3kyWUhxNTRha0d1TllWakZlY2dUUE16WG10aXlkUm1QY3hZOWpiWmVORFFJTitjUkJRb1pqR09UZ2hZMDlSRGZ0elo3bklmbkU5UTZ5RzJ1TXRkU3FLNVZySEdMZk9PZDJpSFFIRGxLR3N2UnVuc1c4S3hZd2FiZjlSdVkxZE1FQWdXUmp5OFVheC9pV3ZFaU9waWtXRnIrTGZZZ1IwbXBXRFpocndTeU1EVlNWQ0w1NGpNSjVXTFVieXVOandublU2U0p2VGJjYUpVR21ReSthT05lbG9pcmkrUHVoaG1GTUFaU1VZaHE3L1o1alIxZDdUZ2hvdTRDbHhuTStRQUZ1Y2ZvMnBBRFlDVU4zSXhGZ0k4a1BDTVdacFNKYVRiSTQ5Z3pDTTJ1Q3p4cHBjcUxkVzkzOEFKNlNuWWR0UUFkUGVST1YzaUtBRFpKTTl6NmF2cGhJNUZCZlhFNFVpcDZuelVyMkpXaFp5cXEvUE8zNWFxclNob0MzUGVIQzJpZnVNQlFBU0pqdjRnVzhjRS9udnRVdGVRSjg4ek5IMGtNNllpeDhHdUZ3RXA5ZmdZRE9vK01RREJRVGFKSTlNei9XRnZmOFlGLzVHNEgvQnhqQmxFOUZGRXNQTHVodyswbUFLREJPV2ZqZFJPWVN4OEJLMzdRWDZJVCtCTEZJTnJCaDhrcHJBTktXTDBUMEJpWjRYcHRILzA0S1E4U0xiRXY3THJFZm0vWjVvaks3VE1wU3FKeG5xeWcvclkwRERhbjhBbXFZWTVqcmphcjRvWG5MWUZ5V2p3bkZORk5PTjFuOEpXQk00emk0L2ptTy9zZ2dKWmJmRlVSV3lOQXU1ZGExWEdPZ1NIV0pROWIxek5vR25TNlN3b3dOcVl3NC9Kc3Y4RmMrK3A4eHR4VitvSzVVd1VPWkFFa3ZCZ0tXallhTlBxckQ1Tzc2cnlCZ0c5aXFxT25HWTJwL3ErM1pEN1ovQi9ZbFY2VFY0dmtTN04yRTI3WndNQkF4cFZFZllMNy8wclBhbEdCRFd0Qk1YbFFJMWtuWHNvSEtFOGQycmg0U0N4RXI5MTJVT1V1bGRnbXNxVnh6R3JHOW4ranhGcER0c2JOSXNoQmEvalZhaTk2eG1nRWZ6QTRHMkk1OUZHRUl0N2pUTmZXOElaRWRydlhFenBEQ2FkQ0lMSzdERGFGb0pOdytVNlo4VjMvVk1rUklzUWZXcU9qR2I5U0J0L1BFcy9qQTYvVmhGM2xPQjlUbG5raGl0K0l4UXd6TitBOTkraHF6eHFPK01NOFhZU21VR1ljdDBCbGozcmRZTnNmRE01THp5cnFCeWlyU0hpSHl2U2FpamhQQjVWTVovS0cyeWVkR01OUExLbVk1UThVV29wdjZXZ1NFNm5VT1JJeFZMMDJPZUo5Q1RVcDVybWtwVWJVbHJ5elBrZlY1WnZTV25WOGh0MU1ERnFWR3lNU1R3WjNTWWY5YXdEWXBGVHpOOUlYMUhCUFJRM04xV3lXK0tNNlhsMDB5aWxNWGVCUUxDVU83RHdUc2NiNXNyM2xRYWtudXg3YUhkbEhWQVVxd0dYVVRLdXJuTGdVSk40aDlPSVdOcEVCYy9CVHVqS3FtUWpsMTl5R0hpZXl1eWdhYXJ1TDlJaUM5QUlOeXVRempDK0VESkJ6RVA0ODAzTzZ3WjMrUm0vbWY1V1crNWw2RWVvL0huY24xSG5hUzRQY2t0aTkwSjdyVGVSSldPbWxZVnNwdjhUVnlEMkRzai9IZ1crWkFhaFRGQVNLanBZS3NjQVBMd21BUmNMVWQvUExnR0FRRFl5YkVac1IxdDE5QnprTGJZV3pRUkEzNDUxaUoyWnE5TG9pZkRBdHFQazc0SzdCdGhDVDJyZzFMWS85Yzh0SjZaRmt5UnQwNWdmdFkxWU1KVks2Mjh4RUxxR2k1TWFYcHJnMVFGTHlSaWpSUnF2cEJtSk5GSkpEWEpmU2pmVHYrNmhzTGcvN0RZM3gzM1RxNFUvMXBMS2NpdEx5eWdlakh1THo5eTZ3YkdKNUkxMFk4REF6WDNtYzBXYStsLzdtNUtTaXZaZzI0eDEzQndRS0JIdFU5NnFoeDg5TjBSSjdScWkzT0g3MnVqc01qUXB5Qi91Q3dmVGk0TlNUNFdzS3NrVHI1TVhvZXZRcXM4NGdIdm9aUDdUVmdxN0EzVG1BVVdaSWVrVGNPWHpYdXEwb2NQaGs4Y3FsZWZRV1dkS01KZkZ3K1Y3bmxtVm1LbVI4aEExR2o5bWFSVFdPTkVyZyt1b0tONVRzUUR6WkdkSGg3cXIzNEFUenlBbzZtNHZieUdMTks4WGtFZkdKY09ScVNwZ1R4WHloTGxKQVNHZ2EzNzVLVFZEVnBWekQxUm9OazZEaGZwbFNtZlZob3M3aEJVYVQ1MjZEaW1odjNhLzVzRzBJUExNRDNTVTYzTzNFT0xEa1BrQWtoWk94VFFxQUt2bS9NVDA2ZzIzQTBnRTlpT1o1bzlMUkRrUmkrSkJIMzdhVmFoTFNBajdWVVA4NjNLaTJsVC9xbVE5bzF6K0JRRjZNWEg2em96QW1UU0QwYkJVYktoNWxEaThJR3dBd1RDUWluVm9ZOTlxOEdTcG5oUnI4QkFZaElwRkk2MjhrMHRGV28zMGREZVBFZjR0bERqelg1TVhHNyt4blJ6ZGRYU3hMd3JXRmErYlplZnozUEE4RzNJUFFMdDl5RXNNMjRkNktwdVk1WWFUSDBuU2JrZnVjZjdTeDBzMzBuKzlxK2hKK0ZqM2NWRDRWOWRGNDM5UW1wR3lXTVhrTi90YlY0ckdIelZpKzF2Q0NuK0h6dzcxbGM3ZUZFWTdSbDhMMVVZRDdmTVg4MGFlYUwyakl2L1pnaUNGMW5NRmMzRm9IbzlEQTFkOW9jY0txazdHZUtRbnhMMHgrSU5HandnUlgwSlA5R1IxbG1oaUV4RDhqdXZoREVtU3EyRFBlVXliMnkySXhpWWQxZWhIV0hCQlczWUpXQ0lwbXFNYXExQlFoQktBRmkwaFExY2YwSnRaRWp6amFyY0lwL0hYb0NaM3BVaGg4ejI1czhWVkNaT3N5RmpZemJycFpHMkdrb1Z4R1NuTVYvSXhIb1ZFV2xST2xHNll4VTArVy8zYTdyMFlpOHVtbGVJZXBITXR4VDA3b1RlS01GUEZsM0hSUWUyN2I1YmhYWElNN2I5ZkJWQXVYRGQ5WTdDVHlPV2hJYm5kSGtBU0FUOVBlRWU5aVZoYTl1MzFKOXFsU245Yit4MDlUNWk5a3JoOGluWWROdHFUcmQ5KzJ6MG9nNis3c204dTUvQmpLSTVob2hpeVhWMyttTFNuTWl4RmhmaE9abXBSaGVMVG1zeDl1U0RXV252QW56ZUtLR1BXeUJYb2tZVzd6ZU9CUjZneHZhcVN6akNpVC9VOUN6RTE0WjhrczZQWW5ocVVyQ1RhS0FtbEVlMEkvZ2o0cHUwY2d6dE9sZmRubGZ1WXlsWUJHaVlUK2dKc0ZQUWQ2ZUcwSGFYY1lyNVFlU0tjNGhoRmNEMzI0WXkrdDVoQjg4UVROREFSb1NNck5pUGJVRmpsclVPMllXTkpaYTJvR2FSczdYUVpQK0xkaDhmVVQ0cVNKQmVtR1lpVEdHck1vS2lUaXNheFJ3a0VyMmxaTlE0QXdrdFF6bXI0c1NhTWk2KzJZUXN1T21tY1EvdnlOQXlaOUxLQ1NjYXBUUkcwRzRiZGlobXF6N09vdm9xc0FGRFFJSTgzL0JwVHhsWWprRmNZZHhSWTBtdVI2NFMzQTZDandrRC8xeUU0Y21nZG5vNDV2dnR3Q2ROeC9OeG1jZmNWYmkvNTVCTVRzS3VLejExT1UrZ0RQL25yZWx2b0tMT0IzZGZxOWNSdFhSdXlVbmZpcEhNbVJQbi9KOVIvSlQvSDlhS3NuMzhWMmFzVmlaaEExS3VHNzg5N1I4bElhVGtLait4eGhrL0I3eTZ1dGFWS3EzNFA3ZnlidHFQWkhRbkVjUzFldnJkbXlUREp5Qmc1YXZ0dksvdjNHN3NSMUR5Um44VERTTTREUVIwdGpFbW5OWmxtVUFvSkNrbDBXd1h1azVzcnlBZ3Rxb1B2TFZTdkIwUFh0WVA0aHRmbUtSQWpjZU43T1NScXYzR0Uxa3VTdkN2TzJVdmQyWW0rZVBVQm9LY0Mva3psdlVNNHQreFd1NW5kVHIzWUZFb1NkeENjdFhZR1BMQUgvR3dZNFJ4U3QvUDhsb0UwRkJyZG5tOGlaZ1lzOTJLRGptbmd5SjNwd1RtR1pqaEhXVGVOWTNZNlhzaUhxMm4xSFZuN0RVdFRxQ3U0dDdlOXRXSGl2K0V4ZmVDZmtHRDFvZ1NTKzRiL25Lek9uVWtmNkorbkhGUENFT1V1OWxndWZzUjJNQjZvN1orUlZ4bjI3Wjc3cE9uQzVXdkJ1eWZNUFhNQlVSSnBPakg5cjZRR0VqaEhkTWg5OXNuSk1WdzRkc2ZQN3FybVFSRGVOQ1BVS3dNZkFRa1RJdFhveGR2MWt1TGJCVW1QalR6NTByQjFrYVJLRkR6R1Y5TE5sdjNRVzZNUE9GbnlKSkNGQkpVVDhTNE9rQlE4SGVjdkgycjB2YXpSclJKanBjcVZCRnZ5enFkRVRTVFVGZkRuWHorZWVIY3pSTzg0dmdTQVNTa2h4NDN5Tm84bDAyWXZzdkhjNFZjSzZERmE4dmNpVWVTUzcxa1dzR2tVYm5Vd3VnT1c4QzdpVXJOR2tiZldDK0RKdVJLY2QwQkZGVzVMblNzYmU1TERZOW5oclhtMlEwbHQ5WWgzaVpqbkUyVHRYU0p4S3BtQVAvVXZOcXNwSXErUmYwaFduTHBFZXVqczkyWStlVlFrNC90ZlY4WlprYzdESGdONTRYWkZDaXl4OGNUYlZib2p0UU9kRE5kZUVKeUhkM3hZa0laZmhCU0dVczgwYm1nWUV2NW9uL3pDc01WMnp2WUFWLzJlWkk2V2FmUkRoWEJrNWVjdlNBVVB6alhxRGRmMWJrWjRxblpaNUpWVGFIRGZEa0tOM3FWb3R5YnNIdFZIQXo5aUVvSUlCQUVaeEJtZmEzOFpLaWliL1Z3aTNJSjdpckxpWXV0bllNNnQrazBFU09CbWR4ZldPOW1DNHNVT0huK1FmTnlvTXRIeTBaYW02NkFOR3NsU1JoNGsrbzkyWjF1WUxwM0U0UjVRK3ZtbWtjYjhvb08vS1NaaWVTZUZIYXZ6UmVHa3h1K2hwNm5LZ0hCZnc2T0ljVkJvM0ZSUzdYSmlGQVY3dTR1WURWY2VSYzVsb1Z0c0lBRDNIalBJd3p5QVcwMjVBemhWSXlOUlRPamJxQ3VsTWZkOWRSR1I4TDd6NXpLSVdtYVhlZlNjTjNlWEpBZ1JmWnR6MmcwTTVaQVBZVllEYTBPVDEwK09HK0pPZHRsWDNjMFVvNVBGUkNhcytOTTYzUTVubzFFS3JLRlcvN0FyUWRSRW9zUGRrVjQwK21XZkRFZytWUnlxSzVSV3NMalZIWm9OTmJ4dEFOR2RDSzJ3MVR5YXcwMTF4eWhFc2o5SHZRaE8zYTRWNEdiMkZoaHYybkhCd0FiVmRVV1cyNWhNS2kzUXdRdFpUNFVZWG1aYlhWN2tJN0VkRnIvM3V4YnExZ1BvV3J3S095eTBEVUh5djUyeVhHdzRlc0dqQ2RBY2ZuM1kwTVgyTHoxaklzUlJZZ21SRlVHSXdUa2Yrd1lsamRFeDBqSlIwUStVV092Nkp6bGFxdEZyeG9xOEVJZE1lT29neWpCdmphckhOYWtkQnZtUUZwY2xRdjM1ZTI4OE42anV3WitEalNOeWFid2tqcncyVlNRN3lod3ppL3FtSjh0dkMvem4yY0Z2a29WU2huY0pZUkJlczNnNnB2NndUSnNZY25BTGYyNFkvN0FjSHNmMUFrcEM4c3VxRG5hbC9oeEFJR1hXTWNUMnFpZUdmNm4ybnd6MG1hd283OXNUSDRyUjFKaVdBblpWVyt2Q0pxcDIwYy9Fc25Hd2hlSWZJRUJqNjN0U1dQWWNsTE5RSEZpM213RFZMSWlYWVdXSTVJQU1aRHVVNmpTaURtQUwzTTFmeWh3R0QxMzhQZktoOUw5R2xmSlZlV3pzbGxWS0c0MUpUWktCb0d6UnpCV2t6NTVUcnZFcUNURzFVR3pvY1hKV1VteDg2MGlXVE1tZjR2Wjd4VHBrZFdpT25DOWU3Rm9uYkVFTTZDSDV2THZSV1lpdFcwWWRRdG1NM3hvZEpnUlY5QU5vbzN6azEvMHlzUlFTVGtvMHFEWWZuUTNIS1NvekIwQUtXTVQ3SU5wUW1OZytqbUw1Z0R3c1J4cGxvdkRjYzFxcjVJdSt1QWFTdTh3VktHYTlpOTZhZGNsellpN2ZibzJhbzFwd0pDK3V2UXFyNnRUcExNdS9hcEp0VmpDOTljRjAzckl1Umd3VmMvemhjK0hFcHlqZUtMME5wbEVVbkJud0NPbkRZMUVGVWVlNk5YamtIb1FsN0FLT1oyT1ZqVkd5TlpwOHJxVG9Cb3J0b2tobmgyZDF2M1g4OUNyR1J2TXdsUkVDTWxqeTR0Skh6V25jN0pkYWVxaHJqOE9oQUduRVJYLzhGc0Q5YWZXRjdHSDV4M3hMSkZTUHdlU2NVYTVPdFBWY1B2WDdoN1NGZG5QTGpUMnNpRURMa2ZzaXlvZVZsQWJEdFdEcS80VnVES0RZNWVHSmsxQ1NRcDUyRXRSeDcrM3VaZHF5ak9yQ1dzZzVYMXFEb3hTUE9vK2tkYTRxZHVnZlFUcWZtWWErQ3U0TUxpL013LzBPYkZvWTFpN0NwU1IwSWVXcEFvWldUUDAxK1dJQzVNSHN6ZHBnNGRsOU9nbHNkWWsyemlRTTVqc1FSY2c1dk5NOFZGUW9FMFBMMWNSeU9IQ1NlTThzT2g1UEx1d0wxTzkwMFhGNi9LdjFNMDM0RTdIZ0hQZWdpSmdLMHMzTFo2bVE0bU05a0lhTWloK0lWZWs5RUo0L3gzaGoyWnp1U0E1Y2w4M1JwQ3F0SXpnK281T1FnUVpORFNRVFBUeVZDS0UwVnA1ckt2UFhtTENYajBpbFFhWklBcVhXY2c5YldhclExVk9XUDBpRnZqTkZqeUJVQm5penVnTVhWMUIxbmtHOWhhUWg0enhXMlVOU1did2p4cXIvUnVyMlBTd3QvcWlycXlXZTNxbTM2VGJVTjhYZUl0MUUrWFRHc3NmZ2laZm9FT3BydFo3dlZsTG45dVJiTGNuNklWT2dLc1BSSGNicGMvejRGcG9sVUlsNURGaXVsVXFWSkFLNkw2K0sweVBIUzZxbkNrcWRQZ0ZON2VJSDdaUmdWaDljcmZlczBBTUNPOGJsZ0FwbEV6SkVXNXgwbXlMbFQ4c3ZXNW5VYVVsM1NFVU5iZytndmN5ZTNXSEQrcGtReHRJOS9HQVdRYk16a1pWeStCTis1UkNtRld3QjBNRDZEdHNZVHRXVVN1UjNFMmJvSCs3blkyY1RsZlNYTUFZVE5OWjFIVEZIRmNwbkJsSHo4K09CNkl2amhDcERPUlhDUHpoNVZoUEtmQytEa0NVcFVtY2sycWRlVjNrR3lGaVR5dmhNbjFmdVd3cDNEVW4yZXlDZll2MDVTYUhSRXk5MmpNWVc0Ylo5MDZjWlFHVkFCMU1sNGErZGdEMTFXWThUWElaUkhEaHl5OFhSdUJhUDNzY2hSL3hxR3hEbFZWbHlIbmhsdnRJd0h3aUpNZ0MwZVVudy9ZbStFdVpSbUZvNGFiUGdkVEswR1QycXlodmlHT3RxbHF2NlJCRUE1dnJDYkRBbFBHNkxpWHNhUmQwQWlqMmt5VUM5UjI3YkVsZCtweHFVVUd5NlZUSEVzeE85QzU0blhtSHM5Z0xKbkxINWpIdTZ6a0NRVnppcGF5NVpzbHVTbWR6K0xWdnJQemUwOFp6Rmw1UWZEZ0xQVHdtMWFWQTVhWkdVQnJBMzVkaG9UZUtxZlpraU14elBaa1FXQ0piSFdIQ09ZNGF3NmJNdC90UUdSOWxnVUhVVThVbUt2aTlUYkVobEY3WTY0K0J6ZGFkV3M1ZVFJTlNxMFRyNC9GWkt6bzhVb1Qydk5oYUdhV3J2bGpmQ2NjZVR4MXZIVkw4NER6ZE8zc0poRnp5c0ZuY0V0SHo0cmY3RVNaUThyWGZIVUJyWmcxcjcybDJ4VU1QUTJsWkJTU0lWVTg2ZG9DNUpFYVNNeXNrSi9BK3B5VUlHQW9FYks2M0lHTHlpUlFvS3crUzFhZzA2K3Y1V2VJbUNlTzZPdlFvMFpwbHpRMFlUdVhqN29NQUxyaGRxV1NQRXI2bUg1WlVuZWszYWJMWXN2S3BleDMrcTExTHJHSjBSQWltQkRJZEVEdHprWGJnUEY0bktOazlnQXhGcXlqa0hsc0w2YkpNbUpudXpMY29BN3hOQVppUjRra2VpdjkvRkpZNG9HUG1acGtZaW1jSld4cmpIQmxhTXQ0TkxaQU10NEI2N0l2bnJ3bWM3akRqcFhHbzQwWnZ5eHVZTUV4ZHQralBqcFhpbWUydGE4YkNTaTFvUHpsZlloZmFHbjR5TkFwUENVc1NnMkxZaldHblUza0V1cS9TUURobWVDQWxlNHZiT24rY0RVU1lJdFVnSmVNamxrMm1YcmF3WDd1Y1VUYlBzOUlrbU9YZGVUWFNGU21EZ0REMnFoTmdGUFFlNldYUTZaYjJwYTlJdzVpQ0g2V2grMDhNVW0yb3RmSVlidVpGUHVzZkdTMzg4UVhOUTJGL3JCdlM3Sm4zYk1uUlprVWFFc01PL1VFMWRqbHNFMmFnaXJ0dDJaSXZBeHJkakpOMlYza3BML05Bb3NDOG1zdDVxUmtCaHdVN0xXWU9EQzh3aStMNm1uUThpOG50c2RpY21Ya2NVTWI0TUR4SjFQMGtVRGdUVGFWeldsR1NzYk9YenBNbWJ4SVhlZjNyVjI4dHprU28xTUVLY0ZqN25BNXQvWjhvK2tWRFV0L2ZqRTVjNjNhUi9RZWNva0IzVkFWeUdpWndKTGFCVjdhTngrYjZ5bmVtL2NjK05IMG1wejExQThGbUcrRld2VUhQdktFdSt5a0RlcEZtM3ZrSE16OS9UR2dNcVlwNWgzV21wUGF6MzdqV281RFkzbUZUckM3SzU5QnJHYm4yWnBaTi9kLzBnMGR3UmgvMkp5R0Z2K3JjZldEOTVCd0J4NFlnN0hma0dXZHo4bUZVdDZ2K25tWUJoZVRyY3VKZVI4dVh6NTJQVWh2YVlOSi9BekU4cUdWeThoK2lWY0ZTc0hReE9Zb040VzlpT09mdkIxdmR1RWg3MnJoK3o0d3BEN2xleWl6RWVWS3JKMnRYdXA1aktvUnRZMzEzVndpaWZ1WEsyL2hYNnBsTjBKM2tuUm1Ic3AxRmpKZGoraURKTlQ5K0lORHN4ZjJpdjdoN1JJUGYxdWFBMWl5SFo1OGkxSmdSamQwWm1vRUI1L0RkaGtVSjU0dGJCejlDS3E2Uis0QytoNzgrdmlRcDhta1NnVU1zdWlVVnVqU3NpeGR6UkIzVXE2WlVUT1NmTmtaZElUWUFvNlZDWDFTeDg3aGxNdURJWWcvVVpqYWI5RGFGa1pIeVNsMzMwN2RXeTVPSWdMdmI1cm1pWWs4cTF3d0N0SWRGY1dza0VpNE1DT2dCam5mZFhwOXFvTjBvSktQQlVETHJrYjZ1bFVidm9xVXlNWmRnZVRhYUpMbXhiMllFNFZnMTdvYzVuZE54LzBpV0l2MS9RMElVa3UrZGtGRUh0b0c0YkpxWVhKNG95SjR2SnMrOUkwQm42SDlLdEpGSGFHWVdOZFRsdDRMcG1UcWs4RzhtS1BsaERUeE91cmkxcHNrZzZ6SjhDZVdFNmNjMVFWMlRTODBsMHBUWXNEVlU3U0t4MUdPb0dqdE1WYldiZ0RSWmd6Q1VOMkdja3lnZzFIZGUrb3MrNXJrOUN1dVJqU1BVMFYrbkZ0UG5wQ2MyeGRDVis3NEhOZHlpdnJTektDSTVqeDNPQ1E5dnpsSjVQOFBTWTlibk8zWUtPdFlNbGRMTmpUaUxHU0ljWElKckNZL0Z3T3B6VlRWeFFTbjBybllkYUExNkMvOXlYVXYvOEdoZmtMbVZmOVpITWF3WEVYeTNFTWdKUEsxUnhJYThLeUdIdzJwenI1c0ZwUzFDNm9hM3BnQ1F6WVcxbE5lNXJLWWhLSnBSdVk3TVA4OVV3WEFBK25TNWF2ZEFZTkREK2x6RkFIb2lOV0g1aDNrNnpaK29NVWZsenlTYk93UkNOUkRKVzVrNnp5V0pUU0RVK0NHQ3hBa3ZpMjJnZjFSc0NmbEM4cWVoWHV5MEpqZGRhRjRrYktoRzhxdnEvZ09HYXhJUUpYbnJ1QTNSVXNZU05sM09XWktRVzEycHkwbDNMNmdmdjZQbDNHWUp6ZUNMVSt4bkh1RlNIaU9LNThFVmJoMlJXNXhhdzgxVXgyUXM4N2ozQTc5VDdDb09vUDkvNWZUZmgzUTluVzRvNmtMeG13L1ovYnRuTlBPYTZkOG14RUN2YnVhVWIwWWw1SEJUYkw2RWF5akJLd2JkQnlFaGNRL0hWZ0YvQ1NSb2NGZnpKTStHUVJKcnp2T3ZXaHpWak0rYzdIV1lZb2l3ZmZxbHJJS2c2aituL05weWVhbEZSZTFLeWQ5Zk9hbmlqSjhvZDdNRzZYVm9CR1RDbnQvYTVNaU00NmE3M0tqTlN5L1VOT0hRaDltWWlDUFVPZXI2UjVieXZQYncwUXJRUzRSR2wxOXNQd0EvWlR4U0puMGcydW8zY1ZuVkV4VUxPNHJiK0s4a1pOViszaGJkbG1jYVJuajlEcU1xeFovRUN5N0NsOG9OQitSQUpkOU0zM0ZOMGxTMGN3K1piRUIySzRENzJqbDZESlo1UjdTWlNzZU13YUhsbG51cTRQQWZTclEwclRGTTd5SW00VkZWcW9wMjZGZGh6Q0dzMmp4YkNsN1hoOWIzN0ZSY2VmTWY4YVdRVHlNTU1aVzVCOU54NGF3bFZKTGJkVllIUFhmYUdQL2VjMXVjTloyazl1RHlrUzN0cU9TOWdVaEl2MTM5UlVQaEovQ0NHZ2J4V25lYlZwVzZjL2htNlNVS2RkTEszdnBhQThjNUJMU2wrREEyOExHNHNldzVtOHRSVFExczRMNVlWWlRYd2hqK0NXK25yUnMvaENrWnMrN3hISkNWeVBYY3VTTGZwdHBNSUtDNHVGMVJQVzA5eEJxZ0xtQUZ3aDA2bkR4ZVhrcmFwZUhzMVFiRk5IQTd0WXV6L1pxN3pwUWc3N3ZYMjZMaURLYi9SUjN6UEJyd0pVV0ZEb3E5S3BURlZFQWd3WjhFUkgzSjMxd1ZFZ2l2YlRwV3ExZWtHeUtNOS9zTlJGL3l2c1JXR3ZIdkUvalozczM0N0ttRUR4RWVUTVFZUzZMRzhXWkRrdGRPQVRHWEovRTNxUWhXQWlENTJVc215eEtDSVhTOFhPdEVrWWp0S3R0RWhkYWU2cmVuaXNxbi9pMC9LZTNQeG9ZK1YvcWVsL1hrOW9qMmFKdDBnN3JEblloN2kzWVZobE10UHUycjlOUFR2Qmg2VWoyN2ZYa0FjODdmZzNzSzZwWjZpN1RreUl5SWgvY3ZPNVFNSENOZmVWWHI0d1JaS0sxNTk5aXF2K1NZMDNWSkRpdEg5Ui9PWW1JNlMweUtQZlJpSXZTVDVJN2lvTEZOTnZFLzJaaU4zWDZ4MUtiblkxN3BOemV1R2NUb2dLeTRFdGIzNm1KTXNZeHZqY0FFNmlIaHN5Z3BWclVkVnlxWkUzOS93MEdiSWZ3bkxIQ2dzbUZCbE14VGtEUzRkaGEzM0NDbUtNcDB1em1xZGxBdkVqeWdNcGRMYkxsVFZTNTFrVXNoczRpWWozREdtTThnaHc5NXNSdWJFa3ZETXdPQjVFYzB5blJ1Skl0dm05UzVPODBXclVTTmJHSTBVRFZ5SlNORS9GWlJKMnJXcWFDUmJ5OW00a1FjRUNTL3l4UUQxTithaXZFR1BuNTJzK1dhdnFXdHI1TDJYMnFQN0xQS0VJb21TOVYxdW91ZDZGT3lHa01HY0hiZk5WcHJaTDk3RGVvMVJ0R3NrYWFSSzFoenQ3MC8wNXRVM2dFTXltRjVXQXlzdGtmM09HZ0ZGcUtKek1CMHB5eWRQQVZsR0M4dzJoYnJiRTlVSGxjM1dCV2lXMnUwblJzY3l1bzcrVytWR2ZHd28xUmlPUGJ4bzBQMG1oUm9oU29PNlpvbzJRUTZvUnRPRmFLMzJqMnZhV0Z5eEhBallCeFJXa003YndjcEJpbjdiZHk3aTRxUXZTZVJUZUowSjdIOEoyWVBXdEFhVHBFVEE5RlY5blVxbVp1UW51M004bDdIR3ZKV3N3WGdJbWFnZjRTWUdRNXI2SXVXUE0xTkNjTk9DSmJRRFR2OGdUNTNWRTNRSVdHRGZ0VlVhRnNjaTBwa29LSXE5N2JlVXBZeHhHK1RjZjc1azBFUENQbi92My9YeVh1SG1ENlYwOGsyZG1aWDRhbW9UL0dyWGJnd2hBVUh5elUwbEtkbi9HcGZMUFczcHhDb29yenlSUVFKdUxUQ2dSWWRlYmhBY3RaMHUzV0sweUJETE1EMm92aVhWb2xHYlFGZ0FvM3dseUVtaWJjakpxQTl3cmJReWVRa2ptVXk1VFh1T2RxaklSV3hGSDFraS8rZmNxZ0tPaFllZFdVRFNKanFxVDYxTnhmWldsNURqUXlhOGlOMGZWVnl1cldCRmp0cGV5MGw3dHIycnhVQXgxRGlaNjIwUEtDOHRnNjFCVG1Cd0R5YWhFT2h3UDR6Y0tkVGRoVDlGQVNla2dDMEorcUlwMnpLeTZ1bGd3bHpCVzBSMVdTcmZQNFNmc0J2ZGt2Z09YVUd3SEo5MUMwd2dpRldrZW5Fd1pobFcySVB2Z3RjRGY0Y3MrSnBSSjJXQzVGQ2NyRjZVUUYyMVFEbWFhciszaktkMmlVWnZjc0Z4L2c5UDFSRHNVU3E2ZTYwZlphMHFSOGdqTmhZTm1CQTlCNUhLMG9YdU5tM1h5dTNaNE1qc1BucTFKT1pwR2czUVZWSnpYTnBSRzBaYU5BUEZJMUNmdTNNQ0Z4TVdTVGFQSS9FK3JFZ211WHNmU0pzek9HbEdIelBqR3pGU1FEdCtzbHMxNU9PR1hvZG1xcy9VSEo3ZE1CU2dKZFgyZW1MbWJSNG9KTjBHT3IzeG9zdVBvZE56bUt1eFBoV2FxNDc3MUZsSGcrbHRQU0RVL3RETTBTcHBrSEh1UG91NkZNZFFYNW40U0RQVVpaV2VIWHN6bGx6QWNrM0YwY2I1ajhHak83WmZGL3ExL01oNytBcHNvNnlJNXArVkFqUEFURjJESmNkYjV0Kzd5N1NQTk80U0pDUG5DQmcxNFRrUVhVVE5Lcnk3THhNQ1RiZUY5SFY1OThVNDJ0OGRraU1keHJncXl3UmZ5U01zdWpFZ0dOWm9yWjRUQ2V5Y0ZBKzZkNVF4WHpiOHliU3UyY01CekFXRUlPTUsvNC83a2FXeHBoNTk4eGY5MmpjK2FsQnBnbDhTaXFqS0JxZXdxd0VaRS9ucThucmh5QllSaGRJUnFrZTFOOVI1bDc3NGY5S01YZjBaam0xNEZDdkVQTmFqU0NPaDhnL2ZjbHFhZHFKY1dJb3Zya1VKN1hMQjQ2d0IzcVIreXNPK1k0M21lMjJGNDRHd2FoQnZTYWppWlBEWE93ZGl4N3MyN085RlovMzNEcng2S0ZsZUIxcWhPMUVXNThzSXc3NFB1RVd4NTFuZ2ZYeUNHQ1NIU0duNlVhWHduOGdabGNOc2xjQUdHZW5hQUpvSHg1OWtMeG5jNDdaUnVNQTRJTitVeUVjMXlUN1FPY3hxKzZOSXNmblRzLzFXTEswWUpIYVdzUzdheFBVRndYVCs2MCtwMGJDWlVJYUJBV2h5RVRjTWthQkNDMStHK3dvTHRJSXRJZmtSK2M0bmRyeEc5WUJ6SFpIQTFJWitxMmRhdDFGa1dHOFdrMXR2bTRMV09PY21XZWloS1d2MW94N1pRaHFnWTUwN21uY1JrNEo4NGd2RkViTEhoZFFFbVNYNlA1RmZjVU9JeEVDYllWNFh3dVJPVG5zMDdwdFZ4SXI3UkpQcTRrUTB3OG1OekZ4b1BTOGZlKzVabUhaamhIdkVxYk9XN3VTdG0vQmdGVFRSUXgvN3NkWEJUWWdlclpFVzRRejhLdWZLV0tmRnlUR1h1cU5pT0UwN2hJYUhNWXhvelJsR2lvZEpnVS94ZjUraHpVcGV5eE1BRkEraFZKUTU3ak5LdE5VZ1NJemduV0xPaFNLRVBic2F0YTBoUDBQYktKeXRmWU5GMHBocWx4d0owaThnb1lmR3BnNlRzeGRHR0t2WVBJMVhtTXkwYkRjQTVuTkxMeEQxc0VHbENMNDZ0SWZWajh2MkpNWkwyc0F3VklRUXprWEkxTDBsaHdyTlppeVdHNVBGWU5jVnJtN1h4aXhBWnVha1kwMUpQYjhLMmZLWnlrUnNQU05icTNDK0FIdVpJWElENXkycUpySnVkcVdqQWVYekZnRUtrZnA4Yy9uOUJ2VWxJKzBEVWxqM0FiYm5ROHpJdU9SMzRhK2Foam1QTVZTdXhIMEdMeXRjUkNodkErNkJKR05HV29WNFVtTVNqUTdZcWNlbkJKWFZUdTQ2T0ZrYlJaOTIrMEhSY1RjZSthS0VBSkkwSy9ycDFXczNvWCtpRTdKdm1ZTEZIRVRyQ2NTNGM2M3JkUXlUaHV0V3FEWGsvNFBnT05iSW1NWkRvL3ErM0JoK2RZb3czaU5PZFM5NXQ4V05IOWtXVlBtSytyR0xBVVUzZnNUR050OHgwOXM2ZURpNzQ4Mjc1RWN1ZzBKaTJXa2ZtMHdvdy9zNW4zOHd3eitvQ0tmRzBWc1ErOGp2VnNYQ2JiNll5aXhGK0UyaG9BZ005NUNoWk5FSU9mcnBrY2t1aFpTYThZTU1NMTd0aWlGVHJYQVJYMjFSb3g4aUNqSTFUaU5xaHYySEVRelpqY05jWEV3MEcvaHFmS2FsTGJxU0ZCY0NBakhocW1IUTFmclRVZkMwNExFbjNLZlRjdjRobUFuTzBLT0dMaWlqdjhNQWJISlMwK1loU1REM05KWllOc1dhTjBmTVJtZUIyQWU4NlFPc2hITFVDTldzN000eUdzUDl4MlptQmVxeGxoaWMvSk83V2liS2Y4TjhmYTN6dkZqQm9JNEZuUTl5QytLSHhCNTQzNndpNS9EcTlFbkM4M2ZwU0FBMndET0R1RUxZTDR1a1RsNGkvWUcyWXl1eU02aDB1cllTVUtGcDV4djJSRXFCWFp1ZmtIZFhGMytWejY0anZhUHdtekhoczlRZURoSWl4b21idHpQZTI2NUp2SGVWcmFTNFk5cUZVQndDbGtqNU9FbWxhek5yKzhUa1lPczFKUTJYTnZxNzg2MUt6T3Y5R1ByeGQwWEt5R1JvdTJ4K2l3NzJYcTBzUmhhY2RtaEhpbWNoQXhDTjc5Rmo3dHdmNWt4OGxKUkJKeDFZbU5vbHV0ckcrY0EvcVlPT1BwbDJVaFdiWnIzZUh3SW1qbVJHejdQeXFibkZCVUVCcE45UXptWVh3U3Q2WFhZQkx2TGJsVmZ5U3EzdnVuNmJqdkJyVUxONVMvT2N5Wk9NTlp2ZTMvMC9lZ3JLN0pVYVZmcHZHWlRqcEhOMFc0NWpmVzdoVEpCbmt1Mk5YRzhlRGxvSlBHVVdmS2dxWitpV0xQVi9YKytEcnJJSytVTDRUQ3c2c1NJNXV5cDBSY0JXWVdjQUlJREFwTHFkeUdET20wcFR3bWd0bmZnYlpZaUJ3T0lTUmNjTlRGVGVEM0t3bDNXOWRYTCt3UFNaOUdrU0FvWUJNQ1lpTlRGWVdVdFFtZVVIYXEwNzdSbkJCeU56endXTWNic0QwSnZMREt5c2FSR2IzNXRCUXpFQ2FMZG45bkR4U3MwZ3NXc1VTWDhLUUFYbGE5c1ZEb0x0QXp3VllWcDgwb3UrdTFObHc5Vk9Hc2ZvQ09Zb3c1azNHbkVtRVU0Tk11RjJVV09YK05mOTVYcUUxRmlVRTZBZTMreHBVU0FWbjJCRHAxRUdJV09XaS9QTjNhcmNsY1JZUkdZZkYrUzBiQ2c0N2tncWs3enpvM0hPL2ZNNjlEbXZ3WEZhMmlKNTNrcTFwUU5LYmlVdCtpbFV2ZXFPK1JHZ3RGM2xKK0V5S1FZMG1qKzRZRHRDWWo0empGMGwrNHFNZHgxVVVieVR3SE5SaEhSeThnd2xqNXJ1RGRKNkcvc0thMTY1Zk1ZbW1NTXhNR0xJTVRleGsvaC8rV2ZhdHJMV3Zrc1lQWVN4bytPclZMdGQzVFBwcEJHd0hFb1J6ME4rRXpNWmtDZkdmV2NRKzdlWis5ZFJLeFAza0ZkZDlxbGNaRlZHbDVFNFIvVThFZzQxMEFoSlNLVCtZSWpQWFFYN0liV2FMcmdPRVZoNzlOYmd1MWsyNEkrMWNVemFsL1F4SXVMQmd3czU0YVNJN3ltc2pkVTdxcUVjalVMMmM0aDUwWlZreDBOdGtIVURTVVltMkZjcFJZM2pjSEx6bk5QTHFvY0pQbWV3NkQ5blRnWGs4NG9ReXR5SDhFcCtHNVZ1b25hZStnVTB5ZjRzSDI2bk9hN1RhVlZKZlpjcmFsODE5MkpaOWxMVndkRjlHNVlhZUM4WVBubjFCM3V0QWZuK0M5WmY0Mnh5dVF2VFc3RTZiSTBYSGRvQ3JBWlJRTDd2aUdsYXdIMnU4T00vbXVwa3owV3pXQWw2clVrZWhwczAxZGJmVVdybnJWTHRNVTFIWWlGRWJHUDFNejhXMDBwQUxUZlhtSDZzakljRlJzaVJLM3FVRmxONGlpUUlrVktvUk5WcXVEbXpQNzl5N1d0L2llK015WWttWEpsdUg0Z3FOK2ZNR2lLdDI5WjJQVG04K0lRQnBRd2k1bk9JZXV1blE0dDJoaHN0YUwrcUduc1NEMjdGVmtMTTY2YmkvMzgreWFLOTRaMmhUUStaRWhuazFld1A0WTNrYzFJUUJVbXNZSXZvUzJ5UzZUWU42bkFJWmloL3FUb0l1ekF0OGpFVE0xY3QrM2hEWm5KU1ZUanhySnI4dFVranNaUzkzTzlFL0xYMmViTm5oeXdXMVVKdHhTYnhFNUFrQVhMQ0VYVkgzbU5KYnp4K2VmTkxYWi9YNXMxVjdpTWhlQUlVamp2YXlOT21nckt0aHpEU0xYdTlVTUhQRDlOcUNlVUpJYy9FVm5qR05QeTBrOWlxZXc5cDRwVFVhU1dHcTdaK0FtQlZhMnFkM2dwZTNrMU9PRXI5TEw3TlNkNGExemNXMC8wdmdEZ0JhLzFGdU9EK21JMmY1MFdLWWdtZ2F6L3ltNG1KTVVxNDVMMnQ5dCtQS1ZhQ0Y1UXBWeFBlV2J3elB6YS9ibzVGU0xuYkhqU0FMUDl3U1g4OGg1WmNERTRaSG5jRUE5bmRxSTdWemNNM2ExcTA5UHBORmVvQjludUlaUGV1Z25IeVVWT0M3MnBiR3pzYVI0TjRBeUhjZGxUYk5ZRzIrZWxtWUNKcW81YlltYW9wT3RDb2tPYzg3MU5va2RwcWp1ZzZDY2g2dzhEZEVjN3FjV0Z6M3ZCNkxIMDNpbEdnSHI4Z3RpazR4Mk1PZ0Z5L3ozYi85dndEdjNlZGxremR5NE1oWWdGazlZcGZTQ21YSzdFY0szTmZ0bFBYRzg1YWZNT25BUDc3UGZXdVBXRlpqM055VVFuK1UrTVVnWElKb1U3OVVWMkdQYzRiTWNxaTdKWk90QmdQbXJ5SCtJUDJCL3ZERVpvNkJCNk8rYjBtUzQxdHVWOGluYURwRmY4bjh5OVovTFpBSWtWN2tNc3pJN1AzbFhvUG5wVFRmK0NVaUxMNld5d1N1TmN6VUxYdlZIV0NYb2J4SU9wdEtXTkgxZXlCZ0hNd2VCTTlhWnl3RGp5aHp0YWJuZlIreHgvSExuVkd4cnhTSVdQYTFjZ1RpWHFPZDhyOUNkUnJFaGdrKytxZVlnVitkQzVveDdkaXBKVFNKQXlBSWsrUXloMVo1QURuSklubDY0QjREVUtKSFVHL2loODNPTFkvbk8yVTI1YUhXZzBiMCtOTDREb0VKMjRNd0o1Q0JQd2g4bEQvUXVQelA0TG1QdEJwRWVJenFoZWpUdDFBamZLRmpvQ1JkbWhpQzNINCtBbE1RMkhkUVZyVEJqREJGcmQvWFd2czZHL2J3V1B6aWVOeGpOWktwS1ZkZUpKQUVWL25hNHBYNXlEK0dzRHp3RG1QK1VmWlRDb0tkZlJhN0R3V25FNDdSbXdiejdmUFl6aGZYU05vTndRd0RVN0NrRDZiNjh2OHJpYUE3cEdSUWYwTFFsOTlpRWVKUzRENk5Eb1d4QUJQQ3lrdEtNMlozeW1od3NWYURlWWt2d1pMeHNMeXdBQkYvKzJuK3Z0VnFRYXVuNEl1MUtHSGVmR2xnT1BSRlZ1bS80QVFzL2FwT0FnMFZMZFhacDJydzR4SE1teDlNeXZTWEhtMURRWXg4WWcrRnVQOE1lNFloTTR5SzlicGFUTWZwV3MzNjBVdHVscHhIT2dTL3grR3RIWkdnTWJqSXQ5Z0tPWnNkZjk2Y2s2N3VWYjVleWZHamd2SU9VdDgwanNhSFdERnJFQXpsQXdXa2NsYWNkRklLZUxHR1JGdUlKV1lxNGFwYWQvb2RFb1k4TVpRSEdycitLT3o2K01hMUI5b3lWNW0zaDNua3BvVDI0UkM3ZUlVSHBITzBpR2h1bzFPYzhNcUloYkVEOEFJbVNoL3p6NjFPMHU3U1ZXbmxXbXdnaEJ4N2J2eVBRZGl4L2txWDBlTGdvZnorTnJCbVZoVk0yZFpLN2VUQWx1T0xxZWt2cU5UZ0VMUi9wTnJNL3hhb2xMaWZ3MGFQRkRZMDBaZThyaDVYaldmTFhGZGFvNkdEbEoybjVsRmxpb3JrQUo4U0cvM1FubCt6Y0JlOTBDWnFlMUFIMVIxNDIxbEt4YVNHZW8yTUo4WDgrZWlxRWsxNDUwemk5UnlnWlAxSi9rV3NGZGtNRS9FTzBUV2JyODlSZ3BrbVlzRDd0ZWV5NXczSjlTeDZtOVdmdWN3V1Q1M0w0NVJUWnpQS3QrOS9SZ0FLM1dLeHZhV1p5RXU5M1g0ZXF1aUtCYm11dGY3KzQydVRYdGE4dUdMN1FvbVV4WXFRMDVxcTg1YnY1S2xJbS9WNTB4SzI0THlFaEptR2o0M2VTNWdSb1lrQWZFbXp3eDkvMGpUT0ZCT3VvZHJxUnNMT1U3TURPcER6Z29CdHU2QzRVZ2tYM2pHMzIvS3RGdkpka091RlNqZGdhSVNYVXNNUU8zbnZ3ODhwdzUyMTh3dUFqWThOdE44MmxYUTF1Qjh3YWtQZlhnN2VJdDJVSjhmK2JZOUY2a2FxZmVUL2Y5YWprTDZTU1dDWFAvQjFKNUpNQkQzNDJNOFhjTG1SeXloNHU4dGppZVJidC9QSkhVMEZqSngwbzJySnBOKzJGdWJERGFrL01RV2w3MTVWRHNuc0txanNTTStob0VIZHJlR0ExK2hCZ1lrMmsyUFZYRzhwSFVDejQzcHhaR3VjaTMzaU9HMng4NzFwQ252SGI3TGpwbUZRQkN2V1h5Y0xaREJJMTB5S2s2b09iL2pqUXkwT3ptM3RWVDlwNGJFc3VEV3JCN2VQQkhYUjVJa0VtenJrRjR6RlhuTENXOXVDMW85ZmxsczJ6QlJsTDNwMmlzNDU5Nk5YdjdKdWtxN3o3WDBleTdOSjlpRGtXaXNSWFpZUUtDOG15SmtzZFU0N01EVE5MT0I4VE9EMHlvZzR5eFFkMkN1clhsVUE2ajRQREtIZ29wZVgyWHppTXp5aVQxT1Nib2lKWmZQUFA0RlhxOTg1TXFyZElOajVQZzY4TmlWRENVcmpzRitBQ29yNk5rNTRGYzcxcDEvL0FOT3F5R1Y2cVlGS0I4Nk1BbE9ITk9zUnRMZGt2dll5aE5XZGQrcGY2ejVReWVESDZXR2Y2d3Jka2dNaWlLRG54cjFFRDM3ajdqL0RuNlZIaUxVTythY3psSUp1MWpYaU05QnY2Q0IzenZQUFdqbGtVZDlBNnplUXBlNVlHMUh5R252WnE4Sy9UWGcwN1RNOUhxbEU0TjR6emRxdHdhZHl3dlJMeGlua2ZseEJkZFBvQjlDazhwdENKN3pzUjhhZEliR3JJWjZpM1ZOUklIaG81cm1maGdXVVMrVzg5S2pPNEROWHZNM2FxTU1nU3JxOHBKUDByUEgvSk85SDQyMEtCZ3lBMGNkSWJkTU5yWWt2bTZiVnJJUzY4d1AxTGN6NWx2U3A5djhHUVc3eExOQnh4eVovRzZBRVVrdVc3VDFuZG1kMXB0V2RQejZteTdIVlZIR0YvMlZOcVpTbWRUcXpyTkRxMkVIYnUwZ2VEdytJM0xzdkFHeWJxUzBkY0pzZENnMit4TXk1UGtreGJCL01Zd3Vldk9sUFRNOFQ0RGpQWm5DZmk0SEdCbTNiSDJjWUhRZHR2RzBmNWpXMERmREcrWkVJZDdVRC9vTCs1eUowKytib3hES2JMN1RNbm9la0crV0FkS0lWWUxrQjNaK3JUeUJmYnBscjJycnBxTW1kM0RvdkpMeGJMSnEvL1BCZERMeDZaOFVDSG44S1RLWTY2dkRvenlvd3JzZldEZWh3SE1qOTFmSmdJSGJYMFhKNHgwa2QvV0pjd2djQXdCZ29GMjRYbzJBc01NL0U3VEhQVTh3TU1BaWNwQVJvamd3WGxiU2M2UzAxVlVCUjU4L2NQQmVSUXFoUGhqczFkMi9MU0RqT1ltTm9PVEMybWJONk9YTWNxVmRXdUFiTWs5enVveVl1QmNkM3pmZFcwbzNtYWNUTnJoT0JSR3ErRjJPenB0L1lMWERCaUl1OTVzVHhOK3p3UVl4YmtIVk1kdDhuekh2OTViMW4vSHdRTEVMd2psWU5NSkF0WkQ0Q0JKYmpsMFpvTk5nZW5LUmZ3Y1dxM3hvRUxUMGVSYUpJWTYzdW9CZFE5SW8zUER0ODl3ekdvNVUvYjlOQy9ya1BpSFdaMysxRXVmb2tybWRSU2xXTHpJaVEwV2cwbktGcTZEb1VaSEI1dG9NLytPcldvODFqMzdnczk3V0l4WGdzQkV4cXVFZ0ZkMk5MWEJIZ1h0eDExT1ZWejVGRGFpVExnMkxtVDcvS2ZWVHdVNVV5S0lKc09vaHl4U0ZnSXVXMkxVR0xudElJQmdoWmo1WWRjckluS201SFVsbDBUbFpKbTVNZjBrd0hUR3Fyenpub1FMeVV6bnpGTk1GREdHQnpNbmxaWVdmb1FsRjhRcmMrWXFYSlhQMjJaNEgxYWExL2ErVlpMSUVZWEdDaVlYTit4eUFmWHFJZzZBREx1aUE2Z2FncFVMOWdQdEtLVnBqb2E1cmIvY3RvTUVUb3BIME5maHU5L29zbHZPUkkybCtmWFBNSUVwenFDajhieUhFN0VKYTBaYlNwekdSSVEraXJidzUyMTgwbnRZWnFpOS9ZcVBMMisyU0VrcFhqRitnaHZNVXlCOVV4d1p2dzRWcDJWTWhiUFA5eWRESFZ5Q0VsWjdTNTJPSDlxN0lWYVBYZkprUk1aQmxjT3N5NlNVUDg5TVBNTlRJVlFZN0ROM01KYmN4OUV1TER2TEZqZTdheHZsL1lMc3g3dWRlcXNYTk1HWFcveTNXc1doTzR0TWNCL2Y4dThRT3VUcXIrVEZxY2FoYXU2NnUzR1JDak5na3EyNUVQQ3ByZWxjaWFtQUV1Ulg5MFNuc0dUUCtGN0MyUG5YWHZrcTdxTG1ycmZpay94MERKL3hxenVZUktxbWpTZm5TRk9GSDJrU1BNQ3ZZOERyeXlYTW1pcnMxMy91V0I1WHhxYXh6dHV3eURjMy9aTitKRzRYNFR2b2tla1lZaVY5NGs5K3NYWUtHWFBjZ05jVEp1Y3R2WE9Eam45dUdNOVZKa0hNSUxLeEFqbzAxZ1RUbXNEWmxlWmpMb1h2SjIxTHEzbGx3ZWJUbWxaWjh5YUNxNG1RY3RUaVFwazRJcmxaSXBvQ3FmdWF2TkZ0dWN0TWNZcGlybUpicHlrOWZOdWdkK2RHT2lNVnRQVHpLM0FCKzQ5RUNDcDg0M2ZkNkxIei8wOUp4cVlJZHlmVVlXMENPZGF5M2ZaKzVxMVpabzIxQXp2N1AvTDdyTHljZGpvMW0wd3plbkpNN21sYUp0NUJldFRVb3Jya3E4U242aFhwa1c0YVEvWjkycWMxTG5MRE02RHB2eVk5aVJudWNMcDhZZUJmWTNDMzFmb2lIbGRkRzVDL093c3dKMU9HcWxxbWFpWFUxclVNdU5NcTliVS91dFIxSXVyTlVQWExUdHQzWXU0VXFxb1NOQXZGY3MxQUdjYlMraUtpOHo1UTYyVk9QdUs2L1VPVWlvK2tlbEowcFUwbVczSm4rWWZWaEJTQ0x2S2RtMjZqZC80eGk3SWdMTXM2b0NaRmJWWGxwTzBvdDYxK3lrWEhZeHpsVnlxYWFlRnlDVzlNdXZJY2oyOFFjRm1GbG9yb0drWHBSQTVab1oxM01PbUdKNktIT3NNUWduT1BkZGc2c29JNnlJekZ0eXlQS3NON2drOGlKQmVWZ0hkcXd2ZWVzWlh0a05FSkN3Rk5vcThSQy9kRFJpM0hqaEdubEJtSjdKMkw5bmYxTEp2eHBSWXRJdHZSREFQd2ovV0R5eGdKT2o4aWxweTVYZ0NpRHhqWUFjYlEyYkphckdTVldjUDFhbmE5c3F1dWZtYzhaTGZMZ08rbWorKytYclJKaytscU5xS1FmYThuMzQvVEpEZFd3ck1iMExFN084c1BYZTB1WDYvMkc5VjMrY1VBTi9aK0hnUjJjckVxVnh6Z3Y0dWY5ZTF5T3dLTW12azdKUzBCUmNjdHpmQVp3Z2Ivek9JbHl4akZHME5DK29lMG9YWnN3dWkyRVoxVXdnQ3VHK1dYVFdHZUNYdVJIdVVoRERYRE1Falp2RWJRdHREU0NwS1k1TzQ5NDYvYXRlc0xGS1pIenh2ODZ2dHdIaURnZTBHZ1pLRHNORmtrd2pITnRBQlBGRzN6bm55UlduMnlrUjkvNGs2NWxORWR4SFYxT1NRQXkrV2FyL0NsZXQ0Y0FEc0FGTHMvOEJxTWtpRmM1ZGhJcThFUzd2aVA4bEZGVFNVcHhHMzhTZXV1dEFmVk54R3FDTEVHRzNjOHdub1JCdFRybGUzV3hiUW1LSnljMitGY3l6SzFjbC9PanhCcndqU0o2YS80RUF2cHZCYnVsQ0xTalVETUJNaU1haEZXWmw0OVl4b25OSThrcWpxTWJiN1VtSEcwRDJsQjd5TGVlWmZZUVpSMFNXSXlUeldkazdRNEloaU1lN1VLazd6QWN6cTcyOEx6OGhyc2VhS25sVmxvanlxK3R2cHQ5UmwwMzcyU1hUYko0RWpCWXRWOUJDa2NGRVRqeHNORE5zQzNGcHFra1RQVEttNmtKay9zOFBJOG9wQmRZRlcwNUpFOE9MNEthaEFtR25hMGQyNkNwdENCeFFBdm8vVE9HUE4zbEdGMjZGOXBHVzlidEtsZTZ1S0hJRVFLNG5LYk94ZWRkcUk2RVRBbmJEUTl0K1RPZ1RJQ0Q0UGZDMUpwRnppSVBQM0Nta3BnK2xUWTlURkdXbld0Zm1UcnVYTDFBamdVN3dvQ09pMHVKRjc2blNmQjVEb0lLMnNJVkF5cG14d3dsSkswWTZQdkRkYUlaU29LdWZWOTgydGk0NnEzZkFnMkZZZXRtN2NWRW9ROXJtMmpHUE03cGVJRUlNaVZKeXlWUFpmK1RWbjRDa3lBNUVDZE1RRG5vay9OSGY0dGZCMzZnd0ZOMGYxRXAyYmNNYWplbUN6SzlvN254dWdTZGJEMWtKVFhodWYzNUJHZW1pWFg0WjlxblJscHA0K3JOUzFJQ1lzZlpaRWpXODg4aWF6aWVjSGFpcEw4T0taazJVbWI0djgwU1hyQkZWNjY2REgya2NEb1l4ZWZKZE1oVXp1MTdXWUZmZ2swRllaWi9jSkxCOS93bTRjazhSVExhS09ReUNsMWpsOXNmOUpPUzNTQ1l5VytOYUZSZXFVMzJQaFNvRXpRZmpPcmYyTURJb2RLcDhwM1dFeW1UQVB1Mnd6YU05Rk5zcjROYUJmU3pBcDY3RWNjSU4vdnh2RnhoakVGUkJkbUNkaldKM2xQNjluOUlJRVhoVStHNjR1bFlZUlEyL0lDUFAzb1RQdERsRy91SFRKZUxmcU5XTzRFVWpGQmhna3p1SVFnM2JKanROakZ6SGF6bUQ2Sk42Q2ZLWitubjRIMStRRVhIeDllQ2F6anM4ZWFndEtPRnpYejBEbGZid3p5NWJMNjNMTjRQZjRCUE45ZjRVWXJ2cUJPWXMzbVNrVklPejlFbk9uSnFnT1cvQUdwS2ZWejY1WHphL210TUFHTUt6b01PbXZPcktCemNxelJSS3VOcGFnbE1IQ216bTdZbFo3RWlOWXlFT1RMYTkrUi9GWldDeUhYQ1o1U012V0JJcHhkTHErS0x5dEV4elo5OE16NTBpSjVQZHRVaUZIUFIrQmZjYTlEN2czZ1lXQW9ZaE11VnRQK0grTFZqT0hzL3dWVkhTbjR0SVNyeW9hU0J6MnBDcUN6MU11S0R3R1dSTFVnUEtldUtOeXV4Z09zMTY0TGpZYUxnRWlCY3lPL0wzV1ZQeElGSlNXeFlyMnBRTDVOeFlTVi9TZytvVTFrUU5lMzBNMlFLZE8wMldvTlYvT1F4ZDRwVlMwTWdLZTkreXNROTVueDdobkVGV2x2b3dYcFZTTzRsL1ZjTXhHSjI4MDU5aUtKdW96YXJEYU1EUFhnTnZoMzh0cjhoY2c2dEVia0FHUDdDK0crbnI5YlJKNS85ajRrRjJJYjFJdGhQWEZra21vT21zb2w5SGFON3I1WTV3eUJxZXlseUpIcVVZK1UwL0JSa3pMMmdpNUxka3pjTW1waGJoVmZ2YjdlTmNnS3ZqcW5KbjBId3UreFFiVHNIUWxPNFpOclhKZUtHRTM0MTdNdGptb25QR1BlL3JNTVh6RW9HRE0rSVJGODArY2Robm8yY0dMdXdLUUJSTk95VXU3MW1sbU5Jd3M2ZHdUTDZ2eDlvd2pKZmFGcEVhL3p5aSsxNFNhU2JVUXRnOUdIYXJRN0NabU91VjFwNklraU8yYUM5VVUzMVpMdkRxSE5DVjI3UkgyYVNURVlSZ3pUclE2WkVla0plaDk2NkVXR01IUWczcTlEbjQvT2JjUDJ0Q28yU01HTmJqcy9MdGhSNEpJTXhzTjJkNmxaRVpkUTlIdFJkcU9EWFp5SE03a3RXd0hUZHNVR2w2dGpNK1RNVmJMVlVoYnUrbFhsZTVHUTQvakN2WWxRN0hYNGx2bGZ1RVEwMDdIVjhkZ09KWU9CLzhjUkoxc2YxbSt3RFdqZTdFZXVCWlh5aDQvcE1KaVQxVWNQMHQySXBob1dpVjc5SnNCaWFkejNna2ZkVDFLR1BwNktRUTZJU2NzelRMTlJHdk9KWFQ5S1lIOStPNVUyODZSWVF5Y2FhTFZhRXhjbzJEWTRRTkJKbWJDa1c1djk0UFRSc3ZpVW9yd1Y3eTFtQjd3WG5qVGNTSVNSV3VETUQ4WU81dlNzUzJNK1BkRnVOY3FlZ0FpMDg1SkVoazFOSjIyQlRJVG41M3N5bUt6cFE3T2F0bVA4TTNDNDViblFMcVBMb0pvRnprTU8vNjBNRnR4c2t3WlN6dzlMRkFQbHJmT0RPeGJJR2N6aE1CRzVLd2tONTM0dDlranlTa3J6d0FLN2t5Tm16Z2VhMHh4ZlFQenVzNUswVGRoc291cTVCeUxJZHJKK2dnUDRub3Q2dGV3L0tDNmFlRmJuM1JtQ1h1dXpHRlY2QWVuOFBLZkp2Yzd5S2wrVU9UWGVpajZmM0VsMVpGNVd5M2dpSkt2UXhoaGVoUWlUREZNWjNtYnExb1Uzd1EvVUMwV1dzcXMvOTdkZ3VBZ0lDQWdJQ0E0VDc2UGdDbEpONFJBNHBxN1d3Y0pxcTR1OXF1eG9jd1dxazdsSVk4VG10UGM2MlEwZjFIcDE0Uit0QVc4QXdGRjdjZTM5ZWxsaVNSV2wydlVtaEZmRnEzMFZkV3B1czVaTXBUY25wTmNya0pwODNrNEY4alV2akdaZXlRQjJ6Z3pPWDZ0WEtWdEFIKzdqbTB6Ulg0UVN5ZGRLNHFjWUg5M3pyK0hpejgvTHQyVHZDUW55N2VhRlJmUnh1QnYzZVBFaUo3S0cyYnJDaDNiMUdObVFtcXJIdXB6cmh4Kzltdk04dXZQS0JyR2luaVIyQUJXKzU1bVYyQ0xYdkwrZU9uTXJRL2wwN2F5MkVLY3AzSldSbUJJWnZWbGVxWm5yVzZCRUJoazZwbHl4SFUzQ2Y3VXQ0NVREMTl1Sk9NVjc4N0Q1bkV5TjZ5OGNxRGN0dHVObnNGbEFhUitBK2ZSSytoTUpUL1dEclBtTHdzNlpud0JLNmdBenBnME9xMVZJVGNlVkJick45dnRUWDIvWWlmOE9zbSszN1JINjdWZitIcUVkOXYySS83L3R1UCtIYjVmYjBuMzJkZk1mT2c1L2g3c1g4UHRaTiszcksvaDlsamZaOWp4KzMwbzkrMzdNcjluMmhHL1oyNC90NkdmMmRaZjdDdmgvWjY5bjdmclFkK3JxSC9OK3RTL1o5ZzMrcjBVZStyNnVqOW4xM1cvVjEvWDFiMVgwK212OUo4NTFWQ2RXYmVjc1Y2RThyaUE3ZGVBbzZlcXFNTnozVDRIRjJ6SktuRXk5RmxJN1RCTkt1SXZlYVV1T2E5TDVaLzZNVEc5QS9sVlFXeHI2VXZWYkljekhISXNMei9SREZBbnVva3BpUjE0aENDK0t4M2hEWTRRdXM0bVVuNVRzU2xSRVdGNVo5aTFTejcwdThnbC9XYXBaU0gzc3dRajFsS1JUTjRkRCtXUEZWd1I4c0xucGw3bTBQaUgzNUViVTh6cytDVzd6TnI0ZUd3U25mNUtpVTdqUmt4anZkUmFyc3h3bU9pQzc1N01nMzVNTXM5aUhQNmZRUkptNFV3Q01YWEtIUGI2VHJIcUVBM2w3RG1LUHZLUmRROHM1N210VVorZ09YT28vUncvRFNkS0tsdFFJK3BxS0poNC9BdktzWHJveXVuRHAyd0RmRDB0M0tySGVza05wZEg0ak93UnRMYnBTbU1ESTIwZDB2MXRxc3EvbEdNRTRaRE5xcUcxY1pIVTU4dHBNOTZ0bkxOMWtTeFJxQmVJYm85WGlWa1c1N2R0Y2haRHplZzgyYi9XbGZZajI2S1lmdVg0dXFBckVDb1Q4Y1kvZ1kzQzNuT1E2YVUwTVpiZkVhb2V6c2NRWjlSajlVZ0REVHluOEJiOHdOL1hqcG9iaDVoOFBLRmdEQmFSZlJRZXBHMkFsYzJjNTNtaGJHNE9USDV3SkEwVDZZeEl2V3JONXlxaTliZXduTDRWdjRKYmpSRGFNck5FMzZIN3J0N0VUOFkvU1IvdEJRam1Td0lEcHRiaXV5V0I5ZHVTVTFiREVDOHRycUJ1ZWVQTDEzZ29kbEdHdmlYNmZQWlZXRzlaZjhpNVdKTFdBWHIwZHBwNkJMVDBBQ29JdDhPWUVJMGROWTg3YUEveklDaWFTVVlTMmozM3pDRmhtaTh5TkI2eXgrZU5TVHMvMW9HVU1WaHNsRUlCSytQV0U1dmxjd1d4bzJNMERWMDZ0NEdVcEhTaFF6UHhHanVpZGkxYW5nQUpUSVJnVVpsODlacUxzd2JxRjE1SjhtM2dVZW5OR00xNGNxMGd5eFQzV29PU3dYMDFQOVdXZys3cnhwNStCN1dKcG9mdWFKaXpoNUNmUGhzU1I3UTlzRHlJSDliZmxqemp4L3pTa0g5a2YzOGtvcTBsTmNGdkdpZzBFckFNNkY2VzYyZzg0RklScTJhVndtaFFzNlc0cEYyL21DeDBTZ2EzUzVLc2VXa1FTNjNxTFhYWkhyak9CRXBpWVFBeGtuYWV6a2hSeW5FMU0zcEtDUzVDWk5YblQzVnlZMWxZN3Z4aHpEcXRCSTFBVVNhVnNUa25kNU84VndyNmtzMERsdmJwNDE2YXlUVzlzU09TbXBSOE0xREo3QjJuZ2hlZWJWb2RodlN2QVdvM1Ruc1VwejNueEQvUTNwU1BXU0xMd1Z3MUt6czNVM0hJMkhsbENyajUvMWc5R0pJV1lkUWZCaUdlZ1pCVEZFc3FISy9NSjBGbzduOVJna0tXcmZXcW81VXA2UzdCTFVHc0E1WS9SZEdVRGJWT2tZRW5GZGJuL1ZTSnpJa3g1WHpKZkUxdTVyWmFWc3FiZ2FJYzNaVEg2OGVHdnpidmc2ZDdhbGdreWJiQVdzQ0ttTDc1UU4wS3NBK29ZTy9wMEpFbThxVFBVNWdZQ0xSZmhrcGlHaEtUUW1TdGExQm4vS29sNmpYb25wcUsvTmZzcXdlRFJEVmdFM2FlOFA0YkZ1TkJTWU9UUHBOdkxhUnpQMjNob2RPVEowZkhubDV3bVd6RXdzYk53SGc5UGcxZXdXM0FydDJEb3dZKzB2cThjSzlWR0NHcjZ2ajJlTXp1RHNWRTlyTmR1dEMrQUxrSzhLNks4cFN0MXVjazVUc3NjZFRzTW9YMEdtSjZIc2xHUUozV1NLZlJwNVFRV1MzT3BYNXNhSzZaR2pmRVkvczd2bENHSWgxK2Uzd01XRXluNUticGlVYXBOMi9hR1U2WEJOVmVoeFBUcytqRUhaL01QOFZqZTlFdldSNXhPNlBxR2ZmZU0rMVE4cE9KclNBTkNpbWw2VVFacHRRZFQ3ZFN0a1JUY0pZU2FwMWZkNFg5OGdZd0V1ekZ4WUlVcjhoSkJtTjR4d0xkeDJJaFJjbU9uTDg4RDQ3cUFkRzlsSTRIN1J0Skx4eElDSUgrVnk2blRyYTExL1dxSHJMWXVQRVdLZ0JiWjMyZkpzYVhQVDRreTF6d3ordkNCTy8ySUp4SkZ6YTB6ZnRtRzNQcnQ1Vm5IRXNINXVRWjJmWERNV09GdjkvVk5ZR25sYVpDM04wQXEyZi8zNDJFdzhSUEp6UHMzZVRoRGpneUVvMURpd0JXdENBMEFQRDZiRjlhS2xZZkZmcVNvUURQVkNqYjRWeno3ZHdyWVNObjBYbVBvSjZ1em80SHNwY0RFSVlwN245OU45RVpnVmtjR0docXNQOGJsTEdaR25pL1MzSVlUVUNrK1NQZmd4eS9IQ1lPalovR1RJZExLclJUVmNXZUxMc2FEdlB6dDZiU0tzQmZzaEZlSXlKalVVRzRObVAySDNUSFRHejk2aHBxaVlrZDIxdWFLZGZ5SGt3cFRRTGxxYUZFVFhRc1RaYnZYeHZSL1dqelk5b0t1S1NyQUd2YllCNEtPaHhqM1YzSkh0TjRJencxWDFnOEsrbms1bXpiUTRrOG83bDZtbkE1R0pheEFYcnVndTQ1VFF4T2lzRkU0bWFUUloyb09oR3Z3bjg2SGt3NENIditxZCtWc0NnRE43MEJ6d1Q2TXhSazZOaGtoS0xvYzNESVE2QUxURmFVRXNzL3pZamVZL2VnYmhzd01GSFB2V1ZsaFNpZVBtb2kySm8xWXJzL3lsYjNMNEdyVnliTWlMTmptZVZjemFUamVMR2kyNFV6cSs1SFV0SFBZM2RvYmFWbGpxT204elAyaitkQ3h2NFdNanV1TnZzbjNvY0lUV3VKUnNJTXdtYUUvY2dva2cxMTlMS3c5cVpBZDlod29IeUk4N3FhanIxRGI2ZnhFTWYwVWtwK2VDUkllWWswcjBHVTdQcW1rcldNSVk5N1VCRDlBSG0wbWNuZEFJejQvY3V6NFBCK3lmTXlEaWtiaS9mZ3NuYjAzTy9oclorMmRySHkrK2FyV1hUT1dWcDRvanY1ZkFGREh2Q2JaVFVETFZMLzBVZUVPcTZ3UUlhZVdNdnVrVXlXM0YyK3dHd1lPa2Y5NkFjRnNOOUovZG9TMnc1Y1NHODQ4S0JBMDcwbDJMcDJpSVZZeFkzN1ZHcHdhU2x3NnpmUlFKRnpYcGhoWkJ3OE9PZnJXQnRDajQ1VXdSSjNTTUoySWEvTldiQzU5TXFyM0pTam5jdytsUS9sN3g4a1R5Skx4dkQxU1k2RU9HMjFsVXNVUWlraVR4V3AxamRsS0l6SS9ZZElFUlQvcTlJamxuUU1uUXNpZFNtS0QzYWRDaFdUM21UeWFhQ1dyZjJmUmRvSkZuY3JnZHU5UnhMbkphTWVNcDJZVkVzWGZkbTlQQkRzaDdKT1RSOVdsOEFKemNQeSs0RnlZczI2VjdSWnkwRFYzNHFlTUhab1J4dktuT1VlMkNLUEs1enFFd0lzZVltS1FVVjJaRkVrT3dPN1hFT1FyVDZXaU5VMVU5U1JYM3M0a0drUGExaTRVSEpMT3BqYU1xZGVKYnhIZm9aY3gwSzlTL0NMUDZiV1hOYlQ3VEZ5MC96UzV0S0xpRlk0YTFOVHhNQXc0dnFRM0lWWVQzRkJGaU16Qi9UcVVKNElpVWFOQmtCb3JDd1ZQRWt6Zktyd0pvc2lwYnpweXo3RVJ3dXRtYXJWTGpoSkM3Z3AySW9uTGdSdHNqbFFZZUNLV3dqazBhNlBJRGUzVTZxQTZNV1RRZ2kxV3RscEIyaWJ5UmExRlYySE44TkhPTW9LMk5SQ0N4cGdpQncyUk5mNTF6YWhnaFk5UDlQT3d3SksyVGFwSU9FS1gySWVNck1DRFIwZW94M2o1S0thekVyMTFRNFBMMUpMYkNNektMOVIzKzZiMU56L3hqekREdTBTVENiUVpBTDE5NjZvb29Pd2lXeVR3bUtjNmpoRGYzVjJJN3ZVRnFvbTl4ZExQcmpNWGRrVW1zdDY4WDRuNVFIbmxmS1dwRFFlVlF6eFJvVFFxUWpIdTd1WG1xYkNmRXRzc0FvSVBjTXdzMmxMckk4ZUF1dUUyTWh4ZU1mUXlTazQ2dFJPTnUwM2Z1VTJjVTJTbTZ2NDBPUnhtanZGbG5WaDV0blBwV01vcDd4UWNWWGNWZjJ2Ynd4ZWovWTlZbytmbHNtZm5BWm1CTjk4UTQ3cDdpTmJnc3dhQ2FhQzBYYXdRSE5DZVpQUVFjTWZHdlkxRlJVaXh6TmliTExQU2Y1ZmZsWllNaGZrWW53UGIxbTVEenBEeVVtclF3bEpvZzR1aTBjdk45dU1JdzNNQVVSei9DVWUwc3QvMjZ3TlhRaVJaNEloSUVGd3I0ZkZKamFqa0RvQXJLd3c5NG1RN3FnL3lpbHFQQWVTeERnd3hhYnZOK2pqYUU4S0VJSFlTMGQ1dkI3VEg5OFpIK1N1L05mV3BGYjFtTENIZHdPdlhBQ29FV2poK0hodTVPd1E4Vi8zRDF5cnZLc2lqMG5QTnZvSGlRYTFNK1c4NzdBTTRBRnAyL2lMVXpHWjlVMmk2MUJWYXhCK2dhekhIeXpnb0xnall4M0lWTk8rNVhpM2owVGFyS0NvVTVENGE1UDdOWVBKZm9Udm4xQ3ppemZMdGNuOFJneGd6ZHErYS9QWVlQT3lCZjY0RjlNeG9nSFlEdUxJT2xSa2lZTTFSdityN0ZLekxrZGtTeURHbDRRd2ZmMkh3a08zbkh3ejNnOEhVQ3FqcVVqdkg4eTg0MisxNExKZW0xSmhhVVl3M0I1R2Q2d0NnNWZJbTl0VCtzMGZ6WmJYeGM2ajZSUUx6TW13RXJiNUtKb0hWczJodjNMNDREWmxMeVhLQlhXRmZ0M3paZUVKcGdMVmxTMzJ6dnYvcnFJNE1NMEhNMkNFTnV6SmZuSE9nK0xpWFJmQlM3MkYrUVYxREFFTkRaSFpXQmk4RndUY0JXSDN0MkdVaHY1NTVlcHlEZm4rWmxDK2dVbTB1dWQ0dzdmekZ5T3dKOEdKNno0RTdtSGNVNlhYZlJibkJTRjVmSGJUeGxnWnFhQk85Y0ZleDBndmNsNE9lb21ETldGNG5GaWZZbzJJUzBBaHpONmhNWWVmOXRMUzRhRUFNSmFVRFl4ZjRUdlZIc2s4V2ZhRGZwOW81blJ1OTl6WFkyalZ5UytPS1h4cUNEVVVuZDR1cVNCMTZqYXY2elUzTWJ1NUpna1czNFRLMHFhYXk1V1d5QWk1aU83WHVva0F3T1prV3g2WjJqd0xUeXZmVCtibnRiSnVqV3RvZGk4S1VVcTlNdys4MUN6SEIzMldqYks1UG5PK3JOVTNrNWgzSzZEVlJSeDFPWmRNVDhwOWZHSUl1MDU3eHUrT0cvaDY1RlBRa1hSTnBrbGRUaUVXMjhLSEJ6UitEeGlUYjczY0FYcEluQUZwZU1qaVZQam0xRW5yQzlnQm9OdWtzWmlBRWQwdGxTeDZHOHR2ZTNieDFUZFVRQlo5VXlzbVZIak14bkl0UlJkNy84S2hrbnpoWUNpU3pxZ0FtR204MGdUaXl4RVE3OHpmcUdxYTFnWjIrNkF1MFJqM200SWhsVlZ6MlU0TytjaTd4M2Z4NmZ5TjkrK0VtcFdZQTYxOUJ3NitJWC9aaVRYL0xYWDg1NVhwME5lTWVYdGYzdlJYVlMwd0FHUkt2M3pGWnZRa0wrak4rc2IyQ2FiZHlDeGI2TGIzUVZ3ZjZER3UwUkxUNSt4bkhOMzFpVjMyZUFEa1A0V3RtY1dDdWVhWW9Fc3BLS055MkxMN3E1R3ZXcGtFK2JicGxHQUJielp2bVdzNCtqNWxVWFF2SGVTZEFZWHZUeUI3NkhuTnFxZU53cGVGZW04NUxuYUFkalJUK1NINFhiYmRjL0ZnbVpVOTlVQUgrUzJtclREUU42cnI2WEZXN3g4bGdFU1pkWWt3dFd1WUhUQ1JWSGFSNFZpL3dQUUVYbkd5YnVhMng3S3Y5VGs5TG9PZTI3NWlUWHkyT2NpV3dzSXZQTS8zZkpFVVcvT0ZKU2orcG1saUxnQ0FURUJONEtESjVOTjN1UW50YzJuYlRIMXN4RUFkcTh1aW94b01yTDF3ZFdVdWF0L0FwS0JXdmR1dnJ6THV4YzRVZGhXbmhMZGdLSmpnWW5LbWs2T3lKWGVmNGwyaDFyektMSHk2cDJqY1c4dDhWWE8zR2RtU2YwUGdKbWVsa1NDQ1UxbzBtUlpSVm5zWWVZODRCb29wZnhiaEozaTB3Y0pRS0dlTEtVTzVhbjhSVEZRS3dESlVoL1p5aDlCRDQ2Y0M4dnZpQ2FIWmVuelpPTUxDY3pxelhOMW5ITGpUbUtSYzR2aUtYeWp4UGhpWGFyeTNMakk4MWwwUTRSTTQ3TVcrU3pvYVBuZldJKzY1aWsyUUlhNmRLbWFETUlkSVdHaU02TlllbktlYU5NMXNhbzZhYTQyK2JKRmcyeWFEL3owd1puL2JSczVUdWlvUWJBS25LdlVmUXB4cERCRGk5TkhrS3dQQk1WMHVmZkVralhjWXV3KzBFOWJ5dGhGNzFsOURrYnloOW1aOFhLclN3ckRyYlR6Ylltbk1ZeEZrQWxmK2Nva2hGZmhtc3JuSGx5c3VueHJxMlNOU01ad1B1UkVrVjYyWFhvNEF0RnVMVE5BTEphcnJ1SVNDdC9nMEk0ekNvemxtTjBIMEJDMDAySE5WRFh1ZStlMFoyeUJJdTdleUVtc2UyMVZiN3JkODJENkx3WlFGdVBDemE2Z3VSQ0NxRWp1cVVoK09xNjlGUHNmQXRCeDM1S1A4V2FnRzUrd0twbGtQTzB2S0MrdGZuOHlpdVlXVHEycllVUlZOQ1RhbDRtMFJQbkJMUnFncy84Z3kwZXlVUHR0V05NUkQ5Z2lTUmYvUkU5TUthcm14UmREZUdnNWcyTFdBQ29nVnFQZExyV3NUQ3NjVGQ3YnhCU24xeHBPZnVDQnl5QnRjTzhRUWEwTmcwU210QWh1Tk85cHpkRXBKb0pJWmxjWTc3UEtjL203WURONzVrNTl1aXhGbmtDa21wSEpDaUc3NnVwU0ZPaVB6WmpReE9LTWwxTUIxTzN1SEJBb3o1OXFKTkwwSFdNM2U0VWpIalNTVVhIVWZicFdPSTlaVjNBaHNITEk2a3dLRk5aZ2xzSzNnS1VRYWVFcW5XUE5ISUJvK1d6RXdOckZIQ0hHS0lONVBVbm12Y0k3YnFPaExncVlxSjlRUmRwNmlERENmY3QrNmQ2V3I2VVN3Vko0bW5Xb09Kd29rYU9vaHRTN3AzWXJ3YWswM2dDakhOazdPdEJOUTh4amNxYTNkQ2lOc0dhU2dkMlBrSXFrR2cxazd6bHd3czVDU0srVmovbmVCWWIrR2tYN084TkNwWHJ3b0FtRzFQODV5VjRIeHpCS0wyTHFyc3lBRUM1bVA2UTZ2QWh3QXlLQmZxbjhaME9KV2crdUNZMW9WZmV1NlRiSmd0SnBYU1BMRkxrOVhtTEtSL29SQ1YwT0NxZmwwSWtUSlRSS1RrejdVeWNMdndHcVFTcVBPWnM0RlpmV1F0N0Zhbjk3VloxSE9STTIyTGFQbUFoa1hVaUt0QUIzMDlxTk9jTEFUUTZCOTlaS2tlaktWYTd2UXVBTnNPSzZzWGgxTENVbEYwam53NG91NnZiT1NTZ2lrYkk3eGg5TlpFbXNROFROajRoQ255UnpwZnVlT2JVQlVOeHBNamowRVEzd2l5M29DSk1DMzJkdnZwMlpxdklBcklhVUUzRWxhUEtBbDB6U1lIdGdGa3ltQTZPcmJWazRIL21ZeWh1MlcyZldIVWQ4V0Z3SVdHQmdxNGlYaEpHUUJWZ1hFbU9ubkU5cmFDS3gzQkZMdWxtY1k5K0hHQVdISDMrRk9ndzk3VkFGMXZSTUZYZGpMTWl0d1NacnNHdlZvZVhkYS93dFFpNUgzQU1YYm9US2l6ZzNGd25UZ3FOYXBqZC9KRTZ1NFJYZHV6OTk5SFhraG50VUF5VHlXZURyMzBjV1NXSkMranN5Y2ZaSThHblE0aGI1M2w0TTZSMyt3VTcvWXpYaHlLU3lXaGFCOWwzUmJnMXozaXFqamhWRHBDaEg3cFIrMTFlV1k4QzhhZkJhOG9Sd1dubnk5SFFVVlZFalY5VC9ENDFLL1kyS1ZNZmZGWEdhNVdmRnJpTUtUTHduaVAzUlI0a1pKOVN1SVVFZFdIOUdxUnhLTXN6OFFXNkpiWFRTSU5KcVRVN1M2VnFyMUpORlFwSHdLVGZ5eFFEanM2RWVQSExrM29hUWpFZk5iMVFPN05uK3lyS1U2aEpOb0Z0QTgzd2hOaXJicXBWbm9WUjFkY1hETFNxTEVoSEFYVXRXRkNjYUFMRk44UlpLVlozOEpmbmJOOGttODZIYlo5R1AzdWVzNlpNZGhSOTRzZldjcGFFRU41a2VianB0SGZXdVB5dk9meVFXMmFqaG1MOEl6WXoyWEVsYUtlWHBoMEM5SW1kRTdiMUNRNjlmQ3RTZk1jb1RCdElwNFlxWmJEUk9OK05rVnZxWCtxbzFEQ1hhbkt0dm83YmVsWDhSMWpjdzlvcVBSdCtqWmorQVlwUnRGSmRGVm96V3ptZzJkaDJnN2lNYVF4blJKUGROQW1sN0hSWG5yTkZ0UHlGRGNQY0dZOEVzcnFVdVh5MUZxM2pVZWk4MmZBdTMvMEZUeHJEMGlnVk5CcTlYR2kzcC9BeVplUjZUT2ZOTzQrenJGUVROVThuTFlyYjFhcEZvcmk3WUNMcUhSNUpoNCtQVE1aYUl6bHJkczZKK3phSGxwdHhmOXN0dm1TSVVjWEs3VlAzTzhZT3ZrMXl2R2s5ZStjN1NGNURZR2F2Y1VMdmpwVjdCTlFyVmU0WFNUK0ljUzVyalBCSEZSK29MYWpjN2ZaYkoxS3NlazFLQUpRbzJLc1VjaWY5TkVRcEQ1YUtsdUZ0dmg2NW5MQTI4S1pzeWZXZFZjVjZ1dFFCS2luYS83aHFOdWg3L1ppbUN0YzFSYm1CYXk0Y0o2V3lLWE9ycUU2bEpnY3QvOUVCaVhXWStNblMzeWE4cVpmajlxSERXS3dJbmZNbWlDU2lMcFFWSG1sTHNPbGtuMGtuK2MyUitxdDFnVktENWhXZjdlejNHbGlYZ2NZM1lCS1ZyekVBNEFpUTdhbEtaZ3RCOXdFam9vaHJhTW9UYU8xWVhwck5RZTA1THZIZGNUY1pOekk5bG9sZWdKbFNGSzlLSmF1azBVd1JyWW5zUnJmNUVJZ0U1bC9WazcxV0p1UVNMTVF4RWRBckVhMVpQajVCS21IMkRpT2hoZVczTUpGSkFWQkloNjMrRlQ2SjFydkRPcGU2Rzl6M1c5NEt0d3p3OGIwZUcwVm1Hc3hDdEp4aVpZeGZxcStTd000YVQ0OHNrcUloQjhLWHFTWFJJV2N3SnozYVJRMEJZVHIxanBPTm9DWEJEYjF1YmJocFl6WDJYQzYxUUhRa0M1K3pKMUhmSzkvTEo2TlE0Y1pwVUJNWjhkVm52cGNnc0hrOFJGcnF0ODB5dERJblVsWm9odXpPUG5lTklybEx5L0QvTUV1NGxGRFBLWmJkdG5oZWdxRUJveFhOMU5pTjQyaHU5WHJ1OUNpQTVwQ0VGTFAxL3RHbzU2cGY5Sll3OGEwbEVQNDF4KzErc2JSV25IZy9tT2lrVkJDdEYwTktWL3VnMkFvTHZrQ0M5eVdqOTN6bXgybHNiMU9MbzhjSmlYOEFFb0V3NTVlK1ovaXhNY1FhdGg2cW9hY2xGT01BRDNrbFR0cG00R0tCQ2ltTnUxd0RaTHBBdFVCclUvRlh1emI5a3dHNXF2SWswV09NSi9CSWwwc0pNaWw5TzByb1J5cXBFRWl0eU9CcFpmOXk0UTg3MEZzZEgwVnlqQXZrZG45MkZ1TUVuZGhNVlRUeXBWTC8wbHV4S0d0eGxMUTQ4U3lGRXRsaXh5T3AyNUxqU2NYMTlHN3Q3bDI2SkxrMGFsUXN2ZHAzcmVGbnphaHZSaFJFbjlaNDVTQ0drVllMZzR6cVd5cDZjVjAxc2pSRUx6Q3JTeG5OSFh4aGxpL3c5enBReEc5WnVPMW04OTM3ZkZvUHBQcXNraXdCZUZ6ZTNVSUJBNjEzT1dKS0RYWDNIYWVZcDNEbURuazBKSlllVXlPb0NmM2NSZDR5RW5BY0NBeWYxNVNlUTc2dWRHOWdNSFA0WFdQR01NVnZBNjdaM1NTUEE3V1VhVzRoSlI2QmlPbnMwU0hEWTFnVzZqMytBQUc0YTNESEJSZXU2d2o5U0VYWDE1N1J4RVcxUEQ4OHFrUGsya2xmcmRWaHZ4Q2VWU1NjVVlnWEhSMEl3WTY3WjhOaTFxRDRTQXR3d094L0dTSlIvQTY1S3ZTZ0Q3RHR5cnVpenBDcGpYcmE4c2hMa2JXVGo3NjZtU3JZQkVCd3hndG54SHF1VmVNcWVBNmsxcCtrVnBZMUJWNTBXQ3NwaEs1eXM2enVLZzMya2YxK0MrWVNOVXFjZWZ5QTVuZUNTYlVRVDNtYnFHMTVNVkVPbDQ1a2l3UWtuRVU1YVh1aVY1alBrb3c3YkhBdkdKdDhiNDg3QVJ3QU9VRC9GV2NSQnQ1VlhLODRpby9aUEc1S2IvT21DdVZsODVpNU1lOWJ3RnQ5WmxsdHpRZHVhU0NmODhVcXFIUlp3SjIrL0YzcnZzOUVuQ2kweERPMkNUTUVBSXVzWEZscllBN1hhZzBEUUpybU1sUVg2aG5ibXZUVmZNNDZud3VIUHpYZEJPZmFzUVdseDJRcnduSkdoOVp0cWJyaDJTdFl3cHR2dHdLcjk5elVlVkd4SzZUd2phZWZ5Umg0ZjhCbUtVbHVVZ0gyQXJDc2FKazZWVlFJL1pjMEpUWThDLzNpNDNIYlVHaHhiMCtkWCtyN0JNVnZvRHJVbXZ4ZDBTemVhejQ0WWsyNHc0L3pSWnRSYUxUVVBpWkFOc0JHZTNCL2hIY1NHeUNsZ1pXZ0RyMEMvcEJDaGppOXhoTnRCTDJiQUFaWUY2WVQ0Z1NhVHZIcVJQeThXdmhzWXJVNUZ0cGRTWVZwemVMOEdkSGpqL0tKRlR2UlZkKzUwUjNVZmg3VFFBYTBaY2RucjR4ellPSUwxQkdheTE2MnQ0U3pUWVlxcTRTemxGVXk2RzhxQXpVWlozUTJUYlE2L0xvTVY5cGJnUXVqeHp2RmVGYTFYbVI0VWFpTUs1Vm55cDNYNTEzcmJmcHNPUkhaSGJzVkNsZUo2b3dVWXNaMVErdysxd0JVRzRSTGhQZXV4Q0lhL2lxMEZtZXdDek5zREdxM2s3d2UxVWlyb0syb2VrY0lESFpBTDB5Z3kweDlhYjBNVnJ2SkpCYjBWZVpmblh3eVNGTmFUbERaQkY0ZmFhbUEvODZVcktmeTdGMklub0ZpWGE1VXdKNURUSEFGUU1CZkU5YlZMVjd0Rm9YOExOWHVhdW92QTZHVTBveG1VdDkrbGtObTk5NGpJSjZBNXBBN3hWQzl6M0hDN1dKbmtxZHdVQ3VaVXVCNWpScTN6dndiVEliNHIya2t0TXVjTndIb3hGeGZKOWtyZWo1N05icFMvUkdENlpKTEJuWms1cmdOTUdnV0ZnSU9EZ014aWM2WTkvcFNYejVrTHFzZEhBZEpHYVRpQWVGNXg1dDNqeHZyRVZ5YjZQNEh5cGFqaEtsTGtBdCtlOXJ5OUZELzh3RFZ5Q2tIdHcwbklMY004UkFDOUJjT3hHV29sR1Yvczk3SDE3b0xuUjJJY2VpK256UnVLTE9iU2ExM0NlL2oyak0xS1BJVG5Dc2ZqRDN3MTlqekV6WFk2c0tTVjhlKzV3MzdGaFR4L3VUZmVnODhJeVYxbEpScDVCeWJLVnE5TWFhVjg5VGQzMi9IN1Z0dDdKRFd3VDNPZCtGTitneGFLN2hqMmhzWlhwa0tWWmtTbjlIb2lTNnZDV0VOSklrNHN0ZjBreTBURkc3RDBJbDNibGVYZGNMVGxuLzZjSHhkazU4eEpPYUtuZHlTbklXWGsxU3krOENlUFQ2SUN0eEVjZXZ4d2NMMXFsbjVDQWVzdzllOWk0dTZKVk5YdTdTR1gvZW5LN3o1REFiYS9ZTjJ6a1ViTXM0ZldsK0p6VVhXS0dTOGk4QzFDYk45V1BmZW5LUGMxUDQ4WmxWMjRnN1NoWWJHUU9oWWRmZzcvQ1laVklVVVFCK0g3OG92Vll5VkMxQkFYWllWQ1R5Z290NUREUXZxZ21SdkliV2UzcWZrdnRPaU5JSEpRU0t1SSs0TFpmU1lYQ0lzR3dFb1VKWGl5NXF5U3Bua2NTaE5QeUhqZ0IvYmZDQzdaQWI0VmI5ZTdMVEtYd3M5b1F0alFoRGsxNDJtdnNITVFhN1c4M25MdWhUanhBLzAyZ2VzMWZkOGFIV1AyQ2tTeE5rQnA4amJ6Q3ZDMnZFNXNGYUhvZFRZSE1tN2c5UXcrU0hzVVgyWWsyRDFCUnNpK1NHcmQyRzE1SjFPMzc2ZFZvZWdYSEhZUjdZNnlkZHpwVklkSVVBcmlTL3ZHMmJlMzhxUXlNbWdWRDNlTlRPQUJiZ1A3d0VPZFpaVUpieXZ2dXZYU0ZmYm40SThwQXF1MVFIeFhKZUtIUmYxTFJiNTJXa2RYV0M0STk4NEZrK0JzbnY5TnF6amg0S05CS3UvcjBCMFY2SnUvVnFISWdWSzcxZVkvYmxsR2JVMVh3K3NYTE1VTWFlZUJRN205NkRsV2JIY3RjZ3RGZ2ZPV2dCb3M4N0RZUytFV25hNnh3NUFUMHlnUVh5d3lSK3FqTFFZelFIczZtdlRINnpFR0s4OVF5aEVsMFNxU3J0V2hOYlJpTmNxcytEY2x4UFFsd3M1cHpjVjRVM1ZHV042eUhHMnd6bFpJTmR6NG1IR3ArQm9sUUdSemV6NE0rUnhHUysvS2FkSUxUN0syMmR4OUxhTFdmRFdBUjZGbjFiT3BEcm9rZUU2N1htVHRTdnh6VTZRSXdVZXlsMUoyUjVYSk9WNkZDQ3B1cXdTcG4wYnRDNmNrMjYyVHR0WFRxNVh1MC9xaEZNdmh3eU81N0c4ejJGS2dPekhCQmZ6Y2FNR3J6R0FnbDAzMWxLU0xiWjFkQ0xMNzdhVlBFbm1aWi9MNGJCZVZWRFg2djlpVUl0RTkzT1JtbUN3WnB2NDdzR0lmMlI1QjFmbWVQdjB0R1p6RTRuQWUrazJmWFh2elpLdVBZWGZjNXdnbkpySFlLdDFaL2l6U1JKZldtWDhhMVRkMDlDMW55MGh5QWgrWk5NTllVeGIwNFp0UWhYQjI1cnRXTFlVYThwelREcFhSNGFFZWFYZE44RzJHYllndmJUTThuWGNQU1pON3FFdlFGdlc3TlRHb0hnK3BPcTRPRXQ2MWNzOUlvam1rdXIwNTRQZ2lGRElMZktMRDczQjVaOUdWQ1FuTjlOVUpsSnY1cU9iMStiVXkxNGVBekViUmJrR3lLRmNFRDB1Y2RhaEcrck5RWWc2N05rMEEvM0pMbFJoUFByaDdaSnZ3NHE5YXdiRVhHK0t3T0QwWExuQlc3M0dwNFdSYUp6enkvMS9QQVhqdmZ1NmNOT3piUDRNQ2lZaTZ0djZKWkdWalUvM3FnQWJOWFkyUHBTRm9PR0ZQMjZZK0VhRTdiamR3L3U1M29LM1BKTDlKbGx3QnFFR2QxZ3dVWlhCN00zZkpYSTlibDFxdVVZQU9mM1JtWEh4c2doQVNMZGRhQncvckNhaUMxNXV5UFBFRlZEZVNuWVdOK1lkbzkvYkFuYitZeUcweDVqd2RXWHFJbkNrSldsZFBBZld3bS9zQzRRaytSY2tLUDc4RVRmTlgybEZpaGxta1ZsMzlKWmM5YUpkSGNvT2FhY2VDci91TGJNU2NYdjl4czJRek5YS2lzcEs2ZGpIVDVVakhGWjZqQW1QVXdWNWRncXZLSjZmTVpUNmhQT3dBa1NleVZvSUI0SVBLWlphc2hocFk0VXJBamY5U1p6ZWgwcEFXc1JPcXcxNmtLRWJpWVQ5bzV3ek9HNnpwTmI5dGoxUzJ2R2FNNTBoMC94TEM5TUlOb0xIczZFbWF5aDk3bmRrc1dTdkVaWTJReXUwRnorZW9nY0Fpbmpaa3NqbCs1elVCSHBQRFdVSmJhSnY0dzl4R3ROT3U1bWdRZUExcG9Ha2xYTWNpVkFaL1Uyd1dEd09taWRjUkV0dVU1SkJzVUFOMTBQaER1Y0VlcHl1Yjc5aTY3VllXU1ZKUTMrTTNGbi9DN3dScTIyZzFYRFlXR0grdW5zT29zVjV4N05xSnkyeEZLRWtRSStNQUMwRzlZRmN1N2JZellIRjc2NHV2WUt6VUl3T3Y5alI4K1A2ZWx6TE5OUlFQWkZ6SWlxRm5JNnRibFY2VDZJdHNEak9OSWd5VkNqNXFkZlh1Z2s4UzhVeDBKTDZjc2x5TzdTL1pvVnhYZXFDRko4eGJpS3h6dE4wNnBjSEpBNEFWN01mcVdJcmc4dlRuT3V0Y1NwMWJqYUYxakcrNUNRMW1YMVJWWTBsZERubkh4RlhjczNBRnlESE81SS9raEhFS0ZrQ0R1c3JLS3hXSzdiYm4xb21zY2ZuTjBMUjhnVmpOTnVEMW5MbUoyM3Z3aUd1QU94Y1UrTCtVN1dKU0d3NE16UDhUdWh1eDhhamFVaGxyZHl6RWplQlNZMFZUbXNXNHhNNWc1R0V6M2E0elg2R1pwUDl0aGthUndFbEZsdHBRdjNZR3BvYnF0Q3Nxem1VM0dqNXpDcDc2c0xRNm1oTVpXQ0l5SlI0TTY5b0RlczlzcHZKZXZTdktJTS9BL1NETExTU09MVjhKSytLOFp5bW05cHlvZDhCQm50SkxaVmUwMHNQay9EQjdBNDFJSk9oT0NDcEgrZXp2dmErWmFVb3VaSkhxTS9IZE83VXlybGZLaVJpUG5Hc2IxZVhjQVZkRGI0WWVYNDlMRTNLZDZRZGtwNVRMdnBZQVFHT25rTnFIOUxUSTdiMXNmZTZCbit6VC9KdDdjSC9lTlJSTjJxZzA5TklmSTZwZW1wTE16V0RhTUtEaEdGbUh6LzRxbEl3VU5VUy9xSFNhREErNzNwVUNCMUhsM01STm04TkNOOFN0Q0RYR2tsZTBZdUJrdDVjYlljd0krcXd5TUlkajBGUVIvdDFTa2N4U2ZqMHlsWjZzZjFkWTBsRTZXS20rRWF5UHdqY09QUDZsakNNbUlnNWlZZFo2eGVTcHhzelhNWUF4cTZtbTlNcm9Nb21HbzVSZTZJVmIrZHdPVjhkUHo2UktESFhRS3B6NmVMaGpSTEdUai9LTy9DZllHTUU3LzJOLzZpejJmQW5Yb3kxaHlCMmhjYmsvRFdraHVMaDIwN1dmQ051TWtwcXB5TFI5c0hMQ0hWcWwxRGxYcEVQSTNLS0UyWmlTc3Y4Zk9IbjA3a0pKWjVyRzV0VTVEd3lLWTVZU3VaM1NST2psanBxclg3NnltcGp1eDdScmhYT0hoNk91U3Z4VjZ1aERoSERGM21OSlVKbG1JaGZqTlZ5NE1zM1hRbzlqbVdNcXJzNWtmNXZBR2s2MWFoa21FNCt0SnZRbE5obUFVcTluSTlLa3lNdklWZ2d3RXJGZ0Fqd0J5VGh5N2QyUzJ3RFBLYnNqR29nZnQwMTdhV1dLU3N5eTUxbDhRUWloZ3Vtb0FHdlFhb1FraWtjQnkzUWw1alFrVDJwd1ZnUndManJQZDlSOUNJY1BTUDVwZ3BVNmpzSVlRM25NYzExMjc2K2xhOGpHd3ZVb1BWMDA3OThjQ29MdDFxSWhUcURGTGFNZEY0WmpSczhpamFpdEpNZGNjMWZGREdtanJzbVNFUDlVWEtJQUlFTXlKVHhVSm9nNUhIZThadmI2WXdJWGR3aHNIbnMrMkdNK3FqVFBGU3c1NEtaY3l6NTdQdFlSZWphRVRtUmU3alRBWTJ4Z1dDeUpJZy9mMnNicEQzSkNRYVlZbTVsZW11b1QyVkNnclpTY1pLclBrTVZlUlFQejYzVWxPbCt5eGsyY1BKT1ZKL05VTnRYWU5XVVNmaC9xVktXRmxIWWtTY2ptNXQrbndPKytlcjJxNUZtM1g0enBRcmsySTBOZmh0c2VMa29PNnBPSHVhYm5iRlE1UTlxQWZ0cXNPLzdOYnhRMVVzdWJIVEZjblh4aE44UERXSTdyRzFpSlhpa3dBeUkrWjNoY1g0Q0RqdlQ3a0FYTytZVEIxdU55U09lY3Z3MUVvZjJxSkFWQXV5OHhEc1RWSkxMaVdvcUdkVm9GcDRHR3JWTFhGd0tHYk9EY29ZaHkvYlVPcGNsZ2ZCUXRKZnVxd241TDJ4NENDQkRwdUt5alhSVGNmc1QwTGlySUVhTmMvMGxITlllN0I3SFlQUlVpaXl5R1QzMTMyZ0R2dDRTRmEyVkEvd044blN1UUNDNjRZVjkybDMyS0ZkMjRZRWxDTk1CamR6SmN6M3FSR2lqSlV2WXZxTm93UkJQYXdidHJxUlY2S0dRSHM3VjQ2aHByQ2lSTGFYY2VLb0Uwci9qYnJVMy9VbEpmWlRuQSsydmpZQjkrZHJsVy9tRWoycVora0lwQmNwSXRvRis1SGhTOGoweGVHa3hUTllqU3B6U1EvU3FkSENoblVRa2NWMWRGTnpmNHNNWW9Pa1RZN1I1MnpYZ2ZWQ2NUYk04K3hBU2U4VVlFcTJyRGtiNjg0QlJ4OHlTY1RBbFBYdTU4NnRhOUtjanRmczFNR3JtcW92Rm1wRjdQV2lnditTcXZqQ29IbkVtWGhEa2lHVTFpb3NiOXd4WFhPMVpxendWUjVBWmFVU2F3dG52bVozMWJLOVBlN1RzUm1RUmtwSC80cHRlemlxT0NQeTdWcmRFWUtkVHdTTEZnT0h2RExqZ2x3SkhXcUxpV3J4ZmxFRW9Ccm5QQzhFKzhQZ2k0Ri9TQlBaek1wMm04ZnRiaVJkb3AyMjlMNnVlTDNiZDUyUFV6N1Yrc05lU045NmtnMWw5U3k5Mnd5LzhmWTNPdGxsU3k1T1Z5ZFhJdGUyNHBnUldabVA4U0RCekFUM205WjVCZzRQV01CUFNKSkF4UE9JR0UyQ2c4ZGE3UUtjdXpVNEZnd2ppdi9nWXVML1BpQzZVT2NDMUt2TTVUYW9tb0RyYU1Dd3dGWGlPalZlTGtHdlIzNm9Id2FmUDdDKzRJSmxnU1plMmlyTmU4VVROeTU4ZHRqS3lMQnNabjNzc1NySVJqbVIzbm52NmQ1MVViL3FuUzYzQnJsYm9vV2JXOWVhTG85d25Wa1dXcklPREtRdEJMaDJmTmFqWENEYktRR05YYmpNcVJadHRiQ3pTaWxzTzFPdElsdGFlWitMZmZla2RTMUhZL1p2ZE42Z245REF4djQzM3piNTVDUVFEZkluQU1rRVZwazRMR3V2Q0NuNVpVREpZUThySEhEZjNIV3hKUGdOTmUxN2QwelJTR3VOME9ENURMSTYrQlFzVkN2WGZjMWVEZ0ZDTG5oVWltWDdLeHAvOENncTZMRzNBNTc1ekd6ZFFSU29GVHljb2hlaHhEU09NVWVPWUt0SWlIRVJOaVJuNkVDMnR5NldIWFRBTXN6cE5LdWx2TGRwaDZrVXJsRzFtWHI1YUNSQlZXNnZQaElOdTJialFuTjBnZzZhME1xTEh1UW5YbEV5eE9PWHpzdWEzZ2I2V2s5VXc4VThGQjN2OVFNeHpOdkRUMGpPY2lncHZPS0d4aG1XcXpZdWQ0TDdYd2xDVVFTYlhMY3BZbGNRQ2d0TWEyanVreVhaWlJnTHQ1NnRnK0pTSmNFcldqN1hCaGtIRENyalB2TUhmK3Ivcjh5TXpzWXMvam5kTnMrR1lIUnJPV1NkOVF0bzdBK0VpZFc1eDF4d1VQYWZudzd4ZnNuY3RydkF6UFptNWdHUmxRMTJBOWpuemFPaVNPU09ISElZTVBWYjloTnppaUo4ZmFtWXJ5cnB3TkFHcElZM2RmUTdMWHA5bTRqdllCMjZFbXo2aEZzQWdtMWp3R05xbk1ySUZlcm5hNUh6eE9EN0hYVE9uWW5mMUs0NzFDUTJWUU82N2FFN29vMlk5blFITmhSMUVMRTd2UloxTStiTnNCd0JoL2JyMTZPc3plVFJOVVNpVjFOUHgxbU1vSnFVMFJhR0NNTEE5NkhVVXFoQ3ViaUdOd3NvOWUvZFN6YWI3VjNHY0htQUpIMXFxd0Fmd3dNRE5ScVRZOWJ1cTU2RU5rdHNWODM1c1M3aTNaeU1OaGtWSlV5ZC8zMitPZG1SNy9MQmNsZTN2VkkxS2w3OEtIa2xOem5Cbk10VmZUUXdYT2FWTFBVQVdJakZ0STBHd2xtb003Q0RDWFVHNkU0Um5UTG5tRkF3N0pobnZwb24vTXYzTXJldW10UWIvdmlJVjF1Q3IzNldQR1ZydGVRa2p4SGRBeUJ1NkZpSnZxK0lheWlRcUdBQlZwVHJobk1vYUFmWjVoMUVFSnE0akNINkJHMldrU05LdTFiZXR1cC9KM3dqVlN6R0J1aEk4NTg2dE5OMGtzd2hRSkxmTjRuZU9saSsvRnNrbjF2Z1ZkOTg1WlpiRmQ2a1BiWFc3TWFSRU5pNnJiVSt4aVpkZXFPMlBBeGQ0eHNoSUJmak9IYnI5L2g1RVFtcm16ekFzQWhHa3A5S21WTkQ5dklJRlNjY2J5UXBxbnpwWnlvT1VOckpiQ2NqZUJ2enM1eHlySXZwUHF4dFlKcFpCQXlqWVU4UHRTUlB0QkUwT0lhT3lSbjJ0czFRdmJFd3lzNmw5aCtQQ010czZBd3ZJMmwyeG5EQ1lLZkpIaXFLUzRXTzVFTzk3QWtlRVVvNWxVRUZjV2pJU0YrNS9xRGNFUXVPdkt5T0ljdVJaNUF5V1ZYRjRBYSs1NXRoT0RoaGF5Q0dDdnlSV25PSm5OYVNGeGdsR2p5MlZFZXgyeW5TcXh4eDRDc2xtazFFNk1QVFdlcUpZWEc1QnlmVklFWkxLMjdXQzU5b2I1Unl1cS9mand2UHlFdk1WTlp5QVNFNDhjUWs3Yzl6dXdsNlFXcWVYMEx1c2VDMThiOXo1UXdSQlpDcWJMMFdoTE5JOGVGdDg4K1R3a1pvcS94bnRla091V3N5TzY5V21uNjRVQkVadGJZTXJwVHI5cmN6QVVXbm5TOHZvRm9GWkdMbDJnOSt6L2hmc1kyVVQzQUlUaWtxRTE1NjlkUjM0VzNmNTNXRTB3VWdJUnVaVVpVVTFGMzZ4aWlURThzdzhNOXZVMEdhcDZMK0VnY3drbjZsRTlXMUg2K1BySzBTNTlPc3lUN05KWG43cFVoRjRtQnNIMmlicExLVXRFWkQwbERJU2s1ZWwxV2F4QXlScEhaUml0elpzcjR1VE5WUWZXNVBQazFkd0RjcnRmZW14ZFllazdaKzBYakVZbldzajRRZ21lNy9ybmlvT1NNRHVUVmRrMTRCVy9MTStIQ1dOaTA5YzlJNEJ0bmRvMldqa2NWY3krclA3aWhYME5sd1Y1UHBLNTNBMlZGRTE1OWtLWkh0ZUhjOGpYYVoxVFhqWHd2VitEeHp6YzA4cWhqQkt3RW5rcVZ4U1JoOCtYeUw0S3pWNCtnUHc3RmdaMEs5ckRsYndGSi8yeXBwUVVkUkhGRGp1RnJ2clRrTUN4ME10MFhob1oweHFWdDY1bzhOYUhsdHgyQTVIRjZKNWxKdHR3QWVEZ2llemxySXJnSERVTjNoSkYyMFRrSzlJSU9xMTd3eVFNZC9VZFF5QnBsSVNrU0R0ZlVZQk55cU9IMFVXZjJ6anphOFI4aG5hN3lzSWdQZXNGdlRrOFFEVW16V1BSckl4YktwVGw0Y2RudWlOb3Nla2VnZGNYbEFOakh5RHo0MmJYa1N0V2dkSjJMSzU1eXArYVlabnN1bDJGd3UrbEhFOUVxNUxCNEJJNzhqYU1nR2x3SDZFR1NWZzBKOXIyb1RxLy9PNWtwRzdtTHVpVUFENEYxUFljVFpWTHI3VjJVRFo4ZGZVS1B2TUlNamRBeUdaRkhWbllJWVlEY2d1ZnU1dmdFbURySHBISEZ1ankrWTFWamZrWUVSRmZiaSt1RWdjVkUra2ZESEZGZjRqekJPc1pTdmh6RGFONks1N0l3SWZORlZZRGxyTE9wSEhGek5HVnRsL1dUU2JYZW5ic2o3MG9YdTVtYS9sMlc5WU9wRHpOSERnYStqbi9YMXAyNU5Iem5iQ3pVWUdBTTE5ZzJ0T1hWMWlpanhPaHcvWWQ0emhRZ2QydDdLUVBNNTBSbVE0bGNTSDFHbFNIanRrVnBLdm84V2lFM0RPYUYzcHl0N0EwK1A1Nkk1UmhaZXVROEtaWHNUaTlJeWRhUXZsZXN2WTcrT0o1Q1RXcXpIdEFNME5DSUl4WGxxREhpQlZzbHRZWG5mUm9ybHdQRm5ZbjhpZlllOVNYRmRlUGc2bU9NRlBVdUxsaVFmTnFkeU1FUGp0bGNPMndOYkhzTWF1L094UDN2WEMvQ2tudFZoc0FzaUd2NUhnR0p1bitON1V5ZktvUUZkelFKa1g0cHNweWthQ0FWM2RtME9CWG9WQXNHOG9xUlBKMFVmUzhjMTBUOFB6a3VoQ2JWbCtuSnZ3eGFMMGUycXdVR1ZFM0xGaElvRnBCcXQ0dkx3ZmNSMjRDczhuV1oybDRiNndjK09UUDVIWmp4c3diMW9ReHJMd1FpNmRpUkJhQ2ZXMVBZWVZ2QkVJQUVYV20rczRMTmRpaHRFWnRlZWVsVEZFN0xvWXllVEVza1dvT1ViOHVnZkx1VklrRVFnWms0QVZJTThQKytSaUZyUklEM3JXRm56S1lUVXgwZWR6bFVaSjI3cEtmbEliNmxjd0hSOWRSK1ZHL3gxS1ErZk13b2x1cnk1dTA1MmoyV1h6V04xWmQ0ZGRtSzNvQ1I5MzNTY0V5clJKZnNteHBDdjY4cndrSFJEdHprZ1NYbDc1YVU0ZXAza0wxMzBFSjlLVnVWZXg4djFiUUtINFZ6Vnl0eFpvWnFmR3B4eWk1Qmp6RFZIQUFWNUVUdjNSMnRGSmk1VmQwV1NXSnZQWGtBQmYrTXB6MjBGVDhwa29UbytQZkN3dlhTWVU4b1NweDgrUFVBVHNITWVqbDdETlEwVThCME16KzVxV0RrdmNwM0ZrWElWSXRySEJBcHRRcnFuWHR4RWhtL1BDd2ZDUjlrNEx1NlZ0ekxaTmU1UnA2MlF3WUNGc29HcGxNQUpoajJwd0JzMXh0cTZmUG4yU2UvQ3RDRU00MW9xOU5Qd2Yzc3dLK1ZxTmQybWtLekNQZWhrQTliVE1hOFJCK0VmaDhaMWR6QXU1cnVDOHJpZDZ0T09XTjJqSTlNV0E4RHIxckJ1Y0FkY0l6ekdsV08vbGxPRmdEWXFxMEg0KzJ2dk03bmZ5ZHhObkhLazMwU3hxQkNzemxYUmtIYnhyQS9zcS92SkU1VisxUHZNeExMT3BYZmV6L1hXekhIVHluWi9aMjJJN0d2ckhQcmhBWTJweDhzN3RkOUI3SHJmS0pCQ09YQk9FU05Ec1hXc04zOGJtcmlzNWhpL05ZcWg5bUdiTytzSmIrYzhFZnh6RjI2YmxrS2F6ZDJHOFFjL3dSQ3dhbnFJQnJRYnJvd0liWjBwWTZWQlVERmJ4cW4rS3lKWlRKYnRaNXhUajhvK0RmYnBKY1VBMjZIeFFCcTV6anVtUXFhK0Q1d2NLVlJrcC9zNXF6R011TVIrUDJqUTFQNGg4REJSaTJ0S3RNc2dsL2RHVXBjdytDcHJuS2R3cWRxcFMvWXdLeU5XSTVtVGZxQTd4d3R6Z1hpYmxKRVI0b09ZTHBpSi9mTzYzUjFzMzZEcHZMRmcwbmNpSUd5MjU5STV1dzM0b2FNbzlQcG1RdkRvY2Q0STVkNzB5OHdJVFJxT0FHTWdoTkZWWUJwdUlUWXg4ODRWMGdUTGxJbVFqK1JnWkdhNm42Q1JURnEzZS8rOVhFakJXTmFZVUExVnZwNzdGeXdYVHZBTkRteXpYNHBPcHAyU21CMUhXbFU1V0R4THNlRUlJdFNKTmNiNDNNUjVENytoby94aHNaalU5K0hDYm9oVE9MWS9abEV2TFFjM2s4R0JMRFY1M2Vtb25sZXNNNGxwZU5OQ1VranBrTjdFY3JTejBXcDMxY1ZreE5CQU1aUm9aMzcvOVcwaEJRRnhxemtIKzgwcnIrdzRyM0tKdEdQQzlkS0lMMk1tblZPVUk1V2Jac2VRdlA0RVR6OVcwSmtSaU5qSDRvSEdVek9lQjc1ZVo1UjQ0SFlCRFVDalZMenpiaEw1clV1Mk1MS09iM0hPcUFtcUtXbS9udmtweWphNUFVOGFIQWJGMjgyWnJVN1hHN3F3RDE5bWg0S2RlMlRRY1F6NWk4VCs3Y2dEQ0t5dVN2NzZ5NncyMTAybkRSTyt3UWVDUk1CR1EzUkNqWUE3b2VlT3FwUUdDMlBUYmxjSndyVU9tVmxBb3psSEdrSDNwUFhQZ1lKajhUSUxRSUtYUEdOVFdkQXMzbWh1aEw5S2dDcUhhOWhuTlFmejFGQnZzMCtia1ZZSCszZVNkMThRY0lEQlVyN3hmTXdEejlCOUxDbVBReEpSRVl2UFVlQ3MvUk9LSDQ2OFJRdEpxSFR6NlVUR2lXNXdnekxkT2VwVzJTMkVCd1h3ekVxRGpIUzE4Q2ZtS3M1cjU1R21lMkVRN1R4eVJLOXdyRFdSdUNwVUhaZmxyVDJLdFRzWWh1ejB0OHM5dEFHclhxZjQvOW45a2xqMzlHUUhDUEkzOTRHelY3WnZSeXNhVW0zbTlMR3BiNHVDZGM0NndCdmpVUW5wZnE5eDEyZEFHUmJYOVBGSkgyUGo2L2FFdmU0eVVaVmcrSHA4UXR0eVBnOVRPdFY5TlBiUjRFdzc5angzNlduTUJWalFjRG40SW9CRmJINHRNN3RNZHAzTlROWmtscUt5ZVFxc2FGZGU4RzgxWEZNRWNwT3lRczFYQWJ2Ny9wcktQdWFyUi8rSEtnREtteWxiZ3Y5NTNZUWh2Z2pXQTBsWW9BcHFLZTkvTWxKbGY2S1RxeWROSWRCSkhOVzl5dzk0WWs5MUZLWHIyRlZ2eWNHam9QS3hiNzlKM0ZMMVVycnkrTFpkTXBhK2ZOWjRsSytMMmZTOXFZNm9BMEEzU0dmcWtvb2ZYZ2FXYkZoNzZSQm1NdnNPd2pWS1Bja2F4eTBmWFo4VWpWUDV1RDdPN2JFWWcxS0dwTEYxNnpQRGpNeWpSTlR5Y3Nma3ZDWElJNHBSa2pFOEVsNTZzd0FqbU9Ob0hBdmdTajZFWlh4NDNlMTRJSlh6S3pSM3FpU0N1eWx6VitDSVM4WnNtVkdDWUtrVmlXYTZyMU5aTUVOS1BzaGlmU2RCQlZ4WktkeG9MUzRYZXFPZ2hyZjZoTlRNWDhsK0doVk9OUGdhY2dRRnlQcWpjZHlHRmZWTDJzT1ZVS0R6Z1h2Yzc1MGluWDFOaDBRaEJMS3lyMGliUXBHZHpoTXNoRklTZ3RIQ1p4Mmp2Nm1ZRnRzV2xRVXp6ZVJLOFp5WTk4WThhdW4rVzdETWdKM2pnSUo2dnFRdUZSY2pqVWlzWVgxcEkrNGppWi9jTnk2Y1BZTzJBb0l3UjVUcXBkbDh3MEhJQVZ6V0lLWTBTcTFsay90YWlveDdPZzBhNVRJOWNUVkJQaHhrd1hkdlN6OE5VNjlTRmxWYWlVYWN0Q091eXh0bFV1RmVDc1NGWFJuMW44MmxVR2J4dk4yWmM3ZnJ0cnNQclg3S0UzTzdTSStZdS9zTnlFWmFnMDJGVU9rR2NBaHRsaXhDK20yOUdCSWNlWHdJMThpTGFTTGtsOEpQa2dYdTAxQWR5V0ZlTWN5a21iSzhkKzJoTTErQWZjY0RuK3Y2VDFxdnRiL0FoZzdYM2FkMUE1RS9SNlBaMjNDSEhTUkw5S1NjQ1VHWEYva0RIdFB3eWFkWU12dWhVSXFKU2pNeHpNZ1ZqUStxdGh2eXFRdzNQOFpPWDRkNUpkdjB1ek1LcUVkeHdGMUkwRThLUWdSQ1BVQ2YydGlzZUhjbW9zbVFhWURKWFZpRE85Q1lGYW9Ma2h5ZWdlRW1lYldvRlpZTXUzOVNLY0NITUw2dHNuakhBNmpvQlVqTjIyb3dXa2RjcVlwZTlqYytCMVNjb1JCM3A0VS9PK25pMVNtZkpSSmpnN1NZQ01oaW9tdnJVaXovVUcvek9Va0tKZVdUWUFPck1Pa1Z0MzgweVJaSlQvaFJ1UFg1UnhNOFpjR2V0YVhvLzc5cFNFUmFNeUdIcWRvWEYwanc4MXJxVG83UkV3UGtnNTNUOGNhQXdzeEk0N1NKQ3hSYXdDMmJSSzBmWFMxOUdLc04yRU1uamJtVTJuaGRKNW91Q0NOM0N6bHQ4M0U5SHJIZ0tNVDhIR2k0L2dMbmwxYm81RWttblAvMW1MaGY3SjRTRXc2WXBvNU02V2hyNmJpc3gwTGlFTTFHYVJWRU9SSG9pNC9zUnBGRHdDRUtUMUw3MmxzODNUUkF1RWRVeUdYWmU0RlQyajJYdDR5R01GK2lSYmFaZFBMNzV6eEZIYUlPVjAxYjlPRDJCb3duOVQ5YWVZdkhhNnNsOWdzN1ZDbU4vYlk3WEkwL3JnMm9lKzNLdUVYRTRGeWxjaVlISndwOG0vcnlWS2JNU0hlMmhDOTkrb3R5QlJOR2pJZktCMzdzOFdwaVA3WmZFK0FNZUo3TEJKMFIvanE0c1QvMVM3VzhKakhtcGJubVFrMFRKZzNaVTBFaU1jZTRRcThWNHovYldhV09NNmJnVUg5aEMxNlh4YUh3R1FvaEhkNVhRa3FZL0pqR1dZUGlNblVFTEFjV0oyL25oUHJGbEs4R2hFVjdFYlBjVDQwbi82OXNwVFFmN1lGalpkWVZ3TXlBTXBtT2pUc3R0VUlBSjFHVTQ5b3psS2JRelNxU3Jsb2hJWUZPWHNUenhQdzFOWVdFcVdWeFBLcVNpSS9EYy83SFdpMHd2ZGtkZURSUnBOZG1RYlF5UllKZWlaQWM4M2x6aWQ4bFZka3R0dVRweHI5Nk9YYTU1RUZGWG9XMTZET2RIT29YNE9IZGxsTVlRRUNkK2JwaFJXdkFwbjdmTnJTbWRKZFpBRENxVzRFYURmbi8yQ0g3R1V0RXZ2aFY3OFNXclVpa3ZKTFBUTkZaUTJ6eWhPSWttKzFTTEV3UldIQUpxdFFLTUJUcTN6Rms3M3pWVXR5L1VwOUZhK3dpQmY3Tm5VWDE3UmJDWUJiTnp4TDdYY2xRZkFlUVNLYklTWlFyT0hvcFc1b25QR256Q2dRVmZROVZEQ2R1UjJ6RkYxU3MwTS9OSk1TMFh1ZDhvSm4xQVB0U2Z1eXhOWXlBRnBKazV0OEpCeVhOWGMvTU1jaFBQRzh2U3Q2VzJSYmJhYjhIR0tOUFQxbUhPaUs5M2ZVRXJTMXRaSXMzYjV2K0VJVDdwbFRjZDEzVVBTakI2czlha0JCdHp1bXgreEJaMnhlSnl1RDh6SjhCV2pHVGhqbjVzNHlMMmJrSWpFRGM4OU1uVnZHRlBBTEhlcGRMQ25jdWdGR1grOHdMZ2FVNVhhejhwVGxLTFhHSjU3c2ZlbG0zV3B1L0Nlc1luVkpmNzc4MVZGdXlwbTNaampRT0k0VCtVN0k2SHVOMFErTVJ2NXZteDV2LzEwV213ME1pM2Z6ZWRLeVVpS0pKdVVFdkJ3dllLTWV0dVUrc055UndBN0d4MUNTSmZDNlF1OHRBMGdEcUE0dExmbUN0aWhOV3dtNC9ZemZDdTZqQU50QlFSN1duRmJoSGp4QXJzKy9ZVVhZbEhFUUx6NEUxeTVsbUxhblpiRkE0cEtMa3FIVndTV3BsYmhRbmpQZTM3ZytxeWFCUks1Q1QrL01VVG0xRmR0YmN2alE4V29xSk1jdGtNeEljd1V1bmxkRXhIUXo2eTVzcytxRHVJSU53dTJnU3ZTM2RJRFVUUmpxY05Md2JIZUxMbFgyS04wbkZHaTlvVXlNelpZMVZ3QUd1NG4xLzhHRExEWHJTS1JFR1drajZxd2srUGl3dDBaWUQrQjI5M0o4bnBuQTZ0V2NRSmt3YjZ1UVM4cHRXNTdJeFNFRG9ycmZyNmFqWjVtUVg4OUdoNDhBelNzNkVpZjFnOTQ4VXpNczc2OVltZ25EZm05WFUwZVlBNTVJcnJ3SFVZODJSWnp5VzdUeCtvYVUwOTNrSkNQMEF1eThPTTUrRE02REZyRFhaR1JRL0RQVW9rVzc5bkpHVmhWTU91Q2plaEMwWGlhci9BYUhUQ3M4ZlBRSWFhQThsdmo0Q0MveFVvR2Z4UnRFNkhmd1ZXMmptUHNiL1A5ajVYWnROaytSQkdTaUJCQm9XYnVTVTNSKzZjUXY1bkZRc2F1cE5yQUV1Sm9YNXhvMzRNWitpL3JLUktwb3BVT25wZmUvZHZxcytLSmFNNTQrSktMZ3F2Vkl1aVlCNVBFREtRZEFUbTFoeWxpWE5jaXBDb1FHaElncDFHcE84SU0yMVB0aCswVzZ1c2ZDYmY1NjMvcDV2UXpVU2k4MDV2Vy9qTUF2ekZrMnpBSGRCcTVUb1RPdEV0REFrZnpwbldRR1kvZEpsdEM2cGd0VHo3NDNwRitiMWZTdmx0T1Q5d0ZnK3BmcHVkOFE5WDZSc3dSb0xoaWJRTlB2d2FXei94RWVjQ05RQ3d4OVQ1SkQ1Ylk4VFhRYisvb0dGd3BVZ1VaV2JKaFBlYURBNmhudmkvRWovTjU0L2MrQmVaRmwvOXRlQ1FRM0hFZ2NNTkdMeHRPMVRsY0swM3FpOENOWllXUUxhSG1FS1ltNk9EaEJmSEt4R0NtRTBwQ2o3UTdTMW42ZCtHZkkvNlNFalYwa0FqdUtOMUlYdC8vS2VWNnJ5dWdmVUhGT2RINWQvSGl1L005SER6TUN4SzRWQTBPbHBQWGVjRUlQUlh5V0dBSmtMRFFXc3lwcCtSb1VZeGl3Z0xjS084NEdlRzdtcVdJcmI4dDJQdE8yYjNpeFFYQTZ4WkpYU2hhSG9CdFFSd3plcFVlTXBYSS9RT1ZJUzQvN2srYVFEVW5pQkJaMGM0WVo5VENVb3cwNjFHTTRFUkZZbVNNSW83YmZqUHViZUFSMWtRdWJCZlVIL2k5RWN1dFkxN2VibW5KSkFiRWREcGFRQTJ3RFZTMGwrdXloN3AvdHlFMExiNS85T01CemFFOWZ1dWhVV05hZEFBdkQyanlpRjlBNU1IWU9JcU1TUUwrSHRoS3FlSUVqN0lDNTZhM0dYUlRtYk9pNmIvZW5zd0xmampndkpKTTJuaWQyMG1MeWtWeUxGdUFpWWJ6MU1PQXNabmZMK08waTNJUWcwUlErQ1U1M3NtblNrZG9IWGFzU2t4REJMbS9TWEdWNzBNN21HdWRjY25RRWVuM09SRjU5c3oxd0JXNG1WbkliWVhhYm5UTVJhV1ovV282bmhPOG43NTZpeUVuR1NuKzMzOGE1c1g5U2dPSVBDay9VWVpOSXVxQUJ6RmY2OWlTdG5iOGVrdVVzQjhPNDlFK2xGQ2Z5cDhlNE1pRDUrcGFkKzU0dDFYNk1Rb1NxNit4MDFMY2ZTVkNVZlZ5eEVXY0sxckFZNDI3MU5nZmoyOXFlZm1NMXpBb0I2NGdveFpIamNaWnlkbWxVWVBiMjFYU2kxYW5wQzdEWFRDTmpvbUttUk0wNWZOUkFlRlkzSERhemZUSlhXdE8xVVExdUYrNjY0ZDhEcmFCQyswc0N2a2J1N3p5ekR4VGIzMHBxb05qVEI0ODZXRjZzL2tPN2FiUWNENVByN3JXajRoZ2RkUGxGRGowZDFpNFltQ3NBREpMdU5nZVdDbEdxNnkzSVFNcHhUUE1uWFFZV0lYc3YrSXkyOCsvYkJqQXF6VE9DUmNjck4zaEZla3prV3ZzbDFmbytZK05MNWFBTC9BeXJJRnBVZXZmaktrOTVXVXZ0ZFp6d3JudDVqRTR5MWRHUHZQUzdKSEREMGZ2TS9jdW5qT21vSVp0NXJ6NVdleThQRSt4Q2IvUW1jUlZJRjJkQlBUVU8vSWtTVmVxalJEQTgxZU84MFFmcDNiWS9hdGE2cXZRV1Uzd3Q1OG13bXVZZm5jYVBYamptNk15dWNzOWlkc3VzaitpZVBta2FlL1pqRFQrbzhtNjZndy9wbW15RUxEWHpST0ZJUkx5TEtueHpjcE4rRGRyWDRkN3pRSk5xYmUzclU4aUFMbUFrUUJ0ZUZVdHlkRkNzY1F1cUJuUXZrT0xXbjlocXRxZkdzRWhWd05XVHl4UVpOUGVlVUNDam96cWkxRURKK1VTTml3aXI0TXVHakdUb25BZ3JZcDdldFJoRHVmM3RUL3FTSHo3UGdweEU1RzdybnIyOHJGUFBER1kxeHpSd081NGthaEF5UnlGMkRJWEdQWWo4d2I2UCtxNUxoZXNBellpYkFuUGpFUXYvVDJ3RFVOL3VtbVFoemV6RnJNRXpBRG1UYjlmbys2aU9BOTd4b2FzblM4YXh4aFE5QzU0TnJDb0Q4SVpxaGtyWDhMTGl0alY5TmtZL2xYMm9DWmJrQVRpeDJLMXB1UlRCNGVzNDJhK0swU05SQkYwZFhKMkV3UUJlelVpMEhLRng1eG9yQUZPNDlFOS8xeUJRc3pFelQzdVRVSTQrOHhXdVFOWVpUeXFycmNKUmhHaGt2Vjd2VXFMWHZvOStSb1JORlM4QnVWY0lxME5kWDF6dmJYY3ZKVGZtMEYrRjVlODZUdnpsNml4bzdCVThLZWREQmZxczZLVlVFMmhQeW16TVQ4SVpycmxDMnoxbG9sb1UzejNyZy96NTBHVENFM1B4bU1YY1A5LzB2VDJOZjQ2ajVTQytBR00vWDdab2xwWEpqYkRLOTZGQ3BFT2hOR2FMOUduYWI3UXNGenBLWjZzU2M3dXhTOVlGZ1FEcUFuZTgvbmlyNkUxM3FVZStBUnc2Mzloem9ZRjAyeXh5M0hLSWpSdG55dzE3RHUxcERMRHB3OU42bXFGV0NXS04rWGx0MWpaelFFdjJTbEhacVI0bWxKekc2N055Z3h6THBVUlRTWURPWmppZU5wdmNERFlpRnR2M0xWTFBpMUVMdWxGVHVmaFBJZHF1dkx4aStaR1NET090OHhMZTdML0NxQ29HZmRRN0xXOFJ2SEZuZnhSOWlHV2pWQVROVTYwZHZtendjMWxvQ3VEZUsvTWM4cnY4QzFnVTJOdGk2TmFuSC9WRTRoc3gwQVRUMFJwSExyS00yZ3M1S1FmT0taYVhwQjJOR3N6YnBjME9xU0lvbng0bXRPRTg0cEJ6T2VQSC92VnNYcnpVM3lFVGRER2t0S3VmQjU5T0hkb3hSL3ZUYnRUQVQ4YTBTaXkxY3E1aXUxNHhzaURsZjFhWEdZc05JdUVNdmtJWjFRMTBEcHdRRDdzLzNJMy8xMW5rczFXcmlTOXVxVEg0cmI0dHNIWktDQ1B1Y0p5NnFzOTNsazdkNHdNZzBBT2JrUnpmTjJvQVVrNVJkQUJXTHE2eXBDb2hlWHNZWVk2M2NEQnFIM0JJZFVsSmx0NzI4eElBeXFmbmQ3dkNXUHY2RWJsOStvRGFlZ1lmKzdlTVE5Rm41dHNHMGkyb2ZGb0U3R3hNcFJLUFVIcE05djB6NnQyME1aUnN1ckg0Q1NJNmlPeTNmOE1DVE8zcEcxVVI2R000NFpYaWxtVlhuU2JSOFAzc2d1bmdIczNWRjNQVnN4WXMyRFpWUnZsKzk0cmR6QWlneEJybWR2d0N1K0FpMWhTRUpQV05raU9BT3BVd1FpWGVpa0VsWG1rYTZBemVzMXAyczV3NUY3QUN5bGhpS1VjU2RKK1IvWVlzcUtZZlhOaGJPTGxqL0EvKzZMRjl5RFhDdzZSVmFoL2dhRi9NNlRhUTd3U2hOQmgxTUg4YWV6cGdpb3hwcm5mbVNWRDdWZU5USlZXSU9tRzVCT0JLK1dDanEzOWF1YzZ1TjdZK2trQkp2dnVQdk9KMFFqU0lyWm93akt6aVdQaE1yY3BYLytBdXpib0hVdmxJQjZDeExJVzdFYnh2ZEljbHhQSjhNTUdzdDc1VTFTRm5lSG4wOXBucmF2c1hzT3FDS1BSMnE2bk5UZlh0aXJoQmhudjlyUVM1SXNXWVZBNm5pZmNLaitGWUtCcXk0bC8vT2NwZzdzMEtyUGVaU0w4TkRHZG15QmVvdGRKLzBFNTdiUXZiVi8wU2lEeVFKQUhOZUoyMXhTckxzdTBPOHlMbWE0dWE0ckhPTjEyc3NNM2JjSHJyRjRTKzVtdVQwTzRYWUhobUMxemlmb3lzNS9SQnJjZW5WcVV3d3ZESHpTcDN1TWlqdElCZHE2RHJQY0l1TjBKR0FLTFZEZGNQKzF5UUxiRC9PWk9zTENkU0pjQitnWTZXTlFkSDBoYUVESk5DSjg4dUN5b052NStPOEMrSStNblZpNXB1T294dGl5VEN1QW1PTk5zRFlXakpBWGlYQ2lTVXhXVHI3VE5hZ3poZGpuaVltYjV0cVNpc2RKNnZVTlhGYStJcnhUOU1PYWg4eC9hZzc5ci9abUF5cDNjWUVtcWhxeFZEcUQ1M2l5S1pyanB3N3pUVFdMUXlITlR1RGozOFUvSC9JaXZTN1FEbURKVHBLaFdnOVZVL1Z2Wno0a0ljdW1QSTNvd0s3STRMNmdsNGh3V0Nobk9SZDhsKytEWDFwRDR3Y3Q2a28wWW9hTGJiK25mK0IwOTZHZkJHcUMzZDlxYlBxU3dXWncyT09qdzI4K2ZIbTkyVnBuOFBOdXFsb25xVThVT2p6UHh0cERlRS94dW85TzRHT3Y2VzRBV2grV2thZWF3M1A1MVpyeEczeXJBNno4cGY2VitnVEErWDl3YS9kRlAyL0pOWXkvcmRJQ2VMSXRZc2pZZFpBQSs0SWxPbTFMYUUrTEFpak5NWGliQk5jbm5Sc3djQ3FISjRVbUVOQlBhNDNIM3Qwa2JmVkF4dGI2RU8wRmV3dGhPWnhpSmo5TDk5RkZvT0VxK3ZJY2x1NmR0YWlOdVlYbUl4NkxUNERzaGlONWVLQ3ZYSCtEK0MxOXVmSHk2QlFZRWFFbEQzZnk3eGg5MmgrdEVBVjd5VHdhZTJJZHVVaTh6dm1GMUFYR1dhNHZGeGl5N0NHRXNHaVJobjlIemlYV0ExS3NUK3JadGJaUE5ydmZiWEZTb3RzUXJ6SlMxcWhKaVpGL0REalVxSVBGTWlDMmxpSkFQYWxBVzRwdVoyYmlBbW5iZjIzNDg3VUc2eUUzT2dBZjh5N01WbHBoOWRKYjhMQTZ3ZW9ZZzhneWpuc2h1empNMzJtUWUxT2Z0azRabDVCZFNqTC9LRDEzeWZtc0NVQzA4Z3ppODkrNkFTeE8xVS9FeW1RSThzdnorWDB0RGpsOEdxR0RFRjdaMkVheGJObnpCeU1BemxlUkgvd1lTbFE4YzNkQ01UbE5SWWk2NTNibTUwd2d3Sm9wUml3WEh3N212U1VLdVRDaW9waTl5U0Vwakc0YmpPNjhNbG90eEx1MjI4Z0ZtY1VBRVZzTHIxTXk0bVhpTTVDc0FXOGFXOUM3UW5IRUs0aGFNY2F1K1ROY0Vtb3pxcUVHei9pdEFmQkI4M2Q0VnQzVkhCRkZnV0JpYmhVMGlsRm01OEZ5ajllRnR0Vnd6S0Ixb010QzA0UWdhK016aU9jbFY1aWxSVFphb2w1dzExSXFPeWpLNEo0TFNodUdNRGJYQnlXNmR0c2JCZ3hwelgrYStuM2V3L3FPUVZJZnFROVQ1bHNhVFhwTFlRWXZoLzFtVUszVGRuTlVSMTBNVTVVd1g4UFFQUnBlU3Q2dTAyQ0NxekFLUWdYTzNXMWRxNXdtWWI3YnFCSG1lNU93LzZRdmVZelVlcFdWdlYySyt0bTVHYlIyTjJqT1FXbUpPQk1KS0xGYzBCVEpjYXRxa3dCU3ZkY2ZuN2dtY0xZd3ZqejNxV0g5ZW9wcmMvR2lZVnZBVjYvYlpjR2JQajdpcWI1ZDJKRE5aTk4yWTc5bjJ1QmtZdVl2MDU1TUFoRmIxYTdaSHYxbzFBaGZoR0ljV2hkbWlZeFMxdy9ReWJYd3RCVnRPKzgvcVVXcmdKbEUyODJXVGFtMmU1SzZDZzBZbmIxMGwzb1ZubTgvdmx0SHVMMUM5Q3hreUl0akYzUGE3ODhYYlFTVGNTUEh3Qi9HSXMyK05aTGlnaUtoVTdxUzZXQW53b0o0WVVuNVlEZ01kSnhqbksyemFncXE5QUpzdndTb1htN2NXYll1b3FRSVdKWS9rZmtybmM2OXNJWG44dlJ2ZDlLTkl1NGdONVphUXlFaTBSMmR4algxdlJacUFXc1JqWUhlQXdNWGhINjdWQjk4ZkgrOW85eTZXUDM4c000WDdjZ3AzS1REZ0d6M202QjBWTEF3Q2NneEM2eFZsdUpwMW01dVFxYmppT3c5cEhJSncwK2duQ1lVZHJQVC9kWUI3dHpxV1gya2J4Y2VaU2FPaGdJTGZSQ1QxNFM3OThjQktmeTRoNEVra05BaGZVTURhYUdtbHpUTkpIRFVwWGVRUEc5T1dzdGZMdElqOXJUZ0ZhemxrSm1pUGNEK0Z1ME5yR0hyaDBjNERUVkhMQ3pCVHQxeDNGbllkcnBVRTlZZWJhdjZmbXFpcFg3RWFlM3U4ZTdLbEdjV3Q0czk4alR0aHpZYUhCaXJnWk0xUG9YNjJXK00yaXUwR0ZWbkVlbnh2dzFBVU03eDhXYnJhTW1pM2V0dWNEVThubWVHcVBlTjgxZk1QR0d0K256aUtKZ1ZNcFVCdmN3TmtpaVhNOWZYU3Nwa3hBclVWZlAzN0lxWmRkZ0trTkJza21FSFZDb05va3BhbjREUDhES3lUMS84Uno4VjljTjZTb2lhbU5TS2tWcGs4Z1B3N2dKSllscllpQTlreWswWVZwQVFNNzJKelduTUYrQ0ZLaXdqb0xYcTlKQkpIZVRmdHE0QXM3YnhpaW1uL0hKbVYwQzA0NnZtS2I5VWl1Y2VJYU5Ddm53SHlvSHR2QVEzNFBRbTBnNDhLVkJzaDhMbHpFSG4zMDJLVkxVMFpaQWhFaWZXQy9uSnNSMDZ2NDltU05Na3hIdXU5L0RqYmVYWC9iQW5CK3NORFZ5UFNwOHRheUtKaWtkcHpMaDY4WGpNcnlNdkM5Y1JVUHF2cGozclhrekk5U3RBSVdKRmxLNWdiMXBITDBrQW9mcFJidmx4L0s0TjczRkJwL1R1RkdFTlNydko1NXBMZEtrZE9FZVkvd0lzZGV3N2hRbHk0cFFwNTh3TGpBR1FFaGs2Vko1NGVHcG5lSDhLV0F4SHFDNHdXNktwbkdJMjR6emdWOUhwenNkc0h5VVNwODVZRFYyWldBSzVqY1ZGdXhpeWJLRmlvaC82QWtTYXNyTmVLVVhDQ01xY1hWWE1vOWdjVUh6NEt4eDhaM3FxaVZxQWMzVy9MODB2Qi9JaXJ3UzIzQ1JqVzhwNGo5eXhJWFNuVlVLZUNGaDVOaGlaeTJqZkNwaGptTXRRd2V2ejJrRkJJRnp1MFd5Q2ZWaENmMkpIaDJoSEU1d3ZoYzdnbHFhWHpPd3J4WlZtSmpVMUViWXNpWFF2VW5DeElKcXVVU1R5UFpPR2toMHVrbDVxZUhLZUpDUDhwN3ZjeFN6VXI0ZW5vT0hoRlFFRk9WaUN2dVBGaXMydUg0Ri9VcHE0Q1NpWFZ0TVVZdGpwbS8zcUJVbFYwaXFLMmR5K3FFZVhTV2Z6c2JHdmVBU3RaSG8yek4vdFpTZDlHTkNMTXluNW1VQkNabEtZei9XVlJVOFA3T1B2dGZBRjI2dTlHMVpkd2ZYNzkrV1EvNTBROUFnTzVkSG5lamdhNXRPck9DQm5XOUFuYVpFVFpJdnAvbUpPMGJaQi9yalNGaWgwSE9aeDljdXBqd1h0TndCbVBadVQzR1pjSjFFYmdWN2R0YUtjc24xWXAxT1JyNnNhZUdSM3NCcFhRVmZlVkJDVG50K2prOHFuNFRKK2FBS3c4UmlUSFlxc0E2Q25nM3BwSzJaODQ3VmNkOEdrKzAyVk80QlV0aDYxOFpkMGVMVW90VTM0enVCOGZQOVc3amZmTEorM0pGNWtzNFNDNVZGbGVUKzJGNmppQmVqajh4KzhSbFN5OVVSejVqWmJUSDBDbHB6OVMwWGU5OGg4NUJ1ZjBTN1RaQTltZUNtYzFhZ0pSSFp0QVQydWJuUjFJRmRmaEZ0MVpMaU9lSVMzMk1jTk5YelV2YVBWMHlRRDUzVVVLL295eG9HdW4rbkRSVm5nVVM1WnJvc2tyZ3RkSElnOWtFdkVLcWI5TldTSWcrazdLc3BzZUNUVXh6a2h2WmhuNDUvakdJV3hQaWZLOENoYXliUml1NmN6ZndLR2kvSktBTVhUbm9ZTVA3eWNIL1BSdE50djFRYzdKa25McG40czVMVEd5RTkyNUpGY0NzMGlRWllhUEFoaWdCRDI3K016czBKVkk0ZnJSMEpLekJLQXNYY0grd21vaWxtRVgwL1lBdmlsRDBOYlJ0L0dnN0ZHMFdlMHZXdUxtSlcwRnJDanVxNGozNVQvMUh1czlxRFlWdDVRQVF0R0g0WG94cUNabldBY2I4ZEVud0JhZXAxaHA4NUp1eTdvVjRYL1RZNXYzN01wWXJyc0NtejJaZ0VJYWFqTnFhMlZRYytqNDc5T05XNEJNUkJOL3l4L2V6QkcvNWUvL1ZOeU9vNG5oL1Y3c2NENHltNEtmVEh1RjNTZ1ZmUy9ZaVpWbWc4dkRKY2Z1NDRlYWVyV0hJYnl1Z0FRcTluamh0ODRwZnFoc0M2YlJLRVBqOEdieTB6Ly9Hck1uck1nZlBGU2ZQTTl0U2JFWVNGU1I1Yk9ibXZkako4OTg0bjJ4cjI3OXZlVnVvRzQza0RxcU5tU3ZuTlFwTnVzUk4wSjVYdTFwOSswb0JqdCtYemVycVA4RExOeGNIbGdVa0NtTFRPRWQ4ZmwyMjZWZzd6bFRQN0Nqc3VldkYvZmh2UmtTcHk4dlFSbVQwSGswOHdCeUEyTkR4d2ZoZHAvSnQxNDN1NFdqSzNkZi93cHZTRVVZSWZZZFMwcHM1QWxERXAwaVRBQVdpNVhFeHdWOS9RS3RLb0FZTVZ6MDhHYlZJbWZ3amxjeFZnSDlESisvQjMxSzB1RjdNdDBVWHBmOGNNTHg3RWVzTjZyTVZJSHVtWXRGK2pqZ0tmOHBydFRGdnp5c1plejkrK0dsMnk3TEJGV2J0V0NwdDNMK09nNWxJZ3ZRWTAwQWZoV2pEbGhDV1VoM3lZandoeDdaaHBETmVBSnJhbGpwOW9aRjUwZGl0bHVYeFpsNGh6SndiN0dZdlNtbFhhMmZKS2JVby91c0xiNkxSdEdiY2RrbXpud0cvdHJHcEZSVStPTGplUUFSVWpOeGhwTG5SckZWSG1tZFdFb0F1K0NLR3BKSEFmellYQWh4bHdWSzlNV29nU1hiMHJDQVBBMVl4ak1Rekd4VUZaNllUbkVrSzF5SDAxY1NGVHhNVHdKZERDWGhQYzJsTjIybVpZcllVZ1pjSGcwYzRjYWU2WXlSdlZ1UHlpOTVVcllDOTFnN3lYZjZvMXFpMnVqaHNHTkpMU3FzSTNlUHA0a08rMDZJWXorWktlN29rRUhjNUdlQW55Ty80OXRKdlNIa2drQ094V1VQY08vUUpaRHlKSnlsRmhIVUlmSEFMYmVFMnhXdnBTRDhDelNwSEpiSVRwZGZ6RnI1QWNxNWhJamkxeGhkSDFSZnl5MzFXeE5CR28xcWVQZHl2Q2VNaisvOFBtSHNaQ3cwVTBrRnk1TThWRS9vVUpYWjB4aGw2MVE4N0dEajhmM2MyeHkzcjFzWnkvWkJ2TG5NcUN0OXZvekhxVW9CcDZCTnUvbGR2V3p3MWwzdTV2YXBiNWlTNmFnU0RqcmFxOXhyTEp6Wjc1WW83SUJBdU8zb2huRFlwWlJjOXVPMnh4bnRqZE5rTktFbzZVWFRKa05paUxIeHZmMWdMcXllZ3VTZWd1ZXYrQXQyc1RydjJ0N0lTQWFKaTRwUXlONkFOT1ZTUVRRajNNaEpTWVF6a0tiNFRMTlBVTE9CaFgyVWpmMFgyU2JPcHpGOHFyU2dqbVFnY3lEeitpNnRrT056bXZRL1NUNnh2SkdHMHdYZGlDMFU1WHV5WnZHT2d3aE8rMlQ2SW9hYWNKOHF1MzhUWE9pTHZ1b284SlNIUnROTGRueWFXNmFZSTNObHg4WU9XVGdTcllLb2VXTTdRUGtObFVIbTZtM2hvRXV4UkN5WVlWdEoyQlBmWlE0UEp1OUJxTnFmRGVTQVZobEhBSGFucmttZlFUN0d0SHpENHFRRFRZcThFWnEzWnVHclVaRG5nQTRKbEQzYWNUUExNcFdkSm13Y1dBcHVON1RHb0tHQ0dRNnZWZUxTVzVFZEZLUExHTnpscUtoenk2Tk1GTlJ5ejRkQlVyRHh0MEduWDc5V1VBZEhlUllqUC9GTmFydGlodVpQVU1zcnhmd3NFWERvMjc1WFF4V0ljSm0vWHlFUEV4VFkxeGhVNXZUUnlQSmFXVHBPSXVzY2x4UlhMM25GaHpiTzJYYXRIM3hTT0xPdWFlWkZ4SVBidi9tYXFPaGlxK1hmRVVMYTlNVmZjUW1xTGxQSFdBRHFnR052YnJtaDZYaS90NFVIdlZKY3pKNGFOQXA1RXVpNERQcElRUU5sZEFIL0VEZHBvbC9kRUFsb3NQZHdnTG1GallSdWJwaTRYbEdYZFJraG1oL052ODV3WHR0U1BaYW9SemxnY3EyTlhPOU9nY05DMXJtbjZLajRrdWE3Zlg4elhIbjN0SE84VjhGaTdySG5udWpHZmk5aGUvWXdONUpuUjJhUlZUaUl3Rmk4KzZpQ1pKUEl1SWUzbkZzSXRzY0hSNmZiNyt3bzZsMTFyNG1Mdi9aeDdPalBRMWRTM3lGUzVKQkYyMkZxVWxUNjc5VkEzQktFSER1dWExQVVlN290RlZxd21adng0a0dJZkNhc2dUVVVDOFlqQWhhY1o0NWp4Z3Z0UEw3MVFpTmdJeVlsY3VIbzhoZzArK1UyamJwb1pWbUQwVlFqcDcweDJpVGtWT0ZnaTkrT2gwWFFjWFlJalU0N1BMR0dNdGpKRGxFK2phbzhRcTVDTVdGbmo1dDhheHMxZmlOTmZJMlhlbTN1SG1BK25EVHduZWNmN09ONExGM3ZDL2NldmtWRmZEeVprRldnZDk5VW1BcFBvSWJpd1lIeTVHTGpndS9jRmp0Y2hyYTZxaXVGdFY0bDVOcDdnZXJpTmw5MTA2SCtYQ1pqM3lVa1ArNHdMVUNnd3AzeVFaR3NHOGVZWkZaT25KTjJyZ0dvV25hNDNUZEFPUUtjbE5iUi92M1RMVUFzNkgxTEtscjVYYi9TQUQyK05mVEc1cDNGZlBjdjNHdFpybHJmd3VkWURkL1A0Q1NGK0pyWlBVRHMya05BMzhrb0NiUGlFYjg1WUlkbHZYcFlLNUUrVmpvNy95OWRNWWkwYWh2VjVMb3FLY1JsRW4rWk1RYnl5dkF4U2VJeGRDUUtMcENQbWg2dklENWpsT293ZS9HMXliNm5RU29STUt6cFhtV0lNOTZLek40eFRhMmF2MWsxeVVoT3BUc0wyYzczRkhtQnQ0U3RJb0xqNitkeUF5MDIvM3dWY1ljQWZDdm1aSWE0enFmZzk4L3FwTjd4aDcyTkNaZ2VnUTBsa1NQSjlXbTlqK2dQbE81T1RJTFZJMzFqaHVCTmNHdWtWMSsrbWtOMUpIcWhRZDcrUitlN0M4dHd6WnNKNEMwZEdsMnc4aTN1aUtlVjR3WUZVcUU2bFlWZDVTWCtzcURVV0t3Wk1YVzVQS20wQlNUMXpENW1rNzdtRnhSM0FqQzFuNUpPVm1VUEMwZTFYL3FaM2RIZ1Bta0NaRXA0eDFBeE1ueHBZT09iQWxZZVk3aWJHOWxSNVdhL1ZXNzJNcHhVYUlxaFRiaHY0U1Y3S1lwUDVpaXIxL2dUWUIxUVJqcXg3MkNCZGZpMTlxd3J2T0FpZ0ZKVTRwZXowcm1KYlJZN01NSUpndUlxekErcE9JS0VQOXlXdnB2aGlsUkVzYm5DcFRCZFRxZ2ZIRmk2RVp0NVJidXNrelFyaEp2cUJITGwzYWdxL1J0akljMmlyOGlkbVpaMTM0VDVtNEdZVFYrdmxlbStvRkVsMTJoNHJvMUxpTDFPNjdQcTVvVkRZdFFRUWJQcGVLWi9xV2I5aEJDSkNrdUlzQkQ5MDBtTUNqT3dXVUROVzZjUlJ3T1JaRC9XRjV3NjV4OEhUS3hPUXAycDU1SEhkMDViMkxjbjlBejlDL0pRNTl2RUtYWWM3OGhUUkhUcUFscER3eitNZGEzdStqRktOUUNNZDNuV05UcUxRVk1vNFVTT1BkdFM3UGR3dlNnTTJuc1ZXNDZlMDFzNTNBL29YRTJ2ajlIcmZxRE52SWlSRDUrTjZZcVpQNHJpZ056bi9OaXI2WllZRU5zSUxweFhFYmpZTml6RXBEcytWWERldWd4R2l5aC9iR3p1SDlNbWx6d25mZEdmbFR4bE96eVFnMGpTZURoVzQzdUluSVZkenpNT3M0Z2NXRDJQWldCcDIyOWRVTm9WTFJwU0laVjBITzRLbnBKQkF6UXBXblBBb2ZOZUxPOXVXTVdIYVlpQ1ZVTlZyU3luT2swS2RmUURJSlBIWnNWSEJhZXFDb0k4YWt2RWF4bTBNUmxsSjBPVnhOVUNDbUpqZ3BQd3BwVVdyVmVURHdkRXpQOU1GMkZPZmVrTTA4ZllidzNXTTkzZkxVMkdxaGVoV1FSQjhJOXVDbjdIYWFlOUhrTVpBZURENDNyMjdRcjZ2M1RSVVRBd1FkekUxRFlHUmNRa1RYUEVOcHZwOFYwY2FnYUY5dWk0QngzdEM2VFJ0RUFpN0h1b0RabXdlK1UrTVQzdFdqT1VxS1V3YUFtRWNTZG41RHdGVlViUnNqUjVidVlXYkdiMGxmb1BpVUM4WEVjaml1cmpJaTdMZDc5RS9tRDAydDRldE9BMHUxdGU5MXR4SVBXY2M5Uk5HQkNTbXJDYlFBT241andzUnRoSHBqNjlOVm9rM3NPcTFKT2hqdVNlSjFRNHE0L1pmNkpKS3QrTWkxL1hLdlBzZFlHVkRGWmtlRnJZcVl0bDVGZ0VsU09MYnBlbzBzMmo0RkRwQTlmZDhwNnI1NHBMOWpad3E5ZzhEWnNmeVdTMHI0em1KVm1zU1NKVyttQkZQRHJkeXhyeFNXUTEzaGh0RXNzbTV0QTViRjB6MVdrSUJ3L2ZzL3h2NE03d3NLOFpxVG42RDIvbzdjWkNqUFEzOGltTE9BbkVSMC9qZlBwRzE2TU9sdytkOWw0cXp6aExBeHFHZWFPTTlITTlhaGg4RTdyanBTYTBaVlk1TUl2dEg4SllDLzl5aXp6NE92U29Ob1FlWVJSZEcvQlJhTUFpeVdxL3lqb2tSRXVMWnZjcnhyUWN3SXFYYmVMMDhMTXBlYjlabmYrSGJpTnZ6OTB1UWN3ZElWaVdrNnN4dzNGY3BaUWUrandQNWVsRGVHL3h3NUxzWFU4Ykk3QTQxb2hpSFIyY1RYOUpUTnZvR3hMRDlGejM4UGZqQ1Q1TVAvVTFzL1dTaUEwektLTU8vVlB4RlB3Z1RsN1g4SEFrdnpibmxlS2lrbGY3VEt3TzY3by85RS83TVFsNGMyWldXVkRDY01kekN2OVJEcUFHcjIxaUlSQllsTGxPYVRndERzVE95dTdKR2EvcUJmSGFDalhVMjZDWHVRNHkwQ1IzZS84ZkNYVG40VU5KYUI0RnUyR3pFUFdZMFJGN3F0MkNLb1poNWtrSWpnU1FCcGxBcGp3S3UwUnNBRjBMZ3hZMm5VZU5ZOVdzQ1ljZWRrWkxlQXA3NS81d1B4NUZibVA2aWVEUFY1eVBoMzJZdzMyMDRoc0RuZUU5VTlNRmhsMTM0alVWRVIreHE5L0FZemNBMVlEK0Nmb010TUpCTExJclN0dkU4K2dpK0M5TlFUOSsxYUJ0S1pWMk1UWndVU21NcXl4Q0gvaXhsck5qZDJzM2NkOGFLcUNZa2Y2b2k5cTBGUU9lUDVpMnROT3pLendVS1dUYkVsUXdqVzB2QldDUnZvOUYrSlU4ZUpmMzZUUE8zeTdzZ0FKVGFQVloxUjJZcUMrWlAySG4zamFobzdRdHJYZEo0WmtqcTdFenVVN094OTZCamQ1L0JIUy9ZQmM1bFFHUTlHdCtxZEtvRGtkVDdrRDcrU014WituWnkvUjI0aUEvTlVzTUtXQnpvR1R3YjJFdlZIV1BLVUZiekdjMjNmN3pLR1M2emlnQVp0QTRuclRmSHF0WnFXZlU5NGUwaVA5dGhoS1lrazhIWlhnL3RNbjZzMmFPOExxSVdxaGpJUm5kMHNyZXppSWVjUnhpb3NsQ2FBdENtcVc2SUFtaGc1bnc3TE9MTHlRK2V1MjY4ZVJiVGJNaVdteEtZOU1FNWZEVUh5NytWVXZ0OElKRkYzRFEwOUo1aFN2Vk81ZU9pTFM4RjhRNU9jTnFHYWJCUTN3SXlwL3p6T1FZVEx2allqK3hJU3p4SlN3a0FHRERHUnFvWmJDcnBoMVgyMFhEZ0d0c21oN1lHbStKVHd3MzJrSjlxRk1zNUU0ZGRiTGlLUGtFbXNXbnIxbFdRSnhWR2h2Ujg0R2JwN1BqUnd1NGFGb2JhZm43UUpPa2J2eVp3UDd6ZUErYXVuUisxZjlZUGdBeFRXSE5KbzRidG1GemVlTzYzNmx3bGhGeWxiVktLcWY5RFJWUzAyZVEvTVFBMnBUc1F6TnZxZU56NHcxL1RaUW9VV3dnNk8xcnkzc1FsRGxRaFVrczgwYy8rZ3NGR21RVGFoUXRrU1doL2VEWmhXWUZVYVBkdDFFUTBNK1UwSkRicTVaelk1dFJsdzI5d0xUYjJvQlRTeG4rS3dMZDVTTklSRnlua01BVzl6Rko1ck5GZjY1MDhmOGR1N09QTitsNDY2dVFRWUthd1VzOXpwM0Y3TWpjc3puN3lITTRnbWVwSXRVZHl6V3dmdVZhcnFYL0lBZ3I5d2VyNWRKdW85blg3ckZKU2hyejZDNzN4V2diYzFlbGlJYzBqb2o1RjBYV09VQnlWS2lJWjhTRm1XbFpyR3ZZZmZBTC9QdXhNaVpXYjN1bHFwcDVEb3AvbXE5STFGdU9HVTBuNElEc250VTczME0wRVRWcXAvcEdHQlNza2p5bDFRK3Vta3ltNWNyVDVSckhCWDdIa3hGeEZQQm4xN2t5VDFKK253TXpQNFZ2YXpsNkYwcUptbThWOVRlaXFzMzhMb2Rjdyt4cWYxeld2b3BjZ0RsUmN3by9mS0FPTytWSFkxbXJtYy81SnlWMG1SRVRRWms0aVZjTk1ETTBhaGJWVVRnQ2RnczBtMmxZOFh6bkNPMmFGSzRoWEhPRVcyVHNFWlpvUDA0Q0ZNVzNjRUpUbnR0cFlHK1NHWDFQTXpqUjZxMmVaZzVaenp1b2xJOGdvMU9CVnhZNHJHSngvemE1MnR3ZndhVkdVODZUVC9Obll4RlFMYkR5N3BJcVhpTXkwMnhTdVVUb09vTGxEbmR2L0haQXR5TFg2R21IVUpxREFNTldVeTUzUGZFRmFVeFJMLzE5a0E0YXBUQ3cwSUlmRjRMN3diRDZSaEZ0TzRhK2VYNHF3TXNucVRPTTJBY3FETFVycml0YlpBbUZ3VTZoZU96OUNzWjZyNnhjVytCdzV4bkx4ZFkvN0JQSndpTXB4bExYaHAwN096QVRiSDduVzVZNU1sUmVwSzBOY1hBTnZIbkhlQldRWUduRkdYeGlTVGJROHdWK1JBb2tuL2h3RkZBZHdZZkxoVnZLOW5xa1cvRVR3Vll0Y1h3NXM0QXp1YTMwaHRNTGdobThWSmFZQkNacUhNZmJnZUxQbFhqN3NoUVpNbzBEeHdjcGVnaFF1dGV2MGIxUmp4ckhvWU9QY1NPL1JHRlBrMHlGSXhESmRJaHR0ZjN2QzFYRFpXaFdnb3BBR2xrbW90NUIrV3BnR0MrMzlzWGI4S2FvOXJ2V01FQUQwOTNGb0FsQmpyTGhVWWhOdEFYbm5ueGZqY1greURzcE1XRHE1ck5mejNSOEppbDIwZFZnRXBkUGdYOWVkYWRYL1lyYnVscXMxT1FxN1NTcUlBVTNSMXlSZVlISVhLbXVQUFd5SThpd2V5eFY3TG9kY2Qrd3Y1V2dVeG1jZXhYZmJYSTVLT1BtYmN1ZlJPM2FIMG1uMSt0NEoxc1NnMlMwOFBDanNkNXd2bCtGL0NnUmRZcyt3dVUvR2VXZEdXYnNMcktKSmlEc1BpWGxTeSsraXBtS2graDJJbFRMck9vbkR6MW11MDZBWndvZHRLWXQ3NngrUzdsbjBQS01yb1Z3M1RCQUYvUDNibkoyQkJUSnppcCtPOVFpQmxpd05vcWJWT0N1aDh1dHdDdm9FVjRqZDUwQk9XdlFUOWFGNmFHVWh0L3JHRVI4aGJCQ2ZxU1I4VzRWL3lzcXFhdTBmcDBVUmhLKzU1TWZDd0V5WVp4SDJKSVZMSndPNGN1Vm9IeWRZSE5qOUNrVUd0SHpKWGZsZ3ZmRE1wRTVBUm8wbExaRWtDSUpyNWlMVjRGMnRHMS9HRmJKalMyOWdFYXd1RFJPV3ZyMEp2a0drdkpJZmtmcWtEU1pyME04dXNLTS9zRHZGSSt3dEpFOUNORnBMekZ2ZTJKTm1PTVEyMVl1YjduMzRkYUQ4YzNHTmhQbW9xT0dLc2pZdW5pZm5RcTRTZCt0MkI4Q1VuSWZuTXZLWEFqYUwvYnU3ZzRRbGxWci9OWVVXeTdOSTh4NStLQUIxRFo4ZXFEQUh2dytkdHBudjNvY3V0RE1nYlM2N3B5VjY0cWQra0N5R0w4T0FhRmtKdUgxVzdLNE1qbVdWVWRSQmNod3dYQ2JBK0dWRmlnZmVZdm5mN2c0Z0k5dWVJZmcwMXVRVy9ZemlIU1ZYVEY2ZXEyc2RES2wrZmplcWtabTgvdnJCM0F4YnNrL3hRa25ieWhLWGtkRGsxQ3czLzM3VTRmRmM0Uy95RVBndHJIdmZMckpnRFVBeWEwWlJpNkJlZTdsektUOUlvQlVINlFqakc1LzBKRk05eVp2S1M2Slpsd01sazV4R1BDeUM1UFA3MTQwaGg5eFpobGkvSmVhR1VJeUg3RkZFV2ppNVdWMjBsM1RVZWovVEx3eFhVS1RNMlVVeDgyVHAzcTk2ZGpXeHVyQnp6ckVzSlVoRVJFY3lFbVljalNKQXRzbjUyd3RzeGo5T1J4QjI4cXFXdFg3S1ZlZk01WVgyRnRQT3lDUXBQcWxqRlVObXp0QzhkWVJGV01qTm1OZ2I5TTdHaGxkWWgvOWYwSmFYeDEyaE1ScDlBTFNJSWl4TDQ0bkVnK244UmtFOFE5MHpYczBoRmFVdGpQai90elZrV3pUWUdtNUF0aGphWDYvNlZVSlZTZ2J2a2NtdHNrSjlFdFZQOFY5YytKTFFEZHRtVWZNRnZQc1FLdlZmZW82ZktqeElwVXJ0eURodjZ5ZGFjdWkxV3lLM0pnRzVTUlB0U1pjd21mVFllL0c1ZkttbWJ6amx5d2RTRGJTRGlFNmVpRkRYK3gvTHhiTGI2S1NqMVNFY0dWWlFvSzh3RTZMZi9Na2RmamFZWVR5eW9VUkorTmhBa1U5TGtnbHNBWWVBekVIeWVWK29YeDUvMWNNQkZQczE4QWNLL3pPZGorRVp3TWdtQzNHVWFOeVFKN3A4ZS9lcE9VNU5USjBwNHByZDk1U3ZJUmlaVGtjQTNrbU5RVUxEaGpQTTRReEdUcjNlL2M1by9BNFJ3MnlRYStYRzVCaVZjMGFoOUo1SEtSUlZHaXhPNVNhT21JZFJ5QS9oUXlULzAzYWFxT2FSOVZIQjhnbE9LQ2FqOVF6RjY0VEhFVWxVOTJmZVdxTkJzVCtkODNaSjJZSnUxU3UxRU5rbm5qU2lXcTNGa3BaUjE0bGlKYnN4eGlydVlJemNpVEQxWElqUEh0MG9FS2N0ejgvd2sybVJrc1hpczJCSXBmMUYxSGtwR2dhMXcwWENPS2txSk9nUWF6aWZjdmpqYW1DenhpS2hpSEFmWDBxaitSTkc3YzVjMG94bXlKTm9pMDFCVDJRRDNJOTFHdE1ZVzZocnZzVi96VTl3QXBtS2NxaDE1R1dXczJKV0xqK3VUTTV5N011NlNFTGlCajhtSEIwMFFwNlYyeUtub1VKK25RelhNNEd6RjBnYjNMS1UzR1dhT05tdVp1MlB6M2pUUmNNMVdhcTgwTHM5dlY2OWhNalpjbjE2eitVRDhLeW5rVzN5ZTlON3ZMajZialNTRFZEVGlHQ3duQkVlWlJjQVphSVRiUVJibHBMSUd6TG1SWklPb0J1dnNoWGM0YnFwTVc4NnZocG9KVnh6Z3h0VWpPWXBLbVBoOXJZd0ZrdEtaWWNTdURKYXJYc2JlcnpUaUhHd0tDVkJZT0RyM0VNRVlreTFRL2owc2F1R2l6NzRPVXYwbC84Q3hBMWVLNmxjRkJNVzJYT21wTndMbGYwSndDa1hkT010Vk8zN29QVHYyVWJnU0taMElGNDdhRi9JVmhmRmdoNFhqd08rTnlxaXFwSG9saHAyL0RFNTY0N0ppazVTRkx2b1NnTUZXdkFqcXVrdWtud2xDZ04rUEl2aXd4UzdxbnlDTzgzSHp3K1hEcG5vOGx5RWhlc2xtdHdhcXl1aHdhL2RqWnM0OG1sdFJScFNkUEViaGMxTWlvbktFOFFjWWpYWTFCdk1paTRaMk45Sy9kNHpoVTUrTnVIWFF0YmZNR0ZiMGU3d3VzNXZkaVBLZGo3clJyYTRnZ2t3UHdLQW9za1dBeGZRN2I3bllRUmJMTmR4VWhZSHBKQ1BsdHJFWTgxYUR1cFhjZkZHYWJDemVPNllQS3ZXN0dFVFZQVkJRM2hDYlZ0RkdDUGE0cWwwSTlveHpCVXUwSHFXellFYVRLZjIrZTNNMHJEMFVsYU5oNmljSEhXbUJzbkZaS3hnd3hSZTgxemZ1aTFkVk8yYXZJcGd5M1NzV0kvT3BhTkNCaEU1TytWVHdkZVdRakYwcitiQWtMeTliUkFJaGQzK3VHdGJQaGJFb05peHo2OXNsam8zcFlvemo3R0UzNW51c2cyRVkrODJ3d2ZCVERXWThCSklLbTA4NU1MMHBsd3paNkFtRjk2L3FRWkgzWkZHQ2ZQV3B5eGx6WlFqRTlTa2dqVG1rbDV1My9ya2FwSkV0Z3Jkdm9FRnJHcVp5RXRiM2RoYU9rZDNielBmekR3ZUFsdE40emhZRm80RTJMSXlSS1VaKzhRUnlrY05pM20zdHFab2paUXZxRU5VUGl5dEdnTE9jdGt1MzBUQ2hENlpKc3dmZEJaa1JqS2tkSDBIK1FuckJVbDZrRERIa2RDa3ZIbld0c3kzL2ZPdkljWVVsb3diQWJkM05IcDRPRmRUb01KTk1wN3NSYmFvOVlJUVQ0ZWFORWd4bVd0TjdtblNEQThuQ0FldnNnOVA3eWRkVDNUWUhYYTdub24zRm5CYjc5eXA0bUFmbmJid243QzVKSGE4Rm0wL2xmQjJDR0dxSW95SytrRDBTdnZ0b0FYNDU4aFEzSTNyNDJ0K3RqRzkwZU9DUGk5anNIdEh1aWhTWXY4WUhmMTdnQ2pXY3lodk9aL09UVE1abUovNEc2dkdkTnZSTDhCOWdveFF5a1YvVXdNNWxoSmhrR0pxWGFYcWZ1OXBvbTFKR0w1N09HbkRxR2d3YVhPTE0wR1BoYnBMSmZsM1lPRUVMSGVzbW8vZXBwaXNsU21SdCtqMmphMWlpWURQWkQ1L0pYUisrcVlCM2pPODJ5NXF5Z1dhZjhxQjRYZWVlRzk5c3FiQ0d6WkpOTmo5WHB5dUpMVjMyMDVFQmR0dzRXSWNRSzlIVjlJSzhBY1pZVE5oSmJRVmJrRk5mTHNqZUwyTFRDR0cvb1RQTTBWbzJVa25CK3UzNnJjRUorMUhJL2hCUWJUVXcvRHF4ZVJ6YkxEcG8yQ05maTc3YnByNjRCbm5rVUdQdFZOaW9aWGRsaWFYUGhrY2h2MVVXQzFQb3NCRmhML0FoOW4vMGwzSVZpNm40cEcrRjh4bVpOTW00VC9jc1RJR1JSTDBCL3Z1LzdJL0NIcjJKWEZydmdKWGdPNTFJMXBXc0tCVjJIaU1SRXhYSlNHMnlnSmhMYWkzM3lON2VoL2VPanVveEt6cTBocUh0bmxzUEQzU0pFVE5QdDFZczljVU5MREZTdjVOeTMxVFFlSmN0Zm82bitmYVBBTUtEM25OTm03eVpYd3doZ2xPbW9Say9xWGI1R2tnSlA1Z1o1NVRZRmZwek9ETVpCZW9hMDB3MDB1WU4raDJUb0ZCOC9DK08rZTZVWGs2QTM5ZnJ3WjJUb281ekpjdW51ZGZWQ3lzclpCVjhzYnVrd2ozR2ZKWUtoT1gvRk9BRFdocGJScm9wUy81MFdkWGE3RUZjV25iMm5uTVFpdlpJRmIyUWNYWjNIOFJON2tsdWR6QzR0QW5mam1BdEFOOVpUVDRDdVJSK1NsamhtakxMcVFyKzdvNU9pbUxSTDZreFlrQWJYekQ4anBzRG1oU3F2MGQ1M2VtODRXOXBheWYrQjdBWDBvVUZnMHVxb0M2SHhReTN6RE5WdWhubGt2NEZRbDMwcTFsYmdITjNPSTZTV1pCUlNnY2k2YkEvZDJmcUVMN1dHaGJmMFhZeFFCUXJIMjdoUWtTa1hrbkNHVXNhS1RTYWl3TFhWNVl4TENyaVNCNHdrSXdBYTluZVl5MkZpWXp4T3lZcmhqbk8yWEh4M1Rid2ZpUVUzdUIrdGZXV3JPWkxsWmFabGdrZkRaSGUvL1V4MHJiKzZxNU5DQ2F3Y0JZcEYyTnhmVlZiV21SUGxWck1MRlZHbE9XdFNYTUtyTUUzUVU1WHRSSER3Ri9FODlINUJHYXJLa0NzVEs5RFNxSkdheDgxVjIxTUxkVGwzdmpzVGlqak10SG95aW8rMHlGVGV2aHBFSHVScWJseFJ3bi9taC8xZ1lzRFBXN09UZENWT0dmang2aTRLclNRZ0czSjFtSy9qQStwYmtMbUc2WkJZWWltNUJLSHNENnhQTUdyUmJLd0JQNHRna0lNR3JZY2RIK3ZGbi9wSWVjV2pPVWtjeHJ0NUxucXhqU3kxN1pOR2NvdkkxQVNEa0dQWXdwYXV2UkFodmp0ejB6cGJzeDJvRUVVS2lRRVZkRDQrSlVUV1Q1SHVyZFF0NTIyV0VrT3JVRDFBRGcrYmM0cU5sZmxMRTlnZnFROEhxT09lK1hlZFR0UlZvN2F5REtLbittN2VSTUtIWXFSL21aaXhmekxVNjhMQ3BPT3VMaTY4ZzYvUVNzdElUdms2VFpTQUdCVldrMVFMN09QOUV3SVJucW55ZFlWMEhqS3VMMHcrWDB2Vllkc3FwaURLcmNPdWEwRkZXQ2RvalpIaWRabnZzNGducXRsZ09XSUY2d0pYN2xkc05SbUZ6SXErNXZjQi84U0hCTkp0RFQvNjA5bFhZYk5wRTFPVDlCMTFRbjdBUUxtNWNKZzJhTHZZUjlqZVllTDFseW54WkhWSmlOVG9hdWV1azBZT3dCVjhub3F4aGVld1I3dWIybzdTTWpyU01hR2ZZVVpiUG5LSko0eFREelF5ZkdYTnNPTFhkSGU4Q1ZaK281ekxETmxUL2IwdUl4b0t3aDl2VmRLR3huNHF4ZDlpdTRTRlBvSHdLZjlnOHVDK3NCOEFiT1Y3NnE2cWJ5OVdwYmNyMFJvaVZaQ094Y2pZZ082VlhvbTZrRkIrbW13YVAvY29xenhFRnM2VGh4a0pSR1F5bFVBWWJRRXZ4L253TWN5b3psZVdIR004aHV4blBaMEwxc3puNmpOblJ5WlpRYU11THZBck9GRGNJdVBaY1Nub2hycWw5K3p3cDZhakxJTWR4bkJDcU1Rc0JPbnhOZ2Z6dmFCZ3djZkwxNFJ2aUEzTVFqRXUzUXA4M0ZyM3ZDRHZqODRJRHYzYUxDaFgxTWUxZE8raGhsODNkeWVaZFNJMEZma24wSkttNkxtL3ozcG1ndU1vNFoyUVFYTjJRaGtyaGVFRG1mcWZ6Wm51OEk0bjlPQUlNSGc1UTNzaDRtaFdUM0xGT0hRN0c4UlhtT1VCeko0SFN6L1VwWlZTeVp6Rko0bWlpbDBadkQ4S0J6RHBBemN0R2kvZW93Nk9RNDJqTzhGTGtzNWlhTjkzTE94bHdsczY0MXN5WGdTS2RheXFDU3dVWlNSVEdISmVwbjg0dGpZYm1ZL3I5Q0o2QlR0aDBOMGVGS3VFOVN6Mlc1YjYzWkRaNEUrUnh5WWlWd09TUGxuSnlpajJVZ2wxYWt3MzZFZjk0LzFKaXFLd1dUUG15c2grVDU5ZUFyc1FGN2x1UVdqRnBPb1FXbHcvVWl6MEgrT2ZPZGRiWFBDM3FHN05wV1d5eUpUaTYvaVhwTlBheHNJQWxPMG9tckUyQWRvSEFvL1JCMDVXMlNkUHVYdHJUR3hOelNwaWQ0Q2NGRXhER1ZFL1ZkSFp1S1J4VU4zZWtaYzRYS1d1VkVNSGZSNExqSC9LY3R3TVV3UDgvVTZiMWloV3lmMWgweVBvdXgwSVBaRjBVUFdrWVlMc2wxSlU1cFdpa0d5NUlJekw2OHpBOWpZYlhNTDY3czJ6TG9FN3Z2U2U3UXdYRzB3TlVreVRBV0hqa2Urek44NlRQR1pkZ3haRm9VZ3BYaVNBeHdHRTZaTGFNQWVwb1hEVE9zNU53WjR2QWpRZWtRT2I1NGpxOXcrRXl3Ymd3a0VpaVBxM1Zmb1MwWkNnQXJmc3BCbWtpYTlxSkJzdlRzS0lWcndSakx3N0xLWVhmNEE4VXF5dHFCQlROL0dZelBGVnZ3clE4Zk1qSWZhRFo4ek00a1NsakFIL3FrVUgxak1vU3F1cjczd1ZoSSsrZlYreER2alg0cmFhNEhpMzd1bGxTT2dnZUhJMXFweUxCNENuMFd2OFpnT1NiUkxSRXM0L0E0V0FqN3F5M053cUdSZ05ocGRUOHVZbStKRVgwSmY1ejFpTkhaVVMySGZmeXRQMjQ4VGdKeDRML1Q4U1lKL3ZuR2FZNVRRRkN2TDhKWjdmMzhWeEFhcFR6dVQvaW8xQnM4N1ZZZ2pZU1FldDRZbFpZY1NKSHVaWFJKVlhQalJNYmtRSXJpZFN6N1pKQjFEWGR3VVN6Q1RRNG1SSForV0pMVkV1R1Q0NHZDdWtPUmJFRngxKytPdUpLOEQyek0xMG42Sk9FMlJmVGtFSkw3Q2djU3AxTmIzeXExUEdRL2U5WnFFem4ySko2bjFZLzVCQkZRQzBHbW04WWF1bnkzQlVsblNQcjFLbTVEN2ZnTW5vWUwvdzZjQ2VHUFNHUklxUVhmS2x3Y2JhbGJVT2lZRVhxb2JOQkpoZm9WNGkvNXRGWEcwZm5ycWdUMm5SQ0tGcFgxNi9rYUFpeXZBYVJaSVcveVZBaXJxdU1FLzFtc2phS2pkTFc3WjNqRHRROVZBZTJOSDkxVmtwSUllNUxaa2x6NE1qeUV2Mk1vWGJmSER1VTUwZUMwc0xVeVRhWVMvY2NDS01DSlJJckVOSEE2THpmeG1pVTNBbTVmZ1YzY0F5bGdtNEh2bHdseWw2dDBHMmVpak1OajVYOW1MdW9XRUFpQXQreE1UM2k5MXhvazJnS3RoQ2N6dUdTWDBhbnRXMkc1SVNtZEMvNGxkc1NpZ2U1NUxBNDBON2ZwWHFxQy83ZzFiRi9PMFhCMVN6b0NPV1I4RzE1NXhaQnBaWG5EZkJVelVmYzBpZVlTbFQ2NTJ1VkNDd0U3cmNMSUlEc21Ed1JzMW5uOFk3cTljbDdmemMvdEh3M1NHeGFSbk5HWFlZOGxEWFB4SHYxN05ydFc4bDZzTkJjK0lCOTFIYXVkY3hQTEkrNks3RW9YTDM5ZUhMbzk5akREbTEySjhGa0JrU3NjTzVrSUh5Ni92bHFqd0YzemFFUHo1T1NENDdKZTZCMVY3NnJ1QUdSeXMvVS9mVmxPNTRETUlRaWJzV1l0UEJxUnd4OVVaeWlZb0ZEdDNxaFg1YTJERkY4eUZPdnJRcEcwb004bWViUnBCWHFVMnVVS2lvT1B5akFGbjZWSUJqVmtnTHdpd21aMjBMNmxzWHR2aldHSzdvNDhNRTkyY3VheVloR25sa2QxS2gwWTVDKzhJUDFVc2FNaE0xNURuM0NQNDZ2cWZYaWFsSjNScXp2d3dXS1d5QzJvam9KL2ZiMHFRbDdsK3VuOW1vK3V2WmFrcjVBdi9WVzZQdUhucXNCYzZRSWtVYjJpUjZ3V1N4azBZTWhtWDBQejRmWTdsME0vQkRMdXdnWFE0NVJTTCtLMnFsaHNsc0tRNWFJdlBud2ZORTBPWHgvNXUwWUF6dzZOSE1TMER2YVBFbXJ6UmNEZTZMT09SQU9WMjFrLzBXQjZCNzJzZXlVaHFGOXBvWEo4bElycW5ibS9CQzR3SDNZUC9iazhyU1U4eTVIM1pRTGFCQVpaRlBJTjhORFYzNG9RNDQvb2FsaWJUNUdiSGEwT2pjWFBtSmNxcktyU1I0YjNUb3JjN3hlNjlndzc3d0grejQ0UEMvc2RlRTN4Mm1XdGYwOTJveDd2dnc2R2pyTnA1Tkp6TXdDbWIyZisyc3ZLTjdwYTVUNHlJaTlxWkY3Y1JWS1BXU0hvODdaMU9JRCs0NnFoODZuTmJBVWMwcEFFYnNPNmNFRTR2UDBrRkZWYXIxSmR5ZU9WRmZ6KzZmSFRGODlZNTVxdTJ6eldtZ2xFalp2RVpHUk5Bc3paR3dYZW9CM3Flb1NjNHhtM3Z1aFJYUElkVjI3akViSTh0dlVZRW1yUGpLOS9zbDJJaDZRZ2o3NXE2RjJ2UDlyZEg3ZzFNU3JCdDVYZWlXSURCUE94M2tUNlVlYTlDWEs1MFFPYm5lMnNDMitoNVF0cEwxWGhaS25IVFJjaWRjNVRMZEU0N0NOdk9kK3c2OTZxcThnYmxrNUVjeXgxRU5yOWVadTQ0VTh4SDBBSDNLckJPb20vMlBpRW9xLzBQRXlzVzNoRHhsZVNTaDM5aGJUWDNIRkljSnFNSnU3cHNZWWkzMzBEZXFvYXZvaVRvOXdvOGJKR25obDR2amdaMkIvWU0zcjdYZzdiZVY1emJpb2x3ZWxLb3BXcEliVXlmMmx1UElxNDhKOGJSei9EYy9YY2xYZ2MxcGJFRjA4S1Q4d0tUSzc1cGNsbTZEWHZ4UHBJcld5VEh1RU4zaUdCSWRsMWtPcVMwbzJ2WFhBaHVYK1RFSk1CT09YUFE0RTZxVlFaNnl1cXRVZVRRZW1PdmUxeFAzQVFKeTJQL2NsL1EzZ2hpR0ZNaDJwdGsrZnJLSU56TG96SVpISC9YVXFVYmZaTkRWd1psZEx4Y21zOERzWUxDa1Q1YlRJUWw4dlZzUFpKUmpHdU1jQ2ZFV1JoWWM3dks5Syt1MWZYVGd4REZwbWhBWDBoaU1hSU0yZzlNYm90bUhxK0IwRzdjOFFieW1TZzA3SjlEYXpydTJFZGFsZmpGZTh6UG15K0FtcUFCVEc1TEhZZWthV0krdHBCWVl4ZWJWUGgwU3luZU55ODB2TWZVSHNtbjd2ZEdmQVVvOGN5MVpkcnJ3OFZCaThYS1F5a1R6aUVmTjMxRUl1MUkwcWFoN0ZKL0NhRUVPMWc2WkVGMmNPM281MFp6TjdaNDM5OEUybHM2RlQ3bjdwRkQvK2RwYlZvcm5lNmJrdTY5SkIyb2ErbDNXNDVvOWJUSDU4U1BValdqcXc5bmhlWE5paVRCVFdEaFpNMFdjYWhUc2llMERiWmhyOUE2eXZlUTFLeUY4MUdVektFK2VKUGdhdkovdU5tdlhwUXFxcWpwYXdqR2wzaU81V04yUytHR1Ricm81Zk9mT042NHA4K09DZ09mUmRNRWltYWVFVHZ4Q3NkeDkyNTVNSVcvUjdZcjlESWFlODdxeFhac3Z1N0VCc3lQWUdYaGQxbk81TXJxVk84NjE2cDlTbk5POFlGcS96UGJhYXA3bmZuSXNVZGUwWE85dGJ6cTFpUHhncXRoRm44WWxOQU4xbmRXYXl6enlCeHhPU3BlYWFYVE9JNUZlakFnU1lHaXNPUTVxYjFtVXg2RmdHWU81Z3R6QXloQkNMZ0VOaGczZm55MEpScTZoSWw2djFvQzJuUFNGR1Yvb3lmbXFQU3ZLOC9RQjJNeUFaMmhjdmc2aVZHZUoxWjMvVnFtNWpFdno0M3pnR3ZUQmFRc1dhQmdRNjBMNVBRUUJvSHFjZTdBdTJISEhtU3BDTWtDWHNIM2h1UHBnaWdpVlV0Ulhub3ZiUks2VDJRaWx6R0toelNFUlh0dXorMlJoUFFoZ1M5VS8yWTc5NlJiUkZKcGhvMUZ1VGdBMTFqYy9NYVlVc3hZa2Z0RllpTW5Yb3hMcC9rZmxObE9RVW04ZUVyK1BpUjZQUWJoV084QnEvQUtYdEE3VCtHNmpqZ1lTUm1mbEJhVU8xUHBwYlZJZXdVZTR5cUpUUlZjUXFaZVVFUnVwcmgranBvVmg2TkdNWnMzRVFqNWZLTTNmUkpSYU5QeDk5OTdpbEozN0F2M2FEdE45amdYejYvZ3kxcStLM1NFa3FxTlE4SldmeER0VG9vdWRXRDV5elNKRVI1L1FRbS9HOTZ1VDA1cFZ3ZVlUaWJpL0M1aUlucFc4T21WZlZCRlV3OWpUR2FmSVZ0SldEakdUZEZrL0JIdHQxbEdUN3lPeUY4Sk5tckRZdktCMGtGNlRVRXdqSE11TXE4a2FOU1E2Wi9rWndtVCtyUXlBTUpBeE1UZ2dJbE0xNENQUVlCbkVoa3M4TzdWbEpSZGZtakdqS01lOE1HRXlDaHZCYVlwcUlhWjZBU0tUMFlyUGNReFgyS1ZoNTRrWHpIcFg4NXFlRXhSeXROV1hiZmh6MWovMXVGVzV1WEowOElEdnhyZ3E0cnl6a2k0WUx3Q0xVMVloVVl0bTBMRlNuWHNEYmdKWm1wazZpSENjRWVuVksrM3JmWnFQYTQxeVZRdTJuRWlLTWhBdll4Z2VhczhsVTJHV25NL2tRSGx5OGFPWmRBenN4VEVwVVl3ZHRHUDd5YWlDYXZOcld3a2lMQTNyd1lBR2Z5eFJ2ZitKNzJ6d1dROTkzT2tUbTdKeW5NTE8zS3ZDbEcxOTZvN0R3RzNuQTNmMWhxTVZzQ3JvWTdSNGdyQVVmbCthSlNLcVN1cXdqcGNSNkVFdUF1d1lHS2w3UGZ3LzJGanlyZUVGeXE0MDV0T3ZlSEtsbksrc2ROY0tObHFOMm5GTXdQTklvMDB6V2ZFU2kyam5RQzdGSFVEVEtBa1pFOTZKL1NCTVFhTFc2WEFDMlY1WXRqSjFxSFFhV2NBOXphcXBLa29VVldreks2L0F0eWRJRE5hRGZlNmVPa3VNY1lKTC9OM2R6UHF1bDN3QXFIY3FCNC9XajZiYnpIL2p3ZDRuL1ZrbmJCY3FIZkVVcHdSVGJ1ZjNudWhGRVFybkt5OHFZbUxkckViN1JnWlo0d1l1Rm1MdllrRVVFUG9wSHk5WmpiUnJJU0JYOWtzdTBTeHI1Zm9UaEJYODVPaTVmVjlLSWpvSTFqVERnOXZrNHBodXFUUGpvY0JBcUZOaXdLNTZ1K2tudDZmQjdzZXZVc2d1V0lQajdaSjh2WnZNajVZbGlPZUV5SVVDSWw1QjdoZjJrUzRzU1A3dGNaS0NPU0VCaHpvTElOK3ZaZ1pCQ3ozcGJWVnJjM1VjSkUySEFScHlvelpOS1hseHJnbnU4VjJWYWNodTZWYU5pUnd2MWdXdjRIT1BCYTZDcUFMUks2RHRiQVI5UlZVazRZb0dOckx2Q2JKeGJqMHp2bDR4cXE0ZUJFaDlzRUlJUHVyVlFXZHJjcW45Qm8rYmk0MzMyUkpFWmhqRmxZSXM4NGxlblo1eWlHWU9Mejd6VU1RWkFpak5tb040WUp2MTRXZ2hxTXRuVmgvaGZnT3FGM3lVUkhRdDZyY3VrbHpFR2NwUFNWamdpM29ha1o0MnFyc2Q4MlZXTmJoVDk0OWdlZnExK1J1MWJkUmtXeDBaTDZSUWVDYTRKUmJQNUtSTVVSSGMxdXhFQnFnaS9GSGxUbXlnaXY5Mnk4ejEyTlVyanR4VUtGeTlGL0VIOXhUWmZPZVVtZmdWT3NmU1R1WGpmT3Fkb1EwSkJZd0F4MElJUGRSMS8xU0NzWk95bWFjcTNGOHJLY2R3SXZnSFJ1aE80cGxuc0Zud0pqTzU4eDJ2VldrQzJ4YlBYTUQxRmZyalBtSTdYVk5uL0c4dUdhcWVjT0ZKTkhhaDJaLzZiTW42M2NheTBsejhiYWFjUU9md3Fjb1V1YVpWeFBHM21XZkNMMmFvWk54ckJmSDU4TkllaGxiUk9lcUJJdTJEV0hPU3ZoUUxXVnhDL0VTNmpVdXlIL3dWcTY0ckNJaXF2OU13VldpUVVnOCs1V2ZYTHEvaHRkSlJwalFZRm9DaklhR1FCTDZkQU9jNTg0bVp6ZHA2d0h1ZG1EZFFSSzdnYU1iWTU4UWxaQlhzejRwWDZFakFvU2g0UkpCbjEvbk9SUGQ2ODdUNExGdzZyaXhqYjBGVXUvZXZ6N0hoaFlGNE9uOHRZWmZvUUVoTTIvQXJJL3U0TEk5UWE1b1pwMk1NUkkwYXZTY20va0V1Vmxzcm9adlI1VjFIaEozVVg0cXNLMmRXdUNtT0dlUEVsNFRpZjY2dlBRUUhyNXRvVHNTVjV5QkprV0RwZXEzRlIrK1NBc3RxYjA0RUU4dy9FNGNjOWV4YjVlUWVQUzJGeVdSZ242anJ6ZFo2d2FEMS9lNG92NVRUbmlDTUN4RUM0cXlwUmRIeG9wWnRvM0FOam1UbnBtTTZwQzJpeEZ1MWtmUjBTYW1qU25FaHhyUDlLS0hXeWdETDVCK0lyREt0dzBsc0N1anU1cEdLaGxaMnQybEZZcmdCZkVmcmZoZE0vMFlMVlhWamk3SThDL3U5czdBbnY1N0hSYy95ZWJNMldhYm16MG1TdWFWK2Y3ZW50M2hhNHc0a3RpWDFWZGpCejJLem9CZDA5VXBEbkNYVGJnSEE0VmFHSHpRalVYcEYxR050SVZINndxckFSa290SXcyY2IrdUNqdHA1cHNRb2VraDFkYS9mbWt3RDdLd2VyOS9wNmRRRE9vaU83V3g1d2cvc2Rva1BxZDBncEcxSlV2VVV5KzF4Vlc1NHFmVkVNZ1U1QXI1ci9iNWNzMUpPdkJPTENMaVRiZDExYXFnS0dCYUFWVE5QUVd5bzJhTUtNS0doVFIzQm05T1VjQ0FxNFZSOVZheGRCM1MyZEZCY1MyMUZubis4OUkzZjBXbytkVCtrRnFmdHBpc0RXRGxKL09TbHE3UEVuNUI0ZTBHSVlhT1JFcVZ3QmZ5SUJKMCtmMUNhOGkwVENLR0lTY2NrbWlXTWlVNXNuYndnUGRhQjhyanI0ck4xa3RydVhsWmpQMEpYdlRUcXlodFYwcnhBM2RQdFhENTRMbllGeXkzVG5reFZHTTRDN0NIZlQ4SENQMEpFWmVFaGpzSGZNbFdnVmg0TU5XQkd0SjhGNk0vUG9kQzBTT1ZnYkxpd25qNVg2dkNtUFhiVDFEeVorVTBtY1c4dkRDK3ZuYzhiRlQwOG1CVDJOWkl1cGxzZkVoYjc2SzVVMWp0cVF4MXFWTE55QXRFa2ZpbHBQMHRmQ0hKenRGbmF5ZFZQWVNjNCtVV25GaEY5UkE4VmNGNEJyRHJ0Vk14Qk4ybkRxZ1I5UG04RjJnWHM1ejNjMDF3blJaam9GUmo3TWlXQUlSeUN0L0tOaHJmcldPR1Vwd3JCeFJGMFI5Zll4Q2Y5bThzdktvbGVvUXhITU0vaTlGR0pQRFFHQUlQMGJ6anV3K2RnK1k2aXpjbHRIUlQ3Tm0yWkdlOVU1ZlZTOXBMNnFiUDkvRHdGbUFGaHo3MncwejlZcWMreitiM25OejhFV21KaEZyejRQb1ZSekhxakFRMkczRk9Jem13ZnQzYUFuOWptVnJmRmZKOFZIMlk4dXMzeFhxdlhsVzBZZm1oMnlCd0srcEUzdlp1cWhtT09qZXM3Z290Y2t3ek1UZVYrZnZPMVV5YlhUTlF3K1h2RENNVzg4L0xTWlNsZmNCeWIvT2xGbitXbW96UnZEd3VyVlJOcU9DZzRTWk9nZTdnNTRsM3NpUkx5Wkl6bVVTNjBlbTFiOHBYOTAyV21zQjBUTlgxY3MwOFMxWDZWWkladGFwRy9IdDlGUEdWdC9COFFETjVTSTlaSjY1YmtMbk9KSmFyamIyeXc3YklrOWo5V2VTZExGOWcxTGpwMHlxamtpdEJZc0wxL202Y2tIbzZiekI4UWRUVGQ3OXhHNVRuMU93MzRNQlJQVEJMRVd2b2hhSmFnUlFYMjJ2NjVEc2tHZ0J2SVVOQ3FzNWthOXpvaEVua2ZZS3RoMzJ6SXFicWlUbVg1bXE2bForeUVNNE80M2c0WjNiTWN4NThudG5iNW9lQUkvUkIyWjZZaTJYTmN3eFJDejIyNDNGMDhKVDhmRVNnNGkrQnJTY3VEZEFjUkdpNGVIRE9OV2FaT1huZjZrdk5hK2U1eTQxUWVpakY0VFp5L1B5VjhCNXVNeDlvM09uRURKbWlhb1AzbG0xNkszU3lYM1Q4ODYyUXZSdmtFRkFIbnpHNFh5OGNnalZ2d1RhR04zamtLaHJVZGNsemRTZkZUZ2E0MHlMSzdwb0JRcVZlQUVEdEtZNFZIWG1qbXNtekQzLzFQc1FPS3ZScUNIR1U4SGVuTmdJOVdpUlFpbTF0RktoQllUUEFZL3NYdGU0eEs4N2hmNDFDREltTGtqbmZBbDRiTTh5SVJpc015MVNpZDdlVnZnYmNtOWJ1SnJWZE1IU3pLc2tFTjl1S2xEYU9SVWdwNDB2em1QRnhRZllIVUpnRUVnNzMyd1VTbzdmWDR5c3dRY3RXYWhUTkR2Zm9INkRIcmpjdDhmMWhuSmJzRVBsZXBZVTRNOGJpVlZuV3NwS2tETzJvUlFFejU0L2pXcktiRlF4eEFXdUVMNUZIMXQ1TTBWTSswSFZ2RVVnZ3JQN2M4bHNLdVdWbnBzVXJFY0NUSzNkajZKamRCUDg5WHdxakNhbGdvaERVSFA3ZjgyUGtyRHQ2Qk5mcFFENHNHT3pWN3V1RTFMTEJGTCtIWVd4U3dQNkg2L1ZuZEJpbVhyaU9nN2pFOEpINnRhWXRWZ3NjcEc0NHpWdUhsSk9acjBVVGl3a1E4SDVzZ0JweTlobmxvYVRUWU9RQUxZU3IyU2ozVElJZGJMWUZLa0NsNFg1c0MrRW85VS9vVVJkSWp4TzY1Q1VXRmdEMTQ0S3hxSnBZTHNKekxLMnZidnVuL0ttTEorZEJ3UDZzZWp6R05wdWcxSEprK0FQTHk5WVA5SEwzOVRJQ0dDNUJBS1ZUVUhHcDUySkpXNDFRcHBKMjRTOFdBOTc2S0RXWEM3TC9rS3oxUHduenhJMUt4ZGlkVi9EZ0lRT01Ld2pLVDA5U25vcERDN0ZuWEFuNW9DMm5oTjhYZlVvNzEveFY4eDZMSW4rbTFiQnNDK09BRWhVQTJ2b0svOXdjUTRBK3Y5SjFaaGU1OXZmaDRsdEttaEFTZklnN0YxZDRHZzByOTN1RkR3K0xWUGMzTkFwL0lpZFZ6RzFYTzlZaUtubW5QQTJBVHl1UVkvZ3JYQjEyZTRMUVpUZHI3eUYzN3EvZUJrWjBSVEYzeTdCUHdrQ2U4bFBMUVNjM01ydFpmTjIrMzBDOXR0REtmdTczK2FFTUVXUUh3blFPUW1QTUNXazdBRmpmTUVYV0Q0Q0U1WVVqVFZQSmlWV2pWakkzcC9wTWkvTG9YWDJyYVAzNjVqdTV6YjlDV3BROUFTVU5Ob0JuL3A5dGdhc3VBMFc3V3Z6WE5VTmZaRmdrajdjS2Nta3BISndxWGEyeTFsdWxNSjIwV2hENmJyRXdPVVhCZW5YRHAzNy9oLzRJRnpHYzJuL0d6d2V4K3hmZUQrRTc0SmNUd0ZGaTUza2pvd3l3eFFuZHNkN3d6K21EOStVb05rM3ZhUStycm16Z2VicjdMdlovdUdCb0d3dDZ1OGdNUStqMm1KaW81SlUzVVM0bU9OTzJKbThyZThSdm50aTYvTzJQOFlQV3lCT01QdENEWTAzdC9NSGNqUHZkakRjSlBzcGNLbkhRZjZZdkRPWEJsRnJXckRVcWJtcHFTcnVRNTM4dEkxQmhzaHdNNWNaK3RuZDh6b2E0bXM2OUVyL2hpMS8xNXdHbWxrZ2pMRTQ4OUthYkY3MkhUemZQVU5SdzBNeHZFbjFoMkE3OWNNeEMzUDZwamxhVm9wc2JTYXpYWnovMUhJcEc2ZDF2SFR6UzVNYXJEbWZhYm5lMHAzWGQ3Rm1WSSthNnJFUkV5YzQ4cDNwU2V3YU9NSWdPaDE0UVRxWUFSb3VtN3c5Tm9XL0RhVDlaMWdsbzY2V1NSV2REYkhCaDUwTTdpcUdCMm9NbHJOMytkbzFhM2J4dzRhYzJFOEgzY0RuTWpGWjdRVVhVOXU2RWM0RCs5a01YSU9wRjJjYytoOFM1TkFReXJZTkFLbXRxV0E2My9oeUM2cFdoSk16NWV6YldML1dKUnJ3QUQ1RTF6VU1LQ1FEbjZVdXRjTGRCVERUbk1MUktMdE93NUxUN2lDUHNoNWl5dWF1Zzl3d1hSRGRtWW9aZVZ4K0owNTEyYkpLWUMrMmg2R3Mxa0hJOGxiOCt6aUorbGNuem8rOEhOcWg5NnkxMklNQkkzNEpYbTFTVlFLL1hlQktjcTZHeW1wQUhhY0lsOExjNnEydUdtSG9WZ09NTlJWdUFDalhhaTE2RmprRGU0QlBmOWhMSUJleFBLamduVC9HNDVnY0hRVkRVZFQ1UzNRNnBXNkd3NHFpaWNSSHNTdWVuQjc0cE9vVDJBVXRKZFpsRWloYnJ3ajd4QWtKRkFDemdxb1JyRnhlMkNRVlkzVmZCRzlzdDV4UDltV2FOVE42MCtKV0V5d0NDbzhrWUZyTXUyQzY0azI3VDdVME1ReDJTdWZ4MEtXOHowVi8yT1VwMHllNzNBMUlYZHJ2dFBVbWlBWXNoeFhaaFZyQkJIR0dlTjZLMUZMWlk0QnNLSnUxTkVXaDJtOFBMUFcrVER2eGVHSVdBUFovaDZzUStYTlAyNjFIT3FUTFc2Q1ZwMUcxSnZGZkJ5NlErQ0JnSGw4SzFRRXRReEVUejQwT01HeWZHR1BVM0oyNVYxb2h6bjNyMHBCZkFiYURHRGF0c2RGc0NzSGZCd2VSaDlpMk55T2s2N21NV0xrUWhmVSsxOXdhdXNHMVBkTThvODRjTzl6Q0tMV0s1SVUvYWpIdHdJUTVlZHFTQy9JSUtxWHlHRDlFRkJ3N1RGTi9FZDJDRGNmUHFyNE9BbWNBZklYYUE2VkpsS3B1cXlvT2F3TjNweUN1N0sveEIvWTJqZkdRZ0RoSUg5bkhrR3R2dDJuUXV1QVJYV1Q2OXB2SkNzc2FreHRsZ253R3o3bDRzL01waS9zamRaa29nRTFIUEJYTlM4TE1MUlh2R0lOM3M1WFUzWjNDMDJIbmwySHgzbzFubi82ZFQ3WU1qMlYxVVlSSUZNajlFUTZ3RTNaejViYlY4ZjNYSGJ6M2RwRHdLaTVlaXNyU1FoTHFHMGl0MkoxcytrU0dtNGFvQ2M1WURLQ0YvUHJlMThQN3JaTDNqSlo0dDdnMVE0ZjdhdTR0V3J5OTlIdnIyN0twSkFEeWJjMHBsb0cwQzBJZjhPRTV1OW9vSWJ1T1JkMUlVbGh0QmltcVNUbXBZTVM2UjR0dDRQYmo4S0V1L1lEOG1rNUtlMWdjNnBURjNRQ1ZRSUswVFZZeG1EVUVGamxsL0lodDNIRTJlUzQ1WE9rQlUyRU5USkd5UytVRUwwWlhzTlhGSDlyaklKWmYvNmc2cTF3L1ppdS9sOTRqZEdUaXgvV1FFVGxvVTFlM0E1TlRnYmFqbkkrOXJXMWRLOHVzTmVzaWVSdjArTHZINWlQU0tyNFc4RmxFd3ovZjRRVDRJaWhlOFlGVjZQRDcyRGt5ZnR1cjBxWjhVOVE0L2tmUHR1SnBRNWRjTjNlOStZVDN6RmM1bFdqYXBMMW1uTVJ2SWZ0anptYzFGZ3piWEtndmRqeXhyaWdaVG52MVM5L1drVCtaL1JwdDJWMURxTXlxTEx4a3czY0pMK3JGbjdwc0Z1bzhIczIzTjRTQjZlL1l0MVIrTHlsN3RsRFJ0Qzh1K1hTSUI1b0VHQzFLSHFGc1JZVHVpUnlEd21tZWNsakwzOFhaUE5ZUlprMi9jdE9LRzAyOWRSQlVEc0tXRjN0NzZ5SzVxY2JlamlSTVVPUlo2dGlmOXFZSWxxK3MzWGdTdGY1SHJyVTBTY05QMXM1U2FFMWhHcjc2K1RZSXZXSkVRMjBDZzY1VGVuKzJGZmdiOXRudGJYOU5PZUVROVcwSFdLbVFNMWM5VW45Z1JJc2hPOGxHNE5tcmVVbkVkWlYxNWxCTFRHSlRFd3RQYmliUXVuOVQ5ME9ZMDVwb0FxVnV2SFg4WmEvUWVmS2JqaW9WOU5DRGk5c29CT0pNVGUvZjZIZjM1SXpIVXJ5em01cHI5MXNReDEzamUyYS9wV1M4SFNxemZpeG5jOTN5RVU1dC9OTDhETWVGb01nQTByamE2clZjL1ZWWDgvbjl5S2VDdzFzNTBiZlNqYXJLNVZXcGNleXlYYkpDZzZIK3VrbHBPdHY3QVVob2g1YVNBWE1mRVRZZHY1clAzcXNJc2REc0NNMFJkOGpPSnlJcHJOZGpWdXpSeDFxS1g4VDZtS0VXTGRKQjBxRGJnRklYY2JhaEljdElKZ29tc05HYVlOU0UvSCtSbTFpNkIzdUt4NldyK00yVERjelZvZis4b0dKdmVqT244SlYvUXFsMjBTYjYyUnhuYUJhTGErQ1REK29HSFFBZDNxbFpHbEIrTmRRejZlZEFEaXcyd2hjNTJjYzFwWWpkaUxNZkxFZkNOS3J5N2srUU5DQndSbmxyWkppdkUrSmVvS2FoVWJZY2toWTlINjMzWkM5bjA5Q3NXUEcwOHUyMzhXY2xHM2lhM0NNUnNTZm1lTE4rd3hONFA4MHJ3Yk03cmVPM0Zha1o1NGtMQm54V09vY2pFTnJsWG43cmNjSjBYTlhUcWZiOXVWTGtLY2crbUROZzVmeXZPZk9QcjcvSm0xSSt3REsxd2ZqYmtyOWl3MzZtdGxJbTU5NFFCYlAzRHBoRkNDOHhqelA1RVFuL00xRnNyVUUzN0VsU0NTVnhSbWpIRGo3L2kxaE5TczJmbWlndWJaSmJpV0FoVEd1OE9QV1czTDJjdlIzWGFHNmRDZTdtMXhCMDZnWTJTQkY2ZTVwOFdyNVMzMXpieWNObElrYTloZWxNaWczUTF5V2p1Yit3VTFrY25UTzFhU0lNMUdXVjNIQjJCbDNRWEtqUXhDQUVBUlpvL1BvQWh4dWV5ZnJLd3hWQ0dZdUQ5MFJ6U3VScEE2TGJxUEl3ZHJESnpiRkUxd3p6enV2UEQrUjRlc2ZZSjMyRnJ2SlpOK25DcHhyM2NKRFlSbUYzeTRuR2p2YXVUSVZlQWxvWmwrcTVNUHlEbjRib0kvVllIUnpJbzhDNlI3Q0FQV3U1Smt6cXNEb0EvQlloWSsrbHJja1YzL1FNbURYd2FxZ0lJT3hVbVJLYUlHR0M5QVU2UHFCMG1RS293N3VjVTNkRUlzZTF3UDBqOFM0bmJGTk5vbFhUWjZtaVBuY1p3ZlQyRURRK1NrMy9DNGRaTlVzYjFFWm9oU25sOFRpdzdoOXQ0YUZrUjVySGsydDJnUEVvUnlKeEhUR01TamxDTGhUNys3S2RERFluemQyQldaeDFBVkYyUmJwY2Fqc2NlUEFVOGx1TUdFNEN0NUJ6NURma0xmWlZBZ0I1VmZVZHF2QVlNamNsL2NXMzJMSjZlcE5oWHFaQmhsZlFBdmZFWTlDWEtzYXNqanhwaVNDY0tFclJ0Q3ZVdERvRFd4WlYvS1UwVDdwbW51S3MxWWhWb2NTZXRRZHNERHRHRFhMNnZxSGIzOEovMWJOdWt5WnVtQWtWbHcycFFGc3Z4R2lKdEpZTzdzL0lqbjRhNXVscGFMblcxdVR6SXk4enllNVZiSThUMTlvbEZnN2Y4M2Q0cHNMQjRwYlBxU2ZCejdGUmQzb1hpUjU4U2VoSDI0T2E5N3phaVZ3eldYc0ovSmVvVlZJcHpDWmE3T3lxN1E3TmhxTU1nUFp3VVM0bmdZNSt3RUUyMG9ZWmR4aER5YWJQK1dpWExhQTQ5QzNXbDI2aG5za3BoY2ZJTWR1bGZnQ2JIbW5KdTN2Z2c0b09nVmd1cXVtcGdzTFdyVGlEcU5JUlpsV0ZGek1QVlNQOVVIYytGdzB4TXZRLzFGY0ZmWWJnOXcyTldqSzJoM1BVb0VwZ2dKR1kvZloxaGYvTW9kR3krN1Uzb09ZT0JHSkxXemw2K2NrTzEyeW16czF4cCtqUE9SYjhDRVNZdUd2bW96K010WVZOTkhZM1hjd2kyZndkSVNYaGFyVjZCOXJjQ1d4bmRDeEJQSmZXRDhDY21wYlBCaVlQZk1nYlJZL0ZIUUE5Vk5uS1ZKNlVBVms1TnhlZ3NpVEJENUpPaGdKN2QrYzBaRDNGUXZlN1FWWjhvWThMNkpRczR4N3RtK3V4M0RzYjI2Q0xrWEtocWF0bUh2bG9zSkpMVlRRSnhVYnFZVk93dVhGSGx1b0NmTzRocGF3LzFzQmlTTHUvY2EzZjJzMWlMNDBFMXFBSmZOSTRGWFpCZ0JDOFNvdklaUCtNeXdWTVJQT2dLNk5TS3B5RjhxTFRvc1FnUmt0c0lxS2tjY2tDRkhaUndKMkhENDJjdnpQSjQwZHIwR1FtRjhBZmVweWFjdDIybnBYN0g4OExXMVgrZHpFYUJqUUhubzRocjRpOW1vMmpUUjRERVZVSjFtT2ZUL3NQSitXYjE1eFJQTE9zeGlVSVNsaS95Yjg5OUJpdVU1VlhRbmZNZmJBWmZSbEpwNnI4Y2pQVG1aWDBLRTVMdEUyMnFZeURvMk5Rem0wNDdoMitpMUJPUFBVWmg1cWFVMnJWV2xEekFUanBCV2NnRFk5bnFEWTgvdlhnOG9pSzVzZW55UTJCYk5GR1J3eitMR1ExZjdKMFFpMFlrRTFLU1VnTmN1MC9lM0ZFR29OR1lmYTlvTk1XYnJVMVFiZEl4K3lXcStIVWZ5Nnpzd1UzUitZQjFUUGdxZ2tXbjFPZU9RaWJHRmJmTUtWMEFrRnE1SnFrVnlwUHVJMjdUdnlVOUtkTjc1c2V5ZUVBdU5GV0I2c1Z4VHhDRm9CaVlyZ3pUckgrVW1sdCtLbi9DeHFCUHphZHR4QXA0NURVU1NWajhDWjV5amN3dVRidEFhd3RLSzVVRy84Y2lIb3A4K01ITWRVaURrajNIQVZPNWxYQXN5TEpQMTRnNTVSNndIRUJwZ3I0ZGZ1eHU3VEE0blE3QkFhenZ6MEVoSkIxUkhSMHEzalJnZktQWkQ2T2YwaTFZWVZFQUc1K2VKZTFpVDUwemo5VFpzYUFDNXVvWWs0UHJvc0ZrcFFUbmJJLzJ6OVkyVERlc1VKMEVXbDR5UXlseU80RWJVWE9yK0xrZ01Vc1NpWjkrV1hCVGpnVk8wT0c1MnczcEdWU01qejY5WkNGRFlXNHZQOGpyRVplVHRvYlVBUithMGxURFhoMERETlZCdGFYbWVnenRBUWRRSVJhOVpkUVlxS3BXVXZqRkNqYzFybUlQNVBqckhrMTlHSjYvZTk1RXNGRk82aVhCMytET1ZaeVZSQm44NkhIWVlmUWNaUTc4NTVkL0ZSVWU2TU83R3F0T0pxUnQxS21NODByQ0dwdnFtYmNJcWt3QWlJYUVKT0h5NUU0dTVoT2JFN1FMUUpuYUtCVnVtbENhcld5UHlSbXRIVW05VWM5bzhaVWJ2eG9CaEJpRmF6OXhkT2tidFJrT3dGZFg0UndRTEJVWUhod05lQ05ycXNWbFo4WUI0YytQWFlJVUk2VldrL0dDYWpyUlduNFM1T0ZaYUZlQkxaVUpObzUvQm8zQUxkdi95MEFPRzhUdys5dGVrdjB1WjdGbE1zeVRkTjI5Y3hkRWNPd3dUelA0UzM3TjRnWEFnSWpINWpMcDZBN29PV3JubXVXV1VHeDBlVFJ2UzNnUlJDTytrOGZ1Z0U5dG5TMC9sYWlNNUNOMVY2T2NZdUh3NEV3TE9UUHlSbHBjZ2ZBcmVWYjR6YXMyN3lEa1VaN3NHZGYxL2ZJR0lDeG9BQTh2TGR0WUZBLzNwR29yOEJhMXZPNlNGbXBkbWIrRjVpTGU1UkMrY3pDTVM2bmdIV1R4bmNJT2dBNVA0L3JzVHJaZXg5eFoyVnJuSlFibTlwWFR0U0REdDVFamhoSnJoTGRrajBDTktpc2RQU090RnFJK3JleUNNK2ZrSlJkVHlFSXJsOUtZR0F2Nm5VRlVNTGtwY0FYK1h6TTd1WEdvL1lXYmYweUsyczVmVzZiL1JuRG91NFRPRHZOOHA2d095N3MzSlRCSmtFYWd2VHNLZlFndnZCVEkyYkNtV1d6d2M1RlNtT1VkTkx0OU9MUEhhb0ExZ3JhQ2dpUzVuSkZ2OWE5OVRzcmdjWVpFblhBVDBuRGJMajZxOTRuVldtS3pLSVVQY2czUGNJejR2WXJKQmFVOHcrdm03TE9BLzIvUGRHdCs0andxWmVwa1JmaGJPNlhwaXRMZ3NRWUlhNGYrT0lveWh3R1ZVd2l2Y3J0NGt6d3RPaTlYZ0RObkwzckR0ZDUwTWRvaElIaEpBWFpaUGUzc0NEMmltcFZMcmVpdXhYS3I1b2lZT1ErYWxUNkRuRnNOeGJtREF2b05wNi93RWlpZEJTTVozaUZCODdnaHh0LzArU1V6TWFmMDFGWFlGU2xVYkZPbWtvdjExSktQcHRCR1JQU09ublRpUWRieVY3YUZ1Z1dpcW9VSE80bFI5QjdJRW1oL3NvQ3E3dmpHYTJEdENZQklQNlh6YmppUUJKOEVmK0x0cTlWUDkrRDlpYzVtQSs5VjcvSTZrVFVaNndEZ3R3N2wxRW5jekIwc3Y5TlpSbEJGbEtRd3R0TVhmMkJmOTlveHphVjYzYVhvYTJibDYwbGtSU2loOVBkUEd2MUdLcXB5ckhrYWhkamt0b3NBVnd6dGxwcXU3WTRsOVh3OEdvTElpT3pvaVVYdlpJS01nZmNrajBmeE1pS0JFL2gydzErSm1GR0lKWkUzZlBZbXVCdVF3TzVDakZtaHhKbFRKZFBFY2srYURBODNjWEd4YXZYa3NoZ3FobWZsQjBjL3pudGRROVlMU3h3WkhsSmhQVzhNZ1hZNzFTUmNRV2tTK1ZZSEY1UG5TcGswa3FxWUt3UnVJU0xLdGJjNGFtMmVqa0ZncXJkSEJ3ZSs2N3drREZjQmxBbmg5aXFBZHJJZHJIRFljRnViNWkvaElqSXNvVGc2VnFTSU5oYUxpb24rcEZPZFYwTWVJT3ZremdyZHc2YXlFSFdQYkRtdXZxWG4zdzJGYW1nYWVDZjkrcnY4YkVLNG9qUkV4eE8vT2FubTlZZkVWQnBZZTV6TXA2d084d2hSYjltM3J6MGRoSWJrK21saEhGc1kvUnJwNDBYdGtZNVZvN1FJWnNZSGJWZXBFL0tvcGtOMFYrazVSMmJnWFM2RTdkME5ZM0NEUlEzeW9QSUVwY1pPLzMvMlFybUlZek5RcHI2L3NZSWNlRElEOGVWc1ZGZHRGakdMdWdMRGxOR2VlUVdQSTQ3bEZiN3NuVnZNWDQyN05ESGZHb0FhbnVjbUhFSWVxenQzcjdFR2Y0UDBYT09DWEN1cGFONjZ0bHJuSE9oMmRkaDhTM1lscFdURkI2ME44bFBXZTFaK2UwUnl3OHV1bE5VMDl1OUp2R2t3SzJldnZBdlpweXA3OEp0djVHMUpPdUtnWmJsV0VQT3VJL1NSWEt6QlZjUDB1OFBvOFFORHVjQ25TUGt2eWlvV2xGQUZiSmNoWnZBTVphQko2aFMxMnE3NWxSbXY4MW82MENoNlJVZFZjQTlwREIyTlEyNVJnVXowMStiaEZMdnNSN01sYVdSbnVLSVYvbzZaUXZHb2N1UFhaMkV3VXJ5SUxpc1FtQWFydWFCOS9XVkY5T21OaGhPTU90dzdmZlk5Sng5YmxpUnh1KzkrNmMyWFJiSVpQTzZ3V1dTUGVEUld5TzgvK0ozZHY4UmQ3S1JWQVZDdGtUOVNhUW41NzdDUVpmKzFMNEVCbW5IZTNFMzI1M0JNa1hDVXJLam9ZN0JBRmgySmZEd1lMQnVTNXNKQTVNc204QUJuWmxURFBGV0pWRGFXamJZUlovaUhueCt6L1RzNThiaE1OYmI1L0VXYWxValZWWGV2NS8weWlYcHk1bnJNMUZsM2tOTm9PS0l5NHlYS290cmVCc21mVFB0MG9YRkFIakpNbDFDNlo5dnF6cDR4RUJCNzhlcStnbTF6WCs3OXRpdHpzM2RMMThSZjlaQkFQWkpMWDhHd2pKbVpHWVp6cHRCenNnTDBZT1BDN3pJWEJuaXpPdXRWWXQ5ejJ6YnRpVUNoWVpDTXpNd0Z5aWhKRGVGQzlZMkNzVm1MR1gwWXhGRzliRzN3WnRGN0lQWUZPVjJ4TnFZTEVLVy9UZWVtYVQyb0tGNVdkbjZ0U0VIZHVlV1lyS3U1V1ZxR3Z2NHF1VFgrK2xkcjFsbFBSaytNSW5GVFNXYk9LTXowWCsvMUFPeDZWMmJ4TWRCaUExVGtCbVFWVVFCOEFXZTdVcVhWQ01CajNFNFliZVZBMElBendESDcyOWRKTXZYK0M5UTBpUXVKR1Z2VTh0N2FwdkUyY1ZLUmJjbHNVOXBKQXpkOXZXV3A0dVdIdm1IT083c2d1OUZHb1V0RHRma3dYWWk3bEZrazNkWVRqWVo4dUh5d0xuZFRwdStmb0VTQm5WV3ZhbFlidURNbjBVM2k5NWtBemJjdzlmWCtIeTlEZFpTNlNCL3lTa21hNU5xWUM4VDZPaE5uYW0wTlNDUm5wZ2h4eStQVUpQUUg3Nk5Dc0pTOVdaYTc3eGRaWlpPQnNMRExBTGduWm5mbHNvUXpYYnZOSCtGdVZXZnRTNmxCM1BKd2ViSGV1QTRyRjdXNS84dDhqdVJneG82TjBIbloydm4rU1JaY0xaWE9MNUtkNFBMRGZ0RHFGeVlSRXpVbnMwTEM2SnJxSkw3UWxsZzRuanpiRG8rQmlrRUg3NG9iT3p6TGN5cVdmL2dERXhaajhTTTNocDBZN2dyL2F3UExNV3pGNVFCa3ExQXEvbno2TnlEc1BKNnBGbmlVNmFRK3JLU1Jpb2RyNTFXZ1g1Q0xkTHpBa2dZaDcxOS9kS29kejVYL3pDazA5ZTNUbWhLUWQwV3dweW5EK3NnY2hSeEV5SElRVUVRVEg0UHpJdWZoZ0F0MzFLaDdKbUZzWTlzL2tGRGdHL3ZRV1E3RUU2cDlTdkpsNWtNU0JrZVpCbUQ3Vkt1QjNWSTh6b1JTbHQvMHJRa0llSFlIWnM1ODZENUtDU2k1REkxMUVDNFZPQmtiSzJOQ2lUM1dTd1R0bWg1cXNJTWxQZ0RvU2k5czZkNVZzSjRQTHUwRkVaU3ZEaHJZMVhjbWxDRHVvYTlpSkk4M09WYUdsV0YwSkRTeFlCYWlqbFFYaU52ZjJRWWN1NEV1VzdUMUZEN2VaYW1pN3BzdnNnZkhKZnZ5L3l2VlNId0laWlI3SVU2ZzgzOWltQnd0MmhubWlFdnMydFZUQ1I2TmhSN0phdk9EUThwc3M2MGpiRUEveERWejYreTB3RnV5YnAveGlnYnBpblV0bDhuVWlmN0pnaHV6Wkd1aUIyREFxYWpKTFhXWk5oL2tab1BnMnR5bDZrY1pjd2k2dnAveFlQSWFEUjY3Qjdqd0YxU3BVcG5DRXdOS00rKy84Y3NzSU5kRWRGUGxybVpzbmg2NE1TZFVrWk5LZkNPS3lJUS9HbGpYaDJRVmRINmM1bFNYT05ZQzJoQmQ4OWlyTml5OElGZTNrMmVnNlFreEhEZ201Mm5PcXVnT3EyNlRYMDk5K2UyWWdmbnVCcDBhbCtIMVhQQVlITzRQNWI1TWhPSlNZV2puaFJnU3paOWN3bmIzQWtPTTdNT1g1Q1MwYld6UTFQVTF0YTFRVlljUGR4R0x1UDN2akprNVVZcjZsL0lObzZmcys1OUZOR09Gek9PcHNCeTBsRG9tVkJTVi9qZmhsa2xSY3ZyNEI2ZUNPWDd3VFVkNkxDZml4clBOVnVSRzlOVG9MNlVBaE5xMnZJdzhsK2o0Ky91OFhOSlh0a1JNQ0tmR3pyeitDWmF4YmF1MXd4clJpVVZ3Q3VQeWpMdnprdHFsOXdjZjdVSzJhb2hhT0hteG1aQW1tekM3TllUYXJ0aGpobzJFR3Z0cmdqN0tmQSttTHlueVN5UHA3OHhZN1U3UzA2Y2t1UUNwMlgrOGxWOFBFSkpmTG5rNERQUGlYUm1nU2dWTlpoUnFLUFgraVp0N1hkcUs0N280QzlLeDhOTU1NUHJ4UUUwN21TKzB5WjNVdFFkSGpSQ1lrVVl6MlhsR2RORzVkMVd0Z2dKOGFBTDZySUVVaGYrQVcrT1JZcUppVi9lWDNEc2d3a3BDazhvZ1N5YUJ2SUd0TXFQSFZwNHhBWkJQZkorSVN0M2ptZVUyL1ZOeFBEaHVuUnBkUEhmZHdlTm5pSDJpZzAwOG9JSXpyeGpodGJQdUhwK1V1ZExPdDEvSEsxMm05QktKZzNRdElPRU1IYU9GUzdLVHZWVGNmeVZETXdYNmpYekZiTzBKcGJpWFhuVk1SaURhSHlsTit2NlNBRmFIOEpkajNOa2Fla1IxczRCVDI3K01ML1JYOEtqeDRNZzRucWRlSmllSHNjd0pGZ0F2QkVUWXBLVWFHUHRFem9WOHpmMjdyMW91NzRZRjJUQncwK3dWWHlvbCsrUFllbUViaTB6Ry96eTJ3UlBGYmZWdmpkWVRKRUVKRzhyMzdIeWFxbTQvUHlHZlN3UmRveFBnc2ZwMDhRajVhUXdJNXhXOE1lajNhRUJoayt6V1hYVmpZUDdRTkdUbm03S281MmEvaWZlZ2xQb1hQY0xwaVdZYU9qU0R4S1VidnJqemN1U1pYZ3JJNU50WElZNm45eU4xWWpUajRobkIxMEFZTHFiakdmQVptVVVQMjBlRXNiODd5b2Uxb1c4ZVYyZk5xaTZDWUsvck1HdDFNU1FVRUM2cTVOWllWUXE1WmNGUTF1d2twQ1dpVTV5MXNxcUorYlRsREFjUzBFamhkcTNSTGhXdU1CaUhBb3Jqa2ZIK28wMU84a1VWeFBLalV0RHNwcTArcVFXOG8rTzRMYzREME5wc21hbUpkUHc5S09sUldabTA3ODRIRHRPY0JBN3BFY1hVSkpqWjNGT0hoZXJEQTUreEQreVFMR0F4eWNtYmlvem9KcStaZ29JeFVtMzVveW5XUjNYMjdYM3NMZnZjNjdlem1aVE5nOTB0NkJBeG9hdFZ1NzR2bUxYWEtnU3BjUDdkS2NmMkRvaFgwZml4a2dSalR5OVRIaC9PN0NCbVZZSGRDdHNHQ2J2NXJoK1pmancvSnhTL2IwSmcvZXI1WWdDMTNRZEtUNlhBWTNFYmhLTThwVFMrUjFnUWVQeTBNYm1XTjVyc3JFdHpYbmRMeGtlcTNEdXhaRE9ObUF4OFdSRVJsb1lpZ2tXYjA2cDFPNWgrTS93ZklOSW1TRWhoSkV1S0ZibWxZVTBReFVvY0VvMTQxbk9ZTmh6UWViSjRORUZBVGhHTWI2ZDl1QWRyTmRoaWk5cVF5Qk9qMWdCY2NyQTJxcGdKZVAvWXI0N0hONEtoMDRQK2VZV0pIZ3U3ckVqM0tHWDVRV3ZUNEk1SW03WVYzRitod1Urdm5YWS81dE9KNTdLc1pSTCtqWHpDeXRhdXEvekZ3M2RrZHhNNU81NjY1bFhPUnl5M0VaNnRYejhza3I4NUpkbE4xWmJvRU4rNThJbU42ekl4NDY0L3dzVlhCeHFxejIzUnUvZlBLT3JIQjRPWFAvRlVRdUFpOXYwcGdlYjhQOSs3TTlmZjN1WXpmdjdJQTBwcmlyWHJzWm1Kc0JoS3pwbCtubFNncmExZ1ZKdjZRRTBGUktIaDNRU013TlNVRXlKU3FyczFsa0lwcnVrRDhnK0g5T28zbGRvY3pSOXZsOUhlOUlsbGxOMEY4dU9MdzFsQ0ljNmRadWovWUpXcC8yYUV4VFJvazZxM1QxUnQyMUlscXBVNTNUbU5OckJHbndjUDJBYzVKMnFKMEFsQTFYR2V0b0JwcXV4dXh0WXRkUC9DMmk5ZDlWdk1ZbkxBZlpyNzZENzFwSW1mdUNEVjArdUVJaHFkcEV1YUFHUDZ3ai9WRitPSmhucjFkQjFGbE9NbXlWZDNSamxOMGF1M2pZM1VWejB4cW5ZNDN2UUc3L2YrV2NNSThzU3VPL3A3ajR5aW13TXRnOUR4QTRmMENWZVNtQWRZKzNLc3dSV1NwaElFSGZvNFBhc29jU2RWdFd6c2dRZ2VZeGRIekZKM2FjRkZXK2VlUFBGeUxKVS9ZVjlBWXE5YWlCeFR1RndSa0NiYmw1TUdJRGxYdVRPU2taem1id0gxZWU4TlBBcnd4TC9wZ2ExN3JsZ2JGQ3grWlBpOHdMa2NFSGozN25ibUZVVHNMOEpyMFAyQjBhRlB4YnNIUTFsa3ROOU16cW5ZV2RnT2t5WGRqVjZkZVFVS0pPUmJrR3hCdHpQckxPdFc1T3BBU2tYT0lPR3RmRzV6UmIxbzV0cXFuRmxvR3ZvbU1mZVIySWRtQ1lWTmM2VXY0SjRISzc1dmRwN2xPSmNlRHptK3RoSHI1RC9mSWp4RStva25TU2NBYXJlZ3QrUWNwL1ZrVGQ2OEJMRkF4MG9JZmlZbTg3aWEwTTBMdGc1OEUxck54Q09PT0drUjd6SzY4Z2g5V3BMQ0l5YS9MZEtlNm1yVjBYbzVwSTJnOUplaDFEUHlhUWdwTXFTT1VPSGM2WlV0aDdmNnN6TldEUEE3TzU1WkNuSFdWT3IyNFIzWlh1WHROeDRna2lmWW1VMHo0QU05TnNiTzNsWFFyb2RseEFKNy9vdXpOV1BPK2xuM0F6QU14b2pxKzdpOWNVTTF4NW4zT2hIRm1WTVdiQ3hadjk2Qnpza1JSV2wzYnVaQ0M3eGhDbVJDL0U5NUNzNVlJcE5ITzl6a2gxa3EydTF1akZ3cklzK0hLZDd3eUlIeGVaVzFTVTNneHc1QTFGY3NtbUppR3RTdDhBWGh6K2R6dFJRbDV4NUxUQzVnWG84YnZTNGpiUTR6d2JJQlE0YzdEcTBOTmo5RzhHV3dqck1FMEhocWhFaHE1cXRJYmYyaTJDVkxWc09xMHIxQ1MzSThlemc3Tk1MMkFReDJicjFveEZKK2o4bGNKL0FNYkFwK2lhREZTVm0yTFUxOWZvNUFLSTk2TmlROWdqSitZTTQxZFd1UnprY3krdkIrQVZJcmxMTkp2cXBTdXdDdHZ1MXVrOXpVTTlES3VZaXRQeVFnYW9IVm04b2xsTk9RcWg2c3IzVjU2Z2dzL1lSZnRmaThId2lyYjRhc3ZqR2tiV2dveTZrS2xUekc2YU9ROFlmSGN2ZDBBZlk2emExNEZFRzBMTmQwRnkrYStSUXpQK08yVzdiV1dOc21oZTRKSlNQY08zdkZxZjUrbGRqbUxCc1ltWmpmNE1CNU9VVmhXVDlnWmNTemFxUVJqbUFiNk1VMEp1VHpsY3NUbXd4N1Azc2RpemIxYzErV3ZqM045eGUrL0M4dzlDa01MSDhQODRyUlBZN0RleUhsZlVndW1ZRi8xYmluNFQvelQraGVkazFTY0gyRDUwQ3N0aXRESXJ6c0pWY0ZpVGhxZi9WU1ZmSHRKSkJPOHphdHpUbU1EM0RwTGNmYjU0WjdhVFFpY0VqeW5oU2NJd3JDbWRVeXRZZG90czNkeHBRZnFDbHFzY3lRMXJCUU5iRW1lSkJ5RDh0S1VKM2RoalJsVHZvQm1tWUc4SVhSWERHZllMZjhtdHp5Y1dqOVAvTm5hSHgxemRudmxSc0t2Z0M2dVhXWHJuQmR0VGlsYlprWHhXL254NHg1ZkNvb1JMNlkzYmIydWJSY1pPZ2VlRmRVZS9WdjBmNkVTaUNacVpudnRDdFBmME1mR1phT1k5NTRYdmNmN0lNK1hwandpMmdna2FLeE1SMXhiMXpiWG5iTFh1Rm56bUQ0Z3lOVk14dk0rTnloM0lyN3VXV0kxRk5JSjJBdHprb0hQNzA1VUJTQlVrTDRJNGJNc1dTV2VuZTNIbGtWRjlxSXAzUVphQTEyeTFtbjFwbWRhQnFPbHU4NG5WbzIvVnpVY1ZCaDFsSDhhMWoxSGFOTDVFTGFnZE1CMy9LbFhHYks1MDJzTlRkcWZabjY4STJpZm56UzI3Y0xzcWxBMW0vMXo3Q2JiUk10Mldkb3N3c3JMSFBDd0JUVVZYVHB2THdOMlhndW42OG10ZmFDMWpiR0hUb0NQRkpaRlNaUy9ENkpWYjVCSkkvcnZhMUNsVzVhU1hla0M1Z21sSEQzaisrTHFST2lrNlRRSHFyd2s1enpWNk1OV3VsajNta24vMGJCRXZyekhKTjRsVlVDT3ljZTVNRlNnT0pUanIxb21ScURlYzJpYzJ0UWd6VEduUkl2SWQ0V0RtK1pWaU5OeHdTRjh2NDRaN2xwb2pvUnZSb0tNcnVISnorMFNkUXRhK1JPTGF3MkFPbEEzV0xQOXNyamtqbCtsSDZqL09IYWw1R3k1M2RDeEE5azVyTEJ0cG85U3U3MHZuUEYwQ0IrRWdXbEdKQlErQm9EMXJVZ0ZxekNpdFdhT1dWTnhUd0RBQWJ3M0x5dTVkWWZwNStnRFc2OGVJNng1MHdiUW4vdHNKZldvem1EeE55VUgxejJXZUpBVHdxSm5yRmI2OUFaT0R5K1pQOGtuQjFNYnJaUFRvUTF4TEpNdFIyUnNOTGlwSm9pNlA0Z0QrRG1FTC8wZXBVS05xcHUyY2tuUmtBWmh1V0RjYjlTTm1jdXFQME11UjBOQ1FhbjJpQ0FNV0tOVEQrdGR6eE9PZ3dhZHlYWVNESlhjajE4RlE4UXE3Rm5yazZ3dmFLTkd6Z1FvY2VBREczR0dCRFFIRTJycFU4dm9lOTE3T3lteVhJcXNOcnZSN2EzWEo4aGhtbnR2NzNRTlp0T1hTVmdXbGNZYUg3enoySTJLazFCNk10T3JNZzdZOW5lMlFGYllQWU5oZGxnSGtyczlOZGQyKzFOaWJkL2wvV25ZSmdoRVowV2VublAyaEh4RWFPcWg3STd4WWdONXdMVWpLTWtTSGc0dkJILzhiZ1dkR0VqTVovU0F2Tm1Oa1FZU1M1cUIxZDB1VVo4TXllZS9HSHFYclpjVjBlU2RaamxaZzExclFycmNkZkpLaUQyTi9HaVMxWUtLQUdjbzVNdjZLSHpYMEpUWEl3WkNLN3JyMzB2NnlpaERyeXoyZVZVVnZXTnhPQW53dWxNbVozMWFuOGN3YllkTEc4RDhlMWd4NUtGU2FqdUVpK2Iyc2tDZVZtaC9yR1Joc3lNWFNQWWtLemFDSzBkSGV4L1o5aUhScjFLYU9XL3EyeWdaUENaQnVHa3dmZ3FWQ2VrOGlzTmNTMFZsT0I1QitIdjJtUnoveDZNbWU4RDBwUTBINkJXZFFHcTVoOEdicWhQRHVaMzlYU01sTklKaXlEQzdVM3M2OGkxd204VFQzb25HY2cwZXNkY0xHVldjL2tuRFM1eHh0SzNJblFsNU1RNzBSbFVKdW1wN2FvZFQzNnB5Zk1EZjJxV2VWZTlRcWtycTRzNzRPV0VJN1BSMVhpTTBoeXhuUmRhSHFaQzkrcVl4cmVtc280eEF1aU04bHBhSXBxQURPRU1zOWdYOVVIU0tRQkMzQUdJaVhIMHd3NXQwellnNkx1amZ6WjhnczJBM20yRWpGcnV3dFdiSzNCdkowL240THpVTDhlTWNJTWp0ZGVUVnM4Nkx5Y2YxUlUyV0Zmd0daZTFOdmNEMlZlTjVIQmQ5ZExtRzY2L1Uvd2tKMVJQclIrU29peDBLaVJWTlJYRW1UVnRYUDQwcGFvUDdXTHJYYWhOYldlb1ZZeXg2dTc3cTZsQ3pmVWlBVVRUNnJHdUh3OTN4T3hkRDRTSzVSWGdrSmt4RUlVWldNdlNNWVZXdEFBSXNoT1NsUVJDcFVmWHpaeVpkL0RjNWdBTnBCdnpISTM4aytYeTJVWlV4aUdqcXFDS2FaT01nK3RnMUxJUE5NSlI1SU0yYWxWYjh2YVpZUGVObC8veWlzRVJrVUt6MWxURlZMUkNSUDQyTWVXL0hCb0Q0SnlLUWdzYndoZXVTK2pmVG5aMmJzQUJyVDN0U09EUkpxNVhhNk5ZUEIwMENYVldSNlc3NFR3dlRyaE5JQ29DYm44bkpwWVp2dlNBeWkydWdneUJEbVVBeTQ5SW9YZ096SkM1RU5HNS9Md2RNeDVqcVpUVlIrZmJGWlFNdVJMcXQ3Y1JuWkFBNnE1MU8rR2hTaDRGM0o4bW50bkpHK3ZRNjVNem5jM25lbmNYRGtNeWFLZml4ZjJSSjBWK2hwSHMrTGVLSkJ6a2dPMENEWHhydXdRU0lGblp6UmxiZTZBVUVvcVNBT3djVUFadjJFeWtCclNFSjFTbU44aWZNa2NPMEZuSTNheDBoaTZhem9rRHFjL0NWMkRMUC9RSkE3Y2V5MmJQMDg5ZjBRaGRxdjRWRTJZNmRMRDRRd1ZiNCtuZGVwY3puNEZNbE9OOG9QL3hKQlZDa2JSdHQ4d1h2bnVRZXdIamVvVFI2QVRYRzdEUDlPQ1dOVklDM3JkcUM2TE84czdpK1NBRnRZc2tiUHd5RWtoQ0NwODBiWmk0WmdBdjFXV0hITUdqa1o5bzRlU3lMOEtXb1Y0Z0cxelVRMUk1MmhBSG9YZy9lbWFhY0Z2bk1DdHI4aEdsQi9ZTmhqcExTdmRjSmcwOENJN0RoUUZPeFhEb2h6TjNNMElQdVZLMGdhR3VGSmtuVDRjQjB0Qk9oc0g0NDBhRzVqZ2oxbC9Vd0c1VHNaOEh6cXJxUGFoNC9lanJCcisra2FjWk5xR1pkakZ6OTBBUXFNUzVCY201SWtkWDdMK0F4YkpLRnZDQ05sK3F0Zmhna05pa2VhZXdCNVRpVXdHR1F4OE40aElBejZBaGFOU1JJZzlUcElsTWVLcUJ3TlViQTd3dmR2bGoyWEpHY0hSRnJCeUUrZjVKWk5wYzFQZkJYQS9KSnJ3YVdSWXAvYnF0bHozdk1VYjI3UHFXNlFyVElneHY0dkFnWUpQR2Q0TmRZYTlLRzJPc0JQU29kWmZCZ01ad205VlJyTW43U1VPMk96c0lyaU5iY01lSmtQTi9IUGxIMGNKdEJGZ3NPUkVzeHIvVUxEaEhCbEZkWjdKNzRFMkk5RWlrQUF1SGJWZ29KSWtKVDMzUUhIbjNpcFcwYy9UNnJ0OU5pOFdCK0xLL05zdW1TbEJqUTJLUDJnaDJpK1BwZTNna0FqdXdSeGtEUUlQQ05hUWFQalZ2bS85QXJ0L3J6amg1MGR6VytSV0VyOVluVkh0bkFhL1ZtZEhXaXV6UVMrQ0JSMXdudENvNEl5SFhxbnFWYkhTekYvNjNKc2U0QWR2eG1ZeUpKTUxRUlpYcXpOY2laYVN6SzFUNzAyZit4VG1nQzNvKzNFTHJRZVE3OEhzUkg1VU9hWHJGdDc4N3l2aEFCQktBTHptSm9yNFl1cGpLVzlxay9xQkZqSFlwZGdjaXhWTlFmZFVneWpFY3RiUzVZRVJkQ2hRMm5waVZoclF6Y3JSOEZ6cStTUG0remJoZktCRnlDRHErQTg0b21jOHR0VHFZRk1CODRMa0lxcUtGUmtibG9pd1hvdjJOUDdmNDRCYlVZQ0VuVmxmdjZlQ3E1bXcyTEF6bXE0eEc3Zzh3WE9UdG1HbW55NDdHcGh0VzV6QmVUU3JOWUJ5aW9qZmNmdmtmSkRESlZueC9YTWhneGhCcXhEUmtFVWg2WjI5UWc0d1pCUGkvMDdtTEdoTldnanJ4YWxNZEtsRFRFSTQvMnZFek5vZVMrUDNCQnkvV2R4Q1hQcSsxZEY2M0huYTlJL1Q1K2ZoTjB0Sm44bzkvSTBBZ0Y4NFVDTXJPVG5uQU5vS05nVkNLeHVHU1BPUFdwcGl0VVlab0swaWY4clFlK2RYZ214cmcvK3JJUFFLSWF5RVBCeHQ5YkN4NjlyZ09CaE0wMTR0c3VxUmczZEJhaHc1dkxid3B6WW9oSzI0WHAvSHdEbWQ0ZGh3UEhUT2xvTS94YlhkTGhYVDFJaFVNcjhoMWhnRFByQU13R3U0RGxZOWJmN0E2djBQb1BvSkhuWTJibXlkSUFJbGFxbTNQNXVHVk45V0pJdC9Nbkd4NzZuc0piSm1YbDMvWFJBNUVEaWVhVktnMHZMZlpKbVh3L1AxVUMzVFlaNHRreWU5bThNR1NaY0VjT1MwN0dWOVA0Vnc3QW5VNHo2dFFXTWp6L1JQWDdCVkhiU3c5N1IwOTlZbzVqVzcrZEZ0T3hTbVNTeW5jOEpwSjl3dXZUS1FhYXpHMFM0MkNjenFkRmtDdk9BMzBUcldFcEVhZ0Z6aHhiNW5KMTMwclkrcjhmWGhxZWkxRzdRc1R3ek1UUXJKNjA4ZFplUWkvYjhYTmc5RmlzQk9Lc2JDWGpsSE9kVDFySFlua09wUngvWW1vN1R5bGtzN3AvSjJ6VDJucHVtNXBIRE1ja29lQ040S1ZhaDk0RTJhajlvRkNvUDA1OFk1OUxDTWRicS9ETTRFb1FwaHlhMHhuTGhDVit3OVdBY2N1MUxiNGlVN1BMOFJXQTcxMTVYd3B3Q1NHbHN0eGFRckFidDF2Q3ZzY25ZTXhmZkJjVytLT1F3WlZlcThLZFAyMWY4aEhiUkJCK1JNaFdYaDNQem56ejVWOGs5aXJwZ3lrbVVEL3p4OUwrUklYZ1QwcS8vVVRaY2R0MDhBTERLVHI0bnhTeTNVZHFZR29tRXM0bHJoWURqazJjcmdVaVMwREM0eElhZ1JDeUYzLzlNdWtoZzVMaUhuelZVbjFMRmdWdmxkeWNVYXVqMU9yNVJ0VFhPQldsczg3SXd6ZGppYlhuQTlzd2VLQmRRR0tsQ3JjKzlTdnVXQ2h4SUhmUUhNVWN5WEx3UFR6T09maTAvanBDTDV3NTZremsyeFVNRkhLRzU0WGhGbE1GdDNvS0NFUVpHSjhnZ0VGVlBpZEV3ZUVoczVqMWFPZFdCNnZwazRvUmhvalJnUzVCR0xEa1JOYktRNnNlQXFVN0JkVUdqL0sxNlducjNiM082b2JRTW1DcGZNcmhWeklvWUR5VTZHSlprMjNWNjZpNUJZTHlSSlo4S2Y5cXRLRVgvZkVrY2VCYjlOa2FKWjdSbzZ4cGRuTGVYWkhyWHZJNjUrSWlESXFhSDh1TjZaSUUySUVlQUFJelN4MWV2OEx4VVJPRVFJWnBUU1ZJYWFud2k4c202V3lHaU1rblVtS1ZLZmhDaDR2OEdmQW90a0FidVVVKytXM1pxa0F0MVlvb0RMQ3VlcGJzV2oyNndCY0FUVFBaSERMNWMveG5DbEluVzhjdlNYcmYrOThndXpTWWovZEtLZTlvbXR6bkFVOWt2VCtkYUdIbEhxdzVYUXgxZm9BcjdvVG5ISmczTkdhUEVURU93TEk2Q3lFMlQrRDlkUVJHSHgxZldUT2MvZGZpQmNCQWNtUXVDWGNNMi8zT0V6UmpQcXVOa0VlaXNFVnBRREtUOHJRREh2Q01mK3pJNUk3M3FNc0hpMDNCcnJVYVI5dWRxQkxBVFBtc2xBTWlrcHQwMzR2SFpnRHMxTm01TDl1SjcyT0tDYWtsRHl1NFMydGxYQXI5aFJFVHlLSS9JcG4ybGZ4bjZ3cjdVSGFid0FZUDM5VjR3dnVYbXhGQ1Z1bGI5MVhVdnoyVmxLZzNjUnBua2pLOVpJbW11UWUzZXdsZkdXZWFOa2NFOVVxUWsxS3ZxVksvZmMvM045WnY0bStOd3pVWG1DUEV1bUpkeUtVU2VaOGNMUmlNa241T0lvMkhjWkVYY3FVM1I2TVJZb3d1WGg2QjNXYUl2Ty9uWVM5S1NEb2paMUQxNVVTK3ppdlRaRHc3UFErc3JOckVyalZxMXVLMDZzZENIVzFuNmFuZjZSVk5YbTRaQ2FxT0FsbmtHU1NpdVB5b0t1WUlTVGFSOWF5K2RSNlJvM0tiNHlWRklJbmc0VnczWDk5ZjFRRDJWRG1kR2dZR2Yya1N0YjlMZy9Dd3pYdW1RSzlIa0Zac1hTVUgvTVUxSzJ2QjFRSlFiZDN2aVJ5aytTT3pRT3FZRGZ3cDRnemlGeW1tVFMvcTArUFViRTZONzBEVkk2U0s0QmgwdVBKZlZ3bkhMdWJ5K0lwdTBqdFdJZ0lsaUJGOU0rcnBncS9QQnZPN1BXRHFjNVlVWm5YcG5IZEp5N3Z5SDRlSFBBOFdoUTgwUjdyd3lBNHZlUm5ZTkhCcU9nWWdDbE9QQnBHSEVvZU4yWUs3MHh5VkdVaEh4dUJRc1EvZHpZQzFzVjZQSlo1a0ozS2orQ2kzVk55aWFZZlVLNU1ML05tbjh0NXZndEg0R2V6Q29PNEJXcVVLeFFZOVI0eHAxMXpTK1hoQTdRZkpVR1BGVFNaWVhJQWxYQjNzcGlQbk9yMFc0UGRIRzNzNmtvOXE1RW9rbXc0aStUcU92TUQ1SmJWR1dtS2hyNjNKYXM5SW5ZaHUvRlh4b0hXQ3AzdGlmKzl5cEtNZXUvMHhreTYzTHBCNnN1SW8vMVg2T3JwYWE1VHRMUGQ1d0dWcEN6bnR5S0FVdzBjeEV3aVQ5aXVwMHFhOFFMOVlNZFpZdm82WG9wRHVNMm9LSjlRVGlIRU9uRFhWdEplT0RPNi90aEtyclJwL2RDWDdEQzE0RVNHZW0xOTk5Vnp5ZjRqWlUwOW0rejVLVSt2N2tQTklkSjI4U1o0dWZtMnZxVXduZlpBZ0FVTWJxRFU2QklNeTcrN240ZlBKaVBZbE5tYWRSYVh1YjgvclBQK05mTWFGbXpmemFRbWdmb2pCR0tIa3NsY0M0b3dBTkxJU1R4N210dnRpOG9Tc1h2NWthUy9pSkREbEZ3SGtGUEZGRllrY1ErdytYWUlZQUk2WXdURjg0My9OWUNoVy85RDZkTkRHaE4ybTN6eDJjVm9jMllLZFhvU1NQRWUvOFU3ZG1wZ3hZMDhqQkgwMlBuN1REYkw4MGNXQnlxSWhxUXRzcWt4bDRuOGlyWWIydVJxNlRPU0FVOWVzMldLNmoyRGYxTVI3clJRM21DTW5xSG95VVcwaWxJek9mT3pOY0tjYU5pUUF0Qy9BZXZqMUxQK0Z6M29KdWQ3V0w3UjB4di9hYWVGR0J5V0E2K1N6bWZCVklSam1sdGJzYVlibUFEcE5VVVNTQ254RUtjVFB3OHRybThjY2ZIWmd0MzlzYUV1WjYzb3JwUjhXQjA4QUdpcjJyVE9BM3ZWV3R2Ry9wOWRXYUdpUVZqUWtGQ2o5WmJJYUhOOUF4NnlHT3pkdEova3A4RUE3Zm9LK3lmbFhGdS9PTmZCZHBmVUJMa3JiUU5hQjljanlBMXNRdXd4SUZtaVp0TGV0aTVQUW16b0Z2ekZObVg3TTZIQVoyalBkVGIrbnV3YkYvQUZCL25OUHRZOEFqOFJYM1MwdC9xM0piRVNNT0ZBU05RcUlqcFNUSGdLUEdPalRYcis2bGxqQkFBbVQwVnBwWVZHQTkvMFNGYlFYRlRQQ2dScmpMczhFU0VWbWpDRkd1SjQ3dzMwUzdFT3YxenpaM0tSWUdtWUw0Q3VsU1M1cVlBSUJGNlJjU25VUDJnNlpMRVAySmZkQStCZUtZdU5TNEJiNHAvc0dlVWFhZjIrZ1JTSUkwamo3dGhuMXdjVU9LV1cvREVtYWlueGRzenV5NEw3M0p2WnhUM0lqaEJSVW5OVXdiL3BTaGJqVTV6ckxDUk5LeWtVK0JCYWt3SzE4UWttVjk3VzlGck83OGpFVDJ4aUhjZFNDV0pTc1NFU0N5OUN0SVZJSHNJZHlOYUZ4WVJkckp0akxxR3JpL3gwdTdXZ0tyQWxHUXhqWGoyR0x5ZGM5YW5CRllTZm0waEJXbHBDelJ4dElmNURocE5OWmEyQlZsNE1tK1ErZzlVQ1FZV296S0NCWDNsU2VQWTlEZzRTZEdzR01GWUZ1Z2J5a3ArR0pGSXB4TjdZKys1a2RvMXZpeUdGR0NpZVk2Z25GTFN5eVZ6YWZsamF5S2NjTHRQY1dTaE9NaC9iQWh2MmQwKzJ4djl4QkhKSkM2SXBVVEJ0aTVJTUJGc0lkS2dHL2M1ZTh2ZFdUbEx2WDRDdHVNOE9nd0Y4VjByak5nSzJONVdZd3c3SmNSZmpPRmNlVFZ1R2dTNUNLU1dQU051RHRvUTJZMVdQSzNIVlYwdXRUeWllVlQyVUVhRmhqajJSa2w0aWV5dkVLWm1QQ1N2UDUwK1JmRFRFdW1xY3hnM081cDRZcEJTVFhTaTQ4NC9uUzhsbE9obWFSaFdFZGx6VDBnYS9wZG5ITFBhUlFKckc0RW1KNnFSN3g4TFAzN1pFUmlqRlU1N1llMWxXMnRHZlhRVG5UbjZPM0Z1cXYzQkU2K3hlM3BNVW4rdTFMb2prN0VZUlI1TVFzdWRkZUk4cTRxaDNpTlF6RlV6NVhRMmo1T1NQTzB1UjRNL0FUdUp0R2JVb3I3UjRhSzNuSXIrRHpzVjQ4R2RxaUsvbjQvUGxHd3lZMzJUTmR5QTFjMnM3UER1eld3YlozZ2tQc013TytTT0NIYVZHaGUrbVdNelpoS2FQcUp0a25zY1lVeGo0bkhhalJzVXRxc0VuQkZDQlhrckxJN1NwQmpiNk1pbXpSVUJLNkdhYk1FQTFybnl3emp1VENPbEV0dGpsZWlvSDd6dXNXcFdTK292NjFQMFhWRUJqeWNSdlUyRUtXYnpLNUo3UWhPRm16TFg3NW1Ga0toSzJ1S2dvMmE0WUVaZ3F4ZG9CeTFtcElPV1VpR043cWE4dFc5RnlhU256K3dHMHp6bDliTjR1Ym42aytlY01aeEJyaFhQOHRKbWp2RXNrZmVsWWZFOGxPaGhTaDlZbzQvaE9kTEtIRzlrS1lEQlY5QzdmSU9UTE43QklGNDI2YVZ4OVZnSjNlbUNzSFNNY0NzUzRHRUpPTGFnSEhzbVp4MXFpWEdmRDlUNk1SVCtqUFdGNTRTeW1kZjVlK016Q3ZQRGV3YW1uUjVCakczN1pPNG5oazdBL0cyNjNiWWxxdXBSMURxMW4ySUNvRUtzeE43cVlnd3hTRkMwa09iMWxNYmV5Mjc3ZzRoamEyMWlTaTc0ZHljUkxGMkZnb0twWlA4Wkh4elowYnFwa0xYMHk1cXNEMHFLeUlDSjhQNkJ4bGxuQkJNTmRuVUhhUUJKYlAyMEd5anpIbytwS1ZrNHF2TU14TldiMXZFK1UydCs3ajk2V3czUWtKMjlXK2VNMnFDNEZydTc3YjdNbEloaTdpQnUyOCtRVEFWTnhsMFdscHFqTktLNVBsTkZaSmRyQ2lEWTJ1SjgxQ0YzMjJkdFp0Wkh1R05Gd3Y4VVg4K3N3ZTByQytMeTdhSDFmTGFXNlZjd0ZwZmZUVlo4aFIzR2MvMDhWTWZUUkJkVk5BM2J2VnhYLzkvQVF5eU9kRGV5MjJWZDlPczcrelhuaGlKL0xib1Z6SFF4NVJUS2pvSDlxRk9ubE9ZNStXL0RPSFdiUDRocUc5VWJrQ2Y4YjhOeUxHMGoxVWhzRDh6OWNjN0p4WldoSXJicmY4Z212Y2pyLzhrbDVuTHhjMmZHR2l3SnQxSDJ5WW12Q2tjaG9IR240WnVDNTNDNlh1cGpsOVk0bEpaRi9oaHp0VFY4Q0pIRGUzQS9qUjlOamZBRlAzVlZ5Q0NLdmN6YmpWTFpZc0ZsTVl3SVZLVVIyWlhwYVZoQmNncURqOFZWcnFmZ2xDV1FQdnpyRmtKcG91alBzSDhCVU83K2hCVi8xMlFVaHJ5ZjlGYlZhbXN3V3FsSlNnamM4Z3E1TC8rZVN4NS9kam1iR0hSMmZ5b1FHR2Nnc1hXSVdrYjBmWThyWmlWOWE1dmpmUG1CRlFESE4zZFZEa1p2bnU4dG9JMlhwR0MrdmpyTGVhaHgzZ1FxME5BMGNBVHBWNGkvbUFUL3cvYjUxWHZGVEN0N2p4TGwvOFBwSnVwaVQxN2Q1RVdWWEIwRyt3Z3A4QWFNcHZKSnM4N1RmR1dzRWdGYVExRFZMTGRib09mb0l0U2EzUWEzOUFvTy8xVVdJb0lYU2dOUTEwQWFpcm9QL094bE9vd0hGeHkvRU5NOG5EZ3dpUk9RQUdhQ0p1L3ZtSWFNc1lVUCs1V28xd1dES0UzdE1OcW02aUFqYURuZzdCOEw3SmpDNStKRmI5MnBtd0lpamJ4WEdkQTNVMkFEdkE1a3BQZnhsWloyc3FIbkdqZTQ3MStzTDhlU0RvVHJ0eG1RNVlHZEoxMEQ5WXhRblJHSlUzVjFQbmx6RHpkU29ORkZUYm9XQzl5NGg1Uk5OKytlb2M5RWZab0FWR09OVzZOeVBuMTRmSzF5VFpDbkVOY1MwbXpkTmF6ek5ydkVsWTRYYWk1VWMzcDF4TXhCR0RIT0Q3ZmVEdVU4UlNUcTk4Y1pKSjVXdnVpWXpUNCs0UzNzdWM0bFpGUGhiN04zYVR4TkJkaWRKYnJtdU1EWG80OFcxS2dybllSNnV5dUxWR2J5dmZoR1ZGcVVzdDJ6d0l4REw3U1pQcll1NEZOS25jbmVVMGdiVlNIcldOR2xOMHNialVlVHdPNjU5eGo1dnVpR0N0UVFLMFJpemg2eXRTN0RYOFBmQ2Q4anJwT2Uxd0R2OEF0cmkwNVdaS01HNDlyaWR3OWo3bzJWdkw1UGxIZkk1a0w0SnZybkxZS3dPaktBM1p0cm1jMXg3TU1hRmNMT1lFcmRNTXUzSzJEYk1rRDFjbTk4UEdqVlJGVDQxRDZpUjc4ckQwaUNudHNVd21jSGthR21FOG9nT0xqUzFkeStqUHRCd0dubFZva1B4U1ZrbVJJbEw3NVVOM3hkYmtMQTdjcWVxeHVBa3h3cUN0L3B3Z2I1cEdQYy8rQWdZVzc2NmdjeFFCRVBhTHZtTm5zYmwxbTg1TkVLblIwd09vZGw5V1N2NWJQTmVINWZqT2NwN1RQYktxSlVwdy9uOHY3Q1JERDdYVGVGYzJqeTdpWHVjN0dnc1JFYjYwNWtXSEhPc3V3UGx4alpaYVY5VFJSOXRtR3plbm0xQzBPQjBqL0FoK3Z3MU1VNm96SnNJZ2FwekVrNHlQeEpFZHM3Y2JFOURiaklvUldLY3pseWIwcElhWFBNT1lXVk9sSHNlQUVUS3NOYmg2ekZCV05sVDE1eHpwc1g5aGpwb0Vmb3dKNjZRV1NIRndJcEsxb1FpajExZk9HbGRKWWJIUG9GKzhmY0FjSXpiTUZicUZ2NzB5SFVqNW5wQUEyWUQ1WWViMWk1SGkwRGxzTHZMc3ZBZ1Q5NmJVZlBpcXB4YlI0YzV4cERxc01TNkNhZm9qRjlUMUFVenUvc3U2cTI1ZWVHbU50UmdPdXZrTEl4QmJZaldvNEJ1N0M2OXU4aytvNUJBNkhoMFQxTkpzdHVzS2MwWmdyaGQzaG05NERxSnpONXV5VHVjcCtERUVwVFFrVm9KMzA4UThvUytrc2N4a2hEUHJjZi9IV0JKSVhYb3UvSXV4QVoyL3djNGNUcGVhazJPNklhSFZrK051UzZJUmI5ZjcxYnl5TGVMY0o2bk9xbEZrWDhjRnFTRUhZVzBpTDFLRWN0T0tNR0hPMzJlbUErOElneG1CQmhZNVRpM0UxR3RBZUpiakwvZ0F1VjM1MFFhVlhud0poQ2N2QXA2QnNIV1grd3ZHL3hmaUo2WHptUHJRaGNuRnJtN2Q2KzE5bElTMWxwd2F6WUh5dUgrTXNpQzFOUHFFa09UTlh6WmtJSW9QUDk2dllEWU1MeDNIbUVVY1hwSFczRG1YWmZ3ZmpzV1JoQzRkbnllak15dFVaME1iZ2FmRUtQdGlzT1ZnUFdyRGJjRlJTVklocmN0QTlZTGpmcnhKMGhiTWpVcXp2TU02Y0dwY0prQWFUNGdMT2s2NWZPbU43Qm4yS1NEcWFFZ0ZJb3IzVndrYmtpREhNTk5UTVVQVkc1Qm9aWno4UzFFbXFzSWNURG93cjA2bmNUUTBLTHdsSmRkWDIreHA4c1lCRzJBZGsxcTc3S1JjaVIxeVVrd01kelkyK0F3QURPN0hhMlVDY2toNzJQcHArbUtGWmd2OUFERXYvRGlJbEJ5VFdycnZGQ0NPVUxab0JMLzd6TjBLSDdGRmNWR3llcERqNERMcS9SMWVqbnl1MXV4QXNGcUJydVM4SXB4emRONyt1M3RVWlA1QmUzSUZtUnM0ZjkvTGRJMVIrMGdPSWJzdERSRm1WSlJKSi9qZ3g3dFJYa3FGTEdNK1VnUndsRWZjVjVua1dzMGJaeWJQazZYUkdpYjZ6MmlEa0tUeVIzRjhZTnd2L1ZJSXB6aEhpOW5zWUFTNVhzRnB0OWczSjJOalZMSkhSMUJ2YjFlVFJVMFJUbDVQcXdnZDR5dmo1UTVmR1dtaTNhYU9ZaTNLRFM0anNZQzZWb0lsaVh2NGI4VjFTZU8xVjFRRW9HNlNtNzlyZjJGNndNczhSZHF0aktDWmd5MTdXeE4zV1FrM0NaYndpMFA2ZXVZcEVxRkVtTG5iNG9xTENmM0VqeVR5eVhKdkpadXdFZmhGZC95VCtFN0RnUVkvcCtTUXFaU2lSY1p5d3BkK1dRRTNpVWVnOUo0VmxGSEYxclR2OGdpbTQrTWJ6MzBQYnVtd1N5RVRWcFYwSXQ0WDcrZHdkOXN2dE5SejBRbzhUajJidnFMdXBaWXUrcktYM0JRbXhwdFFuUkVObTI1MDJWcS9yYi9UNHJXN0pxdE0vYVZmR09Vbkt2VitaWjVwaEY1NEN1RjFjOGx4UFczSXFVMldlS0psVXMxZ2l4OWpEd0JKM0JlbXVCUFVRR3pBanpFMmdhOTZGYVJNc2VCTzdTSWFKcit0SnN3cnBtczBRdGdPZHZPU0tMK013U3dNbm5BV0pzb3VLcTlmeDBDUXowRThrTTFRa0RidFNtWjZlMTZhUFhRMEFCb0dkZUp0VXIydnhneDFmbTZEY1F0UzUvMlBxY29NUWVXVWcrbmRwY0R2QmdQM2ZGcHp1MkFPQThONG9zVC91TmJuYU02bnZmbXI2aEpadjRkc1QycHprdU9sbmdma0IzZ2RlUm02enkzby9YcUppcWJzUXk4WVkvU1l3YmVRSXI2aVI3eXQ0TFRyeHJCWG55R0Rib1dCd3VnNVppUXlncWtRMWp3cGZPYnRteG45VVF2YW1NeitZbXQ0cFJob0VGZUlKeWRWTUpCc2NYOVZiM21MWUwzMDlwWGV0UlRjdlc4TEorYmZUckhhZ1Q5SDlTM1hsVlpoZmRydER6Y2xUMlFEQm5Gb2p5RlEzM3BuRnJaZE80L2RkMmgvZVRvWFIrK29CdkFIOEpDTzhlSVhtMWJHcVppczBBc2JIYjByTDVCeWNPNUNCbC9ncHFGOE9YWHdkQ2lEeGE3dWIwRW9TYStDMVI1U3k2Z3FkS3c4QUZLaFhHb3VFVFc3TUNTZUZhR1FRdzU0SFFTZjZpT3drdzVBRkNsMEpXN3VuQk5IelRjNzkyMDhsNW1obFNMam1wT1VyRTlESFl2ZVgySnBxN3JvcURUVVZUWCtxZUwyLzh2NS92SXRJQ1dyMW1sN0YwNGs4VXlSMXp3d0s3UTBLSFZRYXJjbUdGaTVCVm5mTWIvRVZpQkZGcXQxWlQyZVYrK2U1TlBjeVNJa2dQM09OckxYeFJ4c3FybTlaWUM5V1Y3Z1liL0FUd2tzM281SmJzbW50czVvNWJkS21PeFRpaWRCdG5GUWdXN3VTcHVSZE51TllYYW1ZdlIrRTh4WGgyUXFRQXVRNWZsZTEzSHVDM2JXcHErZDVtNWVpQ1BSTFZmZVpVQlpud1RFTHRaajFNNlQ5ZUJsaWcvVTNDWXRocUpMd1NUZUhzekNBMThXNlgwbVh3V1M5YkozdWZtN3g2Sm5LUDVJV2l6SnlCRDRKRWpCbjlyQjZTVVpMTnRQdDB0ZmtaWEI0YThERUpzcmRncjJBc3AvNzBJUnlDekZoOG9XcTd5NWdSUlFIVDRHcmt4Z1F5bXdiRjMxK3hpYVJTYlVwalQ1QTZZUkFycnlKQUZLWGRaY1RFMk5sUHhIRjQ2c2pKdmU0Sm1icVgxTE44K1RBdDR5NlFna1pqOXMvL3daeGU3MWFEaVRsc3Y5OVJrK1B2NkxRcnF0cHNBR2tMR1dsTVh4Tzc1MytPRU50d1lwd3hUNlh1eEpuQVBoZ0I4QTVOdy9tTWxXOS94RTF3dnViWmZTYU9jRGJHdC9uYUlLY3VkaEVqNWxMZ0hjMjJNZkRobTQ4Y2paS24vWVllNDdsL2RST0JrWHd6TElRUHVQbTl0M2U3MmZZVmVjalM3d3NzTWR6VkNzSXNULzVPOTdST1YxL3JkQmVVNGFxZG10TzR3b0NPZThZbkJaTjdYVUQ5TTZsaTE3MU9PcGRYcHp2RC93ZG5pemdyekY1MFBrbU82eFJEUkxzYlBacEdyUk11T0lCaWlHMWtNaUp4US9Rc1JJTXpqVFVvR2xvL09yRlU5TmFwYXhwNEFrckpDVUtqV245QVIyQzFJVnhXRjB3VVNYQTVEZWVCb0UyREF0WHhoK3FnNVA4S1VCSitjT1VWLzlsUDl3bCsycFN4M0ZwWWZwdkxvTmdUSFFBSGdsNU5XbzRtb2ZIVzBTRmkrM0ZDL2R0L21HVlhiSS9UQ0MxbHR0bWhYMm9oV2pHRWkzNC9MV3FXWE1zWDh4aGpicThDWmFodzdZMitZVzVGdmcwU2NHRDBCT3hvNzdGRDF3MWxwQ0RYNE9MYk1aQzRJNldOdUhLblFZNnZIN2plRzJOcnBWcEFZWUJyajVvYzd2cEw4TXB3U2pGYmY3Rm1uOFpwSjBwTWRyN2ozMmF1bXloS1YvM0lLRDI4RUhjV2Nrank1K3R3Y0ZjNkRtZUtMZVpoS0pVNE5JVzVNNHlhc2VHL05QWDNPcTdQbm5USFFiWlRMaDEzS09ReUx1SURWMk0rOXVRa0RtTG1nWithem4zODZkYXB4bUZ2RGZMWXhxbDh1WmUvblJuWU9HMk1PaHBGblRybU45UDVob0IybC9FZmxlT2FUT0JWNms0ekZrR2c3ZkhtczN2OEpIb21DU1QyalNudTg3SnAzTnhldmpRRys3YWxvdEpqcDZvemczU2lPdWw3SDIrRDJwUWJ6RVFlNVpwdG5ZdHNBSTBiaWtybTFURGRYRWZ0TXlhU0RENVRWZklLNENBOTJMeHpCRzlsa2ttSGVuMzUzV29sb3FCeVNGdUcrZHFWZkZENzJlVHVJZWVaWStoK2p3ZVBrK3ExT0RDWlVyZk9FNE94ajBZWmx5MzZVZlFndy93VnVEeVRjQ0ZRM280V0VJODVMeHpxcTUwUEtlb1EyN0s5aEpnR1dsbDNjSDFEbWJaY205U0wzSlV0bXVONCtCMk5HV2VWQzdhRHhrZVlkb2FZcmdlQ0F0RW5XRHFScFFMaW9TK3Z1YmpkczBQV1RvbnhXTHB0b2EzQUpoamQ1TWl1QnBxaFpLQU1qNjl6cmY0WkVqQW0zbHM4ajBrdERDTHF6MXJEd2VOeDF0OHRlazY3ZFRhVXRhQlhQSldEN0VUYmE3Y1NGU1hLd0pTUklzQXkzSmdFR3dQc1FIN0ZnaVplRDMybVpEME9POW1mTXkxRU5ja0NaQTRVQUM5TEVVdEllYzJtQ2QySGcvL1MyQ05XYVhBcVVtY3N1UHdIeDBNdzFmeUt4N29MWk9YVzZXTDY1QjBXci9GVTZ0ZWo2YlBHMnkzRklHQlI2S1NhWkRmOUtmbm0vT3B3d1BRektaZVQvMm9qcnNpT1lXOUR4djR3VTA5ZUtBSTdBMG4velZ5dUxpekpnL2JNdnRsbTRiUFYxZzZBRVpIRGQ4RWkyNm1uRDBmRG80eDMrd1N1Um44c1UwaUdsK2RGaDZubHpmNDMwZlVwdmFaMisrQTdiaGFwZGNTV3h2cWZtWERHRzNuK1VjZDBBZ2l1TmhEcCttNk40dlB5V0txV0ova1VuQ0VrTmR4V3A1bEVSVk03d1MyNllpWHptNG1JWkZ3S0pvNDVFaGhOakZJc2JodTdiRFUyaXd5RklZUG84Z09SMS9OUDhFRFpJelpSUWpIYTJuRFVtL2kxWHVqNzFPb2x6cW0wcWVGY3VaNmZVbFcra0k4VnJEdFU2aHRoQXNKOHVGL2Z1TmRkbGJ0aytBMk9pK0pIaG52QVJIUnRUUFRicHNsYlczY0NuNFAvb2djWkxlaEhXV2FqSW1jU1RpR3JmdEdmekh4OHhkMnBpWjJUQWFSVFVlNWV2RC9FejVYL0NUejhSbU5mZEZiRzAvOXJrUEp2SmJXc1hlK0pMQlBRdTBMQWx6QTVBMWV2aXVwVzNOQ1RyNUVKMU5uQ1BOeEhDTXl0UmN6Z2RxWXNxOXZuVWtqVWltdDNEaVdkNUxOdXg4RXVpMkc2SWYwRFdiNG1uSUZDcW4yU0dBZWUxZEIzR0NFTHBNUllHQisyK0RoT2xkb2xOSHdYVXkvNzNYOHJRWm0vU2wweUdZS05paHh1em4yUlYwbXQvQmh1NWJCc1M0aE5iVGRXV3h3WE15U25ja3p2dDhRbnFhalpBMVdQeEYzbmhRN1JLS01VQTY1Q2dGT0NZKzdoWXdrK2lQbEZIckNjTkd3QVBLanU1YjdkVEN6eWdXeUpzMmpVNTFwbWRCa014T3puYlRNRjlSQzBqNnVFNVB4OGlPcjVxR0dmZXhNTXg1eVNMejdOOUFzOHFlTmFvN3RraFg0QVlmZHZnY0ZleFExYUdxOTMvSGVDcTFIOVRkdENRVDBQbkN5Umx4eUZoTGRIbzFmVXJzVTBXRFBBbldSUHR2MnhhY0FmVVdYV2NZN3ZGYjlUWW9XZVU0dWJzeUhtRUh2Vk81Szg0ZUJ0UWtHa3BpTW5nV3lSclNnREJ6c3FYK0JNajBhMC9sYjBlNExneENqZ3Z6YlUvem9Zc3FoS1VhSGtVMjFLV3dLK2ZDUUIrTXB3bjdkcThYaVh6RlBLRUFPQXVsSDY2bXR1eCtoZ2s0b0ZsRURPWWs5b3FWTUtLYmx0Q25yU1NnbUx2aDhFVC9VaEZTR0ViUE55MlRub0NDeHZld2t1VUVscERjZWdpbCtKK2ZnWGRyYVBZVGVCemMvSmRaZkNwM2JDdTFmVVdSMUQyQjh0RmtvdTdmckI3RUgrWDA2eFYvakxTNEJwQUpjY1ErVTFvSk1GRXRNYjlSdlZNY0ZBWVQ0bjJTYjRPVEg0UityRGRocVBMTk5xTkNsQzUzdDhiYnE4TSs3RkJxUUlnSHNwMTVWNE43WCtxS3pVRlRSUlZhOHBKSEZuWHh6NnNRVnBBZ3pvNnh2WGw1eWhTbndWNDRJbDg5QXBFMHdUcHl0RktjaVZaamFHQTdDb2VZakNIL2xWdGpjckM2WUhpRXlVZmFqVGpEMTJ6aDhnaHJWSjBSRjFqZE01SGp0ZUlhMTh4RzFkQ1ZXZ082NXBZSlVuQ214NW4xaXlLaTVnajU5NVYyRnN3eXVpMis0QmdBMUU5TnhaRk1EeXFFckt5b0JUZ2p1OGpiWThCbDBHT0dRcHdBVnpSNXYzN2JjS2FvN0gveHFiaDVYOGpsaExGK3lIbkQycmVOL3QySDlEVHMzT0Y4TFN2VU4ydG9iL01kcWhpeHMydjBremNlQW9UL1U4MXZtbWg2ZjNMKzhKZDdZZlVncmF5M2U2b0ZGSnBNMysxVWVkY0dkQzh6ZWJOSXd5U0RnZzVMb250blZhRk0xS2FyZG1wa3luc2t4eEtrQmx2VDJjdmk5SW53L0llZDBzUEIvSjkzOGxxczlqRGV0MDVpWi9DMS9pbTBON0lscmVkaXZsVnQ2a0hxemdBbEVTSXV4MTFRRmEyNFZvZW52ZHF0NVhFZndkV1JkYTJUZTBjTnNvOVN1ajBabnZvaXNyZENoOSt6bVJNWnNBK1FuZzNzYVJFRWRZdHpseVdYSHpYTERrVDFEeURjdXJoRzFyRGs1b0F6dFpZWE5QenFWY1BCenV3RlU2akNpTHd5NlFKN25YQ29hSEhNRmN0TFZpQWRtaWpDcXBhdzdFOFRiYlU0NjBnTkZmVTdtTTgxWU10OXlhR1ZFeUlXUWtUeWNxMUpiQTNrUVpMK1ZONnhuc0lKdHVGSjR2RnNJM2xDN1dMZWZ6U0h3cFpPb01PRHFqQ0JOMXRjNEUySHExbC90MW5NS0xSRXZLZnR6aGpnWmRyNHgvTFliRGJxL0ZvUStmUDNTQTZjZGJKTmhDcWl3K2JYS1VBMFBxODhHdkNnSUJ3aXNxbkJuZ2JtNDVtcEVROG1UdzhXeHJtL0pacTgzektaTERQQnovanlaUUtkSG9tTXhnRGJua2pGTlE5UnVUSHlzVklDcVFuYkh4MHpLRFpUSVNFNTQxRkRZOHFYbksyc0NIWEtvd0lWMEFqSHAzdThsTWlqcFl0b0FTZHMxem05MmdxQjVqeWVjMzczUmlnRittVFRnMmdzbkpOcUZya2t3YzBoazlIWFFGdVprdlFjNWhSNWNpMVNKM1VCTW9Zbzl6N0lLWlhycmFKaHJhUGhvWW5mRlR6bU5RV25FQTJYY2N4NEdUMTE2WTFPcFpvTnNnQnRTVlVqSmxDR3V3WWZ5NEFVMXRuWlhFd21SSGprWDhmS1ROSWRkMUhnQkw1Y2hPNVpYdFVTam92cnFGdFhxeHJUUmhMQW9QZVVlRnYwYTE3eVdjTVU1Yy9XL0wrelBlclRJZUJjQ0dkRC9UY3ZNVFBkV1ZKeFdLQ05CaVNUOHgyY1NkUS9pdGZUL1hINDBIRVBkRUF3TE5GMTNOT1NKb1BkMHFvbkhRMjlLVnEwdFQvakFER3BTbkVWbFo2ckhjYVd6ZVEwL0RqOENlbEdRL0lweDNjcSs4dEhaQW8xU2w1SXN5d0hwTnJacW56bWF4dktCOUlsbGFtaHVpWDZKbi9ETnIyQ3k5cE1oNnYxVXdlMi9FUk9ldGxSNUcxakRud3g3TkR4S0xxOGprdTNZUkVFZzQ5YWxiT0JVclB3cU53WEwveUNuZE1oSlJoRnlwQ0ZJdGN1eFFHMmN6eGszRGVydS9JWHBrYWNNWHhnNnBpd3l3OHdiYlg1cnNEanA0QTlIMno2NVo3U0ZQWUgrWXJYOHJ2bVk1WkVNMGQ0Q0tOSHV6WGdzTURqWTdUR2hjNlM1WVFVbWt1QmMvbTI5ZUM0VUdic0R4LzdFWUFkZTV1anNQSnRoSzF4ZkVwb3haaXJHUC9aU1p5TVVGZXU0N3pzWTVnTGhkR0FVSXdXckM5NFo5R3J6dnhqcmxzTWhBRWc5dHNLUElPcjY3N0VWY0NLaHRocndmWDhMMUtpSVI5Ny9VbEZpWTltTEVxV1Baa012WjdvTHB0NFNsVU1aMEJHVVN3cjhwZmVURWVnRVI0K0dWdjkyQ2JvUXN4ZjVLSEFpNXkzcG15NVdaU2JmNjVidFcxVVFyZ1FwbENNaEdkNW9uNEp0dUFkRjhBNkE5RFc5V3RmbEpobGdDdWZzU2xZeWduRXVxQ3prNENPSk13QzlyT1FLbXRYbTJzSEVoZ0ovRklFM3d0MW5RWmtreG9UZzkrZUlUQkVsZjVDUk52a2d2L2JldGdrWWxWZlBJSE91aFBnRGdLKytpemduSExTY2M5YnpTRGpzTWF3OXdKTkxVNWcycUI1LzBqS204elY4NU4xRW1lRFhjUkdQWStnL3E3dDRYa2VObk1GTHZSVjEwU3RYdS9aL000NVg2d0t2SUNEMGhLZ1hld3BsRGtPWDIvTFkxZW5jaWN1VUFScktMNlp1WlY5ZlRCNXI1MldLdTZMZTBqMjgzT2xHRFRZbGpxbHM1T0FnNyt4SUw1SkdwRFJnOEZnMi90Q0duV0FzZlZZTHB4bFBsMGxyMlVwV2xSbUJOYWFRT1hQWng1ejVZVE94V1NiZTVZbktTWHAzaGdVcC9kN2l4aUFXRkkyUjFZZ3JqU0N3VURXWTNGbXZOZHg3SGdQMm1ILzNUSHJDdGxUNVpEYXZSNzNEZzlFUGxKSU9aNzJLTThaSEVOU0xkK3VsNW9QVi9LNlpxaCsxaHBsZFU1SVJLOG9oZ3pWa1hJMk9zWTIveC9va2NhKzZxckVVam1nV2luREZVV2V5Qng1eEQxWGJ5Sjc0ZHhpOHdHRmxGYnMyb3VIRXRPVkcrMG01WVpOWDQxbWlMWkRYWFdiN0ROT1drY3lGcjhXVm53cVZpcGg3VC9xYUNYOUV6Z0lvN2lZMlVqTVdSQTA1TWMxMVFyeDhTK3ArUjJuWWVvOEJhVmx0Z2xDWkhaelRzZ0duUnF5K29aY0NsaHR3WWU1dms3c2gxWk5aZW03ZnpnUUtwZ3M1OWlpaWFJZ1dsNDlma2VYTjFpUDFDb05NY09ldEtwU2ZVNFdZZ083aHVzY2dJdjlGV09sU1g4WTdwWllSZWxHZnFSVGFXd3FpTGNidlRlcmFjR3oreUlsR1Rydy9yd1ZBaG1CdkIrUmpDVE1QR2tpOHhEcnZHMDlIUmJDNGZ4eVRBZWQ3OE0wYjNYMzJ3dm9XY05YQVNSNkxOUzJOUGVhUXhwN3dyamt6QzVUSVdmWlpuNDlBeDROandyRGVLdjhWdzI2OElER0h5Mjl2S3owMmk1WEMycE9rRFRnS3U1YTZaOHQ0K0NuN2ZWV2h6cGt1WDBqNExIaFJiNVJxZG1zbENMK1hWcWRyc2xma3VOaHBYZ0NCcTdoWjJYS0RPeFBSVlhlNys4MzI5b3dwcEtZREo5NXRHLzV5UjU3WGVKTjNvQTkxTzJXMHNRT0I1Q09KZE9DVGlCMEdtKzhBSFZmY25qTHozbFJlK3ZYSWF6dVpwYnk0ck1ZYURiSWJBQ1pQVndwdllEMjl4ZHlGTzBJUDlqVlZvaXpzdHhZTkZON0dUZEdyZlF2OW11Q2RZcGROenVOeGtCejdtRHRvWStLa2R3Qm53WUhJQ3ZwK3hPbytmYlBqeE9lZkNTZG1ORG9GQ0M2anVmN21hcHYvaFYzWWlFUmxtRUpsZFhpZ0hCUTBzNWNJcjJXQ0xMNzF6Rkh1ZmRHejFYRjZLc2toK1R6VXBCUVR4YXNpYWZjNHZRVWJ6U2plSjI5ZE5jbjQ2MFVId1ZMc1hwM2NROTYwVlNXei9PRjVaMVpRdFdlQU1ST1dMTjlvUXliTFJRM244RitrY1RkZTk5dnpKbEVCTHEwQ296VXRtU0NxTEdGSUc0MWphS1pGYlVVajlpekJPS0ZNSzlMeU0zeXcyNkd4NE15RWlpRkUxRlhodGF4NzRVNENKa2FPYlJ4UFQ2VHhOOG9STUxrTTJOVVJpcElsUWhXSENvbHBqT1pXeitKQnE2dkV3a2h1QzhOb1ZqNVJpYmN2YlpTM0FnYkd0ZkVydTV3YngzeUpKRXlzeXVrK1BNSUl5RkV5WGpnQ1BVT2tiS2JPUUhhbi9mZEF2dVp3TGlUdXRQUTJYaVRBdnRNWGlFeEpDdDVlMVZRdmpvbVVoL0hrQUNERjU5dXZtUXRBZlZSYXltTE9kdy96Q243cm1ibnhWb2Zoc0EvRTgzZ2psR3RYelRDVVlLejRtY0JMWG9jOU9JWG5XOCs0Z1NDYlpnTERHM3duU3lSRmZFOHNNOFVZenZVb2VDeTFFY1NPRGpOVURSVFNUU0hiaWlHa3ZtTm94bVM1SFBOV3JZSTRUZUhFTmhFWmFlUjM0eHFudFUydmF0a0JHSDI4SWsxSnA1KzE4SkVES0tDR2w4RVJLdHVtR1BsdXE1RkpDT3NKaTE2QVVBZWtoY3Roa1pKQ3lsRXNnZmVlNmlTUjNMam1Va1ErMzJhZHQxbk1nZCtxOHRwM25ORnZ6Q05LUW9XWCtibTV3QjFxUzZGd1dOSHZMZ05BWnlYTEE5K1JOVElVTzFydE4rNjMxN2FGU0xwMStsTHRreWNVSk5SSTFUUVdsMGMwbXBVSGZvNDVrcWt1elBIdENwdzZmc1hCYkI1dCtXVFNEMWZubXRrOFRjV0hqRm0vcnZGbzJrc2JJVEdiVGhlbXNReDZibWxKL1c5K3c3U3ZoVHgrQ3JZL2lXcldtSW5ZdVc2RlEvRjFOUkV5ZzVRaGUzaEhOTlk4MEttNXFCSlVFeUxEZ0dHTlZ2UVpULzhaVGg3NDdQNlpiUWFGWHJ0MURSTWR2ejFrVWpsSXhKbFJNY3M1Skliemx3UzBxclpGb1VuYkVpUHRpMHFHaHZ3YWhZUjRvY1JTbWo4SUZLalFtaTlvUDNpTENkQjVsOHRBR2orTkZyZUNoTHhWMUovbW9qOExRTjNYUFREaU50TitiZUFpakhzMUp5ei9EKytlaUgvSEdsQkpZREo2QWZRYXJqVGphcll3KzlFM0I1bXI1NnV4c2ZkV09KZmZiSW8yeXp6VVQ5OWxWcDFsVmpSWFN1YlR1ZThlL3pBbzFLdTVoQ2VnZDVlQW5XcW5xUVR3U21FRjk4TlU4Z0JrUTlqWXI0UTZkMXRNNXEzYUQ4elJibjBndDZRcFRZZTc1Mi9qb1IvZmFVaE5PZ0E0RTlZdWNLQit0TkdpNC8yMmFScTh4TjVwL3JXWlBzMW1JcU5xRnFSb1RmYXZBSDc0dVlIQnlGWHdzMiswS09hcmNidzdwZ05nR25JM0dZR1Q5ejV0dzRuM2JISlRTMDdmd3IxUU9KQU5KV2R6UWhWUFVpRHQ4M21WODJ6NnJPLzA0YjRRZElkV3MyUDllMkZNRjIzVS96WW9zZGRoaEpDOE5KeHMzN2JPOE1SQXdnYlNVK3J1MHJ5VHNIUGpMdjQ4UWpmSjN4L1dLcXFzdC9YSWoyNFYraEJ6TXZXL2F5d1haVk1keVl4ZUpET1doS2d2TTljL09MLzM5S1lPazZmdjVaWmJPcGs2NXU1M2YvbmZIUDdtclBUU0IrY2FrbmxVUWx4ckJSSW02bytmWE9uRVlyNWdrQUc5d29hOE5tTmcwTStHd2NGOGVuM2NHRm5LQjFkN29QY3F5V21pR252YkErMDVWUWpyU0FSbThHZ1dCZGc2YzBzSHRLOEUrL1A3N0t2SHFuZ3hnYjRWTVRhL3JNK3lhS3FkTHJUcUN4U3ZYcWZuU1J0OGxsM0FNRkQ3Q3huYVpJMFovVHFnYkFjcDVqUzA3SlJhcjlWdDljbGNYZnRBOFhGQktsdnd0RDZEeXdtdFVNc2kzYUthWmt6MWhkSkp1ME8zTzdTV2pZSmxZNTBjVSs5MXZRM3NRdG5SZXZXWlc0QjdKUkM3WVZ0bThVelErdXNodWtkRlNkQjFZU0E3bkNZdjlOUkhPY3FNdDU4cGx3a1ZaK3JhMDNFa2JUaXkxREJnanJiL01uOUo0UzljZFFMcXVRcnNyWTdoNFZFMzVvbEJBaUIvN3BTend3c0hyajAzZExQQWdrYm1pVllJeE85VCt5eGViaUN3VzhkZlJDWU5zcCtMMS90M2RscVZONzlMWmdGZWtFeXZyMFJpVWpKcUVNcUxtNDJYWlFtSXJ4R1VFZDl1NG5yNGRrWnJsOVVvQzhkbFg5VUF2SmpreHNiTFlkdjVZNzU4enZ1aTNHUmhnQnplZEhvVnFaYkVHQnFKOWJGUUhsdlBLUzdFY1FOa2hWT2hOL1orRkw2OUVYUDJQZTZUbldzZi93MEV1aUk5RXhReXIzTGgxWlJPQ2lVLzZrQndKODhWTmdhZlRLcHhVN1kvbXIydUZ1NDFxREhHcExMZUtCa1NkeUlEUm5MclRldkx4dC82d09yVS9IOEY1TGN1dU5tL3ZRNzBlMkpZWUFXN1pyWEJOME5STExDcnV3VzlXbEQ2SDBTbUhZMmRRUXNPc0FmNHEzV0dPV3VYVkN1WjBtdlRIN0JNNjE1VnptU3ZNTDlOeGF1NnBnSHJFOHNUOWdXcnRiTm5XeWRhYTZxN01uQm45dDdPd0Vtc0VUa0NOU3VTbDlFbGE3VmVsNUFuZjh5NkhyUzlVclR1VTU1VlQ3WnFFU2EvRHhScHFqT0F1VFN4bFJMVDN2MTNVdW5hYm5GMUMvWUIyRjZCSXpEazFJejk4OENsc3o3c2tTWUNYL3lkam43SG4xNFYxYjJoZWVaYjQxc1NXR2pNbDZmdnhJV2ExZWtjdngxK2Q4anNPUjN3S1VwcHdzR29oT0RTRGdZc1k4dWhFVnYzMGlqM0ptV0ZvT1ZnS2xmbTVvZ1QzTlZ4OEdPVkpPWXRVTHV1a0V3djVLMExBM2N0UWFPWmw2NlpwQnFkSXFabkZVOTB3QkIvdC95b3ZucTJXV3oyUlJEVlJ0MnFEQlByOXRuQ0tUL29RcWR4bzZ5ckFEajBMVzAxZnZSSG8zQlVOSlBLSXZCU2xiOUY1eHN3MkoraFhvWlByUWp0MGdSWGRBTENVVzFtMnhQTlhmclZXZnNNbkVTaEZXS1QxNWd2ZjJjZlpucmo5QXo2N1BCM010MGx4UW5GTUFlRFk2dHAvUlpGOFpMOWdOeU9JUXhQaVVGZUlJUWFtMGJpU2hmOFppdFhhZFhzRnhmOFIyQlpaWkhLaXAwWVgxb0ZSTFg1aTE1UFV5c1VkbmFyVTJqS0hEb0FLTzltUEdHWU1PUDhCRmo2b0Z4UngrTVVHaVlham1tYy9WVG5hSXpNTHpuTjQ4RFVSK016b3RlbDJFUk5TQ1pNU2h6V0lITUREREFzbnd1bXNaajlaSEFnNndnK2J6QXdsWGtwZjNNZDNONGt5WEFRNUFqQ09IeXdnVG9XTWJScjhJeTJMS0JraHRKNkZZc0c3THljdHhMd0Q2dUdaLzJBeWNTdVBIcjJxeUpBdWY3KzNWenVOdmpEa0h2UWYwYnl1S3F4MCtSSElxLzg2WDJ0eExUU0dNbG4xNFJqcWZXS1g4YjhiZG53S1dabXFsOHk2T2pQRXlzazU1bytBZnpkNDNEbTRyaWZRTGc2RzhiSDcreE9FT3V4eS9wblQ2VEVZUGpCZlhhNDJVOVVTV3M4bzc2R0xKM3RhbmY5ZlNJd0FYWXlzWTZaNnZ6RjVXZ1hMZUs3SndJRGhvY2NReGhIdXVtM2dmRzdodXFNWDZlejlwSDlBbTJTc1NOaFhzMkdMSERpQnVuUG01K3phSGFLSXRiUmVYN09GNEZpL3V1MUM1ZnArZm9Sd2dmQmNpSytWYlpOKzM5aE1lTWhOYVZqRkswVnpyL0Ria0NOdjE4amVsdWx0NlhHZm12RHlNUzVkUXZpL1ZyTUU5N21iM2RXZGdtaVB1YnFKR0lmTWRKRUZQdnVyMWpESVhyWnRWMkpJN2FuM0FBWk9QSWNQODVqRFpDZXMyWUhYYmFtM2hsdSt6dUpMdHdsa1UvT3BxTmNFRWNKWXRBRGhEVks3NWZtNzMrQVhQT1hyTjNIRWljaWNIWVhZeko2MWYxZ3BDZUFMTWJDMmM2amlmQzlTZ1FXNnEzL1ZRNWxUOUVtOGNRV3AyQ1lxcGtLTFpBaHlmSU1hS01FTTFpNUs2ZFFLd21wQ2xORmdpVTdEelZ2UTE4cnRpRmFTOWUwVElTZHM4a1IwazJRZk1XQUo0NHd5SlBHQStZaUhHY25TbUE2SjYzL2ZnM3hLNTlrSjlsOU5vTFUxM2o4eEtNL2N5QU9YQ3pJY1B1ZzFWOEtOaFRaZmg0WnJOSlJRdU85enR4ejBDZERkMWUweDVVbWZKYjJ3angzdXRUWll2TjZLdlVvTU9nUlJhTmRWTVJiY0pZTjVJS1R2V2ZtZ2JaOExSSW1PU1hGWkwzZzcwU0RlRUdIeE4xVmtNandUeWhIeHBGUUJGV0Zjb2hMNEt0Y2QwQlRlb3RSN3h5dWFWbjhzUU1uMC9ZR1AxWmdNV1ZiWXordHRJUEpsOVBjZG5BNWkrQm5OdXBQams2MFpjSEFqRUhzYjRRMm9VMXBkMmVrN0w4QTFxald4bFNneHpwZVdGUHYrSjByS0lDcUk3RUNBaU4rQ3lMSmRCL1FOdnFUYm5kenhPQ05LQUJCcW5mNThmY2dqS3lkM0JUbVQrT1RYWnZPOUVDS202VlNwN1JvSnVPOTN1Q2s1UDlBblltbnNodk1samtST3NHc1pEK1duMm5BVk5JTlBaUjBON3FYM2lHeFZybDlTaFlRYlc5K29KK1NnOXdjeDlwcDNPcFErbjhWSVF0RmdlZGFHekdsc3RJcEg1Ry9RYjNEQ1VjOTJQWWhCYUYyUkh5M2hpSGdrUlV1NStXb2hlYXFLdTlaK1d0NURJTEp1UWpTVVlSY1hyRExTY0t3VDdJdFlKM3dtM0l0WEJFeEVUZW84MWtLOWRZYzV2bllVUlBra2V3WXowOGNqVHFxd24yMy9OcnJZMlR5bldWcUREa1hqTldrMm5FKzZIdkZGTElQNUJ5aU9IKzVCVHdSL1F2MEV2Z0pRUGdFREt5d0dFLyswM0Q3NnF1N0VLNVoydTV0WTI0WU5UOTVnUDJMK0d4OWJmdytYWUF4aHlPVmhCM2krZk9LcEtKVzY2YmlVRlduemhxemNtMXpjRy84S1NmdzAzdGs0N3dwaG5IMHQzc292MWUrQ2IxWEJRaFg2Q3FWM3Y5OHBrajJpZHBmTm53eE1sZ0RTMTdwS1c4K0ZOVWNBWFc2aGVhbmNHTXlMVmM2RFJ3WTZ6dHBHWHpCRFFRTlQxb25QVzRHcnhYb1V2T0JyQ000TTNvNENpbEQ2aEJKMkVPQVNHbUEzR2FqUHA4ZnFrOElFOXZZcWt5VUt3bVJZd1JzbHpya2FsemFtNDhQbkFlVDBleUV5UmtKNTg0UW90Mk1yODN4aG1LWVVNMTUxdjdZYXV0dVlYWFh4eUttWk5IeDVaOTNld0hiZUVEZjU3bW9LYm54Y0V0OVJaWlgyZkZoeTRwekxaM3pDblFtV1VUSERQV2x0QitjYTN6b1hFM3EvcXNGRGU5VXF3ZE9ZUkZ4Sm5NMHNFTXpqcFIyS0RwQWRwZkVQSkRSbVVBV3Vkc2JDZTY5SktBMmFuc2Z2eW5Md0ZhNzd1L2YxemU4T0FVSGRNb3k3a0QyUmRDYUROSHVmbWt4OWI3MXpqYldUejRQL3o1WWRWTmgzM2hZUHFyL1dPVU02a1dEQWl1OWVBeHJkKzhiT3B2UGIxcVA0a0d1NmZ0RW51Q3JwUlFHcTVhaXE1MDJQZDl4bHhiVXo5ZkVIQTRVS1hROEhQRmV3VmZ2WEtIQlRwbndkc1AyMFd0UXdGRTRydEhucHYwamxHeXZpNmh2OGVFY2Z4NFhUVUtHYmtkbVBWOG80cGd3RnE0cnpWUVptSFRjSU81SHkxdHRJR3E1OStGbVRhTXduQ01CU2NCSU9BNWxYRk4rdnlmdG5HUXhLZm45eXRsNFdSMzgvb2Y4TExFc1JYM1g2L0laSldaNHhMMEFNSUZSK1JpSEx4NVRHeVo3TDh2S05QazNIY1dYVVAzTXVlVXpOaTNmY1VYYkNEck9uYm1WVGJubGhuay9Hek1GU2RLMGFMUVpLaDZlQlhTcGY0R0x2ejBheGZHbWVvWXNhMHdETDhPNWkyYmUrVC90aTJMY05jeFhwWjVvbVlvOTJpWnFkWG9qK25yZnlTVlZVa3o5T1cwRC8wcFRuRjBnZktnekNmY3M0RGplaHRpVjNKbGxoaGtVNjRLTTJGQ2RWU29iZk5qY3k3NTFLcTh2QmJKWThYSG5GSnZjVVFDSVkvekY3bEJPbmlxY1Rnem1iVjZTZlMwb2tjMkh4TE55WU1YMlkrdnlLL3VWWER6bDJVUjdjVllzdHNjd2F2RXhiSkIwdWhkT2VyRmlHZ1BjWlc2YWhFaGg4b0hsRUMyWnNCTmNvT3ZTSG5xa3Z1UU5xMnovR2dScHdCT2N0Yk0vSnJIKzZXL2ttMkd6dUFTNEI5bS8vVDkrME9lNUNwbERJZkRyd3o5NXFJVXVaYnk0aVo3d24rOGk0dDJSNDdQN2R1aU9jdXFkN1NaTDVCNXIrZ1pocVNWNXA1VjA3SFlWTmZmaldiM1ArY0x5S2Q3UmMvazdOeFdOam5mVnNEamxKYXpUWVZrVE1KN1ZFdnIwUDJiSnpXSy9zcENWTGhRZ1oxdDdnRmI3MVJzNy8zQi9EcEtxcnhielRvanNJRDhqTWRVZTJ5d0tCMytRY0g3VHM1bXhSLzlYZFhhSm1JT083OTZvNFNYZUhqUk5pSjlib0o5NlI1K2NSNGY2ODJ6TDhXb1hNbExkd1pEa0FLN3pqcTRXL3ZER09yQm9xcjhYYWxpenFyVkErM0U4dDR1MHlicm1oNmNGUjF5ZkNjdnNnUllteHpnVXBGSE5rYUJDQXRmMno2MkxZeWxTN1NQdGxPdEtRM0xlRktFOUJRaHNjZ3Q0ZXBZNklRdDhDK2NWYTZUS21OZHk0dCtaWFgrK2hnMyt4dEQvV2tHenVKUWZvMFJ4akd5aUpYR3JFTk95SGo0dEZSY3dEbU43a1VRVWprWDltamhIZ1FjQVIxUDAvdllUaDZhYWRZdWUwanA0WkxPSDFBbDZYYWJ0OXFWZWlONFdpYVlkeUZzdHpERVlvVjZ3TkpQRWNUbFFPY3VYb2VzYjJxUGkxYmxSMDVSandPcFgvdzNoRjBIUk8yT3FsdzU4WmJDODdiVUdRSjZRMG9EZ3I0eFJYZHJ6dTJ0TEVBKzEwTHRLWDY3QUtuamhyR3RFSzdqMnBxSHJBcjZ1ZXR3Q1RVdHAvRnlna0FLcmErb0E5VkRnV2x6Z1V6NXhQejBSdzgvR3luSXQ0MTJxbGNqVUNON2IzL2hqOGloeURuRnVtUlpiUnQrZThRa0tDVjVlcW91dHo4QjM1UWZLQzFsNFA3eGdYYUdZWCtxb00rWGk5NHo1S1FNZGtsL3pVWHFwcWtSMmpnYVJpWFdmTGFyb01VK1NrV2ppZFVWdHl6TVZYeDlEbGtaWXBLRklYK3pURHJuR1A0dnJpcmk1UmpJQ0RNMkdzSVkyQXR6N0pDTFZ0RU0za21JdFVBKzZ2NzluTnNxQXk0OHhaM0pyaWxjdWYvNHVrSzYwSUZKZWt5MUh1cVl3aEgvYS9PdlE0YmxlS29LZWU0citmMnNsRkJ3czlxYzZmb25GZG9aNzRlSVNYNFRaQ1BrUG9LNElQb3BHYi9HVzdXM1ZQYmgyb3B6QUpjcElWdjRrc1ljZkhZOXhuRXlBamV1YmJiMlNNTFhSR2V3Y2N4aFl5MUFNK2h4dkRmQTJFWFhNbFBmckgwRU4xN1BQbFN0K0xyU2NLTlNKRHY5eW5EMmllTUczQ3ZVM2ZuRytwTDk2djJUVVNoOER1SnpMY1o3MFZQMzB4VzlGM0RGWW9waXExTjVSa2ZObzZOL2lWYlVVY2VwUkV4SVpMS3hXdFVTVVJWSE5HMXRsUGZGVWxaQ2RXcGZKdHUvYm85d2QyanpxTjdQeGRPbkFtK1VzZWxHYUhqNUlKZ0xLM3hZL0VjaTBjSGRVN0oxRmZFbzFvVjlPTEJEK25hUjA5V2c1eGRnN1l6TmJabGd4emdaclhiT3ZXeGk5SDVSSTVwWi9xOU1xOC85bWZYd2VUeEo3dlBTdUE0WDV0aG1ZaEpZNzJIUjMva2NPZUpZZVpRT1ZJbVk3N1RKODloNU1RZlVSeTNCRGJQdGN2b1ROQjg5SG8wdDk3UGo1Nk9MSTJ5WjRFVk9mb241L1VNM1NzbDFqd3ZqWjRITzlSZnN3OWlhamN3WFhpb3RvMFNHR3paSUZodHNrVmo3dFJ0N2FDa25nYWcrVUVzRmRFd2I2ejFLWGZscjUvai9LQTVISm9Vb1dGY0JYd3ZWZGNMS1RWdEg0QW9lbm1NUmFISTBCMjRWT1BJNTJKczB2RjBsUERMT0lnQ0IvVmN3SWppbzZ0UzlmVUJVczVOaWFqWks2VnBuWTFWN1J6VnErY3ZKS1FGSGZpalFncHZjNWxNM0RjKzVUd2E2Q3ZwM090Ylc5aDVZTVhXVExwa2pqaFduYzFUZmwwWGgvVEx6WEV4UU0xc2cwTXJoMGxudGxpSVhqMGZkVEJJMzk2QUNydXhPU2dsSlRVOGVtRjAvcytmZXJPMWNhKzFiVU1BNDNKVXR3WWRRQzEzMjc2bzJxSkdFTE8zTHR4V0lET2FDeXpHc0M2aHlKTnplVTI4L0JXVld6NDU0VVY5ZXhkaUpjbG5YUFpSdWdhY0FuN1lQUG85LzhOTkdaN1pZcXNiNmxEMEZBN3krTExSN1pxem9Pby9pYmxROExDVmczcWkxcThScmFwVmhXc205YTlxUTc0MGtoSFM1ZmxRUlNMVzVRMW1yRXU0MjY5U0xHWjdKL0UwQ1BJTFQwM1k4MDdSazhORkdpY0VFdE12Zis2SlByMnlhVUFvaUk5QjhnckEycGgzYUMvV3d2d2xqemxjaGZoWEo1WFZPc3M5UkZ5QUNGUEx5UVB2N29FZ0dZRGs5ODdzaUd5eDlBRU4xUmJZRVJJNkpPS1RrN2FyTWpxdWIzeEJGV3ArTE1XdzZuZ2tNWkJmbzl0RUFEaVhJOWY2d2hyb1oweXJSM0dhR1JiakR4Vm9ZTCt5dlZIczkxSXkvZGtvZGJVT0tpRjRpcWRYc0pxZUpLUHBZYldLWUQ2NHEra1ZlblhhUVNGanRtOStLMFBVeCtiQjBrMzBFbHYzalBpUjBFZ2o5WGI1RC9PL2dOeFljODdEcmJRUDZRZmFkRGZZL0JySHM1QlFPY0JNSGZ1eXE3U1ZYY3lSdTROZmJCeGV6RDhaczlwamNZMVpHRm1CODMyNlQrWUxvaW9xcUlmRVVXNlgrS3JsUFdzSXd3UjZscUR6U0EwQnFKdVA1S2Z5VE16UG52bWs3Tld1bldtWlZFNloraXI4d3hDN2g3c0RlRFlLRGRvTm4yeGxXSkVvL3hldXVsQ3N3Z0N4OUt0SjEzdG13YlBJZjVxSjR1NDBrQUVRZFFxS2prOFYwQlEvWEcrNjJJTldMOVpDNGx4Q2U5TlE3UGwzb1RhYm5DU2V1UWMreHU1OXZHMVNIWHduaWE0akFRZ2J4QWwvUlgxcEtYUk4xKy9PQjRxd3c4cHlrdDJhUDUwTTBWTjBqMm5Lc2lROHJac3gyaUV0aWVoQjYyQjE0dEVLZjA4VFNwTVhKNHlhUUhMV21pUXBrN0xmRktnOUEwZDNaam44R1NqWEczN3BtYzQ2VnNPM1MrYWJySFRGVk9WblRLV2pMWmdTOVp0c3l4cm9DKzl4VXJSdWdhUWN3TzNYRjBpNEpzN0tlcVNVSHFaRGV3RU5rSXoyYjJtbk5KdVl2OGhGbVliWWdUS3lRbTQzRm12MDhBbUtGWGN3WWFWNy9uN1JmNTArdUh4RzZlS05YcDVsY2R2OWFYTmc5eDhib1p0KzdvMlZ1ZUEybytrQmtiVmhSNElnRlZuUS9uT0NhbG9sanUya2tiMzFHSHJ0N3ZtQk5HekdGQWZlbHNCSjd3VHlMOGpjNWpEUHFubWJyQnJGYVUxWXlGc0Yyck42MnhuU3JJT2NQTHArbDgzaWd4T3MzOUpuOTBUb1U5a1ZqK2dUVlpwRG1tNTV0QWgwSXdWSGFxNlpkbjgzMHhENVlVQjN6TUxiY0dhNDgvRVdJK1hHWmtsTU45eFhxNjFrUWJmM2syKzJMK2cvdVBhZENiVTZHTExuNTRiRUNPbWd2QUt5RVRDK0FPNTh4TEg3L1hJbWNkRVFTRElTU0V2alNrUE1MbEJzRk82NmI2Zm15REpNakNreUVCWjE4Z29wbU9ibWpCeUNxU0hiSy9yVmJNTE9ZTzV4V2pkU3RSZXpnUUxad043c2lvYk9vQ2NtQUMrblI2eUVtV01vOFJqMmVoNWVjUk5ORnVQeVI1SzhlRm1mc05aSWdqeXprQkEzbGJZQWc4ci81R3FCMnVlN3lYZU5Eb3dMREpUS3AyK3lYcjdPeTZLaUZ2Zko0bTFKM1BIMFY5SFBNckdqd3gxS2Ura04vMFN1QUQ4VHpxR0ZtcHp0UUdVWnZkczE3Um5EMzU5cTl5RnoxS1VSR1d2d3VjY2lxSUluZnZySnVER3pJb05Tb1IrUytFeGtLdFAvU3g2SEROYy9oL3V2TEJqdjlZazRZQkhyamdSMWdwbmlkTGU1NnFianAxbURvbXQ5bmtTMUdkOTl6NEhLMkZoYkVqMmpwWUhCcTRSMFVJLzA4cTdZOE40dWFDTllUMktVeHdmaEh1VjU4MG5qVmtEclZlNndIVHpmQk9JbTlqNkd1SnN6eURWTUd3Uk1mOE03aytFSG5MYWJhM2NEcndlaTgxTGw4RDRQTVhVUjZhc01YWGZXdDdmS1hpUnVaSGd2YTQxNU9aaDN3TnFYQnIxMzg5WEdZTno4NThDNEh3UTR6S1paOHRXRDRNQjgyeFJkQnQ3RkZkQ2JVZlhDbGpFbWNWWkhVSUROUlVnWGYvQTN4TGhDaW5XYnFDSENjSEYxVlFwRVFnb2JNb0UvbGdHZUV5UytvaW1scm9oNWZ0MVc1VWNJRWRDWlB0Rk1HZzBCcGNaUXh0bkRMZVFFUG9WUnRuemE2K1ZFLzBuVnZ6azdJekRFUllRRUZTUS9wc2N1THZVMlFidzlPSS9RbWJDUDRsZkFQVHRndW1aOXVjZ21tZ1VYbUdzRE1oQjZERkRKSnVIUmc0UzVYTk94RzVQNlBVbjJBSThQbDZya094VWxwakJLWVRsb1AxdktSSEZxVFZoUjUwdmhuUTRNajRnWHcwalZ6Slk5bmY3dUlIcHNoU1daRGFrNkY4QjF5VktkdGVxbVFBV1ZacUFhQXlGdFJlazhZaWtjMlUwNG5EbVNMUGNmei9JdGZ4dk9qMktUR3A2akdsT1Vlc2praW42MVdpVFVyc1ZDdDlwS3VUeFBvclN4amF3MWVESFJPd3ROK3E2UzJWSTRONlBkdWFRMllxV2RwNDJTejh2cmNPUHJHNTVVb2lOb28zVUJTcVFYdGEwdy85SnNZeHozeVZ4U3p4Y0hXYXZhNVR6Y3BvN29MUkpjMFdHYzRaR0RKWlpSa0wwY09MaUFhUHhVN05TRjFPakxSSGxZQ0ZJemEvZTdlMk5RaStnL2dVeUQwdFRaSi9nbzF1amEyVG5EaWRnUlhGR2c0emltR3M0WXV2bXVuVDBlRThaV3dhVUt6bjhJVmJ3MldxUkgrb3lMc3dEdVFEanlFMjZINnBQTW5EanQ4cng1WURPc25hWlFXL1kvcDRKUVo3eVpNVmhjbnJvZWwxQXdITU5YUGorclZpUWlYKzhuRzdBSmcyb1lxcGp5b0I1a0VxOVRzcHZFeVQ4K3NMZnQ4SDc0SzFDbDBwaWdMdG9vYm9XemRocmJiczI2RVgwZmp3V01LcHN5NUdITlhwcWpnWi9SeE5vZzE3U202aFUrczdNTjBEZGMwR3pNOENJLzRlUzlYeGs4d3cxblhJNm1hNk9IbCtCTTAzRmIydHpyaHNZODJvVkZQNENCeFBCUDhhOHdwNmVDVzcweFRRNXZzcGdpemdZbldTSTNQMzR6OUZpbStRZHEvUmovaGJZRUxTNEN5Nk9aSDRDbEhpMjlyUkVBbFQ0LzdnZmhsRFBhWktNWHNDUXREa1E0citzb1Y2NTk1K05LeENVTFROMEtOYVNxVEIzUnIvY2toZTJUNHJudkZNZ0M2cHZhbFh5T3BxVUhNdXd5UDcvMDNIS0JFZndvb0hrdnU5S2JCd1V4b3ZSMkxBc1F2RmM1SXFienZlZ1lWdUlSMGZ3cXV2czRwclkvRnlYK0ZyazB6eEY5SG54MjFVbUcxSjh6WDJlbEZSdjJjSDgwdzlPZlhsc3RFczY0OTRNMmhhOEg5MnpyRzBKNXhKYWVMcGZDc1dNb28vdW9HWEgyK2JpaDVOSVo4QWZEVVdIa2JPeGxuQjdad0ZSVjV3RmpPKzduaUs1K2tFUFpobFdUcDN1eU5UQW5PT3FzQmxMK0lwMFFJbEtRMjJjUWVSem5FMVI1ckR2emd1QmlNckoyZFZTeG5TZHZyQUVOY2YyVmlZNldyZXkyTmpSdGlwdWg1L3NKOGxxMG5lVkdqRmk4VnlVZTE1UUlsY2s2b1ZrNi9XUGk3ZUwyaFVYdWkvSnZyVE8zYW9ZTFVLb3VVb2ttc3dsQjR6VStTU0c4b1Z5TjVGNzBxa0V3UGVNTk0rT3NaaDZtNXR0d0xjSmR1UldONHJPbzF1amxTK1ovREVQVU1ZRWZpOW50QWtUNDdUakhtY1hTeFpWR3dqVjgvUGg5KzF3dC9wdHdGU3FZS0NVMk5YRHF1Qk1iSHplL0VVRjRvNGFtME9jYUdianlnS3d2NGVPWW0vTXVLdG1yMlpDcEt1QUUrZDFYaEcySk14K2RBckZkTXFKVkFMc3VWRk8vc3FUbW4rRU9ZVnR0aWVyV0h5ellXRXAweEJ3ak03UU9SeTk0NnBZcGt3Rk8zRjRneFlHYzFQbDgvRGxxOVRrMEJCSjVoeFRSaVVsQjZ1K1Jtc0FxRTlFdmxCYzVIamRYTjhxcVYxUG9kcE1GUi9uK0V1WVVZdEV6VjJGM3VkY2p4TWlCTXhJOFhRa0dGWDlDYnk1dkttQTY4TWYxeGRQbUk0c3QxL1M3aTZqYUw2N2RubFQwMGZxUktpMFpHWE9HaEErK3JjS2I0dXh1OG1RcUNLYmM2K2lpRVcrMHFtMmNlMklsVDRLaVNDUkNYVTlyWEFxTEZrWEZDbDl0ZjVFY2NHcy9odFpDTW16UExnWVdYQ2RyZS8wdjRwM25WSzVqYU9LV2VHZmpxZzJINWdCT1VsV0VBM3Q1eWFsWW8rdE5oUFJtOW1LeUNmR1VJK3F2eC9uQUZEZ2JJVkxOL3V0NWtmN055MHU3eEpLL2lybW9qbVBmdzVRU1RCYXMxdGtxK0lTQ3pwaVF0b2I5QWkxYkh3SUExRzdpTHFXbDIwNE9kVHRONnkrNUN6T3RRcW9GMnZyRXJ6NUVsSEUvSno1V0lHSEJhbXhUNXB6RkxIYUFRaUtrMUwrNFlZMUpYNXZqa0txSkk2TmUwY2R0cW9lYndhSDBpeGUvRXpmRTlEWnZteWNVcHVoWlg0Nk84RldiRWRKNzhWWXcrNzV1Y2NsVUoxa0JqaVloVlk4eEo3YXJvUGtvcUFzeXJRV3JJL3RycG9YSjJ5SlpmaGRvemg0ZHVVTEJqVmNaUXRqMGJNakRjOXdRU0g2cWtWMHJ5SkgvYm04cWNod25zWFlpNDlnMjBoY0hHRkZFYUJ1MjRiM29xM2NkZWlwZGV0QUd3bnFPSjFwU3FybWRnOHJQUTBOYWRlZHpXR2xOVE9TYzJNc29lVzU4TGwyUjQ2SWZONk9NRm9HZW9HRjcycHpKVDlGRDQwWXRXbHFGdVBHTDBtenBRMklzaitWOGRqdjBCWnhld0gzRXB5VDhWbzBuVjFrUmFZaFEvTk5BUDRodmhlZ1ZkQzBKa2hKTE5FR3BSSzdCTEN0aldDaG5ybEFGNjZoQ3d0TlIrREc1SmVKMEZOdVNGcEo1TmI4dUR0Mk9ZYmFqaG9Qclpteis5a0lHNWVJd0J3VzQ0V1ZQWTl3WFFyNXJobXZOWVhDcC9nc2I1MUkraFlqbjRWc1pLOXU4ZElSdjZEc2hraEpyVUVIL0JUS1JRbW5WSlFJbWJvTzdqZUJySFpwOGx6Q0VldnlFMzFTYnhrcU5DUTZ2NjI3S1FySFBLZ2tta1N4aGo4YWRuTzEzcU5XNG13bEp0K0lOdDZBT2NlWmZOYnJYNnpNK0p4ZUtTZDVaMlQzS0M2VE9MMnJCNFBuclFHWG5FYjh6VTByUlNzNURRWFRVUWM0QzE4Yy9OeFVnbzRNVWZHY0N4VmM5WU9FdVBHMEZ4MUxsNURnb2dncjFOZ2N2ZEttT0E1Q1hJU1JCZU9taXFnM3BPK204bVZLUEg0eTRUekkrS2hFQW5OL0x1ZDkvNUNUbjVUbDdDNGpaNGQzS3U1OTlESUZ4NTZGbGUyR1h6RXczQ3U3YUFsck5yenZhMXorb0JGZDRkaFN5algvM1lDVlZkRTdoUWhqdGlMeG4rMlpyM0FRRGNLcDkzM2FhT25HRDVzd1RscW9SajB3YU1BNE1CK1RYTTVRSlJNZzU5d1ZzUVFJa1hKRGh6WlRjTDRkQmUvM2t1WkV3NlpRaFNtR0FEWTRaVzBZQjIrS1NubjlybEdoUHI3a0tJak1leDh2aHhnd3FXQ044RGxSeTZWVVNtR3J2ekNnaC9Oam9sMDZiNjJ6M2hGYlZUZ1ZnWjlBb05jb293OFlCT09nZFRJZktUbWxKTXRTekVqTXp6amRGakgvb1RENWVza0IxTnZhUGZEVy9hbVdWVTB0emJwRmMvSFo2emlJVE1JWkI2d05xZW82S2NweFh5blBwbjVWTU5lMjY1SkZjQzk3U0VVNXpDd3ErUmlDY0xZQnhZd0hFN3YwUlBqRm9wMnFheitzdVFoWWpPd3kzQzlJWmJBVlFLTE84ZW1LeHN5QXM3V25aY1VVTjJNdXRTZzg3Q2F2VS8vT004ZFh4ek84L2pmVzZmdUhYdGhqTGZSaVZNZnhtMWJVZ0hmT1Y3bTJTeGlGbVpFUFRvNE9iV1czdk9JVFhnZmJ5MkRmQmFLbE9vSVRXUmtGQmdJNW1CY2c5RE5La1FGTG9RMFVjMUZEK1JYM0dLU1k3MzJMcjZUditpU3dZZnUvaUI2ZnRlTzlqdVVxODd6eFZBWVlNZlYrWmdPbHF3R3dTNDZXZ1BCa1ZBcVM4RmQyRjJYL3o4Z09yd3VxdXkrT1FXL3BPTUlLTjI1MFQ3OEVsS2pqRDNlVmZMcWxYbGJBYTZudDdDL3BGcFNqYXJTWENGSjRMQndnSVUrdm00cWVYN21aQTdhQUNYL1FoZGJaRGZYZDJCYlZ4VmhFbitCT1c3QXBvcWlOa3Z4d2tvUnl1NStNbHlyaVpRVWZza3FLVm92MzhRNmtpY0tUZ0Q2blFjY05JcVdCMDFsUW1idGdlbERVZkhGTndrcGxGUmRYcGdIa3BqNkhjZHdDT3lrMFh5b05qUDRlcUwzaks0S0VoRGpQNzdzRHl3b2crNENLWGU1bTdiZjhaRjEwcHRPSXM4d21hWDY5Y29qeXdVVGZrUlJQN1RydXRwblgzSXVZOUdsZDkrWDd6YVpjekFudEhqL0hzRVBCblVGdm5XYk5wbWxVOUNQbTFPV1E4Nk43TXBsWjRCOElzWVZiTDNub0wvbGk0czl5OExIaXZSQUtTclNrTjN4QU9SWlhmSHhZYUFEaGpiV2l4bTlycGNmMmR4dlIyY3hzSHE5TlFNQVBNTnpOVjh0WXRQMC9jS28xdjlkNWgwa1VLQ3IxeGpzN05EVGhzdkpESUFMU0VlY09MOTlDSUdmZklKS0xvYi9EVTY1SmJBUGdYb1hTWG54ZjJZSVQzVDZyakI2cXpJdU40OE5tTjUzbVgya0JlTmJTQ25uTlVpV3VjTVYyQzQrUUE4bzBJdjNkOTQrRFNaUDZ2THFkU2lGdDljSjFsYkQzaHo5K0ZSSkdaV0JpVUsxV0owRFRLc2NDcUhWV002M3FmSFZxUndCMGR6Zm5hRUVPUlBwekYyRUJYL0hzNFpuYmZWN2FNVS91YVFMa1UxL010SEZGamNuY01ET1F5ZzZ4R3Q2ZXVDWE1uVGVpZ01RdnFtSFVrZjNLYWVPWk5MakFneDR4dTJNT1dwRzJYVTgrZWh5dk9vNEYrTWdHMVJWZWRHOENRbzlWVXlHS3dCVTZ4cFVHTHh2Z2s3ZitjRUJ4Y0tZY2NINWJ2cnNkNmNhaEQ5cUlYRzUzK3ZDWDlFaUljUXVkd1prdis0ZUVLc0NtTHhHWDlLamc0eGdzc0l0Nm4yMGUxMEQ3WENLaUpVK3ZLcm1RMkROUDRSTmRmVmYzQ1QxZi9XTTh6dXVWaGZiV3gxWHQ5eTdrUS9Pc09JNkppcGh4RTBQRWJyMWlDcklIWVhRRVRieWIzOEVnVlU2TFNzMW1aT3g3VFAwOGcwQXhlUmN5UjA3dHRMdHNzZEl3cmU3dmRlQ1grMTJBY245Y211UXNEVkE4dTd1TUJBV28xY0x4V29nQWd3eDZRdlNwYm1yRUFkWkhNNVJtS0U2NUpJQmdLZ2pjaU0vaUhPOEU1eitGRDFXQmFuamUyVU1WNkRtcDdpdUxqZ0l3emRFVmlzOGJPSFNyVnBESmx3a3pXbnpJOE1EWUlVODkvTlE4V2NqNk9QeUtCY0VFQWgxeUl6cjZ2cml0UndUV2pOeFJaWi9KTXlyR1NyMHZNbnU4Y1JkOEo5RmlVc1FZNjhWN3lPRXY0M1NreUl5MWRWRmNLOEdZaERYUGt3SDV3b0JaTUl3VlF0RUJKZ1M0Mms2aHdtTlhGSlMvVDM5MVMvWGdiUWVVOTNqdkFVS3FTOHk3bG93alpqMHMvUmpLUzh3aDgrazVQeXZEVGVLVGw5dCs0NTg0b3Y4YnpKa3daZDVhZVl4Y1R1WDd1bFBHWmVuYUFHekhtT3Zkd0JyOGxWR2h4dEdtNzI4ZEFjUTh1TGZ6YlVjdjFRcktGOUYwQzBDTURqb0VXYVI0TWg4V1Rld29RdTNkSEdlelZMYUV2UDNWRm1kbEJLQ0oxQVNyVkZaUXFQYTdXVGRkaU5YUVVqb2NiN2syQzJuR1llUWFQNnlzSUFPSkdYTmJFQU1STER0dHJXcFg5WjkzNFowUTNjNW1zaEtDZ0ZpM0xvUnpNT2N5V1FBdlBkaldVd0FkcHZPOGpvSkhDc2hxT2F6Zk1zU1hOVldaZ2JjSEdaNjVqZFZ2WnFkSEhreFoxWFBzWnllb1g5WGtGZlJQd2UvbW1VSFducmJ4Z1RQU2pxNmEybkFhUnVKVXIzUmR5Y3B1aDF0ZHRYUk9mNzFkUDJCb2VJa2JJMk5KaTZKbDQyVkFmaU56ZU5wRUlYV2RPTVB2OVowVlBGK1diSVFicEJ4ZzhMM3JuNFd0bFVuRXlYTkJ0a0lNVzlNWjhRck1iTVNCamhyek03UlZWQVg3MXhaMWd3QmxLWWtaemFNRjkwVzl0aU90OWtmRkFpZkVxbmxHVXZHYzJLeFR1SGdvbXZDaTc1NmViT3pSdXhxVy9kY0diVnN0Qm5uVU5MS2pRd2JnVW1sZ0dZK1VYVWM2cnpvQWt0Rkk2OEtWSUhHbG1CTVlOQWlLRVUxUzMwY2ZZa2FiVXhkL0hwWWFEc011ZURuWktVVytoN09OVVEzbFZzR3JxbnNqb1FpQjRxemhqM1d0NU85WlBBWUc2NXZLOHh5T2FRT0JTKzhFWHJvMlltbWpxbGdUMjJKNHZKZEJvMitQMEM1SFNYTnVMWHV5dHMwL1NGM1ZFZDBJTU1HM0hVOWFpemxLZndjb0xBalJ0S3lwVUpxdXB1Q0Q5RWJkekloaHVxRnhhMzd5bWdWNDlYNHlqVUE1WmcveENHVUROUkV2WHJoUUduRFppTGxNdndnNUZvOHgyVjhiSFA0a2xQZGJoRUhFZVN6T29OR2djNTdQVEJPVE9UL1JxN3YzeXFUWlZZcmRJQ0NCcWNkMWFGNjF5LytORU8veXRkakNDU09weHR2T1hBWFhVZEhXZVNTSDlzSEFZbHpWY2FpcEJleVVhTkRRanRLY0xFczh3L3VGOThJVzQ3bmticWk1bGZYcXdlNml5TW5DTTQ4aE9XemYxdzBqVjYwbnZJd1YwU0FrWURtYTZUOEhNSktaYkljUHZsQnZyTUw4WldtRXI1TzFkWURFVUkyMS9saHFPSlBZYmNyZmd0REl5UDN1MEs1Yi9tTUVIa1REUUkxQ1UxRUhXR0s2U0U4OXBNYWtiVnhGWHlsUWJUaFdQbnZCNDZLVG0yOTVLRWhyTW9kZ1NmZ2YwRVVkQnUzNWdMQkVNdzJETUxTaUU5OGd1bnBsd0FaNDVJYlBhdW5ZblJrY2RvblRTQmRkTHRmaDBZREgza2tKQ1BOMUE3U21SMG9QNWFIajJKSW9NaVRLVGgvOTM2d0NVaXFmb2dlcnlML1lhN3JzKytkakRBTmNqcnZIL2lYZGRjeldTUXZvYmE4d3VQcEd1dGRLRmpTZHZzYmk3NUhZZzJ4VkEyMlN5Rk1YVUlIS0dBcDh6dzd3L0thOU83Z1JieFpyeFlnaWg4NXdOY2NZbjNZb0FIVldnSy9QbmZhaEdscjlwOUwzUlp6b0JsaFR4WUxiK1V5TUNCQWRDMk5PcUllOVpPb1JzbTlXalNLNE9vOXYvVHVtRUJTK0FnaksvVzhJMlNLbXhJOFRwbEVWcE5JV0JqU3VjNWJJSE0rQ0E2c1FzbDVxRW9pcVBZOW43WEEvSW1UWUxaVlZQYzNsb3ZRcUhWOXV5eVNWRktFZERVbTduYzl4b1RMWHRzNGZNV2RWbHI3SkVNZXZwOW9ad01oYzBWbWNKV09HL0tVUjBXWE9qWWVNS0RWSEljZnhmQjNncXNWeWhCTkg5WjJud21McmhQdU9uK1FvaHljc09PY0RuUjIzbVFLNXRBQUlYcTA3WVpHNzJ2VUkyTEUzN2NXRXM5Q2xEZm55d1Y4TXc4anBOZDNZVEJldEYwdC9PcWpLeXFNSXh5eCtkSGcyRTh0TXJyZXRVVlJ1WmM5Q2VNOS9KVDhNZG1SUFJJM2grMThTNXdRcGNIUFlVYVI5QjNNRGh0Zkh2b2xVazFpVy9ydVhvQ1ErT08ySHJTNnRVVFc2bUd6alZIbkY5YWw5UUs4U2hOQU1nNTBwRlA0NlJWcDVPdUM2WGhGYzB6QW83TXpsNjBZS1pVaFp0bjlsbVo5MEwxemliRkdSQUhaRG9ud2kvWHl4aVV5RUwydHdOeUZ4Uy9qTEhLOS9JN0xPTlVZbHNiZmdjanpFM0JYYU4zcDZGMlBYdFZrK3FrR05MM3RBbWdMdXUxeks4TSs4Z1RWWTVwZ1g0SE81bUphSUtzMGRGZ2I0aXR1dG03N1NYd1JPekZlcXYxSENpd2t4NDMxUnovcVYrVlo5QmU0NDFrNkMreDkwcktaZ093S1BoTTNVdTlONTNhY0hZamdvYnlKdFFtUk5oVXBNNjhacjF1UzNHV3UwKzhVVHE1RTBZelN2RjZGcklVOW1xTkpJZm0xMVUzVy9Rd0dyZGtKV3h4NnpibWJHTGdyb1BHWFpsZHpVUndzNEJjZGZJdFBJMWtBYkxReE43cjNlTlF2a3dTdE1kaFFnOHpQb240cS9jQ0JKMFl1c2l3M3NLTmFtSTg1SkQ1NlRRQTBtWXJkRjNxV1g0SnNOUnBCMnBER1VReDhIZlZscEwrcWFDalFXWThKMWo0NGs2cWhpK21LMkFMWHMzSktqZldoa0VlOVc5d3ozdTkyU3dUVjFTZjZkWStBWEs4Vi9CM1VBWEtwSUMrV3l5M0o0MVZmVlRVaXRNN3hWR05pUVExcUNGR0pPMlIrSUxDb1UwdU5pZVgvQ2lTQmdSL0IycWYzTFR3Q3VtVTVUZWdaeTZGT1hvZjc2RXZiZG95T3IyS2E1ZEg5aHpaQmQ0OW55N0xJdWc5eVBHUmFvQTRtRVQ5TExDSzFCSnFzNHptNFcwdzFYd3JrOWgxdHo1UmN4bElrWXV4VzIzRHR1bGM0TGtQdGUzbVEwT1BRTE83b05ieDdRVEtxTHBRa1QrUHJtNk5temNpcWlvZ0dZV21lbXJxV1BSZVpDL3pvSyt5anVvRDl4MjB0VDc3VU9RRmhLQTI1ZUhrWUp4TnE0ck5SQ1NXcldkb0NXSXZXUE9MbDRkSEJSQTRROEliVUlpTmowV3VKRmNMU1BSNW1adlJrN3RxaE5zaEp6S0oyc0V0bUlWN3Uzd29aU25hek9LTVpTVGkwTUxRSXMwZEpBSjJwckZnYkV4eWdYQ3VVUjlLZXJIdytXNVlGUUIvOHIwRjBVMUhYeUk5enNRQ3l3bi8vMlFBQkFCb0FRQUFCTndCQUFBOEJBamNDQUFBQUFBRTBBWjFBQUFJQUNRSUJBUW9DQUFNQUdWUm9hWE1nYVhNZ2IyWWdSbWx1WjJWeUlDZ3lLUT09PC9CREI+CiAgICA8L0JJUj4KICAgIDxCSVI+CiAgICAgICAgPFZlcnNpb24+CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvVmVyc2lvbj4KICAgICAgICA8Q0JFRkZWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I+MTwvTWFqb3I+CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L0NCRUZGVmVyc2lvbj4KICAgICAgICA8QklSSW5mbz4KICAgICAgICAgICAgPEludGVncml0eT5mYWxzZTwvSW50ZWdyaXR5PgogICAgICAgIDwvQklSSW5mbz4KICAgICAgICA8QkRCSW5mbz4KICAgICAgICAgICAgPEZvcm1hdD4KICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24+TW9zaXA8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgIDxUeXBlPjc8L1R5cGU+CiAgICAgICAgICAgIDwvRm9ybWF0PgogICAgICAgICAgICA8Q3JlYXRpb25EYXRlPjIwMjAtMDEtMDdUMDI6Mzg6NTIuNjcxWjwvQ3JlYXRpb25EYXRlPgogICAgICAgICAgICA8VHlwZT5GaW5nZXI8L1R5cGU+CiAgICAgICAgICAgIDxTdWJ0eXBlPlJpZ2h0IFJpbmdGaW5nZXI8L1N1YnR5cGU+CiAgICAgICAgICAgIDxMZXZlbD5SYXc8L0xldmVsPgogICAgICAgICAgICA8UHVycG9zZT5FbnJvbGw8L1B1cnBvc2U+CiAgICAgICAgICAgIDxRdWFsaXR5PgogICAgICAgICAgICAgICAgPEFsZ29yaXRobT4KICAgICAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPkhNQUM8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5TSEEtMjU2PC9UeXBlPgogICAgICAgICAgICAgICAgPC9BbGdvcml0aG0+CiAgICAgICAgICAgICAgICA8U2NvcmU+NjQ8L1Njb3JlPgogICAgICAgICAgICA8L1F1YWxpdHk+CiAgICAgICAgPC9CREJJbmZvPgogICAgICAgIDxCREI+UmtsU0FEQXlNQUFBQVlqZUFBRUJBUUFCaU00SDVnd2NEQ0FyQTdjQUFBQUFBQUVqQUVBQUR3SUFRQUlBUUFJRUFBRUI5QUgwQWZRQjlBZ0ZIUUVSQWZnQUFZaGRBQUFBREdwUUlDQU5Db2NLQUFBQUZHWjBlWEJxY0RJZ0FBQUFBR3B3TWlBQUFBQkhhbkF5YUFBQUFCWnBhR1J5QUFBQitBQUFBUkVBQVFjSEFBQUFBQUFQWTI5c2NnRUFBQUFBQUJFQUFBQWFjbVZ6SUFBQUFCSnlaWE5qbWNvQUFabktBQUVBQUFBQUFBQnFjREpqLzAvL1VRQXBBQUFBQUFFUkFBQUIrQUFBQUFBQUFBQUFBQUFCRVFBQUFmZ0FBQUFBQUFBQUFBQUJCd0VCLzJRQUl3QUJRM0psWVhSdmNqb2dTbUZ6VUdWeUlGWmxjbk5wYjI0Z01TNDVNREF1TWY5a0FCQUFBVVZ1WTBsRU9rZFNRbFF3TWY5U0FBd0FBZ0FKQUFVRUJBQUIvMXdBRTBCQVNFaFFTRWhRU0VoUVNFaFFTRWhRLzVBQUNnQUFBQUdIWlFBQi81UGZFeUFVTFBjTUJlVWZGTWhxbU56VHNad3NDdVpoNVN3bEN1T0xpdlN3LzBHR2RmVFk2NlNScHdCTHd6aHFqQXZabG01Q0lOYUFlZGtQOHIzdytza0pzMDc0Rm9DQThVQVJFaG1sbit0YU9GQkwyMkdDaWFFb0lWaHBCb0R4VUNlcGg3dU9LMXBXbnQrZ1g5VVdlNGc0M3FkcGZZRDhDUUJFTk5iQTU2R0oyOVFhRVUzYzhUU29Rd3p5eEM5eGVSS1VZSGRlYlFZN0tycnBYREhIVjRrQUpCcnEwcjJiOEpBSVdaNy9EN1VMdGxpR1NCQWVzZXlDa2k5enVPaFdnRkVGZTd6R24zd0d5TlFqZWpaRUhsN1AvWElqdjF0NzIrY0hONnRBUnNwVXNsenhyYk0waVhaVUxOYXFRTFBZOFhtNml2bVcyYVluNnVFc2RFVWZkMnNUY2pvUTFrVnN0S1JuRDRUaU9LOEpnRDhEOW5ueGJ2cFVNWlk0S1RTRzZWRWgwZmF6MjVaV1NNTEdPVzVxSTlCL25lY3NlQUdvbzJFWnU5S2wySkc0WDgwQVV4NXlleGRWdGR4bFFCOVpoOGlQRHJDclhjeVlKRys1alBLL1ZqRDZPS2RCZzdNWTFPcUEvR2NmR2UvTVRGMXJJN21CSUlhVWY2aFh2MEtBOForcXhRRjMvai9JRnhEWEtJOERZUVhQSERUdnZQS3RUUEhpdTRoc0EraVFtclJHOFkvL0dnSi92ZFhIaG5tcHd4dzBkdkpmV2cyd0hVVlZjMlM0YjJOZWwzNTY2eGlEUFRucjJtUGw1SGw4SmZGUmVueDlLdWJnZWVneVZsWmh0ZUZhTGl4OGo3dVoyc3pUaGJ5ZElmVWdLeXl4N1RCTEVyUWNQSkJXT0wxNHNUMmtucm10bmNIMHJ1OTc3TjFDZW4rUm1DTGlURWYyS2hBMGZQTEVOQjg0bzlsLzFtWnVZK1Jkd0xpSVM5SEhWck9tYUx4MjB4c0dFeEFlQ3M1SjF3dTJqaTJRcVB5Nk1HUjluYmZ1dUU0a3RvQ1d4TmNkYkZaWHRTSDJic3poZ2xBc3JwbU9UY1VsR1lXZzZNNGsyVXdyam13WHVSWE5RajRTYld0R3ZDQ3BnTWQyRGxENDRDT1prMDdNUU92cEpVNlZ0YVJBZ3ZHbXoxVVV6SzFUVXlFRXRFTkwzTDBzRHhmOHJjWHBjaXFXLzFqSm5BU2ZXZHZuNjlwRk1Ka3NmaG84VnNpajhkMUZic3JraGZTN3hrVUh3SnZXRDBEMW15blhIRkZJUk9keE5GbUJleDJwenZFK1UvMFlJZjlsdWlGQ29VMFdpaENWS1dZUFpManJ0cWg2MUpFdmQ5RzNVMTdQUXZSWS96djlzc0JwLzJKNFVJMWk5QXNPVi9Pc0VXMlVZMlJ6bkJZaGtTcnZEZ3FYSVd4UFRvNi9GOTBBUVkzbGt3S1Q2ZUV2bEw3UU5FT1BvU3VTNEg5bW1IMWN2SFNoOXk2Z2hqN1I1SkdKcnF1L0JEYTUxNERYRTNyZ00waml2Tlk0UXMxSzk3SzFpVllqNUhGV0FTRmI3SzRUNnVUUlhHOE5qY1JuakRZUVdHdVZDZno2SCtwUURFUU5sZE1zUENpK2krSVhCeFhwVEZCODc5MnVJKzNldFdhUGJnM09QSEtlcFoyNTZWSDJxZnhYY1kwTXJxN0ZWSC9MN1d4WXN5b0h2NkRKQnJDQzZ6b0xxdnhRQnJSL3BMaFMyZnFIeXBkdkx5aEhuRDc4SXNqcmF5Wkx5djlVcHVKT2M5M3UwTW5kTjNBOUlPNmV6ZndTVGU4cjF4Vng4bkxFSXJoRW9mQ3hzb1RkdXhDOHU1R3hMNjhvQi9vTXMzZTMyd1dLTTZDUG10ZmdDQXRtVnhkVW9CLzc1YUwwcFo1ZFJnK3hsRERDaVFCU2txRG9OU2dBMTkrbi9LbXpMK1FYbjBXckYrVEFLSWsvYVRuN2hMeWwyc2JBSUY2SjErd2JvMHpmSjgvOHlTZk1sUHpwb05mREtVQVhoSzdIa0Y0VEZSbXhsQWQwRjhrdE5ubVVqMGpJbWthK3lCT041ckVoUFEyZDhMYS9QbzFHSFVCZDc1aUhmQ0E5NFE1dkIraldFUy9IQUg0OWdrc1VZejM1UFRxUVR4UFFIcklVZ2hlWm43ZHZlNHlFMlhSMThyVDhmRVpnY3B4NTlic2JWRFhwUlNKSUFGTDcyNkxRMnlDVlByRFdLREFLdmZyMXhWMkdiWDNJR3RmdDJ3Tnkzam9Jd1A4YmZYZ2hucld5bzFlSTBTeFFDM2FWakFQNGw3dE40Nlg0RW1od3Y2OFk1bTRpVXpha2VxUEMrUDhaZFc0U0pCMGJxRHlEM05xb3NDK2ZZOUlCeWNYUFJLSHJJMk55MWZSaGNPd0Z1WXNML3VUZ2xLK1RTTWFvRGZCdFlHSUp0YjFyQ2wvNmwxVFE5bkVoR1pwQy9KTlNJd2lPTVpLV3ZwOS9BR1k2b3pOSFo1V0pZQ1JtVHYxeExJWTZBRXpiNHpGbzJCOEhFZmV3NGFJOTRHU09mNWhaWmhrVWlySklMMmdpc0FCMmIyOWRWeGhQQTBxTHU0NlNWcVVSTk9obUZJMnZvM2dtUFlURlNtSGNTUndYdVl5dTV3QWkzZDduS1o2Y1FUNjQ2SElKa1BJM09zWkRmYWQ3WkFLZDcyZ3N0TVVxRUY4OWNGM0NCdzEvVGgwbGhUdEZxdG56eFlzRmpaQjdKT2tSbkJNZTFNUUQwVDUxc2RIOEhSMVYxbVRuVVRxejlYaGlRV0Izd0xtWnc5UUFlOVhlbUNFSllnMGI4NE5wOTRseUdEQzBJRzdPcVVHdGFseE1HL214WHZqbjZoVVRyVjVvWGdvdk9rOUZUa0tEZEVPZnlHemJ1dHcwNVRBUlVKbmduTmNYZDZQNkVnNHB3NkNsNDNiKzNMaFpLWnhSZno2Q2drSnBhQlYrSldBTTAvWHZDZzBzdE80UitmYm90NGUvL0NGU1o1UUxXVVBWR2o5YTN2Y21SQk1LcnhEdnBxUWRmNStPN3RTbTdIODl5OWtHenduUzBxVWQ2aDNTM3hiZDIyckpGWXpNS1QyQmVCQXBabCtQR3dxcVVTN012Vk0waEdwbHdqT2JLaHhmeXhDaGNrcGVqd3lMank1cy9HTGJUdGJDRjJxdm1PZVRZcXRsYmdpWVpZbkZzaFlsb2kyUWx3YVk3ZWlXTjRxUzF5ZVN2SlVldWgwNzBuNUFZbUdlYVRtOG1EQ3g1T2lLd1ByQzBMN2pEcVN6UHpSeXVjS1Q3cjJTNDRVNld1bEdnWlF2OG9ERDljTlFWMDI0aUR3ZElSdHp1UlZlNUdrSGdFNGRRdUxVenlaVXh6SEZJdHNBOGtYbEZVTTJNREhjYTRIekNycVdwaHo3U2F5TFR6Uk43L2dhQnV6ako0UmhMRzEva2NUOU1tY0lMQ21CZUZNeEtMek5qTDhlQTZEL2NtN1dGSlZpK1V5ZlpqVTF5M1lVcXhUMUsvZVBVK0UxTFZWbHU3VnAzZWxEVWViamI5TDhXSDJXQk1BSVNCT0RMOXVUZWRFWVlzVGVYMGViRS92QklSUXQ3OHZYd0pSZ1JlbytUYzl6YkYzL2RveFV2VUpJNXBPb3ZablY2bkZ0OXBYeEtrZmxEWndGSUllSTlBUEJyNlE1c2QvdElBcFh1cXRpQ1dVNWZXdUtFdjROS2puRnRSZ285akFMUDRwR0YzUUkrVXV1TkE0RUloQzJGSWV1eDkrNjRnTTZwZW9nVU45Mmw5R0FBK1F6dWo2TE55MmhjdmtmSTFMa1lOTk5MaFdUS01xTU9qRENIR0QwYlNycE9JbzhVeE1kYzdvd2l3YkE0bVF0M0NtSy8xd1cvdUFiRG8rWkxSSEliaktYUmk4bEIrU3htMUNteTNrSXEvUlJ3WmJIaVZkNzM2aldldjdMT2VSaGNnOHQyYWRrc2xnUWp4YXN4by9WNUNoa2hzVXJJby9vcVBIYmN5TjZEb2ZWWUg2NmlXdHRVZ1F1OFNWL2lkSzlHelV4N1l0Mk5OSHoyc1lsNDUxcjVZUzZKekZzTnFHcmduaUs4U1ViZVNwaG9XeFJCVDJiV2tlSDZaZ2pKUElncWRxRnFJWkluUytjc05pR1dXVEhXYTBYQko3cW0vRVRROFNpbFZ0V3gxNWFLTFg2TzNVWUNVdzg0Q2I3S0lLYi9QSThxaUlTR2MyRTFlRFpGZ2k1VlhlUkxxdURESEkzZWpCWnZrRGhDZHVJWGhaSzY5ckhMaTA1ZXhXZEhwRjByRzNjKzZpSTA4b2tuZGNpTzhHSnRZRFlZbkRZaVpHbjBDOUo5a0thVzVsV0FMSDBNMDNmRXM0TVluL1VmWWVNQVRrSkVkSmhWb2RaY0dJRmRFSFJKU05uak84VC9yV05EOHFUUHFpQWJ6QnR6R2ZjRHdxR3hQeThnK3JVaTMzT1hjVlBzdXQ2NkRWWlRHM2VkVGYwU0ordmF1RFpVNzAycjlwNXBnZms3cFYwVnlXZFJWSFh0V3ZYYUlkdmIwV1NZdzFmS0lWT3lKM3FjUWxVMXoyS3dsRENCZ3VDTlh0RDFsT0NIaEVaOHpYQlMwL0EzT1M5eVZyZ3F0RVR5QU5hM3N6WS92Y3pYcE9XaFpTajh5SU1MbE9hRzQ4eXcyV0NSVkdXc3hYYTJwYis4QXZHcDBWYjdGQlN5UWp3ZlE3SHJnTkdvdXM2WG5BZWJmcVpkd3JwUnZuM2IvYWJObXYvWkNNMnVDZlhyemxMUVpYQ3NaM3N5anVXSklQeUN4UGJma3k2eEJiNVZoYWUzSGkxcDUvbVc0NGlQdmxIMzIvTDFib2ZNQ1VkNlFCY3ZWeVphdmtZRFJXd1RLbldoUnlscU0yb2p1S0p1TnV3UjlVbFhkZXdKSHpubmhHb2NtbXlCNDhkTEN0Wm9COFd4bCtDV3BWMmIvbGMxQjQ0cnNleWdzMnpyclVBVnhSOWsyLzdkejFTRUhia3Y0SlFvNHVwMlJzNnl1d3pDemFwNTZHVkZCZFV2VE5MS0M2eUdIQVhnV29vTC9vR1o5eGJvUTJDWGFsaUdoNHYrR3pDa3U5RU8xVjJ6a1JMT1h2a3lENUw1SEhjVm4zc0JIVHREN0Z3UjBrbXczdlZTVVRBWldxazlWdzhYUFN4WU05N1g5SzBNNlhBSUlrZk9hdzZvbXM1eldsZ2FMOXRBdDhqb0JTR3BRMWdzWGp5YWlPdjJ2YUl2bjdRbXFyajRJRm5GSWlmOURxUXZlNnZHOHNhdWRNUWcyYnJISVVnSWhXaU5ZSHlrVkJLbnh0T0lMelJKN2ZPMmI2OHExK0FCalp4alpVdU1QbVgvcFRZa211Nmc3TUhiSWdiRUZNN3NYMHdsZG1lYmlSMWVpRHVuODNtRGNDdjY5N005R3BQOUh6RlVvR2pqRDZUSWFKMGRTdHJmOTVpVFZjNVlrOGRtS29RMUlPbkI1eXExTVlwaVZmMDNjb2d5amtKUHhWMjZYOHJiWlplVS96Wm1hVGM5NGwwVWo0dUd1dDZJUzQyZHcwUm0wSi9uV2c0aFo4VUxVWXdFNkQ1SE9YSEdtQWRZVjYwQWpHdlI0RnNML2Rsckg2bWhyZFRPQWEzR2hibHFIV2RpcXhsVzVGakhlbjc4Rmsyb043S0ZDRk9jdWM2L25BWTM3eVFUKzZQN3FIazNobk1PaVFOemNzQVN0ZWovcEZTcVd6ZDFTYk9JNGg1Wjl5YzRhOEwrT29Gb2ptQXpiTE9Vb2tFVUkxQmp3UVVsQm5vR29wQU8vYWpXMiszdEZoUEUwbmRsSDJWYjVJUENzaXlWdU4yNWhrbkQzWldzaEFscTJGUE1vY2IxSkU3YmFlTEd0K1VtTDBHeUVXY2dnT2pPclpVeno2dnlwTUJ3YUFzQ2pVMXZlNTUvblNoRXhtdlFZblVrcG9ybEF0WWIxSFZqQ3c2TXRISGR3a3Ryd1VzZ2U1MXZERGkwNmxLUWRIMFZ4bVdacjVKS2lmSUlEUEJJcjdML0d1SGc0MFpjMHBqbFhFSmN6WFA2NnpodUxKZkF4anNPQ0VhYTRRdGZmV2FqSXRiTFcwaUxEMThhOFFEMWRHdmNyTlQ5ck9VR3c1amRGbTgvdXNid203K055SFhEOTB2ZVVZVWNTVU9wdjJVWXRwc0U3SlIwMm9iajg2TWhGd0lvL3ZoaDMyNDFFK1V0cUpjbGd3YTlJcERxYmUyV0FLMTNraXVHQWdQMzlmSHMwWGd0M2cycDQxdGRQaXJweXJrSnliQk9RTFZzMytFSExmN1RJNEp4S1NPUFJZZnlja3JXeUNmbS9icERGemxTN2E4WEFjMHd6OVpqWDQ1Tjd5U0VnSVdLUkJYQXEwMWUvWUd0MC85WW9yTGVlempKQnRTQ3Brd2xqOWVCRzNuZnc3b0IxN3RPUFFpaUhLaExSMS80UmVnRTZJdWtFMkJTelY3cEw3MVRvV2JqTS9PeG1nT3VXclY3NzAzcE04VDNiNkRZQ3Frd0VSbTFxaWwzVGxDY1BjTFhSeU81ai95Nmkvc1Q2OURHdTN2M1FyekR4WDRDd0c2TzNoNjI2MTNJSTVDeFNuemFQOHFCZkxwNEhwaHgyTDVDbituKzdTeDBVLy9idUZIeEFJQkE1QlBSRGVtV3J6d0lnYzJQSjQvUlk5UC8zMnN2eGtCbzF4RVNGS1liV3FkRzFxc3EySVhVZFAzTnBNQXp1bzN0ZWZncEVvL2FXaXhyL2J6Tk5HdFJQSDdteTJsZTE1alJLTDErRG8wVXNQTEg1ZWRnTVcwNUJOOHpNYXMzeW9UaTBOVm96VzE3WStCVGRFMC9VZEVEZDIvM055Y3dnTWwzKzA3WGJ1MXNSOFZtS1JqcWpHMUxsNzRLUW9HVVlQa0ZvQ2tWSDlaTDFlVnZldjhvWnQvMkZ6eXZaOFFmOW94bkRLc0MvSVhtelBTS0lycTc4eGcxbFcvUFhPU2IwdzhkRytOa2VBcXl1TWdEKzlGUi9OU2RPVVN4UEtVUG1LZ1VPVXlrTkI2TXlJVFQyeHVXOEVDZG80WmMyVjc0WGJkcDFsZGUxYmpHellrSGJhZ1lxTUpCYnZQZzhhc2x1Z2Q4RnNxblV4cTdveDNGK0lRcXY1VkpSTno2RVBqS1RIQUlhc01YZnN6U2pySzE5cWxGcnNpaFFRQUl6bzJPS0p1Z0hRTTN2ejlOWWdJdWFNeFZNbFNaR0xhcGk5YzkvS0tuclg5Q1hIMEp4ZldXMkJSdEdHcndsSEdTd29keW8vTmMzMEFDdFV0L05jakNIMThCREo1eStCTmdNdGREZnhoYlF2cFBseS9NbW02RE1mdnRleDBySjJpZHlaM2NZRy9YMG1zaUtmWVhaOW9ENldwQTkvZmV0cDcwYkw3K1hrUVVVQXRBYjNHMlFFeWc1NW9TaUVYdVdsWnNUdEF5LzdYUTJGQ3JETDhTWjUwbC95WkxaUjJDMGFMVHJNRmYxSU5pZ1NsTy9GRVkrU3BaYkN3N3hDQjBHTWxBVGFCOXRldmhKS3hRWTc3eVRjbW50VU91eFlWRzhQT24xcXgyWHBxZi9SNitRNEJ3NTE4anFlVExkWTNpb1dOZHR1MTlSbW5mRGc4eFkyWDhZOXcwdEIyQ0JWaVgwb2ZSbXljbXlDVmRScXhEQ08yNTlhYUFQRjBUTGk1L3dQYldjMXZscm94WWRUdUVrSG9YVEEwVWdLNy9wTFZPLzZsUGMydGxpTnpwS3UxY2czZTF3MkJCVXk4TTdjVUk1M0V2cHVEdER0U3dKVVhaaTVya0pzYmk5cTZseEVqSjdVSXNQcTVlWU0rNXJCU2VOM3gzVWI5RDFkZjU3a3F0SFdaa1lNeWVadzlDSGdMVSt5WXhEc01vZENLOG1qN1F1S1ltS0hQNTZCMEE2cjcxZGl5a3Irb0grcWY4bnhTUXFYNEZTKzV2QjJvR056V0NhZjhSVkZNcnd5OVIyMTgwdTRqUHJqSVdIRHVoQzhyZlllZG1nNzNyV3A4OXI0VEdoeVUvM0NPUUhVamdtdGMvM1FJVklTK3ZzQ3FmU2c2WEJLOElBQnpVUG85RXk4R1c1a3lwcDd4NnR4dTB3SzdNdXBoMWlLV3N4YmNTZFVkNjRMT3U0ZzhMNXF1R1lPQU94MWVtWGVEcExMM09JYnZ5WmVhMEhtTmI0Sy9ldUtEUzNzODVEQnJ5cE53M0tpZkVidE1tTUh5QlRhU0RlajRqNExYU0xRVG1KZ2tDcTAvSFMweHFLMGJlY3Q2aGtzQjMvV2NUbzhZMngvcmprSEE2dXgyOTQxTHBpMnRicXZQdEwyYW5UY0wyc2ZPL1NEOWdFMjY2Z0xyajBlTmpxZzFWdng0OUZVdHBRc3ptRm5RbVdOU0syVWpXZ3JhTjYyK1E0WENsMmpadTQ4UXQ5VnZaN1RDUytGM2RTcEVBekdndVVWRGw4T0hNTmNuckc5cHJUZ1ZiMWRKZDh6YmlXZlltdEdpMHhvYmFmZ1VVVm9WUnBvdDdURXduam5RN3dGNGhzL21pOTBaVktrWnNsbTJPbzJ6U1NoaFpwZDE3N1lsdGJQK0J2Q0RZdmFqTG1iV1h5UnhQaFBDQi95WGwySWJyeCsrekllMkw0bDU5OStFcmF1cjVtckFIZTNUWFYzY1BickYxZnVUSURIdzRvelZOR09RS3JvNUlGU05WaS9HQnhyWDZpYThBNXpuMjJkVU1QNklhY3k4ZG85K1VCckoxMzRoK0t2ZTBhd2NydE1VWVlkbURORGMrcEpveTBSNk1MTnI1VTJYS2k0dG1IU3lsZFhtcUpKa21xdllyZ0tqUEkvVW16d1B0Ry91cEFocnBJUFhzRDZmNUdaNXB2SXZFSUJaclRZMjVNcWlaOGVlNEtTWjhDV2lXdDQwMm9jdmlRc3JaMFhOUWU5MEFCM2FNdExmZ004c0o5NmI5WmREQ2ttd0ErVjF0VDhhUTFYWkFhVVFtUWw4ODI1VjJqTUwwQWZSVkNjTXZSTFZpK2x1MjEwd2lwQ2VLcUJDaEpQYVVpS2xZeEtSNytXTWRqSHp1eGNoVEtoZWpxN29rMTU0c2JlM21yVGsreEFEY3NoTDZJNnF5dFdqYVJ0d2RpaG5PS3ptVFZ6enVJNUhtemN0dURpVitvQkprbUZlMEtQVWtmQXVWOVlBVHdDK3RscU1BY2J1OCtxZFRzeHpYTisrYlhvNHY5WkdZQ2FQeUc4Nm01S3pkek0xdHRIcUxUOTd5b0xicEhlUTd5a3Y3ZWVaRGhoVkhiSGdqY2hMS085em43eU5rUWlPdkZ1OXdTSWg0TVQ1RU5rU0VjZUw0cEJPOWxnKzhnRnQ0VnVKWTh3QXd1SkhXUms1SnpDbFNQWmxXTzlBWjRndVYzSm01Zkl2YWtTdkhUV3hldGtWbldLSm1PT295YTZpVXVYNXhtYWFoVkJSTEQ1R3o5eWRhaGFoandsbVJnSnl1OXRKZWdWUHFvbThRWUF0aDJLK2Q0U0h3TWtubitvNlY5eDhWblFDMk9QejdGOURENHpKMmRNQjVUeTdwRVNEMDM1UVdPNnZZTmkzS251eis4VDBvNHJKUDFJakZmbGFucTFTY0dhWERrRjRKTjREbC83Z1JiZW1oRGlDSnY4MUNDSzVhSG9GUWY2OG9pRGZhaklvQ3R1b0RhU0huL25HUlUxM29XNE1xZDkvamJ1OVhJOEJoYmJzdE5mT1hiQmxzb0RjSmNGZTFPMDRSZnZQeHVmZlpMZ1JMZE9OTU1jZlF2R25BbjJGMzZGNm5ISmI5NXV0Z2NnRStzaDlNVEJnRUhvZDRkSVB3VlZ0OWpUeC9xMmlOWVdyNmpGNWlKYWlhdHJZb1FycmNybnVyODJ6SGo5UUpmdS9Fb053MWdqRWNld1djSU5JcUpqZzlieXRNZC9wVnhHNUNuMnJSUnJEVHRCSTBTWHphQW1EZUxHMlZ1RFRzejE4NldiSGRVR2xXNG9meUErbkUwNmlsQ2VYTFJHbllraFRHOUpLcjZPZ1AvYmFwWWNtallnT2FFZnJGSHJRYjFORlUrOUF2RlNOeXdTSUNvVzRHQyttTHY1UU4xbFA0MjhONVk1bVFKUXFhaUo3UmU2SThPU01WU283MUExVXhqaitvdjhnZ1VtS2RQNnZFeDNkRk1NdVl5cHhXMUFZQno1SGVId2hOaVFmMHR0SUhLS2ZOSkxpckN4dkRqdzNEWnRGTW5pWVJ6T0o5NUw4MWhBc0VaREdNZ1RZQ1d0eXRKZ3JMZHJIZ0JzY3ovQ0NmVk16eG9VU1F2ekRQb000SDVTdWVSVjBoUGI4ZWU4bzJobjA0VVBLTE9Oc0pHdEpHTW1jcldPRXZkTzBtQVFVREdIYkNndWVZTXFQWHFIN25iRFA3c3hoMHcrU0V2RVVNT0c1MDVGSzdLUmVSNWhlaE9BSEFsUnBtR3ZVd1MyUGk4T21yaUNIN3hJTTNkMjQwOUdGemxYRmtpaDB3M2RqUW1QT0Vma3J4ajBJMFZzZWd2bllYek9sc200UHJyeW14SUJZSWFvbVI5NS9pRGZQWGt0NXhxeHFOeTZSL1dVRTFKV2NIN21OOWJ2V3pkeWp4OC9QODZsbkIzbm5kRFljaGlZVC9wWmhaQmJRL1lLTTM1T1UzUkdJNVFDNmY1MFZkMFVOSTBybjkzRkhJRTROdU5FY3k3bFZzcVk5dlk5WTdyaDBhOXZOZjNGaFNpWWlGQ0ZaMlVqVlFUZFd1ckRmSkwwL1oxUjFvbEJXcVJEOU1IZEJ5VXdjWE8zdHUxSENwWU1XQmd4U2tmRXM0Wk1SSmg5T3lNeVdCVHRWVHlYaERpbm9qWU5nenpTc2xBQkhQWmJIQ0JEcEVFaWxuMHJveEppR1E5NVphelp3alNBZEdVL3lSQU1kdS9zL2dZSFlGcVdEbmRES1IrUUVhaGFDUVRvaEt1NTNWN0hwMmtmdkhSU3NQam5QTkFBWlREWVlOSnRISXBNaUVqWjVoN3hhL0ZvL1o2dWNnSnVOc0tSdEQwUXBQRE5abGNyL1huZGMvZ21qcFN3Vi9NR2o4VkJFTVpYb0NLSllnTDQxd2JGM2FKN0VHK2hmUGowaUlyeXpSZDFlVjhRMmsybFRWeUYwY2hGWkV3YnptWHNtMHViWi9RRjkrU1JKZlkxQmt0clRGKzl5dmtmS3pESE9vcFNsNFZVM2ZWbzZsbVZudXNQdGRyRmNnN3NWa3hIeWMvU3NMbzJxUElCZm5HWnpnWHMvSTRwV0YraWVNWmFIVUhFZUJwd2xiZEl1cXorNHFDWU1aR2N3OHFWeXRFbzFmT1RQZ1hWelc1NHJoeWd5RVl2WWhMbVlIU1lxNi9QRFhpZGtDQy9TRHRCbHVvYzR1dEh0R3YxSmFaYnhjVTlKejZSMUUrRzg3UnNhTUZreFhJUFg3L01CbTF0YW10c2FxVG9zMnBMOWttT2pIQXV3L0pIL1Fqc0pmRmRWWDJnYnV2WFdkbEZWclRpUGswSkVlQWtHYnlHTm1YMm5YMm4rZ0Zvb1hhL2FhVnNTQmxmL0paZlptdXVPemRrbGxBSDVpYisrNXcyWnQ0cVNWRHMveWRoa1lVOEVmVGl4aFNqaFJyVVhjcHB0bVROMFBkbWJmQTE4RG11cTBkS2l3enM4TG1wL3k2WGNicnJqZTY4eHFybFBuRTJaRW5jMndsRS9MUUErc1EwcDlVZXhQN2lrSUF0SmtYRHJyTjE3dnljbnQrZEFSY053VWQvenFTVXZtWmpnMDBLQjQzNEJCS1J4NVE2anpTTnBobG9ja2p3bDJyUDNCYlhRZWxRcmljUFpOd3d5Zno5L1dIN1M5dzAxQllIckk3Ym16M1VPUGVjWUpyeXRTT2R2RTJjYlo4aTJ2VjROYjIzT2c0eVZMTGM4VHVGSXhaeGJ5MWpGK2E1NnJzdVpIRlFxUGs1Smw2bWlyWXU5ZVM3YXdJayt3TG53YW4raWI1dzFzUFFaL3FQSFdSdk16bk0wUHVoa3ZuK3laWW4yc3dZaVJRMGJMcUtUUlBZRGVVdzEyMjRPOFg3MEJHTkJMVGhxN043Tjk2cVp1SXBTa2F1UjJTRmJPNitEZ2t3N2hhZXI2QW93bzdhYkFDMUlmeUhBZ1hNMFJtdW9QREw5S0QrSlZab00vbUQyQnZ0SlptelEyOGI0eThmejdYV2ZrRXZMa2gxb3JCMVM0ZWQ4ZXhpVjFPenErc1JJcUhCRml3MEdqZ2tiaTV0OUY3d3BEZmZ4VWVHRGt1VnVaaXBXTGh6Z3A1L09yejlCNmpKYXJiQU1sa0lZZnduWWdnWXdOSldpMjNoWFJ5ZzZlRUs1VjhqZFFIR2VzaE5TRkg1azJMQ1FlQ2pwRm5kQWc4YVBwdkVKaW1lMDR0SElIamdCaVlITnhPZXFQRlMvWDFLSnJqOTc0aWhHM21Ec0V3RitVbnFKdHFsTStLTHF1bjZabmVjU2ExeEJ5dUJHRlBOUllFTHhpdlRvbzdEVkY4cTBTYnFUMXlFaFhMd1JqLzZuNTliOXdBYjJzWEh4ZWhsR003Vk1QZUhmcGZVUjgvU2NJSk10OCt6NmRPWjBaamtOOW9YN0c3amNnaGlEV28veGIweWNZUnFNOTMzQXBYYVVkbUxQcWIzeURBbktFMCtQRngyTjJoYk9KTTNNc0hZRXlkUEVXZ2tjLzF5ZCt0NHZjQW5TNjgyZXJId2Y2RUEveGUvSW1KZFNSVjZaZVNRK0RoemtiRDlEdU80K0VaNDByK1RLZHFldVRzMENhd1A3NmhybDBiYWk5bm5WcWs3UU9ZZmJ3Y1RlVHIvWXUwVjZrQkUzbEhyRnM0K2ZGeG0rT2VFNURtbStTcXBIdFVxZEEyU3hIbjlYWVBJS2hNYW00L21ZcGIyc3VUTHVvTWtGcXBKb3R4TjZlME5xYlQyNGZKRnVLeVVpUkU0eWFzMHpJcFVrUGtNUUVpbVhZeFRIUCtZYUxGcGo3b2J2TFpMVnBUNlFaY1NsUkgyNEtDUUg3Y3dPcWU1SVBCa2tzZjhQL1RLdjQyZm9YMS9NcHN0SUZjMGI5MkpOZytPNVZ3ZTB0QlBpd0YwV0hweWcwdk1HWnVpcjBvckV3b1VHUWkxaG5PU3ltYm1hZ1hDSjlOMlB0UDYwWWdsbXMrZmFORlhacnlkMGdWRDlNeUtlSklDejB6TXY1RmhhUXIyTjdzcFN0ZDRyS1F3cEdscCtkLzMxT1crMXdzb3h6ZEZHMlFwK3M5OHlUbTF5ZTlmS2xjdmVwWjVTaDlmR1JsS2NVamdwY0VDZlZzTmxNZTJBUmZGU0JQVWg4SkZ5c2xJUmF2bmdaa3FkV2F1SHRnOHZIcFdybTAzSjBYcVhZeUx3MTQzRmJkcDdNSENmSUE5SGMrUU11SXZaeFRUNmFrWW5wRUJSeGZIdHZFZXZkZUI4QldJL3pZK0Z2TDRRSnFGNjBIVW45ZkxXQSthb203R1JoVHR5VHByd1A4c0xBNTZ4dktyaXRGajdUYVlpSCtzelVwcW1PcmxkYVo2REZaVStWZzREUDcxRjAvSEI1bVMvdytuMDhEY1V0ejI4eUJZbTJFNXZKbUtkbXgzRU1DcE50UVlvMnJzczIyV1lZdEFhd016eDBjRFZ1Z20vdFUxSmx4SC9ia0lUMTl6TTR2bEhra1FwcXlESUUxWHZCK1B6ZjlyV3VoQ2J0TnVkNUpmcm5RNUFzQjNGSlNON3BmaUxjWitidnQ1eUxJaTQxZUN4L2hIMGVWSkwrTTdXMC9hT0JBbHBpY3JsQytSNS9aYlBhdTdWKzBSbmlXSEJrU2V4N3pDWkFvbktoZ1RMbVhsUmZpNmdPMUZFZG9mVE9oVG5qNUFqMXN6SExFdjRIU1RwS2VoWGpmRWRGZ2kzRXorNjg5bDF5TWdIV3lGaGgvQkxWaFVsdzJHZ2tRRlNsQ05LbVBmOW9NMUhEZjRjajdKWFFCdVRTaVIrQjBBUTgzTFJPVGs2aThRRWRkL2JBVXFDREJzOHJqZ1hsNnlOOEtQN0JQaG9HVUNhVDl1UnhLNU5xZGVoQk0xaFJ6VEt5MHlCeHZ6czNDRWZHK2srWHVJNHNXeGREalZBVDNIV1FybExwTGZiNDFlZmdESEswNmxQWDVmOFJIc0tqMzRhdlZ5K0JjV2swNVJxWGJXS240Q0FnSURubjFRQTBkcDhiZ1VoeGxTeUFHNHBMb3JNOHRPSlQ3K0l6OVNsQXhFSGFRWk1mMElWVFNhOGNKanJvb0tuUDFZc2tsbVNjcmdVdEpwc1ZwUTVTV2FvV080bnFvV1lFK2ZzWFJzaEJpQ1dPT0JrODJrSm1hSzBHTVozUDNiRTJQVFAxQzIvRDNJNCsxcVBOT2hNTnExOFFxc3FDcy9hZHp0emZwdzNGd1NBSzhjMHdXRHhUbE84Mld1NThUdmpYc2lpdjJmVXVhQjNJcUJ0akVvcjZqRTNqZDlGUGtHdmR3WmN0Tm5ISGozK0RBSkRoOERFemJFUGh3YUV2VVdrYUNaTXlvaW5tVWN5Wkd2WG55U09rSHBURUZpK2lzY0tHQ0dRdmd0djdTMDVEWXlVbVBPVFVZWGxVVnRNUFE4QVBLekxDMGdPdllIbzlFdDROUGZiYXo3MDJkazNZWno5YnNwVkVqbXkyOVRvTDRLSHJ1Zm0zZElKK2NlWkNpL2ZLSEZWdC84R1crQUZPekJ0YVdYQTJHYiszWlFJRTd1QzNIYUp2b3AvNE9PcWk5a2xxcEpCRXR4enVCU1k1eUxCVEJYelB2MXpobm5vQnUxQWhVNGU1ZmtBbWgwQk9jNFppa3dSTkZMeEhsZTNjdUZEc0NJUXpxcWVnWCtYcXpFTzlXNUVadytjREUvZ05rM3FGclpnY0h4dCt4RzFwdmdRZThlejQzWEV3MkZkWlkxVlpRaGMyS2owSm1TUU5KY1Y5WDV0Z1BnQXY0cFVQdW40NkhFQUJXT2p3ZTFJRGRoYjExN2NoUHg4MEhVYnBWTTRHUlFqOGY5S3JENGNVM2xjZGFTSzRubzR5a1pNRnp1eVFqWHRLTTdVWk01d2tJRkZxU1hWTSsxMVFoa2x0eWJXOEdDQTVONFRrNVg5U3RuWmhNMjN2ZWF2aHpYTXdGeWtkNzlYanBEeGNNeE9sVjA0SEdNUktQNUJCUDRzczVrTHorNUJZM2ZISkxlOEl5VnJOQ1pXc21HZUgwMy9YVFpPU1M0Sno5cURpS3ArRHpWd2VGQ3JkTURLVkZWOGZ0UWptQnBBUFY4UnovSmZoOHBVYnMvTFBoeGpxNU5aMXFkVXpVMmdvVHkxZDFlc3pFSjBZWlZPR1BzeXFHZW4rY2hvWnpsbVNWWTNJMXpuMDd6VFk1UXZFdWVYNEx0QXVaS1F1cFBzaExoWFlxeHRyMDhSbEpDT0Z1ZHg0MWcxMEVJOThsRmw3Vy8xU1UrMmhRWGZLOGl0STZnSGxTb0tRVGpoZ1E3Njh1WHVVMmhJYXhsUmg0ZHNxVzBrK01Ld0t5SU8zbDZWMTJRaGpEVXhKWmh1S0N2cVVYMFgyNTBYdm05N0p6L3lrYkNzYjFIVkpTQnk0a3pPZzZYOGRMKzYwQ29odXlPMFlqazBweFdBbFh6RE5QRS9jYlBQb2NIeU83SjJiaFYrTUpTYjVmb1doczcxZ3pRbHRxKzF1cW9FVTZYRE1MMllXRk8yS0VEN1laZGorTDlNREt5LzZGYnFlcVZjcmtBNGZpL0hQaW5FR0d1TTBER1EwamR1QzloYURZSHN0d2ljSzhocHozdXFvSFZXUDVvZzdMVzU3VGxnYWtvUDZJeVNqV011a3hmK3Z6M2NWczJiVnR2dGFTVXplRjNmSFhxMHNSYVNNTWp4VHNLdVNJT044VUtsMjBzYzB4RnJrNW56NlYwbENSTmVSNnBPV3lvcS9ZQUdDbUpsc21hZUZWaFhjR2dwaG1xblY1UFRCMVBkSGVUcHNuYnNtZkNqcVlIOFlvU3dod2ZNbGVTVUhXZzJYTWpIV2JaS281R003L0MrVEpzU2FscVNGd2FEZ0hGVjZlUlh1ZDBzM1hOS3ZOUFp0QzVPQi9GczBIOUVZMlpEZ29BZUFnWlZVTGdpTktJYzNFenRYNWVmSTliUTVEV0hPMDBkVmxFaE1IWFVRcDJKSmhGaGc3ZDl2M2UwUlRoRENpUU11Q1pUY1pGQWZHSGdZaGRyd0UxRnEzNk5wOTIwVU5NTkZmU1dNUzVBQUpoRFlDU2dRWUxhVzFzM2RiZHNJWXd6dWU5SFJnb0M1dzYxcVVUdE9tb3VrYlc3K2VFbDdzSDdWR0dhOTNoOUg5Tjk0ZlVZTS9FT2p3cHlyZUhBRlFoS1pISFAzc3FoSDIvVXlDMm8vZnhsYndPelR3K2JrMTIrYysrSVZObFBldjZmZHdjV2dxZllQWWdWMEFySTR6MW96Q29HWTloMVVHT2wvNEpLeXg4Qy9tV3laK1JMUmQ2UGZMTEMwcmNMbE02RkFWcUVlM1g0ZFdkcm9xaHBNQWdYZWlaSVoxTzBESUk0WjZmVDdKb1haVkNCbUxRbGhUWW1abE9JMnliSDRhRGptbGVKZEJmMGgwM252aVFWcWUydExyaTNuTlEyZnIrY1VDZnNYL3lNaU90dHFCSk0wWTRpWEV6MjZxKzJoTVh4MDRpbDBDVmw3TFpZWVp3Nk5TWlp5clVJVGtscTA3MGdBSnNjV204VFZrWW04VXZLSmEvenRCVTl2ZXgvNjlkK094WTAxaGcxbExjaHF3NVRqbEdyRUJxV3NHbjVRdVVPTDFSZDVYR2RZSnJ4NmRVV3NwVDB0L3RtYnkxZ3pwaE81TkdrdzBDcjBNeDVzVm5wK2toVDlBUW52MWkrSXp0bkxzS2x6eUZjYWpha0FnbkhncFlocXhlSGFodXorSEpKQnlsNVRYd2l4czdpSGxJbDk2aVlYbVhlakFONlB4SmpicWczZU11b0RVakkyT3IxV1N5RmRqWk9Ta1VoREJHSUZ6M1k1ZzZvYnJiY0N3Yk5OcmhuNzFzakZOWHdWYjFZMnk4ZWVsRzZFTFIvT3RSZ0d6OFNLeTg5N0l1dEVOTksvbXFtWWNPWW10WU5ZUHE0NzVZa0xIK1ZNSjl4VmlCMTJ2VnoyVVBkU0QrYW9qenBTM0tLZjhpYS9JMTdVTFY2OTVIcUdZZjFFRFlrSHJXQnh6S3R5SFluMGlaNDRVTUd5cm9GYzQ1RWNKUnRNQkY4M0duTlkxc0tXc1JOUm9NaTk4cnI5em9sK0ViTThtNWNodGpFMTBrd1RJallZbUdsTTZ3LzlWS3JqWnhlcERKcXNrTmJXMURtRnI1ek9pNkdHR0s0V1pKYzdnNkZ4MmZGTFh4WTFBMllkZGNnZWFoYjMxdWVOUDNNT2M0eGRFMjFOMmw0WHg1YmVhb2E5ZnJrK2VHWnh0OXNWZWluL0JUQ0s2M0cwZTRzaUJhUXZkcDNpNk9kNWVjQTJadnZnWHJ3MmdpejA2N2xqd3N1ajhmeWRTcmxiZTFlZzZDTkxsdG1IUTBnQlJpYTVUQnRpdXlEb1RzS2plV0x0UmY5eDBvNVJDeWJ6ZU9RK0FmdHB4WUEvMXpTL1JGVnZpeVJaY2ttbTNRaVpVSE4xR0xqaW5Jb0FWMlg2TWlnMGVkR1h5YjRWRU1VUG1rSTBsVjZDNy9BWk5EbEVrUGJCblBzTE9zR09pblhFT3VqN2hhQ3BLeUNHRHR2cURtWXB0a1YzNGVmeCtKakx2OTBRa0t2bzZrM1lCSmNBUFNMd1YzOWc5WGhld2JDVXZ5eEtIMGFNbGo1SHprSjl4UEZxTmV3TWRCVWVJc21FSkhQMzc1ZzREVkFOR2JTMjcvdVl1ODR1VWFsdC8wLzA2RUlnOUs2eWR3cCtDeGpWUWtRNU00c21Oai9LcE5TclVGdjZzN2p3YmVUcmdSdTU3ZXhsNHpCUFJFajdmY1lWYkZQamU1Yk5IT3J1Ym9IRXZxZDJ1aU1ocm0zaW12aGVnT1FaWE53K0FwWXBIUUMrN1hoNjdGZmRUZ043NVRlZ1Y3YXV0bmpxQTZLSjlxM0I4NFBtUjZjNkE5cTBpNFlCc0RPU0NjbjNLa0g0UlFOWTQ2UU5pbzdlQW5lSHVHQTd2NElKSjlhOWNvN3RDMno1dkxEblA5SlN0QkFqQXFMZGpzR3JSMTJhSGdpR0xkQmhJTHp3dmhUaEhoNDZUM1FBOFMyOGdlSXhZb1JQdGNDeEF0ZGRKeGpTbHhRMzJWdDVvMVV3NHlTYXFBTjJ5WTIwRWFwb0FVQ3BHd0lDWWNuY3pCb04zaVowN2g3WUx3dm1xTU1JRWNwU1EweDg5Mk4xeDJoQnE2bXgySTFIN1VhckRZSExGREMxLzlrYUwyalFnNDllU1RPVTNyUlpTTE5tSWNLWWlRd25FL0NzQ0Zra0tnazU5MTV6b0VkQnlreHA1NzFsakFEVThnNVhMYy8vcEdFblNPY0Rpb2F2bWlXdHJIRXJJdHJuc216Y0FqdEMrZ3RydXUzT20vL0plcTQ5Y2poWG5UaCt0T0dLc09ldWNTUkFVZ2UwRUdqK2ZxWEh1dlQ5K3AxWVZqMGd6aEpTNzZCbmhZcktpeHhuemVOaVpvdWtPalY2NUZ5L3dHZmFyb2ZUTHNnRmQxMWh5VGdpOTIybUl5RUxvS2syNXhDanNLU3hadWRpMVNJV3hhVlBuVGF1RVBLbUsvT3JFQkpYM25oSXhkR3BLTEw5WkdsaS85eUJKY1gxc2tkQ0M1TEl4UEk0NmpUY1NhM0ZqbERJMjNlbTY0cGs5dFhKM0hRcnNwMlhGbnpxeGJpaThPS2FwTVZWZTZqRkN4U0M4Zmc2NUpBeVBvMXlBUDhiVWpZKzNiL0NUWEIrd2FsUkVqR29jMHk4UXV6cDJ5VW9MdlJOUnJDcjBwcmF5YkJXTWJScmJSWXd0ekoxYm5vRGIzN0pkNmVNRUFsMlJjbGQzZmdKc3Q5MWpNbVJoS0ZOR1pkTXNWcloxMlZkVlN0aDRBTHA0d3p4ZCtFMnV6U0k1RC9BT29GS3lHUWdvSGdPVmh5YitoVGJ0aFRvS2V2c05QWE1KZ004VjcraGIrbXoxLzFsRjVyRTlnRHgyZ2dCU3ViRWtESDgrVGlyelNEN3dPMm9hTk5CV2NwQmo4OE5reVRoNzUxUFNKNWZLbDBhaXhjcXEzMmdNZDlEVnlkRDJOM1FxNXhWMnpRZ2dXTEFpdkcrNmIzbmlXZWdpa0swRi8rUkpMcGRGa0w1VmpsYXV3RHdEYXoyR2NlZlhFa085bjU1N1ZwbXl3V3AxeXVqamdrL0hOa3M0NzllRVhveFBGQVBaYVRncDRJdmRaWDBtQ2NpRVZUbFpUNFJzREJIb3VkT3I3bnAvbTVtNFdYc2tGeFRuZG9NbmFWNUkzOVpTbEh6b2ZzMlUvOEZyNnlxRyswMCtzc08rdGsrMjArbjFGSDM3ZEsrMWRBbVhvaXdCbUZBbHNNb1JsVmh2VktaV2tibUdXR0gwSW9uYVJoSDFFTjY2aEpZUEdPbTFKNzRRUTBYbmRnMXBoNGdMYXdtR2Y1VjNJUmNyM3hvWHFRelVwNC96KzlJT0Y3YnJGUzZOS0pKb3RlVzBXNjRGT0l5YWpCaWNxNEd2VUpxcTlXT1JwRkhRSnlaY3o3cUhHd0hzMEExK2JoVWZvcHBoaU1EVllldkpJY2dHZytGM2o0dVZPc2JaNnJiaER5Sm5hRE95K0p3dURTRXRQL0h5bGRmZzg0VmNjZVE2R0NMWkl6bmhPUGJVTEtnWStXOW1IbU10TTNFMHpyVVEweC9ySjBGK2JVMUl3UzZ3MXBFSWlEc05jNm9VY1UxUjB6S3JHZThYNisvbkxJejltcklhR1IxclA4eE1HOXVuazgyMVJWZUtPWkgzUmRGVGpUVlpiY0NKUnFsc3Qrb3ZOOFQwRU0vajM2d1dJM2U1TGNTWmRaU1haM1QyenFWSERGc2JXV2lBOTdwWHhhZGViZ3lkQVdGTHcrdkZTaldhN1VibTFaeFZpUzZkSlNFR1JOVkRiMWhZL0tCMFgrbnVYUmNveEZwOENucGtYUzFOdzNGb2FRM29adVpWdHo1ZXV4Y29Kei9TWmMvZHJLT0Q2Y1YzajZuY0doRkppTVJzMlQ1S3p2dE5RbzIwZTdkL2VuSm1IZ1FCNlkydmtIbEIxRFYvcWVZTFpJQzBJTDYvc0dLZG52bnZ1VFdIaVEyRUN6VkJaQkZ3VGU3UGs5VGhlZ3hZNFlNQ0w1SFFpei95T3hHTUU3TkR6S2xadlo3dW5rWDVnMVlwNTB5emQvVTJmWlF0T21vV0dFaklVSUhqRGlSaFo1bVpqYUQ3VGc5cDhYd2x4V3cyR3ZJT1N6YS95anFtWFpQUmFtbWIzZzZRWC9XeUpTV2FlWjVwQmlIZ04wTXdDeXlsMjVFY3hGZ1hsKzRHeUs3RGNrNVgwUW5yelhwYU9zb1JNb2JhNWNvQ2JneVdyaDE1RjZIcU5vSTJmNmxNYUM4OCtrZWw2cDdTd08zMTFwelRoaytrZ0xYQjBMbkliUUd5VUxIZG05dys0VmNvRXhWTlIvRm5QaFljdHQ2N0c5ck1oNnVORUV3ZVNNSlgxeFg4Wi9DK1JXdlZ6cHVDekc1SkJ1ZTlOaWs2Sjdyd3hLZVFPdTl6c2JDZVY2d2MwOTN2eWtOMHZHUzRmL0xSeGduMjhIYmJWMzRSenFyVGVHYnA5dzIwVmo0bnlaSkRIWkJpa21IZFhjalEvYW5OQXlCWkVLVUZ1VFpyZWZScTlZMXJpTXZDZkQ2OE01L0RKZlpoM1ZRRlFGbzdLSTArQlRSUnJKV0VuMm9jV2p4ZE5MMlFGdVZnK2NEdm9vWS9DdndTK0lBMEtxRDdsOHRldDRKcjZoOHFDODlncDNvdHRnaWhQUzJlVUtYWWhRU090dVREaEJNbjZVWWZMYXlZY1BPZ2FDL2sxSlRrMW5OeXhpWkRLNTBjeXI4V3AxTDVvU0ZCVllpVFFTM2ZiS3hwL1VvemNzWHBlWWxHWHRMVGdhcVcveHBZeDIyQWxnMnlGeVQzZFhjaitOMVZwVnRoM2Q5OUFxajkwaWpWS2dacWFXUE9vVmZyeUFnQjNWcGhvRUZESjVFejZoeG5veXdpMjhMZWhKeWVtY2JLVHcvTXdCN0xPUmwwMUhHN3ZKNG9YVXQyZExVejdab2wvWXhZbHl1UzlWMWt4bFpRL2lZbDdNNHJpTkRRSXc1NVRyV0IxZjZ0dGsxdGw1bkFTVjlsdHgrU2RkRVRPMVJYMndzL0ljaG94VldyYTdjRW1WNW9la3N3Z1IrOVdWNjM5VTNqZlJiMnlTWTJPNy9vTC9PbFk5N3hLbURHSVpNZWhLczNqbjFLV08vWjMyVHZXWmJPUjRHanRneGh4bUV3WENsTGloS3hKaEVSdzJVMFFVcmZyR2drcGhwbkdGWFU3czhCVUJnZXlhbHVyUlBhTEVxQjZIdHk2SWxYaGZ1ZXZmMzM1bVo4YnFTTVRLNzg2SkU3d05KS3o2aXhRWWgzQzczWEh6ME53ZE5xTFhoNGVuZE5UeUtCLzhnQ1VBL3JJbTZUVnhpUE9ySURtZXIvaGVEdFBrbUpxOFI3N0V1NGN4aCsxWkFoVmQrVG1NTVQ1WDFkTXpaQTFMOTBhWWtTRUNxWUZOR2ZrMlo1Zlp3Wk82VlJPUmRMUHNNOUtlNUxKRDhEaTBscFdpUkxuY2RsSzFUY1FkUklIVjFLYzhhZHBGZktLam5PZVMvRWIxWHdIdXJVU2RDRWg2bzl2UU9rS0hqSEFEN0NUbHRBVm05STZTczZlYVBsbjgvQ29KdjVNTGNtMUk2YTFPbm8wbHRoNFVDWVdGeXpWVEZBZGxTV1l2N1pRMVF1aFBmSlM1cE1EY1hkc05sWVRvVi95MVZKc2hmaThnNEpDWlNXbXFEZnYyKzZEQWlmWXhiZytvNEFTSUlvcGUyVGVqT2ZxaG5vNk1wbTZLZEUvQTVsbytRalNURjJkSExwaVhmbFNWRlJia0FpWDdOdUxRa1pEYnVtb3crTnA5aE82OEx6Z0RoRm91SlQ2elcrb0pRNXdsTlhqMCthYnpreE9VMHZibVZjTVd3VDk3eFlOSHdRSFFLM1F5SGJBdEh2ZzZYQzFPemlONkNaNStwQXZRNC84d3R0K0tPOW9xMjRPckpLY0xYSkpzRGRyVEczQ29HZ1FTaFNEY0NTWUh4eE9ETFFiRFJObEpsaUNwNnRKZVFGNUlvSHF3WWZubmoyUTYrNk1sUHRneDdTSWs5RmFCYUZodmkyTXplbnN1N2RsanhxUDhKbnZMRzVMSWJVclVDUHJYa0VhMTJXRS9VYXh1SHlqSDBMeHJCVkR5ZWN2UWVncmtjSnR2S01XWUhOZWl6NTZ4ZWdQZ3J3OGhJNFEyVjQ2SGt3eVV4d3pqNm41N0VGMUMvVEFzY3g1RjhhVnovaWl6eFZMYXYzU3hnS3U3dEdmTEF6b3FKbFNKQmRvZGZma1plTElYeWpEZXBZL2MzQ0dwNVFCRlN0NS9pVUhxbnl0ckJPS2hFYmdPci9kRFEzNUZRcDlKNnBuWXpGSWgrdDcyaFZHSElJeXRIazg4V2xDOEhnMmcveUZvdFFvcVpMMjB6U0JRQit6TkgvaWVDc3FJVHQ1amdTUTlNaVlJaGRHRXdjMjRHQzIyWDRVQkJ3VW5sbldNa0xUY3ZIUVRIVGZmT2wwRHRZSzN2QUFjSVFEYStYeG85MUxkMGtPVy96Rlppa054bFRFSVRVN1djL0tybHo5VHRMOExScHY5Y3IzOUhqTTBtLzh5MVF2TXAxVnVybkxnY3lsais5em11Wm13ZUNQdk55OFNlMDFFd0ZNdTc1bkFLNjIrZ2VScEVxZHAvTlRSTDQ3V2pQVHRoenNwZVJtT0R0U00zZDdiZ1RxTGpLUWM1WGsvNUdIdWRTUmlaM2VPL3habE10VXNrWDdpbmZEOEQrQ25ZVzJOU09FQTlsMVFVcjFUbWJXZGh1b0FXVEpvTjZkUFpNTU9xZ292ZDZFdG1pZ2VDV1lLY0c3bnFXbmtLWTZoZlRNYjZPTWFFakRyR1Z3T2FvZXJBV1NwZ0N0Z3JxUXpHYXpmaGhXd3JKYTdtTGNIZHUwYUZ0dDVLNjdHUVJqdEJxS0JveG1BeVNBZ3kxN2Z6ZFFqYzhXdFRRNkQyOHU1RWVOdzlDYXlJMTFxN3daaWI1eFdyZHF2SEpNcGV0d1NyRS8yWkh6YXJBQ2JPWTF2eUtjalJjb3RtZ0pNU0x0eTdWZzM4Q3VkOFJQV3loK01sdlAvQWl0b0YrOFR2S0wxZnM2K0pSVTJkQVhWaThUR1FtUWpaS1J4cFVBc2M1cEhNOEppWm16VkNNbkkxRUZMclZUK1ZCQ01idkF1RkRNckk2cUV1WStwSWVqVXFhN2tNQmMweHVWZzBwVnU5YnUxQ1Q0RWhVWVlWMk9MNGZ0M1BXejlpT0RadkNOQk11YjZHNzhVVDlJajRtZXhNVzR1dW5DNHZqZnprMVdyQ2d0NkpXL3RuajV4cE9BSWJMUThhVS84Mjd3ak5zSmZaMU5aRzFGUUpGdXpxTG02aDNUek1relZsNXFGVUhEMkFWSTlSNWxuV2hxcVVZWXlTRm5XNGN2c3NhUnFkWmNsK0hFMjEvUDJ0UkhqTFhtUjdndHhUSXpGcHRUMUkxVjF3Ky9DZ1NlM0xOSGpTNnFZTlVWbEx6M0RNRU42OUt6aW5GK3J3RVpzMGxLTUdOdThXRlZQb1FDMDNLUzNWS3dTN2pQdXpraU0vZGp2L01XRzl6QjBpWnlXNk1PdXF4SXliZ1dTNjdsazVyZUtjRnNLTk9jOGZudkgxQkU0bVR1Vk9uRWlMd1p6ZEpYK3JGYlFpRGpwUWN2SlN1aXRwQnNRTER2T1cvejdqdDQ4RC8xdHROc09NbTlEdmRiV203bHh0aHgycC9iMGd1UHkzOEJoVjhoZ3p0YXY3eFFmOGVPVHJJbWJaQ0ltQnB1bWxGallsRlkrTkYyK3lza1djdG5XT2h0TTBUcHAyMy9JNlpWZGxINmM2L1RLN3dhaGZxRW51dnZYRWdZaVlBK3FnVjJnT09rQ0dNTGJiYlpraDZSNEpyK1lXZ0JYWE9yTFAyRENsbmdPRUN4UHVjNXpCRTN3alBYQ3pGd2YrVzRrQlg5ckduQlFrd0VtOWtITEUrcnorcU9SdnR2RXF5RW1PZjF5RUFseU9nVUU5R2pSdFlXbUw0VU5QSUV0aFUva0kxMGk4WHRZM1NSSWFGQjVtWWR3ZTF6WDZQOUdrKzJ3T2R3NUpVZ1Arako0UlNSZmI3clhzYk1RbW5lZXdIKzZBWGZHQ3BMeVYwamF5dm9FdW5aOEkzTEdiZjlSUVZ2Slo0ZkN2eWwvL20vRDJ1RWxuWlgvUUVLV0VsTDlDWWU5dnhpeERuOHZaUkk1bUVMOUs3YkJ0UVdVWjg3a0N4QVpISmNveEFnbC9oWDhyeUF0ZFM2ejZ5VFdkcTFrZG5lUmlKNWpCdGxJalorcnV2TTFEN29OQ1NWTzFGWFVtVmNSQVlHUmEzSEY0Y1lTMThIMy9rMjFzN3VNRnByOVlsNktianpiZHo1cUJrcjZXRkJtTWVTN2c4WS93RU5IWUVqUFVvK2JYZlpXRHZzcVBZbEZXc1kxbEVncVREWkNpRExnSHFaOHhEV1FoTW5ib2RMZDhud3h3dU10VmNTVlp3V1REdEFWazY1ZkJLaWJoMWpvUHBWZkJnM1Z0cE9wZThjT0VqMlBhRHRFaEl2ZVdXREs0cWxmaWlTOEIrSXlHajJzdEdMVDVBSXlrQm5aVmYwZTJyVGpuM2FHVWdlV1ZFVUZMUnRiUjd3MitqYWtBUHUzblRSeGVWWlVxbTJwU0NiYVhtWEtHc1FOZm51OTZ0QytxNDcxMEdlQUhOQmF4cWFkTkIzRC9XMVlnUjRiQVp0WWJUWHFwVCtwRHViK3c2VzdPdStSeEZWSm83bjlJcjUrM1pIbDRuM1RSWGRid1Bkc091NGlnempyNExqcXBPTXd4MnVpYlgxTDRUWUxObkN0bEZUSU05Z2NHZEU5RERCQ2FjUXJBTXFWWXp4SHpFaSs2VnE3UnNMYS96SU1xcWkwa1ZQZkJsekJRZlNKR2wwOGd4UmxQeU80dW13empTd3lmNTVFR2QyenZZWm1wd2RKd2tMM2pEVUpwaWFMZCtiakJ5NG85WHRTTlh6WXpTWkJ0RzRsNXpvUWVLUFNhL2tBemVoSmdNN0tOOVNoSnhKQW1BRmhzZGNrUkdiYWVESWZpb2VoRUlFK3MrMFBoQmtyejFZV1JaYWtBYzdMMjZoTGNMTjkyaC82aXI1UDE0bG5FWHhGUDMxakVkektlaHNkK2pMbEI2N25RVlhNd21nM3M4TE05L2xsejBoRzJ2WjlDbFFHbFBFOWRMTjR3d0VmRS80Q3YxRUVBalhiQnRqUzRldklCQW8rQ1JmWEdubnNrWGtPQjdLR1pYZHV0WVd0eElla2pqeHFsQkd4aTFnMm8wZktNVFVrSmxJc015dUZ3cWJnSk84eVc1M2x4THF3alIzTElib3FZVG8rR0cxUFpGTDd2NDlNKzFhdzkyR2RhMG9nQmdtVGpwTENGcTBJODQzRXF1TzdRNzdUbVJsQWhrdktmUTNZaXhNcDd0UW1oVGZKenduODBsQ2pDalY2QkdrNFZBNkFleXhrWlF5aFhsbjd6eTdpTXFoRW9ZckRPOUhVQmZDRG1ZbUNUOUZzSEFMZE5SczhvQ0FCcy9HNzBoZk1WWEIyYXpHeFdkOXdwZzhLczdsY3Mxa2xCVHhFbzliVVZUMUhDek5aOG5WV1pIbGpzQVZXbEJlRThLdWo4T25rMVVKNkFzZ1o3bmlTUWdkMmtNMmJFK1BuaS94UTdKUUtKMDNnNm1jOGtadnUxbkpuSzVKRFdIRlc0QnNKb3dBTi95cys1K2ZQWi9pUnBVdmJNZEFqekYrL1p1U2REQlpsTFFVWEFKM1dENFJjYUozbG04enpVdjk4VENjRGdsU1NQd3AvZkVpRjZSbjRPL1FKVFEydVkzTWVBRWs3b1FRSzBDRnhXQ1dibDFRK2FRaUQzQzNoQysyenJyL3gxUnN4ejd6cHRWYm5aK3NzTHMxUEpya2ZRNXFmWVpEWWFkK3RrZlFTRDh5WVVyRDVSQ1JPNW9VUUZVRXlXWEV5Ny9PN0k1MU4xRUkwb2xrZ3YvTk5JMFZnUzVpeG9kd3J3SEVraUhZRmphS0Z3ejRTblFnTDJlVEdPeldMS2RqdDJxd2UwcWdCRExNWU5FQm56aXp0TUFhby9IUEZjdE9OMGdwQnEwa3JwRE1vVEM2d1QzT0t1amtXUWhEVDRuSDJRM3I0VzZhS1ZXNkR1cHI2N1ZkTWd5WVU0eXFWbklrN1NjamVxV2twVEhpa1ZMOFdTaXY2cG90bk1qMExiTDhGb09MQ0dldTBBdGVJSEJtckh3cjkxRnB3dTI1SW1vTXpBdmdYNDF0VFhwL3pFSDc2Rnp6NnF2TVZNTWFmVXBPdFVXZEpvTGRadnE3Rk1mYnpHZDQ3RTR6Zk15ZFNoRE41Uk5GVlF0ZWY3bndYSWRzWVpYdFVhWGdNSm1vaHd6aW5UWnpZZHh4WUtZK1dyVW9ISTFFRDdKUlJSbStEM3paU0l0UUZDWkxVWTVmVXYvUm5oVUhTb1hRa2t6YlVpTDU4UExSbnVrZmZpWXJhRE1vTU1NSFlLc2hiU1lNd0Q0bkZCVkpNbFFBOHI5czFSUTBDQWs1Rkw0YW5QV2ZBRittVkw0bFNMdzlwdC9ZODE2cEtOVENGOFlueU9heWZEVHRtVktpOGxrVFFKeVhZOHVoa2lHVHhXZ2YzdGhRbVAwWkt6ekxvTDJGa3paeC9iT1E4d2JpSHJaWHoyWVIrSkM3eHJiRDloS0NuRUt5SCtWTnBBUnFCQk4wYmZzWE5LNEFjQnJIaFMvTnlnM1czL1dIRXNZeVFZd3Zvd0F0ZHd1SFNkS1paOU9jRDRHS09icWFRNGhCNnFjUmdNTmk4REtST0VwZ1o0bmFSRVpuWWtTY1dLTitlRHBwWHJleXJPZDVKc1F6VzlOYVpqZWZjKzI1cHVsRGZMMUZDbW1CVC9NcUtLckl0NzRTcGNOT0Q2RTdvQUplYlkzRDZPU1ZCUVhVQ0oyZlJyV1k4N3NBQW1MYnhMd01SZ283djgwb3pUTVorOWdpMWFuVXJNRStZRzJFY3RaVE9PMU1lQmh5TFN3V0Vjc3NvejVhaFdRRjBtdTJvSFBXOTFSa0R3MVREVjNrS0N1R2lMaUdDV3BrZXhJVTRsNG40cjFkcW5DY3hlY1pVbE9ObW82eXlXdGloUDBTRmRibnFlRDcyc2ViRUh0M01CdFhQOTJqSngzVWk4ZmpybmV2TXBNNFBicmI1dGVLK1J3R0lxU0NrWFhaaUp1SkpBWlgvRFJwVlN0akpESytGaVYzUStMNGk0ZE0xR0VjWUxNeE00ZERORWpGeStFK0FXaEdPb0tiaXByaU1XQ2l4QWZWRHYzdkN6SmVYMXN0OEhwdjlkWWVCaGJXUmdSa0k5OGlvU1psakgzOXF6MUpEbXFRNzhCbHAzRHNPOFZwR0VHb2ZydWE2OGRwY2czV3ZpcjUwT1dlNFBXVGVHaFo1bjJlMGNZYU15YTgvTDJwQ1pma2ZkbEFKUVFUTlZIWkdha3pCMTB6QUxOY0RwUlFjdzZjaGhDNlMzaWx5ekQ2d2VIK01MbFJlMlhpMXBBTzYxWDZncEUxV2NjeUdzZjhlUC9RUmZlUlNBcVRXL3RrZHpXckQ3NXB0TmpBTDR3TEs0SkJ6cENTYXE2NnRzNVlpelhaVkZRZHVjUlIyNUxOc1g5bEsvcXJtcHNiSENBNmwydUE1bDFqUkp3SXZmbWU4WC9RbWcxOHAwYnAzQ3ptQ285cS9PMGVDak5JV2ljdXFQMy9LaFlYTStBRWJTcWI1UDdGL3VaVGhFOVZHR3k3REs3NS93c2oyMXRHMHFkS3ZwOHdPT3MxaUF1QjR5dGNlTXdHZUV5MlU0VWl4ZUJSZE4rWHJ1Nk9IeFpIdytQS2dIVGkzMkdLWExZekhjT0VYejdadFh5Y3RNcG5VWVd5RE5rcHpIWEM5enIrK3FpMUZqc2p4dHAxU1B5a2lqQlhta1dyUVhqVkowUmJFMjY1Wk1pMkpiQ2ZnVmtQa0RLendwZEFhNk81eUE5YU9oY1U2c2J6MDFRcU1zNVpkZmhuZkEwblRMUDJuV0tVU0tHQms3RGRrYnRVancvbUQ2c1FxMllBSTBESjR6L0Y0YXBwZHZ1RFJTNjU3REU4Vy9qdzB0T3ZaM0poYzJWUSs4b0E5L2V3aTRuc0FHNTNoZnZXZG5GSnVmbjIvU2M0bHZkWjVhR01CY3pzR1B6OGxIdDNJK0VMemlqK2hmOUd5WHVvQnJXQlVIYTAyQmx5VmsxcEMwSnJybFBya3JIa0wzeWxXbUtwVkx2NnpXMDlNaU1VaWJ5bHpmd3pYTGZaamh6dlBYdEZDeDhsUkc1eU85d0ZoZWl0cFhacnhGRTBGaE5rMmxMZEp0dStTN1JjWlpMTGlBQkxNWG84Zm92VWNNTDhjQjkwSG5CSDkrSnhrWGZIR2N6WVBZa3ZJNlB6VXU5SmlrT044dlRBWnlBNWM5YjYvZkhFT240WDhyZURnYWIyR0c1WGFCVVFlcnphci9teERUb09xVzdEZ0x2TE1xYXNnYnJaYktXY3I2SHh0NnJrY2Npb2I1V25ERWR0UkJaWklyT29xZ290L1k3UXdVZDV1ODAzSHplOWVSQ3IxNHY0V2twZHBpYXdqOFkvaVBuQXZaVVpZS1lFcXgySHcvWE9aQy9RL0M5MklBcysyMjlhTytuWVhsZEZIQmlCbG5pN0hWbjB1Nk5SVVVEOVlRSG5yMnlTV3huSnYwRWNDckNZWVByYnN4SWZZNU83S3B0bk50TTZIZWs5SFRROUpnaUpCODFXTGtnWEhCT1hJcTAxMmNkNTBmN2VTenRFajRnZ21tTlB1K0g5YmhqUk55MXphbUJLQU85UmJrQTdyanNFTkFrOVhpeWtCU1VLc0JmRUl0ZnpnSjBDcXVNb2JuM0ZtZjF1V2VQZW4xYk1Md0hydDB0RDMzcDMwcEkyTGp2R3Z5Q1RsMldzcGdBbFFyTExtS0lNYlFsQjFiZWhoZzJ2c0VDNkNpSE9kekxmazBwNEJjRmU0ZzBDUG4ySkZ6K3J3emZvM3RaWEZNclRjc05xaGx1ZUl0QU1kbkVLeEdDOERrTmJEZjl5NERtWVBYNnJqZENEaVdETFJrTlNtam93R2wzNFZEeVVJU1gxYkhVT3pTNlZpN1NxdktzaVJVQVBuKzN0c2dsTlJuRm94Qm8rQUNJbnNwR0xyd0hNdUpOVkJhMDR5WHlvdk4wV1cvZndsZXNFQmZwT1BsWXgva3JpMXN0S2d1QXNONTloQnJZaWtsZzJWNFREbE1GTXlWczJXUkRCNmUrZG9CS1M5V3FFeU5wbm1tUStWcmU3UmNjK0l1OFdoWUJTMTNDTEZGTEl1SnVDWHR3cHZub3pqa2ZtSkI1K0pwbncyRDVxV3drUUdOUitYSVdkaFA5V2R4RlVvK3hzM3hlcHM3OU9DVFhKdmFxdGtUdm43Si82N3hRNmROd0NXZURIaUp6eFBtSTJsNEVyYXRHRk95eDQ3Z2Y5ZU1xTUxiWXdnNE1xOEIrM282ZlV4T1grSGxHYkp6RXJObUNFdjg1Q0NFbmlaRHd3b3pCaUhwS2o2Q1VXLzBIemJnYmR1OXZYbFJUZVNqTWdwd3lYaXdZTXdiN2tzZnJBNkQ1ZVlWQlE0cWVNbElHbDhJOTROdk9ZNSs0MzBOR001UzY0VzhyT3RrT2NjRmFvSWhvenVJTkY3RHJZdWhqcWhrMXB0N1VuMDgvTXBFaE1Kc2tmdTcyOVlRRk1MMGxTOE1FSGpreHpJYlB3cW52c3Vid09qbVFRUmdMaDNRc3dtRWdBUzBaOWR6ajFrYnAzeExnbmx6TEZqZitiL0RNUGJyby9JNHl6NlJkZU1xakk4NlRqK1gvcEtlQml5ZTdHQzJjZzJVYVhPeEpJSGxnY2pZRTI2M1lJanZ4YjkxM1JVYXhaYUR2MEYydjd5aGdDMkRVcmd1bExNcGY5ZG1JZzBtdmFnd0NEc3k3aXBKZkVLa29HcWN2N3pUelVKQnMxZ2FwTng3akZURU5oanJjZzVnQkJId3NlRzAvTHlkb0JTdTAwTENlczlXZmtxbzdaN3owZFRuZ2Q3OFJoMUZmZGZXS2JaQ0Ixc1M1WE9XR0xZQXZWYTBIbGYwZFMvaFBPUmRNbFdaZjdtZnB2MzZuUVRCUmdDQ1RKT1N1UmQzQVNQTEdXWkVaZW5YMWhTMGRPa3YzTFZERnlnYXU3OXM1a3l5cE5lOFltRVRoQzVlSVRoVnJSckE4b0t5M3VWZlA1ZitxOGVUd1k5clRFcnlwUGZCb3I4MC91SWExeExxQ0RxdXNRMFNuTWlKdXI4dStOTWhMV3k1MXdRdUt5R3BIVUlrNzR6bW1FZ0V1YVh1WUphMkt4K1dxbzdVMG55T2pXdmdJdUJZRGVHYlRvRVAwSnBmN2ROUml2MFpXbkZ3dXhUTHB6UWVBK3FMbnNxcjhEazQrdU84anBGUmc2dWl5T2tiVitaUGtqN1I5b1lqMnI0U2dINUNDU3RWcFlFZEZiL1hBWWNkMHg0eEJJYTVLTVAzdzRQSW4yaW16b3FNQTBncnZBOC9kSE4xWWlQT3Y3ZVRSeHo3Z3BET25oM042NFJtNERoYjFNc24yZktqaEZiWjV2N3h6SlphVDl6RlV4WEpXVDFkVU4wOFRlUmJJWnI2Z1JPV2NvWURqUGU3TkJEZkhWWWtrZ0JlUXJpcUEzVkx4Y2R6d3pLTEtaL1U2Q1BiSCthRllrZzJoZ1QwRnk1cVlVSHJGMHphVlU3c1VMU29PSEk0bnJMVjlHTFRlZy9rTjFDMzhrUGtBaGRBaERCSUpqeVMrajJKVHNqZ05GakhoSHIrSkRFbExPMVNHdlQ4NWloWS9zeng3OFkzNVQ5dlgxQ2huVUlEcmhTUVFJZjdONU9WVDhWVHVaQW4wMklrYXZnWXJBSVlvS3YvYkVzc09rY1BMV2Y0WnpwUmJZT1dPVFZWank0dE9PVHJLb3Znb1hwVnB6SzdnRkhYWm1vTld2K2svOFNGRzB1UVg5djNwKzkzWHNKWTB2OG1yTFJPMWhDcWdjSmhuMGE4WGZNRXhNNGYvb2NrbDdlTThjaERGMXFjTTRISzVuMGxVT0JFa2t2Sk5OUnh0eFV4TVZPeTJ5K0hyd21ZR0VQVWxwazRlRERvOTZ6dVA0NEl0bmFYdkV4Q2lOYVlhNEdlOEZNSlFza0FmTy9ZTkMvMWxHRVVqNmJYa3hjd21uakxZUWppTDVhVlBwS2VkQ0pnMzJKYnpxaTB3OU0ya0RZaUdlQ1c3cXo2R0ZnYS9JYmNWOGxhU1NxbEpOMDE0cDVjNGJsYk05cDlFOWpEbk5Hakp2dWFVRGpBcVNhcUYzUFZQbnk4am00aUV3WE5zdDVVVkZKMDF3Tjl0QUViNFAvWE8xQXN6MHhTZnVwd0M5ZldjN0M2c0VTRk9CQW9ReHZZVlV5YTRTbkljMDIxb0xNMHprZEszM0lQenVkNHp0S1hlbEErcG0wajY2MVR4d01yYVVsREM1N0twZFdUUVNHVTc3eWpiNGFUaTYxNUJpcjBSVDJDSkZWaS9aUXRHVDVnVzNiSnM5d25uRDFDVDFySUdIZDE2YzBxS1MvOTQreG1wM3E3VTVpWUxCVnhJQzFqRWw4UWlxMXQwSEo3TkppbzlydUlEOGZsUHJOWlVvZDFDZHFPaEtXd2xhWUNPWXc0Wnp5ZGFlR0R6VmM1NkczOXV2cUtuNG5RdVlXQ3ZkOTBhSVJOdUFtVnpLTWtrZENnU3lJTy9UendMOXpmWVVYVlNiay9lRWhjaGZsOTJZYUVXS2JiWTc1VXg5ZFV5T1NBa1psZm9CREtMZUZVM3ZWV1F4UVBLdDFIVDhCNHNHOXNtOUo1WmFVMGF3TnN2OFcvZG9tRHR5Mzd0RmtqR3JKRklmRmZ5NDlkRVFaUmhHdDc1T0xYQmRCQmN0RmZCM09PR3lubjg4ZEpPZmk4aUZLaVNnNDRERm5EaVNMdXNNMThkRkNObk9nYnl4MUIrSUZRbmR5bndONWd4WDU0bFlxYmkzRDk0eG90bUxuWksvOFFyVGVoMlp4elE1VUZWL21lck5sME9GcmR1MnE3SGVETEpNWDh5ckdqWG9aeXRmS3dmeGxlM1U5U2JFTW5pa29YM3lIaElqMmsvd1BTenNRcGI5VlRkYXhYM1UwcnQ0U2Q4N3hGYjBUQUZFanI0ek9oWnpmUURQZHN1bmhoTzVJZnlLSDNoVzgvMHpDYkRwRzRRQ1NnT3RGMi8rR3RKd2RRT20vQVh4WGI4MGVhVXBxeHlaNzgxcEx6cnAwL1NwV2lJWWNSNktCU2ttcFNPTHFBcmhpdDNlanRxSWJ2YTQ3QVU2dlNqOXVldU04Rk4wQVM4UWxha1VtTk85K2xKdWNPa3p1M2NwSTc3MzNtbHNtTVdVbnVmNUNaWXN3cmhTQ0x5TWJPUnlKaFErVkhld2l3bDh0MDY1bzlDNldjWGZhWmZmdXVLTkRkYnY5K1RHVCtueFVqazRKYTRMeWZEYU94OXRQZU9lSzQ2Z01OMzBJY2M0TVJFWXdpRkRRelJVdDlJVzg3eHBwWkNwRncveGVKU3o5L1RsR0E2MUw3MWxNZW15UElKNHR6emFEWWx1RXZJWHlsMEpURC9MakMvZHJiemdvb25KRkkvOXpHSnIydktITGNtVUFCbXlPNmQvUitYL0NLWVh0cUl0TkpMV050dW1zWjVKdmJab0hFdDI1TGgrcXcwa082eUhkdXFaNUx6cWpNSWV6bVRCYUZoZEJkNXkyT2F0TE9GQ2xoSVJHMHFhNDNIYUFqMnFSK3l0RzRwanVBTDByNWZXTEVZV20zYUpTQ1JWTkZvQXJnb0NpWkVGRXpCS0VhV1dLZndDWHhSQjFsM3VsbEJIcVJrbFBzb3dxSUx5TlVMek5rTlNYd3FYNzhLa3Rsc1Z0STZFZEVyTFVHNDdhckkrZmk1bzcyRnlETkJvNVBEMkthditCWjgyYTlMdG1ybU5YbXFHMTA3VFBkRHAyQkVCbmUzdTVLbzlQdjNLcVBLYkVPT0NOU1VBN05kb1dXQ1ZwY0lHYitqdTVQaXNvT0w4YXJzYzBJSWRjMmtydmoyTlpQVGtHbTJDUmRVUWNQTTVhR0FvaE9nYlRXZ3ZPenZCU0ZFeHk2VGlXSU45ZlJVbnFKdzMwdElIWFFaa3lEVHh5M1ltSzc3U1dVMzdyODhQUE9oWVBNUjA0cXNSQmsrQUJ0WHB2QStuNGM5YU1oWEQvT1M3NDVUaUhwa1gyUmUyNGhPa2ZYTTBrMHVjLzhJdXR0RGVHNm1SVGY4QlBIcmRhenRTT3FSL1pudk02QWxFZDBjaUtUY3dHSWx5d2tmd0ZUSG5ITFB4ZUVndkZ5QmFHelRBMHRCU0Iva3RsNE5kb0lnQWlDRjhaV1Y1T0FkalRCM1E1ZXJQaDNjTlVld3lhcFAycU9LOGdOTmQrZzRlRWt1WW9IaCtNaE5zdkVEQ3duZFFuTWZpenowMi9mVDQyaldQaThydnZFeGNkMmRBbkphNUQxL2lneHZQOGR6TDUrdGNxSytTS2U0VE9EK3ZTUWdBZFhQcDhMYWJrd29BendVc0s3SDVMWGd3Q1Q4S3FCZVQxcUpxc21yS21ERURnN1REYXBNZ1hVNTBCVEFtZlBnSlNaSjAxKzRtZlo0c1ZGVDFXVnJqeXcvZ0VGZFNLMnovRjhJc05DcHAxN3d0WlllVEtQdlZZUm1KS0lNbDI5T0lBcHNqZGNwWW95eGYrbmdDMDRibFBhTUlnU3ZmRVNBMjJUcHJoY3VmNWdnMy9PRXMvdEhzUWNBQzBuMWdqVzR2L0xsbUJ3VmM3K3Q2bXNsVVFHcncrS0xtRHcyVy9lQjUxUXZyU3pwVUdkK0o3Wm1ES00yaVROc1hRVE15TUNWRWh0VGJLZmZLb3Y1UGxBYmRVQXdxdGZIR3U1R3ZiblNuYmlNMGx6azdTSjhZWTFQMzRKL3NsbWVJdkM0MVhlSjVZMko2YTY1V2NCdFV3RzZibmJaZktSdlF3SnpVYkdFQ1liZHN0VFNPYmRKaE5FaExDZEFKbi8yVjJ4ZkxxMTBMRHJGR2hMQi9PVk0wQ2UzMm44VnRoVS90dVArWkNhYWh4UEtLNVJiZHltVE4vOWQzVDgrS1NSdy9qRS9BWXl6UjZpUTE5dm1OZXB5ZWJKQWtjU3N3WFhjWFhkc1Q0RHhtTHQrZ1Q1UWpOd3ZvekpPa1Q1eTBFbC9VVkpITkFzTnpVYnFoRDJNck9FZ0tlY2RjMktPMnJ0amdDa2ZzQnl2NVlVS25PZFZmdVk5MmhWR1AvTUhrcklxRXc0UGdoT2NvYkhzZ2I3OHFhejhSN2M5eUdrakxVVWR1SHUvYXAxM0ZrY3NKOHlkQ1FEZUw5U0YxY1FCVjMxUDBUZHlaNXdNWHd2R0x3TEdRNVlndGNLQWlmZkVFOEtJRW5QeWNhdFJLcldnOVEySEY1RlBOeE1wbDZBNGxvbXR4SmFaUGpyV0hVdTVmMTljcVBIQWxNbjdiK24wSllTd1gzUzc5V3lwQ2pybUQ4Y0FYWm9SR3dHSWFEK1hrV3hXV0NyQ3U3dDkvRHpMMWRLRHpZZlMvZTlsdGdyRkk1eDNhcnphTHVoVlAvWGs1SWJ6S3ZDN1dHU1hPYndiUEJ6VW0rWEQzUll4TzhQQXZBZUxyQkRHd0FRS3VIZnF3ZFowZVlYSkNUZG85Nzl5SHVVM3pVNFhhZExNUE1IMEcvS0czaU1mR3ZUQ1FENmxJVGovdFcvQWMvcFRKRFpBOEk1TEdCYlIvNWRFMnVPMVl5a0E5QmRVQTIzZjFvQ1FoQ0tIYWlERlVLdG55R0p1T1V2dTdaR3NYVDNoQVM0M2ZFcTJqU1hhaVpjNTl2SFlDSmRrMDdaUnZLRlFFTjYwR2JXQnhabjNpYWRaQWRwaUxRWHUrRmJtQlRBdENlVUJYTzI1bGQyWlB0NjVma1c5anZBYURhRklTMS9NR0NGSFBHT0Z2eGt1c3hpNWhGalpWUW1jd3dnTkJrdnh1UUl0am9vV1dJT1Q2MnlLUFRJLzhGNERwTDlNL0sxTy9RTVAwaFhHSCtjRmc5RmoydHNXUkRSVGNDZVE1MGdrc1FlU0d5R3prZ1BFTGVpMWtJQVBLUVlkUHM2KzJvaHcxaVJUNmNOZ0dRaWZjWDJKbVV4SW5iaWRzQnZEQXJoa2tlSVJ2dTl3ZjNSODJ0bzBWQ2ZvNUxnS040UmtqaUtOQ01lTkozd1BEWEwyR0UyRDMvTnZsbTVoRkdQTzFRSm5iUWtpcmdMMy85QzJuT0lsTlUwWTI1RVJaNlFqZDh4bTVTK3g1N1lwSDdJeG9tR1hBVnN6UDZKRW5EUkRRRmxOS0Vqei9lVnBJQ0pDcC9PQUJqeVRPeVpaU2FaZlpoSngvQmJUbEdyakNBTzJjOStPeEwyb0NRamhlWW92bnp1eCtIUXBrWWxnUFJselRzRHg5eVhhSXFpekwxNi9UUjNQNlNNRjdyQXpkQ0NXTXRRTWNqSXM0ME9nbTNveVpIOG9NUHU2NEw1VmdMU3UrQ1BMZ2t5UUFqSGVjaEhsUTNCcmwwUkx2MHdjSjZ2SFlCQkxBWExHMFczT3NDNy9ZcVB1b0kySElGZkhrUlNtMmM3bDVQRGRROGRNYUV4ZmMwSzA1N0F4eGdEM05MZUxmM290OUZCeFlnYWdjQ1BwWTluU2tQQnNDNXJxMWJaVHc1dk4vV0wxZDR3RWJlZ1dHTTAwbTQzQnlUZUNJVlZnRmNtVVpNZ3ltNzlsdXp0dFQ3VkxFVzFiTjZJNjRmRU1IdjRXcG9qQ2t2TmRmckV0ZGE2bkxjbzVOWk5WK21GRjlDYnhwTDJpUXpGNWxuVWVmUWNRT2ZXc3gzSkRkMFZhM3VRTHFkUmVKeCt2V1Z6SHJab0o4MGtsVzczb0FHZG9Cdld2MSt4ZGw0WEU0RWNCYWMwZUZ0QUw4c0l1R1A2eGhWWTJkVExyZzFJR3BUY0hNb0I5TG1NTkh0VGY5UEpWMnhIeUpUUDl5TzV1eVl3bjdSSDFxdFVxczlGSXVGOTBEZDZYaTkrenEwNUhVcC9qNVlZalllRWkwaTJramFOS0FkSlExeVpReEpKaC90WnAxdEd0NnZaQTVIRVQ4d3ZhVFpiSU8zN0NYNW8vYW5hdkpkaDVBSkQ3TFloLzVqUUZLbG9XQ3JEMnUzYis0ZDdkd2ZaU0ppZFY4WDdOTmIrcm5hQlpMTnJtN29xUUVPSGFLdlFheENaTDlnRUloUE9OVmZEenAvWnIwMVZzQnFiN1BDblRvTzlGeWI2aEdPRFhIeVpNTnJONkpaUURxMVdqK2dlQXhEejJDekhVV203dzkwUnB3b2JsWUVPMkdWbGRIR29rS040S1loeTZWMTE0UFRPdFRkbEJFWFVkVllTZnkzbEVKSWVzVk52NHg1cFY3RG9BOXAyNlc3MzVqcktMNzNxbjA5dTYvNDllaVFMc1M1dXcxMlBhZSs1SE1rdjJRRGpRY1l5NzNpeGFwakQ5ZGVJTlk4TXpFOE5iTlFKaU5PcnBkQTdaaWc0UldaY2t5T0NjQk5rNjlwWWpacUpwSFI0b2E0OU1wRExHUGtqZ1JlSm9YOWV0UXBqTzBuU2ZwNGpFbmxqVnlSMTlrdFRMWEV5WXpubERwTjBScGJXMlJ2SUhCR3JVUHpZTU9maHVqeklualkwT0hwSGpUQmF5YmJOeUFiWHJBeWxVcU9Cd3pCaG9KTFlOWXBtalBrdkt4OVRqY0l5QVo0alBHQkJSNnJBNGxCN09oTlE1dkJpZ0xCbVRWdmxXVmt3YVRmNHJKeXlDd0pRUVAzazZYeU9qZnVCZjE4clk4U0ZMMmxHMEg3LzFCb2R0dGNIbHZTYmRqU0pBd2tTWXFTQVUzMU1tQk92Q0NpQS9TMWt0NFptMXlWanZOOFJQOWdKK0pLcnY5NEtpMDh3RXNpV1kxOVNXN1cvQ3QvUTJCbFNOaFZvV0pJU0xuVHZmMmpGN2p0MVNhVlZuaXNRRldjazRIa0M4U2tDanRxSlpvZ3VnNXVkbm92bHJ2cW4xRFhrN0gra2tSc2lycXN2KytmYXlia3hiQUVONFVQZnYySWpMRXRwOXFxZDZnbTRlSnR0RGRrdmJEMzkwUmE2cFFlNXNVZnd0anF1SmxaanpxaDhjRHkvQmRhTEtNa1YwcEFyWDltK3U0MFIvOEJjcHJxVUQ0Y2NaZ2ZOc2hLUUY2UTFwbWw4UjRUS01xWEk4WTBENGpKcTZERmgwQ3dxVjNpWU54VmpFUDJuLzIyRnJSQlNNRVYvMlpMY3BVdkUwMFBaTWtHNUEzNDNsU0JkMzFwT0I4enJxdzRBZjQ2bGpBRzZXUzRYelNCN1pKWXIwZXZ2bVNKbFMyK3ZmcmI0bWdFN1lFazFobEdKYXZLcVQ1WnFNdDhFODNubzhWTU94cm95ODF2azl0Z2g2VS9KVkhlZjhnMExHWXQyYXpCbGxXZ00vNWJjQitrRUhNT0tlQ3I2OWd1aW9qS2hKbEo0N28xQmVlWHgvTWUrY2trdDdxRXR6aVlZcGxZSXJYbGVxL0lnOTY4ZEpnTk5Jb1g3aU1aM2tYaDNhVzVTbUlXZ29QTDhENmx6U3g0ejFLMG95b3dQOGlWUmtPZkNpck13UXFvV2ZvWjNJd3hIYzlaNTBxa0pHT05ySjduQWx3cnRTZWF2dGh2cEV5NGdDS2ZIeXZyNGlQOS9PYmtheGptWDkrdGowekZNTDdzWWZNRWpjQno0bmRhcEptSm1xV1prMXg3M0c1MVpiWlZtOWVDMVQvYjVlbEt2RFZrN2NYY1ZrVjlBWmZHSFZBV3BsNnBub3NtcTIwbmNCTWk5Mk01SCtxZ3g4dEVNcDhWVDZ3aDJmMWFDbXA5NzlYVE1Tdkt5aFB4bytzNGdVaHMxKzJwTnhEL1JoWG04emNJdjNaZTQwSkZjSDB0M2NHRWJUSTRGc3ZJRU82dCtQOFFmeW9TUHNjU2lHRkNVMjEvelM4b3UyYkZSOWlidXRuV094M3VoNS92N3FzSGZ5TkxsODk3d2kzRW1Nc2pHZjhBbm42L0s4U3VJaENFT3FQZ1ByY09xc3p1RFJmZjdjc3VLWVJzNDVsT2dVeWVOeWVnR0licHNRT2VUNDk1bjVzUEFhQ2RLQURuK0tsRDZRWXJLNVRKQjB2NEFhM3o3WDJkRlpVNjNab3VTUGhvN0h1dVk2UlZ6QktPQy9mSFpUUERTeW43a1FzT2IwMUNrWGUrUlM1ZzhYQ3NqbS82aGtEaDdCRnFCczRkRys0alpNN0EzWFVLbk5VL25KMHlRV1BSdnZVNkhuT0dNYkRJT3ZaOEg5S1R4THJkRitaaXhra1BySHJSaTAwMVBnQzFJbzNLWW1lL21hcUN1TEs1aytWMWR6TXhaWU9UN3dIbDdzVVRwTzFhdW9mNkhqMlllNGVDQVMyQ0xDR0VHVkRFdnVtU3hQNnlIYTJpdkFyYStMeVpPLzg1cVJ4cUhNNm05Zld1T3V1bEgxUVM0QUwvQ2V0bnFENWFNYlhJWlgwZXEvQkx2R2d5NVFTd0hOa0JTT3NqRXVkZXhXTTB2MW5GbG1hRlBHaFNpRWZTUUtjVmpGUTIwOW12NVRqREVGNkJFWlJsSjlNVktTdWxMVFBOTllseEN6NVcyR1AyNFRHZDNRa1V2N2M0VGZYR3UxWWFLSlVWMUhpa01vb0gxNnFwVXN5aUlwK0JxWndhbW9kakwxSGJGNjk2QmJqUDJUNndlYlNEUzZJWmVsR09KY096ZmJwZ2NQblNkYUZJa0xHVnBvRjFaeWtRcGRQdnFIUnVmTm9QQjZzYi9OVGRaUGswUXJhdDZ0aWg2bjc4UXhWZUYybXRFYUdsK1lBdkFOZ0ZiNjVsRStjSHJYMUgxbEdXWHp1SnRjT1hiN21EMHk5OGp3OWJiOEVzQ05PcExvWGVKNFBoaWJ1bkVVUmZVVjN5WWNKN0tqMGZlRjMvS2pISVJKa2JvdXFRK2FEM1YxR3dTenpZWTNFTE1VQ0haTENVREU4R2hoaWx1Uy8zd2g2VEg4M08rTVRYUGZJSG85M2lBUkQxRVMwNGJUOExYQmdRN1V1VzNjckJxb2twc2haSzdNMXRoTjVkeHFNeUl1bURvQ2Q5V1YrbS8xTy9HQ2RuWHhOYURyVGhIeG90VURSaVo4dlpndk5pVjBLbVQ4TEY3LzFJM2VSWXoyVFd6SzJQekxOcUVXZitnTmp6aDd5UlpMR1VKcTNEVldHbFBqcm80cGZ5d3BJL2pFZ3F6UGxDMHFuaUxjRHlkSWJmQ3d1NUVsTUpnb0hDWnAwZkI3OE9xdUdXNnNmRkgzZmNEV082WlJyamYrMGF0bkNXcG1SN3VOYkIzQnZMSldxMExFNGdzdTdROXNzQjZRWkl5VUxDWDZnbEdFZVpXNVJtNzhma3pMSlRCeENBVTBhV1IzaDhNcVJXRUtLR2Q4SCszSGJ0L0V6VUFvM1RRdHdDSWw0ZE0zNDUvVGxCWDFzN0pScC9RSUNDRG5UdHAyNGxUbzdmQS9vREc3dkxETjlsK2ZjdkFhSGllcGtUT20yeUdyZTBxcUdlYzhaMjlqeDgyTzIyWDhrSXA4a3l1c29zSk9RUEx1cEd0aU11aTdTZnpXSndxYThBMFNLZllQbWl0VUdoWFA1VFRjYVVDRXp2eXB6VWVNY1pUUFdJZnd6RGd6NExIQ0Z6T00weFNZQnZwVkNvVHRPRXIrYy8vSDhRT1BEMW1CL1d6TkczbkVlQTNZN1J4UHc4c3JsTGMzL1B0UmUxTXNvSk1XZmpkbnFndTd3RkFOZXB5YkFneEpzUVkzVHNmQnRZNmdvRTlmMmNMQnI4T1dOTFpJU0hGMVM1TGRJeFpMUFlKaHprN2QwazljTW0xdWxURm5icmpyMmtpa2VQVDVSRlV6VHpGRlpVcmh4eVNQaklWMkhqbVZkZVRtdDgvMVQ5ZTZ6Mm5tSFd6Zng5RC85MzNkSDNUd2J0bHk1K2oxQ1RnblIyTldQMHZJVjdCYzFVN0J1Z0x1a1diVzg4TEFQSzFhUzBLL0R5WSsreHlLZFIzUlV1Qml4MXNsTzFmUlNBdGxua00rM0tHMFNqR3lDV21rVkxCcDEwWnR5OUhMQ1o3aFcvdXU5QkM0KzV1RUE3RVFaeE5zbDQ5WWE1U2xjWVQwcHBDZUN5enZzTTlLKzFITmE4bFdVSERDSG1xM0FtbXFvN1gwZElWbGkzUTg5Qi9uSnVVKytWb3U4dnZ4bTI0bS9jM1k5UHNPWW1OL0Qyc2xpd2hLanhLcS8xUjRGK2V1cmovM1ovTFlESHdFZ09ucTZIRGllSlNnVy95bWNHYU50dlB6MmtTU1VHQ1IwclRGZVdhRkFYQXhtSHNLcFdxbmVKVllyckpGRjc5N2lWendVeHVhQTVVejBiYUxURk9qYUlhNEZMNHJlbHl1VWMxb21EVW1oc1lkemdHbVQwUnlLNE5KWHQxRTVtZ09laWJUd2RiQ0lsRE5DSW5uRzJQWk5ZSUU0bktFd3l0aWVabHhZYnBBbVpyaHhUZ2ZTallnU3NoWE1BSmVFdnltMm1wTjNlTzlyL0xsOVpRRTJPS1lmeHM3c0UxK213aDFPaFJaeEF5VnhOZHV3NEIwZW1KT0dLV0RBVnlTdUZBcGUvZERlWlVKNjE4bHBISDBqam1vazJHTXRiN09wNlU5MnFDUll2Y0pkUUttdENDK2VkeUwvYzQ5QzVaWU92dWIyclYySGlxL0xNNlBtV2dkdUxHbVJJTmZWVHo4dVExcFJLNHptVkc2cmI1V0t4ZlM0bnAwSHJ5Qmg3V092YlF3d0lGcGs0Ty9HdjlDejhwb1dRRmZLVE04STVKWkdFdnJGdkdIOTA0RGJUcVI2UVJ5dGZNV2hwdk5abjlGVnNqNTQvSUdBYVdCVExkMDdjTExSNVpqam5LaFZEd0tTMnZMcXV1Q24vU21rdm1QNnJ2TGV4TytCSE5EV0NaNElsdXhuVjErc0lPN1VDcG0rcVNpakN4Y2RDYTFYRUZFR0pKbzI1QzhMTk5zU3R3OGg1RFo5bXY3aWNGT3ZvZGVMR0dPR095RGJNUDF5cFE4TWtqVXZGUktZV0NhandSeFZsaG13dHpLeDdxam1PdDBTMVJqaFJzUWp2R2pZa3dlQTIxS0Y3c3NtMUZnYktKeHJKV2lVczlqM20ySHcyd0d4OUMyVGNDbE8vUnZRTm9iTDVudSt0bFRvaUluaXh5WGdWMlMydDFtamRSSjhVNjVxMWNBbUFkblJZZVhkVHZJcXhESnhzMGczRTlXeGpMNmlkSytsMmQ4YzJodlpUSkxLTFpOYzVyNWZnUGZlbUxhUER5bkFGMTlHMnRPWFlOdWJPeFN6R0l2b0hQTHM3elFlamh1ZngvSDRKMVA0RVlLNE9HOHhQRkVrdkcvbEM0UHRBV1U2S2hRSlROaWI1ZTNHTktZTWY2d2orNGNITjJuQjRiYThENnlpamp3T1NTRWlGYlh6YmFGZzRxbDljYkdUMmFGOXN5Yjhaa1hpRkxYTzRqMjN4YVhnT0JyeFBxSDlsVGpldVpnNEppNGc0Vm1rTGZsdHgzK1Q1SCs1SlJXMmRSU1FuQm91M2ZibUFzU1JWN0lubUliTXN2SVlLczFTZUllOUNRZWVwdit2a0FTWUZvV2s5N29NRWxESzRLbUVteHpCRzBJanJFS2VzWVB6czROWHBqQnh0M08ra0F5Tlgvd2tzSlZSMlhTdHlYUTRDM0VQWnV0Z2FjL0NML1RNQWhhWDVnQXhTVmNYcm1mZXZvSFNLTVRKdE9mSHgrcHRXdmlKWjhXYUFjMFNTa29QdFRTMjlzTFJ0Z1U4RVYrcW5EWlFibk5iTmFrTjVRaG1nS0h1SitEbkwzK3RZbHhiTVo1OEpGVVZyVVVtRDFMc0lPV2lHOGwrVDM4L0xHb1ZsZXBCSUVTckpldjd0c1V2TWFTSWJnRWZPVlh3TEI5WjRQQXQyMzZwMDBaV0w4d2JScklJU3MraUFiSnF0a0NzMi95aWIxUnNTZy9sY1BTUnphdjlXMXJLeUgwbzVrdFdyYUtiaUxiU1NUZmc3TTRDb0xDRGszejBXc1U2MkhUd2NHOFdqTXk5RWUrZEJiR1FkRXJ1WTlCZkN1Tm9kM3JWUm93bXZubDlhazQxTlMvVGhLRk44UEpSSzNWTUlrK05HZlBLazRnaDBvc0xNb3pPVlhNeEM1R0NLdXRBWHBobms4SnVpWjdDUDBBSHpDTjBtUlNMeVdLMkQvcXBWb01sUU1qSFZOWHR2NTRjZEpKQzA4Si9JemRwcUVob2ZXaE56U3hIQWdLOWpyYm5Bby85d3g4QUhzRmMwWk1YL1lET3RCamRDV0VmYWc5ZWZyVDZtd2xFckw4TjhuVmNuclJMWjB3SlVvbEtzWmhIR1ZlZ1VBa29DUTNvQ2RuMCtYSGRSK1FvSURNL1hmdGIyRDJsTm9nTFJkb0lHUUkyMk5CcVhxR2o0bm1heGU2Q2lrWmlwVWlCODNNMFhJaFFhVm9PeFhoRTdwS3Y1b0VtQTJYY3g5NFlKYnFMSG1Wc3BjRjRQQW54cEJsZTBKV3N4OVViUUp3NFRWb0pwdWtkL1RwdlM4MnVHWEFOWUJKc3BRL2FPMjNCc24yaktFMmU0N3kyT0I5ZG9QeVlWWndnaVZTdmZKMm42Zmw0RlpveGpzQTRlb1pyRGdQb2FQSUdwb0lJWnBtcnFkS3BONUVKZFhWeUYvTjhkZitKTkJrdGdNSUthRXdnN0xhRlJkMHdJbGV6VE9lRTUyclFRQ01jTlh0NTZtNUxYeDVJUWZqa0MrMVFuNmdmOUVqbW9MUEtCQWdsQkFLKzNwbmxTMnRQbnBJOGpSL2hxNm8rM01vcjhDaXlaWGJ0c05kaGVpZkR4L3JuS0dpb0JZRmdZbXFnRWNIRmZyTXR4elN3Z2VFRFozd0VuMHFEMnF4R0RXK3BLbEZnV3IrMVpoT2s5c1VxTDBHWGVMeXI1anpjL2ZEVlZmVnVGUkYzS2pycjdLUGJGMTRYNU4zWU5XZHRVWXE5eE9CcFhhemlSNnZrZGZoSFZ5SWdPaXg5QWpnTW1GN2V3RkJHZmhjMzhsVDBrZGpVcUsyQm5qdERqZUNheXl0bFdTVXFFTWVZTUl3Mk5xM0FKbENEVUZDNmdVSktsN045MGpqQ2FiQnp4dGdxMzZnT0hUemVmek10eHpHckRXV05sS2Jvc1R5UHcxK2pmUFQxTndPUSs0bjA1K3lmdUU2OU8vRWJmNXkvVEFBbFNPSGZmYXpUeTZteFJ5K2RJZHRxc1ZJa3ZWV1poYkRzSnlpbjEwZzN0bWlKaDRqMUlaaElUWlNRQk0zQmF0YmJuMGR5SDA1YlpOdnJxQVAxNEFpTndSZ3VjbzZKbmpqY1l3OWxZc1NaS3dEcVVzOWxPRFlvNC9TZ2FzYUNEVmVqYm1aK3UxNGVEZ05pb1BwaXg2Qkt4NC91eG5yOVJkdnBNQTdZUDdpOHZxVzhNaDFEdXJtN1hMdjJtNnRTY2hONXZZOHdsNDVNUms1NnE2Qk1hdjQ1d05EWlMvMi9rRFVpWVkya0Q4b2g3eVpVU2tobTY0ODZoYWJXUXVPWC9ZNVVxaXRQckt4RDJDMm53WnlCY2ZsS25aNkxOL210RUprUjRpSHppQ1JtekJieTFva2ZmNDdOZk9yR21pbG9xQzVzRmRlQnRMaGJqOHBIT1k1MUtrTlFvY0JjcElHR2NERVFMOUtxbERrOHlPVkVIUUdWb2E4K2xYMTJQTjk0R0gyRnRBMVBFZFB3SFVGZ3U4a1U3S2lCcEtCdUFlYUJPN2lWSHFBckEweXEwaDZ6MU5MK24vdmVzVW85U3V2TmorcmoyaVJ3TFdUV2NBaE1YZFBSU0htUnA1Zmk1VXlnelpvMkFCTjdYQ3JGWVJieXllK2FpbWJXcmJ3YSszeENiUEZMNmZFS1dGbHV4VTlzOUE0eS9ZcVBnL1JuMFlKQU9PQXlkSDhoRDI0aWxkLzR2c28wVzFINng3U0l4YUNBUUZVRVVmSWdTRGpvK0lVdkNVcWRvSlU5eFhJdG9TS0pxanJ1WWJ6L0hRc1BjdVRpVk9uNjFsNWhDbjBxTUVuSjhVSG5JSFNyT0txY1d2Nzh1S2t3TjN4S25qL3ovUUlJMmRVdlMxY3NKQjVXMnlsRnh3cTRoa0Q2eVAraGJVckJrSTlXekdBVUFEMVdKWkZtbWZwK0RIUU5QZU56VEdmWC9IYnBrTHVZRG1QS2FsTUZ2eFFMeUZTK29oalh5ZmFkbklzbm5ZNS95NzJkQUZHa0hvYnFjU0ZxcDJGRDZibVFOSEN2dUNrZXJLSUY3VFJnUi9pb0VJUTczRDB0azJpOXB4M0djMEVCb0dxamRPbXN4cFpSNXdMSnZvU1RSTzUzUnB6NEdaVGREbGRoSTFlZWpRTStlQzlYQnBkS1JHZ2tCMElja1VDcDhVYTFqK1ZGV0VEMW1IUkdnUjIrcVRmWnF4b3g1bm5ncE1mMVJMSTBIWFpRRXJkZEhPRFk1bS9RQ3VCT0ttU3Yza05CZWRRYURXMWRMVFZVVnNweHV0NXJhdzRXaXh6WS9VMFZwVUY1Q0UzblVVbmI1d1VqRUNqNTdQajIzY21GdUVBaHZYQXhHQjVRc0ZhWEhzQStROTFSNlpzRUZVVlJpdWh5YlVjNWlJcHp5UHVCZ0U3WExtUGdkbzBYc3BTQ2FJLzlJV1VnUzMvbml2MjZDYlJ5UWw2RExQOTM1QjZrblh5dFI0bk92cTVjTnM1bFdJMXJib29SVC9TWTZKK3ZWeUlDRS9QWUlmdVZqamFrSnk4ZFZXUHhXUEtRZGJTS1pxTmtjMUhqcE1DL2xYMXNWNlZWMDE1SGk0S1hLMWJ4Z2VaQ3daSkpFLzM2cFo0WVgvRWxwVTNjU1E0a1QxTGlDSjNvRUpJY1VyaXl2YUJpdE52a1hpUTdLNWxpeDdnL0dITCtTNzRIOEhwbVZVeWJVcElPbit2amdIWG9Eemhtckw4Z0JLZ3Z4c05pVjE3aUtpdzZTUSt4aWRpZlRaMDJYK2toaVZhMGd1RVVYa0pFTDU0QW1FYVhXcTI4amFIeC9taWVzNXR0UFB3YllDeHRRdjNpOTY3cjNiT2dUOUFEUDUxTTlMc2NMQS9NZGd0SW40TzZtODl5Ri9pSGJvLzFKMlBHZDdiRVVZZ0hhSk9EcEpLYjlYWEE4bXJKeFRhZ0tIR1hzU0FxMlloYlV2QmpGdmcvcGhHR1JuRVllTlA4V2RCdzU2MDRvaXVnYk5tVGllYWhVYkV6NUVUcHFLUk1QVW5iTmYwOVA4b2h6dFBSRnkzZllpUHBob0IvYmdsRk5oZmNwV09ocUl3Nm1BcjRyVU1IL0FyRFRIL3FleHpqQVJ4dDdveHY4ak42bHM4NEdha1lVMjhnSVBjWjZaRVNFWFQwQUNWckVSb1YwT00vbU1SU3NnRGpwL1BTb2ptM1U0bXE5d0pJVWlPYnRhcUZGaUJHbm1GQXJnRVhvajVnUmZaVG91M0dJMUlpU1B1SldYeHhnVnBXMkw1ODZwejl5aC85UnhlTWJKVkc4cW1CMWlkSXFYRnVKdHhMMHBwcVNDKzYxVXZKNjRpeHFLN29BYm1DTndubWZVVUxFNDV6Z2VvbWQ5RU5jVTZRUTBDRU1OQldMQ1U5cW16NmpsRCtydzQwRVVZczVqUENoMW9icllZdTVCTW1ydktYclU4VjgrcDkrdEo2VGtuTjdFcVRhMjdrckY5VS9jTjNPSzFYTmY1eUxQblF1OUFZQlJITUplWnRhV0xzajdCYzdTR0xDcnJ2L2Q1ZEluUkZpWXE4RnB3MHh5dG9mU1M3SW1KTVBFOFh6MWVHY2pONVBtU2EwUlcvOTZNWnluUjh2WG5rN0dubTJlSWVYYWlEWS9NOEFiZWlZUnZxY1FyN3dYQStIbDNtMXBhbjFla3JmNFJ4WE5oUU15OUZrWVVpY3FSRUl0eW53bkU1ak8xMXBxMll6TkZFalNpOVlycCttRFREejA1ZnBLZXg1dEMrV3g1L21xdzFqcWs5TFhsMS9maEpyQjJhSmtIc09iRGptcEQ3d3ZLd2ZieWxkRWtvRlpUQUdQRVl2Y3pjb0l1aTZuU3NNVW5scDRwSWpPYXViaCsyMm9GQk43RkxNb2N2OEtBZjZlVUxGelBKc0xVMHpCUEVTemJDNmY4U1Q2cFMzSmo0SExsTHo5OEJnTVhUelRjejBKSjJOZmI5UXVna2pLRUR0ODF0RnZqRVhRQnR6VWt4bmZUeVE0c0o4Y3RqQzhTcnZDNDNURDl5Tms4U3hOSlJDeHpUNDdBTkxJZWkrVFFVVFJybXZocjdWR3g5bXJvMWVCUnBDbXd5cWNOTG93Z2NBVStFMUdpTklpNE1YcENkSlJGQnV5cFhXRlh1OEZTYUZSLzVtYURUTlJwSWZVcjlQcjFhTzhOZFlud3VLOU9sZVBYRTNkcW8yWVdKWmtBZkcrM21aMFRYaUhUMzBXcGpWc1hGWWJhSm0rZ2V5ZnNhVWNsOWdLVVRlRGhnby9mVDNObXUyK0VsVEVrelUyaGhvU2RnN0EyaUM1UWN6ZkROM1NCK1Uza002Y2YxeEZqeDlsSnhETitwN1haNFZ5K2djRGV6czNXWnYrZzJVa1ZjbTMxd0ovdjhpYnNRRkVCNDR5M1NFVzVoaThIa2tlU2Y3akZmUG5zdnlubXV1WktDbzRBZGZQOGZHZ0RxU0hsWityR09sdXNEcDlTS1JhemdGQmJxOHgwL2hLQWozZ2ZMTmZEOE11Y2lmZjNpNVE3UVcwYmtKNG1LRHUyN0tCNWJDRWdYSVVpU09rR05lT0k1aHF5MDFJRUxOUjA4NHAwSkV4UjgxSTkybDNnY243VUZiN3M4bWF4ckFuaDhWWnI1RjltVnhSTm1zNER0MStJaS8rMlEwMDFoeHBHR1hrOXJnM2lSaEs1N2UveUx1cVpyNEZtZTFEaDJaUjRxZ3RVMklyTzlKN0J4c2F0czlBT0xkS21uQXMwWnJSbGgvVFlaK3FyS2tCV01ia2VDZUp4N1JqR1loYWY1WVdiS0taVGJwK09BbVM3b2FEWlNuYVFSTmd0bkgvQTFtcVo4SDBWUHc0aURna3RxWjRrMlBDWS9pMmNONkRINmhXSHVrWFdIL0tZd3QxVXYwdFVPbVhQZGdodUJyM3FpWDZXUGwvRmRXdTNqdm9DSTR4WGNDTUVRNkYxbkh5bXlVSE5JSzJ1akNHdDhlYUJQd0lCNEtqZjlUOWF1ZHdxQ2VBalpndjdhQVBOTTZpUW1RVU85WDBTc2E4L011VTZVN08va0pxTlZMSmUzY0Z2anpRSVBUY0VTTWpYOFNyeUdPQzJnL1BGbTJ6clBLMzJHTXBZaTZLVmJXQkF2Vk00RlpEbFB4OENON0lsTk9KTVFHR3V2VFhGUVkxc2dkdUMveE9YR3dLWkUwNmxqR0ZMbS9zbnR4UmxrVlNpUVpwcnVkdlMxalZVeWpXTkNTalloYVFVSjEyTm1IWWVLSHJTWXlsekpadEFyZTNOam1kOVJsRjgxeGErc2VRLzhoMkxLNFFPODFEQXlVQ3I3cGRQeFFWWDdYbnU1S1VOQXJwVWxtd2J6QU9GSS9od2tKb3BYMDgrWGVOcG16eVNORE1VWjA0QkVBSSttYmFjZFFhbWR0RXJTZFJnaGwrUzNSNGgrSzU5T3Z6OXVMNlljRlBXL3hlLzlIZkxPZmc5Zk96a3VZVDRITGVHQi9mdzd4dVJCZVg0djMyT1dlV1ZKSjhTdUNFTHJhcC9ma3lkTWNLUHhqcExKcG1uNFlzNlYrN0owUlUzd3FHSVhSNU1McGxCUE9mMXQ2NHdUeUVES0Z2VEl1dk42ZThHc3VJcG5RaHowUmFKcFdaaTgycmNvRGNHdU5RWXc3dlRySkdiK0dGK0wrZ2IvcFhOTGh1YkZGR2NJV2dHUWJobENwTGsxVU9kYU1GZnJ2ZVZjbjJaMXg0Tk5YN1dSZFhTZ2xsMzN0ekdRUm8rREFldEV0aHZ6L1IwbnFOcjJ4Mjh4d2tsRTNXYlpBZk9oUktwVHJCeXE2SDBCc0phcGtIZytMdFN1bkVuNlBaajRicnVvYVB5bUlYVTBKSmpVenVHNWRsRlQxV0pFOUNpQlI4QzlpYjVYbHhrTGtERWd0WFREL1lvcnE4aUtqRUk4WkNDVXo4MVF4N3FaSktKU2swcFhCVjROeGdDZDY0a2EyVEFJazFTMzhuWll5bnFsRVpVeFQrNCtaUjlFQ3RMc0RkTFVHVjdrdHR5cndURkE2MFZudm5idDBYWE9kK2F6Q051VTZtU1VBdStWMWI3ZGF6MDJkQTdJd3dqZVJ3TSt6eURYK2FUT093M0hlWSs1NWFKR3RZaUNPUUNUTHlkcWVTSHp0aDFucjNqN244L2pFbCtQeG1GcVA5bGpNWUp6QTZPTGtkZ1BvKzJwUk9WKzlHVEhqTkgwSEJud0M2VFkvZWtkbGs3cFNteUZTVEI1ZmZnV2hjWWNtVVlPQWhqVWgwUmUrbG0vSEszT0xiNCtPYnh3cXhXSEFMSkVKRGdaVDM3NElkenU5bHBwdXB1djBOWkc3cHNLT0U5ekZHU1VxTWdmN0JyckZ5b1AyRExlZG9CRjhtWlpmRStwRHNDdHRoR2wvdzdseVljUnVndVJ4RTVoZUNjOVdPMlBXVkczc0YwcjluVmtDRVQycDZYQzQybEsrVldqOTdkNXdjYVJBZ1cyNlhTRnByZ2NNUTUyVVkrR2w5UTJXTXo0Zzg5YWVKdGo2TnIrOCt6ajMwUEhwYkZYZDZRWmh4UnE5YlJZV3ZySUEyMGsxL1k0cisxSWNnVUl6UHFNcHgvUC9BSUprNWhwcEN1UnB2cHplTEY0R1dFSUIvMHd0WGNpSU04c1FLamZ6TDRHcWh5RXZjTXVid3FFZzRnRURIblp4NlNVVkt1YUhGUThtK3k4YWlxenVjZ3BNZGFzeGhYUGdjSHZaRWhDRHUyUllXZUI0NHhEcjl0TlVCMjdybHRpRHdjUnZ6ZERhZWZwaDJpMnowMWIzbVprUENBRlRWVk5GdkFUSVFualZpR0YzeFVETGZFclVSRVh2UkYwU2hrRllMVDVYanJBditINDNVRkg5U1dCUDZaVEt1UVUzRWdjVXN0VGE5elBWUlVyeWIveGtnYlhOL21XS0ZoMlNqL3V1RDRIcC93cHFyNVNCVnRBenQvY21pWEQwd2VjcCtUaFJENkR4R1VoeXp1cGM5TDQ3cSsxVFhiNG9Rb1lwb0JNRTR2OWlmTVlwc3JXaTFCdVRGVGtDamRUWFZ5U0U0SVZ2N3FkRjI1MkFTZGcrS0hyb2pqWENwRzJ3NmxPSWRYWlRLL05PdHBZc0JkRW9FdHAveWxURGI4MFBPT2xhOUhPbWQvdEkyaW54UGRPUDU5OFZNTjZSbzIrOStQNTI3NjhPU1FhSlJqa1FtVlNZVExNTWV2WEI2TGpLd3BOcWFOT1VHLzIxZjN3cXpqNW1HNzBJajBkNUg5TzUxWExBVmdxRDhsQnVwbkV0ZDZZREpTK1FxUHBwL3NWb0lZSm9IdmlGd01LSHpLNUxZWUNjK1V3RitjRTdFalFROE1LbXE2RFVkeXRrVnFmOXZxbU9PRStMb3RKRGNmR1JJYXh1ZmVSeUpvYzVWMTI3RWZpZTNpem4ydlN1eFF6OWlpVXRFczBsRHRGRVd5ZDBmbHNsSEkrWjQwOEpWOUtuUWZYNTY1eFVxRitNdHpLb3dqc1NwaFlOYmFWVENJYWhweVN5SW1MdzVudzN0NVBCOFdTZXNKVmZKVW5nRnVQdytGMloxMm94L2NYUmNLQUQvRFg5QVdvR2lNL3FrbUo3OUhKNHVDTWJ1dEN1bU5XMmVlYzRpcU9DUEVOOXpIOElvKzZLeUQ1SkFrR2JTYldaRGR2TEk3NWZ3RnlCZUNXb2sxVnVnUlNsdHErcnl0ZXQveHI1azJjTnlZcHhhTVpYL000c3VtRFA0bUdMUVJCMGhlQTF1Q2dFWjJtb2tXSmpnY1p4SHdrNmVWZlQ4QzFVN0l2RUJLRWoxVjAwQnBBa2N4MlgvQ3MvZTdUTEFQeUdJRk5vV3lvVXo5Yis3ZTZZUzM1YmZtRm9TOXBBNDRCVzJJeCtMT2kyTzA5ZHVDOVpmSVl2Zkg5UUgzU2xTanZYcFlKWWRzRzJ4ekp5WkZ1TGNHNWNodk1udGNSUlhEV3lHNlN3QmpzVkdMVFR2QTcrK216T3RmNnlXY3pkT2I5cDRQUWF6YVo2SGNQbG5JMm9sczcrMTcvbTB3ZDFyUDVFMFduOEhtNW5mb3kwdXJNei8zaDRBRFdxTk9hN0YxNXVOZVhUSmdiaXVXbk5YVHg0YnkxRE1PZkhOZEtRNHhubHUwYkIrM0FINis0dmQ3dmhyVWU3WnJOSXAzcUM1TDhOdkMvSGlrdWJ0R2s5N3JuZVBDc0Fvd3dJdjVhK0N6c1NZRWpqdTdMSEFVNUp6U1dQQUJWb2JwOUtOa2NYdytxT3ZENzd0YjUvcTZNdHlLYXVtYVpVcm5paGh2SHh5STZOU2dqTHBpQXM1MEZDUHJvVW9yVWdRaUs0SFNDb0pxYUFsMXg2QVE0TWFSSGhVNzJzRFN4djNhRGwwZy9NSElIM3Ixc0cvVU1aMkFmb1FWQTRYdWxoOTZxcGxFdk03UnlzdDEwVVJ3YWdEcytsZ0xmTUJ3TDBLUjNkSlRzQ0RCSXY5UzlaNEdNa2g2OG9SbGovYmgvSSt5RGx5ZXlCdVhtbXNreG9CNzl2S2pPU085MFVKTkV1ZzVyVWlpSldvbHVMeHVKM0piT2MrWEZYeEJ5WGx6KzFxWHZFZEl6c0V6QVl1RVErbDFCQ0FmY0tOZWt3dTNkVys1YzJWRDRhT3p4eHRCQ3dPTUtQZnIyT2lXYTJXd0VXMXJBRXgzaFJtbHhpSndwTlJ2U0JZTHdIYlZkNWpYeEppbk1PT204L0ZNQmdrUVV0NFNTaGV2a0JXTCtMVFVmZERtZGw1dlpxcE4xcVZ3TlRaSjdWbWVwRitKREVSNHlXYk5jT3gyaFVpMVUzaUhTa05yZ1psZzJIaDhHcTZiL1RiRkIrSllZQTl3N3Fta0pYeHdTcVdya21TYkcvYnJNRmJxU1k2V2xub2JnanpWSGZ2RkN5NHJOUTllVzJmSDh4UDhmYVRsZENjSXhEYnUvMmFMV0R2bnkyYjdNcHNYbWh0SGdGcUIxUXBOM3JhRGovVlhTbkMyZWE3bHlIc1dKVzF2WmxScll0THl3QWIyQjYyRHF6djU5SG9hMlZJZzErOEZqbFdObHFqcFMvSWdwVXptNktOcUgyb1l1SGkvZDFBcTd3eXBNdU54cGdLZ2g5WnZNNFR0aWdtWkt2aVlseW4rWVhtNVBjYURkdVJPU1pzL0h6VDlKSE5icmxQRU1YZ3paalBlSHpVUEg0YnBvTkMyMjNsWW1oRysyckFaYnJXWkJ1SW1HeW5xeC9lZDlPdnNHU1FnTU9idlBnSDJ4VWdVeUw2b1VkTHVJUnVVcFBxUUkzVjlSNXJmVzR1RlJWeDd6Zmtzb2ZKMU4rT3ZFQUg1dlRjaERqQTlOa3AvVDAvZTlwUDJCYVBjK2p2amZUdzdrVU5TbE1RdklZMG9BMDVlOU9WdUk0cnR1ZElVY1NKWFhwQkNmQ2pDeVpIRHdYMm9McWFZQzd4d0EzOXI4bUYxOXZFcHd4WmxNUUdqS0lDbzM2ODNxVkhHTW8rRUE2ZndYcGcxU1doQ2xjdW5qMjJCd1NHdnBBV2pPZFordktqSEkvdEpBUE9QN3J2Z3I0Wk4vWlg1WHR2NUJPc2hWbDRBUHNENTNxMWQwbExtWWl6cXlxMkpyQXBpZEg4enk0MFdrYXBSdnY0TStuRlNIUUxMaWpHVVNQNkRTRnZ5YlJLS2Q4WjFqMCt0eGRmY0NsZGRqTzcrem5LS0VVZkd2UW8wVDJOeHR6OVNyZXQvMmNmS1BlMXlUY2xYWCtUeUlHZklEYm5GYkRlbjM0Q2szRldORTQ3dm5OWUVwMDBWYkNhQUUrYnpINlI1YkZtR0JXSTR0bTBCUDBEK3MrMnB2REprbmRIa2Z3UGhZc0RSOVhSZmNJbWExM3B1eEhUMWFhWlNEdEFIWlFCcDJsNDZGK05TWXZHeFJhQjU1VUFYdlZqc1JZUkpuSEJEaXZsblliYzBnWVdEd1FOcG1oTmI5MlRIdVQzUnloSFR2a255d0N1WStTUGIyNTNvRmRYL1RYNldzMzJSSzhFaVZ1YXI5ZmdJQ0FnSUNBZ0lEemZiOVlKL0Q2TkRGOGhQOC83a3UrMzdITDg2M2Z0K3pKL2I5V0JyNmk3OXYxMGY3ZnNKdjIzRHovQjlWcmZiOUlYajg1ZSt6N1hxKzM3RzM4N0x2dCt6a3Z0K3RoMGZJdy9oOWNSZmI5aUgrMjcrSDl2MDhYN2Zmd3lmQ24rejdGajl2MWQzNTFYKzM2MDYrbjlORnI1MVg3ZnFNYjZ2cXBQMVdPeURZejlFbzFKRElOQ0pVOXdLS3FGUlZxQlN4NWVkdEJoYzhMZTV3ajNhOSsvR2xOR3VIdWFFVGkyeEh5MHdmdUF4NVE5N2tBdHFKRU5Dd0ZQb3ZLWTZWUS9ibnN2RjFvdzVsRUg0QWlSeTc4bGsvdmJGWFRjT1J4WVVHbXBIejhnbDR6OTNGTXdLaEx3UFZ3WndhOFpyVlU5dk5WQ0lEcjRRSDB2YjZNamRvb0IrWUY1djBkOE5qbWtCaU1rV0dZR3ZSaUZtRGZEeENNOWV0NURjeWgxWnM2V0NjNDNRRUxMeFNxRExRUGgzcHUrQWxYOUFlYnVDbjZld3BBOGJma2Npek53d3Y4Ui9tTGFrbUwyd3JVelRBbU9aQ242TU4ySDc5MnM5eDlXMk1yUUlkSFJOUnpYVk5yTHl5bmtDZXZVZkVuckI2S1RZd0hCa003U2JUMmREdGY3K3NhVjlSMkh3OHZuUDhzL3RvSkJFaEVmYkFkSzVBTWJMUnB6NzM1bzhDQVpaUzROU3h0b09zWUZFQnFoZ2RpTTVmdk9JTTdQMTQ0bEpxRGtQd0RxYWlBUmlITmJVR3J5K21qVi9mYnZCU05CL2RscUpGbXUrRDltR2Y3L3Z2dFpmam5UaDkwY0I5MzhKelhNcjMyS0RhS29XRjZacUl1RzBPVzBkcy9xZDhKWDh0SDlCQ3VPa1BPN0RwRDFlU1cxaFovVmlITjNQQ3pJMGROTGRLVzc3ckl5c1BsK08xNWl6V0JIRXlaL2t5d2pVWUV3WVhnc2dDMDVCNTQ2MHpLUVh2dUZ1aExzSVd6Rmd5bldiVHE5VWJPWWU3QjlxVy9IVzYyZGc4RFZ1ODRsaFZ1c25SVXlWMVlsRGU4SVJIZGxSenBTdGRMN0tZdjV5dk8zamNMdEhhK0NzSDJHUkg3Mk9EaEgzbHA1Qm5qaHFYbk5jb09ZU2Z3N3Bsa0lMT2dmeHYwN3RuOVEzdGVGWURYb3crRUZvd3NqbnBGYmdSSnpFQmdnVlF6dlA3R2F1QUxBcVBSOGdjKzhVYXJYejMyL2t0YllGbjlWUEJhenlvaUpjeHQ2NEZUbTUwL3N3NkZ2OXJqQkYvVFdNcDUxaEkvL2tUbWJmRndLcVZHV1hENzdtbFVSWU9TN1N6R2MxQTB0OTJzc1VhRGptdThlQVRXZEhPcCs1Y2tmWXdWOWJEV01UVjlnWHQvN2d6THlqRDkrdS9HUElIWVdhVVBSRlBYc1p2UW41WmJjd2cwbEdwVE5YS0pKMkRLcGJneWFsZWRGUXhxRHVtbml2eUw5akgvRGlBZnpZRXdqVThyN1JkeDJleEdVYnllZ2JPaVg4T2diUUlUV2FCbTNNbjcwQTVzSy9wNzZ0MEF4bDJwb1A2dDY5a3htSkRmb2Y4azM3ZnJUbTRoS1JwZ1NCaGx2TkRLTVlOWmFUZzdmOGlKYnVxaWNQcHRMaWRGQUo3cC9qTm5abVBsL3JLUU0wL2hFTTFrbTFQWVRvWUtyc3Q0OVNDYWc3K1dzckMwd1I1TEg0WEk0TVh1YUw2cXBuRUNuQU83MTBNUzVoWEdkeG4rNDB4VmV4MUVhOVNNc3NONXFIY240MG54aDdoaTJHbFYrVG82dUdKaUkyTnh6R1Q3VWpUY3JuWllxOVNjS1ZiNWcreEdJazhNU0daSGZSeTQvVlowZGI1YXZPaGROM2F4dnNyNXJmZ0U1TnJDVVE4WUFqUDJGYU92SFFTQmZIaVN4M29wMWZPT1g4UEpjSDlaZFFoT3BjeFF2V2ZzV3V0SThrTEl3RWx0UzViaDNJN1Y0alBJYVM5Uk5qb0o4bVBGWWtpdGIzMEhYeGN2OUVjZ0NaVXBkdXdORzFzOW1qbnJyL3F1UHp2ZGxYWkZTZHJRdmQ3SFZtTG5VbUVsR0RrVk1FWjBBSmwxZlR3ZENqaTIyUW16Y0l4T3AzQzhBaVhOOTdkR2JzclBYWWY0cW1BUU9melJ3dllqT1lKN0FGcmIxY2FiNE16cEd6VlIvUzgvM3J3TkRjZFZrUWszcDJGWEpDWUZEcEJxUXBoVGJ3TWt0NzRuUkxoL2hUSHJuOFZxN3lRUEdLYlZoOEROZi9xdjRpQ29yenNXS2JQT2d4bTFpRDIvTFlvTVl5dDdIc3RSREwvOWlpT1FzbjJrSkFvbU9OWXhIYjZ3VkF6N09CVmw2UzRZUUZTVC9rT24zcnl1QUdkT2lJakhoS2ExMkR4YlRHQ3I4TVdaRW5MdklyVndOeFkzbC9ybFJGam4vblVPdkoyRU5sTFprYzU1OHVEM2gvYXc2L2x4YnYxTUhkOEVLQ0pZS0J4Q2R5TTBoSks4dnF6SC9OdlFKMnVkem5NSW1saWNILzZFb01NeklxTGNZMUZuSm9CY3hKc0d5d3JMeW1BblN4OGI3UEVzYVVBdXdXa0hsdVV1aTdVRFIwK05RMnk1NGdoS1lYRHA1TXFYQ1BYUGVLblRqK2NjMldiNW1zdVM5RHdkOTJ4b3F5bi9KYW02NEsrT3NXY2RPbU1TWWhNSjNXUlpSdnFtcFFHcFhVMy9NbVg5cFcxcmVzY1lObFJuTGNsaTZWNjlXeUZKVy83Zkh0SU9sYmZGY3BHMW5sUE5kZkdYZnkrSS9mNFppSHBmOGFBdXdKbXVYVXdFRDR6ZXZKMlNZVitucnZpS3RDTE44MzY3cEFQd093VkE2MmFsVjdHWDFjNFI0WHBjbUNydlhlM3N2VGg5L0FNcVdwUGdpMVpUbzlyZ2RmYnFOeVZkWWs0UzUraVNYbkxPZjNjUGFwVTkrNHBQdjBrekIrcHdDTkpKekErMUorZDd3NWt2d2szY3dSbHh1YXlpK3oyWlF5QUt3RUZ2T3prZllreVo1OXFOTFdyMEw5RmZoVmxQNnFDOGM5WHY5OU14N0k4SDB0Mkh5TDJJdU5KYUNaaWQvUk0vbmZpVGhpaCs0ZnFQbnBXcElDYk5VK2dMa1Q0R1lFK3oyc2hGMFBQa2JuOW1RTndqNk1TTkhkcEkyWkhOOTNhcE9JdEZuMTVYdzk0ZlMzeGpkNTY0bFZvZkpIOFJKMzVjOW5RK01aS3Y2K2VSR2pvUmo2NGc1TVRrUEpoNHFPL2RMZjFIdzVSYmRIQUh6MU9TQXRialdaOHJYaXdmT1UxU1c0RnROTHlyVjd4N29tZytwd3R6b2d6S0hnZFplTVI1anpHcTEvQ3JTQ3hDVFJaa1F5TU5MeHAwU0VSdnBCd2FUbldVTEJPeVltSW85dFZKNG5KUlFFUkFPelNGMTdGWTBHUVVLVDZacllvNFJSdzhqYk9KWklpV3AyZVl0VGxoRjZaczU0WTVONmhMM05FbmNTTFJNcTlOa2lBK1pQRHJqL05qL25ESVZLNm9kNzVwYThNTjYyNFl3UzI2Zjk3NHhBUU1BWWpTbkowUFNGMDJTMmpyU1dlYzAyWUN4aGJkV0tVRkp5b3Jzd1VlT2lRc0MxQUpqQ240SHVnQUYxbDhEQ0VHWDE4OHo4a2JGTWYvZ3B0RVo1TTRnbkZrR2xoTkhUQ0JhNGlSQlZ0WjhQek4veGVEcEtBSHcyWXFGaEdSM3IvczdocGwxaHllSnlYQkpmb0lTWE1JNGpFNVFNcE5xR3pQZ3dBaHcyMFJwSHk4OUxtZE9SODlXbGNQRmRPZEwreFgwc0NhS3duanBUREJWZTdzOXd0cHRJNStaTjlRVHdaNW9zVjhmdHArMURMR0dQK0dYT2dpMkRUUFdCSVpLbC9mNi9FUEprZVNyOTdyNUUyeEpFeXNGNUhtWjJlMGIxRXRUM1hTWVlxZ29LNVhFY1F2OHlvajBrZzZOckRxMWt2ZHBOL05MQS9WVGdadjB1L2dSbmJLcXA5dHZjcUJDcVJPYU5xMkxDaUIvS2ZLVVJ4ZEE2ZGdBU05ES3c5RTNUVnVIa1pvSjBCeXJVZk5TUXBnalpIcTFSU09jcHplWWlQTVFIbXd0MVJnaU50c2VncGJaUE5wb3FVWmxxdjZvQ2J5VE9VZEpqL21MYnNNZ0Y3Rysxbmsvdys1SzZ5c1c1VXBiWVd5UDEwZldRMkV5YklnUWZpTC8waTFhV2VBV2V3V3Y0VDhUYjNvN2N0MnFtRFFXVDZKVHF1MEVQOFNEcktFMXNEbXV2U2IvRDdUYW9LYXF6eVBLQ1o1bkVqNHN4Tlh0OUtKUnRHT1d6QXNkOWJMTUxRZWF2RTJ1UVk2eGpFQ3ppellzakdodndkMHBXelo2Q1dhYmxxT01VWUxKV2JHbkFrYXQ1dGZoaHYxR3JYQVZNSHROVzNaWjFRenQ0M1hXVG8zR2p6YTFFSXJZVVFNcDBSOWJzTUgwVjIrN2pYOEdjYlZUSXNZL0k4Tnd5NWhlZURLTnFaNTQvbkpDaDFwYkIvVUkvR01ycmVTS3pnUG15MnBsWkJTUjgrL24wOE0zK3AvdEp0eDBqUUVvU0xDanordTkyTGEvUDh4MW5ERGZpb2c2OFVqZnNQYXVOaGh1a0FGNTM5eE1WVk9IVDNMTEhWNUs0bzFySW5xMTM3c0tNN3ZDZ2NRdmY5bjNydVZPSm9NNjIwRUhNWkxEdUlKQ0RCc1IrYTZXd0NzVWN3MjJTdnlUMExWZlV6bmFLb0tIbmZXbTVjTjArUC9FY3JwYkZ2Z2NWb3RKQ1R4cDlsc0ovVkVUZFZOWFhYcHZuYTlraTJEUFNaTHVHN04zcE9uOTA4V1pKcWhTaGQzSS9NQUVTenF1YmJUZi9CTStCRjNNTjVzazM4UHVHSDF6SFdTbWkyZjNwOWNBY0w2cDRNK1NhYU5yeUpkdm9oWm9ZK2JpczdDbWJuYjV5aXIxR2JxRjBPelFaQ0NGYUIxdEtveHRDKzRxVTU2NFJ6YU84QTdIMVhuaGl5VUtwOGhUTUY2UlRpQ0diN0lUVTY3b2lCcDBJZGxJeVZQTi9heEV0VmV3dDZ0QTE0Q0tBejl4TVc2emZ6MTJvYXR4RWVPUGZRbitHZU9acGlrRHI0TVVKOHZUeDk5UC9nMHVibEp4aWZMZkM2NENmMCtOY3AzWmNlNTB5QzE3UG1jaG01c2dsNUFBb2lUZTJFeHppdE80cTZFQWEwWXpPUkxyaWZkQS9xMzNWVGp5WWkvVStXdFNDZGt3Ym1XR0NZMTA4TDhyQ1ZaVTlZTmdYbzN5MkxtL1VIbkZIVlI1QXVpQ1V2MVdWbmMyalNoNVpxV0hldlFwTGlBSXNqaTJwTVhmZnExWFZqWXNLY1VQUHFPRFk3YVJteHFuRkZWUjM5M1pvSi9jbmdYWm9oa1ZxZUhkRW5yN3F4THV2N3FGaU5aYXh3YjBzMkpXSlU2YXRzYlpRQmlrYUprS1pqSzR6Um9xUzY3dTE1Wnp1TEpNYmNOamZsNDIvdk4wVklQNlBQVUJzTzA2TlRKTVNPMzQ2MjN3M3ZHSlVONzluK2pRUTM0N3k3NVgvcXNpSWtWQnRVbEp4czF3RnprM0ZOMVdMaXlhUlplN0JrL0hValhpdHhPWGE4QzRjTUUzMlpNUk5XZEhrMFNmR0JXUElrZmlDS0lka2ZVRmJwemNrU2xSMUhtUUl2L0N5cFdBSEFjT3ppMWVCQXBvVGdGQ0pRZzAyZ2cwRlZScU9RekN5U3BxSmdLcEVBSHBOdnVEc2hGcVNWY3I0RkRzdjlyL3Zob2NIMExFbVlnSWlzYm4vT3NOZktGQUFDZ2NtYlRwZCtobDdFdlVta1VpSTBDcGRkY0xQZjlEdEl5ZE5CRjg2UlVILzBmSkJmMUE3UUhOVDJZUDI4dmtpckxDNi9oK0hlS1U5WXgxckU4WVhGRUYrbGFjbFFIVTBVUXR2d01XOVJEZUxkT1BaTVlmaDlPRHk0eG5DdkdicjY1bjN1VE1IeEZycThhSWNMeDNvdXl5aGwzTFpJSGRHNk8xRTR6amxra0FzT1NBKzdNUGhyN3ZVV1VhYkpLRlZqZXJZT05DUUREK1NWNjNOa1FUOWV4S1M2STdOWEFWYkVBSDNnUHRWTExFRFRPZHllNnRyekdBbFdIM05wRjZnTDRySm1sUWpmWmxXTGZLeThReURBRHBmOFppT1k5WjBnTDF4N1NZSDkxcUFPZ1ZuQysvT3YrMWNNQmF4dFRHbzFmVDFuVzJaYWdHdEJoTE9HVmlSMkJmdWw3cmJNNzdwNkE3MlZOZHBSeW1yYVA5aDJHUHhSRVlyTHVtcmVBeEo5QlVoMjNNcjNKMGFWQk9EZUpSY1UxYXQ4NldyS0RMeVFSWjdaZ3hMTDNwMW5zTE9vWXZDemRvQmhHbFJiWHdKUVZDUHlxTVhxK0hhOCtSVUw2WWJEdFVwQmJERHdVcUVZSTFrcy9kZFY5MTBBN29GRktKdXZZM0JLWEVBLzFRV2ljR0grQjJKZjhoS2NDTm5mVDJ6OExDZkgxRHZFZzdqNFlKV29LV00vakZqUHdWeDRUMHQzaEdPYXhBcXpLL2M0MlF2bURXVlVRTHA1WTBZY2drWWc1TFg1cDV4R1lkbGlXM21KL3UyUDVxbys4aTlpa0xMSmsycGdieFRMMEF1d25XRE1rKzZLWlowb0xXNlZzdld1RWlmYnJLaFcvRm5BRmlYSXl6djk2bkU5cXlxelZvUkl3SDgxREFEaG85MXNwRnVuQzFrMzludHdidTM3NkgxUzZWampXcEdid3RYMllFTkp6ZEJNRno1VXZEUGFsajBzZDhVMWxSNzRDL3VMeEdkY1F0NEs5RlQ1TGxnZ2ZuaVg2V0tnMG5QTER2UzhRMFdnTnRzRHZRdFMrS2lEMjI2UTg4TmZETHk1aHhNeDRwSWZWd252bjVoVjZDS1AzYkN6YXBRLzE1R0pPRXBCR3MvdWF0dzZXTDcyamJhaFQ4dFhocTJvK29yMWdTZnpFdlRyODIxaTBNdDBUYXBuRlpxM0l0YURTUUxEMC8yMlRkbVNUcm1QVkRRK3lyMnBLZkxLRFFZd2lidDE3eFBPZ29aR0V6N29jTTVZZGQ5Q0hwZ0h3SDM5UnQ4NnU1bm96OTEyWDdhaGt5VGM2bUVBVzIxUGVLcWtVNTlIVmVBMHNYM0ZFQmJoSnlJd0oySkpmUUs1aDQycFVuUzhNaVBFSk9yUUJLbnZ5OEhhRjRDaGpXOUlXRXpORDI4RHJEUmR2eHN4YmNUc1lCSnNVbXpmVmY2eC9uWWhIUGZiVlFJUi9ZcWFPSTVLaG1UM0cwUmFpSllxek8vOEs3S21MVVBlWFZJLytVUDdPUGVhNk9YajNNdXQvR1JreUZkM0Y5TzBBTDc3SHl5SWJpWW9nZENvd2lIdm1pYmRKWVhUZWFXZ0F0SDVZZ29wQzZHYklMTGovVE5UVnNDbjhvandoS0o0SnBGVDJyN0VNTmI1N1FReWhNS1VZK29Oa2Zuc0FxRURFN1NFdEsvcXljenZYK1p5aGtPelJ6ZUtXMHk1YVB6MDE2UjMwVTB1WXl3V292QkZ6SzE2Sk5NcU1HVzdEbXF6a0V2ME9hNS9wU3BJZzhRTUFYeDZscC9pd0Z2Mm9HVEUySmk4V2VEQTRLTzNvL0FOd0V4Nm04dG9lTGVONmFnSHEvZXV5a2tZeVI4b3UwclJXZjhpb00wZXU2MFUxcU02U2t3aFBUcll4VjNESisrWWY5TXIraDdaWmV1alRNWU1oYXl2bFNRSU9aMkJFU2JDTWtvMUM0a0FXZjdZRElRRzBvUE9MTXRjU1NsYkZLUlVQYzYva2t0ZjJheStyRGVkZE9ZbnBCanQrczBjMjlLNDZERXozVlFCRk1TektaaHBEalV4MTdZVFN0MExSNk1UcnlCUzkyMXVFc0hYeFc0YmYvVzhrQjZmUkYvcThTc2psZ2NLWE5tQzQyNHhnRjVPMUVxL0J6aG5EZFdHOTd6R0VRVDh0T3VoTHMrWEN0Q0lJV05Jd1VPeWtzdk4yOXRlaVpsVjVrZCtDR3BUTzFhM2FydHVCamluQWlEeFgxaVEwbDB0dE0vV2J1aFdHc2RrQ3FMZGxkamt6SVJVL3c2cndHdGNEblYwQy9DNTQvTFdyekYwQTNRTXFNYzBuR1kwVWQzQlA3REdRakY2T1hXeFZWREF5YU1HRFdrRTNNcXNZWHZZd1NHVDRWMmhXOHQ2aVR0UFU5OXlEdEdvOXVYd0dXVmpUazg3SkVuaDFDNGJkZ2JVTUxtd2VGQjJobGRvNTFFSU5zK3Nia25GTHFOMW9RcFJsSk52VlNJTzdIWm1GWEdXdVZTelpMQTNXUDIyWWhlVTNDMGlsaUozUE5oaWN6dndFTWNUKzRzUmhNQzc2c0VzL1RZSDVWcFVwRVVpUnZmWWZraWFaWGp0d2dYV3F6VDZtYnIxNFJ6UEd1RTdTc2svazJyTUNkaGozRGxBNDFaM2pCMFF0M1lyTlZJdWgwN2g0NHZvWDNUWG9Tb1NjWEZYTXhqRFZwMnFmZmxzR2Jib3Y2WXNldnZWY25BcnhYQTFqcHdMZzMxeGtXbmhMT0xKejlsR1M2WUpzaGx5SHhSOTNINlNWRDFiYng1TGlOZDVwMnppL2diWmN5bFhKcitOM1Y5UU8xU0krVjkvaFJHUWczZFl2a0ZCU1gzR1dha0YxTGViRzFvMXRra05nemhIQTU0SVNmWU9LeVhGTkFLcldxZXFEWjNSem91ZnJjK1FQbXh5NGwyMzBaemhoM3Vnd3dxVThueXowMlJVdW9wVjkzYzlxWXlIZU1DeGUyaWlVdWozaHUyd2I5cW9icnRkSUZzUm01aXBSc2RZS0d3d1htZUg3KzZPSEJ4V3FKVHFDR3lyOXQ4VWNURXNmOW5pdGs2eUtiY242aUpqWldyTnlzYktrRkFCM3FObWFiY0ZXb05sTEV3WUxFUm5Hd0oxMk1PaG5VbjVYTjlBODBEU2MzTlZNWjRKbkhFTkgyR0owZE1JVVpDQng3aGhLUjlUS1ljaDAvc1NPUGJsNHYyd1kxajJrUG1xOXRoMmVNNUxYZzVzaE0zWmkzQWJZY3UycHd4NHlwZ1daYyttNXgzNmlBUlhDcnczbWo3aHNMTDJub3ZjcWJZS1pjaG12S1dsd1dZN3JIMHUrWURMb2JPYkZFLzBqTGVXbythMitzTWVrNDFBcVZXT0I1MHhqelJsVG9SMFh0YnJMMHp1SHhYelNwc0FWb0tNeEpJVHM1MDY1Q3JJUERIeW4rRG5zM1NkN2tKUGRJL2dmV1NmMWFEZUVGUm1WUVhCRDNYQ3VFQ3Y0Ny9WQ3MzZUhxeE1ob3Q0QUhlTUpTTVFUOHNxRmprb3J3bEczY21aU1FVYnhCazJJUVFHWHpNSkxjNHMvRWJ5TlZLWFBCb2VEVERnbjFlVVVKVEE1T3E4K2NoZjBqZExuTHh4SGRtSTRJa3lQUDVwQ1UzN2htUk5reG0zNHJ0K1BZdExFMCtScHhiamxtM1FQQndNa1k4NHJzWVhWZGdISFR5QVh4cm1aWHhiN0JERXF3S1pCOVBLQld1MWlqZExDa3ZwNWozSHFOelRjMmd5Q01uV1ZSOUc1ZlNXNEJtdjNuSG1TYmdEZFgwS3Zlc0hIRlVveWJUTys5NTdOZEJwakJvem5DUUJKOUxLeFp0ak9rMUpJTGNtMkxXUE4vYlpqUzRCYjdpSVgveExHOWtIaWlpcEtQRWY0Nzd0YW1FdVVpblpNeGZGV013SjExeDBRMzBUUVcvZEZlU2Q4cmpmRWFQYytldTRZSFRwcUlwMmMzSG9HT29YT1NlYWQzc1c1K2oySXNjYXNhSXJhaGN5TjBHbjBDUzVHK1NsdjFKN1hpVkNmcE1jcUd1ZXExS252b0lSYWgzNlIxdmxpVDRDdjNNSDI3SXFqZi9MRDU5b1JBRGxGZ1dRM21tSlEzVGtvcktPaEROZUh3V0hiQTR4VkVaRThWT2p4OXI3YXJ0czluc3lIZEdlWTlQa3Z5bExHVjV2Y2Z4TEkyMDZnT1hCTGs5em9pUGRwQ0c5aHIrQ1NLeDl2ZE5FbGxIR05GNVRGUlZTL1JBQzIvMDVuaUdUM0FZN1JCRUw5Mzk1Y1lWaGtXckZyRVVwazRkdWNoanNjZE1KU2FvUjhvNmMxWHNUaVV0NGNodmRrdlYyWGlteTNlSzhQL0wyOFJycCs3NnphekdTQmRiZzRBUmlIQUpyVVpCNkNTWVJYQllOMVMvRTJneFVLSlJkSzJTTUE4N1VBc1FaSnEwd0VpRThzeGlnaWtzNSt3QjZLUlRBYnZjTktIQllCWSt3UTJmYkI5dmtsMXZYNHBEamFpRkVGQUlBSngreGsyNUx3N1I3cjNyWHJZR0lXZGluYitVSnNlMFZ2b3AxazJhd0NtbXFsa25RUWpUMUxmS0VsZURwenZsRDZteDFBaHp6NStMa1VHb3BBb2h1WTJOcUVTbitEdTFQWHJ4VDEvWXVMb2ZmN2hLdExuZmhEZ2hjQ0RhOGE3RktUUmhrVXhxZFBuS28vMXRzRm9EUWJIclJtMS9ya2d3cnk2ekFZaVdqZmdCRnRFaXVsL3hKbjA1SDBPWC9yN0NGTXZ0bFg0ZGYzdFNnM2xLazRlY09RVzI0RDRhVTRFa090NXBPTDFXaDcwQU5JZVA0ZnpvOWhFK0RkYVpYVG9MZEhQSVdCY1VNSVJOQU9HbzdIN2FEUzJGNjh2NVNBdk8vcEY1ZGNPdytoQTVzL3RJdS9IQm9Wb0JlWERzNGxjQ1VucVgrY2NlTGpOdUkrS3VXLzJXYUEyZ0pzZEtpRnNqVHN4K0kxMEE5ZFJ4ekwwaCtCSGFxY3lMZjdFUkdTNFJvTVM1cEJyeW15TEFZWXVkKytOUDAxTytHZUxFVXFiSmcvd25OYnVROEJrVERDc01tNllYVzluYnIzSEV3eHc3NjcvMXpTK3M2RUZVYVVnWGJwM2RTTVRpOTVqRS9GSDd3SC9RMXp3cTlyeWRMN21Ed01LUE9SSjF3c1Bwa09TK2FJWHB1OU1VcERsSUY5UmVxekRuazk3N05YUXphdUNKV05QQ3FtbXYzZTRlTnBjTlM0dmtOUkhoM2VGN3pReHlXRE1xM0JmaFo1WEVjeDMwRjVmKzFCKzh2SVN4MFkxWFRGSEZwbXFqYXo0dlgrTisrZHAzY3BWdkFQMi9RdHBtaWhHTGtWK1JaTXZQeFBkbktORkJqWHlxSnJtV0xyN1Qwd09kS1l3bEtTVTVlbUNRcWdTSmVRSW41UTh6T3hCWFJhanhYZTdlOUxEUTVlOGpqUGl2S1AzV1NYRVNlNXlSNDZNT0o2bWZGdmI2NktSZEU1T3pjcmZUOWZLWXhLOWZWdzhhMkFXUklFK2I1WnZ4QlpIRVlVS3owdWlTdndFTHVicDE1L0NyRzZtZlJEek1NZUx6ZDhxNVZpWmFlTXNCRmNUTzdUMmg5OTI0TXZPdng4anVOZWJVNjZEeVhnUzdmWkY0UDg2cEVaY2VWRGt6YXhURmJmRjQ0TmhSQWhWdytSaG1KMUErejEwSGxpN09vS0RweWNaWVY4M0hDNDBuVUZPZGFJcHBtRTJxM2NobkEweHVjY1pCd0hxQkQvV2I1ZlR1N005SWtvMTRtajhvZDVSUmE2Q2o1TWxRSXR2K0poVlZxRHFORGo4b3JRM1lVYjVTUzhIMWgvRStwM3kxY0I1TGhIQjRSL2Y1TDR3UDMydUtzVW1uUVRnb0J2ZysrSTRqV3NPdWx5dnhjRjFuRDNaSWUzbTM2c1ZMMnZNS2JOL2J5WEo0TmdZZGJwdjZYVmxYbDE4VmdLdUVVa2tuRUFkbWROOUNQUzlOMjBlU09mS0N6NkpIN3JVa0pya1JjdEZ2aWpReGtoejdkNHpWV1hwTVlrTEllM3hsK2Y3emtKbGJqczBPVE1iR0JJdllMdkg1eUlKczhscEJpWEtkb2VHZmRBQVJ4SVNtWFRwbXFXYm5GT2RBd1ZSQ0U0TDFhNFFWZk1ERElXVjhXK1AzMi9rSkJhWVNvNXl1WXBEOUExMnpsV25UL1lzanBDSVJ6bTZFWUd5Smo3WWVJTThpQm1YMmJqZFBmeVlnRFFsOWhtVWFjM0VQeGp2WlQ3VFRFRHJWWloyZ3pkaWwvVDVzbkJjY2tiQktCRWIzYWdkdzI5TGwvVVdaMEN4WmRMWlNaNnRMall6WERZeWczOEM3T2d5MHhtVElKTlp0ak8xTmQ2UWJMSnF2dUhkaUFGem03L1FiaG5oUUJrTnJnRXZRTVVkYnNvKzlaakpKSTUxQUh4cUk3UGhQN3BMZE1QeHFOaHpwdEZOZmx1RW1rcEFaL2FINGFLTjBzeUEvOEI3Z2FwOUtzZ3llVzJnNHFMUThmQmRyU0ZzVUxOdXJJdmNoSWtkTnZuMHFlZGJNb0JuaTlxRXdjT053dzYrV3BOd0NhQUhOR09nSkRINkxmZWlpcW5zdjVGQXZzbWRUU29uWSt0TWtHNEo2M2JaVXoxSEE2Q1BOSDFrUEhHNXN2elBoRnZIN0NJS1ZydW9ZakVUTFZuWDJkRU4yVzBkUGIvZm0wcEtSQk5hTS9tN2IzRUpVRVJkMTBWMm5MS3NGeWZUME9WWlNPNDlSNzltRVRWaEVUalJ6Y1FkSVdSdVRtTmk0TmpOYjV2QmhkZTJmWXNMb0V2OXhrTjFsTDNsY1FaR2hFOWN4d0VDc2MzNU1SeEhuWDU2a2ZiR2ZoTHlCQWJrL1JaSW9QSHFmTU5Ya1dENXJPSHN0V1RxM2NZUm9yeUZaL2FEbFhVcjJJeHA4aEJYSGRXdUZ5NzQ1NjV1K0YvRGxzaVpxTmR5NE81SnpEZFdJdGY3VDZCNGFzaXZ2OHllR2lQdGpuYnY5dVVlMUUyTDRjY0Z0VTF0dmRyeE1MSkVaOFhKNmlVV0hDYnhmUXc5dDNTS1dIb1diV1l1bGZWQ0NKeUhhSGplSGR4QWdkUC9GZm42OW5BbThZRFp4K3JQWWVrU3VPZWxJMTVWWFJ3NWhvQ0kyb2VpYjhiQjlwWDZYL1BqOWRKTWJudldTTGtRdDhEREdwaHhrcyt3YjNOeG8yT3NHTVJ1Tjc3QThHMm52K0FNVnU2ODlTMy9FdTRDbmUzN0d2WWN6WDE3VmEzdndxSlRJcWNzdzZYVGtRZnp0Sms5ZnpjRy9DZE1id2tXdmVESTI5c2tJelByVFFDVmQ3T2RGbm0zYkxYd20vSnNscCt1Tkp4b09NQjJhak4zQVJhNHQvYW1aeXk1RytNL1o0a0FCSE1XSmQ5T1ZHLy95bStQWWxFbTN6Q0FyaGovZHgzeEpoMXlRck5WUTErY0dCbzh4WkVKQTlRSkZraERwOXFXMmwyNnBDMDBrc0t2bnVpd3BOTmdnVjVxNzBtREp4MmltMUFXUGVrU1ZNci90MHNsdmxHQTN3Z2o1b1JWS0NIeHNySTFmcWtKd0lmczhJUy9tUFM5NHNVcTRmNURoSWZBRVR3cDhqb2JLRm9rRkJNUXhjZndwVzh4c1VzM1M3ZStkMHJVV1oyQ3h5aHlkeVo0MU9IVGJjcHIvMEx3L0ZXRUZKTG5zQVduUFcrMXFCT0tUaEt0SFhXNzZGYXZnYnJQcTM1WUtrUjVyRm5lcG4zN0NqZStnb1NBcVdOMmh5aElNNVNqb2tSblRXTVJYN1hFc2FtbE5UU1laTEJ0THlBYnpBVFd0WExicFB4NVJFZEc2amxOSk1tZE5DRFJTR0tvMVVCdjY5V2pzdEVPUktKMWZGWVhSaVlNM1NwZWxzN3JROHRDdEsxQ2FTblhxQzR5SG8zeTZJNm1wZW84QjJXcGtRNVpmcVR1YmdnYmg4WVdRcmp6eG4rUGoyRkRDNVFIa2tGbHc2ZGVzZk5xZGZ5VEJ0R0VFTlkyWTUvZjFPMXk1T0wyWU9QWFpNU24zTExBc2lObTR6RU1oR1MzOEp0aUhKZ25vNW1TeUhtNEJJa29oMU9vREF3ZlVMTktsZFd2cnJlMjc4ZmREM2U0R3lHWlRycXBFblFreEEzSmFqNWVrR2wwWGlmVVdCRnVsNFFJY2p3YlpIM1g5ZlJqdHFKYVFpNmJCTHhBUXRVa2l4M21waDBsSEZxTXhlN0xaNlZZd0hFTDFIaVhGOFJQdEY5SXZ3dlNmWnJ4NFpDQkZENXRMV1Q0WWh0ZGhNc3pjSzVWZXVkSjN3RldrMnd2MktNdHFVaEE3N0VOcGtiRWhnWUt5SXVWTDRadlR6N2lCSVBoRGdwVzIwYUlSVGpDc0ROSWlacDB0VWc2QVVqUkVYMUdZNU0zVlFaNUhTUnV2ZDJzL0pPSmZ3bjdmSW05VXZMV2hNR2RBWWFsbUxBSWd4cW03My9IY1piV0NacS9kN0YxdGk3WmVxenNya2tWK3JnajV2Mm5MODc3UE5RVVp3bTN4dDhKMW1pWWlxSEpJVzRRdE5JcTA0TVdPOUZWOWZyNEhFMFF6ZTd2U0NiajdZNHozb3ZqNHBabkQyUlVFY2FpWU55ZXhZUXcyd0taMG54c2t5OTNZNTlZTElERWJDV2R6eXFjcVdaVjRic0luV1pjU1RuTTEra2tUb1dCYk1ndzNoU2kvbHFYeVpVQktkb1cyMkdTSjFCNWo1QU5SdGkya0pNNlliVWxBbU9wdkdoTXNNT0VwUitLcWhEWWpPQzhUV01tOS9PT1VEYnZidzBmTDdGRHN1NzRTVzhlYXFad0QxMHJKZnV3Y0JmWEd6WUZOUUZaY0hmYnFoeDM0enltM3ZKYVRTdTFuZEc3dVRYMHdUNXVBTWtXRDN3Zlhsb0FROXo4anpWa1ZiaFVGS1BXc3NnWGVyQndUNDRjMUlmWmQ2N2h2N0g1ckYwaTNSU0RkcENMRldPSHZTOStuQTIzalQ2c0dBMkFnTTFJQVd3NkVzWXlEbVladHpuOXJXK3l3aXViMW53bFB5RlA1M3Z5SjhsSXdFdS8wSWcxb1BFeGdxblU1OUwzTEpOSmRoNnl2TGF3NU5UU3NQN0dVeFJPMkc5ejhOZlJEdlB2VXM2clRSVisrNDVpK1l4aUlHWUpVOGNpeEl4ZVF3SjBOQ1J3cGEveXAwdytwekcwZ2ZGbnZwRzduY2JwRWJPNi9NOEJsaCt2cjJUSHROek5zMnBBNjBDUTZxaHZoTDBxZTNWS0VmVFpNODNsd2JpWE9mMGptcEpYcU5YNDZ6VFZvRTJGbTdjUEgrdDFqV2ttTDJSWEIzTWtkdWtVeks3Y09na1p6OE1xZVQwSVN3K3RjNno5UHRibzV3VXVYbGJwZ3hxaHFaV0pjNHF6YWI4bmpVRzFDNUNiZ1dWRCtobHNVVlpRaVVEWjlRWHlKbUE5SmlMZzNWMEtuNGY2WVdESGZEWE5EdnlSbVB4UXgvZ21qU2pHc2RNb0VSMFM1OENxS01FTExyandnNHhHTzVGU2Q4ck04ank1RDlpWDJnYWZoOG1yNDVIRGJZc2xHZEY2d3UxMS9oRTJLRDBDbzRmbTdCMis5Q3dtc1daMXg2UlFmT21LYzZzOG5CQ1dxeWRPb2VIRFU0cCtRWERBVDVwTVBVOU1JRFJlVlVxT0JGS2o0WHRpRGJYQ0VGc05rV0NUc0FDbFRjTUQra0crUWkra3h3Mnl3bEplOGVQZ1NpdS8wdVZqaENJUElSNGFwbGR6bDJ1dENJT1BiYjREUUd6NndBZHVQa0FzbC9pSjJmUXlFZ2lFR05CYm5FWk9tZHVDVkppeHNEWlRtZkQ4bnVjTUpkNGg5b3VoaEtBZlFYMks2TCtWVTdsQktCYkE4TjF5dTZ3WlJuZm50VWw0aE9jc0NGOTlCUllWdG9NTjY3dFRUWVg0ZkpNUTFNbVhnbmI4NXB4ZnlwMHRrRGJRQTZDdUc5N0ZlZXkzWWRMRlBhUDFBNzJXWEE5bitVLzQzZnZoaDRXNWlkM29iSUppaFNBMUFvUFA2Wk9Qd3B4RGQzSUhlL2c4ZzUwSWxXOWsyZ3ByTjQ0VCtjREp2bkJENlhQNEx2SEJ3NEhPNlVHcnc5U3R3dmFYdVVmTkdTNk9nemZ1NTRjVVhNazZRQitBKzRrbFBTVS8wQ1dWYmNxWm9xc0FWQ0hOeFlRQ0d5c2tTY3hGRTNUbTNqT3pGWVNueWlZSTBza1oyb1E3bHEvZ3YyV09MZ0VVNzY0dzlCMXR4aDJnSTdhSDQ2Und4S1E2c0pBVzI2aERnZzF4YjRMenNqeENYMXVrdGZDeVVSdmMwTEw4UnE4OG5RZ21FNnc0YzU5Z1V0c1ROWkRQWGZiUHZqdU4zTi9FOTNrbWUzSEp1Rm9GNFRRWmdwNjMzOUdxbTNtdkN1aXdUb2hTM0NBOUxtUW1vS1RKdzVDQ1E4Zit6Tm5pYlRvZmQ4dDhHZGJzNEwxL3kwNHdadTJ6SGNCQWN0dzBYU0lsaU1BOVJiTm82b25ocDllM2gwZEN5NlJQOSt1WFhtYXROck9qN0kvVGZMVldnaG5lcmJYdVN0UjlndU1ReWttUWJnRkF1ZmJhZjFiUVhjWkFEckQxOWpOZFVJMTREWms3MGx1TDVvWkxPajFTQ1NtTEt0S3AzUGM1VThiVXlQNUswNTRaaEFSbjhPQ1ZmQzJsSjBYWHZQS1hESXhZZUlMbzU5SVJ6aXRwMjY0K2lnOE1VN2NqVmFZVWYyN05oRG55SlhpYWNDQzJrSUphYSt4Q2p1dFpUeXRwMGVob2FYbGhpTDFEUHpLWmgzSS90UmZ5aDVtQkw3dzd5NzdReXN4SFlyL0Q5N1o2UlRUQ29EZ0hZR2RVM3dLYmI0VERVcUY1Nis4NzA1eEVGSldxcGNjUzZ3R05yVVJnSHVDanlvVjFXMmtHK2psbGZMZXllZFFsbDM3UmFsQkg0Mzc4VWd3eDZYUmRldTMxa1hsSFQ0VXB5R0ovMjRrVVNHT011S1IyUTNlOUdmOHNySXEwN2lZSEg0VTlZUFh0a0Z5YnkrTi9IQXJXdHpYeFZwc1I2VVc2TW5GNHJSdnJaSTBXbUtjRlBxRUdWaW8yNG9QVitnS1UyY2hTSnAyRUlvdkZXRTUxM2haVTIvaU1vaFlCbEhqRDFnRCtyeDlvbjNYSlUyVnBMYTJmK3pTUjhnbW5VM2xTblFIUElXMWFnVnEyTENPdnlRNlI0TkpGWERoL3hEWWpnVjlsL1BxODczc3NRVXQrOUJSWWtXYmpJYmJuWE5qVTl2eW1TVVZzeVQvRHk2NmVVcjlBRDBTb0RZVkpVVzJLYzJadml5WlhVWm5YV1BHSXNmbnNoK3JYaDUyYnp2M0NFNjlDTkJDSW52T01zQzhjUmZ6eU90M1EyQ2d0Qm93R2d3QmVFYXJwUXRPTWo3SE9qRkMzeXo2Sk1TUHJDaUFwaDlNVXdCWXdrbDNGemx1V3hQaUxyd1ZYUVFmUm9vVWEzWkM1cjZpSXpOWWxlZnN3SkRHaUlNMW01ejJNdmJYRVdieWE2RXRBVi9ET2dKa21ZNk9QbFJsbVZOUENBeFJnRnRFelVoTGQydS8waEM1eGh6WVZ0WFV2ZTNFbU95NE1WOElXR09sRXgwS1luMjY5NmtuUVg4K2ZJV3VUUlZmaVQvQ3RXZDEyUW1USE5Cd0svdzVkdlIrWmV5WjZTWHBRbGlQaTkrRFFJQlM4Ry9iK1YwYVlZZW5tRytQNEhEN2hOZ3lZOEZ0WmZLb3ppeU5CazhjbnJzNDdXNWNBRnhheUZrMlZzcEJwV1lSVSthRWljTWJDNE1hcVNleG9YT2RBd2x4dGZqWVNkTVFxbndZS000L0tlbWFDVHBSWkgyWGdCNFpBOFVLb1d6bE9icEVoQUMySlpldjBRRUxKc2NkWGZSbndBcVNPYW8vSEYzVXNGam1XTlJqa05XemQ2dU9ETGRxTzYxeTJYSTFndVI1QjhoeWNBc3JhWVlBdWkySWdHQUNoaVp2U094NmtLekNNSXhTUXdFb0YvRXYrSEpOMXF3NXdpMzZ3bW1lWVhUeVF2MHduODBzMFdNYlp2K0ZFNnhyTHRUbmpaNHhVMnJGdUlzOS9SRlhFUTZXYWJiZk1Qak9MZ1c3UlFTdDI3WTY3dHJBRHFVREJyM2ZzZnJKa2N6bWZmdVJPcTkxd0JLVXVQTThoc0FNeGZxUVZkN0pNaDlpZGx0VFRtdGlXOGhNMGtyZ1JDdnhPdjN4UW9xa2IvaEF0ekNOdDVnM1ZHdGVqSmNuYlZHeUJjdm1tVEQyV1RKT3F5b1NLQjl5VGl2Y2Q5ck1aOXRsWWhjcWpzOXBrUnFPTUx3L1dLWklUWCtHeTZWVGo5WTVhL1NpUndaSEM5ellVdjBmWWpzZDkvb3FaWlF3T05FeUtzMTc5clUyM3pNZmcrVEtQem9jMlZuNDVOSndyMlFHUUpabm5QbUJIdUFSZjBlTXR0UmNFbkhkT0VpMW9YM3BFdFUrMGhhMmliRW9tSzJyN0h5UnVmY0w0MmRLbURUaDY2cjlwbWs5ME1idEpjVkx3NlI4WHR0cHFhMzl3SCtER3hET28va1hpNTlZQzVMMGdtQ3Bja1FGMUFNV2R0Y0VRZHp0am5tQmhPMUFUc3ZPTVoyNzIyN25OK3VnSFk1ejE0ZnQ3NXoxdFlrdXJJc1FqbXh2VjJIdHpiekVJSmxXdTZOdG9QUUZMRmhtZE5lRDc5UUtaMGE1ekNFcDA0WEMzZ0VPR25XMEQveGpoaFYwV0NiaE95MTNhRlpmampjQ3ZFaWtBbEJGV1oyWE9yM3NNRkZESEZtbEUvbVFNN2k4VTFrb242TThNOTBRMGZYdlEwRE9KejZkTkQ2WXBtWVJ0N0NXUlNWSmFoK1ovaTJvaUN1L21vSTkzZVBxT1c2dzZsUCtBakMvUW15TTA2WFFuZU9QbVFTdFFjOEdxTWJSd21PeUlLSk5NNmZzbnNCd0FjOU0xNlNVTFNWRnR2SzJkdGVTaDVEbmtSaXdKRDlaNjJBMG5WN21kUDNhT1BURkhWQWMwajl6YXJxUkpFRnpKRDdoK1ZmaUs0RCs4cnRkUGNrcHlWbWJiTFQ5YWNuVitHOFdsNXhtNkUwTmtWeTZJTHhhUzRKbUx5ank1TFpZSk42c1dYODF2Z3hnYUZqOHdrZzU2RHRyM0JlaC9IZnpSVGZBczU4eWp4dkVIYWNNTjMvODZ0SWpCMHROZWVadDFxN1krT2xGbFV4bC9NZi9PSHVuL1lMSnQzeUMwNzlZYW5EUnlGWWdsdnVQK3VCQ3Q1OHlPNnU0WldRaDhzcUpFMEhjaUZIdFR1Qzk2anA4TzR0YTR1bU55dUJMamcwTkF3QVpjZ3lqbEVUc0NZemU0Q0JMbTFzdVJObkY5eURFQkNkdXZJdEE2RzZEemI2R2hzZmliZ0x0WXAvemwvcVhtUXJmQUh2NnB4ZzNHOHZtYXFkQ0pSdDRnY1JrVmF5UGpJSmtQS2d3Uzh6enlLQUd4WHNORm1vRUxWd0xjQ3I2YUpIdkVZNTJqaVlvWis4azl6YlVqRGVFQ3o0ZkMvdkhIQXRBeWFMTVlzN0lHbDZqQll0ZDZUbGs3eTdscitwTi93OWRsVE5OdFJmWjc0OUJqd2dBUmd1bk0yN3BZUDlUS0k5VlZWc3dISVRaWTVNc0VLYmNIdGNqSW5PNng0djZETG53Mmh2eGFjRFExRldBUnJUMG9qcjVNR0VvYUt6MFA4SXd4WkdIQzdWZHZZTDBHVnF1c3FLcFdET2E2cUZjaVl2cHNnMVk3VG96YVNmZmYvWVdxK1R2b3ZKRFJXWWMxek1WcHlZbjM5QWZzNTcvS0xWcTVsVHFESVRvKzRoNElKSkhyRWExeUxmaHF2dzNNYWdNaWZoOWU0SVRldnc2OWNxM0Q2UE9MelN0MHU5cmZaL0tjMlRiMjYvZzFOMzhjcFVWUU1aZEhvL1FLalJtZk1ZNC9ucTBNRlQrU0g1VUdzOHpMUHVrT21UaHZnMVZQTHcyWFNFV0dMUVpyT2RIYlZzZWVwcm1VZEtTL3pLS0hOejB5Y3Yxa0dWUzNneEN1a1p2OVRVUlJQS0RXSGpLNGFxYlM5REVUc2w0UFA4bkMrUDZRY2thUENGME1qNld0TnpRdDM1WGIvalRIRVN2ano3c0RHWGY2V01YZExRRUxNdC9Rd2xUOUc1dGZoWjk2SldPK2Judk5OUTFER29LZjZwRllOWGZDRGR5cnIzS2NyQ1pRVWlGK0lWNS9PYi9PSGxMdjBjZmhldG9BeVBtOHlGeklGUFcyQXpkbDE4ZlV6VzVrZCttYUZKWURKSEpTd0ZRZWw3aERpcHlxMjg0YmE3eWw0Nk55NWI5ZDVDOGRmQ1pnYjhxNVgxNUhyWTFOOStvQ2JUdXhEdkJnelo4UU9kNmU5QWpvSExWdHdTUDRmOVExaVNCY3FtWXJJM083S293ekcwK0g1ZXVsSXE3djNuU0hoMWVwYzBVMFVBOWw1b3k1RGFoWDdCYlJZUURtUTY1aC9VUUszUGROTUN0ejI3MytwZGt3bmEwTXgvd3R4OW9hSjFQR29NeEluSGRYR3lCMlVrMytLdjVsMWdaYWY0OWVRc1BENGFIME5WYU11eDd0RmNFcVR2bUFBdExqdERlTVJvdzdJd3RsWUZXSUtENUdvNmdKamF0bWRTRVlwV0oxRHE5ekJoRHNZMTFmVW93Umw4QzZMdm0zeDNCWm53TlBTSUhQUy9Jb2xtdGNnaFU1VmRDZWQ0Wjd5dVFrQ25KcWJCQXVJd01oV1J0L1pNa0JtWDVDVk9naWtiT2FBbWFnZWxscUJVdVp3VzVNQWFyclFqTHRTQWRSVGwxam9zL09iV2VVL0ZwZWQvOWd2Z1pobmlzcWt3YnpsZ1hGY2RBV1lBeCtiS1dvbWo5SEkzUFROZTExYzYvRWp6cU1VWHpPTVlxWHlRZWxWdWRjMzhpeUtOa09wTFZMM1lTcTMrNy9scHgzaTdqVVRYZ1JDWEhjTXM0dk56dFBzSTlzRG5xSWpaS1pIM25hM0tEU084Qm0yUk9JNXZ6aGJnZUlhVDlrZE5ndjdTME5TQTZab2xmcUg5NjF5LzB0L3p4OHZxMGIySHJ2T3JsWXFjajdPRFk0cnNLUVVya1MrUXRXYTJRSmhkcFdlWDA0dWlUWW1OYStJaHU4T1plMkdVL3Vsa0E0eks3enc5MmdKU3kwMjZMSVpvcUpaVWZTVGV5Y3lqelpOMjFtNCtZTnNub3BmNlVCNnc3Rk1xUkxoa0VQdC9zaDFrQ21OK3VnU1psd3dvUmRFMitwVnFOZ0RMdi9lay9GMDg4TGpWQ0xzc3duT1E2U0JPdDU4aHlVakdwbHVlRTNNMUVsZU9CWUU0ZlRxcm5UVnA1aVBGeGxEU3RWMjJtaDJoSVk5RmlSSWxvZFl2M2E3VERqZ2VGYlAxVlZ1dlg5SE1RdkRJNVU4ZWVOUWkzNGlNd1VmOHUvMHdnYVQ3b1pyY3ZIbXVsQ05ybTFkRWVHUXhwVjFPMUhZTko2VGFMN0JpS1BUblBtNW5NekxiV3RBZmVvWm8xRXlhZU5lM1BsY24zb0xlclJlUExWbzFKaDQvVFpYM3hESWhPdjIzQTgwcVpVMDlLTS96K00vNzI4TzdsT3NtR3IwSlF1Ky9zYlBnM1pLcXl5dWlWam5qaE5uWFBDcW0xVUZkbjE2WUF0S252UllxVlFLSk1DdlRPWXFNeWdmVW53TlVzaXN5STJiNGRCUWd1cjZ4WG1HbTRrQ2VodlhqeWlvc2lBUmVVdnZEQ0pkc01UeTVjaytXa24ydVRhcGRsWU1CQVVlRkd6c0ZkejJoSjJiZVEvZzAwZWsrdFRsV2JHM0N5R2VDL1p2RlBXdjkzRGNMbmtSL3pvc0xvb2lkR3EwcmhBd1ZwbThnbTNoZmh6VURFNzRSVzRWa1dsMlUzRyszUU5lMEdySlRFVnlFVEhuRmhJMitRRzF4UDdqOHFkdW5FS1YzcFJGZVZZVnlHNFUwd2w1di9YMUVPbGpLOEtWcVpQQTFIWmkwbWdqYlpJUlFUdHY5OGdhdSs4TGplNisvRi9zcHorTTMzTWdDLzhnK3UrQkxuSmZQUGhSNk9RWkN6bytJSEd1STNURmx6REpMMUpHcmU4SmlTWW9lemczaXhiZFRHSkUrWk03UkJYVkNSd253UmE4LzN1b3dVSnk2RlhBdkxqK0UzYWQ4RWc3ZjJaeXd3RG9VbkJ6UExhNUVOMHEvemtLdjRwUVoremhtZG9TSTlTQTFNdVNaL0J1eHpmcWhaL3Y2TjlkelptdzMzRHczVWgxd08zNC9aNWs2WHE1NWNibEZWVFlNdm1xQWYyU0hpNXFmZDdGZmtEczY0RWFJQmU5TlduOU1aZGY3RmdLY3lRYzNKSGtuRnFEUjd6QlRPMnBIbFRzMzJ5WFQyOUZiZWFQWjJSRGovRUNTZXdwTmJUYWVuQUhyMS93dWRVSzFKM1lDMXZxVzY4ZE54cU4weDEzZmthVXE3THkvUVRLRkZoa1g2cm5VSzdEOTBQa2xwYmZFWTlRTjVBNTVRYk1jaXlvTFpmbUlBSnNkY2hTVjkrSXEzU2ZVdytaRmJkd2VOUGYyRUVPcXErcmNSSklxZ3FtbjY3WTNLWlF5MWZvRHhLQkpsbFhWWGpucE5tWFlqQy9sMktYTm9yQ1AxSEU2U1hlZzFIYVpYRHFOZ00zQWp6dVJPSDNTM05xRVFzREdDVHV2Vlk1akpSZ2wwVWJIaEx5eE9pVFNFaTY1OEplakxlTGZ5QWU2WTZCK3NUTk5ZQ1ZKT01mbVBxR2cyTitOc2RxTHJPTERraVBobEpvbkY3Y1Nxa1BQRTVhK3RXQS9CdmdmYjlJdGxva2xRWTdKTVZWd25IUTBjUFNoZlk4R3o4bHpqMkZnazZ3bFBLVzg1Vjk2R2FqcGx4bkovckQwTlVFZk8rL0lmNkZCcXNBZnhNT1hGWm1acCtwS3lvV1Y5RjZKMTQ4V1Y2U2pXR1g2Vnh4WVFxK0VRc0xQbDJWMGNGdkorK2QyRmE3WG5VaVFPeGlJT3A5aGVQOGVOUytFWlgzS1JPU0p4blJ3bGd4VGRIMWYxNHlPYUF6RDFPUVIrYnJqTC9vMEQ1bU9KQndmTnlRNVpTMzlvV0RhcytBUzhacmtrSVlnWVpHUHlMMGF4T0RENnVYZHhWTTlJWUhQc2lpaTZ6SFJhYTk5NWdqdXBKeEgvSGE4M01ob01UWTdScFpaVEN3NGxDQklCQnJKWW9GNnRWVzROL1dETVlOak54QXA5SVJaR0FKUUZ6Z0NRcnhVckFQSnBwZWxnT05hSUVhN29WVU5JQmtlYmE1NWtEaUJXbWJZR21QaE45cithZjRsbGZ2RGxmNVh3dDZOOHJLTmg5YjViRkRuczhGc203N05zbEI2dCt4RzVkQjVzeFE4RW9JKzVxZ1FqM1lwaTRqMG0vSmwvQklqaDEzRlN1enM0YmY4M0hDdUVyalp0VWxiWENCZlVaV21OQTFhQ0hscmRsSGN3WHUwOCthTjhwcUlGelVScUpycDVySktmak1WYTI0RVoyNnYxSjNOa1V6VHM5TFh0dm9pUzhSTk0vdDh6UHRSRmd3YkpDMWJLWmRtWkNCL1k1U1dFaFpMUGZMZFkxVHlrM2NkeENLZWRkUHZxZGc5MDZWb3NkT2gvMFowcGVSL3JMa3hTL2FSaGpZMTc5b3Ywa2s3a0UvQVAvQ0pYc1cyWnpES2NoM1dEck8vS29kU0t2STFFeFZhblBualR0aThqZDRyeW8xSEZVczJLN2pNT2dUVDEvTU9XWm8vbVBCeFQyVnpoaSt1d0RRUGsyd0tuK0tZQTRCSFhFU1VRQXpraVQxV0tIVW1RMTdENHIrYndZWVVOcWVZNk1xVFlXYWhoNlA4V3FKaThyOStUQTdIMWF2VUNHSHoyM3o5SnEvYThZOHVwK0FHNUkzckIwN0l0dTdKUjYvZ0R6dStaTDBlV0p3QjJuZUhBRG8wb2JWQ3BRNkZ0N09TWSt6UzltK1YrVDM3bW1CdVFSTExSVGZlNFIvQlVKbWdxa2dvWmdOK3BFV3R2QmdncHBUN1IyTVJYMEN1OUszb0JXNDFDalAzMzhmWlJvaEFLY2JubmJJWEVBVmNpbzBGdmlySENKc1ZLNTZNU0UrSHJ3Uk1PcG5ndzMxS2ErZHowdFR0OVQxaFRjRytVdFIrV2NZWWVadW5uSi9WSVUzUUdRM1hnQlY4dEliaE9LQXFZZForVlg2U0Z0cHNsUG10YjhaMW12NHRJS3JPYm5zcFVJajQ1SWtxQ3V0U0doL2lJcC9LbkVZeWE4S1NrN29BZ25pZFV6SmJHVi9qOGtRRWNxWWNwWGZXWm1IVEpMZ2g5R3orWm1NR0owQ3B2VkJBY1lXbmlqcit2WXdZUCt3MXYrKzJZOFA1SjV3YXFoMDBIV3JRbHdQRlRKVnFhd1FlZEFObUxRZjd0azkxTDVielZxNjRvMXhqdjVPcnF6MWlIVHhpQWUvRVo3RFNaVHRldmdYSWFXcHZCS0tSeWNQM0hTeS9jUjdHcjhrbTlRaXllNkMrYlZDcTM4Qis1ekxPYjZpOGdNK3JYWkdDRnc0MkVNTTZLRnRicFZnV29uRGVxclpaeU9aeTZXYWZaUyswSy9rZXdWN3BpV3hudzN5MEhTbVFtOFA3enEwVnM3cUpjT0J4Lzg4VWdUTnJwbE9QeWZaUXJFd3EwaFZ4L25UdUU1eUd2ZTc4SFd0aFhrRWlSeHhKQ1hDS1gvcXZvV3p4eVNYZEVQMWl5WWJHa2JtbmJibE8rWDl6N0poNFZPOWJJSlVUcHJWOTJab2Qrdi9Uc2hsQmZhREpncEVyVm16N2RKVXlhVTNuK0pXNmxpS2RWWGlOVG1iMWZkdDZYQ3liZTYyWi9MNkxVQlhPcURQR01SVk15bkw4YzVWT0tOOFhzQkFqQTI2MHAyeEhQOHJzSlU0QlQxc3RVL0VTTVlYdUZxdXFpYWtUT3Vab2ZqSytUbWlMekdMZFVCcUZaOEZIYzJGZldqc1BNR2NTbWFWNzhYK3pKNG9yTDB1MnhFdkZIUGxzWjVhbFpjaW9KTGZyWjA5SlMvUTExZFpjdkVTbUVxd2FnMDRVOGc5clRodjlCUUNER1BhQmVDR1NPd0c5RWN6SGVocmVPZUdHWVE1bG9iL3lqV3JPWS9uT2wyMUg3cnBkd05FZzQ2Y1hpc0pVbGdkSlpBWEhlcEZMSUw4bnpLRTNGY3grQTh0ODdFZzNzVzdVcmFlalRTOWtjQW05YVliL2xlTUJqNE5nQXRXK1pEbzMzS29mdGRUcEpuUWtUaXpBKzRPNHBPMUJYVjNpZENXRHg3YkdvaGhMV3Y0OWovenNtQXVVWmdiOWN5VkozV0M5UDEyVURsaVJtSEJwaEtZM1Zoa1VLK0htWE0xMitLdEY4NytPWDc3VFBXdU5RTFZYWkNvWWtnUGlKVEZnRE95ZmY4ejVGNUtFVUdkMXdEMHYxZkhEK3lYWWxvU0tCellHUGNQS3NTQ2hiakFQN1RTa2ZmMzlOSStWalZzaWZGQkVvQ1ZIT2lBQ0c2REZOOGIyRlFkMUd6V1phdUJnRTgxRHVFYjExamtTbHFnQlVZMGhuekxTQjh2VmxUQTRmZjQ1U0NtUXNtU0JlUUNVY0ZCaVhpWmV6bGdINjVzNzhFbHY1S2g2cHY5S3ljTUNacFlESS9yZXQwN0N6ekxuWS9GODRmT1puVzJGVWNkSG1PcWhxR1pVczZrWUxObjFKaTVmU3hoWjRpSG93RjJjTDgzZFk1R3BGWG5ySS9GUDF5M0NxL2QwdU56MWRJZ1FFczBxdEZrWjk2Wk9XWWZzNTE2UExzVjcwYk5nYWVOSVB6ZytsQkMvemVMTFFZWWFsWVZJQ1piUmxSQTlqZk5IQUZqekVDZkVRTXlYNVh2NWMzSWx1MmhvaHNZQjJMbHlSa3czVURMcHZuUnpRckUyZFVmRW9DcVFpcUV2c0M5UjdYaUhNaVRMM0tOanNNRjlCY1dJVlNnL2ZKS0x4UTg2RTdCbnBHVm4rY1ZNRXpMZ0xHZjg2cms4Y0RhdVNkR3N0c0F1ei9WcG41U2Zqdi84UUZqK2FqaU9icXZpZkRkUTNPZUdYa1JBTGhOZTRRSkdMa1V1SmNOeDF0S2Erb1hXem1TaUVOaUJoQUs3TFBlYnMwaExvSGdmUXdKdUloazJmb2tVQUE2eHdVaCtIT3JGdDd2Y3JFUElmNEJtaXNkNzhTdkRRWTN1T0lqamxLNlh5TUdxN3V6K2lqQTB4YWNWeDZHTFczZnJKSVZRQWZvWExnUDJ5bTllSXZDci9hVG5SQ3BqTW1LNGQ3VkhDMHV6K0dBc1l1SElLaVY2ME05d0hla2VGMFVhRk1HZ3BzNlNrUkg4UURJallyMmljN1o1c1lvUkRiQUpmZDROaEd4ZzZzbTc3Mk1sZlQrdEh5eEtMTjB6SjAyb0cwSEh6UjF6WnJkaVEvMFVjNUlkeWlvbURwZjA5M0IrUmRSdzBUdHNOenRyT2p3d2hHeTEzNDFvblVQa2x0TFRPQXlYTEt0L3IyVFJtYnVraHRGWFBCM0NiazBZUlhlWWUycW10UTBpQ1N0OFZ3RkdwQ3FwbUNyTlVXaWh0WGdncWtKMnVDNmQwOFdmUzR2UWxaSDRySnBOb3Y4NE8rWStSTnZJbFFkSjBCTk14b1dUdGt0S1EvbS80bUwyNFQ2STZSWnVPTTBYTTY1RmhSaXdDdXRVeUhZbVU4bkVmSFM3a1JkSk5tUENBU0d6UUd1WTlVbm1ZWVpqV3cySVFnY2FmQ3RITytiOHZzNjNiVDNKWlQ3SXVaVmJJMG5aTUo0QlFmVVVyY3V5eVU4eWw1TUVTOUdwQ2RTdXk3Y09XUnIzelpRTzQweVl1WFdEeWVJRkI1SnlJWVlBNjdQM2NLQ28rcVF6VVhuby83eklNTU1vdzdrZW1GYm5aM2xEWlk4bEZ6OGlPUEkySGVkUElPNVRlV24rSmwvN1RHN2dwOTR2bElMUmNMUkI3QTIyWTM0dWZKM2NOZzgyZ0dzOUYwTXMxMlVvZmlNcG9nanZ2d0F2bjRoQ0RyN1Q3OUlaemlxMGtZRitkUHRQVnRVZ3dFU3dBSFIwY2JJMER1M1VzUFBYeTFGdzNIMHBDNU40U2U0ZU5KYkhzVTFJMEFrazJnM29WZm4rUkZZemVPSWpYMEh3aU5SQmpDSThGUWtZZ0ZJUC9aWjdDMDdjU1VFVjBOajhicFJrL1Z4VGVzRTcrR0JwNmQwRy81WHU0R3hNa3FtSU9UcnRNVmlLSmFnOTdpZEVoUldzS1BJL0k2UVVQb0dnQWZRZXVVVkkwQXlaTGpEL2xkc0t2NUNVQmc5UlJQc2RLNk1Nb1l3aFNHaWJndTljdWhZK2FKcXB1MEtMc0YzSWFRWlE5NG4wczY0VmRtVWQ3dmRYSHB3cG0zY0dueVhGeWFaaHE1QUw2QmRiRmp1UzIvMkJGOEVNVXd6aW5wOW83aFdOdE1mNHlCNmZudjlqSnQ0d3hZS0p1REc1WnN1Rk03SXlvSDgvVTNhWm5uNWUrbVdKM2dqTk1Rdk92V0lmWVMwcXJSQlZVNWx1YUMwZFc5NFlRVlNuYVZHVU5VY2VJckRpUURQSUlRRGxzcFk3YnVBcXdaWk5iTnNDMnhFQjVrM0dlZEhzczZqekNnT1dlajFIbmdoQ1JlV1dvYzZpYkpyV010TW1FMDVuL1pHNzgwU0NsYjZIZWd3aVBSSmJMYlpaMCswMXFJOHhFS0E3VU1nZE96Q3I0eTArZVk4aEJmRmhZWUphOWJxWVMyd2RoZkVFVjZDWlV2Vyt3SGIwc05CYlQybFBRY1BPQ3hWUHFFKzg2d3RRNElTOXZybmdadzdiYkExLzZmVEVpMFQ5elI4NkhWcDkwd3F1d2p0cmJZOWRxZ1MwSFkyM0l1dFJLUFB2RG9leWtZSlNMQ29wVVpoWlJhRExMajhoTlV6bHFUMkcvWnNxWDN5ZEZDQ3lxbG1heVBWWjRlWGx3RHdPVFUvT3JJN0lsSWFSaFRPZDJTVGhDRTQwRGs5RDVrdlcvMnB0MHYwWXhLYlF3cUJMc1JxeW8xelpjemNaV2phNUNxYWNjUUZ6N3F1eERuTGFZL1owSEJwVngxSnlVYlJFUkljK0tvYzRxanAycUNuWTRGWUhoaUVPTHZZUVBtT1QrZGJ1QzJDcG5Wd2JDQ3ZLVWh1RjB4MWZRbm44ek5yek1GM09rY2xickd1OGRwYUZpRzdhTUk1bmVPUWdmTnZVOFIyYllDaVpJci83VURId3ZkQys2VXFPWDRha3pIaWpYekVWNFFWZVgrTEJJcnhKZzBqOG8xZnFjRFgzQTF6Qkp5U1llRjR3VWlJSWFhNDNXVy9HbnM5cVNMRENVYmxyZG9RVjNNOXJlSzlBV3dYbjhlK3B5OEVXYVFoTUxUaVFieXY5SDhLd0ZsU2FSRVhNdjlmcXVMUDk1OUtDME5TTkhiOVQ3djA1V3RxMUtNZWhaZWdpcGR1eHU5eGtpYkVQOUtsK3hVbUlpWXlyTlVyWTVqbHlKdFBTMWR3VDc5MEhydjgvblM4bDVWWjZxVnRHMnJCLzBxdHVRWjd6OHFlV2NLelhDRjRObXBnNEN1K1dzSU1ZYy9pYkVkK0NHbUVHQklpZ0k4Z1V5L3JxWFY0dkVnaEJQaTI1eUZWb1ZTdFVLdFcybFZFZFNUaDROSS85R2czM2NWRFBxWmxqZUdtYWtRU1RNMXBqdFFValZYdXZCUmFjRitVMEpyemtodzR4QjlzaWZZUWNXeG0wOXViWXc3SVVwVEk0aDNHZmhtNkRoc2w0YmFyUlUxRm5oQUtDZjNpSkIrWFFPZTR4YVVnVTRGT1VaU0JUTzVsb29zeUdQOTNQdlNaTVAraEhZUTh0aTNSdkhmWVVqVDFNZDM5NDJvZTRIdXNpTDcxRE03dG84dWVSRjFJci9CQXpIRkJNOHc5VzJTeVFUemQyc1JwTml1ZlFIeGhycW5aMGxPWTl2NnZBd00zWW5jUUd5V3ZJTkRmOXBEQVpqUFZuNThOU0Q0NVVBUU1MVmNHc3NaNDllQU1YelpaZGwwY0xVeW5MdXJqQ0F0TlpEWWRpbHU4TS9OQVFkSjJXZmllTFY2S3k5Z3NUaXQ3bGNRS0RFeUhFOGlXNnkxbjYzaUlhODFucXJwM2dhc1ViOEFJZDJma1hHWkNUWUg2MGo0ZFVaRnFia1ZFMmd0azZoOWkyc2NvOEpJUkhJNVc1a3lxaEVqUmZuZEg2ZEJRU2F3MzYxQTJ0VGd4VG00WjhOdy9wVldVdHU1VHh4VkZPZ21UZWJLQmZkZEFKY0JXelkrZEd2NXhRSlRtVUUwc2xIQUpQRXVaRGM5QnpSVXh2bjRiR3gzblN0TW9BSTUyWVdzQ3hCRzFjS1FiaGtQWWtTSFN3ODdHcTRwbktOZFRwUGZqKzhHbkNPVUtnd3JGSXMzS2NqM1RWTmtKbnhFVFg2a0xoaDNpcmJtdnZZeWJwdHdRM0ZxMUZ1cXRiZWFlZ2Q0ZGFESWo4NHhlVUg5R1NsRXV4S1pvWm10eDhMT3N0YjFZMDZFdG41SDNFRTJZR1BKV1gyQXRMcVFjNWJHenJnV1lwQ3BNd1U1K2d4azBYZk5TWDVTbWwyTmxlQWZjQ3AwZGwyZytFVnA4dGhIbHZXbVA4dFBqSjJIY2xhME9CcW01dTlIcUgwcDhNem5vODRsNzBlZW01QThxUzRVYTRjWmxiMFk1TFBLd1RCb3Z5VmUrUWo3MFdmTlF1SXVBMjhFSzJQZ0JJbjVURzlFUTk4WTFscXY5OHpMVFUwNEsvQ3NHdVVmVk1tajZibmhEVTVuby9Od2crbmRKSngwc0ZMS1NEL05QU1FvaStodW1MRnVqYUIreEVJWTlDa2ZXMDAvZWROSHQ3WklvNUd3c2dOMjVKMUhPTVYvaDBzbzZ6UVM5VjFVSFVPdzkvZmlLWE5Wd3VoUmhxRlZHeUx0RDh6NFdDVHhjbHJ3U1lNMU96b2p6cTA3SGs1eVcrc3IyRUgyRDYyWW4zeHloWXVNTHIyTjlEOTJQdUkyb29jMzhkSVZtTnBybkNTb1c2VitpZTNZbTY4bTB0UUdoblNnbW03T1ZZN09Fc1RWSGx0WmFJWm83cHdRV2t0cWJvUGxuYUR3Z3Z1R0ZCb0pWMmVZb1hQOHRiQWswT1FKNFFLRzFVZE5NcHI2ZHhRbTErQmdGTnZQdGIxSm9keUFkdjRITU9TbGRYRW81dS9OTmllNWlZYjFWQlFibEE1QTFWN2xoZUQ3bXBuZVdxOTB2cFRydHBDYUU2MFE1NFEzcFZPTFRVU0FrR2hOYzVDVlpFREZwWjNVSG5NNTB1U0QyWDErdklJQ3YyU2N5ZUx4c1RTNTZkVGJBcmxHdk5heWhCL2tpNXc1WGtaWXBaTWdDWDY1NmVpL2Rhb01hV0wyTmVaUDNCWk1vMUlYVWxPNVAzb1RSOEMraDNSTmN1WnR4SVVKVW9lT3J3aXdtZlZKWGtFeEFBaWRFNU8rNUF1MHJyQ250R2pFY0hZYmovT01ETDFRYnUrV2FYVWZKbUsrTzhxRWZMb0NQZ1pFaXoxTDNDQk1sZWZ6Q2VPYmVTbGkzN3E2ZWsrQXZYcWZseElOWWVmOHV3M25UUjZDRXI2SCtsTGU1N2JsZXNxK2p6M0FkbGVvNlBCcVVQNU5LRVp0RjJKTkY4cUZxcHlXWVhacWtuaHlIVVJTOW5PMEE0c0FGTjVhWThOYXRMMWZDS01OMEdjZ2JxRnpuNW5uWnlZT1psdmZ5RFVGUmplandEaytVQUhPTEdTZDRXWk03d3FHN2RwTmxVbE1kQ2RMN2xYWi9MSGVuWitMN29WbUhWRGJ2eTEyZW02VkhsWTFvZHNDRlRDeExMTlhGR01HS3oyYWxlV1A2UlUyZkVnYnJRM0RKSEZHNjZQQnRuQkhmQ2o3M3ZJOHQ4OFJNV1E0YTJhU1JoS00rZng5WGRsRHpXQXRNbmY5SGNpVkpleGdiTFNUK24zR0dFVnQ3V0FNdGRrN3hUOGNFUGRxRDl0SjdGYkgyNDZEeEl2V2VCVjRVeU94T2FuSUwybmNPano1cVNTcnQ2NGJUdE1sVEtHMjJHU3duT2VKNVpNMlJDeXA3dmY2QUhzU3VHc0NrL3pINUhGUWlnNW9CS1dKajY2N0dPdW4yVy9RRGpyeUoyRmZnaVJNOEFpTFJ0TlE3WkJZbHM0UXROUjFyTXFBZENGc2M0TG5MTk9xRlcxZGVwRU5GZ2xDZW5nTVI2MlFpUStMQ3ZaQXcwUUNQcERwcS80UGVQc0llMUhkc25sbzBKcTlITEcwbFRMT0M5SE1pOUhiNGRmdkRlSVZiUmpUVUFKa3dTeFNtUEJqKzRYMW9GczRqRUpKdnQ1RHptbG1JajVWSW9velFuK0RpZGpkaURiR2dZRjZIUitPSkdKWTJ6Q1JmQ3YxTlBjU3EvQXRpSUZkd0hQRWp1ZDV6aGYvVUJCU3VTZmp4OEZxYTdQT2FkWlpjR3RXMW9SRUtYUzFseXVZSGVWRWt5MkQydjdkcmNTK1ZDbHZjdnNNNnZVRUxJUjNaKzhRNTVCdFA1UCtuWlNnL1EyMENWRVJrZFkzQStHbktZNWtBWEFaZm1ML0ZxSzNKUGNBdGZ5QkswVGE0MDlXRlRlZGFBdHI1OTZ5cC9oK3o3NDVCVHp2dlRhWUl2eVlTd1pMbHVwa2pCMU0wUEdKRUp0RkdrNklYOFNpY2tMZmlYQ2I0QkRvakhlVktzakE5dTB5bzk3d3hzek5zWkNaNFd3eTBLeFAvU3ZycFNwSTc3NTV4OVMvREpOY05NLzJsY1Z3QUhOQUNZR0lHM1MrWlpWSm84Ym9QRVZ3eUVsSVV0QXhuODdGV29nUDhObGNzTGFLbThsaERLb2RlMndjQ083dW5LS0o1TVBRZWpKNUplaUdkTmswM3RrL21DeS9USXRpMi9jb1QrN0piY2hwL05udU5ucG9NOEdzZkxydlBBbk1JU2g3aVRnamVybm00dE9EdkgvRDBrdkdXWWRWUWFuRG1vMkFhaXF2bHg0ZlphU1ZXVkwxODZxRUdqdXIvekdENkpLQlUrWVRXelA3Vmh3eUJlbVpZTTM3Qy9IVnY3WktML29MNjRLd2JzY2hqWjlvblJENHBXK0RjN3BHaTRNSWc5VVN2azB1Z282bEltOTY1Ukdnako1bCs1SGV5OWpMSlJSdXBKS1ZtdUxMVWZub1lTR3crbFV2RU1ReCtkVDF3emc4Q2VzVEw4NjF4YmVNcS9NeE1qUGJIS1hOdXdEb2V3OWEreVg0dUJSdlc3bEhGcmkxaFFKUW5Ra0lXeElBZHRjbmtyRGV3WmliTldLbW9mclFiTmV6d09PRkpmQjh4ZTA5amRUNitlQnNpV1Y0MytCZTVYL01raDdDR0lJUXQva3Z6K0VwSGhWS2IzcDQ4c2pic1ZBcFZBbWtiLzZTN0V0NVRmZTdoN25wZkxaR24rM1M5T0JhWnhYWjhvMXY5SW1TK1NWQy9jWnh0R0RPMVN4OHhXazVJOUpiS24yZEZqY1JkNkhGc21wRnZpMnd1bit0c0NWSStGMUg3OEdYQW9ScDlVU3dIL1hXU0w1S1dXNnJxWENGMmVHZEFPMXM0d05FYTR3RHh3T3IwRDNGWlQzZytoU2p1eWZjZU9WYUgzZUV3S1czendvZE82TjU0Sk1GaXp2ekhxN2FMM1RZY1BoQ2dsZG0vQThCU2RyNjFRd0Vtc0swZnBINGtDb29VYmZsZUh2ZGZMTFkzbmVxYWFsWVBoajdOMmRad1FyZTVBT1g5dHMrMk1JN0I1YVZ2SXBiTFRKOEEyVTVMWjFqcHFWbkhQeFRVbkJ5QVF6SzRzYWthOWxZQmRlNlFGTnFmM01qcWR0SHlWQjBKbUwvUWVjeFA5SkZKYXZocHNhbHNSc1NJVWVFanlVNUQ3aW5lUXFGY2FKclUrdmZnamJ5L0x5R0tzdFFRNUdpTWlSZXZUUDNHd2xmUi9xU3NaWVJzMkFzOEdrVkYyUk1kQzRNbzRLeGxDczEvYklTTWRWQUEzTm1hUFdUOU40eTFuMkJGK0dMcHYya0Q1bVc5SUpFQkp0dFJXRlR2Tktabmg0VWlVNEZkenl1K3p5MUFGY29HYnE0QTNzQk5qODNnTGhEV2hZTVNxRHZTdXBFeUdJR3VvU210WVA4b05GKzZtOEJHdDByaWttckUwTGdBc2tTMFFYQlJWbDhpUnRPVDRnZ1lmaFR0SjBVMmRSME44UG1INm51NUJ1STVPNCtjRnBRVFBOZlhKWGZJSU1lR0paT3JNa3N1R0N2bVBEWDhhckUvYi9Dc2NRTUhLTnNBc2Fxdjk1RGNBbWhRZERJYVM4TVd6cG5RSG56bG84MFphTmhRb1ZxY3ZmbmFkVEFxNW9pK0RGQmJadmxZbm9QMENhcVYwRDNvdUg1V1hsSHpKMVpSRUg3TUpJQjA4LzEvc1FPOXRMRUhDUnN0Z3pMd2JQcXRYN05adlNRME9sMUxFdkdsVFZhUHZUL0VMT3lNdVp3SXdqd01Cd2o5Qi9JZmNkaWNZN0NxQ3Q0YjNrNXpubDVGTUsvUFF5MktIN2xudGRWVWQxNmRZcDBDNkgzMkx2d0NFRXhzcFgxWmh6dnpPSExzRDZ4cXg3ZEx3S2d2ODd3b1BEeHVKL3kyUlJCSTJ2TXdsNklTcnQ3VFBwTVFJeGMwbjBHQ21RUTJacjBobXRFdEljczB5S3FmNCtXM3llU1hFOStPcXYvM0FmTllHS0VVOHVCVVpLM0toa1hCSk9kNVRFbXY3OXBkS3JhTFV1TURtWTNIS2R4eHhEb01YRHFzY1JkLzRFd0NSY3BrREZuRTEwdGpmbS9pZE84Sm9HSmVkU2JWRC9LNVViM1Q1c2hubXhFdjgxZStTaDhGMHhoK1dDS2RrUithRUxxa1dnTGMvR081ZEpkcU10YzRGT21lZnE5RGR4MTVSN3VrcC9FOGxweDdzczgzR0VBa05MR0NTOC9hSEVnbkt4T2ZGZUQzKzliV0NqbDV2Rm5uWmlGSDQrQ1JpY2tJTDZVTEM5UFpnVzlVWm5RLzNRR2Q5czF6UndTQVBPTlpQQytCU0YxNjY0RU5QM3VRTlBpakF6UER4cm5iMFd6bm9tR1hITVdiL21DVUFybTY2Um8xUVV4T21iR1RHMXBWZjhGQ2p0Tm1WY1pvZS9hOXhIMm9rQkozOGhJdTNhcVJhakRSNzl1dnBwRTl6OG5MTURKbWlGUVBnRUhVT0taZzljcWltUk9zQjVaeENFNkxrcTdmaWFKaW9naVhWM1ZybWVuNkFuMVlnUEc3QVp0bUtDai9zT0FYNVViVWZqbTY0ajArS0pWM0I3QkV3dDUyYVBSQmJUc2g4ODJQOTFLemNyWWlJOU5ZejJFSlpQbXJDYzFScUxGVnRoNDhkTVZ6eENHb0pYOHkwd21ycDJDTGlmR1JQUnBCYmtsdGx0WHFOUnlOVTl2TEJLZFpkQXkvU2hvQkViRHJMRkN4eFpPczc5SGgwZWhYYW9HMUNIWFBlYVVTK1V1RG9WVGtLTEozcU9KdnJFWEFxQlE1cEx3TEliQ2w3MnVnYWVkYWNmM2ZibjJJWXFFclRwTnlzOUR1UU9jUXlFZVQzeExRMURrYmRkRnUrWUQ3enREejBVb2UvVERreFllQmRibWdrdEpKVXphblNHbHhZT3JpVWFhb0g5aDRzcXhjZHB0cER1c3VnRVVJMEN5UjFacmk5ZUhnYmxONHdkZW5XRWllMThCQTd4Tko0aGwwalhlWEJLQ3I2YkFVbWlFNk5BT2FlZG5ndng3MElmdjB3Wlh2UmVRWHZsdEJUNW8zZ3dWMVYxWEp4ZlZnd21KNXJ0WDUwVkc3RWEyMkFaWGpZdjMwR1FKanhyNXVueVdIWkdKVlU5TVNRbm5FNVB6SkFXS1hSU0EwaHdQZFgrWmxiNU0vWmpiV2xkemdvZ3lvRnFya09zQ1piZDgvNTYzNjJDdGJFNTJLem42MUJxMFpacTJoZXNSdWgwK1NRNE5mT2ZwTTYxOEpWTW5hNHlzaTdPa3JuVkYxWitnc0RReVZ1ZVEyRGVXRVdnYXl1ZzYzd21NVkxiWmxsU0JrSTJIZjJocUJLRVRKc3RNSDNnVGJyV1N5MHM2V3kxdW9PTVlDQ3dSUXJCQXhoWGRROEVuSVhSbHlCeHVZbTkxZzVSRkRLS1FOMzVLWmxZSXNKVmVOcFNHVmtUNWNWV2IzL2pjaEs1bmUvUHhwSVhPNlNzRjRjaFBleEZZakdjQmp0QU5VbHdONll1bDRDc2VnMnhoNkFGWXhpekN3RHRSa2xGTWlRekhoTEtUUkp1T212UFY3Y3MxMWhZakxXUDR3WHdCQjhXYnQ4eStHSVVueHRPeUJXT3daM1BoSXUzNzdPbU8vSjJKSXBZM0JnaHFYQm1zdkdscHFoZ2lTL1ByZHpBYTM5QnJDZThiamxyb0FqT2JETVJGQ0piaUdXRUZ5QmhDK3BuUUo5V0RraU5YMGpiL1U4ZTgzREdRYnFNLzNHZ1l5NjJOWlM1VnQzeDE4OUNJOUFUYzFXbUU3cHphUmlqL3Z0Mm13cENmN0RNTko2OEl4NFFVRUd4dXFvelZDc2FBZyt5TjJPTk1UdWNuMkFKR2lVdnBjRVo0RnlPZ01XNk4yTkgvQlpueFA5WHE3VnFWaU5WWkFKcjBoclFRTTU0SXRTY3RrWFJ3c2JQRkVzb25RcmhmVVIwdGwwRWlMU0N6YVRVWldZUnFOSktRbmpwWlg5UWRZV28wS3dNdmhpbEprRllIZmxDenFWNmErV25jdFN6YkZubG5IbzE2SklhOHc2cjRFcDNITm1zTHF1QlU0NVgrRUZCS0hJQXUwZjBpY29kTW5GeFUvOTJHZFNERDhyU2FoR216NnV1TkJCdWFUems0cFFSM1hEcjhvd2ljNG52Z1VtM1FxaFc1MjZHTjgvYTFDL2g3M1BQZERMSytlKzU0TngxU1g3RGVTZzhjcUlHVmJaWE1EMWhOdXBBU3RwSWJGWDkwL0V6bDUvSHlBYnBRV1lMQTRqTkNyRXc0YzBIQlp1MUVGQmNrZGwwZ1VtUHU1LzU0L1FBa2J5N0VkUFNzK2IvTXIrWUE0U1drT3lsTzBONHlLeUtPbGFnZVB2SThhOTJQSkNQb2RLdGRSRklpY0c0R1Q2N2c4UGh1VEpmK3JzME44QzNlWXJwK3daaVJzbURza0RWVkFPdU5kakFIWDB2UU0weTBIVmlWSjQxZU9neVRTTzhzaEdWVENuY3FtQkZScm5pZWxTemNtSnpUQkxQZHNJOWpNU3hyangwS2dWd2hrZE05V2U3NmxLQk53TW1CeDlXU2x5L1VtYXM3NjJuTG8rcUtXSWFHZUFCUEFXTHNkODc4dEN5OTVuOGgzNVdRWEpCbkZaQ3dQbkRUZzJmNjRkaFkwSGVHOWtXbjkxU3NYNEswVkRBbEJTR2JleWd2VXRvVlVVZDFSQ2JwVnZXTkhTaDYzTmp3TzJQdGdveUdqMTFvVmJPR01HMVVITEhPSFMwZDE5RmtuYlU2MEg4UWRtNFhONFJycVV3aXM1Q3U5NXZQM2RIbEthRWVHK2xBQkpJTWxnMGdIY0l6Z3FUQmJjeFRKd3hGdDJ1d2dmdWx0Z09UQ3o5bHBuRllYMG1hdDJoUVlUbXg2T0NyK25KZ3R2ZGpzMURsOGJBUEdtUjE0OG44Rkg5SEhCN2d1bjcxbll5VmlYanZBeXhKMGJaY29HOEpubi9YVnlyVnh6V1dQazVwU0hUWERYamNoLythY050SEpxSFFlKzBlajl4dXBJY3pRNVovZUpkRVM3eGlKS0gxL0hocHJCMFNGY21aeThoT3pxR0R0NjczSnVzNHNDOXRQQ1N2Ri9ja0p0MnZFTml1bFcwUCtwdEF1MVN2NkRZdWk4c21VZFlvdjNjZzBTZmRDSXNRZUpZdk92OUNxcGNueElSYVdiWjhEZzVBcWxzUzY5MFQ0cW5nMDhkNlhrOWliMC9OR0hrR1Z3VU5CSnU2K0dmbmMwdnFkTXdQRVhVeHp0em5NUjNjb3VQYUFyREVIeUpRVEU1YjZJbTRXaExqSmFWMUpBUWYrNFhna09YK2hYT0doRTExY1FtdE5TNHJNZk84a2NDU3IxUDNCL1VCcUlhUWp0elRsWlVNazRXZTloZGRGMXlhNGVocUZ1RzFVdXl1a0l3U0RwWk0vS3dyRE5KcmNra0xYYkl2Nm4yMmZ3NXdUSWhtd2VKTVdXak9vWUFTZ2xOSitPK3hJdU4wVE9mQXc2Y2dSNW5zSytVd3dSbUtTOGxNZmdOSmMwZG53bk03K3ZzUVpaeFYxQ3VYMnl5YW1ERGlySnArSFRjdElIOHBaZ3BrZkpTV0FuSHZ3U3ZLU0hrYkxLaGtOOFVVZGN2dWgyblgwWE16UVFac1NkSFFVYy93N0YvZ2xGRUdXSHdGM0ZYeHc3MFc5Z29pVWdoM050L2lGSGYyOWJRNSt1Sm82S3FxQ1AwWTdRTjg1NDA3cGs3blg5bC9YUEFQaXVOc3J4TmVtcGt3THFxUEp3MXpYYVpYcDF5ejVMbDlZeE50Qjg4MCt0RjNaekMvRmp3WjRSWTdEOCtoQlcyQWxWSGpBeWFGVkpueFBWOU42c3hXa3BXYUp6a3JXb1Bjd25hdTNrc3pTcHk0MDR6cHFLeldYTzBOdEFSc2FzcDA0T2Z0UTRtaDA3S2cvWS8zVmJiNUwyN05WaXI2Z0lUdkU5dk9CYmZFSzNBcFBVWFRsbjRlTUFrMmNsR2xJY1JLdUE1YjBJZkdPUC9SM0xTWVhvZ1ExZlQ4bnphRUdSNDgvOGlka1Q5NG1wK1oxT2VyRkdqQ1dWMUxQYXZHMHlQaXhEK0F5cDlSUWlmMTNxcTZobGFNS3pZMlRzOWpiNkhDQlVhWmJMVzdXcHVqNWhHemU1c2k3OGc0Uk12SVlPdVRaczZ0VEE1TDI3V3p6Ym5wL25ucHlOVzBic2J5N2l6UE5WaTFqUnZWZEQxVXZkbjhUbXdXU1lud3B6ZkloLzdhUEVrcjBrcURSSnJTWXNKM2I2M1B3a2xWekowT2RlWEdCTEkvcHQyajI2Y3VVZG5DZTZpR0hlLzZad3Z0MU8vRWxmUDJ1VWlDMS9XbnhtdTRoME16RStXNDFWMW1rMDFaQmc2R3UzNWpwRndWS3JJZ1Z3L1lJR0hsNUJscHRlNWEvYnVmN3VaZjRpcmNTNVMvdm1zTE9pRkJuM1V6eGMrVElrUVNPUDlOY0U4RzNuTHVLZHRWUlFZYUJLWnJoQTNCT1dPZnc5eS94RjRXMUJxRnhZQjl6Z1ZVeW51d3hkRHMrT2NkQlI0VjEwdTNEdUc4L2g4SzFBTTM5V1NnRTdoSWp4NktrSTAwbE9NanZMN1RFT2ZzSUhESWlJZGtTaUVsMWdkRVNweWs4bEVLbStxSmVCYWEwNHU1VU13RG5uYWVYVktQRzFXbVlPanBKeWRad1Q2QVIvUFRUT2M3eE5kTXJiSlNjbHdiWXN6RklxK3Z1bmRXVWNoa1N6VzdqcCtNbERMRDNrMjlsSFh6N3RHWVFvMEtLc1ZOVGVzdllyd3NqT09FeklVVEpJdmlPMjhja29OaDNJdjcxa3Y1dGUxRUViNjFiS3lsMzYrUjZVZlVHT3ZLY1BnOS9QeGdlaWljbC9zdWZCeHlQVkVTbUN6RnhDUmtlRFoxL0Nhem55WEhmOXE0TWVudURrcW1BNU1RaUZteTVyalFKazJrcExleEhhTEl0c0ZReE16NXZURU0xQVR2aUFrbkdFSmltV0JHL0U2cUlTVEE4cUNwK05zQUw3SUZpSWtVNXJRNEVlVC8yWFdjQzFCdnZJUHFydFZWN3lNaDN1cXhvVi9ZamEwSk1SQnVRR2E5S1o4cHhaRG1qa1pubmlDZkc5QjNybE9ISXMxcEFGaWxyRWcweDZTM1dpREZZODFDcHZJMTI3NDBVWW9wYXZtWmg3NDN3MUFGenRWN2pzU0prRExEVTdGTk8zeHhaWjBSTjZ3ODhxMmlsdlJjOW11ODdtOU8vOUlhS0VVN1d2UXFBUXArTkU0T0hPZGxmU2grUVZKQm4rY1crUW1HOWlodkFnYlo5b2xCcXhqSWUycWwvTFhySVJOdTRua25tdW1FTExaTUd0aG9QSmFSNkhLdmUrL0lQSlNDc2V6eEQwcHNvbzJjT1BsNmxVNUhsby9oeWxyazFnU1QwR0JSbitqb0FLSTFhaVErTzFaRHphN21aK1R6ZnAvZUtBQWcrRW16UnZCM083TGJPZ0hEbDQ3cHZoTVJJblQ4NEJ6VTJhVFpFV2pMWDQ3UlVmUldPdEU4Y1pwN05hd1lRUVRKT05WVEt6Y3ZJWVU2RTRubkVML09IMmlBejA3RkZWRmkxYnlCQkpveG1GcERkOHZxZDJueVk0NXhMWEN5UmZQZU00akl5c3N2cUovdDV0ZlJyV0VKZEphQUtHd0F0N1BYdUxqdkFWTHY2VUpLTnAzOHhrd24wdys0bW1BQW51Ly9NMm5NMFRweU51TnE5c20xNDRCa1lOKzlvTkpHMXRjOGVTNFg4Q2c3V2IxK0tzaWlidXNSemM1azFXUlU5Q2R2YTFldEhiYVYyOS9IMDEzQUw0MngyOUVvR1U2NWZoeWNLR3FOUGk1VGNTTzJNWEF1QmVwdWZRZTRIVHZqWVhpYXdPK093cDFWSXpIcHpuTk9HRytyQ3RvVFNjajNiTExib0UrTEdQZWs4U1ZuVVdWSmdyaXhiVHpTYm0rQXlIT1BHMHdiV29QU1A4N0d2ZWlIK3ZJK2NOdnU2clZFa2srSjJqSHd2VTJUSTRUb204SzFRRUFpUkEyZFFOZkZ5QlZpMGNhY0FEUUIxQmVveGVVUjRNd1hqYnQyRjBKQ1g4R2ptYnRQeDBFOXhHK21ZNlVHZGRZSzFzTnIzUHJuOTUwUTNFU2w0aldqcU5YbG54VWVTS0szQm9kdEZacTE5TDBDQXlkVVVXMDl5SzdNSW1RK3RSU0lWM3lkNUxJY0pZTWRvYjhvTTFQY0Q4TStwSXgvZmM3QXVQcG5mbnZkMWtRai81dUthYmJjTFNVcUdubXNNT3pqeW5Ga0JaekhoSEVSNnNKV0FjTGRWRWdSSGMwanErUHNFaENQdDJ2VXdkeVA0OVZnTENJc2p2RzF5TkF1cVdTeHk2R0kvOGVXOGxCVXB5UGNIUlFJcXlZcjZzcmdVQ0RqeS9LdHpZRlA4MEFNRkZXb1dTVzBITUJuZ0ZSeFByNmFkSUVEUWxHc0wvK2F3ODQ1cnQ3WFovTGlxWFZYUWt2VHQ3dVY1VEJPMUJ3clpXWEJobEU4ZEpnaXh1NW1VMERYWSt6clhyMlladzVZVm9NTGlFM05XblNHMTJlM214OU8vUUg2NUdIUmY3VHp6WW52dHgxeU0xU1cvdVQ4bmo4RUZKanN1NnloSlR6SEkzb21CclFqcjhQemxpR1dDQXVhVzJvTWpHZnp2bDhJbDdaTEFqTkwzZ3hiWUVoSy9uc2VZTWcyZ2QwMmR3ejA2R0YrN1JCSlJWM1VCUjJvN2tsWDJqaTA4eXNrNkNueUZqNEt6MWgrSWxJS3lDN0JmV25FUmQyUDAyY0YyZE5KNmJFTEhyeHRVb3Q3TVRkNFJZSVhnNGNXUmlUMzk1Ym5nYnpZZnY4WnpkZWR3MExLYXRtL2oyQkkrL3k3TzRaS1NDSkt0dFplZndmbTM1MERWd0w1QUJtcnFWdjh2enp1T3VmSWpSNXlURm9nV1Y4OHRVdytsYzBsdlpSRnBGTnBuekd3UFMwZ052eG8xVE9Kd1ZRei9PVzYyV2Y4ajhUbFRjdzRqR1Y3c0R2d2V5MjdNWDFobzRmdGkzME00dENQT0IrV1NsT3FoVHhDd1dtT2xVazZvQVpVQVBsc2tEeHh4Z3YyZUhFR3g0b05sTWZSd2VRdlVRRDJtejY3aVFIeE9oVUd4QjZ4SFpFb2RqSERldHM2UnhoSThJaEYxS3dSajFnTzNBZms5S0FmcHN1ajE4M1YwenRrSEQxekgvU1dLYzcvM2daZStyTEZOMmdoaGxoL2IvUEtiK21abGswM0tjUHB6Y1FxWWlONTlYSFlaUE14Q2RTWDVoV0loRHZIbUd4UlhBcDhNQ0t5bDZxd1Q4bEQ1eWdSbzkveEM0bkh4eFJtK3pEc3lEdG1pK0djaGR3NWNSQWY2NjlUMGJmVHYxMU85ZkVkUWhBRzB0RGJvT1VXUjRxdVhEdGZDVGxhNXZ6Z0RrRnAybFdEMWlJNnRzUW5FbnNFcExhaXFtcEh0eWVqTnB0ajRqUWJHNXBaZ2tnUkNFcGozaEZiS0h4UGVubWl2MzFVdmlEbklGcjdOTjhoeWpkQyt3TzZXbGkxcGpkdXY2TFc4M3paSkZBdXVtY0s3TlVtTVNRUDNlWlZ5Q1V0SHJFdDlkNUlCSmY0eWpGaUE3ZTZtdnB5UnBSbCtMYW5BY0hLTWp0RXl2Q1BBVEh2UmtxcllmRnNra3RVYmVtUzd2aE5TOXBxZy9yMEpxMUNSZ1hialRmV3ltdXJNSHZldEhNbjFYWm9EclZQNGRWYllVNXdGSExXMmhGM2JzQi9GTFg1V2NnTXZzZnpDRmZVaVhoN2d0YVJ0TlpaV01iNTkyeTVCMXpsRmY4STlWVVNCSWpFcDZCejBFTmpxSWMyN0lKdmtOZklLR25yaGR1VTFOcVdHd1JLUDNTR3djMWRYTlRRekZpOHRzSnRLTnNvR2pNVXFzM3Ewb29hZ2RtdUlIVFdBNjVPbWxMQWRFK0E3TjhLN3FsVlB0eE1tWmIzVE4xc0hQSU1DS1hndy9iTnhOZzFCTGxzditHT3BFKzhzUlFaaWE4czdqZmR0SkpubU1aNlFweGlqSTdsM2I0QUhFaGJiRTBRWDBpVXhIYWZuNDUwVUlxT0xFYTd4eTd1M3o2VG5XaEUrYUhWZXRRVS9nMG1OKzMzZTlqdi9DUnpBUEczbVVGOWJ0a0Q2aHB1KzQxdVd4YkYvcGNSajR0NXgxdjVvbkUyeVJHc1JGWFhZZko5MVo5dlg0Ly9SWk9lcEtydWN0NlY4MVJUa1B4eS8zNGFLcXBsVVAzT1Y5UnFzYXpUYW9hZGNtZ0RvaDFEZUt5dEdPanlwSGhNS0Y2SGt5NDNUdVR1cGdMUXR0VnFtRU1Pd2VhR3ZxcEdCalBWS00rQXJndDNWN1RWU3VhY1JRbnh0ZHdmQm9tMjBkeFVwcnJHZml5Uk5ZZEIrTFVRSXQxNmgxQ0l2NzdUaFBudkpwQzhDQUlaV3ZveEZ0aGJIWkRFVEV2YUlEcEQ2b0JpaUtjT29ZU0RwbmJhemY3c1NZcGQ2MlVJaHYzazh1VVAycW8xOFhLdXBKdCtDNXdQMXM0MU4yVFRmOXVyWDFZVGFOSjFJNWRNellKNEJlUnQwY2xkQnV0MTM1dkVxWlFHZ1ZxdU1OQWdUU1RtUlJlM1puZ1k4ZWJXN25PcFg2emJtaUtXK1dIQWhLVTZxYXVnZFQ3a295VEJvWjRLZlpHSnZONnhabUtmbE9XakVOZ2ZWRU9iU1JMeldWUUpjQTF2QlZnaEM0c254K2l2NGNzdzRPSmlKYWhOME9YU1VrUUUwYzd5Z0dXU2dqWVNDTW5EUHJiMTk2R0dTd0M5c0Z5dXRMMDIwc1F4c0trSnM4Z2JoMlNXcVZqWnY0V0FtdEZ1b0JNQ2Q2eGNaMFZaT1RDRlNXVnZWRmVkR3I4cUtCR3JRT1lIWXhlVDc5bUE3YlRNdTZ2SWZNYVloYkJCWWF6RkhSWERsODBiVjVvc2d2ejhTVitpMHpNODJ2RUhJcE9BaUY1Q3VNZ2ZyWnhUTm9iLzRCc3lCZVZKSG1LREVqcFFaNkZBNFdiRFhVUUFzTzg3bjAvNGg5ajVPSzRlUXNBMlFac09BZjhnd3d5blRPUWN1RGxieVREb21WdEVnL3VuQTQ4WCt6ZW8wVmpzQnl1ZjBTWnRDUksxcDVRYjAyRUROek5QZFFndVp3elk3Nm5yVE9TdnEvbUY1V2dIcG9jZmpOMU9DdmdRYXVJeDJ0THI2Z1NQOG02N054cjFJR2ZGNTUvK0tDM0lCL2drSmQxbTVqUFh5SWIxWjB1aGtNUjhkeXFReWg5VXN1SjF6OFhTeE1EbWVkZytXdFhCR0pWMitwZGdlbDkwTWdIWXlLTnh5aHFBbkQvUjdialZEVHZ4K3prQ29BdENqYlR5ZEpGallnellmU1BFUVNhVzVkRnpZbkYvU0NSRXk0VlhOVEJZVWZGNTJyZW1wMjZqYVZkZ2lwWk5KVEdKOE91WUlNOXZlc2VraUoxQnMxV1lBMUgxSDZva1puMkN0UjJ1bWdoMzFiakF1N0hvTmY4MDNTWW1ILzZPRVFMMG9tb0tRb0xPeHJIZ0VoMjRNY0h4Y0p4eFI3eUJoZXRnNHBSTEJ1OGQrYVdNQkUxQ1RoeFkvTmwydUx5SFdxQ3QwWEE2dzczWDVUeUV2OWdKOE4yZysyOVNITmZlaEI2T1lPcWx1YW5wd2thYWFOR0xmbDZQb0ZKWGhWOUxLVG02Q2syZ1RrZ0gzZ0M1Y0duRGVtNFhFR2t6STl0YzlQenlPalJTRG1mZ0d4N1B1ZldCeEJ0dlc4MkJ1ZmwrMHNwTDRnelRKU3ZrcGNUOU12Q3FjbGdleW9CVm43L0xZYkNGRExKWDZ3U01LdXZObWNPRE9MVkxzUXE2akZPbkQ1a1Q3Rlo5TlpOOGJySXZibHMzU1A1QXN6Zko3cHdnSjZpL2dBSm1zcmY3ZGxLWmNFKzBOby9pMDVwQ2R2Qk9QWFVzNzJubTNyaFI5Z2xNRlFoMitqU2pnQm9tWGNLWWdlMnpzYzc4bS9aM2dWRWFWdUM5YnpvbTRzLzZQdUFwaG5sYy9wanZkeDh5aTJERUh5UWVORlVVRXVjTlFpNmV5dkVnVlFyeXI0V1FDeWNzQnhGYlg0V000N2pGVHJBRGpnL0MxWHY2VzBGTjhHNE5ORVFYNEVJSEd5aWR1UDBDSm1wVFliMzlUbGx2SnptSTFFelVScFVheUNNM1VhNEdqeDBqbnd4QzBaSDkyalZHd203YmNHRm5LbjNiQ1BkSUY0TzdKeHp5dWwxV2ZXMHZlNXQxb1JPRE1DS2dxTlY3empyUy9QZzRHMTNEN1M1T2xhQkJoNXhrRElEcDRSVG9yRmxiUnAvSXBmS3hGRE95WXp0czgvdmN2RCtnc2M5RUFCSlJGK0tRWTJOd1FrZS9KMEdRREtMVDVaOVc4UHprY3d0cnN3dmRESlR1c01DTVZWbzNjcDltemNydFJtZmFiZjhVNEplTituNDdEelA1a1hYL2sxYXNkKzJJR0gxWURPa0FQR3Qzb3ZaRjBKYnJWK1RPeUE3VGVHeE90ekp0K1FXSXNFdS93Qk16YzFKTzAvNitiZXVUTnRBVU5PVlNpWSsvb2ZlK2RIZlIrS2RxTTROZmJodFF3clNteWtYUXg4KytrSCs3amoyMWZXSC9XUW83bFlSbTNQYzR2T1RSU216TExkVEJxTU1NY21UbmdiZFhTZSszelU2L3hNa2ZQUnNkTHk0WUFzalZ1WDhOdWhPWjJKS29pRzR4VjZqbkdLT3BGbXhnUjI2ZEhleTdyeUR2Skk1Zy9Td3NvVElVRkdOTDY4TkcxVkVSYXF5OEU4d0pBc0t0dkp1ekM0dW1RNkdYblVBaGEzdXNjeEV2cndpSmdOejRIeFpJQnRFNTJBRVpCR0J0YitPY1FoMkRLVDZMWTk3dVJuVEVPOEpiczJzaGMxQ3djQXZ0bFZQY2lNSWF6SSsxanExbHQ2Y2lmdUVldFVpbmJhL05YZ3daR1ZzLzFmb0g3ckZvS0R3eU1RRGdxT0ZEMk9pUHZGR0QrYXh0Nzgvc09sNE5TWTdqZnlQTkU1VDd3ZFhWSEZHZFBDa0hUbTNKNlVjcFZST293M3lLbjFDZDRUWUFGR3pFaU5pTW5OS2t0VG9VM3cvcXpud3FtaTVVaEkxS1FLQzBGZlQwN096RlVkbkF6cnhkcVdOZUs0dlZIVXptU09zUXV2NjFsaTArWjhlcEFXc3VaL1NaU1hVVWR5dnZaT3hqamowVkduWFZsQ3E4MFNlbkxPTTh5dU81OXNZd080d2laWW91aVRlZ0lZbTdiTis4Y3NISW4ycVJmZTFQODNVNjExTTUzK2VSbEEyeFVQOTJaaG0vMmEzV1JVV1ppRU5GSHNjVnluNEppNnVPWEpFcE9EaU9MekVoVFd2dy9rN2NwYkxIUFlXbDV1Wi9ibGUreExFVk82bDdBUlVDSDY1cDJnOVNha3NHM3RRTTAzWHAzdG9LSFFlUTk4NWh6ZVJWTG9Wck0vTThhOHNuazkzMmloeWY2UWhzV0RhOXhzRFpyajdObHNwSWp1U1VzbFZWcjFDN01kMFFTaitXTW5ML3lnOTV4Wmd5SFFhbGZEK2ltSlhybHVEUDY4V1ZkRnA0Q0ROTDdWZk9WRG1NNEMyL0hoTDQwV1gvRTBvNDZDQ200cHU3c2VKblJadGlBTU9Ma1hJTUQ1L2pxT2pSY2I2WFZCRHQ1U1dVK1lvUXdKYTR2czk4UTdUbWxQRC9WYVR4UVhQTlBKdSttMnNob2ZDTzVIYlZxZEVOUGkxRXlRQ1kxcktZSjlSZ3VGM1VWbjdlYXNDNFoyenlsdkVaR0pVSHVTenNMdU9GL3JYUExXUFd0QjR5cGFCNkx5VU5pZHV1Ujc5MTBhQWhxdDAzUitJWkJzMUhHUEtIUzlLeEhMQ0R2cDY4L0NjQzdXVXZzYmpwUXpwL2hBODhuMENhSTJJektlWnl1RHZOcm9hU2ErZmtISS9XN2N4elF4dFV3STU5YU11MnhQeW9mOWoxRnp4clJnZ0lBWTZRbTB5NWFXU1FGNDBVUG55Z2R3ajQvU3dyZGtqcVBoL3VEbk03dDZlRU9SbkRkbi9DVTBUQ0U4RFZKbTV0K1RzaUEwTmhuZVJjTmM1WDFoTW1HS25pdlh3bUlXQVdNZk1FczZVa28xTDBiV3loWUoxNHlycmpvbGRSVlh5TG5VVFBpeHdrUzFTVmxNV0hvd2tVTnFrUFU4Ymh6VzN0VDQvY3d3YVk5dEkwdHZORVhXMitTWkdHeGRZd0Y3TjN1ZElQcFhjczBWclp2R2lUaS83UlBVd2hGcmRRdm5rZ3JtQytUUkhoN2k5eVpXOTl3aDlSZ1FuOEF3NEY4UmJNNWtvd0J0VW5NaGYxYkpjQ2hTNjFrR1BDZUZOU2FGSG9SSVBFUlJ3c0NxTmlpQ1lGOW1DbW9sQzg2THVVN3VOc09tR1k1OFozaU5OajN5UzRydGlCMU92dVNrMC92VDViTmsyYnhWVytMMHBZWldaMUM2L1NhZ0RFNWJnSnFEVlJhYmNtMEVHaTVqRlV3TmNRNlREQ1pKVDc3L3BudFMwb0JEczkrd3EwbUJTeENYOVgrQzhNdDcvZXgzd1RxMlBHUjAzdXlqdmMvNmV6a0lYR0gwMUlhRDR2V2JRci9iQzhhd3VMQTdRVG5VcXBjaWFOWVRvdnhDOGZYdCtsWFdlVllkR2JiVlcvNEtmSFpHK2dJL3Z3aDJ4bmNwN2Rxby96aVBVekVNT3VoeXBZOUNwMElSNkpMalVETW9KdHdKZTBGa1ZHV3hiM010NFdPL1pDQXZSc21HdDk5a0tJdVB0cnUzTU9abmQzQVUzcVJTb3JoVlV0Y05nL0s1MVVxSWgyZjI4QTk1d05Tb05lRUZIZ20zNXZ1Vjg1UStUejEzR0JRbm9sUVU2dDFubHRxMHU1S085YWR4TnA1Lzg1Z1NMZ2FBLzdnS1BnckRCdjNvK2k1a1U5RmU0MGdLWGlycEozZ1NkMHBjTm5MTUp2ZmQzdXlqUmtRQjNWUGJ5SmtyWVpaVU81OG9EVGZuU1g2VDJBVE9pam9JTWNyMXRMdjh1NmVEcFhNbGhoM2FwQVE1QmF2RjZGRmw3bnBXRDZVQkRCemYyYXhxZnRRTGdHWS8ycWk3aDdFUmZjWm5CZkxZU3phL2JjZXVPcmt0b0tONTFhODYxa2VZQlRvczJUY1hHdVdWNEtoMEtYUW1HVG4ydWp3ajlwSXRYWjg2RUp0c1N0aWNGenh5MXRKY244cDUwQTZHYVNSYW9ZTklOdEJ4Z0kwdE00TFpNc2RiWi9xb3h3YXJIbVhQai8wb1loTU5ESEltQ2VHL1QycEQ2MUJVbENXYVdmYjc4aW93eVAxYVdaNlZXbWtlb1B0VEdtb1I0MW1WNGJnT01oU2JVRlkrZkdDbUFYVEVuSzRic0FEUXN6N2Y2TDZ5SUNmYjFDUUJra0pKd21LTnJ2bkdTblpJRUUwNTRhTEo2OXN4dElEL24xZlFkQWg3SUJKZmlvWWZCUjlER21sc0dCYktTaDNTQ2g2WUVvb3lmOTlYWUNDTW9oeDlwanRTWXMzSkI2S3hLSWlvUTgxWm4ybXFjQ1puc25YamJjR0ZPdWRXcC9KOUMzZ0l5TjVmbW5zMWNsemhUUlU1MHhGdVVnbzdUeVc4UDRFb2l2OXhlL1gwZFRGZE52WDJHL0JXbUo2NnE2WkV2YnJKR1ZyWkkxcnAyNHh3Q3R0Ri9MbHZ3VkJkdUtTV0ZDSzNJUUMrL2ZRU3pzd2FITURuRjRvcllmVFpBM1BUZTRtTG8wVWluN0lFV0JoODYwRE5kKzVtR2M2WXNGbllaaG5iT25TV2VYUEZDbEVvUzFBTVc1K0ZKTWdSbmt5d2padkhWVmlUWDhuaHdpanVZd0R5bjdQeW5kVUVDUWFpL0FjY3cvb2w5OC9zeHA4bGZQQ291MkdGS2JpVVFQZVRhUVA4bU1kTHdjYXVlaGJ1Tng3RlJPRkRQNVp4NmlGWmZ4bkIvUDZNMTFBYkMxNDdEeHhGL3JmbFQ5Ylk3eFp3VWE3MVVNNXgxSnZ3ZTFkT3BMU25pUTRZSjNrSW5VUXNwQ0hVQm84bGNXdThNbTRMZU1lMk44OFZNU1B2Qy9PYk1oaFpwUjdIMnBqM280UTZGUGVPbEdWelpJelFSYzNNaDBOM3Rkdy9rdXhRQjBGRG5OZUlIQTZ3czFmVVIxZU9LWmR5QXh3MENxTFNIb0YrejJjbFU1UlJ1OFYzMUdOdEhGQWNmdUZ0YUF3TFdYeWVlZHQ3UmE5ZnVST05hMFZ2Y1NRSUc3bi9QMDNxWitUMDUwelUyazBLQnY4SXBJRndTWHg0Q2tVbU53TmZ3QlBIbmJMckkrNzVWQTR3WDZYcFBiVTFjQWcrUGUvNTE2VHRwZnI1Y3hlOWlmZkFVaG90bjdWQTNPcVhpdGk2TXJXVE54ZWNPNlhVUWRBa29sWEpBSlNBTnhYMnNiUDgwZVZsa0lIZERESmxVdGg2KzhKdVhuTXJsM2ZnZnhOWUdnU1diMDkxYk1NUDRwMVN6WHBNaEVpVy9mZTdQS0JvMEpaczJNUHlBdzRkU1dFYWVzQ2lMd2MyWG9FNS9CdG5MMmpFUXJuTDhzNXBrdmk0K3V6QlJEcXZDNG1ZSmgyeDI5b2FQRzlobDREbThqVlBsaWtuOUNPMzI0TU90ME1aUTNlWjZpcC85SHJFWFNxL0MvZmNJT1U0Y2ROUFhHdWVxbVJzS2pkdjFzM2JkTzFZWFFqcmcxUjZDb3k1V2tlM2Fuc1o5bWlBRHU1Y214MWU4TWliTHorOTBBOW8xbSt1ZUpTNGpnQWd6blRBQkpqOTlaZGRJb2F2Z002UkYxblJxZC9CVVNMWFVVK0c5UGc3SUJ3ZzBVbmxXdDZOZHlJNmdqVHgrYWlNM3p1UHFvVll5cEs5SjcwYmdhL3Z3NmNCUURoekFnaVFNOVV1RU1wN3Mzd0xCRWlPeFAxVFgyUWNtNklYNXBudHAyZmF1MEtvcWVPY1VsSG8vWXRtMEZNcFlJSURGL29jOHptUjE5NVg4Mk1IWEtCMnoxWEEzUzVCZGVpQWdJNG5UODBkQk0yTnVwY3B5OUhOT2Z5LzdDUTlDanF1ZE1yUjZmcW4rbklld2EydTNWWnZqbUF2cUJkVlJOT3RabUk2bGpBMmljd2F1SXhBZWlFNDJDYjdSTWpXdE1RR0JUUDN4dE8yamdyT0RpU1E3aDZQMFpZTmJvSlhnbFo4Y2hWK3oveTkybUJOQkNycGxqUVYzVGhwZjJ2RDJLQk5UamgweGgrWnoxSFdYZnNEdU1GaEJ6RHBrS21IZ2hGemVPb1JBRk4vbDFJR0V2SExPYW5RUE8rd29yV2R5NFVYRGtUelpOdGtpOUtmblNoNjhqZWJHTHZlTzl1K3pQK0wxUDd1djk5OVlzUXFKbEZYTWFsY0pmdzROeE9YT0FRdk9jYjFjcHBEMVFhOHM1T3AxMHdUbjZsdmpWY1YveW9XT3B3c3BqVDZ0UmxtbTRsUDFjbzErcURXV09kRU5QekpnMFhmaXZrUUhybG9TQ1I0MmY4TzdSWTRRa01oNmJBaktvVFEraVVBRmtxb3Zvc0JkRDJrZmF5QzJ3TWZPSGNJWnM5WWNKSE9Ib2E4T1RwZlgrZUFpUE9EZFZ4QjZKRFRHUFNyaXZmT1JjdUt2M3dUNzdBZDNxeTl2bytabGpvcWVKNTE4NHZ5cFR6SVE2dXRZTCtvRm1wWnRpN3VZMVM2Q1VLMmVyOHN3ME9DYWF0TE5FVXBzREQyZy8xSmUrZlNOdHl0eWhsVndweWpGVTByVFNVZ0Y5a2ZuL0NQNnVFclNvQTR5SGxaVlpIeWJPQS9QYmw0Vkt0SGpVcW95aGxyQmMzbWhBNHVSandJT0RHLzlFZnVFTzd0OXRUb1VnT0hZODEzVEI2b0F2NDVQaUhlbWU5L0FUOVIxelAxN3g5VVpzZEpxNlBKQnQrYVpXNnpnc1IvNVpWNXRQL1dWK3ZJZzBOTTIxZ0dnb01URlFYZGFJQmJ6MmZJNkxsY0gvdjBGUzZGODBNM1Q2Y2dQQ2NON0RTcFhWMjM1Z1Q0Z0tTNHdwdFU3S0dWVzFRRnZDQ2pZZWcxYVBrSzFwa0c1SnpSb3V1WWR1aWtRZzFzUWxlSDVsVkdoMVQ2bytWWVZVVDRIcm05RTFNYUxYajlweHYxZEdHaEs4OTRMUk1aVm9vdzBTeEdDdVNNaGhvN1RST3puUmNGT2FBRFQ5RzNwTE1oc1JGeml6c20vQkxHTnkxbHRoeklEbmRSTFY2TmZTajRKYlZLc2RkZDM4L1ZDL0hQVkpaTklBcUM1SGh0U1V0Q2pWSnlISno4elBBTnVkWDNWU2FQcmp4ZjhuU0VVNHJISm9TVjZuTlBaSDFvZ2MwTVBGbmVreVFlVmhic2FicGw3c0VqR2FUdWZyUHM4UEVGVzFQc2N1OVJGR1NzaE1JR1pjRXdRMVlMcENCUVByN1hUME9vZE1ZTFZZek5XdmtFd3RHM0UzbmZncDFRNG1zS0src2I5aHc5UUJPUGNGYnhEUWpzUGRVRitFVnpaUUpiRWxYeGZudGNMaklSSllKMkl2WFNMZWdVWXRnNmtETVBqRkpzalZzUERibVlzL3hkSUcra1BmNWU3Tk83QjNoaUZObXhoSkh3KzAyMUE4U0x5aEoxTEtXSWlTVjM1L0s2VGxRUStyT2MwcDgxcXpjTCt2ZUw5WmZsYVNLeW1yMW5IeEZoZTFHaHA4Q2FVNFg3dTEzS2UzdC9yK1UxQmM5NzlETFIrRjNROS91SGM2VHZ1bld3UXNXZUtEMkt2QXMzVW82ZUpVcndOSTFBUXhBVy82L3lFNHRXT1gwMW5hcm1iSXFjSGU3YzY2dGh0TWloV3Z6a1djNytGUThIVjdHNGw3K1RGbXVQSHRCYTVBQmt3QW5ac1p0S2Y3NEtPUnpvSEgzWlFnZjJqSGVPaXQxMUNzbTJOUzBVMlZjbUlVSmJJaEJZdGQ2S3Y4ZDdOeDRUeUNvakwrcWFIWGpId3JIeU9MeDErdFA0RWxXbDRLdzQraXBiRzdUVk1rd2RJQnVhSldiYVVNNDZWQ2Y5ZzBvNVFiMVhwVWFTbFhyRUxnRVQwQU5mMFVJeEF3b1JhQVdTS1pidklKdkxkQjlaOGxRanh3UjEzcUorOEpDeWpSV1orS3JzTU5UT0pnN0E2QWY0clQ1akJTK0hnSE9zdW1ydENJcko1Q0I1K1JKMlMwMUtZVjNkdmFLc21UZ0hvQkdoMERpTkZIUkhmZll5bGVqN3lPTDdXdThyR1A2WW9ac2FNU2R1V043UHJzdUpQSGdUSitRclNwNXEzMTVZMHBDUVlsNGRlOWJ0VkxjQTBESWMySytuWDEvZWg0d1ZnZHlkWU9JZVE3eVRlbUtENVpRTmhySHUrbFlNNDZDTmhSVWw3Slllb2lFKzRsRWRPOG1HcEwxVEdjR3pKMThMWG8wbzJJb2hGS0wrUHlKbFJkNC9hSXgzUGtSUDYwVDVLVUoxdXlVMXZXbzR4aGRZWFZhcEFMbEJJWWt1WUpEaU1yS1d5eWJRZHFKMTl5YkR5MitlZS9mVzBPYTRZYkdLT3Exa0NFODVCYm5VVmluNlAydGw3VHgxSHBRbW9iNi91Ymw4aFE1dVYxK3gyeGpHeVB4b0ErSnMxWGhJS0M5SFZTRTAwMTlmU0xRUzV1Zmo5OFJVWVlxQUN2Y0N2azRyZVNObTdYNWwxTW55ZVNEdG4vSFhHdWU1Nnhta3A5SXo2U295RDI1Zm5pR0xEL0ZZa1dCa1JvZkc2dU41dHFWbHpRWjgwR29Qck5JODJLT0s0aXoya3hQR2kyM2pvZUxqVUdnVGZlenFkRWttS1hFY3pjaURBYmRtUGVxTnNaenZxbWZJZlhiUWxTK1h5Qk1rR0N2TWU5WWNHNG1LRnlSQnlXNUYvbHF1cDNyMGZob3dXSzZYR3p2YmlDUzJNYW1wZmpJdjV2SmpTK3dHd2FaMDExeFpxZE5sbFVMUGd4QmtCT085Q0Q2b1M0NVJmcFV1cmp4UnhINzhsSHBvTk5ZLytUMVZlQlNvMDZuSHJ1WENPUktJdE1YNkg1YkpaYlhXWjl5T0VWYkc1V0hXK2d5SGtwdEk0QlRsTThmYk94SkRYTGxRTm4wd1lReEJvbThHcGlXS0NWNVU0VmNMWitFb0c3YjJzRFd5dG1vQnFIT0NEWVNKd2svWWR0cDBYd2liUVVOMXpTeTRZWGdmRHRwN0JIcFNXb1I1THpDY1pabzlLVlFFTTlvTEFvR0krU3EwaHZhMGJ5V0xWWmpBOWdpa1pHa0gwMjVOZkw1Z1c3N0RiWTZpSGRvMk8vZzlCSVk4L296bVZyeHJMSnVaSnBvNnlIUzJreVlMY1o5WG5hcnpNcE8zWkFZelFBanlEdTFUeis0czJaR1VWekJaRjZTQm1RSnhaNjRMdTJibUZNMnNlNlE5eklScDBLNG1iNUJLWXFKZHFlSEhhYWhRMFRyWnFyNXpiTVR3T2VvbUZRTWg2R2VhQlF6bjVFck1PUEpYL1B0WDhvVWhGQXZQNU9abHdab3d4b296U2d4OGp3NFZSbFJSWkRISjBTdUdVeEFGZlI0cjdZekM1emdwaVUra2E3UFd6L1JyRmEyWi9zWGRRZTBZZWVVMFgvTVNBVHo3dlJ6MEtGaDNLdG5HM1JKaDUrbFpsTldBSlNWOGo5SExQc053RzZrdUNVTjNwUCtISThQWVFKWjArVWVoV2dzeTI2S3UrTVBuV0tZRjF6YWd1dTM3SE50SWFEd1RSUUowdnNLcTNPRVRNSTluWmZSUUptbjBKcDhBWEE4d0IwOHhuV3FxMFgwKytFdjBiWlRPZjBXVFZ2aFJpZERkbEVzclM1V2ZxakF6TUd0U2h6VWd3c3NPQ0E0L0RsNUlPM2VlczNnTU1aUHgxZU9aVWpNQWJXZ3NGRHR5amNlVk9mL0VyNE9iWkpjNWsxRDNaUmMrS3lJZFp2bCtVOWx4OHpBMmlYTUZjWExMaTlYdVVuY1h3MHRVNU85RStUMHlxaWtHcEp3RlRUTW1qUUJuc3pJL1BMSHNhM3FPSWVCSExzWUJlZVkxTlNuZmI4cTd3cVFNUFF3NDBmdHJEV3pnUTZpV1lPRjMrU0k3L1pmUFRXOEdXVDlxWTl0V2R5aVRkMDRnRmJQemtwWDdQN0VSdU9Vczdpb1FRZ3lpTDcyeXBlb0E2MWZvN1R6c1FDd1E4eHVWT1o1bXFtWnIvYjBhbVNEVkdNTmFZK0gvTjZ2dWF0SnhCbXNOVkFKaTVDMm9OMTNoTWE1MFlNVlg4ZnFoajlKRTZUcFp4SGF1U0p0ZU16aHVmbXNlU0tzbDJ5cjlOZVJGRFJXcDlPRnhkalkrRU5jSUtNTXorTWViMnF2RFJYbmxtS3NFcHdFUDZmdUdnV0ZxWWhwbVp5LzRvbXdPQU5kQktabWVkN09HRTZvUGE1UG8xZVhyWmZ5UFpjWVpna1dsZW51UnJpamp5U0d4bjl3bGRrRnJRcFphWjdOejc0S25SQ2pETm5yTGo2ZEdvL1dtUE5KeFVwcFBDV3FrNFBIejFmN0JLMUlxZlZPRGFPWEdvT2xkbmFlV2NwSEczYkRvaDlDbVY3c1NOclRaN2gvaEN4bVBObmRpT3hhWTdVSDRqYUl4ckM1R3dQQ0ZRZnpEcVE2dnVkbTN0TDQ0Q1dhTGt4QjJtMTl1bnRLTzEyZHBISkxtc0FicEZNZ0I1L0xSYUN2ODh6SlI1WktCZXZZRXQzSjZiOHprZVVUdWRpRGtUOUpnK3hZMk1PWnE4ajBZVGthbWQxMmpMWktYYkYydkIrUHVCZVJCOWlJeFQ0NDcwRENpQTlSUzExeENxNDF0eVQ5aFAxZUw3aGE4MXU5TzgveS9Fai9KeThrU3phN205R1dVREVDbmxCejJhcy9MNGxnYWQvWlZvTEtVdUpWTURjY2piUlZKVHliM3BhWHRKN0cxYjRKd0liZUhqOERPRnlvekRjL0h0RVp1eDJWWmhYbzVXOW93TXl4UFpsSFFOOE9DZGVBRXdOQ3VGOURUWE9CVzhnVzU5elNZcU1uZnFPcEpwcHVMeWNQRzVTSE9aTEIrOVpwRlVnMk9YVjRnNVZUaUlqT25BakFpSHM4UzEzS1RJUFNHMS9NOFZkRDBhME5zR0hGYmhGKzNoVUtHL1EwN1VOM3p5WWdlM2FWU0Z0U21nODBWeW5pRldSUXhqSXBDUWtta1MrNUIzT3dheldaRTJoYTdmVldZNEtkb3RLMXVjNTZ5RlFnVG5BdTc0dC9qMkxjdW9ZeW9JblBOaElZdVNEV1B4aVg1ZjE1ZmlJYVhQL2hEUGxpUlhhSGJ6QmhFT3V1eVpmV0M4OTNseSttaTYyc2h0aEUzQjZJUWhTbFZiS2tsUDMvNzJycXRRY2dZcEZoZHpnK1NsbVZCVjBObExiclQ2WXo1bzczeGtkdkg4K283eURac0R2TkJyWWhxblAyOVIzNnhQLzEway80VFFBcEZDOHppOFhFS21LQ2RnNjlSR2lpeEhIVEFJYmh1bmpXYmVPdTlPUTZIQk43dXVZSGV0WWhJRFhRK1hqZnUrd1lraENmUllaOUVoQ0hoVTAyU05yL2h0MEI0OW9VZFkzR0RsTG5pQzJxR2N2K3VYQmZRMEhDbnI1Mi8ydk0vSWJCR3hCVWVzMTBLc2VtRnFiRnRhR2JUa01hUzE3Q0k2ZEhHVkU1dm9XMUNSQjB0L1p0eEFxNUtwZCswVGRLTTdhYWE2WE80S0VhM0pwbVE5R1RyZmpjZXd5K09XbkR5NlBqM2lTMndUYVlNeWJEQlYrMVVCR2J2bzJRU0R0blVkdjN1ZHc4WENpNjVmT3lORGswZWtGQkxZTlZScXhwbjBRNEsrVE9oUGZCQ3J1ZjhZUVZoRm5yNmZ4NnBJYmJkNUFuNDc2NEVGNEpINWF3VmIyK1V3TWJDSXNKRUt5MGExQm53eXRpdC80TmpXQ2Q5MDAyQXpFeG5na3ZmMWJVWXZFcFFabG5taFNoQzBuZmpWd0Vuai9TRmF0ZG5qK2JXZDRjM05PdWhkRk4wR0E5STYrVXJJakhTZFcwUUF1MnREV0tmQVhIZk9qaFUyWkxaTGlQZFUwb3htR0l2ckdrQ0NOTjk4bEhQeXpRYjJZK2syQjFOTGp1VGlpOGIrajhhYy93K0grMVNHN2Q3b3EzRG9QYXViSVFZSFczQTI0K3dRM1hjdmt0WERadXIrUGRoUDlYUE5zdFlLTkJLMHRxdVZPNTdjcnBzUmNTNTFSRUVkYVpDSTRwLzFLdk1pcXgxNTdGMVNGNlpNeDJsUldmOURHTUk0TzByamdWMzVoeFlxNk1vVXd4TEsrenBhMnhLMnZuYjNrcVNtVXIrdGdsSENOL1dTNHpKMUxwc2Z0dGttMWIyR1RFbDl6ZGtTYjJJeXNsVGVFQ21EYVA0MGozV2pvNmszZVNjNUVXWmZkOWN5MzgvR3p1WVovTmtISFJndFIzLzhSWnp6N1lkYktUNzJoOW1icVpaNVE3aXQxVDdya2haNkRlN3JiS2pPaUQzMUZqUmhPRENPTE0xN0RVQ3ErWm5QS1p2RzNYZ0ZCUjZXV3ZpRVlxd3pOVWtwMnhIN2hyRzBCU0FXZWM2SW9MOTBxRS9jQ2Ryd0syWlZoT3crMFR6VFFSZkpoVzh2bjRCK2poN0NGZk5mVHEzSGk5RmhWZ3VKcjJkeGlya3U2QWZpbWlWM1ovRFdpMnJXb08zek82WnNRU3pja1gwZ1JWZ2F2eUlhdFpmeHg4OEk3WmVtRDBtNllkUmo4YitqQkV6N1RNb1c4Y291NWRVbStjeTNNYVowSC9WRXR6SHExTCtQdHdIRjhvOG1RQmFnMGwzSzhJWmtXSS84NlgwU0ZBcmdnTlRUV0x3RTFZL0d3Q3I4dzM0VFZpL2VPRUJhVGlVR3pUVldCUkVnNHV3OVRCMENHZkhvRXg0Mk9PdFJ3WW1oMVdDU210V1pkNWV3TW9FMWxjcVJqRERLNlBaeFQ5Y1FCRGI1WlFPeUFhQ3ZXNUV3NGxnS25uZFJmWnJ5MGFtVzE4RzJkaVJYZHZJdUhEbk1ScSt0VTNjQXZBa0E2cVBrUDZGbXZneGgyVEhTWDdhdlFtRDVZYnJ2VnRCOEcrWEVWSjNrWVpXbU81YXRBSzRmdWVVUEZLalZRdjlkNnlaeXk5cVVIS1JhOWVRUE1tZWJIeDVkOTNWMGZYZ0xZQm1uTWdoVEJYOTd3MXZFSnQwTjUzQW1Sd2tCWXgzS21raTFoeExhY2NnckhWd0RtdEcrQ3Z6MnVCTDkrMnp4UDRtTDhPQ1YxWDRDYnhUQmVKSk54Wm9tbXdYQkM4NEFQYVJ4SEFxZ0MyU0dqQVdaSXdHLzVlbHUvemF2a2xhVEJqcXptZk1JNSt3VkZ1b2U2UDBORFFrQmVWQVM4MVJRQXlMS0luTmI4ZlozMWZ2V09WN3VaNm5SWHdJVnRuL1JISFRHbDhSNlFld0tCKzd0RXliTUY1Vmg4bzlidDdKSmpOSFkzbXI3ZGhzd1VNNllxL0I2Q2NHdHYrdU1MY0UwelJlSHlYaURiZ3VoelFOajIydlN4SzU5OEMwVjBQcjJrdUhjVFJ3U1FMQk0xRXFqcmNVdGM0ZXRUa0UvMllsa3hLZlFSUmhYRHRDMFQ4L0diNzdoWUdRbzRNa0phbndJbXZoNVlTb1hZYWZCeWFrQ1JhN0RvM25HR3NteSs5T0tkcldDZWZXdzF5eXBXQ0FieW9KQUhZOFpNTXh5ZEtOaG5DV2E1NStDSW1UcHErRzAydXlMa1hueEpGNlRLUE4wYUFOUEE1ZXZMaFZFQ09la3UvME9PK3NER0FKcXZFbzFvQlh4endqbytTNGJHTzRLZU5LQVFlV1oxaml1aGY4YmMxank1aFJzWFU1LzNxdzd3OXdMcjV6L09GMWxhcDMvSGtWckRYOXJVZWxnem95WGloeVZOVVJqeHNyNkYrZXBNaGpUb3RHRHo3ZjlHck9nckxSSWEzL0Iyd1Y1blZFQW1PMDlRQ2g5emxzWXB4Zm5LQUc3NGJwVm1jSklLNXcrbk1kTUpLSnFaM0RLa25EUGVBcWVnV2NaclBzTW1EdHEzQ3QzUmptK2hqNk5TVDVyKzZ5Y3pmaXBkMVBlZVBSbXlqVEdISE81VVRWcmV5MGk2NWpKbnphNzFBelBod292aEFUV21vUWVROTRuM3ZGNDBRYVJVdS96YnM1YnJ0L3R5RURBeUlJQlFkTG5Mbzl4S1BJT1VvMzNqajlZV1lqNE5INjA4RHhjQUpsbVYwUzMrRmo2b0hYeldPWFlYWXJuaGVtQjB6WkJUaUw2UExhSW9UYnRwNzVEa3dWK1M2QmZ3dHFEM3JVR2dYekZoNTNudVpqRlQ2S2xRT3dhRVlBQ0M5bTNzNGU3MGtSdk1aQWRud2FVYVcxT1RQcnliTWpOaWhrSUlGVk5TdHRPdmlaaDlHS01PWFRVdWJjMnJXSzVQOUFGM2FkUEJ4RGhRTXZad3NSakZTV3cwYzIvaHVKRTdxOGNUcEFkaDRrZEtaZDhVbHljT0J6TWd2bUpEMmFpUXZUenBCbSs1MnNuMUNMQXRGYVZEWk9vWGl0eHk0Szg4b0hKWFBqUmZNemRCdUliT2kyUThrTkN0TjlGenFCM283WjgzVGUwemFrcFpxQVpmNEhTdXJJVDVyL2tjS1hhNXhCK1FPd3NBeFkwbkJyTGY5dG9xRnBFR2c0OTJxUXNUaktwRGFTUTJPS2J6YjRHYUJqVjFWcC9oaVNsdGFqNFFCcitTVGlqV01YdzJaellrd0RFOEFqa1JIb2hpV2tPV1c4dTczNzlFYmlpUGJkSnBqMGdZZkRNOWJSZ0dyTlkrY2JZMDE0eEY3Nlc2WEU2am00Q2NuVVNWQVdqSUxCUEJmV2xVekV3NU9qSG9DdXdkbGZVWUc0dEx4WGVhMzVYakdBUFVHSzNhYjNDYnBFcmIzMStidkwySDJaWUp2R0c3OWdJazlobUhKSWRaS1JjTkdJanJVSzY4YkxGSXAvaHQ3N2dia2pZZ2JBRTFEQlI1VWpvSnB5QjQ3RjBwTXBCb3BHN0hEcnQvRzVLSHZncGo5c2gzbk9za0JZMDNqbDJHWTBqRXc4WDRPUUd0N3Vld2kvWGRka3BudlV6WmJ1MDVMVGNjWTI1VGRRMEhuSEkzamhVOWh5aVg1UXJWT0hnaEJ0dTVSYVhvb0VFTnlCSVNZakZYcWtMd1lVaVdqMWFMMTY2M1VqVnNXTldMbXdHVDg2cmZDQzJ2L2RqbjRGYk54OVhiK21JNEU3cFF4OE1YVzA4WUUzeVpWS3VWVDk1S0t2L0pRQWREc2dud0FSekxTNFVvUTFxTkVWU2ppdDIvS3gvbzNqVmpRRkVKcUFINUNwZC9zZU9wbTFHT0g0QWJhenVGam94MlY2S2YrQXRlditCTkZuZ3VNVS8rUjdaNFhpaUxWT0NOQVBXaEV5L0l0VWVZQmZqOU9GRXRlZ0QzQVVmR0x3Yk1HN0VTSWlrZlpXOUZrTEtMaWpaVlIyMmFONGZzVHQvckUwQitXYlVzSlhleCs1V2ZrMm5EakhqYSszMHltczAvdDNUZG14WTlGMmIyS3JFWU05a2oyVkZzUEloeWVSaUd1K2thalhzMCtYVlhVT2M1aFdlYmRLT3hFdFdaM1E3Yk9ER1gxT1NocUZTUEtOYTZHU0F2ZXJVS2NMUXYvVUMrb0JtNDJhNkVaRnYzZ2lpU2JiVThkS3YwMkk4cnpDcmxGa0ozQlFXdENZN25icWFOSWFpcXNVWU5ScWo3NElwK0VxZXdvelB6K2NjMFdvZDlPU29aOWFpa2VjdlAvMjFOY0NOeUhTM3NBN21yT0Q1dlhuVm1EU1dOVU9lMGFhbTNrWGFaOW1yVGovSlQ1WGtEdXM0Q2FZb3F0QUxETkl4SHZYZEpicWxodkhLZnpBczNEbGsxVUlTN0l6bGFjYitFazJWd01WSnR5dlNFQnpxS0phSjRnTlpOS3ZyL2xhWWVlcVNZbStKNXhUTEhBa1lyVUU4NGFPRnlZUGkyNUdzWGNsOUwrVndvYlQvZ25GNktHOTFsVmJReEE1MXBzVVllRmpvYnRabzF3dElPcUxPdjFpNGpqT3FHbzlHbUpudW0zNnljZzNOMlVBWnlRdUE1dG9tRENxVVI4K2FnOU1PRVBIcDlOR3M3bE1pcGZXa3grVENJZFBFcHBYRElZMk5VelBDL2hMY3I5ZkJ0WENMQnN0aWVuaTNWVnVNZnZmTXdXaUNUVld3TTg3R0lhRjhWV2kxc0E2Mk1nem1OWWl2NDgxb05SV2xOdGdacU8rejZsQ2l4cG5tWVhTMGREMk05Y0ZseHFZa2lDb0lpV21qY1JLclpyVnA4OXI3THJHaWVrSUdDS216T2VzOEpPV1pmRDl0Y0xSSGJyQzBEeGZReTA1Um5SNjFOV0dpOWZVdlcvaHFhM1VlbE00Rml2OXZ3RFVvb2UyN1JUcUs1cDd2dmFSYTcyWGhTTzhEU1FieHVXVyszbGJWMWdXVWpZUWRvMDNpeVl4RytENVFZWWVFL0JmaVh2UHozZytQcmFaMU5pSko0VnlIZEFUbFRXQ2lJems5OWh5QkVmM1VOeVF2OGV4L2k2OXRkMmNaeDdlL0g0ZEhmYWpuVHEvRThFek9vQTUyUit2ODVuY0pzTUcwV1NPblZ6azdGZ2tqdlFPM093d244Q1IwS3RqbUVpcCtwNzBQQWhnWGRySmVYdnhwdHNrOUlPaGp1aE9ZREIzL0lNTzV6enlraVVESUszYURIZzNMMUtma3NkM3ROd0tWVkhCUDNuZStEMnFWNWdzbTBCUUY5QzlBSnlOSkRBbERlU21MSEI1eFVXbVdkaThydC9TUENJNlZ0UUZMNGZod201YnRkS0l3a3cveEk2Wit3SmNQRUx5NXk1bU9zQjh3WTJURG0zd1Rvcm0rZXZ0WHJEQ21uWTMvUmlwZkxJeG9wditCU1RlcUlsQ3pzaTJtYWdibndGQmN1dXJ6ZTFpL3ViS0g4SlBBVldjSU55QjNna3RnZS9mb3ZIMC81U3oyd2h0THo2U0lIQkNHa2xmeGxwZkcyZ1RPdnY0d2hVcEVlUlkzdVpzSVNxcVlYTXZXWWI2b05LQXNIYlJ3dUgxWFByOFdiMDA3YVhtUVBqOVZYKzJ3YnVDQ21hcDMwVDBTMys0Z1B3OFRNOFR1SUs4N3lFRTZ6S2twVllQZDZtbkUwMEFPbm0rVnZtNVNneUJXdlZIL01yRHZMMGFVMmoxanRyY3R0R1lDWFNVbHhyTnVSZU9pVlowTWxrOVpvd2ZhamV3WlRtWGVFanFGZWFnTzhzSi9tZXM1eUI5QndZUkF2MHVYZ2VTTXdDb3dycjczVmcxME5kV3RIdlZMNlNyVm1XVjhiRFhmam5iT0VjYzB4c1Mrd0V5SGdkRDdwdTlHT3Vod1UvM043RVZxekxwM1Z5V0d2aXJOTGsvTS9VTEVESnFCLzB2SllaZzkxMWhYcGppWGZVZWNoTEl0R1dMdkYrK0ViYUtEZ255Y1pZUGpaekJ4M1hGYXRRYjNGSDhjbGtwQmtSNTdQUWQweFhrQjRNd3grNEQxamhWd1Bhc2FYTGxhNlRyZUt1UmVXa1R1bnU1TlZtUktzV2t5RXEwSS94QVdFMWcyWWI4ekNSNmI3clJUSUt6alVzVndaTXZ5WnFZMXNpWG1FOEh1S0V4bjNLMWdqK1hLaVplN0VadEJOTVJwTEhadGFvUTgzaFlGZVJBZFd4U1RERGlBdWEwcm8wakdXUUZHUkhmcnNqZkFSbkNGb3lyT1VTUGVSNzc3YTk4RXVQdm8wSDhMcXc0UEtRWHlNZzNEdDRTendaYjd1K2wrOFkwOEZ5Y3krcTFyWGRsbndkN2I3QVVINGtPV2xBNEhFYk5uZUhabFJBNWdxcHpCMllKcGFFbUdnTE1rZ2xVdDkxN3M2Rzl4MVlheGZ1WHpzSlUxWmpnRWJSRVB0U3RTbTA1aDdhVDJBQ2J5NVpmUUdEVGRqekRWZ2FNelpZcFJFdVE5aGd5OU4ycVFMMmVoSWljT0hsMTl6b1NoYzVlOUFKR3BQRFpCOGRhdzJkWlBQd2pDcjdaalN3Q2pSTWQ0bWlNYU9iZXQrTGFLSDdYWXJrNXc3RVJBdmJSZjM0eXBoTlFFYURCNnpqVWdadlFya05DRldoWHZiS3pNRFJzN2dHVzJEN0J4Z3o0enNiTUp2cVlLNmg1ayttR20rWHV1L24vZTBBSDdweUFVdzN6bmh1alVWVlFjNFFkNWc0bk1xVVhUV2RkTWRjL3JrUitQN0lzZ3FWZnVWd1Q0d1VGR0hGL3ZMQngyL0Y0RUdFZGlJWGxSd1Z4TFNxWExCUEhGakFxbzlmOUtkMXBQYUI5QldoN2FDQ3loTWpBVmtsenBmWVNzQTdkQ3I1T2dwbUJROW9MdWtaSVlFc3NXN3o2TFpaWHN5OFRsdXFSWXFpVGhDdnRSZEZlczNYbFlWTjJEN2Y4cEVnclVESlVpa0d3dzBhUVJtaldhZ1pPNU1Hbm1CaE81WGJQRjhtWURBN2pTSU5QSXZWNUd6WlRTL0R0VkJndDhhckR0UHdMQ25ZZnJxRldLS1lnZmMwbVBPUVF1WmkrUWl4TVZIQTlmS3UyTm9WNCt2Q3Yrck9SVnhSNzVpQmw3YXcrRkJWZ0RGNHdpTERrNCttMFVNSUlqbkZiMm8vZ3lFSVdUcWdlMUc2TTlsMGZHUGxnM1ZvOUV5NSsvZ0JOV3cvRGtoL1lYNTBYSGRJU1BGQklETEpENCs0KzJLejJ3R2JCaExmRm15N2tjRmtpTjJGZm1VTGVDTHkvVllZazRvOGFOT1dXSGVSd1c2dWFoUkpNSUtnRW1wWEVJdk13ZllJWDlidEdwTS9kM1pJU1hqMEhJL3EwT3pSc2FWRnZTU09CVG0yR01MZStUbVNSTHFLbVF5UEpBRXZzQ2ttZFBteE8wNi9aK2hnZFZsWFBXVlhCNUlwYWtaUHFxbnAzcHV4aEJjTCsxblJzeVBOZHFvdnlLNUZVU1VTeHVVY1JJOExSQ0xqbGZPcFdCRkpjS3JoVTRnSnRjMkV1bmpYWWhtTkt0eFlvbktSQ1l3cWdJdXNHSWN3V3NyZ2ZwdjA4VTBjeGE5Uyt2N1NERlJTMm9zUGdLaEVKQ3RBQ2hjZHhQRGo0bk5ycUpzMHl3L2swN0oyL01xR0JsOXBCc1FhcnVKU3VFbzd2NURiT09taVNzTmlWRVh2bVd5d1hzSytaYXhzRFpuUVArbTlGejlpdVBXV1JnQmluYTdqSUNVNmhWZnJqNVVhOFN0R0hUV1N3OFJkZDJrcUE2MlE1U2NmaEVtbnZHT1Z1amJOenJMcmdBY0lzZlNQa2kzU2xGS1p3bjBEdFZWVmZkKy9KSVZYdUVYNVJOZFJBQjhXekpna3ZkSG5scjRpWnBQQ1R2SS9HaFpXQTN1ek5XVFNkSzdtWTBscCt0alRnemhQc2tRbEpQWEtnMHFtNGdsQWxyT3BrWmhCNjhFS3F3UnBkQ1hET2dtemxGYjNqeGhRcU5tN2ZzZkN6NXhSQkdtL0cxWDFDdkZKWTBJQXp1eVVWcjhxdXZrYkx2T2FISHdlRzdPWFZJTHhBS1dYZXVvVEd1VDhvQTMwWS9jQ3RHNjR6aytnbHJRTXV5SWFWcWtvNXRkVjRBZ3JJak94a09vbEFjQkZGRU9MdHh5M3pHMjdPUXB0VXFPaVRHSXl5NXQ3Y0JkdmxoWS84OTBESHllMWd5VDAxbXErbUEvYW1XZmxBOFg4bmlFSmV3NStNSWNMbGFiejJ6NWQ3MC9uMFZzdXdGc3U4SGhwV1d3cVpwRG9ucWl4ZGxiVUpONUljL01UdzhnNlh0ZzUyRGV6UUFQa0JMNFp3cHJkMzJLYlhrc1JCY2NHS0pPNzYxRTRqUnpEN0l6UWZKb0NBT3RzUmVDRWIxS3JmN0NqSDVqVWViWDJNNytzcXVZWG1WMWQwc0o2OXNMQUNzRUFKZ0JObHB2SW9qVWtXeHdvTEhjWEVmdUY5Y3I1MWNpNFJlVnUvWm43aGdnbXJSTXlRM2E2azRyN0xqL1lTQ2dham9RTHI4VldxRjE5TTlLVVREcWZqa3kzMWFsUERxMDV0R2JRbk9SbmYwdnJJVXp1alVFR3lPamU0aWhGOThEcGNjdWRlN1YvNDlxQzJJR3NWb0M0WVpXeHBlRVpJclEzNVVvZEE1WlNyM00vQ2dXQ1BKdUt0WmdFQmZMbDhmWjhlWGo0ZEkzZGg1bjBETnAxV3NLQ1FXdkVZeDdSdEYyVnJXamxWMC9pcDVNRDFndzM0TExycnFZaVA5d0ZlaEpzSGtPZFVnZlNJd1RjekdvaU1OMzBaZ0l3WW5iQjlOZFJhbWUxOWZtcktnYVNxTjFHR25ZWFEwb2pwMWdNQjY2VXJuSzEwM1B0VUJPMkphUWg3dWdGS0w1RFZ0Y3pHRUVYSE5pQ1JEWGd1OXJjdE1DYmxzeWo4YzdENTF5ckR6dklzaHdMeHY2RnlNcXZVQXBzekFvaGtjWTh2UTMxOVM1VDZHa2dWcWlKQ2ZwNmZFTVFsR0JaZGgxN29wU0ZtSjh0aHBaaE1sUFNmMlFOQUxqRFFKbFh3ay9ZYzQ3dUMwVHpLOEMyd2lTTjRJblJjK2RpV0lqMTNucUxoS281QW1KM1dZZTd3ZTUzcUg3ZlRsL0FXY0ViZFUzUGYxZmp0NXFBQmFoYUp2b1dLWGNwUlFtZGhQYXEydFNGVnBKSFZoSklURG0xMEsrZW02clMyempHdDcvRTlhUE8vd0pUL3VoRU5BYTZqNHdPaS8ySm5JYjhYeHA4bHlXL25Tb3hqT24xZG4xeWhRNmRpTWVKV1JmN08xVDJTV1VqTmRBUlZUV2htSEdpMFBaak90OXo0dUZzdytUNVRrWWFrK1pJTFpCam1vamRMQ0RHT0NCVnZJcXRhMTZqaVNJdE4yM2g5TFVQc0dkZnJSNW1tTFpWR29DZFUvcm9WV2tkRHl0blNGZzhtbkwwbnEyM0ZRY1pTTjJ5Ym9KWE4xT3o3dmFRWkRUNHAreEtWSm1LZFJicGx2MHdCK0E0SmNYaUV4c3BNTlhONUpsV0JMQzNwTmR3L2RNNU1lVGRaU0FpdlJIUVlUVm1XL0JWWCtpUDdaYnNjNUFDL3ZnR29PaVYrTkQzTVozc094aktUU3ZEdmpQRVNSWUFnUkM0SXRFSTFQRmliV01tcERnenBtdFRkR1dOMmNSNFJKeXJyRG85bmJxRGsyOXR2cHR3QmhkS2RoRTN2eHo3U05WT2x6SXJtaWdVbTlRdC9IZkNNb2JBdU9waWNzbGE2UFk1T2JjV3o0cVZuVHd2V2hKcUErQmUxUkFGVG8zV3FTazdnem5ZWFlhQ2dzdE1aTVducHlKajA1cmUyaHovcVdPOEZacS9XbWVMQmpSRmVKT2hFRDhHWXpiazFKSHVvaFQ3UlN5ZXdSeUc0MkNTMG9rRDdDUTlwdmxUZzJxWDU3OG95VXR2aVFUQWpYZVFiaFVaa0JPZWw2L0EwdzZyR1A1clA3R3ZRZ2JJZ0c1a0tLYjNnMjc0QjdpWHRqVkRzcE9CVHdCTnBNYStOeXBtYXdsSGdmY0Q4K0hVTjlBSGlKeWpGYkVkOGVlcUFXWjlmZmRibkVoczBFUnB3Uk8zUUlRL2hEejJweDVJdXBTUStlSEVIRUI4bVJRb2tFaERXL0N3R3doTmhuNE5FMmhXNDFLbjMrQmM5NE5XaDJ5ZE9HYjFZQzNpRDJiQkxJNzVxSHMzMDZQZnNEamtqTXpaU3lXQzNDdzY0QkhPUWtYNVlLTmN6ZHc3MVN3ZzM0VFB5RzBVSm80TWdkcGk4cGE5dVVVajJHOXp2VDhvNDJLNC9vVUZ5N3NjOUpFdWNYNlY3Z1dmWGMzY1pLenFJZURpdC9EOVI5UnZTUklvQWVvVXM4UjRZcER5K3JRR1lHR01YSkNmU0JlbllINm0wVDhGNnQ4TWpOTmxoV0c5Zi9aUGZZdVd2WE8vQVM5eXh2eExUYUxUdC9OSnU1OUcyNGhZWk5uUThYWllGWGFvOGROcTNrTVdwanBTYmVnTzU1VXplVXVNcUxXRzNtc0prSWR5SS9lNXNMVWt0K0VJeVBnVm02SVQ2MEhPb1ZhL0Fsb1Q3THQ5VW1SZTVoenp1ZHdrVjZVelQwSURnOCtpSExybkQ3bDcrYmFSRVlZZVVVRWZKek0yQWQ5aXBTNnRaVVlkZGN1bGE5MGRGYWRMTGZTdVdOSE9EL1BkbE8zRWVKcGdPblBjRE9wY3hPSndBZ1YySTB6YmRIRzFCVVRzbkdvRFNnQW16N25SeGJ4SU5Gb0VNOU1ETU1qem1NRmNzMjNXdmpBRUhydW5zckVobFJlRDFEaVpCcDJPMHJPeVhIZlFSRzU4VWhRemU1TUp1bVpLQ3F4djk3aVQwL2FJUElrTU1CeDA1UWlZSlpLRnQ1WkdEY2RSMjBia1pZMmVTRm02M2NtZGZWZmdyVEVRTFpnZk5tUnRJZllVeEFNT003MUlRRHNsaXZSdklqYWg0RnJiYWZrM1FwWEJCaDY2ZEhZODVDeXNWZzV4ZURwdXVybmRjVU9QSUhDaTl0S1lMaktCYjArSkZsQXBIT1M1NVJBb0tWdVV5ZXNwdEp5QU1SeWNMOWUxNTgrSVZXaUZPWWF3OENtQ2tWTzlHdTVBMm01bEdjRE9Bd0E5M091Z01KTzlNcHhVNG5rTlBrNG91UEM1WkV6czdrMmZYNms3dVhrNGxOTWZmbUl2ZC9GZ3dNUzRkVFRoZW1DOExhbDlzeXRhUG1YanQ3TWFENzYrUEM0VzlDTXFwTytZL1kzOWZyRXJjM2JFdVNPYmY3eWdaUm5aWnBCMlJPSnJpaStzSEk0ZFlqSitSWU9GZ3ozQ01YSnlFWll2ckZMdzd4emI4V1VqNDVRTC8yVTJ0YmlVbUo0Y2ZRdXd0N1ZJK05tWXd5bEQ2aFJOOXZuYWFwTFhXSUQxOEFNZlg0OVZJZ3p6Lzd3a3dDMUkwbXZheG5PMEtpVDRYdXgzaVNTZjhabGdCMURBTXprd1hYYVVZam8vNWVqY3F1Y3U2clJQQ2tKNlppTmU0QTZrb1hIaGh5ckVhOEMzUTlJT0NldzVadmNWUmxLWkNienh5VS8yRWhBYmRvUThuQWxQZjhNMGMzMDJ4THhsSXVuODlMQ0JyTHI4bUtaS01JbGw1SzZhMFMyRkhGVDJKblI2WWFacFFTL2hYWG5vU3JqclZZY3JYbkI0N3F0Q3NUVzk5bkpLK3MvQ1AwM3h0N09XQVA3NXJ1WE1MUy8wSzk1TnNMUFVTckpKRktDUmFybUJHMktTQjV1Q3FheHkzcHJoMWVDTEZyT2NpUWZNdk04V0trVm5aT1krSytwVC9PZUdGRHIwZ3pla0hGdER1TUxsQ2VWbHVJMTR4YyswZWVXalNNd1M3RzdIMzVqRUJacW8xSy8wTVErbUx1RHdVOUZMbXgrZ2lLdmUrd2JYVE1jMUJ6SUJqOXNhZXo3WU8zMnlTby9uRTdWM3Y4YUh5NDVRRGJHVVI3dG82Uld6MWRPR2VSb29QNVUrRFlDWnB3ekd0UTlDWkVWMmxaSWZSS1pncDRYME1QL0F0RHBhRDdHS2ZGYzFlc1ZSV0RqbFlROW8wMitwT05lZDQxRVhvdjVYNEtlNmJ5UEdXV3BXNXAyQnk3ODBYRHd6ekc5ODJvM25mN0ZEclVHMjZZWklaajNxWExKQ2pFcWliekxXMDRtcFFZZi9oUGpiOFpFdGZNeXdvaEdWYzlxT3R4RHVtcEtnaVYvUEkxRWgzaVRaOXNzWlNINmFLckpGbEpLalBVNkY5Y3dYYnlTOFFydjNFdTgzYmJhTm9GZGI5Ym82VllSL3FUL1ZaUjRpZjVSVUxBM0RJcWc4RDNUZGY3Q0hvTHBNUmVUSy9vcVZ1N0QyalY5NUphMi9zRVlUbHpsdVMwWkRpdHdZaU96VE02N2Mxa0Q3ZURqMndnUVh0Wmh2aUVJNGlqb290UGVEbXhwcERCZCtVemQ5UXdSczhDUHdhbUxvaWo3UndCR09GT2JJUmdZdUhhcFNoZDR5eWtibXRIemJDRjB6emx5UU5JblZkOGV0aFdmd3JQSEJRYXBhYy9STmQxbUYyaEpQQU9FNVZxNytUS3gxYnBmRmpMcFY1OXEyenE2eE5nUVdyTWFwclN1VHF1MUdxWmFhSWdNOS9jOGZjUi9RZ3R4dUQ1TnliWjNUWjJoR0UwV3I0M3ZqV0U0aXlPaGt0OUJTQXc2QzBpbnl6cVY1UEs3RVIwMlNSb1c1MDNBNUt2ZXVVSTJPaE1OVHFWL1lMNWhUNndCZVNaOHlJTkhRYm1sR2dmaFMyK1ZRNDZMSjRJOTdQUjNSeVZ0Z3dtZUVZTGlqZmM5RkQ1UE56YTBDL0VtbTZTVEVWc3NjNUNkQis5dHptWFBQWXltRE1HaktBQURpT1Juc0pDcHBkZzRsYUJjcS9GMVc4Yy8zckkxK1VaVG9CQ2U0M3NObWZQOVBnY2NaOGdwRytVYkJ6ZVRVUlhjSXB4emc5alJia056REkyTXV3aitmSm82dUNUL0xhNEd5eVNveUFxK1BjYTJ1ZFRXZ1R5QzJnbW1wY3B6Qi9qR1dyWlhXOFN0M1pRY3VXN0lYcVFCcE5hTDV4TXlETytuUzNyMEVuZmM5MzFYUjBHdTRGaG5tQlVMV0djK21MZ2tCQnlEelpvQXhSa3FRQ3VQZ1pQUDg1Q3BHZm1lclFRby81U3luZnEyZHExZ21xb2o3U2w2bGsvNTd3UG5PWXJrZjR3Q1NVN0tsdzVlQkZrMFBOaGNGRXBkRjVXblRNME9vMHZOVnF5UHhMOTU3eUdHZmxlM0h4d3E1YXZxcHB1d2tLZDBCc3EzUjdhdlZPVTBJZENkSC9HVVBRVXJiWFVwM3BkTXhnMmROeXhmMlRXWlJaVlBEeG9BTDZhL0hDOWxUVXNJRzlFQ0Y5TXRnRDlybnFGU0hBdE5wbXJMczZTdU8zTXdjZWFHeWM2YTdJbGVNOXBPM2ZOdjJXTU9Cb0h6WHdZbU5KRzdRMUdXUFlGaFdPdkV2QjFUNmF1RGxVNU50NGFiTkRWeG5nYURQZzRyWDlYMUtIYWk4ZkpreVdZQlI2WXRGNmxsM2J3SEtsWnRBMklNT1hLV2krc3JkajJTWFdRclhqRWRRclFRd1FONlBQSk5OSWUrK1B3TGpaaVlzb01mQmpLTVlvelR3dS9xMDVXMVRncE9UU24wWTFIbEpzOG1JeUdBSUdSZUgzT0x2bWd0SFRtQTBsVkF5WVpwRlRRZFVDWlNzRHJaaTd4TkFmbGhLa3RhdGlxdXUyMkFZTkFRWjRGSExXb1N6Q0NRdHBWenM4cFBWb0wvT0ZkZk5pQzdsUitVMVpMUTg3dGpJUStaZ1NHbEhvcmtENEk3dGdPL3RFRWVYOWlTNzNJenJkNjJ2eGFsYnBGcWZoZW9mYlNVa3dscDNvbDVsOUVGaE1DY2pXSTgwa1YzMG83MERXRjZoVUp6SXRkZkJackUvZEF2L3ZmS2VvOGlQazdxR0hLSVIvNUJkUU1EZnpPZkdZTGVteGVqUGx6Qk1GWExyQ2JUSTBTRkJTWDFZKyszWW9xZEtxL25tSXpXZjhnY0VGd1hpMzM5L01mcWFZVFhNNDQyMlBzbGQxd0NMY1ArV29LbTdQYlY3cGRHVjZhQ3llUW1wWG1ocGg0SEN1MFArWVVCWWZ3bW9udmRoQmRjWHd0M1YwSnRrSlFPbXNnNU9zNGVOb2IxL2FJZzdxcXh4UmQyMHRiUG9ZdWQvUWdnUUFmRmN1d014U0ExeGh0Q2ZLUXNmUjJ6UFlicFRuaUtyMmF3SG5yZHhJZUZrbjJnbnBLTHA5VVVMRzlNWHRXMEtVWW1FeGJCazJ2MUZVNHRBeExkR1R6Rk5aQmYrRkl1amFuZEZyZXdZcGMzWHhDbUFQNkxESi9jRTNwNUYwWW91YXU5NnJGclgrcStUYWp5Z001NGNnVlc1aXlTMitZcXdvWk00QkVlNE01TXJBejdUYzdlMExpUldJOTZFeFRpQXh3QnY5cnBlVWMvekl3NTNlMmFyUE1Ob054WkpOQ0ZueVJwbmN2a3RtU2loUHRCdGVEZ2JSM0UxYzUyUElWd3kzZlJRT241ODBCT1ZJRndzb3NEaWNPaXQxK0h3bjNzVWlFTi81UVRyVlg2Wlh6bmUrb05IOVhrOXQwNnJhREp0Nklmd0RmcGZOOVRHQzNWcENNRXltTE9FcEdaTnZtS2hLWGMzbXpCamYxTW9tWGJFQWNFUS9kSXJUWFFaYVQzZGdFdXp0TmNzcU5paGlZUnc3ZVpDVnVGc3lKUGRpaFZ0NGpqOWg0NE5JbSt2bEhZRjdCRExyb1NsYkRqQWM3a1hWS05WaGFpSmw4TUtFTDdIbkoyM0E3SE9PelUrQ2ZFcEx4QkdYQ2c4Qi9aWUZ0U0NrRVp1NnNTNzk3WUNnbHVHT3dzSTlSamViQTFqTFpiVHBVWnNrZUJERXA5aHZzNGtCSTRQWGV3eHZSblJNZVl5WkthVkIzQjBEd2x3OHhLOCtiWGRQV0Zha2Q1WVZxYVhDRTdTeVRUS3lDcVllaEhlTkxPQmw5Z3lxNXFZRkJXcWd3WVErWGt3Z010Wit3eXFjRWdjclJvcUpOcVpoejFsdzRGZWN6cG43dngxNUNtTEpXY0NsM0liT2xzOHppZDdIQ0UyVVJZUWMvNTlEWHBWQ1hLWEI1NjgzZGQza1QrNVAxbjdzdytOT0hjOXlRN01POFR0TzNMYzJEdjN6UWtDalRza1dJa1RIbGNwdDBWMEpmSVZQWitPWXFwK0FQUWpQNlVCOGFGUFhiUXUyd0toZnlKWkozcklwMUZkTmVzYk1oMGlYZktvME1ZeDZBeUlYQjhRWng4K3Z3U1RZOEtKOE5hNythTTJxZEc5VlA1TWp6STRkU2huWUx5enhxeWp2dFh3SVpXUnFYakd1MXVCc2pzNHVmSldiaWhhUGdEQVlTYnNZeGtTMWpzUWtHbHp5YjZZc0JhSy91emRMaWEvRXJNL3dXN29qZFlpSFU3amVlbWx4ZFIyNGtzcFdEN2NodlhQVTgvM1RCZzM5NUMrVjV3SjdqVlVSV1poTE1ySzNidUJGN2hWb2lyZ0lFemNJRkxNQ1B1TVNNSXZuaTIwU0FjNmdFWU1KN2dUTndhN0svSlJPNU9zNWpIRnAvd2N0ZHVUSmF1WE16M3craDd4S2lhSmM2Yi9LNXU4bkh4S3NvSDNDK0c4M1NnTVdSUW0zSGk1TXd6Vk9HTnpQSGo1YUVLTENRdTY3SXNlRnBMd1hMT2Qwa1JnMmZNNkozNjRWL0lWT2drYXpzWnI1V05NSmhaQVE1L0U2T0ZPOVpneW5FaG5PbnhhbzB3OEhXZkcvcTFQYWhkeEZ3bGZuMHVDT0RzYjFueENlMUpidWtFVUl1aXQ0RXRyZ3JzUE84dXdaMkRtWGZlUUhSZUE0QzRhb3puYm1YWmZqTVZxMklqdE1MV3VhbTJEWGk3cnhZamJhU2xpbWhGaVVMc1RKUkpxZE5IdW55aHVpSDdHZktnS0FQaXZVVkcvamVmZVQ5cVN3Wko1d1Z3eDlRWVJkc1dLR2lMUlVjWFNZSHJHYUZ1Q0dHb2FVOStsTGYyQ0RjV3dlcTZmSURhU0RMbUU4VVcyMkh3L2QrYmxoVlBvdTF4bTZUMVZmaXhHQWR5Tkp3cVBqY2ZWV2xOSitVUnNjR0pHMngwcGI2dG4vQ2Y2K0RLNjlzakw4Wm9DSlJYay9xUTc1WmtLSjZvTmVxZzVnZWxyNG5vRFpVZE02MnlnampkSFlSd0FiKzdmY3BxK1pHa0VDcWh1VWVUNjJUUXIxYUhGM2NjdDF5T3pDc1BMUlBpbi80VEtrOTVkVCtGa2xPbDdqdERnNS84dk52OUFjcEpKWkF0SDY2ZmE4MzA0S0p5ZlpKaU5Nd1NTOHp2R0hFcGZjVjRibmhGSmFvRjRmNHJ4aXJGNUY4M3JvODV0UWl0MDhudDhvMjYxeG9wdG1qbjA5d0h0OHB3aHovU1R5cXZHU1hkYmxYNlgwVVh5UUI0WXVLaUhPNUZhbUNDYjhibWhKWFFQMWxqaW5QcURqNUZ5NHovcE9Ed3VEcjZzNW0zTk5PcEJQYjJLZkZVUE9MNitRVTNkYThwUGhqY1ArQ3F1NGhZVG1ySyt2ellkbU5tbWt0OHVzZitZbElHYWlYZ0o5OTJ2VGczbFE4WmVJdnNLUEhRWUVvVHJmTHNNNm43N1BmdFBPeUF3YmhvOTV4ejRNcEhtVFJyWkZxaC9VSDhsNk5yTDNTNXNzcTl6ZGc1STN6RllFYVMrclBtVm84ZEZiZnljVW02UEtpMjhOTG5IdWNEbVZ0QjlSOFpSbVFSTE1jc1YzcW9KbUora21mbVpmU2k2S3lqS2FoblA4eWYrMEpIYU1tSzJIcnJROU85WE5vU2phdWxSUmFKRktiZFJlbkZjM0xzRm9ZaUhTYTZHUEtUTTZHQ1RCbjN1VkpCRXNzQTdRTTJBcDE1K3dxUFNRdUV5OGNROG9YMzIyZzUwL1orTkgxRGwycXd4K05hK3BOYUhQNU1yb3ZqS0NvK0FZeFpYbnpDemVnblZ0STVpU0VkZnVYR0lMNzhGQ1ZaNmp3eWRrcGpSRVUvWVVCNzQvY0lSa0tmYVlhUzYzV21QSTRqSFNucjJuT2FVNUNobDIzQXdhRGpMT1NOYTdBN0FIa3FnYkZpbk9teCtYaTZBeGtXY3YrZjVyT1dHUGVjYnJBL2xDdHI2R3lXOWRuMTVOYmFKMUtLNnNSZ1RTMk93aGFzU21CSEJTNVhrUjBDang1NnBEUXVNSSsxem81Qjhkc283eGtKMDEvVUM1dWRQTnBkZmdaaU1vYUlqTmhzMFVuNGpRTDhTaXlWbzZMd3J3WkRPbHRCeXJmQStUczdFaytMbmJqQWJGeFlrQ2QwbkdSWDdTTWlKTUpER1hGUzFlSkZFd3BPSFdub2ZDM2J6SERobmFpb3llYXpxbTdaOE5OeFNnUWlUWTRPaENkK0VDMWZmMHcwSW5mMWlSUjRmaGNoV1gvUHllbVh3bW90Rlc0OHhHd3ZVREo5Vit4dWU5TytEa1luVFc0Qkc1TmxISTlUYjZnTDNNRUJ1UlRCREZ2bDBxbGVzVHlpWHlGZHN4bmdkaUZ5LzRveGZwZXdlNWZmalRUaTVFQUR0eXM4bEVsT0lrTUhrem15WG5SRll4T0FsZWt3V3B3VStBT01FOFlacWRZcFdvYlNqWkt2ODNRTk4xbGVHajYyNmw1YmI2RWxXcGRsUlcrcVdwQXpuaFJYcEt0a1hKaUdHUTVJWVRwSkYxN3l5Sk9SeEgxejRmei93a3pScUxVTFljV0lwd0RMNkVqU2gvblZYQ0VqWDJ3bk1DcE93dksyRGhDRy9kL0hNTTVjYk43OGxocDZzWG5pV3FoT2Zrc3YxRzRsTmRrVDRUcnpmSHpXMStHVDFYNjhRUjVZNFJPZnVzcFZlak9Ick9vSG5WUkRQVmROeUNOa005UER5eHhUOHZGTXV5SVB5Q0MvbDRQR0RxL3FKKzVlS0JlZFREUzlJRlVYVDVHdTVka01GYi9WR1RkcEYwTmZQZ2VCN3JLRC9yU3J4QmlCUnBUeXFzM0hucGl1M0xUS0cySzA1VEwrUTd6S3BkSUc3NGNreFp6NEwwNWdXdlMzOCtiSFk3bGFzMllVZ1pEeXpSbkhDRVZ2QW5hL1QrelNlYys4aWVlU1dpVU1SZjNNSTltM2xpMm1jUjRWaUtqYllMSDNpdkhsQUYyUUtITEo0a1RMeEVGVTZiU2ZnZGJveFBjc2tBUmZWbml3aGk0N0h2Um1RcjNOTGtsdzBpaHU0WGc3ZENCb2kzcStjSFVRS3dhbjUrUkV1SFhiZFovSzdBKzltYU9wR3Z2bU45Unpad3I2eERhQU1sYTNlSlBNd3c1and5cHA3SHhndWpOb2hvNnRsZ1RoQjJRSUVPV0hyYTJKck1sNHpOV3B4S3dIb203RE5wNElZVFpyQnh0dHpCTG1udjJ5RzBHYWI4UGhFTWFBZzk4dDZBelhveWpqL1QzMnRUZTAzSDFIWHlWMlVOUk1KWjhya2UxQ3JKM1hsRTJUQVBUaXVsZi9lMFpkMWRiQ0xhd3dsbXZDd2NmajU1Vi9jQk45NzBpMERHdFordXExbjZjbFVzMTZFR1Y5RG5nUDgrQm4vcVdZa2M4SXhyNDdwR2VtSTVLWFRCMWZ6RFphTWhWV1RsZVFnalV4ek56YTFrQVBCcHQremZ5Wi8wa3p6c09jMTY3SUV6STV1SUNRVk1rMmZ1dEVNUTFWSDBjQk1SNDBtUjdjRzR2SmdWY1N3Z0V4U3RySHpXYjlacDlxTWVoMWJBWkhTRnB6WjliY3ZBNmdKV215cVREVXdocTA4d0pvZkZsc0dNK3ZjazNNaDRGeU1JczNHbFg3aWtjdVNNWmhWdGdWSW5LdHRpWVlteHFSeXd4U0pNdklaamwwelZMdUhRMzN3VHZldU5LZ3l3NU9BUHdNMnljK2FzaDJ6UzFjdG1hSDNmaU1ZMVExT2wrdXgzcVpFMmQya3BvU1NLTjNlWGNCUzhTZGhKUjgzSmlIOGVTNmpZdjUyV0FURXEyeUFVNFF1WVovTjVSd3E2dnIrUmtoSytHY0lYaXNtb2pRdlAzY3pnbUNWUGkzSVZ2YU5kcHBOY3hHNk9LV3RvM1ArTDh0ZE5wMWU5VjIrT2YvRDM5b0NuNWFBUG1iQWdOd05jL0tCZkxPa2NZaHI2MVRNR1htS2FMRVpEN2ZJdUxsNC9NOGxBYk44dzNvWVg2NHk3Yy9lSVl1NlAzUzVUbURIU0lnRDQzbURNWmMrR3dqc0ZwS2U3Tm5OdCtFMldGTkxlRzhWYlFTSHBKZWNvcTZLbkcvMzdMOENINHUxU1ZQcXRQcjZOVkhuTzFGR0o5ZnZaMnpSZm9YQ1kwUWpRejhDVitjUzJxczJPcnZ6amdaZEtpbUdYMEdVL1psUFVzQ2MrTWxjb3lTRzBmNnk0NktiT0Y1NGNobW15RXFwbWF4TXdYaW9LSVd0YVdRYTFnMVhHVURuU3JiLzE4SjVJZFhOaHAzdHA0VzBBYmRuTjNqQXpWcThFTWRLSjh6YWUwQlBDV3Rpemllc1RwWWg5dlhrUXFKcW44TDBlZFlKengxSkY2UzVla0FsTld1OFZCQUJrYVNlbDdNRVo3T1ZRSmZZQkVXaEZZMnhPc3NiK2x0TXdManhPMmt3M0VDcWJITDJDNXNwQUhLb04xQTJZdy9abDJDRHRzN3FGTGd1dW9LMEtheG5BS21lMUJYdSthcWFjZlpHN2VPZ1pKRW5rT2VRWWR5QWpRcDV2UnpTSnh2MzhPRmZwWm83bk1Rak1uOUdjNC96L21YamliTE5KL2lTVDE4VDdZblJrUy8zMXQwUmh6SjZnMWwyNnNicVBQVVgyTlBCb1J3VFR5Ym1hVll6RnRWOWdod29jWGxwVVdacEUzZ1dkcEFsU0h0d3BjVXpuL1JLbSsrNVpYbm1qaVY3Z2dqbWV2UzR2alYzRlF0MU5EejJsNWFNVTRnMzhKa2dVbUZicnppQ0wyblJndGl2NUxpbG1mS3NsRTdZdXNDc0VVeUN2QzdYZGVJUlc1WG9vbEh4YWprTGZmaS9tVTlWQVhNbDJocFVneC9ObEU4OHQ1UWo0dUNTcE5SRk5rZDY3R3FiZzFWaWE4S2tQc2pRcnJCc1prRzI1MXF5U0dpSlJsOHlla1ppSEU2Mjd0S2FDUFVNbzRlOHN6d3FzNnBnYmJBa2YvTU1wNUw0eVJvMUlFUC9OZ0FuTlUrNWpQOGtMWDFtdEFQYjBiSW42eTRyckV1a0h0NmVmd2RSMnZlSW8rMDRpdGN3RWRGZDJxamM0TXdjcTB4Z1MzR2tPazhScHdrbnFubkdLQnN4YUk0M2pkYUlMb3haempBMU02a3Q0cWNoK1d3VXExd0pWT0RxVzNRNVdDYitkWVVoYXB1YnZDNndqSGt2eHF4cU5Bd1NrbExSVXpINXZzeHQwN09CdUVkSHFzVVYyZ0RPb1V5YWMwVVdld3RDNDhPaGlvTW55Q1ZKOWlUVkFpbzF3UUU2VXRvYVZaUHhzcVVFd01Hbjg5WXlIQ2VPMHR3cHRYeUNyVTQ4UkNPUlgxWGs5M05RUmRoVTZRWm1DSnZjK1pzd0NOcDlXVG4xUG9nYzAvNDRWSm9qaiszYXZmZGZuUnhsZlhLaHZkaFo2T3pRYVJ0aFR2UlkyM3VFWEhja01HWTNVUmpjS2pzMFRNeFloR2d5NjdWSWliMWRoYXNkbGRVU0cwZmxiaThKMUdDTElxOWFNeEZMK09zMjYreGsrWnJyVURyYUZXN2kzREZvN1N5d2VsSDMrcjhUNExPbGM4anh3K1FLYnN5dFY2ZVRWTEFUaFE1cFZUa01mQVVnZ1F3YTBLQVNaVlVhekdTZEcraUJaQTNwOHFhM0tIS3I5aklma3BuVE9HN2lXNmw5OVJZek1MdSsvVE5WcU1iSVA0NHVqTGJDUXRXb0h0RUV4b3ZBY0RHdFBmODI2Y2wwdHFFMldERUZqazZuS09YcjRoYkdXR3YwY1lYVjc1b0hocXhwb2dwMzg5dnZaVEZCUGpBT0U5aWx6TnhPNWZyV0tTMW1zTlJDUDhjcXhia29rZjFIVlNHeDlKM1VOdE1ZV1IxUTNZMWtZeXdmMllLRWpaN1lISGtWYm1Yc3RGdWNKblZRUys2eURDNU1hTjh3ZUVNWjVyNEdPclNBd2pWZ3FJMnU1eVdvWk5scHM2TXJSRFJUbElOTFZpRjJOazlKcUptbTJtb00xdVZHb1pMZ2gxcEFNZ0dBS1YxaFliWTAyUzhPWTlhcnpPOVVuS0sxa2VJdnZKQkxJNHpyd1pBZkxjM2IyQjFJcHNxS25hMkFTSnl3a3QybFhJTUh0MnNCL0lmVGZDWHVIenhBYitkOURsQWRPOHkwUHdnRlFtbUFVRGhJWTFkL3h0Qmh4bVpDdlNmYkxrcExNaElSeDRlYWRBN3dtV2k0MkdDTDFRclpDQUdJRmxmUjRpRk5ZUE5QRUtvMy9xK0U5SFhhb0dJSnFQOGpLUDZXVFJtdzB2b0poMHlJTTdCSENXSHpEUGwra3FnUHRRY2pObDdCenJQQVRJSTRBTTJ5RGxHWDJueW5XYzRWanFnbHVOT0pWanpVSmc3SVhzV3NUckJ6aU1zanYwc3Nrb3RDWks1MVlmV2daNU9jeEhTM2hEUi9uejFvdCsxMGxzeEhsVldtTFNsYWVoR1Q5cGg5LzZzeHdiQWp3bE96ZjlVRXhEYklBOWg2UmhzSFIwZVp0Qk5lWHpWTCs5ZTlYY21EV0lSNDhhbHJJY0daN0gwNW5JdFNMMHpxcjIyWWZmdVA5VnJXeC9NQlZFOUpSOW0rV1lxNDNvNUkyNGhrUkViTzNtSWhpa1Ayd3BBR00wRmNGKzRiekRLNUh4dUxXS0w1bDY3QzBUYUp3LzZPRVRtL0VyK2RMQjJQM0FqMVJudkVMalJPaGI2K25ZUHlzbXppZ0NwcHJqMTE2TW9UbHlwMGRNUWZPclNsSXgzOGtTTzMyRFFHbTNkdVQxSC8zMDM1YzFlOEh0a3BOUHJFZSt0UjJ1ZXdLc0M4T0NwUFJEZGZuR3B0RkhCYk56QU5SWFBsT2FhdHFuSUtRMVJ3cytKWXFkQVducjhkUkdQcjEyMUY4aEJKQmo2Z0pIVnZ0TTZxV0QxbDczTStkYTEyam1CQWpVMHhaU2RqNGRVNXFFR1hsMTYrTFFOOGQ1K0VTSFVXNWgySmE1azdsU3p3OG55WjZrWkN5Z1RKVWFoR1dQdyt1Y29sSm9xclZCbDZpdnZmYlVaams2aUZNY1k5RExtSFh6NTNlNDhvWWdTOTNuelQvL0RGRUVwcUUyOHhHM2xISWY5OHpBa0huRWxNRmNiQ2F0WEhKdGNDTDA3UE5mNElON0RGekxJWGRDb1poUWxReEovVU5jNlczVEVVbGpqelNwWldZclZWQnR2OFpRNnZyV2FkZW5TT3ZGdkJNL1RHUktZeUdoWmNaUXkxSGtjQ3BVLzBIWEh3aCtuNzBzbUpCclNGeVU0UU9OWmV3SmJla29VM1VETTV5MWZ6QVg0bGlZeDBRSG5FOCtta2hLaUpmb2UwV3c3bjBhbU96RDRxZWJkRlVOcXp1cWlPMWdCcDhNdHBFbWVzZ0VCa1huZEgyRlRmNmJYWm5OU2IxWWlKWDFjUFBoWU9NbmNpK3VSQlNKYUVZMnplTWI3dnhyemVmdGlYVTRTZjZlMWtzNENVeitkNFBtTzNuMWZVakxtbm1hUXZJaE9jRnZlSEdSZi9NZUk4K05yMWxnL3JPQkJvVEtmdnVSZElpT29pRmJwMlM4c3hZVmRiSzVMbzA2WnB1Z0dGMThwY1psM2MwZGFpTHdCR1hSbk5VbGs0QUpBNitlY0JaNWxQTW1MU1lDRTNmMUZaS1loOERneFN5akRQSmZGb3lBTjJuTFF0UDZJSkFJK3hpakN2MTBFQXRONXlLTkFTSlg1Yk95WTNIL1BxL3ZoSEk4VzRvNjNiVFZ5SVdZRTd5RlVnTkVBcHFWVVNyT1ZpUllXbkc2c0hUMDFsaElKQnZvOTJJZHlVSXhPcGo4UTU4TFVOby8xT1VKUEQvSTIzTGZCV2QxdVBMUGtBNGJFNUpEeXY5a3VIRWYxYlBDeWFDeC93TitidzVxb0hhZU5IeldhbVo2NUJzcnd0bkxTMGNPemZvYkUrUEZHdHlLSTIwODBnMjRjcERrUDJ4c0xRT2tIMHVVNzBPdkN4VGsvbVAyWGFDV3RtVXhzZG0zcXkyenoxckxUS1VSbXZFME4yRUZUbnFkU3hxbHh5K1JPUXkwOUhVUG8xWnlGeERTSDZFR3dzdUJFU0hVN3IwbmhoMjNwalp3UGN5aDY4Mmp5SnZIaGE0S1R2RWp5ZDdUYkRUcWdqYnplT1MvVmtHTzQ0Z091K3Qzd2N3YUZsTWRYMkRtMEppcEQ0dHE2K0FyS0xROFlsY2V0OC9zaEZVVlZCWlIyVHFPeHVQYlBlT2hrNVBZMnhsdDVvK0doZnVNNm42UmdmSGxqQXlyUTl5RGFVWkpVRGM0TDJ0VEZEMTJzaTU4UW13Q2NUd1c5K04yTmwzVENlaTk3VmVTdW9IY3lCY2w4ekJWOEQybGhpa3JwY3lURUpuYVV3dmtWdDhVTG13aUx0RWtJU1d0Mk5qTlNuSTV5c01QYm5Ha2pmenJ1Y1VnMjlDbDJtTHRPaTc5OXl0M3dpaE14cGFRNDUzY2JZMlR4cWpidjQ4eUFiSWtqRmRqekNBSHl0bGtyWFVEcWlaZnFGRTdsUVZjdm1SNWd5bzdiQUVlWUdRNWVSNWRDMUROQXNqL1lPQlMrSmd6VTg4VzB5QWhCME05UEhLRVcyU085c2RWZklKTklBaHZ1SWE1VWxuQmxDVnZPSWhaSkxaWXVFaHJCK1htNnlkd29DME54OGlGcERLeEY5dnlQeUx5V1BFcXJHY0FidjlzSUMzWWs3cWI2YnlCVC9xYU1mSHJDOCtvNFExb2FUY1J1QmNsUTdtbXROVnQ0V1loSk1OLzFnNGpOR3d6UDdQR3NKUU83MFNwdGhkNHIzbm5aaDhKeXRBLzlyc2RPUDMreHF4cFJMRDUvR096MkhZanMyMWRJUUlHZzMvbUhqakF4aDQ2RVp2bXR0SW9jUUlaUzB0V2JUaTM0SCtqQ1IvV0hBOHRkUWk1WDZuVXd5K01TYkVFbEVBK29qOEtIVmU5ejRiSlQ5a0xBVUExaWhXZmNoeURzUlBOOXp4Y1QzaFRaNWVaY3E3QTRwUW94ZzFOUHE2a3NDcFZ1bDVldnZJZjNnMVIrVVZlNndGSHdUUURWMzVWM2p0Yyt0dW9sb1JFb284MmNrU0h3WDVkN053blBaOHVlSzBKdHRKOUx3cTJsdDNKT3U4OUQ5ZFFFWTF5UGFsWXl3VGZQdFRIakJwMGZSdUlwcDR0V2VQRkNrcDBZNjgzK3dVVE9yNHAxd2g5RGlPTDNFRnNFWXRKS3BTalpGdklST3JnYVFCMHUxZW03Qzlmd2xTd3pLZVZJTzR3SlBTZXk5T2lpeWFyUittc0laL0pjTWVlL1FVZTh0bmNNOEtnT3NjQTZ2TzMxMStBSmVqcHI4bkRNZnArcWprc1R0WXhqUkhhRWc0RkwwbHJ3TnlrM3FUTjdUa0JKNytFWXVhRm5BWU95N0xib2VhcVV2UzNRRGcwU09aM0Q0Y2JjV0FTb0JMV05MVyswaVFTdFREL2JwMHVRdU1rbzltaHQ4OWR6dWRUNG9HN093b1Roa0s1TkFiM1Z1K2NUS0YwYUgvc0xmbm45ODlFK3NmRVp2RVRTV3Q1a3UwRk5RWGFOY1pJOXVwbWp2YURDNWdUNGlaVlh0UzF4SzFRRWc2U08vTmVMeWNpeXhVR1M2ZTBrM2FzMTJNdFFtdk9mSFFGSGdCenZMY1FGNEVxTkxadTZwU3V0cWsvMGFtaXJSMjdyNlliZmEwcTJTamRybi9GZU05NXVEb2ZyYWZQUWY3c3V5WURmNzh4bzNycVNudHhPUW5nWFRCNFpDbW9RVlltdnR3OUZqaFlSRkhzSGl3TVdydlB2Sm9MUWNzamlTRzNMK1h2bWg4MVdRNnZENEhjRGtzcWV4Y0FmeXRxYTRZcVFSbFVCZ2JTaDZVWm1QaXdMdlVRMENqTGtRSjBnVXlyVVNwQ3Uya1RxczE3ZFZJeTFIL2JXQWRDRUpkems1dnd3cmNkNndDeTAyQTNDZWpDdnd4R09LZDFWZ3RHd1phK1RkQTJTSGVmbjQvb3YwaU1aRm16TnRJWFJFQTNmdnlocEZrS2gvNmJuUlZsQzB3eTlTUkhXMm1pRWs2YXY0eFFaMzNMWUZTNDJWbzM4QkxGTHJEUWZUcWtpTzJ4STdUbmt4cmUwd0hMMXNjeEpQSEhpQ1NVRzBhSEVVNXlxbEp5cEZTR0VOb0puSm9SNTZBMHBxWjJuVjVidml5NEkvSmZWTmw2WVZ3UFVXcS9sMmZ5QTY1ZUNkVW5LL1JJUEdjNDRpeGdqdHN6djZZZFdpYy9kcFZlc1FFVlkzM3orUzJ2S1UzL04xUmVGdG1GRE4vWGtnakpWV1pwTzVpeFpBK2ZHT2h2R0ZkUVUrb0R5aEJzRXljS1RmcU8wanZMVzMvMmk2RGk5MFErQXB6VjJ4WGVUUW1veDR1RndsQnh2N1NocFJSWlYwZFVpYUVxdkI5ckRCa2d6OGIzMmh2bk50UnY1dUY4SUhDNVBSdDVtUzRBK29Mc3d1K0Z6WUtNT0MwdnFtMmt1dG1UYkZSY1Z0Wm4vbUN2Z3U3WEJSQlJSeWV6aUZnbnloYmJpNmE2WDRmYWdWYjV3Q0FqQWFOeDZZVEdMdEFpMnBURnZSOERVYmtHV240Z0l0MWxIb0VFZ21jMU9uaFkxU0lxZ2g0QUZXMHB4NmxvazBMSnUvdUI1VllmeHVuRWVsamltcHJoUkFqSGp6Z0pWQkRpdzV2d0x1VVY5OTZPRmw2OC93QmVyREhDWkU1VnY5MXovVEtqc0I4M1N1am5TalhXTWFnbERFMzNNK0lYQ2thWmJ1S2p0L2xvWUl3YzdrWnQ1N0xQSTd4Um9sbm0wWHJUOHlOdlBqRlhXQkRKV2tYc3E3R0FSbFMwcVRIdFk1VFZvQVkyZCs4Uk85YlFzb2hnRFZ1dHI3QmFPcTMrMVcwNzFNem05RVBPM1FjTUNEWjNhQzJkaXppSytIQTEwdjQyYkxGT0daNnd6WDE1TWN4UjFtM3FrdFA2SDJnZDBmcVBSNWkxYnRhMC9uaWhsTEh1alFNSGdxWWlYSVBzd2ZVemRuRFVPYVFwRURPeUxpdGN6bFVUOHpnNmp6dUx2RzlhUzExZGxmc1NCZmp3M1MxMTRGb1EwbENuYkh3QWx3Sm95MmY0ZXpsY3Y4eVJqMWdqSVk4ZEx4cEVNTDBiYWFkd1R5TEJwOXkrNHAySDY5a1JNcy9LQnZyU3ZYZ0RPMWFldGIvVm1ldXF4cXpjVVB1OXk4RXhobXpqWTNBejBiMTMrRU82QVpDNnFpbTZhK0J0TXk0cmwwN1NyUzlrazlza3hociswTEttamVrRlc1VmRkZW1mZ1Rpcno3MnIxSFRRdnY4NnhtSmpVU3NVa0NVdk92Z3dkQ2JBRFVIQVMxbzR6UllNK2EzblU3Vit4VzVHTEpQRlg0c05Eak14czdlODlOMzBSS3RiaitWQ0NCekY2dDJSOFlHei9CcldwSDN0VkxGbkpXSmRsdnpGQUlOa0dDc0Fhb1R2SlVjVWxJZlZaaCtQbWQ1OWNnbmkxbHhEY0xLb1Nva2NienBEY1hLclk4SURMcWZxYkNrSnRxRmkwdmxobTVtc2dLSVZSQWJrOXQ1T3BURXk5QTR3dHc3MWtUTE0wdW0ybXM4dVJHL3VuRitvRnFXUk9NTU5IVGtnVVdUNTdpNnpvcjFWSEtYZFFaemNSWFQrMjY4NDFFRzZ3bkMzOEE2SVZDS1FWdjNpelJlSlpKdVNGR3Y4TnhXYVlOYmFNaUc2QzJWRXZSMmEzTjlUR1YwK0puQ1E5dmxtLzNvVHhaQ0J4ME9Yc09vOElxM1J0bXFFYWxFL2RmRWt3dVIzT2JqRU1ySmtuaWtZbGsxeWlJeU1LVERNS2U0WXc4N29FMnpqcmo2RndqNjhseG5MN1laaEZFMktUK0JlZWxnRWg0SmNzWXVqOGpEb0ZhZEw2c3ZQb3E3NktVcVIrQlZVaEdia2ExK2cxd0JFdFM3R29KN0Z1d2tuS2luZnB3UVQ2UWJCL3VSNlgvQmN6QkhudmFwaWdMQ1h4N0hCZDE0Y2szNTN5RTdBaFlXZ1dHQjBINGRZYW9NVVFFNGRXU3ZxYWE4d3hRZkdsMVRVdlBYKzN1TFJQcVRNODJLV04zWVRXNzc0QTlUaGY2Nzk4MGc1YlZnRE1EdG9SOGs0V1JvaGsrR1dCZGdmZ1hoaCtjR2xXUlpPK3ZnNGp3SVNKcGZmNWNvY1N6U1p3N0xkTDQrRE90SXJBUjA1R1o4SkF1YjRjUjdvNDE1dzk4ajJvVDc5eVFIM2RPdDdiOUdhQTFyMnpiRlRWSWJSL3N6K3JHaHd5WmxlTjRyMlltTE9iYVExcDl0N1NxUkpuR1plWFZFRVQ3Z0ZpdlNsMU55RnA5ZUJEc2xlSFVmMis5eXNZeTVPWDdiMW5ta3FpejZpdzFWOHFjbnVabS9CaVA4SDVTYm9taVArazJMdGc5aHpFTEY2N1JUNDdtT0ZxZnFaazNNanovTTBBOWx3dVNVZlN3Qlh3M1d4aFVUK3dPaTF1TFIwZTBzejV5dmordWFDOXRHemR0a2ozTVlVZE1kZkdUTG0va2lSb2w0NkRSelpydGVna1lSOVB6TWxIUjBNOFdQMndudnpNYXV6alpNRmxybm5hd1REaVVQN2FSa0svWno3NW5NQkt1T0FWMlpBY2JpaGtQZnNTU2FHRDNabmE0U2orUVFRUTdPZzNzK3Vpenp1L2lnY1lUclJmaS9nWHRBZWdRbjlXaFBtVFA1aFo4MzBiWmxLTk5RUXZPbzhOcFZHbnJZTFJteUhuWmFCMytvOHNWeDF4bER5dzBZbTBQOXJmOUhJdGtDTEl1bEs4UzJCUmRnTDRVOFhHaVJCSFFlK1h6QmdtTDVOcFB0TGkxZWdFaDdacjVRNlg3Z3dXUUNsOW85ajFFRzFWUHpEekd2djh0QmVLOGx1ZXJScjRzUHU1aG91NitBei9EVjNJRkFtSDlTeDk5K2hZYjJtTmhnZlFYdGsvQjF6NU5PTk00bnBmWXdHR09ReTRpVUVSNW9MMlFSMGJSRmJXQ2lpVVhnWWxLOGM5SnAxZ0g5RmltNVlRQmFCVmFyVnYwdmduRHNqbnh1Y2pVMmRhVWtFQlBjZHkyc2NBTDNFb3cxSENMeW5BQzYwQUlmdCtkMGpvMEV2ZTUzSms4dnY1Q3dWZ2ZVSmlBcHBIMzN2aUpVNFVURGNaU0ozcnNlVkpENk9pd3VtVFZ6aThiTElNRGpLZ2hxTlpDN2F2MjVYQkh0R0VPNUFOcWUyR0JGeGNLYzlUZ0NKajF4T2pic210Zk8vcE5VLzFpNWZZZitFT1dQSk1sZmRHVjkrelZwL3hiN1haMEtxWld4L25DRUJPZkQ3VnlYSGxvVnUrRFNTcVVtNFFKbFkrMk9oSG1tUlI5cytHMEhPd2IwSTRVZkRCZGFtb0NiM2pGTlVtdHgyajhISktESWNJV3pBWGo5ODczbWpjeHI0eHZVcnVoYUZXZFpiS0QvL2dEVjNFd29aenkzVUNucUEwTVhsaXpEU0V1NG82bzVUU3hJQjIwQjhPdnA4L25KUCtnNjBhbCtoU2RpMnFMaE12aUNpNFhhWjRCUGZJMkd3ZGRwdnFUc1lIcTRVbDJPZDlMUllheUo3M2ZKend6ODlDMWhqVGkzaGdSTTFwNmNJTHNWQ3RMS3U5N1lRL29MYklJRGVrTm4vWXhPUUx6QjBnZU1hYWR0aER4dm9kazFkWDdrd1hKVHd0Z1VxQ081c0FjTERGQjlBSjNycldpMmZ4ZDBJL0NKK2RXM0ovY01GN3ZsSTJURkQwaGtuUUVnOEJ5dW02bGgvaEJBd3VlaEc1bDZ2c0M2YTlrQVVIanQyUEhOMjgzK3c1YkZyZDd0VGFtaVNHbk1KaFBVT21lYzhtK0pvaHBzK1RQbzdEQXRETGxiN1JRL2FNVVBEeHlqUmVTVlBEaUovbU1USWxHbk5icUZHYVZZT0hQRnl1bWh1Y3A3dVpkS2hIL2NJM1MzdGh0T2ljTGlYaWNhdkFZY3h6blZTTDhvYkt4ZEMwcFJKNUFEdENUNnBGNG9LRnU4TSs2Q1ByZHpZYnl2WGtsb2h1NWxpaUNpY2NvbzFNN0lKSGsvczZlZVJrRWhMYW9lbTJLL1VUdWF6eEpXR3JJZGpVN3dLcStZZGd1dlpkRDZDQ0JzMnE4TG5vbmxzRTFEOUpnZzJ4SmtGTUxCRFFpR0QrVXh5VE0wamZORkhBWWljaGtXSCtKL3hMQjgrR0R0dm00cTdtNFBDLzFKMDJJMVU4TWhoVU9xcXg0NFNBald3SWhWUVNKMjI5dG4xNkJuUTFFM2owakI0aFhVczFmV1Ivc3MwTDh1QzdBSlBqU1ZCcWJsRFJLV2pMZDJhK1VKdisvODUxTkpUZldUT1FuT0xIdmR1aTBWdGFGb1ZNbXpGOGt5ekFESHBnRHA4aU01MEpFbm95RU1VTFJTdFp3QTdiTk1KUkxJelRBWTZqamVXNEM1Mi9ieWVOOTVTdWtLSGtaTVh2OTFCYlhZQWliTm9IQmFaaFRFeTVibkRrdm1VSk1UUS91WW5YMUtDWkhZUTdyMjdRWDNCNVovNjFzVThDVTVTeGFzQ2pib0ltV3IreXFjZ3RidnlKRFQ3VjU0QzNWMUJmbTQ3TmIxRC9zZEpxamJ2cmtrSjgxNUs2TEZhdmlmSklwbDBFaXp6UzNEV21UUVFDVkdTSU5ncWMwdHlGKzg3SkxvS3lrYk9Od0pybGEyYk5RRDN1ajI1Y2NBVHQ3S1Nra0Q2QXRxd3Q3OTBmOFlLdW9rWlNqYmdhTGF2N1FCWnJiSkhveE9CUSt0d3pTRVp1akVYcHZhUThNbWI3dXQwTEMyckp2dmpiSW1LZmNHaTNEazJCWWgxaXUrWFJ3SGV1aHJacEhVOUlzVGtlUmZlcFdmS29ORUx4T0loR1Q4cldDNDNVZ0hMOXJGMllpcENSR0tqamFTSTlBc3BtZlc5SDY5UHAxTEswSHJRVDBwQ2RsQmwyZHByV3hyaE12Y2gwTUFCd0pocGRKelBWc1NCVXgvTFJaTVZhSmtzMGhReFZMOFVFdUZDcmx3NkdRajhHNnpjMjJLV1RST3J4S3FDV3o5dVAzSHZiQ280QTA2NFJpY1NVdEduelpOYjN4L0xzdCs2Wk5ja3FEMWJwb2xnMXp4TkhzcW4rK3dmWnd3Q2VzZDA3aS8xYkRNSzUxRnJrSFJXelJTQi9aS3B1T1dMREc2TTdwRVdoaFRrYXNGYXRoZFpFU1Nnck1xVExoWTArUmlkT0FzZHNLcmp2MHhVZkNPdUJYRFUrd0lVeDREUTFITHdoaTllRkhFNUJ6UGlyVVVYUDV1ZTc2VGlCUHBMbWRvQm1qb2g0STd5MkpnZWRxVERTSDBQbFo1ZzdWZzdsR3o4RHVybkl5bXFsVkQyRndPNFRNQVlGU0pJZDI2WExUNUpqUFpsZHNjWktKY0JaVWp5VXRQZTkrVlVKQTNzVGo0K3Fwa0srTkUweThmSEM2Y2o5SEpIOVhCRDROMXdmTzE2MEtQR2cvQ0hGNElvNFlaVEdXMUdhVll3WEJJR2kzaHR1Y1h0VzBEUlhRWFM4d3l1Q1pFMitVZi9XTVl0ckt6Z0kvZEtVRzBtMXZ4cVQ3ZTAxc09mTGdvODlmRVljUDZRR1hkb21OWHF5SHJqdzA5RjRUUk9KY0J5ZUx3dnF4TlZISml1dUMrV09mSURTTENVY3JLc1ZuSi91NnpSdHFHNjVPcy9obkNwVDBWYno0cGRMQllIMlVJby8yalhJYnFjM0dnOWhlaHV4VjF2ZGNtTlBJeUVxWVYxT0kxVjRrQTRhYjRUbWdWNUtPR3N1Uy9mNXh4dHl4NVQwQzQ1Q3AydGJXbkRENEZ3cDU4YjRTR1o1UEVuMHNFemlKYi9CT3VjNzFaQ3cveExzWjU1VGlRWDFRRmNjK0lBSFlwempWaDBNZzA1NFRLVzgwaHEveGZIVENPaFRGTTBhYUJibWRnTTB4OWU0bVk5UXR0Nk5aaVQxRGVIaXEzT09lbGJsc3BSY3JPSnl6Z3pEajlPbjZ1WXNWZTVpUndxZW16RjdTYmJodHpEbzlieG5iQUVueHJobERzSUJXZ3BQbUF1WU5wY1Q4bDNneGRtQ3IrRnNQVWZJZVVZZHV2MlBYcWZxNE5FdU9iZEVWMytQeEpFWTQxNWdSMHYyYXhOSWlqZjl2OTJ4Q0FWV2tPcjdGZDUvWW04b3ptZ2pSblJ3RVF0bkVYY2EzdnRnWlQybXI3MzI2bU5EYlkyZS9vaVlvOFp2dU8zOHIxMjFra3laVWwzbWxsNVVGOXhKN1hhNmNrWFJoK0tyYUZUZ0svN0crVnZvSHA0cE9lcUhFSG56dnpTN3ZkcnBWSHNuY1ptQVlINU5CYzlCT2JJRis2QW1aY2hZUjN4NHRndW5RRzMveTFrc24wOXIyaU9idGJqSjdWTGhWTUIrdEV4WlRmRE9IbFhKVHNDYVJhbnUwUzhvQ3Y4ZUFqeFcxeE80K21ndDVMajBWSHp1QTBqazJrM0hmVFpud1dnSEFQbVYweFlaK2p6K2ZqTWtJbFBHOWFmMkxqdm1OOVJFZjlLNWRwZ2V2S3ZpNUJRWUpIS2JWaWZRYTBjRHVRaDRML1N5QTZjTU9rNGZleUhNYktBeFdsb2ZxTEU0aVpCTW5HL3h4RWVnVFppRUw2Zm9zMkVNQTliSkFYT25WdWRLaHR0RWxsNlkzb0x1Y0V4eVpZQ3VyVXVqQ3VmL2crSUxiQWlpdkkwVWVSbTZvSDJUcnVBRm1paXFOMVV1Wml5KzhmTUd5Mi9vRi9vYVJSOGtiK01ORWZ6UVFVbmZTWG9JQkh0Ylh6UXRXR1BVZzFPTCtXVVY2UTBTN0RSK1pkdXBTYUNkQVowWG52Y1ErYWM1alBKYWE2UzI5d244U2M4TmwrakJJTHQwRk5hSG41MHROL2lDRFpxcVgxVk5lWjViVjdySDR0WEtNN2FHTjJScThvaXJiVTdvMzdNTmpDdlQxenlRZXpRU1ZDTlFGOXo1a08wdXZNd3lCaWJTVGVMVHlVeEVJdFJmamI5dll3eHJIZ3ZrK0gyWnhDN0F5dVFYMlJ1TllqWXVtYjJLbTM2TUpCaXFOTGxkZTNGMDNYMjQ5anovdHE0UlJEazNIbmh6dkpOUHNJMitPSDgrbnVuMjRBQ3lQTWVEN2c4UzBUbmIrbVdPK2xHaC9wR3ZiTmI1aWdxcVA0Z1Z2SGdKSFRFSGpSZzM5QmxPS3AyTGthUlpLaHhmUU1WRkY5Q1pTNTM2aVhicFRibCtFOFdzZFlQZ1ZkQjdkZkw3cGwycEhucVFHd1hxeCtQZzllYU1hcFBKMncxcFA0c3NlRHE5RjFPVHZ1QnN6Smdya0RFUHRQQytjUGloYVNGRnVSUDBKaENIQkoxeEZrZHVaSHZGd2x4NC9ndllPa3djSU13NjliL0FZRDZlRnhkN1F4NDRTVUJVOVVnT0JCTUV1d2ZKcG9kS1NsU2JoOGNCQVBKZ0R6RWYyYjBqcldVd3B5cW1ubWg2UVZXM05TOUI2WE9QdldLUXhRc09ZMll1cHNwdjI2ekwvRE4vM3JxNzJ6Wjl1VVhHSGlwMHM5ZnlqN2VZSm8zZ0htSGs1OTQ0Q25WaEJuWHRIWFYreUttQ1RYQmxJQlZqUWVaelhzTlRwQnFsQlMwMTI3a2YyTHFlT2VTYmxyaHJLMHExUzRBNHFEWlgvMXNrR0tkWDNiRCtsamtNUGt1SVUwNVVobTlyaHRQSGdtTmdFeGtocmlIOHd2UkFzOGFzOGFlQWdESU1VM2dYWGxnemFJeXNLamRJbXFOTUFUdUIrZWNsWUdqam5DWCtLTmVrK2V5VUpvallUN0p4ZVVoMDUxMjh0Q1IyQnVRK0h5bThVaW5SZ3A4V2hBSDZsaEVJTm9FUjFpbStIeUIza3dPMkdnNklwRXZ2RHBhL24rRCtuM1M0SXdURUIzdFNxWXVWUmNadFdiY1ZpbytHakxjNnVIb1hTRTEvbDBSekFlUnplOWNlZml3c1BWSUUwV2RvUjExSnltWERudlFqM0R0QVNrQ2E1QjQ1RklrUUQ3NHBHRjJGMU9HOUxValdTS2I1ZG10cE1uNU5CWE9jMDVKSSthS1dLMHpHTHBsVXVJR0hlQUJUellFMC9VQmFyV1pPWjJJTWs0OVM0aUkrZmtjQW1zTE5DVXMvQ2RRSWxvblIvdmlKYkRqM2oyQUJRR3ZURk10YzF5MytNa096RUtJNy9vTG93MHp6VTV1Y3ppVnoxOVdvMVpETXBRUjNFM0tXQmpGZUlpWUFyQk00V1hXWVpPOEUrc3U0NXBKUXdRc3NjcFlNdjBRenk3U1FVeHdFdzlhcHZyMTV4RXFwem5PbTFRY3FHcXB0dVdBRUFodDhzRnZQL04yblVNM0tpSC9VMFJ4OHhPaTA2a0ZMbURLcnppN3pOVndyOEtaUEQ4K2lsVlZ1Zm5OL3NWUzdsVkVJeUNJOTBxL0xEVmNOZHpCdU4xNitDRnB2blBjNllCTk45KzdWcWREd3ZWZ2dFWnk2ZmZSU2t1VWZhcUhYZ3FJWWVYQUNTZHVKWmJMRkRrSDRoNi9iL1NNUDJmaTFIM2h5eXYwVk1jWHBzcXRDanVlQy9qcTlGTmdyYmJLSXFIK255c3NwclJwNkRlaDdnRktGOXVodUFveWdqVWg0ZkhMQnBndTJvMjl2SWZIUTV1OEV0YWRWTVVveWMrNGFia1hiTmNwaFBOY05SeWk2RVZqMjZYUStEZmY3OFI0Nm1QREpubWFRSVk5UVZyQVZqS0xaR21RVDRHR3RGY1MvMnhqS05ocGU4Qmg5QVpBdHV3d1dTTnJIUEZhdHFHLzV5K3JkWXFvekhzcVo5enFkbTJXN0tIaDV0eUpneE1waEI4MDd5MXEveWNyZVhDSVNieGdLbEphbkxGUVc4UzlqLzdUS3pRekRLR21uVHpuYUFYMDFGdW9GMGhjVGZ1YTRsRnIrTDlQQkdneVVFNGdSblF3M3RJeTcwQUVoRHpkVndWSWR0d082RUN6ZXBySlIrcmlZeEg2VTdOY3h5OThzMFJWRWdpanl4T1oveDJhVTlxaE0yMENHWUtTK25rbXkvUVV3Wng2bjFwMVJ6L2pnRzZ2WTlsTk5rMGlGR212RTB6MU56NVI0amRZVUhrT3dEdHhHMEMvQWNnL085aUVkci9qQXJjMTc0UUhqdHFYeVp6YkR5bjlQVnlDbENWYWNtVjdISitUdzdiL0s3cDdHcGxHR28xbnFzNEhzQjN6TndKTW53NUhFRkUyV2lwczdiVFVCQ1R0TGJvVjZZL0xUS0ZrY3dZNU0xeDEvR0lFbU5SS2pVQVVnVTRZYStzeUxQN2RpL0ExcUpCSFMwNlZRMVQ2aW82dzVyQWY3VVVZWFBzWjFOQ3VMdGxLazlqR1ZCNXhpRTlCNGwrL0g5dDRVVG1YWHNlQ1BxRVoveXZ1dVhYYnBndjM0MWZndUxVTDVCeXdwUytrMkVyaVVZenUzb0NZNUV2WXNXZDhqMVlrVXNNWXF3TGs4eDZMbG1VRGxiWnN1Q1d5NWhmbkE1TmhWNDFRMnRNdlk4d1ExNHZDV2VoaEVNaDlzYWxWWUsrVjZwQUlzdUF3Nmd2YTRKdll1N3hMdFFFaTB3OGpnMDAvREVMZVFWeDV1T2p6cGhFWUE3S1BNV3Bjak5VU0lBUWVJWWpEY29MNTFndFVOZFJtNlVIMWNTOFVKSmZhVmZwOSttVE9GTUVyeldQWFZNdC85MVpwSzM3U1JneXdMc3VoeUtMbk5YendGb1llemZMc3BnQmwyZ3A1L0dZNWRLenN5U2VvNzRzQVNXbDlMS2RyT2M5UExGUmMyaklNTXJtR3gzNjFvV2ZYYW9jdnkxajVWQ25OR2o1dDkrZDBPd3E0SVB4dHhpVlE2U1k3Slg1dUhvVUdodzRLZGR5WGt6dU1hbCtlZHk3V1hmN2w2TGtubis2cDZ6MCtic0pkM3ZzcHNjV3dXUEZpVGMvcU45Z2U1U1FVdDBKeVBLdjErS2NDbHQ4dEozU243MytpcmRNT2lhaGM0UUN4Y3ZDN0ZFZGlQVU1LWGFWVzdJNStLNmI4eGtFL2l0bk1GSDBzZ0loSzRQYXZ2dmFtbDFkTlNMTUNndTZ5R0lNVG5wNW9vNkQwS3I2Z3BVMlUwenA0ODVzWCtrK0Y4QklrMy9wczZCUFJ0YW9ZVGVUQVR2ZlR5RXRsOGxGbGFXUTNzdm5vY2l3MElBVzhQV2FjT0lUejRuUmhucDBhSlI0V1duNVR0MitwaXZXMUZ5OE5sNWNSTElSalFMNWtVOW1ha056Wk9BYjJRUDl0UVRZaWpvMzBid1VDczdXWWo3NXdLUmVFY1BYWW90YjY5QjBUQWtSVEt3bloyazZ2UWRiKzJmZzJHZVJqMjBvU203eXllNy8vRVp1YTVodDRjc3Q0UG8xMUxtb1MxYm5RaVM1VU96Q2NoSDJYandMcklIbHI3YldBeTcwMW1qcE1xZ1JZOXVzcURSUGJSZjF5WVB1RkFHOCtDSzlmUjUzTkNIUVRpMWt4OFhHL1JXSGdxRVZXOGUyQ2ZGY3ViRngySWRHM2FVejgxK1U3dHM3VGpVVUhESWx1TW1HNkxhb1FaN1ZhYlFGUlkwVXFDK0ZINVpmWjNYM1AyM2lSUHFMdnYwTDhxUmMrM0JRVE52eXlXRmh0c2FQazMvTlJzQkFaZjRLS1pwbGZKc2c4R3FKdlMzemw5VStDVXo1QVY5ejdNNzhvemF1dFlTcGlFS0dlMlJ4SEV3b1pGS1lrRkVsak1OMHQ3NWxpNFFqYUg5Nk53T2NEa25rVjduU0kwaGxhNEpDK1dLL2ZmcjY1ait2UmdQSkxRbWxQTytrSzBxVHR0cVNCUTM5L2V0TzhNckhPTFlCeGgxT1JPdmZobzhOMVFYNllnOUtkVERVQlFkSldmcmhNMGYzdjhhaGQ5NDFCdWlZT2tuZVdTN0Jici9CZktXSXlZdnBKaEk0VXJnNVhHaVR5Y0VJZzMvbWNCSUt0RDlxbEx1Uko4UGlSQnYzN1I5ZnJOREt1bkR5YXpLVnhaUW9JMmZxeElCRFg2Zk4vVG01T2FyeElnY1NFWGpVVFZjU3dqNWs2MThLQ2dYM3R3Und2eUtFK05ucW1TRnZTNHZVdC9Vemlnc2Z4QkhxQVovenAyZ1hTUllyRDMwTTYxTUdLeklWM1YxZDgxN0h2YVlyVEVCb21TTVoybHp3M2llWlVyZVVmSmsxdG9iZENEK3pubG9ZNFJJaVJ5Z1dVQUVKbkJGMVdVRm5QbnJEYzY1eUV1K0R3cUZpS2ovSk8zZXBMUWd0ZzZzVFpKamgxclMwRGN6TllYcy91Mks0aDVCdkN3eDJ4OEZWbEtjcEF6SXFKSzVUR2d1R2Q5TVFIZlBIWGdhVDYvY2xVZ29JN2JiNHJLUFA5NERKL0tPK01oaS9ySlQ3SnhNMTZGNWRobzBwTHZadkxHUkdaSGtRRVB2OU4yWTVxTVdtYkR0UW1YYmFlMFVqd1ozT2Riak0yakZadTdnRHpISTVPaGxSd1lTT2VZZXpLUXdrd3IzTEhpN2xVQlhUMlp4VUN4ZmxNN3NxSzVPTjZQSGdFTnZLNVNLbkE1K0U1WktEVDBXUlpFMjA0RmJXTnBYYnNTMGNublJMV0ZsRmZkek5BTk1VQzVrSDJSRWRTaHhEMWpXTTI0ODRJS2RoVndIUFV2a2QxT1QyTGlKQldYaFpmUVRSZHlaM1BmUEZmRWxlK21sU3VpUTRFZVQ3SElEdzhTNmxhSm0yZTcwc2psMjNhYUlobk9NbU1OemJubVpyRzNMVXpsWUtlbHpySUtVN3l2QW9xbTFuYzVuSStyR0NsejVRakF0aFhucmtqbEN5NGkxZnR4SFVQMjU1bE1lbFF5Yk8vZEhtam94USs5YTNaZGpSQzI4ZGxNOGZDTmpLVmJCOHU0dlRwTy82ektqb2tVYTNCdkxwdktTMStNN2dnU3R3YURHZXRGcG9LUnRPMDhnYVBkQTZXME54K1RIaUhCT2FPbzd6V0E2c1d5d1YreVRTbi9PUU5ReGM5N1p4a2RDanYyTDJTVjUzYmlEMnhPZDhoU0FDQ0o0ZUlWZnJkK2k5d2JLcGcxNHJZdFZHcFZmdW9SdDBGek84QmdBQkZ3QnRlRVl1ZUJRQWF2OUJFaFJzLzJ3aGhQSG5kWGxxSzRlOFp3emFnY3pNdzRVUVVXb3o5MklxaFQwbjhCalBQTWFrMExjS2lYUjV5Vkw4SUZtVi95Rkx2SHlvSlBSZjdlSmJEV1FEc3oxMVdxQ25ZdkJEUUhIRmQ4WUlITmFXeWhtbzl3UkFGNjRRWHpxdkwvZzM0cGxnZlpqOUZkYWI4YW5UMkdicEZSVmtuUnljVzZFMFdQVlpoL2MyZS9hRjVrSzUyVzgrWlQ2UWNOWGtFTnBNcDJzYTJ3a1lDYzF0dDhpSFhEMldnOXF1RTRHcTZucmlId0ZFeE5STlVXREtiamc5N29lSk9RNHVXcmwvN3ZPaGNTOXRIQS9RMEljaXZjTTBrNXBSaWxaUG5JWkRld1JsNzRTZ1NMc3dkMDFUQWU5bFhnVFBncGFOWjdpampKdkg4c3ljVEYxQngrOVVmZ1k3Z2hPS0svSnplMDU0NFppalorZ3BmSGNtUkJBdE5hZW9jNXNFT1ZNeHV4SWI5WGx5bUVwQXVQNXdZZjFkV21oRG9SblpyRUNEaSs5U3ArR0R6cHFxYVkzMGgrZUVSRWNjY1Z4SFVSWXRhcUs3MHFtQktNbUEzVDRDVUF6WndvMXJaeGZHekprdXlkNXAzV09yTndHVnA4bE1rUVVpQWQ4R1hhTTRpbGRKa1J4VVB0TVQrSU5mWXJjL2c5WWV4S21IY09Ic0FTQ1RIUE8rcGVMbnc1N0Y0WVd3TjZVZ1FaMWhNVnlmY0FwL3pnUVBiSEJrY0hoV3AweVhtNEhNdTJmYkJ5VmQzak9HMUgvZU41QVdNYjFacDA5ZjI3aHZINTU3Uy9YdnF4eWdWWnF3RGRKMlV0Ymk4TFYwMXZKRHVnWGt6OUQva2FYWmtYeEtxOVBDa3ZlWkZlOThVVjJPeGNxUmYva1VMbkpLODMrMEpOSlVBTkZWck9Wb3k5QTl6VjEzVXErbjNSTWtFZ2VhWEUreC9MRDB4WXZvVUQ5VVpuM1dIbFhjaWJwVkdzZWdtdVZyRzZvOUd2cjlNNDE3WG5tYWxaTFExWVpZL1JiV1h1OHhjRlRNR3ZDNktRVk1peXhLVDF2Q1ZDRHlqL1JCSTBMS0xEVjM0Y3gxamRiUTRkMFZYcjhJLzVRaUhUakVlNE82ZDVCZkV3MHVLQzVTQ2tDRmtoM2xyQjI4ako3K3VUT2N6ZUZXblR0MjJVSGYrcEhBS2xicm1YaUhEUTBCa1pLYUZlWDkwVXhnVFRFVU1FMFVNbTNxSzBCUDdjZENTVUtIUTl4bWdoZG1xamlIcDFlZFV3K0hrYjJueVpCL1dNUzdTaW8xUFNzZ21HaWU2S2Y5M2V4ZDhtdnhTckJEOWl4ektZK0tiTUNVRFFQMVMvdXdhT0pubWYxZGNESkFESDlrVGE1WHhpa2JZY1hvcUpEbGYyUE1CUG1ub0ZXaEcwa2VpbmVkMkxiNHNnbFBtZEF4eE9tS2pqUDVVTkN2T0xiQWVMLzFKYk0xMlpZeTF0OGxCZGNMSlZSeWIxeW5yQUlDSTdnNGFYTHQ3QWR2Z1MzOG8wMmg2d3p6WnV2Ylg4d0ZYY210UnRQa3VGNTdQR2F1QmlaOUgyUEJxUjI4eEJSamF3aWsyQkYwU1dEdUhodDFRMVJoZXFRNnJHM3FvMkIwN0lFaEdMQ3NmeFR2Y01VbStNRFlkOE5BK1ZJOUc0M0VuZlh5Vi8yUE03R0JtZU9FYWMwN3dhN1p4WHRuTWdzOU9MTXNhWUk0Qzd6ZTBCUzFucXRRSWZRS2VYbE11dUpJNVdJRGxDaVJuZGNjSktpVkhISWJEWVlocTJOdHZJQUJLV0hJVCtPL2YrRGNkaklMREh3bW1mM3lIUmJsR0pscThVNUNWald3ZWkrMWJCbm91M3NQVWU2R25XOW52ZVpoaWRFVE1BT1ZwTllMYlUwZWMrOHpKdnNFUWdoTDlvMmVhaEtacmc3amJSaExvMnFQeWUxaklUZUZEVGUxQUgvQlZMYlliY0I3a3BUbVh1bmdEclRIVHI2djluNXdyZk5OSjlmOEZHWmJsYVZKRG5XTExxSklRTnZzRzRSL3M3WTd4bk9ZOVg0UXpkUmRzZ1JhS3JBVHY3TnZYZWFIYnJKS1FGUFRHUHBzcU8rTTZvU3R5WUFWWVNEemhkczd2dElyckJGNTh6V1o0WmVQR20xTTcxT3ZVeFdBR011OXVqaG1jdmNXa1FtbFhqZmVBQW90TmwvOGdYNUdQT2h5SmN6dlMvc0J5QU9MaWJRTlVObHpjNExraCtoN3NYck9WWm12bGlaU2hEMFF6UGNKU0NDRmN5M29scklqQWU0QkRadHlrM1hLOWlPelFxYzk3bmNqYzB4SXJkYzUrN2tKZElDd0wwcThRNnNveFpScDhaOTREbEEwTkFBdS9waCtJT3dkYUg0WVlmUFJSYVBTN2V0QTRxdjBhSGNTWUtRVkpsZExrRDBmRS8yV0ZpZUd3T0pPcHNwNWRZRGlGZE5oQ0pnMERUdC9Bc1p2NkZTNlUyTGN0SWJmTnBCU0xhanJ0c0JpUTFtUEhlYnplTlg1TjEwTEVSTnJSd2VSOU5FQk55aWlTckJ3QjBvaVRFM3QrZ1MrcHZ4a0FwczI5M3pYTmNpSGJMWlRhcFRldURXdldmcUhzYlVGL21wQVl5WlVhV3NkdFhQbk53Zy84aFJIL2ZkNTN4WDV6Z2pWK3ZwbVpQYk5pSjJJYWk2dU1jRlMxQXhTLzFBd2h5cW5TWUVKZVFrV1JGb0FUNEJENHN6WU1VS1lCU04xbDlZVjYxcVoyVXlvQlJHemtBa3o0aDdIWHZQdm0zNTdoNDRUTEpnY2toM2ZTVGc5S25PUExNSm5XV1diQUoxODREcThKRTQzQlNndmp6NElJVFlmQ1U2Rmg4QytVVGlzbFhLVXdHUE5CcDgzSzVzZmRRZEpEMXAwbUp1SVBIUnBwQm9TZTNJcm9acUhBbWxFREdOSVBFTm55NjFQV01HZUs2U2dQL2tHbUtXcWE4RzI0eEx2VG52eFZTeEhtQmFXWDVNUzZSMTc5ZTFiN1dLMm13VTNEcGZMMzgwNGZ5amNxT1FhVXBReUFjS0xqTUwyaDlWeHJxVG5LdUp6WXdNRlU5YXJqNlZyV1ZjSHVQV0VUUTlkaEg1bU0yMFkzMUM1N29kQVhuNm4raHo5NUw3V2cvd3dzNzE2OUpXZDJ3QzNlSHdPeGtTamI5b3hMQ2swMHBTTCtLOVF4V0tuQkkzazZJN2g0VGpEN1dTb1JDQzc4R2pTdmQ3aXZTbTQ0bkhjMXpDMFp4MFpjSEc3ekQvNGFxQ21KaW5aa3liRTlvNlVHRFR4VlF3cGRTcWtEL1F6SW5lVlV5dXB5c1JLNWVKRVdBdGFtOXY5MUg4NDk0bFIwT0hNU2xOSE5QcUpoTGs2ZEVuMVhUWjJYRU1PaUdEZng3eVpLN1hBZ3Ntelg2K1JBSFFuMUxKQUsrYkQ4NVlCdVI1Q1ZpdWYzRml3Z3RoZ0RyMTZ1ME5ZUFRGNVN5dkVXY2p3Rlp1c2ltNEc2TllERVhUd2ZQQjRrL1RFdkpBWTN5M2l1d0djOXk0VjJOdExRbUlSVC9qNk01WDlYWkc3M3ErM2t3ZHVoazVlK3ZGc1NReUsvcVRobDVkVk9DWi95em55TEpUQUt3RWhRdWdVTWVCc1NBVmNEbU04aG1JRkoraFEvdVdRc0gvZEJIT3hHVGlRcWpYZytSNEwwdmZYYkRuR0JLZFM2UlU0Ly9KMjM4dFR4NTBxa0grU08wMmtRUUs1T3ZhcUNzNTBXVy80WjdrSEtTVERMYU9xeXVEaGVPL2FBWm5JZktUQ1M4VzhFVWpDUUc3OW1INFhzY0JzRlNsbWl2ZExwalVFaEhxWC9CSHRNK2FXdzhwbEZGRE9wdmtSU1BWaUREVlZleDV6aXJnakRIRUt6ZDZjb3JHdmhBQTl3VjFkVEcwRlE5NFJheFZNZFJiSm1LeGlpRy95cnd6THdYWkVVZlkwVWJiWkovaU1jeW5ucFRZNWpkSUsyeVpscWtOaWhtS2N3L0w2MkJvWHFYbHFQUFdmVHJTd0lRaHE0Wmk4eVM0bGxDM1NjSGorQVhxSzZEeVBQQzlRR1ROOTlFSXp4dGdpSkNOZkt1NUppQkVWMnoyYkhMQTFVVVlabkVaRzhKYjFEZjlUclFOaEV2aUIzUlVRcmVFYXJmazJUdFNBZ1RGVU5pL2NNRjQyVzMraUU5ZVQ3Z3o4Wnpmbk9IMjJLSlBxUjFuOHFCb1dFQThUT0dweGFZOGFvcmV1Z2YxcHhNL2hVNURuMnNlZzNCLzZTTGx2RUlUMnJocy9kbmJhdElYdC9ibmwvSWRTVUZFeWd4MUV1bnJGZ01XcWQrRS9BT1A5VUc4VEQ3N092UnRMUHVMaWthaGFZVFJ1djhUb2dKaGlBa204N2pILzA5VnFUS2lsSW1RVHFub2NTZUVMV1pLSkZEbEt5UHFzNXJMY1pOTmZhRjJQS0hpTWIvUGx0Zi95V3UySUJtbUUzUUdsVXhTU1NTQkdWdkt2Q0EyNGFmNUcwemE2Ump3RTdaOEVqWk85OUQ2TEkwKzBBYnlxMjFsdktrYVh6b3RCUnVtdURDUUU2WWlNUXprVmwxakE0c2F5eldGQWJ3aWNiY0lMM0RmRzU5NHo2eUViQjBXcFZZZ0xlbGJ1QWIrOWRGNlRpT1h2enp2RnZoOEZVSlR0azI4QWtzZlIwaGZuMlp6Vm5KT0xHbUdOejAwZHV6Z25wR1RXeFZDQ2JwS3JaeC9RcHJzS1NMOGRMVlhnT3RsK0lXWDlmR3V0NVlnR1diSWc2Nlpyc2pDS3dHVEhreE44QVdiaUpjblIzNTRuOWlqRjJkMUF2cGVpeUM0R0NRRlA5S0VYWHlPVng5bVV3VHY3dTY5RWVsa0pzQ21wNGVXWmg3cVZZeU1OaDlKVnlYWEtWMjJUdnNqbkx3NkFJcGd3eC9kZEFONUM3L1dpTCtZRkhkMHR6TFhNbHF2MlRiSXIxU0k3VFVROURTdHI5M2dHWDZVSWpzalN6L29jY2Q5QXluamxmVUk3TzZTNTFsd2xaV3hVcGlqZ1FER1ZzRktYK2VIZWYvUDR2VE5NY1oxQXkvQnVRRmpzY3hhVjNYQkhTbkdhQ2VLaGlpcDh0UnFBcUpGYytYYkZCWmozSnQvN1NYcDVkd3FyaXg5U2QyVVZKL0FvT2ZwY3djY1g1WGVZcm5oVlRQbFBZZUxIS2ovRlVUOXplTzZGSUthaHdJdFNRS2RXRmhMU2NLWVBxbERnaDhUcHpERkxGWVg0cFo2dFpUVU96TjFTWXI4MDB0ZEZLTDVKU2pJOEtueGhSTjRsLzM5SGNPdHhYc3ErV2EyQ0w4eS9Xb1gzUSsxSStldjZxWEsrYnZmaGhUVzFmM1hIcWE2ejBGWDBJRTRTK0FWa1BYSlYxWVg2VFpuVlppa0JGMFZTVWJGTEhVbUxtYTBOZmxqU1lWUW9PUkw0NHdDV0hKY0YzNHN6Tkp1RnZvc013bGMva01hQmtaU3EyWkJzWHhERFExcndsbmJUTFliaWZiaVpUOVcwcHJ5ckNrRFovSWFqS2JhUVlHZkpqZjdiSk91WWR1VW9aeEZOVE80Qk5pdFlkRzJPREc0bEduWWROVmFPV1lCWjJMek5McTEvOUN6MFVXYlFpYlRXcE9JUGcyZkQzREVwMFN3ZEkveWdBUy9SZGltYWgxbG5tZ0ZKRzcybnova0ErQkdHeVJrRzN3aS9HL2NFcHQyMGNYZ3NXaTBPMmVIMDdmWlc4eThHU09rZkJ6QTJaRTJENTE5VmZYOVJQYzRYNTA3cm03VUlaNG9xa2FUTVd0U21WVXJja3VuMC8yc1JCMUVFbk5DckdqU2d2K2tvei8waUFTWVRMcmxvdGpJbmlkSTk0amUvS0lsY1lpMUMrQlZOWjUvUXVwNjNnQ1JFWFBSZzd2UGxhV2Z2WDl0TklvWFVSY1Erb1lzbmdOdVEybWRpZXQwUmp5enloVWtuNUlSYWZHU0hNelE1NmEyMUNYZ1BmYzByT21pOC8zNnFGbC9uaUlmV0NPR3N5YSt4UHRtL0FQTFo2UG1qVkduOFBibzRFQVNmSGFtM3BjM1FsSDZXMDQ2WE9jSGFDNUJSb09ONEhyWkx6UENkKzFrNEx5T0FyZy9LY3paWG1yMGFQWldkU3U5WklRQit6RXREZVFFSHc1eVVzd3lsVmRYenZsdEJWYlJ6M3FTWU9sWUxYUUV1cWwwdTVUZzZjMXo0WTVhenZvdzcvWm9TTjYydDRvU21wcXpodXRPMU1rN1ZuZjRGbHBiMWNEbzZOQWhPeUVUNmxZVjFkUVNVVW1QbHRCakJZYStadFFRLzBYOERUNmY1cC9CME0rK0RrY3dBbmo2VVFiZjhyVCtrWG1nR1M0RHlwbDFyQy94UU1JRDRBZWl1enYxREZUMHVUTTNpbXpHSEhTS1JRRWRDekR3aWNYR3lZR3hvQ1ZHVUk4cDU4K0JLbXhCWE55QWdwdG42cGxVc1lSQkV1SnZROUYyeVhQUkt1VXRxQk8zU1Qvek5zSGp2Q0tVQ0VrMHdHT2NIVnpFMGJvd3pxVzNoNHBxTTl2OUZrV0lpRFdMSklsSVNvbmpOcFhkbTIvZmFjd0F3TzNMTjBKc0QwN0NwWFFTSVNqVlkxTitUNHE2dExuSXNxMlVwVkpkZWFST3oyZDRNczU2MDUwZGlHTDRIL2ZwMFMzR3cyaHVTb05NN2lHYmFCbStzRFFiWDIzd0JSN1hIaGlNVWpJbFJyaHRHUzFJRi9wNFgvR0xSZXVQRFVGTklDeVRUOGwyb2FoenNQMWVoaFNsaWlpRG1YeHpWZnkyNkt2ci9kWHFqc0JYamZBWmZCSlVxOEp0dkFJcFcyQlppVlZLVzJWbkVpYXZBc3BBZ0cwcmdYQmNVK0Fjdkt1TmJ4REhQa1IrVWUrQTNhRkh4UGpyUEl0b3pvaFFNbW5vN3NXTCt0aHhQdFEyUDlXYWlYS0dKRHlUUG9LWmwrS0JWam5uNi83d3NBSmVIUWdQUVpQNmtXU3hUNWRxaFJXcDB4aHJvQStoendUdENFZzNaZFdFZi9oU01wc2xMM2VjdzJQQWJDM1J3RGg4bklqdnVUOWNDbXhEcEQvWG14OWhrN3o4eHE4Z1lQWHl3YjRwMDI0M0pISXdVcWs2Z3RZbXozSzRoejNkK0xXdlhYK0tqSWE4VkpXR1g3Q2pvc1dCcGNUdE5kQlJCeFhoMUhRRDdESXljbnI5NjM4NzlzUEhaMTR1WHAvM0VSWnMzZlltVTlqakEwWG9MeGpkOHhCRGJjaDUyek93bGdSTDN2YUtWZ1ZpY3lyMTNSenZWZUtaZ0Jqb1JGRmtOL05RcDFsQ09VTU9EOG1VRUVuQjBWcEx5N3ZlRCsrcDZKU3F5SzMzNHQyeVFJWEhhSHI4MlErZTdiSEh1NUFPVCtNMkd3UWRaUVpVVTZsa0w5d09RYlhPSnUzdEpPeXRLUFh4UWR2ZFB0Nml5bUw1SFkrTDMwNWtESlBYNG51ZUtsa3lLQXZwM201RVRaaklTV1NSdytoTHhHdFRBT0E3VjVGbE9zMnE2MXMrMmZkN2lHTUU5RGhpK1Z3aGFIU0hTZ1hzMXJjOGppQm5udzVkdFlzL0pobENFSy9pbk53cFF5c3M5NEJFQ2pqM09lQkJCblZnYVJUaGI1MHR4YjVDbFJFaDFDU2ZNWVFKMTk2NnlETzhDMkZsQzc4dm5Gb3g0d0hndktEZ3Q4MnhsUVpHbERYRTVsSDZKMVpRVVl2UjAwNUEvNGtWSFh1c3ZoRDNsQ0txUHZEZjJtUWZiUHprR0xRTXh4bVdLOUptNlU3WXpMdzUxY3RFaloxdCs5Q3dVQUsxa3BXZEZxRXZaa0Z2MVpXbm1XVnVMN09FazRDZHFvNm5lemZtN2M5R3VRUms0Ri91aExMSE5jQXhHaFplUVZ5b1VndUxKeElJUzFlVHRSWG1QNTRaV3FrV2JZMWw5RTc2NFRHbGxUK1BTempjTUh4Y3d0Y2JGWHZvYlFhZjNhTnZ2NHd2V0RGMG41U0ZwT1NxZVhRMjNBV3hNRDlSRDU4RUFFak10dzZVOFFLNkcvWG5aZkI5UDBoQWdlQTQ0VXU4QTJlMnNuMmtoSHozUUxmVk9iQXF1UkMrREkzekg2SlNZK2Y4Y3lCbk93ZnZOd2FDTVBaaUhGUTVWR1VvS01hRHk0MU16TWpZdzk1aG1NOEd1M1VVVEFFTXZZNUxxQmtNTkdUa0xHZWhQYTdKcExGMVJMaWd6ZzkwQ0NybGNDMGwwZ0NWd3dSaWU3ZEpaeUhVUXdGak1zUk9aR0xMUVo3eDU1OEJYeFJaUlVyUGNnbUgvcThwVHNWU2dDWU50TUxrMmpWV0p4RVZCNDRMUG41dVZkQ0ExQTlYaWdCSlZrR3BBQk9sd0swbkZGNWZxbUltN1NsSmpFejIrbktEa3pmMlhjVlUvTGlQVEJvZXZ2Q0EzcXV2ZVVDV0NBd1UwQTNYZHY0YVVRQ2oxVVJUaEc0TnNSWGVvNHZYL0sreTZ4RzIwMFJNeUk4VW5GZCt5bEwrY0RtU0xyTHRyL1BKaXN4ZEs2RDFQYXB1d1R0TEJScmdiMkEwZDdHTmhKYkZ5K28xTjcxNVN2Z0hGV0ZNa3U2ZC9oWG41V0RMRzBRZW0zMGVncnhjUGQ0aEJDRXlNYjZaSzh6dDBXRlVZaDNVSnpyaklXWEtoTlJCRTBpZk1MQXhjZE1QQUlIUmlrYlkyeFZ5YnFuNVh2TEp6V1k1N3N0UVA4TzVGOGNET2Z6cjd4NFBoaThjVnp5c1V1b0RmbUs5YWxqYUFUaTg2R0tIb08wZXpFSWt0MWR1V2c4M1p2dzVvV0xmWXIzanFNZms5U2F0bFl6MTIrTnE4WGdYWTRMelVBWWJPNWdkdHdraHdmWnQ2WDU5dTVhSzFZRWVRM1Z4K1ArQU1aNUJtTHFNc2pqQnZZTHVnQVJpTUhCdnI2Y3hnYkdQa3B2OExBVkhDZDVVY0sySE5jSTYvaXprTXVoY2dmR3pDeFNIKzNpZ3dpOHlGMnBoOTJzN2pWYi8ycFc3bFVjTVZyeXEvRkU4bHlUYWxCV0xIWmYrOERNc1hpdVc1cGtYSXRWTzBDTVZnT3g5NldraTBGK0k4M2JXMGJnRDhoR0dBMXRyYVRPcEJnY1g4eGxCVG91QWUzNzVPMStiVDlvTWFURTFZQnB4dHgvQm5EZEk3bTJ4ekI0V1B6Nm54VFZZRmZ0YWM2WE94QllyTFFNNTRNMXVEMU9QRzBpK3lpU0tENkE1cldMcjYwTWtYSGdBQ1Y2WlduMU9FQVF2N1dxRzB3WGl2NzBEMUQrMTk3c01MUS9MNGxUY3dGaTBBRG45NlVnY2ZVR0xGQjVKemlBblZjeEJ2am52OUpGT2pIQVMrbVBxQXBIdGFvblZjcjlqZktGaHlGNkVlYWFIbFVGWU9IVGIyRnpVZjhtN0dwYm1admN0SWRCazQreG9KaUY2NmNhTDdhb2kxNWc4RWlaUXNReG12T3k0V1JXU1NoK3c0djVtS2w1T3BkaXhKNUU3QjJsMnZ1UlY1bHYwVWJ2U0Zkdk12c20xUUJ5WS9pZEI0R29tS3VDVnBFM2VWZXFUT3Z2UE4wWWVPcjhzT0RNQVJvdmhvYng5a2tpdElLdVhWZmpWQXkrdkI4c2xvcWFCanJSMWhnUzdXU1dFZDU3N0lpTThlM2J6bDNmL3hNYnBjZkx3cEpBZ1VQRlZZMTBKMWRSMjZkeHFXRS8yMDNpQm1KSHFtS29tcmhNYzh4Y2kvSFY2NjI3bzlmcG1XcTJTc2F4YmZiTy9MZUs4bWF2enpYaHN3TEh3TnlXMDhhVCsrc3VIcWhRbTI2VVA5WGE3YkVaVktvb0NJS3BsWDY4RUdLOHFhUUZYSFhuMDhzQ3VSMyt4OHE0bjc3RS9yL1FTZ2I0dGJXKy85c2lGWitIQmtQZ29MMkVwaVdpV1Z1UmsxbTUyelQ4R00wS1JHU2JQOXJqODhnd2xlQmRHTG4vV2JOSDVBTUxma2lIczlmYmY1RTZQVDJJcTZXY1hEem1oV2VRNkpNdTlNMG94OHVxMWZtaDVvSTVnSlhuQUtjaFIxclY5dDUxUVNHQjJFcHlJemkydFFwTGhpclRqSVFCSG9ycGExMlBRZHBZdDhGVDM5QTF2eWFOSjN4a2VrM3BEV3g5ZWF0QnFWRDZBZzVscWhXdERBS2N1L09JbU9CRVZHb0laZVlEQmQxSGtsSGFDOG05VWpqbFdDZlFMbXlnTVhkbUVJRjhCZ3ZRbXBkTGd3NlRmelBGOVpWc3ZSaVpzUWhqZG8rRzhqeERnTzF4Ymk5SUg0ZEVWTVhWVG50dzhZQ1J0ZDk1cEduL2RrS0h6NnowZG1PTmJnQzhXdW4yVzlMN3BSeVJMTWc1M2RwU1NNTC9aR0tXMVgwNmJPUFR4SHBOYVVIQWNmK0hSUW1KTHJocUI3QTZ4U25ucHBLNlowQnlEM2QyVzMxWUVPbWtQN3lKVVUrRmczTGpkMlNFbjZKQ3Nmbk1qZzV4Vk0yL0NkcC9Wamc4RWJTa1orNGhqT0Z3dkR0U3pRNzMrU2oyZDR1VDk0cWQ0ME1uRzVDNTI1RnBnd2dlNDBiTGtlY3RmU0t6ZVk1Z1JESEFFWkVzRkVkWkpDYTM3WWJqZnJxSW5wWXNJYzVRNXRvK2NRL2Q0a040OGNrVTExQzBUYjN4MzhtNk5sbE1pUHJjWnhnTE1acmZJMCsyQ0ZiYXMyajUrY0NQS1BEMHZabDVld2RTMnVIUFkyM24xRFg2QzltZDlsaWFmVkh0eWp0Z3JsQVpYcTNnZ3BIY1AxZCs2NDZZSFpJQWJSSGdqNzVwYXNUYzVaY1pPWEliQkdiWit0T1VlL3EyU0svYmx2aVdjaEVjbG9kU2RYZUVsQmt3a1B2MFdTbHVMM3hwTGhXVFFuZ1VyVGVMUTRqNTRDMm41cytPQ05MN2JTNVNKbVNoZzFIUzFqenZXSEtRaTVqMnlndVI5QlE2RTRMSzd1eGNyZnF2RSthT3J3S0gyMWhNTkJCWFlXdXhMbElsSDhLU3QwbEd0akowQ0IrUForcko2UklDa3RDeU5YcVREME82UkhyOWFiclBwS285K0Qzbk1tTk03aXYvQmoySkdsbGNtcVZGQmZraDFudzlNUTZRS2l3dkdYWnl5YTZ6WVNMczZxelc4VGVnc0lMcTNTYUUzNmxBdXdzR29CamFmdFg1Q1Y0QTNJVVdGdGwvTTE1STVLK3lpMVJUYS9jaHBMVUdDMExtSk1sZ2pCK3BQaGhLbS9GblRtaTRMOS84NERnL1RsRGFvMitIeE1SSzF2K3pCaDdhdnk4STFXN1ZmdmczM01FNThwOHZTeE9nRER2RmY5cHl6NFRueUUyNkcvdEU2RDlDTWZKSmRKMDhleDQyajBTbHlNMXdQbWRxWG4wOUZvVmxSdmpOZFRIMUFDSjg5ZEw5NFhxRXN3d1lZZE54Z0pKREEwV3BjblNkNTFpSWY3SlA0bFNOeU1PVEx6dlYwZWtyek5XdE1WbWVJS3JTZlBSMVUwVnBzSVdMV3RPK0NhM2hmaXBmUGxJcTRka0tTcll2clFmV3VJTzFUdVdCNWRRRDRTeFhHam91SDFNRVA2dGwxNEpMWDloUFpYOTROWXp3OEE1TzZrTkpiUEZCOGVQbkpSbW1tSXYyeUhkc2x1MFdTOFh4emVqZlVQbEVjVkFTNFRSSys5QWlRTUkrVHFSYmhsNno5MHZtK2FmVzNPbWhjdFlVQldCQW95SzB3eVF4THVNdjZZRnJIRW5ZeWZLZk9UVVowZnFEOTQxcHphMGxoc1kvVE11RndoRWtzU095SitYK0J6VWpLZDFNRWExSVA5RnRYaGtEckJmRHlGMDhvaFR3VjBUQmYzR2RrUWQ0Um10OWwxY3NMU2hpOWdwQ29BRTZDcGVPbUtIV0loNlllNm5qYlBUaC9STGFEYituL2RmQllkUDJsRzlaVVhQeUpQK1dUMCthVzFQYVJ6MXpZQWNWUExtaitnU0VZaFNvQldhNy9heE41RDg5bldRWXN6d1VXenljSzdld1FEK0FoSEJQZEtOeVExRFFZdlVNaWVwRDcwcFBMY1R5NlYrSnBLai9xcWxSenVlRS84b09EMjhQNmRZR3pkTkthYXBweWRNTzBSNURyY1RFVFBHQ0M2aERCTk1kZ3FzeDd0Y0hzRUhlc0QwblA0WDFIajJhaWkzb0l1R01oemxNVWNQQ1Z3RVB2ZDNWL3hjalYxRnM0aW13Z3l5RVUwcE94SWthSDd0UmFnQWJNSjZyNkxRWUYxcS9tQnZyWFhoVEczUytYdk1PVnl2elhXWittRXdNZ1RZRDJRbWhpYjF3MktmNnpuVEV5UFg5dTF6dHFsMDBWNGp3ZjhNaEIwdHc3b3BoQldWWTJBcTlnNGFyYXlFNXJLQWY3cE1QMFdkYkZSWDA1UXorNjN6SUIzMldQRDVXRVBCR2k1TVNjbWZIUjZlTFd1RTFMQ2ZnR1I0Zi9YZGFBcmZ0cXcxSWFGWkFEdy9tWkwxU29zbWFZNFYxZDdtdmhCdE1RZCtuMVducnJRQzZxdW81SXhuY3pGRVZlbTJCckdTemlGV3ZhNmhtOEg1QjUwaWpraEdBUVNBTmN3cms4VHZWWWhJZmhueExyenIzNGlMVmxodFFnVENyekZzeFhUUzBrY2JseWNqM1Znd0djVHpwYUZUOTNGY3ljelI4MmZiZi9pRERSQzZxL3JqZDNDbmkxemRmbE8ya29OelNlQXA3aHlZczR3R1pkc0d4cUhmdEtPSkQ5SHRJQlphS2ZnMkp2TmxOcjNZTE5Kalh2WHMwMG12ejVzRkF2OUZjT2xlcGdEa0xSdlZCKy96cnp0WGJybFJuV1oxcUF2YUY1QmVPUUJBeEk5Z3RzWmVhUDFSc0doQVJXMkNGWnpzeG4yLy9rTGdvVG91cEFRRUFWZFpBUjdRTVpKUGVEcGVLazNFOW5TOFVORHZlc3N6S3BoNVhlUHFHK3UxQUZwS2FVMEo3RWZPR1I4TWNGYmQ3aHdZaVlJZnViS0JDaGx4QmhiUUlHenhvdDNWUDV4a3ZHMm9nVDB3amlRWUpmNVYxZDJWa2JGQzJhVlZQUmM0WGt0bG9xVG8yeG5leGlwQmZCK2FhZkFaZjZxNUErZ3U1MGZ6Ti8wdmZrckpGZUp0T1NEeG9wUDRpK29XUGY4ODI0TEo4ZHZNZitBTytxMmVxMjhGS3V5YWFobjBoRHRXUTJ2eXdyUWh6SStiSnZHR1RyRFZWbXMvTmw5akc5ci9KL2tBS3BYbnBkSTBxMEUwVk02RDYreHB3VFUyakVQaUx6OTNUNW1RQ1AyWnhtc0FnY0pFb1Jzd01YVkV5SGJxaFlPUTErRUc2OW5KRzJZOVhQVFJQL1YzYjZTV0o0dTg4cTJIUm5PZUw3QnE1Z0hwQ1NZOXZleHhXckl3YkNEWXpMT3J2Y3M5b1pMQnZZamtYMCtTY3kyT043aGVXUFR4dVVYS0lZdVhkRDE4MlFXSEM1Y1g5SjRsL1h0RTZ2YUNmU0ZEWW5hTUlrZGhoUGpic3E5dVFYWjZQYm5RYzJkdWlwbWlBQytzcWJnU3JNdEhUd05JVmx4T2FvYXdaenk5aURCVHNFTy9PWjcraWEvSkFtSGpXL1hjREJGTUhmZFJvakxXTi9CTU1yc3ljRXZOdWNCRGo4QWlVbWIxZjhobHJSVjczeEt0OW5ESkNwbXNGalpibDk5ZTZYd2RNejhPMEFiU2xseTNKL2h2alk2Sk1ORGk3SC9YaTZjUTg1TzlnTWNCTDlsRkNmcStNZUZUeEl5a3plTnhGcktjeUQ2MUs4V0Z5M0tONDB1K3VsTnNzTTZEWmRRWW1Ba09LeVh3Ym1sYzBHbXpCSVFqNnhtRVcxOXhuTnJXN2dGU05LZWowSmtxZWFXcW5hZ0E5T2s4QUd3SGR6emNZanBFQ1M3aWtwVnRteXN4VzNpVURVNXFzUEFsMWxaVld6U2ZaWVpMUEcwSFJKemoyYkRrQjh1YVIycFF4VXIrUFpRcHZYaHBzREFQT0xWT0dKYk9HbTlHWU9VYjJKNkNOSi8vTnlKM0ZQZ0xGa0ZWeEVWZGFqWE42eTNpc3JkbXhKWjRxNlNNY1BFdW5HNUkwM3RMRktpZFF2Ymt4NVBEYmNMeERBQTZ5M0JUMFpWL0lVdkorUy9sUXc5bDQ3djhzeFNSSG0yQnJxNURQa1B5L1hmYWRheis1V0pwalFVbXhIeXljUEpjUHBUdkVFY3ZrNXFIMjJSdHQ2aEdVSE9XcVlLY3B3OTFINDZsWFJIUkI2WUlxQjhhM3R2ZzhsUHdzaHY1S1hYZ1kzQ2poVjNvNjduL0dOSVAvMFZScHVYMytGTzBVNU9ZcjRXd1BQYStTZHhjdFlIN05RQjR0SjJDU2Zuck9ZM2piSHU1NlYwZDBKcVcvc0YwMlh3S3dXRlZudmxmbmNKVnJxSThzVUVyenhWcC9pMjVGRE5GSlYyOWtHMCtkcEFEQnpCdENKcGtsVDFLaExIZ0F3dXdMRXowRlRTaXc0M0RZSGpWMllQN3hzOWQxR0RTU0JLK0VDaTZtU2FPWnZiUDlVenhQN1hKY1F6WXFzei9nNm9nK0RDVDlybUJmbW5MUmJNUWFxdTRsY0lQZ0hPZTNUMVYwcmJZUG5zd2xvOTNsa2tlZSsybkswdEJ4c3NYTk1sbzRQVE0wbnJVRlo4eXowZ3hyT2hqVWgrc0hMVFdXT1pvRlVTVWdCYVJqMWJFRnJEbDVROEYwRGQyWDlDZnpVVFl3YUc4WWFPVU1OSWlBVXVyeFFKMGRGbit2ejhPTzdEYzRHT0VtcVo4cHFiT0dLT0RiSURJR2Z6MEIxdExKemFLNEY4eVEyRmFnUmF6a2ZrVmtkZXI2N2QycHladnhJekE0TjdFMVRyQUh6RmdUQndqdUY1SGVCbnBrTEhtbkczVEhsS1B5K1V2eVpZRVA4U3NLZy9pTS96cjB6UnFaT29WWWFIb2lZalAxbEZ5VTB3K3dpRk1UeXFKNmtvQWMwY0lVbnhpL1lkRW5icGwvNE1qQ3BGTENXRXJRdTlCODhlZktQSkhhZHo2OWlrODZQbDFzL0NqTDQ2TVYyL3orb1psMGlIZC9OVXpLRW85MklKbUZvQkpxWnA4aTJoanVVYmZIM204Qi9TWnRvOUY4QkNwb1Z5WDNtZ0MrdGlDRGRUTFN6TEJXUE5BUEU1TjRkYlBlKy95LzBOaDN2ZGRXVjd6U2lzTlBiSHE4dVoxR3hicXAveldMNGsxTDdsTU5pUFJuODdrbUJhOHV3cU90bFp5dVYxTldSdTVIa2RpWHRIanUyajR5SzJ1MkZINnJRT3EzaG5tZ0dFNkQzTzluK0xhNVVTNTRDZklUZDdnSDFVZlBtU3c3T3l6V0NzTlpqYlo1Z05yTVludE5BYVpHZWdBNVFxY3A4M1F1ZE9oT1hqdHFiUUFKclRUMFUrN2FRNk1WY08vZE03T3pUSTJzN1ErWHpnZnVHdUhwd3ZVWEhXT1kwYVNSclB4NVdMaHVSV05tenVmUHJuekU5SlIxMXFtOGMwWUhuRkRReThJZ3Y5MHN4U2czOHFJWnB6aE41VHhuQ0c4S2JZRUxENEMvTU1Va292TGc4b1ZqZnhZUURFVm9YcER6clhUNkdNczJrUnBnWVh1a1pBeStzNlN5TmZwQm5jQ3JCVW5BU2lRR2t4NmlVcWQzd2FPNmNXNGFNUjc0L3grSnROcjNaQmJXL3k3cUQxME01dXQ3YmYrcThyZW95blZ0UDhFdDN6Smp1em5hMW9lZWMzTnRsWWk4MlN6TnppdmxQWGR2YnlrcFZDMFJDS2VmSkVzTHlKTDZmOG5Ja1pqb3ErSUJFTHlQazdEK2NmZnFmbG1STS9aRDhEdmsraXpMWkFkVFZGbDljSzJQNE1PVXhKNkF2VHRkZHhHNmNhVlpSWE5SWkRiNUZPOWlNZXhTTmRKeiswMVN4eXF4WUh4bzNLc0Z4WHVwYUdLaWdZQ0M0MHowam50WGUrVVhRNUZtSlluZHE1ZHhTUTZueXRYQjhPU2Q4VjVCOGNPSFh6bFZDanozQ2ZnSEpJdUJ6cmlPRFhqMURhRnM1TGNSSkhFenBVRmpKR1BwOUFLVkhVcGJPRDV3dkFRbmNUdE1mdzlXTDk0azh6T0RTNDFqK3lSRlhpZlVWY0hzY1NwdmhJNzVKSGE3bUg2Y2tRZTJ6bEN3UUJtZDBjMnJLQkN2ZUcrWDJqUXN3WWtSUmFVREZjL25KYU8zZlYrWlYrRFBxYnh1bDA3OE1JRFdvVk5HUXh1R1I1VnhVOERwd1pnUTVaV1lHSUd5ZEpZOHJKTHRZdlBmTDJSQXB3cGUzNC9KbUJKZlN2RlBjUUYwaXVrYnl6eklud2Jwb3FSUDN6RDlvU2lvWWRPVGdsVmppczJtQmt6YUxmWDFtSmRlbzVFd0hYMmR6dEtoRzZTOC9vYkdUVzhlN2tETm9Hd0Z5UWVKNnpaNzQrcHNadG5nZHhxRE9ITm5acDd1UDVvZ05BajBheGc5NkN1MEhYallCNHBRTzB4MHNqaE50c0NLMUdOUU41ZTJCN2F2dlhqOUNBZ3NaOG9HZ0UrWFFwa0RZK2J0QzhzR08xeUFuazRNWmVSTHNOblV2NmlrMEszTnR4TVJ1UlpnYSs2YTdINExoaStwdUh4bUYxd0w0UVJ4UE12UnZCbEwxNlFEU3BHVzRuSWJyeW5acmkyZjAxTDRwV0NlNkpHRjc2SnQ1aFBBcnlvSVNzQjczTkkxT1huSXdaL1Q1VG16MEF6T1d2ZHNzZzlVUFNQUWR2aGUvOHBGYmVyb3RURnV2enRuM2ZYaVM5ZWpKNVRqWmFiVHdQRUVBeWNiU0xYdWRNUXRtcTYwV0Y1blI1YjR5bVRSRjQ1NlplM0RVRlBoRzRuN1NqbWFrVk9VczRLSjg0YzkxSTd2Y0NYT3ZVZ2NVMDJIaG9NOFpRd2ROQzIrYThnUEV3dm5XZ1ptcWsyMXhzalRoMDdlNmhPZloyck5iZHM1VHIxdWZmN0cwTVdaRlFic2M3VktKUmk1NTlzZFI3R2ZTVDRuWWZaWExmaDE1UnVyRGRlZUVNWURmUVg5OS9oUWh5Z2JrU0lFampoNW1jc2dzbW41eTJnNXkwU25md0ZrM0Y1eE5PQ1BzWk9sM0NVbTcwRGROKzdER1VGbFpVMEgyYTJWMm0rbG16YysyOEJkcFNZcGxGeDdzR3BXNllOYkFZMFBvVTlFMnFhS0hrdVZjM0NUTndxSUlRNnJWengxdFU5UFdUVnRMVGZWZG5kN0pwa0xONkppMHhIU1FkM1NrbjZFYlh0T3JQT3pjWHdoSnNnOE5qQkl4MTVqVjVZMCs1MEdDU1JoZUpZbnpWdXhReUJQcVJtb1RSekN2S0V4aW5ybDVaeWF0VjlpTHpySXE1NXplN1FJOUdTVktmZVJoV1RiRk03dk5MOGJYRGdSQWVSNm5sRW9KUkd0Z1NzK0Z0Z3VHRUpIS0lzdGIySllHN0RQei8renFCT0hJZ05Ubm12MkZra1o5b3VxSlNhUG5ZSnNWVkZVdjJmS2pJcmRITS9oQ0dsQ1R2U3BoSkI4d0RncjdzRVJ2VkFTZFM4SVoxZzhDYm45V00xdHdnOE9DR0ZUUHkyaS9kNWVYYzhIOFVOQndheHg0MmlUdzhORGg2Q2VpNkZSNCtjSHRXVS9zS2d0TzJJTmdWU1RrQjJscHFsak12OFBXUzEyTE9ZcE85QnRiaVRwRFBLckhmRFFtYWkrREZLREgvSlJNU2xJdktuSmJXOGU0TCtlQTB4SVFmVDREMzJERER6aUZ5M0FDT0ptTGtEbGF3dUxZanQrdmJPaDl4UXhxMWJ2TXdmQ0xHREhwaVVJT1Z3VHJIUk5nZE1nazZKN2JHM3FlamlSVGlEa3dTeEx3Tnp6ZTNJZFlhQXlSWE1OL3hZeHc5YlNDSTRpOVc3b1oxcHJGOHQwN3FtSDhTZGpMVm84OXBlTWFIZnZlTEUzcitLdDVTeDlYTnBXeFhPeHJleTI2eDRWZmhMcys4WnJvQ2VTMHZwR24vaXM0ZEZsbVhzS3VJWm9qcmI3enJpQVZDMnd2QUJYbDJmK050NHl5RkVzSnNCNjQ5MU11NERyakJtWTRUSlYyN0VVMWFMYUF5Y3VYZCt6dmZDQnEvNGs1bnNLZXlRNCtFLzh4bmJ0MlZFcDJScmNHVi8rMmU4QTVjOUlGblY3bHltelYrejU2TThnNE1NOFpCVVoxY2EvRkM1S2d5djVic3hwWk1XRlNLTDNhYnNxaUZ0YVVCckVLRCtNcGUwWnc0LytscDNnYjN4MVlYaGt5bHhYTTl0b2dtdGFQUUlQeEt5RDFGTHBiL3FzSVFHclRpTDdyNkZsWk9xdGRES1NKM1V6TVRZK2Y4cmJEMDV4VHkvaURyeW1aV1NlWnpFVmMzOGJ0cHQ5K3Q1NVVOWFZuOHNpSEVxV0dndS9nL21QcHJJcWc3NGtlZ2JwVklGTDdDdnBvMitVRExqTlFMVlJQT3dvNDRvNjRWeU8zaGRqOGFBNEQvMnRiSWswMHJBOGpsQW5BdzRoYnlwWWdveElhVUQ0RU1GNnJTZit5dVBpRExJVEtyS281VVg4OWpJUys0bFBTVUJJK0lxdEk4MWlxL1RSc0FpMWNXWndqQlBIWFRqZG1YUFVESDZ5djlyY0RaM0pBR202aGlYUmZQMXBRMDg5R01qVzQ1ZTFaL2VmeW1WbGhIVm9ZY0hRamxLUWtwM1kyNU92d1pVMGVKM2VybFdMQXQ1WmFlcEZCMmZKOFlaMzZFL2NDaFh5N0IrTTBzYzV1V2R3U1kzZHdad01qWmgvMS9iaDdydGNvbFIvRmNpTCtXOEtiLzhFRTVHR3grOTJvdVkxeU03eHo0bzhrOHNlTzhUNGVGQk5KNDh6SVRHb3M4OFVpalFYL0NyQnk4T3JKbVR6Ykx0QmNBUDZqY1R0UVBkcURLYWcvaHppbFY2Ykl6cThvOGErN3dLMjFlMU16ckhsVk5RNlYxVVJkZGZDUWx1clV5MVlkeVlRUmcwVTZ4b2k1TU10SVc1cHQ2bnpjMTdKdTBrNEJkblNVNVdwc0MrK2oyQjBIUUFFZ1F0OGRtaTdpaW82TzY3NGtza29wdTVCSGNqU3dOcUY5NTU0aTBhVGZ5MnVkOHozZU9TaGlZdmdGNTN2ZGwweHB5cUNBcU9tN3FZN1JHZVF4YUdSaW4vVjVtUnJJNXZmbC9ZWHN0T2lmWi9PZWQ5anY4bnhuRXhOWnNxTUVzUStnamdxdWhhZGR5ZUdlNGhzcTJGSmtUdy9pT2w1elU1NnRMWDlZMmRkQWJwd1FBL0xESzNaTVJrZC83WUQvOVd3ajJqTUMxWEhNczV6RTN0a3l5OFdqK0hHQ1JXTURXdjdvaXpad1BHSDRSSDFBNFdqVXQ4ZCtMK2hWT1p4NFN0NENMeEZ1ajZmWVBpeUxLVGMyelljSW1GeDdwWExBekxCSndiOGoxUVp4NkZZSGpJUWFtVDFEVlN0OWNyUlU2T2wybm8reExUNndwdGhxQ3o5cVNUWTlBNWRocFRqL3c3aW1BNDEyWmRzbStLcXlNTXNmZ0w4eFFJcDZ5SVdNQkNTMFN2T2l4RTIrZUpwalBnNm9wNTV2UzZKeGd0SmpPKzhJb1EzaE9pVmtlV2h2SUI4c1djTU5zNmpjSmJuQ2tOVE85V3BIdzZpWEhDdTBwTGhRQ0NQY1JwZTZzM1gzd3FTL3I3cUhLWW12OGFwQ1VRTDI3Skd6VEhoYXJnallBSDRDM1luZnlLTkZzc3dtVmxxZzE3VUR6TGJrRlFsRGJVNmdaRFcxTXdNeDRwQ29wcGswbUIyMTgveW44RkN6TTJ5VjlXenByTS9DdmpCRXBUdTBwd25VaDJ4b1kzZnJjcGtyUDl0VFVUdjdzM1JSU01Jdk0zaGI2c05EUzZHcjVFSDhmK3VmUjB5dkFUMVA4blczVER5Y2xlby9OSXFuU280TkN3Nnh3ZFFXK0NHemRuYzZSeENpcVJrTjEvUXl2aER4d1NhV1gwQm54M1pmZlNBdGNpaThhRlNoSThsU3ZuU0tOcHlHK0EySTJXbzNJVVJwdFlKUnQ3ZmhFdmI5cGdCQ21ob3JsWUlWcmNOVVJZTHg3RFAxRVM0cTdKRE1JQmQ1cjNGWEJ2cXNIWXJJWHhaa0JsWkxEV0xKRUlITWFuaFF3N0ZEUThIZHNrdkFOQXNwM29OamFYdVB3NWcyY1djNFF1M3c2WWhuTEhyeUJ1SmRvc29XVjMzNGVqckRMV3NSLzFrMmRqMnJ3aDIwYWc2N0xvNkcxSkRsYythS25FUmlVaHRLWG93TVFNWkJZOTF2ckZ4c2xGWjVOaWhrV0dnKzN0dzYyd1pYUE9FaFlxNVpEdmZZRHhOeFBIb0ZOc2E1U2UvME42SUFJR0gyN0IzTktGWFV4d2xsdEtwK1FUMUlUSEFYdnpQbVFnY0FNWWw4bkpENlh4SWlFbVpNejhEYVlISG5ZVXNJTzZ0eHcyWUxzWGVJM3NqWUgyR0FxSGVRUHNzNG1OUlZlckxEQTdZRytDYzU3MmtHdEJCdWtxek5EMVRxa29IcHRsVGozdjZ6Q2dQZ0V2MjNWQVZmSVVVOWViTGpIMVlsSkFkVnRGellEVkpETTdPT2NiOEdNU2pycDNTSkVsaDFHeHY2bU1iM0VKT0VYUlZmckphaE1CS1QyMkhWdTV0NFZsL2JEN1N0NDNkK3NnNXo2dUNyb2RxVTVnV2txWmxVQXRTdXptbzN5MFp1QXVlQjdubXVZb3Z5bllpQ2xiWmQ3L1NUVE5neks2U1BXZ1pRWGdYK21jMktiY3Q2QUZZdTE5bWxUdGUza0Q2T1JUZ1JtYUVVZUxPanFlWHdRa0U3aFNneFRIdFgrejUrODJRQWZKSEVwOFY3bFkzbnUwMjFURHlBMllmc21NaFM3ckdHRTl2b05ERi9GbldTSWZFQXloVVF5RUlORDR4K3AzWTFhMCsyN29sZHgvUXZBUmZhSUh6UHQyRXRvdGZITWJ2b29jWE83SDRRMHhPZ3VJTVJJbGVFRU93MFVJQ0pSVUllakJmR2tYaE80MllscVNKRUxVOVEvUDFBblY2YS9nUnRLRUxmN2g3VVNqK3VvNENIVGtOSHZWR1U3dUtYT2FEQXZ1TjQ3OFFDaVFnaVQrU2NlVzFEZ2w4d0w5cTNOUFg2TjgxdDNHaGVTSWh0QjlVSjIwclNtTWtqUFlNTG4xem5PcTRkbFd3bUFFNG13NGs4QlZzVmxJNXNrbTczNlhKZlhyUE9aS3lRcjFGMjRhV1ZXOGhuclpveHlpd1JYNmZGU1RDalhuYmU4MkY3cEZzaW9HNXE5Z1pSNmt6ZzROSDNsMlFlZXBXS1dsb1ZPM3BpdUdVa1dqaUZsVzRUcUVDMytseTV5NEtTcitQcStrUmQrd0VncHkwMkdLL001ZlJ3eHU2TjdPbmV0NUQ4UzNMbTlrc1VUNm5TZ1duWTBEcFZpRjF3Q3lpTC93cDExOEJTcHArdHNpRFoyWDVwbU93aTBJckMrZzYvSHdrTCs1OXdJZjJLTmlsTk5rSHRpd1hCcm51cXhVZmlHdGVFZWVkZExBbTJvdkxaVDZTZEY0SFVKYTZId2s3M1hJcFBVR3I0alliaWwwNmZhTFRHK3dERXQrUGdzTnhrZGU5WWFSRWZRT2ErdjluWUNaQTh0NFF0WU4xaDNWMXEwbENZSFBraHY1Q2hUUG43d0EvQ0lNc3dlQ3VXYmZjejNpK3JFSzVOZlJrTWs0aEVCbE9LcEZkZys2VTRadkFzMGIySTNGakIwSittZFNWOWxIVzZ6dEgwZ1I2eGZoMEFkSDBnZi9WOVlXRTNkSGlaaGk0SzNaMkdoTU5WVFQvVGFmQTl4cEhHSEN3M2laUG9XNzhqT3F1WWVjU0R6Z0NXeXppdjVNNThEdEQ1eXVCYWIzWkdIcWU1MkpIYUlDS2pIejg5TmxCcDBjVUVMN3YwMUNIMENsYUkra1R5dWZmcWtQWmNTYjJRTlRTamVqWUYvOUJFZi9jUkY4ajNlTHBTV2RVRW1hZTZ1d3hWVGU1clExbDBCRDZlWjgrOERqdGVYVVRDSW9BdjBUdVYvUEs2NTJoUG9SL2pjOHV2dFdVUnVFK2FsaGdMbnR4T3V3V3pPSVhWV2Z4N2hDQ3BZUHR3TVpMZjBaQmRQVE9FZjd4QzFBbnVxejJtWUkxTEt2b2V4dG9kWHhkaThWM3BCVjJoN2JnTEFhYlRiY3hpZ3ltVVk0Y3M4NmJYTXE0ZW9RWG1rMTlOVllOUFpBTjBXbG02bXp4SGQ2UHhPNS9GcEl6NFpjL0s5eWFreTcrQkh6T0FVeHlJL2ptYjJGUXRGN3VqK2F3d3A2ME9MaUJ2ZTBhaFlvRGJzdWVsNDN3SmZhWHN6cC9ubDJKQlNQbDlkSmFWckpTOEw2L1A4MWxlSGVqbjZpTU5vWDlhK2c5K0pSWGRpeTVNeCtZTzR6NkVzdy9lRkdkRzNLQTZUazBBdmRHSFNpdG9oSVZZSnRxNTZ3R014bnduNWRBWVBoT2xqL0xheFVwMGpqRkx2NERkVkhzSEZqc0VWcDNpVFY4RTdqUHAvQ3FlZFFuMENwOVQrUjhOdG83OEg2cmw2bDFJV0R0bktSUlpBeGdvQXYrZjRjQ0RneDdLNlE0ZkR4MHRyTEN1ZFVSaGVWZW5UT0pKbTJvcWRSK0RmSGhpeWphUm1udmZma1NXWncxQnhaUlhFaFI0NUF5QkpJSDhkaXpBUHpkRS9kdkUxSWc0SDN3NmFHdm03K1VOOFZ1dStUNDdwU0ZJUm51dFRHRnp1MllMd3h4VkhjQUV6b2d1OGxzVmpWcnU3VGE5OHdUdFpTWHR6RGVIZUNMMlp4WlgyM0Y2NW5CZzg3d0NSejNxdnYzMk1WajF3Zk80VytYRVlmZ1VKTGZvbGpuNzBZMWZINHpZTnBCLzBldHgwdXdVaEJBb3FJUm1DSDlCb015RDdDZVFBOEx5TzVpQlNmNW5hMkxBaTR6dlVwVzBxVUgxUWM5SE5XU1BVS1cwdGVLVXBINWV1Mk0xMlJSM0hhYlBKZnBUV1l6WnJHNEFneVQ4OC9mNVE2R1NSSFQ2U3lSUUg4OStxaGl1OGhYNGh2bXhacTNaRWIwRVY4NkwwRUxYV1Y1VUU1NE1wdXJhY3R4TStEbEVmV3NjTUZoaHN4ZnMwZzdmcWtDbko2UVdrRHhqa3hBa3h5RERhL0xUVUQwcDB1eFFWSXkwRzBRdG1VbUpIbklXRVFjSkZoM1hXcmMxaXgyclphY2lxbXhXOHRLTEUvRXBmY29wdzViTE52am5rd1lETVJ4Nk8xcnVIZFdSd0l3TVE4Vmk2SGkrajJaa3lCUjBIWWpTR0pRdktKb2JNTU90c2hRSElvc1pQcWgyV01oaGpUVUZjYitzejVwK09FWGhFZGVHdXB1eVRmRGdieE9JZWVNUWZKRVE1S2dLdzdHZUU5SmMzdVJ1a0d3MEZwRk1qNmFnaExBKy9hMStFU1pEZWlYdGQxVGlVaGNvU2dTR0I2SlZPUjd6QUpMczUrT0JWdVZvcWVQSEoyQ1lKUmpKeGN4V0EvYUdJak8zMGNEekQ5WHJubmlqQjF0TjN5UEgwWGtjNCtSS1ptQlBTWTE1dVMvVjdVVVd1N2dsSjI4NEFIbVJxTTVTSFJ3VkdCaHJUTjIvVGlnM0tVTVNqRE5JVkY1SXVhUHFaRVFpNTlEY0dlenlEd3pBenM5QjFFQi9pRG43R2d0cVZscmxZbU90Q2xheG1DSStwazJQaXh6WU1yWkhleEVxUndZMVNYb3FBTFhOemthVFRac2JXb1gxV1JjVHN1bFhpaC9JWEZwUFl2eEVhNkFGWmZ4NHhsTk16Zk9JdVVSY2J1KzZxdmhhU2hmaCtYdTZTa3ErVmFER05hb3VLcHhZT2I2QitBKzFUZUlJRzdMM01SKzVIdFVURFIwZ2JjTTB1S1o1NFBia3hBRzViaHNINm5IbVErMUc3RWZwZG8xbDVjSjdJSWNIaDNuR0pXc1lsM1F2dlhaYWhKdlB4NVU2Sm1MUXZvUURKY0ViclFaNTIrQzNSRnIxMXBaZC9NVVVSdjN0UWgxMi90UEIraHdyMXNtTm9CVWY5bE1TYjhBQmh1MDZ5dU5mdWIrUzdNN0RiSUhyQlJtL2ZFQmZNZWZtVllVbmdnSnAzeXVZYnFIZ2xRYjZDUVZtSHNlanFhWjlNVHowYXJDRXJBdXF5R2srVWYycmo4UUFSWmk1cUN3bnRDUDBmajBLM1FveEpsZ2ZwYnRrWkdIRlRTdENBR0JLS1kzOG5sK0pLOU9RRkZ6UUxnU0toUExORG1ySGkvWnNIR2JJZ2RTendDL1pXOXU2aW5vN3NuNElVUnUyQUNUOGlGVjhDanBHNnQ5dHlDdk5TNTFjdTlTY1FzaW45K1ZSa2pLZlcwQ09pblhOVWpuNXQ5eG8zOFhRZURjcnZqampMUEFrRUlhU1RRazkrSUVIN2NSRXdFNkhsYi9qdjlTT2ZkaWtmclFsSlpxQTkxeDJEWDNjWjU5cnhZbUJiUGVHS3NaTkZJT3ExU3psSnJCU1Jid3BHYm5UT0lxM2pZemhwNERjSklibDVremRqcFprQ0lIVDh2VnhYZ1lFYnBwYUVjSmJzY1BucVZGWUNNd20xUDRzbGI1MkxTN2JUN1I4REFDVUptYi81bG9xUVBUVVZwWkNrQ2lOalVCcEpNeE50NFpxZDQ0eWwvMWxibllDcnpZR1JPc0RmZS9OcnU5QTJ6TjN0eXhCZmhvZDNRNzlTcytMOG5MWnFaZ3MwSzBxNUh0dUZqQVUyWVArdkFMRmt3RytpYXV1bndBTjR6cjI3U1owakE3dm4xclIwM28vVHU2Y1FvTDFPWHFwVld5dHFtN08wMEZrNFhvYi9zdzZtQ0lYUzRNMHBTc2NaWWw1MDFOR0ZibDJtM1VGZlhzUHdncVRiWkhGNlhCMEdqdVJUMElmTDFWZ2I0ZWVLOENnM3JPVnNtd3JoUnYzVlp4c3lHaVp0eFlYRFZxYWY0VGZEb1JSR1RnZkk3eFIxUGQ3aG0wYmRUdXlVUWZ1Y2hlbHlLdlpIY1ZHS2NMVDUvNW56NVVIMlh4L0ppdU5KOE5SMUxUZ1FxWXlnaDFsMTVEUVE3eStDcG1BZ0EzWGVIS29Tc1Z0R1J3YWh4SEJ1VVAvd0FrNHVHYVhYRGI2SzMyUk50K3BJbVV1S0ZVWVlyQkMySXc0eXFHTm9JZDJxQmdTWGpXWko0TVhOVFI0dk85NUlWbkMvYWdLRkNVdjlvMGFmbno4WlFuQ2ZscUlRa1VBcFRNb0VBOElwVnBUNHlhbS9aRy9rWHJ2VGNxMWt4TTFGUHZ2VVEzaFdLYzQ1TzQwUVozRlpXZ2NzVzFUdi9BK0cvTDZqZ2FmWGVCcVIyaEFoZ1RpbE9kWUx0VFB3ZWtvaWNwTFo3aWZjZ1FpL2ZjZEFmN1kxQjEvaE1lSXM4UG9YTi9zNS9zVkJUc1U4QmNiVzgwemg1MkpTOVA5LzVCNnAyaCsybm5qWU9zNlZVeUpPSlFwRmN3Q2wwVFVsUEo1bzJmNEZjRHpQQXFqYkF3Y3AxakUxR21uZVkxSW5VbnFBWEJjOTZsQUZqSFB0a0hSeW1HeWdsakZoMjFZblMzY0V0MFlEOUtzdFhVYm1kTGZGSk5ZUHM0VS80cVlueHRIUzR3ajJRWSsvSzVXbzN6Uzh3bEU4Ky93bXduT3lMdk5ISS96aXJxK0l6RitSK1A5RmtPSmFEZk9qVDhzTlFBeGhVbVZsS0R2SU5KMTMvRk13OERzci9NOFB2cFFQemRRNldvWkxyVDJyRE9UcFY3b3dtYUladEg2UGtJTXZZa3lXV1hObzFMc0hCaEh0dzVjaUthSXFZYXlKcUY3ZTdPRDB2N2pvaW52bTYvcHoxdVI0ZFNKcCtXeDZzZk5sNk1TcTk4VmlBek9oTFpNY2RBOWNldmlRTWNkMDdnT1IrSDVYVmZaZjZyYWU1dGRBaVUvVkN3MXYvWUs1amF4VHdpa2o2OTlZa1BzZXpSMVdtNUM1c3NmNmhXSktUTDBiWW1yM3BHZ1Z4SnBLd0IycUIrcTVxd2VaRVB5K2J5YW9JWkVKNDBocXdlYkZObkRMS3M5bzk1dkpwL3F0TU5aSFdiaHVhWTVjdEREd3ZZZjVVNVptY3UvaFdmS1AvQ3UxbkIrelRLRHhWVUNRWGZ5b3g0R0YvQmVvVDlaWXNncU5tVzBkQmtyUTUrVXYyTEozc09Pd1pmV0xuclB5Q0l0OUszOGE3V05QclRpcnFwbkRIeUYxWmE4RmRUN1lJc0FQU3U4YVl1VU1vOWszY05xWWRPRVh0djlHc1pacVhKZTBJK2Z3UmpjL1FVTVp0N3lhOW9DTzdFcmVMUjdDWEhRemdqOUlGWEFJZDNNeTJjL3pLUWdDUDhkSTZubnNGN3NNYkI3Z09BT295bDFVSUR6VGFXZHp2aHIxU2Nma09JZEpSQTRzdU9Vc1k5N1B4NW1sdEdxcEsrSEN2UDQwVjJPRGxMUWFrU240MFByZVVmaUFDa1loQUlXaXBqZGZxUGJpOFRUL0VxNEtkRUo5RkNKMnRxRTR5dENWMXFmZVdUVzZEbERFbUNaY1FtUVJiclBGUlVaYzRTakhKYmw5N3hKait0dUI1Y1FhbEdNTWpBT3BQeFozdjMyK1pCZEN5UVQxMXpYWDg1aTZYQk9kY1d6UDZoWWVRazhTQWI3U1dqUVFMbVVXeG9nQytHOFNNTHZKTjNJUWdlUFkxY2R5dG03Q1Rib05hWGxZL1N3NTRKeE1rTDZhVzZIQkduYTd3UGJyN2xRVEl3cmNURDg0NzdsR0Uya2l6Z2hEOVo3bVlySk1DdDFWckRXK3JKdDlvMEJkd3EwNTJ2L3BqT3J0b3NwR3poVGl4aTY0RFRqd0FRdjZjYnROKzF6NENDekVBSjdJdHlMVWRtL2pPbi9BaWVtTTVqRWdHRCtzbjF6M0JEUTZnbmxsSldNYVhnT3oxSmFNTHIwUHk4a0E3T0FNK3k4L3ZOdWRFcm1xcStCenNqalRRNzlud0VXSGVtQVZsSmx2c1p3a09IZnlWZExDbU1MUFN4elBXZWs3amNvWWVINnhvY2N5Wm9yNThTUjRZVlo0ZG45ZEdqeWw0VkhPT0xHcFhjRFRxbGlWcnptQWY4RWJnUThNL0tZem16MFFhOU1uWjJ1TWtoNU1JQksrNWFqMmlPd090TjZvc3FiUGlTVkxudkNONG9wUjRWR3VTTjRPMEFxY1J6RCtqaWVveGlyOHE4YXhTbUhOU1JDVjJnZEoxRzJRU2ZkWDJ6dE9uQ0p3L3BXZkFLWGVzN2JSVk5ZNmt0MnpmUzA0cjFXU2FDSkhvRjd3YThwODd0YnJySjdGdGx6dFVodGlWYUNCTlc2SDl3Y2hCNnE5M1dHZlpqdU1zRWhlV09MMHdUM1pEOXpmM1YrWGVyYmJOdCtLVHdqRU5MUW1sUVlWNnpiK2dBM3NtczdxWEtidS9IWjZwVW5ManNHNmkyQy9LQklQNWsxblpoWCs3cXlra2tPTkRSKzFXRFZmcW52OWZLNjFaaGYxRElnQ2ZON0o1S2JLUGJkLytVK3kyQkpHQWZIZEZ3NEg3aXA1eUJncDVsU0xTMWlQU1RFamdMMURTNEE2eHliMU9jYXhCRWxJOHJBb1NvVlNEWW04QTUzQWE0K1JZK1lIU1NaaEtLdFJNOCtXTVNYa2RyZHVFbjhGT0pZVFQ0bXFpYlJWdjZnVVhXV3VleXdQWXdzbnEweWJUY1lwbmdxaGJ1RDFuVWNzSEUxT2s2alEzeWswSHdjbmJNMVFwT0lIbkkxQkxKc2ZpdERkNEdIcDZJdTMwZW8rbVM0MGZQc0wvZHo1SnliZ1dRaFoyT2pzUUdJRklFSVNXcCtXZXBuVEl2clBqdzYxeDdHcVp0V3hvYWI2MUw5OHVxUGFUalBzTGxmSFNXaFBUQ2dkUnFWVE1va2MxYVJCdXkvYml6L3kyVFRXUWlwOUZMd1NxOVRYcXBseDhPbFBPRkU0aDJSbDNYSjdRRVY5Q2dSWDAwSjlzcXVVNUJqckRSckQvVzV1eFNpanFTQ0tlVzlzdmxjbnM1VEdJLzJJVWhXU21oWkxGN3M1TmpxWTJHYlYrYzltSFZ2UXAxWWl4dENCLzl1R0x2cThFYW5xbnJQTlo0SmVJSmNTZC94eVlBSDl5VTU3VTlZdFNOeUF2RnU1ejhZckZiZVdJVE1LSi9kK3M2UkxrTXRkR0I3MHF1R0t6TkpGKzlCOXZMcmRHMHE0NGNnYlBsdmhQWXZTVHlMMEl5a1IyUloySEpyVXlybldic1F2VDdHLzBmM0xCUzgzcyt0R3ZPM2VJQlNRQ3crMTQ2YnF3eE5PT21OejY5bzFQTk55bThzRDZWaHl2RlJNcjBHQXJWUDJZZEo1eDlyWnhPOURJcnR3SlJ6RmNraFgxY3RiUno1MEh2UllPdkppQXpoUHRFaGhlTlJXOUREakRPTUVuaWJtVENtVmwwVUo5UUFxendpUTM1eWVUTk9VenpJakNsZ1NKUDBaTDFwODBJVFVkSUdXVDI0WkVrc2JqR2hiL1BPT3J6a1QvTHp1cG4rSE5ydnFSZXFaUUt1V0I1eXMzcTVieGFSMDIxODlTeEMveEpkR3U3djl5OXdpdzV3T3ZJVHpEbE9NQ1hxOGk5N3A4SktEQjVCejFYTTFZU3U2WWlxcEtqRURMZndCSHZUM3o3NjYwanJDazV1dnlJNW5GV05McjA4ZDhSYzIxOWdXMDdsZ254VlFHSVhHTXFjZGdmMEM4cHRZTXcxMEVBblJ6ME9IVzh2Z1lveHBBVFd3L29CT085Nm5yYUpNS040R01adStiNlM5c2QvZ0d5S0Y0aUtRS0oweGxRdy9idDVId296dW45V0FXeHZUNU0xS01GMXViY1R2N1JvelZHMWhabFNtblAvVzluRDFNRlpwSi9xdDFrMlNLT1ZWRFVLbi9UeWhCaFBseFJERmVDYWhJSjRXaEUwYmFFMzJxN1dPZTZTYVpYU20rbXpZbzY0K3Y0WWtuU1MrMXN2aXhaUGVlRWxDODQ4bzZpOU5PYlNZVlpaZUxKTG1rRmNGWDdCTWJGSzMvSGhMb2FBY1Z0UzZwZ2xVVU5YMjRrSE9hcHg0RURFYjd6eXlJQjBQWUtjU3liWDY3VDBEdnc3VnJ2WlZNM0RtcnZhd3Z2OU1ROVJka2xGRytTR1dIRm45c0pjN1Rpb0UzZnVrVFVyaUtWM2RaSTljazRiNW5MU0VhY1ZSQ2dMeU9xdlRjckJDeHdBcjBISXJ5aVl1NTVjT2tZckI4LzJFSFpGRHRhQUxxYUloWkh0NXQvQVVpQnM5QkZld2hmc1lTU2lkUHJXbHZRbmdKSlVrVnNQNnJCcTFRM2ovU3ZjMjVmTTkxLzBFbzgrME42c2VlVTFjZmE2Qk0yWDJBWHdIQmtkS1paRFpSK1lDaElYZHJtKzdLazVLTGtUUGtTcjArOTZTZS92SmtHdVFTWjNlN01pZWFOYXdueGF0VGRlSXZhWHZkcy9GSzRsNWhuckZCdWVEYm53TVpCV2loY0tHdGcwQVlHSUx1czNrUU8xWDJoemxpSFl4ZUFlT1Uzc0FuUWdkeDYwVnZmL0I2ZnFLcW4rUEZqYXVPVnNXWGNyWFVaT1JYTjNFSVJLOEs4M1BEVC9IaHdnS0RESjRmYVYxSkorclhxTmZJQ2FvQW9FbHBqdzhHbFpHK2phS2xIb24vZHUrSmRhcC9pQmRhbisyZ3BwSFJDSE1qK1dhQ1p0dlYyQVVjZjZsUTVVVGNvQ1djb2lLN0VrT2ZHdHFOR1Y4emhlaGM1L3dEQitmZDgydWVZNHJjc01id2phWTR0YnhoaHlSRlFsd2VhU1BjNUZQam9kTzNTcUloa0w2OUw4RVBNWHMyS1ZocmRsRktFZlRSRlk0eHBJcS9PVURsYm9kZDUrT1VVcTRjbElkV21YYklHSktIN0RUdHF5T1JSRXByUStyWDVSZjU3WWFrcURobS9sdy9xZ0ZNaDk5dWMvNDFlMEpldklvalJBSy9uMUYwOHpCOTlkYjFjaXpYQU5tdnFseGxsV2xsMGFJTmFGN2VzVUlZVlZCQTJiSFo2MG14OEtCYTVrNERkNXpxRUdSaVNoN2VDZlRtQTYrNHArV1BtZlBOZWNZQnFSZHRabExDSEc5WVpEWjQ3dDhGUlJlOEQ5STM5S3hRVjlUMU5rZGtaeFhROWp1U0hiR25vdC9IVHpPcitzYkZVRFN5TjBmT1FDS2pBOTZUOThJUHVHdXNMRHZsM1V1TUhRK2tPdjh1YSsvKzBMYWJsbkRKcTF3SGpOa0ZnTUlSblJQUzJScU15TklRZ2NKTlk2S1lzS2dobkVTVjFMQzRSQkJNb2xBY1dYODU3QzMxb2FUUHhxczVDTkIrZktiK2NnTUJTRXNEYVJjUjFsRURDRVZ3RFBSUlJpeVhMcUN6MW1vT0VncjRhVzlhd2VCOU1mSW03dms3WTd3NjJSTkYzY1QxTDF2TEZKSFlnQmtKb092QzA3NGI0OGpncUJqMmtqVGd0bDN3c05LOGlpUXFzYUM2MUV0M2JwazRBOEozcFcxT054TTd0d0kydnFya1lQcTdXZ0M1RGU1d251aVVTTDkyT1ZkbTZ3R2RsVDRIMjdGZytISjZuK00yNkhuQlF4S2FOOXdFSG9yYmdZd0hxcUxzM3g2SjBRbEhGWk9CR1hyRE1kUHJURTlxdVA3ZzRhRHRvTmltWllUMkpQM2pyRzJXZHhRdWNGWThpckpkR3ZRRW95MjJKdmtqeGpLZkJYamRQOUFuZkkrNTNWb1ZKWjNZb1FEZ0pVQk15RjM1dHZqZW1qWkhIWEhkV3RSMWU1allHakZsNDQ2WDZVWC9JL2FidFRjNVp4emhSeXRlRzVkYkQ2dmcyc0FWeTZ1YkN0NWxKc2NNM0o3WnJsVUx4QkdnMG01NW16bFhHRE5iOStocWN4Mm1xb0FQRlpjK3Z5Z0dFeTI4UjRiYnJBTzFvNjNqTHVxMjJESjcxZ0RRbnV6TUNhQi9xbjhFZW1tUU55L2ZXTTRGdWpqMzI5S2FzQmozamFyY0gxeTJCaGFIeFg5L0RwcHZQKzVrRGJ4dmVCamV0WmZ1MmRVMW9DSnIwbGppVy9QUGNCbkR3YkdSZVFxUGRQTjE3TlJaRXVMd0ZwcFJkZWNhUkEvQ1VkRlRCVnV4M04vSERLRWdRaEozVUxnSUtQNHFkVjNLZVlsY0tJV0l0WXpYNExqYnBJcnQ2RWtFSjJVODl0K3lQa0c2eEdKT3BwWS8vRC9DRDNWTHVHT3RGdFZYZnVQeURjV2NtOFpmbDFkcmoydHh3TUdJelJPMjBWK05COVQ3dVN6WVRuWWFvSUhLV3MwY0dRckJaY2ZWWXBmWVVIQ1hJRm4rUXF4eWZnd24yRldxVWkxWm5JaDlNN1NkRE5pREl1bnFZcmEycE5LdGh2WjBBSUpJdFFzR2cyRmZRU1BnUTdtNU1mbmtyM0NTeEZOVHFQQzdnWlhTUEVjN0ZVLzhsdzh1UGNIRFRjSW05Zm9jeVpzMEFlak1LNnVWRm45ZUYwaXZNbS83NWNDbjdJQ0JnVE1ITC9oWFV2RTh6ejNXOGo0ektOdHJ1Ni9BaEFqbktxaDdWRjVZLzlrQUFRQWFBRUFBQVNNQVFBQVBBUVFqQWdBQUFBQUJFUUg0UUFBQ0FBa0NBUUVLQWdBREFCbFVhR2x6SUdseklHOW1JRVpwYm1kbGNpQW9OQ2s9PC9CREI+CiAgICA8L0JJUj4KICAgIDxCSVI+CiAgICAgICAgPFZlcnNpb24+CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvVmVyc2lvbj4KICAgICAgICA8Q0JFRkZWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I+MTwvTWFqb3I+CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L0NCRUZGVmVyc2lvbj4KICAgICAgICA8QklSSW5mbz4KICAgICAgICAgICAgPEludGVncml0eT5mYWxzZTwvSW50ZWdyaXR5PgogICAgICAgIDwvQklSSW5mbz4KICAgICAgICA8QkRCSW5mbz4KICAgICAgICAgICAgPEZvcm1hdD4KICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24+TW9zaXA8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgIDxUeXBlPjc8L1R5cGU+CiAgICAgICAgICAgIDwvRm9ybWF0PgogICAgICAgICAgICA8Q3JlYXRpb25EYXRlPjIwMjAtMDEtMDdUMDI6Mzg6NTIuNjcxWjwvQ3JlYXRpb25EYXRlPgogICAgICAgICAgICA8VHlwZT5GaW5nZXI8L1R5cGU+CiAgICAgICAgICAgIDxTdWJ0eXBlPlJpZ2h0IE1pZGRsZUZpbmdlcjwvU3VidHlwZT4KICAgICAgICAgICAgPExldmVsPlJhdzwvTGV2ZWw+CiAgICAgICAgICAgIDxQdXJwb3NlPkVucm9sbDwvUHVycG9zZT4KICAgICAgICAgICAgPFF1YWxpdHk+CiAgICAgICAgICAgICAgICA8QWxnb3JpdGhtPgogICAgICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24+SE1BQzwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPlNIQS0yNTY8L1R5cGU+CiAgICAgICAgICAgICAgICA8L0FsZ29yaXRobT4KICAgICAgICAgICAgICAgIDxTY29yZT43ODwvU2NvcmU+CiAgICAgICAgICAgIDwvUXVhbGl0eT4KICAgICAgICA8L0JEQkluZm8+CiAgICAgICAgPEJEQj5Sa2xTQURBeU1BQUFBUG5GQUFFQkFRQUErYlVINWd3Y0RDQXNBQ1FBQUFBQUFBRXdBRUFBRHdJQVFBSUFRQUlEQUFFQjlBSDBBZlFCOUFnRkhRRHVBV1VBQVBsRUFBQUFER3BRSUNBTkNvY0tBQUFBRkdaMGVYQnFjRElnQUFBQUFHcHdNaUFBQUFCSGFuQXlhQUFBQUJacGFHUnlBQUFCWlFBQUFPNEFBUWNIQUFBQUFBQVBZMjlzY2dFQUFBQUFBQkVBQUFBYWNtVnpJQUFBQUJKeVpYTmptY29BQVpuS0FBRUFBQUFBQUFCcWNESmovMC8vVVFBcEFBQUFBQUR1QUFBQlpRQUFBQUFBQUFBQUFBQUE3Z0FBQVdVQUFBQUFBQUFBQUFBQkJ3RUIvMlFBSXdBQlEzSmxZWFJ2Y2pvZ1NtRnpVR1Z5SUZabGNuTnBiMjRnTVM0NU1EQXVNZjlrQUJBQUFVVnVZMGxFT2tkU1FsUXdNZjlTQUF3QUFnQUpBQVVFQkFBQi8xd0FFMEJBU0VoUVNFaFFTRWhRU0VoUVNFaFEvNUFBQ2dBQUFBRDRUQUFCLzVQZkd4QUpWT2QzeHpjWWp1MXc2NVZGaEtwbnZQRGYwMVYxVmdOWitSUG1ZOEYzSS9wT3hrbjlLK0dyTXF6VWRCUGZKb0JvZ0lDQThZQkhIK1FEdzhHRWI3UmJQeXFBOGFCcnpZSlpSN01hS3lIZ3djNU1nUHdKZ0QyckgwaWU4c0lpVlFOSFZoMDFTdFI2MUUraFVpaysxUkVFM1lrRVdKRExUa1ZYbVA5MVNhT3lnWGFBdzFDT1FiQ0lvRm12bUs1VWFSWlJBRVcraUc5S2pBdytYMjN3N0U4ZVZJVXJPcHlRTVVEOFNxL1pKdVM5dU9VNGNhNnVNYXErbEZwcGFLNlFoa0cxT3c3emJFdWpBSEhrSXFZYTM4U0lrQlZzWThzYVZGMnhNb0Q5c0J2NTRFeDV1QzNUK3BQMUJ2eGt2d25mbVVDK1JqbG9SdDJ6Z1Znbmx1Sy9mUFdlZUI1S2JUV0JQQXdWQjNzTFMrRUZ3RlYxakU3UHNBSmUvYmwxTFBiSUhPc3hBSHgySnl2S2dsZGdJc3djczNUL1JqLzZpMkQreXBFMTJISWZyaTJ1Sk9DdVBLNlRVc1I4eHRLdllJUGh2RzFDQUxUYlFiQURYRTZQa1dnQVNMQklyNWVUYnI3TjFpK0VwV3ZPVklERm96elVpSC9zOENsL1BMaS95LzI5V2lxRitML2RyN1Fwb3pscDFMYW9oZmYvRGxIbi94ZmplamlwcnVqak1SeEtMdGlubjFESmtNam8vSDVXaFBqeDB2RXV0WXFBL0VXTkFMa1RuU2dCakxKdlMxQ2prYjZjb3B4blZ3RG0vVTVVQWVDN090WEdUSzhyZUhGemV1V2dSUFRjczFHQ2NiNExyS28wRllERmR5NG1qR1lWMldSVGQrS2tFRzhJdFBYNWlQM1RqZGdwaEcwRWdOUTJwcVFIV2lSVkRBVVhIVTFUclY5MXA1dUhXQjF2aW1DQzVhZUpiZ1BCWXYzY1VrMXdpV1NHL01DTHVieGFTTUpQbjN0YzNHWWpnNVNpdlB1RUtWdnNROVZMTVlOMUFTT09JTEFJMW10a25uYk5jaDBIYlBOSzI3UDd0OXJCdjF2MEdoc1EzYlB5ejN2N2VqMnplZWVvbytFOEc0TkFVM2Q2MEtlUGdmR3p3eVNsVXk0NjBMaWtjQzV6Y0NneG9JV0RBRWkrdlgzbTBCOHFscS9iamNUQ1RBZ2FveEhROEErcGlCZ0h4MzFwV2RGbnB5ZWFmOXBhTmtZV29ZcVRpMzV6Sko2Qno2c1J6d1RnWnlFOFVIcllYeXBRa201RWo5QTJmNG44cGZmSVRYem1NTGRjb2ViMFo3UzJ5NnRmNllsaTMxSnpnMFN4MWpSRkVSdkNJT0ZWTnROY21EaWFqTGczTG1TcndXOHJXMUxsOEp6WXkwbHlsSzg5a0swQWluVGtxaG5ud2Fyb0lyZzVpY2Z2VWQzQmFtZVJ6ZjRRWDhNaHM1bW56d2xnc0xlWVZjbjRUWTJDNzgyVHRpanZySXVoT1NXK1FlcXpkQUJTdjQwZGVXZ3FFQmVJTk0vaHJhZ2RXM1VteXc4dmNsVkZDOGlkWnZaSGM5VDluNFBLdDJOTURBamxFZldRS1pTbENZNWRTN242VkgxdExUc0hZRGFQUW5PUzVhclRJOUo1czk3WDdWaFhSeWZwY3hHOUc5ODZiTVdrcHdkVTdSN1N4YVI2YnJ0eHliMmdsSk1qNkNHeWo1S3R5dTRyVGdoQzB1UlRwQ0NreGY1RkZSNVdQa1VTbHB2aTVJZ0pKaUFrQllZYk1DZkJhWW51VENmM0k5SExZNUtVV1I4cTlHeTY4dTJVMzZVdW4zaUczNzRMU3ZvNlR6Q2UyMmp5aTV2Rm1HRVN2ajFsNDFhc3lra2NTaVNjcTdqZ1FMSjdlK0ZtekFoL05ENnpiSzdKd3UrSEVGZVE1aGxyUnBxUVEzLzhwN0Jhc2tFeG5Dc28reWI0SitwMnVmdVJVVlRjdE84cVhjc1o4ZUdFblZjVE11TmpCOHh3aFlGQ0h4aTlWcjdxL29vdndOdDRmVlZLYVk0VExkbUl2UXRHbXZqMlB4SXdRc2c3bElvdlMzRnpqMVl4bERQNmhOcXBBSUE3b3VmME1kc0ppR2l3UzJ3Qk9xRTAxT2VDS3lGSHVpS1gva3l2RFlsNVVjQXM0N2xsT0ZHRXBZNm9iWlN2QVQ5WnNTRCtRS20zekEwUVhqdUU0S3liWVhUVmZYQUVRdEF2Uk1pQ2dJRStZaWtFVEh1U2NDZUYrREpQeTdZQW9od2JIcDc1eEFBU3lkVTE5YmtqbW56bG9DTGgxZzI1Rk9lTSt2VW5Jb3ZyNWwwS1Y1UDdRQ3M1cGJ6ZmFBek9TaXlFRUEvNTVMRFY3VHpBMmRLOE5EVXFQd1BGSVBxTVNTblAvdUJRY04zRTF4K3JqemtyaTNxVTIxYThhQ0o3SWdCaFpaZkFWaEZhdDBoMWZ5cVZHbE9lMGhpUlYrakRPLzlnWnZqVmxzUWUvejZuT3RDYVpVMXZ0OFdpWWtoMDNLYjZ5cVdwemhvOStMb2E3NXJTY3JuN0Q2SDNnR2hBbGhxb2xDWkRpSThjVFl4ajB3MTlUVWd5ekJWeEJQS25VcFQyQ2daU3Yxc1RDZlRvNHpNYmp2MVFzeC9nRUJuTUE1ajVDWDFiRktPcWtJODJZSjIvelF4cEVSL1NaRVN5V3pJUHhOYlo2VnhDSmN3UjBMV29WbVEzWmhQcmNHMUY2bkM1MEV1WVVaeHVZWHQvbEdzOW1tbkxSU2EyWVhXaXJNeGVUV3JsTDhUTVJiNUJlME13azNZVGd0SE5rN3FBSGo5aHFQdkNJMHRtYXlsQndlYThtWGo1bE5vd3VMMXdBVkQvQVlhblVhN0k4cHFPTWNBdFJjaUpPMGxlczcrRER2Y0RNMDFZdGxkU2VOdnVaM1lYbnZlOExObWdlR2J1WUhIQWlWTlBEZFVwY3JVTWp2YXhYWU1BR2d4TkV5bjFidkVqMTFld0U2WnYxQSttblZsR1hBclh3Rk4rTndpT0ZJdERvYm5tTVYvZGNxUzJCTlBYMmUrYW9OalFLeisyR1ZXOEorNGtqRGZob2RFTEMwNHdGelVGbWY4MXlybnZ4bE53cEVuVlllZ2ZMcjBZVHkyb2RkRGJnQ2dsVnRBZmg1S1BnRy9PVmRQNmVVT1FpMVA5c1VOSzllK1MvZ3FUSnRBOUZVbFEwb0hGTXdPWW84dW5YcWlqRDRvTXR4TlBqNmRBVzdVZkI4Wk93d2wwNEhXbEl5c0lWUmlQYk1iTWh4Y3dNUiswbGNzcWwvanR3eUF2NkVjWUpGU2pXZHIvY2JqaktFNTdXbldQSi9yV2V5emFtWnhIeGpsSFgxTHQxSFNnOWQzTEhWbWpMWnlRVFBWNnNHZzF2blJSeHc4ejMwdzJEOFFpOVJodndhUTY2d0E3ekNlZ1RnYmJzeTVqYWhmWDI2LzJaZTF1Qm53L3FLUFFaZm9qV0hYN3RtWnU3Nm1TMU93VUl5dms0QmJzOTVtR25qdFNUZVlMUkU1d3pkODQwRkRzUExNR0o2all2ZTcydEROUmQzU2JBb3U2akI5ZEwzVDhXdEkzTHdhUXdSVUppS01scm81eldsSWJ4RjRFVCtZM3BnUlJ0VHN6YUtmZUxpeUtOOW5USWNLSXk0cmFNVXhRNnNGZFNjRk9LenlweW1FdEI4TDNQRFpsMzgvQzdUM2F4a3JZVzBxKzdTVkVZenlIMFFDdHNCNHN6aFowbm9DeFlNdG9QdFhXc2ZZeWliRWV4TkgvTkNWb0RYSkU0YllmVkdDK3VMbVRwQnhCejZYaE8rU284djlaeS9VRTFnN3Q4cmJjL3pROFY1WlIyR3dKRUlHMFQxMXlFUlRkZVFEWnJnWkxkeUdHaW0vS2RYQ3ppdlAxZDZkQU5Mcnh3eGd4TW5SSmkxSWIxQlhmWFA5Mk1ud3paVmVPakF3Qk4zQytQQytrR0hkeDRqQlhxcVg3bkRnNTd3b3p2K1hBSEJkbk4vbks5alBNTlVMbGJlNk1vMy9Ra3hZdWVKV0J4akRPV0NLOXI1bk40alBMK1JRdStyM3lKcENSTUY4RVlqQW5NUmxIU3ZQR3kwSGFtNm5DRXMvZHVteUErb3ZzT0tBTkp6eGcySEVoenU2VEQxY2N3cVk5MFdhbmp5V2hQSmtTRGtRRkFqeFh2Qm14YVJrYWFqOUtLZDRXcGNTU3YrT3M4RTE0Vko3UmlvM3NnZGxjOVh1TFoxckd6Sk53UGFTRFFsZSt1K0pZUFc5eG5Pb2Q3RzlzSkFZY3l5dHc0dVJDNFVLVWo0TkN2dDJpek5HS0VqVXp6Q3NoSURxTjN6WVlaZXJNd3ZiNjBGNWFKQ1dsMVdCQ2QrUVovekFTdE80SFRqNlRkRWJyY0dhMmFrMzhIQ0d3OHNLbTJvZjZXM1d1ZCtXOWI2VThHTUlReitZT3Y1YUZZdEZQbU9MU2VvMk1HcHZZaU1pUjBsZS92dE5rdmlxLzZZNERFWHF4MDNnM0RpbWlrSU83NnJBd0VYWENGeTJ2RUJaTVE3Z0x6cGdUSmxvMy9JUkcrQlZScHhXRWhvSXJ6cTl0V2JtOUNNZVpaQkc3VjIvVXd6TzRCNXNFakxHaC9Rd3Y2R0kvV09vQS9QblBiWFhwRXZlakROYkx3UnVtdUJ5aGZ6WU1JQ0RISHdVN0EzejFSQW5FT0trTjBvcFFTa3FZVGVGOTFtMXpWWEdFTC8zYmdhU2I2QWp1L3ZpekhwV3c1QytUTWdNQzBXaERqREV1ZkY5RVVnYVNMd3VpdW9kYVlEZHdGMWNMNVNFSTh3WVBQNXJxMHR3NDN0bmtkelNwTnlCNWJIWElPODNIc2prYXp4UDc5NWpqbHU0MjF4TkpJNUlXUTJIcnBhN09URXlheDdqcDNySVRoRHQ2YTRBNCtiTWp2NXFGeGZRSFJRYzF6NzM5WjdyblRnT2tSVVlJQ3JYdlNtWG8rQmsyQU54UnUvVENOaVU0dzBrQm9qSS9MYTQ1SnRwQzBxcTBoc3JpRmkvNmtUZ2ZBVVFlK05pbXlPeW1PWWIwTnhxdzhYQ3J3aTU2dG52OFZBSDVxUEw1RlRSVlB6eldnWk9hYUdmNDhJT0kxR0R5OGJ6dUFnazBNaGhyL0hSTW9HemNzZ3czU2dsNUpuYzBLV2V2NDBFWUF2a2g4RHlRb3hlZ3EvUFVYdktMZVlmN0dPN2FUMStRRGVtREQ1ZSsybFMzdVVwT0kwTisyaXVjaHlIdFRUL2NBWEcxRWlxQkRwc2lpb1RmQThkRkpHK2xkRitFUUkwQnVXMVB5Um42STlBUHhsRU4wcmFTdWRxaUQzWXphakNLOEp2UGNpTkFyQmt2VVFWS0wvbTRRbXpzeGlza0R6bjZxT1NrTjg1NjB6UFh4OFh5NzNHMS90WFplRjIyamhrTm00U0ZQT0QxU3p0ZFFBelVqK3Q3Wlo2cFMvRUtJNURUSm95UFN5KzdQdHNwWnNxZFRmb0d4eGFucXNRY3JkYnlnSE1OcCtpenV5Tlc3L2ptMUdVOHZ1VVNxcWlxVVhOazJyQ1IzaFArRmw5UGw5a2RNV2pEZ2pvK3VUYnFEbCtiS2NYdVh2OHZ6MkdnUFhRVFZiVUFnNDlka2FqQ3YzUVJ2d3EyNW9zZ04rby9ETUN5M0R5dnYxVEo2c0FheGVrTGVhd1RPMk52SnFmMFBpNHg1dFlMZWtRck92eTVYTy9tcUVyQWIzVmtlMlVkRUtJZENpMjdZRXVITHcyMjlUR3VaRmdQWVQvTkxMR2ZVUmJZeG43TWVRVXQ1eFplVjBYOUtIVm8zaFB2dHBOeEorelZWUU5FdG5EREVGNk0rUUtGTElHS1dMUFJHZmh6ZEFhTlduQ0JIcmtqTlV6djlETzJwUUhXdFRoTERmWVIwU0Nid2l2STZUUHRlOGdUWFlseUxWL25CcG5wWi8yZHhiem80VFVqNUZtZngrQUtmRnJjZDMvNUVxYjJudmlwVHdlVW1EVFBTYjZwQ0VvZHNHaVE3cW1mQStDOFJjNEpGT09veUNISXJycEE4QXpDWFFMSGJ1Qm9wdTNud1dUTFJhRGwzREdoNG50ZHJTcmtpMnRWZEtlNmR3UkQwN2RWUUkxdnNEZytXQWdXY2RQQVg0bFllNXA3L21wRjlzaldnc0VQLzBHeE1rYzc0SVpOcXV3ci9tUmV3dllQWVE0K3NOVXVxRGxORmU2T2paM3BGQ2RNdFRSamdmcE8wMExnVm5RWHI4SWZFbHQzL0dXdVRwMW8wMVVxMjQ2Zi9pQ01ienZmL3ZRdktSNEZKQWg2VVJpbngxMDJoeEhDYndtRVN4WkVhcWkySDJPZWJwdlI3WWxrSlRvbkJSZC9lOFFTNk9ORldiUnZTa080TlF1OGI0VEE0NzVwZmJHQlg1dHArOEptb2FJRnFHTUExdjFra1JzK042bzUweGxiUFhoRldPOEdGSUE5bStTazdWeVBJOThqODBOZ0xJenhQNEY1bVlOMHdlUHRJY3VzeTk5SmNMZzVCbkFNY2RaN05VaS9jYTRqbUdMM2JXb1YvcGIrcmJhRVlRa24zeE1Yb2JZTnB4ak9oc25GS3VSbng5cnJuczEwNTh0cVZhQWZkOEdZSVFNdXpLdzdhSnpld3crOVJxNGEwUzlhUE9hZWtYbzRzR2s4cU5qWWswSTI0T0xQdmRoazRqWTQ3SDRJZUl6WEFFSnlxWWRsZkY3SmxibnlxUVVlUSsvWWdUSEpMemlrc2dNV1ZjL0FPQWtTMHFiNlRlR2pSTVhZUGxMUGFHQ01NNldJeU12UEt5cXRKMFNTWXdtOHQ1RkZDUzNmZXNROFhKSmtIWkZkZkVIM1plTXdMQUdDWjNZVDBzWHRhbjFtSGtZWDBHN1gwdFlJVzdYdzQzcm0vay9uWDlBZThFelNlcHVaQlJzYm44VG1rVUNiZ28xWHNjYjJsRXgvaDVDamVrSTRXOG8xbExaNysyMmFsQm1WOCtHcjNVditramVkUWNWMG5KU1duNmNkS2pqRys0YnhjcGtGR0NzRzR1dE5FQ0hwWnVjMVhNWE02Q2JnN1pDN2RVLzFPU2UyelNRUWdTNTVQVzFqMnRUR3hLTXNZZGpHbENpSU1GNndleWszZ055cG5ZUUlQWTZ4V3IyRXVNRlcvcGhzajA0ak9VRElReEc1OWkvMHBVVTVyUk9JekxWNzFDeEh0V2RENnRvNldxVFUzMERKZzNtNTNscWZlS3BOaEdTRVNOb29SSTQ1UlkvRDdvbmM1VEFOR2hNeVRoZElRenVLeDQyMUUyeXhnWGlRU05LQjRsSXFHVlMyL2FPMDNjZ2NsOWEzSUJhT3dNazYxYzdIcStnMXRFWUI5Q3ErK1ZmTlJvOXplVm5FZjVPdnpjbGJPeVlDM1drbXRHS0o5UDVtVldzb3dWVTZ1SE9hSWl4Y1dtQkFnMU5GQms3U09KaUsxdENFK0JZMmlhV1AyOEJzWXhZSWpxc1hyR0hFdzRwV2J1YzFSQ2lHcnJzM3BySTBqOWhGeUxna0t6SWpHT0dlc1o5dCtpQzVQaGFORDlmdFAwY1ViM1BQT3ZXWkpZTTRXRlAvYko4OVFhajdWU1NKdFg3UEkwby9heklBTS9CQWNVdzlFYnNkcVFkUDRqSFBUY2FrVEF5WTEzazRKTlloVURFc3dhdVdwcm5LYlIwUjErVEpidXA4d2VyWG10M21nSHFpcFU5SjZubVg1bEVuRjlwSFJQTWd5RmcyaWU2TVpWK09uQ0FJVHRVRE54cXJoc0dtSEdRTlF6OE1JSUlYeGFXNWVjYVBkTGlFVWZVbktKUzdzZjlRR291Z1dTcS8wd2F0RXdkN28vai9PU1Q0U29aUWV3ZFlFc3IzcWZLVGxVOTdTSzNDcmIxN21zYVdRc2p3Ynd0a2lHWjVLSkp0Rk8rbmxoVS9jMUtSZ0VOUFgxZnR5M1VtNkZidnhBWXlsc2JUdXJ3eVRHb2I1a0p2NWw2OEx0blhIUmNtRTVJZGhkZThCYmxZMDB0R2Z2QmU2RmJNaWtuZzltS01lRjl6N2d6T1hkSzVMTmNiTkEvOXNrNXl3SzZIbW04MTRwbU5qTzlWbVBocmU1VDJiTFR5ZWZFYmRQNVhUbXBNek5MSk4yMXNvdmtaR3AydUVFNUpyTjJDVWNGWDE5eHdXaldic3oxWWdZRXdCK2tOYk0vdTlzNWcyNjQyMzFKeDhaQms2b0cwSmpzQVIrVVVnMC9kNzZJeU1kTkxxb0FIeXFwWklwMS9TRXdPelQ3Rko4ODdPMU9qNDFRcE0zVDZJTURad2NteE4rRk5JN0tqYXloaHJNL1NFaGFycm0wcllobFNrQWpnZk9sNU9kei9ab3ZXN0FyNitTdlE2bVV0T2pMWlo0S2d6eWRYZnFLRVZmTktjeEJGQm9uMEF5bTZGZ1hVeHE5VEhqSE1lTDVvU1VuOEpWMXNCSTVraEZQZE1YeU55cmpMZzNQM2N6TFBCWDhzcU1hb044akErOTlDTlI5amFRVkFXOXE2L2JlYmxtd1VrOTJjTy91UmhvZXliRmd5TmM5Y0dlenFBc2l6VHNJYWRWWnZ0cU03azBVNStLdkt0L1lpOWFwcFhhSnlTb3R4THI3WXBLOUVBcnU4YWl0U2NCZlVUbXU0WStlak9IemZTWHBvd1diTGdVbHdzNktuemV1NEpHVTd6TEQwaEtpQld2emNBTGVycmhKS2ZPOEF3bDN4UkhpK1BsMXgrU1FLakJrTzBqRnpSY20wd0lrRWpGQWlsOGs2WmlQNWp2NkoyMzJTYzgvdXVjUVVhN0tKUjVQZ1Rwa3cvVW16NW5oSDVxYjZ0dVFaaklKS0pGRVRHcm8vZnRyRVNYWnRkMmdWZDdZN09HeVNDS211WVRzMG5IamxaSy9qUTJxVjZmcHV3Yk5rRTZPRWx0ZFRmNUxOV0tqT2crUDRPSGVpZjFIaGM3TDF6MUczSjN4TmRDZkQwY1Z2VGdZVjd4cFU1MnRpYjJOQitxUnVDU0Jyc085M01HNDdTKy9EWDRDQWdJRG5uc29BNVdKOE1zNGpZMlByVlRYQzQzR2luUStNbzZWSElxdTFmSlR6d0x1SEk2YkNNQ1ZVM2N3ZlJXK1FPa3F6U2VPTlZScFpCdEMveCtkeHpiZnQ2SEdubFA0eVdGS2l3dHNWN3EyeVBFRkY3MHU4WERXdU41bVAreWt5VkhkZk9FTzE1TGdPVS9Kd0hpOStpNnBjSVFrK1ltU2xIdFVvc0JHeTRkdGE4T1JaK1hUUTRYYzhyd1luZnBRaVhFczB1eG1jQ0VzZ0p2T3pnOXBZaU1XL2U1SW9sV3F2MzluTW5Fd09lUDFJUEtjRldEb1FiaXE2MUdLMDViRnN4VjRyQy8yNEcwZ0RlTnd4eXRDQ2dwbTFnSkhseXpLK3hmb0sweEQwQnhuZFRoSm51NHV2TkkzV2I3b3ZPam52UmdCTzNNZ203NHU3ZzlaOHJFWEJJSFJHSWxjU0lhWG1pRTUzY2g3cHBwUEZtTEJSNklDOHA1S2UvMGVGdUozNStGM1pYM29FMmRwWVhFNVU0U0JsenMrWElneGY3c0Y0UG9NTW1JT0cwZjVCcktMRjB2bEU0aEt2MDZUQnZpSTBoaEkxakxDNnV2TmZSNkdxcUZvZFJXcDdrQWtHd05lMUQvWUNNT01Vb1lkYXE4ZzA2U0dObEF1YUloT3RHNFR0bzNOZHExOGh0b3BYS0orSy9jNGN5MlR5WFcyZlBIK2huOE9rTis2OGI1MzlwL2diZk9CWkJYNkRFTWRtZDJ5WFBhQy9qWGZ3ZWdUbSt1N3ljaUVudVhoeWVjQTlNbTZMMWptYnFsSTZpem9QNEltKzN6S09CSTJlZGUyUWE4alBaL25Ic1ZSNFU5V2xwT3pWRUN3TzRkcncyZjJQekZVZkFDcjB3OEVsY1U2ME8vS2dTQk5yRmhxamFVVGtWREtrVXFOV3FPTUkyQTJWNC9MdU9waTZGdGVGL3hWNS9BUm02VDkxZEZGbTFYaFVpeWVNaG9WV01yRHhUbHdGZ1FJU3FWMXcwTzRTaUhyem11TVAxdWVTT0VZVTRuSk04MGdPZVd1QlV2VmFFRnF3MmViclpHNXhYM1pmTW5JN01KcENJSmtzZTJZOEJtTHlYbHE4bzRiSU9BNTd1MWUrV21nRzNHWURVTzFwTCtPcXBIekdIc2NESlVseUNyVG9XYlpJV3ZiTnpDbnRTcVRTLzJlMEFUd2sxZGFCN01DVGRGM2RYa21mZ3cwREhsT1VhN2ZvZ2FsZ29KVCtJb1B1VnFkaHpqUWdEY0cra3ladjQrQVA4SkkzQjRQbC9YazdzNmhZdlZBM2NBU2d5L0huejA1UndUWUgzaEk3MThSeUg1VFZuYnZlZ1VSa1hVcEZ6bDU4MFBtR0pyUWhoRnJudkNFRTYvVlZobTNvMFc5UkJvNHRUL2g1eVZaRUZ5NWtqS0U4V1RQbnhubW1wVmRjcDg3VEEzMktuY1pVVlA5WUl1WTBoVkdtdmJpRzg5cGp0R3NKQXdpNVgvWnpyekNpQ3NVbXRXeFdUSWVIbDFidVUyMUp4MDcyQ2dZeG91YVRrNkpHRDV2Q01obEhldDJtdEUyODFBYk1IWXFxM2UyRkpZVWdsVVl0TDFwb1R1VTJDaVhreHhSM0t6TkVyY3RVaG56MEtrSEhETlU0dEpZM1RrQ0Nud2xqZEhsVVlpSnVJeTB1ZExsQ3VVS2ZKZXo0aCtqbVpCNnJ0Ty9qbjh5a2JyazJ5eDQ3Zll5ZzFNdTh4UXBtd0t1ck4zUFh3LzJ3ajZJU2lZWVlqRTFHVm0xSysxbWREejFsMm5GZWxwSW1mTG5NRnVjRjJmVFZMRmNUSUFxemFsOU5yVFFoc3REd0x2OXhXQVJNQ0JCcllodDBNMmdQNyt3NVNuVVN1RXFXamxIaklnSzl2OVk1NXcycWoxVW9uNVk4OTh6ZDZXNS9MQ1Jrc0xUMWVOdTBGRmF0bTFxTWl6bDRZaVlxMFQwSWpXcC9LOHFIZUR2dVM2OXFWUXhHUUx6WW94aW85WXl2MW9RdlcxTTZoYUN1bVkxU2htdjk4bERzeU5VMGVJTHhKb2Rwd0o4K1QxSWplQ0pUVlJic0hybFpUcTFlb0VzWTd4S0Q0NTRTcXVRc3hsbTROYndqZHltcGgzMy9PS2ZvL0xmcFVJa0ZCSTg1QzN6bDREcVNoTkxucm45YmJyaHh3Y2xnRjZTQmpTZG1vZTc0eFp2VnpleXI1WHRjdDBlZXh6akJVM0l6Q0dJUkFocnBYV3JyTTQvTHZseTJkbGkyY1ZWdXFpNnFMRk1WUjAwSTNIcjVJOS9mdTNnYXZvVUd5cjRYK0dIMEg1cXdSUUhxT1VEaXk1VnBuWDlxcDk2MnlsaTVLL2lSbEtINVFBVnk1UUVCd2hUdHhva1BiQWZoZXZtb3VQNThNbDhhdk5CSGhwTG1xY2czV2pKV3RxN0tEbHYydUVOc0pSRlljZnhIY3lBM2dyRlAwbVNyMitWVGVrV0VwblBPMTg4b1cvdTR5YzV4WHJOUk5RYnI5b1FxNTJTV2Q3bWRNaE1aM29uMTNzRXFWaW01U3FweitvNWdGcmUzN2YxazlYMTZhZjJMZnZySVRmZnN6ZjMrb21ESWtldlpQd0c5c2VFbUtYZnhGRXE5RkFSU2k0MjZLYmVzb3c5a0MxTDhUWTdSNWJNNFRUWFYrZHhIWEtXVlgzNGNBV2twQmlmVU96akFScmtEbmlVOGpXQ2VKd2VxV2VleC9mSU1ua2pORjNmSTBqTUc2b0JsdGcrK3dJbmNHWUhJalk2cS9HdWJqZzZEWjRCb2lYck1Bald4N0VsYm82bW0xSnVvL1BxMmRHSjRSUFhoUXRIdUFHdDY0c3lkeURkQ3c4bVNBS0Zpb3Vmdk8zZHF0ekUwWWJFRGtKK1VPRjYxZEttaFphZmgwbXhSekdWdnJsU2RuUnBMb1Y1TTluUVBKekg0djZqZ1RMcnJqaGJSVUpMZTBzQlgrb2FwY1RlYXl1ZVA0YnZHZTNTZHdvY3dTREExSWp2cEl5bUdaa2Urb3NMdmhqLy9JZjlKS2ZxSmxJRXNJRnE4MmlmRjE3ZjR4bk5MNjlKanpxcU4yaFZYeXlxVFRCeG95a2R5eGdmSDJsbkU2RXd6bkJiVHNZcWw2dmJrSEJuN0tCWU9IWWdzZVBydkozZHovMWVKd2JweVJ3bEdZcS84RFJKdEYvcTBlOHdCcVJOVkxvRzVWSi9ZMXE5bjB0anRwU053N0hqZkp3OCtNakdxd3N4OXlidlY3b1FRV0NZNk45Q0RpMjVNOHZENUZucjJpUjZGNTNMMi8wTVc5WWtZOUIxbENxaU1Dd2diSW8xZTZRVW5UZXlpRjlFTG1JZWRCUDdoK28xRFRxNjVNYXJqQVBkeTJKYnBKNjNTc2ozT3gzcjYvVmVBMk1nNnBmRDdXcG1VUzQzenl0YXc5cEJ1Z3dTZ3hyK203QXVkVElwZ2N1d2FLUFZKN1NEMFlpbHBpK0NZS0oxdVBKemZNN1ZRcXFYbmpKU2VNTmRQVVB6NWdCcC9pT0M0Kzl6WklaNmhMZUNWN1ZGS0Fjc0hrWk82NFh4Tm5LOFRPVTFJZStYRGtNK3JtVHNRcE9wYWMzY0ljL3pYSWYyRjRsQkZaTlB4dWUwMnQrSDMyZGIrVXkxblFJb00yU2E1TU1hM3pXdGNqZmRVakZHR3BoQ2U4ekxTS2RlU1l5Z1RUMkxrdmsxRHE0Y3FLeFFZekpIOUtVbUJJSzduaDY4YXJrZWVoYzBRRytZUlF1REo5UGQ2eWl5NDVpRTQyaFZvdjE2eU5rWThzUmQ0MHgxU1RvblhFV0MrRk9oR1NqVTlGRVNablRLeVdmU3doNEpTb3VodWVPMEV2enBRZFdFZGRTOUcwVFlyb09rUzMzTG53NHl3UG40Z200Y0RSTnJ3UmU0RWJRYTFwNUo3MFJNSnljWEY0V2Fwb0NCa3hESVdQcXJCbU9zRHZyUFN0QVdSREw4RjhuSXNUWjlPbUhwSmdPd1ZHTzRPclgyQ3Nla292dEpUSjN6RjlXSlV4dkVLZVlRQmhqZVdwdllrY3AxVUJVNVBEWTRrN3prYUdDT3VlT3VibDhucm03VGRkejF4ckZqRno5MmVqb0VDSStZMkpXSWxrdkNrVUROQ1BPVUJQODdWNCtrbzdIWi9ZTnFZZ1NoNWYwUEpkZEk4eGJrMDliSFFJbU5uR0oyZDJGSWQ1bTdaeno3dXJYSFpWbHdMSWMveFF2bHhQOFIzRDNWZnk1RGdUZXFSYXFrcnBvUlU0dkdldFNPWlhhaXl1N2RmYjMyVWJrcGJHVHRoMFA0S3ZXeVc2Znp2OG5ocEZUQ2NNaktlbUxrUmllMGxqNDMzYmxmbDhOK0RxY2lBNEVIT25hTS90Y0RQNEVSVlZ1WWhjOHlMQmV2cDdCR0tuU01pV0xZc0RacU8rUEMzT1ZFNndnSjFXWDBudW1OOERXOWwvQ3lPSEdhL3F0UlFVNTJYdW9ucWVlL1RSM2hkdXczSUNMVmRQdEtRNmlZV0dhUVNwSHY3N2podFNMa25QaGFxU2F0ank2MkJtUDhTclpQY2wxaVh5dmNONUtFd1pid1g4clhZeGtJY0ZlSDVVK0JHaVRzR3g1OWhOY0R0a3JaREg0eEo4Qk5RR210MXZZR05rbmY3ZU5MS0xWWXBlaWExMSszUXpQVzJxSjZOQ3Y0d1FCdEExWFdQa1RwQVVWbjhoK3dwUExlcnh2OWVmN08rNFBveW9JRk9BN1RCUkNRTzViYU9TdXN2eTlOaVlVOVA1ajhLZzNWLytnUlpzT2pxMVRzbUYwdUxNSjhKai9EdUFiN2tBVmxZeUZXTit1cjVicE5RVG5ZV1dLL1dpMWNSdFRDU0ZRNm9vOElDYnFDYmZhSDZVTkU3WlFYYzFrUUJTVTRycmNUTHRFc0NIcUZRT0NEME5LbC9GdXE4OXF0SDBWMTJvM2ZJT0RYUWppR2Vrck9VdXpkVURra0ZVRkwxUCszeVc1N0tzQ2FMaVFQQW5JdnVENi9CVm40elVyRFdSSDJJbEM3YXdSUlJBQ2M1Y21rL3lienRkZm84aWVpTXdYWUhHZC9ZSlpBZEJ4dWlJNnhlTWxjTzhhYWJEb2FwWFFIc3Rsc3VlY1FyV1o3c3IvT2JRMEJ3OG5keTlya0d1VlIxWXlxR1J0MGk0Q2RZZ2xMdzNwalhEWDZLUXpKUCtwcUJwemhNK09MdTBaOEMvR0xpQzZkSWJ1MDZnQlhIcFlueFVZbnFMd2liR25rVkJ1L2puVWFNckNtd0c1RmlDM2t0UHJOTXRSOVZmWXpkV01IYktoMDhQUjRYYUhCRG9Qd0N0eUsxQ1cxQkR3YVZjTlpYTmo5Y0VhTGhXbVZ6WVFmZ245TVNSWGRNVHY1YUErcEQwUGF4cGkzQkZuKzAwQUpOZ2hKYXI5QUJwd3J1MC9HeG9JWjRMVW1oWWJzZUNWOUdwL1FIKzV5c25NTHNFeEFWYjM4aUF0T2NjcU5td09yOTFCblFET3NJdFZqSmhyYkZLSjcrRm56Q2h1NGlKOEtNeks0TlliRGJMaVBpMG8rc2dpdzlMNzNYM0RCSVN3MGNqaXRuRWNCdDlEdjZZcFVmNkRvQThtangxU05MTDN6d2pBbitJTVhQWFFqRTkrcVFLNkpyUEJpTk1qNnZXYUdjakNGRzJMV09XdFFrZDR2dkhoNUhpZVVqVGtxZ2FlS1J5eDhURzNtd3pSMnN2ZytMK0pVaUFXRVJyTWFlOGJ3dmtkYzd3RFdBS3VZNFBRRkNaVmhSOTNGOUtjQzc2RkVZaWZyN1F6YW4rMk0vT1Q1dEVpLzFPZE82cUxKVGhMNmh2YWt0eGNJTk16OTYwdFdjZGdxNGZRK3hmQmdxOHJDRjFBY0ZZSDZCbFowWjlpK0J0K3ROQktFWWhnb1ZQV1ZuajFLaWJCZHdmZkkydjBuRGRmaFg3dW45SXFyUG5ueDE0MzZneWQ3UHE2QU5VWHoxL0NybFdrNmdOeHB4ckZZMzJPT25VSk5UMDJOSWRFVmpHbmNtbFlvYzE2bE9oczZKdkVvT3RlQVNYaVNmQkgvUWxMZExITUF4eWdNcHp6SndPKzkvS1hHSXp3TGdGSThTdlhBZXF5Rk5kZ2VxWmhnZmFiL3cxbDVwRERMY1E5dkFlUEZOeG9YRDNNU2ZWUy9IWURQa2JFV1VNTmsxTjZWOXVnc3kya3MwNjRxcS8zaFAxSzVnYkZyR25rM25RT3R4Qnc3MWtsTWhJcmNXdXdHbWwyVElUdWJpNDBFVERWNDBiRDZsVWpYTjJLU0k3Y2ZNS0hNWEtYWUtWT2dJZU1SYVRHTHg5RHM4cXQ0dVhucVNwYy9RS204cUY1VjF1TDFNNFBBWjZvVW42TVdKTUpZUEhPaUdieWtJbnptY2dLUkUrSWp0OWJ3cHpmQnh6MkdGVzF6RW4zM3NFT3BQV1RCNHdadm9kT0pwYStmekxoR01aYUZJNTNZR2hweGpTajZIMDZ2cExCbHU3U2ErSVp5U2NuYU1RWHF4bENrdUxYODdIbldnd3RkTDF4R3d3RG9BRE9NRUFPZU5oc0VlTzFFaCttcUVMVVNDbUdMWkFOUjJwNCswdTM4bUszaTNwTmVLVzhlMUdqbUhDMmpOODU1cElXQ2FIcGo0N1JBWjV0SUgzZ3NrUTJ2VmlCeTdYampMRmRKU1N1VEFmVG51aXJ2RnJrNWpWVXA5RUl4RjZrNXo0TWdwWEZYY0NxY0Rubm9IdHpnckRBS0pTeGoyMVppSFVxRHBWTmV5eFAwNFUwRUV5VFV1Ym5IR3hGejVsUndCL0JzeVpDMTN0eSs4MW9HYlBtNlc4c0RUVG91azBUUG9yTWVqYTZDaUVLNUlCaDllUEpvbzVLY2tua2p3ZUI1dStOa3pja1A2cHczWXI4eC9xc0QzQTNicXYxa05qSkdGeVJOL0JwWmNtK0VOclZyZEIrb21hYjdKZndmOXpBUFhWRTZ0UnIrSUhrcmRCUXVienlab3dzVTR3ZGFlTnpDb05BYzBvQ092bEdUOEN3UzNoaU9rNkJNekVMVUk0bFNIanE5VEhQSDB6WERHdmdJdGlrdXo5WHQyR3FxVWtoelNRQ1JOaitGREllbVlOYnZDcklJSW5KYWVoQktSWXcrdFQ4WiswejhJNjhCNHdXMnNvb0VSVTNYWlVndFJBa0pUS2tHb2NKUytuOENYVFVFNng4WFdmVGZLS1R1NEFwTHRtM2N6cDNZdlVZRGc4VjAxWHhiUTRxNzZudFRiR2VoSEIzcnZEdzYxcXVzVVV2T1dIbmZ3Wkl3aUtaQkpxb05jdXdSY29LTG5rTmxGcXhCYkJtdGZtbVpVcjdvZW8vM2RuZDZNd1hIUWswYkdhN0FjUEJrR1lnbkhQMlVaWkd6QVh5eE1uMS9FeTMzbjEyTGlXbVg0SXRWMU0yU1Y0QlRERkpieCs1eG5mN0VvdFpoWW80U1hTNFJHN00wemFsbzh0QzFMMTVEenFheCtxOGtoQWQwQk1ldnZhUWIxQStTWXE3ZXREZ0R6bXgyekdOVHJGMzVkVy9kNVFsTGZnV3kwQmZwMnppdVp5OVJ4dnRBamhMSkFKUEZOWXQ2ZVBZRmVvbEpiUW1pdWpCZmNRUDdLSHNZWHFFdVBRU00vU2I0UEJBRUh4Z0xlaXE1SE50T3RFNCs4dFdaSFJ5aFFtbEFrb2ErQkxKbW9FSFZRSUc4TGF2ZC92NVEvQWViVktrZFo5WnpGb21tbXoxMVNaY3VVc2FPakxDVEhwTWp4NytRazVMZitkeUVkN2tNOGprclJ0SjZkdDBvL3ZrQ2hCNm9EclZTeUNWdk9vaDZJeDRLVEphbUM4K3BuaUtSdzZab0prWWNhZlFmdndlaTA5UHJ3YWlBSGRLeUQ0czdGY1RTdjh2MWFlQjRMc3VJRXo4RnpBaEZLRC9FbzZBOTZSTFowRHgwbmF5ME5Lam5pSVVtUEpGaFhFVE1yaGtPaFVDZGFsMWkzRnM2dDhQcy9lcVhNN3Z1V01zYlowM2s2Ny9tVzhZR0czTmZ3ekxLMHB5UVR3SUdiV1VwU2FYQWh2UDdEa1JueE5JVDVTSUhSNCtvOVVsNkxPV2tiUDJXVlJGcDZ2L0pvZmttU0hiN2F2ZjJJSWNzMTIvQjl4Ym0rd3FOUFlubEorWURJT2JVbXo3NjluaWtYMVorSThSSVdiYXRoMnhVTGg3aHp5YmJnNzRJTDQvbGdNVmxQVUdCcW1UMmExS2JpVjM3dk1BN1R6SXNYZ2NDVVJaSThlazhHbXpCYTgyRDVTVmRZeEI5dDNmT0I5bld2MGo0bGE4YjhORXQxdFhCM3Z1R2hQaVgzWGFsU3BpcEh6YUs5ZUtEUFFxc0o5Q3FoMmhtS1k3QmprVTVScG94cHpQZHNCbU5ab243bVZPWkJhN2srVzRwaUhQUjUyTFJKME0rOTdoMGkza2xnZnVjZWRvOXNicUFabzB4Qmh6bFZlR1QrenlCRkhLTk5PZXJFVzlEYUczbmdLdFNvdTJGKzJZa0xNNWloZ2tyUTJPc3BZa0tZNUdnb1BVZGtwdFkxMGVhMjZyVlR0Z1pZYUJFYVRDZDZneDNQclFGOTd3TG5tWFRCWGxGL2pTVWlwWkt2NU9CWTdNLzZsUXJyVURKTWh5QmtlcytYend4bGJLbDIrVktpZDZLZUo4Rm8yUlFlUVlUbkRkc0JWRVY1RmdKRjlrZWtaS1k2djZ0bjg4UTNiektjOHp2MUlwOXpzSnZMN2FPdXViNER2dU1uSXpNM2NjNFlhV0MrNzlPdUdTdS9NNzRYTXowM1laOTdiT3BsYWZXQ1V6cXBEWXlxV0s1ei8zYW5NcHhlNWc0NWlCbWhYWFkvUkJKV3ExaHpwL2dGdDYxSW9neUhLeUhWWlJqekZhZjgxQ09wZlp3bmtvdktFRE91MzlRSGhXOVoveVF5SHlTY1JRYUpkbHZZcUFsNXRUdXRYSGZZK1QwcnlCWUZBdU9rMGNobFhEVHBFZ0ZjbDlCUFdaUFBleGNxdHlKSW9ybHhhT0Y5a1FQanJDU08xODU2eVJ5Y0NETzhSTGl2a0dVQjRZYVBCZ2Q4R1ZyL0RoUXZxcjZtTDBYODNKODZldjdDUHkzS2hnR2JjQlV3VDczald3Wk1qalE0MmZpcWM3QXFON0NETDRzMU4zUHhzRDNyUklQbVdvUFdqODFtQlJHYmtlekRrNS9aUzk2bGpvbm9MN1E3WFF5OHY5d1VsSWkyaGhNNW5jVElJN1NMQTRmZ0IrMlNmWDlsdkI2cXdvY0JxMGx2OTZITFJhWERIN1IxYzYvOW1RdU84K0FIYU9rWk9QcHRtbC8zZGMyOThTSHNhSVBFd1dYRTVOU202K29TajdwYzF1eVRXRVhsZGlqYVZsSTA2dys0cWVnbmJybE9iOFZyMm5Cdkl1RXU0djYwbEZ3bUd2YzQ1WHlycHNuV2xGL1JrcWdaK05rMGZGZE42RHp3Qk1uM1h1S294ejROWFJhamwxbHhSNHpuVkd3MU1WdkxGa01XU0FIL2FWWFN5dmZ4VEw2YjJTR0pvc2JrUHRsdzhOVWpzdXJVNEFraXErWGNxaHJoOXY0STR4emh6RG1KWkVxN1NhWUJ5NmlIeFNBYmZXZ2FkRmtXS3ZIWG5ZaGxzMmFxTEZMVkRNNWRyTWZsM093MW5NYjFGN2VqTmdTY2pxdFNTZVExSlk3cDJoMlR3YXFBNmEvMEVIckIvUGxkZ1ZZZ2ZIeTFpNldYMUVSV080RmpFOVFLcUpVeG8ydHFXekZoT01MNnh2OVpFOVFFaUU0dURWUVdrWi9KcVVnRWsva0YwV3hLTExVUkFWOFcxekJXSTd2VlYvdThzd0J0UU8rZENTejhObytQVXNERklhTFlrSEhQd3A4TlZxd25DQTFPcWxaYTR5Y1ZwbkF1MXNUV2lMNWxNNnZiM3VkQmVqaHQ3SGkwZ0I2UGhqdDJyb2huYUdYcWRpQndmK2dCMW5PeU1rRStSbWZhYzY4T2lGemdyeG5DZ09SUVpCRkVIdFN6d0VVWW5lMDJyZ2wweCt3VndaZUcvRGE0WC9SZWJBSzBCU21jOG1ZWUxIN2lUYzAxWjh2ZjQvRFc5MUs4c3EzTkNlNG9SSHVuUHZJcUwwSGE5NllrNVkrS3VhT1hMek5GLzNJcXFsTWFxSG9MOWh1Y2R6Q2JDZC9lUnJFZDhycGZ6S0N3cml4dytKd3FndzJKNURoK1MvNVBzU0RHekl1WkZBbURSbW00S2ZjVXVxQTlpUVF0M2dxZ2pwTFd3OGRxS0xOTjZoR244cmN6N2NHTndrd2U3UmdYUmtKQWhZWHI4ZVlkSnJsSVpLWExFWTVXMGMzc0E2ekpxWENrbW5GcTAyVk1yRVkzZVhkcFdHLzJVQndtVUVYNlh5SjVtWnVOM0lmZ0o1eEZRN2FneXBmYkRDNHhrUlpqK1ROS3N3Z29LSURsN1l1NFE2VWc5aGVBS1NiclZLMzU4QXlKTnloZDlGN2M3YTBKL1RzRnNobXdoai9hekkrV3FXM1FmeG5Gd3BQWjg1clVPM1JpeXBkNjl4RDdHbHhrUVVzdWRLZ3MrQkExVmtxYlY4WW5NbkJnUkRtT2w3eWN4U1dSTWdvT28wYmV3RG1pM1ZMaS8xZG14TkxURnB1cTF2ZHNvRys5aHhSUTdvQVk4bDlkaktYN2VsRjZHdGRZSUdya2tvUGlaRkpPTFlRb29EaEk3dk1PTllyT2tIOWZqd0VXY1RKaWg4QjJqUVk5YXFIRm4vNWx5aVpPektNaFZaWFFtZ1U2VFV2bzVWa1Zac2NzMTlLcmEwR1JhalVkVlgxOCtOZjlpVVZqNXpxUmFENjhKZW5ESndMb1l3MHVtRXBRdTd1NWppV2x2enFZZ0F6WWx3elhXZXZONUIxZEJEUDZkY0NGeWRlUGNvNjdxYmhqTU9NdDdrSWdlZlIxMVROZHFNaFJyT3dXYkZISGZEVVNXNmE2KytZamdMWjlGWGVBMzZTWFNPaGhoNjcycGg0VWFNQzZXZlpJcHRHTkxzR1F6Z0dDVXp5N3JZSXU1T2JqcjMrcUhQTHFxTGsxb0hHZFJZbVdMdjF2RmNpTXY5Tnc0VjdIZHJwaitRK1QvaEpvd1VLTXFHK2U3c3JSOXRRMXZ1QThPUm9GZ3BrV0I4N0J0NHlxVmh5NU9GQ2gyNXlGRFVxZVVnY01XaE1BYXZVcWFuRWFNdW83VjNwUnY5L0pPNjBMS3U3M05LUllEZ3E5Qm1iTkh1dEZqRUtiNDVBdmV2Z1FTazNHUXpIdUVWSW1rZEt3Uk0yMFhuc1dKQVgrdzNtakN6RVk5eHl1NTlzVHNWc00zMTZoVU40ZE5FNVNUWjF1d21neFVWazI5TkFQZzc5Z1FrWXVSSGt1M3hJWGFBVTZSVDROYnFIYy9rQ3BGTjhYQk9YazAzdkc3S2plZ2ozYnNTb2RZZTVMbHZPem42d2phSFBYdmNaNFNxaW5rcGN6dHV0a1lHSnlESmpKZVZDYUcrZzhRZWkrb0MzTWt6cm5VU1R2RTBzcGtlQVlnbnI4UkJLdDIvaDh5a2dQODFiOHY2Nko3elFPRzFIUHFkVHJjaHJTNEtlakhjYVVFMzBFQWt5eTVlSkMvMGp6N0Vkc1pseHJNSWhDNURDSE95MmRrdHRGakNIaEJ6cytqNmhDRFlhMnNWVjBUMFhFUEw3K1JWRjJDOVFEalFLZElBV1J2bjRhcjNYQUNuU1JZYVkzL0Urd3duTHNKWlo4ZENWaTBUOFVZdEpvTTBDK0pvVld0TmljdVNJWEZOeWxoREVYY05oSC9MOFJBOWN4TXBRa2lzbHIwT3ZEWVMrQmlYMWRXM21TcjVHNjhTN25aa05MR1Y5RElWNHhYZ0lkMFFybUxRLzJxeWhtVXFlQkZOek9TK0VWR0lOeVFzU3lYVmUvSWd3L016NFdvTkdxS0IrQ3FyOTA0UWRROU0yVHZDVVBmaFRQTmF0bHczVkFGWnBjcU0xaVJkTDJRMXkvSlRDMTJOUlpkVE9ncWsvTG9aUUljaldZT1RzQTltdG1udGlqQ3dld3NTUFJzVWJuUzVYdUJpT1FSeGZaQWdXY0ZnQ0VLWit0Y2dnK1B4NXpkMlFra3ZxWnVobmZjRHVHSWFqdEN3RlVscHY1cDJjUmtKQXRMUGtTR09VWnl4OG1BU2I5YnREdDExMFF0WStFMXJNZzFMeVpya2g1YWdzMjNFVWVHU0ZSd1huK3dpTHFxcTU3aHk3NUtsMVhQS0hMNWprU0s1S2JBbTIvSWloSnd0dW5lSVZ5TkxDRE1MQzArM2tmZi9LSlVNcTV1eFFjdXIzbC91eWJuOGwveVc5YXB0OHk4WjJRcTBNVlBPMW40NW5BTk4wL0RjUDBUQm5UdFhjVEJxQlUwTGIwOWQ1WngzR3A4MmdmbW5tWHpwRVpQRWdNZDJTcEY2WFlsNXp2S0pGNU5qVi9XbTBjY1JCellaMWtDdjRVSjZpeW93dDA5UG13RnhKcG45QS82aWdiaTJzcDNYQ2dCajJ2aTVEeU51YnhIMk1Yb0VkU2JQN2xKSmxFNlBUd3F2VnBrT3d3c1c3a1VnVUtYVUx4NjJISFE3N0RxOXJmOFlzN0FUSnNVcWZZYXFRam9xaU5BdlhCSnJ1ekx6S0RTbU9wanV3aDVDQjZOWU1FenJiUkFWZTl0cksvSXdlOTJ6MmgzQXhsSFJRWVZ2RTRJT2cvbVBDaEMzNDVnTDVsb2JmaVpiVmxraFozcDdVMnZJaFpKMm9NRGJxbzBzT1U2cjI4bjNkdFZ3ZTlUZEFrZ1VISWNuNEFZejEwdXZZZGh4NGZZVS90UmpmNjc3NzVDZ0t2dDdwVnE5aGl0cXFKYmc4NEUzdWJBemd2OTVXZHUydUd3eEJRT3RpLzdaVTVqajlZNHlldnVWWitKWWRGUWYzZHREdlNSam5kYjduSUt4NlU2K1FacGZFU1QyUWhOVXhPakIrekYvSENLeS93dVFLNTgvdHRsbjVGNmVsSGRGU3p1clNWL2VqWUxZNWFjenJZNkc0cXVnT3dTOWlTVHFab0M3WFhVUTFtWWQrT2d0bmdaTmtGQUsxNUhYR1oyckJNNTBHdy8ySkN4dUt6cTdNK0FCNFdaM0plQy9vMy9SWlNsUzZOQU9VektQVmhkQmhJMjgwS09Xb0VpNU83dUZWb04vSEJhVk02dlNWQTgyTDJPWmpNOTdTZC9RVllIUmFMRkVkUnZkU005dEV2MS8rRWtMRnA5UjRKU1Uvb1d1SVF3YUFlRytGelMyd0N3dU9vSVZKamFhUU1aUGtuWmFGVDBoYWVVSWgxS3B1WXZ5YjVUaE92YWpSWG5pS2dRS2cxWXRHcE4vQWVRSGo5UTc3NXdFd2NDR0ZrUkFMT1Nta2hnMjBtV0JLZTZjZUJHRFh0TmlaakE5NmZ3WVkxQ3k5WEJGOXRoMHdoQldzaGNiYUZaY0xsdmlGZjA4Mkx1TVVud0hxZHdJUGtBS2NkWVdYdEpzMjFmQWFKOTBjaWgvQ3JwaXpUdkMxQlZJWkdKbzNDWjY4UEpTSWpIL1FrWW4vUklIYzhkL3NTMVNvbzVKVCtkb3ZqdXV1ZzFiSWpKTzh0N1lidUVBanowVFl1V1FZelRPV2VhZmZJSHYxc1JySGNBSENWYkQ1bjl5a0dGTHEyZnFCQ3RIckl0cHBmaGUzNFVrLy9BRFZ0Y0ZTSU1jMlh4amQzUnVCTzdTc0xTYnpZeXFwOEFNTzc5RFZZWnlEOHZhQ0tOdEYwcWZYdGhyNWp4NFZ1aEt1VGI0YlhKNUR3K3BCajBmV2l6ejlvUlhZYnp5bjc2VElaaEtBSmFtOGVsWE5qWnY5UU5hMXdydlM1cWZZQXZjQ3pEbEdMZFp0ODhrZXRiUnlWcmxpRWJoU1BvNGZDUkNmNUxONGQ2Y09vZGM2a3Q1L3JORElZV0Q4eE5FQnhOQ2wzbU9hZ3FKYU1TY3lrOXIyTTN1ZWdHRjJwU3htSWRtcEtYb0NZdE81NjdBc3ViTkEvYS80dklzQWJOSFIvRWxwTDUxMFJDbVp6N0RaV3ZhWnZTYUpreGdjRXcyb2tIcWV5NU9Xanh3RG0yd1cxNW80NGFpeTJEaUpUbjJETmpkdUx6Q3lHNHI0bXF0SXAwZ1E2L2lrYndMVnVMUHlzTzFUYjYxekRyNTlnQUovK2R0am9oMFhsUDNtQkNvZHAycGlJWTVpWUQzWEZLV3Q3T0YvS3VnYWVhdDAzYTltYlg3TitNZjRxZEV2Rlg3Tlg3UkpMcWp5SFltWHA5cll3Y1dkdUVLQyt2M3prS1pnWGFqVkFqZXVEenFMSTNFOHdSMmZIczByZ01ydkkxUWR3M0dvWjRlN0l4SUZxdWVGSDFSTWVuMStEYlpsZzgyR3puWnMwL21zZnVQYm9KSVRJZUhnbWduUkZOOStWdjFRRUdRdURhbEpab0xXWlFMVytlbTBvNXdWN0Z1N0g3a0ladktmVUxkeXVvUDh3RktEejE2QnZOWkEvZG9oa2xXNHBRRlFHRlhSTkJXWUZtb0NyVGNKS3lkUkYwYVVPSWRVelBuUS9HanlEbEZ3cGNvOTc5TEdYdWU3NTBENWxhaDl6OTU3K04rcVdlZjgzUGRhSGZ1aTFZTXg2OXN6N2J4bFdDVmc3VjU1SVovbUdrV0hkWmhsNU9MMmZBVHRLMGpaamZyQVNKTUlKb1ZBdTlVeWJQZWtmNXg4ZXdrMW93azVXVGJhbkR2V044Q1FnVnFFRjZXblZ2dURMaThEazIwdkhCeXFGQ0VZeHNpZHo2Uk9EKzBPdVFVaDJHbjNNbWoreGhuZTcydGpFU1FvNitzcGFhTitydTRQWkp6V09WbG5wNXRYSnM4dmpzVUdETzFaL1lUZzkvcTFLaDlaSkphUEM2REdEbE9rbEo3RjdGWUhDOWpUTFpMSGthMUtRTms5TmpxZlBablZOUG56cDlyYkM5TTFFNEFzTW9CYldEWGw0bS9aN095bmFkWW9HWTNibGVpNFpWWm56RWZVcThEMWY5TUpZRVRtV3AxWFp1YmZjTFV0L2Y0VUh6dDMrMFFOaVFSTnk1Vmw1bEVoQXpZVWJBSGkzMFZXOER2S3g3dlU1ejJmRTBKSU9UdjZlZXJHek1vK3Z6WnFaUjlXMG5jbytEMmJ2RWxoMVVSbmt3cjVMbFp3T0JqMUQ3RncvRlRwNFFyR0ErdHFMYmcwY0JVeHlPSS9tYWQ0ZkpqT0R4Ni8xV3hVR1JZQUtYcENBSFlDZTBvaEFWREIrQm11QlRoSEF6eFdqZ3JGS1pCb1l3Yk9udUkzY1BrMXZ1RHRYQlVZV3BjMmFtMmwyVEVvcTlva0lXekMyM1NZZzA4YkN5ZG5iZ0NWcWMrdTVPTU1NTjZWVGJiYkFRNnBIclpJMExCeVNpNmFrVmVCUUE0NFZpSXpFOFFwNzk2OUlDR1hUdUs4SmNPN2F2RGlCMmJtRGFJa2tvRWJUbk9vOEYwcUN5dlZ4bUN3UGxpR2Z1WHlqYjUrM0VXY0xJWDZiR1RodjRKZ0lMSHhOVmEzQWozTDVLY0FYcWpubHVVSDBhZlprbXJPbHlyN3NWTktINWxFUkNjVmFWSERRQXFyQVRuUjBmR1dRTDRsSk9scWJMc0lTY2hoK3liNEFlclVvT08zYnYxR213eHIxc01qTFdzVWtNNXdLTklZRE4yUVdBcDRlT05SZUhqMzhuL1VvZEF5V0hjR0JnQms5WkdJdkd0VmlRN0tHZ0Z1ZWFVWW5MT2JsMFZUbEt5NUM5OVRZNlM0VFI3U2NCdkpxYmhRdW1EQXQwRGRZRUJKY1RpUnpGTXlLQ1hEeHgwTEgyRnFpRE1uSk9VT3NmeDZqWG9iUWhSZFZPLzR5aWx1MWx2c1ducEUvdnpNWXRmcS90RVFlR1Rsb2w0b1puVnJQQ2VROVdiUXVoOHZTeDB6L1FJdktJakVuMElNYmhWcDlldDFWd2h0amNmZ0NxOGs2RzNmY2JVMzhmalpFS09hNlRUam82dXNpc3RCUktJRHkxODg4Um1ld3VMNTJWZUQxSWFjRWIzbnJmSGloYjJJYlpITHNjamZ4Zjl4UVg1LzlZY3llRFA3Q0dQTWlCemViN2FwV3hYUnJsbWNNQjdmcWUxY3lUTTRaSmJYeXlmRVNkcm5zUjM1cXM0aGtoZGJUZk9KM2s1bm93cDF3VFEyZUxobDFWNUdGK1BUVHN4K0ZJUWo2NlJ4UVV3TXJ0VzcvY1VNcEwxVm5zUDJ5SXhiWkR1ejAyc1VNQjRBYlBkZHR4NnlLL3pYR1ZPeE5iVDZsS3BFaHFacSt3Y2hvaU1ZbDBGZDFFSUZhVm0zTmdXUURQRVh5clA0ZWQ1dzRqMy82OUtGYjEvQTh1YnhHci8wVzdEZzRjMjN5MkozSXIrOVVmeithRU5SUit3NGkwTnNzMy9rZGtHOUFBZkJxMW1GcnBBUjlsL1pQQmk3VWhxYlBkUEJNODE1WmYvaDNZUWlrdE81US8yRWw1Q3ViSkorMjZhSzltblhFMEJydlNHcEtwVW1pNWhEN0R5YXRwbnphZ09uc0orbXBSMUN4L29SZnpyNTJvbUFZN05MT1U5ZGlVTTN2T2FUb1lQVWp1UjJxb0Ezd1c4ZkRSVjVndTdtNUtrd2phUEJ3OUJvejY4TlpwZ213TzkyQk5GcGR0em82YkZJSlR0cWt2SkczblBHV2NEMklMQ2dCeDllYmkyemJGcUhJR3RWK1RqUEwydDZpLzNBSWJ4Y2Q3b2g1aW1vNjA5eVBRMTczK2g5dzJ3Q3poYll3R3ZqVDJwQTBSVzRrQXk1TmVHeTFZNllnNHgrMjdndU9oNXMzM2poMHBwcHBtYVowRXhvYSsyNWM5S3JZc29oaTYzSHdmVFhaNHVaMG1BazRqOHhJQ1RJeVcyR09QMXNrVzlWSU0wdkZoK3pmSVV3QmtONVdOQjh3dlozczJOZHFpb2VZbFlNc05keXYyaHQ4ZVZUZHhJZWFzYTM4ejlpOFhHZW1vTjloSXR1WTU0WU5BQW51R3B3T3VyLzBHeXBlUm9VcDlKVHNJNXpEaTQvaHZYenlkaUpRYjRxMlRmWW5ZWUI0YWFrZFVqZ1EwQjhtVFN6eVh5UEo5UEl6MENSOFBjZjF3V3ZmeEMxM2NNQU5sU0lUU0s3TzFOMHNHbUNqUWJseWRpVVVqZmZuNzlRZDBnQXdJZ0dQUkFLaFJURG5zOXQ4ZVVBa2hPWXpLQXhaSkYxSTF6TXFFRUJyZEhKZEhlUm5uQWVCODRha2RsTTU3K0NFU3ZDczB0aVlKL0FSdmZGdUJwc3UyZEJyTTBabXhvaS9RU1BjbThxVy9YT3RsVFYyUjFxV3MwVkZROU5aOEdtMy9Yc2ViK2YyZkF5ZTZNeDFVTzIxTEdRWFhLMWYxZFpFUTlCcnUrcDMrb0tPUzMvemFhZjE2U28yd0hNczdOeVI0UUhJYVVFdVhXN2EyM0c4Y3RZdjJRL0prb2sxdFNZK2NVbDgrT29ZZkg2WDNmNmFQb2NJcGw3VHE5MWFnd1o5T0RORkV2WU5sWTJGU2tzTW8yb1oxNnNPSXQ5aDNaRUorQ3o4dXJmWi9lQUlkQ2RLUnl6M1BxWXk0d3UreXR3QU1qWk9wRndMSklwR3FEcTRvQTVhYUVsWmVhclVhRVprVnZGa3VzK1lxYnB4L0lJajBIelRRM1owaWZlcXRCeDE3Z0pSbEtsbTZKWU85YlJ3NUdPTG5ISkY1VkQybFpPZFRGOHplM3d2L01wRXdpb1BrczNtcUo1ZnRuaCt2aktVWXlOSVIyaGdHdFBHV1JkaUxMRzFTbUJJUjZFbkZxMGVBU1FPeUhXbmp4YjFoRWowS05HUTcreWNnK3Y4VkxZdUpCU2Rsc1JsN25wcW1HcEd4SmRQVjFzZ2pYb0pIOEUyakU0NlFqTVNwL2l4ZklEN3NtZGhPRjVQUUNnTDdJdnREZmN0RUtqalY4UzlPV0U2VXVnMWE2aXlOTnZvbENFYWtOL1pBWHVNWUR0eDlDSWJDNkJtbmwzUVd1VDd6ZUJabDVKa1dGS1NhNDg1d082elpMN2hBRDYrc2lPYTAvWjNqMldiZ2dETjFsT3lRQjkvZVVsRmFvcEpvYXNudXBUdE1QOGdKUWNOZENWVXliMVJxbUpSRE1sM0lHZE0xdk1sam42eU5mODJ4cWhzdHRFQUhGSE5XNk1Eci9CYTllbDFOZDE2WXVQU3FDcXhjMWdyUGp4SUxLdTVxMkM4TWJRdzF2cFd1eDBFMlJiNThLOGVYVGxUUjEyaVJPNkI1cUFLTDlvUVRsQXE0UksyVXFpRmtGU1V0azhlUGovZVpYczF5ZkxSbUpzMUl0akZRbnAvQ2NzQzRVY0I5NGg5MVBIeFdXTEVCbHFZNXkyZ0N1YzFDK1dDQ0M2ZDc0RXFEUzc3TDlpdnRDc0hRY1JENVI1bVlJTWhXWTdqS3dUS3FFTTh5UXJseGo0VFhSODVCN1Z5REpRTm9DdkFNQ3BaTW9jUzZOODV5c3Q1OEdtS2N0ZG5qOUhlSTRHOFZvTm1oZXEzc3U1aTluRFd6VTVnVkhmdjlScjFIQWVVUU9sTGgxYzljOUh1c2pDaUtUcS9aUkNkd2V0K0VHWFl1eVJMYmdsYWxmUEQ1aVpTc1dCbE81WFJvNXZabGpWdHNOdGsva01pem1hRHAwa3ZReEwyN3BFcHNjTUY0RERoRFk3cmtZSTRVMk0vMmZFTjlCdmZxY1ZZZlc5aWR6cDZ3NzI4RkFWYXVLTHM0VGV1NWdLNExLbjE1Sk51OTlRN2pMWE9rT3hKdS9uc0ZEei9Nd2NpYUJhb3FHK3l0bnVPbUxDRFlwNFdYRTc1Z2FHQTkwZzBBQjRtNGh6OEJDeGU3NjljblR4bTkzVlkxWWZaSVFNeGJiZElCeXp2ay9mSVE1QThuenl0aEpka2ZINXNMM01GRnVUUUlzMjlObkdreVFHei9IVDh4NXR0WFBnRDJmbFVXR2IyaXVxaC8zajBydjVrTkpxRVJVZXArMmZUTWVScTZGMWFWSmgyZ2c5d2xTYmhhUUNXVGVvQmhVRFhQeVVtTmVmTTVQQk1sMXAwUFFWL3JEcEpxeThnNWEyaDJvb0xBaW9iN1V4OEpKU25nTTlibE9uWW41cTRjQ09OZTM2a2tUTklZSGNjaWdVdnplVTU3TXcrMHprM2R1QmFNRzBMZzMxM2UweE4wVFVoN2NaamM5TnhkemgwRm9uWUF5UUgva2YrNWNGY1I0SGdGd0Z1azVYQm5mNVVKRHI2dW1STVF2NVZvUnVDNHJ5SVYyay9xdkRHbkVrc2NVLzFudUE5aWdpZEJWSDZWZkhzMXJmN0h5TTFPc1NYSzZIemNLQlNPK3NWSHU4R1UvSEJnaStLTmp4L0I2UkxtdWZZTExvcHB3d05kT25TZGh5MmpONDhIcjFLd3hla2N3Z0wxUzB6RzRIS25tMGFadHBEKzVXQi9QTzIvVnUvNk90SzcwclkySCtUTElXV1BreTF4MVdGOVN5T1lzeWJ4a2FBeFNiZFZLcEZrQ3UwYWtIUllYR1pHQTJHSTNyamp4cEdCc0tWVEw4Zmt1ZWVkWjBHWTVyaFp3VXVhYWU3MHhDQ3FmN1k3YWxFSFhEeSs0Qnp1R2hTbHR6eGFpZFBXUnd3VjJNM3hxMWtKWlRmWFZEbHJnZkQ1eERhZSsrZmNiL0F0YVdHdURhT1pIR3JnQy93Y0tlUHJLSUZPeE9rSmhyVXN1aEVWNEpNK082RHkzc1dFcFdhRWdieS9IK2lsQzdtbmdtakxpd2JhZ1I0Y2tIYzltWFN6a21rajJVcm1jMUxuU01zTkNOem9aYTdHVEQyRC85SmJNMVdmQ0VXcTZrdDZTaGhwcmhpZnovTHhZcHE1VWRBa3I4cnRNZnlRWVFrcVF2MTlBZmJMdUliY3hna0lweHU4aG02ZC90T2RDSFpmb3pRRU14d0kyczkrS2VIS29rNEJoaHdMa0VwdU5uUGQwNmdiMUc5RjVuVUo5MStuYnRkczVVbENEQjF0RWU0TGU1VmpqTXdIS05waHQ1UHlEQ1VqNnB6YTY5ZzRKcjBBaURwanFkR3NpbFNiOE1FMll2bGdNZEwwV1BPZGcybGlVZTQ2YWQzR3BYVEIxTFVmQnYxU0llMklOOVNLQ1I3MTZVMzN1T3NPNDE0bGxVVGViK0xKQUthSUVFNUcxc2RPN0tJeHRIUEZUZ0VBL1BvUnAzSjRZUHRQSWhQaUpqOG1SVHB1a2czb2JSQ1gzbnFyRlo3bTBBcFhSTmZhZjY0ZVhQb29KblZCemlrYVVlMkttM1FWYVVmd0NMczVYWDl2Uk9yZVQrQ2hBTm9lQ1NnM0haaFN4TUFZTmVraFl5UGhlWW03c3J2NTlxR0Q2NVdoV25yZXpQb0VvUUQ4WnAzZ1U0UExEcGJ2MHVHek5aZDl4ZFB4VVYvbEc1Q05YYXN2MExZYUhFZTQvajI1c0YxS29oQVFHeTllTjBORTUvMXFmWW5ZeHRCVVRPcmMrMHNQcml3VzZiNnY1dFpSK3R2V3phTTJPQ0tvMkF5TnZ4bkNneGMxWUFvTlFRRDZrTUFuSG03Vm9qb3dTeEw1b0hzVXY1QURVbjRtOE1ZS3lsZzAwRlRWdHlGbFV5VFF1dmRXWk9VNHhiVyttWHdVRTVQTzRXYld2SHFaRFNZazI1Tm40eDhqYy9mOS9KbE52cjJkUzdiVlpTOFlvQXZYcjVWTmZSTXFDSUU4ZFRIc3RaVjBxQUYrdEZUUUZ4VjFGQjhuWTRNK3BubkR4MUZqNGZQSGl3M3cvR3VmanRDQ0x3THZqZ1podVVKeGpsT0tOR1pRVGl3ZVFqNDBuM0JHSUdTdHp6TFhUdUpQQWpJdTJQMmRBblFrRUYrL1U1OTA2QldqeWVHTHJYVG9WSzVVSjlEUU0wUnBqdVVjZEdSZ2F5TDl0Yjdza3hoWFJjekpXYUFyNTVNZEE4clQwSUh5R0lLWmhJTXg4NTd3SHc3aG1xdy92eTM1VTVLek9IZFk0SWozdVFtSnhQcFpyYi9TdEhoUkQyYSt0b0ZZUnJpSExJMzF1bmpwN3R5TjBMSzdDK2h3VVg0KzBTMHZyR2szTTRVQU9SajVLU050OWtRUnNPWEhlUUJHVTd6Nng3UWdUTUFEYWMwY0tHVnpuR2pFQ0ZWSEVGNzNJUWNQZktHempiak81U1FuUlpMRm1KWlNjQVRpUjZYRnBZWHRSb3UwVzBJVEVaRXFzTi9yTm5sM1QrcWpiR1I2MGttdlhHaGdjMEFMRW1hTThGMXh2VXJQd2xjVk5xZ0djWWZXbktnUUhuTjBwdUlzZS8rQnhVemVlQlhmcWJrUGpMYytYenVpNjYzMEQyMlZMaE9EM21YY0NJdTMwcmdBVG5LSlo0bXZ6MHZvT1FtWjFGTWJUOCsvMFowWnV6UTUwU3JNUW45Znc1T1lIai9EQU0zRFIvd2wzOEZNcXkxY2FGc1hwdm14cTVsUnZRU0ZSWno3U1NpMG1TSUZCb294VEVaV2tWZ2k0dlRIQnBpY3B1WWF0U0tYYTZTckJCbTBacXkvTCs4R01GQkhlZTJadGNiZGl1WmxEYXRQTW4wM0J3UzhyQ1hXb3Vqem5tNUZWQUpuOW5DM2ZqdU1jYWNMZDE3NVlvaDVkM3c0SXFkU0lhQnVsbEdyTjZuYjRBQXRGdHFDa3JyZGR2b1IyUjZpT3ZoR2ZkWWxxbDgyTzluVXJ2MWJiSTMxMHNCZU9TV3czdE5vSXRjQ0szaDJZNjdQVEZndzROZmRTSmpLTHg5T21zcXNDRk42cXRBM3FjUjRwUXJqOVh5b3hPNTliVU04amZWdmVMUFJLSDAya3RrKzNYR2dKcjJOMlFGM0N5V3BtcStvN01nSVFoVzFPMHFwZTRsVCtmdit0N01HN09Id00vcHpmemhTK0lPRG8zdTZsempFd0h6bnlFZkFWWlNzaTF1Uml6VXRNS1BTMTk4M3A3cFI1TlNadXNvRHRobmFIVjc0OUZFMDFjdElQOCs3Zkk2c0JOUFgrYWdGYUtHNWg1VGUyQVBlbGlCODVEMjY1RUJWV3duWnBTZ1ZmSXFsUExSYlJ2bTBXcW5ZdUNUdDRBcFcxUVpBMHRIKzc2cC9jd09NOXYyR2V2V0pvMGxOMTJLQXBWN0FXTGpqUlhHSmhSR2VualJpK3JtcjVtVUJmajZqK0VHWVIybVNJTHlEN25rL3hsYXdweFFZMzEyeG5BWEJKRjUyQ0k2RHQyVWo0N3cyQWVkU0h3aFUxRjdJbHNpSW9seklmOFRzZ0dNbjhZdXR1T3UvdG5oVGlMY2JnT2k2bHJFY3JwSFFueW1xaEdWOU5GcVN2OXZVSEQ4R0prUWNmbVp0MW1YVnJVTXlFZzNlL0pyVVNTNHI1c2FCTkVPWXE2dmwxbjljbEZVZ1U3OGYyYkp0RGhGc3lGSEhvSXZjM1dEWlNNUHBLRzkrUlE4cDZSMzB3ZjQyVjJTYW1lOEpuWnM4Sm54UXVCanVmd1lyRFRPTlJ2WDdWeXVCODdkdFh3Vmw1R1JOMWg4L0ttSnYxWDZQNms4bnJwdTBlbitkSzNGbFEzdkRyT3JRQ0hTOW9DSTZDNzAyYzAxTFdFTkVNVzE1SEVzeUN5eVF6RlBmRTdIMkt2cXUxdWc4WU9jY1g1RjBjem4venRnTjZ3ZG9lb05BVWc1T2JPbjFJNit5YnM5V0ljc1ZUL2xUOEMzLzJvMTJkUmdrL25YUHlwOThya3Q0VVhVVm1UalVpUG9oQnY1MkZzM1RCVjNFVm1yZStsZ1MvdERGektYcUxmaVhkNzBXaTBkU1libDJnMkxudFAydDFBeHErTm5WOXU5WUlYTVBDbFJReDVmQ1JqMFFyYWt3VmhLMnoraCt6S2k0Z2lGZlhNNEw4NHFUaXJpNzVmOUZzb0V3K0ZPMFZFQXNTM2dlZzFXM1VwTUVwcWFsWmtSbW54UEhSZWwxOHJDY1RiQXpQdWRRTE5OK1p4d0VLSGhvakVEeDVjSDNyK2s5WDNzYnBTdkQ5RC9aZWhVVFhwU0NMQjc2MVVYWENSU1hxa2JBZHhlOFJOUGZvWjRsMFhnQlZ6NzcrcHI1TUZ5Zy93a20yVnFKTmFpUERjdUFYVXpwMTVRQlQ1Wk1jRys4eXJ1Y3RiSVM2K2xFb0NaSElFRjc0aGxMWGtremY5Uyt5VEwxMVZXZlFVc1lrK0xHQS9SWExiVzZBR012YmJiYmExU0luTS8yWTd3WG96cnRzM1FRMEI3WXJqYkVZR3M1YzR2cFhjQ0RsaCttMFk2S3VVVEhFb29ad1VNa1RzeENFbjV1SjJFUFppZHN6d1htMlVBNzlXNklMNHFuL09JNDNYakZGYS80akcyYmFnaTk4K2NLSGtLbTFHK0YyTHJxNjlXTWtPZ0hRQ0ZPY0NPQmFoY3h0RnN4ck5wQzNMTzZqZENrWWtOd21OZjhKOTFTQTZvSm1Pam9RTzhvVC90TTV5YVpkTCt4QjBTdXpRUmorZklLZzdoOWVCRlBmbWtjYkpza0FSdHFrYW40dWd1K2Roa0lUTXQzdzJyQnBVWjVwdXpzM2grWkpERVhqenBnVDRXYnpZMzAxdHBmNjI3ZHBjdWkveUMzRmVGVUczY3p4Wk9wazExWEdjWTFPcWZiUnh3NHR5OVYzS3psaVNiNTdaRFBjZEdxNGJkS1BMaEVicGNCSmlqUm4rUWVmVXl5ZHlEdnVYMXlMb210cWNRa1lZMDZyS0s2Ky9BMzRXMFpHZjk2ZGF5V2RJSTI4Y2J2QksxYlVmN1FjUjgwSVRSbFJKOHM4N2xPUUxxM1I3UEprTmxyRkFYMDhQeDBrU2xiRk13OWx0SEFhWG45SXNIR1Z4VWc1OWFTN2JJajgyMWJrWGp0KzMrT2RwK3JadnhVVXk4dE1INUFySnJZSW1zM0FQOWZaNHFwaWlPczE2OUdGa3FyVmRIM2V1WFpIWkdyZWh0NzJkMDNlZ1JpU21ZcE5iUHI2VzJGR0NFSmZMVzFPdjRuRjhTUDYzNGZQNzlUbXZHWldrQlhiMEpVcXJhaUdrVVREZmdLaDRXMVlNcXFqNnJqc3VDZFVkcWNlQUUwUTFXbmlLb0MxR3lsTnlsM2VwcFYra3c1TncxaUlMWVVBV0ZVbHpHa1BsT2FjTzAvZllac1FDSVZoQ0JDbVlBZnR5R2JzZENZVll5YXcvT1RzMUcyWCs4UG9yUEdPVHc4a0hqeFVUUnlPNTRBZUFlQUM4Q2xSdWNEWndodXl5VmRqQnZNb2NqNVpqd1I3ZTI3WFNqWjdJVlJ3djEzRWtXTU4vbno3UjZMNENBZ0lDQWdJQ0E4ZjIvU0IvdCtpcy9aOXViK3o2OTcvYjlNSCt6M0IrYjdmcE4vMFBvM3I3ZnRHcjdQcnE5KzM2YUQ5dnUrY1A3UG9aLzIrLzUrMzdDWDl2MU9mZlY5RWYrMzJZdzZiNExxaCtwcGw1cUVzRmcxZ0xwR3NTRWxWMkNTMVZpR1pjUEVlVUtDdjlaaE9TRE9KUDZUaWJEeUlvcmdMNW4wcU1Yb0NWQ1VvU3AraUZOeEphSUphaVZLZE1vUWRRWEIxblFUT2lMcHZMTmltTjVoTVd4SklVWDdkeGc4T25Ib2dnOU1zYVQ2TFU1bXhaWWxGZElVZHJUZmRzQjhjTVYxK1pWWGg0TUN6a2x0d3F5VWhUZjJjZjd3dERPQU1Kc2IxUHFkMkNESWhxNzByZmpqb2lCcE91YjAwNWFEZzRuZGV2Q2pQbCtvK2JPU3QvY2xhTHg1RWVCYW1SME15b3NBTDdUY08wUUZFY2RaR1N3RXNUN0lmZk5zUnZMYncyOEFsV2tGSEZ3VXRWejVQSktDQ2tKQzhtL2JMS3c3YTRrM2plZ2JQVVRUa1FzazF0VUZCdDZYVGtINElNajdpSlBGYkh0aXhzb1Z5NC9TM2RMVkMzSHFXM0I5TnVXWWJ1ckVZV2lSOUFpUWZieGVEZEZ3R0xHNW5QQm1FcnpveDZJc3FMNm4zUExNZDhxZ2pFM1Jxc2ZVTlpPUWdsYXNVNmZta2t2U2pmOEUzTS9UWlRFVTQ1cENEK056TEJlY3pPWG9rdExtQXd2L0Rqa0lDMUVOWHBEcHNhbkhaQ1BYbU1vTFNheENXRCtpNFpjcWhIZmttaXZ0UXEvdks5a3RVdFIxSDlyd25tM1hPNyt4a0pHNkpob1AzbzVHS05pemkrVXFmTXJEN05BeXQwNzVOUWdOU1l1c2RYcjloZDVmQ0o2QVV4QWx1bU1tczk0eG5LMnFjUWoxTFkyUUNmeHpLRnhrd1FsN2Y4WVpIQzZ1RVI0b1ZOTDR4aUZIUWc1OGpSdlVnVzVjTnpkeVFsRVZ6RU9RTGRtVnhvaGNhZnJCMURoU0RkcFpWMW9UM3hUTjlBYWloRFBBcVNwWmpZUkZCbXl2SDluM0xwZGdEQVg1ZzRsckFsYzlOeUk1d0JiQlpYSzBjOCtCWksza3BpV2kwZ2VBNmg4cDYvUUVXaUs4QVhXRzFSUlR0d1dXZmxSczdxOFRCWGlwKzRRc21uL1NPekt4MlI4SWdERlRhdWloQW9Wak9GUy8xR05jaWhKd1UvVlk1NHd0akw1aEtJMDFuWndHYXhGemd1WXVsa2hvUUlrYVlIa0tNZTJDR3dWREFlTFZwNVhOWlpLNFFzcStrSHRJcHRoRGhhd3pRcm4xYnVyeTI4ZkJUcmhNWWZNWWhBS1BQaUJhaDJYc3NvbTczaVBTVzRZQTRKaDBYNkY3S1pLRHZ5YkpzdHJzNGl4eGJkQS9WRlRKRzlRVzFRK2JVdEJGclF3anNmaUoycU1lT3NpVjl6NFk5WCt2ckE1SHQzZzdCUDlBcVMxclFGZFJYMzNRVElvdTJ6SzBtR3BXWG5zVUl0aDZkS3BCZGNUQUZoS1NsQWEraTdnbE9xRUJxTDV3cHJwZys4MnBvVEpPR0FwYUlrNDFqbVJ3VC9XdERiYzVMM2xsTVcyMk5jSTZTWHVhWm1tY2VYWWkxZHVpdVUxRUJPZVJWQTR2MXZaQTNBbDdXMVB4QUlwSW1hLzZQMW51aUp3UklkbnJ3bGFuUjJGNnNXWGVhMmdOK0gyTWk3SC9PUDZ0Y2RBSitFeTY2dXJNenhKQWplNTVNRTQ0UURDeTUvaUxZUHZhMmd6eHRZRkc3Tmt2SFNydHduWDBpaEZyaUhJR2FvUGdzblg4NWM4SU5Cd0ZTSzlyWUQxWmZOeEdiR2hIc2kvaDZUcnJrL0lNS09wNGlCM2ZKQmRBUUt5cG0wNytVbWkwdVNsMmlCOGJ2U29zcXBNajAyMVR5N0NkNVJnTW1YOWNGcFBqY3VHQTZwQXBqOVdSQTRsSXF3R1AxRjZFdEJ4dnFHOFFYQzE2TU1IUk5IZE54N0pHbkFqa3BENklkT01mWHdEay9wbm93Sm5DRFBsbGExQURES2FMeURxSk1JNmFEOWtkQmdEN2JhNWNBbVpFeEtsMVE1SzhicnhQaW9xK2VyaUh0WGt1WCthQ3JxZjFIUU92MDdqcThFd0RLblBOQThVOGhPaHN3K3hoYzR6OVRMVHJLclNGUzBOc1RidGQ0Rlc2NFpxa2prMmtraEZ4a0kwN1hCV2NEUWs0RUtLYmFzOE1WcVgrTGV5ME9JSWpocmhpOWdtSVBwUnhOVEJGZE9FOWxkQkptL014Z3FtYXFRRWs1SG5hMFhuREw5ODJQa2xkSnFwMWVXQ2lLcnAvVUtpV1EzUC8xSExmUU5vRmxzZkd6Z1BUd0JKSEoxMVpxbWNuRk9FRThGaVByL3BUb3lwa3lTaTdad1pwY1Ztakg1K0s4cXJWMmR3UEFKWEphN3BpbHhEQVMvY21PS2EvM0pkWXJsdG43TVZ2MVRpRGoyZWhCSXRGbytZaTRBMS9aUkxkOEkrMHJqQ2U2SVY2Mk1rRlYrMXNKdWI1ZUQ3R2VnTTJFRVZRTzFHUzRCSW9MeCtjYldxS2xaRlVwUTNOV3dRNFhOUy8xdzQrdFB1THpVbVdLTVFoS25rN244cVVzcFc3VEZNZGxLbWF2RzRpWDZqcDc1d2xoamE1c2lYSERVajZ6VWR2U2ZSM2JGcFVoZzRIVDBZd0drWUExZ21nRHVGYWdvWitYazFHQmQ1UmhhZURrSEtiOHdLU0NXR3RtQlFLWlhnY3F0Zk1lQ2JOZ3VBZGpTcUpZbG9aalVnTFVVQlRQWWVobUVkaDdBV3NQdzlRbWtxNzdBbUNucXdGV3BTZmJMWHN3NzREVzRoZGtKTHhYTFVFQ0VveXhHZDdBR0UzZWhhMFhKZ0FLeDFXOEJBS3NTYlVad1hPMU00eGZzWFZ1TVM0OW9JY2habnQ1R3BoZUZ4UGxJcXZIZEFUQnJVam5uR3RJQUFKWG53Yzd4VGhMdGdDTEdnT054d3QvdFBaWDNWamZMaldYSWNDUmk1SXI1cXZtRjdyOUdlb2owdktsVllBUXFxZlB3RE1sVVNIc05EcDdERW01amw1c0pqakRBTWJYWFhqclByRzcrYkFxRHFyR3c3dEJiMVZGeHdCcDU2YUwwaFp6L2xudHd3T3p2NVk2Rm9Cc2p1Vm00UXcxOUY3SEcxdUI3V04zTzBvV0tsMGdSNFJPTHdSaVk4TlJZdEpxbkdJN2NpS2ZrYXJFTU1GRnpqOXpiR2xuSktpK2wrclluZGRqUmw1WUlsWGN2Vk5MSnVJWkw5Nkphb3dNdmwzanpVa1JQUUtuNE90TTFibUpnKzB2TTZ4QWxJNFZKZnkzRjBFSFZvaHQ4WXJVc3o1QTNLZDFLOXZXN2FqNW1nV0pQdGJtOEtncjc0NjFOcjhkbXBNQ0ZmYlJDbVNCOTlLZ3BEQUQ0SjdLd2FicnRMQk5hM2Z4NDFuT0FtallHMG81SitkMGRvMEJpYlpaR1Mrd0t2MGVlQlBQdkxEYjNXZmIrOUtSK01GdlNJd0NqN2RRT3lZSUJ5L1JsWGp2dVJhVkN6cG1XcVNZaFRXN21DTmZJZEJtZTRXdUpaUW1ISWNCTEVoN1RHTXdYb2ExMXRad1ZOYnptTmlpc3BacGlTa3gvWWtsYmhCTWg1czBTdmJBS0tKMHp3U2ZyRFZqZ0o4Qks2WGZuemZTTXRXRzRldTRxOXAwSlUzSUp4YURrYTk2MC9YMWJGTmRzazlVZ1pDUjEwYit3NXB4cS8xZG93ekhLOFlGbU5qZmxoOUtwb3RFcVZ0dkdkdE43VUorTUd6QXhxUkxjaTFjQ3VUUDZON3QrKzR2a2tjS0hQZkVORGN2MzNCRFlQNWJQc0RNOHRMUWUzTFF2RHpyNmUvY3YvZkQ5Y1pkR1c5RUh6SmZMeHZHS2NtRmM1U3R2dDAvaURRY3RCaUQwQ3NmSVc0dXZIRUt0WjdJV1pBRjJLaDlLWEVFVCt0dlZGZld2MnBwQ1RPd2dlQnJJQ2hKL1gySm1wb0RuNFZ1WTJHKzc2SHdudThFbC9QSjB3Kzhpb2lzS2hINFVjTFMyWnppbHdYeW5sOTJrL0RZa01JblFwM05LcmFnZkh5ZGJtcHJtZk1ONlNaTmplSzQxTnp5MnJjSHo3WXgwSVJOczVROS9HczVybjZuZ1dBVGN1cC8ySTFxQzBIK2RSWlJKRzhxQVorVll0ZWxHRlhmMXd3dlRVWUtVdG95VE90NFBWWkw3d3RNT2RDWE9mNjdkOTRUdEJhU0d3azdMTW1sTDlhOWVFTVhHb2FkcmpSZVI4NTc5NmlFcUQ2bHlQWmpvbkRWdklyWlI5ZkQ0R0swUmlHRWNNR0ZwbTlzOE1pWHNaMGx2dUpCQVA1QjBKeWZvc09XU0NGS1FzVXY2amNxV01oRG9QVy9IMmpPOE9RT0txYzZRME5FNVN4c3JMT2ViT1F4eUlyU2JUTVZoamZWa0p3L1BvMWFLUU9XMEw4TExicmM3aHBJajkwMlNHYlBBTk5xaE5td1EyZEsyaEZQekJjYjdvZVdsUkV2ay9JQjMrR2FqYjdGVEJYQnJSVDdCV2NVMDNIYjdrTk51TmFzVDd4Ni9zVHdKWHV0emxadEkyZWxkbWNGVTBGaEFxdytyQlVCa1BmR243dVovZ1d1TDRFWmxEN2dhQzRELzNiUnJpNTFrUnBEdnh0ZlBtTUxMVDFTci9LUjZNM0xxU3F2MWQvclJSWXJ0bFhNSi9TTzNQM01udUhtUVlNWGJBbW5sTnkwZ0xXTEFxRzNKTlV3OHlURkFPSzNqVk1PVUdtWUlHMG5JM3V3ZDhWQTBtTzh3VXliZWJTS2dYajlFZ2VsMk5RVjY2bnVROEZ3N2E2UkIzT0xndUl0N25qbHZVSTZ1ODFVTGNqTitVVkZBZEFiQ2xqbjR3Zk0wRWtvLzFOVW4xckdvZ2pVTGFZbDFzV1dTR2g5T1Rhc1ZKTHRISDc1SzZMNk5YVCtqcnlVZFIzZnMxK2VtZzZtS2pBRStzb1hMcGVrMkZIUjRIemdqQzBsazhTTTR2b1BWUlNVcWRKanpzM3ZkdGZhRmtLa2FYc3dFQTI0bm1FVkNwQzRPbUtNd2lJZWtwV1BPTjNPYUk1ei9CTnlrMm5aYVFUSkhzeDcydkx1aW9NRDVrQityKy9Qc1RsUHNRWm0zSjgrNjhsL3hDVm95MGJwWG8zMWVvS2Y5N01ldHBreVpaeTdVWEdVdXc0ZDhtRWxPY0hyTFVBcENjMHJPWWl5WkUyUUMyd1FvYmo0cFNXcXF1Z0VGNFBjWmlBd3dBY1lON0xVNmN6bngvUktaRE1XSVRhT3dVNm8wV2VhenVjcHBpckJsU3RraStzeGp6cjFzcVNtSUUvU3p1RHBwd1VacUJJd2VaV0NNSmk2dTFHYW0rVForRVlMMit4ZDA5dzZIMUM2L3NxbmEzeVYwV24yRWxPek1xYjRaVFp2OE1VR0NrQ3dzUHprVjI3REdxc2NDV2QwSVNFR3F1M1lRSGI4eDBxZWRFYXZpMDBJWWErV0JlNjE4Y0hOdXk1eThoWjE2ZExGSlZpd1hrUGZ6cFFyQUNHaEJ0QVhiMmhoTVd5UnRHZ0NYaUFrUUpQSGJoYlM0aVF6VG1kL0pLaXpBWnB1aXMvMWdMakw0QjZhVnhQd1BmMDJkVDhtd2NpalMzNlI0Yzd6a3Fxbnk3bHZYWFp3MTZTQ21ZU2ltcmdza29Wckd4MlQzSGlWTWU3WWlGOGp1NTJUWjhlR2VTcmVoTUlMS1FBK1ZscXpwRGxNT1l1VDZxcXFKZVJBcWRUUmtSb2FOQStGS0xuTUw2Wkh1V21GTUM5cExicDRCdmZvY3oxNVpKSDQ1UWtiM2E2c05FSUxCUWxwbHdwd2c5MDVnUkxoYUxNK0x0MDVsVWgrVkFKZjBla0FiNXVWaURoU3lpZGs3Ni9EdmEzODJQaWhMSEovcUMrN1FWVVFSaU5EQW1kRjhYTVBGUVZmbHdWMEdUdnVHUlozNTdiakVya2dPVTYya1orWWVXT1ZScFFNY0hRN1hsQWpFeENDZHFYVUNtbnBuTjc4dE9RemdRdjVQVjFPZGJHbjlNV2tqTmpaZHhWdTdCek5iZFRhOHBmK3gwczg1SVFLWmNyUEhxTFcyMGVNZ0hEZFRPSnl2YTR3RnRmR1A5Yzl1cE40ZGFMd3dtUEN0dHRXR1NZR05WSGN1b0JPWVhxRFdKc3NSRTVQMWJ0b3hqNTdjNjREZnQvMDNxb3BzNmY4SWhOMTlOazZJNnZRTmhlakpaK0hWMmJJLyttcFdVdmJXazgyVXIwa2lnTFd5cm1QQVU3blU3dzJBSG5zcFVRdGxJTXBSNHZPb2twSElNVmZBN2s5VUd0dkZKWHdlb2c0VzJ1YkU2bGpueDVEVDJ4TmlidHlUNllZK3QwOFl3OFpTd3UzczRzTWhDVFdVaU1heDNJcWRtczZoM2gwc0xEc2wvVjZ3V2pRZ1BkRTgwWkFoRU4zdnRjZkZHV2dNbW9xbGp2eGxxNUVib1oxYjlPWjV0bVRub1dvQTlHOFV4NGJRbnE0NFc0aFEzT1RmNlJ3emZCMnM4REhmQUhYY1M2bmgrcTF2OWlYWFpxZ1FWU0paZFJCeWJqK2xVK0g5RUNQU21ZUlNYRk5hVUJrS25Qa0ZNZGxGSzZnWC9ENm5zK0hHWVhHNktvWmRLRllGSzU1QzdLRHM3djNDdFBXMTdxUWkycTlHVzdLZEpqd2UyK1VpNUk3ZC9XODJFSHR3ZGJSV01jZFVLZGdhMzlzdW8vRTR1ZnQ3NS9qRTVKQzZzRWJPYWIzZ0ZpWmpESnR1UGNtdDBTMHNPSUNRdzNhekJ1Z0tFWDNteXcrRmxkZjlJUGx1a2JETFVEbWg4QjdqeWVxVEczWnhuR1QxVTNFeHh0Uk9Ca2dDOFdUbWMzb2VSNEFvY2ZLTGdzMkJzaUpFWDVoa0grNkVzWk40MGF6ZXpUaFBOTWZEOVcxYnBrUFNyQnB2cStEa3V5QXJENlUwdldRTXE3MzNnOE5RdXFoN0FOY2xZRGRSVjkrSTNjajBYSElBc2R1d0w4cWNXY09aTG1ySUtUb1IyMFpMQmo2NlpRa2krUGRXVWMxTUpvYU9OM0lnNm56MVRWZTV3UnNPQzhhVWlUSnc4elNqZUZJbVNmS0E5UW5SM2pmWHlnaUlEN044QWpxeTVVNm5GUU1uQkN6MU9jMVpNcTFmaGNKdzBLQm9oendlUkxpcVkyLzRaNUlnZE5ia2NhS3lCRmFQaHd6ajJMb1EveXR6SHZISlEvcWdwcTNvWkFiU056RERPSkN1cUpxZmkvTzJvY2tFcGYrcktJQlBGMXduQVRKdU9lczBORzhVdGpQVDM4R3hEckpxelo3QnQ0eS9keXI2dXB6Vzdic0dUdVpTWkgwcTVMUThpMHVXOVloQ3lncXQyMkkyMGxDNFVoQ2d1Z3NGclRibTZWYXJrdGZRSWJ0dTBlWDhQc1ovcVZiV3ZNQzZldHppV3hKMWkvbTVNdXdqSkRyS0JzZkNIVVJJQTB3UzR4aHFjdEI1ZytZWWhVcUxuRGpQSUx2VWEwYjVtQ0FEMXFPSi9LdjU1SUF4R1pMOGd1Z0xyK2Naek1sZlFJMGdrTmtuRGE0cXZmS2lPQnNsMHYxTEh2Z2NoU1FiNG5sdFc3b3FYNFJZdzN0MllCczdlVzlMOE5TK3hhT0VGMG1CNmxBZUIwZ1Q5alJEWmplRzBWU2RGdFRNMUdpS3JKZ3VKY0xnQmlxRDFnVlRvbDRFbFkrTlFtLzdHQUo5NDYzY054VUZQeW5LYlVrUnpDM1Ntek1nVFdadURCWWlWRnlqclZWZXZma1hFMXpBaEtwKytwRllNTUVpRWt0bW5UWFJuL2VpV1FOOFBiTWFnZHhZUFN5U1dMWDFla2RnNDBCKzNvRHRxbnVxMjIwV29peFZ2RTB0UWlMbVM1Nm5IOXAveUZCMWd4c0kxRDM4WUp6dzI2elJ6NEJGVnlGRUhhZ2toWmZjL05oSUx3VEFMb0FBVStjaHZrQUsxcEQ2Y0JzZ2o0VlZML21DT2VOaTNHNHR3SE5ITis3OE5XS2pFY0VVcSt2ZEcyN0w5OGpCcXJkeG5iR1Jkc2FuNVJDcHBsL3hyeEtpeFJyWDhibElob2FkQ3QxcFZMZDduaS9rR0FjTDNGMFFtSXFucWV3RDM5dXoxK0h3c3NlTTkramd1c0I5UTFuZCtHNHlIVXBzTzNtKy9kSEk0RFc2RnhDUUIvbmlHbHZhL0MvaDB5bUpkOWdTR0VsM2dkNU9LK3lKa3F1QnlNSlNFQURvaG1weGVGWmQ0ci93TWZMNlFBc1dQUExmZHI4S0ZuUS9JZkNzMHBiMUg4QmkwM0pGdEpXTGhQc1BuZkVVL1JPKzMvelZzeVZESkg2SVNLc3kwM21WOWpyRFQ1YjYxS0dkRE4zZFM2bG1rZjM4K2RFbGUvSURvVzZOSW42YVJFalpsdjdsZUJ0S0xsN2NPelpGN3hWOEd0cGg1MWZWU3hRR1ovUFBTL1NYcnBsUzM3dnowYmI3eHRSY2pUeE42T0ZvWlZwTlN4MEJvSmlOcVAyWW1JUkY1L3lsK21FcWFUaWorSUxWTHBYcU5seHdlZS83eFlaQzhqa1FzR1NFZEw3aHJVaGNzejN5clpwb1d3ODhGSzJOem9YTUd4elBwSjNzUVVJOXlmK0hEU3lQMzhzU3dnemJ3eWhZc3RYMU8rWEV5MmhNemMxVUZvNTJNUDhMZVJHdy9EeXRNbUhSNml3V1Y1dVRKNE9SWGE1bEU4MysxY0JpWFVFTEU4bmlPY08xSlBJZFNnRmdPYzdodExuVHFGYW93UXBGeFhrU1ozUGExUytlR1NyMEhxWkszVEhaUU5EaE9zaHNXTFQ1aE1WVlZkOUdwcWIwUUlqalpiemhoc2lQWW9RNVpGQWpLcDBqU29PN1VmTW91Q2orVWJNdFR6c1VYcXc2bmRNMFpjL3VHNURJZm1HdHpvaW5kQ3EzNHIrOFpFcGNiMC9CUU9UUnJIeUVhMkJMdk9odGs4ZTg1OUVlcmxpYzRybjJRTEUxRVNwQ21QeUhNZU5adHBtTWQxeHNyc1VhTFFFekxweU1XdlJkNDVLRnZqN21jdWJ5Q0x5cWZ2MlExemdmdXNpclROREQ4Yld1ME9reFhuZTk3ZVU5Vmt6U2IwM0RCUWZEYWluUldGZWtUenMzQXJGdEduYVFabUdvQ2FWMUtYdFUrVUhjQzBMcTgwLzhtNWtpQlE4N3RnL1R2VitLbDNxSmk3R2swUmtydFZRRkV3b3l4TW5iSzhKNW11RjBQY1lkdWsvYmFSS0VjenY5TklFL2NwOUlSR0NiNlpVdXJab0FjeG1Hbkt0YTdIN1ZXbE5WalBDV2ZocEZoRHFJRzI4TFdpRlR4RjFxcHlrekgvM29JbHhhWUdUaHVIYWx0ZFVBVEN1N2w3NHhnWmdWbDlJQk1RRDFuWFhHNkpUbUk3V29Ec3NyY2VwblcvZjVRM0htSDVUcHF6RzgybktYazBnMjBzdFRacG80cWlkVDRvaW0zSUF5eWFTazVock9HNEZFS2pvcm5kcWNWbUdjUUR6OERSdXpNdWMvdzZMYUlvVGdtUElENGJsbU84bHFvRS9aZW5mNmxoMkJFMXZQL0d2c3VYWDVwZlRJeFUvdmRlSzdBTVI1Zjl2RkJQTU1iWnRWUis4NWJEQmpnY3JHQ3ZFMEg5eUs2bGUvZ2UvMHphRUpjTlNmZUw5VGlFTVJlNlFQQ2ZnKzNEaFhNdEVQOE1rUUVaZEV3RkZkK3BRSmFDMHhaWFFHRlUzcjl1dEpMYmpCTGp6ZDVlK0Z2S1BNZXFaYXNTd0J0anBEcU4yY0VCNEwxdm5QMTdIQWphY3FiNnp3SFVIL2NxbHYyQWg1MXZ2SkFpeWpSNGR4ZUE1Y2NaVis0VDFNbGIrSjVBWVQxY3VNaFl5QlFQanJxTm9TMXpSUmhzU04vc0l3dGVDUXNmZEZtaFZkSTZ3WjhJVk9CUDRiV2FkdTFETHdCU0wwL0ZacTU3NDBNUlM5eXB1UFdmbE40aHBqWjhzK05ZR0RwVk5Yd1BPSXpPdVd0cmlLaTF0akU4Z29rNEVQNFBoVkIydldMTldDWmZSQ1RPaGtoMXhuSGY0S0M1QWNXMm51cnpqazlhbWRkYndGZ1FiT2FEamZpc1pSQ3Q3a0NHTTdBYXpXSjFIOGJYYkNKTmhVc3VMQVF4Tmx2OEsyT2ZrUkxUb2dQdDMzdTM3cUVxNHROc25nWENwMUVlR0ZRMFE2LzFPWXg5Zk1aWWI3d0pJS2pKSGRYTXIzR3JVNEFPbHhpTFNuTVBjWTdyc0JWZWY4a2hsQ2hYN0FPbXMvTm5Wb2xid2MxNHdMZDQ2SzZENG9FN2JVcjlhUldPeXNQcDZZbTlPeElEb01UelUrc1pnd3E0RUEwbUpvTm54MWJuOE1rb1lqSmlJKy9hNmtmN1dzVkN5TGhiTWwrYjVCb3VETVBCM09WV1JDRjJKdVd5bVorVU40SjdqcXB0NG9mOXJmWGtmdUpuMk42cThnbmFQQXgvUW53WGlya0lza2xVZTEwTmZiWWdZaU5PVW9iK0F6QmZTcHRURDYwckMrRmllSGFuMTBPK3hQYzBNNTJUZ1BiS0VEelRNWEl5U1d3MkJqTldSWjMyL3BLdW1FK09vM2VCMHJQNGRDV1lEWWZlMVJCQzlnZzE1ZENDTDJjOThVQllXbGJYN1I5ZmtLWit2aEVabXc5Q24xcVpuZmFoUzdEcWRyNDlUa2Q0cXlmNjNUMnhNTVRvVGR1UitLYjdBY2Z0dzVqOC9LanJhMXAwM29OaTZLRVlnZVNoY0lxeTBrN1p5bkRvK1kxSzd2clh6UmRmUWN3YlFTUHU0ajJBMU93S3ZjblRSdFVrbEhvRGpSelM0Y1VpRXk1a2Z3NS9GWGRWVXRWdG8ycjhVQlRoNEREdnFHekVmMzlWUE9NOHl6WFJOU3dtL0hsWDdlZ1JvYnhJWS91UlVvZm04am14YjF3ZktpRnNWUDhsVGduSlM0TkQzYlZkV0Voc25Ud3U0eUZEUGFGQmJrVFBIR3FBVVBteU92WjVsRkxvQTRYSHZYQlRWdUVDaHRDMnVkT1hvbEMvazRYWDZQMk1vUTV6K2cvVDZWZEJ4TWQ1TlNIaUpTVnRubHd5YVAwd1lPaWtMUlJCM3dFRHRZZ2tGYU0wbHlvaU9QZ2FrSWV0a0tQWmMyQXd2cUlxZFY5ZjNHSUNOeG9vd3lvbVlDWXZUSXErNWdJbXdvbm9JLzhRelhsMU0wa1Q3dmxHZjlhL0RQU2FhajJKSy9lb2lEZFpOeE1WZklKNHlGY1JiN3dnMUZ2a1VVaEpISHNQVWdFUEg0RExZWnhJaUlUSWRCczB0SEQyelFvT2crekRrQTl0OGF6WFlQS24wOG91TVQ1b0QzVG54b2V1NUxKRWJtbTVYYzJ5NUM4UXp0S1hVOUVxck1CNitRWUNJZ0lrMjF2L1FLdkdVeXovallpYlVXTFMxMmJlNWpVdzFEdFZXSUZOQmNBbFNOUjZtNlpzOEp3Z0pzSnJHUEFEL0h5M2tTSEFJRnRhR21ldDU3bC9QbnRqa2NEbis4SzFDWjRhWlBmU09lQk4vMitVSzRCM29MbzlNcXlqRTA0WmJ2aXJoNE5zdW4rOURsUklNS3RxSUJ2VW9lQUFlZi9TNUNuQnlvWld2czZueGVGUi9adGFWbFFleFhDM2pRNHNrK3krREsxZVFpbVBDbmRycmJpZmluVGxOTkRBc3lCbVRBRHNpT3lia2pycU5ZbTJ4emFMZnNXVWJVZzFkUytqaStIdnhaQnVqN3c5ZHVsMTlxU2JLQmRjakVJMUFzbk1vYndxQ05lM21DcktROS9UTkdzd3A5Z0xaYkNlend5emtLSFN0VnRLdENTNzc1b04yZU5SQVhnWkJaYVdaNkVaUWw0c1NGc3dWbUJBd0Q4OWZQZkxVUE1RY2kxbVFRN0dZQ21XelVKSTVYQmpJUHB6TzJpUCtXWVRGUTFjb3g0NG5PSUpyMmR1WTBXVHp6Z1RBQnFZOG9EZm5GaU1BbC8zNXg3a05SdmF3SXNGYU85L0J6cDFYdmJZc2Voc2hXVkFpcFhERFV1RUFvMGdteUNzSW9aZFFWZ3BaWEwwL3EyekpyUmFVNGtpQVNWMHN6TzNXcEFwQzFhZnBoLzNCY29KNGJhbE1Dd3pKaWR2ZjltZnhZYmZJTWFmQitSNmtLVEdIeTFTVFNZaTFmRVAvUDdYQ0x3VEdtVEdBckNhUVg1eHQ1R3MxdnRjcy9QcUlFeEdwVGdCblVLMDRLaVBvUTRhWXdBaU9kMlJjSlZ4a1FLeXNYcjBrY0g5TWxzR013L1NnWmVVWG9tcnNhZ3RhR2xkcjdWOEkvbkVwUWV1M2xYL09OWnlWdDEzaFRkR2dBdWpHNWx6NVhVb05NcHZqM2hXdkJkbEtmY1h2aDZHWXF3dTJoeEdFV1dSdGc2b1h2SnlRSWtWR2FFaHd3dTFjM3JuOEE0eW42emRVTDhHVmdtU0JBVE5DZWhjMGRRTXlKcktrT0tYQmhaMWprcHkrN2g2UW4zbEpTbWlzSjJrRmh1Q1NIbFhQVlBwalB6ZWg0TGRrTlBjNktZdHNGeTRhMFlIUWtXVXR6b0Y1V1NiSndsTnlMdGJJM0RVd1NLM2xSNlRaSXg2NlBaS2ZlRi9QdWxXS0RVUVErMEJhYWNqV1dienQ4OFJCanRJRWhGY1lzKzgvZWdxTjFrTFE4TTBmakdQZ3dqQzVEWFA4RWRiQ3FFYXRjb3ViZ0s3R21GVFowUDdZWHU2RS9MZCs5Um1ZaDJCMkpZWG5EV2g4WEtTdTdrWlJhdjJPTFJ1TnJHM0E3MEFwWGJsVXprNDZSd0R3em1LSnlZUDdVU2tQNjFsZ25rdmRKQ3JqcVdXWnNwRjRJVzBFQURmaUJKL0dJSkhVNWprY1ZrUjIvcTh1ekVLSlRHRHNyYklIcjBoVG1RZzFveHR2QmlieHhBMGxQMUJrWXYxc0xFZTFhZWFQeFhEQ2lRbXozaGIxaUwwTVloNE1WNmRBcHJ1TnFXTFdUY241ZGp4d3A1bU1nQldhMDVsWWFERWd0alRlU0F1TmJ6dXlNZGFlcW1SVUFKVmtDYVI3MWNxU25FYnc0aWNVaTFDS3c3VWN4K2x2Vkp2aHlZRXJzZW1OV1crS1RWMy9GWkNHV1FsdXcwaVZUM0liU1Y3aExvaDNqcXVnTEtCR1NQWkhIS0tyMWRCTUZhSkVpUk9pVmVZTGxTVjNVOTFxMGlVQ3hIYmNTVFZ4VG5GU3krWlhtTXV2OFQvZksrdnV5cmo1R2cyQWU1NVVySG9tY1BVQzdNNmgydmwxeWx1bHhYQWo1WCtlVW4yN3BtTDRJWERCVjNtcmJGd1Z4enRwZmdQNHpobkNhMGxFUzd0ck55VmJjcUlrb0crUEtwdDdVcnk5VllqQ2NtTjFiYVFnaFF4L1RrSXA2a3pDZzBsVlplMFppUlpvWW95UlFtWFdZbjBrbHloOU1QOHMzOW5OaGxsdmZqMnJTMkc5UDJVSjhkM0V1TldmWHliQlVGVnBIa3BtQ0diOFVYRjc4RndBS1BFM2dHRm8wbFJTYTkrTjF1cXJDZkRpOFd5SktxSFhXd09CdWRDRGdmRVhTSStBeFArZTZ6aEVhVzhaeXdQTHdHR3dndXdpN29QSWg4clBlcHlQb0twTUdGN1JmUE1vSE9ib1FpcnE1RjNmNUFsTWllc0lhZ2Qra3RKMWpmM2xuMDdlOWtRdTFZK0tOOFJudXBiRUs3NndiWU9BUDVNWlhOTklZMWFRdlFuNDhHUEtVckFtaHFXNnExWVNZWGNrMDN5c2VReTdxR05VSHByTjlyZ1l4azhLYnZOcDJNV0wrM0dVaWJCcVYvL2NWZFdGaEtMQm5PUDBQZ1RRTFBIbHJISUF4bStuY016TTFKRGF1V0w4RWJrNFVZcjZGK1gweE9oYjRncVBNQ1FyV2JTNG5TeVFWZU9wbkQzSXZlUHc3eWJFRXRNVTJTUm9waENOaXI3ZUIwS2ZJNEZrMU4yd082OXBrNnVJQXg5Q2pFcXZ2WVVOa3ROeFRZU3gzWVpHdWM1elBhZVVGa1o1YkVNWk1TOXlSOWMrUmtlNTgvdk9PMG1rMHJYa3JlNFpTaVRwNWhwejNVU0JFUzRPUDFHQll2eitndWhTaUJSaXNrRUo4MGNzSUM1UkU2cXgyRThVQnc5SEJqOWRSV2FlN0JzTHVqdllzK1pqUlVuMU53bVkrV3k5VVhBSUVLN2NXb01GNDBJcDdKMFlkaGRPU29sakNLVlJLam10ZEhtaWQ5SERWV2l0eHpVakxJUU5UM1lIRWpoQ3o4Y3FtdEUweXFtT09MakZaUjlGYmpFTWpzSmlFZFFKUkEwOUs3UnMzWjBpNkZOTnlrUmpYeVRzYXgxVE1yZEwvaURjUFRoNlBtNnJiVDlJTVBRbThyeE50Q1FMc3A5QkEwQ1dkR0xzQjFwQkFibjdqblJzZEoyYmNjblI4V3Yzc002RHZuSkR4Z1JUUDhKV3JFR0xJNkJucklsbnZoL0MyT2EzOTJDemEzaU1SVXJ6K2FIOHd3czRHUlpxQzlMbFZYWWJaUW40Ly9WODdjckF5YXNsMWoxZHAxVUYvSkVQa0tTQ2MrWlRJQzM0VWdZdm80bVowaGl0RCtaUkx2SUdqd01QM2JBMmZNZzN3d0h0QTR1SW81cXliYXVtVURCTUlWV0N3V1FtVlNZa3RIMnM4eTl5dWdRMW5lWDVLdDRNbGZvODNvZmhxcG9Nb3AyeEdTdi9XNHZtRTF1TVA5T1ZLMlVJRjJCS3pSZllBUnNBanoxa09lUVUvT1B6bC9hS2cwdWVoR0Z4WTM1VHpMOEdNVGgxMXZWODBpVG1MOG1UbGZHYmwyMGIzZEUzTkJMYzRYbS85dnJpUnlQMW4yTC8wM0hvb1plcXlERjRPYmw0blZLU1FqYWdhSkwyWkpLdDd1UEFLV2tyM3kxRnZFT1RnaVN4bit2T0k2NkVVS2FGSmhFN25acmV1WVlId1RRaityU3VCTFppRnpxWkR4Slc4WnN3K0hIcmVLbldlVjlKeU9KNVJENnpBUlF3RHpNRjZlTmdDOUtFRjMrSzIzWHlZU1NaTEI1S3FXRGJKYmM5cWt1SnQyTDhHZllkOFo5dmdPVzBZbzd6TGIvV0dJZ3hFOWFQMHpaU0tyU0lpTDlYZG85NllPVjExV1BMVGJKWGJ2NzZocEJyZ3BxZ1pReTJqK0ZDc2IrRUFONW9BNThtb042d0k3aFFYUURvRWZrNVgwbS9kNE1TOXc4NkpoVnFnbDY0Rkt2eWgzSkk5SW0wY2QyK0hXbFNQL1czR25xRzJ3eS9IL1ZBYzdpVFpSbXlLc0pNd3d5aXJIY1UyNEJ1eVF0b0xzV0VIdmIzYURuNDFXQUJON2l2Y0NDTUFqdFdMbWFkSTlyOGlpcCs5NHpBMm96b0JBeFBFSUZhUnc3b0tqbXkrbUYzUTRJZlN6VTZaODZVWFlOd0lJbUJrcVI1aG0vcW9hWTlVT2h2WDNEV2YxM0VsWUtCNWxFemlkRXUySjdDVERiaUliSkE5eVNZbjlkaXg0U0diaWFWNk16SFlKa0RCcjNNN25NVk5PTXlZWFlWQVQ5ZHZxdlpLN2hjTU1UdXBsbitQS21GdGhNR1EzRmZURnA3OWRyaEkxcUJDQ2F1WnM0RG1MVy9nTjNnNjlTbytYTDN2cjhuSkIxVk1GNXp5SmRCb1JHZkdmS1FDUGV6SVE3aHJ1d2JwOC9NV09leSt2bWVzbTVRdFJWNm1YMjBPbEtiYkp6cFlMb3kzRHhBR3Nyb3NkK1dlQ2VobE5ockFvZEFSQ2JIeUlieXpFTzdmdlhpMm9qdTVNb3FPTGFiU2VkOEN4MEFMNG1aUnRPR0ZkcVBINTRlL2NtUEVCMHFpSUxJZG90enN2OGFKL1k0RTM1ZjJ6Y1hUb1hPbnNSWTEvVm11dWNPcnB5UnpNWkJLMWFVdWlIVU15cEVBVXRzdWVaZXJ0WlhNaE5KOE5FNllkZXFESDV5WE9CMittbytVUGx3TFRBbWlwMWRQS0pRTGdWRzZnbm13N2ErdTlaeHdYWERYZVlIYzk4NUhBVkVmb0RqNHJza1ZxUGova1hqUDlISHYvYkNkZW42M05sWjVram91V0FzN2VrNE9mQkUvN0hZdzFTaFYwYVFyOFM1b2JwUVA0SWk4UDltclA4MXBpOUVSSTF0RTZwV09LY3NhRzZEM3BWcC91b0ZiREV1Ym9GR05CUm9FWXp1QzloWm5hR292dXYwVHRIR0xFRVNWdHQ5NVNnbFVrTHNCK21uVmZRMG5IZkxxRnZ6UWM5a05iZzl6Ym8rSlIwU0lGSkk1bndRSUh5NEdQalhnQVJZR0p5eDJRTm81Sm9GWWpZcHRHZDRnMy9SQ3RQSXZiTUZINVJFSlQwYkhLMUZYOGpxVjIwTjljMW8zRkxoWjJuZjNFSEc5YUptSzdSOWNjNzJhbVlyMnZnYkp5SitwTUNQWmRhQkJLbDNRWkVwQWtjQTZXNElhV1dSNWVPTGoyeXUxdTc4cGNjcnNnOXRwZEh2aURHUHZTS09tM2lkZmdMQVRZOHNyTXZmdWx1cmpzd05KK1lOV3prVjhFb3NLMG1BMzU1aVJmaUUrZmplK1hqVUYzZDk0UlNnV1pqT3c0TjJJc3hjeDNQeWozL0JaR2VNL1NtQkJXMmFVTExlTEgrelFjaTRMREsvRkloTWltWWp5RWJYNHhnTjg2Y3FqZnBqZEl6WG9oZWl5M094cmpkS1RMSTRDc0pNanNGclRCcTdHWnNta3VDQXBLRG1OVDFzK0Z3TUdhMDdBM0MvRm4ybkRUNjY1Zm9ZT3JRMEFKWVJiVC9ZVFNMdHJrMVBXWDZjdHdHWFAxWmROaDVObFNIcGFUQmlVNTBVck1vVHB0NmJReDR3U3hSemI2SElQUFZIR3RGMjJwSDEvMTJhSFdWeFhLOW9hbVBoamVFek5NdHNQRk1qMnBxSmEwYWV3d3ZyRXpTdTQ2eDhPNFNrZ3ZYUW5YUnVndWxNVzc3aGdZQzJjejBrdUgwMTJaUy9LOTZFeTlYUzV6QXlGV0V1YkRjK29aMmhnb1lFTDZlWkNPVzZJRFFsR05Wak5KeTFGQkFPV3RuNksrbTNUVDRWZ0dwdTJkL2FQTmY4RjFmcUhDNGlWVTc5K2lhYkw3T2NKK0ptWlp2a1YrSVFQWi9ndFRHRW1IRUxuOVR1MW5NVkhKR0tHOEN3ekkrQUZFbDE3bnhQTmVmTWFsMUs5WkkwdllKRVVmcDYzbXEyMGVIcXVldmd4Qm9mcG9hc01NMVY4Z0FKMzRPaWFpRU9seGFUV1VuTVM1TFNma1ZrY2w0UnRrOEhTSlc4ZWk4dE1ENlUwOFBLNnlLRWpIWFhab3JmdWh3cDc5SndpWlhkZFMwc3R0VlNrZzRQOVlidE9VVm9qT04yNGdRN1JoYVNMZzZ2QVNaR010QmtEdkhlZ2FXRTRRZTJhNE9IOXZNamVlN3hxU293N3hhZmNTQUV6SnJkNVFYRnBPUzYxV25UUlVmUHhXVHlRYmpXMzZRQkNDUnBsSnhxci9LeUg3NjNEalYxTXQxN2JXTWpjWWZicVFFV0VwZzNVc3lzMWJQL1cyYUs3OWdVNG5VN0ZaYjMvV1p1SHlXV2tqWXhYYzFUY2crOWxUZ08wMGpWcHQxcXJSVjRTamlBTmxjeDF3Sks0RTdLTVpLd1ZzbXpFRWtmY3pXdHhxOTk0aXE2a3dMNUFXdDVKZ0NRK01jdEJadllPajdKMGJvaW1WUVJNS0tYLzRHR1ZFUVUwemJCQ1FyQkFSb05wYmVMVmZtRnR4RThmaHc5eUZVdUh0QVJEdVVodmViV2RXM3gzazFwdlQzdXpnd1BsY1JoYjlrdkNua3UrclJhOFlxaGUxRUZlZzVGVG1ubTZNV1FFcUpYbjZ0ME9jWlZNZ3VrWFMvelp0dGVVOG91dTEyYWhyMFMrTDNRMjVaVzJNeklVZWZZZGZxY3dqTHJxd1kvbk8xdWdHemFFeG5ENW5tNXZqREd1R3FqWWNobW9XSElzWXpFS2JhWEZlZGl2bUR2OGU4WGxicWRoM3o1eWdKRDlYL29qeTh1NHFYMVgwdHNRdGNSRVF6VW55Q2NXOWhLUWVkR1ZkUTZ1UkFiekRNL0g3MUowRzd2T2RucmMvMTdOOVAxNnJXQXBvTDY4OUhSOEh5Tm5kZ3FnckE3UTNhaDNHcGpBbkZkQm4vWjFLRUZoSzRTVXRjSW8vQXdoRmlIQ1ZuNkFxNFUwZFlhTkRMUDZ4ZUdjVzcxQzdyWXJIdERYc3dDOGxwNW15RG53VGdCRW8ybTUzMXlSOU1pWkpDYmI1M1lVK0gzL1lHbG1WOVlpWmJ5SXJWOC9JbEppRGk1bjFWaVFURFJxaWFTdFF4QllkQk9sQUxGNEk1V1N5UWwvZ1lHT2FZYW16empiWU10N09OaW03UStpNWhHS3VRNFpoOFVndW9yR3pMWnNnRzI0TU1EQXpJYVhHVjJ3MG9QQnJmWWwyT29NR3ROQm04NG9GVW0xam9RR3FvcXNWOG5ieDBabGsyUzU0OHk1ODJrNThCVnd3T3ZvMEJ3NGNKSXJ3UlpTTFFjS2hWM1RoV1dLS04ySUhoMjgwbS9hYVJ2WEdWWHNrV2dEcmY0a3hJaDB0ZktnWkJZUmpYS0tZY2xydGRWd1pENHVNR2tCWHVXR241c29VVG9xa2ZvQ2hVbnlUdXcwemNKR1orUENPaW9yMGp6c2x4MktvaG9UM2F5RnVtdmswazdtcXF3YldNUEFWVlFQU0dYNk4vdzZEYSsvVE50RUg1SkpueXFnUUdTLzI1QzdtYTJXbXB1aHNQRDh5YUZNTWZMNnB1N3JPVERjYjFNeTdVcUk5bHNnRndEU0owTHRjR0ZnK3ZDRUNjRG5mOHRydTRzYk8zTEFUTFcwZ2xLOWFVWVV6U2Z6Qjl1VWxDNERMMENjQWV6akpnb3NQaGd6VDZtamJQaUZlaHgzMzJzcGVJd3NDVjN0UGdMaVlkMW54WklWbGthalNvWlZZVXpXVWJzRUxGYU5jWWxMZ1ZJTnZkMzcxVjd2clRQSzNremdWcHltT1Rqa2lqQ3ZaMS9CVDYzeTBJNVZ6S29aSS9sK3gxaDVUTG4rT3RobXU2aE9aVldIaEErRkE3S0wvYmRveWE1UlkrK0I1ZWwxU0NkNjZoQ0duYWpXbnhJbHZHRThraE14Y241ck5DWnZybktqRVNPTTdQYzU3bzExVTlRZFl4ZFJ6eFFSczhPZTRrb1dYZUk3TU9tQ0l3S2FxY0cyWVY4YVEyZVZsMXFMUzIrQmdkRzBPU3lnNG1SR2ZlaGxFUEZxRHc4OEM1YUhzVkpsbTRreFJ1WEJOTmRTNnBkeG1wOURWYzlTNkxiSVFqVTFxWGh5bCsxeHR5Y01Wd3daQzkwdS9ZYVg3TWowc2lYczBtZlZ2TmJBdGdHbWVwb3VYRGYzRC96MldPbVRiR09mbzU0cHhSYU9tb3pDNWhsSDRaeEJFVHVRTHpiSnpYelduRkdnV1Q5d2Z6UmhNRzRHNDBSaVZvTmQyL1liYlVRYXR1eHIwV0ZUUzNuWmFOamlWaW5rUTgxUnhOeURoUzdBR0lOOWVmSm5aQWMwRTNZS3pNMUF0a3FzeUJDSlhZZGRJNkJoKzUzRkpKbUNNcVlEdjBwK2NTUGtuU1ZzekEvRzljVFRNd0RrWXlTUEZXOWNNY1NXL09Vc0RMSUNxUGprd285b1E4ZFBsK3ZJc2hlQUdmQU0wb2duay9HT3JxRXBxZkwvZGhvVnNxUGV6TkZGbkRXUlArNFF4bDZaUXFRSkJBa3BWRmtlUHh1SE9PV3hXSDYySFVJMlZESUR0YzNydDJUU1JDNGVZb3I2TnFhYjVhbUZSYnl5ZCtIQzhsOGZVd2VJT3pqYmpIRFJUYW9DR2ZBVzlHMm51Z3QwVTMvbDJpbURCdW42dDRhZCtTdUk4bmFiaUpBeENhbFA4QnMwdWgzTnFtSFpPY2VnbDQxTFpCQytkTTEzRUFRWTNKMW9CRjBSZTBZc3haVUlBMldOV3dMTnZIQnpOLzEwdjB1eVhyRzUyVjBvZ2dCYVRDQTNsWnhTZHJEM0xaL3c1L25zMTB6NmMycTRRb0FvWkZzb0Z5SGtFaFJHTGd0T1YyRFUyZHRSRTNFb0tEMWo4WDRxUkVyWWRjaFU0aXhJd0NsS2QyZGY5cTRob1BaNEFaRG9RM3VMT2h6NkJFTG5yZ0RLQ2JFbVVUbVZMNll3aXBYMmlEN2ttTEFLeW14b0tabUZNdm81a1hpdnR0TDVzOE4rYTRoWWZXMUJiUUVRc2FkT0FEYzYrZTB0Qkh3L09jM2w1aEJBcEo3UDMvVnlpSjlmdHpqd0J0OXcyTTRvMTN6UGdubVI4eDJkNHUwdHMxelVHREF5Z3h6MFUvVzA0MG04dE9Ldktpdnk0UkwvdHZ2ODRXSlpJUVZEWlhBemJ0ZlJOMzNpdnk5eGRYakRmT1RYQUo1NC9XMGlCL3RNbzNZakFLYktKWHlIMTNiK3BIdWE1ZzZpMXlyZVJHZjgwMytXMVZYS1hQaWNHTytwLy93V1BQbTZHc0NLWW45d293bFJKK0FzVXkwWjdRdmxSaVJWcnh1cTNNa1hyYi92NDA5NDdpKyszNjRPY0loTkdEeU5XRk9pSGhlUGdVZ09yQVdyTzdCWmc3SUc3TnRhVU5TUWFkV003bGI3R05Ic1JxTTB2MHBRZG1PdHc3OTBydmNqaGRhWWVua2M4V21CVXFYSHl0UFRmTTR0QWhCL3VpMndBMXVVVHU1YW5EWVJYTUI2bHFEVWdlaWR4U2FxZC96UnBqYVhDMER6UU1RTWtwYkZrU29XMmRhR1lzSGdHd2tiSkRCUGI5UWV1cFhzVjY4OGNadkR1eG83SmtwQXZMa0dqYVhJNW5XV2VZZjBSS0M2WkVDSVAxZHpsOVo2WHl2WWxiVGJPK2h0dnQ3WWtDNzJTaC8zcVZIQnlzQmZzYVdEeVVzN2lFTHpwWmlEVmdKRUgzaHhVRVJQeDA2U2FkVWh1aHFXTE5Ec2Qxamp0Wkx2NXVTOUhKTnVCWEhSRDJrRU5MclJYWWVoMGVSY1VHVmsxQVFSd2FVSXRISzRBY2tVUkM5dDVmcW9sT1lHV3RvZmx3ckVJcnhRdkdsNnEveVZKY0N5Z3hCb1BTYnFMVnl1bjJzV1Y5cUFua1h5cnhJRGtxQmpxSFUvUnNTOWl5cmJ4M3N3eG9GYk9leHl4a1pWMnJINWtsTGJYTU56R3ptMlFuVkxCZFRqaWZRMUlJWkRrb3hESEJkbE1OYUdvTkthbysvWlVBeVZOMkgrcVc5di9WS3hCa3VXeWJObTBJSnBnTUEyVVcrY0cxYmNpQ2FVK0VYVjNmMWM1Vko5RXZmODllajdsVElCS2lKbDFJWDJoWHNuWndibDlOYjAwekE2RndtTFBWbjVmZEZLMEg4RG5JVXFCczJjTW53ZmQ2b3o2TU9mWklER3JLY0ZqUWhHSDl1c3hiTkdVVUNYb24zdXk2YVZHZU1BTFBhSUt0dy9kcmpTUmlIUlNxZXFUZkNGUVhwQnlNSlVxbFBCWlJiaFlzdEI1am1IbHBTN05ab0F3R2VoNDZPOE1EeTBQYzNyRW01L21ta1VJZXdtTjNwbGRqS2FqL3pKeXg0NW5oa2FrUmFZZmpSYjNsQm5vUDk1dW1TdldLVFhrazl2RHp0TkRpZnFKYnNET0VqajV6MHl2UWZMK3N4NngzV2JNYk1IaWd4WjFDL0FpaEhvRkN6Z00vUzZRQUpkMHNFV3UydUxkWmM1Z1NTU1hYdEhrNjlFYTc3d0pRbldMSlIwUUI3dS94YUlXaGdFRWp3WTMvak5rZ3A4MmU0U2U2NERaeU1yb3dzWFpGOVJtVGFlWFFTZFBrQ1Rmd2dsU3UzWHF1TW9UOGoxdkdYMUhtYUVzR2sxNURIUkd3VE9aaVRBZVBIdDRUTUovWk9DaXNVRUpaVnBteXk3S3E5RHdSWmtJcExBelhhbDc4ckFWWjlDQzdLd1ZDVjNnS3NvbGVaTmJ3RTVjMk00YzVVV2lpV21jNWE1YWNqOFYwWnViTHovSm9ldmZaSXE2cVJRNmtsSTFPN0NRd3lrRGZEdjRYZ3VVald5WjhtNGdFeDVhY1hkVzZFd0hxQ0xkazlIaHlwb3Y0ZHNQdjhuZlJWSy92cDJZYTZQOWNYY3VqZWh2MjBramZnQ1poQnpyd0dXck0ycEYyOFRHaEdHMXRZanN4bzIrdGl3aHNXeWg2ckpMU3ZCeko2ZEpObUZvd0hhS3YxbFZtNkxZdzZNVGxOSnhmazc5WDRXTVY0ZmkyeXVKSEVoVzRQejArL3dEODIySGNHeUE1R20xVTRZby9CYU5iNy9waThjMmV0VTNXTTR0b1VpQWNIU2N4T0c4aXhYdnBtWi9Ka1BLWGxiTEs2YUtrcld1ZitwckxsYXBDWHF2aDgxczMxWmphZU1xVmNKdG53Mi9rVi85NkZVRnlCbHg2YVFkNUE0cXFlQUdZdFlvUkxJVDE4RFRUaEdTa09uZVVpODNaeVBZbFB3d2c4SG90dXFQY2lQWlJuYkZoOWtOTlZ3c1V4anhCMzM1VWI2amZXcHF1czZXOXFMMDQyTGswL3B3WEtHL0djc0hZdWk5QWdCUzdKSnIrSzVlRUlvK2RBNllHWFlNdDM5YkFIclVJKy9ibVNwTitzS1dVREFoR3MwdkJjU0N4NEZzcWR0VTJ4djdjZkQrUFpsR3JZKzNNeTF0Q1lvTDU4ei9BYzRCREptWFo3U0l4SGRIZytGNnNNZ0ZoV095WEVockd2R3NDT0lNUFpnaURHMU1CZzFVOVVsSUpKNFVoWkZBaUJibXN0YmZhRlpQbzVpN1B2VFNaUXZFN3Y5Mnl6L2kwWFRycG54VVZyNVNHam5UOW1leWd0OVFKWDllTUhOempiR3J6U3dTczdZUFZyakZNSHhpTTNLZDJoVzZlRTlUcGNNRTAxTTdKT21HT05HR2xMRHkxTW9vUmFselYyKzU4Q25oSktjR3h3Kzk3SFpxZHduU3gxcHNYK2lFVVRVd2wwY1hiRkdWUko3YXlJWmZ5TXl6RFpuZlJqT2MxM0lXZTdTYXFFdWlNenAvaUR0d25PaTFoL25mY0VvbXAxMFc4N2tMenNaS0JyNldsQWwvWjV6Ui9Wc3ZSZkhVaFJjYmg3bDR1NUdCWnBCM2drNzl2WjI0b3dlSFNzeExhWEl1N25JRldKMWJtZGhuTnNRNUFWVzZncDY2Wm5PWjVOcHN6NkR1MlM5Yms4K2lSMDRtYzIyVjNPbiswbThNUVQrSmNkaUhTYlBZZldOTEM2d1JHdFF5RVYxczVHYlBBc2lHNDQzTDRROE93LzhQaHJnZWF0UVRJOTNvcGoyZk5uaGlkdkxMTlVWOEJWWm4wQnNEbWZTUHhuTncrMUx6bkNpZnJvTEN1ajR0aWN5amg1WmxXckNzdGh2NVF4ZDdBN1h4MHgxWUpWVUgwTDNZZkRQVU5nTVkrTEsrWTkvUEl2anZObC84b0pxRVdWS3VvRU1sUmhaK1o0Y1UvUXlGdklUTFJSdVZQZXlabHV5K3h3empSMnJsenhZWFdncVhkZ3BKMU9LbjRselR5RkZxZHl1T0FnOFJwbzFldlVSNk9iY0kvdVQrNzNoNmVLK3MwV3BHZitSUUJCWklFNWRvbmFiNVhYdGhDMHNISENNS0MrdFM1Q3lNcnJhVUZHQTFPYTBIUWFXY2pEeGN2NHQvbFFDOFhTU3dYQVZhWFVuZ2lHTXlzNDVsTEUvMU5kK3hhQjN5cXdWZmFpcHd5TnBOdEN3bmZtd3ExWTZ1a3BhcmZ2ZzBaMUt1S0JWNmE1V2tGWlRNVDdjekFyc0xOdFdFQkQrNXJHVmU2RWxiM05CaEZaTlRrWjlEc1BuY3kvdnhBWmsxOXlrYW40SlMvZE1jNU1WRkZpZW9mUDk2cTZkbStzeTFUclRtUFdxSm5ZbXdVRDNzZzU3czIrbnkxNEEzbzlzSGgzbnplczFOcFVLempiL1QrcUVya3NtMWg1ckJpK1J1TTJuaUZvZHh1M0tRWGZoZXRORUhqQWE5SFk1WTVjQ0ZDaVBJZ3dacmdnbWpKSlFvM1J3K2RId1ZiVjdSUWR6WjNpN1c4UEl2YVErZFVJUGxhU1NJUnBkNG9jdTM0VWgzdDNmR3NKTUI0cEdWTTFQNnlGOVJuYzJEQ3hsaWx2SCsrQTdyR1hlUzdoaXZEWWVjbFNWWFh3Yk0rSnRuSnBCRXRocm9BZHl1SDdWNVRObU1hUERMYmoxZFdtdnZGd2hvNG5scVhUa0dNTnRrbFJINjlleVMvUTVtZmhqc1RVRUFNcEFFMW5CVUJtMXRXbGZrVUFkWFFMQlZ5a3pqNWQyM2N6aUxFbG85TE8vYWdXSkg0RWFtaFZXTC9CRjBGQVRha0lOUWt4UnR5M1ZGL3VtbDJXQTBVT0VHMjM4MUhYeHZFNXViYTQ5eTlKdUgyMENqRkxjc2YzWXoxN1o4Tm9GNStLeVZ0R2lLK3owcXppek5uUjJvZkd2M0czMTNYSUFRNHUyY1JKSVhaY2tRcmVqb291Nlc0T2Fnb3paNlhyQXkyTllJOEZ6bGpCaFBwS3NwUWRMQTU2d3dSbkxkWDdYc3hyZjVTdXlwTkVNVWQyQVA3NnJvT1R0bGRJOXkwa3RtMWp5Y05sak8xNFRNbVZ1S3ZYZ3ZUTXdNaVJ0WDNFU3YxazJqQVpsbHREMUN6UkU1Qmp6b0QvQ2UrSW1Xc0ZRVXU1TUV5VHNBU3g3dTk5akZUYlVSc0FvZndRYnIrSk9EMFU3MHF1dzhpMWpUVjVIZlQ5cGNqbFQvSnV4SFJ2NDRJaGZlY3dKeHhVOGh2bUFaSFhTaE50eUkyZGVwdllId0ZCNG9sRkdYU1VyTmswdExrV1NaaGVrZzI2TElyZkF5ZVRnaTV1L2VYMEFBM3dmaU5qUmZtMkRyQktMZkRHUHZudFRtUkE4VUhsVnJiUGV1NGNpcmgxV2NGTGo3M3MrNUF3Wi81VUxKMUdQc25EcFhkTkZGSHhNdWdkTDNpWHdUYlpadFd5em5GY1Q4U2pLL3dUZHU1RVk0OEgrVHltL0RtUHRkdmVzc2d3bks5Rmx0NFZ2YWtaQk1ES3FSSmswcjFzcGV0KzIzdER5RjhhcmtCTTBoamVRL2dwUWtBcGhEdTQ4eVZTZUhtZFRtQk81L25kRFQzcFl0RGxCKzJFNDIvTlNTK0lmN2FsY3dGL29PSmhDd3VGcnRUUE1FUEdqWitwOEN0ZlNRc1pkbitWWCtiM0FxWGhCMkhiVC9PTmtzaHlDRE83dEdDcDFmRHdIMHFvc1hNYmNuN0xzOCtId0lRaWwyWUVMOHF3cDFwSU5lRzZ2ZGpDbmNMb3hBUFAyVVNuZVROVmVDMFBsRm0vTXJsbDI3MTZpU0hoWkthb3k3OUlPQmFab0k2Z0FnblhZZlhQamZMN2czdmkxS0Q4WTVqMWdCZUQ3aUMxZkF6NnlLK0hiQm9RZ2l3Y0lOVUFFeEV6VWYxT04xK1BzRGpobUJuV0h0YlM2elJtd016QW43TVd6OGdzcUtoMUcxNEI4K001SWp1Um1ieitNcjFFNC9wZDBBdFJGZisvV2h3cDBZc1g1UU43QWcxQnRpdkY5NDRrZGkrdVEwWmNKLzBsdlhwZ0ZZRldmemxUT29JelNKckx3aGRWQ3VLSWcvSUpZaktMb1NMSGxSbDhjT1hUK25TNjgrTXBXb2lQOVNrRHMzTnJlSkdwQ0dlZE13ZDRXQS9IMXE5aDE0MExpR1oxM3NrTU9hZDV1endnK1FiSlhoKytRdHN1VUhoc1RqRDhjckJBR2huWGk2ZzhrZUI1cGQrbVlxcHRKYmowOTlkbjRLd2d6bDduUmtjR2Z4WHhkTFUvQXJmVm5TUFRpUmFsMGNDQTdCTFRTeHZlQ2txUmZHcFYxR01sb3N3N05yVmp5SEpLOEl1b21VeXpGbEpFY3pQOXAzTGFCRmZtV0J3WitMRUVZR2krYXlHVUJ0dFNoWVZFaHVidHh4QXJNNjlDUTlLNDZzMloxbHBlanVYbkZ6RFZjQ3pwUWhqcjY2T000TWVVbWM0cW5FTnQxYnczUldMS3Y5RkJKNGZVL3Y5UE16TExZT1drb2JmY1BXM0VoNG4wWjRGZ2JWT1hmMkQ2QkV3WVNGVmJua3puVkMyMFBRMkxZcTdBNFJyWVo1VnBuTGliV0VLM1JEUjZUcWRSR2tGWU5tcXJHYkJNQ3d3bjBBbnEyRVljSy9MdzNIaHJ1eEZZUVE4R2Z4MkJQSkpDTWUvM3V1azBOY0UxZzR3SU01NEpodkszTE9QeG5aY09BZnFZQm1WYm13SGJ6Sm82Rkl0aTBUbVV5ZTljazRHbythZ0x4SFU5bittTzZ1bUdkeE9aN1BOT1psS0syWE1SRFhGbXBaVndXOHk4Z3UrckErUUh0Rnk4cmFQZEZGV0RVTHVocXJFZ0VodUhZMW1PRTJ3bGcwS2JmRGxaOHV5ZXBsSDNQVjZJYncvU3FLTFlyYjN5U0R0cEFTREVja3dPRDZWK2FPdERsZzZPU3JTVWwvaUJiTElIYlhMOWpDbG9ZQ0pEWGZjdXhvNkNhTTU5bVVJVGt0ZGltNmc3d1Y0cndxWmkyUk1ua0UvMDBTeDV6UkRyWE5ZckExY3hpWnVvZzBSZnZ4bjByWGJ1NWZqb2dUd0MvV3FZTzNiQlJjNzRia0xCVEJJTFgrcHRGTWlBVzVod3gxY0JOTnkrTG1Jdmt2V0pmNEk0c3hWZUtNUjVkbjdyM2tGY25NV2RDd2xqcHY1eDZVc1huc1Z4NHhEc3ExUUZ1YmZndXMvTEx2SkxXV0lrRFlQSUZjTG9IN1ZVL3daYUtLNURGYlA5ejdDV0UwZXNSTW42dEg4OWlsQ3hlYjdXTWNsTTZ1Rlh3S1ZsWnB4V3pYREZDQm9IVUtmOTQxelc3S2ZjUnVJUUhhcmdVTWtLNU15elB1aWZMNTZQSXgwTFBtZGFkVFUyV0ZsMzRxZm1sNHN1UFhIVDczUkNJM1VXQmxlWWd0TEwySi9MS2VIR3JVR2dXL2ZvUDIvMCsvWEMvTzM3d0pwbXVLWWlyalhpUEpPRnRRU25CWE5yUllIR0VxOHdsQlNacllQOU1zYnFVZTNlbkhabmVkYjdEYSs5UzZSUmFUZmE2WWRRYURFZTBreGQ2KzJtLzIzSkc1TGEra3gvTXpRdVBoUE1xYXRaejBtVm96djBIU2dBbHV2OVJHN3N4OWdjTVlBZ0U2TDZ1YzZ1MlRPak02WkFueUlkTjc5VWtJaHowVkpuakNUQzFYdW5mb3ZwUjg1Y01zU2RLMUp5ZWtxTmdDcHo2YnpJbUhvWkdLRGgrWG5yVnBldVpQVysvS3gxY1RZYi9MLzNRTnJvaGNMRmlUMUl5K2NZK0xuSEtYZ0I3cDdCM21qT3JGRVI0Q1JhUkpFRDlkYlREUWswdGRpaGljTno5US8xNjB6Z2ZGN0pTNHdxaUJ2R3NjWDVGL3VkTXNPVUhsSmY4VTg4VE1QNnNhM2VDYjRNZndMd04ycnBOdXpwbmJGRDR5RndLSVh0RExlZjg3RUM1WC9vbnJWL2MzL09wdCsrTER2NkpRNm9XeEE5SEZqcE1qVlU2ZDFXUWxsYXVJN2xrbkZIRGczL0RXNDhXVm1xK3ZTQXJsenIvOGs5WEJLR1hTWEdnUlVUeW1ESHV0MGxGMS9teGpzd05qMk5GK3MvekVkV2k2MFJSWHhtc21TRnFxODkySEdVckRMbG94b0dWWHVUM3N5VWVPZ3NRQ3RQc2lVU0hxWHBycXBuVXZkaEZyakN1N2NHMkw2WVVscmxqL0Irc3pKWFJXamczZEZvWERFMzhKdGpEaDJJTzdLR1FkL0FKT3p6WDI3TnlKcjJMclpTaDMrWVZmNkdsUWdManhTbXNLNDNrMHRNN3pKSzBDL1QvYzBNNTJSY2NXVlpJeG1OZGlXNWUzWEhWelRGSEl6YThRVlV6eCtXZ29ZUTZXVTVhVTlaSzhXL015ZHlkc1BTaHBBREhEL002K3NwMnNCUHBLckgxcS9IdU1GWHJBdG40bkJoZzM0NDFjdnd1bzdCdTFTTlpRU2FySG9pVnFNRVhEQ2JJZi8zakxCWjZNS3k2M2VtejhHaWFJbnlCSGZYSU1sdU1XNlpTSnBvVnc2RzRYZHdEZ1o2TEVLZ0Fqbm91dzRLeVJ6SXNhYTJqMFJJSVFFVm1mNWplR2ZYS1NUL1VJMElQMy9Vc2E1WE1pVEpOQVMxYTJuUXd1RXM4T0dvTFREMFRSN1Z6ZG5UbGkzRnNGNTNaOCsrSHhuL0JSeWg4VUNLL0hYREFNQXB6djJFbHlxNlhyN2o1SXlMQ1g5aVhwOXZBbTZlcTQ0WlZRRUpaUUdaQU45ekNYSDNOWnJNL2FySXBtNW9TaE5PdzRMNnhBK2NtWkdHVWRpOGRodDI1Y05iRmRQSnp0TlNiV21FMEVKLzZHM1BiWEpVMEtzdEdLbXJXRmxSSDVjRDRGd1lwWmV2WFBjc3UzUk9nSC9KRDRpVDgzb3FTK09ocUFBOC8vT0poYnFuYytlRXlCaU43TFdtREJqVGRqbHA0bTFHcUtzOFNTYVVLL2JIdzJGVVFxcEdac2JLQ24xTHJGWXl0MTM1SjZjdjhZdDg5S1dhVGdDa1hVWm1JeEdhcVdEay9aQ0V5bU9LdUpaM3BZandGY290T2owb1pBMVJvR2FDaSs4MHlGaUtBNHpVK21kQ2ZDaGxjK3g1YWRET1FTZlM1SnBCdFpnTW1mTlhrYmJYb3hlR1hpRjV0SjRXSXNCRDRWUXorM2VSUjdvanJ0aXFwNzdsbjRzeFRqQTdwazVSajg4bVhSSE9mb1J0NFBmSktiOWNkM1REYnpjcjd4U1JNUmQ3YVlsbld1WUF1TTFlbVptdGd2VUdjZ1JtNUdNck5XOTdXTENhd1VvcnZ6UEgxeGxET1pKWDBZV0VzUURhZFJOYUs0dERrRnhVZWo0aHpTMW8xc3M1VkJNUm45TElyWkVjcDRIaVdOU0JGUFhudEVPaWNRK3M0ck5RLzVmYUI4bTgwOU13TzZiVkhrRm9va2xzbmZzY2ZxRGtPTHplamFGNkQwSjdQOHV1aVc5Ry9vU2ZJeStudVZVdkpFMFRuVExSWnMvQ28rWTcrckphOSt5SUgzMDloV3NvMmFmRjc2Z3cya1cwTjlkeXJDcHdoV2syaWJUZzVrZDVpcjNZeUhUcGpicWNPM2xIL2gzRDdSL25qamkraHNPTE84bm1kbmNRTEdhWWFUUUo4dmdNU3h4M1FaMHhkZUZYemQwREFucVNvNE1jcWp3bW5mMWp5a0hvMXNDWU03OWlMRFNCbEZjcG0yOFlKb1RQaFFtYmp0c2lVaTI2c25DYVU5NnNFbVpaLzYzaEN4cmJiUlc5U0duZzhLZUxwSDRJWCtqVTdxODBMSUpvRHVpWWpzUy9ObC9nMVdwK3hVemtISkV0TTRaRDlOTG9ISTdNVEIxTVFianJOd3B5VndNMXcxOUx0a2FNUUtzUWNZOWZmdWdzZTBHMkk4c014MW9QbmpFY2FMTFVDbWZnZTRFRGNlWU9PSEQ4Wm50UU5rSUpoaHp5L1dEa205K2VHNVlneDBtK2hnSCtEY3pNNDM5Yld0RE1ObC9mWnRnNXhRRis1WjBPZlRBd1NDOEFwMHpWSExOMHpYbTVjbnpZOUZaUG5XY0pCNGNvNk5BWUFIM0lpZk1HU2gyWnFkNCtWVk4wSjcxNmpQRVpId0FKbCtCdDZDdXhjRERlTkExVEo5N2J0ZUFFMGdOS1REN05pQWhtZlFkK2w1MzJPcTkrWnBhbWNmR1NWVVhVNnlQbUNGaTY0Y1loVDhyanN5blZNMGNWR25MYWlvV0NTZHBqSFVrQ0hNMHk5bEkzczEyZ3lEdC9xcmthUkIrYkhLWlo3TFRicXpLWGJ5Rm1KUlRybU10MVZpZE5iQk5Da3A3ejdqY1BWY2s2dDZoK210aHBEc0MwcG1GS1k5cWxZLzMzbGNTQ3pEbXo2Ny9raWt1UTkzRThoT0xMeW5ObVlRT3FWYUdmZ0V4UW5tYmxVOHh4aExUMDRqVk1UYjMvcVB5RE8yTW9RYXE4dUNTdWdRVW1IeHQyUFRLN08vQ1ZTbWh6UHNOb1pqYmgwdmFKdjBoVDVXbEYyMlZjSzl3K1g2a290YVpUNVpsQkJuckJGM0hvQld0M09mYUtxQUkyZ29vbG1ZczFpanFIK0NvalpQOFBNcWNlOHNvcWVVenBnQWQwdXNUMlRXRTJTRitOQjNuZUMxRWZzQUQ4cDE5Q2k4aVFmOEliQkQ1eUN6NmFkdXlHc3lkRWVQMUdQeGpQTUtickdRbnJQb1dBSUZxMSt0VTM4Y3l1clh2cWJTYlJUMndlM1lmcGE4UFlpMTJ0R3g5S2daSFVJcFZDNnJyZ2VyTnd3RzBBVkQzSlNjTk02VnZ3Z2s1OGozRzlhNmJaNk15V3lKRkwzRGd4V1ZzQkRVUXRWdnB2RWtxZnlPWDFRL1dMOFo0VFNDOEpjWFIxSkRpWkVodkU2by9XWUlmcTlFMy8wKzRLY2d5UkljS0UxbUd0a243ZnE4cjROSndKOGh2dU5rTXJ0YVIrU3JyaWt4SU5LQ0Q4RE53YUo4dS9QVThabHozWFB6RlFpYmF5dTlrdFBXeUpqNDY0aE54Z2FiYThzOXRXbGgrNEQzZVgrdm16eXlnNnFUTTkyRml4L2VsckFuQmV3N0dvSkFVcGx4STMyMlQ3RUVBck9QRlF6QmJSR3V3eHo5NnI2TUtBaEF5VG5LNUhabDVUeVp3elU4NURJZHk0ZEQ4MFVTQUVscTBaQUc5eDlMR2JKQXBSVFJiNEZ6d3l2b0h2UXhVdEl6N21QTC9Ta1R4WndreEVCN3FkcjQ4RkpqYXJyVWloOGVIUVVKUHZUYzhuUVlZOHJSdXBxQ1ByT213NkIrTUtWWVdvMk52ZUdIN3poci9mT1dPbVZJNmdEMkdxVi9pTklVZ2dlNll2OEd4bzYvR0o5SHhQTzNMKzFNNmI0V3BNVHNDZnlCemg5OG9HcXByY2Jhai9ybjNUakNwRWYyMmRCcHpwZ01lK1JJMFRSa2ZJbWtPaXUvVVRKMU9tZXZ5UUdDRUQ5QjRVNkJzSE1GdVo4Y3lIMUIyWmFSbWlRdkZ4VklzeHJEQ2xTVkdCMDlBbXlzQUdXVzlIenZ1YlBTL1RMN1daVTl0UVR5Y0VhdVRZRE5PTVB5NXhWTFRicTNFYm54TGJ5RGpDQkl2UWR3WWY4dzRaMmhzcCtCRnUwck5tVDA5TlA4SmpwaXlXaWpncHQxWHpreVZyZ1NsbWUyWTg1TkVCVWc4MzRwaXl4YmYwNmNEdWs5L2RFVlJvRXJuTUxTZW5pZFFETUhuemQxRzZMclJDNmxTaFkwSkNLNVlrRm1mK040MmcySVlSN0dkWUQvQm9OVHFEZHFySGRka200eTlqRC9DVHF1cFRFQzlENXc2eXQvdlY0QWpLNGtsTU9TRHBCUjhzVlBHS3hxdm9SWUZGRlM5b1ZDUXhuWU16NmZFSFlRMTJhUHVmdEFwSlc5azg1cURKZHE2eU5tNm9STEhXNDhKNEQ2aERoWDJUWEdOUml6ZFpKMm9vSXVoNjFvMnpyVGd4T2NpbWdMejljSlNzMHREMnMrcEc1bUV5UVJrSEowL3dFT3p4TytBYjFSaWhEM0ZQT3lKSHV4TTRjY2ZiZUwyaFVIeEU3NUJOQmt3WlNwYWlNM3plaEgwTVF6MjBnSmNOYlhTNGl0QnZXeUhJV1BrRzdVT0xJRjJTVnZEVkZUQ1YzVzRUT0w2R1pUUXdhSEt0RVdxSmRwKy9xWTNFWkJtb1Y3K2Z0dG4ybHYzWG9GeFphZy9iazNjaXNUUmpmRC91b1JveVIzcjFTNzVKUnh5TXRCMWI3L0ZwaHVDOWp5N2JyYi9sYm9sZEhrSUxSK3d3L0tCWGJjOVpyMlVxWkJDQ3lQbHFreWtBM2FGdjhucWQ4TEM2WXZxZ1NJaGdDNHdLaFlCMTdOd2NBS2pXSndyRTVYWGc5TnFZVDErWDBUVktHTEJEQmhBVHA0cVJWU3RibTUreHhDcnhTUEtMODNwVEMzNXV6ZEZwa0lUaUFnZ0pIM3ZOQVdYaFE1Tk5UKzVhSm8xdjluVTRpUEpzQ3ZuRDhZN2tOMU9nRXg0MDFwanQ1Nkk0OFUvbmszSmV5dHRSKzE2NDNQYWt1ZlZBWXFqbmxkRmF3WjVMUVRmbFIxZEdSNURMb2szdGhhaGdyczVMd29oZDRRVkZ5d25IMENValJFYU1RQjZZOTR4S3pKRmJqL1dXUVFKY0hkMDRydVRqVlEvZEdaQ1llRjhSV2JEQXV5R2RhZkdEMHY1ejJHRGJiWXk0M3dtWlNlSERweXBnWGt4OFhIOHVOR3BMZ2F6K2ZSckREOTVSU1FtUGk1WUE2eHN3OHdYdlBybG5SSi80TEt5Q2NkVlNjQWpPK0NhNGE1RGtLMFdxQW4rcTJENTZ4VmVwZ08vRFJ3U0Fyck1STGlNZWxWenZxVGJoaWkxVHVCNkZJK01vVFE5YnpzMGxiTE9QeERTOWxxbnhPUDNjaUtXd2h0OUE3YWdiampxdVlrNGxCaE1MbmdON2J2Rmp6Y0ZOcHBaVytGZUFvQXVwWFhJaVUzVXFVTTY3aG1hVGNPWXhydzRGc0NGeEg4T0gzM0ZRVGdUaDBmS0xJeXpobFpLaFZnbTZwdldnNWlUM2V1VmFxcmw0bEw1eDNjOTZKVXUzeEh0blcwdnJGVUF6c29RWFI0cjZId1M4Vk1FRGZXOXJYU1FnUkNFbThZMWN1TGxGVUZ2MHY5Q3FUeFZmMDVWazA1eG5XRlpaeW4rZ0tSZVF6czV1d2JubC9OM0V3VmJRckFZeTVpdGJWQVdFeG4rNDNsd3BxT2taazJMUjAwWFpKTDBuT0lScUJvMTltWlBhd25ldlgyeC82VlNYajU4MGM4Y0tGWXNjVDl2RUZmZnRTZDBpUVBOSEhucjlEaWhiRVlHVWFJdksyWnFlWWFacEhWcDdsOGxHTVBldlUzMnJjS2w3ejA2SUk4SGNBSkEzYkJlSVJ6a0g3SXdURG5GWTNIVXhxN2FWOVlQRXA4MnQ0RXIrSGpUNWk1alBIQSs4QVUvRFNueTF5Qzc1RjlZaTlseXYyV3hKMlIvWGY1dlJyZGhDeVY5QVRVcGRWQTEwTTBHV3YyZ0FVZzhJS1hZVUk5eFlQc0hXMWxHUXR1NUF4cHpsUkswaUxYVmV2OGVHRE02VTZhWDQxQlJZTDZIOEtTNmtncWJNdlVtTk5IK3grWnMxTGlpdUxTN01jQ043Ui94ZnFxNGUzbWNCdGNqTXd3OThHTEVsZXV5dDdwa2R5bEV2aXJvY1NDcmlQSnJBK0NBc1l0Y0N2UGtLWU5uNmVENkRZaVNpZGlyWVJ2dW5qejUrWUk4RFU4ODlaZS9rZ0s2N0NjZW1valVHOXdpVkw3S0xqQmgrcjFCQ1RSaDUwOVVsTVJKNDIzVm9CeGVSczRGVnJOS0hnWm9DZG9ZV25IYUc3Z3FuRldEVlUvQWFvWFhRblJiQXl1SXNCMWkzSlhvbDFvSHREdnFnL0pFWEQ4aFRYcjJnOG1TSjM3SUgzY0x5b3hmR0lPOFdHMEJXZTQxMlBhcy80OE1SY205Z0N6R1NmcVVLNnNXZ1A0Nk9FTjU4eDBUb1NOVW83S2hLT2FITjRvbTNpQU9lRGx2MmhyVnBGM01qalNJMWhiRTZpUjlnejd5YTU0N0NvZkFjL2JJYnoycHNmbisvSXdONC9RTmtNMGNOL0lxL3UyZVlVQXJtN0N0WnBXZmxtUTlKdlZaeTJiUWg1MkVrNzIremRHREV6c1JJaFdHZUt5SStmeDFtdS9jYnhyWGY4YUNyVDd0OWNwYVpCVXdqZkE2ZnpWVWtpZXVML3ZIR0FFdkhEckxPemdNYTB1T3FiY01McUNMQzJZdkRJcU1uS0w5ZDJKbitwYkYxbGR4T0pqOG1nejNsSkE4d2pHMDN4TVZxU1VkaEFEOCsySWFqVy94K1p1b2dzc3E4M2RQQXREa1VLYWpwTFZ0TTI0cko1bUNLVVBHeVhRc2RuOGdOVDJFRG9qckhQdXF1aGJISmZteTVzTnhuYy9iK2VCY01zcTV0N0tsWWpZQXgrUzd6UkJUOHFodDk3UEQ3Tm15QzA2bi9sblU4aHJzK0VSdHRmYXdaZ3VqcFhzdHB1SUhOV1p2c29RajJTZGVja2d4aXZHTUNpaVg0cEVmaXRmNFZLWVdlaHd5NnVzdFF0am5ZN2FDaGh6a24ycitSSFBrb0lBNGhsSTFmcE9yRUtlYVJ3ckNNYjBiR29JYWxPWFZvOXZPWTZRbWNnTTR6NmlvdzNyL2x5SWtOdnE4RWhKWi9QVlJtVmxDVXBRSTc5VHYyV0tLVFV6alRaRmduWEJZaUt0cEhPcURxTjBLRUxwUXNZSTlhMkFPZ0tyVlBPS2VJREFLU0hWTlFnYlNBVjdNREtTTlZ5ZGtNUjNId2c0TWFrMDJVK3J2RFJ0UUJQbUx3OUJEdTEvVUpPaERQVkhmU09nemY2Y0x6U3lkSjRJRk1DM0w4VDBiZ1h0SE9jSXBkWXBwaksxbEViZDFMZHJ5RU9PL3cxRTBxY3BldkNBUHJyQ1NTdEFwTDE4bzBmd2tobUwxckNRVThPbE4wUVA4eGw4YWxQRGw2WmRETVBvZGZwUkp1ZXlsaVRKSDY1TnlOT0ZyeXorQXBqYXRXNmRJTzVFakh2K2V4TnBOY1I5d2JlTFJwQWJaSWVvRGVxRk55RWYzVldaOHA4SWNiaGF0U0xlMlpGRlJNeUd1RlhBMzFIWHhGbDdraGRVRkdnK0VGWmVPVnpLZWFpSVdPOGtib05SenZsTGp1WnpqT0JidEdmcm42cnQ5b1EzR0wyL2o1N3dKZXArYXVxLzlFV1F5QVRRL2N0WmhWdUlyWUtZVFQvZVlRTURwZkpIUjJ0OVV5UVFLVFNjSVcwazJhNDF2cVNjaTE4L1FFakx1dVhvQVNmZlRVdTg0L2MzMkh5elhhUEhYL0crUnBrUS9VNEcvVUpNVUJEWkRhdE00QXNmT2dXbkpNTStHTDAvMUp2OXl1aEVaZGpoY0hVeG10OHhzSGVhT1RZdEVyNTU0OUZ6WVM2aE1obW84em9ZL2QrbkVFWjdLNVpXY1Q0VFYzelNxdUhjaG5rNFZuOFMvcWh2OVl1L2NZMS9xbFRvTDJ1ZHFockhsNkhyVFJ3cnFJcXVjODJFaXJISEhzRGdiZGlNWVlTQnJNdldwNGlaRW5UZmQvNTJpeVdzYVVFWkJxazRoeS9VRXV6VnpTV0dXNllTc0FmU0pFOUNPLzBKMGhuRTBWVXBBSTBxNXladU9UdU5vR0RQQTAwejRHZUp2akw4RDJ3MmFIRlRvY1lKTWJhZHd1UFpud3pEQUEwdm85SWQvRVAwQmQ1WlNlazZaZFkyeFQxUURkSHd4YmphT3RxUXZ6Ly9mdlM0eEpDREZybkYzbzdaQXF3cWFUcCttS1I2M2NSZWxzWklJOGRLbjJQL2drOVV2SEU4bEt1cHJZckpOeWpZRFgwdm9za0gxYURyL3RMOHhpbkV2Uk5ycXp4ZVFyN2IrcTNjRENkbjRmVnFtN2oyV3VEZ3Z0aGcwbko0ckl3ajNOZDdSY2FYbXE4Y2dXc2FmWFJkNXl2d3JaODBSOStUWW9adndwcS9WVFRZUHdHVGNnUnRtWlFBSmRnbUNTakVCQ2diTDA1cFZHOVNtM2JUYlN6dkdpaVZ1VDlzTmZEM2xrb05TMHgrbW0zUTlRaWNJRHFMVEp1VVhsaUNTdGRkOWRuK0l0emVFRkVTZWJTL21idW5EQ08zUkNua0ErbjFxL3dVTkJNOXBOL1JCVncrWkxWbDF2SUVKWkZCeWxhOE54TkxaSlBGT1pTS3JPNU51WTErWnMvUXhTaWE0bWhSSHEzNkplTXljVHpFL1dSbzgydjF0UktvK0lIYTRrUzlvQ0c0V1Fab29vM215L0hzTU9UVHUvQTloZnc4ZG5yVjV2TkRNQzRBck5hYWNTbTJVd005ZE5pKzNyTnFtaEczcDVMTHlwc0p4Qm1VbldldW8xeVVNb2JqVEcwOXhGTVNlNkMzZlZIYTJ4dnRvMDltTU1IUzZoTkIrTllpaHlhTWRQcW9jT3grTEpLVkRrakxCSk9tQjVlbDZ3SHpVNzJyb0xvaW94bUFram5Ia1k1cnk4MkxiYlVTUjJLOHpzTE1VYkxnNTFIRitzNmxwNDdJNmdrb2wvQy9BY2lidVV2RXRKTHJCRXEvak85TzlWb2pOdGJsMjhkZi8wVWJzZ1RDeXpHcitJZzRQd0JtdFBVKzVXRVM4Q2pxRFZMUHhxc1c0UVNzaHpESk1TOG4wVTYxVXNhd2MvVGIvVm13SktuZXJONFY1a0RTT3JndmpzdS8rWTZLSWFVM01zN05DRWpBcUxHNU4wNEZPbktjaDRKeXpOZGlZK0t3L3dwdmRMUHhCVkJ3RGNZZmJtRUVlTEtUa2x6dTNyajk5aUFKakdWTUFmRE5TclhVSlRVNnI0VnhGU1lvY3ptQThwWE96QlNvanZaOVNwVlZiTmxEZzJTYm10SzNJNy9vZ3VUb1Q0cGVCYXBMQ0JtM3haTXpMODdidG5TVWwzMG1NNlRGSW4zYmdYaWxjQ051aDBLcHNyOEhTYmN1RUpOa3Njc2dPeC9VZEdySWxpRmtYMUlRYmxmQ05RVlZKbm9SM095SDJkK21SNVZhOFJGKzFYTXBIbG93QkR6anNBY0dtL2dXSXVwd2VZY3Z1V0QyNDRreFVoUXRQaVJmOUtjd0lSSmdzRXNaSVUvV1VFa1lnUTkwMEtaWnp2REl2emJZNHFtcWIzU250ZldrblZaMXJXdVBLTzY1ZTlmNHlYZTZCL3ZvbUw1RDVyQ0xiZ1V6SEhVVXlKQ2xiVXpON0VGRC9XVW9vMXRKY1VqdHdKVkwxZmYvR2pvb1p1RWd3Ylo2eEozdFlJQ2hsUHRDb1doNUFSekI5ZUN1dTEzOEkrd0hDMWY3TnBVMjZLYzRlb0k1YzBuL1k3WlRTdlBGSVNxZ1FxUVhGL3I4WEtuV3BlUThFQ21nOGFFakZOenFvSkVtZ0JWRE5Gc3BPN1FsOFAxcHFGVGt4empzSEFaMURraHVlQUNzTUJCTmg5R2VPMXJNMjR3aGw1Tld5OENHRU44M2d6WE1rU3VDeFZ5Y3JTNW5tUjM2WlYzcEY5aGswOG91MDV3b1VyWnVLeFVTMzMvUVEyaHpBRmtlT3VMN1RMSUQ4K2FnVjFVdmlmQlIwTEwwWEtzUzdaRXFJU3BwWjlTWjFJY3R1MllKSThEVzJMWmdCSHM0U3ZSd2k4dXI3YVdmWVM5RnVQSW9LZXd6UWxSbnpKT2RqTlZoRWt6dS8wOXk2cUVCZ09VcmRkRmlVL005dW1RM1lFR0xodnpWeU1kMUlWWk9lSk5BdE1MdVFsY2E5ZHJFVTlpRFRwdXYxUkNXRkZITEJkZ3NVck9PRVU2Z09vakFvZEJOc3hmSWVKSWNrdGtNS280S282Y3F3NTkwYVJVL0VOclMrbXVLRmg1Zms2c0wzbXNTZ3ZwYTcwdmxsZ1NIU1BZRzBnZUVBVW91c1V3MFRKaWpsVmhidlpSVkRtK0cxMDlIaTFFamJaM2RaSWNDSnk1OFFIUWNnQU5xRXUvRWlIN0RYTEtOcnVXNklqeDJac0c0RkxxNWVXSVlNTmdSR3hpZUZvdWtWZHMwUklNRGVGUjFSamgxR2ppOHdINHYvYWtGTnVBaVlOaENqSE9wblBtRjc5a2N5dzMxVjErQnM2TnQwWFdQT2tCS1gwWUdtR3lmTzFKYWE0SXRJU3RiTXJZZi9OZlJsb3RhUlBUcnI2R3FaLzByT0NjMjRPaDA1NGNHei9BU1pyV0grdTZhcTBXWllQbTNma2FjTUtJVlRVL3pNdW1KMmJqcytyZ0o4OWVDcFRxUzdURFk4MnA1d29EbmZKcEJ2ZGxnZE9LTksrQkcydDl5cEszM1dzVWVIRC9DSlc1M2lueG83bEVJNUV1ZEVLMUR0bXl2RUk3N2pOUWZ2Z0RRMWd2Y2NoamtVWGpPY0taeVpEbFhXVzdiWEQvMkdCam9tNTNOWk9vWkRFZFdBT3Q2QzMzMmIzU2tUMWpvMjRMRjVHZWZLY1d4a3FZcjByUFpyaTJ4NlJtUEFQc0RIVlNXSS92ZkZYV2ovZndJYkNxQ21qQ3JXajlIeXlvaFdmMVFCTWV5dGhkVlVZUythNFlQUy94NExzeFRlK2tmVUNvdlhhMG4rT1ZicDh1MktOTDM1dmFmbHg1QUF0L1NFV2lqYmU1QklLM0UyeGZKVDNhL0IyMWF3R1VSYjlzSUZ0Si9ydUg1L0U3b2hCUk9BL3Y4MHloeUtQSmtDYlVRRzZaNTE1TnplMmZ5OCtYampSdFZEYW94dWRXeHQ0N2hyY3lzODFOZkhRTWxoaU9HYzVjaXBHMTZMUW04amJNN09jY1YvVEpGdmN5UTg2R1JPM1lEalZiUS8xOXVrWVBEcUE4YzYwZnZVMDBBWUJJWk94UWZuODlmbE1vb2hIbDlhdW0xaXJ1MmlYbFh6aGVqWC9KR3B2aldpOXRJY0VzVVhVVWdJU3N4WTQ4ei9Hd3pNRUZMT1B1cmtzTEU4bEFaVS8yRmJYekt1cWZoTHVYK1Irc2hOWS9qQUhPajFjaHg4SFd4dENQeXBpVllDOFhNdmtGMmI3MXZzSjhRZXBTbzArclR0bG1vcmY2dVVYR3FiRW8xeEpKMTlZYmtBYjAwaE9uYkFjRkJaMmdweUdDYVN1OFJabEpMNVZQcFN4UEgvbTVSK243STlTV3c4WGowYU9kYWMyTncwOW5YaHNMWjI1K2V6R29CL1VaYWNYdDV2cll4cUZGbnhqdXBRMTlJcU16Qnl6RktweVN6aFVkSjI4VU9NZTFGbk1hZzNka3V6TG5Yc1REQXdsM3FmcjdyQWdlMnBnZkhhOTdlRnIrOHRrOHBOSU9ocVlFZzZtNEl0N2dHRml6NDJQa2dJYWFMaHJQS0YvRFNUT29VTkJld1QyUFdyOWFqL043MUU1eXZJUmszQ2pNMXhaT0NRbGk4cU9nVUgvczgwQytTditYNlp2aHJhaGhuK2VSTndGNjJNQ0oyUmd3Z1pzSzdsVVlpK3FlZk51YjdZMzlGVVdOY3NwczVMeHRWZTNLYjZBOGZDeVVyQkpEZi9TaVNsZEsyS0pKL0ZlQkMrYzkvUi9MTytNdGl3dWt4NEtmcHoxb1IxR3FkVU1tOWVaTzJqS0hvb2lUYzBoKzMzcFB1aGppUEZGUGhlWmhXMGlpdkE2NDROZ2gwa04vZzBjR0J0VHpORHdhdGY2R0p4ZTVPdUxJQnJhS083UjcxUE5sRzJUTUtmRDB4QWdPR0xaTjRLcHIweGRsMnBTVjF1TjVsbmFFWW9hemFIMnVTUmRZcWNjV3VodDVxOEJVYlVPemt4KzJib2pjVDZTR0h4eFo3b0dVZlZoYmNkenVEOUoyUGlPbkdQK1Y3bklMamhBb2VtLzhVOWRzeGx1RjFtVWxaS0p5Z2x1dWVNS2h2ZHIxcEllQ0ZEYlJSbzB5Y3NIZjl0Nm5hbWN0QysvSzhMcnlEaDFScUhMYXVCNHNrOU1oWEl4Si8xUjQxdExVcXVoZm1SRjRENngyQU91VjBBUE8yWVRjMTYrSjJCLzhmdDVQK0pRSWhhN1R0bUNTUlR5OVhWRGs5NHdOZS9QcTVQQ0RrRk9kdzROM1hBdUNhbEtKSFlDQWs2b1FUYVYzVmR3dmxlWkFqTkpNdkc5czI4TlpyTDZmK3FxRmt2Qjg0RldEREFldjNoc1FZU0FaRytIbUhWVDA3a29oMjB4R3NyQUtGMU9kVEF5MFVESnRKekpnejcyaXVudWNPS1FUY2lnTExoUG4weXY3WmVXeDl0dVFlWWtiUGJkS3ZydlNJV0d5UDNod3BHN1RlOVFBSWpXM0s0YnZkZGdBdm1zVzhTbGo1KzN6WHFTcHJ3R0wvUDdwVzR0dmtvM3hvR3RXVDNPWjR1dkR3QzcwWTc0ZHhlUDh1bHE5Tkx2SFBuVFZiVW5ORW5HTS9NMm5JeEtBOENWMi9NeG9vNmE3VGJ1UXIyc1EzNUtKMlV3MFZFVU1JVHlDRmdOVjF2NTczZkQ0SWk0bUpLdXdvY0k5a0tPR2dBelRqQ2VVakp4N0dtR1BSR1UzVkR3WWFBNzdYdEtvZ080VmRTd2x0Y3djVHN1QTlsVXhac3RSMDVqd3Z4VXRHbjUrMHN5TmhUK2ZhZFJpUUNoVFEvMWt1VzVzcDNoVnI0RW56NlJSS3l6SnhYWXJCZ0pWMEluaVJVU0E0NUhjZTJiMFpZV0FlV1dsZTdpVWY3KzFzMC9EdXQyeklEZFVVZFZLVitLZm4xalZFbjRNWTA3ellPTE9JU3gzUEMzbi9CUEo5eFRwMC9RbEZzUS9jQmQ2dE45QTV3K1RTVTZvaXNaQUhGRWc1eUZiKzJrN0hzUjJkTThPVkxQOTYrZzFaTVBhTDZvYzFkTXdLZFl5STR4bVUvaE5EdWRGVEhCS3dnanU5dW9CK052WnZrLzV2eXZoZkNGYnB3TlVJS1YwSUxnQ0YzV2dxWjB0Q01yaUNnODJ1UlA4dFBaY3hybjlpUERmaDZMcHhLNm5DR0J0QmUxVXI3c2VpU2lXaDluTUo3aElrZTJOQWRndXZxRUE1VVFTZE90MUhRdkRYM0pjdkFIQWRGSEVKd1RobFAyUVhGSkpLSXpBcHQ4ZUVnbTFsblVoeWJzMlN3MlBKYTJMdmJaei9kN0F1TEUySUdiMDB1bDVHZjBubHdGM3dlS0UxZEhHclpIRFRSdGVpQzhTNkhSWllaWTRwSHBVKzJOMUlyM1dIS0pqOFZOUXhCZDgvYXNJYlQ5TFMwK3BxdURUanVmNTBCRTI3TzJRcURLL0tJVW10aUs1Znk0aWhVTEdVdjYyTDJnemlFZUkyODF6QVc3OWo1Rnhwd0VYZ0hxTnJkNFdjR2N5NkJSUGFhVUVKL0NJbnZQTWk1Z0Z4WXBJYWFMQmtQL3BzOVFuQWhQNFptTXNYVVV6aklaY291Wis3bHRuUDd1OHY1aGpDNzVRU1FnWHVBeHV2ekRiblRPYVhRWDFrL204a2RXVzRWUFFYL1R5Y29nZjh2VG9kQzBPUnBCZU1YUDc3UHVZRFNsWDJVcGF2R0NMTmc3d0kvM25ZU3FCaGFOaGt6UHNwV2w1Q0JBSjhIY01rT2NXdEdPTGthOFVUWXRiV2JZbzFtZkh5VmhNV2h2TlpEOTB2amR4SjVKdVhCZ3lmMjZwNm5IcmlsbTBJaHBFeFdrb1BmaFZHSUoyN1FuYmkvTGszaWpKWHlKRnZXLzhzcGh1dmpQMmZzVXQxY0piWVdleCtSZkNNektRcE5TTE93ZzIyME9mY3Z6Y05VRGNvaWRROXpXUkk3cnZtY1JNbW0yMFR5MEpxQzd1U09Rd0Z3L0k1L0QwejBsYm9wK2x4STJFR3ZpL2VVWE82SGg4UEdEMzgxRVdobUVmOGEvaWZEYmNSamZuY0pLTGVKdmZNeVRIT1AyNGZnM2xGVEl4SENDL0RwN3Jic2VrUGJEQUl5b2Y4L1FmQTVjZGJic1FlV2ljZkRPSEJZWmRjVTdNWHlVRG1sRWtTdmYzdlYvUWV1R1MrbkVKcFdZWGtLRUN4MGFaNjE1T0ZYTFJET2FFYXNsL1dXdnl3NWUvTW1PeTIwKzdZSmFtdFJCSzBFZkxVQk5saHlDRzFZUTAvd2hjd05Kb01WZ0dlTFhjMFY3ckdXakx0OFNMS2hJVEw3RHJLNU1mcDNzM0tKenNrL1hCNmtOZEE2OVB2NzRPYUJiclpLaVVGMlloNkt2OFhKcTB0d255Qkk2RlNRMUlZNGxKZkptQXNibDl3bWJhUWg5dHpXWUtEaDJWT0lkQmFNQm1RMHBya3dQNUFiREdpbWJrTU8vZDVaQ3Y5SHNSdGdTb0JMUENLSGhKbnVLZzgrUDllR2VKVVdkMzg2NmxOZ3NjWXo2b2R0MlFxdjVWcENWNitEaVhLM2J3QzE5Zy9DVW1FOElLN251WThkd0FIc3BNQjBnZExaOWFnWG5YQ29kOXZVSDZJRjZmSVU5d0w2SWhTdVNnaHFveEtycWxwbSs5M2FMME1YNEp6d3k5amNyK0lWY1ZnRU5OM1VGS0UvbElESjJCZHB5NG41cTJVOU4zdlk2dlYrSkdpd1ZrOG9VelZkQVZDeDhTYVVwcUNVL2oybXpvRnZMQTc1MGFLL0I0elhka1hRN0tJRDlZbFZHSm4vWmcwcmVrM0pKcHNJQk5vM01yUXM0bXZCYmhmbUJjb2M5dDRpNCtlRFFnV2ZvbGsrazNiUVJ5YWFXTG9oWm9MYWN4ZTY1ZVJZOWMwOWZnaGZyeVdxcnZzR3FyOVBUWUV2NERjN1BNQTU1aVN0WnNyc0wxeE5nOVNFM1MrZzg0VzZjQWJuU0hobnhnaHNMN0NEVU5nM2x6MWJPL0h5OHcxL3BTNUp6bkhaR3hOQ1NiNW9lR3RaN3dCSEdHU3dXNjFhOXVLZHhETE1hZGNkcUlEV21EejFXZ0dJR1VWRG1MTTlXSUd0MTgzUmJHUHQ2V3IxVUxJRXV5YnBUTEZaVVJYZnJnRERCdXZESUJNTW5TOWxZNVRnREVNZFIxZWZSaHRFazZoWVhHY0ZUdURpUnFnMmI1Vm9jcm5YTlpOTWxidmdWNWpXeEhFT1Q3S3VkQXhRY0JDMWVKbUxaS3lFazc1Z0Zva0k5OWtnZVlLTzN4Sk5GeUEycXhvaVhFQWpnOTJGUzVQNEU3QTdtLzNwVmIyQThTUHZxUFVHbzJZK2poZ0lWNnptQjBvT0QvWFoyM3BjQU9RVjN3M3h3Tmo1bVgyUEllTmlkRFRSZXhDc3UvVGVFT2VKZXJvNVpVL1lwQmQ0S0M3Tm0yMDdIZW1wU1dpTTFEUy9nSWZXWXJuWWZ6RFZnWjhSb015WWVMdXN1eUNyd2hCOXhSUCtiM0VFbTBDNXBNZXc2WVZ3NjdaWTIwYy9TL2l2MDdqSGc2Qzd5Ujh4eS9wT0lZeERscFNmR09QVXVrK05tMmtkNTBLeTBBRkM1WC9jbTZMVHVOQmM4ZmkwSDJ4TGhlMjl3Rm5wTHZtZ210UlkveFNRcnNrcG1JK0s5dnltWlBmMSttRDByT1o2ZGIyM3BOb0dRaW5tM2hjNFhxS3NnS2hrTVU0cDVqM1I1YnNYclduNFNndjM5SllmWmZTWjBGOG5OenlROFJXNnJycm9idUpDT2piZHJJVi9pUU5uVTFlemdqQlVlTllpU0pKVDBKMDNPSCtNVTd5LzE0TFcreUhYZFBEK3pLMDdieFN3TEVGWnRncEM5L2toekp3dUIrMzdKK2tSakQzRlQ5Y291VmJFV080bDg3QllXcWJPKzZwVXl2WlFlM1kyZVlSY0hwc3pzRnY4QXlhVGtNQzhzOVo1M3dmeGRZa0JWZ1RKOFhjNFFhK0tEV2psWjBGK240T25DR3M0cmFnT2E4ODhDcE5tRFBDR2F0dEFJUVhBWk1ybFJ0emZZWmt5aDFSQmY4TjBVZEg4cXNCaU9GQ0JzcVlieEFRWk9LM29uK1lhQXA2OVpQRmxlTE9EVDVNZjVpZm5ZWUJSZHVEbUlkVTlIMVdOekZHVFZzcDNKOXNiZzB3M0I4R3djczRtM1h4T2QyNWxXMkRBckNDY0VOK2ZRV3VYUE0rMUU2cFdDbmhSVGRwVWE3ajFWZ1MyT3pDWkoyZjdPR1A4MzZielZkK2Q4bTIyOUVEYWZEWHRkUFBQd2FEQVUrTmR4RnY2aHhZS2FsdEJJVElhZXdPYmpzYVE1cGlxN3p2UnYrQTZ1anF1dW9vUEltWStESG1jVy9venVua2xXOEo3NGFWKytCUGxoa1VTR3VKRFRCYnZ0NHlWcy9ITmYyaVhGTVdGRGJlL1hwRW1OaExobDl6OHRKeFR2TDJnZXU1Q3ZMR0FQQklyN3RMS3VIcnlqc3NVcnZOSUplVXMrWFNiMDIyZnJ4WHN5ZmZsbkdQaTNIS2pRZU1icFJyeDFwaEEzcWEveERRa1VOODdjYjJ5R0I4RHh3NzdOMXNqZndpdGtYbHJpMGVVMHBVWXVHWDNCZlphNCt5TmtnOUV4UDI0OTVCcndHVjZQUDRiUDJ4Zys1dHpnWEs2c21XcW1uY3p6Tm5kSm5OK0JVa0IzOVg2WVZVWDF2dm9MUVl0WUJXaTduRDJ5SWY4TlVHM1Vidmg2amFpN2lGWXlPak5RU3RIZHdoNnVXR05FVFZJNjJSTXgwTUJzNnN1WGxuTUZYTlc1NUVsYS9CZUM4d0plZmhpd2JSNnpZMkdZMzZaVHhRRXFlNGd1czFNc2x4azEzQnFpNHNHUEJoekM4Zml2TEJvcmtkY3V2bXErMGdSVDdyYnhKZnpudFRmc1VseWoyZUY0Vlo3TC8rcE91RlZzUUdRZm1nU0RLZXRtY0ovNE16SjJjV1YrNGFoYUVxY2cvSER2emdjcGxINDJIc2EyUitNZ2treXRSNGhTWFRuZ0xMVXVFallHUEs3b0ZBRGhYRHJhT0xFYmJNSDJXV0dhRHgvMWk3NXJBeFBGYjBkbEg0OVNZNjVGZmIxU2JUT3dSSkd6Nmc2SmN0bTJCTXRQVlJvMlh6WlUxM1dxeVRBYnBkd3JiWXIyTjRVZ2RSdzV6ZGc1b3JybS9qVlBHbGpwZzNWM2N5eUU0QTRrQnZGaDZvK0IrVm9vRk9nWjVyMld5WkVkR3RtbENpdXFIQWlJdnhMVDBSZ1JxeDh5M1hxWVNRTVFwK1VkbCsrTkZ0OG5ZR2tTclBmcVFaS3JiNzJlRy8rUUNuVkJZSnRnV2g3Wjc0c3c1dm02RXNxR1FmZFZIdXRDMW1FN2NCUUUxZXFCb1N1U2tLSDlQS2VuQStId3hrWDl0dnFQMWdyOENRZWMvN0NjQmxCeWV1T2k0c1BTRDIza1A1dlZaZ1dVMDgxTk4rUEJ5bWVmSjB5VlM3bjNKNkt3UmUvQWJzNGVWTHo2dkFZbUdVSmRCYmRwTDB4UDlRTkVQZk5oWldTSzVVcjF0ZXo5cklUcWJtcWF3bVJjMWxzTXMxaHY4NUpwdUVrcEJuSXVERndKWjM5OFgreU82YnBsM1l0YlV0QXRJSmthbnhGZjJ2ckhkWDJWUFZoWmN1N2h5V01sK2RmOEczaDZOeDBmR3NuQTBwL1BQMXA3WlhCL0w5MS85ZkF4ZzhhaE9aQU9NTytTemwwT0xkdVhvazFLYitnd041NEMvOUluMSsxSk5Xb3JZQllPSEZ3OTVGaXhTbFM2dWwvVkRxWUZXc1ExQXpSZEdXRkthOTUrbTdTVGNZblQyeFhyaXAxckN3cDcrRyt0MXZna1NDekxRUjFNVDUxTHdJRnYxb3hvSGt2UGJXUmU1TkNjRURvaGg3R1FSSVhTOHM0L3pycGtoSHhzcmNHaVB1dm9DYWdJck14dlZyeG44aEMwdFpSbnVtYjljNGV1azM5YytqdFJpa3BmemQyb1gxWDlSaURHOWY5UkoyMGZ1d1BPRVFsVjk2aC9TVGNmVEVPRzRrQ0ZxczRMTmpDR3hPOERzbzIwLy9NL0FOWENaNHZGeVViSXFYTC8wZkI4cTkrdmxnaDB2Z3VXcUxNNWo3Tks2Yy91Z0pYUHpoZEM1am4wOTJmYnZuQXU1eTNlTUhDeHRhUmhITHVWODdnbWtaQURma2RIWlIxWnhLampLUUhFS3VWOHFRR0ViVUswVW1DbnltTW81cnFnR2tKOUc4em1oQXhyYWtVN0hURTRiWnFnbjRDRThXZjhaTS9NOTZ0MUMvTTZXN1I4UWRmMGUyOFA4WHdDT1B4Mm1wYWIzZmNlK0hWRFZZNDI0SDBaVndCMGwrYWFIVGdnMVBGWmMzNVlsYlpkWXpOT0hUMnlpMzZBUVZsS3c0Nkdad2hLQVFsWDhRY3lRT21vMm45NTdOVEdwa1BWb1ZVMWkvNC9jdnY5bUJTZmtxbXdtTGVRS0EzMnNxb21vNTVrcXRnNCs3R0FZd3NDOXA1UE9FYmZZYkZMbTBNOEQvVTk2UjJiYndjMnJWQmZJQytMZ3JRMW44QlhuM3FkUlZ2U3Jqb0gwZ2l0NlR0em5TNHpuUUNTd0dNa25BUWVjY1NoK1VEcjNwYkRTQi9yT2FpN1lRWGMyRGVuOEt0VjQwbGgzMysyMDh0Nmw4TkhSYUNLdzdQYjNEMFQwdzhaWnEvSjc0MjBtempQYXpEWktaT0VZSDB3ZjZsWHBnUWxDdExDVGh2QWZpa2xxc0UzYms5aHRFbUtMN0hpMGsyUmhCdHRLbXphUUxaUGZGVjFCWE00ME5QZ3FxVkQwSU8xWURlUkJrV3AyMjhlZC8yYmJJOEVjWER3KzFpUGdWZW1WTGh0aXpKRHpIamdOaXA1RTlTYnlRUFJ6d3V2amg5R2x2ZVNrS2FLZk12L2MzZ3luakZSck1vZHdTcUlSZGs5R2xjRldZZWlUdDQ4VzNMaGkzQWp3MnpvMVFvODZQVEZRdTViT1ZxTWpiTUg1QXU3T29tSkd1amExdE9CWTNFZ1A5QzU4VjN6ZFlUN2NiWUZBdmE0Kzk4RFkrUDBIRThSSStwT2VkYUswdEdsVXR3NDNjWk1zTTRFb0pzRTBRby84YVUxS1p4YlJKV3gzeXk2bUhod0NqUDFyOUxiOFlzamVGRTB3SmdQR3lldjFBUW5HMG9HSGRLQVl6RjV5ZEdjWDVnQUR0ZDNBYjVadkdvZ3NOWHNiZXVLQU1oSEtlZmRmSkxZMndQRlViUjk0cDgzVThhN3J5TWp1Z1hCaE5hRVp2WWNrQkR3TWYvVCtaaGFVNEpJSGFOeXN5a1F0amhjUU9DMG0zV1Q5RFNVby9TN0NmelVnMUFhdUhYeVUrWlhjTnQ1QlBlRXZGSDBKOWpqR2luNFhoa3VNSUx1RjNhZHB5VHc1WjZrd2FsLzZWZVB1STBaNy9Qemg0ekU4a0lzTGhlYU4rU2t1U1NwWVBzcHMxYjhGc01TeEFWTWhIY0V4RytlTXVOZU83bSs5WW5qckx5U05wclcwNDRBZ0FQRURMeFJEYkdZVDRFTUdHWGZlMitiR0ZCaE1PazhpQk0reldIWTBwTUhoeDRXOXhFWm5aOW1vb3VnQnphdCtMQUJnUWhzZmZPbmcrMjM3WHB6Y3RlRWJsT1JzSFBHdk9UYlJiZFl0TzdUTUVlY3kxRXFEUWtPZzZVU21PRkxpV09rbEdSam9MTnA3MW9lRkc1YjBjN0RubDlsTWI3NXpNSGRXZlJtYnhMUWVMbkJGaWFMVGlHUXBjN3l2UVR1WXEwUmNQeTVIditPNGhRSXV3MElFZnUyUU9pdTA1cTNjUCtlMHEvTTBQZ21UR1JCWlJlWTFSdnMrdm1LMW1RZngrbUo4czZodklnUGNReTd0LytocVJUaFBMT1EwcUtmOXFqWFNpRVA4ZVN1TFFZYWgxUVpsOEhuVTBhNlJleFlNZW1vR1QzdmhOVHdTT3ljNzRhdjhQdE91R1dzYkMraTZQZjR2VVo1c3Z1ZjhkVUpDY0V6V2ExVXJDL1RaL29HU3l6bXhyYnpwNzF1aFdhRWg0VTZlMjZkendYNFhhODJnWnAwdDlvekhlUmVDZEZhbUM4Rkg2ak1kSXhFcy92THc1QlZBd1BCTFQ0MVFTL0ZiaXZ3YXpGV1BCY25VZE0rWVNNZS9JTVFCR2trRFBTWUtSNXgzOXRuMnRlWE1KdGMzZ2tKOXZEa3IzeVBxdXplNXNsZTFOUVF0bldNS1JrOTM0UTZ5Zm41dVdzbEF1aW1JMXhlckx1d3JzMS83bXZYUDMwcnJkemxJNU5iWm1uUUhReFNLVTgrTFFuYzlTd2U5eTZpM1dkQ2pvbUFRdExKdHRrcS9kLzF6Sjd4L0VoZk1Yb3hVUkJaa1AzNkpjMnhVV0pCbXJqS2pNRGNCei9Bc1l2endUeEFzT2tVT2YxWTNXbXFYSG9NbG9BcDNVSkY4QzdtcCtvaVB6dURoNUwxQTlDMlhGeE5PblVsTVhhOFBWTWVPazlIYU1YMHEySTV4UTBGeFJCaFJ0NWZrMWF6ZFh3WFcrdWJJWGMxdDgxb2lNQUY4N2FzbHNPakJVRDJHZFBHREF4MkhENVRjTjc2TElzR0dmL2lNeHNoSHpvdFhUQmJnYSt2YW5aazlYc21nZGt4NFZMeGs4UmoyMUlKR2dIQUdDUEJOOFZtczgwUk9iUWpXWUh5RXRGVVpVaUZFZGw4eGJ5djhIQW1SM2ZjV2dqK3JwTW9LdlFhd1Y2SXcxNllRYjdweHJWWmFzYnJBSWg0V3hPa1dDWm81dVpGZ1JvMmg3R1hSSklocWdKVkxpK0ZjbnZIRmtYR0lvcXR2QVB2dGpiVldYMXhmdVNTVFRGSitJTElQVVJOM3U2QkJZVURvdW54R3NEMys5VHE1QVpMTytZV3N4elJoUVVHSERsZnByV2c1VUM0QldmTlpsWHZYTkpSaU8xSWZBemg2VkpmQWppYUNSMmhvUnpwSkN3dlVVSWtKUkt0Q0hvb1NuSnBvWXEzTFZRMm1DTlZMKytlck1EZzQ5N0d4K0ptK2lUR3VpWmx5bDNSdnV1bUw2SndUWXI1OGRncy8rWWhtWXNkYVFOU0FmRUVHQXdPMmN0SmRaeUJ4Ly96RHgvSDlBWGRyNm1sQ2lSWlJVNFQraWlqdE1PWFdIbzVKTDRDRW5ocVFVZExKOEZka2RtRlR1SVJaREg2c2Z5eEFEenNLUW1hamV3VWloOHpUOE9pSW41OFQvSjFTdmhGZ3lYOXBBQU5RY2VIU0dQKzd2YTFmSFY3NzVvL1lZeW9kWEZvT21CUWZ2ZE1YZkF4aEI0Nm9xK1g0bmJzVzNtOVUyZ3ZlVXV3TEVLblE5L1QxY3RaQzAyVFJVa1l0SkpSYmIzY3l1S3lWcUtDLytmYXBDeFR4WkMxcjVXcGY4ZVltRVhKSC9LRmdGSm4rUjJIUnA5YktKZHR3SkViL1JXZktKR1FKSlQ5U1dnY3NrTTJsaUJkeXN5SngrTm9mUHFNVXVRNTRldHM4R0xmZk53TEIvM2ZFSzE0N1FpSEh3TlJCdURORVdPaEpFaFJvN29BVytCd1JUSlo3dUs4MEtuWVhPL1hTbjA5akltUW1yWDZVSVhDODFNdGxvclprMkNSRXJxZkxrMTZiSU0vSlBqcmhaeGFtZTBZNDMrNDZCS1l3ZWdNT1RJQWh3YWVQSWExRlRMbVBocWoweHFQbFpEVGpQcHZ6R3JQUkZ0UmwxYU93ckpXcFJ2L3VvN0pRWmZlTlZCSVErZUdwaW0xVlhOUnpTVTh0dmo3SVNGL1FmZE1paExxNm9NU1pFYkJXMWtERmoyeURSRjR1NzFKQ1NuY2N3M3BZNXlzNE9rZXF4VzgxTWxMamcrczFXNC8wR1c5Ym5vZ09vaU1ZM1J6cGtDaUVMSG1BaUczeXJVb2VLL1VER3hNc0ZTY1VkT3ZJMENGTTU0Q2J6Um9TRityMU0reFM5dnVMWTQvQ0pybDB1Q2YyRlNERUZQaDNMbzlrUUZMdTE2aEF2L1l2L0FzSTV4VHUrYWtxTVZWdDVkT1BhOEZCOHVEcHpSeEJlVFBSb2VFMmsrb2tSbnhYSnhxLy9WSHBldEtuU0JZSWlWWnhtUHQ4bFFMa25jaUl1WUNQMFhFc2FIdTJDcXQ4SGVDMlprREJyQ0RvRnZMU3g0SmNHNVlSQkhCU2NwNTFEeVN1c29HL01tMGE3SUpEczljYlIwakR0SXM2MHFsRTk2bnNrbHdsa2pCSXc5bTdJOUVIMmlacjBsRWt2S051NTNaUlZDaVdsUDZjVmFZb2RUclRSVllWL29rdDY3SmNJZGUyUURjWHlDWTllUHliZHNUWnRadWpLRklqUFM5RU5nTG5EekJmSmdpOWJWU3JaYjZzOUNlUjd4dytWdG0wQ0dEUkVlSkw2UzQyZGtydHU2TGlYbXI1UDE1MGFSOWVPK3RPNnh0MzhTeGViU2lEUS9wRWJweWVwTnhKalFYOEpPbFh5QmRtakJnSnltWjE0dDliaXBxTll6dUZKUE8wcUJLOVFodHNDbzFsaWM3WDhMS3BCbjUxeTdBVDF0bnZ2QTh4VFd3MnpQcEFKSC9sOGVaV3paaWtReFlZMUdxSzNUMjkwOWRWci94dkp2SDNVSXgxSlZWNEdNOGFnYjkwUDRmVzV3M3dRY1ZvSlJLMnBsQlV0OUdTbkEweGlJWVQ3V0tmend2MU1SVnFpbmh1cEFYRVFleE9COHlZSzFYVDRacVRDaFIwSEVLQnljN3daRXFxd2hoMUtHN0FSdUszWUpCQnZ3NGwyakhCWWdLVFJEOVpmUCtIWVI3NVBTUkY5Nzd5SzNWaitDYkF0TkhFdWZ6M1AvQUhCK2ZYdTdmN1VsZVIwdXNSRjROWGYrS3JZK1VKeVo2L3ljZmt5TmNmeXhqOUVBYU5CVHlIQ1kyMkxFajNwanp1bHVhVFVzLzVibnJXZnlaWUhlMXprSWhCamEvVGdKK0F0WmcyTWRmM0NhbU5xd2xiV0I4QnNkM3V2SmtHanpxT2hVcTIrdkd5NG9pd0pNUUJEL1pBVnd1UlhFTGpjRVhpb2RyVng0MmVZd3ZHYXJCUHNBbGZCU1B0SVJ0MlZGcGdBMTVlVW5oeGJYdjc5ZW1SVXVUZVlKSXhQYzc3Z1lDTDZQTEtoQzZzWklycmZpbEp3KzRGSnUrbXlMWWtPNnJLR2x2VUsvV1N0d1ZVc3F0UVNLbHZRajhWV3BuOEpORVZJNHRjNzJIRXRTYjZERzdOM0JiemV0bEpKeGptTEEwc2dHU01OWnZiTEszNFVYWDZFSllpNEJ3ZzFwNzNxNmY3cHNldDdQWXJ4bnZnZVhidm5qTkc3UUErYnAzeldxL3dRQkRLbDFCeVEzM3NsWTdwSlVwVHJvd1dFVnlscG9sRURzb2pmWitxYzFuRGE2VmxwVVVrZ0U4Y1U5djkvejQ5TVVleTdMRFQwYlJIY2IwZzlsajh1TmltR0lpb09oMm10SzEzNEhFTmZSU0Q2RVpPQUpwc2tXcEhXZEllQVkvZzhYUHc1RDByVndkeUN2RnAxQlNQbGx1TUt1RlBKOGZ1a2xaL0RJc1NqbW0zczl2dTJaM0x3UVlDeWdQdG15T2ZqN1NKVVpZS1dKTGMxcXo2NEJ4R1Y0RmdvcGtDV2RDTVA4WEZoWXhYcjR5eitJOGhYcW8xbnVrZzJSWFdqVytGR2w5Y1lQUlhBS01JVi95WGRiczRPSVlGQ3B6d0NIZHFuQWhKRWpUcUJUV3hXWitQQWRkQ29LSnFXc3VtVmc1R2QyYk10OVNKNnk2KzVFRHY2RzNhbzNKSkRoTk9zR09LbU9HTFV3bXhxUjM0b3lEQjE5L1FuTDNvcGVxZ1k2eWZFUUx4L3U3cG1ZSmd3U24xejJMRlhKOEQ5M1pFdEw5RDBPWGIwNFZSYlpxUlJjN3lkN3ZsK1JjUnZPM1QyYjREaTI2ck1ZK1Jzcm1rYnBxNVNYZ1lrdU15MGFrVlMwMzIrK1kxa1kxdHc4eFhTRFEyS21LZ2RMVVRhSU9TVXRLVnBlL01DdkE1UTlQcmpLa1ZnMkZXYllpRWVGaHBZOGF0QmtxSnp0LzhQSi9UL0k5OUlMbUNYQWtlOEJxUkNaZTdOdndMUXBaaUhJSHJjVzA1VmQ3OXRTQ0FqRlgwYVBPdnpoV1BsK2xWVTFEZSszQ2RCcmR4dlFHS2d6bFh0QzdFL1NvZG9oeTRaWVJkUVlUOEdoaWE3ekY4SUlJa1Z6NnN5YWhtUUltRlc1cFl1OTZFRGhLVzZ4dTk3REIybXpNTnpmT3JFZkZTcENtRXBZV2JncUZMdWJXZCs5R0RYOWtYRXdvTEhuTDBudURUZmJGSGZGZGx1UXZBd1lYUzRwdmN4MzBQUXl1MmxkNkM0NmZhOTR0OHdJdTVSWVVzTDllUkl5YmdLbktXdHR2Y3BtZGhSRFB2S25XMGo4TE5YNVJTVGR4SFNyQ0crajBoT1VjTitwOUZXaXhteEdSVXNnSHp2MzFSNW1JRHVYUkZpMVZWTXFmRTFCWkU4ZkpMZXFqNUQ1MUpORGNRKzZVVU1XUllDOU1ScG9MOG1OelRaTERrc2J3cGlpZVNPMWpUTkMvVUdIdmdjS1ZPQUhZcXE3WnRFSStmc1RhaU9JQmdGYnA0UVJLOEZUbys4K0ViaGNZai9STGtqNjkyV0h0NmM4NGcvMTNlamtycGhrT0FsdDJnN1RSSE1JYVlXSEgxc05nUTVzVHJodUVEeGhSOTRUN1U0MkZLK3ErYzFxRzdTODJ1SGN1b203Ymd1c2ZCS3RLa2JIMWloanAwdWxMZC9GK1VRcXNoY3lFa0xuVDBPT1ZqMnhjSVFPaEJRUjh2SllVeE9NZFhkaXY5cmczZjk3YlAxSVNDZGtSZXRmRVBJcEZoQ2RMOUUyMzU2NGpwc01uUjhPQ2ZENGNsNzFQcGlsYStqR0Z3VCtERlZ3OURZazZiMFNiRmtyVjJlaWpYUEtFcURKd0NOa0lDc1FFQ0I5QnJqR1ZidVJBT003R1BxcjMyNWFxZmQ5TXU3VmxGZUxoazJKMmVPT0xabWV3MFR6MjFPazBybEtnNlNUVEFENEJJVzUvSFJkUUtWV0N1YUxMZUpXRlF1dEE1QXZvVERrZnN6SlVMeDNFV1A0QVR6UGxUV3JUT3ROYVFuWjFFY3lDVGVsendoV1cwVUVFZk5wQllGTHlISjBzSVN6Q0pWVzZZSVdWa0dYdVNzN2RnZWlUQldEN2FZU2ZvWXo0RC9BTHovUHhVTFEvTHdEMnYzNCt6dGxVaHd1SUk0bWNQQzhHRVZYWlNpa1JjVHFQb2lHRzVZYll1NHJYNXM0T1NDbUFyejRWdTI5VXR2TCtXWFNCNXQvaWVIVHBQWmROS0ZTRFJmMjJEWFBGMENtcFJmQnZjeWFJRU96WXBKYmRDZzAvOWRNeVlHWS9IZUdocU82SGs5Nm9QNmVEQ2tvbk1tQkRFcXlQZGIzalJiQlhhdkF0VnIvQmRyVmJPYmhoOFVZWWRET0g3WnNGTXlzRW5RSnU5U3RwQmZvMU55L0VoaHpRVGhkREFRb0YzS05JcE8weDlPc1ZyaFlxL0VONWRBbVB5VjgvQnlqbWI1UG9xQ3FsQjdkNVNseHY0TkRVM01adjFtY3l6c1dSMjA4L2VTdmEyQXlGVlYyZTNGR3lkd2xkSHo0cUhRMllReGZPcHdxRGZxZG02bGtTcG9NMGNmb1RQOUVCTGw2U3d0MS9oOGx3bDF4eUFsR2ZlMmorVHhTcWsvRHFSdlZVTm05c3EwN1ZqQ3N0bGpnSzFNcFRnL3lhN1JIZ1lnVnlJQklYVy9YTnN4cUhIU2dtSHhEMWtlNm5tbTM2V2xpVmE5TmNqdGJ4ckFSb2Vqd3RqZHVlYjRzbU5qbkU2MnFsOHJFb1NzQVJUM2QwcmtvSTRxTCtrREdiN2dYQ2Nkb0NyeVhZd2kxNURvQWtHVC8wL3lhNGkrdDF0L0xGY0hsc0kyMUpSTXpCNHZyT3J4TmZReVJpVFJiYkhlVHY0WWpVMVJ4dFpPNTNhQ0IxTVZjMzZiOFQ2NHBiTkVoeUtQUFdpMmdvYjZHSzlKdVRQczlXWUdCRFE0a1o5MWFISFI4QUhVOTlzcm1TdkNVUVd6TGpWYVdmdHF5VXBsMWF6dUljRGxqNHpycExKMllSZ1Rza2JpckdpRVRpK3JxUzIrUnlSWkRIY2dSL1pIU0VFWnV0UFRKVUIrVEx2aEdWODdTRm9VSHNIWmZtVTBhMFNHK3oxbWZwZFFwWUZDZUUvOWY4aUdHYnliZUZSYlduaW50Q0NyTmFvRG1XdXdMeUxvS3hVdzVTSWovdTVLemc4bzBaWXFMbFA3RGQ0bnpTWUZYT0RVTTh2blhiYldUWU5zNnJrQ0NHTHVzekUvWWtydlkrY0MycXl4SkRkSFdpOWlyUVBNem5ySVFjU0ZuUmFGZDJPaldRcXBna2FManJKZkZqeEVNTTZ1YXNiU1NSNjR0V0pjam1ncmUrWVo1WlJtMEt3dVNVVGlWVGxTb0NWQlRKcUMveG00d3RESkFxZXk0T0hGYTMyVmhuMlQzWnJVUnFIRC95QUhPQzh6NXlRUkN2ZnRCbUNnRmkvRFMvUFhvUk9KTDhGQnpSa1FTbENKd1dvK3BRR2xxVEViWmQxQnl4QWpVYmNGUWUwTkV1TUVvbktraDdUbG1INFNxV1BVTFJVUm9lRGNyS0tBSjF0VWFkb1gwdmxTKzJxbm9tOUM1VHNpRjJpZ1U0THRvMFEwZWsySVhuUElFZjJ2SUdWbkoycGxNQ0ZyQzA2MnR4WGpUUG5YeFNab0MySHI1dktBYlJzRXFjNGlqQm9kM1lzVkVsV0luTDhHUk5wekFQeW5rbzRyS0QvWWFIdDQ4MFFrcUtycEJ3ZU1hTXVxYUtzR0lVaysxc3FOaWtQaWZxWjczaS9KODB6RTJPRVl1KzZpV0NaVEdFWHB1cnUyTkJTWlFORUpMREpicWNxaXcxMnVaU010M1EyQ1ZSY1lGNGRzR3lPSWh2Vk1vbUVPeGNMeVphcnFSNVJUck1sdTZSck9xeCtIOURSWHZsck44OTVZbm1xT3RHT202dDZoUEc2RDJVQWRNUUxDM25PWktISkJ4ZmZTZ1pZQmk1akVza2p0b2dmbDBTY0xpamtqZTFnTno0SmJ2ZXhObTRiTXg1Y0VFbGNNNFdURGo3TU8veUtTR1hiRnBpbytNTE1PZ2laNmpxbG5YMUN6Q3RNOWxVRWZiMldHa2VBc2pYQ3pzK1EyTkdvd0JJK2hpdjhQUVY2QU1QV3IrU05QV251LzNHZG1qTDJGVnp4OE9sbE5VbytqcHdIcEYxUWpydXF4eE5kZzhlRC9SVDZ5YmJQVS9OMHpEcm1QN0lqOVlIbVViZGNhaHYzUEYrcWF4TEZjanNNS1E1SUFmTG94dUo3enJ2RmgzNXF1UHpxZGdwNXdDMWp0dkNjalJBbEIzdXF3cFpZOFYrSThRUExQWHM5UkFqZy9keWFmMzNlM2lxRVlrN2pURzB4Qm1JWUI4SEFmbFBXbEhIVjVwM1IxTnJIbUFycTVNYzErMEEycWZsNFVkWkZwUDlOYm00MW01LzkrWlMzU3ZrZE5ua3VsOHFVaGRCUkhZRkwrQ051WXNhSWh5bmd4a2VDRE1jVVZmbWxnSUI0SUYxbmo3em9HTWhPSHAvUFZLZU13bVU0aU9tc2lUYjhrYXArblFRUERmajczc0pzZEQxQmFlWmFhc0hWN3pNcmlVQTFlTEpRcFlMU08wUzZXbnR5QkRzOUFKTTg3REprUDZYUy94R2UrcWU5QU1sZ0g1S3lVay9tSjNIVjJKZHBFa1BpUGRBOUVmVkMrMk5JN1g5TW4yL2hENlorUThuODZ0Ui9CazhMVlYwSjMzekF3V3NGUCtxUnBUaEVyYjdTQVY1K0Zya2h3Z0phVTkzdVJwc3Y1cE4zYkRQUG9USGNhMFB3d1NLaTFlZ1FwYzBXMzVlS0tRVWhFVGJFa0hLSFlyZGx1LzJsTEVPT3FVZVoyUjNnd1RVTjNPREdVeTcza2ZPdklZVWh6dEdQL0lNbFNWT0x1djFqNnNDd3NoT01DalZjeWR1S3FGY2x2RHNmQmFyRytReUVxQXhKdTdJTWpETnZaSTJVdE44MGdVTjlUN1NiVnRyQjlibWNFU1VDV01VZ3JJNzFKc3kyclR4TCtKdE9IQVZQamN5bTdybURxelJlVDcxS3o5OFI0aFg5WnVsbjM0STMyTkxCRmpaUlN4bENVZ1NSaTgyMzZTZ3ovQm1WZFhMN2ZaYVdYcXFpV3BwZ1hIbGNvckVQaEVmMFlSYTJEN0Zxb0h5RTRWclBVTDNoK2ZCVVA0WmtTOEdFYzdzMzljMWtBNUtyMzl0MlRXaFI2OERhbEc0UVc1OTNtNjdWTzgxbmNXZk00Wngyak5iRDBlY1BudUVWWGMrR3grYXVwb2tqT2padTBtRVlCeHl4ZGo4L2hRT0kxRVVoSkJGQit2aHFEVFhESkRRbWlVdXdnMWdtRG5wSnk4enB1UDNJNjNNcGVReW5CRk01TFVmUDdYN0lybWJJWU5MdWdXU3hLL25jQ1UzTHdIQlpySkFvVStrcC9lVUlnT0RnN243VXpnOXY0Q0ZOUEFHM1ptRU1jSmQ1M1VhUUg1Nk9hRVBkUTRrZ1ZYcEZZSWtVeEh2WE1aYUZxaUMxRldPcWozSjc2THFKRjRhaGg5S08xdTViNjRuV044MXlXcUpKcmVqZ1RlMDJjS0hhcjBlcFMvU0ZJbldYODJNUmMxT3VOTDJlV2xZaTI0alJYNGtiOFpaZjB0ZkhOcHY5SXAreTN3Mm9vM1JQakVVNFJBaUJab0x0R2taZS9Na0VQa1Nvb2ZjSUVoYU93NGJXdXRHR1JxRlhGYUhvRjhxb3l0VVAxeFZiT051RkpwSDBrK2k5MzUzQXljaXMwQ3lXL0RxUkUwazVqc3RMNmlZTzE5dXFHMlpQc3c3Um40TXExMUxrMWN0dm8velZMaEVGNUZ0dWJobm82RzlOTUk4YlVCb3d2SmZsUWxUN2cxcURueUU5T0JJbk1kdGVqQ3hEWkVSRTM4L25HM1NLd1VvTTZEakZYMk5INUtxeUZmbVlrZHJQQkFJejVuV2FOODN5REJzMWFPM2gvbGRZYTV1ODg1VXQwZWdmZCtKVTJkazdxMzg3UUpPTldKRkovWjFaaEtSK1FzeGdBdmYwYkdCZUZVdVp2NGk5ZjZqQUhpYnhteXBlZTl0cG5zVGhWZ1hLaGp0aERyanJHeUdtRXJmVmMvd25xK3ZkZTNza1lsVDNTNHJoNUZrRnRSRE83SjlrRWpjenh2dDN3VFo5OThDbWhzeGNKbFM1Zkg4TkVJUDNxM0JmVnduNDNOM3h0aFV3Nkw5Zk50TUFEbWJTVkJHMTk0VEFQRFRleXk1YWtWeGJrVU1CR0hMMHpwS2dULzFWb3JrSWVOSHZIc2szeCtrNE9pYjR4Y1k5akJ4d1NlSjJwc0dzT2tZSStTQmFrSlBPUWo4OG5INUx5Mmx0aHAzeVZSc2ZIQlZNU3FUZzVMaVZSd3BhZ3NKWStKUG1wVFlFbkR3VjhMY3RnU0hQdDRCUk9WS2g5RURVQ0VRUmNGalZJY0gwZ0dRNGh6c0xKdE5SWGllcEhDRmxvcm04MGV6RXAyVzZCcFgzL1VCa0ppK0k4TERjOFN3eVVPV01jak5FbDA3VDkwUmdvaVhOM1Z1SjRFRHJ3cEVsRS9IakNmZnlDcHUyQ0xDTTc4VU1jMWdGaHVKYnEwa08wY2J3RURYVERGS0IzRUxlek9tQzF0S0FBTk1Pcnk1bUM2QlFOOVVUUGwzRW8rUmxmNEtJNFFsMFRkc2ZLVG5OZ3o2MVhoTkszWVdCZmdNZVE2UWtEeC84NjJSTkI4eWo3TUZLUkQ5aDlHYm5tL1R1OE4wbU1kQk9XV1VnVUR4VGM4Rmx1VmphT3BHcGMzaWFRenB0QlNPaUs3R1d4aWpQbmdxUWczcmVFZEorcWJjSHlxUGF3YlFsNmUvRm0wYTI5V0lsUVhWZTRmYWxNc2dsUDBPSjMrREVvbDJWKzdUL3pMYUVPeXFHbHBHL2VBTVpsNWt6TWs2SnJqbmJ4TDBXcGpuWDIwS0ROVUh5citaYzRqZzlqNnA0UUR2UmZEaXllOXJRSURBTzlPanlhbmRyQlZIS2RkRzVKU1ZmNEU1M29Rc3lyc1RLcjdzUE83d1huZlBDVnVOczBub2RySUpadlFHZlNuVUV3WXFYMnBiU3RlckJEU3RPUkhEcXFDaERjcWVZYTdJVUVsRjJQeWlHRnR1czhLaWZmQ3JRbUVkMFhWZ3d1cy84czBFSG5BOEhOUzlwdjJmNWYzNUl6K3dJc1d0TC9ZQk9UdTRFZzdLWmJITlRDNnE4SVlKaVNnRDI3WDFLL0FYNVU0YVhaQVZZQWZxZFphbG5TYWFFVHFGUGRCODQ0K1N0cGFiRkk1WWRyQXZwUG41b1dMSXdiUThham04aitGWmRsMHl2NmJNbjBpTWovRXhJektYVlNTZkZQdy85Wk1LVUl0UFJ4aVE4cjE3VHZUWVhQR1JNRGVZT05BUjY2YWJGT1JFMXJZMnlZbWRRRjNjakZrdVdzUHQ1UXVaUmNxMDN1L1RySER4ZnBnRi9BaGpOTUdGNDl2cUhZcHlCdzFaVXJReUdKWDVFSUZUU2hDYkUyWmRUS1MyNzJuSW5GL3dMbm5od0lFOWtnZUVEcUIra3AvVzZSMkl2clBwOXA1bW4wVDhyTHB3SCtlRSsyVkQrbkVGOHRtK0E0WDVXRE9OK2p5NnNDa3Z4NEdlMU5TOUQ5MUJkSG9BYkZYcWh3N3pVaDRRWW52WWl3UUNZNDdaTm1vWDM0elAxMFFtNVNET0RSY0xNd0FZbXhQR3dCcy9ZUFNnMUVSOVNDeTRCTkl6UVEvd1J5N3Jzc1NkS0kxWVlSVmlIM1ozUVRJaG82bFpqbEJlM1ppb2NucGQ1UVFjSzJkWGQ4cHo1eCtEUGl6YmZoNUhKVS9CUjQzbGRSUkFvdE9RS2hDTlUwc2xFc3huNXFZUnl6NmR6amo0OTNRVU9yUGl0SmNicDF5SVRUcCtxeWhpa0w2T0Z4Ri9jSkZsN0JoRHdRZ01DcDgxVzk2YkMxczhTSDdCUkIzS3NCUXhLWWNnZVlYVGpUMmFsSDVILzFLeHVYVk4rK2hRL0FZb04xMWorN3diWEhPZ2ltdmdyT3liUHVyakpWR0xucHE0d3NTcWFBRDZlaU1CK2IzUVhZRGsxTEQybHJQZHVjQ3dFTGgvTGZaRk5iTzdsUDBKSTBTb2ZQUWdjTkhzdkpPakl3M3hZVkVSRDZTZjFPa3NnSlVhT3EwOXZzdHZpanV5YmxsNUxzSjFlYml0Z3N5VWFZZ2hreDAzVkRnM2R3bVhiTXhuRCtjK1JQcnBMbCs2ZDQwcHB3UHEwUUZvbWVTbU1DcmtYQVkyWnJZcm9XYU5GY25QeXp1Q0FMOHJldVRoSzl4TndnSHpvWGl5T3VTRUN5QUtlMkR0Wi85YVVwODlTaU9OaEF5YkErcjd0YngyQlpLdUhyUDNCSENFM2hJVHR3RGFrc0ZqenJhSlZKR3djL3VaTW55MWtiSHNwZDlFOHBxWDgybmdOeUh3UWJ6T1V1VmVTeElHTm9oS0NkTWMybkFDRStGbEJwTnVzelNKTHlUaTFqTVZlcTkwTDJVVTFPemRpSjZKUWx5b0hrc0JJVFFRZENOMHZDZStFRGZIb0pLNkZKWXhvUHlKYkV0bGdDQmlvTFkySWxqTVlPYzdpQ3FMZGY1SDgyV0UrWGhJcUYzK1h4bnM3ZWRGbE9aRno3MkhDYUtSWTlWaEFvOEJKdU9SZGZwM1h0WnJsWFkzTDlYRUJjckdIM0tjeStadjdsaUg1REE5Nyt4dHlKVnd3cGVmTWdzZEpMQ0JlNWprQ0JFS3k4Mjl3TXdxSkdBdllPTHlveXVxcXpraUtmOXNtbXdWdGJIbWhFU09EZEk4T0pjRUFrZURqNGtCQ3p6QUNJSExKQ0VDNjFoSG5rWUxtN1piM2JQei9QdGZlQmwwQmhDZTJ3a2NQTUdXOThhZDU3dXpUa2ZPY2dxcnc5Z3BqVW1NcDRTTklEOGhpSVNMTytucjQwaGptbzd3ZTlidVE5VTNyS29CVHBhZVdDNUxLK1ZKQXBMekpWR3lOWExaeXRjSG9rMWhoY01Wd3VvakhMU1F6NkYzeFlVcnJtRUJ6ajJBRkE3Mkt2UmU4WVp6TlROQVpBYjgwaDNzU1A1aVg0eHQ3L1dzd0tlczBNR2tZSnJhZWNhN2U5OFpoUHpOMExYQjJsK3ltOUdXTEI2dTYzdnEya0NmbzVBbzRXdXRsVWhrbXVzeEpTbHUrVVIrbXpGVGJZRjZwcW0xaVBxSHZ6Z1RrM1dsU01DRW1Pa2w1UGEwVy9YcjlqZDA3MXhZM0xEMFp4RzYwcnJ4VTJNT05SbUlBN0Q4dTdGeklUR3Q4QTE0ODU4MmJ4cTVyRVF4cDZVZW8vbGZHWTJjUGxZSmJxMTZlTEwrVG5Md050SzlsVTlXaUdUMXRjZVZSL1lhdFptaHJtUDk0cFdsQ0E1YmIvRWhCcTVyeFVRUXV5ZzIycHpRaWNHbHR5RXVVelBrQjlZbzV5OUpvdlRrRTA1NGoya3VlK2NEYUUrOXg0K1RMN3ZTU3QyNkxlTVdRd2FCZThTa1lUVTZhR2R4ZmFZZDROaUx1ZmY5Z29lYkRUd096bXBCSU9LTTYxK2RSa2toY0tZR1hPRFI2TWlXSlp0bTU4SlpHb2E5OGt5NS8rYWI0ZWNkSWhRQnVuVlhJdW4wNW5PZnZ1bTJMVS9Oc290c3RwOVVjNEZucjZFVVdoSmNXeDJyUjVxaS9WY2NBWjZJS0RrR3pucGMvR3hQSlMwcEQ2bmxoc253Y0prZDl6b043bUhPRTdmcUExUDNIWFVLYUNSc3JmVXdqS1A0ckI0Q215WlRCOW0vUTlVYVFlNTdjWnNqd3JKLzlhVVVyd2kxTWd1c1QySDNTd2E0NmxvM2ZoVXlyTHk0WW92TnNtbHhIZkR4ZkcrMWIzc0JKOFpKYU5Db0dVb0NTMjBRd2RHMU9KeHhDZVhSL3pnQktwK3lYZnpFZk42SU9zUXdFenE1dXNqOUpPZitYUit4dmNHNVBneEE5KyttOTh1Tm5oTnErdnhUajVQTDA3Wlo4bTVmNzdwVWNhYlpubURwa0VhU3gzMlFnOERDZVFTWmRzSXVpTmMwcGROZU1laFpSL01yb3lBNzZwRVIxdFhSMjYyU2I4c0VhY1VrRng1aUphWGtEbVB5Mkk0UkpNQzRuMlFWU2JXMjJhamFQeTNrTjE0K3dwbm5pbHNtZ1dwdElkamhCWGRNa21CQktuNVdLRjN5OEdsaTZwS1hxRWxvcEpGOUtMekVwc29UcEZDRy9oUGVETHBCd056V3pwb1lzdGEzYkxCdEpLQ1RCbHZ1NUhHMVlCTjM0TXhGTkYrMTZyNWJ3L052NytnL2NyNzB2N2N4a3dVZ01zWS9HT3M3Z2JQN3diUjZNVTBQemFCSnZNOFcrall3eDE2Y1paRVduTGQvNDhNOWswRzUxUmI5WE5mcVB5eWNuZ2xaaUNaTlBYb3VjdVYzWDM4bittcFpzUHdIbkFVUEZlNGpSQm9TNWdscTgrZmg2am42aXpHR1hSWWFHeGpzMWx4OEpQcjIyYnhadzdrL2dGdTk1V2V6MVpjVXdueitYWlJzNG1icjU0a2xTMnQ4bEVKdmhiMEgwVnkvV2xTT3dHekl6M0JXRXlkKzFuZTZZRGxabGdUVTdZNjFxUWJEMmVDOGdHK1NFL0U1bittaUdTUkJ3L08yTlFnaXVORmM0cmh2YVYrRXdTd1pINXR6a0JNMGF6SVFOb0N2eVR2Y2RRVHowd2pwQmZ4dDlxWGhRaXBQa1M5L1FrbHB1RWt6eDBPMmFUblJuMnZIazFzTEl2R1FsRXVOWXA3V0hMbzVjaUdUSXFZcitkcC92TUlTSzZITERyRnhrUlVmWFlTRUx2WElwT29XcVB5c1g3L1VMQS9tYWxBdlVHRDhDaXMybVM2a052amFtODdUYUJZSFhuRk93TU9uSFlybTJxYURiaFFYTk1YY1RaWWc0S2xhY0dGdTlIWUVjbW41d1ZyeGRTWjczZkN3Uzg1SVlXRklLaUVpZVNHSk5ydittaTZmNHdjbVpmZ3lzaEZUWnB2VlRJR3pOUDFIV1VaM2EzTHo5T2FlT25aeXQ1ZzFWei9RT0d5ai9QbWtseDY0SC9CSHBYeGlrZStjV3FSRTBGd1F4QjVubGRZclpyWVVobDZhSUJKOEVmbWZjV0ZRRGpBanFySjhqU3RaMVVlc2xJRnNzaWx0a3VtTHc3K3ZiVkpsV0VsNVh4a1M1d1FZdDFwZzZobHd1cjdJS1pseThhRGQyK2lKTW5vVmhGcHd4MzM4L1FFUEZtVldzSUhpb0IzSGw2a3Y5UmJzYnQ1T0RkVjVwSDRjbXhDZ1l4UTNtLzAzUVdxNGZCMWtSQXAyZ3F1OUI2ZVZ1SU5TNjFmUVo1WUhyQ21XOVh2aXo4R2tLcEhhRHhwNHYvUndUelJhMklDU1gzWFRhTFJwbHFxaFE1MzdWQmVwb1VsbmRNRlVrWUNSeVBHTjNuVVF4eEJHaE8zdGRrRGZxanVFdXpDNGtDam0wbmN4cEM1STFQRTNVZVlUT3RqTHp5S1dtMElWWFBtUyszOE1KbnRVMy9CK3ZRcEdta0lRMkErc3hoU3RTdkpaaE91S0IzR3ZMVDNOYlk2QkhNeGhYbVk4RFZhT1J1MHVMeUtOb1lDc2RUUVl0WW0zRGJqeEFQWXpsMlR6NzNUSm5odUlBQlQ1SGZ4N013QmxabnpVaS8xRmRvWnd3TC95VTAwRGNKd2lvZENTT1F6L0tqTE9WU3pVeVk3Qyt3c0ZsRVQ3NzFUeGdCNkc0NFNIamRRaitnVDNKeFJkUkpaUUc3T1JReWFjS1FpRkZRZmtBTFBHSDAyRFZROGNIZGY5S0M0aDUyN1FuTDVUbFFxTzJHTU50WEdTcDdXR2NSY3FQa3VSSmRWT0x6QThnajF6dzgvMnAxdEhheVRVVkwvWkJCYXhham9vRS9qc0ptTnFxajVZVUM3R3Y3cVRRVDFiYU5rekt2YTZLeGxLcFZnaXdJaUJGMUVRUmxZbk5hb0k3QzZ1cUlieDl5cXRHT2h3UmxVRFY5dHlNVURiRjhOZ1hnRmQ4UTgycnhPeFVCeGk2aVV3RWdyellzOGlxMzFlS2NzMlhHZkF6WUc0eVdoNWF4NFVCeGVvNlN1M2VWb2daTlVwekxmTEhaS211RFRqTWxRU29tcFhkbVc4RDQvbjZpcHJ2YVlKcTZhZ3RRUDdIcENvd0xkUERzeU5NdnZ0bkpaOFNsc2pTdno3cmFrbHRIZFJmZFMvNkM4dGoyOGNEOVBqNFBkalloZzZMUVBnbkJLblZ3YTRuSFYyODlsUXlLbk1QenlYaW05bjRjM2NvOW1mOWNsdnB3amNrT1dqekhSZjNwWjhUWDBNSE1NSzNRNGpvT05Sai9XaytYeGZEWlE3SWpXcEQ5SUVKVVV0ME04UkMvZUQ5VlFqRVNKN0xyV285R2VKSUFnU2VYWHVDK0hQb213UHFWTEZhM0duT1E0akNpYWx1MndsY2t3MUZmWkFRWWJqMEpvVTJKK1N4c1g0ZVNRU2V4eCt1MGRoRjNaR0QxZnZ6bk5wSVNSMitTTlRWVjcrWmRvV1BydnZ5dWlHV0laVlBXRHljSldjK1FuUnI4eEtZQkxYZGxwR1FGUUF5bkplK2pDc2xrbzhnZEo0UWl2L2lsR1NVOE9wNXJDNm5VN1djckc0UHZxb05NQ0JHdnNBWnYreDViZURvVCtPTTgzMFpndHBpZjNQUUU5UmVSOVlxOEcrdDhoanVGWWJQUTJUckZFS3JzZGhCVjNOSFREMSs3b1dLZVdTL1lrL05qaC8zaTNkTTdCaEFFWFBQMkRIN2JvWFo3TlgyNWZKQVZYVzh5aWMvVi9wRFcrb2QyWEYvSXZ1R1ZIWisyeHVZMitFbXQwbnNVVlhKSVZLSnhGN2xNY2dsQlFHSk9LZzZMS010OUZkbzQrdVpjVGlCblJTR0RFWS9MemJwUFlnVkpZVTJmejJTN0xGUDVEcTlvWHE3QkdsaXB0cWhwZ25mMmxnTktybTZKSGplSE92SXZKOWI1a29DbC92SlJ3elRSNWJwM0hRNTBkcFU5QmdMZ3NmUjlCMm5aUDYwZmhFaWVGQlBHaGVYaEZGZWRXOHR2eldIdGJXME9tQm5vQlkyWXNzYjZqN2JTSFRoU1ltdVdKaEduVkNDbXVySkNhMmpUQXAxdjZwTHBHZytjSDdmQ3Q4eWovblBjMkVjemdFQUZJdGpOYTlnNzMwMVhCRHJhNnBhVVduZW5NMzRZZnFyYWdxOW5seCtpSlluZFZ3VEVHbkR2OVJrU2JGdkxyejdKOU1tYXJmT2ZBT0lmcitEQlUzSXpiQXU2K1dmVHZTTGFYdjcrSmplNWZobzFvdkNNZXBoaWdURjQxODM4Qmwvd1FOQ3pvRm1VSjJPc2FZMUJsSjdPT0RCTTA1eUpGdHJHdjFQUDNZWkhicHlIclloMjFNQ0tBUmw3c0daWllmcEdBbU9Ga3BjODRJWkk1UmxnR05KM3U0N0loclh5Qkh1b3FneTRMaWJTaHEvOXJzVkh6SnpCQ2dMZTZPWC9SZFo5WlJNbzZFb3hPVHlIK2hJUWgvUDJ6NDAvS2dZOURuS0pKV1dDM0ZsTUFkeE1JWGhjTEYzYWtYVDVzaUxxbEhTaTdVN1BnUkdsQkZ6dlM0RjVaYWZwNkNNajhXWWw4ZmlKVThjMU45TytyS0VqQWpjY1JCZ3V6amszY000djJLZ3JQcENaNk9Xa1JMM0tUc2I5cDNMQk85TjI4RlJsWjlCNzZ2aXlFbVBHcEEyQkNrUWtVckdwRzQ3RWtHV252SjVJSHBvWjYyV0toRVpRQmh0MXhMdHV2S09FdE11RG9CL1pQM0MvbU14TWcvNUIzWE5ETjl1aUZERmkxZ3hiWE9QaVIxU0xyZXVjb2N2b3dFTDAwV2F3dzE5eG5NcWg3SG1jZVFPck9jdHhyYXJrQ0NhcHlOUkRUbTc3dTJLaW1DRWlGUHI1MDB1VHdCdzZmdVExZUs4U1dySFJMdnMxVVVaMVpyZDJFT3VscFJXOWZocER6R2RiaHNZNk9JUTVvVnl6TFNRaXByWFEyUlltVlQzK0dWS0ZDOWhob0tPNXNrczlERngyc0VNeFY4ekdPYzlXa3JHbVJLRnlwZTY4SkxLR1BreDdRZ1YrTFUvQ3R0OWl1enZ0YzE4WlJHSWgxT1VtNTNCdlM1bWczZm9hRXNFeTl3K1MxZ0NqVThLSE15akZwSmYxSnBNam5EbzhYc2J5bjNGSjFuWHlpVGhONTVUa0pMWmpaby90WEdGRWU3TWtqTnNsa1JMUVl6SVYxZWlTOWJIMDVMRENZU0hYOXZiNzN2ZVIzcVVLWTBkalJEUFhmbG1RRlQ5dzVSWU5oYzZ6S2dOUlFWeDY1emJTbHd4dzhUTEUzK3dZZTBVb2tldlNvZ3YyeFRBN25EbXVqS3d5ZWhBV2RXK2owWUltVUl3SGt1enY4Z29KRjNhUStQdzR4eFVYakYyM1RHZndHSzZha09xZEhFOEdBcEFISTN3WFpGQThxQ01LZ09uK0lZS2xzSmNIK0JrZWVGekdZb3JLelFwZEdKS1JqbGcrSGd1VHZMVmVHSXoxVUtpUXNlNEVnTFIyRU53YUh6bzBPdFIxalRvdVJvVXRLaUlCRUhuUTdxTWF2RjZob0RFejBEUDdKbnFXK0dSY3VqN2VpTFBZck5sVnV3dXdmdEdJenUvOWt3SWNmcmhaREFXUEZ6d0FMUTRNVFpSOUk5VmhQSFJ1bWlzTlgxS00wdzdCZ2IydWtUT09hUW9qbUJoS28rRStmYzkvVWZJWG5nWHhZK1hIbW45OVIvYmI1cUM2MXQrV1BGbU1KNnQwY083SkZSVDVURWZJV1E1c2w5U1hNMnJ0MGxpT3g5UVFkNEozZzZzMEN0eW5PMmMvTzZ0bXBiakhaL080R3VhZXB5SmZlWlBKL3JLSnY1Zis1VXNVb1FUS01YNVM5MGExdlhxNkFUM3llSlcxRTJLbXU1eHdEaWx0bWEvMWM2b1JtRDlWenBLVVVRazBDcFc5bFVvQ1BXRk9uSzU1RnBxLzJZaVR0RGd4V3c4cFlNb29pOXJyTWsvZ1ZhOXhxVForQVpWV3lFV1FjSmFKRUVtN2dBSjdIcFBOU25EVXpqRTZrUGNEVlNvWDExTUdBY2pLU0YwUVcwTU9pbDMrRGJuV1k2d1BNbGxUL0JybDZBMmhYakVuWW42OWtiV2ZZY0lIam0yOVl5T2V1VW5VR3ArTVprb2JacXlOWGdJVTdxMEY0VDVtb1JYcUp6QWVnN3RkVDN6QXgveGsweDhTWmtoSnM4Q0k2cmpvVDEzYW1SV3F6NEJTMXNjM3I4Z21pUUFIT1dyQU1iZmZQV3FwZ0NJWHhrUXRMTHFXMFZ2S20vMVl2M1BCYXJXUHd4U2kzZ2xjUytISGNzVkFtazIrT0NFVEhYaUsvcERqMmZ6L0RPcjhGUm1nT0wraVBlRkhEL2RrSkgvM3hxV29kRU4zd3YyNjhYZEhWaDlDYitEUlBrd1pUeTREVGpJKzRKQ1dMYTNPQ2lOTGNmOFc1aTVQM2ltWWdDVHJURU5URmFvY095MHR2ckN2TmhidzhiVHkveWJjY0RsZW5xU3JMdHhUTWtMcC9FUFJHS2g5QlFkSnRtYUNhbDBuZFUvenFQZUNGQ1FiS3ZObGJFQ0hmRjFJd0FlcmRxL0J6Uk5SYUQzaXFLdTByTVd4ZkgrcGEydEZoeU1RY0NOOVVweStIWVFUbHBOZ2dkZEpYQTNrK0p3Q3VCS0lWS3ppOFNvODQ3STVRVDVuektIMm9naGd2QUErQkVsQm1qUkxyeHk1QjVHMkllSXJadTJSbmZKOVFNZHBBb0ZxaVpwQ3p5aWZZaGFuRjdiRVllOXhmZGxmSTR1VE9SeXd1cVRiTGgrM2VNTFdycmRmeDdaUlBRMVhINjFCTE5vZ21hNlpra01OME1hK3JLUDlrM0NEcnBkcVFOako0TCt1UXQ3eXM1ZEFabDBkekoySEM3R0RQUWhsUzEwOFVmNDJpRDJ5WVBzVXY2Z2dPQ0pVMFNURkNkdVlvMGVHeDJ1cjZCT3Q4c0V6ZlBqMFZGUHF4RG1Sci9pMWRzYTlIeUVQbEkzb1dRRUc3ZDNkbVRTWUZtMW43aXNGbDhqOHhzMWRrQTQ4ZlFGekR0cDQ5TzJUWWVBcDI1UGZoUDRFQkM0STVHdFFiSkluWThDYzRyQ1RvT1hvL0RZazQ2R0prbkE0eG14WGFWSk5KRnhpd0JGdUJ6aHFVaDVMWkc3S0oxa0sxZCtHSGRXcnlDL0h4Y01SQkdKdGtjL2tWVFZrLzBZb0s3a0lydUlLekxxZ1R3NTVoT2NoNlpTOGpHdzlUOWtKbWVZbC9ITHowYkQ4TVBtbk0zT1pQTytUdmhYazM3NjJFL0JUTFZQaERQN0VIbmFIVU9MclJHZHdsVVhkV0VwMHNKdWRud1RzeVIvTnE3SHUrUTlST3B1V29UZWI5OGtWR1hSdVRwU0FNb29saWF1dENZYlhFeGM5ejM4NmNJNGVvVVlTWDY1TC94Znpjemt4dFJvM1VYRi9PS1czMjRORzExd2lDWFRxcjRtdmlVNDh0TlhFWTNsSGx6YnBSckN0TzhqYmwxMDJwSmFTY3l2ZFRGSEhCZGIxSXMzVVdIU3lqUVRoSXp5YlkrVGlUdmNXaDg5ZGxUV2dDZTNYR056UCtrb2ZJb0Y2Qk1qT0dJL3g0dWswMUhhaDZJdE41OUhJTUFNclN0MWY0ektuTEw3YzBVYURDNEwzaDJ0WnJhMXEvTmVZRUdXbE1QU3F4K1ZSMHB4RlN0THlZdlhtMDhzM3dadzFWaitScC9pL2FYZUVTU3ZzZjBOVDg2cnV4d1g2a2h4TTcvVnhxR1EzbFJPL1VETDJwUVM0V1RUdG9Cd05ralowTFJ4WmhndkpRcnFEVFlRS0pZU0NMZmpVY0RvRGRyRlIvS0o1RG0rdWE2a2RsRkVCMTg3a0dYMnVFTVRVU3MyWWV2YUdkQkdaNU1DRWZBQXUxc1Q3bjBCNDRLWmFXWDlDWEE0blZnOHRqSlZuNktzZGFtMFM2NjJTSnIzTmhZdk11aDdyK3lwWVhUaGFQa1FROHR3MW5EWTNJVWJkMHFoSWE1UFEvU1R0M3AxVlBaZCs1NFlPZUhOcVFIR0plM0pPbmM3Tnp3dms3NzN1YkRHWS9oWlNTRUIxQzFkUHZJZTB6RjlFR2p2STA5VGhZcVZ5SG5BNTNqVitNcnNQVWhnU0tLVnlPSWluYldVaElwTU1Felh2MlFqUFAyZ1lQd0dkWDBvRXVvN0JmazBxSmNlcU04MGpGY1dFNEhScmtJNmk3d3pQMVBaVERMK295dEVUaTNVV25WMG5HOU1SakFVcGlRaFJuY21xUzBYeDhWL0VGaE5mdGxJRmNaRkZVZVBJeXZLa2lzNS81QTRSWUdod1RrWGtrd3VtMi9aVjRneFRUTEJHdVBPdkE2ZTJYNzVwZGR4RVZsaW03c0V3M3oxY0EwZEk0aDhYTUhlTTZsUXZkeHpsOEtSTVFmUEo2bHRXUjlLSlViWkpjcWR6NzFxL0pXVUVoVytMWm9lMFQ2bTcyWjZTd0g2Nkl4SDJ0YUZ1YjBNTzFqYlYyZFlCaUphbERIcTVVYjdJZXJPOW04Nm5laldwK2ppSFJNb256ZmFiekppRmRJbU9sNXE1WHk3d1FVeDA3ZkFpQkJMZEdzanBYZlFKcDdpYWxGek5kYzdDUDJYWFd5WnVxUWpvbzh4RU9wUlUydGdwRzJwbUJqVkhzZFIwVEpuYlhmTFFHSk1VSi9idDYweCs0cG5VbnYwTnRqMVRaZWl5V1JoaTVmWmxBUXRLemRFUjBDNWVTcXNTTHd3YkplS3N2KzVTNzRnS1dRVlFmU2YvSnk2Z0p2bDJmQStYeDlwNGJjM3d1Y0dYVG83ZXIvODkzeGF6QUpFKzJZMUJlS1VlQzMwMFNzZXd4RXgzTlR4YW9CaG95UGJuR1ozai8zWjNnNUpiYmdsYk5ZR1J1elFQWGV4L2tlYjB5d2ZBYzFYY3UzNS9pNVV6NXB4S0lJZW1yK0R6SHVKREdBT0VOdUlVUENtSmR5S2xhb3BCQUxPemxZMjJlbEk2UEZQM3hiaGdhRzd2enFFb2tHbVppVnB6QTVjdjhINkRwdExNaTc0Slg5emZFRm5tRFA5MTRSaFJ5ckx6cTlocEM4WWVkSEVmdWs3VUNLVG8wZWdpUGFuMFMzcjNZRkJhdDRBM0RaKzZtdzRsc2RzR3FpWWhGTHVNaSswTFlRY3E5YlhRcVlpL1RzRk1HaWJoS3BkZVpMWW1VNVFpR1M1QzVWSU4wUVNwMGtuNS9nYWpBSjRxWUZKNnNRTENWVUd2ZlJCUmFyRVMwVFlxQU1xNlI1ZXFZKzYyRi9icXpab1BIdmZzRGEzQ1ZmZFhVcmlzZ3JsbEY3cGZzZC9EVTB1NThienFjR3EweWRGaGZZaWhHZ3ZCaUlmRHJzSEdkekU5UkJGSWplQ0l0d291TU1GclF2NVZNNlpIKzMrMm5tNno2dGRCZUtzTmh0YUpqU1hpbi9IUUoyOVJaSk1uOWNqWEo3YU83N0k1UUZTOEZOeHI5RmNIV0lhR0hsdDRaQmJtcDRSRGpyVFcvejRaRkx4OEp5S2lsU3RxTVNsMG5TMUhSVldKaU5ITVh3eDRVVkhuWk1IOTRHQXVEaHc5emV6UFhUQ05FRnhJSE0xSlJyTE0xWHlvaWxSN1YwS1JxcGNJZWgyaDVOaGpka0RObzl3bkVBclVTSTJVeXpsRHlVN3RWVGRkVHk1TnhuV2UzeEtuQ3NyNUhkRzI1a3NLVTBvRUFWeHNaVVNCS29TRU5TbUs5K011UC9zdXFtSUkrVkxoNmRWTERtNSsveWMwR00wcSs4eWZJTmFXRlNtRHpFZ3JmV2RZNzFMYjFjbXlUZ2UxUHAvL0hlMmFmdWlSbHhrSGd1MWp0aEp5bHBUeFJlQkxBYkI1VldLbnZnMmVZN3libXhRYW8vV094bWpqTGhWb2F2SlgvUWErbEl6K0pSQVVVbkJqTTJ1UFRyNlRCeWZvcCt6T1dKWWJQSmRYUkQxUHhhNzVCRnhDRDhPSDliS2JYT0I3SXBqVnVMSHhQd1NOVkFzR2JtanZJT1I0N3ZWblZpTllhdnFsTzNJSHFSUnFSaGYvSWdWUi9ISlVNRW01UTkyekZ5YVlvcFE0alpNSFBvK2QyTjdLdENTcHBXelVWRk5OVXZiL0x0azNVbVBreGt0OGRJSkZyNGJWclpVTGRDNTYvQWJLSUNRQ3FLUGhDVy9GSXRWUCtYTk1RdU1wbXpDc2ZTdzUrdVZNVVpFQTUxNWVSWHhtN1dFZVNxNnZDOTc4clpwM0lZVGtmREVKR0dYY3g4b3h4MWJwVTJPbTRYYk5qYysrZFA3bm1TcFdobEhZbzJvT3pQRmVlT0w0cTAveHEvWVBaU2pFK0grRzZMUUZlaDdVMTllR2ZzWUxWN0JkUjY2RktTeVBIRW5rZCt6TmwzcXBnZmxRMHd6N0o0UmNkVTNZcDQ5NDVCL0JlU3dPaTZlK0kvWDM2aUs2bTVGUjdIMDUwRDN3a0RGNCt2SldJVnhYbmw5RW9wYzhETEdyZHMydDI0Mm5ySkJ5Y3VJSjBCcGFmVUgyYjZOMlBHZGJMdzFYVkZzUk5jbkZISXQybzdjdWc2enduZlI2UUFKekFFaFcrbnd2VmhhNk1zSHl2ZVBhMmQ2dkljdU04eFZ2WisvVzl0aUN2NzZtY3dnZTJhRkx3TnBIVnp4ZlpyN3ZHVlc3ZGFZMUt1SHZ4MExDeGVwK0laNi95MnpkcFo5c0RVL0dHbWRYSDdTNU9xckFlOFdpczRNYjFMMkpsaU03YTVqSnF6MlUvc1RiMHl5eGl4aHZVUlRtZnhETWNHcFNsTS95blNVcXNWZ0JSM0xRUFVhNUZBZG5YdDVIZkJTdUJxSUp5Ti9Nb0JxMnM5dFdaYllHMzdXR0xKODBMczRWVm44VVIrQTh2c1ZtMmwvazRZbXZHdHYvRllqYkNHMmMvcStlZ0JTcUhNUTBuV2JCZmliWTlRK1VsQU1YYTMvZVBJSE5jMFk0SUt2RDRJNnR4b1p0dXFra0cvOHBvMUFIZC9aVlVydFcwOUZGVEs4Wk1MdXdKSXZTZDZkalRXYzhEZ3dkb241THM0b2E3c3ZOTWFNZVhQRURUYU1Ba0s0dnNERHlxbmEzMzF5QTJoTVhUdTRaVG9PNHpYdkdyYSt1VXR1cHhmM1lJNGtHV29sKytkRnhmeEJvRjN3cU5HNERkVlM1NnRYbGxOcVlxeXZJVUxaQWFwVkFHMHFSd1B3blcrdmxhQlJqNkRLWHN2eVh3bDNuRklZYjNDMnBCeDRyNllJdWNlSUs3RzgrdXI1dlh6QlFpcTBmblRFMDRDT0pDREN0THc5UkFtdVdhZDU5dUN0QkFFWXVRZ3hndy91TXpFNS80WmVvTDdvOVIrcTkxbEpadVNmRTY0bUVzQTllNzg4WCt3ODdhZDlCWm1tZitTWFd5UVVjRHZYT2g0QW1GTkRPcWdEeEIxY0VUMXJXU0xOQUwwbHVXa0l2NC9jUDcycVpWVFZySUhlK1VSUVJsZk05cXFrbTA2cy9QcmlKZmU3dUdDUS83MkpWazdWSkVaRWlLdnp6SDdDZSthaFdVc3ZJb0FVUzZpUVBGdDJTTWE4cE1kT2MzU2FpeTI3akNOUDRCQVVLaTMvU1h1V3RocjhQMURGbFJQN09HM0FvU1ZEcXlITVZGNGtOVUhTbGJaU3N5KzAzR1BDTTZNMmZ5bUZqZk1sR3pjRXowdW00Sjk4M3dtVktzRE1DbS9EVWl1SkFybmdobVRrbjB1dThmTno0a0JWbFAyRTJCdStpRi9VNUpsdVBSN2hFaHp2Wk4xMzNhUmhMaHZtbnJUcUxUcGljYWR6eHlsUzltM09uWjRTSk1pcFR6SmY0bmJIK0RkdWoxTHA0eEswMEcvTW9iUjBDUm45Vmx0U3d6L0dXaWNwTGdmMWNBbmE0b09kSkR0WHlwbFFxWURkRGhBcWVLNlBwTmhlT2FjYmdPblA4QUl3QzBIVVdpK1ZVUDFOSGt2azdFdWtmNVV0d2FBZGVYWG9CV3I1MVUrU3VQWHNIYVhrNzlFN3ZhK2psbXUrSDV6SHRDNW1vRFB4Tm9HMWFuQVpHRFNWVm95ZGJFSXZGcEJwMTBhUnU3SFlzTTVnY1RRcng3eUtrL1FnNUlWZmgxcXl6NFJPMnlJR2FONStoTDFsTkplcmhKOVRQTmlsR0FRVTBYM2hjdFlFenExaXlsbFArOEZDbXRSaEdqQngvWlZ2V0t2NDdLcVVCUGNYQ1pFU0dObWN5VHBrWlB3SWdrTWVFdmVGN29hUFFPbVZ3OVFObW1mYTN0U0tsZ3JVQkRQcFVDTUNWYVA4amRlQ0ZhWFhiSTd2RWJJUnZhc2ZVTjNFY1RsV3k5c3d4eEdMM25vZjUvRjgzbWN4L3I5OXM5SUV3VEF5bjNGMWdJY1pyeHFSYkY4MVRTQ1NQT1ZPaTRPTjF5Z1RucG1lRVllQ1p6amZyUkN5WWNNVUF1V3haV3FQcVNRbVlEYndXY1NIUzFpM3ZQNHN6dGMyNS95aUIwMGdlSmtUcno5Um9jTW5IQzRYVmNhN0l2ZDF2WW9VaTBwS2Z3a1c5RUhmaFpYb3JUb2hYQnhPUitSMjh3VnRDL2J3Q2VMa21jQTNHbmlpRXRSL1lZaUpoVTdEZDMxOEJTdW8rdXdFSGd3dnIxOHRyN0c5SVlwbjRlREpsOG1CelpuQm1zTzNJR1NVZjJUWG5ET1o1MWdqT24vcTZmS2tTdCtmbTk2TVZIaDlmZENCUXloOG42dVMrdGFXdlpsMnBodWxHSUg3M01WamhVejE5YWM3Rllkd2RKVDJOeTFBQVIzb1U1U04yVnJ6Snl2bjh2c1FkVGx6RHFBK0JFQzcxTEpSQk04Y0NvR3JoY1lOR21tN2FNRlMzYU1SdlgrTDFZaHNqRDhBYTFtalJzUFM5VTlvei94a3BtakNLL3k2QTFBcDZTcFdiZVpnTlBzcWxtcG1KNzMzd1RzSTJaR0NmeEVicjFNcS9vRWRPbWhTVC9oTFdCb1NsVkUrbmhyWUhMV0syWEMxQ3hnd25tbDF6b3EwekU0d1ZPZnRiejl5R0VZZDRvWHFzcmZxQzU4MU5JdGZuNVNzRnJUNjJ0ZDlLMktLbGpQb0JpUXJlSFgweTM2dU1IdU12N3U4Vk9uaUFOMXBpS1E2STZYcGgxUHFqTC96aE0rWm1BMC9HNTZmR2RqS1ZKQ25JaC9Nalh5Nys2bE9hZEp4cDRLcGxhNnRURU1WemU3SnV3Mk1GeExwTk1XSk1KV3BZaCtqQldVSUp4MkRTZUpFaDBjTWtiY1FvRE83UndTbXg0MjBIOE5DSmxUSG53NmVIUkdZakg1RExaMlJPK1JyUFoxYzV3MGIzbTN6V3RDSU1wR0cvNEIzVUV4QVplZlVHN0tVYThxWW1OL2hDRWN2ZDd3dTBOM1dZMG1WWGI2blVYUWIvSytrOWVLSFFSR2YwSnR2VXorL2g0dUVaRUJyYzFHeExqemg2YklhcFpGaTFVbklkYnZ3eGxESEtiS2czcGVVcE9TWmpjdWFZWlB5cG9QOGkvdTJyWFhrVEs5dVdwd3FmRlBaTXA0Tm13ZDhrT01aMTd5MUZvN0FQcVZFbU9KNGMxUm1jcGF4cjd1QnU4a1BYdVpOVkM4Y0Y3TjR4MWVhZlZNVE5sdjU0a084dkk2dis3NHRvdTUxbjNtR1NZWFBvZnRZczc3OXVTZlgvY0pxRFRaUk9tMWFFV0Q0V2IxY1ZCa3hhN0g1TGx5Z3Rhc0dXS2pKR29WWHJsVHRiM085RGJERFFrblcyQVZNSWgrWXVvbFhNcHlxSit4dVJOVWRXZ2lVNERzeW10d1dOaFIxVXB6Yy9WQ29wc0NvcHRJV0hYcSthdkl5NHh1T2R2ck1hc2t1dEVCRytlMmVYTW1TU1p1OWZwYjlDT2RkRTdXK3M2bTh3b0ZwaGNUT0JqYmxQZ3BZSjVycFAycFc2V1ZNa1pCRXhXaVpibWRxcmlkenMzdkFObWxxTGVQUGRqRnJvMm9QaWRCODVsa1pxK1Evc0FIWVBkVmszQnM2bjFHTFozRkFKYjdnL0s0T2EvVjhYRTlwTVRway9JVmFyS2dPYlJkWWZseU95TS95a0dCYWRubjUyUG90MTVqSlJIUm9WYkhPZEloK2dacUJXN2QrYXBNcUJTZXl3RGlraWsxZFBSaEhqTnRPb21vTHdxSGM0d2tRNlFDeUJiSkh1L0YvcXc0a0Q1NHZ4SUZBM1NyWWZMZkJoTEVrMzdFTDczQTVjeU9kdDhDQ2dZeG5RL3hBSXYvR2FEcnIza2xoUzNVWDRQNGxaOVNWeGNGWW1VVGpRaWh1QUxLc3lhcytKSTlkdW9rNFNGWDZPekxKc21HbDZBMU4zek40aEFsZXk4cVlNSGFCZHpLb1BZeFFPSGI1NHNnZGs4c2pTRzdzblA4a0NVTm1sNjFPdVE2ZkJUTmFOOTlkMVM0Z0prRVdpWEFoTWxTRUNtWnV5MzJGVWxrRmNwNDhCZTdQK2pZbTRkUmNwU25YdG9sUEQ4NWRvUTZNL2t4MGJzREUwRTdkWTJLdmhWZjZDM2NiMXloZWlMeHN4SG1RV1d3Uk10T0xwNkNZS2M5a0szenE5c1hyMG16SExxSnBFczRobEpqcXFrS0kwczA2dCtIaTV3K1RtMmY5b200bDJ0NGlESGNXci9tcVRZVjc5VEJndGcxMUFBaUloVHYwZGdraHA3SHZMaUl6M3U3MDZBOC9xdjhNV3NXMEFwcjVKMnBtK1VvcEFzUm5Ga1dtK0dWUWRRSHp2dXJuYTBRbnNmbEgvVXo2dUxWV2Fmb01IRkUwT21BQ2I5QStvWStaMWdsQWFHZHR2TDFDUzNUL2xoZnZPSWNvdGEwTy8wZlB2TFVYbVNMVUdzKzNZa3gyb1FZUTdQSmFyZUFFeVhOUUYzVm1XV01pdTZ3VFNBanNtclR2NWxTdDRLSlpabFlUamlVNWZRazB6aGpYUHV2Q0Z6UlA4SDBMMm9CRlh0MkJFYVc1TDE1RW4yTWFmaGxodjFPaEthQzJERk1yaDNiLzFVMVlQL3RuWUtRWG1hNVllcDlGQ3BJT2p3emsxOTh6Wk1TK2RIT0lMdHA0RVo0ekkyL0czelUxUHhkbHhlTTlaL0tMT0U5SEZRaFQxUkQ4aVc3dXZySUVRSzlyMVhmc2hvL1JTY0k0cGxKWnZPSEhDdXc4dFB0ODJPZjViTU83Q0VkbEcvTjVQM0RyOU44VHBCa0R5dEJOcEg3NTZlSDB0QVprblhuL280QW43c3lQQk1ITngydURKSHBFanlhVnVHMUlIdmNiRkdPS0F2UzNyVXdpUmtpMFZSZU1aOEhyVFlQQ3pyRW9HejlpUGp0T1J1Nm5tRVJQeExmZkovUW4waU14MkNlb2V3VnZnRC9kaUtXZ3RaUVdYakFPRGplaFVpWExmaHphZ2c5Vko1VnNLNDIrNVZiRXYwcTN3RUluZlZ3bWl3ZWVRelpTUUwrallGQ0ladTBSUlJ6SFBJcUdQdEliODg0WHJzRUttdWJoNFFzL1dzamhDbDNkUDRGdzk2U01TRVZBanBtMnUrK2lhcmdvZm1LNVB2aTV1Y1llWHpwN1p0cUFaVW4wVHkrZmsyY2hwb2lsaEdtMWRKYkcrdVNYVVZJSTRRQytIb3RCNFRaWHdKSzVpVklnV0ZBOVFYRFdTRDIrSDdGd2I5NWFnSzJ1ZW1vMEtxaEV6SllWdjhnYkRsSC93MURCYkZ1Z2Zod24vZ2RnMnZBUndRUUNUMDFPcThPWlpHeG0rWWhiMHFJQVczUWJ6UUVENThPRVZNeXE0NmRJQ1FxVm8vejNiK1NnKzQzaEdUZnBIWUJhWHY3YU01dWZvenowL2N3WEEzdTRnRWV3bVAzdGhZU2ppVytoQy9lR1Bia0dSdEdRVkhydE1JN2dkbXlCR2J3UVppbXN2R2R6VUpuekdtNTk1SW5DaXhiMWtvRnRUeDhDeXZ2V0dhY211MjBUYUVDbXV2a2FTRXRPUytwTFdDRjh2Sk55Wk9TOGV5SDA2S0hlazhzUTRXQW1rTGNCTFBaTUVteHJ5OWFlRmRSaVgySjRpbEYrOExRUGhPdTc5S2I0QWlNT0dlQ1EwR2Q3aGM4RHdNV004SkNuZm1wSzZuNEJSTnJOM21IUC9aNGVJbUlsK1B4QVErUm5YWERNeExiUm1TcDVXcHUxSURBQlBDWnhmMVorTHhQOHBkQ2swQTJZM3lWbVYyNWlyMDFwcWNhNXVEVlpiUTdKNHdSMVdLOHo0UmFPeVg5UHBnQkNmdGVPSjkxZS9TK3VzaDFtbFdXL09XNmhIUEFXZVg4elc4THkzdTN3bW1ubGg5MExPZUM1MCtlQ0NPU1JjMTk5T3NWblpMQ3RIVWpYOGFyNWdlRDdYcWJMVXVNWGM4c0ZlYk9GOXR4WUxPQytVMVMwUlEyd21JdStJL0VNc0ZSOGdjNi9tQXNVMDR3SU00dFgrM1A0NUpFZE1ib2J6c0dXK2lWNlZNeklaTUZ0OGcxNzlUcGkrSU94RzZoSTBKV2pUOFRvMjRBOTlCMHZudzVnNStqM1EyWmx1TXFqMzNVd1hONnFOZW1zbEFlajhKUTJnaWEyM3FxaGcrSDduNU90ZjcycCtKYXJmdk9YaWtaMXJxN0E0SzlJRTBNcFNOVmE4WmlpNkxWL1VrOGVHYzdYQUtEcmNNRVhTOEhuZjlvZzJFNWprOUcrQ1ZtN09oc2tEQWN4OE1Uakt2bDZMeUEwYzV1VVNORDZNUlJTOE91dmcxSzZsZmVuL2VBYlVlQ2ZtTnJNbUtjc2hURG9QK1ZadTVwc3VKUTR2eE5xMmRnSnFtSlZHVHA0Mjh2NVRYYlZRcGw2TEJycThvbXh5cmg3RGRxdlkzZEtSNWxMSnY0c2plU1FCQUMrTkMzVUZDVnNQZFJwZThIT0JIajNVaGFaZXRscndYU0o4ODBpZW1OazRaVVlCNU95NzkveXlQRFlVdVpuTm5mNmtBS0V3bTFvUkZXZzdWTkdabTJTcXg2V2kvek9NbHVudFprT2x1ZTRtMjlYd3FoM2N3UVFMQnByTEw4VjNPTGpOaVVRcFpGcWw2aUxPQ2JEOGxyNUxhMVBVL0Z0Tkl3clZHaUJETnB2bGFVekl1UnhsWG5GNEJTVG1DUUVqNG8yelRwVTlkUnJ5cFR3cmxITlRxRUhMU0RqdEdadmlHWklPV2RqS1pGUTJTMGpRcjB5RjcxKzA2cmJKT1UwYldrV29Ub0F4MGxqS0dNc3VzNUY0RWx3OUV0TnRZNXZPVzN2TUFyamUvdWlaTDRobkFYT3JabHVsVHBTYmtDdUpMZ0VXUUV0dHNTYlNLRTVsaHZmK1ZoczZML3FRZ0xzTFpNNVIxa1ZacTdaZFFqYkhwUEFWNFV1emdkVExteHlPdnFvVHlDeFJvNUM2VWVsbTRxWXJ4anZtS1hyamFmeEdyZjdFbFNLelBBcmJuM2I2L0pha3dPdXAwT3hQdWZMRm44NkJxODkwUE5Sb0xZb25WVDVIZGd0YzMxTFZiQjRtak5DcTQvMWpETE9Ib0pjdHl5a2N5R3YrMEtzbmRTZ1pkVW15cVV6REJMbCs2Z0MwUU43UTI0c01PSnk5SU9DV2g3Yi9WazA4MWFhc1dVS1RRaVNqYzdpUTBETTJId3pyOUVKc0VYUC9hbDVZT0hIbjBIYlBUaU9JcFh3TnoyVCtNMldGdkc0UEpGTC9YWjN3SDJLdUs4a01zRnRvSzFxYkpBaFRZbmJibllZRFZUdGl3d1Q5RHZXWG4vMEtPcit4aTZwOCtVTFh4aUJWWGx6TGpOL3lkcHRoamRNUmpxd21ZdnV6UWFKTWs1TXJqY2tCQnpvdHcySmEvTnNUYml5L0JON21UZE40c0gzaWptRzZ4Y2dxRHNNdDZNSVpjVDJrU0NYVnlxUWZiUkVKYnFjSzV4dUJ6Ykw3QzFqUUUxRDZKbklYaGt0SzJ1ajlaSXRNUDFhRlR3YktrclZ2eGhxUkp5TVRwOHQyT21DTDRLTmY0R08zajFYV1l3RHdHNFpzb0wwMmpNOGU2RVBRaVZ3U0UrSkpRcXJDaHZLUzZGbEVzYi9QUVo0SnFnOWE3TmczUVB0eTZjVFllbm90RGV4KzJ6cG1ON0g5VDhSYnMzeTF0MllOVXhqZWwrOVIzRVVlUk4yMG5XeGx1MkJYOTgvSWhoSEhZa3grMUJFOUVncWJHYXZlb3BKUjRGQUdEWitaY2wvUC85a0FBUUFhQUVBQUFUQUFRQUFQQVFNd0FnQUFBQUFBN2dGbFFBQUNBQWtDQVFFS0FnQURBQmxVYUdseklHbHpJRzltSUVacGJtZGxjaUFvTXlrPTwvQkRCPgogICAgPC9CSVI+CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I+MTwvTWFqb3I+CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24+CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I+MTwvTWlub3I+CiAgICAgICAgPC9DQkVGRlZlcnNpb24+CiAgICAgICAgPEJJUkluZm8+CiAgICAgICAgICAgIDxJbnRlZ3JpdHk+ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8+CiAgICAgICAgPEJEQkluZm8+CiAgICAgICAgICAgIDxGb3JtYXQ+CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24+CiAgICAgICAgICAgICAgICA8VHlwZT43PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MVo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU+RmluZ2VyPC9UeXBlPgogICAgICAgICAgICA8U3VidHlwZT5SaWdodCBMaXR0bGVGaW5nZXI8L1N1YnR5cGU+CiAgICAgICAgICAgIDxMZXZlbD5SYXc8L0xldmVsPgogICAgICAgICAgICA8UHVycG9zZT5FbnJvbGw8L1B1cnBvc2U+CiAgICAgICAgICAgIDxRdWFsaXR5PgogICAgICAgICAgICAgICAgPEFsZ29yaXRobT4KICAgICAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPkhNQUM8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5TSEEtMjU2PC9UeXBlPgogICAgICAgICAgICAgICAgPC9BbGdvcml0aG0+CiAgICAgICAgICAgICAgICA8U2NvcmU+NDc8L1Njb3JlPgogICAgICAgICAgICA8L1F1YWxpdHk+CiAgICAgICAgPC9CREJJbmZvPgogICAgICAgIDxCREI+UmtsU0FEQXlNQUFBQVQvY0FBRUJBUUFCUDh3SDVnd2NEQ0FyQXo4QUFBQUFBQUVpQUVBQUR3SUFRQUlBUUFJRkFBRUI5QUgwQWZRQjlBZ0ZIUUVSQVk4QUFUOWJBQUFBREdwUUlDQU5Db2NLQUFBQUZHWjBlWEJxY0RJZ0FBQUFBR3B3TWlBQUFBQkhhbkF5YUFBQUFCWnBhR1J5QUFBQmp3QUFBUkVBQVFjSEFBQUFBQUFQWTI5c2NnRUFBQUFBQUJFQUFBQWFjbVZ6SUFBQUFCSnlaWE5qbWNvQUFabktBQUVBQUFBQUFBQnFjREpqLzAvL1VRQXBBQUFBQUFFUkFBQUJqd0FBQUFBQUFBQUFBQUFCRVFBQUFZOEFBQUFBQUFBQUFBQUJCd0VCLzJRQUl3QUJRM0psWVhSdmNqb2dTbUZ6VUdWeUlGWmxjbk5wYjI0Z01TNDVNREF1TWY5a0FCQUFBVVZ1WTBsRU9rZFNRbFF3TWY5U0FBd0FBZ0FKQUFVRUJBQUIvMXdBRTBCQVNFaFFTRWhRU0VoUVNFaFFTRWhRLzVBQUNnQUFBQUUrWXdBQi81UGZHMkFVTFBjTHM0eXpxMENpVU93aGRLWXU3QTBvN1dZcnhjc2NVc1dwNkpLYWh2Z2JraUlveFN3MHpZbzlGZllFTFpmaEJNNnJwZk9BZ0lEeWlJZHhOaUo5Y2FSZTlCS21jSzRkbWZ6QWdJRHhBR2JyS3B5bWFZUUwrUzRBbzZqSjdNajhCNEQ5WWhCZE5UMXBLSG53QzRRQ0xBeE5UUk54MVFEM2cyNUIrU2lOQXQvSFdBQVlyWGh4eDQxL3FpVFZrS3VtTjhMTnFEVjlsSFR3U1crQW85UVI1Z0FxZ25CUGJ4UlYrRmg5YkNHVEZMMnVMQWFLYTYxcS9LVEF1ZCttcW84TDkyZ2lSaGdDT3dtWml3cW5wRnE5ZFN3WlFtQmpZYkxLb3RZQXN1a0Y0OUZCc2kzQURBWnZ4SEhncmxuc2tuMXFFQ1dNTFlGVDJmdHovdkZBeGVMaWdMcks4ZjFHc0RReEx1Rzk2NWc5eDRHNGRNQUFjSVJxemh2c1lVb0U0MU9jRzVJMGN0Ny9QOGdBM0VDL2U2ZkVVdmo4WmY4TXMrWnd2Y0VuMHQvcEw1c2wzZ0ZHczB5N0IwaTRIUElmU1plTlFYUlBjbHQrR3I4aS9PNHBaMlpxbEFObnhCRHduejl5QmlDczYxTEt4Yk9aN0ZxMElDZzJRRjJrMVBGbE8zRlpQcDM4NUpLTlFCUkN6RGlFT3BMcjBFZHFINTY0UjZlM0w3WHRBZUtIZ3VwUkxPZDlZRGtIRFdFb2IyYWUzQktMc29jRFFENUJuNUY3bklOU1ZlUXVKUHRPOEVzWWRHYWJwM0I3eVVDTzVHMGErS2RvcDFuQlV4SjVPSGlKbloxblpQNGFROHpNeFNBU0xySlFIakV6aU5temNSM2EycEk2dFFiRyt0ZnYwWFJ1NkZLK2gyTFoyKzZaQTBVOTBJYUQxUExRRlN5QW02TmpCWi9RYnlXTnhGdjZXZFNxSG1yd0xOa0pWbHl0UHpYZ2ozRjY2c2Q1VjZ5eE5UV1dTcXBGNWx0em9IaFVhN0JDenRIQlZGamxpemcvZjFOUXNPay82SnJRbXgrRVNEeVEzdlNWSVd0SkpVa1RBUFhvbzdLcG53UnRhME1vMitMKzZDOENCNlJxS1g2dGcwY0FLeFh5OXdxQWhvS1ArRFFNaEx3K1BpeHZFRE9vOXpLRXk4ZEFvNlBvTzljdS9QVDRud0FJbnBreWU1bGZjckJMWHh4bEVhQjJzTGQ3QU1lai96WXJTakNFUXhBSUZ0YnhTS2lXVW5HTHUrTTJmM1J5MUtvbXZvRG5VdHJJMDV0YjRyb0Q2bGQyWnUzOG10S0VUeHdVNW8zMUl5N0VGQ0xvamtORzV6U2RhcUV6SktaN1JwcXc0bVRLeitUSXFvMjhRUWZ1N3BVQTFFY1JFbVRrWVBsbFZjY2V1KytOVFFzU2VrMy9BRTBsRHRROHJjWGExdU1vVGE3TjBjWHBNVmxmRWhtWFNkbks3ZllhbGcwM3JUN2VIa0Jya2tsZStIY0taR2N0NktBSjJFa25nOFllK3lMSjdnMjZLRDE3TG5uNGdFUzdaRS9Ib25oQWR4UkcvSG9tZlFuT0NiVmVYcmFsOFdoWkRIWWFnSHd1RE9lWlBOUGhFdmo2MUJ2ODdxK1k5L29SNE9VZEoxNUV4WlFYYXVQSU5heHdlWFE1dUJPOVg2ZmJxeVpzVmhQeU1uUnVsVXRVbUtQa1N5R2VMaGdRWEdpZmlpTDdubWcxUE9DNFV5cXpndllidmJDL2M2VDhJVm82TDUwNGhQdXJ3UDRhRHBXODRHRTRhMVJVN1h5WXhjaEtRYTRBbzJSM09QOFNFWEIyaVBNZ3Ruei9OWHBJYW85bUMvdU44WW9SY1QyRUYyZXFPYkZyMFFDdDZFcVVkMVkxNGFoQ0JHaUpCTWF3bmtVS0VOa3djQ3BsRWtqMytuWFMvZ2Vuam5DS2I5WDhuTlBuTGVQU0NObERISjZjUm0rQjdkVEdLQ2lkVWU3QUV5bkZUQm5VekVzVUxpb0YvcTRSRTlVcWtqdlh4SEM1SUFTU0VRamFjN0ZINzZ0R3RiMlVpS0NVMTUrbEpBejVLeGJYRzFzUlBJZnZER3U2NnBEbkZNYitGcjlPcnkvOURvU2FTT0VwakhQTmlxS1hKVHJTQ3JTRFRMTm9acTN1L29mdmdCZ28xak1OMmRuc1RTcHBNMmJhN0Z1Z2hnU3pJWm1DU2pCNDBjRnFkT2RabSsrUVRuSnhESTlmK0hLS3JEakNoMVVBYUN6Qm1HdFVUQnFDMkhCbG1PdFBDMnd4NXg4WXlOT05ZUGhQa2t2TUlDd1VnbnBmc0JaUCtDb1BkbEJ1dnRQTHIwWkthV1ljK1JZYXNmSC9hL3Vjc0RTR1Bna3Vpbk5UWHRBSWpEVDlESUVJOFlkMVIxb2t2OHltOEVjckh4a21HL0hIQTNjZFlMTzg2MStVOGRLTEhHbVlPZE9PdlhtdTJwUGhFMjlKOFhhQjRqK0RlYkk5ZEs1Rmx3OXN5RVQrd0Y2VlBnc1h1L0VKNG0yVHFMWjlOOVBNK0t5UE5rR1Z0N281MDFBMWJCU0JHdmNGSGZ0RGhORnhDWmltWVY5RjhvYW9jMnRQVlJYeFZvOHJic2w3MHhycWhXN055MDhEU054VmxXeGltTXFSbFZzQTlPS3F2UU1LWjZHWUl6bDNKQithYzJFM2RaeHVsTWc1YlZjVzJHTlQ0RjVBbUpYWFplVTgxY04vVXBjWjh4bk1UWEtpK0E2YzBqOCtUMVRzaXhOU05QWlNOajRLVTZobHBmbjc4cFluUDlwdXJwY3ljZ1REZ1BFNW1kcHlYTEVhcjNJQk51MTBqMWVDK2wrcGZBSEtOaDBGRVNFcmJRdlc4eWg1R3BraHJ2Y2lIbWNGWU9DbTg0YzBOemNFY3ZjLzBzWFlpMURFL20yVTkzbVlybXJobnNhdFdUbVorYVpmUENQa0Z4ZCsydW5uMkgwNStzUUNreWtJTUJ3UHJ1Z0FtbFVBeXJaTzlPc085TTJMdTRUVlliaE1odFpUcWhYN3h0Q2lSc25zUi9pMUs3TXVIMlRtY05VdmFCdnhZdStmcWpjbTdvQmNzQm1XbFIrYko0RG5lZDNWUU1ZUUFhQ3ZkcVhvTnBtbDArM1drSThKd0QwaXlJVTlXYVdaa3JsUWo5TU1RdWtBT0R4TEJyYS85MXFjSWRyUUhrZVZwekR1dVQyakUxd2U3RVhKVTNiRlFsTGxLOVo1Ykx6WVQvT0NNNzBLb1FPU1p2dnJPS04rTTFIdjRzd2NaSnU3ajdVQmh1TTlXN0Ztc3l0ZDhjUFZmZk9iRGJVWSt6dEpoQ0FsZ0hMUVNOM3RGbU9BMjlkNXFVUFVWOXhsOU5yNHk5UEsxN1E1Yzd4OGczT2tXcmxmUFdiUkpOckRBNjVTcVhDN2VSdFhMTUZDaVZpRjRNbSt1cHFUV3VTMWttMUFmcVBKSjRBeFhEU284VjhROEg4UllUSXBIYjZTZnlJL0MyQk9xN1k0SlpidDI5aXEyUmJBU0xiVnBCeFFLTnlGRzVlR2ZCc1NWVHd5L09vWC93cWVWMGFoSFFnR3RiSWMxcGtwQU5DZ0pMU3pEaTQvUlYybnV6SzVGVlJRb21KWld2TlNTVUxyaUlGMUg1akJIS2g1ZUFFUGFXalNoS213bWRWTHc1c0RreHQrem9KaEVHbmEyek52Q0s3VkdxT3FvQ0l1YWhKNGJRQkNYTXkyZlQ2U2dud0I0RlQxN0MvQ3lqb0NWTnFyUVoydXIvY3d1L0xMMGtwUkdwbHBuTjREd2JzU0xCUllFOGVFNTJVeUpxajVxSTQyOERLZ2FpeFFBZVlISGdCU2FkUXFsMzl6VkRvakhqRnBINUsxcXZZWHo2WjdmUjNUQXhMbkgyMnlUZ3czZWlIYUl2Z1poNisyK2xaZFJsQ2k2b1RoamVWTm5uSWZRTkV0bkpxdXJrblUrTTl3YzZRNFBQQk5CeDB5MzFENHJZZXA1eURHNXhhV2VIMzV1c3Q3TnN0Yk55OUpwdXIzclhyRjVTUEc4bi9Sd1Buby9WUEE2c05lRGtQclJzd0JFY1ArRU1xWWV6V0tHY0Y1VGFselR6TW1OdUdIeGZ1S2V5MEJ0OXI0VU14a0tDUDRSR1ZHYVBXV2grWlhpUWFPWnNQd21LN3VxSEowQWs3VWcwbVQ0dTdBRzcxY2taMXEzbHVQOTZWdGhaNWR2WTZMOU5zR0lUdGptQ2xLUWNWdEJ5MGU0ZmVJVEpBUGpsUVBLOWJPb2RNZW1pY2ppRkJnVWF6dTV1NndiZjlad2Y1UTRSMjhnODZUT0ZVa1RreGlKWnB4b1F3bVBmTmZ0Q1BHQ3duYlQ1VVYrWkdNQXQ2ZnRRWFRVRnU1clR3VVdmRy9VeGhNQmtMRFZYNCtlQVlFYzZ5NGJLZVF3ait0d01scnI3MzVZbWRIcWhKeUloR2RMd3lSUDJlZkE1ZXBpVVFVZ2hSd1N3Uk1YU2lMc3JxemNRWS9wRTFROHh2M3V0VFZWYmM4dnpKelFRWkFUWEFMeXpKc0xxc216VWFMNlZWWmNtbjNXQ2xQNjA3U3drSGR6SGtCejE3OEZNcWdJTWk5c1dGQ2Z1Y1ZJTWdMcndQd01PY21CUEExMFQxOVJldE5qWkNuc0FHSGg1YytZRE1WUk1NWnNzYUNWcFNtNHpXVUQ0K0xuS0VhU1dvbGpUM3ZqMkY0bTZaeUM1RnM2RXhZbEtqT3B2Z3lYNnorRUtiOGEvU2VnNm5CN212R1R5N2FvRVJ5NzkwQllKcjZMQ0UyUllPa3hsaTB3MEZ2UUpmV0c5aExXTlZTdmdldkxVTjV2Zkw4MGpKbGNjL25IYWZkZVRIUS9uTXNCSTlKVHpKVklsR0hkcE9FdDFZSEpCcTFrd2ZNS0JKRlREYUZhV1ZHZlRGY0gwYis0N0pZNVpOOWszUk1scTdoazZvOGh5anhVUmluZlBFK1YyVnlhbHFUbFI1Mmt6c0pnMU91VTJuY0U1bHZONTd3V0VVSDNqejRaYnErQkNjV3ZFOWRMeWpSblRVMDRNbkxlczhqbE4vREg3YzNPUklpY0pqR3oyajhNNTdXS0VvYWpXOVBmOHpFQjRTc3NuclZ5TUZadjZlQi8ySHBpekM5WDZ6N1JYSUZibk5qWFNxdXRZdVM2b1B4VjdpV09KQzZrUThvZ001WVM1TGdOQ2lOYmtLT1FxUWNhcUt3WW9rcVR2QllnRnY1cGlHQlIwVE5nbW5wRXlvNVo3akZPbWQzNGNYTnZDckRoR3VURG5KNDE5Tk1pSjd5MmRrTFBmTnZYSW1kZGV1OExiRlBKVEZWTStXcG9jM0V5OVJMR1VZWTlvUEhYdXZmOGdkSkpQSWh5VHU3ZU5yMUtqSk1qSjZzTVQvbDlDTU1lbEhZS3ZkY0dtR3J6ZkZ1WkFEb3pYb01XYVpwUEl5ZWZDWVdLaExTNXVXcnE0OFFyU0dNZlA3M0YrRDRGb2FHV0loNWIvYjN2Q3BQM25MMHZlUkY0TW1XTDVxY0xCbUt2OVBqbVVzOWRuZEVjazRsNDRRK1NtWExPZFNkdkFYbk9NdjFFcDZYTVdzWDhveTkxWWQvU0NEa3p2dm96dTZRdzJTeFRhditjQmlXS1JXakY0OVUrZ3FTZWw2dEhVOTdwdCtReHNaK1Y5L09La1lnSFhlV0hKZ201REdmTVRVcGg0Nmt4ZFZ5MERHRGxoMmRxNHNtb0plQUN1aERsNlc1Y2prK29Jdk45OWVvbFBBVTEzNk9vYjhwc2VpOWpNV21aSEkzMUt0eTdQMFBpK2xIcjZpVXdNRjFMNmt4SEt2d0JrRDRWMjlIeTd1MlBTaFBhTm1HYURxM1haZ3BLbTBxeTJ5eXhjcjMxKzdDbTZQQmx2ZkFHOE14Szk2NUx0eHpCUlc2RjZsRE9UbXJ3dTVnMmVuREtrTlVSRjQyMGNxWVJzakNrL29KN1I4REFyaHdOY0NITExsZkIrWExkbFhhSU14WllvbldSbWhReFdPREtmajYxR0I0V1lYZkhPUkxwdUU1bFN2R3JJdEt2eHJhYmR6Qi96RHoyWThpUWRXVWFlNXlPMThrNE1xSkdhc1h2UWRaK1g2dCswbDQ1elpXY1czNlU1WE42NldMMEMxWVVMeW1ZSjQzbS9OZkNVZmkzN0VlWCs3VG04dTBTcFk4N3BhS1VZdm5OWVA1anZadTB6anZBZlVjRGJJZEpUMldjOGV5U0g2NUp4anRPWDIwaVNmR2p0QkQ1blc3dmplNE5NbzBvSC9ieVRHUUxLdTVyRGtrcmxDS01wSjFjTXphQWo1TnVRVzlidjY2RWNVTHdNeXV5aU9Ta214dWtHZEVURm9VSktLZ29zbmNGOVVOU045NnNLek16S1NkZWh5OEdCUC9mWlRlTjVZa1J6OTIySkxLdW5iNmxqZVV2ZXpFZmc1a1hSYU5xbVNsZzFCa0hlSFNnMGVFMTAvbW9UeHYyVDlwZURkSUVCZHRKK1ArSkptcWtIeTlZc1hGREU4bzdTSmUySjhDR0I0UG0vZWRwTlVjOXZVMmRUdHJXYUlOWk1jNHNkNlRJVjltblhJSEJGM2xtd00xdjFVUmY5WVN5WmNKL0dOeEVVek9qc28raXNDdW5tVUliUk5UZFFUVlZ6MDdwOHVaSlE1bFFHR0FPelFlRGtFeHNQc1ZwbjN1dFh1dktqZTQ1MDdsNTlXZks3MVIzU1FROFJHeEtoOCswZEUybnF4V1ZiYTF0SzJHSjZidGVPK3hlYVVoUFM0Z2NaWFljSFhpRWlTMHptMGk0Y3FzaGszZG15a21TTEdhcy9BYUFwTDV2TS9WblBIc3hjME9DUlRmM05FZWgrWHpZd2NheU5tdlBYcm9VN2d4VkIwSEo4bG54bUUvTnc3TFFWcStWQmYyV0JyT0dxbVBseURNOXMxM1k2R01sMUtWcU94SUhhT2wxbnlsbTJxYnI3cGx5bFptRGpOVHQ5ZnRXekU2UjBFZVc4QnV4WWZISGxlMUJlNGhQRVkySDZybTRZdS9zRzAzR1VYRGJCeVVPQ2tnUHJiRVJQVS9kUE9MbnZ4eWFHOVZpbEppL3lhc0FCZ2lIVHU0SlBNUE1pdmxRUGw1QUNoRlVSclBsZlVIK0RHQnQ1MnNaNDlHcFp6TWpzMHFiZ1NnL09vdDNjcFpiZGh4NDQxQVo3bG8yVWNhcVlxM01JV0RrRzVtejNuNzdNZU1JVWtocUNlL3BZVU8zR3djNEYrUGJHVXMvalBWL2RMS1pqcnZFRmVWUmg0SlZMSmN5endDeERMcDRHL2NFMXpzeVRHR25tYkhuK0hFVTd5eWN3amw2NkU0eFdSWjhIRHN3QVlmcnRONXFWVWpoandCNE1Lb0hoZ0NFenpmeGp1TDJqWjdEdytTZE5nSVIxRUcraFcyMkdvdHVZemx1RU9ocVR3alExeXVCTENIeHVJcldNM0YrTmMyN2cwYmd4WTNGQjFwUzBBc1QyZEhyUEQ3dHdpM0g4TVJvRThwTjhWdmJEdjBwNVpiRGkrRUhFc3VrZEp3Q2pIQjkvMkxvejdXWHFMSmp4d0xjNGdyeG1ZZmk1Kyt1RUlJek9BU2krMUpwRFpsZ09sbWNZZG5PS0JlYkU3TEU4QWtrRU9yMVJja3FvZ0htZFJ5ckl1OGJmRGt5eTBqekxLanNkVEh4MnNrdGZtZjZBYWtOMXpQUGlvVXprbVpJSVRIaHJFZEpzY2xYU0NlamZKcWdMMDNRMVlPaTNZSHc5L1F2R3o5MGhFUktsRDBCTk5pK0dRejIwTU5iNHFMdVA5MVQyZitNbnZoTWJJOUYxVDF3NHI0SkdxcTdnc1JtVEtOYUJabkxham95cXdXbnp0bjcrVnBkRjArV2oyM0tUa0xmTmFnQ09OenVad0gwa2hXSldUbDBuVmNtNG56cG1qcVpCOVlKcWlDSE5Eb2xjRDMzYVFhUkl0RTlqQ05mdXovUlFYTHZuTzlqL0kwbS9mVVRpWTNvUjhmSjYvU1ZQdVRBUjErK2YxMlAyU1J5aXJvZXlpaStWUGMyWllRM3NCR1F0Wk9SSzQ0Tzc0M0hzVUwyWDN1bU9nT3pFcjFFei9XdVNHUGNTME9Odkp3Y3V3VndhVXJ5cFZZTDU3VENoOTB6ekg3K2RHdDlwNTVHb2Z1bUdYWHpmWFM3eGp5T0tHbGFsZzU2TVVwdmNsWTRvSlczOUxzc0JsZ3dkUkoyRnBlWWdRUU5QbmtFUFdrNjl3WXM5YitxUUdPYXA5dDBWcjBKcStLdmJaOXZtS2FOc01kaEpOL3pPM0NaRWIvUDBrUTF3anloaFovSHBvcTBVTjUrN3lpSDVQSHFKTHRIcTNrTHZoZGJoZUpjZWEwUVlzQUhxTjdSUHJoSnlJNUk5VlhJT1BOVDJiNDlBTDJUTXpzT3Zid01zeWUwQ0swdlZLWFdoS0dsVzd2WGQvMzlPRXBVN3FzMjNKYzVBRWZic1FoMUdwU2dsUlNIazlGTzBkM3JjRndtTVRzNXExZkZ5UUk2RXFKS1J3cGdHcDJzdGI3ejF6UzFibUFrSHJZbTF3NlRVOWJ4R2hiaWJMRkhNZ052UTkzdm5lZFpTWng3YTJBODMybk5NeS9KMFdnMEg4V3FXc3d1WEZZOVd1ZnVwbk85dGhzK1d2OU5UQm1qMytFV3cvOFBNc2NSQ0w5NE1vUDNLMS8vbmM3ZXZCa2hnWkFLMThTUUhHZ3RTNnFNdXFxUDMzR3hOOFlOM0tlTElINkNhcnV3ZUU5NWU4SmFrNGtiS25UcndwUWlZbjk4Z0RDeTRQSFpaMGloYjEyb0lpeklESkdMSjRmWkdHbWdOeVRhUVI0c2xqcndGdTBsUDU3NWdqb1RkNWZPRkFjWUpsdmNBVzZkdTJuZHZCQ0hXMDd5ZGpQbUNJWXpBdVFFVHF1azNhZDhNaXlJei9nZFYxQzUvT3o5clE4TTdTZjlHZWRlRWNPYkZSTXJpQzNnNG9ZWnBnNWs1NDlMZFNmQmRJTGo0S0ZlclhmYk90MUs3UFRtc25UNkJhTVRVRkU1bm9LS2hCUHBwd0Rka1BzeFBGa0F3b0ZKZnRlZ0lQNHhiK25mTGxsNWQ5TmpFcng2UHk2ZDdJZWtJUStwQThob3dzd00wSjF4KzI0SFA5YytTMFBGMy9YN1NpNzdxb3pleG53WHdvZFBaMEFJVkFPaHlsMnZudlZRNUNiOHFBbmh3VUFqRFJhOVBoTXowV3JWOUNaaEJtTTFpUWxQTW1vbTg0Y3hUeHZ4bVlmS2UweTQzN3FxSzIvS3N4SzA3WlljdFdSdXRsUEpjNGROUHlIRHN5T3BWdXQzY0ZQRzVobVBZQWNYa2NzeElJeUloeHE0L21rNXU1aHNWR1I5WExhaDFRSWE4dE5EYU5UTTl2M0V1OWM1SXJUUmtGNUpCT053ODVuaEdYQmZOUHd6YS9ia250WmwyWEtEYVVoSTdrem5JVnVobTd1RDZSQVlKVzRRTGJrOGNLNkVXQUZOWStKL0FrZHZaRXFyWHJaSE5vMk9EeEE0M3hHOTB0SHdIZmE3bk5vUjNYMHErcUF3RXFqd0JYdkxadUtIZWNtOVF4ODJSL29IZUJycm5Oa0ZCNk93TS81UUhacVNFakZXZndrSEZOazAzLzlqTHJxYUtyRGF4bHFVUnJ0ZWxaTko0VXlQVU4yNURkNFd1ankzVzRvRkhZbUZnUG0yVE1oTkIwSitheHVlVk50Y0tCeVZRRHZyN3E4cHVPSVdYeE44V3pLNW1JMmlLUGNIcEFwd2pSaUdESlpQS0ZEdjBQUEg1M0lTVUpPSUN5cyszZ0kzWU5CaDRnM2J1RHU2WUJxamtQaTgrenloTVd4anBVQnRGVitUcHFYcUpNNUhUOXloS0kyYVVWVkppZ0VOaG8vZVFFSXpoeFNlOU9EQ0hSVVRBTkpJZFU5NGdIdnVCeWowNytTR0x0NzlGaUhGVFhvMFVnRGNLeHYvenFIMk5BZjA4RGs0Qmt5VW40STFCbXBwZzBPNkVjVEN5a2JnZnpBMG1Db1FoV2RlZHJPQytncmpXaUt1UEllUjhQZHhZQlBEL3JxZ0h0aCtmMEcwbWRTRTZvenNEZzJ1c2NtTmRpVDhBV1A1cnlCd1ZNci9QR0RjbFFIMCszdUpBZ1hLS1VCb2ZpRGp3YU5PUDFMYzhHODZIVVdBQjhlZ1dNdnpPbGlFam5qblBhRzVhd1kreUpSaStNekJyZW5CZ1Jmek5KSTlmY2xiOS9YbTdOcDRiSTg5Ynl4Rm1OWmJQRjVkaVdVVENJT3VVcCs1K3lZb3BlWUsrUzVtY0tGand5LzNReVNEY1NDREtjL2tTL1VQYndzMDZGRmtuYXNsV1ZzUjdtNjVRNE5mZ2owalNyMy9zVk1qMnBzL3hSOWpFdE0yOG9Zem1CQlNVOVErN1hGMVlHSVVNdXU2ZXBMbmY2SzUrL0FwZjBqT0YwNXhHdEUybU9XZzBwM2FxL1pNOUZBVlpSbDk2MVFYZlg2Unk1NlhaeENVLzdrekNEVndtQmhOcllvUEN1TTIxOW9pK2NxK21wWndGS1czQmExalppTEJPaHYwZEd1Z053WjFIOC9OY3ZBZml1ZFdiNWsvMWhkUW4zOGhhZ3g5UmdYNmxDZFIzeHBJZ0Y4RWRYMU1oOTB0S0ZRSko1aTZYamNOY1VjeTM3M3YrNlAwTVF2YmdjVmtYK0h5Y245VDRlWHZQOFhoaUNIQncwaC91aGMrbzRZNUE5UDRCZ2Z4NUUybUFhVFZhWmZRRURESE1ZVzdKbW1xZmxUQ3JVVTRVOGFqQXFzY1RUZGtoTXhrVWRHMWExUHlEMUlUclZGZm5NMWxiTFphMjRRTFI5MWFta1kvQkJnWExZYU9PcWJsdndibTBpU0NPV3lKVVhQejFQVjltK2Y4NldxbmZuM1dHSmROQTBjbFRkQkE2K09vaWdQTnAwV1ZITlE3QitsN1V5UEV1U2VrTWVVOU5kTEViUi8ydHNCZjR5N3MyV25uOFZoeGxiazlUZ2FQaXQ5MDlVMU5NamVrNGxKU2pobWhQS3c5WG5MQldXYkM5ZUtPYnMxLzFqWjhobWgvbEZOSFovb2JFM0ViTWpxWjErcUNmYVVMTjltaDZmZmpDN2dCbHlkZnV6eHpHc3RVaTBHNldRck13MDVMbXVuMXdHRllJT2hPV1oxeVNUOXJuMEltT2thVzFkekUrYWhFQnA2TTYyM3V6VTlONGhHWUoyanFTZk90VC9RTzRJREl3N0UzTElnWkd2U215cEVJcUpzd3FHU0ZWbkdFRmI1eVIrblVZYUtWeUJyNis0TmtMV2hiMzdsemJ1UUVRMk91TnZYZXJoeUwrQk9EZTZ0aE5lcG9CWTYxSllXYUFDbHdQc3M4UFl0elBYNTVZYTRnYVlzSWtwcC9GZmpPNVR2RXNWWDJPcFNvTmdPY01scDlFSXdvcUl0SlVYNnM5RmNHM3U0U0dHWC91TDl4NDgyZEZyUWxrakF4TTdBMC9JdVZxOTk1QVRGaW8vUzZFMUlzT3hLdmRhNVdWVmZNOTMyL3RjT1BsQ2QxV250UVdrZDB2UTd1VW82WU9lVktGdTM5eTJwSjRJU1RFOGxIQ0E1dDNFeG1EQkwvVWFlbFI3S1FYeEUvT2VManZPYVlNUFd3L3RMcGtsMVg0Q0FnSURtK21nQXdNYTB5SG9pNk1HZVkxQ2NraTFZSzJsNllsVnlnV0pvblFJVXRVNHNOM3RaNk4rNmRrZXdqMU1PQzhaYU5SUVhQRnpUTFZmOTZVZkJNelp0VkZXQW9GT2pxUllOeVdSclRHdHJwWEo5RnJDVzlaZEUxU2hwUXJkalpieXA0U2RaajNrUlQxVWYwU0NLdS93UnBWTkhHeXY1ZG1QbzBnSS9zbXhiTDdBajFPaVdJVkFUd2FqRStHYjRrNHFNRXhzOGN2RG0xRnVlVUt3Zk11UG9aNTZ2QVBsaldoZFVMbnk1aWJXMW1hQ05nMFVieUEvRHg1QlJ6c3cwQzBEbXQ1bWROenZrK3J5bU1MVFZkU0FkaTFOWEFaVDJXL3g1SzhxdHg2WDNaZnpLWTRmUldCbDMxbWh1SmJSK3V6QU5paTVzZmw3ZzhRbXJQczJjUTJabExWYXpoc2pKVzBzSWdrZ1RBZGdyZ0loTndrOEd6ZGRuV094MEZQOWFkSlVZeFZxZno1WEowdkV6NS9oY0UzMXpWbTJWWUZTZEdheTZ6eUQzYnA5eFdvYWRwVUJUOHVPYkFML1dCOGdsZ0sxWjFSWk9QZmliUHJPSUtWQmsxUUY0SEs4bjFTcFdFYytGZmVjQWxzbitWVytYclFLNnRHRys0aTdRSUVzMVhYbEJVWk5aMGZ3dGtsRzZOR292UnVQYnFsd3pMd0tCQWR3Q0k2YjFadzdBQzlJZG9WVnNvV3hGVndMOFZmVHhKbHpmSkc0eFp6YU4zd3NLU2k5Vyt6OUJFL05PeFBJYWswZXI1eDBRck9VQnhFbld1YXM0Q2VOQ1ZIVWZCWmN2R0ViRHNCWmpaQ1JpU0V2aXVrM3IzOXRXdDkrMlpCYWpUb0IxQU9rMFJucnQ0Z2xCRzFnMTlIQ1BoU1ZISlV4eXk4aWduUGh4VzAxK1pMcXdkMHE5L0xBdk9PaFE0b1piOEx6Z29nVlVKSDVPRkdlNWVCa0YxK1dVdWRyeGNQTUxiOW43c2o2Q3hPVXZzVXN4QmRqanl0ZTlicXgzdmVmcVlEY1NGWW5sUnpHSENXQjl2NUFjVlRZWURRR3VUUjZkVmFlSm1JVjBIQkFTWmkxeVUrMjB1UHNSa3dOeURPd2xTMC81SmUxSzlZdFN1dGUwOENRclkzSE9TV2llZG0vdWRpTEpZQVBJeGRXa3k5VDBaRGhwcXlCUFRBOHhkR25nVFoyZlo1VkdqMjVBOHN5TXZHMUQ1M2ZqcFhtN3M5T2oxR2ZGOUJsMnRCbDFyakVBeFg3bkt1UDRpLzF4M2RBN3ZtNG9xcXRtSHArWkUvREhFcXIrUjVZUjkrN0hES3AyUVJXeDFVdmdWMUdDcjJuenJtMHRYdnNvU1J4VS9iVFJZSkhkai9FNzhCQUo0a3NWeG5oYW1WK3hkZTJCOEVDQW9UNGprcW1RdnBtU3JaSzg0Q2pLMnJlVXAxamtNaWU4a2lFaVMxdU4wNzJXeWtQU2F5N3dseWpPQkR5VWg5VU51TjhEVXYwRFNIak5rRmRyUTZkdGdSbGVMVzhRYjJBSlRlSDAxbjRHeSsvUlY3K09mcGpwUC9DT24zRFM2N1dCd0gwa0Z4TmY1dTU4RU5nMWF4eGdwUm9rUE9vb3Y0MmhyNVpXQkgrTGRURC9HMHJsdnVGM2FobFlYSHJNWGtESUNMaWNyTmxqdVdiR04vOW1tQU1Zc0FSb2tTdC9WaFNSUFcvMUQxa2llYi80dFRKUVhsYVdUay9JMVVVQ2hXWXJndEtGZGxMZnZQQ0tFVkU3L0owaklyaEtudDB0L0xJSGJRbSthek9TYUZ4WUlHc3lpc1g0L001UjVWeld4bE0vTE14ampSQXVCOEhrWTRHNjBXR3RBTTFXem1TREdwMld3eEM2a3BqYXQ1WDRKdjNXRWFnQSs3QXNpNjZUS1pDVklCdTlGelROY0FHQlhBZ0ltZWVlbHhtaDMwVktqTjBWL0wySU8rOWY4K2VHdktGYmU0Q2R2ZTh1NGxMd0VXTmRvTEhjV0kvYXRTVjhQaEUrMXBrVlh4NTVDSm9wNWNscXhVOFlXdVZ6bWxRTjkvV3dIMEp5N2dWRzhUa01NYk5CQ0VRdEYxaXFiZGd2aVZzY2o3T2o1UmhDaW41TXZJekEzTmtZdEVlSlRNMUNGWDlFZ3BZU0xoVG52UjNtbE9zbkNVc2FKQW85dVFDUWs5YWV3TUxsK0k5ek5WWnVqQ2hLRlVSc3BaRmNZS0J6aFlucWpBUUxITEVST3JNTm9GQlpheVg5dEIweG1TZzB3WXhtcWlMblB4Tk5BZ1laRVlaUHk4cnNmQTdZSlJHSW9NWWljeWljTGxVTXdQUTFLelNQSHlqYkJBaGdVa1FtSGFFQzV0TmxsUVE2VmdVMjRJazVlcHJ3d3p1YWZVNmM5NVU4RmtVVVByZVVzMUdGWDI1ZTlqTjJJWC83SVlJZHhpeUJ1SGgxdUlEREpBUU9sSTFlL3RUVncrYVZlK2F0elZtUFBhb0FwckQvVlI1V2pPYk1NdEwybWZQa05HRjh4WTU0cUZuK2VNWjFuTExTa3lKN1lFaXZ3SmhWSWJUWnJnNHpqYkFZcnJUOUI0cTFuZFZuUnhyVHF6ZG9ZY3ZZZVBQdVVFdDFUWFNiUFI0U3lmRXRJeGpmY2tHRUc4aFVxZnNKbTlPdVVkNlZNRlZFY2JiaE5QazNnMEE5NnFSU0FDM1gxUHBjNkZwanNvcDFqSFpFcnhaV2wzeVhJVzBsa2VNR3V2bXcrNmNwTU5SN0VJTCs3Z0lUenVhQkFkUmlELzFmOVRsRk5jd2N4NGZCTlNsYlJ2Zy9XK0pCU29lSDRVOFR0QXVib2xRWXU0SXN2bEtWbkZITHFyMnVib252TXRXOUl1QnR4OHR2a25ybnJYOWhncGJMRDVPdUNxUUlpdlUvb2ZWTnBYU2lsMjF3b0RHSjBxNXY5cmRVRExLQ1ZPcTRKbFB0QlhsaVRHN25NSnZJekRTTUNQNVZMaFB5Sjc3aUttNzh1SGpaNkJjQXM0SGFOdFhzZ1o1SFIxb0svZHBtdVJyUk41Rks0T2ZHR2ZZQjhGNk1HS1lVV0lrOXh6UURWOGg2L1EySm40ZzZ2Q1RiaGZlVVJhcWF3MERKT0xDcnA3ZWFOOEN5QkV4RUFObVUwcHQxMGw1ZXQ2RDlPNTlheWY3eEM2cXpHQXlXZTl2eThScFhDOTRBWk1uMHhkZis5ZWs0d0tjd1RsUnBMeCtCVy9yakErdXhvVTRYK016L0ZGazBldnA0TjFLZ2V1V2VCSTdiMlg3K1NpaVlRZFBjb3lnY1paMi9Pd3hka2RBWnRhRTVRNzdpNmJkWDNIVnFER2hGMEcwTWQ5alN6dmg5WDM4NklGRkF3bmpzRVpiSy9qeWNvbTh0N0hVV0g1K25GYW9oMFpTUGoydDVTMGNFNFhRUnhVNHl0S3NpZW11L2I0d1FVVmZWUk1sa2F6YjZrZmtQM0pUL0ZSQ0RoVUYraXVDbUVyYW9GK2NrMVB4dE5mb0tMSU5BVWxMdk4rRkx6UUtOMlJvZmttOWdBa2RuVTZKdmFoQURLL1htMmNTWTZTM2hFMm9STHlQQjFiSHZHZHU5VGd2NGUxVlBIb242SEJNMm9Edmd3Sy9XejU3ZjJWN2VTUm5kV3NYMkdtcGM1VnNmTk5ua3lXWjVScU85VW5jQ0UrakFMRWE5aGRFQmpwRCtiZnAzUjRDck10RThTZ0g4aTRxWk1rcEIvendTTStNL2FISzI1TFNPSVNHQmIrUmlOME9hVVBJKzJxVjQySURvakNJMzhTN1orQ2JlZk1DMGdQUHZrMjRQKy9PWGpRM1o4YW9ua0FWNENzUmsvdVBNMmZ5Z1Jyc2I1Q25lcUYwbXd4TEVFUUFJTEVLN2l1Y1BhT3RlYXV4S0FzaWNsc053WnQwbFdteW5uZHNpVzluWStnMHlUUnJlOVF2NXFtdU9wY216cE5VRnhGeTAzdG5uNFpwWXJqRUsxRWNRNjRNaEIreTVkL0xNZkJCaHE2RndxenBNZDIwVXdYYTdMYjhkS252TWlhMm42dmx1L3FNbE5tYjlaV1I5Ymo5bHl6NnkvMnhpYjlkSC9XWkQrbzBmYmEwWDIwYi9COUFGKzl2QXhaUWthL2Vaa1JlaWo3QTZsVEVueWRxZnBBdVB4enlRNTN1UTlvVFIxOW5ESUdrYXU1UUhKSWhnWDZuV0hPamtxMVlMUTZ6ZjBIZFl3SW12Q1B3aDJqQlpxdklYanRudzN0SlRHTHFwNFhyRzlUV3ZMMXFqT3pXWllxdzRvQlF5UVdUNnBNNlcrbWJJN05IM0t2VkR2Y0JCL2swUmlOYTlpakNGZzMrTm14OGszekhHd1BUYmp3UFFWb3Zpb1NyUm80MGVJVUl5WDhIcVhyWC9PSzJhQmNPN2FYa0c1NTJFeG9hVVExUGNDSjJTcnZwN3VFL1ZiS3J2dmk1c3B0WExwVldiNkZZa0l4dk01ekxPSnVRNnJWNVg5R1FwV01VZDRXWjJUWkR0aWNyeHg0c1U5R2NCenhJaGJ2SnNIellWMmxoVlNsMDJLdnhwMThGWEN6QzR4U0V6dXdiNUFzT016YStxUnQ4dlRWaVNQbEtUbFAyMFJsOThQU3FjR1FkMlY2aGtuQ09CamM5enpBanVnb210UU5IRHJXbGlTc3djdmFIRDZPT0RBNDBYR2RQUzhIdEg3SUhaSXIwSmtPQURsRjFtbGxMK0R3Q3h4SGkwM3l5R2cxN3FnQWd5MkFKU1JYVHA3eDJtZUczdXFnajBDOEtCeUpoT2tSaENFaFV1OTFYUGdLdFRub1FRVFZtTTVvSGsxM0c0bTJJVTJ0SGl3OGtxT3A0UXRIZVpRaThIN29LTjRPVXVSa1hOZ0xONFNsdDd1QUkzdGNDRm54U2hKSlhHa3h4TnBxQmd6eGd3dHZZZEdOQ1JpZGtQMnpURm5BTzFtZUJrYjlTTVlveFg2MzhyTUlieC8zMzBuMGpsdXVzZDY4OExEdHZ4Y01MR1B0MmRLdGpMb2JZM0I2R0RFVFFkMlEwZ2tRMmdHb0tnMnJEK3diZkxTa2NSditZb3dTMXBrbVdkWi9EZXhkWVhnUWtZY2RudEFKM25hdElwUzk5emJpZFJsbVYyL3FKemtVLzVzQXdHV2FCMEVLbkU1TkIrb1Zibm1CbVQyaEx6QTBjejFxU2JnWXdGRTREZEsyRzZ3ZWlEc1VsNXVsVGlRTTVmdmRuRmVXdkcyZmZIRmIrTkVrZnFJV083VllQVkJXQ3JxdDFZUWNIMUZMZjRhOUVJY1JONG9VV3Z2aTQrMWJjMVRMQ0V6cDVHUzRXcFJjTWdSSHhGYVNZdllDRXVPU2xnS1dpS0ROR3dRdW0zTGlCNEJKdGlTNVhwVEpaM3JtY2JBL1BjUGRoU3FqbElHWWRKaGJWeDIrZVNNRUxqaC9hREROK3g0cU8yVWlXMkVZVm1aUTljdm84c0xDSlBjVGhsamxBWUFPT0JRQzJYU2FlQ25mOWFOZzF1SDZMVlZFSUtxSEgzNVlLRzg2OUpmd2R2SkdzK3RoMUkyT2Q5K1BnZTlDS1lybXpzWnJ6RksxamFSaUYwYStJTFZLWkFUekJoOFhEeCtrbkxuNHdKb2NWMk9RNG5SZ0tLanZXQzNaRWpZOWY5YVBLLzV6WDIvRUNDQTlqb0ZlampaOUc4NW1VanJ0cEZCUnpEcDVOMTBWU21sRHYrUkhXdzlkWGZ3QldJcjdNNmdsdWVkT09SOGVGL3RUbEt3R25qWk5NZjRHRmNOS0JueEFLRlNtQ292eStQTnc5TTVWcDZ1YlQrWThTTmM5ZFB4SVoxNEd4TjJ5cVc3bXY5SHFVcHRFRWVoYXdnWFBLTXFubzdlQm4vWTd5RGdRYWZpQkpyczB4eFUrZ05KL24yQnlRb2N3VjFneDRPR2NRd3RvaGNxRmhFaEF6bFdhbU0xTncrT3RhVjJQek1PeCtOTU9ZcFdqSjR1bEZHaXBWRG9JWFVYNkxwNjdSL3FVdDdYdjV0azhpck4yUTFBVVdsVEVKcGhON1dOQ3ArTEljd09yZHNOQ0xsb1hBZjVtNmY1K2h1NUlicElvVlljOXNZblhuK1N3aURZYmpwN1dmc3EyK0kxQUhnNXJwc1BRK0h5L2hqdmMzVHcrbFp5WmlTcGtMN1pNVitsY3hBUlNwc210bmN1L01zVmtEckdraG56TFVwcGpweERxY2VtZDc0ZmtiaEd2dFd6OUdMeUhYNitnQ3JaZ2tZOVhvSXNNc1FQRXlMVEdxZXBOWHNVdmU1MWszS3RyTU5kZHQ4UU8xWlhvL29pb2xHbzhQMTgwcjl1MFBvT1RreXA2QVE4V1ZPYzVobTR0aTlrMU9ZQnQzc0h5RnVRanZtd0V3ZFRtd0IzVFlCcUJJajdma1NSZVRvMUhVYjJMNGFDa21EMWZ3RzVCamZNNGI4dXdTNWphOEYzT25idmU0akx3aUZiOWNYR1d3bDEyZUdoL0pOdDczeDdPeFEyZGtIM0F1b2VUNXlRdG1wVGFnaGxhWUZiU3ZEUkdVd3VkUzh4aVlsd1VicEpzOXlGUjFjVmRiMXlBVE9SNVlON1BHV0pMNDBUKzhCTGlnODhHYmZTZzFTZFp1aXkveFJvdlBwN1E1TDJ2Zk9NSFRzOTBnbXUwb2NBbUhqenQySzVzY3JoSGJSQkV6VVYzOWExL3FPWk5yNlhlMFdSbVNzZlI2cHRaRXRKbW5tWkVjOWF2WmI3bWlsTTFQTmZPMitNRUJ3VW1KN2FuNGdwNVFvMUFEaXA0VGVJakRZR3hzaWxzMWhuaDgxR3pJY1hjVlpUek90SnY0bzg0ajd2a0Y4ZVpkT01pWkJsWFBDd3dxbVlHdVZzeDRJMmt2YUQyMUczVWQ4aVJaZmk0Z2M0VjZDUWVmZGZXdWhheDdac21HeitNMSt6aGFGd2xSei93UG9UWWlrUXN3Z2hYR2Z6Ni9CVzZZZkRyWjNmWG1RWFBrVTc3c3BrZVM4dzlmT1VFTWdFeXdzVWliQXBVWUJQa1EvOWw0OS9UODNtNnZkdVVReSsyYTZSbm1ZbElFSXlOMkxXRktBTkZrWFExREJBYWgveEVoSHpRNCtGKyt0dUU0MjVvRFRCaXRiWklDMlpPbXdLZEVsZ3FaWmtDYllyOVdOd1hONklTaDUvZWF1M0IrQ3BCd1lKdUpLVCtNOHhGQUdQc2R3ckRnd1lVWHVzVzFXcWQvcEViVER5T0ZidjQ1OWYxU2pHMzRncHBVQS9YOFBZbS96NVpvUDN4R3hhTUJnK2FvR3JTYXVyMHV5eDA4Mm1iMHBYbFpneXgvTEF4ZUZxUlcrVml2YmM2Z2VJcG5mbjQ2aUlKRzdnUXpjc0lRRzQ1MnFvMWpDVnBzYlgxaXoyVWU1MW91YlVnaGtpaUhReDgxbVNJR2hkU1hlN1NORWlpQVoyUFlKblIrZ05mWlJaT0g3b05rVEg2b1Q5ZkxEeG5LUTBsemY5aHZmbUNWQmlLcXJTUWxKcGsrdUNReFIzWHRFcUpjYWlRa0tqM0dzUHJSWnFVMnd4U0o1RGRycUc5bnFMdkQwb1d3MDM3OEdtaXR6M3FId01BVDk5dnpnSXhWVUlqLy9NRkNxR0pxSzBLOU0zZGJGTUF0UGVjMWlQRzJxUGEvd2F2a0NEVEV4c1RoSVVqQktycTJwN1k5NVFRejkvWjNWcG9kaU1xZkxPVGIrcDFjblRkNmxXZDlPSS82aXpqeGJjVG05cVJrY2NWenZERFZNQk83SDY1ak55Zko0RUp6cHQ5aDlNWEtvZy93dHJneUJGa2w4WlBqV2pWbXl0Y09iZ01MV1I3KzNhZkx2MDYzMVhLVFMrUHJ0SWJDdGw3RHhtWS9WSTlFN2ZlT2NMZ0oyeXRuN1Q3WjYxUE5xUnRGLzJrR0I0NHhyYlQxL1FoSTMxeVVDcWY3RUtkcjgxaCtoTDd2a3BGZFdOZ0tvRDJmWHlMOFJ2MER1RGZvREtkZkpkV2oyZzE0RW44WUVhS0lNQld0OVhqVEZnai9kMENVUDFJK3lkRlk1OWpHMGMxZzEzek5ZZ1FQWU9ldUFmT0Y1ZGw2ZVdLTm14ajN6UU8vWmNsVGJmQ2hmSUdsSVhjQW4zSHhTZWFUbWVJdnBTZWNnZ25LS0RCbTFDTkRtRmVKeVhQTmlyYnE1MHM5Z0l5bzlVWEttM1lVaEpDZC82a1hjMGMyR1o4QXFmaFkzTGVSUGVIQ3F4d1N0NWFwRDM5TUFqbmxkczh2SG9UdjM1Y004ZUU5U0ZucUI4eUM3TmlJalRWTzY5SkxoQWdKaHhocnc0cTlWSDZNM204c2tRRVRJYUhpckhzQk8zcVRJQ2RsaklIZ0FhR0pxQ2UvYlhpWDJFYmZtUFpFMmlOcm1PVisycUlsdlZMbXI0ZlpLdnljVkhoOEJwK3IyZXdGbnRYeks3ZTFvU0RVejVRZEpxQkI1QnpxZlBrUFJYQ2lsSmdSVFZoaW5mK2lKSEhWTS9hNFZkTUkxbFBQSEViejVBeTlKRlkxeFhjQjRTMWhBd2dXUGhRRzVXc0dOSzRtMjJqQVNRMmhRMnRkbmNvUHYrNDE4RGNiSU5abVl2a0FHZURvQ2lzbXUwK2w4NEtMaXdzaFJEdjBqYUE0eGo3NEhGZC82dXBPY0xKMEpUaHFRcTRBd2FGKys5bVhVck9OS3FvbUdBcVFPR1ZiK0FMUFo4ZHdIU2w0MWhMZlJQQ1FDajFSWGY5amRhV0dIb0VjMStmVDRuYjd6MDhVU2dnVkZDZWZNUlo3Tlh0aGcvWHg0NDA0eURsNDFsd0E4Z1F2RlE3SFk2ZTAyZFhPbDFURDg2NUliN21nNnJ3dzh0WDgra3ZKU2F4MWoxM1QxNEI3U1pDY1RpcGl3NzFCdFh0TjRseExkQWQyQk5hWk5VOVVFWDl2TDhjZ2RkQlJ1RW5PL0Y0MVZHZC8wQkZET2ZLWW9IbEhndTRyZ3pRVHFzYmZyaGo4UEhKNWxEZWpuSWlKc3owM0p2eFlud3NCOTh1bGtVZElQTGhuc1I3VUVEb0NXYVd0N0IwNUk3cU9tZ3VOSllpa0tISHA2dmVMcVgzNXR5bzhCemFXVk9hTWdScE1CSFFkU3BGc0owWVU5cUlNK3FkdjVXWEQwVkw0MW51YURtNXRnUStIWWFOUmVwTHlVdWZTNGZIMGl1dCt4ZkYrcDZoZmh3eTdGZ3BXSkZqOCtKemZ6NzVBb0NibDRuUmZ4T1YybENmRDA4VXVDREZoSHpJTlU0VXZlSGRqNWRNTkNnelFwRmptVDRaNjZSMUlGWk1UaEhhMzV1dWEvclVCUG90Ums0VG5RSGtuVVRVTzJ1U3BySEZRdEZHL24zVHV0eFBYeDgwZjhucmszSE1vU2hWWDc2d2QwMEc2Qlo1U1RrQkYxTWJxdGgyNUNvakpyaDA3Zko0NE9JNlVyT092dGZaVFFYYVlMNmI3K1hVTmNaWGRjS0Yyd0NJOXRuQjJ3WStQOTRuOVlMdWtIVUZNZEVnbmx5QUJ1QWlKcGNhNzEwR0RnUFN1R0lpdktUWFhITk1IQ0kzUGM5ZS9tZGNaSGZ3SHJ6cEZUek5FWFB6NHVyMmdiN0tVQ0N6bW1BRnpTSjdsSm5xcnhJZHAzSXg0TjM3QlYrZVZRbnBoT2l2eDNGSDkveTlDNHhtTmFkYjBmK2Z4RjlucFg0N0dNRVNSck1Vd3NkM2pLb0xDZEw5TElDSUpJeUFoK21tU3o2V3JSYm5mWkRnanpKMk54bENHc21oR0hNUkJNVkk2QVREeXZycy93QzBtZFowZVpYSEs0bWxtWVMrZHRXOWtya3p1dEhTZTgrNlV0REpYcS8zVkxydmVDNGxKWG1TbTVGc1JmK25Db0ZDNWdtc2JVMDYzcVNEUktyY0xaVjFDODJiM2x0TEcyUE5oSVJ1cnFIUzdZQkgxNGQwaXJIdFNVeUl3R2NmUEIvMVdZZkpYb3FHam5kMW1tZXJGOGN0ZWYyNHRvRTdpRml5RlRuTVFyZmhONFlTcHpkQ3VBZEZicnpiWUs0U01DNXNmMGl3TzFsS1NyK1FhZVFneEFQS0czaUVnck1GeTZIQlRQLzJRbUVKbzFyYTc5cWoxTnMzeGFaTUp4RlYveU9pOFNwNFlKWURJOHVGWWQrMFFqNnF2YjRxSHVSZytHMnlNUGpnZGJwdVdUQmg2NEVTYlppMEUvZkNaMDQ5K2xINEJOallmc014ZWVRUlZucXhqY3EvbmxxUHZjZTJ0MlVDb2xwUjFaOFRpdk55SmN6WkF5ZjVVUjRlUkkzN0lsV2xzcWtXdW9HZVFWekhzZlNKQU16TWVFOVFMT2ljRVpreWV2RHhDM1NEc3JlZ2xFR05ZMGhPcCs5VW0yQjlWQVVYRWt1UkpDSnduR2I1Nk9KSWYrQ05kZHpmSFhrZWptTy9SbVhxSXNrVk5hVlA4NWpVa0NPOHF1Sm5Cc3JRSFRmTTNzc1hPUmErYnFjK0hiYnRZMnhlSTRpYm1JQVd0QTBFNEZCQm1SbDNvOXp1ekZqT1c5VmFVeE1mT0VUWnZ2SW5yM2dUSnBPNHhSNTBnTWdNUmY4dmtZTHpvaW03MHRUZnFwaFJhV2Z4bjhNcVNGQ1czcGRscU1sS0FLd3dRT2NYOVhzNXdPSTlvTWtJUlFEelNjd1pBTUd0TTgydytTTDF6WkZKUWkxUHN3c0ZWVzVvbTVZY1dxNzEzUGIyR0RZd3cxT2FGNU5CSmwwd3JESnp6OFp6U1VIVjhzRE45K0s5Y3FZenVYSGpjNHM3YnV6UlNOWlhUZXNaL2U0MldLNysvT1VUby9taWMvc2JqdDlBTzNYNmhrWHUxOXFYZFJHNVFjQ2lHaG00dmtXMFN4MGhIWjJVbE5jeEtrZmdFcU5DQitoaW9rVVJwbnA5U3Q3NWtmbnY4RVkyNTlSVUw3UnNqMGJTMkN0MVFqVFRFWHRacHhkN2JGVUxsRXRWeU1HMGxoR3hpM3hyVXNFUVhVQ283eDIrR3pyVmtFSS9yNG0yRElEcVVnUTR6dWxjQ1Bldjczc0VPOVV2UGhPTU5wN2FmQzlkN25lc0o5RVBYempPWFlsWHo1TXNuMmhGZnp2S0NLQUJSc085WDUvT1JOSk9EM00wM3Z6NkxxbkRKMCtiVXMyVDBycklHOHFEeCszdlR3b0R3QThBWW1DMlVzdUtrUGVhS0hqSVIrOFhrMHE3cXNRNXZkekdEN0g2U3JUMUg1dHkzL0VPQVl2cTJVMnlhbWJ0R0xCdm1OaVNERG8vUldwbS84UFlSbEJhNTdwOHBtajdUV2ZjMk1HdE96aGtrZHk4Tk9PemhROFVBN2RqQmh3TUJMa2I1T05BeTBZWGd6dmowWElqLzFpcmR0SkhRc29HNHloaSt3cEJrUWlEdkdmZEJsY1FldTBoRzVDcUFVdmtNSTlsYm5sVktYTXJ5U1NTUHNsd2xnKysySmlzZnNuV3prc1hvbDVDKzZTUHZRVXdrTjRqTTV0NVZwT3FMa1VLNFZUOUl6V2x5ZHBMOUpBNUQrRTI0cC9JQklsaXEvV2ZNR2tuUzBZM1VhMFAyZS9aU2VwVDJ6LzFYQllmZk4rUUY0QzZCRTNuZFlnVGRMWU1ibDBVbmluSml2RkgxZmpXSFhQdk44N1VmV3hjOVBPcSsydTQ1UHYxS2NMeVp3aGd3d2JiYllMR1RRbE5WNVdFemJtWGI2bXlXd1pZRkk1WExZTEEwSTdyRFdLbVAvZDJNNFJzcm9pYkFqQmZ4ZHVwMGdUS0pjTWEvMFY2MUIyLzhyckFCeWVkb0piZFVPdTZUT0UrWklja0pzU2w1UkJ6R1Zxa3FDU25Fc0JibGpSZklDb0ZtaGFwMWo3dUZPYkxXdkxWQmxZK0dYdWxjNUw3TGRvUFRIMVRoeFZ1QTRVb01BaHkzbWxodmlyRzd3ZGhsVkVGYnRJK3dpcFNNdUhyTFh0RkFxdSsyVjdUVFd5RXdtaUNJRzlha1ExbzJ6QmsyV2R4MytVcmlXM1o5UTVRaDJJUjd2cWEySUw2TUVpbXBrYW5XYVpWZHNadWRZTXJRSGRielVjRU9CRDFDRTBYN0FnVWRYckEwazVQeGduSjFES0h0MTBxVGZSeVdwNjBMSGJmZ09IWUx4ZGkvMFgySG5QbkdnbEZoeFNFZ1BGRkRvckNrTTdSSFpISUdWNnJJMFNWU3lZN2t5WDZNc2Nac0s5ei9NV29BR3lkMU0wYnd5ME5GQkV5d3B1aW5MdjFBZ0hjK2wvYml5VTV6YkV2MVh5Vy9lREloTmZFb1Z6YXVvUjA4TXI1MnZ2VzdzeGh0MllURk03RUZJSzZNODhaeEc4UU40dEVIVmJOQ1dFV1ZKYXFWeTF3UmZhQmNNRW1vNGFoQ3A0dXA0bnhOdndXbElQOWZneW81WDNJWThQTElzcVIwV1hucytobFhPVmNQSVRSN0lBcUZ1dmthc3hQRVRPR21kdHpCZ0U1dWdSWTVjdmwzTUpNell3MnFoYVN5eTdlYmNJVTNmbjAxRmZSSGx0NGtad0d2Y2FrQmJZQmw3WFJqRGZJSjNodjRXMmkzTTJNbDd4VDhUQXpORGJ3Snd3dUM3bERFcm1NWHF5VmlkRC96SDVlWkdwQ0VpWm13SmNxNC9xY0dGMHg1cUxQVU9NTko5dUlJUms1eFFVU2RRaVdFNXgwdFZRa24weEw3aVp1WHhPU21INkdzaDVWaUJUcG42WjhoQUpkZlA2cC91YkhTSGhqOHNnODBUTXFSOGJ5b01XcWJPclR3QXlHTkhjV2dTUnBvSlhCUnRrQzVza3BaejFDeHhUckNUalRsYUtFaEgrc2M5ZTdUZ1M5SDFEY3RCMGJDTmVUVUpYMVN4bGU0bGcrNmxIVTJRQWlKdTVCd2xTZFNCT0JXa2IyL0pzZWRxUnNXYzdQOG9YZWkrZjg2eHVHcFd4aUVCenV2aGp0MlUrek5FTmR4WW5YSnB5dS9BTlN2MDIydm9EdkJ1V0QxNkZ3bGhZcWoxeHFxNFN0NlNOQWxXVWY5c3lBamdVcDNta0J4RllPZ3Nvd3duOTJSdGgzeUZkZVIwR1NKVHd0QldGMkltNXZrSWw2VjZrTVgzd3hBZ1lMeVZ0M2QrYW9Halhhd1JCNFQwbDNPcFAyOTBaSW1QbEVFa290aGpnTnVFSFQvZ3BlajR6Ui9hODhLei9wUnFuZnpsbzkrWE93TnMrbE5pVm9iek81Mkd2eDJ3QURJQk5Kc3cyb1krVXV0SjNmZFZnMEVsdnE5bitjY1B2TENmLzNJdEtFd1RlMFhoWXRySFNEVjRnalduVjUyaGViUnF0LzlxckQ2TXgwZG53bGdqYUZvcVlYcnNMNnd3R0RTOTNpMEJ3M3JhK3JJYUpTSG40UDVYMUo4QnNtYUxCR2U0NHJ4UHBYM21QZkhmakFNRVUvWW1EOWZxU2FWWEJXaFNOTkRyMnk4UHNOUXRKaFlzT3Y1ZWFQclU5VWNvUzhJL2pHcDdhdEFxeGxtVVJQNmRYNlRISVBDbVJqSWdUOGJFemlaY1lkNy9XL0lKNjZNenJnV2RFclYxa1JFTm9abzAxQUh5bUV0SFpiay81NmtLZ2V5cTZaVDVVQVlPaUFqWkhudEdhaFR5OXI5b2NvZnNadkUxNDQ2WWFRME5oeFdQNFIxM1RHM0JITzhJaWNDb3lrcE1nNHEyR1BmSVc3K1F0YUhMYTNlWGxoWEx5Uk1NYVd6aG5WOVV3dU5uUkZvV3ZQNEYyZy9PQ1RDY003WUtpMHZoaFhVbEdzUWtTSy9yaTRyNGw2UmxGZ21sRTdkc2pnb2F4QVVBVC9XOWNHTkJoM1BwNkRmUE1WS2xxQXNBQ2k1dDFSMGx1b0puaFFuM2l1enVvTytHWkhRbDVwTFpHMTFlenl0V0NZV3pYSVJVb0ZxaThZVmFLa041ZTRuVzR2M0VKbnJEcVRCYkpYMi90MU1aOElpelVkU0xKRitlUUdJTlRJdkxxRXdvM1pMTEl1cWp4eWV1b0hPREw1eGVZTFoyZWtGam9DUkxqRXNDbzR6bFl5Y3EwMC9WRW5XRFE5MTdkOFdFbkZOT1ZWUWs5ZlZSUTQveVhmeEYxNkdtUHhqYm1jZVh0ZU5oWE9kVlMzdHdvSERBVWJ1SDM1L1dEY3BVdDJsRytqS25DMVdOQ21uc0lzR2ZZZzJubEN3R0JGc214MTN2bjN3TnVycDNGR2g5T1hWYzVHSGJZcldXZG5Nem9xSWxDY2pSYTBERmFqYWd5bTRTZm93NFpjc0wveGhMTTlGbkJmMlYzWWxrOTlod1lRdzhTdXRIZ0lLOGFQUi9ZZU9oRERCMnVDUjkyWkY0ZmxLNXJnYjhTbS92SGVLZGhkT1lOYVB2STBGQndjYnZvd25USm9qc2NUeVdBL2tua2hsdy9QdUsrRXdDVWxWV1FKUW9Wem9rY0c3T1RjUk1hS1pkYm1zMmNmYnlrTXptRzI1bzE2cjVKNmpQdlBiWjZhUHc1MmF6OUFma3BGUGxYQUhJa3BNN3Fra1BiMGRWTEdxSVZMNHcydm5vOTZVSUZjWEFNdkhuUXBkUjB6Y2tVNEhoYi9kVjEwUEZqNTEyQ2g2QVEyZlc5dkRkK2syY1JXaXVIaGpvYXNLdmRKdEhoMEI1V0VSYTFab0FmdjZCM0Q0SGVDQktOcnQrZnBiNzZEMDFqMUM0MXRzRDFlWVlPcHlwUlc5aXhtenJZdXBFcnhrVUpTTEFUTnN5VXBVV01Pak5vZjBDc3o4MzB4bktyUlUyMkRXNFlXK2tGcyt3WU8xdTBwSmpWbDR1d3gxSUtYWkgxYmtkcjZzZ2hZelV6M2NFeXVXcTV3bHlET3ZSbmh3MXMwZ3I4ZXpoTTc0eVpKcThPK1ZETE1Ua3lobW5UcEQ3RTZMWC96MWQ4TDk0c2g0QVlyV1craG5PTG9meEl5VzNscnEzK1JlUnRGeXFLR3Zya25PdC93ZElaQmFYZWgyK2dmNXZJaUQzTFJYMnNkbnRZZ2xFN0pRMDlEK2RVSTY2TDhCakpzVGMzbjhQb2hvb3dLMUdLVThDdUpRQmhIWnhBSTBCOW5tNTIvcm1PME9DQTJtenI2ZEFPbUVyckRVa2QveFpiaUQwV081aXd0SnRidnI1T3lmOGZraUN5cm5ScUJNZ21SNnNaK1BIYm4zUzRHMjkvS2xiWXR6bC93NWVQN0U1ejNhUXN0YkdHbFJLQXpVRUtnWSt1T2Y2RlpiL0ZUREhqSmd5eFBLZnN2V281TE1zbmNjQWlNMCs0R0J6eHEvMVpUbTBRLzNYenpLMStDNGpPZFY1WXp5Sy9nTmZaNWYrZkFISWM5KzBxSDRSMUNKZEhhVWtlZ2sreTlJd09TUVNqazFsNDhCL1pTaEJlL2lJQThobDJabVRlc0NYY0NWYWladSt3MjhDdHVBV28rNWZHT3Z0VWlNUkwweFJBb3M5RUkvZzlJRENxcndrMmlCamJzbnFWNkRKWVZCaW9FS0F0K1NzV1Roa2lqVytyMUtGQ21sN3FzTkZxSlY1V0M4My9FV3JONWZrMWR2Qitqb0psMzdZUmZqY0xkbEpYa1RrQWM0ZVQwVHNseVhHNWFRamhkWHAvdk9yejZyUzdHOVRvb1NYQ3hJeWwrOS9OTmxnSVNNSExET1p3VFNHQnk4YzI5OHdmVnNuWW5YVjByQXN0bGxvajBOQThYcXFGYXpvdUtnSEl0eCtNQVh2ZmszRFdHNmFXQnVpR1FwS04vNWo2SHVhU1ZLSTF3QXVpeGtRSFJDaXQ2bzZtbE5nanJiWW9ySDN5RC9DSkpXZFlHd2RuU2FUTVFWY2NpVDNxZ2FXeC9UaTU1U1I3MjV0RFpXcm96NVZaRHUvZ0h3ZUZKb0ZPY0FzMDFCclNiTDNodHkwTDQ1KzZOaWI4NmJBL0ZVUUZZQlBlYVBLTURTMWJCdzRxOTllMnl3UUJkc2dVKzM4bnNGdDY4aVVkdWh6cEYwU0dNSVcvUGNkUDkyZC9kNzVsSXg1amR4Q2xYUEVwdkw2dlZUYnpQaDVleGpScGNIeHZ3MDdFamFQanRIQSt4ZVg2RmVpb25IUzNSUWN4NWd3SGcvVWFuUjRsTnJ4M2lheFNERi9ISTZzQ1hudStlSm5oc3lZK21CZmhpS2xvaG15U29POG40UVU2VFRSTXFxcW5mcmFDdWxqOWgzejQwaklRT2lHNm9Nb2lHN3Z4UHg0RlppbkRxWHpWbWlsaTc2OWNabVV5bHZXMTB6Qm5hSFpOYkdjQW5xVlkzK0wyOWRFcmFVOU0yVmFOUDJsUGJCUnQ2U2NLNHhLdmZZTmVOQzZWY1dlSHRpcjhyQi9FSytZV0lveWJZVDZZMTNKZmxKYTJCcUY3OGxoRjNoUWxlaFhjSXpvVkNieXZLSFkyUVpaUWwyditTTHdoZ2hJNThtL2dQNFhXNUhOay85NGVPZ21ncEtyQm9sbjFlRWg2Ym10R0FoTkFya09aTFdEWXZoTFdTWjArZjdsT3llZm5GMm01dVlQaEhtTkRWMFBKZ3BFOFRHTHB3L0FrUmZuSXhjd3V5WkN6ZEhseWY2aERaQWVRalZKSUdGTWpXenBKM1Y0R0dqQWZ2c3VzLzFoaE9BOE5VRkR0WFhjOTIzZlhiY2NaZHNMb2N4RDV0YW5Daml3cjlqREpIYmVmZEtJUUplc2JGZkxZNGJJYnk0Q0d1SWV3aVZQNzdtWkNoQ3ZMMy9LRU1LbUcvTXB2Yk5oVWRuRmdJVkZVMmRsSmRTdVZwMS91VzhnTFJ2aWJ2bGtZTHAvQmtLSjFQeDVpNVR3cjAxeDc1M3NMdTB1c2x5dnZ5eEJneVBocmd1N3NERW9uTHlZVjJtWk12TVFhQ0gyN25wYmo1ZU9jTW1WVmo0T2pnSmNFZ3JKMVN2NURQY0hrODdNZWFSRlNQZDdBejQ0SC8zZS9QT09Qbjk1bU9UVnZGd09kd2NOZStWUjZ5cmZLRkcyZ2ExV3VTSXYxcTZtdWs3aCtFb2p1dk41VVhzZEQzN3E4UXNxTG1rQ0hUNlduaUJNeUcvM28yTmZQVkkwTmh2ZVk3cFpKTnIrVnU3SGtvNHFKa2VEbmhVTDNhTnNTUTBpRVAxM1E4UHlUQnZ3VHJkbDQvSTVYSUY1cW5qRnVTeHBaNkZFc1BoMFJ5NFJFMVJxbE5GMS9IVTQxbWJkU1AzVnpyKzNhMzg2cmFOUzgzUFpGN3hObGdZMzBYNTlwZ1JVRVVhcEVYdlpaYkZqL1orYXcvQmJlNm9qaCtJNWhZU0VwQnVGM3BRclB4QXEraUFsQldEQm1mVUx6MG1VT0tSNHpPRm1QK3BKNzFicjB4anFyL0hKckVsNWE0Z2FKUE5MQVV0S0loU09rbk9GT2U4M0hHOE5oTmw5cXphVzZQSnVmYzcwanlXR25FSnRQeVBla3o2RG5zTHRtcnl1Tm1lK21ock5WZ2hBa0tvK1ZseHFDcUlTSnVBdDVrRGxmZUQwSGUyOVlIL1RiUGcvL2hNanVTODlNV01IVHFYZC9oZk1Ubkp5ZUhwcWh5TmU0VzBUQW43TjhUQVd1UnpWdUNzaGNjMlpZYXFZMXgxdkFHc1BHZDdYN3R0S3U3WmpLTnQ1a051YXdsT0kzVnFJN1VkTkhnczZqVzl1Z1U5VjhYN2dLYnBTN2NvTWMwaGZneXhGUHZpT0FSbVJrMzBrVUFCclZ0MWdhbXZWUFJzRUZUWWRBaGQva0dnQWl3RndzcjJma0hZNlUzRTg5aDdtT1M0c3c1eVRTSmF2eWRmQ0pnTGJjdlg1dDI0eEd0R2FzNnNLZkFaMjhpZUUxT25ZTXp3OU5CaVZOZjF2aGZ4b0NjWDRnOGgyTkRYMWhqREx4WnNRK29wazd2c2U2ZVNPbDhLalM1Vy9GbzBtNi9OMkcvZHBhQXRpUVBHTGFNcGlYZFVoZENQSmxXREk3aFptM2JYUW8zek1udnd0djlGNkViVTBvaXdudVQ1MFF3aFB5VWpGOXFnUzBUSU9hL2pRYWNZSFNzdWlETisvSFdXRmFaUGVHUTJvR2FpaHZSRnBOWU5WdU50OUxYeWhOWTBmMFFwaExXeDZXSzZWRUh2cytMRkRIYkk5ck9VQXBjM0ZEU3prSmVPVEgrZlA1bGlOM09zcTM1cU4vY0l0NVJ6UTJoVTNaNy9odHp6Q2hPM2RucU1wOVZDRGw4cmN6OTFhbXpJZVpkR3BDdUxKZ0UvVWZqTVp4NnBxSi9hL1dkM1BMRkpwd3RUUWFuV2VoUlJRUFoyZzhvNWVJN1U0VVFQeGFKY1ZOa3NvSDlHL09hcGRxOWwvTHNsQjJqQ0xWODU2bloxbVlNR2xBSmtVK2dac2RxWU1LbjRpdHBIWWlVb25JdUVIdWRRYitVY2xITDgzSXk0d3creVFSazFic0szSFVlK0h0NmJOOXZtQmhrWXRnTmVUYlJobE9kRHRNYmQ5bitodzFoVXdnNFFLbldjWXFmbWhCeGp0YnFSRmVvQUJMVnpwV2E0dkRzd3pEK1krMXVtQVVKN29vZ1VvU0x6WlAxdWhGYThnVkROUXJWYVZ4aHM3TTUzNGpzR2VkaEhkK3gwdzNqY3poWTd6NVVvRjZBVGgxZjl6NmxiSWd1c3VVWCt1ZXp5Mlh6N0VHR0tYM2szRzY2S3Y4MEJ4L0c2bUJxZXI5QVBjbFk0aU1ieFVJUVFjSXZrL0plc1libFJlMWFKTGhUZTF5OGZ5QXZBQ2VvYXowdlk1YjdQaEFuZ0ZGSHFRQ3F4MWNpbHJRM0FWTDAydUF0VG02QXdmZTl3UlM2VXVzTVpycjFBU0NudjBYMUc1b3B5WkYrVWpLTXVqcWNSZkptaFFpb0VVTzdZay9uVlFwNkdyZTduWDhOT0tTVlNJeE8ydmFJcHU3cXFHNlJ3TDJycXVxalU0czJUTGU1ZzByOTJIZENyaDlEeG5sUkNvdmJQc2lsOFRDN2xKQkpBcThYLzBLVkJFck5CSFVNMDZsRFFaaXJ4enVPb0hWMDVINDMvakNOR1lWd2srNGI5MTZqeFM2Zk9pemNGM1NYd1RrdUwzQisxSWE0a2ExM1NEQlcranBGeDl4UlFvYmt4NnM1aGhwSm5TZ2lPVnhKSEJtNHhTb2MyVjNtUHpIL1M0S3hUdzdxVENESE8zdm9COHBvOWFXSUp6VjQ5S0o1VlVwaG9sLzJMNEVZdlNxOU1EczlnZWVPQ2VBZThhbHJWbSsvOUFTT0ZOMFBwRmJBRkFaY3ZUOUl5eGRUSXRPMzNkME4yNVJ4VHJ0dWl5b1JjNWh4dnVHbXhBRCtQaE1sVXRBOXp0V1JDazVGTCs5Z1NQUy9MOWkwUHRHbUxCOXBaTEg1TGtWT3UwcFpObEtYZzhGNHB4dk5wU1lEQUMwNllBd1hvUDMzQ1g1aW5abC9oRWlEdVl3V3Q2Rk5EN2wyK0g2SUZmSHJta3VmZTRPdWZnZFI3a2lud1B0Yjlyd2NMREt6YTBMN2tDbFh5K0lzK0pBK29oNEQ2T2lnR2E4eWRxKy92MWZDb2hOUy91STFHMEhKN0V2aFdhVGw5Y2wzY3hwS1NLUS9NUWJ6cWJUN21SWmhpZlVhU0ZhT1BhOEFLaE1xUlFVMHgzTGZmVy9EV0hFUUJheENkV3RGSTNqYlBxRUtncTFsZGFuM0VKdUFTK2pMUWlVR2ppdTlXTElvMVo0ZlYzTHd3TzdjMlpnRW9YenlXcVNJZDI4ZXlsV1FLWG1pN1J0S1FzSEszbFhqOGppZ015VEExOFVvaG1aMStzd3Q0YU1uRS80S0Jyam5HSTZTdkFoTEw0WGFjT3cvcVBrSmFXS2xXZVdsREszRVlMS0ZaMVN5NkI3czVwcWJuNlpWK3h4ZU84VlgrV1UybjJOQldMeDg0R1FYTUVGbnJrOTlWRE5sb0paZFhLRC90Vm83Zko2SU11SExxNGgraVVTb09rc2ZuMjNZSkZybWZTbFNZbnFOaGI5MmNyYW5nMHY4N2p2R3ZWT2l1UWN3WlQ3TXBtU2N3TDdnVDRwdjZRLzJmMXFwMGRaSzFJNFNrNFVvM1VpVjh5R3VIZ1ZFS1JCRFZ2V3NQbVNUWnFRRFFCejYxaVlGU05TR0FvYnU3Uys3SWVJcWNaTWhMVkg4eldHL25LL3FDVFNlRU4ydU03YUVzbEpuUTQzMWJPVDRGdGc2ZXFUWExRSnNuMmJhcXAzYlc4SFlSMzhHVGJidW9ia0NQcUFWWU5OZ3R6Ymk1dDZLL3laM0dXcHd1cWpxTGNtbWE2NTNBbWJEMlM1dmhTSVZ1TlI2NFZzSXFrWEI2a3JmcVdRYW9GeFVIdkJzdytZUDJmb2RNZVl6Zmc0SEtOMVNaTFBMeEV1VWZNV2I4SmVqcXJxWjNIVkgzZVFLUFFaYTE2SXQ0V3hHVTNhSTc0VDErQmVTQlp2TFQxd2tDN2Z5eCs4RFVRVXArNFBEaEdjYU1lVExHMWNhbGJ3b3Mxd2JybmVSUUh0MEljc1BRL0tZL3IwRkJCYnBHbU9KaFM2cGVWTG44bmZDNDEyc0d4RTFtOVFHTmt6TDdRamZKbkc0NDNyZG9FYm9yRzZaNmc5dzVoNTRBVUhSemJGNmVLSWxvYmFDSzhORFJKMFZxbXVRc0I0eE9mM2pHaUtrZ0w0YUxNeE1lM0dnR1lQQi8wVDZWQmtuUlNDUThBaENzUlFBbG9PR25MNnRyOFR6UEVwemZhZ294aUYxZFB5NGpUVExpeU9WZ2NXUHNTNWIvK0Z4ZC9rVVkxWkxveGwzOERodUJyanhGRVBYZnFXUk5XQ1VvMm5kWlBRalBRYmRaMHZVZ1IzbFBFaWJERHdzb2NWaWU3a1lKcXVWbWl4UzQ2UzhHSFgvWkI0bWlYZGM4TGROdFliY3BDWm1mZkdtOEZjT2FheDd2RXY0cS84cEpIclNXVWgrK1NHV3hBMWF3TVhIYkNVL3dyY1p2Sll4d1QwZXAwMXJZR256R05iT3RHYjRhMjJYMGpmVk1jbmM0TGU1OXpENWFoWXVvdGRUWk5MQTFkMk9yRFpRUy9pWEpsY3J6cTRFT0FMcS9yQ2E0d0JHL2ZtK1FzMGxyVnAvbEVUWEVWenJjZmwxUUUwYWcxZVFQY25mYUd4c2pnb2hSUElqSDErc0c5c1YvQTkwN0tDMGw4NFg2bG9JNjF1WTNPekJxMDRwb2J6ZHV1TWtwUTlDVnEzb1J4aHdQR1h2UUgzV0tEU0NoNVZpajRrRTlpWFlleTRkSzlKZTVMTExaVUFrYUNEOERwWkJiWE8vY2hpZkMrK1JSZ2xPQ1NhMGIxUnJKNzNzbys2UDlMQmxmdzNnaW1pUitqNHhZaC9QeUZLNC91dzU0UndwMVAyaHpKMjB3MDlwNGVEV0wvV0c5UENYbHh6YjNWNGErUE11ZGVUNTEwRGRySWY0VmdXbGlzQTVlSDBhcmswbWpXWmZpU1l6NVpGVnNvNEFRUXEveTNmWFg4UjExQnhKcm8rK1FjSkJuQ05maWZSRW8xeWRlb01sdnI0SVJ5VjZIU045S3AxazJkamlwL1h1QU1zQkJNTXh6bWkxSHFrcGJYdU1TN2swMFpMNWdMb2ljemhZc1RjRCtOZmFFTTFka3FLNHBDa3ltRldCNEJEN2lVeXJRWURNam9mL2wvcFVhZG1FWVdKS1FMaG1pZlE3RnAvQkFlSzJtQWJVRHBYQzFMWUFIb016RWxCenFYZjR5czVna2QvQnNraHRSN3JST1FDQ3UzWFNXaU1qRGM0bWVZVGN6c0w5UEk5WlpLR3dVWTRVVTR6c2E4aVNrWDFHdXQwSVZvOFRGU3BZS2haTlNnQTVmT3MxY2VzV09UNjZRRzJWbGthOXY3R0d3T2hKaWlkcmdXZHM2a1NMZHpwSnlseFQvVkVMVTZRUUhVeEl1K01lN0RBVnVTQ3YweFhKV3ZHeUNCekI2ektzVHJYV0xwVWkvRzJjZGRDQUoraC9Gb08vZlYxT3ErYnI4ZnhUTEhrUHBPcVc4U3BzTmp5eEo5MzFNV3VpYkdhSmhJWVorWjcyQ1Vmd0l0ajJKdmxmWDJMT0tDR1pEYXY0b3VTQ1d0VWl2VE1ZeFR2ZWZhY0N1NzYrcjdPVmdIdi85YXh6eUlWRFNwSnpiVjlySkYzRmhUUU56a3lOQWpzamJSMGdXQ3pSNkNNN1czeUpWUHpiLzM4SmJQcEg3elVDMW9oNWJjRW0zdUptMkt1d251VmI3eGl4R1ZqeW1SY0drQ3htWk5LTElJaTMzZDlIRzllZDIwbFIxWHB2ZEd2cWN5RkRwME51TTBodG9vMHplRkx0ZnRkd0lpLzJmS3k1SnlwbW1FV1c1RUI1Slg1K3lOQXRMSHdkTWhOQ0FDSUlFNGoxSUlRRGJaMXp6VDdUNnUycWJOQ01SalRucnZpaWlmN0tCMDJuSFVLdUJFcWNsWHlIcXhqNDZYbkhIQ3hYaTRHWENaeEQ3MTFuM2JGaUJyMm1uQXVyVHovdFBsSUxvbVpTYWF6bEZTbmRrOWJ1aFRBOVRnZzR5TnF0YVpwdVVVWnBTV09iRE1HejZDRjNqY3dQdkY0TEUvN2I3MXpWU255bElLUVpkQXJEc3ZjenAxSFZrSW1IMGk2aTdJRk5PdENMTE5lTWdrbnFMTitJR2hmQnpzRmxEVHljTE5TSG83NEI0YlFwTXNUamxVRUI5UW5WRnJXYkJYYzNnZW9BOGRrK2RRajFISDRraFM2c28rd3FuSkUxT0I1WmhpWGoyRkphZXJTY3BmNG5oWERIcW8zSDVzVkQ0ZHp2OFcwV203TTRGeDNKaXNQU01URGs3eG1iMjlhQVBpdU9mc2xHUTBPdzlJZTlKTFcyWTR2clhoS3JuY1JBakZRNXhjd2pib3cweGpJVXJYVkFIRXFST1lEVGZGekZjL01DTktWK3hidnpQU0dtYmdQdEdSVmdtaVpjdlNiZXVRUUduWkV5RGltZWZLRWViMjhZZG5NMldKSVBGRytJQWpkYmJydjM3SUdPMjd4OUdvMFJVVlQyZTh0SXpSR1QxejBvdmlLWnJhNHhaRDRJSDArUWpXMVBkbCtrZkpUYVVhaUgxSmtnMFlQRVpsY0V1OStxOWx2R2hkK2VMK0xRam1RRVR4T0tpdGd4M2V2WWVtMGU2bk54ZkQrM3VvTEdRS1hEb2JCMUsrMlpGODluMVg3SWhjUkJsbXRCRDRObEFOZFVDOVVHNkM0SVZWa2dpbmVsMzMyYnFQSlV4cjJiRjljNTF0a2E2S2dCRVpPNWkxSkJ0Z2dTczRpZ1JJOE01WnpjbWRwbWt6ZnN4N0U5UWlWRnpud1F2S1M1UzM3QWpzK1FOc0hoaVgzdG1jdXhWYndESE9KRDdoT1NGdTA5Qk5HMUFTaEhrK2xacmhqRWJhS1JQNUZiOW5WZkE4UjFYbjJ3SzRaSUt5UGRaRnRvbmxxVTd3dlVIcWtlY2ZNK01TYlphRnVOT0FWRzJKK2xOanZuaGFLUG1jdHk3M09yWGFxTFR1WXM0a3VHeHJIeTBueDFtVVhEemNSd0N2T3JjLzlUdDJwOGloYzk1UTFyQzFmOE44cWNBVmo3RGVSam8xUXEzaHJ4Ulk2RFNXWm9ZYTZ4OWsyaTUyaU0wMVFZcFhTdUlYSEtYYWtOR3FhVkFYUmpvNjVuRC9DbWsyaExhUHZKSFc5dXZGM1RRbm92MzloYlIzbXVJVzF0bVcxU2hkS3l0blQzS0JaM3pySTJpWjZwNUlFbzhBeStpNFhQYjIwWE9HdU1QMnBKbWlhblVoLzMvSGFoQm1IdmZiVzlUb3h2cjhKNlVCUVhDZUoxaXVLVVppejZobzNmVDJ6VG5yNmE3S3BHNmFtcGJlQlJFSzBJKzl0OHR1SmwzV1VXWkJYbWdhc1U3ak5yS2ZuTXcrK1BEcmxDbXFGYWU0Rm1FS1ZtVCs2TjVMQUx0Rk1zMGIxWVFKMGMweUI0UDhIQkJLNlBGNFRTL1ZrSjgwZWF6NzgraDB6NFZQeHZGMksxeEdNcDR3WXRUdDY3MGtVdFVMcjMzam9LanB4V1V3cTN6K0ZjT3ZWWVNTdE01RUQvb3JuYTBSMDdJL21UbldsaDZQMHR0RkN2c2FWMjBKVWVNRDMzeHl0Y3QrdGJWaWpTWWZ5TUFBU29ZTzYzTTNZY1NPRHgxMmtxOWtpVjY3a053Z1l2dW9GZzgydUF0bUNNVFhCNDIxcDlOaDZGYjQvR0luaVh0R0hLc2ZyRlFDajlpdkpveEZERkdPejBRNk1hZjhBNTRqVlpwME1zSktNM0l4VUxCVHJIcGdtT2JLWnc1R3Q2U1Y0MlI5RUdTZFMrTzRlYTY5OFJFMFppYXN3R1JBV1I0d1IveldYc3c3UTFXUFgvRmg2MEVERHFtYlQ4VmVWQkhFQUdzNzZSUlQyNE42b09RcG0zaExkc29iNU4xTTBJa0lYRDZGbGhhREE5aUMrN1dORE9JQnBrL0tSRHBKeDR0Tjc4VVFrTW9lc1owczBuaTdKR1I4eWozY2poWDZreWllMEN4VWtLSUE5U2FLd3cxWUV6ODNvUG1zRk5ka29DQlRkK0VEc05jem02UmI5bi9FRXF1MTBYWGY3Z1NSNzZaemVEUlNWWHdzUERmOUtveDZVVjhFWEpMc3lZRTdCSWw0R3pZcmkzVnN4clU4UER2U3UyWHVWVGVUMXNCSHNpSmJzTjZwSEIyM0hvNFRLSnJOMkxRV21nMGFLeDdZdzc0VjZodHVEbTJ5WHJDWllUL24zcmRYU2xQalJrdW42b2hYM0l3Y3NIRHpIaStQdHdKaXZabzl6R0NaUktDZFdiMHRtaWt2WDZmZFhLMDB6WHlUazRVaGRlRkJ1YUxkU3pwbzUrMGN6WEZrVjZtV3l5UWhXOWdMbTVjUWs1RjdzZldHSVc3N3FvZ3VrMzFUZ3o2c29JbCtCSjVEMnhmNmwrYmtIWERUL3lLOGZPYmhMT1dPSHpyTHE2dXlCTXByMGZsYW5sRkxuRTZ5R3lyUGR5UVZLcjdRcmJZRE42US9YMFhZMFgzUEZQeHZrWHRxSnFIS05LT01nejZReUNoMHlDdk9NdHlpVDRXZUhhSG4vaHozNjJrM1I3dFlIaFZaeTlpTVoyMTVaOXdvTjQxNXYyOEJwVjZORVJteEpRVyswYmFRZXVXbmVybm5wbkJET3JETUpMYVVLY3dFbytPNFR0ckI0MmJxelNHdWNaQnU2OVhka1JPRFFZVnQrOERWNDJpMVA5WjZpMVR4R25xcWFmRlFzaWhKeHNRN0Frd3d1dDkwREtneDgrUDNoV0Y4NlYzYncxRFlaSk00M2xxNkZIbE5ldWNCbkFhR25jbHV3Smc0UVNpYmdNeFRlTGl4SElsNS9VaEFXdzZ0TEZPSWpKZjUzSTRrdXl4NmsrK2p5bDdmc3RTWm1MZWxySVJIZ243RmtpRjZ3YjdERnBNQVBlN2lxTzRzcis3elRsb1R0SzY0K0xqN21jMHpsZjlRZGJTZ0M0V1E2aDhtVnNmVXoyb3AzdmlQYmphZ0pSbVJDNCt6UGRZeEhwSUloWGdtdnpTR3RUU0JXbEZxdWZucTVXbklIdVpXTUY2aDlIWjZVbXRmMnhHT0xiVCtKOFBWSXhTbHNDVm9JVUhnZ1EvOExsdkgxY0d4SkZHc1FmaXV1Vit4VzM0U2xRcFloWXdmckhWdWdqMHdtQjFnSlVPVmdPb1FYNEQxNlBRWlpLc01CekNoR2JYWFlDTW9GeVNIU1loRzA2UzJaaU5IcTBSVFlBN1ZSU0U3aWtyYjQwdUFlNjRNNmlsL2Y0aWdXQXVnaHV6aGxuY2JPbHNvK29ER1Vub3lSOCtlNEtPZFlqY1c0VkV2VXR0S0h2TDhtWmdzWTFqZGdpNjZncmFzamE1aE51TEpDb2ZScHlXUDB5cTV2enlOY1lVTWNCeW85OVc2aWlHa3MxdUJWTWRlK0NHVVVabUNPVm4xdzhhMnBRcnBjWkJWNTEzNFVhVDhyazU0K040M2pQeEU0blpOT3dwRlc3NVZkUXZCcnFFZUd3amMxNTdsNmtXQkNQWTB1L3M4c1pDZWJJT0UzOUQzemFQUlV5SlFweXJNMGNZcUM1bC9EQWdQV3RiYmovbElxQVJoMXhiZXZWWlhjZ2JTNGsrVk1rUTJQN01RWUVpek9XTmFDYWpBanB6M1ZGUEJTUllBVzc1UVRlOE4vRzR3YmpwQjltcG5HZmpiTlNGdGxvbUxmQWp4RzQ4S1IzdlVpOVMvbXdiR3dyR1cxVE8zNkJHRk5rMW5DbHhMTk54b0V3bTBnR2tNeWdmeWkrU3hCV1NFZkVjb3ZKcm5yaWJ6d3QwcjNibERUWXVFdU9xaE5yZmZCdHhyMVhMSUVxcW1CaDVITy9WMlRWYlljUUU0TVpCNkRPUFlibm5ibWl5eEdMcFV3TGRYRE5JNHVUYVpubllUNXR4VHNDc1EyVVo0clYzNEY4RE9UUk9aRVFMeHM0MHlGMXczSUsyNlpoT29JNGtnVUJSc3pWQ2c2NTZRTXZ0T0lVdysxeU1wYWM0VmpCTFBxb0FnQXNiOUdrR1oyRDZhRUkxRWRBZ010TU05dkVDeXV6RHJnTlNFeUdBcS9wbEZXWFIxbGdGVkdFcGZRZkU5WWNIK0pWRTFwRnNjVFNBSE1LL0ZOSDFHZnhPbkJDZ21MNE5TSERaa3JFbWc0eG41MXB3TzZWSkUzWkNCb293MXJBZHliN0ZjdS9Dd3U1dkF6SnBEZXBWcUlacHloTjl0eXJ3cHNzL05UYjhaNkp2V0NJNmQ1UnZuMlBJV1dOMkFmb3BWTXJDeWRGbjZUUHdaZ2ZWUytQQzNRY2dYSTVWeUlRUEpEaE5QQVhsWWR5YzFIY28vTU1rT0R5ZTVacUdlbll3c091RDZoMVF1NWtvOU9LU1RKK3FOOEgvaE56S0NCVUc3RFFwMVdCWng1bkppTmU4bWdKZDNiblhYak5qcDEvenBKNTZVbFlvRXdSTzdENjU1S283OXdDYlVHWlBacWdZcU8xK2lkSEN3ZVgrNjVtVkYrNE5uRzc0NjVIQXcwcWFjZjU0dUJHa2tZcEpHRTI3WHhMVE8vcHBNVFU0ZnFvUUdUTVZLcFkxbGtucmhmREFTdUxNS2ppTjA1RTE0bVhvOCtlZHBVeDlPUUh5Ni9ycUxmK0Y5WGlRWEFHMjJ2cnBsM0k0b1M0UmQwckd2WGxuWmJTODltellMeUtITXZweGRpMFFpUm5aaHhOV0lPbUxDVk9sbU5jbGY3eEhnbmd5cVV6eXI0dCt6cmJEQ2NmS3Q5bWY5VVdVOE5pVHN4MTFtbG5OS0ZscWlIa3BIZEJnR3BTQ0RsZFdHVHNuTzBvWVNvZ1NteTIvOXNzVlorR0lUbDF1aHR3MGFvV1RHMHo4SkVSZ2JRRHU0WnNWNkRDTXBJb1k1YXJPUEMvdlRrVjlDUUxBUEhlVWNvYUdNcHF1dnU5NkRUZ2ZlYmFiN3RNbFN1WjFucXdCRy8xcGp4NkthSnVWUDAvbUVsRmt6eDdxQ3lTaEpGRVZHMUZvWm9nd0E4cmgvM1hkd0w1VXplS3VqYmRmNDJ4MFI2bzRSOUlZU3pnUjh1bk9xWWhiK1UzK2MyUG5xUG8rSVBVNDNwelZNOEgzOHZUaWxDVVpycUtBZ3NVMTR2ekp2ZWlKalBWREI1MHFub2ZnVjVCNUtuQXV5MjRhVW1UV0xqaVlibFVobHdvT0RvR1NTOUljTlcyYno1d21wQUF1K3ZWa0NSMFUxaHhuYjVRRHNSZTM5cVpaZVp0VjZRdEE0NVVUTk1nZE5hckRQajlLYjNkdEd4Um1kc1VzZlc4ZFJwdkRld1hnRkZnU052bUQ0RkU4S0lpMVFndnhSYUJMNVlRcHNtSXhTNXNadE91VE4yYkxsdWZ4ODFqQ0Q0SlhjNGpJVEozaDZYaEludnhQUy92bkM0NGlrdjVMVzVKKzd3T3l5bHVCZGwxQ013N1VVMG9sWXhnbUkzVEpwWUpidVA4dmxWdktmS2dZaGtIRVVxaDE4Zlp1N0thRHFxWTBuLzJCeTJjUTBtQ0cwV3BKaVFwYmozVkNHTlhZdUo0QVBMbHVJYXFmbTJLOGg3YkNDWE1FamhWV25yQmNaWXFVRUtYUXBYYmlsd0JZK01Ha1FnQVQyeTJWUjNtSVVtT2loVUxwckY0T2o0NFIxUEhLekxTcGdqL0w2aFV4bW1kYlJ6M3lyNDY0aXZhRjRBOTJKczZEWEhCZk9GR1JPbzZPcHlsVi82ajd5VVRmVWlBbjBCdXhHbTR2bnQycC9zYk5iTjBZQXl5YjMxTzFISFcyOWEzNWhVVWpCWSs0bEpwWnIwVk5PV0pLYkx2QnMySzJiSVZKVFMyL3JKdk83akhCbEQ0TFNmSWo5R25yaGxFbURqcFRGT2Zvdzk2WWV3aDYwc2FmOHdpeTBvY0hMYy92QWNSUzM4dWJqK08yN09tNzVBMmRRKy9uaU9JTkhjQmhaUG1ZSXAxdk0rQWx1U1RVc3RFWUNXcHRIZWdpTk1lQ0dJR1hERmdlZVViMXovcGFHYU8zWkdzMnlzL3RCL3FPNmxNM25zenNDOGFjRzB2N2NLbStGZDNiYkNhUVB4eVcxZFJEZHNKY0UxSldmbkM5OUxaRUNGYnhVbTg5ZmJaMCsvU09ObXhjSXRta2kyL0VJMjd1ZXU5S2l3cE5kR3pQZjZic2pzak9Fc2FjeE9BVUZCdjd5ZHMyN1JVYmJpeGdkQWI4L2FQZVhyK1lKWlEyaFNDUk0yVGkzcmw2a2VRVjFtUlM5WlhyakVpTHB4aWc2bDdvN0hlTlU2cEVDU0FKdDcyOVh6Zmx4ZlBBZ2Rlb0NoSzdvbW15eUdNUTRqZVVZRndzYmcvQkhaY2FLUEZGV29DZkp6eTRVZXV6TCszb2lJcUVXaFVkZ3RGM1JTS1pMVDI2K2RKVDBQMnp2RXhDbzQ3MU91bUhqWXdnV3lpUll3R3NmQ0ZxbE5WU1RIaHQ1NFEzNjUwYWFNb0l0d1NHWlpTOFJwRUVybmFiOXN1bnZlRFJreWdST2toMWIxdWt4ekdkY1Q4OFdVUTZ2NnRycmc2WXBmcFJZSHVNK2tlV3QzNnRMQXJadGdBZkpSNzFxVVpIWjVISTFENHBURktUdlhlNmlWb1Q4SFI0YVhhWE92bEN1YXAxQ3N1NkZrNXI2bm5iYkVaUXlXYUZoeEVISFF0QnJXUEhTcjZVQWE1SzUzM1FLa1hDMlNmbnNnZUUzM2V6Vmp2T28wM2daYkRMR2ZkeGxldUh2RlRwV0V3dWpDMHI1d1dpYlgzZUZWOHIxS0NMRG45eU5QRmU0ZWkvQVNNUjJ4TG5JbUkxSzhRRUcxR2RNc2RyZm9UU3plZFJlOGIxTWpSN1Vzc1BSQXFnTG5OS3VpcW5FUG5kVm9FTGwwaGVqVmtLUE9xYUlseEFleFZrOWMvU0huQTFtQTVXbnJxUFBvTFAzdng3QUprYlhyS3N1UmZCeW1tZ0NFZ0VsejgxRU9mRTViMnU3ek9Hdk5sakN6YytBWFJ4Q1Yzc0dTU0dpb0VTeEM1UExaazN0T2F5Z0ZJaUh4MkU5TnpVbVdtSlR6VWIwQ20wUkk1dW9hVzlOUWJhNTkwdWdoNTFQenBydmNoMGRXQ1lJcTBBT3Q0WHQ0ZkRJektmRkdzQUFxeEtyMUY4OEhuWWc4M0s2bEZ0WjBZaEdaR3lXNnRYdUluWmlOcTYycWV0SW9mdWU4Z0JSdXZQdnRDYkFrQWFpbkJ2VTZkaUtiTm9DeHNzTUcwWEJtNXgvdGpJd1RGWkNNayttcmZUc3NDbXk5emV3MHlicDhTNWFkalh4d3NDNzdOU1VHUHVoVjJ5VXJFRVlyZUYyMHJTVjFwVUNnVmE0Wkp0bE5MQm1BeEJvWVNBejh4UzJXaDRZZDUxVUFOWGQ0SEJOdjJ3Nk1ZTkFnMzlWSUJBRTNudzN3dTgrTStDOXR0YVBEUFgwT2lBSFg4cEhwbEpIY0g1ZzFFa3FTbUx4NStCM3BQanVpY1JBcGRiZHVZV0tVbnNjV1NWRVNNeHNpVmNVRlYvQTRiRXFkVituNnEzWUQ5anFLTkxFc0I2bHI4VCtWUU94UW9pbEUzRVN4ZWpVWkFQa296QlpxWFkyRWN3aEVVc2dTYjVpSzVQUEF3YjlPOC9HRm5xbGN2MnU4emFDN1J6SmhqeTJQcG94TGtFVURMNU1XSUtBaDRYeVpKb1gwT2kzd3RxQms0NVRiZWJvT2NlT1VHM3k4R1JoNGQ5TDZoSGdjWTZRWjV6ZWxDVlRmNnlOUEplYTBOT0xvY29yeENUcEtUNEJlcDVGUTlTS0Q1RG12NDZsNk5qelk2OW1XZTNBWm1NUm5iam9pajQwZkFXZkViNUFHakdqYnpzRm9iNFNWNm1rMGpOQ2FyWGd4M0dSQnY5cTZHR3V4emVrZ2twZUtIclJ2Q3hiNkNiRi9SRE4yM0luTFM3ZGRZQk1ZUHRjRjhkSGk2bHRkTWtnVHZUa1pNbStCUS9zVzVad0hhZUJLOXFjWGhjdXMwTk12RlVTZWhtcm1aK3JXSGkrTEFyVEtRM3JBTU44N2M3RzUvWmZVVmYwTFg1UnlmT1JmL0dFVnRLalVZbWZPRDY0U3ZSWTE1dDYyc1VCVi91UE90WUNHR0cxMk9ycjVwVkZTS3drak9SV3RXMndCRnVtL01HRlhwYkdmYjIzYUVIM1ZtRVNJL013ZDNheVR1WlhTc1lYc3JtalU3K2tPc29aL1AyT2hmZ0pHaDNQVVBnSXpYOVluYnVnSFNaeTYxMXh2MEVYclVUVG5nZkNnUkVpaWpHSHVNL291WHVHQ3B5RFdmUmdqWUJwM25URUludGdXU0M2RWsrUVJySlNBclJzWmJDNXh1QkZXWitlSjQxc1c2azN2ZWxCQTQ5U3ZidkI2VkprRWZldzJITTBRVGt0N3JsQzhpcWdZSnU0eGFVNWJxMWRCL0xXRDJmRVVnbUFSZS9JNzdoUXFrSU1qOU1YNzRiL1MzSDlwSS85aWVsWnRSTGlrOVZEbXdwYnFyZklJQ1pFNnl3NTZaOGN5Nk9GcXdHTGMrTkhlOXZudE41OWVpai9SclZEU29QSy9zaWpESjRpSENpbkJ3clNDU3RyNjlxblgvdmNRaVFkNU04S25wQWE3dkJGVDgwcHAwcW1DaEZDN01mWEh1RFdjSHpwdzByMW0vQmlwSnBOeHlRd20va2h4aWh4TFJsY281ay9yYjJ4NkZ0YlJQclJoYS9TYUk4ZUtrNFdRZEszMDUrNlpOQ2docFh3bjh4YzM2dEN2MWMxQzIzaU9FSzVHRGpUVUE5bHNlRTBTQk04QXpmUW1EeGhqNSs1aEpNWUtiQUEyRmNUQ3pQTEsxWWFZRUJ0aGU5Vmd1UFZtOTlyajVqN0VXejJncGhZMmRBWWFyKy9HYk5uRkRxTUh3eGxpRW4wTW9UUEZSTjVnUjdkQjNZOEZKTThveGhqcmV6dDFuc2lCSFpYV0NRK3RrOEFnSUNBZ0lDQWdPSjdSQURCOU5FaGFPeGVTQm5aR2t1cnJuMm1ROVR6UVhUaWNqWWlXQno0R3NHMEUxWmMzMi9XRjMyL1JmNmZPays3dUY3N1B1RFAyYThiOXYxY1g3UHRVZCszVWI5dWlmN05iblA4UHJLNzdmcGw5UG5WL3dmWnEzMmZhWi90MkgzN2ZxM3YyZmE4Nzl1dUg3YnEvWnFHNGYyL1VFL3M5L3pYenBQMi9ZTGZzK3dQL1QxTDM2dnBsZjAvcnFkK3JTTDlWdGZwNk5EYlhjZVh0SENUWlI3VWZnOXBMU3dXc3E4WVBLY2xnd0JRdHhSMHYvNUROY0RYalA5S1lLV2MrdVNKYWNNOTlCUDhObllkVENnSDU0U01DSTVJM0ZjSUtCemdVV3pWZXZMcVBHTzFEMWFseXo0VStGcElaVnFDLzIrQzY5QlBERGhCdFpvbVNrZnBXZXdyVFFZSmYwNlEwNStsQ0UzWWFUMTlLQnBadzB5cHN2SHBOL21HNW1PblRyTzBaM2J0SDRaQzB1R05rZVRLQTA1RHl0WTJSb1ZxVm9xYmZIcEU5b2RHYUJsWEw1dmNMeWlIUlpNNFNGZVRhN3hZcm1BVllhZkVVd2Vtc2JxbWx0bnN0Q0JyQ0gwZ3BvWGRjN3BHcjNtNFVkc2ZlNzJYeis2MS91dmZFVGxIVEVvR2JzY2J4TktPdmsvTUowV1ArSFZBNDdGM0JVL0tVWHo4eWJJSDh2MHYvM1c3a1NTaWRBdC94Wm1IU0ZXS1JRNWpwT2R4SmVIVDZzVVI4R1k0c3dZUzVENDEvTjZhaXM0aG9ITkxsN2VETHJFenMweHgwdGpaL3dmTHZkazBZR21BSXpQOFdMNlpFOXQvanRKeWxVVGROVksvbUFIdE5RN09xTEsxNXI1NXhPV1pFYWwrOXFJTzZaSDBRSHNQWXdBd2JwaHozUzBoTDU4L2E0TnZ6Wmk2OFBxdmNlNFFETWFtdmQwc2R2WFNXMVpZOUpMN3ZzaGkzWW1SWEdKais2dnNGMGRicWcrTXFsTEhPRmU4TXNzc0sxMkpqWkVIaytaalBUekFnWGY0UUs0cUY3T044T2xIRGw3eXpFVzdMc1BhRWVnYmZkM0NadEJnbHVQN053YXROQWs1eFM5NnJObFlRQzlYd1dkRmQ5K1hBdk9RUFVzQnBPanFTanpINDR6RjFUWkovdTdIL0Z3OHdiTWo1ZWdoN2dXckFoTWJPN0l2L1BDRjJYN3pnWjJxOVVsZldMMW81cTdJdVVHR2VrbHd6WTM5bDdqUXhmRUlSem9KcnVkaDhlVVpaaDR4TURZdmt5RnRlVUZjZkhibkNNZExSRFdOQVB4aXBqS0tqZ21TZWFmL1pOMFFDaXFoVFBKRSt4UVB1aDIwcmJzR2xJYWUrak9RY1p2dXlvc2wxajduRXNJVXhaQnRHZU9QM0pqb3k0NVFEWnFhRG8vK2VHeWt5MU1lZE1tUnNpZEkydE5xWHAwZVFpbU5aM1hpV2ZUSk9XTW9WRmJScWhSbTJwVUdKcUQ4UjJObElPTml6MExsdVBhWW5lTWc3S1VUVkFFVXdDV1psck5hcC9ZSlRlUUFsT2dtalpOTlFLSC9TckE0ODY1M1d1SURGbEpvVkZtZXRRSDFOMTBmM2pKSkR5VzN6d2hoNHUrSHNnd2thdDdRWm5EVGxMTFM1eHZYR0ZpcTlidys3c1ZDbkl0OGk3UThrUy9WWm1jRmRIem9WZFo0Qmw2S1pObUV5UGNNMlF0d2RLUDNESmpBUGhGZTNJODBjZTBtM2Q2aVBXbUQ0VEJjUDI1bk9VcEJOTHRuNmcyTndxM2tyd0RIRnc4KzU5SEE5Yk93cStrQm9UbjZORCtoYjE3NThidDBUbVZyMlhSYmppUFJTaHZnbG9RT3owMk1haSswYUl3VXZJOThvWHVIRGRpVlZCQ1g4OXp0ZjRabEduWUJMVUU4SlZHUmV3SXdNbVpjTGZTQlZPV1BzV0ZiQzZ6SGFBNUFHSXdrckpWclpGODJjT0NDYTluUjhvc0hUUU16NjdRcVVJMVZNVnJZZ1VoTHZUOWErWVVQR1ZEaWQrMjVpaU9SUS9CdUVpY2VGWUhzSTVqSEIxbzhnWDdGd0VZaXluRXZ2ZFZUcVVlbUIyQ3FjS1lIU3FPbUwvRzhjVU1mdHBmNTNJWk5tUUZuSld6aWdiK3doaThjTXFoSVVxWHZ1SHY0dEJkb1h4ZW9MbWpsUHVWMmdhdHBkdENTNkFIVSs4S1VlT2dKbXdaRlhoT1RsTzEyNzQ0WGpwZ0h0TnV4ZlNjNWtuUHJBb3NuVGY3ZFhXcTdTVDFtRXVkRXJ1TFdhQkN0aFZNV1g0c3RUOFRaVlNHMSswZ1lUaHp4VjY0WTBIMG9ibng0TkVtY3pxenJHSFpISUw0V0lIL1c4emlBdmxkaE91SHlHUHBVcG1VUFZndG9ZcDZUR0J6d0ZOQ2ZNLzY4L2tuR2xQZWNtcmpMcXpZNTlJNE5lVytpdXdPR1RQZ3l6cTBya0hHcktmeFFTQ1M5eUl1eld5dUhCM0E2dW85U3VvZXNqWTcwZlJabXNZZFBPVHk4RWJPUVJCRXRlTEJXZktJeHBGekFjaGs3QzJSb2NGbVRNTDVidHUxVmhoN0lsS0pka2FmTE00R2IzY1E2QnpCVkpaRW12dyt5bm1pZGkxV2RNaTdVS3RkZHFZTVJGalA2TGhrZUJPaDZtUWg1aS82dWFWYjBqWmIzRmRJSU53MEJIKzZhdHdrVDIvT1NybXRSREV3UVFmS1VoMjVzaEpEUFdCSVdxV0JiKzR0MG5Mb2FYRUN3VUFhL2xSelhyWUE4N1BQTWNYdy9paUVLUkszWW9DMUJvYkRENUZVTTQybUlTVGJCUnZqK1dTQ3ZaaldYNVpvTGRIMDB1TFQ1QkY0bFVEakRYZ3dMR2xTSnM2NFR0OXBQWnJpRS9YSDNuUUR5T2pWNjEyNmFDV1ZEQUR1dDh6UjVYR0VMMXVhRnNxUENnajk4c05hbFpkSWxFbGIrQnpwbit2YlNXWS9KdnFxbWIxZTljaWhOZFpmMDlqS3h3ZmVmSm1saEhJa25oYWd0ZTAyMjlrY0ltcXBoMFZMTFE1akNGR1JiTTNvT3RYR1ZSV21aQzBQamtJY1NESTJ4NHdJOTZ4SktwUHU3NHpDcEZmWFJsNzZTNjBoU0ZXWGF1NkJPNkxWTTcyODhEa0JWVFE0dzB0UWo0Y0ptcUYybnN0ZGpmeURJaGE4eENvOGdHWDBYTWVMT1d6Y01OUDQ0TmJKbkFIT3FYMWpOeGNhRG1UMnFiZ0Rrck1JQTFpNlJmN2JKMGFEVTgxempZeWdEOGVaQnlCaGhHcHBPS01oc3pHaURrRTdabFdyWHpFTGV2UTZTMHlCcTVaWEQ1SFNyWGI2OWQ5TkEvM3kvQlUvVWRsUWxxTzBoM256Qzc5d1UzNFJSWnR6NUhtTGhnM2ZiREdpMnVJQnlDMmdyTUtWeHFNaHRsS3NqdWhuM2g4WHQ2dlliei9lb1B5eFVNTzM4ancwOEVDS3JWVkN5S21lZklFdVQxbzlFMngvdjFBd2Vvb2lVKzZ4dHROeHozbHFaUHBrM1BmRnlEMVR3RCs1aFZycE9wWUFrK3NUbkU3bG9uMjJoNmo1bTFoK0tNNUsxNFhpMm1WaCtlMGdvWFpEeTBoV0ZPZnh2OTIrS09oZEF1b210L3VBNkJpR1daVFAwY2RjUE5WREhyQWFkVmNteTdlYlo1NWZLOUhCWFRZOWlDWWVodVI0SUhmSko5bTU3TTIzdkJxRVI0dGNxZUhCL1UvUUFUVUs1T3JmY29oM01LZ2R4aTlTVkJWMjd4b295RzFJMFQzN3pzUVlFVm9PRTZ5KzBlcEQ1QUNNNHhTblNDZlVRc3JWRiswaGN2Z05EYmRaSld3OVVXVkFrS01XOGtiT2xEYjU2Snkxam14eGF3OSs2Q2wzaWRHNjJtUnJsUmZ6NlozRlBYSkNyRlhqYy9iMHdvMXBQMitjbDVTWGpnWWxWOFRuUTVFTVNKelgzSFdhRnF0bmpBM3h0cU5CZnRtMXlSbStQWjVFbHFVZ1g2Nys0djI4ZXIzMGRrWjBsTkVxWHBwL2FjM0ZkQUNDZUVSMG9LdmhRSXdyQU11UTIyZ296MS9ORHFPQi9semxUSlRHSWN0TUNlR3hxNkloMTdMemZJZ25CNjRuWVBwbVltTUVpamFwSlFvcy8zK0VBL1J4NUREeG55clB0UXY2d2FRWkw3Q0hvQkFOanN2TkNraTRHd0tEZkNHclZNcDJBdmFqUFg1Qmp5M0dITHIyLzJCMkRCODJjMXczTXgrUU04akdlYi90WnJncjM1TklXZnBXbG9zSkFLOHN6VjVHb3JuRjdPWXJFTGVPeGJuL3FwejgraWVoOFhPNFRmcWMzdDVGczhaZ05oMjdUUCtLNVRQOGNFaksxVHBwS2E2Q091NCtCQ1NYVlJXd0dTVDliV2RlRG1CdGNyVjdlSFVwdnhWUXp1NzdUemVUajRMd2toOElJRDFoamE1Z0drUmhnb2NUTVE2MllsYW9KS0srN25xYVpubWIza1pVTjBMb1gvUXFmRTkyaWZBWUtRbzkvd1AzSHh3VFN6dWNxMTIzSSthSFpYZ280UlljdlVvcW5xOUVsMzRNdTh2M3FmejdlbXVxVkNqL1Z2dy9QSWY5QlFLNEtRaVd6WlUwbENKOTNLUXZvVEpHak43M0hFaXNkVTJvOXVJTFl4QlEva3pCdEM1TVJudUFrNkZwR1F0WllyTUtVWXJKZ3ljc0RrTVg3SlNhVFdvbmFaRE1CenRFWElueC9hSXZNaGVVZU5WOE5wdUl5ZkVjYmxvemZSTjRST0pCcmFLbk05WEljeWZVN1BGeXJiTTdwNXFnRHBtNUtyRG1XQS83NjNYK1Q5UDR4Qk9jQi9hTW1OdmdpM3ZxOFJwU0Z4c1hybXpUUEZQNjdId3dEd1FWRWF0Z3dwNVRRb0s4WkhuUEM3OVhhWW9nc0QzVzlraW1aOVdVcFBkTzhDV01zNDNpZ1ZZNk1rcTRGcmt3NXBsWmh0NFF0cjBoNlNoMll6eUVIemZqMFVZZEd0dkNxdndDOThsUVNnSkF1dGt4a0RVZ05MaTJ0dGhiaGxoUk1TazNyM2NCekZnNGFKV1Ztbm5lSmhVV1V0UmF0cWJCL0dQbnZiR2drS1JzNHpZL09Pd3ZNWitYME5nc05tckpPV2xlZ29neUYzM2NIUWNaZnpNb2VldHFWaTJBZ1VnUFlUeTZkMGFWYXE5a013V3NPd3hxeks4QWVPVjJWNGhOWWF2OGNIS3VPVW4rbUlrakpXekNjM1A5d3AzekFCbmF3WjhKK1Rob1FCV2dOU2tsK25UQ2pRVHdTcVlCL0svRzJLS0xhY05ZSlFVTXZhWkREUjJyM05oT1l6cktZYVkybEdVZi9PVjJidFdQbERMYnhORnlUYmE5Z0VCc1M0d3ZNdzh3cWxZK0ViM082VUFNbG0zR1ZjdUhjN3drMjgvd0lvdW1hR0JpWjcvR3hSOUJ4Z2ZjQnhjbXlKR3kyaXRralJMSnh6NHdOeURIczVQMUFpSWRFSHJ6ZWZ5Y1Nqc1QzVUxDS1N6M3M5d2RzT05hNlVvRmZtNHpYajZrdCtORmFoNU1ocXM0VGwxY09vNFhMdi93UFkxbUIva21XYThjODI4UVgrbFpEODNHcis0S2lZVWFiaE5KaE9UeHRnNXRwVllxdHQzQkZxeEF6Wkd1Qjh1REdzNTkya25ydjN0UG81RzNkTjJuS1hETTM5TllQcXMrVHQrUGNqM3N1aGU4anl3b3dVUDh0M0pLYUZpYjZnNUxaclg5UGx1ZGgzZUlYVlAzQzlIeVNGRjhTZmJOL25KSk1Hd0dCNnlFaUVkalJUd2E5MC9oUCs1TGtuRGYzRW1Tejh1ZUh0bXc3L2VpZW45VitCTllHZFNjZWlsVU1rVzRRaVZrNUc1TGhZd2xEVHpKZkdtWk16cFQvRXRUWXZiUU1KSTU5ZTMzSU5xcDhISUdZMkFrdWZFQUJHK2k4V3BvSVJmOGFYMG9FVTMrUWpYQjZCRVZEMHcvcWNySzkwMHQxQmxEbldGWFprU0pERXFDYjIrSFZRZGxoZkh5VUg4RTBXNVBGdnUxM1NQenFLSHY2R2d2S1ZLS1F6b0ZJVENLZUdFa1RzbkFIa3FKaEx2QUk5UHFVdXdkeS96eGw0L25TVTloY2YxM2k4OHkvK05rZXh0cVc5WmR0ZHBNbmZVQy9rNnhscUt5em81MC8rQzYyNXNqUXhyL2RBSS93YzFURzF6SkNHd25WMjBkNU9FVytyRkJiQlRndFROZWdGOXlCTUZwOFdGaFVCd0NLZ2Q3NHJDWUVuUndUTkYrY1dvWW5qdUpoQ0Q5U1d6Rlc5UngzRlhtU0dWUlNUQkdBSEZKZTAyd1JMQzRNL1hRUWlzWmFodjFxWWt2NHlUK3o3Q0hWSzJwNU96SnhsbnRQNnJmTkFqcDZtNHNGWkR3dzBXNTdGSUxLL3hucVIra0t1S1lPSXNWNktuSG5mNjdiUVFrSFR1THpCYzFOOUlIRXd0UXFBY1hGN3BOVGIzUTNXMk53YkZhVEttSmNmV1BvZlEvbHZ0VXYzbjM5cVdWbEtFZExyd1luc1pUdW4xT3pEUzFTciswRXFDTTZrTklndDlla0dOMWtEVEhQL1pBRjZYVmJqd2FRdzFTcnF5U0ExK1ppRExnYVRva0JuM0ovbnVKSXJFbjhSKzFVWjF3YXUzaGcybVBuWUV1cHd5Y1R2N2VqSVk4Y2ZVTmljaXh2cWpwUlNBVlR5RXNNZ0xRWHczb1JuOVIvZ1NHcENQTnMvR0ZBNlg5Zmw2Nk5PWHFtWEY1b0Rib3l1MTA3T1VMR3R2bCtyL205RC9TNytCOW13aVRLOEpVQ1V3WEttK2V5aTdpVUtKb3BMODFWMHRja09ocEQ2cjZxc1JoR3VRV2JzZzVKTFZ3WDZiU2xyUFlHcmRMN1ExS21mSEFYaXVuTjZZMkpUTSt2MERBMVJoaUw5Qm9jRVJoM0NnVEdZM2VWdmhmK0dONnN5emtkMDc2bGZEdTMyQld0dHpPVDkwRG9tTWVGR2JTUzJBNnV0K2t6dWdIc1VuSU5YSXdVZ095eFhjNHFKNEcwUnFWMWNjNlZ0ZXJTck15Z3gzTXBsT1FXbW5OUnduWG02TG1JRkZnZUVUVEhyNmE5NUpRWXREekdFdDVCVWxNdEx1bytNelNjcFhhUmNkWG0zTEVJRnJoeDlVTzd5SGtHUU1ZNXB0VUhDMU42WXJkRW54Z081Ykc4YWRXVnhsRDVYN0czaGNuKzBSWC9RRTZodW9YZ1BQaTFXT2xmcStvRnZtWjBwZ3QxM1lKb2FtNlF6ZXpyRTNmTk5yc3JyN0hHTUtSejlCRjg2ZHhkVEpDd1FUeVN4ZU83S0ZleDRLL2dzL2MwblEwNlp4di9SYjRkeGJZMXNQUUJqY2wrV29tZXdrSTFQSkFKYTl2YmhNV0QybUZ5dnRGUG5XZ2podUh5ZXBxcS9xNFZZV09hek0vQnl3amRQNEZUYW13UHR2VXpxT1AzOHNtVHF3NW1ubVovTUt4T25LMDhEQUJWd3lyRFNRUDM0bExEZmdmMjQvb0JOM3NnNjBEMVVBb0E2LzFIMytUOGlxOW4rUjRaQmNzVlhmcWJCai8xUW43bjdqdUVtSjF3UEQ4V0lZOVllUFRTdVNGL0dBZVhuM0dGa2V0Y2VOblBBdXE3L0h5dzlGZ2lvMndzS1hmRXRaRzRxSVh3bDFhNVBIVFhMZUkyendiNExMSlJuMU9mZjNiSXdFRU1XSkhFQmdnaVJLQTV6eDBTa3I1aElWU2h4L2doQmprVkMzbnpXcHNwZURpbVBHWE1OZWl2SGI4SkM3MlhLOUxRNDU4VUFCdGp2TTJmeHppUVp4SFZvLytFZ1JVM1g3RWlGazhMdS9Ud0JrTVo3em1Sb1N3ay9tV2dacGVueis0UlFRS2NoZ2V6QjdhbnN4QVZxaFJyS0VSQ3NFQm96aXEvOWpzRFlkY2VxcUxvMzNKczdBcUtMb0lJR2xXWWkyNThpcTI0VThCZjkrSGVlbGc1RDNSM1pwc09UaTBKZnlpcU53ZVljdGZTdEU0Yzk1emhkdGJNZ2VtcVdLOG94WVZHcU5QRW5aRHpFQmVSUU9WZzlGRjJJTWpZVjVLZWYzaGNDUFVnclY1L0Z0MnVWcVo0U3ZnazBsSWY5ZTdVcFA0QTg1K2NnQlByUHBKUEpWK3YwWHZ3SWhEejJEWmpnbG1xOGZWNkwzWXdpUjBRbXBiQlRMZVZjSVdEUEJzenNUa3kxcy81cW5tbnl2N3NhNzV4cVhOcE95dEtSc2hJY2g0RkpOeUx1S1h5b09lWlRMemdzZE0wc2pnUnVETyt3bmMrMWQ5U2JYc3lsZWZUcithOXkyTlFmdUR2Y003cmJDRXBSRnQ3UGVhYk1xRGxVcU44YVo2OGJ4dHJnaXdzaERIMWFOaUlXQ0VSbHpYVjNXNXpkeEdvWDVTNm15ZEpQNmRLMjE4TkZlc1lVc3lXVkNKMW8wY2pjNDFLM2V3dFFaQ080Q2Rxd1lBSFpnUmtvMFdha3ljNDhNUlY4N0Ivc2ptOU5HQ0h2UEVHUTBRUDJGMXRoY2JrOS9raFNmdEljQzZoNnErTEVyai9hanYvSW5kblpoMm5EbzY4bTcvbkUrSW54Ky9VVWxMY1ptQkFBYjk0SjJvNmhQa1B6NXZmT2RObm5jM3RoSDhnMVFOUE4xZlJXb2E5cWs3RmdjMEEwcEM5ZEJZQjBuNzFZUkw4b2pUL0NUODNXWStwc1c3RVZmQUNyRVlHOVhqWnpJdS8rRXRFQlI0L1llZHpXT0FpNXcrMDJaS0Vhd042WURwM0RFRWlYNTluVWFONllTNEcwbEpVYW8rOEw3N0xYbHdtaGw0Q2oxREkxWFlzWDJyRGlXdjR1a1JZZnA5SXZ4QUdZbzBOMFRqUWNwZW5NeTZMaFdKaUJqSE5hdE5kVmxJUFQxVmFIb2hBQjRPQnRiVk95VHJreG1JdVpMdW1XUkdhQ29YYTFSOThlNkJLNzk1cld4QWFJQ3Iyb2hYdlVLVVJCWUJYL0dISjFFZS9wMEYxeXc1RTJqaWVCd3crL3hRTDBZMTdpUXBtK285QWNXMGlKRFQ5ZkxVRzVZUTltYnJlZU1vcFQ2ZzRUS1UvbEtpWE00M3J3aTRoL1hzblFJcmE2WWNaRTBaczA4WDBTaUx4YmhjNGs3NGhJOFk2MnJwNE4yODFrdCtneXAzMzRhL3RyS2hCQ1BmSTljUGViNDVRVWtDZDJyWEY3WVhQcE5UdkFvMVY2bjI4MXRPVjhkVVdmL0tSekZuN1Y5YzhISzh0Umk5YkJxSVhzZEJNUFloQmhnZk01TDJpWXM4YzFEK25PaFA2d3ljcWNwZGE5T1Q5U0NKVFhmOXEwZEVENWtwdkhKdHQxU3dxYVlUS3Y4MHdCeWxYVm4velFzQzNlZGJlcWxCVWFGZVV4aEpVbFhRbzUvTTNYUFdYdUYyenVORlZyWUhiOVcwUzBDR0YyM1h6QmRGYnNIb0pLWUNkNzE5ZVQrRWVKSERIUi9SQm1NRDBRZmphTkU3VlMvMnYzUXFNTWRrMnJyWVIyN3dWcmlJcnVpbXZHSzl4NjliVmE0T1dsR3o5aWlWMjNUQWsxd3lDZy9UT0d3RWFXcWM5T3F5OTVrUmFlM1M2ZkQ1S2R0b1VIYXp4UUtkTGI5WjErMldLRDhTNGR6Z1NiaytIR0d6ME5YNHFRUmJmTzNCcVVXdjVBTVpDVU5icVVkWk5pRFN5NzdNWUdaakJWWlZnNjQzNlN1dUpCVFk4anMzQ2ZlNDlUWkg1RWRORXhMUm1ST0pwU0liUCtJelJuckR0RWtoelJBMS82bk1IMnoyS0VQN3FUS1VibXAyRWZRSE5MbTNkeEhUK1JMTitLeDV6Qk5XckdpclJkclBtKzJUTEUxK0J2MU91bWcyc2ZwRzBpZ01oKzVmdjh1RG9pQ2U3eVZoRGRJOFVaVFhqVExZQ0RLcGRURjV1RlhIU25FTUl1aGREQk5ISjJueVpsMCtVdldtUi9YY2RZNC9oQ2JEbGtOMzhXd2IzZTVyTTBTN2s4NXh4a1c2WWNsa3UxUmQwdjVoanprUEdSbmt6WlZlbTRPM1Y0Um4yMVB3bW1VUUw1eVVQUSt6bnJLZlJieFBCb2pqbFlBRENsN2xxVEpqQlAvVWdaT2ZBZ3lHaU5wS05QOWxBWlVjckN2UE1rUGNhUXIxcHFCQlp0WXNreVZQNis2T3N3VjNtZDZjcDNOaFZuU0hFVldJc2tsRUVpeU1PWWcxcGp4NjE5ZGtlT1VZTHBoL003VUlvWEk3SVNYelFyRmRuTkVybWVyM2tDWU5OTUtFOUlMQk5yU1dkRXUyaEYvRHpFQWdveDJXSFE5MXkrSHMwbDFURU54bFNpVk9BTmZJRjdZWjcwRGVLOGtrNDZudElnc2RQK0JSMDdscUcveXFuLzJKdmpLNURhUm8rZk9nb3hjQmlxOWVmZ05DdXVnRGRubjJIR0k1NG9Gd1o1Q2NYN0h5SURncVdZQWNrL2dhRGNhVFZrNzhjU2k1dnRuaXlRc3NjcThFUVowZ3VIS1NLOFJQZFBTcjNuM3hHWXI5WDVYWjhwZkpkVFhOYlI3TFU3WThjYWRKMmVwSlFkRXZScStZc0d6ZmNnTVQrV0V3d2o5Mm1TY2tzbkY5MGE0UEUwZm5CT0puTHdYVWtvd1JIVHlESDA0UlpwVGxQcjhPenVLQk1UT0hldHNtdkJ2OVR5dmszelZITjlBZ0N5bHBaVmd3RW9lMmJEVzFxNk9DYU92T3lnSHVKU29uVTNxZmZidkxyK2V0SGlkMnNZOUZuVjFJUEJqTTRPSVYrNDNRdmk1TXY1d3dTL2VuNU4wQm5SNmlydG1tRm9zMXEvZ0x5TnB6T3ExT2JtOThGOUhGTXNkTjRQOW9ZTERhcE5YVkhWY1hwL3pWMXdSbGJSL1cxR3MwWWZOeTk2eUVzZnFLcFMyZ0tPN2Z2UVFoN24zUkRIQUx2Ukg3akJWeWQzbjJjMFRtbkZQeUtMSVRDc2JJVFZUT3FjM1FRTVl5cXVIYUpFUTBYanczTG45YWpjeGVSbk0wZUNvRGZFbGVxbFNIcGJnM1dDR1MvRUJNNGhOQ1lNVXFHVmJob2FiSVY4dGI2OUNwUVk4SUEyVHBKUzdlanRUZUZlSGRiZzJtZVF0bVBIb2FjT3k2VUxGbkp5T0cyR1c1VFQzL3V5NnpFVmJRbExMRmhSS3VtVWV5TDVVZXQwZXFTeTFnQTdDS2ZmVG8yNXJ6Mm1iQ2lyNzhHa3pTTERudkVIZTlaWTFhY3hWQjBHdWZpc3RVaXJRK1pEL2JJdFpLakw3Uit1OVJiMzNGQmlWTmpLR1B0ZlRsYnlacE1iUnB4Vmo2M0hIZnhVN1V2WTFGTjBQNFZOckVRWXZhVkhjUU9rZnpONmYwQy9rdjJabHh5NElJQjdIM3YzRkJVNlBBTGI5Wmh5Q1MxUVVaOHNzcUdlTFdzQWp6WVkxTHk4Wjd1dVJFUDNpcEk3M2JDdm5oS1ozNjVhQVFKaXJ2THBGRUhydUZYbkswQW02Z053ZUxmUWRaMFBmRFArNnJRUVQvSDJrc2RLMHQvcDR5TXVhd1FnZzM1bjNNRVBqWjlYaERJSlFER2dyb2lhb1IxY0svb3gvTm5OSk5WZmR4OG9Wc09uZ1VVMEUvWGlPZ1M3dGsyWnR2VVkyN1FDQkNUQVBkdS9JKzN1NTZIbVdZdFdINnhlMDdFK0YzS013ZVNJREVpM3hxcTByV1FqZkZQMkdVOTliNXk1eU5KWGpXMTNqbncwRURvY1NEQU5sT0RucnRad3oxL2pCVHBSN3NoRHU5VGVFcVhNSFR1bzRPQ3VIM2hPVkdmaE5Uc0UxUGVFQjcwVUwwZTJUUTNlN1RzdnpNZjUvRm11Q2VMdWo3aEJCS3FobXdnWklXV3c0aUpHTkVUem9IanJtL2xpWHJ6N3ozQ1NELzRZb3p3dFM3YjBjR1Y3em5SZjhDSGh2dDVQcGRsU3JIS2huMlJ5aTc4YTcrY1c2c1dlTUZFNDJzdDBkcW1teU5JVVAwQzdvRVNjWVNXelJoelcrbVpBWExmNmF2NERlYVdudkNkRVdHdkpPeGNITVMxcXdjdHFaVm82emxibDNYZWVyM01xRjMxTXlmSlFtV05IaGtVWmlZMU5kWDc5ZGlYWFoyMnArOU1CSFFFM09GT3JveGNMR1AxaTN2bEt6MGJLYmovZm5NTWkrMk5LYXJFaEkzQURQM0sxSUdNS3FuZHRCalVKT3dCWm1jK0dhU1g0YVV2ZWdDbE1VWElUV0JtT3hvUEFUMmhHTFVIbzRKWFBTZitJMm1LME5FbXhSUXhZdGJ4SXF1V0tnZ0FvVmVGcG9zbEFvMmxuNnZGSEliaDVOYi9SNmpRTVZXN1hTQ3VtSDNsU3BkcTh2ZXpVS0VTRHN4NE4xNFp0emxXSkY0aVRQeUxBZGw1RkpLT2o2Z3U0K24vZWxQQTdidXZPcU92anB3Wi8yd3VLNTFPVkk3RDliSTJvRCsxbUNycEhua3plUHV4NU5NT1RBNkxIY0FZM0F3MUdWbmJ2eWRoZUFaN3FuSjdSQm1pT1BIR2FKcGpPSlF6ajY2TEM2Mlc5a0ZSaWk0VnErN3BYYmpGSnZkUyswVjc5UGlGaTN3b1AyNTcwS2owL21tRVhQdVRxZzNVZUR3RWtiTVFJb21hYk9yT1FCVURnNHhBK0I4cjdtNzlUL2pPZG92ME53SDR6dy9iUE5PQlBESmpoWldFNHllb25xODdaVDgvaVA0N0NYVHVIUnQwWFY3Ym9QTlJ2ayt3NU45NG1aRXIvYlZEVVVpVy9yRDdGQ0xDYytnL3dzN016TEhuejhkS1I1M25pMEJOUWNGOCt3aWMySUlUY3VmZnJ0NnIvZTBSUFdXZm9RVkxjS1FZUU1VZ0taMHdMNmE3dlpVNHQ5TWNTU1BOc1h0RmpqYXl4c2I0a1NJNm5TM3A0Q1JHZzdVQnk0N3YxQml6NkI2TEh1UnhwdkNHVytpS2NiRGJ0dFowK29QdUpUZnFzR0lyRWRLdUR1aVZPOHNpYS9HZ1VCcGZsb2V0bW42b0F4dHdsQ09wZExUSG8veWM2WnE3dFJmT2RYcFlDbTdXU1p4MG8xU3ZvMlorSCt1TGFuWE9TUmIzbXJOckVoaUhJSWVPZ2pJdzdLL0lDUktwUHhYc2hFenBjWTd5b3Zaa2FVNW5FbEtSR1ViTEtOSUQ4Vk5jODdCLzJBemNxVE9uaHpXQ01HMXhWT0FyZEo3bGtKMkY4MVpWdzFidWlYcHY4TGdGUWxHVGZtTTJ2Q3Mrem1PRmhUbVNCMkVKNk1lZUU3Y1pjSjQrZ20vUkFtejB3QmZwL1UwTVFhdmZxZGNJSFQ0ZTJOMUd3MEFMa0lmaFlKSVA1YzlFeE5oL1pOYmtSR2hPTmFwdkJyOER2dGp3bHJNVmJ4V1JiNm5veHNrQU5WSkNvVlo5YmQzTjJsWkxXb05LZDhySU10NlB4K0phNllZOUVNeVloa245QnpVcHJvSzkyeHBnOTlzVXhoY2RuSnZzL2JYcEdacW50VTdkV0U4VElEUlZ2dWdOZi9MbUptUUxPTFFmTXZFYjFYcVBHWWR4N2NqcDBHRU0yWmlqSFVyTUdHdDlPOUVZb2pPYkE0UTVidkFoYnUwSS94Sk9LeVBJK3d4SkFqd3UyV2w3c0FCYXBBYVFZaW9yWEdYRjhORndWL2dpOUg5Tmx0aW9teFhJQTNpTkJsMmJZNDN2eG5MZDhmZHY4K0FCbXgyUWt2SEdPOVNZS3BhL3dUSUtrNVJ2dUptMXlzM3lzVThGUFZaZklLY3hIUzhwTDIwQ3RrVTUvcmlEMmYxT254QUQwczZiL2s0MHZibTdScm1ZRjRxb3gxdEpESURtMHFNbVoxREVUaEFRSUdiR3Z3YlhpdWo3aHo1TEpHMW1sUWlCajB3NXViZmlzUXFJK04rY2pZN09iQXJQSk9PU1Q5WVlRN28yS1JPMlFTZXZxWjVEbS9zQTY0V1RyRFQvVkNpVVREZDlpbU5sUnNRSG1aRlpOTTJmUnJOb1REenpzekpJWldtVGlhNFp6OVpKVWJwbitYZXpPL3ZKaXBsdjJRWEw0bWU3MGIySFNqSmRiZkZDWHNMUkc5elZkWVlWYmQ5RVhDd3h5ZW1RZjRQZUxoOHJJZzljK0dZU2F5dm9VenJEYk1TL0ZmaDdQZTNvNDlDd3lNUWJ2UlhrL3ZmRndqbVV5L3BUOE9YZVZwNVk5VTNjSzYwbm9WWmhPWVV5NlFZaE43UlBxRDVmWFFpUitlMmNKeE5PaGVEL2ZPTEFZZ0dmcUNLbXpvUlF3YTFqdXFteHJCL2RoQ0Z5c1Jhem1HM3N2dmp3aGJGMGZVVFloc1UxS2FLK3hwb2Z1YzFhSU1ndGNDUlVqQmMwYU1sR3V3Z2dGd2xtUXB0a1RLY3FxS3pHU0ZkUnhtNzJ0NzNRNmpUdmZTUmo5Y01yUHFyTEhYTHFKMGdpMGsyYVVPeVYxMlpOcU9LN2FFZ0ZyUllTVS9KQmpVYmFIY2pjNDJJR2ovZmlOYUprck83ckFNZ3lvekZDdlUzVVoyU0twL3dSZHVCWEt4eWZRdFAwcHNUWDJiMnQwY0lNbmEzNjJqSVBlOEJ2TXo4ZGFiU25wOFFGakpxTUhJaEFlSjJ2M24xaXovNlk3SHI4a1ZNamJNMHNUVmxsRFdiRmZSRUNZTkVRVldlTUZYUVlKU3YvVEFFUkkzeElNY3MwN0M5T2E4TnVqK1ZxQ1NoQk5ZWWhGcUtPQ0FFTGZZb1pYd3Z6OWUvaGI1VVRLS212a3RSK0lncHdjd1BXT0o0Y1FKVW9zeTEweUUvSmVIaFYrUHF5YS9RMEtoRmpMS3poVm10bEIyYWg4eEVLdStjc1Y2N2RyVHVSUWJzSU1pZEdhT0owbG9mdHMva01GbkVCNkhKeWcxV3VFOGVzTUZsckZNa3g3UEtLdzRyakpwTkIxTG1ZOUtWWnk4STNkK0o0NWQrNWVhZVRFTmVJTE1peVdibEdvL0FJWGt3QTVwRGtsQ3B2R0JBWWttNWpMdmF5UFhGU0plZVZTVFY5N2tGNHZDMDJCcGZwanRCM0cyY1Q4SjBKQVlCTW9uV3RBekFvWTZKNXU1anZWaENpcVhGQzJLdzE2cmdLZTQyZ1VJMG8vdURFN0UrNU0vZ0psQ0FtY2cxa003ZUJ2emRxVWFTdVE5d1hpZlJaYVA3cEVPRlBmSi9UdGNXVHdLVGZOdWUrWXFsVWFYSjBkWllaVjJUdXpKaDZueTFrMFNGb2oyUG0yaU9mZ1dnTWEwUkNjK25wd0tmeU9jL0tPaU9MaEFUM1ZzbksrdWNqaW42bDVWOWE3L2c2WXpEdmphWW55ZmV1VFFkbUtsK1BUSE93eVhpQm9vbzZGamF4OGVQV1lHaWEwbmV0SXNIYnB1ZHVpSHJDRTQwMDkzeG03dFFXc2NFcUVWL2dxWHQvZDVFMm9Cay9TVzhVdTJKbi8wNjdTLzVoWG5RM1pZaituaExtZjcyN1N0MHZKdjduak1nV1dxQU5ZL29ZQUo0VGdJak41TDgrVnZaS1kyYkhwYzlpMW90ZUYzK1B0UU5aMmdCU3FkVEVwMHZqYnlJVFZ5QnRFM0ZpYjVoWUlHOWpjVjJmNkprRDc2d0I3ZldyREtiZWM0MlBRelIvRU5RQjFoVmZuRFIvSlBBdUlWam4rNS9yV1h5TTFoL1JDOThaWXhFWWU2YjY5R3lCK0JsMXJSUExmNitxYzFHdy9hZnE2blc2ZCtmN2NTdFYvWVZQclNEN1JHemdKY1lFQk9EQkZ1REcwd1VrS0pnTmpLRzQ0WXZ5dnRLOVk3aUNkMzU3QzZLYlJFTzE1a1NuOHdsTHc2RmwxRnVhRUtJRzZMa3V2K0plVEtsaTdPMm43L1FxYXc0VHVSeDJDWjM2WElLaEJFYlo5YmxQVlYvTHkvS2hWWEE1MElub3FJaHQ4a1RNQmtKa2JjZkRveE5PODJoRzNJRXVXRjh2OVdNaCtBOHlMUnlRelVCZ096bndicU80M0hVT29GRFFXUmZiSFZiemhKUkpLbUttd0RpaDJBMmxoSmFIUlE1MHh2bUtqY0FrTjZGTkp0RUVZRG9HVEhTbzhhMklBTjQrQ2lrRXhNOXVITWpWNEVPMVowREl2L0pDcGpJbW1tbHlvRnhZMTZUb3JpL2hUZ3puN0FiSG14Z3Zud01jSkxrOWhjNUhjME1IZVpUNlhBbFVQZEtvYlRxSE5UTFdVVjdYRHgzR3dxOHo2TU5zRG9SakE3dzlKRk9reUhRMkFEbHNCUkRhSkRqUjF3UGk3aUdqK1lCUyttVncyeFZ3SU5jaWMzVnVQdk41eTF4RnRtemVlV2RPRGF6K0t1Z2hYbVZROEhHemw4QXNNZWVDc0FqTGtDcFFGL2pTS3hheG1OYXZDOUoxNVViQjRFWlBhRkNlbVJQWEZFMTI1eTl3MVc1TmMzKzZoSzhnTjl5aEhHOWRDWHEzRzVSQUpPVXVVVE1mZUJiTmgzWGd0TWFadnhBenl5WGFZYnU4aXRWcWpwTGFJMVhyaUNGYWJJZ0h2M3B5S3c0MU5abFhkN1pxNjNCUWNHMUNNb25pODJ1UjJwTzFINGV1UG12L0xRak1NMUk0d2ZpVHN5MjhaOTQ4aXFmSFMxejEwSTFWRWNod0t4K3pxTzdBQ0w3OXE5SHFmMGdpd0ZnRzA5ejlIRHhUY0M2SnhPUmlzcDU3ZTVkSFU4cklrSlBWMXNucm9sWXByalFuQmZ1bEFOc3paU1N3QUxra0haOFowUUZhQzRNbCtmMDEzM3NqbXZqeStQMTRyYmFwU21JZTl4S2cxcHdKWmZqcW9ETVVuTVVxK2lORkQ3N0NzMWgxOW5MS2FhTEZIMHFWWXFlalVoRDJVcUxnTHVVOXRnVkRhb201eFI2RFpGTmpTaTNNWmpnZTNuZlJFYW1EZXBUaE1ZYit0V3VodFpteEV4R1BNdVpJclJDYnhxS3F1SlhnNlUzZVFiZmFLeVJHOE1jdHNVdHl2RWxYVm4yNUZFNy9ZRnFyaWFoQzF1SGVwTkhablZMenJpaWxyWmlhQWhhQm54M0NLNXZCWWRnVUtGY0FJdnhoUVlhOEZhMjI0TE00aWxXNnh5V3hmcHd4dmM5ZUxwRlN4VStlOTVaTmVhOWZIOUhUUUU0NHMwbFpsR3diTHdnSjlpSDlsdllDMWtscDRDeE15dFJTbExjOVpJdng3ZDZVK3RvQWt1T1ZXYnhObFlUS1hqbDM3UnhsczRobUxJYzUrdEZKQWQwZFVtVjMxakRnZHUyNmlHR0pxYzBhb2dBTUtkTGNEY3lyR2loTXI4MVFZYkgyQXFjaFpBZnBKOG5jL2tjVkxEaEZpaVpOS045S3BBdlZhcDVBQWJEWTVabnYwS1A5WC8wUlJJcW8wOEhmR1dHNDZjUEI2VlN2RUZvdUQzdi9ZUEF3eEI1SDl5Mk5XeCtLZ1ZMS25xM2oydlhBUkRmbHc4RDBBQVA4YVhRM1dZK1B1VnE0blhXYnBkSGVCWnR1S1l4VGtUaWRwOG5GL0IwaDQ2MmpxZHlJczJndHhEbkdhTUg1T1IvYUhaNW9CbTV2RUxjbUg2YUw2RFBhTk1wMXBHQU84em85N3loamZKVGpzU0RPVzdXaXpsSVZDVG9xMlhIQVhpalBnVzBxNThoRkZFUEFVUDNJNy9KejcwM3dZR0ZVU3VzS2VRWnh5TVJOYkc0Y2dDSnBYeWJ2aEtPTHRkcWZtbjQxK0kxa2dUUGt3SjVJRStoKy8xeTJRdFdLdnVua1FmdnpDMy82MU9WeGwxN3N5WVkxRmVCNUZpRDhRREdmWmpEWloya1psWlgvZmVIN2kwL08wNHNmeFVFNDZjRlBrZUwvSU5GV1JiOXlDVlRzOWhWSExiK2k2a0M3ZWxLc3FtaThBOTRrYnQwK3hIVjZxc2k2RzNwL0pJTGl1ZTA4UVBwRVU3dHE4OHNuSVNxZ2tRKzlzY2V6c1VzOHkrd0JScUN4aVZSRHFnd3RsVmlTbFVmcE8zKzZoTDF6ckhlMGgxaUhRZmhnaVlDNE5XNWdWb1NGYURGV0lpS25aMWlxK0s0VHM0Y1pPcnlDMWhMZmMvcGl4d24rc0tkeXpaTFEzWCtjWDN4MmhFdFlBdHZncXhneksvbzdUSVBLSW1rNlA2eHVvRUsvYk50VVQ2ZTdSOXFEOUJWenNQQzhtNlhKSkZOcmkwSnhOVm9vQ2ZjMXRPQmhvVnA5YmRHMzljdGpmYkpQRVNLT200UWlUWmFrYXlzQkFqZ3ExbHBKM1Q3bVJJYnd3bnBuWXhsRVZYdFdTQ3ZqenZmYmRYcXd0SVUxc1FzdG9NaHVFQ0pHRUtKYlN2OUZBZDVqRjV2Y2ZGTHZMd05icnp0WnBqNEEwRE9EUC9NWno4UXgzU0ZSUDk0Z3lSOFV5SU43ZFdYVFV2dEw3b05wNG1hZDdWbFcyZlRJRkpkRkxPM2YrMXR3aDJ6emtxYWlZSGY0UFp5SVdrUFh6UVJIYlptZ09RcXpxa01ReGM4WE5KeVNic2ZDdzhFNzNXMUtvVndPbW1SbGdTTnJlc2VkU3NwMmRHOG80UnphcC9QTHdmRThteDd5azV6YVl2N2k4c2pRWlBFdVB1SWU1NFpxRXdlS2tWNE16dXRGcS93NFlzc256U2gvQjNPL1JOMWlGcWFPc01KMFVYRDFjSjBaYm8rdWFHVXVRcWY0SnhTZTVQdjdzelRvdWFNUlhsR2JoYnR6YWp4ekg2dWJiR2JpbXlZanRJVk5BZzNxNlJ4TS9BQjEvNEpoamt1d2ZPM0xEeW0zZWMxeklCRWlYTTM0bTc3Vm1EYjg1bDRWTkgzdUJ2T1R3MXZFZGRBVjVjelhxOHEzMHh4Qk1DKzdPNnIxWjZPZGtYUVZEWk1JY052Uk5ucENLN01MWHJBQzMwTlpKU0N6V21qaXgza2lEMVcwa2hyTERGd3dwVnNzWmdzZ1dKc1lBYXFOY25MNE16WWUvc1lCczk1NG82ZmlUTmZmTmp4dll4aThVRHBRY1BLd2RQTi8zSFVTZ2J3cXhhajhTMjhsUk5lS0hORGl3c0hqUmFHQ3htai9mSm04RVlhS09Oc3grY3lSbVJIUmhuWE9YT0lJOXRSa3FLRTdTUHAxU3lqY0R4VFlXZzlXVmF3eGFjc0FkWnJVK25NdzY1WjdVcll4VmprT295VzYzdWorbDJ0N1FvWFVCZ1pycjVlM1dFNDNyWjdJRE5FMlcxS1Fya1YvdFB1UWtDVXYwcDhXS1N1VUROQnBWZ1VMa1pTMzhGUkZMdy9vOWpZL3N3OHAxZFZmMkxtNGVqNHlqZ1JjcVY3aGo0NTBBeVpLNGZwMzRQOU43UzREaXBOTncxa2JiK3h2ekVhRGdFc1hGU29MYVdibXJ3RkIvMHpBaXRqejlxZDhYWUxURlVZUG93dGs3cFdhQWsxalRsTG9GSDE5NEhCS25yR2RTK3JNa3licHZVWDcycUwzblI4RWp3a05vK0oyYU1yVUhKNU4zUDZJbTVReFdDdkhISllyZTAwMVIvbFVVQ2FRazdYQmJESGNnQ3VnVTFra08zQUl1Q3RVN3p0NDYwQm5YVGRKNXNUdmhPZUFkN3NxR2crbW1RdnJmYlIySFE1N3V1ZnNiNURPL250YnBLbTJGZGcrMzA4SlFUWWFON1U2Q0FvNzYvWmNwVXRibFdBUlFheDRrRDhIUnVYSTF6NDIxWHgzcHpLQXJIdVNwR3FBYlZnaFd0anRXUUUrYzgyZE5xRFR1MHA5cGNEWGRCMEFPR1dGZHhNYVNncnI5ZDFoTUdUY2dLdnNMZjhidkJDN2lSMEEvbDJ1aXNEYktvR3F6OVQyaHFWMUh4L25JanJhTHZMaE84eWVPRmlvRC8xb3MxSjdNQ1EzVVRJQTVabHZucVZxdEZJRkkweERXNUZnWHZUam10cDl3WnMxbFZoYWljbWFsNWwrUURQZk0ydy95K0FRUUlCQUhjRnpMVVVFenU5Wkl3ZnpMK25tZHEzVWsvQkdNdVd3ckpHQ3F5MGEvRk1abEhDeXlYRFFMSThHd1M2emNIaDBLVU5IaEF3K3Flb1FPOGpFU09kVVNlRzBDQWtrVmtHSVhraWRsT1RyaGNXY2dMZmF5SStGN1V0K0JKdGFwS2xQZUR0RTRFOTVITnpnS0hEK2E1TG5BVXRFMGc0ZDdEdElobTJvKzZac3RmaVRHd2YwUU1CcGQrRFhkT1Y1dUd2MGdzdnBzL0x5Z2dzOUtqdkJFUW1xWFlnRENXd0Z5U1FUaGlxMDNOYmcrYVdIcGxqQTl4aUZnbGlmZENuNEdQQ1VkMXRRb2Qwek1RL0VuWmZQNUcrSVorLzduMUJlYWZac1ZhejNubDh6eTY3aG9ueUxaM0N4dkxpSzE2eXZ1ZzBOUG10ZG1CVFdTVStPUHV5b0d0OWRtcUtlNlF3NVlCaHVVMFJNU2VzKzJpVGFCcXFQcDZlaGdDeHBnUmExY3djcmJwcHhPL0I5MDdCUGkxbW9RaGtwU1c3dEdjbi9XVWl5QkJsQUFHU0FReHBNQkFqUllhM0hzQlptUU16c0VScHZQS2N6dlQwbHB3Mkp2bDZDQ3BvcWRocjl1ekNseXZXSGtmbXp4V1pNNEh0WlVFUWR0bHR5UjV2eXRmaFl4WjFlZGtGSFVJUlV5dElMVUFSd1pDU1ZRaG9lNE0wWGxKSTNNTGljMFY1eE12VDN3RUhnSS9lMFc4VlBGYlduZlg1QVEyOWJ4UXdDVmdUK3VKbjdYWml5MEVPY3M3bFVxTzVTeHZ6alJtV3U3YTdEdklIeGxTNjV5U1dHdGRFaTErR1lRSGJ3bW4rbjNJN1g1NUZpY2R1TlBTMUVBWVB4ODZ6MWZiREh2Z0FlUER1VnRnYWpsWFg2NklnODF2eWRIRkN5UHNjbGh5TCtkb0pJc0JuYTVDNkVhdEp2alF3Z1B5S1E3VzFhZHR3ZjdLSTM2VFFPUUNOMUZKclVGTkNKQTMzc3NnQmVBaWppalR3WVIyTzd2QnBnekZ5OU4zT3RSOU1nTjBSNEk0aVF1QUpDZDVYM1dVTzhOYStyQ0xjWkpBSElNVTg0VUZ1cXlDQXRSNko1Wm1tNk1iTFdDWjQzVzlmS2RxTUF3bk1YMDVodXFiUW5OV0owYU9Obmt2UmJqdEErUytGTllDek5YcXlML0VyODlnYlJ3dy94UU9Jc2hpOE11N0FNUm5VME5hVlRSbCswa1A2NTNUZi9haVY2SlhiZEdqY2pOUU9MQ3R6NVBkblBQZW1zQzBMeGpUNXNKcUJ0SC9kUXoxbEJpYTNVUmxFWlArS3VlS21mWHh2bXp0V2RBOGdtK2ZnSEk2VFBPTURCOS9NMGFNMGg1emdCcDFxRkZ0WllaeVlTWjdMY0M0dWtBd1czZDFJbjZ1TTIzODdBSVp6dHVhNWw1N1hRQ3ZvSnJ1N1V4WFcyYy91VG0ya3lSQTVXRG0zdDBjajFxV05UaHpUWlhxc01KWldFTUtLeUFzUWJaZVJIQ1hWcHpTQjlZQnlTaEhwNU13cUtEZlJjNkRVcFM2T1BYSi9sSWxSZXMwc0FWcloxUWFMOHlmc1RaOFRSQm11R2FDeDFRdXcvenc4cFNuNG9oMG0wdmZoRWdLZm1DdUoxYXpQc0tFN2JoQU9pNFI5ZlBvTmtYamhjQXJSejRTdzcvenhOSVFGSHZUeks2OERDbEdOYmRnTTZRcVlKcmdtN3RNUVFiZHJYNHUxRUYrem5UUGxLQkdDSk5sUDFpOEJNWU5EQ2xhaVVlVFMvQm8vUG40eE9ma29vL3prNTdVNjdzdkJnY0tBb01PVVVKRHp2MndEOUttL1UvbWdPeS9meVhaa3l0OHl2RnREdVdOSHltbnFqa2FZWmh3UTNPUEU4MWVsdjlET3lzZjEvNCswWUJNa0ZZQnExV2VvOHN5MHpNdmpnZmxTWDNIS1JvWGFZRTVQN1duTHB5Nm1BUVRSSkw3MkU4bjVZWE11RTRuRElZRHEwUW40bEpjOTAxUElwK0s5S0Jkd3MrdXIzNW9tZEhHVGpObnZRRHFSUFpIRk5nTjErcGt4SkNrdEhXNTg1c3dwRklqL0dQMUlGUXFMWkJHM1VZYjBvbGErQWRoYXZqNkRxK1BTWmdPWnV2UjE0TEdFcmhsTDJIb2NES0lXUUxkNFprQ3hkYmpxbjU5MlAxdHM4bUtBWThMajE0MDlMU3ArQ2lhendVemxVLzM3OG01andLM09ENXhTazFWWkVSbFNORHE0Y25MLzh5OEx5eTBtSmtYQ2s4WVlOU05wZ0ZDd1dHYVdMOWg5MzVMRXVnb1R3azFWcjhDOVJISDgrcGxYMk9yUmZ4eWFFZSsra0RuZUM0U3I1TTBXUFJYSkdwQW1ucERWTG1VRUt4K29qem16OS9iMjlSMGRoM2hJRHBUU3hpd09sNFFVSHFzWk5Mc001OE45cjQ5VVdZUXRTOHJrTVg0SHJ3a1NTZnVZM084bjVpaFBUbDNRSEdudHpGTjdyQ2RmUkt3aDFXbFJTS0NaMzA1cDMxZUdQbzhkdUZ6V3NFRC9DT0FkK1JrVXQxY3NPK3JsdjdVMU8zTzd6Uk5EUmo0Y2krWG5TSUFFY1p4RVI3aXVzTDhUVDhFQm4rbUo3aTl1WCtad2RqaU94MmFUVUQxTmdxcWNMS0ZYWGI3OVVXZ2lEUUFHWnozZm9mdGFTTWlCdXcvanJtbVYyOXlKdWZOWWI3ZC9sOURxRkJzTjF3eUZaUEVWSlZ1WEo0L3FKSWNkdVo3ajVORGdNbjl1dEo3aFJMQW9DbFJsMU1idDgvUTV0bE1NTDA1T08rR1puaDJ1REN4Q25FQkpLdVdMWjVxSnBwbHo5STZtVHpON0hIQUhWdlZuOHExU1VEVHE1akowQnZsdHFyOHowTjRvVHA4ZGRDSERJZzZwS0R0VFI3ZDl0SHhEMHF1MnBiM3ZDZXZLdG5WL0NoMUV4ZjJteDB5Z2lNZCt0YStHSWw5Y2M2SHBzSk5MczVWUlNBWEd1V0RLbnFjSnA0Z3NFZkk3YUgxbEJoSXRrY2NYYlN4WklNTTVNK3Q4RmV5dUkwbHAyK2pqQkhXVDRWbituT2ZkRVd2K0M4YWRFaUdhdWtoVFJzVi9KNU9uZjdWWFV1L1I4UUxwZkZBYWFhNnpkOHFVNVBkeXFSR3lmaDhVdWI2cUVBWHdxaEFiZkZHdEZsZGdTZ2pZTW1UUDFnL0RrUWVqRitXK3hPVGszT3hXclhzbnE2VkJnRXhkM3l1UHZlcUpsOEVPUDZqMWhwODJuTXBmREw4UExDaEt5OTJEUE4yVUJuTzh6dlRYU3BURGFoRVk2UFZ6M1dmblRPUXA4U1RJdWt2bkZoa1o5Y25QaTRKSXBreHNWT0U3QlZtV0tvbWpHRTUxOXk0RVMzbnJJN3lyTSs3L00vdE9xa3IvZmJSdmRkNmdtaklBREJSYzhjRTMvSmQ2QnR1Y2FnaGtzNE1iQmJDSzBCYWFWanRKdGQyOCtNeGM3bWRIbUV1Tmw2bmZ1L2Z5U20welluTFlXWUMzelI0OG8zNTdiNDhHSWlkU3JpT1dMazJIcUJzRHYyRUJFY3B2SWptRWM5cmhxekxPVE0vd3VIZ2FVWHF1RlVrOTV4eTNVR2NSZlFCL0lDM0hVY0Q5cTYvaDIyUkdtVFlnb0ZjQ1E3R1ZlajhEeUgvQkJJUENPam9WT1NHVHUvSEdoalpBWDBja0xtVXV5UG1LQUJzMHk4OXViL2ZOT1RaTXNpTXhMMlFvbVZPdndkYmhXR0R4N2VmQVFsclArUzNVY1pldWhpRW4vUzBxZ3ZUZGJ1MWRaS3huU0F0cFhiM3U2QmJ0STZQdU1EKy9SQTVvcXNqRWYyRVFFenQ2a1pUOWdyMDJVeWRncTY5MG9rWkkwMG9xd3JxOWNXWERZVjE2TjJRelBiWUlGNWR0RHFWUlgrQ3VEdllRUmZBMVFmRVRaSW8xSkJxSnNHT1RtMjVkcTY4bFB6bXBaQ2lmTmVEb3R1UThQY2kyREtFVkJ6VkdSOE9RNHRjYW1xRVI3bWx4dnR1a0Z5RlVLbFVwNW9LcUlkN2REcUtmSlBHWFNaMXY4RlhuU2FSdCtsajA2WHd0bEl4Q0lldXF3bGE0dHNlWlR0R3pST1haeWpTdTFjMEJoZlNzSnl4UU8va3UxQnNKU1dZays5ZW01SUNsRHRaQ2cvU3VxWWdrTWxpbEhidzY3R2JrOUpJUHhGVDgxdytub2hGbHRTL0R1QnVqQnRNdDFUMCszMy9GRjdReVFJTmZHaGg4OG5LbHRlOTc1N3NTaFYxMklhRWY3Y1FlYWRWOSswTWJHU2VtSlhUczdOVkh1aTJKc3haNlBMVnpQNitJWXZ5T3NmcENZeDE2dU9ra3lvTU5GK2lUL0wwSysrMUs5NEtDdE9KU3lJWTZ6TTQyWWFNOVpDZXhVb0lPNVFXVTA1RTZFU3crYkJpS2prenVkWUdiQlNvNGZSa1VXZWN5QkpjZHo2Tnp6ckNsaWpSZDBtcG1pbUZqOXo2TlBSRUY2UHhqRzllNUdkRW5XYWtDTzVyWUY2RUJtMHR2SDczMk5NU3RLc1JDN3pLV1FCVWNlSHFrRERMUjd5ZjhlbmRQV1A5aFRBSG44Uy9uN1E3UGxrMFY5N0h0YXJUampES2lDR1V5a0gwbWVYK1ZVK0JkVWNkcnlpQ1FXZFh4Z3E5SXZZYW9qaDZpU0Noa0VsUU9hYmwyR2xIMTdCWmIrd2tSYW85T0pkYStEOFA0Zkp5UjluMndTajg1Sk9lelhMem5MYjl6b0t5RGQvTVZJaEhpZHY0amNFaW5tdExNamg3Rm5NeFFNNkRUdmFZdlduaG1reSsyall3R1VCbFIweFBnZWNyUGJHTjM4NkdnSGR3bi9CcE9raFE1MjFwcEordFlVK09QM2UvOVVSdnI2SS9MRHhPbDVscG5MQ0U0MzZFUS9CdTIwY2poSlRpSXNiZnN5VHU4RUdZM3UxQnZlYTFYbTZjanZZTVFOOFpTVG1ONVUxU0ZhbjE4YzIyMkVnblZHNitGVWUySHlBNk1kZ1dnSi9Tb090MHBHTnVpVXBSdXlnWjQ0TGlDVWs5L1FQNVhqU09lbG1Hc1VScGJ1RWZZOXEzWldhelNoZExjVEtIYit3cldKNTl6MGxGMEZ4bmxlVjlEWjJSNWlWNUo3OEpEaDFXWWRCY29lZTVvMTMrbmpjV3JvUnVzQmdqQ1FZMHFIRUJoSnphZkQ3c05OTVU4OTVNbDdlSGQ4djZuN2VnbVhQNVg1UysxN3ZWeGFrTzVET09XdEpXMXpPcC90Nkg3WU1QbWZNUWNOTENUSThKTkwveTNyWnBCZjF2aS90ZW5jVjVOWUZReEZwUXI1c1p0YXloMVU4NkVpSm96Y09pNFk4MFJQL0NjMXZDUjhxOTNuZ2dRWWNBRVBCVytjNnhMa2FySmgyQ2N4N2h4c3E4c09NZ0JYdHREL1hQcis4NUFHeHZZOElzUzlReVNxVDczZExab0F0dlFhYU5TS0hFUEdxL2ZNYXd2RkM3OVVHNVpiUGJaOVhNRnl0bklwS3ptOEdMdVNXNHVNQkh2aHVmSy9LWkpnYW1idVBteGQwa3ExUmxQUXBnUStPTDkvZ3Rad0c4bTk4VEhmamUvcHcrZ1JveCtHU2h0L2RxdFFxMjFybE5kOG10QTlqb3dmWGlXTG5idmV1VHQ4M3RrOElhRzNVNGZrOWRyTGJ0Z0tvVUZseklxb0JQZWpUaWVhdmdFcWdtOHBwaFFISytEYW9rQXNNcTNSSGMzZGFoa0pPSCtlWjZaTHlUMVJlQStta3FUeXBuVE80VWU5VmoyMHBWYlRQOXpVdVhlNTBDa1Z2dWhoYTM5dFcwY2hXbXVFNGZXc3F2NkZoa2R0aG1YU1lxYXFMaHlXNlJwc1E1aGZKUmNGaTFwVXhZcGJ6cVljM3BKbE9SR1F1RTdjZ2hLUzZRdEt3SG5kZlhjNk1yU0Z4anluaXZHTWhtcWswSmNkOWtVZlFvMEErZTBiMnBlN0hOZ252Tm1Ob3Zad3dPVUJkbEJ0bWpvelZHOE9UUTJZWWF5YnRPK242ZlRiUTVUWWxja0hyUmYycnAvb1ZiSEJhbHUxTGdIb1FrMXBMNWhGSWhYaVhnbEJ5NXRPczR1MExHWkhFcFNUUEllUWZPNWI5OHNJNWlHa1VKSEJXbTB1alRBVi9IRE92b1IwdTRXVERvVUx5OFk1WG9yb3ZaQlVaMTVLTnpoa2VjL2R2VllkUFc3Y1ZoNVRmV0N6ZkZvU0ZLNk52SS9aSUZLVHg2bzFTWlc4ZFUwZHFsbmVKTVVMcU5tSkxjVkVQTjBPL3AzMmhKV1E1TVFqaVFTalJZN1lLRytYdFFRNzNHMmF4ZmxmZWpZdFhGMFh4L2d2YjVpRnRIdmdpczRUQXBEQkdmM2ZzdDQ2TURiRUVYYUR6VnNOenFGaDVZZExsdXpUVk85U2Q1S0s1VU1vYm9ubi9uL2VPVzI2Tnc5VUJJVGR4TkE5NDF1Y21vYXhwb1QxRkhpOE9IODBpK2gwS2tSNFVqSTZpdjlvR0xNMTIzaVIwNW8xb2JhSXlVU3g5K3R5OVpWbm5jdVdmWWgrc2gyU25NeGZWaEVJZEd5OXo2b0FYSlBLOFlHVS9UU3BEb2dtSk9mZi9QSnFJQWtwNmlqZC9Xc2NnRW9vZXNPbmFMOVZXUUxOZklJN1Y5L1BLSG1GMXdwN0RRMGJFSk1qaVRGZ1lBZy9QZUNNQWxwZlVNeGZzRFNQdkYxRk9tZjkwTnRvczBlcmRVTWdnMHUwV2dVK1NvUkM3Q2dIcE5iRVluM2hqWE1SQmJMVXJ0d1huQzBOQk9CdncxQzdmSCtVV1NGT0oyamNhUGVHVEFJeE96WFFjcDFuNTFsT1JuTTlLUm9hbm5hWUpFcXFnYmtBdGNZdUZCbTd4OWZRL3VycHJMbHZ2b0Q2Q01ES2toVkN3TlRRbTNFdXdaY2RGV2ZXQ0o2djQ1RUVaTWZ5MFpUTHpxcVU5cUc3TnBLM1JPbGtmRUVxOG1wYWh5S0VLdVBrUEJTaExsMndac0d2WklHYWU5ampneFZZdnU4SUt1bWo0N29kRWNVUFpJeldTa2V6UWF4b2huSGNoWVpCczNpQlRXOWZQZE1wTHQxSmhzOFVpbkRzWjRqL1BIVUdGZE9NejJMaGExdENqRG9QTzV6b3htR3dIbVZiaTdnWCt0Q3hJYU5CU0xBelNpNHpPVXlTeE9lY09qc1pUT1pSM3RvU1FQZ1A5WUpsT2xiWlZCc0NFaEJJb1QzR1J2OGh3bHNYbDVqWG0xQmlIK3IvTDZwcFNTOElMeFZVTEdFU3lGKzVEQ2tvdmhld3N0cjQ3dDRQR25BS0tRVTJMK25DbTQ4cUdybGhaVXdJcmNXUWZsemZkREZaamhZclFBVzJiWmc0WWhoQ3hnUjBNY2d2a2dqQU5ZTjZQWjdNdnVRRm5aNElZWm5IZkF4Y09CODFCUmJoUDhaTVZibXA1QkE5NUx6enRwWTlMTjFUTkNGV2pFK1lUU1hhV25UU0pjUHorZm1wUGVGU004VFNUQ3lYRzl2dDl5K0l4eUVjUW9QWmpnZFpOY0hKN05RY3o4UmE1SWgvV1NhblhKYTZxOXYxRkwyVVJIRXZwUVJvVElwQlNPelMwSzRwTlNUaFg0THU1SzJXZjVJcUtjSkEyRGkzVnNVdmVwK0M0VWxsckFpZlZHOXdSUWZ6STg1aTZyYnBQbFQ0M0lIZFFiWFNJcmZvQ0JBenkrL0w1Y1JSa2ZDTWpRWW9NSnZBbU1TK0tMNzJTdDl1LzNZZWdDZUZnOWpPVFJHeDN6ODFGcUxhTWlqSHVOeWxwaUN0aWZNaXFHcm8vQUdQWFhueU9NRnZqSkFCTHRTK01sUkJtRWtISUtUeEV0Q0RPL2MvTDBRbmNxOGtlMzlCUXlBeU5XSUpzbW14cGliaURXL0dKOHdRQndIRTN3UTZVVkcvY2VXVUNELzVoWEcyMHN4SW5oN2pzK3d1K2xwMW5VekM5bm0raTVCMVNhdzg3TDAyUTM5c09iRE80dHlKVTlNTHQ4U2tDU3RQMGNZVmtIT1JaSUxOWW1GWVlNcFdxUEFETVg0WTRHODlFdFN2VW9mN0ZmOEVxUExYMThHYlNpVmJiUmhGQkZPMWNTWGxYSk82c0NyVHppYndCRG1OK05YQ1VDVFp0bE9XYmpmcUQ2SmNnM0M4aXhHTjluR3prcDAzbHhuWGI4anFtcVRTYTJRMnYvbkkzNE1JWkhsVmhyaEcrNmd1QVNZN0twZTJPMGdGVzhZNzVTVFB1OE12Y1RNM2xBSHV0WVFMdG5vN2FyOFlNZFJHeTVzd1l2cklHNmtxbjBudmdEdmM4QkFXclVaTzVOOTYwQlMxUFBmeUprZHRxUDNiemNyOUpNaUpoYk1Uc25OYUZZUXluQk5mNDNhMlRwTjh1bVdEaVZwbU1TdzhXRkl6NHBFTXJSbFhaTEFPU3ZldzBQemd0STJjVDV6dFA4NUViUFNvOUF1cGZyUUF6REFLVWJhWUNlTEQ4aG4yWWhQcGJXaXE2ZTBuR2pheVl0SDRROUNkNUZRY2oyRXRRcUxEMU5HTDZtN0tnS2hJOHNMZjU3T1QxQkV0c3gyK0NLMmlZY3FyNkJXYUVNMTkzTWE5V3JrNS9JUkhORExFK0E4MDJqTE8wQUZMUmVBU1ZZV0d5aytuYldoSlEvRFJpdWtUWXFCdllZdzEzUWxuOWtYUVgyczBxWllwU09xTm1ZNy9WaVRPbnluRXZ4NFhLYkMxbTllQk5GejliamdtSTVyNlhac3hoWHFxSk1JTzhhUEJNNzd2MERUVUFyQzBjalVINnBIc29kczlENlhFZ203OW9VY1ZPbEdMclppR3pRbXhEcUQzeTVMVW9Ec1NyOFlxV2V3ZmZpOWxFVDZsWDBhSFRWRGZXbjNnSThLeUJWRW5TU0x3SHQ2WWp5Z0twM3F4blBmNGZjb2hoR1dBL0FPcFJudEJidWJhcWxodjJ5SE5QdEE3OUdlR05INHBKYmtxc1VFeWdhdTd3Yk93UjBPTFV4TlZiZmdYOXVDV2xVa0EvY1ZQcmxVOHR0TTBzaDBuVFFvMENaR2FwcDZXQlErcjh4d1N3VkdHVTRXQVJoSE5pZWg5K25WUjNWL0tKS2lsQ3p0aGUrd0dzNjR5dDMxS3ZTK0pyd2JBbEt0VVM4WG94M09jeVJUZGI2MXM3a0ppYjJZVzI5MEJUelk5cCtxQmZFUk1iU2drT2JHS3BkTUduUmVmMWsrMCswNENpcVgrbGNIZlYvZEU2a09EUXZGL1JyQXpnVzVPUWJmTTB1WDZFdUc3YzFvT2M1UDJFMlUyOTJvN1cwb3FQTUpjTWE2S296cFdDZWxjVE9NM0dnVkF1NDNpVGpOS1RTNkRtOHdIbGJwdjRNY1gvckJsdFltVVprNlhNanRnYWpRQXcvMWgrZjRYazYwQ2N5c29ZaW5ZQ3M0c0xjT1p0VlFwRUY1RWdHeXVvZk8rN2locmR3YWVDR2FjTmpid2NNQzAyTm5lVDhNOW05cVd0WWhjKzNReEY1RThGbm8zcGJ5WHg5UmF0MmZ5eFpWaWM2aTZEczdXVGFIYnZ2VWZ0bW5oR0lIam1IUnRMYk9wYlo2TDM1cVlucU9STGhFbEg5Rk5JL1VOcVZqeUJsNWltSmQ0WXpvcW5PNzFkaGQvaWJKRy8wQTBRK3cyNTVyNitXeW1rVDByb3ZkeVhvTTF3ckRnVVR4NVZYSGVGK3MvcjNiY29SK3k5d3pOOUxQZ3VCa2dvV3d5S2FXcXJaVit1MVNLcEliVDFoWkRlcEU0SmZrbWFrMHBYVVhURnpwWjRZYzh0VGFXMlhVcXZraFFzQktYYTBBZmlJTHlCQ0c0ZGo2ZHNOdEw0RmtxQy9YZ3pBNTRESlFhelNlNE9UTnpCNGhJWVhwcS9KMVJsSjFmSW1yY3JLMWNUMWR6azFldVVoOU80ZVFEU1BIZWtzRkpkRGYzRUpDeEpzSmZIYUdOMWZTU2VOcEpvQlFra05GODVBRUs5WlJaWDFqUVBOeENyWFgyZW41aklhVlRpekY3bEJwSk1oQUVvTHZRbllnNXNPdFVtbzVUZm1wTkdXaUFDdmFwWmJ2c1ZDaWFWWTlWaWM4OGpPMzd1c1dCeTRaRnRwQzVrWnlac2l5QWxkRi9QL0J2bWtMdmRITWZHYksxMHpHZ2Fna2lJUWxlQ0lvVXhDYm9tbGZkU3ZTMERCRU81N0NvcVlhc3Bzam5xT0tFbmNOc2VjdzRtRU92WkpJOU5VbitRblVJVWxGcUFBNml1UlVxSEc1eEpZdlF6M3liT0w1eGxRTFdBYU9hV0N1YjE2TVRDUlBhOW5KcGxtbnhiVmxEMGpRMGozSFc2dmFGQ3Y4RmhaOERKd3E4MTZFckJ4THBaVDZIZ25PSWl5ZTlwU3NsbmpZbXdhdVlVdDlrNGRMZ1ZLSjhqRE8vSGMxcE1lMW1ocFZMeUNPZ2FwZ01oRzN1ZkcveXZoM0RYbVkzWU5sK3VmUHNmZkdXUVB5a0d4alNNcGJXaGQ0dXh4d095RWcvOE53bzVwMzlZWjUva3lXV0NPNFJ0Z21IdVg4bGlaRjcvR2FJK0VqWW9OOEpjRjJYSjI5Ym9nem52ZDU5aERpRmx5OHhJZUFEVG5DTkdkajBydUxKcGVuQ1d5R0hwY0E3SEhET0dHUFZ1bXVQSEEyVzg2VHhVYWtmdWtDYmxiUUpzUjl0OFduZzBmK0ExTzc1VWp4TitGSjZ3K1FndEdBd05zK3NhVzdKemNwdit2ckhSY3NYRUVHUDZkMEoyZ1FhS0g2T2hEcGU3QVF6bHJUUkxMWTZ2eEs4S0FXR21EL0VDNktYd3Jod0M5Szg5am9pZVJkTFduN2xaTUcxbm5oQTNtWWMveEt0eThqdytzdk1sMTFNdkdQaFd6T0lldEFuanV2aE00OTlOKzZxcWIyUUJBVWtUbjluZ1loUVE4cjhtS3dya0VBb3l5eXk4N1VYcHpKalZJUFVkelhkM0lUQ1BKOXU4c1RWajgvcDNhQXlNaEVXL3lsU1c5R2tOREdMc1JPQ2lOT3FvUjUwaEVncWtpbTl4Y3V5ZmNDRUpMak1mRkV1QkJCcGs3bW1IRXVHbW9mWXBaOFdSRVRNNXkvOWRsM1VTdjdKWDVYNWdXLzNJTmkrYmRReW1jWWtNVkN1SGU3QzBUeU0wdTVPcmRFeC8zQjF4cHEzVXk1NTBoVGJsMHl3cnI5RmVDTllTUnlMemZxR2pBNUpmQmh3dENTMnpOWnltS2ZURHpQcktPRk5aREJTVXo0bWpYNlVIWE5Weit4UitKMEw2Q1hnVFpTYjBwcUNDL2RXd2IwUVIrSU4rSUJOV0I1TjBML3JLZzZTU3JJR21zalI3TEozU3N1cmsvUFlDSmo2U0ZjZ0RmYm1hRW1Ld2tITE9wRU5VQ2x3aVpNSzdsUXZYWTdsNmpnNWFNNVhoR0FwWWZ0ZWFkUHhVMW50cmtpQmdTS1ZaTUJqTjArdWpVUisvWVZ0YTlsUWdINktPMm9YaUREb241THhjNHIyMGZTWk1wVmExekJETlJpNTFmZm5GTEhidXBWLy94Y0hUZjlrRHhLd2o3VUM0OXRPUFdHSlB4NEtsRGdNdFduSGpsWm95L1JMVGVNWXp5L0IySnJUWDBOb1pTZDJoenFGQVlzZzFRV1dDcERoQVo0UXhXS1JxdUdLRVdlby9NUGduQnA3UmxIVm1ZOXBiU2dkNlBTR3o5Vml1dkc2K3dSYTVDUllCWEdBVWoxVHAyOHBrSTl1QXhmZmszTVVUYkx4TW9TSk4xeUI1dFZuUkZwVzd2TVU4OUFTTFU1SWJVaVVjczhNOE1sOGVaTG5QdE1qSTRSWW1ZWmlYN1duN0hmWGN6aDF1RnNrbTdZTmpjOFExcGRMTGtoSThjSVpzUnZTVUtEeFVvMHhieDdoOXBMRlVvSkFqY3dsQllpNFBxNmVYb2ZTOE5sS21LbkNqNk0wbktVaElBTks5MUVoUWdJNUppRVhtcUl4aDdvaENjWEIveGp1OTZESEdrV3JiRHd1US9WeG80L3hZb0JoVjc0U1ZaMUFhblZFTEJIYkc3ZEZoNDBGSGJ4Ym9BUS9wYU5sb0tSWHcydUVhQWhKYktFWlVNSzR0b240a2ZkMWpWTVlHYklEc0ZtS1ZhQ2VwM3IzZUlXdXhiMG1ncHJtUVZNT1c4WE51eUE4Qk5pbEhKTGNjTnZDcmtocGVSU2t1dDA1NWlIcmhUSkV3RXMxbndtRG84K054MG9FK21UQlBHaVJuUlJiazhqNHZJQTNUWGs0cXJ6QTg3M3BoMHR3bk5UUU5ha1k1bWhFVkVuSEdiT3FtZm9qRm9JSEZNdHA4eUxROE5US2N5MDNWRU42c1h5aFh1TTlsTExMSTNreklJRmpmU2N2UW5TeldqOS9yZFB4ZnY2Z3ptblFTalJJNCtxYnBieE53c1lSMFFTRFFZc3liMUp1ZUt5MEFEQVBkRG5MWWQxbzFWcDBrVGFGWFFBZ1RYd0YxMnlhdjBwRjNBTmQ0YVFCL21KNE9FWWdMQ1ZiZC9EM1paT285U050TkNBa3gydzFWTWJCL09PbllzRmJsWnlBNUtqZ3I0eUtITVhaS1VmOGttZjNBK1l4NGxERDh0OWxnYmh4bUFWZ2xvbFFkTzFPWldqTEJWYko3alRIVFVpY2hFYTc1SHlhWXRjNDJqQlZiWTNwSW41akxPMTBEWGoyUUJwRWJkK1dDVjNGVmtuTFVpSUVMZVFGV1hoQWJNMHVUL2srZGt6bS93REkra05xVlZPVDAyd3dUT0lURnhLTWNUMDA2em5WOEdlTTViNndaQnVwcldXQm9yQ0gwRU96eEdYN0dRczc4NDNJRm0ySjJ6amZOZVZoNkhKVk5vZmM5TTdCeTRMUXBncVdSUE92d2h5dkNob21lSmZYNU5PdURqVkJjVWRTQ3AzMFJVVU1oTjZUeTVWRmloYkEzU1V1ZzBmVDVkNnM2TVdLMjZyMVVYeHl0T0tUV2oxNDdxeU0yOVNmT21HNEtDWHlVdWdFMU5Hd0tJNEtib09mRVJHTm5TUnkyNDVEdS84Y2xTVTBvbG1vMjFhT3NLWjg3L1kvK2MxUDR4bnQ5TWVQSUpIZUFkTU1PblhkNnNST1FXZmpyZE9NaXRPVzdMdkxjK1hYNXA5VDVYQm9DQ1o5Zlp5aFZUcHUrbmZaakpNbHlrY0Nid2N6N1g3ZklpL2l3K044SVl6TjJvUXFvdFdXek5mWGNaclZYV0paRTlXT2Nqc0t2YW9ReFg1cDdZY0t4dGpVVDVXdnJ1K0pkenJYbVBYZWppcDhTd2svVDVnS0RkSDBNMlJ1YnZ5MHZDWFFLLzQ5WDI4US9KTHZobGwrQURzUFNzUWVXMHVXamNHUXFzZXd5TXBZbnVKQ2lsSkFtL2NySGN1c1JKa3Urak1DU3dxeUJHQk9aL1BBQmk4R0FlbEVUK1VpMG4vaXc0aTF2WWFrNzR5SDc1eVVGUWNXci85MGFVK0tiMWZyY3o4Z1pjRjFlUkhwaWRkdlAwTDlkNVowc25BVVdMZHcyckRqT2VEMHM4MGxrN1h6Rm5WeG42UEh1Y0lwcWphQTdSa2h3cXFMUTVYajRaWUxHYzRLWGZEU2w5WVdRRHZOb0pXWHcxS2VNUlZsbHJ5dWJSbUdqcHVHSm5ncU0zdGYvVHluczdoUVpkSkIwMlZmNUJibTRqMHVzUHVSZVp2azFwNDJsSGVHQ1RJUmxVWnBEV08xanBEb2lRRWtteDkxT2VXNCt4M2t5VjcweTVhTTE1Wmp1RS9FbmRyVnZnZmtML3cvbVBlU2JVQ3B0UnpuQWhRdFVVRWtYaG8xMjNNbmNyalA2OEk1aXF6STFqQkNmNWZjZ1diUVpISktKZnQ1Q01DQlpCbFNFZDc1SVl4bktGRG9HWW92a2tLZFlHQ0Jlc3VmNkQ5NlhJRXd2cTFlR3BjMVRWRTAvaWp4UDdTZUlWemhTSUdVcXUrbWFkb0pJd0FKMmFydEQzR2FEN0Y4aGY5YzVxOFljWVpER3g5aXBGMnJTRXE2WTltbVdYRlRsRm14cVAyT0xmbk5odkdjQVlJUDk5WTlwVVRjeUp5cTRvdU91akVtS2hZWHQ2SnE0WlFRRk9meWU4YWlTUUhIMDJPMkRJanVzQ2RTRG1uM1JWUVVFNndPeDJRaFdSK25ycW45d2NRUm1seXM2YUtBKy85cFQxU2l0QlRXVkROUmNRdEkxM1ZQUmNvZVYySWVYWFhSZkVmTjdFay9HT0VYblAyMVV3MjNNWEQ5ZmkyVDVydXl0UnloNGVRc1V4T051MVc0dkVydnJ0ckRZQXREVzhpRmxOMGxVZllTdU51dmk3RktscGVOR2tlTTBpOFprQTRITnhUVGlZRHFPTEFhaGhMYTh1MVk5STEyUCtmNjBYWWhpaVZBcFJwNDMvOWpRN0FlcWNBd1lHY0x5cFBMcGYyOXE2SjR1REVEOHI3V2JvTkgxOGtkVGZiemtDa3loK1I0U3VrajRvb3k2eUdLN0Ztckg3NXNzQlI4STNzeDFkZUpXUnQvT25jSmFmOHBpK3lBZXVFdXQwVUN6VXk2YWZQM2pmemUzbUJDMDIzdDA1NFI2NG54S1ZYTXVLd01UUTNld2RXUGdtRU9SWHFmRVNVWFZwcnJFK0pMOWZQdStSMlBFamtBL2ZEbDRSOGI2enpZc3h3ZU5nQThmd3JEaS80YTNCQis2UnFCWkFYM0MzMXJYWnQ2cExESjROODI1bkg3dUI2VUJQZHQ0TzhwbEhYanorN1liR2tJSHBaUjRRZi9FR3ZMVVBjVHR5TDYyUnJwdkRaTEpsZmllWXJMM25pTFZTOTFUWCs2bHZ0VHlaR2ZJN0gzaGtCNlBzaldNeEZhcGk2NXFxYzJMVW5DemN2WFJCOXhjZTV0em5qZGRhM0hXTHA4bEFyblpucWl3bUp4Y0VXSytqd3Ywc2VLcWRCWXpvZVcvYmMzOW9LQkwydXB3MTYveTNEUjRZak5Td2s5MkRQU1Yxcmo1Y0RMcjRRb1dlNG1OVXRIbW5WdXFwOC9JcE52RjVYbk5DSGFFZndHOEE3OXJnMlJNdnhpYXRzMDJ5Vi90S21hTEVIclhMcFc4WnFTUGU3S0tNQ01OUmFHSmVqS0lERG5jOWFkNWlmRDc2N0czTWRXQVBCVzhxb2lPd2d0NVRiUlVLQnhmMUhVcTFtekdLc0V1Mk1NNGV3WmI4MzZvRU5yaHozRnlRWEJvYzJxc0tveDhERDBweFdVZHh0RHk5QVV3dE1ETDBSWDRtdnVDVlMvV2NUQmJ6Y3Fxd1orMjlWV3ZmaGRvVXFXWUpSSVNGQ3RJSG9aV0RKczFrYTV5dnZBVUJiRE4wdVVySkdUdmlvVkJxbjFVWkxDSFBKa1l0RkxQVklIU1lxcDQ4OGo5RC9JU1pDUzRRM241VXpaYXk2S3NKNjIvZ3I1WDhIcHcwSkFYd3lsclZkVGVvM0ZQUmd0eWtnWlpucGIyNGlMSkRndkxhQ1BMYXhXdXBPeHVqT0htNnhQSlhiL1hvazRqeWZtL05aekErRXJwK3FXVjlFRmdkSWdOVFp1S0NqVUd6UGc1Q0pmVmtvbDZjSkRoU200QUhidlVkVmtkRmcxVm5WNUJ3TlRmY1NhZEJxZVBMZlVUcXRoOEpRRmtoWTZ5VDh0ekZoTU12eUJWRndsYmlXQTJ5V21mTjlCanhYTHBTRmQ4Szg2THdUR1Eyd3JUUW1jUDRzRGZncHM5ZHNRUXh5ekpPWVk3UmV0SW5VZjExM3NkcktpZlBMY2xSRGZvY3RKUVpPMGZBWm1JME5tVm1SQjJYT0ZKU1pFQzhETC9GbXR6SHhXdis1dWpIcDBlVlovbGpGZHBobkxEOWpDWUFzVjZINWQyeVhVd2hsNkE5QzhhRWZGaDJmTC9kKzEwQ2RCWUNBSVNTZlloc0FrdU5GaHJwZ3p2cktFK0ZDVlRyVldSVGR2akdoeGd5RnhuUllNbnc0S2pPUGJUTlhJQmZ5aGNoWFRVR0xqc0dtY1QyY3dVSHdjVGNyVkR2WElLeG5oRFVSUHU4S2cveXE1d2x4ZHBjODVBR2tRWHJqazREZHozYlpkZG1DY2NNckJvUm83c3ZybmpiS0h2UnNLM2REVDhtSTNDTEJsL3h2YzFWcU5BTFBhbEVNN2htWmJIRXdMUDNGMXpKbUh3WkpYdXdWKzdxdXNzSGkxcUxHNXZ4VGgwQ3R5ZEh1aU1HaThIcldOK05hWWplM0ZaVDhZUjFuQ0pXL1BQMkgwTGt2THZvZjdqeU1kUllxUFNOQmp1WG5GZkRvZWJlRFFlL2NkckdiY1ZXZHFFd20rQ3Z0NzUvME53eTRSMDhYZnhFUkNpMS80ckUrZExnZkgzM0lvOFlIQjVKMXJXVlhmdkV3TFhzUXJCMm5NTGllYkc1Kzd1Y3VyZkZoR1UrSGpOUW10UmF1ejZXYTMzbGptRVQ3aW01VXJFeGxtVkxuNUZJdE9TNmttcGJiZDBZN3hWUXFqNnhkRFNYN2dEVjkxMEV1cXY0Z1Z4L1k0cDNZY0lJTjFIdkNmbTJYY3hMeGVLTnZ0NDVBc0tWRjZSTFdIT3lnNyttbVVzalVtZUlweHFySGdOcG9QblZ2bGFIcHlWU2k4VGR2M1Y2KzQ1SmZjanJUanFDUC9DcnJBMXdkMXdBNVhFYlc5cElRVGt3SjJQMWlSdHJYTlFyMG5hUHZhM20yZTlNdGpXOHpmdHllMkUrbWRxOTV1VU1QOHJreGQ4SkNlRVVzVjRCak5mVFcwaFRrRG01OE5RV3duUm41U0lTcEErOGZMK2JWcWNYWm8yaEhQbEdPREpGQ2dYZGhFUXJRL0pZTkI2MS84NFdTYWo5djIyYjJXTzBvK1pwMU51eWpHbUZoUklxTzJteXJFdUdLUGZJOVpYRDJ5SVc1Q283WWVYYXZycnFaTXRvaERSMjNLME1QWFNLaGZaNnFMY1FqM25yUm15VUt2aWZIcTFWdSs0RnI1TllYTXdHMjhQc3ZVMEpyamxMNE11ZmQ2MUpQQXVEOU9WQjBza3lzSGpHeE1sZ0pmaUtPcjdBYWNEOVc1a1NrU0g1cGZJcjYvTVNXb2V0MFY1b0FGNG4yWjdrMWlHU3ZsalBKTHJPV2FiVWx5ckJKZmhkSXNtNmFUUlA3dWE1eEpKS1NScWdUSTQzaE9yN1BmanY0dElpWUU3VTlxSVA3bzNhK25KaEZyOHhEUXpkeSt0OVg1Z3J1MkdGYldnb0Y5Qk0zZG5hRTdQSFhjVVBwTGNpZU9NVStvT21GbExubHZ6Vzd2Q2Z5NTlvYVRCcTJMN2w2Y29RT29mUXA3ZCs2L1JYWmowUXpDaUFhb1ZlVnV6NUdVdWUzaG52U1Bhblozd2NhUVJCejdSdjJJMVRMVjRKeWVoWHlWSEZoMFM5YVF5My9XUHpFblp4dm1mM1BqNm9uTHJuRDVuL3lmdGpCZ24raXJBSVQxY1o1MTdweXFaRzVrNUpXMzMwaXJpMzlGYUN5TGdMZ2FBanVacGdsYU9CN0wvUitoN3pyWWt6OUZRSVRzRXY4d0s5TkswMm9IZlpiRTF1cmxwbEl3VSs3QmkrRkRaMmVnbWp3anNNZ05VQUlQVU9xeTFISGozTkovWWVybldDd3lkVGJjWFFQdWtBWTFMaXhUV3BaNmNzdVBMajR2ajNHU2p5c3VLNHQxRUlvQ3NjRUE5bjlzYkp6UXhlcSttR0tyT05LQ3UzcE9Ta2VUK2l4TTd2bUxjR0JaQTYyZVd0T0xRWVNpa3lpcVJKcXVJK3RrWEc3eHdPbVJIN0FzQzF3ZW00K3B6anFGaDd4bzZpK0hiWDlDN0xWa0kvQmJNby93M2ZnamtVbmJIaWVjOW9MNk9lSHVEbHhaQ1ZPTVpOYzdBOG1SeFVnLytjWGpMdkVzeTBtVEpmNnczeEhFUlRVL0EvdnN3a3ZCTlIyQ29XK09Va3h3eUtRZUV3RzFhMkRjWXVnU0VRck5hUFRMSjZSMmF3b1NBNkZmTjh3OTcwQVVBMTZxOGZkemVqaWZqYXlqeWx4TjFHTWZvcUNvVzBvK0tEaXpZRStnVUF4a2dEWVNvaktreThneUtUNVF2ZzlsYjNtS3I2V1p2b1ZhSTNxY1NlamhXWjAyVXF3UlJKNGVNZXY1KzR2dk9VQ1Bqb3NTM1pRTE50VW9EWjlrd2xuODJDMkdqTjJwSS8xblcwSXcrd2pLbytvUnRRSFFiZlhmTExCQURLcUFnbXZUL3ZRN1FtZmFLYWpyL3ppZ3NXV0NWSE1WS3kxMVcrVkdyNlUzM3IwNFBGSktaUVJxMUhjUW8yZk9uTndNdks4eW5kSVJBTFdyMDFPa0p6Y05ic1lVamlvcjlUbzAyV2d0aktKQWxsQzk3UHRaN0ZleTFoS0l4MnZNZmJ1ZU1zTDQ3N0NaVzVzSzFVUlc5a1J0VjEwL1FNTzY3SEJQWDJ6bXJxcEVjc1o1eGE4SE9WcXprblFYSlJ5ZHFMNXIycmYrS00raGlldVNCeHVObW9OZE5ocWV4TStOK25xOE9PL3pQVWFPd1RaNURXNDhyY2s2M1pEQkNUZ0dtcUJDSGsvelZKYVl2YVp1Ukd0czU0U0ZlU2Q5cEppRCtCQXUyVUpYOURESFlUTXBsTkxuVmQzVXZvU2JBN0xLVWRPUVU1OGV5WVF1N0ZsNkJwK1dkV0VvNUtjU2RNQU14Y24xbi9MUTdPc2lEdjRUZzU5OEdmVGx1Z3JtRUdsQVRoTEpteEFlcVFQVnl5ajVRVE12L1JkWXc4RWJTTW83WXhUYkYwamI5WEg1S2FZclVUNkNodFQ2dytpSG02dDNnS2NGQXM3czRIYmhVQXZjb3lxWk5jRGpDWDNsRmFHc3ZGeFFZY3N0eEFhaldLNjlzTzFIYXNRYnNXV3NMTmxWUEM2S0tUM2k5bU00T1ZRNVpwWFQ3SWdnSTlGakZwbENoNHZNUzJMUmcxV24vRFRsMFBIUVExeXFxSTZkSWVmR2x0TGhoeGVFRnFlM1RFV3FZSW9wdWJTVUdnMXZxOVljWngvSDBmMUE0aTZjcXBJUmZTYWxBSzE4bE1VQ2pickR2aC9lWFFVZ0hoa2dOZTc5SjA4c0lkTENsSElkOFhQalpEL1ZkcXdlRVByZDhvcWc3dGtkZElROVBMN3pMNlVKOUlIRDU4NHZHY2ZDWU1HSHZPekp1MW01NWYweDFCL01FVHFDdnNIQnMvTy9rRXhPQVgzRHBMMGhYQm80YW8yQVNuNURtbXlSQ3VWR01QUEFjZEx0SldwdTc5MkVlTjJqcTZPSlB5K0g1MVFKZjgxd0REcjBQQ1BTeG5sam5qNld5NTVNUGR3MWdLc1E1S0VUZXI4NzBzV0htY1BwSUVmYUJlNUgrdzhrbGZTUVFwYmZjRFVObDI0c295bmRZaVpZRUMwK1hTVmJvNExoK0FCelpzSGVSNXpuN3FRM2pEZlpGQkJxTjNwTDMreFlPV3AxZEN5QkgyUEh0MXNBMzZWSnVvTC9oa1lLRm5qaG5UdjBlY2lyK3hrK2pTelg2REtLVmNxT01ZN1VrZ3Y0NjVmNWcvT0RlOFlkT1djaW5qUVBJMkJMRk1DblJQNWxpVGRvUGxZODlueUh0Vi8wQnhjZS9OWEJ6dVB6M2UyRUs1TDJmNHh4a2ZsSmticzdjTHMzS2xicy9MbGRGYkxQeWVnM2NmRE01eWhKSHA5c052VVIxWVRaUjJLaFJFV042MElQdEQ0a3Jid3B1QXVTYkxwZlpJdEZmK25ndGRrNzRhR0F1Z2Z4eU9uK0dubWF1bXZnTCtNYXZCSXBmYllHUUJuTnlGV3lUV1E4dFU2ektTZ1F6cTViUDN3bXFvMmFkendabUxiMEFtSEMySHpycmwrZGFEbDFsNTlCSE5iSUNRRm8rQmVVQ1ZrYllOcTg0Y3diZGZUdktPTCs5YU4yMW5qYUUyekY4YXlqb0ZRVkd5YXh2RmJ1dUdRUXJnUGI0bUZPZGVsUjdON3FIQmRnUjV1MTJ1eHJ6TDJrUTdJdU1tT0pjL2U4Y29kdXoyWmJzMTBTQXVLSC9ad3pRdGR2eitvYkJ4b0tmbDgrTGtHcFJscmczL2tFTkpKcXZIMnF1eFo1TGtDMnE2aDBqZ2R5RE1NMktxQVV2dnQ0ZE45a09sTVFvRUdPV3d4MG1JOWtOL21mRCtwY0JORTJWUGM3ejI1Y2dMMGl1OENhUldTMkQycmppWm10eGlhc0d0bC9HbnQxK0cvNlNvcFhSRWExL0FUbVRVTVVGTEI0TGhKMTl5bFRJZFhCaHhacFdFVjdqVHRMSEk3Q003K0VUTUc0cXc1NUZOSlJuWHVyZzJOeFlWTDFteFVBUkpCMnpobHl4UWg2Q1RLZU9wdVkxWkVVUjFSKzl3TWRFWFowZjk1UU9QOXZkZDVkb1JFa3NKODJNTUdaSTFRWnNjRjhCSFBqYkFGVmRQcDhQZmFjRUM4aTYrcUZDa2dVS1pNWTJRenpvbU11MnlzVFJENmhmUXFTNzBtWDd1Z1BBUnNIRjc2UVczR0kveDhnUGcycFQvVk9UN1hXbjZEdlpMS21qK2k1OW0wam4wUjRBcGluTlp6ZEMzRnhvME9lTWJXNE1kRXdLY1pqYVRUaEVuOTFyRmpZVllnUk1OV3JUQ0dLTkNyWWkxNEZvcDJBbU55Wk1xT3lqM2ZnMGZEdStEa3B4STl4Q3BPdjlmUnRaUFRCeEN2WEJkZnp5S0wxY3IrOEc0eGNtOW9tYitBSnRLeDFXaXZacnVTNERWdU8rb0ZVaE1Xbklxank0RlhyNTJnV2ZIMFNWVytoK2JHNW5FQkJxRFc0V0tTVWVFWVladmtEb1FJM0I2ZEplYWlqampEUlBROWIxNzBTSGlYVzMwa1pLN0dja1JTa0h5KzB3WHpudkN5QmF1TFNzVzNOTGk5UnJYMUtoUFVLVXBuSEUxelBCbmNiNDJzN016VUxiZlpSMmtOSFRMM0R3cTNWT3J4andWUStsNnYzOHVjR2tOT09UNjZYaFdhNHFrblBoUnFNc1k2M1dNanJYMG9xOVdKV0Z5NVNlRk8yOWU0RjVsMkc4amkzVkwvak8vOWpXNEQ3QmtTK2tTa0p5RWRkaE9wZm1hNXpiZGtUSTlYZTRkYTRucGQvSlZQZXVPZTlsSHpjdnVFZFQ1cU5ISTZabmZSbURYK1MvbWFWV3BaYW5OR2lrRC9Wb0Z6dW1xRFJZcXhRMXRMYWxLVHZoa25vT1U0d1RLOThQNXc4bUZGOXNJekVTMjBMR2NuWVFSSDJsY0picHpISGtZeVRFUFo2dlFqTXloeUg0TmVhQU9Sem9kSkV5QkdNS0VUWnhXemFZYlR4TW9GSElCQ25sa3N5RmtnYmZJNjB0anRuZXRHc3NKQWlDRUFYL1pwd1ZGOFFnZjZNMzRjSHdLYTRFWUd4ZCtJazdRbWtRdXkxd3VkRXMyMW81QXBveGRwbVJVQ253RFl1OHBOaWZBMExvV0o5ek1FWVRzU0JBdDQzWVFtOGRPVkNzazc3cEFSN2pCeVZiVmFvS3NRZnlpbHIyS2hIRFNvaS9aRUlyRXlEMDllRml3eEVDYzFieEpNdnlHaXh1d2l4azQ3SGxTK3d6Zk5tQnA1UGVrUHNXWmltUXRzVVR1RGZHYy93eUt3ODYyMEg1L1c5SzZ6SFFtRU1xd0U4REMvejFpOENPcmZDM2tyMUFJTFh1eHM5bGZSa2piUDZMOGZNMEVpbk1uOWw3aHYwek1lNFBiVSttcFpocGdFU1ZRc2xxZmg2NTE1c2MwQkUwOFhxS0pQeTJYc2MyZW1FdENENzczcmw4SVhrWm1QcklsWThiZ0ZqeXNxMXZ2OUtGUUZ2a1VXUmdFc1NzNVBDdTBsRWZvR1lNTGNyU0h1MitCdE52cmQ2YmpSVm9uTURJWXpVTVhOT3RmYjdMRWMwWk5PWStVY0JCeVBjQllYMHZjaDlIV3RCMWdTYzNvQjNIYXY0OE5sY2Q2ZlpBa01YVjVhWnd1WWwweERLeElhL3ZzSzM5RS9OQzFydGVML0VselAyaDNpZTJ2alFsV1psUGJSZEVnLzl0VjdFNVB0OXlYOHVqaHNJTzJSam9MNUh4OFF6cE40cEdXczY4cUMwR1VoaElrQUx6QzlLN3JNa3I0enFYUDlCdG90Y1RzWDM2emtWNlNUbG1NQ3cxeThOYks5a1MwY0lYcjZEREVDU2RFMXBFOElqSG1McTFVUno1bGZ4WEVSejhzSzBzeGo4SURFMnBpUmR3MlFVWWhSS2JybEhMT29TM2ZMbVFhVkhsUFl4eDZQaUNaQTBjWDBKa3dCZWcxMGpiNFc1VW80ZzlpdERiVmpjZis3dWtKbW93ejM0Z1lrMEszbjB2YmI2amg1dHdtVWl0bWVlVElXM3N4RjZyYktqcTVrVVR6NVpESHB5dzZzM3dKcGtscmJCVkRPOTVmV0lWWWRiWVRtMEVuUGV1N1ZacmtiS05kKzVsTklhUStsaHZKd0xCdWdIMldCSjY1dld0bTBOM242cGZVUkt0T2s2OGlmSlZCT3Zod0ZxWGNIRjVid25HeC95bzBBSlIvMzMvYWFEY3NzMGdwWVRUazEyd0JLT2wzV2VVZDc2dFJ3UlJQRGx6KytJcjVzTm5BUm5DUnJXQmpLVEx1c1N0Ny9ITDZXNGtJNmxHaFJjSzFqTGtPUXlVR2U5VnhVeFlwVkdTWDlCTVkyUnIrTWUwR3JpTXFxVXlsbUxUTmViY1dVZ0lhWXJsQmpHa05vUkJYUmQyNk5MV1BiYTk4NlFYaHFyVmNreTRPcm1IcW9DTjgzMlhnSnYrb1JTakc3bHYreHA0aE1hU3AxL0loaUgreU5Cb3pQaW1wVHlUMGJwcW9Oc2wyMy9MU215bTZINDloMzlHM0wyeWFoUDduMGl2dDhpN096Qnhhd09jV2lmcVVmWVdjZG4zUkdNV1kweWsvcmNBdFhQUWZYMEVlbHk1bitrNEFkMnBiWGFESldubENTQkZwaXIxVUt4V2RhbVlsdjQxR3RTZUF0Qk8rdGRmSzFNOUtpWHFEWVorVnVYU3RSaG1QeDV0dU4wQTZDYllkQlhyM2puL3ZXbUVWT1VPTitzU1hJVWVoMXZiWUwzWlQwNlZiQ2drdGQ0K1ZMMkZFV1g4RnhoZkVzZmpKRjk4enhhNW9GaEc3RUF5OWF1ZDJabEU0bU5vc1c4UlIycjhHam9ZVnFxdnZIOUxBeWJwQndodEJDRXRrTDFKd2o0SzRwbEo4bkhHcm12MzVXZVRRTU4rNXJsYTVvNGtBRVpDeXRoL2NBaThWMlk5WTJKWWpVVTNnbXV5bUdlcUFnUk4wbzJDMDFCME9YeDlRUm5lSk8wNG1VM2x0TDU5aFIwTzB6aHhxeUgrNkhnb3picXhwZGtZRFAyUXFtVGNncXNWQ0FsSXI2K0w3THZ5MEVkdW1hdDR3L045YmQzTi8wOVNyY1hMajVjWEpOMFRrT2JpVXp3QzJwYkZORFc2aVJSVnFkRndmb2xVWi9OdGo1NWR2Mld6VXlOQ2RqQTQ4M0NNdEtzMFNFNnZ4MndIRU9LZnVRNmt2aEFBU1E5S0ZqcTBnTHc3WCtkV0tGUXhmUlIvcnlSQnhpUmJrRzVndGNuUnpnRFF0bDBkb1JGOHFObzVHS3FXMnZhcFFMWmRkaGZxUHFEQkFUSlJwejVINnRvbHNzVEpuM0gvUHUxWEdIY1JQZEVuSUpZK2c2VjN2SmZKb0VkYW8zWWp2b0t4MUptWGNJWm9FZCtEM2dqUTJGTDN5VjgxeXIwQzA1Mms4ZGtNT1ZaOVF1RXI4Y1lNSm5YSmZCSDhpUmVYZFphRlhzRERVVmdsUkNYRk15bTVWVkRMQjZTOUdIMDRlTHhsOExqeFpkZkdNSjkyZy9KM0Raa1p6akRaS3ROK0lRUk4ycW1TcllLdlV0MDQ4L3RmU3NqR2ZYZ3N3OExjUXhqSzNjSHBsUExHT0xpTXJxRTQ5b0xJMTU4b29rWG0vVWh3c1VqaUZWQVNVRG9PUkpnWnUwc25lYXU5Z2I3bWJteFA5bE9LaVp2RkxFSVV2bjNraW5YbjJrOUxIVmdqNnBiRnlLYm1CbWZLRkViZlhUMDBRcG9YbzYxcHJEcUkrVEFuYVIzQjc1YnU5S3c4cyt6RDg3Q0JsY0Y3Nk90WXBvMU5mNWR3UzNXMlAxQyswdGlwaENnU0dwaWFSTVFZenk3OUpYL1k5SnY4bkhCNEt1SEs3MHN3MThNL00rVE5UQlhKbUNGL012ZlBIN05jS0hKSU5ER2krZ1cwSnMzOGc3TEJDSW1QUEpJTnFlMkVpak5IN2VsV05FZFRjMVIwanFVQVV4Tm5GakhDQ2hrTVFPalNtRGZJNWZieVpWcjlPeW1CeHp0RTlmazVBL1lSZ0VMaHhEa3E2WU56aVlLVnEvY1dSaGUyd2ZKY25HZjdQeEVMOXJyVkhiRXhBMnhjTmx1RDJheElqbng4TWR6c0poeUZTbXBtdDA4SGJZV2tTa0hWaWxiY0hqa3VQNnZLUlY4VDJJTG1iRVQ5KzdrZ3ltMUV0Q1B4T1ZSNWt4dmlJcHJJaTAxYlZLRStBSVU2dkFpKzcvbVZWOGhZWC8wRWdLdjQ3RWJzVHFBT0w1M3I3S2xoWlBLMzBlNndBLzFmOFowVlFDODJlWExnczVRdlJxMWRNMHJyS3lIczdiVGw0QmV2UkY3OURyMVBhUjI2dURxelk4Z0xBaGZjcUY5VHliek8wV2NSbHg2d01qY0MxekFld0MyZHliRHpWN1E4SE1DV3g1Y3l4MEdBWXEyWVM4Z3ZPRFdaajFrWkZPdGxNT1VGMXA4UWVqcERaUjFHL2pHNXB5cHltNXpoaDhYWDRKbjlEK0dKaUhWMk1sWUJNL1Z3Q0NoZGpVQ1g0a0NtNS9TeWpFWHJyRFVPWnVEMGo2eVNEb0ZUa1FscG1KNXpOL0lQQkFCekZseXJMWmxpdG5WQTJNd2NzaVUyVzNzOHRPb3hTZ1grcjdGL0srbXEvalgzMndwbTE1eFlEeXpyUG9wTWx2QXVJWk1hbk1QTlUwWFhmamRrUjlYeDVsUkFJWDF3eVpzTno4bGpEVm1YUExOeEJUaU9hMXB2MWJiSXl6OXB6c3QyVnB1cjY1NHZ3MCtRSVFxRDFPWjdjSWpmdVBON3ZSd3MvN3hXcUVNMmVibE9sNGVHK2Jnci9nVTE1NVJrdUgzNjZpdE5Zd0laV2QrYVhzR2VXamszRng3U0IyWXROa09NbjBMNGNtNkVGTFlDQUVEWm5SSFFCdWhxUGxKdXh1cXI5UkYydERRTjg1NGpEMERvdWN0MTlCSVMzWi9lc2pOWE9mY0d0MzhkaGNjcU1Ccmt5WDZNbmJiS1RzdDhYajhjbTQ5OTRnSzNzOU1HVWErNlk4VzhzSWRkOVk2MVRXTklXbTNIZFM3dmEwTG1TZWFLRDFMNGMxZWJGNklzVzZlSHVNekdEM2diYW41Um9NaCtkSHZ1bVpySFdCeVVuVXdNTmZPV0pOaGk1bnJHclpFalEvSjFReFZoUTNsdE9DME9rTm1tZnN4d3lidXRRdjVlMTBMa2poN1RTZEw3TlJBZ0VqSWJOV2xaYklIVk5CTk4wSzlEOVpnbzc5T21HMzlOUlQ4NVhpSCt5eGlCOWcwcHBlVkRIblVtVFV6WEk0SjU2L3BIN0VqWW1jUGJzNmxqTmVHQ3crc3JTRWgrWER6RHhIb3dRUUtncjFVeWlnaGhWYitqWHZCMGlDNDJPalJDOEJpRzdSdE9CZWp2RjFUWDJEaE93RktLWDFZMy9iZ3JiVWpaeXBBeFcvRFBuRmNGODdWMzB4TlgxbkREWjc4VlRrOTFQTFIzMnM3TU50dVY2YWl3U05WYTdqWDNxNlgyNnFpejhBbUlteVVJK0xMeURod0JlS3IvelYzMUROb3FEVDMxaVllV05WOWVmMDUvcHNOK2xiUEpZd1FjWlRxWHFueG5Nd3didjN4Z0tZVnJJcGdkRlY2MVVhZ2psWjJicjFtMFpKOWpFaW9paDhHZkovRDBjZFRqd1ZhVmhmUnhVMnkxK2duMmZPajNMQmVUdGw4SXpldnpWRGdGNUNJeGdidThVWlREa3VDdjk2aVZQUzdRNm10NysycWo5ekhzOE5YR2plVXZlS25KWHg2VEd1VjVycmM3SEdOZ2dGYVVDNUFUT3NrOU5xaE1zMzNiU2xTWE9YOWRDMm1ZRlRCMkkxQnJRYk5mUityQzM0cDVQSjZjc204RVZCcmptMThUTkpvbmw3aEVGdUhnM2JDMG1XZlRIZmlwaTh5aWJiajdIdEdaR01ZVmpFWlJQazNOZkc0S2R1ZDlEalIxRjRlUWsxL0NFci9oU0tTcyt4TE13SndVZGRKRjI3d1p1cnBvcmpkQmpvaUxBTzl5NzVZdWxZSFIvNU5mb2REV01RVnNPeUwrZU5JNUtvYys1dFMvUDlWcEpLbStpMm5saVg2NEpYQWVrM0thanM2R2hKdmdpdENNaHc5cmw5NVNjU2g4WDJ2cXZPMWlwUmx3RlgyM2laUTRnZjY0ZGEvQnY2NTI2MmVNdVU1MmVHMnQvdXlsREFKd3RzN2pCWHUxWjhCb0w1SHlTNHgyQlBMNHptSDJpelBuWTMwQ3RSbi9BSFY4alJScFAwbXBKdkJvNmg3Uy9sWWJoZDBESGh3a09wQVVmUFlFOWlPK1lra1R6Tk5UZGVYQ1Y4TW9Zdmc1bkpIQnNPS0tiVFJucDVnUk5DeGp0YXQ0UGRvcHlUeDJwbDdCU0V0d0pkWXUzUlFjc0p2L2phUngySEEzKzBCbDJxK1lKSkkyRlVwWU9kcFNHNExYalpsejUzSkh3WVJVUHhFY3hFdmRNaUh0THBuYyt2VFFIek5pdkFNNWhlSS9ueE9MejZJTWcxUVU3d3Riajk3U1M3QWZxdmlKL2MvZEpMRmVPa2tFQ1BLZmdZWWFmelhtTHQwdXBlVGVwZUVsNkFXcDAvOHlidXFXVXdUVlV4bHNaNGZ1Ym94MjJpOS9KbXhMQndEa1ZlVE9wOThNdG9sbm1HMXhYNjE0UFRZYTRtVlozbEZ3bWRaeDU1MjNJeXZmdldiQlFjbzR4NVIvVmozcHpGeDMrcGJHWEl3MmsrUC9jYk5qNTg5VjI4am9ISlVxZ2hyemYxbUQvVmtuTFBNSGFnbzM2TXZldXlzdFUzMkIzZGkwcFRGTEYzK2Z6V1FvQ3gycFFsbWVSSmVNSy9aalVCOEFHQnFYOEcrRWt3MnM4dFQxUFNSVWoybVJnYnd4QUNNc0Fkd2JHTjRyWVVqMTNXVDlmdEgxbkhxT2NUTitZTHZibVZaSTZhTUhtNWVyQjNpMXpISDU4ZDRPLzZhaU9sUFUvVGRaVSswc0I4K3E5d1lZTm5nRThwQW9xYXhmZ3B4TUxJZWovY1QyODFqbzlXMlcrd25LT1N6Mkhsa205TTFoR1Nyck81MXo2TnJnNHYrank5b0UxeDZLWURuU3RmeWZnUXo1cFdud1I1bDdIRlM0Y3VaSkplLzBMVklnNFVkdGt2dEtuUmhsaWVVYmw4eGVYRlJwWmlQK0RNK3NrNFFmem9oaVJ2RVhqS1VwQzVjVCtPV2tRYmlQbVk4UkkxV3RHaDdJYjFTRWsxNk5SOTdVU0tSQ21sd1JHcUdWazRFWFVXMVRmWkl2VkVacG5EZUdYUm1YQVp3Y2p2OTdzaU9QNHlvMnd6bTZGdXhpb3pZRGV5NTdPT0pvK0xQOTdzenpyaTlaK3ZibnhENEczbWpDNEdwcWVET1d5WXJDd0NVVzhod2M3RDAwOStqNXYyR3BQR244UytoUjZqL2ROK1h3SzBKR1hJMmtlcmdEdzJBSU9STURBOXpCTVRtbFQrd1oxVWNLZFNsR0l6anJiY3dFZEI3eDQ2QkdPbUg5ejJOKyttL1hka2JHV2hVS2xFUUgwa1R4OEpKei9hNWpBMjlZZjJwS0l5a09EVVBEekUrRUViTkdkNitLTndsM3B5cTVjWFRhZTR1cHc5Q1ljMzNCckVjVSs0YUVrczVWdEowbEJCQTcrZTVEMzdHeHdoVkR6UnliaXpwYW5wVWIyeDdLQ3A1SnhESnZzSjZ5RGdlT2Q5dzlVVHY3WnJ2Sm9GdTBOMlA3VUhvZlRBb2NCNVJaSnU0MXA2NzUrSWl6S3ZoeDdVMStaUHZ2dmtJS3ZFVjBGa3JzQ3RLZnJpa0ZkZzdYK3JKYWlFN2I3ZXBpb1JneGZtY3lDcktnNytRckxJdFRyckRvMlM3bUpKRVZUdGVsSkVQWUJyUmVCVytSdlRmWEF2WGVUWmlwY3NuNjJTUlJITStrTXN3MWhFbktVdkNyZ0tRSWN6VU9qYzI3UGZMc1R4amNVTTVFS2NzYzRkYnZpSWM5dnMrWUk1V00yN1hIa0ZZODZXYWluR1BCcGJrMjlnaEdlKy9vRlNGNk1FWTVXTXlFemtGMWJSb1RyTFBHcFpyc3EwZkI1MDlEeGMveFA4QkpVSDZkZXROOTVhQVFjSXh3RW9aTmRyRmNTV1ZmSWk1R0dTU245RHR2V3ozVlZGaVVBUFZYMU1TcnNpUXBMK3lpWWtFZlRFMDFNYk9Hb3RSVUhuYUxhQzZxdnAxTXBtNzhMalJmTmQyN1ZreFY5cVIxdkdTSGZ2RFNUVE5QVEhOb2p5Z09ZOVdUUUJIbEZ6ZUxWZEIwZ3B3THMwU0dyMEU1Wm1zbWZqMHVxR1U1T0xLMDYyT2JSR1I5anFzY0Rjd2x2TEVRVFE5a0tBOFJuSU5Ocm9RRkQxbS9Da3FoZWo5cXc1T0lkOUY5QVlzamRYWXdPWTJQV0trYS85OWk5YUJQVlZZdHM2aUxzajhkUWVSUDVxY3BXRmF4WFN2ZDJBRGtyMFVHRkxzTzBJaTltaytkQ2ozdExoRWJ2WTNqelM4emsrL1ppSjVha3IwTlFsVTB5UFprdUFlOXZtYUlTRkd2VmhyTU5mdFIyUnAzK3VEQkdqZHVDMXE3OGJXMGU5VWZ4aUk4TVRwWWdlbnBIdFJsOXBFTEg2WnFwM0xDQmg2Q29hcmlpbHJSblNuY1Fld1QzbFgwa2l4QzJlNDN3dlV5YVA0c0hqV2VHS0NTekxKNlgveEduOTIwT294MTh5RTY1NERTRDl1TFVoQUltaU9CZVNxaWpKQXhBZ0I2UXRZRndqVGxCV1hVUG9xbXVyNjd6aEdKZm1Pb3pyWC9YVnpvaXBtZHRFQzlPMXVRRGdFRFFnZ0VPNkppanhXWXI2NHpyV05yV1VGUHBVeXVIRThKSFpMS2JBL0h5VGdaOU0xdG9zS3BQczRndjhpeDgxT2RUV2hCRGRiWUZFbnREd0pGZnNxbUtDU3lnd2JpSDNEdlVlYm9WOW16dTh4WDdQa3ZOb1psTEJWWlRLcnR0bVUzQjF1aVE5V3VuMnMrUU1lRDV6TkdMVmRQZDV6RGVUSjVEekZabkQ5Q0ozVXpiRklSMDg4Y2d4OEF3b0FMdTh2UHRMRmNaOE5WNk41WktLRFlKaEhHMlV4ODQyK203VzZnTWp0QzludXBsODRHTnZueVlHWVNzdG1YNkduSGJyNVRjakx0N2swaVRSeUJRRWwyNkRhdzY2TmZVYTFxbmJqVVdUNkthRUkyUzlrcG52dVBDLzBpYUxqWTJqY1NyQTF1RjU1WjFaTWpyRE80dHBMdjh2VHo2WHRlWmpSUzlLbXhKMjdpdEFMOGZOb0dSdmI0N0FjdnByV0Z5MllkTnNPdVl3eUU5V25hSHJ4Q3NvVlFoUGFCY1pCcHpiL2dpdSs3UUdBcy9BdUkvTFVpY2Z1cjFkRFVlUFBTdHJTb09ybFVFcXRqM1c4QnZaZDNBZ29iTTl3d1ZTY3BXRCt2UFdZaFgrMTFLYjhtYTRZQ3BOMjVJc2Y0a3hoaVZMYVNqTVlQYjlxRHgvczFZbU9JMjJNc0tlVlo2T2N0cTd4TFdwWmoweDhsK2V3MFRPeHd2bml2czk3L0VBR1VKTmZRUytFVFU2a05VMkwzVURwZENDT0JCWGdnMkZyL2t6TUZ6TytBbmw5L1VGUkRzb3Jyc3hxS0JQUWR0WGVZNUpCbnlMaWFBekVKTUpiVTZGd0dJR0ZuUkVtRFAxZVgyand4dTdQS0pJbXBRMWF1ZFFCTnVPNXhkYlhuK0xDV3ExSXV4Ui8rc05rRXJFTEE3ajkvQ0pYZVE4ZEljRVVPL1ZVTC9TOGdYeDdnS0pwQlRnZVFTcW8waGJxM01Wc1cxVFhrRzFiWC9wRjk3d3B6SjBrUytibUhKYWlRcDZyQzg2S0Npa2RtdWlPRDdGU1l1NUdPS0p1YmY4VXltNEpMK0QrY0FJRjduWk81OG5hQ0VUL1hqdk5PRkdWdk9VUjZaZlVvbjlaUzczdDVPRFlsVGRNRnRkWkVDNmd6UlJkRTc4UTZXWGFCQktNOTFoOEx6blU2S0tnWk9hc2tuR1NFc0F2ZjFpUy9YMGcxZ1dOcndPMm1tRTJnRkN0cHAvVnZxYm1WdTFzdVhSR1UwUXhKN3p5WlZtQ1cyNnIxY01XeFk3SXJISzlUZVl2WTg5ek1iY1hUVzNVbEFtajlkRTBPVytuMDhvMklPdTlKNmYzYXFIdlBzRHpSSmhIekdPWFdUS0RZOWpwS3pOVDd4aHhDODdoU2I3MnNJT2s0bGVERTIyY0lUQUlMMGlMMnhDUENaRlgzbitCSEwrZHoxWnhkekF0N1Jkby9Ea2JnaUxiVnM4WnhiczlTdEpReUIxUG45ZHA4aE9rVGxXeG02cTlGUHZmSkthTk9zbHVFSGdTbjZLcnhEbnNsUmVyRmNkWFRzQmdwSFpUTjJ3anBIbzAzNk1wRVFkbUQ4N3drc1B4dVBqN3VKR1VKM1N0WVNOUk1FdERpOElITkp4aVRucGlSb0Z1Slh5d2c2WW1Ga2VsMTNIOGcvVTFBS2VGYTBoV3hPUFhhWi85WTBBN3JhaUdSWTd2dXFlaWhVTkZmbDB2OCsxODBtLzdvS09uM2VSZm1kdVlwVnlpL3FkUkJKZzI4Y2RpWlBrZFMyQmRtRUl4QWtGWUdWdVlpUUJhcDl5c2ZjZ3JsbUFrRTVHVzg5VDJ0d0hzM3ZVdjljNW8vMHk5NTJCZnlDa2hKeERLeSt6Z01wMjN6UHkrUE1yamlFZ2U4UTFGcmtBbm1naEUraFJ2UDRZSm1XbjRqdCt3MUdicklWQzNFYUxHaHhZOVVVWEh5elplUC9QTkdzYzV0WHBhelpSaVdWM0NoV0hxVEp3akU2bmxBYXkzTkRSRG5PcWQ5Z2RVRWtiQWcwREtoTWVMS21BSWhWM3A3M3F2S2pxWGlUdFVBZFpBVEpEOHNNeDJuN0xNTGY2WFc3VVl4WXA4ZEJPMG9BYXM5d1NJVW5SMEJnWmp3bWVxa1dhQ0I0Z2FYRkxCZEwvbGo1Wk0yQ3dja29xRUo4c1RwRlVTVkEyVm9rYklMeE1tMFVxc0lpUzNKNmEzWEM1OHdSajVnZWF3bS9Ka3Q0UTl6T2ViSlRMdmFsYjJJNFY0NUhxbVZnK2txMVhGTjltMEl5TFk1eVV1NG1TbjBhUlFXKzZ3YTJ5eCtacjVpN1VhMG9UNXZRR0NsODQrcXFHamFCZW5ZMUhTNi9ROGtGWmdjMEJ6NUhzVkVjM1ZHRm4wVDM3ZHBOWFNmaFg0MjkxRDhnZ2NxWkdDaEJkYURCZW94cDBqTFE2bHB4ZVpJY1psaXF6VmJZc0NVaDEzMGdmL09EblJsYnJDbFZKb1FNeklqcVA3SnliQXVQV091QU1KNXVpVmM2ektDdHk4WGZVbW5DMklNUkJsM3p0Rjg2cGRGWm02SGF4QzRNMjFrVXR2NDVNRHA3TFhMOXZHMkZlZ0VGUGtzSXJ2SjJ3dVJxTG1BVFYxTWdlOFdEY0NrRS85Wjl2L2Fna3prSzJBMGtLRHN3bFhqUDdUbWJwUndHS0lGY0o3MFVEMm0reTgwQXJiY1Nyd0NjaHJjeDVXcUFSTUU2UGJvS0pmSXBhOUdjaE9kWWJMbVp6MGdUZHVQbUFKemYxYVJsdUVRU3RzemFyQU0rdTN1Z1duQW1zVWtkdnZVY2dHZWNXZ3JqNUE0T3Q5bFl1Ymp2M2pFc0RBTi9Qb3lvc1V6cm9xYitPT3UyWlF6YzlvRHMvZVlDdGF1aldjZFV4SzU0L3JBQmd3cExBTnZmOG52bzFTUTRUZGhnZ3BvYUJMUE96WENaREl0c2cxSkQwWmR1cjdzRFJmeWJKdkVGWlFUa1ZsK0t3SWZtMk5wOHJMOEdMM2t6ekw0KzdENjBZUVYyZ2c5Y0sydklDaGQxRzMrSDB2TXZpRUZBbDc2b0pzd0FkektzbzFmWTNWV3JScEM4STF1djNBUjRjQWhMZUUxcUYwTEszUXpWOE95RFlBK0ZjMHRKTHRIdFFmb25NMHFnYzJ0UzN2aCtIb0w1TXpwSVRiMGVuSlhKdS9rMkhxaGZJbzlKOWQvak95MHcwWUFRTUtYQ3FRNGNscnhEWlFuRi9sMWlzZkhTT3F2VjRCc1JVTGpmZElxUElONFJPZTZZT2JYekdiSTZEUzZVbmVSM0s5c09xSHJaM21VVCtTUWhFN1o3UFBYbUNkemY4d0pDMUhZY0YwUlY0T1JJUThSODFDSjIyRm1Oc25WdkVpQjBDSVEycEVaeVZnZ25BaC9VOWZEaTNRTXZqSmJLbzZqT0QxTnI3NVZsREViK1RkRVdNdUlhNElydUt0V2ZZV05ka25McS9zVFZQSjgyOWNVcXlvNjNBWDhESkdEdFZmNjNKL3hsZHFXZ0dmRnNKd1F0NDJFWTQwdkhqd3JIdHlrajZFc1RzVkkzWGREVkhnSDlFRXJQa0VmakszMnNsZ1dETXV1dnR0OGhDWHYyUDBLczhqdnFHbGNJUTlwOVlnYU5CdzlmQXYydkkrNFBwTmRVZkgyTm9YdDhTaUozazBnb0IwQ3QyelNsSldnZkEvcjJJa1JXdWFlQlJXWnljaGVvemJpckdFQllFZGYvODVxbE1tMG45S3hYY1hqaVpWM1RpZmo0VkFRdjBXc3kvTkpKUzloeGZ6bmJHVFVCenB2c0s2QmlYRUR0Tmdsc2c3Z0ZwcTNObCtRVlZheVdjVG04Qm9xMWtUcGdmS0MyWHhRUDBIaTdlNkp6Z2d1WE1KaS9LajB6QXU5OFlVQW5mNXhTd0Z4Y1d0OUc0bnE2YjFUZE01UVNGc1pneVVJaEtlR3ZXTCtQVFFjYXlNcllFZ1VCWXFtdEp5a0pIc1ZUNWN4b3BIMk9kSEMraE9pY2pvYXJBYkxXckhyWXF3emhuNHpEMlo1TDlzdWZxblhoKzJtZUd4RmlGSkE4ZFkzN2NlSS81dnlMMWNwSHRhWTdzZzZPb3d4MTFNVWcvM3NBdDFPR05WMzhYbHdSWlR5Uk9YcURxZC9TK0NHN1Bqdnd5VnRsRGNZUzYxT29MdGJEUjJZWkpjZXZtanNzVFNLcDErclhUbE5XRWJWZHRvblorYStqOVlnVWxLMTgvWmh5dWZxb2U1Qk9QZnM4d3J2bnN0QWpoNmx4QkpYMUc4a09lM2RNcjVZdmNORC9EYkpWVXVzYk9JM1FsK3RibGdnL2RHNmdYdjROSEV1L0h1MUJoREpYUWNWV2RoYjlpNzNFMzhQcjNCVHdsYXJVbzBOaGhZWTJsVjl6WEFsSGVGRGtBOFZuMkhHNGZCSk9lQ2NZNDExVzJnSUFYTlFnbHBUNnEvZ0Q4akVlVndicTRTWVZEaGpKUTR1azJVeW1vUHBNUmg4L1cwRzhqaWxiaHhoN1h6L1dmVnoxU3Mycm5sWWdkcVpwTFJ5Q0Z1UVQ3eXhod1kvR0JhQWZjR3h4Y1MzVlRuZWJBcENJVFIvM2NTNnIxS0Y2VUhXdU92NEZIbHYwNks1eFl6U2xSU2hxN3l5KzhGYU0wMHBGWFhCbUxQU05RTTNvVmNLQjBYVEl4cmdkM3BSYU5yM2xkUStqVUVaYzE1dFozV2srajduOFRXV0pRK0VNaE9WNHppSmxyK1Vhc1AvZUV6amt6RThqTVl0bW04dWV1b0ZLNDZKYk5wd1VuVXVqaEhwSEgwd1VkeERCdEhwYTVOUTNJODh5cDJNc0pmUjI5UFR0ME9YdG1zUE5mUE1XYUJXV0V6ZjlpNjJqTmNRRkQ1RUttRitORURmM256bmlTT2dtZTFZOXlVN0tQVnFOTmpxQmg1VlNhdG8wdnY0MVY4TSt6ZE5kaERKcjJsdjVSMGJwNkhnSElwaDR4UWhjcm1FekREZWsxTWVST1hDOEY4bGQ1TFNSb0dtVW5RdG9scEtMMmtoc3dERDY3SzMvRzJ4WWIrTklaWVd5YWhrd1JGVXQwYnFJZ1pIbFcyNXFsOVVxMDg0Mk9JRVNGWFJvNkQxcjBlRkQvY21ZNi9MVlQ0UUxpVFJQYi9NRjIxaVJiVldHM3pTNmpXclhQMjllV0h6OHVERXRPRGNvd1ovdmJ4ZUUxdHlqVEZ5MUYzRlMrWXhSRk9aREhMZEVNajBuNGNSOENLUWdsMFVGaVV2YXdJTWUrbW94UCt5VXpnZUdMNGNjYUVhQVpHRnV2dHk2L0V4bEhacXV1ZFJLUzF1K1BHZWhqSXFZWTcrMllscVdYcTRTME9YczJhTXIzWDlqQ2Z0SUl0Q3p2ZEtrVHBWZk9GeWV5RC9VOHp0Sm5xcGFlS0Nzd3QwbWdwNWp2b294dll1a3J2dWozcStMbEtnT2FQY3RMM1dMYzB1U1l2cC80bElCQXNWbEhlWC82WjBuamlCT1NXRUR2WmM4cWVPS3pOa2d4V2c3bXhvWEpINmN2NS9VMjhBUWZtZFFjayt1MUJkTGZJSkN1TVJBcHZlODNGUHhGSWdmZEJmVVdMU0VWRDkrMmdvcmFjWllLS1NRWHJvY3gzNG1rWXhNMWFob0lPWEN1b1ZZck9tYnFGYkJ4R05relFQc1BHblBmTk0zMFJPQytXSk9zemM5cWsvR0NzY3FYUGIrSE1iR29WRERaMmdLTDNNcFIzZnQ1MTFNeFR2dWUyczVzU3lmWDk2VGRWUHFQOHA0VkdRV1FjOFdDWjYrNFlMWUdGdVJ3QmRYQStzS2g3dlZ4RWNzVU1UM2FXNS8wMXM4d3QrZXl4cFB0a0RFSTJITnNXemRCOGc5bGIrOWNTNHZpbGRIQ2JiSkhheVJmVm9QMTMxV3JOVDNnZkJ1U0lKaFFJU0h0VGVWeldrbDlLT0hEYjBXRUJHYU1veFFnWEJTYTZtaFhHYnhxcHFFSDlYOUJQbUlMTk04YmRqUTNoczdvYm1PTmdrVVEwT1dsUWc4U0lJMXFlTjJ1K24vamJwQ2dEV2JFYTVJbEZES1dmTGZZL1hIRVloME5Dc2owcFRidi9HRTlJN2xsMjFTL01LN0xoa0g5UGJlRlBJZTVrempFeGtodnhhaGNYRjFFRWhCbzhlU0N4c0tNQ3pvWHg5MzFCb1pPNW9HOU84T293TVJoTzZ0ZXM4ZjFpVDRiYzF2NGF0UUF5SXRGVFNYYkJiY0l4OGhQODVPVitLZGpONXBLUlJBZTlRcW9kcG82WDdhRSt0WEM5V1hTMll0SzZoLzdDSE9TQjJxOUVLeStwVHBBdlJ1Lyt5dHJOeEdvQ001Y2ZXaEhwVnRDWnQ1ZUNKSkJRMFRrdWkzeVl2ZGF1L1ovS09VWXpSTWhlWVZ1UFNPc2l3MWl5VERDRUgrWWplTW5udlFmRFUveU11QnlsN3VLNXp6K0xrV1JYMDdvZUR3dmFwMDFCNUFMZW1Jei9TNm1RSzFIY2pJc2lURERybTRqOWlKQzZPa2tGbHVGcGduRDIveDIzSFhVMGNHbE9pNk0xaHBMK1JDSmtxeVVpclcrT3hLVENyTUpjM3gvRERoZ3hXaFBoRzFpNjd0NWo3Uy81akprcWUzbVNyNVBJMGZBYnJvQkJTWk1Ca1BWN3VCendCazBBZy92WDJOWTNmcDJrVDJkMHIyRGFYREZia2pTMTVBak1JaXhaRkppT0prVGlZdU1Qbno1d2FRd0d3N2xwKzl1OUZDUFlMdU4xNTdoRnlvbi9JOUZZeFhUVTVrZnNKajVIbHdDbEtpOUUyMjBhVDNKbUNYQkxKQXM0dEFvNzFVOGpST05Ma1JBTDFKS1czcm5rVGVOOVJ6anRSdHdDd25wd29UeTRsZHZNbTlOM0RBNHhlNS9ZdUFQTmZoaHl1akhYdVFVOG94dTVoVkJHZUdNZXA3b3V5d2VkRDhqWk44R1lqYnJHK2dROW0zZVZXTHZXdktoNEJuMXZ1RnVxVDRIWlpaS0VGeVF2U1F6NmlmS1FhNmFmd2ZxUXlIKzFOZDhCajRveU0xSGJsanRPbEhQdmIyOWMxYjZ5MkNUOVJsaE9IdlRqK1ZpSXJVN0FlWHBzSWdqR1ZKT2JrY09BYWNWQktoMnpWTkVYTkRzL2ZCbVZsUEwwL1RLeGNUcXZySS82S3FCYUQ3dGp3bkdud2FuUU5wY1UxQ1JjbTZWelF4NHRvSSswNjVHL0Z6WXA4YXpUSE9GK01VUGVqcVp0YUwyekd6ODNDcHQ3S3Nuc1FENUFHa05LcXRMa2RxcFZWM2xhM2Q5VzBGU2JObVpqYW9RK0NzNHpLRWhDcHI5czVEWGhkZW9na0RER1ZsT1RiUjhkTkN0YUpieHhTMUtyaGxIdUFOcXhUTUtqV3NUTmowRzNCSEk0Rnl2T3ZtY3hDYUdZQ2txSTNSMUcyWkcvNWRRMStOcGlZTFByamIxRlhqWCtkdGxiQlB5RzZHRTJJdzMyd2hoeDFtK2lQV3JqNVFOcU1NWmxYZjk1enBBbmFxSXRPR2hCN2U4RThURWkrREt6b1lZWmNNMUFMUGJ1M2hNdXhCUnRCYThMZUpNRUZGaXBjOVc3cjlmSGZSbkZlZy9EOWdFS2xtdkNNMEJDd3lROHdJeEphN0RZTEtTY2YyWHk4ZkY3cEVOLzdpKzZXcDFLUzN6VC9xVWI2eDlGNHZBTWpLaDNkbm45TSs2VXQzazNKNDNNekdLMzhDODRlVUluY2g0VWFWdFErK0tQb0g5SFE2S1VraEg4alk5Z0NseWI1Zy9ZTnk5R29HZ2lRd24ybXJydURXS2NvU1YycTNNWURhdWtQYXhJM3hwOWtRdHM3c1prcmlwNGIwU1gvMktEOGZZN2ZpZ1NMR0g4U0lQNkwvbHdFaFlXbW0rOWRJbmNQYnhJdENlYUxCU2h6SVpJOHFGcU1MK29SaThpKzZaUnFpbzc0ZUI1cDFtV3hONWVMYlV6K2ttUDBIbDBwZG45Y0ZWeUcvckJMakRUYjF0dUFma3JENlRXRWFhSDFFcWtiWXZwTzdWR0JoMUlSRVZMclZleXc3T25UcisrVk1ENUM5bmVndTdlUWdwMkhRUVZ4Z3h1ckRLeDcrVnV0cFlDMEsrRGNFRVpQWllJWmVVemRneHRRMVVpdjRRd1A2b09qT3VFOXV3RCtpWGdWMGI0NDZ0TnczTHRMWGVlNWhRZkd3ZjQyT01uSTNndjFSS0tvMEhsWTNPNTdiejlDbWZnRmFsNFY4ZENEOUZkNlE3VWx2RWhlUzJZVlBmN2E2aG5OY0tQRU5oNEs5dzFHVjcwazIySmt5ZGhRV0pXNE9LU0VCNUdrTEtDWnpoSEJuLzllNWdjTGZHZlJDVGwvamhmMlFqUFdkNkh5QTcwd0w4bW1NL0RVelBFTTI2bG5oWXhjSm1mZXV5SmVWZEhOditBVHdBZXJFNjRTcXMydVZTK0RvMEhWVWlTT2dWSjMyV0ZwallJMlFyeExsL3JKR2JtNkd1dFZDU0YvaGxVUkhZK2p0NGUyT0VCY0ZTYnlyZ3JITWJZZ3ZMdXdUKzR6U1NrcTAwZHhNdFFUVlJJTnJDOXFFcmlxMFlQT3pKUzVtWU0rVnBsaWRrYjlwWDFJOGw1bVJYVkc3YXd5V1FZVWcyQW1BV1AzSUpTcENCYTZmTW45bmxxdHJ0NjZLd0sxQkdXTE93c0VnZ0hYZ1EyeFdvOXNlMWxkekI3MlJQakhJYnBXbzlsNWsvcjlIdEpyQk45YVM4cGVlU0piRUhGS1R2RHdNR3NhZ3lTdVVBNnppWTMzUk8wY2dSdVIzR3BMakNueXZOU2sxU2UyaGdISVhORWZlUXI2UDdHd3dqcm14RS9nQ2kvV1MvVVJqenNTakxmWkRRVnQ1QnZNbFVScng4enFKWUJSbElKdkN2WXI4NkxxeWxveFp6aWQ4YUUxNDdZVWdma1F6YjNvVk9sSlJLNjhHT050SXk0TFgvcEhOUmUrKzZOR3IzSTRjdHdIeXg3R3l5OXdGT0k3MmUvU3B0K1dUUFZibE9YVmJ3OFZ5cUpGRWpXMnA0OEVWTEtPQ05BNW14NTZta21xNVUveDdIQmJoalQ1WDVBNllKekNpdjAzTlI5clk5RGFyUWpKLzlNTm1WbmhhVWlQTTNxQktsQWdwYk5McGJPTktYeUo5K2Y5Nmo0S1JUY0NKSVRuYzE2SHpFWXliMTM5L1UwNjB5RFVINnJNZVNrNzJWdmc4NkFJQTJRWVFtUXpleldxVWlDaUZTUmROQU45cWlEcTFHNkFWNnNDM01RRU9WV0lGVGxLeDBlNkhrSXJ2UHF6alNCbm5uR1ZoVzUyOHFpVVk4SG0yVmdDaXZFRWlBcnpmNXVVRFBUWEFGSDFKYWszM3h2NlVyeUUwdi9LOEJKMHp6ZElzZXhWeE1jL2lBNTJqUDVzQ2RFb0xxemtQb2FadmkxTmpVSFNHbGZ3OGs1UTIxY3dCeGJ5MDN6YU9DMkNaaUt6aXR2alZ6TnlSbmxnbnM5bjJQbWpLUWgva0JoOHlGUThlRm5UelBCbTlQR3pCN3p4NWYyVVZieFJ5anpJUGdwMnppSkdYSFFNZmhtMmtoMVpKd0FwY3doSkJ1VEhrSjNLenp4bHVPOG5NZStNUVArYytrOXljSFZ4cEhkTXBnbjVJVVAwSHNCV3BtTnNJdHcrLzFrZlR1eEg5WU1hWXpNOGUyZHp4TlkrK3IzZ0tHb29sZ09pWlVLSk15MzNMOGJXYXpLZkRDa2dYKzVWc2dTNzdpcVhNVFNhL3licFlHSmdCdjFJWFcyOVRiOTlSVjdPcjFlVjJhcEFHZlAvc1Z1Mks1dVQ1aGZvSnNEVi9COVlRTnhuM2FCTncrRVozSlBrbEE5WGRGU2pVdzlGb1pyait1Um80MXVKNXdJbVVOaUcybUdGSDJZdVA4WVFJY2hKYytlUHBRS01YVWNoUHZhdHlETTdaNWpCOFRybGM5UzlMZEIveG9mTk9MTmxLdXZkVGt6djBzcVkvOFpZQy9jR3Z2dVNydWVXTnB4UmlkKzNDZnlKUEZNc0k1Y09hdnJGMnRTSlJGOFJUZC9WM2RtaU96RW84V1ZRRDV0TEpKUVZ2RjdnenZlL0oyVXNBLzNuUlhvdTRWNjdOV21vMVRjbEtEMWowNThsMXRvOGxsT1F6a1B2SXRvc2RwazdQN2cxSXp0OTBwOHhVM2RqVGtra05QZGRKaVhCT1FoanI4cVF2NXNJSmlhbTVtV3B0QzBDejd3Wm1QckRIVy9kOVAwbG0wb2xNRHhOc08yUHdUaGp1R3ZKSTY1Z2FwVUIyZThKTlNrTFFqSXlsRUEvYzFld21tUWRnZXJ0RHJhQjBFZU9mK0QyeHFwVTFydTdoa09FQmF2YlFneVZpQUtwMUdXdEk5UXgreXdQVHZlN3Z4aTlrenhhU2cveFZPV0hyVitYbS9lK093NFJIY1VzeWgybTQ1T25jNHRwa3FWYWhsVm96NmtLV3F4SWRPdlBqVmJDQThkRUx0OW9kdkNUN3g0Y0lSaGlOVHZ3eDJ2cVQwRU9jRmRLeHpFN3RWWGt5SVNpd2kweXBhaFRYb3pDM0Jac0FuNThvSWMwSTJzUVNpSVFpNVhhYkg5OGVickpITmhmQjBVeU5vSzczd0lMelhyUytJK1cxM2oySy9EdEc1eVZudXY0Mnh4R0JUTGhUczBoWDFqSytHUWtOU1NZcytmSE5ybE1oUW91MDlzYVpIWUh4V2tjQ0xEUGxza3YvemcwazFKeVBwZ2ZuQ2Q4R0ZUSjRMc1FmeEFYcm5meFdaMTQrbHBoV2phRDZGbCtJN3JBWVg1d1pCS0FibjhXSFNPc3cxVFI1ckFwSUR1cHo0OEI4UFpCNloyMVMzMkg3RHJGY1IvWXMzNW1JY1didEFJcjI1cDhLK041ZWFtcnlES3ZDZmNRQUJ0bUhwaVlzZ1RtSWlOanBoVW9McUNOOGdQamgza1ZQOG1yem1vZEFkZ3pUUm41ZWlES0xDaW9SUitubFNhWXhGeXNMY3VaODBhb21ZejA3dzNTbzJDWjk1bHFFQmIwSDB3OFNnUjZPUzVtelBrY2k0eWp4V1E5eXhJM3ZNbmpYYjV0ZmxiQngxWUJNYXo3cXVjdUdGMnpKa3BWQWhhRGcyb1lxbkNHUW40emRmWFcyRS9DbWdOQTRQOUxyQms2NFVvdnlhU3VpVkxxN1BMc3ZOZmd6U0hXNTE4Uld4TWtjbzYxdlFQb1djMHlTZHJWd3diemMvT1krWlBXVFdXa2p5NEF2Y1lqa0Q5by9CSDA3RjhJY1JjalRKKzlqYml2STRIYnRNN25veEFPYms4VzB2SDg2MVF1RVJUNnJkWVBrQ01mY2JrRTJxSlFhcGVFT01zbmF0RXFZOHlCTlVpc3UxTzZLQU84RlQ2WG9sM3NOeXMrY3ZSeEozT2d4cEFtY0Z4Nzl3RFh6UXEyc3F2Nkx5cVZsQithWi9tTjAxSnVhL3pQZmpDOURhZ1ZDQ0Y2dFF5NkFpWWJjS2FhY1VYU1dZRVFLMFhhV1hyU2NHVnBveENLTzVEMzUyYXlrMXd6ay9Mdmk5eEt0amwrM3JUbXdxbno3NWtGaVc4TmlsQzNnVHNGYU5KZStpMXppUlIxNkFyeEo5OUV0elVUUys0MDVvZktndFdtR1Q0RGtYeTNpMEZWRWI3SzB0K0ZkL1NvNDh0K1RCODNCZXdBbTFMSEsxbTBoZzFFcHZML2J3OFlsQ1BrNTJZTDh3ak1HYjdPc1pxdXpMWVBSQlhlZXRMWGFha0xJcDllVm54VmY0enp1Vlo0MEIzd09XQm1zY0k5aWdjeXF1dEN6a1ZrS2xNdC9VQXFXSm1OUGpYOVNjaTJwdldpSWhHc2M5TXBBM1VLOFExbzcxaE9aNlpBRVlmVmMxMi92Z3NEbzd6YUZXZ1hMVGg0VFJvUFVHRWdPYm9uY0pocTFDdmZXa2xEU1JsU2FrZW9tcitUMi81Tm5RdTRKYjFTZGRWN3daUU9GT0ZyU0dqcnJER0lIT0hTbE4zSmRNdjMvMFBVUXhXcFJXVWpwTjhudWh5eHhuSzkvOGpLd3psME1xeS9zekZ4ZnBibG4xSkJpa1YwcENIV1Ixd3d1REV3TEIxSkpRNndxRmhWMXBPMXVSb3BHcjgvSmpWL3RWcyt1ZURNTHcvQkNNblJ4enF4M3QyeUlIckxoWmhGclNWNnQwK0hXekdTWmZ6bWQyN3ZzVWhHbjJGbU8wTkRVQWJCSUF0a1RROUpxYXkvd2tremNOM2tROUFTQzY4VG40VTlNRDBDWTFJR3BNU0F1dXQvQlpscXhLaHZSZU9GVUUrbm9YMU1OMlNDNC9ZcGpmMk9oa0R5a2xMT04rTDQreXFWYkpVOGRodmM0UW8zYzF5MzFidU9rT3F0a25INEFseEZJK2RvcnJjcmpTYVRvd1ZNNlF1SXZNNEpyZGtxK0pDNFlxMWFZSWM0ZGlLRHFnSVVHa0QxVEMrOU5jN0pJa0g2S1VVZVlicjREWkpHTzVQSFcyL0M0c2VFTGRGNHp0R0U2SGIrSWV4TE8wb2Z4S1ZUL0xPRitXMldvN09MSFFPMkZ0MCt5MWlNYXRjZ1k0ZHMzVm5vNDg3cFUzb3BCU3czWVg4aE9BWUp6YjM4cEs2M2pNVmlkZVJnV2NtbmZ4RWZ4eWl2NmxzcmNoQXAxaHR4a2dqMUFyUkNidGRNeEtneWhLRVYyYWFaSURhWEE5ZkMxdGdFamJJbnJIdE94aGk2dHNGWVhOelhGR2tkS2VUMWdDYkRPTXF2S1VKc3UrWGlnTWEwdHFOMXVlZW5RaTdXZXBLV2tSUUcwcFUvb3JxTFZVTDFHWUlITERzYmRWZUtnTmNqdEpUZGljZkY4RlM1WW81SVRzNkV2MUtyeEJSc3lvUDZZUGo1MDFUN01CMHJNQS8vS0hxcjlNaWpEcXhOZjRzYTI5UGprVlhWQXU3eW02SS9KRWErb1lOYmRiM0lLS2ROSi9tVWdPVGxrV0EreS9xSVd2Z3JvOUZCdDZKc3RReS9VMkt0N1daQTFlMGRJckttRkVJdzNTN2ZmZ2JJZHRvT29GUlhkdFFncmpiYU1BNE9jR2xlRVl1QkZpOUloZHo1Z3NQYm4waGsyYlhmRnBBS1F1U2pJNGo0VjcrRE5YdXVUV1pnV0VDV0c5b2VyTEdSbXozNW1zS3dRdC9idVlNd0dRNEZac0tDZHNkaG53Q091QzNmcnVHRHI4eHJLcUxDRHFDYmdvVHNZWHJQdjNRVGZQZU5uMTByb0NQWnRYU2RFQVJFQ2xyRldQdVlKUWdXcUdYVzM0Y2FxTVQxVk1tcEY1MXFWeFNISi9wZ1kydkhoVlRPa3g2Q3lNTHl1VXIwaHJMNmdOMG9XeXJYdlp5S0JJb2NQZ25obXNXaEgrVitITFp4dHM2czRNWDBXOG1odkpLWjR2ZGtrSXpTZVE3bTUxaVpjdzlUMzFhQ0hJYU93dWxPd1h5QWVwZ0Z3VGw0MzFSb3c5UHFnR2tPREJDdk9SaFhMSlM2T3VLMVlJRXRQampSMVNEVzFGWjVzNGJvUFlWWnRIUWdEYWlSN09BeSt0N29YUTZPaFg5OGVRTWk0akpLSUVIcXdTbWxaVDdiU3I3QXBWZEhkcExRNEx3dXFKQjBSMTdrRmR5OFJMVktvdjJuUGhEYU1nMGxBNDRpYVJjZHpSbEJOTXVBei9RMjVtMTdNM0pyQzNRRmRvcGdBTC9CR1k0cndOb1duRDBvZFEycU11amdEQVdieHFZQitUTU80d2QzVjl3SWpyYkhSdGZQRVVwOVkvUGtyc0JydjF3Mjh0YWtOUlF0OWszMTV5SVZJTDBZNEpmVkx2SE5Dek55ZHdHbGNvcytSVjZwVlFPZU9LSWlnUG9STU5ER2NEZHVJK2Nnay9pN21McUtNdmcxS3hzNUtoRjRaS3ZBVDdZTklFZHZxY3BNS0ltbVdFZXg4YUIyV2I2cGxKbmVFd3N5ek5jWnBqS2VDdS83RGxUSmRNZHB1SGRNZ3V5cFg5dERqTXR5bGhEcEZnSnRRSk0wM3VSV29DMCtIb08yWWZzdGZQeUw5a1FhMFp4TVVRREdCSEJQK3NhQ1FlblR2cS9MRXBycFBRaUJIMVV3ZGt2OXZ5R3FndW9aMUx3Z2J1WlBBRmlOaDJpSm5lcVZsS21JcVIxYmhsaFlsYmVuSVRJVWEvMmZxNXN4T05CN0JLZ0ZQQW9ldHo0SVdDREYxVjN2ZWRIVUUvWkN5V25SNEdZK0RPWkhCQkxwa3JlUTc0QkNjeWVkRlROQ1ptdkZmUUV4R2pvR3F1cUsvTVFaNUpZSGlQdHA2MTNLN2hJcWhnQ3c5TGx1dzlXYXBHS2pwYW12YksvdVU2RFZzVTUrUTNKWTRUSCtDbW1hOWdLWjNnNVlmUWVnZmYxQUlaZHFNQXZEbWlqeElNY2daL3F2NmU1NDRJd2pZS2NkUitlUXRiWFdCQXZxdzhIQjJnR0VsZyt6L2MzVmNCY3pBd1pQSG4vUXh2SFBOVXUrN0xKdE9VYmwvcXFINWViTVVuK2pWVHVJbFMxc2IvR0xXOEpzOUt4ODM5WmxRc09lMkgwNEZUNEptUVNMOFcxSzByNXpiblpHVEJ1MXdmVzhOVUUzWmpLa1NoelpPSmgyNDJJYUhudmp2T3ZrWUZYL0duZ0FSZjlJUzk1WWhaamkyeWk4TkVRdDNxTjg0YzVqL0VXemJUYktobE1XRDFXQndKUGNCalB5aWFzUG9uQXpGTmhGT0V5MC9PQ2Fzb1orek1nR0ZBc1JPWVpBSDVmM3lZRytNa0dUWThSOFRNcnlaRjNyYWJNOUE5QlkxOUNnMDg2SFIxa1BTaVlJSkZXWTRkVHBxTGhKM0RLemNDQUw4d2xxYldHcVRoOUFkZ3VyTFhLOUxHR2U5Uk40YXYvRW5TRjVjeWg0aENZYXh1dWNMK3NaSGhPVXIydGRjMk1yWEhoWW1pbEJQZjhiWW9iTXpZRUVZZTJJSDJlcWVubUY0Q3puMnpTZEU1WG9Cbis1TGIxZEFkQXpRaTFWMTdwTzF3NmI3WHVrZnN0N2o3REJoUnp3eDNmZkRYUzUzc21nMU9kbjJhN016cHErbVJxUkhJR2lvVTNCWHR0akJ0M0VDT29hdzh5NE5oSnEvVDhUTVR2SklGRThWemFhVzdoQ3dJV05UV1JKY0R3dFNpalFlV3dXb2EzU1pqQkxkbVRTbmh5RVJJTE5KcXFlQ0FTMGsrQzBqUHk0U0lBYnRwMEFJNU05YlZZczd0d3NIejdCQ2hLdUZTVVFlaVdZK3JiRWxrQzZ0ZzYrWWJLN1h1bnU5K1BRRkVLMUdSMUtTeU43ZmFjbWtJbTBMZ2RLSXhpc2J3MDRjS2x5QWNJZ0swTldTTG1WdU1iSEVSd2V4anRWYkJvemJRcnhNanBCVjV0ZlZDcjBnREZobSt0bUhXbkwrbElsVjZXajJ3TWFSaXBjZ3ZCdDBmekNsS1hSc2V6TkxPL3RYVFJnWEVxVnFNRmdYWHAzVnczaFlVSEoyTThhejdMblYrSDVIdm5sdVpUbW40dDdmcmJoZDNYMjBUbU1YYm9vSGFRdUE5dDQyQmJiZ2xaRDVwcndGSEdRZlZJbGQ2WkxvSCtrWmltWFlsRStRWTdCdVVkejRkTW1IZGJ1Q09RejdXb3d4L3ZQRC9tRFMwcGFkalNjTmpIVjBRUXpIbUtEa0t6VzJiVDRLamo5NkErOFhpcm5CRmJDWU1vMWhuSzBqK2JaVngzWk9qdEs5ejBJeTFwcUZvYXBBZlE5WHFIS0VJZDd3NjVwbVBPSENKaHJaNW5odWh3OHZCWjBrb0FIVE9xcXRIcElmOXBneTE4NnVUdldTQU83aUg1U2ZiMnFzMmExUk1rSkg5Mll0NGdRaTI0WXZ6S0g2Z1ZITVlqbEQzSGh3dC9BNnZpUVlaSjhOMi9zTFRkZ3o2QVd6QkpVbGl1UmdScWxaU042WVFraThsMUl0ejRqTFZTMlBPMW92TlltbzJZNGE5UzlVRmFCTVkzNUdBZDIxN014L252a3Y1c1NiamhRcVJ0TlI0a0Z2UWo0MWo5cy85WlQ2dzdjZWJ6cEljTDFpbk4rc01aWW91cy9tSXBMSEhQVmVEREJHTVl3bmJXa0lSSEw0enhQT0Q5bUxENGhMN0dmSWxOUEpQRFcvcnp2YSs4M29rSXBYTjZxN1JuQkdra0taR1hHQkZTbDAydTN1cFVwRzkzOG5hMm1Ub3JEWldibWt1ZXRUK0l1WXJTVWdWWEdMaG5LcDk2clVWRXplNE53RFFDQmJVbVRwTlFiMHJQQkVDS1J4bGprZ3doQ1NjcVl6MmUzZ2dRMnF1VnRwZzhHVDlmdDJqMnRXNTNzcmlDR1ZoSkdnOXNrS2lxTFlUY085YUVNVzJTT240SVlmelhJNVlRdGJ5Q2l0RXRZemNydzBMeW9GaUhsbDRJVzc2VUJ0Q001U3IzSnN0RmRjNlUrVGtYT3hEU2V1Mno2dmZoS0F0OStJR0dLREdnOTlBWm9TNXFyRm5LdThRK2JpeFVtdjNjKzFJZjk3cDJzOWN5TG9Ob2l3eGVabU8zUmFNUUM3RmxRSXJENzJteHhrVFZ4NldDNVlhRW1sQWNrSm1jd2EvWko1bStWZ0RGSjFod3RFejF3YzArZjdONEtlRng3eEl1N3BLc2NVRVUwSWQ1SmdpelhWTUF4eUFHbmtNUnRSVFNmcjFpMlo3L1k0RlV3M3l0Zy91ZFF5UTR5ZTQ5Z200YWU0OTB2YXNjSWtwQ014WUVzdWIvV0NhOHZqTkh2OHlyOG96Q1BxNDU3cmpIOEl3NVFSUlVzNGZialBSVk56TTFRU3RRamo2bmtZaDgwRm5XcHVaR2VETzl0Ym5kbEhhYXlJZExlT1ZyM2tFSFQxYW1vZkh2SUdLUSs1cmdiTlR4K01xenpaRHRMTkYvWU5vUkp1bm5YUUhkc2gvbDI3WTdIcnFzR1Z1S0lCK1Jnek5VYnVaM0dnMUlpU0dXcDhlUGtqeFJGWElMdlRwVnBkRGtlWlpjVFc4T2FwQjY0L211Rjd3Z0Y5NWRXOXhJRWtURlY4bFlxK3JpcFhFc1N6bFRqNkxIdTdVaG5WZ2pEbkFmMTN5bm5UM0FsK0NWUHpDYVpMNEVFZmc1Tm9lSkdxM3doaDRnbSs0Z3FLVVplVjBDOU9tbFh5YWVJU2JIeHRiN0RoR2t4Rm5KN0Q5SUo5RWF1cUFvdXg4T3B1cGlyY0dpOFF2TDFocTBRSURaR1NtcmFyaWJjNlNVbFJ2VkRhMU43Vzl1cVIybUNKT0tlN1NOdmRaaHUwakxrY25jajhOWkIxV2RqQ1dxeFZBQWJOcmo3VGFsWFZISjl4WldoNVhrRjBET29qNW1HVlhhZmd0c01mV015cnlwT0VKVXYwa2Q4UzRaT1ErNHd0aXdNYUswc0ZaVk1zbjlmYXd4WDFuVTFGYTJyMENqcDBrN1FXK282OUZpZ3VqM2t3UmNjeVNKdVV6dFRZcGpad0U1ZVNMc1g2VS94S1BNMWlyMjY1S1g0QVRjY1AwVXJEY241RXhBL25wYndvTzRVb05jWWZaTHg3UkR3N0FvT1VpcDFUdjh4TzFFY0lIOStiWGhwdEdWbGJ4bTNsUTl2cWdpRnhaYkJWbThyd0RUNXl6MU9Ka21EbGthTkRUL0Z4bnQxMU1QdlRpK1B3eWVXWFVtNjVNTEtndk1JUHBsYzZaNWJaNFlIQ05YNEpiRzlVQjNJY0MwTEE0YTljT0doNzN4MEIwdU54MWRORkVTeVI5M2NuUDNtbVNJaWdpV0hUSm03ZERVWUJXVVJ2Z2JWSCtpTS81ekI5ZDQxNXlQSyswSU9QMU4rejZ4d3g5SU95Y3pwMVYza1lRbUxNY0t5VVJYZzNwSjVDRG5leDgvWUlYWWNsamR3T1VzbUNLcCtRdDRtcGFRNitJQUdHb1haQmc3b0VhdFU5RHhqRmxBSlJWSmdWZm9WTlZaM1o3Y0VNSnE2ZG1MT2ZOclJuTTVzbGJWYnpaRVFtczZTdGpDQmM2RUl3QU96aDZVdHdHbHFQRUZNU0tTU2VsMXRTUzFqc3lNUWFhQkRpWjdhR2JMbVRHeDBMeFhnUEV1dWNXTVZ3eS8wVERMdW9FcGo5Rkk3dG5RM1BnbW9FcHBqMzhXUFZ3a3hpU01WREdkcFFXWFhsajhQVXNaanJNOFJuWmpuaVM5NE9TZ0w3akx1SDE0dGFCVWR4TjJSMjBrb1pjSFRFWDFGSjJETFBnZ2V5NkVTUTltUmhsMGpzSVpOOGYvV3JoY2tseXFOUitFRUdyeVNjcFE3M3dTNGp4SlpaRFVKZ1R6NFJ5NmV2VGFkaXRGaU10WXpXSUQ5VCt0K2UvbzVacFdLeWhNd3c3T0NOV1BsbkprbHM1NG5qcm1aa20vZTl1SWVuNGlhSjBLSEdtNXNVd09vUnk5ZG94ZWhtN1BEamhTODhKNHIvb0g3ZTF2MWFTMklPaDdJNm5ZcmNGL3JhTGxNSEtETTVmV1pGNm80czZodiswSUdOTi9BRmdWd3lMZm9WUWkzNWcyMWxDRGJnZ3RhY29CTTJIM0w5T0FJaU9ZdTc4c3d5aSt1YWlTbktPdmhPOTFSS2lyNmlJZ0t1TzMwVFpUV3R6cVJYVTVxcEtRRXRGT011Zko0QzdScGFXck9MRmpVUDNPdGhPN21GUVl2NnJ2L2sxUFcxT0g2TFNsU1hraHlvU3NseW8vaWNLckdrWFlkWFkwV0RGaGVmaGFVZVpEc21ib3hudEsyaFdaenl4YnlNNDRDdU1taVZtSWtyQldiQ21GTEgwbzUxbGZpM3d5Y3VvRHNQViszWkEvNkFhb3VqZmdEZk5vQ3ZyTlZnS3VQVnNkdTNjNG9TaHZaVnNCMUxPN1FadUJOeUFpYWhLMHJVQXhFQ0NwOUVnRUFmeTZRUXRRb251amI2allrcWg1UUYrVlBkTTJxSHRDaGdwK1lpRVpMbVYxQmFYeDZ2SVBJSGZtR2dSZFVoYW5GbGNLQXQ1ZFRDQzk2VFE0N0lRc0lwYUgvdVhFQVNwWU9ZTHh2dTNMTHRRcVlDbDBhd3RQbE5ZcGJESEpFQ0dtOVpnc0ZMTGxDR3Q4TUgrSytJVVdoUDdEMUNtZ2IraDJnSVZURXdKdmt1VjVGY281aXhYS2VQNDl3bktReUwwc0ZBWTdLZC9ISVJqbXhPTG5tMDIzQTdmcUdZejBuZ2hhNWloK0xyZ3ZLdWh1d3lGcnR1bzZodmx2NnJ0Q2I0TXYyTitJRUlvZ2ZxMitPVGRVb1BCY0M4d0hIRVcxWG5BNm1aK3l1SW1wSjlrN1ZWOTh5YzZoZWlxMzd5MHNaQmJBaExGdi9LYkJ2Z3JUMy92TzAxd2MzZ09mRkRuZkZrbWQ5eUZGcXFodEU1bU5PY0RFdVdUcUlmTWxjQU1Xc1BPTSt6Zzh1c0dPOTgxZ1I3Y3A4aGJ3RC9OWGVaZVh3aW5rVmRSdDdDaXJ0UzlTVkNXK0RnNGZyTjNDU1E1cGpOSjVmdWFybDRkMXFpeTdML2x0S2s0alU5a001UU5YKzYwbjRTckw0UGM5L2JtdHRXbi9ScmpTenh3ZFl6SjlnWjc3ZytsVmk0R2RnN0R5MStSK2V2enBnSFRkSDNITm1tWmtlaTBsd3N5bXVCK3pxWkluMFcxRHhLSGs4Zy9CUSttS1ppcWlLQ2R0TDVzbXJxd21vYXJHZEdhSkREaDBnZGYzdkJEVGdKbUMwaHM2OUJ1Rlg4M1d3Zy92NlJvS0hiTEM1SkhQVnRCakx4d2VHR0dENFRzOEpFN1N1MldKcXk4TGgwM3BGRFBRRDZCdGwzMmpsVzVza3FOVjMySThweTJNYWFEMjFqYi9SUVRDR1BlNWxxRFVtMytGaEQzNlZQTERZWjZYNmxwcCsvZitjMHRPWGZiRk9jUThOUmFHZTB2VUZ5MzRVTjlTR3Qzck9LcmkrNzRzUE9mVGtEYzNEVHhMWStGS2NNYnkzYWh6blhnYVB2eDlpOTVtNnlwSWQ0VDkwUnA5TWpOTEptWU5tV1BsYmNxSHZ6WUQrbk5kS2NxUTNuMnZBTkZTNXExZnh6a1NoUUdVazV5T1ArNUlHWDJHRXMwNXZseHkwSG5SZnFISHJzVEQ5eC9LdnpNQ1NuYWZEaXFXYW5Gc0k1ZmpPeFpsVmFzZGdoeWtTRUh2b2EvMEJzYTJVV3BBNnIyMTZzYVBlWTlGWWYyb3o5bjRWa2lrRXYwUFZldkZkYk5melRteXcra0xpN1RPSEoxbmhmZGdISXVxWUxHSjRsaEh2QjRUcmVLM3cyelF0ell3OTRFNTNvMEw0Si9iTWRtMzVaUHdUVkJOeGp2b2pKakFOYTJxemFoMWxjdFVEc0t3RnhjYlBsTTJmbTlRL3lTY2xqRDlpL0N2Nllab0pmUEQ2ZWdoeHp3bkpjOW5GUlRXelVMcDkyeTRBNVJlRk16bzZtSnBqVk51ekVlb1FIZjFCVG1WZnJkTVVjbk1pNGlXZTZrbGF1MWhtZFhFVDdla05EOEE3ckFReSsxc2IxMHE1eklsbGxsYWdIa3JIRDBzZVp5L0FiYzJvN05pS1FhdlBFbEhjY3FuRzlLS0I3a0NhTTN2VWJvNWpzRk9tOTJRWU51UmZLWjBOdVZ2dHZrMWVldUhlN2JKT3hPT2ZIMkFncFpla2QrRCt5Si84VHgwTjFiWGplcGhpaHlSSFZ1QXdJcHMveDNJMlVwU0hYejlBOEdPQ1VPU1d4cnJlUEVoT0grczc4Q2RidmlaWHhYOEJtK1lwQkNPQmpVaFhycFBnNUYxU0ptRDNqUk55TU8rQmtyNk5sSUVidng3cDRieGZ2bWJQQ1NCaUNYQm5DTFhCcTdNd1I1Q2ZQNlhoNnl0NWQvSUlHbHlsaDVXT1JTckNJVGwydnB5cTR0c3ZFNm1Ec2Q4TWFsaFdUWVJlRVdRNHVHWGdPdkJtbkU1U2t4M2NZbEJWMzdrRVVDdlRPb05pVHFDMGF4R2JMS3dzVUxncnJhOGxGcS83WGlpM1lhc1BpaUswZElqNjN1NkNISG1NdWhSWUorUUt1SHJmMUFjTGd2U1ovNGo4U3ROaFNFbTZrYzRMMWN4Umk0QmhmYjh5bnA2SVRIUlZtUG5wUnBKNld3NGRSWGRxeC9DRjFDQ2UwYkxLOWFXaWxpWTdWbUVRdzBqNS85cTJ5RnBZVlg1VnBjcUtOZkJRVlR0ZTh5U1VrMlZhZGd1eStBYXBmUHBtVndTaWV0UGliWjVWNkliSmpvMUlmbWl6eVhpY2poN2FDdzVGT21XZFpCdUhIVlVFdkMrV3Z1a0UxRXZiUFJTcTNZVHdGOUFROUZQTVJsUk5zbDFjQWt0TmV5NExMbWIwNjBhQjdjZ3lzRnQzOEJqZEZIVkFQbGZRVjhnYWlEQ3hvY2lRdXBoalBzdDNzdzRYVURVbllKN296VWVQWThyMG9UQ3dRVVdpS3QwVkZ6bkhQSWd2WjZ6MEpwQTY3YytZeDV4VUFnRWZxRWFNSmdHYzVvaXE3WWhaZUhWNjh3N3VVb3plTWJRSlZmZTBlWStOLzZxWmlPK2RDc2Q2WGNQSEVNOUxtbWVScklzR0pHK1IzQUQwQzRzRHBGbmZ5OS9VZ2htc21acER0dXcwbmxJWDU0czJBTEVlQlFMV3JPU3FaTk1vM2k4QW9TWVRtKzJQbGNFOStSQnRSZWlHaGhBc0RLY0VzUkl5YjViOVo5bjQ3bHJYZ3FlV0IrTXlTNnVpVGN5QnhUWE44OEJiUy9VL2dLQ0pwZUhkdVVSMHc2c1h0cFE1dm1WVStSbnh1VVdOWGliUi9DT0NPeWlHSU56QkRIYlpTWkpMNVF4U0M0ZkQzVDY5T3ZlYlhlcTJOdTBZcnAyOUFSVFRhUmNVYVc5d2xhRDluZ1FwVWlvRFM1KzdmZk9aa3JSa0MraHBoTERna3BteE94RmtmSWtTQU5tYUl3R2x2aUVxaEFSR2JRRHRYaTZFckhtV2h5VjExWTd4MUtCaU1CR0R3QllpaVpBMFVyOHM0cnFIMXM0a2xpRGVKaEZqd3dBUXBPSjNUaWhNeDBnUGRzWGFvTGlVY3Rid1hEV3ZsR0RWMWRtU0tuZUZ2TndmZzlMbkhqeG5tcUlJVDhDNnNEdlFyclZVNmhvY2pxeTVlVzMyWC84cHVLMkdwdEVEakpVWG8rcVRkdVp2SnBoeTBEWG41YUwwUUdFMnJEazI3MXpDaTVkNTVEck52MS9HY1NKVU1ScStsKzVRL2FVMnlJcUdZOGNNR29qdUFxc0c4bk5ORDdnUW04b2FNWGtaM3JTck9udnlMc3lGK2FYRGpOc0xRNVk3L0N4TTdZUVk1NDB2amxVajJ5QzJRbkFIRGtZNEVFaForTjAzMG1jWXdMU2xIMVZMTTc4Q3VXNjNuMUVJbGpmVVlaT2J2VW1XcWlIVEpDQVZzOGlCK1lRYU1XaEIwZmlyLzQvVndNOU8xNDVLYkdEeExVS3RwYnQ0ZDllVzcxUDBGSjNoV1ZHSlRudHY3dnlOcytJQlh5WU43RlJ6VkhQbkh3b3JuOWV5c1BpSmg0d0NSOGV4ZXR1c0U4ZnRjU20vMnpIN053cFoyTnBiU2lDblRrK1VzVHFUa1gwd1UyRXF5UW0vMGNwK0tPVk85MkJFRjlkSnBNNmpaWWlpMUsvUm9yMHpsZXlsYjdRa0pWUVJCTlpOblg3emVSMVNCcVlZbUtZWWtNYmgzeHJwK2dSa3gydm1Pa1RoUGxoVFNOcFMzbmN4c1h5UWhGdW8yUjZUZEtRRzJaOXd1bTFHMnc3MktXQk9UbnZBc2dwc2pCSlc4ZU9VSzA1WEtoR3g0dzFGV29DdEtneVk3Vk1PUjRRWW9oNDRHc05kMC96Z1U3dWRZVFdISHFjZnhWNGxEWjV0ZGdYSi9JenppSUxweEZ5Nnk3ZkpUSTRzanV0MDlRWG5kbElCK1IyWFUrU1paVjBmWVJMQWg0UVdiTlBmMGQxQ0FBYnJIMG5McHEwdm0raXRHYWpMbmVMZTRMc2NWYWM5MWRlb3RvbTd4MXdBZFI0QU0xR202Z29mTURHMFhYb0xFTHpNQjNOVWpzYitnK1RGMmQxVHJLeWlRTUZnUGU4bVNTUXN1a3EyOXYyUGZRV3liU2xIdlJsb3B4OUdTUnNzdjU1TTZ4NGF0RFJWdzhLUldYYXNvWk5LY2ljWTZxcXJsaHhROXJwQ1J0WUhQTFpuMlpMVjlIUG9oS0crT25ySDl4SGJKZ3c2eGd0VmFvNEpOejFIWDRIZnJGRFJhZnU1T3plMnY3OVNUVWxwK2h2OFJtdlpvWWxQMFk3OWErcXVwOHJkVDdPeXdrN200c3luMUM1QkdKUEZLMDczTEhuRnNiWVJ2V0JNTE5mQ1lDa1hJVG1qN2dySXdCNkFpOVpZbEExVXNueHF3Y3VQOEYyV1FGRzJYSHFzaDkxdmlRUWVhTTZGVzNOT1R0UkIxeXFkV0RVakRjWU5hSHhnNmJnVzM2QmFGMm14NFlkbFc4clFZSTExeWNlQmNuVDNhdGNsZHkxU0VNU1NaVS9vTm9VeEd4U0xzNm1NY0lVVVV4bERyeHpOcXo0WjR6NlhuZm9qUURXZUdZTkJrOU1oaDkvNmN5VFRLNXZLOUFPaVJleUc0L2JUcnNwaC9YU1lyeDRGQmRVSUpzK3M5Q3FqUW9kY0NsR3prRzR5SDIwNUc0NkFPSE41dFdDa1RHVThVMU15endQMnRrcmFhajE0bkZpNUcyS21BdFB4dE0xSUhQeUN6OStNTlBHRTBkalQ4RkFmUDZyUGllVG5iaWpQK0dLVEJ1NmhHL0l6dHhZWFU0Y3ZHT2VEVnB4dDNTN3hleDZVczZSMTRwK1FuaXdyK2x5RWc4cmFwWE5OOHNqUGpKeUhlTW9QS3RoTUNJS0pJR0NGRm5RR1BlcTgwQWFnZlY1MG8yWlh3MmNkNitaZy9oN29uc3BIS0Vzd3ZMR1pCd0tCRmRySzc1WWV3c0xQUTNmUlJ5ay8zTk9IY0tuMWZzVkorRmJYZjRVWlRYbWZVQkxWS0h2UVR2d01LejhBVVJsVGQrNmxxWmxpd3pQMkFaUlpTeGZIY0hDRzVXN0N2MVVtQTZ5dUc5T1RWL2VqcVV6bmJKZHkvbXdXd1ZkdXozZkp1SmY2b1RsRyszNWZORWRLY2poVzc5ZXNPOW9wcEVVSm1TODJPQWt4azNaZ2lWbVBKZWVIbHlsNUhGcGpLdStVVXhwRjNHT3IrOW1uMmxlU0dMOG45Smt5cEdRazRVUlQ1bS9Yc281bFBUR0l2MGs1NENQeFJVaEhsVllVRlR3OWtxbjR5SENOK1pIYkNKT0dnUVZua25XaldGamw1S3M4Y2FGTk12dGthNGFuVm43bFRrT0ZKcllFT1hjWFJNRnJQOEZjbjZiaGlRVGd5ZVlXY2V3NVUrVnZGckxDQmkxN3A0TjBodWpGRzlSQU12OU1XWEhCZXlhM1U1WWlmU1cyczNraVBmaEVEcG9zcEZlSWFLSm5rV3RkeUtDZC9RbitiQlRPOVA0QTNTTmZucDBKMTVETVFHMVhRV0ZidGM1Q1M1R1VqWGg4cU9xNjVQeHpEMUdHNEF2cm1GYUZQRW9WbEZWQmxpc1BUTmdNK3ByK1BMTXcwd0Y1SXB3emhlc2V6cXhmSDQrVkNLYWlKazRJeDNSQjNtc2t0VWZ1cEZBVi9VeWhsRWlQaUczT0R5Q2tKbUJuODN2Rks2OWhDNDJMZFFURzEvSlpiZW9QSzdOM3NKOEwvNmp6TVlsUTBPT1J3bUpSQVZGVUdwTE1QZmVGbTVuTVUvRk9LUHRHVzJoOFRlNXVzbGFta3NKMU8rNWk2MEF2ZjlIZ2lZSXdIbVpQTnBJcFRsOS9TT2dwZXY5cEs1ckVWeWx0SGJDTFdla0dEaU53b1RLRFZMN3NGSThGd2VzS29kRk4veExYb0xFRmNyTFM4cTlVZUJVMmlZSzdQeEQ2QWw5MjYxY0lUT25pR1JmQmdkby9pVWlBcCtvRmZJc2wrb1NDbStOSU5DY0xwdldGYXIrV0ZBTHZpa2RuVUV4MzNiSHh6cWxGUFMyWmNPTHhmV3poZGFYWEpsL3NTUzNXYlY1OWtLV0NKcTBtQmt3dGt4YkZkSS9TU2JIdkJGcmtNcGIwTWRzYWNaL0ZGRWdRd0UzYUdOREF4STJIaFJkYS90Z0FxNjV0c0VjQWxYR1ZJb1l4dS83cFJvVXdZeG5reE1ocEpwVFYwSVVCZDhNSVNENnhkRGphTE95M0VNWWF4VURFamY3NndJS0l2S0dpUzVMQUxJTCtCRSt3S0FnSWo5TVM2cGdnUVdLcXpjWDJSWW51SUJzaUt0Zm0wMVJaTDlnUHFBT0xrMkg2QklQbTFqWm9vSUhtVERzZmlPZFJPa3pDNXVkenN2NHh5b0hTYXRuOHdUZXB6Z0VqaGlwaTFhQzkvaUw3Vi82aG51OUhFOFBMOVgxYTNkaFY3Q1htOW5vRjhjZ2ZJOUUvMTJndTE0cGUxakNhR0wrYkt4eERIRHdncXBYbU1oNzB5QS9taVd4WWV4cExTdGR3Nm9UQXBzZWVkNWtsRXhzRHBvOGEzS2NvdThDcGd5QURNdTByUTg1Vm1ScGpudGxXTnBYQUhOYnp2aVpWRGQ0OXZvU1FMbG53cVgxdEhOZlNPaUJxVEFobDRVZFRHMTJIU3NPUWRDU0psOWF3UzVDYWhXUU5uejVWeC8vVi9DWDFYWWhNNWxuWGdRMkxxRUN3UlV3YmNTbmZMaTJ2cS9rZ1pGYi9wSVBTL0VaeFlUQ2Jwa0VHRkc3VXZyREd0M0FrTENEQ2VURlhmS2htSUoxNXBZSkNzZnVWeS8rZnNQVnlTekhnMTRXeXFXR09ZSS9WQS84ZmozSGttcFc3Z2JZb3ZwaW5jR2dPSlpNY0VrcDY0UXF1UnlTVkhUR2pDUm10MDJwVUh4NS9BS2pMbEFCcWFLZ2hKZXpXYWxlektSekhFS0VnV3UvNTNmZVQ2NWdQMFQyUlR5d2J5ZFd2WkRDK0Rzc1VsYWRPSkVSekY2ZFlMbDBwRUFDVEtVNGFWN3FPV0ZLN3BrTFVBSXRXTXNHcnFTRnVoaGF3U0IvOUk3UlhmdUYwNzBxRzJnV3F5b2JpMy9iYy83RHQwNEtBR2xlSlpCRjk4WVRrbEJkY3RzeUFwelM4b1pIcXBKSXFPTWhtcDZYMTlYaEVqb3F0TS9mN0hHSkV3NUZUSFRJQm9IVXR5RXBhYjJNMTNHdDBaRkQ0SEJSQXdsRmlNQzR1U1h2L05LWjJLdjVsaWhYZnZwVGU4clpzcERkQTJRRmRMUElLWWRpZXhjYm40UUFtZWRmZlpTRmhDRGxlMmZ5My84aU5VeUdaSWkyYUo4L1dmYk9rVXhRb0ZlYzdQa210eERvYkMvbmt6VlRjZXV5Y3RNdzZ1d1pjTzZCWUE0Q2ZYZlBpZ0VLR2lROXZBOUgvdTJoUmRySzdPMnNENUR0Uko2OFZYaGFWR2ZnVGdKY2V1OHlielBnRTZHVmpIRjkxaUIwK1NiRHRPMzkzTWk0MTR5UHlFRTNTMmUxMlVhakVqNHpaMVo4K3FrQmQ1ZkZwVGR4Tmc2MEIxSXM3VVpDRFlQa3dETVVuVmp2V2VKVThrSTd5SWQ5clVzbTNCWmJLaHl6bU5zWHl4RlJ4VzVzRzhHdG5FSGNlODFsNEE3YVhheENjem82c2F2VTA1NE0yTzZ4cUpTL2JBUWo3aGVvdFRRbWoxVG1LVWJQTVFjNldSVXlIVTVna0pvK3p0NjlsNTd3bVVubW5waVZhNlkzME1CWnJ0VE11MmRNa2hOWEkyVm5hRklra2JaKzZMekRBQ2hpV3ZENnc0bVMzUUVSK3lzajNncnVEMnJQODVHZVRqZG5TbUNhVG1NODVjbnZPY0gxVEp6Tng2OFhFd0tSRHF3MHFzZGdkK2hkaVk0OHY0dUpoMjUzR0tMUEpyRVFpUVZaVEFOb01lSEt1RUl2aFZVQjJBWkY2RG84RkJPUUE4cE5zN0dySFcxcWsvQmZ1aDZtampQV3hVT0tWVURYek5sTUNtVHBVTmloZzhXSWllSFp0ejJibjRtaUpLLzQ5UEs1Z3RMcjBYMGJ0d1Aya2UwamZCSlJreWJuaXBieTI2WEFSN2hGSWM2a1paTGtreHJ0dmRRWDNWaWFCZWg4QWxVTEFwY0QvcW1oUEJmQ2NiL0JCOGRYcCtuUkRuM2xPLzkrd3Y5RDRya2NpM2I5M3kyNk1TT09SbVQ5ODNZM1Z0b09jaXlVbVJWaThoTkloa2lPOGZ3djczYmFxUEFScUJDZGNnZ0lFMks5YVh5S09GdWg5N3lFbzQ4a09aYVJMTkhQM2NDYi9PZ2sydmNQQkRFdE1DTFRNck1JNEZxelV0cEl5eUVFRjdKTnVYOTBNNnkyZjhXcEtFdHpwM21ObTg3K0lGUkttSmhYbjFaVmZWd0VVREFmVlY0RTRvZXMrdmlEdGZPVGVaczIvdk1jSTZYbVJ5QitZMzFSUGk1R0hHeDJVZUhzRDdvblJpVnZIdUZRSXdKN1NtQllCd3JhU05Hdyt3ZC9rcERFazh5WFowVFNoUUZlNldaVEhSTy9jQWdOK2hiQWdNYVc5QWxmZk10VzBUWjBjU3k2RjdtbWpxYmRSNFpyWTNucjZjWllFaUsyRFdVWFI1L201K0pQQUlwdTRvSjFVV3YzVnl4QllZcWtJWnFxbUluUVY2ejAwWWVOV3Q0NHVVdWpmUjN4eEV5TU1EdUp1aVlHTlZwc25QS2sybC82b3pKUGJ0SVEzR2w4NmRFTEZjNnQ5VE4yT2IyYUZGbTBLb3BnR1Y5YTFrdXdWZ1dETE9ldVY3YklYM1pUT1lScXl0NmM3dlpmQjR3bGU2ZXc2Tko4UHpUL2dVZnhYd3g5RFpMcGo4cWlGSDBxNTI5Snh3VE93Q2g1cFBqclh6ZUp2VFpwbUVsSzgyYVJ0QmFJNFB4MGc3b2srbi96djIrYjE4UzQ4WjRtM3gzWmVnSzJsMHNDZTR0SWhPZXJXM3BHUk5qWUVRd2E1dUhVdVJGMnR1NkJrclhZSEYzcDMzSXNFOVN6c2VBcVBCWjNsc2NMSHk3dDJ6NUEzSGs1UCtuQmFzNUJTVjZBVjdJQ1l4WU95LzE4YTU1NEgrQ1d3MGxGdHpwL3FlSnZGL0NEL0VjblVKQUhmaHdOUkRFM1k3cFJXcUFxMURDajF1cGhMQzZkOFBucHgrcE00TWxJUHBQV1dFMkJHeEZVT0xaZEpJVlFsTlZQOWRBNUFCd0Ivc09nZlQwT1NFNkhVK1NyZDFscnpVUGdNVGF0bmFQQjlmTWhEWWVPWFRabVp2SDlET1pKcmNWZm5zNGM3eFliT3IweW8xYlN0YmhsN3VRYU5JRDQ2T1kzQUhraW9mbHhRM3ZNME5vR3V5dmpkd0VCdjVLNm1PR0hhaGRHdWtTWTJ3TmZmUDJtcjcxU0U3RVJaSlpVZFZNWERaTUZaWGx2SDFURWI2b3AwN0pURDNOc3pPaEtNYW1FWlhSem9BVWV3RUpGYjhEb3U0VEt1bTBjYVZvTzR4bHE0Y1c2aDZjQW5pRUtYNDNKM0RqRE1VUUxOQUlmaGplVUFWNUw3eDE4em5tc2NhTHdzY2p5aXp1WW1hSVdpV1J3OUtYVm52VWJyMEJ5dXRCcUZNdDgrcStLTndxV2s3ZmdIbm53eTQ2UXFKalp1dU5NdFliWkNWRkduTGRSZkt6UFcvRXQzVEFlMDVjV0dxY0krZ1JSeU5IR1k2Z2dQRC8vWFVUUktNL1NUWUhNUWlEVW9tYmxDNDNWV2w1VVFIMnZrMUEvSHFWRk9zakhQeUthOFpWVzJlS2xSOVVFcGJYVWQ0eGc0bDFrTmFNUDlTT0ZTcVZKaWcvTjVhcTRqQ3krQ1R1TTNxMVNpOHlraTBoa0RJR1hKOE9YSkVFdndyY0VBUFovS0dYRXB0VThBQnFlYmNRbDE3bzFITnVBQ1dTcFRBd2w5MU5XWHV6RVFrOUt2bHMrdG5JWC9WK2ZiYllKWHk5M2VwNWZSQXdtMTBhbnk5K1hhSDE3VTBVNEs3MnZMSTJIVDhnSGx1VTd2S0c1ZGtSdHF5amxZWVh0bU5PRURWUitnRUZLcTFZbVkxUEdYRjl4ckVNcm55OTYvcGdiWTlaQ2lSdkkyTG04ZHpYUDhrMEV0djB2d0xNZVVtalY3ckxHKy9yZWRLUWg3T3ZuSGgzOXU2NCtEVzk1akdJTXlXUXVuRmM4TWcxSTJRMEwra1BPemN5R2VCS3FVSmhrWG16SHFNaXFGaXRpNS9TTmNQNVRrWm5xcWdqeVBTV1ZOM2hnTXhNNVFtNnJVMkhLeVJqYjJiRm9mcFNLWEg4ZW13QW1mbFFMS2Ivbkl1WXVqZW5DbHdDTEk0L2JKL0loTkVPQ096SG5SZkJNNFpTeXgrZmVsTzliVkU4TXZmTEtKeHRQVkUxRysweDYrRjcxeEF0Q1BYcGlpZW9la0ZnelZjc2RjMENqTkFuUS9aTnIzM1ZtcVVBdmFTUEJuUGxvaEs3NmwwWmx0OVJUODFONk01UWVnTE03WnJRczZMaE1TQ3pDcmJvZ0FRaTVIb24yMENOUzZ5RUptQnhySTR4Mlh4a1VUOXA0czZob3V3YkozcVNDVkFWTmUvbGFRa0FjaEszdjUvOTlRK3RiNVJEbGRrMlpGazdVOU4yai9DTWZXY3NJa2tPZm9MRUhLdUNUMDUrNXQybEdSMmpOV0JZVXpxQ2xiZnIyU2Y5WkpvbE9nbGlSQjBqY3B5WmkvcDZqT2lKM01JU3drNGRCVFRBN210emhzdjloZzMvekgwdzN0ZEptU0M0RjZxTzNCbFhjVit6TVF3OWF2bnZvaFJaRitDM2FxWTZXcWZ5MzcrQkc0aVFIb2p1VTMxNzVJWWI3NUR3ZC9ucVdtWVc1aDlXSG90aXR6MXBBS2U0K3BhSHp0bnZwRHVqVWRHdnFvalhZdm1ENERyQ3dRVGNPZzJVWUxZMDAvbk5kZGRTK040YWYwYVpCYUo0aHR5Y1RxZloyWHNXV2E2L2lhSkwvWFB4WTMrYm5CVjI2YmtndFBubldwY1VhSk1UNGVNNFRzSTRkRkJwb2YvYW92eDQ5RjlPcEJWSEEraktUYTBWSmZrMEl4WlZ2T3ViaXNBeW1SVXE2bk40QjlFK0NJcFZHVGd2U3BJK2pRWFUxck1ZbE5UeXBsUmtJRGQvS1dMZWZhcVFmUlRwSERDa0Mwbi9KU0k1VTFlVmxZNkdhVG9Nc0pyS3lkV0crNHRlUmJELzU5ZGRvNDdxd0hXaDZMN1hFRzV1dVg1N3BkM0xWSU5tRjg2Wko4QzFPRWZSK2MyUG9WM2NMWXFpbkJKQkZhVUlGZUtIU3FveWl4RkNzMnlhRGRQb3N1T0EwQzkyL3ZJNXFKZUZPWHJ3QVY3NG9FaVRab3Y1cWMzRWhTd2xEdFpoR3pPQXh2REpKdnMrUndmMkFHRzJuWVpPdnB6ekhHY21ReFBROUtMTi9RTENDZzljRzdnSEVSZlJKdXU3U3RiYnFTWWlkTkhBcEVoTDUyWW9LRlo4K0tDSjlWTExnbzIxanJraG1kME9CZEFUVC8zSXplTWhVZWYyenkrNXNnbVk2Qmw1bjBoOHR0bkR1VkpyQjZNTkQ5UEtmTFBKeGVwU0Q5ZHpEZ2NxN1hKcVhqTktNcFd2MXBCTjkwQnJkVmNNamdjVC9QUm5TR1BIbTdrUFFDbkRaVHR0aEpVM1FQamdlUW15SXVGeThoODhvU2IxMDlNSG5UOGVQNVpTZUwzSzNrTzlKK1VNOW5RWjVwRG0wVVdRelVvQUdSUGh1N0tlWkFpYjFmcTJuNkY2TDk4SjZLZVVsVWJWRWJSQml2N1hVZWtweENjdkdEZXNRYlJIdXlkV2xxdER5NVk5OFZvWTZOTmlvbHA3WHk0bUtzSVg5andvLzZRc3gxNjVTYzN2QnJHREtnbUZPL09yRE5GM1ZjR1hhU25qWE5OblA4b2JEY091eTZKNVEwUGdPZ0hrampCSVNPMk5oNXVQdHpTYlc0VWYrb2lianNFOTZCSHNjcXlNOWdReGludzN1eTJQakxSQzYzRjRPYlB3N1J3NDBwN21lNlRVekZ0bGFVRUUrWE9TT21nNDNXbDBWNmlFVkJqRWhpVWhWeENiUWFWRW1VV1pPR3FUREVSdmJGbUhwWDZjeDJZcUIySFhnNGdadWVrc0ZaRmlLck0wclVmaTQrQUZpRmV0SHMyb3FDZXVlTFJ0aGU3aWdrOGxqSEpaZnU4bWJvNk01RysxNU9tSnQzVHJLaHo1enFnMk1RTnE0VWcyTW8yZEJYRVcrRWVQNHcwS1NzOWdsS295Z1BFVnl6aUJaMmwzNHQyY3c1aVVJQWhaSEdCcENuK05DaWYwSFBKMmh0eGhSTVhyS3c0WkI5VXEvVkQ5aVE4M2JYYU1uTmhYUmdyWnFGdHpzWTkwM0x2WGppSWhlc2pCTXV1ZWh6aGJ4cE1EMjdqWEk3dGhyVXBwemhXQllMWlZ0L1dNRmlISmFxTXZrcXZieFFBSXEyeldDUGF3SGQ2U0pKVWZ5SDVhSjhaUHRGbmNkNnROSEhTOHFmenkzQkJwTGtNMUxRdWVMQXZRSVlvd1lsOUtWNXBRWEF2eUlZa3JlU1ZYMEUyTnpTdDNhTllFT0p1Sm9vb2xUcjBsbGZLMmgxZU8rQjhoVW1mbEVzRFhlaG0vYVFvd2JPZnA5TEtvd0lZZUJsZGhtakR3V0tZL2t2UDVwd2VlTFNEaG51VWgyWmIzbjJxMSs3RWk4ejI3L1ZHTW5rY2d1alBnVVp3dzVMNmZPaUhWaGVPZnRhWFFiTnZsMXplbWduSDlrSkNzeWZkZkY1UlR6eEI2dzlyS3k2VlhEM3p6enRaU2VqMjVQYkpTelpSV2lYQksrMlVvQzVaUXFtR2R3aEViL1FFcHk0ZWdqNW5lTXB2UFpXNTF1c3R3Y2VvMEtyOWlMUlczMFdVdFpqamcyQXNkMlpHclB6TzBqY3Mwa2t3Wmlyb002aU1mOXovRTNlaXFBaERMeWJDNlBEd2pCc3AvalV5N0tpZHN0bGtIbkloN05ucmkwdk5XdnR5RmtEVnd5S0FFT2grRHFteFc5dHJDUi93c1o1cjd3eUwrVWdNcEZRWlZORkNTYUtoaFVoU28wWUxpbjB1SXBSNkRqaEdJZEFLQVlTc0pBb3VPd3k5S3FRYVRHeU9JcDhySkxBNXVjaTlydzZmVktzNFJhN2dZVDljakJnQWs4ZXozV0czRUlvbkFVeThRVkNtS0FlT0N6eDA1MXZVNm9XQ1VIU094VUUxVW0zc2lFWkVvSmNnWXl5eDlMcXpsZVV5YnY1Wk0xWnJFUHZXaXNtUWFiaS96T0pTR1lTa2lodHFqSkxEekRqNDhOdVFoeXprM0owZVZsTEg4bzJsTzd0RU1nNmMwZTRJWHdscjRBaW45UEx1VDFpODM0UWQ0dXdwT2dJQ00ySXFOZ3B2TjBRaHNocVJYVWkxRXBGcFJWUzlCNHVsTXdrSSt0cllteGxpVGp1Z1Ntc2RNVEpiRVpSQXNBNzFWWTd3NGtacUZIYWwyTlhJajQ1c1dyd1M1YlBJdEdJcFVBWlpwUkhrallGOVNXMTdNTUppcVV1NW9Dc3h3VUNmTlc2SFJEK1BreSsyTE5rTW9SYzdtajkwczlGNWhTMUF2UjErdndIUkwwblVLOFVEN3NLUTNxaThNSVVVRm1MUXIrWEFVRDNralZtZ1FWbk50ZDY3UVR2TkFxR3V6VnpXVFlsL0FSa3RiamR2ZTUxTHErRWlFYmFIYzJVdWY3V1dJclZKTG56aUpkMVNLYm1JeFlKS0JXN1AzTG1QSm9LcGpxYnF5R0xXOWcyQU4vTnlESWp1cVNUN2RUazBveVk4WkhaaXJDYmM0YXZrWnp6TENldFBHK1c2UTJZdkdPSWk2V2JBbm9FUFA2eVJxbjNvSUo4MitvUU1hUnlYOEtXMGVHQjNzMGZNelBIckltRGRCaTFDWWxSL3hKNVlyQmpGQ1l5YTlOSngrU0IzbXExaGtIN2NUYUg1S2I0VGpRQW1RVmJDR0d2NEtvekZ2WnZBN0Yra2JxOE9mNzRhMHhZUW5PbVExbWRkWlJXSkMzWGtKZ0hOWGl2czB6Z3Vhc0RVQURMRVlBc2V0Q09wczIzVGg2cXdIQ0R2V0dRdDRpNFFvTnRJbTBIVzNJalZKdFR2UHdhWndRcXdrYXZzdFBwNzd5YWdmaDcrMW1STERmRXJHWlpwM0NsUi9mQmpOL1c4V21YelZQM2NBYlg2OGsrOC9EWUlGUWFZaFpYZGh5UXVoVzZHTVFkMTFEZHdtZUpjNE1wV2FZczk5V1lrNUYwQ1VWWUhrZWdhbTE4dXpibldNK05CSEVuTnRGZ05kRzFSNmc4aGtVVldKU1FjSjlDK1BHb0ZwRHVQU1Q4R3RpMGpWbkpkL3ZXbFpJTXhWVXhwWExtRXJKNkxrbGU1TlI2SGJjRTB1ZHk3ci9TdGY2QzBLR294OHJMazJ1RDBIYUdxSVo5S0V6bGx3bEZMNlc2U2tJKzVScEk2bzNHQjNSc3pEQldoR3YrMW0xaHVQeUdINGdjMmJxeFZiSXdsRGx0b3BCUSs1MUhjTmFhTWRqLzB5T2dhQkVlc3Q4TmpIeFRXUUZBWldVWDBOK0JIS0JFUGgwTk1Wc205aVNsUkVLS2tGbTEwc0NpM2YrM05qY1g3Zmp1cU5YVlVIdTloOTF4MHczUERzb1dIdHFHVmV4M3ZQajNRcGR3dWd4TE56SDJFVHphUGxsRlRnbXc3QUFweXZ6Z2lKbFpGS2pFZ2dIUVZCUnN5Q0JBL082RXJ2MW5EM05YUkNLaForMjZyRjVORElIOUlrNnM0Z2pBU05wMjNZSVR5UHd3ZzZDQ1hsaG9QQ3RRTVo4Wk5Bb09JZ3JmaUQvVTJSdExEUzVlVTBRa0krWDd1aGRwdDdtMitjNkhNcU9uVXZjQU9mRzBQTjZhTVBKZmdRcVJxbU5WZXR6c1IrdEpoZ3YvWkZjaGtlU2Vkemp5a25ScFZLek5VbGRVQVdMbFBLTHBKRnNOWmVxYkJPemFmWVZ5QnVLYmFtQkhybi9DbUFiZkw2QVJkRHIrTUJiTjR2THgwaDYrNEI5eG1vUFpMSUpSOTl6SFE1b1FaSnljU3RLeTQ1TkgrQzdLdE1sanhVSTlIM3UrTHFhNVhsTTA1VmlmeEpnUGhUancwLytoM0c0dHI2UG9BWGN6Rm5pTFNKWjV4ano4T1FPKzFjcWoyUml4QTdVRzgveXd3aDdwamJXM21KNXlpOFFpV1gzODg5UW1iRndKV0NUU1pYdSt2ZmxWcXJXblJTMmtyY0tKYkdna1lhamMxUzlvVy9IeTFSb2tvNGpqMzIrL0VXSlQySDRqZFVrZGs0M0QwdFVIdk5vWnhJS0dvZlpQOFJPVFZtbnN5S3huUTg1OWxTUFVlVTJKenAwbnM5eWM0c3g2MlM3U1VDMCtaazlPdnp4RGJNZW45WWVYbkNNL2pHYmw3K3NmbTE3aGx4VFcxZmJiY2lVdDhLeXJSSFZHSXFZQThMZmV4a0pwTHN0TDRDWVVxNFdidll6RUlnQnFEU0hmdnJEbGRDWGJZM0w3ZUhCOHZ5UE16alVLT0x4Yy9xNWF1OUxyYmx5RWlkOHkwOUV1dU85KzN3YkswQ2R5RWh3d2FRa3lFbU5zNU0raERrVjBZcWRJTUZiZWxoTkFnREN0VjF5Q2djUmF2NUVhOUpUbHBnZDM0c3NxZXRnaEpLY011MFp2YStXWWhtaUtXNVoxNXFpMDRoT1ZqK2JuNGFUR3dzUlFhc0t1T1ZaSWVHZnpmVzc2eSt5d1pFKytadGFFbVdGT3RvYWo4SUhTOHJtVzRUNXZwSjllMnRsSFkzM1R6aG9MRG9YVk0xWklaZ0d5dHFqM0EvelR1Z1BCUnZlNEJ1dnJETndub2FrUjg5c1UyckF4Y2JOTnlpMmpRb0JDZzhhSENnRmd2Sk9aNkpWQzZXMFptcHZkaGdpKzcvOE1pRVNFTXVwUkZ3NWlnQmdCT1Ara0JKK29IenpqZ1FZYUx5S1VVV25xMTVZMzUxU1o1cUxuZEtKNUloWE8reko0Nkh1MW9oU3NVRUV0Y3VVQjRUYXAvZDhPWjBVKzhOZFlaWUJrUlhXR0tnV3NEdzNuN2F5VjVqQXVmWU43clIrSDNySVRtazVkN1FZVkJuNC94QkY2ZnR2Zkk3bkI1S3Y4a1VYMmQ2TDVOdG1WZVQxSDNpUlI3akZOeWhKb3pJYUNYQ2wySEhTWk5zNWtXNEFrV3pQU1padTAvYnQ3Ui9vNE9hSDNSTG93MG5uY1IrcGREckdTQ3NvTU9zc2NwbG1SaldCZ09vMjdXajdDK0xnTTJWaUtReDFBWEFsNFdoQnNiOTJaUFJXcEJpdDBZS1R2b24vZWtCYXJ1c0hsdXlmeE9JUHNhK1VkYWpSRmxWRWRvL001dXUwZ1FwRm9zbGp2YmxQVXBxSzNYaVl1cnIyNWx5SW4xREVUdUlsUlgxUEx5VzhwVy9FT3hNdkVlOWVuRVA4bk1BMWJkZ3gzc052RkZOTzNBZDZoYnYzMlBMc0V6eWJUSjdjWVBncm1YMktEUE9Kazl3aDlQZUdUakdiRFBteXlVQWdLbTFMWHJ3RWQ1L2x1NkFjeEVqbWVVNElZUWdpZUlJa1JkVDBteENyWDQ3QmYrSGJlYXZMNHZPWVRlTGdBTmlSclo4eXhYWmNOVlIxNFMxOEE3NXRLMnRUTndFMGRBVXM1ajlZRXZROVA5eExxbUlTR3RnS0d5M2I1WkhTTllBSWdNRFRoc3lGWjFaa3FJeTc4RTFUV2xudkNvTHQ4TEpmWlcvOEFrOURINE1FSXpRY2dnSEs1MmF4NXdyNkVQQWtJcDVqNy9HVmYwZlJOT1hSMEJ6aXVYZHhaV3dHVE83OXNSVnBxMzJtUnNwS1ZWRXRiZ29LVnJKc2JRc3dQd0E1eG9CbE53U0FrenQ4eGRSOW4wOVZoSVV6cGNGMjBockUveERTODdONHdrRHZpU1VuanFiclJqbU9KR1M1Y0dMbjNjU283Y1ZsaHQxQ243L1VudGh3dFVRNUlQbmFwRE95bXBFTUhXYVdUTTQ3L1RXaWx2UUVIeW5iZXdqR3kxblRQZ0EwV0dmYVc5aGVOcXdWakR6TC9Eb3l0SHVLTHNkUkdITUNybU54K2dGcVJKNjFmMis2bkdLMy9xeExScUtVbCtWL3A5dStmMk8wWmJ4d0wzWk1XdDA4dXZvMXlWTzJaM0ZLaTA4N3BTYjlIWFRZQXQ1MmwxZSsveXJNRit4N0FBOHRudGFvS0ltbll5dW9HMVk2NmJ6WTZzczlQRWVteWZBc3VXdmlGM2hQWm9sTWxzTitiOThNT2pMNXU4V1AwMVNVRThiZjhyeCtSR09mZTZmaUVMODNLcUhkRU9kN2NKRDhZSm45Nk8yK05kS3MxUnZ3NURiM3A1aGxiTjNJZDNNV25QUDhML05Tb1J4d0tSQVh0WTVSSW5CQ3hKWTdzakN2c2MyY01TeENPZ1ROa2hJUnlsVFpaa05PS1dTOVdaK1RrS0FaS3RWNjhvdXdHck90Qm5PR2s4SzhHNW9RbGxEUXhUNHZObDJBSzNPT3cwVitFMFE5SHFhc3IxclAzTEMyZmpsV2ZVYXNrZzhVSWZ0cTRHNm5iSEtkUjNlNWM5a0JqRkc0aXRlY3dkWUlnMFppNmo4dkdoYkY3R2lZbWV6aWlyMXptRFhJOVV6Q0hKRmc4RVByUXA0Y3l3QU85c3FkaVJ5R3Q4RVJ5WGY3ampFaEUyU0NZVTJUSzYyeS93UjFEcG1yek00dVF1TXhwNS9CbkVWQnNCUHVTVWIza0k3T1BZWHE2c25hSys3ZUNEeTFzUjBERmsxSWdIbWlmeUorZ3VLT3lVWFNhcDJjRmRyVnRHOENvTDdzaENnckMxRUh1RzR6TWh4aUgrdmErb3pyWGdvMktLcTBqLzhwcXgrdWQ0L1o5S1lsdm1hR2l1OURSSnZ5UTBhNlNNZUl6cHcvTGllWG1NVnNlbmd0bkdZRnFCYUt3YnU1cmFPZGgyeVEzTDM3TUcrYm1CbVpvZmlJL1A1bnIrY0FEdzdrcmdSUHVrdHVka3QrUitJWHl5b29OUkhFcGFyR1J5STBXZ29uWWlSV2dqSkNzVzZjL1d3VDRhNVM1aHdYY0JremRLT3RUTHVxOXBhOUdFcDdieVBJckVaUEsyZi9TcENxcDhMQVcxRTRMNU5CYXNCWkhnWFhWemRQQUYwR0E1YW9LUjVER2xTUTA1L1hDWHZPc2p6SjVSUm9qQ1Q3dmJIVFA0YWIrcUE4VE5ZbEIyZThkZnR2OEtETzV0WFEwL2UyZlJEUGJ3YStaUGtYc0p1SnltQzh2Mno2cElkZUVIaU9pWmJEbzN3cUtxQ29ZZm5ZR2xpVFR6UGZwL3h1dCtzSllQaGdrN3p5ZVhsV1Vsb3A4WnhET3VMUC9DYWZaU1NJRU05M0E4OFJDc0V4OVk2WTlaRkdKUzFvbVlMN2taOWpNR2VmR0pBTmJqbTlGV1dCaFN4UG5QNUhVSHZDV2ZGb3RwWklBajl6aXVFL255ckRVTmg1RCtXcEc2VkJhaUdPanVzU1N4a1p3QkFnZU0rdUNZamU0dGdOcys3RHRwZjZTZGIxS2ZuMER3S0ZkZDN1K3hlU2lkcUlDT0lJUlRRaEpISENQK3VrSjJ2b0hrbWZ3WXZGWG54VjllRGczMGRTT0VSdVNhb29WMWc5UDc1aVdWVUtFc0s2dHAwSDRzWG1WUEJPeUQ0VkQvTGtZTE8xYTdLUXdnMTZEMUNnVmdrZ0E0ZjNsYng5SmZaOHhvU0NzSVdxT2w4ei9MTHN0MGE2UUlpZDY3Q2tPdmlBeVlvOW5rRFV1WHZlZGRuVWwwcDlTMG5uaEg3M1RudTBGU1ZtT0ozcCtBdHRYOGRFSWZxMG9TMUFLQUMydFZBa2RqUkc1Nm1jc09xa2J4VzVJNEhhdnZtK1BORW9CcmExMFZBRnFkOHRCZEFXbnpGa0Y3TFZpY2svOVFOMlRacVlXVi9OaDR6ai9MZ3VRbzFIczVITVVld0Nzc3h3cTNiNlJsRUNNN1RpaWM0WnN0YWp4UFBqSHRmSEZzcHJKZWhwaEJudnRwMlpVQitJTWZsRnY5Ry9GdHIwMU5XNnZsN3J3RmptUDVNMVdHQ3J5U05MTVZZR0lndW1mdm1EOFQ4Yjg4dkpsY0FsOW9ZV3Yrd1B3NnhCckhCTmx1ZExiZEVWRU5jQzRzYVBMK3huaitWQXJOL1hoOEZ6N3RnL0NaSFlFV05ZT2ZPS0FPTndCNngxQU9IUHF6Z3JDZFQ0emFlWjlzTGhDdlh2M2NUQ241Z2J4bDhWc1RBOExhLythdmJadWdJMVRYazFVK2wvY2s1UERrd2lkQ3FJa1N0c3B0bFNaUStsY3JsclI2SmVOZkNiL0JncjlLTURaL01Na3FFejI5VXZ6RHJ4VHBmUlZqMm02TGVnODdIcm5UaHAxZE4rYXR6N1RhNkpiUkxxUUFHZUdrRWJpQWtGbmlaTlFud2xOc0ovbUlxRzU1SXVBY3ZDazJRWkN4N1IxRzNQOVErMDZVV25Rd29TMklObmtGOW9oL1Z5Z25UVGVHalFYTlhHaWVNZk5QenFmb3F6eTlJaU9YVHM2MmF5VEllMDVKNDNvWUR0SkFJVDNvRS9EVjF5NWVPcTBKaHZZSlR5MW5BZGxKOEJId0g5dVRCelBYZ0hpNVB3dUNuZ3duRjljbzB5N0FMbHF0U3RSWExTeHlTSVVhUjZ1dnI4M1BSd01XMXFBZUZ6bE5VMFB3T3NETkNoWTI3VnQ2cmdodUk3bU9sU1VxR3hrRSszMXBVWGNKcjlYd0VBbHJJaDNYNW1FTHdJTVMxZGdUNXEwUGl6ZVlXdmtmTWwvVkVJeGtKbGlLOXk4UUVMQXFTVkl1M01ocmdqK2dqa3BuRlE0QUlwOFJHN2NEOFprRW1pbFhrMDE4TTZ4TjB2WW0vVVZyU3ZWK3I3QlNBVnhVY2ZqUVhnSDdsMlJCQ0pmcHRNUmRGMUZrYkwxUjc2OXhueUt2VVdvZlhVZ2VXaGxidy9pTHNjRTZFL2V3MEl5T0RHVlVFcXdUK0ZXM0o0YW55b2pVUnBwTnZIczZWL2xMN29qbUVrYlpnOU5uVnJSd0MvR1JZMjd5QUl0WUx6MHRUa0ppSU9ZbjdxeEF3QXBuckRjWGlHZ0g5eEdpbkIzWGhYZU03T3A4aWdNZ1pwOXFZY0lRTzhLWHpnNVpTOGVtUVJvZUcyU3g2Z3I2Z2d5SUhqRll3YTlEMzJNd0E0SnhJRkRiYmVaZUhkd1JLaFovaWFHVzZ0RjQvZE96bzd0dTFaQ0I3T1EzVVlQZnhaMFh0bjU5ZkZBR1h6d0pWUkZ5ZnlTV3I0ZUR4WVR2emJFdkNTaXhjcUlteE0yZ0lNaDB2b2ZET1owamNsNmdtUmFYZVVWQkdZbHZwRmJFV2lDRklmTjFoRk04MDRmdHN5UUtPQUJITVBjVWNxSVhRa0FmTkNlSjRIc0IyMHZ1YjBZeVg5TUdnK1FpTkpVckU3Y3dXa3I2SlY2eTlCbms1MS9xemJLNU41SXgxZ2xKTThvN1VsN3daOHR6THhsMmRxTm4zV3MwYll1dC9NTlA0anI5RjJtRE9Za2dmZ2NWcWJsN0FRRW5STlBxOS9MR1V1WUpaL1FQejZXZGthY3VjKzFNMlhHNFpvZEp1VDJLTFExZ2VsNXErU1E0bFFMTHpraHBkcVptVk16ZlhyOThhVjMrNWZ6YkpKSTBQN2trQzU5MWJjSzJSZkNlcHNXTloxM3p2Z2M3NTV1ZUVOd0VJNk0wWGk4cEJaZCtrOVF4K2JnTXI4RmpWcEoyN0srTkd4ZHlkb0o2cXB6VEZzQTZVckEvaW9mdHBqc0ZsZ0ZCdmtnWkZLNGIzVXE3VUJVSkY4LzJTeldTNnYzUXVsOGFTZGdFVk1reC8rQzE1QUNseHY2YmJEM0d3b1FwZFNFRWxiNlRoeWgyQjVuV2I3bzBSOEJiZGRqbWlhVk81N3BXZXpXa25TRm9wZzVEdGMwSjVYU2tuOG9OWE9LbDZoYUwvR2psVVBRUmxpY1FYUi9vb2pXeGtWZkVCR0FVVDJDZmNEQUFyNGhhQWJBOGxlRGdmUkhBMnNJMEkrOXV1SUVxN1dVZ1lmRG0rbDlmbmZBVE9oWndQOER6TXNwVlN5cnJsanhERjE5NUc3Y3NnaEZwWUZRODBCRWpaajNvdTJ5TVJHbjlLN2NyQU5uUUZGQ2IxemxZSFpobmRNMUVRTnpCaXV3U1ExV3JuemZiZE1jSzFhNHNaV1IrWGtab1JQaEZVZzdSN1d0WFFYckJwbTJCRjAwMDVJREpTS3J3ODRCZVFUc01BR1lVYkVVREJtNGg1L1F3MklXU0IzTW1tSWYyamI4SENHYjFhS3EwalVrTHhNcmx5akJGbjJ6aWpMYjkyeVFtUGt4TVpnei9QakJicnFYNTZQdG5pMGFVVjk0b2FCRU9ZVngwLzVyY1NXNHBSeDJ6QU1ZNjJPTTdXRVZ0WE1tU1JsUkhRRWhlNzY4V3BRTjJGTnhMV0FUK0c0UFhmTG5qMjNhd3I3OEtxUTFwSVQ0OENKcHVOZStESnFyeCs4WjhQM1hVdTIrem9XZHBoa0x6eUhia3Z2RkN0dmowbVNIUFhscWlIT3BLSTc2bVpMRWNoMWVSc1JucEk1N3NDeDA0Uk5hOFpiZm13bVhvR3RkdEJQUDFQcUM1azNvT0tlYWExenR2OThiM0wxZnZLMm0zMW5oUTA1WlF0MStxK1grMDF0Vk9CYlVUbjQvaTZTcEZxbURDKy9NU1dzeHRJRzRSZEVHYytCemdoUVo0ZjBZWXhQVmlRWEtqZ0Zvd2dXSWMvcWUwajJIMy9YTWJRR0ZRSFNSalp2d0lqTmxSVkRUNVluQXc3dWhnWnN1NXZXUi95NUkwQnBScXV0U0pvUWZOdDhuSTQ2ZkhhV2Q5S0JXZE40aEZRK3RrMUFlU1RkdU13cEIwUmZXTDlQOWZoZlQ1c1RYdXJwMVJjOW5WZ3N6RFQ5bE1yM1MydVYvSlh3RU95MWxBemJOQUk2eXB3Y2tCQVJ4UFZJTXN4MFNXSmZISmowMldhRnhNRDZBMjByNFNCcFpWelNxbDZRU1FiaXp1MG5rT0RlZ09RYjNnVGZTQXZCbW9uUkJSMjNqeGlIbzNabUVYQmhhZG5QWDNiaVltWkZ5NHdIMnRvRWpiZ1Rmckswd1ZkNGdQUHVhTllMLzNWS2FjUzJYWmpuZExyYlRoZkVVaEVPa2paNHlsZUgrVWlQMkhoZlFsVUlBZXp6dGdXT0g2b0ZLMGkyTTZUeko2NkZaeGs4STU2cHpKNVcxV3pBbG83SDNLNkJrVGZHSTVuNGlibTB0Wm9BdzJnY3VLSUE1RTFQdDZkc2tiTTI5TkFXODROUlVmUFlGWlNNT0VnbGtBTGkvMTVtNGFSZXpuQUJPTk16SWhGbTlSUG5VMlRva2cwL3QxcHh0dm12dXBMQlFWL0FMeWNsNUhQK2tQaTg2OVJIWFUrR2RBRnBUczZ1VVpBUTRIbmF1RGZmSTdrOUY4OThsQVExWUVmcER2aENMM1VkaHlBZWtENW5ST2UwaEJpazFuV2MyQW1Pb3BNaG1HVkpVR1BtUjZNU0FtRFZTaERQRzlSRHg1MGRrODhTdFIxN0lUTUJZTDA3NUpnUUVRdHNEZGJYSW5yTGZEYXBrUEpGcFRWd2d3NVFxMVFMOUV3dFhLZEZINS9hdTlQRld6cmt4SURwQTJzb1NjODhxTDBPci85QnF3YVJjZUhERVBwOS9iVU5NWmpuQVVKbjA2eTg0VWpUU3gzbmNUanJDWnFHbXRPTDRid2w2U0RydnZkMHF6aDlzUHBmNlZzRnVSd0tCZFU3ZDVybXVCYW01ZjllU0RVQkRQZk1YYW1lSzNBdUdOVkFCTUptVDlremU4NEdUTU5sNk1tby8wWnRlU2xSWk5OT1NpYVdhZldZeUI1NXZmQmVKQm5uRVl6dTZ5VDdOVmQ4cmRwMnBpNk5JWFl3aldZRzhwVDMrdmxVRlorMmJPZE5GeE9tSHlwSzQ5WkNtMjN5dzhZbVo5QVM5eXFObkdPaEVObTByR0JZUWlKYWlHWDYwY1FOMjA2UUtaU3Q5SFBmcHRTUERTU0dYMnNCR2NZaGVrb1NENVpsTHhBdjhmaDRBK0xXZmlINFhndWtVbzVoaE1ja01rMStSYS8zQWlnSTNBQkNsZHpoWFh6cXlGcmViOWZZaFd5UUpibTVvejNNazU3SjdxeUErL20zdnMwYjZnRzJrMmtINSszOUtpMlFuaVBKcDkwcjVHeXZWSnUxclFqL1ZLNjdDMm43VmJYQkN1YzJ6OVBJWTVwNlBUUWtTbVZ6TGdKNjhRR2psTVZnRmNJcHg1MEZoSGZ0SnZCYkttU2pKdFppNVExVytaWnpOa0dnays5Mzh0NW15VGZTR3laUkhmZ1VmZ2pqYVZyVnhoQ21NaGFsYWExUXlDZWczNWZuZjBrVDV0OHEvdzlSdEdoUHh2eENqelE5TDVRSnVncDZYME04QUxGOTZzNzBQYksybnFTRnJnQWQ2eWlqbmZLTzBxNFJrcGM5RWFxRUpNUTZlUlpDSHllc1QwaDZrNnhlNVdQYjE1Q2lpY28rRWwvNUFLS1UwU1lMTWZwWmdKaVFpK1hHaUhSZDBTUVVkREdPR0hrUUtoeTJTT0o3OEdGMzJESzZCQ0wraElFRDJOQ1pyMk1oa0VDVDhSa3JGaVc4WVQxVHJheGEyTUQxQ3dITHVmOWdwbVhSY0xDRzQ1L0tpeXNOVVExRGd2SUNBUUROK0NNWkZZRktIa24rUnZzTnpZZHFHbU5zOE1rcThLeXI1SnEyd3ZFVy9SakJqK01tdmw4L2Zmb0VRTDFITUJZZlZaNHpqY3BoaWZjeDR2dzl6QkcrSjhkcjM1blVKRzZlWmI4Rmk0Q1lFNi8vUzNsWmFqSjc5MXZGL2FMSHRtUllCT3llaWwyMmVjeGJpNkJ0elFOZFhtcjNmS2dUS2dVRWpzbTdZMzNhd3RMK0FjcUxOTW5xRDEwbnFPS2J0Y0RHK3N4MFp3RmkxSTRuazRjTDVWbFZ1NktFQzdBaXVxMGJPbmcrM1Mrek9IelNLNVp6R3drOWdhdEhiaW5IVDd2NEdlc1U1UUJzcTg4V1RzWTA5YVFQZWpzYkhWWXV5b1R6M04xeUs4eldmbVorcVB1VU9JMUVyeFJoOUxHamxFdC9heFBuY3JaNDN2RC9FTC9BbGYzeG01c29tU2NXRjF0blEyUm9COGUrWEVRaGIycTJvbkRDeEtmZWlEclcrQXgxckJROFNESm4vek1jQko1VWtuWUxFNW9SdXNoS1pNQm5aTEdib2V2ZUMrZk9nOWtnMzJuYS9nQmcxMndSSXUyeXlXelpNMElvUUZXVHYxV3pKdWgwNUZmc0Y5bmIxQmNHc0Fuc2VmdEFzajRYQkdlcStjdTJONmsyNkt2NCt5Wm5xR3EvamhOQi9VYnZOTnVHM0dXMmh5M1NUVk80YjJCSmVONjJTK0FndjVvM2t5ZG5keWwxbFhueExVSEhDdHpSeld0UTh0Tm1hRFpRWG9WUjh4NjNXVEh4aEJ2M3JHZTJtcjY1K1pMR3hQeDB0Z2k1UmhoVzhrN1lNaHpBWE5QMHFxMkN1bWVacW9JZ2RYekNaQ1VFU3k3VWRDbjJmYVpjQ2pPYklRMEJudjBaTnlpUXBlUFFvbzg3T1FMMjdjK3Jhbkx5MnlRNEhDM1JuQUpzSk43aVN2U3B6UnZzQ0pCZm1SUVVWUW1YeEQrZ0NNWmxnSlhiZTZGbnF0NVFOb3h1d2lXU0hhTlJzODVMWHFBb2p3NGI5TTVSVk9OZDZNa1lsREw2bXR1K2FBZUZ1VmtuK1A4MFY0RS80ZGx3L1VZN0hDOTZ3QXUzMnZlaWQ2Sk9TKzBaUkp6WXV1dW9HWjBpczEyNm9UQ2hmbjgyUlRlckdXUENNUlFmMEFUUTdtdExZclpFNEhNWEpyRWdrR0VTSmx6ejlha2xHRXVSWlo5Wi9CbmtWRWFDS2hSR2h3b0gyUmdSOWlBdW9kK3owczBRdWNUaUltN0xyc2VRWEF6RzFiQ2M3anZCVCtCMExzY0ZLeTJIRnRRcXltcStwMWdpK04wdVA2MVdLcGY0MUNZaXRQRGxnNDZWWDJYSEZRaUtSaUpKYTQ0eENNZ2pvdFljamtzSkE2MXExR0krNjJKa2VwNVB3OHhickRzaW5uL2pYYlU3NnF2cXY4Mm5hcTczR2NiMU1yd1hadUhiNzR6ZTN4d2I2NFczMWZhQ3RuWEZaaXlwT3ViUnJZdmlreFhHci9NVHZaNmRoZ0JLZTBUcWhONU04S1VKM2JVYkkrZXZhVTVwTDg4Z1V6VmFVN0gwK1l5a3ZHNDVYQ21vdFg3RU5obC9wSHkzOUE0d0JscFZyZDlOQVA2dDU5SkQrZWNWb1VVY3RKNTlQejRzZVJYMlMxb0IzNFlIakdhbTZ4UGwvVThmM2czSzQwUU1YejhaV3pkRzBKOUV0L2g2dE13SmFzcStaVTlORjJ2cjVMNVNKTzJ2cGRRQkRvOGdoaXk2K1pHQk1NOTR5aGNlN0hBWW8wamFjL3U2QjNKdXYwcWIxYklTYlpibUFrS0QvMElqOXpUQUtCd0U0a0ZoNHZkVUd1U3huRnV4b0dmMVMwVEJMc0FaK3Z4bW0raW1oV2ZXK2k2cHJKNmM2bkZtL1hjN0FGVzFmZ3hlVlBaNkxrdVhtNnFPeDR3S3YvT0FNL2RnRFlQSVV1ang3eCtrUU10QlpLNmkxeXc5UVQvTE5sQXR3bnVLdWo4WVRvVG9zY2N1RnZxd3dQS2VxTmVmQitsR2pMdHlXTVR3M0RMeVQySWo0YmhmS2dSVllRV2tOQkJWUXJCYU1YaHc4V3A4d2ZiVXIxZGNGd054TDJHZ3dXVEljK3BIQ0dxbjQyZ2ZtOUpVTncvbjhiMFpVSG1ucEpOdjJDTkI1MjB1Zy8zUlpIL2NmbHpjTENjVU9vU0tQL3NSRC92SXNxRS9JQWJzTWdRRlpVWlVjOThadERQQmo3WFBHTHdvckFib0dycWdONnlDb0hKYTFRMEFZeWZ4dHl3eE9Tek5idWg2Q29zZHl6SlFudERsSDNkQWFFVXNBSWFXR2RkNllDeWlVR2FwSysxbU1XSEFCaU5LSkxodDRkbFlKOTZ5bTdxRnR1NUNWWnVUSnpNZzlaQ0hMb1IrVHJJaTJPUTl2TUFuWFhsck5XWXdDUEhPcFpXN1VoQ28yMFJIUHFWQmU1UDRMOUE0UDI4amV6UEgzRlFJb1VoWjFOUUxFdDRoM3BpV0Y3a05mbUdlSzZRR05ZK1NFOW9UYTFNdnc3cFk4NjNFbUhNNlFaSkU5Q3FMdGY5aUlJdHZXSXRYb1VFZEg0ZHVtWUJFZFloa3J4ZTVIcW9RUkladXpUNmxyNkhieVFGblRjaGdDUk9EeTVMTGhLNktycUhGd0g2RXVDY1JaUTczc2hDVkFOM0k5ZnMrWVoycXVtdW1oak5jMXJ3cWkyekt3UDV0MzljV0p5UGJyeW8vQTNoaDhaQ3oxS29pZVlGNTB2Vi9nRUFqcnVrK2dDeG9uYnNtRnA1QTBtNVZWRTllNC9UT0ZWR3JBcG1TL012a1N2UzIxejhFdXgwK3F6d29VdFBGaWRhR1BHVHY5REU2d0NFRWxOTUNZY3BHYXFBNFlzZTBDNzI2d1g1OXFtQ3I3dTcrbUtLSUxnWU1zTzdMQmJKSW1FRDhyNDh3ZGtZUVBBdnlqdm04YWtaS1FsM3AyYzRrb3VYTTVFeVJjS25BNTAwUDFIOHM0QzdUVThQMmN3QVlrYTBhK1VRTm9DUkxzZ1Q0L1dwT0pWUUQwV1g4a2h3cEJlMFJURHprUWFlVGNyZ2JzTUhiZWpzY0x1Rm5UYVF3U2tKNUZHajNJaFZrWXYrQUkrNHVyVTAybjhPdlNQMFZsZmxvYm44VkZQb1JlZG9tcXB4L3dRbWFFZXZaQUtjMGR6MjVUcEFYTDZkV1BwZ0ZMamQzWTdaNXd0eFU4aFJYZ3ZvZEsrUnVQRmZib0x3KzhZL205SFNWSGdmdXF4M3lQUDlCVWlBcHFLWDI4bVdrSWtuczN5Zis3SnBxYzB3MG4xclZISzgwNVlLTHk5cWlMZDQ1djZUVVNhTXR3VzlKOEVuN1U1Zlhnc0x6c0tqUEpvWFd5NmJnUVlyMGxXMU8vMW1XOEwxeENYbXVxb2ZEYXFmNkFzdGhWYll5ZmNRNjVYdXV1YS9HZnFqci8xS3lMTFJHMUI2RVBJeENkS2RSeTN0R1c4bS8wT0psMlU0aElvVHFIOVJ2VEs5ZkVMRnM4R0pCWm16M0J4d2Vobm15b0FhTXVzL0tDdFUwUzJXSVpXbzdrbnVuMitTTWJzTWNES0E5dUVqUkRxVUUrNVkxZG9UQzQ2Zy9vM3p0aGVkVFZWK1pubno5T05vVlU5cUhqRXBrR2Q5SGxad3lML2NFSng2ODJibEdlem9ISGtUVUMwRkt2MjhEVUNTQ0ViQlBIb0dsTVhFUkU0SXQzd0hTaExBblB4VHBMQWF1R1ZsU2t0KzRwSS9UMnE1YzJoeXZCeGVOVHR5eDRsWGRhK3hyS0lNcDkxakZpSUZ0WHFIb2luQTZyVmtnZGZsQ2F4aUlESWx0YjIyMGN0bjM1ZzVVZVFHa2FJbUJyZS9Vd1NGeHVOcS9ZQUFQQmV1ekZ5a00zQlY5NVNpVDdrL2cza0p3VjVRREdSRFp3eFFsTTZ1WExvUlZuT2R6STFGODRiQ3l4MVlaY090em8zWDR6REFKRVdib085TmdCbWVGQVpuMEhVRTRuTVU3YnR1TytVaGovYjhZQU52UVBZRG9EelRBZzUvZG42VDZwRGJBRW5rLzBrNDNkOFNiTHpQamRibDM0VlMwVTBzTlpNUGpuZlk5ejRwY2FOQU51aTRnaDRINU4rTTloeWRVUWNleUU2V2ZGT1ZpbkdVdWFJSlJ2ZGpqQ3YwYlJLVkpjQ3hHbE1CeTI1cUExK2lYOEpmQ25pNEY4TG1SV1dKYkdUaG9xZGRqeHJiS255SWc4aklxYXY2SlVSVndON1B4c2tlTWRqcVZVcng5bnlhMWV1Q2puSDA1ZlR5dXhMakdIOUJuSWR3RXpOVmtQWW5BMTBMMjFnTHEyQVBMeEVKVHNvY2FiZC8yNDRQVS9ockhPTjZBZm5VL3IzNUE1U1o4c0dFZytCUTgrd0RXT0JPcnVZZ3ZtQVZkdXZxRzlnQmZSWHlpcURFclVXeWxVWTBkRElyTGp6WjR1cXpQOXNzL1FMQ0k2emNvajQ0N3FwK2gweHlMbGlHRUNMTDNXdnlnM1l3WTZTZVZITnREOUtqMll3S3pFY3o4ZWxJdmx6azJnNkZtOVNhcFlBNWxjY3k3UXlrQ0E0eVB3MWZwa2JJYlVxemd1cVQzV2VmUTFOdFR4TldSSmlnQTMyYURnRlh0NDIzVjRFQ3FDc1ZJZkdlMW5YVzM4WGpGcEN5TU5BR29ZQWhVS0gyc1dQdDlva21KMVc5alhXWnBHZmgwcWhVTjZhMGw2SjZYalhRR3h6N0xuMEQ2Z2o2eUlnZ3RNRFJtN2hSTHRKYW1hQndwUWg0cFh1NFY4ZDNxdkJseXFjblJHNkpTdGlwTGZ2M0YyQmo3NjkxeHMwYVp1SVgzWXNjc21tVHBOZWVUNmEzelZMZmVuY1pOSXRMbnRWditSUlhnaVBKT0EyVFV2MXVjb1VYanlnM25aN2dza3lEZ3BUTHZJSm1WRVdWVXdSVWNZa2paemQzNU9RcVhkai9aSjRxc0VuTzlta1piOWZ4bFB0VDM0cFpZQnRKclhjb0g3cm9mWWxkb2VXZkUrOVloN2tsNFkyOHRJU3Z6bkIrYnZYUTlpWnZ0NE9uL0tLcHF0UTM0ajBSZVc5b3NEeTNpK0IwNGpmbEE1YklNYnhEZnpCS2RreittL2hQOVFsOUNyN3poVWFjK0l6Z2pqVlpxa0ZlTjBTRzM4dTloZktRRC90bHh5Njh3T25DRzJNbzZFdFRZcWFhNGRCeXVmSWt0cENyTFpzQ3c5UitzV2NEbzlQRForVGkrdjZOM3hHVDVFL0x0K1E2c0lCcDU5RjZEYTZuOVFRUkxYWEMweVA5VGxQRVAvTm5POVlUNGEyQnZENkl1Z1JpMmR1RTlhSnkwM29Nam1CMWVHZW9QcjR3cU13dGNGdVE4Y090bE9KZVNvSHU1dy93VjhpNS84TE01d1dTWWF5d1c0OStpUm16Y2JzMUNTSDJtUDFVdWtVZW9pM0hFQncxVEV1S1FMWW8rdDlhczZjTmZHZndtUjFabjFJK05WTVRLSXZoOE5mT2pKTm01VSt3R3N3MGJQRDRKUW8wZWNUcDNOc3VBenhBMTg3cjdsTUp6c3VEdXNtVzAza0p1QmZIT2xhY1h5cHhyRW1PNG13alVtMlhxUEZTTVdpellBUy92d0JlSEhFSm1vczU1by9uMjlQaDE2b1k1dHRUSTRkdk9tRXdDVmdZYnptZGc0M2xGdVlpaWhHazRveXZpWmE3clZWUmF5ZU92aHpqMnhHTUZUMFo2akUvUXgxUjZTUlRXL3oyZGl4QUQzcjdZSE9ROUg2TnBvc3U5dHM5bUN4Y2pETXI2c205cG1lYkpTcXB4SEYvbTNqMi9OUVRLdVU3TFIvdFQwdnhWbHl0VXkxdGh4VXdKSC9OZ0NFSlNkM084OUhGaUI3eTZHMjNFQ2IrTll3VzRDYm9WS2dlZ3lic3BZSkZMem1uNllaWUNjVWhFTWJnZG9XYllNaTVkenRZa0RTY1BiL3FLZWVuc1BPNFdVNDRENWxZR2d2c1Y2VjltYm5PNFhpREEySW1VeTFtTEdhWVh6TTdqcHg1TG9Ya3R2RG9OdlRwUWp3MFBRWDdOcmY4aDJIWU5vK1h0MzdSVTMzUStZQWNRMCswMUNyc0NjTlVTUUxnQUwzNXhsbjR3dHg0SlVsNFRZamF3dEZpcDB3ZklCZzRLbjJSRmlUYWVvUDhkdWNKbGVyYmpKVHVtVWdiemxjQnVySW5rMnNMMEZvVGYxV1RkMERLNkxZanFyNWtMaVlaTFFsU0xYY3d1aldiNU5FcXlVcmdMbVM0WXZNTDlVdDJmS043QktsQnB2SHI0czdQbzZPQm8wd1Z5aEpTRGF6aXJLbWs4Tlh2YnhpVDZyUjJLMXVHclFiOUwrSEM0THVkc05HVW1FZWxZTzFKdDZGdkNLRXVJRCtwc0FGbHFteHlwcC9lYmQ0OFJibnozdnk2UkV4QWRIbi9xaFd5MzRpbUVVaTZ4OVpYNFVYKzJxWkNQWWhMdS93SjNlSHM2SkF1SWdtdWs5R1Zid0R0cE85OVN0M1BtelFvRDNLZk5rWVBvUG1VNUd3eHlkOVFLamRONk11TWYxMVp5bkFUSUZzSDcyMUJVRjdtSCtkRWdxVE55T04wL0RoTlp4M0ZYMndiWDFLWElmQ2NnbzlydXNtcTV4d3RUbXB0NWlNbE5HQ291bkR0SEtORHdHWnorSnZPY3NPTE01QlE0TjF4VEU3Q2lTRlhUSVk4RlFMVWNERUVqazlmRi9ObGp3aENsTEhWYXNlbEF4L2ZrYndJcGRnWDZqT3dnaHZaa1hHSWRLNWxuSnphekhuMzMraWY5NlZlQkwwc0Z3WW03a3lURk13L1Q2VEdTMElVNm1vRkhkdnlhWWVNcFEwc2ozNDFzSlhYN29jeHcxK1RDYjFsTjh2SjE2NEI0MWJETnpXSnh6aWZwNVlBZ00wUXFqUU5iYmVjYk83aEFFbDkrVGMyU0Q0clp4d2tzZ09Gc3dOSkphdG5aQUF3dGF4emtLNyt3eXAzSzBMd25ocVc4bEsreE9NSXNRT0ZsTTZOYUdxUkl4WDJDcEZDeVZUZUtvRTJmZHRHd09Memd3dHhVUXMyeVpNRHdQMlRhSlhETmVEZHJjY2l2NlVKbE5IUG03ZGs5K0VRbllkYjdEa3JBTk56NXQzS2krb21SVkYxaDA2U25ON3dybFFScWJZQVl4aWxDNnp1eGc1QTVndm9uWEY0ZnBNbzFNVkNPUHJmQ0VHT1N5ZEs1eXlxVG52b0dLM3BQa3JsUTIrSVZQam5rOHZpWHFYcURhaU9JREF1NS9IQWlMVFBrT1dDZU1iSWNxeUtIWHM4SDlrRTFQU21sVkNoRkgvVGp3VXVEUi9tMkFOb28wN20wamY2TVNtVlZhUUtPa05QekY5bG85a0pwdlVHR1J2d2lINE1TaVpHTUYvQysrUG9MbFZkS2tvVkRpSXUwUVByVHlSOE1PZkxhVUZkOFozM0Y1MFA2dHVwZWZSd2I4WkE4UGp6S0ROWE1PYVYxU1ZHR0p5TzZrZGQ1SWs0SWQzL2wvRHhiOWg1RGt4MFlzY05WdURtOG5Qdi9UK0J1K0QzOTJoNHJ3Tm5RcWNvQkxTMlQxc0lha1J3YnIvWUkwNHRTVUlYNVFxaTlNS3YrNWhmUFFBQVZ3RjRKdWthbTFJdWVqckwyU01jcUdWY1hMMGRMU3N2ckp2VExkRUhHR2JUVDVrYXZ1eld3OTlFZHp0TGgyZ05xKy9JUXFIbzFWSmV4cFA5Ly85a0FBUUFhQUVBQUFTSUFRQUFQQVFVaUFnQUFBQUFCRVFHUFFBQUNBQWtDQVFFS0FnQURBQmxVYUdseklHbHpJRzltSUVacGJtZGxjaUFvTlNrPTwvQkRCPgogICAgPC9CSVI+CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I+MTwvTWFqb3I+CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24+CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I+MTwvTWlub3I+CiAgICAgICAgPC9DQkVGRlZlcnNpb24+CiAgICAgICAgPEJJUkluZm8+CiAgICAgICAgICAgIDxJbnRlZ3JpdHk+ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8+CiAgICAgICAgPEJEQkluZm8+CiAgICAgICAgICAgIDxGb3JtYXQ+CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24+CiAgICAgICAgICAgICAgICA8VHlwZT43PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MVo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU+RmluZ2VyPC9UeXBlPgogICAgICAgICAgICA8U3VidHlwZT5MZWZ0IFRodW1iPC9TdWJ0eXBlPgogICAgICAgICAgICA8TGV2ZWw+UmF3PC9MZXZlbD4KICAgICAgICAgICAgPFB1cnBvc2U+RW5yb2xsPC9QdXJwb3NlPgogICAgICAgICAgICA8UXVhbGl0eT4KICAgICAgICAgICAgICAgIDxBbGdvcml0aG0+CiAgICAgICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5ITUFDPC9Pcmdhbml6YXRpb24+CiAgICAgICAgICAgICAgICAgICAgPFR5cGU+U0hBLTI1NjwvVHlwZT4KICAgICAgICAgICAgICAgIDwvQWxnb3JpdGhtPgogICAgICAgICAgICAgICAgPFNjb3JlPjc5PC9TY29yZT4KICAgICAgICAgICAgPC9RdWFsaXR5PgogICAgICAgIDwvQkRCSW5mbz4KICAgICAgICA8QkRCPlJrbFNBREF5TUFBQUFhK25BQUVCQVFBQnI1Y0g1Z3djREI4VUFJSUFBQUFBQUFGUEFFQUFEd0lBUUFJQVFBSUdBQUVCOUFIMEFmUUI5QWdGSFFGZUFhc0FBYThtQUFBQURHcFFJQ0FOQ29jS0FBQUFGR1owZVhCcWNESWdBQUFBQUdwd01pQUFBQUJIYW5BeWFBQUFBQlpwYUdSeUFBQUJxd0FBQVY0QUFRY0hBQUFBQUFBUFkyOXNjZ0VBQUFBQUFCRUFBQUFhY21WeklBQUFBQkp5WlhOam1jb0FBWm5LQUFFQUFBQUFBQUJxY0RKai8wLy9VUUFwQUFBQUFBRmVBQUFCcXdBQUFBQUFBQUFBQUFBQlhnQUFBYXNBQUFBQUFBQUFBQUFCQndFQi8yUUFJd0FCUTNKbFlYUnZjam9nU21GelVHVnlJRlpsY25OcGIyNGdNUzQ1TURBdU1mOWtBQkFBQVVWdVkwbEVPa2RTUWxRd01mOVNBQXdBQWdBSkFBVUVCQUFCLzF3QUUwQkFTRWhRU0VoUVNFaFFTRWhRU0VoUS81QUFDZ0FBQUFHdUxnQUIvNVBmRXpBWkx5T3RIQ2pYR0ZmenZ6WlorZjF4dkU5cXc1Z01zVWtnSTc5WDB1LzByVFVDY2RNYXZwZ2xtdDExMUlXd2V2VUpYOUNBZ05lQVUyK21XRFVBMkNXK2FHUS85S0F0Z1BGdzk0UGFiTUlzZldNdU8xTkNrcVpyNXc1SFBwNUJZeUtBOFZDdWVTQmkzNEkzT0hHQjMxNVZaQ0UzNXhlL0xlNzhDZ0FCVCtsWmFIMjh4RXN2d3BRWVc4ajdhWGxYWFJ2UitpdzVzSis3SVVBM0U1bXZmSTFjWFNOSHhVaFlIM3dZVzdZSHlldnc4R1g0NnowNVJrOTBZQlMyUHVwdVFhRnJSMWtlc1lqWlBheDNra3VwNENKYmhkT2ZxZGFxY2UvK2ZCVlNXbFNBSitwdzRRM1RjZzY3clAzSzRiSHBvaGI2aEphQWZxaFpSVkJPeW9XZElxTXU1TFNhMjlUazRRQzVrTHdRYllJRnFYZXJKOGpwU1ZvK0dSZTZDV1RkSEp1NTA0dXFMamdKV2ZSK3Vua2RpSitMdHEvQ2NJWWFrSjFMN2pxMUNmNHM5K1hKeno2Y25hTDhpTkNacEl3YU5NQ2VaZjV1SElhTzRjREpqMTZIMUZaS1lXWXdpdHErMmNURVJRQ0Q1cEtxc2t1SjFYbjZxSjVtbnlTWjUvUHd2dllBR3VsanpKcjhZNytNZGZNVEFQWmdvcU0rODhSWFQrcE9WVTZjMHVKUlV2WmdKMEhLQjRzR0QxWVUwRkQvY3BoZm01TEx2ZVRQcHVNYUN0ZmtUeUpyZDRja0orZnhsdXdJZ0N6cFRPVTdaYlJwQjJXS0hFWjRFQWtIMHh6QzF6aElDYzhCYkRlTDhIZG00Y24vQ3IvQ1RRdm90dStYSjJTZSswYWphUExMU3ZDZG4vMHVXQnR5b3M2emNSd3FFYnBCcWsyR2JVcHlsMFFMT2Z0RE1aMERqUEs5MHR6TURXQmd5VWNvTjhrc2hkU1RjSVZOSm04ZWE3TCtHK0Rzc2xNSGZsOXlnU0Rxd2lvOElOM0FEbitsWk5UQXRoWXdrZVRzTWFiaDVmMlpoY01LY3BFVEk5OThVNFVKNHdvdXlFOWIzS1pxWUdTbm11STd2ajlWUE5ZbjZzeHZRS0ZxQjVhM0F5UVBSeGpaTkFpbm5BODU4OW8xckJDWC9pVVlHaFQ3QU5vSjArYkd6SjFBaU1WUi9XVThPTUE3RVphQTRnRGM2L3FuVDU4VmRTa0NrbE9yOUpEclpRZzkzRGtlYXZ1aDY5enJZS2NlekY0Q2MyT2daQ3NtRTBhaE0yY3M2ZVkybDkwaHZnN2hiL05LNVZ1VXdMcGJTZVpGU0pGWEF5aFVWbm9XQ213QjI4bkJWdXN3bWs3b1ZNdDVWWG4vYjA3ZzBrdlViRGl4cW54NDVJZ3FQWG1rR0F2M3V3MCtSVnloM1VtOFJiM2pPNDNKa0UvRThoWXdiR1l4VXREZzIzb0RYVmVhNGkzOXhmVnlReGd6YmczSUJqckd5SlZoYjU4Y2NEdzZzVXBCbXZRMmx0UXk4S2IzY2Q5ZldHNkpQcFk5Z0tPZ3B2M1pwaWgrZG1jTDRrTkEzNUVxOWpBc0NnUkM3TGVtaExYTERzL0hyb2R6dC84dldXUXIyR3JaUk9YR05rWCtGN0lyQkk3eWg1OG1weGU3NEFvenNIdjhNdWJEM2lBcU5qc1FsL2NDemlUZ2pEdW0yK1hYWmU5dExHZW5mR2xGOGhaVjUvSkNrN0JVT0RCMEduOUtpampQcEFweUlXdGtvT3QrZ3RNWi93WVpOa21paE45b2docEt2UDQrOENPbUV1clN0cHNLWUU5ejVuYmtlQ29wMTM3L1NzOW00TTRBTXVMSVpkRGhvNWdNM1BkQkd1YUpUQTVkTDNCVEsxeXJ0MHo3RTlnNVNtNWxOM0VqQVI1SVF5eTNqZGJBN2lzN0gxVVNjVkwvR2I0NkE1bmRnY1N2MmNBYkYyWlpreXN0TzFjYXRIZEdCV043Sk9mUmZmODB1VVd1ZzFNdFNtbW8vdjZhcGRHakI3b2NlTWREd3Q1MDZJeVo0WWpjV0FQeFFENHhobk1GUHZGdlhrR29wY2hXVi9VSE1tQWN2VVY3bjBwbGZlMU5FQVhjMSszZEMzak1xa0NML3hWVG5yVjFhWTltNERwQitvbVZMcXdvb3JzbnhXT3lPSm96ekd6OHFhL01uWDBzS0tKaUxVcHRDS05IMjg3RmRBdjhkY1lxcENMTmo4Y0VJWUZFUjFNdU1NbnlRaEx3MXhYNnZKdStTcjcwSUE5citrcnBDeUdYL3FRMUI4bkhhdE5Jd21vaXhWaitOc2dhQkpxV045a1AxUEdVYis5ODVpNU5JdVRIdm1wckVuSGRQQnFQeEd6c3FFcDNaUWc4STR3UmtQRmxMN0drc1Bkcy9IUE0zUTlUT2FQVi9VenFvUEdvZi94bVNoRlZVRFgyc3FBYXIybFU1bkdpcnN2MWMzR3lseXFvd1UwRVVLeGw3emxMSTY1UUUvU3VsVkxhTlEwSWY5UGgzZWtaZnltVTFwbWIyZURqZFliUmMwTGkzbVhsdjgrTnFWUWdlZVozaUowcFJpbm5XVGN2VkNjMFI3cHhTUFFMdGRTZEVEYjZZeDlMT2NXR2lZSnF6V21sMzRZdE5XYThnK1UyKzBsTTJ1dFdMT0ExNnFSc1RKTGpGZGYxWUhteTVTMCs5SnV6eHhGRjZXYnZmaTE3QkRFK2ZDU0dqU1lLaGtwSGtubUVGUjRJM0pFbzlMWWtDYWY2SUtUTjFGWHdxYW9URHNuN0JCbE4zSGZsc0pZUDVGY0pQYkk0UUVvVnhONzBtU0xvU3hsVEZ2Wjk1ZUpEQ1VzbHRDQXQza0FEblM4dXZCSDZ3UHJCQ2lYUEN4V3o4SnpVVkpFeTZtanhweFFjZlA2Ym10dDRQSTVJaXVGeUwvRDJndVFyVEdBbTZScWRTUUdjd3Z5WUdPUWVDVnBURStDd0FiVmx3ZUpXTEVpOG0zMUlhejA0OW1wSmVTUFFMQzhEMktlS3d3a0t1Wmkwa0FzVjVZeFlCazRaN1JlUkllaGhRangxWXNvQ0lLOGExQmsrS3BoQ1lGWjNXdUZFMXBVU2NWaVJIdEZXWHdWVlR2dUZPM29rR3ovMnk3RW1kRlZEOEs2RDZpTnpYTFRMZ2lPMFkxamJEdGN6SlVWV3hUVkhHS3I1eTh3MVNXNjFTdDhIWUUzSkl5OCs1ZGUydkdsMGJTMit3b3ZhOXJ1aitaaHJoSDNvRHhLS0dzdFEwR0ZldS9zVTZHMUt0ZkVqZXpLLzJwOGZHM3drRzVHazVKZlFSenoyaFRGVGVEdjQ0b3lHMGlpcmVlRmRkTnk5RnFmeTRHSnpUWUxFczAxdFhNa2FtZ2UzL1liUlhyMEZmOGpVS01kU21HUDkvamV2NldVMWQ3aklSS3lkZmNrTWM3WnFnU1FPZWtTWDV1SUs3a3VSRGxiTTE5U1ZzRzBOOExEVEJmZTRLY2x4T0EvWnhrdFRmcWNqV3dvRU5ZUTVKK1BpcHdXV2h3UE5pRXlhbkVaVW5tNVFReGgzMVFocDBoZkVTcWorN1BsZW1YS1htQ2lvUHgvMnRQdlJqaCtrUUp3SUVOdmswVkdacDJ2Q2ZYS2N5NnhTdEpDWENMejRpL1VKQ1dTTkxOSnZJQkVJNFJSc2hIOGpjQjM3T3JFVjhaNWFEZUZTT3NXSkdCMFNORG5ycEp1aFFoMnZHUk10bEh0VGM4ZHBnNVNucFJwa1kxSUpJUTlEUnQ4bWhTY0FHSzFBSmpZOW5iMHY3N2ZmZm8wRHBHR24zbmF3c0Q5Z3ozNWFuQ2F1VXR4alVuRVJpVWJtOXAxeHJRY1Y3Wkc5N0xqUEpPRU1XK25vL2tFbzlsbDVIa2ovUUZJY2doNlFldTNqRjlmbWVrY3p0NGhqN0JrZjZSb29VcER2cTNwZFhrM2svRWVOYUhuV2pWRDhiT05CK1VCREdyL2JmM09pQU5vVWhpQWttMndiaUN1VGE5bEY4c0ZZbHJzM1pwTEZMdWl3M0NjWUpRQ1N0MCtYVUdQNzZSdTUzTlR0RUxremxPT2VUc1ZhZjdGaUxkWXhua3pYamFhVjNta2hjNVV6elZ1U3d1ZTZkU2ZjV3lYSkZpMzFyb2g0Tk1GZ1VOTEdkb3B4d2g1bXlWYzNZa3ZCNC9XM2VHYjV3WDlWeTRIZ0lkN2YxRXI2ZHJEWGQ4UlU2NkNQZkRsei9mMUVPL25DUno4bm4xcVNMSHBCMkNPOE4yc09UcFIxQXJsVEpEcjViYkorQmlhTUNtYmVieDFOS0owY25sKzYyT3dqa2RtRlBzL2ZQbGpBR2dEcm1kWnJKUkhZVjVIMmFYd3pzdGkrUS9FNkZ4bzhia2R5OTdndXIzNXRSclFDdElUc2Naa3dKUlpVTFpPVDFIWWVWcXRrdTVEdWlJT29ZVGtyNFFVQTNCR2VaTnFseUlRbkw4UDhoZEVrVy9qN3lWc1JTYUlzcG90OThrS0ltZmpLNmVhU2RneGNUditBQkRUNWl0RUVpNkQ2UzhIZkhNOHRMeHh0ZWN3ekdHNWtidEFqMFA4QTA0Y0pGdjdpNGR3Smt1NDBjb1cybmxlZkdHWWFhS0ZyeGZhbFBldnN3cE4yeTFjemVQMFdVZ1UxQnpEY3JwSENSR3Rncm1pamlmT0tlcUJ3UTFBeFhQajZBVW5OSHhlbTZMZ0FkcVhzNVFLd3o4M2FGWllBVkpqY0JrZUxDVWxPSzFZb2pZYWZNYUc1YmFOYTh6eWMxQWZiN1NlVHpqTUEyeDg5Y05CV3VXenhtYVdXSDFZVzkzRG00blk5eUJwczhGR3ovdk1Mdmt6UjlCV3ZhMTFpbVV3a3c2SVJzMmhJeG10ZjFjUk14bTNIcGNPQlE0TlBDeUlUdmgvMFpSbkFyaHVjNFZGMHMwdVRTU2FTTXViUXJGWFFsQm1sc2VvcXp4WFNab2QrNWUzWkVxNEJpTVFUeWNtc09DNHVKU21ZVGJxdG9lcGFJMWErVXQyUG0wRDRrczk4Y0F0U01PcVFwQ3JjUTcrS1pTMmxONXFBMjdhazZFSU9JM2EwaXJ2V1EzbEZJUndGbVRCcFpGcnY5U2JwQnpZWFVnM0NIbEU2N0JraXVpVzlMUTVqd3hqb2hkT0lZUFYyVkx1NmFaY1E4c3MxZ1ZtaVJNNEJFaGpFVk9mcjFIYkxJeklTcGxmdUo1dXE2R0Rzc3hhNGtYUHNBYldnYmRVdllXNVBaU29ydVc4cE9rZDd1am9MQ2NUQTlSZVY4Z1gwTlNub0RZLzh0NDlVZkxYWkF5VmRCbzlld1RDZkw5aEluYWxZd05peHFNdXZoWTdiU1RTcEtIWEVDOEdDU290ODUrUFJPaytlRllXUCtYR1JHVS9oelVrS0hUR0RkcWlQMHEzdTNsaEk5d0dTUDVJT01nNU0vMzBOM2hjTzkxY2k4UVdWNS9hald2b1hjWm9La1psMFhUSGFONjk2ZnpXVk1jOUp6bGtZZTBRemtveGRiTVcvSEdUS2RuRGZSYTRIaGpxV1dyYUVETEtIZ3JXMlVZYmZEcTZkenRNcGlZWWRKZXd5S1VnclBTeDQzaG11SXR3SGZvTVVwbWVzR3l2ZFhtYnBwMEdMankwUHpkZVdLNURseTdVOVNWTXVmNzg1VHUyNXkrdk5mamVxbURMaklaNmw0UUNaT0dTbGFrWUpRdWdUNTZadUI3OERnc0ZlVnZ1NEFTNlFmVjRnWU1URkRBMFNjUjlJSGlLdUtrVUYrdVZ4KzJ0T0J5SStCTFFseVlpc2w1ZUc3T1V0YkpCbGFHekJBYVBXVmc4dTIyMmhZZ1BwZlNPc0k1VkNHUUNQSkxodVQySCtwN2dTdlEwbElNVHdMYzFMMkZwbWtCQjgvRWNyN2NZSHgrQjUzYXU4ZXZtTGJZUFh3Ulp5UlJab3BIUXBjR3dIcmw0cDNBb3gxZkJwUGcvckZFRTVIcEtHTWM4R2IvelBXYzBINGxMZExDbzUrTkFMeTRPYzZNc0pqOHBZSjQrTCtOY1pQQ3pFTzZsMDZDWlRTOFF0Uzk3d1FDa1BoNWxUYm5WeEFNMHBsS0ltUFFtYWNlWFQyNk9OSjYxT1RQUEticEM2c0cvME52WXlEQ3BoT1RyMjE1TzZVL04vQnhIQit4bEpONTV6TTJBZnQ5ZXpFbWFYb0czUXN4QnEwd3k5Ny9IVXhYaVJJWGdVaWFEOGNqUXFYcmJOZWlkeFV4N2tDeVBrazlxUkM2dGRvWnVNZGpwOGMvMXA1YVU5RWpUdW9hcFZSa1hPSHMwUjRLRkZmZjJEYnJibXNtLzVIUklqbDZZdzljZzRyUWhFY20vRnhsSUYwWWc1RE5wQ2pYcTQ5ZEF5Tk54UllRc2xBOW5NWHlnN0FVajgwbFA3YjBHRTBvenBPSUUvOGRRMlFRVGpCZng1RXJHMUdOK21QZVRKa3hNcFdlaGtDdlVieEdxZnZRNWRaQXVHREU4RTFoei9jNVI5aGZWUkU1SVRNbm5Edi9wb2lla0lVMU9uWDBqMjNvNXcwWVVVblBmazdyMW1DamVRd3dCZ1hSK0U4WkkxK2Z2Sk9NdkU2R3JYNGlLVkVUdEs4ZS9PTURkRTJ2V2xVdjhGZUxiTGdFN2U1bG0yNXpBc09NVFlkcEVZTU9nL3p0OXFpMG9zWHdrVGlyQ2cveDFnRmg5QWZKc3BGUmZESFZ1RWtPdkFRM203MXZLU0FZVWVKTHVodHUyOS9iVDlOUmhyeHhSZTZIUjlMQ2FjcUY0U3BaOEZpTzV2VHVaeGFBVFYwalRaaHpRSXVYSDB6VEJKUEk5V01XZzRTSDJtWitwTXMzb29FU3IwTnd3eGl6bU9PeVV2bXZraU94K054NnppaXNlVjVwV3VJMCtJK3lnaUVTZHYyM2ViZXFuNVBPU3l1UzdMSEE0NlRPbnJxcWllbjB3UW9MUG5YeWR0TVV6Y1BlbGdJaEZWL3B6QTNKSGNQRWpjSGQrbHBITDhZMTVBazRnczZzV293MjdZQTd3b1N4YTFIaUlQZDdZQnJzbVZtNmJwYlNxTVl5UnRzVlpsOTRIYlgrTE05OFZUa1BDMThmT0VZOThOTTBHdDVwWHZUUllhSHB1b0RMNTNXYnFSRGhSZlVya1ZuSTlRT2VnOHFDOTJabFNYdnAvRnRDZEx2ZElRRmVVZHRwZkFQR3A1U1VhZ3NQSld1clpGNGU4T29OVkZXMi9VTzBzMU5hK3dJb2w3THVLZXFQd0RkL2lLVnBlUTdHZnNYMjJUNWg2MWw4emRuQllJRGhvWlpDeUt0U0ZJQzFodVdkTm1lam96WWtDT0plUUpzc01MRHJUZFZhamZzcmovREF6V2NqVE55VjlnZm1ySG1NWHdwbVFscXV4enNpV0pDcks5N1Zjb2phM1RhRE5ZTmFBdmZmbUFWbEJYWm5ubmsrWVhFSmZ1ZHNxc2dzRm9WeC85WjRzc29uZmVDTEpmQkhNR1o4Vm11OEd5dWRsK01SRjA3emV3WjZqZjhwUFlaUHZRR2MvbVd0NnY5ZE5nelZvTUpDTUF4bnZ2TXNpQXp5ZzRSYWZCTExTeExubFBhbkU0UFRQQ2F3T096L3hQQ0pnRGNDVHFxTERndXBud3Rja2E2YUU3cGYwcmovU3QxOWh0b1BYMGpLNUxQdGNvNFpnUWZVZ05ZSTRiTmlORk0vSjJwUHpXWmZEWUZWOFNzbk5wVGhBbDh3RWpWS2FnMFlpeGljS0RXalAyOE83VlhFMDFudG0zdzR0eW82WHVvb2dHWjhnZW80SWVrYVNFejZWUE1rR05UeUtXMzJyS000czRLMUF3UVNUSUUwWTV6eWVYWno4Vml6My9mN1VxUTdveHlBQ0xabEZRWXB1VGkxQTQwZjhrVjBMSTNRSkI3WnNnenIwZFlxL0RzREt1TXdNT3JUNmFrRE50TmhCQWJXT0k0OHZhZk44SHg3Rmw0ZjlMNFNEdzljQzJ4clZsdTdmd3ZkL05nMmtoN2x2eGp2M1RDYUU3YjRwcms5YzRYalNUTFBCSFY3WkNSSWxJZmpES0JTeG9KVnhEdk55SG5HT2hCZlJZQUZReXRMeHowVjIzUmJNWEk5Nm9raGN0b3Z5SVRzRVA4WlhnWHRiVkpnaVo5Um5YQndpOTlOaDFtMmgvSVMrUS9lWWpURWpyZUxtaUIrNW8yTnFTMWJQUy9JV2NpdGtzUzg1aUpmd1dxUk42SUJFc2hsT2twRjd0L3BZaW0zQXR3Wko1Yk5NcW8vREkvdy9BcUNDcmRjdDdhalRtSDlZV3lwTC9aY0VHU25qNEJPK0dvb00ybVpaajJCT2FSa1FDTUtQU0QwV0NVMUQ1MFVkM1lBWkEvdGNzQkxOSVp3ZnMyUFV3OEtaRTB5WWxwd2FJaUx0UHpwK0pVbkpHTVhtT0NTK1I4SnNNZ2R2K09zTmZRSXB0WmxNUWhLKzZYRzM3Uk5yeEd6MGdvcWxRS29ma3FHS1dGUXJSRjlFL0VpaGtFRlMzS0ZueFBNTkRRNDUrL0hFUWFBOVJ4UlNJcVpoVUVyRmFYMmFyVHJXS2h3QldEWUlVa1N5SnlaRVZ3TWhoNVp3Z1FtV3BvTVYrVmpQd2NuS2V1ZmJSemhSUmplMElRYStsTDRFbm5HQXF1ZmlyTWtzbkdDeURHTVNzYUJIelVXVWVvN0JGa1Z0QTlwNGk0eXJqTG04THQ4Qk9RQ0hHYzhsd3IxVTZCb1BCRFhrV1hJUFVkRVFLenZUc3p6L1d6a3J4bnBxNjl0SiswUU5wOHRTYU1MTUoxTVl6M09iZ3YyOFQxRUFOUVFaL2Z1bFd2dGJsTW04S2x3MExHQXlpcHByb0Z6T016c0Y4aG9rdTg2akpseTJRMGZwOEhYSVQ2UHRoRmwvZXVRNTZoSEpUUU9lV0h2ZjFIdWNTTTRYVmhLQ21GTmQvK1BESDdrL1V3TmZYcDB1LzYzcDlXRDFQVmlvM0VlVElKY0NUeEdCM2RKa3g4Wmh5YldZcjhtZE5NQ0docktoNDdscWNlOUdFcm4yU1E4YmNMK2lTL1V6bFVEKzhlR2FQMzNJanlUVzBWRVVySi9ZMFQyRFFTNlQ4N3Btc0R5UWNaUTFMRHJCS0NmWWlFZndHSk5NdldLQ3k4b2Y5OGd6dUFNNldkY0srbFN4alJrc1ZuQlIwZVQ5SzUzbVlReU8vRm03ekRmYnlSNjVZTWZkVkRiUnRjdTdVRm5aWWdrTU9yQVNCVnFZUzRnUWNjOUt3bENGTkRvdytpMkZFSTcvTjdicXFwcVdUclMyeHJWNGFpNmpwM0hKMWhmSEJlSnQ3MXgzNjIxempBUVlsVVFPMGpZdkhaSGYvRmhuUUtsa2o5dHlRVGRLMW90TEVNTTZVWVB3Y2c1cjRacnBuNmp0Z3RyQWhPdmN4N3lvM3MwVzk4eCt1R21RS3RiYWxXSEZUVnJJMlY1NXVyb1dFMURHVkozc1o5MDVDUEFPWVpVYXhQRUZUOElRVC95NUozSm9samxuL1JiVEZSK0l1VnY2NE9WOVZoaE5weG12YmF2bStZbHI0TDJHY0dvYTVSWTBYTlpjUlZmdkZaZVhIa1VTNWVUU2x4N216UEUrVjlZeFp3TEQ1Q2NWTjdwMGlzbU1LWmpVVjR2YmQyYzJNbkNGTExnQmp0Ui92VHRlQUlrTWxZb3MxWldrUjhXbXFmR0RsbHRPVityOFltbzNXQkNsL3lmTmpjTkFSOWJTTGs3eStsZWhBOERzVURWVTJ2c0Y2cmNaMzVzZFR4b2ovZi85YmFIVVRNK29MOStHZXJ2ODdQQjhIeGZvUEkxTHpTYkZ3Qk5CcWtRb2RyOS9UNHFTWG5ubE9KODFzOXVhanNYOVRIWHVuNUFWZFFaeVF3Q3o5cFVlYTNlcDF1SzRFeHloRVo3T1JpWXMyYmo0USs5aDhKM3ZQY2RrL1ZDTG9hMkJGVVk2eHlwZFZsR25wOGNWQ3Jac1phS01IMnY3clBuSlZualNlaTZHSzVSNUFNc3dSWnltSFp0QXJOb0xSODBIL0VyR0M2T2lTYS9aZFMrb1QzRDd0Z2U3ODJRZ2MxeFEzNlEreXZLSHFGNDI0SW9oRHc2SnJVNDlzYXQ0ZkkyM1I4UjJVTzNPV3U4aGdtOUZjemxTVHNqWU5vbW8wd21TWTlpZVlGNURzcEsvZ2JyZ3l2Y08zTXc3Z29maFJROUxMWkF0dHdCcU1VZDU2dFZCQ1k2aWpnQlVBVklVK1VwU1RsY2RBNVVqUmYzaWZsMjZHM1l3Y3M1dFpNQjROV2ttWitiWWVLS1JNZTZOUG1BM0VhS3N6WEVJUWpVam94cm5pS2YybHk4WlN2QSs3MkFTdmlZSnBWR29WbDVhb2g3bnA3RHI4UnduS0lidkFQY1FEWTBGOGR1VzlVMnd0VUY3bmJGVGhFZGdkSTBvb0pkSWxtbG9mMGV1UURYMFBXWW5uWjk5RXRrSVdQemZQM1E1S1lVZjN0M081aWJPc2VFbGQ1NHBEU1lOY3RsSm5HV1d3Mk53UWQ1eXA5SHRyUmNOOFlpOENGamJPY2JRMUlyMCtuamVsOExJY3RnWHRrSENXSXZkRDBWU2k1ZGpkdG14UzdOYk4zTUdZZTdUZ0MrQWlyMFdhay9UcTJjaUxnTk1yaGxYVFdVOEVzVnlBM3NzK1F4REdTNVhqWUNlRkdLOWpSWVE4QU5PdVpOZHFJMmg1WlVTa0ttcm95UDAwRlF1V0szRVU0NE5uWjRjVmZyNVBiUEkvWDlDVG0wRkZBd2NnWVo1ZUE0OGlhYm5PZzN4eWFCUEgzU25LaE53ZTQ4Sm1CSWFHYnpWdVBXNkxWNjgyQWxBY3BlKyt0UnE2Vk80eWdTUVRRU2I3Q1BLWHdFMVdCKzI2ZnNuejVnR1huQ0dDZXR0NDlKMHhwYlI3R0J2Z1F2TFN6TndBckF1elZJbWxKNm1rTXY2Mm1yOWZad2dTVVdnQ0pHTkZRSDFPakxlcFdSNUFkSUlRak1zNjJXank5WXdsdDVWNDE0R0l3c2lGL2JuWmFzeGc2eHpiZ2lKdmxjTzJwS1plUDZHRnRMcXE0cGFPM0NEYVdsZTRwUjEwOU84UjN6Q3BOUTdLbi9YMUtqY1BjTEU1Tm94NXNqT1c4Zm5FVXlpZTVwK3dPZzJVR1RCL3kzZ05QVnBMQkxRMGhuejdHdUp3L0NjK1VJTlBnb256UGFVazBmY2VRQzZkMFZrdFV1SVozYzVnS2Nmb1VFUXk5MjZSN0NjUVlndTA1bnhZT3BZanhjUzB4MkFDb0sxcG9hcCtIQkdzOWxRWEN0aC8zZTg0SzZma0gzeS9zSXVvQ1IyMFRySGN1TmxMaGlnV0o2K1Y4LzNUMnlaYkxHbFhFRnQyN2tDVnV3YXBvb3plYTRuNGgvY1JrZUxFZ1RhWnB5cW44UmtaODQwN29xM3VPZ1p4enFTRGRVYXgrd29QbnA2dk42VmxXckI3b0hEQWU2VWlldnduRnR6WFJia1pveml5dFZSajFrVTI2U1p3RHZzQ3NmdndFbUNuK0tFL2toNklBUDg0UVhab0pXcUN6RldyRG40YkxFMzRRUDVHREtseWRsT1NaTUtsb2FCS0JkR2pvZUZPNTFocEVWVnluMlVNMXMvQ1BoRUJmVGRSN0wzVk1PNGtlYlEyeXo3a2NvRTN0bGRsSnNBdG84U3h1dnlrWjBYRXg4RDBSWmZyUGprc0hMZG03anZDVjRDd2tqZVhQamd1SnI3NG9KaEo1ZGh0dTF6QU9nb2lVN1pFTmZLQkVDOHNoaXJaOUtDMHRBNEsrSWFVd2E2ZHNuamh5WGQwbW42YjZhU0FyR2liZmZvL1lTa1lHalNPd0w1M1poNWliTGhtTjlHTHhNQnRISmZwVWZSdzdiRUpERnJCK2pJVXpESituRFp2RnE1aS9KcVRwS0tjazJuL0g5RHNXVGZ4REJFbmZROGtQZHN1NzF4ZDFRRy9Ua1AyM0lIOXZlMUFoRFRHRkhFbElkTWxBbmtkZU15S2t6MTRyYUQ2dzdlc0RMT1BSd1JhQmlXS3ZFTXVxNkovbGtKSGxhQ2dPZFU3WEg2eEYvYXlKaTBJWUh6bllVYVU5eVF0UzExMU01eHVKMkt5VjRuUDdScUw0VUVYWWZMVHRhRE1yUUdpbzVMRDR2Zk02c0p6aWFJV1hqVENzS2dkRlF5V3F2dTc2YkhJSldDcEZnOHVIUjFWZU82MHhYKzI1QU8xSnZwT0tzdkhWMDdCV0syRDlONnpMNHM4ZW1QZks2Z2FweGVYeWtVMng4d29QeWNGcElZNkFkMUpZVGx0UzJmNHltWk5pNFV0Ull3Y1FobEVZQ0VBbzR2bEF2Y1VBS1ZjQXAzVFdzUU9mYzN1UkM5L0h5NjI4dUFHWTljY1h4OUdHampBU0hYSEk2cWk5RlZGSEpxQ240WFhubjFDNW4yalpGNWkxbjV3c09SaXVnSDZINTJVeHUxOTZhSTFNOExrNkNvckZPZXB3TGVkeG4wQ0l0KzEzWk9INTVsOWVqeHVCYjU3Z0FkbHhEZ0xUV04yR2pFcFRMdlNHMjNVQk8ydjZiS1hYRy9UQTJBWitKZm5HYWtEck1Zb09ud3lVSGNLeHA4VGhJYlYwVkQvQ3ZXZ0xiMkRpQUxEOHpSSm05ZFVqLzVyUVV0b24zekI2ajcxTk9YT1BlRjhSNitZZ3g1ZkZtVG94bExjbzdUamxyckd4OUVjRXAva2pYTE9qellRUUkrZ3hMK0FPUHRseGRjM3c3OGYzTU54eU5EWVI4QnZLQzE3bjNLN2hOajFzTllUd0dBUkgySExMT2NUMXlDMnhQb0hRT2U2ajB4L3BCN0sxTmRWSS9yaTVtVlpMUmE0a0tGMzh5YVNTSXBzdkhvTWlZQm9aZytqTUJmVjBsYnoveWVSMmgvMXVmTFpJNERONXFHT3REcUVNNUZzdC94Y3BOYnFNSmNDOXk1RXRqSk1kOTRmSXVRMTRYT0UxcWN0d0JKSFVORzJiVzhMRWhIMXJ2bjhlM1lzM2lseDI1ZlRQRTd5OWN1T1VKOXVXRkhvUEZoYWl2Ujhoa1RWek5YUi92dnNDVEJaelZZY3lTZ3dXeGw4Rk45K2pTR3ptUDlKcEdnVXNFaThXTytwQ0JDNzhMTm5KMmdVZWVSVGhJL1cxd1pNN1Q2Sm9Ea0FYT2lDZnJIa1U4QWxHZUJoTEZTQ3JsYjRMSWc2dDRDclh1cTZ4NHdlU3dhTXpzMjRKRE1UUjUyTi9xNndGNHNRcEgvU1B1NGFKcUZRRU91OFMxMUYrY2ZVaEt2TnplTjNjQy9VVll6RWZDMndueEdHV3BnZmhBTVVuUHVDcituUlBMZ3NTekZFUnNWQVRZOXFyMHkyckt2U1ljVW9PVEdrTk9Fb3hLWmZiSnZzd2FYclZNYlNjZVMxNS9ZWnVJNnhTM0gwZUw1QS90YTFycS93bUxPL0wwK0VTSTVoVENkVGx6a3kxNk4wbEZSdVJjVTBPUzBJYWNLcWFTazVnV2ZaeFRzcEE0Z2NiTkRLY01zTTQyNFpSN1hNT1JTdGc1UVV5c2JXUGh0alZ5Zk1tM0QxMG01LytyYjVicko0ejNYRVVoTXFpUElmUEtTZjJKdVEzQ2lPWjVJcFpVK2t4eEJoMmZQL0ZORDlnSlk5T2J0SFUyQjZUaG1tU1MzVXI0YjRpYU82NXhEekVlYUJKTW5iMlpBOXdHTDZlNGtyQlVQRzFuaEFmWEJEZnFpVkdDejc4cjdQL1JDd2JFVU5QaEFFZEFzWmsrd0RkcDNWUmtYNzNBNXhsNGxkQ3pFeGhXOTRpYldTYUdRNEh5Y2Rhb0hpVEV3Rk93K0JzaWJjU0wraXAxMG9vYUlPb2cxQ3VnWGNNREFXVXV3ZkJ4RFV6bG1IWTQ2bHpaWlhYUkhoQzB5OTU3anUwWGNlRG85QnFsTWZqYlhBUHE5cXJBTFk2eGxDOFJOcUt4VkQvWUFGSWhXNXQ5WVU4cE81dHFMWnE4T1JQRHhUN2hSZHJvZm9JZ2pQNDdsQmVsSkY5WVhBS0I4VXRsTDIvQW5OS1p2bVlmOXZvWW4wOTB6Z0Urck9SRGtMSnN6ZUwrWXVxZE5lY0loeEx2Uldic2s0TFBTLzN1VmF3WnY2dHM3ZmpjcnMvZVRlalpHdE9LbWJRQXZIMThrSlpZL3I5cHYzOVg3UEVyV3JpSVV1YU1scVhzNTNJbTVjR243dnBwMFlJQ3huSHVkUW9IWTdpbk1SM0Q5YlBuL2NwNU9oa1ZsamtjMHhsTW9NcW5mUjVEYXpuNXE1VmwrVlVoajAzN1VOZm02clYxZDJDNnlKQ2ZkeHBUS3JJSFVGTi9hd2J1bGZzK09seUpIdHByY1htVHU0d0FNVnplZUxGUFZSaU9sSUN5WmRaVDVpZVJwTzlacXdCa0JpZzhkdlRIZFp4NC8wRGxKaGJKcURGUXNBRlgyOGlyOGtWNHVFU09kOE5WVGJRcE0xUTdrKzJnL1gweDdRUURPRUJVQVovQlVha3kxNGhZV0xCaHVNZk1nc0t1aGdzNlpqMVRDSUZsSU9GeldIYXh1L0RmbjhVdkhCZjBvcDRyRXV4NHpDOXlKUmdTY24zdS9ncmxGWHpSY2tiOHlhVTNaYkZsRWlYY3hIMGlFWkxqNDBvRVlCSTJtZDJQU3g5dG5wb2FFdmRjRnpPb2g1dytURzhyOUVMUGI5RHRuUEdCUmJKbTBieDJsNkVjZ3Z6QTh2YzJ1enBYWDlOMk0xd05EOFpSdXJmUitUVFR3STFKU25iNG9idlMxSlVDRnNkcGF1NHpFRDZvT1IyUlIzRlZxalBicTVKRjZlVTYrYlRBNDNDekhzaUw2UW9UdXpKRExiSGZIRVdlRENzTitibHdPWXRCWUZ4S1VIRFc1VUdlRWMyT0RJL2p5ZmFhQ2VGeXBzVDZxWW41QmQ0Vll0bTBxc082eGl4MkkwTy8yMWZSdnhyWkk1MFNXMGdlZTRDdVFqWW1TNDVMMXRGK2NqM1NyeUFQcWxDZ3VNSWR3OFhPalBiTFlyUUVJZ0dEak5jWW56NzkxdUtTaWp3bkxWVjNSaGt3WmtJdEZyVVNFelNQcGFKWWJBb1ZscVJueGpFanVZUHNVL3hNemFxUWx6YnBoYkVwelhYVVJ4VXEyaVZDMjdWS1VkT0h0Z29OdU9JNlgrQWJsZ2VJY0dQTU0zam1VOTQrZFlKazNIZzk0NmRWNUpJUFB3RHppSEo1endBMS9hREdJQUx6ZEF5Y2xsQXh0TDlIMkw1eGxXYnlHUU1kUFladHBaQmpVMFhDcnJFM2FqVHhOUVJKcGY1MVV0ZU9EUHBTZU15c05uWmVtTmR5SnE3OUV6Mm1FRko5djF5WkRXL2w2bUJmRlQwYTFvMjFKc3djcFZoZ2F4WWZJZUY2WlVsRWg1TzVabmJ6TVJmbUs5TEljSnlNcmtIRW95ZlBuTnJvOExBY3ladUt3ci9HOUhpOXBUUyt3bXlsS2lmdDc3LzBtZm1sNFdwY2wwMmZiWkxRZ0ZlbGczYTN6WHlPTklUMDlmbG9NbjUwdlVHQTB3M1ZqcU5pRFMyaGY4RlQ1VW96RnFkY2V0OXc1UTBlZVNTMi9pbVluVDVrY21YalNDbElObysxanhScHZwTUlEWWM2UStiSHM5QkthOThGSkp0ZkMzZGhjNlVmRE5ZRFlBdFkvVWhsSWZ2WmpWZW44dnhEVTRxa1BrZjIzTTR3WFFuTmo4VUVHbml2aVlUZEFPU0xTR2l2M0J4cUtjWTdpWTZpR1RoOTBoUHpOYzlWais2NXpqMHg0aUF2NmwyRjZwbnRaaGUwSjRCQ1VvUTVFdmJIZzhvSjVRSmFza3FCNTB5bStQdjlMT0tFemJoeWg0TGNnZHhNVU92SXIxY2hOMFpuNE53a2l4dms2cUorcE9qWGdnSm0rQWdJQ0FnT2VmWVRkTVozMXNBSmdJUnJvVWh6VjI4cUdxRU1ROUFnVSttRnBTUEl1Mzk3ODU4cXpNR1hnTkFlaEtLa2lvekFNdUh1N0Q0eFVNYk5obFI4YjlHa2MrcE5vUmZvd0M3UDFJaTVtT0VZRmtYby93Zlp0VW9MUThqTTU1QVI0Kzd3eDZPWEpOOEQyb3REaisxYXo3Z09KdkNxMXJOMWtQbmM0NGwxdWozVk0zWnJEZ0s2YWRuKzNhL3RwSUpLWUthVUpLbTVtYlZTRjZWYUxjY0RURW5Tc1JWWGFJWEZoWU9iVVRSWERrVStwVUFRUVl2RFhmeWtkVGh0M2NYQ0RwOU1kRi8wdGFnYkxQTFZlVTltdWo3NXhGTk9qOGVnL3hDeHJkclh2QlQrdEFiTW5jSG5VempUQm1nc3pqN3ZlSElUZ1NqTE9UL0ZHQllLa0pOL1dCczc4ekFuVEVPS2pxSFF5Rm5YclpSemVMQlVUMXFFYVRZTGVEbTNkZXpYMGNlT3dpYmpGbEpvY3pVWXEvK0FUNUtqQXI0cGU2VmhvbnJmU2lUWWgyRFVodk9aeWZaNVh4K0hCbXg3dHlFZngvOXU1TVRsSWNIUld4ZnpORzlwMHk3WVNaRERrdmVqbUpZUDlEVVRjSnJraXNudU96THZ0eFpJT1ZZZHdaSkZ6L05LbTFZV3RzRVoyd2g4TEJjUFcyRm1HMEFKbVQ0SmRqRHordGNkN1Qya2VEOUJ3L0tPajRSSFJjdWFNNDZzNWdzcEd2aUpSOVlOQk1iS1lHWjU4VzJZaWpsMGxuSXdjbXBnQW5lOEVXKzdiMWNNSWpCNUN4SG5nQkp2M0haNXJNZm1mMHc3MXRVLzRMRzI2bWthWjZMdTNDT29nVWkxREdUS2o4bkVpNEt2d0xtWlFNMThnakZ0YWVCd2dXei8xWm5YZ3lNRDZCa2drTGJMNElCQUJVamNnTlZxU0svbVB5c2NnTGhXYkNsR2xWbGdqazkzcUpZYSt6cVJlaFZYSE4ySGo2eGZuOVVnckpnY3ljc2dMSitpdEExdkZTM1dXVUd5OU96VWc3U2xnbE1xc0VWeEhDei9lYmloK2hxbSt1T3h5QUQzWSt6TjlYSGRPZDgwU0NtUE04bGZqM3lrOFJSMktCdFBsVXd5alZTK3pKODc5NTNrZXNSYjZJUHN6QVdCRWdYeW4vQWl6aEUyL0ttTU1PUDNQR3Q0WGRkekNIaDcyT0dSWU41d0dFc2d0eFphNEJwV0EvMXlNcldxem9wMkxZYndlRTJRUjFkNi9RN0lPY0M2YWdqSFBkeFBwa2MzUGVjVTVUQjBKSzFZUWUwek5CU0lUNFlabFZUOFkyMnFndUVDK3M5TzlHbXdiUFVmWlord0t0UFBhZGNOWnE5am1DeVdHNXFlTE1ybEMrZGQ3WVl1dmVndTNmdlNCZ3BMYWRETHNaR2FtRzZ1N0lsTkFIc1JaanFjbnJEZFpJS0Mxdzg3Q1YrR3JmdTBCUXlyZzJqWFBSaGZBVmVIYVJzVFY5WEpsWTR4VmZhSHdNM1ZQSmpLMjBYTy9TS2JSMWJYbU5QTkxXK0trbUw1ZFZvbk5QdDVFWk1iR3JqcDdzNE8yM29KckFsZ25nSjBFWHZZMENSY0l3bkN4QTZtbjc5TVFxZ3EvRHlrUFQ3bHVLKy9qYWtvclc0NVkweFZJTVdobGQ1QU02VjRhTDZCYVd4N2Y2dTMrdDFFMDhkOVVlc2h3cENTdWQxZm5mNkVFcjJGcFp3UTI4cHZtVTVBYi9QdmhuUzBpUnNLY0RhWFpoZUJnbmRLRVBpNnBJRFBPSExHcjRhNlA2Tk12b3hLa25GbkZES1RkTXY5djRza3MvaDZESlMrbDZhSHlHdFVvc0Q1bWR5WXBvbU9IWHVpT0RyUy9sMUxadFhDUXJSZmtFckhqL0NJMnZkcmt5V3JvOGZpYzlCekVGdWVZVEF1WFg2WlMxTThhYW1LMVNSOUNuaFM2TlJtb3U1cGJiVjgvOEwzWWxuSy92Nks0SE5SNUZQUGdIaFFzcnNaVHUxTy9kZVJ4Zk1uc1VLZTdlYVdaN2I2NXBvL0FNZTNJcnk5KzV6cTEwNmxITUtLL05JVUdWdFg2UDh0Yi9lcVVNaUVheDcyY3o5b05yTTV6VW1BaE9DNkxRWkVxbGJnSFJNWk1XUk9HZzZuczJTalM5OTdoSDBhT0FkdUZONXJUMnN4S1gyUEh2LzA2azZnRlZySkIzTElINzZ3b0pwa2lMTC93alFhd0dJM1dsUG02UEZLS3B0blVLNDVEL09udzRpeEpoU05jQ1NoZjhvVDZuVG5ITUhWRjVlN0lDTnBJWUxLVmhIZjYvTGRRNWRJcWZzZ3JLTEZYVmkvTnoxb0RBR2FPK2FEVFVuUkZ3a0VLQ2lVbXhuTHBoVi9Ga3ZsMzRJYTNpenN5WE9kbmRYUjBIbTdFM2VuK3FxbnAyYTlQNHlOaFl0L3BTc3J0cWF4U0dDWHZKY0tmdTZ6RHVORExpdUU0Q0NWeWkyZVBPbGhqUG1zNmhLMkZVTHg1THB6emNlbjVTSTdpa3Rra24veGtrVW5BZW9SbFoyR1N6cGU5d1IyMUVwYmFPOVZWUWsva3I2L0pIN2JUbEtqNnI4d2dWR1p0NmVUSWY5VXBYV1htSzFTVmtoQXBhUExTY3RXVjBocXU3L1JvWTZzcGVtZEpreFhMN3FNbkpNT0tKOERGTThLNkRPcnJFajloNW9XbkE0YUpRYVo4cEwva0hnbjRSeTB0cTM3T241TVg3OC9EZG5FalU0RGk5VVZlam9XY0dzMkVrUmMrQjA3T3phdCtaZEhXRG9HWjJzaUJzbVRrOE9VVW43dVFrbk8yVmlQM0lBUjVNM2NpU3ZPV0pkU05uT1pSUjdYNEJFSUVOd29hbzZtenJqeG9yWWN5czdXVHViTU9EVGJVUDduN1FzNHQ2eHhtNzgzalJxQ2xocVBUc1h4TFIzcG9KZGZwenc0eUJCa2N4TnhpMk5PcVU0bmN5dW1YZStmcWc2R1BsYXl3ZVZ1dVpyelBEWjRjZ0F2b3R4THNNZ01VMEs2NDdOTERpUC83NHAxVElWRnZRd0ZkdHhMMXJ3UjN2Y1dQR2JWZXFnWVhXZGliYlErVGFFL3M0YnFSRGdJK1JTMXVMeFRLMFVXMU9UdFd5aCtZeE5WUTFaTlYyWmJSdXFGVWR0dE1lZTNnQVo2N3BxTFYwb2RLa1g4Y0Vla0dMSVZCS1VXQnJUbXdyZjc1TVl6TjBYL0FVYzJNbzVwTmZTSnRGOW45aG16a3BTMnZ4bDVDZVdXMGdLb1lPKzk1dUN4N3BhOFRNazhiTmY3bjJzeUNkTU41UVJ5NTlJS3Ryc0JxZUhDaWtmUUVrd1RPZmIwZkdEbmVxcExKVTUxSlIxcFpXL1B4VkUra3hncHMwczliUzJ0NENXZ085YnV2NFo5NE5DODRZVXJUc2pXbWhGUHk0YzdhalNLVjN6WEJSV25CWFZSb29WU2owV0VDdmsyZUFKTFhZaFgwU29oTXF0c3JDNVhwVzFzQ0YwWUVoTVZFZXFBZ1FvdnhtSjRvdklqcnZSWkJVVXVmL2h6ODlsNmphWmNQN0RCdERlN3oxcFdsMzNDSWV1RjE2NTh2c0t0UFJzVEt4emM4d1VTbndhMkZoRmpRVGE5L3oya3VXUnhQWXV1STdteFVsUms4SUl4K3RBMm9qbUVMK0ZwMC8wdmZHUjlESU5PQS9UUXpWbXMzbkxQRWNlRExYVVlFZ2VvTXFRNU9ST0lQNnBKVlU4bEllV0FiRGt5aWY3THpPUUliU1NTUlNOQ0twSVNIdUxocHJzdFYwWDdtUy9la1hTbmV0eWpRdFBod1RuYUxMRVdQeW1LUmhSdnZkWlFyZEpJMUU4cEI5czVLR0dXT2cweTd4RS81QjlCMDhWTDVCNTUwa01ROC8zb2pjdUtoNjhzMjhMSjhJZE1sWHNBZVZHdndtci96bGJZYUsreE9Icmp6cmFTcHdaT1Q2SzdqZmZ3cG5PYURxcUZlNDdaMjJjUi9zR3lrcU1HL1Jzb3J2NEJRYzZHYTlpRlJKRGVYQmJ1QlFNUVczZW1OVWpVRFlrZWNpamhXNnAvS0xxMFNYbDBpWTZWblpySUpJdGVvcXh2MVgybWxKZlNJRzlZZEN4cWx1U2dtNzZ2eXQraEdySk9zenBsWjFKc1BaMU1HcCt5cVUrZExCY1hyMmd4bndNY1VzV3UzNG02b1RQVE9oZm5ZQ2F4ZEkyOEphNFdaRk8za2xpakY1ZTJkbzZFSG51UkY5NXJFUTd1ajd0U2p1cDFyYXJ1RVY5NGkvUFBPN0s2NSt3K3FmTkp3WVhmc2dGQVhRSEY4cG9tbWovaUpNNzV5YStCZWVpUmRKbUpBdE1CQW5CNXNwUEFEM2Z2OEI3T1kxbGpnSTVBVFhCMHRpRFZMMU1rUWowZHR4RlY5WkNCUk5lWXY3UGNZdkQ4ZytWTGxrRmpNNEdjZ3hITG5ySHFYOTVQZCtJLzlMdll6aGo0OC93bTdrU2doaUJqN2o4eEhhQmJaSkFnS1NXaldrU2RDcjdaZkxEekt3UlRtNFUzZ0JMRmpjQWdGbS9GVEZwc1JCZzNIdWFDR3MxMnBDdGxLRk55d0hPOHk4RVVjdmphQytTU0ZhZFlkbElnWFVqNFBja3dhbWNHU1VFdGtwdXBoNFVCOW9YeDhRL2hNTmp0M1pydnZsUlhSWU9pSkZZd0lqT2ZGaXlhQ2hrM3Z6R0xGdWZxRFkrZFFxNU5QYTJBMG1XQlE5TVhRT1ljQWxkeXh6cXhBK2xjaFZWWmFhY0NTL01QWUdVSHNGZkVWY2pwWXJBQmt6dEsxVXcxOXdkNDZXNDEwMnovSDV2QU9XUDlWVVNNL1Bud1ZvYm1jT0RQNWltM25JMVRiYXlIWjdRU3JBSnBCRXFzZm5acWpreVhlRnBDY2NrOVRyZmJldnh0UnE4dHlJbTB2NnozYVFoUnRRL2ZhdVRzekpDem1zQ21xbDZYcHFnL0FZSXMwSTBhaGk3TGhOYzVtWUxNU2h1TnBhckpGN2hjQk9DNDEyaVVPTGllcWhod1ZzaW5ncTVJWmxBYXh4STNMS0IvWVRSTlFOU1dmMmVabjQ1eWZHVnhVZWMzYWZXYTA4R0l3QVEySkZtSHZTcTNWOHh4M1psRlhGMHpOODFpeE45YVJSVFo0NUl4Qno3aXBIMXNGR1pQRUkyM2s3YlBPcENRQlJ0bGQxM3ovR1E3dEU5YnNlSEM0aVBMd2RPRDlwZjhvaURtSS9qTjhxQjNrdkVkbHhZdE11dVRadW9keVB6WENZTVNOdFdibWgrbGJVMGgzN1BOSmVwTFFHamJHY2FpbnRZdFZZdXR4Zit3Z3BabklTVEd5Qkp6d3pZdklkODZpd3JuTktJNk1udCtOK2dSTTdnWU5QZFZwcXY2OHRHbmNpaFFPY3FvNkVaMXVnd01iU0RGNGNJV0N5MnkxOUFKYXFiTkw3SEdWVXZzc09uRktjeURIQlpRU0l2VmJGeDZZNVJLRnhHd0kxQndxd1ZPWmFzQmwxcjZ0V2xaNnhmaGhFc1JnTTJXcWhkV0tlYUtoREJWKzFXN1kxck5iek9RQ0RkMXZJZE8vSVd6MEdFc1F0SjgrbEFDL1VJODBlV3JDRUE4ZFdBN0ZCZnIzVEw4VU1IZ1BpUFpGcWhwUGJMWWZmQkMwV0FEcmpOdlliNXM5c3FubGdBK1BjeGYxbEQzMWxlL1drcSt4am4xbE1YMk5aK3Vreit4bjMyMmNuOE85ZjkvMUNuOE82QU9nTlM0cktVQ1NQMXlHVGxyNktqTUtyZWhUT2NkU3ZMUDJ2ZkVianZvY0xIUVQ4djhEMzJDSnJvdWdpKzZTOHJoclIzbVZ0bTBUNTVKc3IxNVh2akFFWXJWdnB2TWhkVUF0VHNoclFMbjYvL205WHdKV0hSamF1eVp2L09FTG5xWnhSbWIybE1qN2pmVDlEZnlic0VrWUJVRStPdy9Cb0E2K014L2VaZ2dqTnNXYkVzWDRTV0NYNitZN3hTUmpoRzZDM1B5YmMrN01PU3BpQzdLNkdHdFBmT3BXOGlFcm02SHNkWkhEaFBBMGFIdEYvRi9NWFNFS0Y5TFRJZTE0TzBlVm1qL1RuTU5qYVlXYzFXcVpPZGRuS294cVFaT2dvLzJZcFlsYVplMTRjZDlLRUg3MzZJL3VQeUFER2ZKU3R6N0lwaEJwaWtPZjlvdURNVytYc1hqM3BqSHBKUjNCMGNhQWw4cnY1T0xSR3doWG5paG1uTGF3T1ZEZXFZWjlCNXJ0a3FVb1g0a2MyU2JhSDhjaWZQakFpQjF5Q0xYMzA4TE96aWI3MTd6TXA5N1N2em5LVVl5YytFT2dDVzV2Z3dld2JESzA3VG1US1BPYnVyeGFONFZYcDdkaEZiSTFyQ1hCOG5OWW9rSHR0ZVBaZUtwY0tpS3RzT252dnh4ajNManJ5MXVGK2VuUVJ2TElmS0hkekl5ODcweG56YUhBdUkxR0JRWjF5d1JESUh4WVFxM2xlTTZyV2pId01EdVNReHpMZTVYeVN5K0dLUWQwcENiWHJqK1F5VmU1YThxQTJ6Z0VTRkpkZm1ubkU3L0FHdE9pUzZsek1nVmRId2F3c0t5SmJWell2Z0JnWFhYSFFvN3Q3Z2VYcnBsdzNHc3pOUDZQOGgyR1NhT1dRN3hBQnZXTDVtQmdxd0pXeFNuNk1HMzcyMFR1d0R3OXRhZUZzS0ljMFBJNWdKaG4zZ1U1Y2RJYVJuYW12Q1hXejdJRi9oRXhWQktZbGFWK1JxRGdvcXMvUDJJa2FHSjdPMGxkQVFnT2hKL0pSb0RYVHhNVnlpZ0RzWE9BYzhBV25PcVJCMzMvSUhucXZrblpyNWdZNmZoRTZCSWJpL3BDWHVmV3p6TysvcXFPVXFsYmQ3UmFmOG1seUZLdEsyQ3hueU4yN1BETDhrNVpwV2NqQXJKcGU5YkxCQkQzWDJ4aGtXMTRIdVR4QXFhK3hubURSTTRvZTdjVDVRZXk2M2tRUnhlb0lPdFA0TEFwcTd2Z0xmRTVtYUM3Tm1sQkNnT3N6czM4L3d6bTZ2SzJvYnlQRFE3cUpDK3dUZ0RmL1pHb0l3MTdoUG4rSnZ4dlJQSGlUOTZUMXl1VzZhT0lqNVdUck56cEYzN1pXYTdVczZrWVJWTDhKUEd6Ti93L2FkNjV1VUJlLzFPOHdNcWpjTEJQdVpHRXp6cXBvdSswb2NYRVRiOU5jU09vcWxWNXdDZjdzMWF3blpwRzNnQWVPSFpTMXNCZWRHRWQrK1hlbVNuck8wUHhwZTNTMjUzV3V0eGZ3QWRHZkl1V2R5R0liNEl2ODBjUGl4NWtxLzB4eTlucVdCRG1HeDlVOGFGTGdOWkFUbHJ2MmJTcGxXWHJDaVQ4N0grbVZzemM3M3d0QXN6VWdMTUFXT3JoRGZYL1FFYWdZd3V3M28xaFJSMXV0d090bHVQTjZaMVVtMzBjbFBrNU05RFlQb0l3Zm1LWDhqK2FOVzhtZUp5Mm82T2NFdEJMelgxbk43M0tJWWFqSkNBWnRrL1pQSCtUQTN1UUZuZGIvR3dVaXlMUzdBVWR1L2pBMkcwcSt1NjRvSmVvczdxRWEwT1h4eXAvOHJCL0JrTWxBYS85WFJrWGFWQnd4cnBlQkxqaVJrUmc4NzZoc3lSLzdUdjZWeEx1Z3ZJSVFqUlYxSjFCTHlkMzNjVzN4M2JVYWU3VjVXOHJYRlRjR0RaTmFNWUtDRS9PNnFSVzRsQXZnNVg4cEU1ZDdSVkpId1kyekZnWlVkbkRUcFJjZkdjMHJraVR0c250R0tkZWF4V0tqaDJZMGl5dlBtQklsejUvZHBNV0MwTXVpRndGeFA4V0xwK2s0NnJYa09qZ1NrazJHbDNJeWtnK0hqUGNLTDZxZGNqc0Z4eGh1dUtvMldPUWdMckRxZG1reEt1bXBvMzA3VVdkcExoVmE3ZWpzcml4dmdIS2Y3THh2WnoxZnB3TnViL1UwdVY2VlRNYXVrS2RCY3B3M1I0L0Y2Y2ZPOHN5VnF0MXQ1RGszdmNXNlZ6c3RId3BGT0ZnMkhtNUNuTkUrZzNZMkxaT05hZWFoRmtsT2RwZEhGQ0RaVitUbnBTMVZzUFpZY0wwdEE0SVljWVJyM0FRajYxWFJTSEFPUlY5eTJXZ09iZm1rOXk0V29lWkdGQ0R0MkNkOG1oTFpoR1pOWjZqRkVULzEyYlZqUFR0UjY0NWEvZTVSWVQ1NkxBc1pHakxIdnhpS2hmUHV2Y1F1Skk5RmcxamN4aUk5TTdSZzZGcDg3eFA2T2NzYjJjZjBlOXlwSmZNMnpVRjEvZHhZRkpsSnh3WFBBRUM2bHh0YU5qMDlxUXFXbUNBZ1dKRDE3aVkxNXpQZC93aE94K0M4a0JEaC9DTjl6b3NFYVRnTzF5Q2xHSkw0TVdnSlNKcFRBcGpqYnBMeUpJWWoxK2NyVDhWU3JlMUFzRGZYL2RxVXZkV3VHd1l4K3lEeEFDVnZxZk9DdXloSEdSaFRycjdvRkpQZm5GYmkxS25NdmFMZVlFUGlESVlqa3c2OStvdEVNLzlndmJPRktmWjVCNndJRlNiaHVvbFlzb0JFNTB6MDRQeUVpeFNNWm94eVVwa1ZxVmJvMW5jK3hGdUNHa1hBQVlSNVpxbHNJenRLQjBic0w1cUcxdE1hanpaaGk1QlhUZUxKaTRZc0Z0K1hPOGJvdEU2MHl3WDd6cUhJSkwrRVFaWmVtT3JUZ05ZUmFIR0kvZWJFTllYTjdPbnUweUVuWHFBcW9jdmxnUy81VVE5aWpDNS9xQmdPcmJPUWd4a1FPR3YydkNJU1A0ME9iYjNWVi91d21rTVk4eEE2Q3VkQ015SFR5c0FPK1BpZlpFSXZuWmVFN0xtdlRlRzY5UlQ0alNocVlNa25lZk93KzFCeURMUlpTNGJ0VUtHdVBBUG9rVXZWZkRoOUxNMGhNM0FUWEJLNHNKSDRmd0g2NWlTbmVYYkI3VWlkUVg2Uko0NTZjZXA2aWV6U3g1MExsMEZKS3pxM083S1JvS20rUDJKd284c01uVkRyaGhLMG81dVJBTU01STFTcXU2amZrbFB0OGUvNkhtVktISGtvTmdwVFliTmpwTG9LZGlVdERVN0JiZ0xYQ0MwSXl5ak1VTHk1NlhqYjZXZitVaTl5K00wY0MxZ1hxeTZ2elJld3hPUkx1b1dEdFlWNUNHSktxeW56dmNPNlhjVDR2OFpHU0dleElmZE5xUTRsSFFRMzhBOE1SQUdzazhWd2gyVFJrc2dVbENVaWJleitYRmV5YjVJRGYyWE1IaHpuUUxMaXhLMHl4eVBVVld1SGlOTkZFbGp2N2ZydDgzbElZcHpPQUp0UWVXRkdOTW1aMnJRVG5XYmszQndUbVJ0M3BLU1NDdjRJc1U4VGVSNDl2djZ0Wm92NGd6U3JIVStaVVFvQ2xZSXY4ZUtraWlSNUlNeXgvYzJiSnMzZ05QMFBpV0ErWmVnMjI2azFMY1htRUVkWkxZY3ZuaE5lb1h2YzlOckdsVjFDOFgyQkU2N29DTlpOaEFFTUVVcVhFdGlZWG92N3lwRHlVU2xaaE80N0JYQlZ1Z3FEUzRIVjhrSHZzblQ2QnQydTcweVlValc3SGk5TDB4VnVOS0NGMlAwNUlOZ3FVL3I0MmFuaG5ZMmllSG9lTUdGWW5KdlNaRUVFYStNVklyWlZETFprMzFzZG9SWjllVTBpQlZ0Mk4vemlJZU5STWJJRlRBem1HQ1ZNRkFDNDQrV0RxUXFxakZIKy9wV1creFhJQy8yV0NmT0JiKzczNzZScXR0QTk4VWFicmNBdmFWUlp1NWVubTdLMlpaWEV6dVo5WFY2ZmFxN0hkQUNnNlRqZlFsdG5UZ3BBK09aS1pHQnQ5aWRHNjBUUTdNbHBHaGhDSnAvVEQ4Sm1LOTZXSUdQMGVrazdXWllSM3MyZFpNZDQ5bWNYdFcvN1RJckNRVDdTZmk5TTBuVGV5K3MwS2FUdUk3L3hibmk1QVJlV3lheHdHMW9MN1NobEJ3cW8rSTlFd3dqUjdUcjZuOTRWaUJRQVUyVnZFM1JvalkwQllzaHhiemNaejBjUnppZXhGNm83Q1VRdHpPNE5LN29aQ3pKWVptZm9ZblVwYm85c3h1NmlLTk0xaEhsbHZ5Y2g1ZzJwckFERThvWVlHc0gyZkRrRHJWMk5OQzNodHdsQi9OTDVRdjdHL3U3b0M4Y3RwSUNwbDNKNUpYY3RwYyttNnAwaVA3M2J4U1lIK3Ywb3A0Nkhuajl2UTNFU08xZXJLK0x3RFVZNWorKzQ0ckQ5dE1jR2pnTlBwYzE0Z3FDS0ZnUmpEWE54cVBtRmRacWNEQm5tOWo2YzNqWE5XM1lWUFpIRmFpdUx1TU4zeGxxd1VKRERkQnNscTJ2a2ZNdDRlZkdmUk5EN1dJQkJKOWFaZjRsbTJSMGhDMXRqUDk3Mll4eWhPSCtRdU9BQzdLWjhZZHNnVWQxS08vSWNWKzB3Z29MSFpNdlJOcSt4dXpqUHlkM1ZWWWlmQU9QeVowREdCUDNIRzJtQkNxQzRLQzJDaXR5dmpWeU1zbjF5NktLR0NXV3dueTdMc2RYcFQ5T2VHdm90Qmk3Q0Q4cG1XbHlQVlM2dWdxczcrOEdPdXBvK3BDSFp4QmhjdWlwZ3YxU2RIc0tCZURpOXIxSFowa0xEa01meXBuM0d3MXNlYUwxbGVXb2p2K0dYeWcxS0VrV0NIeGMzU1R6T2pwVmF3WHpuZW5IMXlPZ1NpRGZDSEZNeU5YdnkyK0FmcmxjMXNoekJ1WjMzSFp0Qm03SXRzbENtZzlqc0syTHBpaHVmYUdoMmxqcms4OXJLT3lHWElMbzl0V3NMcXZJUTBKbzhhOWtUWDkyblZuNHZQZHppNGlrN1BKQ1pVOTd2SUdXOXdhM3JUNnNpRzZGK1NRbWVOVnpwQXZBZ0NqLy9QZU9KVVNzbHlUZEZxK29EYkQ5MVQyL2ZJNkhVNkt5cmtYQnR6Ky9ERU4zY01QUHZTeTN1M2xaaklDU3JkdFFvOFl3b1B3V3RMRHZ3RExRZ2lxM3h4UkJTR2dTbHZBSHB2bnFXSUNEWHYyQ0lPSFphZU11UWNKY0xvQnVRNU8yMUhvZmxzTGFtbnlPcXNlcDkzc3ZURElNYlFkSzdhQjhqNFdCRlFNa1VkRUt3ekdlWnEza29IcFoyajRxazdxUlB0eHhsYXZUN2xYYUF1U2p2ZnJScHp2Y3UrMkV2YmJQRmdYU1BlWHNrZU1QWWRQWUpEZ2tmKzhIMXdQSmtBSGV6NGNVaG4rZHd5b29qcVp0T1BOZ2I3YkIvNVdCSjcyVUFIMUVvU0Rqc3NjZFYxYWFqYS9FanhNRFFTWElIOFZzZ3VyZjUxbFl2MGZTUFpURGt0ek5jVjZreU4rVk5UbWFaQTZQWnFKbUViUWlWL25FemVnVnlZcUNNbGtqNHVhdmdaUnlhOXFyTjNUNjJLaHFMN24vTmZKUXVscDZ4UUlQc0o3MFlrMSsxRVZDSVVCTDM2ZEZETDZmSm5TSHQ4eHNVTjRlczQwbGpxUms0TzhBek5xOTdmd1o0dzR4c2VrYi9NcUgvSy93YlE5czF0NmJEbHdneExOeDhmY2U2b25wOFdjdTJnMXl5NDZISVF3ZU5vY0JKWEtXZW50OTROLzE3L3hjM0JqS2JuMTdSMlJWMytzYzBjSVRaQUtkTS9yNHc5N0NpMkRYWW1oeFV4K05VMG9DNk4zbjgxcDJPd29jTyt0NHk1UE1NOUFBa0R6VVNFNFBHSC9ZY3ZUN0xIaC9tR2FIWkdiYWtHTFR5K0dBN1FaUmZMbVc1OXRYdnRzcGlQS1cvK2N4ZjhxNWEvREpIMUlTL0NQQmhTeWQ5d1JvZVlzWEcwckVRejN4T3RjekRJVUkvMXcvSEFOK3g4eVFsMzlEcVg2R3N0R2tlU3VZaUtpNHRXRFdmRk9uTDZrNm9ZSldXK3prRWtuRkY0TzRzc0I4Y2ZZNmtwdXJQOU93cy9UR2UrREhUS0d0MXMyUlVKaVVFb3d0aW1wWlZLMGRISGlmS2hyL0YyQ2tvbU1TTkhQT28yQWpUdlVNTXBKK1h0ZkJ3S0xkT0x5cVNYVjRQZWNNZUE2aW9nWlR0R05tMVp2d1JJaUorTnBDdWxFcEd2eFNzNWdXVHRCR0ZNRDd2K1B5WjQrdGEvRzVQN0w0MkZvSndwRWJhV2M0eEpDQ1M5dytJREtYb1IxZ3EwRFFCTmFNRlJUdEgvSFRPWjVaOVJrWVl1em9UbFJ3bjIzeDd1V2k5WlFybGwvenczMEpzU3VHdVFqVVcyVjhjS0ttbUVlRVdvVXNJbEdrK0hpNktka2ZWNHZodURiQXJZbjBPSWlRZC9IVXdvYVl2Qm1VNFpoT0lnMHVvQ2VEcjNKWndCUHdTeEk0V09YRFZaSE1VSGs2SlF0YmlWcnRaOTZDSW9lb2MyR01JOXFxb3ZkRVpFZzRGc3l6cmdGK2JETmtzMzQ4OVlIN2R2Q1c0eHp5NUtFamROVHpKWDRTdzgza1l3TDJ0ckJwVUYzYk1oeE82Q0l5aFg2dWNtazJUQ1QxRStYRmtyaGszZ0dCUllsOE5tUlNEckhVRFh5N1lxMGRKSlpyblQ5Mm5rQkt5RHpQM2pXMWl4VURZTnN0NUNsSno0K3hHbW9HbHBKV3VjMGNQbXFNK01sZzF4SXRFOFRqZWZyZk1sRGFTWis2RzljZWlsUmxjeWJmWlBDR2VTdXRua21oQU1SRUgrWTljeUI5ZkhOVVZJSzkvT1lTRjVDQzFzUXlhbDVoOWtETVBzL3FxTlZvckVCWWk4MlJCQ0JWeDVaTGdHM3F1MDBFakxFWXFSUFZ0R05rMHBFazR3WnU2enliUStlTmZQQU10a2Y0WHZIbDVMSmZhVmh2STJCYXdRQS8yQ3o0NkFOYnhIa3RRc1pNZXNVSFRPZVkwK1RiT3czSlp0YlY0ZzdiUXlIMnRqbFlreG81WVdzVTMzOEhzQzlQbDY0YXJGcUUvK2xtL0dOOHp6ZHFYRzB0eDVYMUZKZTVYU3V2SlRRbXNuTVV4eFlPbmxnMGxpOHBHcTUwS3dScUN5cUp0VDRuTmJrUEN4dTBEU1Rud0ZFaVVEUU16OEZ5UWRESXdTNkk4NUR2V2xPOXdGNFlKNytvSXVvN1BKR3VHL1N5bFY4MEFmNVp6S3VQTXRKVnFFRE5Vd1pJZXJ2TUR5dFIwdnl2MzBGcmsyblVuOC9RcnNzeElJNDhaOVVTZWQvSUpxODd6bi9nZHMrYUhad1h1TjluMTRVS0Y5RUlzYlBNU0tkbkRWVi9UU3NNeE1jL0lwWHFYOWtOdjIrcm5Ndks4R3VZTHNqQXJHeFUyRXJMNFpNU3hiaDZLNFVUSTl5REJGTHBrOW4zVG90WmRhc1BVVFV3Zytud0xDdWIxQlh2WWtWay9BOGFBV29RSUk1NzhPa0pGSTF5OW1lWUdxbnFUZU01Nk9nOEdVQm1WZkMxaVNTamFWbUtRTFNHQi9xZmRZNFZMTU96NUVSZ0Q3Y0YrVFlaNjlma3NRaGFUczBDWnVnbnBhTU0raGNFemNLak5JZndZRlQxY0Z2SWZjM05FUFc3UGc2VTJoMi9OU1d4bVhhS2Q4OWVlQlNIL1U2RDc0MjJSMkFrQkV6akhzR2FOY2hxNDl1Y0lBSUdjS3AvQm5ubXRTZ0Exd3JIaDlnYlRvaHUyUndROFdSQ3g5ZjRTQ0htcXFBT2RBV2t4N0tDWEVqc1p0QkFJOERaRDBJSGM3ak1HZ2ZLcXZ6cnhXeVE5UjJTUnNWNUQ2R0xwLzNXRFY1NWdKa1U3cDZPVkF5ZFpJMG5NNUtQTVNKMGhob25ZbzY1MVVnNk9FcDFjWUZVRVMvSlVNWFVFMXA3NFRENy9mOUg1VnE4RDMxeUlWaUczcEtQdVJMby96K2ZseXlSdFIwZmRBbFlqRnI0QnlnTkpiRlA2WFJQYVdxZXJ1dVkwM3M0T0lhMlpDdGI4dk0yanNqUnZLR3hvTWt5UndGMmZJYjJvZW92SEFuMWUyUVI4TkxMdnBhNCtLMWVsZ2ZLTUE4S2VCcG1MelZwUkdKVlFaY1ZTci9NUWRhUTlYYzE0M1FrNGEycWtlQXZWYWxZWmoxTDN1YnRMN2RoR1M4c3IzcnVlRGU5aEI5N2ZxaDBoK3Z1LzlaRGh3R2FwT3BpcWtQSVI1dE5xanRzYVR5enRvMnRhcWVSUzZOTEtaTWFCZ0YxeERRQ00wWFJpdnZLd2lpOC9zYXFJNnNiWnJaTU1sRi9iaXlIcGUvQzQ4SUxMWlc1QkdqYzd5dk1EbkxLTDR1bEJFYmc4NzR2TG9KV0xqRVhQZWtIS1hrUXUrc3hHOHhBSU5qa2s0b290Y2JwWUtQMDNSZFVQblBVYVBsN3ZMb3pRVTJqdWFLMUdXWTN5UWFMd3l3eWJTRTRLbnFnbDVVV0JpRmJWMm9iNWkzN2FEbnpKRXdraVlCNURDQWNVQld1TVgzNkxVUGtWczFaejJ2TGlpeUhZeXNLYjUyVHFrNjdEaEdZK3dzaEJoZ1RNSStvRTVZeXhQNXl5YlgwVlpwbkpENmpQWDh4Y1R2SzduSEdlcmd0TUMwVEg5anVhRHhzNFRHU2tnQW90bTN3QVM5M2NObGpUNHlvaGtLZ21TazBrNXQ3Vm5yRHdDakNQbEE3ZzVJb0tPYVdRdEhtSk1rbldlOTBSTFI2d3d2cEJBUmh5cjl2d1Z4N3d3bWJLYThnWWZiY09Ldmp4VWRNT2NmYW5ORDBNcGw3U3luZkVJYll4SXdoM1AxeUd0WjJnYXQ3c0d3d283aXJHcWd6N1dsWGY5ajN6bXRwYmhpZHo2ZXFZYzNGRFZoVWpQY3kvREhzbitDMjFvZENJQVNGR3VOdW0zQUFOdzVKckVaMGdqcWxMeWNSNm0wVG5HOFpIdkFXR0M2OE1ZOW1rYVhKdERSTnZmaDhSWWtySy94cFZpQ0ZQeVM0czdFenBlYkJud0xmblpsdC9aUlBrZGt0QngwQUR3SmplV3g2NHo4OUpvTlVhUFZYR3ZYcjlzWXNqcWhLdm1GbmJ6V2ZjUUdOUzA2dVhNSlgzeUtSbWVVQmZwQkNBaDBVa2pZLzZNK3NOcmQ0MnFZR0lHeHlUdlRKeFJaU1RraUtsM0RacEErREVoM2trTXpXcUZSOHZoblNnR2cwUUtuUUpCQmVYLzNjbU5KOGpZWW1Sb21aUS8zaHdwaDhPdGNUU1pRSExzTmFwOWtJb2k4ZFhqOVh2alZlcjdmaVM0d1NoTVNMcmljbFJIWHdlSFhsWE9sczNubi8xbWtSWkFKS1FlQkIxN1hxbzVUa3RIZDVidUJvcUNselNoc0pMdlR0a1I5U2ZSY0UyZktEeEJBM2YrMnozNm9jdGVsQjNJcXZMVFErUk1WdWdJd2pDYTExQmpxWkFPeWNRSWkxeU1qUlU4M3F3WVo4UFF5T0syTVpzSUk2cmdhaThyZWxUZkRDT0VlekZlMVRvNkNvTUl4YmtwMnV2SEhSUlhlS3ozS2Exb0lBRVFqdVpPM29GbXJUTXdLOXpIM01TNVBjWlRKMzFPSEpldFdDSG1GWGZrbFpRcXY4Tk9qVklUaThRREN2bXZKR0lDYUhxRTE0UlRaQk1MYkxlQ0dLYzgwVEp3c2xlaC9iRW8wY3lEVjdDN1pNMFlNbXVFcEJrU1V2T3Z4SWV4NVFiMVNMZGM5WXBIM1FWc3hjUGlqdi9mdlJocnUvL2NNdm5xMlpRdEc4N09TdThoZy8xTzhoZGliV3cxSjdFM1lhR21kWGE3bVVlUmFjaWdjRGxZYVlPUWJDOGVqSCs5ZkdIdGxNWEhPeW9kbEhsblV5OHpZS295SDdYZmluWXJZUjcweFBTNFZBWUppZWhtUU5pUzhCN1NNRzhMcnpFazhTUnUrU0ZVY2ViRzJ0S3lrSXltUUE0RjRCYjh1S0VxY3FacGcwNXRUM0o0S3RtMU1sL1l6blQxOElpY1IxaTNnWEIzMjlKTEpycFZIWFljTk9GM1BKcHp0bEZFUmVwUzZPdmF5ZnlCNHFuVDREdDkzMGxmVXRPVEtZR1VGdnhmMlFqRlF2T0tpY3RPS3dhOHJlMGg5YU9nY0t1SDM2YlJqRUVGQVNYMC9GcDUyWm9MZEpmaS9PNVNGL0NRTkZ4QUwvOUtTTmRVeWpYaGxhNjMrMVlUZGIxNGxOZkVIUnQvS1pQUlV5WGlFM2NxWC9VcWtna2dSOEJnclNvQldESE5rYlZKZjluTEVPVlJQNjBrSDlMYkNIY3ZXNjB5RUVoNUY3L0tJeGRQaFY5K1dhY2RvR0l3ODVTYUhrWnMyc3hLQjhSYkk1L1RPZng3RzMwN29YbDAvVDhicEhiazRwblExeWNjWDlWMEtkSGFwbGZZMmlqZHd4RWNCZWRPaTdmVytPbVRyNmtaQmRRVk54azNBL2NKU1NFMmVqb1p3eGZ0NjNmQXd5UWNRQkd3WjJMY1VRbDJ4K3B6a2p6OGxmSTJ6VFc1SHZWVzdwVDQrYmxjUTVTY2NoZStqOTNoZzlFRThURmxxOGhxSW1FRmcyWlF1MVFOT3lCSW10WFpodFIyWDVkditaUTdvd01jV3pFVVFBekxBVVIveFlkZjg1SE9abDdaUGR6a2VSSXVkcHptVlp5Z0hWZnZvV3UzVHpOQVI5czVQNWtGMHhKMmdtNXJvcDNYOEtQTlNtK3NCNll2dER1QXFHcGtqQTQ0aVdZSXRsNW50b1dYcHpWRkh4THlkNmxPVGVKV2tpMlpybDZOOHUzcUsrY3pGajFRSG12Q0V5cFZsdnlmZmZkNFIrU3l5eklnMnhZUFNKaFlVWVVhTGN0cXAwUDgyWFk0enBSRzZma210b2VBZnZPa3p5US9jWVJIVlZPUmhPem94SUtrd3Ayckg2cE8zaDlzai8xUVJtTld3Q1JRWmZxeXY3NTIwQlVKMGJtd01YZG1CcFJraThMWEVqRm90UFg0RnFicHZkWEVLakp6aDZsMW5sKzIvUGZ5MDhkVEh3OFI4OEs0NG9rVlBLRFl0NU5GUnptVVExOTNiaFU3dUlIQXBVN1BoODIwR05OU1llVXVlR1pkYTltNDY2dFltK1FKOTJQWkhjbFh0WnZiYTlKM2VjVDdqUXFJZ3VDWFh3K3pSbFVhbzNidnZFMUVqV3NuRktYQ0VBdi9GeGx6bzVFNU5kdXlmaDIzWWZSK2NhaTJiSGtBd1ZPNGRBZmtiR3pjYXExa01xYzNXYm1hSU9NV21VUm15Z054OE1nTXVQYk9uckgveXplWHpSZFBYZUhXL3ZTYzF6SFNiWEZ4R2xoeHlhSVB0emVEVSt3WG5NeWc4RitDSzNwUG5FVU8xaVdkemlsUTYzZk96RzhrYmtFNHBlaTc0blM3WEZhVTVoL1VQRHpJeXRzMWlscDZWVDJtQi9zeFVqa3MzS1N6SEpNaUVsY0ZjVFZwdEJoYXpwUDM0c0M5NEFZSzdnQW5aeHVjT0FuZkNsR0RKdTIvdXI3bUZDR3ZTMUkvaHBxc0NDRDRUNVMzcXYxSVdsRllTNWE1cDJCU25KM3k5anpLcTUyODNtekFncUlxZkJMZ3FaTy9rWUVubk0rTnVXUU1xZzQxMDVFb2JSaGo4T0VCRUJHd3B2L0pzNkloc0REUEFld3RJZ0RVK24vS0ZHL3VreC9XWlZWaTQ2RDZ4Rm9pZHZhdGVyYzBXOW9lY1lXOTk3aDg2Wk5DSDBsY3NHRUl6YnBVbkdDdHl1ekZhR2JHS3NhYXJKRVB5M0RGOEF6UldxNllTdWRFbHdZVDBtZml0MGd4Y0h2OFhJWGJuWlN5R1lYZmROejNkTExiNHZBZU9IY1VoQkw5MUx6MWNCUU1ML0JYWENKY1pYb1hyS2h6N3Q2bUR6ODlaVkxubXJqbWNuL0ZPTjZiVURrSmFHVDZJbGRWcmVsUktvNmtRaUVqZ20zY1RpWFk4dEJNS01rSWhNMERxOUNyQllkNjZtZXZ1SjFjRUl5Qk05L2VXK0g3N2xaL243ZEZuUzNMWFFZd0pkUUZBZFRWSEdFNkNRNlFpOWFHWWRaSVJFVHV2OVVYZ29JUEM0VFVCQ0dPVzBUR1JhdUErZ28rOHVWVFpLMzM1Y1FGYXY2N0ZIaEVRUEZsWG5pMlFtUFl1VHJrT2NVcmRCWTEwa1BPekRkNjFidThEbWdZWUhpVVBEaTNQSTZnQ2NIYXUxdk55UW5aR3BWdEQ5VG1JUXZQelpxWkxLaVI5TGcrY1pqclV2Y2xTbmcxdEdrcjJleHliQlBXb1lVdVpDVnJJT2FtaWZReGRLVDlNKyttL0FLMXQ2VE9OYzFEdTBReUdMUysvdzJZUU9rNExrUUIxTHovMWhkbWhvYXd0UXYwLzdVZ1pvbFZvVjVkaXFqUzBVY25iQitmUUpXd2t0NC9DckFldmZiNERHMmU1SEt6VlFrQVU1cE9pd0o2TWV6b1k4cHJlb29zbGZrUS9zY2pjN3ZBUWJuM1JkMjM1NnZEQVl4UnRpWEp6aSswZ01CWW1QSk5SbWlzK0pUYUltdFpBMWpPZk1sVmd3VXRmNllYUUdKZ0ZPVktXSWhnUTN3cWxMeDR4TnBlU0tpSTd0S1dhQm1CYVhjRkxrM3YwbVA0WEdudUhCK3M0NUYxTnAxYWtueG9wTGEvVzgwT2lNbS9OZ3ZkdFJCK1JINS9odHBJTjJnQS9pajI3NVNzSG5DOHZZN2k1dHJueDR1Qm9qMndSdFVQVERTK0xQNzJPZ3VyUDN1aEtmbHVZYnI4N25VUTA5TnFyNjQ0UVV5ZlpieU54cUlYc21OTy9WeUs3ajgvZUpLWjVMTVhzdDN4OFhyT250dkRPbE5ZTUc4YldhWlowYzkzbEFnMG9PMCt6VkZHRmNQcEVLVUZnMjZ5VkhvZ0tWRDdZZnVxTEJPeVozc1doYXlxeVdIank5WlorL2tVbC9HN1Q1S1YvWFJ2Tkw0ZzBvNWJkdGVseE9saHZIemhxL284aFVzbWhMTVcweUlZbnVHaWduYmI4TGYveUd4M29VV2hjbStod2JydXVsazRPc1JKNytQZ041TytGeWJJMXhnRnZRUU12UXVET0xRWUh5Ui9XT21RN205cmQ2MmpKQWJFdkJTelErYnJmZW03Rnhvamh2aWs3SzlvM0tKcmloWjhhTXNkeEpuTWcyTDFhSmszNEpTN3F0ajBaUE5sT01NMUtiTHhQVEJvM2MweUdTRFF5UytMWk55cWpRNTY3d3VMSmxUakhvUTMzTkhqSlVUV0pVdk5STDc5ekNSdUNnNnJTcXpUZGZPRmVOZ0V3ODMvQjJaaFR5aDFUajNjNFVESEtrZkQrTE16ODdLSTd2UmlJSnNRWmFxcmFCY2RZZm1uUkhNdERSSzlIaVFHOEsvUUlPRExObWt4aVYrcXQwbjhYMWpQQU5UWUNQUDhGRmJQbmRsbzlLVXhsQWIrWkhFYVNkbHF3cFdxczA4K0gyZFI5Y3FDMzVkakZWUFhibmhGdUx3Q3NJckpUcndiK1hTSnNzdXNwUk9LUXBhckk0Y1dtU0JRalpwalltb1lYamdWYWV0QUNFd2lTMDVTOGUzSVhQa05DUWlacG5tdzF0a0hKS3RWSkg4NWVUbW1mdkxJL0V5V2RScm9ZeWZ4cE55Rm1BT2t0RTJnWUpBNzBGSVN6QytqMEZZSTBxTFg5RGRjbTBERy8zZVZnUmFBVnp4RkFmMkhYRk5pZEwvSzRieVltR3BHOEZUY3gzWGRrdHhoSU9pakVHOHdLKzZ0TVBjbVJqK0FEZkpxZFpJYkdkQmRIZ0JTMlpMd1lIbGQ3OFJpc1JYTkNpZ0FYemFtanFuRmt1NWgzb3VQN3JadkwxTlJYcmNBejdkVnYzcWd1YUxxSUpEVjNrR3RQMy9lcXFhWE14L1p4blNubGdpeUxTcjlvWHVUblZZK2ppQmhhSGoxSXVLTHg3bVFrOVphdStKNm8wb1pUSFViS1ZBNHFtQzJhWHlPVDlUUG5LZ3kzQXgvbUoxQTRDcGxIWS80c01pdThMcW1vKzdXTUtyYU4yWUdlYmFCNzgwMWNaWjd6aUsrcmtHSzlTU0w0Yzd3bGVmNnJVMGpodkw3aXRkUDMrUUltbVB1NG83OXNZclNQWG5YN0s5TWtGTXp5V3Jpb2ZXVDBNVmhKMHlDemlZbUhrcG90N291NCtFUmdZWFdSaGUyWmxySjhWdWJlNDExZmJGR2hVTE9hR0xMTjdXOGlvanJCblpXU0RGMmhSWnNGcHliMWUrMklUMS96NXlZUjJtYW5OdFp1MEEyUlJiWmthTkxMd3JGR0ZaZk1iSC95WGlSUk5WbytGdGhPT3BRMlJmaExxV3lCMVc5R0pQcU1BMzJXZnJsY1Z2eWdKeFBuSTJxUDR4ZFJWajBXV3IwR2hxZUlweHJ6ZWNnTzhxU3FLSjBNd3c3c2Z3a3NGSGV5MEMzdlpqQldFTUpsbnozeXV1bmZoS1FMVDJZV3paTVZWQk51TmVFa0JjZDUvQllxcHcyZTFZNjNaU2NVK1E4WXpndWw3ZVREVGxyQlBaeHVxemIwRUYxNG1pR2dEbGovUzlGZktVM1NiODRNUTNmNm40TGUzN0tEK0VmZXR6c0oyR0hCMlNId21CRUxQSlM0Nzd2Y1A0U3BCVFMvS1c3RHRHRTlYZk5TWEhlMUJ3c2NIWTM0ZTJ1UzlZRHFUVVVaMEJvdGdmUFhLelMvcmM5bWhDWFNBUmhOZ0ZJV3F3T1FrUUtYc3NqNGFtclFFN3lTK2xsRWdXV3hoZ2lNQk9KU0NDeXhzSXUwSGpJc2pVc2dXbFJBQlRTSitXemw1WWlMek9aVDArdzFqL1lNSmgwd2l5eHYxbmtrU3I2RDVtNEhSYXhrV2ZRS2E0TEl1Z3hEU1NIdWM0aTE4djlSTitJamgwaVNsWW5FRjNzOVloVkdnVnNvVEQ0NFNlNVJwNTFwUGFqM1J5b1dFVnZlVGxkS0RXQklRTEFNRDQyUE9TZmFvbHhjWGpuanl6R3ovQ2ZLc3hVWTUyY1J3bnlUa25PbTlPbStpTXBnU3Yra2JkYTlTTUJoWnVKaFMyU1lKODd3SEpUVDNVZDFnRFo3L1pROERMQ3ljalRzSWtqbWo0eWU4ZlZ0cVdER2VOZjNLYXhibjV2YkhXTm5tVWY2ZzBaczJRcm43RDNwSHp1bklnOHcxS1VYV0Fxd0pIYWpXTW84aVJmVVNoNE9ReUJGY2JWZlpsY3NHbnBpZk51R0FtY1Fvc202NVhNS0x5SS8xaS9JY3ZDZWd1eGRMZVlHR0kvUWtzWTZnRGdackRSMnBuNkFNbTQrdHNDdkV1WEQrMTZXMnh0azBHVUplV0w5ZTZvck5QY2pWRXdyUHRhTFZNWlA1Snl6VzJzeTVoZXdUa2tFRkVjaWNPa09kb0xRZFNCZjBYYU5rZlJscmtwWWIyYWhWbEVBTS9sQVlyQnlGRENTR3N4WitRUnRzWE40SE4yTld0M1A3REd6UG96MGExOHozdmtsNkE2NDV2eW9EcVBPSlBnMEgvZk95UUtmUW83WnBIOThFb2xpL1ZjWmpxTEUvaVhCOExpOGY1OVZkdTJqdkJERFduRy9IR0piWitSNVBUMWJDUzQ1UmF5azYwU2tLcHZhTWVWbmhOWUdvY0JTREFvcldjR1hpdnZpaGtVQXUybGs0QU9OWTIrUG0rRms0SFU4SUYrUDVwOHBtcFFUcG8yeUFjU1lON0U2ck1ZL1I0ZmkwL0MrdUZDaVp6UTVJS2ZlZkl6TFNIc2krN0pEcmk3OU42VWJFQTI0M20veEErTkRpT2N2Qk80UmpWRG1vaTd1bEJrYXNaMFBJOWk5a0VBRjdWdm0wY2FuNFQxcWFCVlk2S0FSK2xHWXFJWmgwTjllU3V3UVduV2ZNZmJacGE5YmY2cEtFcWVqZ0tDRlRHTzVUQ29kdFZLVG5DODJNSzNUemNDZXJ2TjBvRERaTTJYK1QraE02UUhEV2ZxdDQ2RlYzSHMxcE43M2F4QVNqU0hjUGF4a3dvNE9tbktHdUw5L2JEd1NDVy9VUUloTWdWcTRHOVNMUWZxZnc3L2pFK1NSNXJVWWtOMjRCYWsraHJrdFVjdUJESGRJT3d3ZGd2UUlXdVNDZnNtZGloT0p0T0ZYaXJsdXV2QzNMV2NSc291SmlTNjZ2RzQ3dlQxdXc2Y0Jja1QwRmJqZnRXSDF0NkZ5eEtBZjBFRDVFbHBiRHVzdU43OVFQM0NZeTVkQlRDNFFYNys2cVJnRTFnZi9kcnh0MU55L2JtTGFrclEyVUZtYjJTcDQ4TnZodjJtelppdmxHTEtuOURXOFZqWmljMXJKaGxlbGt0SHFnTmpqYTQrYzZLUVp3Nm1YL3EzRDN1UWJaR0NXQ1dLSHF5M3JYZUJMR0wvMk1Ca3E1U2lhVUhYN0FVWWtrcC9wMVJ5Q2ZYV25xVzNEWkI4ejNqQVFMSTJ4L1B3eXNvUU5nYVF1UWtuUGw4cnhrQzVjVVVwSmV3Vm5Dd2V1R1BkOUtETHZCNUozemVRUFhaVytjYURHWkVqNUcxdjR6UVJpK2hZMnhaNzZkT0pleWJCZHU4L0JQdS8wT3lHTWNVK2ovT1FLRnduQjBZM1h4RkcwNDMxNzdKazJDOTFVbEcrZnhHL3ptYmd6WDZDUEhzeGFWL1pmNm9ESHp2OCsvYkE4eENuL3I1SlI4SXMyanNOUkJ4ZzdrRlYyM2JlWEtVNHl2MjFHN0tpQkJWN3A1cmgrY2ZzV1NsaGNEUkJMdXJNYkx4WUNKTTlQOGN2ZzJwQlJpZXhSRllmeWthVzhwV2VsVEFIVkZ4VUZubWtJZ0xMV2ZDRTg1OGVhcmZXNUswaGZxY1EvZmxOSzB4Y21XdXNwMnN5NDducXNvbDhZMHBoU1hwMkhSWHZVSGNlY25veFhiYlY0ZkNaQWFpdUE0a2h2NzB4MGlpRXQvZVJHZUR0K0srZ2FZMHoydU1RaUJPbko5Q0N3bW9TeEtXQmlHQndJU2V3MVpXWmpDdjJCdDFVc1ZudmFRaDU0bzQ0bEpRZFJRZmhVSEdUY0ZTTE5IeENFUitiaE9vUk1jNTE2b2NYRkxzL0NsSUZyeXhkd0tYbWtYTC9Cd2tzTyt0czBaQzE3M0JSVThBcldxSnJ5ZVIvM0VEUTkyVGdrWUpjQi80dUw0ZFlCMGJDZkxRYkcvUWRXaC81cVZWTGZiUGdPSkNIN3hHbzNjSGpNeE5WOWh0M3I5cWd4ZzNDb096WDYycGE4T1lTZDJaMTZ3QWNiYkRoNnBBOXZaMmx6VXBOVitDSW01TVNkbGgwZ2ZNWnpxd1FwMkh3YVd3SWJaOVJjKzFLekZTSnAvS3RGNE12d3lmdGVMU1J4R29nbmJhelhUMWVXc0tmdXNWT2ZOY1lNUTlEaEhIZmhUT1VSVmZFVHE2WDhQZjhFUlExa21JMVRLbDZZWE5ueElLQ3p1aTVZUXFJd2sxV09LcWlZZnBVNlNwQVZTa2s1RFBMMkNSUS9EaW02RDJkamJMNWlTRXlhTDRyVXVDeFVIckJQWEpPNm55VkpjS0dFa2h4MTlxdnk1QmdhZ0hXam9tT3RlbEtPaXcyeFZnM284VWxueEIzOVNrNGw3YVhtbENuTzhHeFJSZ09DRk5iUTlZWDFUOHFpc0ZVUXNQRUttalJ5N0diN0o5RnZzRnBtNHU4MlpDN0o0RE16S3czR1BTS3lTcFluSURMNFVwUEhFWkdVazl6N3Q0M2xFY1NzeCtFalVSeFNjSS92c1paeGJvb3JjR1d2NGRsZ1UvQ2Y4R21rRUtHZDRLUmZEOWFndTZUQ2s3YjljcUdlbVdoVjNtWUVqL0NrWFFtRzY2MXNlcjlUTThRaitjODZIVE4rT3MyeWxORFVrUWRrZEhCeUdNOUYwS0lZZldPSGNmeXRmdUpUSWVqV2VEQnBCcWU1OVZMUFVmRy84TjhYVDhCTEJ1NldZYjZPclp3bWdnSkd0Q2I1Wmh5QW9oMDZRQW11dzd5SVkzVFNRYjlUQyt5WnZFNmFMOVJIdlhlTGhXaVhzZmF6VlhHS3pKQStMV1VndGV3MkV0ZTk5d3dpWUc5UTQ5cWhnNkc1VWhyVkxNTk84aThqYTAzOUxzNlhEWDFPNU5ISEFUOWFVNStXaW9VT0k0aFRJSWMyS2FCS3ZCZXpyUm1yaXdPY1V4RjFxWE9aNVVoWmRuNzUxUWUybHNCWHBjYzd5SWplQ2JkOFhlUnE3cHhOTUx4VFVWYzZoajFuc1hGa0UvV3NWYjVJNmFNZDc5ZC9LWVZWQVdGZXNWRStPVHo5dkQ2QVp6QWY5TnFXS2l3WUorSGlqQUlZYlhmL1c4UXFFeUdhNkVKM1NiL1V3ckVFdDVUeXBMbkdaM3BZdXYvbldyY3RGMldveFh2V2J0NTU1aU5yTTZoakYvK3d2TDZFYW92ZzRHMHErWHB4a3k0dFJ1NnN2aTZvaExYZ3FYWDYvVzV1NHBNdWtPaFM3VDRvd1lVM3VTNytaYTUrdC9GaSs4WFpiVXdDOFdGakpkQW1BVXpGRlFvdGRnWWFsWlg2NXpRcnB6aWpETDlnSXlmcUZzK3U5azNyaVA0Rk5QZE5wZ3NRMEhmQTBieXQzaytoRmRRV0JnK3dUemNmOUUxdTFZRTNkNWtHTmpwVU9oVXQxa1IzQ21sTWZEUHBUejdsVnp6MVFRUzNrY2YzZ1czQndHTzhEdnJrZFU0OEQwYVJyS0RaNVdscG9ZU2tkZk84L2xpK2lYOVlieEQ5VHJENUdKK2hZdWJvUlV6YkdEMkV5NS9tblZnZlVhREs3dG5uVVMwcGhBa3Z5bmc5c1FkdEpkMERub3h0UHJEUVBWdkhGY1VyMTRMajhOYmh6YXlZbXFTejl1aWl3NnVOc2pBTUFNVURCTFNFYWlldllYTmY5TG9hQzY5ZW1uNk52ei9STm12WnFGOXVyZEhKcTI5bDl4Z2JhWGJxdkYyQnZtY1V0VHphako3cmt4UEdLQlpBVTdPcnpLdlloSFZwWVJRN1BaWlQ1OWxRSHVUdzhwSGk3aExodnBFVFMrRWlHZmRheWREcEZIYWxrUzIrdENCOXFGcFFnRXZMM2QzeWZNZGNJYzYzMHNGNjV1YmREMzF3UUZVS21EeG40K2FFVHoyRDcyaTFWWStBUERCdjlvbXhIQVBoMWUzbk1vcXN2STRWM21yT0Z1a3ZzUVprbGdkcjRNOENocnhMdlpIVDJFa25ib0hEY0xzRjNIVTV5MUcwbXdCZE84SkIyZU5DK0YxUloyNHpjQjl6UU43YTg1NnRUa2RiWnI3cEsxNEE2bWtEUkdqdE9UQlZMdlRVa3Z2NDVGcGtMS1pWMWJhSlM3VTUzL0ZOaXU5ZzZRdDNFeGY2ZjZRQitUU2gveExXSERuRjAzN2FwZU5KK3l2cldmTXVlMCtNSjF2dnB5a2I2QXlTSmM2d25jOTVGR2syaFZlM29jTTU1T250bzJwdDl5RzRDU091Ym85bzF6akdZUFE4MnF6bVNwY1NXMitVcTJxeFhYREpaeFJoSyt4dUxtS2ZNU2Vyd3owbkF0Yk9KQTdVZWl1UENTVTBZakdRTzFJWHJwd044RXRkRjdpWFNVdHdEcUgrQTFTdXRmSGdoaVVFTVJqclkyNFlxTWFPZzRXTm1sU2pQN25NYTRVU2lsdmpYQUVXOEJwbTRPMkY4Z1VIU1haaTh0VHJveHgzYW44SFBoYmhhTmdUZHc4RFBBbVZPMWxyOFJDSWd2QjFIelZrbnhQOXU5WnZnRVBhdkkya2tVL2R5YTFzUWZnWm52M3BPVXV3dmJTNTZkVFA4Qi9xOWNsbmZHdjZhL0pWOXQ2TTVPQ3dBRE95YmtzdGNYaGk5TEp6Mmd5UWQ2TWx1NHhOSlpGOXVMRnVFbmtibnNyYnFjU2kza25seHBMck9tR3lidVlmNzVvT3ZRY21aaTlVbHdPUnJxWFVUQmsyNDdvZmhZK1R5OWd0S3hiK3NZWlQvNmVoak10Q3A3aHI5SlMwTmlGNUZHNm9pQkF0ajhxVXkwSnhERFZrSGwyUlFoeE5OMGQyTTV0SmNsM1BpN1JXcEFZUXErQ29XSGY4WlJuSTB4SVRIemxnOEc3VUtGb1Y5SzV6VFBPSmppN0crQ1ZoZ0luNVhpY29Qakk2NForenhLUjlmajVQUnEwd1NBVWVXN0ltcVpDcXRvY21adzljQWV3cTJXVVBGTVVSTnBHWFB2ak5BNXU0Ui9oa0QrcjRzalpHKzIxdkw1em5sOS90V3VvUFdDOEFjcjFOZXR2ZC9rL3FSV2kzWHp0dElud290VC9Wand1cVV6MkVRSXFzWFFGbXp3bVRnOTgzTS9VbXlEYXRxMXgyVFhwZ1FYN2tqOUxxZEtDemUvVEpIczl3YW9SS01wMERnbmtJN2F0Skw2cm5MckFRcjVsazlYYnV2UnMrTXI0aUQvZ01GVG9yREVHQlR5Tm85TDlhTW5hdTMrNGtLQVM4aEpOUm1WeVhGWS9qL3dXOWp5a1RmdmNKblFqVXhOU0tLUjFFNWR3citFdjBQaVY0SkYxd2xUVFpWdGlTQS9SWnlBKzFFQlVjQkM2dU5jMzhiWXFMemJEeUE3V3k1Sk91Q3BWREpEcjZYblowa2Fmd01oMytpNmpmcVJ2bWJJcm9SMUVaTmtEYm4wdUNvM1dXMy9EMnVjZ2UvWjUvNGJNSE01TDBCMUNFdnBZRXl6bmhQQnhjdjk2M2lUcVZ0M1VKR1FOc3hJYTFESkpyNUtuN0ltRGZlZ3FSTVJ5bk9yNjFGYjhNYUdBeVg0bWhWOFhEM2JkbmF6cDFJY3BqQUpwS3VCR0FHNkdvUXcyWGs4MFVzS2dRM0hxS00yWmZnakxmaDhjQm01Smtzd2thSzVEWlU1cmtVQkJiR3RhM1BqZ1V6cHlkK016eTB0a0Nwd0VvNkxRN09URFlJWkhmeDRyQmFFWS9BMjBMRzNrenYyZndwV0ZML2VrL1A2ejU5Y29UemRLbTdpS2dFOEhkaUc5VXZ3RDFucnNNZ2pXUkhoNzRDWGNpeExXbk1EckJMRlV5MHZrY21WanIzVFBkUm9HekYvZE4wcDR3dnNZWktCWC9hQkhxSTlyOUVwVldYS1NKWEpJclR0V05sRFdCZTlPbXFnbmtwY1YrSGZuWmVGUlpSMEtzOXZsQ3JSNVNOOHkwNDllQzlyTklvT1hSS0JQSUcyQlliMk90ZldvNFJ2OFp1NXU4YXVvbmVZb1BucEpQYlJjLzh6c3NYUnZteTRDSUNVSTREeGtoVkdWelRIZ3FNaWxud0lWbzlDZm5aZGgrbHFPd3JhNTM2bUdScEJuS055Uko1RTFjQUhxdzA4Qkx6Q24xUmNJSUt0S3VzV3VRR1pudS9GK2JtWW9BZlhCZldQaU5wWk1rNDlwblozeTNieDJYYXIrSXpoT1d3b0pCb2xyTWZyNVVlZU1GSDc3ZmxnTzQzL1VTdHZRVEQyQWxBOUUrVDJsRU1pQ3p1MzRmTFd4ZmI0TWZ5eVh5ZlVIUUhCZ3ZZLzV2aklCb2RWYmFweDlCM2ZXN3JRek42ei9ONUxwQWZ4NTB1UTN6aWd4ZG4rS0YvaFh5NkRQbXBJZGRvSW1TUTlBRnFKcU1jVHA3Mi94amlpNVdKY0VUZnNUNFlDeXpoUDU4U01OcUFHSFpHaE1EYnIrc0VpT2pYTTJqKzc3ZCtYNUlJMG5xUUFwUkdQWG5sQjFvWG13RGVhYk9TZytZbnBwM3djenBGQjZqaUFiNEZucDk4d0cydlJiNDIrTmVPbEN6aXJFTHlrT1FTUEVramh1a0ZHVW05aEY5K2lPUUpUTE1IUmVWakpodW5EUGdtZTRBUStQN3l3Qy9TVXZHRHlOd2pwWXRoL3Z6Vyt1K1UvVUFNZkliMGF3M0FYOXA1NzJ1aHRIVUR0T215OUlYbGlYcDdTK1J5cC8xNHpkcHdEM21vWUU3c0xFZWFaVGJhRTBsMFRYYmJkQ0JYNnVDRnJGU2E3eVpSSTd6dEdNbHZGby95MU9xaHMydGQ5eXdvdmU1a1pPV0VHdG1JRUIzRDBjcHBJL0wwMHgzS043MUJGcHIwQ2QyVXI0bmdLendoKzE3Sm80b09DYk14d3pacjhVR3FyL2U3V1V1UW9rajJIVXVRUHhEZlRZaks0WkVpRVhsa1MwVjlTbHhhejEzRWpVOC9yZld6dGZ6YmlhTUhxRmRITGF4VDFYYVM2NFZqNTUxMEdRbVg2UHhzcTN5WlVGaU5pSzNLczBROThjakJuaFc2dzhCNXkza0NaN2p4MEJZUVFOUE1jejQ5NVYwMi9oMmxvTS9FdW9JQ0NZd1V6VWpQd1VVRE1EcFJvb0Y3K3I2VlVieVcvNk5JYkgyWEJlTXNRNHI5aEM0R1V3UkdOSUdORTVPbGJzWS9rTko4Z3U3MG1BRWswT3MwQ3lmSm1Kb2p6S3lndVUzL1VTOFJNMDlvQWxFRE5aSm9aNXc5ajRaVDloVXNKV2p1QU5NOXhQZWxSWFB5TkZtRXZZVnoyak9PaVFPVXlMdjdLMkF3UUhRdVRPSkVQNUE0MS9sREJEQ0ZscklzTnBGL3F6N25rNVEvd1g1YW5nOFlhbzZwdkdOY1NpODFvNzYyUVpMbk0rSk9RbVZNbmxPMzZYUkZZZmhseU5sZVk2NXQraGNRa1h2cktiSkw5M011bzJFb09JeDczQWpJVHdmdFV2WlY3VUFleVQxeW9rdGZ4L1lpWnM2OWJ5L1RHeWNYWTBuZFFjeUxrNzZ5K0dXLytBZS9maTZ5OXpqVGFtMXdpZ29maWdyOUlzRlZjK1ZmZHMyUkJxcCt3VXZjeWdmanVldUJJeWZEbHFhUUt0dTBMbzZ6cmNXeGhlK1JieEwzSjZrV0E5TmQzTktBcUViQ2gyOU4xTm5GcUZKU2Z1eXd0dVRUN3cwUDZRT2RQNHNVSWlIRjdLR0dQT2JvOG9xSG9zNlFBV3N4YWNrVzJYQUJ3bXhJUytseDlVSnNoc1RNL3lTT2lhZURoUllQUi9oNWx2RU5vZ0pFTUxTWk1yOXVpckg1b2VKNTcvdWdsbWhQZUZ4Z01paTJOMi9tWTcyaGltWjRyV2xoTVlYTEYwWlhWVWZFaUVubW1XZXhKcFQ1eTd0NXY4dHowVnd3UmVMNzlScUduOU8zUDlEb3dyZU5XRFpYZXZJSzQzbTh0aXJ5dElaSlkxRzZtZCsvQnRPcGJrNmlQbElFUTM2cTNqaHZyekMrcGNCWDNqdDBTZVFvNjNjazkwWVJzakZrNmMwN1lLOFRHY1gwVVNna0xXQzNzTW8xUGN1NFBJTjhmWFVZRENQOVYveVZJOU1EZ0JYQ0h3MkdLUFdVMFA4djJBUWltQUxUYnJ2V0tjbStnRHRObGlPSjMxZEVwMTZNSjNNOXE5Tksyd1JCUmdkZjlBTEs5RHR1R1RQSTdIcHZqYTVFQVUzT280ZytSNlJmSzV4N1Y5WlY2Z1daSWFFWldyZFJKM2NkaTROR092Q011ak9hVkVtUCtvVjlqSFM2c3ZtZEl6OFplcEhidENldlZ4N3RDbWNUcmtyeitDb3UzUTZjWXdHSEJuZUpESjd5RXk5K0g5cWduSlo2ckNzbERjNmhKYkp2N2QwQ1BzVWMxdzYyUjg0OG1BR3dDU1paMUdEbEpJcnNST2FUZkZCVHpVVUJmYTNZdGh0UTdkNWhCKzMwU2NySzdYVlVOSTJaRUpBRk0xZFFHNWF0bCtvZ0t5N3ZRMWJlRjN1cmI1MTRqd1BlMmFhaTBteEVQNHQwL0N1WVpvaEQxTzcwZVZWRFBNNjhDT1pzaUhyT08zajR6M1krSm45UFVaWlNFRmkwV2ZSQmpCaVZaT3lybXpGVzU1WWpXNlJ3RktLMVZEVG91M1REUXc4MEhFSzRTZWJEaFh2UWNBMlorMjZHRWQzWU8wQldpMXR1RFhSQ2hjL1oxWnN3RGRrckVlNkNicDVqS24vWkdNQTdGUGRTUmJCSDcyd0xhQXJYQm9OYjBWZG9HblBWaTB4NUNXTXJnYVl1OVpvdmtUdFU5cDZMR2N0YjJIQzlrWndoeHJYRnpLN0VTK1BXYXdQNUxuOXMrQVQvYWNrdG9lOEVqaFRBMExiakJKVlBnSnIyZWZIUERzZFNidGtVQVFNVkxQZFlidHpsQXVPcEJzZks1YjBjNUtYWlgyZy9kaFkvaHUwRUNvUjZlSnVveXJ4c1NKKzlZNUYybEpDVUpaUGlubnU5K2lyUTV4c1BpUGFzeDRIaEhlMWdlZ3VjUm1QMHVXb1F0VkhOZHdqaXV1VVJFOS9WS3ZKazE3QXVlRFY0TGNrZm56VUNDMWdtU1dJZ25WWWh6L0FkMllPNFFCYVN3S3JNb2xlODI3ODV2NUpsaHJLQU10azJ6OCttWEtzZG9BMG0zVVBwMmEvVTA1eTRjbThRUFpQenFTK2lZM0N2UEdqWVRHc1U2NlZncnNMa3JqckEwVDNCMGdFNFRTUnR1aE9wOVB2b0lUWGp2L1lMK0pOZ0c1N1hEYThXNThsb3NiTTA0M0NvZ0RBcE5tNjRML3cxRWRDMi9GMHFPZVhtblpuQlBrQ1NWY3BhUVpPZExFMkU1cXp6R2xZYWZWZmJDMlhLUGg2cURUOHJ3R2JQY1NUWlpKaERWWTdZUTFZOWdtOXJ3N0ZPNDJVbHhrYVU0bGpQR3ZaamNrUmh3dVRLbndoYWZDbXNBYyt3Rm1YVldqVWpIYmd1Qi9vdVBKaVhwWEFJOTJHelNtb21VbFFpU1JhOGpoWGV4Tzk4MUM5bVVib0ZhSFJNK2gyallnZ20rMmZEVHRkczA1d1NoM3lmRHUrc0tXSFRhSk1QaXBLYi9UeHhyR1ZjMTY0WmpUUW1MSVFrMVFZa1VnSTBuVnVGZXp0aCtrQTZOdlZyRjFGZmJjVmFxZGVIWTdNZ2F2clpWYmU5clhaS1g5K0g2SHJidmVjWW03VGhDWk9RWUxpU0JZb3ZQMXNuZmhKbTBzSWYvZC9kRFdVYjV0ZWVXdnFvTHRPaDF1ZDF2WDhwQ2cwM3YxWEcxRTdlWUpJdStITXRyQjZGcDBGZEpvazV3SUN4TzVIa3dRNEFML2t2RTVBOGlkcUdRRThTVWtLRVBnNDAzNjdXNE0xWjQ4RnoxZkc0aHA4RE5Yd2lzc1k1d2ZSaWdMNmdLZ0hPYmhEQjBDTTNKeEliaXZQUVQxTTU2Yk5ZeURTYUJNRk1kUUVXa3ozUVloaUtCdWVuakYvYmpramM3ZzF4L0pNSmlsUE1xVjEyczZldEltajlNeXo0cXlWRnJsUUMvYzNKYW1WdzVKcHBRZkk2SVlmanRmVWlON1B3N1lIVFppUkgvVSttenJBSHFzdWRqOUd0L1RCaExzM2dPWm53UXI5UDZEaUlrM1p6WDFMR3RHQWpGSUh1eVUxdEJyTGdDYWZBcHEraXNTQ1FqWDhyaC8zNGRvdFR1ZjZsTTVMQ2NwT0pwTFhMb1JBSS8rZG9BMXF6bDh5d1B4NGVXOWwvejV6TVM2b2tyeU92d3A4ZEIxM01WNlRIMmxLWFpQM0ZxU1VXTVdnN2dPR1cxejlyN3ZyOTdIOHA4bjl6SGtRdnE5YnVTZHp0ZEJTcEpMcFlobThLdytMRkgyK3FhQmJOSXZnMjh1MVlKcU9peFRyd1o4cm1IOGdPcm1xM1plSXZnUXVPeVpWNnAyc1pXWlM0MVh3d2ZGMHdwQmZrOEhaL3dEWmUrVnFObmZuMGNXNy9pSERGQTRVL3M2bE5mcm5CbGR6TzhsdXp1TWsyZ0lWQVRGTkQzZ3lrWG1oZmZwS0hiRWFNQnNxbGhhR2M5b1l0c0U2UlpmeWMxQmpCMFFYazNwTEpXZ3FpNjcvOVUvMlpVT0NkNUxzeXRTVm9ZZWNZbVhRaHRSQ2dib2txZEU4dE5BdmtFU3FWM2tHV0lSNFlBdVNPZUQ4UUQ5RlNZa2J2clppTDZubGVyR1UwZDlZZWdMNFdLemZLQTg5clEwQWR5c2FzUTh2ZU1SMEZRMDRrUGNodVNjdlJ1Z0hOSStxTFVxMU5tdHN1WnpoVlFHUDB5V0lWTWsxZ1hzYktjZjl5c0RzVEltdGZWaCtmdXFUNTh2eE5BSHJRdkVrNFpMc3M3Y1lWWjJmOCt3NENEZTNHYkhkNnMwTXJxSHh4Z2wzNklCMUtBa1BjRm5tV2hHTXNrU1BRa0RBaVJ4WW1maGVoanltMWthWW9TcmRsL1ZXV1RtYlNCYkNEamZIbEFpVE5BU09YdEFUdmpYNkJ1VkZYMzJKZE45Y0tQQWJ0MkdMOHNIZlhhNHYydCtkbHZFcWhic1NXT21tTzZBb2R5K25INytVbnBJWHBrSU9XeDY2VnA1ZUJYdHB2dEZwNk1NcTdMdWRiM1BmT3IrQUppTTA3SGw4SEtLbW9OcThvK21rK2JQblFHNGQxRElNTW1OaEQ4SzBhc2RieWgrWFdXYXIyeXpsWE5XL3IyQXRQQ3RkMzY2bXoxbVFYNU1KVGR3eEs5QU05Nm5BbEIwM2gvQ1RleWtQTXl6cndtdmhmTDFnVlJZZzE3dzVwOStDc1ZFOWRGZk0veVA1bDNvWGNrWGhkcjBjYXhza05WSGpxWkNTaXI4ZHZUb095MmlTNWgyN1lLRWtXU2lLRCtGYVh5WkNxZDBoY1JTbEwxWmZ4Z05SVjI2Q0FCbnJzZUt6UURvQXE5bGpaUHI0ZmQ1NFlwTjAzdHJZMFprUkRDcXZOdk4zY2tOYVg5UWc5Y01HTEQrTmppdzl2UjNWT1hhTy9mKytEbmlEeWhSaG13OS9JM2RTdmluZGthYzA1dlFCSjJFUm5GWUhoRDd1Q1NRVzQ3dEd0VU8rcUNneVhzQzcwUTlhTUJQZ3NScmFWR0tzeDZIRGtYUm1wM2REVlk5bzh3M21pTVdObHgyU0wzb1ppS0g4WmI0Zkl1ZzZjblVnQmI0THErWCtSNE5mMFpMR0o1cmpJcXVYY2VUQ0dkVk5PMmh0ckZkSUtnM2JIRXpRZHdWd2Z2SGJ5MkljY0doMnpRSW95endVTHdWc21kMy9pbFRDNkdPVlFlYkpEK01pZnJKRDVHbDEvMktrVGFVODlFMXhwRkJqZkdPUUQ5OW52eWl2OVhUOVBYODJZS0pxUFdpQ2hwL1EyRUtMd3pUdkNsdFpKSTR1L3F6aGx5cWZRUnNyUWJNVnluaWw5Tk1Id3lQSmdYMDkvYUtRbnRmMGVVM0FROTRmUEk5MG9uUHAyYWdyK2FKbG42VnV3MWFBSWN3VXAvZEVSdTBSalFlaDdPSUcwYmYzcC9XcEVUbDFFa2RDSDN4c2VjY3MrT1V6RjB0SCtsTjI4SjFrNU9Uc2tJd3QxT0xGUDVGdVJzZEdTWmZSQnRob1QybFc5UEV2RXA2WHdnUlcva0FZeEVoSVIvL0NvNDh2RXdrNHZjQ3NmZTZha1dJQ2UyQ1h2ZE5WWDhoU0IxVFZCK0ZvR2FRWllZZ0ZVZi9DenZ4a2tFbVpFbXQ2aUxhVHJsdDdaZmxzcjRvdnpwVFFwdldTK0dGRHNuanlCc0tna3IyOE9PanNUT1JpWkdReXdPTkJ4a3M4ZjVxcmNDOWl3M20raVgrR3lTUWpyc2lpdDQyeGlVNjh0MGdQR3BEWGRna1NDVVpMV0U1djZjcmk5QysrTXNzTGt0eHc0UWFtbnQ3NlppZUplUVdtYWt0N0dLTFJFUW11R1l4bmNOR01rTG8wVTVNWGFlMklpZ2ozRkxhUTBpZXZhT3ExTEZsZUpIUElGc1hYOG1ITDlFNjVCNmI1bWljN3dMdjdCZVRRY3M0QWNRdzh6bllkWmw2cTZRbk9VSmxlblRXRWhOOTFob2czY1JIREc5NzQvQVNDMTVHYUhJa0dyZjhKRGxDZGt2bElWTnRRUTFnajgwTjVQUkN2SUdLMkZsZlZKejV1V1JLTUg3S3N1WldkQ3BUWXVMSnhXMDcxd2R2ZmYwUk85eEovc0QzZmgrVW1wYzBGY1JPOURzSUdSUlRjeVkxSnp1RVNEcWlteDhjMzgzTEJvTkxDbUd0U3RtTjlRQm1NMGJHUDZ4dVp5am1oRktFYVA4YjJybmVmbmJyZDA0bGJ5enQ5amwzenhWRUU5Tk9LYk5kMVlaNG91S1dGT3U3OVg2ejR6bGgyY2RvWWFMYTVIRzg5ZGZabzNqTC9RWlpGVU9PeXcxUi9IdTZtUkdicGxFZDlBdXFETUZMKyttVlBYSU9mV1A3akhDdTN5cm5CbEFnMmt6ZXgyZVZIS1hyNE52OUFOZVc2M05hR0pUcDNoeisvd2FETmZJVFR0SUhzQ212SllXL0JVSHZTOS9lcVlrcWJSaGJ3MFZoeGo2ZVJQcmg3MGsxMTBDb25ISnRVdEFFLzF4MURTV0RWa1k4cWoyMjF5anZ3TEFEZDl6bUtFQm5nUy9EdWlMbnBSYS9yMzFQbm9kcFRRMVNkem9EUGdlTVdwNzBEOGpGNkZkRzJJZkNVcWZmUUJtMXMweC9WOXNPa2EwcFV1eWxjd0RZYW1MaFcwM0VSWXkveW9YL1FBNW9hR1A1djh3MXFMUXM4SXh2YWJ4UUt6bXpVcnRDNStUc3lwZXBwOGxYUVNZblpmeHU3NGJnRXpsZGZ3UFp5ZTlpWU1HZm1oTVhuTGIrNDUrVm4rVEhGUXp6YzZpM0dOZUsvR05OKytJTVBEeUF4Vkt6Zm5Iamw1TnBBaUdMVTgzdzdVWGw4VTl5NDg4eTZEN1RuMExQMEw1QTF2dmZEODNkNW9SaHZRaUxIVWZlVm0xZHFhb3g5TU5kME9OeTZ3dE1LWmZmS2FOZWZQMUNqZ2h4ekhRdmo2N2JtU0tjWTNZQ3dVOUlEUW5CUWlXYWlRenRvS2tYQVlodWF3VjYxd3ZrUWxSS3JKcnlsRWhvY0owdGMvMDMzRUFKZVRzaGMzdUJFQi9WYnFDTDUvTXZndUNIb0JmMlNDRDRZTlhHQ1YyWlQxVHpCNkNyZjlETTZEajAxQnY5ZkRBZWk0T25CS2hkUHNFTHRzVi9HZWZHNXliYUhmaU1JQk9iS2RoN1ZvQ092bERHbXhGUCtOaDhSOGFHdE1jT0dIVGVpTEE4M3pSNEp2MDlsT2FybEphMUhPQXJ1VmF1TzJpS25odnJIT2E1cWszYWNWRnlSNnVqa2MwNmZRVE42K2lUM09Wb1U4alIzWERjRFVzOVNwSEZ0cUprRHU5SmUzMXkxa1cyMXVUSUlXNUN1SG9vY2RnU1RJSWx0VUpSa3F3L21Ld0xMbXFORUZvaFBvOEFtL08xZ3c2b1dtMHJ4R2NOcmJ0RUtSTDNtMURIc3NuQytvMGx4LzVhNlVTSk1idDA5R2E4eXBIV2tqbXZDUjNqYWsxVERXbXlYSmE4YzhQL1czaFo0SlZQbFhTTUxtQkNhbmIycnp6WHJVUkovTDh3NnhJa1FWQ3FocVNqRUhKT1VQNm15am9MSzdPMzBldzZqcTlFbGM0VXRXdUc1cW9aNThUbUNrSHdCODFSNjhJZjU3U0VuQnYycTkwa2hQNjMwZEs1REg5NXdQdkJPb09jZEdBVzRxb0o5eUVLWHIrR1FCa2pxKzZZMW1wVlJxRUZZRkZOaHhhZFgwK3VvVWtUYWdRd080R1NHVm0zYWJ6MHU4YWJmRVhQaUVlNUc5VTR3V3dweit3L01LdXBrR0duMFlFWlk2SUtuWldjaFZuaGY3NFRNa0l1a0dHalhPVkRyNG5ubmNSUExGWWltY054N0JlM2NlWnRuUDNwOStkazFuaDZpc3k2L3FDWjRzUG8veXRwMHI4dU1jL0NYNXJFNFNjVEhpaTBVTGhvRFRaMzJabGExL3VOcWZWdHczQTNVSW9yc1d3czZPTHVBTmpBMVVqM1RyOTFYOGRSNlliR2xuWXUyNHV1N1FIaHlnNW91RC9mUTg3ZnhXTUVwdG8wV3MrVFFaZXRXZzJubHFYOWJUaEt4bEM5UUk4VjVGMUM1MC8wZGthWUkzWEVZM0VXLzRZc2Q4ZnNEbHNUT01VMXI5Q1hNelJ3MXU5WWVGdHFTeVY2QWs0UjNNcnB6SXBvNjN1Vm1pTmplTGREYVM1bGtKZ1dBZFJtNUdFQlVMT2p1TWRUYUFJS1JrMFUxb1JjWTRlZjZmbWFnNjZkVXJLM0dwRnFmUS82SkFjaE5ESm9LTjhpcGUzaUxEMkIyRlNicUJhT3gwSmJweGlDUWdUU0F1VU5TUmswZ05DU2toWlVacmNLbHNQcGpsbmljM1VkMFJVMzg2YUFYN2hwTmZZckZvbmF5aU5ld0lydmdNbWI2a09nWTQ3RVAyVUljZUs3cFdLTDBxQU91NFJycmltd1ZML2ZaYXdRZzVYaU1hZWtXaU02d01ML0Y4UWdsM01hNFJNVGVMcjVaZWV2UTZwaEQvbVNXM3o0ZFFsQnliazZocE1KRUE2YlRGaUV2akpsQStSaGlTTjA1TWN1OUZ5V05FejU3MCtERXBML2tvcVVORU0rTjBVcGlVZWJINTBuRzcxb2lJTGM0YmFIenVZZHBWWVpyUW5TMkNnajRlbXhBQ1I3VnVTMWJZTGgraWY4clY2eEFPcFpRK3R2K1RRVTNPbSsyd01pMnp5Y3I0SlZhS1N0bXpBWi9hdlhsbXdqM080cUdZS3RTeEpWSFAvQWF1cElOWDlBRzFPZWNUWkI5eVpaR2VUcjh3ZDZzcTN5OWgrQ2JKdGxnVnZteDh4L1pMNjNSNDFEUUM3RUE0blB0YjByZUdpLzRCUktCaVgxalU2QXVFVmxaMFB6YTI4L3pXWnlub01KNUhKL1pla0pRSlRyeUlYVVgzRWhibDR2aTJZMy9NaWtMcjZRVHBWV1NIZVBsWTVLMGxYR1BhZTFpWlI1OW8vWmVzWW56NjhqM2dVUjBydUxScjQwTVFKbzZkQzRuS3I1c0xIWmlXZXNLbWNDTThTTUZoWWY3YnhsNkxMcWcvS1hPcFRwV2pkUHlXZkNiODhNWW5IMEZSbXZ6ZXlFUE1Xa2dDR1hMdU9uMks2MHNZeWVlN24zczZOK2Q5YjhlaTQ0bFFIbHdOVHhMZ044WUg5RXErM0dqcUt5NDE0Zzd4WlN1dkdLdmh4c2NiZm5sWmVuaEUvOTNQN291ZUxXM2ZOQWY4dE9vcHlMTGt0SWxqYm5JRVl4cUtsOUJLWDc5UVAwOVZrbW1FM1Q0dzlzTE9uVnZFVklPSVBXNFFNQWZDSlh4bVlIVm93ODcrR0VKWGZEMk95VlpyOW40MGdlaURuZkdUcnhES2pZbDc2ZjhJUkJ3azYrMVphbmh1MzVzNEdweUR1Nk5hTUp4WHBrd3BUQVFqcWhreFJxNys5UlJFZk82V2JiUVQ0YWIzaWoxNkgwZWR1MCtvZHNOL2F5TUxiV2k0WHhhYnZvY0tIclB5RlhrNkw5QVBiT3Q2SXlhZTBWN0JSQ3Zzbll3Q3MrOVk1Y09TUjJDVVo2amNDZVZCcElta1JkT3RHQXVWcEdWQTRsQkY5bHhOWTJuVlU4NmVqWVhQMm9XS2ZTKzZFeURZMS9ya3RUZk9HcStsUXZNWm9HM2g4Wk84TWV3eTNpUGNZODZFMTZycUJMMWQ0Y1FEdlpOSWJsaEllaXlnSFQrSzY5YmhrMDdndlhxQnczMlJYQlVLbGN4cUFEQUl6Rm0ydW5iNE44YjBlZ1VoQXdHYkM3emgzRVpZVitEM3YxL3ZBRWxRWFV5QXF2QVVMSVhGQVJkK3RHdFRaU2o2N3FFczNDWVJWYTk1Wk9PZXp1SVNQOUN5NG5mUHVWU2IyNG5uRzZQeW1DV3F6TlJKMHFDUkE1aUtxTGNMcE92NHdWY2QzNXppMUdJbmJJUVVNQ2h3bHdxUXc5TS8yYXhYcEpOR2dNMngrZjIvdlFwbGlrdDF4U0lVeThxRDNjTGdrSjJGMzJ0S2xoYW9jbFNPVVpYNmNFY1hCb0dvRjU2cEprSmdFTDM2QjJrdWNzTVNXTmgvZHFoOHpLZ0lSZ2dLN1Z5ZUJ2NHNJZzNJczVvTG90UUJhT2dPeG9JaW9BYnJPN25qZzN6T2UxT3A1RnpIRjJOYWltVUc5c3NWeUpWTXBEMUpzTTVpSlEvRngvdGRONFlpMzNRWTVPTUo3WitVM2FvdDBOM2xUbGxJYmhXUlplT0o1Ym1leWlvN1FtbHlYZ0N0SmJ6STVwY2R6QSttZlgrTHFXZ1pJUjFYNFJyZUFFQ2tRd1V5MzhMZ29oVE1HUVJSSG5XRDI1dGFRcVRkK0htNURxK3FuN0RmU0UyZVpoMmxDRnk2Sk1iWFBybDFaUStDZloyYmxkbWF5NlRvNDVZK3ljOVFMamFmT1F3K2F3YSt1bkNETUd1Tk5JYUVFWTdjK0daWHVtNWQrTGFBWlJmQ1VaRWsxaUNnZ1FBQ21pWmwxcFE1RVJ0WmtKYlQ0UkpRbmd2V0kybDFudldiTUpNT1A2MFlpNHpad2FLcGE4UFZ0SmVpRjNWUXY4MSsrWTBSbjg2T25QK0VRVC9WM0xPZWxqUFAxR0hQS3VBamU2cS9DdGNieWhOTThEdy9zSmdXc2czNndhT3RVOWN4cnBTQ1N2QTg4aTd5TURpTXVzUTN2K3BLbllBZGdubFlrRUFYYjJUOTR2blE2TXNrKzd0T1ErdXhxS0c5WDN6MXc1bURTNWdNS2xGVnhTM0tBdGR4NEpoeERPT0JwZWV6QlI5ZG5QZG8vUDhGeTJ3STZNaDVKZ3JHdlN6NzY1WnVpTjM5dkNoc3B6ZDRMR0NzQkZvOEloM1IwUytQcUdrNXljWk5lRjVyeHl3OGZtMVNyUjZBSTZCeW02VmN1UjByRExLTHRBSGc4VWRndUxmOEJQWTZ3dFoxVVliblRFYk5qY3JOTmVqUDNMb29EN0wyL0lpMjFqM05hUG9PVm00LzZueVFMVUZ6MW5IL2VQVW9Sb0NVV09HUndvVVVrUFlUS0RuaEpDVkFFRFFYazZaSlluNFVObllLYllYbDVXV1REakRhOG1GWEY4T1A4OGRTa3ZrZkVMZk5qTGoybjg4djdGWndzc1M1bXl3WS9NMVZELzJoaU10ODZMYnRVRG5HYU1mQmtSdlArMFdNUjFwcUx6dzh3U2xoVFJjeC96WUJBdkRtRG8wTjRNVjhoU3RXTDBsVGRLQ001MlNtNUN0Sk5CQWliRWFXWGYvbE9zbXl5SVVSUUVZcHJDU0x5OFRreVRRYUlJaUtRVCtJc3l6MzN1cHJDcUJsaFBVaVhXVVFKT3ViSVhWdG9ZNHJPOUpOUmVHU2hVVzdlV2lML1JBcGU1b2VuQXF1RHJON21xV016dUo0TXRNb20wTnNlYVJLYTkwdUxYRlpTemtnUmpqYzAxTk1kTWtUL1JQNjc5cXBWL2JMSk5HcTJHU0t6RkRacndxbUg5SVhZMVNuMlVKY1pFTEd0QlRkMUhTaU4xSnNVQzBDMUxmYjdEQ0F3ODFyRlpIc1ozb1J6UGdSb2Rxa2x5WHBTbHpFTWExOTVKUnFuc0hxVVJSdlBKeWxQWUtmSzNQSSthWlRidXJHV2kxV1dHMWhtRmVTcTBuR3hxb1lLNXJwdWdOSjJrSkRSV1NEWERHNC9oL2pJeFdEcG4zZGxTTHQ5QVJxUE91bG1TU29XUVBjMk9yYkxZV1h5dER5V2J5dy9OclRKQ294WW4rcFVhWnUreGtxM3pGdW5rcHU2Q2ZsNHEvcWtNa1NVaG4wUXc5T2l4bi91Z2NxWlJYaEVvT05DTU1ZaTVGSVpUQnZ1NWwxNWcxdHJqcjZuOUVGQ2VWREh3SjNLYzVyRnNxVFRLN09yUEJmR3NDUFYxREhnMk5XRUpPaXMrVXRndG9iU21rbEplYXFiYmJwWnZ4SFBCNDZjR0JFRCtpZUZRZ2pNSTVacWFuUUliOTkwWjhzQmVBTkFESllWd0FsRjF0MHV1T2c1aWo5QVhML3JVYVpxaTgvek8xcEVFWmNkbCt5MGJrR2ZieThTTVZmcklsRmd1VjNCUU54akVmaEtDSTZKemtHdHJyWXRsVDNybmZ4cWJMUmNESXZPS3k0bUFHZW1JbU9vZm9xNDd4QXRuK0lYQnZ6T2owYnErekV3Z1lRZmxYSk9KQ3BTaG5UbkdVNjcxR0w2RzJRR2t0KzhrekpvSmhyNDJDS2Irb2daWDJ2SGRFelgyNkprRXhPenVxRXlnWHU3aWFxS3lidXgvS1d4YVp5bWErbUtWckVLdGlvZ1VrWUZ4K1MyWjFTY0VtWWNXaFNzL1RTdzU1QXI2Z3dUMmFNUmhJOU5yenRHblBzNWFIWDhvb2hvV0JZN1FpVStqUzViUjlsME9YUDhiU2hQQkp0YUt0bmxKNThZTlc0TzQwVGtEOFRrZkd0STdtZEt4QU9CL3BQemU4cFl3SlA4Sy9SbXk2dFZXRjIwd1pjWTcyRysrcUtJRkh6SEJZbDVxNFdoYk14ZEM5eHZpZjAxY0wrNlZBM1h6cWlzcnZTOWhSb2lhMVorbDlSYU1IcXdjSHVUNzllMkg1Zk43RDEvVENNcEFyS2xsMWZuejhtWVZoNXdSZ25SNVpQcnViRi9RaTZ1K0IvcThud1c5MzNjRlFEU2tJQWpqRDFUcEpqT3JMcGZya2FBWkZNeGNoNFRpMnp6dnEzeTFUT0dHS1d5ZjlUOGpXRzF6SVNZNFRkZFFJb0FZeHhyZ203Z1Jaek92TTBFUHAvaHljb2oyS0pYeXI2VjJJNWRDbHF2Rjl5UXU1WDdIellZK0tDKzhpdkVjV0diUTQ5U08rNU0wTTdtQlFHQ0FyeDZlVTh2dkVWZGptY1dwbXdYc2dzU1lTcWVQeUwyK2lQam5LY08wN3FiTG5WdGt2YWVFdVM2ZHZTUjgxZ0NjN2lSUWVieWVWT1Fybko3VktXd0FyUmFMYWp4bTgwUmJiUkEyVXR6NVBNL3Y1QXk5RXJWdjBTT01ReVFueWg1VU1JcDNxdW03S3RrQXdyTkpVMGZQVk4yK0w1U3VwSmVFTFpvdTVOR1NpcWlZaXVOb1EwTWVqeWRsSXE3ZlZrNjlRd296bEU3czlhTlRJVlZPU3pBL01LU0w0bXJXWUtVRmhoNkhUR2VxVUExNi9QU3ZWQVhCaVhxMlFQSEhmVjMrQWpGRERtRXpVUTlGSjNZQ2MzalAxQS9hd3VBclR2RDZ4eFpRWjhSZkZrUStQblJpTXgwb21mSHlCdHIvWGxPbytWOU5DZ2NWMURFRW9hYTZmTjhpYkw1bXRSZ1N3bW1SekZBYUp0VzJubkRSZ3dheHZpMlBodTZrME1TL3pkNUxUYW8vYlpGUytWU24zTmh6YWYvS3lVOWFTM2tIY2FOUSt6aUg0dlRGWmlqbmorYm9XVk1relRnZmlwOEFScnprVXBadlorMlRPWDhCT3l1eWthNjVUUkd2NURmQWRPZEhiUkQ0SjhkMitsMUVraEZ0MDBzYkllWmNCcHUwaDRyenVXZytZZCtJYXM1WTJ6cWhKeHVuaGhTdUFSNEFIei9HSGR3Qmw4Z1dSUnJScWMwRDJEV3hoOFYvdEV4VzUvR3EyODB1U0RKaWx5RURxQmMyZldNdXE5V0kxdmVBakpPTGNydU9tUTdTUmR3a2NtK0huSjgwb2Q3NWZDSHhubTE3N3l0ZS9kUkZrajFpY0U3NE9tcU44VTJzM09sSzZLemFZLzJSTWhlaERvOXdGdjF3Y1M2Yy9Za3hNN0laK1VKTFhIUVcyZEpkMENDYkNPY3c2c3dlR0tnT1MzVGk3Unp0Vk1uTG0vZEN4S3NIUFY5V0hhdTBqZktnK1hJcE9qVksrQlNEZ0t1eCs0UU1yN1RtVU5ZWWhRQzRsZTdKbzA4K3YwRXFqTld0RXRZbGVmZm5oQWMyWE9ZZ1dNeDVLWEs3WkJmTm9LRjB0WWNrTUcrV3gyVWZBakZXZng4Y2VEaG96TzJOYXNYUkloRHhTQnh3Q2pObE0zK1FlYVhlY2Yza1FMVjl4Nm4zdm9lQ0pmdTV2SDZJcW5TZlhGQ1B2OGlZZWZ4ZEdhOGttdm9DVm1aazJuUHJOUFFIVG5lT2RYNGc5eGhMbDFJcHZhL3cvSFA5QjF4N3VkUTEweXFxdmtwb0JYbXJsSHBOSG9pU01FQVlMempJeVRhVWlnODlWQ0JHYmJxdENocFpjRVhEaDlQNVMzaE1adXNHdVJhR0ErT1N5M0IwT0RnWXdPcWhob0RkZkRUcmh4WEQxU2hCajdUWS9EUzJHaVprc3BGSkM1aFl6QUxFYlpxdGFRUlpKNHZRbStuT1Zha0l0WXRvOWZDZ1BnT1k5di9TQ0w1eUhIL0gvOXZ3TDBDVjlNb0dUU2RSODRqRVVVL0poSEZKeXdkNFl5Y09XVEZ0RVNSRkcxcThnMGlCTlRKNmQ1ZjVrNmNMLzA5enMyYmRPNFV5cjR3ODBWRVVIUUdvWmhMMzdGTHpBck9GcXJZM0Q5M0lKTEVBbFZOTXNocU5VYngyaWRobGEyUDNHZGZleXJRRG0zYmxXTDJtVEordGV6UTRBRk1pVHJBdXlDb3BhMWVLTi9LN2FKcGpNTU1RY0I3RUdYMWdGZEZDNTZGUlE4bGVHN0pTeEh0VXZ0Z2VWT2xEbWxYYk9VaUE0TE1qTkluQkJkaGNQYUlCWnRtM21CWklYSDEyOE4vZ0lDQWdJQ0FnSUR4L2I3R1A3ZnJndjgzcmQvWjl0VCt6N2hUOXYwdFArMzdHYjluMnBYKzM2WXo5dmROK3owUi96ZW4vbSszMlUvNGZhcDc5dlpIZlo5a3YrLzdaYjluMGt1L2I5b1grejdVei9oOU1iZlYyOGZzOUJ5KzNxWTRmMit1MyszNnpUL1oxYmZzK3V2L00rd1kvYjlERi90K3NJdnAvWEVmN2ZvZzc2dXpPK24zSVgxZEhZRG5WdUNEUUpXV3Q0b1VCS1NJd3pqYy94MnJEdGs4eGVZNEFNVlBGbjRMRHpEWThLVG94dFluaWRLV2crQ1VSbmluZ2tod28xNG5vaVFkVUdUQkk1WDJaRTJhVkFTVzZuZjJ0dFFVSk1MQWNjdDlidmRBeThKd2MwRUgyTU84Wm9kQVZsOXJZUzJwa3pJb2ptVXJPL0lQVjZhOTM2Y0RKTGlFT0ViVXZJTm4wQytlUEl0dnJmVWZ6MlBjVzIxMkVuM29qTGdNV2ZLbVhjcWZtY29LalpZMHdURC9KeDA5SWdVYkhabUpmMy9ZMG1USjFBOFN6dnpxZHIxc3VFNlZaaTNVVnJxTmJOUUhpYjFTaytpc0NRYmNYcGV0eWpUVHo2b2lBYnRsMU83VExBaStTRzVTZm1JWDZOM0J6KzlQYVFSOVVnbzc1L3FrcmlheVlDbVpmNktoWmcvRU5XRmJVWVhtYUJVL1QxRWJiZDRLa3NYQ0ZXd1BmMHE1WjBJb291VENZaUhwcTVVOFVUVXVWejd6YkkzdDFiYWd3ZlFubUI3WEhXRU92N0kwM2pPTzJhWk56cVdhQ2U2emNIRWFLc2x2OTFyZ1JZYlp3YTJaWkt4YlFJUjE2eXkzWnYxWW55ZHhOdjlRZDhrSW93enkwZmlodUdqSEJ4bzVLbndGeEJEOEtQcUlkOUYwWlVJUlFoaXBSODNseUdZc0pTM3h2cDFNTThxSWpRb3IxRk1YdTQrekpsQ2ZsRmM0dEFmZEEzMjZkc0hIRy9IeTRvSmdhY2ttNlFaZzZ1dHFWVkprL1hUL09BWGpKNzJRRmZRNDZjVGNFRU1pOXdVYnBNTVhZK003dVdyZWdLV00vamR1K2xhT1JjZS9CRTNnZEVIUDRJcmhFQVFiK3ptcHduL2VudENjUXZCVWJnMnVvVWw1b0ZtOVpmbGFkMm1OME93NHVQcXIrN015TWljSXJzakpORHVBV0swVGF3QXk2RDVuekZFblhraUhteFZZSUU3NmhxV0ZCTHZKMHNKUTdCc2JQTkJJMjJySlBPNnkrdFo0Nks5MFEyMStZM0tvektWUTFNTm54RmdSN1Qwc0gxOTNEajBDa25TWEZhaHVmalp2WEl2aEhjY05UTHJwMTlQdTBiOGNFVk5xZU9ka3JwSlR2THJ1T1U2R0Fxbk42V0ZlYnI0dk40VGllVVp5K3YyYzhrSVhrTGYwYUd5ZXVyRktORVBINnFiZGNybldYeFAxNkJ0N2pnWURHSkdFSUZiSyt3aEtJcXltcGttWjlFQ0htWjJBNk81amdFcEpDQzkvYjJ6Mms5VUNXWktPYlpsZWYwN0ZrRUM0MlFMUEdkd2h4bnBRc0VDMk5BL2U1R1VtdTF0eGN4L1FwVndKNklpSEF1TUdzUkNxSDl4VllSa0RsakVnSXBqMTYrQk9aN3VEZmFvOUlTajUxUWN4UjZUZ0dveGR3QlVHV21Ld3lOTnVnd1Z1bVBVd3J3MUh1TzVjRkdVTnE5cTE0TWM2a3FZZ0ZBVG1reEpJNWZ3STZkOW1lMnc3cVNxblJTUXE3TTIxemEybEszZWs1MTZQeldPcWpUWlFkRHRSYmNnbkRGMUQzL0FPcEZ2bG1mbENNS1NMSUE0cGFkRzRFczdQRU13Nno4RGRLZm1KMU5tczhlZE9LMmVHWUp4NXY2dlNhdEd6UXZXL3Qrb3RjV0JKK0dLdjFnU2doVWNVUldhbERRNFhiNERvUmFjK3dFM0phNTdja3kyaW1TMzVpNXNZV0J1RFBiMTRSWDhUM01SNDBqKzRYbnVZZXNHUU1KNnhFSjRudmZ5S2xBeEFJeVRmWS82VE8zM3VFNm5pQnVyYnFzMzYyNHQzVEVxbHFIak5GWkZlUEM5U2hZdlk2ODBlc01VeDJpUk9UQlAwWnRzcGhVaWtMd2ExbFJYbUNrS0VWcVdXcm1sT1RpZWtUcllpb29iT09jOURwKzU5STJ3N2pOd3Rpc0tpcTVrTnRHM1JtSjNqbG5mQmEraTZ3bnNvandiYkRCa2xUUFpISU51M094aExyTDRkR3g5QU5OUWNkVjlSaWo0N3EvdGZtZVhCS01IYlp6S0hJUUF2YjlhaUJiTDl0ZG81NCtZY3BWNUF6V0l0cnNkTnhTN0k5eU1abmVzTENSTDZ5dVBNRHBsZjlVVGhqNkJXUXVWdERGTnFHMG1VNGp0YW5nSm9EeDBSNzMvRUNSbFlnbXk3T2U4elZwSlhNbU9yUmVCTy9MMFdoUUt4b3l4QWYxNDZGdFFDcWRNbWYwY21oSGJ5Uk9hb3NvVUpmY1lNekV2Y0xjY1hveUh4SWZORWt2aE9lcngvVWszL1pOaWoyWFNRM01rajArRlMrYkgxbThOR1FDSTZvejNJcTRsUHlNZ1dyL2t2bS9hRkNCWm80MFNOaTJOUEdMTE5OTHVwZEpnNVJvWDR2QU8wZlNmUm56UHEyMkNpbGtRekZIV0ZySXlXWkxuOEIxQ284ZGUyMTRSZUJqVTV3eXFoQ0w5WnFlSlFISzEwbkRzWlpYdWNXYkhleExzS3RqcE0wY1pBKzlOSmEycTAzRUo1cmJZTkxRRE1jMC9leW9MeFFWTnpWcndicVRwT3gvQi9yWUpwV1psa1lqSlpKQzJySzdHWVh3ekt1eGhTZ2JKdFlsbWtTajFPdGM0YldFaFZ5anVkekhFUTZkUXZ0NFhodFVpL1drREh6OXIybTBJUXo2L0lGc0hxRmlPYlFqaVltYkt1NHM1cEliUFgxc01Ta0FjN0cwUXJiZ2lNYWVMRDBqUG50UUh5L1pEUnorZDdFanRtU2tGTXBHR1pjRTBMNnNzSEdSdHF6SCtuSmNsQk1kcTVOa0wvZXJ0bUFZb3FCOUlMNXZFL0Y5SnczakRVamV2akVZK0puTlhXQjVtMXp2Ry9tdk9lOVpRekJublREM0sxTjJUNHNBaU5LMUdVQ3hOcFRLaHJDVXlUYTJzRStUSHhoem5FVjRCajhSZFhpM0pqUFJ1SS9jVDNVbmFVT1p1UHRNbEUzYlJpcWdzNHdmRG93eVgzb0tZeXNiUmowYzVCOGVHYXBCNlRFNFFZR2lUT2NweFZaM2MxVTZnNnhrMmxDV1NhcWplNmhCWEZJWXNqSWl4M1pHZTFwN2hvaFhNYTllNStObXBobmk3TGVWdFhESk45OE45a1FiekV3M0RpK2RTZHBLS0ovd1NUOFZPTldtVVdPVzcyWE5vN3UrTlZHUDgwbmQ3RVhtbHI0bzVjbmErQU1mOUs2Skd1bEpyTEdwWUVIODA3dDdiNC9PeDBMaHlGcjhJYTI3eFRxTGN4QXViL2dVMzBmbjlWV205bW1EbHR2ZXdlREMyanJ5OWZvOWtGZmJvbEdIZGxiQzJnaDV1dnVkRjNFWW4rTEI4dUIvdm50ODV6SGtHMFFsdW84Q0hLaThVeGxiS2dqWVlqellWWGJrbW55YXVVeEhRcGtxYTFjZ1pWQXRwbXl1a21FdUJjekg1TnpJSjRiMjZDdGVPRTFWaGQwUXJ0cUdFWEZpT3NFKzd5STR5bG1JdDY3ZG81SXphRGttYWtXZ3cwTGVCNVd6YXhkb0pmV3RLNGZocFF6c2FueUZqTjVzWmIrTVN2aUJRQ1Q5ck56TzJ3UGg5T1ljZkx0YWhGd25mYTFPREdvc1IvNUlCbHZlY0E5dzR1SHgzTk9vRG1sU1lDRkdHWjIzbEd1SHpONVl1eWNHcXczSEFrQUVpR0JsS2ZwNjJYeTNJSFZKM3BOWW5uMzMxTnhuNHdJMmZubmxaRWVpVFVCVGxxSFdINHh2R1pleW5QTEZEK0NXdmJYZXd5RHBBWHJja1Y4a0hKRkJCc3JuY242U2JZejZFMTNFOHFzcUtJditVVjVFU3hZVEpWNVN5SEhTT1RLNWkwWDNQMDVJMTFZM05iOVhVU214UXBEZjVIcUQyMkJaejIvS3JHVzR0NWROS0RSb2V3K2g1KzBSYnhvOElCSk5lMkJ6SW5sSXpyaVc0Y1pEU2s1Vkdiait2V0xYWEluclY4aE9ZNzZYd1lWUFh1MC92eThWUzJqVnUrNHNqUEJxMUlwMERuZlBIem56SlgvMVdJdndXLzh1bmdBQTcxcWRySFV0NmFHZThCL2ZwanZmZC9PWUtpaHRuR3UwbXRUQkpnZEZnWE9KdzJidWF0UDBXekc4bk5CeE9VUHdZMGRQd0J4VTQ2OHlBQjhKS3k1Y25zeW84YUFvTXk5T2duQjdLUmpJQWovblVuSWloMVVGY2NQTWVucG9pWXZsZU04WGI4RnJWMlBPRXVKN0lKYW1sVVN6eDhkcmR2Ri9QbjU3alNNQk52dW1kMFhaLzR4alE2K2RkYnVFa0xkVUdSc1N4SEFIQlpiVjQycUdvMTJvMFE0em9Cekc4WmhJTHpDVEg0ZnIzejBTeTJpM1V4N2NqUEx0THZJbU9xR01WVzIvTm5wQWpCODBRZnIrOFdkZUNmMVJKaEFvWTlpWVNVemNxNTdiczd2RFFxQm1PMC95aWNIRkYrV1M5T1FNQzJVR3N6aERPQ1ljU1lxcXNTd3NwbmhROE10SWNRaXkvRWdHY1BlcTdkandOTjV6dStzc2MyMU92NkZ2bVliQ3dIY1dielNwdk9GRU83SVRoY0NMV1dXSU1RT3orTVFPM3k3WndpempPSVpDK2FHcEkyRUZEWEIrV3BZOWRvdnFTajV6dHpiMEZheFVJS3puMkEzNGNNR2FsQ1NsMklubTNrK3RpQXowNmFVK0drZHJEWFQ5eVRKd1RGODh3QjY2citqVDUyaHZOVFVibFRRYWE0WDZXQmNDbmZNbEE2c2JrWFVQMXRRVDd0THg4SVNha1g3T09GME01YkR6aGtRajlHL3hNUCtQMVgzRG5iK1YwdWtZTy85R2pwdVhrbG4xNjRka2FuTWNSR2VPYyt1NTBnMUxDVVZlV1B1SldKY0FOSUowcVhua2s1NkNydmUwejFSVnhHUVhmQjJGemZFZVAxNjhSQ2JZb3l6c24xd0dVMWxTSE5GT3pIQytCcXByMFpFSDhKMmFDWjNudEdyUUh4U2dQemtIaExsTFZCWkx6NVFtY05PUSsyZ1hEYlBGQzZZWC8vUk5pUzIwQmg2RE5POW9aQk1sRWh5U09kM0ZSazRHS0hXUVZsZXhHVGFUeFpKRlJFVnR6S2g1c0xTWWVHclhLY3RETTIzYTlIZGZ0VnpKaS9UcEFLSm4zRXhTeStHMTFJV2RjejdDcXRzZXpUUng0c0Y0b2YzcFA1YW1DcGVxZVlrWlBONTJUdVhwTEgyZlhsTzBmeUkzd3RGSDlOOHhudTFkSy90b2F5RXljcGY5TTlxanYwU0lLSHA5ck5sOXVpdVJ0NzJBOFFkSnpqOGNJMHNlZDgybkJFVnE3UEpIQytHZ3plbmk3Q2EwalBwS3pVK1F2NTZSaGRrY3R3VUtzQzhNTWpQakpqMDVUQ21wak5YL3YwZUEwZkRkMU5KTjlIVk82RWFkbFVyTllKL3JibjFRV0JXRHFRUU5HUjhNNWsydFRzRjdRdnFKa1IyNU1JYkZJeWJObXpJc2V4Z0I4eFpVaGdVWWlHNlU1ZXlEVmZqOHo2NGFSN0lqMVYxaHBRVkNPZ0YrUVYzM0RUQ0hrUG9RTzI3d0I5UE1RcFpzdFp1Q2RTUkpRelZQaUpneHFrd3pzNnk2NVVpVWlMVDUyZ1lNRDJDTjlqWU1rTXo3VGhLU2diU3ZjVDZGay9NVVh0ZVYwMGFhSi9pbm5kb1VzNjlRTFNaTFBtb0h6ZEhRdHlDZUpwMHgybWgrK3p0QUpxbUFJeEQ0YU9oMFlaa0YvYUpvbnR4T1V3RWVYc1FLM3Q0ejFRdHFqdVdjUENSb0I3bG5VWjhNLzBMRDlSalp6ZEg2YWU1ZUpKUy9TdFVXQktwNWFQTmdMQk5Ta1pWWUJtckgvaUVOTkUwaDhXYzNhWXc2aWlkSkNnWWJrUzd4d0FhNkVuMDZUSitUd0E2R0RwN2VUU1lyUzFidjNtM1Uwanhyb1pRUENwMmFBeGRoNWN2SjY4SlhoZWRsMndvdDhpT0hRZFRWMkZRck1OeHJFTUgyWkU1engyZFo3RWZNbzBNeDNSUHpna1h4VjU3NS92cnA3dTIyV2hMVTkrRXhlN2FZOFNYRnY5T0pndHRENVgxSDJXQmhZSFNodFlSU2dEc3pvT01hdFhRTlUzbHZ1OTYzUXdpRGZMY1FIYmNuOHYzS2pKNDBBMkdoRm1RaHo1UnVhM1NraWJMWWlXOGJPbDl3dlNqbnVBU3UvZzZZV3RYQlBjM3BNK05rU2FJY0lwSU00RFhnNzdLSjJSSm4vcVgyVFpKakJoOWxwZXRNU0dLM3ZsNWFZS0NsQm1EaGMrUm8xK2Z1cjRWa2l5Zm1Gdno5elNVNTdlaVAzTkdwUit6VWRpZ1lNUVJpZEN3KzF2bkVvdEZPb2padGNGTzQ5VU9UbkFuQjN2c3Y1YnY5eU41QjVubHUxVkdjVUsvbmgwcDBSL3llcEpvOGFPQzh5YitEU29IL3p2aDMrdnN5V3h3VFJOMmtoR1JESGNVVW9odmgzUkpFY2VJTk53SUZmeEhPQkZpb3BjeXVONGlPUTBONjJpK2JncVc1dDMyQWZjaCsrNy96TGJVd1JldnpxVjNIUVNpdTNOL3lvV2hSMUFSODdtOEFtcHEyakFyRzN2U0g1SFFLcGduT1BjdmV2RTQrb3FMdUtUUkpvclB5cGx6bmRiSkFXd2Q3ZTI1dDNRVjRTZWZPa3kvc0E5US9CdHpaYkdZeDNydklYRVJGYXJvT2FhYVg5ZTk5Uk5xYmY4ZGtMbHpTQ0hsNFNJeDhFUEUxc2xoQ3JZL1Vsb216SndLNTRRU0hKdG9UN1VZRnlaZzlrTzV6MHQvcENCNHl4QWtFaTZrSlp6b0t3aHdQWmpEUTdxRVdEVzBrVVZZNHE3NGU4VHhmZDhpWHVETHlzVkVjLzBhcEFtTzE4RW1rd1NRWDdQaUJoQ2N3Zkg3eFhZMlljdmNoRzdjMHowaWh6V1FMcjIwaTdRVDI4c2o5dTEzS0JKNXF3NEtDRG5TTkU3WXhRRkJ3U1MrR095MTQ4eUVsM3JHSFpOaHo0bHA4RHdmUXJrUGJWNFZHWDcrOE5sZDBKUHI4OExrMEFsNC8xWEdPNmVBN2Q0MXBxNHVHR2VxbDc3NGRnS1FrcnZHVlJEWUZ4YmRMWGdqMlJsOUNFUlhKRXJkRC9qVlhmcklYa2xPZzNUSFh2WVZhYzIvMXViblQwTmNRMysvbGprMFlVVkVjWWpoTmRqWkNoSS9aMHpndFJxdzlYTXh1L0c3Y3czcmZLdzQ2bmFDaHNIZzNtWUVSayt4SG92NVVLWHRDY0RRNmdiaFdsaGRhMi9vT09IR0IzUDZBZ1IvaDBTUXpONy9MV2lMcndLUjBDUlk0alBZU2E3cktqVVVERlRvenN2YjZuTUMya3RjMmVLcVZieU9rOFd4MGxKVmw3NC80T1NSY2VHU0JyVnVReTNWSzlZMjJmWXh6WXViV0N2bHBBOXNYZmtkZlpkb3VPVDZDdUdKSUhVNldWZC9KSFJhdTVsWldpc0wxam94Y3NuempnNm1Md3BVR3NOZS9IWGZuZkZOUVJ1VTY5VHFPL1pLWmRLK2phdmU1N0FjZkpPRkRKNGhNV2tZbFE0d2FFTEpKZUthUGE4VVRZUkxVOFlqaWhXVlk2d2VhSmlaZS9oK2Y4VW1CQjlWTEhhL2gzdWhLTi8wV2V6Qko4aFVuVGxma3VRcVVoNGJyeEtvL0lBcHJvRVFkQlJNMWJDZGxtRUF2R0c2WlFVYmpjaWJyRlBQc1IySE9XemFWR2pJQURKVlBjNzd0NXJOTTRKNVc0ZXh0SkF2clZ6TWhBajMyaXpSUmIyOHRFSUxGaGZzVG1CT2FneHpsK2JEUHpPcXhtSGdvWFRHM2hGMXJuMFBJMnZKdjVHYTdBSzhIdVVJcS9GNzVOVlRyRWxHelN4V2RlaVJ6T3FQY1lyQ3BzNDA2Nm1iLzZnSHNpSWdnbzgwZVF6OTQrQXpXaXNMdkxwcHd5MThiNkVhMTFRc3FZZndIQUxscUl1UHpPeUF3NFprT0RoNE02RGtLRTA2VFB6Y0Rud1gvaDRpTElJcjdyVzJEK1RzekZ3QURvSUZmT1NYRzZDTUJmaEM1K3JmMC9Hdm9NZFphaHNiUFdVM3orWU14aHFGaVU1di8yQXZhRFVUU2JSTlIzY0c1eEd2RlA2RVRPSmVxQ3hxQ1piK2xZczNIY0ZnL0N5WHVERkdZSTVuSk1wWFltQ0lTMENSL1kyc2dsbHgybUtzaW9VOWYzeHhrb1BVV0J0a2l2L1EyUXd4cWRqaFZ1UWRXZ2N6RlFTOG01S1YzZHpTUGwyVkZWOGpIdTFESzJMYlA0TkZOUkZFaEJrUTdONEh1b1FNWDhiV1Q2RUlEc0tIazVtbjNmTGwxUTdoNEdmK3pidWljZTVOUDErNWw3bnl6MEU3T2MzTWJQK1JXazQ5b1dyR0FvZmZPd0ZING0wSGhQZUVpY2lZdE9BU1BYQ0tsakRWZkloaHNlMkwzV1NycC90WlFrTmtrNkcrMytPTlBTZ3BnNEF0WWU0bXloUHRaai9GSzJOZEVaZmVzRjhKT25iQ2xmdStoK1VKNml0YlkrSVliRnpVckZGQnZ5cnRUdmhhdG45S0V0ZWxxZVBqVG91cWJNTlVnNmNFWGlhbzB5SmVpa3p6V1FWdDQ2cmlwcmRHWitLNkNSbmx1ZVNVd2ZxcG1UMjYrN3VoREJsUkF2NEJjYndBWEMxdkx2RlBHUi90bysxamZCa2FzQ3FwT1lvZjZob0VLZlpETDlRcXdQZUhOMytPTXlVeUVKWXpKUi9HUTYwSGJCY2FQMGtrRGpucjFsNmxvbFNtTk0vd3ZqVWg3NEhoMjA1TFJnenk5UFc4WW5nZDgyZUhnWDEwZk96R05GTHBhc2xSUWtHZ25DdnBOK3l4UTROaTZwZGYrcU9OMVRPdWJJWkpwcS9ScEFyNVlUd25SZ1NCRVd2ZTgvb2N6YmYvMHNySkM1NnUwYmJKNHlZWDlFSk5MRnUxZzhnNXpieGowRTFlVk1FdHh6OTNZaEJhdFhFaHRjK3JsQ2RFNE45QVkyRTNSczhMSkVtd2pIN05xQVJNdTZ0YjF5UWNOWHpCKzVBY3NXTExYamdhNkQ0SmZGeFlLT1QrQStmNUNGL0dUTFNGYW1iQ0ltWlFuR2JING81WmZadEozaW9JZW85dThwTHYxTHg0N2M2L3JrY1d6RnVWU09NT2l1ZDdzLy9KSVYvS3dMR0p2VnpTTEJXY0pRemQydmtHd1AyQW1oVm1BOEwxaUgyYlVFQ0E2elFLTTVJVUYwcGFqbGgxT0o0cXVHRjErVDg4L1oyYW4yK0E3OFlmK20yc3ZoOW9lN0VtNHpUSitrRUl5aG8xaGE0M2liUGd2dVFuTG91SmpHcmk5Q3NpQi9iOG5UaGZSMDNOWjh6eHEyNVFacXVMTGFCVXVJWTAzZlZPRlhoc2FLOHNPNzRVSVd6bUlTdUJvamhyTHJ2Wjc5MHpldW8vaW1pYWM3V3RpNVNyZVkrYVc3WlU2ODc5OHRBM3dVcW5abEJGNlhndndDOFB3WnNHM1VGMC9lSy8zYXZTcC92MTNIRUY4RFNvOUt2YVZBR1ExbUZYVUlKRTRZbzBFUnZKc3VCemthdmxhY25yY1VNRlhKYjR3YVVNTDcvRHdnZWo1cWhDdHVtU1daM2dNRnFaRVFLMHVPdHI3bFhndlZGcThSa3oxMnNGU215Zm9RbmxuZWlicFNLYWNma1ZsWXpMMXRDdXdxdDI0RGNGdmlKV1MwQzlRQ2FzZmNvdkhyaXU1M2YvSGhSUG15bEsrZU1FREg0d0RKdURvakoveHpoUk00bXNBeHpxYjNLVjRlZEpGSnZqcU4zMGVWdGIrQmY5ODRaeXFrV3oyZERUMjdHL3o3Tk5Tc1ZKQVV1aUprWVF6VWFCck1HL0FoTDcyNnFZbUlJLzJlQWVwbTNZdTFQV3pDMVBoZWFjVkVXc3p0VFlMd1hlbkNPRXdCMDhTTGlRSnUxdnY4MkJNTUFFcVpyajBSVExpZ203OVpDZXJWWFhWbHFyMGNRdWJJTm9HY0lySWIwUncrY1kyRTE4TmNPd1pwNWRndTJ4VndiaE5sY3YxaU95TTJmWlFVVEVWQzBmampFNlZDZHlyeTRLVTV0eXVkNnF0cXp6bXViNHNXZUFKMGxoZkd2dUFvMW9yL3NuTjJRbmtveE4zTC9PYlpRU2s5cGhEWVAybFU2KzE1UUQrVkZSekpsbE00N1FHNVRTRGVmYVV1VnBsb2RrQ3hEa0toRy9HSWlCSmYxMUlZL1d5YkloMEptT2ZyVjBaZ3R6ZE92cHowNFBaYUk5Y1JJeEVWNlY4OGUveEhKbzlDdnNjd29aa3VmRHNSOWd3SHdhajg1MGE5SExxMmZvOWRxeHoyZmFtTjRkUVNqMXZuOGdzQWpjdFB2bzVjaE1CQUgzQmE4ejdlMFd3R2xkWmhOcEdlN0ZkVnJDWmtlUzNYMEJoUkNKYlJZaTF5UExEZnB1aWQ1dW5vUWE5blg4Z3R1VXRaVlcxS2NpWmd4Rkw4VWptKzFheHRhdHJaU2R3U01rWFN5ZDhSdjBZaGhxWjQ3US80V1JORVBZbUREV0FCT3JZRVc0SDJzQWR0VXlCdEVxcUdvVFgwODhOQVVlcC9BTUJGUVVpQ2oxV2tLVzluYmtCbURvUHhSQ00zN0lmNUY2djdwc0hBK0l6WVF0Ymp2c3U5NENYaU9XNVZiYmpoT0xDOVgrdWVET1Z3QUlkUlNXK0NTQmJPTjBSK0MvRENhZlIyS3I0QnlrK0VZQXRRZ3p5bW5Sd01sVnpOTGMzYytRUnd6eHlpT0JwZmZlT0tJNlBGNUp5Yi9NaGhXN1h0UGkvODhYMVZCdlFlaWc5ODdOdlRtR3BtRVJmTm5sbTJLUDdVdlUvczZKeTFET1hVZWNyT3d4WkNoTzlCcFBLZXVrbVVHV3BOSnQ1akZNcFprYlVqQU9FU3VxUG00c0F6SklYSmdrNmlLWTN4S1lmWlhkMjRSdjR2Z0lLMWZyaGl6NVl6eVc1bXdOMjlGMlR1a2psbFljZE1ka3BQM0lSbXlqTG9qbGtxMDJwK242TStCMzZvSStOa1JkTUZHZXBZUTVHYmQwWjFjUGc1c0E1Qzh4cjFmOEhkenJRZnhrWHNQZmlJVjVuL3Vmemx3WW9ENTVCSkhSTUYxUS9BcWxDWm4rZWlTRDdpTTMyanp0ZVVSQktRK3pFWnRseHhqbkJ6ajBydVRxVHZXUDJBaTN4TlpqU3ZUMkZzenhEa0Q2Uy9ETXUzSHE3WUF0R3FFS2ZUakR2T1E3VE0xL0xBY1lqYW5qNlMxRHoxQnF6dFlKRkM5SUt3eXJrTUo0VmZUK2o2aWk0WTdDZGY2b3diN25KTVd1TEdsS2U0MCtjbWs1bG1oSjJ3T1JtaDNqQjV1S3krSVhlUXpTUlVrMGZLakNjWGNCMUl5MFVhS3lPK29jU2ZlcytBTFRaNTdKY1NzVDB1bU1RVy9VVUZ2UDBvODFwYzFQTnN4YXVHWFBzN3Y2bHpSRVRNS3Q3WTVmZ1Ryb0NacUc4NFZjUHMwbzgyNDdQVisxOWlTU0FqaEIyWm56aWZOS0hyY0UxQ29VM092UzBJalJtM3lLcFZ3RnRPWVY2V0swMEo0cDMzT0JISmN4V3JiK3o4OGFMRWlVS252b3ZHQ3BXdFNGYzAzUkdZRE15bFlmUXpsK25QMk5pbDMxdHRvekFBOE5YOVBVdEN1ekdDMlhtYmNXam9pMjRDb2liMVJkMG1maFROWm9rWFlKajlnclJRV3lqRXhiejl1eG1nekc0RER3OXNZcVI0MjBaVGR1Y3Y3VGUrcnBEUU1HMFoxODRsTWg5Rjc5RkpKZy9DcTdscVJ4aXp3SXg3b2FEK0dpV3Uyai9aTGU5c3NaWW44eDJMT29MY2pOOGxNWUE5b0lCOVBKOTJ0OFFiZVA4ZWtJRzRvZWgxZXU2SDRBZmRXc0RQUmM2dnhqcEwwUTJIRDFVN1VZTGl6QTNTQmVJOGRMTU1BWXhwRDZQb1k3akFWU1hWdmFOYjRMRkN6eXhUNUczZFkzWjR6QkZpK0NYTm1hZ1BtM2g3d2pRRDZhMVpYSVM4WnpBM0ppU2pzcjdnYkxXd0dlRkNmenh3WGE1OFpXVDM1bmE0S29ldk5kLzZCem5uZzIreGxOc1FOVUJWc3hwdDRkVlJNcFAyaUYxSkM5QjhtMzBHbkZBN3RnbE5BZExUcEt3SjUzemt0N2hJNUxabTRKd0hiL2Z3QlZRZzJ4SXNDclJydW1QZE1mVVpPdkFZYWxIbDVUeW1vUHI0Q3lRTEYzRS8zcEhyOEdSbnNmY21Md3diVDZwTDJoVWlwVHBZZ05RcVhtVkZXV0NyclpjNFJpOHRkeGtnQVBOeVI2c25SRDcvL2VMMlRHNU8zUUoxK09RSzJaVGxrS0xUR05UWDR3b0EzaXpJQnhNcjNVYXNVVkxyZ1AxQVh0Ylc4NzdJZDhrb1pTYnB5UFgzbXJWQkU1YmZ2b29WUW1KVWZLSWdKUHpwVWM1VDFDbk0zelhLajV0UWNLMDF1bmNTK2xTRDB0S2hBYWRwQWlSV2xEMkdGUEhBVElwM1lHdHVybjk0cDNCNlV6VW5mZEVMMEprWFZTVG1vNGNuYTdMTFF3NFY0NFJCbWFlbkRaZ09GYTlGUkNhdktJRFg4U2tuS3hzSkNKMGd0OEFYQ29hK0RYRTVrZmltTkJLRlh0ZSthSHoxM1RBUEV2RzY1N1ZRU3hNUXhKSlhBOWN0enBIemZjWXBQdmRhZWozMUFOTGdZdmsyQVRRWnRLZTBWYjg2UWoxQUduRzViZDZMdFVFZzVOMTFZeVRLZTlDaGwrTmI5WU8zcFdiU2RsRXJLMG9HTUdtTkNQZFg5RXRpcmU2dmNVTEs3VFlnK1NIcHpNcFlaUUdzWUdmVzE4eUQyNDBBa3FLbWYvUGJVVzJxejJJbWN4b0UvNjFuTWVuQ3l5SmZmMGlxdDN3L3NjQ1lUWjM1RTE3TU1xOW42Y2dic0d2VFQ0S3cyNXFqMEwwUE5jd1hQcUQzZ2QvTThNNGpBY1RhUEgwWGpsK1JFQVZxcDdMd0M4ZzVrYTFnWHovQ29KeExveGpQd3ZVR1p6aTl2bmF2MFl0RUpxSjdHMktLanpyTkpDM25vNnJNRVpBT3hjcXJkRVpxSEJNZFNZSGJPM2s4U2h4NlFFRklVWks5ZGM3MllrQ3ZDdEV2TWlhMXlKY3NMMkVacTE2Q2ZvRnREcDBxbXVrZE9uOVI3OGN4R3k3SXhIb25CT1E0T0tuYXV2YXJmeGVpUHpXcm92M2VHRlFmenVTQkUyU3pQbFVlQTJ4dVpxelJ2VS9uNVZ5QUdweE9WcUtIQ2JNS3I0RXM3ZlI3OUhoeFVlYkxUVE1pa3FyL3FHVXZmZ3BjLzluMHpyTTI3bkpvcFhRS2xDa0hpZGY0QnZLaUdsaGVqTDc1SHJLZHhkOXRMU1VzdmczWHk4QlR1bEFkQnU1K0ZxRmlZR1o2UjQ2R3R6ekl4djRES0x2M242MFYyQVN1L3gvaE9tU29IeHFQTC9NOEg3Q1VUYk9jMjdsd1JjSng3eGsrNFFyQURtM0cxUCtjVThmOElOL1dhc05tNXlDNVVUQjBKSE1uMWovK0hkMldBRU9HT1lUL2RWY0tJVmJpdlRMZXFYak5sQjFpSnJheUNvWDZ0TU1oOWRzUWNRQVpieXdWWjArQ3lQalU3NVBFSXAvTnN0NUNyZWhKMTV6U0dwanZqczBvbGxNNytIcUIzTjIzYVJORWtIZXRsdFlkbmhibGNFY2FZUjY1cFd0bTM1b2U3dk1Qd0s4VWZDWk1FRmE4c1hjbUZ1MDU2d0x6eXE0WnhWVGRrSGc0Z3FBS0N3U1pERDZzSEhlcEc5SHAzeTV6aEl5UWxpZkJ0dEpOQnlzL2tmNzltdTRsb01pdzhpUVFCY1hxUDlQbXZTbTVRTDJ0UzMwK2pYNzhPc3Q0RW5XaEN3MWxZTXdBY0VhQW5wM1lMY3lJL09nejVWSDdwd1hFOTRDQlNNaElXYzY0a05GUHZXL2o3WktCUklBTlB2WERaQ2Fpd09hNStsUmprclZNd1ExbGJjYmZWQlFwbE9EQjMrSDB6SkZuVi8yZkJreEFNNWprYm1UV0pkY0JPYTFoanVrQUxzdVlmNDB0NzlheGlUN2hDUm5kaExzUHUrN0VPemt4MlU2WG4zWWFxUE8vclVkdFZMSld5STZOVmVsMU9XNWZVWVRXdTNBa3pVVkZTQ1RoV3N3NGwzaFpUalkyakdVamEreFRuQlNNYXVpWVJvZTJ5YU1LRTNmSTBNTUM4Q015NnFVNHBTUHloaTlhNnl1Z2MvTmdHV0FST0VnSWRJak9MRmhBVEU5aEJPTkVJTDRNVHNEczBsdHN1dVJ0cENzVGRHTVVRbkUyQzhpNWFrNWt4cERKK2llSEVVVGp2Z3RnaXJjMUMxY0x5VVNNMnlTaFYwQThIa2djZVFyUXQ2ZHNNSWs4eWJCRVhsL2hCYjZuZDY4N2dhWXVRNWtlTkpmS0ZkbjdXTUIwQy9aYUl3TkVVRi9IVlBoSTh6bWIybCtPQVJkM09oUWY2Uk5DdWJwY0ZZaWY4MzVpSnA3RUxhTE45ZktHTHdzTk9jWGFWaVQ4Q0V3NUlxbitnK1orc3E2b3BtK3RzNU1jcDE1Z1ZqaHRmTThVS1hLVEt6djQzTUN3clB6djBGWmNzYWdST2dNdlI2YzJqRTlyL2U3anYwVFkydnlTSWZvbUlzVG9wd1NoSTAvTE9jQUs5dk1ReUl2bkNEcGFIblQ2czFOaXcxd2QxM2FJdmszcEpncmpPUjNNSFBpcmJVSjM3akkwMGRhOWkzOERPWVV3S2VXUXZQT2hucHpwL1JUT2RSY1Qrbi84QkxRVU9FNUNKeDNSOVdWVTNpbkxkWCt3U0ozbEczTE5wanNkY0pvSzU3YWpIZE9DYTNnMGNTZGF3V3AwSXlzRHZoVWsrVlZnMW5pRVpqVUZyZjNtWnNtVTJvMmdsMFZORDVHKzNNR1QvV0NZYWZtdW5abldwTEMrcEtxUjRneWpQTTYrNm5XOVNkZ1JvODFEL2JjS0JRUVVGSnZZd1hWb1g4VUttNzRWMTdaNmlEc0M1dVRzZGIwQ1dlUHNkbXAvNEptSWVROHRvSjFrRE5rZEQ0QVNucUVrM2twaG5OZEhaWkJLOGo0WjU4RnRqem1UclZmZ1hxUjlUNnNHSWI3V3BTdkdYK0FJMmJPVzQxMGZRVWNjUnRUcFFOVzl2VU1WblhISXFZT2EwWnBvUlN6T25UM0VlRnZtaWxOanhjb1kva0FMT0F4aEk1QmV0NVRncXkyTHRCUGlVYnQwNHhweXU2MjZ6Q3VhbWlQQngzREljMjlocVZITFVYZHZ1U3hLeERNWjRyd3hIWEkrTlc5TlJabUNvelozenFUK2VBYXRvRGM0ak5WTzZWdmdSYzcwdi9xUVBpU20rZE1kY3VzNzVrSzBKOUt1V2d6aTBtODZycVZHekYvcXpXTU1iVDB3TGVqa1U2U2ZoZ3p3ZTB2d3JaMmNyTXMvRlR5NVFjNFlDbysvdTZmdVVpbWZmQ2d6NlRmNExrYTFJdGhkeDJ2REpxeGJja2dWQnhydnRvM0c3dWsvdVh2ZVVKM2V1OWZGa3ZMQ2xNUkJ5ZEU2Y2NhaVVPc01DaE9EUlFhQnAvMHVDVG80TXZwMFY2YnN2a0hKNGZhS1RUKzhXbXpOL29mMGk0RGlVUi9uSENPODdMR0Q2VmpmdmtIcUx2LzdiV2ZYZHo5OUY4djIrQXFiQkhPNnhwNWhwYXRkZFZVek1DTlRBMHl1VmZQcFNwL0E1S0FlRGh4N3NxdTBQNFVnVVF4bmxGQmlxZWZkS0drNkdza0RsMXk5STc0cUdKYmdMS3VWVGI5L2NyTlVqMDZCMWgzcTlqaDhyU21xcU02a3dTVW00RkEySHAzdldNbzg1RE5TS1NUbDcwY2wreUpsM2NVZS83bDh4Z1lLWmN1eG5paTRDUGc1Y3B3NTdKVFAvRXRCSW9mbG5QVGc5V3ZBdnQ1c2VzSkhYeFlxM0gyQ1owUWw0eFh3WEM1RDJVaXcrR3YyTGtveERCTzVrNlNTNHAvdTFtNWhFZzJpUEo4TFRxb21pVDlUYlpINTJ4eVhFdGpBRVVab3dlQ0VuMTBXZ094Z05nUDAvdUpaM3BWWUxOdWFkMU9jQW12NUtKQTQ0ajFIWDFHQkd0dEYzN1BTRnFPYzc4ejkvYVI1bFJrNUhTdSsvbTVUY3V1VXo2NXRFbkFaeTA0TW5DTjAwd3d3eVFoY2gxcURzYjdJYXpUa01xWDdNa0lPN3gzTGJiQldrOVQzS0JId05xR2pKSTJkU1kxNFhBcFhXMDlTc00zTmhSV3RybWVRR1dOMHJGL0RmWEdVQnpPM1ZQcmlLVEVlb3FUVU15U1doQUhPaEF0SkVWZ1dVR2NpckpPMnl4dkU4UXliMEx3a0ZhMEJlaFp1RHdlMTBUTVlPRHZuckdMcC9uUFhpZ3FzUmQ1QWNlUWVieXF3MXFkQ0ZlcFdSWDhkZDl2dXBueUs5dFo4UDRmQmlldjdyZXFHTG9MZFRwekk1YXJwb1ArREFWalZSWGhiN3NrbENjUStaZUdsQXlBWnFQMEU0bUNkc2NxYitUa1RZVm8wVWZscG9UbmZNNXhHNjgxWXVqMTdlNnBHUU1CTHN6SC9Ub1RLVlAyWEZqOUFvcy83aDZSeUpjcUFjd3FsYWFxSGwyc0VTc1JSQkcrOUhUUVRkRGEyR1lFWkVQSmwrY2NGaUxnQ25aclNMQ095WVBDaTAvRWovVWR0cVVVczZUcFhPYW1nbjBoWjB5SkQ4NHh3RzMrZFJkaEV5NmVuNTlvU0c0SGlKczV6UUd2ZTNRNVNsbEdlNU8zdUFZcmlxdExoV21VZFM5dkEzNU0wNlpTcG5WTGVMeG54aTVpMzY0ay95eTVGc2hLbkxhVGM2TEYwWXowL0xib2NDZWhWSkxOYndiSk1jVEtSOWxlVzF3SHVhdWFkMUp2NHUwOGlUKzFDckY1MGRQNjVVVEVuTWxzYmdvYnpobWEyVFRWazM5SStreWpTWWtzZ1JPM0JCUDdDY3JKTGhmYjEydDE4ZmdRYkY3cVFIYmZSMzZhVHBVQ2NQSkh5OTZ0S1lwM1J3YUhCNk5ma0pseG1tNUk5dEoxb2ZTZU9sK1VLMm9HYnFuODMzR1R6L1FPNVQyRjBmd0JjSjdvWWhoc0VwNHp2OHMzU1BacSsxZFo3OFc4RzRiL0JnRkdMSUVQZWo1UVNDOHBQdEQ2NnR1ZDZxRzVERVhYbmlaY25KRVlWR3B5elVQMDFUdFN4SzVNKzdmaFYzQUtrdmg1Lys0SEtVMXNkQlVsZzAyTVNTdDUvNU1HQ2lucElZMERXendpYVdYOU1wTUQyT3VTdXk3clZYZUh6ZWVmRzNsdWl3Y2ErcTJyM0xFTE43USt6NkVOcTZLMDg3K0hzZm10WEJUcVIyNFBwbEVGTmFPMVh3VW42c2Z3aDU4L2RKbCtnbmkwaVBRS1JwazU3dW8vR2tRUGhLb0hEU09wMm1KUjZOT0Jzc0tIcmxHT05aQVV1cTZzb0p4TjFhSlRsYk5uZkN4SGhlRGI0S29jL1ZXTGhocEJLY1gxMmpTaHlZU1VMMzRSTTVxa1pGWWpBdUViUmluc20rR1VoOFhHM0NRTks1OVVNTEJiNEVhY1Y4bXJSaG1Hb1RFTzV1RWxLVzFMd2tJQUczZ0VPSFdGdXgxTm1YenRxelhuYTZ6K3FtdlhqeWk3N21wL1c5YzQ4ZDYwRlR4UjFKTlRQNjNaSTNDV21zWGZVUTlJdlF3VE1jWkEzbG8rQkJTQkFVeUthYmdxc1Z6amNOd2MyZnNXa1ZlVHFNTVRrTUdDcUF5L1c5bmlkOCt3eTFBd0QxS0Z5UXFuSkJQUWd3OWMzRmZRUkR5d0ZLTjl6bDdaeFhSaDlxVmVuSTNwUkpoSWI0Nm8vVDRubkwxcnE3d2F5U3RDYm9tem8xa0krdFJ3dWZBUTQvdDFJamlidEhaeFlBWWYzcXMxVURBNXR6U3VxRUFWUGx3QlRGckE3WGFyNWhIT3N5dlRXVU0yczI2a2xZeUpEaFZZdTR5Qk15Tkk1ZXZpUVk1VC9EZkpWRkFwMUZHc3l3anhIN2x2VHd6T1o3R0hUbnRyajJXTlNjRnJIV0RFM2M5K3o3WXNTbWwxcEtMS1pBVitQL2ZxdnNGT2IrUEpGVU90S2VVcktUUEFqczdKakVmWlIvK3pxNDNoSi9WdDN4SlBMbHduZXMxUm1MdXpQdXJZSHE4dmlaMzVPbDNEZnIwd0xENTA1RWdZV0hPM3gxenlJcjJmaXU2REVHR3RXTHZoK01jMFhxbTNOQVo1QmczamdlSHNKSTUxV0pzZEhPRUhNc2piYzZneEZXVWdFZGthVzZjMy9Ldk1OdWlPOU4yV3FVYzE2aDRvQVMzRy9YRlJEVC9lY1NFUHplOEVMSkVsQVFvVWMzemtlMFZaMGVyZFExY1NpZFFUUnl5aUdBM1JoTkRyaVVkZXdRU3BiUGIvc2VYUHBnL0E3SGNxTnBSdkxOZ3Q1RnZBVzR5R0pHTzNjZHQxVEtUNXBOQ2VGUno5aWJPQm5yaHFCREpNOXVLTVpGL3hTNEljbUZnR2JTcE51NjhFYnRFeTFqRmJVWCtjS1hxdEcyZ0hkUjkzaEpOcDRXWC9OR0diWWJrM3lXYTFRNURsbC9DUnl5anUyLzJXdEJjTm5yaXQ0K3AwOGlQcFQyckRaSllJT056Q2Zva0dTOUp4bHpic1d3VFJlQVBvaDhjWGV5VGRyRmhNK3Mvb3c4RHJib0lzVjRyektvSW04SXFqbm1pMlcwT2tyaVIwVEhwRDZoZXlMcG9rMzB2ajJRNmdETHA3UVArVDlTM3FUbXVaUWxmRFlaWTU4VUdOaDBGZjVtdk9FbXFta2hpNThMdE1rOEFCWjhDdWsrMVdYNkhOWmJvU0FSellkUktWRWxOT2RIVk1OMm5vS0dTREp2cHJkTEtSMGp4aVBHb2tXV2V1SUtmNko1VXFTWTlVSXNzU0swUFJ0eXBTRjVYeXlsWVQzWGQxQ1FQbUFOOHRoaGNtODUxeFRLbnRVbUx0NXd2WGE5VzlEdzUxVHM0L0tKVSthM3RoUFBrTnkwTjcvUFJDYTcvM1kxWmZyMktBalRXR1pxVXdsQjcxRlZBajdURFlXMjIyL1pKTytKcGVYdWs3TmpKSDJXOUZLWnhrTHhoL3NES2Z0WFRuK2Q3a0tIeDlyMUtoOFk3UUwyMDB1MklKTmJxcnpycE5xS3BCR1NXcW1SZDUzcjlMYlo2ekU4N05oMGlsd2NQaUovbGprdzk2VzdybkNNWTNnWEJveWZJeEYyMzFpRGJweEp2VW13RjhMalR1WFlyVVQ0WjhzTzljaUQ5aXMxVzlaNTRBYkczd1BtWVZ4RkEzcWE3a0ZNQS9TVlB0dDFUMWc2d3BTRmQyRndxc3BoYWxWdlpteFJwVjJsZEpwdTdCTXR3TTMwUGoveU94Mkh3SUg3YVBLUW1jMEZNTWMzYkVxVW1DWWp4d0EzT2MwY0NaZTRlSmE2VDlaaTdtbmhRWUU2QlV5YnYvZnRoZW1makhjcUJUTzlrQUthVlVabjBINnFQNHRZQWhRQVhJRUVMaGwxUlF1ekFaMFVSY3FUMUgzYXl1d05TQkN5clBYWnBneU5EdW9RbVJ6MC9DV1ZTSkxaWnVnOTVZNGRzRC9ucHZuY1B0V05GaWxEZnhXQnJXSHFVbUlCcS9RUTFmUE1qRWpsSDV0UjJORUpmMXdnbXpBZ042Smp3eU5aelJuT0p2aU0reHUyL3p3YVpIdThUazRCaXJmOU9WclRCanVyU1d5WlVJY1J1TTlEM0FuTGdBaFArMXhVRjJMSWhmazZGUkZzd0xOQk5Mb05VQ3ZNbUgrWkF0cVF4Y3VoOWZQQ2pDMXAwdW9HaUdrT0N6d2Z2SE5OaHRsSkh6VGMxZ2hhZkpIVklBMlo3U1YrQVhrUWtEbkpBajBXbXdmRzVINDFNTS9WN2RqTUEydWl6TXlYaUJ4cFFBazhVTFMrbm9CQWdxVkIwVmNRQ3pDWG1FRk1kYWpST0tiOFNHV0p5QnErdWc3RGJKekpZUXRwc1E3Ujd3aEtxaVdBM09YTDJXYTBGWFBHV2Fxa1VTbGRHTlJsMmZiTGdFVlU0V2xRaHRxcG4wVzZ2RDgrdVVkdEpHMCt6cVpYWFpDRnZpcHE3SGlpRHNNYVJzVE1XTTZNc0ZMUnpFSjFqbjZKTzhWWjhYQzJFcFpOSDRDVjYwclRLZlRMOTNuQzYxNFRKZUVBNnNjSkw1TzBZODBweVVHeitWYm50N1VnTVV1WnZJcDRWWnp0RWFIZ3RBYUNyQ0JWalFJY2F5ZzlaZkd4SmpaWUtYekJQTkczVmlWZDlEcjRRZ1NwTnVQOEkzc3J1YWdKT2hkS3RxcXhtSEpiZEZYRCtlUmNwanZCdlZ0UHB2ZEVjOXV3Q0E5V2FWRSt6bHNzR1RiYkYwK2FSZnY5WlA3WW14RGQ1SGZyVHlnbVg3M1FUTnpNeDBIWE1XVGtyZHQ1RDhlUjBhUytMUkdMMEtvQ1FFcit3QlNTUlNYczB1cytYYWtCK0pydkhmVmVORWpxaEw4U2FKMVZXYTM0MWQrUmtYc2FNVE82ZXd3QjVYNVdGR2lRTWlSZjBkVHd1eWpYclhCZ2xKL1FxczBiUjhWMzA0MWN0YWtaeGMyOXNrd2ZUaGhqem1QbjRDaEgyNHRqVjZBbEkyaGcxVm1WMitSUFg4cGVXZkRaNCtRYUlIc1ppT2hKZnNNbHp6QkMwY3lmRXBFa0N3U2xHQVFXUXQrSldLYXJKVmhtcHZnS1Btd0ZTK0hpNzBtRmQ5eFVXSUtrZFoyM1VCWkJIZTVsd1N1Q0NodFI4aVgyV2FHTUFWYitKMERmcUQwZC8zdjROSXg0THQ5N3NvTGZNbkpLTDlqbExCRzlWczBGTEJvREpSU0tWN3hDK1NSOWVvQ29HK0libmVuQ2ZaUllrdlI4bmZTMW5aQmI2VnBUelZVb2pQcmljZUpiUHQ0NHB1RXdTdUsyL3J0MTV0MGZZdG9zVFIvZU5LNTI2RFNKVjFyaFRHR3ZuWDFqTUM5WVNHNi9DblI2elRRK3lyd25sTTBjeE9RRnRUR3VraFRDR2R6MGJTclNCNXFJR2V4Y3hRRGhrMytRcytLQWN5THBIWEMwSGlBSnZSZGlTSjJMd2I3dDdlMDhzREdyQ2I1MFN2UVNQNTBtK3VFeEJVNjF4L3A0bVFFc2JHK0ZDZEt5REtrOU8vYWRLMnZIVXI5WWdxajRuMHh5b1RzNHBJdUtVOHhMYm1uUjQ0M2Vwa212a1ZwaWV2SGdDaWtHSUVHZHU4WGd6NXBmN1F3UzZIeENzRFlwM2xPeGsxYUZUa3J0RzJkUmI2dHhHUVpqUlljT2YrYlQ5VG5ET1drcldhVmM3UnJLMDNHaW5UQlJENGN6ZjRuQkFjbHRNa0JHV2NzanZPa3I3SEZ5VHI1QVhhbVpJMTRtVG5naVhJakdHbTN5T3oyZHZ3aTRrVHg0a2E3Rmw4VVV2SThrU1RNNUJEeDJIMHBrM05BdEMvZk9mdTVia1M1Mkh3ZGlBR0VKM1ErOTV6Q1VLNDJGeTUreXloRDUrek4ySDQ3UDhkdnloU2VHREx5cTI4QWxPbHI2b3lrQmZwTWZVejg3L3JlcGtaV0hWY0xoaTNYQmRSOXJmUlA3WWVRVlBtU2FiMUFyWHhoL2VTbVR5YVZEZkQ1U01VdGlPeVpVTDRCVCtEbmorT2pNL3oxTmFUUjM0eXBNZWo1VUMwaEZ3L2xlTEZFK3pBdVBocGRNQkhSQzFOa1M4V21rbnBYSmptUkV1Q0JtNlppWDdqOVhwSURlZUk0OCtRNHhuZmRqalQ2K2k5Sm1IVUtwOHgxN1JMS0Q4dDAwcHl3d1BRZUplbXYzZk5PZ2Q4K3NxNVVsdFJvMHJxYzliVlVKeUNyUUNOSnJUUXQ0RG9RVXEzbnQ4WXhkaGZyK3VXcDJRbkUxM1lFdnUxa2FVREcwN096WERjVzBkcno2OEt6dVNTeU1sN0ZKWUpCSXY5eW1XS2lpWFNsZFNSazgvZUczaGoyVEVSUkRnSS9aMUxLc0RxSS8yYVR6Sk9HWUFTamxqZUpENXdDeFB4N2IrVmx5dUp0cFN3c2l6eTROZlp5bFZIRkk3R3oyUVZFUC9YVE9TNGx0S1RFZzZuMVMwZUJZY3NWSmVUUEk5WEpMcEZSeFhKNmhhNGNWa1hLOG5taW9WM054V2FJc0wySVJsVTdTRGE5MFhwOEhnam1FZmZHOFo4RFEveW8wbm1JT25kcXRCMk5ZVjBTTXZPSWRyZHdWWjBxS2QyaEZqNHhVWGpYTUduN2RpYVhHVlJ3VUVtRU96dXN4eHZISUtBZzFWRFliRGV5dStlbnBRdGgrU0ZmRXFPVDlnM0Y2Z0NUUHVTUlF3bi9lYmlYc09sK2V4aDF6VllvYlVrMGxBWGxUZDJOK0RTSFdzemxuakNlRE5IV3hqNXY4c250WE1SY3Y1SmxpbHBuUU1ib3hyUnRnWFhlc2tTSTlrN3pvTW9VU0R6TnFrTmMzTUlHU0k2WXRuV0RFby9LeFZlSjJrN05lTmh3K203eGkwTlJxbDdVWWo1TUg3RFgwbkRuTzVtSzlwNGlFRERoamNhRzNqWmxEOWR5VkhTRXA3SnpUNWorV0hONVZwSGovRzBEa0RLUlF0Nm92YVlXTGtxVzhIVzM1T0QwSm5PaUR5Vm9lbWZZcGtBVEdDTEZPWnRKWXhJUWJ5Nnk3OEZ1aFhGQ21nY1BaczZCdUZOOEUrVXVLUnhqK0c0bGlINkhodkhtREEvWXNOeEZsdktvUDhqazdvdFpUbStjckoxK2VsdVpsU3RuQW8vTUN0dE5HMkNZVkZjMHdEQW1MMVVvcjNiQ3dhS2VLbDVFU2R2V1NYTlJUKy9VOUFUeGdEWlBxMjJPQ1Q2emtDYXpyeVAyZnBLcmlaWDMvZHJiNFY3THlQYzRWODVVeFZ4MHhlMTRURDRlMkZkS1h6TW9PeGZwK3FGcituanZqWnVvQ2d6K3BoSXByYlovWXlsNHg5WkwzR0JkMFZmYThhUzg5NU04Z2NOU2hKNTN1N3RMdGRqejBGNGFFUjRFTnBKd1plSEtGYktnZThUSmgzTit2RmE3eWdaaTVCbll6MnIrV0IyUmV6SmUvTzcyRi95TWJmL3RuenN0ZExGNHdtOWFxcm5iNGZkZU1vNUhEVDNtZEhmVnUzK3h5aTZtUmIwUHVYUzUyQU1hSndSZTM5RFNZK3JTYklvcmQ1Nzcrdk5xMEE5VHZJUVMxME1VbjF3ZHl3bVU1QVZpZmIwR0pHdC9ZaUNPZEN4QjBZSE8zUzlHMnkvU2kxcjVha2JmdjRWbjl0b1FvcFh6Z213ZWZMeFE1QXFVazZpRFNtckhsMWN0MWFMQVRPdXIwVXcwQ2pxL1ppRDlhdHVXNFd6Qk9DWGpONHp4eS8zSFNsMzZaTmpla202QzFXWGVtNHlWenI3M3QwM3NIakpTRW9xMG1sUU5VcWRiZ1VXTWtUb1FwVG5HSzh0MFdEK0NCSGc5UmFDc25UcGxsdC9wWHRlMDZYQ3h6M0VZa3UyWlcwUlRpa0t4U1RWLzI4eFY3S1VRYkhEVnR5WWllT0wvcktLTUNkYkRxTStSUHo5V29palEzMUI2aE1vTlJ3bG8reFBudnpRWGdLUmc5bUQ0R2tpamc2RVRIT2Y0c1hDVGk2ZFhsb0phTXJIaW5ld0d4VXM4eEJaT1lMRCtETXBCNXB4MXpyV1huQ3VTS2lPNHhzdS9YSkx3SWtoUEhYcFUraDYwdjFWUnFNZFdtcFNGcEVtb2xWd0xaRHlhV1RUVFVwd0ZBS0Y0WGd6bHpiM3RmOVl3RGRhSjFTZzk0VEZkcVRKem5nT2VjY1JadFlyUkpxai9Yc3ZMN3J6Q0c5aG5nVmJWK2o0MHEvdWZVRVZ6VGtGVjduT1RLWmU0elh5QVE0bFprS0dmTDNTeTR3QTNNTGt2L0xqVkRXWmE5NkxRSmRhZ1FVNFQ0NGtqMnEzaGdsa0RubDBKejRjR3dNejlkQ1hPRzk1cVRNM1VjZDl6ZnVUS094M3VDMlJZYldDcTdQcjMzZ1ltQVNDSW0yelhJQ09UQ1o3Zk1PTGU4Q293aGRIMWRIYnNIMGpveCtJZXpxTnQ4YWUrdGVkdFBqdDR3bWhUSHl0TE12NXc3bW4reWNacmVFS3dGRExyZS9JMWZ4R2UrUm4wbUNiMnFsVnBaaWpyS0dncmswaEd3RzRGOGRvWmFjbWZMSUdlYXlnQnhtQzJpMmlHRDYvNDE0STF0cjB2Nmc4ZWlCa3U2VDhWUHBkTWhEbkhmUWZYU0t3R2dieDlIOC95S3dWUGdpNDJkanpiRi9lUmcwR2NURTlJTWttQUR3OUJFWTN5RXc0cHVGMWJYRFhsVjRQVHpjdndadlBMSTRiRGUrR3B5WXQvcFZ6TDc4S1BxM2g0MVRRSS9kamxid1hEVzF5R0pNeWcxZ1RlMTgrd0Zxei8ydG0xWXY1Tk1TZ2pwTmR1UlozN1J2NFhvSDM5WnBHTk5ML1lTMmp1eE9vdCtDMDF3cTNxb04wWUdXb25CQ3dndmVDOHNjOVhqNkUycnB2WGxORVFoT3hKVU5HY1lTR2s0RnZSZW5wQmZ6UlRBcDZlTDExZHFDenprTFZoQkRxM1pjZXBubGZvMFRWbDJERXhOZFRMTDhrSm5NNHhtUldyQWlWekYyUnFnQmhhMCtwaVViUGhsd2c4VzcwaVhZd3BzbVFlRzEwNVhpam1EaDllVW44b3RzdmpJbDJNQVpUZ2x0bDlDbzRLVnIvM01CYXd4MzI4UU9peGwreE9EWEFiZG9NUVAvY0cxNzBGNWFINjRqZUpSVFQ3Sm9qaEhjV0IrTFRqQVN4aTB6S0pqR1hXNCsvZmVsaEIwZ2syQVVBQ3pjUlpXMVg4b2ZqRURTVEhtUWRWdEx3MDRZMFVSZDdCSUp1WU5ENERCRjAwZ3BWcWJ2cnFwSzNsM3MrWHVOTUNtV2RJMFVJN0RTb3VOT2l2TmF4Y3ppZWExM1RmRDMxZFN3VVpHQU9lZkdTbnFlTE1lSjRORmFkb2dtcDgvZXpBMVRLeHU1ZGF3OVUwd2pHb1o2RTJRdW5ybWsyQXJzNHc0QkExR0FnMUtlSi9qZUh1dWZ2ODdWMUpmQ2JkTzlVQ21MU0hlNjVQMmNuMDN6dE1ycVZ1MG5GbGxiWm50VjB0bXhyaDlQN1NYckRiN1YxYlYxdXR3Tm1rSEFKa2p5Y1lQc0I0K1FJNjB6dkZLMXFSNjZubXVZMHNpYWtXK040ZjRDY3dHNEVaYTZyaG9aS1VvQ29uTmJFWWQ3eEN4cTZ2WTVqNkcxZ2lyZ3J4Y1Zua0U2Z3NRQ2pTemczSG15UHNhUG1KalQ5bnl2dExvMExLcEJwSU5LNU1NbUhMclpwN1M3cDhjK3JiTi9jaEViNTJ4eUpjckI2bFp4Q1BvR0FhSjQxa0t2UVphZE1BZWNtbk9HeTJWNHBodys1NnA2WkdUMVp0NFk1bUF1NXNZUk4vcTZWZ2JqV0MzdUwrRE13ek84dXlTMkJUdVZTNFY1eG9Fb3NLNmVBV0xwcXRCU0Q5OGd5Q3ZjUVJnbU12ZG1vWG5LeXlNYmRESHJVdGFwVjV4M1R4K2t1K3A1bXhXT0dyTWExeG5KVzFhMzlMM0ZBQ0hZRzY3WUtiRkx1bW5GS1NjWEdDVzNYMmNRbVk2L3ZBTEd2YUdlcGR4TG5weDBwZmVVTG42R2NiMnJaMHpkUHdnY1dnb0JXNnNJUEFZSHluTmVPdmIxYUNzTVVLc3A3aVpha3lIQ2ZOenNKWkhHM3VFVmNYWWcvRGVWTUhWRnpxU05QZmx6UjRCU3NoeXdBaGhGaGtxajBhYjhuN1htc1Y0UThkWVBaa015UFZRNFlaQmNMekdBTmtXakFKQ1BmaWZnZHdGUEVvN0RGY3l1b29Fb3QvSmN0Qytla2VGbTVFOVRjZC9oNnY3d0JtMGRaemlkZ2V0MFZvNlZRaGxUSUN2NXJOR3RJcnE2bEd2b0drRlRTU0IrMVBOSlQ3WGFjRFVJM29qK2dOQW40TlRmc2h2VEdQVWpBenorMlpDeDJjSlIzeGxkNGk4eHU3eTlVK3pidkV1RmRVdlV3RHBtamRMWmNoLzdwMFg0amNzVzRpZVZTVU5DeHJscjliZmorNnpVUG1QQWZOYkJTdHRIQ3VGUVhTUTF3dHVoRFhZaEswdEcrbXpmSUlCZXZkcTFLaUlKdU5HdlVtVEJ0ODlXUzJ4TWE1akRodWZwc21RdlJ3dG1WQmNPTU5WRnlpVnJMQWhnRXRSLzJmb29kUGl4bVFzczJUaDlVdEZ3aWFQK3ZnRzBGSnlZY3FwMVplL2N0K1R1U2xDQVd5TFc2dHl3QjM0UEgvcExsbmZ0L3oxV2pxTHluUTdkb3V2TE1PZnlEYW1KQkh0SVpzNFBHU2ZtZURFbDVyR01laU54ZmFqL2IvdzEvQklma3JJajVoZFZFNFhGdG5pSjJPVlBWRjYyQzNLNFdWZUlueUt1blladjMveWtxWjh0V0RQM0svTmhOWnFRcUV2STduVHJVVTEvSmFBMWV4c2RLZDdtODFCY2pIeW8zU3F5T0NUVWZqNXBTQnhLV0h2OHR5aEJmeUpNV1Z3aXd4T0Fjeitmc3FqN1dpS2hnMjBXV05YWFFKSzlsTGtlN0tYcHE4RkNoaFc1SS9PaGVZeXphNFZrTEpTRjA1NmdjTlFCVlY2dmNaMUFNaDdtME5FOCtlNVBON3VDTXVreituTFdhcWgzbkc3U2x4Q0QvZFpmY0tZaGRMc3g4YXZCb1NPOUcyUEtKVVkzalBXVnp5Y0tEVWluRWpmMHNtcDRybmd1MUpkSDBPaGE4QVF1a2RvU0hjVFBiSm5tMFZJVkd3eEkvOE0wL0RmQnkvSXdvTUwxY01SSWlsUFBNR2lmQUNuQ3hTNTZQNHlYcWREYThZRmZMVVloM2cwemF3bXcyY1d4WjhlZmRkVE5FRXp2MGM4Vm9oNEo1RnJaT1Jkdml0NVZYZ0J6SzRJa1BpRlg2Vjl1bnBPMFB3aEFsL2JCbENkL01QN3hwRWVnODhzOC9NOW4zWmhYeFZxaUgvbGNEdEFaSnR1S0V2enlaMmhwVi9mT2dkN3cyRHJzSUFnVDJvcGR2ZDB1dVk3ekpLYkUyMTA0YWNrQ1RvL3dHbW1KWkdPOGR2R0prNWN1amplRW10aExxT1hwdWNhRE9mVXZBWEcwME95VVkrRnZWVnNVa0w4WTdvUmtHK2ticXFhOFRkQkZDa3BkSTl5WTN3WkkvQ3ludER1MmpYUU5sQTJDWmlnckFhMVpQWTFqZTlhYUtMZ2lMdGZjdXZrYTU5bVI2SHlMOGhOY1BhYlJhVENYR3BQZDhDL0NjYzlVRDJCWDhjMHFyRGRDZEQ4N1JCWFRrRmplejRRM25BYVBUQjZXRkF2dDNIc20vRjBJU2krV0pZQU5pSXFvbEd4OW1qRjlKQWpxVm9rMGh5WVUvcGZPblkxU1FMdy9WUGlWS2w3cWlTUk9LWXZESEllbDdvMndRczlqTys2N2cyc2FyYkxUUDlUa2NzRUFsSGxYNU13TGZES2MyY1huZjVjY0c3TTZ6SWJHZk1uTWxPWjJ4Uk5uYy91WnpXYlFHb1B4KzdwQ0oySG5oV09mYTVKaDhvMG9HTFdyM3lXK2tFTnVEM1NiTDhla0hnM3lWY0wveFQ3K3RLcmh6NHk1VnJTQzdOdWNVL3lWeUk3VzhHQTBUdEYxYi9WUnNtYjc2Q1dlTFBNYi9WQi9kYTFsaVJTOThnbFlIdFdwZ1B0QldsdWZNTzhjd2d4ZW1YaThWZFZzeHJTNnM1VUU4T293SVpnSUNwYW9HT01KamttVllrMEFsMFRSd2RrVmxsc2JkVnFkR1RQd2xOUXNZczdSaHhQOHVOdHlzZUQwTE1pUU9xU01IZUhnN2g0VlphaWpGalJXQUJNTVZPYldGNTRGa1JWMlBrUzczNUhXTlJaZmZEclNXNEVzWmpMN3FBVHhFanpTOG5XR1YzUGhJYjdxYkpHT3I1WE56d1Z3QU5uK3Fhc1krdHloNWh5WUpBZ1VQeFA1ajc3c2lXeUFRRzNSd3NuN0Zvd0FpUHR5VVBkWENUUVR6WHIydHU2REtnYkJvWURzNXlObXFrMW1qbnY5ZFFXOTVnNmp0ZHg0QmZjTEx0YTFsTDlJOVAxa1pTNXJvbTgvbExTSFBxTVp2aWJCRi9SWWsxa3dFYlE1WkZBcUxFN0lwVmx2TDVYR3FkL216ZnFOc01DMlZqWmh6cjIwYWNIZ1hYd2ZJN3ZYa1B4YzJvbjhSTXRmSkVCenN0WVNpclFxOVlrK253T0VjK0JPTFJVOTJlYzJCdDNyZUxzNUNlenJiOXFpbHdjRk5YOE1CRit0d1V4b2hVQkxrY3VIWnlLWnFqNkJMeVJzeXBBVXBTQ1VYRXAvRVE2WlVJdDNBOXRld00xbTc1K0NmSUZ6WVI5VDZDMnc3a3BzcVg2ZWJuNThtS2UvVDF4SCtQcE5ERklnRXZzS05UcDJLL21BZFMxTmk0OExYWXd5cC9yREZhMUFtYTBrOTFIRkk4Q3JWVjVOVURzQW1DR3k1cGpoTWpZNGRZdGdwa3VMMXhHRjVjZnNSR1BaM2psakkyTUNrTHF4QU9XWjU5dm8yRmhJK0RINXRDT1I0NmhJeGF3ZmdIamROTXJTMml6aTN2Y2x1WEN5dmR0QUpHVFc1SGVKc09BUHNrVk5yd3UxeHgyM0VnOHJFeHFqZWRzUHR1VzdTRFk4bG1sT3RBQVdpSDUvT1RSdG9TMS9vM3BTc09VQW1rc3VZbnUwL3E4TGtZWXdIWHBIeXdYQXJCU3lqMmNnRTRkNG5Damswc2NhNzZkOUxzekJMZ01jZHh1cHZTV3ZYVm5mL3RvcklqR3Vpb1VmL0gxMFFoaE8wakVKdUJvc05MSmNVOFMzdVUzUmNYN3BTS3BFR05HVkJlV21zOS9lazF5Y3VXVmlpbDdYN1p6emJMWnk3M3pUSzJkdi9xc0s1eWgrSU9zc29Zb1ZzTnhrZTdPRmtQbWRSdXhWNDFFbUM2OGZjYStNaDZZQzZxMjExOTZ3c2J3dFJ5Z24xTXRtK2VvTFEvUlRzUFpPeE5zZjljV2pBL3B2THhsdXd5V05QUFF3UnBRSHowanZvelpoNzhZZDZ3QzNRNEx5ZC8zMDV3Ymtpb1FzUEVQSUtvVy9FQ1VuV0VIMkNPQ094YzRWWThpZ1FkN2NMMUlySHA3OC9uSDMxTjFDeG5BOTV0TmN0WTB5N2NWdFVXMW1JcW1TV09iNC94KzBhcUNuREVaZVZ0TWN4RzBHbGczeWZrejd5aFkvemtwUnZzVXc2cVNkSmdXdTNmV1c2aUpoQmNmSkFXd1FJY29RVXFKTHZzQUlacTRkUWZYWExqUmhTRm9IR1BTek9CWFljVFpmTGxNU3RvT2NXbWdnVjhRNVJ0UFNVdXdPNzdiREZTcTFqNm5OOWl1OEE1N2RjemdOS254NTRRWlhzUFByTkI5RzFaT25WZ1RmRzZTU0pVMXorU1VwQnFvWTFFL1h6WFQ0Y3V4TnB5eVNvWERlMzFmZWFCZTdKRndaa1dHcmcycytOREdMSW9ESjI1UDN6d1puYkpIWERxSmdMNVRsRXovRlhkRUhxK014SWdYa2tLd1dnQTBEK3RzTmJBdUlDdDRFdTN5R0NlWHZIbnF4K3FFR2dsVUtoMEQ2VTdpdnFNYXF4RW1zSjIyYkl3TGY3cEwwVEd0aWQwd2JtV21vamdQRWtVNFFUdnA2a2V1bmF2RldDVnNhMVpHakg2K1J6dDRIbVQ1NUJCdFFCYzRURy9scHpNUTIrdDVsUHA2WFpBMnhJa1JHVWV0L3UycVk2RWtOS2RxVVZZS1pZVVIxSHVPUkord214Y2taK1BvS2ZKcUNZMS9ON0xhdDVJSmhPWFdvTTJZWGVTbGFwekVrNUFXRXZnTjRsS1FvdWZqV0N0eVQrNmtVYkpXcGttUCtmNGw5VGo4NGd4NGV5N3lHMVR0SXNMd3hjVTVwcTdYdGJjQTNqcVB0K2dPaFA5MDlEaU8rbTcwSTZ4Q29wK0VRY0ZLWHBEdCs0bUg4UjZNZWMyN240NDR4Y0YyYlYxTUlKWUNKWVZDNThiOTIyUnFsU1RzM1Jsb3Z1NUxsTU5TMmxrdmZENktPOXp1b1R2NnBKQ2RtdG4rR0F4elJjUHhDTmhIL3hzYWNlK3hPY2tTSHpoS01ycXJMbytzUEtxL1I0Q1RlaEd6UlVVMHVCTjZBeFEvVVdqQ3liMzZwcUN6aVVyZTU1KzRVZkRhQjdiZUoxN0UzOTlGT25UTVRzNnlqOUorbDZZT0d3VXQwRHd4MjNKbnJ2T3V5WllQK0tjQ2tta3VkMnpXZFlzRGFNUXlZUFNHbm94NEhvQ3JseXlndTVyUW1TcWRXRG1UTHd0Z1Z2a21pQ2tZMm5SZjFjZGxYcnVxSXRPV04rdHA4T2c4aHF0NU1xT0t0VkJ3UjR1RXFLcVRwZm80WkFFREE4eXNmR01WbnkwWWtOVUEwMnpHRkZNMWV0ZCs1dmVqUVhodmhBbzhQaHBVUGFjWHZJSFBOTTArRTkxWTlUbXJHZkphc1FyNnpseHc1bDJLaWkzenpRa1dtRyt4SE14Y3dVSFZrRWJRU0JQWlpaMHJHdDJ2M25WOGNteUpEZ0M4V0lOQjNoNFFHcmlPNi8xNC9aclNHUTJCdVpidDJKTVNMZWJlS0FERHRYcVFNZUxWOS9tem5oUHZPZXAxWnRYaVRoR01oLzhReDA4NlNpdVByT1NybFpKalMzNG02MFBMU2VINnJDYWwxTFMzNzRWUWVmZjZrZ1FqaktBWFREM2tBRDYyZi9nMGU0YXZSZjlma09GbUtqT3FpL0Z3QnlNNXdpZVhjaWwxL3c1S0lLUHNWZHFCc1FJNHdLams2ck4zUUFUUk9VNG9wNFcrTVJnMVkxcnZuZGhwZWFleGtXWkF0eXduM0t0b0ZlanNYdzR0dHF3djc2Z1pieVpQWDhFc1V4WXNuYmQ0UXY3SVVuUUlPekJKTk5aVlhENm1JZ1UxeFZkUGU5ZEg4dUs5dndPRnRsTElXSXlOcFdZQVVJSThRNnE2TXhGQ0hTdFcwNGlUQXJwb1dZc05KVUpnQVF0UnF0bjJUdkIzSE0zamNMTTdJMDk4Q1lNenB1SWFsd1JlemRIWUw0ZXBtV0RPVkdzU1FzNitKemhCemJ2YjVmY3RncnhFRlQ0VExLbE0wb3A5YXVVd0F4czgvcVFxSE41Vmk4K2o3YnhNUGs5dVB0b3FJY2c4L3Q4dk1JaG1QbVlmRlVmeVpOOHVPSWMrcDJrdE9Ib0t5T3RjY1VXRGtmbGI4NWZPa2NKcmZIblhKT0hPb0E0eHRnaVZNRG5IT0JOQ0o5bG4wVlZFTWFhY2xmZTcvQXhUWHdTSDBzQk45K2hvdFJYeU9IVWlUbWJpTSs3RGhxNkNOd3h3a3gvY1hUODZKOWZFU0Zxa0xXemlvRHp5VnE1OWsxcXZCamVGS1JQU3BJRDdFQm1rYjczRHBZSWhXUW5rdEpjc2pUZy9tYWs1Y1RSSXc1WHVTMFh6NmdSZXBBWDQ1ckNzM2NaUUQ0THZ2T0hNNkl0UllqU00zMDNyWSs5Yy9UOU0zYXNaeGl4dVZPdWJBS04wM1R4ZEQrcVNEOHQ5ajNLMWxocldoUGgzL3VNRkNxekRDZ0RsOUFNRWRuTS80alRZQlREWFp5UFpNemtpcXN3OG9PN05GOWZLR2JuN2FqZTNKcitmc1lZeW5YSElkc0JkV0NBK3k4RENxY3NnUktjaWZGSXg4OVhodms2Y0xJNWY5UzdOOFVkU2VkSXZuMFhMUksrNjc5T0ZQQzZmbzhzMVpNS1dreVo0em5jdWFSS0V1dEtOc0lEMWszS0xCRncvczdqZklwV2VBQ3FuWkFnZVBUS0dDMW5RZzN6WEtXZTZEV0hkWTlBTUM1dkRZSm9xR0Z2SHBBRTJYUVRMMVloVndnbXVEVHhzNFkwS1dkYSsxV24vT2tORFhoQXdxS282NDhHa2lXRG5nYkpBRU40NlEybHYyZXdQclhMRlRtazlLbFNVQXNKMDZ0MkN2WlFzcnl3dFRRUkZ5QXVYeTNSOG83R2UraVRJTERNNkFOV1BRVUtTWEtZalVKZ0RNbnBuVTd6NnpteXRoL2lIckIvbzZ2T0VVcmxuWkNNc01abXF2VE1GVUFrNmdIM3ZtdlFjUVlsR3lhYld4bGhLbWF1QkdtcG5ZNDJaL3lMTlZLTS90bys4emd5WjNMZDlTU1d1ZW5yeXIreWJ2dGUxdlBsK1l1QmxKMGZrdEtkNTJTNVF2bXhxK0FIRmVUdnBKTTlFS2ZMbkVxUzFEZlU4MFl0cnZPNk5RcS82aHBtNXhUTVcwUW9NRTJKaE5EdmhKa0dHMHdvTDB2czdYOVFKemNlWUxnWmtxRy8xN1NmWHR4VGkxQXVmME5hNGc5dWx6eFNMZGZqdTJPcTdKalMrWGVCWHpTSEtUbGJ6NzdJcEV0UVYwTHA3Z0s3NW02NEVYdUxTbW41M2dXOTNlSngxZm15S0tjdm5nU2NXMXczdytld2hodmJSR2NiNi9SWE50RkFLS0NoVlNrRE4vR1lrQjBObFljYzFYRkR1MTRXVGE4RUppRmVCeVcxV0JhQ3N1RjR5UlZ3RmUybGdYR2NLRmR6RnBINDExVEdyNzZTbVYxSUVBeENNK2lSK1QrMUo2UGFwbXloWDJDVldwaVhFb2FDSENhNnpIaUhQUEFnY1oyUmFOaFZEcFA4Y1hReUhUUHRaNGNEOUVtanJFY1RyRUxyNkttK1ZjYjRoOTQvOWhBNmJMT1k3N1FxNDRSZzJHL3g0WGprcWxsT3lXSG1raytwR2R2ZmljczkxSE1yU0pIQWRrd0ZLZjBYZVFLREJxcFQ2YkduTlZ5RFRmK0NUY2Z5VGNrTjMzRExxcUQ0dU5SczFJV0dUUllxSkxjbjIrMkJrVUhiQ3pueHNtYUNVQVA2MVdvenFyOWs2VDBPdVhFMUZuVUtwS2JPSHBjWTUxZm52Ty96OGdUZ0FWSVpjZXBhS2xKaFl1dGp1NmhrbVA2TEM0a09uSmxvTFlUKytzenFoYVF1Sk1rcHhkcldOcnFzaSswTFQ4bXlhKzRmTXM3N1c3alY2RzEzbEY1aXlzL1VIQTlQTllScS9CMFJBL2lDVU5MNTlZQkxINjhoOXVjSzlJaWlVQkkxZmdzTGJVaTQxUmRmYU9jZnppYWZNRk5FVjBTNE9taXVoZ2RnZjVJU2txK1JEbFRqVURDQ0wyc2V1N1BHcWVYNzQyTjc5NHpqeHBaK1poR1JxUmhvYXJPSWRXMDFTbmR1QVZINzVGcUdXVXBXWEFwa2tQcXNLeXA0Ymh2MUtQWGE5djJxSjdIaHFiRTdCM3NpS0EvVjhKMkRnQUpsZXVmNDhxZDRsTjYrRnJBME5qOGVNdHJKTG81REJYOUVxYVhCTWNQODRBL0xzTkZ6eU9pb0RWN3FTMk5KWlUwekhIakVQZWFOSVp3U3hSdDMyclNCbGNtM1pIdjhHWGdZNUZSVFFua1ppcWd3enI0WUxlQmFEeTNQbHZlR1RnT1gzMUN5OVJYVmZlSEdYN21HTTJxeHBhcGFBN3Q4SXB2NVZMMFJTdThuNUJmQ29ESDlDdUZad2twQnpoaHVMQ2NZUGpCeVdOWUc3bHJUV1cyVmlBemxwcVFMRjFkaHUyUnN4MFFmL2gvZHVaNVZMQ2Qxb2dhM0dNM0ZIRUNiYjIrT3NzYmw5V21aZGJvdTROV2orbG5KRHNHNkg0MGNtdjZxUk56bTI3azVQVElWZ2kxU1VZTWdBbE5CNFViR1FybEJnb0Z1enREV1lYcWNWVVQ1Q3puY0RQcmF0OE1Dd0lsMk1Ec0ZERmJsZzA5NHo0U1VRTXppdVJYMGgwOHpIcmp2TGdmbkd6NHJQTUREYmlUekU2Q3dXQTJLeGEzZEZyMTRXNXNjOWo1OW5UNUdhWUZIeVIzMWtNQlV5TVBCVldhV0NuWEVlZytLOThQM3hiSmpTcVNzM1lsbFJSaFVmOEhmMVVvNTVoQ3E3cmJURWI0ZERzRmI4Sy9pRmFpdXRPclZMZDErOU96R0xvNm4wN1l0NTFPcmo1ZUFldEVGOEtqZGlTRThySk9HRkh0TDgvUEhxeXdRNUtNR0RwRmJvMjNXUDY2WkVISXdabmc0c2F5ME1NelRmcm1ma09IYkRsb1JhVHRZdGdxankxNG4yNGtTaXhYZmtHd2VSWDJiWTV4VFZPWUw0VlV3c05GanhZTVRvZEcvdGdIMU9UQjFTd2szRFNYam9weHRmV0dqei8xZkF2WW9DOU10ZWZqZC9sTDVsdXNVaHJ2MS9WbGpoWTdpMlFPdzdZdVhDd1ExRms1cW4xNERZcG8xYjFUa0l2STBsTGNiVzZKV00rRkxFUGtyaGZVZjlxRkhkS3JtdWRCMFBZNGVpUFYrMk5ka0x1dDdNciswMlBvcVB3SUdTQVpncFlpZXBVWHhzdkhSU0RkZEdveW5hUDFhR2JUZSs3MWt0RTN3d2xkREZ5SWtXQlpFQldCUmhMTzJ4THJTNDZmZG4xTzFBdWd3dGlJMXdGTG1ibVlTb3VxZWkreUo3bmFxREtnNnlFMFpxWEppYUpaaDg0S1ZqZ21yYUE5SERzem9UQndiNGloNFBXeTVyV0o3eUl3a3UvSHJxYTR0cG5BWjVscUdrMW5FSWtkQXJGVGk3TFJnTC9GK2M1VVp4dS9ldm5uNFVSdGtZY2tsVmRaM2ZMS1owekVnVi94SzFCajhYcjB5a1dwdkhOcC9PWHk5RnV3ZHhtb2t4c3Y5ZTkwNHZFeWtQUU1FT0R6T2J0a2tETGx3Y2ZiU0VlcXFmb1crbUZVSElhdG5STFVBSkQvc0NCSTN2ZithWXY1WGpsVWsvUG5qN0ZhY1FSNUNMZFlsc1loL1YyVjUwejBSV3d1SW9nakY4ekxVWk5EOUpRUThXSmtodXpQY005bWEvTUtiUzZvTll2WDBzU0ZIL0llYnN1a1MyaGVaSE14SGlDNkZ0UmlRUy9tYURVUkNMMGpMQjc5WXF4dm5NTGYzcHFIeXpVa3o0Sll6blhOb0w3ZjVRdkFvYjJVbVY3ZTlyMWFmNlgyMndMNmFINkJGT3ZOUFpIUWFBdWVVYzdSdDlWeEIyalcwakI5TmZQakdqR3owSEFCdklpc0t0cThNSllmQWNsSUJLTjVpeDFINGJibGR4NnFodC9Dc2hJdUlGWEZsWnRxZnMwOHduVWRkMzVZbHNoQ3ZUNktBcVRzWEpncEkwdVQ1azFkY0J4a0Z6TWlhbGJVWWFJU28yZzVEWTVPN2tkTUpkWXVQaXVtSzRpR2VsMUMxU0dxeFRtaVNIdGh5bjdJc0o1YVZOMjdZNE44SkRiN0NDVCtVQ0c2RW5iWmswVXh6aWhwaVZiV25KbU9mMnNMVGxIUTM5VWVyekhrKzFheDgyUXYwUUlOKzIza2JxSVdXWXY4SmpGRkprcndaT3IwWGhFWENUM3I2RnNDWUhVOTFwdVZIbkpCNFhBUXZPZlljdU4weXUzREpBODRJUDRqRFh2MnV6RjY3WVF1aHVFYUlvVlYrRWtCaHRHazVzZlZWN0pZNGdQWE8zSkY5c3JSMFdtVTdGMkxoTjQyVG5sRkRkVGNrR29YSlN4RXV2SEdKRkN5QmkzK1YxYWVBQmhQRS9Wbzc2VVpsZ2lhaUd5ampQSTcyM0xYWlc2QkU1NmcvcUFlZ3NESFM2RmlRQjdrdXRVM0FpNVlISElTV0I5QlBiUUUwYXNVZEd3QkJ0MDlXbS9KZEY2dnp6dTJwUlpPbXVIRGczYUZXQXR4TThUN1pLaWlpc1NSdlpSYlR4T0N4TmYwZTdHUEpRU2pQT0RtU3BzYmhSbE5IdjQzNEVHcUc0M1VGSWpabExVUi92TjIrbUk5RVF0K0NRaTgvQ2xBMnZrdzZjUzJPc3FxTlJ5ejB4OHJCOGdrY3ZuOTg4WGIzaENUVGZwSmI5bGFTVzJNby9JOHJTOWJaVTdOa2NZL1htaWkzcFUyb0xuUFdYWmhKa25CMzR0cWtSUS9QeFdTVzdXU21hQWVKN0o2VnBxbmxhdWpyUlZSemRLOXcyL1ZuZGo2M3huZlhFZWIyZ3Nwb3lHWVZaV2wzTTh2OUVCS2ZZUGRuY3BNTlUvd1BMc25yUzE1VWNlRGZ2TzU1bFI4NmNHVUQxZVRhSEZCSXhPYmlNeWU2dmtqd3NISXl6bVovZlBxNldwT2pZZk5Ec0VDeWFsMTk2dWxQUVM5RXMwSmw3b25LSDZRdm1maUhpWkNWZDl5b0xHa3JiODE5SnIzVEhzOUV5UDZhdTZYbXZlRm10SkgvUEwxM0hwNURkTlgwdFJ6aTNZTXJmVzJ2TUVRYnBhYm1WUVdvRkdBeUYxZWdGMFJrRitqNGtzdWNGL0dHQ0JNb2NVTm5ldVdNY1ViYytGWnM3Rm9OUXN4VzNYVDEyMUJoOURtMkNwdHBSU1lmWlF4WWN4MFJIREx2VEhiMWZCU2NVZE03TGJLU0ZUMkpiZVMzZGtPNlBnQ1B4MEJ4RG1EcXZmZTVNbTVjKzlqV2pZOXpSWS8xOW1OUkY2SmRDSFlKd2lNL2UwU1NoZCtQdDhYWVRqZXhRSGVrd1hzcXhKaENxdG9Fand4cWVLRFN0RHAvbjI3VThVeEErQkhZeGRFejE2bEloVXZCeHNYU0JDT0lLLzJqaVFOdHFQcjZTaW4yWitramh1OGo2aW9UaUNGOVdhaWVxMk9WUWM1cHlMRWovRUFCZDdrQWRJWFZzRVdybVhEeEJNOVZTaEYrZ2JiNGh0Nm1lVUJ5d2I3STRMQzNOSFQ0MXZKb1VKRElaSUxRMFdBTTJTaVJ5WDZId3NzZDc2U1V3c0dIMmgzbzdhMUhEWk4xdE1pb2NzTmRtYnVHK1NocUVLWkRYNGcxMzRicEpUYUlaY0l4c1FjQnlvbGdNc3k3TzcwWmZZQU1RQkpicGU2aEJJOHJFcjJLOXp0bm1SeDBVVUNCWmdKdmFVSXgzWFdJL0pNRWlWdXF2UUNlSU5EeFFtN1B5SVQzZzZ6SnJST3ljVWlzUjFxRXgyeVpFNktmNENOaWpRZHNHVis1VjZRclRVWTRLNlNIMmc5VDdqTTlYUW5qU1Z6VDRFdFB4M292N1UvZmg0allOend1VU5zTHBBRnBmMVZlT2lEUTlPQTM1VWh3T0JPdGFtVFpuZHAxWWZXaERzMmxoRk1NUmVXZGU3UFZrU2w4dk1vcnNQcDBOYTJhdEVielV1a0d4bUlVd0FGU0pVUTVFYy9na1pHUG9FQTByV2RMS1NRb0p3OXBneFowd1MrU3AxQ21wOUkzbzU5aWJ3Yzl5amJueGVJenFhV0REU0x4TU9UU2ltbThaR25vcUpiWk80U241ZzZJVEwrbVNidlE4NkxkMUZkZWVvZlhYa29tNlNGcEEycmd1WDdRQVlXNzdITU1WTWtGMGZ0L1hKRVdqNmk1NWw2MDBTNGpjOXdsZmlaTkFCU014NkhtbjdsSU5tZDBvNDhXUWNBcFkxRmNLU21tQ2FHZ3RxN0toRlpSYkJGN1MzVzNsQzRTcEF5blVqUFBnaFY1U0ZjUW9KTGk0NllMRnlud01RckpNVGNmNEVSWFEvMFVTalJ5ZDNQR3RmYzdGNFI1azM0dGxsMUlmM1BNeFA0Yy9zTXN5SVFHZkduWmtOTFJ3ZjBxQzdsV0t0SnpmNzFlWWJ5dHBSaUpaK1BVL1pEdG1ETlZQTy9qeEZEbDZXVm9ZMC9ad2I2NnMwQzF5RHBzODA3dGR4dnZYYnZuYmhxa3VBZkFOa0c4K2RmeHdBNitYV2VaSWZzODdIbHJkM0MycktJN05lRTErQWZldkRQVVhBMERJQjBuZktwWER5WkM3YThSUVNFcUxqZjhvQ3FQUzJpalhBVHEzaUI5OUNGanhVcCs1cUh0ZjJnTUdCanFiN2pLQ1hCT2VVY2N6TlIrUzBPdXVpU3NaYWowS1VUZ2dGdjdLZFRoRUxyWHRZZldGV2lwNTJ6Ly9GazU3dXUrOVRITDBKWmRReEx0alZpaXZESi9hYUIvNnZKZTV5Qzc0NUZoc2xJS0V5MEVBUjdHL2Q2N2F0bU5KWUlHRGVzSXZhNFhFellpazhBL2MyVGVFbTRwQTBsdUdPelpuTjFaL0pzU0x5SDZvYlZobkdjTmVtMUFUVlgwd0V6SytDektlcHlPZkNHcFdDV0FIWkRuRkh3MzZObUFnZGFwYncybTVscFR2MmQ4SWpPVDZYczVNZk5LK3pyajR5NG03TWk5ditiTVo0NUJIRFJubHNKaHRjUlZFVEZRbUhFRmhMdlhOTllhTWs0anZITGowUFNDWUNVTVZpWkEweUJMS2hnVEhxa3F3N2JOWi9DdHErWjlGMDBGbUlacjBmTk5pa1BiSURrZUNEYVRTL2JETXFLWVFnUG9uUWczQm9lSFpyNHNGamZTN1VHSUN0cXVhd3ArMTg0US8rNEJKWkJpTSttVFkwdkNlbFYrOXdrY1NJTnNCMUdDNmlXUWM2Wm5Ra0o4SWlIZDY3UDcvZGY0bVVmeXkvWnNyS1ZSNThlNjZGandmUFViVWRiWjFJaWVsUnhpZGRFYjFHazdhcXVMZEJLNzV0RTRJSzczaWZtbXRsc3RxUElKcmZtcnVvSk5mRndqS2dhOFRqd2liT1V3cjJIUk5uVlZ2S0dpb3Rldnhhc3JZU0QwSVM0NExzWThWK0JCckNYZDM2UkpwQzNGZkpEWjVPNE5Bd0k3U2NtQ0M0ejlJck0vZWN0RTBHdkRsK08vRW1OYU4yOWF1bVJZdXdZQVF3VlFPc1AzemNPMFFpVGFadFROUUJHdjRYQUNaREhMZFJibnZRb0RCdHpOVmhsdlBuSWZ3ek5UMGFXbmJ5Mi9uQ2d0ODZMeGMxR3VaUVZWa2pyWFFKdm4vV3lvTGdjd3hWeXRGNVovSWtjcnEwbXdzRUMvTGxINFpsTlBqVWpuaFMwL0xnNnZzRW4xbWg5azRENnRlN0lFVnY4eVJONWF4bSs3SlJLK1BGRDZrR1prWFdBcEhYN0tFb0t4cHlGOGY0czZxajhnT08raUhpcEExTU9aL2NYblk1VEJCYTYxL09rQXlXNTJYQXd4Tml3ODJub2twVWFGTDlEd241T2JBZW1SQzM5NWVmZlh6NVBjeGdySlVsL29rbE45ZlhIdEd6RFVMRVJta3NhZXNnWW9yazZCbkVpNHlCMW5GTXFGeDlBVnQ3dHhvbnVLNFN1NEVnYTJaZkEvOVZvY2JLL0JLTlJYRjAzdzlXaVpheFJtZ3pXbE5xSWhLNXh6QVcxWFdLdXpzUXVucDYvVitCUzZRQ3pJMjlGN3Y2SDdzWFJyVy9PK2dpcmlHUGdSK01OQldDZFNSVThuUFIzK1hFdjR3dENEVjBmVEdweHVIWjF0N2hKelNKSWdiblNQTzhXWmx6YzlsMXBpRnl2UlI1SFpMek5GOXdzWXRENDJucDF2SlNnakh3U3hTZy9VK1BxR21qSlh3cFM1Y2dGUE5PT253YTl2OUhxbU01V3RwUWphSnVVYkZ3dmVQSnB2WFRtQjIrMW81aWpPd0djLzhWSko5cjZyRVpoNHJzRkxpaGxNY04zOTZuTXphcEZib3padnUvektQK0VzMlVhcmNRVG1EbjNEM2FTS01HWGVXcTBkZU9OMUoxa1d0MWFXRis0R3VFbFduWHV4Y3NOOWI1QmhaWkV0ekVDakVWZ0ZMdm9Hc1hqUnNpTXNxNlBGZVJVY0Y4aWRTOHU5WWRaUnJMSnhLaWRUV21SUVk4NWgxZXNzdS9UYmVxTUQ3anpLL2tzTHNNS3JRRXRBeWthNVB4YlR3RllBb1o1RWRXZVdEN25tVUFveG92VFlweWRYYmZxUWJGM0ExdnRCYkkvelY1VU4vdHRtTjM4dlBIb3ZkdlEwYjl5NzJEWDRiS3VMMHN2TllPbXhraW1mcGdIeEJlRGV6bC84aFMvZEZkcVN1cUdNTGhEYVE5T29Ob3djdWVBVGd2Q0lBRjlRbkNTbWE0UVFEWkRiY2U5TGdMVE40ZW1USmlKOGtEQ3hxQjZrM3k5NHhvUGxmSlJ6SFNCWitVeFhkT3lkbUdZZGV6RytXZGkvUlBVdTJibEN2TUp6ZUs3WFJCcW9JbGVQTmcxeGFkTDJGSWlHSnp4anFJdmtKdGlFbVpwU2tPdWtPZkF2ZUM0WTZQQ0VacmFpSE1WL1RSZ1JsRGMycm5UenZtWEJabC9LZ0NBNFhYN2xBS3NVWVI4bVc4UzNScFB5V3RFSU1QRGZNWjlXU2dkZFA3RUFGME93YUdjZ2ZvSVJ1bEU0OHdKdlhSZkY0Y0dwUHhXcS9hQ25HdmxzeTAzMUpLQTdYb2IyMDNLMmFlVWlrbXFOZUo4QThOUjdhTEtnc2VkSENZQm5CUEFFR0IwQUN1TGtxKzdRUUNvNER0RkRlNVJBeVdoOUcyeW44eEZ5dzk1RXBDcDR6RmMvbStlYUE5QkU3OGVYbzB2UTlhZ0hSbjN0OE1iRmZCUVpXT1RNNWpJdmw2bUZIUHIydEQ3c0Q5OSttTjhoS2NKVGViTlF3eTYvYWRMcnRCREswV01aV2ZZdUp2SmFDOWRLNmRGdWVMV2pjTU1FTWYyV1o1OHZqRU5xRFNLc01wYWVnYWNSVGQ4dHNXc001T1hLUkZIR3NwWXdWTjlKaEpIOFV1bzkrODVGeEZDV01oVGdaTG9KaG8yU2ZZczhlQ3ovemNWRnBKNFNDdUlGZXh2NlBlT29MVjIrdHh6bjNYWDgyR3hzZmovODdMbU9iZmNZOVFKa0tXcisxS3dBZ3diTHMxTmVLNFk0eEVIb3BXS2wrT0VOUFB3czBpdWdwSmNSaHVjZ2pzV25WV2tYQUJhNWZxUHFtT0xMNi9sZVpVSHRNNmx6SGk1TnI2d01pU292S3pkS3l0cFNnWTVHdmFLeDR6UnpUMStqdnZ6SVBiZCtMVW84WUdDR0dHUGhqYXJFdkZONU9GK2taSHEvd2Q5MHl1Z3hOdmdMNFVDK29XdjhOQVRrZW9qem96czVMRHZFWWNuZlhlZ2JmVzNCRUt3NjJmUHhjcGVRZ1MrY3ZLMDdmQ3hDanh2a3VoRXB2SGVkZnFOZ3RpR1hnTFVhandhUmhvbkh2RDdMbDF0TVlqUUdPdGcwdzQ2blJHbVJhRE15bFNTRmdsQ2VZUytZTkV1ejNac0x2dlRNczVNdHNvaFJvNGlscE9GSkh2cTlkY2pYbXZ3c2RPek5ZUlJJVndJcUNVN1AwRnNyaVp0SzF2c1YySWRhSmpNNnRheDFkc0ZUenY1cG5HWk1WNnpLSTg1WVR3K1lYOGVMRWxFSnhRM0k5YVplTmxqdGc0dmpJcmFYOWdEa3RKTXVnY1dkZUl0RXQ3alNRMFl2YUswQVBGSGZvbVhhNWlJRUQvRFpUKzluMzR3RGhTS3J2eUhERFhiVmVLTkdVcEdUb1EyTk1qTmxnZ3BjcDExRWsxWXg2Qzk2MTdyODcvcEpadG5SZzBTTmZZeG9LZU1JWjQxa0pPakFxOXBvWEc5am5WdEJveGY5LzRYSkx0VVR2TEhQdnhHT3Zwc0dkdVZuMEFNQWdVMXg2aTlmWHN1em9CWjRleEozcFd3MktmWU4zcVpqYk80M1ljN1RnN1Nvalh1TWJrYjRabkJIdFZVNjU5YnZDdFVqZ0xPRkFZbWtHTExidnVBZzBJNWo1ZjdyRU1odnZ4cWpkRkhZeUtwdHk5djFyeXpIbklLRjVsUmJsTTRkNjA5RTNNUWJ5Q2tiK2ZiWkxvN3pxYU5lWVBGWW9PT3N1dGhvaEJETEFwRUI5ZmJhZGQxNWgrK0hER2c3aVE5RlFFMGlmRlYxZVNQNUV6TUpVTWlzdndnR3ZMOTVuZUdiTDdxWDd3Uk94VzVtM3djSzNwdE5OZGZHZmpUTHpUN21JQ3RYcHFBMjF5eTAwcm10Yjh3blgvUWhTYk1BeEEra3VqOTFveHNpdU5rV0l1OFJscHk0bDZCSjFYVGlSdndHdms4aUZpRHIxd1l4MDVTQTlES3MzeXB3OXprYi9jOURVUnFvcGN1dTZUMmNTYTVqbEcxQW9iNFQwMi9XQm5uYWRML0JVc2hOTWNBZHhxNGhiWktRRXNEaDV0a3hURldUWkZKYnpYazVkZi85U05lOWsvVkhPQWFEM2E1UmFqcjJ4bkpHUmtoZnBEZW1pRnZ5SDJmRHJPT3J6eUU3T3YzUTZobTRJS3VKcHdVckxuMVF3cWQ3Q0FSdk1ySnA5QldMZHZhSGYvVkN5OTZxUlNhUTkxL3dUQ1ZzNkR5bFpJUXN1NkI0U2RwbGMyTjVUc3NxRGtGa1hONVFkUWZiZTN6R1Z1MnR1Q0h1T1FXeHhhMVpxNTNnWWI5VDJ0ck8zdWFuZEhmUE5oYlN0VlVjUlRwQnNTcXpnTGRrdjJEZUVyTjhBQzRiK1VDSkJmQVB0Sk5GV2M1YXNQMVk3NVZjVXBqcTZoMVlFc0ZhSHZZZGFoQ2Vnd1VYS05VR1NUUmRPb2NhRVhwdDA0b2xJZnRYVG0rYjFsRHU3SENrOWU1clhqVHY0LzA1MWJ5V3NISkxoOE9NcWxoL0QyZzVxUWxLemJIc0wrRmJhUElsczVlLzJLb2pFY1lNb1pDKzA1eHN0cUtjd0hLYlRQOWN4NjJHZTN1VURaT3o2Q0tUYmM0RWJqVU10bkRCUnIvUXVIM3pyb3JWWUdVckN3WnhsMnlDdFE1enpTOEpROTNZUkZCT0FpOXZTaHJpVGJQODlRUS9jRUd2QmtGL1h3ZkNuNitDNnRnRzdWTzJIQmphaDZaVEJaTSs1L2RuUTk1QUZ2NEs2cHN5OVFwMFgwQkF1amkvNjV4bGdWWEZ4QVFxUlNaNjdONlBBVmdpdUJDU2RxamlwVnpRaTVVcmUyZnpEcklMQlYvNDhFOTYvaFNZOWp2UVQxdmxZY0ZvUkQxTUJSRmJJRm55M1M2S3Fic3kyVFZTb29jMEZtT1lOSkU5SzEzNmwxdUYzQnhoamFJOS9paUF0NFdEMWlFZHhDa1Z6cEdlYVp0UmNLNFhmcEdCYldhNkNKRHYxVWp1TmhUTy9TWTlSd25FTTVaK0JyZy8xeVRaOHpMN09Oc1dheGEvbUVpVC9VbkVlNmloQmpBVEZFYmY3Qzl3SjhnSjZSb3F2ektnTFA3MHIyd1FDdUE3cGo4NnhpNTYxTitNekJxN0ZmeDdpUWhHcmJnTXdrbzVROTdCOGl4eVJkbnBiYmY4NW5JWkZTM3dQRzFBU1pPYlhFcmJwWC9uRVNmNjZwZGRhdFhmU0RqMjRCSm8xRmNSazcySjlEK0lnK0dsemNkcEozSytmVkxLUnZLaUgyZnA5ZG5ZU3laQUN3U3RtUzhXNXJJWnptWlJUb29nZkYydUtjbzgyS1pZTjZFUVB0QkY3OXZGR01NT3FOSEhUSjNqSVBEeUpLM2VqVDRXcnF3Y1FoZjVxTEFlanh5cFJNdU96emcrUi8zVWpaTUxsWU5idUZwQW9DWFVvdUJOVlA0bm1RVlpTUkJzN0JyTXNLTXp0cWFaYUVNM1dVSTE5MjRqMG1NN0tzaWNaaVBMVzBmazF4cTFlU0sxbHF3RHpGN3RtT2V1K2VrTVFwTFhiWXlpc29JdHpLSXBybG0zTy94N0JTL01xQXRDZnV4cWJpVlQ5aXdUTFcxUlE4SGFiWFgrTkoraWp5T21pb1Rqb09JbExZZ2U2MFhPM21KNVRibTFTdGRRdFN3Qk1rclpJOHFGeERZRXRGSlAzR05SeDZlK0haOFI4d3QzYm0xYUlIR0xOanFzamtKemZyOW9ObktkWnZxdkRaTWRaZEQwR1dSM2NOeE1oM0pBNzdnQWQ1Vmw5NmhlbXFiTHBiSHNlM1RRenZuOVZRUHdsYldDZGxKdTJacFZxSFl3QTY2TjlEZE1KelBGbE1TdTFQVmxTRVpTT0VST0hRcmgrZWo2U2pCeGpDbW1oL2lEbjdjSFMwekNJK0NDUlhnWURIMkEreHJvNXFWQVZyMW1iRWM1S2d0ci9VcHBXSDVsM0R4cm5NbEhsc2l6SUtZcmg3eWZsL3BZWGU0dCtGQUpLMHNSNzNHUEdseHRNaDRpTUFnTHBFcFVmeDNtZFNVQjRqNjJlTDVUV0E3VUhkOStUck5tQWxNTGI4ZE4wSjN6ZmU4NDY2S0psc05veFBsdDg3MlBRU1hQM1phQUtDcHNpZzRYRXNJdHRkMStrNEY1RW44ZTZBUnVVVU1DUmFFY3pNOThVNmRGeWVvQmZFWnBOY0VTOEJrQ0l6b3FNRDdwL1lpcGFkdXJGaEcxNEh4eG1VbE1rOFJrUlB1TkVwWitMMjZTK1hRd2ZBNEoyVTBweXN3M3htOG5IZDJ4L25JZUNMNTFwakplVDltNUFnMTlESytpOTZXTy9LbXNxMnh1WWV0K01RSmRuN1ZRUm11Qjl4T0Uvcll3Rkp1V3RUUkVnYmJjdnlXVXBXNlo1UlNxZC9PR1o3V1IrbUkyVTV4SlZlSDJKYk84RU9iTnB0UkYyNHRqWVV3eVBpck41OHVQZWZZa2ZUN2ZJWStIZko0anRGNE9Ec2hmTEwxelM2elBSUHdoZzZrNFNLQy9VbmdINXVjWXpjTE8waDNpUlFJNzJjRGRsd0dNckZ3QjhUTk55akpERkVtbmw5WFJkbnVXT2kwYTc1b2dRSUlGN1hleDN0U0tUZWNtR2owVERNaGpXQkJIOUdPazh6UzZ6K3JCUlFRMVh1NlJ6SW5heWdmckI5TlEzd01FdUNsVWFpTi9ralFraVJEeGducEN6a1hpdHVFL2lXVVR5QmJEdUhTdm5JSElybG8wT2NFVVB4UWtON05HMWY3dGFZMEJ0bnpTNy9DaXIzd0ZQUkNPR0NiMzg2bWlqcGsxcG4wRzk5b0N0eFAxUGpsa2RTNnh4NDhJWVRQSm84OXppV2k0VTQxU3lUQlNDTTc3L2RRd0NwdDAwaEVQOFQ1Nmw3aURjK3QzRWRSMndUUFpUdmRCWEpJeXJwbDVCNW0xcm5qRktEeTFQaTdIcEczTndueGRhcWhISlpyK0NweTJlM0tERVJ1ci9lQ0dQdkFYSHZ5QW83Tyt5OHlsYTRZeklleWNaUG9HWG9TeGdQNkZ3dWtGN1NacmUxYlM1VjdnOEt1aWNwRTNzSWZhZ2JZSi9CcmxQMStkNEJJdlZ6N2QxdmErOWRhU1BFY2VvTWpUT01Da09Xd0NISURYUlpXL1dkOEV3cGR6cTk1cG5KaGR6MFpoWnlGcmlaU0VzVUxKUFduV3hQM2NlaGk2RDFnQ1R6RkpvdlBpRHBsbVZ6L2Rna2lEVmlXV1k0WHovRnFLdGNnQ3BtTnp5bStweHRzTWcrSUNvTm9UMjFjWVR2YXROZ2VmZkMvMGhPY1l1SWFyMzRZYUZ5V2lJTG1PSGFIVDNwcHpjTVhHcEp6Y1JNQzkySmZHcHJoSmgxbGM4dXRUNjkrYmtYRDFtc0Z3VDdtRmQvUSsyZ2ZpZldTbGNXTkxlbyt3eVN1cFV4dDZpNHIyTlNEWVdHWDNxVnQ3eStJRXRQWExiblZjTXBhdUZGMW9YTXZ2Qmg1S1NHUUdab3Z0QmRzUGNab3VnZm5VOFBWdi9QSUcwUnRscXZ2TXZQYm9PcXBEZlJZUGZLTjh1S3VOek5UUERkZmdwbVhsaW1NTEpkcUtERDVrOWF1Z2VxUGlld2QxTG40dlE1VmIvWXNsQ2VvSmp5M2VCT2tNSDRHcEhVc2dmTElZTjIycUM1VVlRNjhtanIyK1RBam5FamFUbzhYaTBYMnJnTHlEUFhKNkYrUHhxWDRnUDVUaDYrS1NSa1RqdDNpaUVXUm81YVBocm1EcWJHUis5Z1M4Z3RubHVVeUZZczBZeTUrYmUvbCtoQTZOWm5sY3djWWFDeWxXY21LMTBmQ3lzNEVlN2Z6M3lIelVQYzNzUm1MNVc4MzRTdnI2dUU4aDZZWkljZE5DQTdiY3N3YndFcmpib09abzRoZXByQjkvZ3p1bXZrMTJacVd5VGE4Y05IZVlodVdXNUdSNVFqM25DbFAxMEJNeTFOV214RUhOOC9JTUVOMkhBeHVHOThiOHFmbTNabnBsL0JuZUlaeDdYYUxPTndwMmF3TTNtUUNPdXlQZVArZEdmUWZvcGZmazkvTlZHQ0F2NXBJU3pXZ0hpYVRyNEduVXVTTmR6Y1d5SCtOUE5DYlI0dkcwRDVHNDZxSzhPWEc1dGZiUFVmcElHS0sxRksxK3ZiOXlHWkRmRUl6azNLVlpOWVJPaWEvb0JMT05RREsyNC8wVGZlMHU0dy9sMGw1V2lpTlVyUGxpL2U3SmYwQXhKUjJNQk1YckZNcDg1bnEzRUFnRlo1MzlCWEdVTGtMYTFRc3RjRDc4YnBsQ1NkQm1SeXJEL1N4UVZKTUpxMGJvRjVSbUVCck1GN0RHUmNiTzhacDlMbDNSQmlIeTg4S0VnVDkvdDAyM1c5TzBMNk5NMXBNeFd3VVN3MnN2ZGdjbVUrQW10R1B4S3ZkVnRjeDFHMlIwS2JVaHprbGNIZnZTSXZia1ltcTlYZFFWMVdOT2ZDRVU1Vmx1N0gvTjFxREo4SXRhL3NOSlgvcFNUenhvSWtMMHdIV3VmYUIxZFRUbnNCalFva0JjVlUyT3MwU3NnbW9GVnlJZUlxckpYVWxYL0d0UWIxdHBNVVE5ajVobmJVS0Q4bThCQ2M4akREcS9VM1hpSTk5VFkxMWxFYXErUjJwMit0OFVDRTZTZktkWUZhbjhvd3RndlJzOWtjRkdIbXJXVi9Xd3RxaEQxY3lxTW1DS2hTNmZtT3VCbkNFeS9ZRkI5RUVFcDZuZmpuM3Z3OXNPVTREUEJsRUNSWlNWZkFqV0lUK04wQmNpZ29renNKc21DdVB0MExZUFVwWWRmV3dJcENoU2ZvbFZEYm0yTDVRa1cyMmYxRFYwMklvT3R6cHViTFpHLzBPT0xENmxJT2pwWG1qLzZpV0xTeDFQeWdCNUNFS285aSsvU0lia2F6VGhOeDZaNWQ1b2d2UTFjUlZPZFlIMmI4RXRJM2R2WXpXSEdyM0Zpb3FjdE4rUTVUWkZicDh2TnN4eko1UURUeDVzUXFOMVlOOW9XUjlYV3VXUTRXMk9XaFI0UEtjblVuZkM2NXZtY3h5SmdMRXRXYjZrUXhOK0xYZTZ2SXBxdUVLVVpJR1ZRdVRuSk8ycWxNaXFoZXliN2RZNDduTlBUVzFRUTBTTGVwRnZGN0g4ZlBsSzhYQ21DVFdlQk01ZUREbi9MMXZwVVNhbWRFLzhVRVVhV2lzdHZYZExxSXR3Y3QrS09YY2NyWkZUL0hYZExNWnJBN1gyMmRmOXk3czB3QlpORnBOcEVabEh0VUxnUUV1b05reTh4YkNLT0Y5Z0lSdTRVbGw5RlVmRDduc3lTT2RxYUpQT1U2VGN6SVpTT0NlOHpWSjVwbldGbWk5MVp1b2k3VmRzZXFoOXVaNjZ6b0xuNmdCVUgrYTRXS0dHaVZYZ25CUVRwUHhiWjB1WElxTWtGS2lkTERqcktZMm1HL0NXV1hrT21BUDQ5dWcrYnd4OUtBdjhsTi83NzRUUmlYMWZDUFpzcXZPUVhuaDNxMVFnWmhIbVNBN3AzanpNU2d6ZnhkZDFKTURFRlJyZVh0V1AxeEYvUCtObXl5Tm1oc1hsSE5TMVBWV3RuZzhLam1TazNiWG5yZGthR0tqa3FUMUVSL2FBb05IWjlQb2RxSE5yem5jdkVOK2s0MGtOWnY4WTVjRmo0Q3ArK2NVYzdLQTRYbTZGWmp2RlBTemJDVlNlcDU2M3pwOG9iQ3Y2cklscnp2eEZVNWFXbVZKaER6RnBXUlM1aURoSUhVa1oxL3dRM2JrSnVDR2kzZkF3UHh6UnBXS3dQd2ZneW93VTJyaGFXRE9sSmF2SHZkT0pibUw3L05UbXo2blpzN0tOalNJR1dEQUI5TXUwTExpblYxYmJWRlhBQnJxQmtreU10TVZ3SDRKZHhDdU9lT2ZFL2pZc1RPRzRaRktZNFl4SmdnNjlaeTMzNzNxTm1kQzRORm9PQlJ2OXRMREtKUlZaMFVQNElGb3FaeUxrZ2FaOElUNWk2dzVuSXdVMXJGdmNTaEhlWktLTk9Cc3JIbW1ad0lTUktXV1FzWXFMVytmdkRZVEFEQ0I3N0gvb001a0h0ZVlUTzE4cnY1c21pSkZPZnAyUWhubG9LOXV5RVpuem9TZ0JZZjRNRXRUK1h6VmkwWU9uZ2ovYSt0VzdDU1c4TUhBVCtrTmRxRVJOK1JiWFNENkk2SzI4K1l2TWRmZUJFVFFuMmJwaEZrL0NrMDZUd1QrQ0l2ZjhRa2poTEZaZkZESG1GOTE5U2d2VHdONnhzdDlEUDBMTk9WZFE1VzJLcUxNb296MUNjU0c5d2xVdUoxcWJUTkhZRmtHTGVYQkRQZUIzanNhS2NDMW12Z1RqamcyTTNZNUlObkwrUzMvZE1QSXVmeGhScUVMRTZpVENYZ2xKTVpUdnpaYy96cVpwenZnU3JGUWcvR1Bka1V4c3dpeGk1OTc3bjRyK3dZWlBPeGVDSEI5VENnalk4SkxUbXBXaEx4ZHRmcFdCYTVLOWRTejZjOTJNVVRod0QvQTNpVjd4VW5xTDBlaWF3eEExVzdIZVJGWngzUzZ0V3MyZnFoUEgrdmFEanJzZ285c2Z5WGhLZnpsdmlBb1BoK1lqWFpTbTJKZU0rTUFJVS9VdGcwSitMZHhoZnhTZ2tvSjNKUEI5d2RlN3k3K2hKY2xnN2hKNjVLOVVhdzRPcEVET3lWWkF5OUdXVm1ITi9qVVh1K2ZRU3hhdVpVOGQrN2Zxd0RhTlFHNzZiZzNhVEdVTGI1Nnd6QTIzUllvYjZoNlRGYU5aK0JtVEFtK1RjWk9BMVNVNEgzU1dvMkcwbk10SGtGaXZWYStxdThVUU9FV1o4RDdHQ0t5emNZTG9ueUpTYk5BbWRrK0REN0RXTURYNzA4WE8zQlhsM2Y4R084aVhxd29Mci9Da01MMml1MFpVZUhzQ2hOSWZJUndYRlluRlRGSzU0Z3NZWC9kR2lIbzRsTHVNeGVDdTNZTkdvOFdpYUhOV3l2aFZjaVdvanVxYVowNmg2M1Foam13c3lkZmhFRGxkdWtKOFZnYXA3VmVVdjJBSVI3NjlseVFVQ2hkMnZ3WElreTYvTDArTU5GQWdydml2QlV6TWYyUE9pU01mdHV4TG93dndPLzFBcFo0bGx6c0s5dzRqMmRDWUZWRmkxVzFKMHBUYUJHNDdLK0lGTUZ5TTkremd1dVhHK0JBempVRFBsV29NejlDYTF0blY5RjFRVjVhd1B5ZEluSEdZNDdSbEFzSDlZT1haeEl5Mk5qdUFmZnI4Y2RHWFlkNGFJVFJqSXpSMEFxRjB3TUVxYmNSMDg5bXExSGVMYVhyT3ROREJkYlFFZ3FXTnpoV3JSNkxzRW1UTXlJN3orbkMyTFFFV3l0NzhTbVRsZ1A2VjFEOGYzbUJxcHJOYis0d004S01RV2U1aDV2NnJxS2JFai8wN21nZkhWNnI4NnpoOUYrRmE0aXZ2QllvdFY0STVsZktNTzgwQlJUN2dCb3FRbEU0T3RYOG54dXNyQlUxcGFDZms3SEowc2xlZ2V1UmtoNW0xckduL2FvSmlVelNKU3lzcjY3MFNJUWY0VWdKdEl6L0JOK0pkVWdYODExcTVtTUdRUlM3Wk45M1V4c0dEMUZ4bXJDSFNNYW11bUh6WGROVmViNzh2RU5UazhQN3dSZjV5Q0ZZclNRQ0NVQWZnNGJGMWFIWGJLeWFPdHZ2VDFLdmNBYUtHM0pzVjM4dEFMelYyRlRWOTRFS0c5YmcwU1Z1bGFvcHhFWmxKamN2VjdqK0U0YUxFSUtacVJRMG1CNGs0SVU2b2NhbDd1VVJnMi9oWDRpY2J5U3lVNjU1RUtjdmFubHN5Q3hCSVc0NWczZ2FFaUsxL21wSjdnb0gycC9nUFpMQUlVSVlQMGk0Ym5Rb2h6bUQ5a2VKK04zSExqblU5WDMzQ2d4ZnRhVmtRVjFXNVZHTEtOSVQvUk5rUXlwb0FOUFJvN1NnWjBDdkJraDA5S295MzNxVm1yV0UrWEFHSGtrYzZVNzdnL085bEhKZjJpZ2pjYjVjb3pyYVgvUlMwTlNwaHhWWFh0M0dJdmpvNjhaQmZlYWVuNjFHMDA4Yk9xY1cvZFJKZ0c5S01hMzcwS2JhenA3SDYwTHloMGorVWllVitHbklwQkVPcEJqVVhucDNsK1kvOWN5U3JLYVpOckdtTVR4dVZCSDh5T1ZSZCtXSnFJTWNFWjVXckEvYVB0SFFQaVppanFqWFNMQXF4Y3JDZTFDcFZoZVZGZWdKeGVBK29Yek1iN0IxdHJwS2RDVHpZNTZxNVlIeGRpcWQyVHZqbWZEYzV1dkhtK2gyK1JqeC9lNzhuVEV4YmY4RHhwRGFhMElwQWJmRnlnTjZhSDVvaDZxQ2R4MWpMRWsybEF0WnF4d3dyRk9lUG1La2ZTWGNUdnJyMjhKKys3bkRFd1drVUljTkUzYVVaRHNWbW1Cb1JlYis0WEprcVdFR1NmMThJSDJob1BVazJ5WnA1RUUrUXltV2drTEpBaXJZRlgyTmwrcjd4NEVXMytOTmpybFI5RVlqbEk0d0RTMlA1OXBuZDA4eFdlczBoZlc0NndMN28wdXMxQzlrZ3VqMFM4SklWenoydVlIRnV1cnFaRnd2ZG40dndJanVXUG9YNGMyWHZlRG5qWFp6VkxSZmpGb0xSZjRSYlJEcXRON01yOE1hSUxBOCt0QVZ4UHl2SXVpMnZ4eVJ4UWZXSUprQmhMZWdiWUxtS1IwcUV4dDdVcUVJcldxN0c2Kzk3L0FoYWpHeEdlejlGSkVtSkdJeG5UQTZkcmZkMkg3RHZ1cmg5bWdGdHRXYWN1VW5MWHhGVkhOdVpaMHRoaHV0NDcyRU9hSzFFUm5RYjV3ZUdvNjA1MksrQVJzbkRYOVNUVzRyOWtuY0dlbUxIQ01DNjlPYStsY1JLTm0vMUJhWXFaWFVzaDJTM011dzFMeXlYdU1PVGpnd3hmMHQ5UVM2TEFlRXJJaEpEN2pidXIyeU94Q1NYME9NOHpxOEgvVThEWS9LekhMd3ZxREZMYlBicUNoLzlJd0hJRnlOVk0rRDNnc0p0M1JNbnZleHkrWGp6Y2YyNDc2Mlp1MnJqZnczaE0rRys0ZEdWNVhwbmlpM25iWkZkUTJvUXBIQXpoN0lBOGM2VmF5MXZWY09IOTh1MzV4TlNDRGRoT3JFNFNwS05iOXAwK2NDY0FTaDMxNGtPeFNDQ2FrdHB1SlhETk5Sems1VGZtK1pUeU9yN2lpc2h4c0Q3eVdaRFl5ZTQwRjdsNWV1SU5kY0NhOTRFWnBkVU1jbDBrNlozay9VKzlQOTh4S2VRTVRPeVVVUHZKZjRpcy9WMVE0NDhkZ0tWbTJuM0NJVlF2L2ZYbzBUcUVtTmk4akRtRTdxZ0ZoMzdPaUtLMFpBTFBZaXZNVnJucThLNlVtZGdhb3MrSVJHS1ByMk9Gby84clkvOS8xTVRxdXAzTkF0V2Z2Z1k5S2RZSXlrbXVLTXVUL3RqVFZsVnZERWM2bC9vN2Z1a0VMNVFsOUFmRlBsb2YwWk5oRXBTcUZEZGs1akszRGZnUGpnQXlMVFNvR0lNMm5uajVpb0M2RXV3OXNvSU9iNkVrcTd1ZW51a2dpclFiZ3hZcU1XKzB4L2Rnc1cxamNLQUJvaTRzV2VlbUhOc0ZMcFdvZENTKzJqbE5jbWJTV3pXUzJsK1JhU2RJdS90VmhOenV2R3JzS0RROVRUTzRTSXkveXRjYzhYb25UUk9ZMnNHdzV1Wmp2eitZN0lKL1NoRk9ZVTBYd1MxR2NSMlQrQm9zc3MwN2NUd1ZDUjJLOTNkbVVnTlIybm13NkFNaG1Kc2Q3ZDFaelZmeEsxUEZwamVSTW9sTjdLSC9HaEtHajVpVW54aEREenVuSjlZblovYW9QK2ZBNDR4WWRPYTlzeVZSMGRGQ1IrZ2pFcXBRbDg5c3U4WFJtcS9DYnZaMk5HbzROYUp0U015dnFQY1lQdVNjc0RIZU9nOTZZRGFOMUpqSGtkK0prR1dUamR0WWE2azlYMjdLV1BZWDNnSEJaVFkzWWU5RWFNRWlna1lLZTZ6K2lMSlpOdXNWWlA5VVNBVWpac3JJNDhDUkhjUCs1UUcxZVNzSmowYWtFMnpZMFRkRHJ6MGFxSnZDeGRuTExQUWNUdkJVaU02eXdzMW9GRld0OU9ucjQ5ZDRBZFJpdlJGYnAwVGhIdURzTUlVV0pkQkczTEZpTjFXWE1kQVp0dmluRjNraC8zd1F4TWk3TEtDblVhNjNaM2cxWVRRWTluY0JLRFIyTGxodVNBQWxORHF5d2tQRmZ4OEtTM1Rmem1Tc1VkR0h3T1B6dktRWXp1Qlk4SEdBd2NWNEdLaEVqNWFYS0tTZ0pjZ21WRU1KM1pUbmthbkNXN3VpR2lpd0wrZklEZkpKZEZBYWM5TTJ1Qlk3WnJjbjJkK2k1ZHN3YkZlRFhFN0hOMHQ3TUxLNXNBOG5UNzZHUkZIbnpaY2MxWDlnVGNWdExyUEtlRC82Vk8xbVdhNGhjQ3o1OEMyV2lNQ09zU3pSSlN6S2FJaVVCdmlubG00dXZ4ejNwUmpnUElkNC8yVzQrZ2NuNWtJRC9mYnVETFQ0WG9XTDFXck55bTZjcS94ZjZ0TG41d3poR2xzTGp2UHpieDh5WmJlOW0vM2o2UHB0cDNLbGhoZVNVaEVhNzdRejlCT00ydGovZzJaNktqVSsrWm44WW9WcXNwVnVxcmgvbEx0NmdoSkpZMHI4dkZwbTVzb09uL29vS0pLU1pWcS81ZE9nNGhQSkttSnpiTThNOHhRbENGWVBSTldYdENiVVR5TzBHVmxONkFLQk9FaFVuS1ByempVMU9PbUtxVFpaNXgzTnNoRFI2YkhFNFpSck9ITkkzWDhYOGtOWndVSFR0bnkzMU92dkp5U2pCZ0Q2SXVBdThiejdEcWUyTG5ub1lBMC96dG0za29Wd0ZFZEZ6V0VOMEtSSE1yTkt4SWMweXNRNGgxRDVreTNPSFlCbE5rYWltMHFjbTh4UTdOZE8vdThEK2FSK01aenFyQVhnTUZ1WHJzZTBPSkNnZFJFSTIwY3gwbzZPUXA1WDJsM2pZZG5ybnlYbFQyWkJMR2lCVnB2b0pQMzFkNEhsMXN1NDB3L3R6a0tyZ1RsYXRPcXdXaVA2Wm0wRzgvQnRKWG44WFMvSUs2TUdtQnBhSzdRREpqNG41emlyMFU5aW1lTXNvNi9ZVjk4MldGaHY2a3JGQmpiMzFjR1pSZWRQVUJ0TVZqREdwQ3NveGFEcjZXeGtKcWJCY1BpL0dWTnhPVEhRV3BiNm5VWHR5UzA2emhtZmFDQXc2NUIrNjVlL2lkd0ltWkZJWkYzV0tQRjdzQ240dXoyL0NWVzNHZnVjZWtCVHFWVEJoUmVDSldaMG5SNzNJTkJCZjRsRmFFVEpVYkZFTkVtOS8zUFJESTNLc3E5dks0bk0rMm1HcHUxUk5nWTEzamFhQzJvU2J2SEhJSnN4ekFxcUdBR0dGT21IVUEwTjNaVWJjcCttTUJrZTZqRFZ4NzhDb3dPMngzR2kwWUM2YzdZVVhPYzBwNEhreG1WanBOSmhqUVcvVkpwZElPMjdVYVJkeTZKZG5hRklTT1QyRll4NVYzc3FGaU5YRENQUXRvNGhSV1UrQmVIenVHZVVYd29qZVRCa0lycTMwVHVjcXl4bE15TXhwZlBuYnhNL2IyUnVTK2dxdHMyOXJHWjdCV0FUNGV4bzJza3FKVGlZTEpVckdnVmtoU2JMaXRIK25HVmVwMU1kRlFlNzg2a296andFSTlENTZhUFUyZHJtcnB1d2tWRHhFbm9OL2JZWXA2ejRUeTlJT2VpNEFHSDg0YmIzNXJ3TEtmaWRQQ0kvUTM3aWxabXQwRHI0QkdzTlJiTmRDWDdSU1hEYTdkU0o5UFB0NmZyNFJWaGh5SzJQTU9wbEZtanVzd2lUMWJmMm5ieGFQUU5FTkk2dmVXMW5nNGZKZ3QwcElSc05PUGNQZ0dkQTBML2x4TTRqQldYWTBkc0p2WUdYd0thdDNmOGhraHIzM3NWM0M4dEVxUnVnY0ZrZ1NiR1ZrRlJhWjhIb3p0VUpNNWFqVzk4cHIwU21Eb1ZMTWs0MXhYOUhvbWQ2UGZaTnZhRzBpTE9JYVlrdVJpS2ZSbnFxaUpITllyd2ttUk9IZENnTll3STBXcURQRVl3Tmo5YndRTXhQREpUM21ZQ3o0Nm5FbmNOQ2d1T1JlSWMvWkJLekNKT1h5Y0t6c1c1S3VHbnZnZ2NzcG9jREdLRHRKQTZVYVhHaFZxUnN4Z3NadnRZRlA2bUtiVStTcExaQnN1eWtEVEVYNVNqclBOeGdKN0JUNUVkTUNyWFBqYllEa1ZteE95cWtNSEl5TkJGY1BSYXVjZGV4VDR2QWp0bHpscGlZdmJacmQxMHhlRkVoU0UrQlJOeXN4WFB5Z2wvMkViUjdSaEtxT0N0UWxxQVd3dEJGeml6d2xRdmM3bkgzVjZKdld4NnpDaDB0M0lBeW14R3lXdVovZ3lFeVRxWjVmVE9KRjZVZWtjYnI3SWJseVVYSkhEbFJmT3F1c3haWVgvSzViM0FLRmFBUGRaQ0dJSFBSZGd4TURYMGEzUmt3Z1B1VHFzZFlKOWd4U1E5aVJqSlE4UkFwVnJRSGRFUW9KUWtCYitJUlZ0MVhXRDV6bjlwOG5xc1dVd0RLZ1JIVXJyS2g3MHBVU1M2S0FDNnF5VHRIVEV0aVZwY2dmNU40ZFZnWXZzbDlhWkVVUURjcmNSV0V0bGgzaFI3YXhTM1prd1p5eUl1MWpQNHc4YktzdHdJM3ZuNkI5N0dTOUxHa1M2UWJXdkNRZkhYVFpxZWRhY0VTN1p1S05Va1BxekFRYnA0dzlzSzBTS21vYnQ4S1hFSGJHVVJ5Z3VzajF2eXYyZDFWTk1aWlNhemEyWUhyNi9wdSthclYwSG5pU3FObVRJb1hFd1RSajErclBCUjRVYUZDcVVWUFVHNmdESERsVVY4YWRmbVVVSGdoVE8vOXlnUTE2R3BKZ05ZSWd6UDI1WGJ5UFpLc09KQ2VvRGEwbU1tcjVIVW1kZERnMVJONENzb0hsQTJUby94emRmSXF6eE5obXg5Q1NQNk0veGdiMHJWUTRjSHJZbmFiSFdiWVpNcEF0NDhmN2JubUNnTDBXQmhjOElCRFlHZ3ZUVVM2d1FMYmhSOUY1cStsU3ZZZkQyY2ViMjZZS09HbUtTWTgxOTNNa1AzYTFuT2NqcityZTNBQ1MxekMydzYxNXNUT0Z5ZWhQMDQ0alVBMEt6Y1EwTmZkVTNraFhELzVHQkdyU1NsRmRpcjNteVFBbU1SSnY0V0dUWG1vMWpSbVdTWk9hNUNyRzl5Ynk1Mnptc2czOGJNczhCREx6cE8vOVhIWlh6akpQbFNTYTdlYk95TVZqMDhpK1FzTU5TZ1p3SmtnSGdJQ0VTTmJpRjlTeUdWZ2FCbEIvYlhseXZUSStJVjgxcUVUdDdCQWdPcHA3TFRXRkN3UkVZdlJDS2V5N0NGalMwMjRiRmU4WHp0QnBVMVNXSWVXN3FOa2dDNEZCdHB3ZG1iaE5kVVlMZlpVRy9TWUI5LzBnYTZjTkdTMGJoV3IwWDhOWDdqZTJwK0ZhYmhScVpVQkZnVnY1anI1Sk1WQ202bjhnajY2anVUcXBHcUtGdnFudnhpQ0JOdG1vbVMveUJDOGFUMTJFWW83bjF3cmdvalNnYXlKY1M4eS90MU52dm5BYUtOTXdaZFk1ZUJuc29JRU4xN21JTVJsZXo3YWIzTHdtV3RObmJrbmVPc0E0V3AyMmpHdUF6eFB5dzdSVmd0b0NBQTlDekdNaGNISFRDUXBEa3NjaEthVHRjeWcyUTJoT2VvYmEvODRNTFNnRldIYldHc0MvT202RFRQWTNBRHpiOElJM0xZN3FVYk9Hc0kwaktML2lIckswVzVoN1FzMCtuYnNFbmVXUWorSHVPTEZqSHF1YjJxSG1hMHJoNGU2SWwwZCtCNGNvV1dTNkIzbEpzOFArVVBRWFNrRHVXS3labGw5eEFlODhTY3lwS0FwaVUyRFpWT2VhLzhUd2l1NFNYZmxDOXJVL20wN21mUy95MTN2dzBxQzVUTVpKMzFmTDhWQnBkWUczU0JXR0VBUUNUVGhORkRnTEhSaFNsbzFVWnNSU0VjSG1IU2U3MmZkei8xaGs0UTNISGwwcWppK3FGWGFBLzdTR2w5OHhpbnhQcG5RT2JldUViU3VycjlRczdISU9lL0hiWWhrMGMraE9Cc3cxVk1RMTRzclJnRzVETTRRbWtJS1g2enRhbnlYbEp4aUs2SnJwdWI0d0JwUEZBdDFxWE1UanF5aE5wZjVVK05ocy83K0FUeGhvbTNrWjlxa2JRZzUzMnZ4MmRUUW9sMlZMbTcyL3ZuSC9vRTZLdlZWcWttcjRSYVZkVCtndERsVXdILzNoRkI4dGxzem02RG1Oa1ZsNE1aa3lJZXhZandxbk5wMVQ3WTJpdGUralBXWkJuN1lmaFowT3F4K3pONndENkl5ZVF1b1Nvb3ZreXBIOXNDRlR6REZjSytMWHFGL1MzMGV4NlkrY1pEMXRSWEZNSWplajVDTmR4dEdhL1d2OHRYVU55bWhxemltWmpTQ0N4Uy9NZDExYUJZdDRVblhDSEFSb1NqTFREUXJTTnQvcWpwbkpqVGZkQklsMk1FNzZBT0VQL29zQ0dTMG5RVGRhWTNKTXp0OUo2M3VYbnVMOVRkdHVtNTdvUDhESzRKcW8yQkxxOHIrOWVLeUJVR0dvaHg4NzJicXJ1c2VnSThONjIyTWdSbStyYWlEQ3ZpbTRzait0MG05eW1aaVZwMnI3Tk5xZGdiYmU4ZU1pS29UQVcrajhJbVF0bnV5a0hucThTZDVrV2wvWHExVjRnOXhSR1N5SEJGa1dYU3oxblNsRVJsSGhIbXZTV1hiemhxZm93SVhHU2ljMEI1cUt0aHdKZ3BwUEhuYlZvQVhoNDcyY0FmTXEraXZKMGk4TythNFZZUW1sbSs4dFloUGsxc1pDU3BuayswRDN3aDA4QkZHRFEyUHY5eUZQb0w5bDdKU3VSZjgrTkFGT2lrNmZxMmRTZTFHcGJKWU51YkdTTTJjcVo5T2V5WUUzSDF5VFBrdkRzRzRjNWtqMms4cHM5UmtCRHptUjliMnN4UFpmbzVYVlZ0ZWNtQjdvME9UdzByUDdNNElxN1pXQnZ4YnlEOWJueHY1Z2tFQys2emJWeVlQMGFVUlRyL1lQWmE1KzdEQSt1YUVleWtrQU85dzJMVjFCQ3BhMWcyVEQ1TENkOEl2VmQrOXA0c3VkanVwdE1EZGZvYVBsdTB2Z0xNUkpkYmd3K0ZYNTAwczFKMWFTU0FQQ01QYTJtL3RwUW5xeHNvbk9wSnQyM3I3cXdFcEt2eFJaL3BBa1NMbGZKZUExdFhiSi93a0hFU3R4MWE1NUFpL0NNbHBGZkQrR2NvQWFxSkx2WVU4bStwVThyQ1ZPcjUzNzVlUVN1ZFc0S3NZOEVYdlRWaUdoOE9QL3Q1YThRRmZLelZZaUYwcVUyaDNCTGZTUEd2Wk9HcUpLNzRSSlI1MmRRRXoxdCswNnp0OU9EcVpVNnZKWWFjMW1sdzE5Tms0dDFpZlBnc1B0Ylg2M3FUbzNYMzJublh3cEY2WFFqRHppMUJUOExGSWRvd0ZGVDBsTGdyOGxBZjNzZWtmTi9UQ1dteWJUWHBVcm5CY09SOEhWOENlVDZYdSs5ME9GMDVLYkRDdXAvQVBKL3BMaGl0aEFDeldjckVlL3RENmQxbWtsclI2b2NkK1dBaG9UNm9FV3BkcFJHOVYybGtMSVhPMXdTOVhJWDVPTHVmclY5bFRwWXA4NG15cjc4OFBFeHdCWjZBalNvVTJXaDFTczltUm1ob0N3b0RSYS9hRXFRVDhTTDVaRysxUFk4OU9BR1U3bWxiaGtuejJ1dG5sZ1MwWFM0ek5BRS9kdEtXOHJuRHRWaHRSOGNFSkdnbUJUNTFwcGx4blhnbS8rdzJiTW4vaEsrOWhWS0N0d0Q4SmwxcFdQV3pnSDl6MkQ3ME5iQ2ZEaTVvK0dxaUpzd3VjazdXQXFrY1Vub1FTbmZPNm1WSnIxeFdZOFpzNnE4MFFDSzJoT0JqN2VUeWtnVGcyd1VyOWhaSHE2QW9KZ3NSNFNDYk94ZFlMVi9DcjdKRWtpRGd1ZUIxdjQ5UGJQcU1yUWpKaytzK24wMjA4Ti9LbTFUN1pDbzBTK09kUlY3bDNSb2ZYM3puandyQmFtSkIxUnM1RGxvblp1WDk5aEMxcVNpdnFHV1h3c1oyOEhmTmhVOVdpRk1RajhieExRd1ptRk91UkRmQk5yWnpyUzdZWkttREVoOVVXUjNiWFBmUm5zYnptZlNrQldYWElGMkwwRmZjN1RvdkVQYXJVbEFYZlViaE4vamFZYldzOXNjV3B4MUtPb1Mvd3NBUFRDeHlIbEU0OXQ2YmVhcXBJbHB6Rkdqa1pETFo5SnZtSlJWUnBQbmxHS1VWMm8zZzNDNXJYdFFzRG9iYTVSSit2QTlMZW8rUy9sUG9YTHJBdDBLM0dBRmwxZHJxay91NmdBVUQ2WGRZMVFzeFZUSjJSNjRGRXF1bXJEQVA2Q1kxS3NCd09IRnUxMkZOKzdSMEY5d3gzK202aVNCODdVd1Rwekk1OE5JbzhrRHRkRFRHdWNwTDZGSjZQb0xyMkdvR3lHOFFrbnp0elRJSUFHVjNiL01FLzFDaUZqcXVsbm1ScytRczdLTTE3d3h1YUxNUkJIL1hBV2k3blBuSlNkMjFNNkhyVzE3QmlKME0xMWFlcXRFN1FJYk9jUW1QRUs3MEdYNW5OOWRSRFg2WVF4bzZwUHZKc29IdXc4OUNHY1FMSFUrdHlvQWFpNFpVTFR1Qm5Ic2tWOVo2ZDFPQ3c1Nkg0YjZuMng5enJUTTJLUm9ETlZtY0JNSUY5dVFFQWEvemJtcnJwQUtncU1LS0lxWnpKK2dlendKRmJxaC9jUWg3REk3dG05UG5wRmZqMXMvcEt4VEtKbjVDcU9RbTFsSkhDaDI0bFpONHFOcFFmSUh2aTlmYy9TSXp3d2dUcTVVMnJOa0ViYUVyOG9DMUprQ0hkWWhMYjAwQ2dpamlUYjRKaUdLVVZmQm5HRmRmZFlobzZFdDZiQUpwMWRDQlZLaGpSNVRVMnBBWldoZkk1VkZta05UQm1TN2ZBeGtwSXpYMm5UdDRDS2dHd241T09aVDcrbzAxbGRBREhSQ2xFQUlETGgraS92cUlJa1N4ZGt3eFozRlZRK1NUNkIwRldlaVk0bzhocWRVZW5NdWVKV29ROThvZFVLQmJUSlF3aWxjeDM2L0krUjJrbTRKNDYvZE9GVjkrYXZUdUVIaVRSSVdvZjJJNWdLSDBXVEh4YTNuVFNvMndCclRqeDJpc1NsS0FyYnJFT3p5VlhNL003RkJhemhWalRURlFibkxtbXlUQk1tQVFxTXhaRk9NUnpKOGtyMG9EM0FteGMrRzVmREplVXBMZGtkQnhSVXdPZ29tbmhIcVgxVlNtVU1ZZ0d0dGVDY2RqNk5lTWFGOThHOFIzdVYwRWlWcnBMaEt6SE5jdmJNV2Nmd2pFQWx4WG03ZjZ4RG04ZGZ3RCtZL3JVUVlBN2wyNmxNYzFEVmNSeGtvRXorVHN2SXNORUNzQzZXMTVadGprMEZ0cHpmVW4rNXBMa0JBeDI4N3ZXdzkzV0FiUVNyK1pSeXIyVlJnYlJwMnc5dnNFMGoyWDYxTWZjV1lUSmptVlVhWFVYOEhpR0R3K2VrQWNEcUhucStleXVHUU05RmNPUjl3aHdOVXFEbm00U0s5UHhzYWkxcXVjQk9LUFFSRVJaVTBPbzNFTStqdWlUMVFtakxIUUs3TGdxaGhlQWZrVkovWjhzbldib3g2aE9WWjg4Kyt2Qmo1SVdHWUZKOHZKL0tjdEFmSnRNWmJEdVVZbDkyZHJ0VXUxekZndVdMMms4Y0oxd0x1WVBKSk01Z2pLRXJDcmRxUzFJTmRxSHhqRmhLOVc0NE55Z3QyRG5Zek5IZExZYWlJSzNvQ1JxbThaeXZMcnV6MVFHRGZhT1dSN0IzTWFzcEYwR0ZiNHFncmxBSHZhQ2xNeEpINWR1TE4yUEtPN1RwTnNPTmRsRHNUSkErRGJobUluR2hjQnlzdmtLd3U2ZXA1ME9BWUY3QVZUZE91N0xUaStCc0x5VVdtVlczWjgzY3U5SnJEMlptNHhwTzQyTm41UmRVTzdWcHN0T3h3dWZxUVNRUXRHMktpTVN0bXhpN1JLUnpGald2V3FGNmpXMVFMNEk1Ti9vamI4eENWd0VPc3lzV1NqdUdxVU1oZlZtdVdCNE5iTHBpNFYxYytIQTJBdHBnMXlZcmgxeHUrbGhDQVJnN0hBMFBtczY1T09TUTl2QjdySVZNWlFlZmNSTjhjTk5FM3JyTVl5OVc4VmdKQklPU2hBc3hpQmxReEhkMElHL0t4SzNzeEFsUVpnOHNmNXZKbVU1aFJQZVVFV0dSbkJQM1ZRLzdHWU05NVV5NnlnblJNNlpoVE1IQ29aWW9LTUVlWHFPaVVUQzR6cVZvRFB3OW5qSUZ1aGh3cXpqMXV4TE5LeUc0WEdtMGgxSkhjWnFVM1FSRlR1U0Y4cmR6NDU2NG9WWWRNcmRtNU5HOUg5RFFRUzlEMVVuQWJHWnArT0NEL05IQUdlSzl1ZFF3UVAxSFgveFpsMVpHQkczbTNKY2VMeVUvWjFQS0p0SkdDMzdVazlkblFHNnBaMU5SSWRMV3drK0p3cDZvcm9xVUtUc0EzN0VveWtsWG15QWVJQmFiYTNsc2g5cFROUlEyQUxkZWJiUjJ1bDBLUVk4LzJ3RlhOTXAvZHdhcHd6WFJPSzBGYWJKSTJ2OUhXZXZ5ZmgzNFBaTWYyNEpweUQ1SE1mVUFaOTZlMThmdzlVVnpHV21qdzU0R3V1QmtVOXdncG5DQkpHMDFkbzJlZ2pjYUlhS2JyM2FDV3V6RlF4Q3VZYVR4Rm1oRTlOb1czbkUvRUx1K3NWTVkvS3ZWdG55NnZFUmtUOTRqUkd6TUZHdWpCZXNDeWRrdTBXMmhhQk1tTm90TEJSODhGMllGN1lEaFYzVEpVRTQveW1vbkhhWEhKSnlrU1hMbzk3VHpabm8xRmVOOXkvSWkyT0I0ZS9DVW9tSjE0a0xsa09jeUNOL05temdxL21EdGhlQi9iM256THpqSWd5akZycFpkb2hhYStlcVU2NjAvRjBrOTJNRnRxS0w5c0M1S0hKM1A5ZWhDeUpIUHJJTW8rVGk3cGw1WkZYT1gwcmNoU3NzY3JnR1lkM2ZtaVl0VlVWY205UXR4QkYvRkRFd3drL2lGTFYvRk9odTF6M2NJeFJuSWQ2MHA5RCt1dGthTHJaejBzaTZxQkFwMmFiTmhhSytzVnI2cjIxQ3RLUFgyUk5wcnJGd05nUHROemNmbzBLenlyV05ZQWlkNit2VDVscExxQjdLbmMvOXpid1lJVFZOVkI0TThvRnA5QW9oWWE1UkJpUGcwMENRRWR0UDQ1TlREM0lwR3k1V2JjK3V3Q0grMWE1SFl3b204K1hBU05DZEt3bG4ydkROenduWTNiTmJpL3M0MXp6c0ROZy9sRVVGaVRtOWtnWWpTQXhXaVpEZnBGSzNkUWJZMUF1eTB2V3NOWTZ1cWxJdk9YditXUzh0UXRUS1BPQmZxWTNnTlRmelNiYVZVSDJqRm9rOUdpUzN5Um1pZFdidHRlOHFMaGY4T0pnd2JiS05sbUc4aFhyc04zSFlVK3E1a3RObHl5ZVB2aFlRU1d3Wks4Uk5GZXo3eWJjdTVCUVFXVjNoQVJDT0pGbm1PVFRkY05sMDlqS3dWREhIdmlyRExUK01nMkg1dEZDRGMwTjBNd3VCWDBEU3NMeDl3Y0NjdWZBZzJyUDhrejdPSGVqUGlKSTlJNmw0VW53VFY1VEI4aE9ybmlsY1NEMm1LTGVRMDczWFNvalpUa1ZtcDVMdncvRSt4bDlIMEc0WS8yUmp1Vnd0T0txWjBpeE1OMHQ0UWE4SUF1SG85Z05QV0hDdkpSVnl4Q2tJSkozc1pQZ0cwUWlTb0srQVF4dHI4R1Q5ODFibjRQTnlCN0tjTTR2WFM3bDFOY0ZIUUFrLzBESVplci80Q2FFNUVqU3FlNkdPOHhpdDBBdEVOTWNUd3NocmpRbUNYM1l6SzFEa2NZNk9sclkxa1l0YlEwUGo4cVZYSE9ITVJFVnZ3R3V3SytvbHZ5ZWJqaHMzN3JJTmFwZWRSOEUyS0NyTkNwOWFDbXVaQmUwQSt5cVl2clY4ekVuUTJCVkpvb2lrWFNmN3NONmxEdkxONE5jZHN5NEp6aUZ3K3VLYm1NL2RkYUFEMm10OUpBOVpqM0E1ajBLY0Jpck15SGs0Y2NwWHU0a1ZLTVFiamJMR1U1b3hVdU9ZYkdhTmtIY3Y0NUo4b3R2U1B5MzFhN0Q1RDFYa3B6TURDUUUzREFzNkZHOFBiMVVXZ2JQZ0grS3o5ZVFZM0Ira1dnMW5mOE8rWFRZNkVRQjAxMmhwdnFFWE41TFRGTzdxc0Qrb1IwanU5OWJOczdQc3VwWGRRNzQxbVpPOVZJQ2h3YzNXdDI3QkgvRHNTcXpLY1hTTUhDM0p6QjloeWxyS2oxZFBuZzhOQTlBQ2tsZVlzSXlTYVVvaCtydFp5YmVoSXVLYy9aamFKWEUvTXVUN3ZRcE5VbXU4cm4yc0VpbVZyVGorS1RhY0hmcG1vRUFvaGpIVUx4cEZCWFZUcDRRc1hkZmptM2pKays5V0gyWEt1cU54ckhjc1l3ckE4UTVMd2UvL0R4Rmp4TWx2U2JGcEx5c29TSjlTU1hhcUVLRkZRUXg3SDNrbnNmOWlLSXhhTmNJc0o0T3JRR2NPUWFEVTBpQ0lqLzR0RlpleWRhdEdZbUw4eGMvdUZIMkcwR3cwNHl5T2tvRVQ0NVlLYUlEVVZjTDFubVF0L0VCa0dneThQeGZ1bjQ5ZlgwbytCTE1WamtaaXdGZzNmRVBHUFJzYUt6Q1ZuZkpST3FtQjhRa0UrWE1oVzFuOURGVUxvSW9zVC9peVkvWFhFUi9WVEhBVFVEMFF3eTBXRHlJWWxzcWJCY0VuTlBZUTBIMUM0UE5lVGNZRzFRbHRrd0JTSnMxTEdOSWFLS2RsV2hOc1NsY2FUcWZsWU1yQkc2SHFnUHFkSFA1RUNMNTdYU2YrUUlaai9pVHB0a0tKa1F6Q1hRZEQ2VWFlV1NOWmk4VmlmbXN2elk2OEM4VDRVNUJZa2tGeUdURUtxc29vTDdTeVdESGIxd3ZhZVA4MDFPTy9WTEhXNDREcGpYMmpJSnRPYlp4eDJPT3RXWWh2azVRRDFOTnFkcTBQQUdPZlhnQXhOK205QmpFK29hNWljSkc1K1NnMC93RTBJRHRwNWlRR0tkd0N6aWJDMGx2TDEyUWpXZkJhM04wVkp2dUZKM205dUE5eTRValJYSVJ4UGdGNElzRzkwalRRRUg4VHZzd0lhNzFqRVpGSzdHcjlSblQxN3FNTVQ1aTFDSHg1Vk81Q3ZSWXhIYzloLzExMVVYcnV2R3JwZjlvd3pKaTFRMCt1Ui9uVHRSeTJ0M3crdWVWWG5uTUVvZVpwakFOV2RjZGZDMEhqRzVWTXpxMVJXQXpFTGRGVjNDYk1MTktseW8yNzMzdWxMQmlEejBMbE10aXBVVUNSU1U5YlhiMVlOblA3WDd6aVFnZ09OVXhuRk1pc3g2M1JiUGNLU3U4d1JLRTJ1akZBMXNlR3NjMkhvMDhsTmFRL0ZsUC9IRXN6Nm9JeHBOb3VhNUhmSXhrM0FuZ2Y4MkVIbVphQWpheHZPR0xRMFlDeFdVZ1ZsTVphZ3lFT2Fqck9ucDlieFRocEFxMXl6M21HLzBpaE9yOEpFRDBEeFhHMHNtMEc1SGhyN2VYTDF3YUs3a3gzYkg2L3ZhckJsZmRSVFBKNlJwNVlxL3pqcE9UYmhPVzJwQTlkS1dsZExHMUJOTS9mUHVuemN1VzlncUlxUWtnQWt6RlloSDFmV0Z6MTFJL01nUUtRUklpRTBUODJRU3VmdzlUSVhIZnRwbEkxWFlwUTJ6RitsUm9WanF1VHFycHV3MUlJQ1ZuV0trS0xFMHRoOWdqWTFEZ0JSd1AwdEFpcC9LamNBSmI2UG5lVUpoRUt1OEFFU2REd0dLUmhUbEV1K0wyMDNyZ0dUTlZoYys2Y2ZPeXlMRi9FVTd0b1J5bmdOYnpHOWlSQVBiNXp2d0tGMFhlY2pvTm51OEVsRlhRamc1R2hjb0Y3VVBMcElETzhxdXlGNEtGNG9uOGNHejVreHRhY0l5aWRZNnppbURhRlNLRTJoVFRhT2sxRmU2VDVGWEFmc2JOTGFaaDFodkRheWNBMTdCNjVTellHRC9FZ2w0aFVkWGlGdENla2VYTTBxN1ZROTNlUmIxY1VrVGcrSzZ1dEVRRUdaWnFRWWdKeTduK3ZYWElxbmhPVWNIa05CaFBGMDlXVndXVW83NVEyZ21uc0NobTB5Q1RWZVhpcC93bENzY1JRSE53RlhaWHdUcU1wckZFTnZrYUVoblJRYjJDbkpza3R1TXc0dkJuRFdFcm1UVWlQSm5HZk1EblYvbkdYakRwdnhTbDFSQ2h0VkJCOHA1YjhWUm9vOUtoSUtmZW8xQzFUWmFNd1lKTVhDTndoakRtaldYMkxCSVFpWGlsQVZWVFptdTEydVJtUlZJWm1JTDJib3RXUHJxWDIrbGQxRjVZdlk1OHRJZzBSaUNFUk1LendXOS9wYWlNK1hBamh4cS9WMVJ0dVlYZFNXTng0SzdxcWlvSE8zZGxDdGxkUGduTkpwY2lYSldrdGxHUEl5OXFjeUpCQUptVmRNMVV5aTYrdENKc0xSTUx6RWFuMlhabWxlN1RYT0dManhwb21uWURDYU44UHlLZ2VISVpxdGd3ZFIwMklXYVl3cXUvcVZTZWFXSFRtbXZMMVhodHFCT2FpaUd6b3dpTkhhT1RXR0d2T3g4YzJ1bmYvYlF0MlhRKzk5Zy84N3R3L0Nkc1Z5UFRDa3hEaVFrNkkzTGpJZlpaeGtvczh1cEk0NS93ZVNCTHNMOU45OUdNTHZ6UVZJUDlIQTVkdG9nQzg5M1BEZHB6VFpkSUFYbUtkSnBVUFBSYkFPM2o3WE9meVdwaVV5Qmc4clVLSTJNWjIvRXp0UVF4Qm5rVCtGZVBMREkva1dRcFBqd3B4dVlmMDk2Z0h6QWRvTFZqUE5PZHV0ZE9FSmxMSWdBQ3VlR2V4cThlQU0vK0J1OVFDWUdlU01BU0xLMUpFbVhndzZpOTlzVVJlZEkxUGFadmoxejgrNU5EcUsrejRISkhQNkwxWURScCtoR1crWTY4UHI4dlBzZXI4TkROTGZLcG9mcVl2SnRNVThGNFZURkppK0FocG9MdGQxT3N4aXJYWXQzMVpCbXRtL2UxWVNDVG9SbHE5UHJDV3RaMnI2L1FHcWFiNkNKYnErTThvRi9KK3MwQitIdkpYU1RSUm5YTEZ4c01WZUkyRWl6NFFFbDNaNnc2d2FuRVNUUmtYZ3RHNHhZN01MY0VoRno3Ky8zSnJtd2tNSmZpdHk2QkdIQmZiZ1d3SE1zWGpiaDR4T0ppcURyZ1EwaU5ubUlGcUZkRjd3SGUwSG92SGYwZ1ZPVVFTQWQrcTRxalZ0NzNQK2UrcDZ6bEdSVkpJM3M3MWU5aVpYZTZYc3ovckFGQ2F6L0V4ZHFQZWFhTVpGRHF3RDI1dTRKNmwwNzMzd1lXc3BFWHRpd0hrNjZ1MVZ6enpudFRORStRSDRPd1NhL1dkL0Q5dTh1WDVDanhyN2wvVTZna0haWHRmczVKL01KeXgrQjkxMnY2V05IMEdUeVRtL1VVcFRFVmFzVTdibC82YVRsWVlRQ1NrMm1kS0RIcytHdHpmdnVVcVlEL1BHOXdhSW4zMy9YTlBxWVJJM204eW9OTnhjMzh6enVnZVo3SkM2QVY1aTgzRkZadU1yaXdsYmxIQTZpeW92bjJqZ1VwYk13YVdINkJBenBIMm5UZFVOS2FDZUtLMEZxVG8reEMyWmtSTVdXb1Ntdk5mQjc2eHM0YTJqaW80djY0ZWN0NGUzVmdLdHNrcEV0OVkyNkFMWDQ3UWloN2ZyOWN3ayt2V3VQSFJaTlBxTERxVDZORXVCYzZ5VldjUm5HbTJtMVhtVSs0VUtrdnBvQ0syUlFKVmc1S2J3QVpMUGpSN3lucC9zN0Q2WGI1K1kwLytZS0tpZUtQaWVodlpDVjhFZzQ4TVM1aG1WN3pacEg2bjVJWWtnaGk3akNNUDZ4MlVqTnVCZWNkcDB1WGIvRnhxWDlMVDd3NElaY1l2OUhOZ1YrUVB0UEZyVXlQbUloQWZxZ0k2cHRvOEd5NnNWNnlKN2dBdHJtSlQyV2xMWlZ3a1hLTlo0a21reW1XNnZ4SGdPUFRUd3Jnd1AyME5RTmROVG4yeVFKWi9ibkhEcmNBMHoyREpLNW5LeENWWjF6RE9DcXVYWTZMZTFDTm0yYVJkWFJOZzZscTdJYkFwcmlldVJ6cGI0SzREdnRtZDBtR1R1RXpFcDF2c0p5TFliWDNjZWJaZ2NPNzdXSjB4QWtiT1FxOWVEbGhscWFEZ2pVSDhmRHl4aHUzVEZwa1JlQUtrbGNscEk4emlBalBGejRKTGpHcVF2cktnUDNOSW92SFhUeXAxcVgwZ2lYWTBWVWNFSncrdFB4VUc2UU9WKzhUYUdvRDVtTVJZYjdBQVMycWxPVUpYcFNKa3Z5Rm8rdXB5M2FqYktyaWI0b2xJaDJTZ2pNNVF0QnBwVUxaRGl1NUVsTmxGVktmajJOYVlDZG5aRG9IbStGaXN1Q1VpWE5CWERweXBFNHg0ZUlFMi93ZjdFNHY0N0krelZ3S2t1V0Y2TE81ZWFFWjRsU0dFU2QxbmRTSEh1RHdGcjVMVkkwVmdWbDRnaWRmcytueENqNzRBOXdrTjh3S3lDem03VnJWOHBtcU5WQTRlOVJ4V0VscU1jcTBGejM4YVpSdWtnbDZhOFY3dWZHT1FFbXZnMmp2YVhsSStqRkNjYzNUOTdxM21yYUwybUNJWFY0LzAxL1hpbStuNkl5YW9kd3lNbXZ5b1NUTGZrRGliOGpMT3krbE5oZk05amoxUnVLd1pUWVJMa2Y0bXJlN2dRbkpOVUpvekN2bzRveTN1bmtRYVYwUUtrb20vSXJ5ejhBRVc5MXc3NFFjeVVkbEpFWnNnVk1PZGtnK1luV1hEUjJEQWpaM0RsS09tbDk3c1pLVjhKMlgrTXI5TWdZYzNFcjBRTHllZm9tbHhiKythL1hZblZVcFdBMGxrQmVEK1hDeUdmaWlGSjdoK2xKRkdnQ0IzaXFmUlAyQ09IZ05XOE5XRHAzU2QrTXpBRHk0WWZrcmp2YXpaT1JlU1VIRlY1L3JwVlpYL0ltN3hkQ2hMNlRwRkFhNTh5eDl2VTVHWVBpZ2JHMitXbFNQOHJySzZEYWMxNU1mRVhzVW5rWTViS0s3SjVQalhUMm9uY3VOdXkxUy91VG4wa3hwVUpRaUsvSzVxM2lMa3ordEVoUXNRVThDekg1UFBncFQ1aE95aTl4RnRaSjVMWTZrelJCOWNlWWV0aGRUeXV3eHdqZHdaVEQ4Y29tcEo0SU0zSXdQL1hMWUFRYUk4KzRiNlNGRWFka0ltZEtlQkhuSERmelRiWHQrM2xtR2dZUHkxZmh5L3d1YTlGTG5VTmJVNkxaK3o0OTllZ21HRDFNUUtaS1NERjhCVi8ydDYyZ1I5bG9tbEFPZ3htV2FhQWxxYXhmNlZXY1g0R3prM0ltbjNTd21LYjJpYnM5NTRzZzl3NmpNQVlBNjJpMlh0VUEzREU4YUJNQnBVdDBIQmQ1Zk5jV0Y1L3FSQWRyODVqSlVYWEJsRkROenN4YkFOcUdwajk1QjZWUncrSnlYeGw2WlNScnZ2dnNwNGsxMlpaRkNEMmFJRklsOXBvSFUra0Q2UGJMVk9FZE5xMTlmdGtRVCswUHRqbHlZVmF2TkhEOXhvVlBzcHc1NkJPNGI3M2sybGtuOEg0VHR6enJzYmROVDNudlY0bkpkQmhBaEhoQXZkQXJKemdwS3hEdjhPV0pnL0dnOW1sbytuUC9ENHY2Mmw1Z3NFYTBEV012OVVGMXVHMW8reGNRQzJIcTJXb1dGdUUvd3FUNjU2eG5kQlpWbEdsUmp0UnRoRUd1aTcxVG5HalEvZ2tZUWdwSXNmYmFuam5MdnBHeXpJczhzR1huVDdkSEZrbVMwN0hqM2F5UFUySFV6cklHSFBxczVsOXFxcHpzMlluU000YXJObGdoR0VsNXhicC9KY0N1cTNRSk1KNUxnazFpYjRNbUhiMytEWEtjWTlsNFZQaElKSGVEZjZWdVJwNUNIWk9qTVpmRW9qVm01aElBOHdYT1JYMWtqOEl5VHc2VkxJVXFtQ0hIQ1FKSFNYK2hkSUo5WkZCMEtZbWtwOHBob1FIak5MQlNYWW9lczlFeXJnUnNhdkxyU00ySlRRMHp3cVF4RFNXZW9OMUVicm81MDZIdDgzbEdjd2U5UDBvaDdTTUFHdUJsVEpsMWFuNXRDbnZpcVNMeXBqWjFyOWx0aVU1SjBVNFpRYlc0WCtGZ3RzMitiUTVUNVJ3RHdKRlA5eWNpbUFwNFFnQ3I2czBJRlkvZ1dSM2NYNTRISlN0eS9lUzB0blFGMXFJc1NiQ0UzeWlCMU9rbkcvODJiTDhTWTlyREZnUm5MM3gwdjlvT094NXRwS0N2SWxXaERkN25RaWx5OTF1YzhYQ0dpS1Y3Sk5OMm85ekhWK1BnL1J4bzl3S0wydVdCM212VE80dTQ4RmZjNmtKV3grcGlXRnczdWJ3dHhvTnNwYVlQSVB5Z3hCc29YVTE3SkZwMjRVMUw3M3Exc05uaG9wc3JMT1o4RTNEdUd2MTNwWlRBdFY0ck5lRi94dlJnV1ArMGF5Sy9wR0NPSDVFSmN4ZHZueFZkZVVINUc1ZHQyb0hvbkpYMlVKT3BRVzBibFFPUmVPV1lCSzR1bnIrQW84dkRhMityZU5kT3dHMmtZNytRczNyb20rY1pUUy9zZ0RRTjBTWE5waE9kSVo0WUh6ajlxTHRXUmV0WGQ5eHpzaVB6dWgzTmN2ejUxTVJRc2d3TEFZS0xpYWlVRDlFOG9jZ0tQTFJUYUpBTTBWQmlOVEs5SDlZODE0NkE3Z3JCUjZWYUpJZUt3dXp0dmtzbG5oVWJvUjE3NnB0aWZNOU1UWkhYdDZQSWxhbG4ybStnS0h4RXAzdkZJS3BBallPNmthVG82dDNmYkIwVFBrUWduMEhSWFlDR01YSk9aOVV3dTM0UVdqWVNnS0pGMlRURzZHSW94ZjhFRlBFbDNoQ1c2aFoxM3hCalRkZnlrM3JXR0NQMVp6QXBzNUJCaHg2aEkyblZSNnZSU1gvdURDR1lHczJhU3J1OEVrVVYzMEhMMm92bFBNV3VZWHJkNWFQdjRKdEFvNmlFMVNRR0lQdjZLdjBEeFNZWVZvWENIWjNnRkQwTUhxZngxVDBHK25JN2kvWkdhUWdSNGpxMlhrc096SXgrWXF1akZMNWkxTnZVeDU0bExLSmNWdGxyZlNkT3U2c2hZdVBWMTZnN1hrZ0ExaFN0ZSs5UTEyS2xqSXgxVGllYlZ0YnJ0TVlFOGl5WVBDQjMvUzBXWjN1WGJsVVA4N0VEYktuVmRpNmxYd3ZTbHZoa000SlBEL1RTNlh2VHBmODZ1dWkxaWNSZnhHaU9id0dmQWhzakhieWpQUk5Xek1QZFU4dXppM1ZkM29aOE5vL0hJRmpad2dWVHhrNm5CaGw4anUrQVg3VVduRFptZldmZFpyUXkybXFrOTdKSDdtVkxESVEwam9sYXhTMHB2TGxpWGJCSC9VQi81TUlPOUYzaWdhamZFVnZNaGh0R21BUGcyUStsQXJ2MzlDbGJGSnNMSmxwK3oyMVU0LzdFeFZYMFlVSndiNjFmYTBURDFqYnZlNExNTGpydlZJMUhLVmEzaFBacktmNHNpanlDL0YrWnhPaDFRR0NEZXVaQmRnaXNZd1FlTzNTdkszSnFjNU9ibDRQVWR0TDQxTVVTc25iTkRqTVhjd0xydStxQkxXMUdUYXNIdUF3Zm5KQlZkd3pseXhyejlHbHBTLzZUdVdxQkxuUkdWNVByOWJZa2hvUUdyaEpXUVlySW9sMDlpL2FVNmpoWkVic0hWT1NicjJ1M0ZzcUlVU29HaVdMOUMwL1FMUmhwTFpGTGZVUWErT3E5V3VLY0ZSUkRnMkdBUGlxU25Pd3IrcExtaEl0a3dRdW5rS3VYUGppeHlJdDl2dmlMbGJtdFhBWkNCTGFuNFFwR0hISjFXLzFlZWFlZTFCZzFEVGtiR09rL0dnSFJsWG4zMUU3S2R6bUQxQVV4SmR6bWh2R29IYUJpUEo2U1RSM0xodEpydTgzL0pYWDBJTFlXOUxUWmY1dERCd05VUUhYVjJqZXB1RTFDZHBFRm9jRm9QTUhleEVQaGJLc3hOWVA1RmtDM24zK0hLa211YVdMU01XeTZhSnA0YkFRWlBsRCtUSVlHM2N2aDVHWndjeVR3UzhmSnpHbGZDVFhmcklDU1BIa3NuQm1qZ1V2MVFjaGc0OGR5cFhKR0NLYmI4am9SOTA3RHVaazAvWkFiSzIyQ0dtczhjZWFwdzlsdDcwUjREQTN5UnlJSkU1N2ErQWhRM0J2ZFlTN01jL1d0aGsrNlA2dDJhU2U1Wi8wcjd4RG04dnZUUXA5UVFTNFRGWXdSNnFOY2ZydllRQjRhSGc1Vk9DVXAvSWdwWjFVVkhxcEpLc1NPSEZyVThrV01rVUwyYVJPQkhXcjZkWGpYZlQ0RWQ1b0RWTXkrS2Uvek04ZS9udE9WdEFaUmJNR2dGRG9ONUkwWkZxQ21mdEx1MFdRcytuOWxjQnRrUjh6NFBaUU92NVp4OFBPR3RTanhxb29ydGFsOWpsMjEwaVFUNWpzOE1YVGVQeGRhMi94Yk92d1ZPYjFyTkRKWDhHOVNMTldFeTd1c0NuZlJVSFlDeVo4WlBVc3dBc05IeEYveEZ2ZTJ4dGRYWUxtRmJNVUZVRytsUlZjLzBhandaMHIzTTFVZlZqSzRWQXZOY1IvejBTdGZKMXFzTWRaZzd6ZS8zVjJlTjBlNGtZL3RKNnFjZ2IyeENYNUNZOXZYOVJHNERVV0REaDVIcmhQanFadW1xdXgra2JCcGU3TUtwSkkzMzErWXZKTEkwcXlaTC9MUVpZYzhERXUydmNidmlIVUFyTUQ5cnl5QUtXaHp6MFJDek1tOUkvWEhMZTdLdUVNbkVzUFF0c252SXNJZ0EwR3ZXU25ZYXA0YldCZDlzU01Cb1Q4UjhTdCs1S25VSUFkZzQ2NlplbnovV1cwSmNiQWUwWXRHY3ZlaXVGblpQQmtmWDZTcWp0UU9haXplcDh3cDF0c2t5NThZQjVJb3JlaWVDNU9rcEcra0d4UkdIT2s3bHlmZXBDRkNQNkltS0I1WG5qcThPUXBHWk1kaHFVaXZIWEs4Y2pFc0JqK013Mm9vR2l4YlZXM2srSURiQzRjVXJCMDdrdy9OZUVNMnc1YWIrK2k3emloMTFIQklvUXUzck44OU5NRlJkc1JDM3RQd1ZUWEd6cHVJQ1VYZHRTZ1lUcnFGaEhMVU1aY2tuazNnRXNUaEhYeHhFdHhLekR1eWt4TEZFTFY3OXRpam45Q2s3eTF3RGwyQS9mNVBSYTBRYmV0THNqczBoVWVhdW9qQ20zR1VTUDVPUlNtQnRzakV6SE1UbkIxRTMyMys4THdLTXJVSVFGOEFHWkcvZjJUTWZ0WHVOazlNRHdhenpBNytJWkh6bkg0U0xVQSt0Rjd3cGtDc1B0SmpxTkE5Wi9xZkJ3VDdsQUpldC8vV0F3TXgrYWM3UjNwT0JVUG9YZlZsNFhQK1VjU3pFdWNva1BSUGFldm9WdnptS3JBSVhVdXRtbW1GNFFuVmhhUVhIaWVLcWJGVjlWL0RaZUJvbUxOaGtscHdRK0djbzBuR2E3WWQyTE4yem9tN2pYVUpoOTZBZFQ2OTlYenFtSFNFZEJQbG5CQkZjbVhkU1pHN25DUG53UzJlMURvaXR5eXJ2MVI1QkF1RFBOdDIrNFVhRlJPK3lhc1FtTTQ3WmxJRVl5eHZTbVRDZFlNMW05WHJ0U09nQWhBQzBIWE5yeWlwUjdrdkk4SVp5dE12bmltaG43eVhUaWN0UER1eEdZTDJBYndsV1I5TC9nQ09BQ3dXNDlndWQzbWJzcDlITHZDOXk5b0o3NFhHOGZLZExtT1Yyc2NjTlI5L2F0Q2FUb2piZFpmd2VCY2pYbXk0V25Rcjl0RlR5K3l0TU5Ralo2RFl2clkySVFJWDY2c0RyN3FDRHFwMVdXd25tSVprUGMyNjBlNHhpUmlodkhjUldVd0NrTTRvRy9sb3p1U0xRV0U3c0VPOEZhTnVCa25ZNWtuWFBCMzlkLzFKY0UrdVNIWERxSElrd3p0eDVqbDliaDBZZzl0OS9ySUwyWSt1ZzRQelhxWmFCWEhROWF4M2dmZkFpWTMwWjkyY1lVN1N3L3p4ZXhhWWVLQ1JTUmVwQ0Y3UDc5WWRDYlhDbWZoN2FvMXFLUFdNZEhmSEoyc0hkVUswTVhsRXJCQ1E4T1d0WUxScThYSG5vUTV1NURNRlhyZ0habzduTjNXdG9MV01UZTRETHlhRjVISGZqT2plakF2R1JTZ29BeVFMUmNtN3dPeTA5V2NBblV0QUZUbGhENUdldVh6ZXYxL3UwNjB2NitTakNBK3JlZ2pQaWl5SDlVSTNtSnViYnc1eFhYR2FwM3YrUHlKOCtYSlVMWFlHTU02dCtPdUdwZ3FpQUFPOXJMQ3pYTXBlVnhDMzdLSlZsaFlMNlhrYmFQWWhVMWEwS2YrZHRoNXl5VlJ0bEJGa0ovNXJVOWV3YXlzczVQc3pReXV3VXRCYkloeXBibVpFaVNrRDRiTkJDSEpnZmtHTDVUNmdmNERKaVA5ZUxqL1cxUmFhQlZFa1RBcEpMa1YzaHBpeFpLZlhWZGNlT0pFVFFwUzlSOUY5bzdaak0rVy9mSmE3d0Z0eVRmMEMvSi8xOC9JTTlZWnlwaDJqRFZEelhjYlJOTS9PWk5JaGZGT21uTHNoTVlBeEpZTEN2Rk03akt0SStrTmNBZTBsOVBlZCtScHBiSUFmQkZXeGd1a2FTTExTOEVybmdGeUwyYTFSaG41TTdDMlRMQjY3Um4rNEswcEY2cEtRdjNVNk51eGF0NHNWZGFiUXhWeGFub2VpY1Z5Zk5SNFBKYTZLc25VZTErdVBjMVYvOGJwY3EwMlRiZEh6WWJwekJIaUtjOUQ3ald3eDVBVk56eUp0WXNpK1BOZWFyL2Q5dUEyaDVWMS9mc2JROWtTZFBjTjdIdlNrNnFhWFJWTk4rbjZwVVpwbFozR1hUUkZyTXpUYUh6K0lhcW1wdGtNN2FmZlZzZXRBVlNkWXRPV3V5d1o5ZG02bkg5N3FucTV3TXE5OGUzWG1LTml0SUowTHJWK1c4TG52QzE0K3hkZGdEZGJGM2s4TjJoVEx0eXcwZTFlc1JGZjRrblBuSXBtSFV1bTNNc1FlNzZVei9EeDlUWTdWdnFBVXJQbTlyUTFrT0VlZDNrQUdjUTJpcUhsTUgzdmdDK2hqU2dWUkExZFpXU2d1SkFxQkpGZU1GNXVuZzlZSU5WVFhSK1c5OGFLWVdWRUxGay9HT0QybDJXZk9IVSthZzdGeTVDS1N0ZXF0NFc4Qlczb0NhK2FmOW5wdWpCMlZYYlQ4NUFwQmZYVm0zNU5MYVYyMzVmRVVGbVF4cWZha3dadFQ2R3cxL0JQLytGdVdaSWg2RGhMUDh6ZU43NkVDVmM4Mys0cnJveVBPN28ySlJvUmoxcXpqUXdPT25sVmg5QVBwTzc2TnRKNlQwQjZiMEdZY2E4K0NMWnQ0aUp6QXJUNmk3dTV6bmFtL3RxeTI1TXhIMkQ5Y0JrMU9FUFlGQVB5d3dMMmsxUDZQSy8rbHBFeDFOSHF3Q0R5MHFjQWNUWUpZZGQ2OG5DNk1KY0IrT2Rtblo3QnAwK1FZSHh6MHBGZlFhM3RHUWx1cS9HSGFldlpBd1RpMCtMYVh5NEtNTHBGZkRPbjN2TVRWbFZ1YTJHQklYSHJjcnVnSyt6MmFROHlCRWFuRzRXOVYvMjU5WUVuR0E5UnNvdUZTK3FBQkpsRlJ6YUQxZEJEaklXZkVWMXR6QTZBZjA1Q0N2ZHlMSTd5eXM4RFlGY01rbis0NHNaL09ISFE2c0hpUHI1UlNweDRtUkkwemNyQmRlYkIwemNIWVlnOVVsb2JyM0g3d2F3UlVXdk80NEF4U0JlSTQ2djlWaFBIcDQ1eExLR3BzZGszb1pPWHhFSW9OVmVYRlJIU3BzLzhaSS9jb3l4Rk1xeG9HVXRqL29PeURzRVMvT2JyWTBuSE9LUGVpVGlWa1NvN2RvZ0lxQkJ2WktLcXdjL3hUaEtHVU41WEJKY0FCdlVuS1pHWWxRNnN6VHJVVGV3cnFrcSt1S2tNbllXRFhDSCtEa0JlYVpLcmduTGMxd284dXAvUXRSVVZjUVZnS0xMNGV1elZSdGRXTmM5OEpPTDJiOHhKaHB2MXc1TDYzN2FTaExYRkFmSWVOQVdsTW1EUnUxczAzaXRnOUVaekhsck5PazcvamFPRHNjNlFWc0xWODNNeURnVzIrSHBUNkRSTUNKMy9odVJUVG82c3cxV3RhMU9LL0RvMlo1VDBncHRIeFlyem4xSHJ2S014Y1BTNVZCUVNKS0NXT2dxNmg0aDJYTC9aZjc1VFQ4SFg3SU10Y2V0b2s0SlFDWHBwUVlqelpnMDZZTEZYSXVVM05KMnlSQ2U5cHZuZ24vd0NyWVhIa25wcmpjY3JmY0ErYU1PV3EwVnhHa1RrcytLak0rdEwwcUtaUUEvVkdsN1dRbFV5Mk1UajYrQlJEdkNiaUE4MG5xRFJxMmhsVWw4azM3V055K084UHd5QjcwLzZyd25GMFN3dW9HTWxPYWFqbHlucTRSbXliWWNMNDZTb284NGY2a1NoOHpnNW9ZV21iSEZpQU5Ud0dxUW9Ja1VVeUxBZkMzQmNZcm10cFdXSnBUSmFEWUFLbnhLRk1icW1qaXNpL0dod1VvKysyczJNeXYvR1ErVlowa25uc3ZvQWdDZjhtaDZ4cDkxbHI2M2h5RFhhN2Y0VUROSytGaWFYSjJQWDR4VmRmS0tLa08xd09pS0hKeHFFZ2pjSlJMenpaSDI2Nmg0b0NoejhhenlBejUzQ29uQzlRWlNBMWhzbEZYY2p1QWdYRDRPRUxoT3IrWFZCalBhQ092djRueDRtQnVtcFYrZ0RXYlFuMlRLZnlmWWQ1QTFOclcxbEFpMnczT2dEblJyMXBnZ0VqZHZ2WkhqL3EzT040emF5MU4vVXdNallVVng1eTNHZ1J5VWdvMnhXdDJsMDNyTDBYc2dWL3BhZmZ1bjg1M1ZsREZMVjBoeXZGVGUvVGp1ZFM0aHJRL0pVaDJPKzZZK2xzclk4VFUzVlJ6WlErLzg3bWF3UDBMUVpEZ3RSSE5pK3BvejlwM0dnYy9jN1htdkxBVUJlYXVMOTFHWlR4bE0vTUpqN1hmRWZhYlhWeXNTSnBMNUQ5c1NzM1NuM1RDck1qWHV0a05na0FOMVlBMThYV0FDTjlHc28vTTNnZlR1NVdBaC9uWklkRSsydGxKTEVoVFZCRVk0TEtKb0wzQ3hxbThvWlRTZUt0Wi9EK2F4K05YV044VEpGZzJFc1NMa3pDRGhQcEhjaDl1RHpJVFNaWVhWZGVCajZjRloxTnQvUmJFcXZFeUhuSFhPSTd0RkdhbFlTVVRQQ1hjVUg3aTJlUW9oeWxERnFiU0FKWjBGdmE1eFk2Z3NLUzNNMmFXbFR4NldUeU5tZDAxeEFTSUw1Snc1ZDRCSHloNDZwZXgxaklXQis2b21qMjdDdG90bXZxMCsvbVltRno5RU13UWVZd1h4cm5jMCtWdzRsTWNXSDBtVTFXQTUrck5Hc2M3MStkTkcxd0k5Smxqd3VhaEZXU05ZdWVDWFlXdFUxTG85cThmbTY4RS9vQWJxMHY3N0xKN0RZb2tRWWp4RTAvZ2dQZ200K2haOXduMHBMLzRkR3V4VS9pdGwwY0k0SlNBUTQ4TUZ0c1pKYmxKN0NrbEhqQXBqUzU4QWJBajJYS1Y4VWN2QmFaV0Qwc3Y4SGZSaXFYMjNDTWNMNU1GSkM4RVIwWm5CVHo3VnJiVFE3K3IvVHBDNFhycHJEeHY4clF1alpZQVJNWDhFcWsyaXhpZTI5TW41UnFBbTk5R0VycEJ6NGptL1Z2a3UwU09xa29NU2IwVFN5M1hPdlVFZ3p6ZmE1VXBydmloeUFMWnh6Z2RFeHF1d2xRYzY1NEJFaXYyRlNSZGJwT1ZQc1J0dGtnMlFxYVRSb254Wm5aNy9naGJYS3JtMVVYVHA4R2FWR3Evc0M0clc5TllHMWt3bHZIMlMzaXlRKzc1bkp3SGgvd2xhVE5PRmFOMWZLMEFnd1VYQUtnUkR3dzFGbDRabmdCaHVGZ1dKa2NSUHRiazQ0T0xhNlBFZThlMHhQSE5SUlJSYWVSTndlRm94ajNVSG5Vbnd6YzB5WHNKVTI0ZWxxU2lhVjJta1l6RlJqbGFPZ1ExUDF2eGQ2M2QzMW1WbTRTVkI1ZWlHTEUxZ1B6MzBhRldGbXR0VFdHR2orSHRoM0NDNUFIbWt2RE9FeWRRbjNscm9HMUdKZ2MwZjVzbnYwSHNSU2J1RVhjVHRYbnJNSlpPb1JBdWxOeGFTWVhPY0JRRDNSeHB2L1V1MUE4YlM4YUlCTVZjcklEamo3dERoM3YwQ2lQSVFEL2ZUN1hTelpnZzI5NjZJRXNJZVBNdTBSWVdmaUhuaFB1SWk0MTA4MTdnc3A2YVAvc2pmZi9YRlJ6Q3kxdzQzVEt0ZEg3VjNOS2R5V3hSS3JtakxKNHhvRm1nY290SlVJYkV2dytCamxwNzREL1dSVGl5eFlMeUlmRnZiT0djV09yeFF5TFcyT3NsYTZFeE1nL210eXVQeHd4NGwzSXh4a1dSUmltbHdnZzlHa2hhV3NzdHFyR1paQzVGa0ZDM0d6ODFVKzlPN3Yvelo0YUNJTTdUaUNHMlFxdFJwWWpZdklqMXg5Y2V0ejg5TXY0SkNKRFNCeU1rRUZ1azQ2VkwreWNMbEd1WGhwbXhxb0ZjU0NqV0p0RW5BS2RXV09nWVhienJTUFVPZ1pnd3FTZnVNQ0RJTjljQ0dKc2pnc3dpSlhNaHdTUWFYbGV0KzBVM0RnY2JQbjZodkM2YnZEVXdqRFpsYzBnTVVuSFp2RXN0SXBXTFhJLzMzbENQckpzQ3pra2twcy81OThIb3dMdUttMkVRSlFXQlYvU2FhZDlyRVR1NEVkbEtZd040UTE2aW1PRkdHYVlvcjBicExxeTZ4RVBEUytKZndMaHdaakJPbTdwaWlMazVhT1JYcU9pazVuTlJVa2VuNVFhSnEwckozQlRrRUIvd0JxREhyY2N2VHpCekx0RkpsUzZUTm9VZlZJTmdVc2tUNlNoMkh4U1p1TzM0aXhtb3kvelpibmJCSzdVbmhsKzY5UnlPeEwrOWJBZ3NpNE84ZUtpc3FmclBwejBIR09oTzdYTWNSaUNHL2M0OVoxbXdrRzRpcDc1NmIvd3VLd2wrUk9pdXVsS2UwQWlFQjRXWHo4SlR4Rng1QzhRV1NkM25yMUI4Qzc2QXhnK3NQSjNEQUpEL1ZFblJIWmlsQVVHb3BKYjN0b1RucGhUUEdNdnpaQ0Y4bDRYZlVtZFo2bkh2TGtDV29hdWsxd1RpNDhrQUNnRUxyMjVnN2xtWmJJZTYzWHdjb0tQek9mbzZrakhnd1IrWFEvc0FmNTNzL1ZwQ25TaXNlWFB2WGdteW1ETkNRa3ZNZitCQlhRaWVFc1JRaHExYXAwWmRmVml1bEpYTjdTWTB3NEJkUDVyNFlxc25LWjRVcEFRV1pUNzlOYVVwbTh6eTBQeE12UlpBeGJMMCtvVlJWSzZlWElEaldnRmlkTHgvS2ZiQ0ZHdSthYmcxa0ZVd3AvMVd4V3VKcEttalpqK0VnTTZCMVExdFN3c0tMaWpaWXRHejZ3VU1nWHZPOWE4VFNsZTRVWkxuY0xVTDNnZHUrMDlGeDRjT05QWTZISENpUHBHV1BkSnpCWUVDTUlFUEp1dTdRVUYwMStzUThZRHZYV0NPekxvZHZwRm55dXlCeVJ2a0JrT3F2VGFSbWZhVnBzSng4cFBacWlMS0dqa2c4MFdpN3FaRmJJYVJKRHRlcVN5dFJYeDc3bFg4dVRMc0ptU0ZoOTl3TjVyL1lyQWJIcDRmVDF2bzJZSEdzZnFkSkwycXE3cGMvaHZBQjJNaXRncHBhWDZ6NmVIb0NiQlFMS0VHeEtiaVVtVElyaEF3cmxTZ2ZUeDFYbWVXUEV3b1E5WVNDT2xSeVFkZUtSMTUxQ29PdkVuV05CQmNxdVJURU5zQXFUQWxHUjNLeEE4ZjhIVEkrYld0MytEY0VHcWdrampRdDZOT1YxcDhzWG5FVWpGU254S2pMaFJLbUJpeEtvaHk5NVF6Z0c0eGJjVlJhOFpsUm9NUkc5NVpKOEdZak4vVmtyR0lRMEgwM2hBWXk2ZUd4ZEVQWFpWYTAxc014b3g3dUhjNkFDQm41eTdIbTRCZklkcW9NSzdqNTZ5RUVOVlUrVmFtakN2NEtxRlArWlk2TlhaUThGVVZaOHpSaUdoQU1TaWRJbDN2R0YvUW0rcHhTbkVsS3lyY0hCU1hESHJXeXFSUjA5dFBzQ0hXOFkrZ29HQUtrSU8xbzgyVXpmYmNlR3h6M0JTZzhPQjhtdzlqT2JqZE9mNW1lVEhqYjhUNFhyMmNyYUZBZE5qcHBNaWNzamlSVXRjendPaVdKbzVMWkRCYXpCV1FBUjk5T1V0eXhldmVDVDh5YmlwVlBMeWFaNTE5akV6bU1PRGdzUFZ2U3hpbDBJQnVmUGhIc2VMMHNvNEpRZk1mTWNnNjVOYWdPdVNhNlBMMSswQndWQUNrR1BnRlZBa2l4NlZNajJVMXBGYjRBMFpmQ1FMRlV6MkhZSFRsM2o2N0hMazQzV1pTT29WL0x1b1UvRVJRUk5yNjdNWC92SEE0M29uOWVlUzNMbnFURjZWTkFKU25xYXZteW9JV3c2WXZwYkpkYXhNYlVVUmhpOG5mMHVOaU0yT3NXODk0UUdqdm1sK0twcGI1VXJLeS9VYnJTOGRtN2ZYQUNGK0FiZTBzanZTSGNsMC9WWHUwbmsxWTZ4RmpTeTdRSi8yaW1wdExxZDdRMjJjK2VQZXJ1VURkc3Q5eXBQWVQwbnFiK0tZcHRxQi9pNDBITU9mR05Jd1ZDcUdiaDV6ekEvVzBjMllJcmV5empMV3dwNndPSVNId083MFBQNjRBNkFNd3U3NE9GNTlud0RzSmJaeXpPcitmcFJ4ekE3Y2s1Tys4OTBaYmV0TEk3OEY5V0hmYnN6TWl3M2JsTUhSdUlyWE1MYjJPeHFvQmxlYUJta0RkZ2doMjE4SU96cFUxY1E3Ni9MTjJDRW1oRlNtbTZPUlNib28yWkk2cGt3a1lXUjdXNElQNzcyTklEcW5XZXBhSjRRY01obUdyY2Y0ZzRZc1JwRnVwdnAwUzUzS1BUWmQ4TnNRdUloOU1XV2VFMXlwRXpMRVVPbzBPU1I5WjJtY2NWVjEwOHRxS2lkQjdHVUdRRW1iR1ZMdTV0RGJJQUszZWVJUktOd2RyajVQUEtvdlhqUThWWmZ2ZWNSRUtoMHBXZ3lqT2xlcXRkYlRVLzc4UnVlOFU3bm9xckRoWXZwbUlEeldzT0FiTklPQk0zN1I5T3lJYXg4K0t5d2FEOWRCeXRlc3VyaXJXS2lzQ01zQ3dHOTBwYXBVQm8yV2V6TFB4WFFkbW1lZnNuUHIwMjhBcWdVdVRSUFpURjZQdzducWZJazZSSmVPZktLMmpCVCtITVh0WVp6NmJxSE92UWhZVjBSQmFENDVZQUo0QTZwWEMwSXJuazRha2FncDFOR1NNYjlkcEkyUHZDSFRENDhzSnYxK2NpTlAydlFpVkdtN0gvZ0NCOUIxdzg5MFRXMWFXM0ZhS1NjTTlac3lRdnFmYlhYemZQUFlqcGJiYUwrdUJWS2N2ZkhGUmhWbW1EVHkzQ2tzQ2U5dEY5MDdtNHEwWjBTa0dsVm5sb0RvV0NZWFZ6VUdWbTZuWS84M1BsbkM1OWRzbGlxSklsQndFTUw4bmlJUm1CbFJiQXpUd1J6L0hwU2I0Qmtsa28zd2lnam5hc0srUWVLbGhlU2J0WW1lMFFBNFZJV2FIVkhMbWZnd1cxVk16WWIvMHRiSDFFZSsrZ0JtRHVrV0xsRWM5OGVXMmlPR0xhSkQ4L0NNNWl3N0RoZmFvZEVLNFM2MEt5Yk9yTzltMTc3T2RkYXgwQ0ozVDJsb3Frcm9tQmdXcGsvYXQwSmlTVldDK1pCK0ExdGVRYU5OL2tic2FQS2cxRE5SZFBNNEN6Mmlma2xmcjR1elpmTVRWZC9MWGNYSUxqSis4ZXNuL0xtSjNhaGY5alRJcWthSE5ISXBkeWZrN3JEZTdZcFAzR0dOUE9aSkRvQjFZb2lWckhOUmdka3UzY3NXamtyaVFGSUNJaGZzT1M1WkwzZ3VkcmZjMXhDc2pBTW0zczh5L0EwTk9BZ1JCZFpaMmVLeFJ6WUVBUVpOeUlMbzR4NjRvd0ZwRTNrcWNWY09XWFVuTHZDRXZFZlVNTEg0UitNcXZMc2FMVXcwa3docTNDUjBsQm0rK2hIVkdJVTQzbE42d0lZMFR5VkQrdzhGQ0drVVkzV01LN0tUU2t3eGNmSFBZeWlEN1RQNUswUzZHUTF4L0VSZFo5a29vLzRPMDFNZTdCV2tqaFMxWjYzUVBHbHI5dlY5WHVPNFpqcVZJRWJBaEZFVFdJWGRoa3JyWG5BdmRlVmp1R1VhOEozZHcvb0ppeGVUc0szeGpQeXYzRzFlK1NDV2Y4YytKRjY4KzB0VlY4TWhyTVU1bGc2SGFXKzlPSjJOZTFieGpFb1lPamdqamFVM1dUdElvQW1SR2lDUTdhZ1RFRHNtUzVrUGdjdVAwcnlWak4rK2t1SVpCYlgzUXRybVBvYTlUcGkxcmpNbVorNUtBNU9ZYUcrY1NES1NRQ2gwNjZIbzNXSkpZM05XRjZ5NElSS29nWmJkanRwOE9nYmVURUtDaVlGcU9jRDJtTWxyTXp2cTcwUFZqUklKc1BXYmc0dnpPeU9nRWJGaWFTSFpIaCsxWmlrTVFONko4Mm95N3BFczVjR1FodEhCSHRjOXVNWWQ1c2FWbS9mdUl3RFg5L01OSUd6LzNrcGxiMmc1V2p0T2JSWXo4TG13RFFVMjFhaFh4V0k4b2Q2OUo4MjFnMmw4SmRtWERiaEtlN1lqOUprWHdYV0hNdGxHWTFueE91WjdpaGFlWUlYbHRNd0hPMHljZi9WTlRZcytzNmREMFRteXVURC8wckRJRHJoWFBHRHNxUTk0U09ENUREMngzNUJlaE9LUk9JbVg0QjR2MEQwVDQ2WDVSWHZGNGUxSjNtRHlaMnVVcWhKVkFFY05zeW5mOG82M2F6bWJkVlN6L3RZcUZHdDhDMFVRT2tlTTV0SWJEb0p5TmpHR1FjR05LMWRBZTZWekk3R2sxRnplVjhydnc1VkJtVXFhUHpXNkxKRHhLRjR6WjRKZ3JoaExqZ2RjTmhyTEhYRjVBWXVzcTg5QTdMTzNyZlc0V3RpM3Y4TkM5a0pkTWVUSXZnNEtJamtCM2Y3TjQ1ODNtV25oNXRoOFhzZmhGWHA1OG1ObWJXc3pLZTB3cG9hd3pmYnhZMnl1S21oUkFEU1VPVGUxdENZUzNqWUVQbDZ4Z0VjZUplTUx0OHY2dTVvRnhodVBWR3NpZ0FySGxhUlhoYWFsczM3cVU2cFRhMWRrOVBIOXV5eERKUlM1djFCd2Vncmp0bGMyM2hGSS8rRnppY05iUEtFWVFoMDljaDd4SDhvcW1xc3VEWTVTczRtNTVpeE16MVFKeTRYN1FKZVlDcFU2TktxS0NMcDh4YUd2UlM5SzZYdUpYUExrWVFrbnhzV2xqV3E0VVRvKzNYcXFpQ1laNFNCcFBQT1MzRkVPV3o3Vk5rR21mbkRFNWhiTjUzTlJON2s2bDNIZW02NUVsSjNxcjhuSWNJQUtLbElPV0RUWnJxS21ZV3BxL1NEVk53OU1xT0NIV3cyTHFtcVZPelBoV1RmaHZYV2p3WjltN3VMUjdGOE1PSzRnOEdqU2ZxVUc1VVlqM3hiMGtuZEVXTGNjQ3pCZGIzTmRHektONkhRTUhTRFROSmRiRzZILzd4UFFsbGcvaUNNVVZJUFBTcGp2aHJSVzYyWVFSdU9Pd2c0Q3p5M0Y2d0U3L3B2MEZXTFM4QWJsSGVZckNEQnMzWmRYNVRGek15ajJjRCtwbHBGak9EdENLY3MvVDg5TFlQT0tHeWF1VVMyS3hMK09MbGl2VDRNeUVRYk0rcFJMSXF4K1g0dlhBT2N1MnJReWllVmcvendIOFRIRlBZZEVzL1A3djQ5MkVqdGU4KzIzd1lMdzM3Nm50MUdrYkZNdVlBbzVkSmVaSmZZbHpEL3ZlZGhiaUJRNno4SG93ZFFVYWxaUUxYSkdZd3RocjZJZGNmYURZZmc3WGxROURuQU9BRysyUlF6YW5JVHJYYUw3dDFRTkJNN1U4aW5GcTlZeGFRT3lzRUYyN2tjTnByVzBreTk3Zys2ckszUTI4OFMzZzRSU3pZejZMNVRvZjFFQmsxYXZwdGM2emJQUHJ0S1BPQmxpQzZiTDEreGt1TVl0TFFDWFhsVDdubUdJWDNSZ3gzQkFxWnNRR1dSUkZ4UWlFVis5bU9oeVNMWVJ3SWQvNUloYThHN3RiaWhTRzkvbnlYSFVrSUVYcHZhMDAyK0xSU2tpdEJIQzY2WFNnUk1xQWhHR2NpOUNVWUREV1BOYTVxbm9kZVBKQm9sUmthSkhsR1BvQ3QyUTlRaWJTS2wyT3d5b3JLQ0JiRGcvbzVzQWJXZmFyYnVGclF0ejNQOTVpUjVOV0NTNHBEOUludVFCd2xjMlFoSVBUUmUzKytYWngwc0ErcStUMTdWZnNYV3pVZWx4eHl2b1E4emVMUFMwYm51MjhtT0NLQWJFeUZhbUFCSSszRUpJOThndGR4RUpKRlN5ZGRHdHhPYzEzaXArK1Zyc3hmbzVlZldqYU1Jdjh3QjU0WVBZR3FHTXdBdTV0RFFuQTUrRXU3b0NaK1JCMVBhcjludVdhT0F4L2FVZHprc1hHc2o5dksySHVWUlZ6UWhsUjc3K2lhSTZtZ3NOMTluYWJ5dkd2U0hFbWhBREQvWWtmL0NGMnZHU3MzL3JNQk51NHVuVHNYcXQ1WTlyaEtROEdYeFdDY1U0Z3NrNlJFMXBhM1FSWmRvbS9SQXl3Qk9vbEFZSHBOVjdiUTNid1NTS1NjeWVodUlyMmRuMUo2YkhjZ0NrbHVZMVNHUk1BeVJUWTNNYit4emk0a1BaSVNIdkhDVWo3T3lGSVQ5aTRKTDR5Nm1FaW1MWVFsQU5OMGwwR0k1aGt6UXJkYSt6elozU01tV1VhM1gzWTBoQnMvcDVOc1RLUXFDdXhod0xVWFA3OTZXbGpabnlLRHlRenVOc2RFckpIbHB5M2dvT3BlQ0EzOTJkQWNBTnBqZTlyanR3R2gzUzNGQnhMN1RvZTEvZUZrNVdmOTNRVzVpSmh0TGJucGllVGFtaEdqdzhSajEwRGVSSFFDR2lXZHJreE53WDR1ZW9YYnpsSi9RZmxVZ0hTMXJLczYyeUs5RXdKWm1NbS8rTUFYVSs0dm1IcjN4MnBjcncwUUZHOHJhVWZmdEdGZnA0SG5tMXNKaWh5RDFZQ0FsbkErSzF0U3dIbUtoOHVIUU92M1BUbldJc2NDZEFQTjB2RG5jSVJ5aFZhWFBxVTA4c3JEcmpIdllZamFsOXIrU1JkVkJpcGVkZHpxZ09MR3VFZXhVWXlralllaytqZUMyQ3Z0K2oyZCtidit1citqVjM0ZHM5THZGUisrbVJyd1BVTXpHWmU3U0JyN09iYUFwTTNVSWJmbTVmWFZxSHVKd1hkdzRuRWhoVEtwZ0hKQ3k2dzI3akxTOUpnZDBlcTV3d04ra1lBOG5RbkQyTUIwMXU4czg4dFhUL1QwdUo1WjRlZEhrdVo5eXo2VFAvR2ZoR1FIWW04UTZVU0hFQUFwcjVRVHVUQnh1bDFNTm9jUDQwaWpERDgrYzRLZWN0ZDhMREtET3RxNStFVTV2ZXVhTSt0TzhyTS8rU0dNV1RrTUJtNEpBYU5ORFhZUmlDNnk5MXBVYzEwdUJ3dnlCTFduMDFLTXJjNm9xYzNYS3hLc2Y1Q216T2NqKzVZSlRBN1hqbjlRTnRrZThFRjJKU1RVcFhLV3VYbVR3TEFSaXRoTzZzYWovNFBEYnVwTUZ4clpBWUVyWU1saW1RbnRWanlBTzR6NGlVUzhhYThacS9kY3Z6QWkvSnBPSlBBZVJtWnN0RzdOVVBhUFZOVlQ4dUNpaFY3N1dZa2dmUWFRcU4zOFhERnR2T3FmQ2ZmVm81UkJEazZPL2RYeHRjVkhBaU90VGs0NVBCdEIvVXJLSDY3YWhwM0pYNTdCdFdXd2pWVmZlMzB6VFIwUTJ0UXpOUHpLdlVxLzhXVEFYQnZ5dnZvc0RsS2d5QnIrQW5ESVl3T2pCVGJOb013OHN3R1ArUllQSmFXOGY2QldmT2hxOWM0RW1POEl1TUFVMU9IVC9PWStWVThLYjI1cWg3R2VBTExGU2l6YXNpU21tY2JNRTFGY0dQcVNjQkJlU1E1d05kU3NXa0RXZXRYendDTGV2OE1JL3RPTHo4WkFMSm4xYmhkckczTkNvV2c4UC9nM1lORklvdG9ZbzJhUGdneHdjV2pRZUsxK0hNKzVueGhHaGdOcGNpeVIwd1BnNTdRYjgvWkd3MXFWWmtQRE1TM3hpK1JzR3lnSzlkWEpNK3NXMm5IaUwrT0NDODVZUkpVWjAxcXVXSXBjZHkxWnRGbktsaVlEeHNFc1RBK05yQ2JFNDI1ZmF0YXpLek04WGtZcnEwbXFvY3dPbHVPN3hicXUydzZ1OFNpdkpOSmMvYy93QStWZUJoMzlvLzV4UE1zZEgrS0NOam9CSmh2SUpSYlNOUXRBVUFmcXZkNjJKWVRTVUtodkxRdUE3TTRPalpFSzBQV2FPdU1YTjM5NmlYd0NoM0tzUGdocTJLSkhBdTh6QThGQlhxMHVGamN1citWVklhU3FtVGhTQmxkY0xCWjVXVzBOSERQYWZYUk5ZdXg5bHAxYTFsTitON09oNWRmWUxWaCtQb3c4T0cya0lQWUQ5R3h4bVcrQjM0YjNMeThva0JOOElkVURHelBiNCtVQmNFS0lWaHFKcWNMTURtSFYxWG9yUDYxZ1o2ak1TdXBXY1JHcDBsMXNqbFpETGZKTWx3ZCt5MmpjQTkxeTBvY1YxWW5IZ2R6eUhFcGtBa1ljazh5Vy96VXZlT2NVWE50Y3UvOHI3clMrSmpHbGpzS2JZZXhpQW5xTEs2dGJXa2NpRC96Rmk5dENrS2c0RWw4Y1lKMmVnRVZmQVQyd0xneDFsWkpxZURDV3lwcS9mQUx3RU0yakoyV3ZwaGNuYlFtdjZKUEFiVHRzenM0V3FJWUY5MHVmaUZjc1UyWmg3d011Vkx3UVJzeEJ5MzdXSzR3VTA5MzNjWDVjc3BoK3poM1ZGNkdFeGJhbUptTmZqU0pyTGlhNS9Jcmo4OU92YWtjT1ZTcmdNVWtpWnprQWhTZCtTK3MrZzgzS2NpNXA4QXhKa3JtMTBGRFhkczNkQmNiaTdWY1NtYnlWNDcwYnd3Y2E3bHdQMURZMmluZzhLNkZ4dVBkbzUxbGFtUDlrZFRPUlV6Ylc4cFhtYXgwdE5OV1ZGejVuejM0MXJGWnVpRHlYSFpycW9wUGVBMDRPYnA2REp4NDFwWWZtcUd2cmUyd1lKa2RBbjdWL2dWM3Qwc1BMeUNESUVPTlB2cmVPaTIvNXZyNlRrbVYxcUJMaGgyNGFnUDdqclN0and6Rnl2YkpNUkw4cU9YK1pBMERYUG5yQ2U1NWVuNks2c2JaTnd3aGQ5NktlKy83VVI2M1VKM0xyc2pBSVJpMUs3aFZtV1dxVGV4UzVQdnR2b3hJaHN5OUpTNmtmNnpJM3NuTzlOOEJsaXlYL1hmU1JBdmJYanZZQnQ5UDBST3NGa2VJMS8wcGxkOW4rdWVkWVZuVFZwcEpoTEx3b2h1UHVGS2hlUWp0dnBjaWpKZ2FXSUM0bEtpaXJsRk9tcDVJaFRaUGVmTGRKbHJBQm82bHZUcDRRSmR1YmNoaVpSMGpOUTBhMWVENTRzcTAwQzdnVk1HSndPcW1Zc3NPQ3J4TXVISjBscHZxQWNqeHFTZ1Jzamh1d1VLbmRoUGxnUFFPOGwvbFIxa1dFZGl3d1JZMFB6ZXE0UGdrQkVhY2ZQT0lQS2NwZnA0Znc0WUtyOUxDVHBCb25SZVlWL2ZDRnNvRHFEY0Jhb1FRNU5KOHlxa2Q4czF6K2FMRjJvZ0l0c1Axa3QyL0F6bTgyb1czNzVMV1RYZkdIaThzaWxIcFdQSk91STZ2ZEdWQlJIMXNwUGdPeDh4NEV0L1d2ck84S0pwOWZNVVpqY3AwcnhTRXpmUW52WGpxTSs4Z0Nid3Q1YlZLUVlMcDMzbHJ3b29NVDZxR2VjZzJ2MkVEaEhOZ0E0VU8rNk9oaVRhZ3c5NFpOaGdSNG5HYVYwUFdkc29WeG1EUEg0TlViSHhMQU5pT2FnRmpPTmJibVU2ekswOTJwR1ZSd1oxSWVkdmc5eVJyemdlT0J6WVRuRGpGZXQwNk5MRU5VVlBXTzlQMCtDQkdYQnF0M1ZoSm5oOHBuWUx4YzBoZjUrVllDa2tTTkFqV1RwZGFqblkwNnNxcW5pQ3FwNzhmK0NqUkFBUDZWTVVpU1RvWmhBTU5DSEo4VC9KRFpRVWQxemVJdlBOeVArVEswNnY4U3FQMEZpeFA1ek44NWlaK2JRSU9hbDVhTGg2NDFWRWNYVlFlUnIzOEhUSDRDc2VSTFZlN0NDK2pMSFRQYTlKY1ZXY3MvSUNjMWRNVlJoQndxK0dNYmdmNWlCbFNvUXpMOUNkMHBHQ3dVTlduaS9pcHRlUzR1L3NrV3pVSW9BRXlIUXZlUFR0SkRBQ3VzUVJhdDR6eFU3Vk85eDFxQ3lFR1pZNVdDTjZTY0NhRHd1eSs0NG5IMExqcG1HVkVrUXJoeExzMmhiUU92R3pZZlIxZGxVU3NaKzg1ejlReno2dkxIZmYxaTZDWkZIUmFnOXRMOWxhZmt6VDhHZTBQRnNxV3cwWFdodlBJd0FTc1A0VnFTVHRSWFQrYTdkdXRHY290dGcyS2lrUWp0UjFJaXBzWGRYenViSm81cGIwcjBwWU4rM3FDSlJOYzh6ZWJqZm9xTzQ3VHdSODRKRGtKZHYwRHFXNEhseW03dW0yaDcydDBsMzJ3WmdPR1d3eXRJRXkrbzFMdXlrNzFhQ0syQkRuS0lnNjRNQStYWWJ1cUM5VzduSUIvcG5MQlozMXBBY3ZoR0o1YUpQQzJyd3lVOFNOaWhMS1pBT1ltdnR1S2hTZ01lemZHY0EvUHhEMVByYnFIa3UvTmpJTmZxUVJlR1ZWSzNURyszYzg5WUo4dmJhdmRMNHprdnMxRmFyTEZLNDQ4dG1jZkpMREFUNmNqSEJibnMvTTlkNUhrZWYxZ09JNFh0QmE1UFpuM0N5akkwODlIeGJhVCtIRXRUNnlwWGtSNlZ3L0ZFcEx6YnNuUXFLdzZCMG52dHU4RHcwOXlmVFVxVWhCU1JYM2ZHUzd3US9rKzFlbDhJajBpVUNadUVLVi9ZV014cXN2RFJqT09TVmNiek5YZzlJZUFoeEdFVy9kS1hta0RLRHdVNnB1Mmw3SkpDK2tGYWdZOVFjT2hZZDkvRXFFa3UwSEdSWDlJZGRUZzI3bThROFUxSVZEM0RYQnBXWVd5K3lVZmRJMFNVYlcwQWZsMTg5dlJUd253Q2NnMy9XV0FDZ2d4TlJyZElFY1ZmS2tKbDhOM2l5bnlyVWZWQUl1RFJjOUJtR2YwVjlKMk5WcmRUcjhPaFRuOElxeFQxZExHUnlFZXE0TGR2cnVmcHdsekEzTjA2QThZOU9mY2Y2M1NxSjVuMEQ0b093U3RZSytrN3IzSlZ2NVJFK1grejAwY1pyMTk1RjNDNklGWDNmRWtCUmpRb3lvc0ZPa2RudTlIeVhyRyt3bVRKUWI5dEdlcVdWT0plVU1RMnRqYzl3c05RbEM5VSs1a1g2UDNXSnUxWVRGNjdRODdHNzVIVkZ1T0N0azZadk9xUE5yMkR0Z3hndUFBMnVGblRrTVRlaE96ZG1YYVpXOE8zemp5OVd4RCt2QnJXRHFVdUhIVklzcE5ZS2hQWGVnUllTcUxBY1l6QlkrYklzWUFSMFcyemdHZFpILzVEamdsckczZzVoRm1FaVR1bGh3Y1RuUDlCS01laVVFVy81bis2L1RsbGFqOEQ1Y2ZoNndXRTVQa3VRaHRPbXZXbkhoR1RuT1cxYzh1Ym9yalcwQXpVb3dVc1NlR2l4bDdwYm9TOEJvQjZ1bG9tdDVzWWFwbldrV1lZWDJUWDUwUXFCM3JVSndiSlpwUEt6VC9kaTVUOW14Z3pJR3RZK3kxTG1ZRjF4SVJ5ZEZRbTRtaFR6VGNmMXBaWWl1WUtWKzBqNGZTbG1XQUlhSlpiY3dpVTZiNnFNb3ZVVjR0SmdwYWlyakxVYnkzSVRST1RuUklBRjBCRkprTThkTzdtS0Q0OHJiMk9jL0ZCU2V0RE5zUzhHaGZUa2k2VVVZOU8vMTh0ZzBIN2FmS2tYb3NvYlh4Q1c1RDFXamJDK0xiRnpOQWYzVXU1TnFlcGtGWUNwQ1NjQ2dyYTNMSENVUDQrNW5qbkxaREJyUmx1eVAzY1AwUC9lVFFwMFJpWm1lODhtSTYzVTluVTNTUUV3RE9MVXVEamMyOXNSMGFrWjNGeDR6cUZJM0cySVpDUVM0eXhBNEhkWXVNU3hlN2QyNnBqS0NZUGlBNnpGVnpEL05NaUwveXVEdDd6QlpmaGt5Q2pOMjJRVjEyV01jZTJOenB3UzZjTVl3dTZjN09PZFAzM3oxaFk3YUgvTk1Pem1nVUdNQjVGQk5jdXp0ZDN0YlhuR0VZY01TR3FoMWpCL3pzR05OOG5KSEQ2M2N5dzRFK2xqdmV6WWpuMTFCOWNGTWNTcjFja21IYmdDUmgxNXVla0VkcWRjMUNZbk02NDV0UEg4cWFDY3kxdVBYdE5KUkRMSGJ6Y2dMRnBSV3RobHVnU1J5ZThhanFlZGNHTEFnS0hpVkVYQUdrVzRPeWxPbmNHSXhQL1BrKzhkb25ZbWp6bWcyN2Z3V0hmbWZMSWVSY2ZoMXFic2pzZ3hpOHk1WlB2OE4zOVpmOWx3Vm1mNjhVc2J3aVQwcUZXVEF0cmE0RXVrTnhtQWU3NUMwVS82dHk5dENhbGhFdWFNNlg1Q093K2lKaXlHQ3cyY1VGM3dRemliQ1NJYjVDeDBWZ0p1R01GVWk2K2gwcFVFVWlVK1RnYWxmajdraStoVGZEWXZvdTV0SUNTYjM4UlNSOEdsMU1PNThtRWQ5eUtwOWFYdE5DRHNUQmdrUGltSTNUMVluNi9lZ3NZZTE4ekVCYkhtdXpDTzk3ZG9aT013U1FTUThNVXhoK1p1Q0xxK3BkdHBMYUlUNis5ZEFiTU93bnllMWxjU2NpTEkvUFdObEJnTFIxYUQ4akhZR3EzYTJsOW9MT2NBTlpDa2h0ZVljSzBkMy9ESDFxS0pycm14a3VaWkxBcFNEdFVETVhjRGJnRG5WRS9tYzBnYjV2SFFUZmRTc3JvWjRNN3F1Si9memJXajREa3JaSDJqdFlNU0RxdGppU29xc2NXb2thYWZGTCtFOGhFVVVnY0FlcFJNZUdVNmRiVzhKTWJpb3Z5aFRnNXRQVGtGZ1N2MUkvWk1NZTNiZEp6RE9zWHdFV2hwUEpHYTUrN2I4SWNtdStwY2VMY1ZTSDQwZzRjT2Z0NjNmVmo3dGQzdmFOUmdQWjlwUWljZlFVR0lQMWRwdnpWVnhBdDNTeklkRUM0V2hrNGwvUUVNelNkSUxaNzZ1NHFsNGExUnorMVFHZFo3bkFJalErakxoN2NjeFFqcnZRUFV5ajBqcmI2R0syMzBEck5DMnkvV25xSUNKdExGVVJBS2syQ1crUlIrWW13MUdjVDRNeWVKMFVab1J4K05SclFYT0Q3SWE0L3BpMUxyaVA3YkdVK1U3NkdVR0JlcG1KZGdVdXpBNkJZSFZRb3d0MEtGdVd6R2RjTmdvTUR2QlNtUTFEbVJ3MHJkTFpZVlIrSmJMRGFuWjlBMTF0SlNPUmdUWVd4R0RUU1luVGx3SnFJSXJxRGpGRFgvdjVmelBnNlZWYlpkTE1yaVNwVU9TVWVabFJ3Ujg5aFdMOVR4SnV6d0xYa2dQTEcrc2pCZnM2YUVuVGRxM1FDN2ZYdiswV1kwVzE0RHNkb1pSWFNCdzQzNkR2VVcvd2k3WE5PZzR5Vk9vVEJQTlJrNmk3eUJCZWhxN21lQ0tUeUVCSWgzZE9BMzZBaDFyeUtFcHpuNUJHRVpNNENzZzd6bmZCQkdjZkQyOHBGeks3U01ieStuVHJlVlMrcnR6ekdBSGNCd3d4aE4zcXNHODV1WkxkRWMvcWNXTnBhZ09pT0d0blVqMEQyeTNJSXdOY1JwUmVYUlVXVFl2YUYxZjlleVhQN0JPV3BWcGU4TjRxazF4OWtaTm03VVlhNlA3ZlRiU2NCWTdWczFRVU1qRE1yTXdFcXJDK042TXNGWGZNZlgxc2pJOWNEU0tYazVLazdjQVJRWUFuQ2Z3ZGJSckJpNWtjY1VlNS92SG9EZUM4Q2M3N2hqb0t5Y28wdEJ4cis3R0JMRWVLNEFtcjBTSndET2ZCR1IzUVlwM005YjZPaGJiL09hbG9JRXJlNWI0dFV4N0d1aERUSFhjTERaM3FyS1dRN3NnaVlTTVc0ekdlcjRNOUFVVXpRMSs4Vm5FL1ViMHV3Ty9kU2J6MitNZzZqMlo1c3lESS9Oa1Y5YVIyMDdsSnYwZXJpelpMTzZHa0FYNW1kTWZNT00xdUNpVStSbkZuTElsQ2l6a1Y4MjdLWmFqZ040L09meWhjNXIrZWZjQXcvZUxGUi9ER0s5MGFwRTM4TTM1WUR1Z2U4cnRhWDRmSDV4N1lpUnhMK2ZGaXBKTUxnTVVPYmFxNVFPeGJZOG91TDUvTTZmNUFENE1hcVdGOHA4YklGRnRESkFuR1JJNzdONk1kY2VScmVFNWNSY1B1Ly9EeWI1ZjFlWmFxOE1YUDhyazlabFRCNlZoSDVrK2NHY2M0THJJVkpxODNKaVA1Rkx0TGdzNTE4NE5McEpNRVdNR3J4OFJ1RFgxVHYwSW9GblplQVYxRDJldUF4a0YwVTVyby8yWm9vanNwN0tKeklwVklxSWJPSkhGR1c1ZHlKTXRPb2puTSt2OUIxdWkrWXpML05rdHpmaXFlM0UzN1hFNFp1YmZXcnJ5L2VDdTZwV0J5MS90RWdMOVRJeGZzMW51VVZwUGpzanQ0dXZRM3Q1aU0zeTJ1ejJyQm1MR295ZGNMOWt0UHZWRU0yM3NTbTMwNGw1RkZLRG00RVJvLzZKWmIyZVh3UU9LZEdqOXpJU2dPNk1DNGM4M0I3SFJ6bFpVd1lPTkhmamRza0dSK3V5OW9rNEd4V0FLQTVhN1JwREZ1dGUyWHRnQzVPNklleUxiT2czVDZneWJIcnkwdE05dkk2czQwSDdXOTVUVVh0NjFNdTl0WEVxNmZSa0gxMEJSWU9rK1AxUVIwVDk4cm1hbXNySXU2ZzhHS0lxendPRUI2MzRhWGpFSTlkdytRazNTV2FYNTExT1N6NmZLOTlFRDdmUXFwRTNybHcrUFh3YkNoSXdVMXVZa2JxWUErWGRsNlUzc1lIdjNzTzZwZVNaREZscURjaTFTUUZ0MHZXVXRFdE1oVHdLdzVLWDRDd0hINitpUUVhazc1MXhheFE4d29ZczhQU2tOVnNsN3hrdkNSM1Q1QVI4anZ6OFA3dnZ1Ny9NdldpL29HdGZreGwrbzVxeUhHWVFReWg3VFUzSzM4MTBDUEhZOW5ocEhyeXBNTWM1dzIrczVTRVE5SGdhWDA2RkVvQjBId1U3eVVoNXVlcy93MTVNekhiS0VuS0Myd3NDTVpWN3lyVUtjdFlJVC9EdXdLTmlnRUNqTlNDdzJwbnJsOEJicUFOaEtjc0VkaVR6c3haZWlWT2Job0ZnZVVQL3FOMjdLWDRKcDN4OU8xNFBvVTQ5SSt2TEhidytudkNWanV3K21NQ3R4Z20zUnl1c2QwdXloeTVkelJQYjEvMmtSN2lNd2llZzAzcHBURG5NZjdHOHFzeTNocU1kTW41cEwwcHpQT21DOXlBT1l0VUdLNlAybDZBTFVNUWhVV29HM3NrZ0VEMW9vT1k0bDNaS3Y0aC9tdkk3d1l3aTRNWk5va3IvSitYWGZHQlplTkxISUd5WGVXUk9vZGx1OS90UThyNVFiVndxdVozMEdRcklSVXVxOVhHWHh5blcyQ0pZT1hTME9TcnBYa2ZmbU9xZ1c2eVF3YUdoVGZvbHRCTEdweUZoeFBPbm9saGdyeFJidkJtRHRjT0UrMyttTDk4Q0IvS2tFWnFiK25oTmp6WWh3OGhmSXg5TCtjazlKcFd0MER2MHZsTFVhZ3dGdzdIb3pTclpjWE0welFtb2J2aUFqTnAxWWVxZ2s0S1FzTmNrbFZxZjVvQjh5NUM5d1plbUxNYUFESThpaEd4dkIxeERvaTR6VmJJWllVY0F0L0h6bzRKbnFlTXhsRm1mcEhHL2tXMUxwZlNZTHpNQzY0T1FBR01QejRvUllMODczZ2tSbXdJYU91LzduQndMTXhZZWZuUHJ0eWdvaFJTaHU4ME56VjlNRFFZMTFuUloxbVdmclRYR3IvRzZ5TW9IN0pidXU0UjNTRVp1RjdxVUhtUFhRdDhYKzhkOFNwZzN4Y2RWZ2pudEZ5UVhIMWt3RmRzWmdWajY5WDEwUkx3cHIzbEM2aVAzUjBQOVhKM2lSazBUNjYzSEZHdUVLaXNxcmhmWmoveTloeDYra20xM0NLa2orMkZKeFFPeXF1WE9EWFNsbVYvSlVsSytuQVJ1WkpJeWxPeXp1My9ZUXVZcmFCOXBVY3d3RWtlUFRaQUk3VjdBeHl6WHRkK3ZnWlpVZ1VnbUFjQXd3RkRUWmRHUlJVbE56NTZlc1RzNm5IOUFDWk40eERjbkdIZ0t1dk5zZE9oVDR0Vnd6MllzbW5wTy9waThhOUtHbkkzTldJQlNlSXVWYlhPZEN6VVdzSTJGQlFSSlhjVTh4Umc2UTFCampQVGxrQmJ2cDV5eFFRLzRCM3htZUE5Y2lGYm1uQ2ZlS0E2bFFNQlVSV2t5amkvcGJrM0dmREhTQmw3R29KMFZPOCtpdlZEbVJNRGdhbkRveFJ1OE9abXpsSmd3MmtlY1Jtb2VNa1NBRVgxTThjRGs2Zi9ISHJrSkFPbTFtZ2VUZWFhYWpJWEd5aWtOaG9vNm8wblFRTTU3UzNLcjNlaC9ncFp4MVhGZmVyejFUWDdWUEowUWljNG95REpnTzZObFNMUXhodzdwMGtpb25qMFQveUxjN25RNkRZVk92Vk16a3ozUGt4NUZsMEJFd1FtM3NJVkxjcDFuWExrczJiMjI1ZnVjVll1aERSNkZ1Zm8xUVlQQWw2ejhocDFmaExGdUwxRjRBWkhaVG1YRWNiemhxRVNEZkFKcGd1N00xVEV3ZHJxTkc2My9vS0UwWUtyTEZqdDB2NXEyM1FsRTkvdkhFb284MHhHNTdObnFsWTcwNTFDeEtmSHkzSGY4L2VVV1NRUEVoRy9wYTh4NUk3SnErSm1zQWovVFFxaklocWk5YjczMG5jZU1tMTExbTQ5QmRXRWtjSTRqaEpoa1VPc0pRUjg3VnFXWlV6cElaODlUNitPSVNMT0RzUlk4ZysxVWh4eGsxM1l2SzJSb3BuYnhxRDlSbTJ0a3ZnSXJvTVErRHAxTnlCNDdHYzZmZXhqcUVPVTAyYkQ4WWEySGVocFVhTTZqY2JyQXRnVC93aExhVnpQRHd0YmdaNHE2ZjlrUnVwM2lNREl2bUZiRktmYVdPMlYwZURkbVBWM0k2S09UVzIzOGoyRmVLb1lKWFRBVGFaUUo5UDl5VXVnV2wwQW5qLzQzNDI1QlBraXNrLzJnK0tPNk9kQ2o5WFdRUmIzWGM3YytxV1FsV3NDbjQ5WlJsTUJ3U1lhS0FZQy9BWVVXOExBcGh5c2hLWVNOVmhqNGJwRWR2dGN3c1BuallmbS9ielJCc3FWeG1YMHlVYnRPazZDeTdOZElVMEg1ODZtdEhOdmhLcHljQ1I3Ylk4OWtPaTREU3UvQUExSzIxYkF2NElpbkdYUkFkVExudGpyTjFvbWJsYU5OenRtWjk5Sjk3bmxQN0FzeVpUNkJFaW55Q2gzb2V5ejduRmh0M2d0TVNpMUw3NEpqZjRNcStNMVNyNmh2U0luZmhWRm5hSHZWK043cTA1WFVycFFpSU1UZlFXTElDRVZXMVJZWHZXUWZPUlBUbWt1aWl0bHlaRFFWS0ZhK3l1S2QxSVVyNXl6bXBtZnRsbFRKSHMwMEZnY04vSEU3TEU4UkRPeFpkcEs3SlYyclRqQ0Zzd241OU5UeXR3dzdaT1hoR0dvVWtSQWE5QkYvSktJS0tlVGUwRnY4bE9lSkU2ZW5RQjRlbHdTempMQmpObFREZGhlcWE4dkZlbklXZ3diSWNBbUNIVUVhWXZkUkNVK2hwMng3NkR1YzY0N0NndHRmanFzZjdmT1FleGRRSm9ub3V4MEZpOFV6SEtUZTZJTzJBcXNnc0J3R1JsejRhQVUvbEtMbnRIMHN2MWtETE5LckZkTEErQTJ1NjA4UFo4U3l2VVh6bXVXWHZIVDVjWVFheUhmVm1keHJwa05MMzBNNEF1dlNOUTV5V1djaTJ3SnlOWDBaRXpJSm5wQnZYd1NIMGZzcisvdmpiaWRuam0xNzNuWWFaSkFLUkY3cDBoQlgzSUlKeVpDSFJYZUp3SWVrZ2h4R3ZXMWI1OEw1QmdaSmRPMDBiYnlhZlI3RUxyOWZITVl1Z2xNS2lVZXU1anFseWRqNXIvWjJpNkhnWE40bDJyOWx2ZDdrOEJPVWFkRVh1SkVFazFOVU1zN2g2bm0vTnplQWhLWUhLejZoNmJybk00OXdLOWU1SndMYWlWdGFUZS8vRFNxSmx5YkVTeU1LL1pYMHcxNFpWMVRCcG1VRGlFNFo4UzZpcGQ5MTg1OURicWVhZEo0cHJwcitFbWswUGwyaXhTUTJGTTYzT0MrOXppWjVmdlN5a2hYVWx2VitHdDN4bFFkZGpWVjVSZFlFZ3B0cmY4cVJrcnk5ZVN0Z0hLdWVsUmZST1NRSjV0a0E2ejFFSmwxSVRBcU1Ma2xBN1lzMnpqNmN4S2lpcWFBN2swWHNnbjlFNjIxMFhsZU41SG9JZ1BBOHhUbVZHQkt1Q0dTNTl2K25lMjNmSytZTE56RmkrT1JqNVVjYTJndnVac3BzMjJSTnRmR0diekl0US9VSEhwSFR5c1pzUmQ2emlEQW5XTXJybGpkV0cwZTRXeHl0YjNab3J1NTZ5UEhNZEdHNEc3R0ZuWGVudUF6MjVEeDdXZFhKT1pEK29abHlhS2VqVThBRzdhYVRNajEwZHJTY2lxWU1GMjFTNFdIak1MSWtPei9hS1JST2pnL3NoSHRaeEFPQ1pnak5wUnBHNEZDWnBUdEhLTWdrYXIwSVVqdEs1ZDVUYi9UOWVFZzBCcFd4WklzTmRCdWFRNFRXQXBkWktESCt2WWc0b05Ud1Ewb21GWkltVmNkN3VURFN4UmNncFRlR1pTcEJPSXhlU2VOZzBmd0hBMUQ2U1huTXhDT3JLNkg2bm9EMXhCOWVtbjcxbDJyVWwyZ3BMcUovdDRBbmFpbm03eFhQb0h2VHNjNE9uTDkzTU04SVNXSnRvTlIvUkNWK2Qzb1diamh4dGY3T1Q1c24yZmR5bXRDUVcySDVPN2tjNlBWQU5Hc0M5cUNkVmV1ajgvVWVNZEk4NWJpUm5heUl5UXJzZ3lRQlZtbGJNYW9ZK2YxYzErZVgxS1RRUk9aZFVwc3BNZkQ4L050WmNKZzZjcmlEY0NZUzZQVFhkUHZwTEJIalFUd3lQWUFXZFFPQzZIMGhDeWlmcGF1ZmNRN1RjUDZDSzU5UGZ5SE9XV1pxODlscDlIYVZZTTNKdEdsQ21OM2pGMzFzWG5Ydk5iVlZmTGJWRndzanhvQjkvRktPRWhlNWtHK2wxRDMrQlYrdEVYUm1ncVR3LzkzeEgvcGllckVkWURFQUtrSlh1SGo4Q21yUVU2U09ZK1ltV1NIVHh6THZ5bndST0g4d2pIaWIrL1RXbTdtZVVPR29yd05NWFpvQWd3VERLMHhpZUg3ZEcwUmxuMmFPcGwrWmx3RGszZ01NQlJ1YWtscVVUS04vSW5HR1BHSWJFNm9zV0NQTUNzRVJWUTJtZ3pRMHlIOEl5c2hvQnNLL2NRa1BnYXQ3cEdjQmZXbm5GV29TekJlOXJ2ZUl0NCtmcU1rWldEZHZ6UkZxZ2hoaEJIL0RQeEhvbC94MDRSenVUTm1yMGUxcmtTbHJzeXdkbnU3cThlVmVBVDc5YVlGdWtoV05EOHQ5UTFRNXJQa0MwK0VrQjFXTnlrSGVtL29qdGw1Z3d4elV5czJuZUUzbkRmWU00cHgzMnI0M3BpRzU5QUc2RW1mQkpndllvYWZ2aFJHbkVlQ05GRFIvTzliT0IycWZ5VnltTVZzenNJSnZwcHAzR1oyOWJmKzR1TDFRaitxcUZ4VGxhNXloaDlvYVMvMFcxOFVMQkhrK2NTOGJTRlUvazZwbFg0d1NTTjlMQ2IwTFZ2Z3Nya2syQXdVQW9WK2VCcWliNnI1NThPbnNmQmNWMzNPVlMyazlnNzRHOE1uWTBzaVlESVBoeW11bzJvZkRoUmdjd1BTZFJPTVpIdGtFbXNZcDhKaTA2VUVKNjc4SkJFWXJFNHVDOEJtc0ZDdm1RV2doWjFQSm9sSGw3eU5HeTBmbHRkeFNSWUtMUjh0YTRmQTNDNUd0S0xra01VNDlFWjJGWjRXekhuUWdqWlJ6SjhVVnFFRElOZXlCcGh1bFo5OS95N0pRN3gxYnp2ZTlqdWNla3I1RjJmdkJwWmZNa0YwVXFUZTdDblg4RXJBK1dXRlRFK252VlM0YWhGc0cyb1BNUE91V0NEQW44Q2VVVGd2MUFxcUE0ZGpieWgzTFRiY2J3c05YSUQrVmVuOEpLVEQ2MmN4VmhieEdZZ1ozMi9rcDk0cUlwVUdtdHdLUFc1c0F4YXdYa1VMVlozSVBZMkp3SzhOeUVsL3pxVS8yZTByUndhNTl4TDFWRW13NHZxZFBORi8wTHdOZnd2VU54bXQ0dm5oQmk3OEJGbFZXUmdPcTRacUJwcjZRWFVCYkRZSVJ0UFk3enVaQTl1eTdMZjRKWUliS2V2WEFkZzIvM0JHTzR3dUdpR2lqTGpzNklKTUpDL3hwazd2ZjN2ZTJLbGhjeE5NSzBzdi9GaHlqK3A3L1VqcStGUjVLbThGY0VxSloydFpKMm5vek9Mc0hWZWs1MStKSjQxS3loQ29yaUYvTmszMnI1Wkp0aG94NWNVamhXTTBQWG9qRXZBcHB5VldGM056Mm52ZkcrcWFQYldoWEowL2dYcXk2eHFRaDhYNDk5VDBNbzQ5TUpQM0xyRkNqalFaMkppazZ6MzdSdStpY3pOTTdlSHRVTWkrbzVURjlNeDBUNS9LZUNQTGVZK0tRMHhRc05IdmJHWFRpM3dmU2ZhR3RTU2VrSm4xV0FoTVo4Y05NRXdUUXdlK3BrSUF1MVJSbS9selNFbTdxdjhzazhxeVQrRW9WTC93dVd4T21pQk5xZTV3MVRFSEdtK2p0Nzc5bTJJRXQ1ak9YMHNINmJSYUZZVVZkZUpjZjhrc21pS3VCMjV4Q0FlaW5XaUtlMlZUeXdKcVF1QktJeS8wT2JPVFdtTGlMcXh2VlF1dE1vOTAwKzEvR2VBOUl6cUUrbG5YVkdWR1kxYWEvM2Mrak8vZjU4Sjk0ZFk3RU50Y1dLWklYSHdybU1KYVZvbDhzZEhNeGpYRm1MdWtnREErNVJ6NTlnZmNicW9QYjJaQ1RlZkU2UStGZkVQWlkwaDVjeW1kODIzN01ycnVnVXdmUTNrNnp2NytlS1A1UVZyZmtIVmU2MkhNeTcyUEV0RXVpQ2ZLUGZiT0VBcy92ZnRJS0xwYVJlZzluOU50TTFHcFEydXNkU1dodVNlMDRXcnY2UjFEV3VWU2NkellENnFQeGFYUlIwWXJMLzlPU2tBRDRIcnVJL1JDSXVFVFBlZ0ZnU0hNUFlkclhUK1RZWjhBSWdhY0Z5NHR0dTYxWUpud202SGJVbE4zKzFOZGJTbnhoUitwZUNFY3YrRHFiSW1TM2o3RTk0TGhBeWgrU1EzV01Ndnh2bmJDbUM0dXJpcWRKWmkxNnVlbFVocEhqNVpoWi9qdHA0VW9vRnZ6UXp3R3JTeTFSc2d1MHdkcGp1T29iQ0orWENneFVjWmdDOTZVY09yQUpkcmMxMkpDekRqUXdza0plMS9XcjJvTTEyYlRzLzl3YXFsZ1dUcVlUa1I0dHgydmU2dHA4Rk5URXNVeGp5QVlpVHRvZzB0SXJXNU1OQnhFNGZPNXY3OGh6dFd1d3hLamkzU3BuQTBVWkRvYVpzQU9ocDlSNWkxSUlrUUF3UjNTVlg5Q1lVdkdCYzJqSDJ4Z2xYQ3RjM3F6cVVwbFAvRVRudFYzamlBOENhYWlJQ2h2enpma2R3MVZsNkFoYVk3Qm1TclNSQlIvMlJWb1lYSmd1czBxRXlQa3V5OXJtcWdYWGNoS05VS2cyaDQ3cU9kZm1ad3N0c0lMRlNNN2NTaVc2ak5aMXlUNUFpNVpra0dhWDZDYXJpckx6WElEcyt0aUtpMW9NS3BEYnhmTC8zWnFFR3luZDVUZDhueUZQM1dFd0wzQWFubGVzUm9nSnB0V1pZc0xRekNFS1B1djVxNDcrcjNJQWRvTmszV2EwWmpKRnd6amJjR3hsTDFpdEdweTRDRS82aHppWW9mVkZNUkdLSlNuRHdHeG1RMm41VlNRY2RHNUE5YUdWZVhGK0ROZmhMa29hUW9IQURUUE5JcFZ0WXVMNzRRUldPVDZwSFV0QTY5U200N1BUaXd4TEdTOVN6RGJoVVJWWVBHaUo0VDZGdy9pUkFPNXdlV3QrTjM3c0VGWjZQY0RhcHA5NmNLWjcyd0JxTWJVZXRMQWRGeEUwNjhOYWQxNERKUFdCTXNPYWVzOHhvK21ybXFKV0pTcU1BcUhVT21qc2JwRXgzODNwN25kK0NqcHlGNDhpamFDNmJNaFhqTGNKL0pYQllMYmhJQWpiREpwb0JtbzV6SnQxUk81Q3FBYWhVbzB2VkJxdlA0N1NZaWZJZEdjZG8ycFlaQXdqczUzL243bDNzTnY5WHVOUElZWlY1bWYvU3p0NldndkNXNlBFM1ZHVDNJYnh4ZTQrYVNLSDYxRnRqQ3RPSjBycUlJUHVpUkF0U1QyWlZoMm1GTmMxWTZ4bmo1NjV1NGlYUkw2L0ZTQzBXc3krY3VWYWJhVkNyMHVaTldybVdja1hHUFgyTEpuZWJBaGM4K25aaFdnTzZjcTVTS1dhZktUVXAyT3QxTTFHTHgxUnpLYVdUbmxhMkFiZ01kL2FVTFdXbmpKL3duOE5WdDVEMnZoK2wzQmRIMEVTNjJZWkthVmJvWlBSZ3R1QTVrV29nWWtEanJ1RUFjNElLSXpRYWt2M1l0YnF0Z2QvMVBoT0lsRGdDUEp2ZG16UkNPU1lzV2FTQ3J4bDQvZHRZZ0ErUFFPQ3BmSWpzbWptR01Uc2pCU1hvczhBT2ZlQUsrc0RrdUNRR09KOXE2M2dtb09ENjNDbEZYMXozaExyaS84dkRjRFdQaStYQ292aUk3cEFMR3dzM1dCd0FtdE1FcHZDdzg0aytTRkpPb2hGa25rUExwMm9pRnZ3Y0FkeTkvOGl3eWEvS1ZnZEcvc1A2ejFIbWc1eDB2SmRkcndhVXVtcDg2NEJhWFMxcHpvTE4vYytLUGwyRWtoeFh0ZnBYWCt2RzkzNG9TVmhBMEN0RzBDY2pvdGJEWjhuclM5RWJUdHdZRGdZQWFGUG5mbTZPQU1EUSt3NTdEeUt5UXI0RkJkMWxJV1RjYkhleitiL29WRisxNHRHSmxocjREbE9VOW5uUjdTZ3pxV1FnclhuNGdKdllEdzBRNjczOHRCY0plUk1qQ1pBOHJhUlJHWmFJSCtNKzFlcllKcFprVDY5YVJzWXltK3dWRm5zdUtPem9xcGRJaGFPR250ZlM3aTM3anNCS2E5WEtkRjVoTmpINmp2eHZWdG1EU0tKbDdrMWhHd0hQa0VTNExVV2Zic1B6K09HU1VwWWx3aGdiSmZnc0N4OEpKeGtkaUVVZzRYbmlZL290MkpxQWxGWTVoYk04RUxZalFjL0IxdVVNNlNaWlJ3cThEYUk4VkZVNlQ1YzVhNUdIYlQyZ3JSZnBZNXJ6MUlxTmVJVmxyaGh2dWxaeldaVjZQR3l5MFAzaTczMzhobWNqQkp0ODRlbEQ2UDRXL1lIUFIvOHdyMWYybkdHaS82ejBCczZwZlFwOStsZW11Q0R1c3dHNmNCZU50UGczbDNaZTl0b2tMSkE4c2R4NXZqelJrMEkzRU5lTWs4Und3YVVQRkxkWE9tSVcvak1nVVorMCtUUGV2bTZXcGM1WCthWU11QkpnVzRQcDRBbmZYZmwzN3h0TXhRWkhUeituRFJKZEx4VG16UytCclE2aUxCRTRaelh5NHlqN3l5SThVY0JNRFhkYjY4OGtoOXVORm4rRGYyWXN2OFBuclR2ekFXdno0dHBEcjJtdGIxVmlpTmNGTlFKdmoybFBCNXJQd3VQendsVVNnem1GNjVoT2t6UHk3bmlNb1p1SXorMWtJRjI2dG1nb2ZuZ1V5ek4vbVRDNUIzNXlqeThFS1MzWG9jZW9Vc0pvQTNqQWt2ZVB2T1FZc25qakdYdys4TndKTGM0QzVtZTRZa0lzRU9kbFVpd1l1WmtaN0hnU1QvVmJvMEhGTnBrL0UxZi9CRW42Mmh3NUUrZ0h0eFpjMWhZSURWSmlHRGhrdjQyenkxUStKT2tCa1g2UzBiZk5UZUR1dDkwNCtVOVl4Y2x4TzZmR09SRGxacEVZR2pQUXU1QUhQZDNEU0pNVnhyUmkwbHNtZm0zTEJuM3h1RmZZc2NjZUxIZ2R2SE1PZWRLRW9HMU9HVjRjd0JlVmJtUnk4MndxbkFmdWhYUGxYM05lZ29mYkhac0VQeHpnT1dFYThldlZFSkdGZmpaVW9LNWU1Q0dwSlJEN3NZdTk4TTFIOG4rN1huUktGSHltamdTaFU2enBkcmQwb2dYZmtyd0p1QU5uUlBWSHNjTG9yNE9jcmVvdDlGTFh3QmljTmU3dmtCQjZibmNnZmlJaHliWDA4K3ptS2xIYUtUU1FjN1Jjb0VZcXc3UG81cjEySmZmTndoRUQ3L0JKNzhVZXZtWmpwYTBiS3hETEwxanFqRk9lRE55VXlRNE5nOXRWMVdCMldKYU5lRkhaaGU3dUU1YlNsUUtxazgvaTBLSlY2d3Jpd1hWeDBsdDBYY1hSMnpXRVlQNSt2QkJIMkVic2FNMTZGWmlOelprOCszMVJCODJrZFdYQ0prbzlRa3JPUitjNjV1Uzc4NDNkL2RFVkRoYitXS29wMk5MUFBzUmJXcGZMczBCTkwxMWJnNTduaTB4bEo1blM5QTd0eUNKNlB1N0VsSkVPbXFQZkt2Q1RGeGFLK1RjV0pwZHNXRWQ3U1VDWVZSZzQxdE14RjF4MzZjcmR4bWcyUFlCenlVQkF1UHpDWDR3SjdzN3ZYMDhiV3RNdDVMMEpMQWp6Z0t6a1Y1NFBSdjNib3ZsaEZqR1VFRE81MHNrWmxtYkR3czB4UURaWWk3Wlo2YytISDEwVVQ5NVQzcHp5eTdVc0dSOXJ2VEszSlVOeU1ZMVMvZHpZcDVmRkJPR3BKUVl1TmlwWXhHL1hkNlZkaHBuMzZ6WENFZlNDb2ZJeVNuU3FDODUxRGd3MnlKOENhVGM2Sk4yWEtjTkdTcUlLcFdTc1hZNGhqdmZ1REpxQmFKdUZuVzEvQjFBZVFuVEYzbU8za0VpT09aYUU5RkRpZGozaDB3RXgvYXJ1L1MzV3dBS2Rtb096SWdMWWVqVWlocW9jL1AzWEZONnJCUkV0RlA0cXk4RGVBcWVUNVRPaitOM29Ed0pwQTNsV2dwQ0V5SHNnaW5MdEVpM3JpOVVNYTVKNCtTSktPd29DU09ISjJFRFJBNlFMR0g1RGgraWI4VDdEWGlrTUZmcHMzOHFlSThTREZVV1dsU0lJa1lnaWMwemJkU1l1Q3FxRjVTTWZJU2U2UU9wZnlTOEdYWG5sYU05cEEwMkYrV2JBMGJJYUZheVVqZDF0M25LODk1Uis0ZmZTYzUvdmF3dFREVzcxdlZxQnY3S2hWMi9qNlRSR0NMMkYrNTRWT0c5bjBIUkpNVlFoK3dwOUhmZ1FvSy9PbEFSUTlmUHlPa1ZnNWV0TE0wMWZMWk5KeGFmOGl5dGZwT294aXlSOE90RDROaFFNM2EwaUhlc1BaQXhsMEdIbzg1S3pYeUtrZ2FMOGM1SlBWRHZrWFMxVHpMVG9tTVBRRkl0a25PWGovYUxkTGIxeDAxdjRaekp1SWlMR2MyejlsWnZHczJGRmdBVDluWG9zVzVBNWptd2VIclpQaHVBUVphWTNtaC9kaDZoaU0vSFE2cHpHcE03RHdKdU5GbVRaQUFEdVpBS3ovYmpCVm8xR2IraTBkVFpYY0E3OEkrVWVkc3dvRGhIMmhXeHVqZVNkZHNYVVprR214L3dIQ1VieUcybFp4Tmp4STAyVVM3bGZ3eEUrekJaOFc3UXVBb094dkVWSm9BYlY0dllEb0trRG9yWDBHYk9zOVhxZUNIYXhIclN6SGQzeEVlbEtDZ1FDNkZoWjIxR0dQZ2tWUEtxd2pnYjNmNHFUN3ZxejFiRFNIbDY2dUgrQVBaT3lxRTUxenhtSzR3dGVaTWQ4Rk1jZTZ2eUowYTZmeWg5LzBLQW1iNHMyZitkVWVmQ3VKbnhwZ0ZML1RnY2tkT0FxaStGeUNGS3BmU2lJalQ4MFVpdGI0ejlKdXpaQnFMYlRtd05XZUcrelFzelA1S1FPTldhN1NtQjhkV3pobEl5bVp5VGFEdUpta0k5MTFFUmF1TnMzdHdvYkFrd0p3WkJ1Mys3SFV1MzUyNzBGeDZ1cU15clNITVV6SmNNcEl5Nm5oMmszb3RHNEN2RVEyeVNyYXN4RGExS3RqZWUweEc1bUE5bnBzRlJXajR3dTNMRFE5RkYrR3RxSWZVVUFaNGdRVDZRTm82cG00Wi93dit1UGZ3VlUrVk1zYytSYWZabkpNdkpTeWpGQjFRUXFzSFRWT3BYdkRvYlZkbVZSenFGOVZENGhWL3cwcWIvZFh4ZUkwWDVaNE1WTUNqRlp2am53VnNyOGl4SWFiaEIwZVp4RUk2QTdST09zVXZYMUNUeHc4Q1ZVVXJzN2QwOURGb1J6aldhT2VOZU9FVC9PeC9yKzdqZzFJTVVSRWlsT2hyQVZYMkhqWWUyVlp0YVZGaDdUM3VlMVRLQmRVdFFKMm1wZlZEdHg2UGcvSGpuL3J0Q0NsbzRhNHVJSXhJYjBFWDdqOXB2QWhydU96MWJ3Z0Foem1pV3pWTWViVUhaamU5c0QzMFg2Qk14RUhvbG5qdnA2eFBJSS9QaDVEekxydmYrOFJ1M3JPa3NpdDBoeGY4UzBhVzVxc3I3U3pMd2FiR25YTWpEc2JCeVJ1REgxd1NoQXVOT1pTUk1RM2NVS1FOemExT2h1WEMxUE9QR1RjaWs0NTBGTmZ6STloY042R3RzTERSQWFoVGFvK3JLRm1XUERQcDdvM0d6SUhGNVU3NHhzMGJoYThWUjhBVXR5Mkozdm10dkdHVUoyYTIrSWgreUpoRzFYaHJHd2RaaXRPMFNJVWcxL2krRTBvR2dXdG9lUUJIL2FHeXdQY0pBZWkvY0R0TkZST3hyMlNzM3dXUVIxZUlQV1BjTXFlMDBobEM2bEFtWjZnZldQVmpQSzVLdXAxVElCV1hWeHpQYXBwZmdDSlQrdWdiN283SUVCRy92ajFtb1JpSUdmYytRaURRMElab21zZHExdFVIYXg5eVIvV3Z6YlNhQlhVendNRSt5N0Jpdk5KTFE2NWZlWlNwMXFyY2Y0N01JSlUvN2RCY0Zib3FWQUpYZjNBNHJ1enA2aWFoV3BHd3g4MWhpUm9rN0s4c3UwK2hFNnBWaTJ3TGo2d09SNDdoM2FObENpUm9IcmZlUmltbHVQOWhNNktkWGdkUStqVmF4anlRK2VwN0c5b3hNSG5VcVltV3E5a2YzVDQ0SnN1aVNReTQxYUZGSVYzVUptMDZOTTZsTFoxdDhMRWtINU5KK1pUS2JVa0lrZG9TNk8yWVB0Y2N4YXZoelFrS1B6N3VGcFdwd3hFMTJPMmcrUkpZcnJXTWZTU1hrOHpFZjBEMmlDNFJvRWh1cmY1TURPd2ZndlJwZUFtYk5rZUZQR0M4SmVPRng4bkx1U0VqaTRYWGcvMFFrdHV1Q21IT0pNZVh6RTlrejQraWxGVkl4bWZWbm9GZWpOV1JZcnBPYThWZHhBWjFKanBpRHhCWnBVODdDeXUxNzNJWURUTFQranhSUHpTY2l2STltVVIrbmV5TUNhcWhEd3c0QlJtU2N1M2dFUVd1TXQ4eVBhbFV4ZVJwQ2k3N2pBaUJ4L2ZNVjFYdUxUMlBaSHhJbDkxMUdQV29QeHhIVFVHTXRVN2NyamlwZTJrMHR2bWpHUm96L1UrVDV0N293L1h5OVE0dEg5U2Q2ajhkVDZ2OThWVmVsaEhkejNZdGtHVjk3bE1YOEtPSzF2Mk92NSszak16RmZqTWRyaXdLbTFWbWdTYmhLUkl5anBjOUlUZXdMWG01bkk3dXVrOExneUF4SEZScGxHOGN4NDFrRUh3c1BqTHlhUXRlcjVGOTBEbzF5Mi9wblRWMGxNd3V2eFphV0tTdFpCNEYvWUNZYTljS1dQdHdqNERqQ2J4eExkeFplWjZ2SUx4WGZhSjV1WmhBMndUdjQzVUpKQUU3eG1teEM0dzhSUkNSb3UxaFVaeHJsUHVFYk4zS2JMbEZvZW1ZU0hFTmhySUhyeFhZRjIzcjcvOWxhcDNCMndNeFdadTM3cEFDMTRSYWo1aEYzN3NOVjF3M25MLzRPNURJUXlHRDJUN2ZROGZmN2dDTmlYY2ZySm11V2Z2aGhCVXNmbFU1UXBIaXR5WGE1c24zK3l0aGJGbGxuYjZSYWw4V3RSSDFFSEpSbGpjTHdDazl3ZEpFVnBxM0VLVDNhNDFyR1phNHE2ZTV4MFRMNW96V3lFRU9QTmpWL3RieFh3ak5Rb1B4MmxqRFRTNXlORktqVUZycW8zQVJqd3dzaUdzcEpVWmIzTnh4dlkyODVwQzhMaGpDUWRTeElYV1RRdmRVU256NENUNllWRkdFVFNLWC9VYVA1S0RQczVLR3lIcnpsb0dhY1dJd0FzYU5jMGhUaGR2WWx1OWd6QjY4TENIUU82b3h0S3JrYW5ZOUVoK1RKbk5ybDJBVnVWUEVlczAzNnpXN2EvUGFUcU5zdy9IakY0THdtS0dSMTFYR3dReEs2cU1aVmJpTDgvVTd5RVFYbXZCMjc5aENERmJZdkM0ZGRlTjQxd1dTL0xIb1Qwai9NRjNFR01VN0pCeE4xajZLMS9wL3JtU3c2VjloTDBOeG56MCtmaFlXQlhyVHR5QjhSMGZEMU4wTlBjU3lFNGpaVjk0NS9YUVZSTGQyOHR1Vms2eEUxSG0xd1pVUHkzWUtZOWtRRDJKdTdId0lZK0NpYWkrdTJaRzNiWFZ4WWw0Vnk0K1VYUFdaVE1XTFpGK3NRYXUrem9WaUJIM0xuVFJoK2dGUUxBNUdObmhrYnNxbU03OGNKeXQyTWdaS3JsUXVOMkRMeXFuT3FVU1JnMnJIOUFDMG5OR3FLWDhERHc2b1g4UWd1a2orSVdBMk84dytBeWxQNmNjbjkzWU4zeVczUWJxSTZGbmZzVjBOME43ZXJlaGRaU2xNdnZDVkY0LzlObGJCaG9xMzc4bjdINEtaS1ZWTkdQZWY3SDhHcEFCa2VXbmFCNmVrYTBjUUZvK1JTZ01yKytYQWhkdzJWZnZQZlA2a3BDSlpReGZYRW4xS2dMK0dEbEkxK2xxTGQ5bGVsaHU2cXQ5NHhzUXRDQmw3UkFkdGVrM2hHbjNHWUtkc3lWVXRreDVFaFJGWFYwQ2E3VlBTU0pVWEhlUG84Z1BjMFVTaC9RZmJHS3BCY29aTmRLMGNaN2s5bjU4Ukg5KzJTWUZVMWRrVmx0eUVxLzJ1T21zZHFRdEMrVE03UWxFcW00KzhzSWMxdkExamppdkpBNlVFMUF4TnlGVWVDa3hYOWZvQlhHWDJEYktQUWdIaXZCVXFJTWRSSUh1dUpwVlFSTlpnY01BM1pLaHFlNnQ3NWxvZHM5YTJRc2U1SFVrSmNmWTJvSE9xYnlkeTg4MHdERFlncXNlRWpHVVBHRXlyQzF6K1pxMTl1ZnhsSFlLRnZZRjZSMHlKeFovUjZ3U3JIYyt5bUlxMzZQUkFYNnVNbEZQZDVxM3lReEhVVlBnNFJMSFN4anR5RG96UlM3bXRUWkRMN1pjampvdGhHUVJ0bUZkbjFUamMwV0JjN0o0ZUFQbDN4cVZ5RG9zUTR1bGx3M050bWhPVHV1d044RjBpbnl0dFpvMEx5Um9tRzhEZU1WR2hlQlV4dVZKYUhBS1ZwKzc0eXg1SnBZT09kaENMb3Nac0JaRzVhS2E4VEwwNE1GRDF6ZEhPak9zMXlpZU5HWkpXV1RWcXRtMmpSTTFXeGZpbWdEejRTcHRMQ1hxemxhWityRHBZeWtPTmZhbTdNMi84S0U4c3NxWEkrWklZNy9QZGQ4WHVhcnhOMEExaTRrZWRLZnhUSy9MMjRXOWNBd3pIWWxUS2ZJWVlleFRUNmFyUkFtQzF1Y1lDWWtxczkrb3cxWmNKYzhMU1VBQXJiMEFpYjZRRWdyWWlSbE5zR0lTMXBpbzhwdnhaTVZoZDRQSy9wOWpjY3pIUVpQWUpzTkdrclVwTWdybWZvcjRZaTE0OEd4OE40SkptRTE2K0k4ZWxHU0lFQ3FjckRMZmNGWlUvWlY1VDRyU0FHQ0lKd3VDK29iVDBBbUpUaW5yd2p3Y1ZDK2NpaEhpYzMvc1ZLZFY0SUY2ZUNDTEsycG9ZNWJDLzYyR2IyTlpDbDNnQ1ZnUUN6MlNPL2x0ZCs3aUFGV2VlL216dmI0R1luRnFrTkNrOFlMOHc4L2Rqck1nMkZab3llYWwzb25lK1M4MWUwY0VnQmZlV3dIY28yMHFhSE1RYmNPS3JEbTI5TGZNVGJvSDUzUDBhRW03aEhpazR5bmJ5UEhIdys1WnJkMGEyZEtvSUhKZmkrbis4eFErblNxNGJRb2krUjZ0b2pHWlFqY29GVXhTeFFPendRVEpIM1dOZWZ2aTJwdEdOajYwUHFaS3BGMHhRQ0I3VUhFeVFrb0lYM2VZbXRUc09uRUVPQWRONmYrdEszMDg4TVZ6TGFkdkJTbFZtdFVENzJKbnY1VWNVR0dMQThQaDBtMlo4T1NEdjU0RUEvMUpqbGorZnBacVl2ZnI4Wms3RUE2alMrR0R0bDN4MHZBNzBJQTAva2hib0ZLUlNWMUo1ZllmMTV2NGFEV1VjWTN0VHRudkF1dDJQbmJUWVU3azFvazYwU3hoaC9pMzdJUnR2aEd0bzdsQ09aeDM4eHc4N2FCOEJ5b1hlcEV1dEdlNkcxcDhvdHZPZFZ2WGZibTdacG5QcUFxbXIrS3UrRW5mSW9vaGtMOGdGQmlIcmxUOGZvMGo4M1gyOU9TSmV2bnBYNXFXQjEydDhWbmFNaHJzRVIzZTJLaytXelU2SVYrcGxka0c0RW1obEdzY1d2QW9FQXYyZStUeHEvRm5tUzZ6UmIxMndrUXBMblRhZlhsM0d4YnQyS0xFRzdmUGRrOExxalNYS09nZU84TmxpenhIdzdsSXg4ZXJDd0dYbGhoS1BPUVIreHpyM09tRVQwNFo4TWdUT0xHbHN3QVRCYkp6WmZQZTM5TXRLQUFnaVFUbzNmMUZHd3RURzlTc0loVlIycnBsK0dxZWVCWHBJbUR1V0pSZGFUU1A1aXdQekIzSXFwN2tVbWtTWjNvOXA0TkpzN2pUako5Q3lSYkNSL2NSTXdVd1RMbFNvcUNGVzVLc05oS2tzVzhGQ3ZhZTNadXZDMmtES09uL3FNMnBqVmFBVWRBVXljT0sxWnlXdTBEdERNa0pBKzJRZ1hwckNXRFpGOWZqRThGRU02T25SODJrZXRBUHdmWkNvakNpQWk4SUFPSmZYTnl4STlWc1NGZERySmVzcDVWTG5hN1hJS05FQ2tqaCtNMkl1VGZRdWUzTmgveUFCNTJwVllHVkcxaU1UdGE0eFVzVXBJMFNnYmtDVHJ2Ykhjd3U4bWVmekRFWXJaaEZJelhna0dnYUprM0NRYTFncjNmOW9Fa2lHVnM1THdRODNhK0d0TUFzNUhVSm9QdDdNQmd3RmFiUDdaOHRZRlcvU25Eb3F3b3pRNWYxdStoN1JNbzBpNXppT2hmYmg4YlpZWVc5cm9Wc1ZQakxNbFZoekQrUjl1VDh1M1hFZUhHUGpCai9Lejk1eEh0b0Z1WDcvWU5VeDNrVElLM2htVkgwcUJaT2pZbWpaKzhadmFmQnBGUTBkdnJqOVdOa3p0YUo5QVNoMWJjM0w3Q2xWTEs3R0RPSDJlaGNMZ3pDaE5sRTZNeUJZZStCbXJPY2hBTEY2RVVlTGlsM1dRUUsrdVZ1elJWdEZ5RnhZNlBDTGxYdHBqVXNUU1Awa3pmQ0VjN09raGxrdWFkOGlkMnB3OTNURjdvMHl3aTZ0RGtQUlhKVS96TWhHWXdhVkFYNHdQMUVkbHdCRHM5S1ZsVnVmWHZkSkIxYk94akdGL0RTQktjd3pxUTdVSkZadVFYUFZEOVMwelg2eUF2ZDNxbnNvNDFUMmUwU0tuVEd2RzlJeVlyckN2T3huTXN2U0NSemN4TEM1TGRlakpwK2Vja0I3aG9ldzZ0SXJqUERLZ205bkM3ZitBSVc4OEFWVkcrSVlEUXJIbkhBeWZDRVBLVllMa1F6L05QY0NJK0dYQ2IvUmtnMkppU2V3QzlCcklGclgzdFlOWTl5Szlzai9HTnV2OUN2dUh6TXJDWWNrdjY5MXhKMzV6Ri91bEl5VGJmSFhsTWZWb05tNjJZa1JYNTFkOGg0dFBYRWFZV2JBVEJJTWxtcFJDSDhFSW1Ca1ZkNUlmNDhiNVM4V2pDT0RXcjdaS3d2RXJOaGI1YU8zOHViMUZkVEFHNFFYZE1lNURkUXZoVnc1NGwyak1zbEtsbEk3bFBGT05lY24xV1FZT3BsQkx3SkI2dGN5NENMaEhCTDBicGhLM3RCZWFDSFZNeWNyeDViUjAycEJWdlRlU3RFMkxCWWxRRzIxcUU1a05nK1RyQ2U4OGhpVTY3dWZFY1E0enpraWRPN2gvZnRYQTlsWm5QcC8vTldoUkdaS0VnTU0xa1BwY3Y5UktYZnBJcGF5RjV5bmUyNVV1MHZYd3oxZ05zcjZOVUFNNVRIL01oT3hJRmtEa1QzUGpIUGpVeDRHMnVkOEVCOENFczJSSEY5R3BvT0pMZjBzSXJVdks3cithQlNBUndtekl3cVhRUmNVM2VVbHkrRDlOczZIQVkvb0tEUW5ZeVdzTi9URzg0U1M0UXJYQWt4bzRYQUNFVksvQ1NpRkVZeUE5Z0d0NDAyUFN4RVhiNXVCVUo5cllpT2tRMmNtWWxOWUpGYjRrZGxhU0dHeHhNYWFTZm9KelFTa2VqcmpLV2V4MGJhVVhsS3NzNzBzK0l5a0MxV3Z6KzNTNEhUQUVWazUzMW9QazFuamxHWEp0QUJWOTB2SVFjSDErVU5CZmhXY2dIUmhCR21vSVRJR0hYRlcvMTNPaTlVZkhyZnpwVzNxUzJZRStuVFlrOXU3MWFKTnNTb1NNcy9KZDBweThDb283MUN1Y1dUNnd3N2Q2SUhiS0l6RnE2K01mek01YWJIYWlQY2NXTDk3RmJjRzFWWmJsa2xValI2am5DZFJMMHkwTEZ1TWoydWdkOXFmeDdNV1NwSlRuWlZHVm5JakZla1lhMmFjd3Q0QU1MMnhCdU9ncXh5OTZ6bjN5WmxsNnZ3RUtRcXVwTXQyNXY4WURKc2l3bkRvQm9sWEpyb0MwY01oYVdnaFhqdlBGNytRdWxpdHpKN1BFTEFNMDgvQkdZOHBEY1llWkdTZVZTNVNicUhqVTErVTkzb1BLcW52aUJkWUZjSVR3b1F3RmlTNkVTYm81MVBXMVhhcmJzdnRUWUs3RjdRT0R0RndGZW92QWhqTVZjN3BKMnVGNmV4aHRLakVqcXMvWmYzZnlLT0VUT1V0MWZhelluQnZPdWc4Q3RtQ0xUUXpyNVNLZmhZQzdwRTVTNTNyY1I1WVdtaWVkeVYwdmRGVEdpcDE3aU5DUDVtSEZoNkwwYVJlRGszdi93cnhObUpqQ2g2K2J6T0NXZWYxRk9NM0FwQlFtNDRjRi9nVDNnUDUydjdRZEp4U2RYUG9Sa1k3YU1pZDduelVuL3ppblk2LzNocEdzaWx2eGpDcnE1MzUzZVF6YUMrSHQxRDBHNWhYdElSZlFEOEhTYjZLWDVZdGVhdVlhUEtxYVo5b3JnbTNlN3l5Vmo0a3VhK3UyRGdwenhwVEEwZGs2cHFsMDZhVlpERWtQUlluTnNVc1V0OXRya1RDZkdWcWFGbU1IMXU1M21rYTdUTC9EdWg0dEZzWmlaSU1jbE9OQVJ0YkN6cG5URkovUGxIZmhIcExzOCtlaHR1WGJKcmN6QStjcUpFMENwSTR2NGtNa3FJclB5UFJvZmVBVE1uTE9NQnQxL2Q2am5nclJTb0NSWGFWQngwb25YckJCNC9WejY3S0ZtaDNWelhNT216NzJmSHF4TnZ3Uy82Y09KUnJtdnVmdnZFUFpzR3BBc01hQ2dCM21aSnJKTGh2bWxYSTI5S3lGUUVMbjlpYVBNY3AyMWhUeHVXRkthN0FmcWZ1anFpU0ZxQ0UxakF3eGdqQVU0ZVIyMi9uNVV2Zk1INC96WVpIWFlzdXc0UGpLdm9vSXpPRGxvQ09jTVIxSHFVVG9yZHVMVUZRdS9yYjgvTkdPY1p6d1R2QnV2S2xNaUtFamFqTnp5VStNbGpTbmlON21WUDVaVTQ3QXk0bGJEbGR4Vm42QUdsMmZHaThzeTliZmZvNG01bzY1eFY2YWw2a3dvUitQdWFwYVl4K2FldXNYNjJoUDNTaWNaUXdPYzJSb2x5eHpkSG43Kyt1VXJ2YnQ1a1c3M09yMkZDNWIvdWo5NVQrbWc1V25MZXFRVkppMmt4OWl1UkMwTzdaMlRQUkpNbkFLcEVLSDdmSTkwNlNpNjNZMU5Bckh1OWxiMmtiQVhSMUphY1VqL3AzQnE0K0JJSGNlWjhnY3M5SXVBOE1nTmkvaFFsS0lWeUhna0NBeGw4K0tqL3F1SGpUTkp5OEpVZ1hBTFU5VkUyQmFaWmU5SkdpY3JRSjYxd2VtYjZqMURKSzYxRm0rZXkra0JqTWU3VXZhbm9sZjFYdmlKcTh3MVFCWTZkTkZPSnJ4RS9EYnNGbjhxb1FjNlYvYm4zSi94SGxrcDIzcXNaMTQ3emIyTUlUTWZ3UjhTclEzOUhLVjdjUFJ0UHdZWTRXMEhHUjhhdWlHUlJEek9QZDRvOFZyTHFGUVpJMjJ0bmp2R2k1eklhU2NvNXUyL09lSFhYRnMrSVAwL245R3BMYUpVL1VBc0Nhb1RRdkVwVzQ0RGM4aGhWQnFaZjZmbWdrcjYybnVFRjRLTVVqenJraU5nRXJmc1lQZHViUVZ3Z1lvZVJ2bWw1WHNlTzU3VzBmRlBOWXVRSkY3YXVTaDBqMXZpR1Z0TEJnRVFYZzR2OW5NTmxBN2J6N0ROdlZXNlN3TEl3OERuUFRxWlYrUllJQjEyYkE4Q1ZpT3YwN3Bya3J0RnlRdGNDK1FTV1Y5RWgyQ2NPZ0FTa1RBWjF0MWI0b3RBK3lKMjQxTDV6bmh1TjNiOWpJTC9TRE5QZFdNb3llV2dyZ09JMzQzSmhkRktMWUt0RTRlNlUyaHJGd3g5eEZwbEl6bDRxNEI1RHFocnBwc0JQSnNCTGt6WlRkZ3MwNlpIQVJVZUZKWXZUN256Q2xPS1Y5R283OFJJVkV3b0piV2lJeGRYSXEzZktJQnRZSGxZMVJXd3NlOXBtYzQ2THVjSDlWRDE2b1lpcy9QSXNOUndQWEpYYUlPanpzYlltL0tCS3ZmQmk1R1JqRkxjSXliWFc3aDdBYmxQUVdQWm9tT0YzRTAvQ283emV6cDFLOXRadGVKUURJbUM2UTZlQlZLa0hURWpGWmd6REhUMWhHbExsUmwrbFlzUDJnVDBtOWZzYml3VlkyQzZQOHhwNHlzR25GYmhLa1BFd2FXNUUrTUI0MFRDY29ra2RUL0JxemtVaTVoUUdKVHpXcjg2UDltTkVhNkE0NS8yS2tndEV2aDJaQkI2MVhPR3RFeS9EU244Wng3YitSZ2FOS3orQlRaaTRPRVloNUFEd0YwVW5mdTJRcEpwQzYzUGxIS3lpcWlsTGhTM1d2aS9ENjNxVTZEeEJ5YXIvQmdXS2daWE9qQTI2aHljMERTcit4aFFnb0lkSkRKaWFSS2NDaFVFTVNqUTNPV1ZXb0k0QUU4NWFHQnlPOVNtcUZxbTJWYU9GeElXM0o5VEcvVTNVNExzNEV2M2dyWkRVaXlMVXpacjhCQkUzbW4xZGJYYVAyYXlIb0NwU0k0S09BVVd1YVF5Z1FOcS9hTmVZVlNzM2dnb2IvUXlQYVg3aWJKZy9rYUJXS2hPbStEMFBMaGFoaW13L2dKSmFLcDlMS0pqQjJGQ3d6MW1KUHVYdS9VaW9obHcrRUk4TG9HYXRGemxFQmxDNjN4dStPZXBrbXJMNGk5OXlTTkVBZ1VuY29NMm0zSUF3cTViWWhLdjZMajNVMjBQcm9yalFYU3lVcXBVYnFzNWpXY29Lc2t2dTdyQVJXZ2hlVzZBM09MSTZIb3ZoNHpOd2ZaQmh3b0ZISHhsT3ZMN2xXVmdOaHhlV3F5ekpRREl5ZGhkdHUxcXR6Q01SZG9GY3QrQmNvZ1o5T3pwL1FEUVRHNFZVUWlZNGRuQllyT3FIOWZyVGk3STBiK3AvZ1VGMjNGR1NodUlheDZMRVFhNnlVOTlsV0d4ekRUeE95b3lnaUtjUEpobXVCTmZJKzdKeGoxYWlZaEpuOCtaNGRzbEJtTzU3akk4V3F0Ti9aVlQzYVBIb3RMSFVaZFBkQysrSWFNUWxEUzdsRXRaektlOVJqOE5meCtlS25wWDFMZjVXTkNZWjRwTGU1K3FDZG04eC9KSldMNzVNbGxUdmJIMkF6eWdmcmdmSEtmMWhCZ3F6Wm1EeU1EWU1oVFNvQU5uU2ZwQ0pqeHo3SDBqZjBjL0haRmMyM3Y3SVl6VUg4Q1Q3NGNuL0ZPd20zQlB5V2dCbWp4SmNEYnlycVRDYVc2U3UvN2N0RmszY2NOZ1hDUS9CQkw3Wm9oYlFHSUV3QjRYM2xNc2ltL2dCbHNzK3RkcG1ZamthdG83VUx0VUhxUU5NNWNpMDloa0gzVU8ra0VwMDRiL3VCd1NwOEoxa3k3WllBbjA4ZEdwMHd6ZGNEMmxHVHQweE9icEpKOGRRbXJZeWJRaEZSRkNJVmFlZ2RWUmIwdzd5c3A0UUZMdWI4YlVsWHpwQ3BoM0VobWViMUg4Z0o5QmZweWpPL1lVUFRUb01SQ2RTeCs3Q3BwZWlpZzhWN3gxeGY0V3BwYWRGRTZHU1NkQVFLMkRxZkNtVlFwa1JPMGIydXlGZlpBcjdOaDdHRWY1b3RMcE9BbmJ5em1aUDNKSTFPMHdnSmRxcDZ3NHIvUTlySmNnOXMwUlorVmF0aEYrYTJvQVQxcitkSEJIRVRucGVOMnZob3ZlQWQ1c3dQNTd0T0ZtT3dzWlVDSEU4UHlWRU53MzVWb3I2VWpCdnZmVnk0SEprU3E3dU41aWJzcmZibWltQk56eXQvSUtBdVpFQnd1aHZXdm01SVRORzZ4UTRRQzhScnlNUlp0L2VWQWhUVUMwemZUVkZqbUdySTFXdkNibzROdy9icGQ4QUV2a29YeElwWUdYcFRIbFdSRXIwMkkyVU9JVUF3clU4aGdrcVhLTjdqQlVTUUtyTG5kUElqZkdDclN4S2RXTy90Y1JiRm1KdGt1NkREd2tZYTNjZk96SXNicG10NStXSGJudkJ2Y3lyMWY2RHBTMVQ1Vlg3Rll4L1g1RzJnM0NKWW04NzdaVG1SdEpmVi93MVVqNzJSSXBsMWpoU2FJU0NxVG1BS0pKWnhlUjdXTUk3Wm1zQUhYUDNzLzNuMmN5UTlMSDRGVjJ4NTFpVzluRkxsQUxrOGFKVG4zTWZMY1ozeFVKYU95YVdGVlFCdnc2K0hUclM5bEVYTGNYSlNheUlQUGdlZTVIVDQ0V0hRb21uVjNielVLYW5ubE9nQW9IU01BYnRCQjF3UmV4L29jMzJtMHlFaDVOdTlaTmQrWmpKREFEWHlrdGdFcEpsYk05Ni9RSmdPYWRzaE9NVWdmNEN3NXdraG1wTmgycmZoTnpvNFlnVExyTldXcXNoTE9ZOFZqTS81VTlaeXcxZm5WNWdoZ1lKdFBaWk9LNFJ1Z3VUK05kekpyd1B4RTdpeGphZEdsRWYvUVUvVFpvRXZXSXE1T01Ndnp0dnpIQ1duZmFDMit4c3FMM3JKQ0g1VzB3ZkEyQjREaWpxbGJUTGNSdW16VTlrOXRRS1AwNkF1dm5yakJFamdTQVhheXhKbE1pU1o4QmRwYk95L1lhYStwM1BBNGtIZFR4cUh3S0JVNXJnNkRhcDVXelVmVWgxeU9jZU1PQUl5QlN1QnVPVTNSU1phaWZZajJoNVNSd0ZaZTFrQlhOQlZLaTFncTJSTytZZWVuSXhtSmcrSklzL3VqWElFaE1nTktxbVNjaGlVbnhCbHZsdmliK2tNM1BBNWVIWktCL29lcFhmTHNBSXlSV3krN2pBdlBKRmhEcEJPM2tlSTFoK1lROVJJcUZNdXBGT01GcGVaelUyMzVTZlM4Ym12NGVxZy90SXV6QVFYTnE5b29VZWRaTGxSakJKc2dDaVZieHBvSWRBZytDM0tEK0YrK0JieXh5VEpHRXJDYWtncXlmYUJlUnVIaUlzVzFoTUJ6U3YrMmo2M2dtY1dWeHhpWEtXZXNiMWRtbzh3MTlvOUFuMFpHdlJMakhHcDVBUzlyTzI0QXFwRDhGeVA2ejVlNjdOOHhONjE3MTVaK0RnQ2E0c0xoSFRmZUJoSFdwalRhS3JROGdrakdPOHJ1SDV4TU03TThKUEJRcDlMQ08wVWh4YllpNkRSQVpITXdNNlg5eWNBa005bUdoVWdRN1c0L2w0S1NFTmtEZm50K2l1T2FJK0ZXdXFIMmQySkVRVUpZNnBrZkZibjJERnM0aTVhdEFXU1h4a2gyZXJhbzBsekRCN1Bpejd1TXhGZUxGeWRhb0RyeXd1Mjlla2x5bytCa1J0aXhXS2RYY1BtOFpEUDV0dk5IblpoWmdWYmo5Z3krRkNtQVRTL2NRSy9MZmN4S1NVTU5pL0FWN3lxQWJLVDdqZGF5YVdBTDh5OGRMam8zQU1HSTlDUGxVM3dSSVA0UnlnYlB6cnI3V1hDVHNlZXordEtkM2d4RVVnWWNIUWhHVVMyT0pyeFRqTCtGbnprNTd3TWhtQlBTc1JERFBHK1RIYmVNSXRZWDdyZjhZRHQxU2wySzh1QlJwQ0tpbksxQ0FJbmhLMkE1d0tWamdjT1hRR3pscWFQUnFGK1VPSW5DaThPcnZWTUlHUGcwanNRN3hnZkF4WFVCQm9IMlV2U25ET0Vya1IyYlI0Nno1WDlvc2o2WGUzZkkrUGFSZ1lsY1YvUVh5SVE3UFpSWWFKRkIzWDhYTHBYMVFIMXZPM1BoLzg3MnBmUUZEQ2RTdFV1VjFKcS90bjQ1VlBHZkcwaHN6WGlHOGxrQjB4amJ1OVdtd1hsQnBWdWJyZSt0eVFxVGZQWit2S3hVMXVYUVo1bVozZnZyREJ4ZHZPK2RDckpiNW9WZktsQktSU1I2UUdEbGh3d0t3TkRpL3kzZW05ME1RWS9kaS9ZOGNXM0RaYkI2Si80WmJuQlhsdERGeHJleFp5ZnlXUi85bFpUeEZodEloeTdhU0V4QzgrL2RnR2VzVE1UUkpzNTArMFBNVFUyOGoxL2hvaTBDOVFGNjdKNEpRazN2VDBVZEN4R0VWM2l2cEZHaUEreVlyZHlQSXFuRjJHc1lsVmJsV2Z6d0o2a0UzNkkvcEtTWWY4K0lEZ1VtMkZzajF4RElSMVdaTWhIcmNTc2ZMWkhCeHAwbndmMG00c2ZTanFHelVxR1BSVmZPaEw3Y1pLMkFDSzBISmV2VUpZVmNNTzlqUTgrSFBwdFlrQ1JKQ0ZHQjcwbWMxd3NtNFRIaHZGYmh5Rm5LZzJzWUxpZG5jVW55QWREMjBza0wxampsSzBJK1NlVXVqS2FEWFU4cjdyMm8vbjNlaGJ5dWJLcDJFTW1TSENKYTdyWS9oZlZUbmRCb2xmTnZzWHl6WnBybmQ0N1NrQU5ZZmMvdzZvOXBxRW8wZU5VYk5kZjZiYlY1aWd1dkUrdytYS3BucXp0Qm9jU2g2eTYxQWNmL0oxaVVCWUgyNGNtYUJrc0xZSWszL2IvTEZ2blFaTzllSzYyemJSR0NaU3Zxc3I5dkgzS2taN1p2MUR3VDlReDUrZUppZ2s4RDJCOVc2b1FDY2hYSFEvbmVIT0czSlJ2WlcvMTRTcVk3TEl0R2tFZmxoL0tZa09NOXJ6QW9OOUNnV1RoY3N4aEhvaGMxK1ZuRXZraXVobXZrM3JaT2h2S2RtTXEyY3BEZmFjVFRwYTRRQkhuRGZEOXZmMjR6N1dvaXlKM0tpVEZkcTBUQnljcEJSeFozS0JLWHlWeGwzRVk2SktrbDdDVDJQb2JyRjVJazhWcWlxa2RZUU1Nb1l2WWUrWW45Wk1PU0Q3L0tJOXdPSWNTeHRramU2SDZqc3NGTC84MlZZWmVTc21sdDluR0cvWWQ3MUR3dHRlL2F6Qjk2cFc3ZHREZ1loTmZLalR5ZWpra01TSnVlL21BU3V1a0lidm1hRGxVRWZSZ3prdTQ4blErZHdZZ09TVyttY1Z2NGdISVRPalA5SGE0T3dDb2RuRFlUT0lad1lkNjh1NzlsSTFsSkwxeEdmZWRyU0ZzRUllYzNPZXdrYkxiSFpaRDdsVUNObDg1cnY2a3JiaWlGTDdiVnNWWTlQN3V1bFE2NlJqQWwrT0Qzam5JWG40MXNRQ0RDTmU2THBwSFlnTTNMNS9UNkFudldzVUY4VFZxKy9UNHhxN3NQOWNKQlovM3E4WDhUL1dENkNZSlNYanFqVjFLRStUVytOdzVaZXNQblZzTGY4b2pDQVZKMlVBdlV0U1I3UzNVZHd1T3lEUTQvaGlwNFJvb0k1eFpsQVRTM3d0Qjk1UzhPWUR4R3RBMHdCR3V6UG1XV0w2UWNXd3V3MWFZR2grS3ZQcEFXTFYvaWp3TnQyQjlzYkNMdngrb1hFN3RaM1VjcWxDcDJibFJJdmI1VzhBOUpRTW5iMFYwWWpjSlJ4a09ic25OUmpEcUZHbFlmWHlXTlc3M2xLR2JjL1FnelBiTlpsU3E5U3g4LzJWNVIyc1k0dGsveDVTaE1WZGh3Zm11K2UrWERiRlZqRzhGZUtMbUpvZGJweE1LSlVlWjc3cXR1SmF6MC9ncGY4UlZ5cGxEdlVlZ3hrZys3UDIvN3RlOE5QcW5lTS9iQlN5VXhvWEJhdU9oWExpYUNPV3hiNzlCWWxnbHRicGZhd3hRMUNsSndsa0E4MDNXa1pvRWhCZS9EMEpwL0tuQ1NaMWlQekowekkwZEJRU0U3YkpLMnVQblk5YXRWUEh5cXJWRlVsWS9mQy96WVNqMVArZjMvYi9jTkY5TXlUZURyQXc0WnJjYmNZRjhxY0pJeU9SMElGWDRoamZVUGpxT2NTUjVMRTNCeXVmVmlpMmlBanM1dXp0SUNnQlV3Y0NSbURnRUlRZVJUUm83dG9kcnJqNVpSYnEyeXI1QkhuSjFUZm5BM1JkaGtRWGtzNDhXTlZUSzdMNVJYWDVVaExmSkdlcDNGRUtRUlcrQVpRaTRoTHdtR2NCTENrV0tkZFFCZ2gyOW16Q0FHeUVpQjdSSVVqWTZsVmRFTC9ueU1nR0FITlBrS29TT2lGMEtNemI0Y3VySXdNRnJvZ1U2NmJLcHNxYWpsTFp5d2VmQ2x0N0c4aDY0ZVN3R1p6RWNxN3dUemdsbGRYN0ZySmdwQXI5WC9IMVNFMU5nQjVvQUdRTWtseGVsQ1VkcnFvQmlDMmtHWHQ5SkwwM29KSElUYmJZTmdBaWZpdmdJV01ENy8yZDJ2cDc1Ri9OWkFSTGpLWWNGQ2VOQ1hNUzRtRVY0RFRBSVkrSmN0Nmg4WXdpQnhVZFZROVRSYmtIRzN0UlowaDlhbks2VldicS83eTZxN1J3NG1aYlYxeVd0U0Z4WFlkZDcwakxTUVQyMzdjbGJidGEwVkt5SW1RTnF3ZmpaaFB5MDRvcmVzakFJMm8xMjg2YmowOUZjdVVpTGZpalI2enVvMnFIRjBnL0NacGMrZGZBZWZ2V2J2SGpDakNPdjJaSHQ0NEU3bUFDbWtXV0ZqcUUvK2FpM0E3R2N3ei9iWlFVZjdEaXlWZjBPSjlVdU94TmErU2lJUE5sdjl6cGFXQW1sS3AvUkI2dWc5WGF4SGU3bjRNVjcxbjk3b3NCa0lTU0M2WW1ZUzRTWCs1VlkxaGhGSlBMRXFodHlaL0pLaG41OEY2YXFBdjhkbXNrWkRJVzBONVVhcFQ0Sk9CNFoyMnZ1NDQ0RmpSVmwzOXNxMUxnanlCcHVnNGVwd2sySWpnd0RKWTRqenlpaFc0WGV6Yk4zMUlYV3JUR3JoMEtkendteTROTEwzUGo4b0lRSFQ2YmR4YVdxSXZ5NHk0ZklseUNac0RkZEpGeUtFNGw2eW9qYmY0ZkVOYzIxWWM0TFp2Y0dIOWNLZDhCS0s2ZTZTVzdLWHZ5bTEwckhOR3hJTmhXMndWb1NyVjFZSmR2Q0JHWGl5b3ZERUNoWWI1cDZ6UWxsa1BlZmRucWI3V3RnWlFtWlg0djNrSm1LN3cwNVBGdi9YV0JFUkJubEkxeG9zMnh1RUNlaG1UY3JIbEQzUGVjeWhMWW1uVjV2UDRRVEtHR2NNbXRTVVFaT0JCc3Vza3FmK2NJMTVyL2wwL0tDSWlKWWVxNVBiVmJEelF1bnFIT1AxMmtLZTJ0VEZtbldtdGZXZVo3MnhxaUM0S3RMT2h3eWhWWlg2OHpGcWZ0cFFjSzR4NWFEakhFbll4V1Rlbllja0dOLyt3Z1JTcG5nZXZoa0xEdGhXQXJjc2luOEhMYk1BdG83cE5odGpEempFK2w4c0hobzJrL3QyZVMveVZLeTl1ZHZGeXVMaE1iY3dHMFhDZ2dXNDhkL2lDYWdSRzI1b3dDRHRkdTBpbVJ3dGx4b1NTMU5GQWgrbFFramRGb2loVjdPaXNyVTBIWHMvejd6am1jQUlnU2pueXc3ZGVxVlVqTk9Fdmw4dnNjMXdSM0liOU43bEFWNzA5eUxtMkJFcHh5djNxNnJXbm5Od0QzNk5EKzdJNlFMVkt4TnYxdzhZa3JIcTQ4bzdEYkFOaFJWQWt4a0RLTnNEdFh5cFNIMWJwaVZJUjBObTJEeG9KMitsQ2ZJbU5UVFA4U0FzQklTelRVR09aZWhuOTU2MjJGRlh5d0RCdVlEZ3BBQnZqRHFVelZkRWoxL2kwVEdVeTdaN1VnVmRGUjk2c1A1b0pjb1lNY3hpTmk2dkhOeC95VjB3UzFlRFpPQjJoTzhzc0M2TWMxaEMrTVVSYVVFTHZrVW9nSFM2emZncnQvRXlOVHlmZ3BwZWQ0Y08yNjlQcTdKWDFJL09Pck4zWVZkU0lZbzZPZFVJUW1ZTXUvM3A4dU5xdDdyYjVaR2hlK243TE9ROHJBamp0SkxXVVBMVDBGc1dBUWpXSDNsWFJWbDRyb1BOZXBLV1VvTmp5bDMwL3J3Q2FhMWFtOVVNc3ZqRVVSaVU3WWVBb1RNTm9IMGZZU0UzK3BjQ0hJb2l2OVdwSTZoWHF5K25Ibk1wNThHZnd3R2lkNEMxdkcxcndtS0Q0TXJyZktURlNPYitYSlpDclZYblp1ZlRyTnAzZ3h1cEN2b210aG9BcTJZekhiTjA5UTRuNUs0N0VUZ25IQjNZWGFXT2ZrQ0taZDVLN1F1Q1RlY2NCby9QWW9UY3BmaWFLMkkwTitEcVh0S3ZhS2hJcldZWDRkTjVFSnZlcjNobklwcTRmRGdpYUhWcW5hVnpsdC96VlpnRzdzTE9acWdHZ3lOS25VekdyTFN6WVRkRFI2eWVENlV0RVlqRnFNdzFFcVoyZlVmdGhGOGhKeC9ZL0crWWRibDh6ZEs3S1NUTnNWc1U2K3NIcUFGb0RXQThscEVCK1lkZHdmRXBTUHAydDlVL3ltUmtYS0RaYzJoZHFhczEvQVhoVkwvSjdweXFTdkNuQnMrajlSRlVkUlpxaHNFMWJuZ3FlQldKSDZhRW1JTzFidTk4UDVHWUZiKy8ya3d2SUs1T0JxMk9hb0pIcGRTSitFenhkVEg2Qmw5UXpFd0pvZXVpN29CK3BlV2UyaExHc09qSEk4bk5Yc0svU2haNDFNVklQdEJKczdjNTI5S3QrREFqRCtsVy84Ums2RnBvQitVNXhZcVZGSDBlekUxaHdKSGZJVmVURFp6TXlBMnY2SjB3eU9DK1hROUVUYkl2Z0h6b3l3Ym5BRk5za2RJSUZGaDNjMlBzNXgvMjErQW5ZSTYzbkFoMlp0ZHBQczVMV1RJNGppWE1Qc1JxSU5hQyt6SkxISzFKekEzeU9QOG9qbStld0w5WDRESFdUVVQzVW92YU5aemxpanpaOWVQZGg1d1VLd2xYQWxLdUxZNzFIQzZNNG4rdUd1VXovUDVBVVBUQVhzZW9xMVN2NHJ2RStzcFYxNDZVa1BvQjNBaGpkM0pzMjkvaTExVlVneXVmalFsdUdFOFVzTnE0ajR4emJWOVpCbHZnVk4wbHFoK0xOeG1MSit2RGFVbEJuaW1JWlU2VWVpSExxalN5TWQ3WWtpb3VYRVp5TGxtdGovV0g3elpkemxZT0JMajU4elJlK3B2YVlycE5zU3dYT1NUZUVRV0JNMmRWRmI3a3VOK1VEc1YranRuODltQlYrSDR3dUg1MnhpN0hiTWxkc1VqbnE2Y0lWMVY0Um84R3F3SlEvSlhSY3BBanloTTVsRFcwTWxnSlJIMStUZS9WOEtRQ29RQUpjWlYySlFNZXVrWTd2WGFhWFVBZkNRR2dLcGdsWW8vcVJyZ2xBdE5YcXhlOURDR0tWMStrZ29YWWpDYitLTVRrZ1Z4M0Y5UkUzeEM2UEtHdzExNmtzMFhUOFl3b0phMHMzNm0xVEhqOFpaUzlKd3lRZkxBeFR6WGhtcktmdWMvSVJROEFmSHF4K0FsdlA0eDl2T0hMMFgzT0JSUDhJdW81UjhSQXFVNzVpM3MxU3RiNUV2VWtER0JFaVRWMXByY2VGTDRQbFRGM01KY0s3bDE1bGF6dFRQV3JjU1phL1YwQVlCZVR1dWY1U3N6d2o3NzdTVVp5eGU4YUFDVEZ2QXRJT3U0Vjg0ZFRsQ0UrQTBLSEpxMkxWVFlVdURidzR1dFNJSFNHUVRQUDdWc1F3aDZESW1CWVV5d01mYXpqM3kzMXJBRWVPUitlN2prRGtSWU5Ib3hVTTFYUis0T25WZ0RWaUZCbnpuQXA0TTM5eVkwRTdhc0pmdzNBTkVZU2lkUGovV0RMU1Bkc3lDU2JpWGlDeDFCYzdWTUxYSHZNY3lVakhvc0FvQ2VKMVh5c1BHREVNRmtVTU01djEyeWQ1M2tWWEQxQTZwM0dUN1ppdHdGNlFIZlp2RFU5TnJKSGU0NTVlaDRqRWU3ZVRncW01LzdKNHlpREo4Rng0Z05PS3pGa1NHSUxNbytCUnFxcyswR0VLWDZLeHM5RXRHMjVEL2g1aW1yUWk3VlIwRk40am5JRTZ2YWt2ak9hYyttdjQxZ2RJb0hMckZCbHNhT09maHRXR1dQN2Q3ZzVzNkQzVXB6ZWx0YVpnOG51eHJmZGs5V2hCODFCaGpMejRBd2Y4SkNEQnA5NUxmWEFvM2JYQWk2Mll3dkk0dW5UdGcxRDluYzF6UWtuSjZlNUNUSmwxTlVjMzljSDVCZmo2L2RxU3lMZVNnWGdNc3FRTmVKUzlQeWVuWHZGQ0M2dFB3dUZkdFF3K0lPcS9JeFV3dzFBekM5ZFd4bWt1bjlIeW1rVTBOQUFSOTE1VnhLNDJydktrWFBFbllubHBYcXhMSkNyeUNGK0xvRFFWZkt2anZyM3FxMXRNa2s0YzJFazQ0MkEvbnpnMHZ2ajlwektlRGVWVzNLNFlSanI5dk1HTzJIZ2JvbWd4NjRQbU1ITGFTSHFTekxyUjQvQ2d4Sk5STzJDelJlU2lMRUZPb2wvdmtDU1dINW9rRDEvMWt5blJrLytBTjhVazYvTjFkWE1JaFh5Q2xPbWtFMDBTMmxBNmZpWXpXUDhOVnVwNHFOeS9TQk9UQjhVVHZCUVB3TzZDYzg2Q0hna0JOaWhPQlMyRWZNaWEybThsVkh5bmNCVGtXL25VUGNUblUwanNIK3ZRRmx1V2VkSWZDYUIxTHA4cGEwbnZQTEZxZEx2VE1kK3lzUmgwMFJUYlN4OFkxdUU5ekZSVzRyMDdzRXZtNzZqNE04WUNMdElaQ3BvekhaRERMMnhJelliQXZQNTlQVXpvN1VTUCtJSlMxcGxuVzRhMDd5N3o1TTdHUjVCT2Z2dW93MUFmZk1vOWltS2VvQmVzNzVvMjNwN2JHcjV0ZUd3MC9wL1c2VnFNK09aSG1mWUJzQnhJMG1iWEVySTRFUUxVUWFkTXJTVUdNRDF6VEtmRldDZVlUQTlETm1OM25ZckhpSnIxWnFwTXZ3Q3RzNHdZT1hwUmdlL1E3bEFpYmpYK3ZLZFRLVElvRG0zb25VeEVRd3A0bVBsWnR6YmdhbldvbXFaaS9kUDVkcFJWT2g1SGROaDIxWW1hMUpNOHZhM1RMR0hLV1crWVhBQ3Q0NlpMS2pTNFBuM3Vrd3FFb0Y1RXNsRFc5LzJrdnBkZEtpOFZzaVVLK1JFL05qeVZlalBtSE9Gc1AxckFTNmNOQnYwOW5UZWFNdEZDVEJEZE1xdGhXOU5ZR3NibjFjOEh1V25wdTIrR051RGZNWWl0Q0IrZjk3YnpXRk1zTi82UEgzWXkyNm94Y0J4RWdWVXZZWUFzeWdvb1N1enZpTTZqWURySXhpVEhOa1gvVUoxanVYZHpxbnZNeWVXREJEOUltKzE4MnNsamJyZnFOMnlqbC90RjV1TkdsYWlFaUhCUEZyejEwTjJsQlc4K2owK0hkem1mSXg5SEFETkhwdmt1MnJSRnNkZXZxdUpNTFN0Mkg4NHhNaHFKVlpZbStuQ09rRmw5T3llejFSNm9uQjR4OXZxL0Y1WldYOUVnVTU5WVJCZ0ppT0J1R3JGZkQxeHl5NmFoTjl2SWJwc1M0SkFSaWp2RldZYXp0emZoU0ZTZzRQQnpHdHIyOTJKWFVHb2pXYzdDSHVhVWF6MngwMmY4eVJZaGtlenF2UjNSMmt4N2hWWFpNcGJMbkoxZ3ZQcjQ1Ni8wZkM3NGNDVmZtQ0lyWjA3WGx1dkJuYkpONDJvazNiNmVlVCtXbG11QlU5WDF0OFV4MnEzclhzTXRKVzRNUWR3WjJSN2xaMTVKcGVYdG9PcmhVTEowU003eWJ3WlBmWStQT2dhS0x4SjlzVDJCbS8vSFF6bmtvbmVNalJ5TU5PS1hWVnhZa0xDWmNuYTF4dHl3eUhJNVduT3paczUzOS9qNU5xdVpRaFRiaFBYdUFwU2RHREt6cFFsOWtya2ZSbW5hdFRHVzRTc0xuUWQvc3QwL2xUV0FSUnFCMDgvZ3lRTnZ5NVBLZkJrU0VyZmZZbHRlRDBka2VoVTZOWGVHZ05sdml5aWhkenlZQWFjZ0c3YWovdElLSGVYa0hKZmxhU1htckllUzBYMVNhUW1HNU1YZHlXMG9BOHRpZE9XWmNKcGdQMjltRGFwOHlnZDh1bmJIQVdvWkg4WHY4VE5tRkJaRU5UVFVIWlE1MlAzNnhYR1B2UVNZZjFqR2xHd1ZaaVZibm1pSEpIcGtTYkE5cW5mdGtIaVh3Uy80Q3dIM3l3R3QxZnNuaExONWhZYjB5VWpFd3MvaXZtOXIwVFJCdEs5OUdxaUJkSnR3Vys5eXY3K21xTXc0YTdVRlNIYjZLZFJWZ0VUS3NQaElIeTZBbWhxcVpWc3RUTkpMZHd1MEo2SXdha3lMRHNxUy9XSnlmdXhDLzVNdHc0OXgwS09aUXFuTXJtdHRIWFA1ZG9YYnRxdHNVbTREeTBMUERPYTNLSXNnOUpIeVo2NGVBcDdzSkZkU0ZNemx0OS9sODNUMVNwbko0T3I0SW1va3pHUlZEbUhKN1JKRWU4RTc0QjkxMGplcXlHTmFPaUo5OFZrYWFOSkVaYUxHOHpveE52eXRvL01KbGhQNFE0eUc1VDRuendFZUF3dVYvZlBiQmtNbk81dnpzYWxMa1pIa3ZwSjRieHJRTE5MY3Fpb3VBU2x5eE9Mbit2a0ZySU84bUVjdHZkajlTaTdrdDZmaHZmdDcremhFUXkrK2VoKzFETmFHelFGalpQWVc4V090aS8vVVFPZ0FDUk1Va1RuMHZHaHZOckhCZE5WR1ZtbThmYnpVUzdoMFpPOWwrczcwMnBhcTZ6aTJHWmlRbHRJdzlKd29RcUdRcTczTldEYWdLNmQrMlNjbG9ZR0pwZGo2VTZWOXFLeFBTeC8zcEpWWktidTJPZE92MVUveGR6RDBJekFtQ3NKVXdKRXBtcFl0cTMybWUxUnlxLzZZZ250YnFZdk1YRjh3K0luTmdZSFRtYXhoaFVHVWloVWxhcnVYRlp5QU1ETWxjangrUnhxZU9MNlkrdnFJL2VwZkM0Nm1TRmljaGlBY1dROWlQN1N6THovbG5qSUtnMnN6YU1yNkViaHg4Qk8wQmVoV3huZ2ZnZDdCR01rQ1M3aG9XVkMxQmNCbDJIQm0zb3JUVWJpbFBsa2JHK083ZHIrOG1zRXNxbHhGNCtlNDQ5d2UyWFJOWTZkZXdjd2NGd0VkWVNSa1RXVERoV3UwM25jcFNiWEdOWThTakRJOUMySkxsNjNnOVUrVEV0OERmRHJ5TUNyOFl3a1p3UC9zWU44WFBpanNhalFlR3VxYXYvYlZnUjB4L0d2UGxkOFp5RldNbE96WkxyRks2RUw4QXVsaVFLTUp6V0dQdCtoRDRqYjFWV1lTWjloOXgxbGJLMmFkQUE2dkxXL21rNCtGckVCeXRRUEVBamJIWkNDbXErWnh1Q2ZDYUVQNWZieC83TDNPZFdqTDcrNVpUZEtDSVM4RkRqN1VKUzJ4TkZRLzlIMmNhRE9qYzgwVnFhVmQ5M2krd291MWl6K3p2ekF4NFVxZXdabHVENWFZekswOEF1RDE1dVZPbk9hV3FqaTl3VUx4M1ZFTllWWWhoVGdXSWVhL2RNcVVoeWM5WFBTUTRESFJTWU42cy9DQk02ZGtCMXpyc2w1cURjTWRNbnIzRHVRL3Q2U0VtTGVIazVmeldkMkJLbkRaQjdsZ3FnOVRRV2E5SEZLTnhpbEE4UVJEYTg5ZzlGVHFRejFDRE94bmdwT2hHQldUdmhUR3VuT3lFOVc5T1Y5RFVqNWpmNmR6ckJGelNOVStNWGR2ZG1HR1JFMWY1MEhVRlNaODYvL3FGSHdSOXdBblhCcmRUbHdXQ0Z1clFzMTgrT3dxR2JmbFdEY005N1R5R21PR0xHTTNKQWk0WXN6aGpDN3JoVTkweUVxdkpNa1JJZmxldGJ6c29XMWJCaytLY2lHdmxIRnBXbzZIWXZybHpPYXZrcy96ODZ0V3o0bnpzbTBzTHE1MnRlbnF0RVI1emdMdFpIaDBvM2hrSzZJQS9Nd2VMaHRYY1U5R3BrODhLckdDWVpCY1Nsb0hTNTlWTzJ2ZzAxY3pPbUhYZEVFeEoyc3g0b0FJaktNTUdrLzJhdE11YnF1c2k5MVhXWk5Sb0RuZEFjSGQvdzlKeGVtSTBIV0Z4WWxGaGNaQnRIaDRMWVhaZjlpN0FzUzY1MWZxaVJlQVhSRW5LQTI5Uks2Sk1yUWZ5WTdjM0M0Wk9XRkpGbCtmc0RTSXE1Z3NuaWNUWHY4T0Z0U3A0dzU5a2VseHFCNno1MmdJRzRWcmVqZHFYeTdFYTFMLzJxaHJSNEd5ZEkvMFIzWkpLWFQyRnczejV6V05lODNuQ04xMGl1WFlHdi9mVjRkdXRRbVlRL0JQYXprNjNZZW5RYUV5MXhXRWt0R0RBVU01RitQUEh5VWFPWldhUGtsai8vQyswaDM5VURUVTYxUnBjdDE0U0pRSWdqT3MwZ3pTTzBPT1F0RXhtTDcwUUFtenNNL0ovVmQyb3FKeGVsVktWTkVaZzJuTmgxQzRlSGE1V1oxOG9QRDU5amxJeVdnbjZBQ05tL0dPdWtPSFBHdmVtTkxpa3ZvNGR4UnpBVWZtMHM2bDJYQmNTN09KMWxMWlVYc0lldEFUNWgwT1ZhaW1RR1R2eDdueVV6VC9iZDVPcXd0N3N3S2ZTekxkV3MyV0VyUExVblBkckRPUHFwM3VjMllDMzFIVElRRW05bG52MjRiM0hHN0dnMEFMYVJrbTVVR2d4bE9Bako0Y2d6QmdZZDBOVnlPdjh2QWFBdFV1STdMSEsrb2IzaDN5OUE3c2xONnJPR3NNc3hCM21jTmgwZjl2S1F3c1l3VlBGL2ZmMkZ4djR2Yk9RVm9mNkJ4dlhMZ2Y5ZlFZV3doZUlTYWJQWHJrZGQ5Y2I4UWZLRm80VkFkQXhLOE9ESXNNVzB6QXNWcTJaR0k3TllxWTRiTHFwQkNxVG9oU1d5MTMxcVU4QjdGd29wMjlBNi9QMlpvWTVtMTFZamRqeng1VE5XOGZJdkthcVIycCtoMHhKVzBubTRBTURSTndWT1NTK3QrSHBXaEMydHYzZDVlclVDQ3ZHNzVUN0xzREFDV2dUKzVVOVAzZDFVYmRid1pXZm0vZ2xoU0tFR082d2QxamVjci85VVdyWmNSWGpVakJNcFNseTJoUlVyQlVDRlQvSnIwdFRzNVBjREtIbzlSamNaYllZMTh2ZnNLY0dOV2prdWtsK3Vud3BLQzZPRDFxd1JXNzZabklJQkU5bGtFMlZRbzIrbTQxN283MlgvTkc5RWRsM0VEWmpKV3VNOFlucXE1RlV0TndWWDRQMlBkTU1SNE04dDhicGYwWWlreEY2Y0ZVRFlCcU9kT25Id0x1RkpWQ3c3L2VDang5WlVNUjdEdGxyU3RmTXN4QkorVDhFZExMR0dQVEw1a3l2SFRMaGNDRW5aWEFpSWZnaEYzQnF4a3FYN0xaWllvem9ySjQxdkdWdmdiNE5PUkVRVFlORGRDRy9Zb1Y5eXVHdnhzNE02aXVBMmYvbFFPUm82WlpPY0FxdVViblFxaXJRRG5NcTZKb05xajFrYkI5ZDNNK3BMYmE2anFZV2U3aWxPWHpvN3lBbVVhcStRQ1ZiWHpMRmxzK21qMTd6YXFUZ0VQUTRhaUl1VUV5d0tlbGV0WXhaNnMwWGprRzJSM0tld29WaTdOWDR6bnlLTXgrSWwxcTMrMy9UTGJ1L0lMaTNNaVZiUjZBRjZ5M0FTOFVBaE5yL1JZcWx6Y1VzcXpScy9nVllNdng2OTc2d1R6SVZsWmhKSWROb0NYR3Joa3lBekNpMklLV0g5cUNWRkM4eTQwZTFCcnlBWUpvamxGY0Z4OGdwdlhxekRDNFExT0JuRnVZdW1BWmNUajh0ZGs3RnJDZkFva2tTSzUwQ0pjbjJsWmNtRUgxaHhEOGk2UjRMKzBTQ0xwL01qTHlnSXg5ZEhMdGRaaW1kUm5PMzVYM2h3bkNpb25WT3duVEMxL2Y0OTFXenJZMXdkRGx3dG9rdnpETFhCWmVuQlBGb2o5bmhwU2lBWHpWQTkxdm1OYjdKVGNqcnpmU1lwR2lCTDBjdks1QjZuU29SU2tGd2tWdzZZWWFUbEVkZlp0SHhQWkZUbFJlU1NaVmRGT0FzUkVFdW45UGtaZXpnRnNzN1Fsek5nKy85LzJpQ1E4SzlBcnRpK0tkUGtmcTh6YVVMVldHNmcvU0RwUlpLUGJJcVNSSlZ5ZU9NZHRwSHBsL0JuZlZWRmFZUHl3bzQyd2lpZFovd0svU3EwaExFMnhCZHZEQU4zQ2E1Qy9JVndja1VuckovbzVBUCsrc1VLS0ltUHU1MjV2cER2UWtJeDBxb1RJbW9xRHFSd2MrUWRHTUkzWHZoZlY3RVFIUTdIT0ZjaXhwaUl4RWdOc3hBMDAwa25LTVFVSk1VYWxaZFFvSThFMXBWU3JjSm5VcFcramhTUzRWTFBiOXhKa3dIbnZpcW82WStMb213NDcyYUcrY2hQNzdwQVZTRkIwbEo2cklNeGdTb2taMTk3YzducThoRlUxeGpHcUo4elNwTVJNYzE2cXFuUWk0RlQ3Nzc3cDVsMzFzQzYyUHNjSmpnMDFsUDZZOENuV2JQWXpCWVFscWQ2K3FNUGlUY1B2UjVvcEZERnFnakxYLzgvYkhBSTVDdkY4OWtVRUhoZDBLNU9CaitGMWlyWjlSSWxrYkplZ3ZuVFN3N3NWQW5WQjBUeTc1SlY5T2tHQU10eVFIMXo2eUNiNlp4NEtWcmtRNE1jaEhmRUNsdFdOL1dESHNwVEpCb0R3ZzdjZFc2NWZUTUM5VlJHRDRYTkdnd0xCMTl4SGxLRUZPZ0R4bXJjY1VBY3RJTE1SQWxwY3JzREdQckFZNEUrMXd3VU45dHlXVmtETHh1N0Q0dGkzOFJMSHZtNFNOaWVlcExrVElnS1pzV1BvQmVEaU4rWWNDR28zb0Z1ek14Q2lyUzl3TUcyQ2NBUE9CQ2NiUDMrdDNVTlZySWhPWWRVTVB5K0l1a2t3a29NS2lvV3RHQlpaTkZ6VVpoaG95eGZqUm1Id0dVNXR1Qi9qRUlxL0JsVW0wWjZjWlVmakZ1RDljNXBpeFhBU2NxNGdreU91SEFLc2ZWZ0UxYTdvMUw3SkVKcVR0Y2RORWtkbUZPN3VTMUE5UnpTRnJGRzAwQVE1RVcxTXJrOVl4SGg0WGxNNVRudlpkZnRXK3ZxWmRNeXpMS1JQVGZBUEJwWm9Vb09meE80eStUQlpNS25zYTkrVENscmdDVHdiN2V6eldWU2dYMER5QkVYdy9zQ0tEeXVtcDVlSllyUjQrVkJaaW9ETjdpRzhBZi9iREVVdUUybkpkZEVKTC9yMmxONFZJdzBGajVGMHp0Y3praWZaaGpTcDFwcWl1amdsVmRFQ2xuc2tkZG02Z3VYTnJ0cENQZ0JUWUtoMUVtQXFhNkM3UGRqSUROdWRudE9kUVVmd1NVcE9KN0Y4ZkdlcFU3cjJnQ2FGaVliVC9MVUpSTW5vSWpXZlJBdUtaTDlnaVVZbHpOYi9IK3R2cUp6SWoxdG05N2V6bEN6aXUycnVPaEw1M3Vsc01Nb1lwUG9mYWpwSVZrSTRxQ0NWU0xNU2U4SXdXa0VWMUU4QkFUR1JKZVo1eGN0RWd1TWlPdGtXUThwSUtnaTZFMW5ETWVIcmNXbWRoVllDZEh0T3VIR2dmdU1JNkQ2SlNWbjE3YVNZM3h3QzFOUHY3SEdmdXl1WXlVMGtrQmNNU1JVN2VxRTlYK1hlTFl0MnIycTFKZmtTdXZ5ZWxWWm5XYXg0YXFpSjU1MmVPRk8vVkQyTWY5Rnc5RDFpSm5Ya2I2U1RYS0V1SGVmeW51Q0hXOHpHODdta0FhTjVEZHZIcFRyOU42ZXlDdjhNSmFnMDkwbUxONWFxa0F4LzBra1FpdU1TVkNsbVA0V0ZEMDJqZHl2ZlNtcDkvOFMyRzc3VjBsd2YyU1piTFZzcmRPd1BORG40am5sZ3pnRW4rbWphZms5NmJCMS96c0tYVmZDZ3VBR0l2VmpYNnZtMTBRWS9rVjBjVmx4UTh4UTdwdW1KNXRtTlYyOGhiSkpxMVlrZmNJUkZXdXU4OXQxWFgxQXdybUFDcWpQZ3dLRWpUd0xLWEpkemllRU1QZituNjZZRlY1akNoenRPdCtjKzE1dEJmcDRHNkFpRU1UMFFQVWVjU21RbXY4TjhKQmwzZ3dZdXEvbHoySFJaazQydzdaTk1janR4MHhJZWFSY3o4aHkxUmx1MGwzN1dsWEdTMFlySU03b0w3cngya2NGOTlBTG1YRXAwODZVeGp4dGxmTmJsZVVnQ0M3Sk8xa05mVVh6R3FKT00zWk5LREJjMzkrSXJJRXRwWkdtdUlIMXltNUM1U2VxSFljckd3clJROVlndkV5V29KQ0pzdXFwd245Um1vNnVCV2VoMG94RTFkQUQxcVl6eGdFRWhnS1RFNlM5enlCSGFmaGs3QUlidlJocXFOYWNUYW5DcDExeXBxS3ZseVV6YWRYTUxVcmhEZWkwZkgvOW1NalJKbFc0V2RCZ3VuT0dsM2lxWFVaeTRLRXpsMDMrVEZBOVVZaExqa2w1cU5FYkp4b3VLZ0oyYkpkTG9xMHZ0VmxUWS9PdEFOczRnTXdZRVhNNW0yR1NOdGhocVFabkpuUlowVEJqbUt3Wm1ET3FPc1h2NnE4TDN6U0ZuSFZkcUk4UmpWL3NhRTNQa1dLaUp3TmJuNkVxVjE2NzVJYnIrT0UrUkNXY29mUVMwMlU0YUNQWUs1T21EVDNkOTVDS3JBUEk2Wmc0OGJadmdIaUptV0libm5rbmRzN3ViNXVBdGhBaHZlZmlLeHgyYnVJb1M0d3M1RUh1ZGMrSmQ2ZG5QVDFUT1htdmR5NXNpRm1RSlNWd0hQcVA0NlFnVGp1M2lBbW53c09Cb09IdkZiazB1TDl1TGV5WHRXNEFjdEJkTEdacm0vaUpXU0UrZXA5NTVEMy9ZeUpFTXhVL2xPVFd4bTZVQmk2U0h4dnFYRDJlY040a1RUSk9SOFFoeEdFTWcrRGtpSndzbHBoeHY3TUVmUllzejNZVTZPRGpaaGdHZmlZc1QyZHRiTGVOTjRNYTVOcndnZVU1ckVHRjR0dXR4Y3BJR05pcFBaOXBVdE5xUzVWVW8zY0lQVndqbm1zdjl2OWg1OGIxSWlqZUNOQUo1M3JkLzF6K2hwN2t3Q3ZVVXVDaDJ5UU9RTGhZQjBjbDNQS0hjTWR5aGJzOTZnbEtrMTU1UXZOTk5ZWklTM0JLcnlBWmtLaDcyVlMxa2tnN1VLUjV2cWUxc21pMms4M2ZkaVplVitWN2lMYnJGMkUwdkJtejNKazNNRVBKOXlUL0F0YzFocFdNY09ySzNVMzFDMSs2Vk1HQzlRKzYybGtEY3l5ZldSL1MxNTlrSU5qSkFVNUphMmc5TSsxZWJoQU9LcmV2Z0tTa2hYcVdPTXpWVzArMzM5eTZSemF3bXlKRE01M2pMM0d3U3pFV0Z1b3dnMDc2UTdQZnFaS1puMzlFWVg0cUx2RlB0UVB4SmE2SnZYSzM5dXd0NHVuOVBvSjk2QTYvcTJTUzFHZWs0ZjBxWXpmbHo0SDUwYTBkK2t0bjRnZmVkV0dIdWVuTDRPK1NKSUVGNUR4ZVE1VVY4WjRoaE03NldMK2gwdnNYeGptYlZsRm0xTnltcHBjMHhQNFRuTFA2QnY1T0RNTzBEeGk5bkM3Zk45Z21kclp2QkFSZXJZN3g4SEg0SUIyWWttL2lUQTkxaFdMOEpVYlhLMnhTWXZxMnhWcWg1RXhKYmU5UzU4RUxla0NFaEFkeGt3NXNNR25JY1BOM1IyTFhoWi84RlF1WEd1ek9PcUtDY001UDNKOS9XSWFtZ3VlOUQ1Q3V2dlVybEhPRUUreWhVaW94L2xqaXIxZUpJWkJjNXovS2RwR1ZJVm52SGFyNVhTdzhOdnNlaEJvZXh3ZGw1ZThjZWdwc1NHZE5JUS9SK1M1am5NY3hTa0tGOUt2bS9CNVZ5elBDYmNtZ1NvRGRNMTU0TExCNDhGVG8rd05BcGVlTDNlcm12WjI3SGxmVHVqVVdEU3BtekhOWkpSaVRodCtFZDZiUjNScm42L2Z0WGRUTXl5YzhINWx0S1MwVkMvTkswaVFuRm5EcFBjWjhoMmNlZU1GMG9Tc2MraEc4ZmdrVFhxdkFaK2NJTE9TbnJXYktlbnFuZW1BSHU5MzgyajdPSWpDUmJtb3p4MFZqTW8way95eFp1YThGeTlHWHBSQms4SU81TEUzQml1Wmppc1BtNWVBdUh4T0F4VC9qN3BQS1V0eWljNkltdFlwRFVTR0xqQ0htVGdTaUxSRE5oN3JtZDdHSjBHOGI2U0VRWG9vRm5uY0F5SjE2bVlpVm1yS0xod2JGK2d4T0FTc0VLNFJhc3JJeFFaL21aTTNqVWtLR25jODkzS0VZNnBSMDhSRGc1OXpPMkx1M0Y5Rlh3Q3pZcHhVamx6NU03RXFiSXlieURxemlNRGc0TWltMlFybDhwOVRydDdxQVNkMG94T083d1BlVkpHdFAwR3FwdzVvMDEvMDZoajZJeGdhOTEwZzQveTdRczVpczZ0dTZZaHN3eGhqeVpTV0F5aUUzc1ZoNk02bitWQTltTlp0dkNpLzVYaHk4U3NKUnd1cUkwWGg3bUVnU0dNN0xLMjZSNkZNWVptTnFiUWY5OWZDc0t6aVhCZ2VHdi9HQUNJQVo4Tzl1WTI0a2llbXBldVk3Q2ZkbDZpc201cXVaNDBoRkorblNwQ0N2bEQ1MUphK0dKbEpQQ0VOL3FpU0tJVlJaNjh0aWhvcmgrS0pLaE9lSTNqNU9Ya285Z3hRYy8xMmFieXVBOG9BNFZBMDlFcS9FTHMvVUI5bWVtS3lHY1J5cTVmZGlNaytVSGJtZlRkVVJQajM4cWxTdWtOLytralRpV2x3UmpheEsyb3ZWcm1VeG5RK1FpUFlCODQ3dHhQZWJUMzRaU05YekJaM3FOTTBqdUdkUGErUWxsOGZsWHRLZEdLZlhGQnphMEZZV2pORVE4RFdJK3pTU1ExV1VaaU1QejYraktaT2M5aVI5bDBBREpzZ21KUDNiemxwaGxpTXlpM0d2SjNKTUlibHdnM2VTOXhwcXM2MFBhRTJzMWhNWG03NlhFZDZuVFY0enIyMkdabitydjRtZ0dBVGREQmtuNkxic3Y5NzNUaGJ5R2lqMXlySHFjOFA5TlRCbWJkN3dmYUNCUFF0K2w3VzU0NUtsNDFSc3E0MXR3RTYvYUsreHh4a09FUTZON0N6QndYT3ZZUjR1ZnVMNkVNeEZBR2ZZWGV1Z2k1WnptMXc1NUZLZzQvdnpSZE5EZE56WEhZaFI4STh2cUZTUWc4RGUwSnhsbkU5WEcvd2FoaDdLQk00ZTBxL2xKa3lPa05odFREcWJJYnd1Y0JkV1BGQVlPZ0Z4UEtTM2Fmem5FaGp0SStQR2JVKzhpYjdVZW9pc2g5VE5WQkluTkQvY3VwdTcyUFk5SlpZenkzcjZTS1lJbC8rQjVtTzllYzZVSTk5QVlBQ3VjQWdJcjRRQzRaMHFiU1BIOTVkS3BQS2tHemVBYmxkV0x5RmwwcVllUmVqdlZhS3Ewc1NCRmZMUy9jQzhZRlVzRmtaZDU3NTZkZTAzS0FDekdvNmpiTWFhaXJzR2FOYnUyRzVhV0NkZmhzT2h5NWpCanFDaXZiNCt5Q1lmVmFySEFVRnNPZ0t2WVlIcEJnbStJanJqRFZROU80bGUwU0VnaFFQdHdudEpZdmZPeHJkM3dKSm41dXlkbEVwTkZRVzhudFVJTndsWjdkT1ZjcUh2ZnZ0S2hOZmZqTEUwaE9WRHZJT2dZcEpCZi9SY01FVlN1M1RuTnVJVGRiSko3NEtiM1NzQ1JlMFlQVWt0bTVnZUF0ZjJKaUZhNUZiSDJ6M1dqYmZLV2NKbEZmMU9IOXhxa3BHbjdBUm51VjNGd1ZEd3JzZTR0citNQzN6Y1hvUlBiRDdBZGEyVE9jekI3UVZFZGJ0ZC95Vlh1M3M3RDk5N0FzTGwvZmxZSGZnRnhkVnQ2V0ZBY0tDQlFrVmNveUNYWHNSNE05MXdSc01wTTY4Vnp3VFVHS2VSM1FBZEgrUXhoNGdrV2d0VGhzLy8yUUFCQUJvQVFBQUJUd0JBQUE4QkJrOENBQUFBQUFGZUFhdEFBQUlBQ1FJQkFRb0NBQU1BR1ZSb2FYTWdhWE1nYjJZZ1JtbHVaMlZ5SUNnMktRPT08L0JEQj4KICAgIDwvQklSPgogICAgPEJJUj4KICAgICAgICA8VmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I+MTwvTWlub3I+CiAgICAgICAgPC9WZXJzaW9uPgogICAgICAgIDxDQkVGRlZlcnNpb24+CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvQ0JFRkZWZXJzaW9uPgogICAgICAgIDxCSVJJbmZvPgogICAgICAgICAgICA8SW50ZWdyaXR5PmZhbHNlPC9JbnRlZ3JpdHk+CiAgICAgICAgPC9CSVJJbmZvPgogICAgICAgIDxCREJJbmZvPgogICAgICAgICAgICA8Rm9ybWF0PgogICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5Nb3NpcDwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgPFR5cGU+NzwvVHlwZT4KICAgICAgICAgICAgPC9Gb3JtYXQ+CiAgICAgICAgICAgIDxDcmVhdGlvbkRhdGU+MjAyMC0wMS0wN1QwMjozODo1Mi42NzFaPC9DcmVhdGlvbkRhdGU+CiAgICAgICAgICAgIDxUeXBlPkZpbmdlcjwvVHlwZT4KICAgICAgICAgICAgPFN1YnR5cGU+UmlnaHQgVGh1bWI8L1N1YnR5cGU+CiAgICAgICAgICAgIDxMZXZlbD5SYXc8L0xldmVsPgogICAgICAgICAgICA8UHVycG9zZT5FbnJvbGw8L1B1cnBvc2U+CiAgICAgICAgICAgIDxRdWFsaXR5PgogICAgICAgICAgICAgICAgPEFsZ29yaXRobT4KICAgICAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPkhNQUM8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5TSEEtMjU2PC9UeXBlPgogICAgICAgICAgICAgICAgPC9BbGdvcml0aG0+CiAgICAgICAgICAgICAgICA8U2NvcmU+Njk8L1Njb3JlPgogICAgICAgICAgICA8L1F1YWxpdHk+CiAgICAgICAgPC9CREJJbmZvPgogICAgICAgIDxCREI+UmtsU0FEQXlNQUFBQWd2TUFBRUJBUUFDQzd3SDVnd2NEQjhUQXg4QUFBQUFBQUZEQUVBQUR3SUFRQUlBUUFJQkFBRUI5QUgwQWZRQjlBZ0ZIUUZsQWZnQUFndExBQUFBREdwUUlDQU5Db2NLQUFBQUZHWjBlWEJxY0RJZ0FBQUFBR3B3TWlBQUFBQkhhbkF5YUFBQUFCWnBhR1J5QUFBQitBQUFBV1VBQVFjSEFBQUFBQUFQWTI5c2NnRUFBQUFBQUJFQUFBQWFjbVZ6SUFBQUFCSnlaWE5qbWNvQUFabktBQUVBQUFBQUFBQnFjREpqLzAvL1VRQXBBQUFBQUFGbEFBQUIrQUFBQUFBQUFBQUFBQUFCWlFBQUFmZ0FBQUFBQUFBQUFBQUJCd0VCLzJRQUl3QUJRM0psWVhSdmNqb2dTbUZ6VUdWeUlGWmxjbk5wYjI0Z01TNDVNREF1TWY5a0FCQUFBVVZ1WTBsRU9rZFNRbFF3TWY5U0FBd0FBZ0FKQUFVRUJBQUIvMXdBRTBCQVNFaFFTRWhRU0VoUVNFaFFTRWhRLzVBQUNnQUFBQUlLVXdBQi81UGZFK0FKUVRSZWxQQkUvcXRaTVMyM2dkK3NhK01nSlJ0MnhsbExOckhpRHJwTVYxMkNRM01scDVWTTdvbFpTejBOSm9KRTBDbWVzQXA1NGFOdDVneFZWNERhWUFJd1A2TmZ0QjVPZmRORXoyUWpJbm1BRDRLQWdQRGcvck9tdXZPT3BPZkdUTFdVOXZKcnp1djluYmVOSVVmamtrQ3lVb0R3MEVtVzI2SFhROVZqTmJGVkJQOEVlK0ZNbGx2U1gwQTRId2R1L0FaQVZkdUZhcFRYVHZJeldvYXlGLzdGcHkyNURCOXZ6aEhDbktDcFZhREVuWWhOVjh5UEV1WkRMZm9OMEdpOC9sZ0hEeWVSMXNDT29WRHVyRjdSNXp2Qm9vczA5USsrUEc5VjIrNWNEck1xdUJPQXgxcU9zRE9LQ1Y4NVpYMzZER1RwMFlnTmo4aWwxWlZHUnM1R25TVjFoZTMxbDM2WXkybXNrdmNuT0UyenZhd2RUQWJqaEt1eGxwQUFwcGt5U3R6SHA0VmRURU5zblNpajljamE5c0FxY2VUWG9FSzZSZkdOVVZjM0ZvY3dtWm9Kc1NDdnVra3Uyc3AvZ0dUb0VuSlQ2bzlMZ2V4YWlUTTBwQ3hyRDhKQ2NNang0Q1ZvOU1SbGwycWpPbUpGcGtIVElUNjNraHYxNE5wcGhhQ3NqVm5jVThuaVdKZ1dTZ2NiKzVNSlkzTFIzOWJQWTNSaW8zdUM2SVpoVitKakRZZGVLZm8ybGU4WlAxYlp4VVVBd2g2SmF3KzhPa3VxNHp5VnRlbEJpL1h6dXZQOFpLK01vZk9hZ0lQOERVZThSblZXS0s3ejBvNE5oK1M0QUdXdndyTzJndk5sbVdadlJtUW1UaEJSKzZGdWdWQStNYmsySisyQzVhMGJlNjZCeGZueENGNlJtNXh3bnUrQy90SHYvRjIxSFV1L1lRbHd1cElHTzhMNWVtSWZFT2hnT2hydm1SZGt4bzVGRXI4NnduMTNRRkJzV3g0cVg2Qzl6K2ZXMW53c3pMRlRzQmVwRkFhaXJwdmxCUUZ6UUdUcFEwaXY3eVRFSDVFNGRpSEc0UFgxQ1pqaG1vSS8zVjRCbDhpalJ6UE1ucmxvd3Zzc0tkcFhkT1RVUThtcVpJVE44OGl4QThtREJOL1E1d2ZZaHMzdXZ5UEZUK2h0RVJBOERhc1VKVXVDRklaSHZxNHhtZ2VQcG1TMFpsa1dsUW5NbE1HZTVhUUFqdDBpbU02NlVpM3RhbjEwV3dhVDNrbzMrL1MvcHI4emdEK2sySFdxOERzQnJIS3hsM0lnYm5GdlhTRUFUMzdzQTZwTjNUVWhGOWFGTWgwSUxjSHZsVHF0aHd0Q1FJRE8yZW9kbzVOdFBzc0NhdGNPSG03ZDZzRWp2RTBlc2Jib1VMT3NZOVNIYVVEUjNBbG5abjZodEdPeTNZalk5aVpGLzFLTGx5aDVCVm8xQlRqY09iY3VpWnZVaUIxRG80clBrYjhQUXR5VGVCc3NLM2p1SzhZNWh6Zm41eWpIRzcybUpsSHpnRUoxb2d2T0Nzd3cvUk95UkhhWDVMdEZyN0JOUHVtTGxjRG9CaElCSXhXZEU5MytoTjFzaFlYdGFzSDdPcVlnTUlTbjRPamF0a0xSeEdYakZveWVCcmdGWXdjd3dORDUyZmdxdm5yZnNOZ2FRL05TNVlNUUFGZmg2RlptT1pEMDVIWWl3OVZrd3Ixa2NrYVBQeTJTZnUzUDdDc2dCdGErQ2FTTWI1VW1Tand5SUEwTXJNa1QyQ0kxMXNYdjZjVEpHNmhZUk1jRXFkUXFsNkp4RTgwN2NPcmZiMDFJWHhnV1FsUGo2V3pkR2FZbEcxYjVGRUxENGV5aW9VNjFENmVDTGE3MVZHNENqb0k3VXNZMFRXQTl6YjNNRlF5dmVnS0cyR0N2R3A0ZTVCQ2k1Vkl5UlJzaUNuSGo2eUYwMDZlUmZDNDJUcTNEdnBXbTk4RmREbzV2eWVxMGh0OCtqTER3RGZOeFJCREg3ZG13SUU4SWNYMno5K29QbHFqS3hrVURPOVY1M3labGZWRDc2WlBBZnNQc0JlL2VsaFAwOWZyVXRqZjF2N01seC9pcTlhWWE0a0RnMTh5d05EZnc1Q1FOcEMyY2g3NDVCRE5nMStINFRKb2FyRk9rMmt3dEM4c3UxR3FHNHVJVEg4WXNCNUVBZ0VkcUluY0Y2V2ptUVJTY1ptQXQrMmpIcEwzN1NvajNNcG9sYWxMMTRsQXNyQnpUY0p6TUMrOTQ0bjltQVhPc3pLZTRBWW1pUDRONzBYazlQTkdUUUNnUDRIZm03SktDT1pFaEpxaFoyU0RXdkdRN0R5TmlEV3plS1JsQWUyOTdPQ0NWc2x3dGlDZnY1SzBoSFlxMUp3cHZsN25zcjVkbmZYTjQvalZYUGIvRFdFV0lBQnpMSzVGSU54bktDZ2hPa0ZxNDBiZEpTeEVWNW56T3F2SnFTeTNiaXEvcnJHWC9aL2pRUy8wYXpxYkRnSEwwcUVSVkxuM3hlTFk0ZCsvZ3pMWmtEdm5JOVZOZEFiQ2l5cExBWlc2STNDNm80c25Ybk1qUytURUVxN2M2L01ZcjVUQi9RNlJBWUdHM2ZUUnBSUjVZcFBjRjdGK1h0c0k1QmQvWEVCNzUxdjdlYjFkeTJ2ckF5dE8yZXJHdmFjcTRvY2xMZnI0QmhLdmRwRDlEYUdtS0p2SWFrREV1ZUErVnR1QmpGNTNHSm5YejBrdHUyYnJsbkowOWZNb2tLSmZzY2hrZHE0M0xWajNFU2RxUE96cFpORWM1TGlweTErVTBsWG9YVnRGMkJVdm9temlUZEZzTVVBR3NnK3owRkpIWi9zU1BRRXU1YXk2MVV0Y0I4SGptNnFuMFR1RWxKb29KNzRvK1JaZkJjbXRzY05wSkJoMFdndzVQbHhiYVFPdWhYSEFiUHNZWEpVbnY2UU5JOERFbnpGZ0RNaDBYRTA0WnZSbHpKV2JUTnVocktIeGhLTnBZUzFNaEdyc3FUbUxZN1FSRmEzOFpKQlpsd29pWTZlQllRQ1lzVGlBbEVlbTV3em1ncDV3V0ZaS1BuOG9ZNDBRT3B2SzBITlJxcjdMMXBuTkp4U3VIZEhqVDBFK1VZR1BlUUUyYm0vNFFGQzlXSFVIN21NR2ErQmhIeHlXakJjdUtteUNTU2FjdEFQQWdrQ1U0Z25LbDFTNjlXSk9JMkgxUkozTGxHNlN6Y0FFN284Q2pEYXRSWGhDSElhY3BSUVRHeXRFdFl5NzBydmVqWWVFSnNuS0JEcnR6dnF2bmlRWS80ZVUwSU5pY1FEc05vUEtwYUVka3BULzlROGFJaTFuT0hxd3pjTVhOaCtsb21BQzNIcnpVSGhobUNlRWY4R3Fsd0IrRkZ3YmdvS1dXTklGZWZLaUZIVnFWUzFRWmRnQXU3cHNpQWs0Nmg3em9aQnQrdXU4R3F1T2ZERFMvazFPZkVtbHdzL2xTRTJmYVd2MmpENTVFazZ6ZzJ0MXNPRlVRQWFJWVdlL01xOUJuakhqa2taa0l5VnZuZWZrOTFvK1FVUm40cEt0azFNMk5CejRGcHRGN1ZJRkFVRDRVRjJCU25zb0tFeElZQVIwRU1LNjQvSEc4OW5OeW9mWTlBazJsUEthU1NubGlkWis2ZVR5OVhlUWhqUDl6QVJzWGExNVkzSzUwcnlzZ0d2WjlwQTZod3Q3SGFxNGwycFVrNmswaXhLVm1qR1NQTkhkT2dMVE9GdStPV091azhST25CcUNFRmw5amlCUHBaZWF6eXpPQ2lLU0pXUjBleUJzbHRWcDgwNndFWkhOTUUxUWxlWWNRckc0V0JmZ3FjSUhMWHE2ZG9vRWljYkhiVjllTTJFcVFDYXBmT2FzK1BJWWczTmllRno3clNDOE5pRkxJUnhaMVE1UDNWR1N6d3BsTjRITDZJNVBjelVCTEh5OXJqV0pZWnB4TzdxdWlKMEVwK1FGNVNMOS9rK2Y4ZzJINWNTYVNPS01heFYzZi9oN1owZHl3dWR1SmpXOEdNRW5sL29GUXY5bmJKbzRkNm91SEFZK3JRVXFyK3VjbUppWlZlYzdWLzI0WDVPWS91N3FTbVFuQStJUnJES09sRnBtclRCTEhvYTdaM3Z4MklSc1R1MW5LZ1J5OEV6bVhWd1JjZXpUQ1IwdUlNbG9hOUMxOVphWG1QUzJjZkpzbGVjNG9VS2lmemhTWnlqOFN2Q3FtcktGK0RQWlI0T0VvWGRsMC9rK3IyTktNck1oMGJuV05uQVgzQVVCdGdTNnZJU2w1WjNLYU1wL2ZiWm9sOHRrMyt2OXdYeG0yVVpuYVJkQ2RleFBjQS9GN2U4cGlVajRvMmtqN2dJMVhQY2RRZGJGZ01raXBPTE9SUUVQbnRRNGFzYnJqN2lKR09NcmQwQ1lVdnYyZm0ycURaU0lyNmw4aVVQV1NYM3phcERpMmJ4ODFZaEFDbDZwTFVsYUY3QWIrNHI2SklMeVFzYUJzdkFtbUszRXVEeUJiSEwyZVB3eFozZFFTTzZpR3B1VUp3bERlVXM0TGMxR3BENEZ3U3JZWFZBSnZsaXZYeVlBcVM1YTRyWnZSaTVuQnI0TmRVMnRkZmJ3cjlBUWhrMkRvektReXJtYzlSb1dVblcyKzdQSnRITWorbk5JK2lERjJ0Q1ZZM0VWaXEyOTlTaXlFQ3ljeXdMU0VQUWwwTVpiTUN5STdIWWoybzVIZEtab05GZzlLWmVQQkVWWVplV0VmVkh3TWJGTlp1dWRQOWJURmF4RU11Z1VDS0FKdnkzcmtqa3NSNzRkRDc5cTF1aERxRi9VWUtPRStzYUY0Q3R4SkdsWU55eVIzWWZQTHJYcExtRjY4eTc2ZERVb0U2aENPRnQ3WU96bGZHRkVxNkRqNmkrWnphRDNoN1FJT3lUYlJ3Si92RTdHV1Z6V0lVWExvZC9Ta2wvVHNXWjBJM1RzaHVkaFc3b1hVMks3QjlqaEtrNmVVd1ZSUFBFTkxiV1VaclBrWnZmYUZHclVsVHNtaEs2Sks2U1cxUmpxTlY4MUprVXZLbU9MZHQ3bFlrTDF3OC9zUGt1a2tmVGZVa28rVUJCKy8vbGpRR1NhaEtkR3hUUHBDK3E2NXppWFl0dWttOXZCM3RCWHhHWXEyOWo2ekl1WGErTHUxTk1YR0ErR3Z1L0Y5cTR4QWhoZzlQVU1uRnMrcWJLTUU2WHR4MFp4bElBek5nYVlmbSszbERIY2xTaXR4OEpBaTdMUk1YM04vbVJqcmlOSUp2OUFGOXQzMFU4MTFVWC9PQTJPd090Q24vdXVUd3RJOWdSRU4rcVdYRStYUjdaeXBSbkNTUWlXY0FKbWNMWmgveVp1cGhJNDA0TE94SGdQWnZWYVdXNkxPSXZHeThzYnkwRVdUZ2V0WlMzdkhvc3AyYndsSWtsQktMZGQzNGhLMDFpRHlPSDJ0WGlIVjlTa3ZqTlEzaTFpVVpuMlJQYzJsOXBMMElLeStRRlI2MjVtTTZ3MjBWajZOQ3VoZGNnbzI3NUxBTU9WSmlzNE90OWt6WUxFc2NScncvYUJ5LzJTTERydlVHK2RGbjZGcG9SczhyR1h6MnYzZ3EvNnl2ZFRkV1dMQVNDMStjMUVuZDFBMGtqc2dZTEcyZUo2Uit5WVNGVUFBZDV3bi93VmdCayt6M3g0ZXZQOGE3bUx5bU9NL3NleWJtbzlKZDkvRnRWQnN1aEZ0RzhVclVUOFU2eTVXVEVENW1sLy9aeEVqY0NNUGxnb0lWdkh3NWNlVGthTEFhdmpocERmOWJabUFxMFdab0luZFB5SnB2Z09TeC83UC9scGVNZ3FlT0Jmemg3ZEgyYkU1TFh3Q1h2YUllR0ZjdXB6d2tRaklaOG1lbXRHdU1BRmJzYmV0SlRpQVNCZHpHZk1kRUlQeUc5YlFqR2xjck9rYk5kVHlMRW4zQWRoQnRGWDVmY3M4a2FYU1BGeWpCMHRyK05rbjZkZCtoeU5VS2ZCZk9WOFZsRWM4enBKaW0yTUcvSVNjc1BPTmZKTTFDaFZVYkRUZXY0bHRSYU9sMEJNU25mODdKWGZ5cGRhbk1rWUtZdFdNVGpQMThxL3NQbFVBam1nc1pqZzk4bCt3VUI0eFZObzVOaDBXUy9wTGp5VjNSYzFyUGcrOFdENzd5bGxJNCt2S0xONjdDQlJQdDdUcGpRZ2JwYXdEZVZVK0NvNVk5cXVpZGpwZ1UrcXk5L0V3Tk9XT2E2YkZLMW5uc2QvSjhMSEpYRXlpWXlRa0U4L1Fmb3l1QVpuM09iMTd6N0VUTmNBc3U4aExGd29mdEVVOGdqZThlSEQ2NlBHbE9DZnI2NUNtdENSc1VNVlBjOTg4UWVJWEVmVW8rc2YwT2JhQjRNQXNlby8rRHQ1OGpXWUYrTEpBMUlvSHRXZWgyR0d0K3JydVdiQTNGRTdLOE13eldvVFVMckZnWXJwRWs0UmdOeWJiekpxQnpudzAxOStTU3ZQQ1o5aDFpRmxJdkc0ZXJnZFoxY0ZTRm94TlRocVVCa2Mxd2h5M2liK0FZV2R0UW1ueWp4MkNQMEFyYi9KMkJqWHlTNzVYbko5TVh1V2pyZnV4RzhwVlUwQVVQM1g4dG1EWmtsMlIvdzRmZHRmN1lQUHhJdGtCVmExOFBCY1VaaGYzOXl1M25oR2hzN2RVMFNPZm50ak91RXVjVjhCM2praDhEUEpWQk4veFlGbFVGMm1mbllpZWtLT3JMNkN5VndDYlhnU3pYMXVKWjdSVGxjb3RHSjVkK2xaZ3RQVkd6ZmhlSWtEekEyako5RmxPSXVocE1TcGgvd24rTkwyWS9FTFk2TXR6M3VwQzV3U2RrVVFwdDl0SCtNQ0pOeGowNVMxVFBHWXhtcSt0czVKUnBxZVZBdDAzTUt4ZUhyOWZrdG03UitRVU5idGtSbVpXeXg1QWtyZUN4S2lGb0o3ZDNqK0g5eDQvUVIrL2NyQTlEcXRySUpJZ0NsNEJ4bk1BODhxY2VpRmxvWThWZFBzSGVzTExmVUwzWWYzNUlVK25EQSt6UmxWZGhMblRtQ1dySkRoejVTS2F1SEtldzFVdnFFOGp2NVl0b25LUlppU0ZoQ1RDUzNtMGhqdWxyWk80VGxYMk1idTZEUDExZnBZSmhUSDlnOUFFeFVOUkJlaGwwWmNuaTFWd1RDd2cvdDRwa3ZsSUxnbmNwWk5UMy84aWtJV1FiR2xraWZibzZwcXRGdzNnNGV1Q3FBS2NjUlA0VXlDK29DVEV0NFE3RXpYT0NyaGlFZXVKUlhkSzl6SnBCTzl6WFRFcHNreXJibFBQc053aTN5MjIvWVN1Q0c3UEZvN01RcllKS1JicGRXSWl1SGYvTkRwSGRVbjZrV0hROG5PbTNxb1lTdGFNb290YTZ2Y01LNjFLNzBlKzFWT0pjaFlWMjNkSTNaUGdRT2llVWVWZThmcUJJd3lhWnM3TXRvdGwwbGt6Z0NGUk5DODQ1VzZqaWtCaFoyOWliQXg3RlVXSnpxZzVCS2JrSDNkcG9vU3JhMFZ6Z2dKMlc4N1p4UXpBVUVsRkxRZllPcmw0NkJnWUxPR0E4RTB1L3prbWRrcGplZyt1MnIwL091QzM4MGY4d1hSYXBZNVVqcWNrUDJPRW9uTGoyaGFkZXRRYlNDaC94ZzhrOWhlcU5aZmFyTUFwY2dIVnpCK0JxK1BVa1l1VUhDdTB0a0s4bjRVdzVrNGhlRFU1RG9Sa3RiQ3B0aURIMGhSa1pBdXpueThZclFKd09PUk44aGNYQnIwQUtIUVRpNytOdS9KMUc5N2hEWk0wbk9WT0JXVmN0OFNYUkQ1SHJMektGTjFxbm5OOEZwZHBxN3BxMXZ4NnRVUEFJdVkwbXZ6UUFyRU1oUUI3aVd6K1N1TmlTTTN4SGxKUkV3UDlYOU95U2pVaTB4Z2h6Unl4SDAwRmtvT08vd1h2UHNnbWRMNmJpRXBYYzl1Z0hvSFhRS1JQMjVYditzZjEvRzNtd1FkUHFPejV6eUJ4YVltZkZhUFhaYVRNMW9xcGt4cFRuZnhNbWk1OEtidzI3Rk1RQ09aSjZPVEJ3alR2Z2lnWStTM2NEb0hvUmdjSy9hTVhzN2tCQVo1MXl0aG12bFdwbjc5VDhVOHdrenVGUS9mS25vUkhrd05waHp1RVA2Y0lXWVlZYnRiUlNpR0d1SlpFd1J3Z0xqTzdTVGJ2b2xDbUpDdTNNZUhjOVRTYnpMS2JhY3h0UC9MaEVlZU5VTWVzQnpDNGlzYkUyR2JUajRzVzZRZ05UNEMvdGIxc2FLTkdWa0w0QnhYeitFYWpTVktHY3NvT1RyNld4bTFOcVlEbWpMRVZwV1ZTVTZyTEVndFR6amZCbnh6aUcwd1lpWWErN0NmYkFEUnlmUDhlNUVEMU1EdnZTMWEyTHArQkwyV0lDbXA3Z25FZllnZzBPWFYzMGF3cEs3MVYzUUx3a09IbkVaa1VVRER3VXlrc24xVEExemo0dXNhaDYydzhWT1JFU1Jqb0J2MWxZZnI1RUd2MlVNV0JaWHh4SW50bVV6NENXQmUyTi9BbWRtdVQ5NllHSk52b2NDM1o5aE13WjFRcnhMWUlqUEdSWHdEaTRybW5nSExjUzAvL1l0Tys2MjNMWEZSQzRQZWRYNnhnU2ZUTjRUUjF6aUhlbmFMcGlmRFlSZHJrZTVQNm85bmttV3dzRUV3YVh0SmE2R0lEZ08yZWdkK2cxblpmcnFKK3liaStxY3JEUHFUS25ZRUJQMGZLRU9wLzB6UjM4WC96eVB1bldaVC9kcW0rRjRmcGJVbUt5cUFvU1pCVlJGVTRGSFpReVZJYnM5UXhVQnp4dElkWE1zdThDdUpkbERTbTBqdStrUmZqTXhzZHM4eE9nd2tTOTdZWHdUV2x5OVhBVk8reXlqR3JRanJ1QitqS2N2VlVxakE2bXJ0a1VvSE5uN25zTjViTjJERW0wMm5LeG9PQkJHT0lGeDRsbTc5eTJxOUxKamxTOXhaQWwvNC9pZjhiRk9UMm1DOGNFeHRrOWh4S2xaNG1Bd3pGejJzZTdvc0dGbjFLSUtjd3pKaDRUaUduaU5XQ2NBSllIMlA0VVhHRUZxVTlYVldLN2liV3N5enZ6YmtIZzlpaE9KazlEejB5Qm5iWVNabXJESm80MWVlSnV6d3lUeFRIYnlGQUY4M0FVU0ZuclFHcjJCTHNydVREbk5zeUZOVnZOR3pRRmFyOTBEbDVJZXNuSzY5S0d5dHM1RHdqWGtOMm1ybUZ3SDBBNndGUkhoWVM3WUtUQjdlMzJMQzZ1eEJrWW5peUNyTS9UeWgyQlpFOXl4RERBZk1Uc2FqS3NkQnZHMDNlTHQzbk5nZnd5YjhNTnl1VXR4TXFrKzdxQ2hWa0I2cWQwem9ISG9PYnIxb0pTZGVPWFZPTy9TNDE5TGpIMUh2Z1Rwd21SWlZmYVhyV3NNbVVBN1pydTBockpVcFNCVUM4ZFFGbUlCdXhNbjRONkJKOGR4cStZUUxHd3lFOG5lNHVML01OOXUzMUo4T0xhZUpLd0V0Ri94Tm5VNStoNzU0NGRQekdZZGpBNzlsaU55ZDU0cnFjTk85MG5lZWNZMXJwK25iR2oybjFQcXFDSGRJamtZU1k1MkMzSW5DdUd5dmFyNTZZdU5XWXRqVXZTV2k0Rmlqd2JMR2VmeDM5WlFmQURrZ3Jpb1BGa29VVEtVZ3Z0YjR1ZFd2QkJKNjJ4NmJ5VGJ4UzRxaEJzdlVPZ01WWHMzbjJKT1RDVlFxZ1hpK21RTys4TkVBV0tOVnQ3OXUrODViUjVlcXBuYlRwYk11V1M0bDAyT2hITmdEck8zZlltTnhQRXBiUUFkZTR0YzhNdGpHSm1NMHMrb3J1Tkd4VHQwUDhSYk1tOHo5M1BEakVKR3RQeVFJZXB6N0k0ZkFnNW1mc0lEbGRHelRqQUl2T2E1eGxBR2NaRzkvdUFqbVppWVBKb3Rmd1lRaVdtMi8rTGJTT0tBZVNaZDIxRUVCQ2VUUnRNaTJuQ0Y3aTQ1bDJEWjkyWDNJdjd0bWM3UUV2YnAwMTlONnNuK25KODNqaUE2akdqYTFSQlRFeEREYWpMQmpDUDJEY21SaTBrVWdNQjVnOGlDNEpEQmprR3J2SEJxS0k5OWsrVmZuekh3R3M0VVZHdWVUU2NISDZwSFZMb1djZzA5d1J5NkxaaGg1dm5tWU1KWThGcEtmTXVNVm5vVW0rOE11VlY2YWxUWC9ibFA0djkwN1VvVjY3dzdpU0pJZElNdURHdlNNMXNKbENIeDlWS2xaL28ybDhsRk1wSWR3YVdRbEViUXZna1plazFjTTdwL2NyM1BLNHBRcjhOcDRVWDhLaDZrcVQvanpqRmRQWHVPOUFKa1YxVTJSNmU5M1VjaklKaFUrT3FKdUpRSFkzUUdvRXFWUVlUaUU1WVhhVjF2a3JSVjRWK2VWTzN0ZWJ4dHlqQVA2Mm90WkdJSllOdWtzcUJ3SWlnQUlUTWIvM1RVVGUzUjVkUXMxeTNoWkdDZ292cnNxblZpVzRXM0RzZFFUL2dQbUM0K0xFZHJzZk1DNzBmOFhNOGdSVUpENXdPVmIxMlkreStSVzgrclQ3NnZleVdUR254U0tvbVF6MVE0NFBVTDF5V3ZlZ0ZDUGh4eVpZMmVxZE1ocUZVZUp5WE9rSjV2cnFrRUk3Y3kwS0JBY3VTRDFQNHJKeGhaY0RGYmlEYmRxMUZMeUdMWWZPTTJMcU50ejVBalJ4U3RwTE9EM3JBODBLYjVNV2VLY25zS2VjdnJlZXg2VGFDTGhxYmk1Z1kwWDEzcEpscUZBbTdvVHlHRndyRGFPV3VLRnhqcHFkMVkwVkh6YVpnWW9xNWo3OGwxYy9BWi9PWnVvem8vQUxWTzl1cGFEL0EzZzdTNzRHREV0UDBoWGhOUHNyVTdla0hSTW5ycmRjcys5WklDcm9DWkNZSE5IaktJWnlRd1gvQ2V0ZVM0a3hGTk8yOXFna05OUFB5Z3lEck5BSXZPeHlQVVdjQjJ5RVppbVkrTUdiS2xEVmRFZXVBb3hZTkFXdjFVaDRZZUNYY1Rnb21ER0t3WW12RzI3YXZVVVkvMlFjU2c5WkgveEpHNUs4eHg4cEcwZFMwWlZsNFJIbmVlVXJGOWo1SEZaTkd3NDNoOUNmZ2QzQ1hYT2ZxTTFOU0h0dmZkNnM2dk5pSEdCVkVCUUI2cTJGYWhaanVmakpJaC93Mi85Y2JWSlpYSXlVa1QvbEpWS1NNeG0vSkFlbVR0by9ib2ljdWlpSW9ld0ZudHN4OEZ3Z1FJcTBPTU83b0o5VmdQeVc5THRvNCtueEJRcmtBNUJNekNmOWJtUW1xc1FHRWdKOVBDeFFqa3JVQW1xUGJiTGg1d2E2Mk14N3hDc1ZnZGtVMVFaUlJXa2g2NmNtWGgrLzRHS2RSdDVlQkZMT0luL1N4S01YeWxidzBCRjFpaVVUaE42ZnRuT1NNeDRPQ1doRVVjMlpWSFYzWUU1TlBaL1ZnWFpQaytGNXcyN2lreVpoVG41RlhVaTgwMHBNRFVIS2pGZTFwNVhUVU5pRkUxQktxUEh5ZG8wR2dqK2haU01jTHBwcWxYMldXUDVzelZyMlFBcktyTm1oMjJ5U3ZPMFNkRWdQdERFbU5PRzRKQ2VmSUJUM0gybVVKTnM0NWZlVTdib2U0OHVNRTMzdzE3blRZWWFONkV3Q1NjbWNBMFBUUHQ2eTVPOFdZRnJvRnVHRlFndC9pYmFwS2VDSXc5OHorS2JkZW5XNEYwTjQ5eVljeXNlVkxOUHZiN2xzZ293dU5CcVJvaHJKNjMzdEswQUl6a2RQR1JWU0hMVUdWZlB2clhpRm5TbnN1QmlCUmhWQnRDR3lCckwyNmE2N09QV2ZZZVl4ZzdXanl3aFlzZWN3ejF6NFlOT1NyTE15cXAzc0lBU2ZodVdLei9wb3ROdC92MWxSeWNYMkx2c2Iva2Y4MUVxamU1d3VVVVhLMnVsb2hyZUJMZkF6Q2F3eFdKWkU1N1BMVGFZV0JSb2FEM2t5aFc4ZUZ6TTVzclFOSlRYYVd1RW1zTXUyMTJLajV3eFFrS081QWgyYlIzZFhEaW1CNS9sQTBrTUxNQUhIWnRvYnFPU1RYNWM3ZjJQam05Z0s3T0FwS2IyS2V3azkySDBjOXN4YktxSjhvMmUwTTZjKzRDQnVsR3d0ZkJVUXZOMHpzNkNMZjZ0Z0k1cmFLTkd0Z2YzekxoRm1iK1owKzlJWmtKSWJtVzk0Z3ZNWE56NFVRWVh6OXBRMEJwbWRNcmVDUkIxRjdOT29Yb2JPdW9ORGo5MStlY1JCWElGR2ZIelRQS1dSeE14dEc4R0c0VHdxUXBubFpENlc0TUNKc0NISVExa2w2SGd6YS9wOUlCOXZUdkFoQXhGbGRHNHJKQnVkMmFNQlJUUGYvcVZ5Zm9yUTcxWVA5UnZGNXZqK2JQbVlLaERlTXlIRXhZSkZLRjhFYm9kczBzWHZoTU94dzFVcndnZmlDR3VIVkxaV243RE04VXMzSGVaYUVOeGJKM3hrQ0lZbS9aR2FBL01kR01scVVYcGlvai9POU80czJ4VDc0SG4zQXdlaEE2UG0rMFlpcDhxd0FOT3lDUno3RjdTNEVPK3JiUkxXOHM2dkR6emlxbjBCYjFkbkVraWFsRGxBMXdOWmxZaDA4U3JSMzJPdFhhMUZHZUNUZVI5Y2x2RU9MNCs1RkFDdEdNbERsNUJIUlpDWXBhRzIyWUoyMEVJWlVrSDdmTkxmcldMK2hZdWJxTzU5Z0x4SythR1dzN1FrVEFOblllYUd3eWhJN0xZc0hYcVNTSlRpSnVFd0pHVHRHSDRiZDJ2YWlyKzdIei9MSXhyTVNpTElXdXZxYVNDc25GNnBIY1MyQTVKZitiTWt3dXJ5blBiVTlNMElpWmY0KzZQYmgzQThMNVgxbFBjSW1GbWFTdjczVGxTVEpTNzV3YzJNazlFcDdNaTdIQlQ5c2tNU1pKWVhya3VQTjR1bVQrWEhXU0tBT2MrZjFKMVdmTjZIVGlqTFN2dGFWbVFxWllIQWZtQ3RrTHkxVUxlblRUbHE1Nm1TK296OXc2bHBxaUFIenl0QnNpais0UzNHSVdGaGhGWittZEJJSmYwb3hFYUVyaCtyTnI4YjQ0Z2ZVK3ErMVRjWGhWSDczeTlkakw3b0JNUHRDRjUwblVmZkduSGpxNC9NQnl2eW9hYk1lZzdrdW9BUEhpV3o0RE1IQWdHSWIvVmRza2lXVTdWcWNpTnowM2tjWkFQQXMxK1Z0dFFQVTlTNXVDMldDb3RiUHJGV2dLRjhsU3lVbzMzZXRsbXVEWjF3MWp5MURKdmNhQW9TY3ZSbUN2NkZ4MENISHgvY1g3VlNqTWJnN1ovODFxbXZSeWpnTzQ4a3c2VW5zb0o2MDdubGUwYnBqV0FwM0F2ZmtMZVpraXJlQ05KdnVmcTJxaWZ2Smxmanl2dWhoajhDZ2UvcGhwSjBVMEYwR004ZmcwVG5td2FMVTZmaVJlcXZiZkdjWlhRNXI0TzRzeHBPK2hHbDFwOEdOeUNLWFoxbndqcVBIRGNSTWM5UUhWVDZTa1k2UEgzMld3ZVFvbnhadVFsUzF4aXY5UEVEd3dvc1pueFZXK3JUd3NNS1VPbEV0Z1QxVUdHM3d5cDloR2pXcUpkQzlRQ3pQYm9oNmY0RlU1bzZCZ1pnR05SS296cnI3YzU0K1ZBRDNkaGczZ3ZBTTdldUl5cXJsS1U0akpuUEVSSkVVNlQzcHNSR0NBSlRYcUk1L2NWNXpjVTNVdkJjN25xc3hWVk9XdFMrNXFqK1U4NXVSVTZ6NlhsaHBIdXpnYVRHbkJ6L1BScFR4RFNjS0ozV041eEdVbklqT1g0RXNjREwwMGVXdkUwVmZDUmFJeG1ZL2NLeTBTZzZFdDZ6ei83MnhFN29MWFdoR1dJVDVJcEg4ZllqRDd0YlFOTlE2ZTNJUHR1cHNUTDZpWlJuYllhOEVDZUxRUE5xM1dlNGg4dk1mMTQzZHcxaEd6Z0t0NHcwNlhpOHhVMENwRUI3YVhyNm80TGVYcy9WRjJMVDliWE53OHNEKzc5QXZWQWRSWldJYkF5eENVZXdCcjlrK2J6NlZvSmpHSzZoOGdLT2NMelJQajErRC9XODZiOU4wMTRpZ0lIMEg5SE9veGVmVXBwWlNGQXJld1pTdjYzM3cxbmx3M2NQZy84eU5QdGMxdzdNNDFEMzVqWUdLNFRwZ0gyUnZNc0VNc3YvYnZLYXlyTFZKcUR4NHdnSXAyOWRjekRqaGpYUHZLamE5QXVYS3kxYVFENzdUeW92ck1qTW9mSDNVa2IxWFlSZVpST3BmSDZpakhLc0ZGTGlrL1FPWkZqbVNHZnF4Y0JWM0Yxb2drVi9wb1luMEFuWi9tV3dPMFNLdkxYeEpySlhocUN0VVVnSWNpZnNRaHhTUjRBVlBwUWJDMVU4T0ZueHlTTHIrSDFYZDBuT09Bc055SklnUnVJaWNsWktnMjRTTXJEd1V4a0NmVW1YWnUwVDdVNHVZM1NBWXZlYXJUN09GeFVqWkdCTEs4cndERWw2WmF0RUc0by9mSDhkR1JBTDVGSnkzT0c2cjFFcHAvejRBT0ZNc1hNOGhsd1ozdHhrYVJnTEFGN1VzMWVhZENJN2NqU1JPRVVWcmIxUm1aTERPTjd2QmFDNlRCVWtwNUR0b241dkNrcjlsYlZGVENKRWd2RzViNmtrN1h5UHlqc29zcHhVNlZTeDRXVEZKdG0zNzdSYmdBS2k0aDFKZzYyOWJvMHZhVXlLWHcwdHVabkllS1F4bXN2elBtV2RJQUFyNmpYTTFWRFQ3WWpIdGM2QzhFMmdPK2VmVnBtWVdBMWFIZnZCTnVtdEtkYlFuUUVYNkh0bE45cHRwWmJkaHJKeFVRN2Y3bldXeWozZ0ZmN0FhLzlwckxSVTI0RE1TTWkycGlNVVlFKzkydFhHTDV6Vm55K1NEUzZ2OXF4azJOUGxSOVhLSzAvV3dqKzVSMWV0UXcvUHh1dkhPd0lWWmV1T0ppTEFrREp5dll0d1ArVXcyTnZQSzNDcUlnQk9XT2IwTUZvMkh0dWJ4OFlCZG9tM2N5ajg3RmJnTXp0VHdoc2NETWxxdWNrZVJrWjJqUXdYcFA0QS9ZV2lNV0xpZkgyb2IyUUdFTVB2ZGJQRnJpbm5wK1Zaa3hLN0dBSWFhOExHYUZaWENDU1V4bWg1WDR5a2VhSVBVSG55WjI2TlZxOW5BOHlGNWNsdWNnN2UyMEd2N1hUVE54QXQrMjBYc2o3Vi94YVhlTGVWK21DckVDaHc3TGliNjM0MWkzcTd4Szhlbmk2ZEVNZmVtWHRMVHl5NENyWnF5dm5GM3haQnlROFdMbVNiN2xaY0FlTGRZcmZwbWhTY3ExWFFTcDQ4YnEveFNPZG8rTTFpRVY3MFJmMnEwTHl1eGZ6ZU9KVzlJVEU3QnF2WTEyVFdYckdtdmNNU0piRWkrS3ZPQVVORXEyQlZZT2R1ejZFaExVY2c2N0RIK21GWFBKbVNEMXErZXBQOCtKdmxWWHo5cXBBb1A1SUNOQkk3ZWxFcDJ5bkFqWDhPdlVZTEwxekc2eFpOUVF3RXlrbitYVmRlTmViNEtBM3lKNXhodTA2WVVUM0pOTmdoZEl5TlM0NW9vVXhUUXU0L2x6RmpzQTAvWDFHV002MG9TMW5kZ0Urb2ttVXQyRGFHdE4xcEFIVVg1QWhkR3ZYZWRwdEMzTlZhUUtBb2RHMjVSTXBTaVlORkhWZEN3ZEptM21yR3lUbkJEZFNwM3lTVGFkMXZPQUdyV1hGZ09ZSndZNUNjei92MllYcVRHKzMvZjBuTjdDUDVyaGNpNnJNUzNFOTJWajZIWXRNdmpHbVYvaTRHUUttaXcrUWF3L1kxcVRXcWJTUGdZdjJHejJOajMva2IrSHIvZlhhVVVqZ0VuSjBOdEdrdE1nVktYSWRVNVJOVnNQNzY1K3E3V1pDNjVBWFdnbGFMUjZlV3Z5NUhqejlHU2pJUFFTbWowNm9ES0dqOExNVHNDZ0JidW5Pei94U0lzMVFtU3F3cWpScGY2b0Q3cnA0V3hlSzNUOW1PU2JGRnpXMktndE0zTW9oWTVMMXFPTmNpTVUrRXRLK3Q1aExvSjNCd0RVK1VoaWEvWTNjTXJHRjNFdWJRY25TV0ZvR0dlRlRBdnNQcktVaGVzbjExbkxER0hJdUJ0bi85bkJKZmxiTk1jeDVxbXJKMzdyS2lnWWJpTVZvWk8wUXpKNG1BSUVOemt6MFVuUERsZi9zZEFwajJwdGdhTWZuckM2Q2hhOEVrUUtxWHpMazFkWUdFc1F0T0hYUEZMYjNFUnNsd3ZWNmhFU0lDTE1RRmlQYUJXS3BnY2ZmSmJxZUh6ZHh0cHlKNEVtYWJZb2djUGxydHJHWndSL0RZemtvU3VWbmlYcXdaN1k1d081Sk1HRWx0V2xVTUFNdFpOMGxuaHh5Z0lzVmZQdktxVDBxKzBsdHJSK3lCY1VVdWo3ZFhERkdFeDZwQ1JxSmV4YTh3NEV0WElxdldOT25WRHVBaitoUVBZZTBEU0hoZ1FLUTNIaENLYUtUWis2MlZVOEVOZ2ZYdENDeDVTdm1CdlU0Rm4vNXhqd3BCR3VBQ0tMbkUrdWszdUpZaVZTd3doemV1NVZyaWNUR0NtcERhUVVLL2p4TklnT3EzSEJLQjIwUWxNZHN4bUY4eTUyaytWVFQzU1pZZDNYaEZBUDgzd1dycmFicnVqa2xFV01qMUZUYkVxb2dMd05HTmNYRm9sajJtR1FOS0ZTdklZYlBPZVNVTzcrY2d6Qk9UWnJaUDdLQmhWUGM1c0Mra1BVMHlqVXpzamNHaWxkNEE3bER6TkFzOEFDZnROK28yckNkaU9zN2lpZUlLbGNqMmY1WWVrNzFBaDBWTjY5RG9rN2htZEFBcE41OGlaRUNtMll5MTJ6NjdnZXIwMlZyck00R01JQm1kd0hZN1A2VkZvOWdVU21hckFQUkVEQWk2aHNtaFlMTWdCR3JsTkNWbFNCZWY2bnhxUzViZHE5U1puak9FNW5YWE9nN3ZaUExPOVY4Zk1LbUVDNDFpTlErNEVSc3V5eml5YzJIS3A1UDVnOEQ5M2tRMGw0YXBFNkJSWDdYM0lsdXFBVnpSaVN0U05DUHhtTkR3b09Hc1ZJdkJRU3orS05sbEtOVFc0WDVidEZUZFJ2OE5uN3ZZQ1diWUtyd082dkRCVk5oaEZjT2FSZWNHVGFQRFdhYUdlaGN1TGhHVmEycDlxamtMNm8vR2d0Nkg0aWVoNGRTc0txWUxOOVQya1V0NmJ6NEhBejJmTXpXUW02djE1NXNmVlo5My9LYWxla21KNEZtVGN3MHNGN2phOVltZTFYWHRnN0VmVHZtQVJESEpXb1JBK05kUnZOWDljU3pUM0tyVkg1bDVMN0dGRmUzRGVRL0kyeVdWZjc4bmF3VXpNdlE4Y3JCYk9CcjVLdlNwZnM0ajhQVWxHVW1PVENQQ1c0a1FWcVpvWmcyN3NaVWN2U2lDMnpQdWhiYWttck8wMkk5cmQ1Qndmc1h1MTRGNXJyMnZnZnhscnF2R200bTVJYURWamhZYzJSTmNtMm01UzNxS0Z1eHZHNzFnd1BCckh5T2x1L1ZuaUJiZ0k1dDBOMUpHU3U5V0d0b2cvQlp1YW5NS2dCeHZUV2tkYW9nd2pIK2hTMGY1NU53U0NQaU43eHUra2V4bEpqZVMzUWxQSk01djh5eUx5Ti9pbGUvWFkwNUxrWlBrTU1NaFFYSUNzZXhwVXE4MDdsRDdZZ1o0dG1CVU5kQjBRTXBTbXA3L0JLRVAvMlpOcGI4Z2ZTMUNBdkZpUklLSThlT0hQVGFhenFXeUZKVjNWZVM1ZHk3bTZpSUZydkpOeTNmSkJMRHFzZ2F0YTVzcU50a3BZUFhoVXJPU1ZoWjg2cUJXTHVFajJYUWRyNXRZM0NhTWhjTmtMZ1FhcERGL1FpWDlucldVRm9zNHAxSVRtbFZIUTQ4MUlaVlhlYzBmWkszcWV4OUVCUkJ2QzhrV3pHaUxoYXc4dTh6UHpiU2E3QklTZHdxMFhIMEEybUJKYkQ3d2QrT2swSlNEcSt5SjU0V3ZpbzhvdFo5b0pqOTVhTDZPb3pYYzBEU1NnL1Uxa2s4LzVRR2sreThpcU15Z0RNOGpXNmJ1NUM5TFpLOXB6bU16d1RSeTRYZ0N3aE12VDZjblZqRWMvWkIvanJBbkZMQUlRaDBaQlZyU0U2L0ZBeWRXZ3FaNStoaW5xU0hlUXhaZW5iM0FhUWZwODdkMDlDTVI5OTNiOXlFTitSNnV3SjJEWFFhR0RmOXZFdHRrdGFJM2wwU29BaUxyWG9XTVo3c05WaGtlYXZpaUFLVUViM3V0Tm9UeWROcFhsMk0rNXY2V21aVXI2bzlJNEpxNk40VmJWenkwbjZNdVNPdmlWQ1N0OWtRTmRKdFhGTE82WGlacUVQbXd3bkVpS0NCd1AxZHE0WUNOeEVrMnh2Y0hUc3JUeWZlL2xObGd0dFlBWWduSHcvQXI5ODduSHVTeE03d21LRWdYcGQxTEdmYTA1elVEUm1BK21WQzFKM0tNN281a0o3WW1za21uTHNMWFZnSXNuaXFuVmFLNXRjZzcveVJVVy84VWpxWUErTlJBN1A3cnhYWkErU3h1dVIySGszS1JFbEFLTjdnRXlhV0JkZjhNd1dMOE9lQXo4RjJUNmJKU1JTVmhnc0ErRUVsQS9JQVRBZGpuWU1kTDZxWStpWDBBM1dhWEJlR2FQY0FUUGpsSkx2R21vUEFCdmluOEtXRDRGQzNFNVRISHF3VGhlUTYzSlRjSjVnbXpQWG5uNXBhSzAzSTNtb0cyMDYycWlQaWhQMmxxS2w1Y2lpNXhmRzhOVkl0QTVxamxSc0RNUGlralpqNjJCSXYxNU10RWNRZW44bnV1RXhJRmQzWXZkR2ZpRzg2dTk1MXRQSjRxdGM0STkrbzdZeU01Q21IOTJOQjlGc2lXNFpBN25scldFN3MvdlVJRjB3eDFmQ2dnOVhqU0dOYWI2eWNmalhyMHVmMnNiTkxJZEIyOERlMFdNU1NQa0M4QWJOVXJHV2VHNlhnR21lWVF2eC8yazdpNVNwbXBZRWk4bFROQThIbHB0bk8ycS9ZZGJlMGp0bkpPSGg2b0gyc2NmMXRScUF4YVZENDUvMTFDUlAxRzkySmo3d0xISzFKbnJqZWM1WG9MUU9hVHpvWnpxVkNZc3BiWUc4Tk5WOWM5cnJHQy9ZVThMc3Rzbks2dUlyV0x5UndGMzQ1WWV5cFI4dWQrU3Z4R0hTVUFyZW1lWmVNL2dJQ0FnSURtOWEzVitldWQxMi9COUlBQXd1aHcxcEIyZ2IwakFWTEhmVlcxaDdoSy96UEM5c3krYmxraE5YOWF3ZUNWeDlwRFFWcngxSFNFNlRWM2U5ejltUU9KYTkyb0ZlUndHT01JdHhXRm9ud0cvcldUTDdIUzQyQWdrMFQra0VTLzRiNzZTRVN0SnhxVXhwMnFKRTJSeEZiUmpSaEJtNlVtZVAxMWxwQk16c3VqWmgrcjVVVFkvWCsxa2tvWGpnZklWaVRMMUIrSFBnWmd1VFFRMkF6aGZBNzRyUFNLOEY2N2xYc1F5aUp1QXg4Vm44anVadXc4NXhwakZUOXQ5Z1Z3UU9vOTN3NE1RQkUwNmJKNHFWMXhnYkFKOGVidDZyaS92dGsreDNVY2FZRzRRTVdjVllXOEZHTjNtVVBWZTEvYWplK01qSmREWkJISU53dTkrdWdRdm04Z0g2N2d3YmdtVFVQQWJjOGpoSjdRbTNmMEZvWVZHSVZPeERJRndFN1hhTmg1NURxRk42RGhFaFc5NVBOWVl2Ri9OUnBSQXJraGNqcW1VT2ZzTW5kQWpzb2FWWGdLQjA5VW9KSmtGQ3kzdkdOdCsxUFBkZFVjWkVwKzJLQmp6NWUvZEx1Y3BCbWFmWlozL3gzbDZpY0tZZFhpc0NHQVEwejBHUER4Z2o5ZkpVcDZGMnBmQW9xdWIwM2ZrUzJGMXJBWUdPUzlxSTk0ZTVEL2RWQzQ3T1ptSDd6bEx0c1hjbGphc0FoWW1jSlNqOWw1bE9GN2VoVThPRnFJTDhkK1cxYjlqSVkxZWdmQ04zeGNFL2xJRHV6L1dXMjNIMlY3cWZLZk9IQmpVUjQ3SzBpN3B5bGxaU0cwRjY4ZlkyVzg5bHgrSnc4dU9YeFBBV1VhdzF0S2tTOXlrcHU1bWNXQlNJV3RWa015eXlrODFCRmdjelB5Ui9pUmM5aEcwUm9tTUNsNWZ4SjdLWm1WeVJodlJLUVB0RlpFZDdXZW84VjVUa0E2WUxlTDVYK3dUbUg1QzNCQjVsWmtLOWpZNXJVb1VKdTJ1aTBLbE8vcVFrUjhBVlVUa3NHV3hwN0djbUo1YUhvdnErZkkzWFBGZWpRK1JYZDYvdG5xY2JqR3FLcFkzcVdaVXFsSzlIcjFnOHowRWhhRjZEdnpnUXUxVTNQNkhGanlUMS9OSWZReEhEcjdiS0tNSWlld2hHY0J5ZUlUUmxUZ0NtN3FTd3pSRlV3VVovN1RpOWJiNmlnd1BNc3RGTFNCaE9HNytDUExSdkNvKzZDaWhxeDMrTk1tNE1QZmRPWmRBZFNscUJZWFovekxpcTRMcis0QmhuUHlKL2pMbWVBOW1waVVmcEh1UXZrU1ZNT2tEcUx1TmlXbkFURTZZelFlbVZYY040aGpjTEdkTTZ2dWxYMkFIOEtNWFVra1VBZnlta204OEpES0FJUGZrangrWGM4NFpCbmFMNVhFcFRNY0h1NjdCV1NzTnhxUUoySHRnNjJPWlhHRG9rZ29wYy8zWWtIa2pFcVdsUHNIZ2JNcWJPMkdndXY1STNJdE9lRHhnUWxqQ1hPS1BIOGp4Q3o5OVFKeFMrTllac20vRksyeTdtZksrVzgzT3FoaUl1U25KS3AwK1ZjZlNSbGZhVTEwZ1liVDFGUjFjZ0Fja2Jha1UvNTl2WGlaVEZmYWRZaGo4L0xBY2RuS1JramJmM2ZkME5XdGlEZU5GeVBSbXY4dVJQOWR5clo3RjJjQ05hVlVnekE5SGdxc2RKRmU0MW1wT01tbWtBUGhOdzdEeGpCZUFQc0p6SWxkUUdVeEtPbmxiNXNtcHdnSWFabVRVcmtMQ2tnRmZaMkNZVEVHWmdTUkhLa2Z3UEYxYnhLQzN0YU8wNWNrM1lEaTZLNTVHQjNYT3ZRYU5wcFJmTEtwMWRmdk44bXRwQVZvMnV4VFhIZk1UbEJJam82MWk4ZUtzVlplc3BOTE1WR3NXekR6YzkxUVVQaFdCamo0V0JRUEVWMjB0Zk9XMFZTS1ZNYWNwUGhmYXpQM0UyK3NGNGh0WFdZaG8yZjR4VDdobjJYUXJEU0NWOHVrUktMa0I1eXAxQ0NYWS9ZREY2K3FzVXYrOEhRcFZiV0dKaDRWWmh0TmdPZEduSlJvZCs3dFNkUDhyNUErRzhDWUMrME5mNURLZ1hUYXZsVGVobkQvUmZ3bzE2NHdsK2toSENydWxtclRpcVFEbjZDMjZlUlFMcFp4aUROY3dNYTI0Y05hN2dDRlg3ektGOEFyaWV6MFkrdjJMOTQ5RWN6emU2aVNyMEo1ZkpOWUdOY3habGF0bWpWNU44ODVlSllSM1VDcG45Y0J5ZFRlVmFDTEVEUHduUFRJQkk3MHptNmUvSzdVOHQ2cWxuU0kvUk9oL1RJNWZWdXhIZ3RQd2F1RkIwdGZyY1RYdVFyOTdNQmFsT3NBaTNpT3RZcERsTEg3TmtvQ01rdlp2NWgwaDNmRjExZDBNQk4yUkRSNlQ0VjJqNUhlaC9IM0lDOURVSWZNRVBGV0lyTlRHa1A0RzYzc0oxVEdwVEplYWZSbFZxZnowMHVDMGdobzFQMUFjWmwzbzlIVzl5NUFsbWcvMytmb25pRzZqS3gyZ3oycHRGNyt4NTQ3Q21qTENLOUhZb0JVckttM0ZDbkdkSXg1aTBURmJKWndXNVBvVlJWWjEzMUJjYVhCeWdzNTFTZjdaYytraUVLL0tBYUNUbmxGQVRwU0FkVGVVM2tFQ3JmOVNXU0M3VStrKy84d3o4eEpNdWt0c052ZC9rcERTN3Vtam9uYStHT0VmMDZJQWs3b015K0N2R29KQitacWttZVphcGNzalA4RlRWclRDbXdpeFVNZ3BPVTY4bkVhWkRMUWJ6cUhRc1dqWFgxQmVIV2N6NE5qTFFHY25SQ1lPbkhwdDA0aVZ6dGNWbW0wNlRJa1hPYmhVdDhFN1lHWExSYjBJd1NFQnpvMGlZQTRsbm1lM2M5aXA1djVGb3BjQU9zZldpL2s3OUplN3cyWFI4NEQ2eEZhUUM0U0Qwb3kvQy9DSFNvV0l3a3JBSnY5b3NSZHBwRzJoTHJkZWVWRmVjYzVxZ3h2Q3NCWTlKVStraElUMnJ6d2Nlc0NRNnBRWlZSbnpqbzY4QW43bE52Sit4UHpWV2Z4Qi9qMk1veERtcHFYL3cxN1VkZ3MyREk1NmRUR1pHeE1HcWZ3eDZDckhBR3lsU01MY0k5V2ZFMm9xWVlaYTZaSVlHd0U1dFV4UlByV3F6NFJQNmtoT0ZnTDR1eDBiSEg0d3F2dEVUMnZMWm1IUWlsUXhUQ2pGVHdnbXkrWW9qNlJuUmp6a2xhWXMwcE5PMkQ4aU1MN3ZaZ0doZkY2UjFMVG5Wd0N1eFdKN1NGem1HVUhXVWNQZTRpbzBHbG9JUVhFNmp6RW1uNHpDTW9va09VaU5BaEs1NWJoaXpZN3BaY2FGUmFYRjJqV0xFMlFqZGRDZzhuMHRWQSt2cDc3OTBOazI1QWZOUEVyLzFJc2ZGbEdPV2l4SWxCM0NKVXgzSjh1ZFNkR2JycUJGd2Faa29xMnVteXNWd3o1bW9IaTRBcWlQcHRMM1FiN1JNc2ZkK1FwSUoydUxDY1pPNUNDeUY3NHBrTm91S2daTU1uaXdOdTRnRFhMZ05aSS91Wnc3bmpkdUo5YjhqcVlvSktaTFRQMUtNMU04UjhyS1NkUUM4Qk9FLzV3a3h1RXJKWUpUa0lmejJsVUI0alM4SXBzY3FtRVVqMjhPWjlDVldiNVJGUVJRY1lHTHk5YUtML1BoRXl3TCtZMDB1a2g1UDlPc0J2NUxrVnRpSGxRN2t6UnhSQ1VWbjNldW8wVW0xVUJXbTFqOFJsem5UNmFHK3VlcDZvSTAxOWRGRVdyNnNBRjYwZFVvK0hGS3loSUlDVU5zWlg5bnBtKzJIQkJoN0FVQ0pCejBvU0J0ZjQ4NW12R2FMeG53YlUwNHNLbTNRSmNqaUFQbU1BSXgwRE82ZUEzalNibVYybEQrekkzTjMxbjRDWXl2VGtpRTdpMEFwT01LMnJDZlpQQ1JKbHN1Tm5UdEtzRzBuS3F1cEs3ck9mZzlSYm5mN25lQUt2T01id3FCRkcvRExLRnBFMUlBakN2M0JaYUxodlgxQm5tQ0p1WnIzdjBZZFo3dDR6eE9oNERvZzhtQUJuL1I3bnM1eVlLNkJpRGRzWFJSeG80dnIrL21LVWs0dmJhWmRLK3lNaWwyaGVSWHBSUkV0N1pxRnZUN0lZQU9md0R0RTAyb3dWUnprRWZyWEx0OWMzQUg2eWdrU3hRYzA1T3g2RDZkWTRRaU1zYVRvaVJKenNZdEs4UlVLMXBldU1wWFBMUSs1dFhTRjNUZjl4YjlPdTFKS1p3SmMyOTVKdVc5VC9ML0hweDY3VENpTkZVdzBrd1VjN0tSRExLT0ZxcXk2aFNDaTIzUk9ka1dsWnF2eWJUcTRVTmxFeDRaZW9HUnlTVmMyS3M4QmVZTytTRUE4Yk9uVFliOFVIVmZDa0wxTUNyVTJxS2s4S2dNVHBqZTc1QlBlVDB6M3dlWm0wSjRVdXFZVW9ieG1QWFI4QVdjTWQ5Qkh3djVSNFhxWkFYVXVQcmF1R2k5SEo5NDF6M0xMN2Q2c3NDMUZ6QlZjaWxlUGxoNU0zZGEySnFCQzBleXE2YW1aaGYrUzF1alhGbFBBb0hXNS9mSFVmZTU4RTkxekxSRkwrUUNKeVlpem5pVi9UMGhqclN2eGZqeFZ1a2lFck5Bc1JPbGhTNFJISE9Bc3c1QXA4emxjeWdtUnIvZlhFN1pxLzROL3lOV2l0NDZCWmlrZzZkdlFIUnd5d1VhbHVNajRXMUZPMDBzYVgzZzBkVHNBLzVFdzMyN2xjZi9yTWdGRXZ2Z0VXQWduY2d1YTMrb2Jhdmp0QnZpc3MyV3dRL0NKZ0kxQnV3VkN1ZEFGeldBekJFSjE1T2hscHpzNVpjQXlBZVNVVnA1dWVKZ2N0RjhSN3MxMW10QXU1TWQwczVhNy9qWHl5UURIREhYandUV3MrZFRJWm9yRDJ4bDkxZWdORFN0bVhUd3BYTzB3M0ZGdytEeUprQUlUWFpKU1dxL3JSOHFISlhWUmdsdmhONWtiK0ZjRGIydW4zTk13bk5VQityektYc1I2R2FqRzIxVG9SWmw3TTE3RVNYWCtuL0RWWklLREZMa0RDekRCelFJOHpIUmEyVHNjczZ5SmE0MTRreGRsSXZ2TjJsQkhGRC9ubmlpZDNTN3BPQVdtNzltdzFyWE1yOXJIbFZna05zSDAxOURFczdBcjlpTEpjZkFZWWRjdzFxOHlQWldlTGFGRUJaNkJoVG9MZmpueGhtUmYzeS9QSFdsRnNnMVZMNTdBV21UYkdBdUdmTGxtUTZ1ZHpHRm1US1FLZER4S1N4SlV5MU1mTllycC9DNVdTMmQ2Vm1wUkxGekNKV0hUMmFZMUFRWi9RS2d0azhvVXN4Qk9PMWFUTmZlTEhnc1UvaGorNjJVeW5Ya2tJcTFvQU9sdkJTZmNJd0VEeEc1ZFhXVTlNZzRhbW5BOHlXN1c2NnNjZDZNc2Rwd01PbEoxM0ZBTDlJQ0xtZ095RnIxNDhLdlJiNDRnUGpWZHRFbzF6M0FOSTIveDFpdzBUSVJmTVB1d05tM1NjSXFyZmZ6TXRrWE5GVzBpODRpdnJoSFNsYkhQR3BjT2x3TEd0elRCblpWTzdlYThvYkd5N0NXM1MrZXJsVVVBOUlkcVcvV2l5UnR3U0JrdWx2ckY1aitaMVJoNDBlOWROUkR3TmM1TTJacXgwRUFwWktBTE1laEZwdi9IVFlJck1RWkkzK1JaWGR1aWsrVFU2TzJ4QjZZMjJ0TWJjMVZBSEZMbGlGTUMvcVAwZ1VUY2t1b2FCUDg2eEN6NEdDMURTbGlPcXlZcG9BcFl6K2VVNXdUamRyNWdpOWM2clVBZDczRGZZMjZRZ09QUk5xM0QxQ2NCcXVraVcyNTNUL00rU2RvYzlTZ3JOOWg3aVRldUhGZW9FNE91NW1GRkRXbVNqTDR3cHZYRklieEY0dTRubm9IZWxadHJhR04yTnAwaFR3eTRnbWl2RHpEc1lPWjVkYzlpVVNkRGY5NnowQXdudktoQU9Zb0xxRjlONmY0anRmWUIrVEJhTmhreGRXeUxMbXFwdVNJOXVzazBocGVJQ1pCK05xZGNuZ3kvOWdPUTBWR3B0d240bERtSUNEb0pQQVJyZnpERHRybjVvQUR6Zm5OMURjOGRkRHA4czlHN25YK3JEVmh0OGgySEtNajVDbVhrSXJQTjZqNlA2VlRLOWNvRVE2cStoNjRxWDNzNFZnNjVhc1dZQ2pEZmF5VHVrbWc0Ui9GTytIbi9ONW9CVjVPVkROWkxuTWZMcElhYitoVVlNRzdZMXgwbXkrSFVxRWRKYWt2WUhuUXcxeUxHbU80R3VSSlB1c0oyZDFwOWNYNnVkYi9Jc2I5Vk9QWWgybVVGNmt4eC9uQ0kwRncvOGJMVFVIMFZDWEJkT2E4c3pTbUwrVjhVVGlnWkx2TXBkeUY4L1FVUXFQeEhWdTQyM0QxZTg2em5IRlpDYTRtS3FsRXhHOWpHOXQvTEpaNGtHOFZxZXNGT05iVmVlNko3TjU0NmRnYzA5S1YyVnVhNFl2SnlBbXpDRHZaU2VSZ0owTVhwdVZtdXdDL2xhejk4WFo5Y0JkcFZESTN5a241TnJIZE9yZlFhSU5nWGZtMm9DdGcvU08xK2ZXVHJzckpJTFc5dzQwRFl1WnUrQWwvdk5sbGR3L1EzQVRidGV0SXpHWnAxSzVrVzY3ZEhDc3kvVGpLMUFLbDZTY2tKQUpXb0pVbTJLd2swenovdGdCSDBsaW1nSUh4dzlqNTZQZ0lDQ0EwZkhWOENGa2pMVCtPWXl4R2lxRlBKeVdKVXpaYmtmemJCVHdtTXBvTTRqRlhZUXA1UHBZZ3dHRFVJM1htT29uU3ZLd2hneUxRMmxSMTQ1OVdwTnJJcVpNcWFjQ29EczQwT0d5Zk9jSkJRWDgwQlBWWHBhRVM3M1lvTUgwaEViRm96a0QveTlyejFzVDgvVDIybVlKRlJ3dXR0WWxPcjNHTmx6cnFWWlRFSDF1SGx2MXhjM0p1cmxDbWZwT0J6K2dHMEJjWlArSEpRYktIYkdKdGNhUXFxbEtUR0w1WmUyMnY1Z3FrMDN4cFU0SitZK2p0ZjJMNi9yTWorc3N2K3hMLzFaVHI5anZmc3NjUHIwNmZ0dEcvdGVmOXUzbXZ2OHEwT1RlU1RsaDBQeUlCV1BxZ2YweWRwUDIyOWd1NkluS2Nzc25mT0dkcnQvSE1DMUtZdjRnRmxTTUd4eFdCYlZqOEE1b1Y3MVdUM21Zb0dBYXBpTUJUMkVJYnVuc2RScXdYVEk5aHFpWkhVK3FYUk5WbGtkTkhwejRUdjNNREUxWmlBbFVsbnJ2NzNOS1QxQ0RYZVpRbWdoOUhwYU1GWmFEbURxV1cxeVdIczh1MVVkTmFkc25xOWdNQW10aVBZRVU5eldZQ3pZVVc3NGpwTnF2Qk9DTXA2Tnh2WFVFU3k2YlhZQys3eG9DaEY5ZHkrNURIWlVKcG91YThxT2hJTnVaRE5wbG5PUExGT0hQQmpBSFE3TlJEbVhPek15blNBQjhtY0dBM0Q2WFhKOW1MNXoyZS9KSVZVanVEOTB5K3pEWTA3WVVSaHp6UitwcFQycHMwN0U5ditzWndZMHR1MWF1UkZuUE5NWHlKQWZRU1ZmZXVNOWRJd3dwVTRRL3dXUUIrbEhRWHVrUlFXQ0MxQ3VjaDJZZitldkc1a2RnN0tVS09ySDdRWU85VG5hSHoyQTgwQVBZNVhvTllKb25xNlc3eHc1bFFOWUM2aWFZS3ZMYU0rR0YwVExCa2NBQURVeVNlS2hwZm0xY0VROTY4MkZqRHV0cGNDZWVUTGVKZHpwYjA0US8rVHBKVlpwenU4aVRUTWdjdFF0WGMwdmJSaDhCSytOa1RuUVMrZ1RwMW9UVlZDT1lmaXdEU1kwZlV1UW9CcDgrMmowMzVQQmFsRjZVRlJSdjdpV0hvME1pbEYxSjZlZmY0VEtOOWhYWWd6WGJlMXdjRkZnMUM3WUtqby9DRGVEL2dna3l5dm51Z1ZXQWlSM2lCa083cWlXVzJ3SVMyNCt6a1NoWVBPZGl1ZUlQMThZK0FoeXNXZVgzTVlNRXBHVTlVS2Q5YitEb0FwNFNtQ09janUvQjBpN2NFTWhFSUh5QXc1VTcydVEzV3N3cktVSkRRYisyTnE1WXlOWVd6OWlDUGsyVG95Tkg4U2hSM09TeVd4VTJEL1NMblA5c0FtMktKeDZzTy85c1B3MHp3MVc1cXhES3NxbXlwRERObDhCcUY1UUNKSUdhM2tYNVJRbzVabVJqQzlaL2VPK2t6TVNGZEZQYStwVGE5eE1valRiUVU2Rll5eHZDSHFTbWsxQ3J1MmE0RTI0dkZBd243bS9lSTNBRjVmRDZxUllQeW9DRDc2aXhDUnlNNTZZYU0xdU00RTdNU2Z0QXZZM1dPWU9NcHVZajkwYlNUMFpja0Y4MCtFOTcxVDFVTGlrK2s1VTdGV2I2V3J6TTlyOFd5czRIZXlLbk9uMmV5eklWcWlFb250d3RFaUZJWWtiWkJhcWgwOC8yMEZXUTVzd2N5SlBxMitycVZkYjlZdzBlUTVRZlQ0Z2ZacG9OTUN4N3NKR1F6Z0N5cTBnUUhsdDhmdkwxRVNiY3RIeFFKSlFhT3AzdGRtayt2Ty9MVFpuT0xoSkY2L0RCWDU0QWRRdzhPN2dmR2lhUklIWVZSUExZN00xekxlTUZNWGlSVExiWWZBcVkvblJkQ2QrYjloZ2VKUWpLanBOcU4wY1p4alhia0JHYlJNMjNLWUc4cHo1NStlOWhWUVhiRm90QWZzZzF0emR0SnE5Sk9lV0lsVWhBMUx3R3JJQ3BiUjJtZ2huR1FqcmpUUGFQNEErcXlJR3NyWVB5VnFGYXdZUURnWGpvOU5EMVpIK0xNYXR1dEhUL1VrVFlUcGpvNWhSSy9ZNUhGTk1EaDBsRmFhdU9JMUxtS3hwcGNnbTdSQ2sreEdUM0FISkJhZTkrcXd4aTl6R2k2djQyc2FmSlBKckNFSmQvQ3FqcFpHb2hRR0U0VE15clBzczMxOG0ycnRHS3I1RVJLWTNrbENBNFhQYXFZYWhZRFExWTk4YStWSFFZK3hESEdWSm5PRkE0eDhKWlRVZ2ZkYWJtblY2Y0Y1cDF0VWVKYktRRlViQ3R6WmZiVlJUbzhjZmkrdGNQWGNsbXhmQlpua05BdFBDa2M0aWN2UWRQdytxTVlqQUkvWjFocjB4a3hhbW5MOXQwcGt3U0dWeWRsVVJvZlZneUF1YkdHUXdSYmYyemdBZFhWZDlQdG8yTGlXdnZkWWo5OHVLcmd0dzZkTERuZU5zWitUaWs1a08yTVJRNlgwV2FWYzJVYk9kSnhiTDVMWmJzeHVSa1VHbnQraWtJOWhmVFR2UEFoVjZCdFNPMTlOL3FXNGpNbjc1SzBJbjJSVG1HaUtxb05aSG1kNzAzVVArQzRLbG5NKzlQYm5HejhvY3loSUtCS21HTlJqQUVUa0dUWEluYW9sNXdlb3F3U3AxTThGdnpHNEs0NDRSRjkyaUxramlBdW5VZGxveGNxci9RU25nZ1VPTlBrTFZMRU5nR2NXY1ZkTjhSS3BraElMVDd3WVZ6M1lMRFVZUVNRcnNWRmtFMVd2NTFFbjJmU1BSS2dqUWtwMkxsSTVHT3B6WUNhUDZUeWp6ZmxtcFQrNGppVEh2eDY1WFpCS0FmOTZtUDZtSGdVclNQcVIvQzdWYWZIK2NxVlRLQUhCNUZiWTlpMUJzMGN1UG1uS3o2NVBUSzRhbVpROE03RFVKVURSTUl6K0JUWTcrMzVMbDRLZ3FtQTZITXBBejBsM2NrQUlmcVBINGYwRnViWHRIMnVCek1pYkFqWnM2cXZzTno1dUc0V0UzWitUQm1QR3lRekdlSTcyRysreWkvYzI2bHNsRExmRWYzQlZrckNvQSsyMlBRZ2pZNjk5SHRxamxYZlZXa0lhbng5Rms5cEFGaE0yZmVoZkkxZGFla08xWXIvaXZzbWlNTW8vMU5jMUJqMVFud0Fwa0NSbTF1NUtUNTFWa2RSSm5Sd2lidHZ6VzZkcmx6M2k5YUJHNFJKdk9abzM2am9GUXEwUlNFLzFCSkE2WWwxeTZPelVwMmtMZ3JNcGxoQUIyN3BsOXlsU0hZejY4RkZZTlI1cUFGR25ja2VVM2FIKzJ1U1FNaE5qbDdDMFU3RUJjMnBoL2JsVkEydXpRWElXTzlzWFl2c2toa2FMbUs2dXp6eDRTa3ZQeFdPRUR0dnNnZU9wZVpuU3RoMXRvZ2xVOTlqR2JydEQyaStuakUrK2FucVRRVjNQZGZzRkpmeU5UZjhLVWUwQUd6Tm9EWnJxeGdVTHNINUNyZVNIdFJpc1QwbW5VVWEyeHJiQlh5QVE4LzA0R0htOGZ5S3E3Tnl1OW1ySm1mQ1NTUWtST3kyZXdQYVR4STlZbVNBeHpiZGJ4WnpTN3BmWWRvcG8vUTd3LzkwcWwwWjJhVGZOZTYzU1BsV1loNFBidnJkcVo2aUkvNFdlbXcybVBCZjZBNXVKMWZCbFd0RUhLUk9wR0VwT0dFcGE1NW9OL2pFTnM1UXlzU01UZTRwKzZVakRHMjU2YjduTWV2cEg3V1M5Wi9XMzFzYzM2RzhjalVEUjJ4QnNNaCtJbHE2WmdENEE5ODR2OW9kenRkQ0Q5MkFFSXpxdDF1SUN3UU52YkoxczAwSm1ZUzJJT2xzckd0NTN6amhvMmF3eE1FL0RzWVJHMGpYVWcvVGNCaDZROHEyOU9RRWlTcFU1SUtkVmxubWJtSGNid2xFbFRxa0wydVN3d2UyTDNuOU4wT2xDNVhibjg4aGpNdWUyODd2Rmh3L2MzL2VwdzlFZkl4Q2kxa3RlOXBvQlpBZG9MRFJGdW5OajdXWE5rTHZhdFVKV0xWNkxpR3Q4bFJxZjhyTDNCbm1LNS9Fb2RwS3NOOVg4cXFUSUtGVWtDMXhoVmlZUDl4OVR4OHo3Z25tSWtzcDJyVnNWNkxrT2cxaUJFNVdUT1Z5aEhsM3hMKzFpVG5jWXJ2d0xyQXBjclVPLzljYXFyMWIwME9aTm9nOWpWRGs1MG80TDNBNi85dmV1c2h3TlorMWo0RzZPQll6WUZRMU52U2pOWVltNk81OGNZQWluV2crZkJKRm80N1NDcTJyT0hRVGphZTJTSTUwYXBNQkNuZGd6bm1mZGE3ZWdOMzdBUWRqL0RYaFQwakRrYnNkRlBYcm9Md2xCaGRYQlpDeGl1UHdSaDJqT1lJdUtlc3ZNR24xZ3pCUmdzL0VZUWxSVm5pRHhUdnowM3ZvMStzK0V5dCs5cWdUS25kME5Yd25MME1JRGVONUh4QlJVYkhaNExUdFZnTmg1bTIvZUtTZmJEbXhVQjRtUDcxM0dyTFlTL2tQVGVhTndUQ1IzbFpPQXhvSGp2YVRZZjBjSjVUVHpHTi8xZEVONTJjcFJtemkrMHpEME5ZZkFNZzdhYXM2ZnR3aXJKMytuYXJaTEJtSTBjdEJUamsxMDBmR052SmFKVGVtZmx4QVZsOUptdUpzZjNVL2h5UStXekY0UjFmczFDb0lkc1o1QnkwNGlyOUNXbEVsYlBuSERkRGJTTnZ5YXBTUnM5ZWVRMHFDMGM5QjIrazJTbmhEMDVzS2tiYTlsM1pLcWxuNWZYb3djWVFPL0JmVDZxUE4xbjREWkdvMHFabzFWM01GRXVZM0g4cXpJNmJwNTFnZ0JXSVJNYzdDbmRxb2tVVDgyUkxrL3YxOEVYakR2Rkp5N1h2NGVLS0I2MndvQUdYY0wzRzdhTnpIMTh1L3lGaVVKd1NUWGwrWXplbitQdDNXKzRHNWV0ZVd1NldrUXNaUGpXVDhVVFA5aDJkSGMvWVY4bldHRko2TWhvTytnKzJlREgrMmRzcWhCelY4UmZ1M1A3R3pEWnNia0tjNXBhaGFWWGVhTWRiYWJLS2dWZUNMNWxWWDVpWnJGRm4rZ1RQOVVsSm5lTi96eUJ5cHl0UE1MbmY5ajEreWl4ZXN0R2tvaVB0cUhWRm9TanRjNU5mZjRwR2JKQU5IUGo5akNlYTNkQ0FJMG10OHl2WXM3OFUzZEFteWphQmFldmhOb0tod0ZCRVovcklocjk2cktuVHUzYjZoeVJPR2ZqOHkzK3pQOXE0M25TSmhYR3RVRmoyOElvOVB2Rlk3SHIwVFo1SHRaUlpzY0paMEZ1RW1FQ2V0NGpiZENCUGhUd1ZMZjBFRUN3RGgvRlZ5TnNoNUxnclRZa0xINHBkT1NycHVEdmYzZTZqSkYxQjFSb3BUdlFoOHB3ci9qOElHa1lOQXUrYTlrbEw0cCtacmxZeEZjQURCWmZIOHFDVDVhNWZTOVJvZHdvUktwYlJXaDZrTGUwZWtGYytjakRmWUhRSEhJOEpaWGtvN053VmJ1M0RxN1Y3WXFLWnJ5Yk9BWjIwcUNpMFJlMVJBRkQ0UUU0VmJpSlhyNnRUVkRQY2UxdWwzbHErZHdsbEFnV0krVFZJTnNpOENtTzh1M2djTHNGOTZiYVJEVHpvVkgrM05MYXFCeUZrNk1LMFJRcHBFQUMwSmM2QjEvenEzamg4MmZrcU5Obm53NlFuSERVMUpYTGtzVmxwNUgyME8xN0RHUXlwWFRUaWQ2dWVEM01vQUJmaXJIMVlzNzA2VmFzUTNwNlNJemthbVcyU1hiN2J3MGIzTCs4YmJaV3EwUEJYZ1VyeWJ0c0VCMnlUZnZFK2lVclREK1hienN6L1lvODBtRDIrY2luMEJDSU8vWStERjU2QUlSSk5EUG5NSWNXQ3NvdTRkMWhYekVad3J2aVdzbXUvcjdkRVBWcWpwcnoxQVd1R2M1WGdqdmcxVnZLdVZ0cUtsMWlvdnZtcEREL25NajdCb2JHbTNXUmpHR1VORkF4UEJkM3BuY0hwbWdHaGVuWHQ5STg5aUxtZm5hTEhHdUJsT0lWK05RSHZQMXYzcDdGY3lNUkNnMW1Nb1NpbDRYQ3d0VU5zSmxoa0pTR202L0xZeFBCT3VaQkdOYTRDUXZDUUIwVmhGZVorK1NSQXBLUlRwMGxYT0dwU0NIeUsyNXB1RUxrUzhweURuWmlIeVlLL2x2MzR3MFhzeUgzc0xUVENsRTZLOUxOa3I1anoyRjRNRUJuRTVkZDBKMDhBUkxaU1l4VXZqRXpCUmFuaEFHQXMyckp1dndBWkdzRkNJaXNsU3U2eWp5Uks1WmNuVWxHakR1MG1nMHlTYVRwYTYwaWJBbDlkYmFVci9wbGNMUUFxYTJkUXlnWndaSXZ1bGp6MmptTnV2Wm9paXYxMXRDL09xY3RyWTkrT3FURDVPakNQbGxSUy8xNkZzQXRhTHp4ZXhnMXdheU91U1ptdFQ1VlVYM05Rb3hwTEdoem5CL1plYk1QbXd4eVltS0dLZVRnc1U3cnNWY3RaU2JDNHVTUWJVdXIreG5tT2ZvcFpDK1BpY3c3UFBUOE9xdk4yaGJ6dWUyU2VNZTJZclJNdXZlcHVtck4rMXVTcU1xdU5qb1VWWW1NUTE2cGR2bEdKS05XNHArSnUwYTVLNGtsbzJJVDFCL0VqQ0hIQUpkZUZQUUsrUUtIZHhORkt4ZVNzZ2o5bDJwOWg4YTlybXRFckRTOGs4bFlnQ0lPRVk1a3N5Tld0dTlxZHR0U1BFM1ArZ0I3cGt4VlpkclhWUWkxYlpLOHhMbmNsSUd6WXMwU1h1U1M4YnNWd1FzVGwrZk95QU1sdnhvaURxN1JpTXkvVmJBejRWSU9sclpqSTgvdjhhaGNIdGVVL0cxTDM2bDNoVEFJV1U4N0ZKdnd5bitWSDRJWkZRaGtYeDhiKzdleW52enpNNmZWWHRFVkVNVHBWdVloZlhIR3kyY2RxWXpRZm9Ca0ZwdjJ3a0JvaXl5SDBCbFJaNFkrNVJSakY1K1V5dk8xWGJLVFFwTVFRV095ckFTQmxZUEx6cHUzVHl6VForT2NCelN6SUllRGV3YWthRW1BVVVlRktvUk9HeTkxWE5uVkgvc1ROWWFBazZhcHlhdEdMeE9uSlNBQXBkcDk5V0RhNWhNV2JIMVMxaEY1RXVUcXBUSmR4dmY2c09BU0QyWnAwWlUxV0N1OE9XV3JxajZDOHBybUtlSjdtMHlzYzhtRCtsL01PRjRiUDVBYXFkV2pRL3d2VnZtczlySXBkalpkSTJQaThQTW9ERitmdUNkTnBZTXdCT3pwcHcrVXU3bE9nWXhoYnFZdWVDTHFvMHMwQ0pKZlEzTmRpWmxqRVBzNStJSnZ6WWxKaExCWHh0RTJpeFI1V2o2KzBuWWkyZnA1Njlzc1NJVGtkYnJlMjdLVXAxZjhWMkhRU1BhOFhvdkF6NWZJL3FpVHUwNXNRNWVGeHRUY3JHY2NFcFpMdWNRc2kxN1BlL3lXUE5pQktFZG05R25LMlRjbGRVWnBUM2VBZTkvSXUwNVJ6eHJab2NuV0J2a3NIQWNWTGZUalB4Y3c3TGp2YjNIaXJxNk90YURUTkhGaHZRdS9RWHBVNUhXcnM2eWhGdklPbTdCYjZ6dXdUNHpsNlZBNk0xcGxJTkNiU0hxT0lVTHNaKzNHWVFDbmdCWDYyLzFiS2xGVmJyY2ZHNlcvRlZ5cnMrOG1FbExQa2VsdnJTaGYvSHJSejVzbS80aU9SMi9wWm9ic0F2aGRHL0JtZnVPcUd2LzNHVVdSR3lOMURSb2VKbHR4NzFaWWplVnBycUhvcm02ZzJjeG5hT2lyZWkrZDVpLzRzaHhja1ZDc2RIbHF6OW5ScEgrck5jNFJ2RUIxSXZnbHE3MTRCMmZ0YmFzOGdFNjF6c2tGL0MwL3YzRFZyNWVFYXZudGhxdDZxUnIvRlE0M3FXOTRTMUttMzRUZ0hBSm1YZCthZmFISWdqbmRvNFA2S3h2SjhxWlVGeUJ1ZUM0MlNQalNScnlKVGZpS2NOZG80bXhYVS94WWxFSlBodXB5YUhmdDdFQXI2eXR6WEw2Q3Erd21qaXNlZVJnK3dWWW5UN1Y5Y0QrRld6ZmU5VkpHNk00djd5a01TeUZGanRVT3ZZYysxTEc4YUMzbkNyeUxrYnprUyt6a0JnVEoyUEtMaklIb1JrVkhtWVlBSzIxUTkyTkpORHZ5SXUzWGQybzM0bVpjKzgwRHNBdVBwOVkwNGI3TkFWSkg1OGt1TkJja1FZaVBKLzRCNE1YMm9RMlRGT3RHMnVYd2t2Vko3ai94dis1RnJMd0ZTZE4rU1Q0OGlodE9yTzgweHVBUDJpc2pJUkwyZUg5VFZoTGYyZnVIVHIrb3ZKV3BHOGphc0ltbWFQZXpnUzAxVUMzUGJQOXlPNnFqNXBKc2hwTFFUUjE3ckNmNEtrOVNmSTRUckYwcWVKN2hxaUJKaDhUTWRlOVUzQnc4bFhVU2JBOWN0SlhhbVR6bFpxL01aQWRta1pXRTd6MHVzNFNWenhXTHJPd0h4Yk5kbXBhYncxVTBQYThLVzRtV1N4MUJCd2pONE5rRXhvSGhlRzJxeGJ6R0FaU3J2QTlrM1dCTWNKZWxTemc4dUV6UE1ocGRhWTBRQnpoMGE0UG1JZncvYnpOTWhTWEdZNk1oSndkdmFOQWgydzdwL2hEenpoU0JudTd1aVJHWkF0dFZRWjNNbUZzVmN3NFQwMG1lTGNBbzl3NnN2Tzl6b01nNnQwSVVsY09oZGlwOVE5T0w3bEFlUXhZZml1cDVQSUI3YW0ycWc2KytYL2MvZElVUzMvYWxxSUpHZjJVUlE2dDdjayt5NjJ4eXRCQ0kycDRibmlGMkp5a3RnQ3h2WGtMTHRPaThwSnpzdldZZzNSSDJvM213S08xUWF3d29kSjZiL2ZiRW9ieTJpOXZzTlUyVFZmYlBDM1k0TS9EUzkySWx3M2VtUHdmUlpYQ2NGeXN5cEZtdU1mRVJKSmdNS3F5KzVLNjBrZWl5QmdPZkx1ZXAxOFM0bFNHY3VOZDk5VjQxTkFGeW43SXQzYzloUXhNTWxvOXBLdzN6MmZEVURTMU5xeWR3WU9aWGxJN1hIUTUrNDlwYTAyOTVGSUtDYi9rbDRJSERmMkpBWFFQMUxaWmtmdWdLTStYVmhNd2FwWVRjM2dtdzJ6OCt4RU11SytpcXdKZkdBUUxPYmZaQ0VTamI4Y3JpVTBmMUhHQlRneGVuL1g3aWFFcFRKNWVPUWF4NWo3Z2FKZUIrREdzTFNzNWhRalo4cWZKRXd0dE94d281aTdmVG1rbUxETEFiR1R4dkJlbWxUUENSR0Y4VzZybDJ4aE90YVhocmRWTGFrdHR5NVJ4UTc0SVpHd1dQSDBpTnRBQlNFNVF5R3JZZzZ4QjYyQ1JOeWtXTSt3RndPclo2UExaOHA4YkYydk5NRzV1TGZuT2p2ejhoTENvditOaUhVUFlGTkpzeWV3YmoxOHNpaUNnbC9uTmlHaXAxZUtqN1BtOW8xTGw3MEsxaU00Y28yS0JSWVdZOXpmSzcwYks4WGkzTlJlMEt0WXpaNlU4YUw5L2R3T2phY2c4M2VGdFFHZUJLYXc1d21UcjBUR0Y2Nzdma0c0L3hzMi9zRklrZy91QkUrbE15aWUyejdkZnpBdzF5Nyt6Vm0vQVpTRkNzTUh4dUVTbjdudFNXMzg0L093Z1FsdVVyVzlkVEJuWGMzN3oySnpTRk1FZzdVaW9uakx5TmVtRFhQRnI2RkdHOHd6SUx4NUlpVEozQ3dXUHM5cW1hYzNrblcxYkZSbzlyNlRwY2syeXp5QTZnQUpQc0dMMGpGc3dkS0U3bzlQdHBJTklhUW16MXlKLzB6b3NobFBYUUEzS2crWVNuVzlzQTdzNUdhQ0l4MDRjdGxKY2diU28rVDl6SUdqcWRQMXdOTFdvOVh1T2tMN1ZScjFBWStCWkx1L25UcEZ2MGtlZ2hkaVlYNUs1UHAwSy9NMlRIRGVoNjNBZXM4NWxYc3ZtdGJBUkxtMmYyWmVHNzlSamdPRHhacFVNOEJCVVVLTU1PR0ZRTnJtQUVIM2N2N0xQa25uS0ZLTGtMY04vYjd0OWRRUU1VMFBJTzFWdWVHYkY0WENMUGRsaFVNWEtQL0NhZFVBMElnMVlLWWtCWUlacitOSE1mUUpPWkl3K05FYjl1ZTUrTVdjbTF6dnNTODRMMTRKcFdSQVE3M1ZVSWIxcm90NVlHdmFPNm1acTBwMVVHWUVXZmk0Y3lLanY4SW54UHRiOVFYVUg2WFVjcDdUbmVEeWVJNmRDUnduUytReElCN25jS0xpT2VVNHc3ZmxTOGVpdGxEVTNmMkM2YXNWUS92MzgxUnZWR0xwTzNVV2lQYjJ5TithQ2RMQnV2SytSMXpCSGNxZEZXRnMyRjFTdjV5MDNWRWpNUlJzcUJUY29ldjVTaDZjVE9DMFVQRkRkTXZVKzRXNi9vZy9UQ1hmYjUwTFVFQjAxYkRVbUc1bGwzTERjZ2cvQXp0TTFpQTl2Qit3c2tYSWE5SVZiMkhQaGFGazZvK3BnQ05Kbm1Vc0tlTU5NcVB2VFVTa3ZYYzdNeDlNc2VUNitSc1ZWOGRiT1lSMzBUd0w3anRkMkEwNlk1MUlJWmx6KzVoaER2aGk5ZTBub1RkZjh1aHdxamVSazR3NlVqV29FdWIyVEdJbVkyNGJBNUFHbFU3bmZQUTBidStGRzQrM1A5T2V1dlUwSmxMOURSRXc4Qi9LYm54R3FDV0hFR3g0eC8xLzFSbkt3MjFsTjRySkFuRVFISGZXZ0IrWFpjb09jS1h6V3MrTUQ4cjJEQTBOUGFrTG91L1Y2OWlhaTVhV0hMZ2JHNXBtMkxUaWN1cjlNSFgyZVcvZUh4aFFKcXFZUWJOZG5UKzFjaGdhSVVGNlA0UFQyYWhzazJ4SXVmbmlCUXRVTExpOWJWaHA3YkpBVVBSL2tETWZzOFVwRkxJU2hFeVVQRGo1UnlYc25nV1VyOGpQRklGdDcrOHRVcDhYelhRTDUwYnl2OHgzSU1HWVdsZTlpTnkvMU8ydlJnTGRKTHNsWXpnNFp1RWNrbk5qOUdlY1NyTndEeml3LzA0Q0NobVVJWVdFbFc1V3dPbkYyanN0dHJrZ2pDVGs4ZDhJMlJqRDluTTl0ak0vTzZMWWZwcTJja2xxeTNPaW0vazIxOEwwS2FRbXJZS2ZweVVGQnRvSnhxNjBHcGx6ZWJhYjJzRkc2b0lQY2hrOUdoV1Z6MlMvMDhoZEMvcmVmaUpJS0plY0ltNS96VllvZDl1a2ErazZWRE1LMnFZdmlmNFA3RnJLWmVFYmZqc2VOS0VZTWRSQ2l5endpRG9uL0pSYiswUkZXMFZGV244VmVNQ1B1MStma2ZSbWcxbDJNUFRNT3BiRWZmNFZkRkYxMmpHOXBzL0IzVmlIQVhiS1pYbEhHUzBhWkVzRkphZFJjK2FHV0tQQmtmTFNvTUdWVHgxeHAvTk1SR0k0WkNSTU05cnBtdmNHSVpqS2E5aEF3RldwOGhCQjl2WjIyU1k5RFNTUGQwc1lCUWFPWUd5WWdWdWlEaVZUQlBBdlRKNnJOSm53cFYxSGMrWjVKQXN6S0s1eWRuK3BENjQ0L0daUUpxYndEMkF6REFxY2pXdU5XZHljUkVLSm13aXBBVGpiU09UWmdCelUyOHZXdHhxSm10VXFYT0FuVzhOQVVVQytGaVRYQUFNbVlselFJaGJ6RnpPMW53Y2hUNXM2QU50WE9kcE9nSi9RY2NZM0RrMVNuTFNYVUN6dUJpVE5FZEpMMkVmVUpYVlBIcjF2TlRtOW1KdEo0R0NkZGQzeHFkQ1p0a1pMbFdnVTBoY0NwdUVtbjAyM0hEVjdYZmRGYTdpTXI5S283dFgzWU1RVkM3RDMzNjF6SmcrR2p4OHBXdk0vc3BCaUgySk04ejY5aE5XTmFlVVYrdmFNancyRWFseVFUSW5jMWpUcXNwN29QZ2FwdGNTa3FqNjZNdDg4SS9EY0xwcyt3MkpaZmw1RTI2bWY5a2pGd0FWRmtML1pOV0Z6NjdkSjZ2bFdhTHRRQ1pjRG15ZEEvOCtFVmNmL1duOWFPVG84NG8xZjlmV0JINGg5c0xBSVZHVSt1VUZRaHJMeXpBeEFGUHE0dWQyUDdjZE91cFF5TDN5K0hIMFVrbkZrUENZVmJUY0s3ZXV5cFFaSVNoNDRSemhVc3UyTlBmNXZQV0tSdWZwbG5pM2VVdTZKK05NWGRmdjNpWTdQVWZ6Y2Rrek0rVEJKeE4xK0lRSGxGWkdqSXhzUEdBckJ3Y1A1NnN4Zk5WZHZzcWV5QSs0MTJpZjBGbHdWbnQrNzRndmtWeFVMcWVnME5tbWUxNndVU2dLRUcrSGx1SEdLYnlBQmt6NXZudWJ3N2hVMmpMSkhmWHo0bzFpa1J3NzRGZlFVRlpOajY2NkNQcnhiTitkSXFTRXpCdWk0Q0FYbVA0VVJBVGoxa29QbzlvRi96SkxlcHlyN1FMK2VISTEyT2VkS1MyWnFHcitDajJCdWlrRlBwRDR1L21GWG41V0svSUN2ZDlEc3htZWFyWVU3L3pXRDNkbHdFTVRMZ1dqWEluSGIvU3F1Y0JHNHg4bEN4MUFoQTFpaWRKbWhXeGMwcktlVWdMb2s4MG1qYWs4L3RkbWc5K2ZiMjFVNmNLZm93T0xaUkdjQndLUGwvS0FxUENqdFRqZWw0dTh1djlxeS9leUZKSUVGZGU2VFlMWWZ4NVNRSndKNFVjOU4xTDJ4b0tyMGRPWFlsTTR3bDdtQ3lGWk5aNzFkcGZBQkY2TXBXaWwzeUZmQU9tbkJoNkU1ekRzUGl6RDZLNzBOWUN6L1VpcEpNUlVHek1ZOFVxQzRFUm9sTlZrWUhsS1g0ZEJsTGVJQ0c5N085eUQ4TER2QkZRSUdaNUhYTnlxR0xackR5T2ExVFY1YVJTWGliWUZUdHBoeTFIS0ttUWxBT3RTVmpacWhRSDBOdm5maU1MazM5QW53eGJMTzF5ejUzY09QWklrZHB6SkhhQjMyNXRZZkVoYUZLSmExMXpRS3hpMEREZzVybU92QVh6M0R6b2I4b1ZsMFFqSGlHK1lJSnprdWllQVQ0OGI2Z0VqRlpYazA3d0MwTFNOMG8waHNuclNMQ25XMXd4eVVycnJTSGtRQklmSDlxQjlDeEdrUHdqVVUxUVBMYVRkRFp5SUo2eUEyWDhVTzVNUzVLT2FYV0JlY20xVnZ4aGRYa1cvL3p5Sm9pZWkyT1VSbUdzSmQ0NzdBTkNuQWFyT21COWdQS25PWTRPRzYzUGp2NGw1RUkrUGFIbXdFTGNEWXc5RjZ5dHYyaTMrakY2YXJFbHpPTk1ES1U0SnpiaEdDUUdEa0poNXFNcXBjWGFTR3Rvem9FOUZYOXZxWitsUnBqeXhyOVU4cUJUdmZkMlltOGJTd2MzczMycnVxNzBrYS9vNi9sME0yejRkWGttNmQzMHVJTVNXc0o5MkNoTG1kUnVsQVM2VHJscjZHNm03Z1ZyUjVpZ0I3bE42ZmxZbW5HZGEvRDI2MTNYczMzNjFld084ci9DSzB2UjE1VE51ejdqUzY3aW1CMWVnRm9SdEExdi9IQUEvZHpUWks5WDgrY0JQeVpZSjRzMTFlZ2o2SzlUamdTcEZoVlFHUTBFZDMrblRJNW9NWm5ON1p2bGFwTUowYndUNG1yb01lRk1kQ2tJczRBYVlVcm9BMHhScmNNVHV3a0xuYlpWOXFuamVnM2U1V2gxS0tSRTFrajdUUXFNUnlWdWR0WTJyU1E5eFBiU25QeDZUQVNuS1BJa05kN2t1OUFmZFVPZFExRDI0Y0RycVlCNEZnT1EwZmZpRVc1cEVXbDdsQU44MVY2eloxS3JzWG5HL3ZPM3B0QmtpeXkrSFhjNXluRUpkRHRVNkYvSTRWSFpQbjhEbXhKNjdYYndwU0RhWEUrOXI4aTNaVlJHK2N1bU5jNmg0VEQzb1BMTWd5TzFvZnhtUCswN2g3d05ENE5CRC92MllXSzRLUkkreHBNdDByR0NkS1hoS3owRWtCajNkOUg5b1gvMTdZMDNvZDV4bzBaR2JOSTI4WFB4OGRUUlcxbHM4bmZLd21jbUw1aFcxbWgydXpEWnJkVU9HUUhyWVZ6TEYrWTZKYjNad0RPRjVQbUlLM3BlNEtscmcrMDhNeFpFVlptazVVczkvb3FWNFA1NzNWNlkxZEdsbzlmWVNnMEdsTU1pc01oZzNlVzZVdS9semZscUUzSmRzaHEyazRrUzdoWU5ZaEMxZUlEUVB1Uk9XSEk0eDZ6NHRNUVJwYnFUTEhmdTZyeWg3TnBESFFjYVM4RitlU3lmKzFwQjBQTS8wU0ZLRGZSQ25uWE95c2tCQXZGWVcyeWxyV2ljQkFERENqTDlkemZDcHYzeStBWngzTVpnYzM0THNPNS9pOTVRVzQ3VkVOK1ZjSk5menZld25WdU1XNnF5MDRZNUxwMFZIR093aE5JQmViZkZFM2FOU1g0L2pKTUVBNDB3REJVWU9mbWRrTmpJdTRoelVnYjZzMkM1a014OUdUa25meHVGcTZwRDNaR0pOeGZ2VlVuL1JFQy9ablpzdEZLOVJaWjlxZE9rbDBRWUg2ZDYyMlR6S3JJeUllZlpTOC90SlV4a1pyTzdtc3RNbXdwMUpDSjRERFBGeStnRmVGUGhEcG9hSjlZc3M0TEd4bFd0Y04yYWVYemJ4VURNZ240TzRYVjk3QmFUZFpkYUgyN2xjZHZ1Z3dnNnRIaEZWbUJnUVFPajZQLzl5eWJPcjdiTjI1Njd2dEVVbHNKeXVvZEV3YXJyY3Y5YXU4UTYvdUZxa3gwK1czWlk2NVhTZlh3blBnQk5wOG56N3FzYXdNYW1sQXNVQ2NwdDF4TzdFbTUwekhiaHV6c2lRYkVOdmcwSEpaNzF4Q2dFcnZLQjZtNmtRczZ0RFJQZ1c4dk9SdTlMbTdsY0VKQUlEbXJrZzdjMWNHengwUkZMYjVVczVnNmJscEkxbWdzdWEwY0k1RG10Nlh1Q2M0L0hlOXZYU1lZb2doZ3hqckRZYWNYN3N4enVySlFZeldSd1ZQV2JZYTBraTRsQTNkSHFwZ2tXYTFjVU5NN0lKL3N5VGUzMG1Ickt3NndRci9TMVMvd0dpZ3dyN0o1U21INEZNekpJT0w0SUl2VWdhWXprOXlKd0l5amgvMDlkQVovYzFHZFN0b0RTMXFPRlZ6YzJ6b1FqYXp2UE5CMmx4cE8vb2x0M2lUaElaViswTnBIYlIvQ1NGL2VxT1lvWXN0cDY2YjBOcnRHcEYyQUs4MHAzZCsvbi9WNmZpeENXZjhDSFo2UjVQTlhzakgyQjcwSmpXODFsK2RFd25hMWJrN0lLRE5IV0VKd2lmaHp5V3RIZHRRTG1ZMm15ZGgwY3kvTm1RVlpodFJrNkFzWU1kUGdMMnRLeStzNHkrOHp5Qk5KTFFsQmhvcGE4Nk9pUDlrcFdZZmNiTHRKTURYdFcvamtEQ2JYVGJoa1l6Ty94WmlxQU15TEMvaytIY252MjI1SVYzcEIwTmZoeVp1QmVNZUtVb1pwQ3VRcFZnL3JPREowL3FJU1NrTGJwU0p1aVowSFVId3JRWEJPWUx3RnFNOHdUaWVGQUxLNmN1OG5XcnVBZ3hmSWlQdkdBUHF1TnQ2d29JQWdCNHpET1ovTjljWERSeHRHTnpKckx5bStqUmFsUjZPVnUyMTRZOE9wRTdQZzh4L1JVcm5uQ282aGdyM0hOa1p1SHMrcVduMFVZWXc5K3FhVE0xdXMyK3lFTGdYd29ReFdlMDlGV240ZG1UNTJ2eDgxU0lCN3BGbHNaQ2xkNkVHWXlUSytaQzhaOHAzVDVnVmZEQUY2NFhUNjI2MTNGUTVicVIyOGlkZEFMa29TaHd4Y2ZadFkvZzB0b3V2b2x5cEtEQnlqRmREMFFUNG95YzUrdjBzalJPQ3NSbnB0T0NWNk96SzU3bWdqY2VPVFFjV29hSzgyakMrempmVzhZd1puK3dvRU5UVDBDRTlGSDVlTjB6VEk2U2w4TERqeHE0aHlTdDY0SXNyclBHRU5HNlpRcFF2RW1TMkN4M0Q4NGdWYldJSTVpWjZGZE9jOE1xbXI3UnZkbnBGYm11UFFRbTJuRDlhZlN0aS9HQTBIb1ZVVjRudGh5WXgzKzd0OHpNdFp2K0hXSWZtNmlrVlJmOWFObGIzajErS2VCUWRoSEFMLzF4eUIrRHBHRTlkVXFUSmZpVXp1b1Vjd3NMZHFqY1A5ZDVrbVl0UHFveTJ6MlBKNnVsZ29yMXMvVWloVUhGM1ZrVkNCa3MyNGRZRDlXbzRDbXhiVVkyTzB6WDZMODI5TmNRclc1L1hidXhVd0R4dGlxdDROamQ3dEtrbGhmV25NSXdMWlN1bXMyNGlCa2R4NU5yMnh5NjlWQVhmbld5N0NJbzVuN1NNdlNMN0xjdkk4Q09XTFJGY1dYMjIvOFdwSDJ3R0hTT1dKMUUwbUk3NXgrY1dJVlppdUZqYVd2V1BNdW1uZ0wxd0NpN29yUngzWTdaSVZVZHR0UDNzTVFWZzZDVCtUMGtHcFIwZFF6UzY1bFgrbVpCUWlPL2JIckdHL0hBTHJHVlhZeDNoQWpwZkwzV21BUWcxdU52TTJGRVFoOTkwRHBmZE4vc2VzRDhQbVExTXU1Um45RUdyNFJkMlk3SWJXVk12NWxsQW1Sb21KYklOVXo1Sk84TC9ZUG5aSGdiVndGWWRxZ1VwOUNZQXRrakxRV3ZOckFOSmxHd2ZOKyt5aVExeGd3bzYrQ2pYMVpOSkkrc1NtazJGTzdiNjlhbFNkdS9ER0J1M1loSVorSnJUbFpHU2RwYXp3YSsrajdQRXF3NzFsRU03Zkw1ckZGejl5T2l0NEp2bFNnNHlqSWRjY01MNWJWL2pWSDQrTVZBN1lOdFNNUWRHT1dNZVdFOTJPRGRyRnJSMk84RGhlZzMrVXBwNVJTYmNPNWJTeFVpcDNCUllmY0ltM0FyUDl6eThEdThxek43QzVJREd4TlZyR0xnU3I2SXVsWkpiSyszeGtVcFpyM3M2eXFnUGtQQTY5ckgxZzgyM2NFd3U1Q091MnJ6eldseGtrS0RYVVFyZDVyODgyOXIzOStGSnBOSWpGT2s3dGM0NFl1dVZXWTFmWUFIQnFzQllabzhlMFF2c1lFS29PNHRhNmNPT201MVM5U2lTV1JaWXpFWExyUzNQSURFZEw1VENCNXF5c1lNSXZqSzF3eTlIWFYxUXBNclY0SW8zWklSQWNRcktoakE3NldjQjRQSEFaRDhjTlZGWHBWUVpIRWRVN0NEN0ltQXFZYWIvT0VRcVdUYkVna3hjMzYxdTlhVGVTaVlEQlBOc3RiUU91UEJkWVhRbnRxWnlhN1NNcDM2MTA1blZvK01tdzh6RytycWRUMXBFdWE1dFBPc2ZaSjFaYUtHdFNQRUF1eDJWMlNwWjRKdU94WEszbWtiSWVjSE1kUlhuazFaYzNDQ2FsUk5vR1RjelBpbHNmOUNsRDBRbHJGVlJpZHltbkRLVjlGQjBqVXdnZGlCNEcyY24ra0ErVm9NV01nL3pSSENmR1lrYVlMQys5OVRsSnJGdEJiY1kxKytwZWd2VHk4bWNCRXNONC9xVm1jSkNFc3ZWMjNSc3ZaR21iZUNDM1I1TTdvS20yaFg5TTM1Ynk0Vld5Qy9ER2hGSXJQMllYVk9VaE54STk4WmFVVXA4ZEdMbDJYM2JlYnZqL0hMLzB1WHFhYmVGMnRsYm5DSWllUFVaQlhsekluZnlCakhQMUE2OW5WTVNDSE9GeXBEUjdjeXlOcmdZWndVUXJ6MEs0eCtqRmQ3WE5wclBWbDRMaXVJUVU0Uk15d09TMnNISWpZazZBUGRFRE9acjZBVi9MVVdoTTF2ajFKSjF0QitScFNEVGpGMHEyY3FmMkQ0dEEyaGZ4ejRobEtrRFZaeG5jSHFLSml0MXVHM3RYbGEweUtMMXpzTENHS0FQMW92aGdKYW5weTFUMUQyQkZ0ZHpiWWlYenlaT2pEQUxrS2ExTzZtcVJJVWRLSkJZY0lvUDhpWGxOUm53Ni9QMGpYVmNicVhXbWZKRkJsU3hmOXRFS29MQzJhOU55WFdYSWpOU0t0elBGTXNHMXlXMlRLK0owWVo3anVsZDIxSk9PbHFEVktaMjR5M3Y1aWlaS0IzOWJIMlluVVlmdktXZVZzcDZSRElobW1hTkdFdER3SHJtbWo0bjM2dzNUR0hzVmJpRmJFb2JQSktWRm5USTFUWUFMUm94RGkvWVA3dFhXbkNuKzV1TUVoZE9sUXdLNG5pS2JvU2RUSWxyL3NHaytFempyMHlmU3hkbEZrMHhxY0xWb0s1ZU84emZ4dngxeEtlcjd0M2xYeUdqcU5aUVB3Z25KNTkrbDJPSDFnRjgzS0VqTUp4all3Yjlsa2h6RkdrNGUrSHNPWU83UkdwZzhJcTFGYnVBT05xWEZMUEx1SVVnL2hlRzNHVHIyZk02MEVGbGNoR0ROclBqaTRKNWhXRlFzTUFCSDNCVHZYWkFIRlF5NjRxODVoaE81dzQvM2dkZlhDSEh3WnFqMSs5OWx1RUFoU0hDOXVDVUxmUW1aSGcrMDA5aEhRalkwZ0NuRlJnazJWRzdaRDI4Y2VLelI5a0NxaFpURURaaHlOcVdUcHZMWDVmSzRuTlIwQ2NhaE16cDhhWkNIamhQUnFYYU10dnJ0RmNKdjd6S1pOTjlFS1gzcjVERktvNHZxenAxUnBXOWE1TXlrdGtia01HY2ZtdWZJSEJkbDdTZFVUSFk1R25EMi90cWFqRGVXNlk5SHV5YmE3N0xUbkdpdXNnUnc0RUxTTzhhVTdzTy9kSVZjSTdmUmhGcHplcmptcEZhcnRHck9xWi9kTEp4a3hJRFpKbmhpblM0Z3NkMzdsbVpuNDlmR1pGdGQzelA2T1Z6TUE5MnFLeFlSLzRYbUlpMDdwL3hTeWtMRnFpdEtxdGV4YmN3SFpGTVhCUlRZblVIY0JFam50YkxCMngydkRoMXRyVWtuR2xnV0J4cXIrbWtmUVNoVGZDcU5ESWdobldXRlpTTnM4OHZ5WmhzYW9mcTJlalQ0VWVKL0xxL2dIeDdxZjVKYTVwRkU5SmZTYUlPSXA2ZGFhVExFUUF5TE5FVXd3Z0FHUVdlN0JVRS9wd1RkMXo2RWkrazR3b3pFb3pYZDFMRVFnTFFXSDFzNjk3WG1hRUhrM3dTUkxKTzI2TzM5YXBvbGI4M2dYNDZ6NWROZTlMRFBod2lTQXpRRFdBVEZXMGRhZUJCS3pRT3J3T09pWHgvV0h2N1A1NUlmSmtYbGkxUU52Z3E4dTBKRkg3RDA4M3B2TzdvSm52Y3FXdm1ucGQ2cHp5NnRINGF6WlRZQWtxanJmb0RMWmdxb3I2UjNWVzh2OG5MRzlQVFpvRGxCMUFWZW1KMitFV2RFWksyaVdxcjVuMDZJOVdtUFdFZFJKUG9PWEJaOWF6RHl1bXpVaURmOVVCL0VlSlJvekVnQzV6RktvMzBpQ0RmU0NpQmdLME5oNXlVZlI5VHFZdzNnRHh6TWJpNFRsdGZadHdMeUJTNmJVbi93RTJwams2Q2h4OU9PMTJqWlFFeFhRNi9NMnh5UWxHcWwvS0pBeHJhS0YzQWdlRWMycmsrS3B1NHBYV3dFOHBXTFFNZUhxSW8zRVlaWW5xdmpUS2ZhejhzT1R6c3VQQ1B1ZTdHTEo1ZXJxRnlpeUtXMktqem0xUnNTVDBIWHF4akRQZStyUDhyYzQrZWdObHpRVUtqTENNUWVVWXk0ZzJwTzZKaHllUWt2M2J3Y3crd1duQmVYVGZXaG9seDd4TEtxVGg0TDdFbXdTcmFENXZpOVVPeDY1TUdMditaYU1tL1lMTkI3SUlMVXZrNlVESDZhVDNZVXlWZDNnQ3YwbjlDVFgxd1MyNCtZbTZqRlduNlo5RXRtQWN0aERlLzNsYUI0K2tkU3Y5SFdvdlRBUGhVSXVYcFdOeGlJMWZoMHVreXo5b3lkbGU0bzFlN1NXSWl4RkJvdE9jUVY3NEtCTG9qbDE1Y2RxR1hSRGZWQ205VVFWSndia0g5ZXZGdW83bzVHOFJmdmZoWUJaR0VVNzdxaUtQMVpOUXlnSktPQlNrZVBLSjh4bGx5eHNOMVJ1Wkc0WHF5NUx2MXV4dFFqRjJqZWwrTTJiVmF2VWVDMU5xQzhTTHdLN1NvSCtwRTEwMHVVQmxUd3NOUERmWlJvUkV4UTRjRTRnTld1TTdvYllxUGlHRVZQenpOL0xXekdhODczeWdUTzEyb2hiUGRZMHU2cUJaNnZIQWNVbHIzWUV3aVlFNHl4WmlZTFZieFNpSjRDMGdTbXBreG5nanYzYUxaRjIvR0pqclo0dml2SzJrZmxpWkdmaFk2TDdqY1lhZnlIQzh3SC9rNmp0TXBkb0w2SU14TlA1Z0xncUhRdTFQVm9vcE5QVjRDQ3VYdTlTNTVtMXVxbXpUS2VDUkZhTUtaZ1VYQUUwWURmZTdwd2VIamJhM2ZUbENLTU13ek5jNjEwMnI0S2pMU3JPUlBOUmVLcy9TNDEvSGpjV0NlTldoYlVERHVSU1pNRFdZeFdaR2RYTU1TT0ZOaGZMTHlmbyt5YnB2bC85ZXpKazhBdDhBMXRJTkFZTHFwRSs0Z09jQjRPSWVHZVM3Qis5a204YlJMVzJHTUFRazlSaTdVOGc3UGxkWDIzdjVSOW02WE55eXl0ZTdCTjhNcy9BRGZ1am5nR3Mreko5RWxlUXRESHY1dnYrSlVSZUpIZU4ydHBzSnJyVW5DVFVZTGIyR0YvWTlQcDNwK2FVWm1ZV0NNOEhwZFRiT2pVcTVsNGdIdFUxSVh0YkxZaCt2Vk5oYldzdzFjUDVjNUh1M0g3eUxMbC90Uzl4TFZxd1dKdkE5VERxUWZTSnJSU3VzVDFvMCsrbmRVRDFrRHo3blhYaFNPN1pCWURsY3lKOGJJZ2RxQWM3UGQrZWNlUkN6eWFsSkJvOWM1SVZrNXhEd09zeEJKTmtLdkJidTNtdUE3ZU1zTDVpQXNJY2Y2UTFXWHVLMS9KWWdaU2tKMTllc3dveERyYXA1dTliV09Td0dRb0dzeThhRUhwL0t1SnBUSHIrZVJPa2JoQ0hEQ2piS25EY1BGVWdmZEtxc2dEdVQxejFucWFSZTRuTWEwVXhteFFZSFNiUHBNNVJxdmtuQ2FEaW92RS9NdFo2ZGlqS09uYWwra3J2WEhXZVVoQnZMMGxPWHZNMVE3L3U5NXA3RjFCZFBGMUtGVk83OExjbGloQXdtWTRBaW8zN0o0b3BhaWNSYWJwek94NXdmSTROL0RnaW95OUNKTjhzVEphUE1nOGJjM0NaaE8xNDR0RW5YaEZRTlpjL1QydFhMdUY1ZmQ5WXM3dG8rYmxYSm0vTEhManpnTUY5blY4ZVM1WEs0aUlDVGtMWTFXcGpETmVUems1aWlFekFtaGlRc2VOditoTEgxRGhiUG9BY05BQktkV2dFemlCektCam9rWVpxM2Jaa21Edm1yelVtajZ1aVZqVmp6V1NSZmZmMFlQWWtVL1FKWVVJM3dHUFc3VlBBdnBzNzh3UmY3QmF6Vk9pcjVpMnFVcWFhQ0luQlkyVW9kWkpVWFVWcmRBSXhTbk9IZ0xETmxVZzAzNFBoVmlXeFp1MThvZ0ZOREx4d3N3cDlQWitWYWlOVXErLzNvRGVRRS9VaGJSL2NVc3dhb0dmTWVzb2NkcmtqVzYvbmZLTFlCUlNiVjJ4Mmw3dGUrWkszR2dNSGQwRHY5eTE1bzlDQkZuRXJzYmpTNkdRWlJmeFY2Z0ttVnRlTnZ2bmN6Y3Vac2JNbmZLYiswUEhEb1ZkdmZwcUdnN3V3MHRVK0NlYlRqdmNJNWdhOC9aUWVFbG93STVLUHRGTTkxZ1c4MWxHZEVwTmlrRi9FR0VndjBSbUZwNXhNYzFqK1B1MDY2eXZLeTI1N1hDcXp5eW54RUJyRzVpekJxNHl3K041MklZM2tRcmpFSmx0RHFHWlEwQXdzRzJFK1hpNk9IMWp4RXViTUs3cHBGQ2FEL0hGamxmbk01TjIrUGl5Mk1zTGJtU3F4blRScWJjMFdWNDh4US8xMUNXcG4weHBhVTM5bXkxK0txS0lMbHFhNDVGT1lqeGNsRVloalZucGJCb2hhaTFlMmkrUUhnUkJOUzRYQnEwbU0yajFDRlN6cjFRc2RxcFNTdmxXYzgrbXhwcWtaWGRlZ2JsS2o2UHRjdlh4UEFPalFndENML2RpUjdRRmJ2YVY1TUVVZXV2VThIYXNHSStDcDBNV0FCVEZiT3Y4L3ZOaDRZckNFZ0pyRzlna1JGQ096TG10Tm9GWStTcXZPNVpEN1N5ZGJnSmNzclBkSjM5eFNsYWpDeE9nbEs3dkExMGwzL2EwbDZNSXJlc0FQZFRWZEV4SEtTZmI5RWkzSGJ3VkZPT1NsdXNmSklSc3FHd3pkM0RBWEk4a3RyaThiVVFMUDBvWnRVMCtaTFlZS3g1WG0yak9IbFJ2aGZ2TXJiNUxoSUhPSWxNZHdzbUErVnV6VUc3Q3NWY3E5UXpFNEN6Tk40QzJLTktmNXZKWCthYXpsVGFzWHVpMDNyMW1tYXFHRWhYOTJSYkErRHlVaG9MbzRXK2UxUEg3VzI3Zk5OWE9tcGxoT29KZFNRSld3RXM0c3lGTHFBNy83L1RKdHhOK0NlTWZtMHVhM3ZBNnpmYzVNY2szVVNXaGxTakhsTjNyY2t1cEdHZzB0Y1h1dndxZE9yQm45UmFGQUR5TWg1Vkp4TVJEWGxkMk9VNXJ1dHBrVzlmRzhDYTYrc1lOL001cVFIcDhBclNrMWdLc1NnVnJQQi91cXA0UWRxVWxHWmxYaE5uOHI0MTdPdy9rWUw4azJrNkVJVm9sc3YvMnoxSnV3L2ZadHJDMW1Xa05haWVBWEV4cC9qRS9HYjhjWjdNTVhZTWRtYTE4dFc2dmRWYy9qWUhBTmlMblFiNFRpTU1QYTJiSmd5dHlZNUtVb2FvdFlUM0oyLzMzbXg0SDl2RUo1dm1RSW05anZYait0WndtOU5leVZIc21mU2N4Uk03SHdZQkxtTTFucEhtTTNBa3A5UEFnNGJDTDhTVDYxVHl1QVllQVJMS1R6R2pkYzFjZWFqUWE3bGNENTJLUFhCbHMrd25pT1l3Y0ZENGx4SkF4dUFLRjFvR09pN25YZFVUb2hDa2pVd0VZMFZzdldzRWRza01vdEpzUHNIUzRabUdtb3VQaXdxMmxrcHZKcU5iaGhha2hEM0dXMTV3Y2hOZEhsblhYNHkzRzBZYW1MRStENnQ1bzN5UERXQUNvS3JCdmYvVmg1bnJMbENNMXJRSDdYUjB4bm95SjVWaDVweWJLeUNKR09aaHRPRTZKZTcvbjd6bElUaElUcXlnSnk4em1TZHRwSXB1Rm9ZREdaaTdwQUhnSnhReWl6SHRKVWROMSt2a2FYbW1XaUthcHhiMzVDQ2pKL1ExeHJ2Y2Nzem56MGpLa2pUSTVsWWNYVktTQWpEOXRZWml2ZU15c3llKzdXSTAvUmdZZmtaR3pITm5IdkgrRlg5TUtRR0JBdFNrYmQ1Ymw1dUpYUS9oeGRiYjJnNWJNOEF2emgrc3A1Z1ZqYjZkcXU5cDRENmhBckNrU0hVak0yRS9qV0ppMzlkeTl1dU9YbnZrc0FubVJhZlU5cFh4ODd5SERvVFN4eDBqS0U5d0t6RDdxejFkYnR5MlhINEhub1BDNjV6cFUyMXFtanZrVXlIZjRvcW15ZFM0eGs4R1JLT3JqN0dSVExLUCtydG5uZWV5Q1N5SFBxaTlnUkxXb0RXNWhhNEJyOGNUaDYxTFlBaU1Hak1IOFpRRnZPRm5hZjY1WUNaL0JsRXcwQzhIb2M3UXBkNHhCdEZNTjdNTVhYNVZiY3VndEJYOVdRbXIvYmQ3eTd5alRNaTg4YThETENCWExkWEVjdW9DTFNabTdqRElmbGZNaU5FdGpCQnFzTVlhQjcweGxtZmF6eFNFVWwxV3BxcEJvWGN6MHlYL1RTUEFybXBLc3ZKZkNzVjdjRFBtY2ZmcklDN2NVczVKVkw2YmsvR0R1OW9mNFFBU0pqYkdyYlppcFA3MUxaWXRjZUU4RWJCRXB1ckVsbWViYi9BL1ZmZk93cTFxb3ZhTHkrUWtjcTBBZ1lWS1B2QmhlOERsY21BZUgzVXljc2pIeHFicmEwbmJPYm4wL0FBeXBleHlHdWg2YThHRXJ6aHNCY0VhL2Y2L3F6TUlCUXRYZ25MbTZWZGFrYUZQMlEwQmpVRDBxVGxzbS9jc2k2RWswKzFublZtRXlzcWdpbkVxR0pQYmQ4MDZLOHJ4SmVObkd0MXIyUS94Mi9hcUdPcGlNcUxLVU9SQnlqQVVaQWdibEJTNjhsd2lEODZWNjhCd3gyalRKODlwUUF2am9aQ2hhTXk5NmRlbTI1Slg1VVhpUzZPVHVEeWc5QU1mZ3dWR0JTeDk1VEYvMzFPMWZpVFVsU2o0M1FGQXhzeWZEOWEwWlNNRWFrSGtjUnU3SW83ZHIrZzBCK0hlcXd2N3hBQWhRRkhnWlpVQUZMTCtmSkM5N1k0emhkZVdMTkdJZnMxUFhaYisrNERQRFJzdStFb0NxbTlCcFRKeHM2TWpPN1JyZFJORTRtbndQN2pHUThZbDRNRFZ5N05oUTVJWUozVUllNTN5SmlGeFQyc2VVYVl0dXNiM1o1RHBCSlpwV3FseUdEN3hQOUZtbUZGdVJ2TGNGZXR2QlF2RGViSUEvYXo3L2RXb0VHZHY1RlJtYzcxdmJTMjc5WTByNjVpWHAreEM2cVFJVFRONzVTeG9UajU1N0lFNCtGdjRBd1RVUDJabTR3UkRhekt0RXhFcXNVaUx3MlZDeDExamUxR1FRVFRaNjYyd2p6RjV1akJKZm0vcFpaV0VGUktpcVAwQXA0cVpHdmFEY204Z2NHcmUwQW5hd0tEd1lBNGM0VHFZK1FLeFlqbkE4alJCekpJOS9vRXZsalJyZjFWcFRleHZVODV3WVEvVHp3K2VuZmR5eGQ1Yi9qK3lxVitFbnZZVll3RWlBeDViMlFKcHdob1dyWVV5d0tkRkFneHZrWFJGVFZkYm1QQm5GRDhjazdvNHBZaUtQa1d6VklmSGxpUmFXcEN2bVhrb3VaY2JKNTdYVXRWMFR3eWsxSDc3eWRNeVYxR1p6M2JmdGlKaEN1VnFtYTdacCtKYUZKS3A5VlJUaWtJbkVYZURoYm1rRXN0cGFuY3V6M25iUWtxUWhHZk0zWENJcGluVnFmWWNnUDlacE91YVRqbEdUV1EvMDJTazRnMERHcXlhbUxBVm0xdTZRdWFudUV3MWFvaDR4a1I3c0hpQkFMZEZsZ1VhZ3NwUUJZQk9jTnc5WlpwTEt6S2VPMEpaTGhzNUdyMmRvdHNJdTFiODBMeVZRa251czh2ekwyMCtIWXBSaXJLOFFETDNrMUpuYWpyVUw1QzJvNzFhT3dEMHpBZWpiL2I4SDNvdEtVRXBzTzk0YkxjR2xXL3BVeFpxWVZWSE5WbHV6WXFMeTlvSkU2WEg4bWphZEswYldURnFMZjNUS005R1hHUnEyZk5jazQxZTlHWEdMQWdIZGNDOUZQVlgrbVEzaG44RW1nakdyR1NZalNndjRkLytZdVVIcWxoRDZ1bjhiRmhvNTdwSGhTQndPWC9Tck5rM3JyTmJKZ1dDL2pxeDRrVHh3SmRqaldjSzRyZkI4bGk0MkgzYUtmQ0FFQ084ZktSZ2luYjhKMHlrVlg5bE5TakpGTlF4dU5FMCtaSVdlZUFlWGZldXowQ3d5MGxHVWxBVzFQTXdYd2lMdHZIZ1BhRzkvdWUxZURtK05jNzQ5SUlidHlORkNJTVJJdGxRdzlvamtTQlc1cVlGbjN1bVVBSVlwRlhvNDNYd0pLTVpibVBQVDNLR3JpbXRCam9FREp6T1EzcHlsemoxWS9iNS85MTFqNkFzMFEzYzBxbjd2UEhvbEovRlo3Sjc0UjlmcFZxaGMzQ2tHb2lxSGFVRXBXSjRMSkdKVDhSQ09GMHV6ZU5lQm1UYjkrTjQ2YUV6cndpMFE3MXJDWGVmUmNrSTRlM1ljZncwKzd0Tnh0Q1Qva1hUSWZmbG12OU0xVEVpL0wyQ1lqbDVYczNmVXhNQi9nTm9ja1ArMzQ5akMrUnpSby9wSUNDWit1ZFhrTEJNTDNUbVY2bW5OM0tsUGRZQlR2ZzdsMk40QWRUalROaklTTHNJNmtRbXFteFJ6YVVSRUxrZGR1RVJYZlNqQTJNYmlWL3ptYWdaMW55anFtdjdnYW83MEtHdldsTG1QNjhIVm5EVFhOQXFndUlobSt1UTczVUZNdjVGeEloT2w2Q1dzcW5COUoyeDVCRmEzbVIvSEVWbzNrTUJIU1EzK1JHbEZoR052eTQrc0hFK0JacStPbVpya01rOFdHSUQ2bStQUjhyNXo2d2ZPcjBwQllsN0lOS2Y3dUF6bmYxTm8xcGZOaXdwZkZGWmxBTFZTZGdJeHk3QlZ1RC8zWTlOMktnTE5EUHE2VHV3YzNLZEdPd3dMdmsvcmJxdEtpK1NJa1NjNHRJQ2FPcU54cWZhY2xGU3hZR3NyaUZsQ3FzODFhUU55T3NWUko0dTdvbE1OU201bGdxcC9nRHR4b2ZiY01zK3p1RUhPa2lJZjkvNk1OSWlSMEdUc2lQUGZvUVFpZXhOL2R2RG1jbGYxV05RcFdXNlYyUmVGc0hsUWk3Y2xSR2JscUlSWXY3QTBOWDF0Nm5wc1JCY2N3RUtBelJVOWZTV1ZEQyttNENmL20yNDNpNmc1akNiS2M1WENXOVErOVRBTFZwTThRdW9oT0ViME5mMCsvMy9NWS9tL3RMK1ZGNUhBWklmaWhNamdmNjVjS1FBb1VGd0VFQWdnTU5kNm50RTNXM1pCUHoraGVvTUVTQnIvZmE4bkxab0tDOWlzeG5jbDB0a0xzeG9vZ0pKZnB3UFM2VVgyeXdYSE85WE5WWksxbng1UTZWcXcwMmJEUzhzZnFnMVhqVDExaXpiRGd1aWlZWkErOHpzTHZ6OW91VUJBbFM1S3pSRFBkcTNpZ3h3UWxJVWttOWNLWVRQbkI4M0FUdWRXV0gvMmErek9UaWdGSXhBRlZJWlQwUnFOc2hyTDR4cCtaclpVSkFib3ViUm9ubDlkbWF5NXZpYTVKR2s3U200V0M0QzEyL3FzM3pZakdFSEJXSVdrcmw3cTBmV0dPemNpdzF6UG9pSG94a1NGdGhZZVRKdXlTZUIyb1hZWmdSdFVWVkZ3Z3BMeVlzWEhQREtiSCswSm45U2UzdnkyYXdRWE05WUpvcnhzSkQ5MkVYa05qL1Z0dFByck96Q2w5ZHg2NU1NRDhwUDdjeEFSb01EZU9Db1FOVW9iNzNEQWp3WmVmZW8rV2NsNFY0UCtPcXN4VnlJSTQ4TEE4bUV3RUIxRGd0RlVxeFVydnRib0d5dGZndWE0azM1T1R1VFlMdEN0bDBFeUVGOXpBU1FGRG5jc0pmRmhpSkVkcG53bVA4OHB5NjBJdktWd0h2eHNkOW5XeEZDaW5qQTRrbkl3Q3B2K0R5T1pOTlJmZDBYQVN3MG1VMzAwQWI3NUNxMVlWcWFLZXpXMnlzS3NHc0hscHQ4dUlZempIZzY4bElPaGJ5VkM5MXVoaEF4aHFZb2RjdE05UlFaQXR5MjZVT2Z3ZXQ2L1RuRm13WFhDd01ub0xTMzZKMzMxUUZLMmIzR08yZDJNNUY0TkNnNWVWNmY3WVFtMko0ZVlpdTB1R3E1b0VlM1JrYmFmdTNjTHkxN3pxL3VFb1d4aVhtQ3M3dW9LVUY2VjRlaWVLY2hIUlBOakdzd292Q29xdkZFa1hCUmNXTjdQa1NYN1NOVkNBVHdKaHhnTlV1cUhVNXlFUGJZY25SVEs3eWJIOHlSTURZa2p0L1FkZnErWmVTZzJxcnUyblJMMnpGTWNISTFnYTVmYXFpQTZWd08yem9MZUYrTmF4T1J3S05HdXlUWEFKR2lWa1hFUDUzMnZHRUVGdzBJazdJNW5VZVJDeHlwRUlpcW5rTGd2QjdMKytETjJuWS9hSllQdEhRRFdUdkhuK3pRbldEZS9CbUlvMTRmajlZRlRZWE4wdGlLZnFsenczNzVEUFlWSXZjdEtvUS93ZXo4bmE1aWU3ZnNoazRrazVuWXhYWThCT01XZnlDS1RiZk5VVmNCMTd0YXpHcDM5WEkyY2E2aHU3OFQ2dVNiKzZPbENqbFNiQjdyVlNhWExDT3YzZFZEMiswbUYxRmx0WUpQWkh3djZZMnhqajRzbWpmMFVjMm12aDNqS01EV3hwUVdodXIvc1BqdVFmMDN5dkRsZ2QyV1l0bk1TdTAzWk5LVUw1ZnFld2oxaVdEN0RTMFpRbGJkcm9RMkNyM3BSeG5GZ0pYVG1CK3ZNZnMyeHRzY2ZIQmhaSzhsRnZIVzVBd1N1RWFVMzVmV2w0NFBCS3Z5anduc1NWUVBwWWNMRldTRlpRY0JicmVKcXZrWEhsNk1XT042WVRJYXFyUXQ5Vy9ORS9JWjRxZDd3eG1sVk5SRmhiY0V4cUordXEzeEVlR2ZCU25uUjQ1QURmS1htWGlMdW5UNkpFbUYrSnFyS04wR0tvQ2s3QWNtdnJWYWFKMU5BeHRldUp3anZKQ3hQTWxhclBKMVA5NnZqOGhLY0NsekxBK0xJMWNIbkplT2dhQ2RIUkJPMStLU2toWFVabFA4OXhZQk9xRldYakxIL1oyemczSlNmdnRUUkJoTDlKYmZvNGlUS1IyelA4azVVL1Vxd3RIem9YOFdVOGZDejRHWWpVSmZXeVJ0OVhRUXZ6NHpIM0w5S09QYVBOdW00eEE5SGdsRnF5elhBSDhNZEVyUFhac1RwNTliRVNlUXQ4akNweWgzNmxjR0JRR1UxbVZMRVNyN3JzRnZjRDhxaElMMGhNVS9HS3pyRldIWE1rQ1UvS0Nuc0pzTUJ4OXlPQVJ5WHVqZXlkem5ra3dRY01pQ3EwZkdBTGJVNGNnRnRuOVU2MU9HbzNwZlA3MmtManFmV2hscGZEVVI3U0p2ZHM2ZzBKWU5GcXFzL2tkdk5maFBwckJFbHBTajJGYURrLzBJZmRFcXNmNGlVMWo1TWIxcFNtK2lTTkZ4dEhmTXIrVE1ENVdOKzhsb0dFNE83cUNmVnAzMWw2KzBIV1g1YTQ0R004U3ZsR3FoWlNxclhDS21reXFhVDF5L0p0M0pxUzk5NGZkVG5TcW1qWmhQTWdxR3FBNnRhWitDSmQxR0JXR1pzTVgzaDNZeDhOTE94Sjc4WVVuM0hpTGxPd3F4U1NCUXJka2g1Um1vYjBOZG5ncWd0K1lxaDQ4bkpDWWM1anF1UmNDdHFUdElXaEoyV3VnN1VybFREd0FweDhDb0Y4MzFqQ1g4SGFsTmN5Wm1wZlBwVmo2ODFyenAwcFZ6elV2a1Byb3M0aEZTWGhWeU53c2hqMXJMUXpTVHNhVlFUTWxyTE5sYlZZSTdiakZac3FMS2VXNHdQREtoSGpsNTdrcHBvU0VERGlENW9RVDdWMHJEbUtoL3hlOHBwNUxabEs3TVR5NXAwbzNFOVU5TUFrWU1jYmIzclF0OUNOdlFZUDRBTHBCaDdvNm1RUDZVNEsybC9TVWFPdDVQVnJYYnROZkVYUlhOVHpkeGxGVGVVY1djL2FER0lzdDV2R05FZGsvdnJCeFFEV3lER1JQbVVnU3MxbjEwakRwK3pvTmhqa3VqM2dUcWhzcEkrbUsraFRUNXExcTB4K2hla1R2WkRiL01qbXhlTndPTXpBTzh5UkExdjlzOVlmNHRNS3VkTUxlVVVuNXR4WUdLd0syYzZ4Vjh5cWpQZW9mK0dOZ0FOSEcwTkNpVWw2d0hmT0MzNlU0R2xaQk51cmo1TlN6clUxMUtVMDJxS0NkdVkxc3lmaUdaWkphVk9zUXJBTHozQ1FaWE1hNlAvREJCOXVwTkZndFROeDZ0ZTcvQnlSVVN6bXIxYXNoOU8yVWdpUFpIUHB3aHZQR3B0aTNwMks5dUZ5UWVGTVEwRmlWcW9kb3FlWmxqTGFuUkNFLzNIV2RyOW4rMU5ET3FUc042cHBTUFUza2JSL0w2c0VpK21HTnFHMml1SG1wK0V6Y3hya2Y3Rm1tdFQ0bFB6WDc1eU9nYi84OGtuOFRrZW1kSU5RcTB6cHVqakpZS093cVVSWTE4bU1uL2dXVVNhemJQZDI3Rnd2b0d2VjhlK2Y5aW9rSmtQQ0JPOGlBMW5yMitYR2NTVEFOVFo5TlRPeUhXbkpncTUwbjJTc0NEelpYOXJ3QnV0TXFNRi80ZjY4azVTbEtBYUhPZ3Z5cktHaG1xNU4vbUsyYTVhM29LT1IreUI4cXF6V2VvSEdUaHJFdUdiOW16MmlrRXlmelJhbGtNdjFHUDlUWWhZRDZkb0tkeEtudGpkTHpmZVp2WXorN3c1cjJzZ0R6SHZ1dUFMSHhhUWEvS2t0TmpaU1VCUFZ1QmdDV25Sc2QrZG5ZbUt5ajdrdjVIRDlERnNwUGt0WkFNM3JqRE5QWXNQanBPNitMYXFjU1VTUEgrTEMxMk5oWUY4ZFRjU09LVjlKeVdSV3FzWU9UaGpFU1BYSGNiUHRxcEdCUEY3YWZLelMwR1hnd2N5TDdLT0UvRk5jK0xGdStoQUQzLzBEWHpKSCttM2UvMkMvYXgvTW42VzN2UVZlUWJzVkQ0Sk9PQXA3OGlybjNvdGNRV2dvL1J3MUNDNDRIOXY5WEFCc3FxdkUzaDJJYWJOZEVzVU9JVjNYRDZpaWUraGlkQkEydy9xNHJxQkJQbDlwRk9ybzk1ZnVoWVRVUC9nLzRxSWJVSnh6ZWZIWGVDQ0dWRnNsQVg4WlkvYzF3TERnR1JFK2tPWENzeCtpQWd0K0FOVSt0b05VcWpkZ2xCWTM3N0wvdU5zTjhZSVpPMDdUUWVkNFp6WVNlUXhoT0lIY3JRdFV6clZ4Mk5zQndDQUZ4NE1FVmFYci9jYm43MHZkYWFYNEU3MUtjNUpFYlNTUnJLcjA5VUwvUExucW03VE50bXVMWCtQZ2tqaVBtQjdNT3NHSGszcFhoRkVkNzV2NGlPWm9zVkJ4bXZBNGhhbTlESmdHM01XRHk1NE1jUTdJcU1SM3NTVm0xM251dER6YkZlajNJRWNkMUxQV2NEcUM0c2xaVEs5emlORkpHaWhTbUxVakN0aUVNVjBQZUc3WHBlQlAwSmZUTW0rK2IxVjA5Q0ltaENlaVBGK0xBaVVJL1NacmptNjJnb2NWWnpSQzFrWmhIU0V6YWlOTWtPUlFVc3J4R1ZaOUR2OVpVUVZQUlM3UlNacFVYNURYZ2VrYWlpZjNRVDJWOWZLRGpZSEdtY3dTekYzK2VSZnhreTN3RitoT1JIMlQyMkpFaHZkQWFxQkUxMUJNTmlJM1BkV2NMN3J0bVNDNklqenpRUVNkdFlsSVBlei9aRE9BWEErTWFSbzRVZFZVVnlWUXE5VVc0V3JsUXByRytxdVcveTh6d2JEMTFBc0xRT3VaOXFRMzdXT3g2WWR6K3dvUzJPS3pjMU1mS0Q4QW9tQUlmVklPMnBZeHp3ZnBSanRLL3p6bXlVdmg1YktiamhQc3l0ZkFBMDZqSk1QU0kwM2tVSDhDNlBrOGhqM0h5MFE4bHEraVFGaEh6UFl6QTg4eWhtTGN1d3BacjZuSXUraVliVjhwa2c5c0JxL3FEcjZCYUlUYlZnVmYxR2trRUFuN3Y3c0VSNXI0dTFSb1Rhd1Z5SW1uVm1HWDdmV3Qzc1VaVVdlbFlBZ3pDdXRuWmU3SnFiNTBoQjNpZE9FZGlNeU41OTJENmRRSngyTkZESCtkdFNJa0NFTnNiODArMDZvd2QzMGlDS2VCR01CcXN4dFU2a3VycUZXWWsvVUdkeUY5UlF1R1pWZW5uejhFK1ArN2cvcWc2UnJFTUwrdnI0QnBsY0FCdDZkcmVOaW5rQzd6SWExc1JBdjVSRkNVMGIwbU9PczB2bG1hSUhreEI4RlRQV1IrWEVpeDVVTVRvd1BsSW81ellIL0hIQmNwL0lKWXk0UTVaU1FTcmEweWJzeDRGcWZvRTdWdHhCc3VLY0VmZG9ZeHhvcXlQUFhCMHhhemhQb0s1MmFIV0NQcDMvWkVBN2hlZEJCNTZPb21jakg3c0dua205YmJHZWFnRi9nUElUVEJlYjhNZlQwdC9qNUZ0Y0xSZC95NmlHNXkwWVFPelpteFdQRUFLZ2ZMN1BjZmUzV3hjOCs2TjBvMzIzK3dyMlAxZjNHMTVaWE1hMzhJa2tBU2JCWndpQXlHSUtnZmEwdmtiNjBNNjJlclBBbGlnRjRyUmNXZWtNWno2TU1wQy9rdGc2Kzk1eTkxcmMwbk1wTlFPS2x0aVhsS2tnMmNFazN2L0N0ZVhmM3hscDRyMStYSEowQkVLRmdRZFErRUxkVlg1MnhjVkFhd21UejdVSGZaQUI0ZHh1OExxcE1XVDQvOSsvdVlnQTJONS8xbGNxd2wveU1zRXQzY0kwMis0V0VwUDdGdmFyUGhReUY3elBUTm9CeEdScWQ2QVQwSDhqV1k2ZWxxU3F5T2JWVEVpYkN3WndMVHQvWlZjYzdMMGMxL1dqTjZtSkJTZDJUZG1nQndtS0NkVTNYL3lYVGpCakovUmthV1BxOTlTRmlsWjc2T0RodzY1bkp6ck5jMEs0ak5sblFFQXE0UlhvWURldkJnNDE2SzhHVmtObGZUTzFpcHd4dmV0VHl1dmd5TkNKRC9Tam9Ubk94b0NPbDRYZ1RkWktMYmw5MUptYUJhUElMQUQ5REFVMFY1OHZQeEJPSHZ6bmdudFBsN0hubVYyYjdOYjVpNDJLY2hHSzlHVEJsYXNxbWRFMHVkeUlTVUF6Ny92ZktOR3oyRk50a2lMaG5VMXN1Vm43emRFZW0yVklFN0xMSnIzUHRJbWw4OFBaY2E1T3dRYkhKbHB3ZkxtRERCUHRmNzdkUHdIRGxwYjJ5SzErR1lRbkVXbk1XbmxvNUJTOVpVbGN5UGxtMndCaC8wdGlLMjVlNVVoMkl2ZDhvRTlFNWYydWFWbThHVWRxdG1FSGpKbWZqbzFzd1BPWFA4WkdkaDNLYTZyaG9TdVZUSjlvajd6L1FaMG81RUQvZmJNUHBFWnZnVGdUWXRkQ2NtT3dtN2dTTWh4RjJsUXlNNTFoRGNNa21FMWROMmN4ZW5nOHdvS2xOWUVuZG5nL1h0WW5xN01tR1FNYzFPby9qWDBlcDg1eFNSbkVOcUpzRm5LMTlLZ3huRVZwWDZ1Qjd6MTZ4VUxqa3RkcWNFZ0xBbVhwVCt1RDFKWVlyN2dxNm1LMDdocndldjM0VUFGYTJXODJZejZOd3l4bEE4MFFIbjRoZ3BUd0tQWDZ2N3BVSjBDNjV1dmJldEhlTmhNbXlqeldPcmRpWHFLL0dXM3lkQzI5SzVRU2J5ZmFZRVNXNm5lZ0N1Sld5TS9KZ0huNkprek5LWjY0Ung2bFFpSWZickRyaVRJcUovME1INUhQck9pOFpDbmptNkp1KytVOEZZRlp3dFNQVmZMSkJmQS9mRzFwK1FoMmxGeVp0cENQVGJnYzl1OXRaSC9kNVlvU05ZZjUxRTBUSzVjMjVmakVnNTFIWDlGT0Q0a0xpSmVGb3VBdGprU0F6SjZsMU45cXo0OHZPb09JaDhyT3pHc3JSWlh4RWlmektqcS91ZFEzQUtGbTZkemxOanVjVkcwbkZGYlBBWXhOb3p2VWJKYmxEYUdxRmVrU1FTbmVEcHhWaHZxYjhSRWxXMDJNQkF4RFg2V3N2UWZHVUI3NUZyZFJ4cVZjZDFZOU14c0szbWU3WDVpcHlBRG9MVkNySm0yTW5PTkovcGdOMnNEb1F1U1gvNkpRSGdBc0FDZ0V4WlViQUZEbUF6TVZwdVpRcHRUNW5ZZFMrbG8wRnlUb2pubkg1aFhHOG9za0tFMkYvTnl0Z0ljRkJNSEhBMzNoUWRWTXZhNmpMODVtbW82UzBrQktEUWF1WlVHeU5RUklSQ1dlSmV0dXdaQ3htWXpMd3NMUVdHcmMzeTFNZVVpMjJyT0VZNHpxK0xmWCtrYURac0Fvd2ZvUW5nMzU1WVVpSGJiUmJaWWk1amFUS3ZJN2VibG9uVnJlVURMOUdaMUgxQ1pkVHlrL1ZSVCtoZjZ5eTZUZ1RUMmpkWWZBbUdLN3hML044MkltaW4wNmkvdUJJWHJYVGtST2psakxGUmRQRHJHYnIxbnBKTjBtYk50MEpiSFk5RmIzek1HUVF6d29MazVESS9LR29oSWxQNWZJMmZzWVhZUTFldkJpZHpJL3hNVFZQVmZIWTRkU0hQNDQzVWxIUjRhMGVPWFMvYU1MRlhnWjJxNjU1L3pGdG9qQTNyL1hLUWxoOS83SWlscEE0QWVYS1lDRzhBYlMzekloNmZYalp2bGQ3RzFEVXFNcXZjMzROZnlCdkFNdTZ1ckIvSEY3cDNwTHY3bkFkdFhsQU5yb2VxanN0Ukt1dFg5WGJ0UHVzemhjcUp3VHFSUGphcS9sUkJpOE5NdFd4TFJ2VDVwWEpWQkg0WkpIYmVLTUphbXZWK0ZpOEVkN05KTFlndjd5OWpHOGY4Yk5kdE5yOGRFNnR1QXkzZ0tZallaMEhQSjQ3UnEzbHZWdU00Y2NBNUpNYTVFejRsR3ZhekxVZk1JNkt5RS8zTmRHakRIYi94LzZ4a3h0TjZwSzVPWHVQOXBDbHhheXU0Y2ZNTWM5R2NwMmNYUUg2eVViVkkzRStNdkdLcmJZUFNJcmV2QlM4ZEI3THVSRlFqVkxYS1h4RDlGZ3FITUx1eDhDenNXenZuL1NqcUVnenBJZDkxUVVETEdSeWhEY1BQT3ZLOXVSZGVUM1V6VGRPc2ZTWWZGYkR2QUhBVkxSSXhQeWVHdUNkUEtETWxHcWJQN2FPQVBSUlFtRTFycFIvZWMrT0t0aUYyVmpYVmVKV0ZiY0syOGZhNS9VSVE2alpSNTlEZ2ZoY1R4YlBXSlBJMUFhSkNmSTBwaVZaVFlXcmRlVi95RWJKR3p0U2dyU3d6cld5NkdaWG52WEl3S2tpMzJSRmMydmRjQ254Z1U2YTRPelJIU0RBNEZrS3hvUVNGNEwvZUJpYTlLMlUzQkhPMmkrTktDTmY1WE81QVR5NEdkYUdzZTFPQ0YwbXU1YTE2bHJCYm03NXRubDBmOGRNbTQ1ZmtMS3IwTjVBTnJ4b3NSUVZQMHpUWHlkSktPWUo0dEY1NlMxc3ZZSkE3UzlkbHhoNWpxV0o4ZVFPVXFQd1F4bkdOenFHdHNOR0Yxa3ZveTFCK1d5RmxpNVJQR3haeE1NSEs0RmNKRlQ5UFF4Q24rK2dEcDUySmFNdkdhZGt6dkUwR05lcHdFNW8wb0hNVGtWZE9QdnA4NDVTdTNGdk5KQXBlMFdqZks0V0pONzlTTjM4QUg5Q0M0SzhXbFlSQTB6Y25MdW1XQmRjY2c3UjZudWlIYTM3T09nbDZ0alFkaUVaQ1R4NWJUYkd0TkkrSGZQVVRQQldZWUpzb3lZc0Zxczc4OHZYV3ZHa210dEtQZ2FKQmppdUZBcnUwLzRqc3ZYRlh6RG51ZkRoQmsxS05OS1ZQaWc2UHRFMTMvYnZxZmR6anEzRDdiNnlON1llMGFwK2pOQ3pTY00waFVjMlRFbEZqWnowS3hNQS84L3JmeHlVeUV6bUpoVHVRMlRpazkydXR1ZTZNcnVVb0t0Yi8rS2w5NHdsQ1hPd1d0UWVJYVpFSGVnQ0hNMk9qWHFrQXFCeEVUcFVzbk1zZGdWMVJaalZKd0huSkN2U2tHemVVWklQd0dhbU96Ky8wNDdOOUEzTkpRK1kwUGxLakdGK3RKYXlSNisraGp1am9oaTlsTDl3bndrS1QzMWNoWUtZNmgvaDJSQnVjSFFBNXVqTzd0YnArQlVuMm5HQXJsZHB6Uk5xMjBOM0JmV2ZJMHkxaXJodGZ1eWtMY2laMFBMdmhsRHU1WFdyd3FubXc1MGJaY2tpSDJ3Y2pUbVVERmQxLzNVMDJrS244aWZPTzNxRXcwbllZMC9VYnZqVU9KRk5ROWttMjF4R2JpWUNqL2YrZGhLMGFDVDlkOU5vSTlaUWlPR1JlWDFzWnJMWWo5ckhGTE5HY29FUHQ1K0htQlY2dy8vTWhYcHFoUmZmUDBSbEYxdWlrNEdCWisvcEovZ2ZTcHg0b1RDR2VDQUtkVktaZDF3TkxYaEhMd3k0eE5MMUNyS2pLNFBPTWdQVUozSi9ucm5SNWE1bVRsWkdqYlh6S042VVF2ek1yV0wzYWRVcXZoVytpVC94WE9vNU12RU1BeUhBdk1EVDJ1eUg4a0FWS3paazFsV0MvRkpSdDlKekU1Y2RjcWlkcjNPbVYrV0o5S0s3Sjk1L2hzT3Z3Z2NRWUY0YzZ1OFNpMzFzLzIwZXRlZUJkaEpCRnNaNUxLb0dmOUVHWUp0TVkyNUpiZTlaa1UxOVJkaVlJMVV4Q05hcHlFMzFRa1NPZ3hFOEdmbmZSQ1liWXd6NE5HdlVzamFRN3Bqdml2cFFIT2ZpazhaK3NOQ3VKMDR5eFA5bXFkdWVhektKREpuOWJFdUljenRsYlNTSjlOQ09KWS9FUFEzNWcvaW9La1Fsd3AzMlg2U2ZTeE53SUJJd0RsKzVOWW4vRlA1WjREN1JKK21vNmJtaUVEZFRldUJOdUdXZDN4R1kyaHEycnpWVmptM1A2NGRVYWJ1WDhHSXkrcFJnSnUrbnlBdDdjWG16cjlQb08wZzR5RnpuRzJ4Nkd4NGhrZXltaGZrQWFyRTdYWEkrRTR0UnMva2EwbXRKNFdab3I1Rk1GSGFZZVgxbGFNbzJzTEhheGlTM3RkanorTkJiU0dnOE9OTXJlcVNVRDNzU2Z5RmowOVBHNlhnTU02S29Hd1lyQy9WNlhKK0tnbUlNdk15RWpyY1dZeEhuSlYvUGJpVDNrRTZhbFpTUk1XcnZVNFhIeHMzYVUwUFJ4KzFIVkZrQXgzWDNDU2ZUWXNQUU1wbHJZclBEcVRTMlRYeCtpc1RITjNrK0VySm9BYUhnMm5UQ0RqdnkrRTJEanpkMERBVktOMzA1Ylc5ODRDS2pZcmRiYmlwK1NPelREM2lHdUlHSXVlTVZRM3pVS05LbmhxTkpjSUZkMzViVVMwc201b2dXWG1NL2J4emxmVEc3dzFwN2dneUtqa3RveUpaRUFZcTV5UWtsc1h3WExmZkFKbTVwTkR2emZhaVZRYldrTC9IaitPSzVwUzRJQ3dxNnMxV2NLSEc4cENDMVNyWm41SEIvQWxUTWlMTTVxZm1uV0c5c0FiY0VsREt0bWxKU3d5RFpENEV3a0wzdzhWdzVCWi95TCtxUzI5WnluU3FlV2JJa1U4bTIwd20yWVg0R0lPOGtMYXM3UW9UWUZ4a0p2U1d1OUd2U21uUUE2dmhLVW9IbHpWOE5USkhXME9SL2h2NXV2cEovZzZpcU5iYVZ5YnZiRVhxNEtOT28vK1pVYVc0TWI5Z1lhdE8rYWlMRVhaSUxWTFUrQWx0V0pjcStwVFVYWmxRY0JXRnZzN1VocmpRd21ZZ24xaFlIK3Y1Q3d0TmNkVWpnME52NlBEb3g0dDZCT1BSUm5vdlhtNGNFNm1XUndBNEpxZFdNaUtNTm82MW8xYVlmT2Q2Q2JvSEFRTmhUb3ZNN1h3VHFPZ3VWUUkzK3JQZStwWXlwWkE4Y3UrcEpkVHl1YWVLeXh6emZOT0MyQzF0a0pBU1ZJTVJhOHVBekE3a0FFbGNpbHYvd2QzSEcvSUVsa3ZwUE1XeGdQTXZ6dmxZb09HWGx1UHVaOTVJbVpkR3ZTSE04MUNVQ1lSdnlmTjByckhoWmtmbmZRV3Y0ZnEydllLT3dkWDIvblZWMVhXWGhYUDk0eXNEeE1yVXpwSkxRTE9VT0NxN3pvTE1kQXdvVE1ybFVKUWVlZXZqdG1PeUU5V0xBaTBpZGgzZWlLeU84V0c1Q2NlcmFSbnRya1ZHL2dkSFNUTzFCRUVVYThVVjRLeERCSTBVamNUbnRiVWFrK1p5cTVuZ3FmV2VjSXcrOGE2bWEyNTlPRDNhUDM0L1UzbCtNaWFrWW1oYjllREY4NGdQYVhOY1d5MDlyUUdPaHlvcEtDUEJxWFBCYlVOcU9ISlNZUWRGaW9QL3hGcWFzUjJ0Vk9hMk0rQ1Bwd3Rnalk5SnpvTVBpY0orT3JnWTVYb0hGU1hoajRDYTg3WEtkWTA5VXE5SXk4My9GYmVnYy81dWk3NzIyZktFa01jdFhLMzRhWHVvck53YU54NEh2d1JQZXdYQkI3bU1EUXA5SjIyS2d5YlNudUtaQjFISFIyRVRTbTVXV2F3WUhLcHB4bTkvQzloNmlOT0lMVFVQTllGR3g3cm16dllRL3FWc3VsZnFCN0d3TmVwWlpqUHNlU1h0WmdSZ2dyb3ZHMHpaTUwybW9WOVA2UUZQNFlzT0J4ZzVkY2ZrbTNlMENVWDBIZGJkdXJTbUdsTHd0UEpYVERSTkkxSnArY0pHQjVmNXlodVhrN0lzc1JmaEsyc0tKR25SM0hlUUpYZDVjUUt6QmsrbjFHUlhSR2prZjJOajU3clFqK2ZoT2RNZlE0MEVyMWZQNUVMVzFtQzRmTTRpMk11NnRLWHRPSHNtMDhGSUFMU29KWnN6aDVOL0dyMzZJSkVXWGZtam1WSXpZR1JWd2pjbjRxWFFvZDZudUIxZjE5Um85cnJrUUd0SUFYU0ozZUp1SDlqYlU4eEFrNFRKRitsZVV2SDYvSkk2WFU4NUNSZWs1WVRkeTBwME5TWUxVWFErV0RVdVRwYjl0eHhtdUFNVHN6cjVuTnRPQXc3bGNjTlZ6L0ZVOC9DZkxWcTdHVitaQjhOOXUwTzZmZ293cTFRRnVkWWVhQnRhRFN2S0lhOUlwaUpyNC82VTVTSmRYWlVGbDlGQW13MzgzNjZmbXZEOFh2bWV5bUN0MnJWTVFvUDBSWTVjWFJ0dWdLbkJtWjE3bVlNUkxQRC9neDRDQzBNRzlmTzhYVk02NFlpTzkxVStPcThSRUpHYS9XTFdUa0RPTUVrTmJMT2l5UG11bytMdE5wU2lYRFVpb093NHI2ZVcyK0R6N0xSU1REcEZEaG5EQU8rUm1sU0ljaUQ2MjY4eFlVQkdmcXJPU0lyNEFPbHJIRnhoTE5yMTQvWVVrM25UQVBQVnFYWTdvU2R6QmxKdGVkdnVoSmw1c1o0Sm1DYldnUDZQNS8yL2M5NzBDU2czQTBPQzZ2OWhEUzJNQ2xzWmg2eVRmdkozNnJuamxjQXJzZDUvMm8wTlRQbVVSZ2RtWDVuOFJLRDliLzBVL1RBa3NkSUsrZStORlN4T0NEZ1BTN2t1aWl5YlZvZ2w1bTIrM1JRQWZtZDRRWlBYbW1VSnhpNEl0OU1tMGRkTXBHaWhOUm5FcXNjbDNoaFVEbHU1MVB3N0hvVVhhZCtScnNNUlBta2FEREpQbjFpODNYYXludkt0WERiQm5aR2diOFF2YWhFQkxDdm5wZStqTHFCK1RleGVWQU85b0cwdnlSN3BETEg3THdGLzJjT2c5WU83b1h1NDlzVzNPdVhwSHRtSG1BQ3ROOFNKU2JHb3dXblRjK2xqUkFrc2pMMUZQUldubDZ2MHF6L1oyc1oxcXg5LzJMc3dYaFNXRlVuTHczckVUeWVVZUtKcktsdkt0TzZyMUo4M1hpdEVHbk9rQm9rcHVFN0orME1nRkdNekxZZHFrdXZVbjY1eC85bHVrT3ZzL0U3cEtlOXZmZTJQVitkZ2tpRVhrZUY2RVhUakFQOFBqZUVNc3dhY3F4cmpBcjdKVlRhQWtndXRRYlIzSjd0cyt5YVhjVlA4b1RYWEJCamVTM0pvU3ZGMlhweTdtRU0vUXpscGtBQ3dyYlBEYjVaaXhxTGI3NDQ2VHprTHV5NndKbUdIeUYrL3JtaktiditkOVVDL3luSzV0NnFiYW9VdWp4Z0FCNmtRNGVCeVpkRFZHNUZmSmtRdHhlNTQ2SWFDTENTcEZaUERYVUJGMDNseVBTOEcyME03R08vOUdkeFo1OGY3K0Z2c1psYk9oNkhzeFBHL1I5dUFmNWxWRzR0aUN3aHRxWUlSZkJHbjJnZWtLNFRLTjk3NUxuNVdiZjhZT1Y2TTJBQ2lMTkZINzFoQytVaXIyNzkvMVA2M0NNTnIzYjY1YmxJWmVkamUwUmp1WDBUVzRUKzhtQUhZSWdCbzNOVXYvTS82NUVjY3JXdXpMVjlZc2NjdVFSekNaRUJZV2VHQ2dkQjBOd2UwbkRROVp2dGRSRjNxSHlKZ09SbTJlYW5lbm9ZK2h3WlpZZ3hpUmpFbkZMbm9QdEg5VmxjeTIvMDhoc0U3aVpuOWY3MkM5Z0pCQ3Jqdy95WTZnRDNsM2J5SXJXWTZmRStTSjQxekdYcHpZMGVBeE5nRlFFL3QrWjVnaU5BMStxVHVmc2pLa2JSTFkvb2pqWmxPUEtIN0RPNDQvVTJYdml3Y3JLMTlqVklHaklHZEtEdnVEZWM3eDlWU2RMTW41R0RMZURNdmZIQXFRTVg5NXRyd1doeis0ZlNmMkIySm51SXdJK295dVcwNVZZK1RFWjVSWlM5d3FaOWF4YlpXMXNjcHVzSHpuanllcngrRHFBMCtrSnZUWkF3RktuRmo1ODVMc1pSY05wV1FzRHlZb0JvTEVGMkVCNXB4Vlg1YWI1bDljQzF2RGVLWTlTZmpxdUMzUHFiTklCeEFqYzFGTlJ5Q1JWQWhTalJLWmkxbHk0UzJ4L0Zpa2F6M1QwZlBPbUdzalRUVGxkVWEwdURkemVyS3dtOERJNFY1WTdTWnBIRk1GOGpjdUdMaDNLOXMvdFZEcmJrRTB6dDVqSCt3MG9MMUk1ZUJjMXhkYzlhUFB0SHhWUUM3dU1jLzFLU3N3ZEZFU2YxS3VCYmJRZ2REU0dPaEhKMTQ4RFdTQWlZS3hJZEp3d29odlZPdVE5OGpoRnpPb0MyNlkrRlFpejU5MzhKN2hNa3JYWk5zcG84V2R5d3FEY01ab3pXc29uYzFVZFhxNzdMbnFkMHBSMTlYOVRlcnFGTzRSdCtoZWllUVA5a05nRVhDSmVoUmdvRXVXL1lHUHJtb3pkMjJtdDExTW0rM1AyekI0WkZXWEd3TStna2d3aDBIMHJKTFQzaWhsc0hTUjNsSU9PeHdCWGN1dzdDWUtkVFVjUTE3cXdoVExqbUNpdWlENXRqdGZLZ0MveDF0cXFhc0RhWXNBc2gySHNnSUlOajJ6bG9uSG8zQ3FzYlFMdC9ENitxL2RpRFVyeTZHRnRCQTVFV01ya0lwU0M3dW9OZGg3eWl6ZlhiMkFBV29DRnlCU2dZQjlsYjdwcWRyL2E0eitkWlY5d28wM3pRZHdiVm1sWWZwb2lHRlhWT2R2NmNDY01lWU1PdmVSVkphZjErWDhlUzRESkJ4TVMveHZaci9kV0M2em4vRTRNMFVEKzNjSk9qazVlT3FRdnZ0c1dmZ0JIM3B2Zk5pYnhRRDNQMlFqQ1M2WVNhQXhpVFowaVlnWlZhTElkemsxZjRXNnNPZTdwZzJqemNKak9VSEJwS2FvZTgzTUc5OTFwWkR1WFhUYjlLekhZOFhJUzZseVFwZk10NDJHNi9RM1o5TmI1T0drWWJUWHN0Skl6emlQT0RsSjZuejArZWtZbnd6a3E4d2FhTUpCdUJTZGNLQkZqYnF1R2RCRzdxRXBXRk42eEd3VXJkRDQzWHc3WlZxQ01yQ1ovM2xCV0h3aUNqUlRGQnJhMXJxNUVJdnVSaFN1Mkcvdk5QaVo1ZUMyUDdJazhSczVRbmNGaVNOQzFaNHpYOXVnM2lsVVhVSVMzcloyejNMM1RFVXUxdCtXdkJMY2pvZ0NES1lPUTFJWjluZnh4S2dzbzFNQ2RoaTBUaGpmQkRJcWNqR2cvVkQ1SW8rTllmeVFmRFZPbnNabkw1cDB4TGg1Rm0yUnA1VWhEOG9haW5yc1BuQzRucmgvN3gxWDRsTWRyTDRpK3dYeE5KcXdLWmh1MzA1aVRlVEYwTGV4bzVBVnJQcjJhRDBoK25SbDFkN3p0V0p4SFRIdHFEdkFNRDdiMVZHa3hxZk1QSmZmdlNXeU42eS9SZWxwUDZ5UmthWCtzOEplQksza0tQNHQzejExb0pjMmhwZGxhZ1NqQis0MDJ5cTMwUEh0WDEyOHZBRDJXKzhTdlUzZk9aU1BVcVZlenlVWGlKT3dQUW1WcHBUOUc4STZkSUZFYWRxS0RFcHNwVWR5TEE0UW5jcmdsRnlBTWtQZnFQSEdhMUdKQ1plZkw2UnlDZm5SR0tiZWk4ei9INmxkQVRzOHBidSs5MVpadW9mVXgwS3pMaVVzNE1CVy9aSFcyaGM2OFRnUGxVQTFFTU9GZk9ieXIwaXc4ZGpmcElVN3JNKzN5K3puUmZlTnNmUEdJdW5pcXFsWVJqQ1NWRUtUT2RScG5nMHp0dUFNa1pMMTlOOWVvVXU5WGd1eE9pYjBLMWMxOFBNMTg5ZUZTOEVXU2EzQlpBeXE4Z0k4ZEhEdnFJNld5ZUNaaVB4TnVmUWhoYUdHQUhublVIU1VCdld5dHRTWlFmN283ODJNZEI3VXNmMFYzM2p4WlAxMU1qeFBSc0R2bVpJRVlPaWhpbGkza1FjK2l1aEZpUWdsTjFlN0JCdnJRRnlUby85RlVnZGhuT0VoV1NOVnhpN3NiTi8yWTVKd2VtTjh5b1BDYXNTVmJQbEtuc3V2Uk1YQUhRbGMxdndJcVFhNGhLWmx1Z2EyUVBXc0pOdkJMcjU2TWVWTUQ5MkIrWmQ5SUsyUjRJMG1waUU1Y2hrSGdYbzNLWHRZeU55T0I5L3pRWTBaMUExY1d3UXlLS1lha3VhUThCVkNLeFRPQlRyU1AzakwrVXF0V0lpZ2xRU0JjRWVUZERsSWtJQ2NQOU02NFV2SGRDVjNEYjFmMEZVNDBDWVBhcXFJVThjQ29mb3gyKzAvekZSM0N0QmFuVS9xeGtYc3ZSV1JvMHF6YjgyY0ZCbVRQS3pCdk91b3c2Mm9RS3VSV2kraUNqUnNOT3ZNRjJIL3FIK0twekphNEFmcEpMbGVEdmpMY0ZvNkRuaWZZaGhjQS9PUFFhbmQyN3NkUTR4cFdOcHpnRlFCUWllejJKRWVENVpBRnI1TzJ5Zk9PNDNmWUlubmp2Q0lBdndOSDFmVUEzNWFWVzZBcDdUWGNBRnJUdDNrRHpJcGhrSTB1YjJDbUFzbnNJUVRSck1PVnBkZ21BdGsrcHpseVFtUE1XTU1PQSttcDNoem1sVWF4Q0QvYS9yV0tYMllkM2RGWTJLc1VmOTE1ZlFNYi9SM05lczJUMy9kN2ZnZjlaZkoxVEZpMTM5dWFKaXRCNVZGMkljUDNQUktXdWFCY2JHYUl4OEV1aXJIVjY2MDJjRTFYUkNvb3ptUTZzUlk2aU1vOFFOK2xqR1lxOHcvdGlLdWxhT2NEYTBZaktab1puOEFCNHJ6TEpWSDgzSVVJNWZSMEc5dGZabXJIY1UzcWZLbFY3VVBaQ3NGV0J2YS9jc1VFdFlzYlkxd3ZnclNEVFZScU9ERFhCTXRzVG41eUtNRW9JQ05VcnBxb2hDWm5DeEpKdU9NdnVVSnp3NHlueWR1TXVCYWlDNnJhOE9jUjZ3VzkzNlp4WnpscVlZaXNLeEU2Nzc3a2dyT00vSndtcXgrd2FWU1JvYmZwc0QxTzg0Y2N5L0M0ZlkxcUt1cVFaMk1nVCtBK0pRUVZlS0I1UnNsQ09LKzlRdGVNZVBYM2FnS1FzckhuU2tUbmt1VnJHQUhMRUtVZ1dxa1Nrb3FCMFh3SzlMMC82ZHJ0YlhWMnE4WUxWVGNNQWlWQWxyUkhxM0VnaUREK0RBWmZVaEIxNHZDZ09XbGNDdXlUbWpYTHdsc3FXbDJiS21PcVFpbUhqbjhQVE9uQVBIZkd4TnpqMnpIZ0U3WDg2QmpxTjBJVkxKdnJ6aUhVdTg0YlZoTzl2eGRuNzU5V2RsOFBHd2dnSEdVc1BIYlE5c2RwR1lmYyt4alhDc2R5cXBxM1ZwQ1kyeE16MjNtbWZXNFdKcTQ1ZG9Bd2pzYllLcEdxRC9lRzV6eWh1S2RVV2RDZ0tSaHU4MjljeGZlcFVyakpuS21qcmlBYXZDQ0FkS0pNMlZGUW9nYjdRaDI1eUlBNHhWMTllNkhwcDV4WC9XT1FsY0hZRXcxM1RqWnRsTk45T01GMUJONlNCc2I4cFFLbzdrOVcyRE8rblJpZGlxTWY4UTVHdEFsNFh1bHgrMFkyU3ZnamtiOXBsM05qamJmc0ZLNmx0VFpwZDFHdExJR2FRQ0Qza3BJcmk1Y3VtckpiVXV5a1NFdUFPQVhrUXFyamEvZ0k0QVp5djhTajcxUHhHeThMNnJtTEd4UTZaalRpaFFjTnVRSlBNUU9RdEdOMXZHRkorY0pHeC96cXRJenRrMVNraDRBUERuMitZZnc4RjdheG9sUjFBcXRnVjJkMHJFYkgrcXk1Q09Cb1VCZDEzcW11emowNkRUZDZJZWg3Mk1aejB0SnlNcFlrS204RnZJVGtjNnJoUWtId2tjRFpXZzFsN3RFVTB5cStyMTZBZk84Wkd2eUhxa1A1UE85Uk4wb0JuVmhEaXkvdHFPZjhaR2ozZmNZRm9ReHJTTE95TUNlWHVoeko4cTNxQndGV3MxdXlyK0hQY3lTZ0xNNldwTkxXUm9abTdQVXRpcng3eEx2bVRVNlZ6Yk5mRE9aS0w0SXVyRTB0c0ZKTThxSTFCb2pPTXc0SWxCRDFMZ0lDQWdJQ0FnSUR6L0QzQTc3ZnNZZSszdFp2dCt4K3ZzKzQ2L2g5Tnp2Mi9ieWZzKzREL2NQcTZmMi9TWi90K3JqdnQ5blBuK0h2VC93ZmJhYjl2Y2QvRDdLZjkvenM3OXYwMC8zaDlwNWZaOXd0djJmVTAvd2ZUUVgyL1dVL3Q5bVRoL2I3WDM3ZnJxZjh6c1A5dCt0bC9aOW5sKzM2TkQvYjlpVit6N0Z6ZnErbGcvYjlEMSszNmNQOHIxekR4d1MveXdyVzJpUktHOWt4K3N5MXFldnhUOVV3R2lZc0FuWlgxSzROQmQyU3VWSWNDclBWelY0VllJbEhBSUowYWdnckozNTUrbTB4UFZsRDZFaUpDVVhDcFUzSWZrek85bVhPc2hGUXhrcGxHRnNQRCtwZCt5ZUhCbWRtNWpZRlMzTXVkdE5CQmx4c1VNZzhHclRBRTYyaElHS3UzY25UYVZCTC9lOG12WURvd0IxQU9tS0hxZTc1ZGxHN3VZU2psWUF0eVpBR3YxRWNLNXByaU1iNG0rQysrY3lBQitDMjZpVHJqVjZCZk5CTTlzY2hOdnNrTG12N0Zyb0gxMW53dmUrU1JtRWpkcVFyYWlHak5JbE9CRXpmZU1WK1JETCs4b0dwdVA4UGxMekk0ZVlwRzQ1b25TTXV2ZzFWSzVxTnhEUmFCS1JLSnlkMlBMaVphSTFqN0FTZ3B3SGxlVXh1RjNBZVFDZVBYNWtoSHJPQkxUeThIYnhUaDFZU2VRQ1I4Y2haaFdwTHRUYURVM29MS0tNbFhwbFpiSHMvRjIxZEJucHJoMFN0ZVBIMFZIVyt5Q2ViVWJEMXFJMmgwQTY0UkZhT0hzWXZpS1ZDK1JVSjZZLzlhcEhFWEwzbllNTm95OVVPWXZQanFzTnNyaCtPSGVBVGNvSFBXRzNIWE1ySnk5aUhaSSt0eURNd0tySHUxZEZHSnptM0dJVkIxZHlZZHZEOGVUZVJlU0x1OE9YMEFNaitmaUgyNWptRjc1TFRMdjFZNlNGdlIwNW0zTitpbGhESUxsblRNZ1FJQlFUNGd3Q2VDOXU4TG83SWU0NGlSazk3UHJ3S1lSMHBxRHBmakxjY3pNSkdLQzhwY3VjcTVFc1ljVG5laTNjc0V2R2ZYbUN1eElEWkJyUWVMMkN1M3ZsRVRCczBxMXkyT2FxeWp4dzJyOTVJTEpEeTFIN3JEQmlsSFQxNjh6TVNodHZobjNBdlpkK0dvSGpRL2wzbnBSUkRkekJ1VzJ3TlVlaW4rT1NHZk5nYVJyYW0xQzhzSS9VbUVEcmNIRkVTaVhpaCtIeXRSbWJDOXlNR0NKdW1oaGlwY0Z2TU5hTnFQMWFGWnEvTmwxSmMvdW92d25obHo4RmcxckNCVjg3eGpZVkQxOXlPb3NrRmNhOFBBRlQyYnpFNEJLV0I0Qmp2YkFzVnRkaDJUeE5tT2gyUGRwdXlDOElIa3RWWm9rVmt0OFVWdkQwaTN1Sjd0bmhGMW9ibFJOSXdpWXVWZFlDU1pSTmg1V1lKdTNUZTlzQVl0dnNKYktsVE9EMGlvOEZybG9NSHdEcVZMZ29KeWppOU96N2JXSkFXM05VZGhlL1NhaGZlL1Vrb1JSc0JRKy9PMkNNYzVSTHpGYkVTd1EvbXNrZkFNaDk2S000OVRKdVhycnE5TS95aWZvT3FsOWZ3ZFVZYWwyV0RVTjBYVWdzanBoRU91OWFmalJQMnU4UEx3aXcvd0JjQzJkVU5rNENPRmVWZlBJaGlSRHhmNEE1Ump2dkpaQ2dhaEFmTXFxVzZZaGt2aDR3eEw5SCtEcTdSV2tzMmtYRW5DQVVpTWRCK3Z4aVBzVDd1U1Eyc05vRmlzU3g4aTRaRXJZaHZlaXI1M3NZMTVLRW1EQklPeGh4NkcrQnBKOGNwMlVLTjV3enY3cGpWb0ZVUUxLU3RsdDAybUVHMGYvdFgwbEJSTU9YNDFJZkpsaWVtL0RKVXVVdk1hY05aL3QwYmJKUnhhS3pCd1Zja0tGclhYelhOUFJhaGVsMWFmWEZHaHhCaFNoT2RJOGFXWVN2dERyZVdYbVNnTHdrT1R2SkppdmNrWXMrem05T3BqNCt3YXc3WC9CbzJ3V084Y2t1Y2h3U0VmQ2dpMGtnbDdOVFZlWlR3Tlo5N0hrRWo1T1lLcnBEU3NXaDNxMXZOb0FnTDVGYkdFbUlhei9TV1FMWW5hdjl0T1VJQmlITHVhczhVREduTVdNQ24yYkRCVzRzOFMzYzVOaHRNaXdyMnNkVEVvTjVzUnIvM3hEOTNFRTVoclFxSHJMRjR1WjFTNTVWYTljQW1xbjFQWW1VN2tBek80MndnUGd1WjNRSG5QOExxVWdyUDIrK0YrMG82Y24xZ000S3JBMXovZ2VkTmxNSGZiQnpMd2w1WVhYc0ZVTENIYXVEc1FyNFBMWjRRUVJ2b2ljclh5aEJSS2x2bzJ6Nkh5S01kUlNBM3AyVi9abFBFUkxpRVVDeGdqR1hyNC9PODJ4by9MZURLS2NZZGZMdXcwWGFHWDJSS01HQk5Yam9UYVI5K1hReEtpSzlLQWNVUmRVUXk5UjFWaXJaTGNDR0VRVXgydkhKUFNVWEhEMDdFQTBua0dTUE1EVDNHNmJPTjV6cEY5T2lDc2tUUDJGbml3ekljaFVUanRtbW1zUFdSV3JEemhxOHRYb0wzTWJIU2w0TUxTVm93YnVESnRDNnd3Vzcyb1hMQVNkUDJ6L053VTZxU2JaSnJYUDJ6a1IxaE1QNk80RW5qaVdWRUJ5aFpEb3VyQlMwemczNS85WEJsTkh6d09EV3dtb09ocXNlNGcwQmtORE5rQkdQZmhGSGl0WXlMZFI0MWQvMDR1Tnlsd0xnU2p1blB1RFJPTDBxSVlxaUNlNXJyMjBNd3pVbGVqNkhrK1FVVXlRSXJFbmNhMi9nM3hjRU9Ed0RQT2FjaEd2VEtERGdyNDFFODJ5RHdRQkk5aElCV25hVkVKQzNUS0ZwOXBOd1d5aUhxOEgxSm50OWNibGtqMEFwSXRXbUZkSkpHYXFMMDVSb2hUcTdPT1Bka1kwZ094bU81cDRxWTA4TmhxTVFIMmRMbVhTQ2h3VlpLRUMrcW5GVEJ0U0p3L1N3Y2V0K3Fvam5BS1BGRnJ6L09ZeVYyRis3YjhOOXlzOHdQWGZ6Z3g5aGlZZ0sxc05UZnlmcVp2YTcvV3FDajdIdWRqM3RUK2pOamlJQ0xTR0ZKMnJkN3Jabk1HcU9aNE9vaVdzN3p5RW1TNVgrSS9BMEdreThiZXhmNCtyTEwzZmNMdUtZOXdGdDNwc1dGQWsyUjhYZjc5RlFBZ2dZT2RSRWhFR3pIWXRiNXh0Q05DSzB6YW1VMlhXNVNIMnRJem1RemR6VDBybm15ek5sdk4yTGlHTkZzbGNuYUxHOXpWQjE5L09WdGFqY01VWlU4MWJZTitlcTloeDFoVTV2SzQ4ZWdzbUZNL01jUzJZSnR5K1lrV2F4Ymk4dWVsOTJ4c1pjL1NlbTdHaG1jdHdVT3VZcVpaVGFDT25WUVJoU3lGakVBNnNDRi9BVitkZGFBK2E2YVdnZDB1MEF0TE5kdFdYdlBPSmROa1Uva3hwNHJGMGp4TzYwcnQvUTBsaDYyc283TDMwS3JBeXM2RnYzUnF2SlFObFhaeHhYOHpaQUVnODg2RzFnbXF5cTg5YStveWNtMFZFczc2eHFENDMraEhiaVQxM3ZnWitob01pTVV3b0M5MDZFWTR5YlBhdkhabDhwa3p1L0t5VndSOWk2NXhHTGY1RXQ1TnVTbHMzektRdUd6MHBscnk2OFZSbWxhRE81MVUzL3FQNkUzbnhISjFvTERvZnhMczVYcGhCR3N5ZTgrVXFpRFpETVZZSmdBaFArNU0xVTA4QmdWZTdJWE9lNEI3MjZoWFBrR0FnaEQ2dFRaWkZtZHlMKzBMelpFRVpLNmVGQXkyeHF5cExIOGcvMmZsajFYZ0k5ZlVsblU2Tnc3eTByaHpMYTFGTzMyM1NINytJOG9PeVhxOXV6amVSeDByZ0h6Z3p4bGhSQzAzcE9hU1M3Zy9WWGphUHZnM0cvUzlRam42QTVyZmd5TnpZY3NUcGFqd2FoZlJXR0RqMDAwTTU3andyZjRNYnpuZnFMNENSeDdOcWVwalQ2d0trSUVRM2N3Z3ZPZ0VtRkJjZnMrQ0RxZEdYanZGRlJnemYvRnBXa1k4RDU3aUZxTWR4QitNUmEvVGtJZTRrclRmNm9sdEtyNkxtMzgvK0syV3hmQ0xNLzZqQUZjZWUxUEI0WHF0dGE5Rm9ZVDlScDBZRnhESnVwM041VU9sVnF3Tm13cHVFRDhERHVmRzU1R3haa2lHUms5Q2VPbVFXUE1Qc0RKemhsQ202MTNEVTQ5UndqRUp3YW5Na0N0VlBYTVlGdG1IMzdMR2QzQmYwRW1XSStXY2tvSmZqNWFsQ0VOK0xMYTRJQlN5U2h1b1M0MTl4Ykc3UVRYSml2TjhpelFqTmJPaXZ5NitjSzVOSzFqUEJvWVBUQmwyb2xIMVJKekJwQTc3MG5yUEdNY1RpRmMwTGRYcDlXcll4djlncitabGJpVElSa05JakY0aThrZ081Y0J6ZEdqaFRqaHdCMmVBUVNKc1Z6L0p6NG4wZlFIc0xWaGZyNUh4ZkpXalArMHVxQ3BGU3JScVByeFRaenBDSGN3SzdndVFENnlWWFZpQlpyV0VmMVpHdTJ4eDlRaUo3NlNFbnltZUNqU2VkV0xWWm8zQ2Zzb09uQmhPL1NGeUovVzVFZG1UMnhVd1RtZkRFSmNSNFdOREhTTHRaeHRJcng1U0ZqbEFZQnZscU56OU54Uzk0NkhYbE9UcVI2Q1pSZ2ttczlkcTNDRFQ5alA1NFBrRW9XeERsd0ZDbDlHaU13WElWWXEzR08rajNxRHFCLzUxb3NaaGVLcDZOMmFUNnRUdHVxWGRkT3ptR2gzRmdta01SdEx3Q2FSVmFDYWlrVUlxVzBTcDBlbnNDcmYwbEhMa3lscU5hcnV4b1p0QjJ1bzV5TkxPa1lvQklBR1lUdERrK3lqL2g4ZW9nQVo4SzUvdXdXczc4M2grL2hDeUdHajVIUkxQNmorVDFkOTVuU2NyZERnQk5jdStrenBZRzhGMnJBWHFzSFkycVpIY05MMEtDcU55Z0IvQ3RjV0ozL0VLaWFic3FQOStzZURyRUVJU1NOSVBidS9NZk42VFFuS08xbFpkZEZDbXhQZXgxVW5mMGpGd1huZXJsRzhUUllTZ21FWHR0LzdNbUVjY2ZuNmtZNkdKaWtMTzRsSzBqRWY2UWIwaUd6SkVaZEF6YWZETG5NeXB0dkhBMG9rUlhyRmk3WStkU25KU1N4V29RZzRYWHZ0eVcvTUFvUTUvZjQyZWh3dGtZQmVlOGtUdnh0R3lOckFMR3laK3ZMREYzRm95VzhFMnhldWRrb3ZXSld6WldMck9KVzM5TStiWW9GTHlQamVTSzJNbUwzaXZmekJodEVSdHFsNVdXMnJYWWhOQlNWS1dxZVBVdThhazZaYkdKdmxqNmVHeHBseUpDVXRtOG1LTzJmZG9KZnMyUzdDbHhQVGQzL28yaHhEak8vbmFZTWN6L3JZeDJQMk9DK0txWURUNGw4MTg2c0ZxWWdoSDNxZFltaVpzU0V6aGliOXcvSDJjSWsyUHJEY21OdUJxV0xiUVgzem56a2ZHdXk4cXg2TkcyU3BkdUxMdGdkeUc1WXI2NUZLZ3lINE5weDVhejJ6MkN4RWp1ZVlndDQ0UStOTDBnK0s2Z2Vkc0ppYUZWYWRYd2RST0JvRHlwc0dPRFNIaHhxc2R2WVVnL3BDcWlPMm12RnMzUks4azlmRHpiRWgvZThBd0dqTm5RTG53ZlhZZFRQRWVNZDU2ZXZzZGREb3hkR0YwUExKNXNBR2R0QlBSQVFBVFVjNlZPV0NBTENHa0JQYzlFTnlTbGxVbmNJMCszZjhzK05hdlJSVTRtOUpUbVVKQlF3bnBaaDZsa2w2TVVEL2k1aFdYWHBndUxBaXNzUmUxM2ltSzJPZkx5Rmh6WGgyKzFjb1Ezd3BMWnRzaGh1dGpEd2cvS1JNNkNnUDVsUkxQcUpIT3ZSOGFnRGJFcU0vNmRFVTU2cVk1V2h5ZXNwMUdWYnZOTVlmM25TOFUzSGg5T2o5THNqNDhKNmpMRnk0QXAveXhncXkwSHhtL2VHMXNFRllFRk5nakM2b0JWbXJKU0ZCSjBVM1dOand5UmdTUEx4R3V4enZPeG1rditiV2lZK0xGb3JRQkF2cUg3ZFFsVlFiQzQyM0Y2eUhzSDJ5VmpoRFdNMWxjUEY0VkFuanJKd0d1QWhHZGh5d2JXN1dHQTVoWm9zZG4wMjVzV3VtbmIrQlBMbE5mNk53OHFnbGNaYVlUeTd2NWlUejlNVDl5RUNoVDAwYlFiSkpHVDg5emp0cG1odU1MT2dzUU1QalVURkJSdTgrWk5QVENGd05IdVROc2VVdFhYWHhWZmc1V3VqL3pEMFpzYzJJb2xuTS9VaGJuUm1vaHRaZnJjUVJNUkt1MmJHckFFTWJYcmx4SWppMk16YktncGxvMUJjeTB3ZE1qZkY1UFNRTGgwQjVlb1FPYzk4dUZoWWJXcm9vM3Vkd0RONGt0WkoxakJDSW4vMW1GSm1tdFhyNEtFaG9SQktJUk9hdHgxOExmVEppaFBzWHRzSTd2aEZqOWFMYW1PSzByb2ZXbXlrYmM3ME5ESTBjcFpFeUlVMENxT2pnQ1JTNmp0eGNrcWlCVkxzTEU5b3RlYzltcE5EZTJlL0R0Y2hrVzdyWXZFangybUVxWXJ3OXN1Y2lWdmUrbStGWVZxaTBJZEdZa3k4VVpnWHVXUXAyd2ExNldjeW1IVUxjTXRaSG9nSnM4YzRyZFN2TzhNajJIZHNuQ2JvcG0rSCtyN3hoMnVGakNiVWtENXd0L2RlZWQyaG5NZlQ0ZHo3NXRXS3RSUUMwSzJxWlBMUFhCSU5SOWlLdVRTbGZCbEJZaE85bGFTK0E4S1hKOGNIRFhGKzlzem1ER0ROalY2VllLRUpEalJ3b0xhTFlGM1Bsd1VXRUVYNmtBVEg4aHBEZ3RLcVR5VFpmQ2RmcnFOYjVoc2lLLzBuMkxJMVN1MncyTGhkTG5zcVpJcTVYZUxGTzhXMTMxUnkyR0RPWFlUcnhZS2UrU1hDSzBPRzVsbTNDUEIrcWhoeDhmbFgweXl4cDQ5TDU5Tm12SXU1enJEZ2ZNek1VcUliUEpiZjQrd2ZHOTRZcGpYTi8wK1AwdEErMWlDQ042Z2xTSWJleWRrTnhZc0pvMFpxWjFuSVFSYjNIZURvU204S21FZGNkemt2cWdyTnVVUzlhb000TWliVk9Eek9KVmJsdUZ4TThRS1RiSDY4Y1hMR1NXM1ZpOUxrTjZXcW1BaWsvSy80S1M5bC8yVHpsbmJMa3hodWtUcUZXRDM2Wm4wQ0dyRHJNSzlidTc5M1VreUk0dHhKWVZBUVM3S1pmSWIwZ3dnbzYwWWtQZ0RyV0ZCWktPdW44U1VUMDJ2RmtGcVdlSTRjMW81M0RDenBWemcrS1BUNUhnMEZ4T1diZGVQNmc4Vll2K0VSNkF4L1JreG4zblBnaEFkUGtHeExDTUx6aytGdjlLc1dFZlhPb3djcFZKUHIrVUd4dHFNb2hGaXpEMmNac3FpYkZjTVdyQWp2WjE0bjNsOEUzQk5ZKzN2UVovWStZem5kRFVNckpxOTJhOWRWMkZLb2J5UEl6Yk1VUDZBR25zYVYwWlRxMTVNUmd5NVFtSHhjSmIwQ0R2RFg4OU1mcFBpMVFDK3RBRnRmdFVZdkVKd21TM29MYWY0dnVoVVYrai9SQm9aZnF4QU9KYWpGRWlSdGk1dW5pS0NpcUJoRHI4QktPd2hTVWwvd3N1S2ZZaVdQdkY5UTNCRkIxY1Y3cTI2dVlPWVcxUjhta3lNb0dMUGY4MUE2RlNJR0VTU3QrbTdTQVRsemlwNndGd0c0RzgydTFmUkxRNnBIcjFISnFKTkpKbFN3ZGxKeHNrckwvL1VZcmVwK0hnWThTYXVocGNBZlJQeFNmZkRLM2JTQjlaaXJubDYwUFY5VGZyMVFDRzA5TnFqWjJKR0gxckt5c2lEVE1oc2Z2S0VCRGRtaWIwOHJEekdoQktIR1NEQnI1NFlMM2cvQkdXcUVBRlo5UGd2TTJQUzdsbmJDcVdYQnh3blo4S1ZaN3lyT05lMUZPeWQ2R0h4ekRJMGc3SnlKcjdCMlN3dXVDeXh6dkJSMWU5aENGTm00dGU3bWY1WmFlZWJmNzFma0VpOUtnK2NkU1JaaHk0eWhsRFd6dGcycG1mMW02b1JEL3pKNytobndxU2prOXlUQitZTDJDbDBFNjRIUTRVZ1c4YkNiNzBJNWpWVi9Denk3SHNRUndFOHJSNGhlNisxZnIyNE9DdFhXMkFXNnJKZnE0NGpEVnFlL2x6cjdzZFFGNENLaVRuT1lvMjd2RGpFUXNWUUs3bGtocUM2b2s2cFd1TzlYWEV5VXZ2NWFLa1ZLME9tTTkzMEhyUExKWWdVbnJQZkFZMnJWRkRkeFZDaDcwa3JYcW1SeTFYLzMycStuN2dZb1VvMVlRVGtHSlNPZ1pXbXFjZllqTE42dXhwYVI3VU9zQ3dkRkVmVnZNNzZ1aG9DS0VPL3dBMUE3YjJZZlFTTkJWYkpFeWltSDd3V3NySkVES0FDZ3N4ci9mTHNMVWJkM1BrQmZ1TGIxMFBPUDlnR1QxWUtNR2ZjdDFJbFR4a0NLUDR1RzBwamxyTTNsUDlxcjE1UUR5THlnTXlVOFBlY1lmTmExVU5OZXp0REduSUZMRFJremZLbVlramFkZzRpbklPUTRSdThCYWJRZTVPQzQvVUtOcGlheEhsSW82S29FeFRDcEtyNkUrZEJtczdlZ3dWNmErQ3lCanFvMmFuMlRyekJBSExMMUtjc05HMzRHWDB3OFQ5c014RFhNZUFnTkdsbG4zOXByYUhlNllvVWhLVFArb0hZRXEwdmV3WWZRZVhLdmRlMFBHd0xNa3RFbkVab2lxcmg0SVF2VDRxRnNaL0RicTVub1lNeUNSeDMwdm1kbm40andWRmplbklOY21yNFY3U0Jtb3ZNZm5haGJSZU1qekUyUFMrd2lIa1BGUGhQdjg4ODJkNlBwUWkvZ2gzK3Fid1c3am10YTlrYVo0TXB6eEUweDFMdnNvdDlTRjl6VTIwSCtySGpIcDljdEcrZ2MxaFdwWFloSDNGWGthUmhRdXpxV201RWQ5YitodmtXUFBUeFh3YjF5U1dlSGptZytqRytSRzhTNzVTM0h0SGJSczFwMmRONlF4Zy9qU3B3RUdvb2Qwd3hKREFONy9adkxUSm4rdXRmUGV1RzNza29YVFFCd1R0ODhJWnpDVTVTMkZnMTMxMmJCbUt5Ui9uMkhLK2QrREljdzlCMjQxcmh0TG1wNE10aWhCcVhSQ010VWtNV1hiaFg5bUxvcUhSY1dNN1ZrRkthQ2VrRVEvYWZJcFFtK0dxQ3hSeUwrQVBENUZMWUxEWjF1bkN2bzhnMlYzbHBwRWdNdjVza2N3VVJRbCtXcXpteUpWV0d5d29GVFEyUzkwWjMxd0pSK2orR29uU3NseTV4Q2FSTk1saU9VcDJPU0RXaXpyd1pUVXpRNE4zWjVhTmFsVkdkQi90Y0NjZi9mbytabkVZZzlQcFFRbm1nUlRpZEtEbVZOU3cxSGJwOWx4MmNaY01Jako3b0srRk8vS1p0OXZpRW1oTHdEeGtNR1d4a05xOS93OEhadm1OblpNZS9WSm9KWWFaM3I1TjJUdDY2Z1g4QXJWNXhxTzdyYTBINFhrQWYzZ2ptbHdKbzUxajZoM1BIZVl4ZTBiNUt5K2hvYWpCSVBYaFdjelhnc2tBZmtGQ0NIVi8yYWJ1OE1BSUdrdmFnMU9kd3hVazgzUTVGd2FLZVlka0ljdUJZSTNtRDZoWXhsaGNFYUJDcXBkL2FCdDFzNnlhQ3plckV3dVVvc2FaR2Q2ekdvZ0dseW9XWDZqK0dUd2xTK2E2alFwanZvNFZyeEJmTVpRL2RMdzhXSmgyRjE2Q3J5YWMwK3RBdGNZNEorTVlPY3o0ME51emVOeVhDZUVuSC9aaUdlTzE1NVk5V3RrSExsZHUzamc0TmpkclRoaHpXZUJMRWdZbVJTNFlSanhjZ0EvRVZtUUc4ZFRvSmhDaldjTExQTEdJcTZHN2Q5M055azg4VE5NV1BhSmlpK2NaNHVYamVPVmUzRXJQMEJvL3N5bmZ2UnZkaXFNNEhBVGxrSTFGZWpXVkNNeVJQSm9TaUp0Rjk1QzhGQWR2UXNWazB1U3R5MFNvSU5RRHVtYkxoTUFsZTVNbHdQaVIxNkdCOXJXelk5Y01lWlNkT0VZdHNQVzJFa3VoVkxqU2g1ZmRTajAveGNSVTdjTEw4cmRyeEpZZHYvWTEwVWYxYWZxNXBHUkQyb2I3TSt2ZmtHU2JweitVVEp6ZGp6OUNLTktYY3hHaTFjOHFneEVXTXQyY0dNcVVtUnZQYUxiK3NlTlVXMVpzalFxRHFocXlBMW9QRFBmcWQ5SDVQQkZPdnR5Y0dHckVsUkxQUFp0VGRDYWZpSHc0VXlnZlFpS21HcTJTem8vNnhRejFvVDkvb0NRWFZzenVsWDd5SE92bWtLd251RG5WcVExV2dEeFV4Q2puRHJkMnVSdUpmVTc3dlJXQTQwa24rWXRPOWhhb3BWKzc5TDNoV09MbUszYmJrTmRwZHQxTFhNQkxYczRFWG4wSXdwNVNGZWNtRnAwWFhRa2lzSUFPKzZEZzB1VFRXbDFySE1EL2NFSW81WEsxdlI0amRRNExrc1lOeFhVaDd4Z21wQVpJYXhHODNqUkFSbHRsa3VhK1ZjdStaQ3Z1Q3NTZ2g4YUZQSDB4RFJaTFp3b0UxbmJSVFFBbEZvN01mdTJZV2V5d1hEd3E2dlpBZno3bXZqVmdQNGdhVlRjU3Z0Y0xQZFRHWFUzQkJ5SS9Ibi9nVFpUKzN3M0ZPVmw5WWtzamVXYmlCSmp4QncrS1hMaXBjNllwbC9GbGl5KzlML0hKVUpZOHRrNlJqZjRhaE80b3BPMktsWFNBd3hSWTNLTGloRnQ4NFp4Wml2RVlOT2hHTzI0UTJnR1ZPeWl1alNCTE9GM05hQ2xMYVZvOGQ0aUVGVjh4WE5PZ3YxYlFxS2hFcjZZdmdpRG1WcUlkUU96QVlCSTloZ0VKM3czV0RrNnBmVXlKTDJqSEt0NHhaMHBTbGFxeDFteVN5OWI5Q2hydFZuMlQ1U3pXa3Z5MXh3YmErTjV2Y3llK1ZSWG42bk14dUVYd2tOMk9kcll3QWtna0RiNEFhdHZMMUQrOU1yQWFWNUsyeVd4ek9xZ0Yza0tpandBbms1M1hrWGNuT3pzMW1zZndvemF6MzJteHhlRkwrOGlxL1dkSzV6ZGE5RTZxR0xBL0ZadnJ6ZzUwcUxYRmU5bW9wRys4N3J4ZnpLOEMzMktqbkg1OG5acUxObGUxMThJTHM3bGpKU3JYZGZVK2RHN1hnWlE3YUVoRm5kZmJ0K1VjeGpneXFKcGpENzM2KzY2T1pTOU5Rd1I1VDJqdi9KNDVocnZWRGl0YzNnWXJhVldaeXZzeDV1NHR4aHVUZzFiU1oyN21QYlppakNUSWhIWGp5T3p0NFZRc1hXVzNrSEdPb09hajI0cWZjTmRGdE03VVNGeUNUNGdFcjE2UG5DWTdhZ290cGdvWXdIVXN5VDFWWXA2KzJma25kRmMxdlg5Q2d1TU1zNzVzN2JneUoxbkcxRFZ3Tk1sNk1DZC93NFdxRVM1czRTelBrb1pXN2g4RVNMeDEwZWF1TG1zMGJYTURYZFZ4SEhZLzZ5MWxzcDVJVEZGTnBuRlV2OGJLVVBUNGhtclhlaWdaQVRmc1YyL0kvUVd5OTFudkZvKzdHRk9Oc2c5ZVd2eHoxNlUvRG1lNjJ1MEhudURuRWpwTjNhbDJMNlpuclV0VElsRkIxRUoyV0tIcmFXQUdLZTYrb2VJa0VWeDE4NWhBZHV1VnNya053MUY3TXEzdmtSVTB0VXE1SjZ6MUdaQ2RVaHNSUkNBbEM3UEc3UHU0K0prUnNCZDhLTDJKK1pDc0FqTGN2eVVnTjJiS3dYeUpFOE1BYmN6WVpKVC9mOEpTRGFHM3R4YThualAvU25aRWxNNFptd3dGSkhneEhaMkszSHo2R2RCeEIxYzl1QkczOGJwdFRHblBjRnN4L09kdDdIU01QTVhOL01OWG5PRStaNnhzdTg0QjM1ZVBiOWhYc3pZMjhvZ3puVmJoL296Q2tUWDIzeHJCQitob0wrektPVGZrV1BoMG1qbUhKbTF2R3JyZmFoaTQveGk0Q2JzL0NTSEdTYlh4ZTM3NVlKZmFZOUpOS2NCSURPRmhxWjdzR2hNS2taR3dIRXk5UUZuT0dpVjU0c2V4U3NRUyttTWVFWWZEWmtIL1l0eG9mTzFub3p2T0h0c2ZvOEdDaTdLb200TDNmYTBwTjJGTzl6dlRYVDMyakZCZDdNWTJkK2l1dWVGdldFMTg0bEJFSURSOVd4RnNxbVpqc1hNV3JEQ0NZcmtwUVluQXprRzEyZWdBV3UwdGh0czRkZVA3MCtJQjEyQ1ZkYjIweUx3bkppbHY4bUhwcVVBa2pGUWsxdnc0QlFJS2QyRkdKUHlsVXMxM21KK2p5aFZ5LzJDVERGUS9ieHBHelFTektDTGhmclpUVUpPRDd6dnhBaklHZnZqMmpvRFB0ZTFyVkVTZ2dkVmlFK2l3NDVCT0NTMDVuYnkyell1VTFvZ1pwdHFZbXlMaVgzVUpKR0NkNFdtcFJoNzRWNSt3ekF3Q3FsTHZhZ2x6T1ZXSXh3Z3FENmFlNk4xMnpzQ0JyMkVHckltVUtJbmJCdUhueEFlcklIcTRLS2F0M080UkZWN1ZFVFZTQjhzQm9qNXBtN3FPQ1VQaVJueUJUeHNSM1BpWXV6OXE0bVFkeWUvTEVrU0VQNC96blVrR2kyNnlNNzdIdW5oSk1OQmpwdlRjbUMwcXN2bVJzejRmQU5oMU9qYldNQ1l3Yzh5US9DWDJIZDNtSFRPcTBBam1UN1JkRHo2TURXVDJ3c0gybGRuTEl4emxTZU04ODdVZ3VJL2ZVTHg5TUl3dEkvWmpvUmZLSVJLbHJGaG1wOU5PUnQ4SXowYVJBYmxhNTRyaVNzTGx1TnkzcTc4dFFvSDYvWjlFR0lOdExZQm1KYUl2M0Viak1waG1ETld6RjRLUHFCNlFqOCtkcHVTTXVOd0VabnVwdFU3RHR2dkhRaVRuY0lzMyt2cUFIbjljY3BpWGRjTnVjRGc3dktLS3pPSUFlM0FHVFhVbS8wMVluTVhXZHNVMzZaYno4eU9TOXJMNEhEK0FzNk5BWXZHYUN2WnJ2akZPczFXZzRSVWsvMEFjWjhMWlV0TXN1cHI2djdWbk9icURmOERMbG1QdS90SDYxTlpKWXlVT2hrRlpycmNRSm5sOU5LL09UeDdmZkZvRFhSeE5FakVYSXlVUXYxcUtRSXRMUm1RK0VvTjRacHhUb1pFTmV0ZS9NU1RYOENMU3JRQ1JUQ2xPakVNMzF6NUw2V2RGa0tLV3lMeVplWHhKOUVySnRjZlQwSHNIZ3BpTnRoRFNySjB2dU9hZEJGd2xjWTNyS0VYOUk1ZHlkT3g4VFNxc0hRQ1dPYitjZVFzMlczMDUwQnNDbFBTU3R1Q2hTaXVDVXM0emZkaHgvMnRVWWZUVUtSNnlUTHNrcmgxaFYvQ1RxaVBraVh1aW5KS0MwTE1tWTlxS01KaXo1TjBPSHNVZGdkVXNuekhwWXFUaVVwd09rQTJNb3Eza1RnYjNDQnhhSGVJNXVQYm1ZVzVDTkx4VExxckFHOW5qaEkwTTh3ZTlZZ3VXQUFUeDBhSFBMb3BVaHdMczcxZHVxYzl4MmdpMUJVMzBzOHQ3NG9aSjFSNHNlOStLRUNhWllBR1ZkZXBUNTlVSGRwREoyaHNLVkNQZEFNYjRCTEJFRFlXakVwT0k3QWUwWEoydDZ3TGh0aGN0MWUrSG5GSHlQSjZIMVY5VTBkb09UL3BEQ1htajV4OFVZaExTMTVzWjM1YUFZZWtTdDAwK0hUMzdNL1Y2aFdpZ1A3M1EvVTVWbGZpYUhzQUxlSmtyQXJKbXdSMTlWNklVNWdtVzI4SmhDVzBPeEtBVnJ3Z2dIa09JSHVIWnRjcSt4NWM0VU1uNFBYQXhsL0h4WXowY3ZLTGtlRGZNeWQySUlVS1k1MkdEYTBLa1BxN1JwQ0NEQlJJbDVrdSs0azl0UEZCSER6UzdHQjFKUEVtMmZWcnpRejczd3hwRVAyY3BSQ0lyYjZOYVdsZUtzMkg5M2FyWTdNMTBUU1JwMVhXMDVtZU4xM3pLaHlNbzY0K0trWUdHNVN0OWxPbHkrcUJoQUtkK2s4VTM3TlVzZnRYcENDU2UyNVVyMFF3ZHk2TDBuNFZOMXI4M2FZU244dzFrSEszL0pDSDZFaWdGbjFlVjRuc0FVWDZoQkJJd3Myc0l1SjJMTE9tWkFjTUU4eVBvdFpqSWIyWXJRalhva1djMXgwSTVYVWRQMGNXVTdXUnN6WnZLQnVUVTF0Smc0alBhZHUxYkRIMTJhdHZwd3BnUTY1SUpHRkxwMHhLbW9sSVRzZGs0TUZ3dUZIRXJMNmN0SE5GaFBrcmZHMzhoakk4Tkd3YmQrV1NiLzBqMGp5VVczR2htKzJXdTVDWVFaN3BhSkI0Y3FoaVEwK1BoM3VncDcrbStZKzFjUTd4aGlrS2p3SlY4TGVDYXdYQ2p2RjZrYVYrNzlXQ21uWVZjSG5SZXlzU3VkQTM4RkdZWFpvT055NTZueTVzcUNxbktRN1VnbGFXUjAweUk2VmY4MTBhVW50RHhJbll3dU5RQUpNbXczd1hYeVprTWMybjdpR1lTUDZxc2Rzak1PdkpJa2RXZHlvUURoa294UWRLazZMWUp5clo3ZkNEQk12RFlVc1FjdjhOT0l1bWRNaEdFVlVHUmptb3ZqMG5FQWdjbHJaa3ZrMldIQ1g3OTErd2Zrc0h4NUJnYjlPYWgzMkk4ZnUxd1BmT3FWNU4xRkkvUU1KSWFhbWMrbHJla2RMelF5RUFEYW5jczBOZXFQc2pLMmx2aFhMdktlTzJLN2JQQzFlb3dxTW1mSmFNcTNoZWhmOG5TWjI4Vm1FbklQN1BFNldqRUhxWEYxaU01SnhFaThlc0VmVEdLQ3RmdjJ3SnhPNEdYT3k4WVJDTjFqcXg1dDkvRXNzV1gzZWpMS2tqU1JFZDg2c0xyR0RiSXlIM0Q5b2NzN2Q0eVB5c0lodXc2Y0xrWjFFd1VMdjhveWpJbHJCSFo2b2YwazlPMjdsKzlsMjR5aThwUFdwRzl0QTRQb2tYSWRuc1VnL1JqWDU3dncveFNHdXRET1dWUVQyY0M5VWp1SW5Sd3RKcjhhNGJhTG8xVDNTL28vaFdHcUVTOWxpbXVVWERjQ3JtU2FIL2EwZy8zM3FhMW5HdG1EUzExb2lsM2MxNUFQTU9pVkExeXY2S2hrQjhSU2hxZkRnMUhTUi9lRldWcVFMRldwMDhYNjlIQjRQUFlhQjI4bGFpMkJabU9sUUtrWVYrZVZsOUEzSVIvNWw2SUtmNHBvdVVudGxjd0FGQ1l0VHMwMzduVnIxeUh6R2E2N2Zaci9Qa0FmekMvY3k3VjVCaXpzbVhMVHQ5K0hTRWc4ZWk2aUNpVVVFKzdyWWg2b1hOL0ZyWERpS0FGK0pXNFFWN21NT0NSOUt3QVZYeHNBZ0ZJcERLdGRhV3l3VXFvQ3RJMWh5ZStiZWVhU0ZsNzVtbUxONDNaTWI3QWpvaW5DZ05GUkppRVZxRG54ZmREWUlCU2VXb2Fpek52d0JGQVRCeEhRV1MzUmNmTHhFdGpVd3FHNTNQL2R6KzJCbEVBaDhSVWhmYkNvakxtS1k1dFQ2ejV1blZrbUdjMWlNWUdnMHRRQk03Y00wai9Bcm4vQzh6M3NmaGFYazlOcTlvSVVvVUFRelJVTDdSQjJBek9Zb25CbWtDYTdhdFdab28zanc2cWhtdXNPZk1RTGx2eG9sbkttN2plMGNtOVoyNXlTV0oweGh1N3dzMjA3eElpNlVta014NEd0NVRmTkRhV21xUzErNXJyRlpCSmYvTjhydjY5anZDYmNwMTZXL1dVeTVRK2ZoelNSUnpiOTNIa1NiNkdCVmVCd0ZkU25jZy84SEVKTTQ4VXdFdDJMMWIrS1VQemxCb3hlL0RENThtY3crTkpMRFJNRGE1aWJqMjNQY2tMN0NyTVdOK0x0ZThaUTM3aE5LU1NPMGl5Yjl3eW8vdEpudkRCRjgzbWJnUFVkbXF3SUtLemg3WjE3QmdyTU90QjA3MHB0cjVsQm5nNlB3cE42WTZWcmN0OWxPV2wyRGlTZDBMT2lsRGgwTkdlYjRWZXIrQ24yeHU0WCt6aEs0VDRuMUlSVk92R2Jxa0tUZ3JaL1ZUWlFob0NMMUNINDJyUE03TWFVUmxRdG41L09HY0J4SHdFOXczQVUzOGRrYTZpc2tqMUlQeFFIMjR3Rkp4U0NyQ3BrY1JQaDlpVXlBREZJV2RIVWZwMjEzMjNsSjkvdnF0Mm5pMmEvVGhRU3VZU1dmZy9SMUgxc3JGeC8wcmtqS09zYnN1RlM0bFRRZ3cwODErNlc3eTlWMWpDcUx6dTIwcHAwS0hiQ2d4M2JZcFlCOTBYMWZDSG03cytrTEEwTk9SQlNTaWNQRk43QWJIcURISnBhTmtWSWtDTjUrYzlQZGhyWDF0VmxlQjFOUmI2ZC9hcTBnaGh1TnVwRlpSQ3ZjaUZyc1l3V3hVeVJLWVRIWDBtUnUrdXlHZmxtVXllYjBRbklreXJuRUNHbTlOVlAxdkxESHVmY1FtL2VPY29BRGJyMkg0R1JrNDRZbU4wRThSWjBsbGlDTk85dURaclNIbHRTM3RRU2FDV3JQc2hyczlsYnU2M0lKb09xT00xK05uTytEYXpqYVRNVkhhanpCdHg3eGdrVjMyMThBcjRkQXkzZUZhRk4wNVd5YU5mNEZTd0l6Y3VaRlhFd3NhVjg2ZmpVeDA3K2QvTThFZW5lKzFQa2pxMjQvdm1EVVVlOUpKTEhsMmoydVNEbjhITjdHYzZ5UWlEOERpVlo3RmNtSmw1RFFObk80RVlDVmpEM0F6bytCdXJpM3hxKy9RL0NPYkdGVG5YNjFrOFIvY09QeElVd2FkalFrVUFGY0pqSDNna1Njekg4eDV6OHdkak10bGdyYnJ1c0o4UXZhY3B3cVloQ1Vhb0RzNGtjakFScjI3RUR2THNjYzMzMzQ3L2E2SktMc2xKa05ueG9UUElqQTg1Y1V3Z0hXMW9DaWtlQmFiRHZyOGtNZnZjcEJKRXF5bWRtdFkvUzRkaXUvYkVjKzRBbHVCdFJlZGdxaXlTTU1JWVVwdVBuS3BFcTRmWkxLU0IrdkozWkRNN0p5ckZiMHVtTTBpUWpPRnhzOEpnY2VseWJFeENoMEh1NHIranBmZjZsSCsybkhWdmVHRFFSUUN5bjBwQS9uVWhSOHhuTXpBWGdKRE9VT3c5TnRCVldVb2JQSlFmOWNUcE9kRW5hL1ZOMHJtZDV5Yy9nZlBUZlFJTjlNNXBIQTF3RDlGcFBuUGJTb0hhVjZrOTRmdlNqMTUxaXdlVERpTE1lQXQySS9iNkMvZElXdkVUemVGNWIxaU41c01acFNxOVJxRVhaQ21wMXd1L3lNYzU2M0piak5yOWVBVDBuR0lvWEZERUZPT2lwajNaM3d0Ukg5UEd6dHBVWG9iempvbmFSWGc0RjQzT0hwWWxGQTdLU0NPbTJpYjNKdWxMK1lMeTEvOHZKYkNvSXZIY3NsNWtrZkFqa0lzNkJ3aUZUSXdpMlYwMU5TWFRCWDJRbyt3UDBKRkQ1cTFYQ0ZWYUwyaUFGUS9FWkpSS2RwcnhNb1M5cFJXeUFHeVVHQlJxOHhsTXZ5WFA0ZTRXZXFYVTFESDUzTld4NmNiYm1MelVxUDVpbVZSU20wc3VPRmRlZ2ZnQnVORWJWYXNkMUl5ZDJvVXBXOXNBWlprbWt1NTRhUmZxQkNRUTlDZ0RyVE5FYUJ2WDlUYUk0WTNsdW42NlJMQnpvWnZhVzJWRzNDdlRqZGVOSDlmUjYwc25BcWc0YnRZSHpJcy84QmlKaEdJa3JmV0ZTdHZOUHlKNEhFbVRFeWNlSUlrQXVaOWlsZkJvL1dleDVHRFFkL0FGTXY4VjdTcUt3MjdnQWNYTmhpRzZ0ejhOK0Y3TG1CS24rM3BuTThKdy93TUxJQ1FCaWJ0Uk1KZ3gybXFpTlRWY0FPK3FSa3kxTUllNmlmQzljR2NXOWhncGtsOGduMHVGNjNKU01iUEJ1ZS9QZEdoN0VzaHAyOC9XTHRPUVFjOTdUUHh3L3ZiL0pVZmdDQ3JtS3ZMOTc5RVlrR1hoSW03RVAwaWtxS0UrZkRITTUxLzNkc0t5NndKdTFTdU9ubVRQK3hTOERPUTliRmlTN1J0aytpSWowRDh2dE1lZmYvajRUY1k2VUNtOGFOa1pVRFNtZ2NNTW9ldWI1VWM4T1V2ZGd2eFp2RGRIb1Y3aGY0V3VjVEY2V1pEZGUxMnhkc3FaUjE2WXdYcUEvRFAydzJJdXhaVE8zMExDV3N0QlhDQjdCUnVjZ0krZmd3YkpoRFZnV2F2cUxHTDZSUno4S3kvUlVrb1cxYWc4alplVW9WcVhLSUp3ZWRFb2I5VlNHR3RSTTc0aHFTaHRKT3dyUkRabVNlU2cwTTdoVUh6VlhHWTduVHlkZmdKaFI4eHozNHNMaVFLczEwc3E0Y1RsQVA2T1JtR1N1ZlF1N2g2a2dUYnF4aDU5YnptdmZsYmY2NHpkR1JjR1FrcVdVdnFLZUd6anYyYXVXRlRZRFFJSFFaWFlPRTJFeE9QUExZemZ6SCtnMlNMV3JCL2paQlA4SEN0ZWRUU0xjeDBqdkJsWU4xS0cwS25ndTN3eTE5QnRtSU5HOG1zaUV1QU9kVk9LZmkxV2dqRkpPekhaYUQ3eFZPS3Q4R3Z1YjZHN2U1bzZOeExpRVczT2hUQzFRQytZVGhWUGE1bGQ1SjhRNEVuRzF4YlNhL3RpYzZlR2p2cjk1aFZxNzRCZ3R1TFgvT3daQnJVeURITVhlWWlhL2ZJUDVyYWpmQSsrVm5BL3ZaeHl0VHU1WmIwaEtXQlorcE9NZkYvT25rdGs1eHoyL3pwYXAza1QrN0g3Q1dnMmxsa1ByRTBtRnhEZXJpUzNZekF3SWJsOFVjaFBnYVdGWWIzaFpUOVBTdnoreDRrb0hpTllGdWNTbk8yTHJZemFSRTd5c1NzWC9aTzJIMHVhcXI1eVdHcEdCUVIwckNkdTlSMXBtejhsNy95Z1FwRGFNeUU0b1hkL0hRZmhQaGVkcHJMSzYvbjNydWVtVnFNbm5mdkxrWHppNStDN3hnd0lKRVVSWkdKSGVxbWkzVFQrMnBaYkhLRjFqRlQ4ZjNiREhra2J4aWJ2WkdZd2VYVzNTZGVweG1hV2k0NGNlbFRHMzdGZWpSbCt4MzFZYnluOTZKY3R0cUdlZmdRejlVeHdlR0JtcGJvMXhSVExlejIxYWtCM3BIYjBSQVpOTWpsOUJid3laUU1YNklyL1psWnNaOVBQWnFuUTNvZGJmRFU4V3l4OTJQR2tHMno2Uk92NjVOWXF5bll6d25MSCtYZ1RNVHlKNllGS0FWakphczVxZmtJMDhZRVJCZHZUdkFkVmJUVDBkT2Vtb0lJR0xobXMxdTFCVXd2amwySEZ3ZlVjdmNtT0R1S3J5VzVrM2l3eEV5Z0d2QVNoc0psYmRxcXpxaWZCVW5TNmJqNGlFbVQ4Q2ovL0d1Sms1N1FuSnpxazE1L0V2Z1d4Ymt3TmlpSXFiWEdQa2RaOGlIQVlpYTJDUGtheDNYNy9TamdSenFNOFpxN1ByT3BkeEpWMjVzRzdKRXUrNExSUGRrbE9TaU95OS9saDZSc21sb0FHQnFpM21HTHY0QTlWcXRMUXVnWlpNa09aNExNZWhIbmVpYm8xZXZRZVRsY2w4T2J3ZVBrQ3R0bU1ZNC8wb1ZQUTc4dW9SblgzYnJhN3JObFRaUDhKakM2bHAzZFg3VGpDQVdKU3pXdGhndGx4MDQxRVphcGtkL3hleXpLK2YrWk8vVFJaQkhSVXkwR2QwZ05lMVN2Y1paSkI4aUJIdFNjVlRVckFKaXlSSC9uNmFyQzZsN21BSWc5REc4V0l4NnhMQ01vdGsyeldiNW1PNFNNUFlsYU80Qjh3Q3RzNjdJRVlMUnQxRGNCYTJzL3p3NEVDcm8zM1htRXB0T0dmTU5QRFNEUnZzRW91TzBuQXowdXNya3ZUd090Tm1aSHRYZmg2WmtWM3NVK0VFdTBZYklEQmNha0owMDJWQkVYRFpXM3FLSWRDZGJaQllLRHR3Y1dPWEVzMHIxYURERUJtdHExM1NtUjJYdUxsRWJETFdhR2NOVTFjNjZtQU4zOVBZRm1mZFphbzN0N3JmZ2c0TGVGRi9OTEd5blkrbU1FMEtydmlKT1dVY2ZnaFNLMVR0VE5XS3kvTEVqd0hTYVE4bVYxdmozRjhtQ29aRVJFNXd6Z241bnhkTXNJOVdoMlJYUmhpaTNCRjNTZEQxdUFueUJLTXJabTBJS2RhbzlqSHdtanJHdmM2QXR0TStBZmRLaDAvdEFRT3plM2p3eVBUMVJtMDhoQmRCbFpvMnhKQjNUZWdlV1IwUFVUSTJpZ1BIRTVCNVpKNUVKeDM5VFR2dXV5b3ZrelhGY1htajJDNVRrcU9VRmVCdEFncXVFcS90WWdUblZaZmtFSkMyM21wb2hEdkV0RmM4M3lCYmRlRzd5MHI4MTVVMjc4bG5ReDAwQkxWc2pEak1kc3U3UGZsRjQxek9NczVnVkVoUUp0KzZDTTc4U1hQbTM5ckhoTVdQM2RxVVBmT1FtNnFKaEN0S2Z2SGpKZzZxeWlodE9adHhIeGhGdk1Wa3Y3WFhsVTR5aXAyMnBNRE42clBOZzJxNDhsa0dGV1ZlM3RmeXlFR0RkM0p1MmZwaWJySFVSSE9FZ3BzVFoyZGdxWFh5U1RacVZHdXZ1c04xWm5ZUlZpSXQ1OEVJa0RLREZER0JhZElHR3I2MGd2OFVKeVpVTThvVFBPU3grNitRYkM3ZHJMU054cjRKVlRFNjNmVzVqY3F2N2d3VjZISkk0dEd5QUdBb3kzSm1vUVk5NkZlczdUdVNxdHlwR2FDMThPcm1EZDY4MVJ4U1JyK1A4d2UrQytKMlZLdnd3QmsrbVpkazJPM1BTMk04NkpYY3FzbDJBWHEySFlZOHc4dW1JL3FkOWZIcHRicVI5Qk0zN3VrWXB4NVRIcEMwZDBaaG9MN0J2eW5jUnAvNktoMlV4YlJXU1NacVlHUVdtUGZwL25kckJSSFRlbnZsbWRqdUZzamErY0RWSlprVDhxR1FReW9zNUs0MW1uN1dobllrL28rSVliTjFTbE9ObjJKaWJLZTdWOE5taldBaCt6YlNPRm5LQXNyMVEvUEJmWkxsdUhzanVvL2dWdldLV0M0N05wQUttYS9YS2NsSjQ0U2twbDhuVUJTcXVveTVQMTRjOFpkbmc4Wm1yZVVNRk1xclJXWXJKYlh6VlJISy9qTU01UjdwbWpRYkZCa0c2UDBrK2hqd0JHOUlNZzExNkFmb0p3Skgxdkc3MXBsYWcrekZnZXl0d2tEWW5kd29MeERyZE5KejV5R2hYZ0hwU2o2THF3RUllbVUrNlJkT09iOTh5RHhUZkZJajZ4WUdsZk9aeU83ZlZnU3BDWnVYczFCRUh1bXpqY3ZmcW1wQnBENmRVMUF4eUkzbDdXNVVhQXd0cmFHSWU0V0QwTm5uNk9IYlUwV3Nmcm5pdlZzeEVIUk9wMTJPbSt1OUIra3kzcXg4WVNkbUZFYTlPc3Nkemx3cjlGTTQ4dkM1WjdSRCtqNmVsczJuS1N1UVpWbjNldWNvUDNSV0V3R3piVHc0Z056aVdmRWM5cGZkL3c5aUdsQm1VZWlRSGhONGJSdklQNWx1c2lpTmVveW9ldjhoU1FFSmNHcFpEeFBPOWFyM3lKNXQva0NXeGNLbDl2N2Q4MDA1WnpNR09uT3UvR1o2YTR4d3R3Y1l4WlkvMmRGbkRuVThVSGU3UHJjQ3VGYm84YmZuUWRaQVdEV3BmV3Y4dU1saWpVaEplSkd6OWpwd25FWVJ0a2J5VWJjbTJqaVFOOHVWc3J1bGpKK29zRXdiVEVQTkZ1cXo0Yk1VYXYzdW10QXZSa3JMMG02WDViemdXMng1bUpiYWEzZTBHbHpNNUFMa1kxcm1EM0dFdlNYUllBVXl2YzNiVW0yOU5SSGl5N0VuZCtncDNOYnVNNzBINjFKSEhYeWR1NitzYVFUN0FHVEVWTWpJdGg0M0NiSXJDQThpYWx4eHhkVUdpUkRMZWJmNnM2U3V4Z25ieEw0RlM2cThnZm45WisxTnk5TDd3S0FmTFpMcDJScXFVZEpTSVVlRDhxMzR4QWNNeHREYTZHRlNQOS84VzlXWWJUNnIrcCtSbVVJaU05azVpYUJSRHRVVGdiVjJwejIwakJqYk9jd0lVWVllZzh2TTBRTEw3OTdFU0hxZXdQVUhtL0taR0xJenhLdHNKSXZjM29GWmNWcnRkVyt5WlQ1eEtOd3JnWUMzUnlBU2hyV2tRVFdIbWU5U1AwQlFkRkExdDREdHExVkdVcGVma2dvUzlxSi9ZNm1TbzJvakFvWFhncG9nZUw2K2N3OHJ2cEM3Q2Y2YklNSkl0UTAwUExZVEd5VjExWGRCZDQ0ajlMcTR3SEUyVVB1eUlqb2JMK1NjY1JZZk9DWElZTjVQelQ0UERuZGoxQ2x1SkRGeno2TklXdE95Ry9udHpQUEZnam1CYmZaR0pPQnVEb04vMlM4Ym9hZ3hadHZwWXdwRm5yb011eGJQL0lEdVJBVDNiUmtvY2puVTExWVR2OFAvM3hNL3piazZ6K294Y05EQ2pCdzJ1MEdoTjJ5N2FJSDExa2IxSzBLZU9sVXNCb2tzMHlrK2dTUmxYa2lTTVBrZzlkSlNPNHFzWmtTVnRUTnhCRWxQc09GbW5qRGxXTUJKMUUrSE9jR1JqY0ZWQ3VBQnVjSFV4bFB4aVJsQzR0UjVNZ3h4UndVVFdvNTFySFJxZ2ZmUG85ZGFITTlPU0s5U2ZBbDZLWWYrbVY0QWdQMkxQamJ5OXZWWHFYQ0oreUpkR29VaGJlN1FiM3V6Z3FOcS9jUjRXcE9jb0ZBZGI2VVArUFhmaDhpRUFSY1FIUCthV3VmaktibXRnMGNSR0tUL3dVcEZJUW5NcDNMZDNyNWsyTGQ5Z2UxN2RIb3IyZ1ltRlRTRm4rb0dFYVMwQ0Q4c0pUbWVjZzFNeTltN056WDB6SFpmWkFQV0VYemVVM1kzZzBDeWt0c0lYeXowT1Fua3MxQTFSbmJUUXRTajIzb3BWWkZ2MndvRkR1d21XeExMdmtWWmtXeEpYRFUwWUZUMHBMTGZqR25TMW00a2xxakdMdUpOendpUnpVNGFTajhwcUx3TGtSNDIvdFlHbEk5ZHdVZkplNDI1Z09wVUQ0VW9EaVR3TTFSVmFvMmREV242OVNEZm80VFdlY3NZSk5IMnFNUGYyRmNqNTQ4bkdFd2cyeUxBcXBRd1M2SkE4dXliVjlNMWtRMlVHb3JaVU1FMldEYlY1ckFZUTkzWFJNNDZqTWJCQWhaTG1nR2RFZENibHRNTjFSQ1JTQ2o1YkhuanVudXhTOUVCU0ttd3B0bkd2d1V6TlgxcnBoc1VMVkIyWUZGZ0g4SGQxUVFBdkVBdEFndUZFL201N3R5Tnh3dUZZdGdmck1Yek9RTU5TdTNFaWlJRkUzclNYbGd5VHZjTHFDY2t5WGt0UjZvZGxtdEhrNW5ocjVzVXI1bHU0ZGdFYTVGbk9kcVFPVGt0TlFhUWhUaWRLRHg5M1lndTY5Y0NBRlYwQStMK1dSV1pWVjkxczRhRTd4Z1ZVTGhmY2VPeUsrbWhGajlUbkV5aE5hSHRhaTBNVVd2SEd5dWNlR0tCMVI3M2dOUHpUMXVtVmhQR2pwUmZUR3drUVZXSHpPQ0FiQjk1ekhwT0ZlR1pOWEp4djJjT203eVRZY3dnL1VnaXZnaGduMVNzNlQzZVI3Nlo2a1ZmUTh3bGNqYllHVGErckZTY2FQallGYTJBejdZMXFFb1ErWmRxaURIMVVXZUVuWUlOS0h4K1AzZm9lTU9iRUs2emkxUGJiM1dRRXpsR2Q4eXBlV2lpV3Q4RVRiMkFoc29CSHZvQmc0Wm5zMks5Q0NTZllJR25iTDFTNUU3Q3EzWFE3NXZ4b3Y0SW94T1h1Wk41dzRSOVRqaVh2OEZlT1RzWmltM2pxTmttblZ3TXk4WUVPcHJKS28rdHRrVlRNT3ErUVRFTXpESUpYTzFDQUF0aGYzZlQ1dUtKWk00RmZPZmFMQVBhOXIxNjRZRzAxOU1VKzhwaHZqdVM1di9BQUt0ZWU3QXBoRkZGZHJEMnRoR2U0UlB0TVFTOEVLbzBYTW5QSG9idVVLTnJUbFg3M2tlYmg0Qy9icGRVZDEvSjdERWFDRWFkeEVZdmlacEsrOGJiK2xyQWhVMVFTNWlPYS9LRGlndlR0Z25xUkFwRUVnU29DRWNtbE5aelIvN01VaEI0bnlpeGN0TVVmWVptWGZ0Wit2TXZZR0tiVkFrNUtMZW5nVlRsb0U5RnBieVVia0poa0Uxd25PSzBtVmxWMHM1WkRJbWU0UnBQK1NyOXRVejF5QUhZU2YyQnk1Yk9ZRFZqZ3NrNllmSmRiSU91V3h1SGdsdHk0RkVMZzhnN2Z2Y1VEdUNFdWtlMWJYcUlxYW1JbitGMEFsTzNQUTN2TGc5UFhkQTJpNXJNcjVEdHhLM01RYzNSU25rYkJ3R29iUldjdlovZDJNOEZDWTJydW54SFRmT3ZrY3hHdm9PcTIyUFdySnNYVnRsYUhTcjk2a1Rvczl0NC95N0tGb2U2cVQxTW4zYjdlUWVHRjZGNUxrYjMra0ZTNGlDN2tqUlB4aW5jTnZqZXM1YlQwNGIrdk9ORzBJZVk5UE9kelVGSThpaXZEVWMwblc0TnVVeDdNbGpqOXREN1Z1N1pKanJjY2grYlVuUFlMSVpkTWN1RXJNVnI5ZVdZVTZSS0d2azM4UURxY1RvOHRLWnRqZE1DMDlGNS85QU5jWDBhQy9KZGVCNHVwbVo1eWxvWVdydjZDZG5LY2JHNzJoc3lCS0xXNHVKOWt4WnA4WVZzZWVIR2g5eFppTVE3VzlCdS9hU1pEbHBzaGRGbXZkVks1cVVoUGo1T1Y4MDNKZklTcTdTaUZGZTZrbkxtMUlOTUlnbVhiSnJLZEhmSjc2Wk10a1A0V1BjZ3pOYkFwV1hoT0ppTmRYMm1UMzBIeTh1RTBEWXlDV3F5M2lkQ1hTSkZHV2hRMUNSN0pXdllaeXdiaXh4aWFRVEw2NEQya0VBdFNGTlpMYWZxUkY5WXpmS1R1TlVFMmxMNk9yNGhQTEZwTldPRzJXQk40bGpDYmNDUkZLM2RINmNta1pnajJoY0cwZVlMdXo5L2tlV0xzNjJUb3VrazJOTlJ3blpBNkYzRjR1UDYzWm5yZDdEWEdsZXhHV3F5VnBoQmdoM0Z0b09NemVYdjdPd1ZEeUh6YW1aQmxmQ0tSdGZzeWJyRXJlVE1EcXpzVjFWODVhOW9kNGtEUTlqTU9OaVIvNEdtM3EzdVhOek9lTUsyMGJxTUlqTE9UbWJDYUM4YjdJU05wYWtyV1pFcnkyajZ5QVo4RVNQVWFxYzU3U3pHRFNvZk9KRXBwdklqdm9FMnNCTjhUNGpqNituTTJDd1Yxb1VjS3NhRTBQWHBpVmhTRy8wL1lDQWNMQThYaE5aT3lpQlBPc2NzVk5uWUlNejJwWTYrcmROUm44amEwSEdNZWo5UXM0V3lrcGZxRkFKaGIzbDN3NzZTeGc0d1kydmtXaktQYkozSERqWisxaDlCeFdGTTZIdXNqZDJPYmhteDBQNzFZeVd6R2FBK25WRElKYzEzOFRmMUpUR3FqbVpIK3BFMTcxVmRUSVVaMjJaVlZSc1lHdkEzS0YxeVVhT09pRm1SSDZnSVZTeWdPcUdiV21DYmtlOVJrOUJaMnJud0FKNWRSNzlIU2x4bUVqcG1PaFM2Q2dtQlJoVXNCMXNIQjZDT2JTdjZQeDl0eWtZZ1ZkRTl3aXBINU5HcDEzNjNrOGtqM0o4WEI2NERNV1RRb3l0QXM3VmVidU9Gckw5Y2VvQW81cldNWkhST3Q3ZjJYOUcxdzEyd0dtemFMWEpUSE9lTExKMncwQ1FuQ0htcW5mNmdLVUVVbjkzV0ZRRVk3Vy9teGs4NEVkVWgwcE5IS21uMnZObnlEZm5uQUJuYm5Ib3JQOTRFNmRrMXlCRWJHMW5JdEFwaWt6WkxtZStyaVprYWdjVVExelhvTWZZdVdHbUlLdzlhNFp1K0xQWjJydGRuZWFsNHRjUmJoUjBBTDI2TUczVVlaaWhvYXNscGpCVVF2cWFHakFvMkY5b3RqSnVkMlNleVpBWTRtbzR4WFFrZlFKdlRWd2hBQlV3RVlPMUlWQld1b0VjNVpYem4zV3RkRVBzUVRUQVpTdEF5VW84a1pQZURkeGNpcHJhR01YRCtPYmFjdEhsZ1JKcGdvODhwL2FmMm9PbUtJcEFPTUZmRkxUbnFQczZTYlhRdkFmMnZJMmlMMWUrR2U5WnYraXVUa0xrRkRDZ3FOQXA1ZG9GWkxTMzh0OHVoR0J5MlREY1dSTnJmcCszNHJYTFVZUElTTVUxRkcvdmVXdys0aVY4ZDhkK2lsTlBIU0RDR0l5M2FkTmZyU3N1VXZ1Y08ra3l6V1lhdmpuL2QzbnZlUXFCV0FnQW9ITHlyS0JZUXdrVjlzNnRlWlN0Z0ZLS1FqZEtHUitkbndMSTNhRTZrYk9OMG9URUR1S1ZibXFSNXNVcWdXMzZnQ2VWdXBsMW5LRkIzd2V0VHkwN3NnTytNKytHSTVaclYyYSt6TmRHaUI2alhpckxOWDZsKzlqZFlhdFdkQU8yRnhBLzlTMHBYbngyOVJTWlBoUHdOL2hiYk1KTHFiMEZrc2NYWlEveVFlVlhXZWxGTFBYVGl1TnlFUkRuWDF5R21zajAyK0lRejlJa0Z1b3JyTkVVUitDZ0JmNHFSODlpbnpuODV3c1NhYUVSTlkwUmFnUy9MTHYrNmlWTll1cGh0d2R4UExIanh4U1BlS0dCd3RjMFY3UkVjUENQb2ZvYzM0encyRW1oZlZvNXFQcW5oa2FNTE96UTltc1dLM09GY21Ndm1kZEI5NDVvbkZXeVFKWkp2aDRKZ1ZOL3FOeHBxZGNNbWk5ZlhxaGMxQUkrNTI5c3JxeHFWV3NuVVRacFlMbXRsOTRVU0RHRm5GQ0hEQkk3TVB5QlBHNE1uWWQ5Qm9GTGlsdTlFSG82UDVIZ0NQWlNsTXlDb25meTVZRVd6dnp3LzNJRVV1WTRDZ1RRMUcyM0VteGNHNXNJT21mSllCTURPYVd5S3RDNTFobzBja1FBdjAxaUl1STZMdjhtNWhuRFdwREJnQ200K0pRckdHaWdtWjhFT1ozWDg5a2FmSTZSQ3NTZ05adWtDUi9oSUllZG1ldVh3WVMxR2lDWEpqZTN2a2gyTXFJRjc3ZWg0Rkg5dlFLM0VkY1g2VGNDMnc1dGVuR1E3WWtIWGZxdEplVk1JbHlwK0hLMENVNFJGalNvYkk1K0NpSDVJZklGMTlTVUR0L0hQSm40VjR4UjVpZ2hFb3ZGQkZ2NVNkYTM1SUJCcU9xRmorcjd5cVFxWUhKK3NiUm9Ba1FwSkpDcE1TcHk2eHVURXp0NGViRk9iT055bmlNdURLYmtQZmxXaTBvVlVnM1MycEl5aXVZUk5MenE5UGQ2Y1g4Q2N4TzRMZTNEb3RXQURCdEVYemlkY0hKZDNPRG5KWkRBYzZ2cW5MWXpyUEp2LzMrbkF1SlM0TExNNnNUYU13cG81U0tXTGhGYjFiSzNOOTBUR1VEZmxKS3hGSThSZVprNlUrUFJxRm1PVVZjWGNGK1liU1Vwb0JxaUNsd0R3VzRuaURLNjV1LytXMTBaVkJvR0RaVGVrcnZvWFVsYk1RQzM5OXdtaisxQ0ZSNHFiWE5hNEcwWS9nOTc0WVpZZXVRN2ZsZ3E3Y3JmcVhPajR3RGo3UEF2UWdNakJiRGxhOEsyU3VEUk1xR05LM1dwT2ExV3NBWGlhYWtKV0NWbWM5OXZrM1ROMGxFUWJTVUtNd3ovQmV1QXFLU3Y0STBpdSs1VkpsWDJkRENOVFl6UVFNTU1tV0VtOHJ4bEQ4R2hVaW9GT2plZTBERzI0YS9ocnFKeUVrNkdXSWMyc0JUTGZ5b2xiMkFwUmd2dzc3Y3hoQ2FQSHBLeElvek9lOW0yQUxXZDluRW5xbXpKVENFeUUwTHMveGN6cVhBenArRER3WWZ2V1d1ZUwxL3EzTHU1NWlJWGs2dGgycUhUUm9rQWtPeGZRRXVyL3VRME1tSGMyK0IyeXBVK1dBVlc1eCsxQURyR0U4Uko5c3R0YUdNSHVZVFV3aSt0TmxVVzRUTzZWSzFGc2xnM0Y2ZzdCcEF5NjRVM0tIS2xkYUtMUVphWlNUQTRvc3pyZWRiMHNlS0ZwUGpnVXhJTGo4RmwydDJLZEl1SW5BK25vYmdKYXB3dFRINlF6cUUwMVdvRkpIQ3ZVUVdkT0ZyK1M5MVZOOTRzNHYxc3NtUjBlb29NQkNZWGNSNVBIQWZmbXdFdHNYcUZwQXpuRFVrT1liQW9kYzVYUk5CK0tOdGxZbTl4SW5YdlBpWTlMVHZGNmxUbmJpZEUwN1Uwa2tJcTZBRy9FMmJjKzJtZkliZXE5N0VFSTAvWklMU1lCMnhwSlQwcUxUeGlBd213cTJqbW8xQW9pTnVqRzNCd2FIWjl3SGNVVzN0ZFF5ZkRXNzdFcUU4WVFpMUUrTnR3WHUrNTNNOXArSU4yMy9SVDJJVGZyVG84UFd5Um1uNGtzVTZXWEdoVWwwY296ZlVJSUhSNUtPTmI0NzBxRENOb1k3K2tvcE1kSm1RSTRtSGRTc2xlN0lISkxVVlNRN1JNa2JyVlAzcHJmQ3dhWEV5UUgycWtJVE4xWllUbU4yM1ZGZmNOaUJtRlh3eEpXMWFDTlQ2Wjc2ajFTTmM2U3RrV2dyeWtIMTgrSDN3TFdqUmN1cllFR25SbE5jSzZMV1gvWHJSeVNpYTQxV2JRT1NMKzEyUndCTll4dXRQSkRBalQrOVFOanVhVmRxc2I4NTZ3b2VuMXdlS1JkcDkyR1Q2VkJqK3JZM1VEanpVVldKelhXcFQxaWE5MmFPMDUwQ200OUtPYWlTUWhGUVVjVkdsTWVzQncyYWJyQVM5Z24zWDBzNG5BVzNVTklqT080Y2NKR09lby90WEZvaXZSUGdNbktjdmdyOWFqeFNNaEplNkhWdGpKNXVEWmpmSGw5U2hCQXdaUGk2aU5sbW5NSVlFbEJLdDNmQVZpZnlnYkgybFd0Vy9tYUt2a0hQbUtZMTVFUE5ZejdIUTVRSnh1WnNUT0xnSndiMm05MDI0ZVFkbGJJajBWQWR6dDJ3MzcyUmZNNmgyL0t4ZFAzWlRFNzNXMFh5NWRyRy9YTzhQNWRrQVVhbHhLTk5zbGxmclBiZERCMmozVE9tWW8rYk1NVU5wYnhqMVdFWUY1MXBEUWZQVG5LVXkxU3JrMHJmOHZDV1JsYzdtYncwUkJvV3JJa2Qya0txK0hBVlBSUlhlNllNNTArNUNGbmhZTVFiQ3pxK3pST2NpK050VVVvMXozV0tRRHJGQU9weC82NU5IQ2loRGova2ZCM1hYOGdlK3RHa2Z2VnZVTGtpblBneWRJc0szVW9IL0hQL05HTzl1azkyNzFjVjhEMmN4VnBKZFZsdlZPRDR2a1FHRnpmVmxWQlY3WDRzZCtmUGEvQU8xbG9LTXRXaE9jRXFGNWtaSjlsUHltT1k5WTJmRGV4bHJDZWxWZXVJTFhsVFF2N0pkSGw0WnlaYWV1QmJVUkYvb2ZJMktBNkFiZEFFcEdoVGtlbFQvQmlNUmhrdnkra0RWcXFGWUE4Z00vblJQdmlnSHJjSVR0V3Y1VkRRbllzMFVjT1dRVHBhMUZ2VHlHNWl6aUM5NDlsZm9wU2k4WkpUUlhsQUJxMVZBSWhBenRLNlpnV2dzcGtmeUZwL1dwbGptd210SVU1S2lsOWJWWlZkWTBNK1QyTm5SUFJQZ004bm1hdG1GR0JxdGE4UUNTbmt5V0xDL2hRV1hCd3pIdDVuc1JROEdKNkdBNW9QcW84SGlmSE9XVnJ3VWJHSkRDTFBqRHlicU5ob05vUHpjN3hMa1ZqbENLVWE3QzROcFVoNUFTTDBYcFRSaWRKbzV6eWNUYWE4NWRsYTcvTlVwaDhOcVpnNytvMkdqNEhUVVk5cHl1ajU3QlYxMHNBalRreEZ2Z2JZam1VOXpnU2RjRDBPSS9BMWdsZXk1NndJT3NoS2YxcFlDYkdTRWQrUU11Zm1ESnE3NENtb1ZOZzlhcTV2eGNKNVlKQksyTlF4dU9qc0RRRHByYzZFVTFuaVdJNDBPck93cTViTllIenB0NG5UVVRRNXdPc2NqcGJmVzN2ZHRwYk9TeXlaT2FTWXFYR1BBVEdUU1hRSjFnNG1GSHhDOVZrTkdxUy9paU01Yy9WR1U5RUtxWEdTQmxJbnIzSUdKLytYR2lUMmdqU0RCTnNXdnBPMkdjdXFyVzZJRWRoanpyM2wvVnVET0Z3UmFGUy94VDRIUE1adXBEdFdHM05wYmJwQ1NiZjZvUkhkQXpTNnl6TGlkbWkxa1k0WHAvRjZFMklUc3JreUhibnQrV1N0dmtWb3FYZnR1S3lnN3V6SVNHd253VGtlNDQrNVNsM1RraWwzcmVGaW16Z1plTEY3UWR6VWdoZXoyVERWWTJmYVBERG45TklZZHE4VWFIN0VnMnVvMURyL1dycThkaEJscW5nL2NzYk5JQU93TnJpYnhRWi9FZzFUYWs2Mm9leEVOdDNpMnRjL3JKVG9OQkFsTkR5bWpJakVZK1ptT0JIT0x2VGRCb29tQnpYSWNOS1lNYTBQV0JKODlrMEJ1VGdKdUtaclZqY0s3Z25Ca3pMOUxTZDRNNWRlbWVWNkJtV0tEeGxmeDRQVC9CT2g0clIrbUtKZ09HRVZGVW1aZno5QTdTSTc0SFQxV2NyYnlIUWVhT01iaWFBT1hneUo0UXJKbTJ4MjJ0T3dHcmUzaVNPNytMcnJqL0JkVmVuYTlvNXdvRExueSs3WjFZZ0dURldvYWFTWWJTUWJNRzg3YVpnSnNqRmdEeW9QTnBObldUWVZ3eXByYjlIMmRJRTA5bFozMmpKQnNVUnFDWEJ4SmhXNWtBZGlHTGgxenBhSGs1SUpVSWVEcll2ZlUrMXBtZUxXUlFtc2dwZUNNUysyMHBick10d3ptalVFZG1WcXRFZkpDWjdqajVQOFlGU3VabEw0Q2lxRWtkZlI3ZHRTZUU1YnpyOTM2VnUwUStCbnV4T1QvNVVXRXZWdjdud2NWRURwR2l3R09jVnZ1MW53ekluZlFkUmsyOVI0S1JyNk9ucFo5cGI5dFh6MkpPVE1rMEd5YkFIU1JKYkg1eXlobitYTG53ZGZLbENyREpYdDhVMkhnNW42M0gxZnIvTXJ1UUd2MFZNVkJ5cTNBNUg0RzZ4SlQrOWpQcWlvNVkxZkU1ZkdBSXRDWEoyeURPOXhwby9tT3lrcm83NDZGQ0tFbktIVklhQzBwT2RTaHViSFZQVVFmZFQzUCtkeHBWR3IxT2cwbUxrY09jeTJFaFFGUGNyeEY3QWFSaVpBYWp3a0tQVEtHS2UxTFhBWFpkalpiNjhCVnMwVFQ0Tlp0bzNuZkQ1MWZVWW10OWVSUmdyemhmQmg0SFM2OGZ6enlVcDVhOTNvS0t0ZUdzWm9RakxlWG1rZWxNQ3hVdDJMR0xHcklVZGpidTlVWU9ndnE1Z3FNblo1N0hzNE05Vmo1YjJDTWl1eDB0MFE4ejZvanVhN3pTbmVKM0FxMys5OURmTU4xQS9KTUVsNWdMWnZRQ1VRRm5ZSmhYLzBWWHlZbFcxYmJ3ODNiWmNkYXdQVXdpK1hQN1ZyamVOc2lKQmVKbWlGVnEwYlozbzUrSVcrbDVRdWo4elZWYW9FWjA3RUdMUTcxcllDWHZpakZVMlZRZXZvR0ZKdjJZbnJrN0NGQWZ1N2Q1VS9kc1RXdDJZOVZuTm45OTVyN1ZuS0wvRTB3S0ZWRTdRY3NDeEdXb1ByUjZsZko1YW1CcS95Z3lLSm5uOEQ3RzdtS3BhWWtFNG5BTnorcjBPYWU5RXA4OFRZTmpXcGErU0czZzJXcmtndzFrMkZnOTVCaEYyN3BXNkkwOHVxT0J2WjZENEh2R3MrOENhR3JYM1FLV3FzUG9ucjNobHdRT3h2bWhXN2FvdWNveUdqOVE4M28reXFKTFBxbVVhTnNCRmJYSEhnQUNhRlcvdkFiWXNJajN3QWN6VGxpOUcxUER5azRpQWlWNUNLalJmM2pPZ2NkYTRYaXpwS2pQTWJ2d0xNTHRvSzhXY3VwZFhnc0pPV3YxRmlVc1RvcCtUOTN1emI1b0UwZ2VGN1hPZ21LcEphQ05yYlRQMTdPc0d6VUFZWlZTSVhzbEJnc1h3K0dkR3RkZE1xKzFpeHBaNVVGbmlHMkpXNyttUUpYMzBQaFlmZTJmdkRDOG1KVnI5c1lHYlkraVI4UzU3L1hZOEhFcDdEWVdBblBkd1JwcklRYXFoT0VneUFzSDJJUFArb1RWTzhIRHQwQ0ZjTGl5RXhpc2xGRU85OUw3dWZnVVJ4amVFZXFoWW1vWHB1bDNFYXJkOEpqbEZSWDJFb3pLVnN1S2FzNWVSbzVqL0I5OCtrQ202K1JMdnl0OU9aaUppMEJPaGxCeWdpV2FuZVprdWs2QUtKWGZHdzFZYTYrekxTOUFMaVBML2s0dTlVbk5uU3hGL1pUNGJSQ2toUjg5cCsyRkRrQmVtZ0JWRDdLbHZMVmNKWHFxZEkvMEdWN25ZRnB3VDFYV0FQZHFrYzcyeE1HRmx3dTFTMS9SQXhKdkN3TEhPZnNQaU5EbU5mVitKMW9kQlFQOUNsMHlWV1ltOVVKMmd4cVlkNHozZnpaWEYvOEszN1p4VlovdzdmRzVxYVpqTjVEYjZVUkZZOEUyekxoRVN4TEZuY0F0NGhxMFBGZ0ZyT0JPUEFkbE5GWlRIeDU1dWNNNkhVUHh4YmRQZ1dhYzRHYnBwd3BQcWVJZjhINlFxSnJOYytiWm9TY2VCcVIxUTArVkFjemw5TDlLZkVLTnd1U2REdFhYV2crSGpTQkxOOSt4bDBJU2lxRjNwS3puTk9RRU9jWXJEd3p6SzdUQlJjTTJ2VlVzS0RRMXRnRGp4ZTdaZVhMci9IZHZ5RFBHS3FzSEFEWnIwOHhUdXF5ZHNGTjd3ZGNXMGc3UEQvT1RnenljeWZzOWN0YWFlNzhON2ZBSVNWM0lvNHNGdDk0dmdnWVloaUN6UENqcXVCbVA4ZjQ1eVhieUUxdnc1L3RBWTVGWFdZV2lCY1RmVEpZbk52QWtPYXhna2o0TjFSVXBHcTQrSXVHb0NVRCt3NVhHYjJ5aHlnUHg5djcrZ1NsRmdNKzlUTGFGbEFDUG5PRGtHS3IvT0xBMDhpcC9nQ255bE5DSVYrL3pSUktOTjlpV2kxZk5QY1dQWnlQVmVLQTh4ZTRUWDRGRGVpeDBsV2JkcWV2cStlQVN4NGNWS05MTVhLSEFqYWZwSUlqM1FINWFKQ0VPaUQxNGg1L0VoN2g1U0hUQ3hLNFA1anIyemI5d3FDZVl6T0xqTm81ajlnVGVCV3NPekNXMjN0Uk9BZzc2Y2lCV3BuODZKcXlwSnQzTXhKYUJXdXJvdVgzSFlOQVN5ZHFvdEQrWXlZQWtkbS80b3puMlpxZkVZcm5rbVZ3UFB2b0E2VFpGK2k2d2FWdlgzSU15akZETzF0TzA0U3hBM09ZUU9UQkRpTHhEQnRkY09Ic2dNYXFKR2tYN2NNWGJQdkMyRmJJL2ZYcjZ6Sjhrai9OZmdsQVIzcC9PcGRQWU9UVXJqK1RLSldrWEZlWGJQSlBRWlVFbWg3RXlPYWU2cXdOeVU2c3pjdzRFcFo0dnI5OEt6aSt6WE9nUjN1bzBWU3hqWjR2N0c3ZWtDTGtEZ3VyM0JRUmI2akovUGJyY3l3MUczNFpURlZMRDJjQndYTUozSlBKZmdtK0g2M1gvVmlMSVM4THFIUmRMNmJmSDJoK1dsR3VTVWlsVzhsYldPTERnV0FoS1Y0dGJDNThxZEpVbmd3enJUT3owVU1sT0xMOWxVSUxjTWc3dy9HWHFERmhEc1JwVnNtRFZucExZMXQ0MU9KQmhiMkMyMnFpcEZXQWg3by90STVoeXRadXpUcnhwdVdoUWJhTXFBcFFOZkdrZ0ZLbXUxSldWSkVCY3YySFlRM2toUkdyVitKK0t1SVBBYk9mKzJ3aG5kcDZXMXJzWXZYVWIvZ3FOdi9CVkZLTFlnTHlhdGM5SStCUWlSTlVuWkFWbU5FcmlFb0F6bHMyY2lkbFFtK2k2Y2wrMHpxcXdwZXdXN0ZxYVhQbGZYWG1DRFQva1U3T285cG1wTG9UL2dBN1hmU216WmNrNUZYTWRhNFVRNlRkaEZNdXhLYUFvK1BEVXpEYlJ3NmtMdHZRWXNuY3YvQkYvdk5Xb0lvamFZNVBOUUNTb1pRcUU2UFk1Zy9SSlo5cVJiQnBvWkpJTEJWSmN4dEpKeGRYVzFtdFMwZUNuSlVuL1JmZzZ3MFRWUWpxbjVoQWlNeW1wcTR2SkhrNUxVOStIUm80TnMrc1R2RC9vYVEwN2NWV3VwYUxsMDQ0VnZuaXFSOFg3dUNDaURoQkU4YVRpVlFqSk5uWEtjbmhRc3ZMZjhBV2p5WktyaXBsajhBRERiQWRlemsyV0tFVDVaL0tPZnpId2paT3JvLzhMTUd0ZisxMFp1QUxEK2w0YVE1N1VPcFRBTjFzb0NXUE9BWDI5Kzd1MHVwdFhvWWo0VVI5UjRuYTFpNC9ZbENZeTQyWkRxSlB6a3Z6OVptMFVRc3VvVVppZzB4aUhqVW1WRng3WCtoT25NVUxuYyswSk0ybmJNQmNVbm9uSTM1OUVGV2tjTGdhQXlJRXVTUnN3eWY5YTVMMFMyYWNPalQzSG9wK2hHL0d5aGdZdzlqVWdSN0JQcENDZU5sS05ZV1FHL3JIL01Ic1d1UFRnaURTZ3orallpQi9yQ1BlNjQzVFRlSlN0Y2Q3VyszeG1vVHFscitMMHlFdFVrZk9jUVd0L3hyZWJLWWg0ZXIxZEJjNzhHN2NIRUYvU1dGRzdmTHJBbHhDb0lGekFpLzVuT0lNZlBIeUxMUHF1RWZWVzZERndqVmJ0ano1R1FFYzU4WGZZRVdVNnhpTkFNSHQ2N0FodWVuUnhhV2tGejE1VzhaQmFVTU8zM1ZGSE1JZHJDb0Vjd2ZhZlU0bTh3VVlQRHFaVzlFUmNsZzBRTzVnK0t4dWd4UUxBeGV4V2FSWFp5UXVkRzUvWngyV25TU3lHRjdNYk5uam5rK2lkOWxDZzlDMXZMUHdHNmhZQSt4OXQ1ZzZ0MkIwbmpYaC8xMHZkWDM0Z1Exdlk0NXlCWHRnV084dFFNZ0lEVW1oN2VPRnBBSUx6RjBPUUpZR2ZtYnA4aUNtcjhqK1p4cDlUYzNWNC9xYzRuNk1mZHVuMnVmaEhkNGNjMTcycFIwY3hPRDh0TzE4U1RwdTJqTk5zUFpvYkdrNEc3NkpYMDhXL3lVUC9LNVV1N3VUUUozeXdCK2lxeCsxQ25rWExZZmtNdHN1a0xvY3BXS0MzclkzUTUzNkRDeWkxM0tiWTAwTjZmTlpWekhwZ0VFbWVhQjJiQ3BzR3JuWHdqM1pVZHFUSUJLQkNHVUx4YzkrbmdhelJiWCthVjJCcDZwdDJ0ZHpTV0FnbFJhb0lmZ0t4cjd4UjBRUldsaHZqVk9GRE1YNUxaaE95cVNVTHVYSUhWT0lER3FOcWc4d05CWlVjRWIvSE9xR0I5YW1QNmNJeEFJRGNEZUtqeVhvOTVWbWFDWjdEOHZSaTdRRGJWYmdVbkdIS2RTNE50ME9NOEx4bUs0RWVjS1E5UklraURqUXk1MnhWL2dqNWhWZkJpYWhQa1BRRUsvRGN0S2NBVUdKOVhPMVdSNFdkQjErU1Bya2VtVWEzRUZ0TG5sQUZKTjBYMFhkTUJTSHhUQXdKMXlnYnB2TTRnQnFrVmhYdE9nbEFESDU2eU1tMGZiWmNEZzJyd2l3WmpnNjZ5S2ZDaDl4cWZaeHJSWUxOWnRsUnlxS2tQM2hCRVUwT2F4bmtrck1aVVVHYlJsQTliNXZJcnE5d25GYUt2Vy9XVXFzcUxxWHExZExTN0dKOG8yRkMrMExBZWtCaEtEY1EveW1ka3NvREpKTTB4VEFQVWlIaFhXdUpZYlg3eVFmN2NoVHZhOFc1UU54WFc5eGdreFBrTHFjUS9CamlaUWozRE5DdEo2V1hiN1JkaXI2bWN3SkMvYmFCRjhVZURVU1ZpY3VxbUxUY2hTa1hqMTc1ak02T0wreFNma2paZE9YMGVMSUk0YzdVNGljUUtGSjR4NnUyb3VybmFXL3Zac3F5SFNVWDdwdUx4dVFyd3RHY1lYTUMwemd2NGNQc0pVMk9neDhGRDFxUzY5R1hXcEZHV3FSQ2NCUUsrOWtoL1RKd08xaXZDbG5veFFvUFhzTXlFTDF1czAyTWNhbit3SXFCL2ZLSkZkbVhrWWtKM1A0bnovTitFMkorK1JsejcwNXpZcVdDNXRJWHdtNko1aFVaSUVadi9ZS01uemFSdzlRM29zSDVMa1FpcE53Mkp6WC9kK09EcURUaUE4ZG1WdzdiZmg0ZnVsVWFFSnJyWWFFdTFOTE9nL2sxWXJwb3htUG5VUnRoQ1lOZXJBdzZldnBZM3RoM2ZMQ3puaHUwb1ZEWTZFbTJhb1NsMHVFT2tXSXVoOG83Uk9kellkTFdSaVRtQ3FIZzVveDhLWjJJMWh2ak5pY0kzRCtXaFVPMW9wK2VZeE91OUpOZnIyQnRxOHJEd1pWcFV0amhQcDQrS1ppMkJNV2dlOG5uN0xLRkRvcFZERWlBUUdOUU96YnBVMFhxNHRXaWswSFVhNXRTaXpMQjlqb043ZWZudmdUMU9nTGg2SElieW1rRDVVYUhlMU5MTDk1d1A4NEVlME83R1RFVklFSVY1MldBcktKaUlQNEtKZHgwTE1YZ1Z0UU9ibldNV3dUeGlPYzl4N1RHT1ZTOHRFOGwrbW5OMm9ZVzYzZ1pBdFJRbDd2UjBHUUNEY296Ym8ydVFXU09Gd2R5NFlib2thcDhRMENua2l2Tjkvbjd4emk2OGxFTmVyLzYxVnRSdTU3ZnlOTk5PbWJaTmN3SDFCRlZPWFhKSWxzbzNWcEZhanVvNnJrWnhzSUpDL3p4YnRTWVZrVWdsakQwZ2R3eVRxTlFxUlhFcm5LVWVUTEs0YUNCcGtIK3UySXVEMlRxNmt0S1JRMW1JTDJhNno2ODdIRG9YbXBTaUNEN3lYdDlIMjJEZ3NqWVZvSW5XUEF6R1hZZjlrZTFKVGpSY3BJelRHaTFCT0JTSkNyRS9xVWNEYk5aYUJWSU1HNVNIdWtLYWRYdEMvMk5NeDA3RDZDMzA1d2Q2Zk9vazlCUjhPYmk4OEF0aW4vSVBmMHY4djZkdWI3VklwTnZlLzJJdnR6RFhrS1RMK2YraFZ6NGxXZDRYa2trUFc2RlpNNVhBRE1SeDY2V1pXN1UySk1TclljWmJPeWNmWjJKb0ZnYnhUTGR6YlJtKzd0Vk9RbDIvZUdhemkvNnRDaXNxZDFsUHZBVWhacG8yaHFVcHJtQmhYMWNleUFRZmdpZjZOQTB2akpUbHVyUisrT1RnMTF4aC9odzkvK0NWYThuQnhvL2JoSzMyQXhOdTR6YUtwWHFxTW40NXlyZDJwTDh3UEdBeVl1dEhYWWN3cmJ2c1QrcUJCc0FMVHpVQW5YNHhXajBsMmFUYVFWRnBQR3FYY1dBZUNkVlplL29tT1Y4cnFrRnBCSVRkbTZGaXoveU9DcVBLRDhVOHVGQ21zeWs3VjZORUJ0R3FoQXcycC9nQ1dyWXh5bWFBOUxIaHZxVi9GNWR3RXpwRUQ2Ly9aNndscGl1SU8vcUZRY3ZLck0yYVFEZHdxaDBCbVVGbU9jYnh6ZmhwNVJMdXZlTk1odzh3cjlxb2Y3Wm4vK0Nid21qbkNwWXFPZ3RFSkt3d3pQNDA5ZlJScjREcXlCRlBuWGdSbEh4UDdFYVFpb1RScGVTQWxzQXNXOWRpM3Rld1J0SC9oZ1VuL0tkcnNxMUl2M2pyaWo4OW9yazFqYW5UNmJ0QmU1cCtMR3pUU3hOcklrdFNzajhZT3Y0djQvem5uWGQ2QTZhRGwzZVp4RVN5TENFNmsxVVNSZmdlUkdaWUNtcHJkSUhoeGNMaEUrZXZ1MjNQRXJJYVdpZEp2YVNUNk1SQVJDWC9BdVVlOWxhQTJLeGNCL0FKcXpTN0NCcEZHcnpRN25ZSm0xK1VxVnRDKzc5ZTBFM0VsbGVhS1lUbWdOSU8wa3J3TXhtelZPUUJCbFY0d3kwME9rTmV4Snl2Y3k2ZmplZElPS0xIQ05TZ2FUTFNzTkI3bW1IcVF0OUhJaTREOWZackpyTjhpN01BMjdnSndTeUFLMmk2dUFJODNVOWNMNU15SmljejE5WkREdGpNVFRybDhMK0M2SWNJaWZQNGZXNmN5eC9qY0ZXUzlYVUhXa0J1U1lSZmErRzRMU2JwbHhwRjhjL1ZBbExhK2VhQWRKbExBanNMLzJMTXQ3bU9HZnhzeTdYRGg2UFVKdkpiMGozeGhjN3BtT2ZHdVZwMkdQWVZybzRybVh3Q3ZzTG5La0FudG85NUtpRHc2SU0zZFhsaU9CSUY0NUhldE03a3J0c21Cdlc0VitYQVhuYTRrd2IveTJ4azNqTEl6UllSdGRaV3l4MFk2b2x1RjgwU2V1WFozV3N4TXVNQ0g0SDB6NXVrZWZyQ0NQajc1ZEJWOHNlOXVrN09QNWVSZnI2SXJkVkYyWkFMakZzZE9IRThJV0UzTFk0VE93a3VKblhCeWZxSEdtTlFGOHdwZFg4SFdkK2FpNXAwTlNKSlAyVnF5MTZZTjdGV0RpdjJhMytOZGFRRm9nQndIeXRJdFVRbUpWc3ZNR3Mwc2lKdlNoczdwTVRaSmtTVE1KdWRyK3JXdngwd28weUwwaW9MYWFTOW9Pdm1BR0lBTTEwR2F6QnhUUWpTRkJKendCVkU1K24xSDI4M2FUdzAybDNqKzQrS00xNGRIMU5YZFJPYlRvN1hzc3NFcS9LMDJ2OGQ1NFRKT0NQdDRPRVV5Y3d5Z0haMzdkd1YzclpaZzFrQVliTmZJbkFpSWo3NEY5c0MvcU1Vd2IvRngvbjhaUmFzMzl3a29ZK0tMUmI0SC8wM2ExWndQbGJ1aUltZ3AzVW12SlJ0eEc1d1BZWmlPR2dETW5rbnlqY0VSV3ZrTnJKam9lV0VTSlRZbXEvUkxlQ3FIUWowT0Z2bUR5clpSTFVpVkFsUGZLU1oza1l4ZFJGTW5Hc2FjNjZHaEh3VVNENXpoQnhxNEJvNmNHSDFDeERlTnlJdk0wRDlGalBXMnRrWld3NlhTK2ZKZUdRM0tLS3VPTy91RUJROXlXcDNrbjVMMUdubitHK1JwVzViTGdiRTFyN3cvM0JhemVSWEZnSDZEV0J5OTEwNnAwakZlVFFNalJTZWdGdnY5Y0hiTEp4VGNROW9YWFpFOU8rcUxHNnd2VkpiMXAweURXblJnaTR6Z2ZPSm5IS3pMVDJZb1hMc2dQMDlwMXEyU2lFdVdJcVplcjVncHgzeGdxNEtPVWRlYjBuSVh4NGZzQVd0ZWwvSVovbDRRZVM2SHE3dG1vUkFuUG9nTk1FeHdwSTVSb0tvbzdVMi8xc2RyRFJ3dGNDZ2RHYlZhUWJCSTk1MnB5UnhUMkRnRU44VEJ1VUdNeU9peVFaR1V3eFd5SGh5dHUzY3B2SFVrREQ4b3NKREl5Vm95SEYwQkYxblVWZnd1ZTJDS0FhemdxUmxUbDRMdFh4dmhKbWZQNkFObjE0OTNIc1RtemZ5K1N0K0NlKzQxTUtBTVA3L0gwR2RzVVhidDNXYXRPdGRXNUZKMnZoUWpjTlR0RThpeGlLa1p6Z2MvWnc3STczbUhKTFNKTUhlMzR5Ukpxb1EyaDBZV3RMYkhDcjNTVkIraks3anpxV011eVhLWDllcDE1bi9WbWpaQkQzWTZaWTYyOE5iZmlYSUsra1ZnSnRFc2hJSGJnc3hOU0VteTFDU3h0OXk4dGdsMlJvYmNIaldxYXY4aTYxU0pCZm9XSHpwVHhHZkNVKzMyWEJSNEtZNWhSajFRajBvM3lyZGNkek5OOHNPSHk1OWgvbnl0K0Zjb2pxQWJzK1FQRDRXQ1MzWmJGYTIvVDFKZGs3YnFmVzZpTUtUTFFyeThSQzlId3pvZzRNWXVmVWxXYmxzakw3Q3kweW5hdU04Y3o3MzE3VkhmaGtYMlE0N3U2TUZtNGFMcnVuSHZuRTlNRXN5dE02OWxvY1dCMHppT3BReGhmWWs4Uy9HL1I1ZHlPeE9hR0F5cHkyeGJYK2Q2VHFDM0UvcHUzbjR0Z0lRNTdrSkd0Lyt4MVUzQ2F4b0dOU2hMZGZvQjR3V2xOR2YrRWlGdmgwanRJZEhGRWVzdmwxelV3VkplbUJ4N2pIdVhNSGc1RTE5TGFCY29JQXQwMzVoUGxld1dqb1p0Q2RKUzNzYlkvZ2doN0Uxb3diNG9KcVNtMS80clJvcnNZVStlVER2dWZSTFFjMUlnc1RVWnljOWh2d1dYRVRSNHZTWitIQTZBTElidG9NZjQ3djFVODNBeUhIOUg0TDIzajlNeURWN3dETE9hSmw0MFN3WTg5L3RkZlh1UnNmSWpYUldaT0kzTVN1VXl3R0JBdVhUd3lvV2p6blNQOWs5NTY4cTBWTVBPTjRZQ2pWVTg3eERIajl2MWo1Q0I0UHloTnhwdStXanFMNEVsbW1kTHRZSU9jMlgrM09kVkxzSnIyREYyakp3cmt6RzZ0MWJPSXlwZXZ4azUwaUd0Zjk5Y1k5enBMTjFKci9kRUkyODRUamwyczNCM1JEZHhhM1lvTGRSV2FnSmUrVHArbmM1dTAxU2x5QXV6Q29RN3NWcG1HRkN5MWRlMkI1c05LRUZ6Y1Nsbmw0VGlncWJmcms4THdMQzQ0VzdVTlA5elk4dFRKaEtPaldoV2szanpieEJZTG1WbEtRS0dsbkVRL3NhT3haaXFicVozTEozTmRrZWdMclRvaXNGdTQxYlVjdDJrak1uK1JWL2FqaC9UL2dqNEpzUlFWMlJNREQvRTVDM2xoTDY5dEdMR1l3Rlh1M0VJM0lYdm5FT0RydmU0L2RYZHBPM2VlbzgvMkxoTFRRSEFqTDlET01CYm1OaTZwQVpuSmI2L3VOQllnSDhHeTJVY0VTQVU2ZG1Xamd3TWpkbWRyeWRUN2Y2bTBBeG5WV3ZjbVM4eWhrTEdJSHZQSDlybkhqK1pXbVY4aVM1WGlLYnBWT2V1YjFNd1ZZVk1VQzk0SnZlUXgrWk1UcDJhclZVektnZzhIZ2ViSVZlRTVQS1ZmN1Y4U1NQeHY1cXpqUGkxQXo0OTBjNkFYd1lwRjFnQ0MremhrU0VZSitJd0I1QWJWaTZ5L2k1bnN6OVZDRVBaVGdYZHVFbEdzVyt0Z0NVSTI0am42ZEF3UG1SWnhUNWZnVHZxdUVJWTRpRUZsQzBsbVBhMFlLYmF2RGw4dnJWUTNDelE0QWtEUUlSdnpXWm9uckJmYm1oZEVvc3hqN0t5L0lyektRUGoydVNGbXgzRENqZDdmUmFEaG1GOGJ2RVVpVGJaOHBjR2lQRUYzNXl6ai9CKzZNZ0NwNXZKYVF1cjg2SWgxWEYzYmZETTZLWEEyL0pQdDR3bytSRkF0L0w5KzJIWTRDTWhaREFTTll0dVc4cE1EclduL0RxS2paeWkyZjVpRkRsQ0VXZjN6STRocVJtY2RydDE4ekZtMEZjWVRUdjB3c1J0RlplRm5ZVUQ1MnhkaFpoanZiVmJvc05FU2lWY0h4ek1DSnl0d1NFdTBZdzF0M202eTRtdTNpOGt5OStWbTFqZFVERjQrb3VncGlESXNST1Jsd1plUHdXcEtRVGEwYWJXM2s3dXRVdFk4Q3QwQWFWMnZHd1o0ZkxWV3p4RDk3ZVR2dHU3blVMVUNDc2dkSU45UktzRmJnQTlUY0c3bE9tSzVrNW1TWHNaVExWYVI1WnhpTmpLMGYwT0xETXI5SVYzYzlKUVV2K0IwaFZsYTBkSFI1Ykxab3NMNnpUOTcvQVpLTjhYb292eUFtY2ZQb2k5bG1hTXh6eXE1NTJaeWFmbWIvRkEvTmZVSnVQbXZaUWhYSFRtVVBSM2RaTWd4dVc0NFBOMFZ4SkJheFF0bWJiUkZGRDVsU09oNnlLSk5rOTYvSTNGQnlJYk1rZEI4Qit6VU02RWZoaVF0eEtVdS9qTStIYW9GMHRIS0RSbFVZbnFhR2pqc01IcFBrekpxeEUyYXFtYVdiMTVoZHZNSERkZzMzaEtDcUhZSTNIWkZ2NFNVcy9DZkFyV21OblByQ3pMT2lHZEF2a0UyZk1iZUx0dGQyTlluSXU4K3BPWnhpdHRPL25ycTdnUzFWV2FMWDZzeEszSFhwb285b01YN1V2dDNJRHNnQXRpbys5eEpNVDA0WFg2SlJFVjV5YnpIZS8zcXlxMVM5bWtyZGpodVNaNmxqUHBoUW5DYmszZkFLa0grMkVYd0pYZ1E5ME1qWXdHOGl0aVg3dGVka2JjT2ZGa2E5eUxHU0dzbTIzM2p4aGRHSlE2Q29aaDlBRkQrZzh6QTE1eXc5YkpCdFUvUjRZZ3hlc09YZG1tM0NYR2Z5cjRhYlV4NnJWQWlHU0hJKzBEa1dMODBIcVhsRXNnTVd4RlNaQ3Frdm82R0l5UDQ4NE4vSDJ2OFhFVEoxcHdXZzVKNmtjdGdPTlZYVUdtR1N6SVhGeDkyZW1wN29ncDVRNm1URitaTmFUSndrbml2ZTJSeUVicFZVcTB6cHdNaGF1dTFqbVp1S3dSclE0b0gyOFIxa0hZYzloU1VyMzJNU3NUNGExK21Ca3gzcXBmendjSWM0b3FEektOd2ZaZzd3L2hpQlZ0MzZKci9qaTdndHZ2YVo4SG1DZ3F6andpRzNqNFY1d1FGT1lJVDh6RjkvWmY5VlNzWWl5MDZPQ05nN0dRSDJqZE9hUXpmaFl4b3d2MExNNXVxK015dnBRN09vbFJkd29ESlZ2ZUN5Qm1WalpMa0pNUm9ZYzAxRVNSbTd5VTMwZmNBdUtaQ2l0WjlTOHdvK1Nveis3Q1AvZkV3VzRDdUU3UFZ6RGE0bmwzMDBkRW1zY0t5Nm8wR0xlRytYOExLSkRva0hmMW9OUUNpQVBsdzg4Y3E5WDg3RnJnV3JIYVNGdmxnV2RTWDJyN0tKVTFGNXZ4a25uK1dDK0ZVZ3loUkYyWnp3OVdzMUVNVWU5TkVmUmE4Wm5JZFUxYjl6WWFqU3Y4eWpzWktCTEdEbUJYMkd0Qm5WY1BCUzhiU2tzUzZDWWFTWGRGQmdWOWxxZ28wMHUyQmtIbmFIR3ZKYjhsVzFtRko5NGtRamVLbXdlcVJTdWVIOXp0WjAzMnZkNHBtVURDbFZBcms2aURtaWpyUitacTlITVBHWDdWelRhanVhSW5QUkVNc2ZvREhJb0xOekVCSUMxMjJWRkpPWllWUWlpSTlTN0dHNUJpNHF0NkJrMXcwaS9DOER3R2JlOEZrRWhjTHQ4c2lqU2sxU0hMbzh0d0l1TUZCdVJzV2ZKalA0STh2aitCeHBCRUFMekFDVm9FUkZUWllJRncyZ29qZ2pyOVlTOGlsMk5vNG4rTHJsYXkyUDViYU4zc3EzQjNJU1UrOHhPMGFaVmpzSVJ2Vk5DTDNnN09ySG1xWXAzS3UrQ0hnTkVXNnlWL1ZRbVB0ZzJWenZRRUNYRFlNN3A1SnVnekhrMjZxSFBTQ3FyNm1vWG82L0owa0srUzFMdEVOYmlyaHA5TElaVXdiTWlaV25jbUp1VU1jTURhaEY5SjlDdHdsK09yRTVPU2hpOUovUTdmOUM0dXY3SS9qdURlNU9FTTVMTXVnclAycFdnYUI4bWdidVl4bU1SZGlLUUNESzI3cWNaQU1IczVnTkxkcjZQQU15dnBVdEhqWkdHaGl1cVBMQlJXWTg1MVZ6K01TUDJZdTVaV2J5WGdLVWJhQ1BueVJ6OER6MDRDN1c1cWdjazBjZVVnQWZJQkY1QkYwWTRCUnNiNjh0dVd4bXc0MS93b0NIUFNGTGM0cDdnNlVqRWVTR2NDVDBFVjJjZ09URzhWaTFCdlVOR0tNeHczVE1xVU5tTU11NG5OYnRxeE1IRHJwRGVpZ3NFeU1kNG5CMDFHSkRYc1EvTm1tcHd6SDZiQm1XY2ZZZ2h5U1RxUXlVUWxOWm9Bd2VzcVJCbnM5TTlDYUJONHlCc2lyRlZsVElMTW56UXQxeHVzbUFkRW1jSVVEclVWRFZtUGZabzQ4ODZ1YXBTQUQrLzNBVTZzOEUvSGNlTm82Mk0rcU5BcmEzZ3k4WDZwZjlRU2kxMFQxNXQ2UENSV2hIcEI1Qi94Z0ttOXNmTWd6d3FrTnFqRzl3Rjg4YU1VbUNQaFBTNWw3b0RGdkNPb3BnWjhoNEZvWmgxZTBOV3JRbU90Nk14dDl3K2doWWV4RkJLY2FlNEN0SFhHdW9zYk9kZm5sK0tzZE1FUGxacUpDSXYxYjdqQy9WNjBEUVVzdlBMYXRRUSt0ME1Hak1TdVVaY081dHZSbjJQdGFadG9TNjMvQWZBRitmSnRBdzBtdGp4WHJwV0x6b0RjRkVPS1NVRkRZOEFyR21EQ2NjU0Q4SHUrVDgwclBlMTd6RUFQaWN2TlhxL1N1ODZCZ2RVcHVzcGUrd1RqSnpLOWoydkNLNTFINjRVU1d6bFBCcThsYzlISGRaSVkwa2wwZDhURjFxaWVnZlZRL1B6SjdBQnJZbVgzMGhzRS9kcUQzQmdMMU9FVWEzQk13eFpJTWJSR1hKOEgrckVlS0pYT2J6cTdqTzdUcEFBOGo0UjNOdHJXSDZJT0drUnlMNklZd3F0Y0tSK3p2aFdUY2ltVkx5UGcxRjdUYTZwVmhTR1ZsU2I4bElXaFRnOWdzeVJQSVMybi83ZFhiTjdXV1hGQ1hWUlJMTWVKM1h0cTQ4V2U3NlVoSGNLbVpZRXhqSkZnRDNxRE1uK3NpOEt4UUxLY2tvcjhseUlEQUpSNDJPWDZmR3VsQ2wxK0Uya3lFM1lKd3owQnVwRzFJV1pGaGxIVE91VWZadzRFTWNCeEgrWE1TMUZIdjRib0VEU2pvV3IzTGNtRlJHd0FTMW02T1VUQlJucWVpYTcwM1AyTjRuSk9rb0lwbEcwWEhzSTNGTk5oZWh2c2REU21ZM3YrMENjTDlWRWtqV2kwOFY5ZUkzYTJxb0R0b2pPbkI3UHJ4aHR0UmIxRTVmMmIvSWhBZ29ybVlaOUdkKzNlNGtja3J5YnR0NTNzM2xRSjdKcVNWOUFnblZRMjlDRUdFaEh4VEppeEhOcFU0UmNvRDBxUW95cFRGNXlPM1dtSWFUcGlqbGxvNS9zbXM1OWdTTU5mZ0xDNitVWFdibEhDVjhPR3FJcUQweXRvN3ZONEhiMXRnMENIOUlZZDk5OGZxNUdxRXkyc0l6NWxZT2VjTlRJNmJSWDVBTHZLWHliUkRZNFBUN1ZET3p0K2tEMlIza1JCYjhEampPZzlISitlNDhXRXRJYktKb1EvZlA2Y2sxZmY1aGl0M0k1b0dMczZLNFhtTzJNeUVZYVNCMkdsdnRhWU9NdzBBdGlSOXEwcm5uZE85RWJKdnhCcnV2T3Z6OHpBNmZlc0hiVzk3UkJ1OU53TWh4WlpuUEhaR0NCalU0bjFwNWNxcW04SzJ0a1ZHWkFHU0phTHBtTGtINWtJV1hkZWZOL1U3WG44OWdKZnRRZnhPRUs3SllwamQvRkVuMnlCSnlqSi8rMnQxVE1ENmZVeFo2a3o3SUtkbVdmbE5OL3l4MEZHRTk2M2lOZTFPQVEwaTRHL20zUEttd1dQNnMyQkkvR1lJdTZVSTU5bjJyeS9wSHRORmNkd0o1VmNOb2V5SmlxemVxU1doaFZrVDdLTUFITjRTR2RaZzIyNlpuYWtsUWxHUE1NbkxoZGJMU1E3WTIzTTh6ZnhVNEZySDNJdnZhdTFaTFRhdEo1TmVWT3I2cU84ZHNNRzd0OHA4MzJiU0dqSUpEaEdKWjc4OUIzbjdzQWdrc2E2b1ZxTFQ3OHdTMjBCQm85TmRqT2hSRzF4SWpGa0svOXNRMU9NVkJFNkN5aDExeUlXMGdTY2pOOTcxZUhEU1RTRDlWN25nYzNjVTB1T3U0bEpQUDBtQXZoNi93N2tZSTZ3WHFLZjhITUs0Mjk5OS9OWjN2Y3BFV2FTeGhicHdYQlBKOExMWm53RWI3eGM5TXZKME5RK0lKcnhJMHhpNVdXN21KdUZLRC8zeHlBb2Q1Rmg2VUpIZ09NdFJzNmZhNzdXNkZ6Q29GQjdmNUZlZ2UzZHhQS2RUMEIvZ2lxS2cwMmU2QzBTTkRJdkpybnNOTmZVOUR5OWp1ZzBIOUFlSWx1ekdvY0R4cVRENlQxT2tPL3dyaXltTS9oemFKeGpuaTNlUUViRjlhczZYVGtKdkRGL0prRnFwQzlIeG54WnBDWGNHODJsYkpsZ01kYXY0R3NiRDRQd3RkUVhiL1h5d283bHBqTUZJVFh5NUpvU3djZFJRalR5VVJ5Mys3czJkS3B2WFFZQnZwbUQ5VGgvazM1elFUakQ1ZmNnU1V3Smc2MzdDNzBQbE5weTh6WUdwc2c4WXNNdmNJNXA5L05RcUFlZWxYMi9lL1pERWlZQ0psVVNqTjQ4WXdoRkpQWmhoWVp4RGJOMndRTHBJU2t3OTZDVWh2eWQ3WmVRV3RITXJaRVhrZVlzRFJPc1k5QWxQNUlKR3drNE80ekVoVWYwVElDYWdtQnNSdHBrN1JZcjBJZ0h5bHRPejk3KzZtdmZkQnBsRHY1NmtVdmtiMlB0SVRLVS9yeDRZalRHaWJwek1nMloxaFNKZWdYcmpMZ3BJWit5bVhLNFFVMGdKVWs3bDBvVXU4NWdUeFBrVjVjdVlodms5amR6dHQ2QXhvejBRcFhvQzNMdDVkaEhHSE16WWlUM1E5OGRYWWdxaVlHYlBDQVMwQVB6K1JDdWlTTU5FVW5VLzhrOHJUZnA4TnJ0R2dENUtSdkduOVo3TVV0V0JjeUlPQVBEWW1WeklOemdlSlVuMTNoQjFFMTR0dk9FeS83R1loaVcycGEzVTZDTzdXVXA4RGk1azY4bnJrcVQ0TVBGWjFDMjIrYk41VTBxVldIY2gxVndWZlZ1akVvN3pURFFTNEVtYmpHT2FBRjF5Q29xLzhlYktZWEhNL2Fyb25YSWlncHhqYUE0TFFKUE1DVzJKN05VemNCQmhUTEF5ZUNjejMyb1k5TXQyVHlVYjBoNkpFQXd0VlZ4MUVWTGpqNDdITU5UWlVobGVvcXZMTk5rK2Yxb3JFL0p0TnE4YlFETnNPZDJiZGhVRldtbXJGcjkvaE92eWhudDFPcWpnYTdVeGFYSUszUHJwS3gyNDhBekYxZXh6blZtd0hqTnVqd3BQZ29oalVIOEhKaldFTndLTk9jVXFKOUZ0VjdzN2xkWm54TUZqQmVSZDAvVG5mQ1BSdGtHOFc0U0xOREdETlRCYUkzQ29KZDdKZjFyZXpEYzlmM0pBRkVnMjk5cHBMWitaTWZiK3N2TlI3WnJPUTR5eVIrQ25ySkpvcTVmQkxJc29aVjZtRDFRY09hVWc5cnRRL1lqUnZnN3ZBdklsOEJFMVBEQllZeHhLK0J1bVhiNXdsQmJOMWg4Q3ozOEZxcXMvSzd0MFp0U2dkZFZxVW9KZmt2RG8ySzU1c0xNTzkwYXBqZ0p4KzEvSjM4dGlhTFAyN3BvNXg0amJnVW9mU2svOUFrdVNNaXoyekVIRSswMWJFTHc1RHFteTJOVWQ0R3Mrb1Fqa0ZCNG1JZ3RONVZCRGw2dEV4KzRzNU0wMWdDeFk0MVpsRVNyakYwdjlPMUhuM0VteXc3ZEM1eVprQmNoK0I5Ynp0WDRqWGVDSFljbFZsSEhkb0luSTRKbXNXRnM0S2g0dzhUUkFlTG8rY0J2TkZKelZEMi9zN0VHWkMxaEthblpVN2xnMXNFZ1pVcEo0L01Ba2lSeTI5eGVpUUkzdnpCb3FQR3hrVEpqZzcxbDVOL3JTQnQvZWMwTWRuV240dVE1VnpXRndhUVU1RWhJaHR1Y3V0SDAyZVJoNFJEQXpZVkxhUDFMbWViOWNnLzIzU0RLMWZ6Wlhqa0wvY2VkV1dtL1l6TlBNd3pwc01hSzVtQk01Q1FVanJaelJYdStWTU45anBuTU9ISzFRQ3NsRE5mejNGWHhJalRlSE9BZDB1dkVnQzdZb2oySlo1b1BFaHZNSmZuWXgyMWVIWWRaTVZQUU1nK0RHSXpZR3dSZStTbTN1bGJVS2JLakF0MFM5WGg4SHJGSTUxWWZ6Rno0WUNCamRjY1ExS2hOaDFGMG1DZHdXL1ZlSmxZQVRTUkZKS0pKQXN4L2RkVmo3VjU5OXhCQ1lmdUZRcEtLdzdmVmFUWmZVeE5VV3k1ZUZXMkN4bFl2SmNUNTNlTk0zY1hOdGZBbUR6MmZ5cEc2SHAvWmVSYjNJNTNNOEtWUndhdUYrUlhid05YNFllSS82bWxmNEFHT01QUDZJZmhxSUk1WFEwaXhlU001MWt1NlJEK1ZZRU95S1JWemN4dkR3Z0xMRDhBbWpYV2JSenVzRVlDYlJWOVRsYVd0YVk0T2IvU05LSGREVjYzSEs5cXJxekFPaEdkY3JOTkZGci9XbWdRWTBwVUlVd050UUNsL3FMWk9vZmpMdWNVSEJxSzNYRmgwcG9QMHZkN05OdGtqdTVZSU9TZWtVc2hJVGNiZ2w0TEkydys1ZHlSTXhtS1lqVXR0SzNicDZZZ29PeHJrNjFnVXE4MFRUK3BkRFhFWjgrWEZZb3pPMjFVbVRadzNIdmZmQ2VXZjRzWk5SL0t4NUx1aUZHQTdiY2xJUXVWcFpYOVVEbTFXazdSVFJUVXdLa1lhYVYyY3pleGxxcStkVDh1S3FnSjhoeTFwbURMSDRiZzE1dVdhQWpVcXJJNGNHL1NERkgzUHdKeEozUlJweVhqODJPcVM3VlRHaTIvSkgvVW5rU1hOM09GR2lMTVk4aWJxOVJ0bHUxYThxRW5nZHZEbGRCU0EvUUJibk84RkY2a3YwQzNUM2tVMEFsM3ZqNW5hZjFtOURTT2F3eUZDM1JLTG1KZUI1VUo0QzhzV2VOdmdlQmo2dWN2MmtXL0Z6RG9MbEVSUVlIQVREdHJScndTSzdSbzA0SUoyWlg4S0Z0bjUxUzlrN3pZbW5SZWVrekFFK3l0N1c0VCt6MFlEMDgxWE45Z3J5VXZDNzhjQnBJZ3pDSFFadjA5Mm9iRTRMSEFxdVdQMmx4bENycDJ0NXpjTll5dWVjOEdGUEJhRjV1elk2c29IVnQ5RFNIYXl3S1NGTS9uL0c0TGo4UUlHNExTY3p1aFJDRUR1akRuVVpqWW1yMVNCSURkMzU2RWFabG5YaFZ5cE1SZDBZWUNaWTc1TW1wVzBIdmZtYUs4eERWUytscVhvSkhwa0hicy9TWXhQdFh3TWV6SWJodzhyOGIyd3JBUXpjd3h0eWl2UkhzVzVVOWx5SGJkSVBsOUEyWlZuLzE3OVV3V3FLYlRSbFRYT2laSlZLYTQ0bUVidERYa05Idm1XdnE2bndnU1FCTTBpeDhuQVkxMUoycVJYKzduSFlkK1pNN3l2VktVditBOWI0czNpaGcvTFhWZXd4alNDM3owb0dmY2tkVDRyZ0Q0Nm1QbTk1dXdRWkdmREMwV0JyUjVmYzJQbmxkTzFNQmdEOTBSQmhUdHFBUDg4dGViT0Raa1g5NzVxa21OeUR5TVY3NE5yeU1RT29OVW92SFdWd0lDZk1takR4Z0RrZGtDMUxMUjlBWUxNeGZQMXVRUC84QzNUbEx1RnZ2emNYMDhETzBmRVJIaVdNUkJ6TUZvdW45UHVzNXlQTU9DVkRSRVJsS2ljOHZKWnFpb3JyaXcweGx4RTEySm9XeUJHU2dyZWtId1J6UE5STVVlVTRaaCsxWXA4b2lQTjRGbnRmeWhhN3FLU0xnK08wTGh1eXNOV01zZnErcmlvZjFvNHl1REpXZ3J0L2JZYTduTnVjaGQ2dnppcktReS9oVGZ3eCsyaDY4U0Q1VDd0R2htS1I0QUVFRVV6Z3dxeUJGYXY4dHNTTGQ2WlZTTXR5V0wzRm5wSGEvMElsdzRFWXd2ekFZVmJHenJkQ2pqTHdaY3p1Yzk4K1ZjT1NqaGd6YnB4UDBQTUp4TUIyV0xnUjRWWTl4UmRVblpaVEV5bVpsWit3WjVvdHNMZHBmRVMrWlBYSzRiKzQ0dkxIVk9NK28wNWFzZHVZd2RGR1JYdy9RandsT2dYc1d6b1U0b3RyZ0dBVk9ZVkRrSGZ0bEsra1FheEJwd2swVXU5UUpEdWZkWml2RHphcFBUS2IrcnJsc056WTNJZjhBT3hYRWovUTJiQitMUXRUL0c2OURLV3ZjVndlN1JtVWZOZFRPUGg2M3h0dmZ3SzVoUXg0WVgvUDhQc3Q1RzVab0pqQnZlazFwRzE0a2JsR3hUY0Nzb2xBWExPbVp3aTNjd25YM0R3alFGV1B4cEphdGRETFU0bFBCNnRlN1pCTmZFOWtXUktSaHJKSFZCdWNtaDArTmdWRDZHdzlveG9jOExNV1RIY3ZSTXJPNXRyVEtGb0VFa2gzZzNkOCt1M25tTHplSmlpVWFMMG1nSjFlSkZCMGJ1aHJKZDJnTGNwV3dDM2FVQU54ZFp4SW1LdWNMNTV1K2ZWai9IUjBud3ZIbnd1ckljMEdJVEFjcG42N1hXak1xK0k0bDlEbllHOUdzTlpsdlcyaWZnVFRZNHFpN0dGYjdQdyt1akNnRnE0Tmg3YzNuQlI4V2cyeXdPVDJTeWZvYkQyR2dhRnI2VFZBS3QrWkRncjdlT1dHVFhtT2NJa29xZGs2cjE2T0tLWXJUSHUyM1g1SE0zY04rRFBESjVlSFJlRmQ0ZVJDVm1mZHBvdlpaTUNJL25uWS85VWpoUnV0T1VZTWtJRFBmMFZpc1lnd3Q4cnpRa1dGd2wzZTV3UnJoL3gwMExCT1F0MWV0QjlPR01PKzJmZXdLRDA4WGpYMkc0ck4rWWg0aWhpU2txZ0dYQ3A0S0UvUVd1MlZxSWs5MklMY05veUcxRGNFSlFjZ2RRVVMzc3VsR2s1RG5DTXBObkM2Snl6QUtrRUY3ZHZCanVGTGdWM1F1dE9jOGptTzZIcVNsditpWDdTLzNQMEZLc1NaU09lRGx0TVhXUWRneW91elZ1cSt2cUxUOFBOK2RqZ2JBVzl1ZXRCTnBYVll3ajByTzVoREFveEIxdW1abkdEMkVwcjloY2p5YVpodVVuMWVYaTZDZHY2Z1JnazFFRzJFdENnV094T3VoN2UrQ3R2VlUybVp5T1FPQm1uNjhmMmo4WklSTlRyNGY0OGxJNFpxUkp5Y2VIbXl6amp4TmphV2FPWGFQZVAxZ1dqVzRvRUpZcnJESFV3SGFMWkU1NVNnV3VsKzZ5cU40Y2NKV2ZoOXVsT25Nb3Y3UHU0UmwxL01KUUF3OTBWcnp4cWRTdjl4ZW0wUUZ0Z0dzNVBRSDFCRmNIMEVSZ1dzN25HVVVLQlZXYkx5OG94cUtIY21DUm9WcDlYcUl5U2prV1VrM3hTUnkwS3JOZ0s1dDZsR1U2RGFvRUM5WFRjcDZnQ1ljd1RJcVZ4Y0E3aTRzQXRocGMxYkkvejBlWEVVc1B2TCsvUVI5cVhmRG5EOFdINTl0b09FTmJoSGl2TUI2b1J1VFI2eEcySEFiSUQwOXFkV0xRUmRCUi80a01UUXFlejArN3hSenVLaWpGZ3pBZHg2dUhDdGNKQmM1ZlRBZXdaU3pEZDl1YmU5RURkRWR5QitGMm5kUnJBaC9nVVVxdjlrNWhtSzZpWFp2dzZQb3V1NnFpM3RqdHR0NkRzZS9hazdjb2M5bFlWM1R3dkVsNGxCcFhSSERxN1pKWkZpa0tBcDFxWGV2L09QVkVxL2sremlLZVR3TGgvQWdDYzFhR3NsQ1B6eVc0SWs1aEJodXNjejN5ZUNPS2dsRTNrZnB3NkhEQmlLbnY1anhoTmd3cngrR3lYM1ZrQ00yUTZVeU1FUldJUW92d2F6OW80dktOWG5TV2lRREdEaVVGVHFseUpRUUdURzdLU1N5b01wRytQekpHZWFDN1hqSnh5QjZVZ1MvcThRSTYvSjdVa0FzU1RzenhXeURGbzV5OVVoN0xzTDh2VnJNSFpESXBVdFRrUVkyRmZEQ3Z1eXNGZWs4ZS9zdFlhLysxUTdEazAwenVqNlBQU0M2aGxJM2J0QWpqUnhFbFFuQVkwMU9RMWNJV2ROR2RpQU9QMUVRdDJBYWthcmtLbHdNSnlBUW5CelNGaFp6eGpxemxhY2sxRnpiZ2VOcDUvakxsU0JYZDBJZFg4M0NsbG5XWndRcThuYnVncldQVUJBLzVLclF2L21RalcycFlSdkN6ZWtKb0FTbk1IWUlFUGdBUGpVVFQ1NlBkMlFZdUttOWRsVDlEVUN4TStQWWc0anh6dXVpK2FWWmRwVjhiSnp4cmx3cmtLOVBQWklwL0k0eHcwTkZleWpMTHpYR2dOVjZsQjBPcWZhSHNUWENDOFp6Qi84ZzBhQTZURnRBS2JTZ0RiUnJ1cWd2Yy9aVUdkbjdjMVQ5RG85cGpWc3RvQllIeFpqQXVzYUxvWU1wY3UwRXdyN0x3N0FURlZPd2wxRVVrQ2lydEVBYXRXRC9hNHJvRXdnM29MM0xrWFI5akZ1bFc4czBlcW1tNUR0QnkwQmpFZHk3UnU3bE9PbDJqWjA1cWNzWFJyYVp0OVBKSnZkRjhHYjZPM3dOV2F4Snh1b3dqNkM5M1ZYYkNKcWlNTUswbUUrQWJOTVZhS29iNjlBNi9VRERDMWNZYzhHaWNYUDQ1aVh6dW10Y3lhSVpHbFJEY2ZLVE5yYzJpeExQazB2Y0daSlFZL1FYR2xYTnFIeGZudWRqY1hUczByWlZtQjMzeUtnalhreDZ5aFhpVzBzVm4xUHZlbU9KRnk4WXI1c0cyNXRybXZldWxWOXlQcGdicXNwZi8zTGxVeXIrY05taWJjaG5rVXR1WXgrNHE5OHpzellrVjdHelFWZllqVVFOcW94TlZCbHJyTExab0syU3RpbTFBdkovREpXNEUrOVIwUllEMnplS3hVWlY5MHFQOTVWcHlacTN2eldiQjBlRFQyZUpheTlmSi9OamxXcWtJdUZRK004RStxYVhEek9JVnY1QXhuWnRyR1ZERHZubXVFUFRUMFphZjZ2Zy93ajN4R1hQUVVkNjM0UkgxV2VZU21senRnZVN2VHNzcjRSWVZIdkgxMjBWQWxaQ1U0L0h6bDRyVkpGaU14RGxlYUhJWnRISUNwUXhXQWJqZzVqdUFNejVYVmlkWm5DZG9VM2dYM3Fxb0Y3Vkd1cjJnWmk3UDFjaWFZZlJKaktBcERTM2xFQVF5WWtQUkNvMU01aCtUMDVNYWt6UjhQTHM2MTY2dUJCWVNoWlEwaFpmV3RFZ2xHak1KTkU0U3BnejluZ0hjcVd6d3lIMEtPN3I0WEJKSE9RVGUydExFdWEydFJYY0hTMXBHdWRsVjYrQ1FIVGNJVDZ4dkp0dWNPRlJ3U3BGYkcwbWE1K1dKNXEvVzdHbnFvUWhGR0tMaXRteDhYaWtxd2luVmd3Skp6U3dBNnkyUk95SVFRV1dVU1l5bmJSdW5JUVZ4RlBJTTFHWWprUzRPTkVka0MrVHpWT3dZT05lSHpHSkFtOGMwK2tFZ3MvaXBvM3BXcTVyVzljMEV1amtWR1RpWVI3ZDhEWktnNjJZU3hjL0wrRWF1cDVKWFJuN2J6ZDMxSXA4WmpzcTZMNzlYa0lMQ1U4aUI0NkV3NzhPekQ2UzJ0TitiRUV4RlF5UE42K2FoTWFFenFJd1IyUDZtbzdZYlVnbWk4M25jUmMxbjNQQXNVYkE3Z0g5U3ZPVG9LaHJWUDhob2FRa0I4NFZTN3N1azRSNm9ETHpXSFdVc0JXY0hvR3BhVUdTRmpucGdrbkxEd0hFcDRQcjBLemZtK3lRVEMwMllLRkxnaWVmVjdRM2lwMHRja0xJRHhDVUZoVGUwY2FiU3h3cXlWMHBHZWdNQStDSGpoQis0M2hUeDh4dElEUVNEeGdiTmJYMVFnd0xZclVtNDhRdFkvM29LV1Z1d0dsMDRqVDV5bDFiRVlzWFRvZ0FaZWtjRGJPYkpQb28zbEFNOUhtWXdSaVRCbXpsVzFxcjVNSy9lM3h0WVQ0ZHQ2Y3BFbDFxR0lBR3QrVVVsek1lczVqcDVnV1lzMkdYZW5HZnJQaE1ub2V5OFRDeTM4alYvWGFqWWc4SytER0tXUFJMbjZYRmt0d2VicG45NkxheXpvU09yODNLdGpiL0lWQmtRQTRYMk84c016S2VJcFRLNkNuajhiU1ROMUIyZWY1cC93M3ZYVjliaG4vOFN1RVMwWUwvRDdqT1dxUXVSRk9hakVFc01rUWNnWnFFVGtDd3FPME1OMFBjT2I1Q2hsd1c2Sm5KMGU0cEpzTzFLM0NsSUk1VC9ramlPeUQrdkRqUEFjR1NCckZPbk1Ob2tmNWMyaHVPZmozRlBkbXJVS0Mybnd1NmFrN2dCL1pnRE9zekhKeWRBa3NiSGkrVWVadFd1NFFVU09qVmRhL0Q4UG1vNVBwdkxiUnJIdTN2U2R6cVUwcGRsZ2NYcGtVQzM5WGUzQlhlMlovMUo0R1ZtbDFUaGtIUUlmVTZqYjF4RlF1RzIxZHpDUWQvQ3p5Uk9na3dWbVlKdE9ZWWk3Q2xMUFZNTmpjcUsvOFZISFZ4MGNZa0dQaTdlMmwxeE03L0dpSlJWeHM4WlU3enNNZkpwajFpNUwwZXgyeEZzRHNUNU96UmRWNU9MNkdmaVdlSzg5WWswMjl1M05XQWxPNWQyT2d2eWZNa1prenRLV0txMUZ2QTY3M3BNa2V0eXMwYjQyb3FYazJhdUYyWE9Va0NmV01Sb0N5YVF4NmJuMmdKOWo1RFBabzNnME1sTzVtYTV3RTZBVnZrekF6U1RQUmlMTTdnTTYzVVVYYkt0T3VoZEZmWVJDbWYxVnFKZUY5WHhYTkJPSUlwOVdaMUdmT0pmbyttZ3A0MTNFVi8rM3BJajVGSUErOS9PRFB2MkxtUTRvSkxvakYwOHFNVGh5cjk3SUQvU1B4S2FMa1AvSXl0eEYxVlNFYkhUOUV1RmxKZ0paVzRIMEZvY1ZtTHdmd2JkN2Q1YW95K0Z2bU5kUklkSUs0aU1Dbjh1U1lFNEVMSitNekRFc05VMzI3eFFuL3BCdjQ5bXk2ZytuWVY1aGg3VkxwVGprWUxXTks2My9seHdNWW1Xc1AxQmVGMno0d0lMM3RIQ3hmTkl4MHJCeVdFTFMxOXhRMkl6V25mTE1POXFSZ1l2b1g4b0NoaUVCME5IeC9xMjFCZGFvbFFMc0o1YjRWemNoV1BHeU5sTFErQzlkdUl4Y2NFQm1yR2kwSEJHNStrNEVOanZ6aS9ja0tCaXp5NGNCdFJpV2p3elBmTnBtamZ3SlNDd1E0c1BJNy9PSjFGTitEY3ovZStteUlZeWx5VVp3SDJvQys0VEdxVk5tMzUzYWpBWjRDcGxCUzN6aHJtdStyWjFlU0g4SUszUXlqWmNZS3BoOC9GVzd1eEYxZjg4YXhmS1pvUUZFTzI5RWxRNmx0TnlrNnVYWlgraTVwbEx6MVdoZXhZdCtIWkhzRnVNclFXWUJBNkxlaldramVGMHJWdFRQRHN6VTcvRnVBRDFEVGNxUkNSTHladDVwbWZKTDFLVlJwUzYvYzZsQnp6eGFSSU9iMDVhSlpvU0JqSVZ1N0U0REQ2UlpyZWtDcGpFZkl4YlNuVUVHMFdKdWZEV3duajNhUUhCMzNvaTFoMkZHZ2Q3Sjkvb3dwR2l3RXhGTVRsTmJLdHFpNHlnazRqMzQvUmEyVitlZHUyL1pKUmVWSWpuWHpRMXdSUEFKYWxTTmN1UFRZRkhqZ3lYdjhMK21naTVnRXJXcFRIV0hScSs0b2dwSm82K2NENjJKSjQwSmkvNnlURERpTUlpd3dmUTFzMHlvTlRlbklIYVRob3dqazBrbThLQW1mVnB4T01iMXdDdHhCTmRjU3J4dnNhWjRJSG96WWxLUEs4Tit1Nm5KeXYwNFpTY3RSRUF1bGYvS1JZUFFNZVowRDFGamZmUjhUTzNHVkhtMnd5WlBEdFNvOHlaL1ZKZU1JeVRrNlludXE2Zm9sRmpHLzZ0cXl0c1FWTU9kY0pFR0tpTVhTNjZacFhDR2xTdnM1aTl6eG9zSGZib1BNNngwbzlwcTlDdlh0VkV2UHlrUUc0S2REWHdJd3dxTEtFdCttbC96aWZTSlhwN1g4Y0YydGVWVGN4T3VmSFg1eFpNMXpJcm5ZVWtzRm44cXR4b1Ywa2lmZEdINEIwNEVGaEtyQ1RmejgveVo2TnZKZkVDd0V5UHJpb3lQbnZ3L0w0VHRCK3ZXckhlaUdnNGZSYkJSaFk5UDh3Nzl4V0pqdEZWUHVFZWI5OG44bWg0STR6d2JIS25pNU9TbmVxaFRrOVk4TFYwbEVKWHBhbXczVGplb0NFRDYyTFZtdEFkTFpWMlBjT2tZS0VReG12RHZ1RGVuWDBKbW5nV3p1S0t3M1RKS1ZsNmFpbU5WL2xjbjR1d2dla2xzdnE4NXRFUmJzc0NMRFIvajFLRXZNdlZkUXNDTGJaemRzOXhFY0tLLzlEdlNnTWpMYkF3U3RVM1dlazVpY3R6SThoNFpXWDJRS1FlWElRWHN4QVdsUVBUVE1BdEVJN1MrTTBoREEyMWdZWHp2VUY5Zk9pbG5lL0QxQnRJenVqemEwUUl6TS9IaGVZYXZDTnFHaGtNa3NmYXVPZXZnRlk1WVo1WHA2bjIwVDl5N1NaYklKMk9Hbnd2ZzhwNTBmTElCR2t5ZnpVbG9MdFNEdUpZbGVtcEkrYTEvZThSeklobWI5Y05udzNIREVYaHlEbXpDRDh5VlQ5Rk9CRUtrY2V5MjdPelFab0hFakRRUDZrajdpakxRQjhZMFp4Nmk3N2YrbkE3WWNKcnBUNWZzTVhvWXphRjVZeE0zZ1c0cmRGV21VaEU4bTF5dXZSYStJaE5SS3lYZUQ1b3BwUkRBNE5IWnZOc2ZCMG9yV1pLbjd3a2tvTnI0Z3JPUWZoK3RQd21YMFRBaVJGY0tWNUl5QnFnZm1JZm05N29FSW9KREpyOXRBRndKSCtVWlJuL2s5L1Q4cloxYmdwUGtWU3NxOWtmK2g5aEpINFVlMENGeEFiWTRPZU9NV3RrVjVRaEJpTnNscnZPYWxZTit5WWxzbGx2U3pUc3VEOXpvRUhwczA0UjBJdm9XVjVqYndlQ3pETjdjbGJFdkVKK1JzR2pxOGQ5TDlWY3dUdzVmS2NIVEJnekhjak4xWjFvclAyRUlZTHdHTGIvWkJjQW1kZ25tVnVnQW5Sa0tWWS9VRlhKZ2dzZG1YSUozV2NON05ld1YzMmh5TFczS21KeWJOZTF5WkNSWXhSS2FXb2dVWElJVHhpeFhGU3hEQXE3Q3N0b2RweEJCYnlVRUVYSTBYVTRVRGx3ZzIxekcrUnlybWFuczVJWXRIN2JpNXNIQnlDYXZIT3d5YiszTUZSazFSUGplT0VYQjAwUUUvREtpcWxoWURScE85end5TmZ4OWN6SlZkTmNEbGJ5MTF6dVk3akJMMTRUVFIvZnJXVUhwMnJXczZyNXpNeFhWMlJiYVlQOC84Q0ZHd0hQTHljKy9SUS9ET2lhVnJkMFAyOXVTSGJOZ2JvQkMxTHFJZkpCQzFqa3IyeWNoYXUyam4vVVl0NlZKNlNMUDZoSDlidlFlUFBodGhaT3owNVFHTU9yU1lkOXByNE8zaXFYeUs5Nm1GU3ZibjkwZXkzNUtndVloYzh6VDdqd2tFNVJSRUNmSm1OME43NnZpNHNiZXJiMHhFUUpXQVVmb1IwQ3pUaHh0SklvYjFuRUkwWXhuN0xqNmlTV0QzakhobGxtemlNVTJOMm1rY3hVdzRHR2dYY0JKSzhiaDY0cFp6S0hMTVhzV2diYlRNRjFjekxQWkxDR1B2V3o0ZWxwQzVDUEtVMVA3d2VLRy9rT2F6U2szSUY0RVowc2gzWGdFbStJTXJtNXhnY3hsM1Y0T3d4QmoraXluQzRxQWpxMy9EWHpmZjF6RE1nS2Jydmk2MURvaitnVGFPNENncGZ5VHZwVGxKai9SMkdCWStqYlJGRlZhVjlIN2hMclZFNHJPLzl2VHZsRDY5dmxDZXBsYUFZbkluTjFUS0tpOC9YZTYvdDBvZ0VkMG5PNE9pQjBMR3YxT1BMRDhOWGdpMWRhSERSSGtwNU5XNDZmNytKWUJFNjBxbmVFZzJnS0hNV1lIamk2R0pWVGcxekVTckVYVkJjaDVWRVpJaVd3WjlxY2VSNVVkSTQyOTdGT09yOEZUaEZVZmVJM2JHVG85THYxOVJXZEZ3UXg5UHRTTkpkUk8rWnNOV3M0bEUydGY4NkRPRnJlT3FYVU0vNEk0UWtFYytyNVo5dFFVSWJEVXp2elNnSSs0anJ0KzNpS1pGRVZWWVRnWkhsZVp0SWI3a2pDd2FwU09MNno0RS9PRUQ0N1MvTWlmamwvMy9URGdqODZseERrYnVESHFPT1A5cFFzVkI3S0ZJemllUGJKUnVWRzRJc0x0eTh5TzZDL3B3bHpTaWRrV2RWc3Z0Q2NNMnFsOTRVSUxMeWxxTTNtOHNDQmozL1ZjSEZHYnVIVzRid1V3NW02c2UwdkR2MjdtMW11OThCMzIwRUpnU1h1WU5wVDJMR2NuVnRKcEZjYmtJRElWS1o1QmVhYktEdU51VXpnSWJ2b2NWVHNDWk1RQ0JNNWFVdEVSUDIvVloybHFvbXg5NTFtZHZ4NWtIK1ZiMEprUVdIVEtsbVBRS2lMbnJvb25MSmQvbWdqWVFYSlJTRHJ5ZGhQaDlXazdHMkJrb2ZoRlBYQmY0a2VzQWdhRlBET0Qwc1d3MnVGRVpwNzB2ekp6dnBIbGVuZ0doOWZVUkEySCs2NXVDVU04SDF2c1NZeW15Q2NjS0pKcm9pMm5ZYTI2UmZTbk8rS0lMZGYxVzhsbFJJMlgvOWJRMkE5ZDNuUGJTUVpDeFlpOStGVkpWbUFtOHZMdEpaWjRyZkYraHNsYW1zRGVRWi9OeExXQS9Da3VQa0xucXFZaWJPQzFJalNsRENkNldJUHl2elNqaUQ1dWtrSTFjNnJpYlpCbHppdUVRS01iWXpjTCtEdWl4VE1iZXBKLzQ4SDZxbndEQW9pV2dIYllQUm9Pb2s0M1diaUlLUUpTY0F1NVV1UC83M0Y1NWFXWU1MZTF6Vk5RWm9rTEYwYnBaZ0g3Z2huYkxIeERhcWVFSGdWSkpaZWl4ZE9XYXBmY2lrL2VzZkNiTEF6VTM0Qk1lcTQyYWVkOXYwWE53Znk4VmVBWkEvTlJ6TFBwOTYrMFIvd3BZYXppb2Y4VUEzZFVwZTRyWkUzN2VnZ3hja3BZblM3bWhrWEZBOUJXL0RZN1dONU92c1VIamJ0VC9Rb0dKL1RCUmFRRFVlcXZPa05yek5yUmJ4VVV6eUpEZlRpUmQzc00yUVR6ajRSSWxvVWo5VDVzeTdIZkIzcldOUHBjSFJZSVVpYTZVczIvMWlwOXFoSSs1RUZiMVFhbm8veS85ZzlmbExnTGhBN2x0cnV5a0NtWHlJcWJEWi9DY1pjb1hDdkVPNFJsRDYyWENZZ3V1d1J5a3lJUEU0TVhtQmlCT0NidTZkamFBVzJIN3dtbVRab0VyYmZaWndrWEdJM1FNQWV2eHllc01QNk9nUjhHWW1oeEE0SjJnWkN6amNEY0VmMXU1aVFoQmd6em9wYlc3MmRhQUgyWUtUTEtmdnJmaGluaGM5L0oySGprRENWM0Y5RGtodFQ4MjBrQ29OVFR2RGRkVHVWNktqSGNKUUxEdVlqejRUaUZjQmR4bEdEdTVPdGJ5aDMwdXR6QWQvU2VzRExNbkR5UkxmaDliZDdHdWR2TTY3YmFjcVVnU01RVENUQUdhcE9pWFJUUmVlY3RCUFhJQWlreFJ3T3V1ZzJTa2pNV0VRNGtHTVlQSi9ZSm41MHNHMW5GZXpEVUFzemh6dHMwczJpaXdLZWFtaTFpODExaWpWWjdVanJEdjEyRCthTk9FbzhBdGIrMXdXUElZODJvTXZYTENWTm5Id0U2VkRKM2pIYytsMGtvUGZqUWZEaVhrbFZGeVo4L2dBYTE5VmFTOEJJUHgxcjF4RGNuNUxYL0lvdUgrTlNNK004YkFuZlVncE8xUVA2d0dKK2pJNlFFQkg0YjVFTTNEREo4ak5rK2ZBTzd4aStvMmJsdWlWL2psaUdmcE9hRWNSZFFoR3RuUTFNRmxyaGlVK01kcjhYdG00TzN4UHV6ZTg4TWExelRFYW41dEx3UFhaK3plamRXMG9YUzdiTTFmTHNEcTFtTGRCWGlBNm1SemxwbzQ1YkxWQVdRaDkwZUFMQzB4bHZqSlkyQmNoRHdhcUlyUjRjRXRObXhxZ1pSdlIxcWNUbFZ0SlRMaTNxdjlsMmswNC8zbDd0ZmwrUk9INm5IUy9HalgwVE5qc3RveXNDdEZLWnNFamU5T0VuYjZScEN0YTl1NUVoSVlGU205K2hiK0hRalFTV1IvSkphcTBkRGtIOTRpbmQzUitDK2xTYTdnSWtzZ25FRFpZcWZ0WWk0eHVqM0wzTy9sVmtCRnhoK1JMMTZZTDRYSE9wM3BUTU4xckYvcHRZeTBnT2FIZitlYUw2Z1RqbkgrRU5GSzFIbVBzR2dWRGQvWDRISXFHbFozaDczREdrMWlUWXJyUDJQWSszc0Jwa2pHUXhYSEtFeWkxVWsrWkVGVG9TUEcraVNFV2VMVnJEWE92UjFyV2NtcjJ2OG1qd0RnK1lySEtBaVNEdFE1VkFjRkl0TnExQlpJVnRTQldGbVFEMkVoYVN5V3Yrb0VyV0Vpb3FGUnMzQjhubW9RS3d2RTlzYXlrdkZyaXk1NzE3ZFVlMlI4SmVxK1A0ZXdGNW9zcGpzVjRvazM2VWQweEE5dURaSVBFNGI4U0NkUThZNW51NEQvWm41VmF3OEdMa3U2MG1qUkExMkFhTzlyZm1MNUxQTzlQTTRLOG1UUjhBK1lWb2V4d2g5c2xFcExnTG44OHMzVXB1WThnbFpnNjV6cVVCRFRoQ3M3WDZoR2M2Zk14dDBpYi9kejhKY0wzQXJncGxzM1NHV21pOGFLNU96RWozOENjcEFXWVVjYVFCWTczVW16bTJPb1BiM0ZZMFAzWHZheWtOREYrcHNQaFlYMTdJdGs4WlRwU21aeFBqOUJsbWNScmJpQTJyWkZ1YmU4Vk9HK2FSS2xtTU1RUzdjTE94SVZrWFhYTUNMM24wQktsa3Z1THh0Um1lcFk3TFJ4aEc5VU1LQWwxRjN4L0FuQzM5aTloVllZaXk3ZUZqWGc0UkZzYnhwM1B0Zlc4eFFHaUFoYWhscVJncGd0VGtIR0lSWjY5ZGsrWnA2WDZtU3pEMmRuUkcvQXU0RXIxUmU1OXB4WkI2WThZUXF3RC9mVnZTcUUwcnoxUUk3TEg4M0ttbTg5eFFSTE9xSTRNSGNDeEVQQnVJZVorVXVOMEtjaWYxaUZ5cEhxdFdzVXdnTlYrekN6SnVOamNwN0VuU1lGcjk5UDI3d2dqd2pxYTFyS3VJMHVpWmJSUDRrMkhndWduSXUxYkoxY2FiTEVkRWhNRGVlSWRRWUdrUlJHV0VzMm9vZDZ2QTU2citpSVNQbS9sRnFheUFxeDQzaWs2emk1ZGU2TjhhR3djZmFKU3g4aFVtb0phTVlHQUVnYk9pclFERmI3NXpiYVBZZ28rcUxBc2MzdDhQMlFndE03RWE2MCtkYVdzMTlXMzhBem03cCtzdDkwUEVlcEhNNlJJdGZsYmRIdzVacE83OC95WEtMOGQ1SlZyd3o1TjhxRjQrVlVld2JSS1ZSendFZE5wTExHaHpjR1N0RFJnbWROdW00cVE5TGFmVGhhT0NmOXl3QWdvTVpnTjRTTU5haEUwWnlITTBhVDROS1N2OUJ2NkprYkU2ZFBTcy8rQUdZRXVZc25GTHFQMzh5V2p2eWRkQmY1cEpxOEhkYXZXbUpEWmY2UlJBTGlkRTNQYncvY3V6TUpYTGZWbVhpVHpUQUNGYWYzNitPUHgyWG5DZ3RYR3dHV0ZQRzlwMHErVU5FeHR6eHRONFU5QmRDdzJ4ZG94dzhmS21CMWo2Sk1ESW9YOGZqMWljWWFiemhwTkV6T3grQzFzL3dDZHZlQ2N4SWgvOTI5V0tRUFJNZ0VVNGhVZlBPTUs0YTlyZWFhVGNDMnZFckNkZnJiVExmVXFPeGQyUWdSYTIyVitwemFUbW55L1liNnVTUUlVbFB2YlBVZUM2UE1DTzAwMmhrZG5tcEhpTDNzYVpBdkdzUUZBb3VzMXQveGJuY0VXRnJrR1A1Z1FvenpSUFRGZlgrejJJakdRc1dCZ1F4VURhNzVkVmpiQmJvVW1OWGhxNlNGaFJiNjRqU1dTc21DT3llMDNvV25UQ28zK3FvSkZLdW9YMk1DUWJLb0o5YTNid01lZnJlM3AxWW9LWTVmckgxaFBkem9TSVlEc2NTc0Z2QnoycC9UU0FYQmhyN2FXMUtyakZzTDlRZjJvSUZhdE5YQ09YOUpvQ01aL2V1M1BlVTFhTjlzRThFMk85ZXVPejBFS0VwSnhtY3Z0eVJHVWRLNzl5YWwwNkZ0bm9jWWFzTzlrN2tSZjZFNDFlS2dnazJpbE9vaXZRWWt4MWZ6UjdWT1hkZk1yeThOaUgrM2NVaFVoOUlPVC9VZk1YY29YbG9LV2VzdkllSVE0YkFWcDF4bHd5QjB3VmMvckF1UTYrb0Rsd3VKaG5HSjJrMWhJOGw4T1g0bnFGdVJxSjJReW54MGgwSXd5dHZjZnQvUVdBRzRpOTIxSmU4Yk9wZ2VnRk5RcGVRWGJ3aENmTG5reTVrOXpRTVBPTENLWEpWd2NvZFRwSW1EQXh0L25WN0o2TTMrMXR5NGVIc2RwN2M2VFdpOUtLOXlvUGpHSzU1SXZqRGpTUXFuN3pNRmU1WEo3cEtTN1IvZkFwOHRSL2swU1BweThld0tmZ0E2NVFsaVJ1ak0rRW5wZXczZnZwUUYwM2FJbS9LdFE2aXhSbUdSUklQMjBBY1hqSTd2ZmdtQ0cxN21rTmZXV1lvaW1XQnM2V3R1MGpxQyszODZ1KzkySU5zTGFNaFJCQ0hmZXJsdGY0WkJYKy85NGRIM3dPOTR4M2dDVmM5bExkN3lmWC9VcTNGTHVhOW9RNHpjRnhSNzZSRUx5bW5jTVdDSFk0WUY2Q3lSaDhoZ2dTeDRWcnpQc0pWNUtaelBIOGZUOGxsc3FCRGpwN2NNdGk5emJ5UFdVbXN0MUx4UWRRdCtoNE1nbHplc3ZtbGhkc3BsTDdtdjB3RGFubmM4WFZmRzR5UEFRaXZpVkhkK0lHbTc2TFVsL3VjTnV0UTBkYkZWbCtONTl2bzA0YXY5SlpqR2RqR21XaGJjblZ2THNYTWkvTUxWaHoyemJFaVd5c2NPS0ZPOGVrejd4TmdSak82NUJYcFdJZTB3Sm1pRjNKMGpWN0RLNDE2aWZxZjg1L2hTQlNNSTVFZ2UyN21ZVXNlazZrbEMxeEgxN1ZkdGwyRFFLOXBwbEtDZkk2N0FlczlHYW1nbng1bS9ueFNid0pJSk1jcmdUU1lMNERvelFNelhwcW5uNkdKaUpvQWtVMm5tc0hoMnVkQzlrdnNvTmhqczM5bDRINjlVN1J5VXlNc3FDOURFWjhOR0FCTFJYQ3Q1aVZpTm4yZ0g1U096K0VtVG1UZXFmQWtEb0VWUExsQ2dMVjVRNVJmbEdZSndJWmd5OXFOa3NVeFgvTU5zVEZ0dUxwbytDbDB1Q09wZ01QZUFxS2tyQVhiNWpGLzg5ZTRVeTZLNDdCQzVCQmZXdjJSWGxaN2ZiNEZKTG9EMndzNzBNOUl2L0g4TFBRRFFtWnhWcS8wOUk3aDJWL3NzaWdzcndkblhIc3JHUStYcXhmYTlzdks3WWNBS0lYcEtGbk82UHhVM0hEUUxZTlE5OE4wczgvYnFtbm9McUJPTGdER0h3WGhHYmVLSnk4S2xjNVd2SnNFekFrV256c3JPWlJLNWZKMGl5OUxNWGo2MUlJczV1V0tzTDNaekdRcnFUV0NmQVNzL3p1VEpiZmNoNGo2Y0VBOENvS1RjVHJvTHlEQ0l0UTl3V1crVFdYU0ZJMmo3WU4zZlR0bVArYndGTDFkcU5zTzZZWDNVbHhJeWd5RUhkTTd4MFBSRDRkSmppVmZzUnZQd1hxYi9xYXJxMzNIZ0h4SzJweDZ5TDVFR2hNL1dsSXZiRXZsc0wxUERxelVLeVVrZmRjSEsvV092amN0QVFwblRRUVNGbU9CTmxpMFZocy9obUt6cjVyRkdYZEpmendiOFgyd01JNGRtQ0FaZmxSK05UbkVudFR2eUdpS0lGNmNJZUs2QzhFdTREbUVDUU0xMnZHSDAzU1VLM2pBbzZDaFFZbUlrMkFVRDR2QTBXS0pBelk3ME1GeGZJa3VBQ0Y5UmNYbUlaZG9ocGtiVzlHbCttVUZyRDZkdVcyakdDeFNVWStNUDAyeHpacTRSRjlQSURGUlNWcEplUDdCQzl0czlLTjFadXpIMVZ3SitUaEt1WVFoWEFIa1RVeUFZcGsrdktvNFVPZkNycDJzaTQrcEt5WGFQdUJ1Wkpib2c2YmlCL3dsMGUzZ0RTa0w1ZFBZb0RvdVpTSUdFbk5XZVJtN3ZYSmQyUldIRFE2Q0dDbjNOdTFCeEJ6YS9yVWh4VStkVTFabGozbXJiTEJsQ3NibWRVd09INStNUlUvVE5pU1oxbnBmQ1lvY0NRQ0xUbkxkUi9RVFlpdDBqRFNja2xLUmNvWUxmSm1Na05MeHFTNWdIOS9NVndKalhWN1MwM3dkZXJTcUQzUHdYMTI4UGhFakRIN2pVQ0VIem1XZEFvbzBWTE1sWnVYZnREUmViVFYwUzVNNk5yelZSdHRvMXRXa2YrUWcxQVB3b216bXdWUlAwell6YTA0eEpWbVFQN2Z4bEhtSitHZXBFY3lrYVFxVk9uUUZWQVduekpTYVA3S0FxNjlLMDZLc3hZVmJqRVY3ekd4NVp0OWVWWUJ3R3pHVjhydklvRUpxejBxMmNoY0lyTFZhMHA1Mjk0RnVtK2lHWHIxMXR1UFdvQVVCbzlhcFowQVRZTnBUcGQyQmN4ZTIzM05wamQ3MVY0N2tUdTVscWlBZ0QrWm9tWHBNNzNyTWhCaEJxTHg1ZUJna2VQaEZiM01BTFM3VC9IanJ0VnJsUkRaMU5EQmtpTWp5eGx6Nkd2ZHNCQytwVFFXTWVkNzZxMmJsMnVHMmVUV2VRMm1aZDE5YzVWUnpzQ3pZd0x3WFBPblN1R2N5MTRaUmUrdVdtSy9ZcS81dDNVaVpmMERkdHp0SW9uTVlYUHlZUURIZEMzT2h2ZXp1emZQQnJVSG1IUEdXc3g3YktWNklVaEl4Q08wRmNEbE0wbkVWOW9pQi9TYlFGZFN0eDJIK3h0Z0RmV1BMWW5hcTdIZ05VckhIeCs2MkROY2d3a0k0TkwvQnZuUGVrcTJ1SFRFWGR3NTQ2WDI0MnR6d0dMVkl2d2YrYzFvTEdpVExqakVYV0dRSkRnSFVFamxWdUhIWFRqVFdkTjVRYzdGNy9kZi9URXV0a1B0S0VzcE1xZ1BrTmNyb2lQc0FkUkZPeisxUXU1MzJ0eU5EazVFUUpIV2Y3Z1ozZVBnclNKUXBSN3hHQ1hWdUxyU2hLZTVXWHpJZ2pCdUM4Q2diM3BoY3NqWmQ3SEs5TCtGZHFZL3FxeGdyWkVnaGxzTXNKU0k1T1puRzlOSEVzOEtzWE92QWY3dUY5bk9UM0FUM1hHMW5GS3ZaV0pBOGYrRWUyb0tjdCtYZTdQTSsrUkFhdE1CSHphMmJPYTZrRzFiMXdrZFh6SjQvVG8wZDBpdGhoTTJBbEZxWWlkZFB4WkdDeitXVUF1dTFibUZOcmZ6RmxzOCtPeW1GKzFFTlVBaFNEcUUwOXlHTlpINGp5ZFN6MUFJZlhTM1pwZzZnYjFvTVdGd25sSDZ4dGRMc2NLVWMrc1JsYmtub0xHZEJ0M3FCdHo0b01PVEl5VHpHckVOK2N6YiswdGYvTGNPQ0syQWVZVDNHNEtvVGN1RzErRFRYUG1KVXcvMVBiYndyaUZ1eXJYNm53MWhWYU1idVFSWTRUNUVuTnJXRWd2TUVQZk44UDZuSHUyaG9aWmpsR1dSb2ZvUVJIR2VWTFhBb2dSZmhaSm9ocmpJQ2NkMVZwY1NnQWNpaVV0Rno0Y09kL0IvMHhzZVlEcVlMU01lcjRvRUdoUis0ZWVGRWNYSjg4b0ZUMHpxTE1DNVhPTk1vb2hhdCtNZ0FGaHlLaFlmMjZHMlBmcGx6VFRmVktONG0ySmUrUjFNOG91NnZRSmhncHUweGVjMWQyUTcwNVhPVFh2RTdyenl4Y3NVclR3M1dENHBvRlh1M3lzN3BUeTQxVzJBb09wZTJFYmpJVTg2RE9CUGhGaXExZzFDMTBDVm9Uc3JuQnBOWkVleFowNjV3ZmNxdWZxbDB2N2k0N1lVUzBIRXVLUFREVlArK2dqTExVRkVvNm1leHM5aTRWMWJRR1loeDNETUhiUG5jYzAxNVZFTFlxdWxqYUpQS0d4c2xvSlBpanV1ZXNmZ1g3WVZKY2tTbWJnZEJ4OWdwM0pEc05BZkpqSHVrS2xuTG5SbVhWMXZ4Z2o2RVQxanBKbHJ1TlpkZ2MzZTJ1clVkWXRyZ1VkM21lWmk4VFNSR1ZtM0VNdFhvTFFMckx3MXpqUmZUbUo0Q3pUTU94SEZtc2RvMHRwWVdMalVtQ2ErSi9EaGpSU0pVRWU0Y2twQkwvaU1TOVhFMlNaaVlpUG11dExBS3FmeVRtSXNlcGVzVk1kb3ozTUI4MTBXL01ZUTZsUFNzc3N2MHc3NjlacDZERGtiUnQzci9JL3BOY2tQR3lhTmt4cWZMQktuNHVQUGdQemNjM0hyMGNuQ1NqdXJScG1iODU0MmcyQ3RKSE5vS3pLMDI1TkVlb1hITkk2S2dLaWRJc3hWcllzS3kveGxEYmJSQjhaREs3L1lMY051VTNMV0s3Y2Y1M3Q4T05qWWJwQW9yaEo1c0g0QmliZTdiMDBpK1ZCdVZZRW1ndjNUS1Job1lraHlTL3kwZlNLKzMvNFNFWkN3OUtCbnl2QU9IL0pBdjI1d3U1UFA1WGlpbFZFZ01YTmhIOXlHQzhGSG1wSFpoaU55eitSN2sxOGN2NXhCRDdQeDVKWDN6bG9VWU5EV1VGV3V0SzVnUmJ3YUhRdi9KWll2K3F2Wnk5MVhieXdzcm12dXBvSU1EYnhySmhFbXNnRzBxMWlXTjFZaHErcnd3S0lZTG9qSy9TaXZZMkdsSm9NVnk2c01XbXo1RmhXdjRvb2VVTSthL00weVVZN0hCaWZRQkpOaDcxRW92bk5sU1ROTEtBa3ZiUWo0czYzNk5DK0NLckovR04xcDMyWjh0cUNpaTlGNDAveUQ3UGRHK0pOWDlvL25yVGdiUTZQUlZJMEFMN0RRUDdweTVMZ05NUk5jRFdlaUgvQ25HQ2JYSVA5RlhPVWdzOEJxKyswWEtnNGJPeVE5bjIwR1krZ2hycFE4VkxnUDFORG5wQjRkajAwVkdIZnNjTU5OblNwbnpGbkI1ZHFKdjg3QllkQVhNWVZoN0ZQRysyN09oMUplUk5GOXFkVmRlWVVaNXRHL3dyNHBFa3JIVy9lN0s3enNmdVFGL3lCNU8zVjhLb0RERHdWYkJ5a3RuT1A5ekRXSFYzbmRTcXEwdUtRcWk1MHUwa1V6QkdVTUhETzdueHM5OTM4ZkJiTFZqVmJRWEJwWVpTL2w5U3RiUG1CcXVSM2xScGZLSzgweGJSUDQ2dkk4eTRSc2xxRGFEZHpWNDVWZTRFeVpWQi9odWo0alFwdENac0hxMXdpbVNNUUtzWWFKQ2Y1WXBLNThUQ2RqRy9uTXdnbVdRcnFic0N6QTZ0ajJoN2hNQUJTaXRZZWJQTXZyQWtDTFR2cU1QNEZHNXRFdG92aHBtSFh2UzZjTjlJNlJFQnB5eXI5K05KRFVRc2djbUJ4OWFYeEdEUkMvVU85RWoveXlmaDJsayt6dDRhVndacW53N2RQMUVvcXdueS9GNTQwbm5tWjdTYWtDVmorVEhPYWhGYXF0Q0E4UEZRblBQV2l1RkxxcitocWhWaWx4aGIxNG84TTZNYTJEVFBaQ2l3emVYckdwb202M2pRaHVYUzIwdTd6Z1gyTDdLWTVEVC9iTUVubkdLQjhMaC9UOW50ZVpGWCtocEtJbERQNWRVRVRkbTlTVlFoVEliMkNmb0ZjVEoxb1B1NjF2U3lDUXhDQW1xYjVxMEpLWmtqTjhaOWx4SWFGNzVZbXZ5aG5rZWNGZm1VcEVYY2FUdWYvQ0pMdmprQUdYU3Q0S0NNelNZeDdLYnJnK2cvSFdQUDQvMnJjRzVVR2hKVkp5czZYcFJ0VTcwRzdBUXd3SnBCTmVSRGo3RUxyektqendpd05TWGVqbE0yUHpsdHNvR0xUZGRJeVMrUndIdTdVOVJVaDdOZng0YXJkdE1aeEx0YzhrcytncHhhckhzRkw1SjBJTFhURFY2UzJuWm5pVS9YUTUwNGplc0NFVHo1M1hxdUlmNnZuNWthMzlKTDJIbStRcGhhM2diMUZoTVFvY29FaDJLaE9ERFdKK0hqeDk5M0M4eTVlbHlyL2E4NXRXSlUyZi85QlowOXRqa2E2OEVvM2d6dHVCUTYxTGJHOTlwS2JWdDlFQVg5aUNoNE5EN2I4S2kvampmNDk1V1M3YVBGRDgrSFVRT3ZNL0ZTMytLdlZIeXlhKy9TQ01meVhIOThsd09pUHgrb2hvWE9RTnNvaXBZSi9ZVmNSZFVnWjF3V2l6RFJkR28vYXJkdFNQcFhXYzRubmlIY004eEVvUVZoS3labmhUY0VEQVVHRDZ0SVBPMmpOWlJ5USsxZkNaWTREL0lxcldOZ0UxWmJ2eDB1Y2FuUlhkM3lYeE1Fc0tXN05ucnlqWmZldGFGZ0NpMUwxUGdUSWpKcHRSVWJHdGVDY0hFQ3dwaWFMMU1menpQSWFrU2NIcUxLZnFSQjdWZnZnSU1YTDhsaGxLdmNtWGhwQmRQS2VqTlVHb3dZUEs5WWNTcGpRekFwSGhhWXc3K1lrYzJuYXRXOEp1U3kvZDVVN00vQjRMZTRFQ2I0SmhjV2pxcFVWY1Zqbzk4STNNeDUxallzeDJRZkdydkVLNDhkTm56MlhtTy9DYmNLYy9HKzd4UzJEUE5wOFpuMU9CeFJDT21jSjIzQW9WUk1KSW5iSWU4eTJCbHRKemViOWhMZ1J3VGlsR0lubWg3bThmM20xSHdWN1dSK1oyWndMUjNQbXp5andIVFArSTQzTDFIOElwSndiNnE2YU1zRjl6U3JQQXFQcU1kVDRzWnA5Y3hjWHc4VGp1QndnOEtNdHRmSXhpSmppeG5BdHN0TERXMkRVVm9PNEVPT3daT2FXOHkwRjJwWE02OXFESklDMGNhSFFoREh3cCs4ZzZMcWJ2aE5XYW0xM0p5OGE0aVBvN1RGMUVveVNwM2plQnRZWWxlcFJSYlV4UHJ6d3NjeGVQUlIxalp5a3QwY2I4RU1wR2hnWmRJU3dBa2I5UTFNZ0ltV1VSc0tselJaSXdKeDN2ckVwZFJhb3pPWk1iaUtteUlBK21oMERSalFvc1RGYkxpUFFySEdpZEhwZXJDVWJva0ZxSDA3UDZlSndrYnYrZnJoVVRNdzZSOFM0Tlp0NUkyRHArRnBUVWJpb1YyUmZwVFFYU2lLSDFXaXl1N2FlQkFDaGFSaUxid1lhL3YzcklDZ1BtZXhhN2oyd1hkK3B6U2lYNFpacjUrUk52c3pjYjFVWlFnQkZqSmhGWmtxNmFJODdYekVsTDk1RlFsdlpRVmhYWEMzem1jU0NlRmloWUc3WTFpV0ZoTkZRWjQ2SS9pNVhDbjVMbnZCRUpjUi9PWDRwZ0dBL1V2cTJaaEFGNGJWSzZEdHJ0cWhOdFRXMGRNTXFQY0M2MnMrM0diOStNaUFVeDZ2dFJyTWcxVTlxNFdtMjdueFVDWGd2aC9nV09qZk5xZ0grU3FYV0ZxSEJwT3MxUFZISWtSTFdvcEs1a3J5dDQ2Y3RnbE8zNVFOUElnQ2N5cUNtRWFmd0ZNMXhwK1hPWlczRGhzV0JZekVqVFp1Wm9MV2x4QnBBVmhJUmh2dG84UXRsazV6UWxqdy91ZUhlMVJJaXBBR2FJa0Y5aHpEUzhIbHlsTXRuNW1wUGl0SlJWVlB1Zmp2WjZ4RWdNREd0OE54WW9KWWhUZnIwMlRyUVNrU0hhUkdQT3FkallPOGJjanYwVDJSNGRrRGJyWjk0Qnp5ZkRLc0U1ZkJHQ2FMQjAvMHBKY1Bxc0tJVVVUTldCK1dVTUt4VnFBcVRoK0MrQ3lMYWYrR1ZSaXNiMU55a3dLN2JxaDJwQ09mc2tTUnc5cFRNbFlyVkNGT21MR0dQTFBEb241TzZYWWZxMjBQVC9TUGRHNkZ3YzU5UllMbWlHeXpxQ0drNC9nRUkyVk9EektZZk9iNmY0RDVjTVRQWDNZNmdZeEVFL21OSjhTWk5LOTV6ZUU4OVBFN1RBV0FEYm9DUnZHVFRFY0dKYXR1YmFpVHk3b1pGMlFCNUtISDdnNTVrclpUREY3eTRqZ2pnZElGc2lJSFBvM08yaktveXR0cUluZlE0VWxVVGxiN0VPTllZNE9RaUIzWFQrZUxXUnNvUUREM1hadEJYdXo4ZXpNQVl4a1k0U0FSM3lZbUVXV2tObGNySWIvZWV1Z1ZqVC9mUTdidGxaeENPcFlQWnJhQ3dadTY2TkpwSzF0bjIxaFN2Y1haM2tnSExPTXZrY1hucUJDTmVUdHgzZDBGZERMWlI3WmZYaVJkK1lpQ2ZrVEJtWGdPZnR2V1JlMGNyOUlWWTk1dlVKWHhBdzAvcm9EUlJzZkpYcysrR1djQUNHOStIb29NRTg0MDZZMWpDdk5ZZDFKU21WMG1IaVA3RHJMNmhGODNXdlBTcklMM3VORXk0SWZXT3dMTjNUTzVkUG1GdFRkVnUvQ01uMTZoeERoS2h3Ykw3cUxWVzMyUUVXeHV3cGtCKzNjT25iaStiREZ2TVVuSkZGQzRIUS85RENadFdGYW40NUZuQzc0NmU2cHdpZWczZ3MzRGNIcmxUQUorN2gwUGJVUDlxZ2hoUTZNeCtJYmhPVHR1Z2xqdnBJdmtrandsSWJkdmllNUVUVExPU3FIQnVJdGI4U2NMalp4bXhMTW5pbVkrTkF4MXlCbGk1NnZwRk9mVHhsaTZnZzd0UStxY3dGQUNUenkxa3F6Tkg0STlOSjRlcis5aGJQK3VpT2owSi9SZ1dpZjh0ZjZpcU5oQkxpOVkrdmJhNHprbjZtTFhrdlZPTnFDanhXMnFsQ3N6SXdXMXZTemFrS1RocUxYQ1lvTDNyMVl5QlBycDYvdFptSXR4UkdEZ2ExZm9TOWMxa1B3R01OMVd6MUtYYThnR0tvYnVqZ3NtZXQvOFpBTmtJN2gyZVJzN1VocEZiVjh6Sk5GUWFSNitwWDE0K04wN1FtRThXUkl3Skk2Wkc4QjdyS1l6d2NvMUlDZStobmpkQVJYSjdDSGltN2FDamhxeU9XQS8wUlhNWVdvYktrSmR2bGZYVGdVSHo5bkVPQ0VjeGNXcFhKUlpaTzZ3R1g5U3VOb3p4N3BBMXRPcFpIWmwvTFFnQWZUemhpWDJLMXNKcUgyZW1MWnFxRC84M2pxVXdnbUgyMDM0N2QzZlRjc08vNXA0czgrNlorOWRoM1A2czUyT2ZhWGJoYlJDcTlDdCs2QXZTWHNvczdJTkFSbUVHSVB0SGVMaVd5aTZNRWZ4bDkzd3o4VjJISElrOVVJeEU1MnFEOUxVZ3JNQmZQV3Nic0tWNmRMTS9EekJrejZnMXY0azBMcGVXeU9KWVc2UHd0UUdNT2JpQnl0YlBTL3dGZVQ0bmI3RU9hZGRzMDR4SHdUU3NYNHRBSUdwQVgydjZoY0U2eGI1WGlzenhXbWIxczBpUXc1VTNFSVd2MUhBRFFZZ2hQSDA5OEM2c2k2aTZaZjF2WmFNT1pxYUlrTGNXQk1VTGY2ZFZJM21pSFNCUnNvNDZVZmo0cmR6WW0wcFlDSkhGTlkyQjdXM2VraUFyb3dFVXM1eE9tU2pDUXNKazhVYmpkVVZ2YXlIQlp6cUQ4NlE3QkVJa0RHbVdPL2I4dHl3ZDJENEVraHRMY3FodzAyeTRkeFBrRTI1dUltNW5EVzlheTFwSEVTZk9yOStTSE5TZG9jNVdtdysyMzZRdHVLTHFnNStjeVcvOXhaSCtNZjFtMi92TWN1VEQ2YnoyTHdHUFlQeHZiWFg5N0Rjc0hlcHhCeVlOeDhiaW9SRTF3U3pTNi9nZ0J4UVBCcFREa1ZqdlhtNTBjNStvRWYwcHJCOVQ1TTdlS3NCaUJsekd6dUJIM3BDbE9YMFh0UjBiZFRFNFFjeXFkSC9RRU1LaERYRnpPemZGdmplM0xlTVVvWkZSc3dkaGdXS3FRenJVSElJM0Z6ZE56bFZrNlJFQVF6d25qTlhBQTllVkVrZ2xSbGJwaVlNdkdId1dpQTZrM2h3bTdxS0tPQW5PZG1jSjR6cDNLZjlpSXBVc3BYMnloZjRzUi91bXo5Q3Z5K2JIT0s4WE8vUFNWLzlvYjhTSEdyOC9tZ3gvVjk2cFdlS1MrSWlhOWN0YWpTaE4xR3dmcnJSbnJIa0ZDVUdJYjJ6M1VmNEFhRGV4aGQrR05zN01TeUlITUhQcDJSV0FsMDBZYXVSeE9ySDZNOEh4S2I3UE0yUDJCZXduTEFSc2NLZEtBMnE0VXIvcll3N0FxcmNyWkJRa2w2SU5WYS8zenRxT2o1ejZET25TbmIvRENHK0h0UncwZDRWMW1Pa2g1SDhhUFdERXAzZzMvVTVuV3gvL2VGaTA2bXV5WWx5a2VqR1djOWtiSlMrZktzaUhyOGs0bU50SDUvQWF6dzdoK1dCZ1NIUHliZTk5ZjlObDY0cDVXbDNUYS9ScE9EdDlmVDJTa3d3OHhxeXg1YW9ncis5WElYczJWVTh3ZmNlMEozY2c5dUVWYVprR2dWckNZTy9hZWNydXdPeThocGJldW1PbG9YSFlBVGFoeGZMdk5JL3FJYlR6M0FQMmxac0tnY3JSMFpXT3ZGVS94VGxpUVJKYk82dEdYendDcDVDS0hmdnkySS90Y09SS1FYelNPYmdZamNuSXJacHQ2ZjhMQVowZ1I2cFYyQmJTTTNxdHpuL3A3ZEh6dTNLTEpSVVc1SnRMRG82bHlVQytGenN6VUl1T1VYcmo2SHVlZkdVNHhNMlNob3gzUnQ3blV5M1krTEU2dGEyWUxITzNrZlhrUjlGZFpoZWlaS1NHNENldEVhU0JjaFVBc0lvWW5BZ0pvSUZMQWhWaFB1TFIwUE5iYUg4RjBtYzdhNDFkU0psSGUwZ3UzZ2ZrQXpMZDdKWWk0U0YvREZKbUhOQnN5L0hGakxUNDA1NE1DS016Yzd2OHZpWWsrZ3FiUnMzT2hTakI3dTFxa3E3b0RSd0NhUUtocUwvc3dUREJXVEp6dW9GZXNkWEd0NThmM3JQUGpabi9NNVBkR2Z0RFJTWEducUpIeVluOFpZeUd3MGlwcHdQUnZVOXh6RnZXNEIwV1hsZUk1TXVHOVBXSmphQmovMHJQV0IwYmxsTDBKdDJWdnkxajFxK2t6ckxsWEYxZHArSWFjNm1ZQ0pjRDVQZXlFU1d3ellQcXh5UVpad1h1MGNIMko0NFhmR1Y5TDVwQ3ZNOEVHUlg3TE9CRHJyZnBlY25ESE9KWGhaN0VnS2doVkY0cXN6bmRPYUhGRDd6cFJzeFcvWm5yL0pNdWEzclZHc1YweWFJVXFYVHpJUE5YZFVsYWZvOUtVQmh5QnJhTnZnNHFqV2lJS1dZZ2tkVHlxZ0cxVEFwZ2tvYXV0MWIvU2lzKzRxV1MzR2Y0MEJ3WjU5d2xHeDZDdVdMSWppRTFPTzRHUUMwZFlMWFRFOTBJTStFYWRydVBYMUtDL2pHK2dzMWI1R3pVeUVrNlBhOU52Vm1Ud2tndmFFRG1rWDlSRStJcmNWKzN3S1QvWGI1czFyVGJSYWlKZ3NoblVUTmlzcmFXYi95bUZTNnVjeDJFMUM2SGZ6MEFjYVNvK1Y2Zm1ObjRMbEpvVnNpYnJKS28rczk3dVk3cVE4RVl6K3N4YUN4QU9LcWpUUW1ZYU90NitUL3ZNMFlkWkxWb2hJRDcySm0wcGw3WnpYUW1JSGNQMFhSZlNGdURlT1hzVm9xT2hEWjlzNS9zbjRLMmUvbWZUdXcxR2gwbzlYdVZBQ3FpaEhVRHFidURuMktLdzVwbXVjRU83c0RtMUNvWjJkd1Y2NGJoY3NVTGx4Zk1QTEh1UEtwZnE0c2RsaGpzemY5MGlpQUVtcEFXRWpFTVA1eDFhUDFuSzRQNG9tWUREeUlsR2NlVHZDZFpPS2V5a2dHOUdwM0ZyNTRuRVZaKzVqSC9ZUGxwak9NTzdLOGNVY0M2V1cxVDEvTTRMNFZhQUFSdVY5Z01BbVJVd2NhRzE1WmoyN3YvVmxKUldINmVBc1pkU3Y5dTN3QmxRamMzOHlTZEswTTAraXlJYXZwaW9CemZmaStQT0kzYnVIVnRIa3JVWUV5d09zbktzUmNsbWF1NFdkQ1U5Y1IvK2kvakVuQVZpY3dmRS8xb2ROOVlCRE1jRjRzcmpIZ3oxWHQ3TERnSEx1cG9LdjVLUmxWWHY0VGZHVjVpcS85ZU5Ia1F2blVVVkNLVzIxNkdHZm5mMENnQml2S1VNVVl2Szd4SmRoNm1WUEx6eEJqT1FQUFJzZk53K0VuQkJmOTJzdzk2L0dDQ0lpY2gzWG5PQmZyaXNldkdLRlcxczRLYk5SK3p6eVB1eHkzWms3VXhFa0s1enBWNys3Z0RCNkpNVExPSDl1UDRtVDB2dVdIRjBPR0xMWm0wS2V3dE00MlF1SkhVelZGU0wzVlJ6YUVmUm9xZzJVTHB2RENjWjl2WTRueUxDaEtKYm83Ui9BckV3R29FZldSWU9sQ3FSNThrYnJmNHY3VUUvazdpamovWW8zaVRuSjJmTWZaVmtMUG1RSTNDODI1OGdQMWtPS2tuaHRhU1Yrbi9CbktScWhpdyttTWFMTDhkMGRVeXNIa0JNYjhtVHJwNmloaXJDaWFWWlJ5Y2tSVXJ4dFF0Um9TakRiNnBpeUZ6V3BRMzlkQzlYV3F2cDJhQ1ZnQzJtT3RoUXNLNm5QWUFrd01oMFVwbVN3Ukt5UlVRSjZQT0VKazU3UlN5OThhSEJxYndieGFQTlkyOU1XRXpxTXk2cW53aXlSc2FIdC9qTEY5RGFLOGlodXhsa1VRbllOeno2RlozWUFCWWtpeHpPOTd1ZTV1Q0lvMk1CVXArWWlseDJZR1ZvUzBoRzJMQWRydmp1Um9OVzkrWnhtZUJOcTI2TU5lSVFmbEFuQ2tuWGMxZnZpVWVaOTJLNkFzT1NVT08vbWRjWENRT3d0ays0QTQybE5OSjE4clYxUTQrc0g4SW45VlVWL1lFNlhzbUZGZ0ZQNG1OSTRGdDN2aG5lYzFFblJzVFhGRFJyL3UwMHZ1VmF2ZDM1aUwzZHQ1MHp0RFg0OFk0NjN5YS9hSFNPQUl1a1o5SG0xR3l2akEyQW0zN2lEZW9XeDJXckNvMDJGSUhYd1g2b2xlY2thOVBkdDNCamRnV3ErYUduTlFPVmVYWFluQjhsQSt6by9mMm1uOWhCOHlXV3FycVk4WFlHOURycUZHSExKTkRjdE9aeEpoZ0IvdmRob2V1amNuUXh4NHlKM2duQllrbSt0VkJNbWNVZlVCRzE3YVQ3MUdMbmlvYmRZcGI3K2tiSThSZW00Zm1tTVQvYVA5SHNsQWxVTjdrY0tVQmVkYmxwV0NQY2FUMFZiejBESUxZMStjQ1R6VmFoS0FFbGpPWWd5WEl3QTR5ZzVZb3hRWFdJa3VoNjBFdHRzR2ViZDJDQWUrVnNXVG02L2xHdEc0aUw5Q3h5TmE0M0R4WHVpdEtaQ2ZRV05MV0cyZE1TZHlxak9iQnJObXRjMTc5MUhvVXhVRFRzNEV3NHIyZ1RZYUVxSTRMYVVSTUdFRjdJOTFXNmlTMFhzNERFZ0s0QVA4ZjVQYlhVb2Q2WXVuL2FwN21pRzFrZ0s0SFlVOTJWOE9WejhXRkRwSTBqNTlLYW1QK3FpaVphaytCeUNFYWRNV010OGZDM2VKclcxbGZ3QW5GT3FFODFMZmJiSjdqMmFrMnNzV3Bjc25MY0RtWWkrTitDVmdkb1VLRGRQOHU0TTllaDBxUjVzMk4vM29RTkkwZlhRL3FIbTdBVS9FYTVoSzF2TUhxOStZTlFwdzdOcjBCeTBIZWU2eWp4dkZuUVJBbG1jS0h5em9Yc0oyTllCTnNXZHpiT2xlWkhQRUFkTnhpcS9vMkJXMXFHeG05TWRmZGFMbnp0TUZoMFA1TVE5SG9UcTlRelpRQkRxa0tncUpsbUJnUEdPQTFQOHhKNU9lZEJXd2hUTFJKLzBJY0sxNUNBUHVTamUwTWRPRHpMckVudDF4QTVPM0J4K3pYUHJBL0JZeEczR3g1a2ZFZnBXN2NJL0VtSGtYaXJVTHB4T3h0NWkweVFnWG5wc0RXZmFZMVk5OXhWdHZQK2pOOGxPbWRXcEU4S1hJS1BSS3hvQmxwTk9FeXpSVkh0VXRRdHl4YjNyUDZFVERPOWdXWFRjbk12UUtUWGJwM1BqOHNoRU9CRE5WbTNzTFRoMEJ5VU11eG0ybzNEdWl5U0x1NHJuakk0c1lNSFhQZGZtQWJVV1oxdHZvS09XZW02RnZxOEI4Zys1elpJalE3UG41NG1lZnp5M3pSWE1VTld4Y2Zid1kwVEhxVVpsOTc4UVM3SVlkSTc4LzhCUnBxRWp6Z3QyeDFVSC9JbWU3L08yTUlKN0IybjhKLzJsTXNDclpIWVpmMktIZEJ6Nmo3S0tVS1dqbEdYT0grWDNNenFyemYxdXA0dXAvN2VwMkZoKzlzQ2pvMVVRL2NFNm1CeW83RTVOQ2U1MTl1cmE2MFRGdmRJYlowUGJ4ZUhXajl1cytpS2RaaldKTzRGdXNITmxscXNnaEJhSGhPaFlqeUl5RHZ6QUFUTWowL2VPSStDdE9UajFQYXBZMldhVXlPWFhhbnpHVXo1Nnc1RmovUkhEU2w0N1VnaElJWUUwQURTV0RGMFdoZDRMcG9BUWpQR2c2L3BHK0lPT08yZkM1dGxOVis2SGp1dnljRnhxMVljMStKVklUNHdkUGcxTjlRY0Y4U3VyQkpLRjZoSkJGeW5ZQUhNMyt0c3U0Ri9RM2djYVNjR1FGWVVVNm90QXRJYUIvMGl3WU1DTWRhYXZGSUZSS1FTNmxNb0t2Q25CODh3MTkrNnd3T3BzTzdpVHg4V2RIWXZVN0xsUi9SMWNaUXZXRnI0dnJtQkJzdzhWRk9UcGdhRHprU2IrRzdFeXF1cmVQclRIRTc5RTdadVIxbnFWR25FanViU3pabXMzQmlKdkRTNGRHOWpwbUJvbVluNHVncFp2aHlBT3QySlR1VFZraEtMcG9QdVpXYjhRdFR5K3BYakNnVHcvelY2MzNsWTduc3IrT0lsbHlTVW1vOFU0Z294VHJLOXBoYW1Tb1plQ0gzeHpUTTc3dmpEU2lESHFuSHcrOW9yM1Z2cXFuTXV4M0Q2bTFXc0xQamFyaGRMY2lyN0t1VW5xeEYydGwyQnF3eUtCeGJvV0tPcHU0d29Mdml1MjU4K2ZsNVE1UWF3eE90M0NvZHFaTHJpbnd4M293c1FObFRqQUM3QlViUUFhQmVZa0JJdE42a2tPcmVaTjRsU3U5a05xdk9GY3E3WmlGbzFoUkxiSHpac1RqTWJsd1VUN3VJUnBuNDBjUzlDdVo2bEtFSnpNOGkyNmVDTU9pa3dNak5yUkhHM0g3R1N5WUxZUWthRitzWmEvVm1PdWp4MjFHRkQ2b1E0MHA4SXlnMlJJY3h1TW9mOWhYdHNOZERDdzhvN2luSVhTTGlTbGZDOFJvenJwc2J3NlpIdDQ5VHFrVzBQblZvSVlFVHNRa1l5ZUJnSmo1dWEvbGkybGdvT3RlUHBmRFlRU0lMbnc2blNhUWpTbWsrc3ZDbzE0TUsvczB1YlRCdjNUSUFkamlPWDBicGMvbnFQQjdOcGJmM2hQbmI3WTYvTWVGRks4RTB0ME5BaGpBTUpQdVpHK3hSa1p0bUpFYmVYZUlZQXJtUXFiRkZXUlFYUlRmVzJyN250Qlc3WE9lc2F6ZGdrS05ET3R4b2NrZlNCbnIrNDg4SE9VTE8rVXlaVTBLZHpGSHByY2Mvc3QyMWdQTkoxL0ozeEsrM3NxaEx0V0Y4ck51MEkzRmNmdHE2UXF1N3AzYk5yc0VjY2poMGFRa1lXZ3NZdldEalFWYWRmRE1RVU1CZDhzZkMzNEdwc3pqV0VFNHYvbU1ueTNZRUJuT0V6Zzg1T1crREtuYk9KR3h3R0dUamMvVDh0UFRjY3BJVXNOb3V2Qm1pb0FlVGttOE9LRGxoT2lFWTdwMkdDWmNxUUhZSmxZWDAzakZjc3pLUjdRSWZxNGpaVjRscmlpQ1NDYjBTSFI2YklkdElxdngvZ2lkUE5IWFZGUVI1NlFoVDE4NkIyWWYvUlc0ZXhhQ3YrcFhxMStYbmdjN3pudHN4a1RwUytJVmVuUVdEUytxdDhwYnpScWtRVFljakNPSStmZW84eEJFY1M5OUg4U1NoOHVOSEJic24yYkxxWFZLMnZxS09MMWhFZkhuYzMra0VhQUcyRUY5NjNXUElXaDhtMnJPTm14ME5yV1lIeWlDZ3V5ZmI2RTFkYmFNSlk1a1BpN3laSzNQdkp3V1ZmM3JleHpKcGFTYUUxQkcxN3V6YmlzR21IWFAxZVBPU1BPd3ptOG5hNnNkeHdqWTlVYXhNUjk4eERjbEJTeG9nQk1zMnlzbVo2K25RTWZ5NkRpVDBIa0w0VlAweHl5TmFPVURpT1E5akZZWUVTd1FLMVp2V1NSY1R1dXNmWnAwRStrQ3V0dUpXQll0ODJTS3MyVVplTi9yRHFFZHFwSXpveFozZThjTlZIMTM3ckV4bDA4TW1FNktWb3ZYanlxa0lrNU9SNWFUNDJ3OEd0b2lJTkF5dFFsT0RBTGF2L2VqZFB2SENteThlWmREQ3JtRCtSSnF3ZXVsZ3FGcFAyZjU0UVd4b1JicnRydkE2czREWks3eWdBbklIWTVoV1BhNm82dDgycGYwQXl4Q3lzenRIZXRPQytxVmJFZUtSaWFKNnMrNmhsWDBTV3NycDNwTk5Xc2FHMkhIY1l5a2tBb0xJRnhCYS92UzdUTWdQSElOQzFnT3RybStMZDFFR1grS0d5RDhERmhROHVDcFhFTWxyZTBObWhoT2FyQXpmd2tZUlRqMThzNEpQMzZIWUdwRjZLVy8zTUd5L3lOTXQ5ZjBOWjhuc2hCM2h6dXJ2MWd4QnFCNFV0WS9EL2NONWFMakc3cnl2dnN4RGw1OGFpTytEQnhGYzBzV2V2c2E4SEM4Z2oyYzBJei9jc2ZOSVhFL1ZCOHE3QUJVamRrbUxId2RrWDNCbVpEem5QbHRhc2ZSTGJTNWMzT3pFWlZ4VEdNaWhNUWtscGh1OEZjNjBObUxmOVdGTGh5QTFVTzh1QVZ3THZETVRJV0tsTTMrTGYrdVdkdFRUL296U1RBVHI4MHhUeFBkVjhNTmVEbWtTeWd5MWtDdzdld25rcUpHTFhRU0hRYkQzTUs2MG92dFZsUlNWNWg3ZkJOOS81bnBUdW5HemdWODFkU3R6RUdDdHBoV3QydS9aM0x1d0p5YXFtWThQNGlucTBSTjBiMWJkMVJQek9ZYXBkdDgyc0haSnArZ3lDWGR6SkhIVGhOM3hoWTN3MlQrQWkwMXVQZTk4YS9VOFBocituWlVKcHhtOXVpMzJQR2tvbG5jejdWTkhpRzZmYXVaQi9MQU02c1JTcjRWYmt3K0h2ZkxuRjhydVZKUTV4bmJyclRWdUhEa05RY2ljV2NyRFRrZVU2UnZ4SG9yS3ZyVTVqZkE4UEx3ZlNaZVowdC9DME82UStNT0pTZWxUdXgvZXlhbjJEU3c3emFJRGs1TW9UdzAwaUhzZzdmY3ErRnJSTVRDZDlHNFBDQVhpcU5NSUhFUlFlekMyVlpmL1lKdG1CMGphZ2xycTRZb3cyV2FucVovaE5POTJVRnVxbll1blMyMFN6bmVPa1hFcFpnOWJ5MStyaGliWjhndE1FQXpMbkoyTWhqcXpNbEJXaE14bmxTQ3pJQ21QNXhBckFNMkhqT2J3S2FQOFVwYlphMTJvdVY2Vlkrc3BtWnk5bm9WQTMyaS9sbmNJYVNrNGZUVThJbmFuSFlGeXR2K0gvc3Qvc2c2U0JIUWEweGhIZkxxamQ0V2JpOUJMOFl6ZzJJWDFqN21xQksxMlRaQlB0VXJEMkhLYWlRcVNvV2VlZ01FU3ZySVBnaTMyVXhNa3B4cFV6OUVMaVRXZjRqTTJWU1ErYTZrVnpuNFZDOEY2UUNpa3Rmdk1aQkdSYjlpVmlNSWZCMHVmQklBcHFZTjByYlJLVDEzbUZYanJsbFFwcG5ONkEzZ0tFNVpIWG9CZFFvcUhJbmZPVWhneG1yU0ZHM3RHaW1kTUY0THkwVXQ4RjFQeXJlT3RHQ2JLMGxCeVo0bi9PYjJ2cS9GeG9zcklVNjFIT1dDckI0NWkxeGNTOEtpNWFGNW1SYWpJN0FHSUtzb0VucUtQeGNDVjh1dG45YWlUWjEvOUN3WFdtdURLMGl1UStORnJualVxZUJUY2tMYVBTYVF4NGh5d0ppNG9PNktGUDNXNzNxVkp5TTNQenI0MmRCdHIvUlorRkdZTVJtbEpQVWdxQkhkRXRBeC9LR3phZzJOeVFBbHI4d09nL0FjYUxVQ2M2bGJzWUk4aFpERnp4OC9jTWhHN291UDIvUXhCUzd3U3MyZHpHZkZ3OFNtZkNQUjRDMzhOMTFWTmpqb0ZQRXdxSFoxWDBUZ1N1K2xPbDJUTFhPUUNsTzdZQjBJcksrSkMvb0l4MkdscDV3UmJOQ0NMTkc3Sng5RVRsZFFzRE1uZ25CY2I4eG1kNlVYZkpCNlJsbjFLZHd3cU9PWHF5L2RxZ2RudEljMzEzMzlnNVB0U2RGTENkWmdET3JTMGJSM0JVcWFsdlpna2FwaEpCNE5kcnlyWUtPWmYzbmI4TVorbmFYdHNZa3N0bHFOV1NMdHlwaEdlN2xwRUFFQkgrdTl2Q3ZGUEluNWlHVzcxRHllRkVVM1B2dERJd0xBRFgza3hlem55RUpwYW9aTExhNklybStubGdheUdrUFIxRHo4MSs4UzlzV1RDalJEemdxMUVHNktUcWdWVnErN2o4RkppSE9FS1U1bWtPRFV3alBya0JaTXAvTW9NV3RiWENQUFlmd1RJTWpmQzNydGhTOWVkanl0b3VGMnN6M3owVVVsVGtRR1hEVlZXUExLalNXc1pOZzVwdlFFNUQvSi9ZQmZNRkQyOENuOG1zR0tHa1FuTURDcWVQbGtrSTF1d3Rtb01JVVhYNkl4VU9VaFA4Y2lGUFhoMXVJdUFHa0RpcjA0QkUrRGFiLzhHc2lqNHg2RzBTaEVWSkNYVHpBelo1eTR3ZlZTQkd2cVEzQmR4MnpqdnRxUEYyc2I4WUV2QWRITHRiTWRjODFRZVNlbngyR3IvVERSUm9xeW1HSGRYUWVEellITUdlUGhyMjZHMGpVbDA3ZlZETDhta3h5S3kreTNUMFlKekM4TzRlWEpOS3liWTBLYVZ1cFYzOVNQV3I5MHlnVjNCN3ZFR0VSVys4MWthVzNzRGJOb05kalo1YytxeXl2QkRRMkhQYm1ROTY4eVZuMk1MK1NPaFZURUNkNjMyNWJmUFV3Vjdld0Erb3VVSHl3RUFTMFBYNExhTGF5MkRlSDFHanNiWVU5RVlJVVM0L09CNEJER1dreWZQTGs2SXY3b2ZVclpwYnlDSkRrSTFoQkpNbGFZM0cwalVCQXlqVkNFVUViZVBrZjRENGhvMWxvYjJOVzd3UUpSM0x3b3Z2c0lRWTVnMnczWlJBWUN3VE5QNzBRK1ZETzJKOWxEbC9BYis1VWR4YjkyODNFMG9PYzQrRS9CSHJxekJIc1Y2b1N0bk1OczlsSzdUVThsRzhheDNoU3hrR2tSQmdZM1FZaXQ3ZUdkYVQ4UGdjUGhqTjZMTDFTb2pBN013RmNhdCs0T3cvMlNXWGFpK25JMEgvWU40b0NqN1FVOUUwczIzZ2lqTTJaOGRiUHptdmpNU00xb1QyT3V2WllpQjdPM3lrSVUxVkVlUWhpQ3V1eWxjVEFQS1RzWTM1VkhnbzFKUEVZaHM3d1NrZzVLRXpDc2k3SmdWa0dFdWhMeEU4Lzc4aFhTYk9FUk9PTVA2VnltNzVrc2NxRjQ2S25NOThLVVgrVWJSTUN6SG9BVXdOU3E3MmpjTCtTam0rQmtVYnlZZ3Y3WXEraUVtTnp0U1Z3VEV6NytBcFhzK1kzQzlxWHNRUW9qTi9tWFFBR1VTcWFlR1VMTTBZaFpwVks2UU1jNGQ0Y3BpeFIySjB5R2E3Nmczdi85QW1FQUVQVUpwcFIvYU1BOERLUDdUVC9KS05Qd01LMlBFTjF2dzNIU2tDVmhCNVRYWk40QVlqd1NTV2JlckJVM0ZoeUlsenBUMmFHUjE4WFZITTY0WDYzVW1SbVpLc1dYMHFaaEsvQmtUaGRyUEtOUVZUd0tzQkpRVG93UERsQnJPZ2pST2dJVUo2OUtkOTlzSTI2Ym1xbEN3VEorTU94ZDMvVEd4Ti9OVjBnYmVNRnpBZDRVVUd6dmUrcWxlU2hMSW5henRjM3ZyQ0FqbWp2MlNRaXN6Q3Y5SGM1ajRqaGxPWWpSTndsdHYrY1FIZWczckdxNUJVcXdCbDR0ZGh0S1VuaTMrNE5aZDFPbUxHdndvd2dnR0VORXJsTTNjdk9MeVJRbDYwUFVOYm85VFJ0RDE5M2liVUZ6V1paUXNKM1Q0bmdjcEl2bFJRcll4aXNoUFlieUYyVENzQ3JJSEpua3R3b3EvaDNra3k2WFRYcnp0M2J1cE8rVnZ6ZGJ3UUNXWWhiRjQwam9HVFdTUC9rYTd6MlNwcXBrWlhJV2xBS2kzZUovMnNkU0xZL0hxV1VjUjBZeEZLN0ROQWR0VENkbVRhMkFVVkMvRGF0dlViNHBCSW9UU3AxMEdISVdwUXRqTVMyRkhuaDg2QXQ4dGtJTTBIL21kVVFYSzJKaG5tZWRzdkRza0tSR0tkVXNFb2xWVW9mWGtYblZGR2ZLbEpXSFBiRS9xdjNUTFlyQmt4TG1VZCtJQWp1Rk9QQUprMytBVUNodEpLOS9nUTlyL05ZR21IVHNFS083RU9OU1VXaU9EODZhL25CZUdLeGV1ZFE0QitOSzFtYVAxeXI3cDMwTHBLWjBzRVRtOURwcWhnNUxrcy9RYjN1U3lEQ3hIWEh4NzlRUDBsRjJJcUpjVy9qNE53N0VLTkNvOExKRDBydllETGdSdUhrbWU4aUtIK2NGTmh0cm55ZlMycDIrZEVMM1NRaXdlU2lRSHdHRkY1WVFOSW5TVG5WeVU4Sk43bDhnQk55elgrSXJFTzZFZFBkZjJZbk9qc1JBNmRuWkcvaHN5TlNxak9VblEvSjVodTQrbVo5SFNFZGRGWDJPZTc0aTkwVVdWOFJXLzFmUTNMSlNEVWU1Y0RBbzJaVHBVMTBTaFRqYi9HeEZUWFUxQnVtN1kydE9KeVZ2aTNzYmRPRDNNS1hrNXM1MHVMVGgxd1VYVXpKL0xMMWpOMzRMclJmVTBpcmNoUS9tMzBjNEpUOC9KY3F4RVdBUWFJOVplSThrRDRxcUtVVnpTSWowa1dGSzhLOU43QWNWVWkzeGxlZ0NuYjBCbC9VTzllN011eDU4TzNxdDVjQmZ0VXB1WXh0bnJWdXk0cXUzTmp2bW9xRXlENXRTcFRFZ2hEdWFnbGlEcVB5SUJHWmJrdExSbTBoSkdvSy9MNjZWTTM4Tk9EMmVyRTN2VHBBVjVicVI2Z3VIcUgzeTJXclpCQUQzVEJNa2ZYVXZ1MUYwSzNrK3U3UVZHeWFxaSt3MktOOWtYVEpoZFhVWXF1dG1NMzRGeCtESnUxbWlEQ0RRZW9JK21DWUNpYTZCRStsY0JiOHV6ZkpHa2pvdEt6eEVmcWZLRkFCUEVFaVYwRlcvYk4rSk5jM3V3SkpielhwRlJRaWlXb2RORTlEcVA2VGwxcDNnYTUxN2d0a3lRVHloZk16MkZicW1JbnQ4Rk4wVGd2ZlJlR1dSdm1CWlB3bnFLaldkWnpraWtUdDhLRkFlTHRndE5oc3pHSm5LWXRGUVpjeEpGd0RLL3dTWTl6Tkk5QWpiL2JheVpML2d6em9vVVRUVGJWTkp0TEF6bmhUVzdHZ04xUm1LQit0RjhCYmNhT3FITmJaUnhRdjZYWHBTcjdINEZrTUREdWVWelV6aEp6a29hNGdSMm13WHIremFTb0hRVFVYTlJ2Vm5ib0VpOWo4SEx5U2NJVFV5QWxjd0hBUkladkNqMk1TMEVqWGtZMkNRV2RaYkxYdVNKRUpNZEI2bUNsOVJ6b3lCdG9XUk1GNEsvUUZEWGQzeUNPdS9DRktkcFRmbEtCWXhVZkZUeTJSb0dQYy9PQTArV3FTcS9ja0IwdE81VTZPV1NYS3BJZjhuZXhXK2tsdXFMU0JWcGs3MnAyQmF1MURLZGlUQU81QXZJVEJNUmRYRmVCY2ZhODIvSkRyRGVvTUx4Y2VTdm16RnBuN044dUdwaVVNbXgvaWs3UWQ3YVhBL1p4U0h3NUttb3lqS3FRckFyUDBFQlY1U2tYT0FFK0lmZ0RORHF0cC83YnZUc21ZYW1GRjRkUTRhcHRka1d6V2VlcThIbUREVnR6UGhLV0VtQ200TWFsY2Fqcm1IZ2ZzUzF5WFdGaVNnS2xPeFhIN1IxazZGQy93QkhpK3l2eUloYk53Mk9jeGVObmIzSk1ueTdBWWhnUjJKaFpsTXJpUkh0dkFkcjFHa0VkN25SS2lyUHhxMjFudWxIUDRFTnBTTFdNT1ZTQUlWd3JFN2tBRitEWEl6RDQ4UnJtT3NkTklsVXdaZndGUmY2aUk5Wm1CYjdNNEpNUHJHTEpKQkJVR3Y2QW9aOXBSRmpRY05FSC8yNzZOOUg2MTJRZGM4MjA3bFJZZFVPMFJKN2dQanA4U2tncTFPWUJTcUVkaVR5ZnNScGVOanJaUHJ6c3p0YXNaQUp6QWJkN3VwaWRXZ0xkTVlMbU85VUtBVWR0WmpuS2toYktxeC80UnJHTXJLM0dwMXlGQ3dsSVBYTTk0RTJrYVM0eFZsaU9hb0llNDJncUY3dEdKUWw1UzJJS0tjM2pyS0w5dWYxSzI0blN6OGRUTDVKbFp1QUluVjZzbkVCM040ZE9TaEJQTjBaVi81WWpraHFzV1dkM2xyQXRRVEhHSnR1amovbkREb2J0ckh0MU90TFROdkFHNmVFTkJKV3lqVTBtWlRaZW5JYklDNDVBVlFHckhMRWZFRGJxOFhLck9YYS9OcW5mYlFUc2kwbVNuM1R0VURVNlR2RFA1QVlZVnUvMWh0YVY4Z25GaiszWGhxUituYmo4dm56dlZpOWNlT1JyRjBBVXdUSFZRRE1pVW40WmVRaWxHRWFPeW1TUTZseHE0cm9MbS9GZEhNS01naHNoZTNLYjlyVzhhT0k1SWVnMWM0cCs0Nk15NExaZHZnNWhhU0ROeEVQMVB2dEEyNWI1T0EvYUVBV2xGcVU2NmUwSXM2YnJCbnhUeWRacmoyWDQ0eVd6ZGd6eDBjQ21yTjk5aEVKUXBoQ2V6cUU1SXpDcFpoMXlNRTdYQTRmSGV1SzJ5OEpKckIweHYzcm54WHdxRzRzN2diL1dFVFZYdUxGaGtIRzYvaTRKREV2VSt6NHFvSnErVUxPSnE2ZVlzSlNvUW53QUhrejhRMndQeVpOVG9KTWtXYjZKdVFIT3hGTlgwRElyTWdGZ1NhaVZzai9CS2JRV3U2TEVneEVwZzJIZm0xRmVPVzZ6K3E5TitzZ0MzR1ExSjhkN1ZWelRORFo4L25CQjJYYno1Z21FVEZzSUllWlR5QXNzMXBuSVJrWm50WHMrWnBBMHRSN0pFYVNCSVprR1EydGhBRC9OaDVyRnNpZE9LREM5dHBUd3FDNEtXRUNieXNNc3JhcGh1QStqOHd0UERYUTRmSEU5YWhvZkRSUEQ1a2toRTVjczRqY1NSakpMWjBUZE1JMUtPTUtQQ0VzRHoyL2VpUXhGNVJubU9KTTRNT3M5K0d6QWViR3FUc2tzU1pxbDhGWHJaWFU2K1hMUnNlc3E0c0tldmFHY2dBK1FRbzFEWWRzbVVhMlJ6ZWs4ZGxaeVRqUklvZjlZNmg5SGtNeUtJczQ2VGl6NW5hdDFTV0NONUpxL0dJMmZkRGtodU0zYzV1c29SZElEUkVRTlNvWHFtWjZpeEMzTGlUNm0zN1p5dkc0a01GSW0wRG1SUDR6cnpSV2ZBT0VFU0dPcXdva3dwMW9DV3Z0ajY3L2JTTHF0cHcrZThlV25WNTNXdTl0ZVpIa210eUp6QVdONHl5eWJPZHgwaDNoSGhZTTB6ZVpMaHRXR0ZoSE9QRnI4NmZhL2g0NWxCeitQbFRUbzFYN1VyRCtGV2VTN3l2L2VraU1EbXFxWTcvU25zN0JYcUd2UXhkU0dYWVU4OHBHNUNoLzFpRWtwOXcycjZySERGbTEydjI2YkZNalBaODZVbGdaZjFoRWJtL01mc1JHTEpUTjRta2VSWEhDRFVteTMyV1dmQngwL2tBeDJmR2pVUTZucVRGQ1hjaU5zb2ZiUVRlTW1KNFhqVTh2WERlanRiZ0ltRFZnbllsRGdUb2hiZFdhY0VYbkpNNTV0OTI0OWUvKzl4SDl0bCt5aVRtUzcwMnRQUWYxYVlqaUpoZlp0aFNMUzJrODRmZXJWc3FINlVTUmIrM25vL3lHQTQ4TkowdjU0ZjBFaFdFd0ZTaVZwbzAyc1IzSmNzZldCRFdwQStKSklzOWNNaEtwU3U4V21DbW50WHJDT3l4eWR6dE1FV2JGSGVBdGtiMWV5d1BOeDV6RndvajFWKzBacEpDaDU4TWU5NW03cURwNVRTVDlxVmc1M2ZjS09WVTRWYmZZMnQyZVBRTC9KbWRQU0RQVnZEZTYvWURyMUVORjluM2tkam4zNEFDL2t5dEdzbDViSFVYUmY4eTNKeXgrcGF6MHZoZ21pSVpqSElSZE5OS1hudHVoaVNWNVUwa3BWRjQxeERMQjQ0R3VMQTV4QiszZWExb1ZVQTJMQjJySktKdDg5dHg1eHJlN3RudEpTaDZGZUI2bWt4UUExaHlpZGtxeFo3QmRiWldvNVVBUW9nRlpkdW0yQUQ5RzB6RFMxUFVvTTFTQUtVK3Y2T1oyekkwS0dUYm96elA1Q09qSFVyR2xTRWFSS1lWdHAybWhSYWFYN0FUOStVREpSN2x3TTRVYU4yZHd4MnNUMnZQaE5oNVF1ZzNUM2JsYzlseGsyaVJheERHM3RVREI5Ri80QUVmcll0THlkTllPd044Qm85U2x5eHFtRjNEZWQrcWxPbFNSKzhUd1hQWkVKcnlJc0IvQ2hJbEovQURyZTVpQWFFZ2UzSUhIRHEzQ1FkdGNqbm1teW5wOE5JNWk5bXFLdnl0WE9pcmRCYWlmNHdVUThyVWxYVDJWUFJxSnh6Wno1SURFd2FXMkxEZmthNDJtbEdibWxSbTBvaEt3RUttZDFuaFJDTzl0N3JwMi9QcGpxRDV4amVPam0ySjVETGdkaWcyL0lxNlNJVjBJeDM5SEZzTGtzK3BETHpORTEyTzJvRVdVZXkva1ZkeEZpdDNCdHY4cExRaFVyOWs0OGsrcjFmWmxBOWF0Q0haTysrSEUyTUdxQ2IwcG1uY3F3SFUxRGswL21aUlN1S3BFQkwzbFdjTkJuN0ZzdHJvNlh6NHpIcFFjQTQrM2xhemV0MThuQ2s5YnMyd1d4blViTnZCRFBkcUNJanFjbGNvZnBReTNUZVltWlhMYmtnUjlQVjg3QWJraGNpbjdhK1Q1NTBRQ0JoWXEzKzhLR29rbzNlTThITTIvencvVVFSQlBkN1RsRk9NWVJzWFBxWmxubUhEaWdnOGNRRnorNkh6anlzbUFseEhDc3U2V2lyTm84WlVJU1NsVWdZZXJYM3YxaVJ3QllUbU1BRkpuVXR2U1YrbElNMkFvandvSDdnbmF3aTBYUFl4QWxLZ2tTcG9rNjVicTNrUGpIbk9Oa3l4c09seWY5bnliVllVRVJDOXB0MGNEUjhZSUZSbmRxcDBzVWh6NnFnSDNRTjYyZUluUU4zWHNvMTRzdmdzSXQ1d3htSnBUTjNURFBFU2orV3BsSzc5OFM5bkVXWHRJdjBXSWlINkxrbHVISmJybnkzY2RiT2U4dExyQncrNXRiWlNTY1hnZG1Ub3pQeWNHV1doQytPTWJ0WXU4anRnTFplL0U3bDNvWjJhUzYweEJMTFF1QjN4OUlIdCtpSDZURitrR0Y5MkdQaGh0VGJoWXRnaWlFYllScktXa0RDTlgwSllVUU5ZZC9FMzZvb0tYbkFUT1MrUGl0cHgvOG40ZFloS1Nhamx2KzBuMWZaVlA2TWZzSFBvMlF4U0tFd0luTDloa3RnRTB1QjNoRGk1UEptaUh4YWNkU1pmQ1BydmRRdTFwclBWMWdibDUvek1FZWphcllYdU9qUmo5a3NrWmJFRHpObHFRVHU3VGxkb25zQ1FtMUdySmE5ZEt1ZHJOOGxSbmhrVStOd0srVXJjVTdzWGRFNmhWV0lBb2doU3lCYlNELzE0andpcjZ0YVNQL3dpZTVuR1pramhpaTNIekpETkppTXhNY1Z2a3BmWGYvRHViU3ZRVzVvU3dCdy91ZzR6SWRCZzBVY1NBS21peXZ5RkZSVlhvMlFmWlFwL25PR3pZZTNzRlJ4anR3b3oxc1FIaGFleVRVZ1UrZFllR3NnY2daaDVHZWw3VVYxRjJJYitKWWZsbHl0NnE1VEEzY2FXSktxQ2lNVW5wT0RvaWRoNnRRMEE1TlNsM3VPcnVkMmgyVE1sb3VjVWJGTVlhcitIVzVWUFk3amUwOFFFNUhsVllDeDF4Vi9TNHpPejNqZHZGVnBHUlNqb2xxUms4Z3hGaWJ0TC9KTXpTOWNvTUdMMWRZRVVmdDIydzF2Z2FjTVZVZkFrVW1DaUhEYmNBMytjcEhnTGZHNFRuZUxNMmZCV2hjbUZhczVOb2ZBZ0Y4bnN0MjRBKzJ0ckVWRWM0aGVLTW1FSHBNbXlrcmFvYWswSGhDSVcrVHBRVXZ5dWFhaE9mRFZBNmMyYnN6UlY5SXpiNXRYUDVydlBUSHZ5L05LWGNOenZTaWYwcElPcEZhQjlFbGpaeERrNXZCS0dXSGVxSU81TVhOd0hnUnZORG9XQ2lRZUNwZzh6ME1GMnVKR3haMFc4OThYWWdNQVk5SFVZMjZZNnRZZGJYTDV5S2dmb1I2NXdobVJuNGh4Y0VnNWZlU0gwdU9XUzE4a0VBa3JDTDdtS1JPcEZxc2tSTVJwYjJhaXZSaDlLT0ZXRHV6WVZvVGVUMnlxaUlQK0tIN2YyQXFsV09KVnpPMnBxR1ZrMHlQbm5RM3RkQU9jL2V5YW1kMDdpSDlJUkUvcE1mdFVOOXduKzdxcnBiSFdxQll0SWtydFVaUDJ6Q28ySjhhM2F6d3k4UmRtbUFQaDdPejROeHl0dVREK3FCc243OC9Gdkp2M3NrUGJyL0pVb1QrcGtVOTFGb2hlaFpxOVdzVzNrdTRGY1BjRDdmTGVyZURmTm1ZRU5pNXI1ZENOZHpmNmpZUFlPeHBGNUMzYlpMZEViY1FzdUFmWXZEWlpOUHlLVWtoemRQRGUzMGNFcFJEL3N6Y3p0NFlGWlBEWjA1Z01OUzZ6cFgrY2FXVU42dWtzZEUwY1FaQ1hmQWkxT3hYUlhJT2VXcTJwd2plaG02Q0VJcXdhWWRwTy95ZGNVclArQ3FwckpVOUVZQVNsdWxLZEFVL1Y5ZTQwbjdLV09uZWtCRDJDZDNmSVhZUjBQekkxNG5GQ3ROeUF3dWZzdDI4d2cvTUNIWThWMFQ1b1djeE9HcGZ4T1hHK1NSMXlkV2grRnhtNG9PaEpvTWFPWWx4dFFNSE03ZmRHTWVlakh3YytyZm9KQlhsLzBtbkVkZ2ovbzk4NWxzZFVSK3cyakVKNzRjWHQvdXdTbEhKUy9ZRkl5WWRva0JVUW80dzhObUtSZ1BJYXZ2UG1Eb2JvRnJUZ1NZQ2tiVDgvV2Z4TG9NTHdobjkwTGhGRUg5WUlNZGRUb1dBclRnYVJPRHFacjNlbUUrUmcyZXZFcmQzVkV2YzhjUUUrTGQwYmJSTVdzanJ1VlZPMGhUVmdlcHM3a2pmcXVmVnFDc1FyRDlSMWtGb1RTVzJZMndQeWtEanhZMUNsekRnWGhsejJ0TldTNXR3VFA3cWxrM0tjMWE4d0lkOVZiTFFUL3pqY2RxM3dxNDA4SHQ0L2N2aUVEMGpGQ2pqa0xwdjNZM1RTSnlxOXF0TFR6b201c2dtZTMra1ZUeTdqU3VoTG5pQXF3QmJPVXJxRmhjM2VHbGx5Q25jdU0ycE5kd2Yza3FTc1c4a0ZGSHpPN0d3eEJJcjRiVzZuZVFYL2xwa0NGaWlOQW8zb1JLSGFWMVFmRXNHSGpMUDZSYkhPUXRkUWppcXpINzdnUm5XRlVwcVNjdWdDeSs1QzVTYVJBWGV3UFlzZjd1emZCWGFsNlFPNGI4NDREK3lVcGI0RGhlUFRseHZhVUYyUGJQRTR2Z0NjaU5MUUhmQTNuc2pKUkNWSjF6dkJ1ZHR2Y2ZaTFYvMmpIV0s2Z0VIM1BhZjhCVk0xNHlWT2xQQzNqYjczeVRaRkIySDdya0lsaUg0U1FvdCtheUlsS2JHS3VhamJCdXhUOTMxaklpaHRlVUZseTVpd2k5bndxaVUyR1hJSkEzVXdmd1BZRjlqaFhnVjRpMFVDTzEwS1VQUndGQWJuTW1nVHZkcUpyTkFEUGpwUjVhMHdFSVNoYjErTmNZOE90NXlMYlIzQ2RTa3dOQ2lSVmVKNUFTQXgxOEg5TkpVR2NKRENZQjc2SWZ1MEovZVJqSENxUnNmcW9nWEMvNEZWdDZhcE5zd3BaQnVHaXg0eUF0ODBYMVF1a3MrZnMwVkNHVEtNaGtwbTJ1L2JDQmNSQXdpUFNkTFJJV0VYQnNER2c0ZVpGenI0U2lyZGJNdEt0US93V3FyU0dIRldlaVE5bk5RMzFQN0dvQlRNdHFrd0xWV25HNEVtMEx1QXhyK3ZTTlZqczVlVDJ1dFNwTjFDeGx0L1FuQ3IxQVBvS2s0Y1NmS1VGMEFDajg0dnQ3elpqL2pJZmFsaGlrUEN5SllDaDl4Uy9YR2ppNndFVjc2UHVkcXUvaU90UGV1ZjFreERNbm1CNlJjWVNtUnNyMk1aVElzd0JVTmNRT093dUR0WHdRWFNjazJHTlU1dVVadDdsQkJDUjhCMzBseUlEbGtBNVl4cDRLbEZQeFhVallnMHdCU1FRR3hQQlM3UktSZ3gyREg2ajlPNkpiQWNWS0JUcWt1NlIvWUllYndVV0VYK2JEY1NtbmJxNWRROVFrVFBJVlI4NG5kUlRIS0xIUXJSQXhmU3JpTXJYNlJwY1prQVZqVFNqbVVmRVUwQVBHVm9YV2FYNjRibTAvNDdTdXNRelQ3bHROTHBzckVYZ2JSdzdtb1FYOGJYdUJWWktMUis3R052S0JKYWRSOGNDZGZnTm1hRjRMNWlyc2pNckdySS9OQjZuNzMrZ25VZmpLMnJJMURMN3lPU2Y3ZDFIaFlJNHFjRGVVVkhlcXNONXo2TTBwNnJqaWYyS0RQMkdiSTU5d0xRY3JzMjNTSlJERk5OWXhpKzJMTmRwQ3FTektqK2pEQmFtR0JVandTMnBBNmErYmtkQjliNVoxUGVzaG0rMjhKRnpMWEtFYkk0T0dOUlZuRDFGcXMyd0hBWEcvSGNvbllzbmNWbE1UM1cwOGZzOWk0dVlXek5xZE8wZ2pzOGNsMHN4czhLWEprM1VYTGszWHhUeGQ2UGdZMjBLakpmQjhlSldRaTFuV0ZNOEc1cUkyVkF3RCtDK1kzUFFCOUIrNSs1RXdVdDRSYmdzYXNWTXBVY0JORW5WSERQdmQrVDBjYnlFdEJiQ01DU2pndnZmUUZFRFk4MUhDWFYxV0R4eGttTGxZTll0Umt3RnhsQ3BEZUUvWHIxQnBoZUFFWFVUY3U0NHBBZm5xb2dsVUs0S2h5ajc0WW5tZUppQmF2b3oyekxlcWlJdXlwcVAyZ0I3My9vNlJ1QUhBbnRXQjJTWU5BSGJWK1dQdXQrTEkyODlYTm5rbUFITGpMNWNURFNhY213MS90MzJ1Sm50WDhOWHloVFFGaFpZSGJvSWFXaUd5bHgweTlFNm43VjZQNGovTGEyN3VHNTQ3YnhMYVUzSU5rWlBvT3I4RW5aRnpBVzFZdnUrOEwzaW1DQWNYdDhDeWx5bG9RTlpSTXZsRFZCKzdXYSs5M3FLcTRlbkNNQ202Wkt5MDg1K0FXSVl5QXNpcDgwNXRadmdPNkdWbWlxNTRmelNTY1JFZmdHRWZ6RDNYK3B4d2JOallvZ0d4cDBuOS9FOFJCc2ZmUkNZUWhtbi9HSjZKKzRpalRyL3FwRUYrT0g5TFd5bTJkNXZrUjdWNCt2VngxVVBHa1JVV2taY3FHK3hsUkNJZ0Uvd0JxaUdaT3k1Q3hEUkx4ZEE3MDd2NkNydDN6MTYwaUpEV09Hc0QzVitIS0VHSi95c08yMmp1Y2t5OXp2RVk1NnZza28xbi9TTGlER09PSGRJeTRIS2p4L0FESnRqNmNLYXBXd2xkc2JoVDlWa2lTeVdiU2FKMXZNNnpOYXUwQWRabjVEU21oWkEzUER6L1lBdksrZ25FRnExTDVqWnlldEl0b29helVoaFEzelhTcWwyRXN5N3dGZzE4L1p3UXh2cGlmWkdUekJ2SXVsYWdtUDhpNWFNYzNmY1Q4Rmw0OE9hMVdTaTFHM0JwR0lpVEZUeVNhSjMwem1DWG1IWnBRQmYzTEdPcnpEZ0ZkTHNCb2tOdTR1aTZLY3BEaHFXdnFrVk5DWWJFalhmZW12N3ZWbXRjY25XVFJtOWhGTG9MM0UvcnIvbGNFbFRpQ1ZEcVNDRHZxZlJqcG9qbGZzcHNFYkRzTEhEcndiMStPcnJwRC9mVjBlRzNTQ1M2czBGUysrcWNkZ3VPT3lEUENoTGdRRVRqQTA3UDNDeS9KWm1wRG5pVTU3VENhVVZwbnJjMWFPQmVhcngwc2JmVWQ5cHNJNytIZGszMnNiYWFBUk5vbG0yaituMjFUNFV3SHRnRHN6U1JCOUtxN29aWEJRaU1rckMyU0JRUU13QXVPM0w3WVFIZGJ5bTBrVUxoQmxSa2FLZE9OdEM0bXZSL3RBd294U0dtRnNzdWprZnNERk94M24zenBBZmtGY1dRVzcyRWJYdjhNZEE3UGN3QjJteS9XL3l0cjlaVDVKdEZPWG40SGl0NjhwNzNONllJR3kzWUhjWXlsUVJQUTdVcmV1cDFPcERSUWZ3STV2M1BhZWRjNGlRNFViZ2QwVDRZdkR3VEc2Sk13M2dZSGJYSXB1MXdacmdnNXJ2RzIwL1hPWUlMQWZCYUxjS1VheWUzT3l2TGp0MHZYQkg2VlpNWThQN0U3K0hDNWcxclZPVC9VM0VBZ3NoUEdZZjRIeER5ejBuZnp5MlVnTGpFazhiNjhzTjkxRko3ckN2YXJTeDdBcFVBL3pJTWFlbWpoSjRpbEFLSkdzNUZhTDRSZFZQQytpU0FlNWFwbDR6Y0RZMVR3dVlzM0tCMnZSWXdseFhkNE1uT0trMDRxTE9LSC9nOVRkbSsvMmNqUnEyWDNYRmZzcHlXNXU2bTJmVVd2YnJJVzNRSVlKbC9RaHp5VUxsWVMyTUE5d2IzZWdWc2kxS1hvV0tOUWpDbnRFaGxhTU9PQ3k5OWFjalZ3S21qUVVOUDFuNFgzUDk2R1V6OXJ6YU5BZjNHM2hVU2hGYUhjOXpGNHZtZ0RsTVYreERhTjdqZk1kWHZXOElocnh2M00zMHBpK0YzeHZvV01kWlB3NVdDWTVtaSt4Y1JyNUErbHRvQXBPL1pydFRJaFR2U3RKWjB5bnlBcjBHVFNFcWovcVRpWkJXYTl0aTh3ME0wc2gxOGdjL09GVSs4YUQzQTRNajJMY2FoYzNPRWZ4bUwwbUp2WU05bktrVzRuMTVQYXRBR2VQRGs1YlkzNG1PRjZkdXNKTlNXWmlHNVZkKzR5eGdGdmFicjZOcUxEMEx0TVhxQzV1WGVVTUNsdGtRVUgxRjFKVGNUU1RzZlEwTjdpMkROVWxXTGI1eXNQQlQ4RTRqQ1IzZXRlZmJINnJnVi8zTUt1bHlMOURySzF2UkJKTjlsUGt1VCs3dkovWi9VbGwwSGcvWTZIWjd0MVJEdkllNjByVmNFaDNMdkIvSVBkaHBTRjloa1BEdFpKQmY3YWlvNjY0bFVVQVNpemtsZldXTXZUcmNDQVRncUxhTS9pc0JLcVRSa0xMUEdDeWpZUUZ0eWxSR3htT0JUZWJwZ2dYZ3ZheG5SeGpzR3pKZkhKS2JLUmVTUGZVdEV1UjFJNk04MURnM09ta2dtN0FVZm15cnVtSzltWEV0eUJvR1NiNmpxcW82ZGdRUTdzTjRTS3Bxd0FJR0JBcGNNNTQvTmdjU2h1dHRIVENuNTdnbmllYWVobmxMc2hkTk4rZy8zVmt1L2dVUWh5aUduRmxpVVFaV1NYelRlRlNvSy94UHNyZmhLeWl3WFVzbHNLUyt1bkwzWWZqV2dGdVNpT3RyYW5JN0lDbk9HV1hYays1VSsxVU9GbnR3QTI3SExrUmdoUmdYSFNsRFJpYmZ0N0haTFpoczZsMzJFM1RKYlNWNjFhNDJxeHZUVDdjV2VaWi9HdldUcDJNOEd0RjlFL0J5R2RTRjJQY2RQbVpub0ZwTzdMWVJlZnNuaTVVMmR1MFl1YnpiSEVQdFAyNUFsREFsZTVwVUptSkRsQUkyd2E5RFFEbW1vQlBablNFSUYvcjVVT29WOXBob2tVTzJUVHpsVGkrWHJyT2lOYmVKMHd2eXRkY0RadGRRNC9CRzVGVFZVRUtDZU51N2VQZnh1NFVicENnM21xWXE5VHJFUGVreGFycEd4NW1kcVFsYU5VaWFabGo5eURZSDhicy9HKytkMzl1UmxnTlJMWDd1UllmY2tYNHNUWDBiNWJuWFRHMkhOR1dpZ0liVEVEUTd5bFk1WnlOV0VwZmNuZUFML1l6bCtpOHk5VFdoQzg2dDZwRXJML2FOTWFEQ1ViWjYzZlVoVWZYNy9hOWdHVUVRcm8rYWdScWdudi85cXY0N2tDdFBMc2ZEWVBuTWRZYzZ5TUdBMllvTTZ5Y1Rlc0RGekxxOUtPRkhsT292c1hwclhuaityakpKdGF6RG5rYWFLQVZYdTVUczcveStwU3hDenREcVZYYTBPSUk3YS8wbGFPemp3WDAxZ3hZNkxDKzZnSWsyVThjbTA5ZTdBSWRxOG9lYU1xUEFOY2pId0Q5WmwydjI2MU1RNVJib2VZejI5SmJaUXBiQWgya21CcHlvWHQwS002Yk9OTWROSmU3Z2I3cmpycVFxNzF0Qmkza0JSSFIzb0VPT21MNmhpRzJ4UE8vSXl4eVBBQUlzK3lrUHg0M3laS2FjV0tjUy9LRUtOVXlDakt6QTlRMHhZUlFqZmd3S0Z1dHhKMHVPWmZ3VXZwY3prTHhPTlYxRDZSK250ZmtKOXFOc1JwckhsdGVuTmxDMCtUdnBDZXA4NmlQaW15VGpzSk0ydWlGMG9QbitaZDhtbTdjdllRQVNMdkFRUTZqT0VjYm13UGFBaDFqVHgxQ3JadUFZTG1Tck45T1JkOWVDMElZTXhNWDd1NnczZE15SjVBcUJVWitDU0I5THlJN2NiYUx2NTZyNUV6eHIvQXU3ZGp0OWdRMWJvZzZMeFREMWlXbXdwbHhnVUZRaEFWclVaS3NqRmc1RDNEejZJMndUT3RxcnA1QnFmbzE1Z281RUZPQTlyMVVBS0x5aUdBaEN2YVl5UjlWNHRXSnJjcHY3M2NRQ2NOUmQwZjQ4UmVpWGtLcW53elIxMzRraVh4aWpwMm90dU9sdWtKZlhEeEcwSlAxT04vMEdyWVllYWtKVlVsY0k3cWgrUW9VaXJoTHpSaGpXTG5ZczRSVHNrZy83L1VITWd0RmpJRE5MZmxxVWVDbXJZbVFkVkM3MTdqQjZrRkpUY3lUK1BvOFQzcWw1VW1IMmQrUXo0Q1JUQSthUEpvSWhQRVRSa3pVVHVDOE9PUmxxOUZlREtDaDVDcEVSRkhVckYzV2U5TmxlWHRMYWlhM0xQaW5CdE1ONWgvTXdYQ21tMFp2OUZFaHQ1Rlpua0lBRzE1elRCL0o1eUQzMXZtc0srL2dwUjliWEhWcWlMMEZVQnlYTnBxQm9OcUdXL0Z0T1Qzd2NtOFN1amVrc3psSmtSb1pMTDhrUkF1MGJBOFhDRVFhaDdUcVhGL0ZOUCtjLzdaWmhQQVMrckxIRWFzS2M4RGVsQVgyM1FWWHlQL2R1WmJsZ3hrWjd3ZXdXNmZXejhNV1NXbmowbUp5Y21GdXBMbzFobWR3T1lEMmd2RnpiRWtoZEtRS044T3ZkSDU0ZUwrNGZ2cU1tTHpHOHl0N09VNlM2RHd3OXN2enNHZDhQb2RETHlQN1FESHdSTk42S2FhQ2ZYVXhzdVd6RzdRdXpCSjRiL0IxYkc4aWF2bWtxWGRwN0JlZVBKWHVFQWI5U0dyM240NmZVZ3pGQVEzTHRjWTB3V3g3bEtrM3JsL0RJbngrS1FvbUlQeHZMeE9YcEU3L2QzYW9UMVd0cDJRY29naSsvTVZYNkUwOWpLc1diQ1hUQkpGV2NkOUo4T3FJcUUyMnVRM2tramZGUUo1SmhiNCtERXZWcy9QUEVzZjVuNERLY2R0TlFDY0xQQTAvbXlBbFFMQUVUUUdlZXdURmhHK2JHRlFkT2UrbG9mV3g5eXpNSDFoUWVXQStZb0hqZGpJN3FPNm1iMnhubFZ6SFFzQkc2R2VGbk1pV3NtVzlVQzl3TkNCS3dlSlhSamEwbFRCZk9OWU1GV3NsODE4ZVY0Q21ubzkzVHNudXJPQ0todCsxczUzN2RVeGdhbUx1b0dKeVQxRGlpSXN1cXRxdUpGV2E1amhTeVZpZlBVZHFoWWpBMnJPUjRaWkxKcy9RN1FuT1hPNE1LdmxrSmhsWHFPVzdnWkVJbVljQzBTNGdxYnBIcEl0bDAvbXo0UEk2RnREdE1vd1VadWtmZW1HVzFLcXlLYVd3b1FtZTl2VHJ6SkVMUmRNMDFMZlFwRWFuNEd6bVZRdXhmL080dlAyd0tYUjhjSy9YelB4bk9rV01QbnVtUHo4RmF2cGVVK3lRSW9JZ25LL05LS0wrKzRIZnBLZURwMG1JMXhqWEIremlBSDFKbWNYeGl2UUNGcUswRjNETTJ0SHFlS3Z1VWNzcXcvVGgxQVlZVmtmM1BWd2J6ZWFpRjFXNjc5VysxaC9OSHZOM245VEtjcFZZbGtqSE43SHZnaXpRUFQ2cTJ0dWFSVENITG9zaFB0RkVmYnJLOGxFSEZNRnhBVEs4eEZ2eVJUWGlxV0ZkbHVod2NlOEpIeUs0REhhNkVvQysvNWw1OHlJaVpUMjI5cjdhbnhSY08yOXpFVmtCZG1JbXdHSFBBUmtXYnhXMUVrSXA2UkJ4NnBrM1BWUGNidzcrdHBTNHNlK1htd2ZFSjlUUXFKUjdvSm55bTRjbU1HUXhtRjIyWlk0WUE4aWlQTFlNa1hDYzdLN2FNdjBZRENMd0U2eG04Q05ROW4rMGlzQVdqWGtsblV3Z0d2UGRWd3dVRFRveHdxeWo5amsxYXpuT0NmR0V4ZThPUGN2WmRXQU8xaU5zYlUvSVVPRHJYU2l5c3NWdzROSVBESUlTY1hqTE5jbEpjSjBjM1gzb2lXQjl1Ry95Vk9sZ2lvT2hmMHVqbHlRK3lXaHpDZzd2UXh2Rk5OS1JsNEpIZmtrL0NtY09ySkFtOWp0R1FwK25CbXA0UmlldVFnRUZEeFNvQTJJOEVZM0tlOVNRaWEvWE9VQWY5d1dTcmx4SVRTVDI4SUdKNFlVMnlVSkNsYldhT1RocWsxYnB4T3E1ZFdOd3VyTytFQk9qWXJwQW83bkJ6U2ZCcmgzdWlzTFBNWmt4K3dESUcrcFdERnVialIrQzlBODFJdkJiWmI1MjJndTdhSWhFcGI0Nm5GcWFZZlJFeUNObzBzem9IVE1KMi9lSmMzV1JOaVAzZGVaQ2xQNFYzU1gyK3d2SFJ3cXVBQnZjdlhsTHE0enU3Y2hyZXhmTGZHemNjVmV2cVlhZ1BvQ0oxNnRScmVDSW4vRVQrYzRPeGJuM2xmQWZxWndCUmFyQmwwUXRrdXBpRFptZWdZQWZIbmJCWUpnZzMxVTNRMVRXcjNBbW8zT1JhVEJmaGFNUnVBVzkzUEd1TU8wZy9VMTFKTzZLSFBKRlduZUhYMHRRbmNTcUZOSDBYZUZHSGpmdUM1djQ0Mnk4ZmFNODBybWVRN2NnWENWVlJFTWxxZlJtV3BNZ2E4cU5NRFhzOEIyRzRCWXhQNG9Kend2YW5PQ2ZVTXVjOHhodDBKOU96VG5Kd2thUm9nalBiTHhkb1RzQm9UMzdmZDJOemJHNTk0c3EzNTNoNXdhcHIyb0NuNTllTEFrTEdXeE5KWTk3aXNzNmw1ekZNM0FjK2R5MDRuZlZucG9ZMnMrbExuTEhySmdDZ2pJZlRzTjA5YUcyUXBZOFdtd0hFanJQcHFmZW9Qa0VQcStDSFhRR0srcWV5cmlyZFhGamZsSG1xNlNaUEJXMTR3bjJGU0ZlNlNMcWJNc3VpQm1GRk0vaUh6Y0d2VGJ0N1VuMm00ZUFpNVhGZzBHbmVLeSsyTHdZQlE4MjFweldDUlNadytZNkFNbkk4bXV4SmFLZkY4SkxLQ1p3dlBnQllObTIrWWRxaWZqbnVtNFZYM1l2V1N3bS9BWXFqUEo3c1VkRnJ4OWsyc3lzd0RNbU5qR0NpMVFpMmdaZDdoMWFNZ3lEbStqT01YY0pzNUxlUHFNK2hHNUtkeWxoVmJvdmJURS9MSHZ2dlI2QXRHa0hZaDBkR0hCQ2g1M1hyYkxCeUxHRXVnclN6Ri9OUHprMExIRkF0S0VWR0JYOTluaHAxR3c2OUo5RE50bzBaWHpSOHd4WHdNSDZxTnZXMDBtVis5RDVTRlc3OXI5Rm16YWtXY2llajdzY3Y0cmxiZTNGVStwN2FxSUg1aytiREdqZ3lJR3ZtUitNVWdoL3EyZDFxa1dZODdXSFNHVFdNOC9ZTlBOYjhUMGduQ2ZKalRVeWsvOFVRUFU0MkFRekMxSlhXR21oNG9hTTZMVmRCVzBjQm41QVI3bHpsWEM2Ukkyd2Q2WW8vUHU4YmdNZmpKbDYzRGcvb05RaGtlbDZFSnNVb2dCVnE4NHBjUndadTRyVFFIRjMyU3NXdVdlM2drYko3QTJTdzc5TXhnd0FWQXpFRjhlT0RQWWJtYWk5NkIyVEdleWVJc0pLYVZUNWt3UlRJUS9XYjhOWkNPTk5VWWdWVEhHaVJSMUVldG9WazRMUmxXQTBuZ1NLd1VneDRnR2tlZ3VpR1N5dlZVR2tpQ1FVdEFIVlhMOVEwNHloVHNENnpmOHBpdGhSQU9JcWxEN2pkYjRXSUpaQ1BrVDRYMnduV1ZMSGVQTjh4eEpjWGpQNHdCZ0JmTGVhTW9PcFdyZTRPMk9OOXBaZ1ZhL0tQVEpyUjN5NFp5L2FFSENmRkRQRUVTZ1kzOGpoV1ZiS013M05rWlhFUVFHbFNhSFcvOGlzZ3dvRkd4SmxjYmpwNDhHMGlXaFl0ei92aEJuenkyNlpOT1c5UUhnSndWSUFKSWxCbUdqL0tIcC9HTnlJSXBnWXN4V0tpMEp3V3czQ2l3cHhBSGh2OG9aYWZIOTR6dDlSNFFCTTFSRzZBUkFxVVR1bmhtTXZRUk5HZG1BelJLLzAxNitBZ1ovcVNWUFFpaGl5a21kdG05TFYwWGtNNVdoWXJudXFWTjVDbjdpSk1IdUdLWWk2eE9TbFJpY0VucSs5R0kvbjBCaWd0N3RENEJKQU53SFVlTjlpM2RzcnVDUVlDczFUcWwyci90WnhKRjFiSGxncno5bkJFTnhPckFRQkVMQTd1dlB5OEtTeTJTaHpTUW9JWHQwQjIwdE4xTlRoK0lNR082UWdmRmFWMGc3eWtFVCtPN21mSmlMeW0za0w5ZzZwTDdYbDVYaWNoN3ZuWTdXTm82RW9RUmdTcTVCa0M4WEhIeWRFYUxhTld0OWVET1cwRy9RSE5Uc3FNbno2NXd0WUpjU2d5N2JuZGRYczFGZkpGVFJ6NGU1b2ZNRGpKZ3A3eDh3UFpDd3RKd2wzcHk2L05BVkNoaXhGSFZPcDN1czNYMUYyY3BzZEtTOThvVFQrQWg5SHRNMk9NUXIwLzc1YlN6L01Fa2JXdE5YSm1YbDZ1M3BuMlo0RnU4ZEZFRkJCL1dmWWJQdUJyZWhkYm1OV0Zta1Vwc3RwS1h6N3UzNkc3ZTZYTmNiTjhTTFoyTTI2bVlsRXREL2hWMEJPSjBYN0dKRjQ4RDJ3NE1xdlFJMVlCdHkvSHBHYmhNSS9uN3dHT2x3c0llR2xWaHNKZGE5cU05SFlaVjlSLytka3pvRzB2KzloWWpUbEtxQVJwajVpZ1N5ZlkyNFN4TGZwWTFpSEJkMndzVGpZdmJlb3BBYnlTUFE3aDdtZ2ZHdXVOL3lsa3FoTnhoKzdabXFWQjNEaHlveFFMZ3lBU1ljWFdiYzl4a3FhMnk0bWRITXl0N0Ewdm5rTFBOTWVGSzlCT25sMktYSjNvcVpoZ0dqS29BcmdFemVsTkRvYUZNL0thNmZzOUhUa2xHVFhRYkF1ZEhjUnVyMmpXSkxwTXpNUlhDcEpjaDFBbnVSLzdmck9YRncwbzJsUDArRUw4bjBkTSt6QkZPcExCcDlmcDdpdlV6RlU1Snp2Q2Q2T200U2hzREVRRGh0akxiSnZOYUpGTGRYVTU4aklWY2lnaVIxMFl5S3g2QnY3Y210N3lWMFlrNy93TFZXTEo3ZXJWWlNCdC9ZaFJwSUtOcUw1ZzNNRjZINklHU1l2bUVwMzM4N1pRdWhzaWlXQ3Y0Y3NwTWwwOGNBTzI1TnRweFVoVytiQVpmVENUVmZ1aHJhSU1Cd3lES0JhcmluRlFYNWFVeUp2SEpIZnVVcXAwWTZnSjVOTUdubTc3R1BTVytZdXpwRGFjOGxGb2IyeVROWThtK2NQcXhNWGk1M3FzNzFhRkRTclVTU2JYWUo0TUFRSHhRM1ZnU3BONm5sV2I2bHY4VG9VcGNuYVpOVnhoaVV5M1RDWXc2ck42SHlqRWFaU0pNRGVkaVFtK3ROYkhQUlZvTDhlM3J0c1dtY0doZTRlVXVBVllIajNyL0VPM2xoSUZ0Y2pxWG93d0VoUWM4dW9HM1gxWFNtZk81andnditMaVBOYlBaV1pjMEhqdG9KSUN4Vld0dHFZU0lPRmdQdk9oTitaZGxrVVE3aWhSSFZ6L0t2UTIveTRKSU9TaCt1N1BoRVl0S3hFZXlUNC9XL0gzd21Na1R2eWZUSWh5YS96VFA0YXBjcFlYNFhBL2ZUbFRWTEV6WWd0WW01MHE3TG1tc2JPR1ZLRXM4Y2ZpMkM3ejJ3MEkxKzJENzlaWmVrbStLaHpoQ2w2bHRSNlAzTlkrajFGV3VxOXk3c21yOGRha0xjc2h0WlpYZDhLejRsWmcvN0F6dlcydnhrVnhNY1hUL0lCc3dwb1hUcFZPVzZTWHcrZkJJbWt6MWVSWHZEOFRBSXZsSXpJcVFweU83RldNekpaZi9JZlpSWjlJMGh1c3NXeVZ3dE5VOVBCRnBHajJuQUZjb1A1Vkg2aVVJZ1l5UkozTDFDMUtGQVhuN0dhYW1sazdVVHY5cmVqS1hRVFRnV0VPaUJlTHZzek1uMGtTeW1EVTFtOGZWRzNiWE5pMVhkMVdiVzdoQjFkMWJDcGNhQk5GaXlnOUNjM3RJVHNYWWwzcUlkTmhqTTR1dXBrOWpIK0NNaFF1ZzNVUnE2MG8rUy9XYlM4NjZzem1uWmcrTVdPSDRRZXBjbVNPVUFuWVIyaExzTnRDVlA2ZEtob1RjcnZKdzM1QlBONi9YcDduTFFlaEZ4MGpQTi9aOW5vVVgzS3M3aG1sbHV0aVJsZjl0aTRvaDltK2N2c3pJbTdDd1RZdVQxbjl6NGFDSWUzNWFjRFQ4RmNkVFNhNVp2L3psWi8xR2Z3RzRrdFMzTkdxcHlOcjJmcXBvdC9vYkUwajYvamhyR3dvLzVLV2xLM0VDNmtpd0hza0tBa3M1a0p3akNmcVB0M3c0Q3BGVEJrTjlvQS9iU0E2VzdPV2FTdzVOT1RSREw3V2V6MmQ4WVJDVnlCb0lXZjlETEVtVFpKL2RUOHVTVFBaRis3SHRhUXFyOEdqTHJpczdyTXFQS3E3djd4WHIySWpHYVNod25kYk05WWhzb3BHdnFMS2tJdjlWM1phTWVqYTl4SmlGOUdUU1NLQ3NoNkZwdTdFa1pPeTRtbHUvRkdSUytZQ0tJMWJFMWFqQXQ3RE9OUzJKTExhaXRhc3RFQmdpN3JWYVJ0c3BRTHhDZUJOUzlMcFBpSnJBYlRiK24zU2dIMG1Yd1J4aVZBMjVKRUUzb2YxeVRXdm5udXFYZ0FEUXZOTUVqWUY3bE44OTlMRFFxbGdFNzJZTkF5T0VVK1d0eWVJV3NpdWRUcVk2cDk2NVh3MXh4QVVKRUNWaHBDTHVNQWtjRm44ZHJwVWF3TTRHNEhkd1BhNG1lNjM2WTg2aDd0emU5eCtFT0lPaUNjdS9ualVFN2M2eEFzTTg2Mi91RHZLaHhYQ3BidmlWQkk2cHJ5NW4xYnBkdFJBdUY3UlZHTEpTUkZDU3NlYlZxQXVkTjhSTUxpcmxQa0kzV1RXbWQ1eVJaekdxd0R1Tk8yNVp2alFMYVh5Z1lleWJmajBQZzFZRWdXMjFzbzR0K2VvKzNRdDh2SGEvaGV0dzY2bktkZUp3ZWlENHkxZ3M0TVRxOVBzY0h2SGl3d2hVamMzZk5ibWJ3dW5nT2d1dnprbzE5dnMwVTF1SGNSMTltT25qU1N3U2tvaWlLeno1N0RyemJPODN5a2NvcGFSNDE2bmN6eEdrL3ZQVTdNVUpra1RLTDdxYWI1MVJlQ3Rac0xFdHc1OVVJVHZZU1hRUzl5eWZzNWY5eEZ0c25PRHpTbG8rV1ljSnQ5VUx4RGdkU1ZSbXpCL2UyYkRMVTg1RGVkRWlPb3NYTEY1TGF5WVdlVlIrcVUza08vT1lTdDRubVhxQkdXMklzNWVncFBMMEUyRlRURDZUN0tRTmhPSGNWOXM5SEMxWlBTL1d0RnJRak1sMGpjdDdsamkwbEZqd1BjUzZic25ielVHdVJrQkFGbWljUXltTjlNMVNSaTFqTkZSVk9VVmRzWjBhNE1KSVNISFc2MkNmM0tHanlpQW12cGZzM0lNYWhqWk52Z002Y20xQWsxS0dydHFLdm40TDg2N1MzUFl2Q3EyNFBvbGZNSXBZMkx1anloZW52VHBDL0k4TUtpRDEzUmUwQmNuR1RDWWU2SjYwMDB2Z21ZdTQyM0dTSnllTHVKZ3cwR3dZdGtsazc5MVEwcXpibkNIR0UyU1BseFVrdGJUbDNIVUg0YzF5ME5CY1paaDVoek9Gd2dzaXdtZUFvemF1TDNIUjR5WEkxRTZtdHI3R1gvbERGMXg0dkFwSU5FaXFWR2crbUYrdmkrR2huYVprMzkwYTdHTjRrVjVNSE9aOE1waE5VSTdoelJ2UkpHNUZBcGZHTThYa0RzTEc5Qldtc0pJRHZ6NEZXQTZUd3I3U3NOQjlkL3ZKak5RbDl3bDM5RWQzcXkxN2FhQkVVc3dXWVhQNi9pTVh5VFRGNWY4NmpXaTk3dCtDdzV0dHIwWjNyMzdaWGQ3emJlcGhTcEJiaGhMbHRoN3Q0d3oreHhDY2pqM3NKdXF4NWVmWjFQZDNxRWRKK3ljcVNvWTBPUVZNNHBUdndEZGYrQm5TWjJVZHVpNlUzVGt4OXdPamZpZWEvSUtBOGxPSERUVmF0ektCWW5JTWF3NWJUMGhMVmVvZER1a3pPUFBDdXJtVjhQNG9PUXZqczhZVGxxbTZkZytETExDRFgzUllpRlhod2hYRllTRnFCZ0VqN1FxRkFFeVh5ZXBmT1VyVmlIY1ROWW1mUDlTVTN1Yng0YlBWM0s3SzhrNTdJQytnaStWN2NJUTE5a0dBdEZ2aEs0Y1NZdDBYSzJWY3oyNDMyNFBoVEF0UGtQWS9VbkwvaERzWDRpY2prc3JtKy9ZK2RlTE8rK0hkSXpPSGpXUVBsTWVZUTBtdWFNQVBDK3pxK2VQd0Y4ODdCYkJKN2lnb1dBMHlZVysyQlF1cVVnZTdWMmRXS2ZWNnAzb0dadkowRGlEcjNKL3JuNHNJWnZpVHNiOXRBSUZBUklWYmxBejNESzFnR1Z3bWswZjRhU1hmaWhWUEIwemhZS3NQb1BtRDZQOWJvWXcraFVaM3FueWdDdmlRTlAxSWdMbnk3RDNZWVFaUWhTbVlta3FLVmhUV1RlQk16TXFMbENVcUlicUN5MnpGZDhYcSsrN3ZQWmVzTy9QY2N0emZ0MWxyZlBxS01IV2pndko3TTIwT2JnVDFyc2wrQUJEVkVVOWdweW9BMEVaUjZpTnZRSWdqT24wVmhZYURZdG5hTjVIZWhLQjZMUDk0MHJINitiMHZPSVBWYnVza25DYkFkNXlodDgyMHMwT2E5VUNwbG1YT2libm15T0N4bVBYam9xS1NYWDBsZWFWWGZ4bVh4S0loaGxIY3dzZU9DYmthRzBwY0lyOFZrOSs2VzNmdDNKM0ozcEhRV2JINXpVblJqSVVXTjY5VzMySVByQzQwZHpjejVOMzJPQ1paMExOM0FUWEVtUjIyZVJpQnpzaEsvNEVDNm1oZzFLdnVHMzlzUDFGZzJBZmN1UVBnd0w0VTRXcmNiVHNSdVIvamZneUdmTlc5eTZCbmJsV2JIMDFWUU15UC9NaDZrckRISUgxR01PM1lyLzl4WXhUQllkRWZXUUhZbG9CLytWUTBmWjFJVEd5eDd3UjY0cnV0VkxuTURNUTBPRlV6TXh0VUNra2l2emQxYUMzRUdCTllPQWVuMU1UbStQczVLSjJmU21wRkZUSHZWQ05wKzhwT203dDZQT0NaY2p1QVRCdWxwWkNaMGw2cTJ0NDJEaEF0VnN6aGVLbGR6eXRldkRJcGpUYm9Da3BEMDVuaW1XdHR3UUFYUzNhQldiSEppTUFvdXNnZHNBYXpGL1pBMWNOaGswaGxvaHVTVXBYalpGUXErWDlPZW1nSWVUQmowcHgyaFBDTVdQUGwxdkFOaGJ0YWp4NzBnd2xWdGVLUlEzVnlmVFdveWFoWWlFUE15MFR6Sk9hMVBFN0dmekl0ZjJ6bmxZdUg5akFFdGtPR2Z1SWp3Y0I4a3BPMmdZb28rVUVIa20wbW9mdGQraHBHWG5VZmJNRVZvYWZndUZ0YWhEU2xqdGVHOUNQVmtsMHRxaGxKTlBqcUR6S01XakVlR1cxQStMbytjcnJNSlNqWmFGUjRLYWZuTEhoL1pEb2kyK2p4eHNTdkxGdGRaazRsaEhvNlp1ZHh0azFLMmlUeGRXZHJBMDlndlhscW9yM3ZzY2FieWV1YVdDTXM4M3l6TWtTYjlsQXAwSWVkaHNDUU1HVjQ1V2JjZnNVSzJKalhwOERLNVNZYWFsbjQvTkNMekpHV0c5OFlLSFhLYnJoUjJjVkNwbmEzSGdwZ3FFci9TVzhETHdPWEhQVUhBRHRBQTBQMGV1Z1k3M1A5Skp1ZEo1dHBCaCt6UnVQU1B1d2dqYU1oWG92MUw0d2J2TCtlNDNFU1p6eFAwN0hqU0lCbWVsaUtWS3g2c0ROb2JtWVhydEszY1lZeUU2TlhtTnlkZEZ4eDdLZnNTYXIzU3RLMEFyRENxK3B2QjlhV0VnZ08rYlBCTlNpVnZ5RVQvZDJZaVczS1haWHkzNDM2Tzc0ZWRqazJPaVIyek5lM09GbmlrSTNpLzJaTHJKeXc4RVlGOFFoUG0vTndhZ0ZXK2lESXE3dEZGODlEMjRUUlNNZzNMTmFPaUZxL1V6d2Fiek1hVWhYcmRTaDh1YnNNQjhmcDZERTVyOG9YREFPNUtNajFSSHVoOU96UjV2c2h6NmV4KzVGYUhlYlZZaDNXVkVEZHF1RU84WmRZWUdMeWFFVmwzZHJ5TWhXNEpMYjgxcWo4NEx3ZTRIRWptUzdaZVA5R0g2Q2ZHeFQvTC9peHVtZExjeGJxVzA4Z0JRRkdPTzJYQTNaSE1ZMURId3NkdUxTcUdiV0V0NXIzSm40ckZqMlI3QXcya0w5M3VaN2c4dG1MRWNtSWk1YmNMaTRuekhzSFBoeG1oWnlXN2ZZSkp5NE84aThlUDJzeVZlUjM4QWNGZjJSQVNHc2NaQzlEYnJpWnJERjI0bXo3VlRjRks5d3VVMUx0WGZReUFva0dSU1hqN3JBdmZhRk1TSDBBR2l0cklmVWNKUTZaK1ltRFRSdnA0d3JmaUFYQ2sxRXdIaGlOc001SUxXbFlqV2pJSHFIa2lPVzdhb1puK3VHUUEzVEdUeGQrZUdOV1JyWDdLazh6WW05Tnh6TkdFMVFkMkxvRVcyMXRwdkw0TVJ2YlVWK1o5TC9ubWIxYUxFbW5GL1M4RWx6WXlXcWkxWHZYZjZoNUhvbmxRWVZib2FhdW4vVDFjV1ZKb3cwMk5td3Vlc2o5TWNoM2lMR3hGcTZadEFHQkRRT0Fva0RmbVJENTJNNmgwMG5POTZub2RJVlM1ZERmeDBodUsrVmI5cGdTd0lMUWgycjdPbVV3QUVYL0ZMbHFZc3Y0ekVNTjlJb3VEV0VkdEMzM0JSWU1aUytLVkoybE41eERJSlpreEhNTURnMktMZWRNNlJmeEdncy94T0pJWktadFJFWEI5aUZtNHZRR0t4eWV6bzlHSGlXM2JpOFVNMURhVHZTTUNHN1BtdWdyaCtYRjZjeUlRbHNEenF5cFg5SjF5bmNVZzRGMFRKQ3JqVStWSDJsTDNiWjdENjNBdHBTMU82NEZOb1dFRXFHczFwNVVuY0x5aFFkRlE5ZE12bXNnOE85ZlAvOWpUM2cwQ0ZybCtEVm1QK09waHVZLzRVVW9KMFR5OGx4SnpVOUlJUUJ1QnVrR1FIVGJzbnhoN1F4TzY2b2FsNW9xSStlUUtnT0hYcTVJQUwzeGU4RFhEdE05U01jc0h3TU1KZmxQdDZJc0dFUVUzbjMreDFoZ3lHQkJEcXRiRVlSTUFFU2lVSjJuNVBjRGh3RnhvRWU5aFJJOGd2ZlpOaXlva1ZsUWpqaFlCNzNvOG9zaURFSDJNQlc2QjVDbmNuOE10WFc5QkNRVkNBaVIvbVI0TnRFS2EvdnRyM1FnazBuVzhsRG5SeUE5MUZFZitiY3NiQ3BqRW11RnNKL1JCcHFwVnc1eWlNZjFXZlhicjVEU21lR0lSejg1dU5VWnhEcERsNTFRbEMzNGswbVYvZXJSUkJYTEYrWmF6bGRIVG1lODIrUlhLUmlrT2JxOC9aMFc3K0twb2QyNzFsQXRlK1Y4czhwUW14SE1ZWHQwK2pzei9GT08waEtjWXJpeHMwaGJhR0JlMVF4WkpBbmRDYmZOODNuZTg5TlpDQ0gzNy9nQUcvcVk5UTZCZlNab0hwdmJPSjdwdGtBS2VOM0p1KzdpcEExMHN4TzZzVko0d2dLa0VoQmU1czBpTExVdHB0cU1NRmtscGUwUDBiRGJoZy9OdGV0OTFzMlF4aStjSFNkR3lqcmpOTEp3a3M4cGgrd0RFdjBkMGRKUG41VTF4L0pUWXZTQjEzRzFCUGxHV1grL1Vnbm1nYmsvb01HTnJtVWx1TmU1ZnlCV3NsaSsrSVNYOHduV0ZuYlUyd3dsRHhPZXIvNkFJU3FYcDMweGVlempRcG14V3g4Sm93RXlpTEI4Tnl5MTd6WmI1Z0JZQTlDb3l3bmlGeGtrdVZ5UkRadlo1VVN3NUZ0K29ESGxiTTBSY0J1Mi9NcXFsQkZTcHE3ZGFMUVVJeG4zcjFNUXJSdnBiR3FrbHJzbElVVm0zci9WTTVKa3l4QTdjb01CMkRadWZ0dS9QUFgxU3BYSTF1dlVqcmtiUGFUR3RLZkNkYUJlRTU2RmFRTUxBVkI0b2Z4b1ExcHduYXB5elBNTmJGQmJvSTAwRnpuQTJtOTlxVGV1MDh2b3YvWlpQRFdpTnlOeXFpMjBpbUNKWGZtVm44bStPMWxrQkFrOEMrb0VzbmUzRjMrMzJOZ2l2dDM4MUVmMHM3bGNXaDV3OGMrY3FDeUlFNEU1bEN0bmpJL2x1cDdOdWVPUnFCMnRycnRNRWgzTGNMOVR4MFJ3RmNiMGUvOW0zRnlqU3NJRTkvWWE4NzNkbUVmYkoyZVhIaW5VdHdaZDd1eEN1VzhtYzFuMlJBbjNEZTExVWl2VG0vSnZYU2RCQzRaMWVrSkNGS3JCNW9MYU5mWlUra2ovUzg4eVhHcWI3N0ZncVlXNUJ2OXZsVmVGTjMrQ0NKQkc4S0pVSzEwVTlNUDZKVkM0VG9RaERPekRLVWpQcmxRbzBQZmRITXkweFRGZlJoVUFkM2VnMUtvdmVSd1IwZEprM1VPbEdVVFNpdWEzeFdmN1NWR0FpeU9aNnBzcUx5cExhcHlQbXBGU2ZQVmIxR20wNjRSY1hnUWxxYm9mUVNGOHE2ZlAvT0VGdHNDTllOU0hnSFI2QnlMV1NaSXM0eGE2UUFPN3h3OCtoTVhNYzVJU20zYUMrU0lUZlA4ZEhPaXlVaTY2aVFPelEyZVhUNXFsclJJdjQrWXhFdlRnV2t6bk5CNWYyVEZvbTdmWW1LUE1zQUhiWDBGTDVLcE1uVGF0bDRRc2l3WHpoVCswOVI1UzlmZHlaN3VRR0pTZ0t6VWpPVDRBcnVnajRSd1BEQkdWeTdSZmJwUmk3bjJ0ekdIazZTZk5VbmFLVEk4OFlETm4wZGVRVUEwRWNBbFBnVk1SVnYyN1RWcWZDZ0FXUGo2MC93ZFNGTStzZEt1UnhlNXQ2WkRGVXQ5V0pmanN1NFM1cWRWNUlDL2VrR09mN0NIZ1ZQOE1CZ3oraThTM2ZQQy8xN05hMFUvYzYzTUp3Qm9HYnRPVitwcklScUs3Q2s5d3lMVG1jelh1QnFOdDVFcVFyejNGVk9ITWJySFh1RlZ0K2JEcnJZbGJwN0VwZTBjdTNiSE96UG9iVDZ3UUI1WW1CNGpGSXBCUldJQ0s5YXpsdnhHaGNwU3Z5WithaUhSQTYwZGRENTlPdTI3VjlEWFh6V2FONnZXS0RHbE5VMzZ5ektpOEdxN1JJMXRiZkY2Q2xna05uU2dUZ0dsYWlWZlphTW9GUkNmU25aR2ZkR01tUXNEQ1ZVWHJ5TklnQk92ck81WDNMeC8yN1pOTjJ2Rkt5QVQxVlI4OFB5YzJyZ2lFVUJqR3JxVXk3WjFoZVgyanc0WEU2eDJQVmdhNWk0Uk51c1JHZkpBbURPa1pEbTAzVXpBaEhPNjZuZWExSkhwOVZDTDB3a2JheUVPWTdDQlc0Q01sbGZuMml0ZFV4T3NZNkhjTEppRnFLS1BDSUJvaFZ2dzdGMlFvTkJ6WFN4TlhJSEc0OXNlSVloak9ZOFJ1d3hjWHJ0eDVmUUJOVERFdG00UENrWmE0bEs0T3JBYnV3Y1VXNnp5RklqNHFnbFNsWnlUT01XdFlSYzR2U2NINTRvMnNDbG9ZZVJtZVV6cFR2NlhISlZZMTV1dFdNOHlaSkQ0Q2tuQTBmcGlCUmVSeGtSa3RIeXpDeVlSSVRLeUdhVHRGb1hmYVNWYjYzbHd6RHgxZzJKR3B4dXpIYWV0M2RUWjYrWWdJbWJMN2NSNGhnS1FpWDBiU2tUYVFtQVRuejNNSUZWZmNuYjJBbHZUZnE0VmpaODluMnkzU09zbEVPR0E3UWtvV3V3ak5pZC92empRRUh2akpNUDJBQTBQdFBlSW9PL0xtZ2s2UXhVRVZ3aWpQU210b0dyaHFrWVJTdUg4TytYWXJSY3laNmc3WDUrVWVScDdVdDI1dTBjOGIwanRLSnczcWc2bXh1U0loL1g3MDVIaVNlMitWcTlJK0t6clpWTFJMdVRIQzI2cHIySU1mMEVCRE1YNERsa3hlRE16K1R5ZjFVZ256NFRHMHdmUEt3dWVCbkI4VENQWFB5RjFuZmtBZWY0elNSYXY5aGhxMDRpamVvcjh0bU9nOG1GTGhjSFpnTEN4OW1MOHZ3RWdaNjZudDBGM1ZMaGhWS29OdSt2MFJtK2JLenhGSkREUlBPNW5DRFB4d0FrQ0czNTJvQ054VGk0eW5jYS9oWXVnMkZvUHF3eDl2RThlQjQzdVJNTVo5RUZvVjNrUEwyOTJId0ZsanVMUVF4bVE5ME5FNmJzcUw4ekQwb0xzTWV0bnZPdVVsdWRmditZUHRmcG5PQkljckRMbkdFMDl2UWh5dnhlUmI3VVBiNFZYZnpIMG5tdXRuaSsvYmZsSk1yS0pMOEhhbTZldk9QU0pUdTMyS2ZHWUhEMGdhWUVuQ2FjQkVHdlRSbW5mNDNOaEg5ZHJLU0lvQXgrUXJNVG1CSGVQQ3RyTU5rdDlXOHlsbFM5ZmMxTU81TXVweWgzYVU3amZNVldOR2t3dmdHR1VJSExWaFdEMGN4bzIrWEJwYnRFNURzajBQZVd4ZlVLa2x6d3h5OGdPMVdhSjZlaFJOc1VqN24zdk1Edlg4KzYxMDJtVUdxd1FYSU1ISjMrWWJ3UTc3M29mTXBTNk1MVHZRUll1SWd6RDRuWUJQaEpmL0dwV2x3bURXRlppbUJYNmdKY3oxQ3VKczJhNWZDaVRyZ0E5eU1teUlyV3R2NVpBOEF4SlJ1cERaeDY5ckxINXVSWll2bDdVcEl1N3pYUE1iL2drbmtkdjRqaFpkanBnSnNMVXNDNFBEa2VzaHhyMW4zZ04xQUx4QUtFTkNHdzdlNVozVlcyd2hjWXFFS3RGYVd6cXEwTWh6MHB0Qy9VcWphUkxGWXM2M2NWc0RsOXlDdUxQM1MvMUU1SkhqK2JmOVdGczZzcUVLQysxN1ZDZlNNOXkzN3pPRU4vQ3ZvUkFxYit3TjBGeVlrMXg4VXZkd3I1VGpVTS9wRzlMZ3NMMVkzTjExQkhwQ1dteXVuT0thWVJ0V2ZILzJoblNGdi9uR3RmZEVONUZQb21FNG9iRTFSOVlPK0d6QXUyR3NVcjNHdEVMeEpHT3NZOHlIMXc3WnlTaktPOHJZR3c5ZDlEQjlhKy9zbmZ3TzdiK25kV2J1MFZRaHVKclVnNC9YNkhQSFpjemd1TVZndmJkblBuMk5WcWltMDRwTUNpQXp5aXUwa3JldERSMWM4SXNIenNlclBFZ0ZaT3NLcTVZUFcyWkJGRkd6Z1VwS0NOQ3A1MERPZDdUZVFPb2dER3JRQU5INGp4UlZobmp2YWZ1dHI4b1I2MUhLaWh0bFNJOEkwUGZreGFVTXVrWVA5N1hVMWRNTnZmbXZpQ3ZEOFpOdjRvNnFZcTF1b3J5eEZRbFRDdnBTeXJrTG9MWDV1V2lzKzljMFJsYTBBNVMvd3EyaUV6STB3ZVA1YUFsVmZPMEZDcFJ2ZEdTdnJjN2VBQzlVQTQ5QVhyZjFzeU1SWFZ5RHJBUnI2SUNOdE5lSTdUMW9iaFhNZllRa1NsQXdMK1ZWcWZKMGV5Rk1mL3dOZ1dwWEFQajQ0SGMvNWNtMnIzT0Zqb29yUXJnU0RCdUlFUXVaMnVpajBtY2lXSVpiUWNPT25xcWhKUjFKTG5TTm5nN0FWY1Y5K2prc3ROcUhES0kxVmZ5ZXlqQXZ4QmhBMXBBVlpsWGhYcHV1N1FWSnROcElDci9aRTA3bXFUWGNuNk9BOEN5K0FhR0xkR3FyeWR4N0oyV1grdU9uS25JV3F6WUhIK2lYL25MUmFBOWZtZjhRTnRicDFLRTlEYXU1aHZUMlNPKzFJeXR0bTRuNk03c2FDbllhaTdtUG1PVUFtVEhIWmx6Zm5EUlFIck1oRFFFTFV6cVA4UkM2eWNvNU4xa29HZzMwdDBFN2tJZ2RlU1hsRDYxampNNnBHTld4a2tBWmlKaHA1MWduN1dtVEdnY0txV2M3T0Q0TGtkWW9xMk56MGFZTm90em50U0wzSGNRd0tMRzkyU0d6MW1GTm5TWHpBZGFjLzI4UzJDdXNSbjV5OVA5VlVGNDR1bm5zOTB1TE00UnFOSGpiWDQ4ZkdYTVRCdmpjWGwvd0hNYWxHQ25OWDF4QU5SVjZoWUdxTGxFRGpxQlBIMVloYURYbVB3M2lqUm9SaDlWS25yRWtXZ0Y1TEJRMGZiSzlHd2FQYXJnaDNNUnZFSkw2cWpuVzcrbG1MdHNqZEpPMEc4N0ZSNzFYd1NTVEVGOXNTWXhURG9WMk0wdC85cEZwWjIxQ3VYNHdER2d2ZDM1YWRodGZSNEcyb2VQSW0rN01iSEVQdHdHRUJMVzIrNFYveHN2TDNEVzR5c1ZlNUNHNHp1YjV5OG4wK2hnZTJ6WmpUMWZuS200MFdlUzZONCt5a0FnYWFjQVJkZmZub0hLaFRXZWwyMUNRZ0Jld24vNUNRR0EwSVlzbHEydlZhVXJ0OWd1N2JzZnhnVEI5YnpRbXJrazRIY29KZU1iRnVXN1Z6TTZJamNzSCtNcDhHcXVaVmRGZG9vMEtHOWplSkQ3Um4rV0hGcEVYaEtRb3pIaG1tZzRBZTFVcStiTGNhUGR6S1RKRkZOUTNxYnBQQUZWSWVzbEVPRnRiMHZ1MFJJRnJVRG9OOHVvUzhXc1JLNG02K2N5dWVoeXNyY3Q5VWZTZVFjMkQ1Nzh3Qzh6T2hHNis5ZkVHaDZ3UFQ4UlpJUlJrUGRBSkV6YWdZS250SmFibzRzMEFyK01hRTRkdzZxdzZVZEZIa0dZQkRDUmhmeWdVNUtmS1lrOFNXOVVnZllMbjk0QjMwTFZ0M0ZObHIvNk96MGFBd0o1eEQ4RGE0dFZvYWtQL0hqemZPYjN4UTVqSk1rc015bDNXdjdCS2Y0ek0yVkJLRXFoeUJFdkt4OC9yaGp3aGVKOFhtQTBYcEhtVy9Fckw3N2tyemhRN0VyaGExeWdmbUw4dWtFMm5GNTJVcEF1MHV0cUMrMTRBaXJrUlYvVlV6eElHLzA1ems3R1lIZXF2MVdDQlljQlk5VTFQQk9YVWJjTlVnT3FwZHdJUHBSMHNabDZFZ003K3hhRExMd0xBVVBwN0RodjluVmJpYWM5aTdoKzFjUUhaZytNVGYwYWhPdVVSdkZyTEV0R1BKUWV2UTBKSjJsaHg0U21PK0huazBxSGRVdlJaenU2eXNPc2JzWWFweUE2a1JyOTBYN2FROUxsdGZ3MVI2N1ZrclRwQTVrV0oyc0U4dXpuVkVEb2lpQzdkayt6WmJRTW5lRVpMTE16SmNyWGRmbDN6OEkwM3FKQU03bENuaTdISDdzWUR2ZlNMU1pFSTlrTmJWc21iSkZHOEh5SWFyK0d3d3FBVE80V28vaVJ5N01IN1VPYTY5cmxSMUxEUjFNRTBnc0NBSmpTcll1eWI5TzRPLzBQaTlFWEhtSHJhZGZhbEJpRDl5VlVESTljVEhDOHV4RHp6ajFtQlNRT1JjWG1HYWZJU0w2dVNUbWM0WjNONGZSQVIwaFFHR21hUVdzNGF6QkQzK0dtVmh2SFFRYzIyc3hCZHNmSk05U1JlRTFzZTcvVWUxY0tUTUl2SjZkMStlL2xsZGRkVzFiUDQ3RTlHNnY3Rzdtc2c4dGczUlJrSm9tRzRKNVR3K3U1K2ZyMnpJV2Z4bjVsYzl5ZmpqbVpOcGtVMUdTamhKSWxkbUdkbjVMRUFnd2Q3MVZzckZ4c3Jld2NxRnVkOVlROEVJVThlRjZ1bDk2YTl4dzNDditRKytWVzhwdzJ4TlNxQzNmMVB6bFd5Y281Qk9TM0ZxeU0vaWpyRkw1RFpMMk5BbHZhSzZIUCtqWWJHR2RsZDZPc1JORldKaVhGS0tjZE54QXpNeWRidkJzVmlvdnZTcjZBT0l6YndSdHZzM1h3V3hOUlZWcncvQTIwOS9WeG5URGRPNjdFREw1M2lnbWNZSlY3bW1odlJZMXRNTzkzendIUWU2ZDBqL0c3Z3FFNzU3Wi9OWHAzNit6bzcxd2dydTIzRXVnL1pFanZFU3NrUmd3S0RxSDdkMklwZlRVODFVWmhjWmw4TFIvdUVBMThWSWtJL1Q3SzlEd212UmJkNnM4M1dVZU41ZFhBYnZScUExYVd0TFZocnNHUXg5RXd3cU83V2ZCOUVmcDNUb1EvZklzcW03QXJrekI1NjZBOVpCODRwV0V0OXFnbzFVVXdLMG9mM1pXZ0lMT3lVc0lDeElCYlJXSllOTVRsRWYyVmQzTnNmVnZ0MWFJR3J5TUJBeDl1d3V3OEQydnRpMlQ1cnB3N0s4Tm0wOGhrUWxLbmgxelpJN0RTSU1RRVU1S283eTVSNmpYQXB0bitVTkNZV3pPZXNXMHdEc0dPdGowZWdwTm9Ha2w3S0pWdlluM3ZiTkJieHZCTEJBT3VYYzlwdGxxTnEvVTJyZnI5T09saWIwVnUzaGVQRVlmWHFCUkJsMGM3NWtPZ0E3M1BKOE1JZEc5N1A1VUp0bkRNbGJudUltSEE4YVVITUFHNzNEU2xjSnhHbEw5Q011YXJqV0ZWQ3lXKzh0UTlqeFRKUWZndE1YTCtjRCtoK210d3ljTjgvNFFvYUIrT2J5ZjJSbjhuTmpFRTVyT08xZjRCcWRpQkE2UE16dmRid1lJOUFRQVZwNEVHTTNCTVB4VFlNV0FwQVM3REhKZmZWcVg4eDUxd3ZFRXVSaHQ0c2h5OUxEQTQveFBOTW0wbzBxN2hBRmd0Z1lieE03OVZqK3NyOFRhSlMrMlNXMGpyZExhLzArZlgyS3gvK2M1dFFMREFzMDhJVHUzbTBGSDNZSXJiWDhUKzcvRmZUZ2xXd2lmNGxvaWpyaGw2TWljQk9xNmMzV1llYUcxc2VHblB4MmMwK2puS2VLU2FWMUdhKzcvMXNHOXBralpxbGFLUmxGWjZvc2pJMlhnTjJzNzcwbmxNSmN1RXBIQ1FHeG02YnRTeEVkbllNZ1RlVGcwRCtnUUZsMjdFRVA2VjNSeU5FYzhmell4ZmRyRkhyaUFoY1RtMm8zVUdHL3NMWWg3MWtlYlk0VDBzKzMxTnA2VUNzU0IrNU5JbFdDOUhyWHpCRFY2UlROK3dQSzNJVkU3RDR1dmNKSHBKaDl3eS9vRG1NcndwNzB5Um8xK3M3RmlveHRGb3l2Y05DVm9hTTBNbjI1ODB1dFI2Ni9xcENKMjByZEhsaU0vMzJaQmpyU0toUnZOb21rVFVVR3lNdndmUEJsck13RmdlM1FWeUcrQXhVZHdianFBMjBYZ3RMTGtNV2RCSmphNWtDdytYc3EzK05YVERJTTJCL0NrNlk0bzN5Q3laazNRd1B1ZVh4eCtGN3VsSVFhaFgwK0RZK2JPTkErQnpScGJvWlJIbnRiVTV3dzR6ckFwdlVSeVl4MmhkMEtxOVFCS3JsM2dxZ3M0Z3M0K01vRTdmaW1aR0pHMTFHbXFEYk5XUzdLeDRML1pVMTc3bDBJQWlDWFVjRllueGRYSnpPUVBzWEI1OEVweXY2WnhoMmlkQjJRczYxdUx6RVpFeUNIb1lYaU5Na291NVA3TGtJNGo1VXJMdElienoyZDJtSlVOeXlGcDJDY0RBamxnRFB4MmYyK2pXcnRsWDE5aC9QTnJxRlFZQjVPWENRYmZhU0psazF0S0QzUFJwYXM0Nm5iVlBOaFBDWVdzMkMwRC94Qm01UGc0T3lZeVNEb0JIaGZhS2hXYlNpa04zV1BGczBhNW9YN3BwTmN4cGNxRjlvMWZWeStlak1WOUVKK3RGeDJFVnpnK0RZTjdET3FGalhHQWZRVHFLMURNY2pkbzJTQkxvNGZRZVZsVSt6cFVHSXdhTE12WDZWYlcyenByd1VScXlwQUlRL1hjS2dFUzJ3bDFVY0VQWUswUEw5S3NacUhuTGxmRzhzdWhzU3gzc0d2MFZESnFGMmM0aG9xcG55TDNPWXI3d1hNWFVONFVaWDJqZlMveElTNCt0TXNidkpiRnFwWUY3MDdPeDlsZnZyVjQ3bEJHZE5qNzR3bHlVNXBJd2YxdExWME8xN2xKVk9lUE5INnltZzBTdDBPNVBMdm5JMjBQRnhSTVUxV1Boa2huMzI3WEdNL09oSVIvTmg1U2lPcjJiVkhhSis0RzZ6cWY5aVg3Vk1WOVhzdUh5a3R4amVxcnpVOE5kN3lHcnZPNWN3RmdlNVVCcVF5K2ZOSnBRU0NiZytyeFFuVlpobzdxSmowR2JoaFhIenB4cHFrMnJrdVZqTXhGUktnNWEwNXI5ME5jdkpEN1BmQzhGT1hCNDFlbGxjWHJxSHRRQ1kyV2FOdzBEQ1lUbTZnYUJjMmRHL3Zodlp1YmJzTTl2S3JNRlltajhqdlVQc1RzaWJvM3ZQdUppbFIxV1IvZ2VteDA3RWE0R3ZwRHVnalVhbWFmRjNEaXZSYmlqUWtNaENzYXpacFVsMDk4eEs4SWNYdlpZVWNEYWdITk9iNWJvWk5nalI5RjMzdmtmNU1YRXlzM1hsNmJrRFZmZlRUWk1FNTVrRmROTmt1VkZLRUlEdE1PSWZjY01wb1J2dWxTTDJ3Z3hzekVlUFBqMDNUVm0rNVlzTEp2M2FvUm9FUHVVUEZ3RFl3ZXNkS0JSZ0FXZnp6T01lbUJYWlBiVGdkMzdhdlpjM05KZjNKWGEzK0FpbkFiZjl6eVhvbmt0UkxGZU9hYlUxT3dnZlJ3ZjJnN09wOHlPSVZVVXFXWFI3RkNWaFBWZ1RQN2UzUXJtMUIzd3NxZGJBTzE5bHFyb3Z5dkxVYndGVkJnbHhZeXFObHlVNlFQT3VnTm5MUHg0dFA3bUtnN1RJVjZFd293MS85UHZFVjhTSlkwREZBWVJ3cnhMdDVYSUZmYVZQQ01GWFMyZDI5SkVGbWhhdFgyOFpjZjRGSWErTk1HRkQydGk1c0J0aGExYjFJVlBmN3ZDYkZ5c2hWcWpuTElRMmwzUERMVmI1WFpadkpyQ0h4TmVFODZuWkhCSTZFS2EvTEFPS1VkWkRCZnU0ZHJpM0lBQWo4a0ZBak9kZkdPWHNZZkxybk5qSE9SeGVzcnpDekplRUxnUGhOSURvSkZSSkJHWkRoRmdJT2VtVnNma2QycENhR0xJUThQT1NpMnczZFprazlLallIZytDbTVxMFRwZUIrZUorU3EwbTYya01JekgyTXVTLzhvZ1NtRmdTMUdSSHdqNHhabkJYNnZUdG92eXVDbEpRNXV5c1hHVGQxWFBJSHoyZ3dnK2s1TTRCTVVLYWc5ekNtUWdhYkU5TTFxVExZM0w0Ym9MY0U2K1JXWmpXbnZDR2Y5aFpmRmlZSmRDTTRGMGZUNlUvQitHbHRWaDE2NHhWTlZLRDFCUEpmRWM1SGRsY2xPNzFEZnM5aXJKSTRQdCtaNnpaU1NpY053L1dXRTlScWJ5Z2o3MXdqWnkzVldoOURVS1ZwMnZnQWt5K0FhRjR6NUNiWmxwbGZXRUhoUkhsQmFCWkQ5Q2lBYWFzVW00ZUVUa1U0QUdiYXhwYlBlc1FRV0RKT3VCdVN1S0Fuck1tUU9Ga1YycUVsNm1KYngrSHZpSzRXaTcyZDQ4L1ZJMFdHamlGM1FieEQyTVcydDlYc1BlTlFqbW50cnhhcVJEdStVb3ZGS0tWRm1rTHdpZy9McXhOanMvaVB0T21ZbkpSY0ZHREV2aUpYK2dYQXE4bVVCVFhReXhleDRrcHdGMFoyMlhxSFJQSUhXWWZvbXQ1aVBGUnE0aVlRMjZwOFBVeFJPM21XOU9ZaWY4R0lSQ296aFhOMjFRTDUwWHI1UkRadVFRTW9tMnhsS0R4OFFhYWd1NmoxUjZQbk1Vd0owZ2lydWZvTDk3SHhRZ1ZkTGU4d1lkamVmdjIveTN3d0NDU2o2Q0E1aEljalJZTnNvd1AxRXZUbTBQS21BZit4amtlTXVYcG9sVzRKUXNDcFVWRW1tZnJXSlc4OTB1cnh6YW5jYU1PbWxPRlJRZmNuSXlrUDh4NkpINlRqYWM0NUg5SEdJbHpWUzcybDlZUVRRSnZQcWltTERMUXZkYzdmNUQ4VFBrS2J4bWlsNGtwRGt0QnMwSyt1WHNMcWdaU29QbWsyUWp4ZUJXb2tqcnVDdXQ0WDVIUTRYVXlseHZ3WHN2R2k3TG4zZ3pib0g2NEJoQVVPbXNoZTNmc2VSWGdlM0t2K3dzcE4xN21zWVVDdlBXYUo5cVF6bSttN3MxdjNRMmwrUzlnMXcvL0lSSnozNkJyZ1JjenZONkpXNE8yeXAxcDJxQVZ3c1doNG43d3R3SlBWdnAvRjJsSlNNOWVzOFlxRFlXMFNGRU9mTmZJNjBoVDZoWVg4TnlvVUZOSjZoY1k1R3VGNDZPMGFBMnNieTF4VmtVbmRhUGFhUE9rUjVZb21RWXVCNzUxSXdZY2tEd3FQcmoyRDhYSndBM3AvbVBIR2luN1FJdHIwakFybUJuVXplQllNcS9NRlJwQVMyM0hJakZCeWdMQUF6dU1HNnlWTVcxeXJPZ216dk5zdi9oejMwM3hjb0MrTXNxa3dGWFB5a3ZIOVZUMVVBMGVXNk1LK1lkQmNvYXZndTJnYmMwZlRIZ0dmTmx3MC9MNXMyWVZmZGdaZExNT2dlZnk3cTFRbEVCeDdYN2JrMnFTenhNRjlrMWtDbzA1eStYNXc1eXFob0xoTHhvWjRuZnExRm13TlZUOVA4VkhBS3c2c1J4TlpYUklKVlk4czdMc0J4Mk80UW9SKzRkV1h0cmdiUzNlZnVxQ09zcE8wTlFZVUtHL1dsVXRtdU05WUp2VzhpOFhWTENYc0dUSk54OWl2VG5pYWl5UW5jemlSSmpxRS80aTI3bjFvdDh0aXV0VmJNNXhVODZFNzlmVFZabHQxUmFjNWRiakl2N0p5RU9xOENaVHlpaWJEdEJBWVQzOExucTZHQ2lPcDd6OHpxTmFCeWphYUhzaVp2dUZXb0tVMG9kTDJVVGY1Zk5TaEpSaU1BQlJTUENjcmxnK1N4WlFNR0h6NS9GbEJ5VlFqNFArR3RvckMySjFQUVV0NGwvY2FoQ2RNQTVuR3YxcUNEd2tLTUNCWU5qejN3WTlBbEU3TS84OUJUZDF1R3ZqUlM4WlJSNDN0NjZOWnQ1Q0t5dFc1T29pMkhOZHpPN0JCM1VCWmI3cG0ydGpUbGZMemM1TDE0M21LZlE2S1h3b3RYU25BWnhuYnJLeWVGc2JqNU1yQ3NkZHBSWEpHVjl4bndiL1V3T0JxU0QwZDJ3VHZna3o5V3VGZDRQcmJPcGluVDlJSFBjMjh2S3NLejhHS3M2cEF2SHhaMTdvSW1ld1hjT1NobU1uYVliaHJuZ1haYlk4bUlZa3g2ZVA3bGZ3Z215WmVvYlJVUVVlWkZuc2o0TysrK3plelRVVFd4TkZqWFhUczZmRm85NHBhT3BuQUJOUkxUK3RKKzFkQkltTXhUUW5LSVBwUnRQK1NIcDZDSXZOdDBSQkRzYWdtZFhJRFM1RHU1L2FNMU1ITVNLNDBtdklKTDVQb0RUZlAvU3hYOXp3Z29uajhyQWsyU3ZzWVdXMjZiZnp0VzVWL1FycXhySG1kcUJNSVlObi9FY0U4WjU3OTJTbG5mcFlQREFWelVxVDlxYmNZcXJXaGt3YURKbGp6enl2TUZ3eWJUSVJzVmRzbUdtS2ZKZW9xUmtVMWRzWDRSYlUrd2lsRjBRS01rRWdLdldZR2VGc0lTcjhGYnA2WkhiVTBTRXBITlMrVGIxOUV2MWNBWndpeC9Dc3p3L1BaMjhwVmd6SzQwSHYrb3NVbEJGTFhUT2Ira1ZXalZVUDM4UHZvZGdUUjg3REpmZzArOHJtd0JOMUxhak05TVpvRmZlZGp1djJ4cm5rZUtHbWExMTQ4WWpTSW1BWi9mRmdvZmEwb3pLM0xnaE1yRkl4VGxuNzJ5MEZMczNxV052VHdyZ2xIcFM5Ylp1RGlzZExuY2lYTW1zSFNtdjFmanhzdWxnc1VjVTdLUDVxVFBCZHJmSW41TmNldUlDcWxCMzNYTU1lVmNWYWVyVkFTZ3lZNHpIaVpMc2loVlVEQ0wxeTA0Z1htSi9XMVlJWVZnUUlIQkxpdUMrdnlRUkh3TkVwMGV3OHd6M0tPV3pBMmhrM2pzdTdDcTdrSXVRSjF3MEpvRVdqdnJmT2pEcDVyK0Z1eno4eUlQTWZ5eXlrV1RIR0pZY2JuM1M2eWtYek8remdVd0hQN0dBKzBMVWlKUlVsWWwwUUxKOXZmNlFYcU1DRi8wdU5GTFNNOFliTWxScUxrWS91QjkveEd5bEUzWjhJZGxtMUFoRlVuK0M0WDRmMmV2OGY2SXBjVGIwQ2l2bXlFVXBFVVNRdHRSVzNHdWN2a2pVMm56NXROa0ZVa0lhcktvaHpZVXJneFptZTdZTjNFUDlZWE1GbHY5SERKWldzRjFEK1Vzemo0SHM4T3M5WjdDNHlXWVFKdUtCZjRwL3hCMEdFNUU0UndUOFJNMktxYzdtYkgvc2VKNU1kQlMvek9XWGcvQ1N3R09zSi8zbVFXR3Y1cVphSktTdDZmdlBMdG9RNUZkMDJCNnpJdkszYVdDRW9ZelRYdzZqeGUxbzhzNFUrWEtsTFJzblYzaktaeVh0N1dFTHFEbWFnYzJyY3NGTldJVXZ2MVBoVSt6OVFKdzZDS3lmRGJ2bm5vTW1Xa3F5V2lhcVUrcWU1VkplckFOUnBlekdZd2RtRVAvNzJ1TWJkZkV2VGNSMGpwcCtuUXFzSWxFc05Ga1oxZStZUmx3MGg0TW93a1BVY2Q2aTdEV3B2cHhmUXRRY3AzNm5raStaNjltaVYwK09vektseDJ3K2F6eUZ6V1pxY1NKM3BRNnB2eUtJanFVN3JOM0VVbGdPbnZUOFZEbG5hZk85MWg5S0hET1AzSmE2cU8vNEZwcmttbFU0cVFHaDVNRGVkUGYwL2o3Z0lQTFNzQlFCVG1XMDJLZkUvYXBrMU1GaW9sKzAvS1BCZTNDdGwrMWxqWk1YVWtGaTJ6QklLTzBCUVpsdXp5REdvY2lhS3M5Z2FCUGkxUktyMzVZZlZZazlWT0Z5RnozVVd2Vis3dmt3U3J3dEx6M1p1emFZY3p0UTNUL1dlTW8wcjFlMFRMMG9relEwS2JGRzZ5Y202eHlrb1drSGJHL0Q3UDlxeXpsRXpaQ0RkUFdROWVyaXlNdXpzbHZVOXNRektZOUZjR2RoMVBOWkowOEZmZm5MN2VIYlc5RjBwM0MvZEVreDNZdUh1TXMrM002UllwbjJzOGFQUFFjZ2YvQkV6QkJIRWJUMWdPRCtDalNzVWU1em5tU2w0WCtxRGdMa3pxSytDTzhvUWpGVGw0UWpTeStCbnVVb0F5ZEFFbHRQQkovQ1JsQ1NYZkp1NlVOV1RLRHhsVlZoUGMwKzdXZ0h5RWZpc2hpcGNqbXFpeEJUQzVyWTV0M2I2RlpqK3hsL2ZHRkVWeFYrZFRlcWViNkE4bFVveGlnaXR5QWk2KzNzZ2pJUHNha0VDS1A5RDVkeTVmd0xkVEJiZ3hrazVzNHJCVVhRekNRSWl4SjcxdE9YVjc0ejU0Q096clUzaVloK2lxYllGOFZ0eStDYzlDOWJ4OGgxTEY0Yy9RYTNLN0J4YXczMU02aVFjbTY0N0xSUUpnUVMvejFuM2dBWGQ0OFNQa3dSaEhjVHJiMkVTN3lFWXRTZWhpekN4blFCRHp3aTdiSHp2bFpaVXFiOWFYbk5UeC94VVdyRW15K09yN1JmVWRMcjV5RUxyTkE3KzVKNW8wTFZUS0xtZTFRR1E1K24yM0MxS2ZZM3dDTS96VFlhQUdGV0ptOCtZU0hPaEFWVksxOW1EUTNCT1hCVWpTTHJDNFVVODRkRW1ZVTRXRm5WTE5oRFExL2dWUDl4YjJXa0ViS1NnM0xmNnpqTDFoRlhaSU5vclNZN1EvbUp2Mmh1R3AzQlFack1WazJPbFphSWRqTVdEMnRBY0F2TW44Qmt6MHZ2N2VJeG5iVEV4ZksxUjRYRTJVVm9UdTd1b1dvRTdpRjVvMXJydThnV3NyZVo5dVN0WndURGxnSTFRcWVuZEFOU3lPb05BMzF1SitpelZWOTVpZEQ2YTE5TCtYeExiTmw5dnVtWklGekVHb1U1MXdkRVZmdWJOYUw4aTJUUlJ0SDZwUEJra3lhdkJZZFdMQkFPSmdtVDZodjc4QTlrMmVBWkN6S3VPOVNqSFA1bGhNTElkZWNyN2x3WUhHcUMxS3dzaUxydlFPN0srWmdIVytEejZzRjY0bER2VlZIR0cvMkVYY0ZRRmQzRDM0RXpURDFSbGVCaUxlMnFzVlJueGZSLzhmS0lLNVVRVTlENGUreE1oYllsR3l0TDFBbmZmWXE2TFh6aWdGY3ZqalZ6S0h2QUxObVQwY0RabXdkcm00R0xEQzJ5eVphMlI5RTd6TW00M2Q3Tzk2Njl1V2RDZmhTWDZGSFh2bElvZEVvOStmOWM1NDdqVFFaNEtQc1d1VGppV20yUHFXRE9DT2RVK0VxS1V5Z01jVU9oOWNrT296K0xpWnZVZ1pxWXpLdHV5MnE2OGM2Q3MxeW01NjFIaGZWMHBXYkM2Rm42bnZOaVpTS0NCOUFCUHo4SHJiSHdwWldWR1hUNXh6UjhxUDNFNFBVZWF2UElVU0VSdVloNHg0a3BkTEttSGduL2pNWm90TXRiejRMWDgvVWJibDNaODFxMjZhb1NMaEFsVGJUckxHQUJ0UHBVckxHRkN1Yk5pMHFQc1hZQS8rWXZVUXFCRG9DU1FWU0JjWDVNeGNXeld0V013NEhnTkZadGMxSG1mZkdsU1BpaHgyNUJmQXpocVBJM1NieFd0bTRuQ21kZC8vQzZFTEI0MXI2VXNCK2YycVNFSDYwT2lTSFZ1eFhXZTMxZGRlZUR2eFkzQSttbmkzUzYwSTM2NmQxMTRsUW1aaytFS3Bra2FCTXhyL09ERzF5MVpMekU1YWF4ZVJleTI5cVBuVzNHWHEvaXlnWDFxbzVXbkVuNUJZcDJFdWdkM0UxU0NBZDVIK203S3VmSFRLdnkyZW1QVTdTR3RjYWVLc1NPTmxCc2h3ZHpTaFhUTDluUnpFcFMwRVRyZlZhY0l4RUc3TUhPV2FkY2RSai92SWlJSFJMeEJzTnlFejluekRqQzdqa3FPc3NudlVQeUVWRVFBNXR5eTBlcEE2T21VTTB1NlVrRHFBVHF6WVl6SHEwSmt2cXhjYVhiYUQ0cHRBUk1ubndjazg4ajY5NWJOUE0va0RQRkFKSXdjYWpubWtzTmVDS25iQ3d0MG5wck0vUGtaZStxb0cwekxoaW5zT0RYcUs3dVBxcS9LMXkzeUxJdVhCLzh2SUZZWTJlelJDZ1JoS3IzZy9ZQitoWHJqQlNwVjJTUGUxYmZjd0o0WnpzenphaWtoZFluVTVEVitxZlFqR1paYVdIY1grYkJmMVlQeVI2RkEzbStRUjF2N243TjYzNjlVNDVoMnlDSmhyay9Dbzd1WGdkcERpWE9DTzZnd0wwYmlLUk1mejZnWWxDaFVPQS9jZDM4T2ZIOWRzbkNITkV6aFR6ZDYyeGkrNWJKd1AvS0ErWStSTVNUR3pmR0ZjWmRtR1B6dXkwM055S3ByK0hndmdXbmFvRFdCQjVUck1zYk9HRUtxaVd1MVFZSi9ZcGlRUWNHTE1vekpQdVFxTzJMNWE3Y1FOWWQwTHVUbFBGM1BMaGFVNTBhMFhUV2ZVTDFCOHIwbjczRHpmT2NmUW9ZR25YczNYTEhEK1crcjI1M0ttLzE1MnVTeTFjZlF1MUs3a0M5RUZ4OTNUbkZweEhUdzZWNHQydmxENlZ2WHIvYjJqSCtXRytjRVQwUVVjeTg2dHNoZk5naXdsZ2xGQThTUU9HRXRyTklvbDc2VTFVVmRhWFFNMXJiemM4YVVpbFVKd3dhN0tZRCtCWDVablMrUm1CQ1UzQlVyTTVhQzdGcXFWbjZtYlNGVDAwU2U4NEkreG5zUGFwNWlYY1RuSWVEYTB3NzhLQUtMcDNOZzhTemkzeXFUdlZiVEc1ZU1FcG5OZHhOQnlqSk1iZmsweWEyOERaQ3BmV3BaUVlZN0JJRDNXN3ZDS20wZWV3ZXJkVG1Ha2EzR21wQnA2WHJxVGNCWVY3YVpVb1ZyMytzOXdKeGUvcXJHcldxVEJHZ0xtRFQ0anhpWTdvUWloWmV0VkJsVER5cmpQR0hCQUJFQWh5S1B5YmNRcXM3OHhjRm0wMGVnZ1BUMndLdENrME9QZFlFd1JLVE5ZdENRbG9UL2Zzaiswcm42RkpGTGFEZGFCV0Erck43Qk81RVZwWUpDN2lvdWxxcjRvWWNDK3hmdGRQQTdzcWxjWmpxMXY2cy9Zcm94ekgvK3QraTVOUVVvd2l3UlFjWU9zaXIwbmdlU3FVemEvcXk3ZWV3UjdSNDF2UGNpV3BZcEdsN1Z2V1ZoUmJqd3RmOVRzTGhvNTQzYWdTT0JRWjN1MFdXQXNoQ3YvclV6QWwvckl3VElteGhvVDRicktPQUtMVGhTdUd2a0ljMkdTY2NRMFZOd1pRSytXNFdHUlpGTC9UVE91UEVrRXFDdlYySkh4aGhtR3o4SmtyRUk4dEZSVlBqeHZjTW9Qc3I3aWZPWGZKc2tVYlB3bFpvMDA1RnBLOWxZWVdYTlUvTSt6b0V5bmNaT3VkN2ZubG1KMnp6cit0ejNwVWFqcUg5cS92SUpGYTVCb3I4N0poM1JybnBVRHFRaGZNRGtWZlA3TDlvNjExcG43YklvZXBYVDMwT1huZTVQNDRsT1p6Z2VCb3Y4Um1tYldPaTdQczN4MFpzZ05QU0VsVzU5Nk13MVFVMEtXTWhtSXo3SmNqc0NGTWpHWjYydGhBWTRJQWRlK1gvN093TEl4U2lsNERES084SVlUQlVOTm1NR0JFdXdhblFKQWJQb2RkSTlFTHA5NGtIVldYLzExem92MWZvT3pTa29yZFAyb0dLMTBaL29DOThJTjQvWi9rWk1aaWlpMXVGNXh3T21GMDdOR1ZxUkxNT1YvUTVJNFlaT0wwSGNuMXpmSWRFWDdSMTZqeERENGZwUEU4Q2t0UVVDNzB6UE45L3k0MzNmdXpHb1phQnFvSW9SWVpWa1JrTlJvNm9aUFhyL2hLTVRlMUptL2g3Q1lyVk5NWWY5bU0rcjl2T1BnVEc3ZjZvTU5FUVUxbzJ4YzR4R0dpWW1sVXZDRzJyU2dBYm1JMVF0U2I0OXpPdGZoU1N0NEJFbWFxbWo2ZStaY0ZsbjZjK1FFd01rYU5OdFlldnFVVURXYjA3aU5GeDhsTFpQS2lNYmhrMElqYm1YSTlQejlXZTJaN1ZUQzN0QlU2cVg2RU9IWmxZQnJsWlViNDZaUHAvRnZ5VzlXTmVkUGkwdlcxSEVPbi9VN0JSMWZ2NFhlcnZjWVg5akdONDk4TThKZ3MyTVIwYUtsY3ByanlCZm5lWmU1RWh1UmZnSC93ejZ1VnBMZFpwSUpRYVpNRkxnR1A3Y211aVgzUkFmTGFCRTJTdEFydWxZdkxjUDI3RWFRdWNWQ2NqckxZTzdhbGtiTVZVTEVGWW1qZUlDdFRRWnc1S2hCVkJQdlo4N1NVZjhoNjNmRHlZcHJ6K25OaERadk8wcmlLU2MvM2RLYlhOTmQzZG90MXdxdEFldjhyNmVDZnh5VDJHU0pmOGUySjNHL1BLYzFqRUhWRHpDT2E2b0h2UVBZZmdxelBseFkwTEMxODhPVEFvU0pDRmUzejN5amJreXp1SFZaQUtseTltODJWVWU3QXVuMlhydmUzYkFXY0dxNTBIZzBEeklpemZzSHNvYWYxZHpsYVJGNGdjbFA4b1BpeldNNkJQYXp4MTIvcjlIR2JpdFVoSnp0WldEVEpDcUZRWjhPWEVadUhXWlN0MU95aGNhdmg3bFZqb2tyblBqcVFURUczeTFSWW54QWlqeUF6dWdYN09hV1NDRXZNRTRSK0toVVdFTnNSc2FWK1N1ZVoyVHhqSGRVakJrYmdaVXNsNWFoV1JLdmtiVEFtMjhoMTVyUFBwTVEwZTdZVHFIN2JvcUNMVFRtb1dpWi9aYk9mUlF2azlDQ29ZM3BIM0NDRFFEakE5L0pwbWNML0h3MXI5cmpQQitNYmJkdlU2Y2s5T1k4TVZCM0FvNk1iSmRvNjhybkEzTWo2UHhzNXBUYkpYRjZPUmFMWDhrQ1FmU3FicEcycm9MUm9RNmF1eEdONHdjWnRlNmdEUFpyVHRXengvL1AxWVdpUG0yTWdVUlA4akQxaHc2S0hhR2pNc1JjTGVYOGV3ckFWZmxGS2F1azl5QXFuQ28vZU5Cem1Sc00xdUNqYkJlZVhmaUNyaHpLdjJ5SHRtR05aRlhzMGxCZU5pb1Q5Wkw3SzQ1a0tmOXlDNzQ0bnJ6U28wWk01czExVUt0S240aFhRZ0hUZlpNZmhLN1JiV1lqYVRVdk9LT3VwakxOdlhsWW1QTDFUNjNENjJJakh3bHUyOUdUWHVBUkxYak1jbU5TQjNoQXovOTRzMExicjdhcHNrYnBUdzlwTFl5TEFKOWNOcFJKY2Jwak9kUlJUaHMzd204VndadmZUNXkyRnJLVkNvZTdleWJZamVkc3krL3NJa2F2ZG55SVQwUTh4V0xnNTdvUUV5VDRvS2NnUEVLc3RXenJTMWpoNjdEUlplR2VmSjJiQTFkNHNmeUVmU2dOTHMxaWRTZ1Q3UWJSZDEveVY5WXVieWlhUDVNRVNaaW4xVlk3cTh5eFhQWjBtNGxXNTdMWWZxUnVRZmZId3YvTFBQVTRkd2JlTlIxbFNKYjRkVjh2YTI1ZHlqYmFJTmp2bHFWQys0bTVVaVpZT0VlWDVjMko1VjROd1VOS1RxUFJqU2tod2IwQWpaMjNHYmd6bk5yTVRDeE15K2Y4UnZ0TDU4TzNLdXZDNW0rUkNtU040UVVtZVN4bld0dkRLb0ViaVFxWHZsN1g0b09wb3UrNFFKRDFjekpKakI4SUNpQjRIUjRVaXM1b2d1NlozSmo1eDNMM2E0eGZNY1hwM1Jldm5hOWRXdGdKM2ozL3p4dlM0M1B6OUFYa3ZCYnJReno0RUloT1AzZXZtU2Iyb0o3RVYraXE0SStBbzIwQW1JdXdWbDlxSnl4a0tkYzg5dXZydjcvVTRKR0VmK0J2R25WOXlEelRjaFZMK3cyVE9GSzVlbkowRGZmZDMwUm1WV0tmY0pCR2NEelY0RnlSeGMyVFpubWZRS2FXRStpbkExR2ZEUFVyVEZWMllhUFN3b3V0UmF6dkdsMXg4ZHlVblNxT3hibTJYNXFEWk1LaGpVelhKb2RiTTNya2taR0ZQcVNURlY2RVhsUnlTdFZJbHR2R2xINytwY2ZDZ05JMTBvbXlyWFFNL3NhWnJpUWNKTEs3TXJEVnVlc0FFQjE4UXZnenArVlBxYkh0ZGZwY1JDZEE1cDUxa1hyVWFsN1dpSzAzTVphV1R3SitqYjc4RnZhWkR4VW5FVkJVNE96QVJxVzlwUi9SYjZ1eGlhL1NvZzRtSm82a0RleFdiVFV1TFcxV0NwcTQ2T2hyeTBiWTNORWVZTFlscDRrK0U0YWtUcmg5VjBlRG9zamJ6N2dUa3NYZnlFMHhrRCtiWjdIcTJvc0R1TzRocGdNZWwxTlQ5S1QyYlF2d05jVW55eDEwWkhyemdIOXNHSXZsSCtDTG02aXFUdUFEVStuRlNZa2docnNvVXZqNVgrUFhHQnZvOFUwYlFvNEpkTkhERk1RNWx4QmpWVTMzV01waXU1aDlGSnJzWTErU0pKRUlwejM0K0pxNCtMVnJGVUtEdjgxbkY4V1ByR1gxcjNjWU05eUVHbWx2NHBUN3NEcFFuVHFoc2dEOHlxWDJHRmRQTzZPWCtBS3paYk5BNTlwVlRVMzkrRlNLS0dNdENmaVRVYjJpdkovMFkwVzVBQ3poSFNFMjQxMGU0cVI1RXorZ0RxVEhZamJaZG1nc2c3ek9uclgzUlAxVDhhdEtUWnBCWXVoYkZSUXZUTGpzOHhZR2psRkg2WjdmNS9SeXlFbUk4akRkUXlCNzJNc2NaRTU5c0tuZWtVTVdqWnE4azd1ZlNSdlo2aHFVcGlBTk03ZlR4SmZWRHhvRG4vWVdtTWViZm03dTJUaEdWV0x0SjR6SjhHdk1nU0d4Tkt4NlRBQUdyaFBrSU40bC9SYkl6bzJZQ2ZMQ1J0TTBKU0Vob3JKSC83Z0V0eGxEeDdyRDNRSFZ1dzAvT2VCRVRrNnhKOUxWUUQzc3Vob3BQOTMzSURMZEJxckQ2TWJ2Vkk0bXJzb1gxZUtoOVpuR3F2anVJN0duTUR6Q2ViZFB2TVRIS3VocEVibVZUWmM1RDJoL3FVd09VM1A4eU81R2JkSk9zNWcxdUtadkRlUEcyZWNGTTZqZ0xDYUxJQU5zSG5yRis3QXdCakpXNEZ4NjhwZVorNVBVNUFqRloyaVE0NkVwd2dSTkpMams2bnp4d3VIVE1lR1FYYmxHU00xYXdITmJIcXpHQkpyaFRZejdIa3hQWExSSW1GMjlZMnM4c2pxWWlHbTRKWlh2UUR4QXpZdkJJODBMV0xIanlGQWw1SUNxOHRGQTUvM3VHRDJvMGhTUFA4azJHL0FsTnpFQXE0QXhHbGVzdC9KaUh2SWJNc09mR0w0NnZhUHBBa0gwb2w0TERCb1JKL0hNbUlhTU9kUmVPREFlaWZBeSt2QzBNWERtbnN5NGtvYXdEeStxYy9RdWtrY0t2VHd3MnMyUDBPVkxEU3N4REMrYk1TV1BsUnI2OWZNQmdSN3hRdzlocDZvMXZVRmRnQ0pSRXd4b09HbWFyc2dweUZiL3cwWGE4QTRQWCtoOEw0Zy9WbFJlZnVXSDc5Qm04UEFjWmhlZmRjSU1zNmRZeno2b1J3cXRqZWM2cW11WG9FMGMxcDVjNE91UnpXNVNwQTVVempnK0RhZG93bTBtbnpld041VWx5K1JHZjdHTFhYOTdRSlhsc2o1Qmp3cTNFc1pCR1huTU96OXFvYnU2SHZmRENHaEYzT2NyTHBtTFV2SXRyN0lTNXBhUkxrKzl3bko3MkVSamIvMVZvaFdPS1phdk5uR01YbkZTV1phK1VYc0JZWHBQWThZL2FsRE1aNkxDdVlPQWVnRXNFc1g1ZCtCb2FCbzBKUlEyTitCMXNxZHRob2RaZHc5bXZKKzRiOHZyY2dTYjRCNzgvS3pJZEl4LzBKZy9Qd3JSVlZvby91anhNb1RFcnp2eVVJVmo2b1d0UzlWS2JlZFpIbExsRnZXYXh2UzBoMmRreVZNM1BLRmQ5ellHeWpXbGxydGFtMTU2andkMmRnOEtDSk5OaHRQOWt6c3hITi9FY3NXbHZMYlpRUFlhWDIrSG8vWkFJS3N6aEJIbHh5dmFKRnpnWlkrNE1nVEZKa2JwODlrSG9FWjM5Y3N2OG1zZVJENmFFTVJQWTc5VTBjNk1OODgybWVubzdjYk8zMTM5TWExeWNNYnBpWWMrenhpazJOaXpEVU02QUpRNnVuRDliZ0lqMTIzMUM2YysxNzg3ZEJFc2NIanU1c2hhUVpIUEt3L1UwanV4dGFoZis2K2JJT2V1SmRCV2tZcG9kbFJTTm4wamEvUGNWLzBlK2pFZ01DNFZYRTVFM2VHRG91L0lHY3hYOEY2OEQyOVJBUEN5VEF2R05hNkV6SXNqaXZHa1JpU25SZldGOGZmT0c3QXhPL0tUaG9oWnE1ZW44bS9XUHpFT1ZOcEl5MFBhNDFYcXdidGtKeHhBdkk5OGpMMGQ3R0dLVWJ0UzB4THF3Zm1Ybzh4SFM5dUxncjNkaG9USk1zU2k5L1p4UmlEekhwaWRnK0tmeUJSMHNRbXFRb3FsQlp0bFZ4cHpOa0ZkUWhaSkl6bXlZQThQSmh5dW05ZzlRYTJ1TTBnRXJkNlBoeU9HUHYvUkFZTEpxS3FSRU05K2NKR1YvS2pNN01ncGJGV1pCQ0pUdWFsZm82Q2E5TVd2TG55Wkk5R1IzWkNJdTJLbDJoaUhhMDZRUFN0TnJrUTBSTVpXRjYvT3pSSlZIZ2pMa2g2RStxTzk2OUFyQ0p2OGhrNUlLdmhXY3BVcHF6M2pMRXBxblQ1UUNyZHVvUVNWNmpYSHpBc1FIN2gyOGZtL1FVcXVQckxoeVJwZUpMaXNUSlRlNDBwRG1KVUREWE5lSG1RRC93U3p4ditWNGNWQ3BFbyswWmpQMUo0SW8vekdwbVpiaXFXb1JkT210NnNCdGJmYWptZWVZeEd4NURwSzZxOGVQeDdqdWQ0dCtaYm4rWjF5b28yeXFBck5TRkNLakZkOVhIenB2Q25Zc2dYNUNrQk5RamluWndlNm9wbGdGWjJra0ZFc1pQOFBYdW9nZnRxYUtHYzc1R093MzM5UXZpT0NjZ2dnZXRmSEJmcnpzU2JiVk5qbTU5OHdPMHA4K2FkelhzOWMxNTh1OGszQ1ovcXhCanVReDN4ZC9MaVVQVFFlRFpyWm1BUXNjRUhoWE5BVHh6eDdFT2dQRHdGWlZ1dys2b0txdVBOb3AvTHNGMFh4NFBQTzlmdGRBSjhvOHNpeHMvZk1kRE95WVlub2FTUzVoeXd3SUIzZDZTS1ZtL0FzWDYyNnVwOTJ4WENlWUhUb0F3M1NDeHg3aFhjVXNyYjY4Z3dHMlliVmY5V3ZJZnFhTXpuQXBma0FZUkZ1YlJXRnNHV1R6RG1UUkZGNVkvWHZDVnVpWVZyRGNaTElRYS93eFlJS1J3eXB1dktxMWprcW9ZNTFTNlV6cnE4d2dMdTlFTnRzWG1iVXNIZ1AwYzJzMFVrWlg3cS9uSW1QT2RsUHVEczJwelVpdFRJZzdVcTZQY2Z3SHlYTCs5a0xKWTNoejhCeTlGSnBuV3VGbG14cDZoQ2d3amRrcnR5LzFDUmx6TWZYY1dJRFNzSWRYSTl3KzZkVGhrV2VmWDRITVJHTGs3NTJGWlJFckd4dkN0aE1wREZKYTQyYjE2YWVvc1A5TTUxNzkyZ2kxdFB4dTRjTXVucDljYWN1WGJqYnROeFpIS0MxOUREcU9CVm10QVVvSUFNcjJEeUZDN3Z4cVBaMVNMSUxPVU9TajU0ajJOcHhybitiUGJlTHo2RWFmZlRVQjJPcy82WStWN0JaTG5NcEtkK0M0VEFjVnVhNlJCaUZpQWJTV2RQTW55bnMwOWJTcEVCNDdUYTZkTytCTkVFMEhOell5eXowc1B2b0JyQ2w2cFhFajVjQ3V2dlJxcFpZT1BmZmpCT2o3cHF6dWd5cDUzTUJZYjZSb2xkdTdQaEt4SnQyRlkwYWVMM3hqTE1GVTR4QXVMSFJyMm1uUnl0SGJoTW1QQ2tsWFU3ajM2YlBLOHFKQTNXbSszVjIrdVdUVDlDUjVLL3VnWEYzMG1NNHVKTURLL1I3Y3dWNG5XbmtHUVFLMFJyN3hxaUEyTmF1bWlWcVFJMzAwZFdld01QbFpwdEdnRnpXRFVLa0RLcGh4Y21NdGFISVRDbXRNeDZjSlZDaFRVdW95ZDNGUml3TWRQYkhpTVJCRUg3TldkTmVuSkozQ2hpaXhLRFdIeG5xVjVUYXNnbmJNdVZVc2x6bHZseFdaeHhtS0ZyLzNQVE9Za1JEL2MyRnZDT1FoWElYVG0xT2VDbjZnT0NvR0h4NGxDVlFuc01SV1BDZ05DMytuSFZLTFRmSVhYTHEzMEF1ZE1LTUx2VTNoRU1EaHA4czNBaHdUWHlNUElyWG9sWTFac2g4ZnJVc1Jrd0J2bUZQTFdsMUxGaFVJblVsU2hxdllZK1drdUZMVjc2VVd1cW8rK0pkbzF3VlUrZ0s2QU03QmtNVzMzcitqT1NaUGE0eGo0MDdZK2dnZ2xTNmEyd2REWERKQzhmNU9DN29DakJsa3lPZlFqUEVqR2JPRXVubnIxQ2ZBT3l5bDJHSkR5RlU3cFpFbHdWVTAzKzc1eEpYVlZTYkhPVldIQmtSd0cwZWZGZXZYUTRtcnA3RC9UVlgzbGRnaFB6R2lLZ29LbjhiS04rWm1WdFFtYm1TaTlMb3gzRTRxNm5YUlE5bkhLR2J5WklQdXZBdFJmSjU4eHB0SUxrZmJvYXZnSDI2YVhURnZySmRMYkVTZ1czdHBlYzA5OWI0NjdlYjRLUk1mOG9OS3JUT2Vid05WbHExKzBycG1RVWI4ckRKbnVhTU1QSldDTy8xTWN5bUpFOUJYUEdQNHRiMHhoeEE1MTFycHdwNDFnMHVibGx0c1FucHBlU1YxbVdBekFiSm9Fd1dCamU2TnRlOFcrTVlldWczdVM4eGNnVlQrUVpSY1NzblRkZXpXZFptN1FYUXVLdjc5RVBacHdpRUNscGM3WG9xT0JTY0pielVTVnE3Y2NRek94aUFqR2RFd1gxNzhybkJuY0tlendRMldnSjR3VGU3cVUvVDFGQ21ZWEtFa2tyK2pldUQvZ255THpWeXh3V1cydDB6K2hTZ1N6MExRYTdBVjRyd2l0Njl4NStXTjdteVNCY0xqYmJSKzZTK0JIZTZWK3ZjYkRVWVpiQUlGWXZ5S1VFUDJPTVR4T2VTajRKZ0UyMy9RQ1N2eDhVMXlKQmZEbnBUZytJOVBHY2lZY2cxNDc4WTh5Y2pUU1N0WGZlTFdzaFNpQU9zUUYyU0dQTG9ERXIzRXMyQjkyWGVIWFRBckdtOCtkS29VdjFZNENLSFBDOFUrWFpSMGkxVnRFTlRQckwwd0VOM3JLMnNUN1ZYSG9TaHpKNGtjSkdOWFk4ejc5YUtzZTNJY3pybjFmSkNFRFBMdEdjUEFURzB2UmR6VG4wTEVpdmlHQXg5NmE4Wk1pdDQ0QlUwS1BMRlM2OUxjQlllNEdOQWdvcGpFTU95Tk1uMXovOU4yalVyRUNQSmx1ZVo3UTBRWGJBV1FMcXZHZG9CVnllVGk5QVlEdURqMXJaT3RNN1BoZ0puTnROWjJnZWZRV01KOFpBczNCckkrVUZWT2t2RjNoaXVhQk5PVGdla2N5eUN1VStMRDV4djBGNjBCM1RMVXYxUzJRem1KUmsxYng0MXc4YXZjVFo0cWorY3VEb2QvWm1xY29wa0pvQ3ExK1QxY0t4T3g0c0RCOWR1SnJMWWhZSDh0UC9kbjcrUXpHUVd0dUtRVThKOWpPWTlCOXpXcUJCWlRzU0V0SmlDTURDVDBFTFlaUzRob2themZjaHBseUIzN05PWHBVdHcxaGs0WmVpMVdDSlZRcERmNVp0ajB0WTZVVXhMQmo2Q0lXZVlQcVVqbndZOE5YY05ldHhKMGpmUzgybFc1QmZyYnVHWUtaTnBoY0F3Y2lnNkRTYk1KWUJlVVo2WWpRMHVUWXc0a3lCWDN2L1cyc1VLMzV0SnM0ZnlxaVdnTWhkbFVrNUw0aVovWE90STB4ZXkydHpid1pvSlIrTHArK21nQmRHaml2clNKeUhkN01uMGZGaFFuaURMdEdWUUM0NkorbFBLYXMvcVlVZGNKZGNQWElCR1VKbE1QSnozT2EzRmRzM0pEUmVzRVdXdXFuc0VWSTNZZmRKcEY0Qy8yQU1tQ3laZDlPdDlmdlpIMzY0K0pkWDlCUXo2VU1LZjgyWXZodGljRTJEU1ZEY25nbUwwV3RjamhCa1BkMzg2VnNHQ1h5UTNBTjIrK1J1VWpOdG5qUzNBeDcrc0Jnazc3VmJPdnNZbGVlR3lLZkdtOG9USWlvSytPN2t2eWFOVTExOFRPalpJa0dadlF6RTJUS1kyQWZKT2s3Y2tFeHlBZGNlVU1mQnZqbFZRVmVzK3QzWjFMSXE3Tld5Qzk5V000eTBqRzUwZ3JRZEFuUDNOL25oZGpyMGtkUzJ1cjN2YTFQaW9wZ2h4clJiVTN4Y2ZTQllLRDIyTWxTS1JuTFhpN202MHp3UEdqcSs1dEhSdFRyVTFMYmpQVUxaYnpPNHVzeU5UNVBBQUMwTXU4NWVTM08weVpnVGJLZmF3UHNyb1JqeHMvbDNmUGY5d2l3dXllbUg4TlRxMUVJZGtrY0paNkRrMnBuVmVwVEE1Z2U3ZDZ4cEdQakIxUldLcUx5ZzB1SDVyd1dYZzY0UjkyTmtQY3JNTkt5QXoxd1IrMW5sQ3JwV05SRkFxcmhpeHVNNk1DUk9FTW9zNmM2VkdsbWRZQlBJWDF2cEUyaXViZkdVVzd1TUp6dVVNdjdxOUdZdGtta2EzZThIUlVsY2J5Q3FDQnpyR0ZPZzlSaFRpT25KbWFZNmdDVlV6dm5najhZUzhkaEJxdDlReCtBOGkwYXFNT2kyZHRpYy90Sng3SUx2VFJ0dXZTNGZzaituMzR3ZjZOL1p1citKZ2dHL2h6Tkk0Sko3eTNJRVhGRlJXT0xmTnlVZ2kzeHZuNkd3MTZoRjNiVlMxK09uM2dGZkpTTUJLRjlpc1pLU2RCaTNsS3hRQUdkYUhEMXdaemo5ZEZWb2Z3ZTIrbVlVRVQ2UDQ5dENXS3JOWGVhMDZFSnh5Z3ZTaTh2Tm5kQ044My8xL2dFMEFPMHlocHRSOVZ0Ti9OVUJTQTUwemk0WWF5TXpTNkcyN1h6Q2VzRUNTRTVXbi9BUEZXQ3ZXVm5rQUx2UWlMeVJNblRGbDk0UEFWMThxMlJwaHNvU2ZVa21tbWZNaHVzQytEVG1KMnlac1M2czZGL3FjN2k2VXlOQW9GVXN4NmQ2THJjS1llVVF1REJTek5pN1FMbXRtWTZuaDFkWFNsNjRRZjloN2lsVFdQMWZ2OGFjM1BwSHpCbmVoSnd6OXprSmN0eUh4dXZCWkRyR2hOOE5jWUU4eUpJWHZOUjJ0bVVraGdQanQwNVdKRnBLcUlqcHNTeDMyQzkxaiswMy9zZGUwNDRNeWM4V2tCRTdPLzlBdmxHSVRDZEZQaVNaOVhaZ2FuM0pnSVlOWk1pNDZObngwd3I1SGxDWEhrczBCaGFsTytaM3FFWXp6MGREWjlPR0ErWXU5alBFNE1Ib0paQm5JVXFtNUEvYWEvMjIrSEpjVEF4eldiaWVBbWluRlp6djlqM2puVjBaa2VpWW54aEJsTThuZ1FucWlVM3ZZSTVtV1haaFJ5ZElLTVNuRmVlTUIwTXRwSUpzUUE0V3J3VnB2RFZ3b2VXOU5DWndWSUtvUTVzUWYwOS8zQ0dKQk5LMUsxRnRab3E0WmczeGpFdFRHcloxZk9vZk1MMktvay8ySjBYQ3dkKzVEMFNFWmVSUjd3Q1A0ZVpUcEhsT2VtVit3RkZDSU9lay9UZVMxK0lPQkdUVm1TQWh4aC9FNDQwVmZCeE44eHZBVEgreWhEZ1B4QkFXK1MvemhVM0VGdEl1SEZ3akRCem9Cc1I4Y0FmOVF4TVFiU1FNMDdRMVh4UVMreDBVVXUvY01NN2N0eXpGaXNTc2YrK256MHpvUHRDcDNiaVZSTThXUU1Celh3RXFNd01saVpsTHd5WTh0UE9DeUlzOTN5cW0yODh2d0FLZnUrL01oa3JCT2hXV0FuWVV3YTJzamlIZ3MvRDNBMU8vVzU2UXQvQzBDcTFCR2E4VGRKY3BRSWZxTFZjNERhVTZ6WC9EVURMZ3EyL0lKRDNkV1pjcjFiOFM2OTE4aFdoUG8xdzNwVHpCV2p4b2ZNS0xsNU4vOE1lb05uNXZzRGlCKytMZW11OXJCRExJS2pwenMrTDUwVTJ1Z21ubHpLT2RoQ0xDanUxYytIR2Vmd00rYnJ6b1NsMGNCVHZjeFg4ODhLS3NZT0VNWHJXMHQyb2pXaTRvVUY0YUg4UUFNcnZGN3NqMEh5K09tNWVvd1J1NU1jSHp3OWt2L2czYVU1K3BXTW40NmZoUk9XSk53SDVDbnljc1A5ZEVzZmN4QTArSEs3ZlViQzl5Y294RkErck1WYVlIajNIWWNXa1dFdHlXaFB3VnlMREk1YWpvNWNOZ3E4bTdXQWp4S1dVaXRKV3pra1JSWlcxSk41VUFmQVdWUmtCUk9ReStHd3Z1UXR1eVc1b3FlRTRSS2lIeC91WU8ybUhJYVFvR2Foelk5RlplTHVpUlRYMEtha3EyQUdldVpvWERNcXc2MU1tUDBjQ0VSMUJJdzlFd25FVDBrZDA5Um1rMERqcjlnU3ZzUmxLU0F0bmdVZjkwdWlkSFlEZmxIMnBiTDdNamYyeHBuSjhNMERmM0w5UWhZSmZQY0JKbnFWbmQvcWc2eWI0YTd6RTZISzMvWHJUSzFlcndNUklaV1kyc0JtWkVtUWNwR0ZhUTlXLzJ4RHFBZVI4QS8xTEJTbmMyYldjOHVwT3oxNEhKcFQ0eGVWcmNaM0dWN3JyMHU1ZGpjOC8rbUczRyt1QysrZkFpakNuSDVrRnhRQjRTTmFCemk2WVA1enpoS1hyeVpTdmZuMHpqUnRpclNlY3dOcW95U1drbnQzc2dxVktEVm8rWCtSMzFrWGRuR253cVNvUXliNS9JYllBTW55Mm1DYWVhT2NGZXA4dmNLSEw1NVVKQmxaMXUzVlVLY3BJSmo1a0Q2UjFMSVhuZFFXYnphaGtNTDl3dTI2SWYrYjhWSm9FcmxTZlJBN2JOWHdicFNKcUJFcTV2bTVRcy90dWg5eFk4SGF0Zy9xUzkzam1TdlR4WC9PMjNsMXVydUlabFBPYlF1T1dyVTRxYVFOK1ltREFIUllOL1l2aTVDUXpHSzZGQVpQUS9BK1A4Zmc5bVoxZm80Uyt2cWIrN3dLSTI0NjJnRzcwdVRuTXk3UEN3cXJScGU4ckpwZlFIT1RGRHlGSGgwZHF1RVBZMHRaSGNLVXpkdmRlMUhXdWZydFg1eU1VdHl5Zk8zck9FS28yZjBYL3YwM1BZMkViSkJpUXdiRjA5REFycGY0WFR4b2s3NklDNEY4TnRxK0hmWXkxY2FXMkNoWExkN3RFbk1HUXU4VzZ2Zm5XcE9pYVF0YmlKQStOUXBaSDEzMlhjZWhBa0tqNjFDRXoxWTd3YldUOFhvNkc1S3Ava0w4dDYxRndYNkF6YWpRU0NrWDBkT2p6R3M3MWI5L2djcDl4c2RsanFVU1kvbEhkWXNYYlRiUW1ieExYcUtNRGpCeWVNV3RCakxDcHZRdlprYjJrOVJXakdxbkQxaGZVbjY3aTBHazdLV3hzVVhTL0IyczNzZThIOEZtY3V4d2E3ZElpTTErZ2JhZWNLMlAybkZxQWdMUGtQdHJ5YWZ3TUI3aEtDMkZUZUE4NWNtall6a091V0UxNlcxSGFDUnRRRFpUenl5MXJaMHZiMTJodXA3TkdyYVMrbGhmeUcxSXFzV1l5UUQ0cm5NN3ZxU2xRRTNCeklKL3hSWmNWQXNHVldlaDI3NkVJYUsxQjJ3ZFdFbFNjaHd1QTdZTDJnTkR0VzBLZWljNDhwZGpGVWcvalI2UDJuRlBpcTBhM2txMWZCVCtzbFY1ajFFVTgvY2c5cGtUZ0JNN2hZejRpNmpRYjZmRCs1ZTlaNGoyZDVQWmNzRHc0VjVWYmxXcm1Md2xMOC9sUTVvc0x0aDROUnNSUFh2MWxEbzN3R2pLbjFVWHpWK09LMjJybnZOc09OK1loYzdwajVXTXJPNnBwT0N2N0Z6OHFjaDQrSGtVbjVOdXZsTjF6bXoxRlJGSDlseDVUVVZmUVRuUlJDN21WMUZtaFoxWWVwbnJxNVo0Nm50c1JhRGhnQ3pRbGRNMVExb00xSld2TUk3WFhrRmh1Z01vT1RmWTl0VzdrVUFzMmViQ0lhWWdxdnJLNmhVTmxNNnRqN3Ura2RPSUtsd2x6RllrN0dvOVJYZlZrbHdvWExzbFUySnhlU2p5dFhUNlh0Vm1TaXlQOXZCcHRDODBvQnBlak1nV2NXSkVFSjA0eHY4aVFMZzRVUHhzdGNQY2ZqOXBGLzVWWGR5a2ZxY0J5azJrUXhRZnNDaFo3QURqZWdQRjhTM0c4OXNaKzJlVjU2QVBOZ0s2YWxnQTRoR09HbENGRDFiWjBsRGh1SFhaOWlMRWUxWDBCSDJMVkZFQUlGUmlQbHJBUDcySitRZ2FXTkorYUZQK2E1TnpFRGhucWxLQzJKejh6cXZ1eUhQdDJmUit1MnA4ZEl6aTNUb2JrVWJLUmRiQXhtWXNVbDUxUEp4NEN1d3paQkhiWXpBTG56bFlGb1lCRTZrQlJROTRHZnpzTXdCV2JyeGVBWVp0MFRWd0hHRDgrMVhjODlKUnVUSGFvSzlMU204SWd6MWtSa3hWOU5kT2hzRzhRdlFtTUdjNEpZMDN4dE5LZmxDS0VzMm9pR0pUOVZrMzBWaGF4Yk1mVVNIRGJGSjZKQURybHVrNkV6cUpnY1ZjYXRFdUlIeEVsaTd5elVZUzRJSVFzTktCTXNiUXZPNmVCbXpiT3haQjJQMkxhNHZRREN6L3ZZbUlYTVI4NGFSSStvUWZhNmgvOVFLeHdqMWtTa3YrMjBXNXJtZzE1aHFiQXhoMGpzbTJEWEtiTTVTb2pnTmlmdTJ5dkxjVlNoOXk2TVp2aTFvbXRBT1NDa3hBdjVLYXNkQWduczNKZFJ5QlZDUmN3dEtqV0VxczVpVVR3bExmcERuK0E1eHN2aXIzdFVaQjRrdmZJTFFWcE5mSDFFOGpETXAyNk5sVDNrTHRIZ1lLemtrZEMzK2tBVVRacWdocnR3dDc3elZTQnE1blovUWpLWGgxOFNLeHV4aHdHeFJlVEFjRGZiVXE4bFRZNFpKdEF0QzNXSTJkcWRHdmJyODdDYjFlcVhCaUlTb3QzOStvKzVaQlFWcWczY0huNTl3OStRQUladUZ4ZVZZUFhIOTl3Z1pnV3pxd29kck9rYnB4YlNKQ3F6U2Y2dzVPVHkwV1FRaVVUZlJ1T200RTJhNTZZM0lNdHI0S1QyYVJNNGx6ZGE1Sytldi9uTUJKYlJleDVOcTFLMUpEUm1GQzRNRjFWNkFFUVdvMkp4UTR2L2FWaytCT3VFSXo2WFh5Z0lEaXl0MHJvcGN6c3NNSmNoTkp3T0NHME1tbXdEYVltZ1RkMHA2M2k1SHZTNzBzSkl0cVY0Wkh6TUY3bEdDclN3d2ViU3gvMmlaVUlnd0RuSStxa3QrYkF0US9HK2pKZGN5M2dYa0M0eGtCRVhDa2lTU3l6aHlPb1JOSm9DbFBRRFVhakF3L2hVM2tVQzdKdHJhK2QxSThkWDFTdWdDbHhEam45NkIwcEZPQVEyV1ByaG0vaUYzU0x1T1lZZ0hBM3lHVHk0MkRVMWFpZUsrWVpaTXVjNEF1dXR2cVZqZ3E5a1hzaXRIKzF2NVluZWpwK2xRUDhKOExyREd0aE9SMnhNOURDajd5WXc0R2JucmNROWs1OEYyMWF1cmdYMVVkUURzaVFNV0l3TFRMTGtEeitTbG1mRXpYOUJBeUJ3SE9LWnZQQm53bXNaOVRUMU5rQkFUVFJSR0lXMVlmRlNMNU9Xd2hSa0VrY0ZOa0pEeXgwb3JJRmloSVNVMGtYOGJNRG9UYzJDNCtsUC9KdHpZUFhkSDk2Z2NnbFdIWGpNVE5Eai8zUERkczV4Q1FIaGRiT1ZFNmZJbjZxUE9BQ2ZxVnhFLzMvSVNBMDAwUVRsbWpOeGI2TEFOM2laOWhBblZpbTFENDNqcVoxN2pCQlpsdFFhVVRkalJBdSt2cmxrY2pBMit3OVBjNWdiaGRXM2ZGRHkzSEhxaWpEc3JPaUNCdGVzd1FjRXV6RmNOeTB5N085VG5RNGl1Umo0M3RLK0ZTV0NEanZVenVJdU1JZCt0WW5zd2Z1OFd1dUMxY0lRRmlkanBZelRUWFRGVGxNMHFGVGNWTTFyQ2w3Q0h0TEVwdlpQRlcrcVhlVUJZdDhiOTNPWWI2YzZoSEdLSFZVNXd3WkVTQ2dFMkc1RHNETkFBc0FQb2VmcVNrTXd1amRFemRuWHJyVDBSU3A1S3VQRm1TKy80dDhDWlV3RDFSL2VsRjdVQ1I2Wlo3MmxuUW83WDh3Y0tjaVhid2RzS0Y0Wng3QUVocFVRMHRIWUJsdTRHbmJGQktFWmp2NzJDanpZNkNrV3VlNUZtQ1hWbE1aeGl3Njk1U05pZE5XaVNlSjJKWFdNckJMd0JjV2c3T3dLTnhYaGh4RVhhTzhIRHBPQ1N2ckI2T0ovRDFmbktKUEFjNGMrTmg0MUJrWVE4YnZhUFJZbkNoUnhUNTFMT1dTelh3UlZkbGEzMWdrdGp3WXNiR2FKam1IRU5LblZ2MEdSSjdBblc1REJwNUJqelZUYzcwWDRtWlA2dW9pUFpqYno0bEcvb3FGbHlXdDlnWTJ6WHg2d1pTbmxkWHEyVUQ0ZEZPdWkyV1dZRXdxZlhkM1NKN1A2eGVGVjlYZytPQmREQUNnRWs1Qk9vYndFUUNOMlFIUmNOOGd1dUh4UkJtOFQrYWc0YnRZeUJ2bzRWMkdnYUxaRWdHdjlOU3JUVWR4OEEzWHJBelgrOXUxdE5nL0RjQ0hFU0tkSmpmQ25aSDZyQldGMGpQVkZyZ0VtQW5UYytQQnVTYUtnUDc5dCtZdzFXVldDVE14UXcxZWIxZWRHU0xwNTFncDdWZnVVRVc1emdqbHB5dzFkdlEwOXpySkZtRGtXekZBQjByVEpnTmNEc2pPL2g3Sm9VTVhrRTBZajNMNzhpMmFGZi9US25FUW9ibVVzVEdmRURnaEtSeExpTjZub3h4eHBDckMvV1M4ejFmRXQxTW84SXZCODVsa21OSE5CKy9XTXMvd1JVUnZFTnRDaFdYZmp3VmJGU01qWjRvUE9mNVdmYmR5S25LNWRmNHZSZWhGOHowN3lRK01TNnJVV0NLdmwvZFhHbmY4UFQ5WWtGWm1ybWQyS3NBanprdUQ0QWN4UlZkLzZ3M1Q2akMzWDFLWTNhQXlkSnhlbFFjb1lqcXEvS0VGV1ppZHN5VERWeWt1WTFMdndRajhHdllFVDh2Yks2UUpBWHRoaFc4N3pEMWFQOTB5QmVLdFlXemI4R1M3V0xYWDczb2VZNEUwTG1sSDJrWkswWG10ak5FbWV4dHlmUUg3SmxaaEd5eTNWazhQZkRaT3BDdEZkejBSRWJ3NkUwWC9vVXl1ZktvblJOQnRkM1VQQXB0REFHaExON1NSMG9LUWFvWlkzVGRPS2dIN2tybHphbnJ1Q05udnNWaEovWDFtbTl2eUpPYmhYajJSb0JKNmxhVld1NjBZNlA3QmV2RmZOYS9TdXNQeTVtRUduZVEvV0RJZ0tiV0JMM0dIVkJIMWI0RG1aNUlSV0Jnd0duQjYvS0xla1FNK2l1Y3d2bGttbjFNNDJ2MkxOcFk2UGppeUc5VnBUaDhQU3BoZ3Vsc2I1K2hRakxycElnS2JSV2d3L2xRR1pWZnd3bWpMREFrYjBmdk5hTnFEVktxTmdSeUlJOXVwckFuVjIxTHN2TjNUMVhyWTZGQVQxYlFHbmQwa3RWNkVkT2lpbGZUS1ZJc1B3aEw5Tkg3TlE0RFlLTnVaVWg0R2FkTEY4RUVyUHZQNldyb0dZQjhBU0RjL04xWjdBSGdZRVdNdTI2akNab3VBck9qQ3U0K2hNeWRRR1pvUUtoRjFQaGVQcU8wSU16Y3VRV1dPWHJCRDF4TjVQajdRS243a2hsWm1PeW91V3h6ck92TjJUbkdGZ3cxYmkzQS9uY3JNRG9sODNmNVVVK0lPdHliekc1M3hTK3FQNFlYYmpUcC9xc0ZsVSsxNXZPSHJ3dHc0Z3JaZnNoNXcwR1owbjlqaGMxVzk2VzRJNDR3ckdZbHdPbkVuK2Y4c2hPMHh3SDZBNSt3d0xnU2I0aWNWS0h0QUhnWEZFdzBoV2tmOEw4b0dDaFVwNXVaVVYxYjlvb3F2ZGQ1SkdTWjZNanRhYW1QdUpxVjVkemw0cnZ2RmdpbjhlZnllN3JaaFJpSTR0R3d3cHcxd0tRM0R2TnR2RDRiZHF6VHRycjRsTkZDL05PZTVaSFJrNy9XL3dpZzJscjRnbUxMdnJkd1RuYnpoWG1rK3Y4ekFubWh1R3VhTHBzeEFJN25YeEZUZjFOSDRkK3dtZWdEWElscTZaVys5aVM4TjlSS0FlQWdhckVYSjRuVUN2OWpHUVdPTWpOZWFOaUZ4Uk5LRE5PZ1BkRkxkcC9HZGVxOUhRSGpEaVd1b2t0dFAvSUxleHh2OVIrbU1raXZ0UXNJcVN0MzBPa3dqSDNiZHB0UXQ1bjJ6M01wZkxsc1FMYTFWQ0toUFpqbndERzBWWWJMQXBzaUNSTGRjTFRhS0VzcUlPbzZ0R3hVY0NyNmE2SlUvR29vckRtOWJ5VFZnVGU3OUtzdnFpUmQyQzU3d21OTmVVK0puOHdEeGhFeDcyUE1JaE82MjB1VUFLL2VDQTFJL2NNUnBvbTdyaStPWmxsb3Buc2FlUEp3NWJHbXNIV1NsNkpqVXc4Mm9QMDFFcUtTY1RyOHFXby9uV0V6TmtzcGhwQjZ1N05PNkFnRTAxVGtwRnlIRWZYZmNEVDdITWcrSmZ3SHo4dGNOWk9keEJ3aUpWT3g4V1RPbmdWTlBHWUp3U1Zrd0ZxVHZJYWtnbExQaXY5d3g2TlRqRkVkcFEzYjNqUVE4NFRJeU45a2JqUmJ4WEFJMkx1UnY1T3F2RHNmZW1UVU1TbFdDUkZxeUlDNHdJWDRRUTNwVnNZUEtjYjgwalhGNDcyRktYYTNlMmxTeWt0VkN3NFQyVFNYbExwdkplczkwUmkrUTBCMlZPNEQraTd0aWFad0JXR1dsTC9ERlF2UGNZVk02emVrQ2hJVjJjbG5KYWc2SlZZaEJ4WmZvbWFhUHR1bk1zckRaWjIybEhiMU9veFNIVlRhUTNweGdhS1JKUXRlck9DNGU5a3IrbzY5Q2tBWmE4SkFzRXRWUVNIN3JuenFMUkorb29OTjRzWlNuOVJPeEVTSHBpTzJWVEtMK2NVYnk4TnFFN0FwT2tPdHlxejVXMmMwanBvTGRlOTBWQzlmY3NXczBkbXovT2ViSU1rMXpUMmxyYlRhaU9tSzY4T2tiY21DSkJIQ3BvckhsN0x5cGJLZ09CSU5Va1Y5NFVNYm5sUEdENVFzeElvR2tBNVdFRlk0SDRiZ2NpaDFOd3F2cmRsZjBDdVNySzRTT0JhZ3N1UGhscXpEZ3lpc2Zodm1BOS9lak5ZN2cxbGlEYW9nY3ZNT0tST0RLVUp0cE9ZUHR0aXVzZjB3TGRIK2RCTHhZSkxzbGpUWmRjdmJTVGtVcTJNL2xLeTR2VnI4ckFMQ1dFWTJ0eDVTUnd0VkNpeEcwcFJTYzI5S0V0RlF0NmoxdktBWTIwQWF0M0w1RlprMW5sekhYNmFzT3dqRnl0WnkxNWhFQWpFVFBFYVpoSGNINU55YWw4QWlCZFBqODlTRWVCRWx3N28zTmJuZFFaRWhWdFJPOHVVeWV3cWtaK3lvUkFkVk1WYmdXM2NMM0JkdEdoQlpXS2xVem1Ud0ZLaDVtQWhZakZiZTRxVE1mNE1yNG5QalhBaGlOczNsQ1pCZU5ybnVocnkwdEV3OHJzOTZhTkY2Q2R1QlN2U1FzcDdYb2RQbU43Rko2RlVmdi9LdSt4dU1JWUJScVd1Z3BsRllhQmx2d29XaHBDZ2trWC9RWWxIbkxESDhpd0RIdFZxcEpSZzE4M0xxcWFhV00yeERCb05paWxFck5XcUVoNlBjQUR5REZrM1hjYzhZMU5YaFNXNGY4VHpyOUpmY0ZkRE1GcUNWOFgyT3V0TEpwMFlHbzV2d25ESlJ4Znp3dHQrT09SWXBaS28ydEc1OU9XTEtadzk1VkVHeHZhRU1uUm9pYlUrQU5MeityQ0RnNEMybjhOTHBHU2lYZm9GMHZ5aEU3RmRjbjVWQmorSEp3VjJZNTRQSjRiLzBVeUc2UldvaTdkR3FmU2FhQlBFbUR0a2RYcE5YZTV3UVhFdXV0NGRrSFh2cHI1bS9JK1FGU0tPaTRtS05oNkNGcG5TMWFMbEVteTh6dXpaUXVObk04aW9Fb0JWY3dPQnVONHZ0MU4yY0NYTmxCdUxKY29xTEVRZ0pDNEFLOHdPTTY4eWx2MWIzbllFMEp5UjB0RC9yMjNoVVpWSE0wTWdQSEo3N0hZRWpES1VLYTh4SFRiV05KUU9Xby9OeWg3QTE2WXhMQ1ZudVdKS2NDZ2ZjeTl3alpEbXlEWThDNjZYazQ0cW05QU1PWjQrQmViSVJDNjhKYytFa1hyN3V4YmRjczB0YmliVmlWODdTU3h6QnpwR1hRU1AxbXdUZWMrUkZCalMvZTkvcm5sSU5xelZTd0R4RVdDQWhWemcza2sxR0ZITkFiQXAxbXlsaGxvK1V2SlpDOWVHTVBnQmFaVXBDT1F6RFg1Vk5oK0NObnUzRTByTE9IOXZsYU1VZFZqTUdTREZvZ2tKZmZtcjIxZ1BFcHl2SGpVdVplWHZ1Skl5MXdmZmNLUGpBVFgvcDVNU3pWSFBHOWFXeERyY2x2YXZNc2UrSzllM0FhYTljc3FlcFYyRTJMUFIyU1JtcjN0aVJFQys5alliSnVqZm9wRlBzTTdaWkdxSmIvN3U3T1hJQ2NRYVRMc3pDTW82ejdFWHlxcDVnK2g1L1FuOG9BNXNtRVM0d1B3OFhMZS9VWitQeU1zSHAwL2FqaVRvZnpKejkrcWRDRENpci9MRnd2UEZlcWtnT1RqamN1OXo0bzZyV3QxN3I0OU5VNGRnM0owS1dvb0dvQzRQQjYrTVowaHJMOEphaDlTODJxZGxkMVZmMWVoSEpnYWNGT2xaZzN0M1hpSHZPcE5Sblk1dXhvQzU0UGt3SmlKdUR5SUpnSjRUallFSEZtaHZYYVNYL1puY25SVGNxMXFqZ0VJY3M4V1BrenE4allheUR3cHJCQjFaVlY5eVRrTTBZaDRFeUxRZ0tFOUFZY2pVSU5lYVhMcmVRdk9XZ0ZkNUJjWWI1dGRMTklJM2JHYnFKc1ExRTVQdU9kUG10N2plMnhmaW9aNDQ0bExramVsaGZrNnUrWFFXVXYvVUJLV0VJemhtY2l3TU43SkJDdkd2L2ozdnpqOS8xZUg1QlRSQjNib0N6OXgxZXdPTFV2RE52cmJUa0ZmK1IwMDJpeXRPRjJ4NnVCcy9IM1JzeVVhd29PMFJ2TjF3US9LVEJrVThaT3ZxL01qbEI2d1Z1RHErS3VnWlZDQkx5Lzh3RGtidXgxZHkrSUVUOVZaV1BmWlBiNThuVGNQOCtJOHA4MHhRWW53TWpEWit3SGRzREsraVdhUnhKd2VVL0p0NlRINmZtSGZ2OXNrKzZpbE5ONkVuY3hPeEFyeTU1bFlFK1lwRmpHblRxd1hvSCtYMk5uZzFlS2xOeDFtcjlIajd0bWZNcnJLMzE4SGQ3K0JPdFRENVZQbG5MRDRtNWw4QW1LNkYycHJuVUNVYmgzbG84MTAyVmdQN2VTcDlkNmYzdkhqakQvQWliaTlCVFlQWVcrMDlieVd1OVJBY3I2bk4wVzlRZkhpdk4vWmV1cUZ6ZXVuczR5ekVtQ2JZNHR4WDNWZTRQQVJibWtyMW10WEhpUXhURUxRdVB0ekk3SWl3enkyTVVRakI0S1FXODQrM3l4cDJ3Y0w0bEo0ZjRZYkFiWWpzcHJXTDlYWWpsZjgxOEFCYlh0dCtiUWlxU1dMZjNaM3RlSHZNZzN3YkZXbVRzRzZkUHExZ0p5Rlc1OVNOdjgvWk1pUmVaYW5JUWVGUys1MVUxekk4K0N4WE5uOGp1M1ZxRFJyY0dXN3g5NXM5K2FScElvWTBucTZmaXVnd2dwZEJ2aCt5cFZndWhYVGc5VEdNQTRVcWpCR0tFTFpMbXZYS0ZIWTZVUnhuWGduUWFycnhibTV5amtOMTh2R3lWRUxIdGpnMEVyV0ZmSndOVXFacXlxOXRIUHhKbWkwYlJEV2FMWElqUE1zU0hwbW1EUGRiY3VyTFhzNU1hV1VyVjhNdHdLWTZZb01jQnNaQTUzeFExb0cxSWU5TWx2Sm5RdS9aYjF3Rit0dWJOUDJ5Q2dhYUtHUGFoL0J3cGlEN1JOK3pHaVRZYk5UeFZTcnJCWXpubllTUEtvM3IvUkRrZzVIUkwxZUsrUzh3WmRGbzlHT1pNdTB0YnpSOHNiRTBQcVVvZFFKbi9wc0V4bnM5V29UTU5RaEpmNHMrc1k0UjNWUWUxa2ZHS2xlTXQwTU40aVFqcG9weVVoTUJzcEdUMlJFSm8zOVArRlltR0p5N21vWEZ1SjBYbllxcjZuT3pnVlE1ZURMZzY4QW5FVWFDa1o0Smh2YjdiZTB3L3N4b0VOYkVhZ1EzNGloeW82anQvcEdoTFAxNFJpdno0YXh5NDI1UjJwa09xcmlxMFZSSjgxSGtMWWN6c2dOR3VuUUZxVDVtaTdsTGdQRlQvNjZ4SHFhdDM4MG8rZUp3SnF4eDJMcWVVcmtUM05IYVIvL2Fhek9qVExpQUVTZjZuZ2J6Tm56UDJ4YjZWWVZaMjNjMXFzSC9FZ0c4TmNlYmJCWGFZR2ZrdFlQOXY3dDdlUkFIb0FBaFVrYTR6VVpEN2F6R3k4UWVYYUcrRXl6NUlFNC9XUnhXNko2Y3lDQmUyaUZWOCtzNllKcjRHL0R6RnJKT1V2WHNkVW4xUEpYU2dqQTJrNUN6N0twdXN5bHdvcDNVMnFLN0RTN3JNWEpjT3o5b2xjYXFLclh6ZHllS2NPeGJTSGVCbVN0a0c3ZnlmbWMyU1kwek05WS9xd3NoWkJtc2UxYjJJb21yWGhoaC9kdGhpTm9hNDdnc2QzOUxDWm10WUM1OG0yUVF0NG1TYkdCQnNXaDhJY09rS0ZVeWtqQXpJZlcxcnlvOStOMVZsbnN3V3V5S0ZsUXJoTWFrNnhCdWRaWnZVSTNiWFhJQWFXVXdxRkI0V2cwS3FVTmdkN2poc2ZyS3hqZ0lUV2dXbUNJdlZHWUh1WmNxTVNLNWd6ZXhDbFU4Yi9iTFlZVFV5TStQbEFmVlZESzl0bGZ4dnI3NHNBZUxjRmR6NERVa0hyaEJUazZ1Rm5hanFsblY0R1VUTVlZNWhHclVJVkEyZ0xRV0g5SlZBYzNBdjBFNUExZ2Z3ZmVtL0g0UEZnY1hucDRRRkorN1UrY2J6VXhGZDh6a3oyV3VxNVdUVS9hSEVXVXRPY2lIWTY3REZNYWZNdGk5aUR2MXFMSC9LSlREU0FVaGhDYkkzWndPQ0dESk45ZVlsMnB2NFJKV2FxNXpqQ0Q2aEJab0RZbnRrQUNkM3d3RlcvblYxa1MxR29oMjhZbzBSM0x3VlVGSjAxcDU3UnpBd2NIMlY2ZFdpVnBJWGh3WXRBd0dyMVdxcSt1SkVUdllUci9PNnZsbDNjZ3NTK3RtQTN6RFUraWk4T1NvWUp2Nkc2d0xiay9ZRDVic2FGSmxqcW5EM0V0MlozRkk0Tis5c3dsbWRkUkVEYThHWlJzNEczbDM0T3c3RVZlditnZGNuZjJITVlTYlJFUlM1R0tFYlJkQVZKcENrRnFick5nNEFZSkY0ZjVselhQcENIQ1VLOHFqS044ZGVFMUUrNE82RzdWVzJweGJrenpPVUlUUXlxeGN1ZDZNWjhld1ZtT1dwVHZ1MjU5VkRlaUZNd3hBNUJVaE5TczJkWHY5QUZyZUpMS29NV0tua3BVYjlncW9tVnlvQlBwczZUc3k3V0FFQlp2bzJ1Q1gzam1ZS0NhMk91NDg2cDNiNGovZStjdXlqRW9YRzkzelZ4R0w2QktydjQ4L3lva1RtS1J6VEhFZDdvbXVFMFRMTFVLMkRTTllaWCtwWkw3b1EzZG5iUnk2c0hPRVdZdHY3dHdmZXZ3VUNVS0xsUlMwY21XNElZMmFFMG0xdGR2azQzeE81cFVsSHRSdEZKNE9LUmI4dUVONnNsTURxTVZCK3pMUWpNU2FhbWlQazQrSG9WM05OUXNkYkEyZnhsL0VmRDUrYVBYTG9oQVdzNDhsek5hODhQbEM4aTF0UnA5TkVzQUE3YVgzei9LN0p6MTdIN2FwZ3cySU1oMXRyTVEvZW01aHBmS21WdEljVGYxUmhHeUJCS3ZLc3B4YjltQzJrbG1abmlFZ1lIR2JjYXJRSkVJWU9GdGQwZmtwUkx5YjlvNVptYXFSTWxrQ3hWaFRFa3l1a0w2cTliQytRRHd1RVQwQVBMQ2UxNlJjNGc0b0UyajF5RGwyOVFPUnlMZkdhKzJHZzNsUGVBMzF1Ykl4aDdKandua2d0cnp1L1UxbTIxNkdWcERWK0R1TFIyWWNHVk5yYkNiWjN5NE5yaldxUkg1M2FweGU2SExLRjY1MkI1R3NPOXQ0bW5FS3pFRDF6ZUp2Tmk4R25tRHZLK2tTK2hDaDU5S1lJV0x2aEdzTXg5bWJEanFjUG9WMzN6V2hGSzF1NUR3UzNhbU5oNnE3NDNQMkx0YWtkT3BiZnZ4a1hZdVpISm9LNFNodGo5cnNEcUxuV3dHTnA1N0dXQytIRFZoeXpCZVU4b2Zhd2JDS25DUnliRWZmWTA1T0tPdXRzOFNmdEgwWjJYeWI1VUNkL0hlNU1ZQ3lYWmJzL1poSmErZTJ3TCtGYkMwOHY5akdCeEl5NlNuTTd4YzN0YyswR1pRTFdDaGpzMW12NXgwdkpjUDkrMWhlZVhvOTZSNFp2U3NUNHFxZloycHhTb3gyeHZHbm9YZnhVOHAzL28rTzhzdlZiSjlsUFo1bGY5NytNbExpZEttQzhtNjBGdlh6VzcwK3ZkWFg5VmdZeUUyR0pxS0NOYzkrOG1EQ3J3bTJraHhWdjBPOUNuWVZHN0wvMDZScUtLdDREekhoWDhIUHJxNW11OHhUREt4OFhUT3VBRHZtQkxrb3JrWUdZbmlJZGRUS0lWT2xORzVQeHZuYTZqL0IzU05yc3dVQkpnVy9BcjJQN2FJQ01OblhRRWJYYnBpNmZ1cWtXdjc3NFFLekpSQlpEb3ZyalRwL2lyc2hCTXNpVVRmQ3YzRmtxa3BIM0NuMStyY01ENENFTkxvQkpIalE0OVpaS3V4U3h3Ry9BYjdmamFTdTkrVisrZEdYWVp0b0NoNCtRUTA3TW5tRWpZVEJnN2lVZjIzOVRZelhwK3pheldpd1RvQlFjTXhKL0QrYUg0RzVhZ0I4SjhDUkQzMmNDUTlKUHhxSTZwU1dqL1k2WW9XWTlqb2Q4REV3ZWwxbUIycUZyVXF3Qk5EWXZrQnJMdlBjRTNBZU1uemNzbEV1aFAzYkZUWmtwZmVFVzJoVHdKTTJxL0RTNDg4ZFVBKzFsNjdlRHhLMkNxWTBOZnU0cWRqNVB1eCtITGNZRGw0SzU4Tlh2dlZ1TmFDMGZRUjRRT3pqSitDbSt1UmZiMi84aEVMdDhqbXV2VitSa0M3aVp6dWdVc0VBTHZhTXZjNHQvRXZVbjZCYU5hUGxubldtRDBick5PcjY2ekNyTUlvZ0dPRXRud1M1cHFpUDZ4c1pKNGI1aWJDb3pybHRKL1VkQWJUcU1lRld5dWs4SkVqSERtVEo3VjJCUFB1ck4ySzltTkwwSVlibk5HQ3VWQVcvcnVyZjZZdzhSa3ZVUHBzYW1hNElobzB2bHRXeWNGU2pSMHMxS2E5UjN4RDMxWldhOWZtN2pVK1M4L3NuU1M3L1ZwUWNrK2RGV2t1RjlQR2xlL05VMnRzVTJXNXVBaGZJZldkeVdjZHI0S1JLT1hMK3VEa2RXVTAwV3RHMGg3eTFYWWpzbDkyMTZzWnBnU0xubGhmNmZMVklGVVRjek5ldmRxS1Fib3FqY3RxS2laNDhVYytvVDM1U1hYM2xYc0gvTXNxMVZhSkVlOTVwWDBJeHI4L0ZvQUF4cFdkV0dsUWlSTE93T2tmN3pOMlJZVW9pR004M3doSDdMck9jUEtYVkFEVUc5Z3V2ajE5ZW1ZTHRJK0h1SG9NYlV3VEc2SFo4b2NyQ1hOMHF4S3dWT3prZmpnWGdSZEhTQUhKV2pKQnA5RW54QjJObFNoZmVaVk9lVXRTdVEwSFAycm5aTStCRTFrM0FUcmVtbDRlODUzbGRkNG1BM3d1TTNER29WOVdocGlaTmtDMWhpa2g3R0JkQmQ3dWhSVXNoU3FPT0JmcHZqTllveVdCc0VtbHBSRnhzc1NZbTZhakMwdXJ0ZlU1Wmg3bU8yQnQ5R2xKVGg3SUJKNW5DRlJxYzdHTTFHMnhyMTJYaXZsbC9jRGdTNEFKRDMvK0RTUnlMSittY1E5QkcrNFNTMVJDenliS3NtK2N2Q2tCZENwK3FYTVE0ZVg5L2VtQldSTDMxL0ZwZXJaSzQvaDdic3l5bllxMEJHUnlIMWxsbktSc0lSa2szK1h4NkE5MkNHVUNET1psOGZaUTVSVDZLSjlOWGdsWmJoR3Y0UklrNjFqTkxkM0ZseEJnOHU1d0N5WjZPS3k0LzJNams2bDVFL3JhcFBsOGNiQjFkRGwxL2NHQ1ZRdXY1TVVOcllBMkpIbDBoSEVyekp1OEZLNFNab2pBMWtWVXZTK3JRaDhjWGo4bHdxSk9QY1c5SDJscms5OGhwTmJ1ZmEvUnE5VVhSOXlRS2k0UVp5QWEwWGQ3eUxjUVFEMWNBZ2JvTm5YbjNoNytrRmkvdituMzYrdnBIQUIrbVJRc2lJeS94cFBKMkpCR3RjWUxXNExGVXo1Z0pVdXR0akNDNlZBZE1MU3BWZFFLdDdYTFZYNWxnYmcvSWFIM0RlbDM0SmRvUk16akxxY3VvSGRUKzZEV3ZFamNhMVhjWWRicDJwdzdPMTlPNm9FaVdBRStvOTVjYVNDWG9ydm5SWHZDQmxibzBFenJhUTR2czNlOGhySGdOL0UweDExS1RFY3B1RDU1N3Q1QjNieHlma3Z5ZkJzekJ2dU5qenNsWldpUWVrTVRRVGY2T20yVnVMbW05TVJKWUV1bURsR1M2eXVjL29CNTZVbW55ZW92MGpFRXJvcDdnSXIrdW50VkE1Q2RCZzZmWjMyQXFWb2VNK2hObGtYV3p1aUZ3M0FzcjNFVXh3TVdQRjVQaDNnVGVwams5amJjdmhLNjl5eHVueWY1MU9rcnQ1OFR1dTBOL0pTODNJZDNBN3NvL3paUngwYW5pbzUwZmVSbzZ2aVdsamtmb3dmUERRSTVGSURIL3hWQ042QjRPUjlFY1VqellkaE1uVTk0aHgwME9ubXB2c2oxbUltdXJhdlFCQ2JpQTZCMEkvQ2lTbWtEa0NoRW8xam0xNEpJQTBxbzBwK1NOdzZROUtLRTZJTHMzRm1LZGZTeUpYeCtTand6aitwZFA3Wnd4alpCTFg4ZkpxSkJlU0VTTExGTTQ2Mkk0alh5Ykl2T205cGpaVkVmdVEzSm9VQ3RINnVnbFFMWmhVNERLU0gxSFNtY083US9VKzFKS0g4eERTeStaMW9EaVhyUnliNnVoNlQzOFNveThMckc3eDI2ZEFVTkkvRzVHKzdmYkNHTU5XdFZFU2tzOE41SlcrQlU4U01xdy9USkxNbXo3MjB2MHdZbVlySUpzMXJVeTlURm9namRoUlJIUmhHUWc2cE4zUnhaT0JWQUVrRG41ZzJCSjZWM1BSNWFMSTFrOVVSTElvbkhLR0RrSTZ3UEw4NFQ2OVBabE83ZWo2L1cvNEJ1WGhFcllGTjVXZktRTFAwZng5S0ZTRDZkNVJxWkFKR3VkQ0NSRmZnNy9kYWQyRjdBNFdBZ1QrOFg3TkVJa3lLRjVOWFBmZ3FHeWkwa21ENGJXQTZhdVNFU2M5STdWaEpCSTFmeWFEU0RZN29hNlR3Mkh4dW52U1pBdU5EeUlNZmkrOTAwMGFIWFQxUkhHQndZUEl1elM0OFNIWnVFbWFZc3lLZkpyMWE5TWpXZGRVUytlekFxVDZMZUdia05ibm9PMktvUXBTL1Jib2RpQ29NM3F6eTdDQWxvSUpqNEpZb0JLM01mbTlKRUsveFQ1azU1U3RiQWtyWEZmV0QzY09rWjN3UUZHelFwWHRQT0NtdjIxYWN4UzVMdGMydHZOZ1VwWUtiNmhOYzQ0S1NCWUtoNExxbWdsQm9YWDNBN3NuT0pzeHBlQlloZ3V1TnhxR2VoOUE3SytwWHVqOXRQdHgzVEE5RmgrZHpMeVMwbHQ5ZXVXbldYdGg4bWRVbWJ0VzdkK2FCV0ZUUTh0NjQ3NUpya2kwWkIzSlpWUFpuK1htcENoWkxQOWtHajVJRDk4aW9sK1h6aW81TGpRTUVjZGtLUXZFYWpidC9qK3JybXFycXYxdXdCc2FFTkJQOUlINnpyNjV1c2ZJc1MxbHdRTGVaaERtZWF4b0dRdmZWWVRIcU8yQnpoVjZRWVdDTUc5SlpTMWZmYzMwalFkMzR1YS9hazBLZVp4ZlFEN2hpZFNXWTRKWUdSdWZlY1FzNHdrYmNqZzhVWGZweHBEdnJZU1pTOFdOYlVFU2ZIejd4aDBNREhOemwvVVJMNHFYWXc4T1cxZWFGak5MRFhqcTI5UEh6OWg2SVc0bWU3eGs5Q0dVazROVGRHc0tJNWRVdnBKQ3JlZU1mSHF5Y2ZrVG9VNnBScUxTSTUzaDU0bFpIM1hLSHM1SmZqUi9nV2pDWEIvMGk2Nk1OY3RsUXpGS2pzZ1RtMVV4cTh2Mnl1eVhjcWFVZFBONGorL0FkY2x6c2c0d1dMS2pocXdvalhkY2psR05vbEl5elltbyt0bUJKdkFXZ3RZbzVucGk1ZTFuNDFham1LYlFNMk92RndvTTNaU0lJOXBmeXA0NGMya1JhL2s1dmI4Mmp0WmxvWWdrS0VTVjBoL2E0VnRUa1VrWC9uV3BxNWVyL2JHYWFKNWdtN1Bod1hobTBJUjNSOHJsUXpNSUhUSXVPVGJpdUdScmpOaG9lekJNc2RYZ3FsbzU2Y3FmQ0VmVldoMncySG5LdHU5aXhLcHRRYndmb0NrMVEvekpDV2p6WElLOFp6Q0U0TU1sNk1VUmJ4MkFhZTI3VVgrVXpuRTZSU0NtVjVKOTFJUG1VNUZ4WTBheU5ORXA5NlRuZkdoVjdUT3JUY0RGQmk5ZE0vVEVKNXhrb0NINUZIczVYNDZYVnRiMHNSNmpvUzRaZlJQMDc0dHYyNDhPL1VpOFBnOXhaY2xMb2xMbnJUWTBwVDVPYU1kMGhZcDFLYWFiNkp0MzQ1WjNEamNzZDRYTHJkQyszMDhPYko5Q05FZ2VqRHM2UUlrdzAremxMM21XaXlMazdyaThzM0pLcVBnMG5IYUdHZXgwNDhjQWpreUZnR2JHQndFakZYeldkTUdkSTFEalNpSnhtZ3ZOWXNURHhkUDg5WlM5Q1VzSzRJZ2hDZm1yVU1KQXVpT3lmYjg2aEp2U3IyN2FsM1FZeno0cVFQTCs4bWRHVVhRTGlmMXptbWRpUWtnNVB6M0doU0pEOEVGRmlSOGhueXlXbGVSQ05ZV08zS3VCZmdLekJxNm9oZUxtQkJ5RXlnNzUyVllPTTNyOUNHNElaeWVvVTRtb0FxWkxEWVZJbStoZ3N5bDlxVkRNWE96b0tlWG4ycXRTdmtYeGdkKzgxL2N5VGRBUTUrTmttWXlYV3ZJUk81WnBTVnIxbFRpU05RaVlOWFNqTitveWtGaE9ieFA4ZkI1QXlhcnF1aHZwWkttcmxvT1lJcFpxLzY3TldjYTg0aHQxOE5JNUtIZllkeWxGMlhvR0NhcFFLWWk5VERDQ1M3MUo1MFBLMzd2ZVlCNThZYnVHdVRRcXJua1FVWXYvOEFzMTR5QkZweit6V1pOYjdYV1l2UG1EcCtBQnRTN2pMcTdkaXFzSmVxdHlQdHY0Wi9DNW1lWjFBTDh2NjZaZkZPRXozRXdOaGZid21kSGR2RDlhRjdrY21ydGtuUllWSXhwV1ZDV0dTb0RKcVBFYmZoMzNVTmFzamwyV2hTQWR3Q0JrcGxBUDJVV25lVURSRDQ0MmowVmVIWE0rL1F2Qkc4K2c4OWxlMDkvdTRWRXZLWkRKSHFrQXJHRXJ3ckdqRkFLaXFpbExlU3NERGNHL1d4bFU1d0xSaHZTUXZLdmhBOGQxYm1nOU9iTnEwejJKVFhHdFlaZmlBOUwrRk1TTlY0d0dHc0pqUnVWbTNSM3BDeURYSTB0VFZZNytKbjVoSnYxakt5NWtOdElRU2hBK1RpMElreHBXNFRiV0tWVk5UNDY4eEJXZVhMekhSSW5DSTJPL1l4ODR3YkpTV1dXOFAwa0xYbVpSNlZNOVVLSkVpdUQ3R2taOWxwUFN2SWF6ZEFZalhWUWxtRUYvWjhrNVhWai9EdUpmbTVXZUdjVDc1S3F6clhQSXlvTEdzUjA5SGlqdmhtV3BteGRXN29yU1VYb1o5Y1lPM2pGeTM5YXcrTkp6Nm1NK3V6K0FGbmFNYUdEQ0tuV3RrUlNORFpXSFp2T214ZHBWWTM4ZWhNM0FBVGZaQkxiZThJNC9ReUtneG9KVi9JUzJQNWpkTkgzTTZGZkFLNDc2YWlDSFM5TTNBeHo3czFjS285bStXMTZRWkI3U0hYbTZVL012U3ZQeWptTFE1M0VaR0ExWUNsSEFLYlVTcTF4VDMyQytBUW1Zdk5qOFd2eU82MnRUbWhiMW5HbmxqZEN3QzR0Qy9GZ3A2SXRKZDh4bzBUVHZ5Ylg1ZTZXRXhNYmUrTlIwbHIxZGdMakRrODBISkV2SHRCMFVlTys4WTF1VEFlL09TVlBDU3Ryc203dWZ5MFU4NkRnYVJiNi9MQVRGeTVJdnNXUVFEdzA3ejJzY2Z3NjIvYjc3L0RYWmJQNzVjalBadEtNMEY2NkhHY2NJNThobUlaU0FTVDAxZ0xFQS8xTjNJUkhZRWk5RG83S1hUdXZRK0twenRydmVqMC9nVEJmV3ZDdHFQTkFDbWlMeFV0M3BKVVAxdjdBOVUwa3d4anhxRzJBa2UzUXVTeTNlS0FuNjdQZ09paE1ZMFRweFdEUVdEQWZ2UlpNZldhd1A5V0FrS2VLOEhuZStvZnVzOS9JcVduTHFxNTBiVCtnYmRyVnlZODVKREJYOVpqc1FkT05kWFg1M1p3NXpBK1pnS0VScjFwOEZUZy9Nd01OZmxWb2xucjZHMG94MFIvOGZ3WG9MdXp6a0owSExXNzRIWXRkdjF4NEIrdThUNHQ5S1VvRFFYTWkxcmpsdEkwSm1UbHM4U0JPY2E1KzNWSlBNYzhRdlhrZUR1ZU1qOWJKT3JVZVNrS1F0aXdHelRRMmpPUmFXTXBIaTRFTWJENVFKNUdKd252clpYY2lTOXhkRkQ4WFdZZlNSUk15U1VxT3VrMWZmdU1ta3RrSS85dFdrRDFtblVBY3Nud2dDc2RBL09IYm9VMDNCaVVTR1FjNE5COVdXMmFMTDJPdUxVWW1OS2hON2lNZ2ZCbUtVZ1crM0k3UlNCV3lTK0ZNQmk4bzhja3g0N2J6bVFjRXRlUGYvOUMrTzg1T2ZaM3RsYjZJcTBBaFhOV3Zlc3c0OGN2TUhUU0M2ZS9VaHowclIweTN4eXp3UXhzS3pGcCthS2RTMzJVcHd2aDFIaCtWUE5FdmtpT041a1BPQ0pkanhsUDlQTmtPRzJqMHBib2o3cDNremxQZzJBalB4bEtCalYyakhBU2lFcERKUGU2S0JyL01wUTRZZWFnbDB3RXMxcTN3Nlp2THpaUTk4YkFnTDU4Y2N3TDJ0N3NIYWpsWVZCVkRTa3JxWXBMWGRTZzJYZDVHWjduWHpjbDVkdllnTUIwWkFZV0p6M2cxK1pkcVIxa0lMcHB4a2YxKzgxWUt4NFpEVXBqMjZWOVl4OTNWK2Q1Z1Y1TFdLdnFjRXRtM1hGdzVTaXVMTVMrakxabmhzakZKV3pqVklySkZmUFpwVVo5OXhSQXVCOE8zQUh1Z3Y3UVM4OWx1U1JxWU1ScFdEdVJZT0NvVGJsd2tlZ1BTRlFxWjUxUHl0SjIxQmttb0pWdXIxQllEazErUDB2b201UmI3RzU5a3dpYmNJSHpXN0tpc0lTMkcvWWh4WjFETFlReFRUalZ2VExoRVJIWmY2V0Rla29nSUxmSzVmUWhvSzJ4YmI2Z1JEajZlTEF6MWMzTlBjUFR4bDhQVk1QekNVL3I3VUltaHNYdjFad2xhSGtiZ3MzRnpURlBGbyt1TlFOYXAwd1pOREtWWmlVSEVrQnI2RmpLMEhQMlM0Uk1ZUkZIL1JhWklMcGV6YTRpcnNTK1lDVkxZOEd6REdrbXR3cStIWUZYY1BsTDB3TGlsTlFzNlZmZm1KZVZtcHFMcm5SUUI4aFBqaGJBdklxL1JLcEpSTGJjdko5V2pJYkxySFF5azIzamJzb0FIR0ZmOG5SSHI1N21mUnNZdGVUSHRaU0JoV0pTbFYwdFdITksvWVpsME1uSUVmOXBBZVhMT1JUYnBjRXd4WllkMkR0K1BpSk9xUlJiNm1temJyVGxmUUNuRDl2eUNQTHZNRkdhVzdzVFJTblFPWFRacVA4TDBpWjJvWFQxQ1ZNTXZmVUdHWndnZHgrRnV3SERjUDcxUzlSdm1LN2pPSzFDeFFIT0kzaWFKQVdybEY3QnNGcE5QMkdBdnFaY0hpeHh3Y2xMU0tFeHVqa3FjQXF3UlBHcTlWWDl3Z1p1RkhGRzdQOUp4eU1mZ1BvWVhJMDIzWGkvTE9NdG9xaHhFQ0xHeXpsclhNQUltZHJYZjFCT3hGcUZ5STlqQWhxQ0FXWHAra00zMHVNbHhJQ0w3YmVkK2ROaHBjRWZ4YXJmVmcrQkZ3VXc5MkwxWkpDVWkyWnQveU5xN2pGYzBmRUhweDkzc3l6bjIzQlRndDJqcUEwa0kvRmUvTXJ4aEcrTUI3dGo1MjljUGx6MjUxQU1QanI5Smk0ekFXOWhVWkVXa3BDU040RUxadmVLdU9YL05jSWY2ZlJXaG44N2pPMmdvOWVLQmNYRG1Ca2taa2lwS2k3Q1ZsdWYwdGllZkgxbjhWNjBTeGFhUmZJdjllcElaenloNC9KODIvSzVFRXZ3azdiTFI2dndEYU40UWxqR0U3bFJvUXU0dzRpQUh4bVFYVUR6WU8rTlRVemtIT3BvOGxiSDFveG41RFZnVFJkaUdSRGhwWUdHY25CQUtYU25aZ0RzWDlXb0JSR2VHZlBRU0VaYmtCTzZqeWpFMU4wcDdJNTg3YkRlV2hSb0YvcnBIRDBLalBmK0cvQ0lIcmlCVFlnSU02dzZBMVJXTng4cER3VUVlbWtFcTd6OFFzT3QrOEppSVdlME5YdDRPaTMwaG52cHhZTENsNVpWclFSYkkySlQ5clNLeTVsRGNJajdpeUl2cEZBNHJ3OS9qZFd5VHNzUTJkRVdaLzEzMFlib1BwUWdJc1pYRWpBMXZIZ3FselpjYXNJZzhsMXRaSUZjNGVmMnBGRlVmOFVaY2tRMDFoMmQ1Q0QzZzJwUHpGSGprLzloU2JJSDJScmduYmdhdCtuQ2Nnd1RsRXdGck51MG40VkVkd3QzS1dla2FPcHRZL3VreU1kcEdSdUVHWVZ5RFBLaGFvTlh4a3A5Nzd3S3dnZGVUOFI2NXNZZG1YaEZDbkFzYlV3bDM2dDM2ak1YMWRZTVJPQU9XM2VFRUJnYjNEcE9Vendld3NaNDlIaWdVbGxka0Jya0ZoTUY5d3dXTzBHb3hveGhHc1lueDZmL05VSVpFa25ielo2UkVwLzFTQVVyOEEwN2ttT0tvdHlCZVllQXZLT2ljUU5tYitZOWJPZjFpb0ZTOTFjeGVuWXpsVGpWd1gxQURyZ2J2WnNZWVREVkY4MCtXU2JzZkd2RTdYZ3pSS0lUaUFzOFpoOE9WUnNtb0dQWHJTYmxka1lqSFhwN0RDWjd5UFl5NTFGaFowZjZpRk9ndyt6NytFYlhuYy9TQmx0TEo0NE5DUVlVT1pkeWxzODZUczZhWUNlTWNJZmZhcDNhenhoVnZMckl5YjgrTjdtb0lwU0dBZnovRjBybUowWFF6SlNhOFF5d1g4TFdqZnphMnBrei8yUVVNTFh2cVhLUStpa3Z4RHRCNEVzNGpWVjM0K2dmMys0N2tJemhYOHk2dGVhZUI1Nld6cERTVFAza2FBVEk5VDNmQlQ0ZXZHUzVOSnhaSVpBWmNRWjlaOWJLaTdOSmlqcHdYdE9ucXlCWEFCNzhpRTF4QWZOeHgvNnYzOWFCbU9aYVBKVDcxL3k4bUhjUmUybWhJcXV1alhNRlh4V1V6MDlXWk55a0V4WFlUeTdDd3RyRkw1K0tCN256MHRqeW5CQkJzbGtXZ1h4eGR6MXo3c3pQOGVGdWczaHZrWUNGV282RFArdmlYQlRDQTkzTEcyUjBHVHFRdll6S2FobE1FWDZlTFhJcERWR1FvMFlhdWZ1REkyalVld1pQN0tRdHVhNGlNbGpzYWxGZnhqYXpoNTVHM3BiK1hqa2JlWHdPZ1NWejVHWDNtbDdyd3puRWtsdXY4VlJHOVpzaDRWL0NZK25XZzRpZzY3YjA5cDRkMHFGTkpSYkptWmVuVXF6bnhYOUtMdkg0aW5ON2FzZS9Mem04TldQaWw5YUs5bDdLM1ZLVHVGQVpCcWsvWUFqL011NkEyZVdtM2I3MTU1QklNRW5iL1JUYzY3dGNQTUhKV3krWUIrc1VMMVdhUG1wdEIrRzJGTjYzVnNhOW9yOWp5ejZnVEpNZEtVNThUYXFjTEMvVWp4RjBUbEpQa3NENUl6Uy9lWXNHdWVYSnZtUFVwUGxVQWh2WXZvN2hFc0dVZm05ZnRFMDlGV2cvMk9Gblc3cFpDa08xdUVqNnh5c0xpblUzcCtjVTg0cmNjZHNrYmc4S2RLNFlYdkRBdk9YM01ZS3ZkZVRVeHlPY29KNW0wL3BrWGVwSjVPM2xqM3ZMYVRGRk5EVlltb1Jmc2tiZDgrVnVoVW5EVjZTNS9pZ3FjNzNrdUZEclpDYU8zdktTZFd2M2JTT1FydWZOOTNKY3pXYzNhTkEvS2JYTS8yRnJiUkVSYURKUnNRdTNRS242Z3NRa3JZeldCbC9SazVyUVpxSktIMmZzN0VDUEIraDhTMTRuYWQxRk1RWFNPU1djRnU0NWRNRUViY1pYTjBkU2xDZU5TWGhKcSszczJpMkMveVZlYkUxV1dIYlgzeVRmTzRVNnU0V0t3eiszUGZ0d1BNY0JTNzZXYXk0bkM1NGFySTdIMXhXbU5CTDB1cTJvYVVQOCs2TmIzWStKNEZLbFpUZG5HNlVnT0pua0RFZ0M3TkdmWFVUeGxNZHBVZzBvY29IL2JCYUFodHZ5NGtwNFRoK0JRZEJLT2Iwd0tPUFRBTCtoUWtNQlowUkZmRGtoVXQ5dzdEOFNQbDV0R015cDhpbTRzb0ZkODFvZTNhNW1TQmpIM1JUbUlNVUhWT2hzNjVTMHcrdFU2N1FSbGRxSTY5YXVCc0taa1NQdmlRWG8zdjh2emFDRzFSb2ZEdTBPMzdPMjA1N1gydnhqZm5YRWRFczJaYW43dDBWVDQ0NDhML0pWSi9tTzN0T3Q3MFhlOXVXa3Y5VVZSd0JOaXVBci9DNHExSjY0MFN6T2lObmJodFFjMTFhNlI3WHUwUWpQTzZTWVlvT0FNeExMbmMrcUtvZ25oWTN4cmhaZVVJSENuVS93bVhoSG5McmtwSlduSWEvcnBQQlNMQVE2ZEVuRDJhMlVUUk9taTYrOG5QUWxZd2dDQURXTllxbjMzN3VacDVzNVFmRm8xSnZwb0NxVEpVellsbGt2OFhJeUpXRm83c3J6ZjhFdmZYVWlQenh4bCtVVTJJNmVhZzUxQ1dIR01UVC9QWmlnK0RvQlF0bmVhZHFwRTNsVHpFK2ZsK1ZBNWtMYXFXWi9Sb25VUyt1eTlZdm1BMm8xS1o4dmZDLzloQXhyVjFhZ1JpeStWUzJ3bjhOMGh0aDNQUDE5VFZwcHdsbUd4SUhWWXU1SWJ3UkVyQlZPVGQ2QUhnT1R1YitCbzMwbktESGU1d21kc08wbmlpTGxkRGFnNy9iQXVJaTltZksxS21qbng0aEFTNjJyTjd0V2QrR2pmYURYVVY1V003RDZJSTIreDI5RHF3dHdPY1hLUDBKczdCTzUxdmlsbWxFSUl1VEJXbHhDblU1aElSejU2bFlFK0F6ek44Tmg1T0E2ZXRuS3psWmNTR0NHaUFnaDIxN0UyTCtHK2liOXZFVjlrbHVWZ3UxeDJqUkpoNlFrd2pOSFFwTDdzY1lSbnJ0V2FQc3BXUDQ1SUVOTTlqeTZuOHE5SkM0OWdyMXlkRjMrc3EwOHlkUURhRTdKV1ZiV1MxQUpkZ2JhRGYyUytYVDBLZ1djSjBkSkRrZGIxdk4xWXBJKzIzMEFRTHJDcEFtREsxQVJxeVVXMm9zZXdRMFpiaXlzbEZsQUR5dG5aS1FQRDNkeHFXYU9Ka0tFaFNyK0IvR1IwQXA2YWZPeS9qeE9GdmJoRy9ja2llTUVnQ3I4RW5teFB2cyt0QXFMRlhxZVBlS0NzaHkycFkrVTFYS0dYSHlLS3cwWXJJTHBNYnRXRkFnOFg2Q2JzcS9xNHlRaGlWNUNDVmdBU2NCWDVwTTFjUGdvWldNS3RhamNWRzhaT01LbTUyRDhsd013aFJ0d0NsQ1crMUFIOURQOVZvVlhndzlXaEdCb3FEdmtRQVo0cGFGUlhNbzNGd3ZnV0RScXIyVkc4SmNIN01GakRnS09oUXlSL2pVYmdrSDdJbGFLTDJGZ3Nxd1RCdVR2NFhFT0UvZXRJR0lyakYvOHR5bGprRDVpTXFJMURQWHA5WGtiM0w1SDRBQjEwSXhYSjNoY3RFWVFIMkVIMitlbm5uU00xUHo2LzN4NTJiNVZ5RFpIeFFQaktFYTlNY0ppNTJsVG5zdmQycnNBbnh4dCtrLzJscnZuRmFUZDI2RW1DTFFsQm1vNCtGQ3FtMGRHZkxTeFhxZHdESWZDcTBGUjF0YWNwVEI1a0ptK1FsUFBqMEQrMWkrTWc4ZWgyYURBU28wNDhLMG4zYXJMOHZWS3BSeTcvTnU4YXhXaE1PWnkyUVd2YWhtb2I1dG5YSWMzNSs2RlNUQlB6aUdXZS9Fd1huYnVxaXJXNk5RbWYvYitvZnBWRTZPa3pudm1LVXE2NW4wZzMrMGp1WXBIa2dyRWg0V1pUVDdFMEQzcWZQQjlla1hHQUJVRDh5Y09qTnNpYmgwZm1hOHBDYmhlU3Nuc2hkM3owYkZwR2JZdjc0MFhCdVV4eUx1Ylo0cUU1N1d4RGkvZ1cvVTJWUjRZclJRQTFWSFZEVWpKNEdoKzF5RGdSSFpiQ2FiZ3NhcVg5OHRqTUtaSDZJZjRDQlBkTzRZTnRNK2ExdzNQK0MxcjBYWEFvUFVEY3dwZHhCeG9JRXkrWTc5ZE1UMTc0NHBjK2hGQ0tCQ3J6anQ0U0JCb3pZNW41S0c2YXEzQzAwdzdjcmwvM3B4QlNnbWJuVmRxMXRhTGgwWHV5VW9kdU53T0lFWXpEeXBpN3FwZEY3US9CSHRiM0l6cWhUalEza3Z1SG00N2ZNUk9JSko3RW5WVGRHWW9QQWNvQnh1dlJVWFFvRmpsWHRwc0VMaWhYUEdhVTBwUi9UTWp2eFVsL1ZRcE9hbXN5WGZIdzJnQjI0b1pqc0pnZ0UvV1libUVEYjFZeGRPKzN1Vk5xdy96TlI1OVc5MVlua0pCWU5MYndFVTI0cTJlYUYxd2M1VjJQRGhFMk5od1dqM1d5ay9qMXM3YStxQ2U3TEhxNUZGSTBCS3JTdXFzUFdLbnMybE94VDFPcnNkS0ZENG5Va2ZGSUI1SlVqeFh3RkZNOER6UCtmS0h2a3VJMUpibzhpZTZET1N6UE1NQ3Y3Q3FqYlZadUNxV3FBMDJGc3VNRFVMOFdnaklnRWRLTENpME9FZXQ0TmpYb1UvK0c5U0MrNXNiYjZJMXF0L2lkSkhETTRtU0V3TE5KbXh2UHNPS2lFYXllT1J5Q0ZxcGFrcTVhcVQ5VXg0a0hvbWd3dlZZSXczODVGT2tubVI3ZFZmamdOV1F5dVQrVTF5eGpQeFdFUytFMXQ4NHhqanZiUklVKzlEdDdPMVllLzlXZFd5RnNnYit3U25xaUJWZkJ2SUhRb3NtNytFQ2gwQ0FhVXB4cEZMdHNKWVJtTzBRMU1oSmVSNUlkbWpXK0g4SllTQVMwYStPRG1aVW43S09vOFBIb09CRmhRS2NJMWMrV1k4dnV1eE9UL0JUeFFDQllycSs5cldGS3lsSDBjZjcrb0VvdW91Y0xEeEo2R2RmcGJPZnFRbWRxcjhlWG1SS0NtWFdmRGllOFRNK0dJa3c2NEVYVGxxdEVucjFGSDBYU2x0MjFDNHR3RGF6cDhBTkJrN084R1o5Z3N3STBRcmVLYWlwTDVnRzlGcEp3b3FqSE5DVHJ4Mm51L2JJVkgzTTRZZTAwVGdZRVFTbW4vbTd1bDRMWkZSOFBRS090TGMzZDJha0JpN3RrMkxPZTRBeTlVOHhVVG9PcFV5NDkwQUNyS05DSFQ4SDNSOEk2NnRJRHByNWtpelladCt2TllTRzdJWStTSDZEY0V5bXRuejBmWXJYTGNzdkE4WTNNK1RIMFdVTlViL2VIWERHaHpQZnhCM00ybi9LY0pLM3VUNjdERGpPNDl5TWJmUERPalFFVy84OTlqdEkyVE96K1ljWFdxemIyeTRtQWp1UEhFYnFxME9CTlRpMlJSelF0SzFnWm9oMUJ6Z3NqbWdXNEpEZGtvVTFnVW4yOU03VmVVLzNFQXBSUlFBYlBIcFFUYmRmQ2UwaWdNZnJKWHU1M3dTNDAxbVd0VitYUlFiYVVuS2ZzUEtycFo2cmZmcG15b0YyeURQaDY3eVhGYklrS3ZVUWlia0J1QnBhclRRZnZ4UFVtdnNLd3JPR0F1SFloU0RmM0pJOXFOWStDbHl1VmhWTHk2Q1BVSnlkUDhEOG5wdEU2b0psWUNTamlVWXlaVE9PMVN1SVc5R2hRMDFCSDRpN2pUaFhzWnd1VUY1YmQ2VmRrYkdEakcyTS9IYzVBTE5qeHdKVHc2YUlEdGthS3JRRTBJL2xvZUVWZ3FuRVZHSVYzMUlEK0tocDRxckkvZGlRa1lUWlJTWnltR0ErdmZSMGJwZU9BMDNJQmVYQlhORDl6U29oNkFISEc2c1VpK1NWR291WkZicDlrekJoa0M1MlNCVGpnVzRselNEeGV5NStkVkR0NWNIRUhhcGpEVFZIcWQ0aFZ0YjI2c0o3UngzK2U4MDU0Mzc4Y2hhNE9zVkdPZU5WZnlVU2JFSGJLbGhmTkgxcnEwM0JWOVYxc2p2UUVBOHR2SWQ5dm80Y1ppNUkvSmhtbld6ZWszWjVCc3VpL0ZLZDJRaTZYRWFjeU9SSHRvWHZqeklPbHc2ZTB0YVNlYzkrSG53TDRuU0F0SkF3TEN1MmQwczJMSEovMDNKS2VuckxCbzJsOEhaSW1Db05KYi9rYmM3THhpbkpLV0hWQThUNW8wNlIrQlhXMjQyQjlRU0Y0VnVvbkZUZnc4WjQvVmZEWnFocGpMcmtTdjRNbzNwRlpHQ3RMeWdRclJTaFVXeUw3M3h3ZWFnSFcyN3IySzE0dG85Y1gxSnh1elhJUXkwUG1DSWFST2ZxN1U3TmZZTzZTeEtHRndxcXBoVWl2QWV0VGVYR2ZlOXVFdzhnVlFVaWgvYk1MdVFJYVQ2SkFKdFdacGZtOTUvMk9wRFNGQkpXSzlFZG9sRytZSUxYSUxENGJURnlZRTRrMFQ5U3J1QXl6d0NwZ1FzK0ZWb1BWS2R4TjJ3SUcyVGZWUHBtQW40NFBIdENaSlQ2Q05VZHpwckc4akZOOEJWZFI3TzVGdENjYnIxMHZ0OTZtZkcwZWY5WHRRQ0c1Mks5MW1VQlFCQmJOaTZWT0xHQ1h1dnNUQVAxTm1pVW1zemJvNTJsU2R6U01KK2Y3YnpxR2tqSUtlaWp6Vm5Ed3QzYU1FSVJpUEpWdFBUSEhCRUtoWTRJa0VNUVcvZTV6SVRhRzJPVnBmZ1RNQk1kVEJmLzJRQUJBQm9BUUFBQlF3QkFBQThCQVVNQ0FBQUFBQUZsQWZoQUFBSUFDUUlCQVFvQ0FBTUFHVlJvYVhNZ2FYTWdiMllnUm1sdVoyVnlJQ2d4S1E9PTwvQkRCPgogICAgPC9CSVI+CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I+MTwvTWFqb3I+CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24+CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I+MTwvTWlub3I+CiAgICAgICAgPC9DQkVGRlZlcnNpb24+CiAgICAgICAgPEJJUkluZm8+CiAgICAgICAgICAgIDxJbnRlZ3JpdHk+ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8+CiAgICAgICAgPEJEQkluZm8+CiAgICAgICAgICAgIDxGb3JtYXQ+CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24+CiAgICAgICAgICAgICAgICA8VHlwZT45PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MVo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU+SXJpczwvVHlwZT4KICAgICAgICAgICAgPFN1YnR5cGU+UmlnaHQ8L1N1YnR5cGU+CiAgICAgICAgICAgIDxMZXZlbD5SYXc8L0xldmVsPgogICAgICAgICAgICA8UHVycG9zZT5FbnJvbGw8L1B1cnBvc2U+CiAgICAgICAgICAgIDxRdWFsaXR5PgogICAgICAgICAgICAgICAgPEFsZ29yaXRobT4KICAgICAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPkhNQUM8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5TSEEtMjU2PC9UeXBlPgogICAgICAgICAgICAgICAgPC9BbGdvcml0aG0+CiAgICAgICAgICAgICAgICA8U2NvcmU+MTAwPC9TY29yZT4KICAgICAgICAgICAgPC9RdWFsaXR5PgogICAgICAgIDwvQkRCSW5mbz4KCQk8QkRCPlNVbFNBREF5TUFBQUFNcnNBQUVBQVFBQXl0d0g1Z3dXRGlZWEFIMEJjMTh3QmdGaEFBQUFBQUFCQVFNS1FBR25BVDBJQUFELy8vLy9BQUFBQUFBQUFBQUFBQUFBQUFES293QUFBQXhxVUNBZ0RRcUhDZ0FBQUJSbWRIbHdhbkF5SUFBQUFBQnFjRElnQUFBQUxXcHdNbWdBQUFBV2FXaGtjZ0FBQVQwQUFBR25BQUVIQndBQUFBQUFEMk52YkhJQkFBQUFBQUFSQUFBQUFHcHdNbVAvVC85UkFDa0FBQUFBQWFjQUFBRTlBQUFBQUFBQUFBQUFBQUduQUFBQlBRQUFBQUFBQUFBQUFBRUhBUUgvWkFBakFBRkRjbVZoZEc5eU9pQktZWE5RWlhJZ1ZtVnljMmx2YmlBeExqa3dNQzR4LzFJQURBQUFBQUVBQlFRRUFBSC9YQUFUUUVCSVNGQklTRkJJU0ZCSVNGQklTRkQva0FBS0FBQUFBTW5YQUFIL2s5OTlIR0dBZWRISWFDdWZJMVdCMEFrdmZqZzVKaUJOY2FIdk4xb29PVHM5Qnh2NXZ0b01tbkNWRnVFdEtiRjhJNjlqeEs4RDFmTElLajZkSGlXb3pOUU1uK2RuMlpYZ2wvamF4SjBLRGdIdUJoRmg4Q3cyK0tCRzBnYkNxd3F5WUROREsyY08wRXVnNDZWWXZ3ak1qSythdElZV0R5ak5RWFlLYTMzQmxxUkM4NEg1a2ZBd1VYeVY5azNLdWJET0VsZkgyTnNmWTd3K3h1QTdPN0pFVWhvMzV2TmpKcm9rUzV6TTRHT2R4Yk1IanNXcVVrSWZKa3IzQmphRERTMGtmbWs2aVk5RjczUENKUkhBVkE2R0swUVR3M3ZlVStYandyL0ZkMXYraXVFMVdjcGVLVVlOZC9CUGd5ay9ScWlsNS9aQVRwQXBMbHVGWTZwNmNEV3hGZlQyaCtqbWhScy9KclBUTFoxa2trMTdEZXpwSUc1OVltdGY2aE4xU1VVV3V2cUdQWEVNUnFJQ3dWV3p2ZjVhR3RRM1o1b2hvZWxBV0w4cWIxWkhidUxIQXJIZ2xXcnFoV3BPbXZtWUYvSFJ1T2JuTEtramptVXlNVEZ5WFpZUitseHZhVXYzeTNvZHE3WThUTjZrcTBYVnIzU2JIb0lFSkFXWTlaSk9yRThyOTNwODNSUmsyZUFzbTlCeE1DMms1aWFkZTF3OGppaHZYTThjZ1hWM0RTNXE4cHE3Vm91dFlJTFlUeVY2bVBFMnlYaWhZYWUrTngzSmxmV1M3RUMyYXVNUnY5dThMd1lZWUM3QzJaaERsallMV3pMaXpjdjYrRTlMdUNLZnYvZkMwZ1F5YTErVEpJQU9XUHlIMzhmWnJMSDJhNFErelcrdGt5aGVkTVRKZkhic0VkZWlic0c5Y2RSTDZsaHlKcnY2MkpFa0dGMDFjL2Z6VWN3eEVzNFNFK1hKN09wNWdRelBYYXVQWnVoMUV1K24vT1lBMEZXMTY0T1JiSUVoNm5kY3Z3bXVBSy82czhKazBFUCtsdXNjMVBRQnpueUJwTWtLaFJhcDkzdXlCWm1VTjVXakZYK3F5SkJGelAzS2tWNC83dUhGdVR4Y2l5K29iS01MdGdtTzRSNXNyTHk4U0NVVlZ2Wmd6YkVnem5xOExSQjFVWXhYb0ppVUlQWmJoZExsMnlobHptQWE0eWlaUXQwVE5lajh3MjMrOTYya3JXOURtY3FLZnlRRnZsU0NxeUU1eFMwQnNpcy9ZNVkvZGF1NDIySzMvR3k1VVR1UHNlRExnOGFRNzloYlRXTmhJWHl4UHhtdlkyYUtjQ2NkSWNZQ2U0bWVBU3YzVnV5LzlHUE5acFlHcWlDQUJZUHl4Yk9UTFJnOEJtbmY5TmZyK1Z6aGJJbHp3ZXluZ3hHUHUzR091d1FOdVNWd2kybGRMM2lSKzE5NWNiSHV4OG9LRFpncVBpdGtlZ3hGL09YdmZsQStwRC9xUnBpNjN6QjBHaGlYVlFDZnkyZVQxNnhKOG90eUdxdUxtS0IzRksyeUJtdFJoc0wvZ0RDRmN0VlJYYlZVWEt4Um91SHpSK2Rjb3hWTCtRK21PTTAwRHBKYzloM3hyK2FEdkg3V0dxOC9GOWgvd0x4cFU5TDk3SzdnbW5RVUFOaFo2bjRUbm8xVkhwVTNOZUtiMGhWN3VXS3J1cFozRGVNa3E0cnh0OXNvN2RZdmEvZytBZ1hCdHpFMkdIZG94VW5VQWZwTXhoRjliR2dHQkJCM2IwVmhDU0U5eUJOM3NIdHhEU1dsdkV0dm03NWdHSjZ2VVUrb1lhNXFCTkYxd2loaEc4RnVVOERXeitqUm1oV2NtcWhGYU5pWFNCSmRGV2lYdFZnNGVRWHFHVi9zK3B6Misxcm1XMTVzMnM5Vk1yMzMxdUxSUlFRa0lUWXJvRzJyd3FMVkxVMzRwRklHV2JqQkh0TzhRVDV6WThabWZNakFRdUlyU3N6cGZsTzNqRjR0S3ZFT3g4b2ZpcE5EaDBkMCtsYzNPOGVGNFpubnZxR2JIMXJKK0dTYS9EZUpENVhYVTdTelpLZmJuc0JWZzY5RlpzYlRWZEhqckJONHJMRW5aS2JoMnoybW02OUZXWEpuWUVOY2lLQXJwakRNZTVuVWJOaklVSlF1QjJaY28xUXhSQXlBM1B5SGxHNmFqWGRVamV6blFLdGpDNTBoZkJnT3BEK3hYQkhnTnYzNUQzRThxSzFCcEpQdkVDTEtyQ1dMdkdJUkJ5VEkzYXF3d2hoVG5ZK3gzZ2owZGU5WkxGV0JFc1RaWHR3WmY2bHcyejNZaXluVHVKcXNaNlZjbjh6THZZWFBUT1o4dWRLajgyL3d1SEpubzg5cEhJenVvS1M0ZWFGcG1IYzFNN0ZFSnRXTlp1eXUzTG1rMk44L0wwNUFsT3VjTVhpNkgxcDdyaVNQR3NWN2VYaTRCMnZtRnBaRDZ5Zm9UTXdJNFR5Q1R1K1lHblRxOFRUOGNHU2liSk0vNVBUcnhQa0ZIS1Y1VTZldmlKYStTaVhCclRQdzNuSjJYUDVqRENERmdOSWI0eEdYU0pWZDdMYkIwcFhiSWRJeS8xTG44UXFDMi9LZE5wOENzSTJNRElBMExJdm5OZjFldjB5TTUvb0pPd0I3NFl5eFB0d0Z3eU54akYwbXpxYkxkZXJSUnRZTnd5Wnd6Nk94ZFBXTnFTOTlqWlBhN0tlWHVxTksrMmF2c1p6OStPTVJKZFQybDdNL254NWhCT013cnYwWnJqcXhQT2hGaUVjN2FzUDhrWktFSFJqWTgzUnBmR1hScjVmTklYL0gyK2xmSDJlbG5INGVtY0NGVE5xQm0yMktiSG9ZQWgzcEZOWVBRZkwvRVNiNVdqY1VEWmlGNWVIVlNOZnp2TEdQZzNIQ3JMWkxmOGVqRzI0ODhuUXJoakM1VklKTkxMR3ducndZQmtiM2RBaTBOOE1LV01MTXVRZVBrQTVCaFc1NFJXTGZPWlB4RlNLLzJaMlhTSG1odTBWTGc4RkpYRlZ0OXBuL01MZkk3aVRXTUdpaWN4c0RjdjhPMVRsalE1YUtuVTVpTVNNWVlwWVdoZnhxazA2VGhDWHVnMVE4WDhCTnBZeFdEUUUweUdqQkw1a2lYTUFINzBJeVpQWUloVlZ2MzhlYXBneXJpb013QXNxWG9mVzd0V2tyNFMvMGh6b2ptN0E3NmNIdzBLZGxPcENoL3pWOGxSZ1RpdEhlclVhdFVUVGlWMlVudnp5b2Q1MHVwbmI3R29uU0ZLOEFoKzFib2RoZ1hMSWdFLzBrd3pTaThkZFc3NXZZeUtiQ3p4TGVUU250OHB2UXFaeDRUZ2NvTm1TM05pRys2K2JmRkdMcnJDRTY1ZDhzV24ra1E4Wmp4RndjZktjN1BqeXBLNTBIM004YWV6ZjdYdVhzend0ZEFZNm5TQ1gzQkh5M0thME1VWHdUckh0cjlzTU5WOU9mTXhSVEU0WCtFWlRSTGhWbi93L1Qwc0t4aEE1RU91V0xxeE9manhMQnJTRlo5WmZENnZEVGEzT051Y3ByMTBGRnM2QXRPdW9SRWpPOHpFS1NjbWJCeE1IM213NXlGR2xhYmRBQStyaFF1RENYNmQ1d0p5dFozS1NrOEM4M21zZXJoL3hJU1FVMFdZRExWbC9jdXpXNTk2SE1QMUFSWHJSbWlNMlRhTGlmenh1anpRWFliNEVMeTF2THdaK3lzZ05oY1FRVjNzS0JtUGtjTXpwcDBEbGprNE9zemthVVV0Yk5vSzNlNFNNeW9iZ3BpaDlWdW5laGpLQldCWmNyVHVSdGRKbCtVT1ZkSHdma2J1a0xaLzRNMVViZWpUcjVReFIxTVRNaHlZZGdmT2xMZDJWL0FrOEhaK3o4YXZqNElFUWV1V1M4UkdmQkpjOFUwTFpETlBrSG5sc0dtNkJCY2k5eWNjejBacExHcCtiQm94eUdOMVB0OUdlUmYvWHk5a2VLQ0E5Vm5pcWFVK0xCZzJwMzlHSjdFSGpoVllENDdKMVJpU0hFblE2MXhvS0cwZlFQRzVrb3VVUllaZ1loZkxTdTV3czlPTUJEamFrL2ZPajZkUTBYdXR5WTRuQ2tXL3hYdFZjcnNSY20xenkyUFVSMUMxZVhJN1NnZ2tSQUZIV25SSVdPYjdxQ2dQbWpiZFBLc3QvWG5nTHcyc0RlK3ZzSVJjcGF0bGRlWGVFVGhwMmVocDRIODdIM1dDa1BoNGdZUnROWXM5N2lSWXBQMGtlaXF0dzVmOG1iS0M3V2x2SHJsaTlXZGlhaUNLRXA5RlJ5ajNCM0tzNmFSdzZLMUZIc3ZSVGx6ODIzN2F3YkhTSzc4cGFqY3FyUnY2dzN2ajdkamdLTkJ3aFNNb1pxcDBJL1BZdFNrQWhLVFFvS1g3SHVqK1hqWGh6TURUUjVNN3BMODNGYXRVbzQ0YW1vSC9qdGJaZlVCMWRlcDRMOFNZWGVuTUpEbit6L1hqQmhTTTd3MVI2czlIV2ppZzlhY2NaRVllUUZvMk41cVBadm9EcmdocTZjdWxra1ZjemRVdnZWdzZhWTU3WVpMRWlZcDNNaVdiWHNkUFFJaWFPQmYxTWcyaGQzOUpqcGt2VUsxRlVhSVkwUFZMaCtoVi9lYlBNa0hDYUVQUGkzcTN0ZURyYUczTldQaTJML0ZHbDZQOWpOek9oeU04SFg2MDEydGxkM0ZrakNYREVGNmllTFFnOXducDMybW9rVExVV1cwOGRuNXZuUGgyTDhvSExyclc1WVVDM1ZGZEdWWjFVODUxMG01cWRVK3ZYRUsvM25aZXhEd2c4b0VEL056Ny91Q2RHSUxqOHkrdjNXL3dBTWRNeVlEWU1OcklkZG8yR1dJK1Rpc010TDlqbHpTWGZQZkdOUi9YWURza1lHT284UjZJbmx1UE9kOWxrSnhPRFBzT2FkcDdDM1RnRnN0bDU3VCtYRGpvSm84eVdLQzBIUVByZG9PRm4wd1ZmY0czS05NK0g3UXlJWGw4WC9jMS82YndJVnRoZ3BpeXdTaWpLYVIyM1RVZSs1TEw1R21UWU5SVXBReWVkcCtrVmhGQkxNVUFxY0wzV1lTQ0dtYWVpOTl4cHlITWdhaGoydHR3dDdLTnA5OG5wL0ZQdUI5ZTBDaktRclNIdG9LNWxkV3ZnVUQyTEw0c0djQmNtQTVSUzJFcXpHUTc5L2RWL3UyOHZPM001L2M5Qk0wc1ExQ21tU1ZZamtpYmJiQUpoWUVNQnpzVlc4bTNnd0J3dnJwa3N1a3JPK09Vbzk4QUxDMXhwTWVJVllTTFphWDZWd01lV0o5ODJqNXhaV1ZiUS8xQVV1T2dRdkRVRWhJamZldllBRjBvZ2s2Q3FXTkx1V2Q5cGp4Ui94V25nQUcwaFFaSmpFVEJaNHBMV042RE1heTYvYlo3Y3YvcXlReU5CM1JSbkw5Q0hGY3BUd1F2ZmF0Ky9LaFRwanU2aFUvckM5M0RicjRGelBMQnZhVzVzQnZTMVduaGF5VVQ3VE9sSlhYektHZDZjdlhMWHRzSU9nTm9GRm92Y0V5TW0waDBwc1hiTGlzOFhObzdVRjJWeDZ0V25rY29aMVJacFk4YldwWVJHNnhDNWpndjhhdWVrSzBrWmRaWjEvMzROUGNvc1FSRkN5R1ZSakJkU3JScWZobFNqM05rYVJKYlVUTXRLTGpwS1BGMzRhaWtuN01VbVFHWFM3Q2JrNEZDcEliWVpyTmFKN3F1ZGdFTzY0SHA3S0RoMWNiS1czb2dUSmNWeUZTU2lnc2RvMVp0bGFBUWw4eUtHMVM4THJYaVI3aEZYbjBLSGdhYTN1UHZodGF1Y0ZEYU1Mc2xhTjNGcVNQb0JFSFcwQlB4WTh1dUcyQUw3VUVHbllMOXlqdG5TK0V5RC9jck40b3NSYnNJMkZWdXQ1bFFoN25WSEN6cHFyZmhON0UxMFJybWYrUkhDK216d1BlTWtOVUl3bjlSUThLRkxMTko2K3ZaNEtwSzlsdnQ5L01WNlVFZjk2SE9RRFBjNHI0eGpPVFVwRWtPWkRMSGhlUC85M25sZ2hmOFB3Ry9EUTBoWnBOZnJRaEhaUUZqYjVBNDdHZnVLVTlIOElqUndkRStwckRCMkc0b0FZZTRyL2NlU0NTamxGMHk2R0REVk04bjRJZWxSZENKRFNuK0IyNmxlRE13REVkSjVSMXM0UTJFcVdKaWV1VnpSODJTUUZObkhNMkUvTUtDSXNoL0VwNklZR3FMTm1STEJOOE1JRHpGYk9GTFZXMVZTbnV3TUZyTkZZaHRrdkZCdnQ5VzVjUmJqUHRmSTJjdXhLSnprbExwRnpwTFlITnZjSlA2WlpGMzgxb2lhYmxNOSttVjlzaXZiOWZXZDlmL3doMGVuTlI2Z015LzhiVkQrdHIzbDlPL0FXQmZDS0JDaHFLOGVoWnhzNG9LOFRPYVh6a1lHVTlNMGYzZW1zZUNSL09TZm11dHZsSU4rMkF2UGpNaFRncTdiSUU3THpMQTNMeGdkYVZVcEE2SVY0MkNQMUtlai9RMDJKRS85SnhKUkxodDRPaGJmU2lDaGk4bERSeFJrK1hCMENMeXpaclJzS0NNbnR6bG5Xa2FjOEt5cE51S2gyQUhTaUMvelRRWXV0UmdaUVN2VmpjcGp1OW9RNk5XTzBoUWIvVmZaZTRpd2NYUWRFbEJHSmtWTmNVK2tFWTJwejZrNE96Zm5jNy9UbDhHZHZZdEVJOXMvdk5XVXZ5UDlDem9rL3p3b1hvUDkrTWlScGNpS25HYUQxNFNKNlYzMCs0cy8wUEdRREw1Z0xUdHk5KzhRcnRuR0hjSGxzeU9FeVhndDJKVi90RDI3MnBXSVdPeEwyV2RFcWJVNzNpUTdnWG92VERHcTVRSklIT2Q0MmJKYVNrS05kUmZJV1NuYk5VZkYycDYvVmJUUEdENm9UNUhoa2ZHUTQ5bjJ4MmVwaVVqSmpPNENRZ0grdGtuQUQyK0o2WHRPSExtN0d2WTlqdGtQMmpPOUNYZGdNLzJYSC9mSWVMUzVwQTZiUlJpRXNWMWh1ak50WE0yTjFiZHVUaWpoNUpBVVdaZE5wMnZrcU41RVhLenE3VG5pM2MvWDZ1TWpqbXErVDJvdFNzQnR4Yk91Zkk5MDhwMEhzTXNDV1p2UVpxSnA4RnE1bHBRSDk2ZXdqbWZPbTFKaFBoeVU4VzIzNEQ4NElhZkxqNTFjRVZjOXc4MXl5QitDTUxvVHdBS1BGV3FHSWFKVkFVelpqSTh1UXRFOS9YQlZSK1cvYUVsc0xDV2w0VzRmTW9tdzdkZDFXVDJvWG1Ca1VsMkdkRk9vWXBNc280T3Q0VEhxcDBSS0VXR2RQSUFKaERad2tYUS82d3JDM1hPQUQwdjczeDN3YnZVSGxpM1J0L0Y2WFlNaG0wL0FSdkJmQkF6ekkzdnNLVVMxZmdRYi9OZENjblRrUi9tdEc4MDBYblpUSkl4eU1pTkVUU2lOQWJPMGxoaW4zVU5SZEdXMjFMVmRidWpPU01HL2E1OWFlQW1keExaV3BNRkJoM3h1a0l0Qnh6ckJzOWVnY0Rkblk4bzBvM05OVTBab0NMSStGci9PREZaT0FDb0QvZ2NPak91L1VPamZFaEhqeGdodnlwbnJOL2R2U2FnM0pBa1YvcGQ3ZHRYeWlUK0JjV3lvZC8xdk53SzQxbFF4aXlESWFLbVphYVR4WGdEUk85RTVUZjk2aEpZaG1zWi9WMjRVR0ltYldWMzd3WWhlM0t2UzVFRVpsT0xST3VmWmZGYzlXSVJ0WGNSdU5yOUNkMXpBeHlLRlRQK0VHSm8xdnlwV2RWL1FOcmc2S05QUFcweFEyWURRRnFqREFJY2VXcXE1cEM3STdEMC9mTitNVHE0cXN4WUduczNhWmI5NlR6WUUzL0FSM1hVaDhDNkdUbW0zSHY4cERKUXdRa1BUb3NSNTYrVzd5RmpDaDBOcVhudFl0NFk4QXhoMGFoRTZ3OUZhZ3J2NnVnT1lFQzBNa0U5aERwQ2VpMnBSaTM5MjZVOFFzSjVXR1FuT0V6NzVQOFlaamh4enVUbHAzcWNVcVRDNDJ1TGx6MTBZUEZJSHl5bys2RGhxUndReFMrZWptK1dST1JtN3dxWm1RWXZkZHY3a0xrVVVZYXZ4Rm5kNHk4Vm00ODRmZnZYRU4vZk0rMENtQmdhS2Y4VEhxVjNBUkQ5UUtkaVJHMG5GTzZiZVVNRXM3RFRpZndjZUJ3R1FCZXpuOCtRSHRhcWp2VU9qSXRndG0wTGRVbC80NndHSk1kUDNNL2FMbEhhd0Z2TGhxcDRoNkNibWZoMmRVUDRmTDFsbTdVSzFNaGY3aXJramtRblBXYW84R3l2WndNVGtZclRTTjBxcWxxR0VHMy92UGJEbHRCcXBlVTVZU2NTUzc1M2I3dnNON2svM2tBa3dlczBjS0NVS2NJZkFpYzFqZ0FaZm5OR01IVERjdmI0MGNseEc0eFEzL0phbkJ3MExHQmVDcFpFNTd1OCtadkQ0MGhhRFBBTU9PbFU1Z0pHb2xZUVVnRkJzM1R3ZGNFa2FXb29tRlZQa1hjYU9xUjAybm9OTk9yd2ZnUldRVk96alA1Tk5IclR4RVNzWnpQczZ2MXJNMjFUaCt0SFN3YlRpVUthWm5UaHdxOGhaaWZYUHFLMVlDUU5YMWk4RzJGKzFTVHkrU0o1cHJNbGJHYTZ0enN6U0J3Y1hJL3pKTEVLK2VTVStVbmp1bmtheFpHLzArY05TSWNJVWlXTlhCK2RmYUxPRC9oN242UjByYW4xWTlsRDFGc0labS95WXZqODhkR1RlR09HS1FVRFFuWC9ydWNVUWJuRzJIYmN5aGc0YzduQllSNFdIcUxDa0tWV25aZ3hmUGF2SGY4R1hISXlJaHRweHRDSURhWDNSbjZBbFN2NG1uSjdZL0NvUXFxVWVOMElveWJyQytVYm5jR1NHQm1iNFovYTM5ekJ1ZXAzUzV6amZNWWJaMGNEQ2VWek41QVd2OERZaU5XWXZ2dnpQSzdEVVR2VFJjWGVxVHZmRzh1SUNjUWYwZ0hzcEtER1VYOE5EekVuZElKWm1EYkhHRG82NWNqdlJwRWp4bTdBRnhjaFUzbWFJSGViNkhrVDNGSkMvU013a212TDJxbmhBSmsvelplbFBaTHNRYmZQQStDMDN4blQzWW1SUVFSalhzY2IrV2FzYnZqT0orZXR4UVF4TWFFdlhWQjk4NmRGU3AzTmkwc2x4RjBPUDIvUW0vdDlkQ1BrNkFUNTl5WS9iOUJuZlQ5WmVQazZIWDFYN2grMzZHVDl2cndSOG5RK2ZQdk1EMFRwRm9pdW13QXBVNzViMFpCb2ROenVITk1KNkhEWmt1YmpLd2htRWV0cGYvWGNzTm5adk00UENpaloxaTFOL0pnV3IzVmRuSVhNUk1CVVF5QVN1WGdyVHZINlZacWRMMzdyeUR0LzE3cXVFelY1Wlg4VFM2YzVSanl4cW90UWhLcm96dTVGbEN2QzZYZFhQV3VoR2dWRHlOVW5nMkNtb0tVM0FLN2lOWkhwaXVTaHdSQVRkMU1LQXFBV082TTloM0ppWFNNNXJ2b2tjbG03bmlwTE0wKytxdlVsa1VScGJYNEFnNUpQOU1tZUk2WWU3ak80MFdLaXorN0tDYS9MK2JjblhOMFZWd2hyMUZOL3hscFFiYmJWb3BEUDlvYTVaZmxTeVlnOWVheWZWRDVnQXlib0RLeGovTUVKTC9SaFZidWMwOFg3S0dsWUVod3ZadllhQlZ6T1VpQ3o4cndsQU56b0lGK1lpMG9YQ1RsSnlmNXpqV1BLZjd6ZEo4bm5aTjcxQU5DVEYxOVFyQ3FkdGI3RlFLMGNEaTRYZVozb1FKMU4rY3kzUHdGbllkNEFGRjFpb3lLd1l3MEk0SUZtYVJhQXQxeW1BNlFaemg3NTRjVUlQRnRDOFA2ZXhPa1pNUnowZjdMeVZYdW9OQmxrdHZlMUMwM29iQUl6R2VNM3FBMFZCS1ZMOGRoWjVmQjZNdEFGSDZPenUrK0J0WWFSSzdhQk8rNGdpTVJjVi81VXBURFZzeXFnSkZrdWNCYXZrUXF4QnBXRnR0VDFubytBQlI4NnVpVi9XMFk5R3J0NVVMbUFpMjJZU3VZNXo0bnNicUFZUVB2SElMV3lMeUY2RHkyZ0N5MXVMSENKaGlpSENjcC9WMTV1TjBpZXJ3eno3Z3hsQThOWlFkRnF3anVYdWo5cGlzdjlaalF0Zys3dHJZa3pVeWtkeCtkWHNydE9TWHF1RGNMN0VoMGVxa3ljRmNXT1YvU1FzcnFZZVN6SEY2bFEzMHFCMXZUbUc1Wmw1M0NVVkVUc2l6d2NYSGxoOW8rZUlzMFRJQWhsbzcvaC9TZCs1NHF5d2ZpZnlkSU1SdjB5Y09VSlFLeWJqMGc1WURRb3Z3a0FRRFdBeG9nSk5uTW5BZ2ZzT051THA3cVR4TTNMc0diT205RWhuRnh3WmVpWnBHaWdJbHFOUkxNNHRtQXdFaEp5V3RFaWhMNEFyWEFFOXBWTms1VmhkdUljZExLbktGOXFYdnRML1pibk9mbVJ6dGNFM0I2WlB4bWV4dVNZdmtMS0pmU3BJTzJKaUY0ayt2UWxFV2hsRzZ3dHJTbWZwNEhsR1lveXdWV01oakpLb2p4R3N4c2pObmo2WGpUWDVkY0g5SE9LTTdReDdxMkJ3amVFakU2QXlBYWUwSzRSQUdkZll4cC9JbVMycVA1YUZsbTFvZE9LSHRoU2ZtU1Jqb3dmOC8zY21KRlpZSDMvTVBRTE1ybk9obGJVOTNRaHJ6ekRYNmRkcWxSbWZJNlpQdE9RSkQyR0llM3hPNFhjcDJ3ZmdDNDh0emZrNmg1YkNtUk01c0FTREZ1UVNiSHBmVXNGV1VwY2NRUWVDYi9OWDB6T1h1ZURIZjRaVUFUS0IweWxEcXg4aURMOHJZNCtnWUk3M2VrTnlRUHJnRHBVNEZLYmpMM1o0WVQyV1dHclltbC9SN3BCTEZqcytWNU4vdG9ENk5JclZnMVpzcDNJdm00dklaRzZYOWtwNUc5SWI1d2daclJRbVZRTDcvYlV5WFFCVWNkMmhNU2ZZcXRGY2xtTzcwZmY4SWx4bGw4a3R6c1NEcTR5R0g0ZXZJdjQ3L0pBb0hpWlI1VU9nMjlxK1NzcjdGdkFZMU9ockxnSkc5VzhrRWFRekVheEtWdnNHaXd5TFpzLzhNU2JvUkxTQWNSa28rTVgxTXptamE5ZnowSU5icnRpVHo4RTh0aVRFK0VSa3R0dlRDYk9scjl4Wkw1MHRoYllrOGhza05Md05Majk4VEFMUElSRmQ1WFRmanViZDNvL2xoOHpxSlVGeEVHVzdsTVZwdHEySFFxcGorcGhLOENMSmk2bERmZVpPNmdiRXJmdXRsNW5nWURGZ0E1eTk0TFFoZ2hQVmFTVXpscVdHenFneVFQcVYyakc0bGlFNy9SZWx1R0FON0dUOWxsNXlzd1RDVDBkNzN4NDVId3JWbDRwQUhLb25hazZjNDZ2Qkd4WlppaW5wcndaYm53bStSeXl5TDJSZmhUN2VOR3FrYk03OGRvSDBSMzg4dVVEeUluRTZ6TkluWlUvZGNENTI5RTdxREEzRzhwcEJtek5MSGFhajdlVFRVeTFtdmlhYWxSSFpYbjcwdmFVcDhWU1lmZXQ0UitHR3JaSUNtaTVZYTlHbmkyajFjYkN2cGxzT3hlZDdoRTFZM2l2YWl0ZlZFcm4xL1o1a2VGUytEYTk4VkRPNzdsR2ZQZWhpWWZhemlsb2lDNmlNdmMvQ2VkTUszS04wYklUalBqdmlIUitqSnYxL1ZvNU1iVUhPM1JIZmRnWXhvUUpQMjdQZitQdGYwZDhlVldYdHhYbmY3N01Ubmw3Nm93cnUxOEFPYitaQWN2eGZ6NWFCQWQ0VHhqMjVoVVgxbFFXT2g4cklSdlRCaXpPeTFDVU1mUkk0eExpeG5NL2VQZUpPRUlVQUFyZ3ZmbnlSaFA1a2NNMWJ6NU5aZnkrdzdTRDZVV21LcG9xZ1dBUWdvV3pSZzF1VGlOWWRaeUVhdFhQZTBORTQ4c2xweDJLZW9iSGZmakNKOTBuTWZ1NVliVkZic3BVemlsY2RhNlZZcE5QQTJYcC9IL0t2SUQ2UkplaVNEQi9iU05xT0dVeWZvWDFHVU9DNnFWMTNya3JmSWx2RUIyTzJwbDczbW9vSkZHYjRjbnN2ckRwZ0xNMzJKYlNsSkxVQlFWa2dhbURDdXZneGgrZFFSM080d0c3MkdiWUxlM2VKWS8xSzlUWGU0L05UM2h1Q1ZhUG1ZOVJhV213NzZpUFhRbkJEOHlXSDhLSTh1SzMwd2Nxa2tEaVhaQnZZYzJIZWtHSEFaSUxQbWZ2eml1UjVjZzZWNmw0ZGl5MkJBMXZVdFp5R1B5eTB6QWVqMjdoWFVNeG5jS3hRYXZyK0ZBSVVzSDNOalY1WUZGc3BZTFhXSDdhL2YxclhyYkEvRWUyc3dnVnBsaGFkeVFoQ09PMEJKN3E4T0hoc01NWXJhVjNpRFdmNWthSWZteFZ3UUpQOXVCKzJFQXg2TUlEbFZUdGhiZk5KRlJBWmgwVVdwOUk1M0U2Q3dwcXoyay8zK2tHUHh5YVhKV2hjbU5IamNMU2t2SVFGbmlhVkUvWlZOcFdGS1JBSXQrZlBGMWU3YVJyQzdlaGUwT2lkQ2ZjWEt3U3NPTGhsOUl1VnNTQlBJVFRQQzdkZDNIaFpLai95ZEhmby9USjJoSlp4VGt2blJSMTJEbmtVUURMRE94ZUtsajVNMVVWQWpPbGF3SUVqMGRmUlhEZXR1dlBvSlVBY0JCRXhPMTh3VUdJaUg2Y091V1FCZDVNSkFDbzN3cG9qZzdsL0JrTGNWUGtJVGoyZjJHZU05c1I5QkdtQUI4SnJIT0xIVXRRZkVmRnBHaVNkQ3VKb0lETTVlSE94cFhVYUI3MFF6bDU3VHJab2JYTnZ1OGsrOEdXOFE0U1hTNklGa0t4UnpSZkZzS05mbUdWZVRYSWdEZ25DL1lSYVNIQW5wZ0hURWdjb3MxL1Jxck5BUG4veXhDYU9mOXFYakluOGNlZHU0Umd5Tmx1Nkd2enNoMllaZUkwWmk2bDZIVXNJN0JwYW4yZ0t2SmFNYnRIS0pwamtzYk0za2xyUzJ2ZHFhdUgvaHB6dGhQTnFpaU91SXdmUUVqTDZheW5EMDRLOWdDWnlqK2RrMk4wN3FOVGFneml1UkhkWHVFS3dyOHRoRUhOUlNmTTZZM2Y4R09PeXNoMzZhUjQvdVdoTzFSTUt4RCtKcDVIdFREVnZzRHNDZGRCSlZZWE5RekpGVGVzdG80S0xQRGRQUVRZUW1UaFcrN3Z6b29UNStPWlJVRmhtM2U1TjJRN01taHh4WUkzNTdiUUFmRzErUFFhbGVXbitSbmE5MUxSWEkrMExiRlUxTzEwODRhdEJJS0t5STZja0ZUVlRLZisvVGx5TXhxL290ZVMrZGtGVHkvMGhHZVJHc0xYYUpSTGpNb29XOC80MXZmT0xFQ1ErUGNhenlpWnhWTzRFQVprUklaUUthU2syUnJLaG5NS0ZNK1UySks4R0tOWVhtczVidVFidmdCbnRTcytYZlhNMWZMeENhVG5YQnYyYVBvaTlwQ21KTGswZzlDUE9YQ3JmYXB3NFQxUEtzZTZBelZrSXI0aEI5THdkU1pWbFdMdEQ4ZHJuM1ZsSHNJeTB3dk9WOHhVamZrOTlxK1JqVWtNa1RiaVZTNVRuVTZNVlhPUEVCeVZCM29WbW9GdHBUMDJWbVdOQlNGbit3aGxnMHFkSnU5QTF3cWZ3VHovRG5acmZEN0xNdEo0M0RzQlJHOXppN0ZoTVJtVjNJdEluSm9NYzcxc1c1ZGx3S3BTZlJ0VlBhWThsdjJPV0xNdS9yTmVGN3lybVM4KzZZZnUvWXZjcHplVUJnb2xaL0hSTi9UdnVXdWJuQys4cGdITEpiR0pBcURwOHVWOWNlMXVwRHR4UVVoUmdCRW4vcmMvNXI1ZEZEaUdBMzdwSEd2T0ZXbk9NazRPMG4yaXlIVnZGRTBjdzJGQXdZUEpGQ2ZnQXRzb1hpdUcyZ3lkNDcxRS84YWVMazJlN1NxcVVRNGc0ZUxHQ2ZmN285RWRwWk52cUJrQmV6N2R0bWo4aC9MNzYvdS9ZQktYNUhaZ05GOWM1cGxYNUJBUkhSUk9GVTQwaTA5RXZpMVhUaXNsWEpwb1h1TnNpK0pxWWVFZTZhNjUxNFNxZFBoTjRFQ0tLY21yRTl0UytTVnlFampNYTVWbmRPYWp2d0o2RSt1b0FqZ2FCejVocWFHbFJ2SnlsODhWMjhIdy9lYVJPWk1GejB3UWt0RFZra2NZdXd6cHpWdDlESGZVeDZmZXBzUkJvNTYrajhET3g1a1lrbHhvY05hWFlSRjVucUVpcUMwYXA5U0RKSXdlNElneWo3TGJFandhMy9lQldZSDNVN1VkcXFMMnM5dFN3eFRoSXVJTzhjTElQZEFuM3BBNEt6TFdDZTcxbEhDVjRGSXVFR2I3aExXcmpQWGdONCtKRmJ2Rk1wUTFmc2ZuWlVnYjcxSEhnaVVvUW8yOXR5WTcxeFFsZ1Brc2dNeFZsV1RjbjREUzZOQVQzK3RlV2laVEVZRllIU1l1em1lVFZLaHBSbFJnUUpKS3NyaGhlSEZUTXRaemZCbVE0dVNYVmhMbG5VUlJWSW1XeHdzWVlpZW1YSE1DbkV5UE8xcEtCbmRZV2c1UU9qMjBuc1o4SHRuVEx4Y1N0SkZPQnM4M0prb2dmUm13SWlZZElmTkFQNWp3RVZ1ZUorVkpiaTlXam1CQWgrLzJNNkZNT0J5aW83N2VYTFdzNFZReWRjZXYyR1dYWlduWVJsWEhLaHZlMjM0QlJDQ1JZL0MzYmdWWFNiL2VaSUxiQk1NTTFBeHduQjl4bzYxZERjRExNRCs4NnZrbXI0T1pnVXIvOThlQUFOdkU3Vy9oTHBrblRoSWprRDNDb3BVdWV6V0tHcWduaXpSQ21SbEZsZXE5NTlza0ROWG04Y2t0Sk1DTlBtemJCWGczVUplNm11QXFHRTZjWXpjWFREVlYydnAxRzZsQ0lnK012WllrdmFlR0pIV3RYWFI3V2dFMUFzbWZFRCtNUXJTQzZzZTVPc2hGRmlBU0l3cXhGdE43VHNkSmFWU2ptcXZXUUdSSWZjd1A1cFJqQnhBSWZ4aGZTbnorSGdhbWF1WDVrM3VrSHZSdTVORU5Fcjh0czVWSjhuRElCTWFxdDBlWXFMemU5MThOZkc2SkYyZzRDZzdNZnhleDdSL2h1bEEwWjN0V1UrbUM1ZzZNMzdsWEhxTmNKVys2TzloalBLck1FTU1NeWRyM1I0RnZueGNGUlJyNXpGZmNrK2hKaFY1SXVScFJOVEdORHMrL0FmK2REaXBVR25aejY0MGZmQ2xGYVBwZVFaMmh1UmJoRDMxZTJhQkZ1NDRBRzYwZnAwMXV2Wk5FakhtZHg5dmViWjhBb040ZDdVKzVGQzVVWDhXWm9zVmo1b3ZuaythcUpmei9RTjFoc2NVUjFuLzJHOHhZa0VaeUN0dnBIbkFlb3NYVmhDUXUyWFpHVDBKa2Z5Q0pyMXh5OCtVTGFVRVRCQVFIU0M2d21QRHEyV1RLaHhrYUVCUEdxWTN0WEI2cFVtWlI4RkFOSy9RYnNsSG5vTjFjM1NCSXI4aTZyVm83dldxZUZRNzM3NjQ4WkpadTNOSndORWFoSTdtRjBJL0JBcFBranh2czFMQ2NFd3RkWEFFbjdjdk54bExROW5rS3lpRjE1WU1vbDVCbTg3eFJaY2ZlaSsydGJrVEtJZ2xNdUlMb0RwUVpxNWVqekFBd0ttQXhSV0dsSG83WWhwT3FORDBHOFR5OEVqczRkTEdscmxBUUQ0NWZjUnJoUWs5N0ZqU2tHQ0dqVy9yZnpJWTd0QURnNjRXSlBzSm9GRFQvSVc3eUlHTzN5Y1VNSzVTL3hoa0pJbk9UYXQxUnM5NVVCaHRxQU1rdlV5S3Z0RE9oUmY4NUI3TkJla3lYN2lEWDFMdk9KV0xiSGtlcXFvNG5zQ0M2WjhITE9TdUppOHpCaXVwTXZLWkMwZWpXeEwvV2kzeUplQkMyVFZkMmRJQTlUOW90Z2d3TWNVNjROTHJxUnp1WFRGdXR3UlB3azhmM0xJUmo2T3I1djYralgzTlRhSC9mckxGU0NIUGlBMGhFc3g4dGYxNTJYejFwUW5ER1hWUnRvZ3dER09aYy8waUEzOWJBNnA4aXFNeEloaTcwaUhuTG5zdURPMStETno4WC9pb3ZxRTc2c2xQMS9VWHd4My9rVDlOOWtibEhhcm5QcmhJazZSbEdtdTYxd01kSlNBenQ3WWRGaDU4YkZZZkg4eGF5V0xZUlFpQk5SUFlJMFQyOEUrN3dlLzZPR28xRExhQ2J4cHRWNlhIcWJaK3ZmaDRxL0hES1FLa2t0U3B1bGxrbmdDclpJWkg3akFnOENUUUpYMGtIanhXR0RnRDRCM1lrZjhxWGREbWdaWmYvUldhUS9INDlFcEk1OURxMkJyZ01lUjdpSDNKdExVb1FGRmdldnhDRkgxeUcwTCs0SWVPRENpUk1GamhlQnZtZHZwSXNZNnZ5ZWdUWVhNVEpxTWU0QWIxNEcvYTAzQUIvTUlJWWl0UWM5ajVWTGxLUlc0SkMxWWpQc29idVNqVUQ2ZVBZY3NVK2pZZXdkQTVkZmxjd2VpdmtHOFUyM2hhN1paaGNOSmE3K2dHODFSTjRYeDNlQ3NQcmpHdEJXOHMwNWZSSStYbFplWVREellGUXJkT1cwd1hISzNTNXpQTjRjVUhjZmx2N0h5ZGlaTW8rTTlUK05IMC9ZVHJQUUhiRVV4cFBlM2JQU2h1TGZGMWdURlMwcGk0QXg0QThHWVFFeDRiSUdkTzNCcDBFWmRYNFpUajVxOGx5YUk4eXo5NWsrbW55LzhNYUlpV29PbFdiRHBMT3lmZEhnTG9HUWI1dTFmS1VZME5CNC9YK2N5TnNBeTY5OENiMjJDL0ZvYUZyOTg4bll3b2xTcXkvT3VHSzZrcThnbnVRWEZ2RDBSRWZYWWZSQ0QrN1N0UTJDR1QxQzBHdjFMVml4eUd1aElKZmNvTTNKNUM4SVkyL1ZkNGRJMGtqTlgxS25Lbi9BR0liVVlPTHVlak95TzdkanhWU0YwRTdKQjkzVURXSXdrTUZ6amM5N0JteUpwczlaRmJ6MmFROC9oMG8wYUJ2NTF6TEh1WmVCZUdYQXdIcEh6OW9reDNXRm1VN1JoelJadVNJUWxYR1hjajVJcER2MVRDazluc29USkl6QnlSNnhidXJURW9DZEpudG1idkEzL1FxVGhicWhaL3hXL3JZNnhFWkNFNnZRL0pGeVN3SmlFZUU0VTdyUFFrNFo4U2ZtdzdGOE5mL2c2SlZ2WlRmTW4vY21SZTBwNnRVL3c0Mk5ZMURhaDdjN2RWQTZpSHRkWk9BbXF4T2tBYUJabVNSVi91bU5HTVlld3V0NXBta212QkNzMjhHRzMrL2FwQ3NUaDVXUVdOelozUzM4SG05bnhFd0M2anFKUkVsUy8vQTNEUHF1enhHSmRMcmFidHF2b1F2cFJYMlIwNlZKSHplMlZSVzJnNzJhRDYwcU9GcXVTZ1F1cG1sL3FiUU1kSkUvSEx3RXlpZjlZSHpYako4c0grT3VkeDFYajlsMGNLV2ZFNE43SFlPSFQ5V0dXbHI1aEp0alVXUHN4L3dRcnFyc2w3LzRKQUpMaWdsb3llUFhleUlXTVNCUnZGVkpnU0NnOHNZd2krbzNoR0hZTFpKMDZ5OXJkRFB2MVNjYWZhVHlQUGFnTnJybmJ4aURSazR2TjlTRmorNjNBMkx1TmJ2R1VyTUNRQk40QzVUSGlLTGVYaDNhUzhhbHFTTlFKRzJQSTB2U25FcDIvcEFvTU1CVkpaRTRBYldpZ3BjcnpQVEpUVHhpREVlTGE3QVozWXQydEI4aHMvMlAyTDJDZkdEaWJKUnV6WEZUbFpEUmxQT3FqTTB6OWtXeWZxT1VTeFhlYUNZUW9zMlV0TEFTc05hWDRKMW1hcFBKR1RlNlZzcFRBbVVpTytOTFRBcTdzWmJmYjNMWTZBZGtkek55UWo2QzdKR0JXV1k0TmhyOXJTVFlHZURkWU1vQWpqQVdmVXM2Z0ZmTHVnUnJtYnhua2RESVM4V0svSzZWandWVGZjaERpdHRLdlBkdXVWN2VUZS9JZllORlYwQXV5NW5vSytjeFQyV2VRaEpVV0ZOWS9mUXZyZjluUWRSQjVuZUsvb3ZNbTR4TmI5cXNpN3FvMDN0a0J3cmQ5WGN3VkZmYmo1S08rUC8xU29vL3JwdjdLYkJLcTFOZmQ4aHNqYkZrY1hPZ3FRTkwvSElFdno5NzNQWTZZaGxHd1hoa3M4TWdNRXZNWGpySWVxN1FYaFkrbXlGNTE5K0dZVlpTZVUxL09yckpYaXdlbnRnenVKcEF3Y04zQnZPbGl4TUxObEJaNEYwUmU0OWt1SGUwSmFEVVFpdm9KWEJXVTc2RHVmNU9nREZDakNwdTd2dm9XdHZ6YUpORWhyckcrajFGYnRKSlJ0WGJnOVNEbHVadXNEM3pPWFNEU3J3MnEzdTNMc3JCRGwrSkdSb0RzU05oZEFmeVpuZXZYYTFuYzg4SVNMeHRGOE54SzVyT1gwTnJGTnNHVVBVVldodzNQQjRmdk5hN0x4OHh1eWVuVCtFbGFyMEZ3VFJaNEJHc1M2NFV5SzZ3aE9rTTdja2lxS3o1eG9VNUMvdjkwZzdnRWIvbkhrVEdWU2JZSjNMYjVWdUY5cklGY21NRHN0dVF5TGh0TFNaaGxIY3NlUTZlaENpM3pXMHIwVjUvMnZkVG81NHBDMmNDYVVINk5GZUFWc0dTZW52RkxaOE5TemRUdkE2TTNwalVWTWU4dlVVbTBqMFpoV3ZHak82RjhkSktNRVk0QlVXM3pqV2Y4ekloNWdRUXJiUVJNdDg1YmN6cXZ4QUh3L3B0dFRUYVlYRG9VQzRkL0dMZWdkY0ZaSXE5VzhqK1lsSmN6UlZQOEFZVTNBd0pHOEFYV0Z2MUE2bHNyeDFhc1pYZk5BV01EUmdES25Fd0tWMzIrdjFKVGVmbS95b096YlJKWkVWbDlrZ000T2M1UGM1bE54VmdkQ3VXUjFRaG12QjBaV0xmMEZFODUvT1NxVG5rY2laeW1EcFlYVHYzNElEMExmSXdPaHBUL1lISjZmWjdQMExaVTlqbGdKdlVJNXRaYzFmbU9TMVZ1amhNeU84R2F3SnYrQU5pME1oK1g0ZUVDU1hnNzRSZDFHWTM4dEV1SlZNSzhhbWUrc0NPVDgwTisveDB4cncwdmwxdk1oZElPNGRac2FRc1ZtVWxjQ3I5VVVIZTcySllDVW9rWWZmdXdZUndSVkJxVnpCbWJhOTROTU53TER3OVRiM1loczN3QXRGLzQ5U3FjMXdzQ3ptNDIxd0dLT0pTSEZ0MnRSV3dXeDk4dDc3V3FWY0NHTG43c3VoQzNZeWtxSURITEh0NEoxZ1pOYm1BeTRKYk01QS9TbWoreEZ5MGNmZVlZVWNxT3pFbXRIUDUrdW90cmVNdTJwd1pRWU11QmEvcDF2bjAwYnhlanVhYTYxeE1KNW1tQy9aQ1Fyc3p5QjcxcDVUMWNTUzRHUTdmMXVqcmUveUhDdXB5MnYxNDZuRFptSldCSTEycHhZNmw0cDhMUVZ6Q1pmS2lHWkhsQ2pxN2FaRUczZ2xxcEVFZWh5Wmh5azhuVDlXTzdSc0c5bkVPWGVucTY5TldQZzUwZ2pCMVFhQjdQT2JSUmxvZDVCcGQ5anRqSTUzSDlzOHFqaEF5L3lvMGZXWkVtVWlJbVBWZTRZcDE3d0szWG52U2lmVC9nU1NNcWNkR3RPeUdNYkthSTA0WGpJMVAzVlU1cFdib2pBVjV5M25Va1FvcTZFRVh6bXA3c3BXWVlkNXFzcDBjSVJwaTRENzdFdFViNzAzczJkaDg2MzZwaU5sYjUzRmdCSWJGZFZ5a1hOQTRNN09sQWdkZWRuQlZGZzZxaC9rem5PU1I1MWFlbE5vbTZVdXRSQ0w4VU16MTFXTFNVV2hqdGx4bEdSb0s5ZHMrVEFUVE0wc2FUak5VOXJDeXdxQksvWmNIRzhiZEpwUEdhQXYzYy9XbjdkdTUrN2p6VlQ3c3lxMHE2dW9TMUxGWjRPNjFKRDFJZjFraC9uekdwcW4rVVhWYlZFTlZMUVllMGRvMXZBYVBabmVZa2wxUW5MMmk3WHl6RkxWQUhZcnYvSkRBUFFLYnRqbWdsdG9Kd3c5QW1vSHdjeGc0U2dHemJaNlEvZm5Ud3Z1UGszcHdoTHNkb2EvSENGbUMwQlNoK25mOHd5OXppUGJvRWRiajdCZTVQblNIQU5NaHRiNHdFSm1RUUw1QTdwTThtZ1J4NjROM0RzSlFlcURVZlNrOExiZFY4dEMvZmlHTFdWclZDN1EvQUp2WkhoSnZiNHZRa3FyM3lUVjlIeFU1K3pJZGt6eW9CbHNkZ1FLNUh2ZXl0YmFsOSt6VUs3aVMxS1AzeDBiSHJTaDh5TXFYdjRtSWxFQ04rSGNlK1FoZFo0QlQ1MlEvamUwZHc0NlRCa3dkU2Z6S3o0QVNya1lFN1ovYXR5RWEyaTlXeVJkSmI5dllab1R0d3BsRnFCNWxnZGpLOEZhZE5ySzA3cWNad3ZkUjhjMnAzWDJEWjEvRXRtSEE3ai94dFd2RmRzQXM2L01vWTZleDlGbFd4U2FnRWM1WTVGYm1aQ1IybmhGa2NlQ2w1N0txWXF6L3BDaHdpYTd1amM5WFBlY0FmemM3cC9nYVpLeGZlV0xPYmdXdHJJT1QrZnc4MEpXaTVDVFd1Zk84SkFKWU0yb2t0RDN1d0Y3RHB5Q0JOU01Ed2JCN2dWUUpOamxyUFZ0MENyaS9USFdZSUdoczFTUEhjaEhkOEhyRWYzSDczYWFVRElSeURqcjVvNC9Vc3pWbWppUWZhTk4vK1pkbVExbHJVelh5M2VocmdHTzJiWmFXZUw0UTgyaHh2anRFRFZiL2c0djdHdC8wUlZ6aW5kU1FTRUNNUjFYSkppbGRXVXlKMjFZaVJ3LzdBV0ZwOTJ4THU4Z2ZuNG5ZQVFFc3A3TGJVeG0rdUczNjMrY1d3OXVydW00QzFWWHlDTVdVRTloS1hPODcrQnpZRWdJbXlydVhoYjBXK2htYmIvdjlabFlnUXI5MXc2U2ZNdVJoN3c4Z3QvVFVTRElZKzhFVE43RDg0ekNsbkdIaEhucXZSc3lKaFdPbG9lR0ZxR0IreUg3NnRpclJtUTdmbFZLYXp3R2xzbWNZVFJrMkV0SWx4QTRNQng1MnJGQzNJUHFrWWhOZTJ0a0J1VmZYTllURU1JcS9UZWRVay9QUlNpcWZ1T1dBM3ZyV1dEeWtTaGlsVnNXM2thclZYYUgxV1Y4K2U2c2FRd2Y4SUpycVowMWMrQTd2VVNJRGY5NjFRUUlRcEtYMUdJOE91dmtNeUkrUzJFN2RGV3FJWVVJUkw2aDVjTUtEL2JLSEhpYUxGUFV0S3U5RGo1ZmZXT3A4NGNBaVgrRzBneW91Ym1JSHpaTE9PWStkWE1GVklHdm92VEJTaWtFTXhDSlhZQ2ZqVGVIRnlCckFsRjUvVkE2dUlwS3V0SGlZSjBqRE9YQjB3TkJ5c3NFNmJZZXZUN0JKZHFyRndCV0EvTjVXS1BlVk5pdXZ0cTdzTG1OQ2c4aUF6amtXZUk2R0hOZ3BnSzY4Ym43eWRFa3dqU2U0SkpCdDBiRGc2STk0cUR1Q25PYmVsMndQbVlCQnlEY2c2Z1dhWEhwUnlVRHNjbitpV1FRb2lmZTlOa3B2bUhrbjBUZ21QUStVZFV0T3J6UEx5MDJkTThUMEZodU9aQlQwb0xGTkxTMUQ1YlJZYlExWEdZOVdDRHI1bkU0a1hDV3FFWWd0a2xDa0NmQnc5dWxLNWk3ZzhXU2VUcUlYRy9XazlHNlpiRWtGdVZxYjFaeW9zOXlvM0l1ZlRxRG9YMk0rNWlpaEhyTWFpYVpCdWJKUFlIdWFONjBYd0wxcUV0aElrOW45S295UDVNMWtzZWJOdnd3ZHZ3enlUYW92Z0hJNzZpSks2OEpjaFBrMDB4a3hjOENWUE1Feks4Wm5sT05CUmlJQ3dMMG9wcUJsVEJ3aFoyOVFYTWdNNTh5NnVRYkp6OHNENERMVUhwWFNBbWU1NGJwQ1hCSmlUZldsb2srNE9FejJTWndDQnIvN0JGU3p6U3pXNThuQTBNRUwwbVZxQk0wRTVWUUxJRDFoUGZOUHRQSEpKM0RBN3RSZVhYWFlqdk9uR2ZMQ29RWWk2elo3TmNSTUx3c2IrZGc4c2ltdUNjZHY2eUFzUkZkL2h2ZW1mK2N4N0xISEhOTFJyMXpLZXNXaUFPQmxFQjhIbXVsWFk0RDJWOXBGVVgrY0pwbE12aHBFbkZIMUdubUZ2WGRaR2NXQzE2dGk2NzVPQVV4VzA3RnByUEJmMzJscE16WjRra0JzeEUxU1dTQ0IxVUFJT0xINDVTOWZNUkV2MzFjRUdlK0NkTi9sNEdMMUdRTDZsNFdvVTdoaTc3WEcvZUN0R1hWT0daNUJwNE9zdmpMTnN2ZFBHQjRJOCtrYWw3WmsvSUtSTm9hVk5wc2hBbzhzVDVQdmlQSnNiL0pmRGVyVHZMN0p4bWtQa2ZyNWxHdS95OUwwK0xjVUZsQW4xYUFWRmpSdC9BT01JcDBTSFN4bFJ0T0g4Mjlsb0Mwb3B1dysrS0VtSzEzYVM1NEttTWp1Vy9SQ01uSTB0dUsvVWd4R0JFcnlnS09VNlUyWlhERXg3eStwa3daOEgwMXZGemhXbjcxRU5VK0h6V3g2TnJSaVVWZDVoYi9Db2x0R0dFK0Z3S3VQbjFSOXJXYXVYcmxsSzVyaTFpekV1NUdLdWZIcmNoM011aUdBYXRGeGEvMVlTanNzZzVoTmlxaml4bEtHb0FGczRIVFhvTEw1MDZlUnEvVE5POXJyZDBBazlQQTFNVjlJQ0F0R1gvMW9pNll1TUlRa2o5ZTA3MUhCWlhFZWJISGRlZk5weHJOVjBYQ2pXSnh4ZWZmNjlvMEM4ckk4TFk2WndiRlFhV1p2b1B4alRQRWVzZmU0OTFNMlZGRjA1NUw1WVovcnB1emQyZ1RudURjOE9kRHNsTG1nUmFla2FwWWxuT0VkVE9XcVI4dlZ3WHJOZVRYNS9oQVlEMFJuNUx1M1llL1hWQkVoYVpoMGtrQ0QzWEhxalBVSXJ0UytPanZJcEsyYStRNE9sWG0vN0crWENzZTVycGY5UHJCbnhTQnprd3J6SmJEeTNpLzFJRTdSTEkyTmVBbEd6S1FqbXFlQmthM0I5TEFJUzJMdFYwU1pxRlp3MjJoQVBLWEp0TUI4N05lOEhTc2dHbUF2dnc1U216UEk3MDRkMVdQY1c4WWRLZkQ3aVc0cEVWbUh2WGJ5allxMW9uRFhTbXNPUGR6WTh3S1BaNjl1emtidVIweDdlYldTRnJxNEU2WWR6ZTF2c3lMSi8ycVBRZ1NIblY4UVRRd0tWSksydUxQNm9SKzNLT2VBRlcwNWVMalI4WldLSnpWRzhzcmV4S1VPZSt6bVVDdVc0Y092Unh0eFgycDhkNXc4MENmV3NwY2NtWDNyRldSTWR3VFNBMmlYcXFsM083UXV4R0plVUNwMzdEaHUzZjIxL2FxQVZIeHdHNnJ3MnlUUmtvWGc3Z0NGMGtJYnRaL2V2dkJGd0ZFaGd2YjJJejVKWXdsTWRJTnI0VUNGS2NNcnBxc3I3am9leEUrU1I4TjlrK3l3WjRvSCtEdnNmMko0ZTE4cmNzTWdxOE5IcnkxdVdySmREWGgxUktLSEpRWTdSRzZMWXl6N0JYeG1NbzI5dDVtNWdyOVNQcm1IbGZDM245Y1lqaWQ2QmFScTNXQmdHSWlzOEpOTEZPbk1HaUFmN0p3ckxSc1I3eG5pc1FlVStGYTJWSzJIWERKMGxrOEpNQ2FLUE9FNVRUcWtCbkRpTjlWOGhnanp3RmlqTjQvUU83ZFVaNlYvSkR2QWRmc1NNY3paMyttZEl6NDRFMlRLQzBsVGNTWUpZTTR1THBFNFNVcXhDV254SFQ3Y3h0WWo2amJCVlprK1NUMXFiYUY2WXlPRmJzdWY3c2hiOGs0NkVWZUpid3JyUUg0azZ5K1RJTEZqbHZIMVRGME5pU00vL1RFVWMyR3B1cDY1aExhSVNpeTBnRFhMb256SExaNk1uelBlcDd1UklBeDFTTHBvb0xDaEk0b1F4cTBjdFBTcndNRzVRYjBZQldYSzRXc3VjVmhqRzY1bWtmKzA5bGI1ODM2M3RENzhxNjg3OEtrUytycUhSaWMyRGRET0ZOMUdFYk9vOFdTVDhhWU5kWmFkaHJjNWtTOXFQd1BpWXphckplWmRycWx6bEV5TE91dVpUeCtEcTkrZFkvRUROL2dtZjdqU1VqM29NZnkxQkpRTFRxL3JHMDVKL20xT3JURHcyVDdoTGlsZUx0QVJPL3hhTk4xZ2VvM2owb0djRUhZNmo4bnZwMlh3ZjhkeitxUkdJUWNJNlp1YTRBMGpnK3Juc2JDSVg2MEJML2FOeVh0S0tvTUl6b3dVNFlyczRlWFNlV3VhSjE0eXFLM1FLL3h6dDVha1lVZmZrM3ZNRjNYZ1NteEcvZ3RFUk05YVJ4S05TNjZSblNJM2ZuYWFNUFZoR0J1Y0s2dTRrTG9tOXl2TnhNUVJJdy9IVGF3Vmt3NDRxTGhROTQyaDUveFRWQUw0dXVKdkV4ZjhXRTZQeWd2d3E4WFVVUnptaEp2UGY0MCsvY2JOOG1nY2M4aFJ0L3lJU3ltckhleWwxV01sM0IzcXZSbHQwb0dvL2tvdFRzaVQrRGhvR21FVnZVQW81anhobEhmYWFidlNzRWlWQkNScVVFN015QTZMN3dFNHhnT0haNFp1N28zQndzdWIwNFBXVFM0MmNScGR4d1VuWWd5K3o0Q053ZGVGNmpUcmpGMXpuQi8zRVIrdU93d01yQkcrVVF6Q29oUmw3bDZmcVQyTzVmRlBXTXhVdzV4SzZIT0hxMEdFc245c0FFa1JzVkpVWXRZYTI4VWEzcjhYdHBOcFd6bTY5ZGY1aEdvUWZ5QXZCanlUVjlBTzN0dUNKYlUzcWNiMC8rU2t2bTdpb0U2TkhVTmNYd0hmVFRiU0JWZHArM0RpdWNzVE56cGxScks2WHBmSEM4Qml1NHRaK3dHSHdOZXdScUxORkJUZHR0bC9LVkpoSUVJeEJhcFgxTnFOMU4yNHVvbG1HYmVIN09LOEpwMi82OWVDWDJtNGhVemZTK3RtZnJhUTF3ZEJKSm83VUtPU1piQ0FIcG9Qdnk1Y09oa1VKUFM1K21MVzBxNlJSTXRqRkRQbE84cktFRGpwUUtRbktkQ3dKRVViS21qcVUvaTZPM0I5eDZGUTJjQXYwRitwRnQ3aHRYV0gxcFVhNStXc0lsRzYrY0w0K0lJbzhJNFUwN1I2S25WajhyeVBUejNJMlJ0anB0Tk5LNjRuUHVMUEdjZnpGU1pzUHEyRHdnR0M1SUNJU1d6aVczSllHYVVLSHJ1eldFbFp2MSs3Rm1WOXN0N0tHZzlNRmR6YXRFS2NnSUJsdHBwenhGcVFaY3VjSjBhbHNvNjVlbWo2eXVUQXJZQ2VDQjBBcGt5d0diOG5VdkNFNUFjSEdVZWZvSFMzcHBNZnVHYXhIejlUNGVhZWlMVXFWRjdKZ0FGSU5SamRJU21ZWWdDSUUzeGM1WCtyN1I3aStsNjhLZ1pudk1YY3hsZ0ROWWdPUUEwUHEyejBOT1U1ZGlWUVJXdGtRbUV2OWVQbi9COFZ6SUw3cGdQSmtuQlkxVTJsNWNtVHlGNDRyY21UU1dLVGNUNGxUc2tnd25aeTRVMFFQSmZHdjl1REhzdVVqcHVwM0lRd0JWeEQxY3pucWJ0NWhEbXk0MXJ3WXRtanJjTE1wcEhYKy9WZlpJUGxyY3k4bEFZaW14RzNON0J0cCtBcnQ1WkhKWTUrcmZJZmRuajlJT3NBRGlJbUdud1QvR0FKQ2xYQk4wd0M2ZnVjYnlQN3BQUnNRcFpZYXZ5SnY5OGFPRDU1RElqSXZSbVlVdU9MSHlDZU8yMVJLOFB4cVB5YlhJZ3NqMld3R1M4NUpPZXpTWlVCUVRhVC9RTXcweWhTMjVvbTJkcEtRb0J0TCt6MmJQdXVzTHAyaFU1Z3g2ZUhUN0g5c1JjWEErT2Y5OUc0M2x6WGZ0c05weVlYcTNzYVFxWkw2dUtqdko4SVp0M1VKV1B5R3ZXWEc3SWJGbUFVSmlkOFc5R0RBNlJMajZRWUd2anp3ZHdKTEo3bUZsOFhjUXdPSDFpNHFJSEx2RSsxWEpUNEEvd04rUGVEb1RtMzJsVmE0d09aNHVrL2E4Rzl1bDVsSkd6UnlQQkJxWmg2Zmc4NjY4dXJ6VzRGekNoSFFhaUtnWlFoZGNvRFdWUnZSRWpHVE9wamdlQ2UzVlcxMVYzSEdEeDdhc3NnS05qalpFME51NlJKa2RLNzViZ1FKRXZONTVkZWhsem9hQzBSRnhjR0xQc0pOR0VuRnBRUW85cVROS2RCYjZFWkxxZjY4NXdhbFMzak9iLzVNS1RDYnhkV1FDd0JhM0ZUQ0NhbXpNK2Y3RUNYRXlTWFIrZkQrS3BaNS9sMDc3Tk5EVXd3Y094Nnl3UmRCQWwzZ1RINUNUeXQ0YXhsRStvOGVNb3pyeVNZcTZ1dVQ5MFNJd1NwcGJyc2l6Q255V2ZCSSs5OXBhUzR4SG5ESXVFR1lHUHFPNmIxRWlULzErekhMUFoyVktHQWxUWFdQOWVFMDE5anNpbmV0ZHV1bnE3RW0velhjMVV2NWk0czVrZVRiZDREaUVUTW5DRkpyTUs3QUQ2RnJHZjhMVmtpZk5JQU9oVzVVTTMwdU41cE1XcStqMDZGTHlWZlZCckZPNmZXY0RkemFJSFgyZVU2Z0JYNFY3WW1za1Irc1hxK3k1ZmdvNjZtL2ZaUFpIQWxOUXZrNFlzNXBueHBLbFFxOFVsbXA5SE15dndHZVdETTQwK2hxMEF2Mm5YMTJFRkFEOHRsSTBPQTB2N1lpUkZ6R3I0ZUtoaklRVUx5dEF6NnVVbzFzYTVXeUFJeFJyNWs0Qlh2NXZRcHkyRUtQUVdzKzZCeXNVd0F6VVJhdk9PNk55Q2x1RmVYSG0zeUpKc0dvQzRUWWRUL2JKOWh4aVlybmMvRTB3RXN5bFlWS1grQ015ZDlWNjMxTlNERlh5SnlpTzVrRkRoSCtWOTd5QUd4c2Q1ZTYzRnU1aWIwc3lla1I3VkhGTVZjc1U2MkxPd2ZEakh5YVVneDRyOE85dVg5cVcxZ3hic1R5WVNNdzduWW5neEpaV1ZKVjJoL2lrZUpCTjB5Zk9TTENoNzlKeHp6a3c1OVArOEFrSy80U2NMeVVPZEMvc25Jb2tKeU90cHYxckFkblBVUFN6eGtEL3VlSlFMR3prYUl2NUpCemo3aGxUZWdPRkR1N21yVGhmNVlUNlFQcDFyRTNubmd4Mnk2eDFvd1BKaEhyMjRJZXZobDZEMXhzbDY5NU5XOFNNYnRTdkVZZUFKNnBpQjdOcUtqa2dYS05KMW9mZjN5UnVDTktkSVVYSEZ0Nm92Y0RZcklNSHBKWHJNenBzSVRaOGorTDBkZFlxWGs4L2xZMUFXT1h3WUNDeURHbFpGVlBpRlFmaGlITFg3dWlRa2pYTUhkeCt6L0xpT0dMbDJ6YmZUY0VZNHJiTTVuNFd6bjdTNU5YcCtJeW9BV282Y3FtTFlENUs5bW9KWEdPNXFLRnIwd1E1anRuSUhtMldtYzZXM0JxNUp6d1UxbE5weEpvekF1SEVWcXR0dk1oMTNVZE1qRzBzaWFwYWJlZjlJeUpWV3F6OE1BTTRtZkQ0ZnFBY1Y4Y3BLOVZWM0xlL21lMDA2YVJ0SFg3d0g2YUxhWVFBSTBKWkR2M25VS09icEZSNGczK2l6MXN4YzNtWWdPOGJuMURJenFLUzFkZmVqVmNlWkdqQlpmWmdmeDBNS0ZTOFo0Z2hVYXYwc0hyS21KN1JOOE5MK09CR1h3d2VDQ2V4U2xKcUo0VzZBcnY1eHhqY3JpQ2FrR2tZUWdkeXpVK3VobXlmOWZTUGR1Zjd3UktEOUxHT1J1VGZZazZBUTErRitzMk14aUkxV29DOCtsRDB5Rm5hbXVzVlprM1lqb0lEN2plYmRIYTZmOG1GcXhva0hibS96TWYxSWhFTmFqZzc1MEN2eDRCQnlNR05JQzFURHV5VVVLdisxbFBEY3dCZWhmdU1YUDBmNVlnY0xhbjZKdXFJeTBabFpTWTlGMzJ2MnRJaWo1YnVjSjNKN2dKOTVFTFZDKzhrbmt4UnVuQkVIZTBaeENEY25yellMOFhsdzI3L3o2VkpWNWp2TUZIVHk0S3NvWTFnQ3BXM0IvL2FWY3BJelhsNTYzNVV2VGhVRHhEWFZteWQ1SG9NcHZDM3pZL3RWWVRoYk9IZWI1a0lhM2RkaDcwWUkxRWUvVW11Sy9JclBTc2RSVnFJK3pnZmpRemJCU1ZtZmpxTDVrOUpyL2ovMDBCRXB2VE9QOXN0Q0xtRFgvT3FZbkx4ZHd2QWtYYnYwSUFYdVF4d0NvSjZqQnN3eVAwS2ZycFVTT1BVSnNzYkFiSW50R2xwUEd2TXdTRWpWeGFmSUZVa21wSnp6QTFwbGN5aXBMTGF0TWdHNzYxaUJtaGJ0Y3czWXFidWRnY1RzcnR2NndPcjV2MEZ2TDdNTFBvbXNGaVhlbytrYTF2cDltcUJROW5MWEN1MXNScUVhdzJCZUxUL2hwVjNTUm0xVnZCUTQwV1JPU3dXY2xlS1dpSy9jOFBabngxbkw3T05ObE1TWlo1cGl1MXRJa2NFbGh5Q0xKRy94WTgzNzFFQ3dqRzBmQTAwT2dkMzJrRmpUTnZVQ3BKcjR2TUZyVW5mM3pIRG5SWE1wMm5nTU52Tk9MUTN3TVpDSEJ6clcvYWdnc0xTc0s0VlZlOWpoTWJoRDFpQVFBYnI1ZTBDTUU1Q1dJcS9Gb25HWlpLem9uaVZRYUZGRDVKeVhFblRDMXpNczBBZCtJdmJRSFNyYURseWUxMzFpTitnU0lKemxFZU84UEgzR3F6VzVBcTJTYVkybEZ4RlhnUnpwcUt6S09OYTVYOGZPSTRxSmVCWnB5QXlvZVJLWXphTktRUjc1aHBTYXJnRXozb0U0WWJNcWV2YUxnV0hMVmtNRlhVSXE4S3R5bkcrZVpsYkRBcnpPekkvdzlENjVIZDN3TmpmUUJhbEY2NmtRRDEvZndJWDBmVFd5cWhFSnhPR0hmb1BXSWdTdDVzZDJMRW1aWnIrcDVndlptM1NOdTR3VmpCUHl0OWp3MnFpcW9wRE85SXk1SHFRMUU1ZHJvOG9jSG9XTjV6c0FVcDA5MldVZXRHZ3h6OHhHTFhOanZWSUtwSEs0eCt0TTZyczVrMm96U05oTXJhL3hBdjlhZ1FaWjRtN1RjMzBMbXFrcFZZNW1kOG1idFJ6dDFTazdpNjF3WVdnYnoxSHJyNGZPcTh1QSsvR2JPQU9xZEJ1dGRUS1hQczFDTHgxc3lEd09wL25FY3EweUdkMjVUMnpJRzZTbXAwdCsvcHJJVForbzhpUXVsWVdya0tGeTg2TzBkUUtWNFBadG56RjlIUDRXZ1M1dkZqWDJBcWhLSS9hOUhlQVE5NGRiT0F5Q09YT0JQWDhkS0RJL0NzcTJlMVJLZkJTUkViWFcxZHBUd0s2dE9KaWxjOW1Xd1BZQ054V2Z4K0RYeXNjcE9MTmxFWEowNUhMcmJJUmtQWVJXVVBUR205R0V5ZlV0SkxWdTRZNVFYNDFreUxGU2s3bzl2ZFNIWmpWMEdMMS85ZC8weWFSd1NwTGlBb2tRVnRXY1ZMcTZPbXdvZlgwOGp0WCtlZUhZbU1OWkwxU29vUFE2NkNDckNUb3pvTExSdkJJQWxENWhRR2pibWVwdEZiNmY4T3ErOXFXQ0NodHViR05QRmpNRmJmcEVGUlpQd3dFNkYyZG5LeXhCSERSZE4vVUtYMmNOOFY4R3BVWEJxYnIyQ1ZQdndZRDE4NXllTnhSQ2UzcDgxOExieE9icTkyaC9FTVFHWW0zT0pmUFQvYTdqWkk5SkpkYWhpOXJoTDB3WmR4dEtLQ0drdHMvY1VPaGZ5MyttbHdpRTd3TzBhaTV5ZlJGOEtNbXZLOGU4cGxncGw0V1k1V29QQzFVbE9pZ3BkR1VmUTJyRHIzK0l4OUtUaFc1c0l6cW9FcGhtREk1TUYvZWZpcEpRRVRpbzBLcFdjSkt6L0wyeG42WEtFcFJqODhkaksrUCtmZG1hWXQ0Y3MwWXpLSXJleW1mRStLVEdzcVV4TnJDaTB0Tlp1VWdUbEQ4S0tYMys3YjJUMFBveHRsK1VoVkUvMlVucEl4RWRzRHVsWjhDakhDU2JMSEZrcVFiVERJOEFWKzExQjVYNFJyZUE3dUFNWHFLYlBUbVAybGR4OUV6OUt2S0k0bkJzbnVUbWpkZWlLRUYyWUk4eU0rZFp5bTNkaW8xb25kNS82bjBJUFBuZmhST2VNSWZwVk5CQ1IrTkRjK24yemJnSzRncUVWMUVPZjBOM2FLNVYrb1E5NVB3dzU4bk8vVTJKNTFjU0NZbzFoU3ZYWWxtdzd6djdnWUZhMGplTTRsT2llOHBKdFk4WGNzSEJYUmkyRVJ3REpuRTdMZHhFYTVMOWIwcnZaRUloOXZYbVV2MXRuV2tTNVpwbmFFTzFDZmtlNnIvRzNLY1laSEFHcnJOaWVWcGJPVlVHZGpjd3duR2t3SHhFR2xHYmJHRFliVnJmSGQ2cmNEWDVpRU5rNnlZNVhOYTVSd0UyUU1GQTlXWDBNSFNkdHY1NW9MYldtdHQzUjFrbndrVTBIUytuUFBNeURnY2NwRFl3ZTVlVWpQcFdqTXN1Q3pmcEdNdSt5bzV3RGY4TjgvMnNmMWV2My9WZTMxK3JwYnZuK3NSK3IyRnA4bjFjYjUvUVRuNU5zWHcrL212azdUZm4zUnd6NVB0ZjN6L1pBLzFlMlRmTjZqSjhuMXN2MWV6RFBrK3RYZlA2WE0vSnVEOG5wOTE4bmZMOC9TRGdiNVBxVi9uK21IL24rcmwrZnUvZko5R3o4LzAzTDVQbzkzeWRyTmZCMGQrVHVCdnlkYi94TmxBSXhTZ2ZMVVRpYm1wMmZyOVVIQVBtT3J2WFlCZEE4WU5DWmpVYWFEdjcvU28xalJxdHJBbUJqK1hzQjJuRFNnRFdieWxwQm9vMW9qTURNQmdvM2o1UVFoaERyMnBweldQTHdlUTVIRnd0WVl3UHFpSHh3ejFxQ2JBMXB1OEMxMHAyeHFTOVZoalBxY0NPSmRObUoxTnNGL1JoODd1MFhTc1BjbkRVRGc1OFR6OE9nR29CMDJQdDJTTndpL2hhcG11UFB1bnQrVml0alpBeHlVOHJPNVdDYWxTb1VibXNiRERjN2VzSlhoMkVDeTF0VmRGYjVEZWdHRitEc2RZalNIWGhPeWdFbkdzYTNlaERocm41VWhmSmkva2svKysrZ2l6cnZWVDJiQVlpeC9CNzhZSnV0bXJCK050MTBrQTV2VDR4TmNnQWVWNytaTEZVUUhkbWQvZS8zYUM3QVA2NEFjb1hreHpHWGdPUHpEYkM1d3oycHdoZDRhZGs3UUx4R2hNQ1A3dzAyK2I3ZElGM2pOZzcxeU80dWZnYkFtZFNRWGl6bS8xbEcxa3FjNi9NSlhvRFYyem1XVGxSNE1TWHh1YW83TVlwY0xCVkxGeW42ZVgzTWR0ZThnT29Sc0Y3QzA4UHZ4YVJxVE5mamhyZlZOaXYwemlqL0RGOWZIN0lnTDFLL0tZUnlXSzlBOGIwdXZ1R0FDdjNWWmFwUWtlTTJ4WFdOakZmaEtDdkZ3SEg3ajA1RTdUaFE2Z3J6UEhrSWRaR09LVUlMeXdnU094Q1hpRFBBRStHcmVvQlhodWJPT1F5ZjJ1ZlcwRUovb2RvY3BablZRZFNTTUhJOGZLTkpmQXI1WS9Ka281R0NYZ0E2OUxVVTZaMUFuL3NBS0JLZDZYSGE2ZTRCTm02NGFYazNEaS80U3hkNVR4TnBEeWswTGovU0VpeXA2MjB3MGZqTmZYdVhuU0d0bUgycDMyVWRzV0VUclR0bkJ4SnNYSTFLWXdaWmNubWRMRERKVERWZWdXY0psaHkydHAyblNnUFdnVmt3R0hQVTFJK29YR0orNGlEbHk2NWNYQkZUTHE0K3dCK3FSdXRSd0J0YnJEZkZVSkdsY3pySWY4RDU3YWtBMFRxempKNHNFWGFsRks2RnhUTVdHVkRsSHczVDNyanVEdHZzbTFRWGY1aWZsWitwL1YyOCt4N3dZVDVBT1BtTE1SU1ZiT296ZmdES2pzMXFHNWo3TkM5UUo5U0Z6UXhKTlFpcGVtMHVNWHdKVmFvR2Jrd05QT1RldmZlSTk0SEtaOTBJa096UnZEanZCd0ZXcDZIaW1wWkczbWh4NzRlS05nSW1ETWtnYlVOcFgvbHFGbGlYcys5K29VdDQzM3hsUGd1dFVRbjJrWXNUeXVvOXgvQmNBbGtpOGtPV0lOclpzMjIwTXVwS0xWUTRVdytGdjJjM3RWa0Z6QXhpSlhXL3ZXbDd5VFhqQXVDK3o5dFhSdUk1dEgwZk1LVThiVmVXU1h1ck5TQjcwVGt5NHI3bW1VYUxtVTJvQjRpQnlmOGs4ZmpHcW5oMXkvM2F0RDYzd0F3Y3hxZkVEUjZLS1U2Y0Y5N0wzWDdUSnBRbnRrSXNaZEVPeWl0SXZYK2F6MEcxcGVOUldQOVR3N0tZZXlPL1dldTh3SExoWEhjeHNiajk2SlFManp0K3VpVFB0K3pvQy9zbmZGaEQ0NGJzR3ZaQjFhS2pMQklxb0c1QzZpaDVzS1NtQW1uOCtvOHBrNzJsMndsdW5mZ0VXSlpaeW10aWxjYlJZejVRUkZkN2VYRjAybkdDeFYwWEpOVG1lUU1zZERnKzMvSG5XL2NGYW0wTVhqa3NUTTFpczhoYXZUT0VQbldwZ1IvdTZVTU1pZ0ZzS0pwM1hPSW1kOXBzZFBxQjloS3Q1d2UwaStMWlBhakFpUGh1cVB1UE9kNlExV1Q0c3ZqWEhqcGxYTlNxcEVVMHdsblpZVHJ5cDdzUURGbnV4dHl6eG5kNGFXbi8vQVkxcHRKZndtc2YvSWhGRkZXQVM1dUoyZlNRdmhvcGQwM2VvVVZxSjB5aUdaWlU3TWdHTndnWGtDYStMTmtFeUJxUkZSZ1JRS1phWElhYnNUOGw0dlUyM1I1dlkwbkJVeC84Tkw1ZzdLZjlhMGVNem85aWZXNjNPc1R1N2hTR0FLekNaaE9odDhNeWVFMzQxc1U4bUF6Sm54WDgxLzNuWEw0N1dxeXNJZXZQeEtuWm00Wi9JSm5hZEVaUkt3MkxSSXErT1dicDVIYnJFeHdhbmpuMTBjRFZVUnVtc3BURVhvcHQxREdsVDgvTFFuVXFDcitvMkFNNTNmb2lyRTNjUjRIa2lSa0JTQVFzUzQ5QklyaVZTdkpiK1JHcEc5K1MvdW5FWnVDVHRUZnBrdEFkRmhnemlic1FQdDhSZjExVDlmOUZWcVM0NlFFc3V6NjY4WVNvYmtqOXI0YkNXMmw1Qjc0alUwS1lQaEIxelJtSCtobU5GR1V6elVLNjRpSzgwdUZjeldWemxmWkU5d2s3Q2x3dFE0d3NjSkVKUVQwSklIbHNnMHVDN2VhdGE1RWp4WEt1cWNISHhZQjJ1OWRvWk9VOVY3ZVBXT3lWMWg0VllyUUg0RU4rQXdxa1JTSWxNRDV6bzZOVmIwa0QyZTg4RzR5aGM4Rklzb2RiOHNsWnlaOFVGekpwY2NmQ1FDaHFYbFJGb1pEWHBHZXBRSXdqQXFVWkZuc1h3WWp4NTB5M0V4Q2kvUERhK1g1a2Q3ODkyUG43YWVmbUtzbThwdkRaN1lPTjdHbjVTc0MrMnlHcDB5dlFZKzZpSkl4QTBJZ2tqZElqVi9wdmpmQXQvRCtncjQ0d1RKQmp6ZUQ1WDBiM2taZGZTSnFGTHlVRnhKRSs2WTVla01qWVVvczdnN2czMitPN1FoejNwUm8vMlRWTnhIVnVwSFBObkVmRGNNRFN2dmRpcVBHZS9SbnFHM2RyYnZ3YmRkY2ZXRE1Oc3NNUllod08yY2hiZVIzSVF5SFMxWStEcXh1UVc3c3NBdldUUmdEOTlUSEVDdkd0RVVPWUYyNmU4MHNhcW4zT0oxNEt6eDhjc0RGTkNlNU1xOFFQV1E0K1pQSDYxZkM1ZDZxdmg1QWNPQWJrMTlQUnJiaW9qbVlodW04aG40VHRBTEVzdk9NSWJsMHhYeitpMVNvSmF4QzA5anVRR0xFNjY4ZTlidGorb2hub0wvMWlaaDBYN3orU1RacGZFbFhjWnY0aldDd1V1SzJGakVTMkhPUDhIZkdqaGpycUVNeWwxaDUvRk5CQk1HNmYxZFhjN2Y2Y2tHQ0ZINVA5ZWRCTnFnd2MrWGpzVXVKWlFqc1Y0cFQwcVhYVm1HSFl0OEgreG5qQVU2WDIxSEVPeTBNUFJCVms5bmJOMW5OMFJzZHFqM2ZiWmczN1BCclFpQzA3MUxjd245QzI2TVdxOElVWjQxV2UxVG9JdDd3YkZlTDJIMVNNRk5OdHJmcnNuaWQybVd3bWUxQTNOUzBtMHRrajl6ckVtaWhGZlhEWEpNQnVYV01XQ2ZlK0U2cVVDVGlieEZIMTB5N3VSNWs3QW9FSnhlTzl2eS85UFpTS0M3QWdUc3JNKzQzMktwWFBiOFkwcndqR1FXaUVUUEFCbXU3YXV5aEZDd0dkRWpEcmNiOW5ReHRzaTI3MlJlRTN4SzZsMitxRFhDcWNzeDV3a2h1V1FEMU9HTkg4cmNwY1hpbEkyUzREVE5CMEc4dFg3T3RRR3ZMQXZsd3BXcmsvSHAzY05JUWYvWE5TS3NpWSsvd1E1MDludGRNRnNXVjcyTWdIMUlHUC9Wa0txeXZjejdhcVFXRUYwV0FQTlVqSHJGam56ZndRaXVEZWlkSTlIeTRKbWYwSHZ5MG5INGJQMjRqblRERTlKbWMzYmp0NGFuNkRTWWtXZ29ZVDZuV2tKQVV3eXQxT0tkQWtra09XTmZhZGh6VStZNWU3dCt1K0huQXRGMVdINS9CdGVDL2VKREtLYytYWmNSQVhlcGUrQlcwVkpPMjNrQ3lmZGYxM2lRNWRkR21jSk9hcXUzSGhLcXF4cjdHcGNOMmZGeE1hTjljMG9aQVg3ZXdpWi96SkRMOWtBWXppUDNtazV5d3dPWjQyZ3hJMlBMRUVxUE5aVFBheGI2MU83QkkrYlA3WlREeDdZZzliOHFDc0RkdEhoR2k4bDNkL3AyTVZuQmpTUkg5a0IvZDRCY0dNYldJbVhSSGc5WG1DNHNKQ2pjMllBMGpXTG4rNGJnbndHc1JOVnZDaXd4WWk1UUR1MnIrSmQweDZEd0NiU1J1S3Jyc2k1N0pSYi95M2J6ZFdteDJ6Zzk0L05kQVI2enZuaGFqNVk5Wit6clVFNDRENW1SMnJoV05xKzkyYUZVR1FReXR5NmZvN3NKNWJTNGZkdUljUEtaM2hsb0pqeHhFamk2M0JpZmV2bHpJaERpaUJ1U3c4aWwxRkNRYkhlRWJiODRMbGdEWTdnNUxqNlFXOUp2eGVETWNoNy9XZWN3NFovVndkNzc2cExiVm55Y253NUVtQTY0MDN5K2NHeHdsazVVUGRmZk80VTdGcXkrU1puOWd4MDVCR3BYdDR1K0tmMXdka2U2eWhLcENDaVZVS3cydzYwcTFkWDhRa3NvWnAxNW9SY0NFSVRTMjhDU20xMGQzZHB5YmRFalR6MWdnK2tlUTA0VXBoenZneWUvQ05JbDQ3UlZyMUh3WExnSzh2bW1QUXBwTHIrSFBUUnVXU1M0UmdDSERQcFk0WXZUQW91S1FmbkZJVHBCRyt5Ni92YWU3SGhFOTIzMlUxZysyNGNnNG5BbitTOVlJWXY2elVDOElZZzlleXR1WENEa3loRFJYWC9hV1Fac0UvMmlGVEJvUjdid0NHNnBzRkRjMENoKzUwVFk1dkpjVitvZ1dKVmZKdzk5bzRUWFh1dHM5TEpSZkVuNDFING5YL09jN2JiTG9TT2p6WFVDZHlSSmt1M0F5UWRpblNjMEwrdzFmUCtWcW8rVzQ3RncvV052REFPUjZ0Y3ZEZzh3R0ZEUlJqRitBcjVNWGJydjcvN0VxQmppMUYvb3FPaTlycFlmcXZ0eEJ5NlFhdnNoalhVb0hzRTc1Qk9mei92VERnTThXeUVCRkZEZUtWZ0lKVXBEdnd3dXRFeFpXSkVsTmZ5N2Fsbmw0a05mMTJmVkZucDRFRmdkdnZYUFpMZzdxbVRxdlF5Qi9McnAwMWtRNWlUSWY4QlVaWk1WK3hsRkU1VzVnQmduOGhubDJ0SVpnVjhhYTE0SmpyOEFhRDV5VGRMRXdhdll1NG0zNTViOExsVXprQ1c2QU52U2prMTJpb0pUUnk3S3dtd0Jod3FCM0VPQllXUWVsS1cwdFN5dy9udFU2aHFXNzZMcXR3YTNRbjc2eGU3VEptOTVIbDlXTEJUTU9yOFhuWmVNWmpoWG14eEg1OE14dWF4MDNJZGd5bWtlRFg5bnVORHk0RG9DejlnbEZETnIrYVZ4R2NaNTROd3NaYlpnblhibzd4S0kzaEZoVmtzaWNNck1wTHdPZm1DMDJVT1JNV1paaXJaYkxVUUVNMVl2cVZyMVg3SFBtdy9xdHBPdnE1c3E1NkRTRStKakdQZTR5S2JmOWtSREJXZ011R0k5WEl2ZGV0cTEwS2lrOGJyb0JzRlkvdkFuTTZORGE0NFpCM3didUxncENCRjNMejlRSGFYWVYvUXQ2Y0VqUHcwRDZ6N05yRzV6ak0zbXkrbWFWVjJWaTdCbk1lNEFkQTkvckZZUnJyakRzMURpM3hkYm5QaFJCbnM0MVczSjVlbjZaNHY1S2JVT1BiL1JmS05iVHBqQURSRk1sWjEwczZSbWxMTE5lN09KbTc1QVoxb1djSGQxcjNoSVRtYU90cHJqYkFsVWtkb1B0eVFrVUc2TVpZT0ozZ3EyYkZWTXdYQzNhN3ZxeHNrQWhuS0RERzBDZVp6MGJrbCttR3RMeFdRQW9lNmgybUp4TmduSk12M2s3UzRvYUMzOG5Ga0ZTUGZNQTdKNGcrc0NnUzJkaXFRSWNPNUFVYlE3T1hsc0N5MTRXbFBKZmV1N2JJZ01vZElia2R4UmdEM3o2bngycUo5UjJpWWtTTU0xM0VRbkN0b2dZUVcwWW5CL0t4NnhrVzBxUEIxTWducWl2dDlrTzgyM0FEUUlhTXlSVzNha3didkNNMkNjZUNFQXVCV0RPdWVCalY4aExSS09PbjdwcGM3Z1BPMDhZcmVTYVIrRGg3RFY4ZXFodThsZm8zVWs5SW1FUUw1bmtxWFJjcTBUZXZzR0pFNms5RmxDaDRoVjgzTlJiWjE1dEFsL0hVSTlKdG1tQnVLMDlnSXk0cUZBczlDdUNNTFJsZC8zcjBnTitrMWlkRFpHMy9uSzd3VHpvRSszbnY5WEpnb1pWU1J5WW0rbi9zNE9ESTRScEdZcVRPOFBGNEE5YXdUOXExOFE3dXFKSjg2cncwNXZqaXQ1Mk5TNHJnZmxIREI2Nm1mdnlzVlFaUktoYTdHNStRbDdMSUZta3FxUEJwVUZPWGg3NkxHNDNJUER2UzhJRC8yVjFjRFZBQ2VJRWlaWmIvQkRJcTg0Q1c3MjVreTcrY21yL2xkUStwbk5BdTk3ZHdtdHFxaHdOYkh3SDhQZEhTMnZmQ3ZhbzhmT1ZLWUtqQk42SjhmMFRIb0dvTUdlakRYQ2hPS2N2ZHVMWFBmWk9VT1VnRFM5MURRUXNaVlhCTDlDdHFJZC85bStrRnVtVEMvMndSUUdXTGNpdU53eWUxZmlZQm5vN0doa1ozdW9hak1qTkJUVVVpRVNKb1lhSmJjSk13RHNXaURwZTdlT3gybTdBaW5TY3N1Y2hEa3ZCSnQzOCtMdkdYRWJnNVRzQ3F0RFVaTTk4RFlJTEUvZXgxSFRxMGFpeCtFUzkwUDI0VEpCaXE3ekl4QnJXYmtoWFNoSWd5d3VPdCs4NWdEZXl3Mk1CblkyUXJhWDV6cmY5OXUxSzB5bnh4djJsbnp4L3Y4NGh0UTZ6TkhHc2UvWUtDTE1XVTQzcUJMRGZmU3NYSm84bU05Nm9QUWp5SVlQckpkYW9VZVJDNFIyMS9GTmQ1UWdMajZieE01UWZOcFlyY1BiUmpNUDdJMW9BNW9nUWxCMktJVGdISm9OcU9pbzVCTldxVjRxMUhTMy9nczJRYzBYeXdJZWZQcVFyRlE2ODY5bkJTQm5yRkJlbWt1bTN4RFUzczdRWG9URTQzUHJ2MGhJSE5LM2FiQUhKZnAza3VlZ1JoRFAwcXVROHZmdEcyT0V3OXV0RFlDODUyUGQvQ3k0T0RRVWg4SXBwbWcwdS9URXd0V2FWQys3NEVMU09jS0ZHQXJqNWJNQ01ETFNQanBYVk5YVmZXWVNjYzNEY2xLeGhFM1hubzhRMnVjRzNzY1ppcUNxbDFGWjBnTGVFWm41azRKY0NwWVZVQkRrcnY3WmJjbzQ0VGlSZE9kR3NQOVFZU1ZOcVEzMVB0aDhPTnBzb05aNmxoOXVqcXV2ZlJYbmxDb1hQU2VXWFhPUHUvNnFxQmd6cXJoc0VRcGk0cDl4QVNHT21NVFVsQ2xYZHN0ZlVxcVhSdDRlc2xBcWxtSW1vc0I3NEQxVzlQaHpDamwrckszVFpKbXZQTzZlUERPMVh1Ujk5V3FvRWdEOHFJYkFkamdTZ0c4cEM4WG9uWm1XZlZvSjdaZEhGUlBKdk9Bd0hwS0t4Znc0Tmdjd3hxMmY2VHZ5bHJXN2pTVGxab29JT3M4eXF3UjhUSVdPNGVlYTZMck53a1FMdmkweFRMRFpHa242cmw2Ry9FNjdwR0JwSEkzODgrQ3BKdmZxSWFOZm9sWW9SVTJFczZYYnlhVTNxUzltOFdmd2QvUjRneDR3M3prc2xySngrY1M0ZkJ3emt1MzZkUXpJUG1JOW8vYWJmYWpTSmlodzdvc2s5QmdhTEl2SVpyV3daSjIwZlhsajA5U2lDWFdqTnlYM2J0Z2FYMzlCbG1HRGVZMWtLMWNoQ1BObVNITjhxekh6b1V2YTZyc280cHQyT3czMjU3VFNxZzI5MVJVSDNFMGsxL0x4VkJESnhrUklCVEk2QUlwVzlGeUZaOHp5bVBZajNZZ1loRkdReExWRTR5SHZpMmlLbkNXODVWMGduYmpDMytGRDF5REJKeHFQZVhKVHpPa0ZyMk1XL0xaT2luN255d01yQUhmaVpGbGVjNld4QytHRjV4dzVLWUJ5R2cxWWsrN1VENVhUWnZkZ1cwZ3R2UmR5OXBZTEE3ZytURjVmbW5raXVRV0dVMFoySUdCaGt2cjc2OWo4L3dxSXFjbnJ6UC9LdG5MT3NnZHRJRlgrQWlJN0VKR284dmlPSkZSRnR3QjIxQldNYmFINzRtVDhsS0NlSnBWTno3RktLZXFzcTR0eWFJODRoRlczSUkxQjlWZVJwSWtjaDNUQUFvWURrdlNXSTI0NGNoUFRMNlh2RytaZG1BYzQ5ZDYvbldrdGJ6L1FYVFhESGJPeFhZSDJIMENrbnU5SG1VVU1Xd0pOUWhIbERKbkZTbnBvTDhYNC81ZmZlWTBwT0FIbXBaSmlWTGU0WUFEQ0RyMHVNeUhGaWZnbzd2K3ZYeU93Rk9rM1Azbmt4MzJ3ZEZvNU9kSFIzekNZazMyeDdNU1JRZ2VMOVNaMk5FS3NsM0tMNlhpc0NCaGNXV0NJbDhCdUkxYWdhZUVmRjk0MTJxRVByc3M0bmJhYjMxM3NtMSt4RG5MbGdkbEdROEwrY05Sb2QyUHNxbTNJRnNzQWE0c2h3V0h3TTFUQ1ZkUkgwNmFNSjNaR2tEMHdzUnBpWjA0SWVpeGxGZkhZRDg1cjJCUXFHMUg3QllNeVdET0oyaWYzYmxXZjhGb0NRNTdycURZU0RKalBhZVdCL2FkdHYyMG9OWEsyNkc3YWJFY0xHWWM3c0JOc05DMEt6R2JzTVBzNmJyckFkd0ZRVzM3VFM4UzZrb1FFNjd4TGcra3dHRUkzVVZDOW9TakpFZHdxY21reWVhdjFRVHJKa1lkN0Zudjc5T0Z4M0xwUUVlQWF2VWZaaEIxVm45OXdxL2J0TjFhVlhCaDhMS0pNYXd1K0lDSkszRDNXV0dDQmttVVRURzJzSzJVT3NyN1psOUxoNk1VSWxrWjdQczA5TExNWFJZZk1VdFRiUWVjU3pFT0JTTGsxVHQ2cnhlSEVuRzlwQWgrNzZRVDZxV2piZjI2VnRtWjM1eHRtd2p0TWZUZm9qRHIyNXFKdmFHL3RZRHpqWEhsZUlPWE9uUEllN1E0aGp3UDRtVkhadDdmOUg2WDVXZHBmVUxSZkxzWk1IT2ZTL0kwTGxRVjlIUXIyR2NuVFZBRG14WmhwZ1NyOXcvbVV6dldjQ241dGxzV2dJNVNXQWNkL1hjUE1nR1Rwd24rMk45MWhwS25UY1dMZG9MSzdwMlVMdGhOZTFCYS9WR2NJZjJmbWxLaFN2cytGR3pjWHRYaFlmT0dJK3RBMlBZTkFRcEFVZkhHZ0x3cE05UGthZTBaN0tDVmhuZUZLV3o3KzVzcGJBSVpZZFJuZ0R2SEZJT3FPZXNzRXVBQTNlN290b1BpaG82N2l1Q2srYVc1MUtJMlVka0o2TGxoRVpKME01cWdJWHcxWXM3VnA4NkdsZEptaGlNMjBWc2w4c2dTdGZNZENsMXhnMXlrRUdFRXFEMktnSnBhOHBKU3BQc1gza2U4bUxCRXdoZ1JPOHVUejQzUTdGdkV5UGJSV0ErTWlEbFNDbjhqcW1nUE5ZR29iU1FOVWs1bmRIOUdrdTJwVW1hbndvR1VkT1NyaG5YMlo0dSt6dnJzTzhEYkczYThuOElGNEkzRkUyWDAzU0c0MTV3clFmelhDTXQ5TWJNZlJNSEJnSzd3UWpUeit6QjVZM3dXV2xISnJsTk14RERZQnpXSTdEcS9WM1hBM1puMVFhRnM2Vk4vWTgrYytOYzFkTENQaXA3MnIrU2xoQjQ4OUVJRWoxVG9TYWhKSGJ4NmVPb25aRXUwY3JZcnpWUXhSK1U0NDE5ZXFmMXJmcmNxT3pNdjJ3SW1EWmo1anFQR0Y4TU8xTWp5SkxaZmhYOWk2Ni9LRkdwbU1SbUFkSWJtMERwSTNOVVNod2Y2endNNnNRVkFQRkh6K0pwMmJtSi95Z3c4Z2pXOG9UdXNxUWM1VzVTTHFFeG04UWxNQTI3cncrMzlFYjg0N0RGUE5hMzd0enJzRHNJWHB1R3RxQUFmaGo0OFBUZCtwVVlkQmw1a3hYekpwdzc2YXdwT2EwL2d6b2lpNENZN1FPZjdzZ2o5dU1qN3FLMmxHa1RYMWIyWjlaNXhoanVlaFlldVVzVkJ6eHdVSlloUHBsZmFSUDlkOEE3M1BEOXEwSW13MGY5c3h6OU5yYlFIbnlWdjc1SGRhRklIdytHeGdidWdHOUp2V1FWN3g0ckx2aEczVjdiaGQrSWJZcVJuTDFDWEdIdGY5d0N6RWRYUlZIZStuZGIwWTh4Q2xzOWxNU1F3elpscFVkWEZ5L3ZGQVY3ZllHMnc2NStBbll5WHpiWnNzUnFiNzRlT2xxYWFHaVhzY285c1g3aWFqU1pDZFg3OXBmQnc4QUhsL1RkN0ZJbXUwSGx3MytqNWhkVXppTk5lOFQ0cFRWemEwdW5RMEZsdXRGa3owTlU4elFwZFNBSkNHVERHbmlnbndOQTI5TElXcTdiL0lpZ292U0M4Qk8wcWxjUWoyNVNQaGwrbGpFc3NsZ3VGbkkxM3c4VkdwMW1aRTZPZ1hJRmxva01nMzJ0N0o4Y0pjUXpCSE1UaXRkWE9UY3d5WE81SVF6d05nb0FMbXNWUU02NGhQTzd3b1A0NG01QzJMdEFUNU1sOUpWZkF0UThBVmFKd203VkppbHVEbmhkZGFtbU1vaXlyR1k0YkI2NElENUpRejVNYXp6Nm5nejFibVc0TCtPYzlWdjE5N2VqQnNFY3FmRHg4MzVOZEk2QmpkbU1KK1V3NURKWjgxK1RoQUQ3TnlnSGxMVTVXRTJ6bnhPcGU3bVRaYVl5UWlnL3ZRNjNmTituelV5MldzQkNjUTUrMWp1dDhoSnVjc0Y2a1ZrQkZrSjVqWi8weS9mWTZwWkJUYmQzNjZzaXRaSHZkcHV0KzBsSzBROE5SYWtzd041Zmd1ZkQ5Sk41QldUUmFQSkNDVWpjeU84RnZOTG10UDAyWGhWM3FhVVd2V28xajF2cXBaQm1tSFkyQk1FSFIwU2F3Z2luMzJlcEJpbVppeW41aXpseTJBUUxTczFUbFYvUnhUbmlmT3hyVUtGcVpFRjVXWXZHcjFGWFlCb1VwNmV1aElaazkyVnhNU3JvQlMrZ253Zng5aGpIV3RJcUlXSTNLbkxWRUY1WXQ3SjhmblhxOXlOd0ZqdE0rN3NFcjg1K3lYTjhyWXBpSHp4YVZrNDVHUWxrKytzZkhYZktzRk9BUXplZ2hUQjZFM0R5dHZVQ3NxS0xZTGtweWRueEpqVitIUFhPQXRzWmFTRjVCRWtxcFNSbmxxZDRjanJuaGI3QWRLa1crYXpScGcwcVM5eHgxdU9BL0Z3bVE2ZjF1UFNHWXR2eWw5Q0ViSUdweHp4YVV2ZDY5MDdmT0Frek1QeTc5cmFwMkEwNWFobkMxU2FvT2FKWGY2Tm9hallsVyt6NFZQWmpwVXJKMEYycDlNV24zTVNpSS9VUW5GMjBJNjh0RXFoY2RqUDJldXZIVjVKWXNsdmRIUVprSEZEalpaVzY2aTFoUHQxL0RabjkrR1lHMStEcXM0OWFRSEZIZ2MzUW5mWjA0d3FMOTJGMWwwSkp6bFVtaGxtN3NvL1pTMkQzSmJYQ2t1TXVSeEZTSUxPNjlRRWJJdEUwUHN2MnFkeXVqOGNWaWplRmFJU2l1KzA1em10TDIwckhVL0xvNm5ZeWhoaWJhMjlqeEZ2dVlxZ2xzMkV2VzlBQkFWcUlYNTBqZGVGcDJUY0plakEzOVMrNloyQy9FNlQyaXN4cTNmNG1NUFV0c0ltNDJZblA4YlFKMlFSM1loWE9vSjJNMk4weUp0Z3pYcnc4SzBBNmxHV2RmUDdyeFF3SCtBSVBzUHdIakZQUld5eGY2ZnZCczV2djFoVmZmcmVNb2tqSUhmZFhGL0RMMUpwc29BNGdPcjN2T25uWS84a0prc2ZlRm5nTmFMYXY2aHpaT3F5WENMMU1tYWRIa0lEdU9LcHlPU3paZGRmRVZTajNHY2JjaENuVWxkek8zTWpKZ1VlVXNzc3ZlSzc5M1RyU2dLYTd2VmFFMmdDTTgxRlVUZDlYb2R1VVY1WEFiS1FOVkZLTmtJbzlNUDdaRGZldnZZdUV1RnhUTE1BaTdoN21zVmdjRFJVWld0NWdJYVZpWHNUNkpnL1IvMUM0ZG82UlI5eDJFMmlFeFBsaWxhK0hyQVFCK1FwZHNHVEZUeURjWE55TTFxU2l6TWltWmFJTUd2OGwwSVIyK21RQW5uZnlkWFdlRktLNEZpcmdtVjVJQU9sT1cxcXoyR3ZQSjFISFkxL2lpWnRMeFUzQ1lwem9VLzExTzAwL1prOTRCOE1vV1Rmd0VWakFXUkE2cVdQOHByYkQ0K3dFa3pvVXJTRWZ5K1A4L0tnYWU3L09LL3VmOVJVZVFjeFY5NklMdXIrTVRxVS9vbTJLNCtKcVJPeWtDdXZvTytWeTZGdDNYelJlVXdGamtJR0pwSXRJYmJTYWpjK3dVZm8rSVBjWnhzQUQzLzBFemlNK2IrWWxndEM4eEdIU1NLQ0hRUUVyQTUzVEdKQjl3clZWUE1RbnczVGhYN2JBNEp6UGV3NUJvMGJ4SHQwK3RUV2c1QkpjeFFJUTJhQTJWSW1ldUFJZWxTSFlTQ0ZqM05VY2hCd1gvTkJPYy9YY2wvdzhEQnR0QWQrTzVNY0ZRN1VCTGFmcVFXYzNQekhjNWNkZW5vN3NUQWFiKy91VlRmb25jUEVwYlRlR3lPWkdpN2lIbGwwUStXKzBoY0t2ZHVzQWwwdzMxeDhDVnJEZzQ1bVlzRzJFVUhuL1k1TWl0WW5hWWFPQkFhSlZPUEwxQ0JCNHFpMWpkeklrV0g5RFVoSkJ4L0ZyeFNwSWM5UXdBSmZCT0hYamhOd0FWKzlYbzJiMjJmZXhkeUpsa0duMS8xZ1lwR0oyZWhuRkxZMzREMk16dFNNSzJycVZ2dU1UOWV2N1JvOTZvcUZneWEyUHQrVTZ2M3NJbm5QSVM4dFBmUmE5N2NLZGtUUWl5Y0RIMkRBVUVnMzRROERZRzlrREJwWTVibGhyZEN3TGF2SmV4TDlsczJtcWdOZVJYTkQ4cURlWGt1NFpVemhOS1BCMHZ6SnhzNEhYRmdaalArRW1HL2NGUm5teDZFODExRStzdWpkQ09JcUxBNGJ3QnR5bk1lU09uRWRncElMQTVCT0ZLMjBoZEdWK2JyZkNhY1BwTXB5VkZyV0xZNlpGeGM4ckhvcEhPRVlBQ3hNY0xzeDFMTmVCU2RzTzUwVmlYMjNyZ2NlWUwyajhJN1Fna2NobmxKOTNTZ1dhNS9VbzhWTjBvSTlSeERUdmVFUTlURCthN1o1OVQ2NEl3NVZyQXpLNStJdWJHT3pENm5Cbnk3NWtBZS9YVy9WdVhWU2t6NERReW1vbk1ZQVRQL0VmbVNHdEgxR0ZwbE9KVkgzYkRkUkJhcTM5WGZpNVZQUnFLQzVTQ1ZTVHNKVXZPcEFvRWM1WFBuQnpCY1lIM1FDd1dhdXU4a1ZHQzNlZys0eDYyVVJ5c1hKRnFRajEvS1Y2dWgxdlFiVExLVnNXVzJCY0dWSVM1WVY4Vy90eHlWTmhnV3NkZTNpdWlJeDBWOFVOU3crV0lmK2ZhYUxlcElRQlBzQmtMakJGaTJoNXFDanBBNHU4bFFheUNYTXJiR2dwUkExSE5adEVYZk95R0dSM3Rrb2FCZll3bEM0V21xdEJSQklpcDBTdXhTZDZHUTJQUmw5WXBuU1ROMVNYSDRVYS9vcDRPQ3UvSyttaERQczNCdzVMQ1VkL0I0VU5meWkwMVBCUEQ5K2VNTEIxNU9ZSVBRdy9jbHBzcGRLcEdRNUtUZFZvNzJHNEVTdzBDK2VDNlFHdlVBRis5UCs1TmlKYnJVMloxK1NMSWJpb2VIZE1DT0Z6R3dFL1dMZVFOc010RE5uREhLanBseGFZcHQ3L2wyM2ZEMzJZY0dTVVJwa1EyZGFkeWRxdnJ5VkppMWFQSG1rWWhlUWl4bnZ3VHQ2REdHUUg3emdHVjVUak9rRlZQUzFwTyt0QUd1RUV2WllERFZ6SThpSFA5TjNxVmRyemY2Zm9nTVhyL1BPMllhMlNyUzBwVVZqMkpTK08yNS9pV0NIOGVwTUhwRVI5Q3kvbHN0M2FqOHh0UUhSc2JQZEs5TmdBbk52TUtqdzFRNkRuaEdQVXVSWDkwbjViVmh1SDE5elFGSGhBNjl2cjFDRnJiN1ZCenp1ZDBNMXBDRGtONThYZEpXSUhiN205ckVtaWVUK0JVWVJxNWdnSkR3N1ZWWUI1U1pOL2pNZHEwUUZza0J0Z2lpZVNkUGxrT3NGRHQzdUhOV3NKdXNrSFM5bkQxZWZJNURJZ29BMnVFTGZKRmtpMFIvczhURitNZFRveUo1dkdFQ3VrNzYrOTdvN2FkOWdjeVJYNTF6MGR4RUVwMzhFYzJvRVhYYS9wQ1BPQ0xwNFZTVncwdUEvTXd3N0E0ZjR0aVFYRGhaTC9iZnFIVjdRT0JsK3RzV1RHOE1aODRtSWdsRGg2K2kzOGxwcVljNFd4bzZUanZkUnlnY3hhVzBOVklzL0RzRENSQTROenUrUVVYK3g4N1hUb2ZXZlcxSncyckE3OFRaaFZIMUh5NDdYQyt4OUdYK2VRTlRpRXZkS0lORUhCVU9tcDFNUVhqWjZCR2J5SUhaVjc0cFloSGFzb1NwU2Q2N1JUdmkxNHBaTGNvYSsrYnZacjFvdzZwZ2kyWmM1UmxvbHdFMTNJdE1PWVBudk8yNTN5dGQrS1ZuOVBDb0h3STRHY3hqNHJGVUV3MVZ6WDNYVkJtK29GLytBOWc5N0p2Q3k5WVNXQmFueGkwMHFPY3lsaGpDT1ZyMkJTZkZmQUdXVVJNcEVSTkFINWVMQXMvVGRJM3ZCOWdQSGJDbHFHTmF5ZlY1TVRqMlh2RU5KbzY3ZVJ3cEVGdWJZUHlPdTZDMEtTaC9qYXV3SEJkYkg3ay9DMWFoODg5aEdJcnkvbjRFRkdNZXA5ZmYzRmdZV2loUFFvWkV1UjROeXk5L3JzL0hMNi8xeFNJOUpZdFd0NnZNN3NIV2xNN2xsYTRTTzJIN3FqSTRBZkdFL3NONTZrNC9LZmkrWVNXbXpvUERrQ0huZzRoZ2dUR3JoUDQ3V1RiVVFIdnQwTzJTNVg2WGN3UXJJU1l0UlVrZXZwSTJjTFhoUDRLekc3aDQrT3Bab2x1OHZqa1Qvd3JtTEk2ZDA0ZXkrbjlZWEhaZTUreDB2UmFFYTNoY0lWZ1dZTFVnVkRRMHRVMVRvUVdJOC93dnlrbFpWcE81anBlSk9XSUpUN040T3AvREJWdlJUandvV2szU1VRaDA5RG1SdTRoeGlSQncwRU9JNXJJdUE4ODlMM3BYZ09FaTFiblJOWlVBcFJJN2g3Qm8zYWVPODhYZDM5TDNMREtJclc0b0V2aU00d3ZvM1d6R1p6UlBXYXdnQlFhNGFTSlJHeEZyRENuOFhsUjZFQk9zcC8wNFpsVnBKTC9nYThaNGJrNTF6ZStCbWJKUTNWMVR5WHVKUGZwTTFQZkw1aFpqc01MU3UvVmlkU1E4VW5nTUhtQ2R6Z21HYnJPaUVZcnd4NjZCUEZVUHF4VmFIWkNRVFR3UVZDNnNldE9udjcrY0MwTUswdGFNUGxuZEFMZXRSU2VzV2UxQVRVNWJrbmw2S3FFUWc0eGt0Qk5BYTdZNDloTUExSzZ0QjVkWWIvS0hPdHJoOVJHcFFWOFFRWlVFbzY4b3h5YTk3WjNNWWtUQTd6Sm0zbmNkTXhzazNrV2FJUXJOdURoOWFUcnppZzJEb3ZKZUt0RTBwUWtOSTdFZVBBQ09xWWZqbDhVYWF5Rks2LzFZSG15MDhiU0MxSUFMclp0Q2g2L0VrUktiMndScWtIOTlSL0toUUtlSzRGZzFkWlYwb3dmOUZYU3BzTVY1b1pQUnBhbVFzbWwzOHNSZmlCTGc0WTFCQy9sREh2ekFSdmxMRStuSkt3eUZPRDdpcHhKaG03SGRrald4eXlwSnV4d1hPdWFlK2VaR200NWV3SGc0TFI1M043ZGdmbUUyWUJXQ3hielRTSE1YKzVkWW16Y1hMVTZIVUkyaDY4SGlvNmhUMy8xZVN6b2JIYzZZU0ZYRk05SEtKTmtra0ltM3IrVGdLckVHSlB0bjZ6NDhSckF0bmFId3lEOTR3alNKK3RBQTZHa29hWXFZaFY5WTZDNno4YzEzNDdRZkYxZkZBQmU4WjNCaHJwak5wYmlPQmRrb1A4UjVmS2RGcDNJSzBTUzNEU2JnTDIwYVpya1doS1dVYnZramRHUTNvL0RTelZuM0lBd0NNY2xjenFrRmVEejd4SzZGOGk2V0tETVhhSW12VUwxcUZzdkN5RW5PVFJHNHRPdjJRWlZyMDZYL09SUEZqUWdkV25oVnI5SkRldVVMS2tYc1JVaHZTK2xpeTBMYURxR3A0Wjk0WnZtOGtreFpQWnB0MTlEK2I5c3ArazBLenUzaVJyUDBvMnZnNDQzeWw4NytEbTM1QzF2MTNhakhaUjhFRXkrLzArSkRoQWpFdVdMbW03ZFhQQWgrcDJmd2FHaTF0NmhEeFp2TTJ1WFVieG0ydzVUUjY3VTdGSitmUFZHYTRleFhsenhQRDdsc0RHc01WczFuMFhsV1RpTi9sRUJLdlpUSHJmMCtzU05uN3F1SUZJeXRXZVFaRERQQWlKK0ZWTi9ySmFUSnRRQ0o2VlJvOXg3YmhlekRKMWNQT1MzZVlnRnJmcWttTjBhVUQwNHFRZUtNelptT24wdmNTY0tNYVM2Q3ZlQm50OHI5MTFQWkMxTEpZOW54emNONUg1eWhPSGI0eXRYQ1dndE1hbUFvd0huK1UvOEtqMVBOSHBjWjh3QVZEMnJnRlM4bWZVUmduRStQcjMvaE5Rd0hPVm91cG5qRmlPSGVCWjVWd2pjSmFnYkkwRU4rUVM4QUx4VWpESS9EMC9GMW9ENWF6WmNVN25CdTNORU9DeTFQZkl2UUpyK2NzTnlsN05lVW1CRUtaVHJQYUJZU28rK21taEdUYjZxdVhUV1pUdC9paEh1bEEyVFd0ZmxYRDZBR1NmaVpIekgxdUFMMTBTV2FJajdxS0pQSUdVQkRWM084dTV2aEtUQkl5Z3V5V0hLdEkwSFZHTHp2cXNiZ2FIdlZqdWdFRHdUdWRPNTBmN05GTWJqN0FTZkVUSGNicTNuY1V6UFpvWTZEdjA0ZklnNmhmcnFreUxxS0hWbE9DS3cyeGlRZDcvWGhqNTVBTkFzOWQ2NE5wblV1K2Z0a1pXVEYxWVhMUlVVcHdIMkZMUkxWZW1BMWYyZlRFWUdrVTRySnkvbmtxaVg3cnp2NmJnV0pUaDg2dHAyL3hCZ3ZvYS9mM2c0UWdlbmQ3R0RDVVBNYmQwcmRnT1NqZzlQb2hNNEYrT2RxamdST3lSNjZydkMrazlZbkV3YVFZeWVJU01DczZVYkdZR0VQMWE1RlF3cmhTWGQwdk4xejlvWTkrZ24vSDlwVzMzZDd4NEl2Mk5ZbThCdHhxWTd4anRjRHZTUGJLMlFHSjBnRmlqZzVYanE3TDltbEoyZGtqTTdmMGVFaVQ1L3RILzNlaWN6MXlzb0hTc1NuRCs1dWN5WHdPYmp6c1RIeE5zWXB6WXNBbXZlVVV4WVNKaWJtRjNjZ3RrV3drMUtzT0VRZllhc1RMMlNpT2pWNnhvWTBvcDRXOW1zYy9HOERWaWZ2SHAwN0dEWElDMWFVOWMwRjRPR2NLZlFvLzQ3MEs5T2ZmWWdQK2Zhb3lTK2s2ZjJERDUyQUxURUQzNTBlajZsTHQ2NGpkdmtOaENsUWtoZ0JZK2F6U1pQa1RlNXozYXplK2IxcVhaUmRUaXEveWFPTEl1N1JpWk5zUGlYUVlzalpHTWJnSUFOZ1FuVjZpOExHQmc0TTIzQm1DbkN2S0ozeHpycUxhV3BmVERYaFJuL1RLSlR1ZlBMWmc5OVIzZnBGSmtPN2kyZzZXS1BWd0RkOU5YWktSVkNLblU0ZzVPeVBodzByWGdqUVdLOUNCcUVvMEtxYmlhdUYrNktHWXVuTUdTTUNHWng2a2Z5L3B5eW02aUFQZjJtZXBGYXlZZXdBNHVnZGNGaDlzZktMVk05UUFYRHBrc3lmdzQzM3orWGExWFpoRnNOV3F2Zk1NcGh6NnFlR3FYUWpPZ3BpM0NIQ3lUZkh6eHRzaDNnSkVGZXN5T1dNWWNkdHVoM1R6YkxlQ0RRNThncFpXZWFTS1h2eDZsTENzUjJqNFAxRjl0ZVBDc0M2N1lqdEtRQnNhRGZ3U0pSUExPN1pNTnNmRzFlbHdjUVJXKzgrMW0rM2Q1Qy80OUJDWGhtQi9vaGYzUmFrY0FRVnVkSG9jTWpEUitPTHhkeDlJbU9tUVRMTHhNWkRwVkxabG9OakhBdnIycTFIZHNkVGFBbzZ3NHZhUDFveDFXRVpSWW8vci9YRWkzSWNIVEpGVXdQcCtLby9WdHhHczN5ZnpDWGduRm0yUE1DZHpvUWVtcUtMSmVWbnRqZWhRM2VFT2xtM0EyYU1kbjluZXVEVmVPb283UEJTQXlWakVHZWpQdWY0WVNGckx3dVhubEVDU04walVqeDBRT24ya3Z4dXFzZWVmV0Z2UHQ1VGNBMGZMVjluL3ZvZmxwQWpBUk1yOGxTdWZrT0RPT3BJcWZaUmhtUFY5YTcwYUxEQlFneHhHai9mMDBTSXNnUjJLWjM1ZUZJNDVFOHc4K0tBOHh4cGE1ODZpM25VZGJ5c2c3eThFZENlUW9sZVo2QnFDV05TYzRFY0h2QVIxUks5eGxRYjRBM3dxZW50cEVDVUE4UTBycHRPY3NMU1d1V29jUHZFRlJmR0ZDWFMvaFczRXV6dktQanFnUlZhMDVxby90VVdmczJwa2FsM085SnpiWmx0TmI0WXFUNHg0RHBSUmZRcnJXYlI1Z0VsWDBxd2huZUl6TTFPTVplT3VBKzBOc3ZNYUFYNmJacUdzU2xBNHpQSWh5R2FvQS9PYk9UUmNaV0JzOU5JQlNCbWlFTHRBNWhIS2ZDZVdJYlo2bWxIRUswN1BCUGhxd3R0VTVmWXNmUUtmYWNmQ3d6NXFzZC9PUWV4U1pkVXZRWWJ6S2VkZmhNUTJPNEtNSk80aVJ6M2IrbFo4ZzlzK2dpb2VJMEdNWWtKQjJ5Q3QydnBlRkJrbEpuY3h3STJ4bkc0VHFCNGltMEo4YS90SGxMQ2xWYkdyTGdKWkg2aDhpSFV3R0V0cFJ5VlhyUWo3MTlKUWZvRFl3Y1YzWjFMRUZrKzhkakJWa2lqSFNQUHlQVTcxUHRKVHQ2RFlJZDA5UGdoeGZURjkrMVpqelVOTEU4aHNwU3duaGN6YXZSUHFaQkJZSk02ZHVpMytaaCtYc2RjY0pBTy9iVE1pOVZ4TkNLc1dVVWQrSmZ0ZTJmV00vbDFRR1h3ajRyQWRjSmIwb0V5TmpaN2YxN2paN3B2bTg2cDlZVnNZL01EVlFPZHBSOVFLZWFVSUFuQW1EaFQ1cm9tVnBqWDZWbmt3S0NOVFdFQlZIaGxLSHptZXhUbXY5dmZXaE9sQ3FWVmRQTTFZVjRVVlJ0RW1tZ3BvVU9seDFxWGpYQUNjTDR1SURLV3pScmtVcFJDMkZtUW9FWW91YUpyeFhURHZ0bWNZTmVralZkTTA5N09UclIxWlZTVXlady9aRkhXeDgxR2xuN090SlN0NVFPN2NvZzREeE5FRksyMm5oYldZWlRvcjh4dTJycmk4aExpMGtuZmJRMkI2ZFdLWndpQlZ2VWhNZ1dCakRzQUw4STZNOVpGbmw4Y1BZMk52dnMvUVphUWlZN3N6NTNlM1dod2xVblR0Z2JaZ01LZEVCeUtsUUVGYjZFM1JZQVhlb3BCU2wwNG9oMW9yOVB6QjJCR1RsekUvdUY2ZktndGlzeVY4WERobFRQUk14bEwwVmZhTlNreW1JYVcrK3hzME94Ym1mci9jTExCaEw1OEo3Q0hhcTdIa0V4cnNEN0swRVBHL2JGc0prYVA1ejArS0ZZeE1KbzY2eC80WVJNeStRWjBJWkxjTlpwc2gvNEgzRlIyWW4wWjJ6a2ZXcVYrcHl4ZnRlOURHaHBGSXBGL2lGOTV1TW1kNFk2c1Vlc3cvcU5zcjl6TmZQYTBicXNMRWZnSlJ1ZUUwd3ZOYkVDMzlUbUpvM1NhczhmWEhwVzZudjBVS25sSnFSOS9aNWNRbXp6ditzWFlNVnpxRzVXeWJRQkdzcmdzVjlhbXBsQVFFSmtORGFlWlVyMnN4cmxKc00renJZeUUwMVdZL0ppZjJUa1hyTmN5THYra3c0SGlGNEt1REpBd2gvQlp1cnNZeVVPZnlMM2xrMDg3cFIzVFJZN045MHBoa1VGdnBWVFVkVlN5ekZUcFVDUUM1TU5TZWpMQ09qMW42NkVyOEF4YUJJWWdLNjlPZ1FxVC84ZVo0NWJkS3dCcm9sRXNzaUZNWktscGVxV0VkSk82T2RxUzd6ZTNqSndxZmYraHFwQ0E0MTV6ZnZ4cmpMdUR2aVcveVIzV3FnZXUvVU94U0hZWmY4dXBodTJwUE1wZWRkK3p3bVdpMlB6V201MndON0FubXZldHFoZEdIMFp1MlQ5clY0ZXIzTkZqMG5qQXBOVElxZnpveG03dkFDcURNa2FwcExYblpsdUltMURkK3hTRVNZU0N3YzFHalhLNHB4UDgyaUt6cFYrb3V1dlZJSXpvWjZRbmhhb3VTRkFIMlVHNzZYUkhLM0JsMytLV0RLMmNUTHR5WnFIQXZxaWtDVzJOUDhPMkF6L1MrSlE4NE95L0pjVXk1UG9OK0o1NmpMS1gzaVJtVjhiT3BZNHZKN0lPbitBWkcvNjNTV3puazU2KzBmNkpEeHJDT2thUlNVck1GT2hleVJaR1Y5STlZaXZ4d2xma0d1ek9yZW9YUUhiNDROMWFNNWVBNjNsK1RqQWxWNUcvdGRFTHhlMWdobDhPMzRWTnE1bmdJTHQ5ekJWVHJMSFBjL1pZSWJlcEFmaWdjamFFRllDcmdBNDlpOUlDZHFGUFg1dCt2S0lWbHBDTUpBUkl6K0NwcFlLWG9KOWovOFhFVXAzKzNWVG5Na0E3S25IcW94MjdCbEptNlVhbStFYm00aTRDQWpqMlZTRE1kV3lxa0p3dTlURDRUUDU5VzR0L1ZUZFJjVWltSEtzbnE4TmEvZ0FkejVmWHNoYUx3dUxJSTdZOTZHMWdwWnBMU2FFdTZrZTFBTGxEM1ZOMjlPNUV5MWxSOWswR2ZlZWtkWWtXd1BULzRoanJtSjN4Ri9pNlR4d2RoSkJaUDRYaUhBelBOMEZ3Mm4vR2dtTTd6cjJCTVZQNVVKcTJHSlptZUExUmlXZi9wektUdCtPOVpZNnRwNmg2TU04Z05SZ3hRZGFKaGtKTmZYNHV0MUc1dlVJVFV4OTNkSzZ5M0FZcSs0bkJwV01tVHlxQldGSUlxQzd6dEF1OW54OEJ4US9hVyszTVFIR2RyR3QyRUNsOW5BZ1ZVWVRrSXdXWGxEQXR5ZVpweFcrTkwyOEtBNWpTY3JLbUdBRUZ4UXRqdGViUVZwQmlQcVcwYitOaFBGdUZJdzJZQkFsWEdXZFNJN3ZVOFZySWw0MUo3eUU5bFNTK2dDaS9GMHFQaWVXK29jSngrUGtGWE0vT3JCOTFOQUE5YmpqNjBlcHBweVRRRzQya2FJTlViL1lsZmptdSt2TC94RVdtSXlRWTFKdHlzZkUwdnAyV285WEl0eWFBZDhKZkNpS1JOOFlFRWdxUlhEblNhMmJ5YXF6Nlk2SlNDc2luRHdwMVJYbGFnekpoOTY5ZFNYb3h1aCszNXlvTlpQeEdodFp3Q2Mzd3dWZE43MXYra0pCL0twYm1BUTZxOHBqVXQwOUUremhWWU9OZWZwNnl5aUdXUzVJVTc1WStvT00wUWM5SCtNc1EwaEFVNTVaOUs0VUdRTzd6NDJyUjJpemYrZFFkb2JDc3FjRWhhcXZwemprNG1HQ1ZrN3daM3UyM3RrUXFhTzlVY042WSs1N3Y0ME1wZDliTk50N0JNMDNkM2ZtWTJCSTRCdTM0SDkxcWxlQi9aeVVIVWxoRWpubU9SZFVtaWpvNmh1a3JsY0djUWNDN1FzLzllcmVRZzNtWSs2YXpzcU15aXcrTTJJL200aHBGMU55R1Y2VGM1dUlwVkcvczN6OFNxSWJseGVKclNjOTI0NkhUcGFPMEVFRGdRSnFPZFpEUmt2VUZnVTgwdzVRdVRCSWFGeW1SNS8vZUVCSkIvME82MHJmcXBCclZLSHlYY3VGWk8ydXFTMnYrTHFOYThaZ2ZxYnRWOWJ1SlJXSnlrTzczWGFYbHU3L1Byek14V0d5bE5PR3YxN2RleUc0dUwrbG53M3NNazZPS0JYR3VUY2hCcWFIL2NIcXE1NkZaY3hheVJDVjJQOEl6cVJUUGtuTSttYXBmTTRsU1lsRUlRMk5pNmYwQisrQkY0bzhlQnB4VXExSXZaaXRJclZMZnZNaVdIL3R1dVBoRlFlOFNIYlM4c2hlMmQ2cTFXRUtpYk9MSllzUjE2eTR0eVNJQUNNQmJJRU5Yb0t4R1lFWnpIZEtOeVFUS1BrdHJqRE05Yk9vWUw4RVlOYUdiMzFocEtZc1FzQ2pUY2crbThRVEpueWJsUG9rT05Wc3hzcEpNMDZJZ3VZcHJQbDhYdWdScW9SREdGeE4rSGJiODN1YmtIYmNVWjhuRmtTNUpvcDBYY1BqRDFJaTB2VDUrakI3Q2pIQTBOc0NxL0pyN0ZrNlRaTUhreUY3N3dxVS9BOFlkbjBHTFcxWWc4WUVPUEFFdGR5a0xpSWJKQjZ0UGVlVVZrU3dTQ3N3QnZTY0dkYk1tSW1lbnE1MHE2M3BkK2ZTc2lidlgyd1ZKUU1neDhSYUZpYWoxcGlHYUxDS0Yyb3BiR2FTbmkzQnlVaFlnNncyV0U1cWZVaUJ6OHpBeXlMTjJJbWs4L2xZZzNWK1JxY2YxL0p1UHZWL0tsd2g1a0JBbUxUWjBycFVEZExKNlNDS3JvTEJOQ2VmQzJXdW9CSCtFSDVhOEExREdxZERsaDZEdG01dHhTQkZvUkNCdElLRUJIY29zN3lWNzVoSEE1dzBpUXIrNFdiejl4NHhwQkZQNFlmWERvV2FRQTdrQk1oaWtFckxCVVR5UTFlTVZNQzVJNnV0aWNPUHVYVW0waWlJUzJRaVU0WGlSVXFxRmJaR1JybU1iWnBXSDhXQWQyZldmdWVWRDRzcWxkMFRoa096SWtoc3QreS83S1owaWVzWkJrN0ZhNVA2dk5jSnkydDVpK2N3cXlKUXpVYTMzRUlnMEVzSDRQRXIycVdqNHk1MTRWRlVqQnlJSVpWZWc0SE9qS1N0VUNsWlhmakppZTFDSUZPN0ljbDFEcWcrNEhjT3BZbDdMSUt0OGtuazJLeHM5ZFdReDJSS0lpWTlxQlpkN3BoQklrNnBGb3VoekZBeXpPbkZsSEErblR4ZElKeUZlZW5ETDgvVmtjS1JhWlgvQnpMMDI2eU94dStEdHJmVjQ1bG1zTG9ob3VHS0tia3FyYXRDWmk4NlpFa3BpYkQ5TVU3Znh5Nk9ucllxVlVxTDg0dkVQM1FXU1ArSUtRbjc4alcvRzJjNTduTnFUVVZ3WHNWY3YzcXYvWitKY1dHTmE4SW93K3Vpc1BTSEdDTGI4cGQ4ZDlFa2VzLzJqanJqYlA0WmVnc0RLazU0SE95QzhvaDBpdG42L2xpKys3WmNkOVpVRGpxZ0dwUGVDRnNlT3c0cjV6SVFMbWxqSndpenVpQmpuK0RnVTVwYjBOYWdPSDFVdW1pL3dKbWJqZjVzaFM4OTluUkNsOFF2OUhjZjNWbEJJSHFNVUo0OHFGcVBDcW1leGkwQWdJTVFEeWlFSGN2ajZWUWJqRG0zeUJ6dU9nV0hUZUhLQVdTSVo4ZTFPdkNIdmRhVnpPbFBIR2dnNE5KTGVKRjY0MkNtL3p5RWVwZ2VERVIyeDZRQXQ0WWZOdTh5djF4bjdVcDBSczZBaitnRXJHeFVldy9scy9EaGpmWExqcTVJOHZ0cXo0UTdWbW5VVVJaOVU5cElPWnZNMW5DQ3luaC9MdU9nNVlMTldabVBtajZvSEpUZVpiZjhyN01OWVJyMzJYY3JFUHFUNjVOMlVBVnZkRFRwSjBySGV2b1hqYVozcWgweXhMTVB3MG54RVFqV2dvS1Fla0pzdDI0TFRpZzg3TGFDZHEyUzVadzFqQmxnOHgzcDFOVld3V0lLa01mbEFvQ3Vib3hEdHdSWENkaThwNUc4SURKTzRObTJxc3RnUGZjMG52T3plNlNCakZRUllxMGpuaTR5TVlNMmJOaHgvT0FOY0FZYmplWkxVek1QQk9Pby9NdkNjN0JuTUVDZ0FXbjR0SVJGdEY4MHVncENvdDl6b3BVSVpCU2VPNWFvalBrMnJDd0JLdW01cWZFZFhNekI5TU5zTUU1MWJDS0x6U3lEWjVpRHIzTGxTc3hUenAzZWNZcW4venNzUlBGVnBsYmVDU05YR29CZGRvOCszVUxJQS85Mm9Mdm4vbEhUdk5uYzlaaTVrM1JMWmo2empGUG9jNkdLZkxWRHo4VFJyY3JDUWM0SWQxRThyOUVxTzRMaWRwdEg4L29ubnQ3L0JzM3pIZ2lyMGptNkZWUkMzWTVFcFhqYUF4YkhkUlFuYTZrVTJpTmVTNWd5U0Y3QXF0OENjU1dNanRqL0xmSk1QTHBCZ2FoSGRIUmw0c1Q0L2JMK2w5YTlGUmxEc0pnS3VIeVZ2b1VldUEyaWQ3bmt1STBCT1JwTStlN1IybExLUnU2ZEkxTnFLT3FVUUZYQmFsb2NkRHBNOXhaaVB0eVBJd0RZa2E4M01FcFNsajhLWDllS2llMmlWMHBUd2RGNVhOT04xWVVJc091dkIydEN3UVNtengwUFFuMGlQSG04UjJKSHd0KzYxL1U2dUQxRktucXhxdGttN3g1ajAxZkJibTIwUTZCSFQxZC9LMWl3dWR5N1JBd1NENHIzd1BDR0FCZW8rTnQ1dGRLcis5cGEyVk5GZmZLV0lidGZhRnJtQzNGVDZMb05DSzJDbFFLbmlYRzZTMUFDUUh4dWlza3RhSUcycEIzUjhkZWVNL09mM01GYlpDeHAxa2p5Zzd1Zm9PUnh1ZEJIS3krNlZQc1VsQzljdE5mdEJEaFJnOEQ1TTVKS0tHWXFURjJRVFhDZ3FBY3AxTTM1ZXdKaFIxanNTWXBPQjk5ZjZwa1A5TUs0K1pKSEp1T3NZNW5PUTBQVi9DVkFORFR6Yy9vZk11ajVIQllOVk5aOXRPL0txRCtwNXMzL01nOUJnTEJQTVlGNWNxTkVSMFpxOUlSbE5QTUk3bUNLcXowWFMySWlNVjBsY3JCVlpyWnhqZXhSSEtZQmxxOUZYeGh2b1J3TnN2UXJJV0FuV1I3akQzQTZBSklOY1BIM05FY2NEQTY3SnVnY2ZCM2tYdGU2aDFsc3lON2ROKzVCRGZhbVNuMVBJM0FWeFc2c0JnVWdJNG0xb2hRNFVrV1ArSUJURWh6NXR4WS9jeFZjVW84WVErT05welQyUzk3VDgwYUZvWnpqV2pDL2Vld3NxbzExMkE2K1l2QldYdGc4UnVTUEZ4SUNXa2ZmMXFTeFArb2FnWEVpWTVreDJBWDlENVAzMGpRMHNocGJKc2xyNUIrRkRPQmJxcm9JdTY3MTQ0WkpZdXpaN1dveE53Vi95UGRsaWJ4ejZHTzNkektVVnVDTDVCbFVJUmoyQ0RmNzZyUWNkOUVsWUtvWmJmOVJ6UWg3bC9KM1hDRVNWaE1iMW83V1BTakNKYzVNbldzdlhTbGNuZ0VCakZ3MFAzbVNsNnNHYnFWcmFnWHczOXVtbkxOblYzTWU1UG1GOW8wWWNsL0VTSjFucHdHM3Vka20zcHl6d3BjNFkwaWZva2NBc0xGTTdrUXppRTFNNHVNMFhjSTVheTVCekorUDRRRGJlOUMrTm5vTVZiZldFc2tDaUJnNlpUdi9aWHBIeElMZElZMjdSV080T0xYWU1lWXB1Nmt4RGJ3dEZiWUNJRWJlUFgvTkZpV0o1VmJKbTlRa24zY0tKRUpqb0RmNEcwaUE5YlNPcWdTaEl1WUgrZzhDSnRReGRtUGJnaEdmOUJIeVRDTWUwa2d3T1JVMy9JYVJDZGRPMlFocDNMV2RFT2VWY05tdzFZOXhQOFZlUGVMK1RXSS9zL1JmN3hrTW8yNjJYWVNGUFJkQmU0UlNFLzZiUStXV24vcnU1K2t6Q21hNjR3VlJhSEYxN1FCelJocEMwK3dnRmZLcFZHaXBWMTFoQmRSZ2xMdnBFdnlMOVBvN0tuRDlWaUdxSk9sdWh5enhDNkgxeEhDYVlWbzMzNFhyRnlXQzNXcnJYdVQ5OHZTUGNiNjhrM1l3SnB1YTlLODg2bDhiN2JPcEpuM3N5aWE4VnVwQldycXZDa2NrcDcvYVRlUVhQK1lNQjNWbFdmTEVRV2EyekIwZFdVUVRydDlCODZucjE0ZStEcUI2bEJmL2FFeExhTmZlQVlYaE9UWk9QWGlXYzdvVW5Rck14RTR0Y28xa3AwNW8wemI1SUdJK2w3SG1xbTYwNFZpYkJSL2dva094NWt0dkZPMG5PUXYxMXI3MGxyS3prOXVxUlFRSDBGLzI1NEZyVUxRUWpXbHBVa3RjaEdGbkZsVmtONVZsQ0pDMzJFSEUyOXBjQVc0T01ncHZoWHlKQ1BRYm9XL1B0ZUNYNmpIT09mOUIxL1M0M202d1ZZUGFlNzM2QUlxS1dCbU13blBSaUhrOG5Ed1NvV0krVDVMaHN2TkRCRnJpTkJOUFJISVRmQm5QZ2ozMXRrSVNTTldWOGFjN3A0V2R2VmxlYVU5Nm5zN1dXVHNoSktjYWZpakZMcEt2TURuSjM0UE9qWDR3NEhwV0tCZDJvdWxkL2J1Z001dFVxaE03djRmdVJtbzBVcjRyNEc0eUVKQkV4bmNHTDU0VGlJQTJxOFRUbEI2dEMyM2RjZUtramp4RmdZdjNKcE1lTUdRUHV3NzE2T1NxNVFYZG1HUWxuU0pqVXhGVks3ZzFyLzFEbjMxTG5pVkZHMEhBTEgrL0tQU1NiSWRtenY3Wktvb29SK0xtSGRSRGlBdzNFc3RNdXd4VVpnSDlRRnF5bW5oelFsRVM0L00zT3JGanVvd2hrRXdqVENvd0NvY1ZEa0FCQit6MjVqSUdROUpQZkZoTEkwNmhLQWNvMFc3MUZLRlZDaS9pOGpnRDU0aE04a2tycTg3L0trRzJCQUNjb01CUEpHSngwL3c2ell2eS9MeE9MNHJlOFl3N2Y5YmhvUk5YR3kyMnM2QXZEZUMxZTJ6SDczb05XMUQzUTdaODJWVlFwWjdHM2pLQWRjL1ByVVFGNmtVYVB2Sm9RejBoWmRNTDU3aWxtVWordmN4UUkwOHZFblZ3U3B5Wjl5SjBFTkhwMWN3SmFxN2hCRTJRN0NIQVlqQkd0b3dkVFd4dEl5N0RjTlMzVFNJdnBLc1JGV2NtYnovOUdLQ1pWY3NMTGNEUXM3WEp1Y2V5bnR4WW95YUNIN0IrYS8yVjB1RlAzTm9lQ2RVNFFsWDFmYmZ2SDVyRlJiV0k2STFGRERDNWFjalFIUURmUnV4VnF1WFlIN2dWUWpVVVBITUxRYVUrUVplSjBXcHAzOERtV3JscXVOQ1NoT05YTEl4bjRIRjNXTTA2NWJoMkpQTFoxbC9oMzg1T1A2MXRwb1FRd0tFOHltZW5mVE9YMWtJM1Y4d2xEZVMzU21sTWoxaXNQblowaldZS3F3Tnh5bGYxdUFUcmZtUjl0L3hUaVNNdlRSUWhQcnZkY01zYVFGQkdKbmJ6eHdYcFVibnQ3WUNrWVNXWkczM0R2SEs1WExIOVNhYW50NlJacTc0c2owN2xER1grb2ZuVEpJMTZNalVxbjhNSVFmRXNMTEs4YmF6RTBvZTA0WnVITHVDcDFzempTaTZHWEZpTStRTGNMWnZhTkc3eit4VHBOM21sOGIxOHRwZ0c5aVphT1pBeEF4UFRuVHpHbzc5aVNhMjkxdHFyaEd3c2tBNGt5cGUvOG1kdUNHS2JwdGhYR2dSOUpuS0tpeDVCWDNZU2FsdEFhWW1Kc04yMmFOVDFBOEVZL1YzeFp2MXVNc2cyN2RJa0NJb25rTEg2K0JYSEtPYVMvU2JZZW9rUG1va2JHZythcXBHcnBSaDN1R1dUREJ6ejBJOTR3NHovV1RiN1RMN3ZpZXVpVER3YjZwbEUzRVBvc0lMZ3ZmNXJSd09senNycXJRa0F4UW9lbDdzbmJKWnl6NjR3dW0zZXZmS0xEc3VnTWpjV01NOTIySGZ2d0VKOGRTZTZTVnArRlphZjhDSHZTYzNTUTFacGlEN2kyUHJjVFNjZUwxYTdpaVZvUmJ5YVNnMUFoV2lqaG1sYkNONzJRYnB2b3BLdERzUUZZWW56V1psR3dPckQ4WVZCekNtcHNuYjBHVjE5NzBTTHR5aXpCdUo0Y09yYjJRdWw5WTMvS0RFL1B4OWk0ZW1vbmZZTGtDMEF5YlZxT3dROS9KL2ZFQTBjTmZLQ2xiSFVOTTRNdktmalBpcWxMTERIOE1wcm9nMGY5WTV4dndsVHlUR2liZ1BLSUt4TlkvcFd2bC9wUXp4VlpYMjFEalNwd2RtaU1TaEt0bWFHVm1IdUxGVndRcGFzcDQveWd6OUhrUUMxZGNsTVdlUU13Y0FwU2Y5c3JXRUdPMzgzMmczb1c1bHNnVUhvaFlzMUpsSjJRYmJZWkpuRnV5K3Q2WTU4djNEbDNNRU9CazVkSmplSjdZYlRNVTZXcjQ1a0hIS3lSSnRQZ1VWUk8xRkwyREdTR2kvSkRXTUYyMERWNlYrY2pQWTVsMVErZStHRjh4dUorbVRGMEVKaTJCYit2Z1UwdEtmaGFaMHNZQmFaR1NFMS8ySEl1YnJEVE9ZeDN4TEwvUVdKNVhjdUY3VGtud2UwVE4zV3BRK2h3cXpvZUlFNCs0aUd4WWMxK2tXYWlCTzE5VEF5WkUxV28yRm1OMHZ0NFJhUTh4bWYvT01mZ1c2SGowZmNLa1RWQUgvWWo5WGdMM3RRcHlFUXg5OU81TVI4WHM4KzB5UDF5Yko3TStxalBRbElpRUh2V3BQaHBYRG44TDlvQXlrZ1ZCMkNOUU1taSsycUY3UUgwUzVRRWZLT2t6MWorM1FkeFVLc01MN0F0WjVtdzNnRnpMVWVPQ0J2TEhEWUd1UGhuc1FnTlhoZmJhcTF4Q3RScWNjSlE4aURsN2ZqWjYyaFlpVVg2bXB5VWdndCtNUXF0K2tYNk1BQTE5SnhBNVBRQjcxeG1DMEpRMTFRZGV3ODRzSlROTUZtcnJhZnJwaTlQU0pnYjgxU3Y0WVZQSU5JRkNaYXY2elo5TU1lUXgrUi9QdkNpVHoyeVZLZmpoYjRvOUxFSEJvZ2RaSlkyenp4VTV6b1YyeTRmNkM2ampkLzdYN2VpeERwR01vKzR4MDFIUGZWQ2hRLy90RXNIUEZxbXhua2FEZGpQVnFnZG5xdUpWTGVWbXBSYzBXcVg0M09XZU5zZVlmaDlxdVZveHVLTFY5V2NxOE15TjB3VmRmUy8zQ24rM1Bid1VobFlYdVprSUJqd1RZeVZjdlBCdkxwQ1ZXd1F4TEYyTzVqU3ZqWEtQdlVQT0pkVldlZWhzL1BWRERTbTVZVmtRMUVGbGVvWDZDanF3YVZ3bFo3ZlY3Y2ZNb3NleHVNSWloNkhwZm4yb0FRK2h5TCtaWVFOYXI2WmgxRGpjY0RNVHFoUlkxZFl2eW1Ndjg5dWs3a0tFNDRqVllST2U0VDVrWU5CSEFPbldBaTF0OGw2OXBFUnZHcVJzVmd2blU0N2UzQ2lqSEdRTUhSRFRqbERZS0NCbFZVajR0TDM4aEE0T05yUE10UXdYc2htTzI1QmhtQ3BZUWE2UlZRS0s2OGdRaVk5bmd5NlJNSzB0elk0Vys2UWYwK1orTkpNSnZRSmMyQjltNE50ZUNwc1RDWkZKVi9aRW9INlhDbFZ4RmVINlJaRzNGOGh2cDJycytNa0lFOHJ1KzE3UXU0R2p6dTYySFlCcFhTMkYvNWZreHZVWG5WZlF5ZnRjVlAzL21iV1B5ejF0QTNyb1dzdmJUWmpoZXg5NTBZd0NtUUVrVUx6U24zUDhnR2haVnZyRm0rYzAzTWhXUmw0YUptbGNHSVlPUnduSWlXOHZIcEFuTVFUWTdub0RIZ3g4Tk02VW1FR1Z0dDdnWS90bTZORzNOQ1Nna00wSUNGQjJxYk9BWURNbGdSSGNCNnIySWdKSTRXbVhrRERmdE1UM0s4M3VVQThtNjVOakoxUktLYy9MK290RndvL1lPakxReHNYc1RxeGFkT3BDTkVhZW5ZVE9jRDNUNDkyUTU3bG16Z24wUVYwcXJPRTh1ZWRWdE9ZOTBENUYyRlp6bTZDVXVkWVIwdWlPdFp2czNHcVkvQ0xFcjdsUWJRMDJJTWNwRXhnc0oxQ25ybnk0TlhJM2pYUWc4aFhhS2dHTm1BMVpRNFdsaFNBT3A1bkc3QkppN0l0ZUxjb0w0eGZKY0trRjJ5aTRJRmFKK2Ftb3ZSYTNNdXVMUzljN09xd2pEQWs1V29hMTBGR0xmNi9uWTVsZ01Gd1pieVB3ZTdnVXFEOWViMEtyWXcrdEhtOGIwMlJFNGlUYS9rU21EU0l0alVJcVlDanNZUkI0b2xMR09mWFFWS2xhQndhYWxuTkIyZ1ZRMFozc0R5d3A3UWpGMmpuZVBoUENXRTV1Rmx2dTJMTC9CaEJlRzI2a0JlWEljMW94djlRRnV2TjJHaG9WM2xmd1VQQkszRTY1Yld2Y0hFZk1taEFxZzhDVkJjT0g5UEkxOEtnUjBkRFFqZUp3b2E2QllMWjhRc1VSOEJ4eXZwb3hpSnYxaFJjWlgyU2FNK0FpYVNKekg5UnhXMi94NUxvVGpYSGlUZm1EVnZvZFM3dXhlWjRldXdzQ1BQNGdQN01HdDkxZ1hvd0x1dy9PYzh6SmhXOE1CUlBFNkZnS1Uzbk5XdFBIdmY3NTdwM2grRDJiK3FVWmtvdm1uQ3RNRDRzMXgyMWs4clhjaVFwbFBMT3hHOGdINTIyRVN1cVZyMkYyZWlPcGM1Ui9IVjIyMmVzM1dsa1pMZmJJTlZFMnYwYXQyeExad1FYWWZKTURlRDBwV1FwQ045U2F5Y0ZVSWQ3bWNSaE8wekNnWkVGOXNDZUgvSEl1RkI2SmtDcUUwT3NpL2lock51b3RBZmY4cmhWVWs5L2xnTzRzSlpjbnljaHpiQUZLT1VZbUozZ2lXalpuRmhJUEdud0d4ckhaeHRyeHR2NlNHeEtJY01hMzE4RXMxVnFqTDZ1cnZ6RkU2a2N0L3phcU5zUnc2YVNzdS8rSWtTOG1jbk9xTzFobHNDYlVINStFcXNDRXJZYlorbTFxdHF2SlVTRWUxWVYrUCtuaEdlNVdxamlXWWwvUmNXQ3d4V3pwOGkya0tQam5Sb2hueFROaFJiQ1YzOGVSczJSeGJUb2JRekt2N2xubGlCUFZGNStSODNKSFh1S1JlbElqQThCeE80TzRGVjhta2QxMjRiSUZyZnBBaXRDWXk3QkQ0Z0pNNjdYY2luN1VIcnlwMm5tb0VaRDlVV1B5elFyM0RpMC9zaUdaenhXMWZObkR1RjhIb3JvMnVvTWhxQVVHMHJKT09YQTVyL2F1eWpvMzcwbWhkWnVnT1RTQ3dZSm1tRVVJMFhpNy8zem9WVGpFUW12MGx3djBXNHFOdnYwa0ozSmxHMmVFZy9wZTk1MllvVjNZb2JaMnRwUGxibGZXekVKYXd0VTNCY1NrUlZlOGJrcGthWVRMUmRSa3RreFM2UVlSUmNNa3ZQWDhHd0R1Ujhjb0gvV2cwdmhpNkh0SmpjTVBzbUVaVFdZU3BzTWxEY1VSOWJLU3ZubDN4Mnh6NUpBZ3ZCVXBNb05vaE51SzNtTys5d0dYY0VkT3hzVmFrRFBhb0RrTC9JTkhjN3JLQmVTdFlHc0w4RnpkMUkybXdQNFdaTk9XQktFNUJiUXVpS3BpYUdIZXhJbjludFI5R3BZaDBuTWMrNHlPaTllSElWQUJ3eTZGVE5TS0RvTVdSZTFXTTNrUWhrTStpb0JXWC9Bd2pUR0srUXBPM0wxUkdUakVkOUdLU1JPWUpUb0UwWGliczE0amJEMTM2dFlJbGdEcWtGUlI1TlZqSHovMHpUelZvRFU4ODlyaTlIeUNRWmpTV3lRRm9CSXdxc212eXdGR2c3cW1penpNTG1TTmVrb3FSNlM0dTFia3F2M1pLZVpRK1VaNHFleGhPaW9xTXlGS1dBRkNGSjA0c0dzbHJqbzNXN1FyUGdreEZldDNhenp0U1JOTkxHejQ4c0hpOE5ZR3kxei9XbEtoMFpMdnhvNmNOVHMybStFV2tVc1FWb0JCNFpoU0NxcTNJZEhHYjJPTjZtSzZwWmsrd1F6cWRNRG9FVjZjdlJiVThoMkdTVUp2N3VpSW1uU3hFdlltVmM3NFd1S3dPY0dYYXNkZ2RBMzFoTkxPdkNKOG5Wam9vTTVXODUyYkV0dHVEckwrWERaNVJnby9QZmN0bDdXS1Z3SktNZUt3SW5pYTFjRDhaRU01YXdRWjlBQjUvNzBrS3MyRW5yYTJSUlJmOVpiT2RNMmdjTjVmWlJSNzJnMjI0SzlCYTBUcEtyL1doWDd3QVRQM3Uvd3FDamJzZkhHWkZ6NWg5cWxhdy9OWjA0bnJrZDJhUGJlbFhVeEdrbGttamQ1QXNGRVJRYkI3a0dhemJKSEZ6VW1rcXZMK3VNRy9Yb2RpaElwaWFnUngxWmIvMnZaQlBudzh0bVIwU2RTekdTTDF0eWdVYWF5ZGV5NEZrYWVDYjl1c2s1QklVSkQrOEhIdU5taXlpK3ExRnFqUnJKcGRmRU9vWmhQTEVMcHRKa3VuWnYxL3JJREdzNzhMVnZCR3d4TDJVL0NsaE90dE5HOGxJOVk2cDdDMzdPdW03TE9GU1oyVitpN0t5L2JHUWYvMjNvclJqQ1hqK1ZtRk80WG4vV2JGSjZDOUZRNVRUcXQvTWZ0SGpOQm9uTEdOVXliOEdhSkJEaXJTaHFRN0NtODBEekxiaVo3em9VYXQ1K2lzeGhPRW8weFkxdlFpTW1PMkJHTHFkM1BLd3Z6RkF5eUYvSzEwWFdKMUZnS3BjVEFFbHYzSCs0TkUvMWZFQ0lmTkUyNUgrQkw4MHRtODYzbDRKZ0Z4azA5TlN4RXlzYVpKT1lkY2lKMUFPK2xQcnRWZzFvckhTdjg3U3N0VHBzN0ljcHpsbXhqQmJvMjdUUGtXZ0UxVWM2b3VPMHVYcFFwSFgybEptQWlvQ2k3b1JEaGZXbXpPWHlxTFFuNXpRRHplbW0zcXl0ZWg2WXB2MGtWSTRBaGROV0t6QlhNQU9kb3pwUnhtTmJMV3lnb0xVSStvMmtNTUJ3djJ6eE5taHdTZTZjaFRxalhjOWpVKzVnZSsvT2o3bDlTTUYvVS81bm9tdmdqNkovWWVGRXhud3hzQTZ6L1ZmR1dIeTlIYWRTZkpLalhGVkorUFFXVUxJTS9pcDM3bElpckJYckdnVDhMSTk2M2xaUE9DT2YxNytQdWF2VzZPY0srWlBPY29zRktRTmMvZ2V1NkFiL2ZaZzRNMzcrZFVuUFBNT09ETEVJcWFSZHNITnVWVnQvTFk3TTVYMlAzU2J5aGpJb3RlZjFnUjJNREZaZGJmVEdEM2JoSmdxekFJWDlPWnZiVmU2MkltWk40SXhsaHAyYTJNNCsveFl1aVpBdktDbXlYeHBpOWY5RDcyYm93bCs4a2prdTgxSG5iZWhMa3dmVFJlbVY4MENQM0FnWktVMklOdzJmT0lnNG14VDIra0cyNzlLK1IrSlZMSG5wc2U5MnVtSVdzWVpvM0d6TENkMXo4SisvY296R3d0U0hwYnluM1ZXL3V0OWlNMndLL1dyWkVBMDgzdGpzVmV5Rm1SUjl1T0tFTzRldkhuREZqaEt6M3Zidm5vUVg4dEMvNmR3cnBqWUQ3OXpRNGJyREJ2U0JSYlVFK3FsWDEzcjVZTVVzcCs4U0JpaGp6SWNPNXpucXgyMTAycVJnQ2pPcDlvb1piWGI1eGUvQmYvMnpiMTNVS21tSEZodHBtSEsrejBEVy9tbnFUMmFsMUhxM0tmVzN4RnVrT0tJcG5HVC9lSGdld2EzWEhScnUwQi9mNG9XMDFzaHJKZXhjcDdzbG1LQTdvWWI0ZTM3dldUVGUvays1bDRSS3p1YVdWZnN0M0JpM3EvOGZTTUxhdWZMWnVFSEZ2R00zWUhBVElWZzVzZ1hpeVhrUVBGbllaejRFekJyT2xzWjRCUTk4MVRKNHc2cHpaTSswcUt5aFpPYW5jUUhZL2grcEcvODlXaWtzZ0ZpR0ZQY0hZTnRaT2dpcUNDSVJSVEdEUXYwWVJaeVp0cmkxYkxyOGRaYXBpVFV3SkNXZFEvb2FsY09NaVdoRC9wbWdkVnMySjhrWFhvT3IrUUR5VnhDVkwwcHlUZnZTdmdvSUxnR1lEQk9yanNSZGs0MWN4TXpuSVNtTCtHR1VvNGQ5TUdURDBPVmZpaUo4c0hNYzh3MDJmUGpWcitFdURoQndHMzZJWHJxYUZWMElKaDV3YloxOXQ1OFlmUkJKVkRrRDZxT1ArU25HSWxSSUFtTzVYMHo2SnRkM084Y28xYysrdHVObUtFS0dvY2lNMlZxdWZDRlNMcE9UMzEvTkg4NjJlNEw5ZG5iYUs4ZG9RbHVEajZaYUhjbkZHYUsvckozM25paVFJdFhXRGE3TmhhcHlVdFYveHhCNXZnVTVWUk10TkFUN2hBM0RtVDlIME9rMU1LdDQrck9qdVk0R0dxaXFWeDIxVXQwT0RhZkNWTHp6T0trckRscW9OdjZsbWJNd3pyVGFvbEI5TzNLOG5YdU5PcHZZaHBnb1QvQy83bHhUNDBVSDk0ZG0vT1IrZzdhSFpwM0g2MFg1MTlTbFpFdFduWnEzVXlsamI0c0N6TE5xbmlXcWxLTEhIemRsLzNFRDAvS3krV0VkUmFmNHFVSlJaMU1NVzN4RUR2Um05RG0rL0N3YTc4bkNsdUtCR1k4cUhXY2VOUTdEME9rZ00xZm1uOVVjV05SSEpaT1dUVUwvR01qbVRjY2d5a0p5THVVdlQ2QTlwNFhaUDRsajRtdFU1a2JpSjlVZzFMS3BpZDVHVjhzeGlkK0wvT2tYRlFIRlVtaXdBY1VteS9SQXo4THVrbWFFdDVTTko5Ym9BUlM5aGZyL1VDRlZRREpMSUhhREFGb1Eva3pHVWpJUUgzSTdpV1ZlSHB6Q3dGdFIvVWlJY2hsSTJSek4rQm1za0hVcm1qS2UxQ0c1bngrYXNndG51T0tTVjVoOE4xMTZZZlc2NENLdk5CanptSkMrM0NydHRGbEZ4NWg1RjdRd21zQjZyRTNGeTBra3hVdmtqR0owZDlPd082SGNHU1VPQklwQXV3UjRHd3l1U2dOK0RqNDZBN0xOa0tQcjNaTzluZFYxak5LU3JRSndBalF1NmlIL0JyVTJoeGcvdnV0SlRkQXpGcGVXUmdGVjEvQ1BsdHFja2xhMkx2SWtFYk9IbGNKWlFLRXI0VWxYOUNOMzNlS0JQTEV5V3haN2Y0THNnT0ZKa0xVT1NubkFpRXVoN2ZBN0lqaVdac1I1aWxVYTNzcWovangzejB6WVM4SEh2d1pmUXVXVmV6anNmRitXUVlXVnM0YWpYeDR0L21BQ2hDRXRwM0RNeVlPeHlJRmlWaW83NWFENzNyVWR2L1pQajJOQm1CZDhVR29NVDhXV0xOQmVSQzNMOXVZTnFrdDZpa0hlSnlRZkJxMlkrVTNCZU40Y2E5cDQ2bVllbVFZKzlQdTJlQVlPcUZGdFc3a256REFwRHlWVHFtTnJwSGErUFUvTWJybDVPU05RTWJNV0hxZ3pTQ1dzMFhNSU5IWUdEVk1kSEVDSVZGa2txK3YrTDBmRlVVNks5eGNnNmRzN0EvOXp2TlBKUEMxNDhKRFNXWWMwLzF0Z0MrRnhtZVlKRERqWmlFN0t6R0kxWmI5V3lWYkEyNCtFRVdVV1FORnNIbTN4RUdWQTd6ajRmNG54ZkQ2SmNhN1dsTE9JOEJtOTc4SzcvdHRabXRhY01wT1FjL2RGUzNrRllEbGhhVEpZTGZBWE5CeHJuZVRUdDVJckRYVGhHWkQvVHErWWJMNm14NzZhRWNaNTU0ZkhFdURna0YzaDBxSUx5M0pLQWtTdExTTEtSTno5Ylg4Uzh3U1ZMRk1ES0NoOXJNeTh0RlI1ZmxhQnpQR1pLL1FNdEZUTFV4WSsrZXpFQUNjUm02Y2pEUmd5TTc3SGZabXpEK2FEQjlSRDJFSStsSDNOZnJRc3l1QzJScFFieWhOdzJ6eWV5MWZzRUxKcTJiZWJzcmo5V2c5bjBiOGtUU2YwNWtGdWtBY0xucVRxOTdEc0QzeHlnRzBKNDdvOXp5TmR0ckxkZSsybmtSRWE5QXRqQWxNTjBUSnBhbDVrNkhUZHhObzZJY2lwRTNXSzl0QjZoVWR0Rk5DZkhPOFVlQS91NCt0N05LNmxacUxrRE5hczR4Mnh5TnRBQklTdkozZHpVbUlDa2xWbVZPWnZCUXhXWHFSSnV6K2Y1ZGU2cjdLY2llOVQ4VEg4U1ZoSE9KcWNNN2k4RDJuMW9FRWFPOHBkK2h0REw2YW5PWVBhcFgrRGpaMzA2M00ySDkwaDF6aStyQXY5RXh6OU0xWEcvMWxKaVZPb0dFUDdKemx1NXMrb3Fsa0cwRklqOE90Zk5DdFZ4M2Z3T05vNFZXaUh6blRUTFZjaGdPRzVLai9TdWN4YU9iRnkxaUVyV3Y5dUJJZnp3L1AwY1VITlJhRE9RUTkrd01DTjltdjJVZ2ZZQ1NLejFXQU1Kb3Y2bE1CQ2xBc1RDQWY5UlV3WUdIRS80dk85eTNtRnlvTkR1c29yL3VQVVVLM2RKSEVEUDZWR2s5bStUVTRzdkV5dnU2c0hndjQ0Y3AvcWlTeFVCZFl4NGYzTnhQT2ZuUnMra1Uxd2ZFYTJXdWUyQVZCNU0ydy9IcTVmTCtZRXNUU0Evc2hYWGlSMUY3bUlpZXR3YXBRRUlqY09XQXV4RlZJcUNqN0hTa1FrdS8wbkNMZlEwVWJMVmJ1eUZPcjV5bzNOUWVOcHE0d1hYMEhpS3F5b3JLRHBsR3FQK0VyTHpseXRjTy9SQjVnY0RqM2ZXQzNRdUdPRERNd1RVVmRBQkswZklkV0RrcDlrUk9nUTFJVnJnbHlYQTRQVzRxUXZLdHNqOUtOSHdvTWM3emNhUmhxRHVIRUNoSlZZQVY3Uno2dWQyRndsemkxMXR5b2ZBd3IvVWpCOVI3NjcxaGdtNGZsSGo2b29EaXpsZnorQXVWSjAwempVbWI0bFRwY0RXOFpRUkRVNEdDTzJCWEdSL3d6NU8rdFRkNDJTdDc5VzZESVRWaWVUMXNpbFNWNk5oRU9RUXdBU1pWSldTSW0zQjR6U3A4WU4xYTZBcXVCZ0pzcXNha0hVOFZFdVZGWUtKaVNOUjFkYlF2TjN6ZmJUVENibDNudkYveUNua3hrR0VpencrMWdESXdGZ3lrcnV5bzJhdzBtb3R1TjhTeEFaNVppUWVRMGp1dXlqbHBmdW5CNEpOSVpqNWtaMkV5L1lLa0F5YUF1T20zNi9vUXkrV2YzempNZVIzZXI3NS9GYytTTnk4aE9ybmpES2M3RGxJMTMreitLYWRYNXZzeDh4NEdXTXNVY0Z4SjFwV1ltS0tPRlRTdkI4N1hLSmkzZUhsS20xZUVkSXVDVGJ0K0JlKy9qZTBTcFQ1UElEWDI5SU9FaW04MmgwUlR0Z3A0SENTcExMZFZTU2ZZZUUrN1Vub1UwSG9iOENkb3lRTjF0cTJsaEJMa2xKcGVTN1ROTkM4TW5OcmlNand3RmJFbUdBK2R1V3diOTIrZTJ5WEczb1l1dzE3b2tyZlY3QldYSHZwYnZpY2NZNWFNbTFYUzRhaDJBVGcveWt3aW9iUkJLL2dsQ0g1UEpOMjl3cVJYSWdOamhLWHlCMklRSEEzWFV2bWVtSFp2bWM3bkxRQkk3d0lJeDFkUVMzRXQ5aHhiaDBBcFBlRWZ5WXdqWE4xdmtJdTAvNWJZa3dhRjI2WVBoblhiZ3I3UXlMV2lzK1RMcng1K2UwLzJybHVkenJ0cDdRQmdENHNUbUhtQWVBTFE4ejVwcWI1a1ZrV2NpMWNOK012bFh0Z1BWRHhMMTdseTlNWGJLOThiL2l4WnRWVjZqR3Rud3NVcmRESFJXMVpnOE1GTXlPUW9TZmhaSW9ScytTeWw3QVRpQ0RWbVBUSGhacS9zWE5mNTZpYlNiYVBmaGs3dUsxZVpxaGdDSExTeDJoVVlNWWJJeGV1SXJmRXdYK3lKUmx1Y0huNHdaVlZySVNwUlFXaWI3V01TbjVXazZ6WnEyN2JLSXlnSDNURURRQTlreW9QUVB1Qzd5MlV6eVNtK1B5NFRFL1Q0cHROMGlpdENMMUt6UklSRGtFb0JOQ1R2S29tY2lOcDdic01ZeU1jZWo2dVBVMHJWVUhJYjVFUFZVWk9JUVhMdHJZSkV5Z3FRcmdWbFB4YVcydEZydldnNVl6cU45blFPM2YyOTJheFBST0haRjc4NHNjaVNhekdzQlcwZFVyUTFSdnJ0QnpTL2hScmFvbk91ditoMldBQW1ZTVF1UmF2T0dqRXFPdWhzcm5weVR1bVhqSklxVHNDdVJTQnRYVDFkR3pSMGdkQWt4M3NyMnJ4cFNvNmxZVmxuVXJYOW9MZm9tUEdzYWx3dzVyZ2V0VEtxeUZEZ0I3V3daSmlOdXBWK3N5T2FHUEFWV29xZzdJL2VRamt4SzU4NjNVM1duU2xUMUVJblRxWTBmZEhYY0xyalVIb0RodUl5TXJ3d2QzWEQzUDNZdm9HNXhPN2grMlpVRC9Bc1dycm9aU2xQYlp3TFpUUkU4OHdDdEdmWStkWUs5ZjVXL1AzQ3lOYVFUZVdsWDRNZmQ2bU9oTm5HYVVCRnM0WWRwdDR3RTFlUHdEUW8wZk9NRWpWUk02NmZVZjJiMGp2amthelJEYVFYai9WRDNuZk5iMGVpK0ZZQlVKYU1rSnlmMGtUMFJQNXd4ZXd2emVCanArWG5oZElJTEZjTzNxeGhoOHpGZDI0dTRZRk9OTXM0dU9Tak4rUXczYUswb0p2S3plT3V5bmZIdEtTK3NPTVJMZEQ1aW91NTRNWDd6U1RNQXVaeTBnTEd3d3hXbHVDWVB2RlBaaEx5NDlRMWw0M1Z5Q0ZubWs5enZqUlZldVBnT3B0M1NNcjJQcUxqRkpLRjZGZWRXRkRGTzZYN1VmRDlxL1REcFB4V1lYVExaRytCN0gxS0lzanMzcXlKWEdQanlBYjJrQ0ljbG1sQVN5a25zSlJLUit1SWVvdzFGWnNuRGxOVnNGa0xlOEFYcXM0Ujdjb0dScm9IaWhFcU1ONVMwelc0dVBDNGxoVm1Ed2JPUXRSdnFySzh1RklFQURvT2RGL3pkMGFCZDduSDB6WkZkeGdDU3plRTF4d3ZBa2hPSVFqTEsxcFNBc2VKNytZNWtod1EyZGZYMTV4bjFhaTU2dlhZYVNRUVNoakxuT1FaYk5NdUxiY3ZYeUlxZ0NzZEpaWHBIN1d6bnZYTHovVzFyR0xUT3NVdkZWUlNORmxvdCs4Tk1PNmZRdkVLWGZPdnNzUzdrSHloMlZCaDR0Ry9tekNQMXZhTG42Y3RncGxXd3hLdFA3Mmo3VDBOQTkrMGQ5bVRXckJ0eUQrT3huTklkRGZQRnVULzhUZVEzQUJIMEtrVHFocDFFKy93akY5VThVOWdZSjZodlVIMEx5SXoxUXBrUXBMLzZia1QxL2l3Mi96QWlZY0hMSXhzUVlzd2cyN0g2TzdHY1poY0NJTFBaUE1zVjNaVmduVXJad3JkNU1obDFrbFNpTm9BYWhQemp0cGVsSGJyUGZmYTZsUHdyZS91bXpzU1VmNmxJaVJibkdGOWNGNVNHaTdYRVdpUWdOc280VE5sUGtRMHJZVC94SWRSUnUxMy9IbVM0TG04N2E0WVdRVi9iZS8xdktZK3U4cUFXQlVDTnhvZzZ4OUdwQThScnZVN1BFTWNOSE8xZUduclBaQmJoajZCY200RTF1akhlMERKczhwL2NoSGlmUFJsdHljYzR3eHQ2TFMvWmJQODlJTWZxbUFXTi9XSE9TTTFHbWZKa0tkZ1A5cVBGSVlzSS9qTS8xSFIxSk8vck1XeE5VejNhS29EdjF1QmZ5ZFZ1aDZteE1KbkRQWlVVSEhrZ2pXbVZCbGNKeWdBZGlZckd0SlRnUEdHSjR5cmQ1eGsxbXBEQ0pyVGpkS1laeG5jSzBSeFF0eC9zcXhNcUltU3RMc2VOTmhLUWR3SkF5aGk3Y1doUFd4ajlzTGNmRHBoYTRnTUZoQ2kzeVJldWc3bWNwNGNJNmxXTzBMT1FGeWlMU2h4TGlOTlNabWYzZVN3YUtRejF1VlN0TG1yRXVKREI1OHBWL2Y3R2lHeFNQejR4ek9GM3BxV3NreUQ2TG9ZMHkxempBWWFUZWJKcERPN0pXNXhUUmJjVDRBd1ZGY1dCVWZaVWo1NjM5L25aV2lyajJWS0x1WEVTc01iWmZGcmROd1VxcWE4NHJqVW0xUUswTUJON1NxaEN6OUYrY2R6elhrZ3JjODZaRFcxN2pTclo0WDJ2OFI5U0lzOUlJVFoxR1ZOSGh0ZU5VRmsrK3JubUdLMlozTHJCWnl1MUhSZnE4YkJqS0NVUW1td1k0ZEtNTWNnRGtrN3VqN1RvUTdtdU5vSzlhbUNDVExINWdiSy93Mk5lZ09Cd1hZNFdjWXVPVzVlMkZ6bitwU0hRMEk0YlhaOWtzN2hLK1RIV29FZUt6dXBqaTR6a2RqR25ydXY4bkM1RUNwS1hweXZ5dkV4eGdnRlprMSsrZ01XNTBoWURZMGRUWXJrL1pVTFArU085dzZsUXZFSk9VYWtLUkxnOWtHcUU4aGxkbi8yekNjdE9Tb2kxRFlLa0txYVRNRFJIb3JxWWFMbmc2c1hsejRVYkx2cDRwRzU2R09kVUZVYzVaRVVPYkxuekF5K2ErZWZUbERkSVBnZ0tTVk9xTUxFK0V6THNwc3kwTG9tU0xFdlQxVS8xcXQ3Y2liaFdCdDVwNzFVcW8vUngvZzFkTXNyYlVRcTdTd0FmeTY5TFhZcENYd0xKRUlzYWVlRmx4UGpJZkZOM1BNa3lIaXpCMkROcnRQeEJ5UFpGRzdxWkZNWjVqUTdST1d2cElaSGw3T0JKZzRZVHJORDBqcC93NE96bGdaTFd5RHpMN0hFZXlqNTkzdVJvSVFvbTV4OGdpdGhabFMzdVJXV3FZcnV0bFVIOHJJblI5OHlPNEJ5R1FMbzJTUTBncmJvR3pqUTF1bndqU1FpajYyUE5zNXVqdTgrL2dIU0hodGFTWkRkNm9kOWVoYks0dmE3ZFJWL3JuWC9YYUJRS3lQbzVEbG9wN0MvZTZ1aDF6U0xmbGRTMlZJTGdXK1NRdWdlTEJXdURvZ2hKMnJiZHRPdHpTei96N1RkRFY1Sm9TVE42ZFU1Vld4UEFkT0c3V1hFQTV4U09ZQVFXZGZJaGtTZ1dDOHZZWlRTY0RYbFExUnNuRW1GdEdlT0tiSjl1YlRYOFlnYVQ2cGUvZWhySWZGZlBCSzlSOEZqa25OVFovYTRaL0RBY1BnNklIMGNiL2F5M0RVV3JzNzMzTGp5Q2szVEV3T1ZRYTd0QWI1VzZYL0c0N0JLenNxV2lITE4yVTBXZG5adWFqMGluUFNlaE0rVCtVOE9sdXVzNFVScFJQNDM3alFlTHRBV2dVZ2ZCdkowUWM1WXhPTTZ0QnNyWWUxa3NMMEttS2UwSzFHbVltNVM5Q04zOW0vUXhkYUZxZ2dzRHZwYkh4ZlByQVVxZjZOMTRUbXZWOFhDSSt6endpNURZbTVGVXdNYUF6YlUwTFZpVTQ1VGFLa2xxTG5lN3hJQjFiUnd2VXVhR2xXTjIrdTF3UlZTeTBxcGJjWmM1ZWZuWlVzMHFGUEFPa1dHNG9ESUl0d25MMHlpZDZkSm02aU1XZE0wVnNDOTlvM0wzQXRHcUltdlpqLzBGaFAzdEFXS21BNUJmZ0hPVENLWExYdGkzbkxXQm1HVERCU3NjdUp1aHhFTDJUMlM3bVhEcExFc1J4ZXJ6NGtqUnhUYXBDbFd4SG96SU5YaUcxY3d1WmsrR2ZydURza2Eyd29rdGtONFdEcmpGb3BWaGQ5YmwwWWlKWHNuL1B6YjhUNzd5WjJXdGpma25wTHdpd2tndnU5TVJHb0k1UGNwNmZHNG9zcVJVakJOTzdMS1hiK2NFcDJ6eFJKNloxQUVMZlB3NUpmcmd3dkdBNFdOelF5TFE2eEJiWmMyT2psdmxPeWMwRVNZUEp1ZVZNK2dHbU8xVnJmSzRvS1ZOQzNndmVXbWtIb1dNMlZCTENNWTFjQUVJVGxNQzQvY25PbFJtT0EzTENFbmZXd2tWNUVQNGR2U1h1NTNyZzAxMm54TU52R0tVVkNtdkZsOWhkVUc1SDllUmVIbmJHUk1jUFp0MUxvd05FR1M5Wjl5Z0l0ZFJEQWtEZ1JsSUJLZ3Q5UkVMN2ttRDJVT05GOTN2S0cvWFFNOFdzSjdua295UGZRN0hMQjk5Q1RsZW1DZjhGZzRzUS9wNXo3ZHBhcFZydWNxVm81RWRCVkZHMGk3WUVxNS8wbG0rQVVGb09SOTl5eFlpMitHQVBCS014QWQySlIwQTFJemNnREhqRnVFZ0RpZHJGWjNQQ3k0YTQxMll1U3dtTnNHWUM1OU93SnZYVkJZZUlTTEdLUlQ4ZVloenA0c2lCbGNwZkRmeHhQUnVkcHB2dUlCVTVOZ1Q0YkY5NU9tWU1ZR3FGam9obHRhUTNlY1ZWTXhmZ0lTVjc1elBWUmRKWGR5cExKSExtZm9mNm9SeUE3OE44R20ySWY0MXNUWE85WjRsOWtNeURXUUxFdllGNHhKa05aSG5KYjRtWTczdzdXUjVub3hYczRmdmNhSHpMOVhGbUk1RDJSWW1EQVNJYUdFTTVJNklCWndFVi9La3IweUgzZDNhUWR3Q1RET1kzQkVCbFV0TjZDZ2V4d1hEL1pmWW5jSHpQZEZ0b1RtaXY4NFdLUW9QL0FpYmR3NDBpamVQQnAzV3hYUTdRSFNOc1M2RkZ4NmY2ZzBsUk1FWnVJaEhJZDlpeW1BTlVaMG5zTXl4N1hMRXQxczVXU0RtSWp3QkdrK0VZR1Y3ajhoRVhUUXZLV3hqbTl2U1FaLzBqejd1cStKUzIzRmJhbFZCcjBMbjEveEQ5OTMvdWpaS3pvUlNJRXdtcHZtTm5zMFdBVmUxZUw0VnRnQXpwQnJSU2RscnBPc0NZWHpOaFdTMXFvUU9jVjNOSlkySGdUdmtvaXBlWXc3WWltTzR2bzBNOXo2NXRENS9WVExIUWN1NUw0ZVRiTGdCRk51NFVvSTFDYjlMaGNHSnNySDRDYWNpTFVwR2pZUzdxa2RpclBCUklvaWZIOFNkS1J4bzBvMTdVNmo2VFJpMXY4QkR2by9rN25QcjVnWkR2L3hKaDAwWlpGc2tSZ3dXeS9valBwQmppaEUxZkVMOEUzTFRaTGh1SG1ZSVN5d2ZveVF0Z3d3MTh5NHlKTmhRZzc4eUZFbjNWMmgyNnV6SXNnb2VESGgyNldBVTFQVkxsRFNtaFdaRjUvcEZlZkNvTWV3eU5maERsYktMU2oybmhNNHN4VU9IUVdjWkJBbVBsSndmNWF2ZlhQNkpUb0FxYTEyMFY1VFpEcyttYnFxcjR2RllwUDFNazBHR2F3a2Zub3lTU0szQ29QaUZEaGFaRU8zS1djYnR6N1VSOUdiaXdnKzFVZHJUWjZMbTlwaDFIa3dmWnNZTk9QMlFsTkNhalMxdjlvYU5IYkE4TnZiZzZUVkViN2FDT2pGazAydW5VTWhnelhXSnBlcVMvdVF2YzNWUGY2Q0V5b25FYW1Ub3V6dTFiOHNDMFZHbVh3WWMyL28zMllQVWM4bVR4K2F0MjZJR0lDL1JjNXlja2xPRmtVcU95WnVUQmlIY1JueG0zVDBvandHa1QwQzlIL0xUWXh0aDZURUxoaEJSQndVUWd0djQzWnMrUlF1cng2Z3ZmdC91N1FUV3krN1lIbXdIb3YzWGRSS1QwTDJmeEhqaE1HakpzMXNQSlNrcVNDM1Jod2MyZVA2K3JRN2U2RG01QTdPZU1QSUxOb2tVTGpNTW4ralJybmJSWVI3R1lQMmMwMkZZK0ZtZStaTkd1ZFQ3NHJVN0JkRHlOaTJLYUdQQ1N0Y29zZ3NhNWdZaWk4NEZydFlqRWpyZmxqSDVNTEluM0l5b2U0ME1oOXlFZjZXZW8rVUtaNnlMQ2o2Y2l6eFhMNS85RG9GYm96TjNvekdqemc2bk0zYmZRVDFlK0Zqczdwa1psYkVWdTU1UFVHZGs3ZjNxaDZkZUZDbUNyK1pxZXZ2NzVIQllGalhWbTd5S0o0eDZRQ0VuU3NKRGVKdHBCODN4Rlh4TEVycmtUTCs0TUdwa3Y1b0E4UWtXU3RmTDl2ZFo1TmNTZkhjdTN0S3pFbE4ydWp0SlVSWmp4TkFxSmRDUmRpYVFxbDZyUHNzbzdSSU1QUTJsUjl3b25XMko3Y3E4NmdmVjc5OExDQ0ZwQ0FJNkUyRm9ueFk1bGdDbmJUNDExMHRKRFpxWGptSnJMRVIrU21pTU5CY0xFNUlvV3M5bzdGZjBTbFFZUlgxbkhjZTZPUzZlTVo1V25MSjlFTzI3QmtIZGk4LzhsNGZmM1pxSzZCdTY5amhTZitlVitka2hGcU9VUUo5aVJiVmJDL0xzdlZJQm1VWWFWN2UxRk9OMTc4aEZ5ZEFiSC9HUUpibWcvZzdZZytsbUhWNnRsbmlRdXM4WEowYmNXeGhjVmNkUmUxVDhQa3p0MzNjWnFYTS9EN2pUdGZGb0JCVyt3c2QxNHhuWitxRmFRdWFQV0FmUmg2RjRyNllqUEFPbjBSODB3Y0x3YmVXVXdRcGYvUGl0MHh0YVFHUHQrcmthd1hPM0Z2OERLZTVxVFlHOGtyYkx5RGdyanI1N0R6Vmo1UmloWUZkT3NwNFdVL210Ui8xY0hOdm5kRHl3R2poNkRQRFJOSGhjVjI0YmZ5Ukd4bDF1QXV0cDBvL0hhMStuOW9XSHpPZkxsL3ZxUklrQ0tzQzh3ZVFueHkrSkplREFqRTNsQzBJSXVwYlRJd1A5SERxNFFzc3l6bWFIMmtuMlJyUXcvYzUvL0hHY2hzb1dBYkc5bHd3WEtNQ3YyNjcxVmZlRTJmb2h3ak5NN2pMMGJ5c1pJUXltMlBvTFFRdm13ank5bmQ1N2Q4dVRXNy80ZUpzRlZnZEdyRUNXdzVPWTdRRlVZSHlSTGU3TDJwRUkyTDFMM1FUeXVPK1JYSHlORHdGQkRrL0grNFdKOFpuR2dwWVlNOTdmT25BYlZrS3ZwOUFvNnk2NWdJRWNERGdZZkhtNEhnYng2VmMwcTMvbVNUWjY0Q25TUWN0bTlUMUQ3bGVqc0lvUVJ6dXVpTExmNERkdWJKOGNYMithOVFWcWl3NEs1SHRzY291SU83NFlCRU5OMGVsbXE0RzZMbDR0NVdMWWUwQmVHZGxJL3dyaitPb0MvNlJJbkMrYkxFblg3YWlFU3lDbVRGWXJBdDhlSTlvY1RoWmR3SXY5VVlrWWU0ZXhraGpQZkQwODU0Qkk0MmtCWDFQcnZQNTNMMFMxOEl5VWcveWhxT1F1Mm5FNjRuYjlRS0lqV1BNcWx4a0RwVDU5aytLTmVSQ0p1MVVWVzc3VEJKSWtrTFIzMUE1YTlEekVNU3NHTjNQZUVQWXozYjNLVGlVeVB3SWo4d2RVeXppTDE1cHpIWjE2K20vOEdZenh3NG1SQ3ZmTWlrZkcxS3U0bmNEaDVEZDlNdmxjREROZzh3cHNKYTBpOUJKVHdzZHBxTXlwcjVQQUdMOEtGY0ZlWUFuUUk1NVFhRzU2aVpSTllKRk0yZjUzV1lTQ3VKZ3IwKy94R3lnVjdCeHFMTDZibDZoN1lOWDZadWFqSHdNUjZQOG8vZkhwMHVEenVRbzdYQU9RQ3VuS0pyNkZjVUl0VDF1MWErSGNxUHkvSVRRS3JhZzIzbXpaSTR4UUxadnhPWXlHdm9vOVloOTl1bkdEQ2dFN1JqSGwyU3VyWkRnSjRPYzNmeEZpQkRVcENyV0h4ckxJcEVuczcwcUZxODB4M2N2cDRnL2I4VUNvQ20xZDBnU2E3eFhUVmdwejliTnpGZWVJdzhlZ3hjZFZxMU1kYXMxSHFHNUNOTVVib3dldVpLWVdjdU5LMFM0UXlwWkpnWXFudFo3VXIrUlRHSlZITTVUYzVUU3A3N2J6VisxaEdhd3hPRHM4UVNScWdyUmovSWFCVEJ1SVJFLzJ5d2tuQ3N2ajhyUE9yN0FKTUxQSW9aakN0RFJOWURhZmQ1SEsrNWMxYW0rN1hYK0c5eVBOWDZFVmhzMXgyczBVNjF0cVlSS0lVNU9ONjZzcG8vb3RXSEttT2hUN1lYT2hRWG45TmNhTVk0ZlRyemVSM0NjNDRTNXRpMEloVVJLdElKV0hDb2svb21KVUhVQW1oeTkzUWgrYVc4ZFNEakI3cGVhYTlXcFBjYU1PU21QeWp5bzE2UndSQS8yNmtodHhVZHI5R0xQMUZscVY0d0hPbUxHTFBhTkJOQU90QzBOeDFPVDRYVHIxUzBtczhPVVVrMUZETmZMbkRyWEdoV254RHNybFM3aXYwYVk2R05CU1NTaFNxL3dHNHMreHdNTnFSOWQyK2VLdlo5NGttVExuZ29xelNvRHRZTDB6d0JnS05HQWxOMmE1cFI0N1BNOWVpUHptVTNyU2ZWVGRIUHN5WEV2aG9HMUEvckNQUm1Pck5EMDJaTmF3TDZmSzRHNkV4RER0VkJNei9RMllwckgzZDFsN05ST0M0WnVFZy9qUWtiMU9pOElMUS92T3BIMk5MZVhsYnBFNWtMQmNRd1JLQlRtMVFxNVNKdkFHT0FQdUY5elkxTkU1Z1N6dFZvNzQ1ZmExK1EvSzZWY3RMaUdXc2ZZbE1PN1ROS3ZNMzBJZGpmbVJnellMbXpRekhyVVRGUXh5V2x3UnUzQmVOVjF4bHFrOUZwcWpqU3haUllhZkxwOHAwUi9GL3JCa2E3Yi9DeGZPaU5aNXgrZytCa2tqUXhiRk14UmljSmdZUXRaV1RIaTZwOVZjY2NvVHlyd0EydWVWQnZMVVEvbTU4OWk1K2ZMbElwdUJzQTFxS0YvUmdGWk1iNkloY1NiNExIdHF0a1VuK1VGYmhEU3FWdnB3Si9MbUlQUjB3LzMxR3RrbXN4K2duL0VJekZyM1FBK2lmaDJXaiswbXkxZ3NGWXdJZmZFOXZlc2QxTjl6YzNCMDhKTXpZWXBXaHQvaEhVcEZYdWJnOW96bVVOU2h4VU5VNkVDbURCK0FjQVlaRjhrT1JlcUFaRjBkV1BsSmgreGNLb2VtdDNkaVNmaTRSKzExY2Q1RXZlQy9wcVF6ZlhDZ0NiMkorbWdQTEVlYmN5QXZjOC85bExMTnRXRWdtOHVwU3drZXBkTlRXaUJFWmNmb0xhY3duRWZIbEtRNFRWZFhLNTJ1N1FkZmx6bmpuaTRaZlB6MDhMZThNL3JrWW9sZjJKclpRM0dzRmZUcHNSWWhxM1JIaXY4SHJ1YTMrK2k3SEJQakx4RW1ISVFTQmU1WU1vNVhib0x0bXBkNWdYdEhCZnpnR2V5VEhqU21BZDJqTGxxYXFFamR0VkVmbUorQTA4c0d0alpqR1pnbkF3WWVteERYclpROFFCMnM2MGtiZWl6ajE0YUVjakdQckNFRVkycGlHRmtYZU9IbkVjODBVb0o1NWdqVXZUTTJFQlA1UUdYa1pTc3FpQkhhTGFnVHRCS1k4MUcyb3pqWFM5WHA0a1NZc3BEMTluWjZsVENObG0rQmk1bHd5T2dxL2h4VkttZXJ4c3BycWhaUHo4T3pZb2d2UnJvWHRqM3ZiNmc2Q0pRbTVHdHo5RE9aSE5MN0hXS2V4bzF6VEYvQ2s1Z0t6MWxnREkyNjVBS1I5QnRzOXh2WW9jbms4U29YMmJVQU1OREJUZ3l6SVdTcmVhZGZvbnRJOFdKSW8yMnhISXVPWUtzYUpJcU9aclNSRXhya2FqVEYwWnBvUEI2WlA4UlBuUGxnTnJiR1JwUDIrR1g4WGpTdVNKYisxRlRQaUtVMEVQTkNBV1RLOVh1alRkc2g0WVBENlRDRE0xTjVMYjVidm95U0I5dnZWaUhxeWp5aEc0aWd0ZWVVN3ZHSDlKaUkyaFBoTGJXNkpPOEVjRUloWlRRUXhKWkpPSzNqSUhDa3g0QkE5cElsazY3WkFpeXRtMUNvdmVIY3RLTUh1WFJuOWx2elZ5NUdCQVJWZ3B2c0Y2Q0pidnN2VjVqMGdqWVZEcGFGWVVnQ3FoQzZrekpxbXI0V0xtUzFpUWMrY3BZaTR2bmxBckowZW92QWdZSGFHZ1pwWHN6TTFSb2tLRXFqRW5TQWRubVppcGl5NVhPRXBVRnJyTTZuOTh5M2Rrd1Y1dk5QU2hwUWZpTzNaSGErdXQrUHNJa2ptaTlFMi92Wms3NnBnTlBOTTJxUEFzaHl3U29VSEtSSERPYUJJMUprWStEYnJJcWJRL05YenRjVVpzY3BYMzRkTkhpaTVncFdxSnA0bzFsVXpQWEJ1alEzNFB6Z2JmRHZXOGptdnhBSjJJbEF5WTR1cktDeGZNOTFNNVBkY3BHVE9HNW1ZcCtTbmdMRTQ2MEdzTklpelpDK1RidWVNZmN5dmZoN2JwMGd0Q29KUDk0MGZYWFlGZlE0NUZPY21EYzdjbFZxc25DdWxmcCtIakI4eXJrYVF2TEM4c05ta3VqcTVqTkpFbTRMdnBQRWV6ZHl2MVdPZmVyWitRWXlEYkUvM1RWS04wY0dmdFFTbG1kNE45NWZHZmlMRE9PdWtpVm1sQlVXVjFwdVJ1bUZ2ZVpBQmFvV1ArWDMrangzOU9QRmt1M3dhcGZTOThrUFN2K3hXa013b0p6MnFNM2s5aWZLMkUzZDE5WkdWc2Zaay80RWZEUWNJQjY0UXNuRGlRK2pSMEFteDkwcWhaNWdDNXFnSXJFOGU1cUt6enJDY1I4aXloUURubDZIREhIQUlCWW5zaUFXdDdnQW41eDlzTWR6OERhUzBjUlNDWEhveSsyaGZiTkc5SEtIY3YwNkxqcGFoMTdZQ2dxelBqRDJiY1cvSk01emNsYnU4RkJqQXZidFREWHdWdVpDWjhLZzNRTXU2OUc2cjJickhYV2V5ajdqclhXM2RBVmI0anFFdXlVR3VTR2pFQXNJa0FzM0E5akJueUNVSmtNSE1qT1FJanRxekFXWmxyejI0cEJLdTdSMkpqMVBqbXQrSFBObWR6MHlRS2IwdkNPYUplNFk5Y2VyOElCTDEzZFhQME9iWjFpM2k4L3B6ZWhjTUxGemhMdEN2UWk2c21DeGxXOHBoNTBSWXZ0c2traUFFaWhNMWNadk5VNWFYbFNTWlVmVkM2WXpMM010YTlGMldSLzk3d2sxc1cwWHkxTDRPQUMyYmtMOG5sWG9OSzgzc3FsZzBXd0N0ck95eDZmN1hSWWlxbksvU2cxL0dtaVRrS09GT1c0Y0dqWXhzYkNRZmwwaUtqQzAvY1lrRExrb2J3cEZ0bmtGejNPWU1pYzNjZnlYdHluQVJhOG5YbTZBYStEZktsbFhlKzlwUG5NOFdBQWhlUEI3TngwWUpvakRvcG1wWmR4N0IwT3FlL2hJc2wwVmJQVFdyZlB2S2pUUk1Na21CMkVEMEFqemxQSFJoTUpCTllzeTVnV2hObElPSHlHalZ4Y1doaURPclFHUW5XZjg1R2dmWXpyZ0M1UlBkYjh1MnhnOTl3VzR4L1pld2p2aFQ2NnVNZzQ2d29RaXVKenBSb2RIcHZQblhXeUdIZXhONzdVWXNIemgyb2lOWnFaRHpvQTRlZzhNb3FMdmZhRWNocldrWHNiTjI2clk0MEZlQTdrWVZpeWtQRjV5MTVnY01QY2Jrd3lQcHNZTUR4akFjY0I1a3dob01VdEFmTjJ5MXhpMVp6YzNjb2RIdHNycWFmMDJicUgwdVdJNmxXZjh3dWFRVXM3VTNHT0l2VkxaanZMODRGNVdWVXhzY2NPMzVqMjBoNXI1eVZjVU53b3hmYnMvbitucW40d2lSbUFubmlseklPUm1QWmNEVHJkUHoxZXVWL08rRVVDRHJnQzJEZ1k0RlI0U0lWOHB0UGFqTCtaUzc5YzNOaURDeit6c0ltQ3ZIVUNISUVaUWxqdUxvckJnUmdLSW0zV01GeGFEZlI5aDRyU1VzL2N6eU4rRmo2cldGWjlHajdKUTFnVEZzeDNFTnRoUWVPSjNGRE1lSDZ4aVhxMEcxVmFXQktuL1d5Q1lZWUhvWm42WEo4aW5YOVZsOUJEdGduTmkyUGJsTFl1TkV6Ryt1Z2M0eFZ1empsN2dDWHdIWDFmTzFNcENSNHA1Y3FTWlNqYkFJcEw0bktTMGFDUW8rOUpKREJUQjRpQ3FqVE0xL254ejAzREhtYWtsRXl2VmhFTXRRM3l6R3pkSnM3SWRnRHl2RjN1TFlobFc4cHJsVHdGVWxXQVc3c0dGWjYrVVhRcGFhck8wc29LTEwyRVVoNitvSDVPMUttSnFTVVRIQkw3Zld6UGY3Tlp2ODdNOUJZSDJCM1pWN0NIQ2cyYUhtajVtVFR6eXE2NGtjMjNFcWhVeWFzWFNFNGZGWFhUQjY3cHhIaENXVDBmckZ3OU1PS1o4NjgrN2JMWWMrYjdFSXduYzAvYUQxZW1VWTZSbkhzVzdjWmhwbmJxRiszSlhrekFHSm9ncnJOSEFVanN6QzBNMVBaYlBTcnBlZGxrS3FjWEh3R292aWl3S3FONGdwSlNVbkFtc3VFR0hRa0RRY1YzaElCdytZMVJ2THZ0bktCRmNmNE1XVkRnL1pWbmFKazh5S0N1aTZGUTdwclRZMDMvTEFsbmZNZ0VTRmFYMDlNNHBCbnhYUGxwM0ljeityclJVTkxPZUZRdkVtamNDWDNTNlV5MHU1aDZVN3lESWpQSzNldjBTZ0crcTN1TWZzSld2VTc2aUI0Um1TNUplSkx3dU5VMlBlZUI0N2M1eTZsWmxmcXZlWElJQzdkZnVWRUJ5QTBueCtFMk94R2drUUxiRFhSL0ZRWE5JbWp1Nmp4UmMvUzduTXUzT3hkOG9TU3JBa2hmTXZCTkI1NjdQMXFkZkxrRXM0eFk5QTNOSW5RTjI4V25RSXpnbHV1WmVoeTRobEFNMk1EWEpRYWEyMHJWcGV3bm05aUpPTjFRM1l2SVdvNmxmZUEvMTRNZzZkTTA5SjdmRTR2dXA4YTBCek56VUxBdkg4MXQ5WkpCeFoweEUrSm5TUzZrSVkrK0JiVGVkU3Z1MHBRTXdHV0pIWTdMS3lULzlvVGxXNSs3b3RseU5QcXY5NmNmT3VkbnFyaERDOHltN1FhY2ZEc3F0RVFQaTFOd0lqU0twRk5oTVZmdjE4ZXBnN3RObU1Uc1owVlBIMEY0Z2FOU2ZzQWpxbXpWSzhtMG1ISHVKM3ZLM2FMTGNESWh3SzdBbUl2REZMb0RRN2lNaHVuQURwNzJGM1FBdjFzaW5MRlVseVEraXR5cVlOQkdJa0lxR2F5SFRDbXh6ZHpZMkVwN2RjeHErRkliWUhWNlFTcDV6c0NkeXdTbGJOYng1V2RDTGNZU1VULzJ5alRldVYrclNnQW55YnhPcVJMUzNHeEorbHdrT2pRUG9Md3FUNGR1UU04WERqVmJ2dDZpaDNOQ3ByWjhGRWFESjgreDh5cEV5SEVWakx1bEZidXphRUF4Vks4cEZDdWFJNTIvczAxdWFNWjdRdGtBMUExM0VvRk5IUDMxQmw1aDFpNFN4VUo0WmVSeDhGc0FPUGxUYkJhRjZ4SWVkQVJyNytKOEZzb2RlWmQ5enJFak1ibmZqVEExWHR6TG9HQmxTd1dOcmx3WWhtdEU0OCszTkllNndLcEdzYVFybjVNaEZpdSs1Qmd5TzNqbjduaUZSSVZQRWZMUmhqYURSVnZnWHJTbEkzUlQ2ZXp6SlV2ci9mQzgxSEVwcys1K3NQQm1jWTF0QnhmZEZKZ0MybDNhVi9NZS9WWGF4M3M0MXhlWnVFd1dKVzNOOGlzZngxRmQwcVgxckdRMWxJSmhDdkxwSGRMdTRlQ0t6a3FoTUpVYW16SEQxQnFNT1lSNWhEQW01MWE2aXlicGViTHdyMml6YlVWMlRkSEVYR1ppSnNXMmlBZGlBMTRnNi82OVhWU3dUTWdkQlZUemYrVm56S1daUW95S2laUWRlVjVUdG9jbm9CUGdmOFhqRjJmOXpYN0ZwQVZtd3pxVEE5UEhqQ0pIOWRGUEIwK1ZTYkd4NWFhbDd0NWVOTFZPWTVKbnVBUkwvYVhSUzdTbmpWTXNobkszbTFaemhHNGVXTVd1TUE3aXQ2WTU2c3VmNWZwejhNZ21idDZiMWM3RzloQnJ5eUhTU3FzWGZkOVBsRm5XeFp3Rm8xOXo1MG5LRk02M1g3VmRGV2FDYmhyUllRTVlwemYya3hVaVQ3dGx1RXBsV2pNTHBoVWJRdk4vdTgrbGxTcmdFelZlL3hZNnpnSGJRMW5Rby96a2RBeFRSc3dpd2JRNG51VXBIQlhrc2xZeEJ4Y1ZxYzNOcVpNUGZPWGNGNXFvVy81T21LajlPS1N1YUtRVFB4TDh1d0RyWUJMR3ZwRlJjQ1NlSFp3N0ZoY2cwT0VERzZEUFpUMFZYZ0MrVVJSRXhkb25kRktpUk4vRXFvL3B6VEtEVVNDYld4ckFkazJrVWxYMnlKaW5OZXNSZGJiTzZHcmVaeFN2NUpEUFFoN2xlcXlUVjRERHlneWdnUHhPUFI4QW55U0g3L0ZXNWtoaWV2cW1QeHY2VkNWbExjaDhrWjgrcHhZMFd0eUNxa3hrOGRQcitlcjRhaW10ZGJLTFdzVVVZMm5aNU4yckdScUVsMU5KeFljdFVPejRXamVmZk1hWDNrVmRUbUlKeE1MS1pDWWFQelFhenEwSWNSOGhCaERKd2cxbVI4SUdoR0N3UVpnaHc4dzQrb25aY1VWM0tOeDNoOGdHMjhmR2hzR3hsRDZ1bDY2eWJXS2EyMGhSQ3h6UXdiVGNaYjBoMW05NW1qUWRUMEpJcWpZLzhpcURNVE9XKzY5TnJ1UjFibEJia1k5WnRaeTBLdEpmR1lnaVI5OHE1bDlOSlBUSEpOMzhVamdlSGNZMXYvSFVwTk84cDVHSWxHRERIS3RVb1FqTWExYTI5RkFpQ1BWS0k4N1VqSUNsKyttcUlHd3JxMm5QNXg0SlRqL0cxRUxWVXo2Y0RmbUd4R1dxVGh5V2pGbUsrL3pZdHlRc3lHckNycm1MUUI4NVNiTysvdXhkb3V5d1Vlci8rQ2pXcnNReTg2SjVRWXA0em02WXErSFA5eUcra0QvMzNObmY0NXFFd3FJb1ROUGs1ckJIdnJGd056dTN5WHB3NzFINjFSYzN6RmluUlQ1MndrZHdVb1YyU0QrOFRnZXFJYXdmWGlreWlTQmVKeWh6RGhxWndHN1FJdWswSHdxUllZSTlpYy9QQTZwSE8xR0ROUXpCK3E5VXNBYkFjck5FUW55MlZRMGVmclluVnFpL2tsaDY3dDd0dkNCVkw0TTVCRTFsMit0a2IyZzdLM1R4MHZZQXUwVmt2TVJ5UHpiMmh3c2MzQno2WG1kTnBlNittSjZjZnJrWmFqOUNXUCtRdEhodDlwcXNEbnV3MFp6UDVrcHI2NytMeTQ5bURWaS9jQ3crc2FkNG8vNVhlT011alVReVROanZzR0RleldqY2pGSnlUbXZ4REwyN2c1dTMrMDZvYnFZT0NRUzZ4My9iTnk1UzRGa3NSbHU2V0pBbkFQbGNqTlJtMnc4bEJjS250VHp0d29tUEdXelNGTnJRUXlhTHZXK0VnYVlCLzVEdTJlNzFyWFlUV2NDU0J5Yk0wSlNDZThzWkJMa2tvbzlCVDBMTmREeUczVVhSOTlDdURmRUZobFM4R2JFdVhQNDAzbUFQZ29sNkFRVG9lNXptRVpEMUZLajc1Q05ZWWlmT2NXN2FzL3dBOFFueEJRYkllSUxYS3FGZC9GMmJ3dWNmOTFXY25MbXBMbGVvNmdUQXNkRXZTMzJmR1Uxd1p2WVVJUmYycGE3NzNpQWJyaWk3dFNjVDd5T3dOa2dpb01XNlAwSzZTOENJYWlnaTg1NGZKWGFHbkxCSVdINVVzNDIrV3d5dXpBQjVMeGdzcXdaeWVzQ1FFaDR4dGNiYm5WZFBJMGlKa2U0dXhDM2k5Nk8vejhPV3dJRkM3QXpxVFFoU3hWSTRVeVZxVmh6ekdDZDgwU0s0eFlXcmNmeEdXTlI4LzZ5Z0d1MU5PRkt6UGFxdU9ZUEVtcm00dDFFdGZRdUY1R2ZKNUVNWFJ0cnhHaUZLUmxLaFpSeXVCaU5xNXBBLzBReTIrNVNYTFh4dWdpTVpaNmFZZ3c1Vnc2N2FhWXFaZ0YzMkxURjhHSHcwWTNDaTRsQzlzN2FZUWdqeW80WHU3TEJGTU9NVTVoallqSDV2a2RHcEk0cUwwMVJ3WGtzbWM2RWJGZ2FCNjYyWnlYeFJFbjA5cUhyVjVDZ1daL29RMHVTZVFlZm45UVgvZXRmcVdyWmY5UEw1dWdOV0NQNGJpVUt1cnpPbk9kU2k0VC8wVFp5VlpMc1IrYXFlcFVHWngyUjhNQlhkRGs2N0I4cmlHRHNVQU4vY1N6MmJWaTdqdnduMG5LMkpMMVhKbGxJbkZzTEJhSzN6UkUyWWhZUXBKT2VWZ01KY2Z3VFltSThOQVoraHd2aXA4eStoNEdScFZhVUxHWUlOeEtMTnBWa3FTaEFSRjJhdWlKbU1BSXMyamZxQ2hwdkR2VVNweTd6VGhXb1dKeCtSak9ZUGo3dDZiSEJUUWx5UGl3ZWowckhMQjlZYnZyWmpidWtEbEVHYzN4UmRBM04vbVdTVmRFbTJhY2JlL1hFMU9sZFBaeTZOd0xoaGVyVzNzM1pIM0RPNzZvSERVVG01dEg5YkU5WURMMWRXK0JqeUJ5SkQydTBZM3VCVUZpL2ZzWUxFNGQ1dGhEckRGbW5BVmJ6Njk1U0VUYVBHUERMbUlHR0xvT2xDOHl5cFZLSG4xdS9uckxuZ3pOR21QVXRpOEozSVRxRXp6V2NiakkvY0RIc0c1bWZIV3FocW9zbHRVS08xLzVteFFnSFJCaDRyQTRzR1FETmN2TVRoelkvRFhMSFZIakdremhRZDFLQjVUSm81NThGRzJQaThSVEp4dHpPNWtQeTJaRkYwOGF3Z2tnamQ3RUd3N21SMGU5RFZUbm0vYU01UHBsTlc2NGZzVDRSVG9XYnBseFlFTERRZ29qVkpneGJjeGRWSy9pYUZjSEdpS2ZpMDVsSTRjL2tHN242djV1VUdpMHIraGtsaUdRbEswVzdTcHQ2dE5ZeFVmNFg3V3I0TUY0Y056WG1TUTdBZkpuWlF6SW96UHAydlVPclE3RUtneXRWVXNBNWJ4amVkakJGUVQwKytnbXNpMEJIM0l1Tmd1QjcyZE05VDVTazY0aE5BWExuYVp1c0ZmUlhnSjg5UnF1ZTRpMjNyZVJadVBwTVZLQ2pjVGk4VnR6enBNejFGTTV1Z0JNV1JsM256MmJJNzNsUUFGRUhjY1JvcGhhWW1aelpuMlZYSUw5ZXNyOWVpTU9Yb3hnSXdUNnQza1AxTkpaMzdROFQyU0MyaHZiT29SZ0lvLzNXVDBjVDgyblJYMWhpSUN6Yi90dHMwS1MzY3hSZlBTclBxNzdEREdncEFKNHMvbklobHRqaklzeTUvUCtMR2NFTnZ4ZG9XUEk4LzhMOHg4SHNncXNSYW5ncUFEajFoTU9ZWEN5RGQrTFVUZUNWU21sUDY0S2UyVDhOaWVBWlhybjJxY1VqaGsveWMyUjZFSFpPcW1GZDNBeGU5T2RMZGs1bXVmVlJLQXNnRmxFbUdHK3dDNDRqY3dVNUtoVmZDTHJJb1BTMk8vaFhENkhwOFVZM1FXbnovNTEvVWpvRTZ4c0NJQ2J6Mi9ob1ZYWHh1bEZ6b2NIYmVmMytvQmVPVkdCQ3NoRmFBTFlqc0lEVGprVVIxL0ovV2xLaUxFZi9Za284Z0cvTHFqdUVVbnl6THU1V09ySjQvOTFOd1BtS1laQVdCbjB1L056eXFoOC93QXdaNHptTGxUNHJwSzRqTHYxSGlxcUtlNFdZM3NRTVhqWWdEZjhxc2E3YlZrTTZBSzBoRGlTVkZKWmQraUFEZ0NadzQ4N2pwUHIrSVB0VkhBaU5sdm4wN1NmajZFbVpOc2pmREQ5dUZJM1pmY2FRK2NDK241aVNtRjZ4aHlOSnZHM081YTFadlV3bGd1NmtHTDNZblJjMTRxMXE1UkJ2Uzh1YTRGV1lRLzdUSjF3VXd6czlxUzlDZ1EzbGRpZ2pwMEdCcjRhSmZBdGU1WVNYb2UvMnNTMUJidk43Zm5uWWdvSHpBV081Vml5Z0lBRTgyay9Ea1ViSG9QVGdpYXRsRk1CeW1DTStNUXhRSDFhV1c1TjlRS2EzVmFaQnk5VWh3R2I4LzhxNFdIUzBSWFpJUnFTVFFGNGt0eEJHL084WnFZcklJZkdURDBPZDZPSmRlek5YMkFWM2FFNzBPVnduWFloZXJiNFlXQkMxcXVXZ1hTNzZ6MEF4YVdsanRPRVg0Z09sNmZjdjZYZ3lVT2ZoUTRhUnFKZmd0RXhZTnkxemNuQ3hoL0ZmQlBhQnZ4U3BKS1VGQkh6MmgxSHZ2a2JMWnZNcnpsVXdWTzZId2JHZHlPamJvZHk4QWZBVUdEYzFDTDBzY0JlTjZGWDhHbENzYURuYkgwTjgwbVo5ZDVVOTc3Q0FLTW9PdU5MWHVoaVppMDhNOHlYVXI1WUF0aGgwbGk2anpzaEc2aUhqaytQZ2Q2Y1NwNWk5MUgvTm11cE9uN0RUWFhZSHA0YWR0OU8rWkJNTVhQeWpvOGgya01YbFpuZ3VVSThnVEpYS2kxRzdFWU1EVkY4REwrTlRRWEVidkRuNWVrV0FtUXFmV0hHNEtKR21EUS9aYXNyNisrODVOUVFOVDM2Y1NNODZDcENKVGM2TW8vbyt4eXIxZTBuSmxabmxIaFhTVktvREV5cjRsL1lZUGFmODluT1BKQVdobjArTy9IMDhoNllDc0t6R2hWSzdwSjNUV1lOM1hyclZId1crMWJGMzhJZFd2V2l5QUZWbWhQQ0lzRjIrMEFRVGJiVDYxSjNSS3NuSUJZZ09NV0J5aG44T2cyZHdDUXNhdFZsbTJRODFLTUViMnRqditaM2pScTgvWi9sVytkSzliSEs5KzE0eG12c3B0eVFGVHRsWE9IUHEzYndzakJNbDRMOFk5cmNaRVA1cStlUEk1RjVLaENTVURBanhQOFFFUkpVK2wwcElrYWJidXVlVkNHSlNwOW12OVhkMEJieG0vNjNIeW5jejc2L05MV2VQUzl0ZlFEV3p5eDVpcURsd1A2eStqei9MSGcyWmEwbXpFYnNmU1JLZ1czb3VRbEhTZWNmMVcrUTlsQjkxZzZSbmdqSTZkcndTNUR0ZHRMeTNpSVQ2dzExbmVlNGgrU2creDR4emZ4MlB3ZHljYkczNWxGcDIrQnFneGpyUWFtQXJuUlBybU05Rm4zL0ZFSXR3dzBJVi9mTTB0UE9SWFZUcXR6UzlkaHpWcWNnaHNyMDRwWU1xOEFWQVJPa2tVMXFpa3YvRmkzMUNGN1p5a0FBY0lCSnVzSFBtMXZ5RlFpcFNKVG5XRjV3WVpLeTZaR3ZUYnYrTnZ4eG5lb1UwOTJkQmV3aHg4K3MrdVU5VTlaOVJFWUdpQzBtUFlpdnMzem5pZzJOb1dXcWdZOHBJYnBJOUpXbTNXWkQ2eEU1RnJ4SEZxMkV0bWZFbHV2bHJFTTUwRlN6S2JCSVQ3V280TytmSGlaSE1ZK2xEUGRUckxBbjduL2V3NURZWWhyKzJaZVJmdmJuMmkrSG92dEZRS3RjR0ZWK0RXbXZHaWNWdXR1enNuUnVXLzBscnc4R3QwZ2QrL1BPTitiZW5xMCttbzFpWENQdVdkeGNqT1ExZFlhZml4RExYUVJ6TkVVYWlnK0p1K1l2b0hhZEJMNFFlRHJFenFJWTNxSjlzZ1VkWVJBZWFrVkgvQVU4QjVsYU03UWFNbE5TMWhtTFNPNjU1bjJvdGFFYmlGN3RjWm02SzlBaTVrc081UFAvZHZYT0dmd0hMRXowWFg1aFErcUo3VVlpc0toR2Z6ZnRxaCtWSFl6Q3Z6Q2RhdUdydEJ2d1R5N29qTHAvUWV5bk5ndlo3UithWW1WdSt1RHVRaE5HNnF3NHdzbDAwTVBFU0RHa0llVVhyTjZNYzloV2ZsSkxMdndYMFhwZ3ZZYjg4V1BzU2RKMXcxRzk5NzhPVGhFQWRNVys5V1BtcnQ5QjNSUUc5aXVYaHhXcTNRbUorTmtCK3FubzBtMUlKZGw0M3IydWxaeTQ3ZUR0Q3NZY1ZlTmdOV1l2d2lkVm4rR3VZWVpULzM4Mmc1T0xxQWFiWCtUSFhuVFRzeklXRVV3MGliZ0RNVkkyZVJBY0MxdFJzVlJ6MEJWR3E1aEJTdEFXTXdSdGVjYmdPMnozaG9RZE9xTnJJRS9kVUVNM3BpblVlWlczSlI1c24yMHI2enNJVGhiUmN4RGUydXpiK2JxUnM4QXBLTHNxTEZXN253OHVNYklubzlLaFVLU0syRzMzWldVczkwTDNhNGgxQm5FaHkwMjg3SFd4TnNhNWZwMmJUdGNOSVp0N3pqN2Vxcy9HVldlY3BXSzZXaS9BYjNtQU1hWU5mN3MxZmxFVENUR0pSLzlDcUljTkE1N2NwcnlVWXpzZkFnYmNpdUVPOEpOYVVaUUdPMWpPZ2kzWjM5WDZnWTZaVnI1OWxTekFDT293ejhrRzUyY0tJY2wvcThQSzBFSUI3bS9kUVFSRythUDlkNCtjZUxxN3I2ODJubEFheWJhUTlPd3ZZVDBhL1BUY3NwMDk2dUNTZXZYQWVpTlpXWVJzRGFHaG5kMmVJYVVsTkYxcllpTGRpV3JwbmN6bU1ZL3pNdm5MZi9tcUxtVHJjdCtLNkRUVEVPSi9ha2dFc0dFaWpzakpWQUFybndvdVphOEJDV0xqdmRLNjlERzRsYUpINUNkaC9FeSt6TGRGMXdIb0ZqQk1SZUZPRkhyVzNNcDFObTlJUWZ3TTVrK1hrK1p3WE5JaFRkY2xZZ2hkaHVxM21MQ2RHUk42WUw2NVBrcVdoU00rMk5OY2pFWFN5U1c2R2RDWFhOUTJkU3hjSGFVaGhaRUNNa1hoU0NhNmFvOWk5bVlxVGVBSFRqWUpsYytIT1c1cnZoK1F6V2ZGb2FHL2NPUUtsbkdselVxSk1RcjE3T09kNnVUNXJ3ckltcXZ0RG9XUVlDMTZLZFVhMy8vWjwvQkRCPgogICAgPC9CSVI+CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I+MTwvTWFqb3I+CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24+CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I+MTwvTWlub3I+CiAgICAgICAgPC9DQkVGRlZlcnNpb24+CiAgICAgICAgPEJJUkluZm8+CiAgICAgICAgICAgIDxJbnRlZ3JpdHk+ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8+CiAgICAgICAgPEJEQkluZm8+CiAgICAgICAgICAgIDxGb3JtYXQ+CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24+CiAgICAgICAgICAgICAgICA8VHlwZT45PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MVo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU+SXJpczwvVHlwZT4KICAgICAgICAgICAgPFN1YnR5cGU+TGVmdDwvU3VidHlwZT4KICAgICAgICAgICAgPExldmVsPlJhdzwvTGV2ZWw+CiAgICAgICAgICAgIDxQdXJwb3NlPkVucm9sbDwvUHVycG9zZT4KICAgICAgICAgICAgPFF1YWxpdHk+CiAgICAgICAgICAgICAgICA8QWxnb3JpdGhtPgogICAgICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24+SE1BQzwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPlNIQS0yNTY8L1R5cGU+CiAgICAgICAgICAgICAgICA8L0FsZ29yaXRobT4KICAgICAgICAgICAgICAgIDxTY29yZT4xMDA8L1Njb3JlPgogICAgICAgICAgICA8L1F1YWxpdHk+CiAgICAgICAgPC9CREJJbmZvPgoJCTxCREI+U1VsU0FEQXlNQUFBQU5pTEFBRUFBUUFBMkhzSDVnd1dEaVlXQStJQmMxOHdCZ0ZnQUFBQUFBQUJBZ01LUUFHaEFUa0lBQUQvLy8vL0FBQUFBQUFBQUFBQUFBQUFBQURZUWdBQUFBeHFVQ0FnRFFxSENnQUFBQlJtZEhsd2FuQXlJQUFBQUFCcWNESWdBQUFBTFdwd01tZ0FBQUFXYVdoa2NnQUFBVGtBQUFHaEFBRUhCd0FBQUFBQUQyTnZiSElCQUFBQUFBQVJBQUFBQUdwd01tUC9ULzlSQUNrQUFBQUFBYUVBQUFFNUFBQUFBQUFBQUFBQUFBR2hBQUFCT1FBQUFBQUFBQUFBQUFFSEFRSC9aQUFqQUFGRGNtVmhkRzl5T2lCS1lYTlFaWElnVm1WeWMybHZiaUF4TGprd01DNHgvMUlBREFBQUFBRUFCUVFFQUFIL1hBQVRRRUJJU0ZCSVNGQklTRkJJU0ZCSVNGRC9rQUFLQUFBQUFOZDJBQUgvazk5OUhHRVNMQzBiL1pZWllxVjNuUVZ4TUFXbXpYeHFEVWhlNFhZaDk3V0RISCtoR2RMV2c0bGI0elVrSlIxMFkrUjYzaTBSenl1cFc5N0VXb3RHNnRpUy9TN0JQTW9qMEFKWVpRUzQyOHU5VlJodkJHQ3p4dTIxWVhUYnpqcWpzcVhpSGhBeXBjRTkyRDRrUmxpd3FuSXE2M2l4OU9VNGE1Mm5INVEzVHZKbXVQYk9BTGkxMktTdXFNTXlGZHlqbGIvSDJOOGZZN3creHVCdEU0Ry9lblRvelg2d215SlVBSlltNWZ6SE5OcERmSTdkNWo5NFB6SEJ5eUFqQzBvRCtDeHhtRXhwL3diMENRWktMOFZiMnZyNlhXeERmaHB4ZnpYK0JBMVhUeGJBZjFzdytvOXFkWEdBVkpKRDBwQ3FqSlpSKzhXV09sYmdZSWRzbk1jSS8yaGUweTZwNUhzVVdkb0hUdUxvY1V5YlFBNUU1WUJramlvVXFHckJQVkpmcDVoREdOR3VTUGtVNGc3dlZWa0JEMlgwQWpzZU9IYWFjME1CRHR1bUhobTVMSmZ2NXZUZm1SMzdQRFBGQ3Q5VXdGUDV2VGJhQlNPcG9oUWg4SnBpRmlPSm1aQU56L21uSFoxQUJ2Y29kblArR2tKdzRhNkhENzdOaDJmSk9TRkNKMCs3WStGTGhuVndDQUE3SWlqcFkwWDZWYXhOeHQxbmxyWWJmaWIzSjBJMU1uS0FpZFhNQTBaempBNHN1U0Zkb3g4N3pQNEJqRVA3Q2xGVndlOUt6NnNzSDY3dkpGdk81Z2tBQ3RKQXdTOC9wdlJaUkFKOUJQWDhXbFlsTVNnVkxTc2ZVWU5YNDhxTVpBODZtdW8veDltdEVmWnNaRDdOY3EyK2tYdFRZQnU2MmtEOHozU3NXRTcvZk9SMC8zNVJjQVEwSlRVWXFHSTBNeWhncHlPN2xhblJjcXBpRUxLU2tqbSsveDNZR3kxRXp0a3BDT0FLNGZ6MVJOTWFYdWpoTldhcjVsb2xGSXQxRS9DdUZrbUpPM3IxSWtlOGNQOVFXb1JlT2I1OHJkQnZJRUZBVk9vZzlWWGw0czRPck9wSStPN1NLTU9HNkxkYnFQMGZvVlhPODRtUUNmUUxvdHcrYjcwaUkySm12cUNPRW14aG50dlc3WU8vRGVlOUpPbXFMV0oyVTFya0lZdGgrV25CNGZ2YXJWSmVKY24vUkVDTmtlODJnWUhUZlRWcmdpbTQyT2VBNlFRT3lHZmFtbW9rcmtya2kxUFZiMmdKYkxYdE4zOTVlWTQ3ek1zMU5NUlk2TG5YQ3k0QzVYVlhONDlvU0FFWlZOT01rdlpuR0ZjQk1BUWQrSzlzWFdWV2JNOWZ0MGtNWXJZZHZNRXdqTFpqbzNwT3BnVmZaRWg4YklOdW5jQ2UrQzlqQ0I3TytyT1J5RUpMc2g1UWlVLy9LOFFsZ2Via3VoRjRmSVJrWHBnbXdrSXZzMVBkeVgwWTR4RkFCTWpvMDl0N29iRDVMSVhUQlRhK0hldkFJZWdReWltZWIrSlRWOHhDSUdieVV1b20zOEFsQXJXWkNLTitoWk8yREo5YXNlMWVGcFk4enlUTjJ0UTJCYWxKaU9LK3JmZ09WUDhBOC9Mam5HcTZiakYvTEhTTlhEd2RwNUUvVENUT21aNTFwNHRFdEhScGk2aEFSa1d2NURzSFlzbFRLdk93dG9zdDZJZVEzZzZ4K1VyS0lwNVlmT25SdERjaW9FUDRyLzJ2RUtMaXlFMUJ2TmdsUXZsb05BSXhyVWNpV0g4UFZGOFplb1hHbEhhaEhwclZoSVlvTzRJbFVSZ0RBVkwzeWY1QTNJY2xaemFoS0Ridms1emI4YllpV0hGeEhYMHFsTGFpZGYwNzY2b29VcEVudTdCeDFESW1lTTd0TGdTVGxyNDhGTWN2Yk5YV1ZJeFo0R0lwTWI5d3lKZnlUSzV4WXlNM1NyRXpKdWpLN2o4ajEyaTVvckdtbXAwL3ZNdWQ0NmNzTG1yQkJRRlV0Yk1SOGgweXhmdG1mUFQ0aTdBUW1wSFNrZnprcytWdFJHdkMwbWIvTHIxdjAzRXN1bCtIQk9zMHRIOEo2L1poTUNKOGRhekJvSHpleFpvcWhzWXFqYUticzhJdFJDeDV1UkVaVzFyNm5nVnlhNG1qQlM2R1E2YmRnSVN5UXN3dEJSS0VHUmQyaEdONzliWUpUaU9zVkNpem9id21CSGFORlprUmtGdGRuWXdhKy9YOVRRQ1BFeXJhS1Z3YmNBbk1mVlFUdmlDMzVqWmRXSFM1dklHdWdaRVhJQndOMkptYTU3Smg3dnhXTUJ5M0wxSDVsN21qLzIyTWZCMTh2YXQycGZCdk14YzV0YVJ4TGhkOERyZ2tnNXllVUd0dHF4bXhSS2pIRUVmM0pjVEV4czM3NHMvdVMrd1R5N2ZBL3YxcHhBT2dSOHphem9CdXl2MnlQZGVVZWFQbllacE5JNVJVQXpnWEptY1RLYmRaN3kyMjRscDFjVzg2Vy90RzRTSmhkVmFnUk9va2tnVmQzNU1YYWRBbUkwTUs2eEhYSnNQVkk0ZnlWRExNMzBETkZDdEJjUkFlNThaWDM4dHBxOVMwK1Rya1prdUVVRyttZkhYRGtQWlM2L1lGeXY3c1UxWlJaa204cTNwWWNQNStjSWxZa1VzL29FdXQvM3VLaHBLR01jblVvTG0wUXArdS9sV040SGJIZ2ZwUFZ6YkNmRzNoQ2JmMWRxaGZwZ05ZMDlqdElxbWRNUUxNNC82QlBVdzdaWk5aVk5LQy9IN0U0NkJaTHFuSW1OL0hhOEdNaHNpZ3VsMngwbmhuRzY0WjlHNzNMYU56UUhkRnptZFhvS1JxOVQvUHc5TDJQdDlQdUgyZW5tQjdYSk9kYi9mc2lsWml1TFp2aVYwUUczM0I3dTc3QTM3YVU4Z29ZQklzM2tKUERyODY1Syt4bTJibHZJRTc0YzIwZ1UzZVN1QVhMMzlrYWpBU1Z5cUxzdk0vM2JXS1pmMFlldFZvQUZEQ3F1b212ZHZZRUpmQ2J1VGt3dVB4YzJsT1oycXdONmZtcWVnVjNwNytOZW5pclBodXR6aHpIOEJ2UEV2dmMrak1yOUp0MkJWVGtwbDM4NTJEYnBBL09sQkVMT0h2c0NkMFlUVEExWW5SLzNwTVpHYXJzYjM1WWtSb09PRFJmQjM1dExQU0ZUTm9lQnZEdTRtdXV4RXVEOGhQQkVhdXlXcDZNYUZVMnlFMnJjdnZHeHhZd2Z0Rm03ZEZyWHAwOGlFbDl4dXBsWkhGTDQ5ZDNkbmVxMXc0NDBFWWJVQ25XSCtXVTdlN1lRU292UmNsd2xqTW1OSDhkWExrY0Y4RExWbWJqeDljdUhMRmY2Nk1rTk1lVnhyL1VIVXd2a212TGt1bjBncXd5YlhCcXl0ZGRBN3Z1VXgyRkx6T2krZEhGK2F1OVNKQlg5YU5TaFVZYXJmb2hmREM0Vjk5S3J3K3VySW02alczdUcremRmQUJXWXVadE1FcHYrOUJHRTEyU0sxZytjbnBRV0ZUdHZJbG5yKzQvT0FGTWRJY3J2eXhyd2JDTjlDMXVSV3QyWnl2YXFaSWFVelFxTWhGTlhkdis3d25uMjBEaG1jazY4VTZZZy9CSkxHM0Ywb3JaSGV4QXdvNHdMOG1OSGhMdStybzlVZTM2MUNjdE5lekRVTlVsWDN2dGI1YnUrN0F0VnNLZkVvKzRwbXBjOGszb0VYNlQ3bGI0NEx5TjRyNjN2QkFKcEtpbUIzTndHcTU2c1BiSnR6WnVoSGttMEM0UVF0VjdtajBvR01vSGdXcjI4a0hOb2Y0MVVuUUxRbElMNEtxcS8xZit3YmdrL1prL3M2encxWXZVY08yK0pwaGdYQXNRNTliMytydzdUWlhYbG8wSG9EWGtycmJ0T0xzbXBVR3J3SjdpVzZTNWN3S1FERGRpbmgxcFFQbENwRkFmMDcxRElTcXZFMXdaUmF4ZEFiRWFQVHo1WXE3MFpwd3lFWFBONmg2OHJ6UmZwRDRPTnJsREpqV3FSVVR2KzBuSUEyYjYzQmM2T2JVRWVGUktUUmg1RWt2NThUa0hjL3l2WVFKMklQRGZCS1hVVm9qdk5UVk9ZNER0MHZhWi82d0RLQk80dUc0c2ZFMW9UeFhyN3BteStFUWJXejh2Nk1Ld2RQS0NMZXVEOU12dUNVbWl0ZG9VbkVEMklCTlpKVzdqTTg4YkxQNW0weFV1ejY1NW1Ba2ExeFFMTkJLUU5ZRFhjQmwwSTlwTnpNUm9hMEY2RnZHR29YYmhvTldrTzFrbXJNbTBvZVVyekx3MFBFYnBTRDlMSHo1Z3RNZmdPMFg0bEUxeHJ5MG1BTmhaL0F4YzhMRXJ1SFRESnk1Sjh2YXQ3Vy84OTIveGorMFdtaEwxNDZYRjRkbUZQb2h0VzRVTmV4NVN0bVdxbUdVNGc0YXo0UTUwbjljL0ZQRnBzekoraVNKaTRKR1M5dEF5K09HRGduL0lTQ3VzeXdRZDRPSTNDRHV0VmRHZ2dvZmxNS3ZjY2x2aldlUVZWaHJteFNnU3FqMFQ3T1RsdndvUEEvUXVtUEFvdEFMMTg5Y2J3ZHh2TUhLZTlhWFozM2t4RkhTUUlodVdheWtHeHR0MGRqL1ZYT1NpeE5EVUN3QStRb1Nhb0p5WXBLS2dNTEgwRUd5VjdPM28rQ2licUZ2RExsTWF6VUdZd3FIQWRDOVlSVG14QTdLREhNdFRGeDJXNXF3N29JSkxQSW82ZXdPMnhZQ0pSWFVudzUvdDdPeHZxZWdWT2NyVkgvdmw1WlRzN2JDRU9pdzI0REwrYWpQUkVqVEd3UXFySlhQSEVqUVZIcy81bndpYkcxK3NIVnpuQmEzSW9KTVJ2VG9xT041c3JDSW5RVXU2MTBVTUx1Uk5UYkxqbzRTMDhSKzlGVnFnZzZjQ1ZDQTAxKy9qWUNPODNmQlBWTWxkTHBOUGZTbnRTOHE5V21sMGdFeGNsYkh0R3BOdzZpSUNUemhSVUV5MVd4a2U4bjdBajJDbkpBN1ZCRXJPTlQ4UHE0bEx6K3R4LzVwdmZKcVE5K1FXT3BBQUVZZUdiYkpTMFpEcWg3NFpQOXdOMTlGMmN0ZDY3cDg3bzBLZitzYzJPMTRPeHBoaTVucjRDRHoyaVIwL3dqRllJVHd6enpDM0dEb2QwM1RFU1F5akdvbkZhQlh4V09xVk1Xck11Ty9EM05iSnpqSHhSQnlLcnl5a1lLTVYyeHBIK1Bwbi90OHJMa0lYSEJsS2k1QnhTRXZIdDN5d3NtQ09aL3E4c2E2TWlZeDgrWUduZEJJTmZVS1A3eWJSYkp1U2lCTDVTTzlUaG5OV21hNG8wVHpTMzZMajNPWEltcHZSQVFtNTFnSXp2UmlvQUIwU08ySExpbnhRUUtTa3N1cXMzUjBqT2xZbG1nd3JBQml2endqQzgyQ2M0NmhtNTVqYjl3QXdCY3hUekdCUWdKWG13OUFtZm5WY0tPUzExRXdCdFhXRWxBVmtHQ0JaTm1JVXpzTkVEUlo0aE9xZk1ZamxDY0tsTHB5aVl6UWVJUzlYMkVjM1dEbmNENlNuMzlROXAzQ05rSUhYNkNEL0RwZTRpdDdNYk1YWC9qVVN6ZDBOSFJyZlRIMU1HWUJzM1V3ckkvSWkrc0Y0aEgzS2xKajRseTlzTVpmOUhHcGVMNzZFZ0RhdlBVS1Fuakh3eFdxOGVNRTRvMDhZL05nTnFGdXpqbGRzTmdDbE1IcUVWYUJxa0xlUys1UXgrUjIyVkpwVUEySUxoNmozS054ZEp5Qjh1MFpsdkNXUGw3bVRYcktQYUJlZjRoNU9uWFA3SWpnaG9LZnRyRTB6NklBU01vQjhmQlR2T3hXWmg4UEU2TWlQWFFLcHNDemI0V1V3Y0pWMnBTQ3h6ZWlzeVlSYU1zbWFiWkkraCtYVTFNMFdjZ3lqY0t0TkhjbWFtSjdMMHpaU2ordG9zczU3d0xXVHNwRlIzL3hmY2lDcHBRZ3diZzZ3NTVzRU1EMjNwL3luRXNJUzVhbDdld0RuZWhOSFp5YlBCUjZRcXprb3ViTWZ0S3UrMU95YnE3M2toc244OUdPRm9tbldCSGxiNFpQWFg1emRwbm92aW0wWDNrY3NaZm1tcTA5VE5keFJicEJjS0ZiTjFjUVRIU0YzM3hLeDR1ZHZ6VTBtQzRRNjNCT0w5UUg1eXpVR1VHcVI5V2EyOXJySEpjaENjS3VMV3JZbmx2STcyZ2ZYQjV3K2MwRHpWNzE0NzRCVDZySHJrYXlIcDVpcVJxRFpha3VUVVlVbmRxTDl4WnN0VVlLTXJKelVLcWxmS0xTVmlxKzhHQTlLNTRxYlhMRHlBZW1YMGhNakRsbm5qQXRFdGEvUklkWXRSNnVnL215U25qOEd3UTNHS2VJazFVS256bnBTcE00NnF6UXZOY0hLVGZDV0xBMVNDNkFmNjBRdElDbXBnUVFCM3cyR08xUGgwL0JHZzFvMDVwdzVLMnJocVBoMThqajZYc0ZHQVJudC9kWU56RDRROE5ESkRldWw0OG9FRUNwdXN5Z2tiSWFnSjk3ZVo0L0Y4Q2xtb3drM1o3TXNDU09FV3FuVFZscTJ5Q2IvMkROWGoyMFg5d0tmYUdwYmRuamF5VEJSWC9wc1J5RmpJdndoeWlycFJKdlNJV25DTzZYcTZEUFBsVVJQbW9SbW1tOWl2eVdDQkh2U2JlWWcvNFczNGN3Ylkwak5EUHpOWXVRZDVYYmVFYnZmUU5hMTVwb0Ezb01Yd3RXUUZmMmEwV29YdnNmR0lrZ2xIcU44NEZqd0NWM2xXa3dhUERpVGhTbTh3S0tWRHR3eDVndzh3QzNob2lmNTVtT1dhU1AyMWw2aUdwZ2IzUGhVUkIxaTR3Y1RlNmxGS09XVHJoRUVmREVVTU9abTE5YzJDanBJYS9nUlkvWVJJUm5HdGFDMmNDMXBMQnFOc1lYakVOQ1lydG5mNHZIY2ltaEhjRXhLN1Noa2RUdUJrc3pMU1hCckUrcFFDVHFxcFQwR0gycGdXZ1drNVRFK2cvbE1WWHpUMHRYNW41WU9Sa3FlMGVqMjlVNy9BZUZhRGs0Mjg0ZE9VRUNHd3JZd0tVczAxenlmRWtyNmdlN2g5ZjZWT0lvQW9mNjRlci9QNGQ3TTNnTDVFSFFEVEVRMzl3L0NaWHFvdUpvUkRlbGJXczVpbEF4c2MzWDdmUnRsaURiQ0gwdkVsdFh4NXplaWVwa3JvOVVNczhyMW40WmhwL0c1UldmUWFoYm9GNDZ5ancxeGg0ZG1RWTYva1dlT1o1bnRKaHZBL2wrRWgyNVorSzVHQVJ5SDlRSTVMYWl5cUwrbVViVFZRaW5XNVQ2NjhjRFBOTVlKbUVCMUNmUzlGY3AwYlJUbkVkQ3VUNUVUbnZHVkRMam9XTGdZZDhwWnBtQTNCWCtTa1hTd3dCc1ZLZFhRalpjU3ZEQ2lSL0VyZWlya3EzREFvME5LdzZRZ3ovVU51T29RUDdkM05EZk1VQjlTNWFHUWoxRFhDdEpnVzFuZ3NZbXY3L2V3N2FNdC8yVG1UQXZwME5ZTENXNVNMeVZkVmhBbm12VnBHMEh0S09lYXlOVmtIMzY4OU9KanNRS09CN0FBeU52Tm9CZ2JTaGlkaUZ0b3NwM0dNZXk0QWRjeDBYUDZyY1RBcXB5d2xpVzNmNmMzdmZxeGRmdXdTUG5ic05oTDloalp0emwzRldmYUxJMm03b2dlclRHazhlKzU2ODFLcUJHcDlPSURNZTJFS0w4Z1NUR3dtV2JCZjlnekNCNzJvWnBtelB4Nlc2dTBETnFLa1VjZjVtcExsVXliS3RKZHVMSXNKSzN2b3NYM01uTEYxMEI4UFl5V2ozZ2JGZVM3VEw2enJOZSsvTHZYdjdBa2hUWFdlSkN0Sm1hUHV0MGhLeEtCckdXTE5KYjVXcXRTd2pVZ3J5VngyNTFUSU9OOUJmb05pamZ2THBmWnkyeDZzelJYY1oxZlQ5S0JhZCtmNnhlTTNoU0dBRGVBT1dVMHVhM2ZROGQxZk1GREo5V3g5d3hYN1NYRmRPNTREbHpiY1dEWDBDdlhPZjI5eGQ0d3c0Z2V2WUF2RXBVQzVMcTU0azQveXltUzFWYjFLa1RXN2NXZTJkWkZ0Z1lLUFQvSFNqbVJTL0JHVFZrdGp6bGE3V1A0OXU4MGE1MG5nTkduUFc0TFphZU1OVk84a0t0dGI3OEhscWk2RWU4Q05aMVBkZ0tBM0pYKzZOMDBheVVPVkF3ZWpaZ0NnUWRKaXNHZ0FKcG5LL1pWRWtWV2hVNEdxUThvYlhhK2hGZlFPZCsrRVhUbmt5bnNRVURtVzF0TkFyVUdvZE1GWGwwNWlqRkVmaHdiUFhjcThWdllLUm5GYksycDFob1V2SkxPYTFERnJnN1VGY2pTOWh2SWdkaVNyTlVnak9QbG9yZGhCRXQ5NWgxZW00SFRwcHBCM0pobVpDME5yLzRvZHE3cWwxQnByMEhZdmFPZGdYZE9FaHkzZGtoUFpLMVhjNjB6RDFqQmhlN1kvODYvTE8xb0toemw5S2FMczd2eW5taWVwZkxIYjVDdXJ1VEthS2ZreS9aOTF5UTNwMk5nM2NTeVRrZU5WUHJQbnRZME1hZWdKcnk5RXZPZXIwcUpLYXRtQUNnOHVpWjVXUjRnWmtOQkUyeGtyR08xNm5LN0hjYXRQeUhnRFZDaTFPc2hBOFdCNGE3SkppcEs5SFhKeVlJcHkxcTBObE1MNC9BcGdFUkJCeDVWYkVPVGpMQ2VVT21lQ1dPT2s5djJFU2YrVWtxTTczQnMzQWljdHFyZHd5U2dVV3EzdXFwYlRmZ2JpRU9BMjRSd1pROWFOWXFORlk4Zmh0V2o0TDhjNWlzUUEvU3REbW02dll1QzNXVzZxTCtLREhhVjVyZ2F1M3hWUGE1ZWlZOW5GbllTOWlHUGsweXI3VFdDZUFpQ0l5VUowZU5jVzNEdnhoV0FyK2xYUTM2cFBDYVg0Sm5aM1NDbTJ6SEprMW5mTm5ibEdYWE9MMmM1b2xLYWJvb0hUM2JqM2djNmpjbzZDTWNYdEFJU2w0VzlIWHdPbzIycXV3WmN1eGVKYzhDYXNNQmczc0wycXB5bnN2RHpHMU9GY2ZsQkdiOFJVNGlxSmJERStaT0RpZHA1NUgwT09vRnlCT2lGQjB4OTgraCtBYzV3TFM4UjJYN3MybHNlUmgzeGgrMVRUUDJWOE9uWHlqcHkwOFJFaUt6ZWo5VThWdkp3SU9jQlk1RURMRjVLWldQazkvbFBHYVlBWG1vMFh6aFZQOXR2R1pxNEgrdjBkeGNlVytkZjJINlVBNWF2VGs4VitGRWwwekpoeDRDV1BRSzVJaUFGR1I1Mld1VEp2eHlpTUZKekRPWXJBMmNCd1dVTXVBUktpUWU0N1hBdEIyMjAyMzB5ODBSazdlMEREaE5IbWxXcWlaemhPMUkyVWVUODFVeEpkM0d0SHJNa1dyeWVFSGMwK1AyZlIzWDAvVkpuejlXNCtUWHVQMi9TUmZzOWRQOXV2bDlWbVlmdCtrTC9aNjUwK2ZybGZWWUFNYW9kbEVuaVcvNHFBbkxTSHRoVmg5alZQQ1htRVFGaUZNTVpxZjRDNTZmZS80WkJESzQ1VFdmdzVMVTN2UjVJaHJQQ0w4RGNGeWZlWnVNcEhVc2FRMkFoaXRVbVllNVYvNXJ5c0NvYXdDOEU2ZURZMFl0RmhqT1pWUUE5MFA0TGRuZWJWeFlwZmIxN2NkUkVuN3pnays0cTJUQnJlb2hhVWY0R0RYQnRZeEpzaURCdEJ1cVF3Q1o4TSt1RVl1SGJzUXQ5eFdYdWlwNGNIVFkvQVVNMFlrZlhyNGlwbG5pSUpNSnp3d1lrSDBXVTk4RFlhOThSaUtxNjdoMUpnVUlaUWpRRU13UUZpbTIxS1VzSG91anRlQXYzODdaZzhVT1NDekt4MHI2RDhOcXdveFVXblFubGFNYTNUMk5pQXl4R3JRaTJ0d1pJbnFTaGhWb3NFZXdSaW8reHlwV2EvM0NzL0FiVmg5LysveWc3Rm9nYlhFMmJrNjFKZnAzOVVjbzFiMXRWdWUvN0JnR2V5ZVdnaFlsWGdKS0pOMXMwTDRCRzd4WE9FcSs5eGdjSy9wMlB3ZXFoSTBub3JKZGhRVHU0Q1VibEErZkgwSlRWU2dpdUZ5UXVEZGRDUkxEZ0J1V0lxaXQ0b2NRN3RxNWxnQXVySnQyMlI3UE9WRDNDZ1FuQS9kYW1DVHpGd1hkR0RvakVmOFp5dFhNblBLQTZlV3RKck5VRVg2bzlEam5VNzVNS2grb0J3WkxOQUlEQ1pGQ20vaGJqZ0gya05LRlV2TGIrWE9pbWVZTzRRcVNiVzNZdVBxb0ZiamJ3cGNqMjBzWGNmcTA1Nkx6a3lHUGVnVDNTbDhCSDhkR1IybXFkWldpSmFPaCtqUkI1MjhpSWl0VEpkTlhjRktjcFo0ZHpKV2NrcWpOV1pNWXlRYmcrL3lJVi9uc29wWEgxbE9RQ3ArNVo4N2o3RjEzM0E0YVZHK2kvWWVlMEp3UGVXbVVhbUx0SWdKa0liVEpvTFhoaVBOb1VRWnVMT2VqRXB6eTZTZWdwWWc5eThGZ0huaCt2L2JKVm8xamUvM2Z4UXdEbVRMSGJIdlNpa1BZUGZTQnpxVkU3b2M0c3BqRExleTZya1Y4b2FCbHhETk1EOE9mRkg5bktWc2l0YXJOSzQrczlBNVRGaW9Zdmdxd2NTeUxrbjF0SUlTT0srTXZaaFN0M09UTnF2YkpFck5aM3N1YVp6Q0JmMkpTR0JtdTV0L0psdUovNm56UFJqRnY4aUlTcEI1Z2pWRnRwa0RQa2VGMUkzT0J3K1RjbjZQR21BVHJTcXBNN1JGZzBYOUNGajlBcjhkTzNxMVlOZDAyblJBRlR1TThUclNiOXJzNlRUd09nL21ITU15cVQydVkzMmtUeXFhMU4xK0dmbjRxYXBQYlFJZ012WTVXWkh0YndzOHlac0t4eUtRL2JiYjJncDVlUGxpNWVJTGU4RHNQUXNBdWlZQTgyVU1iekt0TVZZZTk4cU9hL3lObUdTcFRWYXVNbTAyM1IxR3p1eU1YNURlcjZnQzFDcTJLWWRGcko2Z24vUnRDT0N3Rmt3N0FQcmxpV202VDRBWVZ4TUpycXNndVRqYjFKanZtb3Qxdm5NL0YzZ2tFOXo3TEVXMkkyZy81R3gyd29JWFp0dVoyT2FsOU04dVI2OVJTZVNBaENIMEFhNjRhWWVwNlhSV0czdUtFTGt6bSsyTmY0NUxoOUoyempScVZqNXFjZk9NcXl2bFlTVzByMk8rbkhNSTQza1RWVmd5RVFWRHIrWUc1MFhDTERVc2cxV0p5Slo4S2wvY1c5bzM2aTVYYWZwdDF6bWw5VU91UzZxQzZzL2hFQkdPY2dkU21pTE9oNUJIYjFjYS9RUFpnNElITS9Mcy9CZ0NMUTlQL1gveEU1SmQ1a3M0K1FoUDlGdFF4UThCT09oL1VJTDNpd2RucXFXVDZoNUI0dTkrR2tWUnpUYlNCYmpRRVhhRFBUb1pRRS9oM042UHo2ZVp5NzRIaXpRWWt4M1NsZEE1NmJ2bkVyWHNkRk1GWnZNQlc5ZUFnM3pSbnBaTnRFang2cll5dTNYeC81UG56VzVaZzdJd2VtMzV0a2UrZ0pwRG1HQW40Yjl4QS9Jd1ZFUlBYaFJSUmRNVUxHdW96YXhoczlsaWVudGRhWmpDaWphaFlWb21rMGZJNEIrVHNZdFdQdGhIeFJvaWE1ejJsNXN4MnRNRGVCbGl5NWF1Q2VlbTFySC9qWGdxSE9LNzIrVzlrUVYwdjd5b21WYVIrbHBFVGs3VWtaRjQwd3kxcEJaYkVvUnNUd3ZqellvQkh2TFExZnpDeG1HWjJ4R0p1Wm1VVHpCZWFUSVJ6TUhNdlBVVkhvMGJwVG1mMUZKclNuUTQ5QVdFY1R3U2oxTG4xckNHcHF0SEw2REpha3RseC93ZGUrTlFtbFc1Wkwvb1FObjk3cXhLT0ZERGRWYWJZbDFXTjJtR2JNWWhJb1dUMHZ0K3c0YzFnZmlZeDhhVFJSNTFQUDc4aUQvckpicTNuVVdzVHJBNjdESy85RG5rZzl0OFhMOVNyTzJSU2h0R0F3WkxRTS85Sm1EMDVCeWoxT1lBM0tSV2F1QXRpMWxDZmVXSDRHQk1DakxIOURJVDFIZlF6aDhBdGdVMEZjanhRb1ptNHdTR1plU0hudlIwM05SOFZYS3B2WUdpS3JzV0gybXhoL2pqcGpJUmdicC9BSHp3V0Uyc2x4ajBMckZuL0ZYbyt2KzVEZE52aDA5YzA4eC9LZFNIbVZwVlY4L0M1Zk1lczE2aS9oZXl6Rk5za0s5VDVnRXkya0Mvc1FBby95QzZnSkd3eFFObU9oVzZiYzZiVFpJaWl1UGR6bHZVK1Nnb3BEZFJ6RDBLT0lob3JNbkhoeHY4UFZSNG1LWCtWNlY4aXRSQmx6b3Z6WW0rcDJhSWZ3VG9pUmMwenZWZjFPWC83bFUzaXRsZTV2eE1GajRTMlM1ZHg0OW1pbW0veXN6cWozWUN4WUllL1NGRkMzdFNXdHBKVTUxV0hPdEhYa3RSSjBQdklwL1Z0SUVhbkd0b3RvcTh2U2lzbzJkQjFKajF4ZEk3RElCRVNGNlQ0SjIrR0FMZENUMlhIc0hVb2kvek1MZ2tFczd1RE8xeDlRMzk0ZlJPV3lGeXJXY3dwWWlQSHlvbTFET2czZ2tBWXhJM1lYTmlhSFVhUzF4VjFhaEZuUkl4U1NnUjAraGxSMWcrL0ZMUGE2cWZvS3lyVVE2MG1Ob1A1Uy9xbldJeXR3Y2gwZUY0blV5SFkwNG9VRldyaXlaN0J4SVFGcm1XMUt2eWM2d1NZekh0Z3hQN054cW5ab09Ddnhwby8xVGk5bE9BWHgvYTI2cUc1OXVhUEdsVnZWalgyRHRqTTRVZmJyRTFWRzBzWVJwYVFnVythRzZkMnJCMWw2emNocmUwaHliYm1yUDBmMlhCK1FmUlVRZHkwTUhVSlpjYTMxTGN0VFcxdXp6Q1p6WWRxYmVJWU9IOTFpbGFlNDVadGh6VEhuMmtORG1neThWNmtRaDB0KzFHdng0UzNYSlp6UDhCbG93cjFGY0FnL25oblFWb1Z1YjJpTDNuVzF0T3YwRG02THBnamFzd245TUgza0kza09mWlNicHhmZmVJbURLdHYwaFVmL0tvcmJsbkZoYkpkbDRXTnBoRWt4b3Jlcm9YK0ZpYSthU01hTFpsWHFjcU5PSkpGK29ydnFrZVIvbG51Sk05T2NmRnB5cDNHMTJiMlJ3THN5dEFTVllWb3kySGlSc0MrZFJLQU42YkttOVJxd1cydzB1bG1SZjNhWnlaZWhBbndqdk5kbXNqdHVJYXhHN1VzVUI0UWJEUUFZM0pyMEhHbWRKQmxwMVZxWkcvQmplQjlVREZsaGRMRkNMODBjZG5adzdHNEQvZWgyV2haaFlsb1ltQ2d0NmpBemc0d0NRc0FzZ2E2OEtHeXR5dEdmMnNBOVAxVnFRYWxsZEtmOHpvVVhqR1BCaGtwK3hobWEwRDdjK1VYeVZhSGl3RlpUVk5DbkcvbkZiZ2grVEJjYldFN1pqRHNUaDVpM3AwMmxIOXZWTmw3YkJsZllXM09qbE0vRG9iUnBSb1lncGYwZW9TUWFIZFo4NjN3N29RNEF1d1RBUzdXK0tNeFRVUGdvbEpyVk8rcjR5bjMwTEd6bkhXZ2k3S2xrOFU1aStWU2I3ZjNJbXlCZERXdVVOM2xMTkdQNVJaRWdQOGdQaWRZNS9GOEtXRTNHdXBDMGhmcnU2akdwYWUvUnpWVEdnTVo0a3pldmpjaTBLTFNXcFMrUGN2OHZhaU8rVFNaVlI2MU5ralkzellxRFZGemdhN0pXSXVOYytuQjFlNDNlTmxPZHBaY2pHRk5aQnF2dWl3YjB4d0YwQUQ3TzZjd2xqdzZXUCtCYlFaY0QzajJvQ09sMUVNUWxwTGFHL0wxOEkyd1dPYVJtNEFheHlGUnBDQm84T3R1WXBWYTJOM1ZPMnhFa3dyR3ZlUGxmSzVTNDNtbzNMdmtBc0haQ0ViWHptQk1KdzJJSWc3QXNSb2dacHJIUkhtUGc0ZklMY1F3MjRNVm5sem81SXh4b3pQUEZyQUpWbHhmK3Rvdk5oOElMTW1SWHNteGx6cWNYblY0c2FnUFRJTmQxNXZhYUR5OFp6R0dqUUtlbmJ3ekdjUzVySCsvL2M0TVc2M2x1VFZsTWQzZktucFp5SG43M3N4TGlPQVdQYzJWdmRjSHF4SldlR0JwZ0xFSnU0TS9kVURzMEwxTERDYlVsT0E5SWt5d2R6akp5WmU2OFhTN0dsWGZRK3pVODYxQTdrcHFoMjYvWWhHSlF5RWt6ZFZJSHFnWng1WjNPcDR5NHRxZmxFbFlRUVlQM0hCaGZJTTZISDJkc2pQYzMwSGdFZGdCN3ZRM3NvNjlweFFjSWlwYVBRRFVtOUdyeGVNSjg1MFl3QnFvaSsxU1dhYzZ6VVF0NkZFU1JYN2JaUUQzNWswckFTN09SWVdaQ3I0RXUzTEZUV0QrRGNYVmlOZ0lXb1ZTTlpHOWhLQ3JLRDh1bUZSMkNpaDViRkJGUjVsSXJETDgzVWV6RW1OMisvZE9SdzBkNTVoL0EwdUJ5NGV2cUdGcGcrbE8vclhhc3EwRUdJSlBjY3NKMndWN05FNk1WdWcrQU1HditDV04zVFlSUm11emFjdkw5WkVqMGhSYktsTzlpSCtweXhlWEduVkpuZExxUzlHN3JNaGRPWi8vUEt2dGlOMUZNYnVRcGkzaTBqTUV0eTZTQ3M4Mkt5NCt6aWVoVUtpdHZNSGVEVkxYdUs0NFJmQnRrQk9TSHpYbEZKdmpLZHRwWHZqSk1yTkZiQkszN01pT3J4ZFluOEVJYlBSMitPaFhVTTFLQTlUYzlNNitud01lYnBQMCt6YmpyOGpBYVBmVVZVdW1PYzVRb1AyNEI4ZFBIUmlGbTFmRy9zekNHclNycU0vWjJ2NUtJOGVFTWNlRmpySkZhaGJNdmZvc05pSEE4SDZrYkVwMkxZL045c04zYm9hU0hRa1lvT3doUnU3R0NtejBMSkRXNVh1U2tNOTJJdEhlRjRDRmFzQlE4d0hwdEt5bEEzOFU4a3Vjc0ROQytQVHNhN2tKdXprQlR4U1FBK0ErOUNjVkpaWFNhOCtYVndsRjNnZ2YrejMybnpBdlRhdWxuTU5LQTM2TkNIdkRVd2tsOURsQi8wV2luY21wc1RyVExodnY0TExPWWZDamlMc3YxSUhZOTZMR0pGdEFhMXREWnIvbnFMcUhFWERkVDdkWlIwZnJWK2NFQVRGbGw5ck9INmp2VWZRN2VwQ29mcHdibFQ3M25HT3A5ZnRONlBEQzViU0dsSUVQc3IvWlBDRkpEWVRzMDYzOW0xSmdwV3EvVGZCMnlTdkhMdEtRc0lsUFZGQklQTC9vdWNIRWY3VHVnczg1Z1JGTi9LWnVwOEFSZzdaVmNGOE10c2dzbC9pRU9pa2ZJVnl6azhSTWkza3FZeFp2T3h1VFBtWEp5Rzl4TjAyY1RSZ3JFTkNIWXdIa1Rxcm56aUhRT1NxNC9yc2xQNFN3MW0zVVpndkhjdEJtUzBKU3poUnByRDJBdU9KYUVHNmkvbDZ0alZjK0RlcGViU1krckI0NC9PdHFzL3kzMTFYOHZuQTNzenkvNmhOVEpIK1J2d3dGRzNEUzBmRit2eWRJOVFINGlrOCtVVW9KUXQwYi9ZREUvZkoyemxRekg5aWIrdW9GbkN1VFR4Yko4RDZmQ2gzN0xORW5QSHFVVGVBSDk1THY5YWJKWDNEQTlhK0IySkRJUE1KZTJnL3B0VkhYclBjN0FrWVRZajBvdVZ6SkZPUjJlODRSVlpoMVExb0VQbStnNFk0d1VPMWV4RDRYRlhpNWo2WndOdWF0ZEFxTDZzcUZmK09pQ3NJeERnSThCeWRjeStPK0I0S202aldaYWphbmloZjNtajJ4UVk3K2ljbndGa1JWZW02QTRUbmpBbmxzczRzMGExSjRRZVYweFRCaGo1RlZCM20xOUlDdzFtSm11YjRNUEVDVkpHRTIySzFMRmZWcEFzeXExQWpMMHZ0MXFLb2JrSXlMNUx5RFZLYm1VKzl3MVRXYWJOcTh1V0xlblhVaiszYnBTcXF6a1VYOW01dk55ZWJQZHMvRXpraHdjSmNQREhrdnMyTjFGck84VUorckJmZDlldndPRGVPZFM0SElDT1ZSYU9GazdnYUVrdWk5V1JEL1dYbXZJRlBNcUIzdys0VUYrSjZBckJRUmZXMW1ZQU54c3I4SGN2a3k1WGpFTVkxZHN3MjBTclBDODVmOXE3cUhCUHA5U3p1em94RmZlaVpHVmFWOVVONG0zcm8ycU9TVDJxeHdZdlQ5M2hOUk1WMCs3YUVpejVzRXZDQnl4ZURoR1FNYkNrZVN1VTBGZ1RDZnY0Yi9US1EvQ3pya3d5VkIveHhGT2p0Y09IU1lLQXpRYVR4K1ltRDN4ek0xYWFZMzl1dWtqTHA3M25teCtOSFBjeW04MU1tL09VWlVjNEVGa1I5NVFwM290b2M2VkZleHZzcWdlQzB5V05sS1dsU3RRUDJsdHN6M3l5THdabXVNazEwMlNQcWxjTFhBWTJObXJXT1ZEL3paTEhQU3hkQXpVTmdmWmNZVmpBdlRuWElkRVNyYWdxeDdDNGRPamxhNldBOU9Tbk16V1Z1blBPZ2trbXBHeFFJRzA1NnVieFo5akVpQk0rWFhsOVpuZmQ3Vms0cDA0QWxWZXhsVEFwa3AwelRxTURlaTR3TFU1cHo0eFIvRnlwclgxNGxEUGNCSDlsMG0yYUdPMDJlR1ZzOUZFLzhneVgwdFFvcC8xbDNQZjltWGlKRWJON1NDQmFGTEVDVStiZTZ5RS9VdGY1OEl2TWowY3hjWUs4Y242Q012VWtDeHJxMHMvSDJDVjJsOEIwMlFYMWVqcWhtV0NlS3pvN1hkL0QyMVV0Tk9IMjA4UHk3T1ZuOXNKT01aeTFPa2JqeE5lMER0OXdqaDhMVzNjdzR1TllWRi96ZkMzcG14MDdMaWIvaW5pd2lHdEd6MEJDd0dRb1RXcmM0NXdJcnFva2hiNFJXaDNTcHQ5aHpDUVd4WHk1MGQyTWxXU3UrMHUwbWtDeCt6ZXZML1pOaTZ6SGVWdTVKRHQ2Q0RHaUtOa2dCcDN3empTYkJ1a21sazgwb3IzbXNmMlBNZlF1MzhtTU9mdGlwY1hqb3B3Wlp5UVl4RVMrL2pCaTN1R0lpQzdId3B1bWVmZW9Eb2dic0xTbXNSYkg0ckxZYWl3VkJvczVUNUxuSUNpK3prdkFXeWg0UEVKTnM3RG02UXlqWDNXOEtYNUVNajFNNVlqbjRrSzl3Nmk5Y0phOEpGQ3BuL1doM0gxQ2U1RDlhdXhEaVF6eXlxa1UzNHhhZXRxMThSNEp4TWJ2UEFpQ09jS0wxNktlSzBvUTd6ak1VaWRZWDFqU2srWEg1SVFFMFNoRzdoZ0wwS0pYSmlyQ0pNbVJtZE95MDJwaUQvUkY4aWlhRkcwcW91b0RJQkRCcSttSWxTV3hSaHFBZjNHcUQweS9jU3lGMys0ZDd6UzFlT3poRkg0SGpIY3VmNzVrUGtCYURXNWZUWUpvMjVkZ1N3NWI1RU9UQkZ3eURYS3kwMnlPS1U0U1BWSVoyOFk4YmFZeWFBOENHeFlTT3AzMUNRZGJTUVAyQldaSkZ0akRkZWcyKzRVSzNUaFRnVXJqYmN2SVRyZjdlSVQ3RDFjNnpuVDFuK3l5dHl6L3JPcVdhcndQOXpvL3lOVTRlQ0NLZWMxMmNGZlVYNlRvZDJaREU5WDBodzVPcDZoTHArTkR1SktQbGVxVlR3N09ML1ovT0N4Y2QvRmxFUDk0TXk2cHY4elNaWnBhQ242OHk0cEU4WlY3UWVhVyt4YWMweU4vOTJOOXFmajNOTzJDYVE0K3Z4V1hhM0E5WjBqRVpTdjRKOWh5Z3VhYkpUdDRaTmticjVDank5aXpRckkvNUhpN3ZDbzMzVjVJNVlPSW5jTXZCWkZVZXZkV1hkVnZTaXYvOWJOa0hjWjR2UUlaWWloNkY1TktTY3RUV1hBSm1ZaGs3QUR4c21Uc2UyQjhwZkxMQ1A1clVqa2h2TmJZWFJkWlRlV3B6K3plQnl3SGR2TElzVFRJekc1bEhNcDkxN3lwTWFnSnA2UVlpMTNrbEg0emN6aHdRdmRHK1NtNmQ5RXJQd1lvK3IyV2pyMGdkNW9lc0U0VVRFYTN4SVFvemJqVFptaHljQ1JiVDBCNE5Ga2ZGZ3F2V3BucW13dUZ1QXArNXI5eWl4NzBzSFllN1JvZHlHSlU0V0R3TnBEeHJaZy85dm1sNU1uY1kvaDhBZG52OWdwamt3bWRwbkhFRU1OejFqc01SQ2tlS0RPZmtBSDdZRkpveElzajJ3UVZoU0QwY1RKWkVMaytIWGtyL1VodXdGUCtoSHZJQzJtci9Eam5hR1BYOWNVNEdsZExTQ21sdldORXpVZnFMd2lHWHFUU0MraTdYbVg2ckMyM0ZvQnllRGJjRkpzY0llN1BmVFdPQk05ZnQ5SVgyY3hmWDM4UWgxNnJJYjMzNVZlUDdhK2xKNE5UamV4cHNUdmJrVlIvdGF5aFVyekFIc3NnQ3c1cHF6Smg4WFN2dmVGUlNqV1d3QjlVQlRYZjdtaDViTkgwTEI1TlBydlZFdmc1L3J5UkxXVzhzeTRSa0JXZnR0TnhReWxzR3N4SnZzOGxPNEUwQWJZeVIwSVRidm0wODJvRjdaQmxROTNIUlZPZFRMUzRzck50Y3U4V0JySFQ4TWxhakdWRzRsaHNaK3BnbU9mWnhuNTZTQ0hjR1haOVZwd0M2Vzh5bi9HenBhY2MxdUl0NUFCWjJWclRhS0dsUWpJYWgxRGZkWFQxMmg4eUc5Y1p5OXU0MkU2TEtLTWVvWVZsd1NPL01jVkZRVkREM1JuYlFJMHBWT2l4L2Fjbld2dWVOOE9ScGI5VS85eEpoVDhmdDVqNXFyVHA4VG5nalNHZEt4aGEyU3FOK3hHZzcwdXgyTEQyNEFRMUZlck9taHRlNnU0WHk1czBYQ3gvRHoybTN1V25VL3pRWmJkR3RwS2xETnpKZ2NZODNGUWpFck1PRzN0SVFOYTJuWFJnNldZQ0NNMjA4UE5hVnh2VFhPOS9nckVJd3FNZFNSZWRZVUpzK2t5YzVhM3d0a2s5VTJwSk4vSlUvSkI5MDMzYi9qT050T3NwVVRzaVJrOXZIVjB1bVdRVzVXVUtjS0VweU5FSy9BWDhrdlpoL2JkRzh3eEphM29NRytOV2dneENEWC94TURmcHl6ekNTbUFmNkR0Ym93MjNUcFQyQS9WbG1pRVBuM0RWZmt5OFA1WlIvbldpKzdmYW4wVlRiM0RXdCtvWWdtYkFFbnpWOGVRYnduQ1VlZk5sZ24zN3dnUnkwNUZhV3FONlcwV05BMGk1d05ZdFJ4SVIvcnlOQlVaYWFhVk1hbzBmZnUyS1J3ZUxkRHdwbVJqWGVqN0lHb00vU3JQLzAyaHZuRG0zNzBNYlBCcnFBTGFoNHZBcFZCak5lN3RqYTNlWmlqeUZMUnZYeHBtcEhMM1ZOMzFUcFowa25tSy9KS1Qwc09QZEJPLzBUU1NCWHYvRG9KUlJaQ3RteHhDUk9pYzhWdlM1c3V4V3JFc2hmdEtxQ3pCSGhCZ3Z2T1Z3VWJWakt1SUR6UFozSFVHU0psaG5UbHlJSnE4WWZvTjF4ZGtrMzloaEYzcExHT2JIekh5b2FhRFpWQjdmbVpGWFFZemlHNTdFLzF3aEU5MkdKeHNCWUY1eU9mQTZXOE5ERHBHU0xmNC9IRisyN2VYcmpNMWhXd05iNllONVN6VkxBSWJFamFoNm80Yko0eW9OcXlFd3NOeml2MDgyUXJwMUkxWjFrc3lGaFhia1Q1bzYrUVNSd2xjRHRnbWxhY1JzaHhTREs5OEZvazEvbGhGbWtoaEliT29Rdk5tWFdjRVFvNzQrL2JieTFLOGp1TEFmY0JYM25yWVVCWDJ6VzA1bkRZcldTSnZCVDlkUi9vSHVBUmJqbEN5R2x3aHBPTzAxWDltczlFRGJCbUtvYStBMEN4SWhMRTAvOFBaRlBkN3NUb1kweTVwem5PSDhzUklIbTYxdU1ER0N2VDljT1F0VTBnUDAwcy91eno4QWN5eXpnOHFvSkFmcnplZGJnOVh2bzljQW5lMnFNaDFsVU5GeUNtUmNkQW1ndEF3TzhIdkFnWmZQR2pvU1IyTHB2a2MvMlVQYzh4MTRxNVdlQnI2aFRDTFhwaTdaSEZVc1NNWkM3alJ5OFdjSDQwUDFWWlNkR3RrTHdUOWtGelFyVi83WjRUZ3BQcTEyVGZqdFZEZWQ1TXo3TDhIQktwSGQ2NnFkZnRRd3hIbUMzSFJ6SUZpUjN3U3JqVXQ3ZkU3MTlHRklldHV4WXhmZFVmODhIQldvYVpVRVpLakE0M1ZQakRpTkVGM09CTTFsSVQzR21Sa0lXRHJWQ3VvM0x4Wk1FYjY1ZWtHR0N6YzdZRktpTVIrRjE5SUVSenpBRzI5THFpYWZXc2x4TzhaUGtYWjVxWXZqL0krNCtNQnFma3RhSWYrRVczUDZhNEI1NTNSVlNKM29Gbmd0eE9UNEo2Z0pIUWh3QWJRYld0QThnR1BiTUtObW5laEtwUCt1RkMvdERHTGpxRE12UGZOZHg4TDBhaGNFYTVoWmt5eGhSSldTRVNTNWRxZW4zdGRVeFNZUnNPRVY0WlZOc2VoRlIwbzVBTkx0RHM3SnpRc3RrL0dYazAwaXE4MWNsbFZ0YTI5MU9PVkRkSkRvUUQwNEZmTmdhcWhXMjQxTURUVGRFOG4zZjBhMjlHVENKSEV4eGtyclMzNzEzRlA4ZmtTaGI4UnZuT253d0tqSElPNXdObnMwUkQvNEJwQW9nNTU3YVBnUnc5bng3Tm9NK2lHdCs0MXNJRS9tRzNsL1pqZjF5V25aMGYzQ2ZuWElkZ2Z0UzJiNkcwS2t3MEJNQ2lMdElIUHkwVWFOTGtDZXVmYW14bmNXVXZCR2lvVk13bGFKdlVCVHdNc3hYaktXTFFjSnIrSGJEVm45WUxmY29HSnFhWVJBS1FLMHB6U2phYmkxSXN4ekcyQWtza25Vc0tvK2JPaFh5TFZuTWt1TjBqSXNpdDRFN2M0Nnp1WnJBVFM3QlFFOGg5d1hrNnY5ak81TUwwcFN6djYvMU1GUVFpQ1I5cTFxVU96OFo0UXRQQjR3MVhCOS9mRDZvellnNXhUU0RnNTYwMmk0V1NpYlNWenlHcnhZbjlNN1RlekVWM0xwcnplYllCQm5Lc2lHZ1J2OGpZUmMwVWRKU0pTNWRBOE43ajFoOTlDTXRZczF1aVFRNEkvME44OVV0SGk3Mjc5MGk1Tk9ML0dGM0JKbXlSdGc3cXQyVm1pTGpRMDNDZ2xaVW1UeHl1V2FvMmZZZ3RhM0NJM2FTajU4eFBwRFVWOGNta3lJNFZPWTUxQ3BmODdsaTFDYlhlT2RKZ2FEbFN0UGtXR3NIN2t6Y2dZL0pzNHZBV0doajRtYVgrQVdma3Jldk91MU12bnJ5a25OQXErd1R5VkNWRDhTSFNiTXh5a2g5UWtpdUNxY25sTlltS0F6YUYxcUR6bmxHR0tpbGswaVR1bjNuR2hhRUxhbVVEWGRDNW5kTmRSRy96U0dSQTZuY21Zd0JSZTErb0FyZ3ZtUWc5Umpxc2hvMFYwSnllRjZ5eFNQNkdhdDc4a3JFeTY5RHB1WFAvRzZKYVFXUnFyMDJXbjdKaThWbmcxRmtBNzZUNUNuam94REVFMFZIWWEzU0NROXRyUU1WdkV0UFNib0wwc1BwRjI2bmZaRVhLS0lmOHQ1NXFhdFZFTXNjTzRlT1RzNTQ1U012dFlRZENYN3hJK0l4UnlLTUtTa2FGTkFCQURNWEs4eXorUi9sT0owU3h0em13QmtUako0aS8yU0FLUjRLT3Z4aUpkUVRRNzR5ODh3ZFNhWDlaSk1zL3VuSnc2SHg5SlVKNzllNVZ2TS9EeS82Vkh0a2FKaXU5djVweUpCLzFMZ1VKbit1Y241WTVXN21wQ3RneFRXNzBGWWQ4NHdJSTREYUdOZXRiQ1dlOFF1dWFDcit4bXliek13bVBmaHVJL2hpb1RiQUNULzBkUktuSkhIMzJGVjUvellsNVpOd1o3bnlCTGp6dWQvcTlHVkUrbWtkdXovajhiWGdXdjlBL2tuTHZPaS9UQlRjUE9RYUEzNER0dkJhbDY5RXZrVmRaWGw3a2Jac2Rlbjd6YVQ4ZEM2UE9PWkdDamRnWkVhZWNoM2ZDeEFFU3RnSXpuS0tOTmlwOFZGYVFsdE00N0RIaC9PK2RPYVdrK21ZOGo1WGZvWFA5bkxldCtIVnNsRE90dGRhc001MVFEN2hldkRJTU5UWU1uaC83RjZrbGpEeW96d2dLajl3OFNvSVlyRkFVS2VnRE9EcXFndUllc1lIVWN0S2NKOXlyeEQrbFF1bWJHdER1OUZmSmQzenhydGJIaVJmUnNtdGZidytjcHg4aXZQM2JUekt0Q3o1NzJ6KzM5d09aMjJGaG5EcStQeWsyZEdWeHlnYm05WGxrbnZNeExGOUVmWW1SVDNIa29Zc055VWtPZHk1RlphUjF4d3BDZXkvODIwR2p5UENhRHBoV0pGM0FxVmF5czJzQXFUam1zKzBqbjFQdnZ6c2pmODQ4UTlVVnViclJTMkVocWpTdE9Id0FyczNKWHY1OUpwVGhlT0NlM2xQVytVWHlUdTdIS2UzRWdHakQ1bllwME14QW9zdEFlbjZtcXNRZGptWDJxbVJmdEJVWVpFTlFCS2dmeDlBNXlsQS8vQlhWTzRteWhxdnFzSVhtRmpteC9kUDQyL09pSkppTXUxUVhQWDg2UlA5MGtuaFhibHpkNExobUw3T1doNGRyN0NvTDJ2TlVrWUFEUjFrNGFlelcvYnJOdld2L0FFNmxsMG5mSGJ3ZVFLTnBLMXpzNmpURFg2VUlDcmVSRktRdkxRenNjZ3pQWThnLzRvcVY3akFLTituOUpsT3BhM0NtSFZYeFF4SVpucDNWK1poRERWWUtxM2tTNzNxTDBha3EyZ3V1UkFoWHJhTUgrd0ZaNVovRjNmamxuMEJSbFBxTmpjMEhSblpXbnptd1R2bmZJOTg0K3F2STFQd1RCYU45WlVoZlRpd0hjOEZQRU1uSmlkUTBaQnhSTEhzRTNGejVjZnRxeGhCRDBlN1pEZjdRVElBQjdRMzRmMnRxSUliNFZ1ZFpNZnJ0eVNMZ0ErUkdudG5DUE9zQ01zZTZHRWU3SG14TEZ1cit4V09vWEUvc212TTRaSFBqT2NlbDVHcnRRSFhDNE4waXJraEFNbDV6NjFwdFMyazJITEUveWE4ZTg2MFhFcUxFREhxb0RhRG9ZdzEvYkhSbmsvNklwL1ZVV21McWwwejFheW1LU1pVSWQvMG5tMTlYVW5PbkU3dDNqd0tScFF4UXpvZ0Q4elZLSkl5MXhRNERsdStUdTJRQjVzMitZZDRWaWs5dk5OQU54bHBMMDFLNGU4WUNvZHZCREpXWndpQ0lEY3FGNE15NHUwYzlmK0MwYXhwODZ4WmQva3NmeGxlallCWnltMXIrZkdKWllBbERkSVhJM0R0V3UzYnphTlpzNTNSajBCeHAwOFVIQnNsdlFveWgyS1VRdXFNbktrK1dqZGhpOGphd0FxZXVJQTdPQ3FFdFBOYWp1YmpqMU5SalUrSE5NZGQ2bzRyNHZZTEZHdFU2bG5pK3dEbzQvQ0dsVFhtRXJTbmxrMFVWWk9ocDNUczJnVGdZVEJuSk0veFZjV3hRckt3Syt5V3NtWU5FZjVIQSs1Q3NGWUV5MXhmZlN1UmpMeE1ld042V25kNDd1NkhGR1dLajRhZVZhVlQrSGhMOEh3b3Z3MXlNY0RkejVOelYzb0RWb3F1VkVrOU9HaWhWdFM3R2ZlbThkZDVxRmhXYkdJZ0NzSmJoaW1MeC9GQ0ZYVWIrMm1jQnMxaG5NWWMwbmxWbWRtVFJZa292R3Q5Q3VKM0NXMzNTUmMxckliZFRRRjUzT0RKZGxwQU1KM3hKWWFJZUpqWW55clJQYUhpaGFiL2xxUjlHYllScVpCVUJlSGFnTEdWM1FXR1Q4TXdMY2hyZWJqODNrclgwUldlT0dEYnBIT0NnMmkwZjR5dVEvc25hYkhuci9FSk9DUGF6M0JMOEFxVnpVYVNGSGd0TU04VFVmcm1zZ2QydzA4aFFES3czeXlFMktsY2JqczkwR2V0b3lhTkJCak1ZR01XWTZQRUxWNTI5eUFkQmVqTEJjZ1RRTC9SZmdvSVh2QitZL3k2bER5Zy9oWWYrSFFEL1lzak5aS2twT3VEcFIvWUY3MHBYenNGU0lpQkg1QjdpdFZKOEMxT3hSUDhWNmh1NkZpNERPNGx6U2p5QUpRVFNzS1dPSkxoYzVib3c5a3FLRU5XM1BwQU96R2oxQytBanRLUmRTai95ZDNZdW5kT3FZOERPeWhkdGIyWFZQMUQ5U0R4dDNIa0pqRUZyRnJLeFIySU5melc2TjY0UkV5SEl6S2Jrd0RBSHJrUjhIeXRlV1NCS05odTRtbWdyeldYVE1JSWZ4TmZjREl1ajU2cmdnSE01V01aaUNobGc3WHU3RG53T3FUb3FMT3FiWm1FOGxwa0JNc3htNlA1eG9UeWhiRHp0eVR5N1pYT0RsbTRiQkhkUmhQYWZ4dVRLU3BycG9RS0FLMFFScjBvZ0lPdDdkZU13K0ppT2lheE1wbTk3MjVOdExQYzBsSzFKYkxPcmNCT1FBZEtrdUNMbGJlZDBOUXpPUE1ET1Bra1Jhb3FTYU1GUG5jSXBMa3hiQUQ3Ky9DR3J3KzNpTWM1T1MrcGlPUzZqam5ydVNkRHFxNTNXWVF2dE1ZUEh6NFg1QitFM1poVzl1N0hDdzMwb3NzZkhSekNYYkxKUzZJSzVCaXFMVjE0UkRVckdKVEsrVGV0azFrcDdCcWoybXdXNk5QUlJQL2V2cElRMFgwUUZaNzB6akU4VXVoclFNUmtSdllVRUdIZ1FlZ2VnYlFsRFNxUWxyR1Jqclk0cEJqRTFzZDBmSk1zczBBYkhFb1ovckNOU3Vldm9WMWFoU1RJcUdwS0d1YlMvM0N4RXVQTUhYelVBY2s2K2ZTUXVlZkUrdGh0OWpnQ2pxc0JTVmRlQ0pOMmdJVnEwOXZjOEthWitDSWVkMkx0WXMwN2d2TytVOFgvSlIwNU4rTUFvYk5tTHZBOStwcnZ6RVZtSmhUQTRhYW1rSGRYYTIzT3loQmVZeXFrc21ZK1NjUms3Q1hjVFg3bS9leXZZZlZrNHErVVVKT1gvZ1ppWEwrbittOW5jdzFPY21WVEVuUEhMTDUvOG9CeHlvd2Nod0NRdGE4dllwVk1YWkVtcGRiTmZSYUd4ckFjMGZwK0RyUGlNTVFhU0JTUGZJL1JDeFh2aXkzdE84MG9xOFBNbjVWMk1ob3ppTmhsdHZjZ1ZHb09qaGtXd05LczV1bXAyaUFhTjM2RUh0bVJIdVVPZUIxd24rekx5c0tEeDNEZTdYMHlINHdqaHJzRkFFSXAxZHY5TzJScnhDZHllSktpRGlhZDE3ZEsyMWFKdFJFRktVQktDSjFHQk02RjdWWHFIZ3hiTFJLR1RuRDlTWk1HRkI2OWxJVnJWdjdQT2lZd2NpRUk1WXQ3blNWMHBxTkFVR3RCYUdLb2JiYUtMYlJZWDQ1c3hHRlNRY2NIbDZibGV6MXFUSGhBaklyUjRiMjd2dTM0ZHRTcTZSRzNLL2xyRlJnOHhJMGM5d3c0Vk1uZjI0UVRoeFpDU2VkWkR4NzlXcXY4SnVLQ3lWNDlCb0Q5YU9pSktCWmFHTWdFQTFFUm16QlBOdUZsZGZjRkRKNitib0VaQ2JkWGhGNWxQWVZwOHltOThzZ1NleTBFbjRraXRZelZibXBndVVlRWo2VVd2U2ZkdDBLWXlyV0NucWcvVEI0aEV2LzluOElLRk9Ibm5CQnJLdEo2bUVnYWdDWWVpT0I4eGk1czI2VEl3YnU5dVRwQ1BmNXVqYTRKRllaUGdJODJUeTVkcWxiakZxR0FlSjd3VFVWbTRpTkF1ZWVzRFh3WCtiUlR1UmxSV2ZJY2grVGNhWEdkK1RtblJuZklQUEMxUzNhRVQyenVTUXlHY2Z5Q29PRlJCcVhJRHhBdnJxcVJUbWQ4MitTRFFBcWIzTGlISVEvdWVjV3BTTjczVWRGYkhkVjNqakQ2N2VXc2pjQW9xNzBIeDBsSmFFMFVRNitSQ3hTOHFQUkZReWszbWgrWUFEdG5tK3NBSW4ydnJ5SkZWenpYOEJyRVlLUHp5SElYSHlGZlcwUUdPUGJiVWJEMEFGYTIvSURTYlBvR2EzY3p4czdQeEN5STBWU3lwdFdQcTlFWXJwTmhxbWQxWXJtSVBFR1BXZnByd0hXSUFFRWtNVTljY1hhZkJ5SENRQjNDNkRrTVh6bTNJZFE0SVNrK3NLVzNLbktSV3E2UFNoY210UWxUTVh5TmRFQ0duTlNTWktYcXZwa1lKb2dQZDl3NVZVcVdsb0g5YXM2bG0xZDhBSlYwaWtacHlFK2ZFaTFsOUwrWjM3R0R3YkxMY0lGMnlvZ29aU2Y3Y2EyUTRSekdhTXlOZlQ2Sm5lSGNKcWFGVFpKeHMxdUludGVsSEwrOG1VY0hCZ0NUek5pWFZ4eDRWRWdvdC9mZmNwR25WdzVCWFpvc1RDOHFweDB3UEh2S0RVWnRGbU9OM294cEhHOUhTbTVXdWFudWxveExLVGVKTm9mZDdnM0hlb0VTZEZINWtDdWszWS9PYm1tYW5kdjZYUGFGeGUvSEJtUXdSbkZqL0gvbnU0SVJvRk91TjltMWQ0alVhcWVpWXpYdVgvZXlRWnl1Vm9yd0ptSUVzcitXN083VVdhcUJCYUd3dU81ZFRXQ2N6NEtzcDk4dEQ5NzVFbS9BOUdDNXRWYWl4UHBGTmNLMWVKdEk3RzVkby96U1A1TCt0aFRuN1ZTMjFxd2lSK3Ird2d4UzVnVWpnbi9jL0hXRURaQVI0Sm42ZXhDaHlySUxIcTBHVStiOTBZSHBUOFBmclMwMTJPMVJwU3JqTHNBVTN6Y0VWeFhwWTJNLzJwTmYrOUhWckZTMnNFdkxrNlIyMFJhR0VXMzE4REtLNmtIdlFzcjJwV1B4eXFhbUNxUkdTcVVJSlpRSUtxSFhtT3pNdHdLL3FicmliRjIrcTZWZzZOaGhGTDMrSmt6aDFITFhmWWlraW5qM0pwUURRWnVncGIyREl4OFRRYXlGZWxQT2VOcDhyajREUU5ISmxkUEhmQVhGRDRNeE0yOVlPT1F1L3hhRFR4ZnRnYXQwSkpCMUpDcmJXblBCeWhvcFVoTW5SYmRpU0orcVRSVGVsY3E2MEpaQTVaUFFybHdBcGZKbCtCbFdPNHZiR2xwSzRQOFRXVzV1TkFNVjVTM0c5K3gwWWNMNXpvNU9rNG1NYXpCWjFVc1U5bFkyMVZ3Q2dDQlNjOVk1SnEvV0gyZnZvTTJuNW5mTExmcHFIb3ZLL3dTWlAyaEpNdktuOXdhU0xVaHp5cVR4K3lUNmlMeDVGUFlmVlBLeFM0S3g3T090L2lxYW1vTGpHS3QzWGcxbDNrYVRqR0lCV0xlVHdFZzkzbDJiWFlmbUwyYlFNNnVPY0ViU29XUGZqMHpyZktwN2dHRzVWdXZ5MS93Q1U5WG04ME4vZmVMcTFIbmNTWGY3Y3N6UTlXanFUL1haKzNscllYYXg3TlVERnNlNHMwYk5rK0ROZWoxcUtDNVB4YURKYVdzdU1TR2crSnkzSCtsbjFCNC9SQXJyazROMzBmVnhKY1QrWDdISWd5QlZtTWdsaTlHOG0yN01nMnE5NFo2Wjh2TWxwMFEvcjBJVXAxRkNxVFA1M2dkOGx1SHUwZTduRWJqck1HR0Y3c3JYZUxNUmNlRjRqVGdJai9OSFZ4aGZocFM0V0NGZjFhZGc1WXZ2ZWttTXlwc0xPUld1UktXNU9VMVRYUWJjZVFvN1MxeGZZV2NLa2J3b1ZtZ3Z5L2dEN1JoUktDUEpZU29DVkpSZzVFTUl5ZXFDb0xhQzd2RStSNE1teHVXUSszaTB2MlBQaWJ5K0RMdld5aktJL3lZM25GRjFpVHBCVCtNazVvd1U1MVdBcERXZEl4MVN4T0twTTcyd1VhZWwyd1VHUExYZkQ5SWtLZGhvMDNwL1NVVllRY3FhamF6TUFpZWxEMVlTcGtOQWNheFN5ai92bU1PS2t2ZUxKQldEZUxDNFllNStYNUZRRVRLTzM3TWZuZ0d5em85ZE5aY2VaVElpOElmOHBrSjJ1SWxBTWdJYTVieGorT2JwL0RHcVB4b1doZzdKOERuSmI5M09oTjZsVm5xbHAvbEtiMEpqVWE1U2xIRmFQd0pqUXhLRTd6SXJZSWlqZ1loY0N5ZXJDRW1ORk16SmZQRnpDa3FWR1k3SkdzbzdnV1JlOTk5TGpDTFF0Wnhyd0F6SXVqOTNoTkJKeStKNDNrNW1rdnJ1MnVrL3Fpd1BMbm0zQWZBaXBpMUV4K25HQXFIS3JNWmYrWG9XenVSTjF6NzRSSFB1dDNnSDNFVkpnVGNUOE9OQUU3REZWcTd1eWN4dHl2Sk1Sc2RwWG5CcVQzYnlRZUpKSmQydTljM1BueThBekJOUWlCZGVsNlBXc0VMVWNGUElsS0k1ZmV5eHQ2VEdBUGZXVDBCZWZZMHA0cXdPZ0lzNkh2d1dyOUJqUFdDUnU4REtWcnNtNkp4MDhrQy9qY3pGcmhXQmVOWHMxVFNiVWxVU2J0WW5KSStmSzF3T0FtRW1IZEFOWVkxL2ZSM1dDSjh3cHFUdkdaMytuTUI3azB1bDlwODBnL1BwL1kyQ2VBNHk4OEhGeE54NmFNYlRRNmdQWmNrWUZSMWZlaVhhZGhMMFBUbzV5NG4vYmxGWlhPRW1OakZIdzlBV2JVaDdkc3c3WEJyNnlhbmg2Y1BGaVFUSnVCVTYxejlLV0FoVnpNYjhsYVlqRXA4eHgra2RTaVlTL2ZYc2E3N0l2ZWJRWTRPNW44UDl0cklyT3MxVzRXc2xoeGd3S0hLckJKNlM3V3pzb0VvRFhOVkR3azRWVW1GNkpXMjNxYjNyTnVpTVhqNVVITlJ4RWc0NFpjUElUTW45QmRhNTh5MnBoYWE1U2M4enBQd3M0WGtSZ0xRL2tRcDR6TnU2VmdITmtMTWpubjBEL1gvanVxZTlNMER5dUxXNVNLd2hBaGZkMWFFNnNUcDJydWJOT203akdsSC94dFFldnJrRDNqRWhiU01SS3FtMUxsNnVkbklJUHZoalFHRXpRRElFRVJiR210czhQWDV6SDcyN1dueVMyOStXYy8ydnloTGZBZVJrMzFLb2hEMTJHSU1XNmd4NnN3VHJ4TVZuMUNDaWI3WEVHdmpWUTRGRC9Eb1YzSlhFekNLeW83M2NLWEs3WlRJOHlXais5QmlFQitIL3dZekdUQmxNK2Z2ZDI3VTlpZ3l1ODZ1WmlNcWFwZTc2THNLZnhmb2F1aXFCU04xTXg1WlZ1WDMwYUZUTFhCRTN4T05sVk1GUFgrL0FlbWlKaUxkOUVrM1E5c3ZMUkQvV0pOMEJxOUJaMVFSTlM0aktyemQ0b0taaHJ2WTliM2IyajlFMmF2Q3pGUFRuU0tDN0pKeVFoc1hydEVSRWkrTjBmUkFNNUVDMUZMc2p0VmhyQzd1SGt3WWFjRGFXNWRPSTVwNzR5eTMxTm44L2Q5amFWVUY3OThVS1p3NGcreGVwazBMeGFPS2lMYXo1R21IRU1BQjVkb3JHQUdJMmdMS3REV0ZHbEVyUzdQTkVnMERTcldUT2JGSXYzdEd3aFVCQlg1cmZZd0tZa3pFWUtScGh1NXZSOVRzVXg0a1RmL3p4dEtzR2M2OEIvUUJha1dSZFlKN0FXckhjSU9nMVJ0WkYraGdtRE5wYnpPVzVHK2djZlRneFdEbGkxZWtzblVmV3R3OUh1TTFodm1ObGIxSGtrN3FncFFWdHVWcGxhYWNabDZmQm9nZDB6SHRNZW5vRSt6WDlQN2k0Q0hrdDBiT1VSSFZ0anI1T3ZEUDhSU1BEZlpEZkRvQzdXbUc1dWtqdy9RYURFaUJYZFJ3Vit1NkJQOWdnNUt0b0RDTThnbXhxeC8xb1J2YitmZ2I5d1liVTRKOGt4cWlZQlY3NmdMZ0RXYzFaaG9NQTNkOHdIZ0pTN3hWM3FuS3BTSHhRY3E3Yis0QlpsbUpHWUpRcXRUaVlHbnV0TjlrZUI2WXFoZEhSaFZBUzhiRXdUSE5OUDlCSUVxc1RpaUtJWGlSRDRYczgyV1I1SWN3WlR0czdGKzJPcmJLNW5HdUlOUENGTlZUSGFkK1V6dlJtR2xWN3VPNitCWHIwYlZkSDFLLzJNanN2Vnl5M09qMmtRTmxSNlRHVnd1RExXM3ZDOHAyMno3MmQ1MW1MYVBOcEJsQ0xEU3kxenhXT1RybURBelRCV3JFNHFkeGZoNUQvUXlRZlJKTUpmeTU0UVFrSmlwSUN5NmhEa0llUU1xODcyNXY3UWtvR2xIcGxwMTAxOTdzZmc0NkVVa0dCYzNsMTNIOTd2aURKSHRudUQ5QmlKUUp4dG9XZDRmT1ZoSVpnRkZJWDQ0TUt5d3VHNzVGMjNqU0x4N3VkVVh3QWE4dHczeFFMWnN4b2UyZWM3N3d1VlFSa1cvU041U1Y0aFlwaUdQc1hMZWRCQjl3ZGhidVFCUEJhZC92aXRGd3A5V2lNOU1iQmZ2YkpCRFhYdEpkR2d2TGRQZHAxK1ZFSG1mK0o2THk5Q1JsNFZLdzZjOHF5YkhVZURRWVJnV2R2ZjJkRDQ5MHVTdmM5REZHaWVMYUFDbUhMUmY3aTR4NjlwSzVXZmhVV0Vic2s1U1VmSS9zL01vanE5TVVYVEZSU2M2Z25rVE9TY2tVdnhwR0dZNDNiT1lzcjBjRHlaMUQ0N1pjVUM2dkVXYmp5dkxLcldIZG83c0MzejBPeXdtTjhuRzIraHc2eDJlU01IV2pIZnRneWg1YzJOSUcraGROditBWm93ZHV3MDgrdEJ1TkxJeHFveUtHODk2bURqU0xpVnUrRnlPd3RZMHduU3Z2djAxUWxmR1E4b2QzaXpCQWFXelM0azA5SzZmKzU5NURaMnVCdFFkbnZhVERsY3BSVkMrclZkbkhzN2N0MU9DMGFhVFdmNGgrYmtuTWprTjEraFJ3eitEVWkxVTcyOGVMM2NSQ2NXYnBMMm0wWCtkLzVDTEJTN3hxRVYrbHQvZGhrcTR1VjF2Vll2NEpKbjIyWlJyM3FINzQ4QnFBd2pyRHVWQ1VqMnQwdmpCMlFZN2VEd2ZKaXk5VStUNXQ3aGxpc3NYTVRHZHNoZE5QWTJCOVdJbWlXZUkzVDBFbm1zZWdZVCtTNDIxYnRIM045amw1ZzlGZmduNzVuWUt0cHFXRTZtVTB5ZXBldHc0S01hTFR2TWtrci9lZkRueHFSWnU3UXg2Qmc5c2tKWi9tU1Y5MEVDS1ROc3JxSDlvVVR3UE5Ra3A4TXpTdUhJYklCNWRkTWpBcldDcVZNTTJsN2hkbnlLdjhLZTF0WlJON0ErNGdGNW56TUpDVll5dmp2SXJUNTJZQnEwaUxUZUI1aG0rVEgvUEkzdmcyNHNTUGc1WVVqZFhzNUwrVGROdmRLR1NDZlp1YXVST0daaWV6ajl0RDVCNVArREhGK3lRL1dhTG9KaXRiY0JKRzFBdDg3dzBSQnpEL3ltSVpweVI5ZFphRjFLRWhldjVSMFRUY3B0dkpEYk9GRC9LK1VVU1hUUFhyWEpPVU0zRFR2WU1EOERIdHlKVFhaVW4yRndRd2gzNzV5bDZiOGlXTjlXTWFHVlFiMXhzTlJmWExhTGRPa2JxY1piWHpGTlZsZkV5a3FROHFyYjkyQ2ZQUkI2aTdRYkZhZ1RGVnltcC9CZU1tR3ZnNEhnQXhVNTVlUlN0U0QzdUF1QkNUUDB2V1d5ZGJGb2ROT2NqeVBoVlVxVm4yTTZFU3ViN0xaSVpoU3JNTlJmcjBQWDZHRzFtUUpTK3crM0JqL05QaE5FNC8ybjl4a2JZalJVREdDVXhxbnppYWtsQTYzaVVXSzU5TSsyOWJUL1FOOCt4T0xMeWh3ZEJrOURQSmFxTHd0bmFVUlNpVU1lTW0rUjZ5OTZWN0J6cjBpNEV0cDNHSVMzaURBd3VIdjFNeXpuem1kclYzZ1YrRGhqQnhMMlFrSEc3WjJiWmJIOXpWbm9FTFZEQVdHYlorNmsrZFhsR054eGYvR2ZQOXlYOXZzNDUrZjdRZjUrMnMrZjdJVjlYc2FmbisxeGZKMk54K1QwTi9rN3JZL0oyanZoMjNoL1Y3elA2dmJ4L3l2ZXAvVDZGNzUvdHhmcTl2UytiN3Q4K1R2WC9xNmhMNS9UWDN6OTF2MVVkd2I1L3JjL3E5UjNmbitzbmZKMW5ueWZVQ3ZuK292Zko5WDIrVHFKbjVPNS8wbmFMUHg5T3Z5V2dNZHBZdzFhUUtIaXk1UkxtL0U2NVZvV1A5WXFUck8ycHFqdUNHVFVpMVNkRmF3a3V3Y3hScnZLS2Z1eENCVFFQZlc3WGx5ckRWZmcrdkhRSTlOVWdHbklDZzY1RVhERmJJUDZBNlNLY3pqbjFvT1lZVEJ2WGNWam1UUTM5enJoV3pZR0pBY3cyemRNT1MwQytLWkdhNm90bVlmeFM3YjJneDAyeVk0N0pJeHUyenk1SVdkMWIvSHpRR3l1OVhURXIreDNLZUJMTklqQ2F3bXAramNCQmlWQ3RieEYyZVh4MytlNWlORWtpa21nTmFJb1Y0NVZKcDRCR3JVWGhUcUY3UGlJU1BnajhUOHo2QXhMMFJzbm1ja21RTnV1TW5CcHJoc2Fuc0JtcHhYVlVlRG5jeXBHZWQwY2Jvd2ZkMWVjVHo1eTFOSGJ5Z1FHNE81WmtpWUN4WUZ4OWh1cDdWZUFFMUJ3anhSN1ZxaDZxSE9PaW84aVhZOTI3S3g2TzMrMHFUbVdkUklIVERVdTl5T3NxaGVudWo1ZUJ4VnBHamJVOUhsRE9ldE1wT3VCZjkxcE5yUzBDM3pvdUY1TmNvL3pRSUZ3djBjMWloeGFibVM2alE3cnlIaFVDOFNmaTdpb2dWcW1QNnM0b1d6dG03a3BId0Vkdlo0YVlvb1l4WkVKYlg4dUFYaDhsano1eVdobkt4V1J5eXM4UE8rUzFmNVRQLzhuTU5HZlY2eFE0YzdSQXI5eHU3QWppcEc1NnlCVjcxdGRFRHozWmlYVlRUb0RRbGNSaCtSNVZzaW5HMUdvMk5CdnRTTVpPZFBNZEhrOVlkdGtxd0hNeTlGektTZWwva0t1aGFNQllSa2s0SEx6bzlMVERMSy9zc0J5dmxtMTZRQk9QWUZWcVhIcFJvQWdDR3FrQURtZHNuYmJ1SUpEbDA1d2RYQ3V3WmZNMmVpam5FL1B3cnFqZ0lFT2ZseGovZk5rYnR4ZEN1enJWNXhldzV1dWFsN2h3dmtxZFQ5U21GUmk4ZjZVQmY4aEVOMStmK1hFbkRkTFBkekFHeEN4NEorVytRY1g2dWhIcmtEWVpzcloySGlnRHZvSWRtcXl5clJUV2pEYTkvSFdsZ1oyT0Iycnp6ZFpUNUtnMGVxa0VlM2ZIRmFVa1VQdm1YcDJCSFZXNm9wZzJjWFpRei9jaG9YNzRVYUFNTkJQbGxrazQ0Y01uRWwzRi84ejlQQWVXTGhFSW14bDNJRHRwWWxiRURXcldST29wb0JnajRaU0lqa2JXaHVCbHdUbGlIRVhzVzROOFg0ZHl4cHBpekNvWUJ5Q2UyQ1BNV1pCSmREYUl0SEg3M3VlMldSY3NsakpmZzJQeU1US3FJUXgzMHR2TTZ3U1JkU2habTQ1SUorcTRUQVl0TDQxdXMxNzIxaXBpUzRuc3hNY3hFVHlZdmFyUkFhL3NheDVXUnBUaW9rcE93WTNoQ3lHODBLOUZmVnExenVhWWJzOWVtRXVlRFprZHZqcnlKMVQ0NVN1UHJBOUlGZG4vQms1WGVmQ0xIQS9Vc09ZOVl5N3g1bEFNUGttd2JOYjFsRm1RbzMyQ1ZmZll6RXZFdWl0VTlqTm8rcTRNQjV0RStCOFVMNXpaVUJ3SWJMV3kxMG45d2xzTHp2clh3QXRROFVEV0F0NUNzNW5nY2xxZ0crV3AyR3VrNTRJOEx4TFMzUWxUWUYwMXQ1elZZc29ZUVJ6N093M1IwRUNJZjJEVTdBL3VnWE40KzFUSXdJektySnZZb0JobjhvZk9oeEVmOTBlZ2taM2wxcGNvQWFPQmU4RnE0dlQxa1MvOU9JUnhqSWhjRWpWeGZqRzlGdGpKQmNDUEw3TXhBTitQN0RCd3l5QnZ0MmN3Tkx5YS9uZzQ2SmVSOFhIWE1EUUdENWJHWE9GWkhBTnBVdXpQcGtia2tpd1ZrUEtBcmluL0k3VWg2M2xxZmE5U21VY256SFVtZ1p1ZW11eUZHMTFaUFNHcDJIMDhrdHJ3RldCTmo5UENONWI1alAvZmFTSCtHYzNXOVNVY1R2WDBlcXp6Ym10RUNEWmVPTjRpZXVtUS9uSTcreHdpa0hwZ3FLWW5BeU0vZ3o2YzlPT1B1RDIrNGk5SmVIdTdWWTlBcU9hSjlCMVlOVXZrZCtHWkNLS2I0WmN6NE1SYkh2QmJqR0d5YXRUVlRiNjBVNGlEYStDZUlLaXArUGtOa3ExMGc2bGRGbGt1dWR2TVFQMUo1c1JlVlQwK1dqMUVlWEFtVTJMOVZkbytIV25kNy9IQzB1RHZyQjdsSitra1NPcHMzb1pLaVl3T2ZxRVZ3WFFmTWVYWlVFZ0pGMWhLQXZmRkZMSEtSYnBlbG1nVnZsNjg4Y0dXYTBmR3RWOHdCUE5MdlJsTG5RZjl3WWZKQ1hTaS90ZmpIODJQY21yRU1FbWRZRUR0c3ZKcGx0cmJXSW9uaVExNXVpMlRzWng0cFUvdnV3bFliUm5sTUdlM0hHYTdsVlk0UnIzTlo1cm5YaDdIWC8wc0VWb25CbFl4ejlQNlBuZzdIdVR4TnR4dkUzM1ZaRHRPN1JnaEQyWHIrNUdSSDBZL3FoOXhEZ2V2d2hPU2tSZmQvNjI1NTN1YXB1RDIyaFdZUVdyOGZQbWloMWFWc0ZVTUZ4aU9idHhRbytnT3UvejdHcy82VlRHdW9VVGhkQ09HVVhIUmF3M1BPMGhnd3RUUitGSWVTSmNXbFVvSXN2MUtFb25JZE5nMUk0WGtxNUQ2TFRBeTkwamtrZ0NUUldMMVRzSVFjV2lJSEhJTS9oSFlqV2k3VnR1Q3ozV0xuV0ZaTFJrUSt0WUZqOXhsUmFlaEZmSCtxN1F0aDQ3UjkyT2hoNWprRCs3cXVQejN2Z2g1SHozUkZpeXMvbllDZ3FuUjlNTS9UUjROWkFCby9sb2pYL1pEa2svL0l4SFBab0ZLVnJ1OXc3cWJLL1kxWFVnT0FvOFAxV1hDbHN1c0FXQUxLQ3oxVUlFSlZjNk4vd1doZDRIeWl5VjJXc1lMejdjU0ZMTHFGUnBXVEtvdXg3QjAvbGI0ZHRpSGtaV29sck01ZHBDa1JrL2Z4Nk9xd29LanVzTmIrQWcraTJmVlprY3pHWGhGMGdLUStqaGwyaTVvcXNnVkJwUzBDUlkrTTFDQkZwTE0zWWFlbmkzMlZCNDJwUlp6TWI4VEljM0ZzRHRDNU4vSDRsSW5DSWZqanpDcnJCYkRzTzM0SzE5M1lFNGhlMG5RWXUxaVZic25tSllZSXYyWHo3WW1IeGNybVRpblF3OHFuQXcvYkxhNEpqL0poRjU3RDhsOG9oeTdVSWNWR0wwa1RYSDNxVXNiTDRiRE5uQTJxZmlmVVI1UkZVaTR4SzNLeUVUMENHK2gxN1JKMEFwY0dXUFFDSWVaQm1Yd09ncm1rRXFPRks3OUFhWGM1RzZEakhLZXVPSXRvbkZiOWFGSkVhcXVxQXJlNk5xK3IzMFAwQWNkSTJNL1pkZUVJMS9ZcHgxQ1dlQ2dudEZjb2o0WlFnUFZpY3ZwYTFaSHNoY3habzExQ1JONXZvVzNLaUN1UnBHNFkzMGU4QzdPbGVNNGVsWlliTG14dk55R1Z1UDgybGFQQVdmeXdaVDQ4OS9ETjBzYVVpQ3ZNNENvUGsyZVp5Vkx2eWhRMk9yK2lVOHhsYlNuZzB5eW13cjJnWmp2MXZNWW1rSkliRGFQNFcxbzZYd3MyeTVaOU1HV3JyaHBrZW5EWTdHTkE0ZHcxNUE1bjZFMUV6YTJ0b0d0eW5CQWRaaEpZRVpkRnhwTk9ZaUlsUUtJSmZVcGZVTFNaU2pWaEcyZGVOYjJveDhlTVRZSlRqaVFUbEhvdUQxYUoxWHVtWkZmekNrdGlrbzBHM1YxMk5HMURFQis2S1VyQXhSRkwxbTB6bXpHMTlvcUZxSzBNTkhqY3RiZW5WOHBsTlB4QVlzZ3JpOVF6amY3WUprS1NRQW1YMDhoTlBRZGVSUEM5d2l0aFo0aDMwSEFTOStqdFF1M0g0N0tZdkNwNWJTc3pNTDdOY3VSNXdDMk5PaTEvOFpNS3B1NDRvVGJmbWx5dVBJU2tzMzY1N3gvWEZacUVuYWM1NFRqNC9jMHZQZWxaYllWNnl1WWIxRE1IODEwS1BCQXo2ZHJkNTZJaUpxRDdZVXJqMFhiLzFxbU8wNDFyRUVrYzBwYkZFc0pwa09PNXZ4a3FuR1V4K3BDOWpCQkZ6NXZTdzV5c3ZUc2MwckpyUzUvanVDc0NrV3Q1TTBWNUtqdjlhdDErTDliWVcxVzE5b2hCQm9HdVh3UkdtaERKS2pyRVhBRmpXb3VzZ3l5M21vUE9YdUlXTDViWGV4eGgzSC9acktCa2JheGJ5eUY4ZEhwSStUNDk5UG5zcWxqell2cnhpV2kzbUpnaEhYcDdndjRMeU8xZ0VNNGh5Zy9tMHBzQjJmcjd4aVV5TkhxcEQwTnQ1WnpROW5qWFVFL09YV2pHTzN6WFFoK09yN2N6RDlnUk16bkw0UVNta1RPd3ZzbzM0T3NXbmJsMGdsdXNoVVQyWUdxUjUvU0FxSnhLSDdYUHlDUytBMUdWMEJsUlpzc0tXUEtDT3k4MllIMmVVSnhZV2FVOU15ZTdHeExuYjJGbnJzQ01hOGNRRjV3SG91cU90QW16S29ZNjdaYU1aNFoxNGViQnRXMDcvWWdaVkdYekgzSEVGcndyenJFbUlHdzNoYjNUSU1FZFVYdkdqdmVSV0pnY3lNNzFKbTgxLzZlOVNKdmRMenpWWDd2ek1ubzFweUc2Y2dkcmJtNTFJbVRMV2ZxZFFacVg1cnJPdWhDdXd2MUFOcUNmV213MUcxY251dytGVVNnUkg3aDZYOFpWalVlNXA5QkVsejYzb2RUWmtTeld2WHFrUWxIemh5bzJFUklKaGhxa0lvWnNTSlpPa3kwNXgvRWdhUlVkVlRUblJMVzVqcllqdlpyaC9BTS93dGV4YnUwc0k0MXZycFZIRjRGa25UZ2xoM1lNVHJDTGFhNWdUQ05CdE12ZTJSUUFEMktIQXBMOUVFZXJOWFpSd1ROYmdkaG9abFhQYU5qdDJvZjJRNnUzVlpaUjZnWG90WjFwUWdKNHE2UlNGMm0zSFoveTd0M0xZSk96YzZhaFBBVWFYdmRwVnlNeGthS2hIU2lXZHRLU1R0N1VTNTJuT3lGTmN3Wmp3Skg1Ty9DTVdQVEF1dmdJeFVST1FGcTQ0cjFUbWttYlgwNkNvWVdUSUdVdXBNS2pKYTBxa3pkdkZ3K2xIdXJZeHl1bDNadTFMbWQ0SFpmem1xMWJUMm1Ld1FibGQ4azFRMzhsc2prUUtSOEFudDBLRlgyeXB3U1BoaU5CZTFMV1htcXlubFNYb0xiY05sUGF4UTd5TUwzM0g2UUd5M0Nkb0FTRkErSEZjMysveG1OdzRvcWE3OTc1L05sSndvT0tsNDFFWm9qSFN0UmdIMTVWaGNMTVZ6aGJKVmt1K2pDa2hKZHY0WWFWdmtzdnIwRENoMHZ2ZGRZbklLSlN1Yy9IRm05RDU2TWF6QkxYWHdVOWdRb0NLWU1lcVFkRXl6RXRIWE5zL29IZ0hrT1Z5ejU5M21vdHlTeklRUjk4a0xiN2FYb09jUnFSZTNRNU1ENkdwRk1TUjV2bGlRUGJzSGc5YlB0Ni9JUHBoOGxzazFCN284UVZHbFZnSFBHOU5LdGpzYUUvWUdCOWtHajB2OUIzb2orTmlmQSsvYVV1OVBZTFUwdkVEbnY0UjJEMi9qWHRaYXRSWWZUczlxZzM1ZDdCRDJCZ0wxVTF6YmNNTFNHVEV0eVlSeU1GT3FmaDlRd2dsTit3SUdjckRVdThWOCsxbVhCcGNxWFVGUmNDL2pzS3crazRuZGgzM3FYd3NXY0ttazZrdGp3MWMzM0VwZmFoR1lqNXNPVlVnQU5PYzh0TjRTRGRxRW1yc0RoWlNJZm5lOXZSRUtRbjBhNnlJL3FHdHJBNEFXQTNQK1J6WDBoaWpSbzJDdmZBRmdrV01xR3g3Y21WRjFmS3FJSHVadkpwOFhCWnhnRGJGNzBMZjl5bjExR3U4aU9iZm1VeE9XSDFscFEzZXNJb2Vld2NnOXdXUVFLaC85QUJQc1luckJhaHQ3QkpjWnFlbkpIMzhsWjZqaysvQmNtKy9wSENESjN5ajV3VTZVQ3IvZWJXYUYwdGFocEkzR0hTZkVSQ2VxNWJSSGN5bTRPL2Q2SGVEYXpMS0dqc3pJZEV5M2YxMXh5bi92cHZxNVdEQjdFZFVMS2F0bUdINTZGaXpaSmczRG9LYTNZUVBHK295NlF5Y2E4RVB4cEEweCt6c01hWU1CQnlsUnNTbnBCMVliMERJclhQblM2TGliaTcrZkg4dDVHWm94T0RiTVdDNmhaTXNVT1pwYTN3VFkwTnora0d4WENaL3ZERUxUVThxUUFlS0h3NlBJL0p4QjRRY25YSGxJNVV5d0w5bTZoNW8yazJDbnJoSFV2cHZiTDFPZG5tL2RVMjRxWndpam1IaUVUOWxwSk9MNGlqNXp2NTNpUDlWbldSM3dJZ0ZnM0hFb2Y4ZitMNDhodkNuS1cxN1drSForNlB1bll3Tkt0d3ZPU0w3cFcySjVGcHZTT2N2MWpLVWNNUE9lV3VhRGVzUWh0WUlwN29LREpOSzIrb3JlaVRwOXZyV3Z6UmxnM3Z0b05JenNRMnZwZUpXU3JZOFFoaUZxbmM4cjh1NDZ1UlIyODdCM2RGV0xxclN5ZWlYaEVHbnZjbTJpbUZKQlhUVjFzMExsbTUwdDYvOFE4S2gveWVtclIzN2RIMDRkZHlMbUpaZk4zNUlNRFhCVjNpMm5sN2JlSnNEVXFrMkNFYXVnemdzYi9RQ3FXNHRTTExqWWdXVWNLczJ3Ulp6ODI2S2RYY3FmYlU1SGQvQyt1SE5tTHdiOWdiUFFPeTJTMFpLcndmQWJWN2xjOUR3SmdzeW90aHhBTUJkdi9XUmJESTA4OG5WbG9rNExtRFUyd1RZdW9lckNMaXBxUlVzTVlyTnpwSFlNYTJ6ZTVOdmtpYk5TamJ5MTVFbXdNd1Fta1BBdjNHbzlLanJibTVJbktFb1JYelJrWElRdENWZ291Wk45RkN1Um5XZ2JVbi9SQTl5SVI5TWZZMXpHdEM2cElsNW5Kd3dadXlkMHJUanZQdWFRWTlFRkZML1ZIM1FCdm9jZmF2RlhuT1IrUXFYanFhS3ZqRmI2ZzBXN0drZzVTcnRvVVFnY0RxVlFFNVk5WDVtcFErZGF5djJyditiOFZLNXE3dGQ3Z2ZndFMwWm1yY0VyeHpvR3ZaWkxwd0NwWHVEVExhYVpub3dSaVBRc0pCTW5ITFVaR0NhK1N2N3BYeFpKY1NlMmU3VjhHMDlnUUdDWDRkek1wSklxblFGcTl6NHRuaGMrTVlpVWdPWE9lSTNIQW9NVkw4YmR1RThrS2dMMzlXa2M1SDhEb1JHdG5MaXl0MmJnd2hWMGJXYU1tMXdWWG90UzJ4dHVUcUg4RWpUbWRlN3pJVmR2RVREbTR1NG9PalFSdDczZks4TVo5WjFKajRZcEUrQ0FaWWgwUFh6Y1dsWTNJNzZkOUlmSDlsT2Zld2FmY2QwVnYwODlJSkhRUHZrYzIwbXFPSE5JOHdCekxOM1R1b2JBY25hdTczQTBpNUtlNEpUMGg4Y21BakphWklGdVVER1R4b2tRZXBjeVR4ZGlzSEFuZjIycVEyWmJwaTdnSUU1SHkzQXVuVEdmd1ZjMm5uT05VNjFLQWdZMnFaT3dKOXY4NXJhT2FQV0tCR29ac1Y0cUlmUFpNNGc2MG9DTkd5ZGp6SVNFUGZ3WE9KUWRNRmQzWGd1R2tIVEwzQk82Y2lDYUZkK0ZVbWhuemZ6QkJRUUQrZ21BamdBb28xMm8rUkVzVnpmYXZ1TjFMWVE2WVBGMFJhS0ZkOWs4VjRPbzNEclVUakIySVNvd1BmS0JjRlNXQ1d5WUFNM1grS1psdC9RSUtZYnpEQk5rMUo0K0ZYSXVYN0lITGQzNUp6VXJqRVdyMFRUWXJtbkY0dkxRQ205TkE1TFJhZThsaFR1ZE0rYjUrS2wxRi9QcmJWVExJOXVFRXBLRUlKc3F1N29oT2dSWWlDY241NWlCTzZLSHg2Sk4wc291dDB0SG9nWEFjT2dMdUNINmVMN1lhMnNrWk01NXhuSDRWc3hmTGFFK3YvM1lya3RNa25pakwxZ21yV1lBOThSMmg1VWNseVFtMklaMFJBODhGVXFZM0hvWHc4ZDRsMzRrdm11YTc5RWl0OXM1V0JwZndsMVdaQjFwaEd5V0g0RW05Mk9xQjdJOUhnY3pSbitvSHJUT0g2Z1BOQ2xET1oyUDlYbUNHdk1hazF6ZWhOcU5meW9lbjFjUUxIWHBLbUsxU3V3QU1Bek9seEE4WWpCUXpqbTVNVmdlTzdKUGs0UFZpNlJpYTlleFpCbkFFOHVXYmdmVlVKdjhDSUdpRWRKQXNqdXZaNWlBMklaYnF4RWI2Tkt0eDRrRVJhaEQwTXEzQ3FmKzJrOXdUSDlkL29BWXlwL1M2USs3RUFJV1laN0paYndKcW5rVHl4NUZQWjNKeGVuQ2tSQWNvZzdJVUJERC9iampFSGMwQjErdXlBTVhTOHZKM1JkWHN1QUlkV2poOHRKR05RSkFpZ3IzRkhkOVJvcGxZejgvMnNyaGZ3bHJldDkwUlRZUjBqUkh0MEFwQlNSQkFpSFppZkh4b0JYa2s3K2lPcDRwbGhGNFB5UUJaSjBQZytQVWF4SUxHV2FGaFVCUUpsWDFHSlp3U01ldG8rVlZKak1ocWJjRjN4d3djRzlVVnhFUXVRZ2xEMnZuOUpWV3pETkc0WURQckZPN2ZFb1BYajVSNHR3UkhnMlh1N0FENklIeFYzeFN1cTlLUXRoM29lNjFvRWJmWG9qOEFEWktJVjRpVHJqSGxrWXZZSW1neitkVGdnSi9UMFdMZEc3SG1ZSmxNZkFvRmExcmwrTExjWGoxQXlRcVBSZ1JmQXRFUkIrUmYybkRlM3k1d0poZXhuMzFqbDk3cWZoMUxVWmErMmVrd014eVFoVHBmWXA0djcyS29vUjcwVFBQbUE3R1lVcGlPU0t4RUdrWFRRZTlUS1dOU1IvT2g3MFhFQWZCTkRBVlBXQmFXL1BMK01SUVhqd1VpWUhMcWUyMFVlVUtqNzlFdklnaktPUEdreHdnREF6dUZHN1dvMWl5S3VOMnNSUkxjSGRpeEoyVFMxN0ZzMWZzMGdyeEo0NFpVOEkyNHJZWWpUVWRCU0lxTzVHQmZXSWJLcmhFZm9YamtJc3VtdkF3YlNkL0FlRHFnZVlRd2NBUHIzb2pjVHU3eFBEQnZHa0RXQXRZcEYxOU9GQjZpOHBaWEw3d002cHJocTBhNDFTQ2NxcktmVUFrN0N5S1hOS0hrUzAyVnV6R0ZuQ3Jyb1RhUloySFJxODY3NzF0clNWdkQ2V1M0SU5UL2w1SFJoZUhvck0wV2FSaHFrUmRZb09pd2FMb1JGMWhseVV4VitKcjNWVVZoVGRyb0p1MjJNZzEyR2xlV0paL3UyM0FvUndxdkZvSWlaNTJXRjZFZ0hrdFYxR3F3bUxJS2FOYms2TXdXMGpMeitQaGFrU2N4bEdTRmJjVWdWL3czRE5lU1RsWmJtS0ZIK3k2b0MxY1pOU3M1d2RFUk8wQ1JhK3FORU5obEJaZ0dUZUVoTDZoRW03ejYzU20rNDZJOGFNMHQrdmxOQ1paa3hEdTVnL3hjRXBYWUVHWU5MR2ZLekdmbDNkVTA5dlJCMUtEOG5jcGZmUFZGNkxseDFKaXpDUWs3azRvOXRrUStRY2F2Y2xjOEpGVGVYdGwxRFhMbU4vMXMxOVhsRUlhcGtMVFYvNmNmbzBEc3JkWFZUQVMzdnZpamxyNlZ0Um40UmtINnk4UFNKZnQrVmMvZGlkbkJFU0ZSOFpGOFJBL1RhQ2JudURKM1dwWnZYVm1qZy9IMEdDakpJT0trdjR6WHk0OXRrTDRYK1FhcG5iSGFMRnExck9iTDR6czZpTGwxbnhqRVRaaFBWM1VHNWx6b3BlanBWWXBiNmsxNFA5OUFNSjk1MitlUjN2YjcxSFpLcWJaVUtDVEg2WHFvbU1YOExIUTltVDRMU3gxY3lSVzZESXkycWJxd2ZJeEJXM3dxOUUyTVpIa3QweTFiSzhKOVlOY01wd25NNlcyQWppZm14S0JIY2FkUkI5cGd4SmY5bTR3ZjkxZ3NrSVY5dGFlM2R4Rml4RHFpelNid3BsS3NOMXhUQlR4SE41MEJvNVdTZnBCZDlxaXZpQlVWM0svODlSeEMwNWx2b1BjazZRT2RnRjVaRnFKUGpZNWc1djNPbTZpM1M0ajlCcG9sZHhqU0trbXYzWWN2MGwzN0R5QzBMRnFqOHZJcnVGWG9TM2NQOVJTRUJGelFiUXpsVXZNQlBhUUlSZndYUUx2NHBpQ1huMlltY1E0b1RQd0Z0WlJ6ZWdIL05tbHFCYi9KTksvYndaRFc5QVBXUG1lVTJMVWpwS2FuaU5GSGhyNU05d2dkTUx1T0YvU2FsOVBVUG1jRXV6Y0VtMG13Nm0vTENFb3pVdWxFUlhKOExyNVM4VWxabDExZ0tYaEFhTjRsbkdMTldROCthdTZzWFE5NUN1S3VDd0FDRnVSUGQ2djZyMHZUMXNjSEdqaWxraXEzR0JpYzJyajF5QWNWRTZCZmdQQmZBVFpXWEI4Njc1U3RFR2dhd1ZqOVk4dWdGL0JWSEJ6NHAxSjJlYWNtUWNBVXFNMHhCc2tDMW5RdGphbHN1S21PZXN2TVpCNkNFbHExeWNkMExydUJSQ2tGRk43ek5EWlE1dEhDTFFOdXp6NDZBaVlyOFhoWXltTXVYSnhYMndteTlaMTViL2h5VWRzNGZLcGo3SVdXckhUTFNSa1VHZnF1ZjYxdVpucHhtWUtxOURiUU9DeUpmd2xUaXlqYW5uYXRyUlVVeCtKdVNsU09qVW9KQzRYRDJkRkVOamZLc003ZmJSSzFhcVBWN1ZYQlVRNzQ3a1RNMlRhNEpUK2ZoemNmWGJnUmVSNVh2MERvWmVIOFZ3WmE5U05COTN5anJRa1hxUVJjZ0xjVW53Ui9WY3lSajlvQXlOWmxlU3lwMGZxaUFyWStsYUdjL3NQTW5qZ25QMHdPd1FHVUZieXNubEEzeFdDRzhLQ3BydHFTQ0ZWL2dNRTF1UlV3MiswQ1NMUlZpZXd1YVhlaEJKNVN6bm82bVhhMXgzV2tmaWQ1eVdOYlJNaXFXc3pnUEo4TWttUGwrbjJ6Tm1qbnFPSStqVGZkNEpFV3gwajFsc0NLVWdnMXgvUDZkdWxtcm8vWUVEL1MrUWRwbUVhM2plNXNDanNvdnZDRGEwS2ZxVk4wbjdCQlVQdkFnM0ExMG5tVWRWUW1MdHFPOVBrQVhrdVRyb1NyeTBQUTd0NDgzSmlsSGRGNUVHNFMyZndURzRPcVFVMjQyblhUUkYraXJSMGJIN09WbUxWdE9BQ2JQcWxwNVhRY3VhSUZqeTdqNnp5T0w1VDNvRXpWQzR4YWhHMG1JWnFLZFcvU0J0N0o2aXdhVDNWV3FpNnJIQkJhZEc3ZUtPVjZNckZpc2xzMUNzbGxsMEViaExQczU3WjhyTno1SS9wVDZkS0tkWmdkUFgwMk81cEpUM0V4SVh5SzVBZUFDZCt4RjlVb0pyL0ozNTNPZCtnNmtiR2dCNzNPV3J3eFloNWhJRzl5cjlPS2s2Qzg3YVhPZVhaQ0w3ZzlEMHVrN2l3YzBDejNOK25YcEsxb2R5TVBBd3lEWW5ka1c5T2tsei9iTjhHaHNNVWxiUmZITTVIelVYKzZaVnJ6cHJvcW42a2JuVVFMK3Bwd2dTTE9iSEk4V2NkcTlrVncvOHV4eTBMYnZER2pnUUNzT3JoNWhjUE13dGt2aGhSa053NHk2MHBZbXErYyt5U0UzdXZRT2l1T0Vxak8weXJEeDBXQ1JwMDl6RnNQcTRuQVFnT21vR24zTkV1ZUx3cFluTWxyNlZZRzRZYzhsTkg0RjdTMkxYNW9vSm1tdmFaS1BBRVNjUS9PSHliNGV2cUF0ZzJDL25jWDJxaVg0aWVyYWFlaDFiSUc1RkhTbUltekcxOE5NYkp3bmp0ZzRSVHFEcXdSR2EvZHAwNW5Ld2JXVE1URnRHSEpNNlNPb1VHZ0dnSEhuQjdSS3VCc3dsNnFDMVh2U0l3OEpmdU9QMm50Z0JpNWU3NmRaczR1WDZrbjljUlR3WkJJRE9jRTE1VWRRTVZUc3hKZ2twT0V5M3pZVThsQTJPSi9uMW4xWHZxbkdpSWtSMnhCczErd2FtNUhod2tpZGkwZUp3Uk9aSWpscmpsQW03M0VPd2RYN09Gem1WeGMva0M1KzVzWnpraERrd24remJxVGx0ZHJEWXViM2hqRVZmdlBJcVE1NDJET2ZycUNCMUFYUFZyR0FQVTdscTd3MmU1Q3NqczVLbVhSMXlsaXpVRHFudzZ0ZkpFVHpYSFFBTVUydUhqUWJ5U1B6WFhYRWFmOUE5NlAyNDBuUHNKSmJ1cWtqalEzSjhvbTh1TmFUcndCS2ZHaXY5UGNacnRWbGV5MXAyTW5Gc3ZseERyTFlabWRYcVJRWDVqVjhKTEQ1MDBYNjZkL2lMNU1wOG1VOVp1K0FaTExCS2Y0WVZsYVhsY2tWKzVTcVhwd2NXSml5cnRtcTlqdDd4YWZjSnkxd3lDTDJOSnNUdFFqWWdJaVllRmFqVEJqdlhCWWI5UEhhVEFqVWhUcWxzUmZjSldHKzBrMi9SY0hSZmVhL1dvNTRWbVA2UDVxWnUxZGdQSE9XM3YzODZtd2JOQ09EWGF1LzFZOUQyR0R5WkdMa0V5ZDdJa2FuUzY4aThXbU9pek5xKzVyZnNvNWduV0prV2dWSHBIdm5qeEhtb2tpb0Nsa0xERGRkRFV6cXZCcncyVkl6MVJjZVNzT3N1V3FzRVB5c0RQTnlLTHM2STB5bXgrT05wblM5UW1ybUZTOURySkNjZXlGcmFZTDJ0MlREa3lsbHVXUXZyRWZDNkh6UHBCc1ZDTm41N2loRjRuMmNkdFBGSzVqanVqWktHR2s2Z2ZIMmlLSWlFY2dxZUh6NlhDOHI3VTZkUEp3VWFYRTNna2g5YWp4dWltbzhmc2RQZWZ3aXBaRTkzZjVHVnBoN1hqVStSZ1VWbGxZNVREby8wVitBaTRPckx5Vi85T3ducEVEL3VqbWhBM0daRnY1K0R4ODJZVmtpZ240WjFjemtkRXFnUk5QbVAwUDBOYmU0U1VJU3J6WWxCaVBNT2lYK3VoeE1OOE12YVFrZ2hjSTN4ZVM5Wk95NjZuODZJZ2dnZ2xKOHZUeTNiZWMvUXMrem1UVDNrY1QzUWZQWG5BdlRCemxaaEFOUHVOK0paamlXQm9jMnAxbmw3RXNiSUZuZnMvVlBQL0hXTzhEdFBzN0JoSFo1VjJ1eXBGdy9hVUhab21vdkUxckd2L1RyZU5DRDFIdG5xK3NQVlZUdGs1QUNyWnZNK3pNY1lhUmFSTTBYZ2hVNlpkdHdMaWtqWGlXNlEyY2VNMTA1U0ZSN044ZmxPaWNLQWhkZllRTFdTUk1hcUJXYVNEVG9GdUhKL1NHQjFXVGQvaUNZVjNyaVU4cHNHKzE3a2lNRlQ0VXNhQkNjQjRSQzVuQi9ubysyemhXMVVkTnpFZU93R1Nyc2YvZnRKdVA1eGVSWEcxQXpBbk83dDJhVEZaS3pWQ0Y1OWpXS0piUkJjNUEwdVo2K3FBV0NkTXN3M25WT0xTVkpVcmY5WWd5QS8yNHU3R1UrbkNZbG9IL0hHenhCYXlRcnpRamxzU1pZdUNua0U1V2NvMndsMHc2bG1ZYXEycHd3ZzRWMk5XYkJFcWRKSWJVSmxIUlJmZ1V6NGNycVFGa2hFdUh1cDdjSXRJK3d2NDhjSGJZRGx0QWpxalZqVVpNLzRiV3c4c2N3Q2RtMU10WGNQOHM3YWhrUkJ4MWY1QzlvWU1UUS9BV2lPSk8xekgvQ1pOOWdSYktSUlYwd2xRNnp6Yk9talozWkEwTUo5ZzBvNkFHNDNZNHU1K2F0N25SZDdtRjExWFFXQlFlRnh6UE8zU0ZLcE9maE4yUkJXMmRIaW80V3pPeU9TdGE0eEc0TUVaQU1ZYmFLMWZLSGZSenptYm1oeEh0SWVsTkNIUitPZk80SCtYVzlFZndkRk5QM3ozY3VQdFVPVytoWTVMQk9RcWNQOGs4ZnJzWnh0WHJaaGJYVlFyNHY0WWdvejZIa0c5WkxzejRwN1Y4bVIwUVgrV2ZwOGhvT3Vwcnl3VUtNU1ZiVnpIOXFLZmJ0d2h4elZOK3o1NU9peDBuR254b2xKZ3ZYQTNRZmxGa2VidXN3L0VLQkJjOXN5aDl1dkxIVjBMaGd2Yjh2MEtrNlN1NndESkdPSVF0eFBsSm91ZjhWRlJoTGZvdFJzRmQxbEhDWXdFM1VkdW1kenF3eUJxU0kwcDQzbkFXRjhieGZNSDN4YjNTLzRPSGtiRjZTamZaNDhuanNkcVUzd1NhdkR1OHRIdnprQSt1MlZSZGd4ZXRsa3lEMkZVL3V5TjdOaGxvSW1ITythVVluRVhPdXk3eFM0alVQM1VlTGVnb3NuVU03WGlpYnNqS09qamhCVFJBcVVSL0g5VGt6RHRRL1IwbnFsZjRaWGFuNldDVFdvTU1YbC9JUXBNcmpsZlFjVm80c1ViWnRFT2RwRS8vbXovREFsblcxZjNaeHVVN05nSjFkYkdFbU1zbDR1YnpBN1o3T1BHcUh5SGJka29VTDVTYUVJVDNlLzNNcFMxejhzdVlXRGxzZTlrWDVhYTFGSW1sUm5tNjIvOEpQT1Qvei9uNG5sblVTaVAydHJ3eDZPdGg0MWlLNHN6NmJRUWwzdkM5Z0lBYWNRMGFuMWNKcGQwSC9HVHZLU2JFSmlQMmZvYlZYbXphODJsR3BxcVdPY3crU1l3T0ZKc3RYbk0yekFBTkx0aUU4MVFyTUkwZ1VWYTBhRWJqT09oam5yT0h0ZXFjS2MzMDAzbFprYTRVN3k2RDgwMlRBZ2hKbmVjR2tpUHJ0elIrTzhWYjA1TCtnRE9VN2J4ZjU3SG13WGp2S0t6ZHkzS1grOEx2WmloZ1V3eGFBYlMyZnlFQUxrUGNBRm00U05ONGpSTU9TdG51Q0lmWk83RHNIbVNXZjdiaXczbDlCSlVpb2RUdEhGTXpVSElnd2g5eUR5R3FXUE4vWVJuR1hqSHdDMTd6UnR4YzR4NWo0cTkvMjBNSTFmVjZFSkNlZzlCTkRWMk1xWk54dGwvWnJRcXlpaXpSSm85NGEvZk9hUjJHUE1RRDBLYzF2MGM4RkR5Zzh5eVByWXNvLzZDNm9wUk50YW9ab2p1S3ljMVkwSUtpMW9mbzMzVzhTUldTeFNVUU5nWmsxTi8zaDg3MDcrMW9jMFNBOWl1bjVvSDlvaG8xbTYrdi9aZWdOd3ZXL3RNdm5QVHlNVFh2dDJRaThlek5WSVFUcThOdzAvVjdoVVR0U0t3VWZ4ZklUamIrQUVweFY4Si9nMEYrWnJ6ZHBacW9aelFhWUFWdUUyMmU5dmRpY09IM21HOFFOYkR5M2N2c0RrWjRQc0JvMDR0bzFleTJiUXFCY290R3orSmQzd1U4T0JJL2tLY1lPZEtYSXZDU1RIS3VuZHZRSDUweUg1b1Ryc09Cd1JLSXZNVlA5V2Q5YkZ1WGZXWTA5ajRnYndXemh6cmxFK3lmbjhKOTBRMVFRVTMzVHEzYUE5bW54bGE5Y3Y0VklTemhqSEFpcjdLSEdZaEdxNllWWDRJY01sQmxTNm1oUGhid0xuYlVwdURaMHlBcWttZEs4WitxTGR0ZERTb1hDRmxyeHo1MkFGQVE3MWVQL1VaMENaWjlGM01tTFZkWTBxeHEyYm85dGtiNGZkaExOc2xMbGNUcFcxL0ZVQlRwSUJCMVhSQ0tXL2xZS0l1MmUySi9RTFFtWW9VanRBMDJQZ2JrTFNscEZQeStsNEFxaE81MUlPQ0ZZL1pNNXRENTErN3gxNDNqcVVUaDJPR0hUOTdvdjV3ZXVkUVBjTGY2RC9lNXZlbkxTT00ybnM4WVFkbjYzZmhFb1V2ckhKWC9VWWl3QXZQb0RlbkdZcm9GVkxGakdWY0dIeEVSMTA2bURFZDZnVnNTK3BlYm04bEVybHZFWVpkSXAweFlBUFRoQjNuRGZocXpuc0RtN3JGTThMUCtZbmFpeUxvVlNNRnVrVEZOT3B0bXBaZ21pOG9kR0ZQY1pyT2VDWnlpdnFOLzBKektPNEdiL3YyM21xeVIyOW1sNm5PVDdMRkFrY1ZzL0NtYWlVeDNsZ2RhZmRiUExlOUVVYmxnMDFWSEtyd3NtZEZveFhGUFNVcE1GTmxVMDl6amZOYUpjL3NJcVhSczM3aXRJMGh6Z2piU2g1WUZEMGRNcjNZczdBQ1p0bUFMeVFUa1BWVEZscTZidDU3ZnFzMkFBTHN3TGsweld6YnRneVNKWnFEblVzbzRyZTlSQm5VUnFUc2hPQjdTV2RqK3JyM3RhSUdjdU9pc2JDVkxRTFFOdFpFV0N3dFZJaTdYbTVocXllb1o0N3Qrd0paU0NGYVN6bStnS1VLc2RrNWI3V0dxelV3UGVmYlRDbks1OGVDREFodWU5bE5rb0xMT094SkRLbUY3c211bSsxNFJ1K2hmMlZyWUh0UXJ6TWVuVGZQZ2tsOENtQ3E4TmlVNU9xeG15ZTdHeG1icHVPKy9DRDMrL0lRQ3Nud1lhYVdSM3lNQjFHVlFqMU9mTHdtcTVFMm5LN1Z4VUREdU9LeGtMQWlSK2RVN2VOcjZVa3dDM2I3Wit0ZnpFNGd6VFBYZS9DZGVWbzJHSE5DS281WmRuejdoTWMxL3hkUWZ4T3BicGR1Z0EvMUlLdW4wSlVvRU9uc0Z6dmdia0NHZFlDUExaYlBpcDlRSmZVUldSNFJIOXhBaE1NT3NDbVlvM3orRVFYNHltbVFCdEJzdWJDdm0vOGJ2c2MzSmZ6R2hBQlFRSm1DVXE5NHpIYUFicnJyWExYNzQ1RTExU21IMk1WT2xPbVpPWTVGSi8xSkhIRTd5M3J3N09TVmtETFc3L1RuYVlwOVVQS0hvVVFDdjNoY0tzZE5VRUxVRlI1c1dLZUxOYTVSOENxWS9xYlBPeHNINDQ3Y3p6cElSQ0dRVzgxaVdjLzZTcXF6ZHpHUUVjNWpQOGNIekUrV2xOMlYrSlA5dFYwSzJIR2VHSlEwR1YySUxRRCt4M2VJSnE3czVET1FEdnByM1VNTzNacmNzQmVoNWV5OGs2ZkMrVmJ6UzR1K0ZIbElDNGpqbmFTS1lZT2tQSkFqTkVJV3BsNXhJWU1jS09FUy9oZmFVc3c4RjE1M2VydUdhN1I2a2FwektGL21QT0NtSXVMb3o1L2pmdk1qMUZpQkgyU2RnTlZtampzRjg2d0UxcEdWaWkyUGZBUmZDYXhvNURBamZ2QlNnSkJoS3pVZjVLUlpMa3RJMlhaTTUxMWJwSXI5MmV6K2JJTkpBZkhyL0d6ejNkb1NnRE9sQk5WaGd5QmI5SzFlQW9lb1FmMmw0Uk5JT3huMVdmb3VYcmxoYUJoT0lLNkliYktCZWdQS1JXZ0pxc0NBMHdhalZsMEwvdnBzMEo5UTRYMlMzdjkwNWFDeGdHR1EyL3FVZXZTMWQ0d1l5S0VZUzZsYnVzODlCNFozWC9KZTRDcS91ejVsU0FLTHFSdWtOYmxVSjV1MnIxdUdwcVpKcGxrZDRmejU0eURxOVFWSDUwTWFKQnNjdUVqV1BiQkVUN3pBNzZ6bkVvUXB2THJwQ21VTXB6bkl1bzJHYnJISlVyNDlsbWo4ejlLOEVicldicXh6c3Z1ejNYZHFBYm5UUURyOWorbXB4WUpXRXlVbUdOUCt4RUlyMVVlcjRuSlhKckZNNDlhTGFJUHJvbllWcHJoempJMWVKbGJnczAyZWVFaWY1azNCdVI0NG5nQmhHOUFiZFcxRUxXeDlIekZPd1gwSGJEZm9nSXpBRk1DZlB4MkVjL2tFT0ZxdktIdFlDeVlETWVWb1JnOTZseEVveHVTeU5odWtaQ0VHL3dNa1dMMTB6R3lLYnU1ZG5ZeXY1Tk5PNlZzTVdvRnRHV1dFVjVva0NaTmsxbXNSc0srYXA0ODBYcTFPK0ZmUzRpcURGVlhzVytVaTB4OGU0cmEyZzZUUnpycWw1TW9zRTd1OXdiOFpyM09sT0FjanlsUjRxNmJkS1hQSUl1cVBkMy80SEYxbk9BQ2lSMGFlKzNjaUdaaDArUGg3aTVtSmdQRytVU004bGFwd24yaVVhaHpPTzkzSFRnV1pXNy9HY0NZNXNPOS9SeG9iaWMrY1ZTRTRKcUhrNWRHM1VRdlE4dlFGQm5XUEJ0Wkw0azVuQlRLNExRVmpYaWY2eVcvQlJ6Mk9LdGFpbHBrbG04ZTVXeVQvZ0NWZ1Y3WmljYXVQL0dwMWZ3N0NJbXE1MVVlekpKcElVS3MxQmE0MXNvTmxxMjZFZG5GL1NWQlZuS1V2OVA5OU40NkN4OFc0OStHNVQrNkIzR3ZlUWdPeHZ1QUxnbElYdVhWRFpwcEJ5VVdWVkZtVE1xSEN4L0JrWVFDMHQ0QUhQK1paVWxLN0g1em9iRS9mcmpWNWl0Vmczd3JPbUxCTXorTEE3enQ4VEorcFRMb0RleDB2SjBLbERWaFRxVUVscFNXZU96NHpYaG5CTHhYTGtpU0hpNHRUYmovY0ZRb2hVai93TCtIMlRZV1dpS25lL0Q5K3ora2ExVXlsUUhWeW1zWHdLSFFTL2NLWTNOV0s3NDRoOEFNNUhzR2xGMDVBR3d4dGg0amFCRldWOUFrZG1lMmlaMmExVzB3TTFNSVRFTjRINndsM3V0QkNDekp2azllbU1zOGFBM0tJQVJZNDBLVVczeWwybHl2RWE1clp0R3g1c3pZNWZSK3FOZjU4NHRuTHR6OHV2dGNkSTcwRGpPeE5aRDNidzhlMXhZeksrS3pVZ2s2UGswR2cwWk0rNGE0M1dVUnhnUGVocktSUHVDcmFwY0RjSTRJL25wVWxUQ1RHeFVhSjFvckFKOCtEaTVzanl2aDVaRWEwYTUzWEkxaVNjRHJpL0loK3dxOUdoR0wrVzFBYmpJNWVQWDkwb0ZTWnRab1JxQllkK3hJS2tkUnBkTjkyN3podkNlWEtNS2duYWVDNmMzSWVWN3laM3k0RDFIL3BMQnhUeGNobC92VWFkODZBRzZvZ3ZXMkd5UTBLNGxkOWJiY0V6TnBnY1FqTXRzTXdLMEVnRzNuZXliZE8xSWtBUCtXdTU2QVJ4RTE2VGVIQWNXenFueU9ybklsb2dCVHIvMnJxWGp4byt2VlJEYTJjYW15dVpLbnRzbXRDYlpBbHpmdGdmRjU0U1lna3ZhN1BZVWlndVBGdEx1Mkx1YnhMMlJHSE1MWU9PUkg5Mm9icTFYaXRuaWh3ZWkzZG5ER0diMUZHdjNyWk1LWnczdW9iVWVjV0MwQWUwTy9oQ3MxcDh2RWpFYlE1QkRLMkhLclRZMGE0N3RFRi9oVzFIZlJyZVMyR2tQb2U3WS91d3YzSXlyNS9FUXR4dGQrSXBmUXJmZ0tFb3B0L1FOUjVpcllxMGtxRHpvdW14V2FEc09zbW0zQVVKZUlOS2xYME1IaTdTR09taHlBTUhYZEpTSi92UFJRZ3lqTVc5Rk9EUXVNaTJoa2lCVndmVEdDRWh2VThCdjd2aTFGL1BKVzI5d254aTRvazEzeXNYb2tVMWQ4N3htTmd3WUdhVTAxT25qa2ZlOHVXekNGdnVaT2FUUGNIT1JXNlN5L2hHeHBVZDNFVGxnMk9jdlorK0preExKOWpXVERxdVF6eFFBWGxQdzRjQ2IrY0RWcFJWZDFqS3F1Qjl5NGFuMzNmeE5qNVQrcnBabU1ZSUMrMDFFZzhxcTZRQWZVQk1mbHpxS2JrZUFuSVc5czFKSDlIa283TVprazBaUFRaVVhMUWtWMzhCTjRBclRxbHpsb25HQW1YRUVYcUtEbDVhd010OTlEL2VReGNlL2E3RzU1cmEwY0JvY3BqbnAvcjV3Wk96UktBaTBtTkgvOWRSR1hSUnkvTkpKRnVGNURWUndWR2lLbi9ZWjV6U2gvTXROczFVakNMZ3JOK09OenRxVzVTQnhYd1Fsb2ZyQi9WMWFLa2FYbUVuYjVyL3ZOVGJCaVR6RWdQTis3ZDdqSzh6Wi9tQ1ZRY3hJcWZMUXBmRnV3bWV3SXlWQTFOL2JScHFwZXF1azVTQjlubms0NzZ5SmorYk5UTEl5RTB4akUyZU9EOGVha3Z3SlhNUXpXVXVrNDVQdlJkbTRHY2Rud28xTXdPWHJvNmgwektMRDBNQkJJOFdQczJVNWMzSlMrT21pVnZsb2gxWlByTnVBdHdHZWM2SkRWQnhnclhKRWx1MzJjNSt1Z3Q4SGVteWx4NzlpbTFpMUl5aXN2aHdLaHNFQWVpVWhzNjVUOVJKdEZVNDdiK000WTZLYnlLSmtZK29KV2k0UkJMbFJUZGpiRUZpTXJDUWl2VUJONThTWkJwRXpsYzhTbmkwaWR1NThMMUVmUjBjQ0NVSW5SZmZuaElPQnJlenJ6ejRESFkrRnVSZzNvL1d4Z1pERVR4T2hVa0FrcjVKbGJpTkhSQk9RUmloemVIZnlGM0ZLZTd0VEVLY2N0cnd6TFNSVll4Rmd3eTFndUtydDlnb0tQWTczQnRuTHREaVFSeTkydEI1ZVdBdldmZVBETHFvaVIrekxNeCtUTU1JS3FlYmVxbGEvdjNRTWdjT3VaakNqdUJXOGNEMzdySHdqVzZsYUlaYVVwdXB1N3pWNVA4SnJYeUQ2aVpzZUxkK2tyT3lXZzJxTDFIOThhTFBTL0M1V3J2WDUwY0ZEZ2JkUnJ2UWlEYUhlbXNWU3hHeGhHVEZ3NEZmbjBXZDZkaGl0Ynh3Ymo4MUJ5SDNZUWgyK3FUR0hKd2RDTzRUMTZ2TUNRRmJtQXR6SlpKMTYyb2hHTnVQajNSNGZXVmIvMEVWWisvTjlIalI5SmlmMzZJam04ZmNBSTEwNHhyblRZNjFzZjd6RWhhcDZjWUNCcmViS0tXZTJRb1Jyb3owck91OFI4ekNacEd2OUlpWlFqYVNnSXY2N1hrYzZrNU9xRExMM1QrRzh0SGhneHUwWGtvTGhVRE91aDNoODM3RVRUNjlOV2N5NC9ETkRzaGhtaWFrSFVvTUVhMXR0UnNMOW9Ib3plUW83SmxBM0xwZXN0S3NnSlYvbkU4VTUvbXRBS05sbi9IYjREZlBDbDVyaUh0eEltTWtFaE1BQ2c4Vk9sVUNKVDNwSGUreEtvZzBxdEdCWlRuMnBmQ0xPdVZ0aFpSWUI2ck5wbkZBS3Y2MGJENE9CeFZydHNuVjhtVCtwMUdySjVHQVdWMENCMmkzVEVsMnVycEhMVFFSSThjenZ4RVRQbGs5QXMxSUVLdTBhOWlSenREZldnTnRkNlIxSGVuRyt5UGV0cGVGbVZMMXduelpLOHdqQS90bFdrMS9DY0FzRkZFYkpVQVM5NVpzZHdqdHRycjV3VkZyYTdycWFROUU5V0lyTnFZdEprd1ZxdXpDWE5kUW82Y2duNzNQWjl4SWVVcWwxSXVOcHZMRkVGNEFsWElDczBZQlovRWRCREpvN3kyNm5BaC9oSi9vaW1rb3lyaGlJbTg0K2ZsRkNvWG9MaURNTDhsbXlUZFRZWTFFdHo4YmVaLzArYU5IWGRLMXRaMlBoNER5enovRzdwdVdLaGk1T0FZaUVGY2I3RGhPMUxoNm02L2hRb3YybFhtT3RnWjR4TmFBUDBScWxob2lWMmZqVllQQURlM3hhbldFRXlOQ0Z6bmN2ZjVoNEh5akQ5ZTZFbC9EZ1hsSytGNkxkV3lBRmZpaE9xYWhFZVNrNFFNUG90b1pMUDVRdGkrYk00Q2pGMEtOVmNjRHpmWFZVRTZNYkZqbzZyM1M2T2ovUUcyaEFxRnBoMlF1bmFrM3JodU5kU0QxT28vcGlPWXZIdUNjQ1V4d1JEUjJZZGxhMUpweitPa0hlTW1oblBKd0h1V1VwL2pVVk82eG9ocW5GS2dJTWszc3VUVDUvU2pWNTErOHNYcW5td2hQdGNES1FmOUEzYjRxMGdyZDhVd085aFpvRG5SVmdQRlRpM3l5Qi9UcHBJOFFZMFAwb3hybnR2QmtYZDMzbm9tV3ZyQTcwNnd5dkM1UkhPdFNKQ1dza25HR0xSeGxBb0ZOdUJIVmVQVENmbHR3WUEwbzJYZ3VMdXZyQ1dQbHU0TW9jMXVEYjVReThUKzZJUklLNGhjcTkyaGJwVWRyZjd4c1hzb2FPZ2lmT3RITytqY1ZQRWdkTldCTjZkOWNMRCtOeDMzVnhuQ25DSU02STFUTnlLczVlYnVlWGVBeEdCdFFDODJCcUlvdFJFa3RWY0tlcGtEWmtvTm5FWG9aVTVuV3dlMUF5TzdhOUkvMnE2N1JjOW9KNC9kRThUUm9kQTJpdWR1dzZoeG1YRmhwWkJVL3hINWxOZW1WMHIvQkdNU3EzK3lzSWY5MFBzYVkzVjFGeXU2SlNnZytoaGdpUXVOV3IyQnMxZUFUUHJyeE5BaWdLMU5oRjIvaGtLMnVsVXZiNEtmZkRIR1U5NmYxeGFGNXdqS0p2ZWZMdHJRT1hKK1lVWVBaejMra2tMa3ZQVU5GN3F1TlBFak53am80bldoejZpckJyamZvczVENlZUNkFlZFlXbTFoRFRGRjdMT0tGeTNVL3VWWHdwbXkwcTlEcC9CZndwU2xNNE9Wb2FwYXdiWkhTOUFHcWppVFBJaWxZQXBaeThHTjA3ejlFd2FValRQRWJXbTU0cm5WK1BMdTdHaHF0SXdxdGsrOW00QmFDVDJqanNnRVVxODM1SGdld3pNOXRldmhVUkRpOFhRaEhpRSt1TnU5anp0WTAzWGpNalFrVDZRMWtIcEZFM01uczRPQ092ZVgrcUhNVkJ5SHVCT2VBOVR4bjBPUTFJcVJqMUo4YXVhUkJIbUE3TGVsdHpLOFhQaVFvZjFzUmVIZFdPTDlzTXdCdm5NRVZNR1NuNTZJNmMrMWxhWXhCNUNJVWR0QnBqOFZMMVZvdDRUd0ZoZWxDS1crTmlKVDNueHN0aWRkVENzVHlwN0FVM3M3VjJmbEJTSk52WXV3UnFMd2xVS1NQdzBHMDg1eDFVT0Y1ZGxHNk85Ym5WUWtBbkZzNzMzcDVVQ0I1N1NJMElZV3ZrT3pZR3B3NE9zNnhxSUwyVm4rVGZHa211ZmR6ZU5CYzN3Q0w2Tm03cWxYa0FSdG9XMmw2Zmo1U0xCS2d6UUdGK1M5aXQzc29oWlZ2c2EzWExvZGloL28xODdyNE1OUGduL3dlTmZyY0Z2RFdKajVnakl3b2NlR3l0Mzl6SDJzanhYd3B1cWNjM0xxdnlZZCsxTk41WVYwa0Mxd3IrMERnc2txaW1xamdRMllmRU5SRVNlVVN1a1dEdEpCYWlDSTJxSzVhNlVpVTJWUWdnZ0J5RG1mVXZORmpSSWhUOVNDdFRNUjV4RndiVXQ2cmY2KzlKUGdoNFZGckhyU0hkY1FUaG82R1NQd21WUG12ODBXcHVKSEo0Q0l3THoyRjIyZUFHSmp5OE4xcEV5N2EvT0NURFljRkJIYWhCZFcrL2NNTmNjUS9zcE1kZnQyQ1BDS1N1NDJOd3IwaUgxTkNqSG03ekRJcWlpcjlSZGpLUlhoK0k0YjU2NTZ6S1B0ZGV1RHlnK1VJYzl1RCtpWTBSekFaVUdBZWNxR0RxaDQvVCtmM0N5OHlqZ09KZ2lDbXI4ZkdDalZZU1ArU1Q1MHQwSDU5QW9TWC9XbHEwZDhNSXFONVZnRjB4SEtkUWFKUkMxdVJ0dHBuMEdPUXIwTG9TRHpHdUhHM0J6M2gvT2NUZDZyVmkzU25FYk5RSFZjMUF4ekduV25VbjlPN0NGZHhBU09peHFMSVUvWWVZS2pSM0d5a2d0UWs3UXJucVJMZUJvZzFyU0dSVkJwTG1UNS9kSzV1cFB5dHlEVFNnQ2FML0pBNkljR01ZK2EzV0FUdUlPR1NFcEMrcHhxcUxTK3c4c1l4RWJHZCs5KzQ0MWF4akg5UUpOQ0VNNm1rWHRDaklMQ3U3OERkeUlmMVJkb3dqbUNDNjRuOVduVlAyV2I5QmVhSlhkSHRzRlI0YTh0V1dGdEE3eldUK0tVQ28zaGtiSkdJZXRRMFdkbW85QmVhcERRaitadDk3dWgwWU80b2Q0eVN2TGdlcVRNdEp4UEprc0FVZDIyUUxXemVnSHFqd2FwdVlEaVRzWU5SdThRL21kUDZ4eVBDUTBENWpZeE9XaGZwcjhuZ0dFVjE1OXM2anZsYjB3SW44Sm45REZTR0RBbnR6UHVmeGQxSXdRUG14elZJT1dIWVhQWFdnMGNoY0tqMGszbjdDQTdXUEEyQ215eFFuUmplLzBBVzBhd1cxblBsR1RHdlc5Y1J5Z1RQRXVPUEpPVnlrT0hSdWprbi9EeDZyWHNFOFJFOTlxWDBxT2w3b050VDlvK3UveEFEYjNyalVqVlB4bUFRc3JVSFFOZTdrcEV4TE5DVUVaRmlmbXdVZFc2ei9VQjhRdzA4SzVBaExCbld0S0dEMmhTNStZMmJ1TktMbXR2Z214eStRRVAvMUJqYkltb3djejFKaDBLZjJ5cytaN0RjV3hhVUllZlVYUlpDVTM5alRURDNYNkhuYkdVRS9BbElqSGtJMkEyTnp5clJEWFlha3IxSGZUbVI0c2RDcTh1aWpxdG5RV3hsUjhrV1BhdUdLVjc0aW1EZjZXY1FOVHlzYnVyUVRKUHpJeWpYSGlONjV1Z0tkVUgyTm95aldZOWpHTXVUU29VdWRsOGhRdVRKNW1UWmxNdGhYRklSUmhzV29XaHJ4Ym1lWVBGeGprdEhqQ3dCd0NpVGI4M3ZsOTZxU1VkRFExUkZwQWIxdGUwZlpKNk1WVGE4aEl5Qjd4YVMzbzg2dkNGdDErVXlNaWYwN2ZhWmRYbVNic091aVYwQU5RT0lJUGEzYVYyY1Z4eHB4blpVQ3pYaUVuWW5yUFRETFM1b09qdmlIZVVaSjljRTJWNFBLMUVpYTRMclVIajN1ajdlcDZWOVlEa2FGandEOTRvOFNpUldreUswNHNhSUQ1VUNKSHJjdFoyYkNpWWNqR2dRYmdLU21CejFKbDNyUm1tc1FBYldmRHJLRTA4R2dkd3liTGtMbllUOWxCeDJQTmplOURkVVhiRFYxNzFTS3RDdVpvWnhuYWpUMlo2UmJIQ0pmRFV4MEZmWVBnbmowMnFpSlpwSlNQZ21pbXNxSUt2ZGpvNS9TOUExMjJJMTdha2x2WGdYeWxhL2JrL3FyeXlkbTh2NVQ2SDc5SUI5dm1iY0lybjg5SlBxVUhJb0lvY21CaWhkSWJxSFE1NUlZbjZmdWRkM1hvT3hiM3pxWE5rTUp5dmVHdzdHSkVuNDlNNDdMTkVuUFNDMkh5b0ZZZEp2OTF4cmUxTEMva0xyc2RCclVIZ1crZkdoSEovdVNkUWZwaXd2blpiQzd3SVA1a2FqTzhMK2UrVUI5VjlKL3VoVGlYTDZSaUgwTWU3QVdER0lXWVRPeXFyT2cwSUdVQW5MVzRRbG5zazNXeHM5R0xxRWFYbU51QzVyUDdISlFOQytNZCtOOGlCNUhldlNPNE50V1NkR3VRTVptSFpuVkxvUWpIVXF0RGJlZ01nenhBdVlmTlZlYlFWVFJJRHBvUWVhUzYwUmovaDdicS9vcVJEOFhUMytJNGQ2UkxGOWdTVVExNTMweTd2Q1IxdlZ0ZmwwREFWZVJhcStWc3F1d29jeFB1SEJPSjhML01LcDlQUS90OHpyWDhiQjQxdXJRMHpBaVYyYWdnTXFkazBabWxneUpremNMQXBLaVZMLzB6UmhjUVVFOSsyZGVka2QwcmdKTklGcHBudnIyaklIdk9zdFo0aGVrK3pFc1F2blNEUUQ2UzRETlE1SHE2MDlXZXdaZFhzMDVHQWEwOGJ6VmJidVVzQlFHV3R3SU5aZzdNeklDUXFpWi92SmUwQmpRSGR6MDFLNXhIT2ZkQ0ZwVlJBMVhkdU1MNDNNUUxVWXdVMkJiNWtTQXZTQ0wyRHhYdUxrd052TTdwcGFPK3Q1cmZhUzZ0b2J2dW9VU3pralUvOWJnenp6amI5QkM1c0x1Z2JsUnVIT2VqNFFyeWRnWXZtTElWd3dabUoyTW1KejN2YjVOVm5ybUIySjZMeE9ienRZM2hNL21EUVdWVTJWNE5laXZFejREaG4yT3JqSElqSGZqRmNLTlZNWlU2U1d4YnlEQ3pnN29jcWR1MUdJS0doMlp2Q3BGWitkeWJCLzBYdlRBZFRvT09LMDdzbnkrRVVPdEQ2VU1kdkZaZWdnWWNERVlueHlocTAxVlhEQ2Ezd0tWQ1FJVWg4cVBEWngxcGdvV0c5eDFDd0pjQ1RHVkxtSVhKaG1WbGJMbWlJOGlXMGVqcWhnYk1oUlNLeVhNbGZiR0tUOVI3K2FtMnliL1dMQjFwL3FhVlRLNlF3blNrNGNyRGdwdWNRdEhiTDdYbFl0a0xLaWxLSDJ3ZEdTNW52b0RSWHhiZTh1RGIxRmtqcXZxSTlQR1p1MU10S3RnVHU5enp6d1ptWlJzd2Q1dG9HZUV5aWhjWEpmY2M4eWdoMGExR0dlVGhSUmg2dzJpOGJBR05iRHREKzh6a25TdlpJbFVCWUxxVGZTR1JRR3ZFbmwzUlhadnpHUG53L3FWS1paMHBvRWJEb3ZkY2E0KzZMZ1B4WThmQVhKRVN0dW9lc2F5V0dHTmd4QVlIVWhPZEdBTzcyRkpIak5LUWg4QWFyK0tZWmprbkJENllPd2RoWWdVOUh2dkFUVUtaMVUwQWMwL2RRT0krcmh5WEVXSy84ekIwdE0xb0x0ZFZPbnk0RjFHSFBzdjc4NnhwUGFlcUZ0VFdKNEdmK2VVSDlwWjBreW14VlVZcnlKQjVKT0ZIRkNWMHgycUpnZDl2RUVKWlBkVzNOajM2bTVmS1VORWliNlpXNkRRY0kyMGNPSlJLRmEzcEVGdHF3ZHlGSXl3VUhxbmdCT1NXZmxKcklCSjJNcDlaSFJia291djRyU3JGR3R3YkV4SjJDUXBCUGZLSzlyYTBhcVBDN2RhcC8xV1p2M2hYMzFmdDZhT2lEK2RCS2FFOElEZU9WOVZJTk9sNmRZRDVicHNrZFFnZ25tREVXY1B4SFdVZ2w2akdLRGZ5UlBDbXhSVkVKd1JlNUxndTVOajN6MnRJWElvZURWZTZibkpzeFNZOUtSSlpVdTBFclpvQk1VaTV6Zm8yU0hVTXczQWszZXk5VUR5d3F4YWsrTzh6SmxhWDE0ZjkyUGdadE1VTFpVYjZiZXJURTlzVXFOZVdwVCtreGZhSXNwYmJlUDdaUlE3MFNWN0VGNjI3MHpmcExXNmtRRGFLNWU4MHFmRXZUcXllckR4VGswcHQwS2V6K0dnZFdERzUwRVJJMUVKaWIwZS9OdWFzLzVHNVAvY1p6Q2VIaXBlbVVqb2FLRS8wWTNSbGpSMzNjdUo1TUtNRHQ4ZVpicVF3aElMUFNWbE85cXpyZG1aVkhzdFpTTmxVdzlDZGdwdW9MRkxtRXM0TFltb1FpN08zRjBkR2YzbkdpTkhacjJHdjk3OWcreloxaVdPTGhqL0gwLzJBc3ptd1dqWFRLdEVXSSt1QkpvTTkxZXdqQlIyUlBhUDdta2hCMlpsZ1AzUWovZkVTVUFvdG4yV0JELzNNekhSUmUvbGlUM3Vib3M0UlBURGs0NzE1blVnTncycVV6WS9jTE40VENpdXlRaitRc3h6WlMwcjNNUERJL1FVU0l5VWFRR0dxNUZZakpTTWV6Z3FhRDluM3RQYXN0SVBxVEQ0MmIvMlNTU05qbTIreFd3MklUQnVRdFk1alpidy9BTyszL2ROWWR6ZkZEQ3NrTkZBY29Ta09KMWNjVTJVTis3NHpONFJIUmZjYUwwaFNyYVJUR0lJMEJDdGNXSEt0QnNMMUMySTdzenc3cm5KUVNnSlVhdjFueFUwR3JMbCtRdVJkMk9rSVMvanVIZXk5RFBWVktHUDd6TldTSzF3OUFVb21jMnhCMFB6RTlQem16akRUbWJ1SUcyK1dOdFc0NzhFUTVEeml4VHN0TUxKMExyckhpNGFLQzBFeCtpTTVjNllIUEYrNHNuM3MwcXR2dkdGbk43OEF6aFJxNDZob3lGTVFuV05KTjhFTnJBeEZKV0EyRmVJQmdFUGp1L2t1ZTY2Smw0SFY2OS9ldGgvMFhNbHpvRUYyNy9qTGI2akNCY3NDWHlZS0xpcE9PTkc0WjNiN0tJOWc4QmNnbThoTTQ2ZDA0NkJIQ2MyMmxwNnhmdEdxT0dFdkVsc0hJSDkyU2cwRlhZYVJjbGx3b1NnY0JOWENhREl0SFVpbTdpbkVkN2RnUGlORjdSejJsM2cxeTI3ODFTMmplcmQ0dldMSVNTd2s4V1BCUFBoRGNqdyt6WmhZN0c1aVFyV05FSkVuTDI2WjNpZk9DeVNmQ0lGamxnUWVqSmVtbnhtNVJPSmNabnppbGtuc2p3aUNibmJaTERwWHEvVW4vUnNDRFFOK0xRVWp4THNraGRoQ0thcDhVVzRlaTZKek5IVStQYURNNmJXdVI2dExpZ24wcUFvbmN3MUY4RTVsbW9zbjhvaGlyVEFIbG03c1d1Sm1FSDR6dWQxbHdlNDI4UTlwV21PV3AyZ01TZ1YvRFhyZWlGTU1hNTVNa3JHU1lSWVpWeUpNbDFpMTBzZmdBbytnOFdDa2dHbkVib3JtVGQvdWlSNDVlVkVKODYyL013bGRZejhLODJLQ0dHNmdDeW0vYkFnNEFUVnlmWjMrUlFQK0RBTU1tUzVCMEhTSEkrem1WcytVU1hocnppd21HWkFLaE0zU3VBQzJWT0Y5RVpuWkluMlhaOEI2dU53enZqaStpOXBOcG1iaE96UkdoOVVsUTZuejRuaXhJOWx6MWJFbnNxZ241dTV4eGVFL3MybFhVSHFndEZHM2dwRWVjdTRBb0QwWERub2tBSEFqaFlTZzJRWlE0QVJXeGg3UU5XOGZHb1RRWElqejZmUGFwMzRSQVVzTGNxTjk0OGlGTHBORnQrS2ZPcFF3R3NhUk9EUnpJZEhVeHpwQjBaMGljclhWc3RpRk1Yd3cweTZqdG51dms3L1ZGOWNjUGE4MjBPeFJyZzJzSlM0ZGtaV2lQTVFwS0hMb2J2cEdmbnRVMisyWnNLUVErZE1xVkw0RFpkQjZTb20rYTdhZGh1QkxwTjI0R3pmVzdjY0Vrenl1ejAzN3IxcnUyL3pIOEVRWWI3V0FMME55dUlVcWQyUVhxQ2ptZmJ3V001TDVBMUNKcnNTN2pIRlZrd0FWdC9xTTl0UHc3cGFONWlnZmc3bkxaeHRBOHYrRG1VazFGNUR3WU8xaHp4NnBCbmUzREtSTUVWQlFhRjd0dU9uZDRVU2M5cTJieG5LUmhpVXFvY2FjZFNwVTNZeHlhaW4wS2RPMnVCSEQ0THFlaVg5UVlrS09lRHlYemN5WDlXbUZ0TjJvWU0xYWdEeWJjZzIzbXoyeHZ5cTh1WXh5NFRrN25kMmlZYXZsWStQcEFaSDRWVUFJYVJLRXpMT2dPOWJ4ZWVveVhnVnk4UTlaVUx2emdjTXhSNzVOOThtMDRJRUUycForYnRtUmMwclozREl1V1QyS1RsdXExano0ZW9KOVA2WVg3VFBqWHJTUjhNQzhKUTNqOTNSa1hkTFAvVWsxRTRYMkg5SURwb3F6WGZPdzE3ZW52N1g2VFB4dHB0KzhkSVVBNFJaOHI2MnIzYzNSS05kRFZLeGZRbXprMlROUS9Rc0dHeThZQldIem5aY3NNU2htSUovWkhEcjdnS0RubWExMjNYM05JMDNJdTl1VWlLUEZDd0R3SlcvWEtQYlQrWnR4VDBpUittWVV4dVRoWGVwMEU4UHorSzcvMnJJeUZ0RDNWN3FDM1p3NGgxWVo0ZzBncnQyV1ZIeGxWeG5uMDdoZThBcnNSbGNRbWh5ZVdXMnpEc1ZOQllSbEpUSlJNTmNFcDhxQ21ReERQRExMeW5mT1ljRXlRQXc2Ny9RUmlWRU11WFlYSDV1QnBmN3hpaEVXUFlKaTZ2d1YvZHAybVN0aUJkaldLSWpIZzlla2g2b2VadlY2OFF3YmU1RDVBb3RFZWJoaU9yVXlmUXMrdHZVVDZ2VGNVc1ovQThqM3VTa21Td2tlVFpGS0QwWldpQ3MrTVFUQ2oxZXdTZVlmSW5NWTZSTnVKbVZXcENzYUhYNXNlWFJSZjdVZGlCSXQ5VkNnZFhKa1E2OCtHazkvSWpRSlJBTEFJZXliMGhYOVdMQ1V1UUpsL1RXOWl2OXJ3em5GUUo0SE00Z1RmWFRPOXVVcEQyQ1NKTWZQMy94RUx2V1RwZkFlcWduM1VGemEwL3dlc1hmNVFSOXNjb0tIMndsWUNPRTg3MytmcG1JRHhrU25ySVhRd04wZlZ5Mmx4YlFnU0taM3lRR0ozUTJxUTQ5QlFjc0lQb2MxRVVUcExGUUFReHptdHd4d2pyYTJTL2xZR3Jjd0JLcmFpVWI1M1JXSm5IQWUxSXk2SkJaZThlMHpXZWc4Ylp1ODhlU000YmQydmFiWktyU0l4bWxob2NyMXFWbkd0bTdzQ2Y5c21FSEF3aDFNTnJCTlRMK2g0QjhjdVRyejlIM0lxd3dQK2VzQkEwS2lFQ2tkOG42MmFWc0dvb0x2OERFWVhUMWlTSU9ZREF6MFJxakdJMVZDVHc0c1dyUk1Ydis3ZWVoa3JHYk9oek5pa3Jta0FLTHE3VFNzMWcrcVJuNFFsZnJzV3NyNU1lSDYrRFRaVjFnNEFZaGlrYXh5VjkrNXVmSjFIMnIzeTREbm5SZEg3UHFMK3EwVmVIUHVLMndmSG9SRnZ2YjBONExjNFRlUDdQWHZTM0M4ZWphRktoeTRobDRyS3NiZjhQRzVNeE10NDB3SU5ZNTE4d0dlRUpDVlV4UGpUT1kvSWZsb0cvWXQ3UzFnZ0gxOGtVNW02Y2Q0R0lMaGoybWNtK0pCdDA3elEwdFZhQ0c4Wng4WGNMalpwdndUVGN0c3Z3K0JhMDR3T21Sa0VZY1RPT2cycmh1NlRYbmpRcEIzQkFYbmJockZxREw3MFdBV1RZWGpHcUM3akJMTWpzSndtMjBBNDM4Z3NjbnBBNDJTT1ZWQXEvby9TZHRBVUV0N3lQVWZGaWtheUo3cUZpYnptUjIzZmN4bm5PS21vT0Y4dGZ5ODZCU2oyaEN0UjMvZGdXa290eUVvV2FoMFZMdzJBbkFRdHVBdGFlRXNVZ2xtcmxuTjJ3S0ZZeFVFRFpVa0ZWTnVtbWdBT0xxcFRVUTFFeEdXZDlFa3JlYUVhN1ZKZWNQR0Zud3JvYzFMZFFOdUNtMno3RllpQjM1M21JS2dydFMxYXVkWVlTYWsrcVliUVZqUWluZjhJTG9iQ1JEU2IwZStDeTJUZ3lkdUNIaHQwSUlLTjJCRE1hK05pRXpnT2pRK0V6MVpRbG9SZ2piNVN4VkpodDA1RjV2eVlKdWlmYWpYampFczg1RnhVMjZ3OHpwcDJkK0RGZ0FlS2VCb1JDUGZGcWhiRVY3ZkVMcnFmbitKaCtaNnlHTHdaQ2dvQ2NhUGxBZFhoWXZPOTZPVVplTUp2bG9hMjFycUh5akREdEhLRUxMZU0wSG9pMStURm4xbGNnaVplUVZ5NEIydWhtT2YwT05PeVRXRi9yWVVsQ0c4MUZIRXllTTU3cU1zbVlVTWJmeDJNUm92ZVlQbXVsa2Rya1YzTVh1NlN4RFVTVEk5UkN5eVZuYnZPRU9LZUVrcElwVmhNRFZMUENsaFV3TCsyMlpXWkF1K2pBOVVQYTBPSGhSeEFTeU9hWlYzc1ltWTdtd0t0WnlpNWVtclRkYWZ6TzFWTGF0VTlva2w3VmlNMzZ1ZDlUdUlXL2FBTU1rMDhBekpPMUFoT1FDN3Z0VXUrVVhZMXJNc2JTVG9BUk4zaTM4T1R1T1U1UXBzWm1GMzZKb0VNckErU0QyaGpSdy9McUw5T3A2OEZEemJSVTZackdqZlBaS29xZlpENVM1RG9IV0dtUG9CU0JKUkZJVlhEVEVURFF0RTY1M21nU2I4aGpiWUpaOCtCb2VYL01vQzZPd3dHS1lhcVJJakJ2SDR1NEFGSnV1TXhhZE80YkdFYkNmbW1NYlJ6LzBOSVpCVXpYNnJCTEhBbGpIUFdkcFJ1dTNLMEpqbTFLRzhxTU9TYm1udS90ZHhXOXQySHQxTVpvNEVKQ0NSRHA1TTZIZThSZXVFdk1PdThtVUtKSGcxMEpBd21ROE5vYlZNVjdSem5JVS9GRThtcWlQZzhaNUR3NTFFK2JlMytDTFI4K0daeElORG1pZTAxdklWKzdJY2I5bEFjZHg1emYzTmlNZ2Z5Z1ZOK3pMaVltUldjNUlWalIraThJSTdleFdibHFraXFyTG1ydzRKWVdBanlkb2VvWmVnRkk1QXBRdGdSRjVMVkxjbUpHNXNKTk5yVTl1cERhcVNmRFRZQ2U3VldBS3MrWmlHb0pCbkhJcUZOV29TYnhHdjZYUXdVV2NLbno5TnZHakR1YnRYcVJjTkxpNzV0Wnpxb1hqMU50SlBtMDJHU1Z4R3p1SkxJRGxXeXBEenBIT0VaMDJxM2ZKbEZzZHR6QVliODFHU0YzcE93V1VLbk5vblR4QTB2R0Z6QSt1by9rb01QY2lMVG5NVHpadW5rSXFySlZTckIra1FWNXJqZmVOdTU4Y0JocW9EYXNCa0JSTTFDanlrVUY5MFluS1dINkROSUUwbWZlb25BblVQK2FGQUNZZU4rQmFWd3RsSUFuM0sybUFsamVUMnpFOEswUTBQbXBCRERIejRxcnI0dXNNYmwra3lCZjJtZjNuZ0MyOFpzMWtNZmVkYlNUSUh3T0VMdG94bDlKUG1jN21hemRVeEpjeHZSVTZpZHVDSGZnY0xuYmUwMUNPYlFVb3Jlcm1DWEtDWlFRQWNjNUlQTXdnS1lBZmFEcTEyR3h6ZnJVQnFPN0JLSVhDVU1YK0JBTnArZVAvNmlwMndyNXRWVFNXdWRISk5QS0NJR0JIQ0tnNjdnbFNIMXRxcnFzWnJvZlNkakx1NWlGUTFVcmxEZ2c5bE0wOXdBZ0kzUERiRHNKbWNQTXAzenJuYkxGbTRrYWc3WDhPQXZnZTNPdDMvem5oa2VQN2tDbzVPZE9PUFRXeEJYbDhmeWxYVnZqdjdPcEVnZ2JWWkFyWGlNM2RjNW1tV0kwZXlDR25MVlRYMmJMS3M4dU5CNy95Zm10T3A2WTBhTm5Nb1ZqakdITENTSDNTQzJJM1l2enRhVm1BUUNRQmZhTFgvNUpXb2h4aDZRLzNYUHdLODQ2cEJWeS9MbEpTMmdibVBERFdsU29aSzRZU2QvdmUzOWlkTzljM1c0V1V4NU91NHJQWjNSbEZYOVB5VnA0WXBFdVpKL1RpczZyRUNzUENQQTRKWW94Rk9nWDM3cHlaY3lOZDZQUTUrZEZ0WWgzWGdERlg4ZDhSRlV6a09ndldZNzNocFg5RUJIWFlYVWNCUXhPdzZjRUZIUGd2V3BTSzFOTjA4WkpSZm1udHNOdWw3ZlFQRVRhZnRwd0FTV00zdUcxUUFSdHE2U203TFNSV2FzMy9tODVER0VCUUhpSzV2eUppSXR5ZzgyZHpOcFZGbWVJSXJHYmhlTjNwTERweHpoU0svQ3dhRFBkZ1lYS0k2VW4wUExjdGVmSzVqMC8xN21Va05sRVo0RTlWMUlEYlpCYWw2VTl4YmIvM2pkRU45RnpqVFdIclFhZU9td2YrYXFMVHlRejFQVkdEOEVvS29TQUpWSjVKVDA1djFxdlF0aEtlSjVxSUhFZFNtazhpdVRJUW5UbGxzcFJKVWczbm0zalhOQXlIN0IxK0s0YWQwSGlOcDluY0xLNFZrV0NLMEx2dWlqSExmWW1NNDdER2xZbDIxdmJNS3AyMHdBcUt0WG1wdjNWeUJXNk1MNDZOTkdXNkU5QlhsR1pqbncwdnp3VnRXaHI4Vkw0bzZTUWZ2WlpWRjZyM0dIbnRVWGYrbjIvdExKMUFZZ3NtY1NhQ0xYWmlBZ1ZQM1M1OE1jd2g2WUJGbVhlK29LTW9uVUlUUzdLMS9zK1BYZkliZlBJSXpES2dVbXlmYThSMnZ0cnVobjUvOWJDOERrMThkZFUxeFJmc00wY1krc0kyUmhaRXlZb01PdHg1V1l4TVFUZCs2WXhGc05zSGRXSC9wbTlRLzBmVVdiQ3BLS0Z0QngvdVlNOGJUYWYrclpKdlZMTEdpM3k4UDVVb2xIWU9mcklXRDNGRUVqNno1YUVQc0lyM1VYYjNqL1dhVkFobFR0eklMQlNpZmd2M1JXcmk0K0VtNkNkcU9FWVpqc0diUDJOTTFWNmFNQnBmdHhNSnVQdnVVS09scXVJSU5nY2ZsZ2dteHRVV2Q2Tkp3K01hNVgzb0lKaEkvRDRReHRYdTRlYmdGeS9zYTdrU0ZoTlBHR2Y3VzVRQ1hoUndQaHlYNWpJRGQzMGRpQ3h5YnB4ZGpjTGFlcTAwdVdocERvMnF3RkszeTMvQVQwT3B1RzlHZ09XWC8xS090OEN3azN5MWcrRmZPaVFnaXNhVFRFbXlGT3FOVXBlcC82WTNOdE5vZ2c4ZGtJNmhpd2c3YVNDTnJXOWY0WnlSd0l4Ty9uMXdjeEV4TnB1SDgyWVl0M29iVURhbW9jZ0RWa2k1RDBGTWZMT3RWMFJjMVl3UVdMSnZidGt2VktrZ2J1R1NLaHYzQ1NhMjFKdkNFdjBjQkF1Q01tMFE2RUhlQjl2V0cvYk5lTFhTNUR4QmVqNzlaVVZibUxrUk9mK3g4T2d2b2w5TVFMeGtEcDFNUkJ3SjI3R0pickNiZk5wN3RqZlJRZWw5dFJwY2o0N2FMdmNKTVU1NUpnQVpEVXdleHc2Tk1VODRNNU4vd2RxZXYvVmFTRnRpME40MGxYbDM0b0oxNzlaZU4ySzQ5L3puZHNhRDA0TVdLNXRsZUJOMzZ3WWZMV3dmV3FSc2pGWXpwb0dDS096ZjlvcjRnWkFXM3o0TWhHd0RROXpPUXZrUHNqOWtmVkgxeDduckFWTUNSMGVMaGRYTUZnTzlOcWZIajNKcTNxb3hsaDhvbzJwWUFNWlVHUS9HcGtPZktBUjBENGp0a1pLd01WS0dGei9CSGZ1QWVQMFBhSXZzdE90VWJ2SEpoYkV3dzRYVTVYZXkrcHg2clNJdTltV2w1R1AzVHZ0R2xnMEg1d1AxMUxEODFlbHcxVnJYTGhwQzVLaTZYbWh1Z29BaFp3b0J4cHRzTXJKM2NXTjFMZ2RrTGp6UWw2WnpzYXplWkVBN2NGRDBPOU9mY3l1TzNjcUcyWmRoWEJ2enBSTGQwY0ZTME1uMHRRK0dtcnk2Zm0weFdicmhXbnNrd09FRmtZeHBUV3ptNWdyZ3VVZmhKOHJNSE40dnlrV0l3STQ2SzVQRDZybzVHNzlnTWhtakN6ZmQyT2pZMnE3TWFxbnJoYUVzRGl1NFFybGsvUnI1YXNYRDAza3p0QWZSdm9MaGN6ZWFSWWRHM2dsQ3JBZ1gzN1FjQnh0NVhxTzM3M0hwMFB6MDhnMjd0SXdnSFgzdmZyVk02aGJiQlA5bklybjJRcTVxL0lsT0w3VkpuQmE3Q2xuWmx2N2FmdlBkVzJuRmVVRmgzVHNGd3QwbUxvOUtvOWJiK2hPeDlvcnFKYVF4bk9tNitUMlQvM1k3OU1iZC9OTzk3dHhvUzdNWHN1ZDNWZ1c0NWdmSFdzUzlkRktOMmgzdFhKakJ1MWdOYUlvYTlEaThiQ3dDUjV6UGM0SlJIS0UyMUprUERZdHc5QWlpVjBHUkszVXRZc0lOc3JDZ2NaRHVyUnp6dlEzNURyaVRIR1ZxL0JXbFVyMVh6YWIvaG9vcVdnRm1pamxzUFFEaXZ1d1VzTU0zTWIrUU9rZ1NvVEtqRWk3RW8rY1ltdHF2WlBRQUYza1VqWTZldEhFTDNQR0JmVHVhY1dxaXNwdDBpd0dVdzNaVm5UVUUxY3hIZ29lczJOVkorWkM3dlkxSTkzWVlZaFpxRVNXMnk0ZlEyMXc1ekU4QzJNcGNJRzRuK0RXek9EQml0N0hqNVp1ZVR3dXZCbkhCbU5rY0lHSnluS3ZINEkxVThyVjAyVUJyL3hmODl0VFRWY1c4ZWVJMkRtQlE3T3FzWnZuK0NwTmtiRXRMclR6UWhUY0lYU3dhbEpMKytZeGl3Mjc2ZkFLRm85TVBTVmNTOXVvL2xobTVUZ2pVN2xhQllFVE5hZkJ5djZsZDczelNEakhkUFM3a2Jzd0p4OUxvSGNTMTVvQkRMZVFhYkIxYTQ0M2hWam85RUloT2Vsd09TUmdYcW93eFFPTTQ1YnRLTit3czdNUjdndmtOakVIdVRFMnhrVDJmblU2MDRjL0ozd3RSQ2QrbFJYU0p0dmp3VXdGeE1jR05mc0hRd1pRQmIvVy9heFdYeGF5cUwzMXVMa2RZU3p2cEhQY2dpc1dqYkZIdUF2Rkg2QUVrbnlJMFI5N3dadHhWWDBRWWlubXBLRFRhSlV3UUFnYXQ2OUFVUldsQ0hIaDNCWU0yekYvRU5heGJBWjA3cWJ4cmtDMjV0bHdYN2FpZUlpVGNjRDRWcjNpTkFpdkszTjJKUSt4VGpFdlRXM3JhejN3Zm9zR3I5eTZHanF3WFZJMlMwekVML2cvdjlpV2hGTWJ2Y1NaeHNKamcvWERXWWdKQnlDbXNpUGNqTi9lTW05NUpVNng4aVlqZlhRY2gvczV1OGpraHlNKzV0Y2YxWnRVekdOS2I5RHRsS3lwclBqb2xKaENwNmwwa3A3QXIvNElycERVS1VnRkpoYWdXeUpMVHJDKzFGMU8yVEpvdUk3WEtrVlc3dlpKSzdaSHNZOGM0Njk4S252d2hqM1N0OFhjeHpSSjhSeHhTUFB0SFVzQTdRaWRLKytUWExuRXdsMHdxVjROZjNaWmxSdElpdFZyYnI2cVpqTjBlSzY4VXQvaVJIUUFEU2FoOWJXZDc5MVczMmVudWhkTEU3VmRPMDV4cXA4RFB5UmhMc2VOMzVSRElnU2FrK2pIUnFoU2JDK3Jud0J4Yi9iTDRmS0x4WWlyaXBOL0ErKzljSnRQbGVWRm1jUkRjR3d0eUE0WklpbzcwdUJDWFYwZTU5OXBKb2xBSEI2Q0VpR01QSWpqdGpGandEem5rTWN4UGhRU2FnZGQweXkza2hKTEo5SnV0TUpKNURBYURTcXJxZWY5bDVvVkhMNVl4N3FiMDRjMXhPVmhrYlJRVzdOZkppeGEyc2ErWWN5OGVETXFLNzZ2eVNBZ0wwZUZHcTZkajBndk1GVHEzMTNROGJuMzUyMXlCSlRCZkhvd0dNNUNURWdGeitLWi9BNFJCN0hwV1k1TnFkNk9IbTNOTDExZjNQeDhPQnBNMldkbW5IRzBJdFJRTFFvN09acWJpdlNybXVKditYQmdiZlIwaWRqaU8xMFJUWXlNV29GK0RUbzRUb2hNWHl3NEVOK2tPc2duVzIyL2hkNi9Dem14c2Q1QTdENGR3VjBmdE5tTkh1MEJSWC9IVitjcnVBd1BZUmo0c25iSW9YK2VOeElVYXlrcE5kbDJ1dWVkSGsyVzlHdGM4TmN4WkxWdU5pTDZLNm0yQXdkWEFpL0IxQVdiWGFCUDVzcXhOSklNMU5pbEpyOFJ3SFFCRFpFVEVBcnhHVWlVa2RrZmo0WjJVNCs0ODJoQ1NzYkRWV3gyY1pad21EZlQrTThlZGJjdEpzTWxjekkxbU5jbGdZaUxDSDdYekQrayt0L2FMeUx1Z1lWaU9DWWxLUiszS0h0VUx0RjhRdVFOQ1hyYjBkTG1jWllkVyswN1BtUGVveDRna002R1dFS1JKZFlON0lkY2d4aEFwVHJCNjVhN2JUSDlzMVh4d2M3aHhpRE1IMmdaOUl1em4weWl2eWk2OVRJR1J6QlRDZDFEd2JkdjJURlM5MFJlMGVDTGFyUG1aVWwvb0hUWkxIeUw5eEZYNkx6dmh2T1V5bDZtMlFDUXFCUEFBMzB2OW9iTExTbXpwMnMrTU1FdllZdTdwZHozVndTSDdrQktQazZLL0N5K2pvM2dKUlhlMUJQeW5qU3MrZkpoYzJPL29sck5oL2JDQUNnVUFsV2xZbmNTRTJQdHJoOGIxVGV3eHhHOHdraXViQ0VYRk9NV3RJeXFzcFhaa3VpL3ZqSUR5eWx3R21wckV2dkdwM3paWit3RlNJWEpXRGpXUHlZNHBOWEdWaTdtN0xSQ1o4MWswdFRMY0ppQmVCakZvMzk5ZnFFaTRRKzg1enh5S203YXZ4VEJsVDMwUVU2Q2F1MFBvbEFXWnFVTEpCaWk3b3BDbXpVMm1yT3ZIRHFuOHJGNzFnc2NsVXkxWnduY1NvS1FsdmJZcGpzcEt4b0kyMDJHYkUzL3JlQ09HK0NvazlucFpBR2Q4cEMwL2p6U29hekU4OHJNZHRKM1BWdnUzK2FnRmx5VVdHV083V1VxSUUvWUUzNTBNQ011Q1RMNmZpU2U2Vkw1TS81V09Qckp0MEpDcGFSeW11WGo3RTVuWGZ4NUFoTWdienZWK3U5dDhhZlNNWVE3S3NSWFZKNEt1eThIYkZkamVBcWkxTnVhZm9SYmhTR21HNjlkbnFQdzhCcktVRUR4N1lTaWl4RTlpVERyc25UeHpkbXc4UEhHNGdDMXNPRnhuenZyZE8xSS9UdEN4NXhyOEd4dm5zTjI2YnhzNHdWZmxmalROYU1RYUNOT2R1THZPbWE5bnpzMEVla2lhZ25rd1FnWG9GZDZESzVzMHZnZllqYjh2RkpHRmpsUUpNSDQ3bk41eXZqWkVFUkJRcmF3bTFXMFlxamRsckR6ZE5yVm9kend3NW1ZcVRGV1FuODdZOEhvMzNwV3c4ZDFycWp5WVY0aUd5SC9peS8yVERaaXV0ekc5NDg2aDVDOVlkUTlBYmJFa2ZISW5qbTZLQ0VUdmJLRnVzL0VhY3RFT2FoczlBbmlkNjRaTFRqNmFXejVIRTFNdXFZSCs4SzloczhOYlBvNWNtWkNGOFU0d2MrVzU3Z3ArME0zZDJlbG5WUWtNYTZuN1VaM0pBMTlKeUtvL3JEL2cyK1NpZnVQSmROV0N2QXRSdHdGRjkvNzJJWkNQN0RhWFBJaG9FMXFCOUJ1NW9aOUhYdzR2U0hMNFBtVEN0NHdzZS9rTElFOFByRXdSNkxCNUVkNzdiR1NoWU9uREtjRkdBcmk3QUtYSXdpMCttdy94QXFpckdDeTJ3ZmxJMWN4V1I2cUtpdzRFcGxaSEorSFIvYTRSUW1jQmdLL1JWcC9VMEFYOFpaa2JiSGNjbk0yRkw5bWIzZ2xQbVFlOFJ4SEh4bWFYM2t1NkxDZzZyL0JGR1dxWkZpZjRIOWREZmJjcUdaVFJXUjl0SGNnQ1IzNUQzai8yWTVkcm1BWnFMR3F4Q2w3Wk8wbTZ4UWdjZHB2OEN2UEs3SW9sYXNVKzc5ZGVHUllPMEhEY211bU56S1UvQzl3Sy9LMlJJNllsY0RtdGY5YzVLTEh2YWZTNkowK2xvR0tCMFJtcnpsN1RqWXg5bnhKNmk4UUtwNE5WaXJkZnFFZnBYckdsWnF1M0RDYTY2a0RrckhZaGY0N0VIbmZnbXgwQ25GczdWUFROUUZYVVo4SUtkZnJtQzdPM25DK1l2bk1PMFFaTE9nTk9UTTNORHRoN2xsVVkrQU5Xd1BOZE84eW5zazQ2eDBxdUl0azNWcHFuT2ZiY0IvT3ZsVnNjZnc0bnZOS2EzRUlKWEloejZTYkJjSEFQMnRVR1ExSDZHUU9wdzhoSGFscVgwYUg0Y2tvRGpDZndrS0x1MDNuSTlMYU5YZ2N0VGRoT2N4WnlwQUN1U1FuekxlY1k0ZlltaXRzclZmaEwwdUY0THIrTXJYTDZocStxMjBUQmQwMUpsU05nN2RGb2lPdi85L0F0ekk0a1JuSnIxNmk4enk0Z1g3U0pwQWsxMzJkclhITE1lckZuSDBlYkpBNm80THRVbTk4ZU00TFBXS1ZmcC9maHJNS2NYRmNPQUZtV3lZL3VFcmZZcUlPYks1Zm10Z1R5NzJtNTVsZ1BSZUQ0WkRFamZUNGUwVHBRS2FYOHJVWkFtM2h0R3RJbGtlTG8xVWx6YnpjVGpyRkRuSWFrbHNIU0c4RldvUW9vSUhsV0o5cGFoZGozZHJpb1Y0UUpxUUlMdDFSQUcyZStveWdkeUp1d2dNWU1sRnhITGIwTjN2ZTFCbFVyUXBwRE5zdnBkUXgzU29McHo0UW8wZVRzeldsNjlkSjFhTEg3bG1XcnY4TElxZk5vc3NrVnQwdlUxRzNQaHg1cHlWUWRqek02VU53a3hjeG5CcXE0YWtaRmVYaVluWjFUL3FLMzAyYVFGeTRvVDJoSktaQ0xWUDRVZEkvQmVsVmNKQWwybSs1bVd5QzVPVFMyYTFjVTVvMGVxNFJyQ3JLREJjRW1rODJuQ2RhT2JPejcwMTRENi9sbGhwMytXUU1VR0pZUTBzZzhRcjI4RGFtNU9rR2lMZ0xVM3NKdVZITjZuczJmbEpIRHF1NytYcUlnMnF4UWhtRUk1a3ZlUHhqUkVRVHUrWEllK0pYdjNvVHZkd2I2R0lIYTJ0YTM3RDBzalhoUVUrV3NDLysyTDVLaGZ5NVJUNmhjVkNBaWdGa0JZa21XeWdrM0FGOXJQeWRvSFFyVWRzTmhRei9pbUE5SStTQ2RZTGxxN1g1bGp5SmhpNkpQQ2hNaHk4UWNHSnkrWUJrc3gzd0RvZGgydG9JenVjYzRwTVFMajVwSlNYaHJDZTBqQjB5WlNkL21HSEw4UXlTcm5aZ2ZJb0FQZmZCTkxXYmo4dGNHc1hDMDRGV0FJYlpVbmdaQUtwMjNERllEb3FrMjd5dXBsRzEyeWM4Tkg4T1hMQmhINWNRVWF3anpqN2cxRk9lUmNkRlY5VVh0b25yS3F2UmtiNEdveE40S0FTRHlDaUFMMzM4S3dUM2dkaUw1SDF6MEZZazZvaFlZUlU0b2R4ajJKaGxjMGF3UEh6eVpEcXdiS1lzUUR1Q3pUUHpXSURhTzdtNFZGeEYveDY2aVlLbmM4YU1xWlVkY25mTnhCTVBSZ0RDZ1NTcVlMNXlEdDVWejNTd3VDMXRONkJkNlhlWmo1a20zNm9XYVgvSEM3YWF4bGlnWU00YUZRdnVvMmZXYlNldjlydFlJb0RVMkFHU29lbHAyNzRvbkpCeXVBOUZpZnNDMlp1RytnNU9FaU1pVXEzL3ZOeHMySmlmcjJTaG9kVTllOGltcDRqYnplNEE0Qmg4SytaSWRaSC9Hb0ZUa0J0cTBXTHc4RkhhRFVaSXZXQ21HSGplVUZJaS9PWktibkR0M09OcFhVaGJmRmFuUHV3c2V6TjRUTTU4blZhQlFDRTd2Qm5ibTNHVldnUC9JdURhbU5BcmhCcEt4Z0cxZWNFM3c0cjFtajhQb05FK0M0d1NnWGZsQWwvUTQ4dWUzUXJ6OXYrRWEzbmZMSC9RUlczZ2ZoTVBqSkRQcTB2SmIvbXBWUkZyenpGaFBBaHhTcTJzOHkwV2NIenFGS1hQYnNFdE1taEl2ZENOVjFiWmh4NmVpWlI2bFBoV0lsWjhGVGcxdE9uOEROQkJwRHU3SWllNGN1ZWtJcWVQOE03dDZhVkp0STR3Nm5LSnF0RlMwSWlkMTIrelNLZ2Z1WW5UbTl3RlovbDNwckNtVklHZThmaEhsb25iWmNPU3FZQjN5M3kzejh2V0xad0tYa1dKMEJyUnM4YTBQNis3M2Nnb1JQN3hJM2tzWWsxYStoRWV3SGprZllKdlZ5ZEFkOW5NMlRWMXk0Z3F3S1czUmJzTGhSaTNTUTkrU0VGVkYxa0JZZE9kL0ZHTm5KVENEWFdENWJiMG9sVW5ob1M5K3BEODRNa2RpUjJOU3hjRWNDQmI1VUI1U0xwRDlQbC9UVENlME80OWNnVUdvSEtIY1hIR0Q4MVJnaWxaWmorZC9RcnF4UjN1cnM0MUhkTDhPTGg2SkRPVDk5UDhrTjBmeENsWjdOcUVZbkJnaDVDTWxqVVh3TWlRd21aTnJSdEpmbXloZUZrWFhla08rUmRLWlkrRHBwNUdwbW5kT1l3UklxTlFXOWU1elVjelB0ajZwTSthZnVRa0NIT1BQa0RGWVFqTloxV2FTZzFEWEdmeUxsLzBtdmtvTzVFNEJkQlJ2U2p1K3N1RWpNODJSMXhjRkRtZDF6M1R3WEhhbnRac3BpSndjUUZHYUlzbVFxOC9EWXk5d1N5KzBRcVB3SkRkcXM3TGtBNW9reExyMDUvTldLeCtXaGZwVEdhVVA2d25QS2wwdzBCbThKNTRuSUUxZGUvQTNaYUF2dzQ2clcxS084TklLZmJ2dXBRNlNGY3pmNy9IUTlWYithZm9QbWZlNUdPUlBFcDg2K2ZYR0RoQ2hOMlIxTFBsOHQ5RFJzQWpmMEd1eVRQNHZQbE1zL0FQS3Z3UVhxM3Z2dXRMVGFZUnlxdldZVkxNZm5iSW04dC95cjIyWFBsRUJsZENWc1YrL2RxSDFTN3NldjNIZGNxUnFpWTlhRUNmSWpQWXVTa01FNE9ha2VZZkR6TzdqR05RalhrbERWa1lsODlhc2J1bXdQNGlYU0tqSjFCYmVOWDJGdjMyOER1VERlYmF4OUF2NEZ6d2l4M253ek1IbVpuVUJMVmtmZDRGeVVCaUs5T1AyYlZXNldEblNCeXl3NEtSZWxTR0JyQ3V0VHJtNzlEbno5OGQyb1hQamVlVkp4ZEhqdUZZTGVFSGQwR1E5Q1NKOFk0UlJzRmt3TE0za2R5Wng0QzJGU3ZFWXJGandiR1Zjdzg0cDNiUEYrdmhzbVQybmtIczc0RU1zY0NuY3Q1VU0raFVXMHJUWnFaUkduQURwdHNNaVQ3cG9SblNodjdXYWpyMFpFMllKS21aejFmVXdzYWhxNUxodUZ4WnVqTnpRVVBJdmlnd09jcURGQmkrWTNuZDVmdlk0RDdBOXlSUFlFVXQ2ZjZ4S0t5dWp4ZDRwSUd3anp0ZERxSE9RaElJNzNZWjZEbk9XSmZWVmMvWmo3eWRCVFNPMDVJV3ZxRE5WZlRoZWRoWFZHUEd4ampVb1Rzc1BSeXVLeEYyblB6T0o3dlZoSVR0c0VzcXEyM3RjZ0ROaFBYeVFjL0FkNGExK3JlYzRpU0Z0cVAvVm42RlFWMUY1a0RHcmNqN0gxRkZtL3I3QW41QmNGdVJ4L2h6L21FaUt0UHRuWTVQbWFKeWpCbVRBYkZOVU50YnpJc05td1UwUVBvMnpRNGhKRkJSaXR4UU9EOTBhMjRERU42eUpMbzMyL1NoMTBYUjUycXVsbVpXVlp2YzgrYSt1bUNBZDQ2ZnhiRyt4RC9Scy8vTzBNSENEQU4va29JSllabHlTOXh5WSs2VlhESGlxSXUwdWtPWjEwRzhrVWZUWVFpdGozVGtrbms5TWZETzNCTU9lWWtYdFlmRzdaV0FWUXM2UGgrZWtqanREUFM5NmMvZ2Zza2xlYUpLeHgvVnBuRFhkS1NPL2o3QUszZ3l5WnA3YzhvTjIwT2h2a1NFWnVIbVBXZHZWaUZ3M1hyZ0VhSWdQb0pMSEE3UEdLYmFydUl5dkdXNFYzeVplOVZzYmZFaU5veGpEc0FVNmZCOWhiMDlUdDJwN25sM0x4Wm9SY2pKR3pPeGtQeWtjcGVhajRmSU55NVp1UVpIeDgvVDZFQTl1Z0hoL1p2VVJzR2dXLzBtLzRLYlNzSmcyRUN6UXErYkFtOWZqalozNWhRUkRXWWNkbmR6TEg1RXJWeWhiZHlNclU1WWJKUHc0MmR3MTZ6VlpDOVMyemhYSHhzR2ZnRHJiUkJGSTZBRzZNS2ZURVJjQTlPVmk0NjRyQ1ZNOThPd0M0NG5SMlk0NzhiZy9BMUh5TFNCUlowc0VYbXpYaTF0VmhVVUl4Z09QVWFGQUxTUlhvMmcrRnY0SFJsYXAxYk01a3BucHBNUlJrUmQ4eUI4UDFMak9JUEJ5N3l0NTRqRE1jMUp3Mmo4bmlmZEkwRGRVckdHNTUvTEVmRFhvcFlITXBWUUIwenhmYXZjc0RnWVhtZ3pHTUM4aW1DRnBZSUFXMHJMaldydDR5b0pMcmVkS0diY3poYVFjWjZvTDdUN2gzM0lER3EySXg1S1NURExBNGJtQm9FSFVaa0VDa05UZ2d2N3RWUGE2SWlMREVEL3ZUOWhyOFhwbHJNSWtXMUxhQ1dadmttR3Q5UkR6MEJsTEc3WFY0c1ZXQTZZSlBLK0xVQ3ozUHZKUDl6dE9DV2g3czVBYUNSTWY4cTRJeTZvbjJ5NUJ1RGI4QXIrcXVuUGRxdjNJVFBGeEV2aXRMcmZpeHhDaitERWNlVW1ZcEZLMWxOdE9wQmpXZEk5dURtSHNhWlNYZ2dCZ3ZEaEJSMW9qWnlRM0xLei9naDUvOHJGcUs4ckgvZ1hiaVdka1dmUUVtT2I4RDM5b1ZHWW9JbUNjU0NRUGI2N0x1akpJN1MzS2l3M2tPejJDbzJNU1ZaUXdoZlFMeDZWSE1RdkV5OExvdFJKbVp4N21mZ1RWeEVGSEZnMHBBQWRMbFhkSlNSZklEcUhQN2kyUEFhcWx3Z0xtVFdwTlJTTUVuSnNSVnl0TnNHZWxudFBONUNxbXhqamsrbExQTVMrcUZmcjVZK2lrcDljMTZJcnRtREcxZ20zN3FXTVNmeFMwbkZ6ZUluSmRsSGo1SytCNGM4NjFQRm1KbzNNODdnQXRQRWR4QXVrcElZdllVMHpGUTNXOHQvaGtHaklJL3NvbVA0aE1pbE9tQTIrdkRuY1Z1TDdDc1VzN0s5WG05QkcxeWlnejM2QzNuZHhPWXhlaUxxWkROZmpzZ21XSDYvRmtNWnJabVRycW5wcGdxQmNmdXpVamJzU3NXcDlaaXVMMlJOK3krWGtyd1BLUnhZNWNzRWJ0QSsxWmFEZTJrdW5haC9Dd3NsLzE3TmhSMnQ5eE4xMUJlUnR2bzd5MmRTWFhxa2hwbUw0Qm0yU1NFN3hKcDJQcC9RaHFEaFJiUGNEZCt4bXlYQVBaUFd3MmNjeWE3WjZLSWVMdEtNM21aRTdlR1Y3bTUzdkZLakJWdU94bVBSYmNMcGsvaHVHOTVIcFhWNDFUd1lmbUhNcmFhallod2Mra25JMXFWbVpVZ3YvanJXU2VoelVwMEJ2d3lyVmxSSDA3WmJueVp2N0NXcHVxTVo1b2x5M3R3aTlzWmx6TUEyMkFLeGVPeFRkNlR6Nm81MkhVZlFXaGl2SVJBQ3o1cTlLQk45S0JRWmprbnBGYzNXNzFKd3pKa0pmWm9oQlJ0UFlwWHJrWUFub1ZPVldodnBQaGhPQzlzZXB1NHNRNGhzMEtidHcyRVVTN2R2Vmt6K2l3UFFOR2dsay91RGlaQzVxS3p6SFZuSStNTE01NWFaNWxDL0FXWWh0SC9NdVhNZ01mSUlTdjlIaDFkTENSU1EyNHpZM2tXS09XNW41UUQzd051WGEybjh2aUF0Z0s4bUQzK3VKUDkwaWRRSE5La0tGVjVNR3I5UnNtcUl0NmxvMmp3eU82RS9uT0dNY2dTb2JPMWJZMVo1TFlaQm9VVnNoSlAyWDljazJ1Rlp4LzR0aFk2TEh6U0luSXlUMWxCUnRHUlNVa25FazNkSVN3RGxlM25WdzhzdWU4b0ZOSG9mQnUyWEtzVXlIMnJDc3crNlJScTh0WTh6RVV2cVNyNGIySnhMcGJEK0ZjZ0dJQXovRVRBT2d3VmUrZmRwd2RiUk04TWJBT0dKREhpd2FETXQ0QXY3Z2pFMEJYeExtM2VHaUlzVTNuQjNOaHgzUUl0U2ZXeE5HM09zdU9nRmdqQnFyQk9LL09FQ216RnNxZkN2RGRaaXVEeEQ2Wkkyd3hvMDVvOG1xdlFlY2lkZTZBYTNtSisrWnlmd05qZlhwMHVpa2dQY1h3UWpHbVY4TC9LNEFYQVlycDRMSWFaUnJ6YTFOaFNQTmgyV09zM3hWeXFMb2lBNEJ2R1VUR3N0aTU5cFUxSEdHQW03Nms2RkpTMjMrSjdBUU9WMXFFQ3hPckl1QVBFNUNGRjhIWTQ3b1BYL0tDd3I4Wk5XbHNxOHYxOGc0Y2tYbnUwb1ZXNTk3WVh1cG5yMWd5Y1k3RVBWUktUWm1BZTA0b1RJai9jbzZNY0p2Y0tMUFh0ZE9vWTNNWVVkUEFvS3prc2ovVEp0Rjl2ZzB0ditwRkdSNUhpSlB5aHc4Z3N5aUM2VlJVQy91eVVvcDB5YlRqMzdLa0szZjhlWUtMV3FsVjUrVGJEV3I2bTBLWEx5cXhDMmR6ZDZyT1ROWDZYbXRIczUybFgvWUppMk40YklNSEFaTkFIQWkvT3RITC8rMnRBVTNuY0U1Snp6VC9RZ0cvejQ3NGZiUWxJbE1WcnVFeCtDSTNOaWc0dXhwUzVQa0ExZk1mSTZia1ZQWStQMTM1RFpmMnREeVF5eXArRzZycTJxUnZqT08xN2JTSTM4aDJ4TnhWNmdIS1BCSHdJZDBBRVpqbis3cVdFK2hFL2gyclNMM2JSRTk1bDRIblQ4bmhPMTNKNmw5U04zWmhKeGZzeXptSnZSMlR1bHRRMjhROEpkYWZ5RTFGWno1dENXYzMwVUtvRDB3cFdPRyt2THZIRFdLd2p4cHZWNUtwNG5qZkx5cjZYMkM2TWxLdEYweXNyWTRBSnM1d3h2UjBiS0Q3dEFGWXd6dkpyeDJkU0tyMG9OUmU3UUhrcjJhSzNEZDh2M1N5VHFSbExmWEo4UUJ5S2J1ekxoYXJhNkt2cUsrQlFwejVkcS9pQlg5aXlHekNLRjd6ellhc3draGRZTjljMjRCZHdEcCt1WGc1WUtNSlZYa1VZbERLVDE1a2YwOUdVdnBPS2VwR1B2R2VqYTdkVFpkUzNsaHhLN0ZaUDRGS2VUc05wZ2wrTC9Rb2o3eHhJM3ZRcExlZURjSVVPdzFHNUtsdFVOODczMmtha3FWb1VlVXJhdFhPeDlGWTJHaHVBYlpKM0ZOZHdYUUpQOG9EZ1J1NHJ4RDhURFJJWEtaYWQ3MGJNR2l6Q1ozekxIUWNRWUs0Y3RrcjBEMzF3QnNKK3FML0ZqMGxGdXA2NHc5V09BdjdJaEt5bFQxejdJbEtGZFVhZXdrVlFsM3o4a2ZkWERTNGJ0TlJSdXREQWZSQktrTmtzL1JWZmhyTVBYd1lNSncwcjN3TWpJUUpHYXVqdkJqd0xONXd2dkl5b0lKSWovTjM3Wi9kLzdRWkxQVVBZOHZqTzZqbkJ0SFJyV3lEUWJOVnUxclFpVjVSbGpnOGVWc1ZqYTBFdkFiOHdIVFliUlN6ODY0UTlUVktySGlJMjhMZUt5MFJybkdZdHFIdFNPN1VKUDdZbU5aU1k1Zi9JU3loWmJ2ZWZ1SXg2dGdweWxVWTlVWW8yMHJQU2lOejI3MnJoYlptRXc4ZENkRUFBcmc1RnFvOFJBSCtmRnJDa09la2x6eEw4bnFmVDh5THNjQXNUMjlXc1FLTkx2Z0VLSTl6STN3NTJmcjZRcGk1ZHNZemZ4eHo0RmVYY1UyeUxpMk9tV3RZcFVTbEJpMUZvQ2piTGNOU0dmbWFOSGY4NE9ZZHZUdnZtWnlHK0w0eHBtcDBHOGc4VnF2aTJXcWg1MlY3OUJ4Ykc0TkcwRk5CUWN2dkZmejEvWlIxeTlpZWZ0WDZIRTdkaXFqcHVDN0ZuVWtNc3NGdzA3N04waHlIb0hJZjdIRnl4NHVjUkd0cm0wVXYwZkJMQjU4N2FBd1hTTjFRaXBUTkp3TkpmejBxTmVLK2E0MGdKTnRuTm1aNThsNURkSjdpcDdSK2VQb0REVzdpV0duSjg1ajhZaVFORTR6Umx6cUNSSW1xUXVxc20zYTUwMFlLZmdPTStjSVRqSllWaExYNTNRQ2pIenVDZTZWOTZkaEFXMk1TVGZJRE9hdzMxMUZOZU9tN1ZFSHlaUW9OOGtjWHQ4QllUaHNNUUY3ZUdhL2Jpc1REYThWbno4MUNaMXFacWUyUklNVUJOVGpyUkQ5dVpMb3dNWEF3N0c2Y1Z6OXR1OEM1bk5Od0dvRHhKcXM3N2IzQjlGVmVUZGpXRzhlME0rMlpVQWVyeE1icWtoNTh6QjRmZW4rRUUyNEk0bEZmTnlQVitKOS9HdHNvOVEzU0FjNzMwYXUxUS85RW1UekFWY0ppNWRRZzlUM0E0bEo0d1dPVW9kendBVVBPWDJ0WGtwL2hITnAxaHRHdTZOMURBNzZQcTkrNEc3c2prQWJGMCtHd0tVck9WOEVEelp0Y2ErZFZuTDZpdmJ6RElkeWxRTnZpMVQ4azFKMW1vQXhVa0RGQkVtU3hUSmp1QzZXS0J6VjZ0Ui9GdEE1RzV5NHpGR3ZUSzhPRWpwVlFJem16SHdXZHJ3SitEMXZmMHpmbEdhSXh5Wjkra3BhdDN5M1NxR0ZGUU5BMWVXVGhjSkNkSFlNWEpNaDhOclV5eWRlZy9oQS9tamJHL0tKUGx0RzhhSVZ2R1hXRFlxVFhQMHBOcHhncEh2ZGRQdXZqbm1ZdXZGL2dUa01jSWlCQTlJblRpWHJpdFYwWWllTHREZ0ZrU0svcGxyWkVxVVpjSXlvcFdlUGtMY2M5cHdwS2k3UEN5VzA3enJkcWJtV1ozK01rZFJrNEhjVG9iMjZUSFhtN3FveHBIaDB4dTV5Q3hlV0NIWUw1M2hRbW9PRk12bEFqaFdpTm1ocVYzWmVTUDlOdnhFZUdNdi9NSzRzcWdzVUFuV0w0NmF0ZjJVMWJZYWVnbFA0N2VsR0NsTXIvTUNpMGxiVlNqNk9SVjBuc1lhRTVSN0JTd1k2bUV4Yi94WmxFU1BQc2VHb1k3WnJGZHlvakFJWU0wM1kxSUFRVlNaaWpzTGF5REx6YnYxczFDbnBRcXh3RUZ1OG50dGVrYU5OU1VKbExTRW1qUmh3ZDdWd0RGNkhpWWV1VmlwaTIvZEY1M21GQUVsc0dpN1dnQTJZSXBSWnpMQ0g5UkRtRHYrbFFDN1lnTkpvR3J2dXBXSnE4R0hGSmdHNXBCV3lBMk9rSTcwem9zWlozWnU1R0dwR252OEt5ci9WVGxlclFVbHlXV01DOHFObVA2NzA1Y1kwVTMxRlgxRVlFRUdZQ29LbmgyWjRIdTRXVkFWMFNRMjdySlAvR2dRUVB5L1VlSUdLOXpvd0xhZ29vcVZNZ3I5TldwVXY3OEdhdjZEVHJ5M0VFTUNBUDZvcEkxdzYwRjkrVlhPaWN3ZEhBYkl0WUY1MlFDcGZZZ1NFV2s2TnBLVHpSSThOSVU5MUNzU2t4SjI2TWhnYmZlYlB6azN6Yk9FeThjYkl2MEkycTR4Z0pGWWYzUEY5VVBpaGRlbS9lT1pMN1ZFdVFZV05DaUJRUEMyL2dCK3QrVDEwb0ZqZm1EbWNnR3p3c25jUnRITW1MS1RhN09ic2dzWG0xY2ZBeFdLdVJBSXQ2MkpwNGg4Ym13STdwaS9EaDdQenIzMHJoS0FTdmpyS2N6R0dEZkwvbUg1a2VxbnlSK1FGdmNCUll0RXNRQnh6cXVDUWJmTnQ2anIwaDlPZUF3cFlscUtHamlVdkJGRVp1eFhFR1NSUngyUUJaUG91NEM4bnp2R0xYVnRHZ3p2K1UzaitGQnFjWDZIZGJCcmN4ZEt5bFNFWVRPSFVCVVUwOHJqTVlpek42WnFDVnhEY0tBV0ZqaUlzaGxSUWtybDRDWlpHcXkrbkFacUo3dlYyQ3YzTVdQY1FmZWhpeDZmd2piOXdCR1BDNmt6SHFWVU9CVGZrMWQwbWIrbE1MYmdsYkRlaGtOdnVCdEgyS21RVG5hcjVLR29veXRDNFFKTzQ4Z3JpcDJKNFJDZlh4UEg4MlprVm0zNnR0MEVnSy94SW10Ni8yOUYrYnJXSjlMYTg4RE5yNTJTalQ0WkJIWnRiLzJVcDBiR0p1U0Z1aXduS0JsMXY1TzJJcGJMZUFWWkZKV0ZXL0QxckZoUGNuaG5yaStpdnZsa3dpYndYMmN2WlZRR0VNc0o5aXR5d2owQUY5MmdBZGowT2ozeEVyclh1aC95cjc5aVR5N2l0dkJjWEZzdTUyRk0ydktKNzg3TlZSRlArNWxXNFFsWE81a1NFQ2Z3NnFKTTUvNzBHdUZFNnlWTmlWTVUwU2pHdEhlOUxwU3JwUi9FcDNhV1BTUTBEYVNWM2ZwL2lJS2UxRUhqclFKdzFSS3BGb2E4OE81bzVkem1BTkhQTy9YRy90SG94V1U5ZmJ5T293ZUlNRm5qWlBYc1ZtaER5NTRXbE90eFlWSU1udjR3bURVUk14NDhob3Azby9Vd2lweFIxNGtvdW5IMEhoMDJlYUFkTE5zc1BGUEZtaU5qR21aZWk3ekUyTHhpN21xZlFBMzRrVUxqckVzM0JLQ0lNNk1TMncwbWVqL0ltQ3plc2ZwcklmTU9aUkpYelU0MGgzRjA0NjJ6YmVwYk5xc2ZjMTg0cWFSSG9FYm9kRXhwK3BGaGNTWFJYSWtzQmpxTm12MUhiSllheWdBaW9lOG84d0ovRm1QUlpYcmFZSVlQejNReXY0dktzM0YzSERKSXljazFEVmhLNFRMS3cvUnZDR0Y3aTFUb1VHdnBDVXRuQktkT1VOZmlHa2hDMTNQYngyYmRabE80NGcvRlhCZzJwMW1URWR1TkEweFZWNk9jLzJKTjhzT2hwaVJVbXJGTDRjTUxPbGFCZS9Qem9xWXJtQ2lzeUgzUTBoN3Q4bzhhQmpaOVp4S1BPSHJKVzU4UmxwZHVBOFFTOGxJWUg0SnNMUDlQaFNGVXJVQys3NGRBVW5XYklvaUN1NnFHV1FGZDVhUllvaWRvWTJ6akVOSFMwdEU3WVJUaWdKSnVXQXZMZ0RtUW1jYndKd09wRlFTTTVGcGYrYUllV0dEUklUNDQ3QWZUS1BhTktuQ0tQeXBJY2xleDJLWlF0eDdFSFNVV3ErTzhxamtPM2RhN0hDTC9LSFNXVVY2ajhVY25zbFE0UG0vWlNTTXU2ZDFoTnFCVngra1BYZHJBYXlmOFN4ZEM0Q0t0Z2I0Ny8wTGZNejFnTkFDcWd4Y1ZpWHg0NHVlSWJWUzR4czNnL056QWFNaEgveDdHU3Z0Z1B1WnBYY3AwWXFsMytLeTgzY1ByMWxBU3J0YTVJaU1NRjl2NWVmMHAwQ1k3eHhFbE44UEtXOTZXOFdTUy9BRjI3RUNlMEhnT3crOWFSRTNxR244NzZWTFg4Uy9odld1eFhxU083MzFEM25sT2N1eXRISWFlV2s0NlFCT0pDNkc4eVhvN2VnZ3BFTGZNWW5VcFd4ZTVUN0tJY2R6QXBKeVRpdUc3NnJsU3BndHlFRXo2TmgxbytSbExDamlSTTJha3M0bTRGVFNYMVpaVnptTFJZTDFjT0tocjFHb01vMmFCd2dCcWhCSHJSRHVnaVl2N3R4dks1V29wKzlqdHRkRk4xd3BnNWRZK1dNWjZIUnhuRXJib1BwQ1VDQXk5QXhnZ1ZGK2dQSGV1cWhKaVE3WlZHeUx0UUVtZ0JUTktyclF5c05pYmQ1WmNwaDFRQWVmZmpxU1g4enV0WVlheG05MTZZMFV2bFFjNkxobGErTXlnWVNwNVZaOXVFUWpoTGd3SkxGQW53d0E2enJ3bXFpcnNoQWQ0dVNVK255MGlHeE9QMW5sUDJyVk5zd3dFdW1mb1Yva2gxRHQyblJxbGFOMnlDWm96aldvQ3lCS3ROdmU0NGZrYXhlcEJOQ3EyclRBRVVGWmZvUjlmdUcvK05zWlpSMng1MzNhQmdSZUJKRHo4L09sZ3FYcm9lUVZCbjlrUmZDTEhpR0VkZm50cHpkMEpHVHN6OU80eXh2VUw1ekRqTE55VGNPSnNBeWRHYjdibDd2MmVKZWlWRkdybEVvVjc5N2JrV3pTbDZyTTEzOWdUMm05YWdPa013N2oxbVZTQ1BjSmFhcVFROUVHQ2sxSy9WckRWZ3VkZHMwOE1XcnlicHRwM28rRTNtWWxjZ2w1YWIrVkJhd2Foem9IZk43U3ZpVi9mVUtXT1Q3dXBxcS9VME5JeGcrY3FLaTgxRUNicW9oMmIvNFNPcy85SDBtWmhCU0wyREI1bTJmWVRFcFJRZVk2N3puTmJKV2VsdkJYUWNrVS91dnVGZkcwaGwzamIrUGhzR3BTYUI0MTJ3NnlmbTUrS1VhQi92T1NMdTV2VXpsR1J0WGdMZzM0ODFWMlYyWi9Mam9vcVVLYVRGbE5QbXcvQUUwQklGaVVtbGdHRUtBay9ZZGdxQ3JXV2JIYW1YWGNyL09wdlFHVDNYMGt3UVVzSlZRMUdCUFdrd2sybTNOVVJ5ellQc3YwZ2g5bnZTYjBBMS9CWWJ4ZEFJT3NhMnhBaFJDQTFNK2gxWTRjZ1hDODd3Sm5qZmt6S2MxbllCTmhwSGdkV1AyOTlrUDljQjgwcW4rRkwxRElYaEl1VHlLV1FQa2kzRTNJZUl4RDlaOVZkOEdhUEFmZGhVWW14QmRJYS8wTTl4K1phTU90TlgzcUpNSjJBeDN5WU9vaWV1c0pBcmJaQ2l2djFxenRpUzNINGpUZ2xqd1ZFekxhT0FrK3Jrc1BmaDdSYjU0V1pLb0tjNXQvVDVDRjJ0TmE5WTJ3YWJFc3IrSE84UUhaOENOWGNvbHFhYTNPZ0RLN0VQWWNqN0ZJbWd6YWVHYUlmYlFuNStiQjFyTlN3WlRLTVVpR1MxZUlJSmlTcm44YXFDTjI2b2VIQlNDT0c2TWlvNGZROFlIaTV6S0RJdGovTG9TM2Q2bFVJdmZhWmZBcTY1RHQySktLNlpBMFpCMXpUTUdXV0lyNW1oZE1yak9YUUVJRjZPZ2pwb0YwSGZyNk8wUlVPM0hPMWhSSWZybGNQTG9QeTlLdTVzYWlFSHdXWElwYVB1L01yK1EzNkFpZEFyMzlWTDVjQThWSExXaWVKYzltenN6Rk8zRTVVQVJtMWVac05tclNLMlpRdUxTRFlxUXZvbHo3UkEzVExzdEZwM2ZWL2dFam0yNG9YU1diR3ZLMjBKbVhaTGNIUTF2NXJqRWUrVjc3c2FiVVNyS04xbXBFbi8xd05PUjIyOXJReDVRbVB0ZWgvamIwVkJzbjdwQ0t4bzNQeEV1TlF4bzRiQzZ4TnBCVjA0eVRNVHpLbDdkcWE3eDBWM1NXUlNqTVRqR0pYZ1cvNWliZll6Z3gwbld4M01qb1MzZ0Jyb1NSTkNvcW9kOXdRV21NTkRHV3BzalVkRGdqdkNyZ0RZcTBidmZaSjYxY3ZtK2pDaGliNk81aXVtTlEzYzlyZktZdGVDRDJxVGRpTDRwTW56Vnc1QWt1eDJFamZOQ1d6OWwyM2pTRUdBa0UydmhRK3EyK2xHRFgySmlBN1lpQWhLWEdHTWFQajJoelp0MGJMRWZ3b29XTzZBWndMWlRLa3lwUTJUamt3YTl4UVRPRGJGSlo1L3FSN2w4Y005UlY4c3BEWUhpYUN5RGhIdVZab0JKbkZoZFZLaUp0V3RuSEpiRXhYb3lDanVlN29RR2g5K2MzcjFSWm9KYVlUaFlOQTdYZ3JaRFNhSGFYVUtLbEsvMHh1N0wzR0Q3ay9vT0lyT2s3N1dOdEhGLzZOUFl5ZENURzRySGpGM2RVRXpsRjc1TnlFaDFjck1YMVRNMnNxdGpjWlpvMkIzQitGK0xURFFGUkplblNteC8wdmFoNHEweEJYSXVjc3E3d1grc1FyZW8xWUM0cWMzU3pXcnFkTkxtVHdiTEJDMGY1dGtTR3FKY29qK0pnZnFUQUJFMWhGTlNMQldYOGFQa2x2WFZ0L0dzUkJ3VHYzeDdQOFdEaHlBd1BjeDhWOTM0TnR1SDRHMkYzVkZURUtnR21MbG8xUm1yWjdxZG8wN3ZyTkpuVWhtaEtldmQ1cXBoYm84bnh3UUx1MzkzdXQrMFhJbDdpdE9jNFRVYitacEIyS2F3NlhUSjd5K1lKTzFnVmhJd2U0TFpERkFZVzlGdHc0YUhvWmQ3V1dHZWtmK2xWZFZDZGtnc3ZBemhsQWwrUUlpNmJaZWhYTkpmSno2STVCbGFLb2E4d2U1T3dCRnFxVmRVelpiL3orYi94NFluOTJGOEJLU3pJUlFjL3RIOG9lRHhVVEp1YzF1ZnBwdkZYSElqYlF6SWg5L3NpTTEwUkN5MFJJOEgydG0vMktRNUNjazI5ZUowNzdDZ0ZPQ002TndsMDZlck01UHM0NDQ2YStXWHBpQ1VTR3NROXliNVk1a1Q3QnJWQnpKc0hzSkFYd216SjJ3YWoxRnhLWHNCaFdQT0dTNGJ4T3JQUGpnM1h0djQ0Y2d0MkpyRUhYSTJzLzBYc3JmMVM3cVV3eDUwMWFncDdWcWhUUktjK0p0Q1ByMmVoK1NzY3lTdkxjeHNvZ2pwYnhaQVRwOE03RlVudTF1VzdaSVdQUldCZERUeGxRd0F3S01KVWhycUFKZkxzM29nRTlCRzRrS2gxczh4TFdHV2dVMGZJRlp4eHpNNWpQODZxaThHbFhMS0xTNVk1Kzd0M0pvVHMvZTZMVDdNZVpPL3o2QTFDN3RaOG96M0RjZGkwOU5RckQ3Nm1ZTmhLT2F0L1JETTV3Y0FtbXpxK1pFaDVFUnhYYUFqL1NaNEwyaEQ5cXVmWjZBdUVRaEExRk9FUDlFRmt1dkFFdll6Wk9oSTBoV0ZjSFhteElsU2ZsVUhPclNPV0VSbDlRcEcyYTVsZENJRkk3SVNQcEtnSjBEb3YrMldNdExJcUFsSnFYbnRSOWNmNTlGZTVOQ2N2bzFOc1R4WXFlK2NtOEZhYnBVLzNkUFN4N0tLekg0d0NqaC9SZ1pYSGY4anp2N3JCdFVtbUYvenFWRzF1SHBNV0M5by9iblRXVnpZN2ZxdjdWaEp3czNwZndBd1JpdE40R3U4c3dremhzalB0NjJvRFoxWktPTWdyVlMyblpzeWZrQ05FYzN3UzE0MHJ2TVlRalhjNkdSUlVzalRiclR3cVJDVFpETWVIcThlejlTZStiQTlIcEQ4UUFQbTJlY2RRL29CUFlHbzhkK1lqYXo2ckpsbnErV2xFMkJadHIzb3p4TGVnWVJqOXFLWWFkMmQwNW1nZGpvbitDVThmVzVWK3hHbGl6SlIvdE9HQ1ZHSnVFVjIxRlNwTEgrK2pvMjRWbE1oWG9nTnVoM3k0Z2dsYjhhUG9IWnFsWlk1ZDdTTEt3cm1HZG9PemVid3FjeFBxVzlQbG9pTG5zSVp2cjBtdGhwM0xOelQwc2Joa1hzNExIWTJ0RmpjcnJ3Q2YvR3NDVG44UkN1ZTFKSkFGR3FDUUJvRDJOUkg2RW1QOUlBMzRUMzdXU1RXMXV1dWVoMzF4NE9EaTMvSmRJM1dXa3NaQjFCRE1ZWEx3M3VhVkx5WU12T3hBc0FMMXk2cTJaVndBeVZnZHI3bEdvWUNld0g2Nkg3RXVDaWp2OXRwVXA1UzUwV0lCL3N5MGF4NGoxNUJVZ2ZBV3RnanhLYWhvYXZ4MDRjOG9sSXhTSmxUczBqVzk4c0pvT3o0UDRMQklPd3VZUlhtSzdhejlHYjhkZkJxcWhJdytTNnhBMWtkblkveWsvRkxxZ0prUVNOZWpsTXpxUlg3TTVBNm1oMFpXK25NaVNHcnBOZ3E0cU5UUUVPNkpBeElKTEsyemRmd3dOdEQ0Wm93YktFZ3VDM1lQQ05WQmJCMEhBQmxzYUF0VTNnaWI2MWVoOG1zbDBVU2ppb0ZkMFJCVm9wWGEybXRLbkJXSVRJdWJtNjdOSEVCZE4xa3Q3Qno3aWpBUDBkcmJEa21XQ3p5bExkSU9rV2pNa0U1RTBBYUJtTDJ6MVFOcVpXR0Y3UUsrbmFCQ1IzM3VXY2VxcUJaZHE2QmxNZ0hsU2ZoczduVXBBNzRlV3o0L1MwTjJNdzhKT2NrK2loSzE1UjJGTjBCTWZMY24vZVhCNUZBM2dLSlg2QlBqMTFSdmNvY3NSQ0JQR0hpOGJPcCt0ZlBacklOUTdGd1F4VG1DVmt3TXExYU5CMkxBNTRDT0R4dWl5eVZDNzNKTXhTSElQazYxVUlORnhmZ2Q2aXYwcUlxZmpPU05pWXk5UVJITVNFSlJaNHV0MG1ucExDSGhTU1Q0YVRZSUdYdzU2TktkTk5lYkMvcDFZekoycGtKcjhad2REYkx6Q2VpbUh2bm9vaEtIQXlCUkpTUm10T2w3QzZQeHh0K3ZGa3htdk5Qd1pzVWlFZE5sV0l1Q1oxVlBZWVc0QjY3ZHR0dzdIdm1rdDNzTEpTbHUrVEZjeHI4b1crNVRmQ1NkUmNmRk5hU1p6UWNaL0p2K0k4NFFkaWpnUTRSRGlwZEcvbDgybW5jUXA0MnBkRG9uMURCVWFFeGwrVjc0MzZ3dFo4dld3QURObGEraVYzclE2N0pQSElBclJrTzZMeDA0OFFtQXp1SkFRa2tYeGxVZDdxaHB2Q01abk84QVJvdGFhS2s4WFRvSVFkK0FKbW9VNk9XU0VXaFBKSzVKWG92TmZqSTdzQTZtSXMwWVY2elhBTFJCT0dNeE9lNWFMQ1BkTU5uM2ZjTzZHNVFzNWdZNFVob0xRU0tFdG9pVGZ6OWQ2YUdoQ0JEK3hIN0ExcVA3ckd2Nm41L0JCRDI2RnQybVFqeUdFSWlLWXRuU1ZtQWF3eUV6dVUrb0doSVRxeGsvZUJicW5udC9TZGQydmZUNmJZVWJreStpQXRXeWVrQ1lZaDNaUEZFb2ptakFlczV6Zzk5QlFxVVRzVXZNY3NiSmZMeFdXdDYzZEFZdnRoUXB1L1ptY2VVcWJkUFl3Zzc5cGZMOW1sb0NmbFhlZkM4L3NiNzhwQVZ0aGxBbWtlMG4vUWxQUFYyTTBuVUIvMVVEMlpoUWRteE93elBCTWRkWUcyWFNXdUlZZ2JXazFxWVM0OHc5dnU0ejRiaXc1cXFtc1JWbWJQSmczZjlaNUp0bTFFYnM1QjJoSndDT0o0aEFBTG5teEVuZzJFRkV3b2dKMzBzakpCY1k0R1FHR2wzL3c4UEJGNlpsaElZSnJudWtpUHluTmg2cEFlRjBTVzEvSFFDcFJUYmxEMUdIRDN0Rld6VDB6eThoQWs3dktPZnhQU0FOVk5tcFNsMWh4K1dzZ0pRdGgveU5jTHNOUnlxcGViRkQyckk3M2tWdVdBeS9TTk41WEI4U3BkYWZDN2FEZmpUbHJ0NDhHZy9MTStJTDlDSUNnN2dTbVlLQ1d3eDVWd3YyS2lyR09LanhtTkRncHBPb1J2QURyQXQ2S1hEVkFHSHFueHdjU2hhNUZuTXlTVGtGV2psK0Zma1VpdloxOVZGejNVeXdDaVM0dG1PbFBGa1p5aVI0SC92SGJjdjYyV1NaM1lXNFd6b25iZkthaEc1UUpUc2ZHbW9JMXN6R2UyMkJQdEUxMGpFSUwzYk1MbUpoT0RTYzF6WmN2Z3RHRjdpT2phQXVENWhtU0ZyNlR6RWJWTVdNbEliTFA5dUJnVlNjSjJTS2R0MzRrS3lvZlBScXFldjM5eHZBZlFaY2h3VXpXcXVRcExjUGNDUUVFVHpJOVpob1lZNDBBekxWNERuTkdxNklEOU91SzhiZXJIZTRtQko5YUJ6alBpa3NzdTVsSzV3MnU5V1czUVk2YUdGdEt5eVdBUExEa1lvdnlUVHppaVFCbldoOG5GWVlRcFcvUFNQeEo0anpQNVNOS3JYNUFLRDA0Smt1akt4RDFxb3lYM0p1aEhDak5YR3hZR2s4S2Y4M2V5c2p1d0t5V1BWOE05bktUMWE5cktaVkJHRUJoeTF2aVhTL2ZBc1Y5MGpPWm9OZWdRSndhS1dqcUhRaFRwVmE5bWdHaXl1UGEvZHpKb0pnMUhsRmRId0wwNlk0SjBhVnBhY1NtSFJzck5ZQnN4eGM3R3VOTER3UzNDNjRKMnk4eW1YWVhscUdJN2g4Y2JDbHNEZ3EwWTBsOHJsNENITWlyLzE1MWNML00vc0IrV3MrSVllNEJoUmt3aThTMVdYOThjL2tlMWpBaFM0N2FoaVI2UGttSWFYa0Z0bUdjVVZUa0VEc1BoRGQ1bnhGWkFXK0hqL25xQ3VrODIxS3pLWkVWUTVZNTFieENUV25DU0JIdm9LWTVyZVpReFNBYlk4SkI0Y2hXeGhPWlJTeGF5TTllaWpDYVppc2szNWRTeUdweXVod2dLZzB0ZmJzNGdJNU5sUDFSaEVuMWdpOFhTTERXd1JES3N1VzRsMk5HSExtalRoQjJvSisyQTk2M2VCa1pHN0x6WTF5anRVK0FrQ0xiRDczc3hLTkRXT2x0cXZiT25PZDZYYmlnUkxjb1lnVHlGbktxZ2dUbVlHRWNqUnMzN1NERi95VXRFQi9VbWttOVZPR1pRYlZ3dXUydkJJL3RGZjlpUWswYUlvTTBpdkpBemxTVzdtaTFYQUtZTXJkTVdrRENKRVVkNzYzK1hzZzYxN0RRUDNORjZCMTc1OHM2RytLMlk5QU0xTVlsU1JBa3VVUE9uK3crK2N4dE5yV2w2ZXNPSnpPbVZvYklhc2RJVWxhNUxvYmdlQXg1V1l4YU5reFY1LzZ5cjRYb1FkVHdUVXNNcTVOSElFdDVsZEI2K2wreDc5T25iTGtTT05SSjBPRFdDSDZpZ2VuUFNoM1hPSVNXa1k3YzlsZ28wWm4zRGdIVnFSaERVdytDTzF1eG1FMmVkL202ME1WakZoODAvMWhZTUJ1YXp4OHh3WEk5NFlNcFptaW5GdTNpZWpNT1BMZExzbUZEUHJXci92UTFHY21qdFk1QVovTkc1UFU4S2RmS1prek9Ba3JkMHNMeGJZYXRPTUNQbGkwUm9iZHI0dUNreGM4RVlRWjRROUtyK05yWXEwU3J4a0NNemxidU5OS1dZcFVoSGdWbisxejMwNEw3R0NPaG1aVlhSV1lmOER1VHNKQXc5NEJhNU41T1JlYnNkYlUyZHc5djhPbVdNN2tROGhISFdPd3A0U3NpRDZsV2F2QTlwb2ZLeVZMbTU1ZGxQU2FleFppMS9sMTVnUmJxWWFIUVV4bjlDdmU2VkhQQmpQOEtWYnVmTFIrRm1TdGlkM1lLL1g3RXJ1eGU5N3VNclA2VlV6SE5BbGRaQ2NjN2F5ckNPT0pnZ0N5dzBjTkdkWCtGRVpuZ1hVbFhqbTNJNEpzUEl3ZVZYNzhUZHF4a3d5YXA5RVJlaTRyejI0UFBxTTVsbXVoNWlRYTNCQ2Q0Q0JGY042ME0zMG01OFQvcURHVFJNdHJReVdrd0toME1QMDNNMDdnbjRHaEQ4cGZWUjdLNEdha0xIdUw3SEllM1ZVMHFpSStMTEpHdGlqd0RKWkFTRm04Uk9jWnJSdU9uenlpZklleFdNMVlmeEowcHdKSzJVZTdJRk42cnR6VmltR2Nya2cybmw4RDJPK1hzemt3MHI2bFh5aXVUNzBUZjRiU2YwZmpjQS9OMmhZdW9ITnZLbGFOWGd4VGd3VWVSMkxzdmljajFjZEJLZ0dWUityR0FWd1R6c25oU0VaMEFmekpLMG5odUIyTGhRY0ZtZnc2SExST0ZXWGdkZHBpS0hLQ1RUVmE1RjUwcytEL1hTUDdPL05UQks3YUVFaTFzMnVMSXJDRE85RzhFUjdybDN0dHZ1VGE4djVtNFBIcVJ4ek5hVlIvbDZkYlZucGhvald6c1IvWnlTK2dTZFpxK0VuNmg3NkFmUFlVczlwM2VxVk13L3ZnZ2hPN3ZqQ0FXZ25HUVFla0RIdVFPRk5DTHhuRDlJUmNPTVdudWxNUGg4eDF0Vm4wQzlVekVUTEpkR3poalhGYjZUb0toS2lzd3BrNEdPaWcvU3FpS3JDLzJ2Q2VkNUJtZFVQdDRzU1V3cWprdUY5VndCcVY0T1kyK1ptM2lFSThETE1pTmpaTFdvdUVMS0NMQlBabkxLY2xNVm9hSy95NXVuN2V6cWIzNkVrbzJ4d24wQTJNRU5DODF0cWJpNHBhdTRidU9nUzh3VnN6dU9zaUVxZnJJK3NhRXFoYlYyZmxrajhEU21ubXNNNkc4a1JibjBya3JUY1FPUVpHRUVpZWFHaXpMaDZySGdBSEV2SWJjdnNpcjVYVEtTQmdHc2ltNkY1Y2pkZUZKeitiYXJEVDNMZWFPV3hrc0VIRjBqTDAyNnE4WUlHbzBoSWdDNEwyb3lRY1MrWC9hL1B2dm5Nd3Y2SkpxWGJDZjNKMmc0UHFQbkduWVpJcVNPV1Vkcis0N29qS1h1UmNHYjZTZWFkRk9Wd3R1YnJJNWsxNHhpMkJpaVlKTVhWZ2E5cHNTcHNLTXRPZURyUUJnQWVHVUo5cTJ2dDVwelFYRWJBUUtBWTRkYlQ5M2pZRFUrb3gxTWFPL2luQWc1UFBWUzAxa0JJSXl5Nnh6UjgvOWZPc1FCbUp5NGt0QTNpRXdzV0Z6aHh4cnRLK2RmVXhkYnptWURPL25PTy96Ym5lREJBV1VYY0ZQNnlIRWhaK0pjYkFpTVR1eDNsd29za29FRzVIWGo4dTRGM1BIZXZOSlI4Q282QVJzSWczL1NhdFJ5ZXJ4eGZkR2ZRU0ZpZHJab1h1b1I3UDBOcy8vSTdvdUkyc0RJeFdqSDlqSlI4c2FPcVRDQ2p0RHg3VHdVbjIwTHVyNW9Ya2NaOEdhZk9FU2ZXdVJVeFZmaW5RVFRyTis0RXk2VnlLOHZtTTB1MjJSMnFFVmJ6bkM4aS9KUmcraWlBak9QVUpxWGtJWmE5MVU2aDN5WmhCMVFZalN4a3VMbnJtdDB3OXVlZTQ4SXBlZ0J4M2dnT0VodE0rNVJsMUhvdUNad2J4eHoxeEMxamZJREljcm51RUh0VklnbmJJN2tCazlXUzdNZmFacnNsTXB5Lzk4TkN2VENEWVRXYkNyUWFrOXVxSEpXc29lMVdJaldob3d0dStCT29pL0w2NFR4MGlITEtaL0RDeGRtRTRFcGlUYm0wYVlIT2pmZHh0RGI1KzltVXRKTjIxRVhwZFE1M3lWbE9hd0w5SThVT2d4N2RvdndHc1R5UWdCOXRTMFJZUXoyblQ2Y3RlZ2hmSmZlWko4cy9QdlJXaHJhaExxcUtWWG44czdHY3FaZXVwUjV2cjl6YkxTVEJUTHIxNlFIK0ppa0VtZC9YZS9Qalg3bSt0ZUNGUkFzOEgwRDMxOWU3ZlpGZDdud1hQbm1XK2YxN3ZkajdRMlhFZ2RnWGxyVXZLWjRWZFZZM3Bqc0pQU01zanNMajhHTjcrVWlITUFFZm16VXN5cjkrZG52RCs5a09YTU5pazdwMDJzT3FIQkpXdktQdkhTRkY3Z2NFYjlNUEFnempjbE9WKytjUTUrTVhuVnpyUElSTC8xaHFxWkVCQU01bk1Wc1kvYkFicElMUm5PWWkvZytoY2lnNk1qaDdKMFJUSm5xSVhUVTJMRFVsWWlJaXJVOXFseDFsMnJhaDlHNUhGVkZSWkZwdjM0M0hhemZuRDRrUk16ZHl0UDdEOGJOZXNoZlJjUG1ZWUVpMnBKbGtWVkhOd0ErdUI3VlNQZUFndWs5cUVhK0Qxc2xQeE01WStiNURiYkhEU0p0UjN6REZtV0ZIbzg5aVdZT0U5YVdaM0pWQ2lqc0NTN3FhN3BGKzBJZTZpazRPdXZWSjJyU0NqL1FRYzRxSEh5d1BvbEh5a2JkYTltVUdVRUxPRGJHc2llaXQ1SWFNR0NNN2NGM2lCMnNIS3V6Skx2Y29tNzJFeENjZUJTR0E0U1hXNDl5N1F3K1QxMVhBeWZWWncrUHNOTG5KcTJocGpML2dONU1wWGtRRWdIVEJqZzg3VTZsKzQ2ZmZPM01rYVlrTHF1R09nVTVIVHJlYlBxNU9IOVlTM2trNFlhczIzMjBSTzNtd2FkQk5adGp2YXFjVVZrUEk5L0VBbFJzUGtFWXdNM1JNR1d0dG1DWHU0RXpBRUw2amlDaVJpM0Qzbkoyc0hSVDM4WXljK2pROWRESUJQT29iUE5tU1BiNWNMRjZNR2hTTjRrWWlXdlM0cGE2blBGajY3ckZTcGdqYWg3SkN1c1R1TW56TWN3UzJCbHdzaE95WEg2em9yK1ZFZFRpcVdIaGNGVUZMbnFyV2RKc2Q5Y1pBUmtMZTQ4bmxtRHNyTFVVTGVsY3N3bXlvcmM2QXdNZFpxV1Z3Y1gyMnorUHo3aWNzbVRxcFB0N1J6ZmpmTytQaUdHOHBGK1pvR3RUWC9LMEVVQnk3L0VzYnhhcXMrQ25xbWs5TC9tZlNreHRBekdHL24rWThjQ0V2R0RBM0pqcEpSQnJhZFRKb0s0TVN4TFJyRzlwR2tDUTRmeVpxNDg1U1ozMmNWeGRUZ01JcG1XeXBUR1ozTjg1cnJQUlJYMU9RNllmd0w0K3dOZVZWR0hXZS9QUVdGYW5FbVJhbVdmZ0MzcmlRTVhOOCtWR01ZL0dvT3Z5MXUyZkJ4eElEMEhUTjROdkVLL0pSR0FwY1pXSVRJaWtHanRna0dYS2UxS1RHekVZUEFlT1NRdlh3YWp1cWZTMDRFN2dmYlBnQldDMllMcVZiSjNjTXNueUxLU3d6ZFJmOXc5UkFZN3UyM2tNdE1Vb0FmUEhwdVJNQ2NWSzE0bHc4SlplUWhsTlRiRExTQVNIR2dhRmljR0tWQ3o1YjlHZWlHSS8wOVBVOFRNSTFKUVR1RVVweG1rK3ZwZ3M1TWJRd2FBOTFnMm9ySVFPQWhXTDhGZVlYOTArQ2MyYTlvSzk0NSs2a29na0V2T1JubHE3Q2h6eTg0RnJxRWNwZU1HZXJidXExQ3ZlREJTRXlsLzE4U2pRNmdGZDJRUjJjaEFNeDJLOG1HUmdkbHJjUjMzejZXQWg5cnBjQnZCN1RiMUpPS3NvWXlBZGhpMzR6SVp3Z0tMVkRHZkNVZFpUYW93T3gzb3R2Q2w0Zkc2TkMwcHJydlc5RTlkVktld0EyRnBDZUVBeHY2S1RGTXorc0NIRndhK05UWjVyZmJpRjRSemE5NVZSTEpmaFIrOXVlU1R6aWVFa2hwTjE5RDBJdWpGZ0ljTzRjQUY2YjE4OFlrY1pJRzlhbzI0MlA0aDR5QUZ2eXpqK09Nd1ZBYlJpM2o5ZkJrUGkxaHdXdWVWYmJicU02QTdxUVJUYXdBc0RXTDdPWGVYTE1WZGx2YmF6VUMvS0F4UlVDOUg2L28yOGk3TTlERFJYR0dhQjBpaCtKS3JncTdlYUpFb2ZmYktyRVNZa2t2SEMwV3VIbW95bUdWUU9OWU9PbUVOK1h4bU5WMnlVVUtoRE9XU3d6WlNmdzFmaXRZYlJDRlBnLzR4QjFxQStJdFdZNUdrcnljd2Y3REMydTRHTlNsaDBkODdGV0RqSnpsdVJXSytlVFFzOEQvSzFBOUFBRkpMU3JhQUQrWmRtQzRjMHhBd2Rkb2Q0dXlPc29KL3E1RzFoUnBiSU4va0tzY2ZOeHpkOHhTY0FZSzZyQlQzV3ZHS1RaOWovTjdMRWNGQnZqOGpoM29aMzlkWENVYks1WVRLUVFmY29Pd2wybDJTR3ErK1BaK0FlUWlRbU5NZEExTkFHWjBYUVJxbmNydkQ2K29HbWY4MTMyajJ2YVlOVHpWMnV1aUxHaS9Yb3B6NWZnMFFrL0JxYnNjaDd0WS94bmErS3RxMHo4bnd5MmZBaTk1ZXhWMGFFaGZveXB1WTFQM1dUNGxjNklKSGZLZXFIODdwRW9hRjJIYVlkTWJmZC9KWWVMZk1CRW1zRytxQTM5bUtweWI4Z1dWOTYwL045bmdtM0JBY1k0aDRxNFM4TmlkYkREUkZGK2s0Y0VEWjRKZ0E5WTd6OE16b3Q0TlZpRUhtMTN6eU81c2loQ21veC9oeTJnQVhOd2xPemxJeDBVS2ZOeTlDbFpRY2kzSWVvN3N6U3VyTUJ1eWRXMnE1UGxleFQxSWFLV3YvUkNDQlh1bFlGK1FpUTQyT1lzZk5rbmNKOEM3WDFuYjdZOWNFZ0FaaDZFSzVXRVVGaDhBZ3FXNDNQcHJSUkNxeXlLK0VuVEVBYlFKbWkzZVVVeW9wbHpBclU4MVhnT3J6UkRYY3A4L0hZYnc4MjZJNGp0VU1uNk9GcUVFM3JLRmREd0JyTWkrVHV2MUVIRFE5SHFXZ3BBTUlhbmNvV1hCV2N5ZXlNSE9qYkFEUnJjcDNFdS9hbHJLa0FCSGNyVzl2RUNzanVxcmFXZWYxd0k0WllIV0pmUVJpWHE5VWdiZk54b1grRGlaay9CeHNEUm4vUTJ6K3hyUXdwa3YzbXJBUC8zNUxSSWFXUTZpMUk5SlNDclUvUGQ3Q25tMmIvaXhqa2ZTWFl6bnZOME0yY3ptRitmZHViZE5sTXgwVENuemNYOGxxUVFoLzZZVVJ4ZjJrOTY4dTB0L1ZBM3J4MGFXbGIvdVpsZmJpN3Y5eFV0cE5QMnVReTBpdk83dkcwTDF4RldsWW9MUEFWSDRtcFFUTWd1anRnV3RJcFlpNG5lR0ozM3dSZXI0T2lGUDcxVTF0bVdlNy9yMGRuU0p2aitkU0dONERrK3JMa1pVcHIyS2U3ekdhcXNmLzJRPT08L0JEQj4KICAgIDwvQklSPgo8L0JJUj4K + +RkFDADAzMAAAAKWUAAEAAAAAAKWDB+QBBwolFgKKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgC+APwAAAAAAAAApVAAAAAMalAgIA0KhwoAAAAUZnR5cGpwMiAAAAAAanAyIAAAAC1qcDJoAAAAFmloZHIAAAD8AAAAvgADBwcAAAAAAA9jb2xyAQAAAAAAEAAApQNqcDJj/0//UQAvAAAAAAC+AAAA/AAAAAAAAAAAAAAAvgAAAPwAAAAAAAAAAAADBwEBBwEBBwEB/1IADAAAAAEBBQQEAAH/XAATQEBISFBISFBISFBISFBISFD/ZAAlAAFDcmVhdGVkIGJ5IE9wZW5KUEVHIHZlcnNpb24gMi4zLjH/kAAKAAAAAKR8AAH/k9+BmCA4IYU8gN5TphT416Scic6OH2BGPjtmtSjtYf883G/5drL7dduwYPv3j9pLDQ5r0TvPJ8PnRB27hwzg7/yOOzkiUSXpOfPt6ilXzd7nRUUkS77747w2MvPH1EgjmFJ7J7rAnQnjA2qe+iLDyZ3NxHD0DARtelyGRWlndOuXOF/PwMo+0uj8DIAtrQFuyiSZSTCNRWLuiQI1R1FYkHpW8x+MV94eDL29J81i8Ur8W39FRrq85RWE2A3NvR0807NgyGnYEaesb4VKsRS52OcrL7/bXXqJMpcbeBVigt5qqWGeGO988plmOpIV8X0AY3XzunfS9kdy1wMee0p1A/N5L1fncdCKLatpgU4Ii0GhXg1xp+jh86GZQU6aP8HznofUPQPnQBlaUunu7BF9sRYIJIWiywAUxCZbGW2EuXUj6q+Zf0LjFmRTBXMo5Vbb1zzPU6xO41+moFxrxzV8DHgBcz8Aj43v5wS/BAw6U+8WNGda+7Fkmkk4Gne3DGrN7swPwfOeh9Q9A+c8Sp/t9joxsz2XQ6xI5dTvLKAAB9+OhB0a9G7sjLq/Q6cc2k0r4WU9YvDMhJjX1P4hT8Il3SSwChPICf8/ID7uAKFt8UYiSO6rNy4tZu3qm26Er38tqBcnYahzx9tLx9tMx+FPAFVpKWQhg42WYFFufB52wAu84ucrlsfhJKCgW5H9QfYHFRWekR3FGjv73uPg/20NpoFYJnQaMhwNKucIvHdCGytdIqsKzmiB0xf40y4tn/MecRrCxVD8WiUVVVYOb0doQ6ddjjNaxC8gSros4wDW9jW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 + + + +#DRAFTFACE +FACEDRAFTVALUE=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 \ No newline at end of file diff --git a/apitest/src/main/resources/config/bioValueEncryptionTemplate.json b/apitest/src/main/resources/config/bioValueEncryptionTemplate.json new file mode 100644 index 000000000..28a3c9543 --- /dev/null +++ b/apitest/src/main/resources/config/bioValueEncryptionTemplate.json @@ -0,0 +1,14 @@ +{ + "id": "string", + "metadata": {}, + "request": { + "aad": "VGhpcyBpcyBzYW1wbGUgYWFk", + "applicationId": "IDA", + "data": "string", + "referenceId": "IDA-FIR", + "salt": "LA7YcvP9DdLIVI5CwFt1SQ", + "timeStamp": "$TIMESTAMP$" + }, + "requesttime": "$TIMESTAMP$", + "version": "string" +} \ No newline at end of file diff --git a/apitest/src/main/resources/config/bulkUpload.json b/apitest/src/main/resources/config/bulkUpload.json new file mode 100644 index 000000000..5ac0a5552 --- /dev/null +++ b/apitest/src/main/resources/config/bulkUpload.json @@ -0,0 +1,6 @@ +{ + "category":"masterData", + "files":[ "masterdata/BulkUpload/FilesToUpload/user_detail.csv" ], + "operation":"update", + "tableName":"user_detail" +} \ No newline at end of file diff --git a/apitest/src/main/resources/config/clientPrivateKey.txt b/apitest/src/main/resources/config/clientPrivateKey.txt new file mode 100644 index 000000000..2b5f316b0 --- /dev/null +++ b/apitest/src/main/resources/config/clientPrivateKey.txt @@ -0,0 +1 @@ +{"p": "0-40ISxXDmC8SVrudg1e7vQskyWlohadm83RAkUyH6S4h1aTPrNwLVn9WANnyRTqupD1Fr8mYZ7f9nZ2MkMj45UV8uiIjQZr3crMq0YGkzt_LvwhLduWOJ_z9_9zZNHckXei4G8QQFJQYb3TNdGsVVSwff68SSoen8oqvkbkAJs","kty": "RSA","q": "6as88odcbP2MDT9lkahK2z4QIH25zsa_UdLgAtLwDVpekXfJNOQvuqNY1Gw3Jws6uPDLGcEK42MyeOdCFqklFTvDJlJXMFvgWrmGbCUMvJL-rFyO-kCTGnFBX60ozdJbjfBt3E3QYx3G907Ziuu9o0azey1DJtq_zKwearE-xTs","d": "BgdeiCZbr5qZ4haShg9uQinZRYPSUTYc_58YgvQ0WkPKm5fINOgOJPvimdKYBt8OtIWbhojTyn0TKrGPPAqFZCnGY16HkCUN31MbluD2wxYz6SPpZ1zsmP8PbQUVozjEFeLpiTN6nubw_skS_9GGrl1CPb25wTPlZtI3uQ5IiPL_YD5j_w5_J7tejAaRbhlJj48ZDa4CR8BkaUi2QaQmLoyiO_1O-U-Nf17-t1C6zFFKKHQx2lNltE1xFQoHB4WuBA2GnP5LgNFJSLv0p95gQK37nP0TTcuiZVlvFcmbGI_ilWlxRKJUD3mZR6nz25X4SapUWswnrnm7JtUA_UGVGw","e": "AQAB","use": "sig","kid": "1bbdc9de-c24f-4801-b6b3-691ac07641af","qi": "pmL_G7T4OF_pr2RCzkkupi1dCbwRX39bMEIs3uirvkoPR5CENvuvsXQ0Oias3taxzLa4nG5JVXHkyOIX8UsK1NFrzZPRKbfNX3h5EAnl3I7cZMtoYJLnawUqaNTukOmDChPlKx1fVjUwsyNn5HSAnmBiaOmm_RHo36tPhgaPUtE","dp": "e3b2X60ZOoMYrhOPgK7hc4xEu6TfDcLnJvGMpinxvYWVCyNgvNKEs6cNdMznFbpd1TrFze6mSZDpIQh6a2W57sfX9Z-Kjb4D8T5IZi9xfSzYN2MjYTfgGDT3SK9FZqLsQMLV3LJXYWGS-p5AAcaZA01HVN-miWlEVgrNQ_TAt6k","dq": "Yg-BqUoTCI4y6xBS4JieqXlXLTt18YfInF8BsU2yffgRvbxmTPMB8LJCQgsT7iexQhGTOkCgACMN-F0ciAP90vZchEWD34B_G7PF7LZzrOOHSvAg9HaLBUrII424lP-VenCOuihRrna9m-WUN8-MquutwKCTEMg2O39z2FR_wic","n": "wXGQA574CU-WTWPILd4S3_1sJf0Yof0kwMeNctXc1thQo70Ljfn9f4igpRe7f8qNs_W6dLuLWemFhGJBQBQ7vvickECKNJfo_EzSD_yyPCg7k_AGbTWTkuoObHrpilwJGyKVSkOIujH_FqHIVkwkVXjWc25Lsb8Gq4nAHNQEqqgaYPLEi5evCR6S0FzcXTPuRh9zH-cM0Onjv4orrfYpEr61HcRp5MXL55b7yBoIYlXD8NfalcgdrWzp4VZHvQ8yT9G5eaf27XUn6ZBeBf7VnELcKFTyw1pK2wqoOxRBc8Y1wO6rEy8PlCU6wD-mbIzcjG1wUfnbgvJOM4A5G41quQ"} \ No newline at end of file diff --git a/apitest/src/main/resources/config/errorUIN.json b/apitest/src/main/resources/config/errorUIN.json new file mode 100644 index 000000000..e146f2df9 --- /dev/null +++ b/apitest/src/main/resources/config/errorUIN.json @@ -0,0 +1,24 @@ +{ + "URL": "$IGNORE$", + "authRequest": { + "body": "$IGNORE$", + "signature": "$IGNORE$" + }, + "authResponse": { + "body": { + "transactionID": "$IGNORE$", + "version": "$IGNORE$", + "id": "$IGNORE$", + "errors": [ + { + "errorCode": "IDA-MLC-015", + "errorMessage": "$IGNORE$" + } + ], + "responseTime": "$IGNORE$", + "response": { + "authStatus": false + } + } + } +} diff --git a/apitest/src/main/resources/config/errorUINIdp.json b/apitest/src/main/resources/config/errorUINIdp.json new file mode 100644 index 000000000..c666118a4 --- /dev/null +++ b/apitest/src/main/resources/config/errorUINIdp.json @@ -0,0 +1,9 @@ +{ + "responseTime": "$IGNORE$", + "errors": [ + { + "errorCode": "IDA-MLC-015", + "errorMessage": "$IGNORE$" + } + ] +} \ No newline at end of file diff --git a/apitest/src/main/resources/config/errorUINKyc.json b/apitest/src/main/resources/config/errorUINKyc.json new file mode 100644 index 000000000..96c1c0ea9 --- /dev/null +++ b/apitest/src/main/resources/config/errorUINKyc.json @@ -0,0 +1,24 @@ +{ + "URL": "$IGNORE$", + "authRequest": { + "body": "$IGNORE$", + "signature": "$IGNORE$" + }, + "authResponse": { + "body": { + "transactionID": "$IGNORE$", + "version": "$IGNORE$", + "id": "$IGNORE$", + "errors": [ + { + "errorCode": "IDA-MLC-015", + "errorMessage": "$IGNORE$" + } + ], + "responseTime": "$IGNORE$", + "response": { + "kycStatus": false + } + } + } +} diff --git a/apitest/src/main/resources/config/esignetPayload.json b/apitest/src/main/resources/config/esignetPayload.json new file mode 100644 index 000000000..d20391e31 --- /dev/null +++ b/apitest/src/main/resources/config/esignetPayload.json @@ -0,0 +1,7 @@ +{ + "sub" : "mosip-resident-idp-client", + "iss" : "mosip-resident-idp-client", + "aud" : "https://api.dev.mosip.net/v1/idp", + "exp" : "1667833124", + "iat" : "1665154724" +} \ No newline at end of file diff --git a/apitest/src/main/resources/config/folderPaths.properties b/apitest/src/main/resources/config/folderPaths.properties new file mode 100644 index 000000000..ad6bed29f --- /dev/null +++ b/apitest/src/main/resources/config/folderPaths.properties @@ -0,0 +1,10 @@ +pathForValidRegProcPackets=regProc/Packets/ValidPackets/ +invalidPacketFolderPath=regProc/Packets/InvalidPackets/ +validPacketForPacketGeneration=regProc/Packets/ValidPackets/packteForInvalidPackets +syncTokenGenerationFilePath=config/tokenGeneration.properties +getStatusTokenGenerationFilePath=config/adminTokenGeneration.properties +pathForValidIntegration=regProc/IntegrationScenarios/ValidPacket +newPacketForUpdatePacket=regProc/UpdatePacket/regProc_Update_smoke +updatedPacketFolderPath = regProc/UpdatePacket/ +packetForSecurityTest=regProc/Packets/PacketForSecurity +idRepoTokenPath=config/idRepoToken.properties diff --git a/apitest/src/main/resources/config/healthCheckEndpoint.properties b/apitest/src/main/resources/config/healthCheckEndpoint.properties new file mode 100644 index 000000000..f7a8576fe --- /dev/null +++ b/apitest/src/main/resources/config/healthCheckEndpoint.properties @@ -0,0 +1,45 @@ +###### = +regproc_masterdata=/v1/hotlist/actuator/health +masterdata=/v1/admin/actuator/health +auth_idrepo_resident_regproc_masterdata=/v1/auditmanager/actuator/health +auth_idrepo_resident_regproc_masterdata=/v1/authmanager/actuator/health +auth_idrepo_regproc=/biosdk-service/actuator/health +auth_mobileid=/v1/credentialservice/actuator/health +auth_mobileid=/v1/credentialrequest/actuator/health +auth_idrepo_regproc_partner=/v1/datashare/actuator/health +auth_mobileid_esignet=/idauthentication/v1/actuator/health +auth_mobileid_esignet_partner=/idauthentication/v1/internal/actuator/health +auth_mobileid_esignet=/idauthentication/v1/otp/actuator/health +idrepo_auth_mobileid_mimoto_esignet_resident_regproc=/idrepository/v1/identity/actuator/health +idrepo_regproc=/v1/idgenerator/actuator/health +idrepo_resident_regproc_masterdata=/v1/keymanager/actuator/health +auth_idrepo_masterdata_mobileid_mimoto_esignet_resident_partner_prereg_regproc=/v1/masterdata/actuator/health +auth_idrepo_resident_regproc=/v1/notifier/actuator/health +auth_mobileid=/v1/otpmanager/actuator/health +partner_auth_esignet_idrepo_resident_regproc=/v1/partnermanager/actuator/health +partner_auth_esignet_regproc=/v1/policymanager/actuator/health +prereg=/preregistration/v1/captcha/actuator/health +prereg=/v1/pridgenerator/actuator/health +resident_regproc=/registrationprocessor/v1/packetreceiver/actuator/health +regproc_masterdata=/registrationprocessor/v1/registrationstatus/actuator/health +resident_auth_esignet_mobileid=/resident/v1/actuator/health +# TO DO idrepo_auth_mobileid_mimoto_esignet_resident=/v1/ridgenerator/actuator/health +regproc_masterdata=/v1/syncdata/actuator/health +idrepo_auth_mobileid_mimoto_esignet_resident_regproc=/idrepository/v1/actuator/health +auth_idrepo_resident_regproc=/hub/actuator/health +resident_esignet=/v1/esignet/actuator/health + +#The below actuators are not used for functional test rigs. +#regproc=/v1/identity/actuator/health +#regproc=/registrationprocessor/v1/registrationtransaction/actuator/health +#regproc=/registrationprocessor/v1/workflowmanager/actuator/health +#regproc=/registrationprocessor/v1/landingzone/actuator/health +#regproc=/registrationprocessor/v1/notification/actuator/health +#regproc=/registrationprocessor/v1/opencrvs-stage/actuator/health +#regproc=/registrationprocessor/v1/reprocessor/actuator/health +#regproc=/v1/print/actuator/health +#regproc=/registrationprocessor/v1/camelbridge/actuator/health +#regproc=/v1/packetcreator/actuator/health +#regproc=/commons/v1/packetmanager/actuator/health +#regproc=/v1/mock-abis-service/actuator/health +#regproc=/v1/mockmv/actuator/health \ No newline at end of file diff --git a/apitest/src/main/resources/config/idRepoToken.properties b/apitest/src/main/resources/config/idRepoToken.properties new file mode 100644 index 000000000..e8337374e --- /dev/null +++ b/apitest/src/main/resources/config/idRepoToken.properties @@ -0,0 +1,5 @@ +token.request.id=mosip.io.userId.pwd +token.request.appid=ida +token.request.username=ida_testuser +token.request.password=mosip +token.request.version=1.0 \ No newline at end of file diff --git a/apitest/src/main/resources/config/idaDeleteQueriesForEsignet.txt b/apitest/src/main/resources/config/idaDeleteQueriesForEsignet.txt new file mode 100644 index 000000000..0b683afb8 --- /dev/null +++ b/apitest/src/main/resources/config/idaDeleteQueriesForEsignet.txt @@ -0,0 +1,8 @@ +##### DB queries to be executed to tear down the data used and generated during the test rig run + +delete from ida.ca_cert_store WHERE cert_subject LIKE '%O=mosip_partnerorg%' +delete from ida.ca_cert_store WHERE cert_subject LIKE '%O=mosip_ekyc_partner%' +delete from ida.ca_cert_store WHERE cert_subject LIKE '%O=mosip_deviceorg%' +delete from ida.ca_cert_store WHERE cert_subject LIKE '%O=mosip_ftmorg%' +delete from ida.ca_cert_store WHERE cert_subject LIKE '%O=partnernameforautomationesi%' +delete from ida.ca_cert_store WHERE cert_subject LIKE '%O=partnernameforesignet%' \ No newline at end of file diff --git a/apitest/src/main/resources/config/keyManagerDataDeleteQueries.txt b/apitest/src/main/resources/config/keyManagerDataDeleteQueries.txt new file mode 100644 index 000000000..3ecf9f7ce --- /dev/null +++ b/apitest/src/main/resources/config/keyManagerDataDeleteQueries.txt @@ -0,0 +1,14 @@ +##### DB queries to be executed to tear down the data used and generated during the test rig run + +delete from mosip_keymgr.keymgr.ca_cert_store where cert_subject ='CN=mosiptest.org,O=MOSIPTEST,L=Bangalore,ST=Karantaka,C=IN' +delete from mosip_keymgr.keymgr.partner_cert_store where cert_subject ='CN=Techno.com,O=Techno,L=Bangalore,ST=Karnataka,C=IN' +delete from mosip_keymgr.keymgr.partner_cert_store where cert_subject ='CN=Techno,O=Techno,L=Bangalore,ST=Karnataka,C=IN' +delete from mosip_keymgr.keymgr.ca_cert_store where cert_subject ='CN=apitest,OU=apitest,O=apitest,L=BLR,ST=KAR,C=IN' +delete from mosip_keymgr.keymgr.ca_cert_store where cert_subject ='CN=apitest2,OU=apitest2,O=apitest2,L=BLR,ST=KAR,C=IN' +delete from mosip_keymgr.keymgr.partner_cert_store where cert_subject ='CN=deviceprovider,OU=deviceprovider,O=deviceprovider,L=BLR,ST=KAR,C=IN' +delete from mosip_keymgr.keymgr.partner_cert_store where cert_subject ='CN=movp,OU=movp,O=movp,L=BLR,ST=KAR,C=IN' +delete from mosip_keymgr.keymgr.partner_cert_store where cert_subject ='CN=ftp,OU=ftp,O=ftp,L=BLR,ST=KAR,C=IN' +delete from mosip_keymgr.keymgr.partner_cert_store where cert_subject ='CN=misp,OU=misp,O=misp,L=BLR,ST=KAR,C=IN' +delete from mosip_keymgr.keymgr.partner_cert_store where cert_subject ='CN=misp2,OU=misp2,O=misp2,L=BLR,ST=KAR,C=IN' +delete from mosip_keymgr.keymgr.partner_cert_store where cert_subject ='CN=mosipprint,O=mosipprint,L=Bangalore,ST=Karnataka,C=IN' +delete from mosip_keymgr.keymgr.ca_cert_store where cert_subject ='CN=mosipprint,O=mosipprint,L=Bangalore,ST=Karnataka,C=IN' \ No newline at end of file diff --git a/apitest/src/main/resources/config/keyManagerDataDeleteQueriesForEsignet.txt b/apitest/src/main/resources/config/keyManagerDataDeleteQueriesForEsignet.txt new file mode 100644 index 000000000..da5d261d0 --- /dev/null +++ b/apitest/src/main/resources/config/keyManagerDataDeleteQueriesForEsignet.txt @@ -0,0 +1,14 @@ +##### DB queries to be executed to tear down the data used and generated during the test rig run + +delete from mosip_keymgr.keymgr.ca_cert_store WHERE cert_subject LIKE '%O=mosip_partnerorg%' +delete from mosip_keymgr.keymgr.ca_cert_store WHERE cert_subject LIKE '%O=mosip_ekyc_partner%' +delete from mosip_keymgr.keymgr.ca_cert_store WHERE cert_subject LIKE '%O=mosip_deviceorg%' +delete from mosip_keymgr.keymgr.ca_cert_store WHERE cert_subject LIKE '%O=mosip_ftmorg%' +delete from mosip_keymgr.keymgr.ca_cert_store WHERE cert_subject LIKE '%O=partnernameforautomationesi%' +delete from mosip_keymgr.keymgr.ca_cert_store WHERE cert_subject LIKE '%O=partnernameforesignet%' +delete from mosip_keymgr.keymgr.partner_cert_store WHERE cert_subject LIKE '%O=mosip_partnerorg%' +delete from mosip_keymgr.keymgr.partner_cert_store WHERE cert_subject LIKE '%O=mosip_ekyc_partner%' +delete from mosip_keymgr.keymgr.partner_cert_store WHERE cert_subject LIKE '%O=mosip_deviceorg%' +delete from mosip_keymgr.keymgr.partner_cert_store WHERE cert_subject LIKE '%O=mosip_ftmorg%' +delete from mosip_keymgr.keymgr.partner_cert_store WHERE cert_subject LIKE '%O=partnernameforautomationesi%' +delete from mosip_keymgr.keymgr.partner_cert_store WHERE cert_subject LIKE '%O=partnernameforesignet%' \ No newline at end of file diff --git a/apitest/src/main/resources/config/lang-isocode-transid.csv b/apitest/src/main/resources/config/lang-isocode-transid.csv new file mode 100644 index 000000000..7a00fd36e --- /dev/null +++ b/apitest/src/main/resources/config/lang-isocode-transid.csv @@ -0,0 +1,550 @@ +ISO 639-2 Code,English Name,English-to-Language-TransID +aar,Afar,Any-ar +abk,Abkhazian, +ace,Achinese, +ach,Acoli, +ada,Adangme, +ady,Adyghe; Adygei, +afa,Afro-Asiatic languages, +afh,Afrihili, +afr,Afrikaans, +ain,Ainu, +aka,Akan, +akk,Akkadian, +alb (B),Albanian, +sqi (T),, +ale,Aleut, +alg,Algonquian languages, +alt,Southern Altai, +amh,Amharic, +ang,"English, Old (ca.450-1100)", +anp,Angika, +apa,Apache languages, +ara,Arabic,Any-Arab +arc,Official Aramaic (700-300 BCE); Imperial Aramaic (700-300 BCE), +arg,Aragonese, +arm (B),Armenian, +hye (T),, +arn,Mapudungun; Mapuche, +arp,Arapaho, +art,Artificial languages, +arw,Arawak, +asm,Assamese, +ast,Asturian; Bable; Leonese; Asturleonese, +ath,Athapascan languages, +aus,Australian languages, +ava,Avaric, +ave,Avestan, +awa,Awadhi, +aym,Aymara, +aze,Azerbaijani, +bad,Banda languages, +bai,Bamileke languages, +bak,Bashkir, +bal,Baluchi, +bam,Bambara, +ban,Balinese, +baq (B),Basque, +eus (T),, +bas,Basa, +bat,Baltic languages, +bej,Beja; Bedawiyet, +bel,Belarusian, +bem,Bemba, +ben,Bengali, +ber,Berber languages, +bho,Bhojpuri, +bih,Bihari languages, +bik,Bikol, +bin,Bini; Edo, +bis,Bislama, +bla,Siksika, +bnt,Bantu languages, +tib (B),Tibetan, +bod (T),, +bos,Bosnian, +bra,Braj, +bre,Breton, +btk,Batak languages, +bua,Buriat, +bug,Buginese, +bul,Bulgarian, +bur (B),Burmese, +mya (T),, +byn,Blin; Bilin, +cad,Caddo, +cai,Central American Indian languages, +car,Galibi Carib, +cat,Catalan; Valencian, +cau,Caucasian languages, +ceb,Cebuano, +cel,Celtic languages, +cze (B),Czech, +ces (T),, +cha,Chamorro, +chb,Chibcha, +che,Chechen, +chg,Chagatai, +chi (B),Chinese, +zho (T),, +chk,Chuukese, +chm,Mari, +chn,Chinook jargon, +cho,Choctaw, +chp,Chipewyan; Dene Suline, +chr,Cherokee, +chu,Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic, +chv,Chuvash, +chy,Cheyenne, +cmc,Chamic languages, +cnr,Montenegrin, +cop,Coptic, +cor,Cornish, +cos,Corsican, +cpe,"Creoles and pidgins, English based", +cpf,"Creoles and pidgins, French-based", +cpp,"Creoles and pidgins, Portuguese-based", +cre,Cree, +crh,Crimean Tatar; Crimean Turkish, +crp,Creoles and pidgins, +csb,Kashubian, +cus,Cushitic languages, +wel (B),Welsh, +cym (T),, +cze (B),Czech, +ces (T),, +dak,Dakota, +dan,Danish, +dar,Dargwa, +day,Land Dayak languages, +del,Delaware, +den,Slave (Athapascan), +ger (B),German, +deu (T),, +dgr,Dogrib, +din,Dinka, +div,Divehi; Dhivehi; Maldivian, +doi,Dogri, +dra,Dravidian languages, +dsb,Lower Sorbian, +dua,Duala, +dum,"Dutch, Middle (ca.1050-1350)", +dut (B),Dutch; Flemish, +nld (T),, +dyu,Dyula, +dzo,Dzongkha, +efi,Efik, +egy,Egyptian (Ancient), +eka,Ekajuk, +gre (B),"Greek, Modern (1453-)", +ell (T),, +elx,Elamite, +eng,English,eng, +enm,"English, Middle (1100-1500)", +epo,Esperanto, +est,Estonian, +baq (B),Basque, +eus (T),, +ewe,Ewe, +ewo,Ewondo, +fan,Fang,Any-fa +fao,Faroese, +per (B),Persian, +fas (T),, +fat,Fanti, +fij,Fijian, +fil,Filipino; Pilipino, +fin,Finnish, +fiu,Finno-Ugrian languages, +fon,Fon, +fre (B),French, +fra (T),, +fre (B),French, +fra (T),, +frm,"French, Middle (ca.1400-1600)", +fro,"French, Old (842-ca.1400)", +frr,Northern Frisian, +frs,Eastern Frisian, +fry,Western Frisian, +ful,Fulah, +fur,Friulian, +gaa,Ga, +gay,Gayo, +gba,Gbaya, +gem,Germanic languages, +geo (B),Georgian, +kat (T),, +ger (B),German, +deu (T),, +gez,Geez, +gil,Gilbertese, +gla,Gaelic; Scottish Gaelic, +gle,Irish, +glg,Galician, +glv,Manx, +gmh,"German, Middle High (ca.1050-1500)", +goh,"German, Old High (ca.750-1050)", +gon,Gondi, +gor,Gorontalo, +got,Gothic, +grb,Grebo, +grc,"Greek, Ancient (to 1453)", +gre (B),"Greek, Modern (1453-)", +ell (T),, +grn,Guarani, +gsw,Swiss German; Alemannic; Alsatian, +guj,Gujarati, +gwi,Gwich'in, +hai,Haida, +hat,Haitian; Haitian Creole, +hau,Hausa, +haw,Hawaiian, +heb,Hebrew,Any-Hebrew +her,Herero, +hil,Hiligaynon, +him,Himachali languages; Western Pahari languages, +hin,Hindi,Any-Devanagari +kan,Kannada,Any-Kannada +tam,Tamil,Any-Tamil +hit,Hittite, +hmn,Hmong; Mong, +hmo,Hiri Motu, +hrv,Croatian, +hsb,Upper Sorbian, +hun,Hungarian, +hup,Hupa, +arm (B),Armenian, +hye (T),, +iba,Iban, +ibo,Igbo, +ice (B),Icelandic, +isl (T),, +ido,Ido, +iii,Sichuan Yi; Nuosu, +ijo,Ijo languages, +iku,Inuktitut, +ile,Interlingue; Occidental, +ilo,Iloko, +ina,Interlingua (International Auxiliary Language Association), +inc,Indic languages, +ind,Indonesian, +ine,Indo-European languages, +inh,Ingush, +ipk,Inupiaq, +ira,Iranian languages, +iro,Iroquoian languages, +ice (B),Icelandic, +isl (T),, +ita,Italian, +jav,Javanese, +jbo,Lojban, +jpn,Japanese, +jpr,Judeo-Persian, +jrb,Judeo-Arabic, +kaa,Kara-Kalpak, +kab,Kabyle, +kac,Kachin; Jingpho, +kal,Kalaallisut; Greenlandic, +kam,Kamba, +kan,Kannada, +kar,Karen languages, +kas,Kashmiri, +geo (B),Georgian, +kat (T),, +kau,Kanuri, +kaw,Kawi, +kaz,Kazakh, +kbd,Kabardian, +kha,Khasi, +khi,Khoisan languages, +khm,Central Khmer, +kho,Khotanese; Sakan, +kik,Kikuyu; Gikuyu, +kin,Kinyarwanda, +kir,Kirghiz; Kyrgyz, +kmb,Kimbundu, +kok,Konkani, +kom,Komi, +kon,Kongo, +kor,Korean, +kos,Kosraean, +kpe,Kpelle, +krc,Karachay-Balkar, +krl,Karelian, +kro,Kru languages, +kru,Kurukh, +kua,Kuanyama; Kwanyama, +kum,Kumyk, +kur,Kurdish, +kut,Kutenai, +lad,Ladino, +lah,Lahnda, +lam,Lamba, +lao,Lao, +lat,Latin,Any-Latin +lav,Latvian, +lez,Lezghian, +lim,Limburgan; Limburger; Limburgish, +lin,Lingala, +lit,Lithuanian, +lol,Mongo, +loz,Lozi, +ltz,Luxembourgish; Letzeburgesch, +lua,Luba-Lulua, +lub,Luba-Katanga, +lug,Ganda, +lui,Luiseno, +lun,Lunda, +luo,Luo (Kenya and Tanzania), +lus,Lushai, +mac (B),Macedonian, +mkd (T),, +mad,Madurese, +mag,Magahi, +mah,Marshallese, +mai,Maithili, +mak,Makasar, +mal,Malayalam, +man,Mandingo, +mao (B),Maori, +mri (T),, +map,Austronesian languages, +mar,Marathi, +mas,Masai, +may (B),Malay, +msa (T),, +mdf,Moksha, +mdr,Mandar, +men,Mende, +mga,"Irish, Middle (900-1200)", +mic,Mi'kmaq; Micmac, +min,Minangkabau, +mis,Uncoded languages, +mac (B),Macedonian, +mkd (T),, +mkh,Mon-Khmer languages, +mlg,Malagasy, +mlt,Maltese, +mnc,Manchu, +mni,Manipuri, +mno,Manobo languages, +moh,Mohawk, +mon,Mongolian, +mos,Mossi, +mao (B),Maori, +mri (T),, +may (B),Malay, +msa (T),, +mul,Multiple languages, +mun,Munda languages, +mus,Creek, +mwl,Mirandese, +mwr,Marwari, +bur (B),Burmese, +mya (T),, +myn,Mayan languages, +myv,Erzya, +nah,Nahuatl languages, +nai,North American Indian languages, +nap,Neapolitan, +nau,Nauru, +nav,Navajo; Navaho, +nbl,"Ndebele, South; South Ndebele", +nde,"Ndebele, North; North Ndebele", +ndo,Ndonga, +nds,"Low German; Low Saxon; German, Low; Saxon, Low", +nep,Nepali, +new,Nepal Bhasa; Newari, +nia,Nias, +nic,Niger-Kordofanian languages, +niu,Niuean, +dut (B),Dutch; Flemish, +nld (T),, +nno,"Norwegian Nynorsk; Nynorsk, Norwegian", +nob,"Bokmål, Norwegian; Norwegian Bokmål", +nog,Nogai, +non,"Norse, Old", +nor,Norwegian, +nqo,N'Ko, +nso,Pedi; Sepedi; Northern Sotho, +nub,Nubian languages, +nwc,Classical Newari; Old Newari; Classical Nepal Bhasa, +nya,Chichewa; Chewa; Nyanja, +nym,Nyamwezi, +nyn,Nyankole, +nyo,Nyoro, +nzi,Nzima, +oci,Occitan (post 1500), +oji,Ojibwa, +ori,Oriya, +orm,Oromo, +osa,Osage, +oss,Ossetian; Ossetic, +ota,"Turkish, Ottoman (1500-1928)", +oto,Otomian languages, +paa,Papuan languages, +pag,Pangasinan, +pal,Pahlavi, +pam,Pampanga; Kapampangan, +pan,Panjabi; Punjabi, +pap,Papiamento, +pau,Palauan, +peo,"Persian, Old (ca.600-400 B.C.)", +per (B),Persian, +fas (T),, +phi,Philippine languages, +phn,Phoenician, +pli,Pali, +pol,Polish, +pon,Pohnpeian, +por,Portuguese, +pra,Prakrit languages, +pro,"Provençal, Old (to 1500);Occitan, Old (to 1500)", +pus,Pushto; Pashto, +qaa-qtz,Reserved for local use, +que,Quechua, +raj,Rajasthani, +rap,Rapanui, +rar,Rarotongan; Cook Islands Maori, +roa,Romance languages, +roh,Romansh, +rom,Romany, +rum (B),Romanian; Moldavian; Moldovan, +ron (T),, +rum (B),Romanian; Moldavian; Moldovan, +ron (T),, +run,Rundi, +rup,Aromanian; Arumanian; Macedo-Romanian, +rus,Russian, +sad,Sandawe, +sag,Sango, +sah,Yakut, +sai,South American Indian languages, +sal,Salishan languages, +sam,Samaritan Aramaic, +san,Sanskrit, +sas,Sasak, +sat,Santali, +scn,Sicilian, +sco,Scots, +sel,Selkup, +sem,Semitic languages, +sga,"Irish, Old (to 900)", +sgn,Sign Languages, +shn,Shan, +sid,Sidamo, +sin,Sinhala; Sinhalese, +sio,Siouan languages, +sit,Sino-Tibetan languages, +sla,Slavic languages, +slo (B),Slovak, +slk (T),, +slo (B),Slovak, +slk (T),, +slv,Slovenian, +sma,Southern Sami, +sme,Northern Sami, +smi,Sami languages, +smj,Lule Sami, +smn,Inari Sami, +smo,Samoan, +sms,Skolt Sami, +sna,Shona, +snd,Sindhi, +snk,Soninke, +sog,Sogdian, +som,Somali, +son,Songhai languages, +sot,"Sotho, Southern", +spa,Spanish; Castilian, +alb (B),Albanian, +sqi (T),, +srd,Sardinian, +srn,Sranan Tongo, +srp,Serbian, +srr,Serer, +ssa,Nilo-Saharan languages, +ssw,Swati, +suk,Sukuma, +sun,Sundanese, +sus,Susu, +sux,Sumerian, +swa,Swahili, +swe,Swedish, +syc,Classical Syriac, +syr,Syriac, +tah,Tahitian, +tai,Tai languages, +tam,Tamil, +tat,Tatar, +tel,Telugu, +tem,Timne, +ter,Tereno, +tet,Tetum, +tgk,Tajik, +tgl,Tagalog, +tha,Thai,Any-Thai +tib (B),Tibetan, +bod (T),, +tig,Tigre, +tir,Tigrinya, +tiv,Tiv, +tkl,Tokelau, +tlh,Klingon; tlhIngan-Hol, +tli,Tlingit, +tmh,Tamashek, +tog,Tonga (Nyasa), +ton,Tonga (Tonga Islands), +tpi,Tok Pisin, +tsi,Tsimshian, +tsn,Tswana, +tso,Tsonga, +tuk,Turkmen, +tum,Tumbuka, +tup,Tupi languages, +tur,Turkish, +tut,Altaic languages, +tvl,Tuvalu, +twi,Twi, +tyv,Tuvinian, +udm,Udmurt, +uga,Ugaritic, +uig,Uighur; Uyghur, +ukr,Ukrainian, +umb,Umbundu, +und,Undetermined, +urd,Urdu, +uzb,Uzbek, +vai,Vai, +ven,Venda, +vie,Vietnamese, +vol,Volapük, +vot,Votic, +wak,Wakashan languages, +wal,Wolaitta; Wolaytta, +war,Waray, +was,Washo, +wel (B),Welsh, +cym (T),, +wen,Sorbian languages, +wln,Walloon, +wol,Wolof, +xal,Kalmyk; Oirat, +xho,Xhosa, +yao,Yao, +yap,Yapese, +yid,Yiddish, +yor,Yoruba, +ypk,Yupik languages, +zap,Zapotec, +zbl,Blissymbols; Blissymbolics; Bliss, +zen,Zenaga, +zgh,Standard Moroccan Tamazight, +zha,Zhuang; Chuang, +chi (B),Chinese, +zho (T),, +znd,Zande languages, +zul,Zulu, +zun,Zuni, +zxx,No linguistic content; Not applicable, +zza,, diff --git a/apitest/src/main/resources/config/mapping.properties b/apitest/src/main/resources/config/mapping.properties new file mode 100644 index 000000000..1e1908c8f --- /dev/null +++ b/apitest/src/main/resources/config/mapping.properties @@ -0,0 +1,29 @@ +AuthReq.domainUri=domainUri +AuthReq.env=env +AuthReq.keyIndex=keyIndex +AuthReq.specVersion=specVersion +AuthReq.thumbprint=thumbprint +AuthReq.demo=requestedAuth.demo +AuthReq.pin=requestedAuth.pin +AuthReq.consentObtained=consentObtained +AuthReq.id=id +AuthReq.requestTime=requestTime +AuthReq.demo=requestedAuth.demo +AuthReq.transactionID=transactionID +AuthReq.request=request +AuthReq.individualId=individualId +AuthReq.version=version +AuthReq.individualIdType=individualIdType +AuthReq.requestSessionKey=requestSessionKey +AuthReq.otp=requestedAuth.otp +AuthReqrequestHMAC=requestHMAC +AuthReq.bio=requestedAuth.bio + +#TestScriptMapping +#ModifyBioAuth +key=requestSessionKey +data=request +hmac=requestHMAC +thumbprint=thumbprint +#ModifyEkycRequest +authRequest=authRequest \ No newline at end of file diff --git a/apitest/src/main/resources/config/masterDataDeleteQueries.txt b/apitest/src/main/resources/config/masterDataDeleteQueries.txt new file mode 100644 index 000000000..be2ab648a --- /dev/null +++ b/apitest/src/main/resources/config/masterDataDeleteQueries.txt @@ -0,0 +1,91 @@ +##### DB queries to be executed to tear down the data used and generated during the test rig run + +delete from master.blocklisted_words where cr_by='dumbo6' +delete from master.blocklisted_words where word='dumbooo' +delete from master.blocklisted_words where cr_by='masterdata-220005' +delete from master.machine_master where cr_by='masterdata-220005' +delete from master.machine_master where cr_by='masterdata-220005' +delete from master.machine_master where name in ('Mach-Test','Mach-Test2','Mach-Test updated') +delete from master.machine_master mm WHERE mm.mspec_id IN(SELECT ms.id from master.machine_spec ms where ms.cr_by='masterdata-220005') +delete FROM master.machine_spec WHERE mtyp_code IN (SELECT code FROM master.machine_type WHERE cr_by = 'masterdata-220005') +delete from master.machine_spec where cr_by='masterdata-220005' +delete from master.machine_type where cr_by='masterdata-220005' +delete from master.gender where cr_by='masterdata-220005' +delete from master.device_master where upd_by='masterdata-220005' +delete from master.device_master where cr_by='masterdata-220005' +delete from master.device_master where name='testDevicedummy' +DELETE FROM master.device_master WHERE dspec_id IN(SELECT id FROM master.device_spec WHERE cr_by='masterdata-220005') +delete from master.device_spec where cr_by='masterdata-220005' +delete from master.device_type where cr_by='masterdata-220005' +delete from master.loc_holiday where cr_by='masterdata-220005' +delete from master.reg_center_type where cr_by='masterdata-220005' +delete from master.registration_center where cr_by='masterdata-220005' +delete from master.loc_holiday where cr_by='masterdata-220005' +delete from master.reg_center_type where cr_by='masterdata-220005' +delete from master.registration_center where cr_by='masterdata-220005' +delete from master.device_type where cr_by='masterdata-220005' +delete from master.doc_type where cr_by='masterdata-220005' +delete from master.doc_category where cr_by='masterdata-220005' +delete from master.location where cr_by='masterdata-220005' +delete from master.template where cr_by='masterdata-220005' +update master.template set is_active='true', is_deleted='false' where id='1101' +delete from master.template where template_typ_code IN(select code from master.template_type where code='Test-info-Template-auto') +delete from master.template_type where code='Test-info-Template-auto' +update master.location set is_active='true', is_deleted='false' where code='10114' +delete from master.location where code in('TST123','IND') +delete from master.valid_document where cr_by='masterdata-220005' +delete from master.user_detail where cr_by='masterdata-220005' +delete from master.template_type where cr_by='masterdata-220005' +delete from master.template_file_format where cr_by='masterdata-220005' +delete from master.reason_list where cr_by='masterdata-220005' +delete from master.reason_category where cr_by='masterdata-220005' +delete from master.language where cr_by='masterdata-220005' +delete from master.identity_schema where cr_by='masterdata-220005' +delete from master.biometric_attribute where cr_by='masterdata-220005' +delete from master.biometric_type where cr_by='masterdata-220005' +delete from master.appl_form_type where cr_by='masterdata-220005' +delete from master.id_type where cr_by='masterdata-220005' +delete from master.dynamic_field where cr_by='masterdata-220005' +delete from master.zone_user where usr_id='masterdata-220005' +delete from master.blocklisted_words where word='dumbo6' +delete from master.blocklisted_words where word='dumbo7' +delete from master.machine_master where name in ('Mach-Test','Mach-Test2','Mach-Test updated') +delete from master.machine_master where mac_address = '61-D3-FD-12-C9-ED' +delete from master.machine_spec where name='HP' +delete from master.machine_master where cr_by='masterdata-220005' +delete from master.machine_type where code='Laptop2' +delete from master.gender where code='Genderdummy' +delete from master.device_master where name in ('testDevicedummy','testDevicedummy updated') +delete from master.device_master where dspec_id='743' +delete from master.device_spec where id='743' +delete from master.device_type where code='GST3' +delete from master.loc_holiday where holiday_name='AutoTest user Eng' +delete from master.loc_holiday where upd_by='masterdata-220005' +delete from master.reg_center_type where code='ALT-3' +delete FROM master.registration_center where name in ('Test123','HSR Center updated') +delete from master.loc_holiday where holiday_name in ('AutoTest user Eng','AutoTest user') +delete from master.reg_center_type where code in('ALT-3','ALT-5') +delete from master.registration_center where id='10000' +delete from master.device_type where code in ('GST3','GST4') +delete from master.doc_type where code in ('TestDocType0010','TestDocType0020') +delete from master.doc_category where code in ('DocTestCode123','DocTestCode321') +delete from master.location where code='TST12' +delete from master.template where id='445566777' +delete from master.template where template_typ_code IN(select code from master.template_type where code='Test-info-Template-auto') +update master.template set is_active='true', is_deleted='false' where id='1101' +delete from master.template_type where code='Test-info-Template-auto' +update master.location set is_active='true', is_deleted='false' where code='10114' +delete from master.location where code in('TST123','IND') +delete from master.valid_document where doctyp_Code='doc_auto_test' +delete from master.user_detail where cr_by='110005' +delete from master.template_type where code='Test-info-Template-auto' +delete from master.template_file_format where code='Doc' +delete from master.reason_list where code='TEST_LIST_CODE' +delete from master.reason_category where code='TEST_CAT_CODE' +delete from master.language where code='automationLang' +delete from master.identity_schema where title='test-schema' +delete from master.biometric_attribute where code='TST' +delete from master.biometric_type where code='dumbo6' +delete from master.appl_form_type where code='dumbo' +delete from master.id_type where code='NEW' +delete from master.dynamic_field where name in ('TestAutomationField','TestAPL') \ No newline at end of file diff --git a/apitest/src/main/resources/config/masterDataDeleteQueriesForEsignet.txt b/apitest/src/main/resources/config/masterDataDeleteQueriesForEsignet.txt new file mode 100644 index 000000000..736aa7684 --- /dev/null +++ b/apitest/src/main/resources/config/masterDataDeleteQueriesForEsignet.txt @@ -0,0 +1,8 @@ +##### DB queries to be executed to tear down the data used and generated during the test rig run + +delete from master.ca_cert_store WHERE cert_subject LIKE '%O=mosip_partnerorg%' +delete from master.ca_cert_store WHERE cert_subject LIKE '%O=mosip_ekyc_partner%' +delete from master.ca_cert_store WHERE cert_subject LIKE '%O=mosip_deviceorg%' +delete from master.ca_cert_store WHERE cert_subject LIKE '%O=mosip_ftmorg%' +delete from master.ca_cert_store WHERE cert_subject LIKE '%O=partnernameforautomationesi%' +delete from master.ca_cert_store WHERE cert_subject LIKE '%O=partnernameforesignet%' \ No newline at end of file diff --git a/apitest/src/main/resources/config/packetProperties.properties b/apitest/src/main/resources/config/packetProperties.properties new file mode 100644 index 000000000..6b783e692 --- /dev/null +++ b/apitest/src/main/resources/config/packetProperties.properties @@ -0,0 +1,2 @@ +machineId=99999 +centerId=33341 diff --git a/apitest/src/main/resources/config/packetValidator.properties b/apitest/src/main/resources/config/packetValidator.properties new file mode 100644 index 000000000..320f9e5fe --- /dev/null +++ b/apitest/src/main/resources/config/packetValidator.properties @@ -0,0 +1,2 @@ +file1=audit.json +file2=ID.json diff --git a/apitest/src/main/resources/config/partnerDemoService.properties b/apitest/src/main/resources/config/partnerDemoService.properties new file mode 100644 index 000000000..bbb432d7e --- /dev/null +++ b/apitest/src/main/resources/config/partnerDemoService.properties @@ -0,0 +1,8 @@ +# these are the ports used for running the partner-demo-service, it should be same as in ida envRunConfig.properties +preprod.encryptionPort=7653 +dev.encryptionPort=7654 +int.encryptionPort=7655 +qa.encryptionPort=7656 +extint.encryptionPort=7657 +sandbox.encryptionPort=7658 +dev-test.encryptionPort=7659 \ No newline at end of file diff --git a/apitest/src/main/resources/config/partnerQueries.properties b/apitest/src/main/resources/config/partnerQueries.properties new file mode 100644 index 000000000..8d39fa4d2 --- /dev/null +++ b/apitest/src/main/resources/config/partnerQueries.properties @@ -0,0 +1,135 @@ +deletePartnerpolicy=DELETE FROM policy_group WHERE "name"='MOSIP POLICY' AND cr_by='pm_testuser'; + +deleteUpdatePartnerpolicy=DELETE FROM policy_group WHERE "name"='MOSIP POLICY UPDATE' AND cr_by='pm_testuser'; + +createPartnerAuth=INSERT INTO auth_policy(\ +id, policy_group_id, "name", descr, policy_file_id, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ +VALUES('MOSIP-AUTH-ID-01', 'MOSIP-POLICY-ID-01', 'MOSIP POLICY', 'DESCR MOSIP POLICY', '{"authPolicies":[{"authType":"otp","authSubType":null,"mandatory":true},{"authType":"demo","authSubType":null,"mandatory":false},{"authType":"bio","authSubType":"FINGER","mandatory":false},{"authType":"bio","authSubType":"IRIS","mandatory":false},{"authType":"bio","authSubType":"FACE","mandatory":false},{"authType":"kyc","authSubType":null,"mandatory":false}],"allowedKycAttributes":[{"attributeName":"fullName","required":true},{"attributeName":"dateOfBirth","required":true},{"attributeName":"gender","required":true},{"attributeName":"phone","required":true},{"attributeName":"email","required":true},{"attributeName":"addressLine1","required":false},{"attributeName":"addressLine2","required":false},{"attributeName":"addressLine3","required":false},{"attributeName":"location1","required":false},{"attributeName":"location2","required":false},{"attributeName":"location3","required":false},{"attributeName":"postalCode","required":false},{"attributeName":"photo","required":false}]}', true, 'pm_testuser', '2020-05-14T09:48:43.394Z', null, null, false, null); + +deletePartnerAuth=DELETE FROM auth_policy WHERE "name"='MOSIP POLICY' AND cr_by='pm_testuser'; + +deleteUpdatePartnerAuth=DELETE FROM auth_policy WHERE "name"='MOSIP POLICY UPDATE' AND cr_by='pm_testuser'; + +deletePartnerAuthH=DELETE FROM auth_policy_h WHERE "name"='MOSIP POLICY' AND cr_by='pm_testuser'; + +deleteUpdatePartnerAuthH=DELETE FROM auth_policy_h WHERE "name"='MOSIP POLICY UPDATE' AND cr_by='pm_testuser'; + +registerPartner=INSERT INTO pmp.partner(\ +id,policy_group_id, name, address, contact_no, email_id, public_key, user_id, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ +VALUES('PMP-PART-ID-01','MOSIP-POLICY-ID-01','FUN-TEST-O1','HSR','8651119791','hsr@gmail.com',null,'pm_testuser',true,'pm_testuser','2020-05-14T09:48:43.394Z',null,null,null,null); + +#deleteRegisterPartner=delete from pmp.partner where policy_group_id IN ('MOSIP-POLICY-ID-01','TF-POLICY-ID-01') and contact_no='8651119791'; + +deleteRegisterPartner=delete from pmp.partner where policy_group_id IN ('MOSIP-POLICY-ID-01','TF-POLICY-ID-01'); + + + +#deleteSubmitPartnerApiKeyReq=delete from pmp.partner_policy_request where policy_id='MOSIP-POLICY-ID-01' and part_id='PMP-PART-ID-01'; + +createPartnerAPIKey=INSERT INTO partner_policy(\ +policy_api_key, part_id, policy_id, valid_from_datetime, valid_to_datetime, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ +VALUES('PAT-API-KEY-ID-01', 'PMP-PART-ID-01', 'MOSIP-AUTH-ID-01', '2020-06-17T21:15:19.724Z', '2020-08-16T04:23:39.148Z', true, 'pm_testuser', '2020-06-17T21:15:19.724Z', null, null, false, null); + +deletePartnerAPIKey=DELETE FROM partner_policy WHERE part_id='PMP-PART-ID-01' AND policy_id IN ('MOSIP-AUTH-ID-01','TF-AUTH-ID-01'); + +createTFpolicy=INSERT INTO policy_group(\ +id, "name", descr, user_id, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ +VALUES('TF-POLICY-ID-01', 'TF POLICY', 'DESCR TF POLICY', 'pm_testuser', true, 'pm_testuser', '2020-05-14T09:48:43.394Z', null, null, false, null); + +deleteTFpolicy=DELETE FROM policy_group WHERE "name"='TF POLICY' AND cr_by='pm_testuser'; + +createTFAuth=INSERT INTO auth_policy(\ +id, policy_group_id, "name", descr, policy_file_id, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ +VALUES('TF-AUTH-ID-01', 'TF-POLICY-ID-01', 'TF POLICY', 'DESCR TF POLICY', '{"authPolicies":[{"authType":"otp","authSubType":null,"mandatory":true},{"authType":"demo","authSubType":null,"mandatory":false},{"authType":"bio","authSubType":"FINGER","mandatory":false},{"authType":"bio","authSubType":"IRIS","mandatory":false},{"authType":"bio","authSubType":"FACE","mandatory":false},{"authType":"kyc","authSubType":null,"mandatory":false}],"allowedKycAttributes":[{"attributeName":"fullName","required":true},{"attributeName":"dateOfBirth","required":true},{"attributeName":"gender","required":true},{"attributeName":"phone","required":true},{"attributeName":"email","required":true},{"attributeName":"addressLine1","required":false},{"attributeName":"addressLine2","required":false},{"attributeName":"addressLine3","required":false},{"attributeName":"location1","required":false},{"attributeName":"location2","required":false},{"attributeName":"location3","required":false},{"attributeName":"postalCode","required":false},{"attributeName":"photo","required":false}]}', true, 'pm_testuser', '2020-05-14T09:48:43.394Z', null, null, false, null); + +deleteTFAuth=DELETE FROM auth_policy WHERE "name"='TF POLICY' AND cr_by='pm_testuser'; + +deleteMISP= delete from pms.misp where name='MISP_Test0002'; + +#deleteMISP= delete from pmp.misp where cr_by='pm_testuser'; + +createMISP= INSERT INTO pms.misp(\ +id,name, address, contact_no, email_id, user_id, is_active, status_code, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ +VALUES('MISP-FUN-ID-01','MISP_Test0002','Bangalore','9840587080','misp@telecom.com','pm_testuser','true','Active','pm_testuser','2020-06-17T05:10:51.169Z',null,null,null,null); +validateMISPLicence=INSERT INTO pms.misp_license(\ + misp_id, license_key, valid_from_date, valid_to_date, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('MISP-FUN-ID-01','r9YUOi2BvC9QVdZP5snsCeonXqdEZ9rQ0TroekqHMhX3c8mPfrtestfun','2020-09-18T06:53:18.150Z','2020-10-18T06:53:18.150Z',true,'pm_testuser','2020-09-18T06:53:18.150Z',null,null,null,null); + +#deleteValidateMISPLicence= delete from pmp.misp_license where cr_by='pm_testuser'; + +deleteValidateMISPLicence= delete from pms.misp_license where misp_id='MISP-FUN-ID-01'; + +approveMISP=UPDATE pms.misp SET status_code='approved',upd_by='pm_testuser', upd_dtimes='2019-06-19T09:48:43.394Z' WHERE id='MISP-FUN-ID-01'; + + +# updated policy management ------------------------------------------------- + +createPartnerType=INSERT INTO pms.partner_type(\ + code, partner_description, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes, is_policy_required)\ + VALUES ('Mosip Auth', 'Mosip Auth Desc', true, 'pm_testuser', CURRENT_DATE, null, null, null, null, null); + +deletePartnerType=delete from pms.partner_type where code='Mosip Auth' and cr_by='pm_testuser'; + +createPolicyGroup=INSERT INTO pms.policy_group(\ +id, "name", descr, user_id, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ +VALUES('POLICY-GROUP-ID-01', 'MOSIP POLICY GROUP', 'DESCR MOSIP POLICY GROUP', 'pm_testuser', true, 'pm_testuser', '2020-05-14T09:48:43.394Z', null, null, false, null); + +deletePolicyGroup=DELETE FROM pms.policy_group WHERE name='MOSIP POLICY GROUP' AND cr_by='pm_testuser'; + +deleteAuthHPolicy=delete FROM pms.auth_policy_h where name='MOSIP AUTH POLICY' and cr_by='pm_testuser'; + +createAuthPolicy=INSERT INTO pms.auth_policy(\ +id, policy_group_id, name, descr, policy_file_id, policy_type, version, policy_schema, valid_from_date, valid_to_date, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ +VALUES('POLICY-AUTH-ID-01','POLICY-GROUP-ID-01','MOSIP AUTH POLICY', 'DESC MOSIP AUTH POLICY', '{"authTokenType":"partner","allowedAuthTypes":[{"authType":"bio","authSubType":"FINGER","mandatory":true}],"shareableAttributes":[{"encrypted":true,"format":"string","attributeName":"string"}],"dataSharePolicies":{"typeOfShare":"string","transactionsAllowed":"string","shareDomain":"string","encryptionType":"string","validForInMinutes":"string"}}',\ +'Auth','1.0',null,'2020-09-16T02:50:33.344Z','2020-10-16T02:50:33.344Z',true,'pm_testuser','2020-09-16T02:50:33.344Z',null,null,false,null); + +deleteAuthPolicy=delete FROM pms.auth_policy where name='MOSIP AUTH POLICY' and cr_by='pm_testuser'; + +createAuthPolicyForPublishPolicy=INSERT INTO pms.auth_policy(\ +id, policy_group_id, name, descr, policy_file_id, policy_type, version, policy_schema, valid_from_date, valid_to_date, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ +VALUES('POLICY-AUTH-ID-01','POLICY-GROUP-ID-01','MOSIP AUTH POLICY', 'DESC MOSIP AUTH POLICY', '{"authTokenType":"partner","allowedAuthTypes":[{"authType":"bio","authSubType":"FINGER","mandatory":true}],"shareableAttributes":[{"encrypted":true,"format":"string","attributeName":"string"}],"dataSharePolicies":{"typeOfShare":"string","transactionsAllowed":"string","shareDomain":"string","encryptionType":"string","validForInMinutes":"string"}}',\ +'Auth','1.0',null,'2020-09-16T02:50:33.344Z','2020-10-16T02:50:33.344Z',false,'pm_testuser','2020-09-16T02:50:33.344Z',null,null,false,null); + + +createPartner=INSERT INTO pms.partner(\ +id, policy_group_id, name, address, contact_no, email_id, certificate_alias, user_id, partner_type_code, approval_status, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ +VALUES('PMS-ID-01', 'POLICY-GROUP-ID-01', 'PMS', 'INDIA', '1234567809', 'test@mosip.com', null, 'pm_testuser', 'Mosip Auth','Activated', true, 'pm_testuser','2020-05-14T09:48:43.394Z',null,null,null,null); + +#deletePartner=DELETE FROM pms.partner WHERE id='PMS-ID-01' AND cr_by='pm_testuser'; +deletePartner=DELETE FROM pms.partner WHERE name='PMS' AND cr_by='pm_testuser'; + +createPartnerApiKey=INSERT INTO pms.partner_policy(\ +policy_api_key, part_id, policy_id, valid_from_datetime, valid_to_datetime, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ +VALUES('API-KEY-ID-01','PMS-ID-01','POLICY-AUTH-ID-01', '2020-09-17T12:56:17.598Z','2020-10-16T02:50:33.344Z', true, 'pm_testuser', '2020-09-17T12:56:17.598Z',null,null,null,null); + +deletePartnerApiKeyData=DELETE FROM pms.partner_policy WHERE policy_api_key='API-KEY-ID-01' AND cr_by='pm_testuser'; + +submitPartnerApiKeyReq=INSERT INTO pms.partner_policy_request(\ +id, part_id, policy_id, request_datetimes, request_detail, status_code, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ +VALUES('SUB-PMP-REQ-ID-01','PMS-ID-01','POLICY-AUTH-ID-01','2020-06-01T12:36:03.897Z','Need to submit the payment','in-progress','pm_testuser','2020-06-01T12:36:03.897Z',null,null,null,null); + +deleteSubmitPartnerApiKeyReq=delete from pms.partner_policy_request where policy_id='POLICY-AUTH-ID-01' and part_id='PMS-ID-01'; + +deletePartnerContact=DELETE FROM pms.partner_contact WHERE partner_id='PMS-ID-01' AND cr_by='pm_testuser'; + +createDeviceDetail=INSERT INTO regdevice.device_detail(\ + id, dprovider_id, dtype_code, dstype_code, make, model, partner_org_name, approval_status, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('DEVICE-ID-01','PMS-ID-01', 'Finger', 'Slab', 'xyz', 'FRO90000', 'PMS', 'Pending_Approval', false, 'pm_testuser', '2020-09-28T14:17:19.411Z', null, null, false, null); + + +deleteDeviceDetail=delete from regdevice.device_detail where id='DEVICE-ID-01' and cr_by = 'pm_testuser'; + +updateDeviceDetail=UPDATE regdevice.device_detail SET approval_status='Activated', is_active=true, upd_by='pm_testuser', upd_dtimes='2020-09-29T05:59:20.268Z' WHERE id='DEVICE-ID-01'; + +createSecureBiometricInterface=INSERT INTO regdevice.secure_biometric_interface(\ + id, sw_binary_hash, sw_version, device_detail_id, sw_cr_dtimes, sw_expiry_dtimes, approval_status, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('3c0e8f2e', '[binary data]', 'MO.TD.01','DEVICE-ID-01', '2020-09-23T10:29:49.309Z', '2020-12-31T07:00:13.375Z', 'Pending_Approval', false, 'pm_testuser','2020-09-29T08:17:07.944Z', null, null, false, null); + +deleteSecureBiometricInterface=delete from regdevice.secure_biometric_interface where device_detail_id='DEVICE-ID-01' and cr_by='pm_testuser'; +deleteSecureBiometricInterfaceH=delete from regdevice.secure_biometric_interface_h where device_detail_id='DEVICE-ID-01' and cr_by='pm_testuser'; + +createSaveFtpChipDetail=INSERT INTO regdevice.ftp_chip_detail(\ + id, foundational_trust_provider_id, make, model, certificate_alias, partner_org_name, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ + VALUES ('FTP-ID-01', 'PMS-ID-01', 'MAKE01', 'MODEL-01', null, 'PMS', false, 'pm_testuser', '2020-09-29T13:25:24.450Z', null, null, false, null); + +deleteSaveFtpChipDetail=delete from regdevice.ftp_chip_detail where id='FTP-ID-01' and foundational_trust_provider_id='PMS-ID-01'; diff --git a/apitest/src/main/resources/config/pmsDataDeleteQueries.txt b/apitest/src/main/resources/config/pmsDataDeleteQueries.txt new file mode 100644 index 000000000..33b4e6f7b --- /dev/null +++ b/apitest/src/main/resources/config/pmsDataDeleteQueries.txt @@ -0,0 +1,28 @@ +##### DB queries to be executed to tear down the data used and generated during the test rig run + +delete from pms.partner_contact where partner_id='Tech-123' +delete from partner_policy where part_id='Tech-123' +delete from partner_policy where cr_by='partner-111997' +delete from partner_policy where policy_id in (select id from auth_policy where name in ('mosip policy','mosip data share policy','mosip policy9')) +delete from partner_policy_request where part_id='Tech-123' +delete from partner_policy_request where cr_by='partner-111997' +delete from pms.partner_policy where label='string' +delete from partner_policy_request where policy_id in (select id from auth_policy where name in ('mosip policy','mosip data share policy','mosip policy9')) +delete from partner_policy_bioextract where policy_id in (select id from auth_policy where name in ('mosip policy','mosip data share policy','mosip policy9')) +delete from partner_policy_bioextract where cr_by='partner-111997' +delete from partner_policy_credential_type where part_id='MOVP' +delete from pms.partner_policy_request where cr_by = 'partner-111997' +delete from pms.partner_contact where cr_by = 'partner-111997' +delete from pms.partner where cr_by = 'partner-111997' +delete from pms.partner where id in ('Tech-123','MOVP','DPP','MISP','MISP2','FTP','111997','mosipprint','partner-111997','updatepolicy') +delete from auth_policy where cr_by='partner-111997' +delete from pms.auth_policy where name in('mosip policy','mosip policy2','mosip policy3','mosip data share policy','mosip data share policy2') +delete from policy_group where cr_by='partner-111997' +delete from pms.policy_group where name in ('mosip policy group','mosip policy role testing groupp','mosip policy group2','update_policy_group','mosip policy status testing groupp with policy') +delete from pms.misp_license where cr_by='pm_testuser' +delete from pms.misp_license where misp_id in ('MISP','MISP2') +delete from pms.ftp_chip_detail where foundational_trust_provider_id='FTP' +delete from pms.misp where name='mosip_misp' +delete from pms.secure_biometric_interface where provider_id='Tech-123' +delete from pms.device_detail where id='device-id-123' +delete from pms.device_detail where make in ('abcde','abcdef') \ No newline at end of file diff --git a/apitest/src/main/resources/config/policyGroup.json b/apitest/src/main/resources/config/policyGroup.json new file mode 100644 index 000000000..d9baab205 --- /dev/null +++ b/apitest/src/main/resources/config/policyGroup.json @@ -0,0 +1,10 @@ +{ + "id": "string", + "metadata": {}, + "request": { + "desc":"desc mosip auth policy group", + "name":"mosip auth policy group 2345678" + }, + "requesttime": "2022-09-07T04:23:38.117Z", + "version": "string" +} diff --git a/apitest/src/main/resources/config/prereg_SendOtp.json b/apitest/src/main/resources/config/prereg_SendOtp.json new file mode 100644 index 000000000..142abe127 --- /dev/null +++ b/apitest/src/main/resources/config/prereg_SendOtp.json @@ -0,0 +1,9 @@ +{ + "id": "mosip.pre-registration.login.sendotp", + "version": "1.0", + "requesttime": "$TIMESTAMP$", + "request": { + "langCode": "$PRIMARYLANG$", + "userId": "robin.hood@mailinator.com" + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/config/prereg_ValidateOtp.json b/apitest/src/main/resources/config/prereg_ValidateOtp.json new file mode 100644 index 000000000..93d22c9b1 --- /dev/null +++ b/apitest/src/main/resources/config/prereg_ValidateOtp.json @@ -0,0 +1,9 @@ +{ + "id": "mosip.pre-registration.login.useridotp", + "version": "1.0", + "requesttime": "$TIMESTAMP$", + "request": { + "otp": "781412", + "userId": "robin.hood@mailinator.com" + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/config/registrationProcessorAPI.properties b/apitest/src/main/resources/config/registrationProcessorAPI.properties new file mode 100644 index 000000000..9d419ce7d --- /dev/null +++ b/apitest/src/main/resources/config/registrationProcessorAPI.properties @@ -0,0 +1,27 @@ +=======API URLs====================================================================== + +syncListApi=/registrationprocessor/v1/registrationstatus/sync +packetReceiverApi=/registrationprocessor/v1/packetreceiver/registrationpackets +packetStatusApi=/registrationprocessor/v1/registrationstatus/search +packetGeneratorApi=/registrationprocessor/v1/requesthandler/packetgenerator +assignmentApi =/registrationprocessor/v1/manualverification/assignment +decisionApi = /registrationprocessor/v1/manualverification/decision +applicantDemograhicApi = /registrationprocessor/v1/manualverification/applicantDemographic +applicantBiometricApi = /registrationprocessor/v1/manualverification/applicantBiometric +packetInfoApi = /registrationprocessor/v1/manualverification/packetInfo +idRepoByRid = /idrepository/v1/identity/idvid/ +reprintingApi = /registrationprocessor/v1/requesthandler/reprint +adminRequirementApi = /registrationprocessor/v1/registrationtransaction/search/{langcode}/{rid} +packetManagerAuditsApi = /commons/v1/packetmanager/audits +packetManagerBiometricsApi = /commons/v1/packetmanager/biometrics +packetManagerSearchApi = /commons/v1/packetmanager/searchField +packetManagerValidatePacketApi = /commons/v1/packetmanager/validatePacket +packetManagerSearchFieldsApi = /commons/v1/packetmanager/searchFields +packetManagerDocumentApi = /commons/v1/packetmanager/document +packetManagerMetaInfoApi = /commons/v1/packetmanager/metaInfo +====================HDFS Connection======================================================= +nameNodeUrl = hdfs://13.71.115.204:51000 +kdcDomain = NODE-MASTER.SOUTHINDIA.CLOUDAPP.AZURE.COM +userName = qa-regprocessor +userPass = Mosip@dev123 +isAuthEnable = false diff --git a/apitest/src/main/resources/config/residentServicesQueries.properties b/apitest/src/main/resources/config/residentServicesQueries.properties new file mode 100644 index 000000000..22381deb9 --- /dev/null +++ b/apitest/src/main/resources/config/residentServicesQueries.properties @@ -0,0 +1,15 @@ +createPackets=INSERT INTO regprc.registration( \ + id, reg_type, ref_reg_id, applicant_type, status_code, lang_code, status_comment, latest_trn_id, trn_retry_count, pkt_cr_dtimes, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes, latest_trn_type_code, latest_trn_status_code, latest_trn_dtimes, reg_process_retry_count, reg_stage_name) \ + VALUES ('10008100670005520200114101900','NEW',null,null,'PROCESSED','eng','OK','cddfbcae-7d72-4c3c-b42c-c000e89c3510',0,null, true, 'MOSIP_SYSTEM',' 2020-01-14 10:20:15.542','MOSIP_SYSTEM','2020-01-15 12:18:08.773',false,null,'PACKET_REPROCESS','SUCCESS','2020-01-15 12:18:08.773',14,'PacketUploaderStage'), \ + ('10008100670005520200114101901','NEW',null,null,'PROCESSING','eng','OK','cddfbcae-7d72-4c3c-b42c-c000e89c3510',0,null, true, 'MOSIP_SYSTEM',' 2020-01-14 10:20:15.542','MOSIP_SYSTEM','2020-01-15 12:18:08.773',false,null,'PACKET_REPROCESS','SUCCESS','2020-01-15 12:18:08.773',14,'PacketUploaderStage'), \ + ('10008100670005520200114101902','NEW',null,null,'REJECTED','eng','OK','cddfbcae-7d72-4c3c-b42c-c000e89c3510',0,null, true, 'MOSIP_SYSTEM',' 2020-01-14 10:20:15.542','MOSIP_SYSTEM','2020-01-15 12:18:08.773',false,null,'PACKET_REPROCESS','SUCCESS','2020-01-15 12:18:08.773',14,'PacketUploaderStage'), \ + ('10008100670005520200114101903','NEW',null,null,'RESEND','eng','OK','cddfbcae-7d72-4c3c-b42c-c000e89c3510',0,null, true, 'MOSIP_SYSTEM',' 2020-01-14 10:20:15.542','MOSIP_SYSTEM','2020-01-15 12:18:08.773',false,null,'PACKET_REPROCESS','SUCCESS','2020-01-15 12:18:08.773',14,'PacketUploaderStage'), \ + ('10008100670005520200114101904','NEW',null,null,'REREGISTER','eng','OK','cddfbcae-7d72-4c3c-b42c-c000e89c3510',0,null, true, 'MOSIP_SYSTEM',' 2020-01-14 10:20:15.542','MOSIP_SYSTEM','2020-01-15 12:18:08.773',false,null,'PACKET_REPROCESS','SUCCESS','2020-01-15 12:18:08.773',14,'PacketUploaderStage'); + + + + +deletePacketRecord=DELETE FROM regprc.registration WHERE id in ('10008100670005520200114101900','10008100670005520200114101901','10008100670005520200114101902','10008100670005520200114101903','10008100670005520200114101904'); + + + \ No newline at end of file diff --git a/apitest/src/main/resources/config/sign.json b/apitest/src/main/resources/config/sign.json new file mode 100644 index 000000000..a54fd5040 --- /dev/null +++ b/apitest/src/main/resources/config/sign.json @@ -0,0 +1,14 @@ +{ + "id": "string", + "metadata": {}, + "request": { + "applicationId": "IDA", + "dataToSign": "$DATA$", + "includeCertHash": true, + "includeCertificate": true, + "includePayload": false, + "referenceId": "SIGN" + }, + "requesttime": "2021-01-07T05:32:31.722Z", + "version": "string" +} \ No newline at end of file diff --git a/apitest/src/main/resources/config/test.properties b/apitest/src/main/resources/config/test.properties new file mode 100644 index 000000000..6eb1e1e3a --- /dev/null +++ b/apitest/src/main/resources/config/test.properties @@ -0,0 +1,16 @@ +# ------------------------------------------------------------------------------------------- +# Properties File that will define all of the test configurations for core systems edge API +# test automation. This also includes all JIRA integrations for automatic defect tracking. +# + +# ------------------------------------------------------------------------------------------- + +# ------------------------------------------------------------------------------------------- +# URIs, URLs, & Environment Configurations +# ------------------------------------------------------------------------------------------- +#testEnvironment=https://integ.mosip.io +#testEnvironmentPreReg=https://integ.mosip.io +environment=qa +testEnvironment=https://integ.mosip.io +testEnvironmentPreReg=https://integ.mosip.io + diff --git a/apitest/src/main/resources/config/tokenGeneration.properties b/apitest/src/main/resources/config/tokenGeneration.properties new file mode 100644 index 000000000..a7ec811fe --- /dev/null +++ b/apitest/src/main/resources/config/tokenGeneration.properties @@ -0,0 +1,7 @@ +token.request.id=mosip.io.userId.pwd +token.request.appid=regproc +token.request.username=110006 +token.request.password=mosip +token.request.version=1.0 +token.request.clientId=mosip-regproc-client +token.request.secretKey=abc123 \ No newline at end of file diff --git a/apitest/src/main/resources/config/updatePacketProperties.properties b/apitest/src/main/resources/config/updatePacketProperties.properties new file mode 100644 index 000000000..479344401 --- /dev/null +++ b/apitest/src/main/resources/config/updatePacketProperties.properties @@ -0,0 +1,7 @@ +bio&fullName = mona +fullName = abc +addressLine1 = xyz +phone = 1234567890 +email = abc@gmail.com +dateOfBirth = 1983/01/01 +UINInvalid = 1234567 \ No newline at end of file diff --git a/apitest/src/main/resources/config/valueMapping.properties b/apitest/src/main/resources/config/valueMapping.properties new file mode 100644 index 000000000..c9b1c8ebb --- /dev/null +++ b/apitest/src/main/resources/config/valueMapping.properties @@ -0,0 +1,35 @@ +# common properties +residenceStatus=NFR +fullName=TEST_FULLNAME +firstName=TEST_FIRSTNAME +dateOfBirth=1996/01/01 +gender=MLE +pobCountry=POB_COUNTRY +pobProvince=POB_PROVINCE +pobCity=POB_CITY +bloodType=BLOOD_TYPE +permanentCountry=PERMANENT_COUNTRY +permanentAddressLine1=PERMANENT_ADDRESS_LINE_1 +presentAddressLine1=PRESENT_ADDRESS_LINE_1 +modeOfClaim=MODE_OF_CLAIM +presentCountry=PRESENT_COUNTRY +addressLine1=TEST_ADDRESSLINE1 +addressLine2=TEST_ADDRESSLINE2 +addressLine3=TEST_ADDRESSLINE3 +postalCode=14022 +phone=8249742850 +email=test@mosip.net +region=TEST_REGION +fullName1=Lisa.GN +firstName1=Lisa.GN +province=TEST_PROVINCE +city=TEST_CITY +zone=TEST_ZONE +introducerName=TEST_INTRODUCERNAME +bloodGroup=O +Miss-TitleFromServer=MIS +Mr-TitleFromServer=MIR +Mrs-TitleFromServer=MRS +Miss-TitleFromServer.=MIS +addressCopy=TEST_ADDRESSLINE3 +proofOfAddress=TEST_ADDRESSLINE2 \ No newline at end of file diff --git a/apitest/src/main/resources/customize-emailable-report-template.html b/apitest/src/main/resources/customize-emailable-report-template.html new file mode 100644 index 000000000..cfeca4d6e --- /dev/null +++ b/apitest/src/main/resources/customize-emailable-report-template.html @@ -0,0 +1,61 @@ + + + + + + + + + +
+ mosip-logo +
+
+ \ No newline at end of file diff --git a/apitest/src/main/resources/dbFiles/.xml b/apitest/src/main/resources/dbFiles/.xml new file mode 100644 index 000000000..ae236dcff --- /dev/null +++ b/apitest/src/main/resources/dbFiles/.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/apitest/src/main/resources/dbFiles/PMS_delete_script.txt b/apitest/src/main/resources/dbFiles/PMS_delete_script.txt new file mode 100644 index 000000000..a0100b9d4 --- /dev/null +++ b/apitest/src/main/resources/dbFiles/PMS_delete_script.txt @@ -0,0 +1,28 @@ +delete from pms.partner_contact where partner_id='Tech-123'; +delete from partner_policy where part_id='Tech-123'; +delete from partner_policy where policy_id in (select id from auth_policy where name in ('mosip policy','mosip data share policy')); +delete from partner_policy_request where part_id='Tech-123'; +delete from pms.partner_policy where label='string'; +delete from partner_policy_request where policy_id in (select id from auth_policy where name in ('mosip policy','mosip data share policy')); +delete from partner_policy_bioextract where policy_id in (select id from auth_policy where name in ('mosip policy','mosip data share policy')); +delete from partner_policy_credential_type where part_id='MOVP'; +delete from pms.partner where id in ('Tech-123','MOVP','DPP','MISP','MISP2','FTP','111997','updatepolicy'); +delete from pms.auth_policy where name in('mosip policy','mosip policy2','mosip policy3','mosip data share policy','mosip data share policy2'); +delete from pms.policy_group where name in ('mosip policy group','mosip policy group2','update_policy_group'); +delete from pms.misp_license where cr_by='pm_testuser'; +delete from pms.misp_license where misp_id in ('MISP','MISP2'); +delete from pms.ftp_chip_detail where foundational_trust_provider_id='FTP'; +delete from pms.misp where name='mosip_misp'; +delete from pms.secure_biometric_interface where provider_id='Tech-123'; +delete from pms.device_detail where id='device-id-123'; +delete from pms.device_detail where make in ('abcde','abcdef'); +delete from mosip_keymgr.keymgr.ca_cert_store where cert_subject ='CN=mosiptest.org,O=MOSIPTEST,L=Bangalore,ST=Karantaka,C=IN'; +delete from mosip_keymgr.keymgr.partner_cert_store where cert_subject ='CN=Techno.com,O=Techno,L=Bangalore,ST=Karnataka,C=IN'; +delete from mosip_keymgr.keymgr.partner_cert_store where cert_subject ='CN=Techno,O=Techno,L=Bangalore,ST=Karnataka,C=IN'; +delete from mosip_keymgr.keymgr.ca_cert_store where cert_subject ='CN=apitest,OU=apitest,O=apitest,L=BLR,ST=KAR,C=IN'; +delete from mosip_keymgr.keymgr.ca_cert_store where cert_subject ='CN=apitest2,OU=apitest2,O=apitest2,L=BLR,ST=KAR,C=IN'; +delete from mosip_keymgr.keymgr.partner_cert_store where cert_subject ='CN=deviceprovider,OU=deviceprovider,O=deviceprovider,L=BLR,ST=KAR,C=IN'; +delete from mosip_keymgr.keymgr.partner_cert_store where cert_subject ='CN=movp,OU=movp,O=movp,L=BLR,ST=KAR,C=IN'; +delete from mosip_keymgr.keymgr.partner_cert_store where cert_subject ='CN=ftp,OU=ftp,O=ftp,L=BLR,ST=KAR,C=IN'; +delete from mosip_keymgr.keymgr.partner_cert_store where cert_subject ='CN=misp,OU=misp,O=misp,L=BLR,ST=KAR,C=IN'; +delete from mosip_keymgr.keymgr.partner_cert_store where cert_subject ='CN=misp2,OU=misp2,O=misp2,L=BLR,ST=KAR,C=IN'; \ No newline at end of file diff --git a/apitest/src/main/resources/dbFiles/dbConfig.xml b/apitest/src/main/resources/dbFiles/dbConfig.xml new file mode 100644 index 000000000..e27fb8f56 --- /dev/null +++ b/apitest/src/main/resources/dbFiles/dbConfig.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/apitest/src/main/resources/dbFiles/delete_Masterdata.sql b/apitest/src/main/resources/dbFiles/delete_Masterdata.sql new file mode 100644 index 000000000..8724f6b2e --- /dev/null +++ b/apitest/src/main/resources/dbFiles/delete_Masterdata.sql @@ -0,0 +1,88 @@ +delete from master.blocklisted_words where cr_by='dumbo6'; +delete from master.blocklisted_words where word='dumbooo'; +delete from master.blocklisted_words where cr_by='masterdata-220005'; +delete from master.machine_master where cr_by='masterdata-220005'; +delete from master.machine_master where cr_by='masterdata-220005'; +delete from master.machine_master where name in ('Mach-Test','Mach-Test2','Mach-Test updated'); +delete from master.machine_master mm WHERE mm.mspec_id IN(SELECT ms.id from master.machine_spec ms where ms.cr_by='masterdata-220005'); +delete FROM master.machine_spec WHERE mtyp_code IN (SELECT code FROM master.machine_type WHERE cr_by = 'masterdata-220005'); +delete from master.machine_spec where cr_by='masterdata-220005'; +delete from master.machine_type where cr_by='masterdata-220005'; +delete from master.gender where cr_by='masterdata-220005'; +delete from master.device_master where upd_by='masterdata-220005'; +delete from master.device_master where cr_by='masterdata-220005'; +delete from master.device_master where name='testDevicedummy'; +DELETE FROM master.device_master WHERE dspec_id IN(SELECT id FROM master.device_spec WHERE cr_by='masterdata-220005'); +delete from master.device_spec where cr_by='masterdata-220005'; +delete from master.device_type where cr_by='masterdata-220005'; +delete from master.loc_holiday where cr_by='masterdata-220005'; +delete from master.reg_center_type where cr_by='masterdata-220005'; +delete from master.registration_center where cr_by='masterdata-220005'; +delete from master.loc_holiday where cr_by='masterdata-220005'; +delete from master.reg_center_type where cr_by='masterdata-220005'; +delete from master.registration_center where cr_by='masterdata-220005'; +delete from master.device_type where cr_by='masterdata-220005'; +delete from master.doc_type where cr_by='masterdata-220005'; +delete from master.doc_category where cr_by='masterdata-220005'; +delete from master.location where cr_by='masterdata-220005'; +delete from master.template where cr_by='masterdata-220005'; +update master.template set is_active='true', is_deleted='false' where id='1101'; +delete from master.template where template_typ_code IN(select code from master.template_type where code='Test-info-Template-auto'); +delete from master.template_type where code='Test-info-Template-auto'; +update master.location set is_active='true', is_deleted='false' where code='10114'; +delete from master.location where code in('TST123','IND'); +delete from master.valid_document where cr_by='masterdata-220005'; +delete from master.user_detail where cr_by='masterdata-220005'; +delete from master.template_type where cr_by='masterdata-220005'; +delete from master.template_file_format where cr_by='masterdata-220005'; +delete from master.reason_list where cr_by='masterdata-220005'; +delete from master.reason_category where cr_by='masterdata-220005'; +delete from master.language where cr_by='masterdata-220005'; +delete from master.identity_schema where cr_by='masterdata-220005'; +delete from master.biometric_attribute where cr_by='masterdata-220005'; +delete from master.biometric_type where cr_by='masterdata-220005'; +delete from master.appl_form_type where cr_by='masterdata-220005'; +delete from master.id_type where cr_by='masterdata-220005'; +delete from master.dynamic_field where cr_by='masterdata-220005'; +delete from master.zone_user where usr_id='masterdata-220005'; +delete from master.blocklisted_words where word='dumbo6'; +delete from master.blocklisted_words where word='dumbo7'; +delete from master.machine_master where name in ('Mach-Test','Mach-Test2','Mach-Test updated'); +delete from master.machine_master where mac_address = '61-D3-FD-12-C9-ED'; +delete from master.machine_spec where name='HP'; +delete from master.machine_master where cr_by='masterdata-220005'; +delete from master.machine_type where code='Laptop2'; +delete from master.gender where code='Genderdummy'; +delete FROM master.device_master where name in ('testDevicedummy','testDevicedummy updated'); +delete from master.device_master where dspec_id='743'; +delete from master.device_spec where id='743'; +delete from master.device_type where code='GST3'; +delete from master.loc_holiday where holiday_name='AutoTest user Eng'; +delete from master.reg_center_type where code='ALT-3'; +delete FROM master.registration_center where name in ('Test123','HSR Center updated'); +delete from master.loc_holiday where holiday_name in ('AutoTest user Eng','AutoTest user'); +delete from master.reg_center_type where code in('ALT-3','ALT-5'); +delete from master.registration_center where id='10000'; +delete from master.device_type where code in ('GST3','GST4'); +delete from master.doc_type where code in ('TestDocType0010','TestDocType0020'); +delete from master.doc_category where code in ('DocTestCode123','DocTestCode321'); +delete from master.location where code='TST12'; +delete from master.template where id='445566777'; +delete from master.template where template_typ_code IN(select code from master.template_type where code='Test-info-Template-auto'); +update master.template set is_active='true', is_deleted='false' where id='1101'; +delete from master.template_type where code='Test-info-Template-auto'; +update master.location set is_active='true', is_deleted='false' where code='10114'; +delete from master.location where code in('TST123','IND'); +delete from master.valid_document where doctyp_Code='doc_auto_test'; +delete from master.user_detail where cr_by='110005'; +delete from master.template_type where code='Test-info-Template-auto'; +delete from master.template_file_format where code='Doc'; +delete from master.reason_list where code='TEST_LIST_CODE'; +delete from master.reason_category where code='TEST_CAT_CODE'; +delete from master.language where code='automationLang'; +delete from master.identity_schema where title='test-schema'; +delete from master.biometric_attribute where code='TST'; +delete from master.biometric_type where code='dumbo6'; +delete from master.appl_form_type where code='dumbo'; +delete from master.id_type where code='NEW'; +delete from master.dynamic_field where name in ('TestAutomationField','TestAPL'); diff --git a/apitest/src/main/resources/krb5.conf b/apitest/src/main/resources/krb5.conf new file mode 100644 index 000000000..734dbfcf8 --- /dev/null +++ b/apitest/src/main/resources/krb5.conf @@ -0,0 +1,29 @@ +# Configuration snippets may be placed in this directory as well +includedir /etc/krb5.conf.d/ + +[logging] + default = FILE:/var/log/krb5libs.log + kdc = FILE:/var/log/krb5kdc.log + admin_server = FILE:/var/log/kadmind.log + +[libdefaults] + kdc_timeout = 30s + udp_preference_limit = 1 + dns_lookup_realm = false + ticket_lifetime = 365d + renew_lifetime = 365d + forwardable = true + rdns = false + pkinit_anchors = /etc/pki/tls/certs/ca-bundle.crt + default_realm = NODE-MASTER.SOUTHINDIA.CLOUDAPP.AZURE.COM + #default_ccache_name = KEYRING:persistent:%{uid} + +[realms] + NODE-MASTER.SOUTHINDIA.CLOUDAPP.AZURE.COM = { + kdc = node-master.southindia.cloudapp.azure.com:51088 + admin_server = node-master.southindia.cloudapp.azure.com +} + +[domain_realm] + .node-master.southindia.cloudapp.azure.com = NODE-MASTER.SOUTHINDIA.CLOUDAPP.AZURE.COM + node-master.southindia.cloudapp.azure.com = NODE-MASTER.SOUTHINDIA.CLOUDAPP.AZURE.COM \ No newline at end of file diff --git a/apitest/src/main/resources/log4j.properties b/apitest/src/main/resources/log4j.properties new file mode 100644 index 000000000..93001dc68 --- /dev/null +++ b/apitest/src/main/resources/log4j.properties @@ -0,0 +1,8 @@ +log4j.rootLogger=INFO, Appender1,Appender2 +log4j.appender.Appender1=org.apache.log4j.ConsoleAppender +log4j.appender.Appender1.layout=org.apache.log4j.PatternLayout +log4j.appender.Appender1.layout.ConversionPattern=%-7p %d [%t] %c %x - %m%n +log4j.appender.Appender2=org.apache.log4j.FileAppender +log4j.appender.Appender2.File=src/logs/mosip-api-test.log +log4j.appender.Appender2.layout=org.apache.log4j.PatternLayout +log4j.appender.Appender2.layout.ConversionPattern=%-7p %d [%t] %c %x - %m%n diff --git a/apitest/src/main/resources/mimoto/AddIdentity/AddIdentity.yml b/apitest/src/main/resources/mimoto/AddIdentity/AddIdentity.yml new file mode 100644 index 000000000..1a7b52eb3 --- /dev/null +++ b/apitest/src/main/resources/mimoto/AddIdentity/AddIdentity.yml @@ -0,0 +1,85 @@ +AddIdentity: + Mimoto_AddIdentity_withValidParameters_smoke_Pos: + endPoint: /idrepository/v1/identity/ + role: idrepo + restMethod: post + inputTemplate: mimoto/AddIdentity/addIdentity_$LANGNUMBER$ + outputTemplate: mimoto/AddIdentity/addIdentityResult + input: '{ + "value": "$BIOVALUE$", + "id": "mosip.id.create", + "registrationId": "$RID$", + "biometricReferenceId": "23452353", + "UIN": "$UIN$", + "dateOfBirth": "1992/04/15", + "postalCode": "14022", + "email": "Mimoto_AddIdentity_withValidParameters_smoke_Pos@mosip.net", + "phone": "9876543210", + "referenceIdentityNumber": "6789545678878", + "version": "v1", + "introducerRID": "212124324784879", + "introducerUIN": "212124324784879", + "category": "individualBiometrics", + "requesttime": "$TIMESTAMP$" +}' + output: '{ + "status":"ACTIVATED" +}' + + Mimoto_AddIdentity_Binding_smoke_Pos: + endPoint: /idrepository/v1/identity/ + role: idrepo + restMethod: post + inputTemplate: mimoto/AddIdentity/addIdentity_$LANGNUMBER$ + outputTemplate: mimoto/AddIdentity/addIdentityResult + input: '{ + "value": "$BIOVALUE$", + "id": "mosip.id.create", + "registrationId": "$RID$", + "biometricReferenceId": "23452353", + "UIN": "$UIN$", + "dateOfBirth": "1992/04/15", + "postalCode": "14022", + "email": "Mimoto_AddIdentity_Binding_smoke_Pos@mosip.net", + "phone": "9876543210", + "referenceIdentityNumber": "6789545678878", + "version": "v1", + "introducerRID": "212124324784879", + "introducerUIN": "212124324784879", + "category": "individualBiometrics", + "requesttime": "$TIMESTAMP$" +}' + output: '{ + "status":"ACTIVATED" +}' + + Mimoto_AddIdentity_without_FaceDate_CBEFF_smoke_Pos: + endPoint: /idrepository/v1/identity/ + role: idrepo + restMethod: post + inputTemplate: mimoto/AddIdentity/addIdentity_$LANGNUMBER$ + outputTemplate: mimoto/error + input: '{ + "value": "$BIOVALUEWITHOUTFACE$", + "id": "mosip.id.create", + "registrationId": "$RID$", + "biometricReferenceId": "23452353", + "UIN": "$UIN$", + "dateOfBirth": "1992/04/15", + "postalCode": "14022", + "email": "Mimoto_AddIdentity_withValidParameters_smoke_Pos@mosip.net", + "phone": "9876543210", + "referenceIdentityNumber": "6789545678878", + "version": "v1", + "introducerRID": "212124324784879", + "introducerUIN": "212124324784879", + "category": "individualBiometrics", + "requesttime": "$TIMESTAMP$" +}' + output: '{ + "errors": [ + { + "errorCode": "IDR-IDC-004" + } + ] +}' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/AddIdentity/addIdentityResult.hbs b/apitest/src/main/resources/mimoto/AddIdentity/addIdentityResult.hbs new file mode 100644 index 000000000..ca45b742b --- /dev/null +++ b/apitest/src/main/resources/mimoto/AddIdentity/addIdentityResult.hbs @@ -0,0 +1,5 @@ +{ + "response": { + "status": "{{status}}" + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml b/apitest/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml new file mode 100644 index 000000000..b778650a1 --- /dev/null +++ b/apitest/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml @@ -0,0 +1,137 @@ +AidGetIndividualId: + Mimoto_AidGetIndividualId_Getting_With_Valid_UIN_All: + endPoint: /residentmobileapp/aid/get-individual-id + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/AidGetIndividualId/aidGetIndividualId + outputTemplate: mimoto/AidGetIndividualId/aidGetIndividualIdResult + input: '{ + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "transactionID": "$TRANSACTIONID$", + "aid": "$ID:AddIdentity_withValidParameters_smoke_Pos_RID$", + "sendOtp":{ + "aid": "$ID:AddIdentity_withValidParameters_smoke_Pos_RID$", + "transactionID": "$TRANSACTIONID$", + "sendOtpReqTemplate": "mimoto/SendOTPUIN/individualIdOtp", + "sendOtpEndPoint": "/residentmobileapp/req/individualId/otp" + } +}' + output: '{ + "aidStatus": "PROCESSED", + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTPUIN/individualIdOtpResult" + } +}' + + Mimoto_AidGetIndividualId_Getting_With_Invalid_AID_Neg: + endPoint: /residentmobileapp/aid/get-individual-id + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/AidGetIndividualId/aidGetIndividualId + outputTemplate: mimoto/error + input: '{ + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "transactionID": "$TRANSACTIONID$", + "aid": "$yt55g", + "sendOtp":{ + "aid": "$ID:AddIdentity_withValidParameters_smoke_Pos_RID$", + "transactionID": "$TRANSACTIONID$", + "sendOtpReqTemplate": "mimoto/SendOTPUIN/individualIdOtp", + "sendOtpEndPoint": "/residentmobileapp/req/individualId/otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "RES-SER-457" + } + ], + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTPUIN/individualIdOtpResult" + } +}' + + Mimoto_AidGetIndividualId_Getting_With_Invalid_Otp_Neg: + endPoint: /residentmobileapp/aid/get-individual-id + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/AidGetIndividualId/aidGetIndividualId + outputTemplate: mimoto/error + input: '{ + "otp": "1234", + "transactionID": "$TRANSACTIONID$", + "aid": "$ID:AddIdentity_withValidParameters_smoke_Pos_RID$", + "sendOtp":{ + "aid": "$ID:AddIdentity_withValidParameters_smoke_Pos_RID$", + "transactionID": "$TRANSACTIONID$", + "sendOtpReqTemplate": "mimoto/SendOTPUIN/individualIdOtp", + "sendOtpEndPoint": "/residentmobileapp/req/individualId/otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "RES-SER-422" + } + ], + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTPUIN/individualIdOtpResult" + } +}' + + Mimoto_AidGetIndividualId_Getting_With_Valid_Otp_All: + endPoint: /residentmobileapp/aid/get-individual-id + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/AidGetIndividualId/aidGetIndividualId + outputTemplate: mimoto/AidGetIndividualId/aidGetIndividualIdResult + input: '{ + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "transactionID": "$TRANSACTIONID$", + "aid": "$ID:AddIdentity_withValidParameters_smoke_Pos_RID$", + "sendOtp":{ + "aid": "$ID:AddIdentity_withValidParameters_smoke_Pos_RID$", + "transactionID": "$TRANSACTIONID$", + "sendOtpReqTemplate": "mimoto/SendOTPUIN/individualIdOtp", + "sendOtpEndPoint": "/residentmobileapp/req/individualId/otp" + } +}' + output: '{ + "aidStatus": "PROCESSED", + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTPUIN/individualIdOtpResult" + } +}' + + Mimoto_AidGetIndividualId_Getting_With_Invalid_lenght_Of_AID_Neg: + endPoint: /residentmobileapp/aid/get-individual-id + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/AidGetIndividualId/aidGetIndividualId + outputTemplate: mimoto/error + input: '{ + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "transactionID": "$TRANSACTIONID$", + "aid": "2745538921628455389216202302041241544770230204124154278477", + "sendOtp":{ + "aid": "$ID:AddIdentity_withValidParameters_smoke_Pos_RID$", + "transactionID": "$TRANSACTIONID$", + "sendOtpReqTemplate": "mimoto/SendOTPUIN/individualIdOtp", + "sendOtpEndPoint": "/residentmobileapp/req/individualId/otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "RES-SER-457" + } + ], + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTPUIN/individualIdOtpResult" + } +}' diff --git a/apitest/src/main/resources/mimoto/AidGetIndividualId/aidGetIndividualId.hbs b/apitest/src/main/resources/mimoto/AidGetIndividualId/aidGetIndividualId.hbs new file mode 100644 index 000000000..0fda5feb3 --- /dev/null +++ b/apitest/src/main/resources/mimoto/AidGetIndividualId/aidGetIndividualId.hbs @@ -0,0 +1,5 @@ +{ + "aid": "{{aid}}", + "otp": "{{otp}}", + "transactionID": "{{transactionID}}" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/AidGetIndividualId/aidGetIndividualIdResult.hbs b/apitest/src/main/resources/mimoto/AidGetIndividualId/aidGetIndividualIdResult.hbs new file mode 100644 index 000000000..eec0b1866 --- /dev/null +++ b/apitest/src/main/resources/mimoto/AidGetIndividualId/aidGetIndividualIdResult.hbs @@ -0,0 +1,5 @@ +{ + "response": { + "aidStatus": "{{aidStatus}}" + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/AuthLock/createAuthLock.hbs b/apitest/src/main/resources/mimoto/AuthLock/createAuthLock.hbs new file mode 100644 index 000000000..0229c1ef5 --- /dev/null +++ b/apitest/src/main/resources/mimoto/AuthLock/createAuthLock.hbs @@ -0,0 +1,12 @@ + { + "transactionID":"{{transactionID}}", + "individualId":"{{individualId}}", + "individualIdType":"{{individualIdType}}", + "otp":"{{otp}}", + "authType": [ + {{#each authType}} + "{{auth}}" + {{#unless @last}},{{/unless}} + {{/each}} + ] + } \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/AuthLock/createAuthLock.yml b/apitest/src/main/resources/mimoto/AuthLock/createAuthLock.yml new file mode 100644 index 000000000..533b98724 --- /dev/null +++ b/apitest/src/main/resources/mimoto/AuthLock/createAuthLock.yml @@ -0,0 +1,183 @@ +AuthLock: + Mimoto_AuthLock_Valid_UIN_All: + endPoint: /residentmobileapp/req/auth/lock + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/AuthLock/createAuthLock + outputTemplate: mimoto/AuthLock/createAuthLockResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "authType": [{auth: "bio-Iris"},{auth: "demo"},{auth: "bio-FACE"}], + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' + Mimoto_AuthLock_InValid_Otp_All: + endPoint: /residentmobileapp/req/auth/lock + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/AuthLock/createAuthLock + outputTemplate: mimoto/error + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "authType": [{auth: "bio-Iris"},{auth: "demo"},{auth: "bio-FACE"}], + "otp": "111sss@@1", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "errors": [ + { + "errorCode": "RES-SER-422" + } + ], + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' + Mimoto_AuthLock_with_invalidUIN_Valid_Otp_sid: + endPoint: /residentmobileapp/req/auth/lock + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/AuthLock/createAuthLock + outputTemplate: mimoto/error + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "263738@@#FDCVvb", + "individualIdType": "UIN", + "authType": [{auth: "bio-Iris"},{auth: "demo"},{auth: "bio-FACE"}], + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "errors": [ + { + "errorCode": "RES-SER-410" + } + ], + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' + Mimoto_AuthLock_Valid_VID_All: + endPoint: /residentmobileapp/req/auth/lock + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/AuthLock/createAuthLock + outputTemplate: mimoto/AuthLock/createAuthLockResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "$ID:Generate_Perpetual_VID_Valid_Smoke_sid_vid$", + "individualIdType": "VID", + "authType": [{auth: "bio-Iris"},{auth: "demo"},{auth: "bio-FACE"}], + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Valid_Smoke_sid_vid$", + "individualIdType": "VID", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' + Mimoto_AuthLock_with_invalidVID_Valid_Otp: + endPoint: /residentmobileapp/req/auth/lock + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/AuthLock/createAuthLock + outputTemplate: mimoto/error + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "26DBDB@73", + "individualIdType": "VID", + "authType": [{auth: "bio-Iris"},{auth: "demo"},{auth: "bio-FACE"}], + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Valid_Smoke_sid_vid$", + "individualIdType": "VID", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "errors": [ + { + "errorCode": "RES-SER-410" + } + ], + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' + Mimoto_AuthLock_invalidVID_Valid_Otp: + endPoint: /residentmobileapp/req/auth/lock + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/AuthLock/createAuthLock + outputTemplate: mimoto/error + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "36363gvb", + "individualIdType": "VID", + "authType": [{auth: "bio-Iris"},{auth: "demo"},{auth: "bio-FACE"}], + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Valid_Smoke_sid_vid$", + "individualIdType": "VID", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "errors": [ + { + "errorCode": "RES-SER-410" + } + ], + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' diff --git a/apitest/src/main/resources/mimoto/AuthLock/createAuthLockResult.hbs b/apitest/src/main/resources/mimoto/AuthLock/createAuthLockResult.hbs new file mode 100644 index 000000000..7a73a41bf --- /dev/null +++ b/apitest/src/main/resources/mimoto/AuthLock/createAuthLockResult.hbs @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.hbs b/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.hbs new file mode 100644 index 000000000..3607daaf7 --- /dev/null +++ b/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.hbs @@ -0,0 +1,13 @@ +{ + "transactionID":"{{transactionID}}", + "individualId":"{{individualId}}", + "individualIdType":"{{individualIdType}}", + "unlockForSeconds": "{{unlockForSeconds}}", + "otp":"{{otp}}", + "authType": [ + {{#each authType}} + "{{auth}}" + {{#unless @last}},{{/unless}} + {{/each}} + ] +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml b/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml new file mode 100644 index 000000000..9fe7af39f --- /dev/null +++ b/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml @@ -0,0 +1,123 @@ +AuthUnlock: + Mimoto_AuthUnLock_Valid_UIN_All: + endPoint: /residentmobileapp/req/auth/unlock + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/AuthUnLock/createAuthUnLock + outputTemplate: mimoto/AuthUnLock/createAuthUnLockResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "unlockForSeconds": "1", + "authType": [{auth: "bio-Iris"},{auth: "demo"},{auth: "bio-FACE"}], + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' + Mimoto_AuthUnLock_Valid_UIN_With_VID_All: + endPoint: /residentmobileapp/req/auth/unlock + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/AuthUnLock/createAuthUnLock + outputTemplate: mimoto/AuthUnLock/createAuthUnLockResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "$ID:Generate_Perpetual_VID_Valid_Smoke_sid_vid$", + "individualIdType": "VID", + "unlockForSeconds": "1", + "authType": [{auth: "bio-Iris"},{auth: "demo"},{auth: "bio-FACE"}], + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Valid_Smoke_sid_vid$", + "individualIdType": "VID", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' + Mimoto_AuthUnLock_With_InValid_OTP_All: + endPoint: /residentmobileapp/req/auth/unlock + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/AuthUnLock/createAuthUnLock + outputTemplate: mimoto/error + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "unlockForSeconds": "1", + "authType": [{auth: "bio-Iris"},{auth: "demo"},{auth: "bio-FACE"}], + "otp": "111@@@###hhdhdh111", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "errors": [ + { + "errorCode": "RES-SER-422" + } + ], + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' + Mimoto_AuthUnLock_InValid_OTP_With_VID_All: + endPoint: /residentmobileapp/req/auth/unlock + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/AuthUnLock/createAuthUnLock + outputTemplate: mimoto/error + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "$ID:Generate_Perpetual_VID_Valid_Smoke_sid_vid$", + "individualIdType": "VID", + "unlockForSeconds": "1", + "authType": [{auth: "bio-Iris"},{auth: "demo"},{auth: "bio-FACE"}], + "otp": "11111@@###1", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Valid_Smoke_sid_vid$", + "individualIdType": "VID", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "errors": [ + { + "errorCode": "RES-SER-422" + } + ], + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLockResult.hbs b/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLockResult.hbs new file mode 100644 index 000000000..0e0dcd235 --- /dev/null +++ b/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLockResult.hbs @@ -0,0 +1,3 @@ +{ + +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.hbs b/apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.hbs new file mode 100644 index 000000000..0221d2be2 --- /dev/null +++ b/apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.hbs @@ -0,0 +1,12 @@ +{ + "requestTime": "{{requestTime}}", + "request": { + "individualId": "{{individualId}}", + "otpChannels": [ + {{#each otpChannels}} + "{{channel}}" + {{#unless @last}},{{/unless}} + {{/each}} + ] + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.yml b/apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.yml new file mode 100644 index 000000000..8d63d2a9b --- /dev/null +++ b/apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.yml @@ -0,0 +1,714 @@ +BindingOtp: + Mimoto_BindingOtp_Valid_UIN_All_Smoke: + endPoint: /residentmobileapp/binding-otp + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/BindingOtp/BindingOtpResult + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "maskedMobile": "$IGNORE$" +}' + + Mimoto_BindingOtp_Valid_vid_All_Smoke: + endPoint: /residentmobileapp/binding-otp + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/BindingOtp/BindingOtpResult + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "maskedMobile": "$IGNORE$" +}' + + Mimoto_BindingOtp_UIN_Invalid_individualId_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "@#DSDFD@#", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "errors": [ + { + "errorCode": "IDA-MLC-009" + } + ] +}' + + Mimoto_BindingOtp_UIN_Missing_individualId_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$REMOVE$", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "errors": [ + { + "errorCode": "RESIDENT-APP-011" + } + ] +}' + + Mimoto_BindingOtp_UIN_Empty_individualId_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_identifier" + } + ] +}' + + Mimoto_BindingOtp_UIN_Null_individualId_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "null", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "errors": [ + { + "errorCode": "IDA-MLC-009" + } + ] +}' + + Mimoto_BindingOtp_UIN_SpaceSeparated_otpChannels_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "E M A I L"}] +}' + output: '{ + "errors": [ + { + "errorCode": "RESIDENT-APP-011" + } + ] +}' + + Mimoto_BindingOtp_UIN_Invalid_OtpChannels_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "sdsgsg"}] +}' + output: '{ + "errors": [ + { + "errorCode": "RESIDENT-APP-011" + } + ] +}' + + Mimoto_BindingOtp_UIN_Missing_OtpChannels_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "$IGNORE$"}] +}' + output: '{ + "errors": [ + { + "errorCode": "RESIDENT-APP-011" + } + ] +}' + + Mimoto_BindingOtp_UIN_Empty_OtpChannels_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: ""}] +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_otp_channel" + } + ] +}' + + Mimoto_BindingOtp_UIN_Null_OtpChannels_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "null"}] +}' + output: '{ + "errors": [ + { + "errorCode": "RESIDENT-APP-011" + } + ] +}' + + Mimoto_BindingOtp_UIN_Missing_OtpChannel_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": "$IGNORE$" +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_otp_channel" + } + ] +}' + + Mimoto_BindingOtp_UIN_Empty_OtpChannel_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": "" +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_otp_channel" + } + ] +}' + + Mimoto_BindingOtp_UIN_Null_OtpChannel_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": "null" +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_otp_channel" + } + ] +}' + + Mimoto_BindingOtp_UIN_Invalid_RequestTime_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "2022-11-08T06:35:53", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ] +}' + + Mimoto_BindingOtp_UIN_Past_RequestTime_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "2022-11-07T06:51:30.195Z", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ] +}' + + Mimoto_BindingOtp_UIN_Future_RequestTime_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "2033-11-07T06:51:30.195Z", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ] +}' + + Mimoto_BindingOtp_UIN_Missing_RequestTime_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$IGNORE$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ] +}' + + Mimoto_BindingOtp_UIN_Empty_RequestTime_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ] +}' + + Mimoto_BindingOtp_vid_Invalid_individualId_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "@#DSDFD@#", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "errors": [ + { + "errorCode": "IDA-MLC-009" + } + ] +}' + + Mimoto_BindingOtp_vid_Missing_individualId_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$REMOVE$", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "errors": [ + { + "errorCode": "RESIDENT-APP-011" + } + ] +}' + + Mimoto_BindingOtp_vid_Empty_individualId_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_identifier" + } + ] +}' + + Mimoto_BindingOtp_vid_Null_individualId_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "null", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "errors": [ + { + "errorCode": "IDA-MLC-009" + } + ] +}' + + Mimoto_BindingOtp_vid_SpaceSeparated_otpChannels_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "E M A I L"}] +}' + output: '{ + "errors": [ + { + "errorCode": "RESIDENT-APP-011" + } + ] +}' + + Mimoto_BindingOtp_vid_Invalid_OtpChannels_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "sdsgsg"}] +}' + output: '{ + "errors": [ + { + "errorCode": "RESIDENT-APP-011" + } + ] +}' + + Mimoto_BindingOtp_vid_Missing_OtpChannels_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "$IGNORE$"}] +}' + output: '{ + "errors": [ + { + "errorCode": "RESIDENT-APP-011" + } + ] +}' + + Mimoto_BindingOtp_vid_Empty_OtpChannels_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: ""}] +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_otp_channel" + } + ] +}' + + Mimoto_BindingOtp_vid_Null_OtpChannels_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "null"}] +}' + output: '{ + "errors": [ + { + "errorCode": "RESIDENT-APP-011" + } + ] +}' + + Mimoto_BindingOtp_vid_Missing_OtpChannel_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": "$IGNORE$" +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_otp_channel" + } + ] +}' + + Mimoto_BindingOtp_vid_Empty_OtpChannel_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": "" +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_otp_channel" + } + ] +}' + + Mimoto_BindingOtp_vid_Null_OtpChannel_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": "null" +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_otp_channel" + } + ] +}' + + Mimoto_BindingOtp_vid_Invalid_RequestTime_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "2022-11-08T06:35:53", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ] +}' + + Mimoto_BindingOtp_vid_Past_RequestTime_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "2022-11-07T06:51:30.195Z", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ] +}' + + Mimoto_BindingOtp_vid_Future_RequestTime_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "2033-11-07T06:51:30.195Z", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ] +}' + + Mimoto_BindingOtp_vid_Missing_RequestTime_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "$IGNORE$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ] +}' + + Mimoto_BindingOtp_vid_Empty_RequestTime_Neg: + endPoint: /residentmobileapp/binding-otp + role: resident + restMethod: post + validityCheckRequired: true + inputTemplate: mimoto/BindingOtp/BindingOtp + outputTemplate: mimoto/error + input: '{ + "requestTime": "", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"}] +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ] +}' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/BindingOtp/BindingOtpResult.hbs b/apitest/src/main/resources/mimoto/BindingOtp/BindingOtpResult.hbs new file mode 100644 index 000000000..e3cf37992 --- /dev/null +++ b/apitest/src/main/resources/mimoto/BindingOtp/BindingOtpResult.hbs @@ -0,0 +1,5 @@ +{ + "response": { + "maskedMobile": "{{maskedMobile}}" + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml b/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml new file mode 100644 index 000000000..eab5ca524 --- /dev/null +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml @@ -0,0 +1,42 @@ +CredentialsStatus: + Mimoto_CredentialsStatus_euin_All_Valid_Smoke: + endPoint: /residentmobileapp/credentialshare/request/status/{requestId} + role: resident + restMethod: get + inputTemplate: mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatus + outputTemplate: mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatusResult + input: '{ + "requestId": "$ID:RequestCredentials__All_Valid_Smoke_sid_requestId$" +}' + output: '{ + "statusCode": "ISSUED" +}' + Mimoto_CredentialsStatus_euin_With_VID_All_Valid_Smoke: + endPoint: /residentmobileapp/credentialshare/request/status/{requestId} + role: resident + restMethod: get + inputTemplate: mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatus + outputTemplate: mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatusResult + input: '{ + "requestId": "$ID:RequestCredentials_All_Valid_Smoke_with_VID_sid_requestId$" +}' + output: '{ + "statusCode": "ISSUED" +}' + + Mimoto_CredentialsStatus_euin_With_Invalid_RequestId_Neg: + endPoint: /residentmobileapp/credentialshare/request/status/{requestId} + role: resident + restMethod: get + inputTemplate: mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatus + outputTemplate: mimoto/error + input: '{ + "requestId": "$er45" +}' + output: '{ + "errors": [ + { + "errorCode": "RES-SER-29" + } + ] +}' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatus.hbs b/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatus.hbs new file mode 100644 index 000000000..2eb899690 --- /dev/null +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatus.hbs @@ -0,0 +1,3 @@ +{ + "requestId": "{{requestId}}" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatusResult.hbs b/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatusResult.hbs new file mode 100644 index 000000000..5bd4b5fb0 --- /dev/null +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatusResult.hbs @@ -0,0 +1,5 @@ +{ + "response": { + "statusCode": "{{statusCode}}" + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml new file mode 100644 index 000000000..815e3c5a1 --- /dev/null +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml @@ -0,0 +1,42 @@ +DownloadCredential: + Mimoto_DownloadCredential_All_Valid_Smoke: + endPoint: /residentmobileapp/credentialshare/download + role: resident + restMethod: post + inputTemplate: mimoto/CredentialIssuance/DownloadCredential/downloadCredential + outputTemplate: mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatusResult + input: '{ + "requestId": "ccb87250-aaa7-404a-8d6c-c48dfd25c2fd", + "individualId": "9653041697" +}' + output: '{ + "statusCode": "printing" +}' + + Mimoto_DownloadCredential_Invalid_RequestId_Neg: + endPoint: /residentmobileapp/credentialshare/download + role: resident + restMethod: post + inputTemplate: mimoto/CredentialIssuance/DownloadCredential/downloadCredential + outputTemplate: mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatusResult + input: '{ + "requestId": "hj$", + "individualId": "9653041697" +}' + output: '{ + "statusCode": "printing" +}' + + Mimoto_DownloadCredential_Invalid_IndividualId_Neg: + endPoint: /residentmobileapp/credentialshare/download + role: resident + restMethod: post + inputTemplate: mimoto/CredentialIssuance/DownloadCredential/downloadCredential + outputTemplate: mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatusResult + input: '{ + "requestId": "ccb87250-aaa7-404a-8d6c-c48dfd25c2fd", + "individualId": "$ghg6" +}' + output: '{ + "statusCode": "printing" +}' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/downloadCredential.hbs b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/downloadCredential.hbs new file mode 100644 index 000000000..0e1113d75 --- /dev/null +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/downloadCredential.hbs @@ -0,0 +1,4 @@ +{ + "individualId": "{{individualId}}", + "requestId": "{{requestId}}" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml new file mode 100644 index 000000000..0f0a43c91 --- /dev/null +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml @@ -0,0 +1,26 @@ +DownloadCredential: + Mimoto_CredentialsStatus_All_Valid_Smoke_euin: + endPoint: /residentmobileapp/credentialshare/download + role: resident + checkErrorsOnlyInResponse: true + restMethod: get + inputTemplate: mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqid + outputTemplate: mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqidResult + input: '{ + "requestId": "$ID:RequestCredentials__All_Valid_Smoke_sid_requestId$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$" +}' + output: ' { + "Content-Type": "application/pdf" +}' + Mimoto_CredentialsStatus_StatusCode_InValid_Smoke_euin: + endPoint: /residentmobileapp/credentialshare/download + role: resident + restMethod: get + inputTemplate: mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqid + outputTemplate: mimoto/error + input: '{ + "requestId": "$ID:RequestCredentials__All_Valid_Smoke_sid_requestId$", + "individualId": "965337484848041697" +}' + output: "404" diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqid.hbs b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqid.hbs new file mode 100644 index 000000000..0e1113d75 --- /dev/null +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqid.hbs @@ -0,0 +1,4 @@ +{ + "individualId": "{{individualId}}", + "requestId": "{{requestId}}" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqidResult.hbs b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqidResult.hbs new file mode 100644 index 000000000..6f35f5edd --- /dev/null +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqidResult.hbs @@ -0,0 +1,4 @@ +{ + "credential": { + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml b/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml new file mode 100644 index 000000000..b5ea20448 --- /dev/null +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml @@ -0,0 +1,181 @@ +RequestCredentials: + Mimoto_RequestCredentials__All_Valid_Smoke_sid: + endPoint: /residentmobileapp/credentialshare/request + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/CredentialIssuance/RequestCredentials/reqCredential + outputTemplate: mimoto/CredentialIssuance/RequestCredentials/ReqCredentialResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "user": "abc", + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "id": "$IGNORE$", + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' + Mimoto_RequestCredentials_All_Valid_Smoke_with_VID_sid: + endPoint: /residentmobileapp/credentialshare/request + role: resident + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/CredentialIssuance/RequestCredentials/reqCredential + outputTemplate: mimoto/CredentialIssuance/RequestCredentials/ReqCredentialResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "$ID:Generate_Perpetual_VID_Valid_Smoke_sid_vid$", + "user": "abc", + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Valid_Smoke_sid_vid$", + "individualIdType": "VID", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "id": "$IGNORE$", + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' + Mimoto_RequestCredentials_InValid_Otp_UIN_sid: + endPoint: /residentmobileapp/credentialshare/request + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/CredentialIssuance/RequestCredentials/reqCredential + outputTemplate: mimoto/error + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "user": "abc", + "otp": "4h4hnn", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "errors": [ + { + "errorCode": "RES-SER-422" + } + ], + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' + Mimoto_RequestCredentials_InValid_TransactionId_sid: + endPoint: /residentmobileapp/credentialshare/request + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/CredentialIssuance/RequestCredentials/reqCredential + outputTemplate: mimoto/error + input: '{ + "transactionID": "4dhn@@##&%", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "user": "abc", + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "errors": [ + { + "errorCode": "RES-SER-422" + } + ], + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' + + Mimoto_RequestCredentials_InValid_UIN_sid: + endPoint: /residentmobileapp/credentialshare/request + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/CredentialIssuance/RequestCredentials/reqCredential + outputTemplate: mimoto/error + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "$ght56=", + "user": "abc", + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "errors": [ + { + "errorCode": "RES-SER-410" + } + ], + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' + + Mimoto_RequestCredentials_Invalid_VID_sid_Neg: + endPoint: /residentmobileapp/credentialshare/request + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/CredentialIssuance/RequestCredentials/reqCredential + outputTemplate: mimoto/error + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "$hfg56", + "user": "abc", + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Valid_Smoke_sid_vid$", + "individualIdType": "VID", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "errors": [ + { + "errorCode": "RES-SER-410" + } + ], + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredentialResult.hbs b/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredentialResult.hbs new file mode 100644 index 000000000..b8eed36f5 --- /dev/null +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredentialResult.hbs @@ -0,0 +1,5 @@ +{ + "response": { + "id": "{{id}}" + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/reqCredential.hbs b/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/reqCredential.hbs new file mode 100644 index 000000000..128553079 --- /dev/null +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/reqCredential.hbs @@ -0,0 +1,6 @@ +{ + "individualId": "{{individualId}}", + "otp": "{{otp}}", + "transactionID": "{{transactionID}}", + "user": "{{user}}" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.hbs b/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.hbs new file mode 100644 index 000000000..4540b9d97 --- /dev/null +++ b/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.hbs @@ -0,0 +1,7 @@ +{ + "individualId": "{{individualId}}", + "individualIdType": "{{individualIdType}}", + "otp": "{{otp}}", + "transactionID": "{{transactionID}}", + "vidType": "{{vidType}}" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml b/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml new file mode 100644 index 000000000..803a0accb --- /dev/null +++ b/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml @@ -0,0 +1,181 @@ +GenerateVID: + Mimoto_Generate_Perpetual_VID_Valid_Smoke_sid: + endPoint: /residentmobileapp/vid + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/GenerateVID/createGenerateVID + outputTemplate: mimoto/GenerateVID/createGenerateVIDResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "vidType": "Perpetual", + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' + Mimoto_Generate_Perpetual_VID_InValid_Otp_sid: + endPoint: /residentmobileapp/vid + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/GenerateVID/createGenerateVID + outputTemplate: mimoto/error + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "vidType": "Perpetual", + "otp": "112637338", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "errors": [ + { + "errorCode": "RES-SER-422" + } + ], + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' + Mimoto_Generate_Perpetual_VID_with_InvalidUIN_Valid_Otp_sid: + endPoint: /residentmobileapp/vid + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/GenerateVID/createGenerateVID + outputTemplate: mimoto/error + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "253SDGSH@Y37", + "individualIdType": "UIN", + "vidType": "Perpetual", + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "errors": [ + { + "errorCode": "RES-SER-410" + } + ], + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' + + mimoto_Generate_Temporary_VID_Valid_Smoke_sid: + endPoint: /residentmobileapp/vid + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/GenerateVID/createGenerateVID + outputTemplate: mimoto/GenerateVID/createGenerateVIDResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "vidType": "Temporary", + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' + + Mimoto_Generate_Perpetual_VID_Invalid_TransactionId_Neg: + endPoint: /residentmobileapp/vid + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/GenerateVID/createGenerateVID + outputTemplate: mimoto/error + input: '{ + "transactionID": "$trc45", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "vidType": "Perpetual", + "otp": "$ID:AddIdentity_withValidParameters_smoke_Pos_EMAIL$", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "errors": [ + { + "errorCode": "RES-SER-422" + } + ], + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' + + Mimoto_Generate_Perpetual_VID_Binding_Valid_Smoke_sid: + endPoint: /residentmobileapp/vid + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/GenerateVID/createGenerateVID + outputTemplate: mimoto/GenerateVID/createGenerateVIDResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "individualIdType": "UIN", + "vidType": "Perpetual", + "otp": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "sendOtp":{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "individualIdType": "UIN", + "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", + "sendOtpEndPoint": "/residentmobileapp/req/otp" + } + }' + output: '{ + "sendOtpResp":{ + "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" + } +}' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVIDResult.hbs b/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVIDResult.hbs new file mode 100644 index 000000000..7a73a41bf --- /dev/null +++ b/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVIDResult.hbs @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.hbs b/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.hbs new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.hbs @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml b/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml new file mode 100644 index 000000000..bcc709f1e --- /dev/null +++ b/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml @@ -0,0 +1,41 @@ +GetAllIssuers: + Mimoto_GetAllIssuers_All_Valid_Smoke: + endPoint: /residentmobileapp/issuers + role: resident + restMethod: get + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/GetAllIssuers/GetAllIssuers + outputTemplate: mimoto/GetAllIssuers/GetAllIssuersResult + input: '{ +}' + output: '{ +}' + + Mimoto_GetAllIssuers_Specific_Issuer_All_Valid_Smoke: + endPoint: /residentmobileapp/issuers/ESignet + role: resident + restMethod: get + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/GetAllIssuers/GetAllIssuers + outputTemplate: mimoto/GetAllIssuers/GetAllIssuersResult + input: '{ +}' + output: '{ +}' + + Mimoto_GetAllIssuers_Invalid_Issuer_Neg: + endPoint: /residentmobileapp/issuers/invalid + role: resident + restMethod: get + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/GetAllIssuers/GetAllIssuers + outputTemplate: mimoto/error + input: '{ +}' + output: '{ + "errors":[ + { + "errorCode":"RESIDENT-APP-035" + } + ] +}' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuersResult.hbs b/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuersResult.hbs new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuersResult.hbs @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP/SendOTP.yml b/apitest/src/main/resources/mimoto/SendOTP/SendOTP.yml new file mode 100644 index 000000000..670e7e51c --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTP/SendOTP.yml @@ -0,0 +1,52 @@ +SendOTP: + Resident_SendOTP_Valid_UIN_All_Smoke: + endPoint: /resident/v1/req/otp + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: resident/SendOTP/createSendOTP + outputTemplate: resident/SendOTP/createSendOTPResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN" +}' + output: '{ + "maskedMobile": "$IGNORE$", + "maskedEmail": "XXsXXeXXaXXoXXtXXn@gmail.com" +}' + + Resident_SendOTP_Invalid_UIN_Neg: + endPoint: /resident/v1/req/otp + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: resident/SendOTP/createSendOTP + outputTemplate: resident/error + input: '{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "34hgf$", + "individualIdType": "UIN" +}' + output: '{ + "maskedMobile": "$IGNORE$", + "maskedEmail": "XXsXXeXXaXXoXXtXXn@gmail.com" +}' + + Resident_SendOTP_Invalid_VID_Neg: + endPoint: /resident/v1/req/otp + role: resident + restMethod: post + inputTemplate: resident/SendOTP/createSendOTP + outputTemplate: resident/error + input: '{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$45hgv", + "individualIdType": "VID" +}' + output: '{ + +}' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP/createSendOTP.hbs b/apitest/src/main/resources/mimoto/SendOTP/createSendOTP.hbs new file mode 100644 index 000000000..34cba88fd --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTP/createSendOTP.hbs @@ -0,0 +1,10 @@ +{ + "id": "mosip.identity.otp.internal", + "individualId": "{{individualId}}", + "individualIdType": "{{individualIdType}}", + "metadata": {}, + "otpChannel": ["PHONE","EMAIL"], + "requestTime": "{{requestTime}}", + "transactionID": "{{transactionID}}", + "version": "1.0" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP/createSendOTP2.hbs b/apitest/src/main/resources/mimoto/SendOTP/createSendOTP2.hbs new file mode 100644 index 000000000..a0a1e4fc3 --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTP/createSendOTP2.hbs @@ -0,0 +1,10 @@ +{ + "id": "mosip.identity.otp.internal", + "individualId": "{{individualId}}", + "individualIdType": "{{individualIdType}}", + "metadata": {}, + "otpChannel": {{otpChannel}}, + "requestTime": "{{requestTime}}", + "transactionID": "{{transactionID}}", + "version": "1.0" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP/createSendOTPAsEmail.hbs b/apitest/src/main/resources/mimoto/SendOTP/createSendOTPAsEmail.hbs new file mode 100644 index 000000000..ed98a4562 --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTP/createSendOTPAsEmail.hbs @@ -0,0 +1,10 @@ +{ + "id": "mosip.identity.otp.internal", + "individualId": "{{individualId}}", + "individualIdType": "{{individualIdType}}", + "metadata": {}, + "otpChannel": ["EMAIL"], + "requestTime": "{{requestTime}}", + "transactionID": "{{transactionID}}", + "version": "1.0" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP/createSendOTPAsEmpty.hbs b/apitest/src/main/resources/mimoto/SendOTP/createSendOTPAsEmpty.hbs new file mode 100644 index 000000000..ed641006d --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTP/createSendOTPAsEmpty.hbs @@ -0,0 +1,10 @@ +{ + "id": "mosip.identity.otp.internal", + "individualId": "{{individualId}}", + "individualIdType": "{{individualIdType}}", + "metadata": {}, + "otpChannel": [], + "requestTime": "{{requestTime}}", + "transactionID": "{{transactionID}}", + "version": "1.0" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP/createSendOTPAsPhone.hbs b/apitest/src/main/resources/mimoto/SendOTP/createSendOTPAsPhone.hbs new file mode 100644 index 000000000..c0bfffa06 --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTP/createSendOTPAsPhone.hbs @@ -0,0 +1,10 @@ +{ + "id": "mosip.identity.otp.internal", + "individualId": "{{individualId}}", + "individualIdType": "{{individualIdType}}", + "metadata": {}, + "otpChannel": ["PHONE"], + "requestTime": "{{requestTime}}", + "transactionID": "{{transactionID}}", + "version": "1.0" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP/createSendOTPErrorResult.hbs b/apitest/src/main/resources/mimoto/SendOTP/createSendOTPErrorResult.hbs new file mode 100644 index 000000000..c83688009 --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTP/createSendOTPErrorResult.hbs @@ -0,0 +1,14 @@ +{ + "id": "$IGNORE$", + "version": "$IGNORE$", + "responseTime": "$IGNORE$", + "transactionID": "$IGNORE$", + "metadata": "$IGNORE$", + "response": "$IGNORE$", + "errors": [ + { + "errorCode": "{{errorCode}}", + "errorMessage": "{{errorMessage}}" + } + ] +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP/createSendOTPErrorResult2.hbs b/apitest/src/main/resources/mimoto/SendOTP/createSendOTPErrorResult2.hbs new file mode 100644 index 000000000..1216fda84 --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTP/createSendOTPErrorResult2.hbs @@ -0,0 +1,14 @@ +{ + "id": "$IGNORE$", + "version": "$IGNORE$", + "responseTime": "$IGNORE$", + "transactionID": "$IGNORE$", + "metadata": "$IGNORE$", + "response": "$IGNORE$", + "errors": [ + { + "errorCode": "{{errorCode}}", + "message": "{{message}}" + } + ] +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP/createSendOTPResult.hbs b/apitest/src/main/resources/mimoto/SendOTP/createSendOTPResult.hbs new file mode 100644 index 000000000..7a73a41bf --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTP/createSendOTPResult.hbs @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP/createSendOTPResultForEmail.hbs b/apitest/src/main/resources/mimoto/SendOTP/createSendOTPResultForEmail.hbs new file mode 100644 index 000000000..7fc3005ca --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTP/createSendOTPResultForEmail.hbs @@ -0,0 +1,11 @@ +{ + "id": "mosip.identity.otp.internal", + "version": "1.0", + "responseTime": "$IGNORE$", + "transactionID": "$IGNORE$", + "metadata": "$IGNORE$", + "response": { + "maskedEmail": "{{maskedEmail}}" + }, + "errors": "$IGNORE$" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP/createSendOTPResultForPhone.hbs b/apitest/src/main/resources/mimoto/SendOTP/createSendOTPResultForPhone.hbs new file mode 100644 index 000000000..72659f98d --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTP/createSendOTPResultForPhone.hbs @@ -0,0 +1,11 @@ +{ + "id": "mosip.identity.otp.internal", + "version": "1.0", + "responseTime": "$IGNORE$", + "transactionID": "$IGNORE$", + "metadata": "$IGNORE$", + "response": { + "maskedMobile": "{{maskedMobile}}" + }, + "errors": "$IGNORE$" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP1/SendOTP.yml b/apitest/src/main/resources/mimoto/SendOTP1/SendOTP.yml new file mode 100644 index 000000000..26ecf09ed --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTP1/SendOTP.yml @@ -0,0 +1,81 @@ +SendOTP: + Mimoto_SendOTP_Valid_UIN_All_Smoke: + endPoint: /resident/v1/req/otp + role: resident + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/SendOTP1/createSendOTP + outputTemplate: mimoto/SendOTP1/createSendOTPResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN" +}' + output: '{ + "maskedMobile": "$IGNORE$", + "maskedEmail": "$IGNORE$" + }' + + Mimoto_SendOTP_Valid_VID_All_Smoke: + endPoint: /resident/v1/req/otp + role: resident + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/SendOTP1/createSendOTP + outputTemplate: mimoto/SendOTP1/createSendOTPResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Valid_Smoke_sid_vid$", + "individualIdType": "VID" +}' + output: '{ + "maskedMobile": "$IGNORE$", + "maskedEmail": "$IGNORE$" +}' + + Mimoto_SendOTP_InValid_UIN_All: + endPoint: /residentmobileapp/req/otp + role: resident + restMethod: post + inputTemplate: mimoto/SendOTP1/createSendOTP + outputTemplate: mimoto/error + input: '{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "4Y4B4 N@&&&&", + "individualIdType": "UIN" +}' + output: '{ + "errors": [ + { + "errorCode": "IDA-MLC-009", + "errorMessage": "$IGNORE$" + } + ] +}' + + Mimoto_SendOTP_Invalid_VID_Neg: + endPoint: /resident/v1/req/otp + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/SendOTP1/createSendOTP + outputTemplate: mimoto/error + input: '{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$gyx56", + "individualIdType": "VID" +}' + output: '{ + "errors": [ + { + "errorCode": "IDA-MLC-009", + "errorMessage": "Invalid Input Parameter - individualId" + } + ], + "maskedMobile": "$IGNORE$", + "maskedEmail": "XXsXXeXXaXXoXXtXXn@gmail.com" +}' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP1/createSendOTP.hbs b/apitest/src/main/resources/mimoto/SendOTP1/createSendOTP.hbs new file mode 100644 index 000000000..34cba88fd --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTP1/createSendOTP.hbs @@ -0,0 +1,10 @@ +{ + "id": "mosip.identity.otp.internal", + "individualId": "{{individualId}}", + "individualIdType": "{{individualIdType}}", + "metadata": {}, + "otpChannel": ["PHONE","EMAIL"], + "requestTime": "{{requestTime}}", + "transactionID": "{{transactionID}}", + "version": "1.0" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP1/createSendOTP2.hbs b/apitest/src/main/resources/mimoto/SendOTP1/createSendOTP2.hbs new file mode 100644 index 000000000..a0a1e4fc3 --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTP1/createSendOTP2.hbs @@ -0,0 +1,10 @@ +{ + "id": "mosip.identity.otp.internal", + "individualId": "{{individualId}}", + "individualIdType": "{{individualIdType}}", + "metadata": {}, + "otpChannel": {{otpChannel}}, + "requestTime": "{{requestTime}}", + "transactionID": "{{transactionID}}", + "version": "1.0" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP1/createSendOTPErrorResult.hbs b/apitest/src/main/resources/mimoto/SendOTP1/createSendOTPErrorResult.hbs new file mode 100644 index 000000000..c83688009 --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTP1/createSendOTPErrorResult.hbs @@ -0,0 +1,14 @@ +{ + "id": "$IGNORE$", + "version": "$IGNORE$", + "responseTime": "$IGNORE$", + "transactionID": "$IGNORE$", + "metadata": "$IGNORE$", + "response": "$IGNORE$", + "errors": [ + { + "errorCode": "{{errorCode}}", + "errorMessage": "{{errorMessage}}" + } + ] +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP1/createSendOTPErrorResult2.hbs b/apitest/src/main/resources/mimoto/SendOTP1/createSendOTPErrorResult2.hbs new file mode 100644 index 000000000..1216fda84 --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTP1/createSendOTPErrorResult2.hbs @@ -0,0 +1,14 @@ +{ + "id": "$IGNORE$", + "version": "$IGNORE$", + "responseTime": "$IGNORE$", + "transactionID": "$IGNORE$", + "metadata": "$IGNORE$", + "response": "$IGNORE$", + "errors": [ + { + "errorCode": "{{errorCode}}", + "message": "{{message}}" + } + ] +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP1/createSendOTPResult.hbs b/apitest/src/main/resources/mimoto/SendOTP1/createSendOTPResult.hbs new file mode 100644 index 000000000..bd241fc20 --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTP1/createSendOTPResult.hbs @@ -0,0 +1,12 @@ +{ + "id": "mosip.identity.otp.internal", + "version": "1.0", + "responseTime": "$IGNORE$", + "transactionID": "$IGNORE$", + "metadata": "$IGNORE$", + "response": { + "maskedMobile": "{{maskedMobile}}", + "maskedEmail": "$IGNORE$" + }, + "errors": "$IGNORE$" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml b/apitest/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml new file mode 100644 index 000000000..815639521 --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml @@ -0,0 +1,14 @@ +individualOTP: + Mimoto_individualOTP_All_Valid_Smoke: + endPoint: /residentmobileapp/req/individualId/otp + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: mimoto/SendOTPUIN/individualIdOtp + outputTemplate: mimoto/SendOTPUIN/individualIdOtpResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "aid": "$ID:AddIdentity_withValidParameters_smoke_Pos_RID$" + }' + output: '{ + }' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTPUIN/individualIdOtp.hbs b/apitest/src/main/resources/mimoto/SendOTPUIN/individualIdOtp.hbs new file mode 100644 index 000000000..b40d7bdb2 --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTPUIN/individualIdOtp.hbs @@ -0,0 +1,8 @@ +{ + "aid": "{{aid}}", + "otpChannel": [ + "EMAIL", + "PHONE" + ], + "transactionID": "{{transactionID}}" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTPUIN/individualIdOtpResult.hbs b/apitest/src/main/resources/mimoto/SendOTPUIN/individualIdOtpResult.hbs new file mode 100644 index 000000000..7a73a41bf --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOTPUIN/individualIdOtpResult.hbs @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOtpForVid/createSendOTP.hbs b/apitest/src/main/resources/mimoto/SendOtpForVid/createSendOTP.hbs new file mode 100644 index 000000000..c468ffce3 --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOtpForVid/createSendOTP.hbs @@ -0,0 +1,12 @@ +{ + "id": "mosip.identity.otp", + "version": "1.0", + "requestTime": "{{requestTime}}", + "transactionID": "{{transactionID}}", + "individualId": "{{individualId}}", + "individualIdType": "{{individualIdType}}", + "otpChannel": [ + "EMAIL", + "PHONE" + ] +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOtpForVid/createSendOTP.yml b/apitest/src/main/resources/mimoto/SendOtpForVid/createSendOTP.yml new file mode 100644 index 000000000..164f0a52d --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOtpForVid/createSendOTP.yml @@ -0,0 +1,21 @@ +createSendOTP: + Resident_SendOTP_All_Valid_Smoke: + endPoint: /idauthentication/v1/otp/v4jO2rTUkDglaG7rCkWDnqIT3WpZaGEW9j3FMXwTA5xXKVaDpx/6001/34536061 + role: resident + restMethod: post + inputTemplate: resident/SendOtpForVid/createSendOTP + outputTemplate: resident/SendOtpForVid/createSendOTPResult + input: '{ + "transactionID": "1234567190", + "individualId": "5329487524103783", + "requestTime": "$TIMESTAMP$", + "individualIdType": "VID", + "otpChannel": [ + "EMAIL", + "PHONE" + ] + }' + output: '{ + "maskedMobile": "XXXXXX7143", + "maskedEmail": "XXkXXlXXhXXuXXr@technoforte.co.in" + }' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOtpForVid/createSendOTPResult.hbs b/apitest/src/main/resources/mimoto/SendOtpForVid/createSendOTPResult.hbs new file mode 100644 index 000000000..0668a51b5 --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOtpForVid/createSendOTPResult.hbs @@ -0,0 +1,12 @@ +{ + "id": "$IGNORE$", + "version": "$IGNORE$", + "responseTime": "$IGNORE$", + "transactionID": "$IGNORE$", + "metadata": "$IGNORE$", + "response": { + "maskedMobile": "{{maskedMobile}}", + "maskedEmail": "{{maskedEmail}}" + }, + "errors": "$IGNORE$" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/ValidateOTP/ValidateOTP.hbs b/apitest/src/main/resources/mimoto/ValidateOTP/ValidateOTP.hbs new file mode 100644 index 000000000..05f5d58a0 --- /dev/null +++ b/apitest/src/main/resources/mimoto/ValidateOTP/ValidateOTP.hbs @@ -0,0 +1,10 @@ +{ + "id": "mosip.identity.auth.internal", + "version": "v1", + "requesttime": "{{requesttime}}", + "request": { + "transactionId": "{{transactionId}}", + "individualId": "{{individualId}}", + "otp": "{{otp}}" + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/ValidateOTP/ValidateOTP.yml b/apitest/src/main/resources/mimoto/ValidateOTP/ValidateOTP.yml new file mode 100644 index 000000000..94d06c9f9 --- /dev/null +++ b/apitest/src/main/resources/mimoto/ValidateOTP/ValidateOTP.yml @@ -0,0 +1,185 @@ +SendOTP: + Resident_SendOTP_Valid_UIN_All_Smoke: + endPoint: /resident/v1/req/otp + role: resident + restMethod: post + inputTemplate: resident/SendOTP/createSendOTP + outputTemplate: resident/SendOTP/createSendOTPResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN" +}' + output: '{ + "maskedMobile": "$IGNORE$" + }' + Resident_SendOTP_Valid_UIN_Phone_Smoke: + endPoint: /resident/v1/req/otp + role: resident + checkErrorsOnlyInResponse: true + restMethod: post + inputTemplate: resident/SendOTP/createSendOTP2 + outputTemplate: resident/SendOTP/createSendOTPResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "otpChannel": "[\"PHONE\"]", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN" +}' + output: '{ + "maskedMobile": "$IGNORE$" + }' + Resident_SendOTP_Valid_UIN_Email_Smoke: + endPoint: /resident/v1/req/otp + role: resident + restMethod: post + inputTemplate: resident/SendOTP/createSendOTP2 + outputTemplate: resident/SendOTP/createSendOTPResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "otpChannel": "[\"EMAIL\"]", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN" +}' + output: '{ + "maskedMobile": "$IGNORE$" + }' + Resident_SendOTP_RevokedVID_Invalid: + endPoint: /resident/v1/req/otp + role: resident + restMethod: post + inputTemplate: resident/SendOTP/createSendOTP + outputTemplate: resident/SendOTP/createSendOTPErrorResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:GenerateVID_All_Valid_Smoke_Perpetual_sid_vid$", + "individualIdType": "UIN" +}' + output: '{ + "errorCode": "IDA-MLC-018" + }' + Resident_SendOTP_Valid_UIN_Invalid_empty_otpChannel: + endPoint: /resident/v1/req/otp + role: resident + restMethod: post + inputTemplate: resident/SendOTP/createSendOTP2 + outputTemplate: resident/SendOTP/createSendOTPErrorResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "otpChannel": "[]", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN" +}' + output: '{ + "errorCode": "IDA-OTA-008" + }' + Resident_SendOTP_InValid_individualId: + endPoint: /resident/v1/req/otp + role: resident + restMethod: post + inputTemplate: resident/SendOTP/createSendOTP + outputTemplate: resident/SendOTP/createSendOTPErrorResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "asfvgaf", + "individualIdType": "UIN" +}' + output: '{ + "errorCode": "IDA-MLC-009" + }' + Resident_SendOTP_InValid_Missing_individualId: + endPoint: /resident/v1/req/otp + role: resident + restMethod: post + inputTemplate: resident/SendOTP/createSendOTP + outputTemplate: resident/SendOTP/createSendOTPErrorResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "$TIMESTAMP$", + "individualId": "$REMOVE$", + "individualIdType": "UIN" +}' + output: '{ + "errorCode": "IDA-MLC-009" + }' + Resident_SendOTP_InValid_Empty_transactionID: + endPoint: /resident/v1/req/otp + role: resident + restMethod: post + inputTemplate: resident/SendOTP/createSendOTP + outputTemplate: resident/SendOTP/createSendOTPErrorResult + input: '{ + "transactionID": "", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN" +}' + output: '{ + "errorCode": "IDA-MLC-006" + }' + Resident_SendOTP_InValid_transactionID: + endPoint: /resident/v1/req/otp + role: resident + restMethod: post + inputTemplate: resident/SendOTP/createSendOTP + outputTemplate: resident/SendOTP/createSendOTPErrorResult + input: '{ + "transactionID": "asdveve", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN" +}' + output: '{ + "errorCode": "IDA-MLC-009" + }' + Resident_SendOTP_InValid_Missing_transactionID: + endPoint: /resident/v1/req/otp + role: resident + restMethod: post + inputTemplate: resident/SendOTP/createSendOTP + outputTemplate: resident/SendOTP/createSendOTPErrorResult2 + input: '{ + "transactionID": "$REMOVE$", + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN" +}' + output: '{ + "errorCode": "RES-SER-425" + }' + Resident_SendOTP_InValid_Empty_requestTime: + endPoint: /resident/v1/req/otp + role: resident + restMethod: post + inputTemplate: resident/SendOTP/createSendOTP + outputTemplate: resident/SendOTP/createSendOTPErrorResult + input: '{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN" +}' + output: '{ + "errorCode": "IDA-MLC-006" + }' + Resident_SendOTP_InValid_requestTime: + endPoint: /resident/v1/req/otp + role: resident + restMethod: post + inputTemplate: resident/SendOTP/createSendOTP + outputTemplate: resident/SendOTP/createSendOTPErrorResult2 + input: '{ + "transactionID": "$TRANSACTIONID$", + "requestTime": "asvfv", + "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "individualIdType": "UIN" +}' + output: '{ + "errorCode": "RES-SER-425" + }' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/ValidateOTP/ValidateOTPResult.hbs b/apitest/src/main/resources/mimoto/ValidateOTP/ValidateOTPResult.hbs new file mode 100644 index 000000000..689fb082b --- /dev/null +++ b/apitest/src/main/resources/mimoto/ValidateOTP/ValidateOTPResult.hbs @@ -0,0 +1,7 @@ +{ + "id": "mosip.identity.auth.internal", + "version": "v1", + "response": { + "authStatus": {{authStatus}} + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.hbs b/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.hbs new file mode 100644 index 000000000..1a415bc51 --- /dev/null +++ b/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.hbs @@ -0,0 +1,16 @@ +{ + "requestTime": "{{requestTime}}", + "request": { + "individualId": "{{individualId}}", + "authFactorType": "{{authFactorType1}}", + "format": "{{format1}}", + "challengeList": [ + { + "authFactorType": "{{authFactorType}}", + "challenge": "{{challenge}}", + "format": "{{format}}" + } + ], + "publicKey": "{{publicKey}}" + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml b/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml new file mode 100644 index 000000000..9fd032f39 --- /dev/null +++ b/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml @@ -0,0 +1,2953 @@ +WalletBinding: + Mimoto_WalletBinding_uin_OTP_Valid_Smoke: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/WalletBinding/WalletBindingResult + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_OTP_Valid_Smoke: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/WalletBinding/WalletBindingResult + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Invalid_RequestTime_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "asdf$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_PastVal_RequestTime_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "2022-11-07T06:51:30.195Z", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_FutureVal_RequestTime_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "2033-11-07T06:51:30.195Z", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Empty_RequestTime_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Missing_RequestTime_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$REMOVE$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Invalid_IndividualId_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$tyhg", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "binding_auth_failed" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Empty_IndividualId_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_individual_id" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Null_IndividualId_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "null", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "binding_auth_failed" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Missing_IndividualId_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$REMOVE$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_individual_id" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_SpaceVal_IndividualId_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": " ", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_individual_id" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Invalid_AuthFactorType_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "dfg5", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Empty_AuthFactorType_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Missing_AuthFactorType_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "$REMOVE$", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_SpaceVal_AuthFactorType_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": " ", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Null_AuthFactorType_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "null", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Invalid_Challenge_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "gd5$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "binding_auth_failed" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Missing_Challenge_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$REMOVE$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_challenge" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Empty_Challenge_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_challenge" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_SpaceVal_Challenge_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": " ", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_challenge" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Null_Challenge_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "null", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "binding_auth_failed" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Invalid_Formate_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "GT$r5", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Missing_Formate_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "$REMOVE$", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Empty_Formate_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_SpaceVal_Formate_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": " ", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Null_Formate_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "null", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Invalid_authFactorType1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "hy$5", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Missing_authFactorType1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "$REMOVE$", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Empty_authFactorType1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_SpaceVal_authFactorType1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": " ", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Null_authFactorType1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "null", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Invalid_format1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "hju$5", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Missing_format1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "$REMOVE$", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Empty_format1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_SpaceVal_format1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": " ", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Null_format1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "null", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Invalid_publicKey_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "ghj$4", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "RESIDENT-APP-028" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Null_publicKey_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "null", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "RESIDENT-APP-028" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_uin_Missing_publicKey_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$REMOVE$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "RESIDENT-APP-028" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Invalid_RequestTime_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "asdf$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_PastVal_RequestTime_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "2022-11-07T06:51:30.195Z", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_FutureVal_RequestTime_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "2033-11-07T06:51:30.195Z", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Empty_RequestTime_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Missing_RequestTime_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$REMOVE$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_request" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Invalid_IndividualId_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$tyhg", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "binding_auth_failed" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Empty_IndividualId_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_individual_id" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Null_IndividualId_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "null", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "binding_auth_failed" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Missing_IndividualId_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$REMOVE$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_individual_id" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_SpaceVal_IndividualId_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": " ", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_individual_id" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Invalid_AuthFactorType_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "dfg5", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Empty_AuthFactorType_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Missing_AuthFactorType_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "$REMOVE$", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_SpaceVal_AuthFactorType_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": " ", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Null_AuthFactorType_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "null", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Invalid_Challenge_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "gd5$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "binding_auth_failed" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Missing_Challenge_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$REMOVE$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_challenge" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Empty_Challenge_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_challenge" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_SpaceVal_Challenge_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": " ", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_challenge" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Null_Challenge_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "null", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "binding_auth_failed" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Invalid_Formate_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "GT$r5", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Missing_Formate_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "$REMOVE$", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Empty_Formate_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_SpaceVal_Formate_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": " ", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Null_Formate_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "null", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Invalid_authFactorType1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "hy$5", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Missing_authFactorType1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "$REMOVE$", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Empty_authFactorType1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_SpaceVal_authFactorType1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": " ", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Null_authFactorType1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "null", + "format1": "jwt", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Invalid_format1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "hju$5", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Missing_format1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "$REMOVE$", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Empty_format1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_SpaceVal_format1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": " ", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Null_format1_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "null", + "publicKey": "$PUBLICKEYFORBINDING$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "invalid_auth_factor_type_or_challenge_format" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Invalid_publicKey_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "ghj$4", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "RESIDENT-APP-028" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Null_publicKey_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "null", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "RESIDENT-APP-028" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + + } +}' + + Mimoto_WalletBinding_vid_Missing_publicKey_Neg: + endPoint: /residentmobileapp/wallet-binding + role: resident + validityCheckRequired: true + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/WalletBinding/WalletBinding + outputTemplate: mimoto/error + input: '{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "authFactorType": "OTP", + "challenge": "$ID:AddIdentity_Binding_smoke_Pos_EMAIL$", + "format": "alpha-numeric", + "authFactorType1": "WLA", + "format1": "jwt", + "publicKey": "$REMOVE$", + "sendOtp":{ + "requestTime": "$TIMESTAMP$", + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", + "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], + "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", + "sendOtpEndPoint": "/residentmobileapp/binding-otp" + } +}' + output: '{ + "errors": [ + { + "errorCode": "RESIDENT-APP-028" + } + ], + "sendOtpResp": { + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" + } +}' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/WalletBinding/WalletBindingEmptyChallenge.hbs b/apitest/src/main/resources/mimoto/WalletBinding/WalletBindingEmptyChallenge.hbs new file mode 100644 index 000000000..646bf0f46 --- /dev/null +++ b/apitest/src/main/resources/mimoto/WalletBinding/WalletBindingEmptyChallenge.hbs @@ -0,0 +1,9 @@ +{ + "requestTime": "{{requestTime}}", + "request": { + "transactionId": "{{transactionId}}", + "individualId": "{{individualId}}", + "challengeList": "{{challengeList}}", + "publicKey": {{publicKey}} + } + } \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/WalletBinding/WalletBindingResult.hbs b/apitest/src/main/resources/mimoto/WalletBinding/WalletBindingResult.hbs new file mode 100644 index 000000000..720501904 --- /dev/null +++ b/apitest/src/main/resources/mimoto/WalletBinding/WalletBindingResult.hbs @@ -0,0 +1,9 @@ +{ + "responseTime": "$IGNORE$", + "response": { + "encryptedWalletBindingId": "$IGNORE$", + "certificate": "$IGNORE$", + "expireDateTime": "$IGNORE$" + }, + "errors": "$IGNORE$" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/autoGeneratedId.properties b/apitest/src/main/resources/mimoto/autoGeneratedId.properties new file mode 100644 index 000000000..f7bbba8b4 --- /dev/null +++ b/apitest/src/main/resources/mimoto/autoGeneratedId.properties @@ -0,0 +1 @@ +DefinePolicyGroup_All_Valid_Smoke_sid=456789567 \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/error.hbs b/apitest/src/main/resources/mimoto/error.hbs new file mode 100644 index 000000000..f4bcb6bee --- /dev/null +++ b/apitest/src/main/resources/mimoto/error.hbs @@ -0,0 +1,10 @@ +{ + "errors": [ + {{#each errors}} + { + "errorCode": "{{errorCode}}" + } + {{#unless @last}},{{/unless}} + {{/each}} + ] +} \ No newline at end of file diff --git a/apitest/src/main/resources/spring.properties b/apitest/src/main/resources/spring.properties new file mode 100644 index 000000000..21fdcd3ec --- /dev/null +++ b/apitest/src/main/resources/spring.properties @@ -0,0 +1,329 @@ +#Please change only required values +logging.level.io.mosip.registrtaion=DEBUG + +hibernate.hbm2ddl.auto=none +hibernate.dialect=org.hibernate.dialect.DerbyTenSevenDialect +hibernate.show_sql=false +hibernate.format_sql=false +hibernate.connection.charSet=utf8 +hibernate.cache.use_second_level_cache=false +hibernate.cache.use_query_cache=false +hibernate.cache.use_structured_entries=false +hibernate.generate_statistics=false + +#otp validation time details +otp_validity_in_mins=2 + + +#Timeout Configuration +HTTP_API_READ_TIMEOUT = 60000 +HTTP_API_WRITE_TIMEOUT = 60000 + +#Biometric Device +PROVIDER_NAME = Mantra +WEBCAM_LIBRARY_NAME = sarxos + +#document scanner properties +DOCUMENT_SCANNER_DEPTH=10 +DOCUMENT_SCANNER_HOST=192.168.43.253 +DOCUMENT_SCANNER_PORT=6566 +DOCUMENT_SCANNER_TIMEOUT=5000 + +#Client ID and Secret Key +AUTH_CLIENT_ID=registration-client +AUTH_SECRET_KEY=c6f69439-f811-4415-8ebc-4c9e447c901e + +spring.cloud.config.uri=LOCAL +spring.application.name= +spring.profiles.active= +spring.cloud.config.label= + +#AUTH_SDK +mosip.registration.face.provider=com.identy.IdentyBioSDK +mosip.registration.iris.provider=com.identy.IdentyBioSDK +mosip.registration.finger.provider=com.identy.IdentyBioSDK + + +#MDM +#host has to be clarified whether nedd to be in config or hardcoded +mdm.host=127.0.0.1 +#portRangeFrom and portRangeTo are mandate,portRangeTo can be same are greater than then portRangeFrom +mdm.portRangeFrom=4500 +mdm.portRangeTo=4510 +mdm.contextPath= +mdm.hostProtocol=http + +mdm.deviceInfo.service.path=deviceInfo +mdm.deviceInfo.service.headers=Content-Type:APPLICATION/JSON +mdm.deviceInfo.service.httpmethod=GET +mdm.deviceInfo.service.responseType=java.lang.Object + +mdm.capture.service.path=capture +mdm.capture.service.headers=Content-Type:APPLICATION/JSON +mdm.capture.service.httpmethod=POST +mdm.deviceInfo.service.responseType=java.lang.Object + +mdm.deviceDiscovery.service.path=deviceDiscovery +mdm.deviceDiscovery.service.headers=Content-Type:APPLICATION/JSON +mdm.deviceDiscovery.service.httpmethod=POST +mdm.deviceDiscovery.service.responseType=java.lang.Object + +mosip.kernel.idobjectvalidator.file-storage-uri=LOCAL +mosip.kernel.idobjectvalidator.schema-name=mosip-identity-json-schema.json +mosip.kernel.idobjectvalidator.property-source=LOCAL +mosip.kernel.keymanager-service-sign-url= + +mosip.country.code=MOR + +#onboarded_user details +user_machine_mapping.service.url=https://qa.mosip.io/v1/masterdata/registrationmachineusermappings +user_machine_mapping.service.httpmethod=PUT +user_machine_mapping.service.requestType=java.lang.Object +user_machine_mapping.service.headers=Content-Type:APPLICATION/JSON +user_machine_mapping.service.authrequired=true +user_machine_mapping.service.signrequired=false +user_machine_mapping.service.authheader=Authorization:OAUTH +user_machine_mapping.service.requestsignrequired=true + +#packet_status details +packet_status.service.url=https://qa.mosip.io/registrationprocessor/v1/registrationstatus/search +packet_status.service.httpmethod=POST +packet_status.service.responseType=java.util.LinkedHashMap +packet_status.service.headers=Content-Type:APPLICATION/JSON +packet_status.service.authrequired=true +packet_status.service.signrequired=false +packet_status.service.authheader=Authorization:OAUTH +packet_status.service.requestsignrequired=true + +#sms +sms.service.url=https://qa.mosip.io/v1/smsnotifier/sms/send +sms.service.httpmethod=POST +sms.service.requestType=java.lang.Object +sms.service.headers=Content-Type:APPLICATION/JSON +sms.service.authrequired=true +sms.service.signrequired=false +sms.service.authheader=Authorization:OAUTH +sms.service.requestsignrequired=true + +#email +email.service.url=https://qa.mosip.io/v1/emailnotifier/email/send +email.service.httpmethod=POST +email.service.requestType=java.lang.Object +email.service.headers=Content-Type:multipart/form-data +email.service.authrequired=true +email.service.signrequired=false +email.service.authheader=Authorization:OAUTH +email.service.requestsignrequired=true + +#Upload +packet_upload.service.url=https://qa.mosip.io/registrationprocessor/v1/packetreceiver/registrationpackets +packet_upload.service.httpmethod=POST +packet_upload.service.requestType=java.lang.String +packet_upload.service.headers=Content-Type:multipart/form-data +packet_upload.service.authrequired=true +packet_upload.service.signrequired=false +packet_upload.service.authheader=Authorization:OAUTH +packet_upload.service.service.requestsignrequired=true + +#Packet Sync +packet_sync.service.url=https://qa.mosip.io/registrationprocessor/v1/registrationstatus/sync +packet_sync.service.httpmethod=POST +packet_sync.service.requestType=java.lang.Object +packet_sync.service.headers=Content-Type:APPLICATION/JSON,timestamp:timestamp,Center-Machine-RefId:centerId +packet_sync.service.authrequired=true +packet_sync.service.signrequired=false +packet_sync.service.authheader=Authorization:OAUTH +packet_sync.service.service.requestsignrequired=true + +#policy sync +policysync.service.url= https://qa.mosip.io/v1/syncdata/publickey/REGISTRATION +policysync.service.httpmethod=GET +policysync.service.responseType=java.util.LinkedHashMap +policysync.service.headers=Content-Type:APPLICATION/JSON +policysync.service.authrequired=true +policysync.service.signrequired=false +policysync.service.authheader=Authorization:OAUTH +policysync.service.service.requestsignrequired=true + +#Pre-Registration Get Pre-Reg Id's +get_pre_registration_Ids.service.url=https://qa.mosip.io/preregistration/v1/sync +get_pre_registration_Ids.service.httpmethod=POST +get_pre_registration_Ids.service.requestType=java.lang.Object +get_pre_registration_Ids.service.headers=Content-Type:APPLICATION/JSON +get_pre_registration_Ids.service.authrequired=true +get_pre_registration_Ids.service.signrequired=false +get_pre_registration_Ids.service.authheader=Authorization:OAUTH +get_pre_registration_Ids.service.requestsignrequired=true + +#Pre-Registration Get Pre-Reg packet +get_pre_registration.service.url=https://qa.mosip.io/preregistration/v1/sync/{pre_registration_id} +get_pre_registration.service.httpmethod=GET +get_pre_registration.service.responseType=java.lang.Object +get_pre_registration.service.headers=Content-Type:APPLICATION/JSON +get_pre_registration.service.authrequired=true +get_pre_registration.service.signrequired=false +get_pre_registration.service.authheader=Authorization:OAUTH +get_pre_registration.service.requestsignrequired=true + +#master_sync details +master_sync.service.url=https://qa.mosip.io/v1/syncdata/masterdata +master_sync.service.httpmethod=GET +master_sync.service.responseType=java.lang.Object +master_sync.service.headers=Content-Type:application/json;charset=UTF-8 +master_sync.service.authrequired=true +master_sync.service.signrequired=false +master_sync.service.authheader=Authorization:OAUTH +master_sync.service.requestsignrequired=true + +#Get Global-Config Details +get_registration_center_config.service.url=https://qa.mosip.io/v1/syncdata/configs +get_registration_center_config.service.httpmethod=GET +get_registration_center_config.service.responseType=java.util.LinkedHashMap +get_registration_center_config.service.headers=Content-Type:APPLICATION/JSON +get_registration_center_config.service.authrequired=true +get_registration_center_config.service.signrequired=false +get_registration_center_config.service.authheader=Authorization:OAUTH +get_registration_center_config.service.requestsignrequired=true + +#Send OTP +send_otp.service.url=https://qa.mosip.io/v1/authmanager/authenticate/sendotp +send_otp.service.httpmethod=POST +send_otp.service.requestType=java.lang.Object +send_otp.service.headers=Content-Type:APPLICATION/JSON +send_otp.service.authrequired=true +send_otp.service.signrequired=false +send_otp.service.authheader=Authorization:OAUTH +send_otp.service.requestsignrequired=false + +#Validate Authorization Token +validate_auth_token.service.url=https://qa.mosip.io/v1/authmanager/authorize/admin/validateToken +validate_auth_token.service.httpmethod=POST +validate_auth_token.service.requestType=java.lang.Object +validate_auth_token.service.headers=Content-Type:APPLICATION/JSON +validate_auth_token.service.authrequired=true +validate_auth_token.service.signrequired=false +validate_auth_token.service.authheader=Authorization:OAUTH +validate_auth_token.service.requestsignrequired=false + +#Authentication API +auth_by_password.service.url=https://qa.mosip.io/v1/authmanager/authenticate/useridPwd +auth_by_otp.service.url=https://qa.mosip.io/v1/authmanager/authenticate/useridOTP +auth_by_clientid_secretkey.service.url=https://qa.mosip.io/v1/authmanager/authenticate/clientidsecretkey + +#user details +user_details.service.url=https://qa.mosip.io/v1/syncdata/userdetails/{regid} +user_details.service.httpmethod=GET +user_details.service.responseType=java.lang.Object +user_details.service.headers=Content-Type:APPLICATION/JSON +user_details.service.authrequired=true +user_details.service.signrequired=false +user_details.service.authheader=Authorization:OAUTH +user_details.service.requestsignrequired=true + +#Invalidate Authorization Token +invalidate_auth_token.service.url=https://qa.mosip.io/v1/authmanager/authorize/invalidateToken +invalidate_auth_token.service.httpmethod=POST +invalidate_auth_token.service.requestType=java.lang.Object +invalidate_auth_token.service.headers=Content-Type:APPLICATION/JSON +invalidate_auth_token.service.authrequired=true +invalidate_auth_token.service.signrequired=false +invalidate_auth_token.service.authheader=Authorization:OAUTH +invalidate_auth_token.service.requestsignrequired=false + +#public_key details +public_key.service.url=https://qa.mosip.io/v1/keymanager/publickey/KERNEL +public_key.service.httpmethod=GET +public_key.service.responseType=java.lang.Object +public_key.service.headers=Content-Type:APPLICATION/JSON +public_key.service.authrequired=true +public_key.service.signrequired=false +public_key.service.authheader=Authorization:OAUTH +public_key.service.requestsignrequired=true + +#public_key details +public_key.service.url=https://qa.mosip.io/v1/keymanager/publickey/KERNEL +public_key.service.httpmethod=GET +public_key.service.responseType=java.lang.Object +public_key.service.headers=Content-Type:APPLICATION/JSON +public_key.service.authrequired=true +public_key.service.signrequired=false +public_key.service.authheader=Authorization:OAUTH +public_key.service.requestsignrequired=true + +#user_salt_details details +user_salt_details.service.url=https://qa.mosip.io/v1/authmanager/usersaltdetails/registrationclient +user_salt_details.service.httpmethod=GET +user_salt_details.service.responseType=java.lang.Object +user_salt_details.service.headers=Content-Type:APPLICATION/JSON +user_salt_details.service.authrequired=true +user_salt_details.service.signrequired=false +user_salt_details.service.authheader=Authorization:OAUTH +user_salt_details.service.requestsignrequired=true + +#SignatureResponseUrl's +mosip.kernel.signature.cryptomanager-encrypt-url=https://qa.mosip.io/v1/cryptomanager/private/encrypt +mosip.kernel.keymanager-service-publickey-url=https://qa.mosip.io/v1/keymanager/publickey/{applicationId} +auth.server.validate.url=https://qa.mosip.io/v1/authmanager/authorize/validateToken +auth.server.refreshToken.url=https://qa.mosip.io/v1/authmanager/authorize/refreshToken + +#master_sync details +center_remap_sync.service.url=https://qa.mosip.io/v1/syncdata/masterdata/{regcenterId} +center_remap_sync.service.httpmethod=GET +center_remap_sync.service.responseType=java.lang.Object +center_remap_sync.service.headers=Content-Type:application/json;charset=UTF-8 +center_remap_sync.service.authrequired=true +center_remap_sync.service.signrequired=false +center_remap_sync.service.authheader=Authorization:OAUTH +center_remap_sync.service.requestsignrequired=true + +#ida_key details +ida_key.service.url=https://qa.mosip.io/v1/keymanager/publickey/IDA +ida_key.service.httpmethod=GET +ida_key.service.responseType=java.util.LinkedHashMap +ida_key.service.headers=Content-Type:APPLICATION/JSON +ida_key.service.authrequired=true +ida_key.service.signrequired=false +ida_key.service.authheader=Authorization:OAUTH +ida_key.service.requestsignrequired=true + +#ida_auth details +ida_auth.service.url=https://qa.mosip.io/idauthentication/v1/internal/auth +ida_auth.service.httpmethod=POST +ida_auth.service.responseType=java.util.LinkedHashMap +ida_auth.service.headers=Content-Type:APPLICATION/JSON +ida_auth.service.authrequired=true +ida_auth.service.signrequired=false +ida_auth.service.authheader=Authorization:OAUTH +ida_auth.service.requestsignrequired=true + +#TPM Public Key Upload +tpm_public_key.service.url=https://qa.mosip.io/v1/syncdata/tpm/publickey +tpm_public_key.service.httpmethod=POST +tpm_public_key.service.responseType=java.lang.Object +tpm_public_key.service.headers=Content-Type:APPLICATION/JSON +tpm_public_key.service.authrequired=true +tpm_public_key.service.signrequired=false +tpm_public_key.service.authheader=Authorization:OAUTH +ida_auth.service.requestsignrequired=false + +#Main Properties +mosip.reg.client.url=https://devops.mosip.io/artifactory/libs-release/io/mosip/registration/registration-client/ +mosip.reg.logpath=../logs +mosip.reg.packetstorepath=../PacketStore +mosip.reg.healthcheck.url=https://qa.mosip.io/v1/authmanager/actuator/health +mosip.reg.rollback.path=../BackUp +mosip.reg.db.key=bW9zaXAxMjM0NQ\=\= +mosip.reg.cerpath=/cer//mosip_cer.cer +mosip.reg.xml.file.url=https://devops.mosip.io/artifactory/libs-release/io/mosip/registration/registration-client/maven-metadata.xml +mosip.reg.dbpath=db/reg +mosip.reg.client.tpm.availability=N + +#Cryptomanger +session_key.service.url=https://qa.mosip.io/v1/cryptomanager/encrypt +session_key.service.httpmethod=POST +session_key.service.requestType=java.lang.Object +session_key.service.headers=Content-Type:APPLICATION/JSON +session_key.service.authrequired=true +session_key.service.signrequired=false +session_key.service.authheader=Authorization:OAUTH +session_key.service.service.requestsignrequired=true diff --git a/apitest/testNgXmlFiles/mimotoApi.xml b/apitest/testNgXmlFiles/mimotoApi.xml new file mode 100644 index 000000000..e3b16cbdd --- /dev/null +++ b/apitest/testNgXmlFiles/mimotoApi.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From b1b650b3fc617b30cfcef0e0129e839dfddca7ff Mon Sep 17 00:00:00 2001 From: Challa Rao <47347156+challabeehyv@users.noreply.github.com> Date: Fri, 19 Apr 2024 19:05:04 +0530 Subject: [PATCH 131/860] [INJIWEB-383] change credential supported type fetching to well known property from credential issuer (#196) Signed-off-by: Challa Rao <47347156+challabeehyv@users.noreply.github.com> --- .../java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index f24e12099..17445870b 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -144,7 +144,7 @@ public IssuerSupportedCredentialsResponse getCredentialsSupported(String issuerI IssuerDTO issuerDto = issuerConfigResp.get(); // Get credential supported types from well known endpoint - CredentialIssuerWellKnownResponse response = restApiClient.getApi(issuerDto.getCredential_issuer(), CredentialIssuerWellKnownResponse.class); + CredentialIssuerWellKnownResponse response = restApiClient.getApi(issuerDto.getWellKnownEndpoint(), CredentialIssuerWellKnownResponse.class); if (response == null) { response = getCredentialWellKnownFromJson(); } From 37435fbc77ccb16dc15942464f65b9a9a8e2150c Mon Sep 17 00:00:00 2001 From: Challa Rao <47347156+challabeehyv@users.noreply.github.com> Date: Tue, 23 Apr 2024 14:14:32 +0530 Subject: [PATCH 132/860] [INJIWEB-383] add api call to fetch credential types from well known end poing in download VC (#198) * [INJIWEB-383] add api call to fetch credential types from well known in download VC Signed-off-by: Challarao * [INJIWEB-383] removed reading wellknown from static json Signed-off-by: Challarao --- .../io/mosip/mimoto/controller/IssuersController.java | 9 ++++++++- .../java/io/mosip/mimoto/service/IssuersService.java | 3 --- .../mosip/mimoto/service/impl/IssuersServiceImpl.java | 11 +---------- .../mosip/mimoto/controller/InjiControllerTest.java | 6 +++++- .../io/mosip/mimoto/service/IssuersServiceTest.java | 10 ++++------ 5 files changed, 18 insertions(+), 21 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/IssuersController.java b/src/main/java/io/mosip/mimoto/controller/IssuersController.java index ddd487fb5..df051364d 100644 --- a/src/main/java/io/mosip/mimoto/controller/IssuersController.java +++ b/src/main/java/io/mosip/mimoto/controller/IssuersController.java @@ -12,6 +12,7 @@ import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.service.IssuersService; import io.mosip.mimoto.util.DateUtils; +import io.mosip.mimoto.util.RestApiClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -36,6 +37,9 @@ public class IssuersController { @Autowired IssuersService issuersService; + @Autowired + private RestApiClient restApiClient; + private static final String defaultLanguageConstant = "en"; private static final String ID = "mosip.mimoto.issuers"; @@ -124,7 +128,10 @@ public ResponseEntity generatePdfForVC(@RequestHeader("Bearer") String token, try{ IssuerDTO issuerConfig = issuersService.getIssuerConfig(issuerId); - CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = issuersService.getCredentialWellKnownFromJson(); + CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = restApiClient.getApi(issuerConfig.getWellKnownEndpoint(), CredentialIssuerWellKnownResponse.class); + if (credentialIssuerWellKnownResponse == null) { + throw new ApiNotAccessibleException(); + } Optional credentialsSupportedResponse = credentialIssuerWellKnownResponse.getCredentialsSupported().stream() .filter(credentialsSupported -> credentialsSupported.getId().equals(credentialType)) .findFirst(); diff --git a/src/main/java/io/mosip/mimoto/service/IssuersService.java b/src/main/java/io/mosip/mimoto/service/IssuersService.java index 8aa011765..aa4f1776f 100644 --- a/src/main/java/io/mosip/mimoto/service/IssuersService.java +++ b/src/main/java/io/mosip/mimoto/service/IssuersService.java @@ -2,7 +2,6 @@ import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.IssuersDTO; -import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; import io.mosip.mimoto.dto.mimoto.CredentialsSupportedResponse; import io.mosip.mimoto.dto.mimoto.IssuerSupportedCredentialsResponse; import io.mosip.mimoto.exception.ApiNotAccessibleException; @@ -20,8 +19,6 @@ public interface IssuersService { IssuerSupportedCredentialsResponse getCredentialsSupported(String issuerId, String search) throws ApiNotAccessibleException, IOException; - CredentialIssuerWellKnownResponse getCredentialWellKnownFromJson() throws IOException, ApiNotAccessibleException; - ByteArrayInputStream generatePdfForVerifiableCredentials(String accessToken, IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String credentialEndPoint) throws Exception; diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index 17445870b..2cd7c1772 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -146,7 +146,7 @@ public IssuerSupportedCredentialsResponse getCredentialsSupported(String issuerI // Get credential supported types from well known endpoint CredentialIssuerWellKnownResponse response = restApiClient.getApi(issuerDto.getWellKnownEndpoint(), CredentialIssuerWellKnownResponse.class); if (response == null) { - response = getCredentialWellKnownFromJson(); + throw new ApiNotAccessibleException(); } List issuerCredentialsSupported = response.getCredentialsSupported(); credentialTypesWithAuthorizationEndpoint.setAuthorizationEndPoint(issuerDto.getAuthorization_endpoint()); @@ -165,15 +165,6 @@ public IssuerSupportedCredentialsResponse getCredentialsSupported(String issuerI return credentialTypesWithAuthorizationEndpoint; } - @Override - public CredentialIssuerWellKnownResponse getCredentialWellKnownFromJson() throws IOException, ApiNotAccessibleException { - String credentialsSupportedResponseJson = utilities.getCredentialsSupportedConfigJsonValue(); - if (credentialsSupportedResponseJson == null){ - throw new ApiNotAccessibleException(); - } - return new Gson().fromJson(credentialsSupportedResponseJson, CredentialIssuerWellKnownResponse.class); - } - @Override public ByteArrayInputStream generatePdfForVerifiableCredentials(String accessToken, IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String credentialEndPoint) throws Exception { LinkedHashMap vcPropertiesFromWellKnown = new LinkedHashMap<>(); diff --git a/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java b/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java index 8b121a9a0..999ada704 100644 --- a/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java @@ -28,6 +28,7 @@ import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.ArgumentMatchers; import org.mockito.InjectMocks; import org.mockito.Mockito; import org.powermock.core.classloader.annotations.PrepareForTest; @@ -79,6 +80,9 @@ public class InjiControllerTest { @MockBean private IssuersServiceImpl issuersService; + @MockBean + public RestApiClient restApiClient; + @Autowired private MockMvc mockMvc; @@ -231,7 +235,7 @@ public void generatePdfForVCTest() throws Exception { .thenReturn(getIssuerDTO("Issuer1")) .thenThrow(new ApiNotAccessibleException()); - Mockito.when(issuersService.getCredentialWellKnownFromJson()) + Mockito.when(restApiClient.getApi(ArgumentMatchers.any(String.class), ArgumentMatchers.any())) .thenReturn(getCredentialIssuerWellKnownResponseDto("Issuer1", List.of(getCredentialSupportedResponse("CredentialType1")))); diff --git a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java index afab8dba1..f8895ff6c 100644 --- a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java @@ -24,10 +24,10 @@ import java.io.IOException; import java.io.StringWriter; -import java.net.URI; import java.util.*; import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.any; @RunWith(MockitoJUnitRunner.class) @SpringBootTest @@ -124,9 +124,6 @@ static CredentialIssuerWellKnownResponse getCredentialIssuerWellKnownResponseDto public void setUp() throws Exception { IssuersDTO issuers = new IssuersDTO(); issuers.setIssuers(List.of(getIssuerDTO("Issuer1", Collections.emptyList()), getIssuerDTO("Issuer2", Collections.emptyList()))); - CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = getCredentialIssuerWellKnownResponseDto("Issuer1", - List.of(getCredentialSupportedResponse("CredentialSupported1"), getCredentialSupportedResponse("CredentialSupported2"))); - Mockito.when(utilities.getCredentialsSupportedConfigJsonValue()).thenReturn(new Gson().toJson(credentialIssuerWellKnownResponse)); Mockito.when(utilities.getIssuersConfigJsonValue()).thenReturn(new Gson().toJson(issuers)); } @@ -204,9 +201,8 @@ public void shouldReturnOnlyEnabledIssuers() throws IOException, ApiNotAccessibl @Test(expected = ApiNotAccessibleException.class) public void shouldThrowApiNotAccessibleExceptionWhenCredentialsSupportedJsonStringIsNullForGettingCredentialsSupportedList() throws Exception { - Mockito.when(utilities.getCredentialsSupportedConfigJsonValue()).thenReturn(null); + Mockito.when(restApiClient.getApi(any(String.class), any(Class.class))).thenReturn(null); issuersService.getCredentialsSupported("Issuer1id", null); - Mockito.when(restApiClient.getApi(Mockito.any(URI.class), Mockito.any(Class.class))).thenReturn(null); } @Test @@ -219,6 +215,8 @@ public void shouldReturnIssuerCredentialSupportedResponseForTheIssuerIdIfExist() expectedIssuerCredentialsSupported.setSupportedCredentials(credentialsSupportedResponses); expectedIssuerCredentialsSupported.setAuthorizationEndPoint(authorization_endpoint); + Mockito.when(restApiClient.getApi(any(String.class), any())).thenReturn(getCredentialIssuerWellKnownResponseDto("Issuer1", + List.of(getCredentialSupportedResponse("CredentialSupported1"), getCredentialSupportedResponse("CredentialSupported2")))); IssuerSupportedCredentialsResponse issuerSupportedCredentialsResponse = issuersService.getCredentialsSupported("Issuer1id", null); assertEquals(issuerSupportedCredentialsResponse, expectedIssuerCredentialsSupported); } From 28a7185b12ed3e0b9a9fcbdf9e8df53efa3cece9 Mon Sep 17 00:00:00 2001 From: mohanachandran-s <165888272+mohanachandran-s@users.noreply.github.com> Date: Tue, 23 Apr 2024 14:43:44 +0530 Subject: [PATCH 133/860] MOSIP-32363 (#197) Signed-off-by: Mohanachandran S --- apitest/pom.xml | 163 ++------------------------- apitest/testNgXmlFiles/mimotoApi.xml | 2 +- 2 files changed, 9 insertions(+), 156 deletions(-) diff --git a/apitest/pom.xml b/apitest/pom.xml index d67e643c6..5279ef86b 100644 --- a/apitest/pom.xml +++ b/apitest/pom.xml @@ -5,10 +5,10 @@ io.mosip.mimoto apitest-mimoto jar - automationtests-mimoto - Parent project of MOSIP functional tests - https://github.com/mosip/mosip-functional-tests - 1.2.0.1-SNAPSHOT + apitest-mimoto + Parent project of MOSIP mimoto apitests + https://github.com/mosip/mimoto + 1.2.1-java21-SNAPSHOT @@ -18,166 +18,19 @@ - scm:git:git://github.com/mosip/mosip-functional-tests.git - scm:git:ssh://github.com:mosip/mosip-functional-tests.git - https://github.com/mosip/mosip-functional-tests + scm:git:git://github.com/mosip/mimoto.git + scm:git:ssh://github.com:mosip/mimoto.git + https://github.com/mosip/mimoto HEAD - - - - - UTF-8 - - - 11 - 11 - 3.7.0 - 3.0.2 - 3.1.0 - 2.9 - 0.8.1 - 3.2 - 3.0.1 - 2.3 - false - 3.7.0.1746 - - 2.0.2.RELEASE - 2.0.7.RELEASE - 5.0.5.RELEASE - 2.0.0.RELEASE - - 2.0.7 - 1.5.20 - 2.9.2 - - 3.6.2 - 3.7.0 - - - - 1.2 - 3.0.0 - 1.3 - 2.2 - 2.0.1.Final - 2.2.6 - - - 1.4.197 - 5.1.46 - 42.2.2 - 2.5.0 - 6.0.12.Final - - - 1.10.19 - 1.7.4 - 2.0.0-beta.5 - - - 3.6.1 - 3.7 - 2.6 - 1.11 - 4.3 - 1.9.2 - 2.2 - 4.5.6 - 19.0 - 1.18.8 - 0.1.54 - 1.4.0 - 7.1.0 - 2.0.0 - 5.5.13 - 2.3.23 - 1.7 - 2.0 - 1.5.2 - 2.1.1 - 1.60 - 63.1 - 1.0.0 - 3.3.3 - 2.8.1 - 4.1.0-incubating - 1.11.368 - 0.2.4 - 2.3.0 - 3.0.1 - 1.9.12 - 0.6.0 - 2.0.0.AM2 - - - - - - - - 0.8.2 - 2.2 - 3.2 - UTF-8 - 3.7.0 - 3.0.1 - - - 1.1.6 - 1.7.19 - 1.10.19 - - - 1.4.6 - - - 5.0.6.RELEASE - - - 5.4.2.Final - - - 2.1.1 - - - 10.13.1.1 - - - 3.4.0 - - - 1.3.5 - - - 0.3.12 - - - 0.3.0 - - - 1.1.2-incubating - 1.2.0.1-B1 - 0.4.7 - 3.0.0 - 2.41.2 - 2.4.0 - 3.3.9 - 3.0.7 - 6.11 - 1.13 - automationtests-commons-1.2.0.1-SNAPSHOT-jar-with-dependencies - - io.mosip.testrig.apirig.automationtests.commons automationtests-commons - 1.2.0.1-SNAPSHOT + 1.2.1-java21-SNAPSHOT diff --git a/apitest/testNgXmlFiles/mimotoApi.xml b/apitest/testNgXmlFiles/mimotoApi.xml index e3b16cbdd..23e71fe70 100644 --- a/apitest/testNgXmlFiles/mimotoApi.xml +++ b/apitest/testNgXmlFiles/mimotoApi.xml @@ -5,7 +5,7 @@ - + From 9d5e9ea797322c166fcd5a95eb8d9737686b02c7 Mon Sep 17 00:00:00 2001 From: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> Date: Tue, 30 Apr 2024 17:20:48 +0530 Subject: [PATCH 134/860] resolved mimoto testrig build issues Signed-off-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> --- apitest/pom.xml | 210 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 207 insertions(+), 3 deletions(-) diff --git a/apitest/pom.xml b/apitest/pom.xml index d67e643c6..24a205021 100644 --- a/apitest/pom.xml +++ b/apitest/pom.xml @@ -5,7 +5,7 @@ io.mosip.mimoto apitest-mimoto jar - automationtests-mimoto + apitest-mimoto Parent project of MOSIP functional tests https://github.com/mosip/mosip-functional-tests 1.2.0.1-SNAPSHOT @@ -169,9 +169,213 @@ 3.0.7 6.11 1.13 - automationtests-commons-1.2.0.1-SNAPSHOT-jar-with-dependencies + apitests-mimoto-1.2.0.1-SNAPSHOT-jar-with-dependencies - + + + + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + + + attach-javadocs + + jar + + + + + none + + + + maven-compiler-plugin + 3.5.1 + + 11 + 11 + -Dfile.encoding=UTF-8 + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.2.0 + + none + + + + pl.project13.maven + git-commit-id-plugin + 3.0.1 + + + populate-git-commit-information + + revision + + + true + MM/dd/yyyy HH:mm:ss Z + 8 + true + ${project.build.outputDirectory}/git.properties + + + + + ${project.basedir}/.git + + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.5 + + + sign-artifacts + verify + + sign + + + + --pinentry-mode + loopback + + + + + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.4 + + + + shade + + + ${fileName} + + + + + + io.mosip.testrig.apirig.testrunner.MosipTestRunner + + + + + + *:* + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + + + + + + org.apache.maven.plugins + maven-jar-plugin + ${maven.jar.plugin.version} + + + + true + true + + + ${project.name} + ${project.version} + ${user.name} + ${os.name} + ${maven.build.timestamp} + ${env.BUILD_NUMBER} + ${env.BUILD_ID} + ${env.BUILD_URL} + + + + + + org.apache.maven.plugins + maven-war-plugin + ${maven.war.plugin.version} + + + + true + true + + + ${project.name} + ${project.version} + ${user.name} + ${os.name} + ${maven.build.timestamp} + ${env.BUILD_NUMBER} + ${env.BUILD_ID} + ${env.BUILD_URL} + + + + + + org.apache.maven.plugins + maven-source-plugin + 2.2.1 + + + attach-sources + + jar-no-fork + + + + + + org.apache.maven.plugins + maven-antrun-plugin + 3.0.0 + + + make-jar-executable + package + + run + + + + + + + + + + + + + + + From 957a4bab5006396391c3d2d57fb272b835b8b362 Mon Sep 17 00:00:00 2001 From: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> Date: Thu, 2 May 2024 11:56:03 +0530 Subject: [PATCH 135/860] Reverting the JAVA 21 upgrade (#200) Signed-off-by: Mohanachandran S --- apitest/pom.xml | 163 +++++++++++++++++++++++++-- apitest/testNgXmlFiles/mimotoApi.xml | 2 +- 2 files changed, 156 insertions(+), 9 deletions(-) diff --git a/apitest/pom.xml b/apitest/pom.xml index 5279ef86b..d67e643c6 100644 --- a/apitest/pom.xml +++ b/apitest/pom.xml @@ -5,10 +5,10 @@ io.mosip.mimoto apitest-mimoto jar - apitest-mimoto - Parent project of MOSIP mimoto apitests - https://github.com/mosip/mimoto - 1.2.1-java21-SNAPSHOT + automationtests-mimoto + Parent project of MOSIP functional tests + https://github.com/mosip/mosip-functional-tests + 1.2.0.1-SNAPSHOT @@ -18,19 +18,166 @@ - scm:git:git://github.com/mosip/mimoto.git - scm:git:ssh://github.com:mosip/mimoto.git - https://github.com/mosip/mimoto + scm:git:git://github.com/mosip/mosip-functional-tests.git + scm:git:ssh://github.com:mosip/mosip-functional-tests.git + https://github.com/mosip/mosip-functional-tests HEAD + + + + + UTF-8 + + + 11 + 11 + 3.7.0 + 3.0.2 + 3.1.0 + 2.9 + 0.8.1 + 3.2 + 3.0.1 + 2.3 + false + 3.7.0.1746 + + 2.0.2.RELEASE + 2.0.7.RELEASE + 5.0.5.RELEASE + 2.0.0.RELEASE + + 2.0.7 + 1.5.20 + 2.9.2 + + 3.6.2 + 3.7.0 + + + + 1.2 + 3.0.0 + 1.3 + 2.2 + 2.0.1.Final + 2.2.6 + + + 1.4.197 + 5.1.46 + 42.2.2 + 2.5.0 + 6.0.12.Final + + + 1.10.19 + 1.7.4 + 2.0.0-beta.5 + + + 3.6.1 + 3.7 + 2.6 + 1.11 + 4.3 + 1.9.2 + 2.2 + 4.5.6 + 19.0 + 1.18.8 + 0.1.54 + 1.4.0 + 7.1.0 + 2.0.0 + 5.5.13 + 2.3.23 + 1.7 + 2.0 + 1.5.2 + 2.1.1 + 1.60 + 63.1 + 1.0.0 + 3.3.3 + 2.8.1 + 4.1.0-incubating + 1.11.368 + 0.2.4 + 2.3.0 + 3.0.1 + 1.9.12 + 0.6.0 + 2.0.0.AM2 + + + + + + + + 0.8.2 + 2.2 + 3.2 + UTF-8 + 3.7.0 + 3.0.1 + + + 1.1.6 + 1.7.19 + 1.10.19 + + + 1.4.6 + + + 5.0.6.RELEASE + + + 5.4.2.Final + + + 2.1.1 + + + 10.13.1.1 + + + 3.4.0 + + + 1.3.5 + + + 0.3.12 + + + 0.3.0 + + + 1.1.2-incubating + 1.2.0.1-B1 + 0.4.7 + 3.0.0 + 2.41.2 + 2.4.0 + 3.3.9 + 3.0.7 + 6.11 + 1.13 + automationtests-commons-1.2.0.1-SNAPSHOT-jar-with-dependencies + + io.mosip.testrig.apirig.automationtests.commons automationtests-commons - 1.2.1-java21-SNAPSHOT + 1.2.0.1-SNAPSHOT diff --git a/apitest/testNgXmlFiles/mimotoApi.xml b/apitest/testNgXmlFiles/mimotoApi.xml index 23e71fe70..e3b16cbdd 100644 --- a/apitest/testNgXmlFiles/mimotoApi.xml +++ b/apitest/testNgXmlFiles/mimotoApi.xml @@ -5,7 +5,7 @@ - + From 7c25ccbec5fb3fde57d2c7d07a9dcd08aed0695d Mon Sep 17 00:00:00 2001 From: techno-376 Date: Thu, 2 May 2024 18:35:10 +0530 Subject: [PATCH 136/860] [DSD-4849] updated chart version to 0.0.1-SNAPSHOT Signed-off-by: techno-376 --- helm/mimoto/Chart.yaml | 2 +- helm/mimoto/install.sh | 2 +- partner-onboarder/install.sh | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/helm/mimoto/Chart.yaml b/helm/mimoto/Chart.yaml index 6062a8dcb..8049ee631 100644 --- a/helm/mimoto/Chart.yaml +++ b/helm/mimoto/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 name: mimoto description: A Helm chart for MOSIP mimoto Application type: application -version: 12.0.2 +version: 0.0.1-develop appVersion: "" dependencies: - name: common diff --git a/helm/mimoto/install.sh b/helm/mimoto/install.sh index 35eba4287..26efa5896 100755 --- a/helm/mimoto/install.sh +++ b/helm/mimoto/install.sh @@ -7,7 +7,7 @@ if [ $# -ge 1 ] ; then fi NS=mimoto -MIMOTO_CHART_VERSION=12.0.2 +MIMOTO_CHART_VERSION=0.0.1-develop echo Create $NS namespace kubectl create ns $NS diff --git a/partner-onboarder/install.sh b/partner-onboarder/install.sh index a9ef4bd6a..25a43a356 100755 --- a/partner-onboarder/install.sh +++ b/partner-onboarder/install.sh @@ -21,7 +21,7 @@ if [ "$flag" = "n" ]; then fi NS=mimoto -CHART_VERSION=12.0.2 +CHART_VERSION=0.0.1-develop echo Create $NS namespace kubectl create ns $NS From b338994e61a58654f5234da11d051d5da31cd96d Mon Sep 17 00:00:00 2001 From: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> Date: Fri, 3 May 2024 14:20:07 +0530 Subject: [PATCH 137/860] MOSIP-30868 Artifact id updated Signed-off-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> --- apitest/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apitest/pom.xml b/apitest/pom.xml index 24a205021..6498b5e40 100644 --- a/apitest/pom.xml +++ b/apitest/pom.xml @@ -380,7 +380,7 @@ io.mosip.testrig.apirig.automationtests.commons - automationtests-commons + apitest-commons 1.2.0.1-SNAPSHOT From b53e8c3b0139024068b513588bf6d7a3581995ce Mon Sep 17 00:00:00 2001 From: Vijay Kumar S <94220135+vijay151096@users.noreply.github.com> Date: Fri, 3 May 2024 15:35:05 +0530 Subject: [PATCH 138/860] [INJIWEB-399]: modify the credential template to mimic injimobile details view (#207) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- docker-compose.yml | 23 ++ .../config/mimoto-default.properties | 256 ++++++++++++++++++ .../config/mimoto-issuers-config.json | 231 ++++++++++++++++ docker-compose/config/oidckeystore.p12 | Bin 0 -> 4540 bytes .../loader_path/kernel-auth-adapter.jar | 0 .../service/impl/IssuersServiceImpl.java | 17 +- .../templates/CredentialTemplate.html | 77 +++--- 7 files changed, 553 insertions(+), 51 deletions(-) create mode 100644 docker-compose.yml create mode 100644 docker-compose/config/mimoto-default.properties create mode 100644 docker-compose/config/mimoto-issuers-config.json create mode 100644 docker-compose/config/oidckeystore.p12 create mode 100644 docker-compose/loader_path/kernel-auth-adapter.jar diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 000000000..29ef83220 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,23 @@ +version: '3.8' + +services: + mimoto-service: + container_name: 'Mimoto-Service' + image: 'mosip/mimoto:auth' + user: root + ports: + - 8088:8088 + expose: + - 8088 + environment: + - artifactory_url_env=http://artifactory-server:8080/ + - container_user=mosip + - active_profile_env=default + - SPRING_CONFIG_NAME=mimoto + - SPRING_CONFIG_LOCATION=/home/mosip/ + volumes: + - ./docker-compose/config/mimoto-default.properties:/home/mosip/mimoto-default.properties + - ./docker-compose/config/oidckeystore.p12:/home/mosip/certs/oidckeystore.p12 + - ./docker-compose/loader_path/:/home/mosip/additional_jars/ + restart: always + diff --git a/docker-compose/config/mimoto-default.properties b/docker-compose/config/mimoto-default.properties new file mode 100644 index 000000000..b032d43bd --- /dev/null +++ b/docker-compose/config/mimoto-default.properties @@ -0,0 +1,256 @@ + +# START bootstrap.properties + +spring.cloud.config.uri=localhost +spring.cloud.config.label=develop +spring.profiles.active=local +spring.cloud.config.name=mimoto,inji +spring.application.name=mimoto + +management.endpoint.health.show-details=always +management.endpoints.web.exposure.include=info,health,refresh + +server.port=8088 +server.servlet.context-path=/v1/mimoto +health.config.enabled=false + +openapi.info.title=${spring.application.name} +openapi.info.description=${spring.application.name} +openapi.info.version=1.0 +openapi.info.license.name=Mosip +openapi.info.license.url=https://docs.mosip.io/platform/license +openapi.service.servers[0].url=${mosipbox.public.url}${server.servlet.context-path} +openapi.service.servers[0].description=${spring.application.name} +openapi.group.name=${openapi.info.title} +openapi.group.paths[0]=/** +springdoc.swagger-ui.disable-swagger-default-url=true +springdoc.swagger-ui.tagsSorter=alpha +springdoc.swagger-ui.operationsSorter=alpha + + +# END bootstrap.properties + +# MOSIP +mosipbox.public.url=https://api-internal.dev1.mosip.net +public.internet.url=https://api.dev1.mosip.net +public.url=https://api-internal.dev1.mosip.net +keycloak.internal.url=https://iam.dev1.mosip.net/ + +# Resident service +mosip.resident.base.url=${mosipbox.public.url}/resident/v1 + +RESIDENT_OTP=${mosip.resident.base.url}/req/otp +RESIDENT_INDIVIDUALID_OTP=${mosip.resident.base.url}/individualId/otp +RESIDENT_AID_GET_INDIVIDUALID=${mosip.resident.base.url}/aid/status +#RESIDENT_INDIVIDUALID_OTP=https://api-internal.dev2.mosip.net/resident/v1/req/individualId/otp +RESIDENT_CREDENTIAL_REQUEST=${mosip.resident.base.url}/req/credential +RESIDENT_CREDENTIAL_REQUEST_STATUS=${RESIDENT_CREDENTIAL_REQUEST}/status +RESIDENT_VID=${mosip.resident.base.url}/vid +RESIDENT_AUTH_LOCK=${mosip.resident.base.url}/req/auth-lock +RESIDENT_AUTH_UNLOCK=${mosip.resident.base.url}/req/auth-unlock +BINDING_OTP=${public.internet.url}/v1/esignet/binding/binding-otp +WALLET_BINDING=${public.internet.url}/v1/esignet/binding/wallet-binding +mosip.authmanager.url=${mosipbox.public.url}/v1/authmanager/authenticate/clientidsecretkey + +# Mimoto mobileid backend +credential.template=template.json +credential.sample=sample_credential.json +credential.data.path=data +safetynet.api.key= +safetynet.api.url=https://www.googleapis.com/androidcheck/v1/attestations/verify?key=${safetynet.api.key} + +registration.processor.print.textfile=registration-processor-print-text-file.json +# Websub + +# Localhost websub +# mosip.event.hubUrl=http://localhost:9191/websub +# mosip.event.hub.subUrl=${mosip.event.hubUrl}/hub +# mosip.event.hub.pubUrl=${mosip.event.hubUrl}/publish + +# Dev sandbox +mosip.event.hubUrl=${mosipbox.public.url}/hub/ +mosip.event.hub.subUrl=${mosip.event.hubUrl} +mosip.event.hub.pubUrl=${mosip.event.hubUrl} + + +# MOSIP partner + +mosip.partner.id=mpartner-default-mobile +mosip.partner.crypto.p12.filename=keystore.p12 +mosip.partner.crypto.p12.password=abc123 +mosip.partner.crypto.p12.alias=partner +mosip.partner.encryption.key=123456 + +mosip.partner.prependThumbprint=true + +mosip.datashare.partner.id=mpartner-default-resident +mosip.datashare.policy.id=mpolicy-default-resident +mosip.event.callBackUrl=${public.url}/credentialshare/callback/notify +mosip.event.topic=${mosip.partner.id}/CREDENTIAL_ISSUED +mosip.event.secret=Kslk30SNF2AChs2 +csrf.disabled=true +# Delayed websub subscription. Default is 5 seconds in ms. +mosip.event.delay-millisecs=5000 +# Websub re-subscription workaround for losing subscribed topic when MOSIP websub update or restart. Default is 5 minutes in ms. +websub-resubscription-delay-millisecs=300000 + +#-------------TOKEN GENERATION---------------- +#Token generation request id +token.request.id=io.mosip.registration.processor +#Token generation app id +token.request.appid=regproc +#Token generation username +token.request.username=registrationprocessor +#Token generation password +token.request.password=abc123 +#Token generation version +token.request.version=1.0 +#Token generation Client Id +token.request.clientId=mosip-regproc-client +#Token generation secret key +token.request.secretKey=abc123 +#Token generation issuer url +token.request.issuerUrl=${keycloak.internal.url}/auth/realms/mosip + +#Audit Service +AUDIT=${mosipbox.public.url}/v1/auditmanager/audits +AUDIT_URL=${mosipbox.public.url}/v1/auditmanager/audits +KEYBASEDTOKENAPI=${mosipbox.public.url}/v1/authmanager/authenticate/clientidsecretkey + +#Master Data Services +# MASTER=http://kernel-masterdata-service/v1/masterdata +MASTER=${mosipbox.public.url}/v1/masterdata +TEMPLATES=${MASTER}/templates + +#Packet receiver application version +mosip.print.application.version=1.0 +#Request Date Time format +mosip.print.datetime.pattern=yyyy-MM-dd'T'HH:mm:ss.SSS'Z' + + +#-------------Printing Service-------------------- +mosip.print.service.id=mosip.print + +#Audit request id +mosip.print.audit.id=mosip.applicanttype.getApplicantType +mosip.country.code=MOR + +#Kernel Crypto signature +registration.processor.signature.isEnabled=true + +# Language Supported By Platform - ISO +mosip.supported-languages=eng,ara,fra + +mosip.template-language=eng +mosip.optional-languages=fra,ara +mosip.mandatory-languages=eng + +# mosip.primary-language=eng +# mosip.secondary-language=ara + +#----------------------- CBEFF Util-------------------------------------------------- +# Cbeff URL where the files will be stored in git, change it accordingly in case of change of storage location. +# mosip.kernel.xsdstorage-uri=${spring.cloud.config.uri}/${spring.application.name}/${spring.profiles.active}/${spring.cloud.config.label}/ +mosip.kernel.xsdstorage-uri=https://raw.githubusercontent.com/mosip/mosip-config/qa-1201-B2/ +# Cbeff XSD file name in config server +mosip.kernel.xsdfile=mosip-cbeff.xsd + +#----------------------------- Applicant Type -------------------------------------------------- +mosip.kernel.applicant.type.age.limit = 5 + +#----------------------------- Static PIN -------------------------------------------------- +mosip.kernel.pin.length=6 + +#-----------------------------TOKEN-ID Properties--------------------------------- +#length of the token id +mosip.kernel.tokenid.length=36 + +# log level +logging.level.root=WARN +logging.level.io.mosip=INFO +# logging.level.io.mosip.kernel.auth.defaultadapter.filter=INFO +logging.level.io.mosip.kernel.auth.defaultadapter=DEBUG +logging.level.org.springframework.http.client=DEBUG +logging.level.io.mosip.mimoto=INFO +logging.level.reactor.netty.http.client=INFO +# tomcat access logs +server.tomcat.accesslog.enabled=true +server.tomcat.accesslog.directory=/dev +server.tomcat.accesslog.prefix=stdout +server.tomcat.accesslog.buffered=false +server.tomcat.accesslog.suffix= +server.tomcat.accesslog.file-date-format= +server.tomcat.accesslog.pattern={"@timestamp":"%{yyyy-MM-dd'T'HH:mm:ss.SSS'Z'}t","level":"ACCESS","level_value":70000,"traceId":"%{X-B3-TraceId}i","appId":"%{X-AppId}i","statusCode":%s,"req.requestURI":"%U","bytesSent":%b,"timeTaken":%T,"appName":"${spring.application.name}"} +server.tomcat.accesslog.className=io.mosip.kernel.core.logger.config.SleuthValve +registration.processor.unMaskedUin.length=5 + +IDSchema.Version=1.0 +registration.processor.identityjson=identity-mapping.json +registration.processor.demographic.identity=identity +CREATEDATASHARE=${mosipbox.public.url}/v1/datashare/create +DECRYPTPINBASSED=${mosipbox.public.url}/v1/keymanager/decryptWithPin + +# config.server.file.storage.uri=${spring.cloud.config.uri}/${spring.application.name}/${spring.profiles.active}/${spring.cloud.config.label}/ +config.server.file.storage.uri=${mosipbox.public.url}/config/print/mz/develop/ + +# websub authentication - auth adapter +mosip.iam.adapter.clientid=mpartner-default-mobile + +#dev2 +#mosip.iam.adapter.clientsecret=mJQ3g1dPbonDFNW8 + +#dev1 +mosip.iam.adapter.clientsecret=WqzUI7CYDXw6DVTV + +#qa-inji +#mosip.iam.adapter.clientsecret=vl3ox2rvSeW78LzL + + +mosip.iam.adapter.appid=partner + +mosip.iam.adapter.issuerURL=${mosipbox.public.url}/auth/realms/mosip +mosip.authmanager.base-url=${mosipbox.public.url}/v1/authmanager +mosip.authmanager.client-token-endpoint=${mosip.authmanager.base-url}/authenticate/clientidsecretkey +auth.server.admin.validate.url=${mosip.authmanager.base-url}/v1/authmanager/authorize/admin/validateToken + + +# in minutes +mosip.iam.adapter.validate-expiry-check-rate=1440 + +# in minutes +mosip.iam.adapter.renewal-before-expiry-interval=1440 + +#this should be false if you don’t use this restTemplate true if you do + +auth.server.admin.issuer.uri=${keycloak.internal.url}/auth/realms/ +mosip.iam.adapter.self-token-renewal-enable=true +mosip.auth.filter_disable=false +mosip.auth.adapter.impl.basepackage=io.mosip.kernel.auth.defaultadapter +mosip.kernel.auth.appids.realm.map={prereg:'mosip',ida:'mosip',registrationclient:'mosip',regproc:'mosip',partner:'mosip',resident:'mosip',admin:'mosip',crereq:'mosip',creser:'mosip',datsha:'mosip',idrepo:'mosip'} +wallet.binding.partner.id=mpartner-default-keybindingtoken +wallet.binding.partner.api.key=Aci9jg28B8mO_LDfDXo3ZTp5_HKgEMun2tYyHCa1e8k +#wallet.binding.partner.id=mpartner-default-mimotobinding +#wallet.binding.partner.api.key=14378 + +# OpenID +mosip.openid.issuers=mimoto-issuers-config.json +mosip.openid.issuer.credentialSupported=/wellKnownIssuer/Insurance.json +mosip.openid.htmlTemplate=CredentialTemplate.html +#configurations related to openid4vc +mosip.oidc.client.assertion.type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer +mosip.oidc.p12.filename=oidckeystore.p12 +mosip.oidc.p12.password=5YBx6QT2wbY8Ls6w +mosip.oidc.p12.path=certs/ + + + + + + + + + + + + + diff --git a/docker-compose/config/mimoto-issuers-config.json b/docker-compose/config/mimoto-issuers-config.json new file mode 100644 index 000000000..a75aa68b2 --- /dev/null +++ b/docker-compose/config/mimoto-issuers-config.json @@ -0,0 +1,231 @@ +{ + "issuers": [ + { + "credential_issuer": "Mosip", + "display": [ + { + "name": "UIN, VID, AID", + "logo": { + "url": "https://mosip.io/images/footer/foot-logo-b.png", + "alt_text": "mosip logo" + }, + "title": "Download MOSIP Credentials via OTP", + "description":"Download credentials by providing UIN, VID or AID", + "language": "en" + }, + { + "name": "UIN, VID, AID", + "logo": { + "url": "https://mosip.io/images/footer/foot-logo-b.png", + "alt_text": "شعار موسيب" + }, + "title": "قم بتنزيل بيانات اعتماد MOSIP عبر OTP", + "description": "قم بتنزيل بيانات الاعتماد من خلال توفير UIN أو VID أو AID", + "language": "ar" + }, + { + "name": "UIN, VID, AID", + "logo": { + "url": "https://mosip.io/images/footer/foot-logo-b.png", + "alt_text": "मोसिप लोगो" + }, + "title": "OTP के माध्यम से MOSIP क्रेडेंशियल डाउनलोड करें", + "description":"यूआईएन, वीआईडी या एआईडी प्रदान करके क्रेडेंशियल डाउनलोड करें", + "language": "hi" + }, + { + "name": "UIN, VID, AID", + "logo": { + "url": "https://mosip.io/images/footer/foot-logo-b.png", + "alt_text": "mosip ಲೋಗೋ" + }, + "title": "OTP ಮೂಲಕ MOSIP ರುಜುವಾತುಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿ", + "description": "UIN, VID ಅಥವಾ AID ಒದಗಿಸುವ ಮೂಲಕ ರುಜುವಾತುಗಳನ್ನು ಡೌನ್\u200Cಲೋಡ್ ಮಾಡಿ", + "language": "kn" + }, + { + "name": "UIN, VID, AID", + "logo": { + "url": "https://mosip.io/images/footer/foot-logo-b.png", + "alt_text": "mosip சின்னம்" + }, + "title": "OTP வழியாக MOSIP சான்றுகளைப் பதிவிறக்கவும்", + "description":"UIN, VID அல்லது AID ஐ வழங்குவதன் மூலம் நற்சான்றிதழ்களைப் பதிவிறக்கவும்", + "language": "ta" + }, + { + "name": "UIN, VID, AID", + "logo": { + "url": "https://mosip.io/images/footer/foot-logo-b.png", + "alt_text": "logo ng mosip" + }, + "title": "I-download ang Mga Kredensyal ng MOSIP sa pamamagitan ng OTP", + "description":"Mag-download ng mga kredensyal sa pamamagitan ng pagbibigay ng UIN, VID o AID", + "language": "fil" + } + ], + "protocol": "OTP", + "enabled": "true" + }, + { + "credential_issuer": "ESignet", + "display": [ + { + "name": "e-Signet", + "logo": { + "url": "https://mosip.io/images/footer/foot-logo-b.png", + "alt_text": "esignet-logo" + }, + "title": "Download MOSIP Credentials", + "description": "Download credentials by providing UIN or VID", + "language": "en" + }, + { + "name": "e-Signet", + "logo": { + "url": "https://mosip.io/images/footer/foot-logo-b.png", + "alt_text": "شعار موسيب" + }, + "title": "قم بتنزيل بيانات اعتماد MOSIP", + "description": "توفير UIN أو VIDقم بتنزيل بيانات الاعتماد عن طريق" , + "language": "ar" + }, + { + "name": "e-Signet", + "logo": { + "url": "https://mosip.io/images/footer/foot-logo-b.png", + "alt_text": "मोसिप लोगो" + }, + "title": "MOSIP क्रेडेंशियल डाउनलोड करेंं", + "description":"यूआईएन या वीआईडी प्रदान करके क्रेडेंशियल डाउनलोड करें", + "language": "hi" + }, + { + "name": "e-Signet", + "logo": { + "url": "https://mosip.io/images/footer/foot-logo-b.png", + "alt_text": "mosip ಲೋಗೋ" + }, + "title": "MOSIP ರುಜುವಾತುಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿ", + "description": "UIN ಅಥವಾ VID ಒದಗಿಸುವ ಮೂಲಕ ರುಜುವಾತುಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿ", + "language": "kn" + }, + { + "name": "e-Signet", + "logo": { + "url": "https://mosip.io/images/footer/foot-logo-b.png", + "alt_text": "mosip லோகோ" + }, + "title": "MOSIP சான்றுகளைப் பதிவிறக்கவும்", + "description":"UIN அல்லது VIDஐ வழங்குவதன் மூலம் நற்சான்றிதழ்களைப் பதிவிறக்கவும்", + "language": "ta" + }, + { + "name": "e-Signet", + "logo": { + "url": "https://mosip.io/images/footer/foot-logo-b.png", + "alt_text": "logo ng mosip" + }, + "title": "I-download ang Mga Kredensyal ng MOSIP", + "description":"Mag-download ng mga kredensyal sa pamamagitan ng pagbibigay ng UIN o VID", + "language": "fil" + } + ], + "protocol": "OpenId4VCI", + "client_id": "${mimoto.oidc.partner.clientid}", + "client_alias": "mpartner-default-mimotooidc", + "scopes_supported": ["mosip_identity_vc_ldp"], + "additional_headers": { "Accept": "application/json" }, + ".well-known": "https://${mosip.esignet.host}/.well-known/openid-credential-issuer", + "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", + "authorization_endpoint": "https://${mosip.esignet.host}/authorize", + "authorization_audience": "https://${mosip.esignet.host}/v1/esignet/oauth/v2/token", + "token_endpoint": "https://${mosip.api.public.host}/residentmobileapp/get-token/ESignet", + "proxy_token_endpoint": "https://${mosip.api.public.host}/v1/esignet/oauth/v2/token", + "credential_endpoint": "https://${mosip.api.public.host}/v1/esignet/vci/credential", + "credential_type": ["VerifiableCredential", "MOSIPVerifiableCredential"], + "credential_audience": "https://${mosip.esignet.host}/v1/esignet", + "enabled": "false" + }, + { + "credential_issuer": "Sunbird", + "display": [ + { + "name": "Sunbird RC Insurance Verifiable Credential", + "logo": { + "url": "https://sunbird.org/images/sunbird-logo-new.png", + "alt_text": "a square logo of a Sunbird" + }, + "language": "en", + "title": "Download Sunbird Credentials", + "description": "Download credentials with your Policy Number" + }, + { + "name": "بيانات الاعتماد التي يمكن التحقق منها للتأمين Sunbird RC", + "logo": { + "url": "https://sunbird.org/images/sunbird-logo-new.png", + "alt_text": "شعار مربع لطائر الشمس" + }, + "language": "ar", + "title": "قم بتنزيل بيانات اعتماد Sunbird", + "description": "قم بتنزيل بيانات الاعتماد باستخدام رقم السياسة الخاص بك" + }, + { + "name": "सनबर्ड आरसी बीमा सत्यापन योग्य क्रेडेंशियल", + "logo": { + "url": "https://sunbird.org/images/sunbird-logo-new.png", + "alt_text": "सनबर्ड का एक चौकोर लोगो" + }, + "language": "hi", + "title": "सनबर्ड क्रेडेंशियल्स डाउनलोड करेंं", + "description": "अपने पॉलिसी नंबर के साथ क्रेडेंशियल डाउनलोड करें" + }, + { + "name": "ಸನ್ಬರ್ಡ್ ಆರ್ಸಿ ವಿಮೆ ಪರಿಶೀಲಿಸಬಹುದಾದ ರುಜುವಾತು", + "logo": { + "url": "https://sunbird.org/images/sunbird-logo-new.png", + "alt_text": "ಸನ್ ಬರ್ಡ್ ನ ಚೌಕಾಕಾರದ ಲೋಗೋ" + }, + "language": "kn", + "title": "ಸನ್ಬರ್ಡ್ ರುಜುವಾತುಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿ", + "description": "ನಿಮ್ಮ ಪಾಲಿಸಿ ಸಂಖ್ಯೆಯೊಂದಿಗೆ ರುಜುವಾತುಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿ" + }, + { + "name": "Sunbird RC இன்சூரன்ஸ் சரிபார்க்கக்கூடிய நற்சான்றிதழ்", + "logo": { + "url": "https://sunbird.org/images/sunbird-logo-new.png", + "alt_text": "சூரிய பறவையின் சதுர சின்னம்" + }, + "language": "ta", + "title": "Sunbird சான்றுகளைப் பதிவிறக்கவும்", + "description": "உங்கள் பாலிசி எண்ணுடன் நற்சான்றிதழ்களைப் பதிவிறக்கவும்" + }, + { + "name": "Kredensyal na Nabe-verify ng Sunbird RC Insurance", + "logo": { + "url": "https://sunbird.org/images/sunbird-logo-new.png", + "alt_text": "isang parisukat na logo ng isang Sunbird" + }, + "language": "fil", + "title": "I-download ang Mga Kredensyal ng Sunbird", + "description": "Mag-download ng mga kredensyal gamit ang iyong Numero ng Patakaran" + } + ], + "protocol": "OpenId4VCI", + "client_id": "${mimoto.oidc.sunbird.partner.clientid}", + "client_alias": "esignet-sunbird-partner", + "scopes_supported": ["sunbird_rc_insurance_vc_ldp"], + "additional_headers": { "Accept": "application/json" }, + ".well-known": "https://vijay151096.github.io/did-testing/openid-credential-issuer.json", + "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", + "authorization_endpoint": "https://${mosip.esignet.mock.host}/authorize", + "authorization_audience": "https://${mosip.esignet.mock.host}/v1/esignet/oauth/v2/token", + "token_endpoint": "https://${mosip.api.public.host}/residentmobileapp/get-token/Sunbird", + "proxy_token_endpoint": "https://${mosip.esignet.mock.host}/v1/esignet/oauth/v2/token", + "credential_endpoint": "https://${mosip.esignet.mock.host}/v1/esignet/vci/credential", + "credential_type": ["VerifiableCredential", "InsuranceCredential"], + "credential_audience": "https://${mosip.esignet.mock.host}/v1/esignet", + "enabled": "false" + } + ] +} diff --git a/docker-compose/config/oidckeystore.p12 b/docker-compose/config/oidckeystore.p12 new file mode 100644 index 0000000000000000000000000000000000000000..92e794eb7d4fa586f6cdc686394475014b55f84d GIT binary patch literal 4540 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 D{pE6a literal 0 HcmV?d00001 diff --git a/docker-compose/loader_path/kernel-auth-adapter.jar b/docker-compose/loader_path/kernel-auth-adapter.jar new file mode 100644 index 000000000..e69de29bb diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index 2cd7c1772..03735b1b3 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -211,26 +211,25 @@ private ByteArrayInputStream getPdfResourceFromVcProperties(LinkedHashMap data = new HashMap<>(); - LinkedHashMap headerProperties = new LinkedHashMap<>(); LinkedHashMap rowProperties = new LinkedHashMap<>(); - //Assigning two properties at the top of pdf and the rest dynamically below them displayProperties.entrySet().stream() .forEachOrdered(entry -> { - if (headerProperties.size() < 2) { - headerProperties.put(entry.getKey(), entry.getValue()); + if(entry.getValue() instanceof Map) { + rowProperties.put(entry.getKey(), ((Map) entry.getValue()).get("value")); + } else if(entry.getValue() instanceof List) { + String value = (String) ((Map)((List) entry.getValue()).get(0)).get("value"); + rowProperties.put(entry.getKey(), value ); } else { rowProperties.put(entry.getKey(), entry.getValue()); } }); - int rowPropertiesCount = rowProperties.size(); data.put("logoUrl", issuerLogoUrl); - data.put("headerProperties", headerProperties); + data.put("actorImg", issuerLogoUrl); data.put("rowProperties", rowProperties); - data.put("keyFontColor", textColor); - data.put("bgColor", backgroundColor); - data.put("rowPropertiesMargin", rowPropertiesCount % 2 == 0 ? (rowPropertiesCount/2 -1)*40 : (rowPropertiesCount/2)*40); //for adjusting the height in pdf for dynamic properties + data.put("textColor", textColor); + data.put("backgroundColor", backgroundColor); data.put("titleName", credentialSupportedType); String credentialTemplate = utilities.getCredentialSupportedTemplateString(); diff --git a/src/main/resources/templates/CredentialTemplate.html b/src/main/resources/templates/CredentialTemplate.html index b7a1e20a4..aa2f217e3 100644 --- a/src/main/resources/templates/CredentialTemplate.html +++ b/src/main/resources/templates/CredentialTemplate.html @@ -1,46 +1,39 @@ - - - - Identity Card - - - -
-
- $titleName -
-
-
- Logo -
-
- #foreach($entry in $headerProperties.entrySet()) -
-
$entry.key
-
$entry.value
+ + + Identity Card + + +
+
+
+ $titleName +
+
+
+
+ Logo +
+
+ Logo +
+
+
+ #foreach($entry in $rowProperties.entrySet()) + #if($entry.value) +
+
$entry.key
+
$entry.value
+
+ #end + #end +
+
+
+ +
- #end -
-
- -
-
-
- #foreach($entry in $rowProperties.entrySet()) - #if($entry.value) -
-
$entry.key
-
$entry.value
- #end - #end -
-
- Logo -
-
- - - \ No newline at end of file + + From 6cd52937a598462cfb1d719b0895d881af62074c Mon Sep 17 00:00:00 2001 From: Vijay Kumar S <94220135+vijay151096@users.noreply.github.com> Date: Fri, 3 May 2024 17:28:06 +0530 Subject: [PATCH 139/860] [INJIWEB-399]: handle array fields in credential (#209) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- .../mosip/mimoto/service/impl/IssuersServiceImpl.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index 03735b1b3..e8e6ba60d 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -218,15 +218,19 @@ private ByteArrayInputStream getPdfResourceFromVcProperties(LinkedHashMap) entry.getValue()).get("value")); } else if(entry.getValue() instanceof List) { - String value = (String) ((Map)((List) entry.getValue()).get(0)).get("value"); - rowProperties.put(entry.getKey(), value ); + String value = ""; + if( ((List) entry.getValue()).get(0) instanceof String) { + value = ((List) entry.getValue()).stream().reduce((field1, field2) -> field1 + ", " + field2 ).get(); + } else { + value = (String) ((Map) ((List) entry.getValue()).get(0)).get("value"); + } + rowProperties.put(entry.getKey(), value); } else { rowProperties.put(entry.getKey(), entry.getValue()); } }); data.put("logoUrl", issuerLogoUrl); - data.put("actorImg", issuerLogoUrl); data.put("rowProperties", rowProperties); data.put("textColor", textColor); data.put("backgroundColor", backgroundColor); From a242bae8f4c2e47ba1ee4a95059c74fe38cb881e Mon Sep 17 00:00:00 2001 From: VSIVAKALYAN Date: Mon, 6 May 2024 12:19:54 +0530 Subject: [PATCH 140/860] [DSD-5071] Setup for apitest-mimoto Signed-off-by: VSIVAKALYAN --- .github/workflows/push-trigger.yml | 62 ++++++++++++++++++++++++++++++ apitest/entrypoint.sh | 2 +- apitest/pom.xml | 19 ++++++--- 3 files changed, 76 insertions(+), 7 deletions(-) diff --git a/.github/workflows/push-trigger.yml b/.github/workflows/push-trigger.yml index d50a72c95..5a28a0da0 100644 --- a/.github/workflows/push-trigger.yml +++ b/.github/workflows/push-trigger.yml @@ -121,3 +121,65 @@ jobs: ACTOR_DOCKER_HUB: ${{ secrets.ACTOR_DOCKER_HUB }} RELEASE_DOCKER_HUB: ${{ secrets.RELEASE_DOCKER_HUB }} SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }} + + build-maven-apitest-mimoto: + uses: mosip/kattu/.github/workflows/maven-build.yml@master + with: + SERVICE_LOCATION: ./apitest + BUILD_ARTIFACT: apitest-mimoto + secrets: + OSSRH_USER: ${{ secrets.OSSRH_USER }} + OSSRH_SECRET: ${{ secrets.OSSRH_SECRET }} + OSSRH_TOKEN: ${{ secrets.OSSRH_TOKEN }} + GPG_SECRET: ${{ secrets.GPG_SECRET }} + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} + + publish_to_nexus_apitest_mimoto: + if: "${{ !contains(github.ref, 'master') && github.event_name != 'pull_request' && github.event_name != 'release' && github.event_name != 'prerelease' && github.event_name != 'publish' }}" + needs: build-maven-apitest-mimoto + uses: mosip/kattu/.github/workflows/maven-publish-to-nexus.yml@master + with: + SERVICE_LOCATION: ./apitest + secrets: + OSSRH_USER: ${{ secrets.OSSRH_USER }} + OSSRH_SECRET: ${{ secrets.OSSRH_SECRET }} + OSSRH_URL: ${{ secrets.OSSRH_SNAPSHOT_URL }} + OSSRH_TOKEN: ${{ secrets.OSSRH_TOKEN }} + GPG_SECRET: ${{ secrets.GPG_SECRET }} + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} + + build-dockers_apitest_mimoto: + needs: build-maven-apitest-mimoto + strategy: + matrix: + include: + - SERVICE_LOCATION: 'apitest' + SERVICE_NAME: 'apitest-mimoto' + BUILD_ARTIFACT: 'apitest-mimoto' + fail-fast: false + name: ${{ matrix.SERVICE_NAME }} + uses: mosip/kattu/.github/workflows/docker-build.yml@master + with: + SERVICE_LOCATION: ${{ matrix.SERVICE_LOCATION }} + SERVICE_NAME: ${{ matrix.SERVICE_NAME }} + BUILD_ARTIFACT: ${{ matrix.BUILD_ARTIFACT }} + secrets: + DEV_NAMESPACE_DOCKER_HUB: ${{ secrets.DEV_NAMESPACE_DOCKER_HUB }} + ACTOR_DOCKER_HUB: ${{ secrets.ACTOR_DOCKER_HUB }} + RELEASE_DOCKER_HUB: ${{ secrets.RELEASE_DOCKER_HUB }} + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} + + sonar_analysis_apitest_mimoto: + needs: build-maven-apitest-mimoto + if: "${{ github.event_name != 'pull_request' }}" + uses: mosip/kattu/.github/workflows/maven-sonar-analysis.yml@master + with: + SERVICE_LOCATION: ./apitest + secrets: + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + ORG_KEY: ${{ secrets.ORG_KEY }} + OSSRH_USER: ${{ secrets.OSSRH_USER }} + OSSRH_SECRET: ${{ secrets.OSSRH_SECRET }} + OSSRH_TOKEN: ${{ secrets.OSSRH_TOKEN }} + GPG_SECRET: ${{ secrets.GPG_SECRET }} + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} \ No newline at end of file diff --git a/apitest/entrypoint.sh b/apitest/entrypoint.sh index b56500353..79e58e787 100644 --- a/apitest/entrypoint.sh +++ b/apitest/entrypoint.sh @@ -1,4 +1,4 @@ #!/bin/bash ## Run automationtests -java -jar -Dmodules="$MODULES" -Denv.user="$ENV_USER" -Denv.endpoint="$ENV_ENDPOINT" -Denv.testLevel="$ENV_TESTLEVEL" automationtests.jar; +java -jar -Dmodules="$MODULES" -Denv.user="$ENV_USER" -Denv.endpoint="$ENV_ENDPOINT" -Denv.testLevel="$ENV_TESTLEVEL" apitest-mimoto-*-jar-with-dependencies.jar; diff --git a/apitest/pom.xml b/apitest/pom.xml index 24a205021..7be6405e1 100644 --- a/apitest/pom.xml +++ b/apitest/pom.xml @@ -6,8 +6,8 @@ apitest-mimoto jar apitest-mimoto - Parent project of MOSIP functional tests - https://github.com/mosip/mosip-functional-tests + Parent project of apitest-mimoto + https://github.com/mosip/mimoto 1.2.0.1-SNAPSHOT @@ -20,11 +20,18 @@ scm:git:git://github.com/mosip/mosip-functional-tests.git scm:git:ssh://github.com:mosip/mosip-functional-tests.git - https://github.com/mosip/mosip-functional-tests + https://github.com/mosip/mimoto HEAD - + + + Mosip + mosip.emailnotifier@gmail.com + io.mosip + https://github.com/mosip/mimoto + + @@ -169,7 +176,7 @@ 3.0.7 6.11 1.13 - apitests-mimoto-1.2.0.1-SNAPSHOT-jar-with-dependencies + apitest-mimoto-1.2.0.1-SNAPSHOT-jar-with-dependencies @@ -380,7 +387,7 @@ io.mosip.testrig.apirig.automationtests.commons - automationtests-commons + apitest-commons 1.2.0.1-SNAPSHOT From 3016a5043bb4ea4821ce16b171b01355a6b1cb0a Mon Sep 17 00:00:00 2001 From: VSIVAKALYAN Date: Mon, 6 May 2024 15:42:10 +0530 Subject: [PATCH 141/860] [DSD-5071] Setup for mimoto Signed-off-by: VSIVAKALYAN --- apitest/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apitest/pom.xml b/apitest/pom.xml index 7be6405e1..7b3fc671d 100644 --- a/apitest/pom.xml +++ b/apitest/pom.xml @@ -18,8 +18,8 @@ - scm:git:git://github.com/mosip/mosip-functional-tests.git - scm:git:ssh://github.com:mosip/mosip-functional-tests.git + scm:git:git://github.com/mosip/mimoto.git + scm:git:ssh://github.com:mosip/mimoto.git https://github.com/mosip/mimoto HEAD From 66206535da034016897283c58c87ea622a93fb5f Mon Sep 17 00:00:00 2001 From: Vijay Kumar S <94220135+vijay151096@users.noreply.github.com> Date: Thu, 9 May 2024 11:23:28 +0530 Subject: [PATCH 142/860] [INJIWEB-423]: include face in the credential template for MOSIP vc and preserve the order (#212) * [INJIWEB-423]: include face in the credential template for MOSIP vc Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-423]: include face in the credential template for MOSIP vc Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- .../mimoto/CredentialsSupportedResponse.java | 1 + .../service/impl/IssuersServiceImpl.java | 20 ++++-- .../templates/CredentialTemplate.html | 70 ++++++++++--------- 3 files changed, 51 insertions(+), 40 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java index 42ee4f879..56c7e6a68 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java @@ -21,4 +21,5 @@ public class CredentialsSupportedResponse { private CredentialDefinitionResponseDto credentialDefinition; private List display; + private List order; } diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index e8e6ba60d..d10836419 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -182,9 +182,13 @@ public ByteArrayInputStream generatePdfForVerifiableCredentials(String accessTok if (vcCredentialResponse == null) throw new RuntimeException("VC Credential Issue API not accessible"); Map credentialProperties = vcCredentialResponse.getCredential().getCredentialSubject(); LinkedHashMap displayProperties = new LinkedHashMap<>(); - vcPropertiesFromWellKnown.keySet().forEach(vcProperty -> displayProperties.put(vcPropertiesFromWellKnown.get(vcProperty), credentialProperties.get(vcProperty))); - return getPdfResourceFromVcProperties(displayProperties, textColor, backgroundColor, - credentialsSupportedResponse.getDisplay().get(0).getName(), + List orderProperty = credentialsSupportedResponse.getOrder(); + if(orderProperty == null) { + vcPropertiesFromWellKnown.keySet().forEach(vcProperty -> displayProperties.put(vcPropertiesFromWellKnown.get(vcProperty), credentialProperties.get(vcProperty))); + } else { + orderProperty.forEach(vcProperty -> displayProperties.put(vcPropertiesFromWellKnown.get(vcProperty), credentialProperties.get(vcProperty))); + } + return getPdfResourceFromVcProperties(displayProperties, credentialsSupportedResponse, vcCredentialResponse, issuerDTO.getDisplay().stream().map(d -> d.getLogo().getUrl()).findFirst().orElse("")); } @@ -207,11 +211,13 @@ private VCCredentialRequest generateVCCredentialRequest(IssuerDTO issuerDTO, Cre .build(); } - private ByteArrayInputStream getPdfResourceFromVcProperties(LinkedHashMap displayProperties, String textColor, - String backgroundColor, - String credentialSupportedType, String issuerLogoUrl) throws IOException { + private ByteArrayInputStream getPdfResourceFromVcProperties(LinkedHashMap displayProperties, CredentialsSupportedResponse credentialsSupportedResponse, VCCredentialResponse vcCredentialResponse, String issuerLogoUrl) throws IOException { Map data = new HashMap<>(); LinkedHashMap rowProperties = new LinkedHashMap<>(); + String backgroundColor = credentialsSupportedResponse.getDisplay().get(0).getBackgroundColor(); + String textColor = credentialsSupportedResponse.getDisplay().get(0).getTextColor(); + String credentialSupportedType = credentialsSupportedResponse.getDisplay().get(0).getName(); + String face = vcCredentialResponse.getCredential().getCredentialSubject().get("face") != null ? (String) vcCredentialResponse.getCredential().getCredentialSubject().get("face") : null; displayProperties.entrySet().stream() .forEachOrdered(entry -> { @@ -235,6 +241,8 @@ private ByteArrayInputStream getPdfResourceFromVcProperties(LinkedHashMap - - - Identity Card - - -
-
-
- $titleName -
-
-
-
- Logo -
-
- Logo -
-
-
- #foreach($entry in $rowProperties.entrySet()) - #if($entry.value) -
-
$entry.key
-
$entry.value
-
- #end - #end -
-
-
- -
+ + + Identity Card + + +
+
+ $titleName +
+
+
+ #if (!$face) +
+ Logo
+ #else + Logo + #end +
+ +
+
+ Logo +
+
+
+ #foreach($entry in $rowProperties.entrySet()) + #if($entry.value) +
+
$entry.key
+
$entry.value
+
+ #end + #end
- +
+
+ From 4eb5f084c0705adcfd1c0b272496564d9ffecdb9 Mon Sep 17 00:00:00 2001 From: VSIVAKALYAN Date: Thu, 9 May 2024 12:33:24 +0530 Subject: [PATCH 143/860] [DSD-5071] Setup for apitest-mimoto Signed-off-by: VSIVAKALYAN --- .github/workflows/push-trigger.yml | 54 ++++++++++++++++++++++++++++-- apitest/Dockerfile | 2 +- 2 files changed, 52 insertions(+), 4 deletions(-) diff --git a/.github/workflows/push-trigger.yml b/.github/workflows/push-trigger.yml index 5a28a0da0..de0664a0b 100644 --- a/.github/workflows/push-trigger.yml +++ b/.github/workflows/push-trigger.yml @@ -148,14 +148,61 @@ jobs: GPG_SECRET: ${{ secrets.GPG_SECRET }} SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} - build-dockers_apitest_mimoto: + build-apitest-mimoto-local: needs: build-maven-apitest-mimoto + runs-on: ubuntu-latest + env: + NAMESPACE: ${{ secrets.dev_namespace_docker_hub }} + SERVICE_NAME: apitest-mimoto + SERVICE_LOCATION: apitest + BUILD_ARTIFACT: apitest-mimoto-local + steps: + - uses: actions/checkout@v2 + - name: Set up JDK 11 + uses: actions/setup-java@v1 + with: + ref: ${{ github.ref }} + java-version: 11 + server-id: ossrh # Value of the distributionManagement/repository/id field of the pom.xml + settings-path: ${{ github.workspace }} # location for the settings.xml file + - name: Setup the settings file for ossrh server + run: echo " ossrh ${{secrets.ossrh_user}} ${{secrets.ossrh_secret}} ossrh true gpg2 ${{secrets.gpg_secret}} allow-snapshots true snapshots-repo https://oss.sonatype.org/content/repositories/snapshots false true releases-repo https://oss.sonatype.org/service/local/staging/deploy/maven2 true false sonar . https://sonarcloud.io false " > $GITHUB_WORKSPACE/settings.xml + - name: Build Automationtests with Maven + run: | + cd ${{ env.SERVICE_LOCATION}} + mvn clean package -s $GITHUB_WORKSPACE/settings.xml + - name: Copy configuration files to target directory. + run: | + cp -r ${{ env.SERVICE_LOCATION}}/target/classes/config ${{ env.SERVICE_LOCATION}}/target/config + cp -r ${{ env.SERVICE_LOCATION}}/testNgXmlFiles ${{ env.SERVICE_LOCATION}}/target/testNgXmlFiles + - name: Ready the springboot artifacts + if: ${{ !contains(github.ref, 'master') || !contains(github.ref, 'main') }} + run: | + ## FIND JARS & COPY ONLY EXECUTABLE JARs STORED UNDER TARGET DIRECTORY + find ${{ env.SERVICE_LOCATION }} -path '*/target/*' -exec zip ${{ env.BUILD_ARTIFACT }}.zip {} + + - name: Upload the springboot jars + if: ${{ !contains(github.ref, 'master') || !contains(github.ref, 'main') }} + uses: actions/upload-artifact@v3 + with: + name: ${{ env.BUILD_ARTIFACT }} + path: ${{ env.BUILD_ARTIFACT }}.zip + - uses: 8398a7/action-slack@v3 + with: + status: ${{ job.status }} + fields: repo,message,author,commit,workflow,job # selectable (default: repo,message) + env: + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} # required + if: failure() # Pick up events even if the job fails or is canceled. + + build-dockers_apitest_mimoto: + needs: build-apitest-mimoto-local strategy: matrix: include: - SERVICE_LOCATION: 'apitest' SERVICE_NAME: 'apitest-mimoto' - BUILD_ARTIFACT: 'apitest-mimoto' + BUILD_ARTIFACT: 'apitest-mimoto-local' + ONLY_DOCKER: true fail-fast: false name: ${{ matrix.SERVICE_NAME }} uses: mosip/kattu/.github/workflows/docker-build.yml@master @@ -163,6 +210,7 @@ jobs: SERVICE_LOCATION: ${{ matrix.SERVICE_LOCATION }} SERVICE_NAME: ${{ matrix.SERVICE_NAME }} BUILD_ARTIFACT: ${{ matrix.BUILD_ARTIFACT }} + ONLY_DOCKER: ${{ matrix.ONLY_DOCKER }} secrets: DEV_NAMESPACE_DOCKER_HUB: ${{ secrets.DEV_NAMESPACE_DOCKER_HUB }} ACTOR_DOCKER_HUB: ${{ secrets.ACTOR_DOCKER_HUB }} @@ -182,4 +230,4 @@ jobs: OSSRH_SECRET: ${{ secrets.OSSRH_SECRET }} OSSRH_TOKEN: ${{ secrets.OSSRH_TOKEN }} GPG_SECRET: ${{ secrets.GPG_SECRET }} - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} \ No newline at end of file + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} diff --git a/apitest/Dockerfile b/apitest/Dockerfile index bc00e7589..287c09bd2 100644 --- a/apitest/Dockerfile +++ b/apitest/Dockerfile @@ -37,7 +37,7 @@ WORKDIR /home/${container_user} ENV work_dir=/home/${container_user} -ADD ./target/ $work_dir +ADD ./apitest/target/ $work_dir ADD entrypoint.sh $work_dir/entrypoint.sh From fe5502e023be3e57bb7359e0616938089dada0d4 Mon Sep 17 00:00:00 2001 From: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> Date: Thu, 9 May 2024 17:01:30 +0530 Subject: [PATCH 144/860] DSD-5071 Signed-off-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> --- apitest/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apitest/pom.xml b/apitest/pom.xml index 6498b5e40..8272140b8 100644 --- a/apitest/pom.xml +++ b/apitest/pom.xml @@ -379,7 +379,7 @@ - io.mosip.testrig.apirig.automationtests.commons + io.mosip.testrig.apirig.apitest.commons apitest-commons 1.2.0.1-SNAPSHOT From 369a59b4d48dc338554ca4fd89e59e5975e80b77 Mon Sep 17 00:00:00 2001 From: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> Date: Fri, 10 May 2024 12:03:03 +0530 Subject: [PATCH 145/860] DSD-5071 Signed-off-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> --- apitest/testNgXmlFiles/mimotoApi.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apitest/testNgXmlFiles/mimotoApi.xml b/apitest/testNgXmlFiles/mimotoApi.xml index e3b16cbdd..2871b9c26 100644 --- a/apitest/testNgXmlFiles/mimotoApi.xml +++ b/apitest/testNgXmlFiles/mimotoApi.xml @@ -5,7 +5,7 @@ - + From 11b95631513be5adcf459c232b8e8b72f7e517a5 Mon Sep 17 00:00:00 2001 From: Vijay Kumar S <94220135+vijay151096@users.noreply.github.com> Date: Tue, 14 May 2024 16:27:41 +0530 Subject: [PATCH 146/860] [INJIWEB-465][INJIWEB-460]: Fixing sunbird Logo Stretching & Wrapping the claim values (#217) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- src/main/resources/templates/CredentialTemplate.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/resources/templates/CredentialTemplate.html b/src/main/resources/templates/CredentialTemplate.html index 9fd69eabf..3e3abaa2b 100644 --- a/src/main/resources/templates/CredentialTemplate.html +++ b/src/main/resources/templates/CredentialTemplate.html @@ -22,15 +22,15 @@
- Logo + Logo
#foreach($entry in $rowProperties.entrySet()) #if($entry.value) -
-
$entry.key
-
$entry.value
+
+
$entry.key
+
$entry.value
#end #end From b5460bb81424e316bbb0a6768ea65595d1df8e57 Mon Sep 17 00:00:00 2001 From: Vijay Kumar S <94220135+vijay151096@users.noreply.github.com> Date: Wed, 15 May 2024 20:58:08 +0530 Subject: [PATCH 147/860] [INJIWEB-468]: Generate Multiple KeyPairs for Everyy Credential Download Request (#218) * [INJIWEB-468]: generate separate keypairs for downloading different VC's Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-468]: generate separate keypairs for downloading different VC's Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-468]: updated the keypair size to RSA 2k (#219) * [INJIWEB-468]: updated the keypair size to RSA 2k Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-468]: remove the qr code from the credential template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- .github/workflows/push-trigger.yml | 2 +- .../service/impl/IssuersServiceImpl.java | 27 +++----------- .../java/io/mosip/mimoto/util/JoseUtil.java | 36 +++++-------------- .../templates/CredentialTemplate.html | 3 -- 4 files changed, 14 insertions(+), 54 deletions(-) diff --git a/.github/workflows/push-trigger.yml b/.github/workflows/push-trigger.yml index de0664a0b..05890d9e0 100644 --- a/.github/workflows/push-trigger.yml +++ b/.github/workflows/push-trigger.yml @@ -21,7 +21,7 @@ on: - develop* - MOSIP* - qa-develop - - inji-606* + - injiweb-468* jobs: build-mimoto: diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index d10836419..7373121bb 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -28,7 +28,6 @@ import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.http.MediaType; import org.springframework.stereotype.Service; @@ -36,17 +35,13 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.StringWriter; -import java.security.PublicKey; -import java.text.ParseException; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.List; import java.util.Optional; import java.util.Properties; import java.util.stream.Collectors; -import java.util.stream.Collectors; @Service public class IssuersServiceImpl implements IssuersService { @@ -63,14 +58,6 @@ public class IssuersServiceImpl implements IssuersService { @Autowired private JoseUtil joseUtil; - @Value("${mosip.oidc.p12.filename}") - private String fileName; - - @Value("${mosip.oidc.p12.password}") - private String cyptoPassword; - - @Value("${mosip.oidc.p12.path}") - String keyStorePath; @Override public IssuersDTO getAllIssuers(String search) throws ApiNotAccessibleException, IOException { @@ -169,13 +156,11 @@ public IssuerSupportedCredentialsResponse getCredentialsSupported(String issuerI public ByteArrayInputStream generatePdfForVerifiableCredentials(String accessToken, IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String credentialEndPoint) throws Exception { LinkedHashMap vcPropertiesFromWellKnown = new LinkedHashMap<>(); Map credentialSubject = credentialsSupportedResponse.getCredentialDefinition().getCredentialSubject(); - //populating display properties from credential Types json for pdf + credentialSubject.keySet().forEach(VCProperty -> vcPropertiesFromWellKnown.put(VCProperty, credentialSubject.get(VCProperty).getDisplay().get(0).getName())); - String backgroundColor = credentialsSupportedResponse.getDisplay().get(0).getBackgroundColor(); - String textColor = credentialsSupportedResponse.getDisplay().get(0).getTextColor(); VCCredentialRequest vcCredentialRequest = generateVCCredentialRequest(issuerDTO, credentialsSupportedResponse, accessToken); logger.debug("VC Credential Request is -> " + vcCredentialRequest); - //Esignet API call for credential issue + VCCredentialResponse vcCredentialResponse = restApiClient.postApi(credentialEndPoint, MediaType.APPLICATION_JSON, vcCredentialRequest, VCCredentialResponse.class, accessToken); logger.debug("VC Credential Response is -> " + vcCredentialResponse); @@ -192,12 +177,8 @@ public ByteArrayInputStream generatePdfForVerifiableCredentials(String accessTok issuerDTO.getDisplay().stream().map(d -> d.getLogo().getUrl()).findFirst().orElse("")); } - private VCCredentialRequest generateVCCredentialRequest(IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String accessToken) throws ParseException { - //Getting public key from the p12 file - PublicKey publicKeyString = joseUtil.getPublicKeyString(keyStorePath, fileName, issuerDTO.getClient_alias(), cyptoPassword); - //Generating proof from the public key with custom header - String jwt = joseUtil.generateJwt(publicKeyString, keyStorePath, fileName, issuerDTO.getClient_alias(), - cyptoPassword, issuerDTO.getCredential_audience(), issuerDTO.getClient_id(), accessToken); + private VCCredentialRequest generateVCCredentialRequest(IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String accessToken) throws Exception { + String jwt = joseUtil.generateJwt(issuerDTO.getCredential_audience(), issuerDTO.getClient_id(), accessToken); return VCCredentialRequest.builder() .format(credentialsSupportedResponse.getFormat()) .proof(VCCredentialRequestProof.builder() diff --git a/src/main/java/io/mosip/mimoto/util/JoseUtil.java b/src/main/java/io/mosip/mimoto/util/JoseUtil.java index 257abbdad..f5655c0dc 100644 --- a/src/main/java/io/mosip/mimoto/util/JoseUtil.java +++ b/src/main/java/io/mosip/mimoto/util/JoseUtil.java @@ -32,7 +32,6 @@ import java.security.spec.InvalidKeySpecException; import java.security.spec.RSAPublicKeySpec; import java.security.spec.X509EncodedKeySpec; -import java.text.ParseException; import java.time.Instant; import java.util.Date; import java.util.HashMap; @@ -164,49 +163,32 @@ public String getJWT(String clientId, String keyStorePath, String fileName, Stri .sign(Algorithm.RSA256(null, privateKey)); } - public PublicKey getPublicKeyString(String keyStorePath, String fileName, String alias, String cyptoPassword){ - String keyStorePathWithFileName = keyStorePath + fileName; - try { - KeyStore.PrivateKeyEntry privateKeyEntry = cryptoCoreUtil.loadP12(keyStorePathWithFileName, alias, cyptoPassword); - PublicKey publicKey = privateKeyEntry.getCertificate().getPublicKey(); - return publicKey; - } catch (IOException e) { - logger.error("Exception happened while loading the p12 file for invoking token call."); - } - return null; - } - //Added this Util for generating JWT as the existing Jwt builder will not allow to have a custom header "typ" - public String generateJwt(PublicKey publicJwk, String keyStorePath, String fileName, String alias, String cyptoPassword, String audience, String clientId, String accessToken) throws ParseException { - RSAKey jwk = new RSAKey.Builder((java.security.interfaces.RSAPublicKey) publicJwk) + public String generateJwt(String audience, String clientId, String accessToken) throws Exception { + + KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); + kpg.initialize(2048); + KeyPair kp = kpg.generateKeyPair(); + RSAKey jwk = new RSAKey.Builder((RSAPublicKey) kp.getPublic()) .keyUse(KeyUse.SIGNATURE) .algorithm(JWSAlgorithm.RS256) .build(); Map header = new HashMap<>(); - header.put("alg", ALG_RS256); header.put("typ", "openid4vci-proof+jwt"); header.put("jwk", jwk.getRequiredParams()); - - String keyStorePathWithFileName = keyStorePath + fileName; Date issuedAt = Date.from(Instant.now()); Date expiresAt = Date.from(Instant.now().plusMillis(120000000)); - RSAPrivateKey privateKey = null; - try { - KeyStore.PrivateKeyEntry privateKeyEntry = cryptoCoreUtil.loadP12(keyStorePathWithFileName, alias, cyptoPassword); - privateKey = (RSAPrivateKey) privateKeyEntry.getPrivateKey(); - } catch (IOException e) { - logger.error("Exception happened while loading the p12 file for invoking token call."); - } + RSAPrivateKey privateKey = (RSAPrivateKey) kp.getPrivate(); SignedJWT jwt = (SignedJWT) JWTParser.parse(accessToken); Map jsonObject = jwt.getPayload().toJSONObject(); - String cNounce = (String) jsonObject.get("c_nonce"); + String cNonce = (String) jsonObject.get("c_nonce"); Map payload = new HashMap<>(); payload.put("sub", clientId); payload.put("aud", audience); - payload.put("nonce", cNounce); + payload.put("nonce", cNonce); payload.put("iss", clientId); payload.put("exp", expiresAt.toInstant().getEpochSecond()); payload.put("iat", issuedAt.toInstant().getEpochSecond()); diff --git a/src/main/resources/templates/CredentialTemplate.html b/src/main/resources/templates/CredentialTemplate.html index 3e3abaa2b..d46517065 100644 --- a/src/main/resources/templates/CredentialTemplate.html +++ b/src/main/resources/templates/CredentialTemplate.html @@ -18,9 +18,6 @@ #else Logo #end -
- -
Logo
From 2e2f9d19ee1cc9aa7807747786c65c554f16f046 Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Mon, 20 May 2024 17:56:50 +0530 Subject: [PATCH 148/860] MOSIP-33136 Signed-off-by: Nandhukumar --- .../mimoto/WalletBinding/WalletBinding.yml | 50 ++++++++++++++----- 1 file changed, 38 insertions(+), 12 deletions(-) diff --git a/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml b/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml index 9fd032f39..fba424f3e 100644 --- a/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml +++ b/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml @@ -449,6 +449,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_auth_factor_type restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -473,7 +474,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "invalid_auth_factor_type_or_challenge_format" + "errorCode": "invalid_auth_factor_type" } ], "sendOtpResp": { @@ -487,6 +488,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_auth_factor_type restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -525,6 +527,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_auth_factor_type restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -563,6 +566,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_auth_factor_type restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -601,6 +605,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_auth_factor_type restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -625,7 +630,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "invalid_auth_factor_type_or_challenge_format" + "errorCode": "invalid_auth_factor_type" } ], "sendOtpResp": { @@ -639,6 +644,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_challenge restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -663,7 +669,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "binding_auth_failed" + "errorCode": "invalid_challenge" } ], "sendOtpResp": { @@ -677,6 +683,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_challenge restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -715,6 +722,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_challenge restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -753,6 +761,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_challenge restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -791,6 +800,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -815,7 +825,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "binding_auth_failed" + "errorCode": "invalid_challenge" } ], "sendOtpResp": { @@ -829,6 +839,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_challenge_format restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -853,7 +864,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "invalid_auth_factor_type_or_challenge_format" + "errorCode": "invalid_challenge_format" } ], "sendOtpResp": { @@ -867,6 +878,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_challenge_format restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -905,6 +917,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_challenge_format restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -943,6 +956,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_challenge_format restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -981,6 +995,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_challenge_format restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -1005,7 +1020,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "invalid_auth_factor_type_or_challenge_format" + "errorCode": "invalid_challenge_format" } ], "sendOtpResp": { @@ -1893,6 +1908,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_auth_factor_type restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -1917,7 +1933,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "invalid_auth_factor_type_or_challenge_format" + "errorCode": "invalid_auth_factor_type" } ], "sendOtpResp": { @@ -1931,6 +1947,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_auth_factor_type restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -1969,6 +1986,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_auth_factor_type restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -2007,6 +2025,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_auth_factor_type restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -2069,7 +2088,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "invalid_auth_factor_type_or_challenge_format" + "errorCode": "invalid_auth_factor_type" } ], "sendOtpResp": { @@ -2083,6 +2102,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_challenge restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -2107,7 +2127,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "binding_auth_failed" + "errorCode": "invalid_challenge" } ], "sendOtpResp": { @@ -2121,6 +2141,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_challenge restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -2159,6 +2180,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_challenge restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -2197,6 +2219,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_challenge restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -2259,7 +2282,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "binding_auth_failed" + "errorCode": "invalid_challenge" } ], "sendOtpResp": { @@ -2297,7 +2320,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "invalid_auth_factor_type_or_challenge_format" + "errorCode": "invalid_challenge_format" } ], "sendOtpResp": { @@ -2311,6 +2334,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_challenge_format restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -2349,6 +2373,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_challenge_format restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -2387,6 +2412,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_challenge_format restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -2449,7 +2475,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "invalid_auth_factor_type_or_challenge_format" + "errorCode": "invalid_challenge_format" } ], "sendOtpResp": { From 602289404388b55d591b504c4552e2d0340c122d Mon Sep 17 00:00:00 2001 From: Nandhukumar <100744358+nandhu-kumar@users.noreply.github.com> Date: Mon, 20 May 2024 18:31:13 +0530 Subject: [PATCH 149/860] MOSIP-33136 (#221) Signed-off-by: Nandhukumar Co-authored-by: Nandhukumar --- .../mimoto/WalletBinding/WalletBinding.yml | 50 ++++++++++++++----- 1 file changed, 38 insertions(+), 12 deletions(-) diff --git a/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml b/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml index 9fd032f39..fba424f3e 100644 --- a/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml +++ b/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml @@ -449,6 +449,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_auth_factor_type restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -473,7 +474,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "invalid_auth_factor_type_or_challenge_format" + "errorCode": "invalid_auth_factor_type" } ], "sendOtpResp": { @@ -487,6 +488,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_auth_factor_type restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -525,6 +527,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_auth_factor_type restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -563,6 +566,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_auth_factor_type restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -601,6 +605,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_auth_factor_type restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -625,7 +630,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "invalid_auth_factor_type_or_challenge_format" + "errorCode": "invalid_auth_factor_type" } ], "sendOtpResp": { @@ -639,6 +644,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_challenge restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -663,7 +669,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "binding_auth_failed" + "errorCode": "invalid_challenge" } ], "sendOtpResp": { @@ -677,6 +683,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_challenge restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -715,6 +722,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_challenge restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -753,6 +761,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_challenge restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -791,6 +800,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -815,7 +825,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "binding_auth_failed" + "errorCode": "invalid_challenge" } ], "sendOtpResp": { @@ -829,6 +839,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_challenge_format restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -853,7 +864,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "invalid_auth_factor_type_or_challenge_format" + "errorCode": "invalid_challenge_format" } ], "sendOtpResp": { @@ -867,6 +878,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_challenge_format restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -905,6 +917,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_challenge_format restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -943,6 +956,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_challenge_format restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -981,6 +995,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_challenge_format restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -1005,7 +1020,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "invalid_auth_factor_type_or_challenge_format" + "errorCode": "invalid_challenge_format" } ], "sendOtpResp": { @@ -1893,6 +1908,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_auth_factor_type restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -1917,7 +1933,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "invalid_auth_factor_type_or_challenge_format" + "errorCode": "invalid_auth_factor_type" } ], "sendOtpResp": { @@ -1931,6 +1947,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_auth_factor_type restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -1969,6 +1986,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_auth_factor_type restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -2007,6 +2025,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_auth_factor_type restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -2069,7 +2088,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "invalid_auth_factor_type_or_challenge_format" + "errorCode": "invalid_auth_factor_type" } ], "sendOtpResp": { @@ -2083,6 +2102,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_challenge restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -2107,7 +2127,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "binding_auth_failed" + "errorCode": "invalid_challenge" } ], "sendOtpResp": { @@ -2121,6 +2141,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_challenge restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -2159,6 +2180,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_challenge restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -2197,6 +2219,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_challenge restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -2259,7 +2282,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "binding_auth_failed" + "errorCode": "invalid_challenge" } ], "sendOtpResp": { @@ -2297,7 +2320,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "invalid_auth_factor_type_or_challenge_format" + "errorCode": "invalid_challenge_format" } ], "sendOtpResp": { @@ -2311,6 +2334,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_challenge_format restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -2349,6 +2373,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_challenge_format restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -2387,6 +2412,7 @@ WalletBinding: endPoint: /residentmobileapp/wallet-binding role: resident validityCheckRequired: true + allowedErrorCodes: invalid_challenge_format restMethod: post checkErrorsOnlyInResponse: true inputTemplate: mimoto/WalletBinding/WalletBinding @@ -2449,7 +2475,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "invalid_auth_factor_type_or_challenge_format" + "errorCode": "invalid_challenge_format" } ], "sendOtpResp": { From 3206c793832cc7fa9cc27218077e9ea5b866dbf1 Mon Sep 17 00:00:00 2001 From: Vijay <94220135+vijay151096@users.noreply.github.com> Date: Fri, 31 May 2024 13:05:58 +0530 Subject: [PATCH 150/860] [INJIWEB-570]: render only the fields that has values in the PDF template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- .../mimoto/CredentialsSupportedResponse.java | 3 ++- .../service/impl/IssuersServiceImpl.java | 20 ++++++++----------- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java index 56c7e6a68..d81f464e2 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java @@ -5,6 +5,7 @@ import lombok.Data; import java.util.List; +import java.util.Set; @Data public class CredentialsSupportedResponse { @@ -21,5 +22,5 @@ public class CredentialsSupportedResponse { private CredentialDefinitionResponseDto credentialDefinition; private List display; - private List order; + private Set order; } diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index 7373121bb..cb535baa2 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -35,12 +35,7 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.StringWriter; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.Properties; +import java.util.*; import java.util.stream.Collectors; @Service @@ -167,12 +162,13 @@ public ByteArrayInputStream generatePdfForVerifiableCredentials(String accessTok if (vcCredentialResponse == null) throw new RuntimeException("VC Credential Issue API not accessible"); Map credentialProperties = vcCredentialResponse.getCredential().getCredentialSubject(); LinkedHashMap displayProperties = new LinkedHashMap<>(); - List orderProperty = credentialsSupportedResponse.getOrder(); - if(orderProperty == null) { - vcPropertiesFromWellKnown.keySet().forEach(vcProperty -> displayProperties.put(vcPropertiesFromWellKnown.get(vcProperty), credentialProperties.get(vcProperty))); - } else { - orderProperty.forEach(vcProperty -> displayProperties.put(vcPropertiesFromWellKnown.get(vcProperty), credentialProperties.get(vcProperty))); - } + Set orderProperty = credentialsSupportedResponse.getOrder(); + Set fieldProperty = orderProperty != null ? orderProperty : vcPropertiesFromWellKnown.keySet(); + fieldProperty.forEach(vcProperty -> { + if(credentialProperties.get(vcProperty) != null && !"".equals(credentialProperties.get(vcProperty))) { + displayProperties.put(vcPropertiesFromWellKnown.get(vcProperty), credentialProperties.get(vcProperty)); + } + }); return getPdfResourceFromVcProperties(displayProperties, credentialsSupportedResponse, vcCredentialResponse, issuerDTO.getDisplay().stream().map(d -> d.getLogo().getUrl()).findFirst().orElse("")); } From 6794035ca17474d14cd8a07ef23cea3b75d9a371 Mon Sep 17 00:00:00 2001 From: Vijay <94220135+vijay151096@users.noreply.github.com> Date: Fri, 31 May 2024 14:32:14 +0530 Subject: [PATCH 151/860] [INJIWEB-570]: render only the fields that has values in the PDF template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- .../java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index cb535baa2..d72a9afde 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -165,7 +165,7 @@ public ByteArrayInputStream generatePdfForVerifiableCredentials(String accessTok Set orderProperty = credentialsSupportedResponse.getOrder(); Set fieldProperty = orderProperty != null ? orderProperty : vcPropertiesFromWellKnown.keySet(); fieldProperty.forEach(vcProperty -> { - if(credentialProperties.get(vcProperty) != null && !"".equals(credentialProperties.get(vcProperty))) { + if(credentialProperties.get(vcProperty) != null && !credentialProperties.get(vcProperty).toString().contains("${") ) { displayProperties.put(vcPropertiesFromWellKnown.get(vcProperty), credentialProperties.get(vcProperty)); } }); From 31c58882f9bd3becde7fb2da4db064e6536c28d7 Mon Sep 17 00:00:00 2001 From: Vijay <94220135+vijay151096@users.noreply.github.com> Date: Fri, 31 May 2024 17:38:29 +0530 Subject: [PATCH 152/860] [INJIWEB-570]: render only the fields that has values in the PDF template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- .../java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index d72a9afde..a14fdfae5 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -165,7 +165,7 @@ public ByteArrayInputStream generatePdfForVerifiableCredentials(String accessTok Set orderProperty = credentialsSupportedResponse.getOrder(); Set fieldProperty = orderProperty != null ? orderProperty : vcPropertiesFromWellKnown.keySet(); fieldProperty.forEach(vcProperty -> { - if(credentialProperties.get(vcProperty) != null && !credentialProperties.get(vcProperty).toString().contains("${") ) { + if(credentialProperties.get(vcProperty) != null) { displayProperties.put(vcPropertiesFromWellKnown.get(vcProperty), credentialProperties.get(vcProperty)); } }); From d414e4ef33b0daa9938edb6fad5ca4c1f6e60c3a Mon Sep 17 00:00:00 2001 From: Mohanachandran S Date: Wed, 5 Jun 2024 12:47:38 +0530 Subject: [PATCH 153/860] MOSIP-33173 Updated the POM version and apitest-commons version Signed-off-by: Mohanachandran S --- apitest/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apitest/pom.xml b/apitest/pom.xml index 9b6d6d11b..8ab08847f 100644 --- a/apitest/pom.xml +++ b/apitest/pom.xml @@ -8,7 +8,7 @@ apitest-mimoto Parent project of apitest-mimoto https://github.com/mosip/mimoto - 1.2.0.1-SNAPSHOT + 1.2.1-SNAPSHOT @@ -388,7 +388,7 @@ io.mosip.testrig.apirig.apitest.commons apitest-commons - 1.2.0.1-SNAPSHOT + 1.2.1-SNAPSHOT From 73ad0d41e8b8099e48b34329a5ab3f79b85eed72 Mon Sep 17 00:00:00 2001 From: Praful Rakhade <99539100+Prafulrakhade@users.noreply.github.com> Date: Wed, 5 Jun 2024 16:07:16 +0530 Subject: [PATCH 154/860] [MOSIP-33402] Updatde chart-lint-publish.yml Signed-off-by: Praful Rakhade <99539100+Prafulrakhade@users.noreply.github.com> --- .github/workflows/chart-lint-publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/chart-lint-publish.yml b/.github/workflows/chart-lint-publish.yml index df2148d28..43cbb91c8 100644 --- a/.github/workflows/chart-lint-publish.yml +++ b/.github/workflows/chart-lint-publish.yml @@ -6,7 +6,7 @@ on: pull_request: types: [opened, reopened, synchronize] paths: - - 'charts/**' + - 'helm/**' workflow_dispatch: inputs: IGNORE_CHARTS: From a6cd6b42582ad6e39dd2dc8f8e7df7f4629907b7 Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Date: Fri, 7 Jun 2024 15:00:10 +0530 Subject: [PATCH 155/860] [INJIMOB-1458] add supported credentials attribute in issuers config (#244) Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> --- .../java/io/mosip/mimoto/dto/IssuerDTO.java | 19 ++- src/main/resources/mimoto-issuers-config.json | 119 +++++++++++++++--- 2 files changed, 120 insertions(+), 18 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java index dae7e6e90..fccb9e08d 100644 --- a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java @@ -5,13 +5,14 @@ import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; import lombok.Data; + import javax.validation.Valid; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotEmpty; import java.util.List; import java.util.Map; -import static com.fasterxml.jackson.annotation.JsonInclude.Include.*; +import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL; @Data @@ -46,27 +47,37 @@ public class IssuerDTO { @NotBlank String authorization_audience; @JsonInclude(NON_NULL) - @NotBlank String token_endpoint; @JsonInclude(NON_NULL) @NotBlank String proxy_token_endpoint; @JsonInclude(NON_NULL) - @NotBlank String credential_endpoint; @JsonInclude(NON_NULL) @NotEmpty List credential_type; @JsonInclude(NON_NULL) - @NotBlank String credential_audience; @JsonInclude(NON_NULL) @NotBlank String client_alias; @JsonInclude(NON_NULL) Map additional_headers; + @JsonInclude(NON_NULL) + List credentials_supported; @Expose @JsonInclude(NON_NULL) @NotBlank String enabled; } + + +@Data +class SupportedCredential { + @NotEmpty + String format; + Map credential_definition; + String scope; + @JsonInclude(NON_NULL) + List display; +} diff --git a/src/main/resources/mimoto-issuers-config.json b/src/main/resources/mimoto-issuers-config.json index a75aa68b2..3c4ba7422 100644 --- a/src/main/resources/mimoto-issuers-config.json +++ b/src/main/resources/mimoto-issuers-config.json @@ -10,7 +10,7 @@ "alt_text": "mosip logo" }, "title": "Download MOSIP Credentials via OTP", - "description":"Download credentials by providing UIN, VID or AID", + "description": "Download credentials by providing UIN, VID or AID", "language": "en" }, { @@ -30,7 +30,7 @@ "alt_text": "मोसिप लोगो" }, "title": "OTP के माध्यम से MOSIP क्रेडेंशियल डाउनलोड करें", - "description":"यूआईएन, वीआईडी या एआईडी प्रदान करके क्रेडेंशियल डाउनलोड करें", + "description": "यूआईएन, वीआईडी या एआईडी प्रदान करके क्रेडेंशियल डाउनलोड करें", "language": "hi" }, { @@ -50,7 +50,7 @@ "alt_text": "mosip சின்னம்" }, "title": "OTP வழியாக MOSIP சான்றுகளைப் பதிவிறக்கவும்", - "description":"UIN, VID அல்லது AID ஐ வழங்குவதன் மூலம் நற்சான்றிதழ்களைப் பதிவிறக்கவும்", + "description": "UIN, VID அல்லது AID ஐ வழங்குவதன் மூலம் நற்சான்றிதழ்களைப் பதிவிறக்கவும்", "language": "ta" }, { @@ -60,7 +60,7 @@ "alt_text": "logo ng mosip" }, "title": "I-download ang Mga Kredensyal ng MOSIP sa pamamagitan ng OTP", - "description":"Mag-download ng mga kredensyal sa pamamagitan ng pagbibigay ng UIN, VID o AID", + "description": "Mag-download ng mga kredensyal sa pamamagitan ng pagbibigay ng UIN, VID o AID", "language": "fil" } ], @@ -87,7 +87,7 @@ "alt_text": "شعار موسيب" }, "title": "قم بتنزيل بيانات اعتماد MOSIP", - "description": "توفير UIN أو VIDقم بتنزيل بيانات الاعتماد عن طريق" , + "description": "توفير UIN أو VIDقم بتنزيل بيانات الاعتماد عن طريق", "language": "ar" }, { @@ -97,7 +97,7 @@ "alt_text": "मोसिप लोगो" }, "title": "MOSIP क्रेडेंशियल डाउनलोड करेंं", - "description":"यूआईएन या वीआईडी प्रदान करके क्रेडेंशियल डाउनलोड करें", + "description": "यूआईएन या वीआईडी प्रदान करके क्रेडेंशियल डाउनलोड करें", "language": "hi" }, { @@ -117,7 +117,7 @@ "alt_text": "mosip லோகோ" }, "title": "MOSIP சான்றுகளைப் பதிவிறக்கவும்", - "description":"UIN அல்லது VIDஐ வழங்குவதன் மூலம் நற்சான்றிதழ்களைப் பதிவிறக்கவும்", + "description": "UIN அல்லது VIDஐ வழங்குவதன் மூலம் நற்சான்றிதழ்களைப் பதிவிறக்கவும்", "language": "ta" }, { @@ -127,15 +127,19 @@ "alt_text": "logo ng mosip" }, "title": "I-download ang Mga Kredensyal ng MOSIP", - "description":"Mag-download ng mga kredensyal sa pamamagitan ng pagbibigay ng UIN o VID", + "description": "Mag-download ng mga kredensyal sa pamamagitan ng pagbibigay ng UIN o VID", "language": "fil" } ], "protocol": "OpenId4VCI", "client_id": "${mimoto.oidc.partner.clientid}", "client_alias": "mpartner-default-mimotooidc", - "scopes_supported": ["mosip_identity_vc_ldp"], - "additional_headers": { "Accept": "application/json" }, + "scopes_supported": [ + "mosip_identity_vc_ldp" + ], + "additional_headers": { + "Accept": "application/json" + }, ".well-known": "https://${mosip.esignet.host}/.well-known/openid-credential-issuer", "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", "authorization_endpoint": "https://${mosip.esignet.host}/authorize", @@ -143,7 +147,10 @@ "token_endpoint": "https://${mosip.api.public.host}/residentmobileapp/get-token/ESignet", "proxy_token_endpoint": "https://${mosip.api.public.host}/v1/esignet/oauth/v2/token", "credential_endpoint": "https://${mosip.api.public.host}/v1/esignet/vci/credential", - "credential_type": ["VerifiableCredential", "MOSIPVerifiableCredential"], + "credential_type": [ + "VerifiableCredential", + "MOSIPVerifiableCredential" + ], "credential_audience": "https://${mosip.esignet.host}/v1/esignet", "enabled": "false" }, @@ -214,8 +221,12 @@ "protocol": "OpenId4VCI", "client_id": "${mimoto.oidc.sunbird.partner.clientid}", "client_alias": "esignet-sunbird-partner", - "scopes_supported": ["sunbird_rc_insurance_vc_ldp"], - "additional_headers": { "Accept": "application/json" }, + "scopes_supported": [ + "sunbird_rc_insurance_vc_ldp" + ], + "additional_headers": { + "Accept": "application/json" + }, ".well-known": "https://vijay151096.github.io/did-testing/openid-credential-issuer.json", "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", "authorization_endpoint": "https://${mosip.esignet.mock.host}/authorize", @@ -223,9 +234,89 @@ "token_endpoint": "https://${mosip.api.public.host}/residentmobileapp/get-token/Sunbird", "proxy_token_endpoint": "https://${mosip.esignet.mock.host}/v1/esignet/oauth/v2/token", "credential_endpoint": "https://${mosip.esignet.mock.host}/v1/esignet/vci/credential", - "credential_type": ["VerifiableCredential", "InsuranceCredential"], + "credential_type": [ + "VerifiableCredential", + "InsuranceCredential" + ], "credential_audience": "https://${mosip.esignet.mock.host}/v1/esignet", "enabled": "false" + }, + { + "credential_issuer": "HealthCoverageZ", + "display": [ + { + "name": "HealthCoverageZ Verifiable Credential", + "logo": { + "url": "https://sunbird.org/images/sunbird-logo-new.png", + "alt_text": "a square logo of a HealthCoverageZ" + }, + "language": "en", + "title": "Download HealthCoverageZ Credentials", + "description": "Download credentials with your Policy Number" + } + ], + "protocol": "OpenId4VCI", + "client_id": "${mimoto.oidc.sunbird.partner.clientid}", + "client_alias": "esignet-sunbird-partner", + "additional_headers": { + "Accept": "application/json" + }, + ".well-known": "https://esignet.qa-inji.mosip.net/.well-known/openid-credential-issuer", + "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", + "authorization_endpoint": "https://issuer-host/authorize", + "authorization_audience": "https://issuer-host/v1/esignet/oauth/v2/token", + "token_endpoint": "https://issuer-public-host/residentmobileapp/get-token/HealthCoverageZ", + "proxy_token_endpoint": "https://issuer-host/v1/esignet/oauth/v2/token", + "enabled": "true" + }, + { + "credential_issuer": "ProtectionPlus+", + "display": [ + { + "name": "ProtectionPlus+ Verifiable Credential", + "logo": { + "url": "https://sunbird.org/images/sunbird-logo-new.png", + "alt_text": "a square logo of a Sunbird" + }, + "language": "en", + "title": "Download ProtectionPlus+ Credentials", + "description": "Download credentials with your Policy Number" + } + ], + "protocol": "OpenId4VCI", + "client_id": "${mimoto.oidc.sunbird.partner.clientid}", + "client_alias": "esignet-sunbird-partner", + "scopes_supported": [ + "sunbird_rc_insurance_vc_ldp" + ], + "additional_headers": { + "Accept": "application/json" + }, + "credentials_supported": [ + { + "format": "ldp_vc", + "id": "VehicleInsuranceCredential", + "credential_definition": { + "type": [ + "VerifiableCredential", + "InsuranceCredential" + ] + }, + "scope": "vehicle_insurance_vc_ldp" + } + ], + "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", + "authorization_endpoint": "https://issuer-host/authorize", + "authorization_audience": "https://issuer-host/v1/esignet/oauth/v2/token", + "token_endpoint": "https://issuer-public-host/residentmobileapp/get-token/ProtectionPlus+", + "proxy_token_endpoint": "https://issuer-host/v1/esignet/oauth/v2/token", + "credential_endpoint": "https://issuer-host/v1/esignet/vci/credential", + "credential_type": [ + "VerifiableCredential", + "InsuranceCredential" + ], + "credential_audience": "https://issuer-host", + "enabled": "true" } ] } From ad06ba6df06d2c8b63d1a6d4ea1e02abc739bfcb Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Date: Fri, 7 Jun 2024 18:39:28 +0530 Subject: [PATCH 156/860] [INJIMOB-1458] add id field to credentials_supported in issuers config (#245) Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> --- src/main/java/io/mosip/mimoto/dto/IssuerDTO.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java index fccb9e08d..6ff2fbb91 100644 --- a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java @@ -76,6 +76,8 @@ public class IssuerDTO { class SupportedCredential { @NotEmpty String format; + @NotEmpty + String id; Map credential_definition; String scope; @JsonInclude(NON_NULL) From 5eae01181b818d9c050754d3ed89771e0af85391 Mon Sep 17 00:00:00 2001 From: Swati Goel Date: Tue, 11 Jun 2024 13:21:11 +0530 Subject: [PATCH 157/860] [INJIMOB-1469] : update error response for wallet binding apis. (#248) Signed-off-by: Swati Goel --- .../mimoto/WalletBinding/WalletBinding.yml | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml b/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml index fba424f3e..f7527f4d6 100644 --- a/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml +++ b/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml @@ -474,7 +474,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "invalid_auth_factor_type" + "errorCode": "invalid_auth_factor_type_format" } ], "sendOtpResp": { @@ -513,7 +513,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "invalid_auth_factor_type" + "errorCode": "invalid_auth_factor_type_format" } ], "sendOtpResp": { @@ -552,7 +552,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "invalid_auth_factor_type" + "errorCode": "invalid_auth_factor_type_format" } ], "sendOtpResp": { @@ -591,7 +591,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "invalid_auth_factor_type" + "errorCode": "invalid_auth_factor_type_format" } ], "sendOtpResp": { @@ -630,7 +630,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "invalid_auth_factor_type" + "errorCode": "invalid_auth_factor_type_format" } ], "sendOtpResp": { @@ -669,7 +669,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "invalid_challenge" + "errorCode": "invalid_challenge_length" } ], "sendOtpResp": { @@ -708,7 +708,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "invalid_challenge" + "errorCode": "invalid_challenge_length" } ], "sendOtpResp": { @@ -747,7 +747,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "invalid_challenge" + "errorCode": "invalid_challenge_length" } ], "sendOtpResp": { @@ -786,7 +786,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "invalid_challenge" + "errorCode": "invalid_challenge_length" } ], "sendOtpResp": { @@ -825,7 +825,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "invalid_challenge" + "errorCode": "invalid_challenge_length" } ], "sendOtpResp": { @@ -864,7 +864,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "invalid_challenge_format" + "errorCode": "invalid_auth_factor_type_format" } ], "sendOtpResp": { @@ -903,7 +903,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "invalid_challenge_format" + "errorCode": "invalid_auth_factor_type_format" } ], "sendOtpResp": { @@ -942,7 +942,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "invalid_challenge_format" + "errorCode": "invalid_auth_factor_type_format" } ], "sendOtpResp": { @@ -1020,7 +1020,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "invalid_challenge_format" + "errorCode": "invalid_auth_factor_type_format" } ], "sendOtpResp": { @@ -1933,7 +1933,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "invalid_auth_factor_type" + "errorCode": "invalid_auth_factor_type_format" } ], "sendOtpResp": { @@ -2088,7 +2088,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "invalid_auth_factor_type" + "errorCode": "invalid_auth_factor_type_format" } ], "sendOtpResp": { @@ -2282,7 +2282,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "invalid_challenge" + "errorCode": "invalid_challenge_length" } ], "sendOtpResp": { @@ -2320,7 +2320,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "invalid_challenge_format" + "errorCode": "invalid_auth_factor_type_format" } ], "sendOtpResp": { @@ -2475,7 +2475,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "invalid_challenge_format" + "errorCode": "invalid_auth_factor_type_format" } ], "sendOtpResp": { From e729a688209b21357d8fd2bf439752783ca252d7 Mon Sep 17 00:00:00 2001 From: Vijay Kumar S <94220135+vijay151096@users.noreply.github.com> Date: Tue, 11 Jun 2024 15:16:04 +0530 Subject: [PATCH 158/860] [INJIWEB-577]: modify the credential endpoint with request construction from client side (#253) * [INJIWEB-577]: modify the credential endpoint with request construction from client side Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577]: modify the credential endpoint with request construction from client side Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577]: modify the credential endpoint with request construction from client side (#228) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577]: modify the credential endpoint with request construction from client side Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577]: modify the credential endpoint with loggers (#236) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577] : Merge Latest Develop Changes (#247) * [INJIWEB-570]: render only the fields that has values in the PDF template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-570]: render only the fields that has values in the PDF template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-570]: render only the fields that has values in the PDF template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577]: modify the credential endpoint with loggers Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * MOSIP-33173 Updated the POM version and apitest-commons version Signed-off-by: Mohanachandran S * [INJIMOB-1458] add supported credentials attribute in issuers config (#244) Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> * [INJIMOB-1458] add id field to credentials_supported in issuers config (#245) Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> Signed-off-by: Mohanachandran S Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Co-authored-by: Mohanachandran S Co-authored-by: Chandra Keshav Mishra Co-authored-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> Signed-off-by: Mohanachandran S Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Co-authored-by: Mohanachandran S Co-authored-by: Chandra Keshav Mishra Co-authored-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> --- .github/workflows/push-trigger.yml | 2 +- .../config/mimoto-issuers-config.json | 4 +- .../mimoto/controller/IssuersController.java | 40 +++------ .../mosip/mimoto/service/IssuersService.java | 12 ++- .../service/impl/IssuersServiceImpl.java | 85 +++++++++++-------- .../mimoto/controller/InjiControllerTest.java | 7 +- 6 files changed, 78 insertions(+), 72 deletions(-) diff --git a/.github/workflows/push-trigger.yml b/.github/workflows/push-trigger.yml index 05890d9e0..7ffd3e45d 100644 --- a/.github/workflows/push-trigger.yml +++ b/.github/workflows/push-trigger.yml @@ -21,7 +21,7 @@ on: - develop* - MOSIP* - qa-develop - - injiweb-468* + - injiweb-* jobs: build-mimoto: diff --git a/docker-compose/config/mimoto-issuers-config.json b/docker-compose/config/mimoto-issuers-config.json index a75aa68b2..baf2dc074 100644 --- a/docker-compose/config/mimoto-issuers-config.json +++ b/docker-compose/config/mimoto-issuers-config.json @@ -145,7 +145,7 @@ "credential_endpoint": "https://${mosip.api.public.host}/v1/esignet/vci/credential", "credential_type": ["VerifiableCredential", "MOSIPVerifiableCredential"], "credential_audience": "https://${mosip.esignet.host}/v1/esignet", - "enabled": "false" + "enabled": "true" }, { "credential_issuer": "Sunbird", @@ -225,7 +225,7 @@ "credential_endpoint": "https://${mosip.esignet.mock.host}/v1/esignet/vci/credential", "credential_type": ["VerifiableCredential", "InsuranceCredential"], "credential_audience": "https://${mosip.esignet.mock.host}/v1/esignet", - "enabled": "false" + "enabled": "true" } ] } diff --git a/src/main/java/io/mosip/mimoto/controller/IssuersController.java b/src/main/java/io/mosip/mimoto/controller/IssuersController.java index df051364d..a9cc0c8dc 100644 --- a/src/main/java/io/mosip/mimoto/controller/IssuersController.java +++ b/src/main/java/io/mosip/mimoto/controller/IssuersController.java @@ -5,10 +5,7 @@ import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.IssuersDTO; -import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; -import io.mosip.mimoto.dto.mimoto.CredentialSupportedDisplayResponse; -import io.mosip.mimoto.dto.mimoto.CredentialsSupportedResponse; -import io.mosip.mimoto.dto.mimoto.IssuerSupportedCredentialsResponse; +import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.service.IssuersService; import io.mosip.mimoto.util.DateUtils; @@ -116,10 +113,12 @@ public ResponseEntity getCredentialTypes(@PathVariable("issuer-id") Stri return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); } - @GetMapping("/{issuer-id}/credentials/{credentialType}/download") - public ResponseEntity generatePdfForVC(@RequestHeader("Bearer") String token, - @PathVariable("issuer-id") String issuerId, - @PathVariable("credentialType") String credentialType) { + @PostMapping("/{issuer-id}/credentials/{credentialType}/download") + public ResponseEntity downloadCredentialAsPDF( + @RequestHeader("Authorization") String token, + @PathVariable("issuer-id") String issuerId, + @PathVariable("credentialType") String credentialType, + @RequestBody VCCredentialRequest vcCredentialRequest) { ResponseWrapper responseWrapper = new ResponseWrapper<>(); responseWrapper.setId(ID); @@ -128,27 +127,16 @@ public ResponseEntity generatePdfForVC(@RequestHeader("Bearer") String token, try{ IssuerDTO issuerConfig = issuersService.getIssuerConfig(issuerId); - CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = restApiClient.getApi(issuerConfig.getWellKnownEndpoint(), CredentialIssuerWellKnownResponse.class); - if (credentialIssuerWellKnownResponse == null) { - throw new ApiNotAccessibleException(); - } - Optional credentialsSupportedResponse = credentialIssuerWellKnownResponse.getCredentialsSupported().stream() - .filter(credentialsSupported -> credentialsSupported.getId().equals(credentialType)) - .findFirst(); - if (credentialsSupportedResponse.isEmpty()){ - logger.error("Invalid credential Type passed - {}", credentialType); - responseWrapper.setErrors(List.of(new ErrorDTO(INVALID_CREDENTIAL_TYPE_EXCEPTION.getCode(), INVALID_CREDENTIAL_TYPE_EXCEPTION.getMessage()))); - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); - } - ByteArrayInputStream inputStream = issuersService.generatePdfForVerifiableCredentials(token, issuerConfig, credentialsSupportedResponse.get(), credentialIssuerWellKnownResponse.getCredentialEndPoint()); - //PDF file name with issuer display name and credential type display name - String pdfFileName = issuerConfig.getDisplay().stream().filter(displayDTO -> defaultLanguageConstant.equals(displayDTO.getLanguage())).map(DisplayDTO::getName).findFirst().orElse(null) + - "_" + credentialsSupportedResponse.get().getDisplay().stream() - .filter(credentialSupportedDisplayResponse -> defaultLanguageConstant.equals(credentialSupportedDisplayResponse.getLocale())).map(CredentialSupportedDisplayResponse::getName).findFirst().orElse(null); + logger.info("issuerConfig => " + issuerConfig); + CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = issuersService.getCredentialIssuerWellknown(issuerId, credentialType); + logger.info("Wellknown => " + credentialIssuerWellKnownResponse); + CredentialsSupportedResponse credentialsSupportedResponse = issuersService.getCredentialSupported(credentialIssuerWellKnownResponse, credentialType); + VCCredentialResponse vcCredentialResponse = issuersService.downloadCredential(credentialIssuerWellKnownResponse.getCredentialEndPoint(), vcCredentialRequest, token); + logger.info("vcCredentialResponse" + vcCredentialResponse); + ByteArrayInputStream inputStream = issuersService.generatePdfForVerifiableCredentials(vcCredentialResponse, issuerConfig, credentialsSupportedResponse, credentialIssuerWellKnownResponse.getCredentialEndPoint()); return ResponseEntity .ok() .contentType(MediaType.APPLICATION_PDF) - .header(HttpHeaders.CONTENT_DISPOSITION, String.format("attachment; filename=%s.pdf", pdfFileName)) .header(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, "Content-Disposition") .body(new InputStreamResource(inputStream)); }catch (ApiNotAccessibleException | IOException exception){ diff --git a/src/main/java/io/mosip/mimoto/service/IssuersService.java b/src/main/java/io/mosip/mimoto/service/IssuersService.java index aa4f1776f..4ac2a9697 100644 --- a/src/main/java/io/mosip/mimoto/service/IssuersService.java +++ b/src/main/java/io/mosip/mimoto/service/IssuersService.java @@ -2,10 +2,10 @@ import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.IssuersDTO; -import io.mosip.mimoto.dto.mimoto.CredentialsSupportedResponse; -import io.mosip.mimoto.dto.mimoto.IssuerSupportedCredentialsResponse; +import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.InvalidIssuerIdException; +import org.apache.http.auth.InvalidCredentialsException; import java.io.ByteArrayInputStream; import java.io.IOException; @@ -19,7 +19,13 @@ public interface IssuersService { IssuerSupportedCredentialsResponse getCredentialsSupported(String issuerId, String search) throws ApiNotAccessibleException, IOException; - ByteArrayInputStream generatePdfForVerifiableCredentials(String accessToken, IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String credentialEndPoint) throws Exception; + CredentialIssuerWellKnownResponse getCredentialIssuerWellknown(String issuerId, String search) throws ApiNotAccessibleException, IOException; + + CredentialsSupportedResponse getCredentialSupported(CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse, String credentialType) throws ApiNotAccessibleException, IOException, InvalidCredentialsException; + + VCCredentialResponse downloadCredential(String credentialEndpoint, VCCredentialRequest vcCredentialRequest, String accessToken) throws ApiNotAccessibleException, IOException, InvalidCredentialsException; + + ByteArrayInputStream generatePdfForVerifiableCredentials(VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String credentialEndPoint) throws Exception; diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index a14fdfae5..6c74c2f17 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -13,9 +13,7 @@ import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; import io.mosip.mimoto.dto.mimoto.CredentialsSupportedResponse; import io.mosip.mimoto.dto.mimoto.IssuerSupportedCredentialsResponse; -import io.mosip.mimoto.dto.mimoto.VCCredentialDefinition; import io.mosip.mimoto.dto.mimoto.VCCredentialRequest; -import io.mosip.mimoto.dto.mimoto.VCCredentialRequestProof; import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.InvalidIssuerIdException; @@ -25,6 +23,7 @@ import io.mosip.mimoto.util.RestApiClient; import io.mosip.mimoto.util.Utilities; import org.apache.commons.lang.StringUtils; +import org.apache.http.auth.InvalidCredentialsException; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; import org.springframework.beans.factory.annotation.Autowired; @@ -38,22 +37,18 @@ import java.util.*; import java.util.stream.Collectors; +import static io.mosip.mimoto.exception.PlatformErrorMessages.INVALID_CREDENTIAL_TYPE_EXCEPTION; + @Service public class IssuersServiceImpl implements IssuersService { private final Logger logger = LoggerUtil.getLogger(IssuersServiceImpl.class); - private static final String context = "https://www.w3.org/2018/credentials/v1"; - @Autowired private Utilities utilities; @Autowired private RestApiClient restApiClient; - @Autowired - private JoseUtil joseUtil; - - @Override public IssuersDTO getAllIssuers(String search) throws ApiNotAccessibleException, IOException { IssuersDTO issuers; @@ -125,7 +120,6 @@ public IssuerSupportedCredentialsResponse getCredentialsSupported(String issuerI if (issuerConfigResp.isPresent()) { IssuerDTO issuerDto = issuerConfigResp.get(); - // Get credential supported types from well known endpoint CredentialIssuerWellKnownResponse response = restApiClient.getApi(issuerDto.getWellKnownEndpoint(), CredentialIssuerWellKnownResponse.class); if (response == null) { throw new ApiNotAccessibleException(); @@ -134,7 +128,6 @@ public IssuerSupportedCredentialsResponse getCredentialsSupported(String issuerI credentialTypesWithAuthorizationEndpoint.setAuthorizationEndPoint(issuerDto.getAuthorization_endpoint()); credentialTypesWithAuthorizationEndpoint.setSupportedCredentials(issuerCredentialsSupported); - // Filter Credential supported types with search string if (!StringUtils.isEmpty(search)){ credentialTypesWithAuthorizationEndpoint.setSupportedCredentials(issuerCredentialsSupported .stream() @@ -148,23 +141,56 @@ public IssuerSupportedCredentialsResponse getCredentialsSupported(String issuerI } @Override - public ByteArrayInputStream generatePdfForVerifiableCredentials(String accessToken, IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String credentialEndPoint) throws Exception { - LinkedHashMap vcPropertiesFromWellKnown = new LinkedHashMap<>(); - Map credentialSubject = credentialsSupportedResponse.getCredentialDefinition().getCredentialSubject(); - - credentialSubject.keySet().forEach(VCProperty -> vcPropertiesFromWellKnown.put(VCProperty, credentialSubject.get(VCProperty).getDisplay().get(0).getName())); - VCCredentialRequest vcCredentialRequest = generateVCCredentialRequest(issuerDTO, credentialsSupportedResponse, accessToken); - logger.debug("VC Credential Request is -> " + vcCredentialRequest); + public CredentialIssuerWellKnownResponse getCredentialIssuerWellknown(String issuerId, String search) throws ApiNotAccessibleException, IOException { + CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = new CredentialIssuerWellKnownResponse(); + IssuersDTO issuersDto = getAllIssuersWithAllFields(); + Optional issuerConfigResp = issuersDto.getIssuers().stream() + .filter(issuer -> issuer.getCredential_issuer().equals(issuerId)) + .findFirst(); + if (issuerConfigResp.isPresent()) { + IssuerDTO issuerDto = issuerConfigResp.get(); + credentialIssuerWellKnownResponse = restApiClient.getApi(issuerDto.getWellKnownEndpoint(), CredentialIssuerWellKnownResponse.class); + if (credentialIssuerWellKnownResponse == null) { + throw new ApiNotAccessibleException(); + } + } + return credentialIssuerWellKnownResponse; + } + @Override + public CredentialsSupportedResponse getCredentialSupported(CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse, String credentialType) throws ApiNotAccessibleException, IOException, InvalidCredentialsException { + Optional credentialsSupportedResponse = credentialIssuerWellKnownResponse.getCredentialsSupported().stream() + .filter(credentialsSupported -> credentialsSupported.getId().equals(credentialType)) + .findFirst(); + if (credentialsSupportedResponse.isEmpty()){ + logger.error("Invalid credential Type passed - {}", credentialType); + throw new InvalidCredentialsException(INVALID_CREDENTIAL_TYPE_EXCEPTION.getMessage()); + } + return credentialsSupportedResponse.get(); + } - VCCredentialResponse vcCredentialResponse = restApiClient.postApi(credentialEndPoint, MediaType.APPLICATION_JSON, - vcCredentialRequest, VCCredentialResponse.class, accessToken); + @Override + public VCCredentialResponse downloadCredential(String credentialEndpoint, VCCredentialRequest vcCredentialRequest, String accessToken) throws ApiNotAccessibleException, IOException, InvalidCredentialsException { + VCCredentialResponse vcCredentialResponse = restApiClient.postApi(credentialEndpoint, MediaType.APPLICATION_JSON, + vcCredentialRequest, VCCredentialResponse.class, accessToken.replace("Bearer ", "")); logger.debug("VC Credential Response is -> " + vcCredentialResponse); if (vcCredentialResponse == null) throw new RuntimeException("VC Credential Issue API not accessible"); - Map credentialProperties = vcCredentialResponse.getCredential().getCredentialSubject(); + return vcCredentialResponse; + } + + @Override + public ByteArrayInputStream generatePdfForVerifiableCredentials(VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String credentialEndPoint) throws Exception { + LinkedHashMap displayProperties = new LinkedHashMap<>(); + Map credentialProperties = vcCredentialResponse.getCredential().getCredentialSubject(); + + LinkedHashMap vcPropertiesFromWellKnown = new LinkedHashMap<>(); + Map credentialSubject = credentialsSupportedResponse.getCredentialDefinition().getCredentialSubject(); + credentialSubject.keySet().forEach(VCProperty -> vcPropertiesFromWellKnown.put(VCProperty, credentialSubject.get(VCProperty).getDisplay().get(0).getName())); + Set orderProperty = credentialsSupportedResponse.getOrder(); - Set fieldProperty = orderProperty != null ? orderProperty : vcPropertiesFromWellKnown.keySet(); - fieldProperty.forEach(vcProperty -> { + + Set fieldProperties = orderProperty == null ? vcPropertiesFromWellKnown.keySet() : orderProperty; + fieldProperties.forEach(vcProperty -> { if(credentialProperties.get(vcProperty) != null) { displayProperties.put(vcPropertiesFromWellKnown.get(vcProperty), credentialProperties.get(vcProperty)); } @@ -173,20 +199,6 @@ public ByteArrayInputStream generatePdfForVerifiableCredentials(String accessTok issuerDTO.getDisplay().stream().map(d -> d.getLogo().getUrl()).findFirst().orElse("")); } - private VCCredentialRequest generateVCCredentialRequest(IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String accessToken) throws Exception { - String jwt = joseUtil.generateJwt(issuerDTO.getCredential_audience(), issuerDTO.getClient_id(), accessToken); - return VCCredentialRequest.builder() - .format(credentialsSupportedResponse.getFormat()) - .proof(VCCredentialRequestProof.builder() - .proofType(credentialsSupportedResponse.getProofTypesSupported().get(0)) - .jwt(jwt) - .build()) - .credentialDefinition(VCCredentialDefinition.builder() - .type(credentialsSupportedResponse.getCredentialDefinition().getType()) - .context(List.of(context)) - .build()) - .build(); - } private ByteArrayInputStream getPdfResourceFromVcProperties(LinkedHashMap displayProperties, CredentialsSupportedResponse credentialsSupportedResponse, VCCredentialResponse vcCredentialResponse, String issuerLogoUrl) throws IOException { Map data = new HashMap<>(); @@ -220,7 +232,6 @@ private ByteArrayInputStream getPdfResourceFromVcProperties(LinkedHashMap Date: Wed, 19 Jun 2024 13:04:35 +0530 Subject: [PATCH 159/860] MOSIP-32418 Merging java21 with develop (#252) * MOSIP-32418 Merging java21 with develop Signed-off-by: Mohanachandran S * MOSIP-32418 Merging java21 with develop Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> * MOSIP-32418 Merging java21 with develop Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> * MOSIP-32418 Merging java21 with develop Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> * MOSIP-32418 Merging java21 with develop Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> --------- Signed-off-by: Mohanachandran S Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> --- .github/workflows/push-trigger.yml | 91 ++-- apitest/Dockerfile | 32 +- apitest/pom.xml | 480 +++++++----------- .../mimoto/WalletBinding/WalletBinding.yml | 2 +- 4 files changed, 237 insertions(+), 368 deletions(-) diff --git a/.github/workflows/push-trigger.yml b/.github/workflows/push-trigger.yml index 7ffd3e45d..0fe9f4523 100644 --- a/.github/workflows/push-trigger.yml +++ b/.github/workflows/push-trigger.yml @@ -123,7 +123,7 @@ jobs: SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }} build-maven-apitest-mimoto: - uses: mosip/kattu/.github/workflows/maven-build.yml@master + uses: mosip/kattu/.github/workflows/maven-build.yml@master-java21 with: SERVICE_LOCATION: ./apitest BUILD_ARTIFACT: apitest-mimoto @@ -132,12 +132,12 @@ jobs: OSSRH_SECRET: ${{ secrets.OSSRH_SECRET }} OSSRH_TOKEN: ${{ secrets.OSSRH_TOKEN }} GPG_SECRET: ${{ secrets.GPG_SECRET }} - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }} - publish_to_nexus_apitest_mimoto: + publish_to_nexus_apitest: if: "${{ !contains(github.ref, 'master') && github.event_name != 'pull_request' && github.event_name != 'release' && github.event_name != 'prerelease' && github.event_name != 'publish' }}" needs: build-maven-apitest-mimoto - uses: mosip/kattu/.github/workflows/maven-publish-to-nexus.yml@master + uses: mosip/kattu/.github/workflows/maven-publish-to-nexus.yml@master-java21 with: SERVICE_LOCATION: ./apitest secrets: @@ -146,7 +146,7 @@ jobs: OSSRH_URL: ${{ secrets.OSSRH_SNAPSHOT_URL }} OSSRH_TOKEN: ${{ secrets.OSSRH_TOKEN }} GPG_SECRET: ${{ secrets.GPG_SECRET }} - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }} build-apitest-mimoto-local: needs: build-maven-apitest-mimoto @@ -157,16 +157,18 @@ jobs: SERVICE_LOCATION: apitest BUILD_ARTIFACT: apitest-mimoto-local steps: - - uses: actions/checkout@v2 - - name: Set up JDK 11 - uses: actions/setup-java@v1 + - uses: actions/checkout@v3 + - name: Set up JDK 21 + uses: actions/setup-java@v3 with: - ref: ${{ github.ref }} - java-version: 11 + distribution: 'temurin' + java-version: '21' server-id: ossrh # Value of the distributionManagement/repository/id field of the pom.xml settings-path: ${{ github.workspace }} # location for the settings.xml file + - name: Setup the settings file for ossrh server run: echo " ossrh ${{secrets.ossrh_user}} ${{secrets.ossrh_secret}} ossrh true gpg2 ${{secrets.gpg_secret}} allow-snapshots true snapshots-repo https://oss.sonatype.org/content/repositories/snapshots false true releases-repo https://oss.sonatype.org/service/local/staging/deploy/maven2 true false sonar . https://sonarcloud.io false " > $GITHUB_WORKSPACE/settings.xml + - name: Build Automationtests with Maven run: | cd ${{ env.SERVICE_LOCATION}} @@ -186,6 +188,7 @@ jobs: with: name: ${{ env.BUILD_ARTIFACT }} path: ${{ env.BUILD_ARTIFACT }}.zip + - uses: 8398a7/action-slack@v3 with: status: ${{ job.status }} @@ -195,39 +198,39 @@ jobs: if: failure() # Pick up events even if the job fails or is canceled. build-dockers_apitest_mimoto: - needs: build-apitest-mimoto-local - strategy: - matrix: - include: - - SERVICE_LOCATION: 'apitest' - SERVICE_NAME: 'apitest-mimoto' - BUILD_ARTIFACT: 'apitest-mimoto-local' - ONLY_DOCKER: true - fail-fast: false - name: ${{ matrix.SERVICE_NAME }} - uses: mosip/kattu/.github/workflows/docker-build.yml@master - with: - SERVICE_LOCATION: ${{ matrix.SERVICE_LOCATION }} - SERVICE_NAME: ${{ matrix.SERVICE_NAME }} - BUILD_ARTIFACT: ${{ matrix.BUILD_ARTIFACT }} - ONLY_DOCKER: ${{ matrix.ONLY_DOCKER }} - secrets: - DEV_NAMESPACE_DOCKER_HUB: ${{ secrets.DEV_NAMESPACE_DOCKER_HUB }} - ACTOR_DOCKER_HUB: ${{ secrets.ACTOR_DOCKER_HUB }} - RELEASE_DOCKER_HUB: ${{ secrets.RELEASE_DOCKER_HUB }} - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} + needs: build-apitest-mimoto-local + strategy: + matrix: + include: + - SERVICE_LOCATION: 'apitest' + SERVICE_NAME: 'apitest-mimoto' + BUILD_ARTIFACT: 'apitest-mimoto-local' + ONLY_DOCKER: true + fail-fast: false + name: ${{ matrix.SERVICE_NAME }} + uses: mosip/kattu/.github/workflows/docker-build.yml@master-java21 + with: + SERVICE_LOCATION: ${{ matrix.SERVICE_LOCATION }} + SERVICE_NAME: ${{ matrix.SERVICE_NAME }} + BUILD_ARTIFACT: ${{ matrix.BUILD_ARTIFACT }} + ONLY_DOCKER: ${{ matrix.ONLY_DOCKER }} + secrets: + DEV_NAMESPACE_DOCKER_HUB: ${{ secrets.DEV_NAMESPACE_DOCKER_HUB }} + ACTOR_DOCKER_HUB: ${{ secrets.ACTOR_DOCKER_HUB }} + RELEASE_DOCKER_HUB: ${{ secrets.RELEASE_DOCKER_HUB }} + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }} sonar_analysis_apitest_mimoto: - needs: build-maven-apitest-mimoto - if: "${{ github.event_name != 'pull_request' }}" - uses: mosip/kattu/.github/workflows/maven-sonar-analysis.yml@master - with: - SERVICE_LOCATION: ./apitest - secrets: - SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - ORG_KEY: ${{ secrets.ORG_KEY }} - OSSRH_USER: ${{ secrets.OSSRH_USER }} - OSSRH_SECRET: ${{ secrets.OSSRH_SECRET }} - OSSRH_TOKEN: ${{ secrets.OSSRH_TOKEN }} - GPG_SECRET: ${{ secrets.GPG_SECRET }} - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} + needs: build-maven-apitest-mimoto + if: "${{ github.event_name != 'pull_request' }}" + uses: mosip/kattu/.github/workflows/maven-sonar-analysis.yml@master-java21 + with: + SERVICE_LOCATION: ./apitest + secrets: + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + ORG_KEY: ${{ secrets.ORG_KEY }} + OSSRH_USER: ${{ secrets.OSSRH_USER }} + OSSRH_SECRET: ${{ secrets.OSSRH_SECRET }} + OSSRH_TOKEN: ${{ secrets.OSSRH_TOKEN }} + GPG_SECRET: ${{ secrets.GPG_SECRET }} + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }} diff --git a/apitest/Dockerfile b/apitest/Dockerfile index 287c09bd2..31027c67d 100644 --- a/apitest/Dockerfile +++ b/apitest/Dockerfile @@ -1,4 +1,4 @@ -FROM openjdk:11 +FROM mosipdev/openjdk-21-jre:latest ARG SOURCE ARG COMMIT_HASH @@ -23,15 +23,6 @@ ARG container_user_gid=1001 ARG KUBECTL_VERSION=1.22.9 -# install packages and create user -RUN apt-get -y update \ -&& apt-get install -y unzip jq \ -&& groupadd -g ${container_user_gid} ${container_user_group} \ -&& useradd -u ${container_user_uid} -g ${container_user_group} -s /bin/sh -m ${container_user} \ -&& curl -LO "https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VERSION}/bin/linux/amd64/kubectl" \ -&& chmod +x kubectl \ -&& mv kubectl /usr/local/bin/ - # set working directory for the user WORKDIR /home/${container_user} @@ -41,14 +32,17 @@ ADD ./apitest/target/ $work_dir ADD entrypoint.sh $work_dir/entrypoint.sh -RUN chmod +x $work_dir/entrypoint.sh - -#ADD ./testNgXmlFiles/ $work_dir/testNgXmlFiles/ - -# change permissions of file inside working dir -RUN chown -R ${container_user}:${container_user} /home/${container_user} /usr/local/openjdk-11/lib/security/cacerts - -RUN chmod 644 /usr/local/openjdk-11/lib/security/cacerts +# install packages and create user +RUN apt-get -y update \ +&& apt-get install -y unzip jq curl \ +&& groupadd -g ${container_user_gid} ${container_user_group} \ +&& useradd -u ${container_user_uid} -g ${container_user_group} -s /bin/bash -m ${container_user} \ +&& curl -LO "https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VERSION}/bin/linux/amd64/kubectl" \ +&& mkdir -p /home/${container_user} \ +&& chmod +x kubectl $work_dir/entrypoint.sh \ +&& mv kubectl /usr/local/bin/ \ +&& chown -R ${container_user}:${container_user} /home/${container_user} /etc/ssl/certs/java/cacerts \ +&& chmod 644 /etc/ssl/certs/java/cacerts # select container user for all tasks USER ${container_user_uid}:${container_user_gid} @@ -60,4 +54,4 @@ ENV ENV_USER= ENV ENV_ENDPOINT= ENV ENV_TESTLEVEL=smokeAndRegression -ENTRYPOINT ["./entrypoint.sh"] +ENTRYPOINT ["./entrypoint.sh"] \ No newline at end of file diff --git a/apitest/pom.xml b/apitest/pom.xml index 8ab08847f..187b5c46a 100644 --- a/apitest/pom.xml +++ b/apitest/pom.xml @@ -6,7 +6,7 @@ apitest-mimoto jar apitest-mimoto - Parent project of apitest-mimoto + Parent project of MOSIP mimoto apitests https://github.com/mosip/mimoto 1.2.1-SNAPSHOT @@ -33,157 +33,39 @@ - - UTF-8 - 11 - 11 - 3.7.0 + 21 + 21 + 3.8.0 3.0.2 3.1.0 - 2.9 - 0.8.1 - 3.2 - 3.0.1 - 2.3 - false - 3.7.0.1746 - - 2.0.2.RELEASE - 2.0.7.RELEASE - 5.0.5.RELEASE - 2.0.0.RELEASE - - 2.0.7 - 1.5.20 - 2.9.2 - - 3.6.2 - 3.7.0 - - - - 1.2 - 3.0.0 - 1.3 - 2.2 - 2.0.1.Final - 2.2.6 - - - 1.4.197 - 5.1.46 - 42.2.2 - 2.5.0 - 6.0.12.Final - - - 1.10.19 - 1.7.4 - 2.0.0-beta.5 - - - 3.6.1 - 3.7 - 2.6 - 1.11 - 4.3 - 1.9.2 - 2.2 - 4.5.6 - 19.0 - 1.18.8 - 0.1.54 - 1.4.0 - 7.1.0 - 2.0.0 - 5.5.13 - 2.3.23 - 1.7 - 2.0 - 1.5.2 - 2.1.1 - 1.60 - 63.1 - 1.0.0 - 3.3.3 - 2.8.1 - 4.1.0-incubating - 1.11.368 - 0.2.4 - 2.3.0 - 3.0.1 - 1.9.12 - 0.6.0 - 2.0.0.AM2 - - - - - - - - 0.8.2 - 2.2 - 3.2 - UTF-8 - 3.7.0 - 3.0.1 - - - 1.1.6 - 1.7.19 - 1.10.19 + 3.2.0 + 1.5 + 3.2.4 + 3.0.0 + 2.2.1 - - 1.4.6 + 3.0.1 + apitest-mimoto-1.2.1-SNAPSHOT-jar-with-dependencies + - - 5.0.6.RELEASE - - - 5.4.2.Final - - - 2.1.1 - - - 10.13.1.1 - - - 3.4.0 - - - 1.3.5 - - - 0.3.12 - - - 0.3.0 + + + io.mosip.testrig.apirig.apitest.commons + apitest-commons + 1.2.1-SNAPSHOT + + - - 1.1.2-incubating - 1.2.0.1-B1 - 0.4.7 - 3.0.0 - 2.41.2 - 2.4.0 - 3.3.9 - 3.0.7 - 6.11 - 1.13 - apitest-mimoto-1.2.0.1-SNAPSHOT-jar-with-dependencies - - + org.apache.maven.plugins @@ -202,166 +84,167 @@ maven-compiler-plugin - 3.5.1 + ${maven.compiler.version} - 11 - 11 + ${maven.compiler.source} + ${maven.compiler.target} -Dfile.encoding=UTF-8 - - org.apache.maven.plugins - maven-javadoc-plugin - 3.2.0 - - none - - - pl.project13.maven - git-commit-id-plugin - 3.0.1 - - - populate-git-commit-information - - revision - - - true - MM/dd/yyyy HH:mm:ss Z - 8 - true - ${project.build.outputDirectory}/git.properties - - - - - ${project.basedir}/.git - - - + org.apache.maven.plugins + maven-javadoc-plugin + ${maven.javadoc.version} + + none + + - org.apache.maven.plugins - maven-gpg-plugin - 1.5 - - - sign-artifacts - verify - - sign - - - - --pinentry-mode - loopback - - - - + pl.project13.maven + git-commit-id-plugin + ${git.commit.id.plugin.version} + + + populate-git-commit-information + + revision + + + true + MM/dd/yyyy HH:mm:ss Z + 8 + true + + ${project.build.outputDirectory}/git.properties + + + + + ${project.basedir}/.git + + + + org.apache.maven.plugins + maven-gpg-plugin + ${maven.gpg.plugin.version} + + + sign-artifacts + verify + + sign + + + + --pinentry-mode + loopback + + + + + + + org.apache.maven.plugins + maven-shade-plugin + ${maven.shade.plugin.version} + + + + shade + + + ${fileName} + + + + + + + io.mosip.testrig.apirig.testrunner.MosipTestRunner + + + + + + *:* + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + + + + + + org.apache.maven.plugins + maven-jar-plugin + ${maven.jar.plugin.version} + + + + true + true + + + ${project.name} + ${project.version} + ${user.name} + ${os.name} + ${maven.build.timestamp} + ${env.BUILD_NUMBER} + ${env.BUILD_ID} + ${env.BUILD_URL} + + + + + + org.apache.maven.plugins + maven-war-plugin + ${maven.war.plugin.version} + + + + true + true + + + ${project.name} + ${project.version} + ${user.name} + ${os.name} + ${maven.build.timestamp} + ${env.BUILD_NUMBER} + ${env.BUILD_ID} + ${env.BUILD_URL} + + + + + + org.apache.maven.plugins + maven-source-plugin + ${maven.source.plugin.version} + + + attach-sources + + jar-no-fork + + + - - - - org.apache.maven.plugins - maven-shade-plugin - 3.2.4 - - - - shade - - - ${fileName} - - - - - - io.mosip.testrig.apirig.testrunner.MosipTestRunner - - - - - - *:* - - META-INF/*.SF - META-INF/*.DSA - META-INF/*.RSA - - - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - true - true - - - ${project.name} - ${project.version} - ${user.name} - ${os.name} - ${maven.build.timestamp} - ${env.BUILD_NUMBER} - ${env.BUILD_ID} - ${env.BUILD_URL} - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - - true - true - - - ${project.name} - ${project.version} - ${user.name} - ${os.name} - ${maven.build.timestamp} - ${env.BUILD_NUMBER} - ${env.BUILD_ID} - ${env.BUILD_URL} - - - - - - org.apache.maven.plugins - maven-source-plugin - 2.2.1 - - - attach-sources - - jar-no-fork - - - - org.apache.maven.plugins maven-antrun-plugin - 3.0.0 + ${maven.antrun.plugin.version} make-jar-executable @@ -371,8 +254,10 @@ - - + + @@ -380,17 +265,4 @@ - - - - - - - io.mosip.testrig.apirig.apitest.commons - apitest-commons - 1.2.1-SNAPSHOT - - - - - + \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml b/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml index f7527f4d6..b0b4aeed1 100644 --- a/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml +++ b/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml @@ -2976,4 +2976,4 @@ WalletBinding: "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } -}' \ No newline at end of file +}' From 8bf5dff8ecc2abfc9a7b8d257938e51cf6d0cc35 Mon Sep 17 00:00:00 2001 From: Vijay Kumar S <94220135+vijay151096@users.noreply.github.com> Date: Thu, 20 Jun 2024 13:49:29 +0530 Subject: [PATCH 160/860] [INJIWEB-577]&[INJIWEB-597]: Generate QR Code for the Credential & Merge download api and token Endpoint (#273) * merge download credential and token endpoint (#266) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * Adding Loggers For Debugging (#267) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * adding missing properties in the pojo (#268) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * preseerving the order of serialization (#269) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577]: Create separate Controller for Credentials (#272) * [INJIWEB-577]: Create separate Controller for Credentials Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577]: comment local changes Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * Adding Test Case review (#274) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- pom.xml | 10 + .../controller/CredentialsController.java | 86 ++++++ .../mimoto/controller/IssuersController.java | 60 +--- .../dto/mimoto/VCCredentialProperties.java | 6 + .../dto/mimoto/VCCredentialResponseProof.java | 13 +- .../mosip/mimoto/exception/IdpException.java | 4 + .../mimoto/service/CredentialService.java | 17 ++ .../mosip/mimoto/service/IssuersService.java | 13 - .../service/impl/CredentialServiceImpl.java | 281 ++++++++++++++++++ .../service/impl/IssuersServiceImpl.java | 174 +---------- .../mimoto/controller/InjiControllerTest.java | 71 +---- .../mimoto/service/CredentialServiceTest.java | 100 +++++++ .../mimoto/service/IssuersServiceTest.java | 145 +-------- .../io/mosip/mimoto/util/TestUtilities.java | 111 +++++++ 14 files changed, 659 insertions(+), 432 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/controller/CredentialsController.java create mode 100644 src/main/java/io/mosip/mimoto/service/CredentialService.java create mode 100644 src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java create mode 100644 src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java create mode 100644 src/test/java/io/mosip/mimoto/util/TestUtilities.java diff --git a/pom.xml b/pom.xml index 89450fa6a..18b9dc3df 100644 --- a/pom.xml +++ b/pom.xml @@ -375,6 +375,16 @@ 0.9.2 + + org.jetbrains.kotlin + kotlin-stdlib + 1.8.20 + + + io.mosip + pixelpass + 1.0-SNAPSHOT + io.mosip.kernel diff --git a/src/main/java/io/mosip/mimoto/controller/CredentialsController.java b/src/main/java/io/mosip/mimoto/controller/CredentialsController.java new file mode 100644 index 000000000..b06114eef --- /dev/null +++ b/src/main/java/io/mosip/mimoto/controller/CredentialsController.java @@ -0,0 +1,86 @@ +package io.mosip.mimoto.controller; + +import io.mosip.mimoto.core.http.ResponseWrapper; +import io.mosip.mimoto.dto.ErrorDTO; +import io.mosip.mimoto.dto.IssuerDTO; +import io.mosip.mimoto.dto.idp.TokenResponseDTO; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; +import io.mosip.mimoto.dto.mimoto.CredentialsSupportedResponse; +import io.mosip.mimoto.dto.mimoto.VCCredentialRequest; +import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.IdpException; +import io.mosip.mimoto.service.CredentialService; +import io.mosip.mimoto.service.IdpService; +import io.mosip.mimoto.service.IssuersService; +import io.mosip.mimoto.util.DateUtils; +import org.jetbrains.annotations.NotNull; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.InputStreamResource; +import org.springframework.http.*; +import org.springframework.util.MultiValueMap; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.client.RestTemplate; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.util.List; +import java.util.Map; + +import static io.mosip.mimoto.exception.PlatformErrorMessages.API_NOT_ACCESSIBLE_EXCEPTION; +import static io.mosip.mimoto.exception.PlatformErrorMessages.MIMOTO_PDF_SIGN_EXCEPTION; + +@RestController +@RequestMapping(value="/credentials") +public class CredentialsController { + + private static final String ID = "mosip.mimoto.credentials"; + private final Logger logger = LoggerFactory.getLogger(CredentialsController.class); + + @Autowired + IssuersService issuersService; + + @Autowired + CredentialService credentialService; + + @Autowired + IdpService idpService; + + @PostMapping("/download") + public ResponseEntity downloadCredentialAsPDF( + @RequestParam Map params) { + + ResponseWrapper responseWrapper = new ResponseWrapper<>(); + responseWrapper.setId(ID); + responseWrapper.setVersion("v1"); + responseWrapper.setResponsetime(DateUtils.getRequestTimeString()); + + try { + String issuerId = params.get("issuer"); + String credentialType = params.get("credential"); + + logger.info("Initiated Token Call"); + TokenResponseDTO response = credentialService.getTokenResponse(params, issuerId); + + logger.info("Initiated Download Credential Call"); + ByteArrayInputStream inputStream = credentialService.downloadCredentialAsPDF(issuerId, credentialType, response); + + return ResponseEntity + .ok() + .contentType(MediaType.APPLICATION_PDF) + .header(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, "Content-Disposition") + .body(new InputStreamResource(inputStream)); + } catch (ApiNotAccessibleException | IOException exception) { + logger.error("Exception occurred while fetching credential types ", exception); + responseWrapper.setErrors(List.of(new ErrorDTO(API_NOT_ACCESSIBLE_EXCEPTION.getCode(), API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); + } catch (Exception exception) { + logger.error("Exception occurred while generating pdf ", exception); + responseWrapper.setErrors(List.of(new ErrorDTO(MIMOTO_PDF_SIGN_EXCEPTION.getCode(), exception.getMessage()))); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(responseWrapper); + } + } + +} diff --git a/src/main/java/io/mosip/mimoto/controller/IssuersController.java b/src/main/java/io/mosip/mimoto/controller/IssuersController.java index a9cc0c8dc..8070f0ec1 100644 --- a/src/main/java/io/mosip/mimoto/controller/IssuersController.java +++ b/src/main/java/io/mosip/mimoto/controller/IssuersController.java @@ -1,29 +1,30 @@ package io.mosip.mimoto.controller; import io.mosip.mimoto.core.http.ResponseWrapper; -import io.mosip.mimoto.dto.DisplayDTO; import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.IssuersDTO; +import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.IdpException; +import io.mosip.mimoto.service.CredentialService; +import io.mosip.mimoto.service.IdpService; import io.mosip.mimoto.service.IssuersService; import io.mosip.mimoto.util.DateUtils; -import io.mosip.mimoto.util.RestApiClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.InputStreamResource; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; +import org.springframework.http.*; +import org.springframework.util.MultiValueMap; import org.springframework.web.bind.annotation.*; +import org.springframework.web.client.RestTemplate; import java.io.ByteArrayInputStream; import java.io.IOException; import java.util.List; -import java.util.Optional; +import java.util.Map; import static io.mosip.mimoto.exception.PlatformErrorMessages.*; import static io.mosip.mimoto.util.Utilities.handleExceptionWithErrorCode; @@ -35,10 +36,10 @@ public class IssuersController { IssuersService issuersService; @Autowired - private RestApiClient restApiClient; - - private static final String defaultLanguageConstant = "en"; + IdpService idpService; + @Autowired + CredentialService credentialService; private static final String ID = "mosip.mimoto.issuers"; private final Logger logger = LoggerFactory.getLogger(IssuersController.class); @@ -96,7 +97,7 @@ public ResponseEntity getCredentialTypes(@PathVariable("issuer-id") Stri responseWrapper.setResponsetime(DateUtils.getRequestTimeString()); IssuerSupportedCredentialsResponse credentialTypes; try { - credentialTypes = issuersService.getCredentialsSupported(issuerId, search); + credentialTypes = credentialService.getCredentialsSupported(issuerId, search); }catch (ApiNotAccessibleException | IOException exception){ logger.error("Exception occurred while fetching credential types", exception); responseWrapper.setErrors(List.of(new ErrorDTO(API_NOT_ACCESSIBLE_EXCEPTION.getCode(), API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); @@ -113,41 +114,4 @@ public ResponseEntity getCredentialTypes(@PathVariable("issuer-id") Stri return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); } - @PostMapping("/{issuer-id}/credentials/{credentialType}/download") - public ResponseEntity downloadCredentialAsPDF( - @RequestHeader("Authorization") String token, - @PathVariable("issuer-id") String issuerId, - @PathVariable("credentialType") String credentialType, - @RequestBody VCCredentialRequest vcCredentialRequest) { - - ResponseWrapper responseWrapper = new ResponseWrapper<>(); - responseWrapper.setId(ID); - responseWrapper.setVersion("v1"); - responseWrapper.setResponsetime(DateUtils.getRequestTimeString()); - - try{ - IssuerDTO issuerConfig = issuersService.getIssuerConfig(issuerId); - logger.info("issuerConfig => " + issuerConfig); - CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = issuersService.getCredentialIssuerWellknown(issuerId, credentialType); - logger.info("Wellknown => " + credentialIssuerWellKnownResponse); - CredentialsSupportedResponse credentialsSupportedResponse = issuersService.getCredentialSupported(credentialIssuerWellKnownResponse, credentialType); - VCCredentialResponse vcCredentialResponse = issuersService.downloadCredential(credentialIssuerWellKnownResponse.getCredentialEndPoint(), vcCredentialRequest, token); - logger.info("vcCredentialResponse" + vcCredentialResponse); - ByteArrayInputStream inputStream = issuersService.generatePdfForVerifiableCredentials(vcCredentialResponse, issuerConfig, credentialsSupportedResponse, credentialIssuerWellKnownResponse.getCredentialEndPoint()); - return ResponseEntity - .ok() - .contentType(MediaType.APPLICATION_PDF) - .header(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, "Content-Disposition") - .body(new InputStreamResource(inputStream)); - }catch (ApiNotAccessibleException | IOException exception){ - logger.error("Exception occurred while fetching credential types ", exception); - responseWrapper.setErrors(List.of(new ErrorDTO(API_NOT_ACCESSIBLE_EXCEPTION.getCode(), API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); - } catch (Exception exception) { - logger.error("Exception occurred while generating pdf ", exception); - responseWrapper.setErrors(List.of(new ErrorDTO(MIMOTO_PDF_SIGN_EXCEPTION.getCode(), MIMOTO_PDF_SIGN_EXCEPTION.getMessage()))); - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(responseWrapper); - } - } - } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialProperties.java b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialProperties.java index 682767ac4..eefdcc418 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialProperties.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialProperties.java @@ -1,6 +1,8 @@ package io.mosip.mimoto.dto.mimoto; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; import lombok.Data; import javax.validation.constraints.NotBlank; @@ -9,6 +11,7 @@ import java.util.Map; @Data +@JsonPropertyOrder({"@context", "credentialSubject", "expirationDate", "id", "issuanceDate", "issuer", "proof", "type"}) public class VCCredentialProperties { private String issuer; @@ -16,6 +19,9 @@ public class VCCredentialProperties { private String issuanceDate; + @JsonInclude(JsonInclude.Include.NON_NULL) + private String expirationDate; + private VCCredentialResponseProof proof; private Map credentialSubject; diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponseProof.java b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponseProof.java index 8a48fc00c..844cba82a 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponseProof.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponseProof.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.dto.mimoto; +import com.fasterxml.jackson.annotation.JsonInclude; import lombok.Data; import javax.validation.constraints.NotBlank; @@ -10,10 +11,16 @@ public class VCCredentialResponseProof { private String type; @NotBlank private String created; - @NotBlank + + @JsonInclude(JsonInclude.Include.NON_NULL) private String proofPurpose; - @NotBlank + + @JsonInclude(JsonInclude.Include.NON_NULL) private String verificationMethod; - @NotBlank + + @JsonInclude(JsonInclude.Include.NON_NULL) private String jws; + + @JsonInclude(JsonInclude.Include.NON_NULL) + private String proofValue; } diff --git a/src/main/java/io/mosip/mimoto/exception/IdpException.java b/src/main/java/io/mosip/mimoto/exception/IdpException.java index 27960655a..2d62ebd08 100644 --- a/src/main/java/io/mosip/mimoto/exception/IdpException.java +++ b/src/main/java/io/mosip/mimoto/exception/IdpException.java @@ -12,4 +12,8 @@ public IdpException() { super(PlatformErrorMessages.MIMOTO_IDP_GENERIC_EXCEPTION.getCode(), PlatformErrorMessages.MIMOTO_IDP_GENERIC_EXCEPTION.getMessage()); } + + public IdpException(String message) { + super(PlatformErrorMessages.MIMOTO_IDP_GENERIC_EXCEPTION.getCode(), message); + } } diff --git a/src/main/java/io/mosip/mimoto/service/CredentialService.java b/src/main/java/io/mosip/mimoto/service/CredentialService.java new file mode 100644 index 000000000..ed89184e6 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/CredentialService.java @@ -0,0 +1,17 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.dto.IssuerDTO; +import io.mosip.mimoto.dto.idp.TokenResponseDTO; +import io.mosip.mimoto.dto.mimoto.*; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import org.apache.http.auth.InvalidCredentialsException; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.util.Map; + +public interface CredentialService { + TokenResponseDTO getTokenResponse(Map params, String issuerId) throws ApiNotAccessibleException, IOException; + ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String credentialType, TokenResponseDTO response) throws Exception; + IssuerSupportedCredentialsResponse getCredentialsSupported(String issuerId, String search) throws ApiNotAccessibleException, IOException; +} diff --git a/src/main/java/io/mosip/mimoto/service/IssuersService.java b/src/main/java/io/mosip/mimoto/service/IssuersService.java index 4ac2a9697..5ade20c3e 100644 --- a/src/main/java/io/mosip/mimoto/service/IssuersService.java +++ b/src/main/java/io/mosip/mimoto/service/IssuersService.java @@ -16,17 +16,4 @@ public interface IssuersService { IssuersDTO getAllIssuersWithAllFields() throws ApiNotAccessibleException, IOException; IssuerDTO getIssuerConfig(String issuerId) throws ApiNotAccessibleException, IOException, InvalidIssuerIdException; - - IssuerSupportedCredentialsResponse getCredentialsSupported(String issuerId, String search) throws ApiNotAccessibleException, IOException; - - CredentialIssuerWellKnownResponse getCredentialIssuerWellknown(String issuerId, String search) throws ApiNotAccessibleException, IOException; - - CredentialsSupportedResponse getCredentialSupported(CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse, String credentialType) throws ApiNotAccessibleException, IOException, InvalidCredentialsException; - - VCCredentialResponse downloadCredential(String credentialEndpoint, VCCredentialRequest vcCredentialRequest, String accessToken) throws ApiNotAccessibleException, IOException, InvalidCredentialsException; - - ByteArrayInputStream generatePdfForVerifiableCredentials(VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String credentialEndPoint) throws Exception; - - - } diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java new file mode 100644 index 000000000..3df74b9b4 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java @@ -0,0 +1,281 @@ +package io.mosip.mimoto.service.impl; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.zxing.BarcodeFormat; +import com.google.zxing.WriterException; +import com.google.zxing.client.j2se.MatrixToImageWriter; +import com.google.zxing.common.BitMatrix; +import com.google.zxing.qrcode.QRCodeWriter; +import com.itextpdf.html2pdf.ConverterProperties; +import com.itextpdf.html2pdf.HtmlConverter; +import com.itextpdf.html2pdf.resolver.font.DefaultFontProvider; +import com.itextpdf.kernel.pdf.PdfWriter; +import io.mosip.kernel.core.logger.spi.Logger; +import io.mosip.mimoto.dto.IssuerDTO; +import io.mosip.mimoto.dto.IssuersDTO; +import io.mosip.mimoto.dto.idp.TokenResponseDTO; +import io.mosip.mimoto.dto.mimoto.*; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.IdpException; +import io.mosip.mimoto.service.CredentialService; +import io.mosip.mimoto.service.IdpService; +import io.mosip.mimoto.service.IssuersService; +import io.mosip.mimoto.util.JoseUtil; +import io.mosip.mimoto.util.LoggerUtil; +import io.mosip.mimoto.util.RestApiClient; +import io.mosip.mimoto.util.Utilities; +import io.mosip.pixelpass.PixelPass; +import org.apache.commons.lang.StringUtils; +import org.apache.http.auth.InvalidCredentialsException; +import org.apache.velocity.VelocityContext; +import org.apache.velocity.app.Velocity; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpEntity; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Service; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestTemplate; + +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.StringWriter; +import java.util.*; +import java.util.stream.Collectors; + +import static io.mosip.mimoto.exception.PlatformErrorMessages.INVALID_CREDENTIAL_TYPE_EXCEPTION; + +@Service +public class CredentialServiceImpl implements CredentialService { + + private final Logger logger = LoggerUtil.getLogger(CredentialServiceImpl.class); + + @Autowired + private Utilities utilities; + + @Autowired + private JoseUtil joseUtil; + + @Autowired + private RestApiClient restApiClient; + + @Autowired + IssuersService issuerService; + + @Autowired + IdpService idpService; + + @Override + public TokenResponseDTO getTokenResponse(Map params, String issuerId) throws ApiNotAccessibleException, IOException { + RestTemplate restTemplate = new RestTemplate(); + IssuerDTO issuerDTO = issuerService.getIssuerConfig(issuerId); + HttpEntity> request = idpService.constructGetTokenRequest(params, issuerDTO); + TokenResponseDTO response = restTemplate.postForObject(idpService.getTokenEndpoint(issuerDTO), request, TokenResponseDTO.class); + if(response == null) { + throw new IdpException("Exception occurred while performing the authorization"); + } + return response; + } + + @Override + public ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String credentialType, TokenResponseDTO response) throws Exception { + IssuerDTO issuerConfig = issuerService.getIssuerConfig(issuerId); + CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = getCredentialIssuerWellknown(issuerId, credentialType); + CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupported(credentialIssuerWellKnownResponse, credentialType); + VCCredentialRequest vcCredentialRequest = generateVCCredentialRequest(issuerConfig, credentialsSupportedResponse, response.getAccess_token()); + VCCredentialResponse vcCredentialResponse = downloadCredential(credentialIssuerWellKnownResponse.getCredentialEndPoint(), vcCredentialRequest, response.getAccess_token()); + return generatePdfForVerifiableCredentials(vcCredentialResponse, issuerConfig, credentialsSupportedResponse, credentialIssuerWellKnownResponse.getCredentialEndPoint()); + } + + public VCCredentialResponse downloadCredential(String credentialEndpoint, VCCredentialRequest vcCredentialRequest, String accessToken) throws ApiNotAccessibleException, IOException, InvalidCredentialsException { + VCCredentialResponse vcCredentialResponse = restApiClient.postApi(credentialEndpoint, MediaType.APPLICATION_JSON, + vcCredentialRequest, VCCredentialResponse.class, accessToken); + logger.debug("VC Credential Response is -> " + vcCredentialResponse); + if (vcCredentialResponse == null) throw new RuntimeException("VC Credential Issue API not accessible"); + return vcCredentialResponse; + } + + public VCCredentialRequest generateVCCredentialRequest(IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String accessToken) throws Exception { + String jwt = joseUtil.generateJwt(issuerDTO.getCredential_audience(), issuerDTO.getClient_id(), accessToken); + return VCCredentialRequest.builder() + .format(credentialsSupportedResponse.getFormat()) + .proof(VCCredentialRequestProof.builder() + .proofType(credentialsSupportedResponse.getProofTypesSupported().get(0)) + .jwt(jwt) + .build()) + .credentialDefinition(VCCredentialDefinition.builder() + .type(credentialsSupportedResponse.getCredentialDefinition().getType()) + .context(List.of("https://www.w3.org/2018/credentials/v1")) + .build()) + .build(); + } + + public ByteArrayInputStream generatePdfForVerifiableCredentials(VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String credentialEndPoint) throws Exception { + + LinkedHashMap displayProperties = new LinkedHashMap<>(); + Map credentialProperties = vcCredentialResponse.getCredential().getCredentialSubject(); + + LinkedHashMap vcPropertiesFromWellKnown = new LinkedHashMap<>(); + Map credentialSubject = credentialsSupportedResponse.getCredentialDefinition().getCredentialSubject(); + credentialSubject.keySet().forEach(VCProperty -> vcPropertiesFromWellKnown.put(VCProperty, credentialSubject.get(VCProperty).getDisplay().get(0).getName())); + + Set orderProperty = credentialsSupportedResponse.getOrder(); + + Set fieldProperties = orderProperty == null ? vcPropertiesFromWellKnown.keySet() : orderProperty; + fieldProperties.forEach(vcProperty -> { + if(credentialProperties.get(vcProperty) != null) { + displayProperties.put(vcPropertiesFromWellKnown.get(vcProperty), credentialProperties.get(vcProperty)); + } + }); + return getPdfResourceFromVcProperties(displayProperties, credentialsSupportedResponse, vcCredentialResponse, + issuerDTO.getDisplay().stream().map(d -> d.getLogo().getUrl()).findFirst().orElse("")); + } + + + private ByteArrayInputStream getPdfResourceFromVcProperties(LinkedHashMap displayProperties, CredentialsSupportedResponse credentialsSupportedResponse, VCCredentialResponse vcCredentialResponse, String issuerLogoUrl) throws IOException, WriterException { + Map data = new HashMap<>(); + LinkedHashMap rowProperties = new LinkedHashMap<>(); + String backgroundColor = credentialsSupportedResponse.getDisplay().get(0).getBackgroundColor(); + String textColor = credentialsSupportedResponse.getDisplay().get(0).getTextColor(); + String credentialSupportedType = credentialsSupportedResponse.getDisplay().get(0).getName(); + String face = vcCredentialResponse.getCredential().getCredentialSubject().get("face") != null ? (String) vcCredentialResponse.getCredential().getCredentialSubject().get("face") : null; + + displayProperties.entrySet().stream() + .forEachOrdered(entry -> { + if(entry.getValue() instanceof Map) { + rowProperties.put(entry.getKey(), ((Map) entry.getValue()).get("value")); + } else if(entry.getValue() instanceof List) { + String value = ""; + if( ((List) entry.getValue()).get(0) instanceof String) { + value = ((List) entry.getValue()).stream().reduce((field1, field2) -> field1 + ", " + field2 ).get(); + } else { + value = (String) ((Map) ((List) entry.getValue()).get(0)).get("value"); + } + rowProperties.put(entry.getKey(), value); + } else { + rowProperties.put(entry.getKey(), entry.getValue()); + } + }); + + if(!credentialsSupportedResponse.getId().equals("MOSIPVerifiableCredential")) { + PixelPass pixelPass = new PixelPass(); + ObjectMapper objectMapper = new ObjectMapper(); + logger.info("Credential That is converted to PDF" + objectMapper.writeValueAsString(vcCredentialResponse.getCredential())); + String qrData = pixelPass.generateQRData(objectMapper.writeValueAsString(vcCredentialResponse.getCredential()), ""); + logger.info("QR Data => " + qrData); + QRCodeWriter qrCodeWriter = new QRCodeWriter(); + BitMatrix bitMatrix = qrCodeWriter.encode(qrData, BarcodeFormat.QR_CODE, 650, 650); + BufferedImage qrImage = MatrixToImageWriter.toBufferedImage(bitMatrix); + String base64Image = encodeToString(qrImage, "png"); + data.put("qrCodeImage", base64Image); + } + + + data.put("logoUrl", issuerLogoUrl); + data.put("rowProperties", rowProperties); + data.put("textColor", textColor); + data.put("backgroundColor", backgroundColor); + data.put("titleName", credentialSupportedType); + data.put("face", face); + + String credentialTemplate = utilities.getCredentialSupportedTemplateString(); + + Properties props = new Properties(); + props.setProperty("resource.loader", "class"); + props.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); + Velocity.init(props); + VelocityContext velocityContext = new VelocityContext(data); + + // Merge the context with the template + StringWriter writer = new StringWriter(); + Velocity.evaluate(velocityContext, writer, "Credential Template", credentialTemplate); + + // Get the merged HTML string + String mergedHtml = writer.toString(); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + + PdfWriter pdfwriter = new PdfWriter(outputStream); + DefaultFontProvider defaultFont = new DefaultFontProvider(true, false, false); + ConverterProperties converterProperties = new ConverterProperties(); + converterProperties.setFontProvider(defaultFont); + HtmlConverter.convertToPdf(mergedHtml, pdfwriter, converterProperties); + return new ByteArrayInputStream(outputStream.toByteArray()); + } + public static String encodeToString(BufferedImage image, String type) { + String imageString = null; + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + + try { + ImageIO.write(image, type, bos); + byte[] imageBytes = bos.toByteArray(); + Base64.Encoder encoder = Base64.getEncoder(); + imageString = encoder.encodeToString(imageBytes); + bos.close(); + } catch (Exception e) { + e.printStackTrace(); + } + return imageString; + } + + @Override + public IssuerSupportedCredentialsResponse getCredentialsSupported(String issuerId, String search) throws ApiNotAccessibleException, IOException { + IssuerSupportedCredentialsResponse credentialTypesWithAuthorizationEndpoint = new IssuerSupportedCredentialsResponse(); + + IssuersDTO issuersDto = issuerService.getAllIssuersWithAllFields(); + + Optional issuerConfigResp = issuersDto.getIssuers().stream() + .filter(issuer -> issuer.getCredential_issuer().equals(issuerId)) + .findFirst(); + if (issuerConfigResp.isPresent()) { + IssuerDTO issuerDto = issuerConfigResp.get(); + + CredentialIssuerWellKnownResponse response = restApiClient.getApi(issuerDto.getWellKnownEndpoint(), CredentialIssuerWellKnownResponse.class); + if (response == null) { + throw new ApiNotAccessibleException(); + } + List issuerCredentialsSupported = response.getCredentialsSupported(); + credentialTypesWithAuthorizationEndpoint.setAuthorizationEndPoint(issuerDto.getAuthorization_endpoint()); + credentialTypesWithAuthorizationEndpoint.setSupportedCredentials(issuerCredentialsSupported); + + if (!StringUtils.isEmpty(search)){ + credentialTypesWithAuthorizationEndpoint.setSupportedCredentials(issuerCredentialsSupported + .stream() + .filter(credentialsSupportedResponse -> credentialsSupportedResponse.getDisplay().stream() + .anyMatch(credDisplay -> credDisplay.getName().toLowerCase().contains(search.toLowerCase()))) + .collect(Collectors.toList())); + } + return credentialTypesWithAuthorizationEndpoint; + } + return credentialTypesWithAuthorizationEndpoint; + } + public CredentialIssuerWellKnownResponse getCredentialIssuerWellknown(String issuerId, String search) throws ApiNotAccessibleException, IOException { + CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = new CredentialIssuerWellKnownResponse(); + IssuersDTO issuersDto = issuerService.getAllIssuersWithAllFields(); + Optional issuerConfigResp = issuersDto.getIssuers().stream() + .filter(issuer -> issuer.getCredential_issuer().equals(issuerId)) + .findFirst(); + if (issuerConfigResp.isPresent()) { + IssuerDTO issuerDto = issuerConfigResp.get(); + credentialIssuerWellKnownResponse = restApiClient.getApi(issuerDto.getWellKnownEndpoint(), CredentialIssuerWellKnownResponse.class); + if (credentialIssuerWellKnownResponse == null) { + throw new ApiNotAccessibleException(); + } + } + return credentialIssuerWellKnownResponse; + } + + public CredentialsSupportedResponse getCredentialSupported(CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse, String credentialType) throws ApiNotAccessibleException, IOException, InvalidCredentialsException { + Optional credentialsSupportedResponse = credentialIssuerWellKnownResponse.getCredentialsSupported().stream() + .filter(credentialsSupported -> credentialsSupported.getId().equals(credentialType)) + .findFirst(); + if (credentialsSupportedResponse.isEmpty()){ + logger.error("Invalid credential Type passed - {}", credentialType); + throw new InvalidCredentialsException(INVALID_CREDENTIAL_TYPE_EXCEPTION.getMessage()); + } + return credentialsSupportedResponse.get(); + } + + +} diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index 6c74c2f17..d10988d3c 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -1,43 +1,24 @@ package io.mosip.mimoto.service.impl; + import com.google.gson.Gson; import com.google.gson.GsonBuilder; -import com.itextpdf.html2pdf.ConverterProperties; -import com.itextpdf.html2pdf.HtmlConverter; -import com.itextpdf.html2pdf.resolver.font.DefaultFontProvider; -import com.itextpdf.kernel.pdf.PdfWriter; import io.mosip.kernel.core.logger.spi.Logger; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.IssuersDTO; -import io.mosip.mimoto.dto.mimoto.CredentialDisplayResponseDto; -import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; -import io.mosip.mimoto.dto.mimoto.CredentialsSupportedResponse; -import io.mosip.mimoto.dto.mimoto.IssuerSupportedCredentialsResponse; -import io.mosip.mimoto.dto.mimoto.VCCredentialRequest; -import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.InvalidIssuerIdException; import io.mosip.mimoto.service.IssuersService; -import io.mosip.mimoto.util.JoseUtil; import io.mosip.mimoto.util.LoggerUtil; import io.mosip.mimoto.util.RestApiClient; import io.mosip.mimoto.util.Utilities; import org.apache.commons.lang.StringUtils; -import org.apache.http.auth.InvalidCredentialsException; -import org.apache.velocity.VelocityContext; -import org.apache.velocity.app.Velocity; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.MediaType; import org.springframework.stereotype.Service; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.StringWriter; +import java.io.*; import java.util.*; import java.util.stream.Collectors; -import static io.mosip.mimoto.exception.PlatformErrorMessages.INVALID_CREDENTIAL_TYPE_EXCEPTION; @Service public class IssuersServiceImpl implements IssuersService { @@ -46,9 +27,6 @@ public class IssuersServiceImpl implements IssuersService { @Autowired private Utilities utilities; - @Autowired - private RestApiClient restApiClient; - @Override public IssuersDTO getAllIssuers(String search) throws ApiNotAccessibleException, IOException { IssuersDTO issuers; @@ -107,152 +85,4 @@ public IssuerDTO getIssuerConfig(String issuerId) throws ApiNotAccessibleExcepti throw new InvalidIssuerIdException(); return issuerDTO; } - - @Override - public IssuerSupportedCredentialsResponse getCredentialsSupported(String issuerId, String search) throws ApiNotAccessibleException, IOException { - IssuerSupportedCredentialsResponse credentialTypesWithAuthorizationEndpoint = new IssuerSupportedCredentialsResponse(); - - IssuersDTO issuersDto = getAllIssuersWithAllFields(); - - Optional issuerConfigResp = issuersDto.getIssuers().stream() - .filter(issuer -> issuer.getCredential_issuer().equals(issuerId)) - .findFirst(); - if (issuerConfigResp.isPresent()) { - IssuerDTO issuerDto = issuerConfigResp.get(); - - CredentialIssuerWellKnownResponse response = restApiClient.getApi(issuerDto.getWellKnownEndpoint(), CredentialIssuerWellKnownResponse.class); - if (response == null) { - throw new ApiNotAccessibleException(); - } - List issuerCredentialsSupported = response.getCredentialsSupported(); - credentialTypesWithAuthorizationEndpoint.setAuthorizationEndPoint(issuerDto.getAuthorization_endpoint()); - credentialTypesWithAuthorizationEndpoint.setSupportedCredentials(issuerCredentialsSupported); - - if (!StringUtils.isEmpty(search)){ - credentialTypesWithAuthorizationEndpoint.setSupportedCredentials(issuerCredentialsSupported - .stream() - .filter(credentialsSupportedResponse -> credentialsSupportedResponse.getDisplay().stream() - .anyMatch(credDisplay -> credDisplay.getName().toLowerCase().contains(search.toLowerCase()))) - .collect(Collectors.toList())); - } - return credentialTypesWithAuthorizationEndpoint; - } - return credentialTypesWithAuthorizationEndpoint; - } - - @Override - public CredentialIssuerWellKnownResponse getCredentialIssuerWellknown(String issuerId, String search) throws ApiNotAccessibleException, IOException { - CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = new CredentialIssuerWellKnownResponse(); - IssuersDTO issuersDto = getAllIssuersWithAllFields(); - Optional issuerConfigResp = issuersDto.getIssuers().stream() - .filter(issuer -> issuer.getCredential_issuer().equals(issuerId)) - .findFirst(); - if (issuerConfigResp.isPresent()) { - IssuerDTO issuerDto = issuerConfigResp.get(); - credentialIssuerWellKnownResponse = restApiClient.getApi(issuerDto.getWellKnownEndpoint(), CredentialIssuerWellKnownResponse.class); - if (credentialIssuerWellKnownResponse == null) { - throw new ApiNotAccessibleException(); - } - } - return credentialIssuerWellKnownResponse; - } - @Override - public CredentialsSupportedResponse getCredentialSupported(CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse, String credentialType) throws ApiNotAccessibleException, IOException, InvalidCredentialsException { - Optional credentialsSupportedResponse = credentialIssuerWellKnownResponse.getCredentialsSupported().stream() - .filter(credentialsSupported -> credentialsSupported.getId().equals(credentialType)) - .findFirst(); - if (credentialsSupportedResponse.isEmpty()){ - logger.error("Invalid credential Type passed - {}", credentialType); - throw new InvalidCredentialsException(INVALID_CREDENTIAL_TYPE_EXCEPTION.getMessage()); - } - return credentialsSupportedResponse.get(); - } - - @Override - public VCCredentialResponse downloadCredential(String credentialEndpoint, VCCredentialRequest vcCredentialRequest, String accessToken) throws ApiNotAccessibleException, IOException, InvalidCredentialsException { - VCCredentialResponse vcCredentialResponse = restApiClient.postApi(credentialEndpoint, MediaType.APPLICATION_JSON, - vcCredentialRequest, VCCredentialResponse.class, accessToken.replace("Bearer ", "")); - logger.debug("VC Credential Response is -> " + vcCredentialResponse); - if (vcCredentialResponse == null) throw new RuntimeException("VC Credential Issue API not accessible"); - return vcCredentialResponse; - } - - @Override - public ByteArrayInputStream generatePdfForVerifiableCredentials(VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String credentialEndPoint) throws Exception { - - LinkedHashMap displayProperties = new LinkedHashMap<>(); - Map credentialProperties = vcCredentialResponse.getCredential().getCredentialSubject(); - - LinkedHashMap vcPropertiesFromWellKnown = new LinkedHashMap<>(); - Map credentialSubject = credentialsSupportedResponse.getCredentialDefinition().getCredentialSubject(); - credentialSubject.keySet().forEach(VCProperty -> vcPropertiesFromWellKnown.put(VCProperty, credentialSubject.get(VCProperty).getDisplay().get(0).getName())); - - Set orderProperty = credentialsSupportedResponse.getOrder(); - - Set fieldProperties = orderProperty == null ? vcPropertiesFromWellKnown.keySet() : orderProperty; - fieldProperties.forEach(vcProperty -> { - if(credentialProperties.get(vcProperty) != null) { - displayProperties.put(vcPropertiesFromWellKnown.get(vcProperty), credentialProperties.get(vcProperty)); - } - }); - return getPdfResourceFromVcProperties(displayProperties, credentialsSupportedResponse, vcCredentialResponse, - issuerDTO.getDisplay().stream().map(d -> d.getLogo().getUrl()).findFirst().orElse("")); - } - - - private ByteArrayInputStream getPdfResourceFromVcProperties(LinkedHashMap displayProperties, CredentialsSupportedResponse credentialsSupportedResponse, VCCredentialResponse vcCredentialResponse, String issuerLogoUrl) throws IOException { - Map data = new HashMap<>(); - LinkedHashMap rowProperties = new LinkedHashMap<>(); - String backgroundColor = credentialsSupportedResponse.getDisplay().get(0).getBackgroundColor(); - String textColor = credentialsSupportedResponse.getDisplay().get(0).getTextColor(); - String credentialSupportedType = credentialsSupportedResponse.getDisplay().get(0).getName(); - String face = vcCredentialResponse.getCredential().getCredentialSubject().get("face") != null ? (String) vcCredentialResponse.getCredential().getCredentialSubject().get("face") : null; - - displayProperties.entrySet().stream() - .forEachOrdered(entry -> { - if(entry.getValue() instanceof Map) { - rowProperties.put(entry.getKey(), ((Map) entry.getValue()).get("value")); - } else if(entry.getValue() instanceof List) { - String value = ""; - if( ((List) entry.getValue()).get(0) instanceof String) { - value = ((List) entry.getValue()).stream().reduce((field1, field2) -> field1 + ", " + field2 ).get(); - } else { - value = (String) ((Map) ((List) entry.getValue()).get(0)).get("value"); - } - rowProperties.put(entry.getKey(), value); - } else { - rowProperties.put(entry.getKey(), entry.getValue()); - } - }); - - data.put("logoUrl", issuerLogoUrl); - data.put("rowProperties", rowProperties); - data.put("textColor", textColor); - data.put("backgroundColor", backgroundColor); - data.put("titleName", credentialSupportedType); - data.put("face", face); - - String credentialTemplate = utilities.getCredentialSupportedTemplateString(); - - Properties props = new Properties(); - props.setProperty("resource.loader", "class"); - props.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); - Velocity.init(props); - VelocityContext velocityContext = new VelocityContext(data); - - // Merge the context with the template - StringWriter writer = new StringWriter(); - Velocity.evaluate(velocityContext, writer, "Credential Template", credentialTemplate); - - // Get the merged HTML string - String mergedHtml = writer.toString(); - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - - PdfWriter pdfwriter = new PdfWriter(outputStream); - DefaultFontProvider defaultFont = new DefaultFontProvider(true, false, false); - ConverterProperties converterProperties = new ConverterProperties(); - converterProperties.setFontProvider(defaultFont); - HtmlConverter.convertToPdf(mergedHtml, pdfwriter, converterProperties); - return new ByteArrayInputStream(outputStream.toByteArray()); - } } diff --git a/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java b/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java index 72f8a1139..45ba3afb1 100644 --- a/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java @@ -20,6 +20,7 @@ import io.mosip.mimoto.model.Event; import io.mosip.mimoto.model.EventModel; import io.mosip.mimoto.service.RestClientService; +import io.mosip.mimoto.service.impl.CredentialServiceImpl; import io.mosip.mimoto.service.impl.CredentialShareServiceImpl; import io.mosip.mimoto.service.impl.IssuersServiceImpl; import io.mosip.mimoto.util.*; @@ -49,6 +50,7 @@ import static io.mosip.mimoto.exception.PlatformErrorMessages.API_NOT_ACCESSIBLE_EXCEPTION; import static io.mosip.mimoto.exception.PlatformErrorMessages.INVALID_ISSUER_ID_EXCEPTION; +import static io.mosip.mimoto.util.TestUtilities.*; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; @@ -80,6 +82,9 @@ public class InjiControllerTest { @MockBean private IssuersServiceImpl issuersService; + @MockBean + private CredentialServiceImpl credentialService; + @MockBean public RestApiClient restApiClient; @@ -129,66 +134,6 @@ public void getAllPropertiesTest() throws Exception { .andExpect(status().isOk()); } - static IssuerDTO getIssuerDTO(String issuerName) { - LogoDTO logo = new LogoDTO(); - logo.setUrl("/logo"); - logo.setAlt_text("logo-url"); - DisplayDTO display = new DisplayDTO(); - display.setName(issuerName); - display.setTitle("Download via " + issuerName); - display.setDescription(issuerName + " description"); - display.setLanguage("en"); - display.setLogo(logo); - IssuerDTO issuer = new IssuerDTO(); - issuer.setCredential_issuer(issuerName + "id"); - issuer.setDisplay(Collections.singletonList(display)); - issuer.setClient_id("123"); - if (issuerName.equals("Issuer1")) issuer.setWellKnownEndpoint("/.well-known"); - else { - issuer.setRedirect_uri(null); - issuer.setAuthorization_endpoint(null); - issuer.setCredential_endpoint(null); - issuer.setToken_endpoint(null); - issuer.setScopes_supported(null); - } - return issuer; - } - - static CredentialsSupportedResponse getCredentialSupportedResponse(String credentialSupportedName){ - LogoDTO logo = new LogoDTO(); - logo.setUrl("/logo"); - logo.setAlt_text("logo-url"); - CredentialSupportedDisplayResponse credentialSupportedDisplay = new CredentialSupportedDisplayResponse(); - credentialSupportedDisplay.setLogo(logo); - credentialSupportedDisplay.setName(credentialSupportedName); - credentialSupportedDisplay.setLocale("en"); - credentialSupportedDisplay.setTextColor("#FFFFFF"); - credentialSupportedDisplay.setBackgroundColor("#B34622"); - CredentialIssuerDisplayResponse credentialIssuerDisplayResponse = new CredentialIssuerDisplayResponse(); - credentialIssuerDisplayResponse.setName("Given Name"); - credentialIssuerDisplayResponse.setLocale("en"); - CredentialDisplayResponseDto credentialDisplayResponseDto = new CredentialDisplayResponseDto(); - credentialDisplayResponseDto.setDisplay(Collections.singletonList(credentialIssuerDisplayResponse)); - CredentialDefinitionResponseDto credentialDefinitionResponseDto = new CredentialDefinitionResponseDto(); - credentialDefinitionResponseDto.setType(List.of("VerifiableCredential", credentialSupportedName)); - credentialDefinitionResponseDto.setCredentialSubject(Map.of("name", credentialDisplayResponseDto)); - CredentialsSupportedResponse credentialsSupportedResponse = new CredentialsSupportedResponse(); - credentialsSupportedResponse.setFormat("ldp_vc"); - credentialsSupportedResponse.setId(credentialSupportedName); - credentialsSupportedResponse.setScope(credentialSupportedName+"_vc_ldp"); - credentialsSupportedResponse.setDisplay(Collections.singletonList(credentialSupportedDisplay)); - credentialsSupportedResponse.setProofTypesSupported(Collections.singletonList("jwt")); - credentialsSupportedResponse.setCredentialDefinition(credentialDefinitionResponseDto); - return credentialsSupportedResponse; - } - - static CredentialIssuerWellKnownResponse getCredentialIssuerWellKnownResponseDto(String issuerName, List credentialsSupportedResponses){ - CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = new CredentialIssuerWellKnownResponse(); - credentialIssuerWellKnownResponse.setCredentialIssuer(issuerName); - credentialIssuerWellKnownResponse.setCredentialEndPoint("credential_endpoint"); - credentialIssuerWellKnownResponse.setCredentialsSupported(credentialsSupportedResponses); - return credentialIssuerWellKnownResponse; - } @Test public void getCredentialTypesTest() throws Exception{ @@ -196,10 +141,10 @@ public void getCredentialTypesTest() throws Exception{ credentialTypesResponse.setSupportedCredentials(List.of(getCredentialSupportedResponse("credentialType1"), getCredentialSupportedResponse("credentialType2"))); credentialTypesResponse.setAuthorizationEndPoint("authorization-endpoint"); - Mockito.when(issuersService.getCredentialsSupported("Issuer1", null)) + Mockito.when(credentialService.getCredentialsSupported("Issuer1", null)) .thenReturn(credentialTypesResponse) .thenThrow(new ApiNotAccessibleException()); - Mockito.when(issuersService.getCredentialsSupported("invalidId", null)) + Mockito.when(credentialService.getCredentialsSupported("invalidId", null)) .thenReturn(new IssuerSupportedCredentialsResponse()); mockMvc.perform(get("/issuers/{issuer-id}/credentialTypes", "Issuer1").accept(MediaType.APPLICATION_JSON)) @@ -241,7 +186,7 @@ public void generatePdfForVCTest() throws Exception { List.of(getCredentialSupportedResponse("CredentialType1")))); - Mockito.when(issuersService.generatePdfForVerifiableCredentials(new VCCredentialResponse(), + Mockito.when(credentialService.generatePdfForVerifiableCredentials(new VCCredentialResponse(), getIssuerDTO("Issuer1"), getCredentialSupportedResponse("CredentialType1"), "credential_endpoint")) .thenReturn(new ByteArrayInputStream("Mock Pdf".getBytes())) diff --git a/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java new file mode 100644 index 000000000..5eaa705c9 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java @@ -0,0 +1,100 @@ +package io.mosip.mimoto.service; + +import com.google.gson.Gson; +import io.mosip.mimoto.dto.IssuersDTO; +import io.mosip.mimoto.dto.LogoDTO; +import io.mosip.mimoto.dto.mimoto.*; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.service.impl.CredentialServiceImpl; +import io.mosip.mimoto.service.impl.IssuersServiceImpl; +import io.mosip.mimoto.util.RestApiClient; +import io.mosip.mimoto.util.Utilities; +import org.apache.velocity.VelocityContext; +import org.apache.velocity.app.Velocity; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.boot.test.context.SpringBootTest; + +import java.io.IOException; +import java.io.StringWriter; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static io.mosip.mimoto.util.TestUtilities.*; +import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.any; + +@RunWith(MockitoJUnitRunner.class) +@SpringBootTest +public class CredentialServiceTest { + + @Mock + IssuersService issuersService = new IssuersServiceImpl(); + @InjectMocks + CredentialServiceImpl credentialService = new CredentialServiceImpl(); + + @Mock + Utilities utilities; + + @Mock + public RestApiClient restApiClient; + + List issuerConfigRelatedFields = List.of("additional_headers", "authorization_endpoint","authorization_audience", "token_endpoint", "proxy_token_endpoint", "credential_endpoint", "credential_audience", "redirect_uri"); + + @Before + public void setUp() throws Exception { + IssuersDTO issuers = new IssuersDTO(); + issuers.setIssuers(List.of(getIssuerConfigDTO("Issuer1", Collections.emptyList()), getIssuerConfigDTO("Issuer2", Collections.emptyList()))); + Mockito.when(issuersService.getAllIssuersWithAllFields()).thenReturn(issuers); + } + + @Test + public void shouldReturnIssuerCredentialSupportedResponseForTheIssuerIdIfExist() throws Exception { + IssuerSupportedCredentialsResponse expectedIssuerCredentialsSupported = new IssuerSupportedCredentialsResponse(); + List credentialsSupportedResponses =List.of(getCredentialSupportedResponse("CredentialSupported1"), + getCredentialSupportedResponse("CredentialSupported2")); + + String authorization_endpoint = getIssuerConfigDTO("Issuer1", issuerConfigRelatedFields).getAuthorization_endpoint(); + expectedIssuerCredentialsSupported.setSupportedCredentials(credentialsSupportedResponses); + expectedIssuerCredentialsSupported.setAuthorizationEndPoint(authorization_endpoint); + + Mockito.when(restApiClient.getApi(any(String.class), any())).thenReturn(getCredentialIssuerWellKnownResponseDto("Issuer1", + List.of(getCredentialSupportedResponse("CredentialSupported1"), getCredentialSupportedResponse("CredentialSupported2")))); + IssuerSupportedCredentialsResponse issuerSupportedCredentialsResponse = credentialService.getCredentialsSupported("Issuer1id", null); + assertEquals(issuerSupportedCredentialsResponse, expectedIssuerCredentialsSupported); + } + + @Test + public void shouldReturnNullIfTheIssuerIdNotExistsForCredentialSupportedTypes() throws ApiNotAccessibleException, IOException { + IssuerSupportedCredentialsResponse issuerSupportedCredentialsResponse = credentialService.getCredentialsSupported("Issuer3id", null); + assertNull(issuerSupportedCredentialsResponse.getSupportedCredentials()); + assertNull(issuerSupportedCredentialsResponse.getAuthorizationEndPoint()); + } + + @Test + public void shouldParseHtmlStringToDocument() { + String htmlContent = "

$message

"; + Map data = new HashMap<>(); + data.put("message", "PDF"); + VelocityContext velocityContext = new VelocityContext(); + StringWriter writer = new StringWriter(); + velocityContext.put("message", data.get("message")); + Velocity.evaluate(velocityContext, writer, "Credential Template", htmlContent); + String mergedHtml = writer.toString(); + assertTrue(mergedHtml.contains("PDF")); + } + + + @Test(expected = ApiNotAccessibleException.class) + public void shouldThrowApiNotAccessibleExceptionWhenCredentialsSupportedJsonStringIsNullForGettingCredentialsSupportedList() throws Exception { + Mockito.when(restApiClient.getApi(any(String.class), any(Class.class))).thenReturn(null); + credentialService.getCredentialsSupported("Issuer1id", null); + } +} diff --git a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java index f8895ff6c..2ec8565e1 100644 --- a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java @@ -8,6 +8,7 @@ import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.InvalidIssuerIdException; +import io.mosip.mimoto.service.impl.CredentialServiceImpl; import io.mosip.mimoto.service.impl.IssuersServiceImpl; import io.mosip.mimoto.util.RestApiClient; import io.mosip.mimoto.util.Utilities; @@ -26,6 +27,7 @@ import java.io.StringWriter; import java.util.*; +import static io.mosip.mimoto.util.TestUtilities.getIssuerConfigDTO; import static org.junit.Assert.*; import static org.mockito.ArgumentMatchers.any; @@ -36,105 +38,30 @@ public class IssuersServiceTest { @InjectMocks IssuersServiceImpl issuersService = new IssuersServiceImpl(); - @Mock - Utilities utilities; + @InjectMocks + CredentialServiceImpl credentialService = new CredentialServiceImpl(); @Mock - public RestApiClient restApiClient; + Utilities utilities; List issuerConfigRelatedFields = List.of("additional_headers", "authorization_endpoint","authorization_audience", "token_endpoint", "proxy_token_endpoint", "credential_endpoint", "credential_audience", "redirect_uri"); - static IssuerDTO getIssuerDTO(String issuerName, List nullFields) { - LogoDTO logo = new LogoDTO(); - logo.setUrl("/logo"); - logo.setAlt_text("logo-url"); - DisplayDTO display = new DisplayDTO(); - display.setName(issuerName); - display.setTitle("Download via " + issuerName); - display.setDescription(issuerName + " description"); - display.setLanguage("en"); - display.setLogo(logo); - IssuerDTO issuer = new IssuerDTO(); - issuer.setCredential_issuer(issuerName + "id"); - issuer.setDisplay(Collections.singletonList(display)); - issuer.setClient_id("123"); - issuer.setEnabled("true"); - if (issuerName.equals("Issuer1")) issuer.setWellKnownEndpoint("/.well-known"); - else { - if (!nullFields.contains("redirect_uri")) - issuer.setRedirect_uri("/redirection"); - if (!nullFields.contains("authorization_audience")) - issuer.setAuthorization_audience("/authorization_audience"); - if (!nullFields.contains("redirect_uri")) - issuer.setRedirect_uri("/redirection"); - if (!nullFields.contains("authorization_endpoint")) - issuer.setAuthorization_endpoint("/authorization_endpoint"); - if (!nullFields.contains("token_endpoint")) - issuer.setToken_endpoint("/token_endpoint"); - if (!nullFields.contains("proxy_token_endpoint")) - issuer.setProxy_token_endpoint("/proxy_token_endpoint"); - if (!nullFields.contains("credential_endpoint")) - issuer.setCredential_endpoint("/credential_endpoint"); - if (!nullFields.contains("credential_audience")) - issuer.setCredential_audience("/credential_audience"); - if (!nullFields.contains("additional_headers")) - issuer.setAdditional_headers(Map.of("Content-Type", "application/json")); - } - return issuer; - } - - static CredentialsSupportedResponse getCredentialSupportedResponse(String credentialSupportedName){ - LogoDTO logo = new LogoDTO(); - logo.setUrl("/logo"); - logo.setAlt_text("logo-url"); - CredentialSupportedDisplayResponse credentialSupportedDisplay = new CredentialSupportedDisplayResponse(); - credentialSupportedDisplay.setLogo(logo); - credentialSupportedDisplay.setName(credentialSupportedName); - credentialSupportedDisplay.setLocale("en"); - credentialSupportedDisplay.setTextColor("#FFFFFF"); - credentialSupportedDisplay.setBackgroundColor("#B34622"); - CredentialIssuerDisplayResponse credentialIssuerDisplayResponse = new CredentialIssuerDisplayResponse(); - credentialIssuerDisplayResponse.setName("Given Name"); - credentialIssuerDisplayResponse.setLocale("en"); - CredentialDisplayResponseDto credentialDisplayResponseDto = new CredentialDisplayResponseDto(); - credentialDisplayResponseDto.setDisplay(Collections.singletonList(credentialIssuerDisplayResponse)); - CredentialDefinitionResponseDto credentialDefinitionResponseDto = new CredentialDefinitionResponseDto(); - credentialDefinitionResponseDto.setType(List.of("VerifiableCredential", credentialSupportedName)); - credentialDefinitionResponseDto.setCredentialSubject(Map.of("name", credentialDisplayResponseDto)); - CredentialsSupportedResponse credentialsSupportedResponse = new CredentialsSupportedResponse(); - credentialsSupportedResponse.setFormat("ldp_vc"); - credentialsSupportedResponse.setId(credentialSupportedName+"id"); - credentialsSupportedResponse.setScope(credentialSupportedName+"_vc_ldp"); - credentialsSupportedResponse.setDisplay(Collections.singletonList(credentialSupportedDisplay)); - credentialsSupportedResponse.setProofTypesSupported(Collections.singletonList("jwt")); - credentialsSupportedResponse.setCredentialDefinition(credentialDefinitionResponseDto); - return credentialsSupportedResponse; - } - - static CredentialIssuerWellKnownResponse getCredentialIssuerWellKnownResponseDto(String issuerName, List credentialsSupportedResponses){ - CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = new CredentialIssuerWellKnownResponse(); - credentialIssuerWellKnownResponse.setCredentialIssuer(issuerName); - credentialIssuerWellKnownResponse.setCredentialEndPoint("/credential_endpoint"); - credentialIssuerWellKnownResponse.setCredentialsSupported(credentialsSupportedResponses); - return credentialIssuerWellKnownResponse; - } - @Before public void setUp() throws Exception { IssuersDTO issuers = new IssuersDTO(); - issuers.setIssuers(List.of(getIssuerDTO("Issuer1", Collections.emptyList()), getIssuerDTO("Issuer2", Collections.emptyList()))); + issuers.setIssuers(List.of(getIssuerConfigDTO("Issuer1", Collections.emptyList()), getIssuerConfigDTO("Issuer2", Collections.emptyList()))); Mockito.when(utilities.getIssuersConfigJsonValue()).thenReturn(new Gson().toJson(issuers)); } @Test public void shouldReturnIssuersWithIssuerConfigAsNull() throws ApiNotAccessibleException, IOException { IssuersDTO expectedIssuers = new IssuersDTO(); - List issuers = new ArrayList<>(List.of(getIssuerDTO("Issuer1", issuerConfigRelatedFields), getIssuerDTO("Issuer2", issuerConfigRelatedFields))); + List issuers = new ArrayList<>(List.of(getIssuerConfigDTO("Issuer1", issuerConfigRelatedFields), getIssuerConfigDTO("Issuer2", issuerConfigRelatedFields))); expectedIssuers.setIssuers(issuers); IssuersDTO expectedFilteredIssuers = new IssuersDTO(); - List filteredIssuersList = new ArrayList<>(List.of(getIssuerDTO("Issuer1", issuerConfigRelatedFields))); + List filteredIssuersList = new ArrayList<>(List.of(getIssuerConfigDTO("Issuer1", issuerConfigRelatedFields))); expectedFilteredIssuers.setIssuers(filteredIssuersList); IssuersDTO allIssuers = issuersService.getAllIssuers(null); @@ -152,7 +79,7 @@ public void shouldThrowApiNotAccessibleExceptionWhenIssuersJsonStringIsNullForGe @Test public void shouldReturnIssuerDataAndConfigForTheIssuerIdIfExist() throws ApiNotAccessibleException, IOException, InvalidIssuerIdException { - IssuerDTO expectedIssuer = getIssuerDTO("Issuer1", issuerConfigRelatedFields); + IssuerDTO expectedIssuer = getIssuerConfigDTO("Issuer1", issuerConfigRelatedFields); IssuerDTO issuer = issuersService.getIssuerConfig("Issuer1id"); @@ -162,7 +89,7 @@ public void shouldReturnIssuerDataAndConfigForTheIssuerIdIfExist() throws ApiNot @Test public void shouldReturnIssuerDataAndConfigForAllIssuer() throws ApiNotAccessibleException, IOException { IssuersDTO expectedIssuers = new IssuersDTO(); - List issuers = new ArrayList<>(List.of(getIssuerDTO("Issuer1", new ArrayList<>()), getIssuerDTO("Issuer2", new ArrayList<>()))); + List issuers = new ArrayList<>(List.of(getIssuerConfigDTO("Issuer1", new ArrayList<>()), getIssuerConfigDTO("Issuer2", new ArrayList<>()))); expectedIssuers.setIssuers(issuers); IssuersDTO issuersDTO = issuersService.getAllIssuersWithAllFields(); @@ -184,8 +111,8 @@ public void shouldThrowApiNotAccessibleExceptionWhenIssuersJsonStringIsNullForGe @Test public void shouldReturnOnlyEnabledIssuers() throws IOException, ApiNotAccessibleException { IssuersDTO issuers = new IssuersDTO(); - IssuerDTO enabledIssuer = getIssuerDTO("Issuer1", Collections.emptyList()); - IssuerDTO disbaledIssuer = getIssuerDTO("Issuer2", Collections.emptyList()); + IssuerDTO enabledIssuer = getIssuerConfigDTO("Issuer1", Collections.emptyList()); + IssuerDTO disbaledIssuer = getIssuerConfigDTO("Issuer2", Collections.emptyList()); disbaledIssuer.setEnabled("false"); issuers.setIssuers(List.of(enabledIssuer, disbaledIssuer)); Mockito.when(utilities.getIssuersConfigJsonValue()).thenReturn(new Gson().toJson(issuers)); @@ -198,52 +125,4 @@ public void shouldReturnOnlyEnabledIssuers() throws IOException, ApiNotAccessibl assertEquals(actualIssuersDTO.getIssuers().get(0).getEnabled(), "true"); assertEquals(actualIssuersDTO.getIssuers().size(), 1); } - - @Test(expected = ApiNotAccessibleException.class) - public void shouldThrowApiNotAccessibleExceptionWhenCredentialsSupportedJsonStringIsNullForGettingCredentialsSupportedList() throws Exception { - Mockito.when(restApiClient.getApi(any(String.class), any(Class.class))).thenReturn(null); - issuersService.getCredentialsSupported("Issuer1id", null); - } - - @Test - public void shouldReturnIssuerCredentialSupportedResponseForTheIssuerIdIfExist() throws Exception { - IssuerSupportedCredentialsResponse expectedIssuerCredentialsSupported = new IssuerSupportedCredentialsResponse(); - List credentialsSupportedResponses =List.of(getCredentialSupportedResponse("CredentialSupported1"), - getCredentialSupportedResponse("CredentialSupported2")); - - String authorization_endpoint = getIssuerDTO("Issuer1", issuerConfigRelatedFields).getAuthorization_endpoint(); - expectedIssuerCredentialsSupported.setSupportedCredentials(credentialsSupportedResponses); - expectedIssuerCredentialsSupported.setAuthorizationEndPoint(authorization_endpoint); - - Mockito.when(restApiClient.getApi(any(String.class), any())).thenReturn(getCredentialIssuerWellKnownResponseDto("Issuer1", - List.of(getCredentialSupportedResponse("CredentialSupported1"), getCredentialSupportedResponse("CredentialSupported2")))); - IssuerSupportedCredentialsResponse issuerSupportedCredentialsResponse = issuersService.getCredentialsSupported("Issuer1id", null); - assertEquals(issuerSupportedCredentialsResponse, expectedIssuerCredentialsSupported); - } - - @Test - public void shouldReturnNullIfTheIssuerIdNotExistsForCredentialSupportedTypes() throws ApiNotAccessibleException, IOException { - IssuerSupportedCredentialsResponse issuerSupportedCredentialsResponse = issuersService.getCredentialsSupported("Issuer3id", null); - assertNull(issuerSupportedCredentialsResponse.getSupportedCredentials()); - assertNull(issuerSupportedCredentialsResponse.getAuthorizationEndPoint()); - } - - @Test - public void shouldParseHtmlStringToDocument() { - String htmlContent = "

$message

"; - Map data = new HashMap<>(); - data.put("message", "PDF"); - // Create VelocityContext - VelocityContext velocityContext = new VelocityContext(); - // Create StringWriter to capture output - StringWriter writer = new StringWriter(); - // Merge template with data - velocityContext.put("message", data.get("message")); - Velocity.evaluate(velocityContext, writer, "Credential Template", htmlContent); - // Get merged HTML - String mergedHtml = writer.toString(); - // Assertion - assertTrue(mergedHtml.contains("PDF")); - } - } diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java new file mode 100644 index 000000000..bf2178ad9 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -0,0 +1,111 @@ +package io.mosip.mimoto.util; + +import io.mosip.mimoto.dto.DisplayDTO; +import io.mosip.mimoto.dto.IssuerDTO; +import io.mosip.mimoto.dto.LogoDTO; +import io.mosip.mimoto.dto.mimoto.*; + +import java.util.Collections; +import java.util.List; +import java.util.Map; + +public class TestUtilities { + public static CredentialsSupportedResponse getCredentialSupportedResponse(String credentialSupportedName){ + LogoDTO logo = new LogoDTO(); + logo.setUrl("/logo"); + logo.setAlt_text("logo-url"); + CredentialSupportedDisplayResponse credentialSupportedDisplay = new CredentialSupportedDisplayResponse(); + credentialSupportedDisplay.setLogo(logo); + credentialSupportedDisplay.setName(credentialSupportedName); + credentialSupportedDisplay.setLocale("en"); + credentialSupportedDisplay.setTextColor("#FFFFFF"); + credentialSupportedDisplay.setBackgroundColor("#B34622"); + CredentialIssuerDisplayResponse credentialIssuerDisplayResponse = new CredentialIssuerDisplayResponse(); + credentialIssuerDisplayResponse.setName("Given Name"); + credentialIssuerDisplayResponse.setLocale("en"); + CredentialDisplayResponseDto credentialDisplayResponseDto = new CredentialDisplayResponseDto(); + credentialDisplayResponseDto.setDisplay(Collections.singletonList(credentialIssuerDisplayResponse)); + CredentialDefinitionResponseDto credentialDefinitionResponseDto = new CredentialDefinitionResponseDto(); + credentialDefinitionResponseDto.setType(List.of("VerifiableCredential", credentialSupportedName)); + credentialDefinitionResponseDto.setCredentialSubject(Map.of("name", credentialDisplayResponseDto)); + CredentialsSupportedResponse credentialsSupportedResponse = new CredentialsSupportedResponse(); + credentialsSupportedResponse.setFormat("ldp_vc"); + credentialsSupportedResponse.setId(credentialSupportedName+"id"); + credentialsSupportedResponse.setScope(credentialSupportedName+"_vc_ldp"); + credentialsSupportedResponse.setDisplay(Collections.singletonList(credentialSupportedDisplay)); + credentialsSupportedResponse.setProofTypesSupported(Collections.singletonList("jwt")); + credentialsSupportedResponse.setCredentialDefinition(credentialDefinitionResponseDto); + return credentialsSupportedResponse; + } + + public static CredentialIssuerWellKnownResponse getCredentialIssuerWellKnownResponseDto(String issuerName, List credentialsSupportedResponses){ + CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = new CredentialIssuerWellKnownResponse(); + credentialIssuerWellKnownResponse.setCredentialIssuer(issuerName); + credentialIssuerWellKnownResponse.setCredentialEndPoint("/credential_endpoint"); + credentialIssuerWellKnownResponse.setCredentialsSupported(credentialsSupportedResponses); + return credentialIssuerWellKnownResponse; + } + public static IssuerDTO getIssuerDTO(String issuerName) { + LogoDTO logo = new LogoDTO(); + logo.setUrl("/logo"); + logo.setAlt_text("logo-url"); + DisplayDTO display = new DisplayDTO(); + display.setName(issuerName); + display.setTitle("Download via " + issuerName); + display.setDescription(issuerName + " description"); + display.setLanguage("en"); + display.setLogo(logo); + IssuerDTO issuer = new IssuerDTO(); + issuer.setCredential_issuer(issuerName + "id"); + issuer.setDisplay(Collections.singletonList(display)); + issuer.setClient_id("123"); + if (issuerName.equals("Issuer1")) issuer.setWellKnownEndpoint("/.well-known"); + else { + issuer.setRedirect_uri(null); + issuer.setAuthorization_endpoint(null); + issuer.setCredential_endpoint(null); + issuer.setToken_endpoint(null); + issuer.setScopes_supported(null); + } + return issuer; + } + + public static IssuerDTO getIssuerConfigDTO(String issuerName, List nullFields) { + LogoDTO logo = new LogoDTO(); + logo.setUrl("/logo"); + logo.setAlt_text("logo-url"); + DisplayDTO display = new DisplayDTO(); + display.setName(issuerName); + display.setTitle("Download via " + issuerName); + display.setDescription(issuerName + " description"); + display.setLanguage("en"); + display.setLogo(logo); + IssuerDTO issuer = new IssuerDTO(); + issuer.setCredential_issuer(issuerName + "id"); + issuer.setDisplay(Collections.singletonList(display)); + issuer.setClient_id("123"); + issuer.setEnabled("true"); + if (issuerName.equals("Issuer1")) issuer.setWellKnownEndpoint("/.well-known"); + else { + if (!nullFields.contains("redirect_uri")) + issuer.setRedirect_uri("/redirection"); + if (!nullFields.contains("authorization_audience")) + issuer.setAuthorization_audience("/authorization_audience"); + if (!nullFields.contains("redirect_uri")) + issuer.setRedirect_uri("/redirection"); + if (!nullFields.contains("authorization_endpoint")) + issuer.setAuthorization_endpoint("/authorization_endpoint"); + if (!nullFields.contains("token_endpoint")) + issuer.setToken_endpoint("/token_endpoint"); + if (!nullFields.contains("proxy_token_endpoint")) + issuer.setProxy_token_endpoint("/proxy_token_endpoint"); + if (!nullFields.contains("credential_endpoint")) + issuer.setCredential_endpoint("/credential_endpoint"); + if (!nullFields.contains("credential_audience")) + issuer.setCredential_audience("/credential_audience"); + if (!nullFields.contains("additional_headers")) + issuer.setAdditional_headers(Map.of("Content-Type", "application/json")); + } + return issuer; + } +} From 0a306d717d03b2c5f17d6b48b7bb80e00839144d Mon Sep 17 00:00:00 2001 From: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> Date: Fri, 21 Jun 2024 13:53:27 +0530 Subject: [PATCH 161/860] MOSIP-33946 - Rollback to Java11 (#275) * MOSIP-33946 - Rollback to Java11 Signed-off-by: Mohanachandran S * Update push-trigger.yml Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> --------- Signed-off-by: Mohanachandran S Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> --- .github/workflows/push-trigger.yml | 87 ++-- apitest/Dockerfile | 32 +- apitest/pom.xml | 480 +++++++++++------- .../mimoto/WalletBinding/WalletBinding.yml | 2 +- 4 files changed, 366 insertions(+), 235 deletions(-) diff --git a/.github/workflows/push-trigger.yml b/.github/workflows/push-trigger.yml index 0fe9f4523..c1ca7d4b9 100644 --- a/.github/workflows/push-trigger.yml +++ b/.github/workflows/push-trigger.yml @@ -123,7 +123,7 @@ jobs: SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }} build-maven-apitest-mimoto: - uses: mosip/kattu/.github/workflows/maven-build.yml@master-java21 + uses: mosip/kattu/.github/workflows/maven-build.yml@master with: SERVICE_LOCATION: ./apitest BUILD_ARTIFACT: apitest-mimoto @@ -134,10 +134,10 @@ jobs: GPG_SECRET: ${{ secrets.GPG_SECRET }} SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }} - publish_to_nexus_apitest: + publish_to_nexus_apitest_mimoto: if: "${{ !contains(github.ref, 'master') && github.event_name != 'pull_request' && github.event_name != 'release' && github.event_name != 'prerelease' && github.event_name != 'publish' }}" needs: build-maven-apitest-mimoto - uses: mosip/kattu/.github/workflows/maven-publish-to-nexus.yml@master-java21 + uses: mosip/kattu/.github/workflows/maven-publish-to-nexus.yml@master with: SERVICE_LOCATION: ./apitest secrets: @@ -157,18 +157,16 @@ jobs: SERVICE_LOCATION: apitest BUILD_ARTIFACT: apitest-mimoto-local steps: - - uses: actions/checkout@v3 - - name: Set up JDK 21 - uses: actions/setup-java@v3 + - uses: actions/checkout@v2 + - name: Set up JDK 11 + uses: actions/setup-java@v1 with: - distribution: 'temurin' - java-version: '21' + ref: ${{ github.ref }} + java-version: 11 server-id: ossrh # Value of the distributionManagement/repository/id field of the pom.xml settings-path: ${{ github.workspace }} # location for the settings.xml file - - name: Setup the settings file for ossrh server run: echo " ossrh ${{secrets.ossrh_user}} ${{secrets.ossrh_secret}} ossrh true gpg2 ${{secrets.gpg_secret}} allow-snapshots true snapshots-repo https://oss.sonatype.org/content/repositories/snapshots false true releases-repo https://oss.sonatype.org/service/local/staging/deploy/maven2 true false sonar . https://sonarcloud.io false " > $GITHUB_WORKSPACE/settings.xml - - name: Build Automationtests with Maven run: | cd ${{ env.SERVICE_LOCATION}} @@ -188,7 +186,6 @@ jobs: with: name: ${{ env.BUILD_ARTIFACT }} path: ${{ env.BUILD_ARTIFACT }}.zip - - uses: 8398a7/action-slack@v3 with: status: ${{ job.status }} @@ -198,39 +195,39 @@ jobs: if: failure() # Pick up events even if the job fails or is canceled. build-dockers_apitest_mimoto: - needs: build-apitest-mimoto-local - strategy: - matrix: - include: - - SERVICE_LOCATION: 'apitest' - SERVICE_NAME: 'apitest-mimoto' - BUILD_ARTIFACT: 'apitest-mimoto-local' - ONLY_DOCKER: true - fail-fast: false - name: ${{ matrix.SERVICE_NAME }} - uses: mosip/kattu/.github/workflows/docker-build.yml@master-java21 - with: - SERVICE_LOCATION: ${{ matrix.SERVICE_LOCATION }} - SERVICE_NAME: ${{ matrix.SERVICE_NAME }} - BUILD_ARTIFACT: ${{ matrix.BUILD_ARTIFACT }} - ONLY_DOCKER: ${{ matrix.ONLY_DOCKER }} - secrets: - DEV_NAMESPACE_DOCKER_HUB: ${{ secrets.DEV_NAMESPACE_DOCKER_HUB }} - ACTOR_DOCKER_HUB: ${{ secrets.ACTOR_DOCKER_HUB }} - RELEASE_DOCKER_HUB: ${{ secrets.RELEASE_DOCKER_HUB }} - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }} + needs: build-apitest-mimoto-local + strategy: + matrix: + include: + - SERVICE_LOCATION: 'apitest' + SERVICE_NAME: 'apitest-mimoto' + BUILD_ARTIFACT: 'apitest-mimoto-local' + ONLY_DOCKER: true + fail-fast: false + name: ${{ matrix.SERVICE_NAME }} + uses: mosip/kattu/.github/workflows/docker-build.yml@master + with: + SERVICE_LOCATION: ${{ matrix.SERVICE_LOCATION }} + SERVICE_NAME: ${{ matrix.SERVICE_NAME }} + BUILD_ARTIFACT: ${{ matrix.BUILD_ARTIFACT }} + ONLY_DOCKER: ${{ matrix.ONLY_DOCKER }} + secrets: + DEV_NAMESPACE_DOCKER_HUB: ${{ secrets.DEV_NAMESPACE_DOCKER_HUB }} + ACTOR_DOCKER_HUB: ${{ secrets.ACTOR_DOCKER_HUB }} + RELEASE_DOCKER_HUB: ${{ secrets.RELEASE_DOCKER_HUB }} + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }} sonar_analysis_apitest_mimoto: - needs: build-maven-apitest-mimoto - if: "${{ github.event_name != 'pull_request' }}" - uses: mosip/kattu/.github/workflows/maven-sonar-analysis.yml@master-java21 - with: - SERVICE_LOCATION: ./apitest - secrets: - SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - ORG_KEY: ${{ secrets.ORG_KEY }} - OSSRH_USER: ${{ secrets.OSSRH_USER }} - OSSRH_SECRET: ${{ secrets.OSSRH_SECRET }} - OSSRH_TOKEN: ${{ secrets.OSSRH_TOKEN }} - GPG_SECRET: ${{ secrets.GPG_SECRET }} - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }} + needs: build-maven-apitest-mimoto + if: "${{ github.event_name != 'pull_request' }}" + uses: mosip/kattu/.github/workflows/maven-sonar-analysis.yml@master + with: + SERVICE_LOCATION: ./apitest + secrets: + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + ORG_KEY: ${{ secrets.ORG_KEY }} + OSSRH_USER: ${{ secrets.OSSRH_USER }} + OSSRH_SECRET: ${{ secrets.OSSRH_SECRET }} + OSSRH_TOKEN: ${{ secrets.OSSRH_TOKEN }} + GPG_SECRET: ${{ secrets.GPG_SECRET }} + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }} diff --git a/apitest/Dockerfile b/apitest/Dockerfile index 31027c67d..287c09bd2 100644 --- a/apitest/Dockerfile +++ b/apitest/Dockerfile @@ -1,4 +1,4 @@ -FROM mosipdev/openjdk-21-jre:latest +FROM openjdk:11 ARG SOURCE ARG COMMIT_HASH @@ -23,6 +23,15 @@ ARG container_user_gid=1001 ARG KUBECTL_VERSION=1.22.9 +# install packages and create user +RUN apt-get -y update \ +&& apt-get install -y unzip jq \ +&& groupadd -g ${container_user_gid} ${container_user_group} \ +&& useradd -u ${container_user_uid} -g ${container_user_group} -s /bin/sh -m ${container_user} \ +&& curl -LO "https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VERSION}/bin/linux/amd64/kubectl" \ +&& chmod +x kubectl \ +&& mv kubectl /usr/local/bin/ + # set working directory for the user WORKDIR /home/${container_user} @@ -32,17 +41,14 @@ ADD ./apitest/target/ $work_dir ADD entrypoint.sh $work_dir/entrypoint.sh -# install packages and create user -RUN apt-get -y update \ -&& apt-get install -y unzip jq curl \ -&& groupadd -g ${container_user_gid} ${container_user_group} \ -&& useradd -u ${container_user_uid} -g ${container_user_group} -s /bin/bash -m ${container_user} \ -&& curl -LO "https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VERSION}/bin/linux/amd64/kubectl" \ -&& mkdir -p /home/${container_user} \ -&& chmod +x kubectl $work_dir/entrypoint.sh \ -&& mv kubectl /usr/local/bin/ \ -&& chown -R ${container_user}:${container_user} /home/${container_user} /etc/ssl/certs/java/cacerts \ -&& chmod 644 /etc/ssl/certs/java/cacerts +RUN chmod +x $work_dir/entrypoint.sh + +#ADD ./testNgXmlFiles/ $work_dir/testNgXmlFiles/ + +# change permissions of file inside working dir +RUN chown -R ${container_user}:${container_user} /home/${container_user} /usr/local/openjdk-11/lib/security/cacerts + +RUN chmod 644 /usr/local/openjdk-11/lib/security/cacerts # select container user for all tasks USER ${container_user_uid}:${container_user_gid} @@ -54,4 +60,4 @@ ENV ENV_USER= ENV ENV_ENDPOINT= ENV ENV_TESTLEVEL=smokeAndRegression -ENTRYPOINT ["./entrypoint.sh"] \ No newline at end of file +ENTRYPOINT ["./entrypoint.sh"] diff --git a/apitest/pom.xml b/apitest/pom.xml index 187b5c46a..8ab08847f 100644 --- a/apitest/pom.xml +++ b/apitest/pom.xml @@ -6,7 +6,7 @@ apitest-mimoto jar apitest-mimoto - Parent project of MOSIP mimoto apitests + Parent project of apitest-mimoto https://github.com/mosip/mimoto 1.2.1-SNAPSHOT @@ -33,39 +33,157 @@ + + UTF-8 - 21 - 21 - 3.8.0 + 11 + 11 + 3.7.0 3.0.2 3.1.0 - 3.2.0 - 1.5 - 3.2.4 - 3.0.0 - 2.2.1 + 2.9 + 0.8.1 + 3.2 + 3.0.1 + 2.3 + false + 3.7.0.1746 + + 2.0.2.RELEASE + 2.0.7.RELEASE + 5.0.5.RELEASE + 2.0.0.RELEASE - 3.0.1 - apitest-mimoto-1.2.1-SNAPSHOT-jar-with-dependencies - + 2.0.7 + 1.5.20 + 2.9.2 - - - io.mosip.testrig.apirig.apitest.commons - apitest-commons - 1.2.1-SNAPSHOT - - + 3.6.2 + 3.7.0 + + + + 1.2 + 3.0.0 + 1.3 + 2.2 + 2.0.1.Final + 2.2.6 + + + 1.4.197 + 5.1.46 + 42.2.2 + 2.5.0 + 6.0.12.Final + + + 1.10.19 + 1.7.4 + 2.0.0-beta.5 + + + 3.6.1 + 3.7 + 2.6 + 1.11 + 4.3 + 1.9.2 + 2.2 + 4.5.6 + 19.0 + 1.18.8 + 0.1.54 + 1.4.0 + 7.1.0 + 2.0.0 + 5.5.13 + 2.3.23 + 1.7 + 2.0 + 1.5.2 + 2.1.1 + 1.60 + 63.1 + 1.0.0 + 3.3.3 + 2.8.1 + 4.1.0-incubating + 1.11.368 + 0.2.4 + 2.3.0 + 3.0.1 + 1.9.12 + 0.6.0 + 2.0.0.AM2 + + + + + + + + 0.8.2 + 2.2 + 3.2 + UTF-8 + 3.7.0 + 3.0.1 + + + 1.1.6 + 1.7.19 + 1.10.19 + + + 1.4.6 + + + 5.0.6.RELEASE + + + 5.4.2.Final + + + 2.1.1 + + + 10.13.1.1 + + + 3.4.0 + + + 1.3.5 + + 0.3.12 + + + 0.3.0 + + + 1.1.2-incubating + 1.2.0.1-B1 + 0.4.7 + 3.0.0 + 2.41.2 + 2.4.0 + 3.3.9 + 3.0.7 + 6.11 + 1.13 + apitest-mimoto-1.2.0.1-SNAPSHOT-jar-with-dependencies + + - org.apache.maven.plugins @@ -84,167 +202,166 @@ maven-compiler-plugin - ${maven.compiler.version} + 3.5.1 - ${maven.compiler.source} - ${maven.compiler.target} + 11 + 11 -Dfile.encoding=UTF-8 + + org.apache.maven.plugins + maven-javadoc-plugin + 3.2.0 + + none + + - org.apache.maven.plugins - maven-javadoc-plugin - ${maven.javadoc.version} - - none - - - - pl.project13.maven - git-commit-id-plugin - ${git.commit.id.plugin.version} - - - populate-git-commit-information - - revision - - - true - MM/dd/yyyy HH:mm:ss Z - 8 - true - - ${project.build.outputDirectory}/git.properties - - - - - ${project.basedir}/.git - - - - org.apache.maven.plugins - maven-gpg-plugin - ${maven.gpg.plugin.version} - - - sign-artifacts - verify - - sign - - - - --pinentry-mode - loopback - - - - - - - org.apache.maven.plugins - maven-shade-plugin - ${maven.shade.plugin.version} - - - - shade - - - ${fileName} - - - - - - - io.mosip.testrig.apirig.testrunner.MosipTestRunner - - - - - - *:* - - META-INF/*.SF - META-INF/*.DSA - META-INF/*.RSA - - - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - true - true - - - ${project.name} - ${project.version} - ${user.name} - ${os.name} - ${maven.build.timestamp} - ${env.BUILD_NUMBER} - ${env.BUILD_ID} - ${env.BUILD_URL} - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - - true - true - - - ${project.name} - ${project.version} - ${user.name} - ${os.name} - ${maven.build.timestamp} - ${env.BUILD_NUMBER} - ${env.BUILD_ID} - ${env.BUILD_URL} - - - - + pl.project13.maven + git-commit-id-plugin + 3.0.1 + + + populate-git-commit-information + + revision + + + true + MM/dd/yyyy HH:mm:ss Z + 8 + true + ${project.build.outputDirectory}/git.properties + + + + + ${project.basedir}/.git + + + - org.apache.maven.plugins - maven-source-plugin - ${maven.source.plugin.version} - - - attach-sources - - jar-no-fork - - - + org.apache.maven.plugins + maven-gpg-plugin + 1.5 + + + sign-artifacts + verify + + sign + + + + --pinentry-mode + loopback + + + + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.4 + + + + shade + + + ${fileName} + + + + + + io.mosip.testrig.apirig.testrunner.MosipTestRunner + + + + + + *:* + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + + + + + + org.apache.maven.plugins + maven-jar-plugin + ${maven.jar.plugin.version} + + + + true + true + + + ${project.name} + ${project.version} + ${user.name} + ${os.name} + ${maven.build.timestamp} + ${env.BUILD_NUMBER} + ${env.BUILD_ID} + ${env.BUILD_URL} + + + + + + org.apache.maven.plugins + maven-war-plugin + ${maven.war.plugin.version} + + + + true + true + + + ${project.name} + ${project.version} + ${user.name} + ${os.name} + ${maven.build.timestamp} + ${env.BUILD_NUMBER} + ${env.BUILD_ID} + ${env.BUILD_URL} + + + + + + org.apache.maven.plugins + maven-source-plugin + 2.2.1 + + + attach-sources + + jar-no-fork + + + + org.apache.maven.plugins maven-antrun-plugin - ${maven.antrun.plugin.version} + 3.0.0 make-jar-executable @@ -254,10 +371,8 @@ - - + + @@ -265,4 +380,17 @@ - \ No newline at end of file + + + + + + + io.mosip.testrig.apirig.apitest.commons + apitest-commons + 1.2.1-SNAPSHOT + + + + + diff --git a/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml b/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml index b0b4aeed1..f7527f4d6 100644 --- a/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml +++ b/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml @@ -2976,4 +2976,4 @@ WalletBinding: "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } -}' +}' \ No newline at end of file From 0f4d933381f3a0340622e5bdca3dfbcccb4b7c9e Mon Sep 17 00:00:00 2001 From: Swati Goel Date: Wed, 26 Jun 2024 11:30:08 +0530 Subject: [PATCH 162/860] [INJIMOB-857] - add docker-compose Signed-off-by: Swati Goel --- .talismanrc | 6 +- certs/oidckeystore.p12 | Bin 4540 -> 0 bytes docker-compose/README.md | 37 +++ docker-compose/config/CredentialTemplate.html | 38 +++ .../config/mimoto-default.properties | 183 ++++++++------- .../config/mimoto-issuers-config.json | 219 ++++++------------ docker-compose/docker-compose.yml | 30 +++ .../loader_path/kernel-auth-adapter.jar | 0 docker-compose/nginx.conf | 12 + 9 files changed, 293 insertions(+), 232 deletions(-) delete mode 100644 certs/oidckeystore.p12 create mode 100644 docker-compose/README.md create mode 100644 docker-compose/config/CredentialTemplate.html create mode 100644 docker-compose/docker-compose.yml delete mode 100644 docker-compose/loader_path/kernel-auth-adapter.jar create mode 100644 docker-compose/nginx.conf diff --git a/.talismanrc b/.talismanrc index 4ad817fba..065fe80bf 100644 --- a/.talismanrc +++ b/.talismanrc @@ -70,4 +70,8 @@ fileignoreconfig: - filename: src/main/java/io/mosip/mimoto/util/JoseUtil.java checksum: 65c4d7f9d4f28e7e4e5376e4f6cdce8b49b485c3ea2ab214f72d018d5d73b6aa - filename: README.md - checksum: f3e7693f4f554640b93c82e438d28d015f8c09be622c22ac6847e528830968f6 \ No newline at end of file + checksum: f3e7693f4f554640b93c82e438d28d015f8c09be622c22ac6847e528830968f6 +- filename: docker-compose/docker-compose.yml + checksum: 857f5dcebdef810161b9ef09ad078c091c7d9969035bc45132975b296675dac9 +- filename: docker-compose/config/mimoto-default.properties + checksum: 7d48484daa8b3e6e53d8a5958dd3597207d4bd1368a8422d99c9b28d4aefc247 \ No newline at end of file diff --git a/certs/oidckeystore.p12 b/certs/oidckeystore.p12 deleted file mode 100644 index 92e794eb7d4fa586f6cdc686394475014b55f84d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4540 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 D{pE6a diff --git a/docker-compose/README.md b/docker-compose/README.md new file mode 100644 index 000000000..24b860d11 --- /dev/null +++ b/docker-compose/README.md @@ -0,0 +1,37 @@ +## Overview + +This is the docker-compose setup to run mimoto which act as BFF for Inji mobile and backend for Inji web. This is not for production use. + +## What is in the docker-compose folder? + +1. certs folder holds the p12 file which is being created as part of OIDC client onboarding. +2. "config" folder holds the mimoto system properties file, issuer configuration and credential template. +3. "loader_path" this is mimoto mount volume from where all the runtime dependencies are loaded to classpath. +4. "docker-compose.yml" file with mimoto setup. + + +## How to run this setup? + +1. Create loader_path folder in the same directory and Download the kernel auth adapter from [here](https://repo1.maven.org/maven2/io/mosip/kernel/kernel-auth-adapter/1.2.0.1/kernel-auth-adapter-1.2.0.1.jar). Copy the downloaded jar under loader_path directory. + +2. Add Id providers as an issuer in mimoto-issuers-config.json + +3. Start esignet services and update esignet host references in mimoto-default.properties and mimoto-issuers-config.json + +4. Create certs folder in the same directory and create OIDC client. Add key in oidckeystore.p12 and copy this file under certs folder. +Refer [here](https://docs.mosip.io/inji/inji-mobile-wallet/customization-overview/credential_providers) to create client +* Update client_id and client_alias as per onboarding in mimoto-issuers-config.json file. + +5. Start the docker-compose file + +> docker-compose up + +7. Access Apis as + * http://localhost:8099/residentmobileapp/allProperties + * http://localhost:8099/residentmobileapp/issuers + * http://localhost:8099/residentmobileapp/issuers/Sunbird + * http://localhost:8099/residentmobileapp/issuers/Sunbird/credentialTypes + + +Note: +- Replace mosipbox.public.url, mosip.api.public.url with your public accessible domain. For dev or local env [ngrok](https://ngrok.com/docs/getting-started/) is recommended. diff --git a/docker-compose/config/CredentialTemplate.html b/docker-compose/config/CredentialTemplate.html new file mode 100644 index 000000000..204c1d945 --- /dev/null +++ b/docker-compose/config/CredentialTemplate.html @@ -0,0 +1,38 @@ + + + + + $titleName + + +
+
+ $titleName +
+
+
+ #if (!$face) +
+ Logo +
+ #else + Logo + #end +
+ Logo +
+
+
+ #foreach($entry in $rowProperties.entrySet()) + #if($entry.value) +
+
$entry.key
+
$entry.value
+
+ #end + #end +
+
+
+ + \ No newline at end of file diff --git a/docker-compose/config/mimoto-default.properties b/docker-compose/config/mimoto-default.properties index b032d43bd..0bc11d23c 100644 --- a/docker-compose/config/mimoto-default.properties +++ b/docker-compose/config/mimoto-default.properties @@ -1,25 +1,60 @@ +server.port=8099 +server.servlet.context-path=/residentmobileapp +health.config.enabled=false +mosip.service.end-points=/**/* + +mosipbox.public.url=http://localhost:${server.port} +mosip.api.public.url=http://localhost:${server.port} +mosip.resident.url=https://api.collab.mosip.net/v1/resident +mosip.esignet.host=https://esignet.collab.mosip.net +keycloak.external.url=https://iam.collab.mosip.net/ +mosip.kernel.authmanager.url=http://authmanager.kernel/ +mosip.websub.url=http://websub.websub/ + +# START inji-default.properties + +mosip.inji.allowedAuthType=demo,otp,bio-Finger,bio-Iris,bio-Face +mosip.inji.allowedEkycAuthType=demo,otp,bio-Finger,bio-Iris,bio-Face +mosip.inji.allowedInternalAuthType=otp,bio-Finger,bio-Iris,bio-Face +mosip.inji.faceSdkModelUrl=https://drive.google.com/u/0/uc?id=1Z8Puici9alcmH-oU-VoXlHXCagAe1ago&export=download +# maximum number of retry for downloading vc +mosip.inji.vcDownloadMaxRetry=10 +# pool interval in milli seconds +mosip.inji.vcDownloadPoolInterval=6000 +# validate binding audience url to be sent in token +mosip.inji.audience=${mosip.api.public.url}/v1/idpbinding/validate-binding +# issuer to be sent in token +mosip.inji.issuer=residentapp +# warning screen domain name +mosip.inji.warningDomainName=${mosip.api.public.url} +#timeout for vc download api via openid4vci flow in milliseconds +mosip.inji.openId4VCIDownloadVCTimeout=30000 +# inji documentation url +mosip.inji.aboutInjiUrl=https://docs.mosip.io/inji/inji-mobile-wallet/overview + +# END inji-default.properties + # START bootstrap.properties -spring.cloud.config.uri=localhost -spring.cloud.config.label=develop +spring.cloud.config.uri=http://nginx/ spring.profiles.active=local +spring.cloud.config.label=develop spring.cloud.config.name=mimoto,inji spring.application.name=mimoto +#config.server.file.storage.uri=https://raw.githubusercontent.com/mosip/mosip-config/collab1/ +config.server.file.storage.uri=http://nginx/ + management.endpoint.health.show-details=always management.endpoints.web.exposure.include=info,health,refresh -server.port=8088 -server.servlet.context-path=/v1/mimoto -health.config.enabled=false - openapi.info.title=${spring.application.name} openapi.info.description=${spring.application.name} openapi.info.version=1.0 openapi.info.license.name=Mosip openapi.info.license.url=https://docs.mosip.io/platform/license -openapi.service.servers[0].url=${mosipbox.public.url}${server.servlet.context-path} +openapi.service.servers[0].url=${mosip.api.public.url}${server.servlet.context-path} openapi.service.servers[0].description=${spring.application.name} openapi.group.name=${openapi.info.title} openapi.group.paths[0]=/** @@ -27,32 +62,28 @@ springdoc.swagger-ui.disable-swagger-default-url=true springdoc.swagger-ui.tagsSorter=alpha springdoc.swagger-ui.operationsSorter=alpha - # END bootstrap.properties # MOSIP -mosipbox.public.url=https://api-internal.dev1.mosip.net -public.internet.url=https://api.dev1.mosip.net -public.url=https://api-internal.dev1.mosip.net -keycloak.internal.url=https://iam.dev1.mosip.net/ -# Resident service -mosip.resident.base.url=${mosipbox.public.url}/resident/v1 +public.url=${mosip.api.public.url}/v1/mimoto +mosip.resident.base.url=${mosip.resident.url}/resident/v1 +idp.binding.base.url=https://${mosip.esignet.host}/v1/esignet/binding +mosip.iam.adapter.disable-self-token-rest-template=true RESIDENT_OTP=${mosip.resident.base.url}/req/otp -RESIDENT_INDIVIDUALID_OTP=${mosip.resident.base.url}/individualId/otp -RESIDENT_AID_GET_INDIVIDUALID=${mosip.resident.base.url}/aid/status -#RESIDENT_INDIVIDUALID_OTP=https://api-internal.dev2.mosip.net/resident/v1/req/individualId/otp RESIDENT_CREDENTIAL_REQUEST=${mosip.resident.base.url}/req/credential RESIDENT_CREDENTIAL_REQUEST_STATUS=${RESIDENT_CREDENTIAL_REQUEST}/status RESIDENT_VID=${mosip.resident.base.url}/vid RESIDENT_AUTH_LOCK=${mosip.resident.base.url}/req/auth-lock RESIDENT_AUTH_UNLOCK=${mosip.resident.base.url}/req/auth-unlock -BINDING_OTP=${public.internet.url}/v1/esignet/binding/binding-otp -WALLET_BINDING=${public.internet.url}/v1/esignet/binding/wallet-binding -mosip.authmanager.url=${mosipbox.public.url}/v1/authmanager/authenticate/clientidsecretkey +RESIDENT_INDIVIDUALID_OTP=${mosip.resident.base.url}/individualId/otp +RESIDENT_AID_GET_INDIVIDUALID=${mosip.resident.base.url}/aid/status +BINDING_OTP=${idp.binding.base.url}/binding-otp +WALLET_BINDING=${idp.binding.base.url}/wallet-binding + -# Mimoto mobileid backend +# Resident App credential.template=template.json credential.sample=sample_credential.json credential.data.path=data @@ -60,39 +91,36 @@ safetynet.api.key= safetynet.api.url=https://www.googleapis.com/androidcheck/v1/attestations/verify?key=${safetynet.api.key} registration.processor.print.textfile=registration-processor-print-text-file.json -# Websub - -# Localhost websub -# mosip.event.hubUrl=http://localhost:9191/websub -# mosip.event.hub.subUrl=${mosip.event.hubUrl}/hub -# mosip.event.hub.pubUrl=${mosip.event.hubUrl}/publish -# Dev sandbox -mosip.event.hubUrl=${mosipbox.public.url}/hub/ +# Websub +mosip.event.hubUrl=${mosip.websub.url}/hub/ mosip.event.hub.subUrl=${mosip.event.hubUrl} mosip.event.hub.pubUrl=${mosip.event.hubUrl} # MOSIP partner - mosip.partner.id=mpartner-default-mobile +mosip.event.callBackUrl=${public.url}/credentialshare/callback/notify +mosip.event.topic=${mosip.partner.id}/CREDENTIAL_ISSUED +mosip.event.secret=Kslk30SNF2AChs2 + + mosip.partner.crypto.p12.filename=keystore.p12 -mosip.partner.crypto.p12.password=abc123 +mosip.partner.crypto.p12.password=1234cryptopwd mosip.partner.crypto.p12.alias=partner -mosip.partner.encryption.key=123456 - +mosip.partner.encryption.key=${mosip.partner.crypto.p12.password} mosip.partner.prependThumbprint=true + mosip.datashare.partner.id=mpartner-default-resident mosip.datashare.policy.id=mpolicy-default-resident -mosip.event.callBackUrl=${public.url}/credentialshare/callback/notify -mosip.event.topic=${mosip.partner.id}/CREDENTIAL_ISSUED -mosip.event.secret=Kslk30SNF2AChs2 + + csrf.disabled=true # Delayed websub subscription. Default is 5 seconds in ms. mosip.event.delay-millisecs=5000 # Websub re-subscription workaround for losing subscribed topic when MOSIP websub update or restart. Default is 5 minutes in ms. -websub-resubscription-delay-millisecs=300000 +websub-resubscription-delay-millisecs=86400000 #-------------TOKEN GENERATION---------------- #Token generation request id @@ -113,13 +141,13 @@ token.request.secretKey=abc123 token.request.issuerUrl=${keycloak.internal.url}/auth/realms/mosip #Audit Service -AUDIT=${mosipbox.public.url}/v1/auditmanager/audits -AUDIT_URL=${mosipbox.public.url}/v1/auditmanager/audits -KEYBASEDTOKENAPI=${mosipbox.public.url}/v1/authmanager/authenticate/clientidsecretkey +AUDIT=${mosip.kernel.auditmanager.url}/v1/auditmanager/audits +AUDIT_URL=${mosip.kernel.auditmanager.url}/v1/auditmanager/audits +KEYBASEDTOKENAPI=${mosip.kernel.authmanager.url}/v1/authmanager/authenticate/clientidsecretkey #Master Data Services # MASTER=http://kernel-masterdata-service/v1/masterdata -MASTER=${mosipbox.public.url}/v1/masterdata +MASTER=${mosip.kernel.masterdata.url}/v1/masterdata TEMPLATES=${MASTER}/templates #Packet receiver application version @@ -151,7 +179,7 @@ mosip.mandatory-languages=eng #----------------------- CBEFF Util-------------------------------------------------- # Cbeff URL where the files will be stored in git, change it accordingly in case of change of storage location. # mosip.kernel.xsdstorage-uri=${spring.cloud.config.uri}/${spring.application.name}/${spring.profiles.active}/${spring.cloud.config.label}/ -mosip.kernel.xsdstorage-uri=https://raw.githubusercontent.com/mosip/mosip-config/qa-1201-B2/ +mosip.kernel.xsdstorage-uri=https://raw.githubusercontent.com/mosip/mosip-config/develop/ # Cbeff XSD file name in config server mosip.kernel.xsdfile=mosip-cbeff.xsd @@ -171,7 +199,7 @@ logging.level.io.mosip=INFO # logging.level.io.mosip.kernel.auth.defaultadapter.filter=INFO logging.level.io.mosip.kernel.auth.defaultadapter=DEBUG logging.level.org.springframework.http.client=DEBUG -logging.level.io.mosip.mimoto=INFO +logging.level.io.mosip.residentapp=INFO logging.level.reactor.netty.http.client=INFO # tomcat access logs server.tomcat.accesslog.enabled=true @@ -180,38 +208,27 @@ server.tomcat.accesslog.prefix=stdout server.tomcat.accesslog.buffered=false server.tomcat.accesslog.suffix= server.tomcat.accesslog.file-date-format= -server.tomcat.accesslog.pattern={"@timestamp":"%{yyyy-MM-dd'T'HH:mm:ss.SSS'Z'}t","level":"ACCESS","level_value":70000,"traceId":"%{X-B3-TraceId}i","appId":"%{X-AppId}i","statusCode":%s,"req.requestURI":"%U","bytesSent":%b,"timeTaken":%T,"appName":"${spring.application.name}"} +server.tomcat.accesslog.pattern={"@timestamp":"%{yyyy-MM-dd'T'HH:mm:ss.SSS'Z'}t","level":"ACCESS","level_value":70000,"traceId":"%{X-B3-TraceId}i","statusCode":%s,"req.requestURI":"%U","bytesSent":%b,"timeTaken":%T,"appName":"${spring.application.name}"} server.tomcat.accesslog.className=io.mosip.kernel.core.logger.config.SleuthValve registration.processor.unMaskedUin.length=5 IDSchema.Version=1.0 registration.processor.identityjson=identity-mapping.json registration.processor.demographic.identity=identity -CREATEDATASHARE=${mosipbox.public.url}/v1/datashare/create -DECRYPTPINBASSED=${mosipbox.public.url}/v1/keymanager/decryptWithPin - -# config.server.file.storage.uri=${spring.cloud.config.uri}/${spring.application.name}/${spring.profiles.active}/${spring.cloud.config.label}/ -config.server.file.storage.uri=${mosipbox.public.url}/config/print/mz/develop/ - -# websub authentication - auth adapter -mosip.iam.adapter.clientid=mpartner-default-mobile - -#dev2 -#mosip.iam.adapter.clientsecret=mJQ3g1dPbonDFNW8 - -#dev1 -mosip.iam.adapter.clientsecret=WqzUI7CYDXw6DVTV - -#qa-inji -#mosip.iam.adapter.clientsecret=vl3ox2rvSeW78LzL +CREATEDATASHARE=${mosip.datashare.url}/v1/datashare/create +DECRYPTPINBASSED=${mosip.kernel.keymanager.url}/v1/keymanager/decryptWithPin +#Auth Adapter rest template authentication configs mosip.iam.adapter.appid=partner +mosip.iam.adapter.clientid=mpartner-default-mobile +mosip.iam.adapter.clientsecret=1234secret +auth.server.admin.issuer.uri=${keycloak.external.url}/auth/realms/ -mosip.iam.adapter.issuerURL=${mosipbox.public.url}/auth/realms/mosip -mosip.authmanager.base-url=${mosipbox.public.url}/v1/authmanager +mosip.iam.adapter.issuerURL=${keycloak.internal.url}/auth/realms/mosip +mosip.authmanager.base-url=${mosip.kernel.authmanager.url}/v1/authmanager mosip.authmanager.client-token-endpoint=${mosip.authmanager.base-url}/authenticate/clientidsecretkey -auth.server.admin.validate.url=${mosip.authmanager.base-url}/v1/authmanager/authorize/admin/validateToken +auth.server.admin.validate.url=${mosip.kernel.authmanager.url}/v1/authmanager/authorize/admin/validateToken # in minutes @@ -220,37 +237,27 @@ mosip.iam.adapter.validate-expiry-check-rate=1440 # in minutes mosip.iam.adapter.renewal-before-expiry-interval=1440 -#this should be false if you don’t use this restTemplate true if you do +#this should be false if you don?t use this restTemplate true if you do -auth.server.admin.issuer.uri=${keycloak.internal.url}/auth/realms/ mosip.iam.adapter.self-token-renewal-enable=true -mosip.auth.filter_disable=false +mosip.auth.filter_disable=true mosip.auth.adapter.impl.basepackage=io.mosip.kernel.auth.defaultadapter mosip.kernel.auth.appids.realm.map={prereg:'mosip',ida:'mosip',registrationclient:'mosip',regproc:'mosip',partner:'mosip',resident:'mosip',admin:'mosip',crereq:'mosip',creser:'mosip',datsha:'mosip',idrepo:'mosip'} -wallet.binding.partner.id=mpartner-default-keybindingtoken -wallet.binding.partner.api.key=Aci9jg28B8mO_LDfDXo3ZTp5_HKgEMun2tYyHCa1e8k -#wallet.binding.partner.id=mpartner-default-mimotobinding -#wallet.binding.partner.api.key=14378 -# OpenID +vercred.type.vid=VID +mosip.idp.partner.id=mpartner-default-mobile +mosip.idp.partner.encryption.key=Aci9jg28B8mO_LDfDXo3ZTp5_HKgEMun2tYyHCa1e8k +wallet.binding.partner.id=mpartner-default-mimotokeybinding +wallet.binding.partner.api.key=1234walletbindingkey + +#mosip notification otp channel config +mosip.notificationtype=SMS|EMAIL|PHONE + +# Configurations related to openid4vc mosip.openid.issuers=mimoto-issuers-config.json -mosip.openid.issuer.credentialSupported=/wellKnownIssuer/Insurance.json -mosip.openid.htmlTemplate=CredentialTemplate.html -#configurations related to openid4vc +mosip.openid.issuer.credentialSupported=sunbird-insurance-wellKnown.json +mosip.openid.htmlTemplate=credential-template.html mosip.oidc.client.assertion.type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer mosip.oidc.p12.filename=oidckeystore.p12 mosip.oidc.p12.password=5YBx6QT2wbY8Ls6w mosip.oidc.p12.path=certs/ - - - - - - - - - - - - - diff --git a/docker-compose/config/mimoto-issuers-config.json b/docker-compose/config/mimoto-issuers-config.json index baf2dc074..10024dedc 100644 --- a/docker-compose/config/mimoto-issuers-config.json +++ b/docker-compose/config/mimoto-issuers-config.json @@ -1,230 +1,163 @@ { "issuers": [ - { - "credential_issuer": "Mosip", - "display": [ - { - "name": "UIN, VID, AID", - "logo": { - "url": "https://mosip.io/images/footer/foot-logo-b.png", - "alt_text": "mosip logo" - }, - "title": "Download MOSIP Credentials via OTP", - "description":"Download credentials by providing UIN, VID or AID", - "language": "en" - }, - { - "name": "UIN, VID, AID", - "logo": { - "url": "https://mosip.io/images/footer/foot-logo-b.png", - "alt_text": "شعار موسيب" - }, - "title": "قم بتنزيل بيانات اعتماد MOSIP عبر OTP", - "description": "قم بتنزيل بيانات الاعتماد من خلال توفير UIN أو VID أو AID", - "language": "ar" - }, - { - "name": "UIN, VID, AID", - "logo": { - "url": "https://mosip.io/images/footer/foot-logo-b.png", - "alt_text": "मोसिप लोगो" - }, - "title": "OTP के माध्यम से MOSIP क्रेडेंशियल डाउनलोड करें", - "description":"यूआईएन, वीआईडी या एआईडी प्रदान करके क्रेडेंशियल डाउनलोड करें", - "language": "hi" - }, - { - "name": "UIN, VID, AID", - "logo": { - "url": "https://mosip.io/images/footer/foot-logo-b.png", - "alt_text": "mosip ಲೋಗೋ" - }, - "title": "OTP ಮೂಲಕ MOSIP ರುಜುವಾತುಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿ", - "description": "UIN, VID ಅಥವಾ AID ಒದಗಿಸುವ ಮೂಲಕ ರುಜುವಾತುಗಳನ್ನು ಡೌನ್\u200Cಲೋಡ್ ಮಾಡಿ", - "language": "kn" - }, - { - "name": "UIN, VID, AID", - "logo": { - "url": "https://mosip.io/images/footer/foot-logo-b.png", - "alt_text": "mosip சின்னம்" - }, - "title": "OTP வழியாக MOSIP சான்றுகளைப் பதிவிறக்கவும்", - "description":"UIN, VID அல்லது AID ஐ வழங்குவதன் மூலம் நற்சான்றிதழ்களைப் பதிவிறக்கவும்", - "language": "ta" - }, - { - "name": "UIN, VID, AID", - "logo": { - "url": "https://mosip.io/images/footer/foot-logo-b.png", - "alt_text": "logo ng mosip" - }, - "title": "I-download ang Mga Kredensyal ng MOSIP sa pamamagitan ng OTP", - "description":"Mag-download ng mga kredensyal sa pamamagitan ng pagbibigay ng UIN, VID o AID", - "language": "fil" - } - ], - "protocol": "OTP", - "enabled": "true" - }, { "credential_issuer": "ESignet", "display": [ { - "name": "e-Signet", + "name": "National Identity Department", "logo": { - "url": "https://mosip.io/images/footer/foot-logo-b.png", - "alt_text": "esignet-logo" + "url": "https://api.collab.mosip.net/inji/mosip-logo.png", + "alt_text": "mosip-logo" }, - "title": "Download MOSIP Credentials", - "description": "Download credentials by providing UIN or VID", + "title": "National Identity Department", + "description": "Download MOSIP National / Foundational Identity Credential", "language": "en" }, { - "name": "e-Signet", + "name": "دائرة الهوية الوطنية", "logo": { - "url": "https://mosip.io/images/footer/foot-logo-b.png", - "alt_text": "شعار موسيب" + "url": "https://api.collab.mosip.net/inji/mosip-logo.png", + "alt_text": "mosip-logo" }, - "title": "قم بتنزيل بيانات اعتماد MOSIP", - "description": "توفير UIN أو VIDقم بتنزيل بيانات الاعتماد عن طريق" , + "title": "دائرة الهوية الوطنية", + "description": "قم بتنزيل بيانات اعتماد الهوية الوطنية / التأسيسية MOSIP" , "language": "ar" }, { - "name": "e-Signet", + "name": "राष्ट्रीय पहचान विभाग", "logo": { - "url": "https://mosip.io/images/footer/foot-logo-b.png", - "alt_text": "मोसिप लोगो" + "url": "https://api.collab.mosip.net/inji/mosip-logo.png", + "alt_text": "mosip-logo" }, - "title": "MOSIP क्रेडेंशियल डाउनलोड करेंं", - "description":"यूआईएन या वीआईडी प्रदान करके क्रेडेंशियल डाउनलोड करें", + "title": "राष्ट्रीय पहचान विभाग", + "description":"MOSIP नेशनल/फाउंडेशनल आइडेंटिटी क्रेडेंशियल डाउनलोड करेंं", "language": "hi" }, { - "name": "e-Signet", + "name": "ರಾಷ್ಟ್ರೀಯ ಗುರುತಿನ ಇಲಾಖೆ", "logo": { - "url": "https://mosip.io/images/footer/foot-logo-b.png", - "alt_text": "mosip ಲೋಗೋ" + "url": "https://api.collab.mosip.net/inji/mosip-logo.png", + "alt_text": "mosip-logo" }, - "title": "MOSIP ರುಜುವಾತುಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿ", - "description": "UIN ಅಥವಾ VID ಒದಗಿಸುವ ಮೂಲಕ ರುಜುವಾತುಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿ", + "title": "ರಾಷ್ಟ್ರೀಯ ಗುರುತಿನ ಇಲಾಖೆ", + "description": "MOSIP ರಾಷ್ಟ್ರೀಯ / ಫೌಂಡೇಶನಲ್ ಐಡೆಂಟಿಟಿ ರುಜುವಾತು ಡೌನ್\u200Cಲೋಡ್ ಮಾಡಿ", "language": "kn" }, { - "name": "e-Signet", + "name": "தேசிய அடையாளத் துறை", "logo": { - "url": "https://mosip.io/images/footer/foot-logo-b.png", - "alt_text": "mosip லோகோ" + "url": "https://api.collab.mosip.net/inji/mosip-logo.png", + "alt_text": "mosip-logo" }, - "title": "MOSIP சான்றுகளைப் பதிவிறக்கவும்", - "description":"UIN அல்லது VIDஐ வழங்குவதன் மூலம் நற்சான்றிதழ்களைப் பதிவிறக்கவும்", + "title": "தேசிய அடையாளத் துறை", + "description":"MOSIP தேசிய / அடிப்படை அடையாளச் சான்றிதழைப் பதிவிறக்கவும்", "language": "ta" }, { - "name": "e-Signet", + "name": "National Identity Department", "logo": { - "url": "https://mosip.io/images/footer/foot-logo-b.png", - "alt_text": "logo ng mosip" + "url": "https://api.collab.mosip.net/inji/mosip-logo.png", + "alt_text": "mosip-logo" }, - "title": "I-download ang Mga Kredensyal ng MOSIP", - "description":"Mag-download ng mga kredensyal sa pamamagitan ng pagbibigay ng UIN o VID", + "title": "National Identity Department", + "description":"I-download ang MOSIP National / Foundational Identity Credential", "language": "fil" } ], "protocol": "OpenId4VCI", - "client_id": "${mimoto.oidc.partner.clientid}", + "client_id": "mpartner-default-mimotooidc", "client_alias": "mpartner-default-mimotooidc", "scopes_supported": ["mosip_identity_vc_ldp"], "additional_headers": { "Accept": "application/json" }, - ".well-known": "https://${mosip.esignet.host}/.well-known/openid-credential-issuer", + ".well-known": "https://esignet.collab.mosip.net/.well-known/openid-credential-issuer?version=v11", "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", - "authorization_endpoint": "https://${mosip.esignet.host}/authorize", - "authorization_audience": "https://${mosip.esignet.host}/v1/esignet/oauth/v2/token", - "token_endpoint": "https://${mosip.api.public.host}/residentmobileapp/get-token/ESignet", - "proxy_token_endpoint": "https://${mosip.api.public.host}/v1/esignet/oauth/v2/token", - "credential_endpoint": "https://${mosip.api.public.host}/v1/esignet/vci/credential", + "authorization_endpoint": "https://esignet.collab.mosip.net/authorize", + "authorization_audience": "https://esignet.collab.mosip.net/v1/esignet/oauth/v2/token", + "token_endpoint": "https://api.collab.mosip.net/residentmobileapp/get-token/ESignet", + "proxy_token_endpoint": "https://api.collab.mosip.net/v1/esignet/oauth/v2/token", + "credential_endpoint": "https://api.collab.mosip.net/v1/esignet/vci/credential", "credential_type": ["VerifiableCredential", "MOSIPVerifiableCredential"], - "credential_audience": "https://${mosip.esignet.host}/v1/esignet", + "credential_audience": "https://esignet.collab.mosip.net/v1/esignet", "enabled": "true" }, { "credential_issuer": "Sunbird", "display": [ { - "name": "Sunbird RC Insurance Verifiable Credential", + "name": "Veridonia Insurance Company", "logo": { - "url": "https://sunbird.org/images/sunbird-logo-new.png", - "alt_text": "a square logo of a Sunbird" + "url": "https://api.collab.mosip.net/inji/veridonia-logo.png", + "alt_text": "a Veridonia logo" }, "language": "en", - "title": "Download Sunbird Credentials", - "description": "Download credentials with your Policy Number" + "title": "Veridonia Insurance Company", + "description": "Download Insurance Credentials using policy details" }, { - "name": "بيانات الاعتماد التي يمكن التحقق منها للتأمين Sunbird RC", + "name": "شركة فيريدونيا للتأمين", "logo": { - "url": "https://sunbird.org/images/sunbird-logo-new.png", - "alt_text": "شعار مربع لطائر الشمس" + "url": "https://api.collab.mosip.net/inji/veridonia-logo.png", + "alt_text": "شعار فيريدونيا" }, "language": "ar", - "title": "قم بتنزيل بيانات اعتماد Sunbird", - "description": "قم بتنزيل بيانات الاعتماد باستخدام رقم السياسة الخاص بك" + "title": "شركة فيريدونيا للتأمين", + "description": "قم بتنزيل بيانات اعتماد التأمين باستخدام تفاصيل السياسة" }, { - "name": "सनबर्ड आरसी बीमा सत्यापन योग्य क्रेडेंशियल", + "name": "वेरिडोनिया बीमा कंपनींं", "logo": { - "url": "https://sunbird.org/images/sunbird-logo-new.png", - "alt_text": "सनबर्ड का एक चौकोर लोगो" + "url": "https://api.collab.mosip.net/inji/veridonia-logo.png", + "alt_text": "एक वेरिडोनिया लोगो" }, "language": "hi", - "title": "सनबर्ड क्रेडेंशियल्स डाउनलोड करेंं", - "description": "अपने पॉलिसी नंबर के साथ क्रेडेंशियल डाउनलोड करें" + "title": "वेरिडोनिया बीमा कंपनींं", + "description": "पॉलिसी विवरण का उपयोग करके बीमा क्रेडेंशियल डाउनलोड करें" }, { - "name": "ಸನ್ಬರ್ಡ್ ಆರ್ಸಿ ವಿಮೆ ಪರಿಶೀಲಿಸಬಹುದಾದ ರುಜುವಾತು", + "name": "ವೆರಿಡೋನಿಯಾ ವಿಮಾ ಕಂಪನಿ", "logo": { - "url": "https://sunbird.org/images/sunbird-logo-new.png", - "alt_text": "ಸನ್ ಬರ್ಡ್ ನ ಚೌಕಾಕಾರದ ಲೋಗೋ" + "url": "https://api.collab.mosip.net/inji/veridonia-logo.png", + "alt_text": "ವೆರಿಡೋನಿಯಾ ಲೋಗೋ" }, "language": "kn", - "title": "ಸನ್ಬರ್ಡ್ ರುಜುವಾತುಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿ", - "description": "ನಿಮ್ಮ ಪಾಲಿಸಿ ಸಂಖ್ಯೆಯೊಂದಿಗೆ ರುಜುವಾತುಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿ" + "title": "ವೆರಿಡೋನಿಯಾ ವಿಮಾ ಕಂಪನಿ", + "description": "ಪಾಲಿಸಿ ವಿವರಗಳನ್ನು ಬಳಸಿಕೊಂಡು ವಿಮಾ ರುಜುವಾತುಗಳನ್ನು ಡೌನ್\u200Cಲೋಡ್ ಮಾಡಿ" }, { - "name": "Sunbird RC இன்சூரன்ஸ் சரிபார்க்கக்கூடிய நற்சான்றிதழ்", + "name": "வெரிடோனியா இன்சூரன்ஸ் நிறுவனம்", "logo": { - "url": "https://sunbird.org/images/sunbird-logo-new.png", - "alt_text": "சூரிய பறவையின் சதுர சின்னம்" + "url": "https://api.collab.mosip.net/inji/veridonia-logo.png", + "alt_text": "ஒரு வெரிடோனியா லோகோ" }, "language": "ta", - "title": "Sunbird சான்றுகளைப் பதிவிறக்கவும்", - "description": "உங்கள் பாலிசி எண்ணுடன் நற்சான்றிதழ்களைப் பதிவிறக்கவும்" + "title": "வெரிடோனியா இன்சூரன்ஸ் நிறுவனம்", + "description": "பாலிசி விவரங்களைப் பயன்படுத்தி காப்பீட்டுச் சான்றுகளைப் பதிவிறக்கவும்" }, { - "name": "Kredensyal na Nabe-verify ng Sunbird RC Insurance", + "name": "Veridonia Insurance Company", "logo": { - "url": "https://sunbird.org/images/sunbird-logo-new.png", - "alt_text": "isang parisukat na logo ng isang Sunbird" + "url": "https://api.collab.mosip.net/inji/veridonia-logo.png", + "alt_text": "isang logo ng Veridonia" }, "language": "fil", - "title": "I-download ang Mga Kredensyal ng Sunbird", - "description": "Mag-download ng mga kredensyal gamit ang iyong Numero ng Patakaran" + "title": "Veridonia Insurance Company", + "description": "I-download ang Mga Kredensyal ng Seguro gamit ang mga detalye ng patakaran" } ], "protocol": "OpenId4VCI", - "client_id": "${mimoto.oidc.sunbird.partner.clientid}", + "client_id": "esignet-sunbird-partner", "client_alias": "esignet-sunbird-partner", "scopes_supported": ["sunbird_rc_insurance_vc_ldp"], "additional_headers": { "Accept": "application/json" }, - ".well-known": "https://vijay151096.github.io/did-testing/openid-credential-issuer.json", + ".well-known": "https://esignet-insurance.collab.mosip.net/.well-known/openid-credential-issuer?version=v11", "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", - "authorization_endpoint": "https://${mosip.esignet.mock.host}/authorize", - "authorization_audience": "https://${mosip.esignet.mock.host}/v1/esignet/oauth/v2/token", - "token_endpoint": "https://${mosip.api.public.host}/residentmobileapp/get-token/Sunbird", - "proxy_token_endpoint": "https://${mosip.esignet.mock.host}/v1/esignet/oauth/v2/token", - "credential_endpoint": "https://${mosip.esignet.mock.host}/v1/esignet/vci/credential", + "authorization_endpoint": "https://esignet-insurance.collab.mosip.net/authorize", + "authorization_audience": "https://esignet-insurance.collab.mosip.net/v1/esignet/oauth/v2/token", + "token_endpoint": "https://api.collab.mosip.net/residentmobileapp/get-token/Sunbird", + "proxy_token_endpoint": "https://esignet-insurance.collab.mosip.net/v1/esignet/oauth/v2/token", + "credential_endpoint": "https://esignet-insurance.collab.mosip.net/v1/esignet/vci/credential", "credential_type": ["VerifiableCredential", "InsuranceCredential"], - "credential_audience": "https://${mosip.esignet.mock.host}/v1/esignet", + "credential_audience": "https://esignet-insurance.collab.mosip.net/v1/esignet", "enabled": "true" } ] diff --git a/docker-compose/docker-compose.yml b/docker-compose/docker-compose.yml new file mode 100644 index 000000000..b06f45376 --- /dev/null +++ b/docker-compose/docker-compose.yml @@ -0,0 +1,30 @@ +version: '3.8' + +services: + nginx: + container_name: nginx + image: nginx:alpine + ports: + - '80:80' + volumes: + - ./config/mimoto-issuers-config.json:/config/server/mimoto-issuers-config.json + - ./config/CredentialTemplate.html:/config/server/CredentialTemplate.html + - ./nginx.conf:/etc/nginx/nginx.conf + mimoto-service: + container_name: 'Mimoto-Service' + image: 'mosipid/mimoto:0.12.0' + user: root + ports: + - '8099:8099' + environment: + - container_user=mosip + - active_profile_env=default + - SPRING_CONFIG_NAME=mimoto + - SPRING_CONFIG_LOCATION=/home/mosip/ + volumes: + - ./config/mimoto-default.properties:/home/mosip/mimoto-default.properties + - ./config/mimoto-issuers-config.json:/home/mosip/mimoto-issuers-config.json + - ./certs/oidckeystore.p12:/home/mosip/certs/oidckeystore.p12 + - ./loader_path/:/home/mosip/additional_jars/ + depends_on: + - nginx \ No newline at end of file diff --git a/docker-compose/loader_path/kernel-auth-adapter.jar b/docker-compose/loader_path/kernel-auth-adapter.jar deleted file mode 100644 index e69de29bb..000000000 diff --git a/docker-compose/nginx.conf b/docker-compose/nginx.conf new file mode 100644 index 000000000..03a3e1d7c --- /dev/null +++ b/docker-compose/nginx.conf @@ -0,0 +1,12 @@ +events { } + +http { + server { + listen 80; + + location / { + root /config/server; + autoindex on; + } + } +} From 051bcdc1adc63d253857fed6d5b415de5fa40a37 Mon Sep 17 00:00:00 2001 From: Praful Rakhade <99539100+prafulrakhade@users.noreply.github.com> Date: Fri, 28 Jun 2024 16:20:30 +0530 Subject: [PATCH 163/860] [MOSIP-34144] added inji-config-server deployment script in mimoto Signed-off-by: techno-467 --- helm/inji-config-server/README.md | 11 ++++++++ helm/inji-config-server/copy_cm.sh | 17 ++++++++++++ helm/inji-config-server/copy_cm_func.sh | 28 +++++++++++++++++++ helm/inji-config-server/copy_secrets.sh | 17 ++++++++++++ helm/inji-config-server/delete.sh | 32 ++++++++++++++++++++++ helm/inji-config-server/install.sh | 36 +++++++++++++++++++++++++ helm/inji-config-server/restart.sh | 25 +++++++++++++++++ helm/inji-config-server/values.yaml | 34 +++++++++++++++++++++++ helm/mimoto/Chart.yaml | 2 +- helm/mimoto/copy_cm.sh | 2 +- helm/mimoto/copy_secrets.sh | 2 +- helm/mimoto/install.sh | 20 +++++++------- helm/mimoto/restart.sh | 2 +- helm/mimoto/values.yaml | 2 +- 14 files changed, 215 insertions(+), 15 deletions(-) create mode 100755 helm/inji-config-server/README.md create mode 100755 helm/inji-config-server/copy_cm.sh create mode 100755 helm/inji-config-server/copy_cm_func.sh create mode 100755 helm/inji-config-server/copy_secrets.sh create mode 100755 helm/inji-config-server/delete.sh create mode 100755 helm/inji-config-server/install.sh create mode 100755 helm/inji-config-server/restart.sh create mode 100755 helm/inji-config-server/values.yaml diff --git a/helm/inji-config-server/README.md b/helm/inji-config-server/README.md new file mode 100755 index 000000000..93515ade4 --- /dev/null +++ b/helm/inji-config-server/README.md @@ -0,0 +1,11 @@ +# Config server + +## Introduction +Inji-Config server serves all properties required by MOSIP modules. This must be installed before any other MOSIP modules. + +## Install +* Review `values.yaml` and make sure git repository parameters are as per your installation. +* Install +```sh +./install.sh +``` \ No newline at end of file diff --git a/helm/inji-config-server/copy_cm.sh b/helm/inji-config-server/copy_cm.sh new file mode 100755 index 000000000..1f69396a9 --- /dev/null +++ b/helm/inji-config-server/copy_cm.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# Copy configmaps from other namespaces + +function copying_cm() { + COPY_UTIL=./copy_cm_func.sh + DST_NS=inji-config-server # DST_NS: Destination namespace + $COPY_UTIL configmap global default $DST_NS + return 0 +} + +# set commands for error handling. +set -e +set -o errexit ## set -e : exit the script if any statement returns a non-true return value +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errtrace # trace ERR through 'time command' and other functions +set -o pipefail # trace ERR through pipes +copying_cm # calling function diff --git a/helm/inji-config-server/copy_cm_func.sh b/helm/inji-config-server/copy_cm_func.sh new file mode 100755 index 000000000..d05154a54 --- /dev/null +++ b/helm/inji-config-server/copy_cm_func.sh @@ -0,0 +1,28 @@ +#!/bin/bash +# Copy configmap and secret from one namespace to another. +# ./copy_cm_func.sh [name] +# Parameters: +# resource: configmap|secret +# name: Optional new name of the configmap or secret in destination namespace. This may be needed if there is +# clash of names + +if [ $1 = "configmap" ] +then + RESOURCE=configmap +elif [ $1 = "secret" ] +then + RESOURCE=secret +else + echo "Incorrect resource $1. Exiting.." + exit 1 +fi + + +if [ $# -ge 5 ] +then + kubectl -n $4 delete --ignore-not-found=true $RESOURCE $5 + kubectl -n $3 get $RESOURCE $2 -o yaml | sed "s/namespace: $3/namespace: $4/g" | sed "s/name: $2/name: $5/g" | kubectl -n $4 create -f - +else + kubectl -n $4 delete --ignore-not-found=true $RESOURCE $2 + kubectl -n $3 get $RESOURCE $2 -o yaml | sed "s/namespace: $3/namespace: $4/g" | kubectl -n $4 create -f - +fi \ No newline at end of file diff --git a/helm/inji-config-server/copy_secrets.sh b/helm/inji-config-server/copy_secrets.sh new file mode 100755 index 000000000..6ed2d1107 --- /dev/null +++ b/helm/inji-config-server/copy_secrets.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# Copy secrets from other namespaces + +function copying_secrets() { + COPY_UTIL=./copy_cm_func.sh + DST_NS=inji-config-server # DST_NS: Destination namespace + $COPY_UTIL secret db-common-secrets postgres $DST_NS + return 0 +} + +# set commands for error handling. +set -e +set -o errexit ## set -e : exit the script if any statement returns a non-true return value +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errtrace # trace ERR through 'time command' and other functions +set -o pipefail # trace ERR through pipes +copying_secrets # calling function \ No newline at end of file diff --git a/helm/inji-config-server/delete.sh b/helm/inji-config-server/delete.sh new file mode 100755 index 000000000..62929d8c9 --- /dev/null +++ b/helm/inji-config-server/delete.sh @@ -0,0 +1,32 @@ +#!/bin/bash +# Uninstalls inji config server +## Usage: ./delete.sh [kubeconfig] + +if [ $# -ge 1 ] ; then + export KUBECONFIG=$1 +fi + +function inji_config_server() { + NS=inji-config-server + while true; do + read -p "Are you sure you want to delete inji-config-server helm charts?(Y/n) " yn + if [ $yn = "Y" ] + then + kubectl -n $NS delete configmap global keycloak-host + kubectl -n $NS delete secret db-common-secrets keycloak keycloak-client-secrets + helm -n $NS delete inji-config-server + break + else + break + fi + done + return 0 +} + +# set commands for error handling. +set -e +set -o errexit ## set -e : exit the script if any statement returns a non-true return value +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errtrace # trace ERR through 'time command' and other functions +set -o pipefail # trace ERR through pipes +inji_config_server # calling function diff --git a/helm/inji-config-server/install.sh b/helm/inji-config-server/install.sh new file mode 100755 index 000000000..9bf370891 --- /dev/null +++ b/helm/inji-config-server/install.sh @@ -0,0 +1,36 @@ +#!/bin/bash +# Installs inji-config-server +## Usage: ./install.sh [kubeconfig] + +if [ $# -ge 1 ] ; then + export KUBECONFIG=$1 +fi + +NS=inji-config-server +CHART_VERSION=0.0.1-develop + + echo Create $NS namespace + kubectl create ns $NS + + # set commands for error handling. + set -e + set -o errexit ## set -e : exit the script if any statement returns a non-true return value + set -o nounset ## set -u : exit the script if you try to use an uninitialised variable + set -o errtrace # trace ERR through 'time command' and other functions + set -o pipefail # trace ERR through pipes + + echo Istio label + kubectl label ns $NS istio-injection=enabled --overwrite + helm repo update + + echo Copy configmaps + sed -i 's/\r$//' copy_cm.sh + ./copy_cm.sh + + echo Copy secrets + sed -i 's/\r$//' copy_secrets.sh + ./copy_secrets.sh + + echo Installing inji-config-server + helm -n $NS install inji-config-server mosip/config-server -f values.yaml --wait --version $CHART_VERSION + echo Installed inji-Config-server. diff --git a/helm/inji-config-server/restart.sh b/helm/inji-config-server/restart.sh new file mode 100755 index 000000000..4b10cb798 --- /dev/null +++ b/helm/inji-config-server/restart.sh @@ -0,0 +1,25 @@ +#!/bin/bash +# Restart the inji-config-server service +## Usage: ./restart.sh [kubeconfig] + +if [ $# -ge 1 ] ; then + export KUBECONFIG=$1 +fi + +function inji_config_server() { + NS=inji-config-server + kubectl -n $NS rollout restart deploy + + kubectl -n $NS get deploy -o name | xargs -n1 -t kubectl -n $NS rollout status + + echo Restarted inji-config-server services + return 0 +} + +# set commands for error handling. +set -e +set -o errexit ## set -e : exit the script if any statement returns a non-true return value +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errtrace # trace ERR through 'time command' and other functions +set -o pipefail # trace ERR through pipes +inji_config_server # calling function \ No newline at end of file diff --git a/helm/inji-config-server/values.yaml b/helm/inji-config-server/values.yaml new file mode 100755 index 000000000..fde1034a7 --- /dev/null +++ b/helm/inji-config-server/values.yaml @@ -0,0 +1,34 @@ +gitRepo: + uri: https://github.com/mosip/inji-config + version: develop + ## Folders within the base repo where properties may be found. + searchFolders: "" + private: false + ## User name of user who has access to the private repo. Ignore for public repo + username: "" + token: "" + +envVariables: + - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_API_PUBLIC_HOST + valueFrom: + configMapKeyRef: + name: global + key: mosip-api-host + enabled: true + - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_API_INTERNAL_HOST + valueFrom: + configMapKeyRef: + name: global + key: mosip-api-internal-host + enabled: true + - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_INJIWEB_HOST + valueFrom: + configMapKeyRef: + name: global + key: mosip-injiweb-host + enabled: true + + + + + diff --git a/helm/mimoto/Chart.yaml b/helm/mimoto/Chart.yaml index 6062a8dcb..8049ee631 100644 --- a/helm/mimoto/Chart.yaml +++ b/helm/mimoto/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 name: mimoto description: A Helm chart for MOSIP mimoto Application type: application -version: 12.0.2 +version: 0.0.1-develop appVersion: "" dependencies: - name: common diff --git a/helm/mimoto/copy_cm.sh b/helm/mimoto/copy_cm.sh index c63f4b25b..f2fac088c 100755 --- a/helm/mimoto/copy_cm.sh +++ b/helm/mimoto/copy_cm.sh @@ -7,4 +7,4 @@ DST_NS=mimoto $COPY_UTIL configmap global default $DST_NS $COPY_UTIL configmap artifactory-share artifactory $DST_NS -$COPY_UTIL configmap config-server-share config-server $DST_NS \ No newline at end of file +$COPY_UTIL configmap inji-config-server-share inji-config-server $DST_NS diff --git a/helm/mimoto/copy_secrets.sh b/helm/mimoto/copy_secrets.sh index 9eab515aa..e8b12a5a1 100755 --- a/helm/mimoto/copy_secrets.sh +++ b/helm/mimoto/copy_secrets.sh @@ -4,4 +4,4 @@ COPY_UTIL=./copy_cm_func.sh DST_NS=mimoto -$COPY_UTIL secret keycloak-client-secrets keycloak $DST_NS \ No newline at end of file +$COPY_UTIL secret keycloak-client-secrets keycloak $DST_NS diff --git a/helm/mimoto/install.sh b/helm/mimoto/install.sh index 35eba4287..626f34f29 100755 --- a/helm/mimoto/install.sh +++ b/helm/mimoto/install.sh @@ -7,7 +7,7 @@ if [ $# -ge 1 ] ; then fi NS=mimoto -MIMOTO_CHART_VERSION=12.0.2 +MIMOTO_CHART_VERSION=0.0.1-develop echo Create $NS namespace kubectl create ns $NS @@ -40,19 +40,19 @@ function installing_mimoto() { ENABLE_INSECURE='--set enable_insecure=true'; fi - echo "Copy secrets to config-server namespace" - ./copy_cm_func.sh secret mimoto-wallet-binding-partner-api-key mimoto config-server - ./copy_cm_func.sh secret mimoto-oidc-partner-clientid mimoto config-server + echo "Copy secrets to inji-config-server namespace" + ./copy_cm_func.sh secret mimoto-wallet-binding-partner-api-key mimoto inji-config-server + ./copy_cm_func.sh secret mimoto-oidc-partner-clientid mimoto inji-config-server echo Updating mimoto-oidc-keystore-password value - ./copy_cm_func.sh secret mimoto-oidc-keystore-password mimoto config-server + ./copy_cm_func.sh secret mimoto-oidc-keystore-password mimoto inji-config-server - kubectl -n config-server set env --keys=mimoto-wallet-binding-partner-api-key --from secret/mimoto-wallet-binding-partner-api-key deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ - kubectl -n config-server set env --keys=mimoto-oidc-partner-clientid --from secret/mimoto-oidc-partner-clientid deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ - kubectl -n config-server set env --keys=mimoto-oidc-keystore-password --from secret/mimoto-oidc-keystore-password deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ + kubectl -n inji-config-server set env --keys=mimoto-wallet-binding-partner-api-key --from secret/mimoto-wallet-binding-partner-api-key deployment/inji-config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ + kubectl -n inji-config-server set env --keys=mimoto-oidc-partner-clientid --from secret/mimoto-oidc-partner-clientid deployment/inji-config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ + kubectl -n inji-config-server set env --keys=mimoto-oidc-keystore-password --from secret/mimoto-oidc-keystore-password deployment/inji-config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ - kubectl -n config-server rollout restart deployment config-server - kubectl -n config-server rollout status deployment config-server + kubectl -n inji-config-server rollout restart deployment inji-config-server + kubectl -n inji-config-server rollout status deployment inji-config-server echo Installing mimoto helm -n $NS install mimoto mosip/mimoto --version $MIMOTO_CHART_VERSION $ENABLE_INSECURE diff --git a/helm/mimoto/restart.sh b/helm/mimoto/restart.sh index 35dda01d7..8fa241f6a 100755 --- a/helm/mimoto/restart.sh +++ b/helm/mimoto/restart.sh @@ -8,7 +8,7 @@ fi function Restarting_mimoto() { NS=mimoto - kubectl -n $NS rollout restart deploy + kubectl -n $NS rollout restart deploy mimoto kubectl -n $NS get deploy -o name | xargs -n1 -t kubectl -n $NS rollout status diff --git a/helm/mimoto/values.yaml b/helm/mimoto/values.yaml index b6e76c9fe..f6814220c 100644 --- a/helm/mimoto/values.yaml +++ b/helm/mimoto/values.yaml @@ -246,7 +246,7 @@ extraEnvVars: [] ## extraEnvVarsCM: - global - - config-server-share + - inji-config-server-share - artifactory-share ## Secret with extra environment variables From 23d256af1949ce5c39f69c2982bc12f5a1fe8149 Mon Sep 17 00:00:00 2001 From: techno-467 Date: Fri, 28 Jun 2024 17:13:10 +0530 Subject: [PATCH 164/860] [MOSIP-34144] added inji-config-server deployment script in mimoto Signed-off-by: techno-467 --- helm/inji-config-server/copy_cm.sh | 2 +- helm/inji-config-server/copy_secrets.sh | 2 +- helm/inji-config-server/delete.sh | 2 +- helm/inji-config-server/install.sh | 2 +- helm/inji-config-server/restart.sh | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/helm/inji-config-server/copy_cm.sh b/helm/inji-config-server/copy_cm.sh index 1f69396a9..9b6100253 100755 --- a/helm/inji-config-server/copy_cm.sh +++ b/helm/inji-config-server/copy_cm.sh @@ -3,7 +3,7 @@ function copying_cm() { COPY_UTIL=./copy_cm_func.sh - DST_NS=inji-config-server # DST_NS: Destination namespace + DST_NS=config-server # DST_NS: Destination namespace $COPY_UTIL configmap global default $DST_NS return 0 } diff --git a/helm/inji-config-server/copy_secrets.sh b/helm/inji-config-server/copy_secrets.sh index 6ed2d1107..07757ed56 100755 --- a/helm/inji-config-server/copy_secrets.sh +++ b/helm/inji-config-server/copy_secrets.sh @@ -3,7 +3,7 @@ function copying_secrets() { COPY_UTIL=./copy_cm_func.sh - DST_NS=inji-config-server # DST_NS: Destination namespace + DST_NS=config-server # DST_NS: Destination namespace $COPY_UTIL secret db-common-secrets postgres $DST_NS return 0 } diff --git a/helm/inji-config-server/delete.sh b/helm/inji-config-server/delete.sh index 62929d8c9..16dc86355 100755 --- a/helm/inji-config-server/delete.sh +++ b/helm/inji-config-server/delete.sh @@ -7,7 +7,7 @@ if [ $# -ge 1 ] ; then fi function inji_config_server() { - NS=inji-config-server + NS=config-server while true; do read -p "Are you sure you want to delete inji-config-server helm charts?(Y/n) " yn if [ $yn = "Y" ] diff --git a/helm/inji-config-server/install.sh b/helm/inji-config-server/install.sh index 9bf370891..670d8e308 100755 --- a/helm/inji-config-server/install.sh +++ b/helm/inji-config-server/install.sh @@ -6,7 +6,7 @@ if [ $# -ge 1 ] ; then export KUBECONFIG=$1 fi -NS=inji-config-server +NS=config-server CHART_VERSION=0.0.1-develop echo Create $NS namespace diff --git a/helm/inji-config-server/restart.sh b/helm/inji-config-server/restart.sh index 4b10cb798..56d6e90ee 100755 --- a/helm/inji-config-server/restart.sh +++ b/helm/inji-config-server/restart.sh @@ -7,7 +7,7 @@ if [ $# -ge 1 ] ; then fi function inji_config_server() { - NS=inji-config-server + NS=config-server kubectl -n $NS rollout restart deploy kubectl -n $NS get deploy -o name | xargs -n1 -t kubectl -n $NS rollout status From 17bb0dba720f93690b88af33a383aae6c1a2a574 Mon Sep 17 00:00:00 2001 From: techno-467 Date: Fri, 28 Jun 2024 17:56:26 +0530 Subject: [PATCH 165/860] [MOSIP-34144] added inji-config-server deployment script in mimoto Signed-off-by: techno-467 --- helm/mimoto/copy_cm.sh | 4 ++-- helm/mimoto/copy_secrets.sh | 2 +- helm/mimoto/delete.sh | 4 ++-- helm/mimoto/install.sh | 22 +++++++++++----------- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/helm/mimoto/copy_cm.sh b/helm/mimoto/copy_cm.sh index f2fac088c..6236acbcf 100755 --- a/helm/mimoto/copy_cm.sh +++ b/helm/mimoto/copy_cm.sh @@ -3,8 +3,8 @@ # DST_NS: Destination namespace COPY_UTIL=./copy_cm_func.sh -DST_NS=mimoto +DST_NS=mimoto-test $COPY_UTIL configmap global default $DST_NS $COPY_UTIL configmap artifactory-share artifactory $DST_NS -$COPY_UTIL configmap inji-config-server-share inji-config-server $DST_NS +$COPY_UTIL configmap inji-config-server-share config-server $DST_NS diff --git a/helm/mimoto/copy_secrets.sh b/helm/mimoto/copy_secrets.sh index e8b12a5a1..066dd8ba2 100755 --- a/helm/mimoto/copy_secrets.sh +++ b/helm/mimoto/copy_secrets.sh @@ -2,6 +2,6 @@ # Copy secrets from other namespaces # DST_NS: Destination namespace COPY_UTIL=./copy_cm_func.sh -DST_NS=mimoto +DST_NS=mimoto-test $COPY_UTIL secret keycloak-client-secrets keycloak $DST_NS diff --git a/helm/mimoto/delete.sh b/helm/mimoto/delete.sh index b1fec08a8..b4d13f9c8 100755 --- a/helm/mimoto/delete.sh +++ b/helm/mimoto/delete.sh @@ -1,12 +1,12 @@ #!/bin/bash # Uninstalls mimoto function deleting_mimoto() { - NS=mimoto + NS=mimoto-test while true; do read -p "Are you sure you want to delete mimoto helm chart?(Y/n) " yn if [ $yn = "Y" ] then - helm -n $NS delete mimoto + helm -n $NS delete mimoto-test break else break diff --git a/helm/mimoto/install.sh b/helm/mimoto/install.sh index 626f34f29..83956a6f2 100755 --- a/helm/mimoto/install.sh +++ b/helm/mimoto/install.sh @@ -6,7 +6,7 @@ if [ $# -ge 1 ] ; then export KUBECONFIG=$1 fi -NS=mimoto +NS=mimoto-test MIMOTO_CHART_VERSION=0.0.1-develop echo Create $NS namespace @@ -40,22 +40,22 @@ function installing_mimoto() { ENABLE_INSECURE='--set enable_insecure=true'; fi - echo "Copy secrets to inji-config-server namespace" - ./copy_cm_func.sh secret mimoto-wallet-binding-partner-api-key mimoto inji-config-server - ./copy_cm_func.sh secret mimoto-oidc-partner-clientid mimoto inji-config-server + echo "Copy secrets to config-server namespace" + ./copy_cm_func.sh secret mimoto-wallet-binding-partner-api-key mimoto-test config-server + ./copy_cm_func.sh secret mimoto-oidc-partner-clientid mimoto-test config-server echo Updating mimoto-oidc-keystore-password value - ./copy_cm_func.sh secret mimoto-oidc-keystore-password mimoto inji-config-server + ./copy_cm_func.sh secret mimoto-oidc-keystore-password mimoto-test config-server - kubectl -n inji-config-server set env --keys=mimoto-wallet-binding-partner-api-key --from secret/mimoto-wallet-binding-partner-api-key deployment/inji-config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ - kubectl -n inji-config-server set env --keys=mimoto-oidc-partner-clientid --from secret/mimoto-oidc-partner-clientid deployment/inji-config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ - kubectl -n inji-config-server set env --keys=mimoto-oidc-keystore-password --from secret/mimoto-oidc-keystore-password deployment/inji-config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ + kubectl -n config-server set env --keys=mimoto-wallet-binding-partner-api-key --from secret/mimoto-wallet-binding-partner-api-key deployment/inji-config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ + kubectl -n config-server set env --keys=mimoto-oidc-partner-clientid --from secret/mimoto-oidc-partner-clientid deployment/inji-config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ + kubectl -n config-server set env --keys=mimoto-oidc-keystore-password --from secret/mimoto-oidc-keystore-password deployment/inji-config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ - kubectl -n inji-config-server rollout restart deployment inji-config-server - kubectl -n inji-config-server rollout status deployment inji-config-server + kubectl -n config-server rollout restart deployment inji-config-server + kubectl -n config-server rollout status deployment inji-config-server echo Installing mimoto - helm -n $NS install mimoto mosip/mimoto --version $MIMOTO_CHART_VERSION $ENABLE_INSECURE + helm -n $NS install mimoto-test mosip/mimoto --version $MIMOTO_CHART_VERSION $ENABLE_INSECURE kubectl -n $NS get deploy -o name | xargs -n1 -t kubectl -n $NS rollout status From 34a0cd4522d60dab84174bdd0ae73caac61f2986 Mon Sep 17 00:00:00 2001 From: techno-467 Date: Fri, 28 Jun 2024 19:07:23 +0530 Subject: [PATCH 166/860] [MOSIP-34144] added inji-config-server deployment script in mimoto Signed-off-by: techno-467 --- helm/mimoto/copy_cm.sh | 2 +- helm/mimoto/copy_secrets.sh | 2 +- helm/mimoto/delete.sh | 4 ++-- helm/mimoto/install.sh | 8 ++++---- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/helm/mimoto/copy_cm.sh b/helm/mimoto/copy_cm.sh index 6236acbcf..c2c450d0b 100755 --- a/helm/mimoto/copy_cm.sh +++ b/helm/mimoto/copy_cm.sh @@ -3,7 +3,7 @@ # DST_NS: Destination namespace COPY_UTIL=./copy_cm_func.sh -DST_NS=mimoto-test +DST_NS=mimoto $COPY_UTIL configmap global default $DST_NS $COPY_UTIL configmap artifactory-share artifactory $DST_NS diff --git a/helm/mimoto/copy_secrets.sh b/helm/mimoto/copy_secrets.sh index 066dd8ba2..e8b12a5a1 100755 --- a/helm/mimoto/copy_secrets.sh +++ b/helm/mimoto/copy_secrets.sh @@ -2,6 +2,6 @@ # Copy secrets from other namespaces # DST_NS: Destination namespace COPY_UTIL=./copy_cm_func.sh -DST_NS=mimoto-test +DST_NS=mimoto $COPY_UTIL secret keycloak-client-secrets keycloak $DST_NS diff --git a/helm/mimoto/delete.sh b/helm/mimoto/delete.sh index b4d13f9c8..b1fec08a8 100755 --- a/helm/mimoto/delete.sh +++ b/helm/mimoto/delete.sh @@ -1,12 +1,12 @@ #!/bin/bash # Uninstalls mimoto function deleting_mimoto() { - NS=mimoto-test + NS=mimoto while true; do read -p "Are you sure you want to delete mimoto helm chart?(Y/n) " yn if [ $yn = "Y" ] then - helm -n $NS delete mimoto-test + helm -n $NS delete mimoto break else break diff --git a/helm/mimoto/install.sh b/helm/mimoto/install.sh index 83956a6f2..90b622054 100755 --- a/helm/mimoto/install.sh +++ b/helm/mimoto/install.sh @@ -41,11 +41,11 @@ function installing_mimoto() { fi echo "Copy secrets to config-server namespace" - ./copy_cm_func.sh secret mimoto-wallet-binding-partner-api-key mimoto-test config-server - ./copy_cm_func.sh secret mimoto-oidc-partner-clientid mimoto-test config-server + ./copy_cm_func.sh secret mimoto-wallet-binding-partner-api-key mimoto config-server + ./copy_cm_func.sh secret mimoto-oidc-partner-clientid mimoto config-server echo Updating mimoto-oidc-keystore-password value - ./copy_cm_func.sh secret mimoto-oidc-keystore-password mimoto-test config-server + ./copy_cm_func.sh secret mimoto-oidc-keystore-password mimoto config-server kubectl -n config-server set env --keys=mimoto-wallet-binding-partner-api-key --from secret/mimoto-wallet-binding-partner-api-key deployment/inji-config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ kubectl -n config-server set env --keys=mimoto-oidc-partner-clientid --from secret/mimoto-oidc-partner-clientid deployment/inji-config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ @@ -55,7 +55,7 @@ function installing_mimoto() { kubectl -n config-server rollout status deployment inji-config-server echo Installing mimoto - helm -n $NS install mimoto-test mosip/mimoto --version $MIMOTO_CHART_VERSION $ENABLE_INSECURE + helm -n $NS install mimoto mosip/mimoto --version $MIMOTO_CHART_VERSION $ENABLE_INSECURE kubectl -n $NS get deploy -o name | xargs -n1 -t kubectl -n $NS rollout status From 5f5c123ece63acddadf6928fd04f8c365c11b98f Mon Sep 17 00:00:00 2001 From: Praful Rakhade <99539100+Prafulrakhade@users.noreply.github.com> Date: Fri, 28 Jun 2024 19:12:42 +0530 Subject: [PATCH 167/860] Update install.sh Signed-off-by: Praful Rakhade <99539100+Prafulrakhade@users.noreply.github.com> --- helm/mimoto/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helm/mimoto/install.sh b/helm/mimoto/install.sh index 90b622054..e20fb5d70 100755 --- a/helm/mimoto/install.sh +++ b/helm/mimoto/install.sh @@ -6,7 +6,7 @@ if [ $# -ge 1 ] ; then export KUBECONFIG=$1 fi -NS=mimoto-test +NS=mimoto MIMOTO_CHART_VERSION=0.0.1-develop echo Create $NS namespace From 73268a12b846f66e4cd12d0cdcbdbd36252f883b Mon Sep 17 00:00:00 2001 From: Praful Rakhade <99539100+Prafulrakhade@users.noreply.github.com> Date: Fri, 28 Jun 2024 20:02:51 +0530 Subject: [PATCH 168/860] Update values.yaml Signed-off-by: Praful Rakhade <99539100+Prafulrakhade@users.noreply.github.com> --- helm/inji-config-server/values.yaml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/helm/inji-config-server/values.yaml b/helm/inji-config-server/values.yaml index fde1034a7..c166e9349 100755 --- a/helm/inji-config-server/values.yaml +++ b/helm/inji-config-server/values.yaml @@ -27,8 +27,3 @@ envVariables: name: global key: mosip-injiweb-host enabled: true - - - - - From 87824a13a04276481f76f88171a9696f69206633 Mon Sep 17 00:00:00 2001 From: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> Date: Mon, 1 Jul 2024 16:02:07 +0530 Subject: [PATCH 169/860] INJIWEB-179 Added new test cases (#281) * MOSIP-32363 Signed-off-by: Mohanachandran S * INJIWEB-179 Signed-off-by: Mohanachandran S * Download credential API Signed-off-by: Mohanachandran S * INJIWEB-179 Added new test cases Signed-off-by: Mohanachandran S * INJIWEB-179 Added new test cases Signed-off-by: Mohanachandran S * INJIWEB-179 Added new test cases Signed-off-by: Mohanachandran S --------- Signed-off-by: Mohanachandran S Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> --- apitest/pom.xml | 2 +- .../PostWithAutogenIdWithOtpGenerate.java | 58 +++-- .../PostWithFormDataBodyForPdfDownload.java | 141 ++++++++++++ .../testscripts/SimplePostForAutoGenId.java | 211 ++++++++++++++++++ .../main/resources/config/Kernel.properties | 2 +- .../mimoto/AddIdentity/AddIdentity.yml | 27 +++ .../AuthenticateUser/AuthenticateUser.hbs | 15 ++ .../AuthenticateUser/AuthenticateUser.yml | 33 +++ .../AuthenticateUserResult.hbs | 1 + .../AuthorizationCode/AuthorizationCode.hbs | 19 ++ .../AuthorizationCode/AuthorizationCode.yml | 16 ++ .../AuthorizationCodeResult.hbs | 1 + .../DownloadIssuerCredential.hbs | 8 + .../DownloadIssuerCredential.yml | 110 +++++++++ .../DownloadIssuerCredentialResult.hbs | 1 + .../GetAllCredentialTypes.hbs | 4 + .../GetAllCredentialTypes.yml | 47 ++++ .../GetAllCredentialTypesResult.hbs | 1 + .../OAuthDetailsRequest.hbs | 17 ++ .../OAuthDetailsRequest.yml | 26 +++ .../OAuthDetailsRequestResult.hbs | 1 + .../mimoto/SendOtpEsignet/SendOtp.hbs | 14 ++ .../mimoto/SendOtpEsignet/SendOtpResult.hbs | 6 + apitest/testNgXmlFiles/mimotoApi.xml | 39 ++++ 24 files changed, 779 insertions(+), 21 deletions(-) create mode 100644 apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithFormDataBodyForPdfDownload.java create mode 100644 apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java create mode 100644 apitest/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.hbs create mode 100644 apitest/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.yml create mode 100644 apitest/src/main/resources/mimoto/AuthenticateUser/AuthenticateUserResult.hbs create mode 100644 apitest/src/main/resources/mimoto/AuthorizationCode/AuthorizationCode.hbs create mode 100644 apitest/src/main/resources/mimoto/AuthorizationCode/AuthorizationCode.yml create mode 100644 apitest/src/main/resources/mimoto/AuthorizationCode/AuthorizationCodeResult.hbs create mode 100644 apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.hbs create mode 100644 apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml create mode 100644 apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredentialResult.hbs create mode 100644 apitest/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.hbs create mode 100644 apitest/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.yml create mode 100644 apitest/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypesResult.hbs create mode 100644 apitest/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.hbs create mode 100644 apitest/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.yml create mode 100644 apitest/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequestResult.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOtpEsignet/SendOtp.hbs create mode 100644 apitest/src/main/resources/mimoto/SendOtpEsignet/SendOtpResult.hbs diff --git a/apitest/pom.xml b/apitest/pom.xml index 8ab08847f..41d5631df 100644 --- a/apitest/pom.xml +++ b/apitest/pom.xml @@ -393,4 +393,4 @@ - + \ No newline at end of file diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java index 5e6c9ebe7..553f1801b 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java @@ -127,9 +127,19 @@ public void test(TestCaseDTO testCaseDTO) int maxLoopCount = Integer.parseInt(properties.getProperty("uinGenMaxLoopCount")); int currLoopCount = 0; while (currLoopCount < maxLoopCount) { - otpResponse = postWithBodyAndCookie(ApplnURI + sendOtpEndPoint, - getJsonFromTemplate(otpReqJson.toString(), sendOtpReqTemplate), COOKIENAME, - GlobalConstants.RESIDENT, testCaseDTO.getTestCaseName()); + if (testCaseName.contains(GlobalConstants.ESIGNET_)) { + if (ConfigManager.isInServiceNotDeployedList(GlobalConstants.ESIGNET)) { + throw new SkipException("esignet is not deployed hence skipping the testcase"); + } + String tempUrl = ConfigManager.getEsignetBaseUrl(); + otpResponse = postRequestWithCookieAuthHeaderAndXsrfToken(tempUrl + sendOtpEndPoint, + getJsonFromTemplate(otpReqJson.toString(), sendOtpReqTemplate), COOKIENAME, + testCaseDTO.getTestCaseName()); + } else { + otpResponse = postWithBodyAndCookie(ApplnURI + sendOtpEndPoint, + getJsonFromTemplate(otpReqJson.toString(), sendOtpReqTemplate), COOKIENAME, + GlobalConstants.RESIDENT, testCaseDTO.getTestCaseName()); + } if (otpResponse != null && otpResponse.asString().contains("IDA-MLC-018")) { logger.info("waiting for: " + properties.getProperty("uinGenDelayTime") @@ -179,11 +189,20 @@ public void test(TestCaseDTO testCaseDTO) } else { throw new AdminTestException("Invalid otp response"); } - - - response = postWithBodyAndCookieForAutoGeneratedId(ApplnURI + testCaseDTO.getEndPoint(), - getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()), auditLogCheck, COOKIENAME, - testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), idKeyName); + + if (testCaseName.contains(GlobalConstants.ESIGNET_)) { + if (ConfigManager.isInServiceNotDeployedList(GlobalConstants.ESIGNET)) { + throw new SkipException("esignet is not deployed hence skipping the testcase"); + } + String tempUrl = ConfigManager.getEsignetBaseUrl(); + response = postRequestWithCookieAuthHeaderAndXsrfTokenForAutoGenId(tempUrl + testCaseDTO.getEndPoint(), + getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()), COOKIENAME, + testCaseDTO.getTestCaseName(), idKeyName); + } else { + response = postWithBodyAndCookieForAutoGeneratedId(ApplnURI + testCaseDTO.getEndPoint(), + getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()), auditLogCheck, + COOKIENAME, testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), idKeyName); + } Map> ouputValid = OutputValidationUtil.doJsonOutputValidation( response.asString(), getJsonFromTemplate(res.toString(), testCaseDTO.getOutputTemplate()), testCaseDTO, @@ -217,17 +236,18 @@ public void setResultTestName(ITestResult result) { @AfterClass(alwaysRun = true) public void waittime() { - try { - long delayTime = Long.parseLong(properties.getProperty("Delaytime")); - if (!BaseTestCase.isTargetEnvLTS()) - delayTime = Long.parseLong(properties.getProperty("uinGenDelayTime")) - * Long.parseLong(properties.getProperty("uinGenMaxLoopCount")); - logger.info("waiting for " + delayTime + " mili secs after VID Generation In RESIDENT SERVICES"); - Thread.sleep(delayTime); - } catch (Exception e) { - logger.error("Exception : " + e.getMessage()); - Thread.currentThread().interrupt(); + if (!testCaseName.contains(GlobalConstants._AUTHENTICATEUSER)) { + try { + long delayTime = Long.parseLong(properties.getProperty("Delaytime")); + if (!BaseTestCase.isTargetEnvLTS()) + delayTime = Long.parseLong(properties.getProperty("uinGenDelayTime")) + * Long.parseLong(properties.getProperty("uinGenMaxLoopCount")); + logger.info("waiting for " + delayTime + " mili secs after VID Generation In RESIDENT SERVICES"); + Thread.sleep(delayTime); + } catch (Exception e) { + logger.error("Exception : " + e.getMessage()); + Thread.currentThread().interrupt(); + } } - } } diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithFormDataBodyForPdfDownload.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithFormDataBodyForPdfDownload.java new file mode 100644 index 000000000..8897361f4 --- /dev/null +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithFormDataBodyForPdfDownload.java @@ -0,0 +1,141 @@ +package io.mosip.testrig.apirig.testscripts; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.lang.reflect.Field; + +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.testng.ITest; +import org.testng.ITestContext; +import org.testng.ITestResult; +import org.testng.Reporter; +import org.testng.SkipException; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; +import org.testng.internal.BaseTestMethod; +import org.testng.internal.TestResult; + +import com.itextpdf.text.pdf.PdfReader; +import com.itextpdf.text.pdf.parser.PdfTextExtractor; + +import io.mosip.testrig.apirig.dto.TestCaseDTO; +import io.mosip.testrig.apirig.testrunner.BaseTestCase; +import io.mosip.testrig.apirig.testrunner.HealthChecker; +import io.mosip.testrig.apirig.utils.AdminTestException; +import io.mosip.testrig.apirig.utils.AdminTestUtil; +import io.mosip.testrig.apirig.utils.AuthenticationTestException; +import io.mosip.testrig.apirig.utils.ConfigManager; +import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.GlobalMethods; +import io.restassured.response.Response; + +public class PostWithFormDataBodyForPdfDownload extends AdminTestUtil implements ITest { + private static final Logger logger = Logger.getLogger(PostWithFormDataBodyForPdfDownload.class); + protected String testCaseName = ""; + public Response response = null; + public byte[] pdf=null; + public String pdfAsText =null; + + @BeforeClass + public static void setLogLevel() { + if (ConfigManager.IsDebugEnabled()) + logger.setLevel(Level.ALL); + else + logger.setLevel(Level.ERROR); + } + + /** + * get current testcaseName + */ + @Override + public String getTestName() { + return testCaseName; + } + + /** + * Data provider class provides test case list + * + * @return object of data provider + */ + @DataProvider(name = "testcaselist") + public Object[] getTestCaseList(ITestContext context) { + String ymlFile = context.getCurrentXmlTest().getLocalParameters().get("ymlFile"); + logger.info("Started executing yml: "+ymlFile); + return getYmlTestData(ymlFile); + } + + + /** + * Test method for OTP Generation execution + * + * @param objTestParameters + * @param testScenario + * @param testcaseName + * @throws AuthenticationTestException + * @throws AdminTestException + */ + @Test(dataProvider = "testcaselist") + public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException { + testCaseName = testCaseDTO.getTestCaseName(); + testCaseName = isTestCaseValidForExecution(testCaseDTO); + if (HealthChecker.signalTerminateExecution) { + throw new SkipException(GlobalConstants.TARGET_ENV_HEALTH_CHECK_FAILED + HealthChecker.healthCheckFailureMapS); + } + + if (testCaseDTO.getTestCaseName().contains("VID") || testCaseDTO.getTestCaseName().contains("Vid")) { + if (!BaseTestCase.getSupportedIdTypesValueFromActuator().contains("VID") + && !BaseTestCase.getSupportedIdTypesValueFromActuator().contains("vid")) { + throw new SkipException(GlobalConstants.VID_FEATURE_NOT_SUPPORTED); + } + } + + pdf = postWithFormDataBodyForPdf(ApplnURI + testCaseDTO.getEndPoint(), getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()), COOKIENAME, testCaseDTO.getRole(), testCaseDTO.getTestCaseName()); + PdfReader pdfReader = null; + ByteArrayInputStream bIS = null; + + try { + bIS = new ByteArrayInputStream(pdf); + pdfReader = new PdfReader(bIS); + pdfAsText = PdfTextExtractor.getTextFromPage(pdfReader, 1); + } catch (IOException e) { + Reporter.log("Exception : " + e.getMessage()); + } finally { + AdminTestUtil.closeByteArrayInputStream(bIS); + AdminTestUtil.closePdfReader(pdfReader); + } + + if (pdf != null && (new String(pdf).contains("errors") || pdfAsText == null)) { + GlobalMethods.reportResponse(null, ApplnURI + testCaseDTO.getEndPoint(), + "Not able to download issuer credential"); + if (!testCaseName.contains("_Neg")) { + throw new AdminTestException("Not able to download issuer credential"); + } + } else { + GlobalMethods.reportResponse(null, ApplnURI + testCaseDTO.getEndPoint(), pdfAsText); + } + + } + + /** + * The method ser current test name to result + * + * @param result + */ + @AfterMethod(alwaysRun = true) + public void setResultTestName(ITestResult result) { + try { + Field method = TestResult.class.getDeclaredField("m_method"); + method.setAccessible(true); + method.set(result, result.getMethod().clone()); + BaseTestMethod baseTestMethod = (BaseTestMethod) result.getMethod(); + Field f = baseTestMethod.getClass().getSuperclass().getDeclaredField("m_methodName"); + f.setAccessible(true); + f.set(baseTestMethod, testCaseName); + } catch (Exception e) { + Reporter.log("Exception : " + e.getMessage()); + } + } +} diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java new file mode 100644 index 000000000..0a9fe539f --- /dev/null +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java @@ -0,0 +1,211 @@ +package io.mosip.testrig.apirig.testscripts; + +import java.lang.reflect.Field; +import java.security.NoSuchAlgorithmException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.json.JSONObject; +import org.testng.ITest; +import org.testng.ITestContext; +import org.testng.ITestResult; +import org.testng.Reporter; +import org.testng.SkipException; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; +import org.testng.internal.BaseTestMethod; +import org.testng.internal.TestResult; + +import io.mosip.testrig.apirig.dto.OutputValidationDto; +import io.mosip.testrig.apirig.dto.TestCaseDTO; +import io.mosip.testrig.apirig.testrunner.BaseTestCase; +import io.mosip.testrig.apirig.testrunner.HealthChecker; +import io.mosip.testrig.apirig.utils.AdminTestException; +import io.mosip.testrig.apirig.utils.AdminTestUtil; +import io.mosip.testrig.apirig.utils.AuthenticationTestException; +import io.mosip.testrig.apirig.utils.ConfigManager; +import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.OutputValidationUtil; +import io.mosip.testrig.apirig.utils.ReportUtil; +import io.restassured.response.Response; + +public class SimplePostForAutoGenId extends AdminTestUtil implements ITest { + private static final Logger logger = Logger.getLogger(SimplePostForAutoGenId.class); + protected String testCaseName = ""; + public String idKeyName = null; + public Response response = null; + public boolean sendEsignetToken = false; + public boolean auditLogCheck = false; + + @BeforeClass + public static void setLogLevel() { + if (ConfigManager.IsDebugEnabled()) + logger.setLevel(Level.ALL); + else + logger.setLevel(Level.ERROR); + } + + /** + * get current testcaseName + */ + @Override + public String getTestName() { + return testCaseName; + } + + /** + * Data provider class provides test case list + * + * @return object of data provider + */ + @DataProvider(name = "testcaselist") + public Object[] getTestCaseList(ITestContext context) { + String ymlFile = context.getCurrentXmlTest().getLocalParameters().get("ymlFile"); + sendEsignetToken = context.getCurrentXmlTest().getLocalParameters().containsKey("sendEsignetToken"); + idKeyName = context.getCurrentXmlTest().getLocalParameters().get("idKeyName"); + logger.info("Started executing yml: " + ymlFile); + return getYmlTestData(ymlFile); + } + + /** + * Test method for OTP Generation execution + * + * @param objTestParameters + * @param testScenario + * @param testcaseName + * @throws AuthenticationTestException + * @throws AdminTestException + * @throws NoSuchAlgorithmException + */ + @Test(dataProvider = "testcaselist") + public void test(TestCaseDTO testCaseDTO) + throws AuthenticationTestException, AdminTestException, NoSuchAlgorithmException { + testCaseName = testCaseDTO.getTestCaseName(); + if (HealthChecker.signalTerminateExecution) { + throw new SkipException( + GlobalConstants.TARGET_ENV_HEALTH_CHECK_FAILED + HealthChecker.healthCheckFailureMapS); + } + if (testCaseDTO.getTestCaseName().contains("VID") || testCaseDTO.getTestCaseName().contains("Vid")) { + if (!BaseTestCase.getSupportedIdTypesValueFromActuator().contains("VID") + && !BaseTestCase.getSupportedIdTypesValueFromActuator().contains("vid")) { + throw new SkipException(GlobalConstants.VID_FEATURE_NOT_SUPPORTED); + } + } + + if (BaseTestCase.isTargetEnvLTS()) { + if (!ConfigManager.isInServiceNotDeployedList(GlobalConstants.RESIDENT)) { + if ((BaseTestCase.currentModule.equals("esignet") && testCaseName.startsWith("ESignetIdR_Generate"))) { + throw new SkipException( + GlobalConstants.VID_GENERATED_USING_RESIDENT_API_SO_FEATURE_NOT_SUPPORTED_OR_NEEDED_MESSAGE); +// qa115 - f +// cam - t f +// dev - t + } + } + } + + testCaseName = isTestCaseValidForExecution(testCaseDTO); + String[] templateFields = testCaseDTO.getTemplateFields(); + String inputJson = ""; + + inputJson = getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()); + + String outputJson = getJsonFromTemplate(testCaseDTO.getOutput(), testCaseDTO.getOutputTemplate()); + + if (testCaseDTO.getTemplateFields() != null && templateFields.length > 0) { + ArrayList inputtestCases = AdminTestUtil.getInputTestCase(testCaseDTO); + ArrayList outputtestcase = AdminTestUtil.getOutputTestCase(testCaseDTO); + for (int i = 0; i < languageList.size(); i++) { + response = postWithBodyAndCookieForAutoGeneratedId(ApplnURI + testCaseDTO.getEndPoint(), + getJsonFromTemplate(inputtestCases.get(i).toString(), testCaseDTO.getInputTemplate()), + COOKIENAME, testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), idKeyName); + + Map> ouputValid = OutputValidationUtil.doJsonOutputValidation( + response.asString(), + getJsonFromTemplate(outputtestcase.get(i).toString(), testCaseDTO.getOutputTemplate()), + testCaseDTO, response.getStatusCode()); + if (testCaseDTO.getTestCaseName().toLowerCase().contains("dynamic")) { + JSONObject json = new JSONObject(response.asString()); + idField = json.getJSONObject("response").get("id").toString(); + } + Reporter.log(ReportUtil.getOutputValidationReport(ouputValid)); + + if (!OutputValidationUtil.publishOutputResult(ouputValid)) + throw new AdminTestException("Failed at output validation"); + } + } else { + if (testCaseName.contains("ESignet_")) { + if (ConfigManager.isInServiceNotDeployedList(GlobalConstants.ESIGNET)) { + throw new SkipException("esignet is not deployed hence skipping the testcase"); + } + String tempUrl = ConfigManager.getEsignetBaseUrl(); + if (testCaseDTO.getEndPoint().startsWith("$ESIGNETMOCKBASEURL$") + && testCaseName.contains("SunBirdRC")) { + if (ConfigManager.isInServiceNotDeployedList("sunbirdrc")) + throw new SkipException(GlobalConstants.SERVICE_NOT_DEPLOYED_MESSAGE); + + if (ConfigManager.getEsignetMockBaseURL() != null + && !ConfigManager.getEsignetMockBaseURL().isBlank()) + tempUrl = ApplnURI.replace("api-internal.", ConfigManager.getEsignetMockBaseURL()); + testCaseDTO.setEndPoint(testCaseDTO.getEndPoint().replace("$ESIGNETMOCKBASEURL$", "")); + } + if (testCaseName.contains("_AuthorizationCode_")) { + response = postRequestWithCookieAuthHeaderAndXsrfTokenForAutoGenId( + tempUrl + testCaseDTO.getEndPoint(), inputJson, COOKIENAME, testCaseDTO.getTestCaseName(), + idKeyName); + } else { + response = postWithBodyAndBearerTokenForAutoGeneratedId(tempUrl + testCaseDTO.getEndPoint(), + inputJson, COOKIENAME, testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), idKeyName); + } + } else { + response = postWithBodyAndCookieForAutoGeneratedId(ApplnURI + testCaseDTO.getEndPoint(), inputJson, + auditLogCheck, COOKIENAME, testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), idKeyName, + sendEsignetToken); + } + + Map> ouputValid = null; + if (testCaseName.contains("_StatusCode")) { + + OutputValidationDto customResponse = customStatusCodeResponse(String.valueOf(response.getStatusCode()), + testCaseDTO.getOutput()); + + ouputValid = new HashMap<>(); + ouputValid.put(GlobalConstants.EXPECTED_VS_ACTUAL, List.of(customResponse)); + } else { + ouputValid = OutputValidationUtil.doJsonOutputValidation(response.asString(), + getJsonFromTemplate(testCaseDTO.getOutput(), testCaseDTO.getOutputTemplate()), testCaseDTO, + response.getStatusCode()); + } + Reporter.log(ReportUtil.getOutputValidationReport(ouputValid)); + if (!OutputValidationUtil.publishOutputResult(ouputValid)) + throw new AdminTestException("Failed at output validation"); + } + + } + + /** + * The method ser current test name to result + * + * @param result + */ + @AfterMethod(alwaysRun = true) + public void setResultTestName(ITestResult result) { + try { + Field method = TestResult.class.getDeclaredField("m_method"); + method.setAccessible(true); + method.set(result, result.getMethod().clone()); + BaseTestMethod baseTestMethod = (BaseTestMethod) result.getMethod(); + Field f = baseTestMethod.getClass().getSuperclass().getDeclaredField("m_methodName"); + f.setAccessible(true); + f.set(baseTestMethod, testCaseName); + } catch (Exception e) { + Reporter.log("Exception : " + e.getMessage()); + } + } +} diff --git a/apitest/src/main/resources/config/Kernel.properties b/apitest/src/main/resources/config/Kernel.properties index d98d4febe..02e7c0ba7 100644 --- a/apitest/src/main/resources/config/Kernel.properties +++ b/apitest/src/main/resources/config/Kernel.properties @@ -101,7 +101,7 @@ auditActuatorEndpoint=/v1/auditmanager/actuator/info validateBindingEndpoint=ida-binding esignetWellKnownEndPoint=/v1/esignet/oidc/.well-known/openid-configuration signupSettingsEndPoint=/v1/signup/settings - +actuatorMimotoEndpoint=/residentmobileapp/actuator/env diff --git a/apitest/src/main/resources/mimoto/AddIdentity/AddIdentity.yml b/apitest/src/main/resources/mimoto/AddIdentity/AddIdentity.yml index 1a7b52eb3..98dbdeb9f 100644 --- a/apitest/src/main/resources/mimoto/AddIdentity/AddIdentity.yml +++ b/apitest/src/main/resources/mimoto/AddIdentity/AddIdentity.yml @@ -82,4 +82,31 @@ AddIdentity: "errorCode": "IDR-IDC-004" } ] +}' + + Mimoto_AddIdentity_downloadIssuerCredential_smoke_Pos: + endPoint: /idrepository/v1/identity/ + role: idrepo + restMethod: post + inputTemplate: mimoto/AddIdentity/addIdentity_$LANGNUMBER$ + outputTemplate: mimoto/AddIdentity/addIdentityResult + input: '{ + "value": "$BIOVALUE$", + "id": "mosip.id.create", + "registrationId": "$RID$", + "biometricReferenceId": "23452353", + "UIN": "$UIN$", + "dateOfBirth": "1992/04/15", + "postalCode": "14022", + "email": "Mimoto_AddIdentity_downloadIssuerCredential_smoke_Pos@mosip.net", + "phone": "9876543210", + "referenceIdentityNumber": "6789545678878", + "version": "v1", + "introducerRID": "212124324784879", + "introducerUIN": "212124324784879", + "category": "individualBiometrics", + "requesttime": "$TIMESTAMP$" +}' + output: '{ + "status":"ACTIVATED" }' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.hbs b/apitest/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.hbs new file mode 100644 index 000000000..887633e11 --- /dev/null +++ b/apitest/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.hbs @@ -0,0 +1,15 @@ +{ + "encodedHash": "{{encodedHash}}", + "requestTime": "{{requestTime}}", + "request": { + "transactionId": "{{transactionId}}", + "individualId": "{{individualId}}", + "challengeList" : [ + { + "authFactorType" : "{{authFactorType}}", + "challenge" : "{{challenge}}", + "format": "alpha-numeric" + } + ] + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.yml b/apitest/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.yml new file mode 100644 index 000000000..7e1901e0e --- /dev/null +++ b/apitest/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.yml @@ -0,0 +1,33 @@ +AuthenticateUser: + Mimoto_ESignet_AuthenticateUserIDP_uin_Otp_Valid_Smoke: + endPoint: /v1/esignet/authorization/authenticate + role: resident + restMethod: post + checkErrorsOnlyInResponse: true + validityCheckRequired: true + inputTemplate: mimoto/AuthenticateUser/AuthenticateUser + outputTemplate: mimoto/AuthenticateUser/AuthenticateUserResult + input: '{ + "encodedHash": "$ID:ESignet_OAuthDetailsRequest_all_Valid_Smoke_sid_encodedResp$", + "requestTime": "$TIMESTAMP$", + "transactionId": "$ID:ESignet_OAuthDetailsRequest_all_Valid_Smoke_sid_transactionId$", + "individualId": "$ID:AddIdentity_downloadIssuerCredential_smoke_Pos_UIN$", + "authFactorType" : "OTP", + "challenge" : "$ID:AddIdentity_downloadIssuerCredential_smoke_Pos_EMAIL$", + "sendOtp":{ + "encodedHash": "$ID:ESignet_OAuthDetailsRequest_all_Valid_Smoke_sid_encodedResp$", + "requestTime": "$TIMESTAMP$", + "transactionId": "$ID:ESignet_OAuthDetailsRequest_all_Valid_Smoke_sid_transactionId$", + "individualId": "$ID:AddIdentity_downloadIssuerCredential_smoke_Pos_UIN$", + "otpChannels": [{channel: "email"},{channel: "phone"}], + "sendOtpReqTemplate": "mimoto/SendOtpEsignet/SendOtp", + "sendOtpEndPoint": "/v1/esignet/authorization/send-otp" + } + }' + output: '{ + "sendOtpResp":{ + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"esignet/SendOtp/SendOtpResult", + "maskedEmail": "$IGNORE$" + } +}' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/AuthenticateUser/AuthenticateUserResult.hbs b/apitest/src/main/resources/mimoto/AuthenticateUser/AuthenticateUserResult.hbs new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/apitest/src/main/resources/mimoto/AuthenticateUser/AuthenticateUserResult.hbs @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/AuthorizationCode/AuthorizationCode.hbs b/apitest/src/main/resources/mimoto/AuthorizationCode/AuthorizationCode.hbs new file mode 100644 index 000000000..491dca1ba --- /dev/null +++ b/apitest/src/main/resources/mimoto/AuthorizationCode/AuthorizationCode.hbs @@ -0,0 +1,19 @@ +{ + "encodedHash": "{{encodedHash}}", + "requestTime": "{{requestTime}}", + "request": { + "transactionId": "{{transactionId}}", + "acceptedClaims": [ + {{#each acceptedClaims}} + "{{claim}}" + {{#unless @last}},{{/unless}} + {{/each}} + ], + "permittedAuthorizeScopes": [ + {{#each permittedAuthorizeScopes}} + "{{scope}}" + {{#unless @last}},{{/unless}} + {{/each}} + ] + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/AuthorizationCode/AuthorizationCode.yml b/apitest/src/main/resources/mimoto/AuthorizationCode/AuthorizationCode.yml new file mode 100644 index 000000000..5c8b19a23 --- /dev/null +++ b/apitest/src/main/resources/mimoto/AuthorizationCode/AuthorizationCode.yml @@ -0,0 +1,16 @@ +AuthorizationCode: + Mimoto_ESignet_AuthorizationCode_uin_All_Valid_Smoke_sid: + endPoint: /v1/esignet/authorization/auth-code + role: resident + restMethod: post + checkErrorsOnlyInResponse: true + validityCheckRequired: true + inputTemplate: mimoto/AuthorizationCode/AuthorizationCode + outputTemplate: mimoto/AuthorizationCode/AuthorizationCodeResult + input: '{ + "encodedHash": "$ID:ESignet_OAuthDetailsRequest_all_Valid_Smoke_sid_encodedResp$", + "requestTime": "$TIMESTAMP$", + "transactionId": "$ID:ESignet_OAuthDetailsRequest_all_Valid_Smoke_sid_transactionId$" +}' + output: '{ +}' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/AuthorizationCode/AuthorizationCodeResult.hbs b/apitest/src/main/resources/mimoto/AuthorizationCode/AuthorizationCodeResult.hbs new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/apitest/src/main/resources/mimoto/AuthorizationCode/AuthorizationCodeResult.hbs @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.hbs b/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.hbs new file mode 100644 index 000000000..8491d6f96 --- /dev/null +++ b/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.hbs @@ -0,0 +1,8 @@ +{ + "grant_type": "{{grant_type}}", + "code": "{{code}}", + "redirect_uri": "{{redirect_uri}}", + "code_verifier": "{{code_verifier}}", + "issuer": "{{issuer}}", + "credential": "{{credential}}" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml b/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml new file mode 100644 index 000000000..a86d6c710 --- /dev/null +++ b/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml @@ -0,0 +1,110 @@ +DownloadIssuerCredential: + Mimoto_DownloadIssuerCredential_All_Valid_Smoke: + endPoint: /residentmobileapp/credentials/download + role: resident + restMethod: get + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/DownloadIssuerCredential/DownloadIssuerCredentialResult + input: '{ + "grant_type": "authorization_code", + "code": "$ID:ESignet_AuthorizationCode_uin_All_Valid_Smoke_sid_code$", + "redirect_uri": "$INJIREDIRECTURI$", + "code_verifier": "$CODEVERIFIER$", + "issuer": "Mosip", + "credential": "MOSIPVerifiableCredential" +}' + output: '{ +}' + + Mimoto_DownloadIssuerCredential_Invalid_Issuer_Neg: + endPoint: /residentmobileapp/credentials/download + role: resident + restMethod: get + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/DownloadIssuerCredential/DownloadIssuerCredentialResult + input: '{ + "grant_type": "authorization_code", + "code": "$ID:ESignet_AuthorizationCode_uin_All_Valid_Smoke_sid_code$", + "redirect_uri": "$INJIREDIRECTURI$", + "code_verifier": "$CODEVERIFIER$", + "issuer": "MosipInvalid", + "credential": "MOSIPVerifiableCredential" +}' + output: '{ + "errors":[ + { + "errorCode":"RESIDENT-APP-035" + } + ] +}' + + Mimoto_DownloadIssuerCredential_Invalid_Credential_Neg: + endPoint: /residentmobileapp/credentials/download + role: resident + restMethod: get + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/DownloadIssuerCredential/DownloadIssuerCredentialResult + input: '{ + "grant_type": "authorization_code", + "code": "$ID:ESignet_AuthorizationCode_uin_All_Valid_Smoke_sid_code$", + "redirect_uri": "$INJIREDIRECTURI$", + "code_verifier": "$CODEVERIFIER$", + "issuer": "Mosip", + "credential": "MOSIPVerifiableCredentialInvalid" +}' + output: '{ + "errors":[ + { + "errorCode":"RESIDENT-APP-035" + } + ] +}' + + Mimoto_DownloadIssuerCredential_Invalid_AuthorizationCode_Neg: + endPoint: /residentmobileapp/credentials/download + role: resident + restMethod: get + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/DownloadIssuerCredential/DownloadIssuerCredentialResult + input: '{ + "grant_type": "authorization_code", + "code": "XjIsJgQAX3lrhMmXgRn-jerNMCqf0GdiBLx5MbMig", + "redirect_uri": "$INJIREDIRECTURI$", + "code_verifier": "$CODEVERIFIER$", + "issuer": "Mosip", + "credential": "MOSIPVerifiableCredentialInvalid" +}' + output: '{ + "errors":[ + { + "errorCode":"RESIDENT-APP-035" + } + ] +}' + + Mimoto_DownloadIssuerCredential_Expired_AuthorizationCode_Neg: + endPoint: /residentmobileapp/credentials/download + role: resident + restMethod: get + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/DownloadIssuerCredential/DownloadIssuerCredentialResult + input: '{ + "grant_type": "authorization_code", + "code": "XjIsJgQAX3lrhMmXgRn-jerNMCqf0GdiBLx5MbMigNY", + "redirect_uri": "$INJIREDIRECTURI$", + "code_verifier": "$CODEVERIFIER$", + "issuer": "Mosip", + "credential": "MOSIPVerifiableCredentialInvalid" +}' + output: '{ + "errors":[ + { + "errorCode":"RESIDENT-APP-035" + } + ] +}' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredentialResult.hbs b/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredentialResult.hbs new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredentialResult.hbs @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.hbs b/apitest/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.hbs new file mode 100644 index 000000000..71a599fbc --- /dev/null +++ b/apitest/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.hbs @@ -0,0 +1,4 @@ +{ + "issuerId": "{{issuerId}}", + "credentialType": "{{credentialType}}" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.yml b/apitest/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.yml new file mode 100644 index 000000000..aeb6e5c6e --- /dev/null +++ b/apitest/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.yml @@ -0,0 +1,47 @@ +GetAllCredentialTypes: + Mimoto_GetAllCredentialTypes_All_Valid_Smoke: + endPoint: /residentmobileapp/issuers/{issuerId}/credentialTypes + role: resident + restMethod: get + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/GetAllCredentialTypes/GetAllCredentialTypes + outputTemplate: mimoto/GetAllCredentialTypes/GetAllCredentialTypesResult + input: '{ + "issuerId": "Sunbird", + "credentialType": "$REMOVE$" +}' + output: '{ +}' + + Mimoto_GetAllCredentialTypes_Specific_Issuer_All_Valid_Smoke: + endPoint: /residentmobileapp/issuers/{issuerId}/credentialTypes/?search={credentialType} + role: resident + restMethod: get + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/GetAllCredentialTypes/GetAllCredentialTypes + outputTemplate: mimoto/GetAllCredentialTypes/GetAllCredentialTypesResult + input: '{ + "issuerId": "Sunbird", + "credentialType": "sunbird" +}' + output: '{ +}' + + Mimoto_GetAllCredentialTypes_Invalid_Issuer_Neg: + endPoint: /residentmobileapp/issuers/{issuerId}/credentialTypes + role: resident + restMethod: get + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/GetAllCredentialTypes/GetAllCredentialTypes + outputTemplate: mimoto/error + input: '{ + "issuerId": "invalid", + "credentialType": "$REMOVE$" +}' + output: '{ + "errors":[ + { + "errorCode":"RESIDENT-APP-035" + } + ] +}' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypesResult.hbs b/apitest/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypesResult.hbs new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/apitest/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypesResult.hbs @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.hbs b/apitest/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.hbs new file mode 100644 index 000000000..6dec068b5 --- /dev/null +++ b/apitest/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.hbs @@ -0,0 +1,17 @@ +{ + "requestTime": "{{requestTime}}", + "request": { + "clientId": "{{clientId}}", + "scope": "{{scope}}", + "responseType": "{{responseType}}", + "redirectUri": "{{redirectUri}}", + "display": "{{display}}", + "prompt": "{{prompt}}", + "acrValues": "{{acrValues}}", + "nonce" : "{{nonce}}", + "state" : "{{state}}", + "claimsLocales" : "{{claimsLocales}}", + "codeChallenge" : "{{codeChallenge}}", + "codeChallengeMethod" : "{{codeChallengeMethod}}" + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.yml b/apitest/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.yml new file mode 100644 index 000000000..acf2dc2a6 --- /dev/null +++ b/apitest/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.yml @@ -0,0 +1,26 @@ +OAuthDetailsRequest: + Mimoto_ESignet_OAuthDetailsRequest_all_Valid_Smoke_sid: + endPoint: /v1/esignet/authorization/v2/oauth-details + role: resident + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/OAuthDetailsRequest/OAuthDetailsRequest + outputTemplate: mimoto/OAuthDetailsRequest/OAuthDetailsRequestResult + input: '{ + "requestTime": "$TIMESTAMP$", + "clientId": "$GETCLIENTIDFROMMIMOTOACTUATOR$", + "scope": "mosip_identity_vc_ldp", + "responseType": "code", + "redirectUri": "$INJIREDIRECTURI$", + "display": "popup", + "prompt": "login", + "acrValues": "mosip:idp:acr:generated-code mosip:idp:acr:linked-wallet mosip:idp:acr:biometrics", + "nonce": "973eieljzng", + "state": "eree2311", + "claimsLocales": "en", + "codeChallenge": "$CODECHALLENGE$", + "codeChallengeMethod": "S256" +}' + output: '{ + +}' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequestResult.hbs b/apitest/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequestResult.hbs new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/apitest/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequestResult.hbs @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOtpEsignet/SendOtp.hbs b/apitest/src/main/resources/mimoto/SendOtpEsignet/SendOtp.hbs new file mode 100644 index 000000000..aeaf81251 --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOtpEsignet/SendOtp.hbs @@ -0,0 +1,14 @@ +{ + "encodedHash": "{{encodedHash}}", + "requestTime": "{{requestTime}}", + "request": { + "transactionId": "{{transactionId}}", + "individualId": "{{individualId}}", + "otpChannels": [ + {{#each otpChannels}} + "{{channel}}" + {{#unless @last}},{{/unless}} + {{/each}} + ] + } + } \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOtpEsignet/SendOtpResult.hbs b/apitest/src/main/resources/mimoto/SendOtpEsignet/SendOtpResult.hbs new file mode 100644 index 000000000..c823777f1 --- /dev/null +++ b/apitest/src/main/resources/mimoto/SendOtpEsignet/SendOtpResult.hbs @@ -0,0 +1,6 @@ +{ + "response": { + "maskedEmail": "{{maskedEmail}}", + "maskedMobile": "{{maskedMobile}}" + } + } \ No newline at end of file diff --git a/apitest/testNgXmlFiles/mimotoApi.xml b/apitest/testNgXmlFiles/mimotoApi.xml index 2871b9c26..29812fb04 100644 --- a/apitest/testNgXmlFiles/mimotoApi.xml +++ b/apitest/testNgXmlFiles/mimotoApi.xml @@ -23,6 +23,31 @@ + + + + + + + + + + + + + + + + + + + + + + @@ -102,5 +127,19 @@ + + + + + + + + + + + + \ No newline at end of file From a8e09aae55a434ae3d9540e7e59c683950ab97ff Mon Sep 17 00:00:00 2001 From: Rakshitha650 <76676196+Rakshitha650@users.noreply.github.com> Date: Wed, 3 Jul 2024 13:51:07 +0530 Subject: [PATCH 170/860] [DSD-5651]Update chart-lint-publish.yml Signed-off-by: Rakshitha650 <76676196+Rakshitha650@users.noreply.github.com> --- .github/workflows/chart-lint-publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/chart-lint-publish.yml b/.github/workflows/chart-lint-publish.yml index 43cbb91c8..fe83429df 100644 --- a/.github/workflows/chart-lint-publish.yml +++ b/.github/workflows/chart-lint-publish.yml @@ -40,7 +40,7 @@ on: - MOSIP* - release* paths: - - './helm/**' + - 'helm/**' jobs: chart-lint-publish: From 5060ec02659eebb304983f01c57b400cc0bc9c39 Mon Sep 17 00:00:00 2001 From: Rakshitha650 <76676196+Rakshitha650@users.noreply.github.com> Date: Wed, 3 Jul 2024 16:30:56 +0530 Subject: [PATCH 171/860] [[DSD-5651]]Updated README.md Signed-off-by: Rakshitha650 <76676196+Rakshitha650@users.noreply.github.com> --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 45127bd0a..c16c349cd 100644 --- a/README.md +++ b/README.md @@ -135,3 +135,4 @@ docker-compose restart mimoto-service ## Credits Credits listed [here](/Credits.md) + From 8d2b566081e45bff78aee73118f9538cea5457f3 Mon Sep 17 00:00:00 2001 From: santhoshsunder Date: Mon, 8 Jul 2024 16:56:09 +0530 Subject: [PATCH 172/860] INJIMOB-1568 Signed-off-by: santhoshsunder --- .../mimoto/AddIdentity/AddIdentity.yml | 4 + .../AidGetIndividualId/AidGetIndividualId.yml | 5 ++ .../mimoto/AuthLock/createAuthLock.yml | 6 ++ .../mimoto/AuthUnLock/createAuthUnLock.yml | 4 + .../AuthenticateUser/AuthenticateUser.yml | 1 + .../AuthorizationCode/AuthorizationCode.yml | 1 + .../mimoto/BindingOtp/BindingOtp.yml | 36 +++++++++ .../CredentialCheckStatus.yml | 3 + .../DownloadCredential/DownloadCredential.yml | 3 + .../DownloadWithReqid/DownloadWithReqid.yml | 2 + .../RequestCredentials/ReqCredential.yml | 6 ++ .../DownloadIssuerCredential.yml | 5 ++ .../mimoto/GenerateVID/createGenerateVID.yml | 6 ++ .../GetAllCredentialTypes.yml | 3 + .../mimoto/GetAllIssuers/GetAllIssuers.yml | 3 + .../OAuthDetailsRequest.yml | 1 + .../main/resources/mimoto/SendOTP/SendOTP.yml | 3 + .../resources/mimoto/SendOTP1/SendOTP.yml | 4 + .../mimoto/SendOTPUIN/createSendOTP.yml | 1 + .../mimoto/SendOtpForVid/createSendOTP.yml | 1 + .../mimoto/ValidateOTP/ValidateOTP.yml | 12 +++ .../mimoto/WalletBinding/WalletBinding.yml | 78 +++++++++++++++++++ 22 files changed, 188 insertions(+) diff --git a/apitest/src/main/resources/mimoto/AddIdentity/AddIdentity.yml b/apitest/src/main/resources/mimoto/AddIdentity/AddIdentity.yml index 98dbdeb9f..9ac7340df 100644 --- a/apitest/src/main/resources/mimoto/AddIdentity/AddIdentity.yml +++ b/apitest/src/main/resources/mimoto/AddIdentity/AddIdentity.yml @@ -1,6 +1,7 @@ AddIdentity: Mimoto_AddIdentity_withValidParameters_smoke_Pos: endPoint: /idrepository/v1/identity/ + description : Tring to addidentity with all valid parameters role: idrepo restMethod: post inputTemplate: mimoto/AddIdentity/addIdentity_$LANGNUMBER$ @@ -28,6 +29,7 @@ AddIdentity: Mimoto_AddIdentity_Binding_smoke_Pos: endPoint: /idrepository/v1/identity/ + description : Tring to addidentity for binding with all valid parameters role: idrepo restMethod: post inputTemplate: mimoto/AddIdentity/addIdentity_$LANGNUMBER$ @@ -55,6 +57,7 @@ AddIdentity: Mimoto_AddIdentity_without_FaceDate_CBEFF_smoke_Pos: endPoint: /idrepository/v1/identity/ + description : Tring to addidentity without FaceDate role: idrepo restMethod: post inputTemplate: mimoto/AddIdentity/addIdentity_$LANGNUMBER$ @@ -86,6 +89,7 @@ AddIdentity: Mimoto_AddIdentity_downloadIssuerCredential_smoke_Pos: endPoint: /idrepository/v1/identity/ + description : Tring to addidentity for downloading issuer credential role: idrepo restMethod: post inputTemplate: mimoto/AddIdentity/addIdentity_$LANGNUMBER$ diff --git a/apitest/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml b/apitest/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml index b778650a1..907a80dbc 100644 --- a/apitest/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml +++ b/apitest/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml @@ -1,6 +1,7 @@ AidGetIndividualId: Mimoto_AidGetIndividualId_Getting_With_Valid_UIN_All: endPoint: /residentmobileapp/aid/get-individual-id + description : Tring to get individualID with valid AID role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -26,6 +27,7 @@ AidGetIndividualId: Mimoto_AidGetIndividualId_Getting_With_Invalid_AID_Neg: endPoint: /residentmobileapp/aid/get-individual-id + description : Tring to get individualID with invalid AID role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -55,6 +57,7 @@ AidGetIndividualId: Mimoto_AidGetIndividualId_Getting_With_Invalid_Otp_Neg: endPoint: /residentmobileapp/aid/get-individual-id + description : Tring to get individualID with Invalid OTP role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -84,6 +87,7 @@ AidGetIndividualId: Mimoto_AidGetIndividualId_Getting_With_Valid_Otp_All: endPoint: /residentmobileapp/aid/get-individual-id + description : Tring to get individualID with valid OTP role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -109,6 +113,7 @@ AidGetIndividualId: Mimoto_AidGetIndividualId_Getting_With_Invalid_lenght_Of_AID_Neg: endPoint: /residentmobileapp/aid/get-individual-id + description : Tring to get individualID with invalid lengh of AID role: resident checkErrorsOnlyInResponse: true restMethod: post diff --git a/apitest/src/main/resources/mimoto/AuthLock/createAuthLock.yml b/apitest/src/main/resources/mimoto/AuthLock/createAuthLock.yml index 533b98724..21e979ac8 100644 --- a/apitest/src/main/resources/mimoto/AuthLock/createAuthLock.yml +++ b/apitest/src/main/resources/mimoto/AuthLock/createAuthLock.yml @@ -1,6 +1,7 @@ AuthLock: Mimoto_AuthLock_Valid_UIN_All: endPoint: /residentmobileapp/req/auth/lock + description : Tring to lock a credential with valid UIN role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -28,6 +29,7 @@ AuthLock: }' Mimoto_AuthLock_InValid_Otp_All: endPoint: /residentmobileapp/req/auth/lock + description : Tring to lock a credential with invalid OTP role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -60,6 +62,7 @@ AuthLock: }' Mimoto_AuthLock_with_invalidUIN_Valid_Otp_sid: endPoint: /residentmobileapp/req/auth/lock + description : Tring to lock a credential with valid OTP role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -92,6 +95,7 @@ AuthLock: }' Mimoto_AuthLock_Valid_VID_All: endPoint: /residentmobileapp/req/auth/lock + description : Tring to lock a VID credential with valid VID role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -119,6 +123,7 @@ AuthLock: }' Mimoto_AuthLock_with_invalidVID_Valid_Otp: endPoint: /residentmobileapp/req/auth/lock + description : Tring to lock a VID credential with invalid OTP role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -151,6 +156,7 @@ AuthLock: }' Mimoto_AuthLock_invalidVID_Valid_Otp: endPoint: /residentmobileapp/req/auth/lock + description : Tring to lock a VID credential with invalid VID role: resident checkErrorsOnlyInResponse: true restMethod: post diff --git a/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml b/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml index 9fe7af39f..4be3631b6 100644 --- a/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml +++ b/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml @@ -1,6 +1,7 @@ AuthUnlock: Mimoto_AuthUnLock_Valid_UIN_All: endPoint: /residentmobileapp/req/auth/unlock + description : Trying to uloack a locked UIN credential with valid request role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -29,6 +30,7 @@ AuthUnlock: }' Mimoto_AuthUnLock_Valid_UIN_With_VID_All: endPoint: /residentmobileapp/req/auth/unlock + description : Trying to uloack a locked VID credential with valid request role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -57,6 +59,7 @@ AuthUnlock: }' Mimoto_AuthUnLock_With_InValid_OTP_All: endPoint: /residentmobileapp/req/auth/unlock + description : Trying to uloack a locked UIN credential with invalid role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -90,6 +93,7 @@ AuthUnlock: }' Mimoto_AuthUnLock_InValid_OTP_With_VID_All: endPoint: /residentmobileapp/req/auth/unlock + description : Trying to uloack a locked VID credential with invalid OTP role: resident checkErrorsOnlyInResponse: true restMethod: post diff --git a/apitest/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.yml b/apitest/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.yml index 7e1901e0e..d7d88f9cc 100644 --- a/apitest/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.yml +++ b/apitest/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.yml @@ -1,6 +1,7 @@ AuthenticateUser: Mimoto_ESignet_AuthenticateUserIDP_uin_Otp_Valid_Smoke: endPoint: /v1/esignet/authorization/authenticate + description : trying to retrive OTP authenticate the esignet page role: resident restMethod: post checkErrorsOnlyInResponse: true diff --git a/apitest/src/main/resources/mimoto/AuthorizationCode/AuthorizationCode.yml b/apitest/src/main/resources/mimoto/AuthorizationCode/AuthorizationCode.yml index 5c8b19a23..d29754168 100644 --- a/apitest/src/main/resources/mimoto/AuthorizationCode/AuthorizationCode.yml +++ b/apitest/src/main/resources/mimoto/AuthorizationCode/AuthorizationCode.yml @@ -1,6 +1,7 @@ AuthorizationCode: Mimoto_ESignet_AuthorizationCode_uin_All_Valid_Smoke_sid: endPoint: /v1/esignet/authorization/auth-code + description : trying to get authhorization from esignet page with valid request role: resident restMethod: post checkErrorsOnlyInResponse: true diff --git a/apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.yml b/apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.yml index 8d63d2a9b..783ac820b 100644 --- a/apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.yml +++ b/apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.yml @@ -2,6 +2,7 @@ BindingOtp: Mimoto_BindingOtp_Valid_UIN_All_Smoke: endPoint: /residentmobileapp/binding-otp role: resident + description : Reqeusting OTP for binding a individualID with valid UIN checkErrorsOnlyInResponse: true restMethod: post validityCheckRequired: true @@ -18,6 +19,7 @@ BindingOtp: Mimoto_BindingOtp_Valid_vid_All_Smoke: endPoint: /residentmobileapp/binding-otp + description : Reqeusting OTP for binding a individualID with valid VID role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -35,6 +37,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Invalid_individualId_Neg: endPoint: /residentmobileapp/binding-otp + description : Reqeusting OTP for binding a individualID with invalid UIN role: resident restMethod: post validityCheckRequired: true @@ -55,6 +58,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Missing_individualId_Neg: endPoint: /residentmobileapp/binding-otp + description : Reqeusting OTP for binding a individualID without individualId attribute role: resident restMethod: post validityCheckRequired: true @@ -75,6 +79,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Empty_individualId_Neg: endPoint: /residentmobileapp/binding-otp + description : Reqeusting OTP for binding a individualID with individualId missing role: resident restMethod: post validityCheckRequired: true @@ -95,6 +100,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Null_individualId_Neg: endPoint: /residentmobileapp/binding-otp + description : Reqeusting OTP for binding a individualID with individualId value as null role: resident restMethod: post validityCheckRequired: true @@ -115,6 +121,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_SpaceSeparated_otpChannels_Neg: endPoint: /residentmobileapp/binding-otp + description : Reqeusting OTP for binding a individualID with OTP channel value been spaced in between role: resident restMethod: post validityCheckRequired: true @@ -135,6 +142,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Invalid_OtpChannels_Neg: endPoint: /residentmobileapp/binding-otp + description : Reqeusting OTP for binding a individualID with invalid OTP channel role: resident restMethod: post validityCheckRequired: true @@ -155,6 +163,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Missing_OtpChannels_Neg: endPoint: /residentmobileapp/binding-otp + description : Reqeusting OTP for binding a individualID with OTP channel missing role: resident restMethod: post validityCheckRequired: true @@ -175,6 +184,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Empty_OtpChannels_Neg: endPoint: /residentmobileapp/binding-otp + description : Reqeusting OTP for binding a individualID with OTP channel being empty role: resident restMethod: post validityCheckRequired: true @@ -195,6 +205,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Null_OtpChannels_Neg: endPoint: /residentmobileapp/binding-otp + description : Reqeusting OTP for binding a individualID with OTP channel value being null role: resident restMethod: post validityCheckRequired: true @@ -215,6 +226,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Missing_OtpChannel_Neg: endPoint: /residentmobileapp/binding-otp + description : Reqeusting OTP for binding a individualID with OTP channel missing role: resident restMethod: post validityCheckRequired: true @@ -235,6 +247,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Empty_OtpChannel_Neg: endPoint: /residentmobileapp/binding-otp + description : Reqeusting OTP for binding a individualID with OTP channel being empty role: resident restMethod: post validityCheckRequired: true @@ -255,6 +268,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Null_OtpChannel_Neg: endPoint: /residentmobileapp/binding-otp + description : Reqeusting OTP for binding a individualID with OTP channel being empty role: resident restMethod: post validityCheckRequired: true @@ -275,6 +289,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Invalid_RequestTime_Neg: endPoint: /residentmobileapp/binding-otp + description : Reqeusting OTP for binding a individualID with invalid request time role: resident restMethod: post validityCheckRequired: true @@ -295,6 +310,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Past_RequestTime_Neg: endPoint: /residentmobileapp/binding-otp + description : Reqeusting OTP for binding a individualID with past request time role: resident restMethod: post validityCheckRequired: true @@ -315,6 +331,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Future_RequestTime_Neg: endPoint: /residentmobileapp/binding-otp + description : Reqeusting OTP for binding a individualID with future request time role: resident restMethod: post validityCheckRequired: true @@ -335,6 +352,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Missing_RequestTime_Neg: endPoint: /residentmobileapp/binding-otp + description : Reqeusting OTP for binding a individualID with missing request time role: resident restMethod: post validityCheckRequired: true @@ -355,6 +373,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Empty_RequestTime_Neg: endPoint: /residentmobileapp/binding-otp + description : Reqeusting OTP for binding a individualID with empty request time role: resident restMethod: post validityCheckRequired: true @@ -375,6 +394,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Invalid_individualId_Neg: endPoint: /residentmobileapp/binding-otp + description : Reqeusting OTP for binding a individualID with invalid VID role: resident restMethod: post validityCheckRequired: true @@ -395,6 +415,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Missing_individualId_Neg: endPoint: /residentmobileapp/binding-otp + description : Reqeusting OTP for binding a individualID with missing VID role: resident restMethod: post validityCheckRequired: true @@ -415,6 +436,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Empty_individualId_Neg: endPoint: /residentmobileapp/binding-otp + description : Reqeusting OTP for binding a individualID with empty VID role: resident restMethod: post validityCheckRequired: true @@ -435,6 +457,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Null_individualId_Neg: endPoint: /residentmobileapp/binding-otp + description : Reqeusting OTP for binding a individualID with invalid VID role: resident restMethod: post validityCheckRequired: true @@ -455,6 +478,7 @@ BindingOtp: Mimoto_BindingOtp_vid_SpaceSeparated_otpChannels_Neg: endPoint: /residentmobileapp/binding-otp + description : Reqeusting OTP for binding a VID with OTP channel value been spaced in between role: resident restMethod: post validityCheckRequired: true @@ -475,6 +499,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Invalid_OtpChannels_Neg: endPoint: /residentmobileapp/binding-otp + description : Reqeusting OTP for binding a VID with invalid OTP channel role: resident restMethod: post validityCheckRequired: true @@ -495,6 +520,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Missing_OtpChannels_Neg: endPoint: /residentmobileapp/binding-otp + description : Reqeusting OTP for binding a VID with missing OTP channel values role: resident restMethod: post validityCheckRequired: true @@ -515,6 +541,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Empty_OtpChannels_Neg: endPoint: /residentmobileapp/binding-otp + description : Reqeusting OTP for binding a VID with empty OTP channel values role: resident restMethod: post validityCheckRequired: true @@ -535,6 +562,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Null_OtpChannels_Neg: endPoint: /residentmobileapp/binding-otp + description : Reqeusting OTP for binding a VID with OTP channel values as null role: resident restMethod: post validityCheckRequired: true @@ -555,6 +583,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Missing_OtpChannel_Neg: endPoint: /residentmobileapp/binding-otp + description : Reqeusting OTP for binding a VID with OTP channel values missing role: resident restMethod: post validityCheckRequired: true @@ -575,6 +604,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Empty_OtpChannel_Neg: endPoint: /residentmobileapp/binding-otp + description : Reqeusting OTP for binding a VID with OTP channel values empty role: resident restMethod: post validityCheckRequired: true @@ -595,6 +625,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Null_OtpChannel_Neg: endPoint: /residentmobileapp/binding-otp + description : Reqeusting OTP for binding a VID with OTP channel values as null role: resident restMethod: post validityCheckRequired: true @@ -615,6 +646,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Invalid_RequestTime_Neg: endPoint: /residentmobileapp/binding-otp + description : Reqeusting OTP for binding a VID with invalid request time role: resident restMethod: post validityCheckRequired: true @@ -635,6 +667,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Past_RequestTime_Neg: endPoint: /residentmobileapp/binding-otp + description : Reqeusting OTP for binding a VID with past request time role: resident restMethod: post validityCheckRequired: true @@ -655,6 +688,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Future_RequestTime_Neg: endPoint: /residentmobileapp/binding-otp + description : Reqeusting OTP for binding a VID with future request time role: resident restMethod: post validityCheckRequired: true @@ -675,6 +709,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Missing_RequestTime_Neg: endPoint: /residentmobileapp/binding-otp + description : Reqeusting OTP for binding a VID with request time missing role: resident restMethod: post validityCheckRequired: true @@ -695,6 +730,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Empty_RequestTime_Neg: endPoint: /residentmobileapp/binding-otp + description : Reqeusting OTP for binding a VID with request time empty role: resident restMethod: post validityCheckRequired: true diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml b/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml index eab5ca524..29ae8cfc0 100644 --- a/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml @@ -1,6 +1,7 @@ CredentialsStatus: Mimoto_CredentialsStatus_euin_All_Valid_Smoke: endPoint: /residentmobileapp/credentialshare/request/status/{requestId} + description : Checking credential status with valid UIN role: resident restMethod: get inputTemplate: mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatus @@ -13,6 +14,7 @@ CredentialsStatus: }' Mimoto_CredentialsStatus_euin_With_VID_All_Valid_Smoke: endPoint: /residentmobileapp/credentialshare/request/status/{requestId} + description : Checking credential status with valid VID role: resident restMethod: get inputTemplate: mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatus @@ -26,6 +28,7 @@ CredentialsStatus: Mimoto_CredentialsStatus_euin_With_Invalid_RequestId_Neg: endPoint: /residentmobileapp/credentialshare/request/status/{requestId} + description : Checking credential status with invalid requestId role: resident restMethod: get inputTemplate: mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatus diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml index 815e3c5a1..6641287a7 100644 --- a/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml @@ -1,6 +1,7 @@ DownloadCredential: Mimoto_DownloadCredential_All_Valid_Smoke: endPoint: /residentmobileapp/credentialshare/download + description : download credetial with all valid request role: resident restMethod: post inputTemplate: mimoto/CredentialIssuance/DownloadCredential/downloadCredential @@ -15,6 +16,7 @@ DownloadCredential: Mimoto_DownloadCredential_Invalid_RequestId_Neg: endPoint: /residentmobileapp/credentialshare/download + description : download credetial with invalid RequestId role: resident restMethod: post inputTemplate: mimoto/CredentialIssuance/DownloadCredential/downloadCredential @@ -29,6 +31,7 @@ DownloadCredential: Mimoto_DownloadCredential_Invalid_IndividualId_Neg: endPoint: /residentmobileapp/credentialshare/download + description : download credetial with invalid IndividualId role: resident restMethod: post inputTemplate: mimoto/CredentialIssuance/DownloadCredential/downloadCredential diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml index 0f0a43c91..0b9aa9cbb 100644 --- a/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml @@ -1,6 +1,7 @@ DownloadCredential: Mimoto_CredentialsStatus_All_Valid_Smoke_euin: endPoint: /residentmobileapp/credentialshare/download + description : Checking credential status with all valid request role: resident checkErrorsOnlyInResponse: true restMethod: get @@ -15,6 +16,7 @@ DownloadCredential: }' Mimoto_CredentialsStatus_StatusCode_InValid_Smoke_euin: endPoint: /residentmobileapp/credentialshare/download + description : Checking credential status with invalid StatusCode role: resident restMethod: get inputTemplate: mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqid diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml b/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml index b5ea20448..c41553791 100644 --- a/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml @@ -1,6 +1,7 @@ RequestCredentials: Mimoto_RequestCredentials__All_Valid_Smoke_sid: endPoint: /residentmobileapp/credentialshare/request + description : requesting credential with all valid request role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -28,6 +29,7 @@ RequestCredentials: }' Mimoto_RequestCredentials_All_Valid_Smoke_with_VID_sid: endPoint: /residentmobileapp/credentialshare/request + description : requesting credential with valid VID role: resident restMethod: post checkErrorsOnlyInResponse: true @@ -56,6 +58,7 @@ RequestCredentials: Mimoto_RequestCredentials_InValid_Otp_UIN_sid: endPoint: /residentmobileapp/credentialshare/request role: resident + description : requesting UIN credential with invalid OTP checkErrorsOnlyInResponse: true restMethod: post inputTemplate: mimoto/CredentialIssuance/RequestCredentials/reqCredential @@ -86,6 +89,7 @@ RequestCredentials: }' Mimoto_RequestCredentials_InValid_TransactionId_sid: endPoint: /residentmobileapp/credentialshare/request + description : requesting credential with invalid transactionID role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -118,6 +122,7 @@ RequestCredentials: Mimoto_RequestCredentials_InValid_UIN_sid: endPoint: /residentmobileapp/credentialshare/request + description : requesting credential with invalid UIN role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -150,6 +155,7 @@ RequestCredentials: Mimoto_RequestCredentials_Invalid_VID_sid_Neg: endPoint: /residentmobileapp/credentialshare/request + description : requesting credential with invalid VID role: resident checkErrorsOnlyInResponse: true restMethod: post diff --git a/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml b/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml index a86d6c710..aef0627a1 100644 --- a/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml +++ b/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml @@ -1,6 +1,7 @@ DownloadIssuerCredential: Mimoto_DownloadIssuerCredential_All_Valid_Smoke: endPoint: /residentmobileapp/credentials/download + description : requesting credential with all valid request role: resident restMethod: get checkErrorsOnlyInResponse: true @@ -19,6 +20,7 @@ DownloadIssuerCredential: Mimoto_DownloadIssuerCredential_Invalid_Issuer_Neg: endPoint: /residentmobileapp/credentials/download + description : requesting credential with invalid issuer role: resident restMethod: get checkErrorsOnlyInResponse: true @@ -42,6 +44,7 @@ DownloadIssuerCredential: Mimoto_DownloadIssuerCredential_Invalid_Credential_Neg: endPoint: /residentmobileapp/credentials/download + description : requesting credential with invalid credential role: resident restMethod: get checkErrorsOnlyInResponse: true @@ -65,6 +68,7 @@ DownloadIssuerCredential: Mimoto_DownloadIssuerCredential_Invalid_AuthorizationCode_Neg: endPoint: /residentmobileapp/credentials/download + description : requesting credential with invalid credential AuthorizationCode role: resident restMethod: get checkErrorsOnlyInResponse: true @@ -88,6 +92,7 @@ DownloadIssuerCredential: Mimoto_DownloadIssuerCredential_Expired_AuthorizationCode_Neg: endPoint: /residentmobileapp/credentials/download + description : requesting credential with invalid expired authorizationCode role: resident restMethod: get checkErrorsOnlyInResponse: true diff --git a/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml b/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml index 803a0accb..937d05f42 100644 --- a/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml +++ b/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml @@ -1,6 +1,7 @@ GenerateVID: Mimoto_Generate_Perpetual_VID_Valid_Smoke_sid: endPoint: /residentmobileapp/vid + description : genrate Perpetual VID with all valid request role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -28,6 +29,7 @@ GenerateVID: }' Mimoto_Generate_Perpetual_VID_InValid_Otp_sid: endPoint: /residentmobileapp/vid + description : genrate Perpetual VID with invalid OTP role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -60,6 +62,7 @@ GenerateVID: }' Mimoto_Generate_Perpetual_VID_with_InvalidUIN_Valid_Otp_sid: endPoint: /residentmobileapp/vid + description : genrate Perpetual VID with invalid UIN role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -93,6 +96,7 @@ GenerateVID: mimoto_Generate_Temporary_VID_Valid_Smoke_sid: endPoint: /residentmobileapp/vid + description : genrate temporary VID with all valid request role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -121,6 +125,7 @@ GenerateVID: Mimoto_Generate_Perpetual_VID_Invalid_TransactionId_Neg: endPoint: /residentmobileapp/vid + description : genrate perpetual VID with invalid transactionID role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -154,6 +159,7 @@ GenerateVID: Mimoto_Generate_Perpetual_VID_Binding_Valid_Smoke_sid: endPoint: /residentmobileapp/vid + description : genrate perpetual VID with binding valid request role: resident checkErrorsOnlyInResponse: true restMethod: post diff --git a/apitest/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.yml b/apitest/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.yml index aeb6e5c6e..7a62c3369 100644 --- a/apitest/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.yml +++ b/apitest/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.yml @@ -1,6 +1,7 @@ GetAllCredentialTypes: Mimoto_GetAllCredentialTypes_All_Valid_Smoke: endPoint: /residentmobileapp/issuers/{issuerId}/credentialTypes + description : trying to get credential types with all valid request role: resident restMethod: get checkErrorsOnlyInResponse: true @@ -15,6 +16,7 @@ GetAllCredentialTypes: Mimoto_GetAllCredentialTypes_Specific_Issuer_All_Valid_Smoke: endPoint: /residentmobileapp/issuers/{issuerId}/credentialTypes/?search={credentialType} + description : trying to get specific credential type with all valid request role: resident restMethod: get checkErrorsOnlyInResponse: true @@ -29,6 +31,7 @@ GetAllCredentialTypes: Mimoto_GetAllCredentialTypes_Invalid_Issuer_Neg: endPoint: /residentmobileapp/issuers/{issuerId}/credentialTypes + description : trying to get invalid credential type role: resident restMethod: get checkErrorsOnlyInResponse: true diff --git a/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml b/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml index bcc709f1e..1925ac127 100644 --- a/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml +++ b/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml @@ -1,6 +1,7 @@ GetAllIssuers: Mimoto_GetAllIssuers_All_Valid_Smoke: endPoint: /residentmobileapp/issuers + description : trying to get all issuers with all valid request role: resident restMethod: get checkErrorsOnlyInResponse: true @@ -13,6 +14,7 @@ GetAllIssuers: Mimoto_GetAllIssuers_Specific_Issuer_All_Valid_Smoke: endPoint: /residentmobileapp/issuers/ESignet + description : trying to get specific issuer with all valid request role: resident restMethod: get checkErrorsOnlyInResponse: true @@ -25,6 +27,7 @@ GetAllIssuers: Mimoto_GetAllIssuers_Invalid_Issuer_Neg: endPoint: /residentmobileapp/issuers/invalid + description : trying to get invalid issuer role: resident restMethod: get checkErrorsOnlyInResponse: true diff --git a/apitest/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.yml b/apitest/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.yml index acf2dc2a6..f9154822b 100644 --- a/apitest/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.yml +++ b/apitest/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.yml @@ -1,6 +1,7 @@ OAuthDetailsRequest: Mimoto_ESignet_OAuthDetailsRequest_all_Valid_Smoke_sid: endPoint: /v1/esignet/authorization/v2/oauth-details + description : Requesting auth's details with all valid request role: resident restMethod: post checkErrorsOnlyInResponse: true diff --git a/apitest/src/main/resources/mimoto/SendOTP/SendOTP.yml b/apitest/src/main/resources/mimoto/SendOTP/SendOTP.yml index 670e7e51c..7d2738aba 100644 --- a/apitest/src/main/resources/mimoto/SendOTP/SendOTP.yml +++ b/apitest/src/main/resources/mimoto/SendOTP/SendOTP.yml @@ -1,6 +1,7 @@ SendOTP: Resident_SendOTP_Valid_UIN_All_Smoke: endPoint: /resident/v1/req/otp + description : resident requesting OTP with valid UIN role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -19,6 +20,7 @@ SendOTP: Resident_SendOTP_Invalid_UIN_Neg: endPoint: /resident/v1/req/otp + description : resident requesting OTP with invalid UIN role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -37,6 +39,7 @@ SendOTP: Resident_SendOTP_Invalid_VID_Neg: endPoint: /resident/v1/req/otp + description : resident requesting OTP with invalid VID role: resident restMethod: post inputTemplate: resident/SendOTP/createSendOTP diff --git a/apitest/src/main/resources/mimoto/SendOTP1/SendOTP.yml b/apitest/src/main/resources/mimoto/SendOTP1/SendOTP.yml index 26ecf09ed..589367777 100644 --- a/apitest/src/main/resources/mimoto/SendOTP1/SendOTP.yml +++ b/apitest/src/main/resources/mimoto/SendOTP1/SendOTP.yml @@ -1,6 +1,7 @@ SendOTP: Mimoto_SendOTP_Valid_UIN_All_Smoke: endPoint: /resident/v1/req/otp + description : resident requesting OTP with valid UIN role: resident restMethod: post checkErrorsOnlyInResponse: true @@ -19,6 +20,7 @@ SendOTP: Mimoto_SendOTP_Valid_VID_All_Smoke: endPoint: /resident/v1/req/otp + description : resident requesting OTP with valid VID role: resident restMethod: post checkErrorsOnlyInResponse: true @@ -37,6 +39,7 @@ SendOTP: Mimoto_SendOTP_InValid_UIN_All: endPoint: /residentmobileapp/req/otp + description : resident requesting OTP with invalid UIN role: resident restMethod: post inputTemplate: mimoto/SendOTP1/createSendOTP @@ -58,6 +61,7 @@ SendOTP: Mimoto_SendOTP_Invalid_VID_Neg: endPoint: /resident/v1/req/otp + description : resident requesting OTP with invalid VID role: resident checkErrorsOnlyInResponse: true restMethod: post diff --git a/apitest/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml b/apitest/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml index 815639521..7ba35258d 100644 --- a/apitest/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml +++ b/apitest/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml @@ -1,6 +1,7 @@ individualOTP: Mimoto_individualOTP_All_Valid_Smoke: endPoint: /residentmobileapp/req/individualId/otp + description : Tring to get individual OTP with valid request role: resident checkErrorsOnlyInResponse: true restMethod: post diff --git a/apitest/src/main/resources/mimoto/SendOtpForVid/createSendOTP.yml b/apitest/src/main/resources/mimoto/SendOtpForVid/createSendOTP.yml index 164f0a52d..88b8833e1 100644 --- a/apitest/src/main/resources/mimoto/SendOtpForVid/createSendOTP.yml +++ b/apitest/src/main/resources/mimoto/SendOtpForVid/createSendOTP.yml @@ -1,6 +1,7 @@ createSendOTP: Resident_SendOTP_All_Valid_Smoke: endPoint: /idauthentication/v1/otp/v4jO2rTUkDglaG7rCkWDnqIT3WpZaGEW9j3FMXwTA5xXKVaDpx/6001/34536061 + description : resident requesting OTP with all valid request role: resident restMethod: post inputTemplate: resident/SendOtpForVid/createSendOTP diff --git a/apitest/src/main/resources/mimoto/ValidateOTP/ValidateOTP.yml b/apitest/src/main/resources/mimoto/ValidateOTP/ValidateOTP.yml index 94d06c9f9..149f8f110 100644 --- a/apitest/src/main/resources/mimoto/ValidateOTP/ValidateOTP.yml +++ b/apitest/src/main/resources/mimoto/ValidateOTP/ValidateOTP.yml @@ -1,6 +1,7 @@ SendOTP: Resident_SendOTP_Valid_UIN_All_Smoke: endPoint: /resident/v1/req/otp + description : resident request OTP with valid UIN role: resident restMethod: post inputTemplate: resident/SendOTP/createSendOTP @@ -16,6 +17,7 @@ SendOTP: }' Resident_SendOTP_Valid_UIN_Phone_Smoke: endPoint: /resident/v1/req/otp + description : resident request OTP with OTP channel as phone role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -33,6 +35,7 @@ SendOTP: }' Resident_SendOTP_Valid_UIN_Email_Smoke: endPoint: /resident/v1/req/otp + description : resident request OTP with OTP channel as email role: resident restMethod: post inputTemplate: resident/SendOTP/createSendOTP2 @@ -49,6 +52,7 @@ SendOTP: }' Resident_SendOTP_RevokedVID_Invalid: endPoint: /resident/v1/req/otp + description : resident request OTP with revoked VID role: resident restMethod: post inputTemplate: resident/SendOTP/createSendOTP @@ -64,6 +68,7 @@ SendOTP: }' Resident_SendOTP_Valid_UIN_Invalid_empty_otpChannel: endPoint: /resident/v1/req/otp + description : resident request OTP with empty OTP channel role: resident restMethod: post inputTemplate: resident/SendOTP/createSendOTP2 @@ -80,6 +85,7 @@ SendOTP: }' Resident_SendOTP_InValid_individualId: endPoint: /resident/v1/req/otp + description : resident request OTP with invalid individualID role: resident restMethod: post inputTemplate: resident/SendOTP/createSendOTP @@ -95,6 +101,7 @@ SendOTP: }' Resident_SendOTP_InValid_Missing_individualId: endPoint: /resident/v1/req/otp + description : resident request OTP with missing individualID role: resident restMethod: post inputTemplate: resident/SendOTP/createSendOTP @@ -110,6 +117,7 @@ SendOTP: }' Resident_SendOTP_InValid_Empty_transactionID: endPoint: /resident/v1/req/otp + description : resident request OTP with empty transactionID role: resident restMethod: post inputTemplate: resident/SendOTP/createSendOTP @@ -125,6 +133,7 @@ SendOTP: }' Resident_SendOTP_InValid_transactionID: endPoint: /resident/v1/req/otp + description : resident request OTP with invalid transactionID role: resident restMethod: post inputTemplate: resident/SendOTP/createSendOTP @@ -140,6 +149,7 @@ SendOTP: }' Resident_SendOTP_InValid_Missing_transactionID: endPoint: /resident/v1/req/otp + description : resident request OTP with missing transactionID role: resident restMethod: post inputTemplate: resident/SendOTP/createSendOTP @@ -155,6 +165,7 @@ SendOTP: }' Resident_SendOTP_InValid_Empty_requestTime: endPoint: /resident/v1/req/otp + description : resident request OTP with empty request time role: resident restMethod: post inputTemplate: resident/SendOTP/createSendOTP @@ -170,6 +181,7 @@ SendOTP: }' Resident_SendOTP_InValid_requestTime: endPoint: /resident/v1/req/otp + description : resident request OTP with invalid request time role: resident restMethod: post inputTemplate: resident/SendOTP/createSendOTP diff --git a/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml b/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml index f7527f4d6..f41f52921 100644 --- a/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml +++ b/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml @@ -1,6 +1,7 @@ WalletBinding: Mimoto_WalletBinding_uin_OTP_Valid_Smoke: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with valid UIN role: resident validityCheckRequired: true restMethod: post @@ -34,6 +35,7 @@ WalletBinding: Mimoto_WalletBinding_vid_OTP_Valid_Smoke: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with valid VID role: resident validityCheckRequired: true restMethod: post @@ -67,6 +69,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_RequestTime_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with invalid requestime role: resident validityCheckRequired: true restMethod: post @@ -105,6 +108,7 @@ WalletBinding: Mimoto_WalletBinding_uin_PastVal_RequestTime_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with past requestime role: resident validityCheckRequired: true restMethod: post @@ -143,6 +147,7 @@ WalletBinding: Mimoto_WalletBinding_uin_FutureVal_RequestTime_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with future requestime role: resident validityCheckRequired: true restMethod: post @@ -181,6 +186,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Empty_RequestTime_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with empty requestime role: resident validityCheckRequired: true restMethod: post @@ -219,6 +225,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_RequestTime_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with missing requestime role: resident validityCheckRequired: true restMethod: post @@ -257,6 +264,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_IndividualId_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with invalid individualId role: resident validityCheckRequired: true restMethod: post @@ -295,6 +303,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Empty_IndividualId_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with empty individualId role: resident validityCheckRequired: true restMethod: post @@ -333,6 +342,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Null_IndividualId_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with individualId being null role: resident validityCheckRequired: true restMethod: post @@ -371,6 +381,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_IndividualId_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with individualId being missing role: resident validityCheckRequired: true restMethod: post @@ -409,6 +420,7 @@ WalletBinding: Mimoto_WalletBinding_uin_SpaceVal_IndividualId_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with individualId value having space role: resident validityCheckRequired: true restMethod: post @@ -447,6 +459,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_AuthFactorType_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with invalid authfactortype role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -486,6 +499,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Empty_AuthFactorType_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with empty authfactortype role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -525,6 +539,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_AuthFactorType_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with missing authfactortype role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -564,6 +579,7 @@ WalletBinding: Mimoto_WalletBinding_uin_SpaceVal_AuthFactorType_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with authfactortype value being just space role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -603,6 +619,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Null_AuthFactorType_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with authfactortype value being just null role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -642,6 +659,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_Challenge_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with invalid challenge role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -681,6 +699,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_Challenge_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with missing challenge role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -720,6 +739,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Empty_Challenge_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with empty challenge role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -759,6 +779,7 @@ WalletBinding: Mimoto_WalletBinding_uin_SpaceVal_Challenge_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with challenge value having space role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -798,6 +819,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Null_Challenge_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with challenge value having null role: resident validityCheckRequired: true allowedErrorCodes: @@ -837,6 +859,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_Formate_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with invalid formate role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -876,6 +899,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_Formate_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with missing formate role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -915,6 +939,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Empty_Formate_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with empty formate role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -954,6 +979,7 @@ WalletBinding: Mimoto_WalletBinding_uin_SpaceVal_Formate_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with formate value having space role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -993,6 +1019,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Null_Formate_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with formate value having null role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -1032,6 +1059,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_authFactorType1_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with invalid authFactorType1 role: resident validityCheckRequired: true restMethod: post @@ -1070,6 +1098,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_authFactorType1_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with missing authFactorType1 role: resident validityCheckRequired: true restMethod: post @@ -1108,6 +1137,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Empty_authFactorType1_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with empty authFactorType1 role: resident validityCheckRequired: true restMethod: post @@ -1146,6 +1176,7 @@ WalletBinding: Mimoto_WalletBinding_uin_SpaceVal_authFactorType1_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with authFactorType1 value having space role: resident validityCheckRequired: true restMethod: post @@ -1184,6 +1215,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Null_authFactorType1_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with authFactorType1 value having null role: resident validityCheckRequired: true restMethod: post @@ -1222,6 +1254,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_format1_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with invalid format1 role: resident validityCheckRequired: true restMethod: post @@ -1260,6 +1293,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_format1_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with missing format1 role: resident validityCheckRequired: true restMethod: post @@ -1298,6 +1332,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Empty_format1_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with empty format1 role: resident validityCheckRequired: true restMethod: post @@ -1336,6 +1371,7 @@ WalletBinding: Mimoto_WalletBinding_uin_SpaceVal_format1_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with format1 value having space role: resident validityCheckRequired: true restMethod: post @@ -1374,6 +1410,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Null_format1_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with format1 value having null role: resident validityCheckRequired: true restMethod: post @@ -1412,6 +1449,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_publicKey_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with invalid publickey role: resident validityCheckRequired: true restMethod: post @@ -1450,6 +1488,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Null_publicKey_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with null as publickey role: resident validityCheckRequired: true restMethod: post @@ -1488,6 +1527,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_publicKey_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VC with missing publickey role: resident validityCheckRequired: true restMethod: post @@ -1526,6 +1566,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_RequestTime_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind vid VC with invalid request time role: resident validityCheckRequired: true restMethod: post @@ -1564,6 +1605,7 @@ WalletBinding: Mimoto_WalletBinding_vid_PastVal_RequestTime_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind vid VC with past request time role: resident validityCheckRequired: true restMethod: post @@ -1602,6 +1644,7 @@ WalletBinding: Mimoto_WalletBinding_vid_FutureVal_RequestTime_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind vid VC with future request time role: resident validityCheckRequired: true restMethod: post @@ -1640,6 +1683,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Empty_RequestTime_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind vid VC with empty request time role: resident validityCheckRequired: true restMethod: post @@ -1678,6 +1722,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_RequestTime_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind vid VC with missing request time role: resident validityCheckRequired: true restMethod: post @@ -1716,6 +1761,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_IndividualId_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind vid VC with invalid individualId role: resident validityCheckRequired: true restMethod: post @@ -1754,6 +1800,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Empty_IndividualId_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind vid VC with empty individualId role: resident validityCheckRequired: true restMethod: post @@ -1792,6 +1839,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Null_IndividualId_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind vid VC with null individualId role: resident validityCheckRequired: true restMethod: post @@ -1830,6 +1878,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_IndividualId_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind vid VC with missing individualId role: resident validityCheckRequired: true restMethod: post @@ -1868,6 +1917,7 @@ WalletBinding: Mimoto_WalletBinding_vid_SpaceVal_IndividualId_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VID VC with individualId value having space role: resident validityCheckRequired: true restMethod: post @@ -1906,6 +1956,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_AuthFactorType_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VID VC with invalid authfactortype role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -1945,6 +1996,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Empty_AuthFactorType_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VID VC with empty authfactortype role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -1984,6 +2036,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_AuthFactorType_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VID VC with missing authfactortype role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -2023,6 +2076,7 @@ WalletBinding: Mimoto_WalletBinding_vid_SpaceVal_AuthFactorType_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VID VC with authfactortype value being just space role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -2062,6 +2116,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Null_AuthFactorType_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VID VC with authfactortype value being just null role: resident validityCheckRequired: true restMethod: post @@ -2100,6 +2155,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_Challenge_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VID VC with invalid challenge role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -2139,6 +2195,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_Challenge_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VID VC with missing challenge role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -2178,6 +2235,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Empty_Challenge_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VID VC with empty challenge role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -2217,6 +2275,7 @@ WalletBinding: Mimoto_WalletBinding_vid_SpaceVal_Challenge_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VID VC with challenge value having space role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -2256,6 +2315,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Null_Challenge_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VID VC with challenge value having null role: resident validityCheckRequired: true restMethod: post @@ -2294,6 +2354,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_Formate_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VID VC with invalid formate role: resident validityCheckRequired: true restMethod: post @@ -2332,6 +2393,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_Formate_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VID VC with missing formate role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -2371,6 +2433,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Empty_Formate_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VID VC with empty formate role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -2410,6 +2473,7 @@ WalletBinding: Mimoto_WalletBinding_vid_SpaceVal_Formate_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VID VC with formate value having space role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -2449,6 +2513,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Null_Formate_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VID VC with formate value having null role: resident validityCheckRequired: true restMethod: post @@ -2487,6 +2552,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_authFactorType1_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VID VC with invalid authFactorType1 role: resident validityCheckRequired: true restMethod: post @@ -2525,6 +2591,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_authFactorType1_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VID VC with missing authFactorType1 role: resident validityCheckRequired: true restMethod: post @@ -2563,6 +2630,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Empty_authFactorType1_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VID VC with empty authFactorType1 role: resident validityCheckRequired: true restMethod: post @@ -2601,6 +2669,7 @@ WalletBinding: Mimoto_WalletBinding_vid_SpaceVal_authFactorType1_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VID VC with authFactorType1 value having space role: resident validityCheckRequired: true restMethod: post @@ -2639,6 +2708,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Null_authFactorType1_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VID VC with authFactorType1 value having null role: resident validityCheckRequired: true restMethod: post @@ -2677,6 +2747,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_format1_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VID VC with invalid format1 role: resident validityCheckRequired: true restMethod: post @@ -2715,6 +2786,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_format1_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VID VC with missing format1 role: resident validityCheckRequired: true restMethod: post @@ -2753,6 +2825,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Empty_format1_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VID VC with empty format1 role: resident validityCheckRequired: true restMethod: post @@ -2791,6 +2864,7 @@ WalletBinding: Mimoto_WalletBinding_vid_SpaceVal_format1_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VID VC with format1 value having space role: resident validityCheckRequired: true restMethod: post @@ -2829,6 +2903,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Null_format1_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VID VC with format1 value having null role: resident validityCheckRequired: true restMethod: post @@ -2867,6 +2942,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_publicKey_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VID VC with invalid publickey role: resident validityCheckRequired: true restMethod: post @@ -2905,6 +2981,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Null_publicKey_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VID VC with null as publickey role: resident validityCheckRequired: true restMethod: post @@ -2943,6 +3020,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_publicKey_Neg: endPoint: /residentmobileapp/wallet-binding + description : Requesting OTP to bind VID VC with missing publickey role: resident validityCheckRequired: true restMethod: post From 094a2410db485f1d7a061a09e803874694ee7e84 Mon Sep 17 00:00:00 2001 From: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> Date: Wed, 10 Jul 2024 17:14:24 +0530 Subject: [PATCH 173/860] MOSIP-34397 - Updating MosipTestRunner (#297) * MOSIP-34397 - Updating MosipTestRunner Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> * MOSIP-34397 - Updating MosipTestRunner Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> --------- Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> --- .../java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java | 1 - 1 file changed, 1 deletion(-) diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java b/apitest/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java index de2bc8779..718514ec0 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java @@ -71,7 +71,6 @@ public static void main(String[] arg) { ConfigManager.init(); BaseTestCase.suiteSetup(); setLogLevels(); - AdminTestUtil.encryptDecryptUtil = new EncryptionDecrptionUtil(); // For now we are not doing health check for qa-115. if (BaseTestCase.isTargetEnvLTS()) { From e9666809288afb23073a3b45dedc2b05936cec39 Mon Sep 17 00:00:00 2001 From: PRAFUL RAKHADE <99539100+prafulrakhade@users.noreply.github.com> Date: Thu, 11 Jul 2024 18:16:55 +0530 Subject: [PATCH 174/860] [DSD-5725] updated install.sh script with inji-config changes also updated CHart version of partner onboarder Signed-off-by: techno-467 --- README.md | 11 +++++++++-- partner-onboarder/install.sh | 16 ++++++++-------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index c16c349cd..cda4b7a6b 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,14 @@ mvn spring-boot:run -Dspring.profiles.active=local ### Install -1. Execute Onboarder install script +1. Execute inji-config-server install script +``` +cd helm/inji-config-server +./install.sh +``` +* Review values.yaml and make sure git repository parameters are as per your installation. + +2. Execute Onboarder install script ``` cd partner-onboarder @@ -28,7 +35,7 @@ cd partner-onboarder * During the execution of the `install.sh` script, a prompt appears requesting information for the S3 bucket, including its name and URL. * Once the job is completed, log in to S3 and check the reports. There should not be any failures. -2. Execute mimoto install script +3. Execute mimoto install script ``` cd helm/mimoto diff --git a/partner-onboarder/install.sh b/partner-onboarder/install.sh index a9ef4bd6a..9ff045183 100755 --- a/partner-onboarder/install.sh +++ b/partner-onboarder/install.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Onboards default partners +# Onboards default partners ## Usage: ./install.sh [kubeconfig] if [ $# -ge 1 ] ; then @@ -21,7 +21,7 @@ if [ "$flag" = "n" ]; then fi NS=mimoto -CHART_VERSION=12.0.2 +CHART_VERSION=0.0.1-develop echo Create $NS namespace kubectl create ns $NS @@ -84,12 +84,12 @@ function installing_onboarder() { echo Updating Mimoto wallet binding partner api key and Mimoto OIDC Partner Client ID ./copy_cm_func.sh secret mimoto-wallet-binding-partner-api-key mimoto config-server ./copy_cm_func.sh secret mimoto-oidc-partner-clientid mimoto config-server - kubectl -n config-server set env --keys=mimoto-wallet-binding-partner-api-key --from secret/mimoto-wallet-binding-partner-api-key deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ - kubectl -n config-server set env --keys=mimoto-oidc-partner-clientid --from secret/mimoto-oidc-partner-clientid deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ - kubectl -n config-server set env --keys=mimoto-oidc-keystore-password --from secret/mimoto-oidc-keystore-password deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ + kubectl -n config-server set env --keys=mimoto-wallet-binding-partner-api-key --from secret/mimoto-wallet-binding-partner-api-key deployment/inji-config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ + kubectl -n config-server set env --keys=mimoto-oidc-partner-clientid --from secret/mimoto-oidc-partner-clientid deployment/inji-config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ + kubectl -n config-server set env --keys=mimoto-oidc-keystore-password --from secret/mimoto-oidc-keystore-password deployment/inji-config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ - kubectl -n config-server rollout restart deployment config-server - kubectl -n config-server rollout status deployment config-server + kubectl -n config-server rollout restart deployment inji-config-server + kubectl -n config-server rollout status deployment inji-config-server echo Reports are moved to S3 under onboarder bucket return 0 @@ -102,4 +102,4 @@ set -o errexit ## set -e : exit the script if any statement returns a non-true set -o nounset ## set -u : exit the script if you try to use an uninitialised variable set -o errtrace # trace ERR through 'time command' and other functions set -o pipefail # trace ERR through pipes -installing_onboarder # calling function +installing_onboarder # calling function \ No newline at end of file From cfd295dae51e14f20637b5b967bd86f7079efb00 Mon Sep 17 00:00:00 2001 From: Swati Goel Date: Mon, 15 Jul 2024 12:59:45 +0530 Subject: [PATCH 175/860] [INJIMOB-1153] : update README Signed-off-by: Swati Goel --- .talismanrc | 2 +- README.md | 132 ++++++++++++---------------------------------------- 2 files changed, 30 insertions(+), 104 deletions(-) diff --git a/.talismanrc b/.talismanrc index 065fe80bf..51f7ba942 100644 --- a/.talismanrc +++ b/.talismanrc @@ -70,7 +70,7 @@ fileignoreconfig: - filename: src/main/java/io/mosip/mimoto/util/JoseUtil.java checksum: 65c4d7f9d4f28e7e4e5376e4f6cdce8b49b485c3ea2ab214f72d018d5d73b6aa - filename: README.md - checksum: f3e7693f4f554640b93c82e438d28d015f8c09be622c22ac6847e528830968f6 + checksum: 1f5deaa63f65986c215dedc9adc6021b4d15dd4e475802013816b130373be3d0 - filename: docker-compose/docker-compose.yml checksum: 857f5dcebdef810161b9ef09ad078c091c7d9969035bc45132975b296675dac9 - filename: docker-compose/config/mimoto-default.properties diff --git a/README.md b/README.md index cda4b7a6b..1fb387ec1 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,35 @@ +[![Maven Package upon a push](https://github.com/mosip/mimoto/actions/workflows/push-trigger.yml/badge.svg?branch=master)](https://github.com/mosip/mimoto/actions/workflows/push-trigger.yml) +[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=mosip_mimoto&id=mosip_mimoto&metric=alert_status)](https://sonarcloud.io/project/overview?id=mosip_mimoto) + # mimoto -This is the mobile server backend supporting Inji. -## Requirements -- Java SE 11 -- Maven +## Overview +This repository contains source code for backend service of Inji Mobile and Inji Web. The modules exposes API endpoints. + -## Build -```shell -mvn clean package +## Build & run (for developers) +The project requires JDK 11 +### Build & install +``` + mvn clean install -Dgpg.skip=true -Dmaven.javadoc.skip=true -DskipTests=true ``` -## Run -```shell -mvn spring-boot:run -Dspring.profiles.active=local +### Run +1. without docker-compose ``` + mvn spring-boot:run -Dspring.profiles.active=local +``` + +2. with docker-compose + * To simplify running mimoto in local for developers we have added [Docker Compose Setup](docker-compose/README.md). This docker-compose includes mimoto service and nginx service to server static data. + + * Follow the below steps to use custom build image in docker-compose + * + * Build the mimoto.jar + ```mvn clean install -Dgpg.skip=true -Dmaven.javadoc.skip=true -DskipTests=true``` + * Build docker image, use any image tag + ```docker build -t .``` + * Use newly built docker image in docker-compose file ## Deployment @@ -46,100 +62,10 @@ cd helm/mimoto * The init-container will proceed to download the server's self-signed SSL certificate and mount it to the specified location within the container's Java keystore (i.e., `cacerts`) file. * This particular functionality caters to scenarios where the script needs to be employed on a server utilizing self-signed SSL certificates. -### Docker compose stack folder structure: -- bin: service jar files -- conf: configuration files for docker services. -- data: using to store shared VC event and generated files. +### For Onboarding new Issuer for VCI: -Follow the build section to compile and get the mimoto-*.jar file in the target folder. +- create a folder "certs" in the root and a file "oidckeystore.p12" inside certs and store the keys as different aliases for every issuers. for more details refer [here](https://docs.mosip.io/inji/inji-mobile-wallet/customization-overview/credential_providers) -Copy jar files to bin folder. Websub (hub.jar) and safety net is optional, depends on the client app implementation. - -### Configuration - -conf/nginx/conf.d/mimoto.conf -```nginx -upstream mimoto-service { - server mimoto-service:8088; -} - -server { - listen 80; - listen [::]:80; - - access_log /var/log/nginx/mimoto-service.access.log main; - - location / { - root /usr/share/nginx/html; - index index.html index.htm; - } - - location /v1/mimoto { - proxy_pass http://mimoto-service/v1/mimoto; - proxy_set_header Host $http_host; # required for docker client's sake - proxy_set_header X-Real-IP $remote_addr; # pass on real client's IP - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - } -} -``` - -docker-compose.yml -```yaml -version: "3.9" -services: - nginx: - image: nginx:alpine - volumes: - - ./conf/nginx/proxy_params:/etc/nginx/proxy_params - - ./conf/nginx/conf.d:/etc/nginx/conf.d - hostname: nginx - restart: always - ports: - - 80:80 - links: - - mimoto-service - - websub - - safetynet - depends_on: - - mimoto-service - - mimoto-service: - image: openjdk:11-jre-slim - volumes: - - ./bin:/opt/mimoto-service - - ./data:/data - hostname: mimoto-service - restart: always - command: > - bash -c "cd /data && java -jar \ - -Dpublic.url=https://YOUR_PUBLIC_URL_FOR_MIMOTO_SERVICE \ - -Dcredential.data.path=/data \ - -Dmosip.event.delay-millisecs=5000 \ - -Dwebsub-resubscription-delay-millisecs=300000 \ - -Dsafetynet.api.key=GOOGLE_API_KEY \ - /opt/mimoto-service/mimoto-*.jar" - expose: - - 8088 -``` - -Note: -- Replace public.url with your public accessible domain. For dev or local env ngrok is recommended. -- Google safetynet API key can be generate from Google Cloud Console. - -### Run with docker-compose -```shell -docker-compose up -d -``` - -## Update - -Copy and replace the new version of the jar files in the bin folder and restart the docker service. - -```shell -docker-compose restart mimoto-service -``` ## Credits -Credits listed [here](/Credits.md) - +Credits listed [here](/Credits.md) \ No newline at end of file From 06afde233f8c67e5ff08c73f7930da46b3c7194a Mon Sep 17 00:00:00 2001 From: Swati Goel Date: Wed, 17 Jul 2024 11:25:40 +0530 Subject: [PATCH 176/860] [INJIMOB-1153] : delete unused docker-compose file Signed-off-by: Swati Goel --- docker-compose.yml | 23 ----------------------- 1 file changed, 23 deletions(-) delete mode 100644 docker-compose.yml diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 29ef83220..000000000 --- a/docker-compose.yml +++ /dev/null @@ -1,23 +0,0 @@ -version: '3.8' - -services: - mimoto-service: - container_name: 'Mimoto-Service' - image: 'mosip/mimoto:auth' - user: root - ports: - - 8088:8088 - expose: - - 8088 - environment: - - artifactory_url_env=http://artifactory-server:8080/ - - container_user=mosip - - active_profile_env=default - - SPRING_CONFIG_NAME=mimoto - - SPRING_CONFIG_LOCATION=/home/mosip/ - volumes: - - ./docker-compose/config/mimoto-default.properties:/home/mosip/mimoto-default.properties - - ./docker-compose/config/oidckeystore.p12:/home/mosip/certs/oidckeystore.p12 - - ./docker-compose/loader_path/:/home/mosip/additional_jars/ - restart: always - From 9f8360f36255125f290a2cdbef0497dfaf467243 Mon Sep 17 00:00:00 2001 From: Swati Goel Date: Wed, 17 Jul 2024 11:27:20 +0530 Subject: [PATCH 177/860] [INJIMOB-1153] : update mimoto version Signed-off-by: Swati Goel --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 18b9dc3df..17e588689 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ io.mosip mimoto - 0.10.0 + 0.13.0 mimoto Mobile server backend supporting Inji. From 729c271d242cc72c27388c639530059129ab30dc Mon Sep 17 00:00:00 2001 From: Swati Goel Date: Wed, 17 Jul 2024 12:11:10 +0530 Subject: [PATCH 178/860] [INJIMOB-1153] : add url tag in pom.xml Signed-off-by: Swati Goel --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index 17e588689..51c3cfb19 100644 --- a/pom.xml +++ b/pom.xml @@ -11,6 +11,7 @@ mimoto 0.13.0 mimoto + https://github.com/mosip/mimoto Mobile server backend supporting Inji. From 229ecd571ca9c447b7e597c3e65ecd59475b70c4 Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Thu, 18 Jul 2024 13:25:26 +0530 Subject: [PATCH 179/860] MOSIP-33845 Signed-off-by: Nandhukumar --- .../Face/DeviceDiscovery.json | 17 +++ .../Biometric Devices/Face/DeviceInfo.json | 18 +++ apitest/Biometric Devices/Face/DigitalId.json | 10 ++ .../Biometric Devices/Face/Keys/mosipface.p12 | Bin 0 -> 3509 bytes .../Face/Keys/mosipfaceftm.p12 | Bin 0 -> 3675 bytes .../Face/Stream Image/0.jpeg | Bin 0 -> 39543 bytes .../Finger/Single/DeviceDiscovery.json | 17 +++ .../Finger/Single/DeviceInfo.json | 18 +++ .../Finger/Single/DigitalId.json | 10 ++ .../Finger/Single/Keys/mosipfingersingle.p12 | Bin 0 -> 3589 bytes .../Single/Keys/mosipfingersingleftm.p12 | Bin 0 -> 3739 bytes .../Finger/Slap/DeviceDiscovery.json | 17 +++ .../Finger/Slap/DeviceInfo.json | 18 +++ .../Finger/Slap/DigitalId.json | 10 ++ .../Finger/Slap/Keys/mosipfingerslap.p12 | Bin 0 -> 3553 bytes .../Finger/Slap/Keys/mosipfingerslapftm.p12 | Bin 0 -> 3703 bytes .../Finger/Slap/Stream Image/1.jpeg | Bin 0 -> 23472 bytes .../Finger/Slap/Stream Image/2.jpeg | Bin 0 -> 19434 bytes .../Finger/Slap/Stream Image/3.jpeg | Bin 0 -> 17663 bytes .../Iris/Double/DeviceDiscovery.json | 17 +++ .../Iris/Double/DeviceInfo.json | 18 +++ .../Iris/Double/DigitalId.json | 10 ++ .../Iris/Double/Keys/mosipirisdouble.p12 | Bin 0 -> 3553 bytes .../Iris/Double/Keys/mosipirisdoubleftm.p12 | Bin 0 -> 3703 bytes .../Iris/Double/Stream Image/1.jpeg | Bin 0 -> 15660 bytes .../Iris/Double/Stream Image/2.jpeg | Bin 0 -> 13952 bytes .../Iris/Double/Stream Image/3.jpeg | Bin 0 -> 31792 bytes .../Iris/Single/DeviceDiscovery.json | 17 +++ .../Iris/Single/DeviceInfo.json | 18 +++ .../Iris/Single/DigitalId.json | 10 ++ .../Iris/Single/Keys/mosipirissingle.p12 | Bin 0 -> 3569 bytes .../Iris/Single/Keys/mosipirissingleftm.p12 | Bin 0 -> 3727 bytes apitest/Biometric Devices/mosiprootca.p12 | Bin 0 -> 19187 bytes apitest/Biometric Devices/mosiprootcaftm.p12 | Bin 0 -> 17821 bytes apitest/Biometric Devices/rootca.cer | 20 +++ apitest/Biometric Devices/rootcaftm.cer | 21 +++ apitest/application.properties | 143 ++++++++++++++++++ .../Profile/Automatic/Auth/0001Face.iso | Bin 0 -> 18492 bytes .../Profile/Automatic/Auth/0001Left_Index.iso | Bin 0 -> 13071 bytes .../Automatic/Auth/0001Left_Index.wsq.iso | Bin 0 -> 9902 bytes .../Profile/Automatic/Auth/0001Left_Iris.iso | Bin 0 -> 10025 bytes .../Automatic/Auth/0001Left_Little.iso | Bin 0 -> 14062 bytes .../Automatic/Auth/0001Left_Little.wsq.iso | Bin 0 -> 9401 bytes .../Automatic/Auth/0001Left_Middle.iso | Bin 0 -> 13075 bytes .../Automatic/Auth/0001Left_Middle.wsq.iso | Bin 0 -> 10520 bytes .../Profile/Automatic/Auth/0001Left_Ring.iso | Bin 0 -> 12074 bytes .../Automatic/Auth/0001Left_Ring.wsq.iso | Bin 0 -> 10864 bytes .../Profile/Automatic/Auth/0001Left_Thumb.iso | Bin 0 -> 15061 bytes .../Automatic/Auth/0001Left_Thumb.wsq.iso | Bin 0 -> 12581 bytes .../Automatic/Auth/0001Right_Index.iso | Bin 0 -> 13062 bytes .../Automatic/Auth/0001Right_Index.wsq.iso | Bin 0 -> 10007 bytes .../Profile/Automatic/Auth/0001Right_Iris.iso | Bin 0 -> 10059 bytes .../Automatic/Auth/0001Right_Little.iso | Bin 0 -> 11076 bytes .../Automatic/Auth/0001Right_Little.wsq.iso | Bin 0 -> 9003 bytes .../Automatic/Auth/0001Right_Middle.iso | Bin 0 -> 10062 bytes .../Automatic/Auth/0001Right_Middle.wsq.iso | Bin 0 -> 7295 bytes .../Profile/Automatic/Auth/0001Right_Ring.iso | Bin 0 -> 14062 bytes .../Automatic/Auth/0001Right_Ring.wsq.iso | Bin 0 -> 12632 bytes .../Automatic/Auth/0001Right_Thumb.iso | Bin 0 -> 18059 bytes .../Automatic/Auth/0001Right_Thumb.wsq.iso | Bin 0 -> 14270 bytes .../Registration/0001Exception_Photo.iso | Bin 0 -> 209612 bytes .../Automatic/Registration/0001Face.iso | Bin 0 -> 67087 bytes .../Automatic/Registration/0001Left_Index.iso | Bin 0 -> 98779 bytes .../Automatic/Registration/0001Left_Iris.iso | Bin 0 -> 55435 bytes .../Registration/0001Left_Little.iso | Bin 0 -> 83945 bytes .../Registration/0001Left_Middle.iso | Bin 0 -> 97860 bytes .../Automatic/Registration/0001Left_Ring.iso | Bin 0 -> 90331 bytes .../Automatic/Registration/0001Left_Thumb.iso | Bin 0 -> 110503 bytes .../Registration/0001Right_Index.iso | Bin 0 -> 93910 bytes .../Automatic/Registration/0001Right_Iris.iso | Bin 0 -> 51948 bytes .../Registration/0001Right_Little.iso | Bin 0 -> 81884 bytes .../Registration/0001Right_Middle.iso | Bin 0 -> 63941 bytes .../Automatic/Registration/0001Right_Ring.iso | Bin 0 -> 100574 bytes .../Registration/0001Right_Thumb.iso | Bin 0 -> 134092 bytes .../resource/Profile/Default/Auth/Face.iso | Bin 0 -> 18492 bytes .../Profile/Default/Auth/Finger_UKNOWN.iso | Bin 0 -> 13071 bytes .../Default/Auth/Finger_UKNOWN_wsq.iso | Bin 0 -> 9902 bytes .../Profile/Default/Auth/Iris_UNKNOWN.iso | Bin 0 -> 7749 bytes .../Profile/Default/Auth/Left_Index.iso | Bin 0 -> 13071 bytes .../Profile/Default/Auth/Left_Index_wsq.iso | Bin 0 -> 9902 bytes .../Profile/Default/Auth/Left_Iris.iso | Bin 0 -> 7083 bytes .../Profile/Default/Auth/Left_Little.iso | Bin 0 -> 14062 bytes .../Profile/Default/Auth/Left_Little_wsq.iso | Bin 0 -> 9401 bytes .../Profile/Default/Auth/Left_Middle.iso | Bin 0 -> 13075 bytes .../Profile/Default/Auth/Left_Middle_wsq.iso | Bin 0 -> 10520 bytes .../Profile/Default/Auth/Left_Ring.iso | Bin 0 -> 12074 bytes .../Profile/Default/Auth/Left_Ring_wsq.iso | Bin 0 -> 10864 bytes .../Profile/Default/Auth/Left_Thumb.iso | Bin 0 -> 15061 bytes .../Profile/Default/Auth/Left_Thumb_wsq.iso | Bin 0 -> 12581 bytes .../Profile/Default/Auth/Right_Index.iso | Bin 0 -> 13062 bytes .../Profile/Default/Auth/Right_Index_wsq.iso | Bin 0 -> 10007 bytes .../Profile/Default/Auth/Right_Iris.iso | Bin 0 -> 7749 bytes .../Profile/Default/Auth/Right_Little.iso | Bin 0 -> 11076 bytes .../Profile/Default/Auth/Right_Little_wsq.iso | Bin 0 -> 9003 bytes .../Profile/Default/Auth/Right_Middle.iso | Bin 0 -> 10062 bytes .../Profile/Default/Auth/Right_Middle_wsq.iso | Bin 0 -> 7295 bytes .../Profile/Default/Auth/Right_Ring.iso | Bin 0 -> 14062 bytes .../Profile/Default/Auth/Right_Ring_wsq.iso | Bin 0 -> 12632 bytes .../Profile/Default/Auth/Right_Thumb.iso | Bin 0 -> 18059 bytes .../Profile/Default/Auth/Right_Thumb_wsq.iso | Bin 0 -> 14270 bytes .../Default/Registration/Exception_Photo.iso | Bin 0 -> 209612 bytes .../Profile/Default/Registration/Face.iso | Bin 0 -> 67087 bytes .../Default/Registration/Left_Index.iso | Bin 0 -> 98779 bytes .../Default/Registration/Left_Iris.iso | Bin 0 -> 55435 bytes .../Default/Registration/Left_Little.iso | Bin 0 -> 83945 bytes .../Default/Registration/Left_Middle.iso | Bin 0 -> 97860 bytes .../Default/Registration/Left_Ring.iso | Bin 0 -> 90331 bytes .../Default/Registration/Left_Thumb.iso | Bin 0 -> 110503 bytes .../Default/Registration/Right_Index.iso | Bin 0 -> 93910 bytes .../Default/Registration/Right_Iris.iso | Bin 0 -> 51948 bytes .../Default/Registration/Right_Little.iso | Bin 0 -> 81884 bytes .../Default/Registration/Right_Middle.iso | Bin 0 -> 63941 bytes .../Default/Registration/Right_Ring.iso | Bin 0 -> 100574 bytes .../Default/Registration/Right_Thumb.iso | Bin 0 -> 134092 bytes .../apirig/testrunner/MosipTestRunner.java | 24 +-- .../main/resources/config/Kernel.properties | 22 +-- 116 files changed, 433 insertions(+), 22 deletions(-) create mode 100644 apitest/Biometric Devices/Face/DeviceDiscovery.json create mode 100644 apitest/Biometric Devices/Face/DeviceInfo.json create mode 100644 apitest/Biometric Devices/Face/DigitalId.json create mode 100644 apitest/Biometric Devices/Face/Keys/mosipface.p12 create mode 100644 apitest/Biometric Devices/Face/Keys/mosipfaceftm.p12 create mode 100644 apitest/Biometric Devices/Face/Stream Image/0.jpeg create mode 100644 apitest/Biometric Devices/Finger/Single/DeviceDiscovery.json create mode 100644 apitest/Biometric Devices/Finger/Single/DeviceInfo.json create mode 100644 apitest/Biometric Devices/Finger/Single/DigitalId.json create mode 100644 apitest/Biometric Devices/Finger/Single/Keys/mosipfingersingle.p12 create mode 100644 apitest/Biometric Devices/Finger/Single/Keys/mosipfingersingleftm.p12 create mode 100644 apitest/Biometric Devices/Finger/Slap/DeviceDiscovery.json create mode 100644 apitest/Biometric Devices/Finger/Slap/DeviceInfo.json create mode 100644 apitest/Biometric Devices/Finger/Slap/DigitalId.json create mode 100644 apitest/Biometric Devices/Finger/Slap/Keys/mosipfingerslap.p12 create mode 100644 apitest/Biometric Devices/Finger/Slap/Keys/mosipfingerslapftm.p12 create mode 100644 apitest/Biometric Devices/Finger/Slap/Stream Image/1.jpeg create mode 100644 apitest/Biometric Devices/Finger/Slap/Stream Image/2.jpeg create mode 100644 apitest/Biometric Devices/Finger/Slap/Stream Image/3.jpeg create mode 100644 apitest/Biometric Devices/Iris/Double/DeviceDiscovery.json create mode 100644 apitest/Biometric Devices/Iris/Double/DeviceInfo.json create mode 100644 apitest/Biometric Devices/Iris/Double/DigitalId.json create mode 100644 apitest/Biometric Devices/Iris/Double/Keys/mosipirisdouble.p12 create mode 100644 apitest/Biometric Devices/Iris/Double/Keys/mosipirisdoubleftm.p12 create mode 100644 apitest/Biometric Devices/Iris/Double/Stream Image/1.jpeg create mode 100644 apitest/Biometric Devices/Iris/Double/Stream Image/2.jpeg create mode 100644 apitest/Biometric Devices/Iris/Double/Stream Image/3.jpeg create mode 100644 apitest/Biometric Devices/Iris/Single/DeviceDiscovery.json create mode 100644 apitest/Biometric Devices/Iris/Single/DeviceInfo.json create mode 100644 apitest/Biometric Devices/Iris/Single/DigitalId.json create mode 100644 apitest/Biometric Devices/Iris/Single/Keys/mosipirissingle.p12 create mode 100644 apitest/Biometric Devices/Iris/Single/Keys/mosipirissingleftm.p12 create mode 100644 apitest/Biometric Devices/mosiprootca.p12 create mode 100644 apitest/Biometric Devices/mosiprootcaftm.p12 create mode 100644 apitest/Biometric Devices/rootca.cer create mode 100644 apitest/Biometric Devices/rootcaftm.cer create mode 100644 apitest/application.properties create mode 100644 apitest/resource/Profile/Automatic/Auth/0001Face.iso create mode 100644 apitest/resource/Profile/Automatic/Auth/0001Left_Index.iso create mode 100644 apitest/resource/Profile/Automatic/Auth/0001Left_Index.wsq.iso create mode 100644 apitest/resource/Profile/Automatic/Auth/0001Left_Iris.iso create mode 100644 apitest/resource/Profile/Automatic/Auth/0001Left_Little.iso create mode 100644 apitest/resource/Profile/Automatic/Auth/0001Left_Little.wsq.iso create mode 100644 apitest/resource/Profile/Automatic/Auth/0001Left_Middle.iso create mode 100644 apitest/resource/Profile/Automatic/Auth/0001Left_Middle.wsq.iso create mode 100644 apitest/resource/Profile/Automatic/Auth/0001Left_Ring.iso create mode 100644 apitest/resource/Profile/Automatic/Auth/0001Left_Ring.wsq.iso create mode 100644 apitest/resource/Profile/Automatic/Auth/0001Left_Thumb.iso create mode 100644 apitest/resource/Profile/Automatic/Auth/0001Left_Thumb.wsq.iso create mode 100644 apitest/resource/Profile/Automatic/Auth/0001Right_Index.iso create mode 100644 apitest/resource/Profile/Automatic/Auth/0001Right_Index.wsq.iso create mode 100644 apitest/resource/Profile/Automatic/Auth/0001Right_Iris.iso create mode 100644 apitest/resource/Profile/Automatic/Auth/0001Right_Little.iso create mode 100644 apitest/resource/Profile/Automatic/Auth/0001Right_Little.wsq.iso create mode 100644 apitest/resource/Profile/Automatic/Auth/0001Right_Middle.iso create mode 100644 apitest/resource/Profile/Automatic/Auth/0001Right_Middle.wsq.iso create mode 100644 apitest/resource/Profile/Automatic/Auth/0001Right_Ring.iso create mode 100644 apitest/resource/Profile/Automatic/Auth/0001Right_Ring.wsq.iso create mode 100644 apitest/resource/Profile/Automatic/Auth/0001Right_Thumb.iso create mode 100644 apitest/resource/Profile/Automatic/Auth/0001Right_Thumb.wsq.iso create mode 100644 apitest/resource/Profile/Automatic/Registration/0001Exception_Photo.iso create mode 100644 apitest/resource/Profile/Automatic/Registration/0001Face.iso create mode 100644 apitest/resource/Profile/Automatic/Registration/0001Left_Index.iso create mode 100644 apitest/resource/Profile/Automatic/Registration/0001Left_Iris.iso create mode 100644 apitest/resource/Profile/Automatic/Registration/0001Left_Little.iso create mode 100644 apitest/resource/Profile/Automatic/Registration/0001Left_Middle.iso create mode 100644 apitest/resource/Profile/Automatic/Registration/0001Left_Ring.iso create mode 100644 apitest/resource/Profile/Automatic/Registration/0001Left_Thumb.iso create mode 100644 apitest/resource/Profile/Automatic/Registration/0001Right_Index.iso create mode 100644 apitest/resource/Profile/Automatic/Registration/0001Right_Iris.iso create mode 100644 apitest/resource/Profile/Automatic/Registration/0001Right_Little.iso create mode 100644 apitest/resource/Profile/Automatic/Registration/0001Right_Middle.iso create mode 100644 apitest/resource/Profile/Automatic/Registration/0001Right_Ring.iso create mode 100644 apitest/resource/Profile/Automatic/Registration/0001Right_Thumb.iso create mode 100644 apitest/resource/Profile/Default/Auth/Face.iso create mode 100644 apitest/resource/Profile/Default/Auth/Finger_UKNOWN.iso create mode 100644 apitest/resource/Profile/Default/Auth/Finger_UKNOWN_wsq.iso create mode 100644 apitest/resource/Profile/Default/Auth/Iris_UNKNOWN.iso create mode 100644 apitest/resource/Profile/Default/Auth/Left_Index.iso create mode 100644 apitest/resource/Profile/Default/Auth/Left_Index_wsq.iso create mode 100644 apitest/resource/Profile/Default/Auth/Left_Iris.iso create mode 100644 apitest/resource/Profile/Default/Auth/Left_Little.iso create mode 100644 apitest/resource/Profile/Default/Auth/Left_Little_wsq.iso create mode 100644 apitest/resource/Profile/Default/Auth/Left_Middle.iso create mode 100644 apitest/resource/Profile/Default/Auth/Left_Middle_wsq.iso create mode 100644 apitest/resource/Profile/Default/Auth/Left_Ring.iso create mode 100644 apitest/resource/Profile/Default/Auth/Left_Ring_wsq.iso create mode 100644 apitest/resource/Profile/Default/Auth/Left_Thumb.iso create mode 100644 apitest/resource/Profile/Default/Auth/Left_Thumb_wsq.iso create mode 100644 apitest/resource/Profile/Default/Auth/Right_Index.iso create mode 100644 apitest/resource/Profile/Default/Auth/Right_Index_wsq.iso create mode 100644 apitest/resource/Profile/Default/Auth/Right_Iris.iso create mode 100644 apitest/resource/Profile/Default/Auth/Right_Little.iso create mode 100644 apitest/resource/Profile/Default/Auth/Right_Little_wsq.iso create mode 100644 apitest/resource/Profile/Default/Auth/Right_Middle.iso create mode 100644 apitest/resource/Profile/Default/Auth/Right_Middle_wsq.iso create mode 100644 apitest/resource/Profile/Default/Auth/Right_Ring.iso create mode 100644 apitest/resource/Profile/Default/Auth/Right_Ring_wsq.iso create mode 100644 apitest/resource/Profile/Default/Auth/Right_Thumb.iso create mode 100644 apitest/resource/Profile/Default/Auth/Right_Thumb_wsq.iso create mode 100644 apitest/resource/Profile/Default/Registration/Exception_Photo.iso create mode 100644 apitest/resource/Profile/Default/Registration/Face.iso create mode 100644 apitest/resource/Profile/Default/Registration/Left_Index.iso create mode 100644 apitest/resource/Profile/Default/Registration/Left_Iris.iso create mode 100644 apitest/resource/Profile/Default/Registration/Left_Little.iso create mode 100644 apitest/resource/Profile/Default/Registration/Left_Middle.iso create mode 100644 apitest/resource/Profile/Default/Registration/Left_Ring.iso create mode 100644 apitest/resource/Profile/Default/Registration/Left_Thumb.iso create mode 100644 apitest/resource/Profile/Default/Registration/Right_Index.iso create mode 100644 apitest/resource/Profile/Default/Registration/Right_Iris.iso create mode 100644 apitest/resource/Profile/Default/Registration/Right_Little.iso create mode 100644 apitest/resource/Profile/Default/Registration/Right_Middle.iso create mode 100644 apitest/resource/Profile/Default/Registration/Right_Ring.iso create mode 100644 apitest/resource/Profile/Default/Registration/Right_Thumb.iso diff --git a/apitest/Biometric Devices/Face/DeviceDiscovery.json b/apitest/Biometric Devices/Face/DeviceDiscovery.json new file mode 100644 index 000000000..b5ca41591 --- /dev/null +++ b/apitest/Biometric Devices/Face/DeviceDiscovery.json @@ -0,0 +1,17 @@ +{ + "deviceId":"3", + "deviceStatus":"Ready", + "certification":"L0", + "serviceVersion":"0.9.5", + "deviceSubId":[ + "0" + ], + "callbackId":"", + "digitalId":"", + "deviceCode": "b692b595-3523-face-99fc-bd76e35f190f", + "specVersion":[ + "0.9.5" + ], + "purpose":"", + "error":null +} \ No newline at end of file diff --git a/apitest/Biometric Devices/Face/DeviceInfo.json b/apitest/Biometric Devices/Face/DeviceInfo.json new file mode 100644 index 000000000..e8e4d59ce --- /dev/null +++ b/apitest/Biometric Devices/Face/DeviceInfo.json @@ -0,0 +1,18 @@ +{ + "deviceStatus": "Ready", + "deviceId": "3", + "firmware": "MOSIP.FACE.1.0.0.0", + "certification": "L0", + "serviceVersion": "0.9.5", + "deviceSubId":[ + "0" + ], + "callbackId":"", + "digitalId": "", + "deviceCode": "b692b595-3523-face-99fc-bd76e35f190f", + "env": "Staging", + "purpose": "", + "specVersion": [ + "0.9.5" + ] +} \ No newline at end of file diff --git a/apitest/Biometric Devices/Face/DigitalId.json b/apitest/Biometric Devices/Face/DigitalId.json new file mode 100644 index 000000000..a041adf73 --- /dev/null +++ b/apitest/Biometric Devices/Face/DigitalId.json @@ -0,0 +1,10 @@ +{ + "serialNo":"2345678901", + "make":"MOSIP", + "model":"FACE01", + "type":"Face", + "deviceSubType":"Full face", + "deviceProvider":"MOSIP", + "deviceProviderId":"MOSIP.PROXY.SBI", + "dateTime":"" +} \ No newline at end of file diff --git a/apitest/Biometric Devices/Face/Keys/mosipface.p12 b/apitest/Biometric Devices/Face/Keys/mosipface.p12 new file mode 100644 index 0000000000000000000000000000000000000000..94b2589ade3a7528746b88432fe3c795906a3971 GIT binary patch literal 3509 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 W*Ja*8{E=I6Q=~EsNdW>Tmi!AJ;E~_} literal 0 HcmV?d00001 diff --git a/apitest/Biometric Devices/Face/Keys/mosipfaceftm.p12 b/apitest/Biometric Devices/Face/Keys/mosipfaceftm.p12 new file mode 100644 index 0000000000000000000000000000000000000000..3a5cd3d00c83d1579f089c6cefdca27c60964e96 GIT binary patch literal 3675 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 WBb}0iApTVudyGs#-piyv-~I>b5Wczq literal 0 HcmV?d00001 diff --git a/apitest/Biometric Devices/Finger/Single/DeviceDiscovery.json b/apitest/Biometric Devices/Finger/Single/DeviceDiscovery.json new file mode 100644 index 000000000..142a5aaed --- /dev/null +++ b/apitest/Biometric Devices/Finger/Single/DeviceDiscovery.json @@ -0,0 +1,17 @@ +{ + "deviceId":"4", + "deviceStatus":"Ready", + "certification":"L0", + "serviceVersion":"0.9.5", + "deviceSubId":[ + "0" + ], + "callbackId":"", + "digitalId":"", + "deviceCode": "b692b595-3523-slap-99fc-bd76e35f290f", + "specVersion":[ + "0.9.5" + ], + "purpose":"", + "error":null +} \ No newline at end of file diff --git a/apitest/Biometric Devices/Finger/Single/DeviceInfo.json b/apitest/Biometric Devices/Finger/Single/DeviceInfo.json new file mode 100644 index 000000000..707064134 --- /dev/null +++ b/apitest/Biometric Devices/Finger/Single/DeviceInfo.json @@ -0,0 +1,18 @@ +{ + "deviceStatus": "Ready", + "deviceId": "4", + "firmware": "MOSIP.SINGLE.1.0.0.0", + "certification": "L0", + "serviceVersion": "0.9.5", + "deviceSubId":[ + "0" + ], + "callbackId":"", + "digitalId": "", + "deviceCode": "b692b595-3523-slap-99fc-bd76e35f290f", + "env": "Staging", + "purpose": "", + "specVersion": [ + "0.9.5" + ] +} \ No newline at end of file diff --git a/apitest/Biometric Devices/Finger/Single/DigitalId.json b/apitest/Biometric Devices/Finger/Single/DigitalId.json new file mode 100644 index 000000000..477301245 --- /dev/null +++ b/apitest/Biometric Devices/Finger/Single/DigitalId.json @@ -0,0 +1,10 @@ +{ + "serialNo":"1234567990", + "make":"MOSIP", + "model":"SINGLE01", + "type":"Finger", + "deviceSubType":"Single", + "deviceProvider":"MOSIP", + "deviceProviderId":"MOSIP.PROXY.SBI", + "dateTime":"" +} \ No newline at end of file diff --git a/apitest/Biometric Devices/Finger/Single/Keys/mosipfingersingle.p12 b/apitest/Biometric Devices/Finger/Single/Keys/mosipfingersingle.p12 new file mode 100644 index 0000000000000000000000000000000000000000..b1af929c6092d443feab2ad6072f601a8aa28251 GIT binary patch literal 3589 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 literal 0 HcmV?d00001 diff --git a/apitest/Biometric Devices/Finger/Single/Keys/mosipfingersingleftm.p12 b/apitest/Biometric Devices/Finger/Single/Keys/mosipfingersingleftm.p12 new file mode 100644 index 0000000000000000000000000000000000000000..e92a0a26ac2d9c7dc8ddb424a7fb55b3384f2468 GIT binary patch literal 3739 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 Ojzi1PWFTN{@xK6Qij?gD literal 0 HcmV?d00001 diff --git a/apitest/Biometric Devices/Finger/Slap/Keys/mosipfingerslapftm.p12 b/apitest/Biometric Devices/Finger/Slap/Keys/mosipfingerslapftm.p12 new file mode 100644 index 0000000000000000000000000000000000000000..0885eb8f464e4490510c64fe44e3a25c07e0402b GIT binary patch literal 3703 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 literal 0 HcmV?d00001 diff --git a/apitest/Biometric Devices/Finger/Slap/Stream Image/2.jpeg b/apitest/Biometric Devices/Finger/Slap/Stream Image/2.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..faf47323f3f765962bb85833f84e282c8053d83d GIT binary patch literal 19434 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 literal 0 HcmV?d00001 diff --git a/apitest/Biometric Devices/Finger/Slap/Stream Image/3.jpeg b/apitest/Biometric Devices/Finger/Slap/Stream Image/3.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..e2d0fb6c9fcbacfea8bebebecbe1fb52018d0358 GIT binary patch literal 17663 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 hhP3ei4e{F1{bZMP` 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 F{{U%rw3`3` literal 0 HcmV?d00001 diff --git a/apitest/Biometric Devices/Iris/Double/Keys/mosipirisdoubleftm.p12 b/apitest/Biometric Devices/Iris/Double/Keys/mosipirisdoubleftm.p12 new file mode 100644 index 0000000000000000000000000000000000000000..3203fb8efeb5856c41716edad4415a612432295a GIT binary patch literal 3703 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 literal 0 HcmV?d00001 diff --git a/apitest/Biometric Devices/Iris/Double/Stream Image/3.jpeg b/apitest/Biometric Devices/Iris/Double/Stream Image/3.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..8691a94604898a731aee67e69090ee1b66135b4e GIT binary patch literal 31792 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 literal 0 HcmV?d00001 diff --git a/apitest/Biometric Devices/Iris/Single/Keys/mosipirissingleftm.p12 b/apitest/Biometric Devices/Iris/Single/Keys/mosipirissingleftm.p12 new file mode 100644 index 0000000000000000000000000000000000000000..0801aa158b0e41613fdde0d658c8d4fd3c8bada9 GIT binary patch literal 3727 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 literal 0 HcmV?d00001 diff --git a/apitest/Biometric Devices/mosiprootca.p12 b/apitest/Biometric Devices/mosiprootca.p12 new file mode 100644 index 0000000000000000000000000000000000000000..3f1db48fb401e78bf1c7d47bcbaf7d7d2987c752 GIT binary patch literal 19187 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 V<2%}E2}F<_<^)j1>}fZ*|JiN+zij{j literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Automatic/Auth/0001Left_Index.iso b/apitest/resource/Profile/Automatic/Auth/0001Left_Index.iso new file mode 100644 index 0000000000000000000000000000000000000000..ed8bce5792f3bf4288721b33f67b2d1e0c911829 GIT binary patch literal 13071 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 R)mzR5ah_ZR!QP*>{{s)W1)u-` literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Automatic/Auth/0001Left_Index.wsq.iso b/apitest/resource/Profile/Automatic/Auth/0001Left_Index.wsq.iso new file mode 100644 index 0000000000000000000000000000000000000000..a14b92ba30f8e61d7e41ddcf58382aa1fda9e8df GIT binary patch literal 9902 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

woXm-#}@ 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 Q<5|V8%69cvK$rXf042<5&;S4c literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Automatic/Auth/0001Left_Middle.iso b/apitest/resource/Profile/Automatic/Auth/0001Left_Middle.iso new file mode 100644 index 0000000000000000000000000000000000000000..3886e5a7907a3e7e0e2660bcd7cd0d3e460d012f GIT binary patch literal 13075 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 literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Automatic/Auth/0001Left_Ring.iso b/apitest/resource/Profile/Automatic/Auth/0001Left_Ring.iso new file mode 100644 index 0000000000000000000000000000000000000000..e0766785219715126a86cc04add145a45da5327b GIT binary patch literal 12074 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 GjsFKOj}6!W literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Automatic/Auth/0001Left_Ring.wsq.iso b/apitest/resource/Profile/Automatic/Auth/0001Left_Ring.wsq.iso new file mode 100644 index 0000000000000000000000000000000000000000..9c139f53ad33354b80aaf086cf0e9a91a302822f GIT binary patch literal 10864 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 MzgA7XT0({C_zB@J4pl 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 literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Automatic/Auth/0001Right_Index.iso b/apitest/resource/Profile/Automatic/Auth/0001Right_Index.iso new file mode 100644 index 0000000000000000000000000000000000000000..e45e8d15295a40b21582953cfd3f35cca10a1996 GIT binary patch literal 13062 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 F{{Y;AG9CZ` literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Automatic/Auth/0001Right_Index.wsq.iso b/apitest/resource/Profile/Automatic/Auth/0001Right_Index.wsq.iso new file mode 100644 index 0000000000000000000000000000000000000000..2f082284b5d7f7f00949b212cc36f273d143af4e GIT binary patch literal 10007 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 literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Automatic/Auth/0001Right_Iris.iso b/apitest/resource/Profile/Automatic/Auth/0001Right_Iris.iso new file mode 100644 index 0000000000000000000000000000000000000000..552750cd606b4e6a7c77a80ad4b8421efd5b3bf0 GIT binary patch literal 10059 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 MKGnq(FTXba7fpp3l>h($ literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Automatic/Auth/0001Right_Little.iso b/apitest/resource/Profile/Automatic/Auth/0001Right_Little.iso new file mode 100644 index 0000000000000000000000000000000000000000..aa801c97dd6ec72114bcb346803c2a0826fd096c GIT binary patch literal 11076 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 E0Kj)i`v3p{ literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Automatic/Auth/0001Right_Little.wsq.iso b/apitest/resource/Profile/Automatic/Auth/0001Right_Little.wsq.iso new file mode 100644 index 0000000000000000000000000000000000000000..c0fd3e8e12d1eac4733368d00218801d990ad651 GIT binary patch literal 9003 zcmZvBcTf{d(052Ep(R97LI_QiA_4(IZ&HKOMd=-dgl0sgNs(gc@F*w<0z#xn?;QjJ z(v)HV=}mg?y?ngy`|me9cQ<=`J3F_xxA)sQjR%haC@~ZO0N@b>P+Sp!hmB^Dg7z9S zE3oit7670S13&>#DgXt=-v1F8$W8&Hhy?&{tzUk<%mMi5J}`W2t*WQPB}1qGz{J}4 zf!bqDE-@+b|K&8*A7C^ebBW9RpHNL*|4JxLr?3BjO9F+W)7CRIH02VdQ`OVfdt|7u ztg6n1d8BN5#p~!lQa3bwpr^}aY-m7t)vQ$>JbtA7Se*+cEOn)dLS5OW(|P_9hZn{@ zzx)P}rKJJTijnX92GC9KvL;c`DQ|8kQP9WmJ^c-!pYbM&189XWjQ|vM$Kqsh3i_Q; z?j!&muji=vWhTWtAmART6$M&#{r~j+HlWk{pwS5+LJdTo1YIbAx|Tq@zM#q}(3m^u z*AvjbIH>6}XptQ>{|U$z4H|j^WUU6xh5*?_KqJgR1S4p04ak}g8lDFtXh1VRfNU(F znSCG|JE(&Jv;_hE4F$4JfcmmPC$^yRHXybnjuOyi z1dt;ah-e3L-2$Dc0Xe`x)_ox79nfY55ZMAm3<9~tK*#Pt_Dvu{1;`l$M05hVZUfmK z0J$20Yy=?p)%q?V#}4SQ706x(WE%x?y8sbWKrSU9n>&ze6V#&&It&D|zXtM{fi~xX z$S&Y5DWCuZ$l(pV{Q=134CGw|3j6|!@dHJAfihPA8&&_G?lJ=a16)$XQow+!os{T( z;60|xEP(x01cHE+AWA9_EtKKrN6=QF(EPaYesg?_kj`Sn;$-X&iv8b+SV~1pOpM1C7t-KrMdl=BY(PMq$uXqU< zx!9aIQ%cxMJF+f1{o%NA2?#wb+PMUX44zy9tPlMf{gqZP0ci)9fUv0I1`UivvSxm>U^g0A?Jhe+mtMoV*#72=FaZiWm+ z>GD>N)GKkyksOK|!kB+%1iz>K;6m?}G^XDsa|oVz^^c<6J$dNkih5Qmgx>Hj`EO+O z;vT)WVxAAzH@~Jw9f_WkhJgs4>1YWZ3CeAv6NOL=e=VE(wEL&B;Y^}iTPRNq7zKaZBdhl*l#3DGI&D8@LEb2*&hT&&8k>oq6HSHl+WxlIEMFh>is;o} z1m2Z%;Es49;ZW1n!y!;NBtCDl)xY2{!#og2wOW||bm*h8Uqjo&rA6VRkJcQ%d*?O3 z4Hp|LHg5>3>6NcSUno4cNYbArb>Y2vPtr%>H)V`aVu!mjIS zoR+!za?>A5h(P1vbJH3LuUy_4&c9R|X@soP`Ourj=TDu|nmoQe>tnbzp;P6UbV@EwkQP@njy^fsDmNUMs zO(?q=S7%`8A7j8PNV8mLaBfD3=9y!DRzi2W92Q+XAVH-J-H52|2 zhd3DIo3Toc;gmnWJHISnp>tzTUfn~=@VZB7X7_7*^`zb;JXRDhlk!qvB!ld_zn7bU zYZ%OJ-Ho?m8_z0TEVX-~dnd0#@Kv{iSzTAH@wcv2p@^Y)ZI#;|kA#r2;QUF+-1th{ zIi8Tcz+!uGVd!Lj`AGbuOo z$|3WfhFkeEW-Dd2$#sLd{@v}pTT{L56BRI;g^S3x0M37BjRF$f)>C_@jRA5~KVNa@ zO-k(kDyl1j_v!ki=kISn+;4OGZdCC~X!udk{MmV;Wqw9lm324!b>k`?&%c$cx!pn8 z;(uy0QJb=+g^0>tw%$LHE+nUk0_OT64)*~w&==Vc`iUeF6{`#7DCg`cn;94_Yn=Vs;l24}APP`9$+`6w;% zceZ@7nNbM8+jFCG55}j1Mr-e(kgA@f{Nwvcj`2`aU9H-|q^+t}Cvu$**(-dkLd27D zUsU~-#cr~Wn&?XX3RW+)kjEEmWXHJ880|JXa4n=GRW&~1uyF5u(#hQ6r-M)tSxS4Uh5*9Z{v*Y<}x1e}%L> z$Gtvgd{6XSqxaKjcim=IOK)wT*tW?x$5l3?DVV2Ke!=Y!NY2hSF7w+c z4|-CYEBgjxxhkm~Je{O-wr`Z}-rVu(Z@sm!@xa=HIl|Mh(hK}suEHgek%F{MU!{*WySrs_VodI11F66v zj-8P}+JJpjfNJU8huq@v%E>#;HSujWef;xXl}DV^Ts*MK z*3O@CZuhmDqU4`s*f1!r>BPcVf~6z2z}MR)lVQ(6rjb(a(>sy1%%Is10$ z!lFL175d@slZi>$m^aSrxdCx zu5cmsho|6~E+1EO*Q{S^-09#)ayofcf#|u<(TZ${fqEiiy0gKMS^2hoo!gV?SXcw1 z`^XEcmu!I8`W!i{EQ4j!ZnC&#=LJF3IdcV`puw}JZ~b2T`$WVa-`JAJjX_2Ze;*m8 zl$G@yuRLqm{`Rj}{~+Ptd5y9xN;QtY_Z^E?%;|yZdc3xU8@u^|Kqnv&cQjXsYW-Bnm%z!!|3Gau97Zrs82{ zvvn$=B^d=T7jth&N7-n%URR@F77VK7h80MLC{oIU^+0RCkk;1*AT6Q@U&U4iWyv%m zNe6s39nv#%Kwsp?sPsO!xN`lh@U?t}lTy6Jj)2jWjYh48Kxjun)<$x(PraDVBnN}q zXxG9K)(I{u@CB*J#_6EA2#vHiW=f_Gkyrf3{Ktv62*UFyMCrb3g;A1|oy1jaB|SIo z{I*S)=k;P*b=_CVkfr%JN}TZ$V18@(5`bRJXnQ`; zFKi|_hgi6#&7Q0ay;)RN`A#?ke&j2ca&s*RoK(-+7e-EJEMN2Bmcvb#FTOB~0P8W_ z7ewi@qQ`W~X`|?)(^Eaa0DBYos;MG9aK>*2N(A(UVeeQ_k@H+#L*Hma`K8w_f^%@ z3;6^^#U!OeaNh_#eGz}jY=o&mSHnX&{vCD7#AEZlhq{F8rp|jICniRz$`M$ZC zQ3LkUwamb#Wwkq3V;}v#Z6xn+f~88b0PW%xdOfFM{I9{=bS&>hu)j}2f%7RQ7h5(l z*4=vvkW!rWu8s07x3;c4i7RmW)Vm(w`LR3co14<}u|;^!YMI2#OTbh`digcWlys=f zcYJ|ko(33GOja8l{cFK6NGe~OQEvHgBwpd2i$vHtA%hT#+;U_-*gMg0Q)(zkyWr@S zQBc&r+q+xjXx!@J;P7jSu`0I-JsIctz7(HYfov13F&eXiG zua;uigI%37V>s0<-SD9Lo4k0C^aw|`tUY#edV6O%>F>k_!CW?6er03-rqZ$I>xMVw zg$609zdv-KMyQ$5RruN`gF}fRMipm4qbGAC>=x@cUKS*qNmk0*c6MR@!S~GI_4Eng z=`Pta6Bhp*G$q1uhYoDH9N?YLPCIzL)!tb8&uz;0A{YO*i#eW)p6 zOxSdqqLkq>_A)#xV z)?>ZpZ=60AUaZP@Q{wvn7L65-QU%_;-rK$2_YH37P*M1;|3+TPN`6_Ps&S4Wd>v0n zuV|@wM`JKJVL1j*M4B)Ns$1Q}=J94!3qG!vzTx5;drjJ3dDFwIm^7XUkquUt<3)E9 zJ>to6U`r=afnhmpLT+6ipNU_irCs039%3~!yjWCn@UCdsdz`%xGnT}zb%?Mp)BZc5 z#zG~8>wcFNVpe)bl=!a3UPm+($Uy)lyn1`cnZit9++##Pe^t*O=xJeISc7jVsyJxi zSP(TUD>xvJm6oojygt}piBog66$b35#3|?rm+YoIuvgpNt=z17KisTQ(AH)NU!AAY zgiH`e#dF>hE5&fi=G=Nx(;);h{I~f@ov5oAD+Br1T7)^R@ zw{gRhdAj-3%^LU#%bn+WZU2Rx>kA$owoFtMc!ood8bl|Z_|S`$e|k%X&zs(R1Yd38 z`MhBMxvRH{0m!jCSJstl_UyatF^et{GR$YD*)QkB!J(R<#ZjIQCoMj|Z{K*{TUWaZ@`TcAF7fC}o!$}I?B53^j zTV_lt?j2i91-n{M3(S^7_L?+*l#PlEe{{?H@#tF`sl1PZUqGNRmLa_VdzqZ?{hySj zKMru%!A#QCQ4SS3WCrwDupplDaf6#o-+#L{EfPcf_w()hClBv*<8evDJ#mqL1N|zR zDBn1tZ`dugPUUNa@oEv;DNw2qOBG53DPabg2t$a_ZAIfh%7$^zP%+D2ar1xkZFT=G zj;_ZFy{65VwK05wc*UxdWJi9A3rg~^y%`PDyeW#dA)1dqjY6sXy9W8qfL8-{6lz+~ z4Vk=uXu}Pk-l)!qRd0R}=NUd;uX)a(pvK)XfQ?zNoS*Kg_&QA5IP?xg3R!=uKO-bk zl|=Cff0Q)V08_rwY9ISc4`8-xczs{mR@nSiN&27ZmUiB-xvmLHI;lz_UaQ|SUPVCq zk6FzBEqt%GLDhrfi>DF9&vfo*i@aZAL4QKOhQqh7LxG_f+gj0_N;ElV<_|B8JtEY( zqBE4eeghTxAx+AdkR)g%!(F=4Ay@-W2<5@phN?RAyfdca2nGGdj&~;{t0O^u7|-o$ z?my#5t6CES_OpubZ%`QwgUmV_*0{nU=G*mxP2Af22%CAc>XMf7|C$$tfh7^NIutp! z9&AQTTr+{R3kL%>sto-antg?gh8P+LnW5-k%uRuSxt17pW(@R2Kar-(Cv`8>$0d2f z39Z&V($(Con{sp2wyOp|-TW4p7p~1ZR77d7rk+JhCr$X7j=;D2p7n8JCB$i(o1%Ee}#-VK9GKx|!J zTey7oM0OlKi;ys!^uVZv8dKuXT@x?Gtwq3%e9gl0^S8*=;Av=*g<&1-l-Gdz%5AH6 znAMwulF9VK=J`aBzR}KpgE7vTG3GDY+9v2TdIA?cI4?Vn_kQ8RFH;z^STW`H^wtPO zHl+^B8{O$>X)025&75|_zA37)e8v`;C3jyKKz<{LOlE4biJ)Q=UeK-!;UCT>GQP&w zg9od5w1Uv;EisTOdR1=a=u)$^<7Q zzm2^W0mt(oDUrNTWv~jG6dV{OCCNjFB4e)eea-%(!QKg>W`IlCd|^z|2B`4J2^d?= zy@Ny}MRcU@p;oZ#1AhkVoT1Kb$=09Qo{hHKIh%!pUg)Ecmh9BtW+I>pj|_R%0u1j- zl(4xYFj!sc6KieXTqM||Ldw3BjUUat<^pS3V}2UA?mp9mf7a$DRA$N>6qm0#uKCXl z7h+m~hthl=Vr@St>Z4PKtkIwqd==JE_F>ck~}5xSy)OgtG5R4N9Fm z$0qRMXdt{@=$?3HN3)qO&6^r!4)A^HYRmBgD^NsoMV6p$n-n9(`w%0XXaC!)qcqte zKO|AJgkfy6=-bWX&qRz;og`&-c}AIt@ALobexU7aj%qj7w>26UEBwHXo?97ijtu;? zWl!hMV8T2TqcbWHhJk2v8JK0EZCboN-m1#RnyfO44(O(6!nK*@3S>0dbRq zB?JTy*Z`SW%k*#%?Xp$#-KR51R4xod-x{OM#;or%NsmBC`7O|MK#B~ak?{W(hU!>7 zu#Ty!x3M9wv#HSW?RVH#hHKpMJPGyo8Wzq7xZ%$e&Cb_?HS8`+AAR zLWi~@?%%D_Fo5Q>tUypb3$@95j@q)m)Z&ji0?U8MM`F-2BT12kXh6Wq!GIsIg zG>?28c<8CZwZpCK<;`nmU!w6Fwq!fkr`AnF$r3Kd4R-tMOy_~uU?N>%9(88y3P}hS zg8uAr_YlcElvwx0N_K!pPX%1HRi?jTsT|q*jLbnRktbfTuaT_kAdOe!LqfT6;*yXf{I0hj$u#|`CfB03Il44 zd*(sKZ@XPwO@jU;^}8bfurG}k564Jod&3qU*&xK^Q>nO*dw8w%Ky%92k&be9xW?xz zr1##+f$19Wa!IfQ^}~j7xK}LbAIA1_&Or4B2XfKKW9 zxSjvP9lbG&?4Bj~AJII7_W~%4$Upw9#4jmRIq;_mx*WS(@8H~C_$W#LGD>^hpL1R^ z{?2dL2KNGP(P_x&;dWq231-o-7|mDiX>{dgun;LF<#z)riD*7d;+ZkfV(7Yv*RK5* zN`aAf4SOJsogghCaLsGnH<_75W7z)^i%%ZfA)_m<-{Z^_6X8+wkR$)Y^83hu-Js%7 zwXQilhUM21&nm)4xD7@6fHXO6+IvGlzv2uma6?(FL`RhbeqqpH0jh+FerKC#i`Ey&pS0vouIw!`|s^i72Y+UD^+CG)*3@R^$X25HLQ zPb(W#ydyB@GpVcr-&3Gze2FdN%ki{t+VC#fv|S!TD*j2l1l;5(8`_pZKjn!VI+>(# zpUDo_W7%Q_@Ay|m)@}v7*hFvhA9L_+qfS-Bw;DDFPGWodP7;~Upc)Z=T3c!1*^UG5 ziWu$^9ZrM~V+Aq949`%xq7&}ukj7D9oif1!NM z{}>N-{kgy3D)NYJ5; zr+$Z%oFB>1#5m z3^I7P3xI94O$_I+aeLkNHA+b^Nv-l8^k-8HRROb#Xh*;s#!gq%$PeE`LX0-*{o?`u z-O?F`oZ=+**bPe(m6PSDh4RB6&PzP^4TK~5Zz_e&;(4QR6;(r+mjh294)B)4?2}0x zn1(mOYHrb1Z{7a29mf~I2)~;`a7NToG}mXHTBzNq4~oAI;0`|gyKl(&BonPMj-s+T z)0h`ZHx?pNQ9})vJ+MQ{*tgCaa8{mmLGuVzgRkf~^ShXTCh8~+v-<-BgJ$GXD=Wuz zZ|R{5M%!2k;wCJKEeZSx3k1%GNWS^|pbOC5VbTp#Wu)lf)VD_Fw&jrgdpar)vh#EeB+SHGreN{U6?%pk% z<6#CKI!g^+qnOwV&8MV>KTWrClc4EY2po^F{LQyx*4|C}6)&0*DhZo1k247cXqBk3 zVrIVu=6mR`lvfB~nq~kl308fUm%SyQxDC6uEdY!;S3=P}RD#sbS`|O8|{$^Ai7-Q$X?> zR{qxH)`FicC!KvOJ=ZpcmhbIYCYY4xUMi#GA?HfOo<)nESjS&vC@r~N0{9mE4d%9FIR#sfk({)3ormK}z6V!`@JM$z zuB?oG_yp>=_f68DI6SkVMBmm8pXdB`6h*tuNzpu4E_$LDWXx>RB@*gUx zZXu_(a0HH!0Mj~XtD9){EdPn&OJeJBY}mO*^Y{+`F(gDfKD_fd)H8S)d)A(ry(&X< z7URIN%QvUAb*8aNAe}>K2sJbOUT+JOY}b61tZ5fpq_-(ed~f&C@SMn7PwoVmu3%3g zp~uB@zJll07pYF1_4}OF=bP8k{_H9^9>IBnYfd;8n9l>3`A?B)1LsA2f(iSIK}_e+ zH=KW7O7f4N^I8XNW?JLE19!|CTq;3QjQSz4Nm%6bw2PTPwmM8dP5sxLd8Ga0 zzd73jr7xR49OU{r7iK?^oGfX(AJuf+B_}C=sW|f^HF}49DN2rG4dc#`aD`C5Md_k# zC0xmpf7JoU_9ei6GGL9<{1Tv&#ss4o_3~BfxCG2x0x%?2)uTpMkyFlAc{wPP(aToI z*)|2OcPf_>CX6<3mdeCSy%84r&U}`6?DS(&p+-ZzVm;c zE<*3pn^a!tz-Rok&_haGELC7oY%8*hd(zLbaau|A5>V2#ppvi_AeZnJ&HyCs2+5DX zyGKPjNnE=qjcVX*-IijACxr*bt|~R`vn6x-ZZz^jxBWp=3VbvES!r0|#b0YS2b|`8 zmjJ_|)6H-DHPVgOFd?K%K;3S(cW}$I*^P4=0{z8eaPpBgIJA{|zzfB>n zbQU0UGWBjV;5(E$IC4obVK^Lv*^^7N)$8)J@4%M?#?h?(n8w>)xKet&iS4>_%vosP z8ns^Ij#B@XflI*m(B|(;{zOI&R%(_l#T(fgX-oL$Xp6J+0$$rGSa)|b)acreM-ljV9z03LQY>`kl3(QUB z;^NCxB3|w5fP>5Mogx<+v+jEz`_LwUr$uPiKQ5i+-1?;2nh9pyN^NP`dz=dC{kh|N fKL^SLzy3d0mFk-9EHvW?!@>1dFRW_wGX4Jnt}3}x literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Automatic/Auth/0001Right_Middle.iso b/apitest/resource/Profile/Automatic/Auth/0001Right_Middle.iso new file mode 100644 index 0000000000000000000000000000000000000000..e6771d02645113f65c15d1fe76c2f51447d122e0 GIT binary patch literal 10062 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 XUCyO_z4(1db;|+4oPyWJ&)WY0F;^1C literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Automatic/Auth/0001Right_Ring.wsq.iso b/apitest/resource/Profile/Automatic/Auth/0001Right_Ring.wsq.iso new file mode 100644 index 0000000000000000000000000000000000000000..5ac7ca4293da240a3a41d4ffd1ad911a25adad53 GIT binary patch literal 12632 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 O^LF1D4{EyW?EeRZ+gYUm literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Automatic/Auth/0001Right_Thumb.iso b/apitest/resource/Profile/Automatic/Auth/0001Right_Thumb.iso new file mode 100644 index 0000000000000000000000000000000000000000..722a5cd9dc44d5f0f90eaf9d3611945511ed13e8 GIT binary patch literal 18059 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%0Ac^ zX)ZfIUk|42hLfwmnVsGA4qmIyoeV(F>SRbc@ZDbiPv55?VZR{(({H( z?_@`dF6IaHsb-xEM9eaMU+mk3Tp>NSwWuoRO-fFnK8c{9YlOnL@-hY_(!LMNV7Gx% zDlP=(D{xSXL56|G2n=KKJF?ZU>$eos`8uzEkj*psbR!Ye48i*Dz`xQ?X7PgUUF%U7 zac_8A@M`LgS3_;@X@da&7G!n!!H{7?$UShQ#L~RI4;WZ4Hcrl z2HJak-!u9b+_cg3h6j3erviN@IQ$6hW=^#!(@hjT<$G|#aHrY+U>X@GZLxvqe5}yx z9lwYD!#E7i7c~)WojKhqLN_en{;Y*-*u@QP+}vbnY$=tPjPE$9VC}BQREz8IPn0oG ze9TyN$*YYL%2l@unOi}ZaEDZzNWuCS;1qK!3V?LAiG&iNv_t<6;kHz_YgUqbyrczQ ze{pXN>BVQaW{%|(LJUP|(ZeGwzqEep$#zu4d&ZjII89rQLKm__6Y- zy$R`iaX$>RJRR;*@lHscb_@r^^Jdnqfx}=NjwtT?NODm0gm-B-&H)jaGLjrjH~H*S zD(0dOizGfMS1~`uE>2LI=SINn`<8fS@Jrl1eOy*k}g5|#h{9mRL+(N_n7DU3N6ye1m}U&;0OQ}2dA4a>2=K{i_J zI)#HvL_pN&{O(zl8-tvnTkoH;GkOgVCqvEy*{w$Znw=|(<=@tX-zgf2?yw@7YAiFq z!mW2XVGAJ>tPEQ~bPgB6{=qK@kSScaIQJIn&JuLIMg>3s<4hw^(?aiIF%~LkgwAx? zWUfJY;LZI+vOOW|U{byFhNDszx`&vxGlxE1wI@@=KYk>RvB!obf0<)+ACRTMWoP1# zWze=4OOrA&f1QTocQ2( zwUCRAU*c7xC9q`D-iu$-SbB(sD~iRCi3KukF!h_&S$YiT$%E!4TOgRn!j6U?aq0ezR7Eh?})H(bEY-R2A9TxcZ=zb^8gm3 zU46iWr>4OVQ6!*U{*BHH4kA7fK{qFdwJ;dp4kfEqoJd2bo&>_Ck{DP-;xu{D8!XK; z!q@T)6{9Cw+92x!LXm-h_PuF`O;TiuQQ*L&l7x?}U@8JmB5}w1RsOSa#AB8w&CRf( zN|h82!0Us`RxOgChWX5Y;B*FQ7PX`eD?ot}Cp!1vAOmjSsQZ7P8XvC9p&4cZKCCr} zB}sKj{Ow`Cw>V{Kfd34%x=bkhJv2P{5MGs4RE-&vvFCl~w_gM>BJALA__IKBS)pseNR z`A^3L;CWsMYx&tpa>Z^+FkS#tLpU(MTUGR|;!@$D3l0qhYZSS-ev*K8(0wsGCG@U|6{LjA3h8Ae!Lr9LC?j$9)cDJ^^OS~HW5Bi zv&)(K8Rr(2_O_Q6?6RI9+Y?l@-EbO5cUOj$iP?{$PPp6DY|BBuZ>z`!NV^`Wp9y zNlQ8(HI(t5Wf1awQ|6bRV;RQRi(XH>b0Z339N3T=J|;`tLJ#BJ&D^h23EL zhX$3|lR%U^s-8kisX^;+v41TKc59sOoe~b5^QTb}a2kG0DGH6fY6vX}pLpnWeT&X! z{;*pJ7LF^9o1Y5L{alAsgv?zwX|D%9xr|?ZwecyQTRusc?V{>LP=1b2Ska`rfv!3> zJ&PbBj+46biG*G=KPHzj2P6^(^8nTIPLfUr2Q&$aM%dikCy0}qX?VoeJfo?ccKybJ>p9?T z8kE0M^oBA-mh5yG%fhY_zI?i0kzrD6W^MsPI;q3e3@1i`JBxL8k#v{sc8XS#I>XUuJ%r9~ARjV3>tj{LKDn_W>UM|iM zU9)#TSUCL*5UXYzZo*_2QL(Uq8mPJE`361@Vt{WNarvKwSye$=yr}I|^$snHl_tZR z@4jU-K$kxbY%xv};=o?pYlfS5fSbf7MyVKX-@lUU<959j_$GZWKieZ)a1$iiLzWKe zRIkipU1KuAnEEs=Igls>2l+nkkPE40c=0N@$mqVr-j;snC4@5ZcYLU3*a?sbx9`!Uhi@TR@LXOIEWZj(IqLo^>@BsJ6Mgu<-} P#5vJji&us#Co%uo>nX%L literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Automatic/Auth/0001Right_Thumb.wsq.iso b/apitest/resource/Profile/Automatic/Auth/0001Right_Thumb.wsq.iso new file mode 100644 index 0000000000000000000000000000000000000000..4f73143e4a35547c5b72d488fd3518881df1afb2 GIT binary patch literal 14270 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

_WC~zbj0I4T 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 z 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

NgWT%jP!|!Hbcxh$E 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 literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Automatic/Registration/0001Left_Iris.iso b/apitest/resource/Profile/Automatic/Registration/0001Left_Iris.iso new file mode 100644 index 0000000000000000000000000000000000000000..fedadc7df94cfe8dc9dcfce2e6b0d8381a3c4391 GIT binary patch literal 55435 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�$ni>D0tQz@57o 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 JF`BB!|Ji0iRPz7; literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Automatic/Registration/0001Left_Little.iso b/apitest/resource/Profile/Automatic/Registration/0001Left_Little.iso new file mode 100644 index 0000000000000000000000000000000000000000..d2b26846803b9a0069ec9526dbe5cde3f9e60363 GIT binary patch literal 83945 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 KXJv9AC^#uXV7+qy literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Automatic/Registration/0001Left_Ring.iso b/apitest/resource/Profile/Automatic/Registration/0001Left_Ring.iso new file mode 100644 index 0000000000000000000000000000000000000000..b401048829b810fdefd30789a2ec2d3fd85d8b89 GIT binary patch literal 90331 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®pf3-6>7>#5MMS=zH`F!i{ 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 WX>%ZHb0BYKAVz6!XJv9AC^;#o-!q&5 literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Automatic/Registration/0001Left_Thumb.iso b/apitest/resource/Profile/Automatic/Registration/0001Left_Thumb.iso new file mode 100644 index 0000000000000000000000000000000000000000..0574ba6c8e12e247e36a9ee800beac1f006de825 GIT binary patch literal 110503 zcmZU(bBr&(6E^x;+qP}n##wv!tZm!2ZQI6K+qP}n_xpR_`^QagJJV+-eL6|gv}qzXl`^5Ck9q0|fsk;Qw)+{%?l_!voR< zs`_sM`F|`}O9etgIOs6w|7=uKXAgTzduGD_Y{37E691w3e=fR(xv}GaL96~#T>uaS z#Q!(|1S30ZN1*>>BK zE8CT7umRS{dd!Ulp7QDZ@9kfMHmnC|eT?XNl!X&Ztxn-3_;ZDfi2d&sYCQ-IcLO;% z9RhZBRgH-_PBD7vZoZ)ZJEU_>bDw`hG7JOBnA&5X79Q$^GbjqJIRZ`umn^iYdrVgyawx(H}KuZY~|| z13KdWA=(6jRk&4AjGaqq@nd0hLK$!4W_2t^Rnl`pX+HUOdf4q(-NgJ3lMsD=14-JU{f=&`E z8)YJvJwD2FP4h@IP9N`jUI5tVMpKzzM!nH4k0^i_{lX&t$02q33prJ}?1ckGr5Ak) zp$Uj6a0E5fIfY-xbiJ&^$?l`s(nDysY%2iMCmnM*WTU_{-p9Pm&m-=P+Q@X%T zM)}4x+R1&L+EOQCk_qY{lqzbT=+M?co8$dzmyDTm zXDX8(svf^~a(fFhOV*qXmEP`0;naK{#h5U!U2yzjItANO|HQfvd1A)n<%b^78Lds3 zl;-v}Jwg7eXCBaf4?jDKV6xc4je&EIjHMXZ<>A`%ayLi|Wj?W|E-~MgzB=scY1l^a zr}Ft1<(Gc1ms0w=n!y~12<|3OzcA85g9=}@l?Jy=!q1M@hB>wUGH4pptXZy$9*?k# z{a`fGfW|(A<&l?RbnQX2)O&p~pA7C0QnT|Qro95sknTnElx`lcn%vsZnw5E5h&`aI zo<0aC)vItaI%E4uM{>>;UQ2(c2N4o>fr{-*bW$~TkpfcFx5<=q2p1930;$jhJy2mZ_5s^Y)OKVxnaMI` z{Z&ynmE%K8S!hTnZ39^(u{ksB4D;nOLS0Ne9XAR}6d)?0OwTy}AdGysiuUm@t4F%$ zi4ei+L;4(sDD9`14Pt!Ma#3=?l6Y9-hkXniG&7ZB9bxG{+3wc+g#Hil(P)pQ6|%!N zFLvCJ^;NmFn+YT@Ni} z-B3C<(|Yy05suWM_!>C{rO}3V zo-&BfWU!RcUwn=aM4)8InhEK41VM5b=>H*o^nLV0lg+}QHQi+|sU$F8nBSM7;(GsN zWp29j#!5!+J2Kq81Rl}I>XV;i=STr%4}7I#9^pf2DWmMw1GSj+AE?nv{>$=_wBqA@ zv6S*4nWJR@Su2Yigo5r!Z;ppSJC4=>m&3ZoNFX{h5ax9;oB$@Q!(PJTr%o5vS98uHqzLHUu7W^QyXTJ zz^r_qoMMx*ZIRxE(El?|!oYvL+WODJ*@muXAZp{KtLQ!5D%j@?0XY(TQeng5>OcIo%AmZM(iPAjJk{JFfNh0{XMQTG`~a zN?S%s4oDH=Coee;H4tdm3Efxiv!wg5+UI9KLX9{7^Kf=al7`0<|ChZw6To)Ro= z;YL?j1n1b4O7XWbEE`$pDFM@@Wc2pXWFoTT9o79W2R*xpKo=ehr3nD@?hvt1+c1 zI~GJvDJ;|4i36vdE)-kZWaH>`&$Z$1to`~53nQ+P4g>h6Sw4Oq1B>y<9;N_BCfIE~)x!-LX zeZk42p-p$}@cvNd;O6Reu3eENtcUQ=?(%E&VFNBRR;&wsRzNzktOsDDGOjB(00;}Pd628l;fh5;Sbr$z;bR{r0 z2*$12gaJ`2{aW*)h{s6Je0vcECY`qrAgO5rjMB4qfNROsF>w9t^affgKqY+(Tp|ie zN{&X2GA1;Ssi4EANb8X|dkJFmnj&e21+YoLXFsRbVSS%bl1iY4{%U`6;L10KZGETM z^z#VQBRl_uR%i9sFhiDfun?)qTyn%pZ+S>|#AdW)FhC?o9)=jDhv3NstFIO(dtcGH zNhV2(Jdyciu3B|28LOn>f_fHh!8FYG_<9|=7ASlOWqiDvlb)W8D*aDqO~Hj0iCT}+ zc3hU=TjH#@J&Y3LMSL;!mPl`;30(`^v8sftwTYzSv=nN1t=8($i<&x_p z2{Ur3`VB=^<(d9f6MB1s(-lxlzRfa&fvvm=HBE;d6}N;}CpQe#P~S5~$^+OF8`T+H z+*eziig(L82-#ooINg56Jcc#NoC=M;wTAM^x{%mSDb@-~mm!$`KHT`SN!0U4aeC6?k)!e=O_rM3{gAc6h5YM<>u^zlBrg!)6n zuyDu@1d{l~wbWu@AIA=#R&o%;{GiQba1$8OpXU4uEN@js7#0B#m%A^iW)iD z#|hi`&U(8i_7`SYY6C9rm(`?Br;A^JV26P3(B8%Lct5s=bQlo_e<@(Xn7gHXN8?E-RGMeT(9bwSmU-Rq ze~n>6VdX(raDSbWeL|iUQ4&#@JqCL}%p=Yrm6gl%Bwu!7?dL;KvtN&Hx=o=u;s*ix ze+h!`6WQKB$2lj5&Ma3Ch*OYwr0;KM7&$~Yo=cQ|!Q5LX{pEH}G+R#@X*q}1ToW)E z&je<6Eu*Aq^`KB9>+^r{^w9|fy|bv$Fb46ogX1szL_E4y9uk2<@JYK0TCcmmo4?sG ztwvFG&zyZ|$+OFKkxTNx!f)*4P8`fZmls&q!&o6Z9G<2brFi4in9MmPeM-$PWScxG zk*J?IV40%0VtL3IGT(`L2x3O74bMs^o^P5ifC~TNyxA@NWiIG%)vir6YwsK#nI4lBpswcI}j8|}ie2-TdV-2Oqw z#?LB;?QzrWOn^t#Q|ds=j#J<|<1J@!HC0LL$s2B_km+7PL_5Z7P3z;e^pFzIuYXYM zY!%zTh0k9W)3#gUkzr%2t0#`|qCdzj{{nG)i&RUCzcRbhvq?I^Z%Lcl&PIoX$Hp?I zjcg&3gwe3oTr~CMW-%0uB|Cy@9E5>y-c~K&ZEXLAgA6pyK$YU4(vBqC-^ptqAhgWfo#+R zbpkgVHtp(f>{$0@LUO+4s5dL$eMnj}{+z>_J<-~!dtTI^)`BG^0gQOvGLQMsQgVuw z_0u*t(0j;RI&ku_3|N80&VI>5ri0j%UX<7Gb!ObPjANe{@RWSh#68uluG!>2KSkHd z@UK$trz84E!s*B2u#EsFdc0}xMM42io7-l6!DR9pJlBx@jZ37EkXA#bH;~CZs)-%_#fWX)AXU4PG zup~>{M!o4HYxyn(g3J1H~({*|Jx?kgh8@Xo`^yBUnWDY zAK^Y_Pj_XR95Uk>YZU^r`)SQ3%iNEMA^!V>L{{?By`vD~#(Zrfak**XDzUMi8fTZxLEi4CzUwMo~}R9!+Mdr=x*#6p|6~<%4O2alJ$gO1$`p%*Q6g@ z+WigmHncE^JtNg<4JA`t6qvDS0YNNKS>b(N!c8As@Mo14v`Nwo;%e=g@vc;Kk({gy zJUqNhekLzM$x)oiBNmDw;Vug{VDpE2P){(@##9+GxUN&j=2LXz9*2*xutI@4?5Nx@ z6%BeGV_pE6(il;tjZ*WTcThwm*7wT+(Huc>7&W{iT?M&8OV6}Qt|c-IpavI+nm`*d zo`BXjW^kNMC~Q)ZKkTcdqsfk_*LIaF;Uureck zpPSkFvfw)pV)3w)$=C$7G{UlVve#>evLpy61n%d1uGX`1%xnjp1_y%)TUeTThQSg& z)9)P`LH}4jo< zztp$7S|-zb>FJ}vC$C1$fpj!R)|WJ-@8+Drbf4~MV@mU2_J@(Ept{`sMl0KEKDgE= zQDkI`;Vki6_EE}pU4*0;-S!dg#8zWR5l;XgMy#EnMKrfg^jFWc+W(b+^Y^Z=t4f?K&&e_|0b z!zeZr3#5CCN^kw+)WwvKUd+sx6;LX_@kb;3Ii%<2sHA^ADQALrJg9K0>^=RSH6v~( zqsk-Uzka{k<}N5K7cj5;xwXGMyaW)#9|$B$k5UcxpmUZ9(0FybiwDJNxgK&9)7CF1 zMGbz+cwS{kV1I?OogSZ1G;E4aXjX(tXB87#C?jf;*%F%t52J?>Vv zrc=;8wN}|jTEioerX*V+%hV#6zl?|TLC}miHQNFM>EClX9p} z5rSD~Bo@pISgbW(wInh3FcB@LwmcjAW<`TZrEx$#3^FqdL-XyCw|)@Nn@h?P5(9xC zG|1Hji6ge?mx$SAe?o_#94j@Gl zBL9SZNbCEf265f#JN|eAl$K2t=(*|sl*3fg?1hQ5C;YH5wFRh#X;O(Op{OWk{%OtZ z)iZ-cRx}4DH4+o_k&AAt(8L#X4n&Ne=`R-V^oYKF<-3%nQ zOBrk}F4Yw%2x;!DJV=e*BHYkYZ!f`fe!4~4WvpO>pU8WDrshDfZ{T8&_Gn~Dy?-B4 zrp!IbtLKJG#$xoFbcf^9k^yaI4fX!SKCu6y;8zHe4~%%^D6eV z(We?cQxIi-wN1F9Ks1DDKJnJzP9+&0Y97@G&abg3sPx4}s(w+yfL`<4zU8DTJ0kGz zt&b{)!fTdm*lJ&w38h4*s7rbLUfd+trnOK<)ONiQOz8rzD2(2*ig*iqMM^jr3SiGD zqb|G0!g`G1DXh8S26vb#4ssE1_=HBt&8_1oG102`%D3Rx8NA@yixpX5Js4B%*0HzDt%D;jF( z{3EnhbR&Et#dk8>e zpbe#7f68xehKGI&P42JFX>{KocXQ74%{njkuQt!}`4BLm!o+5c?dx$f#W%EWH|3a* z8tSvbO*>b7vcGPCg4OE(U`Cx{_RVIuL$5Xb%1kOQ%ucfSC78R?%eJvQwI)dszMzlx@v-}}@+Jo%NBPUf!*OSUbAVWWD)>@{}Oz7U4N!(vPR zR1HvJQR3ji>(s@7Q$!)UF6%&jIUX8pYUO9wdBYf)eg!%LJszH_`%Uw(U+WP_3;Bl} z_2j6!T)#$5(9=#6Llm#4(JoCnb{R(6gc$qi6r}(KSaB#f(6*ETmyL|s+l1+#s1Q1_ zXk1||QGFsnQPeT;D=MHw2RLU@YY5(F`bLz&kAS}QVGrDB6<3cy9GkOG(q)vSvhYb& z3^y|{FJv{>NBG32$XM5K#n-<6$gmUWgCHk)f6AY}W#g%@XK!-Fai0j@=@NKGs{>DOLqY^#~=m zH?x8p^hh2`aOm>9!Y}l5K3#WEIPl;jt5nviO5Bf?kc@ercmDY|$ml#Sa^6vl<4oLtpVYYgp|rU*rh7|RQ4kG~WN8wAfC59=iU(jp&jA_8H^rEfI zvTi#B#7AuVPQfc>bbZJY3iGWtb}-0D&$aJgUaqt|R1TYIi@b6V&y%qVdA1sgXS^C( zkx$;CqRUgu^FNh<>YPjQ+jM`Ym~nb+*Uv$cHK3ZQJAB8 z94QCKt*nB}Uh_xfa{+YD0(~2fl>5lA_6%rM0&CUYXv4YN{Ht^?I!B}NWx%6nrrSwb zP$Y66?-3D3a*--K6JBZSW=B1@}{fLLkiVOCkO^X z&HfCmJD=xmr`#k^YNoUCFiHq6RJ2Wc@-X+gymV75NY zLj@9!Ydtq%KM8wiizU%A#f4fEl#DttvcivJq)suFW&gZj>-W+6ZrkWS>oTN-LLL4< zz+0TRmKDE68EckEWg=fZifFL@_=`IC?VrlW)g_^Dn++c7y1@a)Om{dh;$M_ zI=;Cc&(~-8;T1sxCNi?(F6d(~;#;1AN&ETGGy9ELZ!HGLj|l1vgOzjz;+nH8F7~+v z?~oSp7lw%`#LhjUCDGiNlYj!xGT=Z~7K{fWppkq_vbV78FJ(a?d?B20C)gGvBf8QR z0R-aGjAocoY{_)0`d_4d7}@UA_M3S(eE2w_N@aqWmOlPE%WB}YODy4g6iXU3k#B!6 zVziF771W2Mj@H8Us=)+aUgaCqzqMg!#E`Rx9YUT;V$UIclmw`)N-tkf(^Od}2ETR% z5l^qOdngw(qFgZKQ#%YN^c9P`_TdinPinT~oU~89JI7l6Ss$%4yD<}2-$y$!2{oJ* zS%NU5tK(26ahESyug|`-$SqajA@t_smbx=;#I`!vzPF`0n1r-u_@@f_t~`-WNLvEh z{C-gujA)e%sy4kgT0gf3tl zFZH(PdQFEVV+q%#Z5SCm?R_9<)2C6W&x+yak}%|dP52Exu;rdJ>%j#LgGTLS-84tz zp5T=XtTThqU;t=7{~~)y)uVzXPrcbxHieVeL^}945LOrQ=LA`T!343s(6E!}+(Sa5 zz;U9z$7rd~^qWeJmKnp*mEbYh!mMz5;oiTL?)&|usSXDm(G`jRPDv~fVbSxm=8FT7SmdldHN32!7ZfnK^gD5fdkh|pJoJjvzI?;4 z&tjr#liT2oT6iLjF-##aI9WB7xO{UMvGvV;nc!6U5G4KKga4MrBZ^& z>7}2)8B0>~1Jt4K9tO@k$PsJ8cX+Bn{%163hucM0itzCcfisLE`wm2J1J)40z#%w3 zZUTZM^W+nCilt^p6wkD{X1bvX&c>=keTm{)B#)vXnyGiHO6R^eTS5^%F=%FT9^*!A zc{|UtVE{(4`8*!K@}pY{cCS2NW4@_m-9Mok3f^GwfR9nCk}T=LlWJzig5+!1O&bO^ zHgSY2&FuX?T^k1jG?md_P4i_Z5w)Q#b45O(ROq|&`74!|sf%7R?!5l8P6r9*slj38 zy*hR%DKD>=8bom_vxEu9xUF%)PPnjv@rA~(Qp9BGGFtNruP}d_C}Ve!5wUn8L9WXh zm>gvOsc|o!bnrZgw- zdgEt9lC%`sLRdO0BTJRYQ?+o*o^>dP21(U5Tt`ELs|7{O{z&;k1qc-LAKUJPgmUQi zmJZ?h)2P_5j8;J7ES-Ati&fEWwixT#mnXtK4EA=7SHJwFp!N6`z6(nXqiNvO;mvCp z5hrqVQ_`1WfPMuO$8$haFAK2q5NG)X9&AXC=eh((6qx99xphki(+K&8|XVVBh5itry4dz%~Ro@a921fFO7`cDVrpcI2GEK;3c)`}JbD{G{j`mlk1 z`{!14gJwWR(q5Vof3$DNsxKOhkb#<~X*6rd6_2B%gW`D66Z zFa{H1I*@FknhJUJ>KS2B*HnQ~pz1Ka=KeAK{;dQ(9x#>N2t58lBe-&}v~7}%!yq>; z$s?^n##{xejx;d)niWYogl$eZ%^Iw6lFVHnW-t};lu zEORyf*z2()Q7zUJ&Oge z{AQ4$DnG)$QBIG@Q2lf(o&`Ru_@emc?&XYLKVtvnuG)2ws5K-KJG;}OHVu<}+x&XA^B=p^5kfW_2M6`Omtcions z*_R5nMZ5xpJ7wI;;e%h4uFcgj+o{ z>I^+~wC$tIuV(2FuiG+yBQ6ybP0sTB?wJtHnwDli+`rQIrj$%Ohc5DQlW zcT5WB0)(haN!Z6QTFW=9q7T-|v!MzKbO#YC4%yz#w?-L(u>5hEb5C>c&=zT0gp8c= zNb~gl)lQP28iwPgRvR5s8nJiKYWH8rm^#-EX01+MUkW}5Ca{hZ6yW34^W+wmk<9cO zC5gGR5c(K#OZt=4P4(F?23NA|y4$l_2sV5%-ZzL47@CIUo2A=r4_rNFFI1|V9Sc)0 zyIPB)J6JDAn#tXcnHuK{#VN|VX(FMN7T>ssm0!;i*l_WNTQioIAS;&arF2L+n8G<@ z=@MI@d8QsS`67SU{XZwoFHOj4YxlRma>W-ws@3ssv;m)&&`_n4 zQ4C)sLe=0TE+zc7aj1nAtuD}q@xR>OoKeUIlB>Yd7+(eaWpWNvc#0lgjlk@Qn6xDZ zct5>#OI*&8d5zE$w5rQdk4`K8eON_3=B!IONcQoc=}aVdb(OIzKyMEw0$Twc3E1XhC+Fb+n3#3GTyKL+KQ*AI_v= z&SuUO&={yN;LDWpZh87Dk+c`LN>Th`kt*5a7hq|w88?;O+Dq7ombAt`t12YD(_B7C zTsI$6^H)7WqG4rudN30_ORH;oL@tvV2SaP|HfOh(IEPksePd%@Oz37T7!NysmXD7! z9z@(R$^KVu!reI(x8_k`(YIfyV39|~@D35^i!>=?x!Y8BH2nE^x1BAyw8z=4s9scH z2Hs>qDmELi*wkdXo8jydlyBNGR#EdIh z@!A&%F#v8LwEV*QG7g)@V5<7s_{MrL=uZp6jqhAjl;qYW`8*``0&ihCHnbENoExy`iMjgwbSr{Sk2i;H?tp6}8O)U>= z{ei>bat3iuPQey3J6xRX^UXgVBhMdSyV!iYxi1$k7JMC#P+(h<{vyjCRy8bF-q2 zoZNC_*a;Jx3Y+n=t4XtMxhh`kBEFY9z^wMXyv4a-p;&Je)Ke&mNI_ar-%8G!#;-@# zh{aj&4%Nws@+3)5GE3~m&mfD7O2+CwEk0M%hLAcG{&U9`2LIe@Xew!B+OOlKi7OWnEO^NUPbBjH%x#pt$f2|@DmnC#OvR4iG|x1 zF@F1B&(p~(>c#m6=7#B6Mn$SSD+2>`Rurq<#|@cO36!_HebBV;`azp<wz)qEgTkzTTts=1I4t}pdhd{QUBFZ4Tjz64?2F%8pdUB6{jqVTa4___jHVMuNc zXziPd@pzC$GI@BJnV$)rb|CqjG$7ubeYQ~Elxc0$?xVei_wqh=(bW15UgWW6WB&al zLv+Yn1{9PSj#6mYS=&PMbtvt{3BKS9S-Y)z|_CGW}8+E*%mIa=0-ks$R7e zZdD55poQR>`iCUJ5R=~{MWp2tWW zrmC8nX;0eA_yVrr1?DZL6Pro{z+!2xQ5n>;cZ*Fu{L4Oj|NajoRbW{~a&|Tk%-q%t z9`?sD%VTVrePhhkONhFUJYKYN^whNcXxuHNm;yIx>C&gIZe+>wVJkdK=3~}1J_JYM z`=wTHY8-~E8rrht+|x4X4wHBqa=zT~s{M~sMmp_KLHmYQb%Iw&pBzk#YlKKt#6>|E zn02H(^--t^P_+Yz;{?PDis%xYl-Y|%#@i{yh&md+lWU%44KHRiK*Ufi-D{!B#d{QQ zJy~^lk;Qw3_Rn*%;-6eD5=5sPYKfJ8apQZ)O%ERH#|kKbVyn8#uE2;$m*{gBJ}x~m z?>{_F0SmtgVt7M==v`_E4+f-l2g61B4tCput+;9XbS4rT&5nW(wWS5TPu>OH;%4xe zhHOi!Yr|!Y&Mm!9NGelDWLfI~3SJh&2fWAf`dTMxk|K(>L*D=to`4{E7cI-)Iy!7O z;t-JR%Gh8t?fkxx1z25NBK^iqIv+r4rS-xmu8B&|Bz(3~_83#Y321n?+VE&8muP_l z4lo-8biK-nRy~$WU6oo&Zi6qTXagqfx@CcjVXk?(2$)`rb}L);$|Dyb$W439`F2d3 z4;*=jj$*b1z_3IzjjvT73^J+)(jes9y~r>Oiw|+7g>Ys<309X3UePPzfFLA>$3@7Iz8~JHWYhtmpkQO zxb(@H7oM^GJ}(?L{=6T?BZj1K$W!x}moEJLv1#1XDdXCPff<`tshrFDL=kqp@fqc> zDV3pGhLERUa&7(yqI&gbc_sVSo8`Id$1 zwYhG_G1-WMAMp%WJ8Q513J11^N6vVH_vEGyJ!W6^{CZ8yI>rjh-aC7RGTzI^{Y95L z4LZEan%nDk6!Vpy`(b6@*V7s4Un2pfn-d8G&mz{Nxjj9JVt`PNV?W{;0Xkxphb~Ly zO0+jD{89WU^Ukq%;^cm$&^8rR%VpdVv+9l3Lq7X|m1wAGdYK+Ww|C&pXNea&QvvD{ z{nfNI#MJboZEcUG_!&rG^^~teb1LSm^Llbf;>Y!Yjt^)jmWmQ2-$t?5|$~h@3XJ^+U zurYII7SsiWK?*1y6!X~@hlU*^0arSExOZS>+{Hq>eq;Eab&0N4C*a(^NZg>I2S4#? z9nVcux4o4`$(3r`*XVf<7LKS@(rdJ4W7}Q4%wI{V7Mf#y)tS1_js2i}tDBg{+PV-O zyn+>V4Y~UBERp!vL+?UYojamP!xxa;i*K~hmN#!O-g2hq^wXIN!v2>mO@0D{T%G@F z%I!!7MLHv3u2B3revK_52X*)P{UUmC=6T(dUW=b6jyuf{NREv!Ik?4kTh**uXfMQ( zRC=L!t*3txHr#4$6)<|2ZW)=&w`fsrj15?3D$TpDDIFY8>=tz-FQ`*=?V*0Ima8dD z6WaVCV)2q&>M?RKC4ArAN~Jw#=DsYvoLf&_YTGdGfaddvk8{QharUCV<_8Z(GpK)M z9bY_CLAgRlmwC;V_SoW4QoCMks7*9I2Ou9s5zCqb7BA}9U{O><;ULi9 z0iBvoNT?D2d_&H5%Ch|nDL1JIu9f&Q~2NdjKT47DXBMl*b#gG}gvWOkWZV(l({^wvkDwGy|H;rfHtXZyk66|xP zV2rdkSSVFD{bJF71REA~*D@FbmP*L?8UyTb{8nLrz-oRY%>Q{my69w-`!G z{c#G9$NEnNN7!afnb2#6f?8gXvjmxCZ%!ZDX(AST6dmOD`h+(>ppO&MG7s1OYsnlT z-vo+SPlpT7h^vLs9GEmADH`rJp2mdyiXH(&`=UwM9EHnJ)4utltO``urwm?3)#Abi*fz5}I^j47n(}1zuZE8zU)yh3|a=P-@R0 zSN;S8!6HegA+M$DMtx4iKPXaZ2H)_2*{gO!2gw91KM376I)8v~*WSveE3tLqGsrBW z*|O$`tbKD4u2Cz0yscO4=fo7cd*U-1Xk=$C7z=?~9ikDps=~G!?`q=}p!<0IAqLZS z<@h=vI#gt81e1k5!6cJK1+*U?2US20_`^(dMro*-0fddh(Rw(M(0!na(jDb$>C#XtDd0jT{i-U+`s+U2xu+ykw;+z9H$o zw{`CT!blyjw#U(exu!IMfG&TF6CH${zvlkP+d&IQ1t^=?p*Wkz!~hwNIoNSv%}OB6 zP&8mv@<55wP2IrJbYj6UYnYmy8M;u}##xWt6jCm-1$&tEQV^ZMRa66p9zrp(`(M1d zKx+QRu+r_fK?!{=ybJ$~{M?+ujM5eRSEM<5kh#&7%$8o{5DRo~4wFNCd{dUihUE&_ zi8vths8`V(+`)-+#oe|a)PFaRg2#f$mrT0{=0~D~8o@a^l)s0#WM;!+oxJd8@32j4 zyQ1+W3|rDfwGX^E}|HUo!>M{z6y zp!3@)=>j9S>SA=F8+{zl3PYhx>htI)8{&)`u{4I;r)0RdVnL0^B*f>lD`)ga_kCA4+{j2DS0cyG=YSNqYCwCg7xz#R3U1 zIHY)IVpFvGy-z(Ip2yCR!#M_Um6_SR9ya#~YSq~qar--RUh%SovKr|c6-tBFu4oL; zBXRP~&0SNuj~+KBc!<&nJNa6yU@9LF=Q4S%)=~7f%hY@s__huXsCaneGn9932~E2D zYcA!hh;a&hrJ!=zbk2eA2%!aj`3@r#X~@Po#HubptOZ=;?RH5Dmd>iH66|eeZwC># zw-_I9W$12p)Qkv8t6Y~T@1rRNz-nlD?qHh`X4g2H^-TbeR*7?CXmOj-xsY*H4*cRC!S1 zr@F>P7T*-hx8a&tK7FRR`gc&?`Zin4ywZOfFxWH=2RO%hc#*mft~tLz!9x*z_CNPM z7z5mz_J@h`PVFZmNh-4Bc-L^Q>-~=PrEX0C1d5cBoL3E_s>`KCR`(=BeREQd5ck@I zoo(+cY7FyFaVCsMZ7e$K70evRf8x4eBuI}1I%H78qxbQ%u}#zY`u z3i_mUN^)~|-8sI!ela+}nX~eA=hxBPK1NyXgVzCNvOhhHul0p%Y-^dgDx-%g3;vxP z9$zatu>)c7A3MxPkFZYwQUo?+l%NrU7u;_CNqmA6tb%o{)?&=&hc|s5p=3RJla80= z+tvv~-jd$;DZPhUtuJPYrQlx3I|CUCpMGq7!{L#I2EgXjA3S~Dvg8$KE*_6@9-KGW%^JI?qm5HYs~c)(=Q}qVqf<7+GJ_*UexLnu%u?B5Jvvnx37%DORXN!>*wjwYw9*HmK8M9O$adFHpZj=;UicN2?j{j~T z^l{qP-L9~;^nR@{8~VB)E@ee2(mr~D3}mteKR$h=tHkobn=M>DjiC=bF)7}c3u8ek z1GovNDN1;dOgYrv=H-8DSPUxcvpc^JUGt*jbU7k12t z6S@eDpc zV#Pq%Hp_VmQgh?%Mw)@8q?N97M-Q5#J~CJ}#EV4nINpA@%#=2gXYPje$D)-PT*t~W^Krs;q`Hx)4A732R6(FyFIfRAeAhod!nwOY;kTVan`l>ZrD-aeU^JGB? z6>;T~;2V0b(?KIFMk+-0Z5Y`!q)9lzo4U^?(D~zEJOeF}{ujJ?c`TRORvXCJ7O+4M z_6t5b0M_vyOHi?s9!LWT4~ENt@JzN&@A9Hg=J#No~r8b9e%}H!#U80@y*PaC-|5Kp*<86`H z2>}y0$FOFNavHey=Li6SoGPEeo_VcG05!s~;r0g8q8qkH1Uy*~vGx8E2zjcg1DyeB zG3=n15<3~R5D4%#L(qZT?lT5~@~Xc&@mnN4M`V$)UPI_&>Hl?uSDs)dMLVaXl>;YP zBT3BUqs&O1A%=MxU`uo52km0~)sXCadkn$1c z(`t^}8c!_kqib5J44X(!3ZAGXFStsaYI%WBR$N&40|W|Ew!Q0hyfu+xZ9@O01d;EYZ09wj;Tw@#Cn@V=NraH zyak2}uMA_^q-k<(4HIvE9}!|o%KsWwh#^nOE-dU!>3Ohcz_;gSTYqH}xs!x9ef@g zc~?4HH=cj>nnYOul8|^1b?thn5B$bQ#;DcG%qd(#ur;ZPVRC!v`GVoSh#NWr`=yu_2lk-OxDQOBDbYf8#O zGMNB47l2#x;)JQnnWhanwLQt;t7g>6e`7h**TN!k9b(=E!QXF5ESl+5b=Yvzh1~LK z&e=r~7pY65uWKjr2a2apfbI8vC4EayOr{17I~K_TQ`|0s-I zJ{5iWW}J3`h{MiOXn7g4YcVJv5p0fsOy}|JZS?Mi<1ZjsxQif2PyoN<3u(5FXg znO|dQqjwBMa2K6AF5g?@rcS=3WEW6W++^Gj+$AK0+34tJ3}3gc-vbPgaR5faor`fq zCEFjV&Pem}SIFBm*5rHDTe?%@=H+n?QgO&$`agGu4@48h#g?xjsELFY4VgmiP&Dj; zB5PM>8&TPQUBBi~?u-m^Y{XFjGb{xW{}vs8&PO?!dt~=>k>p6Z+H;v!a)5PTzJ;#c zJk0?gY~=oA7feao3AwI{cVEJfH7UNZ9+pC72@Fd7j!9UYykwd`rpR zr8zf=T1d8Lxq3Itx2Uh2%vkk6d9Mgesa9L^efQnrACk)~$b)QHJtARYMigkbEvlUl z^JUoMI#C;^J9vGvKlMQwjavYbL6_>v z{`uQLR3}E}z{TB|8c~uj3tULWqSM#lTAQZ#R}iSl&K{-Kd4AjT-^))OOnf{?&kEy; zBvkT)V%|*^9Oh9CeciZJ?&1dml{-EkHqc{DNr#lV;hA->X5+4{VsDTq-H&8o!F~v>={|83J6M)?IHg0a-#an9k+}rom!j{9((Q3t zQ<#5H@be=pY}P4h=~VWZAMC|Q;%yLYKNn91g)uzy4YdTNgivst67%R8{ot$oP z;3s@3Mhu&_{_6XfP=>uNNd6jXupoosK2qMR^&x3RVJ=$coqPf~HRXMg*R7J~ri$GN?G$PDG)!VUNRv1VBc@oBt-xh=#z!JO{9}hyzpU|0q$v zx=eprl~s$5gX>fF(9XnDpK_uk?2rcDTaC33-pBR1($ae}uivlXG67^@m; zvP3^E!xz9aMQXZXE1eQt7*9!`irpZ^!SC^M7jAY^$YvLP({tU@%WsRoc;Vbq5KH$` z^VPsmFu%cFaEWo1=w7m+&%1hQOP*@unaTeY<9cmC(YuR^RA9qXx{zT$OoLNWx;e|c|*@3~q2e%%&yw=HxSz?V=I z2UApWgy-tNQFw z;SmGHm3iXX36Emr>yYOZt zv_DgrgfBlfYGksaN7CT=#$&BZ+?6Td*3qP|XR*n!Pg;f)xsa8tgPNKr(8bb|^v}MV z@Cw%6lQ`Ek4($-gV$%EkHemy#;JFY7QuF^5 zetiN~!b^DkD!_X8+u$*_dy&e`R3rgTX*w(k=*P36k14I{D6&`NL;Dl00f~T9l__E&ferAg zQt{&xX?Y@|BfCmjpk@W7+!VPtze$hbai_R&ezT56)Y^4wN%5kR+Wl`dIwL0h*e`a} zLHQB+{u^l^-Jk>bquahxuzAAr_B)H4Yo8u228i~-8&o|o()hFc*yt{-{qBUP<++CI z^SRVRPfe=6xZwpdeU|b!8i-!WjXU*nE4cjq;!0}yKywdoCN;z%YUY8T4hVk=;ujuj>ESeI`TTF;zdxnY$+i$|({~@v7g%*X$zJ~_u zy6I%#>k%ivkAU7z_*|PKTwoUT5Hj>G4C2sWe3AWQrbD^Ct=_hbkQ);4Qq2#Wt@ozv zTxgCP;*+wyqjHI^C|U8NEO!!TG7XE>qGaEKQtqo`(UZ-T;|$cM%f$4-qjxmOWP?K_ zzAck-sx&$4ye=%6Q;d2L-*ZQdl@nN%FEtYT_b`#TC_1ewvrX5|72{wN4>$ZBnT0%| z)j0Qag##R^9}nWp&(6vtyU~b(Y(bW)t)N_WhvuCT%(OI0^mvdP!oNU+gDlyk#wC8L z-6!#VV>|;>U?b1)QCmKDWuwxR#!wsik;G{yWvdESs?9w3eVs?wDhqyHj8#uvx#1S# z@Cw2!B|7kL<cm>`^zKoGFjAXp^Tr#lX4bd4wBI}fr3EqK}bt5zK=mzBT9>3 z(A{!v0~`I`Rs>oBT=5hK_8oCeiPHZohVo)zsT;vla~;=qOL2sQqKrYjz^}Tr!`zt| z{s1@0sn$qrXF+s$0ZV2}!GYy>zY&VWS2QS~0esq;I;R#(xrcf#Kf2kxy-h`W+yg${ zR{iRN=8LF;LsxkQwEh2js+wHPe`gueo>(Htw5#@o?oM@B`Z$4wq2ttxiZ34KLQh$0 z?}_S-C}lC!Y^6Zrse;+1@;N_KK60STa54U3bpwE@ly*Pj!y>!F>Y9(cSi-Al-Iy8X z+6TWh)y7%xIEwnY1}oH(FNZtASD)&&G>#j~?kinCe~=<+kGqOH_Qoqn_2*x*y)r>e z&n2shht^L+6@;BK3pkjVc`2ga=(~@EMg|vI7+%?#YbV8SZSFPI_Qe_%3pt^SEZ)}g zDkH2J*;ydP+7wx^T5@k!zSxBI|2}eI9j0n?ZD#EN*%Vu5MvW}ID->Z_e8$KBCE`UB zRioi;gyX40WM723mdG7e^kPq_z&F`v>y^cC$^vmdayF>`F?AJV(PgX9Xli(haj!R= zfbS|wqKVMVFz(0jlEFuNEdt*5V+COhCRy{}E3TdRNa%Y_1=oq98UW>w^t~1Gl-(x$;KVn7srW7J z`zSwzed}|uorWA8k{=0y5VOfkj{CjC_)3sdOY)ZNJ4O@L-!&!2dr)w(!Pwu2wz)4@ z4y4pkodKfQA3bujOZwdQXhK~e5ro(UA!@KW2@olJERTk!tpPj9FQt@77F!r#h`>%I zAcD&q2)jY!BFNOT1*Jp)Q%Ikd&R$rEyv}7kKEqi5V8UV32(rfgXOcv#=ssrPbXvwm zpFpO#EQ_GTG?E_YIE!B|^%H&~ICP0ASe!w3v(_P0Xce-A!{daW;2`po%1A&^uM`~y21196^Yzpx%TtBtx zZLzjZ22hulFW0)Fvrlq0M8dP}Xthja{z=OV52O&cVA*{upkVe}VH-XLA)vetA!y7Z`&qlTLJ@1lUfa{KL z%7E%T;!lG?|9tF_DfB4qnn(A+D3&kPahU2XPvTr33ya73^;d4%JHZS!ryKFcCANM? zlhf6(lH-(G%1*ROLaDu@9#(iwU}_u%Ai$!voEdnpz9?i+3$~U{065k*`1!sTP6t!M z1^E7H@|meYI%wM<97%(F6RON(^mu+PKMU)H3MO+yk_vt2$jr2dvM;+NI^yrsdQq_e z+l}V`5I!_Gj&kr$;TY8pY9j9GL6NH&(DFTt*#rPy)xK>UYJL;erh!$CiUA*`8H$Kz z9S!y5uE7PTS@R!lnp*X@`lO*MdN>LQRK`1$!lBz$DLKOPV+!3o+zIOMH%bEylQv)E z{)Enu95tV+-Z~Xs$Fo{Z?{={PDAFCn+Qv*M;OVC*Ym4{x!@(ey{X__a$Q7%By-2hl zsr)^g84Bu_zGjr&#~TY48PN&)=@50NFMuaP6vE*J z`}?YqfK6b3_iM)8P0RM?EvYL*Wd)hNlBbUiz8m(NHe$X}iz3y*6Yl>*vKYq{`ajM

UiX7~OnD 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 R$r$k{4r>~ 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 literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Automatic/Registration/0001Right_Iris.iso b/apitest/resource/Profile/Automatic/Registration/0001Right_Iris.iso new file mode 100644 index 0000000000000000000000000000000000000000..72bb495bfbafc72a80489936f688ef8832ebdd13 GIT binary patch literal 51948 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 E*%ssR?EnA( literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Automatic/Registration/0001Right_Little.iso b/apitest/resource/Profile/Automatic/Registration/0001Right_Little.iso new file mode 100644 index 0000000000000000000000000000000000000000..6b3badf299c9a42b3bd35e1163e451f453c6ef82 GIT binary patch literal 81884 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 z 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 literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Automatic/Registration/0001Right_Middle.iso b/apitest/resource/Profile/Automatic/Registration/0001Right_Middle.iso new file mode 100644 index 0000000000000000000000000000000000000000..0fa2255975c69cb22b9731def27ef0a69a5a15a7 GIT binary patch literal 63941 zcmY&;Q*ZQHhO+qP}n?$b6;+qP|=wrzLM{b%N3CP`&yXYH!2COKQ^}oq~ z)Bn$bAb@~=O#vhTAQ5LXBUcA!ZbE4z7ezB?LUl7|7b^#QLMD1HMn-z3|3ruYATfIr zDN$|-WnooDre9?MEC3h)1posD1pxi(0#F16B_$RA-|?FW_@CPX-emt1r0n7#LaCm5 zjB#MbUpro=iG@~Kbl>eRsky0xXuYGHm<)K3e8`VVebek$Gyh$7McE|}vv7)qWWCzymOfIR!M{xVpmzTV_KI^^itjW9X;P#g^!YyLdE!gku?6wM zqCxn;$n1mltGUI>&(#C#e|NaizKr8uG68(uDQG5xH4KTTahqI!#RWcM41Xq**w&p1 zYUyf8_iA}-Qo2;s5X`cIxGaiKPqx4qOXWQmLpUx9D4&qMJ!<^5j zH(!(2X+`lqFHVS{iih`nc|y>A(-3K?3O)CHdx;~xiz6jdL0AYtvbV?YWS)RJy>2UR zcu*D+yBKNy4xus<6JpHIN^8NQoFXe=Q=45Jy)Zf@#@~fBFKDhBX%2MHf{0hqd)Z|m1T+a7|u}!z|O7HFm4CGhl6zH1mUKFhtb! zr+f~|u)Zx*ZQ@NXF8FpPrIqsbZ%iQEGJ5riKK?xeHPc&Mvp@NJ%+_>NWo2NQt+7m(xT~L23%g8Bt?Ga?RuojXb3A;*m-T zVadpk7#hAhzZi0Q_Q6pk6geR&SU3(N#eh}RjV#40$-q^^%}PKZ zPtoZU(-u^uWxb3o5O*Q#@@X&)kwhnP#*b_rT$GnmKkZ?M8K+WcX?%rUY8{Y(Rs-RW zU}f7h9HKr?=-%IKBi9u_M^NE;2GQ~0z#x8ODo|OUWJijyH)e&YRzMLh4u0PIFaUXC zh3&b6B+K`>fOvlut^@Tn_T!m?IOg(14_YJTQ;>$Mw0qYQc2=4;6cOS5sD9;|w|`@? zo0W}P0Az&lBUXxP?q^TYac6jqpgMtzCdNB;OTF8Y*oPQkWR}sdj-=ft=@vkphOLsf zh?%5uHpKI5X#Td6K8*j%U(P+BWhUp)Hd16P>AGF^F3=-ly%Q1}{X zDVUC3kxDKSnSd)7YqA9ACnw1~jphXUP_CT%0u8R*r-K6Zbau#s6aTH)M6id5H4T#a z4&|qVT3nTwz;2k^Hv?;hM6hTo+Ni^fFub~Pt}9G7jWpj

E1yj&kW}CwAf3F)x#; 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 saqvY3ag{Es%s zg~*cHKNsIrPoaeM3RGC!JKGQ5Qaxfq3~7#AnXmoWUy;L^Ov0 zV&J75=VJ5zi|=KudDu(H7R`z9))C6QA9UZr@Ec-^!Px0qIHUS4dXj_1gulVGd<;En z+l-PjaJca_7D)YePdp#SX#{87fCtO_6%rW+-@90-AHtD2J;>qLi$t0t8(z#fX8t;@ z!kkzl@%5H??PXGrm|J{&iKt@|dFcYHgQO_}6dbSm8N9!}2r+MI#6U(!e@FA~yBU(! zc>37_sZTihfP~F7m0q3vsQSCklrW<{K1JBeKTQO<`0bDxp1GDfD;iZodkcFi=|%?O zSOmNmS908;+x-w4d@-pX>cf^HzzqF^(sHq07=qd^Rxr3GvxZdP&kcY*1O=SNg%9BKC=q>F zhti1#XBuw+mfgz}n!5tXX*}CX)}nRBTClkyU@T`I^Q?#rv+y(Dt`V_L79sw@kc!x> zMB;Yob55ZxDoY>r`*Gbwca7A_o2W_qA;yYb$h+)~Q|YR0Lzjc(c|){u(!c^o$zZ;$ zWJV|#oU5)i4u5m12!T$p(c3$X4(qpLadbpC(!53qC6@m&6B+I#J7LjU~v}tD2H3Gn+~Yze+6;B=+lCWO$wVp2>?&m z&EAKr(cXc$Ah+tB2!QyW23b>;uMzKy#FyRygUOyFw;UYd99YfcV60$;U@ai2OEvw1 z0c{H>DLF%7L2Q9MP>qPMQ^CD|nsFTM1*VIZX?pf?$F53E#$6O7l}p$cAv(`w>l*wU z44IRj7mA!@f>5I{>c1oadD-tdVE4Bu2ua0lLm5U1SXhNxsKPO|H@`naPKbMKWYv#j zl8UDtIQcr;gQeV^K`C(WUXRTHeg2^KBX4;N>r4W|`xXJdrRow@`7s^ee2Vy}O+79z7Pv9gn1C6UscpXj zt!%!*@RZ-_n(=|Q*&FeS8;fb$9_kQk`u%5)ML+{(OQvRVXogIv_|*)HwKi`voy=O| zW947}>IovC9U!L5TPyHqkfY4%wiVtB=JF+mzn;#km$33~kZm*Ahx;tepQ&Z1 z-g%PHMnTehIpcqMd_np}$~wZ9wXqo6fnvlK}S>w;+iR3N%35<0+GzXtTB3ILs~P)le%=Zq9tmCflXn@y!Q6c^Ky zj+Knx-yV@3wf%Sy;oXSv#!D|W=jFCZ3-k&WLR5j&s5V0B%ogECjs>TXRR%v^SVWdM zo@YTNMPU0u+zy;IKYiR;6GFKD4LO({abm4|_}2EshiN7Wt-1RY@GhOc`AlaX-B|MCzI{)>4+`I2 zyPIxoE+<9l56ae(Ri!u@!n$V-eU}VcIK1Ff){o(`!Vxe_6V>+ad$9DEO2+Hm z?D>u)nqu3!^Bd{t9V}Kb_L6!J9Or5wpX=?(qrzCpkGw}lx2rbVLW7BDcbRD2yA6gp zd^cp$QcyIs{==8GTy~)0f6EBJG#!Hx)SoJr%U;)k|eKG7Hc*AY71_n zRpfu7dLm@g!LJi-jQixZ-Yhjg*K>nM{7=fz{}kUn!PdS2t5{Yjf=kWQ^kta}EeiO%Qk9xVH%gBEt3Wg=KFj#ti{gTR9IP=Jol25|4Y?W={r1hdjr4?M$5(!(D z!aD?St_H~O7Wnj!>wvyeKpYuyX>#4sp61ouM;i2{BC~7+p{e&=#vH7fZKeCWa*;<- z9>sv=1}eT#=qcP5kgAv$IZF9r)Ahf%(d?S+}ubFd0`C0uNkX06MwdpUEC{s}x+BvzrG zyMQRNdbOrY`5RbUjbssQ1P#%O8RjEe`PVW@rC$z3a?B(mOYQD5M3{rtFDWwtY0iI% zRCk^A3Mj7@o*G?`^>;p+ada@?!;*z@GhNnmWFXy)c?GSMIUfw_He$)54kycfza)^u zzohYNv)&W9Igl*fqV08wWxTWej3p+xgtyKZ62vli@(wj%bVu zJ%>8rvhl2(8*f!E_0$~oAq+8W94`0ue3zmjC)y#a2{YzkNZCnOLn-+iGXF~Bqs|zb zdGuhr`?gV2BU{5!xN?WbNt$CoBK9Dzll=nBy78+9BY>)<99|2j#7c(0) zKkh+To?~%-*ku{Ky3O?56J1$`3=fzMA1#+%ULYrQ>aJd;Xo?-XQ*Np&vtA;!SDsPW zcgQ=8*lapF5bx6;{4}TPl4HMe9{X08O{}IGEF@Q8y=}1iYRH}O-hocM>K{~$@x$q% z7iVZWNyMJ2+Ojd}OreXQO9K5`sVz>v-plr8ZxBTljUMrDINq(0G+r$4K@nFUZ&zXO zzx+TR;_gp#MVU%>NtFRjRYZ&s;`mu&yK13R->>CHnl+hM(JHU}m#Y6ecD#MXmNWW{ z(N@e3niF5GEOo?27Jt5pmoiWlcwYB}=socDt{0?E=qm<52uQrls{1^37YZ_wqPqw+kymSfWF44PSUla@!8!3uoJw^ zg`)jpPe@SiA0aAQPjs3a%!gC|O92TdU!|^nNP$-7NWVI~8rf^cQoZ%>RLGmt?#i<{ z5I-TD$GtYv!qV)*ozOAh3~1G*ky(ge++x$E4n9(MuMTT4@JP`VNfdv%sb35;_nN&H z%604tZ6G83i@n|8N#7Q@8H_6D!5ov;|3Ger&0=cz@NV^0xx2Au2I_`V)Tf;Pfto>R z^RDID>&j?AMvPN(H;Z8|DQk$Ad8&YWJUb1KvZY!E`}=Ev@5Q4s{4z)Dfq@ z%#T6?;plYCA5^FiajSN!SJch|z9>+-f6xW-$*V(S)|5?h7f9s~Z7kOVaf7n>*O(aM z!h&I8m-i=lI*YhAb%$+9ZRyDte4DW|B7>Xd01&WyeQ(5D~f#>5PSW} zj@ypdqsS2xX)Tz{*n*{JN#)O*t3 zzOI4#<^gNOst*^~oK8ruw3`pW8W~L4c+6VnaW$UI@P0-7#MU(xlA(94pnXGRQAxmP0hA$TX*Uwe7qkQnIVLrULgq~fs`f6L?&=Y~GcoT^EV4xRU z`suCYjlHHxXnm9%a$u?~PZvsAz$tn22+tNhn;2k_0EF(uY#h<=9tX~6T{x2eV>U@H zKV3|umNuUS#w{mvcC3YFK1RE?SZyPeWX*=B=I8si_8lc=a>|`#$=^+OK12b0W&%f_ zDXrMm)e%ot+Q*$42)mvEyQXzHbA+b{%JSjXA2zX;;2hso*>1vkNOvPl==J2b!lG9( zuJrc`-BxMLmkn8`tn>4PB(T*F%_DHPBt!DdD5CbI3?J39zfFep6zpfns~Cm} z^A)%DbPJ_H2Xy{*pP{fgy{H%cE;5EC7`GTdoPFW; ze}##tyBMIyM@v4VR~7$)`L-IU@r-U{(jS}h|B_g`to4j~N>`L8XRx$hni?8A!)8u+ zDQ4lE@d};w7SK(naGxrX-lE7*CGBAbdw+={*KED{PD&y?s(M%}W)<0#ElE?+uh zFYc8WGG` zDu@m9_Wp<|xx*}j!~y3Lf+h9(W7oO$L%Sv!m2rG2)DJpek)`{(k{K@upc*e)vIzE) zhp9KO=X4Nbpl+9jGGREbOMLYqfvhnxr;y{}K%dYdyi`+~E0+hMZqLf>qhW?P3lBHyY4j1p3b62_7c5j!5(HQEx$Z+K zKFy?blOgz{&aqXS4Y>)TW$9MT7>g~wi0Jl_F}AEPYq_x$R4Ggqrb0TiWpeQVUTnKjNF8pKa!(r&;>5+yJ;fWdOm0ijg+HO`Ry0{AW-rliRqe>$;t9eKiuDz0IG zRMWHH%Po)+6X|H*kui_4rU=M^$iMC9uh;YtTM|N7n+TV?|I|u)S;Mezi{WDtDGhl2 z3=&^d)%rxxzfFxEGJdJzOXL@7>obfMyQ z_8k9QW#>->OgLzl?K0ozCRU4}@m^aT{^@7k5r7+dlEqqT@jwADP@Qjmdj6+1=2ZD; zNs#50F`IxAfHlxqt8gGy1+SPbL(^j?pFY?VJR za6yR^V?(v$SOCsf7nAtFesWJ>f>9u$Z2NOe`bYHa>8|S8D)EZ3!Tv}Y3|de4{?cen zq<5%#bN4=m2Z-5LxqRKagruk<4)}S1ysL?UIYio|GX9F_h|rrY1a!7_0Z5~#wXu%` zqGyY*a2wVP4;54Wo|EuQAoH#e#-A&&*Q~JZz^uhA8Qr72g}pmci^3WfuCrosDD|SJ zJKw`j1ENQ6o-{~k+}R&s!spugf){~LV5D#@&hc^E`wk6U*Vd_4y>8rE6=jdWiQqz20}7#uYE1c}P*$q3%x>Atv;_)6BCd&b8yvF;0V@dU=FZdXKDN zO2j5BA4|}LaX(1IaMuCc@%U+%?k{$JF5#-$)Y+W&eYQ>)ukFIUe)iu#B1pZ=da`_( zB}~hj5}diwZhY{@p6Lb{pvDW&>Ca}p?5R-wud(pxK~r@TKL8)y!dV~YgX0@rIgLIJ zaLhvaY~+e5xitgLWepmW($%hJ$#FkmrNZ4qCirOl!j(Dw+MN3hriq6hgDRoavmE=f zz_9ikn%H3Vj1MKHaHf5LI8cC(v+p8f3p{vOL8NSARRU}JPGMH4vWT9i80kixo!LkJ zE{{@Y&8m?{Tp(D%X1q|zafdJH`7P4>-Y<&_X=Ex2JS%NQ6kIaqTf5WKja8dj%Q?cO+M4&3m)|< zK^$>cT}HdqO(&!pE>0ddXiH0cPOk;dB72-?^*WCKZ7bfe4RB1e<+pgH0!Qs^^)C=^_8xD|G6=hVQ&#u| zu-Q4PMl#K0jBcwu z4-z$YxM{VTq4uZ=#Sw#|6z{bE@Xm)S+-6JK@-P1@)YBATVij~^rSix;DX2(~m6|Sj z>52V!T7aonDT5X1ZY`}JnAv>eeFZ~rJ1=1K!$91R!|EDcIRQ|2I5 zWI74~I%G|XU*33hTs#Ii*#c`hiRZMYZG|UR$v2#d+lrZ{4L|55uUe#91m*sr!s&0Z zr~UfNqq=peJ5-l%2+03&Uq6cwI~MQ?f{w7-%#1Y2%tUY-p|bJeG??rJ&$Hg)u-V8q zX!2+Jp>~xSF=*1bMwY4KjW9Mle`#fOvam-i=Ux9Gkw#M4O86OU^?%0=DLBY>A2(kNP_-NFWo6Y)TL(u+mMjATq=}8{!D#o#! z)~5=J1ruVetX0tRN3f;W+m7-S%m@8u>_!-?yL_2$ySCt$5w+lPt-ygTQNTUYG|iq$ zP!$}_RSwJ?EGw{DZcut+S!|&co@j-I-&FvcHzZY;$~nR3sUf4|=6#;u%$mUEHSdSx zBHinkgKss$|E$Gu+WTet(*a8zN|Q$;PtxK&JjrOs9LtNdCm)DMdXe44zaE)%5UNm- z{#iDg@0{S20Dn-P`wcB+-jwFZz`t$XiH`cf;tRRoT-t*0c%(jD7xI!mA-+@ouAeOL;b`(skua<{rGWP^e&UR~?_WM!gh>aam5ghxHVh?DQ9 zMml0uimZ6>j434boQ$Hu2Q6sug>}lb;mAfgkzGM9zI@KyO^)C9zxN+}ni1WDfh|B^ zh4b>ve(~X<+H{KsH*r7qrpHqI^N93JeaC0;G^mNhm0qs4(b2X|Cle451~I$yvjAc& zgyMXx<&`QaI1`2g@N8R9>xO@5xOwK9vlyOFhL``z^KNKjPN86BrG}tSXmIDvYCvv4LfX3}9+z|M&8DkHJ3nuH#nQ&tDkAR#dWUTI42Mt^-5L!Pm z5HB!qF;Y;K(I4CbD*ibJ#L#{&Y_)0156yfbS5j?%3W5P`Xvfd zhp}~soN#G$aAIRCkj&cUvV(I7mZMa~uC-sJN}?v2l@>QSrmRG5PZ1;@Ei!ia9@^)% zP7=~=sl5)$@n*A|GiakD#4?JsKzu3Zf)_(Nc=FjPlNKSJD8IwE*df0S$pVJRKO2kF zVJ{Ps)>lrgra!^?ovI(BitD&T=*jBEG^?p}viC}LG2%oC32H=J)o~uUs$bsK)z>VM zAxer{JDYwG*%{M+q8H%ZLdki()u&W8g#BDUKBYZE%8~=k8VVi5Q4dr-0COo#TT?9KZ!6ouH0KZs2d_D|Ajpv6sTBjxb6Fo0UppON! z<)g1z6d#MrG9wx*S9=cXh)=7TK4NNdO!ikWW|EkRVm<^XOxw?UM{N+t#OV#VdV(9r zW7|&d%b#78@}yIa^X%f1xN%;IGVoz-j#u2GzP;C7ZSR?=9Mr+<($}-l!5GKX`O2B& zK44qXAphHFIuG_|5c823f+PF7N`1uDCfx!SqV2**gIRVKi>&2g;vU((<4VHcx+&5$ zY<0=^z$4|)*7 z)zjt(EJPp<-~BZg*t0@ydB-*b>HY$oSZIp59_((b+@Vk0$GU5N}uq=^INpL?|6w0flnog=#c8HNV3R`L|p9>$pR(*Q)eY$?8&`aU$c&m$V>~NW!tXX#PRh~-5HL^ zYN+{|TkqDjC@a`CBHqe84Tl3j-C*ayclJHuQ0t3_Q9Y$zk>m`;B<%P2KDZMrIz+e1 zy-*khdRkTDDRUyu6OhZ%J{XWpJUy_?lltR)rM1c#%7*CtFe7yuoLr+*JVYNv0B-dD|5e02ro%QgJEOH=% z9>YuARk&{VLZ$EiF0N-%+#&Vc+k3 zC+!1`TM5zY*>7$+bvv&zY#>Y|N3pe#^E*lTzFlDY`e*F?WbsEpmgz55?`VgB`*E^} zA-}+-#f3@Bz!qC$tyRMl?;7nSLA}v_b+&DM??Jj!NK4SZ@|Q6m!t_pV1DM(6OLSpK zqs1$@+Y8{eEv2-)s+KLqP1WyBJLfVhJDt9QN#=c*MBH7YUaOjM-EM%DQY+2R(&3+* z9gj?6a-7AE6<^X)a%Bxze0&+cCPfFS5t3(4D)J0kJ^g!`Q%y)DB`giGmqxWPjAk(4RvkpC}g+Z?AGfF27V;=}A#@(}&G&ysa~>#fLK#G;|2# zyrBpN*kk3ng;|ix-x_=aKN~HKIQ10-DPgW+uHjzk5GxKfhI_b-xRuY?Y$_UAx6V?D zuoHJTfP7*Nd7PezabOC}^YrGmk3MJiv@()SHIu9OMYKqR(YsOzfG6*n~NWbO#doAN(aP7=fx&r7^HkjjJNc!B{AZj@JPlolnW*P{gVUc5ebHflKt@uM4 z(8&rB-U;aAQGOIX0xpOaXV_G@0-AnCYAxmn1=lOTc$rE#Ixoh95a+U-SG`y90=!0oh^&qpctugg5KEwhPNQeE#?sJy={5X6?~ z6%`JRtv>OY^&!T2=(_UnL4|>@lB@uH@&nv2P+I-lI^A4e^H(>`m52=@5GK1eNeJ58 zl-F^QMBaSfn$QeWUw>N$7clgrdE%KKcBhgFpr$X^ud!@9-8YbpcU4XEm*|VaU(cu7 zA5+$>P%(+hPm3j{BkMCgZPiToUoNHNM($w<6Ii1w=_57@MN0K-n|B@sYNkb3ZXfTGEW3H=d{v|FB z_dRV!JD3nZ4C$!_wv6699=%G#7o>9t3)L+% z8-dE6Z5n3UL;ID1{PVW`TfgY*O7BY8*ng8Og_b@{wZ~P3^(>BJ%$vqWfW;==RH{Xg zE3|4s(P43!7!8IadgG58Mh3!_OurwJ=bm+)24kAxX9X^4r@PY-f~o%4?Wsf^aPs?r zbGT?ymfZ1bCr?=%Fjr$Y#;s%}l;2%Y<*ornq8%Kg-36YUM{jlD{jo$MQjh zB&iGa^atB6;u~`qBqE${@)^2!`%ZKr*?x@B5X^8RYd!d8E!ZmD2}O)O;KDNQbr{-%=+9Xqm!#?j9eI0OUp=tiB%;e+iwh);-^{FxN#x=1&nv_fBb>a13K zn?NaD6JKfmxOsEvpqbSNIHYMuwkmDVRiz)mBJAaL{k;>bc|U@L188_8pxkz0OA`QK z*QAAvkA>zY?#l1y+J+CVR)uNndo$<~gah%KcY#h1EIM1iONPwWUH2DH#YKOVZbCJ7 ztiM9oXmK9n`1a<(bt;HJKy1Bu-3=3;^{MtJV;ezHGplp$EIzofTc-NIn^{NeZ(BBu z*x-tzU@|uRX9^5l)qp591Ow_r0GxTdR*2}qEKBBr>{9+f4N3T$!x$?mVADZUR@{Y^ zOp`+E-C2{A;}+KXW$;i=PdkO1TJh>+G?jnCir@?|#q_H{1XRg}D9fG=LY zRWcRnnjZ`q5KBTvgOie4UOA`kChs9Yv3a&mJr{!||?uJ3}LI=oV3T6@v$Ig4ed^?6} zu>SnF;oW0`Bi`gDCll#rw*N}e;Y2-}`q~9y8sZ$XH`eLnr@L}DLdxtfp}|G? z`$V+9v83G26aeI76S*+2!3os*SOc>q#cPaiM|D z04zzGGr@Jn^(#LKTvXbi8O9%4a-cwY&C;8QvG4u|6*GC@SAM4CJ~G_-eC~^`x6nPd zRJcwLd6#e^F5gPv0XfPgo+iINFQDWmXHiUTKR*9PbY|?(=R~V93H^T#PGETd3tB%;z}h!h$q#W5LLMPQ4I(;OONa+{cH)QVlM zlB^JB(VDXSzq}a1K^^C|X4e~bE18rwtvt!}+#C|}u$Nkkqt1D`6;KJE*}~oU?lH!k zE!}(NiXr9Q@ZgG_NQQyBSw^hhr*D7&v|DNlO6zso=tpFFi0k1Q_gI#xeAw@2QoHqS zvNzXD0eIw=!+TAji(Ck;;n|M6JuzUzgI{$bV<^0RI%_JhAx-M5K;EYj;*=|o)$*eg zx%IUS@;BAJ;?G2(^x8{g`*p^En)Wwj1>7u_rfR;UvmhY|R@Ch(rS2t9=kNO7%p0?Z zz|ZN;{NYRD4i1g(>RjU!0rQ_B9|2ZUvMp{#EY!5Zk4s;C-k#}4lTv2uC=S?XXmxwz z(L~c%Eg=6s?eaRX6Hi~}pcSHq<{ndfU=Mm&f%A~|>yZIfY$s-vpjGlJl=9JS8|Kk! zr()ofw}2^IR2c(HNBh31{mc$C+x8jj)+UW5H(iPXm3skV-c2hQEKd=;0GkvCX;{Hck* zRr)`vJf6C4(dqtlt;LlM?+&x8Kq1ohfQaZW^x4fdEny81#kJ&dEXXXfLorW$PRH1* z>bqN@@q?UkenrvD=l?rkH>@3@>J0%%IXSbZ)Q-N%yFFNkELA_{Pr$eTYBkx^V3YaR zKPr9lxh>&E)K+BUQX}Yu8~NB0nFyLl-iasJG%>-t<~69Z81e+6{}I z)AqMeF{|TeSKGZ{h0HuDQ9~YI2^jQ3wxq#WO4~o7`!b^92!(xfI4{mBPAcN>m;DyX z1jFG@(NO@gE#P_$R^3WW5}KNonGu?NPaPMf*UG|iHo(mLoj|iq`J8YNq2Z!21IL#K z-oK>vee7@Uhxx8euj9LMc@To`|s*&kvlO6N%^>)gguy@vpg4@WdQHhx*)zPpYw?0b>kFPzv3~rZKxvm z&zvZE3Y$^B7h>zHuU0ZcpdA2(Ilztus9eU;Y{s)`3v$ltH$st#4Z>qz@Sk-^4yYz$ zqoD)5p+D_2oSJ3Q{=^*;yEGAx=g2A!;q~A}J^7?@vTTq9ZK_76;^;2<*kmCyE#D2R z29+7+o3pcceq@luUOef6J{E5_H`7~bf33TAmoAI^g4|byP;K1L7EY#3bzEl{)asvY z9B|^?y;pLxmL!|!wnII~MyrP1DDvSEx?BX9qeg#_dG#{M+=IU5^~ky=wx-LuIT`7t_P> z(nO_fQ!w^hM**eh^os`>TvUUfT1&RbkIl7iMdP>a{yExyt();tOuV$g`2w-d~s z5SC6;ieq_%#jzxX7wz0&@ae~*2t6{!ljyZMn-*A%xrrexv5jO5fa-qVeQMfof!QGb$_qzSD5+5EMrpWMr@s#QP!l&9NKHZwiOsuACkXs@*jzr3$xwM$Xde`~^dw_NW2#zIEum}ozGIT)j2 z&M%ay^D7UtK+4@a-HCUd?I=QOhA_DjGE7Q#&Wi)#3R(UHb5uw%%O3U z1SReN7-Vp|xI}oNQ%mC*g&hbv@-%N!1-WqC-N^|=S1}Giw`NxwA#tbc2T=sC=id&=F{g@CDWzR8dac7FqdGv%0)Y72>Dv5VC3iNbJhTWPBn3#Z9ZCgbEdm z;ZpxmjdCbS!B5p=o-npD`Glf0)^>0itVPZXn7UaZp#mgnf#fL1wg_w$3w)N zO5qDC`a$g?n_&(Xu+0kR)w`?9ZyyCZ;W3BIVh{>E_)09Z;&P#XF!;FRiw2BP`Gn(2e@ zHl~EhIAAGgi8$6dk-2E9B5*{9XRirbogIbh#g}=lpf}<6GA_sb#M6X zJV^pKx#Yn(;Q+$RpW-cp?`vo?#?}QJvt+z4alWCvL2$L`!v{ps-8UY|8gL_$ zkoqChjD36qllo_)0%r&_<&~{K3^JN8AnGK-I%q#+bQlBewz+T#nG+JF)ecJWy74|L zD*5W-9@XTzf0_!qpVV{?zfR+;!7vP|&omDd@)M!653z;LGxajltg6x#Ee)|Y?RSAz z>xOEQIX03=MaDuj?Qm9bG$i0cifyYrFHR{YSq;zsQOkV;Xck)^8#oV707)F3 zb!MrYoKu7o!D2qY=}wHPlO&?;oEfFXW{iG*E6S@^XK*|MS0%3Lid;hhFWi{on*VZL zV!3UfvlYKo;toBYgc2xWap)73*Up6<@Wmo15j}`x)pA*g+LQ z?M6$0NT9raakZ){Rz*^jH#KY!;d4^|TsZpE?k_baSfdbxspRf|DpJZ;?J-PtQl@J0 zxQTwFr@nBO7~1B@mmD=C>opy{C(+%pX;K(C9X%MpX&3`oCV)GIY6=)hPGf(DV5-It6wqTn>Gu8b~LIbiD+guAT31!O!gjzVI7CC7O?z1LTM`R zuqFz6uoY@jeX`fH4)_gjA$CGb#d6dTAt=ico$LXG-RN4;a$o?gbz8tdD#V*noEJM& zIK}%HR^t-m+6ZzMXSb25h2e2NQYyT6Kuj9cj(NtkfB+?V@N>LVgu7q}v7k8IaJTzU zWqs9+^5a=@90?e?BED+AVSBI9o}xW3Dpgnk3aWhk12R<-9>YVYu*92~<>ta;j4%vs zb=Quw>l?qD0-)-wY&*0T^;BGN2A+Coy&-2m<(}LyJ3IMfp=buk?pAIP!(T=0akaP} z);Dvsp<<=d1b9T^@J1#)H5M%A}RSAtV0YGT;umP#+GtQi|Kx?iQRTIW#xh; zUCY%pvTh-g{pgmcz{};{Jk*gB&?ZS`;Zk4AadZ%MXolYytxGfH z4a#>?y}fSQkC~uYlkIMA3WC1)>r-p-*{LugUu_VkNFRMF3PS)s3GA#IZo5ka*0+Bi zHJsokje)eIl74qbXwVp&Ws#Em0_LSe{o62ynJ#xn)zYh7(;1x;@`jfyKNW|)$b zAJ~#s;RMKevqZ0K0*WV0@Jaf^RyYap61rXa^L-;NSZ*G>ioK^oRNR7bXgM19tv_E@ z#WmX`^+*{B9dvK(Ij0)G)!H!3a=c(!jg9$X^r~pIN|maD4k?9SB6*IYZyZvzq7XcoqRSE~ov7)}XW> z=TT)6M)IH;`Bp7@QH5RoaKiM|V5KdiB+j>k)nvZ#w8NbVbD!(Cec?MnX(6zavdo%N z{cG2RF>$DA+T%s!eCNM{P*A8qrU%R&h-?9lqo=+l^|(`^T^BPXbrE+~sD{HhNcPa8)!G5Gup!!B80w zd};f+pWs^J_z{^y?goP3Klg1K;^$crq&xAo^X4$J)72{fDISd6x{|8>UH-IDV!LHr z!hcBZ&)muG9%L9XcEFl>P0L6NSgSCh+ zPpqMG>3U6t9UceH2*T1?JV?$jp!HEnN}VP=?B4fneW7G3Mwhbz0NaV?5m2cMgQh6V zA|dH1So4kC=7{G%!8a*3otBVHk?hC4uP*4QFg|1l>i+!u6O{W9W^Kvy?!1@$LRO5l zZk6cYSEwofdok;2lO|cqwHFynu;Je(5>uQWveW{QoYJ$HizY=f#a7J01ha++eS8B(@LzOxwfuUjfgVg&sx z?hcx8QJR4x2bowS35%<>8L7TapM+q&zQx@=!=d#Huk5OJx5-@=pJ63CGb(R}Q)d4R zP++7B3lGjkcI+{#vA~vhLJ|;auHA$OZ_IS5=R|7ww9tkc`Cwk_UmP6Uvga=$XI`Bw zQdNruXH)WQ9Evoz=^h;KIV!4ryO#CWXAOEtDVRzrtAfcWRv=vbVVl*%&bYB-R@laLya92T-zTuH)etT{)E0P10 z>uDMJhn6{1X+XyZL$&1sF);`yYF$94o|(<>%T7Z$5Wkbv)aP3oe@t3P&5f6FR_?*f z*4<67DSzyAv(89Brd+J?>Md=wc*qA0)Xpa>+T#Ijd}IA{+o?B)S}zPHJS%OrVUl2D zRUONy1m+j0HHossMCAQjwv1!vw>scA?f*^cqMJH@!XY!c)aQ)q;d>Z@H>;$2Db4@Uk9jz zg|@k|I+i){q=vsh18^tl~n~&*K_d0O6mpw52@_^5JHK$PJ#Blb2)3)ymh7iVj|aB-NVy}o ze_PFj9^4&m6^wD!3U&s!_RFaJPA-1l`Tj9EBrdEGvzl*s1&Nr$Cfkp4YjjIX4j?2j z-K@d70)$_AvcutJb^k~{Tcm6<)DCET2e|Tjq{iKxXBjQdyjeM%-iMLk z3LJc*;Im+Ch>;iO83+5JEM(p^Yd5n_6U{O3{aaS)ko2nto9g&EF31YQ=}j+L11j%* z;PBKgsvf{K$yg24RrlgIay=IufGl?G3-YHHaOO*zvIdGJ!#n%bIOq-5+%?%sHEsXT{@N7e@nzLuHZR0Q9 z%D%3rHM?%Xlev_cA4<6`4Q%L`FfN|AIF`hnV*YMSy9mh+vVpPihfxv$(*(H28l1EqVEKk2QljS$GsrIW z8qvOH2mtk{;(sdsc_0i%WWOM~0_*w4b23-ZBS<7RNyBT3uY9PE2FY~4QpdgrAxQ@K zo?BM#ikIOQFy7sm2F~7F()=|qv1s81(qMX&2Z7QA{f!XWjp4LaCq=b0H5wwTCJTvh zxB-fw^?_9Amw_c?<4~La#sHsq>vs*sK~KtZn^Ht`3v{N;$P-zcg9V6{7bxphSFe6W z#Mdw(DxbcjRtzvmgp%2(O>}4d=$1g=4{XMucNPyzB$h3GUXj>1&>y#;J8GWlw%bLh zixqDZOHhcplIN+%_Mh?;9bm@7H4lFnCpeT z`9vydm;7tQsIf-1{BBYqp{GK(T2(FH=ZpCU0mAneL?$As>U#k9_U!fed@Ql!J^DB< zupdy?cYYg;hfRF_Je?D|cUi^UQTcb#yrjZghWxu&z z2GWa{w+_vbd&OS{wwQU<^-{$Fnf&w8{Uz(BRJZQ@^liTJwHG5#6M8sW8CH{0$3SQ% zBWgcpCLs}d|0#Z$N}5h6{vfqWrFxB*93FfA@nMj>jzlaOAssKcYf=|1&wQ(9nij*) z1uJ87p>qbuGwCOL5KxbDf8oPRBlq&eu!A=6$`&lOeNOptGTIX}b5#YSos2)i-b8Fa z4=YTVbb5;gmFDEh;N(|pnMCt{wQv}hP(sA=c#d%GNj!&AfLIQ5xNRJ_RmLXmM^ zM48<7wM*xQO1%fElDABDP&7DBvKtmHK4CFcRd>;;sl5;)IN5JFVX`CGp$=IT2+F5O z(xC3te9A5gKa_0CQ_jT~s}84h%^7q1hU79Im}_&QDcuUK_^e(=;&rZELhTOjn)ndwEY)lQf&taKS0fkV#igY@rL;-%iAV(e)&MoR5f0Yt)#u`+hb z@SbM4T@P`GZj<)fM4=qc|4krI+^5nJ7$*8~6FhLK?o zq6XW-)`(Q`7h0*xOvnFv2$vR^88~hoscm&Y6AJF-?~Gt(1!eSrOh7$nU2(c4If(6Q z1G388dYRV!{!rX`hvhnI%x^ZFrR35Lw6fIMrj9C!)cB$)w;&9%X(>5|vxeYN3XY2B zcBd7XXAloR14iu3xzF(EwuqrPCOm-nZds1hhRk3^Zy$AE?s_UeKIjq z``vi1z%d?Q_VGbH!y9JRQTxtY3>e^Yv4Xr!2lpbnmG9tt{WEAnTs0@&FVx}?#9rwG z!hR384i(I_L;NyC1ZB}M6jy$w0$K}9SzQ5zQ+oZn(o1eIOOH2sd*N>=^B$>|tV;lG zj*#j%X9Nd=^}ciU>~JG#%A4yv2T*_9s$2E~9(BI*K#M5R;oM#WmmFnZxKC3hZ{m3Y zg!OXcA!8s=K04|)gtg5SVX-5Bu#7EuBrJW=W`$Qs>jr!wQ-ME*)@j?d47>qIy+0M2 zx$lh(MK5xu05X9MU@U4!1L`zPH54U~p-@1gWi%qh47Ydz3cwtb{4!_jqG4=BqVZQJrf}HRA%^v4@G<=f@Lnq9BFQCD?Q}Kv z*nxRb6o^c@k^DLQRozufRkn?* z@jz3DfWy9_vl0FMRP&7UEZ0QTu$%GaU$>w}hVdbf?nO!;o5<$Hy>NV}g|Sool{hCQ zE)5TM)pcPZvUKpfjD-yLg$212JaMW4L*~fq+2&D8pbi%v^}$VBgbEu%+UHJQi9-HP z7hj|HGK4wL=s!=TT?Z2#&N zsP-hU-l8DgWZX^(>XJbnW$hH)Yy6Cu!S($T})G$=X` zvkpK#x5l$wgUX*zD7eJ=pgq%{8Xmin$q~7x<##sAki0`XN?lJxs&;0D*02 zX`Z*9<^1{Wjz^vbe~O*mz{;;tSIvg!WxIZ+_O zt*C%+Qip&6=l@HPrw1w-TKhVm7llXmZE0ChdlkaoG&r(PviLH!c?hOFDc!EN;(jU9 zl+!~3%z>FO1F|EsZb<8>)+XB=+AaGQQMDk|)V_`{hrbp;jCkU6h$g+A zxs4W2Jm5?KYGcX+esN+j34h<5dyv#`YXU44qrLnb>D7DNV#lGf6_o-iR}3{S5DGMc zY=W?g8Fd9U3hy<0=%+B3vK%^~NewcsU7bqu&+LXYs%$S|M|7L#{ z8+?Nrd>@hOLX#MLwMjIXi&w-y^ZQ&P@Jwlw7z)B^1^LF_MzdS(a?j7GfiW7C;0ARH z(}JQtgg9x80Ep*yMZ#6aL<-8q>(WOD^vP@(%s)y7UQv1`uEwCXp`~`d)$ot!5|kdh zc~|`7S;<><-W1&$04|JfWzUt=pwlV7J>gpLU6iNXUif+$im}iEfoe%AW?&wd;ckfY|h;|2JSYB|}hsDZD?&M__uh`y~1AZV${9*|m zPGgb9WJho6^6bPYl*SIq+aP-Mg*lLeS~0fpVs9Kk(o^*YMlaUF#CukrX#7_UD3F^y z;cr-r(8eL)#d>rKYq;8$Eo9uEmt)5Yd6>unS*3MxYqN#BOPh#rbR#r zRzR9ZyKIAA+(k5 z66l9`>be5T1Z0n7amp&aT?D~eBuJ4uC0<~;Qdf07)~zB?EJtm`lUEey6)e7Gd5pUM z6aDhOzU-@yk)YTIx#dd7qGu0KF3jp3ua{hJaFM<~g6?dAp#lc*2 zwwK^PjNzOnw3I}3!`SiiR!NSg+wfBnT>SXfFd8O}dL;7tP09$LpB3}*Uw49v|* z4Xc(f!5fo>7_XszUrbJgz96Xc0z$Q$ONr9S1ztLt!`zGBKMwM2K`k*&l17SQ2-vIb z;B+bSI2KJ!+XK4xnL4J=91M65!+Y7#1(j=q`mQfkrDN5T7)1!UE+HI;$Oo z@j!6&aAWnbBGLgAYP)E5zGEK)WgQ5HtyAMlQg0 zq!1gQxaUU4N!hm?ogWszdkpA1=OjE}MKk;*YQz|_ItF^kmV4p+Eskq{b_+JQh{RN{ zKbjxRFtdS?W}v+;RaarQP@j+gSI*q544SfCW7XPqP+!Rq`3guUK4mfj--RGz`Z$@L zA&SucWfJcoXz(!o+XH9JgM2U^&^Wk?Ijbhxx@7|d!WCF77D8oGVoOKb&ocKbphH>S zUy`lh$zP+*=zbchpvo!R5t6_4xV~XExWoN9QnpZmb_A@^eSi_L2=mrMo}VAKUwxK{Wl(p z8G5XP7lWIZiPb42BWebTFJ?(9-tIgCmXf{l)LXQehLh*{$oC zV0;roKdVaMOJ*T+sgUs{ZyB=>haR_zooAKwoQ@}yL+daRLjdzIUY<4py(mF<_^r2J zCK5@K!Q`rz4YFHv+N8Lfb}zx7Vc!|{_zqh}DDN`c{b7iM5j|-AGi4&HNQjH|cWC#f z4p&`PJha;-cJJ?~X$H6{ss>QYX#Nx{8~8vC=72f!Y7OfGJB0<%4uKz&mGqnUcrh<< z^P*u^s3q%xO1~&~B#%g&M;+VY)|DgwTXCnTZLrJn|5OJ%i8fK2BCI6LFv=>&aZR`e z?2xvC>{vnXZ+3&9jaC2?dy4l02*4w?V&-YmJ+H{3r|)>o4XDn5K*aF~6{K+Pf}@)+ zrWbTLA@s9TrhMr|*f#DWZm}dT}8e`QChV}OiXZ74kSSTK46F8j`?TPFp!)_uQ zBoA^)iT!pgct~dAX#g2O~ubJy6vNK zqJLw7H|71aadhZh>Fh;~e^zU*aO&yF9L!`AwP{PD9YZptKoqvio@MIoWpg1kpA8eH z9eSY0=OxYuZ>FQ=50?Vd0%)n#)5;|R;8bp)o@_g7>%C_j7hE;oV0S(9k-$_(=ng(B zvPEh>KjdCB{TzG$Y$slyt<9C5WR8oL0?yu(gP#OX`yGrmN)>cz3j9l&8>IvIA}KnJ=oDi?Mu8a4;Jt;J+8T@QzeMdEV#E<8 zZMWW1f>k6gzncF^Bk){Vt37IvNe#2jy0CStos z*BtL=reeLXfwFQZ>P!gsU1$(Wmvk8tkR)&pmf(h#Ssq?Exc18JZtu!ma=Re*+Fc&_ zgBbhLDCxI}*WfG!*z(HEz5AuQxa`2veqhzJkzWL&!nBwT`Q{{Fh)^L`KEXB-sKPdP77Djl_(wGod*`*6D;>Y_m9E*a(EAdE#$fjaEgl&E?fZsZD zsNbeHNX>d7dMvj)8sl`N%OilSB*^R*w85*fnX+jv2ntFLV^h}8g}}j@)37%S@n_m_ z)9bEZp@XYKKnYslLjR@(MrsrI&JB+G2;ZW zM>hH#gU?iPtru;nA7Ay^q1IOw%Jzn)J{aB;GfcL_#WFpqsFt*8>@dEuGfM6{$HTZv zNH1Lp*GA|rl*PO57#Is@Gtx_k(_NWM^1bLxy~{U->SUDs05%WYLDAmIO4Zqt-jh|V`|AVaiaX(Hh2@DgNWEe1gE z9q1ZZP7r%$xHx}rGB=*@8j_<9@oD!G08GiP-cVdxPD`y;oitQ@{8mpS8;x!HKoEjP znMuZ~|0^N;>u}>&Q!UrF)-pF3eY%hlVJU-kEXvJWKlQd~uKj^dCsVOmZ-3Ti;qqB& zBV!fZ)i)sf*;9b+G>uwq)~eB0grkT9Wpf>HB(4PPqZum&Y@0Czk@quN+-mpUBCDw| zFOU|ul3)oBjB?Ofy@R9dog1Pll|d5$TaaYtb)@-3_^AZH&x?9({*jsmvoTy0ByU&erG# z&7m=zK4+Vo;|yztsx};kY8D)e7|cSOX>ne5E9MUW9`Siwsn~bVoS-B>SN@3d^6n~M zRrI#REpZVL%}MeJ#l3{29&}}0L#vSiyu&l``_!EV?(?0Vw?EgjeLr5SSPEz_uRR?f z2gupof~YG4v^Q!U#-=bQ70_q>ok|c`O5r6faEdEM5rZWU@kE;9z5#VX3puHrO)W&NeB#L+H7LVy;7m zVev>VqOr3rn;;u*3@|V=A*IGwY&4+oYki4!I)etZ&}Q?B1yXHep#iF*s}=Hg@zI%N z*)DkVE_~Wfd<9%EI{GvR4jd$k@I{o1LBgR|bm3WIiZ@~hhi^2S_L@fZ##MVHS^(>R zi7_G_EqtgM1%zWBOPKu;{fT2=+le-NwaFLn#@Q#X# z^p86w$6~04g!gM9ZkqWtlewy^2G%g}6;%V$8Geob4ufm&(>Bouo>y3R~D8`R9ZQldSU$OXVOiO{=T7+5~MAp&qY-}2h-;>OP0 zuoEq9Ae66KQH3)}{K59+B@2Md&?f+UILU&G4~7iW>S)_OAzp_a_u9%{BMSmodryG4 zn0Hz6WQApssM4X8SW`8WZovx`qg-NA;8cTecYgI(yX#Eyx05&(rzwt3IU z>wL5$m2)bFNd8~3)*e$Xe~z{puIdw+Rbk-+;Xv%7|83ebYm`{~;CXsoQVHI=gdwMD zHK)XhZx~M`gv?x@n#~ED>zt^>NaH&_&U>R>RP_f~#nf}f1Z?o{OX%;!IJwa7{JTx~1G^ zr_j}N)VeLQ5RFZ0UL2+STy4q26~hKX_e;NFrTa2HEQxzGne}fquq}XTo~DbJ4gJIa zJ(fCT+ZgBQ=ZbMfqo$)UxrR~rXAneAJ13FQ1^tEft9e81g>g>0zzvouj>4P;OIgfW+mpyqCw+!Qu|iHsc&LQ)+;Q zd3_@yC{07Y~hjVI}c205VCF4@r1TUR4 zUBm$fHz!&F7erpsi!o(F0NG|Qqt`MLK85YU~$aw^X5sQM;mDn{lcGN`NN(v8H{9lTZ61E+36*!9$FbYzg z+1LH6h-f{Y0AxB4-r~-OK7kOq>wq$XY)O<(WlQOdBBgzz54k2R0=t0`fx9-=lru~SgE4|3! zb*3JkM?6|!RHy*5wnsmZuGbS1=x>s5KyZCvi!to&PjxjitiS zJkT)%B&D%rN`(dcFD^l&X>vK8Wu9UE z5hyO15F!uN+~xJ2m&*1fZ8pyO8*jI^Bn!QghyChQaB{F0>}g=~QqJNKyy<2j)qs%) z-W*gB6YDh-pnzeR?d4Iv5}Q_tbSyaw%0J+#?Eb!ol?PdIO2T`NFk8q zqY%dh*-SN|s5GXi`}R}=B~93Ws$1LtRIEXg<+5zqv>=*bFb$Mj=LXfcA_=8F5p{Qe zS2GBUdh?PxqUUgG|Uc#!eY->eqVG_v>(9dAxeR>XAGYQ z-Rg|`Fz4AIF{>%TV?q&!_Ukch(Uedn=%0JC>7_<^zzaR13bzm4t~8N|bW*A6lYAji zUXXGyl`53*Sw*;5ve0>sVdbSR&1Qfw8R&TE?+gzu4|96No1f;IMF@Kdjoz7EjHaXi zGIGa`XNE?kMW!E(7Wb4H=s(_WnJd;QHRO}q!_Lz~iTa6dz|Iml`Oi$RLGu2y9bS}i@;z@E zeMgz0EE-LD40J}pGnt7n9z1(^Ou~O;;G(fX31wPl%Pz{R(C|f>2&AwxU8#HWuoY*} zg6ymn30>eS$|ZS|Tfk0S*v=f~MWTsmoaL@saz7Q(o0~5`$)W4tWQw|}6grYpH9N47 z!zlxNJNRA;l#Ohe@@^m#9$ImCR_IIzs3P5y(c#LPFX7t{zscW4Qop{Pm}{f`ad$3_ z=x^IeBYpsxgdFR@Wver4Mcc&2gkiO{i0sCVzP2nOv23C0vP(+vb0?=sHeqPMc8b4Q zRhy#N!=n?F(s6!H{a=NQSBK);D~TLPR^a^f`}_m*ZHI7dfaGblQ-&z~7L9Me>5IoU zdet{r&Ml!xfN*r2#NoV)74N2Ie@`tdasAgY~NO6Y2zwY z!fl@ozmZ@4=v4*C8FA^P9pnxwso(};)+j`>6W74gP7#uj>E2Q=H)kW*l>9J*!RWT? zk8&f~Ms~%A*$p*ZEK?Zq2YvZbzN39=YP!yr_M-ITV&v2Ma9p9k8OsM^=)D2}QtXmz z_^w_MiavA>m>G5qw|`pzdekHD+nFj&`ofk_Fd-VvF9pPc$AN6A+f>^d`*HC8J()(W zkGC@|Z3&7C=gj{B&H)UWmuIwy#CJ!7;d-#h1%+d>Tu5sg@vI2q3_X}43~fvX4OI0> zNF<&Vg^@sr7Ur_n-)L4(qnNus^wMPu#P0ug%Rl1LbnB*kR93!H8adPUXR?CdP$hp} zFmrQ_v8&B260^1sR=CA5d}1?lo!S+;cu!NM!vxb)J0$6bIMIfbu=3Q(C`GArS8uuS zDd8li2FDM*>~?B*3DU<}Y+vYvQ8h4^M;B~Sl|-J}$cA6Y%(D%d-$pZ>*K!tnw3?_( zqBA;wh&ync=(UIW-*8GMr(G8FxeLz5N(R1`lnH-loYDPTFGcaxg%=x#xp=#gfo70* zf=>Otow%b1hf2&#X>u;^as^nOTbbBrHpDprRl0(nx@L2kI7p^pD1KaQjm8oG72Jg2K8!Es4ydhn8hpu&lNl`9l|b z1GVwf9atq*2hhFPd^6NG0~q+SzGL6dBKYq%U;Ln&gjrIqphG1_7Jg@k6#Wc^yoAd| z8I+dtnPp2OJ{`3+qzkER3$UloVh!IjsjlrJRgBT)&Hd zl>oe5B(PisT3rA*K*zsH;D}=~vyNpfPxUq5v1lFgs|8x6?$uxq!pCRPq#Ayy9+kegakjitYu#4Nn6~|VHJ~8k)K1b`P|F<@d24N z_bD2mf>Qm{9OT7C7AL5D|9Y#ZX8O#vPPFDdYKfhRuuwhhgP!c$>GIcrH>2AJhk5gQ z%}u33vyH#g`k^b5$+d@?!HeW>Gil-$hjF`dkX`s*w9yBQ2E84QSmnTl3M0sa25W)| zqa>6l-5fr2d=+h8(LvnV-Y(Yg@-Jx*olt}2X(Wh7mw2Jex8X>4w|B;{lL6w9l`~WN z$X`*N&4UXWVwUm#_zvqCcarWHuMLNsl_ghS2F&=IXC{zDwi@UG+^!$Bc}&@iXzWR(&6_3V=U4rYEB>`g%cGLQt;a8w3uZCY34PzP5)uvN-T zIkb_W@6m83OMgHlf*zhuc7-6t^sYb~D$ud^Ul3_^g$*Xo~wiD$Xp;ogJurYxf&{cU*uF;_aM7 zk{4yk5UuFwqVAU9=AffCdS0+H*wzT}T;+@yPo%3ULDInItT0A$-Cwor#<%%O?5Q+E z6n9_`@2coIJ7si_a?(p?);ydxSkBjk%$Zw?y?8H7%nXSeSKLIe)=i@UnPs#+Ld_95 z20Z8w@SgaImatS5yORXTI{-@_?)TWmO|=oQ3Ln7+>-dv{(N6TL>^zHD(^rw-Pug6L zRR1RIM@IfQA{X9s0&&GpA--T49dw~K+=$uNsl9>l6dov)QI|L=^)#p z$gS`)c{n2G@7`ZP0N)4VHZ)(GVCw{;-wb2#p48?<4-_6%Yi#$f;mE6pRh$&K``*vF z0|tNPLdn!)?3_ARbkRj06E1<$_lbNHZI*3YEaw%({7N#v!8dN?MmX?)lge+ynEPG5 z>nwu_%Jf-n;al2~kW37!ktR(m*2-SD?YFc%h4HH71kE9h`)n zDcmlMKs^1FN_UerSAx*_MVs?0mR-BosFEHQN@|R|^n-zEnh5FuAf0v}T=?HFxHrBn zN)N_4k5~bCKH>{kz|X9T_;$ge2qMA44Nw6w6Ez>y<8}D^1CAMionh^5F0)2#49p4p zF>L&T%8G|kwcsBN*jH{*4#*VpGJ5V2Gu!t_79*$!GwiXx#Z4uLfb>o*tRO{ z4iT+}c~+UriM50)bVEm^>U9yM6@zA~v6}?Iu)=)+o~?vo!oM#K$A-JH6@(D*XYtq* z$s{8l|9h^JLtGPBIKYEB;FxbKa?U>)*>K<=seooxxv(9)$)ll2wk;ExOrG`0I2wB*5VMSLTkiIbi7I zt4T?Jh!)ErcGoZ1!j^^tBsJf1>}cpFjOW>uAvrB}DY}Ea72>=qW-XC2c?ADW633j; z4zreO4n}gUyg_qz%SORgSTuHT}`w3w*dc;hht4H(Lr3)9E?PDC2&aM@F3RYHW z#cbCMP=TOz3V+@;&2Gwl#BL!0+O7o*kgiP2GwzA<`RMX7(6i=sr&Cj9g_nLRerb5J zBnYwoo}$(`_#Hc7L$Fhm~{q&5$zsS~I^v(trtWztl$V%zc5w7yFgcmjOxV^9s)(ANf19>Z7|T2OI?Z>oHsvE z|6a7t2gU4^xWcG`ylWg^k$<_;Y?j*}x*PMy_cC6%j)?pY@kaNytY z*5k#Mny;@&3gynf{FBweC}q-IXc197rVM+n(ouE(Y-6(nW7yGtv;4$$Xu8o9SH^25 zNLs4%-G>=U!!BAepk-INJ?zOxj)KGjwEH4aA?jY5>ZWxsb`figE4y%Qi|K_Wu2}yE z>oX;ER*ntb7KOtTe+jlQ;n;(_C}bV{0#460_Uzn=uVU+ED0lgVU+8I2fVlBWYYO9e zG_=n1B&`DdKitsHc16b)Rgy87*J4|jw_J5|Oi{?quMkyC@%d;dVGfp4mX!69yj$}! zcPDH;C}{vO!~D*^vYo61`bw;QYW#bQ6?(w7ekTSPH{*?5zYD1B8?{K*P)VxCq9tlD zMZ*cQAOCpE1)hv6F1LDY{2C^RpCCtlatxN^7U`6UriF0mZWng|;Af)5DgYy%i?HCV zk<5!4YiRUDf)Ei|pXN7)eR7gd^$5^|_x(#6<#QrTlR!&Www(+v63-4Ag3}K~(d}H_ zojGFMTLtHKeEZ??pYT!29~20$$6PQB0-W#INph>D>+U{C$gr38CF%C?Ch6+9;gwJj zmQWdx4fimYA9Go(&)TetX6A&UH0(GptU&q6nHXgqi^pNNZd^67T|AuaH73@WO#~TdH?H zcuawa-pg8G!HqX#mYycmYKpVOl4(M}Yz)fxt9D8BPdg@~Xy%}=IuC&GqT zKF5}w4CE4hE=i;tS%Ar(HF+CtdNFuq;uo7q;bJTVJ{3bhw|NwMqB`x0s(bEP__Gw_ z1G;4882s{O(H!UKM&1v6lAHC%cT6_(a=!6N6A^c|n3i>}U<-`Z>6x0?FHmP7Ms7wj zvsU-DiwUe0qPz1veQ}gCnI(M~SW6HMr%^ScxU@M1#Ydy!9MaZ}Y_pX?F&X_VirEp$ zcpfEH&#%YF=K%Xyw#IeV8 z8PgYD6@1;$Fej-hI5Enj!fD^uJft3tYzc!q_9DYb8AWoLw(){!O!!clxb3nfBHODc z38g*i!6s#&`rZ(+t+vry)P|l93V6Cl;D!E;PU`bQ$R>d9iHPh=^JV@GR;TP#&Oyl% z(>P>5O)i1R?8L#;#2b#YaHl13Gh8+FyJTp@3b6+m_4n?A$Fv(_Jh04lp!wqw#)~aL zrhW&w5H}uRY zsLv6R@Bo>92Ht|Z7XuCBK-DsR?Ymw8O&~O+!|d3AhG)=s>3QE{s`ut;YG)rAB~)Eb zvOZvii>@4E6#T9`GM!U2aZ#r&sHj*Zou)C=kRi;|FJ&WpHQEe=xB9D*q(S+y%4MF* zO}euwcJdZtQBJvxw^d?v*1DepexaP?f1t9pm&t%i{73rc1brah`wKi_#=NG!vf zKD+)%q`41w6Ua_1yr(v15IUt=8TbUn3FdB9JjWPIPfjCL#M|HckH|B&GK3nd%YsVi z5K>|Bw`0>Qv%d*criU}^Hilzv9WQ8`^o2fFlwGz}!o9=g`jU%UWjSCD56=Ivsk03e}bYmPw?|9aqldmr)>l$~eGP_zw4EYSEAe_a93c zvOuL2(Qkos!z<_>^f6M>Gwx%{{V5a0oFv3Rd#T#^@KR%Hy3~pv9vuYHzi{rGJRh6oLo3V*dulj=vb6N5u2D zFYQd}z80j!>9@-8jOeNA}s!Y0j7od*n#bG-P~+}^nCBRv(o)C z`&pGewFL5TMy^eO%{asI=M_s$y0;Oz@h!ZAj37w82XJBkFyWn{vY&w#?JG89^z_sG zCOTrtXrqFgbzeC$R=5(DXSQR`O%N3z^L{CdEL(q0oDS(d{m~Uhfh(NC(t3EEKr;uQ zH+37L>qIW4N)|LEBDrEgW`E;&+6{#Tm{|19os5fe?cU_WhGWIb42|BK&F#_~H zaO*37yCVGmGeEQ$q%aD$y3GmudU@nA}D| znuUA$`)!|TZ{2zY#g?G`xi@kv6Gk_~{^}8@cHH%v_EM%n2rQ45sWOla+7|yOsox6=rZ1`lh=u^Tz^GUUUd_S4 z3XNiLtWH;64^63r_4$1hRH2ImFkt~Yc&QaqwYjg% zfRXpS&=y`4IW*M%<)UcT|7TN(k0!vcoIe=uLv=ad(U}Q{h4B@e3=6Uu)}I(XFXugm4Yt_JjqsV2o*X)I zrUm53#mDmFMx?kJ&*#ysF#Y8ekeK+nU=Fdf4=`Ty>y~s$|ANZMCmmHM0F3W~YlgWF zLbO_-C;F{}=d4wFm=63ja7YU4F%sf2=~d49lWrKI)jNUcQa&<-(Dl6R(pJkj{6kCG zYM&F2-N=et2yOHZ+JU&^s^%o(P+>5+;5WAK7ChV(+G%BPg?I`8x|P==B{x!~4C}aN zX*UjI8t~v-0v8edIDPjO1mI2`A1Jai&KX%M6=0jHZ(0swPj{|Ws;ifYOXnTj_o7t0 zd`Gr*w7#)a13M@|ba=0!@Jq!^5I5HLwbDWaLK1Hn)ys>NRRzCG{R*VWP-uh8O!u^1Ufh`g-9l!|#cENarbC7<>!7%3)jmJ|OyJ=roJW71p-UP4V z<4>5mjPbzxz!dy6r^{S|?~#3CFJ;R8mc*Tr{df7j8r_5}mGlJErPV;!Lo^v{_J9Q- z@Pe0NLOsQU>>X`o84GUY3~A0(O41_NRqOnCV9e=GnqQ4UMS}Vt!jkGpDs0QtnA1o5 zADOdK;)>$Z?8gE(w136=s^RVCa2s5V%rN)CixO9^%HHXb+@%uutD(e#t|Q5;4}t>5 zEpRK(kfsfvr-SG=B1$J>t%Ps7c=PAx2=FyL^VVMeNDAw)oO)^_P;YRFQu`>l!H4Sg z1SHXiojp=h5hsneR)BGN8#onO%_w*opeJZyX~$@8;Hq&}4OKq@sux`e(QFK^BEWTv za#x~VXdck-st?H#aQuZe>)H<{NS*s2ecUf9F??bU@nN(DXSmm6+Oz&VF&8HG0J9k< z>QJt%S_Am#;SJ}^bWVhgQjW@mqnaGvD4TeIIpF2LXlquHcQQEABUoD#sFC&z`^m0& z>?$7t&)Xrq_NK?@`|>b1kI*(lG;rU@tNXTjg#fN@!nK-Kep!(8o7HD6n?fFT5>EE} zH%1Ih>_muG8RD`d=keBSzj3^4UH=*iwEMT$DQS>Y!Z*O_{MAxOp18m79AE^zaO*7W z;4!T(I;Pw(x`He%n7lG7GIERc-HD&-TNhbf#NuP}XfxhYK=TO3(|k-;q?C3L1M}^O zYBj&d=5C@3EUV4kJPSjSLYj_})wIpHte$2Fr4Jh=(6QP4fYkO7IwP!e?yBfp9GB+H zn+?WyKX2!OaLX#@-pZAT*aIJu?=(SA%AvR3&kwU^$Spdb`DateYqQ}Iw%6Lhm@bZ$ z?6#YT9Mze=$`Fraoq5S1#w*4!D577AM1Ct@;Zm4c=y1!cthEbcosQZH7;}<+tN9Vn zl7ax@8A#RoPOL(nX&fsE#`J7z2x?Q8R*!Evj*ywi4C6kcqYdl+T!@g{>hMTOXYkQ-!&s153cHz6P0Rhjai2ywVtwIbfxkwrwzhPYM0-%;1ZS$mQfR1|1F z5LR9}T*`TV9hKzw||r$OO>+ z%UOk6h^>N{O+VgY0|TYF`C~o zuy>j{HZ2mqdE?P@VJ@LE8L0C*82#U;5Jr0|mR4~-6IXoFs^Q#*c{o;o68@-f^^3o8 zjen|C=r3!Xsv5_aq3cZ?E2xUDbIpW`vBw_3;BDB9VT6IK%hsoenG$s0cm8&ZC9G*d z83w61hcDC;?A6UBhFhi*um{p4PeMEW3DOzF(N!q`jVk9RZaF)RpkU7fO*7zUiM}%Y z4{SDQaZ{nj2{E>v!sFSW48s5oFQd{O{6q8w-dRcMI%U>2#XV3B(eTB%+B({hzd!$e z^ti;3gBH2P-j3Mt+MX;g1gn|9M} zEbkg9mAOA`HSqVAN)1a)ewuC2^$46GI*Ux3lwMeZO4nWW+5RHj-Vjj|d9=ToyQd5z zw?rxA1L^gv{1h}3J*3~!1zbL4wPn`w1SOF{%2vEL6H8>1#W|FUtnN*@jecg&(8Va4 z;%HGGt@rr;f<#2`HEFzX8abxl6>flIsLYzl`rr^;#n~ z*5%vBU;jlLvIN4*F{}89I6nYpwDmsaVG{5t>J3uQ#;X?L1gwWJ$uTb{(N48e#;|kr z+x=OvB&pu4-WBFR(mJ>=j?2IKj*20rH!{x62uQ%FvAH)+1v+w^hk|m<*J5Mhu>T5g zbhGgVP;d>#A8ug;c(Rj{T<+eu{q`UUjAcv#@XboK)Fm}KuZ3|HCMa_`fbx~j%oM1O z_I*l~RczTqgJheU(zheO=z`?vPl{dzs!IqNx5bk)FV5Sxbd;BUCNrePB7NI|c%^V7 zZihmtvcCsOw=NKqWUXWV1S{N`$C~;c>x^3_290%UHl{L2MbsG zHkCH$r#O0oIde(>W42RD^Ti=5phBb<7yA5Msn(_BJP;|M@u4FW-0Gl_CV&+~G+QY< zv?cKUX{c1>$2ja926YZdZg>E!Fc3|L(Vjb6%-f71my=e@z=jatH-k0Ikt>45T%4^g zXPF)PWnJkP*ksenF4LSSQnqd@6%yZn&_if*09hV7;`>ap1M}vfS5+^G@KMmR^jxbF z?U5=WDrslbnbe0ZyJiU^z}DEdU<7+OO7w7x%d73BpJ6XWxbi3|>@z}CXUvnGjMZTh zOz!_ra_XT0faNQ7(PC5cJ-TE!U_pz9{ME?Ebs<(xc#}Z1!tO#>8ui-5Q`mz}o3GUn zmK0IT1=uW7vyKr?pgM@aq0mjU7sz;$9Fo}#Dvk=Hrz*prbZHeo5ZcoEYl;>gUz4i~ z-fI$q`daTx<(348NcINO2ZRAiF0o8BOqipUSX;f6RSs{4*H1@_Q6p`g-DHOXCoX(I zbR2*KY7+0nh3gx*|MwX2G}=y198`7%{~cvN*pICUC0 zyuf}h{iy{u;38nyLX2~%ocV?C*&NFa^;chkv!iX%b&ongN?%3>m~5XrQd(<*Eg>sg zGPWQ5*U^@XT152guc4}E{VO;pHsI)V=Z6N*@DgUVhx+cCt3{b$`L}*XoG_vlO;7VO z>5196?E1I~^Vfov{`)_HT5gPgv;Ng2m)#pDD$$lBO%tv)QgKvFRC)0Q&8&wUeF}c;Tw~pbh%&hZMUmXJ_h9ib^mm;KXdMydOjk7yB z#})lDMZL_B^P!PDb_0!8(End9vZx zwuyOH&KIL!@mfCd;{bD`)yQ%1b+NP~@}?zN3&qU7L3VGwZ?K;bdX%Ws>eIGasIC64QE{ql zN;Slib@hhi0lhSY>DvLpL1$hQis~pPtNW0sTf=aeH~bwlSztXU03JLtjX!%)!esN~a{Vg-1!-#SSs;MV!W< z-Ptb8x!18Uz`|YXe!lAh2ezgM$7|l+7QeiTU?PxCRz1_}KX%A*PFl zv&t9n(oE_UG#9W>W7ejBVReN%q=no$YB`XAw-~A|( zmD08-l7AK8Lix{sNAk}2%VNUmG2o}^&sq`GYMoHYy?K+ijG^eFB;3*;x89TPhB%KD zQ{j1-R?;Z11FkqW2y~F&;L*W>wLHxa2CaXgiN)?txUvDQqK@qz^*q@|*)s}!Juw0U zhAoqLDw_1g*>z**EZ+5+DA>f4# zv{9o>oUnKOx2f8h%R>9|ye_Frg!%N!{@HnKeYWHtVn)wx(yy-c zh*)fo-W(|#wBGdq2#syZ;k(^-056)wyh>R4`+V1_Dr>-E|3A7`;@jk-d}tcglicQb zy72G|y%_I@ad`hOmak1N@z0$#TT*jGoMS&TX~@K&JPBRDGa4xAuG4PhE84_2$ns(HTwE4+a_ozSp#> zAUlO!O9^dr2NSa3J(WyZveb0uJTJvdMxURwvm;?o=h}4`kO~yg|5+|unW4LS%nEgkh~pWQ{u4vF(Ni1}u!1|ix`2K*_HUE^Z_4;z z2v+I9)d(qF2rdAH-DoOjOF}ZZf`iSjME@;4moct?VmvqD=(=$$slpf=L3>pz?#H4^ zC873n3GNakdt*R$3$Lg^IZ*_iI^9P?@YmdzF92{I6mbc`IAuR%7Zj38BQPnq$Ap4y zWt~WJZq1UzW65h`?`@p_cd#xjO^6x2G`e0!e@W%QUGR9JHFR;SWN_0)*P;u=x*Zl+ zWsWHxl|IT0+&|m;x_YKz+1m#kq$<^xJq_EMIw7$VJsya@k!*h-*bXxL=T z`zcypLIeVQ9m6C!#jP0P@>UZThVxku-7k&YN#vWC1`MCus(PGy z;+Aa)hLJH^N)LV&Mj)NLLU!W(xi^Y3SICiXTmLMk8?TK0pRr4IaF*Cv?0!Y?jLf7d zH6qT!4Yttd+`l&sP&X)v)IH5)NbbAlaT6w+Z4=8vY74uPISd8E@;UrHGtyS*r|EGc zVFtc0-cfV99v=@FJ^a)~p_oVfYxtiHw-Jr`+$5sjCil$AG0s13AA@;COpHeeFT^jQi$LZe9$|pM{{cw7a*Ffvj@9%?}1-jWPB?Z}t zdMf`HCao>Pe1RjOQbST0;!mf`f-;P9e}*Fd2~2n&iO#Kx{Fh znYj!*_jzP1{T{?^fhqwk@QNN1XSk?5`2SuR;#67P{OhSrg2x!osvWmvD!-L!30}Sq zCCc5r0@v6-2}y+Tg1esPJa+&GvXcSQ2TNzxpk8&tq2F&%eux*R$Wz=4=!jCeC?Tqh zO0KDCo9}mMy$oN1bHguVa=(aG#b6NAcTiG<{!#-cU|pv!C+4k`^xf}ctJV0CqQO}_ zp-k0u1wzNfno^pAQ~36qIt9G2JLg7<{2nu1*%w2yh!55!RAOiSm^7{FHzb;DAQNcZ z%FwfkuLZbYm=`E>+jxtQo(%{Veu-rIP1`{nnrUL_g_;X#%wFr4kz?01_4pxvyq2oF z>>8^5JvIctfZXi!0Oy#JwVNxjy>T`VQWJE(gU%M|z#E+*;hz{Gu)e|#Ltx%q^=$9Q z%gi4r0vp zVg|QgH$}0Jx23DqLdX*Ao24?vWkgqgxC0CuuMB`pGIYI_j#Gd!40Rn|eHd*LPN89O zoE1BRi5j5UzEz>h=UmoJGFI<_USnGk#5q37xzI5|z(UpHW-XGk5>EMmS|lUiWP#=i zJA6qrT!7lFXo+zEjt_PfE>GZ2!0vDNrB?O>#E-tC)EbSL`Z!=AUbC1TC^$dYXKm?l z1CUpIH^&2G=4JLghmDEQ(?#q;vhUM)L!Kq-=;f6^Vvt?npu0A0wCs1Lr6r;>P}2Sa zA6bg$Vf@2Z27E??GGXHGvh0Gd2toH0Px-yX5^VzJlODsS6~nICV{IJ$FXF#W;~oxz z?<9Q3FX=djF%DW%d}EJN={`1Xq<5VP%RmJSmH%>Xi%#P~bI0P)eX%YVw)X*Nq`T&V zYf)qTQbM~VreZ!T+wz%{-`DAb(zBWA*7n|$Xc-8nn|NH|dWy0Fp^(KmroUPwngQxEgn-!RAS+m+!xtvkFqvMJrfi5 z4j8ZTkoK>7`1>_i@C$w zA|LS82Hi&Qhp5_%xP@aQqcsGr9o!-6<%Tpw)g!HuGaU>D&aAn4XE0UGTb@LfufcdP zFeT^Viw4o_HZ~cJ`ei&&5~sL=>oqdTag$xasxB-T@L|j^AByt9qPZP%>*lNNAVogw zZxUb5dsBYJCCWXX7lm2uzy74_g;vA{LHVFaGM=_)3IBsLCubH{?iz)mDsm6U4*cM9 znMdPc>}zCxG6^Kg)Odv@)1Cs$QsEnx78$O`umo1xMOtke;qh<4DO?O(XlL5M2!nWA2V|Y>rQNx_w zgPJR@Z{t+)rH+_4S9dbVP5|OSZx$Y?_#c&`flh&*YuRj>5z(!hP@=k_z=(_SEj&*Qtb%F$#WB*?#!ZZSr;okt)xAq!}u<``O{Y`2eR>774Zmq3xddvkq^Yp)9Cm zA9Ydgv@K>6w*f#+UZ@%pxhV=C)5>~qJ|7HZU)yh}{a~-aka^Gh3BY9sC$2g!EIlCh z-b4AlR$y68Jk-;EJRGKZ@^r~myPtA;D+FHr2JGSGOV6voVquge&|7wr^u+&AG(+Du z7FI~ERIgiJ&)UdNrsk=vCPmFbi|rd`;zwJieD z36ZJs75%TQcURd{)rFTX?i`jfU!8x!w}+!~(ebRD4JrKd^{2L12lD;b|6cR?r@Lr^nC z(UugZz31t>NjDgsJ+WT6sn)Qtr@w~!-EV?Kg3PoL)WrGJya*QkXvTr$y!O^b?oA27 z1ELsv83agOFD&Ey>!wIY#>(6pBksO{nt+PT#`SB)e<2G?Sw?%NZ`U|_={NPyqqP{M zrTpF6h4o+5VhnFz^%8c``>;IW5S3qghxC(i^u#!BBnVop;Im^0Y)Rm5E@Pihc740&0`79%;|B{H zT1FAexnDbiX&C@FGLRfXu2;&C7)I19MJ5V-rZSFessW@Y(Y(%RK*qMD zQ?b(%hS{nK_y|uHf5uGw&w95|zcZz~N5ma}N4D_)7r-Nr$7!i)z29-~hg3CK<8BAh zm2d}1erci8f(=gWWG~v_RD7WYY6_l(v=w@()pb(XR5OX9BnvJLTp3O{Z zWIb9HQ&_*__buXy(;6NeISb7lean2<2ld?ECw=3z(MC6N*|OC zz3FT;f&R0ai?$G5&4YS>3bkG|mL2!|Z9KQBd^B`g2&_9jy~EKxF!7dZ{GRyRNwbXh zvkj7&I7SE42l|zIU_wx>EF|H)2jY@itP^(R_8UZ)qWc~#B-t22w$i4}qzh#C#aB>Q zGmQ;C3aV5+2s>5-c@Sh;owo7kf7!Ok@JAO954DK+6?$b$hS;+tJjad$VyBTkNxYCf z9PqmM;q+;5c_|8Lr_8_iH-jnT6&lQ;+!CmSU6awJa8;OkB<f`YmdF~HaJD^+`O=w1MVaWjx10VfAnT4e|B!SvDD>9J_V}-;H3rV+GKSN1MKTEKm z%}6x?tA}4DK4o_ew~$YGOT`~TeU34rpM~L);|MO{cWK&kPYzk?Od6N|m3aGz(VqW5 zIC#uYBqGA$d82+xOOi^K53-vzZ^3LaEI?GqM{rC=`Qt7%_G&1)0CQ^JivSo9 zhR5GJcs|>H*QYlvct+(p8wWgV&P}vib&F2zGX#0ewGyDvkmx#5DUKAlmO4pBMmh^N zp7o*OM&-R6>^bH3QycG`%pKLAMrQFX2aB8$VraDD846tQE6`5nD$y4Y%aQN+?jb;n zu+V`YyJQZE?K!J=5BcpX{LK%7WX41mQF)C~zR$0it!6>|ewd#u>Kn*__YljwfBG7c zP7}*H4Js-BYK?TF5dR)Z;?QBJbwQbY9(6Qpq+Z2?9-4uZ-uO*V1dhqh_-g+TwCjdi z#=`n8kAI8QXPYm%{~b_}oD(&g)k?zsHh-XGvd(O4Z#sL{=vHV*cvGjg>D=&Nh1&CI z8K+BqqcPq^;GGqzg78uLjK@gCOFz84IR#KKJQCC6R1*AF;=cy76=T72bsaP25;5<{ zF#txAK+j2nk>?%#wtcO6a|yN0;E0`6*lq9gOTIC(EnJqu;U#M7rzQx|K))iL9w^mdG2O12}MP|#da1{7`O z`88`dSHX3@xw02?TYT1ti~wIdYRPOmFjNm=ojhQ`$6>?eHx2Ki$gp9b{v$E65%Z$e z(*?L1`u3-0Pgk;N9g`jvFBv>WJ+&Z_pd0~$JQI9YYdp~tn?g01A0aIjMpTGV9hb~o z%KrxfWOseVppWY5GJ>x`tQF{tHR*&K?wo5?maJ~D2#1BSIz@tJj&5XF5u<2(8FWb^ z8lWXo;`mo5ym4e)VkoNHz&`t9ZB>`o7w$hrrGrl_l^aiJ+0%8WGNtLc;YF zB0^Cr(1)UgrzV;ht8&#tX@WIU{`u<64h}u+Ya~ub&-) z&;DW=n6cK7H6R}lL4d&RoV1r&$Q*zFF!B6z{@`)J&Nl(<4fy*Q_X<`N3tjL^xHiyrs#V$jh9=6X0E%(j9uz%h03fGR% zh;i^W5N-_77CI6{g&I4c1-=IaQzf46E6oa>h0gtSr_?=E* zAqyU0A{%_GQiqEDK*q$&1xdvnI`T9KQ#s%!^G1Y)`n^p16urLU*yHetu3at({e?&| z1wI|iquCG?yS3^NFa3-E0>U}PJHBd4j8$8CbmQ9aP<*&Lb4L(fO!R1YO{DsX5uX*w z#;^ZWdS0}t(glJdRh(u%-z7k~CvqY#U?cQgOBx>Sf~wyKcrBTbFlz`p1-!Je;FkvF zgh3n>oTr^b$t$d&Z_JxUyC9J4^~TZCFzq7Fw5m}(>U$)Y31o~CF!pZ9^g;HCn)H-O zFDTo&-IP@dC8a;76={kcPPEZgg@2+;dhC}7b?uN1#qtS{UOy(?u{LdH=*kp`&r8t_ zfVsoW7s-MzTU9FAZ>v2CH5~{F<9ZDOp5xA|`BoJ@IiFS-|Sb(I_57u8l;n+vM zPe~Dd@4SlLSpEsHEi`d1e?8Cq0m1q8?(P26mE?4~#6{rM-}tK7`9gAMukvyEGBwBY z#y>;>qd`w0!eecV5qAUq907Lzd6~g3K5V+hCc&K)@apPy0!tt7{6YK(4 z!ASc^M%|Sbm;l$8l%5=0UjF@hWK_8~m?Vr(bH3nUBKkbCp$n@SBD&v-QgHi$NxSK? zEr|~5vWAxR3jJiQ!Bs4()DkLN(2vDdrhf@EMM&b;JJ@k8Nxp*{vv&o&-nLRn#yN`v zOCT8|4QBSsD}EGReuO26xCaO|r@iXw{^_yndp(Nrp7!SsPS1DMRlWF;YOF&7(ErhD8d#0CEae$4k3X; zr#u23+NS~%M2$LuO>9CFm?CzCog&_dZ-xdC&WO!f4jP7V3;sUeRJ5cS0}*z-H|OX(DXTW z^x;%nW~5Pbyq)g(enrG@J9PGMfa2S#%wyziu4x;lu2NnGB)H79YDH4heZKjPWMf-! z^A*w!4T_kk9W6xKAmo&^rD=Qf0=y1T^!no}MPS%fn_?jz78+Rbt3i^YbGQEwC-na# z-$*WCmjXw;2Bbn|?#;gf(50A%AbQ+ePE~imZAc&^6@3~!>+^+U<@!}r)HlA|Cqb>; zZ$M(8&Q~J-!*hJ<#C%k#3SlW>X5gq&?rmp&^kCQaMa05_$DF+d6$n?xh$>`kbSAQ%O1 zo)AQ@1x}B=_(tJzi2p>nBkSFk9^Rbuh(FhNqmsH|kl-b^Xgf_2%ps;09DQsy1Ua!f z;kZEYg&%lNwK&*PzN_aosBY5pYlm{`ChfQ`vG7W?sT&_yp^lv{l(&BuKtO@?8siyO z?nDEO>|^S$eYt9<-So@5R#9Fq88#;Y<~SM0XO1|wW_t}2&uvbVO64jJl1(rJ;1U++ z@zHexl~^m9EVqeRR4%j*K)!^-k^3_xLh;;1kKhFJK2+ANGp#kGCudO{$RysEJRwuu{NHkyDVAnid0-BUx2KO>(fey`zNo~-e)BjyFCI(~i-WnQ?=y^TrgZg+d zq@r^s1TiYe_gmgHTLpHn0@Z8$7i(3sn}#10VTVIFe%Y{7GO$U|Cht?0eFc6?!$~1~j(;rT;TH#`^#5b2fnEaLV@N$l3`96w*s!)4(l%>Z04Gm4qX8mS! zEbLhwwDb3py{&-ARaM#T#TzGZmC^I!q0rfcF?{N9s5k0%Zl#ebXfsD2p)>su66NVE zE!X&bmkD*pASD_1wvXiTN~u2%q;FM2X7q2 zT-!0Iangce@ef%Z>UpN$rKO2hy*0?~ZyLZxhoi#S-MQxYvSVYMPPVFFD-wjP0TlOl zO5~u9Dlh2+8NT3LCmohU%7 zGDalPZL!`?{uqr-QO4Fz=XQbzQx$W5oAExlrL#nbB9A?2wt|NG7_UjWGwk(d1_U%X zk)L&FanbMr)c4yfnJdCk1+y+ST3P#Q$x3C_tnMMe<&TW(q_TEl7!$Ha;;d+dPA{ve zExt!2Sqyg|NA^cZK^eN!(Fy$g6{_aZ74=B-=DlSv|4c;fsCIwvJ)HBQH zUAERugKX-#0tjO6voSwnO7COm0@|#xBsWJ|FJi3&%+7kqLBxff7KL|Xqge{6f<}vu zvR@WFL@>^-YR1w@9=Nq)T#jffd*&JClxEPZE=feI26KBWPr zsWBU6-9gI`BT=^nLG29^;{>8|q=&TSn0^weW7I7b5uxDRtfGJ?TU2S<7t;As`)a46 zZ$jleA{S_&Q-bZIL^OI$h+cEZ5&f?qWoIX9WiTOY3r@DT72{0#*Tp7i3t{W#@_=m{ z1gXvO zibLXlrhDEm$@5Ia*x?wv?xI*GQy4|*y1TYC6q!KL2`n;Osmh|mU9M##E!_=*RTmf+ zhin@oh=%n{qG1lj!t!OR>PM7QtjTWa8qTX9hx9a8zFN)m-dLV$jfWI|ZiCrC z9WesJ-gB8KazVxS(t(x%iN#IanC!wN%^0DQVJxSsQ_@nPSZu0J}Rf}U^-Sna$gBSZ;7 z-s-TWmONMDJV5f#Ue8eiI6rqLpWk=4ilG>jxYHX7S7De>$}v!IQ$(S3-B+FfdxdPx_>3P7y0_w18Ki zg|0|&fR>c^dy%Hg`J~<34D;wrcN)9}?!Q?2uq-Tu;{uIWGIrvs70GW7 z$H8i`zC$4@0}^iRgCh*v*&}5wH_aeW-&5@-)wZyGZf68ZK$bB`DoH#38GT$Al3Z9DA`YxhH;izHsqqV!1`r>ts^IVpwl52W6 z6MIdZD0ZvS>Qen7NS$T;*u-4a>y0mGmX(OM;xt#{M*L-$^tJKLrvFH%?6<>eDBTm| z5l#^TAX%WhMv<4lGC>cKDky!z1cjrp;kB-`VUeg+#b|m3@~SemL-oa0&NksmqW0~q?8CHY;L5esxixaz=>IiKgh6>0+na`Z zIvdkWBgWJQj4vhmP?bL5)}ZIePfi4h%y!qK3lP~65jXSs#@!;YQiD1UF<02p`6{f1 zer6i=et@T|03F`Xy zUf#(Vl|9npxOo;qZA3G>C)osz%<;b6@J*k6@F}6Q7YUUvUmwFnApPpx7uCXkH#dB3 zg-kjx*UhxR1DUjy1Z{ocFb@qkvdfmFR~F<@z(yRsGo+{!|5a$NLLM}G$FfcF`c4js zzAPHA!Xs&NG zdod~5Zh@tJ|4LJMlvt)&XI-mg>?&v~j!y4Rpg4pmz|rvpQh4w4eYq!>h}gg6I?t^+eB?aVYs2 zU*MuRLR}Mf$I4D~V9%{rgwnTRU|)d8km(5n$NxIn6G8JR`!G_G57>Pfx#s;lyf;aV zbQ6|YNE8ng-0)d$RyK~LYFyqXkj|SyNa%{}WwDAg=Ypgl-nWEwpQ>%a@~HN(Z3%jN z@n+Gjy;zA*U01k$sZ6p7Ptf9b_%SG#Wq$2H^DUtc%AuvCZ{7gLW#&xGlcH;mcJVJo zsg8B_(4fswe5?7FIF1iv>Yfk|^j{7vp7yi|3aPf3n38}!yI)ej0e)2BrP%>i0Dh-gYFW~0p%bW6-3QJ%`73E@u}I~IYXbUD zpPCjdj2lD7qnpV76_;hxEBb87^oYp+6B08iby7+3Ps9INFr^5z^l^y~E7!E|O@+@H z69ajJjR79IX|Ya3O>1Lpn3>cC-N?m~<*Yv5P`Q*`t4;3xI>!$e>40CrhBHhUUOm2{ z*rypq`p z=4td#%FCw#{&-KeR6nN>UoD&9IA4{6INzhos{)ezcp2?YOVIt)7e}B5#a^gz?=>Oe z1}D9Uus|j_?UQDqefZ4%bV6=Y4B*jlvoHaPu{>-6v-S^44Ma!Og3EwSBQy~I1aj`X zEJ@Oc)rJvPA@^r=6CxTqm6+uP?b(WlC#Bv{LBh6mcYLQlariUh&9~v?a#Z{jc-~i0 zL<%iA0-*@iG_p}F#(rvH9JA@%b;yL%r|PnXDGTV~aToUq7GA-G zJP?4usq9Do4#E0w@LENhWLlT&B2bf(r)7hy<4IazMIx;Zd78MZ?`bqsxlE?{BqpH)}?6&x$yC&tAlI$l}n~K;h$wruh z88Op!LxXp4nRd*^aQ<`TPp*>X`=@x)ns7d?5EhA^N@D`9MZjZbYht<u8lp8wWqRlPAkr8y?DC^iL_Ne>R>2avua6%;hdsI#iR}3k6^B}R(O9&UajzEDB zti0RY48o#D0`?9sDl)pNvyvj8_Q|HfTU#DzL`dM>Bg2VsKqPoL_>d5@%m9cSvO*9p zwS;-(V7a?xz1u%O&$ah~mq1|&?XZ!<%o%TdY2JIgG~|5eAga7Qf|%5p%6Lf91M(P% zNVC44zBGn8sP6~8Zsa{vddi>_>1pMH#?5FF#!0YL9!uSM?|XEReY20(AkA>PD~<|X*X-v3(63VO{98b%4Nr<`lI zz44e&%-suI9i{szy%}P`>h8C`t)vP1IRcIry4h5QNv^XJQkL(ON9nT_HrN-cYMWS( zsC)B)IX7BVj0j1Nl3q`1MZaFZV|PyV#f{4kMsXXhE3XwcFym2}fIAP%yB9JO8s7ld zk2&*Z@vEA|LmGNf>OYn7nAyYSV3z9Fr;9J-=Pv_oE7?@_XogQ)TzOP~VXIl18srOG z`VmE;CB?DYw0Wv8)p5WX=z@cgZ0DuV#>Dbc(vbR|SZtpM36bA(px)*j;X8hyH9v9J zP^N-L%HLB6%0G(1;3=|YFnyc!JyE0{=eHTMJS!*vT2V^yi&G%F#P%O_uxpN`qj%v` zD$C1;D7@Pyml59&7smTm_plOtWR{Hzfs~*mw$Th78&iqL5T0Eh^MDem`z7DZN6qMi ztV01atDCHk(oTQn(fb?R8#rbiv91YEE>7k1)Yj(>9(n<+1Wxno58&&}~ehkD@Mf+Z> z<-9*O{{DmaEALDDa~UvF11w|lj5ckf@IUzqUSDGb@%drrlp$?z@m}IIL7^^Smajg39;2VA zvlwO3VWF{(&1J{JPp@s8#hg2n_yxP(R(m~JaZD%A<=IBgCT_lXl2o?0$wVgjThM(K z%k`y5>;}w?_XS}xckO3;rUR9kU`spX(J)R552KgaB6Pf;+A(BKKKRaVkf-8*` z&MSuYmH12&!IAm5IRP_9vmpa$3jCA3$52l_FpiL4#@}jQ6e6Vg68H2ZmYal=Jaju| zlbsp%ym>XSvM(74M7Y)|?P1HKmm(Q5Dq_E#r~AwyBDx%~>lYajQT5nJLhoFPPN8a# z%EkNrLcsoJr2_Q^55S_cX_D$gZ;h$E?KXj6b>|f93_5Yxu5GGlHsL{YOkKp;Vh#$G zrv?`9M_@-LpPUu17gA@v-wOo19k{FX~zv-gs{xEW8UxOw*6SdRN9N9{I(pL`?<33_<33U1GLt zVMt}^q5&ttADQ! z4xyI|tL%cAmoFL(-M)yEC!ttHrwn)B&(IL@W>sql9x4Icd3uunQEtZV(0X}Wh&3*?eFk}8dcv7+SH3L#8bYZZpz)`R|3?J# zMXiVlCHGx6i$@TpeSwv61^-mZ9=x#Vj zc-=xjpigpfMbt@U0lPUAGHJq)h*3~}Knpx!^w>2}@xk4H(t_e1cI^qv2X(s-xwF0_Ql&V#NEC`4ZbrA$*Vsl!cj>78dh;JWqs?m;z1Z7Y)eYYbN4Y7PS z1>hCm5c6vBI~4)OE}~NbAg?wo@+!C0;+(T(#(WIe8;q8Rma*YLae9uDyLXkM22E0& z%Y3ofDr1V{((80_wttyBER^h86`YAo@)!K)a_?08-wqvgG>k! zudoJh`yN|(IurQgJl{rOwwRyX^aS-6k@bqa8|!?AJB4Ah(Ahf05UT8U5LMjK(+^*} zp<}&UeYt#)6XPXi51b#j!ne$${&U>eM>Bvx1tQqZYuG#AO;-du z+Uk~+T6d>2ei(kL+JdiVmmi`fiQQKO#2Rq#^%)XuTg$IL$@IyZt@ED%;vcWz!BcWG zYzw;iXVbkR+Ft(tCO5f$8a1NujCz=2fiZa3&HM&m@IcVBpjnhBW2|Y7L6n}(I514p zoQW3N#=ld~-G)bQoQJK5cGSR%0U3L+W?5nSMgn7nl9xQ-hDhZZU>MSOyN<|)wekde zsHzOOE+*23ul=sYN6ehT3Ig8f<^M(2ePt6U=t?m;Jcs%c5Qp>j&y7DS20adPi6v!% z+*wQk+)N>OTr6GMk#za8BI=ZMqU}!4ff1zyT<=SPd1a^R=p!TXW+n0XiBrclH`BhX zp(6q}97Gr{&N(-5&M(-gD?X5!=;fqDy~<9;{ikxlJJWXXRApz-d+PYI5@W`s4S@t%|BMoaas^kbJsmRnrPHy|V zVxpKKA{6@h(@T@U96EmFHF&QQTCveC`!!KUb!NAA5bLF-6}^5ML(FGehQ>NLggK#H zvn?bdrnS)77A93a{uxq*3)o?xqq(w6Jq%oSutPCd%*Hv-R+6!%M4@t}?z|+jhCWPt zLIr*;Pr|m}V!J!-b6*)mVjS$VMKegB#hf7krL2jG8NV6lJ&9lHZ;trLdO=_!%B}T*hLG%FPO07?P2WSUw&Llf1QF7>xB$sF1Pl z1c0=55ZoFcIy5@eb&WbMMujaZA^{M2(C(ueyk4Q8F*DFJ`zCsp_+(tVKHiA4*sR%A zy9=;>(TL9P{gVP5ez;i-1&lu-#Z3YEQ;N&-D$PMofJ7Mj1= zh?BH9FF(+bvy^*z_VZsNFZM|b7p1DcX z8lQ}2N*iXZja~v2?yUvkK4zg6>L)NBgS%Z%e89*2WYZrKW=Ki1z=-O&=uchRnH8$f zfKt}SH?PPhi2w&VYQQnK-#u!nfFc*hL@g}3meE_voBde7bHQr0kHZwA-U(bw;m2~t zK$=ayI3W`qc#8gz-;E(1<7KH!j+Ev?Q9BTI4r7UnKb-YJ-XBxd)N9A>u1$?U9}GeL%-)0)c9YnnKSgpJEoL7q-M< z?{R(EUn7f?IUKOMq}whZw|K(VuD4&uwoyF|S0AlGEZQKMu9=cU4baBEtfT#taD%Rw zYCzb@;J>ay-tx1TKxSPX%$>r2B;%opl5jZ2Y*%Sg zO(a}mz!7c-IBHTJOJr`!Cs_*B--aF4tH>|M#lsNfSW0xTo1LEo?8zU^tFi9+4^cXsmZ3MB_sJC*bZ$0KMiO7HOaB-1b2%}!8aGjKe>kPL+k-~eTp|f{>aU5fiB3GU)x=|YN0&C~ zMzF0r$lI4)Hl&u4b1U6UQO5<=^&-vGSah z66>v!CcVvti_E$n>-#ELT{v1kL=f`aHJmm#Ax7QOs7Py*(ETLs-knuFmwxAl4tR5F zKyitCa!#Gj&Cd(u@4fD9F_``qQb<5`3s+CPhqTOJL>fED)70T&rE(r{Io>sXGP@5_ z7!oL@ayW>mZDk=MlME9z@7V~?KWG>~0i9n;1iFsFeoZPR$Eq{UBNfGj;B;${j-u}j z&(!u)48N$#(G!bx7M)!u8`BYt1u2OLQJu-EOGWYVU&Iy@U$#;Oagjw)9de zA(O z4%Rl++13GwmZc1Oxlz8zdb7Qo&Zl}csropFM9L@4_M6O@g>;FImzud>F7QE2bnWmW z1QOjE$mw1538%Q4lw8eq&cZ)s*IOoTsR-z!%tShrRNB}n8){|-HAk`3bWEAsUGmTv zlN2ZR?dwc_;+fQ*{SCG~Q)TF~Sr}sF_GJMJO3l#`&@Ns|s}e5^8zthbzwT1+hzeN+ zP<)L}m5sJ~QaU_S_r_D?b>SFM%ChsT*l7#K9&~XZx=z#xr0CJ;B0Z_}OM3TUP+GTuHw~Y< zn+_$h+Xkv8Ar!lei|q?x2P*Zo(5Z;OPQgqXCgCcVUSzf=Q!(XL9cxfQEIUg(Kado%DP9Fs$=f97xwDSnhzfL>Tqhb$$uEEB4F+D^PNR8l#w+b#W!D~YPRWqhX z`+v5cZnNswL3pbThSrIVCE}m)&?j$EWRoZL$k!*fj_1 z7UrjfLyol8|2`QMynH7jqLnLZF)4JNEk{LFiHOn6UkrFrQRigA{or6O4jetr?9W{= zjSyT&9L-5avdqwE2em$*{~hg`e&~^x83%&xW4014@yPQH@|C+Mf_&RCWk zJeOBQJx|51`2<`-55tG`vYTAsdm@aIA%x_7F$oxD+{el>$5!c6W2WJD&5h5#bpGd=DprP3*rRF=%<*1$ z;`pmi@vHU^Whlh>e}?F^1$rLT*Vl%A#tT=lT}Q5kDJ+j1N#u9z&6j$qf%#C=4Era9 zTy;&@r;m8#AHjJn4vVM0BlY*{BD$NAQS5y=&^_>wF?jm&Rv}zho?k?wmplxyt9H$; z+l{BJkaBY33D6o^eL?nbqjo%JTQ3b)R9g`>$;BLtcB8j0gRJnK^m;%7a{x$I`g|`| z7P>OQ^1b8Q+1{@q%Z&3CZ)fk;_Sk~IzNT{s9@(Kwz}iPwJYQzM?-^CQb*42c;qS*n z!o})-A)dd>Y~7`wYzv5OdQ zQ55EX5X^9DQk2i~oh2%WQoB~u(M3$J88ExBB#Y8_r(;cLJPr&U zqJB%WiW=_A%`u}MT=4@ET!7jW7f$XOPJ_73d&aG=u2S2n#r@bL zi3VDUe)-XHe-LOFd@3|<19eon>ec0x+L)^=$WXRGYL!46N|C_)CtK^~XcS}UGMBRa zm%?4=6ownzEvW|{E9rtRapDT>Z$7%dZ(lG_ime}=F*M*Ki3l*QFAq@yYnEx=eYh(@ z07foC3}D0ijLc4d;g_f{x;;ngz1C7$xhKTyiG;8ZUhmHr`wu&5-$7<+pZO)$$pst^ z_0ETYCKS-lssQl^R|HR5)=0BJFG+4%LNDX@5ASN3RW)lMcfL^+5tZ{js;MT^t3N)t ziGA+w7$iUMVpWs1NfD7ED*W>wu%7v-R#MBzpal}@Bo7wdk}~e4C`nN2$a57Ji49P6rEQd~%k4K9@QmoqpUPole91=5 z!86k7xF_E?!evUZGXk6N)QaLju6QAtIVaNVynNjFkQHS=VKxTuq8If!CR>k3xI~9L z**9JHX&6g}`KPTqi%yuFY25M3RK1&Xr)PwTGAdKdm-wBr{ters)Vg@Ytu!0+C~X}A zMt@b7)UeO-mWj$sf&E+pcDSJDNehB#${$qTu6o z$^_@8XM|zkna(%sL@bza#Q?c%Sz4p&NeP$@ycTgG($+2SKZ`T9&AI<5fzwDHCPeGc z)M#+Y#|wqkajwX{-EU%rBGQtd!bQChcj0AvD^7@42NRL`9lXI?LjAk~c)2EU4aS}* zgtZ^oVj^Kvu-)HZ0ZQsVy8#D-3+va*YwT}GVww1OGG+2$b7pX6ug2w)rLSgPsfOuBAb$5TSm9GWeQD0cVcZ=h zJ&nsy07rTh{Jz8;PF%yN4}lOa^(>S@Gsgm;YT!fYb_lN|l>=m<>M4rJ9+E?|tx2!Zu`JpTtJ% z)XKl0M^2g)ll~Ic285+lPp5{q2Q6Z@TrEPz3@4ghbE2&?6O0u(`&-Z4h7pH&p?a*X z`hw@pO(NIlrO4y>MjQRnI3f>)kGT*C=9^)_W?-e?DfHzuVDGrF~dSTT1 zqc8m7Gv;OkPsZn`#&$B5Bq_*;^CMp_{_0bjbew76s%2}dQxL^-d$MlBV+F*zO)+9j zC2ClQ=)qY+3CCd4c#$E|!z69QC=Bk=!6~uhZ3pnsiIp+u!>5NtW+NYv%V%Ux`5Mn> zS2@E*_nUmyv?2_oVZY!V)DsXHdG!YDr5f_4CO7y(5zF203$!iK>2LCJR zJ$RweL}&CS+tknR;o{*L5E|UnY)g+gdTfTNWLULQavg5`F_baNY^XP-JRSU-j?A|fe=ATr=&6fUnknb-etN!ncXuF+f-eHnqbLf87EbqT=N%jA5nuAT0 zPMcPQSUwhSR}}_KTI_yHmnbc2!ImmAMxj;fl{;J9??Y@b(2{kw0aFNv<}RXD%%>`e z`x}upM^=I*I1bFFw*`%b9aN_`KU69yuqr9Eg@<0Rn!Jp-#^as7vl_BXtq>8uduNw2 zWRhm@U!}i7IoCw(Z>;KXFrZptaWjF9xle+Y3Ff*_+LgLlQzT>&F-_Yq84qV9R zZSWwVV;Ru@5D35Vnhv`6l2}sRMfg97S@k7xa8@Q!IM9k4fGn#rYR`!y*KVRt5*2=q z%(85lX?g=wcg)@)0#~x~rVJgRUCgQvV-yY@zId_+Wb(+;8@nez$pTQ>rR!6!L#M$^ z){XbqbxVi|kVT?g2uzhB0-2k#-(ggiL0qSg0eiFljfuE*7b!}0?V?k|^OtBtqd$`! z8?Z4n6Sr8{tKn7tg5AdT$`_(98!;Ya7Fz^NwBqULCJJ-e3g0@tv3m5IG0Ui$M6-xx zCOWE+qBOHkt@wDk!{p}K|7e?ucDIOw9mT8uYLj7J{Y)4wgIz!ZA|X!w9fC+{?0d_I zjQ6{}Is?z@zrz->Z2+deN!ppdQi?#a8O4!lz8O>Xm;jsf52$12b%IbD8QX6!P?Ft0<%RpsA<8XlL%-4U?=3~ISeSjevH1kwUKCapX9l`D8CmRXgA6h0PQEA42w^ z5m&chL}_kI*O4dK#-D~*Z`9~YXf1;j%HiF=^;1?4{@K_m1?Fp(9;eYlq=TcwIW_mp z*)cDj9O4VMo&;x%$lLL^%}r0m*>QN!S^T2T6Vb&&6!kXImTx$5!n+SGKHoMu{#!8a!V%d<{N7L8I{i1q=>|aZv=eC`zIu3lEdiM)UVrG| z3H!4n!7y`i+Th6^kt4~aZW~euy~f2D;()y^>r)7kk}VZQ;~DUJ(_rwktV#yY*pH6W zk-Mqp5fkw(_sRVU^oY!M3F;ofTi_4(Vku}XWd)av1A~p|REcumhc=*t)k)=B3gd6N zRk1J9t?&?u-&YBu!RL_8l#nmz*c2ieyF^h(G0!5QkFV4{wL;TpRb6pet*hnvDvo5i=!)Z}JAi zlz;HlFk2SrABPG5f!H>@1aLtBlhaeG@a96_D6*DTh>Cys1 zrD*>>+xaLy<9J3*`bS_Em%p}*=I7|oJwI~=z~1g45$q;EdtqTH;#=rK{o#*pL6Nj% z6&|}xBe)%#AVzNl8H#H!8Qjz+e8!ufc_MJ4#l2*pTT{otvcC0(Y00kJMA{H3uD(W+ z64R3UlGX@cFC^TVIWHc_eL5(2r1Hc#SP7&pz)L-o1e+T2^{0h(7?;?dB9vdeEd${? z?)@pg0EokecqB9#-r;k=@G)aNBq`sTlDeOOQ8u%8m~;PUhlrSoem@Wp`5D(-Gchf+ zW=ft`rtL@!08a^=U)7(B#Q!ODDKrCSH_2I*+nB4Gh*Qv79xW(M^!Cq|PeYX}1I4_jdEfGU(CL-^M{6j1iA0TtD z<^shu;{pug)&AW6IV49+Zie%)Wxk1Cl`}FKFk5_sUj0s(z98&I>Jl_1Xw&gJHsB9^ z2TSL}m^u1A(Ak-8GN||6Ocyt*je2V(0qFcC4WNmwx2mXM_tF9`ekH2kyyfDN zoolPGI4jZw(8^LZR=j2?x-DPSlgEa0wZJGk+%QGb@Oj_%h&B_L5;Q)HMHIX`>)_O`rG4rDcm~vXC+0S@CMnAyOgazwR&M5-E+q~x z#M-uY0&19*MoykK^8Qm@wNR#Biw3&9qHJ=m9>aF4*xk~R=2FSOiz9g?0RS(J3v~qv zTMu;_Uhs2)9zE2Bre3yM@LeK&^GKeU**IlJ0p#qv_x!RvHWay;&7JCR5nXU(63B|?_ad)w#hk78(KxEPJl7eSjrg7F0+w%5?nnJ(`{p$ z&RcuT0=VA(=$S8wX907oW?Q9Bl$($%i7o*aKuc}0CekQQWrp|uRvS7m`jCLT3uMkw z)wDl_Ik| z3frG{`uvup!0V~d>`%G!#h=cBtIu>i)Mzb=CsjU2b_-nJQq^o8CXCRk-0iw5p(})URXGB=g@Y~P9un=d=1ZJ{xfBTylxL9QvY3@@E>BXE6EJ7 zTWBj24iOg~nIPX@}8wQt56ktZV)r^|La zV2j|RU*Kc6k5$%V0Pq`zY@oe1jL#nEL(qv_5)BQK2dMyp?e%m@`H?jRs#9Om`wYO#sQyAWt?@`=E9z@-=oor>hU|09g$c7Qe zVoZM25j_$Ln;EO#qLNYIPzDX3nQ~vx|JeWm02%;500A%nKmZQ`126&r00000?g3>$ l00ICB0s#RE0ssR58B}O#b0BGRAa77Gy8t`?vJh7bkZlOoIX|g+udT4N&pN@ z3;+Ot5qkiDfPnwu9QYXw4h#V`a67>N43HQ=0015cK;VB4@*n5<|1JnnTtGy?_x}#) z{>Or`QXn9Jg$jrIFGn$R@pQ0qU?TW02l#(c{6Dn#uSB!7Fmd`%^!>j;1ONmF{~rec z-q_y83Gn}U_ejt zQ6{W1c9t7+XrRsvPiaV@j-#WV8~y~tT%R|tOA^Zgq=z}IVxTwE?1Tu`0z5b2AAA3O zPC_=zy`u#LJP05nVV34!YjG$@ZyN?h7E%yuSb_ySD3Di%cgIm{spah#=&z!AM{w+w zTlxlkLjs7ftPPwOMsBZQAM)M0M*@&wT`l!y z|4V?-%=?3Hg>KUblR&_0ya`I8ckZ}Q3s400?itJX0h?GM_F@yk)0_WsBJS7r-aZFs zuNDxSQfbn8sBLD6bW@>Os}gA5c<}6s`bgU>BfmPNaS_FLw?=m2LRb^EX(=&>4>{tf zhYa8ce)W8?`&3~}(bvEg+H`Yt{^SZ_e=H;ZU{X^v zY(3PXqw$IF&fJ<=4(-V$d?BEwX}o2SMry&~Nl@eH^=RZR$?L4m9el34_rBQ`^72p2 zAUcu}f2BfT@p&9!!RIL6^j|ZxGd|HB=!lSB99L^Dv*>YK#s))1z=N8TT!(IpqfMyz z?qV?U&27KykRxdeNE=zlwNX=VC49A;ISf*usmqL$9VNvKEx4E?*_5G3Rf zP>3~phK5srszJ0(F*b3|K_g70x`%^GC$y25i|a?<1rUrqO$JK7Jfu(QTVN56FQiU7 z@Hflw)#-65e4{G}<6AsQjI68f2Vv`64_HU`I$)MK>RICunw5HMYK>GQK5&F#EYe69RecZ`Lps~c7EpT4!xXr==1FPH>t2)gEiuKHF0Yw<7XP}=+qpGvo< zrx4HK`zD&WwkDIF`co-8l5^g@TbSHsci<(s%bWd1lD(&1M|FI38X@WsDg4*i6tdfm z(9@mRNMBC@{t46U-o6bQ#as}dwSE8rZKjT{Qh@(;TJ&6+rz-~En8Gj=380izaKTCe zu)bgZUD-^3f}Ss0jeasf5y@}K`4!Srx-~XHpclD*gIz4MPd@)WNj{VEeOa(ROeugK zQa7HUhm4BZm;&yCK1s{wnG!ECktNnQfgF3*NXQGD`>(B^FIEg!K=(c)+=qbo5Y8U_ zVhxdg9Keq^NE*eM_k))!K^}PluL&gxJu|=E-a95_)5Z0%<=aQhz$wS`r5js?^-`2b z0zm0&yJ%sXAeFCSje-HH_w!{`H_X;|0&D$t8`x=&3u538+t-6IueGUIJz|kY0opA! z2KYU_TlTp09m&F>zaHbvj!2oU#H)Dd{SVXC4v7R8yMiZpXRD%tKHqo=aB_5Br0|;9 z*lG3I(BTHOGaCB$)ncR;fO&Aw|%=R&(#Rfh&;#W;f^E@dS^`CIRMe_-Z^Dnjv!yhg%f1L zBRkiauy47y2~h661x?E+6@osmgYFPGtiK#CX(+d7)#lS^G-zysH_0Vp4l>@#2=F4G zYvbZKF0SgD$+;p|^NWX(pn>~9XXfw4$CP6qC)0D&N{k#@h1`-<#0jivD@!X zhbCo?qCa0ykdUPXsvoHV%<{`U6f8~49pcC9MSFPvH=&Yw3bdy1Di*)i-W!<+GE_an zeOU>ve}3HEO4*G+@AM|vJmk_+Dee{S(mvYmw$&tR%nT)Opa%k_nSMMrRFxv#Os_Ia zh?VIOb2b%@{xm|NlayXOOmsY*&9~9E+}aSjRei>JvQf3E9Yls{Zt^IRp)5pocOeMbB(ZKOS(wpOf7hN~+O^ zOuiW_>$Dq6HOdS1TfFiiE3K+&cdO;@rLf}JvHjAwhHo0k0E7f`F#UG2=OTvD$ezA< zHuBdXAqwsN^!h-Gf#?;V?7Xv$?w?zXO0ST_S#m{h=IWKB?Q7}-mG~)a4k$r*#53?< zeF7`h9@hjbka90(CY8%lWH_cJnd$=Ns|UbJX+0I{OSpXN!TbgQT#>4!?rWA7hL$NfnQgowXG5e-2cJ)&M5n5IB3*Sbj1#*TgJz$=A>?+19-7qk);Jw4r#EUYUZP8l?ao(4#PSqL?m7|o zU}S5+hLOWYWMcUOz2vJ^{;QjFJC}Z+HwKCnVyMp<1}6gAu5U;36rp zdCWcXZ)+_4R5D*hfIWlljQI{cRM^OOPw>@BwC|kmsC?74*9EJljP0H)`?ExTz16{{ zaxYu`mS-9G$z7_8I%%$`;(Dv~x<$CXy=am#tUg7k+(hn`Bc#eYZ`6>&5Eyh2tGDo) zau6OO<`e6nwEV!%N$;fALDeGi1hCfL%*O8hi@Kj^V?QSBQArAdf?zHsApz+y$$TzU?8wx5~qP?usKZ}zX*Y}S7!#B3ep>-C({ zf~iA|xi?eXX(Yjq(8$|BRA8KfMJ07j&`Dfa3M0_9O`}WhTUHA;7xR(Gry*imz z9~iKx4KkH$p*W=#vlVeiksaF&;;W>(>kTA6=Xr<~PL@sJ@whb9ng#f1WBNf_sc!Zk zIxBb_b>mGzv(0s_0O}~d$@X9Fyh;deC;dSR#nF|U*j!UL%+PF==Y^>#=qkO;(iC(} z7!K%xRuuG~VCFm8g|I=ol}1>2^zSx9N%tb$s%~>4(wyEW6MWJqjyr0;Hy|#z@Qn`Q zl4Qf)tCAuErdA~{Iy^ehjRy1H`b#a$r2_Tdxs)ehXPu#|MGtC=vP3TnW8*_1M!`oy!QpX4g2O1VpGstbvb-3R3ylas)k# zO2rshfFrB(7crclontumkni zdo#~g^3Oh_N`b{Oe944GF0Rzp{(DBU>YPUMxEWOlE5YU9IaMoTl#%MsyHf;HoRIve zZkPVlwrP6G-$ORubr{h=#xQ2Qy zK#cX`fj0DSrZs+LVeQHsVC`6FrxmWbQ8lL8iN?5>U;i}O3ihT@2<4p4xqclm_IncK z@8a(YPxdfpxJY1Urvaqai+>Z9Ds6UG$>xY7Jk57<4(p-cuRx1917@4%lp;YCVg=(t zP*N~2u%ZOGUyHTv+gmi`ktKIid{ga{;Grg()Q;WGFv;QF)S3`Ts}1Fu!m(Epxoyj% zvG!9kdch_{bAo`2x!P3b`Rb>V0S60cpjcUZ?>v893Xw7E1tV9IvZzy_HS85vV`#XT z7RTKoY3o600`FXV7><@Jr34qB)iKk|`Xs5yCkU7aiTb9$t;2(3F`cE1Qyn3lS?8~7 z4m+CkfiZ442(hd~XnkL@VxqNaZHZ`jeXK`-R~PG@nw4LhQ?TKTT{L@sud#>he%T4v z;dkjh#ZVkc;mUqejJ9l$n-rI=u;b@qLUbUCzYfEFJ67aV+KP12V6dK}ge%+IG=N(7 zBUCnu@33G%aF zFJW{}rQ3RRz*&a*HDmoa*?W?ZfY2xr)PZVQy(yi6Wc|X>t7z(F>4^=n`ZDrCGg8`d;Khvt#Dx#w_4Etyb@Q*-Pe;cl&}3 zs7eMz%+@MOcR7U|-k^1H;?DRVujp^&>xHpy?{}e|;8EY90lT<8ytZrI3F3rCDW5F< zs6Zbt54;S=jXt3K%fDJ07v=x#4#h`+0D%+aMcB)vp#`;-hAi z7*{d2(&@cZLV+m;pP&VlsQ7ErtEcu}e-~!^Z|FSs<|FuTG3GGUKtG~qGcQp@UER+Z ztf}_%Iw#r7@VMB=CLT~t9TULci;6!fxtt=6Jf`p&6)2oCB`kO`6Cumn*l7;}xy4~R zn|dF*?UrlmdaE5{vytGo6&Mvmf_BdbkJY4I;QrI5%9XLYi*ZLkLa6#xB}I0=5I&}4 z93ZTQ(fwkU;+k6DDn;ui3Izcm=3?V0vI}s5+57%sjezJZW>lF}GBMgJqt|(RjLK{M zfpmN(M_oIa2ZnAU~;HnfGli$hy<^C<@ovlqHb}p%Ib%NbnhYbXk>0xe1A0yo$i|M|>Pkl>CU1pk`0Vry<~wUp^4NXY75jl#*FW#1YH`g>3}*7o;f3&kR=&v? z;f5((haW1R%764x5-NR1rSI&)t-#n>gDn3RRg|fR z=@qy2S-KzL4RxC^1D_6^U?f_tmA@_Fq;#==SYbBGggB@VLI`E!9#3F+$_sPd)Y z(n0DW0B~0L2Kp;KtR< zbPq0RdgBPYpG?nM@Qk$&>i0SdmiFd3VX&S`cG#)NN9>l#7<>d}OM<<4j}KaxXhF`% zAc3mo$E9VgsKxf2_6m~*+<(cDi^tf;zm5|exVmwBiHYL`A+G4Nm6Am3px7h5CM`&NQH*Xn| zK6H1b5&>o`=oA%B9}Z_&C$F)$tmQzpSC@33*^V^d$XYB~#=^FIM^V&570aT%Wn{?X zT(}4H2%A5P-o;d@#B9=R46W&H2>G`%FQd?bpW;K9&yR56b!`n5w`jt$;`0prYmBl!Ls*96AC031o3><6y zimV4X=X~2-h2b~Ca;C>E-cJE*a@~*cy?Sr42B&Tr#W36qW?|i=o;2R5qQ8 zjyA)kDRuR%BFQAHdZP}gm?wTEn+Lwd{;mYVx+HkLfiM5W%(Lu~9w9)pmW}OXs>pmi z@1P{}A8C=+9?MoZeIzusx#+Cmy$b;D7Sqyxz&s84UiM46FqC8i@TqGnKbElSCSWN- zCZx}ko$3}d^aA*z3OP(K(rWaj-L@`6R6-tAflx^DmJ(5^F;e3FX^b1=Q#U%HOod)t z-9@sVM`L??R?Ep30k7K8E2jSK3gx2{xvZJviJ#muI!{{cV^bM#VcBV@2Q~e z68D6AO8VRLOgIcx+{T0032BOZ=lq`7M2NT^?cPBm!h?|ygiR#G@#v!jxmOLoM?l*{ z?MUMpfT1ICO-xR5hEj=FQ;mB8^9VY1C$rN>dMlB7T-HXfP1IbY$c*EP$+{w?(~mK; ztWX6-8a}c4om?xl!gxqCF(9YzZAmXs`Krhs!2sHDqdxbL@PSG4{3|Z?9UnCpppE0F z8+~E;n90p$z*C;?5|Q9#KLw4udV`I2D(~j6k>}#5Nq!|_)DNw^S|tawbT~l|l0D$` z-viP1vJj3SvOiV`qD~7hP{H4xB7%J@CJLzS3fPkH{EsnFS@%Lan96*JMB3$8hH-qMhjJj_(EUQM94GC!?ApKykk1KU zMg{`}FWkc=_(4_MSC)t0+9KA_>MKUih_oWBt&KvcYp2e;`q^eYeg)F6exzWBHHZ<% z8#IStiHeMam!4Y2{Y!PkPAK1MQLJIP1&Kw{Ckx16kH$8&gXLykpG&iGSHV*4DEtZd za%8!p6!LUh#Bw7EW$Y!X`r-oq*R9fUve*bX3-N0duLXN$QRRDq9+lW>kO-*I4h;G- zx?cr$P5EPc*wZ*OffOn$B5%>Vh<_(Bs#M%7uqtC5zeRrpfs#=!zxBwtyC}nS##D~l z3K-yg;vPPPY$W(g+Y&fM`7B9CH8l2cJnXR9qD&qc;>?k6N#AP-G>8dfOduPO)=n)M z)U;dU0oXY6|AKs#na4trguaLQf;sS0>O4_hLSDZ;??2bZ&3E6^BZL(ZFDo5+7&|lM%`A zb|0K|FI#vu?c5hP0Ur7lJ?!i4uUt=Sx632-sxA4Pz1 zyTAAY12@o0gL4Xs)+;x5-i%V%xzXyvS6hs(PFCdCE0{U178{IAP zMzAmR`FM$ldYVOd_0&h$k}Z|h30<5JHIc!dGQG)`&NhDleLqMfePacawwBTFo%+P5 zW*Fy+Qc4e1*?qOR(oD^}hHu>(b%MK5lMx@CpKIu1t9SzRbIhCrz4?iw)X*>T7}LTP z9Pz+%NNtzss`)!A$Y4y&86HcWTBKNgPUZt$owf6*!zq{$qc=i2GjPeMuAheW$W0*V zm*5smyTUoT7H_eBBrVe(9OWhFOI(o;dv39@7&IAmg4ge#0JF8VvbM1*xoEbMev*uf zaiAN%6aR#`A$`5lr^(}t`v?z4zw=A`hz|{Xp z(>JrO<7PKWQvg3A`}@veGuxw*RJi#kH%tuWL3}wHLn#i$TG5@dY%`f%csH|sV13}M zs}`4vhPip@to)}-ckH^3z3UmPI^}a@Gm+fch7|c}0r(nWDPP1J`8!Gopd}L>u4{I^ z`^m}M&jmz>9TfMUDoN=xGY*!80+0OwK}sA?;fiO8EyJ{Ml6XkBn%_WM7ra!cBZoKH zVVL~+{WbiS-e6fl1FwnO&gNa=c+WA&dTJ%k?UBu~%_rJ=^9cD@E4vdmmAV?HSx41Ntd>MYdJSycb<{`DNyw zBU$SRP92D$JSiFoJw!cU6gRA*Pqj#PC9e|_>hvJS|CXPx{S1J;Hab3dVTv)g%J3fU zm%boAJ?9W4(>~pNx}3R~al*caeqnd)1Yrbg#Xs1~;1Akp%oi4T&y?U-z$t`e(Zx4>_$@On^i+Uv>vZr{B zHpl0qWA7~mNmYrrO63BZG~)TI8$3dVjFlaKWR&*SbTZu)OoCP=S+pa2c?(sBYGiy96ryFcamG1T-%*)1PQ)3H8R_ zO)0hRQB%TDVrlug|GaS8w+>A)&Mt~=LisiCGs)RHd9P2UPVbfGDTS|(i7DkMaZox4 zaN8qZ?|R?^YQ#SqAKKH0Kvw9r;7b1TxCVSyk=>XW z%IzeV^^boV8aS`9r|PIh<4d-T2>+T{DXWaDQ`a&t7&Vno4Gx&US9JMd@XVxt`11K5 zJ4!om&jcFThMYZ_QEoQw2m_UDD;ULAH_f(bhS37nz|6zqz-kv{f2*uyI^v(55c2xY z%+ZH%s7qoJ1)s3<%N3e11=gwJ2HRQ)28dh1h_V#Vfa63HB{1J!-7OW zr4(YRjJKbHS#j83ocJbn0qkTc5iGeTQ_Gd|`sv>y-ca#=SiL%Zpra+rDOS3zQTYM?*?GPSz~YvV9Vp?LN)vz`C0*3a z<8q{Yf5iMsDKH|qC76uA5UMO$k3+_FQBXO*8cmXBl2ZptOO}mV3a6x5g~lCuRcHqC z`He0%As9g#$AQU{C1hq%3&xl`zuU;h^ZW{JKfDvimsUK>g$!G*k5Dxg)clq^x3gak zJ32@J^*GC*!GoM~&!%FuNnC=LGJ-~5)HoCdVL~6Y{VgpgY)neV zQ?g>{siL+FFFXKG%`~(GTyNmTv$O}x+qN~|^X4YIVa|`;lqwQu)Aq^*eNcGa`PuFg z6#YJhqiXvfnDzlEH-oLE>A;5B?`{eNa(B>J#6ObC~A^*sVaQ9Ny^%Ko%|_=Nx8~3?hrt1D<-j)1hz!5yD(mUZ8(^H6z@M zorpPn4vhQ(o9q=@n}LIm?H6Ke**k*wc=NIA$grWVX{@R#gw96AGnq*OOFHU{pKZW9 zK!219-{t#-BLJvz@!+il?1uKb-cHE3&w?vn+9HipiWqLZE0R=_>QBs}Lq>JK5SlgMgDgHyL6BdX=1l1MJ3(Xjagz2PVp3}sGPNedJbc+dT{byMI>`C0 z;D{FdU?c@ zggCTw$72oF1tH!?MblgR7fJcHP|$tqiCW?c@Kh=&L5{;fxX;JaJ7o(AYfQ!PaGOe7 zlJ}toY9hEjz0`FR!WdRY(hNHa>MKQG^zB^qK6`I+{>Q|In*Xj+NeP^eWaffPzg_yf z7N`ijiCc^~S;|oZQhkP59{3%b=L-iPxtrYVQ2iKEvQIzJ!scFrSxDRJTf3@2luL&h zdNVYX+b9IS4AYI@`(5|cZ`+0ZNX0z3{Z!JlgJ#_bRy;>U4k{Bi) zDa8$iK zQSaQP*>#rcS>9}+lLLRSS@0JzHWLmCzyktPRp=mMDZ<&2xz$h4Cth1PVGZY&#Z^-z zWN=*(%8evLGz@O{?RRexU%tsgH&qDCXdw+{BQsNu*d`l4EI7_mk90wQ4wpUeBSEda zt)=T|&skyf>(5ajztR7WiMY0{K$2OEBhrz1y{c~u8GTreC|w{my=l`h%;91s)0}FB zkdw4p?j-=o#?i7zRudz8ke(u~e`-PH?Y;58UiafhV_CysO=%~rhEtAHtVX~}Yq0zf zI)$TG(LHs{HOP9nTt#b2d2atQv!^wf%aA)+EEyK4UYPN0)V%zZP<{p>@7L%f<~FAr zDxD|Pv0^I$f*cP@BdkUbx593Icaj9B^py1>8k;-9QzCt<$j~$0ivjlHM>4jnVE34= zfR&ioxO&l~33X$WlM*F_L5x7>-8h4*uxs0a2AgH;Fu&I(Mp^x*+N-fmkLRV>h0x;9 zwPJwHk3>z+dlOxYuq^d!Rc1Jxk+lYE@Y!*nMndDC%8>7j;=C!mE5V;t#B(X_ z6y-mW^&RW2(CYP;c!e4Mg1|;;kr)XS)skJoyYPs!#T(3BHPMt>7kFO?OBEO@_F)c zm^rp@qk2*PjWR@CJGOX76M>e{yX78ToO^l>u$g@y==E<4qItRQG#;8Re*Dpu>eTjD zFSsCy*JZ>L$358!GlRx)uFrT#8eKCVTcc;T`<891Y-4XXyt~wT~vz zbdoIFg~(KJcE#v8%83F{H~nIwVDVf`pX^;l7=_OgVoB8tx_`iA;S@=D8_fBJ<{FHP zavkBi_zo?oq$UW1+rEM`qihp(KRkc@$e8ZWMM$W=xRTufNeAFLdQkT#c=ga5Y)I+5 zk-`^?N#g^b6Y>ptv|_!1aY4l+nhYUve!tJ)fK`CSY-zjy&gh<_Q>?W8hkv;cB6z85 za)_!ZWiL=~t84SP0xpVts~vm} zJ`*qJ0^Vwg4g+jpPJ*0#rxN@S1=ct&fsKmW19A`VFyQVNf+Sz-Ws19nw)yOFIOk7N zYC#|dD%y=3tQObJ!h;B-T`(l*Y3N-!#KYr~cL8{$?GZd;GzyV#9cTnv*CoeTN=ISe z)b=b^WjH3ussMJIjBP=zvH%pQ#0CN~oZOkgg54u?xx?F_hd!$qhCrNB5|;64H+CJj z5Uj3j+=vyw6|05~oJL`2{m;arw^#^{*OO#U*=y01Xf`7p%7}y^M}DY*&?KRPRU#6P?b=NhVW_{NOrCVB(W?0{GijV&lv050Z883#?Q`VytkM z=>fXA+$N=t=~K;Sb;nl$tOhDDZ$&!^!?a*=|F*puE0e zd7U8x=0Wc_w7+a#|0PAw8hHbF+=2j1CON#% zm6yoVr_#lWMyIOwHDKHqRwozU*j=d3QQc-C2s9dqdhDz0Esr!Wh!Sc+|5qgG(nS;c zRO8g@26%w2dBYsf*O7#K^W(hLGMfgiT&FIMgXG)Uq&e=#L-bfwft*@!VzGeBE zhWpy&%a$)+QGCB$>PuZ9(~D>TGZaW0rVvv#>_y7d5<9~*3}1*Mx5N-%5%#)5(%>O3 zTgm$nghkKYU@gNVpsgXp{6pOd(W&>L&?{k9%Hxl}m*CLbu2Jb?DUvK&Pg}I>KsjQv zVlZ;51M3B{s$Pu~OB5H#$#mwc!m$Bw7GVACQ1O$p3?l|s4X-B&C%}Ra-Q&GexyClH z+7987%q^IkK62<_32FHcpHkNkopu9|UX=R5U zEi7R#%+6HX`SiNcDaiSUOy_57ii0ml-QzQNun;99Mr=0uq~^Y5g<@O0+x@Ma%w78}anZmYCr-1BW(&}(M(F?EGg4p~sWi04vzQjwf@|Ff}U)OS$!{k!} zS_c<8Cu{+m6dHH4clZv~DUeZR#UIW2&~V!Jy0N!r!mDEuWbh=0)Ynme%pdwhtykx= zgJ$d`!OnZxD7nbH9!AO&xbBS`8}ig^aF%!PyM$eOOgj9J7RMmp9^AIo{SfD>mOaca z-(g$S_{b-dgmDv$k_>lsCl-DyXMqVc5lTTj*{nTZtX^ZSBc_LZ_$L}2U*Tgx&nuLB z(Y8Sp^3vuhlx~EA#I>Cahai(*is9qdWH>w*SkSMmq@1idJB^VEQ|IDL^@EiweHIc5 zszxLW((dcjSpG^eJB?m?MvCbzEeBSm{X=Pt+Xke;HldTeySfv9?5dV(8}9Dg0#*Dj zQLIvdSy>v-6{=rPKmhJ)85Rf%lP5A?;g}cG5N!|bh2-RAj!ntG?-{_G=EQVaaqRBN zqtKOhb7^J1%_9Ac(MYFGdet=lg(zu`8SGku=n-dQ#Zi6u#Gi1=Al#W7bBtt|THf0f%+Rw2dDZ?_yP+hs3 zf2e?gH(6;{i@Zf66?oz8bP=f@`kmMN`+jETV^*3+$E-Q}|_}>Af0KZLSm#mHvPt^pRdG+slaLXqdSv}%?Bi-SQ;kTMVsJb7V zF^qibtINzLu+nd08Ht2Im4ULDA8h97n}f++s>q2h%{RF64buI!gw2bhlwsLoU?6 zTUD|N{pbk}5;7$%t6;xgzX}E-Um5M-D-J*+h@$j1*^41?t17sfJ3zCNcozzuONkUNLf9eKgynx zkyDml&s2xe2Kl{5gT)5{7pPsBa2sgx-nn#W<>rXJAoKi6pcjt+7~1xuxVNabgR4o( zp>>jMV7HdB9V)OukU|M|Aj!bTk%MW$hDA0d(+DcBmh=SlBnrG53_s4}O}M^_N%=My zZ;42r)dDRv?4ymDy}apeH;u=NzsbC(v6CijrB)z5*Av8AHx2m}YwYkT#us|5K@}c7 zrx(1SP8_oBDMmAJ){Exz8ohuI>fs5AL)g^g!joZA#$k@H{Jar#g?<=lobf~-N}Ycx znn#tk`du0Ws=Hgvr-8Ys$W$Uhw{U$wFg=>krx^B1<9BulD^CGLrS|+I1+Vg{twD|o z5j)`O--LzzM1}GtuQE4gln6ifUPBeb31VvTFzTJsB8NIPb`tjEx%V5>EqU7o^QjsDLpac;8tRG z_qGGMqGL*MPCfZg4DVb?jLhBR{?JUBR%sIbj&lEf!yl9z+Qv#80=()fDD^65w&sRi z0cbK=u$Rl548v7H(YqJYW>Mflnn5|(omX0(P{tMdGGkvHV<9nIW9qt`Iwq*2=;KZ%=n3 z9y>gfH4*Dt-Gdp~=cv_g)#D^ndhH<9$iJHSY}Ei{bH>_FloN|i(Pjb3NOU{hYOw#K z&V4{$o5GJtd-?;Swm`o}?kRflo9iP*Wpe>tjUE{jG9fl8aV!;}an2HF9x^hsS%sLK zSP_)2Rrysxh_U-ehr&!vTouw8UrBheQdxJxfX*^@YOs`Q_tM=8$p;cDhM{g8efZyp zN1LCBgUuddL8h}$?0yvaCE_FVMn*fjE{Bdj_NQdkYA9$gQv2IHKF5*+2%8ojOZo5Z z9%8m3eRE|^Y()hU?dFQku5gzpCYjar|6bP}UICSO#WT&du&NZpm?SjU4ySJ#ORQYe zN#7mW)}LNm5szs-6YroMWnxClR$hozU5D?70?FHH7LTQ?GFU}T>3N44guR|?j&k&? z2gGcalwvTpdo)z#3jtboO4?OwknWi8<|JZ%HtxSi!`>KNB6HF%hU==4nCw84t~*W6 z+M^t_p;*p&{Jh6k5IHirQ@I?8=)s&_Qh#gI79uz<1*a#aE^14#5ooyQw7Q9lIYuatv5C!WVz=J_;&%ik3l6ps!ME5eS&nk`4Bse+5RaC zYEPPn5A{>}|Jo049g^mz{s{=BAu0VphWGYkG{X7Qn<8;$2>npE4Yq=&n9rR+BVgjB zQ;a~6{-S=@6VSTSHD8mgxz(DuxhF>C8G~&~#O7CbJ+Z=f!9tSCt*EYKsv`mhCR#g= z9*!Zc55E1%wl;Uipk@6S=|$P`Y`gPWfk}O8D3~#xbO(>|4+x7JNX#q6XY0PI!F^Hj zMv7{Uv8G5+$*>7UFdg8P`HZk8giLN1F6}=0Fb*Bls*a?ZgC@f*peEPpgH&XPYh3W9 z>Vv_qwk213kHaDH##?ZUghcOY8cZEk>PM0EfFCho@z%5$EuR1}C17r<{@`u39Ot`* zDS@Y{h=S5$Ym4`=eX^ARe6{DYIC`q7RM}QakZtLiPGOC}`g!+WE%a5#y)2jq;4Em3 zmF2SF4*%F{1ma->W^358UX}7!!kzsNmv(dACyuB}7I*#-_4(~4o*wxwi@IwMyxDNw z5e0KxA9P%m95akt7uotsAF@HSIn<`8OfYZYU@r2)FbG+WPyGA}lnDP^MblEV+(lGhwiD2$F_lB93gG&wxy~VIXmXSrf zpB;nKQM`C7vHEPxk_oohk)CrQcoZ*Le*ny0NCwPJv9A=8BMD>x8aA$zh?s48FyTjq z7a|1mHQ&OAU{cSkp^2uI0M1QsS4cZF`)=WXM)k?BN17x0i1PayBkoLjVdH)>or2e$ z3#!fxS+F+`&Afe>&P#}Gz4}6_fTcX}x-@$X1L7n90`)6`0I_a^Z7dyLPk=!2L87l? zdEO*?!htu1nY!DxhSrXRm&EZ{r64v&Yp@lIPcgERkSWnHQ-=K&VhV&wPx-=b zL?ct)t&oMXPtHSrFDVp5v3h}6a;U%sc+;4e!W8Ohe$CSzF;$2ZMh$Z>u7Lgv&WsF_ zU$nsi+GWM&DIfrBe&}98pHX#ivu146+;=F0hidNBY1SkK?9Wk&6E}t9UylNK19bN_cVLvN$Jl= zh8#FZC5a!(-$x?!67!w=8B!Lu&e$0bK$5!<1ZsiMQG+x)UFE-9tKc2lL+IP)y8ee% zY{vPX%T~2>^J^NqS$VQfeBrEo!-NgX{o2H5B>0&OrG^g?61lTb1XMvLO-H8tr*7h0 z*%cv{B29w+Cs|@q1L=&$!X4@XN0JCP(Ac8TVLqf>2cmq%8lEt8oZ?nK$vC> z76J1)np+02if`vpr{&lsD8Xt;>JnxO8M+2}=cq1DG$DlLBga=^uXpXTC{?@QuB^{n zb(vr?lw+#YoJelTiM>ioN*Rw5m3}lS>d&%hb0%JBn|{!Oqan=e7NGSA9L#EbsGk)r zhi*HGtYBuKcl2XzWxf0-1iw#op3kZ$REDv9rQ}*gbIF2s&Az%(#@8pzJ#OTfeP(i{ z5N1!2MOC5o{5v0X!fgywZxu@q7&0ruVUBXyoDFvz4a)emS}Aa1Mc|thMKSx}eKsYc z6;Q~e731`k{%7-0!KFeMl4Q1(h&~^l7V|Fg{m7^-m?;>B!40YjZOLE;_{dREC7DzJ zp89Q8QCJ`#IZ^tsa$fTR^vhKGNF{oB%l22E^(rY=hR}z|N6wmjSZ*_wik>u)1#;4j z#|x7PlLsyEw>A_qele+erVDyQli3`9n-iYFj_}&lr_B&Q61s=lhM$mva)g@j4`oY0 ztU!=mY`@W2>Hr+D#zW~Rr(oCiAH$Kxm;__!iveiep~EGYGR^06-~*#LyRw8M1h2{w z1BQ(rm=Zap49p|9M8wREL~=BW{XDoV_1c?i&OOOSn6>A%%-HjtFFVUFg?)NOp)3RC z@2M!NCffUuN{8j(3%Lt`^lW2?Pfk)nL02Gh^Tk>-p1T2njJ5}QV8o!f`zI-8nK8dt zh*m3CY6kfXY(t#ZlsRr?JTRPSY0wa-X^Q!@LQO!ItlJ8lm)=!O;9-?vbx$a$!y-Du zAgxTikx-8G$oG16s~mDh&oPyhW3%F#CasM^evweu&MObT*T%CEyxkeF)%iDz$#GYr zhxhB;>zR@{c)PZb)}uagz=%qM5?wbVvLi{r)IV4(RjG|hnEKF2-G%o)qQhlY3~>ya z8JWX{StLfMcliJ<#JGa8qq2?|4T?s<7vX;Ip_%mbwP_!`>>tV4_aafR`_*iT@PD2!LIdDeJ-5l9lR!cSZJR4<}Hq4F_ZQD z^j1QqANXzxkb)qyDsEy{GK1?f12pTvr6@SV<%A)0Nqdw|Gkgsm{xNhadYc}tCBR*) zeg!46YK}8ujemIj&xpP!NSvMwrmX0$3RmD3C<-XS=Dv5&1polZmOu@ zc8(}+C(Sncn^M13XJupK5OAei2b}2|i{wD`e&#*;&t$>+l#5;N(40ZVTm9VPK`~2c zk<(TD{!^i$Gw*=dQe_|fjsBe}hsdj9*mT3xef~oeuWO4fl}q*IGjLq9MnDH1Q|oxl zfO*KYDTfk`9w@r(r`O%Z;iHNF-X9BaIodaj(rIJH9S+gw+idm8X_+!t3~hqhq?~ab zdguE4s%S;yCLY>ymG~)%Vo=W#trqlHB^S{~w(B&RXd`XN57dNDU~2xAE?`~UIRUT5 zg^qGH_B^jb#Wbhs`eE(^OD@y=lxvhCQ5cxqu$$Pe5)Xd_UyV?020$z@dCWg}SY_$< z9V|-MdBez~{qnH1TyO4V=xnO+JqGap+z=gk17PPK`n}}lDB1b>_Djx@_O5wa7y~+U zgYol|;_Xhn3q3{g7y2(Y>0JTV8mQpbvVrNOCTj^TWL>9xp450k?^CK}RH@SaHvc~W zLqNR0TTe`g#UgJhbAJriE%sxFJI`LxLdVHb8=Q{!0bzP8XZ8_?%>2@y2sD4`NHm=={{X(qfR~e7!Ik$PQff zzQ25N4xfemt>EBky@nf=+66=&uQsdxY(q|is#~z&F7nK&s~~Q+TPbHN=zMMJxg2sT z8|7)k5!+D(mPoAXDuRoDW3(_)-fr_v$Ib6vL@M>-{uYv#X^E^O@sHv@a4%&>SSf)j z$6@gObD0bDKMUQ60?)SF){gpi7nRXR1|VggF2`1VF6h)$P(N5edF$IGmd0{#&_@ES zCKx`p?8JxI{2qu`* z?)ZOOhBQsfT-ultfIHM%kPhpP!3_dWSBohDNkXgz@d&m2;3q(;xXK%!ab|y8mU#E4 z)w2u0dhOEC_uifKq>YP?@vq1v<=JZ~fC*5nvgRm*8$wWZZRlZxYwQp%f{1gS%(vvy zo&j)IxPw5CpJGMN>hR6_H?@_;GPK;V+M$-`h_nM8oI`H2Ug ziKcuu51N+3LSYRVe!#H^u5~@6&=!a&Ky@WKQ|}C;q#|4xKjumUuDZ zCp=G>jium9+O%O#%N{#{|6Veq3vG-b;L5xQ?da+CF*$#SlxE4yO3j!dFY}Os5_p*p z3@FSPhoq?b2}QrqeA|JyZua%%MK_X+$SK1m;=zM3Z@DafusRQym{b%vspBOeX?!Ez z4ZP+#`;GK8V>wH%7V@*Lkmno~stAUR?jX^74z@0aI-!$VZS6_)^YbYZ6A7|M?(c6{ zKvN6SRJ<@j9P7t|xgyB}SYXiy(%X^i4{$Kj99!~~6tuZUglivo4{L}l0 zYg|jHAnLlrG)i+KChGjV<4lCLvgce7xU7bxbqJHbGn!!_66Tk=f?C+Dep;$KQ%UkV zHLrk+fnYa=Z8`)$LTP`uO-3v9WogC2>{BkB(0C83E_*7kz~tlWj`BK1Mh>ovBcyF# znLbGSN7@*VYWPY4`3NMfR+a>GR{vZE9Cu83#1b0hqYvK>4s2m4Ir-YJpIwl z)rgNe{@zU-bM6X5I(TssZ@i&od zhHL5sPFczr4l~~D&_jH6SdvHqc?#mF4b?9f9nTEPET(@`ppR^SniYv4+87hiT)C-* z2drH)X;nM1Leik&$l`j-SJ8`2=s%F%Lf^>`kO*A@5Wygr@=NIUB|9U4(PJJF>-dnw zl(V%+Yt!?Xp=0|q$G;fgl>NPZLWXq+4!BZ50w3(&PE|h@PUb+LO^A`J;9{@{VuG*z zu`ICZ96Yt3;hgD3whmb2)mA*XwBwVksxN|t=~kS|?g2+#nW!~u{*(U_6m2d+e{bHO zz1@2WV@v#+ve7$OLaGM|hJ70GcgzzLIDh&al3w03#~}<|YH-d6E1C3_LxB=WFC^1Z z#@tlI#ZJp?z8<_LU||nZT4dqi!=v7_xc)dI+1g(5F$yDEVXg*y!AvC!BmwikV9>wT zQG`-Hn_f&@!fE3zgd>Q)T2%T6qSFsd+CbQdXM$V0v*=-9Yw{a$UnOZI zs+5y-*NS;_hUIL}Y4lHH4s%9~o9<~q;{v3bs9n!g`SS8PxQI*_Hp_WYQAyKW4ffCk zZ-f6_?Lf0VF-iNWz%O4}&cf=!5)|M-p$u*^|gCqm{H3io}{q7gRWCRZ|yl1D;; zEQmYw^T5AzeT5fQCglC$A#xYx_huRqVw-J_`BNWVQzMcBMrD40Lnya}Q+w4}3{X6) zbsawe;=#SLZ%O5rl+mmWvi}zS+9nR%x9-tojB3dghsA#`J#<7FMiH&=lZ#vzK?Tc2 zd>zg>Y^R^k9VF-C@*zrzC^+CTXAUHby2CZ`(Ly$Jpl>X72jT@ncXFQtd4m=C;#Mkd zEyMSWXtrYKWUu@}wBCniam@}?6<_9hvt`iXYj*9b?017KlNa+U#*KOz%Gb)l{AGJ} zJxQ?)o+&6_e20XH_LKY%OFIyyzg11vv0rsGuHF)N&hZt!697>ouZ+%xoZmn*-LmQ7 zgziXxB8T1;y#GwXY&u5a0Fr>~Mce;|w45D4>AwMdS8vT8X-aCxCVTT*OU}A<{VG<7 zh8#ztfl5iKNaE@OxMH_=qqd?Oy{6Et`veVBO5s!iG>f99qb~)UoF$FX!I_Yad+Bf_wKl(Lv_3T z`7x9Fd{mB332TD#d^V29+fR7sisPsZH+=|k&J09GFo;ml%@r;5g}myzGEzdTCVq1i~h4Pm|QxEdv3-@bpI4GiWMI--n7@GFHq04e* z00wN1>EF@$f5It+?Wl`QB(;sU>8xjxZ*7_f65Y8jAF9Ji4(lP^x~6$AI-@X$vzahj z78gNxoVGcuOE^%agoH-Yrnua8fRAdC`zuD`nC<|*E9Lcz5rwARqEZPJO%{MFf`FoA zK}5_FglT1pe*l-o5OtS(rIZosMoCYyj4B|!jZnPJkkpsLrTg%yEtbV?BcUA+{3UIu;Kx9XP7Q zL6hJCwR&#@>G*TjjD>LjIWG9+IESW1_C@Wugy|n#%_P$2Kk$pKv^R$8WK(~@Pad~g z&eV>nAK9MsIs#E0(a4HT%myM{u#x-)OnJvF{9Y0Z#mE+h%`h~y6oLLrW#HFnA^;)? zUm00mP661{2Xr}lv*F#tRC^4Xr2VQmuOKwneuIaElIAELAB=?CFAy-Wozy2W__NPV zzkNP7jbq~SyYCYh9of()C9Xr)_@Kt~{C6_>`qwHe>J_1r?oi+Q3pJ$5|6+Ko~ zxbnmJ1QpbZ+dswdiwz2zb?*yVVdTm_^;kw?N+8L0^x^=f$lY?5D9acAo&dDrxld@q zAWHYdNDa15n&EQi`GO7qI7>gYdk}B{w4YcbTZ{iLS%JY2G3axx`uHZ)Nm&!);Fefz|7(ke9+bvBa zn{=2>5)#660%!kacE$4Q*FwXrQK2j!&Q#3;dwr+zTVYfCZa?NiX{d2LqPa!4a+x!K z_1)9+;*v)X;}h^0%QSk44Sl|2UZ*FUBncc!%okn7*LKAC4;hQM=o94#&BFRKB0xSc^1WGf~+gMx8K9eyGO|0??jN70%n4UD=cE z>zCwP*zW(U&yr4TJh&vu03#jeAs$pW2Dx-ZyY#`rdc1Z41h5w@ zZ5G_?0`K-JKI#bAas_;O5lU^G?p{v~)I4;?gvIwXD^7a@9AFP~OL({UqTfXa79eT| z0zQ^Kohc6nz`3riTV*^syx-O@S9rii-hp9^(@D789Fuq=6;=UUnMO>5DZBPtv$oXx zRIwJ-vw9=09}vOs;c94%DK9nG>k`*m>T=wplUX%irW9X7ZyHP5Br_M8XHnYk#n8JS1A6l(at34Eph4(<+ z>3F^SI<(|aRs=g?m6g%PqC$<}rXkCvb=QN_I@H~i5f@R_SV{c1ltM^) z#ZAAAd8J;%pbu%=rMusl>nOhWs(n4XulV)okS@fzyA5_dr@rKKB)?<>jRzRZz2e2H zV-MF}Al5uHF+4T1P$nZzu9raVn4sYmnQ}~y3BXO0uW4d7Y9^7<;)b~N%0nz;{j`Ms(|6nKLO0NHSDlI&~OCni~eMxTC{40M$ zU}Z?yRiR=?NV(I!{i7GS?bRlgR(PyHRh*N7boP}h^O z{*pv&in^@7@1JWX=e;%&4yWWBKW_e5Iilpf~AAHvw` zxS3gxI-&8v^86QCETbe>N3 z#xxIz$*Z8nhd{8YUE*NeRg6RSpZ&HLv_VM075`>Sa+NO=O%G(r2ILL+-c*5ieQ7u! zGp?*S0scCcFb3&lxL-7Z?UGopN3XtQiIpwBz53hYXawznB-R;5C9BG*K3S;Cd=t&* zqs2@+8tBW-Z zx-|vom&fxS`N<@=x`eklm|~e&BDLjuugHVmymXiiG>RAQBN^UB;oYUVN@5m*gUj$f zrOhmO&r-CbDlk9Dl}1CK3M$OO3aDB78QhF99nV?kN~9!XjjW#M0$eM#Cz`(4Z=_7P zfFhqCE9>GT{ru+SYZ&HV->r{K#W23?Ve?ZwY&HVL^7WhPpl!?{aOlY zeec!NF)PZ-6Y-<#IDtrP*X^k{5dTIM=JPiQzjj{ZLPc4Pw1D;Qhd7qmP0ic~I0O$Cr zL+J)9E0oCxOZWk;^X+||6_q;Onl4EAXzY8gW29Bg5{?V^$7M6aODX%23l48hLXmgA zMJ{0RaIB7R`i4N^>=9}P&K(=>BV^9N-E|6_)jyn_GC^a}zV$jDbA~an$U63XAJUV= zy4@G%V#Y}ita{OlO*K9MwIYqmVrRdZs)D$(xs&B}cQY|%gOl$8G{6#g=A;JZMsgN76v26^v9i)7h`( zIKvQLff1BtC({)vE2S+n%{7T}3qDrZWA@=Oo!to(zqdF|^~Sqa8Yq<&)Oe&aiU-%K zsZz|MBAuz9qDOQIQiQH~|UvwgZ?aQV`8p-7Oim8OAp zXDJY+)9e!*`e*8lfUKeSt5uv5|fG+^p1#hlp6Xyr5 zeMi<&mR~!GwZoThxr5U$e2))XZ^0}G)2S|n-Y0|MiMyu}L|;)|@?pYzDm@=~UH>XE z$V8bNqUwHK!;?olnhS>h8U%}FZaS8lON5__{7&e@&}{c;sFr# z5iK}vKMPzK5baBr-O9nLi7B!cO6<*Tgx+1oqcS4tgPc_<&ciatQx@8*U zf9)E!aF(WId$`uY+#Aa!YP2j)AhPbz_R9h321v<5!e6K*7)O~~lxFY8HF=yj;dZ4?! z1pwEn$*>^An-F7k?0g$o>Iww){hTZs{5fMwWQ2zoRJkqEF=VsYCLHAL-6ZwHCf4aw z7Iy27y`+jqk580EQ#A7wR#dJWa!B~dS7GCsS6)tQeE(Gad#v`JVb;z3eGmV4-O=|? z2JM$FeveR-f^>E@WAwa*dj-u@>>Hpi=@xBoJS+ps)ugm5@bY8tvB;-U-4!kdEOoL| zwS5$Twprve?aCWOqZ=TWnngQ2Ojnj@P!|Ikhp?(vs&|Q1it8j%d-u4N&jm5LpgB`L8)&q}IyQ)FflK1IrOM?T z)`^2sXl!BJ;2LD~M-+W#(JSwKyWDTnd1y9C$iu!mEjMVvs%TupZD zI0r|jB;kr!Fcrxwg#wqqbT^q$p0)B?M;}Pznu#_T%UkT~dQ;u12^KGKmryEeLJQ}e z$iLj<(79!UuerUeS7G9-^33S@mVw)g8e~W{^;6Hwkk*t+<2jWZs@vsav3)Klr$Ot; z7<*Xj+d~Wp7MVCZ@vrnO{HBGF74nla!Z{_8gubzF7=Lu&Hq)sdkVh+DF=%PL)@Srp zY>%ElAYd9;6w7x`+$^+tW;o|66+^(Jw!FHoxGDciX)l=mtGu_dJK#q&HG*e?CA%5b z*Xsy7wF0JZs!Axr#m7QxRm2oQi6)J?3&PDd#I3`~c@3Xtzqp(f>*#gj#u(v_$TrMB zT&Y9DB#leOM5Y!AsPIP>Wrl1m%&dE=IgYnPwMIBmu?X)PHYCB|Hq@bevdOg;2FfQI z$yy~W_C4mCpA_qwwQvc5 zc63;IcT>EIu?(DS(hbD*Y-2B|oh#{fcgHq{_ERLXi)7b1ub1FG_ogkQ!^&_4*U`4L z<=8gn&c!UoBKikByF1MXqlV}4{C)}4{sdsI4jar*6iF`|`9k3PKv_j?hg!Ohxmcx|r(>nNj-1CmHcg>8J>XjnL^UtDZt_Gn*h$-fzqc!e!yicfqWllG)W)2C9h&Wbh3w~R1-{kop?ny;$okb)k28*|Sxqz`GRqTo8A+s#J zh6=M(o+0l-LFcKz>*N6@1)*s@?t=uBGPo*XCdV*F(1`00r>tQ7?BLbuj2vy;@1z4G zSN{ntB~*4@D{@^90^CE{y4V_X@QeL30EMObfDBSq#p{{(ub^~_F*0pA@$vebR=y%x z@n(Q?M3Rz&?M*Gcu(WM~PXt%$rwx=FoYu{1LwQ0OpeTEZ_&Lkp>sXf-%x9ko6-8@N zNrTk82svnm@?VqR&&wKxWqOcE5h}@g{_U|#%xNMUfJe?%dP)cm5cKR z(X4_Jv*>_qnyrv4HvcG_)f*Cn`CL6Db87!q*0Qo6N;#6%t7xX;EwqwN_&YOzs4O7l z-#r$wPPQF992>=>GcQDY=Rs^_9TK~k^cTXo+8y4tQKJd3o?lv%jZI7R;V4slJd{e^ zQwWpeMtt(5;s|u2!px&Hm0Zk1#s6S4tp+zj zSV!7}*PpFErovGxFT;GDS0}9!+0z14qEf785yn;M6aq>DLwW*seLh@wQTYl84A0ko z*7gr+O`-zPc7g^#jkYuzm#Ap?o@TLoprVnOsZt<(+|3sv6dG28v0f27q^tR$Nr2gR zG53ZEZlcGTTPbi}4+4B?23NEtYccgk&?gQPR)T4|M}JP6((`METmx7Hn<+!~j@xi- zpJ>VxXSnYzjtAFhKPDAt2qIN0-zRDMeqIG;jAO749-*4UfchFdfvKQ^8K!FLbgE6{ zLS0>4h5X+gf8tFBOJFd9niB{+Eum3&ObC_i(>dWe+O!Y|#|>WIdYh8h$C40!IRg7s zC+Y|N5;>?W@__;gK>)9}rg>7@)90j*BS-jZ>W{ZFiu?*JnO(bVHP~K>@bUh+${H#G zU|1NMs046vU#!b<%`6~zK-u2`C(@wys}X}+>PnPY7O(ADgy}u8N{i5C-Y+Wok2gPj zHC26Eg+yJ-j=K9O_QltQ`8ReAS=&@%uW>jUS8F(t>iHdh5!J|u4vQZ^jsqqax3Clu zpM}l*l|3YOH7YA$XO7V0cqX#S*;YwPgfZp}BMptKa0!$k)D$kDP?DwW-*k>Jnrs~L zwhFiE1BXvHpUlf~%xc3~V`VA2EKeiw*XZ9pJx##mKH_~j`zP)buTK0%-{&vW00~k! zci(F?^6G3+%jZaT+N@NGFI8q?Y&!|cDfQ9~?V2KC;yp-a5))-40W)w~wYKNc+=tVa z**5y>0R4CZBXC9woTH*=jyD*?*;uhAO29glv)N7!ia7l!8nK{*Rp{H9pRU)3gMiqm zKA5rS60zg^v7WzCcKS>Mwh!(vFR5<~hfwaWZr3jTrs~w3gx+ss%q8QK5tE*(=o1>h zj&L+KQvYw{4M><{X#?_zd&!j&k{P<=&Y@|wkhtalW0fk3)9Wh`_6uq7XCPdDQm1F4 z&HigdCPa9MeBucivjx1hqDSB3vtK%~rixlB3!4RX;B77z zvW*thezEN$F=!wV6+skyh!PGuJ|RoOQm1GoPjOs}Xh@=Jj=Pv|KgUAD+_^ZFI)1g6 zm_naQj1qEuPYDtu9` zWBE~55Itrc5uitJs!jH4#*BHMcquXcQ7nxIU6cf^*GD)uIh*tXxD$$*EBBDlUUde8 zTUSd>RTZ+FZnv7+!-b;9Ha}BEX;5B56M589cKN|b#0oxpK0UW`VQvrzZ(IyU2b3%o zrN^)jkoQ!2X2AtfRARaun^DeUBAoI*;9wKA%b55bqebkcAetlpNLfe{-}&OdZh~zb zke8s#Ki&BUsV846QQ~v2tCtP4nN}lO+oFV1{U$mm>($7Bg#7jhe&u70sR_%+RapF1 zJft0MBAKY!9MpK}FfZj_TNUY5bk~vM;HApdykL2duw;@%|9+`wh8O%vX;XI+Lx~gA zxPm8o1SE$Pt}L%;7_Bz>7l{ta=2)@r55^q7lJ9~19+{O>Ce);Zr~3Hd9eM-K8LKbI z0V)geu-KK?xQdGol0)obb|=$kO_%yeVpXjmxJ4I`kqhU5CK099t8XJ{e1DoJtmfNK zKL*$f8&JP^z3aO7Z0Hm80MF-BJub%!1M?k%(kI~Vrt{o|{vq3={YlvIo$av{VgcGD z;OQi${atW8nzC_Cs0tiq>_`f>ViwfA7{$I1>4agCoJJlr{}yx{IqOa+is&0QWa4?K zRBTN75jtuq6Aw~$&3{i%@`!V^^hL{e*ogXJpdZ_UQB8&SDOl)gBMznlzAI3{{{pbn zANrohIKW36d!rltjNYZQ&IW2m6x+xMJ;r)uM1);E00~;eMul`Z&*m`{tbjP_{Pd`f zZPemwy}*(bi018Tp+$%hrhU;OAxdh3pyrt_?#eDjoezcyGl5=|! zq}toLD;L#2aNW);Rn32#i#~KN^acS$a|wByT3EXy>=!#oV#2Pw|96*2oe^SUuLY+K zG0NH>NiN8klMfTc^VQ*;jNVU~CbUIw{piMWogXh=c{>_;ws?n^Y9QGB&j4-cm`3`X zLcZ`^4~Lg|wWX=`dP?8n99K3J49n4EVMv^*5eT;_@SIL#J6&n3W-~NVBT6q=uAin2 zF!R%w=_%}av@e#&pXRF#W2#R}UR{5F5^D!$iI95^Y&hnmKJdJ(A8#pL5=sSSFa|tE zFLO62BIvrED-2S3Y2uP2Ijft8?Y5v$P3%(4q09Uz2l{zJ#mw?-Elo27@e<9jx_`uz z>Xf%8J_jyR^Y_4DF?91y%=9FkjeWmRx(OpFK<)EeMZPf?KpS&XOlN&OkmAC8a@fN0 zD(?%8(+}K@lf0Ui?H+HHv zVPaX32gdt(nb9@k9X<3~nANdySZ$(a`UkRp#*}hjU@1i24j3r?^!GMvw)ja?5=_+E z7-&h@I|FEfN>`VEwkS0>+F z3I6{gZo~x;9yrT%gj<+m@OdP8C;N<7&z{Tjo@=gTps3&nUq8pjfI5;MR(`BwrMkfB z^&*jLI0Xf|yvI-BCk;@v7~z_Uhc zMp%DMhJLEDqy=Lek>H*u9?^_uA!+_tS+a^{HtG1_CQG^+4V0&81Wkh3$NUXush1r>0{;mS5~`t z@1P<$#diWQL^>B)$I5J!9MTHf=)xM`9%vKrARY>h|5Np=ox-4=0ybd3wtzg-I*AF8 zQ14gKD;o3jE>opDJNXHy)k`Jq+!pxrK!ek8M2wAp60aeS3ur$)S+>rz%HLs(rHHyI zR@MXy)iZ%v4pZ^)BYPrKP9($z8tcU9#uT}~vU_nxSrtko z8K%3Py)9!^Oru!Pl8uO3K|*!d*@t1`hpi?umoizj3f|n<=6BR(7tL{N>mEb@A=t9G zK<_mS43rAK>2&;1Resl=?n+S5E2T+h!MwmYQa^_Y38Izs^X1+)nX}0wLor5l;1K{L z>6>ZCP-68=B ze_MLv1o99vg}pK^yxyMhYc3+0(1$${Xqr}LFE*{p18{4NL5w@SI>{Noh8N=gfxqco z(&4$WMH#{tfMgqnP^m6WR5{j+75eXaS0~w>ap2Qe?POhDC?%JD?aX8mqu{`L(JhAj z|3^vcHodXi%y5!XH(9noeCSaslKZ>Oh+Rzy zCN(p-Ze5gA^;nTT3LsJNFJf<%<;Ftf3`i|qF#lqT>hdC^5RVxMB{TC>G47^GD3qkq zmBCkoaeya!;zqVi0wmQf{GFCEo~cA-OjG-hnMctAw7UazwFXzYEw?K0Oi((}S?`^@ zbX{|u`K-b=Fv2&Hz|XVDHU4Qcj>B=@WA1rqk*#7NjzA>K z$=aSseC>x>>)t-+^Z3M<y1V4T3{;^cM%==*9>IbXdQG2=9S2L^ls={7%l zM`e?`Qkx-COdel;1)*_=CQ*ZchBYD47rvHn$18J-Z;y^|94f_Oz$}po4hB=-z6f_a zy_TA8rt9=Ik-MhCjuYI)86_$*2m1!P#ma;B47Z)25qz1JUlZy>uq$nZX@A4Ha$&@7 zg5+@%m|h9bRy$+XRBh}RO8uQ#0ueo_>2SE(QodDa{q5dxailz3Gq!NhOP z(As(WVcIRT(^mJHnGXm7Q&m$%yadQXc-4qucf~-tL;-=z9>S5DWDSs;{RfN#woJ3qSPCc6*&Tp z)Yn%egy4m5?x#iDoq$Q$J}7$Vjy1xhZLsQ7h;?>TEAvjamMjI)C=%L#%2dN|%?~)~ zTJ&?Kcl$`%De*nikLTYNFy4`)Z@u{bcJHqaNd}2VIS`ptm`t+_diBBRxXQwlYG~7x z8~wF^d@9a9W*fZ-k4JeQ)4A1hz*Y)_@=$K3aV>YI10^qzsQPLC#b_adXdd{5z`}>j zu1jHnocT-z`N2C9G!XE@rmLXTcPnI8r~SUEjyO+?qS8Zg@sS~{Zhho(CWkp!UAqzZ zp583y+Vrl)4E>5FEfUQo4$(wgCv<*WB^-~L<4*}!(x*Z7`Rklis9%h?GN{5k5~dan zZKYEPhM}h*m;5U~d$h{{{DvS?Xj>{2&({9!?wCt{TYh0^OWHu= zfL7Ryek|y=J5OD>FIjwsFMNMcA9STkJJ+RxSa!j-$1-wcTZ?dRT!!-}wZu_eHL@F| zum(F77_`&84*vRV&b9usS+Uai zyWy=zyJoXUr+R|qzYV-E$BIjvv}rx=x!yc00HX{Dzm~oWI}%_>W;iV`?bD*tD`N*rmmT$RIYfThVk*pj*UtP%cdYK=Rra~x)h?dAVMOz z9U!PCrhu1RdI1g$X%XR5y{ru^Z{48f(htlWf%mUl2K_@B*azrAP&i)cVfU)3luOL* z9IUrp6h{W24$q~4x6B6u^eG+PB|8EP5-;^HS>R(Nhp#9`SpRMx$onAW$?So-d8V>V zXa~P1k)7xFgL`-@H(=;m0E@%V0<4GV3zm5HGn?W+Nn>sgR)B4M(gtbcjmPQJmCLIVzN z^WYzBRDn#3>V+LH;t{z@PpJYoSJZi}^|-iHRmZ&FlFA<^Q+_(}03VyvauDMK(`2Xg z^!@K?KVVut&!fIK)5EzGH7QI&@)**9H0AG3R^m9W+npgt5+!x%1Si6bESVfU7utgA zX@I-O05|r(CKq3C5}Yw+QxF<5hzgDR^LmvWV<`AQI)4S}gH)D;DO|dE_ShT}8u~z5 zGo5Ga%8YV9w2%)t{_DO9_+;PNUzP2@kWR7{W#9ws51s1O-6bw&BF?O;*qXqmCr9%< zxY21Er5o?y&!-h3&@8y48AOlhG=;w=(I}^UXIS+5++BUZrFGcO@9gI&p%i>;(4$25 zHyd;HD&DvKoP49+*CgDPb^cEx27G|qoL0knefSDZ#aPie?)lANN_5dy!e{|LZ!!8u zmc^K0RwIjM&=d3z>pt3>!zM}H9!Ky#7Ay@PS4H;-nXPxG>_<;lnq?sE0CrFYou%WU zel;d98x&dxo>T#Q)sDniM486~IIos=8*@k)SUeCmnV~hmc1(Md-5jAEJLI1%0=bWp zJ-xZ!fn8tp*Xe6F*%G`GC2nfJUx0vsfPjF2fb)I7SSRrMG%4;r+i)7wz}($?&K9KE;pQ^>==CU+wzSuc!3UYv)z_exn=e`l&xvj>tAM z^hz}(G7SioJ;0)>6%}d)EO~j`L50r?dz>TPuYUY#O&a0uXhh=M5%SXq?gJiB_qhPJ zqC_+-1wM<)W2I32x$L}MXv3LAAAll9F8r2H?`&1maO81eL8hd9{DNLH_i;?Xs7t{0 zaAyX*X0=rI^Hm6d>)`?Py}pc%+9(I+1?K%7@Yv>%7>to&m>TqA7GU2G5RCQfc@4~= z)tfq4Cpg^!3ojI^473l2dT#g$SM&#)xGDO33PAC<*{!wdXJ`HN~vi`xp+%`hf8 zkf-Rwb|1fXv)p}KV=F+1M?}ET@nsuTk+QtR9L@j0XloJ4v+mbUR<~>l#7!To+q@Kw2lr*Dk!HK#{g`L_{`>7^_~%X^bZ{Sc@SN8& zz4jrBc)d+rwKOR$Br77V9ZwCeRn&SCDs z_NBiaZnkz016J=imKAQYbX3V*Sd=%sArak`9O+8eOYEjE=PS%~ z;Nc&6Y2+E>hNb5<$_`;C@a~ypAhV!<8}#nk{X=_R6@b^H4}=zsERK3bZUjlpKwyDX zGra!BYTye3qtWsQKJiAYUp@BzOIu)B{Z#N;&nhA%%x&v|Q=6SXvkry7+T#RY(^$%R z))GJdMCNVra4MxnS#bOAX;ejnlI<+Ub5Jz5-K?=jgN|#wcm&pTbE*56Bz=q(^|014 zHGP45f9?#+$}s)<@5VfV*jc3yL{rzXo6w(@TXP6BlxkBoa)~Ek%B8q6YFC{V3~CPP zr;7ZG_A&nsARo_$<%o`JKXU&Ekn0ux!FX57j9&<<=X`g`i#0LERZ zp#H7v*)f=q-=Y5`-?!^dZXqceU`QBcywJ)qgIQ@fJAcTDZt9|N`fV;JMF5`Z{xfH0 zW99y`kTXx=5Y1$pQ`k<13a-m|^&pyqzm~GFw80)rABD)^#qMans-|%QoCCYpLlWi{ z#&;S1<4je19Ykx?jIzUdsCOshN%4ocV%TX_`8qndVqzm>am-}{{zc@Jwz23)GV&_s}B^WssFh+C$nRR_U9SS(M z*$K07j83O;yaFZ7_qRrF%FkVg_^MzKIsDPW_9HohdjMM7)yA9P%;_67QT;DJ-nY7&Bqjw8kZMAhQ*Q$#x4tJtxPOH)>z~DH?<5ZxrqzeQ&42o@;vlH6I~FOk z&Vw1Xh&{h8iVR~bdmhVC48Q$~BapIvq$CO^IMy*8zOYmb`#2S4=`I*RRFnQgr{27- z0B25!h{uGcwb(pcOkk_<#hDUv?;^EuHx@US`sGAe=l*pLyq$zLQrVHtdGg@*hxV}R z`EhRjOda0@C?Z%W971;^G=!48zO2Xm+t4R#oz8Oznpm74{)C{zGa{ngV^L=&fLz3z z2FnV|%3vo;9~Ez0n2=&i+snd_=9NA|1 zn#+>(JRSFJXsapzC8@gLua2>29XewYViO77WLZY~rlkR?T}}ToW&NdXYkJ2RHdJRV z$zthVy;~tkTmIi3(hilk#d49go>R?r@t1!ui2eQ^*lv?9&(e!HXt@H+)S>t>}_v6t1(5#f4Vm@4mG?d-icef$F|T9e?5R#T(e;C1%u zHzi$SP7>$nl3sGoe|HaRl|B24Prpes2kLML(n-t@wI}C$!P37DPz6F;5! zlZGgM;rfrBm8l>m%~R+Lkv;}sPqW&{MbPu)ZhvM#+#~43jUC!Z*^$lncBwdvMW0?* z!`>fDd}DW>xRqKTB!3Yneq8o+J~5K7>*tXgIuVbqAmqg4JeYW>@7*o^N5hm`bZ`gH zQ<4JK<5{08UMwFuO;THdZ8W^ASG;?oXg;S4bD|8&9tT-?#CeY~s@L$VNGw847Gy&s z4KEsWNJMX>92!n_lq?gnVqz%v)k)%VQ9wjMJ2ZvYu~^V#6e&KLt%^8B96XJ)iDZbD zr)QY8Ibj#3Z0CkKH>gY8(I;^t(K4@1k{~{0@avEBWBzc+RIaFZzG-X24eM?g!7aLf z-uT1>3;~GJoShFyT{cT->q%#v(`Ew37Ts8-1t%&ivjrYHBrFS135+TD9_RoUS$qs3 z247!1&&eAU$Nz$xL}!yYf^lRTSWO);foq771zTD0{LTLtgQTDb!)7WL5s}`%?Cu(6 z)*PNECBY^72uX7Y;xRcu%1x+j&w~IV!)+0ye7y9zojD&pT2~Jh)15EuSJJ?mD+%MJ zFu_&s?Dq?4w2ppc-%w8md7{O9e%gN2GR7GHhFs_(*fh^r5*aFA-|O)YCP$L5-s|K| zu_R2a7m?;?XS8ooEl+jQVTz!ju2&JnFY_uR(nvZsu!BUB2!${29j8Op6%&j}5~vVR_)nHl}&w`N;|$X>1?VBk_!`w~{M351TEi zm5@?L&%d8f4BzU1w3~6#Gz6g{!jC_$_hQ=o|1s8Z!+t6t>%}8}!`ismVY)yC=YMfA zRZbl}%Pe(yD~dI&iR#yW>?qFf3I`Cq|7YI2l{lIV>um%a#!C+32?#K3N9MX)0IX5W zHrXrkPeRpwOy_8-3LbaXo0kpK1bbVlfACEB5qB`&Y?FTvxMB6ob&{Gb zpWdHb0mAyHgFZ>7jjtkIzKB_&kDH3l!kM|-=P0YxX6hG1vq6x86`*yrsxh=LxT#Kh z;T+mKz&jsR=Y}klDxV=t!FokFf*HQZO-{R_AZgHtWg{g|H}HC=C6? z#k$S>_1cE5#7B-j^e6adj%Jvo4!#UfpD#}zeLwg#xw%QkC(C>;xC#9}HOhBo$GOuW zwe0zvhHh+vUO)nflY3z?&MQvhu7m-t7|i5Lt|#3C`nTOwQ{}BlCuG67mKY{A z)583$C0SF}4S{+$%VOsJLFW{8QREAv2}|`^S=`z*q2-#E9qZ7fxPT(a;@XoJefqUs zSlFKl4UXDIY-*fQRY!k!W`cimco$}fWLBq#bV=*(tV_E7>J}qeYaAQW&52l* zI%?Y+WdLH4qGTzU%HuR>sV=*_URloK$uYMLjrn-n`_0i(59ssM2E(-I)X6a;x8tq1 z!+XXhLwojrqd^V$?=JaY`mBhF6$aHMCmS`uT;$wSby&EvX%=4W89yCJ*NWUuU9SS+ z!vx=EOhnb49!(N_U{*YdABZA|c1P3|x^r?wrAJZbK#TtiDpmk+96LC*cn~R}I0Xol zAk%0d&{a{WF=q(BFx+wKm?MX4oRuYp6d|7-sEXmEWC5@sMGD;uBltTpn5 z005wJX49qLp_j2QQfU;3jRK|DTrBtf4$?Ao&_(m4R3H5xBp3Aqvd1MbW|8vDIPlxea`6H_$znWaKE*_C47D=!ep zFaxFk8HnaRXGjaz9@1ccb*KZNR&c)j>;Bcl0c#sm8jW91S=QN>pc>F&Ea8=j9f5x7 zd#$rO?w)|}WleUJa+l6hvaO?wYrN#GgS@9k(*Q$)6~9mk&9e}UMS{Dh|hHh0t8KMM)*^$zhM?mieLY6@7- z;}$dUR~{46-QgJKu>!2h{mwQ*`GZ+i5H6lr(T511`Kph+ zi`b+rvSiwr8^tp80_-PPGbH<>nP*B1TcvEhYlMmR>nat$7H|cLax%{UdYn&c%BB81c{hr(#yMFo~RJv9;)}&_ewSAZn(sOhZ1<#c)4ECjuOC9k| zWk z95a?3chHBX0q`GxQMb;n=6W;tU6<{sWXU%=m_QcWQ{F166z9>^cnvIHaYO~UNyv-| z*pgpBu3_V9RGlvji17(Jv;iu6^6++r;3#8T(iRglL)*aX4Hs|5%v*6g7zCRXn>W>e ztbd(|M?Ln{K!kr{rj8?$p_x6#(H5d5inBZa3hb$iQ1_QqkN!~p&OPS3Ie7On>wg&; zG8Ns$^z8sIzQ@ZV8;Ob_bSf~2d*+F^Nnv!}X=nhneprHvLg;45EV%zn)YY&l{GvP| zD4q$VRQ9j23^l%cK@6cVr5O5yWPW=9s6fQ+AuTKVvU5Av`JADU?9t8QmeVd;KRq?+ z9rRO6n9BvIyb*INUWqiyj2Ujjnylm!{SIrN=}M9y@dE%~9;K)FuonHO88J2{FBW(( zI4JGt`~z?k9;Wiz9xdZ~Y60r~>#~wYGDpfT(zI58$fz?%uIoiLsLqm;2v1J7F;{TO z`{p0?%KnG8S$gQxF@qs%E9FT74rgFQNwAEPjY8r;7Js$_Apx|Y^NTXq5=vIZDHRWM zujG=~_G>Sz4d-1siRlJAezQk5^sYJ#O!rj)MKLVOW*S3{Om*#q(zim<=)~*D6usM9 zgs^q-TZZ5LZzKn&(HHu>O33Ab!k0E+xZ8|i7n8LTuffh4!*yZ3?=gfyKP@`wOS9#| zv?2&t(lAi$q_XpN_Sd3jRe6!$f*O?0)vemD+kuWLz=%9o)+98SOKmgto4OT-vDpHs zw`F!YGa(f}!>aHa*8`nh0{kv`{I#phT>#w!DlyF`8I2Toa8K+pkc?iAU2IiUFfwSt zgIYm1GOHL~_Ap3f_*ZCF^4_9O)71CegS2WrxqJp$Sksfv$r5;V3x?f+wG1w79uys+ zmD)MfLJhO)8iJfAG|*%dCLm3`gMYGWbZFf3l$D3rQA;k#@b z_Np7M*GLw`X67nUvDOM33>TT<`}?DZ2NkL%I)WQ2{kO#&OiLg3c&(GHifzgIh?v=0 zvvRSrq!a*msM(rr!B(KzOA`hQ5gEq7opvzjXHtGwH_$xLG@RVkOlN{;979LgVsv!E z6l5TA?ifl()XHJVbpFJSJ-K+lY#7!(q&{lBwjG``lGlTqAv1Pj+y>Zk?Ww~aGNuKY zbLqLqexd;t!mkbHkGO0sy{Dr0Ds6(9av85FX>eJN>mN(LU^3`z=EW2JBQ52q`K`XN z$E4#>Dpg~F=S*YG8B?Jh7qz;}(>sU7eA1@C6`-RrB!ukePPq!Q4-9;#_&My|Cwq{S z-6QxPSts>qH-r@#l|gVr-EgiDEBNpALbG>=s}muj-T)or2}r~f^2&vdN-M%qw{m7u zK}PWgO^87Om(0RTbBjL_yp2?)&jyEsOgJai}GH#FSZ41zLsl}FLJeI>XCYxkUal5POqUqY{X!N(O!GHo-y z_nysk8e;~G=LrBw^s=#L*v^wuNG-{>Eo067wqr|xTkawk{}RUbLE?%kN<2sS@4H%< zOO%RsOvUk5GXizj9T49{&|CLKc_)0XH^gZ7K6>sL9Xe_vot)fy20De#N#>p2#ku-D zh_S}3Xo}i}%#F}#^a(CT`6+MIp4W*`pQOhs8t1CisqdhKT8Dm-*7;&jfUn%a_UwwI zfAYiU+7SRbMS)~DnqpAhIVh~7p$ylD!C~72j8zelJXGlM_P*M#+dZDlhjeF{^!YE! zQpQ)C+sI~;VvQfh>Jqo*}q#Ntxk9ESH~yn$%<-f=Pr|1%q`<@iv1M3MCgx*&_h+wE(dONvli*h)*oW zC?b;1e!w1zMKBw^!%7?$0b}eC+4jNq`6br%_@p@6h*1RqfCV~*ZSmx z3i9hP7>Q`#fDvsHE2aMuXVa1NIe+WyAxys6SK-(9wJ0}~sW^GVkXvp8;iWhdL#^hM zi`8g*&;v+#{vXbdVH4opX_eEUw?{mMfpJ3!M9>Zzj>qkw(%4?Szm$Ny@97tpTsse; z1Dijzi@zKi6`&WF4$dWTB`2wWoN?mgHsU@i<-gfxfZ76Vbf|^0H0;OXHP8=TM;y!2 zAAudJoXEHP5fPH%8VpOCL9Z#YECv|4-@Y{cH9O&+EJZ48m_NdETe%Mbkubur$+}^6 zy`8%E98598zPtZi()!MX6-JbScIn;Jj7~3kj8DZMya)XabHcA{$az}cJ@2zuLpH7mm5n?qrkefU;p1s=)VRJwQ63%M7rfBN zC4(}p!G0EbTt_kAL3w}eLHo1bj2K6W~w%`;`RPF@13W2DOT_g+w?7_XrUOn z75NrSy!=mga*Y%i*UF-6nPThhJuo@an8H$$Q^>Fd6fLRg*`Mz1d z5Lp~X6e~S0i7W6ByPKz8e+sd>ne;=+k-DU{Ctk% zUTsdg4<+DBx7ini{OXYzapgmkHnB`r-xrPzg%BZE50Qpqbp!16(0O9)>Ix2=oMnZ4 z+;F(kbp<)rh^Co@+O6D%a5To}9Aq2^s1W~IzF$u6%=C#U*NLO@hj~R7x(Yr_l>#ll z;$c-M+by|f0FpX{r0%46q?}*|x ztUBp(zZV78aQ9?~x0`;fRK2e-rp^7lmnVZ@Vb9 zT45?V%H}B#&^6mRR-HfCvN}Q`9Omdo2FRHEVd4z(AZA}?<8=4(VgS&W*k)0uHxT?| zy_EY+F$1kuS=tQUieJ;_$-!~S8w8+4Z+4(}4ZSX3)LESZ#g|KECVI5E*v)X*$_@Mr zv!KgNW=w)jX4uZu*Lp#+$*TK@b|3}LZvR2JXN3S{Hn;@60~B?;DEro9B$7GQ0r9Ag z&xHQzEz=LiqhZdQMK$?u5@{&`pV}XWiZ@F#1OEZ;2C4L`Aj##ngNlno$H8{Ag|R}- zy0R~F5+ron=hCO0Y{~(iFKQD94mS)s`D#tTCV(8#j)0KI=(paADyOpkMFRUKbu_4* zkF7F6xF@aKWlZ%P4uU+<^^oz#=F9Uw5pN%`h$&j`p@_sxwP#;vL^ox$boT##Z7C@b zO=!>N?Y+b$K@oRd720yjuw0){LzQJCxb+_Wm_*ftMB_&{5Ojr+xjBuCgJU(mZw41$ z+4d|hfiL$N4c1ckmBbku5j}Gp1PaGDHCotVui(lwoha48wHMaL_#KOrDpBE>nlvr?^#q==t-O?#x=vlRx zx>wZ*B61y}<9K&*0tZk0SLf^5z?;ScXCJFQhonm5o|KJwRdjIX8UiC~9*Msj2ijNZ zf6tHCNin(aSt8^@-vbP4Va7{7!M)AKjgGKm5xCy_1HrbQ|9~-Dy7Sbx{7bkBcem_o z*mE`Y?N+zH3W-dLoU;y>PDCHh(q#4g+#B$nF}x&N_k$yEY>*Mgx2xkD3uwpohlF$kqC!CjuX{!V>;t()WuLtB3gx5+49W@TbV= zY@uk7P)tJ?AHtQq#>Fh%F5dawD^X^43ml=z+?nH3hfTLBul)@1a`02J1ep`CzFL=CNmbnfL4{-uem>0;P@G9HAi2QjUocoi&U_e%BJl zrj*puVUoeLynt^o6I#{FZj|+j5{cFESX~&H zGjyqXTRW`}Eeg`L38bf9pt#6-H_M_rnwO~X9hRmIpx1(yz;ddJPF*YZpoMi4_-*^YmIQ?<*Ji`j#ZU6T@@a?1k9jhl?bG7*yB!fl9h zV4jXPM|O_eL~GDS605d-rK()bUohSY=&hz>ZD1~lMpv0sQG$9rO|kw zQD8;7UJxP3@NJRzU)Rx&+KFihx@;2h0Si=;EO(libd+&wGZ(upo|R((#4l0eTwf7B z(S0KPFG==m$A&@#Q2DgAli`SMb`vbk!nsxJohN(+T1~LOVvM$>Ap^d|Hklg|7#J%e zE>yl5y*&Gf5)XtpDO+tCAr#{Zz|A5iY0}jo=mjH0MfDkuOx;u&fn!?_ME>v?DJ4j zoF?BJd?#6=Vk(Cug}6e~NUKf^Snoww*X!VMG($JLy&#*9wm8pvFOP~@oIR0HM;eKP za(fmK!)yv?N%68wz1@y|V6p=du$Ff`s&b{7SBC5&b(wJ_=QCfVkvbLyvmnEGQj7U& zUnW!pr)XPkhDe=3<~~3*8)Di*OzDQylnIWe@u4!q4ic1pDyTzZGlKCojGN!iIY8UJ zyfl2i#SY86;U&Czs+qt&bgY-|!N6Z!Y}gdk1!ckCZm4nJjPjd%$!RpM)^|qkCK1o$tt>B_jbY|3Vwz0bp6L_5#DOFFGIRr~Hai{>$iftV#v z9E%b$c?=2A(2>HHzsj93`kcnn2gRQHM(%eTq(;u`^E?Jve!jhv9@BF+&8Y*e0z;~y zz7q7Q?bRqp(`3&#mj>co=k$(hNnWE@59npFMOi{6 z183A1$eDojn2UpTbSi!y>4k$G@Yggu@O$qXaCvxmw1QTE`}0-eFgR_qW)D*&ccHQgiWGp<3J*V~PCp894c*8c@8I$dbRt!~ zlV~Zd-Z)R^119;w52erGyT=C(2Ro$(uMbkU3))`gA2ejTIt<^to*YqgBcT)LJ1Ea`!i>WwCH``E%0Ysvx4>iEjYoOw#;_{0n2dFbcmKC0QDBlqpBx{pI+V_ z9SbgzKi{rhd78A^&X2M`P4d-R2xoe>*SRZE_6v+dDJDU<1p?>WY5iM4cNqXW!`Il& zbwV}ZHe~NfZZDb{Ea>$}B&IB@N~d$&KV4QT@9%5a-C1;%UHw+Cm9wudxa{tz|r|r$?corR9bq z^$h&VW*x}>)L+UTW(2dIyzfqN z5K>mEmmEv11~#=3fO~?EDizgjq#NkvmGa)n=TMei`$efiAC3F*NHE8x(RJ&$)N603fP31~-2RwzfY6WW8u#UeZI!A*^6>#DI5ZI0deV6m<^S$h` z1ugr~QDQ}#jE38tb7NE6@|h(Svn2lyF1mS2{Qx}@pf(jHMYbu;nZ7KUT}EeJW5y!K z=dvHGULJODJNF1qy$H}kB74p)3{ikvM9oM`cWb}W5V^)2*jCllz3s%9?6@&s z2v}pK6CDa-eY*FlCqaKce1)z}6<>)z!nJ30*$I;z&~PjKId=4ZW$c;hCFw#~kBi@f zK!8&4Z`=7@8exa0m~W5ZaQlSVGGoDQW%8)bER6AOsKPl;&2|7_^eV2e983V-%p={+jxW|4Z z=6(B-IDYQ;*g;YxJT=21g6r*i!u;Vmlr8`YL6VFgVdND$RTLwKm@~AA{t|KRO)QS@`7A zaIa(rK$d5m`GFqb5r0RFw$xk_aospbwV{3K64gG^7Pg78D44CQ?0k{A_Y31^N|-d^ z>#F^xX+6-!?Ip!a!=!v(+i9t-{lI^N8xYQ;`4@|ySPPQ$f?%m~LEUye5dyhx-1P(@jtmpZ-d zFi}GsS)~*CkTbZvQ&}jVqdYU+5YhGTLqN_aKAki^n5JeCx3HE)B}r-@nf@)Ph%3LE zf<4{i>N#$(>Qnv#Fuy`tHmUUgmWD+Bo#Z9Z($7KXYojkt9KLBtGH!SK=#x{_?wB zJ;^D_S(|LM{b|Y7_-_`MoMz}v4Ut^BAiP>jf@Uu$^5nKyB;Kr9e>J`gU}#wU!bmyj zJ8Rq*q5OCAMK{2+pE8dd#2u#$H-G%<(jx~;O?l>R)~?w2=|z=HW&FqgID4o4g2}gh zg44fPYH-oWRv?!9kNV(3x1TaQtGH!kA@a(J6G7aFQSDCPz3MuAJBwQ4>5ajDlo5s4z>+^T?nE#d{4FY6LA@3vep>Xp!#`j&_bF zC}-~^_cqjwH-rm59}D}(91B3nqRe8>$QoXw1&dwjIb`oH<*({Z{|{Z2GflM@+3$}* zj|c!p3#T(~>0tj;D34WDTQD4i*<+I|5T@K7*CQfxy2p$947u>y8}Vtt(9~6cMzr*z zI{7eRC}^zoKf*A@k%tSlUA=P? z?5Z%#Z9X5Du9S+qzj@Lg9bTo)6wyFEmzpx*AfWjgj-Vzst(nw>VwH*1I=##oL$Qr@eM&G!Ujpd6=HDH` zW_%4jA_qM$$f8-TatKuAS3-H-8Sg8QkSWQjut2zs425KE{gWgHW%&tHpo&J$XbGBu z>1C)DE@uU~Fb1ow2+Oq~9Yr~Hj*CAzwVqS)X?frMg7_JRc&w^S8_rl46~{nXfHC>9 zmZE6=9F5OR*R|EozY;v^F-7w@#wuSV9+g|2bAKYpqhvag)h~7utAD%xT5;Yk<54x> zL?y>?%Q(E;?LNXiusP}?HcDiD=WB9@ ze|pz1^tb%+^7^!IVe7o=*3@GP}txVnm5(b&L0Fw8M@Eg>3y*R_oXFa}c~T zIa9};H3+xjBQR0_F8@p*X+G#?w=W)Rr3l*Q)zKaq3~5(WwH<>=={Ae(7>YeP&zqUd z%(m9F2i~EYH4`SDHSN!p$@ieQt3~6>R*gxAkJDv+@eGJgziq(tN|{qnN;CZaGyeAQ z?&UhkhOa_UyYK95_%~##vdZX{j(FiVbC!xJ~@`{Th0T-0M@WLhA3{NgxljWqJYm;i1WnjQS zQQ=0;!ClX2N!hoM{tYyGPpwW>n;USl8Q{NW@lRU+cMZblkstG-!swzWMypEU0|jZD z$R^$w;mttA?}S$2Sr(UNHyiEHHSGqhl*Csd6CQD4BX5u!Tu<&lDt76_DP8GASCwI0 zhT%;xmz)1zQ4W?eyeV3lJPk)?Ehd6C*&!4Yw*P#AtG@8K-s|th{>pRs&G#|@zw!^R z_!8$O^UsAIjzN&Kqv8h|;x|lLa}1L8Bx>I9n37_Lvx9iCZPdmjPnk2cL0wRh!h8{H z&-c2F6eli)Tno#O;WugD1cSHsXDl!dg(n9y%WIJh(y#N7tN5h`e$E-4p&~s<4NSQv ze+KMxeyCag{*CqA*_#db4-M3ZTn^ul+2&4{tDanLQB_TYFPfkq*&*WQr`_yVyU!_Q`bi^j6+z_I5-#{}3de!joG~ zr>6jV_5TZ|tMY{w$Xg4upz04B#=g(ZFXinmGiF!_;NcL$9<{e%$es`|GPB#NM_Y5MJr%4H0- zet_{P5@nTjSB`p3nRX)!`F1IDXsjdk98Qv5=rtXtR}Q0KGjJo$F^=urY#8 z>(yhJ$wmouQL*7KEKZ3ugp00xCFsj|xAFn*nCKs@Ow(8iQcf}XkEm!iH{)z}qU$)Y zA`Yk6UO&f;OW_$`a*;VAah)6`gB0B#SM}o~ zngcNPIRt)gxXb>H1Lk9i2M5i`4p~coXjnF^_yoLWxg;To7-VDeFGjIAF#5T7aa7Mp zU~}w>D7wsaT5I2Vf;*`v5&s>pH!>OwO^(r}mQxE3B?uA$2C`V7UaeJb4gFxuVA##X z3Vk6KMgWur&H#|F6)OPpX{G64IM#>}uIN=mNCronYo25dAXb^S2AKFw_P?5ciDiE9 z<$sm%x1)Tlqha;FTNF9$@LMMDvuu|wbm)K4ohf-A>n==E{iI=yjeGWs^pZ~G6YvlGB3H3(nanbr zhjoLj@5-UnioA_P#a5?2c+<8oBX^4Oqfy0D&5G_b4uLfF{KJ-JkLElaQ`ubMi|eor z1LWHRr}(A-;1SmmB@hESB2QI{9Z8Vau=ua$@L`1wspdK|q}W-gVd(!BsF=L3-;)Ee z^=kD37<~5MKS`_hykpC$_yM^idco7OExWQ&>-YoC@0l-0mL~vqo#DU^jVNtUsY9V{ z?BtmHG`*YUeoubpm>ZBpve8ZVxJU3*CTJ>>3K@XksS#^$1_&voKGE33SI{fHD|!K2 zjY5q5_wn{oq7Vvkx#w(!!~s_#qd{+qvBDIbGEg`s0C<>T$pOs&vg|?d|K5JX?oo2s_NGh|N zp2}1rJ~<*vg1Xd(hxmx6@~07un((Bg?tmbkCsfRq##i|KkpUd3hbdk4nV59RE(m=a zKbe@piO?!x2avEBj!6>A1aQ(+iFWg75tMW;` zLM)!>FPl^={$OYI8& zN3d7AVp|#T-z^79WG3+b^Q%Q{?xI{c9Dno0AWYinl;iS!lq(Yow1r%MojZi*A+LMC z2U^%ykVuio5<*-em;S5hTRd_}cSJu}vSG2LZfVeP+w>=V5Cabn?BtoOqx@9{v~duh^JLvBU72ZUv}P?3nt#{W`8fD)CF^@4DpOb zQ!<>t9OYArH^uA(2*BH|Dccdx^1BIBfK%4XRQyDYVS9zD>Y{2y&bgW&jIWcLBJ&ux zR0g40@KM~@SJsZh%o)U{XgSFp(26Jfsb(VtVk$Zj05{kDIb4-O(W%FR>+?e5hw{! z&WHep=rK+4y@f&DM$KkgxEKWUQ0@`Eb&f=(ssL1DNN3Enf%5fbOb#D^j#3I_ESVr) zKqVX$7?+8cvz7t+=Fa>QTlp#;slU>)aKM?RfXM#0t<$ix%(>Y7UpRc`XIo)Zana^F zsA?INEb2xJHhoEpm(s=-c!+v17iSCecUa_VMP7Qy{8RPIaH{>?E;l`0A_N4pO05<~ zed&{yVf#7Pqsy^g^laD~c+wBf52XYz^LVn*VTPq)QUYbPWke5Se9^!bJj4m{5HltD zUjAI%iEi2&A+dmVE?kk54b%*}Z=D>_tWBL!@hA$UBB)F33)FjFA?yFD1CB zhE1QMMF0b=a8e(KIjv_eaE2Z)Ov%$~2GDWy zM_k#h*pUB49OQ>`iiv}z{XN_tk#!t2PTLL6+Rl#*Asa1s<60+B`6aZp&I2XOD&Onb zG-ht;A+%M`2XLE{MiE`+9@?p`Lr8*3-xa`7sS2uQ3bRyNC~aN{Dv+J73#WAPXVT*I zC1idpCX;Bt&JOvHkv8%rLDF;t(=nlB?UK@v{%`o0y|_=JIz^j~GeyknkzqzG0=m^Q z9f_3kaUUHnSx>SqWmd@2 zc1$OLP<=%!a_q8G%%$YP67*_9bt|&%!VSqa9{oE)j zKB)}UUV1<8G7K=vFz!dD6}j2oP}yV2MbF5NJdKBW)5trN-dcZ&m;TcmxGDFGgUz5C&qdJ7HQ7oZh{|Y!JMX{?=i(59ueAI0hI5LoBw$~iKGW5; zNH7sB03971Y>flEbu2vf^3+^6A4)>x-V%FJaPR}|i`PW~7gdUrv;<$Jgr6C|o)4o!KcY_a%q@qtGo{v%If)J5;WvFwgnJ#re!qhk+FK@1R8N;^Q17G@mF(T1Fb4SjHR-bgjtFVsR+hf;ifh`AP zZOFRRN<90+q3on!l#2?ARAv@YXfn%>$W2o@YENOmX3Ce}Cq)P>s+MN5Jyv*md2kN{ zlT-7nBeEqSq+v|wc1buw6O99t(D{<}zuKF0zeX`Bv@oa=>_)7p*EU?u##W84LaC=5 zKwSH(>_eQknEjmx29)uCXo?yFZKGaEdP1* zptLn3M{m^ozfM-Rtx7TIS$YVmcI${VHFvQeq-wD$P>1IgVV3wDh%i1pD_v z>%Y(EOUZdvo~l;SwyYoYs@srfy!@%VFwn*Z9TcRFzkgXOpYPkXW^Tm;j&&EYP3|;S>XVn zpWY%t`E(9@j9O9!I27d>NEFWIS}3z2kN0!$Ns|xy5!ge^V%;0ZeT5@WQyt&lHlgkZ zy2y*~P|WVyJh|jW)QbNE4964`Jj2ztOC%G`-K<8FV!8AO#v1CKoh3PsZ|d+cGj=C& z0kT^14GsTk38#tEYGxu}1s=hjxBN#$+Ve zAFU(d)fpD1qy=X8FZ1q7PIezgN@Q-c)d;hzn| z`c+v=Zsk02R8ydtH=8II-E;z61#H;)(XZze2~K4M(#b~vlf=1@-1HpLQyb^uv9aEC ztulZJ=VlhLEI}Jr3PHGJJ&6(>EIjOLxTbQAbvjReKfD@nj!>vDtWqr8rz71pO^})K z5jFadxMAKZ+nW2>$+~U94aKWbZmQPaY3Lo{)`KEHIK|}$^kk(H>`G>aX15;;I?G$t zjXDz9`5$ov*@2HGW%dHn>Osz18#>@wibAB!6zAwMlSSV(CHYEeb~aaleZZ;F*>;2B z6{pK#9$VI!|1CZ;b{)xD(BNvDo4p>P^ryo!o{u<}y&igQK=P!xQLY?jR`g?%&npDM zqWqP6cc!pIHVl64&8 z75*J8qpZ+N)pbyH4#VHyh^5U}3!z3Dg;Z>dv_CW9V3WnkYr!TA)a>YwI<)M0ImvIV zuVDw+KDJ_g@yZr1FuL|P(EZr^h}w!A-^WN+V`;8%lA&&u`X{$yZoHdIP#PK1f@!-s zRy#OL6I6L^Wuh6Qx^O{hEvdQ>mUe@}3+@Cys68rHg**>FGWK_3D0HNHvF_^6WRAGni#@_W{{nqocv8L-{nJ8MIxAG+!zfs&ZL{*{Vt5$aN7*+0M`oEC5q^X^#zR()D~I zj5k4?fx3mxerKJWm^qnme<0Kq7~YQnP7tAibw>==0{JlCIvkZ97brGKSk>lEQPI zCzedv5VEJc-{=ACO5v;uPxBv<#X=}Kpc0lQKDz8O?eHB?;-^F&?%;Bt9%F*#iv_2>L^&ulPOV z>>=$(cFE_fni1}2CD9s7}4ku%FAln)S1?Y5sIFX5CY{EtGuhi4rO0U4SA_aE=&k{SG=Qv;e zKtW36pN}5}sjkmCr&(pety@|V5T(-AT&`eul@d(04{Q5&w-WhKrM=7SGpp1PvJu^% zyhENrwEj=}c2a}%Hqa$RMn_oO4~CqkIgkawW%-NzT8iA0+yd9~1g#TmjXhXY-gTfY zub+C#pW*vH_~aDxzVzB)i}GPC87^C?k}!2ML&hXRZ4_xbA%7By$qRlZ!f${>qA}i7 zt0M#3w91cr!y7X;#zJR>u**WRKlHDzl&K@W`R5-}{4z~&(?8l*6~F<_044??ZPNLc zRVI%cpz#&MAtfP8K*oPN6>19+A41)gfggg?XYkoySj3UCzB6B=*i@lq8Za< z(|ct8V6y!(EsJm5p+CDNw;`wVXSmtvpw9-e^6R|tCoqJe?j+!i>gSt_P7d+^4@oZ> zW*t=qrw(d10jR3JTzGw!l2v6(*UqXCXzs84#t))O1y7hwY|rgjaL5;?WrH{DFUMB? z*(ks0FRlu~yBvl#eWG+j;+4J)&gmL13?dIyO8GRp3ObaDz3Y@lf--rR?niqsV=REp{IZpA>QP$rST`b)7bMc#)N$*C6jw!-QDw!oDm z;dLLs23!ger_~a`f7e+e`6*?(uBE~kXNGhGwX=*35w0)~91gEQ_Z5`)gXmI@?4NPt zm1uq569SgsJScSTjpu?)7A)_~db?=7(_zEm3JG1C@H_=4YwJ`n5^D<4`bXkGsG&yR zmErGo^2=j+-l?XgVEAL~-JNFyD|?U*U)yZ^V+iaXT2}HYY_!Sn4V2`zb&i^qoOAI_ zNx{ejGb@W4k*{T77hdTBO{x9Nj;C!OB|*@ci~R?j#Q#YYmam4J8kWRtNQE8}Je1@< z;+^Cw6~>9JPp^Im+spFu7^^Ko4n~N`k$Uvc+-xO%AL>fRSVql&v%#cPU6C=+xH66k z#!#%+_Q*)bRR9gmnWNTE(|F5S_5@#sE}Qm{K4x3e2@n!(wH1X<^GarTcv2-e72NW> z?DEtBT%cy^;0^2q*!t|=z0O$&ev zBuhjW1r=rTByBl9Ac2SBPSSK!XHn4K514+ZyO3@pleqc8X+bm1eR5ZPf(&?KSvs>M zvf+ZhW5Zv@s}uJB3dayIa*ePH8mj+!4ZtRa2SXvGyfJL)odM_0T0GH~jfDyosmtG; zr&9v1Xp7**1-5UMiReE-nyFm_-iwFjW#u0-b!8C;?7~O~Pe0fD5IfsT5O9&Q*fTE% z&#Kk?HJj2yL#5QQFB(+UX#3OrLe9v`nZS%Az`$^i(0?KK9f`&}3ZSjwz2xUP<>XTe z{PZ%|q5GD5T~$YQ>DDRGE{ES@@4z7h#>!XKm~+1~hc3YS#;kjEyb6N^`u7%7lLW^2+JtrF54vrLMq{ytlLo=I^%`0B6!a33{+ ziV;sP1x8BTsAOCcPIr{Vn*RNz(yM5-E-*Qm+;W}A97CYR!>Y#-cm4#xBwVII#hgua zwm0VfCjdi0yuVKHng%83Qf*NGE0r7FK5T}0u@e6^d*q?;T``B{f+^V%`JoG{MW8Lu z#ygiucB3tGflis{>hw2p*OYs@N`Di{X~(-P^Kpa%LrWMWy#1lXf^xAr@m>#qy=`El zmz%|&c48EMJ_#6{kb?S9u)RH)7WGDFL;cVh-)z@3a7Y8rHIu^l6ouEWxDeC#xdTs% zFf%+nYn{Co&Uz*pam-o2<_SP6o34?gR20PNn;9{+rC0nEDD5_7TxN&AYurcLi2)~n zAtLSCsTQLR9{sxdX%pQ1oU;QaXoW!d1RX<)W)EDdDUmwBd1nxW=(#HG_?jjvAc=K% zR=J*^peNOc4;!!o}* zB0V*X_7Ij&ny{SJ8jBTMVdKY4S3E)*f>-k`Fq*n{2)Lga6Vap=0 zz_J?(UiP{Mo^_`m-S+3$hAI-Y={GAq4&)AT41{?-@huHQk+)qI@0bs~?GHT^q3_cU zOjvjqTbcy(X||B=vgia*jRMIXS*|Z$9tPz%j2(J) zgo*8Z1P<{uo*|b=*LiSC3ci~GNum>@Ksl$Ko(u8sLLa|O8D8{WL3`!26#1igFjrM| zT%2E43??UROEFW*6sCOm8A>GD{1MkQ4}F(fCPPEX8`7AbU614wW^ z)&6Ey`7`!oZE0Q33LwgXYOX`936|aS{(9f7g0-~E1>IqCNWamW?51OLN*=!p{Nps zOq(q*ec(;H)=Moc>1?&SgN$Gxutf^N0~l9z4+NZr(U%}`xrx2j4p9^`ia_1@DVbOz z!c}E#4Y7xy z1!EYq3jpm#NkuXwGaeGkO%iT8YtL7=EZ10AjJ1#B1@HtP7H;1%_+k{F8&1d-j=`PJ zgp0TDv!*-pb|i{e+!!ILaAvacrKYH0i7(Hs+`wypL98ddZaHh92+nLX5fma@h-HKq zAYlvYXF#7;4oHn(NZb8S9`kU66LVFj6S{M07^D9C zcAE-9f3VCnp1dO-5Kuv}x~el&D;fe1vNvOmF*}@}UL!p6@OODLTR;eAAOwp|2>w1Ul~)MaK7sM1P8 zcHaYO-Eiyjj3RT1?}16T zLa0{fZiY9{+SD)M?{m*|GRpbyx!~M&Nq)n5C_Hka2359KFg;;5>Oe}`NNiR8)A2Kx zpU21s=|N@-1BlHEu`uDy2L+q85Kvr^*>r(PkGr4w zvOv{T1FkjLz#V-rK+Q7Hbz)SWHF)SUO(VRr5tU3S+^S$jM!Dj8RI_qob4(J?cEUZ3 z#IdeCbSedKhDS{GXS?cBfj0vt2Om~ST)$FgtnaO-E|01yVj3CX0XzkZvEMuL(6aZL z{D*#4L2^NyRzkq}!%hvK>xW@uLEanL7N6Zxv3?5CP{5QFhHdPiy-R3SMIF@;o26UU zG<2csb7R2mkG2Xj8a;KPR?Zl~wNP@$ICQjkUqzC3)aya~LD{%m-Vv^)FpADXyWVd< zcSn?_gm`bI01`+tSTull2+j(V1-CIwoG}*NuEGcIme>wVEd7?5#bJFWYTcnhgyzSi zg0Jbxg4^AW%|n;Qz&vS@*N-RgQT-fndxGiv)^;*hCF8sdu_s2^a)G=idH-Ept5+P> zSot}nA=6wn<8mMVX~S(CnukH}w0b{rx{@5t4q5%;T@fzvh?0lb@!_VhbVyewXD=Z; zI))D3yWE?s;=sMM@RGb=+>o1gyhCETRkT0qZ3695zo6K3Kbgy+1Tz;h&w&FR9Zo zJVn&UJ9C`GcXEr5XbQs+e2GCZId7sS;b=>YmX*|y5P$9$fwA8q) z$IkLc0!qD4+#l2iq8dUwb52%NGENqI*j;p8a%+d7s9T2BOR~B`Fi1LCGxD&kGfAz< zBrSHxzp3`w{5iogA)5z@F=eAVh5$+lO()~N#EXs5GoJ$voPi!^u&7>_L`sS5U5BY_e)#!-}$L_;lQ~f&8VIDUtG0SP93!1g|L})^-Cr3d?Kf|$qf>A^nVel7mSH}+YTi7UxNFm(Ye~3}v+t$$M>xrYH zs;DFMW3&zPo;2>6JDq=J{d2%RD~+c8&ywZ!j7_v3Jk#q% z-JHVwSny|rSnNMOgcY^|RY!~rniW!K#PxkQt1((iR%o2$t!fW*3EI1PEX^u%<4!ZC zqO)0Zv^LNYv8yT5gP*kyCWlVSgZ4k&R@>ygyERy=>H-tIPj5ID-w>_9r1ck0S@?Ls zB-zPEl!p;2;5lzX9~k5RM{?3(dLTnr)AD@U5M+4s{~~ro{o-nVXH%Z6QKJcEbu9L; z8%&Rj5dH%yeMJbL*Ltez8Co!`*x5ThjlPEn6&hu-*6nI;kC;Zy?re*{AmI})A%m_> zn>w{HIWKP3&o<|$`RAu2R?)i~%eb>V)ne8(Z&lFsQuk-^Ij~tKC&HZHA|Lx`@g%QF zDh(2ANs9^HzPCRKC08D^gJA(1TB?mB)lP|FW_Huh21&$~up3N$FI6*V`ky^8R%GmaB7 z6ikvYi0!;`N)3l{FYj3|=GV0lM*7vVvX_3oN2MQ7W3MU0;P>X$XVm7oS#6h_Mn)If8rxrt+IT@aKf_!g5-nmX3i#4PHVwSNW(;kxDXoD4xH42-^ z*KYXHMkuAL=4KxF-wi+)J5}yG5+*>)4Nk>0?eWEybVS~;^UAi0ThVjbuJgIQJO4;% zp%m?F(5M6{_|Z5xbDfp+q4@<#27jDe)ls%DwNuAo5ZQ$FsyeDYA+-aO36bRXHA7KZhx6lUNc@L4ihpqo4wa z)u@p8?O6{tyP2Pp&H8_Mpa6s6Ce0hc-0sV4=m!p7JEr(dM2XY$fOAu3lVnAsEq*&i zN6}d8MDfOH?AEYh1QR6VRZOhhyoMC$PA8l~|2Tc313fzwRYi+d@&poS#$jm<-!G}% zr^${v#I?f77teUkBO@y;zM_A(n_ot?geB5i0HLq~-p^j*waRE)=`In6j>zN{-~O(!GWvdeCPJ}hJ2lf;#sMU^HB;>EP{Nx8lQAyQ`FI|AeB zo%!!~SrCu@ZYieQaI}=DY38uQvyUmokQQ?u5yVHU30MaUbx|NhcQlT#kFZEWKHaZV z2Xa4;Re-RFvOC7tBS5;PlE*HFBmW*-$w5+_k8pHQBCMFNt1E#(gO4xDw>AYo%>Xb_ zR-t5;&~pKv0a3*I`f1Vx4GBiDzy50vIOe;1U7yQ}rPW;tFHYX>SCqj!P;jl4mj)R` z@zP+68@ZWH16_}^t$OxhoH=1y3@#xzHEGftU7p@-eLM6A>yd{={?pGkC%)Wu$jwq) z`;+o`{18%OvhK2kl=B>o=$IPNj=vAiScX_2E@^G3GBKad`FtW?*(?anFL*I+fgvmT z?0JJA+6Q#m+%wamh5NKYB^7s26n3MzC0}Ub)6A@spr^=K_$xhO_=!j>AiD+irx6!+ zKTVt$XH6%j#4LL8wMs4Q#NFW*2wn~xSs0Vw-dmmq^I`k^XE$DV4GSr&X8t{aBk%I; z?inc{i7MM!dHf%nesm373*-Q1uBC7C{PVc$pCUAQ$uVewWqk70F#1t&zvKNFQVFyb+l?!fQC?6&O1^@ffgwk`BCi$Xl$epx9_ zsub}H1*SSxBIFWKS58y+Y&Qy)hMkiA3$+HCsnBnQOkR2vX_#CAlX z*vAd)Z0Q_fBf=pUQm{rnU^{RhlhS~Gn=X%EH&;yUkZ|?Pf6`c|JO6kYd+N&+-JpgU zVg0|)DZi#>Sv1_I52rT}sfdl|)yH9z%)}>BUzk=R5bqvgu|;qx@W6`7UaG-AB@djS zMvs5QE+-!xQJd_;vmou7FNSg#aOK26f3CexM&C~TbvxI@bqGKkOG9phlvy4sxp3`# zB;{+H^ME-8r)gFXScvM|5S&Tu5|Y}Asi_{^o{ZXUkBHE0ZfRx-AVeW4k9b9Fq47QG z=8FCGQuu?Mfots3e1|CA3+xW*X=2ux-MapZTg~%ikwCiXoGY_bn8c7jcbQipl(c%p zx7T?f5?|ve#fT2x>TBuA8c~8|U4!5X-fgoJ_ECSE4rmr z`*AX6Tir8tuye>TBA0^?+cy(n)Dq>g|Asn|KJvs+W+uF|xZiftNuFaF=?Za*GCP-c z_yBPsZLu^#eIip4+J1gH(LyRXu^R6jySse)PIaLZ=7&}5P*eCcnBTYE?_#yJQcjX}j(nk>N0*dLB%;-8+-ImK#HN{`*c7=e(Li@E{0fYv{yVVQh9o5iu`lfawpa0g57=I))MsncHhO`>`e|cde8n z8~2mTls{^y*Tu@Zl5O}da6el()ZLR!|8A{)SWTlz)Q(*zZ6r(0Wl$x+HM|vIgf1+fAELj9EW?9|h?b!@LzhWO5EDl`$^n*2 z2-rv?Ck*=A*WQL1ECTkya=Oy=+e;9}!lWk8AZ{I!TBT!V{uTmjMY@1Y3Er`BofTx{ z!WAWzy-{9tYW%36My&&w9gJR2zh(or(=zU_A@dqy7QqFEvlMh!4qr5FUTCrl^YJBq zi%iV(Ys4IiP68o$3gaMtwsB0_8~=c8$QP9)d5R23=|P@_1BIInbr1r>yzYHJ;vZw= z;<$MW0NDm?I0yWL3^JWFkaFPVZzRK_Wo;4!%RzOUvNm7pG)9DXx(I4j^mtBA*IORuOBKgqi6+-uZ(Y1J-zE5k|K2m%~oIyN7R0(k(u@i)ONaPA>UTx z0`AA4*Zk9Tn3#Y1I7AE5iKr6-TX`@Ch`FcKq zNnRCwETrb>DK>#QARl-F<-w;7>9|}$q|A?PbJO$4=+Q_ypMY$8KIhg45N*A0HU{VA z`%5V=h%-!-uacJ&^vlAj$zXdb0akwhEr!ArGRa@85-_W;HfIhD;?*w1D(W##oIYev zv03!iP4T+Oy}4}NBl!Z%-zU0ofS#iM012AP-|g8-Wx+ns+CPg?2X=W zfe0LIqITo-2$`u(hWGV3WxSl`BT+L^8dPf_jNL}K8a#B4d@&0~NB3ye8wtB@!G)Zu z_iQ8GAYKmaoO8OsA^WflZcMr6=I#z)O9&wN|1E+*j zqOoOd8h;{}%EVC4$&Br@&+l^Z{({Fn5CBO;Uy4DEjll^X{GA3sGK)`^eOtrxk<2Zw z%rA5@Q@X<@t2ywhXt`1nH7Npu z&{xybv$GXPX9GI%cBPGYt}j$|Gnpf-LhJh0ShV?{9;5}Vxu4QyCDc*euf3D8jyUvG zY1dXzs`EsioU@GcD~{*e7{Kl@iIyn3B;J6AChfC+@yiDyeX2$GwLi_&>s?Ief1XBA zHpN5z*_dYkX17@t7G@z06nh+3DflKXt~qiyu^hyufzE}a+b>+_7<0$nfj+X1Mz{TPY$tl2XZ4R=q;($8_MVI_dDC3}ln~HAk$BCU5ZHNO7E=9;NK7Wp*qeaI0 zT~I@}l$KNGC_@5T;`=@E4%3=b!~Is1#Rbna@^1QVtcHieJCWN~r$jXPwG$))V_M2! zpHYJ0cTrjUd8-29owLeY#AISr9^|vIyN(z7*F3e4TF`jPmVxNJlr|@BxgP!3Mu3K^ zblo3_WE(XcW6B*bO2l%)4*GiY@SF>^l)lE}r3~r*5IpjI0%(nh%%_>k;O{oN8cDC8 zka9m;w=vBOZBqg{^`kD^6Y`<|W7J&ntr#F620B7*GUcU`KwdOZ`SO9>Bjfb2t=S`} z_yC+CMOE@HbrU`;aFH!iR#O%pj3iLnq&-g?hc&mgK0k8|8e`i? z(%a1ub+-8?MjIDcz+TPX=SV)4+_Ob%X7Qp4syU8QvpJk9?BiyJ81Zuem8S{`C25**0$#R`|UsVU?NGF26~r0~40u zCZN?trreuB28)=*Qv+N>q{9i4Q}4g&p47CU5bXEtD$-z5#3lV-;Jh;4|9c(qPOXm_ z9XGou?{og1&O#R$eKjGV_`PP(ulB<6tS&4L&`xzKrO28!gy_EzynTCqm35v~hemC+ zR{w&Z9g)6(kMF`Av7O3$cB((lBh<`84!RtvW6-J4gnA^n)C|fAw*p?!Srr*M+t@qgqBIE6@?aVou-P{E?sT8QL6;!puVEnFiQlcT*{k#L-a5X9octJ;k zZTY_CeB}?5&t1j^3FwstI=5NnwyiGYqrGX|O{bsy<^+p@pg-;ckAkqlzj{84nH2O_ zxY7cbin>YO1f9~C4V<$Hz4v#!DAADscU1QBCQ8_4l@90115NqTU!?W{Gop@y4063~ zF8?m+;OSh+VTX390S-ZG@p=?ld!Chp=|DpVH}-29pS1$u8ISg=F5&D%UvZhie6|wJ zuiJ6!j;>2+DBg8z&b5)|0ZxlHO~uB!Wq2wb3S9|?PJOPA2>qmsS7*+ICfgFWCk4+O zwX~Nf@}6`9p_)k+s9@3!v>ad~OHAOlOtIG4{;Dy-s>hjg@h}l5m)#Yrb)kost9-PIzdtdiKn1AV25T^c?~o$OM<-p@+do(8iiu z1_iQ`hjfC6rUaslpZC?+2qP$mA8C%%n6q+0=&VX2DiHHlXWD9<37PDjc-wGcPPx^o z{GUSJ0x~z3=AO-5mpD^JPISaul!A`a$!`zfN+Q49Uj2O?Ojk|4eTMuMrYEkd>5(sP zvPM?6NY=V`;~WCE(SI&m@KhIWDJ6vnt;j$xzkLL=vj&GSImP0N*nKuY-1Oe!V(8IG zr|f|i1|K@mGhO?chI6JY7IqnicFvt8o?P)llu8oR0~Y7uNiqaylPn`<@zqu&*YbF9 ziaVIVJg4mZr*%OBL8!k0$1whhee?S=Rz|0Xfg@Nui2g}aT% zu~9fs&*hwYh*n?5aDP9eHPi;e*N(%-5r3`uQ}wnx#hesty;L)tbte2C)zhghDdIzh z3En~{Q41*ubpfNvTw3o8n}Xgk?Tz!rOi25}{N~Jt7HLPZ_NG1P;SPm83UCXO!MfhC*M z-CHoj_@`8}UXvjbCBJ>{&nOx+C7U)d{D8xUQdmZwuqcbc&6l7~e+Jph+A$EWa{RNJ zWWFvwyD(7>tHR=D35RTU_J)re*k#~3yp2=kib?$l?e^fqtm`ckon5wbWDLy*>`e2M9D$c~-Zh zUC550jXZv8BR9_D>Y-LLq_0WuM&N7v@ae!%4jjOOBn>v=qu%Ab`dGhdjIKzNH0xQIj-`wZ zqH_kWBM=^lPBsa?(K0oyF#&;0{qeNzqk^-8i6lFRqx5BiTcDNTm7g4iU$g%&c9;`E z3c6*D1$RywU)u2YC=*kT9WjUIbJTU0e!%W9SV7D>WGZ3cgk0V_gg_ME<SqQG4bX&-AKw!p{E9l{y2 z)*K{rhoP?yPM6pD;37QW-B%ELBs9i7D&oEKk#gd%-vs;Y2Y0J4Z=>dAj*6ZqoqXc_ zsZTNx>g!l9>IIsXZHv2@)h>cit)8#TFwo$dYSPUSN^A^0p#M@{`SgvqD{_WaaHlB6 zQ%ciGNCoys=lmo3xJuHX4l*8ARb+gdI1kTmUKJ|Q<5H?JhFZaMd7%S~k&gln3~&7r z`-D5YeYH9ifZ^ElUDF4u0Kbk;hB%tprFLXL3dgp7W3KiIxbfS{{00@p?uKI)9J_$3B!90Dpyx+`GGzl zDK0Rk)jKF3AMC|89!A@uZ)AViWEXZs`T;k5j zzXY+3%UNxQG6S8|OIM>`N9G*&kXUb3+dnccjS&m4&++ZkcK!qH)nhYOzCkdwZN%Pp;HOkLn!<|u#{Gv6 zPz2-L6}&@2I}de1ei2;RK$gUnd|#f|3yg$GV4aA)bc=cg7`6_i48!9Tn-WY{8Y+)pPKGSVL@gnksol7ZVB1v8O{H~Lg1U{_iG^fpK&BFe@ z;{9d$T1c#>uUW^$SYFg-kMVbKd<7w0;+KJ^ta`={xS7Y!I<$ ziVtG10?pK;r-@R$4I@wx#09_W{Dk7wj$ch@YPp*trw4ntI_lVMGALHRITmxjg+syB z>~1CRc5G(SpYMW>M>+=|c2I%+qaEX-w_QTAZH-GsHdV=pP?pGq z7A<$8ukqf^$At0hh8!8tbC3y9e%X_1eIxcD-J%2md5QhOp^yl2Ih%bwv;oD zl?ne~(vDDXRq0WrrCzZMfJF2F*Yr?~K*EGt0c470yT~T;-3Qiul?d^{9e1doyd*56 zMP_~~y9_lmiG#2@0sbpbn88co;2i5Nn!7?GvUvy|eng#;(^8mMcW-E`CQbq91ZZ>) zBSjq%-+hdwdOq?vzSg_S#y_SgX2y(3+m<)8>$2ic9t6qx3eu;Vx7U_5q$C)ZhhFu& zRV~0Y42L!=>DSlyq2mQ$cPCglhmh|i-k6~IWdmWXd%l%}IOro`MM--lhp328xRggu z@?ohjRK{>@$=AZyqe?a+h(##BkI0!(caPd59nX;y`q4g0P@QhcO>bI`F@@F_RjNQP zP)K4+m?SuitfjKav>m9OeaW!$+vlGB^|U#z7;IvWt62gQ&OvT<6^ee3+Sz+g9Y>`J zsBf?CZeJloo0Zq>cE&NXKNAh%3JcNINKG`?*U~Knxw-iL@f8?ipaQ+Xuak=2 zNZGqznRPOJo=7`q{B_2;?s~>)DfEo`N{oZsm*o@uJ&!=y$z}_M4~M* zeuw3sPlOc+BDXq&;QiDH6Rl{i(x z+4xEZ?Y*oGY^|DrY8>E$VIpvo_8qpJ7s4jcP~CG&E*M@1!?vEm9+Z}$9!tz88D@`4 zRRIk4g213+K1!`2y{#L`V%26aJ%TA28bS2ilV2~G7VogzW2lFAjgI~gK_QPnqdAqY z8p|f;Nv4jn9WA8Eg4}1-=W4vnr0v-OjL-r+gS%Ao`-?VYWfja8Md=`BK%80Yg6`S5 zg)?g&=?`-u8gwg(o8%IhsF!MZaoTDWG)}f^ubkU4JPvw^g+R!98RmgQIr$Q^4m_3r zKGpo8NJRqk`8kM9d@E*?klV zntchUz!w9|0n^N9TB@{PPrefU8)Y+}(PY)W6k>EYWfIELjPJi($;O5yS&Sca**+tKa$cI_JUzGM- ze9R4^T)|vivf}l7l%2)!($zUT(LPU1s)|9WCjnDT$)i9S?97kPEPEQ>qlkDB%dvo7 zd5ujioj{jxz(_6uoPuiIF)t$;D-P4E#Z2aV< ze$VVgZaGUkii8k@D2wlGsd|7q)%rV6I}i&5JjUftXPK&*n*VP`rbsnLFxHs(f6eOq znzWojn!{B9n7IpT4cB-~Yn>P|Rs4RaWAu?aPL^>UtCA+yjLsXMn#YnV$#%-WO?eSR zMQVLGTwRTigf+qnFwFij=Ju-a(O!9GD#0nhL;8NA+BtEkI#*|D<(#B(w`@8g^eL6@#Eq>sdx!W! z#$(N$*p9`fJ5YWjXpCzMk+3`=P=7G$L#ys~ZS60P0$HNu#2u#B+o!anwb|N7B)O~s zx(ypKi`k*S^6Xv<`! z+ZSuW`1^r*5PgV@Q{#^G3@Cv06t&k7s^eR7PuNe@;`@cKHM`Ti|1ZRk@^bP-vunA% z8D#?yDdh(}nzQowmIj^um1r!bE+ta~amd?6Qd7yj>1lgO>}^}%oCs~<Y*_3n*@ZgA;K#hqJ`B+@#1oA+`L^6?8os(Ax$aR^b=z;ZUK! zLr&B;eDY!kw`o*`wJD(UMRJ}YRz(bBB9M@hX%hR8cRL2NS&=q{uHRK=I4RmKD_flB ztc5}Z=K}8dxA^ug%cx^22%Pg_A&Zg?WATZ8U)Pu7A*Ij$5YLt*S7>(g1`!Ur?3sOF zy!Ux>`e?e^$Zdp8!RUk`N>y7bNl)MY_O7c?at0|D7juK;rI}Dw(Ai6FwEAN{XzzSv zcJciBj`9tg1H8~{Vj8DEZ&BZ@Pybyc|Af#2kwWu0yj()2C?{a+)JBRdM;$N-ZX2hK zX5KpQPD7!=H@mK2cdcR)16>c7jr+dAi6IH}SZC282zXS}WR0)*ZO|S)p+{KUVC61& zg4&^+zw4I;^fVkP>*sIwywAvN5wQhFtk*)UdSPm8TUr^k>@gJag`IB=vz>c z2TOlu+(4_6sdw!YbfY_Irn+423K6Zzrer-CI^T`Qu*>6?oIJWdJ>pAj6KR7oY%o>( zRRI~h=-C8=wsjr9d!56@!i%n7J0nArN2C-I*fmsY#+md(g1$`XPka!ox&IhJSVf+` zpU0|5ZMS&>emm=d1>lkSYXw`|Zd@{Bxf8f~G3Ey901JXMAO2~|Kom)fzyK6&O zr@&ly&W;r}WVTC)_f*o1W*Cd>8bE?H-+YvF^34YJW9c>rQ%jEI;)}-qkH(z;4~P3y zhV9FXZ^^)Tujjb zh&}ZdG+{U}jx5c44M3{-na?Sk#@%=Y1s;}K_=IAtGc`#m+Y$SQv9tvs7J1Hypucpe zPuvOG@GE9jgzP@iJkvoJ$%St(pMZXj9>Nv#Urw#Zi_u|L3yH61af-Pv=m+AOC3k1= z){AP^pzZTJrffkh+>w1CMOYfYA{w=q@yE{y?U$wxNxEUwWAVSE1Wfx($`OV3L~EnRl14GJ!Rf%8`sP z%INlSPuCCxHu+@(vH_s4Tahs0SPGtZQGJ^7(W#c#!M1iJS9bC)968KJudP#e0K5qR z>Z9a8p=Q1eVc9X#U$(D8VEJLX?^e)!8|B1Qo#bJaraP9c0Inaon3u` z+LRomTJ_`)GH06~9$oi!bbWXWU>T<}2vY@rd&67ACfyC^a3)6y0b?D?nn<;W654Ud zD;-<|n$f-r{PwsK{rhb3KZ%R*;FZ;W0&f(-c#=)UnkJhC!3)j+J*06Q3ZM&QhKvQ7 zBLTnV>2CivuaZ`i20F8u^9bkc6&C6q==}{12?2Rf67y7010u>Ib6fHDch&pWIbQB( zsnK5o6}ErT9CXH)#Ck#O3J31(6DG_Tm0|LaTeq@FjM3QMYWsE@Fi_5ztMGaW!L7gR zj4i=5%@>Esc!O>Wq0Iwh+iTLqu6^(=70~+jlHuG<91=jVOw>xFt;H>KhpkRQKiP?7 z#HY|j7*`I^v`^2*Z@%GRWGLXt32J-@n)rEPDi>j=!O5utMXtl6dBz&avisADcC~_e z^|040saPNz%7Q>0j~Ot`a&)6%oF$s)pMoM}>8s(i+U$#wdGRD(lPL3aXai3Jm#;1r zLjM}9YP?D{pcV1Y2_b6E1`6l`5if8MM+ z!`ut6oc}moWon)O9z|;ne``_cV9tz}iX4?SL}SLv`WNS^G8ogM(Sy&o{Tj2Nth7jL zf5F=Yd7V)JnC(44D1FXb7^fHKC;_|Sx>cFNNGqH^oX1QgqH1Sw%93!;cnY3@XBn*f z446A=+$(oRIlhKIjY&Rh`>dSJ_^EeO-gxw8$~49tbGcD9YkMss>zK)(HoMde&xZ;x zgap=_gdRiQC*JXR(FT!H@AGcXTdv>j$Uwlzf&oF&=Pr+NDDnoW>-YF_*nX&b@N!|*jiWvwXRZU9UPQE5# z^kR%Tbkw=GHmzd0KhOo;r%wkE;XupT!o*`0C9u)WzlP#O?ynq9kR6AK9VwT5Qe2!k z9L$3Gi4SI?LiF>b8NTOhC)6Uqv{sc3lc-)Ram#|d@`1@*_|bgK-3HXN?{KoG@KgCf7@uNT0|NSJ=&x! zPBN(tq>$L+o6WukXc*PiT7QNlrM0N|KpOr@IHOp_@Y$T$lK{l<2;@Y1A&F@YS#K`y ze*F=+qCK}srad5G@XYnJU>dVn`Nr7OUNINGmg#Xij&1^SbrMtsqad(P1@)y;!N*?$rkJ};M zbF7dSG~PLO8I2sSCk{B3eCKFJ8LcNY$}pRxWG?PtL1+Ahy5vW1oRr zHy>AT>4@M?=|dk3U2QyIP4Z<@u2nyID69V^038mU+EKlvWn;dr7gQ-U-D z)`U#IBGn#X7vuEdM78Jx+yx&Pyc;lX#7KyweU-fyLdq^E*;O63Xx<;OJAbTA0r_Us zu$A7&?pA(Hrw%dWYwh&PYc&4d({^lF^j(|Ss>EQ=WRGPfW7L}DZ9x|%eGqN>FhH5#Muf+_e)p2CdJ&*vP`Y8~|CsAtxq zk>@Wz{k1i~jmUJjuny*|;Q76I)tEGvHA9}!rl#IS+Gp9TPCv;{mE;cVI0>dGs?ZAz z(lH+O-6guEhVjaOFf80TWYt0v?2P4U#{LpbmB7VGw=2>R9O@{RiQ)rUG^^|WR+xF} zl45U(=M>8v2^g(GJmI5-$%EqCk*rGaX8?o%SA z^`yt-!XeYdrj^4Xjg3nCg_&!i!hlKnW z;$HLf-Vcwhrgb(VN#R_FbOhy1V4@>AJ@y=d5&hIRBroyoe~YhecV`*Lx4$2UM}4U0 zPOrr9OwOPVc1P>{=64CO!L(T;r&l>U76~K01GhU2C-5Y6D%j={Dt@QE4+0n$cCubx z{AsqyJs{{~x)YcT9seN1xz9YLi9pCJc7q-b%hadjvEA)A0+m#7Pu_RF4{DX>3ntJM z1@tdKCnHG=2}5})iyR(tQE8TTFDtk7j|h&HwE;`v_;8z+?R26rlMnGDrhdSe4-mY$ z%bAX_A24HN!<&2)qPf0$`&X^EX?c)7KUH7tux{XjnW}fuJrdvUAU_Wi zGsNy7uRF*=I?SmlRfFB?X~fe&4xVq7zHU;3AXdFm|1z-eFGiHwJ!7`FEwp9=T_q*P zvu;J>qE(#?mQPuu2ilG78BS&15;}!>s1EYNf0^q!$R9z$gh0Pbmx1Jrz$!4VzV}uQ zbT!qj9`#G_uwKx_4J4hQ2Dz zE>Fz;Lc|Q3f&WX%VVFJFSXZVvmwiW^gt9FeV(%C4gl(dOf_$81gX3o~aourRwFdVT ze;k%dL6IJNJqL8fc>&iI=+(n?W?hX)Jba zYJ@!A76o|_9a|KW3^;(ftt+EQ##sSIM0e}5H^4@4g`+CYQ6t_*zWZz61i1U?(0>c7 z4i6~>@-hv>w}i97mixQue({Yw7bi0Mt!rJ`XTjdv>;(tnLza{d2NAPpcy?t(4q&RB z!P$aoXi0{Evm}C5E%#pR=x=e=hOvI-^RSgQW;g_G5f8O1Qkza;?WFbqCi3N%&=@q` zk1*ANqcdfSQ4-`mh77$oYLG8yp&};^9$kITgrReny#SG^JT^h`*09;uPd^C4ueM`L z0HZ|5c$y;`Ik&C&wu&FM*se}+>_kAlv|rzhsf5%7XfS%tH6Uj6E0EBIS{3hXtjrA? zJAh@j53q5AJ~Oei3BINZ>K3xK(1Ghr2lc1(xQ1*iEk&+k^%NFlGi)EGU%f#inq*$sX z;R^dvbXTn1d0154gYEw*5(?A|l_HRAFwvwDnl+k%lesWy<^~hFU9-jVW&;Db(je2w zyYh#>!?+VDTp6)Nsl=ME@m%~ixU+b4__+njiFvXyes~! z#X_7~?x$8>~`6cPh0kofzLwktib8L(k3@n*}p92Q88*jMIIw}LM()nSP^ zqsEOnWrukj7V74qM3V?A0Vbt!2)xW6V1@l|(Wx`{cVvW@k3q=(tq#o_8dO`-NZ?bO zVT>*BlbIw-sHu?1@<0;%0+MG>n-jF__I`#3Rh4trRd9JCmZW6*s-B(cyBI-mzqOqk zGCbF6qWp^FRT5DwZc)TY@U%iMIbS-JffSbtt`#_dn_SpSr;TAz1D(ac))FR$$&#YHWsu=omuLPE3vp>f<#4n8L~x{0$)u>MUuCvVKC zU}g4@Y(c8-B`buZyZH^Xj+!K_HYG$}`IgHC>?`J4#=zN~1OA)QbM`BbS!7@aDcbHb z0#m3}ez^HjuM)Ij(^)J$Mb~zcpgP$OQgQf1ntR4MTcd2;>n^weaEl*E`6AsZMJb#o z&^uLCSKa&aNL71;UzAOC5CQRQ$%0GW9(ilxCTTn*?<4V{WneeEGgeI}O73PfmY=PS zI5UL%BtlY8T&OgvZXlEiYdV=3gdV&Qs<1|vLR>STn>j^qc=3e_jhnaZd@T9J5JsEv zwO>%L6qYm~4DQKAYx1kFk+SbOp~u1DyE%18FAxe@cdnr^u20GU-$p-hD@N;#Wdd;Z9+}thd(hqJcFg}gPntWGypz8OW~X;tpG$oyT9G`DYfLW5L|F#i95cv6Nu5w zKFG}n$)F$(w!~ftM)fMU`wB7njYpebV>|lFu3>qV)!i&7uWT#;tPlcV1lei4iX&1* zvBHAKad98GUtF)9T#JNWR`1!LxL|^6(K94BYpFP|vg7@Pf`O>$K)U=@YK7O+Jt;)P zsrcl}eOi?8>eHJ>Z3)gscl5rp6wc_>5NwW(?jnR=d=8f!x!1c_{ynHIh#JLc3x*k6 z8eS2SD?@%%q0l*HD)%$+pjacxxT{%!KwmCjA7{sxkB3Oz*m<8o&8JnYC?poVMltOh zMcG=`j#YI2DtRzHV8eb3F1qSsBmKZvp(erPIn^M2A}~$N#-bw)-$q~~1}AJEO?4Kg zdtYCgvY=@yjnrYMVRSU2I(2}+dg)5%D_u7})d4$VT0$P~fKrR(HEnY-gb{Jgh$KT^ z3%#w&ObNMc%0C?JK6T2l^Sp~8z`SqhT#Tyq0H(~qq8S`x%h2CnQsq8|k_Bprke{cg z#4!m*1(#vhx+zFmiSpQKW)menC-y+l3yd@gm3$=qhdA!wv`;d;3v41t-Uyu+K6WLD zk6q`exJsjtCMR{6d%Pa!dWY@w<@^Pl5w}#__w{}|d8hzdg`#hvVwZB1P?^|IYOSqE zRcR!3VI+jZn_UX|>AI~gvy5wd{7+gu@9-r*?u0`?YpD3Z=)c&R$Zy5*r^#|#`O>2p z&YxFj*CNt`j({|n;OHlg;b^6ifX^Ul1s0r0Su7y^S(DJr)g@ehbFG=d# zaZquTjoT*ZC3AH~RV?=DRrHVG{# zkUqjg+HaLOHmQDl@{E+W_>fEp*LeovQJDcb>3aMPFzT_7=Ck`6^dM}A2IfMFZ+JHE zfP0C1V^ljSI27;%+DvQXa;9dmlz1O-KRz8peE@ig$}w9J-yV9P7H8Mrb-Bcb%>+iA z5j%7UL-<3_YH{R?sYwr>96`hf$&o^d1cWue3jwf%*k|C;Hid3ADt-P1&v-RxcFEI* zZ&m`{Aogq$$nTnmvwb=}`vZrxog)u@DledZ^X3P zEjxcSo4NFDxP^vIoevjffmdpe9X74xF=}I_CfJ@A7C80jcx78*^?qSb6ox(+WQ#AA-I6V3x%dT+ym%p275g1|R z6cO@sGhiL|DpKm!RAJX#x>mi>(OPt}-%90;9N_;w*-qR?iKYXmJ;2VT%uXi&AXj2E z&9_GzP*hII#-KEy0&M%899zVLMW91HFf$B~IgAy{Hr;FE072`zdn*zdQFuK=iI8d7 z?JGMa$9)7w=fxpIH@PsIrevV1#{YYXJwIrJ$dJPU$4*d*f>|hAd1PSRbse;BMp)V8 zg`2J1nb*~R3eyn+*@5$BM$#W)Oh7Q>JJf^&vRJQ1@*`><1+BK9lXNLu5Mk@5M`O-H z%Ee&k7lWqjtDV;rIPwPyFKsD;<0uyN_>pA-k$ zmy?N2G56*o_kR`)3`>VoP8X&N!rGVHGPR@TUORg+p!@6N!r^a1GOAAbkJ#VW>k_v& zY)g_kxBJQlQJt1)2V_nrxT5;O$l=x_C*)W-STo!s7bhVZV*14|4)M*u7E(SrK)?1= zYg>s)iQ&i4y9;|%kBym(GL$}{MBi_nrl~D;h!0-?G4=TMQXtPi`@&2D)Qu*+tYPiyeybE+a zAmEo@KOU6a;5pTi<6SudMtd^xqqMIbaX(n(kb} z(*HueWVkbKL`@nWP_c1~mBzNJ6T zcws}YNHcmt#k4z&E>NCUTZq?;T>D3!S~QHoF2?MA`HVnWs*OtjLlF96?hge$6uGhb z2#US$ux)hAb5L_282z!Qv+aYo+a##|aXVLg{Ahf*W5ky|}oIA@WfgZWe7 z*a@0&%xh5eCPY_hSt0aFW(s&;Ll685L#3em7^lT^SFBYPgN{}Z_Ki0BlZ|=aH4%C* z<$el#rt&;xmZffK*c`j_MZ?29#`n#r-go;HI@B9(m}G`y-lfYVD8#BJ^DS*Snv@uS z_)m?$84}mb%L*YGS3RifaSrLJDhQSQ@--42;!U4yv6P4DqN^lXNh&kc=wDpHcJfQa zE5C6r^LE>4+68sLTcf2|NBWcfR#D<7`9(s&+%hVI!1qnp`v`gqq{LoKujr{;yANp9 z_mW!M`vhS*bC%?^WH_zCh>p!OI_=G554VGlY#>2d z|9Z&RkGBz^oBl+@Z>fn?7 zwzwNClA|Ch`1cyx=Tlk)@(XAtnwKfeALAKn*(EKxbKUh_9R|CBVV+=AEn%GcV&ISvat}6W0~BPb0Iog;Pe0B=q-W-Ov=F2IQp$Jg z+1j;&YN(I2rRrHf=e!S`<|~o@FbO3)DqJ~u5oFNwVQ^6?bY51SGc-DlFEv`SKN9`t zyoMS1Ufg_etCp{-nr^~EozNR9-5%P#Qp)Q&vku z&h3nZK4t`llzJ51=I`;{LXx43wmr` zjQMi}!B;M@n@o)o6cm@$kG|cCDs-y9o?IGiI;3Z91#!QBDB{*mXqDs z1iL#;a>|X07??*6-ee_i7R-q~*r8V5Bahg4;L;}g`A1-0!3?_SN>;;+2Ro5mhNZ|F}!yD0^6CPtGN@-Ac2SD(b4>2pxn_bh^6{#KNg=%SV zgzYSoOss;bhoK$gOE?*QgDSbHfk9fRFkugulL!p8pRmfO1cA!YqM}Wym~+-#I2GqJ zrhf0oUP73%R&XhIA+x2k%;I;k!V_f?VFy3w(AT9&@MFc@z7S^`E;i_|u1T z+>q?UyiU`%EzN_!e9(|6)3QZ~kul|Rn{-z~Um;W3_~t67;15DG`cNMl6!qIe?XW5r z@+FdYtcrCN(_XQ&A<`w^Dvbk%5^lyZku77f2?m!uo9T-IXs_M8S?ugxDA=K_So|;@;M{Xptm4ofbZ(Q{}|8&8Fe|Zb#dBC3IRYX>163ncv z+qe;Xg<2x60tC&%1uVdixWtSi`QqC|fODt>V8VNWGjMCNzaoZ}Pdj$;ZU2C?9aX8_m*y#gRg7$BUCN%~OUqGslmXgeb6(yROKw z;b|`g%Q@X7Mh%}cqIc_se<4$#k*w@yzE(8CVPph3{7#M(?^%N>#D;UH#i}&J!Pb0l z>eTk3cM))v`SiFWgR#A5#3!{SyQC39E{fg+wzw;>^SrwTb`E9Vc>&RQ4g%q-Go87Y zW%$fit%#1(3tHx;*frwryjYF4l9nl<79|U@GEpX{O&;m;hUkavXUc$}4~q2_8~EOR zdAd zpdwLTPwGRyS&*W7px3H{m>!nCC!jV|bk4TQ2;+2i5x@ri?e{6G=0=b}s)pqrPpy+e zy;>Yy+;ZJ=J20#~v`>nE_)Mui<<$NbNlurz?G6rq^7C)>2Pq_$K(v0keXlpuf{DrY zNr=-hNiQ?JVZ^2P72&zz6qcwLhxo4;s~3@c-nu;I)FQV}C%4Kr>s)B2*`uFNa30?& z!W{oeJgU58mvy;U>3tMmBmv=ziimT$6{&&=zZ;qoS3vz`jw#QmIQbVYGyao)N*^QcME%NIh`H4swsF#4B zecJTk-c&qg;xDkH$3cN8PPfaj&ZqCQ-?a0x0|w!v-f_=^DIR3et&wVn^#}4^jjX-W z=F2MgH(=zA^A&*_OX|;=T0C@C-^s-$=<=f5!%LidoDOAe2h@CJ8IVM?9I;*MpqYvK zNuQaQ(u<<9jHaQS|1y8=2_2&*D`D%c4^H)SXi7G&l@wYeQk!)brxnf1uv!?1beia6 z%1q9N2{32g?%DZE)y>tL&_K5ZJ_5*+4#}*4qd9lAB}73O=xrZ zGP*B}ps4r;F=cu43pb#hTS(?4gmwFu7=ruoP?cw>@X6UJjS&?6g#qu6+#wkXeWn^q zt=5?GIE-|suW8O{PC|xVw*v-)jI)w8uE6X8KfJWLeApf11u%W8QJP z!2VFJuc5MA*Jsz0TWFn1E2|NKG`2ekTCpjC92B`;M05%~dFqhRxWYcyIync&Y@@tn zCry7)E^c)5X?6G+h{_rwGhwquC*m{<@hGxZj*G&)84T%d2P)qK*xO~oh>i8eSo5S{oy zwSE0C(23vHBvIk`T!m%-KPRSN38=JHxbqRPy+FzJU$MFGPWU+(oi(@wZcUVOJx#u# zFLMM2nT;}&K|R<9(7R+^<6h0jgZez4=iy{%f&M6h(92L{$39lI=`r&xp<&nbuiNOfmB^S zM!T0}FjoImWZk4)4Se_>2fE4+`qHluVg(vg%BwdXdSbhB(nPNxa@n;nF{wbxh2C$ zp}U3P?a+auE$aEf)Ih8npP!Ku;n!`}e=D#)_GXTxYwwufQO%qy>k!%i$y(jwPcsZT zj|{1&vGIcF&7vAQwpbH{9grYHmL9gYCbK2uGghY(upWuK4BB`hgxRbdZMQH>ntS%h zZ3bz-4}?P+0uOw*pfg^KqmT6W+SK0DarGU1mDxj4FqV9-N3{yFcV1C8Oas%3>0kZr z8FyD(2)3}oS+5HRACI0@{lHE4y&}*tt!L}1)_$CoOEu_0mGn8_KhJ@m`j%oxJR=(T z?vb9Dj!IoHb$>9~XvkGrIbK2t)WhbfHB@~Z1jKmKWP5OKFD3@nx`MKE25|G9CrU!YtfrSMDhsxg!~cTVPa)%C^{;Vr*(hEHOxvFCm!a z(=|)DbT{7w?|S1(gDg2X1Mo9!ocXIE+cdRu*_t1B;xUa-)aib^9qMFFo!UxhNg|Ei z<=h1?5_S?%^KxPz$CBzcFXv@|OiH%M1vo?YzPg&*FPv1%Q{CG zhQ75-!Izk(ixH6fe2a^hkIeE=8#l~1p@sV6F5La%7`vnQOO)mebcldHH<&XSbK$U# z!D%V(&79kQ6J>=ow}$an&`5eodCDs2smA|)%kUxiyHu4vt52_^RUUJ-6k>gT_IAw| z=v*c=LNqh*C4O-&sn=JevxVn}A)0K2 zs+pR^%omD+h+5W`L9Jlbag+{pt8e{$Cz2gp*lFI{cw0alc5`=(4ArZ_40NJ=&8M^k z@RqhL;(EmCVjpi_L@Fk!{4YnHV4U&Pk$Ov)qyke`yTw5O85&9HdoV_OIaCRKfJ9mm zSlbh?|9x%I7;`76HJ5IzZlljpeT_UC5y3R_Zf2EZF>P1aA;O0jmX#J}kvD;7 zX#!M-w+dWSIsZhdzWbI}o@nA%xFC*auS<*LS8-6cQ$x>bd1%ErgMSH<1tt}`^N1q$ zofs{O{!5BkpDM{j?Tf4m!4$|V!tHlnAr-k^iX|TwqmZ}Xi}{rGP!}>?p`}PM{MkhF z%XvaRE(t14L{nsUuEwdjHC86PDnsmz3hM^OWE*aEt0abqlx6cLq-G(+>u&8SppQ_> zID5-8!mB!_2HOHh|1ipVFN~3+QUpKqU;=Yg`eazh4VbrFriqq9WJ#fV0OF1u8So7LD_vDsZwA+&y0 z;_#hD2(l{mqcIe}jtMNVyI#)c896ms%?8?=8 zc{NJ`I8f%5Q;^5NQV0;itqK7qRZ*Yl8GPGby6E2N!>$j zF@=%U4cOL3GQs_rC`j4ufya?n=3dK1xx!~v1itGa!sNz{^9O`6o@?M^t4ItZRtkvP z?s8g&O_rNFGPFZQIY>0MVi#j%^qPs9ZKj~jZd7U+E(mp`10WazmDUy;V@;Cq<~?e> z&h<&kD_I^Q`^f~dIL^Eo0rK44y@AwWGm8rvgD+*At4-id8a_{36_hEh6ue-t&o5i zfn|LjA{5pSH1P_ff9m*8M_sB0AexWzGLPwG(VGn~pqO;XgF6IpmLD+Bm+2~i`%rQ- zW$Ya5JOs!ifDGFpjyZDvODy$$tbiYO6OJ| zS_XMJ%tuRjLr3}Z){B1ENo>SA`Pe&M{sE0OWIwTds9dh9I|Xq-Rj;S-zjEBVsF z*!{qdRA;*?4(D<;k;0;Zbd*ItaFIdZ2*OhNOjN>VZ3$r3w#gFtDwcI5RR z{q*0LHG9GBl9NxYN4~Wku6qKk3&Vn>^h0&|#-`Cn1+#Mi)K@-JnrhmoAfz=%3qB=^ zodId<@zh2>y>`@JAq0?P>H21>yNn?*Rsbyv>RZwle#!%||)@j$LNbAMC6F*F3N@F3R zWyVm;QRHwcRR2NO9|(S*y)2lJYe-y_;RB6j>FjyVB;rpFRnxsiD*VP&Ep&H{ATeL3jK5t3r*)DjR7K8<+HM5asNKA?}TzZTZ%f}wAILkm=nB(QUgQ+nw3#1&Q>H? zT5-CtboAC(NF*ER_hKE%LNPj+{6n7$P})D#iX&}2(hazBkmNsX zY%K$%A4`<)L$3=IWiheYx2r9)&sxh&r4gF(G&f-dPI{e78l}fCkvR;s z^mPxTR&o~*(jTD)!pngXA=K`@Cx#ujrZ#Xr%%SVeqsW`bg{}%t@gvFJ(`+>Af;RJb zzE2Yen5SiLj3*=Vc6fSHcF3}_*C9T-l%}R1P%EJ$C zaiop>>$$}s+t8)jV(mIE{r4+(!YE9}mXPC}+-;4M#;DuBk1_$WB#c*M%peEK*<`JC z1F9xps8KtW1zf&ld4noDYylo%WI1^rT?u=raG)&>$H;}GGO-ui@;@T-Sn(>X zX8>;hY#=Szle(Mfyn#>pnlbU~3(u(G4QOdM5x5s6L%F83)otNsAtb|p)(#^yY%@Qz z#;}wQ??kD#7kICE=Vl)X%FsXdyB#?F{>H3nM6mh%W3$+HBeQK?Ap!=2f94)Iz{Var z5u4_=(kO8P8B0r6Z8*2!f1?Q>)*KHlbqKj%sno+Sj7hNslt4bBKMEaJz0ZcpPuU9r zKsAaLpK=_7u@lYrJX}wBQ)ic%a<0JQlqkjxO+K!quqsu$US7WPAKnd7`9)sq0Y||! z16O`k-aB0S+o+a=M52#2azuy0eqHR`Cq17oc&!Px(tR%qwwB$=I`2IX*H96Say_Y7 z%LLy()W?h(bbT9$rk*WX!L&^S9Su zfFV_UdMi_Ja$U6XGUSUevY3txysU zk~{NWFDD|)6$VSEw3BwM*JCY0YtDRh1s(u%ytfb+fhsh%Zt9e-wy8hSsiLhNyRW7j zeXT0lDBZ4q#dyzoxH=!Lr_VwD?7Jodf4?!Kdg@AhaXAU#T`+iLDX2kKCcfM~7C2Z$ zQS2Tp3|hO-yqXI^%Oi;)w=d=InjbY;4zCY^+zv}BdlvwID{5j1LTU^fZq!oLhg zIHz@13r4|~zD>|JNOzx~kLbThjAU7}HqsYFKsSE;p`=*~hyI(L6=e%dGW8@!TWO*a zPMW`rP-lJ1U{tu-S~u_##V)YWeLAFw?Xe@Y=aU-V(*euY$1x=F$A~198%Bo_PI9VJ za->v-5ZVcxni1!qG^VC@onBkMEVv``UsTz8VO$SUYQL9f@&m433DqYn^hi8sIN~f| zj@vW8rX5-*KX#Q~u>lohee?M(uPIIcH&k90*@X<>*OCayRc2{Bn6YFJpBU(G7*|kJ z>I2FUY!fF6P5O?~JIh;t_KTq6_e4GdoYmVE-c1Rp$BTu+P;tMsp`{dAS4UKdp(?x| zYYZ76&&K!K8|OCEZ|32AAaJ=o8+n;70Q!RL!taI6f{ZvVFRE>%y4jO#R9sfpXZ~QX zg6`J^5K%`bvxrzH$`;#;rn+B;+JRR2z#t<5qjBkk#xBqz+LXn;9|KXj23md~BHd*k zfdqnQH9B}$)gmf_9sm_>DaWa3lS0Y6`+? z75Cnb7GAvn0A8#y!emZWzuj~FGNZ5`H%jQ|N;TFos3i} zTdl9KS~{)%)onY}%;xk%&fNzL2sU?UEuD)viuiCf(*8DVu}&GDu+4pWG0aicZR(QK z`X6W=(fW@^n6+-!wElRZl(FuO0|$bpB3y&)!SyqCaMU@ZDG)QVE-PHlRTJ|#I*&Vx zyl+}dU0s#?5(W71-7R(CS`gAur)+!xmjYL@>P@X{T^c zBEhHJzT%yS>)8=9&&me+(!F>CJ64{xztx%Rs>ZC`Q2V{h!7+wx<703$(Y<&0L%IQw zx~eI7Ri(tIxfw)O66k|2oEEV^J#< zkR>lV_%L)PzzspbOIkS177Y2V=To(Q#coC{lf_?)4GuFgv$wqT-SkAOTaV>J2pq-g z-I4Kuv-}#?qU6%aC0E1*0D*$SQ?9adN9;!UHa+>TD?qwxMFu`C*%xtbn2wLk`!zFHx-&-*4i>5x(j7Qy&am|-%}Y~J|=LG_W5T2dK1NvfyYCau zglbVgb@3#^&5gj43e8Def4<&gc_t=WYXmH7yUN?&NVq(s1q&278drG89oMv8KQ3Ox8 z1&Z{g)ZB%q*MSbnUL8mF``oN!E>2&z^`2=ei$0>mReY(*?q+Yni2n!WCg_?Y{*z+u zgV=Krv3l(k`0itcsrs3db0g35Gy~aixg{S<09V6xv4uqb!05HOv~+t*Gv_Pg`sRZ6 z(X)2hBizOmbjM#AGUonBk)mEY4IJ67*PxMveLpiL9UTnuWA?&(^D(QljgtkIx#w#H z!-+%tX&DOrocrc;0V?BwS7tzQxS^2u>`5ku4|Zp3groTc5JR(|-p{U!JnsG|9AP@q zelOr&&>n#a{aO>|O#WeK&Gc=VN;K3Eyy`qQl}4Vn3r1{*otA;$>O8Srb;eNg!$v01 z|7(BI$hJU>BI!!;ErCVY3*k=}8YDp-2fkl0V3@v5r29*YSD+Fe*{_s3U$`(?0HyYi zW7I*lRQ$utYwz;VUMtCNdbDfe!|vu9F6-bk{55wVP$nPLvG?DhVZEj{7#~4wg9Q2xXfPY1bZdgDTfmN#2zf0hp zJ0qVPoQ+MLX-NbG_Z`b?900wh?O`|Fx+J#cdo~kBtDLd3#Lt6;_^e zCC8S9Zum5ksY$p%nOOT{p&n_GN83IdLC(Rw2;oP=1=gmZCijd}RGQp&kHN_(G8`dn zz+OLm?|Gwh8u-TbE4mhiS=L)9KmUL=cM}R3&n?sndVtWy<%=-V67DGKj#En#0oy=) zI{JM6a!>jWv}#|WN!YfixJc*N9c>`b#2N0!v*g7NZBz%(itZ}NIVBCrs`OK zgb*;f=tkyVudptf_CORKJ9a#CcJqI*<*{pbyHjdtk{WXfg!K-Y=RBL@Xoj0UO!_+v z3qvke`$Z4hF+;=0DA9Q(PYxn~n8e7GY0Yk-Mrl?K9Px6xXl`!1hcV7|QZLFID;Gl2lu6_O?Fl}q7m5lN?+p8(kFDI;Z!6c5S|PicVu&c5 za*8!GvI!nf?CIx`kVs2vho;!C)K2EJ#Fd7uhhtN`3ajQFg6r9IK7t4vHmkztqIql+ zQ2izdHpH0)Ft9^HA%po$a!k!5e9=b%h@6H+hxniIEFV4?J8zqcyPJc;|59|=ja2Z+ zVNmL-$Bq&LHLxNTP)MD&_SyC58PL>C@{|^^yL|G%w47>;g}XB|)jVLqw&c zE!~>=LT~&3In>fqePqr;bBiALZi_{2Xj&CAY{l|Svj8#afI57L&U7S6=*UA9EflS1 z06T2c2}H6pOa?lRHZFT^OvuGR^nT0Vj<+;O>`IIEY z(EjEpUs8f(b`b8pyFq=y<)8Z2#XJd4QpKwRjk*Y#YW~WnAho;lBsBY1o&w!nL4IyK zHN8Xr$4RO-@2*J+^Il5mv0A<-$s(C_5-jseaMqbL5D8I|AlNE%OL77IUx;?pZz!SH!l9E9B0@|>*zjS}b3c86IN;cqVwy*5~S*@~1qZ5Hc>u}8> z8M-kSruLBV$(!!$bSy2aCi~-TiHd!}qTD$)1&DQu@0Ujb-ntsuq;)+a#N>Gw-lb>C zpwSD&;vpG7D_AZ!QUS~Mv36oALPTPtjiiY53n`iPy&tbnr&7w$deBcwLUvGP+1hJc z8sRecA<)19z?f-toX=Lofm0vLMUxe1nJm&2F;u@465&FwTsj#D{2Q#?+hUeY6RX6k zf?GdsKXLDDDmVj9xJD-uQqiZ)lUv^(%d+3PWY;99JzJ)UVAniN9?GZt>>p0cA+? zQq$h|`p#Ds+kJ-(KO4)#|x(;^m0e_a6{nTaD450(4)qK@P`+IDB*@v8Er;s zRxn%=28(!Yxy9{UK+#yHEv&5IBlk*BZ6?^WMRpLN6X}%Mh z1$ijpthq1W=NxUz9#haRISQSvZE3>~fpDjv8{r|DA>|l$>-If*pR0pJxaQpvUH(53L}QJ4fgLZ|tW6>) z-}e7@#2^(~L#ympdHspJqdB0B8PUK*Eu2N%YkTd1l=hmw_uHwB4YoFW`XXYF8NTDU z^1XJ}Nit)7e*h7t)WwZulpP2Z=ia3r01#}LFdl=((dAz>Zy;@B>o0k{7xWU_rduV{{L*5fC&ONCPb`q43EH^Vr2 zS0y_FX%?ruM7*FY{CEiQTU<`#>7cig2>XridyRJoY4`^U^1Ex({&=xG#uk-v;INAp1iCw(R8 zAQA0te9*OFk5UazFXfb1q%=#g(fOBdr6z)O26SF~+(YJ^<}=A@u9Dl_C-EmdHeaIz zg6+^#S{{CMwBOjii&rSl+8EuDtI8s+wL7DJ%r-EuPh9dr?9fS2 zjX+;>=0mi)^DxL5n@Kl|PbD!Bi&1_y{k@DatavYz;r3?`y8|nbUu14Ih}gPj_9|`q zFpy%X(&csS#nW~6LuHyHs$zF z7O~b3fmcE8*URpicBFagKx`MQACH6AnlY+RCu}vO{w%TJ>hxVsPWyqgGGMMi#6Hu) z`NQIcq=gpbPtce`91?ZJSsl5N?-vPie`fTKwUok~s+xJB=>=BY)V&9#&OY^uLli7IjhMQd zDZg&BFYwL(dg||N+4kiZ7v~|_{BBlv7!IXei zjR%>{dks#IYLpbT*KXv0V(NJ3l5SeztgR~5E&$@7*PaX-4fJ|hDxQFu#(E`sJv&NnR0LU>-;9YrO&7v}}sNEuJjW7i62j`rXfuoLa zm-wSzljpKfnj>L8$;IU%)17wm(2>|1kobJ2@kpme3Vd1+2kKZvAld{+Sf==Vf!<6G z*l0Q;kuSVDTK<27`hC*ij1v$Y?MkLDRTmkxX53aPJ{mII>fz{JAvOM85zGgX&F@@! z_^`0`NE1b!p&fN6DVGj=(2sEK0Vx7&ka*-$BtSm+q+xa!Q-<`lBUvJw<=L&I$@w%D z&T~#lBj$=&tuq+9Wm4h>9pC{^HU!i40cy3GIh}|yPCZMAi23;(0&5F2B`o|WP$F6< zNBiO>u;bo6fCT}sOj9j$T(|hi4$MM`@A?a)4KvM7ZgV)5&tF!fRzotB5!_A6SQy24 zh?oMfOyOnLVUxTQ>n`J(NkarIvC3F7{SePC(m_mc6AxOZ`t|1#DyKQln^YXAYN@v6 zfDj06^1*LE^LCv>H!30jQ$%s|6Qa|p1ukI9uQG#n}OO$=8hh7SZVdcOH zCvGK{%M>{W;vTr}M2AD3|jlH~w$3vUE64sqm#VEH{b8XcUM3G?4jZ2+=+t|DTE(1?=5QoCo6eyh)KL)DpFdUu~1vY zy^sFWD>O3$5-B$%j zcH9o=K(l(9$w%tqV-fmOvs}k7e6vJV5(uNq6Pf=Vnp4`LGi?GHf|B}qCd>2`!JK-Z zT6IT1~tD}K^O46rWCp~#}=HGJ?Eh91rG?4|%^+6sC6W;t}M?8zsn?~4FQX?-lGYdOzP zEL2?DG7K`ghR1%jp=Z}>hcC-m`BW**8a{3J=X5&?xFGy(#wAecCOaj5ZXSgOhYkvL z+?SI(jA~z=cP`dl{^jVoC!g-A>pebh!d>3`DY3<{Sn*;_&+0eW9_1tyw?c9}tM&M& z0+!z`Cv>Opf1<6^4vDB-;Q+C6@VgX8Vm(6&U8Pp+j(#hq{Ki2)irLH*eJp^8O5pad zzV@b0)p^eVofrA?I6I(YM&7y3_y@De27`fTVE(Y2}=P2|8% z_tVHrW%5yFX=FFD`RH;iG#~}MJ!YIZg!AHbVV<2DB_0-9ep9z^sfzWr7cUK$mk}(4 zV?e%SQ`wr3+}St=_CWt_K{g_ejr4B?0<*Q4kG^mz7ld&2*rL|@^c@odL{lpX+1gI8 zLDv4+_%<2jW7|p+o4m4nzyA@Nn&umLa?5x=jdd<+64klTi7r$-Fr0*amyZJLAbD%; zwSddLHJUn1ssvc}>naTs+eQ6yVEcstZ$1dGUq_wI2y_#RSuyc(zeQo-s6|%s?Sgz) zE^J(OA?LLlGyoCJcc589gkCihRm8B5nL5|P zf`NVQ!5lBhp*}Wxrbt`T;`J^4OyYva@dSE+XZ-2f1=2-|!{0+X)WM3(g?Cq1eAlt> zX^PVj8YW1_c9%RiiRM(T077R3T~<(8&z`W{>zstU z;P9weijVS6-Ret13t;NR*(Nx3tt|s{Ggw~F?%1v&$}E?#hbf<9a-J1UB-yNU6Z*;W=cW)6ryE6KyyZwT-2A>`O-{of6g-QD1j6 zKs3by=0WyEM^c9n^^IdT;$b^1KQvn_1lE zaz3nJrO%Wj0@zocxg(S;xQkcq#B~qbo@FuVP|35uba|tr6h8H>*>*HS+s9=y$HF!; zm23b*K)k;nF5>j*JN~mOIwVo8!MwU}DJ_08xFAa08VqNx7Mco1)3ovik8}=}(A<7Z zc!vb$j-$NR1FIIx1%Amir~Kp%Ll-^moMdz;@7TSPSDo94J+V38AxHp%Cx?ht`rZ03 zaBQkz*NWJ+QK?n?s7Bod%V4H@q!06rLu-x381tIPfk_@-DNW8YPz1dhrm%W zH4{`=GMkPMd!gb^LyMNKU;Di1Tua+W1N1Z@$ggnCB<7T2m6PWoklw)=d*LV&F3cU% zRKR=LSAjF&rK4HyDB~va{Ie$$7f^Bg)gOV5;Dq9e{G8s?o;YSG+4>4!9m$ad3r%V2 z9Ol6eRLpL~hW%b#rV@}YKb#nUS5}%3=tg#H5Fq0F)T#Jj^QNkrV|^j{;SmwX99I$4 zMT=UfuJo#4N-|(KPk@vIHgKa_*~Rg*CQGt+ns-?0&A?@8@>3*1NPu_2muSu+mC|HK z6%Vw;{vg-btKR@2PmX@aM63VQdZQNDyaOOjjq|0-y7N1KS)K z93B;^(jYkW&1QII5 zUy+YG9Eo!~(*D450OI0p15`F#+~Bz(`X20Fvz2CR<%yJ`4@5IP!cqt!T+4bTtcbvS zfJ0{7q}_78i0sg*&wHK7+|v>(bdG-?8hmHo1C$L701LmSABZ~# zS|5fOeDqOh^t*b{II8^`9mJR^1xc0C+IHO+D%+bxvZr8lk(Yu0|D>}^4RnvfXDl^R;dZCv@y!Vmm~5&wPO zcg22lf;E1=nVCJaVkcr6i>r)qRJ8*XztjvN%Bj*|LS8~ekrsdx;1Kw;HVjav0Z83t z^@V!Yrgl>*0Yq%%0!;XavDdu&=HH&-n5285p6is)vc zz?xA57}5_A+4AdC)-Y#^=_n8WL8d8cn(%G7#Jkg;{8dX4<^`pfIR=!a41jQ=<1oFU^;~PIIm)=4*ucS5^{V6PTGmy;?mb}>L)T#+ znT*>;H`FeBq0kqfss4vQc`vn~{|qeeUcDt}cEBy(9|N(GDBJdoOA1Xir6T?-)G=78 z!6SJ(Be-}@F#B055eP2)8Z@tWxUWiXIGlGi%qTpb!ICBz|(ak=hVJ=Rc5`9-q zotF^9q8K;v?mr+hx;22rT|6H=9whxSFC+#x%XqH9XFbb>b~e(`n1oaQK8)pmS7dJY ztL@~$+o6+}zPwu!Ln6PaIA!J4P6?m#&U}j{Fbcp(P`U*ScpDM{R|A;OA((+l`V>F8 zWGo-|K^*KxP9!Rgcs@sh^u6`l4sn4g)Vf7ZKm47y^3?I?N~9m;j?-xnK(0=`s)Dnf z7F+%q?m@~)Fw1D_vbZ>2JNAHPavv!$lJRc@QZSGkzh)nW>~I?eN?D@4(&>#sAs(gw z1ba;RrLgjuMHDlszC=0OoPrx|;R2#&@@3XH)($BcKq-qwJO&hQAIv^$(fRb-J zjDPg?T9Ya%NSOrco`({6Le^xWMGjK3KC3ybw;43o+81NW9wQt4`E7svmb+pBnqfCU zX;j4|l1LGiysN?kZW@1)w9T%Oj{!Sp!6RhveGj6@)9nCnDz?^J%8{k>qR>&gYl8^^ zI$|Rb&P8R`FgUTSvsh3Y!Y3PWg7*#ax%Z6v$VS1@YE@za-j%z6Z|_|fq~bYy^Um>a zhrv`OJ7n9yB(d~#h57bpHD@H^#+YMs(?@R33F#R%u~Z(D=`MAb z30YeeDT+7{3}tK-rT%z#pZxwWOw$}^P%``*kQO@}#iez?Gyf_SK6ik~e;peiI+ zK3%avWvagnFV2krF)}ejS`%*r7{;FKBo4xp9O>JM@aq4TV^c8&w6NJ72Sr1&5 zbzy#!W_4MLKt<71lx$MRQex(7LtmCOm{kf6M7}t{C5I)!cjC;=CgE?Q!!VW4-C&QbzA-^Zr0S1Yxp9LASy$#{I!5w{09=3l@t*ws?IzeU-e+!IC;h!ORVr z6JYt*)n8xKPjiL&)4JyELK)(Uq-ir2wJDWSwiK81yfn)^e(5Z;0X~IJs3N@`C3`~*Y?v$p>+{)52#|v z;5Otonb@AUL}SZ5p;AftAr_w*A2q`?AEmV8rOt46g5(rvINk@XlJh(#e%4M4$lxo3 z@|?|;=C4MNWoJ^m)<{4fvl7tWKtb^5B`m`!Rdsytme5sg9QUav4wZt}KufBZOSw)C zoYy`W<*e_c4*zC^jq7W8p(&}WIBvAHcZ_9Sr;6h2=bnM_!6eX70t*9DYky8l}i{z5iTb5 zJr``3Jrb@`+JQTClm9bp9y`J*K!lS_206ji%uO4k4C-5Wc&4L0ztLn^h=W+NNR))A zo-=7(*|z=moWKkY+_Q8h!1U}YS3x2YjaD@` z*oH5G|9+hk+-x?6lN?4+ZIhV&ZU(0TazQ5gGsO$xJ-vO7wB}%*|+rT1~wgs4# zRHe37aUyE)ETjkq(zq7|#XbSc%DC3?40Gg18{(Zd z<8ntM1uB!MEn;l>#;^pc8aS>+C-(qDwjxaP{g7J;tF$6Z;hn=%K31CFM?`Wl9RwpvAUD3|< zUMZLXj)X-PLw_|2b(ABNFyQ=|K?Ix~6{Nhoz2N@(o{37Vir;=M+aw5Fc89OckooT0 z9DBI{MW)&k=XdX^yWaxJ$@&- z;-!-!fWDpP`5NB2fkxmx*(%f6*DNzy~LP_%& zK%IT-tb;qiwiZyk^7+N19xxsY$_@*B+Zj+~X+vC2Wgnt-Wd#_$9W>+*_>oc9y364Y zc|t0q?+yK?LH5tiL5o1lahYPhCT^7NjLXBFT(n5p*5ADg1pq5qDOu5K682;k{aIRh zmR92XI7v7O+NkPxvwm*e^lOktP6htxODuC-0}-KRyr7fJa@T24x*mqTs9TN4BI z5c%*x1dPjY=}!ERndGHnSMU+&m z_aK;m>hhHARVV^r+e|J^qg7&Y5m0#Gv*+gJT?h?8^?0BJm1G)_0Xkd?(s4!Q`lcdo z(v+CQ&u^zFIWvD{+*MD@i1fjs>+c8+>bm!o31EQ1O#t0@Z{ej73O!UsI7Z;x5nbvy zy?@I4F0mVJG(^mZ@kzyZ?4>W~1DPW0F53S*n5@Opx(`#@rtA~6uu-lC_5(+I7}!Z{ zT)v}Id)Jh&fN@q7$u8;N;a+}L46(F9>9^77E5*az;t)a;BOB?Gyw2Sg6-FW5LUXP% z7F?)JL=iNJ^9utP9Wd|+9T=o-jj>lI>YtVGES%P3p6s;){5z3+a5JCIzVYDrV)4au z%Ed0AH|8tWrH!Byi_V59dJfU-#3D;|cIBY+c5lO)7A^KG-a3qaPf}{xSkGO)Hm?_f zb~rCJ0AaJaf!lDB93N)hm*?BLXsuWgo%Oi{%*e>V*Mk5CX`ucMi z8yNX1zrw&&aGm8x3fOa8Bd_AlLoS8L9~&^SNPoAA3?lO(cBUV8v$)l7{i$2IRB**> z%CE%}$#PApL0GZbfA0e_#p1bcX_0a*RP6#WSPsYDmXa+6_>VVjZ5x0;AsApawziWx zkYI6tF_aYOxCgiIlePJ@{h-E^6IKDI8*%&@!*q`3+Z@5+WAo~KQ&oXqwWm5<>_K9( z&@-M4*5LIx@wAKVqDY|n1De(@zO*t$$AAEp>6NF{;Q&JZ)~IbTUMu_1Jwy9nd$7XL z{Jtek%ms@;1E1cMfydMsu|edV;sSMC#2e$D|49_+#{n; zN1AAPR274VO}&N9NBoYg^^h# zq5BRm=3=Gf>RpQxc@wa9muv1tUS+>U8@(Z2yvyvHQ~}A4;&dJcqGGNIT14IDUa2#$ zyz_KnwUSszdGE3!Gsm}Y zId^~jOm3GSFA7Nl1rHTgHPD@1M{b?QrG)=&H;5UD9;u3=YT+@@F>)`*SFX11k6)%` zs@W?V#kbo#^4=@Sn!h~PhRh2e19DqW8c*-6xO$;NZMsnZS8KM!Wm2f1A_}He`tU)D z@}`g#ao3+uEDGdz`yVRee)|*p|3N4l;?~yt|7?g>ejFJOf`axEn3joUZbnUJ=WNsP zV>Brdl5GELkIx{&SAle5=ly2QACL?!`63?AUv2(G==Am?u9k6d^O_Z&L!wN((=?+W zE~{7OhnfiH0#}>@oP`~0SKE2j1cnD;DaefC+SDm77^_Y)5CnQFrLA^72Wev81y6rK z*8G|@o$-5SO_2#Vxr9X3fVrIl4joLmN$ng#XwZ*u-AbuSYQx{b^ z?Zd_bM%R7jk*EFH3LieR(be$UWWJZS`P7rjY*fB}G0K4a<$)k`jK23diR% zI61{rHvA`P{aE1eM$(a=xP~)@!tm`&G&|qqquJgrPu?nbjSQS_Lg#KprVJo^jTLPkru!lKAn`rsOKX-`@dkN!8vGP-MbG@6lwXxV`bDxK>RG;8L{SEe<2+fVQ8TJ~$&w?Xby^yI=l)WZDBCbL0yHe#JNb6e+o+7B^ubt&>((2 zpQ|UNND50r$kpmhJr3y+>-DDVK9Z>S;P;%#jWf8f{22BmX=QS1l@u4`hgtCS#5zEz zu)Jm2%O<+bgp0GPvs=X8g2D@{bea=>r2_0M8h~SI`&Z;8cmr}2SX*WM&3Pk|zRE38 zO|RUBlGGS23z(B7f-ruh_+ct<#hp2#;J<(KfZ+W(Lu!q_9}^KPTmH-#dusf=BUQUq z`{3Vm1n0_py(~_EFz*%rY0EwnpCLBrZ|xJH{Rqd&CDL^9?0DKe5|<-2!1q^~np zw8dt4f~!gM(bY{Arot92Yfktkw}tqreECSLhh!-#*uJzMTH+4XJC+BRP!EK$TxjUH zeM}Jkt(RU2Eq`G>mHpt>GsD0+JE;vNv&9F;kDQcdnqn{8A>FcDv{^3~$2X&WL*)_0 zKud(tEAK#w0|@y#k!~4!&)qMZ=AT=0riIH`P!)j!jEd6?ki@%;zorGOaVKLZ%6#P1 zXGiJ}-ZiH-w3Ztf{WC5X2t<;^j>w;v_#D)Xr*$w!wIKgRwRmI>uwM@$bn=K(!Ceyt z{l<1g9pM?R_FY`Cw4saGDGGoD=qg@1Vux6WdSULTjkD8-^h;1&2@CQN3kF z&&ZShSv@{!ZBJ<&_051BRPyGJ=n@f#QlJ%@@Ak1bko@*_kYdd6QEc*XuHL}_{sIxf zJ<^TI4MRbT)G{Zj54|Zow-d{yekPKm{;H)%JDwB&C^$X5Kc`q5H%%#~si!AQJ4AU7 zw-XUF#t1H<3=>Rt3arPwTpqy(dcgFY{uk7E_G&1%po@kw9OW@b4+&fZKKFN5{9KJ) zMYD*e!VIzzO({DPBxru^MW_I5!g{Zw&|qC^{$Ovdb>U2H()oMLIb5&Jb(#8MFfs(# z4`e2WCiTN&pX)i(6C>C5?Q^!NbkSZT!T$_|9WBGUDTEc3V_+)w4jQejgyynpdJ9rjr8`B+228ZJyp$)6n_o-J#H)Ucm`WO#q|-DnEmwyZTFp;-Vt zKbeyCN{c3GjuqA3=DrYZF$aF1Rj01B0_v-%>)(irR# zS}FK8Ci7)Bz1S?$V_x;_(@C$-n*{>@MR4g}rU2wE8`THz^RGKsZn;sNW_73w+82;s zIRHS!k6^aOUTFPMuxLOQ7Gb)&QUE}H->$Lz{N@-0A>_^TS9}I9--R>M1iGm-wvVjU2aRwI9AZ+oX-PJ#w zWV~&tfjuyeBp4J~l!JllfF@!QOQ;12q&o~v&KD(sqS8T5oZRzqv@!n7gG zkDDg(hEA~6R%<^tUt=5E|0nqXDwXG@(lo0+EU4H8zYx;x9jUPnnPi{h7vV z0D;0pp&KwUbwtQ^>V<=l*Wm{1*~uGbJzVtBKlOKSq?RX(yz;GwMsuDouxjQ3=?Nx1 zz3g#XvM_8Q*vzx5y~{nJlEJ-*u1C4$ubDmRz?d_-~Dli7?RO?0?sbrx5d#y@1C7FWE&2 z`o1yYQ^bs<&Es(vvYg01wJXJi%W{q5OTM~OY_QIQWz-m$2@WeI@NQ{b&}p*-gd^)2 zgj-*6oZ8mz0a7%lqtKZud8MkIr~vfoJOFG5cRbu;Iz$OB;*ynZn=3I}c$5uJYOwGn z)>c(pG@oULOFV4{M4aQB4#8~G`9;A3#3g0KSrnwI{- zblH3g!C_UN`CpyFRj#5uu|X@(6>0u0xfC-+C0)IcZ9aC80|zi|2%2P-JxYYJ-~$V= zEKKwjG@`?e!(e#T*@OGW&t24D(nu1%5GcBtCXQzI&-G04Kefqm4A`p7|AVR^_%M_9 zxq*IZ%SE#gYOA=F!ViFRp4~lF(ze(>doY%dca}*Wd+nzyOF_oV7c|Le;PlMWdejx4 zGS5gctmtD>AFLd-)>!6f6-1PP7Lkuu#1^pSU`!k%xL!wi8R?L*=A3QQ9#W6XX-1_z@Jm~p#v+$!Yj*M4t^ZJHm(jnda)iWqcJ=lU~7Jx~qntY3BW4T7(A9=h7 z^qIDgMeq=*p(LAx$_g!QP*0g@y!?>aYI8d2!j7~vlO7;%7|v1;Ww1=oFTj^wgfCb0{p`i zl8eiO$`y_LSU@oqp?X8kwbSThEZRhAfrajokTUwtlE~NT26qCi6(<2GkQz*SiAtT{ z29D{)xM;+Ce7B1U7PuZRRf@;*+(`N!X>`DR4V*$=?) zljyT8kR44?W%a_gKZ6ca5_$sk?RDHn>Bg0170pGE+vHQdh{v%=*GbRqHA@_-#ewmo za;z5>?xmrMiUtA;jWg0Y?OpGbT@FQSKBn=yT|4l?16qYm84PY29#zFp1E&UHLzY%xVg||5Sn{$f{Ukw1LH_JpFLhfYojRgNn*m>Dx@x7XHUU3!j0 zz;*U_J4%FZlJoi-88y6nxdS$VuoomAC#>1;kEyYnXMx;m4B^e4ntQnZXn@co(X3$i zpsvt$<6s^sKI2NM&wz6uexio_%0Z}rs46JU2rdi5ybN^M(|}XUXTqcMq7!< zZoH>vxVC>yOX8J+d!j}czKOS(PXfHCAu9pzb4b+X=OYGxPn71*Kr=aO-Ll9%Q1p*M z+u?ivDHXS?qSVE@{OzB2*NHD)jGj}CmYYul#1IUeZ6epX(-5|5y3t{IogQ1`DU(EA zIq8?T4M9(YZYS+1=4wSwQqBq|&K&nrJH5b{I`trNO*S4H4DpmObkMf>uOK{3FP&%^ znyEI|8zW8~JA0^3eVwZ{w`}D)^||-^8$%XkR2#9*)hLu==bvnK9>#qn_??H@T({xZ zly0myUU)+o4fGfH-{C?Wpl(En5;)=JXDourr{^u8=PeSQ`~{P7dBoF#KE_U$aFm<9 z19acJ3}pqCl{6n_wpVGsmTcVnZvl3cn5I#2?!l>BrVVTcG(Lqr6Ka|$c`jAW!c5#M zAcQ)tT=CY`Jw0UAw6xz<+1>1#WGvo^i%dsJ2X{(I`VqD5IWp)_*}@`T1I>z9^tYSn#+yz3&adCl(7Bhivnr`|>t zlWbEvywdz_aNtA-k?MIwpp-_o1g!X5V7Ork9HK0>y@_CM!#_X%&Y(^lhz(A8uh>~6 zXWA~Pl$t(v39(g0QvIJQGAnd*KZGHr2|LoJ5<&9-;IF#`M)g2R)Vv{`VDKjA^o;i0%6J&WGGk#;set%pVA`gC3ZaAmwmQvC%dMOoC2{?XkD1 z=;B2=1D8D@S=H`brp;fo=c7D>gADPIRA*Nj{7|_n46o(8 zF{P6h6(Wn>rtGRAZD~Mj5TO1tm$YXNKl)mCfxYq7h2fJaaa_-Bq6w{N^awu^vJX*9 zrN8R1ga)lRi|)RKm6NKq(8@@i)Xc=#`Tr|yJvqfZzlb{WnU#`xoWxbl{BGK9_v?A( zLswRREQoO`SZFT(59U6a$f^$bk?0$xQUx!tucnQ@P%`5+0@XzGu%nJB>xFVVcwLXi zfZ#v&wX!7BO2G0tK%5LXg}kX^3Naz21K>ji>a?HxE02gW$V{rrqm>u)*vL!nB|Rkp zBjPHwk2Q*~(?-A|)y0{@Fi#zH<921wP%-+-|7&nIcO(I(>KKSqVgFy-hq~=@iBbGlA}{5PDUFaz1oYI*CRW}J}B}}EO_q| z;o(6vo;=Ki#-h(WQYg@0@T&(e4y>7z&9dzUzz^y-6SV`~s4|*^_;ZR?dTfm9@{bz( zyb9Y_wKF=$l~YjZT~tNaUkM3rtxUCH+?YWaG*hf-i<1nrg}J8Qr_IfKCha8P7iURM zR;Iwd`aOZrbN~_rE%Di+?kK3}?z`ekB%+(S1a~7#18NuEdEzY^P5idG-!t9gl7=QP zfL?dK*>uL7st5{>o4T0o5uQU9hDIs>SDBHlj&FWn*j~#{iS~av=Y5Xx3$GTT649f(Z8}dC+XC8%Mc*sGilhid*x7RC0PL7vp==&1W>k4g# zptJU*lVi|1b{bQU{5y(ZIM-%fvTus3BMhuxrz(PwzuR1J5+vka1l5n*SQ4B@i!e$s07sg{t6jT^aGgkY#)db3w<(gd z{k1g{zq>a@6pSMCH-)~eG&H&zzC<6#{<-vY%J37^|0i2?!^z2Bqw`3rbg1Cau zaui0JSS1^Kei1Kk+F%4Jp`y81AzIuuL|88#!#`0H;;zXI!U1=h_Z4t&s=?T-h4E%U zWn{3{ERhHt#;1i0I}|iL9or7CqMb#m31+XOm)v zMTUdz?Zd6GWpmCF7AobC?|p#rHxtL8Q*3LLp8rF7AOZ#-Zo%Brgu=`5h zH+SnG=RU3qx*e%bU|LF73Z6+_#_wV(opJRPB3t1L)*aff8I4VZq(jD;@i7-2oWgF_ebXIUa25DcMF41^%i_{ZvZV^*~LZs?WV ze?ssPeWC}<`*srAEqrquzKR@N?#JN`F**x~F%l(sK@P)32ndu^A?U$;X%~dE&U32a*;c|}1mbKslfYH6SxDx| zChvZiCH3n(=1R#5^%rg$SyjA-dfB5KqQMpVd{mPPHRo;bHW#`@vML7VuV7^!q|Ocv zA9;2`=c!nwrJ+-|rYnY0MWcvWR^d8?3xB1{oVY0}{ywjyMc=Rz3Ubq7iu}%BM+|Q0 z-p-xtc@M<5E^lP9MEad57M+a)rC5d60J4a`@TXmT1uAL!+ae8}m*$y{!Yv4_FQDu3 z@Q}Z`_W~c-qhgfPWFFYCTpH)PtWt$0VCb<)6_YA-F6`bp7v9YR{@d?fF6$fWfK zuZY-gDRk-fi%f5@3`>4K3k}9cUiF5N5%dmg>;0X8nFGssLe>q|9o5#YB?*Dgk{kI7 z6wjZ$0Q@2hvj>8?X5Vu?;`*@)*0^YhbX2Av#GLi@i>LLWe-Xpf{% zE1!O;4`sxg*#lEbH=|%*{RBtE?X|j`&LmKg!!pqfVu6&>#$ohh+S2m$GAcYmJhcB87=)8 z1=G_wNBhJrK%VNe+GYsUvag}+ZK2iib}tp)kX70q+kmhdZ8qG-C^DHwIC9TAZF4H& z>JVOOHT2b3H1P(cYD~NM5%V|&G02bOnZ1QV(R;c- zn!^fu(Bk3-_q1vjC=I(VdR{lcm)c&;>Hc|kBovRA*GXww$xFie{QotT;ogpZqA=PQ z^{=4!;!$1LvgFKuVD2;MOECT6Ms#h;1El283*8uWqPB=gRf27+p0F6qXTpA60fXT> zSpO}oRHsPe6ubBh)km;#W3WYO-XzuVPUAkG!l~y_pFpYgKaud;Xz#)Lu3n|og@d+o zkwuU(f`Bji{u~H6G3>68;qdX&+RF;(R7Mw-dUVbtnYN;*QTR86K`XS&qJ7dy6K zyfMX5+yG4Ig6}1 z=61F$2)NGmDO*aEA5>$WppkwYcZmp*+#Lt72N7k{! z1%?|je$625`lJeSdO>Le#yK$pOmYl1zb!Qb(w#2F1xU+5v_jdGn33lpVGwYUVcm7B zb6Bz3wpwy3rp0e9D6u~hm)xS9Ic&3Uj(IR(GZDw5wXWgaSsVz!#5`6mhl}X;W=w%c zLD-EUi9+&;p|cD++aW-5D6y03hh>b07}HQ!8~V)or{jcP5gmAIske6Fo;-4P34&3KoLt3VKWJhjJAE7vF#TS+=ZY|OwB7PNeHW3=K18Nw1oW8K zo09!r)KP1@f>L(#fCrfxjO8KG!BK&Rw9VV};)8OOF(|_{g+=6xnm(pPLN0v`!Jf|` z@XQSC^c_S8_=BIZpthxDu2v>G(4}h`f+Ol=*!Z!{gDYfru@aL;nq@jKvm%F5-tL0h@ zV_Kr(sl|hv=pTUlRNf$gyDxJQ`;qNYFwxQm+%rpxXPyskOh6l!;jn(E9%Me$Zp40< zXx3g_C$b1|cz2v)RK+MDZ=jG?VeEQ3nrG7!&qk{VO2E3ThLhzV+PM5c1X+ukg2H=3KS$%xtNT^RN(B`aozh=S4Y=|98JOcfdy}PKV zqq`^Ig%P`80#C?=SHPpBZmss*g1pqZ)yus}#4L(`epMMGDfP4n=%-xOBcGdn#*O@4 z2ZM6E1IHP9X~Hu72se->7}6@ zCA%CxdX*J`jKXbC;>la*V$$uj`$xdQ2|{LX{$--14^2gBWGMoO*whA+OvKxGW~X@L zDSy^h=U^)HU}R3PH{Sf(?(_|_H+yo#7vZ7Z(C^f&_`fGDnwf&l3ev7ew&7y|O_)FH zz${rX8|a$4>F@yFGp}yaXGp;A`Sq33K>BJ~6QZ`LSeKnOG+|qpX}3^U*RcE`sW#ahUY7?!qq!9HA@cQB2Kag6yb2BLIa?;e zxKY1#S;owUiJNg@aMh`&_)YNWMG=#M@;k*HPj|Rx(YI5(B@lk+A$nYjy^-8hVw^2L zf98DoP<@xj@?yBsd^H_QP6R4rC?VEec?|?R%iyV)2msx8hbn}uR?(5csBs({lt26c zlZ%FFb;EC>x7ibI`jRG6;)PL$D+Dcw!;GpJ+6Z@Qfq^CCS(11$b5lo)&i9fPoG;pd zp+ZvsXwj$V&&E)kC*`PwBv1-dGJyc_idCgPGHP$x8~GQm^xUgiF*8w5zV#5^6^e6? zPUA!w+*VeB%NEr;{{!K_FR0*Y_1*@gc7zCEPAN`xg6&NF9+HThq_%sB_aH(q-*M0% z?Tta#_)K_Qt9l)XRS`3I_YhwZ1HHV(6;RLGNwLXlj+ zDRfOqPbZo-e}P;NGr+1gz`@FOj7>(GcbL?P)SjRh1@(m|l{}jwT4$A*C!|$a7^K}lEp_1!Q zYQs4?Rql)?XohVcqvRmV*pnreT-r4*!NG)kaOKE~Xo{F?B5D`6yEr{B?m8l#`MUm` z^|>A$NSc0I9;|%XdNC@!@mPS&=u2eB9Rt@Mz9bBB-8+Efejk<9eV6*Jr@6JzB2)E3 z!(0Dgu48Ky@QO(K_tqpn$FoOOrsOVcvHqc0l9Mk+*qXiR8U=AClCTGAf%>j$!RACi zFPq7#2xLNd(i*UNu}z#Z%Cp)%=JIL&t4uYK)@~b`W0x%qJTGDXROOkRyZBaoqyGx+ zX9w)lC_GhABo}`wG2mf;1?m&^mMns!W?M%=lC(MbOZF_C>^SThePZXV{DLCiO5eu2 zSkvoHD(a?i$H-k-Yr$Plwg|8T(!0i(xkD)SP24u79XLhpztOB^nwKT*2>JXGjnB|f z#%=E=y`Uqz61R&-u$LVS;E&P;Tml{3%(ip<%0d8-@zOe;dj;;p8wa=!0O~TARR|9> z+F9K1hP_g8`3@n{Q3H!EIZGJ#v+?F>Z5pad_;9a3jTPA7npG63rt*A~iv?X<^_m)j=gOo8Q36~I=1Y4}}QBjvTN-@c9 zUwg!u{@xtOez0=HFb4R5O^-)PVmaH~#szxrc3yJ)hJvxPXZi>?Ds zJOD!eoNm*8*FFLZF#spBEy%SUoA}P3@FIF+IgCgK59=q_J;4nQpq^PtSjLxt?DZw1 z3$H`+@<2N{13t^o?>6T|u4=0I9PExX(C^vs5n}LrM9sHGau%U?1>C;6uYdDU9aN zL>lzT+1leIhm!~dueoYHqB{evH>xbDv*Jlo=e#3$qLg@4YmzsEv;wCQ%s-=v>M@GH zD)FpRm~&D@C3b<*bsJ<7ebx5P)29fWKc#2DDR->xv{f~Zq_=F}OHM1*WSR((=oh>i z@}E1ky6Y#gZI?S#hS-&8AWd7L{lUmV>aTZLXW5S9ED{%%IK41Wc0>0!_gCfKt+vg# z;*-KL4J`?!L4|tFzn}wqCbPPiDZ9TNo~crD1d)JzcSXa2`-+}&1`2tVBGT3)(o9I; zFHq9p4zbC-PI0V35>h;@3KF4IgJN$0=WrV1ID~BYo5yk*uu%`(5xNH_A;1!O7b*R4F)t z=Oa){CdcBmH+UF&dLr%gdXJ_{jUPV3|93t~$+#9m7Ir#25Ey|-5QLVe<({T=$iB1V z!>w`bYMHfcXlcH+FW)Yx_LGeJ3zhNGS`*U>2T`e1%%Vp%X%KG9_Tta{woNsVil0R< z1giBl>ZV+LI#bRRP9fPDcU+#(5nn=q74*=bY^vos20Ft=u>V_|u}UcFNFttF+b@;L z?By|t|6&w{WTu6Z#qQ2cj;1ylwSIHihgS3{)rhgQAb)v^I71Rh$Y0G z{~VYAe{xfv)b)!}Hy|$-?sM^q#ckz?Ou~u%->m5p9y$H%gc14|sCbcrIb(^sZ)9i2be{#V~&FuQouRC{$1tbE)?Re?B zu*B1jnB4mIjZZY(rt-l0RvfPt6D!bQD^&fMbe?hcwsAYq$gbQ8M=@NI74>q~(a)U+ zy%r9CyBX}3T0){LVZ9Av%(}d=O>diLaD>ti_@o614 z*UwVKFYzVOuI~SG_Xx1(1Fs=G!<6F!Uaunex_l&{!Q>qET+LWY?wE?IN{m3ue*j0l zJ@fCbw2rW(=Iin!nZ;Pr>(j@4Ma{ML1+?y1C&g3-A#seU$6$Xzyr$L+!(9XdbaT+* z*7EomqZ&X>Y(JnAj`ykSXp;&zfsAJFo9QoXclZX#p?HX-3MWiuLl4`xk?^BCr}bbK z#`O6!Qj8Z{n{hk)MvT=PSXq@Rr$6<*oIOkxno0hvb(3U@IaNbYssB$XL4^5nL@{0o zs7NP;p%X^h6Md@fW1i_InO!Nqn>HxxkFVj0CrK~0viPxN_ns0^yyMC`i_=bRCKY9u zizK3l zR6>Bfj;i$BtPrul3iKR`@`;PN<-??6uzdev2V_v~XaeeJh*=)qZTtly2G2ni>>+-} z5=tjet!ZyUcnKv*6|nxR2CY!uKhnL;xqQ!c|3N78?G5V3o>NyJYoJWoeSlv9!I9FL zWHwRxfT1CGYn$%Mlah;(GvrFWKKG=a{_qT#W@Oplt zs-NSX!%y+y!UBT~o*!vlNhj*psMp8|ssNx#X^#&E zm65)UqNN^*|90<*b*g`e7h0d~pr(=02y-L(W`bth)z}3bf2mOAMBJbyoT4JT5<{OF z+Km}sGll3}=llZ)=iT#bo@0vKu*UF>rZ}~{VTU9|LR=ncBi!Uu5Z-DOhWEQA!c?(G`v{q>8^eK;>?SUFYMJQm!17hgO+($QY7`>@@AGBauW(YeVYS z7V8bn`HM_15)rEY|?puc};Sm1$+s zq77(X-myX$RZu|LvDxcMvGAZ;=1v25oazu{VoDy~3H0Uzuehh>kD2q$dBy>$7j0%z z!W?f{WHxy2-vvb%ybsbh^sG=<)b%z;WM>u7_B)atv8STn$4@h>`o_gjG_p5G&Ojog z1KyMO!VkD>tSmd_-Ajxe52QN(E^F`p(6*bFaLKD&2aMSTfWi@-6VllljL6aufx=B= zqL{F#A)G{&)Udcj5KN*_99e%k>@D@7q|e5yIS9~xe5U?#0|7`&18El#)=>ipMQ{xC zQARA6E}*m4Y7P<#_-Sui!Qg!{@+R*2J7c^$*%L+G#Pu&*%M_8=fEfv(>%!B%8{^2} zs2KK=G~l*f@UYUniXr78-xc=bbpzWa8re%coB>m&8ZI*WwE^t;nin3iA^aP_VwkG)_#xkD;c-=qHCwz~& z-C7kTo!FrO;3Ysz$X)ri_}-c}M;&q9TGVxWnAjRIW#f*Q=|%q|_M5dgIcFT9t>Z50w%9Uz)&S6+?92(Ef2w~3dTEe1FW*?s1-dx*+tQk_8262;+#g)F z1{R0Ke}4{|Z$Iv24ZLr77~Zv)?%CBfpdxG1SmImr&u|&T!LgBf3XgR2b?nqx65{X{ zno)J<8blAmQPEQcTd~~V#|)t$LK1gSxCkizDs^4Td5K&og^0C`*WkF@q>An6NdzZl zJoewRK0&&~Vos)(Km0$!4|PkpW33j|SAOI24aJUqK__L%F#z`Q)!~lEhO}sPMaimC`&%I~7m-mk%yI!NX0$ zCiVIp$(u9*=*%mtl@@)t0ssI2009vJ_&@*x00{yC0SW>D0{|IRXlZjG TX>%ZNW*|msZf9k3ASg5`VY+$~ literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Automatic/Registration/0001Right_Thumb.iso b/apitest/resource/Profile/Automatic/Registration/0001Right_Thumb.iso new file mode 100644 index 0000000000000000000000000000000000000000..0931ac4fd431b37f9a36f08bf7d7b241518952e9 GIT binary patch literal 134092 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
^|s|8KPhax4;l=f(3b@6paGp-lwbtXn;O0i}1 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 KXJv9AC^0Fwos&TT literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Default/Auth/Face.iso b/apitest/resource/Profile/Default/Auth/Face.iso new file mode 100644 index 0000000000000000000000000000000000000000..fbf94babc5c1a9fa16a2d553ec4b8c98648d3221 GIT binary patch literal 18492 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 V<2%}E2}F<_<^)j1>}fZ*|JiN+zij{j literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Default/Auth/Finger_UKNOWN.iso b/apitest/resource/Profile/Default/Auth/Finger_UKNOWN.iso new file mode 100644 index 0000000000000000000000000000000000000000..4ee38f986be2ef12eb5bfd25ecd33294bd824b17 GIT binary patch literal 13071 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 QE$4zbPcDLB@6X!*0jo;}aR2}S literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Default/Auth/Finger_UKNOWN_wsq.iso b/apitest/resource/Profile/Default/Auth/Finger_UKNOWN_wsq.iso new file mode 100644 index 0000000000000000000000000000000000000000..cc5ed30a969ff768b260fdd72bfc0d8578f93864 GIT binary patch literal 9902 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 tPf1TtCZ~-pFB{x@KSJvA`wQT` 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 R)mzR5ah_ZR!QP*>{{s)W1)u-` literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Default/Auth/Left_Index_wsq.iso b/apitest/resource/Profile/Default/Auth/Left_Index_wsq.iso new file mode 100644 index 0000000000000000000000000000000000000000..a14b92ba30f8e61d7e41ddcf58382aa1fda9e8df GIT binary patch literal 9902 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

woXm-#}@ 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 Q<5|V8%69cvK$rXf042<5&;S4c literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Default/Auth/Left_Middle.iso b/apitest/resource/Profile/Default/Auth/Left_Middle.iso new file mode 100644 index 0000000000000000000000000000000000000000..3886e5a7907a3e7e0e2660bcd7cd0d3e460d012f GIT binary patch literal 13075 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 literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Default/Auth/Left_Ring.iso b/apitest/resource/Profile/Default/Auth/Left_Ring.iso new file mode 100644 index 0000000000000000000000000000000000000000..e0766785219715126a86cc04add145a45da5327b GIT binary patch literal 12074 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 GjsFKOj}6!W literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Default/Auth/Left_Ring_wsq.iso b/apitest/resource/Profile/Default/Auth/Left_Ring_wsq.iso new file mode 100644 index 0000000000000000000000000000000000000000..9c139f53ad33354b80aaf086cf0e9a91a302822f GIT binary patch literal 10864 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 MzgA7XT0({C_zB@J4pl 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 literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Default/Auth/Right_Index.iso b/apitest/resource/Profile/Default/Auth/Right_Index.iso new file mode 100644 index 0000000000000000000000000000000000000000..e45e8d15295a40b21582953cfd3f35cca10a1996 GIT binary patch literal 13062 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 F{{Y;AG9CZ` literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Default/Auth/Right_Index_wsq.iso b/apitest/resource/Profile/Default/Auth/Right_Index_wsq.iso new file mode 100644 index 0000000000000000000000000000000000000000..2f082284b5d7f7f00949b212cc36f273d143af4e GIT binary patch literal 10007 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 literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Default/Auth/Right_Iris.iso b/apitest/resource/Profile/Default/Auth/Right_Iris.iso new file mode 100644 index 0000000000000000000000000000000000000000..3f2d73ad1236299d886ceeb71f418213a5377932 GIT binary patch literal 7749 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 sQ literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Default/Auth/Right_Little.iso b/apitest/resource/Profile/Default/Auth/Right_Little.iso new file mode 100644 index 0000000000000000000000000000000000000000..aa801c97dd6ec72114bcb346803c2a0826fd096c GIT binary patch literal 11076 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 E0Kj)i`v3p{ literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Default/Auth/Right_Little_wsq.iso b/apitest/resource/Profile/Default/Auth/Right_Little_wsq.iso new file mode 100644 index 0000000000000000000000000000000000000000..c0fd3e8e12d1eac4733368d00218801d990ad651 GIT binary patch literal 9003 zcmZvBcTf{d(052Ep(R97LI_QiA_4(IZ&HKOMd=-dgl0sgNs(gc@F*w<0z#xn?;QjJ z(v)HV=}mg?y?ngy`|me9cQ<=`J3F_xxA)sQjR%haC@~ZO0N@b>P+Sp!hmB^Dg7z9S zE3oit7670S13&>#DgXt=-v1F8$W8&Hhy?&{tzUk<%mMi5J}`W2t*WQPB}1qGz{J}4 zf!bqDE-@+b|K&8*A7C^ebBW9RpHNL*|4JxLr?3BjO9F+W)7CRIH02VdQ`OVfdt|7u ztg6n1d8BN5#p~!lQa3bwpr^}aY-m7t)vQ$>JbtA7Se*+cEOn)dLS5OW(|P_9hZn{@ zzx)P}rKJJTijnX92GC9KvL;c`DQ|8kQP9WmJ^c-!pYbM&189XWjQ|vM$Kqsh3i_Q; z?j!&muji=vWhTWtAmART6$M&#{r~j+HlWk{pwS5+LJdTo1YIbAx|Tq@zM#q}(3m^u z*AvjbIH>6}XptQ>{|U$z4H|j^WUU6xh5*?_KqJgR1S4p04ak}g8lDFtXh1VRfNU(F znSCG|JE(&Jv;_hE4F$4JfcmmPC$^yRHXybnjuOyi z1dt;ah-e3L-2$Dc0Xe`x)_ox79nfY55ZMAm3<9~tK*#Pt_Dvu{1;`l$M05hVZUfmK z0J$20Yy=?p)%q?V#}4SQ706x(WE%x?y8sbWKrSU9n>&ze6V#&&It&D|zXtM{fi~xX z$S&Y5DWCuZ$l(pV{Q=134CGw|3j6|!@dHJAfihPA8&&_G?lJ=a16)$XQow+!os{T( z;60|xEP(x01cHE+AWA9_EtKKrN6=QF(EPaYesg?_kj`Sn;$-X&iv8b+SV~1pOpM1C7t-KrMdl=BY(PMq$uXqU< zx!9aIQ%cxMJF+f1{o%NA2?#wb+PMUX44zy9tPlMf{gqZP0ci)9fUv0I1`UivvSxm>U^g0A?Jhe+mtMoV*#72=FaZiWm+ z>GD>N)GKkyksOK|!kB+%1iz>K;6m?}G^XDsa|oVz^^c<6J$dNkih5Qmgx>Hj`EO+O z;vT)WVxAAzH@~Jw9f_WkhJgs4>1YWZ3CeAv6NOL=e=VE(wEL&B;Y^}iTPRNq7zKaZBdhl*l#3DGI&D8@LEb2*&hT&&8k>oq6HSHl+WxlIEMFh>is;o} z1m2Z%;Es49;ZW1n!y!;NBtCDl)xY2{!#og2wOW||bm*h8Uqjo&rA6VRkJcQ%d*?O3 z4Hp|LHg5>3>6NcSUno4cNYbArb>Y2vPtr%>H)V`aVu!mjIS zoR+!za?>A5h(P1vbJH3LuUy_4&c9R|X@soP`Ourj=TDu|nmoQe>tnbzp;P6UbV@EwkQP@njy^fsDmNUMs zO(?q=S7%`8A7j8PNV8mLaBfD3=9y!DRzi2W92Q+XAVH-J-H52|2 zhd3DIo3Toc;gmnWJHISnp>tzTUfn~=@VZB7X7_7*^`zb;JXRDhlk!qvB!ld_zn7bU zYZ%OJ-Ho?m8_z0TEVX-~dnd0#@Kv{iSzTAH@wcv2p@^Y)ZI#;|kA#r2;QUF+-1th{ zIi8Tcz+!uGVd!Lj`AGbuOo z$|3WfhFkeEW-Dd2$#sLd{@v}pTT{L56BRI;g^S3x0M37BjRF$f)>C_@jRA5~KVNa@ zO-k(kDyl1j_v!ki=kISn+;4OGZdCC~X!udk{MmV;Wqw9lm324!b>k`?&%c$cx!pn8 z;(uy0QJb=+g^0>tw%$LHE+nUk0_OT64)*~w&==Vc`iUeF6{`#7DCg`cn;94_Yn=Vs;l24}APP`9$+`6w;% zceZ@7nNbM8+jFCG55}j1Mr-e(kgA@f{Nwvcj`2`aU9H-|q^+t}Cvu$**(-dkLd27D zUsU~-#cr~Wn&?XX3RW+)kjEEmWXHJ880|JXa4n=GRW&~1uyF5u(#hQ6r-M)tSxS4Uh5*9Z{v*Y<}x1e}%L> z$Gtvgd{6XSqxaKjcim=IOK)wT*tW?x$5l3?DVV2Ke!=Y!NY2hSF7w+c z4|-CYEBgjxxhkm~Je{O-wr`Z}-rVu(Z@sm!@xa=HIl|Mh(hK}suEHgek%F{MU!{*WySrs_VodI11F66v zj-8P}+JJpjfNJU8huq@v%E>#;HSujWef;xXl}DV^Ts*MK z*3O@CZuhmDqU4`s*f1!r>BPcVf~6z2z}MR)lVQ(6rjb(a(>sy1%%Is10$ z!lFL175d@slZi>$m^aSrxdCx zu5cmsho|6~E+1EO*Q{S^-09#)ayofcf#|u<(TZ${fqEiiy0gKMS^2hoo!gV?SXcw1 z`^XEcmu!I8`W!i{EQ4j!ZnC&#=LJF3IdcV`puw}JZ~b2T`$WVa-`JAJjX_2Ze;*m8 zl$G@yuRLqm{`Rj}{~+Ptd5y9xN;QtY_Z^E?%;|yZdc3xU8@u^|Kqnv&cQjXsYW-Bnm%z!!|3Gau97Zrs82{ zvvn$=B^d=T7jth&N7-n%URR@F77VK7h80MLC{oIU^+0RCkk;1*AT6Q@U&U4iWyv%m zNe6s39nv#%Kwsp?sPsO!xN`lh@U?t}lTy6Jj)2jWjYh48Kxjun)<$x(PraDVBnN}q zXxG9K)(I{u@CB*J#_6EA2#vHiW=f_Gkyrf3{Ktv62*UFyMCrb3g;A1|oy1jaB|SIo z{I*S)=k;P*b=_CVkfr%JN}TZ$V18@(5`bRJXnQ`; zFKi|_hgi6#&7Q0ay;)RN`A#?ke&j2ca&s*RoK(-+7e-EJEMN2Bmcvb#FTOB~0P8W_ z7ewi@qQ`W~X`|?)(^Eaa0DBYos;MG9aK>*2N(A(UVeeQ_k@H+#L*Hma`K8w_f^%@ z3;6^^#U!OeaNh_#eGz}jY=o&mSHnX&{vCD7#AEZlhq{F8rp|jICniRz$`M$ZC zQ3LkUwamb#Wwkq3V;}v#Z6xn+f~88b0PW%xdOfFM{I9{=bS&>hu)j}2f%7RQ7h5(l z*4=vvkW!rWu8s07x3;c4i7RmW)Vm(w`LR3co14<}u|;^!YMI2#OTbh`digcWlys=f zcYJ|ko(33GOja8l{cFK6NGe~OQEvHgBwpd2i$vHtA%hT#+;U_-*gMg0Q)(zkyWr@S zQBc&r+q+xjXx!@J;P7jSu`0I-JsIctz7(HYfov13F&eXiG zua;uigI%37V>s0<-SD9Lo4k0C^aw|`tUY#edV6O%>F>k_!CW?6er03-rqZ$I>xMVw zg$609zdv-KMyQ$5RruN`gF}fRMipm4qbGAC>=x@cUKS*qNmk0*c6MR@!S~GI_4Eng z=`Pta6Bhp*G$q1uhYoDH9N?YLPCIzL)!tb8&uz;0A{YO*i#eW)p6 zOxSdqqLkq>_A)#xV z)?>ZpZ=60AUaZP@Q{wvn7L65-QU%_;-rK$2_YH37P*M1;|3+TPN`6_Ps&S4Wd>v0n zuV|@wM`JKJVL1j*M4B)Ns$1Q}=J94!3qG!vzTx5;drjJ3dDFwIm^7XUkquUt<3)E9 zJ>to6U`r=afnhmpLT+6ipNU_irCs039%3~!yjWCn@UCdsdz`%xGnT}zb%?Mp)BZc5 z#zG~8>wcFNVpe)bl=!a3UPm+($Uy)lyn1`cnZit9++##Pe^t*O=xJeISc7jVsyJxi zSP(TUD>xvJm6oojygt}piBog66$b35#3|?rm+YoIuvgpNt=z17KisTQ(AH)NU!AAY zgiH`e#dF>hE5&fi=G=Nx(;);h{I~f@ov5oAD+Br1T7)^R@ zw{gRhdAj-3%^LU#%bn+WZU2Rx>kA$owoFtMc!ood8bl|Z_|S`$e|k%X&zs(R1Yd38 z`MhBMxvRH{0m!jCSJstl_UyatF^et{GR$YD*)QkB!J(R<#ZjIQCoMj|Z{K*{TUWaZ@`TcAF7fC}o!$}I?B53^j zTV_lt?j2i91-n{M3(S^7_L?+*l#PlEe{{?H@#tF`sl1PZUqGNRmLa_VdzqZ?{hySj zKMru%!A#QCQ4SS3WCrwDupplDaf6#o-+#L{EfPcf_w()hClBv*<8evDJ#mqL1N|zR zDBn1tZ`dugPUUNa@oEv;DNw2qOBG53DPabg2t$a_ZAIfh%7$^zP%+D2ar1xkZFT=G zj;_ZFy{65VwK05wc*UxdWJi9A3rg~^y%`PDyeW#dA)1dqjY6sXy9W8qfL8-{6lz+~ z4Vk=uXu}Pk-l)!qRd0R}=NUd;uX)a(pvK)XfQ?zNoS*Kg_&QA5IP?xg3R!=uKO-bk zl|=Cff0Q)V08_rwY9ISc4`8-xczs{mR@nSiN&27ZmUiB-xvmLHI;lz_UaQ|SUPVCq zk6FzBEqt%GLDhrfi>DF9&vfo*i@aZAL4QKOhQqh7LxG_f+gj0_N;ElV<_|B8JtEY( zqBE4eeghTxAx+AdkR)g%!(F=4Ay@-W2<5@phN?RAyfdca2nGGdj&~;{t0O^u7|-o$ z?my#5t6CES_OpubZ%`QwgUmV_*0{nU=G*mxP2Af22%CAc>XMf7|C$$tfh7^NIutp! z9&AQTTr+{R3kL%>sto-antg?gh8P+LnW5-k%uRuSxt17pW(@R2Kar-(Cv`8>$0d2f z39Z&V($(Con{sp2wyOp|-TW4p7p~1ZR77d7rk+JhCr$X7j=;D2p7n8JCB$i(o1%Ee}#-VK9GKx|!J zTey7oM0OlKi;ys!^uVZv8dKuXT@x?Gtwq3%e9gl0^S8*=;Av=*g<&1-l-Gdz%5AH6 znAMwulF9VK=J`aBzR}KpgE7vTG3GDY+9v2TdIA?cI4?Vn_kQ8RFH;z^STW`H^wtPO zHl+^B8{O$>X)025&75|_zA37)e8v`;C3jyKKz<{LOlE4biJ)Q=UeK-!;UCT>GQP&w zg9od5w1Uv;EisTOdR1=a=u)$^<7Q zzm2^W0mt(oDUrNTWv~jG6dV{OCCNjFB4e)eea-%(!QKg>W`IlCd|^z|2B`4J2^d?= zy@Ny}MRcU@p;oZ#1AhkVoT1Kb$=09Qo{hHKIh%!pUg)Ecmh9BtW+I>pj|_R%0u1j- zl(4xYFj!sc6KieXTqM||Ldw3BjUUat<^pS3V}2UA?mp9mf7a$DRA$N>6qm0#uKCXl z7h+m~hthl=Vr@St>Z4PKtkIwqd==JE_F>ck~}5xSy)OgtG5R4N9Fm z$0qRMXdt{@=$?3HN3)qO&6^r!4)A^HYRmBgD^NsoMV6p$n-n9(`w%0XXaC!)qcqte zKO|AJgkfy6=-bWX&qRz;og`&-c}AIt@ALobexU7aj%qj7w>26UEBwHXo?97ijtu;? zWl!hMV8T2TqcbWHhJk2v8JK0EZCboN-m1#RnyfO44(O(6!nK*@3S>0dbRq zB?JTy*Z`SW%k*#%?Xp$#-KR51R4xod-x{OM#;or%NsmBC`7O|MK#B~ak?{W(hU!>7 zu#Ty!x3M9wv#HSW?RVH#hHKpMJPGyo8Wzq7xZ%$e&Cb_?HS8`+AAR zLWi~@?%%D_Fo5Q>tUypb3$@95j@q)m)Z&ji0?U8MM`F-2BT12kXh6Wq!GIsIg zG>?28c<8CZwZpCK<;`nmU!w6Fwq!fkr`AnF$r3Kd4R-tMOy_~uU?N>%9(88y3P}hS zg8uAr_YlcElvwx0N_K!pPX%1HRi?jTsT|q*jLbnRktbfTuaT_kAdOe!LqfT6;*yXf{I0hj$u#|`CfB03Il44 zd*(sKZ@XPwO@jU;^}8bfurG}k564Jod&3qU*&xK^Q>nO*dw8w%Ky%92k&be9xW?xz zr1##+f$19Wa!IfQ^}~j7xK}LbAIA1_&Or4B2XfKKW9 zxSjvP9lbG&?4Bj~AJII7_W~%4$Upw9#4jmRIq;_mx*WS(@8H~C_$W#LGD>^hpL1R^ z{?2dL2KNGP(P_x&;dWq231-o-7|mDiX>{dgun;LF<#z)riD*7d;+ZkfV(7Yv*RK5* zN`aAf4SOJsogghCaLsGnH<_75W7z)^i%%ZfA)_m<-{Z^_6X8+wkR$)Y^83hu-Js%7 zwXQilhUM21&nm)4xD7@6fHXO6+IvGlzv2uma6?(FL`RhbeqqpH0jh+FerKC#i`Ey&pS0vouIw!`|s^i72Y+UD^+CG)*3@R^$X25HLQ zPb(W#ydyB@GpVcr-&3Gze2FdN%ki{t+VC#fv|S!TD*j2l1l;5(8`_pZKjn!VI+>(# zpUDo_W7%Q_@Ay|m)@}v7*hFvhA9L_+qfS-Bw;DDFPGWodP7;~Upc)Z=T3c!1*^UG5 ziWu$^9ZrM~V+Aq949`%xq7&}ukj7D9oif1!NM z{}>N-{kgy3D)NYJ5; zr+$Z%oFB>1#5m z3^I7P3xI94O$_I+aeLkNHA+b^Nv-l8^k-8HRROb#Xh*;s#!gq%$PeE`LX0-*{o?`u z-O?F`oZ=+**bPe(m6PSDh4RB6&PzP^4TK~5Zz_e&;(4QR6;(r+mjh294)B)4?2}0x zn1(mOYHrb1Z{7a29mf~I2)~;`a7NToG}mXHTBzNq4~oAI;0`|gyKl(&BonPMj-s+T z)0h`ZHx?pNQ9})vJ+MQ{*tgCaa8{mmLGuVzgRkf~^ShXTCh8~+v-<-BgJ$GXD=Wuz zZ|R{5M%!2k;wCJKEeZSx3k1%GNWS^|pbOC5VbTp#Wu)lf)VD_Fw&jrgdpar)vh#EeB+SHGreN{U6?%pk% z<6#CKI!g^+qnOwV&8MV>KTWrClc4EY2po^F{LQyx*4|C}6)&0*DhZo1k247cXqBk3 zVrIVu=6mR`lvfB~nq~kl308fUm%SyQxDC6uEdY!;S3=P}RD#sbS`|O8|{$^Ai7-Q$X?> zR{qxH)`FicC!KvOJ=ZpcmhbIYCYY4xUMi#GA?HfOo<)nESjS&vC@r~N0{9mE4d%9FIR#sfk({)3ormK}z6V!`@JM$z zuB?oG_yp>=_f68DI6SkVMBmm8pXdB`6h*tuNzpu4E_$LDWXx>RB@*gUx zZXu_(a0HH!0Mj~XtD9){EdPn&OJeJBY}mO*^Y{+`F(gDfKD_fd)H8S)d)A(ry(&X< z7URIN%QvUAb*8aNAe}>K2sJbOUT+JOY}b61tZ5fpq_-(ed~f&C@SMn7PwoVmu3%3g zp~uB@zJll07pYF1_4}OF=bP8k{_H9^9>IBnYfd;8n9l>3`A?B)1LsA2f(iSIK}_e+ zH=KW7O7f4N^I8XNW?JLE19!|CTq;3QjQSz4Nm%6bw2PTPwmM8dP5sxLd8Ga0 zzd73jr7xR49OU{r7iK?^oGfX(AJuf+B_}C=sW|f^HF}49DN2rG4dc#`aD`C5Md_k# zC0xmpf7JoU_9ei6GGL9<{1Tv&#ss4o_3~BfxCG2x0x%?2)uTpMkyFlAc{wPP(aToI z*)|2OcPf_>CX6<3mdeCSy%84r&U}`6?DS(&p+-ZzVm;c zE<*3pn^a!tz-Rok&_haGELC7oY%8*hd(zLbaau|A5>V2#ppvi_AeZnJ&HyCs2+5DX zyGKPjNnE=qjcVX*-IijACxr*bt|~R`vn6x-ZZz^jxBWp=3VbvES!r0|#b0YS2b|`8 zmjJ_|)6H-DHPVgOFd?K%K;3S(cW}$I*^P4=0{z8eaPpBgIJA{|zzfB>n zbQU0UGWBjV;5(E$IC4obVK^Lv*^^7N)$8)J@4%M?#?h?(n8w>)xKet&iS4>_%vosP z8ns^Ij#B@XflI*m(B|(;{zOI&R%(_l#T(fgX-oL$Xp6J+0$$rGSa)|b)acreM-ljV9z03LQY>`kl3(QUB z;^NCxB3|w5fP>5Mogx<+v+jEz`_LwUr$uPiKQ5i+-1?;2nh9pyN^NP`dz=dC{kh|N fKL^SLzy3d0mFk-9EHvW?!@>1dFRW_wGX4Jnt}3}x literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Default/Auth/Right_Middle.iso b/apitest/resource/Profile/Default/Auth/Right_Middle.iso new file mode 100644 index 0000000000000000000000000000000000000000..e6771d02645113f65c15d1fe76c2f51447d122e0 GIT binary patch literal 10062 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 XUCyO_z4(1db;|+4oPyWJ&)WY0F;^1C literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Default/Auth/Right_Ring_wsq.iso b/apitest/resource/Profile/Default/Auth/Right_Ring_wsq.iso new file mode 100644 index 0000000000000000000000000000000000000000..5ac7ca4293da240a3a41d4ffd1ad911a25adad53 GIT binary patch literal 12632 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 O^LF1D4{EyW?EeRZ+gYUm literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Default/Auth/Right_Thumb.iso b/apitest/resource/Profile/Default/Auth/Right_Thumb.iso new file mode 100644 index 0000000000000000000000000000000000000000..722a5cd9dc44d5f0f90eaf9d3611945511ed13e8 GIT binary patch literal 18059 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%0Ac^ zX)ZfIUk|42hLfwmnVsGA4qmIyoeV(F>SRbc@ZDbiPv55?VZR{(({H( z?_@`dF6IaHsb-xEM9eaMU+mk3Tp>NSwWuoRO-fFnK8c{9YlOnL@-hY_(!LMNV7Gx% zDlP=(D{xSXL56|G2n=KKJF?ZU>$eos`8uzEkj*psbR!Ye48i*Dz`xQ?X7PgUUF%U7 zac_8A@M`LgS3_;@X@da&7G!n!!H{7?$UShQ#L~RI4;WZ4Hcrl z2HJak-!u9b+_cg3h6j3erviN@IQ$6hW=^#!(@hjT<$G|#aHrY+U>X@GZLxvqe5}yx z9lwYD!#E7i7c~)WojKhqLN_en{;Y*-*u@QP+}vbnY$=tPjPE$9VC}BQREz8IPn0oG ze9TyN$*YYL%2l@unOi}ZaEDZzNWuCS;1qK!3V?LAiG&iNv_t<6;kHz_YgUqbyrczQ ze{pXN>BVQaW{%|(LJUP|(ZeGwzqEep$#zu4d&ZjII89rQLKm__6Y- zy$R`iaX$>RJRR;*@lHscb_@r^^Jdnqfx}=NjwtT?NODm0gm-B-&H)jaGLjrjH~H*S zD(0dOizGfMS1~`uE>2LI=SINn`<8fS@Jrl1eOy*k}g5|#h{9mRL+(N_n7DU3N6ye1m}U&;0OQ}2dA4a>2=K{i_J zI)#HvL_pN&{O(zl8-tvnTkoH;GkOgVCqvEy*{w$Znw=|(<=@tX-zgf2?yw@7YAiFq z!mW2XVGAJ>tPEQ~bPgB6{=qK@kSScaIQJIn&JuLIMg>3s<4hw^(?aiIF%~LkgwAx? zWUfJY;LZI+vOOW|U{byFhNDszx`&vxGlxE1wI@@=KYk>RvB!obf0<)+ACRTMWoP1# zWze=4OOrA&f1QTocQ2( zwUCRAU*c7xC9q`D-iu$-SbB(sD~iRCi3KukF!h_&S$YiT$%E!4TOgRn!j6U?aq0ezR7Eh?})H(bEY-R2A9TxcZ=zb^8gm3 zU46iWr>4OVQ6!*U{*BHH4kA7fK{qFdwJ;dp4kfEqoJd2bo&>_Ck{DP-;xu{D8!XK; z!q@T)6{9Cw+92x!LXm-h_PuF`O;TiuQQ*L&l7x?}U@8JmB5}w1RsOSa#AB8w&CRf( zN|h82!0Us`RxOgChWX5Y;B*FQ7PX`eD?ot}Cp!1vAOmjSsQZ7P8XvC9p&4cZKCCr} zB}sKj{Ow`Cw>V{Kfd34%x=bkhJv2P{5MGs4RE-&vvFCl~w_gM>BJALA__IKBS)pseNR z`A^3L;CWsMYx&tpa>Z^+FkS#tLpU(MTUGR|;!@$D3l0qhYZSS-ev*K8(0wsGCG@U|6{LjA3h8Ae!Lr9LC?j$9)cDJ^^OS~HW5Bi zv&)(K8Rr(2_O_Q6?6RI9+Y?l@-EbO5cUOj$iP?{$PPp6DY|BBuZ>z`!NV^`Wp9y zNlQ8(HI(t5Wf1awQ|6bRV;RQRi(XH>b0Z339N3T=J|;`tLJ#BJ&D^h23EL zhX$3|lR%U^s-8kisX^;+v41TKc59sOoe~b5^QTb}a2kG0DGH6fY6vX}pLpnWeT&X! z{;*pJ7LF^9o1Y5L{alAsgv?zwX|D%9xr|?ZwecyQTRusc?V{>LP=1b2Ska`rfv!3> zJ&PbBj+46biG*G=KPHzj2P6^(^8nTIPLfUr2Q&$aM%dikCy0}qX?VoeJfo?ccKybJ>p9?T z8kE0M^oBA-mh5yG%fhY_zI?i0kzrD6W^MsPI;q3e3@1i`JBxL8k#v{sc8XS#I>XUuJ%r9~ARjV3>tj{LKDn_W>UM|iM zU9)#TSUCL*5UXYzZo*_2QL(Uq8mPJE`361@Vt{WNarvKwSye$=yr}I|^$snHl_tZR z@4jU-K$kxbY%xv};=o?pYlfS5fSbf7MyVKX-@lUU<959j_$GZWKieZ)a1$iiLzWKe zRIkipU1KuAnEEs=Igls>2l+nkkPE40c=0N@$mqVr-j;snC4@5ZcYLU3*a?sbx9`!Uhi@TR@LXOIEWZj(IqLo^>@BsJ6Mgu<-} P#5vJji&us#Co%uo>nX%L literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Default/Auth/Right_Thumb_wsq.iso b/apitest/resource/Profile/Default/Auth/Right_Thumb_wsq.iso new file mode 100644 index 0000000000000000000000000000000000000000..4f73143e4a35547c5b72d488fd3518881df1afb2 GIT binary patch literal 14270 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

_WC~zbj0I4T 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 z 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

NgWT%jP!|!Hbcxh$E zaL%!qva2E-2mH5b$5DMKK;o>2Wx%Uqe_ETy`%^a1I39--pV&SXix0`#ee%u|{XjonSoE9Q9;<1}+9{wH6S%Iy z*Rc4$u@-j9*2{_p6_Y_eA$t*_~b|4Mv1L&bOLVItvnoL~S{nNM#Z;95FJTa4Y~hTxh3Go@Yv2p7=P3$_yLlk3JIEx7xZFmbBL>LcIexo*7{=$cl_Qy<|eZV~6mzfibL z;ID3HUXD-xd*{&W%YQF;z{8`*PzbRUCfaf%pV2V9naN)qX^$NLTq_%{tbAPiAYu%{ zGa0tr@&vU28z$N(MT*jw_%*q0y%#lq=m6`7-Viby-(>tz8PMDqj>kSDJFq8V-wIKF zPk}aK=32{cgqFl_pz`w0>sEccxAnMyZDod_nN=Vs@|eISPna15C~kT#?*Hsc6oq4MSeMLzh^hF1lH#2unl@VUQvW6yJy#fL?Ta;{7 zRmHi()-95KMAX)*J(0S2v?@T3do{!i!^=V=-~|2WR6eK0lxPP>?35P}-nj=ssT|6mjfS2e; z?4d*isy6YrX zg|Myls&85hg_qQuDVKm^+gb1Jqr11IBSiSu8J5;SqttEpm1ZluDyDgD#g87}LP1q# z1^1cnwDJ1J=#8H}l}pyVRF{D7UcE5=#P_8AmdnCQE$xnz3boM8m8!N98Ato}B19bw zT~i3&MU`C`G4KCyek2&I{jYfv8;g@Wu$@G=MAt+4^5i)Ie7UY6=XsH|$&y0#zR=*yE_YV6fAW87G zmgz^Fzge<)6-#U% zDneH1Y4$<_H?@t+NxrRv6Y>1G;|X;9ki9JsvlwRiweU(?kV-w){s6Gy zt$24+=me%1U-tm-pyA%6JBF_cWj9#6)@z7%SqMh z9SDLncR63z@(c-gc_>kwBcGa}Cu&RP8U;G4IDez!A>nk&sXQ!y^$#JJEm^UKX2Chl%Mt!F0G-bEf^GZYv!eOuQ2gM4baI{Ui=f?`?fL_%kHAy{!f znCcsuPExX)+CV;qLB?N=BNAl(n-0l<-$bs;P`+BrjDv>xLR7bzYdzymnVn3J*XqX+ z^9UJk?x_0A;?f2X|2+k;a?JVslN90!N^`dARVk0vSGKtbl3N%^s)^en*z z|9kdS1c8MsXr?wMJa%{W=#AkXf!&-LJS6*GOuh@#wN47mwBs50OuixqNYlX?IZvhI zC>r%_6INO`*|%=**bm04^q&!Ife&dUWD2FtUL8NKwN9vbhi9?9Zn@-CTZPf?b+>{_ z>^e$bYF<7I`KCk&yG+nbn~ffhEPlAE<}BGvv@@|io8hSxTYtLlCw00Tx6WWWP~$9! z2_}Bhs6DnWjkVn8^SM#B%PO~g)SME<$pt4 zr3#$h$~@;wb}Exa2Fq?UB9YWj8hN|xL6pfd8{3yEHZ+Kh?FaR}`Q^}+lfBRQxwuY7 zkhbGG-d9l!Zn)*$k!O$^;V#_JHWdjU77IBbn}ytjsyjV|S1BL7w#d|H0$E0l#6`hY z{!nnU!m|<$FG3=H>MaVFeLupQ@g94#r@u5O=^ld^P6f;}%#4g3Is=Ug3O(S2#?Hg_ z*X~D|^cw5AP~4!R+kL>=(qN6C%z0eRBFq;VzW;11s@6VTUx;yF@4XfnJ?q!P>P_ zoZvI{TP&!Ywv~~nY~b_8ys^)SQ7*ir4u1tijoboM_k&eRr|b@O*z_CwLW`o?IR2kL zfcYn!(CeTNs_1Z@+S0Me?Pbg+C~!mJ+!W~~10)Jf*~IPo=y(ZjKRjZC?HgBV=ep2) znP+zGL*;aA@YVL=q1eou;hdPncpoZNOxpF}5zw@53wH`MuHz8^W1GY~3SAMNo=Yrk35eV*~xVxqTGREvI;uDW6MiPuq%EH3dC2a=D0u)7kP z5DZ2nF-(p;kSi-08ayzunBG9q*%qTo)H8Xs6hke95W#cmYqZBPKfEzfF)9dBfo47H zY1;2KaZDR5=V4b(j)0Sn6ShNX@v|C>Dx|h@I^2Tz%FOsw! zF`245rI34ClU7r$`OBdtr8mmsTk~OARe6R4X-JYE=vX&y@L!n_jVPp>&j8)2Lexh0 z*tM}9v?t5PURw8e#ak*z^q|F{@B<+CMPftQNyc&)mw|`l1NebQ z2P%mvhvg5fNV;?y5MQ+{tUx_6o#DGN7T*iC_oeWb)eh0HuDNf?Ld>hRt29fQL(NDI zyLg(&-!BryS-mRC@{ICH5n;beXFw1ntRqxYTI{K}LzS`{Y~7Mb1XtZ)pQxe|x*ld& zYX$+aVI3}VN1lTT%Rsa(chTu+GFR*xtjMR&^KwDd{apS^PCZu@)V zb%l4Ny*=QMz1j%NHEZJBUgfdCvdI=tsu#@YyPMZUfR?172O*jdrd^MtL~Gfv+J!(( z4;;AbwIfdXNP|AixQTteem08cfhwpnSxo7Bx|^pVH;RBsMEpN$EQrxrt5r?gd_SBjT>-r7Zb8daYPQ3lZK=A8V7Aq)$#j>aAub`BCy+tr~nk^x^G!asA88rrQ+mVvIkB5ZJ$=c{ktE* ziS0JSY>)CNhS!eRsSCGmJnpByC9qy`0Gn`-bx<*WLMu%%73*@&co(D8%YVCVfb2s| zBKbPT$kv@C;J zP`~_Xb#WKVF%;6@9cYvneyU+y7G`+Zj>DT5R5i@Ha&sfYU(x-7%_<@eeuBkZa^>Nr zvV$ziT9A8%)KXTbTrA4{U~VWDB9ASnrwcS`{(vLB1(gOyWshq}i_&aix3p`vQwMD& z_bX&i!6LXB-Da%-*AdNi>L4N8OdV<-$Xr-Xd+@y(@A}%_6pMv3ZF1Y%v3>b~+b-0j zj7Ty4cE}EzNn`BU-_|VfB_;AOZy~8pEeejKoR##hEI63zQcd_bYapb z@#_PWFNX}T^NJWh@4&%@MT>YpJ_oeCwKONCUD_yVr0CDK85Ucj#aIf>_dl1y(Aie- z5voCh9GuZxTph09mM=!zo;nx<5W>-?jkAJ+^$AM^AXdvLCg@-2LCee^3}wJ144Ge* zXCOY~mVa{5up_`U&ekcRQC80^6EGI278|LDT->vHJeXrk&{vt4M#liiHL9`4U>bbZ zE-@)&oriT~Ng}89ze?lx332KN1N@iD-9PM4BQTyf1v`? zBopK6n%o={@O{h3C8^gptpN?ZtLnt1Vx5~6M4NT(0k4=Mxj5J{e0lgdDIySH#wuZh zFUsET$bt1_$G=>b81SD3mjFN*{Zd2TGElX6HJb1#bO2}>UlHe?%-<}_Ksstkzmt8R zr`(P)lZHB3Q}iVU%j%*y{+K4Dw*48$gB+ap5azcJ_qf=&wi~YUSG6c5LWsxQ%p&Dm z9Ivp&)n;0p;WDk?Cd*oB6{;P6dYcLXFZ1hD7l~SPpz%e%r+2m+;R-H}>e9@?^czBr zFmovkrOV)q$Xt_`KVeM33EQw~f^OkLbzX0~Id9j%$A9oz7yHDrA;(SQxpos65SKh| zJugr@%IC5q4prz_Le^+E%DtwGx{o`D45Bk5y0{#B8t4PiE*Q^LLh$dWLF39+G9&Jz zUNL%%0cf83v)3O(xctnGjDx6!+3^1Xz{t7}l4F-oNlI$*0-8s$s_ASWTY%7B670gf zsKtzOS=*lRGzoYqMg;+lyWy_kOh?wA<}2!f`VN)7*>J7bahR*)eM2tTlhqgn^aPAB z6PznAfIPq))TyI&jH3nA+~N-XJT4Y23+##(J3Z&Y{kcE369nZHzvQ6BT zyU3+v1~zG4b|l6?1A$0c>Vo3_KCv+22{IjF%Kmax{Gg#@T{?XY(?^;_9uw-ul#cx3Giq?*+Q5Jfu%dZ`tw-T%6_w5vHs6Tfgx}uyqav7fulZYMX_HJ)SVKu~{Zz5wEGbAsgI;kUIrj5)J^^a>E~JyBoM2(lui zJX|Zh>KHwoEYx2@*eW_6&o;iXT9z&4o{+{B_1@AtR067h){Ikw804zDM~|_M^-^f0 zZ^yf`XVAA_0GAIZhe7Sg4Q74$-yb<$YN;`4rx1P9H+{EEpfJx*(Wt%07QnRG;>nz#JJov`PPC6Zpu8LL7t z0x1EMmZUACe8*Nwy^f8QSpjRErFJ(Y-34!~# ze!DWB8&YOTn?Md%ij`=)IhmBI2U|8$rQWjJ@^z+9Hv{!l8l%$OD^RJkld_@Q5-lt! zABk?!fimN^9wkZgO3~WbQB{DFb~t2~*nT{5xg*UkhNSv^4QrtvFh^V2B{PebgRxgm zC0+-*7g-dC48C}FSOdZ$4NykMk@=Ob2%2lv0Zy*;RuFkF1_dxo_hvbfZ8J_0G^>my zp(b}=<2 zZx&E|PtEA`{{nbw>%_aM!JHJFtg^YdS6kIqhD#vQ`cV_B5yvV zH_VP4zCT3dnc6qb4BQp6wgoeJ!!@NwjkP6&LK6|rz*5aV!E{RflIN7*eZEisTE0Wz zj^vGy8u^jN0f5l|e>+kEdm|-}-ta~9AqZBRmkT&8+4$?vdKJT!R1M~z(3!fNAk7jI z5hgD*$?o)5Z7cXlV*mfIfqg>R~9JzDO&ilfn9I8n)p*l`kn#I_9ia37*V^Q0Y z!R1O8lV)k-gEa2FvaFU1DNz@57dq7!=zFYw=;X^V$M5de|0RO|f6B{_F%Mxgun;2_b=zyEIJChpOC`TD&-O^4lrp6=jI7O9x0Rny5$i9M#@_nNfE&pw zRC}%(1=*Z#gM^;K4JPH_2<()X&Gx;BS6c}Pl=srX01m-)q%rq|<7cU<$Qp+?X8>Qi z{Ns(dx%N548-CwVH&($AWc^@GG<*pSj@#o85mFPBoX_foQK3tZ`I6>9rvsTjP|Z-5 z`DpOeU~6a6-(LK~MSIaL!(P^>(%y6R3;NZ#rN4{>;}>M7Su(sAgPMA3MV}xUq!sn- zl^of<@iP`<_15?XKdDuAPzKSmukEe45ynvN-<=BvPGM;z=Cv>~M?)Z4#uSsoEy6;O z-+!rmiMM)fTYXvsy)~r0ae}t^5Bq9GwwAefM^3zX72v70;LUAf-{!6qj@3Rp4Ewqi4m7yn;oGW8>1jXjemPVsFC=^xoVa6-Taj4%OF{XDM_MtHx z=z}(jT(s!4Bq-qXAz{J|OS|0}coL8ybzrata*d%^Xdv)z>tk_uyUco=z?>e_eXs_v zfmg}ff(4bV4n6j1llf)r>8d54Rcou9d+wI4;Xtq|-zVe5L_u^eVTUcXkEk~%Z4b{4 zOhcEw^9xu-Us6GZz^@lcaEtC{DhSpVht0%u4s(fejVg=3B6 zP`&?LSAy5*yb~y|OyJlDB{LA~CJ8j~Fj#CKFljC|M@1BS{UfIa*{478;hYT5g$Ao? z+(1`)uWI7K^Wk=r#*Ga6*M`t5ikLy{NwjQ2$IGcgmfJPdTP*X!`uJ^NUVG-<_T&>h zBu4*V^-{Ip zus3E>!t3s@@up`JE6^}7jC#AjVQUMv&TiO;&as1w)zVbv z4Sy)Ab!^$}CVI@0(HAosqFaiR@M-NSc&@aDqxkc8D+c*e>^O?ZW*1Xl<=L9-2(D^_ zH1Qw$1M_2oN}(qcRgYE-GeipLvizdp1ZmR*eEUg-hh1fVRmKZBA9rgC2c^<s!bnzY!{X1yIqSCm+F2(G0=F_imjarB^pPmZ6 zXtve^s-L@1^Noy-d&N8)!vchcm-rsfIPM#Cv=KvFKBY4}5}6{?4-xhcqu{3`ip{XS zz;w2@U@l^!E^02xm z<#R0N8Gt~*rWXdc>{uG7k~UVX{k%=hu1qVFJ(0eqPO?X8g;5;~iNsQ^9)I5JURY|* zr~7m|#;)N`NOMo=l~)ay6@6nhovgujw7~`WU^2Ui3y?R@$W0Jsv~I;`uLUX#wNR)O zJ>#=Q7fT=D_rBr-b+^J53*059BiAWZA0CaCD^zqMfwXFry-QYdp3|n0wOrbFaS~Xu zHwMbBI_sIF-O-dm7&R*!u2I~Coyk1l>7UU~8i%jmz|6Q>IH?dvufvp`H7VEoIXE|) zU$u{9iK9uvV|oQxfoCf=@TWk2;wcoy8fUd$d;7?m*1xap6R$Jt^bJ{? ztd=2Lba|{69ac^fafuOh>jnbS-aRC`?!GW#4Qbb|P96x`N7`T9Jk6-+jJ9CmJL17d zjWK2qmBT{Lc43f|9b!M_S8rK|?C)P4%p=!9)YRY24}glZe0J{(7C6rT1PaI;!pQgj z$7)V*n&c=^6l02dl^DHnI_c0h5U3Y5WggCUfarR z6!Y2a-U;%;2m4IDrbLWAu5d|XQ&|=$l2NZ_YuqhNJ(f9&&B!2&86DQOB}hfYpZb3R z(GB$KdQiOBJyF6W^@`KbVN^hcnVvMMrCBjA&dz6DWyt8H%P`h@o&&EXP0F`*^HS~d zyU;Rd-FY}D1b?G}CK{5c4o^U9g)R&uP`3c})y`QwWWgW~9@h|02k|F(4iF7n^U#Ss zF!R6n-&@b@VQG1X9)_)-+kuO+8k+$u#4TPpK_ff_%94GFHd&=yc%9flmJG22DJwS0 z=qJym`ZA46%x--k#{~~` zmXc}E5%sGj%3lS|d1;-dhWlqw@Qk9V&X;NwaMw!YlLpTxN>EtSN`}rOYCgBf3T~&} zYvVt&NP8(P^7AU2w{-r3!Qj{uv3rRA4V!ijPJRz+qghOylI9MKvo*ymReDXx_v{y3{=zv%EWWo#G)a)bhXA^A@=1C99~2|)hf9lBL5s{c#QU!XXCCfQ$*uZY2~}Op@WspDG%Fv z1*m5aX$R^8n4@LAgH*03g}Jp(WP_Tm?A)Cu#ZAqGnyv(Nx2`9aY9LRBXo7y>&tN|u zqR=MV@(ADq#y7pF_@!iqzNcY$&F!j+JjN{mW@?W49biI!Jp$(!vK)MwsAuc-YX@7i zDIb#AVIHDxMGYQNv)2w(cpMqH&Lz(Fy;QOp=XrB6W*{zP;jTECyxNrb&z0j>H9>nh za=7j5=_u(9KA!X|UxtcLG!V(b-Oywh{k&ZT@dbkZ&p!`D7L|Gcn6i~4LzkG!XXczm zrThf)2$o`qQXP*;0fQ%BcwbwdF_^fWw*MHH3Js{B>+kr;!`R1HefVLvG^Yfooo-x> zNYk>XDfWIi(eT@CX7AV;hAW;ua!a7XvmAZQ*zOl*QahoDDhC+ljY`8T7;!q72xc5XQh^+c@0(&%%vX-#MHo1Xa zdoYk`Q219(@NK8Ao(K!-pkwKsZOxwWbl(yR@l2b=_G%9bJd}c)6TH?(j#D0%>VZsF!!!63oO6 zX>P0V2e@zu-k!2tvfd0WXR|8f<3>Gv^VS30)^2gaz!~7L6g-I2sj?G%fBUH;2uzc|;QS|I5# zKpI7(iS}RNY7*bOe|*bej}f}lSlw~fAdp zaO-Uf@8^bD{Vo^CyX!>%5ABoa*e4imZb!C`b55y6Jd1AmdXqh~VUDV^RaL)f!z66h zm&%d_%Qrt(7ezL|KMVf)lrzTFiD08Ag#{970fo5RMPp=DR9YS7)ARtK>MH+i+xfmy zF0vbF3Vpdnj#$yW3#JLCFxU${gAyz-5ZH4sT& zXXTv{oNfns zEz9vI9|Xu5{#ZAVX7$k067t104a206}r zJ}I^zfsXAonTPx3-Cub#8lX8i8sP#qFeo(5Qir*n$Q~yGN*X4*FwUX1LdR7KHw#~B zx^UtKoJo4aG`Q@HBV=LE#6;;NHoP0SCa2NR_vB+2xO4@VPq-gLc>MV6YkzArBWb5} zsC0Zwkyv25w(5;fgHyyymD*EeR>BBpqzyE_ksQ#+#~lxlShBi0_{f&dfJ3O=MR%K- zzNRgBE0-xbdEG0N!5F2jz4{7lGhf(fKFq^)L=&sROiZ6aP4K$CB^YL00LmlBVm!uG z%{~krd1vanROmJ}HH1L;zw8p1C{F(uQ!8x`Yn2Q5`RKKzt9t6tjfJEWIIp1OsQZ+5 zoDpUAagBm0kGR?0seZ0}WC4c$@A;TC&8nT=!?>JiV1B;Zt3F^x6}_s;1E!RM?eZNT z6;v8sHlCp^M}`aMvA|c&m>;=F&zw5SXJwDrPx~*gWw;j04kwPJ6eGOdgiT2xZisR! zWDoZ7DUCGVt!?4-hK<;Yum?RgGHC-%ojMzY9y)6&NxbYY=&m@(r#Su0bhzkwVOv8y zc}u4?S2xs#1^GDhQpNHm6u~~Ek&M8rE%h@i)mp3NGiOymwpY1JC7LVH+~C7dpZin2|4$*VV_^? zM&P3})S~)CRSK@E)Usw{A_?9g<(y}cUp#cdfKhIGur|;OoMH;XM;kSNtnUrB_yvW@ zXfFmWqPN1gdc3SbIZE(61f%i!_`D~x4NHYo zQaETG;eU9eI}e)ULN1=X3MmP`cBA9jZ7#ozp%Rti1%o=?55ShTDhIHE%EL?(mQ^(T ze8j^QkgmUstt#J(xXbDQuk>)GfTDJ~^MQ@}_%B?E+nR~()Cqf`XgYg?)Q*s8oTwK} z?p@%ta=3vLTlG|GhBknz^8Ej&H;&x0J zD8~d>wb1NeS?(F>&I#54&l%r3aZ^$gk>x~VLcKk1ZUvXhqVCtl3=UwNn3mD~4O8`| zvRDwaoV2yMtx&O|0QKrkKu+%6G{nZLePmNy8&HG3wB^WdT5FPfwaGWW`uEN*-|CA8 zfOv0(9PjxfFiAdA8BxeUI99o5RDWMO9Iks-6|}b3|2`QE(d!!Mu0Qh(#ZmEu(U2vM z-_@Q2G^qOd?hF+_>;g)ue!y*40cG%llh}kB%iYwBHz8eKCYyhU6fGv_WVMnd$YcRT zApZ<3z%o+0n@Xb{q2pA7YuePLh3fsLSesg205*2HyOYMLGQZU=5RniJ!)$bUKqOLk z0;y*|@t2gx;>HNKZ+gr7>1dzL=dlap{wWpy8j{Jipg%wUI5HCfvRwV&=qnD#CN$4n zWal+5zRDi_93xr?9idTx`L`4%`h^s@B_6c@KUAzBGeWuNdT=|SF0jzCOO>uA7c9E+ z7Ri^@pm8}%@CysR@g*5%z)Tl_py=c`3&&tkYgU*zwGHd_SU(K^H}OWi9NM@2-^MW> zQ9ly;PJBN=A7Oewl*5h5R*2Je28k=uV#ha#aH6I+mU44Bt|bbi{_5%Ocf|qTb6WO$ z#Ojv%LnsSM(%^xiOd)bKt^sXj+B-q}e=!S1qI@0O@9uO8V)Af_o?hk9Ma#=ZPfy6N z+I_oT3lSg1q9mZGsrd~98Jx$&XV2* zkCtO++Ufc!9XWhx43G3{O*|(i-o`*)}th$tnfJC|C3NL@R z0Faa8nEslUFT4n$$Z+^q`v64kt76Zz2iBnrkte6cm_`O9IvI+&WrZd)=_1>}g@%0= zl<6eW=Uu+0-&7}~(X)IxY1yr|zqWiDbP{!3O~6xnloO?jlmujaie8m z9y-;>faR0C8{92me@&i(LeE#L8CDWertj2zgFdVrY6QmF*fRLll$pV|ZHIVKQV2j4 znzA|X!)el+A?iK;3mTMoh$5I4;q4>V%w-BXPgF9VxWgISUg36SvGQCCp9#$wkm!c>zG5}U*_Bbv6DLSPWD&Hh2LyfnsR^K?gpjz>lIc}V1eeLF2WPlDuiR6LYl&- zHSSxd?)Hx1V#(P;fMq=uCTA}Fm+kTg_6}9|!Mkgvn|~|i{A1&qGd>lbMhsse>Ag^G zsS*SY0FV6<%B|k31I+KJtBmxNK7hRj0PPk#Pt~6I3`Bj20n4qj)XAIQx3pnicz9DD z-x7hLKPN;V7PhnH>LVAZ^Fw@(j4I`f1j_}satXKE&xA=EJe?Y(010-CZH#=ns~Z_a zfB$ZC>c-P~?P^Vs*5pTwJCuBccHKSHpj~_2rf)V9dYs9p$Kf=6` z9r&?&ijEF3;3}i%>8N$O&(rBTWWf1PO+I-`f{Jm_xxVuQofS|%col{d zNhYLfMG;{skgTm3*iKy=A^JN=7d)&a;YWKTX262j?muR2iK`%4;uWTzounh0FJX4C z_c2tOQ+B4AZWwD!T+DdYt%oMBD#=-`>Zj=5rV^%YJ1riK7n-q~>yy3ow_#i$q0aKb zK(fq%QVLYgqRnTa5O}XSP2h>8v>mP86FN4-07pQ$zxr=1 z^v2-ogD=-Y%H(#FEi&chF{z6(Op>S>qoo0;Rl*&+LZS6HVE6`U*cg7`&H+CaE6AwfPD?u#1Qau5H?^U3{Qji78qY5 z>G2H`Pxm)?x#mKj%$)8udpED(P+CReQtxyM<|^_2cE8RDGryE)%X(mzfZ0p;=JAzn zPcXL0*FfuJjpl}_^n42Q7CxLyKktWcUWX<1GR=1s(`gFNIeX27ekQoMut9DER>2(Ba;y`3!sohbLxV+C<$* zl3X}D#uu7d?CS(wJ!;Qg4p)D-u-_0uB$ZxbTk6+F&@2R&>m8X-=5jj|1Mh}o&P{PA zopLFmM%@w?xW@L-)%A0??-g`D@*+8vZ?$7L_$IVuvI6}3+bhN&iq1|MX?p&hqo)8& zy!Ty4N?qwi^QWg4k;{08;6gi#oRm9trg6QuPxw!CMZbjGs6wpsF4+OS>T{+uLae%# zV6aD3gJdCWTA)tj3Bb8Q!mufwM&2u@Zu;{e<|)D#jMb23O^X0_CTs@2v)J*26y+;@ zjYtL_lu3E_H9a-K^6N00({PvgiPMjOM=tVJ6r^@-FZ8(&WSrSW zVZ*6UGNwIDi*>7+NU@)+_zk2A(zP}(&C)5q`--k%o9G4Yi_!6bkRMxfl%K zH$6Zb8vC<~*;-otSD;s%zI8VJb!QRzDbe3wWRr=CnPy==ITtR%>Dk#!KfF_=-K`m!n;@f$6A6rfT~dAU7JZuX?nz&tSoPp4WI$gM3S6CM<(!ri zsqNhU0SV&Mm#9$dUu@LhsiLFIPC|PlY`Z3%mJVg;YHi(qV&ss4=~?_%ip_`UKroV) zl=ByD-BacT(DrJYkw>Br=~~qS(1#_KC7oAJhs-wD1LK45))ifJha)H&4e{?D#n3FL zw@!5w{N&y*Qh7ps!M2VpOydIt;_uzYrbLRiB`1b9Wo?4Z6`pcU_g|y9W1X$wlyLehuqzJHw;?C{h zQDmbFs`t_^u!lS}lv4f><;m1QMFzUV~tousnD^r!==!gv}{;-Gm?6NNlSyNN7crCH#E;WXKE% za}2Bk5or374!;9ZZ^fcXES<4<8B9;$n;Fqv7tCe*%9LmV22kQIB$67sL~}%(dOx_P-9*P>eJzG z7Kxr7*Ag<{m*fxuAD9~+lECiJJ|?atZD2^1hwC|`9WRP#37t@fdIeLoZ?$X#&6<2I z3Nw^CZT$0RIo@wBG`T22i>Px0BdnoI&N%R%t@34y{i8+_JGD$Q(pSIK0`UawvgGdn zX^WZU_v`g5e1x`8F~y|*#-%~#c9mdrFm~M)uGgmu6ocjqf3NzPRnuZyq4z`Q<7~o* zrZmm$O0Mi=*VIG^h=YnK$f)}Gd!N9iAmL;x!%3+AAh0@nnkR7Ucv-Kw=+BM&lW=Oq z=$<;mbs}BolU%irIjxtColE%aH(Od-_W_TO_f5Tq=7x7?2Pd&usF0Vb!%Of8+7@5* zGReeo4X0+bedaUS1weSDg86;$xd{ZwLM z{Sv>(&P#6^)pWHKd;g)RCq0Ws4|0H_gt zgLGVL1{s@Z0vW#pq?ytGhY1=DIR&idBtAlrB zcCLUW&5b&G0G+yK2O+{w-OPvzoKfgL;66V%M>(oOuEn4y_|f#0)cnk#-n=Q|Y^BZ5 zc8(O_VJ-!HWm;OEJWmQQn8 zjG9Z9NhzO76S>YQ`AgKb70Yq#-35e^o3phfK$wFjMT_QF>1x1@XGt3;fm{xwk$e%h zY21s#wR6MqAjJXBUZT%Lno`?8i6g&%VQmd|+UIJ4^%Ji0+V-7pS0r&6K5I}&H(Y0r zAd}#)Q~sm`?IkD;1bW6ZhZ9)T0HHpAf#R@o_BZVa1Xj|OsW z{I}(D1;utBB#TS40XsIzrkD7S)p!LlH$VhoM-c&3Esp&aeh;Fu@|Mq$&(VFj=)U*it7*uz1RDw=qN}?gg!t z9r3?kbayTPYJPRPmt(go-D5bbUC)wc*^HhRWSHP;q$Uxa`zrhOSyd|idy~QXI5KrE zedn;|w`KY&8aLR2q$uhM?G9vP_6xeUi%_Fn)>Z(wcZawYnbOqUdq!Yyacuz(oeQOX*{qx7?vfgeY~ShWO@`1m%;AXWZp=1^Kme>2p$iK^2i&k-@1+>q{x~0 z%m=j~_#XXP5Qtdqj&>elYR`ToDwDzY?y_xX$)lKRa&KXDoU&PPM~a8Q4&J8bn!}4n z9~FrKX$Tw|AHUyG)DYZ8jDHvVP3SP;5 z+8-gBw_W#VhtG|tb7Owb#oV#y0zG6LhgiAnf5Ktif>98OcYTCyr%+@<>Ig;8$Z622^ zsdySBcrnj;>X?ubvtQx#rLf;{^gt;Tc8|jBv9PoUlLJ7!EvvEA-eFs_4{tRT`V1Iw#Az z6(*L{UYbIVV0ravdvqx0ZPE%^jhRNllh7hIc@w^mn8STMy_lBnOr7j1Q1~T17M6mh z&uCjonU)2N0#5EktIz44ctMOx^|-!AJ_q_o#iP%{vChkZ(i}w|+aO#LmVAX0O?uF1 zc>V{Lnv${-;%DT}K6P!ccxIhEb_*rwO}(pz2Z$3Xmrg;T#5*Q=bJW~3P0myQPuAr! zCYcnBxOa<5S(L_ebwyHS9Z&U*kRucfuZZ;0*DVIEGHs8v9DZAn@;E)Oz^d@1UDp$s zk2_Rx44R=M)C^kh=EzM6?>$=)QLfb=_wfp$a}^+yP?ZIKg`@Rdqwb@(#iBCp|2%iF zI5?C*EKgp8M?d_|z~z7W`kn=0AcPHhmYxffi>S(t$m9j=j}?L+++jBO|0p{+ z>rP+i8(6UaXW+-c)MPr?8ff2p+G4)rB^8)gy;3};s}$8C+d>jC8rD&sS=aE*&m9tO zJ>XqkOY~=~W!K7Dqkl%m|6!%$t(pA%IYl3pek=8v6Pi|+KWvmfyKe2bFvNs)>c;XB zLTKYGjDHOqu2wUI(8}xW`M-sr(m{i@*ME}FUSL?3q?NL!v6z{>^LHfXV{HmqaX4Wu z5PL`kpYqus_rg28i0vnS}*D0G(%>un+77|F~HRWMqF%zD?IU7%VU z!3Zyk3}*)T-FozvaABhEK2Bn5_(4GfL^<4-()WmZ2Re@W5Y=0DsHOs|&|f+!z+`ab zx9!u@PQXUmM^R9t=sIGSYr_3*41#P6rFs?anr8g;F~?zGApEl&kpCJhbF7@0Uz4VQ z5K=-Zi!(-7jH1j7%)F+{U<{cHX)WG_K@r?K_N*TG{y zpq!Na72c1B8~HJtP)L|gj*1W#Q8h*qkyh$|&}@DH?Hoa4faNE&zJ`+HCIETAp(x+j zG+kWlvZIZ$HmdM6rgTO7rxx(=bv}0UpFBDx?3Ax}anAbqjz2JZV|f6_M1Z+p8#fk_ zDG#`$GJBqn4JaQ|_dM|i~&Zg;qECriW!Wz7z*ozk0;B6ZMeL$?K% zN`P=z!4tGJV*d##6s{}Qc(|!xz}XNzMMUNDIlz$H<2&_Y>r5P~u67hnZ$f3%HwU8C zk<5I{i}2l9rSP0OkcP{9IihdJdR?RTSgTl}g@>s{TI0dVD+*vcZ&MJR@vcB)qk=*c z?yGQ?i?Ut9-6*&9S5GC)#2U0H>)o3B=S7FCDqduTaIJX%Koqumz>|uu{$=}Y2qfx{ z705))1rb|rNAg9VO44J@MUGh1LQU-i%*`pNfnAzxk&OZE#i1w*si=~Wip(s}56~px z*_ALEEi?9y3QF6HjfhvFkWCgOAJD3u0%nmFL4$xZ<^V!BoM5tTFpD6ox(NtmP&jmb_t73HwU&7tYQs(-D54qU-a3;W7*5Gq ze(7$rGT%&5A>J_F{;Y92PUx>>n)Worx)NA{9hDf?T!U^e7s|s@r$^a$>s|>Z3KZs3 zF@OPN5e>83Gv9XaOz|x_(VUd7C{3eZRTjfnJ05PWd9I- zq0=yy<&fZNiQeu8J0NJv_D20_Ti61Kve8T1sixnVD&r>$!okG$SX9%f4k-& zk|uvkq#QuS$)Cu*HDdYd^=6<@zM=fN`nNDBB2Sy1mM-kai0(dUHE)W?H9l`TY!7?# zQkvIZNH%A8;-)&22$aI|x5g69-VmAqHZks35fyUe4ilD6Sf!G&&fj>bJy0#u;|kBu z#6ws@Lx(^fSpGYau-OKlK#5GgCT-4oHABtm;p7<3$nU(U7i?g4uQwA0nOve8M*&}iDiY#OEr)JUxo9WmoiZY>RbBjsB5$W0*{ORWI zfR8^Yv)9zME25euA$riMy-KLN3+6|)O{^1&0BGuxtPTB3hNR(nVE(n(AR$#;Bz=)RlSPtlAd@`nM z=$C&o+xNdU|5`%MLe#^J*rX3+bAo5C&P7L^I75f?@X$sV2S z!5Eug$)Ojp5G_{0f%a2L*D9-ILLinGRszAOGeBGR%ShZl^}D+P_*WYrj9LqSk3R__@tSa*KIE2PUmXIpbRT>mTY&!wc1w9>0;ueE=z*}LtA0D+`nZtDlod>aGk3VG9r3*hSOD~CM~g8w>L z?fGdWflrrN>u;8MGQ{{lnKeb4vjLc=&kT~^pIbnNWH;-69EPB#k7ZBm3gA{Jq88-% zgkqiZWr;4L6*|qkD}-fa)Wx!kRhJPY0dptL%1kNteuaO@rWikNlXcEdxJz&zSrB24 z;>KTWH0#I+w}0|y;a%0VS>4W6<>IJ1_E_PCp>+sHhn#D--&AeA-$9wnM48k15!@7s zpL441z{zyc*`AKTr@l;2qR3Q+$(VX+9uv1_c%uy=~7Pia*} z22f8xOF z@gLsObDol(`H%Ey4^Upq1C|)Wk_1rXc_q(Y?6U)xZW5)+Pz`GQ3fEGb@3xjySrXgBiBdUK>4* z&ulrmcpKSHk$dlyPzqwsb;n&qmlYIAf}{U4ddl+LZDOm4$_mu3auIV8kGx0%{Tx2r zTSxauR@elDI(p;f0~$GUedjfZ?-b;E;^S^jcE?$Y_eJu{b^}z%(^3MPm*f%Yp?%gf zcF;GDw0_1*U23Vi%0{J7*mY0DuT4P05u;Hub*i)Mo2w~WP&%cMbYSsH`jcT%MPo{O z57mybuquv829qck%G$;iJ4tj$sgo0|wUimyc!2nom?>(u7NRVg4VrG?-gFKT0YrL0CzJe}ntCM!QPEt%E3-xP-Zc|4vsfjIpH z`p+vRQG!lw?h=Uzp1It_<$+{t_CbGtwnr#{$$sw91VY2*`TH*wd3k4oCQtTF5EmwMhO@S=sZu9Pn#ncKq8lcTGGVSr$`zQ`K+`8!LW

>U+JKDM$TGsAgkJlz1_gxU6oU5N+rl_@BklpF?*L~kkj8n#H4tSw9KQ0-SH zb`iW~wkOW{Wq{;=tvb{3w~N@iK9fwQKQ<^W{L@{Ah$oQR=WE*uXZMbgg^7cZUb&vk8$$WpfZ(_{M~N$)KjO$H?e%k zKe#JY&v*vzGX$`(V6y!tui?QW=*VQ~*NQG3?DA>ZriPT6t;oSaU#nwM&K`nD6EM!=7R?s(UgBI$>pzC5_oIOJyiv(yMb>fI8 z*Y0t}FZw9`r$=Azv&Pz5(LYd9Cdv;XjutB60&4{cn+%%&XI?>7d($;dj=FPcOa+Pq zJw%~zTDkBcRDz(Mn$-3ZcmOKjbheh7@kc^{~D#t zk8rS_Vn!MEjKzve{|wqOf&7P;%EQ0gGhicSDGGQ589JK^LD zUzFibq1!RAI?TY!KWZk4b$Gmw5d_c@;&_c6P>N;5w=*wt(o)j*q%9)mEcmI}*SK%X zP?hhWa&`WQuFs{b)84r$E|w*eG(Rur}V)9ec6uecD8 zS5#!b9fkqk#hmO)s)Zt?fd2-)rd9~R`6Q4Wom30#kV25VkWyjCT4tW+j!(M4NhK|7 z%{mjpFOv5eOMKcxP9qL@7ayXM=V=X9;gzg_oW0j)pvz$_35e`itAjR3xz=kIyz3+Iya98(FdyDAcOl@kc?2 znD>KzaL_lo!xfak`0UE%XdR4fV-OZ}{L-E-V0oEdh!fMG#yJ@KPdFvy(rHc^9_YnD zPRv~&e@FKQA58a;Lp9`JCE=$L(>dRRG{Bq39{$U68wv(n$l;-d_vQ;l+EQG+-za|E za+m1VS+|F>p>&hXYGc}ifPIJsr*l8i~B%b3TO9ycKM+ITrdu$PzX zKMc+9+3ze#Ovn8GT*qc%O7a~B4#jigduvoU5_h?aH9QW6Auc+{R&5DiE0 z*%-wT_4p`KEn*izkW_4}cIhse1fY)b{He;azGDTG_Bt?k0$(r;$`CbWjx=K&4BB`} zZeu+X;o89wL%LtGgKFw+;+c&ubwsCP0oRG!o`_Vt;t5vxUV$xP&2?5@3hx`EaN(!P z8oHlrVP&smD$5f%h_3i|_OBGxpmYrg3}ZvzNfYmspnJucmeo^7iIZ4gT8Cdlr1wmjmf4uKOyBDk-GzAr%Z3KIg@xr_ za#fA_h5blsxiR;z?S4MP4DX(8MjYE@wK2WGV{nUE9D}YQoC7i0VCbb0Qnv@|)TO%a zjPOBb5DG#v_b>3{cVKnj8Z0m?Y#r znur6vg89}rA4NqKN(72-w}Y9{x^;!Ofb?$90 zvyNzp0mtq(YNr3>lSSAlg{C$!ZR!+ONsz z5?k9pvb2Dn#qV0Iq&Oh--&$VAQ{mG80(e}B~?Xc?90&!N~i^?k=A3x6F3&a7ge#Y zkWGH#%-X-DJ^ptlRT^Lq82No8pQ%mrKquUIZj?UYV4jReLo;6RU^u})MhmL4QP0_u zmp3zn8L23;&oGShC?by01wsX42GlpAHD;_#L^TPt)HK1^9Y_VTz(llsD^e174j-dB z>(JDtu;3JJeP1hc!ND#wH`db9w8qyn`H~NLXLqptMibAKGyN%5E$aeX-sIT?n#Hx# z$iYM~#iCFM_#>o|gu|gIm6!XG!G4xG@YCZI((IB_|u|(;k$NL#ov0TKI2BBDMbO z)XHW*T{cx0v(E^WqQMd;^6pHHbW3U=nEbx$L5s1;;gc=yNT!W^*v2x+8wo#MPJb^8 z%{xZYKdA&GmA?jroFItrrJtb7-F68S)V;Wf_FEQ-JoLodkiG|h<oXj7wQj}t9w|TIDYdTs1!hs5r%!pa;=M~NuirE_G{OenoEgMzX>x2YK6#? zFboTq=EPsDNif-?C5T&rO}$zfi1D+yp&CBemK`t0R~x#q_~w}xPiUnJbVzSxJ|O6f@-eQrydgc3YeMdvrLJwta=WbL(<7y<5EUV)zfroHz?5cznUiDyIGaQ^ zk?EN@#mzXP(=UJiu z*-#(!;nTz#j8>{+*1vKVEOGe~%B%Uk5?8W-Ux!XSK|aU3)NYrAnh?h_%Lr>CiXB*s;R5}X(A)~2^bRn%R zRPVgq{?^#5=984sQB89=8gK)SaSBEjM*uh~Kx${3%sSc13Fc6NCHI0c_x6VDay~=5 z2?cLOR@Y;AU@L%GsYNkZGd6K?FgLFcv2jN~?uv?n8^)RN;@6_nVxywyu2Fj+=;90$ zCr;)I*@T~yTGo$d4{K=k{|1nB9mNvXM!jfkwYeXK=omdz5Q+^t+bc!1&cIn!(q1Q# z&uFVI+t*`sc_Zjs4bD;$=>RS_-!9vPY<{ngg_L>=xF==mnsFS1W8W9S0(sZ@6HlrIuFsub4Av8e zS@!N6^8!{DYwcg&^?*>Ob|pf6GyPmX1EE<)I75D#tF~B+U`GtvDFb>5So24b3pv` zh_HwJ-pb@gIn1R=P{$Tv-E7#|;2AOr1#{=$s%nZ?Fv<{G4wIWB?tUDtKM`c@l?Lby zoFHP)^kshmOz4VcdY^kJ^J79XZ~qW3jP!XFGs0HkZZP{d{q=||)548ED!NTmR>{5^zkzMOFj)9(f0$Si~O zAF^0CRbscS+GR(JC4KwEJ z*G3`ul^szCd|0+CM%@tSR(`Ty@ooZj@pR{g&*~CUlU8J?!KboLyW3R63xR~5yFQBWwj5zvK z-dC8XF=OU|L1Ly!*XQ;+R{|=!-`U9qoz}0uD?z+NUG=sj?a9$~?^$e()nwRvbx(KI zNP=jjm4h4blBnU-sL7-z!B)u&AlU5?z^|Tg)aog3_3VF0O;YeNy^9$)I%HOh7tke3 zc$*#?zu22mJsN@X4&+ot`Lf&!!V}WxZ!lw#>;72zsKRwF)KT$rqy=Jm}nP87 zxuU_(dxsEzY4DO?5VnusmsYmNj659u=txUP9S*@Y0w0@)Ja1|u{ zoV?+Pjk_d>d_&qF+5?f{2ktk>P4i-TvmdWr1?&G4{!0))E_fPQl~<;IK7t8XjEv?Y zKuXgvB1MdD*CO;B7Gh7m4T+ zBtQ|Duoy=(h|)p9kuHkz3jIl>>EXdmeSvqM^2A+*({DdP6~j;iQG_oC!4LEG2g{*e z$dlYG*aNcZ>k3OwVDnj5Hm3P4tmIWFvv+SI+YcS0u}gW9=wb4e*9+$R_4i-+3PI^R z@ptkBmxC4cn@k_$y4+(KJO4PzUe^pFuPXk5d^ZJsfTIzQ-xWM_lc_6`PP9_yBb;~K zgXejI=P|k`0yEDm^^;^5zIpVy(a%dDa1j)myl;0V;k9{dE`<^9h@^z$f`!|L^tN%D zM2tvi*^(Re$1t$rX?l<(>-1b}KUuoEoLB4w~(lfTWKaI9&QL9ovTRC+i{Q1w@>bQq*-&|$7 z-p`_AsVT7Cl~VF&fUwXq@wU_8Z3^1ewDC%w|414$JEw9I4;$^A$v?dWnvJa@c8J?>#lnuR__Mt}#qvo`%9E=!gjRmYQf|woZTv?oW66YHgiW zbX12^nvPoCNvtu?pk9)uhqA#l2k{qm9#bP|rI4lYU?`9=M)O%tI+Cm}r(+p8149J6 zIFsPrdJrJ`2e|O5(5&c?sFHQwKb$mA+e6l{fS6q#q{rfZX!_jIC!2#o)oV57VI-_x%}?a4ZHT0GcFD^Z z=amoF^18`v|8xge(dK1&ehW0*e$QR%A_xh{#nRHKgOWgo44T5P3Qe!eLkLm|uc6;B zmfrVo(^AsD%s2*0ChemGuHyw#Q;EjW74KB?;!-upLL`F=+G|SlZPTQ2^V$VLL7ewwg$gsMkPT3xm#+WsqG5oNphgR{>m(c9QhOSTcdpM`T~6Y{~XLTg|| z&`6Fk*&Ue41Rk@Oxc*#d07*cI7{fPH5(zv?bx3=oAYy@6W^(xqE^4Hv{s2A;`Z4v{ z4;w{!bAX{1ph{7eo_tPU*w_c4&MV+=NR)rh-F@5rU$BoO7t5DqzuoagBb#+egMHpl ztSt#6%*(0@nf{Inah`p@s~f1`ow~u*Q$v}_bVCuPr9l zcvQ>3DRr`(g&8Q(SLbn_t(hegB*gfqFIMc}O?Wv8E3fqP&EYhJ#KxUwBY2HOxz%F-XH`e_aJXuAhvrvHsYq3P-;J8T(>>{nZ(6@DPolbZO5$N~R5;*q+ z@5Zw~?qfYIYZkDwe?h4;VX&utW77!I&O|}`c?_>vaV!l8R`RkExIsEQT;om$974{3 zlTbLrbDzj0fTBwr?wAZ6_L{M}QEQ9xhJJvK$vP}h>;A1nxv&3D$|0}{9J~rG`InS{ zD({M47p^>DGN6e9kc8t33NQJrs{e26W9u>8J1vu%tkE|{airpW&>szewKq3mihRi_ zsk;t)mZSE+>j2jC!1sGDxy!S_iQRwxnZcSNa?v~2`6CFGV<<30kP_$Lm^n1zqE~H( z+?9#|gIBrvHmnZF>}&AA>6g;2a@7OBdI#@nwilk;`lo;(sa((N)AD|+mD2ocbQR#} z_qCLkO?qjm{vU8};dOcsFKM8U^(^d6MWahTR>;IO!RNh>S>W3EE)L>fHu4~KoyAhwoN`c1 z7y4csuean?FyS#t3_^L7BKi*sqzE>skvVGoELmu~xTFp*LJPH32w`=qP1H&SdVC-LHhc7wg7_aFiOz*9H{$dg+PauY`Ev z{3h5!6mv@u<;o3G8e5smO8rV75sWJSDl}a?^3a$q!>tkEv3rEP{X8EFh(p_t% zreJRxU~$aQ zo}^5Q3onFJCQ^Idq4SdM4=1C%$3s<<3$8*00MJ9#C+06*P^x;@Fjn*5Cm>U$puKO& z32aFtOk|z!!r`B2*D!wi+v)9c?=B-qLLoLj68X#W%8h#3Kw5I9%y`g~uJ$VC8fS|< zvixF=4e`HF2csL6zo~NZ)7*BI(}w>$dSXQ6GEdtbrIC1hwy_UE+GZxktYJUZR{0{H zuSBUBeN>a9^S7cd#CFoEStO^r!SdWE-eg(J>oPC@CaN?To$XDlv1I;xjQF8pmY&Jz z$PSUZo{$W%Y`A_y3Bn#rL)Jm=Ee&Zdp7I8JU!^3S@T1Q74&nu+B;8eBf}dU{6XZiYLONKA z+eo@_+PP5kSn;j8nY7EHeBRR?w`ts&FSa+i_dRMRmIlUfY1y}7(;0QJ0#K7N6CgNm zEUkNc{!Xlg6IvO&&2_RH?Zw_T*$VQ=J(=Q;L)!<4vfq|xKROS;2#i*sw`2;d-WEms zMlmrPL*~zIjf|+Q-W~eZ*R(e%>mpAl%)RMD-$cr1WpicONv@`r)H|wid{c5q7J@ZF z+Y)6{f^Xj(tI{mWJ+Bom7eecWEaRS^!Ff`eq4r$joOMQs|m;Ro?RwPO;R5k4%5cDzS&;q z4rkuWxtduxsO4%oBTg`P!!yfox)8+-yFT@Apg#*=SeU^=T7SF=&+9NDHKpq|6=roz=94jE2Y40rGk zURYu`JMiUfuVqy!4@@;Tlj)jTmW)=i&(p@yYUO>}oLsL>nF3e)W0b z;(x7xVp%{ylO=$yu5$seA;Ql+TIHG&=5dorc=2HxfW-~oTrW#Jsx~sWQe80NzQ*tN zo(N%x#(k|E&hAMH`$h&RAwms}IJlnZd)a6lT>z_`U_qsYN+wqaw4 ziblCk{60eB7Y8o$fjqN5C@>3@_j`<7A=hRh0UyoPr5eR2#5JII%H?I84%MP!Qh4@I zkYc3US@SFb?bX8dU;xBUcAujs*n{PT!1%k{%9k!ax?BMk@Oe5XyGL@v)<2tKR+%V5S#{IO=QeTLwf9qs<-Vg=D{q)85Ck|)0RY^aY0)zLLy zCe6qFZGtr0Hli9i3`dgx3|DS0n~y@;P{|AAiS&5{P>c04(YCx`IQ^p%cH_54@`*bZ zJujehHn~l4x)GAv954E6>#cq(Iz<|-s8}{^a(f#Eu&{HmRFL(VV#n zTQQ>}A_sMdLW&ba%BvLuHHIvQqT4nXJhJnKJ6i?|U);$6Zyg z3{)E?@NIoy2jqAnc@OhZ2u}c%MaMEj9*ff!4Nll1J5jfQg-OraHx~ttR^h+qP=s4b zk2h#5>%te!r3hpMD)9xh3E20oTxC*YMoG_hCl#1mZvdj3oRa?P z#jc>+p6m$-My_nkA3OFSl>g zOWCQRS;K$!AyVfeYnGP@JXXKZ`*vdPN$Znq%!?k4I3BpU$+8P%j5g{5efSe&G@+02 z905syF*o6q!kKH;i^uzRaK+$5-8#J@X=*wojCeSt-|{=?;d$I{UHtO?>2POE4X$b_ zlL6ux2CI8)wuBQxh#r(}+^MF*;8t6|8s4m z=%yF=m-dkR)U-`f=TrsAId@cr%xi&HRHb>H!^6|e<(zatVdFNe1WN8eR)-Gdc>a`0 zKmev=@sY+B3y~ud)gH&PrzTL-|9C&}Dmr(udn`WQ+($NZZR-+=CIm zjAO+G$rlSLbuZ|+j_QnL-{u75WV?)uWC*`^a9E6~2-36w;)%VB7;Hu1_cLbl5z1rO z%nv2E612_XcEf5fy4F=vy}-AtM(pdFuI8@Hu5^lq5&BSLRGPDXAjv6hiJ$aVBT~b6Vb}*@!GPbJ_xuz)eGqS~>s9XM)1}amtym5%ywfrI6 zt7-0}iL2#VQYPc`|t_aHFlS#AR&kiI&jxI{^Cf7oYVbk(s{EpOJ{Qio;;P>qiA zmSY5T^wzWFFSM~WHj4tTY`YnjE$b^a>Sm#Ds(bWX86(XGNM)QFONhHN&9ajZBt<~- zirlgL4TW22^iL9~|3g^7UrCY#?5P2yFTG1EZ+KX-I9Ch_2?o6FrTyeeBlgPS6h7;B zu5r2FG|P7qC?6m2byv1ZFAVWslcp@!o9>=K`~a_7C-_&yo&nueVKoN1M~(r6$cbV= zQcuO95j)+t?%YQ0eu(AyR3drp&4+5vyk#Cp1urLh0vscb*5i}@sKhz%sZ*m@?_wwr8N~VD3n#@xD>X&*=NS#+aR@t-&%D0X zD35#5u-HHaT+_1i|37x+wGW!v%=I*gi;3eKk z5u5x}kPs3f_-_=Bm6nl9>CHHN`rPg>C=jcvRSR5)1dq&?tQM76zmMY12E+$&7Px9|im-W+Z&B!7%2iN&R-l{-oDMqbyJ4`NtR4hFGICY41?5w7HeJS48L z3Db?nBiDEps!;8U7yFGn5+&jC@djyo+(hap+t;r;JI5}^96yPBqVi%9G#kaPG4O$J zYkgLz%++2?r%x>PC9>}dlNiFxQ^{=I>Uy1@Yn(HP{z1(q2n62df8P^(%v7Hy5g;u2|aIUS(2k$2!A~A($2nP+!5u>z#tKNrtf0TmVPr+ z;2g9P{LW$8uHa^cvl>Nw9wUtIXa=(nrjxBAF^dskVWAmG<~X3ktp`2#4VfThSMtNv zL_MUi;%;Q%a{D{a1hQfs7U`JP5LgOV&U4-=F8&qO5_w?F*;VzAHa3J4`Em23$vhN+ z1TTrw20Ch7RbSlDWH=sz(&oV6bf^}(BJb|R-@g)p3qdc{&(q^cV5ZvT!i~>8A-*xR zD*XbP>4Ga2R1rVV;ce}?-{4NO?tyb3d#|bsAyaBg)2c6FrW>hly?A(54%;{gAmjU3V134b>8fh5W-45ZI(O9I{c~B z_phALsb&-6a21*Y%u6q(I01j?%!J22zijUYmav9lrv^lvOdX zb=GDenGf$Z@*rFuhUrasd6*uA?;Kg1%oAT046d8(B|fwo zY-n85gW?Ghb#+luwuH2KU34thCKY@ui8)x6EZ3lxUGe2%m`ji3$M!~uR0r&`W*??v*$E#FbcAew>+r0> zBFN`ZrX0*?#k!4J{{_RAZV1~P(ZyddvfFnD4p4I)8EsvQhQ0QSJbn3ATS|rfNM@vn zXb28D@i|mxl~^#k6gsyfW)=NMO&Cp+F2n&Q@eDyZQ=5DyR7!5`fF@U&cW89hDZtv4 zcMHG!ldufeb4{ir!1S*`=K)m=m6r z+d!^$Oi+hdryrvqmRKp5B3;>f1`;xGv;85?1;c&`mkOPbG`rU_-FMxCe+5HX{lZt| zRPWsZzIz9Jt>%H~+cTZr>`ZsR8r&7$B*d?zEYGg$J8ZC8`8=>M>1IGHd{7;9D1c^9 z-!stL7j>aS0FMDohDv=`seADWh%F}NQWMG@B^Mn!^fFk`CS9)i&D84>tn;{7l+62I zSWj5eNA(z5vaaf)Zi7q8({{BLu>$OCQ^{AD`(rOfjMv)l{4)`D7V68rOX84?ED`d@SZa`3=<`@8^O9Mo# z{(?%fGmIX|NZXK+p*F&(drlprpg|{J#5!Z@x)@Rk#ujj34e1r{6>m68c*-Tj>V)j6SU+qS2mCYO zm{5n6EC6$+b+^kCxy=7%l#>FEmyG=%lS4o7*}@zS>1+QP{?fuhu1ILn`WB9WZeEty z!-WhwEH3qdMcV=nRY7gP*UxQ^~}BX~YQ&E^wIZ3v|QsEXpAG4t!jt!CTl> zgS4wiac=xbzu9hX=^~GpD8yf-_NO{ySp>t=tdY$f4d%JJ>oKk&^pXT3yg$;OnLA~CL0+Wt2Sj?FTJxR;4 z^DHFVwT>Anq|nF)`yD7pgNrZz`{awBSDpUxW0RUUv^j+8uk2k>Q`z{OSpjNi zO@Y!Z^0C}@AoK%1WOv$z&B$tmX`r@q3TY;bL3SVY=}i>Dn;B%LYjCe0GiE!;Nq6k+ zcc`tbBFM~E)?4;>oiXgFq?5)}`+)+I9JfxQZxFMKEf44b>1kt=QK(J80|{Oegd<*w z&?#53E28Gx?!gpERiT3U_ti@gMn8L)S7&Cw8a8713mdZ=l_ZSg`Lk2x9deO7lI|7; z6jO@Mns2$9AG=f>tU-*`+xUM6|6@5&p-HT4jm6&+h@=jodo;LgY{3SR0gUydftcbeZ?h|Yr!($xF>Ftz=BbM7bOKIsdZsU@ftZ% zzD_zp#gJ$aIjtDE;$UwuFw1xCO6RPoVdvZc<^&D=xMw5=@yzV7IMjnVBvd7iy=HPKiWP08^S%?~>FbENwN<2!n+2??<*)A}*7mq5? zOc3LsSqvQhH#!MtQzl%#k3YG!1XW2rh$57;xGGk*E66d5Y+|GO4N1?p3{%5{Hi zFb@3b34xGxj0?~;LQJ%ubbA$ZQI+LF1YYJu`KJErI*qkEB-NfuEnr?lZMK-z8tSI> z?2vH}p8V)rV!n(EirenBaNp!N04NBY=t`c0M4cKUQ!0M{N4;&q)5lAc4ed5`ATIP0 z1=>p^QriYU_pjB{0G%VMr%5Hhmd%Y08P}BIOTX*boxvi0P~XD6n?t(iG3F83*T*wU zk`OLQetEe2hSiHWY$wB#rhqH33J!WBF6mm=-xIOF0UYH1AUIKm9_BV@s*tl*(>0tL zl`~n4f^3$seiTr;@Tia6#LaYYNVD8ndC3c{k=YZ-OTtqr2ge$tnl@==O9g}Wld&MT$qtKOW5YPukyp?Uj{;= zZ3AP7Y2$Qq?|Ob8MZmt)8|@_M*hSB0X6X&eCp5?^8eqF^2G!>ezIb=C6>I`=gGG?_ z7il&%sk6wjEkfA8)pNk4L>1_{ejZ|8XsV{b~ zmbi7LLdjP=BvFbV_|i`bYK+?_gCFsr{fq^Pq?yqCi7mOm@cVABH(ya`b2N_AEFaJi z!8Y9e=?J}cbb+lRcFzs?*w$fe*WUc(trn{BLl`1G*EX`jwgXRwS#bw8!q}l`WDM|e zb2mrZh1t2t$Ns?2jGq>!Ea0Sg&{mXM5toXu=;V$(o2tkFj7SXRC-5I&U$I^Oa}Ad8 z%I|>Oi!Uj&pGE8LZPzYA(*)8Z57htTPX?Gg;~1J7?h{qRKF}@t zTOguL`ojq$Sa74)Jme#8ix!j>TLgG+G*Lmw0;%AlIOT?{n)|vog4=FV7+3VzMFAi7 zf-u_XYuOyOgQ|MMWV@$W-{*V^D3jF57XIrSZjiBjC%}yM!me+%ZH@~<`SX#q!QK>S z*+^`Z>ySYe{@fso2_p07oKVk;wLF*y2H8u8eJJ&q7XKd8)&+HEmopp-5r|-b%W0;B zB`U=o!KS@h<|~I{peX`}`QwOd)V4WU0jK;&;GBag@d^@zk$l&BrbFn!c}te}c!XaB zqoWIkMQ_HIC?P6Pi+<{Q%rFIaH~_o?PgZgVjwo4-x2Q384RvtvmmOZ~Bftn9wzx8J zC-rQh(q3!kA#VCHoW#euG!VCr4wC;eWo=_b($Z+G;5xUj#vXvX%Q%9g*HbeeeGLP< z^t&Mb(Y#ow+NeYsDFdAu%MmToPo((WJw~$!5x7%Rn*EL(TWKRS zVrP+S=-&f`K^MUuD5_>Khma5Bn;F`5=?RP6N97rurJm+6rZs!zwb1U>MdLoF{V+RIp16t zn@>zo%Ak$ogMTztWwlT6$pZe)NNI_IA1`CRLHs*1f+H4xYt^LU?N|i^42dHFk5ajU zH}a2p3V^mCu+)|jxiYF_t;QBoJRsUxP@Uw2m&(N2%UekFx_)s`NBtP8s^`BUFgGbI zvOXvJ?5xd4M2m18U1{DOhxbT;YKn~05t;7ZWBTailu|*WxE$;8?+R4yI5)u*^%l9BE-0#TS1B+7poPNE|AEVdkYE2bWUmi7lS3 z_Q?U|0h&#U)>tbf;*06EJJuj}YJb~;_m+-}2Kxw#;n_hGs@M@@wL--9lMpNtu5}!> z?CEj8<%ix}->gCAfyxsjT&Qt6>^>?uHA!v=Eq57_{ah-AYSMtuxoAoCo-3QLhpxgs zYDsd2QWaJ1V2KqH*>F$I@o#JK@xSYOgcT_(`Uua%WZ5iUQs=bSg4)2B`+9<`6dNK< zgOU|8OgTT$04_!JDk_A$-^`%cTU74s6pv0Ro=yPpd zNJuSIw~iy-2h?AfP=WbzZ<|eY@_7~7tu{agBAbzg*TEY32$Lo-F*<<+5n`xNcDN?< zciAV5Y+T`TB1y{#;^>ItnU^FeOo1O$PAuBj3ml_1 zgc{kaXosIFtb_2uS?!K@y_Rl9)WDmIm-U>w4y!NQ6Jo`c&pIp^r(+#Rnu-!qsUc0~ z*lRJ6jMieNIz1@hBa56gb0qmD*47`7%YXZMg*LfR1Rx*Jb2c}Y$spmzw@8OdU$dDC zdHkD(I5a^ZS;#p>6RmHP73Zrb!mSMs*9S_Qh`yLLmhI6xrlYfOwKW3K&(1pRJa}e4juTFS&Qa1?M4P**#4rg{# zVK$FQDONdsR`+0|=)TAzL25a{N#c*jdw^uYokV=%&}N?h4eoQW>XBmgX}0m)bl{>mIx z`$c=wT%s9?SgE=X;-H`e`z~jNrKapYZf0}kMc*sU+Tn+?=M1BM5J)`Cp{!B|W7`E2 zrVI~ILzyYO0YTSly%%d|Q+@so04hDtYx>)g-6p-!LwVfw(w_vUu^Lu4N*yaMoj}rT zL91O-rqPO7@_3<@?J&6iE^;(Jo9jHVmAbpyQP?eR7Cm#yv2{7cP?BzCfaj?QiE-Og z?Vde3!Fc%ys`%Q(4B#&)I|h&x`5P>zP=3feR5N@quJ2Lk`F8ax8D{w%VQxx44YwJg zw~i;lXFC$`-0tcz1uH+S__uq>@VJ-vX5*<%5%#$X@+#Hoy+r|pToe05!s@!@7%|<5 z$M;p`4GGNWkg`ZrsxWjjoH@IzK6Lfyc#X}3$o*GPq#6djaAy1vx1B@}TG};!>wqH9 zuk+r})=2^_Z99vurMm4kyq2iIgvf9oyHsZvPJTluZJIT&@Tb=U{4{abJao>_1Dqe1 zGF`VIS2wGX(Y1B=@Bq0OmM&)7%+VW9@Vt*%RV&ynjib~ii<@&m1D?MN`g)WWIX%yM z{Hz&_p$$|q59ZexO{V2{jT!ZcR|Yp3Ej|!7YfX{`Mc5__8@5kBefJdM9mu;9t#1P= zaz3|})r5i@^zlcIv8jEL+pHiw08fC>@6g%y8-WVqcf-A(z^?vj|l0JRuu2}Kag zaGgvHuYda@Db6QXxN|VsIG>9C(D`02nC(IJ9vO*6U)P*(Mlj1|w zN)=IWmiZ^R)1doj*wGPO)F)GNrVAPp)3y9A^HJPuss=33(&1`N#t`OJlkHd6!ownT zia}Lsp@&EE7KIph#mW^EDK{4C{Phhw$>F<;xB~4;SM#BkGDK{DEKeUEw7WzXY)R)Q zT{=GRB#3P~zF;YPr0`8FEn_Q@Ss~wX1t2&WOM+FlDguB(S70Q?$q>Nx0ajr(2(>5@%d&R07W+$l5=-WqAc}ons@YVrEcy1Lx`K^8>oE` zvr(k-LA3a!I8lVWq)_T1NazvAw)-p6C@}ARjaVE@CI4zASD#}prWN}~Cq9b|UpYj3 zuXqGn{g!kImDY1*wxnxIO>JJlj%@9j_0;BjFl@IzF9IIKR+;YfVE2*ADNul%U7vaH zGwe|UXgG^;!sZtJ_+Nn;CC_EzGqKQS?6j=6bR}&^kh`CpwcfxFIP9 zDrq)Ky-k^S^X4v#*xrTjG)?4Ne3*cjH|La(YL#<+tKYa_gy{3AOHUd~6lOOLHD_L) zVKb%S_9%uGBZu&Fpieb;h_W2P;4@2CMe*PlV%(t2W&aDjAD`6P@KBH$hLozPM<(jx z1W7adHq&RPDIj*d=~26TFY_38{}X@-9r}-25^KDIRx3%|Wt;u!vnAw)84#b=?vl=t z)1ab!%GC*3GBAd*o6ueM4U;6(jCu69b;l+=GuK?9wo9kTKl^`VTK(DC>|0ahFv4834GKNs<^MHa zSunA~rPUhB^yFfCG!Ge5@XEMSX&A{r>URYps4?>?PSiOQ=x>o~SF`_BLpc8eD0kT3 z*9c}k6n-MY)5=r$!zGFu!bzgz7^UV&7id;Vm{2_Oc=a5Gs^RuwDRk@%!G$!vvXK)^2%%#N zh6^^}5eYNu5+Zg=M&;8QHgO>k4n%~PZ`+q{<|EI4l)GU>g$b8v&m>gUlMTM9wC063ZWqExtEDVoTk`uY=9lSb2{tc!jRgi_ZHfz!DVJ(LT5wS==QTSl z@@RhYorG)5^0qwF{Z4-(86kk17fkV|Pd2FF)H2Z6kEe1Vm7y{A9 zTEnaSdeZ|iO0Wgr1d%DHg+$`|2BSUh*m}&DK8QtW525#m@Z#zqvYw~lx4b`Ln;T>8 zXfvQAr+~I&+fC8X!gG)YMSU&Rg&ja8<6fRNR-M^{8c-TQ5XM9eyKZ_0^TX%3JW#I| z0$Q|GXfXH4sFnqT+x{m+fJ9rLT(Pb#sh46{Vs!qxBC=R%6*>7;EWlx|X-g!SIoIyU z*L!EgP_-V5nxAz7gYQp#fCMXiOOb({5#aumbi%|8on@>5qwWvo7yNpQzXHz1+ zy4e0n+n$woR@DYEritdOlW859SLQ#LIj`x@M<}Miq!nSN12ad{Da@=&n{urXW9`Q0 z#I7`YkHprG;N@AuOZWAhD_tJcSV-gbXzXHEh^!-}#Ib#e@`dUQ0)FBgtm2`$E&~tT zZLSxjO-4~xZ*Tq2q$RT1moR#B8Q?^7X;M0yy9=M>Ihkkq8~wNCV2scviyDsk!B}XC zc`}-*{|a$r$~B(@3|S^9;zNWLW??;F$}K)nN>9={Ft8s#+%||a8vHIh;9PQZ*6(V7 z#!Y!ZNap%3m&_8$eU$5I`=))Y^j9v%+8XwYC4s*i$ttH!fIs`*SEdFYG+O|O&49;W zJ;|Bek{2)$sMp}feKS<)Rb<$KDA64()|GvBy0RHtKbrVgICPxlyd}A2Wo3ah1Z5Ep zoc51qytUV+v(NQ;$O!8V3~>{EP5h{NXca)LWEO5H#@&kFA3E>3M9{93R|OCMF8)gX z3cbN`4QiMTvj6gEg%^=Nv9firaB_(u$izuYJ&nrBy7%pdOk#XM^@}q^FH=jPH&dPeO*H zu$kzQP*FOh08DC~pPyOHf&ivEP71*vLsc$GPi0lVUzg z{`H|~tax!nCFJm!>g#$TJc9Y$&V&TQKvcom z9Sh@uo>8V3SlZbGQ1Jl@x5=h_tKc+XG;cFY4AEB4;dFubkC-k3He5YgHPlnghYe`N za(?Q|B*~jnytu-qnd7m%>$tyQ?QCzE8|I(ke|<%Z%!bnJ+J|8`Y4>t!Anb@gXGhqw>LNTuqK&VV`&eakh!xFuwel20VE6>>|y0#ucp5$^LES z;|Ap}A}!P64B2B>f{piHq(@oBwv)9f2G{^s&3$)^U^=|GDFrMFI0j+G$K$v%RNxDN zvHqr%AvwD2F(jy`yY2y8oM~ERvg-o1sTvB7;89057vcX9txa`>RQ>I?JnFiHSF)lN zLogcMMu@O&8W3NbmkaSjhV1iy#=4}2GaF(OU3U08kVfPu!*8e7mcm13Mfl@uER@U| z&4zp5ts-VP`g=sA@u|awHrewHq3vM_HCafoAaAV5AB)xgRhn|Y<>*L7R4s4T(%H#g6b z+IRZ_^Q(^*jbCO~T#GD$G7BN#R6+wWm+Qyo%6yb|Nm0L_-iT>mGq?(+fC~La`xzT$ zz0k==3Dl;^d!5%f$k3l${O4~bMd?aOrg5W6Vig(Q zJnrn)fQ`-mPUQ6xF6kVOIE}@HxPGHX8RLo6*2FDon?CI)LFOVB*zszIL)lo9?y!wW z-wo2Ru@2Vf{~*Go*cqY}wD_(BB%B7HrG<0p6|`sG4_((V2Hz@l*q(8SJA9( zQ~qmVt$CKyW?m`o7y<;eKO@U)*16kVo*SIBsntX70Tn5tey+lO^LSYV?q~S5D}0cS zC8>m7Nh>_`}`6_xS%C* zu0J+7K(wklLCI(Rq4Bh>Km7GP_VX|GgzZU%X$Ycb%GJr)e{UDf3t7N*3w`VG_G-t< zgu50k*vieaXmdC-WyUfN`HqC_mXYN2 z-RT~P3;UZp!q`A%S6yh(1>x5|XhO3s)jU^Ws@I2jo@@J7yQ#TXrGqaUv9`Gl}+#V)dC zfURq+b569It191&V}i1iEc#v74nzp*YW$rN$G{|sS%dwMMv#S}(htzH}&^f@GKYG4*n@TUB6CG@egk=)vi~@VIf~ zKVnn2@>Xy;)}{m~)eB@SJh`Yxz;emW^Nqq~jctaq#t;cl>q<@cgR(&@+3ekmLnB~D z->julsS)(0kVZ;dXgivNyGBdJi|!D~(TI+SHz1<&VTN zOr^~bO8uJ;!+uhN5jrI(E9QEc^OZ6f>^Y;QL2p3$Dacuu#>icY|7a0>=2l6E`^)e? z@mTmj5F54Bm$0l=gbId6-_=oQE3q-p1};xjgncJLoBkG5Bi105hiXU3khu3T2HV{ayBE4vM0YI$%*Et3oU?1 zm|@8Z_F?~6gxeV-#mueN)h_E1e}F6Xat)>YZt5I&A0&`#R|q?pn?+MMj>M)#wV4{M zs4d3fMA)S$fIa0z_Y~~5qA3rAl;C}fY=U1)ASLz715Jf;h0qesOyYGUoC#m<`ynMA@80ijGK{EzmCPNAY`g7wl95*+yeIA_a zcmCTDeia>f6b!%tR&)$Ys0R`{^fEH0Y}+j0^aT3g6u!1dc6<;8ug6e^e_%lKUZ-&^ zv;1qriVpTxRuZ=)5itm>B|I*`&4>^9qnH0>=dXVdZ=dQI5UDLu5`}i}s~cVP1gebGo~nLSZ8fWW;W07UV+RCzMj=01f3>JO_xk(G4`@{_KgR1TM4>} z+v2U9^=YaYw$T__2xtuUE^!c%?pPzzKW@}57vHB@tyukcilyz4tf3BAMmYnZ>0jxc zffSD`!t8K2V_Kxr`w;E&Fw=uNlHz*#Ti`WDy?+xc3hEEe1W$Gg1t>vaOwY)nBX*OJ$E`#d% z$tjNOYG)zB4Pn*RRDmalyzQ)=Wp26dO|Q08`kBw=b}A%*ateb#WtF8p2-%(hyFbYaB_1t1N2R&5=|A}#CL5;#7VM~jXi5$0Q=WKGye!3We$c(g_n1Wr;jX|cbe>MPj8$$hSI@)%3g^4c7rdqIao25Fm8xU)4z|~3 z(4mOn;3g{vSOGMdvnD#H1X1|p0yf`%do@oyPCZpwnxeGZQ>86FV}ho9xK;`}E))nX zrePp{4FZSg(WsHTs#a_h+MW z*6i(7YTvrXb+O$tTEI~eP?|i_90+vvhO(J!Chs=P8o88&!8734j-kMTF@NQfqd^{uWz3X=EhJt~t7{1oYFgYN z{u1>1s&bd^z1N*)-NW1E+otzjr0^-o)Jzw`Fe<0|JL0qp@l|J^r!ZgIm%cQsHG z!(L|l{xr)#Av8u8QK>?LF+b`fX9%gqiope=#w7)Eu`j?CtKJuAWlqrIP)yvms<3f$ zlBj==7id~cD#P6VygupvlT{V|aCcM}l3=PiMx4wAXD16w21%ci9 z9qLi9A|q^M{RNKCp!q+KhFtczje>TiUpmnx2`$L(jvHl?^k12_M^*DF?-gXO^-Oxr~pR#gEJ7ZVsn?#>!YX4raXT;-LI`lF=bWIp=Wmj<6)Hm=QK-yU#f$m~q{ zEFPjsEhm2PxLU=ayhvZ#??mBdbgv45EJrvm`JqN01EdW6kMmoxrWtHY0&=*w(&Ld4 z??aztj&l!)^B2V#f4rS^80VIdCSreHR`$ zS>L||wAPEU*W7YjLY>mb$^^C=2RVn5TI4T{OO8uh=g>?^^my;(+w0%gtSvdjyRo~C8p}{U53_n(W zHQK_p??zt3{G>J^*x(Fcz3L?>WCW#hxXzd+X+M8|v)V;G#a-ygDFaCt_BzMn_#^AZ zlh(X=kaRFm;6#vjgmz9=9p}EBu`;@E;RsR7^B5covJ>Er2)ZW9q zhIHMPSQ4d9xSAsZ7q0x+bx7ZzX3uoredFSo<}58vFSl)D0}&72y@0e%Ph2)=F|fE4 zL^jQ2ygU*uPXbAW9liD1H?q)*OEbQ0AudfUB@u#D>$ZoTM1DA;f7i+_3vD5jFxuv| z0?ZIsQMZ!iD*0b*x4!U(Y?$(r7#584!DwClrJJ;Sjgj?5UGbpjs)JNd44dg)F zuI6TgA49=j;NK?&#tR~GnP1q{Q5Y(EBbI;gVK^YsUBXR=@vh(qnboq(p@$hEb2|vk ztLIcQl7#Ug^S-a)rieZ)>o6*GKdCrLQmUnQI8&sljhX>EC|$^kq9&6RQz(tWl06A?Qj7GrDBtoMY(H1JU6%f}#&K79gj88bD4Y;=5p}Di zFPD8~4)3ejsI!Q^hyo!{wD&ZaPODbHP)u7lfjWkf->;EIVSAY@{2x5WD(@0weCRuY z`>pS;a{hpE;C^~GSCu~p=Sxe_$9Crn`D48 zzh8``@Ftg!MjpHT7freASVO9@`4%K}Hy7C7ZDK7J@s|Y@o+|m|ZsIg3;o&J1Ljy{V z-W4cBxTjar_<_q^y^3NM12R~srs6TGg`N#J!Xfga95jCRo5C^jwfc0dp+bJN;C$!j zR#eeYMLjeAldF*LSvh)Jd1r~plk%g6j^d|okk8;X5MqhstdOUx$nd=Fx1c^pf)-x@fy-r*yTEus5( z>yH0(_QlkNAV6Z27ACva`~y_gj#p(Si*PK}mGacQnuwvl;KJi?wyk_Qe=LhP!5j#} z2U^Bg7(C~-4*?5*=z!>+BhiVk^*a;tM_(7qe=WS8Dwuej4?rtNTctxr?t0j3P#p49 z#qUiOtt0t~!DR3IeXw5TRtR@;Vr zrDcqsUlf*MXU%1f#&PD`Yh8Nduage1?hwfrIES|rmI51-dtxJ7 z#dmw(*AV`IwRkQ+s5*J&@*~P41GJE?Y<*Agm2_HUl_Gx?&^3;7H(Oe|izAkUV_4fV zs98V1-q~U)mU;V+fKRTpp1~c9hD>zZNBEhH6oVhaY`7Kcp<=j}Yx!<5>k(m$ z?>|oBPRv0hoA6OUKVeu9b$Y48@T~>=xC;MYdH0k2yuqa$kACgUx;9}(&xzGoG)l>( zW;Q&1fyc{zt!avN7_Av)e!$IWfuSWa;NMV?^Q9g`bv117!YRRmO`xFguhmkyH=10jVj z<}_QjY4}y920+*+%*@h`qMFS~^N3iy7RU~Z8kI4)8gU;YRqk?U03MzhU_$Rv9-0wMA?5SMK$ z6Pq&i%|aC_H+K)21-Wbw;pKmv47*TTsa$u~hbt!BJYc@|9%_teJ6Ff9u!I@AZaf*_ zGI>g@awuKoq}0OdCQMyGP?CW@CX?V3HQOb|ecgrGHBC)C|3QUqOS}skC3QOrYewZ< zf2R8>46Wy`{Jn)39d*ya2Gu0k0a+Pj>@;%57s4Y6u4WY_q(ahbz0z48>BvFLu;Cdq zxeH}dVPBfSZUVlcB9!@LnlQGvBisAi{@I$A(g`2FaOxc>5QTB0u>n*(KL1kgkZEGx zwSy-DarH;ed@z>SW>-V@7>}(f7C6NU!b4b_TCw{8cP4QyS(HW;THs!5mo1@XNjezw z`Zhnv-KhhG5`Y6zD*2Zw&VB02MCAVb0cXl8i2|<6I9xvPGS5GUthb%w^leQutn+!4 zFKj%&`gm8wy=_H9T_E4P{xR`>z6qmMBQ5T@TjWFfL)Gy~iiN{EPw}9d4P1sqH;9BC z8~teaATg7Z?V0l9@-k{7$a{!anYTVtb}yEv_>2r3>Z*wPo&|KSnSS<6*{!%f3^rr(uq5iTW(yC%Y^~7j?K?O*CECYoo;Es|j+gZh$r;LRQ zu+b&3uS=2hVTKpao@-M~q14m&YHh3?_eok~AD~x>D3QG1# zC_g~&0qQkuCS&H)He0gmREr(e3I;s(#bqPGAKSfd6#X{&OMN+?KruzcZU0yqg36VK zj<89cpqZbH2g>)Zjd*O7bnInt|IYpkXU#$5hd_cIhbd|1no6Q65Ia*S$%Z^)v zFiF9~yI^=Wu>0B(@2=>bKzGmJkPPw-99U|DGci^rne3;qP<$5tHVp!StX}ngLcUV5Bd8V#0&=_lN^8jZvmUNXMmX$&_HBe8g4t_MQ9ld;zNMmYzdK5S&4#K4-wY)Lt1FQwwxDHb#wC`if^1d0BG9M5p2D7Rz@ zo}hLjgm;Sf!~@D#a-X!<4{#88fD9ySI_g^SA%FpCjLujYBSBbYkPlUG93sLiiMD2LNKuJez~i`faGq9XdRv%%IxbrdWAR}5Ljx#Tj0_;DMAAIM*JJN~WDzX@oG_JR zC*3n3&l5!mimY$5`Q5y%-9E`AHwe01$Dxz0UYGCK6)y`3lO45?lO;d-Y1TN;6OMtF zmp8zRGV$kOXj-C??u;vnEs1!P5%m7X ziX%m^B;@+&gXtV&o7HiHk~v zmU&?zmK)8Aox6BC2;_4pzbPaAb+Njon(-tu6&G6t-2U+BTfcDi%d@{luu!B=8p#b2 zfTMVbmD5rCSmmN(g)6&KV@#n^-_8*{KEV2W>R&<(%X8Cf(}tQuC)@d~Y-?Bg|3#AD z45YOMM%{>mdr0V=y#p}a)vw z7)s|sVC@w@%E91zBy6CD7<#==*T~^M+vlD$kOP2pP24kc#!!b)dTbEl{M4@SD|0Y8~XsIa%Np}Tic7_WNVgpVLMSEbo1U@H)qn7ZZ#xh8rSloS4hl7>HaOD zY>=`f;d3n6xklycPgHnjx>kR&F!3N++tuI++npc#`xKGBu&sYG(p7!aMX$_pNHsX| zZ%*$y=3>1Ez=1vBan{X?PTfc@y|yWmY9h^?SD$95<2>MQ5CzSREXIaPVG|Sg`AHm^ zt}!nI>Y-o9)mf2F+_J!atn1&ElDXJDqNCQrz=V0>nv5qFtX+Mt`MYUD6d?A`#n;l+ zc;iNH4z+|e^Y8as;Nlt+lmGD{g#C@KKQ?iDZk!Ygy*Hq3co9BcI+$yc& zVkJrpzoY%>-`0_zlI}Y(uRIw5FWAySTe7}MllSOf|JeWm02%;5V_>ud68wzpmP`yl qz$n3Zz=45@fs=`mk&B6enL#onBePfmi1O1E+%oghQ;QTd%rybrCyg)w literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Default/Registration/Left_Iris.iso b/apitest/resource/Profile/Default/Registration/Left_Iris.iso new file mode 100644 index 0000000000000000000000000000000000000000..fedadc7df94cfe8dc9dcfce2e6b0d8381a3c4391 GIT binary patch literal 55435 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�$ni>D0tQz@57o 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 JF`BB!|Ji0iRPz7; literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Default/Registration/Left_Little.iso b/apitest/resource/Profile/Default/Registration/Left_Little.iso new file mode 100644 index 0000000000000000000000000000000000000000..d2b26846803b9a0069ec9526dbe5cde3f9e60363 GIT binary patch literal 83945 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 KXJv9AC^#uXV7+qy literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Default/Registration/Left_Ring.iso b/apitest/resource/Profile/Default/Registration/Left_Ring.iso new file mode 100644 index 0000000000000000000000000000000000000000..b401048829b810fdefd30789a2ec2d3fd85d8b89 GIT binary patch literal 90331 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®pf3-6>7>#5MMS=zH`F!i{ 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 WX>%ZHb0BYKAVz6!XJv9AC^;#o-!q&5 literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Default/Registration/Left_Thumb.iso b/apitest/resource/Profile/Default/Registration/Left_Thumb.iso new file mode 100644 index 0000000000000000000000000000000000000000..0574ba6c8e12e247e36a9ee800beac1f006de825 GIT binary patch literal 110503 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

UiX7~OnD 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 R$r$k{4r>~ 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 literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Default/Registration/Right_Iris.iso b/apitest/resource/Profile/Default/Registration/Right_Iris.iso new file mode 100644 index 0000000000000000000000000000000000000000..72bb495bfbafc72a80489936f688ef8832ebdd13 GIT binary patch literal 51948 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 E*%ssR?EnA( literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Default/Registration/Right_Little.iso b/apitest/resource/Profile/Default/Registration/Right_Little.iso new file mode 100644 index 0000000000000000000000000000000000000000..6b3badf299c9a42b3bd35e1163e451f453c6ef82 GIT binary patch literal 81884 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 z z{?nPdQNUt|6~cSbK=zyLywD2UaVqc$$ZK;RR;UC_6QkRpqF*AGy&1?(b%x8Cob-V= zZa!cM&HY+NTZBO?Y|W~`GwZjy1*ZaQ6p`ESQOE{)#h|V}K;Y|rm5ZB>{o@kAz&G>g z%8L}vx+-tuj=N@1&Ch5K&)#4wTDmoybxcaie)XU&*p>5LQr5MP>M`2!3sir^?IlV)v6g%j53D>qZb)Xdv~% zw!DC$cTuVj;*2XiXQHGPfMTC`~k!Zo`6z(!;*(9K^C z$Tk4@S2VPe?H<%0qH{E=2R5}W?}y>&FOxH*gxk^S$y}SilVR$G@+kD5UH&t&(+wB_ z0}5O!km1Q|#5PczU**;-9~~pAy`hb2^KV>I ztf=d77w|Gh4%J`la(~8GYFYuG7Q%2s-Zl}AG`x85tb1~jK7_G56(e=s4N>49(FCmd z1b#BN+R0#8GcLOOZSoM8zhm?&&m+E}rEr8jr`8~7&~WweFWT}x;QCEM&KtlZ%voFmgl)Z-+^PRDiP#o#L!ny_}#17M7mdHDRT58XyQY-S9U zA`+e&^^5rQ&~dDct$`p=7Al(3a*&biRX$wCibvSzM+@jqiOA?`up2FE$E}L6&Kda3 zJ(=XcY`OZUULUrZ;jtDWNdw1N-?ttk{%^>=T%>ziW4j>e>M+M$Oi~Z`unToKV^!b9 z<-rzH$rG2TI-UJ5f*Z5rzYLYOP~2fIwK{_BY&3RZl3aTEqq4-(DxH3o5 zvxwaZezmz^gZD=21@GX|#JlnC)EGl0bR1P@VQ<*G+)eyGy}?fjTCGYnHW*lAX;t?% zz?64|4nRCseTN%|!6fH`agH_BZJ;0p%|Z!jPpZFwKO+(4aBi*=VNl_WlsLLgl*(!k zq{LzK^|Twv;+42@hqd$lXVuSCtlGKdVh3twlF`T^Zb3fs#vB;@U|Iq92FDi?-Bjm! zuqgb*)Ar3YH$ui#PTzfOwh7BfmzQiiVb%kKqf%`~J{*9KzGNYo78g!=j2IwiAd!AaD*I7g&$^ub4Q3>!zKu1!O7Jo74cGQwX+Z%omG9#yvHseMwdJmX`C5g}Jbj)T^{9uz;^nU23L zRQN!+lSKCaFkQ8Y7S&j7^Gm4Kt#kJE<%iG9gA&t&a*P@N_VIX4ZOSyo%Tad~FPOy< zPGm95bVDQ3ejG=@ib4r=P*{|`tOzmhrlS-7$xPsQV)${!glGmv7VGWHuf)bt*{bWE zM5ML5jv*%lZ9Hya5O1bq6H+?Ll<6$RsO_L<(%WrB)H1?!>Acj9Rn#LZfUf(~3Os8x#2nYx8+97Z-w&_2V)ocGN$ zeGxb>mL%&lbK0c*V61Yb&u`((Y-$w@HgWc!c9!S;HM7hu`RuWz`(zA4HXPd) z&Cq;<*<1V965{x!ba0z&k=n@@)u8=%)oRU8cpnDjh$a*WNPAOxT-K6bN;q)a(P04@ zqbS7)7X>D|nia-x8mXv3{a?^en1anS#@&q#;j_9MnB!oPL^L^RP=myXBU+v}YrdcO z+oUK1S+N@AiA4;hpDp%3TyYqOLqf7WDNVco7*9y@$ zk{j`A7Z(>%1cVwqc_6W{qXN!_@%Mc}p_93wZ%**)FfkZT>esCC{bEms+}8dYwE!|A z(Njrw!EM4Z@)P{z<$fvH&E}GkLsvV||m+hfGwQ#*zbhcvBx`+P49OQx8uS6>^ zsZNkDM(_U0+Remj0yCE%S`q11(3!WFf+Ubo(K#-Qe3-q~uKl0NIYu)?$X;Pvk4Wnx z!&tIRFoYlGBY4T@y$8cn{EWC9rS9Un&p(TiWLML=9uEuJr%gfR0^XR6|4XTmD^c8x ziy}-g>zj!Eh>*HENd=bSX@YR}{~fm-bu@5kPK%>8hLZk7B4n#2BCT(Z#H7Nk!d%}U z!wwiRS`*Vy2knhJ)3uxSi9D|sCWi_Z@62kPl4HGl7tr|FG&pgiSm$Zrk}z3kjQ_vHQxb` ziZU}%+m<^{lymQIZ(P;Bve+d3Mp#ZB^yB$hh^NIL^7Q>Ov2i-DtdIICpjr>RW5RK#!Ku(TmlV__T$`nHLmn-lkF@KNzZW(s z@vPGv;eIhg-j1eiXuY!=KQ{`Sdn(E7Kt4bkLrSXBJ=+YJ@%t z&NC=TLZ-iLL8FX##U34Z66&pD_SMIaZ6IGhEeVS+ObT+qguqxk3qKtayS<& z&c0_c389z@N{HPZM%j_S<y5odUN!!9*;@qshUj57BMtV#7;)BbqCINk zAw|O@wjm*qqx9~4Gc|s?09u#R?Q2XMKpnpe0qLh*m{Ed%b z3S67!57;*^MxbaSLkaepy6z2PoS`Llt8*9)tE4@wNZ%TLkqd0@#$>K4cyC0P|6+sj z_B(zk5-ef-NQ3$>`EU{z7MgFpbcx(OyhyYsnk*Ed%!Wwvp=vO{s75a$`=(K7 zL`6%jSF*#ir%u1VRKWQQ+1`Tg-a-m?9RwA|3~sD4vG3(>ww40WuY+(w89kN=W#uz= z3~fVIBEN(%KdKIl>xA~~1NtT4S4Q~bt4+gl?Jakn<`f?r2l&|ICnI<-)e?%MLFHp} zx$V6D3TNOIsd!h%LJ!eh=?>JE@gaFFm{j-sYp7>6!jBNxcq`mB8D8|0ZHbd7VL@V6 z;Np@H9!8L|f@e5K27mo~m>ezfpF||({y1OR2+vvGhsX}}z`rJ#&%;wQ#4~QCo)$51 znV)*>iFsE?HvfQ603NJPxJs)wxm3OmjR#dok~#%R-(`iSHVD}Y@h)HMBxdI5Ypqly zh5i{-M0P%o-X7TD0dQ2C%D5{W#@K@L?!iB}%_O9&O&!F`P)$@wHn6>@O5&?V4?8ka z=4K4}T4jmZ8}^m;BguK071bNIu*qZ?QVoEZ1&`cGLP{d1|)1dg!bQ)De~} z>?{%p2VMj=#cDmV?PYf`d)X7?9ERyyk7edh>-2j`tP_1{FDZHCiEKf|DLcc!!K`Ww zlDR-S&L%hA6SQ&!ZbxycE-ND8E@R)J8n) zN;2PMG!?gyZ!%R8uOBn0mH|dm3A`)Vug;6BDQLx<;&;Y`*N)gy2joLG_n}jzB@(*u zV~w?u{C~$l=RyA1r$tEWN-}i0@~=N}GOJGu3WWmsPwxS1O4VNY>h( zJP}gLI3qyjYW3M=&7)P1dwLu#}mC;v<~WoLz@B0SCN z1gSuRmd!4f&NQX+C*Pmr8`CeycI$r0->KgU)~; z4Ul08kj?DYsYrr|RFQPh4fd#mt5LcEUaSjq5D?{7AXMcm9Uka;2(I($&NP9ZdB#>1 zx!cO3QI7|kWnc;`#1bGY&HipsGt*oFN7R<2-+XWBO7as+|0}>r(>&cG$FWxv9R46V z+B5mECq$sSvyl24X85%>H3vv(U&F~cLv38Z99zpx^Jw6<37Cq`D{qZl&B+<%f_pum zW9E#cA^t#N^C3|2;b%`X!JE^@%pUW{m-bOs@kc20AowZUIEfi?&@uRC+DLU|oB*ZF zAtW1<9zu63Jn@#}yqw3rF$4Z{={?E8)y9$CGMFdig%8ks0a}@ju#0f}{bYSRu^-k9 zX^hPA?VZmPSo`YtfT5_OSPqGm3M9<8+`k)Htjc^aq=A3AR>%_XxT;*l(rf&irGbfn z8}%V|w)Hms^%Z+My5(Cu5M45U!a=ye|4ZYP`wnL}b5X@(Sin7IEKK!+hE&z?S%3NdvYg!|gJAk6KaV+X|R zmCsW2w?Y3JA2j04l&i0GIWxaYDr5f{U@zPn`|e7+o>cxzpIS;&xXtCO4?Ec`?jP3VIe8o-OjX5Nc)7^BKmjvV?j=w5G{%jzanwy!H zrqHwtKJaE^>kM_jchmHiZ77t$@ixP@KLp{9;jbi)xq+%w2WPw_)TAv4$jVUw{mov& zX^?gYtF$`W2SFY=|AX5asZ(0+?imgc7O!mxGFBi8r%{%)k5I?#usu88?)+l*Oz~+b zKgCm)9<_d6Z{GOqI7D|8vnY0(j!vDJ@eWBaJ zPrP_=gkgx(@53FhsXYWa!CfmH#O~EslOhs}2(-$Up-p--3vgMm3HkDZ9MFxdK`4kq zE>~%>{qg4OBy(YW9Tdpg3h#UfFE#5+;yznl1l;%+7F>+_>SuVh55mdN&&h2SagoF4O2&&z@&igr#?If!`TO>cGWHRAF%5c z#D8MV`Iv_mZqNv?ZfWqZjpgR1uOQ02C)_{)ZJ2suV#pJih>ebzRG_+oH^>i;9pqI1 zCa*cDbO&I~G-u`LgD9|~p%i|eRGMQEa^CyjV`L+352OU@h#x+P1iv&*vcUxPG&> z8_mzoW9Cm;HI|Y*xB~YWjzImR@JG|Jd?CbKjWT}rHsZXF2X50lo{T^_xjb7-$MdaF zxI|Oxw^%+vjD5!B6KaV;s$LM|ES;-FsgE)Q)grR(PUxTx@KpL&^fsVWAcgAGGUy1HZNi#q#TQ9t z1VF79X=Uq4!Ih?rLMZM--<_JuO>oXn%f2shD%j=wdefT=mO) zd+4>!BvIF(E5x6D65P~HFSyg1A1Vu0m}K}4Me^P)1yn}+D@%SA-_oOxE%`8f+!wF{ zZA%=jX3`in5}V8YygXu1kCUC4FU%t_X8StEYP&MnJrGxU>q}jxq%4Ykd0FvQ{xir%=z~zCO#|ZW)9LlS$3po{#sZ6)^0I6bTH2Bx`CnDOL)`*BkvCmAT4b&^dHKV;@ zIi8sSMjutpcK-M*4vzC^RiIq7;o&rBJwb$k=IEWmVXIKDeQ6~PBxOmd9-?agPjC4) zbS~hQ^-0%N?*>pfQ-!S|qpq;VAajRGQ+FlPFW>zSQ4Ch46_k#Xe4glX#~I4^|0635 z<;V2`dgNLNd_qu(vXK)9dN?n#K5q1B$PVBpc@L_$bsuF7GV~&mFnF-9c;!)m-Ct3yS~LC8hwSB?F|h;8w7wYku*If zrn3JDB+bKjkqNIt6YJO9kX?3qmMhKP3WW) zu-%3Hgy0w_Huv(9y52JtiPw>VXC|HeM1LHjzo~4k$Uvu9ZN^9=)C$oFyInI9pvn@2 zS7w@IfZALSUkh7c5;n-5vF$q;V(QxkVRLg_QKWRIlhy#64C5-ir3td{mx==#(%OyI z=boJiyIJZ=T0~GAN>u)e>Md0Z)Mf}Au4W3vO;hZ^bgaNX{GsZv(;|#Iu{HiIYj01EMORb{yUK2e{E-^^h7E1j_aLI3 zG@s^D1Cy3Tfcr1%A#32Sk3|OFiL%r({Y{FuwV4A~v~-Hfm{ADBbh~}{8zI|hI)PDL z+fahI+i1WzIl-lPMlJ+cy&@NL<_iyQeIb)(*L+$)DGQQ}jw9h-{tVUbxiy)AVFFlh zXnL~7Mr`-yYYM>&e{SXsz+^ZTn+gfr9fo`YI^ef{yM_+GF|4YK2s(mp3KOw~>puO^ zP4nJ1eRQsXk7m`4A-}9u-qM zOnM6=3(Dmy(i+R^19YKmt6uhUC=w`e_$P*I7KDG5_;T6C+d8v@7twDfhVn{hi`|k! zGfCt-o1J21%so$iS_pC)I}4>d1@ZyvU>5}C<9$)14^OHAq&P4_yyRhAvQp^liq(Py zwD{vkRD)YlS?10gp!OAJ(a?Z4qDQlU%jha`6(?DvS1<_(N#OG?WfFiKJY2G-U+SE(1T%+nKfO&B?4S z&=uM#fCB#nW;m|{Xj*Xeq0~00%cFoW7H=Au2jt8^V~<(;cSa-7*WZrGIS>GcC$kL!?*9x5y3y}8VLudPWrzrN^7L_A_RR@!PzhN{D!IvsAp2}fxDSJ0b({Cq9%8$R#K)S zq;+l?VPaO^oP@|xul9bfY{cV1>=K|9@F;rR_#t3}7gcw?=SNUa*$XA7M}e65GnpI^ zOQuTRL%snC%${^q%?X*W74!teXy_WNsw?vlXOdVRBkiZHcPqF^su%*p(&f7kR%(%o zj+UmqvcI`bgI2{k`3=cqgvab&AHhbFmBfe*6`H? z-I&UeD05`uVcU&}XnF6B^RJPCSNv(<0T=xtFL`1XV~cE}@X-*rdX4jkIgjxc&9vJp z8BAC`RtEx4a2U_ZCagY*z|2!&6yY+{^MY#18T&IJ7*H%k<{1EfU*9GM_{j!Mj}h@R zE6I^}t)|TM4?$yJLW55_9UWvnD3~CTR%3@#rlR2|aLUcVfG^A?skMfwIDG-wF08f6 z^s$C})J@^5{}ObC<;&8#6Wp5r?)Q zeV(c5<`;mopKQ`}PFJ8A{^YjxbO%7q2(?#U={sCHZ?*1``z`K1!v+*{!yVszHPYvM zCWBL*pJux=I%@i4YD97diiI}?du@yxcMv0}YY#Hu*h#DO{7l5}B!NWnT-s@F;R^y5 zH8qhX!0@#wqe11cT86htn87XClS+7U5fTeDnyPpp64FnC(lhemA^>jMbO4S_^|e^D zyKu04`vfRTxKxxu=$2#Z+Y(s<>exE@hRW@Gr@P;eKv4?RWOXSljqUcFnnEVfxE&~r zVzIn5;licJ2MB^Yhr!VP9 zm0p&QYz%1_sd5X!w@32|QkO=@voy26wRF*eaVl1$1%Y+x-CQ??g$E~NJZnD7onMFK zd*_zsQ<{D)?fTn=-PhYh<}r5YpmvbB4{hUMTW$$i51MPhQN}^_NR{51E`k1$n5JEc zMEM3g2IU>khfJ7vTeu^T&$Xz-AMZRr<_#?=Y1qg4ZPAP(*!`APQns?D0!6C@;mc4FQjLM^yr{K_Aw z6&%JRls(6X3x5Nv;z5Q<@ZG<#wB3U~fLkz0Qdq7=1ZtI(jp>9Wi^+8&-1v;OQrPpg zqVrgqjhNxDQuRSv1jaYyU>)0D%*XlflKyN-xZy&iZ8aVw7W5Axapv=+ zhYQvz&HBR`VvDT)VksR7Meh6Xw*CUn?wY-9g(Jf;)E5kzapjd~NUI<&h zlm^g@KBtk0e9&3ershU?GrhIB-IR8k$cIaKS0 zmZ!&$k~~oratpmWRi)76d6ryFZw_jZdgJ-77rY=B-d$VVND@TFSIJnb>f)twEK504 zkD|xBwIQ8YBMxvM*LLTYPg$oq?DB# z)eWsp?Qd?W9i|AAihHz;z1Cs7NXwDQ+>gUq2UVSnC91_x0BqXh?KY)dQOWlfR)>}3 z7eLOUK4uwJ+I|acG4+hfys0=sRKH0b@h%xT54ghEurZ>vuvS$v$^Ct-F<)8K)K<2y zK%=KgJ3()#>(OF@==YNZTyrFexlHX%ieqO1Ie8-NU!_09qs-PS_Un?D-~`-o{S>S> zC*({({(4)&gSb+ITw(T0$FxJkuqZi5snt9D#O*|If&KZl;il1*mAq!&R6V|^A{Q20 z1zEhW0Mq9z^*EU(4p|yBH2)VF?blNey*R!<44zqaChL<6DhtdY`ek#bd2OB;93xlY zmd5o!cOk&EEDjp=!-j{w@z5PEHyvFxQ4+}?cXD(0nq-KI2$mf(X6?|_U=@@`_#0Gz zqBH(;2iJJloR2H*2sr&s`#!P5A4oeVGpAK|k%T5J#|p_rSA%*<*4?yY8PY}JD^6bQ_%5@SwJNfNr6}BRMlDCp44kmkOX3Lo| zvCzC%fblN5#f(=BztJ$ux`8Q=(Mayu(A@YYph{_ve-=GlB*r9+R56{U1(#k}{5?w< zjH6Mf!YVt|SQ15&a;yg)Zkklpw^Whx2di2_MD@BOQSj}Ps^*^oo@95>4 zRx2n>!w${})sL2PWR}i&o;v1cNxysBhqc8p$zZqE)lQuD%i zulfh=?Qhkjwjk(xBdOS}!GEoyEp}*}27}I|MSQWz}-=S0@-t2nV^Q2oxf6T6sH7{99T{!LF?Q-|oZrAc`q%7mADkLWT-{Vj&qWWpxFm@#^vqAa~{(1YJ@VrxsTV z0^VIrAie1{IP8QhB9@2#<-`FhSUH06zU|8{)GA;pbZZMwl-4P1G06}iruCRC6td+A zYkV+&iui>Vg#N?SDWGrYc7TOb69R9N<#`p#Ig1s_c>X=Ya*)WqEEEPiDc{E-80N&{ z=bKHp1GnlKjP#xeTIMKzF1Rl$=x)OyYqsh-hWT&myFzb+FWBFR5Q-pvt-d)oRG{!& z3(N-`MYUdVI+>rcxQVGJ**jHVe96wCdMdZ?Ei7afz=W}H{HDRa3e(^F&eL2R-UFW$ zIo}pZo%bO{s;F%fnT?o_XFH%$`z77r_tlh#%4rz?id4A@rmxpz#EW0oHZ7NP9Q`rpV16TX4C*dl~ z;P*ZKxvjNn|3)1Wr?dV3x`eV6f@8dplz3Zqm^!K zlA~4MVmzlUjA@|u);9k|1i~2ixt5^Rn}3CbJ^EDg!(pD6>RM_0_x^KBPF?oJImA3Q z7KVFE)E6!IP~TD--Rn52;`_cVJm=GpH#ZGDOJm_maK`f8sB@io8b17ei{57IDoA&P z{m~kIGBZmiW(}ERpAIUPYH@5Mm*YDYWmT&kf*hnsLGPij^ajSZQEEWy zy|wDbk9m(pVg0Dj+4xpSq!RrPRqMrdvtP|Qvcu^Mi?q%hoo9vjU>u98V6lnfSVz1b z6RqO6!)(yEHZb>rIo^#6;Gf$u*|+7B@J&!n#yjYYn7}oys?Df%mCIBP!mt+?8$MGu zes56!B%GEo{fqFg>4s<}^TX-rA;&x?CC_IS6xPi`>Gy271C(AA%;@T3X^m5E%txp| zcl8B1m43HOQOV4Uh?aY)C2H+qnbpKkx1=;b0Pe65%k6A$T`K1?C6-xQfO#t%JuG>g zzX7*4qqAZu2CqCxM{&xh8`6pgxdLd-?@_urj=@fw-H>40k$k3fHsx=&`89d#hkLfk zI}?t4eSm_NUXkB}`yzkwJaji!*Ny67iX4$0TY$idZ2uj|*-BC!eEkE#jtN7OTN>+l z@gX>Wtna{`ZupsB75oNon4}Pn1~nmGx=(|Vbx4_m-ZV|f!@dSe`ZiJoZv1-|eh$X?CBG(44%)uT)eEye*tgYqW$RKHQmL66)6srh?<=XmktBY*BPNojWd@-qE zSvC=PMUdj*mw@ZRnsGTwOm}gKL05j{5kRj@>J5oHg3+u-Y_hPiLg22pyp&qM?RcWy zhO9m)iqX;|>wCHgapp4UQDC2tD&gyYP#i7`(r5l7@heS*AtvfaI4@T*MlJz`_Wa6v zdLc2s~^G_P=b3#%PZEFiddNKS%gCkBj^8W+aYOTRrywzDk#^% zK~(K~%#u<~m1)>6%itQN^XZvf5{c_iiMDxHq8lbUH6i(;&n4n=ID2R;ITY!Zb&zfx zbyO1YzFPaF6Hza0^ir#K6Tn|UL(xw$8BsRLb#MtSHSD-7xtr6i8V9!^%E4{lz+-e# z)d2ZlL0=$hAi~CnB0}n6jQcI#%s5>@)SZHRqct8qk1NuI!odX=h^ur|T<09}AibWm z(3(K&w?1PYaZm^ZexVvLmK92A24Qst^$wv;(zxx)QPGS{#+vRy)U1fr!9H4**z-CP2|j{IiPc zA6qz*Sc7<&MUM;sLX(NzIH5BgAU)d`YJ%cX%Ui*4*1l1LS6608sooazaDERDeUdqGbCLS;eA0EZ)ZmcX>BNiojE>I#Oh8(^ubMpt0X4>M=AKDl{?*m5MNy;lRAx- zB8yVLMvC;#SF)A9(2$i-L=#yyb^Fcabx0bRVq%zLLmP*DYp3WDlO3;^=@W$cVND}x zOL^SJ#qvTCZlh#+P12AXW_`lxwHs_Z*rkCvIqw30*s zs4`=n`6VGB~n3 zt<%&Oo!LkSs2ml+beJ3uOw7zemv}U6&cZ++1>~U6{ z_g7w`+9vNEZ~@eK0L@05s3?5E#?f`?EJE`z9nDfZ8~P8E7iV=&va*Q-1%UUwnIw?1 z=_=dX_C53#$+V>&^kt%)eHkQdvi^B9taxhB(N_-&MP=HuhD|BRoMWo0u2^wH+UW@! zSRC@%pJq!}(a)k1hWP30AKXW5m@w-YEmf*GB;55Keg}TBLq(_VZPECBT%u5T;Q4v81C8;{#gyD5kD(qg=L6c69pflGt6?xA3M7Go6j{(1_p0+i8iDnB(v6v4 z4V-tcnS=OyqI)SEp)A7k#$+4{1XpV-zF2z;3q1|rMI5C6b50$?r`7uvC*fON{uE_3 z=6yg*RH5%dJMb{9`~gH|P2akfre%u^&)5c0Wh`GE!NMDry9)hOm=3bIZ%$2L-j1a+ zow8la`LJ6BUAsNsCgNY}gykFU`FznGDahelzh1EKXr_@ACS<(W;3URP*@7izJeQsx zT&3i3X^gABQA}wUagML=W}j(ZNMih-(qzh!kduWGPno}7$~lzu#v=VB=YWsJ6(Jr~ zSWr~(_DZMYA;LH2M{FWa8Uz)dN!E>FW0#Vw@y3NT%k7b_8l74Dl{pR+n%EHK++7m| ztp5daew&6Q6N4w1S;w&DPnEn{%Lo{??w$?O8>19&Q2@*RF=fXE?3&$9Sc&wO+RfyM z_u&vaXtI%BA)<+%MXh%tf_L;M`LI(v)A$2)jedG`CtgD_0kvHPg>Kh52`)xbHR1B3 zs_T>S%soaMfG@6LS`_gpR#8<3SgbuWU^D7#`0~udOaUh4kePv>&F>Vhy@W0{Ez}bmU&&>+s64LC-okt@ z{-eysB|}4wM+u2U1w~M5OECA|7H(%TPsKQ+?HO&M@i)1;$y%CA3Doboi>&~?|3`u* z2*7!nJlaU5Ieq;jprz~mq^@fbT&1*j!YyZ{7&wi>gvt$4`>;|x7YD2=hebF1OJ0J+ z70Sy?%DqwGRN5vA?EFLM34PnGTp=^3h-6;|2Wb8!A_AYN74j^X>JkcXjUdpRE}PaB zs{U9|3%)5Gok20*cE`s$r4;nGWy6cb^|OW6mt2{Du_U)ywR!eJmI#`(m>Dp(Oj{Mw zKS?IXyb)`V%3ILKY-z@S6j2~U0XJx4Ljw{v9u!?``(OgDxwgR^0#(LTiWtW4`=uHb z!Hj2<6CtFUQ&&P11>X!IAo|77<7l(8+(Q^^6$27C`|AP2C0n@v$ZC9z@bX)P;V!>SVkn;v=IWRy&74w^h` za-5>?0;UXr49m2w4>?w3X^wkkSlU+rb6d{%nN&A;_WBY)xo5(q^|W(eNa%s7Fd>(P z9ZYR@9V-q&(2^!!TEQ+tY88++eEC-&|5xyr)pj8>nP*-EHZGw8!4)uV#HW0?w!W|A zfstGOk`GJq8O4OcZkYraQM*$5!y4Vdkg$UZx3$~9FkOY#*8Fpw@s-~e0lr= zqb^VZsiL5Sm$O-^Ud*I(972SFYrp4r-cPPzKScILJg{#kR=tqI_&Y38R-HJJ5zJnl zV7YXpKmtsqIB8z$IbllfnF~+?Em+G2uB3&!7+S#~fAo&gUHgU8y($}M7ON^7i+|g5 z{=>IU3IJ(dC6Gn;#uJiIU2@wp0-VzFhDWNBNT}l>nx2=})!`C4Dzwkv>~V<`4n<6K z$OeJbw;?HMy^Pm!t zDTiWv7aO010Ga1seUycSAmw{!^56d=HB5$Nh_+~-KUwz9kxWpaSDftmCbtmiY%k}N zHB)ixvU1Zf>g*YC?tx$q0)2PSiUA55Bt5(jNB-@hMcT^j?W_-w?L?luRd`xdXW&i( zTzc;^Z!_Q%p_Pnrebyj!`6k1(?fu-yxYvx2$U!$tXSLZzqY^$dXI6arsR4JF#iciK zHV(80QY`I8LJfoDz%vw`SnpZlRPsVQ$cKHcOD5bFTPhs0nA;c25mCi%Y#YI?oI%`s z&1K*Y+Fh(db2>V)tJKq;4A}0msFc5K1S9SjsI@dEk5uLWKsOq|WfuNM;nkq)dhs>fh==v|49Jim*Hhi-Qm zqR%F=5Qzm@Oao{!;mWu|FNIYB*ak)DIy@8;kORt1v$3lkZEBP7U%DQqjx*N9LyA>E z*UZ^W3S{X}*r9{Ph>79Zw>_JmiJ~O0`1JC*g3{~JeH*s}_L1!)d=gQUCg+Nl^4q1r zN4P~H&ZK3MCp~-Fok0d#kku1^A-N2jt=p@?r4+JqSFe1}3vk2f?vr^hf%OM08vQ4>vbTh2B zf5oXNOLM1rjhoK?AXG}2m{*@xRef9pP%s}=UIgNYtorzaweypCn>POQ93!RXM<9M< zeNjFxMjUK*QQ_Xy# zziuDrjDlFM}})-dF$!MSP~+(4P_TcpXTS{PXLN; z;(~QiYxh?yL1BudA)2a~iO^T9^wEcnTHZLhOQU@q@x)AwFguC5CI&THY@G6>+F$yk zGEZ*O5Zq~e>Cp=n&aL$`b~(M86j`(?ieMRETGmUjRt1AB=dM?_$X|9-IfQD;-kk3C zUk8jOd#AAI(tJNO|A9yGUkrT>lIf4iq7;29=Wj{J1kS)Hd8GL3UpI-pHffkiO7mus zv=)fq{B(o5B>I2zzi*q@#JKUECf^;|dIGkWO9Fd~NQCFBTY5%B*w_&a8s_2Dxe<1@ z?tzlE*c@Hy-*PMy)U&bRDm)fB!y6v)lc=%IRG31{==YsJq}1thg0OMcUf!AL*Owst(~L6_46SO zhmKt~W@hpI4CYC##b2Jz9PbtzI=wQZR?@Y&W$xq}G=TW%<~IO&BBA+lLwn57+6KET z<97i8zmmF`;fHD$M!H0p+XG*G{id(IQWLQeWR_HQQx^@B1!Z|}A5_F|swva5Qx9`& z%;-unsf1;8bD#wtz(PfD!05Y#%DQbFX<82B8EWChx`(F#o*@cfjmg|N!!bk)Gy)%n zHbmuRwCT&}tOReEP47Hwu=Mx8NRm z@XL;nsF>Nh<4m=N*$GiboVQVYtj}BVE!{94)0Y++rwIB4QOME8W2hiJKmT1s(J0T- zO@YipAk?B}^UABAW4)R@vgEN7V$SwbXZvVB%e5HKPyp zBZW$(Ns156<*K-hEWQaljNYwMi_D~pNMsCwmnXxQBtb92w*&z8e<)?drqw(E8lG*$ zCD*z&9NT~iWT{LHCHGTSUhKp|PfEU9KDKff{a>GLwh3P^cY2;*L<}a^MyJc)muP)^ zQ$;u{y{{~dhfl}{mgPIVp}BTMZL28dVTJ9O(}WFFetXl(LWvv5*txuSHP7-*1h)Mzz_T7wXw~kr#{2r-bfh8d>*pRF{kyI{4R3jjVhqV- zE}U09G7U)C4Ga21&dtn*coM2mm}FjT$Ee7v7As=s^o?--Q<0hKstEEuC6zaLU^5dr zLT;;5VamxE+u5;bew2z_e;%6vCVo^4DZl3;<}Qut!j}MxBahoB@*y-sf;%ziMet1F zl(NU?-jwfKR8I`O^2#S0PgG4t`%HTHUiHKaLOpt7iRvDZSTj}29dkgVGzrlClWX5~ zW~o3gX(Pd$`Dlc$`j0SLJsiT2PVQtKfJ zm>g>(jCNlc6i?cCv#4mh2Fc!}f>Z@fd-+;IKpcdv@8|!0L+e}R5ao7FnHEme^xdQU zBOh7I2$Dmeps@!k;FHszxwmOXM`+Dh78K5)rEU85N&i_UiB5u8kq1cJrzT?lo})S< zcQAyolZQb~Fgu#u;j;f>gMafMOgFXCW=Jjt>Z7*?RoqwX%tH@azI*6}7Df0i+Nq9~ zsr`BbZhFO zHQ2sj_ztkJK{pPAWf(1uH2!m4b=1B$hM&=;Kw34F~AlZfUrb+NE zP7(Beb7SaNcMD>urv#8iX+i~fq0*|1qQp?F+a`l_`YgEMGz;CoypC!m;Z9z>09U>! z5+vE8{%Uh^AxjBEwU|cC;4!>1NxsjK!To?3ZKq+Aucti68Oe~u^gSrEe?YK;gVzS` z0mMc0NxJURwYKU>h@CWWDH0O-*@_AkpFSueeN?jGqitiZNM?6Kfpi4Z|8g^U$W(d# zv&-&mf@V4fUT4xDEw*s(RGPu)!$b7)pDglmdX$6p+{1y&yIh)=jM9vyYxSfPeb5@+ zRl_5J#Q!}R(irjP?nBTDaM@1VVI@t_J~$piY>2pAyob*yNxgLR!RJrMkL8q}FLJk# z?@9SXJ)H)5q&c)vWHVBL21NL7?5CLmCiQ-;r|4db_riK9*r=AC*UO2Du!a4P3P0%!G1snAb9=$8V9J7FPW$2#cP|)}efO#W~5)wOOVdmrQ%_i32NB*KFLC>dF(HXa zRm3LHX;CIoW=;<|POM7DpHwLZ9P8iTwvWouRiFQ89YT!-hfiO21S; zVnfZ_U85&9714sWY8Kq=W8F6{_2Y<$Ua~Muy62(J7V)IO_U<*v?$~QmnsbFeELZFDidLw*(qXkj+a% z=ZgaL2x5#Fm(rEylota0h+<0KNmcX{V{=N~+BJa=CgNzKiBqphWqhrn)#JVg$W)p6 zM6fm9hHu(Jj2k)neJrXlA%}sL*k+787AcS9y#8sy=Zi=7bl{WF#vxeb>e16!XL$u=cXD=~ctu zJoB}bo{w%%Y?QNQ6{1`czS&9w<&-LzXK;i@|3FG|;pijgcZ{a<*;}1%vfLbcjS8>W zi$!hpSxZ@tI5q;uc4TVL%Gevpgj((f z6ZOc!fC)T%J=Pm>2%>Nl%fuB5Vt{zyv&T+#y-uiDB?n0CR1;Mu-pGVxN(piXGRq%J zt2tg%Chz5wHD<97y=bhN2Ahlg&Ltt3N=Tu$sL3om!;g;*xd?L3P07*aWh{Rv+Ecr< zLm=tR9^i%Wmc9Ure@`yt^^48;LEbLHlb|3YHX@^7rt@?{8zHF`)QeFm7L-*>(0IC2 zFp!U}t%?sZEi^B*}L1rxq{#*qE-bmG&1QndyUF)VJ=lfY=D^!x_&LUmaBAb|uSR|lU?ETA_@@OiU>TaxtEpK4h1AjLl$d2lg zPq$N(N-|@{M`kL*ZO$6LMsv)tp0x44TckE(@s1)cmTU>=5cB%U8mHcZ3G;8LK*o{D ze+pYih6j5ze9X@tvL+4CV$>!jNBl|UiouLfn8~kACm)grd8*bK2kpe#ACjBlIM4!Q z6>K4fzk;aDTiLu0#rj6-@aOyCtubK<&Y2Bnb=FZ>khfk!U>w!rzRfd&=By1s11v@W zvFk!Qn>O7zdaD7#4)umY-Xh@&4YY~09c{>sQf*H2@M)Y7s|gyu%TK4i@@fa+@9kzp zu-_7~nP#2Bl^@>*Gk;sfre8Hr-M|}PuO$1=!(f3>X^2@}*m6SXR_J38cU?nw37#d+ z45en6v)@)?PDRiq6<~QDfvL6f?Ax7VJ~R=;oZCf!*GAPIpz;|MRbo;>!hH+l#-Lh5 zxb&0oYhuzhXC>e7T2@Fi6;#HR%a}^Z=(#0(lTqk)+!ITk%ewzc*ZK=WhNB-VE={fv zLE0Lk8T6qumRuzizLx1J2>X<2BdRwT9nrHe!CDco`&qSyQL`X{1M|8PyY-ws&0P?Rg`c+Sv3WEy2lRvORmttJ>R{gGUTN0NEm*ej zm#SDS8;w>Us z=NR+w-vm&vb4>|T!k5T0|CpvVV&vJ8%G3#WzNkFvunLRrE@eQ*cpVl5;aE$&jo0q?= zerJ;_-9(xoYoAt+{d%Cw$9KM7ra>`+OTKK%K})aKWS`$VrW}lRktw z714^FAi-ODSWN-|!nIv;3I`Et{zPliQtKYEoHFehy|0#H8KNm}S=XAP z(}+%1KbxP1lN$>WL8}V5o2mwkv{pGS`uZ2I@%hK!Us#r=39jMzLI@= zYh@jc_fI%zEIJod%~>Is2Flu_+z<0k=nn-O-ryUrtTS+)hNMT&Y*T8$#m3DyD7K9X z0SXTq94G~X@=j->RSTuGW@>MC7$W<>{4yaD5X-4VTsevWUX8!)`(KEK?JqSlm~>`r}un0ofP}SU1631krmb$ zs1~q1H=nk$SD3)L_6_c|ejj?sPH8!Jv=~$w`2P?^>HBYdj^_uGuku9~+1`uf+h$ed z^&fbVN4Ui|C`qF-8VPWv*m2Ti+c}YL0Fi9ZNtSNY_U-K-=-}pu-4f`-N#}7NsdPHV zNGm8X>nw7aW=1uEfa*5wX!{G|;4@`nDGYT1a3$erL9xGfWb{^~7_HHQlfH@ndO%vP z>j#$XpTy!1v9FYMsL>WxM0StN=IgY93PqyHW4*agQksh0c$m7n_U2rOpHRe3;w43W zPcJ3BrEkPL6E6|(UYtYxoWM10*fHM2ZxmBb+y{DvyZ6}g>=QhjOrG3e_$!%xiVX9K zliVTn_l8a}n+*A~$v_|~ZA)If1b3h1yPzDzNalG?2w?~!c!DHF)byJWt6z@6f8pDC ztIOi^m`&o~0N9bOpEAXETs2g6;VpavzHKXOQ#S!LbOkKtKUfm0m|oQvF8f< z5bz`-o@4Lvm48RkH09CI9OAimab;`}Z&o?Ba^ObC@;A^-RJXkznvc>q4F!%K#4c%AJWEhPS~H$#?sX zF(DIVf?-XQE3LBs1a%IXtIWgvhbEAHM1JhibM z0~Sq4fO(>SB7TD6j>$#RYMq=F+SRmg0-(O^geWTuQ3tqgGcp`vAM4usjO$(sHYlpJ zkN+vFAFg+g+4QC*zGjAs??XhJ@?c&`!H{tm>HR&_=x=eXRqe~4-Vw61W&q4Zgxw4N8%UDDkwD(#HFgnM7)pC@Bgm{qPb+8tN|36j!oXWmI4_ey zYQR|@1=m+MPXJv81D2>M9zz;bkkg;n346}6Jjvx0XpAKLy|L3jhMW4JJWSRl2WPx> z`)}}|&gRw7)AzQ05YKN0zGV3qu$zg>V7$L<`lN?m5O|J>mcyfbDk`9;Vfok^Sd&jP z->3X;x9bUD_+XQ~@_BhyQd%kToI^U|&-^BzWh96Y&vygQ5emUE^^TbJkwzsgXqkfh zk)LBQXP+354Q@HT6=i{iEKi*NM^JmhS@CGLmPi6WbBf_VpDM#p*m)1-sT-w1Y9Wq} z>k>;D8Nd)Ac+aj0h~DDZ4YTgUwwL-z*7Yg*^bZ1sb=~g!7m|tEhzQ~cMKmEKal$|A zq$g|W9!a0Ui^X1iRrTQD-$zn7L~co{C|6iLKfYpFRSFWqy0)DM;>G4v@J`4+6%X>{ zV6(MrvXH_JdJj;bRtX>jhxe7deI@pM#)N{fg{nGVGyJmbw??`^h@I=Oq&oP3$%;Lm zK-9T=-gVj3mr8w0N#}%q_fC7X6(wdko$2@sZC}SkA^NnTEkGy$wzW_sb~HxkshqIt zq;D0uBZ1n!`Mx~SC7qZof$v^c2c1@a?SzpbEjN|;cE<%k* zvyseE>;kgPaI1FuMo|JYwBm`*8M4-+#Pj1G*T)vhYbEGugcmE9a7~uy zOKs5=5Z40Y#*Z)TXOHDTtl!s%!E^4|KM9f85o1_6^NIlDa0je)0O8N8I4cR%_|2!8 z_QK%`_3z!p!k?HM#$Oe&Fgz`<{%ZEwx&k##c{Nk%e{xPw4oo6+Du|IQY^K>#We=rt zxobzFUN!KW{1_|rqXTF243eQU+tn}3I`K}I(N;aC=(nKrvFn{UY1PwyYTWxxu8D0D z>OcXW8bKR~2?d@eO+tJnHo||HiiYQsE&RW* zm~UW|^44%2l%D|~0sXl!b3J$mi<9uUDd56!eR7R5>;mPg)U8Ew(#Ir-QKWjh`uyDV za4~Ia0pW9$)igf?tPIehV{X;As^Es=JDBNGQlYVsPq)^U7jT;WUjYD?vLW4mW)Qpx zF)dwzK5EeTvw4NDk@F?}Q3%FDWr(kG@c|10q?ID=%!arl`UvEvaZum_De)1za6cK4 zNurf`G}psA#N97qZ`4+_uUG2(1t1m0M<0y^;2*hmL=cI7n@mN~brwd;)gJoy8S*Oi z7NPajf#soz=J^WeGduQj@#QIso)ca&5Sn3noQY(=67QXe;1MKjGfe%mrYqksf+4{=8-A#@}G z^Fnx@2e2KqzUK5}CH*jHK0+f&Qn5R81*ET{RqHQ7o=$cCtlKM-c_STQl#@K8wI%Nc ze77?3muG4=eb%!^*t*}$H2x#6(RP?Kn34zJaax;~un-b-O+K%GEM+cWmVZF}`dQf; za_2tO&6gX7Xmp#C*rL$Z2c_n(l0%75EWG4~muhBZOwIM{_r{gq?qAKaNh3r1l0dol zR@^IOUkU1LSk`slJK%G^dAZ>Yz(P7RMdI?1S$F9@Lm!)f%KR2JX(w*V_|dUfcNW8RCl z$izmU(z|l74V?i+3B7Zbf!T(4Ow>dT%owi0BsE&O^L@8WaIIS6##Tq=_U3zy@JP#85D1;vRoP4TxDFcQR>+e`wqAaE5PI zimOP}ki1N;T%!b8_Rc8FZ{4y&W8}ofV9)d81-j~Ao{zS8v}r|s;)a0`<`u_J`K`p3 z;*@dQFbrd@jx)7{R@KazBxOW&1cmPU@oG>vVNJxffKTDLJ$K8VJ-2HL`|zre){+zB zz=@{gUidO)@Jcn*e?-VOSjw3$aQ%e z5uTDc?!d9rgiUM4TYhXNUV*K4&`&>8>I<1SpyHlst#h{jd~b5~e)6`PeP@LYIb{oV z`mdM!O>I=*TTwaq{w|WFTBZyyzcD4O#?l7i7epD)fzAj}XNUA*j89f17b-XfqX-ru z&+2;n-gB@>D3oKomec)H2svy_e*P) z{FU$!?6s5(+cW|?%A6dK5D~=nNHWZHNn&3dnDp6Zg~Y)618pneAZcY>(yCsNNe1H1 z?I)1n-hkvA-UQ!B3&EO+(FGm1j~Iuec4iT9VQJaVUv}bRW<|@42in>Mjkptjvb4ch zc!2ZnXx0n=bxLW(wq2O#bh_J47sOH#4w5!_%2$W^NRQZfUqV#~0qpa(1&$x81uICl zGoEnKHXAD`O0)5TjlU|2#TT8L%((ZmhgPLL^-t@Lx> zrqquOB!*vW0U5?2dP))xmSryxFY)+z1LD?xA^2Vkq*9JygvTT@O@2kM_W~#g+yFwA z+~Hk(>d0E&Z`as`Y>*|nxuZSIlb*@$tbqIZx4z9A>H)TsX$R-+{VFYxo+HVp-7Dm5 zuT-10tqA{AuDc6q`&G5U3gWgVTt!K;`}|#5xytKYu}mFByOH%zXgkcm=mx6 zOLkkwq#fY?4F8Uwt383i=b`I16^Kf_k5@mDg^|N$-85H+QQQQ0m_Rs z$?6YXC#d3^wZO*u%yee~V$_Z&lZOlCSyj8DgbT1Dx~&^Jcs|`Pvp9UxE0%K`2|alEbxY^%=}PR2C#qz`&K8y!|I%7pXW-Eu3;)_!JwsQZ*SjYO{$Vf3-1 zluLhW6X$Zac;4{;5Wm2c{qdWdD48b~7h7jTWM~J+zFb5hZ)&!paKgl=-iSKZ_zZQd z6g)^WXa6%C1fEoqb_)}l5xU4qWWZ-+v74dm-V5i>gV`Y8Y1;k(VApIBBJHxtY}qqH zC_q({zg4p)=yc>)>=)VF)E5S@3G8|MK(am;1ZS%G%eFVEHt4JP`zB|oYQK&XLH$PW zG~0&UWwwVc(oIviZ(vDy-nL8NAitV7lP70)DRq^3@hw5e3f$4nYf$pjW@t80UWHNf z9=BOB@q`=qtY@~GzPb65#>D(|wg|aK7*_I5*fJczT+{Tbt%AB|nW};yb$r5PB?L<@ z)O0EKeWqLrGn*j|0iOLCHz<&$ny=*bwA zGWwd^zGw%9xmhRp|1?*DKjGPM{YE<+FM7ZWx7zojccM;9?HNRz*t+Ye8J!}tUAmz# zp?-fhMK`M%W5O{MAJ7EQ?rTe8wnX4_7bdYFkYN%gT=Vs*B^XPQWuIC68RS$(f+`e7 zhYAPT7!md$E}`GE(#;UL#Nr}u%dW?eTnxt5u$=BY!B60HF2@BcEr%A=D#~iUr&uER z-7Y_^Rw|eH)FvXd@a2P!m0xAY6$pw(B1vnGF$l;bqShRaO9=z5YSdyr>tbYjo=?Nf zTdX@Go`2(AwL9vo>c7pWYOePg#`QA17iQtx?~LBx92@I}x7GH7wspm3EU7x?(XET( zlNH9V^Ao+EorVBPdqnDl-c0bN3Ej0DBj>MaPH8XCAX7D3Q?c~@B1`R5g(MI5xAeLp@dc@_3cS^?jN2aIN>>l5YuPaob5 z%Hu=~Uq2aJH%8E(M7Q{Qw9E-=%D!b!O&4qH~I*PNZNDzx(9M@ze=0cvJ!2U<^n>4|3V}8G{7hv1mZzq;`dY<@Z2); zPhunCxL+y+Rbd6BG!Runuv#&AaPewXzS6mkZaW7$@!DPsD>PHA_r{icJo6=M_ z59jf{8Blqrq?2#hBSGhFE`$BiWPjX#T-+=t6gq^8Kl>36`^d7PKOhF|G6V%>MpSd( z8MHIOkG0PjyeO;&=o-49H>`r7a$4050AnZdw=6L^EX{7{dJ2mj%Q8@&(B&U@KxjoQ z0EU(s*Lq+qqEKe3EA3`6VZa6>N+h^#;n`Rx-m;szg|_ZORhyG1Ga&Vlhc1MEPO>7{ z_%F~nKW`&@GsoOi2%$(>)YJ)nA#F%qBL6SuDDvP!MVjzoeSc_MoK^-55Zkd2Y zb%z!TdD8WNfIuUz={|rg zXq~$z7M?)TZdFuIUgPx66;Z1KnUeg=DkUCqUFrwOp$P@z~@a5)PF4CF4I%P_HzIjk*yl}L=B)MOR@y`{c27nR0Gjv z{E{3g1?>?`Jmf*AlXAElu)*7UI~*?IXHBFqN*#M_BcRjgIkQXnfRz8>oE;n~$wt2$bRPq#8g8CgR zSV7uBwN_ zYNz@F%VAZvGJV84<$JEVuf~3;>;F=+EVM?{9)vuMLUgB5%X>y!$-mIzW!X+4B82K6 z)Nf3$Ul6fu@M1w`Z1)Eo9)@|cpazV(&&mqbG)rZOWokQ;d#BsvjBdjm44^%@NYM_Z z1pAgXc7(#?s6V58?S++6zMDmt{GWUlHa(bkJH+&T-qG32N#V_ z+_B$zoiGi)} z)WIQfxZ1y901pN0vll50+!cN0D3k6_;NC)TSCj)85ZS{NB{Qp+E`(K_=W`=beBrRN z$5t6|>vN-Z_{=Z~5oYK+(_jW?g#nrL9YHvp#XD}>j`>Jq{l6Fh+t59L=npi&gP+}> zr23>bz!G^s(oQ#b#G5ZO<8`@r;Z(F!OATbh880jaK9NR8`uNqA##Eg>uO zoFALLbUlfi?cnMED5`3;4fu~lUR&BM4=v*O9XO5oK;^OwZxG+i5}lJjrv4NCLSI6! zyx~!&J|j3IjaF)qSB=pjxAN~{e53>Z*>TISFgkFC*vdK*)Yz$}xO5z@e2FcjD$8cT zu=O9TS-|M@@Y(q|zQ3b)#ANvs^6mK!tRNbB^j?E&sr^9&OI>iZ$p2H6@elmj&h>=& zYhZ5=qAr0Lwszq?Xq>d(gCm$7UK#2SuZ$`)3tSfDJaFq}IG2*3d%45>74j~B@UuC= zWSDC#7USQdMr_<}%|b|hrax6Kkw>VDal{7=Qxf8kEs8$3)~xBnUm5%+M^vSqa1LT&}|&XuPZ z%A9KwW4N0L)SG4MJXDNYEZ6}r@4y#_971NI&UvHx_VoC5>V`SC)X3r6&X`OBRt6i+ zXJF%bMY)KgglRaVE8=CY>s3@*$>XnwIQGP21y4qLj8D+VRC-Ai*8e@7ix30ezStb( zJs+cKqRYLu&t?l3BMi#=vTtdb=E+K`aU5Uf-aWrH1j@Ni%SZcD()?AID^$x{VZ}@d zAM;=cLQ;2gy!3Hm2fVr)ZNv$`jbjD43Az<32cXHjDPWOH&T0B#mI84|L@~G>p=Q`J zE?v&nBn>AIZ~BUP>Fhl27E_J`=2ixR`xWV5W^Qx1ULe5OiImG(iy5XD%+BMd9!sHl zExbAny*f~j4G%$n&8`0-*me!0?KKL!0&vw5K)3)eesPw5Ft;8F zQeG2cHn6laUp#iH1u;REu5AE{$gSG)l5kxC@ys7`(#$Qr({@-oYwRX}o&)v$N>v;AqnY za)gwFYdEVaX*@N1+r}jNtsRQi;j2NvOZafOF6V4CWhN2nSUXZ}=v%@lONbBZYyeqm zn;fa9_nUW*5pI0V<5#;wgkuF0u8M_)&khsgRFi67K&3cX)d`Bnyaw zYozpLTfjSMJKs{bbLPzo1Kg+0k%Qna-0On7Qy@5P*fMW zhxySUsWWmo-9HW!S;ui#+XmOvrO13IAfwvuvTC`<3sah#d5FnP7%DEDJ4Yzc@EM%` zCi9%I;>_d}I5%8V6R@I4RnsAl1wgeN3_&B4*TwwVW5N)nEOlD3=|IQ#>!5rWL#n$E172}HnSdm_xdOO=~sa-O9jD+yOSivGY`}0F_O@QI+}q;cKn)Q<0(T+ zBj1f|C3X9u%y8G_!f#nk^73`-fOyrg&COzQ&L`>RfFLtODvbkMZRZ<1xIhwLeof7i z4~p5x2`qr&Y{1epQW7kU4_-CtO}1q{=lhP>w#g!VqJU z$dfV4g9u9IGOSUe5>i zK{Y)orBoE|k9}GG2+E7<~XMM%zL;AMrUVR)J@sK<|Jjx8!%sHiX zNl}I;Bf62-c_K~-cYo#lJX`i2Lz5jCvBOokIlP?v|4-m<_&xpF9xK4v(5cD+EiIGQ z!Wxkr8?W{V(~DA2h516Ly)di(<`>UE02RPq3A#q6)Qg^uvi3;FDj8Q7FGovC%j+ie z%XC4;8MM>pMz6ayu=mj&&eGx918V#75U6@JRF|=&|9}740096R06+i%A^<=D4*>-t v0ssI2009vJk3awd00{yC0SW>D0{|IRXlZjGX>%ZNW*|msZf9k3ASg8{nSUtM literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Default/Registration/Right_Middle.iso b/apitest/resource/Profile/Default/Registration/Right_Middle.iso new file mode 100644 index 0000000000000000000000000000000000000000..0fa2255975c69cb22b9731def27ef0a69a5a15a7 GIT binary patch literal 63941 zcmY&;Q*ZQHhO+qP}n?$b6;+qP|=wrzLM{b%N3CP`&yXYH!2COKQ^}oq~ z)Bn$bAb@~=O#vhTAQ5LXBUcA!ZbE4z7ezB?LUl7|7b^#QLMD1HMn-z3|3ruYATfIr zDN$|-WnooDre9?MEC3h)1posD1pxi(0#F16B_$RA-|?FW_@CPX-emt1r0n7#LaCm5 zjB#MbUpro=iG@~Kbl>eRsky0xXuYGHm<)K3e8`VVebek$Gyh$7McE|}vv7)qWWCzymOfIR!M{xVpmzTV_KI^^itjW9X;P#g^!YyLdE!gku?6wM zqCxn;$n1mltGUI>&(#C#e|NaizKr8uG68(uDQG5xH4KTTahqI!#RWcM41Xq**w&p1 zYUyf8_iA}-Qo2;s5X`cIxGaiKPqx4qOXWQmLpUx9D4&qMJ!<^5j zH(!(2X+`lqFHVS{iih`nc|y>A(-3K?3O)CHdx;~xiz6jdL0AYtvbV?YWS)RJy>2UR zcu*D+yBKNy4xus<6JpHIN^8NQoFXe=Q=45Jy)Zf@#@~fBFKDhBX%2MHf{0hqd)Z|m1T+a7|u}!z|O7HFm4CGhl6zH1mUKFhtb! zr+f~|u)Zx*ZQ@NXF8FpPrIqsbZ%iQEGJ5riKK?xeHPc&Mvp@NJ%+_>NWo2NQt+7m(xT~L23%g8Bt?Ga?RuojXb3A;*m-T zVadpk7#hAhzZi0Q_Q6pk6geR&SU3(N#eh}RjV#40$-q^^%}PKZ zPtoZU(-u^uWxb3o5O*Q#@@X&)kwhnP#*b_rT$GnmKkZ?M8K+WcX?%rUY8{Y(Rs-RW zU}f7h9HKr?=-%IKBi9u_M^NE;2GQ~0z#x8ODo|OUWJijyH)e&YRzMLh4u0PIFaUXC zh3&b6B+K`>fOvlut^@Tn_T!m?IOg(14_YJTQ;>$Mw0qYQc2=4;6cOS5sD9;|w|`@? zo0W}P0Az&lBUXxP?q^TYac6jqpgMtzCdNB;OTF8Y*oPQkWR}sdj-=ft=@vkphOLsf zh?%5uHpKI5X#Td6K8*j%U(P+BWhUp)Hd16P>AGF^F3=-ly%Q1}{X zDVUC3kxDKSnSd)7YqA9ACnw1~jphXUP_CT%0u8R*r-K6Zbau#s6aTH)M6id5H4T#a z4&|qVT3nTwz;2k^Hv?;hM6hTo+Ni^fFub~Pt}9G7jWpj

E1yj&kW}CwAf3F)x#; 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 saqvY3ag{Es%s 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 TX>%ZNW*|msZf9k3ASg5`VY+$~ literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Default/Registration/Right_Thumb.iso b/apitest/resource/Profile/Default/Registration/Right_Thumb.iso new file mode 100644 index 0000000000000000000000000000000000000000..0931ac4fd431b37f9a36f08bf7d7b241518952e9 GIT binary patch literal 134092 zcmZU&V~{RP4=wtPZQHi?7<+8nw#_}ZZQHhO+qUhQ`+n!#AGhkJlU_+>b*l2CtGgz{$8UslF>%q~)z}e1`i%`T-kcpm?k&&M1KN2DUNW|7i zLYPZTQBawY=~oc|3jhW{0l+{(0YJan02BcMadG+oul~jX{?{!qw9USIIbfaQh(|X;5($%bOMB&$V!u?Z^AXCc;Uzcgy*Po>YzRL z3vEtdRn+`8^nn@q3-y}tWqlTfXN^gSJ^T;?{QU0rei}Qz90LA~~+Q?wTJ1ULvFY`?$-R5pVxlU8LPSTsW# zFn)$h>Dpll>}HS#vhvDR@`kd*WYnf&kxzu^KH%oeyMELm5GdkT`eO3sZ>n_XPr3UG zB3YjidU)(qHgB}y8>!n+{6;ln>R2M6^f*m?K46W{=fmJ)$BLJeMMY;sv&me7ub)%@ zrA=B?CA?B_$TW6W;YouZ236Ll!~sgunI*SIOM`W!g{-qF3!ld}UizpVj#l#oJ4EiI z71Y?#LmAUEpy~;0J0$2gCVc&j&yXFJE@GwpuQbD1Sc_<_5C#P8$L{yY%%6r#QY{O) z3`I)*E)wyzCg42pZCC{7RYhxTDUBbfr=d$i;Cv=R89C1HuFM)a8y0#6oP`*u9T>rd z>Qa6DNxsG6S6v?#0Sw@WTOo9DNmU&3BsZV`jeLIWc>FT1jmm$_@C*Ec6YCOnQKhVT zT!?`SJ!%7()DASZ1U#Cgo7#yQlglD1eCFHw%kwd{|Dm`JIIhO=s_`FwzlYR~&&;yV zxefT4zx~o_#*^wbfU@sM0OuZf_cSCxJk#gGzD>t49*Ge_?&TWraTAcY*21UO%j=#! zU0Ly_ovK%=!zf1uFQ~~p1_N>uFg_O&ue~K5B8ca3B^ud#euhfh&j{e()&)u(D->gy z%4s(r_@t%UP;)+75*n{C4w`-(s|Ohm1l^rGg;)!jzUd_ymOHaSLgay~L?x37Kn)S= zsbR{1h%GU0GSxs&hMG$1&p9pv#B39%&2%WzU0eD%Yk?>3NV0!E^_KLq`0*F5xm4V7 z164WJr#ceaI@swD0p$K&fmFzBvk_se1T*77()Hgab5)1J2nzVktY6?2Cfe{#0$Z-a za;%uc4 z&s++_6Do|DjqgPe+)8xEp`~%Zp&8)}Wj{To9L4D_Ay;_x6LcwnnSq{S{6=XIc1=C% z6sfI~;X98^?mGiV1|mVrM%n%e+O`f3zP9ZDhL!xe^a98xM3FJBr5g(bJ=l|6^4hNhA7eLu(G;@F7gcu$_vj#uIC{NaM<@sB z;M4eefsj%*F(LxOz3j0|ZsH^Vd7jw!Z}1B2b|(ep>G@-+h5fm=k!;<*I-Kwxim zs*aWY?uZnwh%PI%hZB@Ve|7&&Is>~(sc1u*4rY>m$ui{N0EJ+L79t+tCuT|P26k?K z@)tGBRG;qCe6*)nW|)KK87n15{TqkceUwg0Eim3U;NJ+A_ciw!4am|Gx6GW2ff0@zFQ2 z*y34VYcbK5KQ8sJ2Pmj=yNF-N+#-Vf0XvR~-W?&iWzPsBdxYHOaY4#}VL*O!B+a8B+ z1cOZC_8dg~j)`JQ9fTPV14S0A8_S8zbn(xb6{WWU<%YVH5)pPMwXEUVHK>S{FBU1f z$v{}z`JTD}Ijt-q8Pa+CAZK1_7CKr&Z0-c+p)h>OLlf?jWo^TAiIc=IO{lZ`;+$NP zzR`|=OlIZ}A}WI_-rvu({){(Fu~D)@u*rx_!UTy@I=~%a92rM|WAQS5w|ZjOnvVj7 z<1tQAqdgFJVP7F!rGhSEC{Zbu26^s4wbm+Nx8lV-wYY89I6l$N~&a$|VAQ%IDFRwU- z)nC`UEErESSxOnp6+nNJNenE@720)XjPtMK7QEsx7nZd*Q7ISM!oKlc5yfmn^Scls zM>w%+Z)4k#eBLcxgHsf)A`@-b>kE zK%Ng3Ltimx0vZJw69^BKv8L_Iq3gxTG5>`ZSf-e#Btg={&?UFSgQr{Ph$!mU2?z(n zN>_cW#<`Y;5c|ca2tI#cXVkKWY$KWULWX##*fh#GmeozxuW1JTHb(uj=pLmMJTC}c z&nOJ#+~lNjk|iLlC|m;%e+-ALS<`#53e?z18bz7RBNVa979H%3+TMRsw9yV)XP%Y2?xTn)RJ8 zS0WsgPK^nF+%6Q(R5eg-FV+DusW4_u>?b-Olj0Lzx-9QZGLIQb`Lf&@)bt5{R*RmVqY3G#7fr^3Mr+-Wx?6Ep`NKhKRta6;g_-!B^lv2R-40U2*k!)?H8~ zG!FC#gj%@WIsC91+e^sYWg#WUPy_NiiZd`y3grm?_L40a%D{FhG^^u&)KV#J)tU2= z>HW2VI!abLK3z0VphSuKXH!MYHDTOx*)c0Q7{ zK`<1|eN92UP|i##Q!vEbcwsMv@!M1xaOen2=3`R>qL64!m*gKWf@%$ktlU$zSf=n$YgC zB3fSf8i|iL-a4CEhets6Ydi0KDx(BKFnM`}D9~pstP4TUy&UGVObB78{YwZkua9Bf z$RueT?&65AnxyrdeA6*6!xo@==fGaJpOmIu6ntkujOw`NN`EdB2Nrn!k>EaxQ&EoR zud~WU?GpsavHbZNfhndLz-tb2|1_#o@uswr9pGsO1|4&r}RiOYD*ANv1yWywk-m2~UJoJp#&}o9R)Pa80Uw z(a>i)j?jN@6Z#mBB_d|vTi03i>uDXZ@4oXKe~lyIJC|@yMRM~k@^N^oOddDB_bPuH zx|g;!4Ex0C{y8a7xXH67a1-j+x47rTf084k2>{%(D1O28!Q~ov@$tKUv2P3?(hm9S zuQD@YCERw0o8_%LkZf>gK1>Q6Ce$9|b>`4$(pdnT7?~X?k;|uyM-}Z~x zzira}Dn-)s!ngT}EqXu_Mt^31GpAJXfpuTP+zqrlvhLy`$IQla zGUjU-fwbydtI0V0#4(((9`O(ZA8=OYqAawl&T-h59%v*3C36#*w&FwR zQs?`e&=5booS@z5ghZ8VZ90#J#3`-<@lfG|j!}Q9EO6!0SGs6;y=P=Sj*HFd`*InVtI=RRfg%%GvETTaUulN833jg#k^_B*GKG-sNupaduzKL2-E* zSJFgkEk7*hw9E7N00Zfn@?-Rgv&Da}kJdBx2Y$yp+7#@qL0~BYqS-8e&7k_D<3^*7 z9aVPXZi+=SXo^eCF-V`Cd~+(pf5w}2bvHrsalmZNB}_xS%ND-|LSwmK5j{#q z7CQ-CjBNn7HN4l)z|2O_;vp66^P#HW^ej64rb{gF2x30| zq#;XuX2C>l@C)_B+MV_#xOO(_v~wYN3Yr}+Ox3z6_SP59j`?&a9f-YIs3%GPNtYN|SkFObk0FjN+tm$SXYANq>V|CgZGv5ptM(uy#F z5Ly>##0l^?k>yEbk{^ra{0ZSXFzF-sYViF|Bv%TH&?u^+6V$$#MpjA6;dD%#(dL*l zsKQVtN79=@SKt_LN*WwQIw0lI6vACxo!BO;^1{^F0sHOpF9j-?={s-^bXZ6M?9607 zl_FBbUYeHhXNM}`U7Q|jt2j|<_m?;>IL_L_IQ-@8BBL4uZg2lGpbR+60p(4JuqTgn zs5OWig>449%@FA_T*OWCmDvLH)=7tnszJKaR%y0wi+Go=Z;8St;BR9c|N1d^>SZ;4DYs zSoi+Jp9D6;bY`k0(qut{#g9mVm4V~fwlG4#z|79j8rBOiTn~ga~;eady-{z;7I*}73mIz`I${oaC3aJr-X}dBn zNfgqSBHWKlNYBzK@#nTczJ!#fm1%$LnKg5&A=6^YhW}w7=`>n?v2L5eg@bQjl^&&s)Z{qDh>}9IN z2ds|K!hT2YYL)m}0#3SlW>2^Ng2HH~Of%F18Fe482RJxrFZFZWl9Ky1TA$)$X7Ix?GMB+Hi3BIyU6Nx@B29RS*nrr>ssD}5qfST5iyZRDG{e4tipln zDnG7>)40SWk9*$~s>VFo1%05C#9Fez-4l;-$by5{I3*hhh5Xur(a%;qx!k9G+c3dY zDadsLaW>)jtX#p!mCR2sG%U=OTLVDzTo z5QJXLtD_QeL%z~Tdpq3@5xADmkV|~O!qATQ@(H`9A1GofIz(+^E z4oHM(ZC$JD=tML&bZ>xes#1&imML>vTqM5!;EsGqaLk=dc&KK%o6H{J`&PLtG% zLY;VX0gYx1QIWmK1%V%!S*r;pu^OYJ6!T5b_S81I_Pv#|!DvfC_Y;E<=gHZ5OKmI_0v>?Pkwo%KY&~d3Mve^<;`vxbxbX*dM?p zx7%9UmK<`*9MEc8^DJx&Q+V1m?MK87tF=#FC-aI>Cu4a8uZ&GxiYm3uz^=zaiFHWFQ}0LH`w`=^i=bAVreD;={b zUK|!8jVFvA3KsJSyK@x0AnbLWPv!lQ0H|tTM6~^A!QSDc$VDpOjBs%aX|iBF1m7;l z6qYO&tf+LVZP+YdqUUZhS*@g4#& zx6r~nNr{SR3tIz9*al`VKDB6hkh}DiX6vD?82al^4yxWj{)J@X56>am;%eKi0J(^Z zlCh`P_L3trRIpr3S!TF^E4zRtXt^?`ED@)HYx2rFjfgJV`?2iKYUapRA>gN_U`3QL z1+GJi8UmQu4;Y21_flaP*Y7>x@LGR^XL4&Dun7Aw*_E{(fLB88j^ED5ZWPg-gef=Vv z89P|vz)|}g>g3}hPLSJ)4jL4KUYu9%pur(H6$Gs<&}O3;cQr5-U3E04@ImoUnM_!RE2TuB5Cf-ec2gsxEn zDjYGz`DBy--WZQ#8jQ7fTvZtyc=ph_T>tF>9jDx~X&G@ZJD;7Zi$_CTeHBDhpo{8Y zOLU|5w{c>EyUky18$}K6sHAxQV=~1A7OY-Uh!WWie%r9D4$83nE3lkRraNsyfruuK z!Opx~6~C{Pr%v<3^LsGpBak@hDT;4fWAch2aAaT~9$NVr$t7URSeu6ZQ}B+pDX$?K zH2-zfWpD)%3!=+Xa$SPnJ;Q9#9bHhx8Digsp+bxa)w?+)mk2VHpq<Gop%kCds zqrn6C^G!%_=`$>oeNxnatfw_!1fVCX*7G;56S}UEoy8HFn8;c8+ej&L2~l4OERsk! zIgVeGt~>A#C!N&=hf-!Brk_tKEaM zsjk{E{YBCKHW4*|H@uwJbaFiB8k{f%HWyAps@I<~&T7BuFD6tqGFN0@5rXE197oK4 zm^W?u_G&1M55LfV;{1qxElC!7Wzj2$Ol+K+hqU_B-LXJbF{!5rpEgd)l%RuQVck9cHdUU+qy*bw_wX@viyczD#LR7kC$%HL;ZP?Gf50S<`u=A$D!EH0DM6R_c>v zY*5Zu`+q;uBbnNrIDal+#U#R!-tT-PWFxn z1j)qNmWC83d%X}ygk|@q*zsS)+^s6YGtThI+mH2o8a3h$3(?SUfC!}?sBNhA!tia- zVEv#9%>cv!q*bVLi)wD&)V<-iapSmKKG#F=Pn&cYFrOBOd0srGlqn0sqX?4eciC z=bpza2t+6o zIn4QiE|eN4CK8ucoZqq@;5sLWrTF*LdttZQ z@FzGjv+TyluS@bhKc%sWR2sz0;3Q;_Qv9lg7SA(5Jn4XZpOMt~8uK5Ho7F}{Zzlo& zBnkGEB=MN$<%I=dRhDi!-cSojg5G;0>A=N9*2~h3egwTXYsu4ehxQW;Lm)AEFmsPDmYiwZ)BS(?8Mlt24)BSZ!UL8|}K=fugr zDThRZY6vR-^x_N;nO?P5C|R>n?2&^+XqOnJf| zb@(CRlQr(KKmY@U**)tth^HtuTRM_BEqdS@gY-4(CATagC@rHT71}x>y_-gqA-SZUKFkH)tKC_6agyDN7Z61~l?^ z5S{;kDP?ehgX?4dcdNNBuV>uf=ilubPpm~#Ol3=BM4>ZhEav|?D&i=d%$)3@<ax4R8Q^e0w??s^yLS!C02c{( zS$KXF2JGn0E@K!jJ~vMfPJ(>)3Utfki6n z15Oik?&lNVH3`Z*`D^=-G10J0o_Bu;30Z2VHgj$1gQ ztNEV1K`kV&T0tDrk>W}aS5eFljV}oYMumq%<9?j@^36xhO=5-v25u~YQ1pPkY6kUGKybqK&n)Wo&^71JGS+RLgKC=5}O_=MX`w?p8=o806Tw11-(sxQ~Q zu{^?%wVcb407qZ@Qf0ihcr3O&K_j;^z~3&WRxN}uJ90V74UA@T8ADFo7su?_9cj;h z%(%8WOJiR_43Jend1BQ3gTI+MIs)Vx-s(j8b)~w;!mTubg9|%u**=ahD(V^yi&69g z_zo^$GCc71DYG*MM;yF$X&kPhIxRicNJQ?$1je=+7%^8>gCtEFG564mD)J~mkoR~n zvyE1*H3OLnJ|4Gqgx}fxTYK%i$c{+&X@k+gxBQEq>fW0Cp7ya)z0y@2M=8dX0(80E0>v;xhR;9|EWDbvQ?Y;P^ z`P;N1lJ1kpcg0*+&G6R_M{+k26E}F}+N$x2ZhcAjATn7!@mu8#kdSbtzKZ^-?QA{~ zofzR|-ROsb8c%uxf@Y6r;@4Z|v5NP1MI0r60x&Bwx2FQtCRJawFMPKs41@N_CA!RC zSkMWHA00Jawv#tXxCe?XgHG8r1>SMiH6rJzXsHtA1q=_``=8Vur#M&vCyS5>}H!$pQD zi{u}AaDnoI!6WR!7q)V?3LBC=!|#w;Bct7SoHx&3AJ-&B4$!P@xF!oaW-v+ZP~~G3 zmAapg(~C}xxQ-*Rl>pU9vC@=Yda+o3QAuWmzf^^b6(E%6U$jG4&;YFtr^a8@utsHa z$tvn-Y`qJ=&zcnc-wvAeYy zN#u5o1KldD>ll0P1ZhkO8%-5hz@!GdgjpzV9`Udq-$R9*WY2<@mDrWPg9v?Ws~W6A z&}fCAXo2o-jSL9?1tPg26S2xVyeU5j#F&gn7~WXLYhtKb-&bH6*Qv z^)%0_Mwk+_O=va6a$ zR(78&H-E86;To!>X(ixE7#6Z4WISKLkr34Kn3c>#93%I_+fpiJyK*T#hb8F5Wt9v5 z*7#xOS&x9RJP0P*kPV>?35R}?qru5wqBQY6uU%1@PH7L_H>Mr<;yME<01GK>mkyCJ) z!al(n2XqvfSu3-iv0bhD(Vs#_NAA2DNj2-2oT;}7Ph#|%IDKe z0+n31uaaU%e*f*>^u-rg6<6fwxtKuH|nB+QqGkWrB1M zhWcQ%>p>5Mu}!jM-(CtUFc#(~9>+Q@4(xa8r}BR@BzMnbSQ0VPBm-LEh^i&#rf{A0 z$++E=0h=s0!7W7@jZJH@R&H_j|Auc?{XJ^BYyH1WYAQ!E!`q4SmSfOy*HN@HE!w3# zBhatxaJu#T?yLw%iaVdp!qE3fGM(8KMI~=lu{Q|6&}}W9p#5;|WGwJ3!x*D{^QFYz zkG7B@-=c4Edg8B4$k`LNq2x$s>>g<&$94~rZ&!_ErQ#Eh7zc^|Is(^USt!=B-pGF% zg1fiqE3?fx3rr|xBmA1m6!#MP&hjrZa__TQ#opPqd&PI z2CI3HnRFWmt-ELdueQph{eKMk&ph^1`KH7DoyFz<;eWZRl!O$dBuOOWF~1}gew zATFEAgPkSOD!DmgkTR~dm@#7MXLa0n2OdCSkSnE7Wy1ZA^Np#aK&^um#KQv9TtKNE z2BA<5DDn8fEG;M65kl9^?(VaIIDc$)ej-77-QIj9f_ulW>B|n(0S|%uwL{)CZZ2R? z6)poNzSIqlGV6p>#lp9ID*zOO+Idy~33_neP)jx9JNZdTPo}wu72nI~U=P+(<7vt* zq!+(DP$sQ@5r%WlR6}j-&?UD-e6JgDAf_a==U21b_lq8q_%refAv>`+{@RZ>DgJx`{ESXd!QqD5W1*RRyNa zp)OS^Xm1|l{v}n``bCW?0lX~V@Qy9&J1+P33`COXC=%R{rbfsPmZyZplT8-8)_ zvE1n-o;N6pkQoH@@gYhGeEFdOt)1$RN?nxjh5G=uO;f@4GkE(@_&6o#?@RLTfO@FD zsPx}Z>4uJ(Mk_)0J>Xl(*r86K8hJfVPf{Wl9oaMdTNbM;!rt=vEi9>ZwIk>qyzStW zBLz;%jz#;X_^3!s`C33DpN}Sm9Uw{{ylPO8!Q5OKoXrk!W@=uuZFq91n`aiBID;~3tGqS! z0pGzq^pnj{vyD{os)Cv!$|0KUe@yGzx=Q$>a{C@wFljrK?_si^6yZ$FX zz`&XPN}Q{IHwlp9sEXq)6O%fQQ2kF5p~o3Cd7Uh?RM&|l5_CFh`XHaD-W?{tuG ztL-whBYVt4$X2xA0&no2=0t}2g+qP9MB$$};okk84{_mY3hbnj>4leBk=+tcYu{``++xRZkIjx}C{h zh!e!NAOvW+V>hN(Jg3-3X#6%WVDW25eY}g9G?L>}TCGw|N%x(fP6WA*5 z&=7LUc?rg-w5?r6HlIqfF3Y&alKR zFz@aI`1QynJuxixfFo+`WOn1}f>-J=F^{^-V%@#seqH3-u1-t|x{m2LF&x!5>LAtA z2NYx1J(BjlJkfYKG{YE1|7odyM}@F?LJY8bYool2!(aVs*t8Ouc$Gioa@ZRw;B(W6 zca~C_m=HB#)Djq(biHW*qd=hN^p*oM!5-9-jAw96$ZSs^_7@MXRuy8Nq~cjZ(syEc z5POSvS`(eeCTFDb@J05bN>3igv=c5uXi^n+YtAVg_K+3e(r=AC_N|jOc!#n7d!lMg zv$l59Oevq)(m@BEbbBEv>TfFi2A z2W@*H1v`%>jcWF@7`d`}LCMH7Nr&3xAGF{3MlvaSSN54#5K`s#wn)A=xa)kP1GH3J zhK^zOH5pL@Q+opx;`BiAHkrQ1n~|3EFaAdG9a(v>2)^Lv4_PS?6PFPye!9vQdzg`Z zeKt$wO|p+4!9bLb1gSj4Lxx1xUEBm9a5sVHpUy0YG1dk{@=!4gF8)m?m~j<5b{vJl zbzpUji9=w4IA!tdtKr|HD9MzhPYC};YU}HefXjChM>@{Edw(b+D5nS>Uy>o(?`L2K zsY7+s@m|#Gh8weqcRO~jGDG5{Qql_NcQpbDEIkVuXaA7JC1n>!0B(Fsk?mFo%nPlkebL;3RRE&F(N5t#YLm6EpGl&rjXOiXj+ zXhglLZbPCJlR}jiM%DwXCCa(pyX92vh;(X1qM zx0`E;#jn~pKAgTZm}@xSxCwvfjUMHl5c^+|FUr*##?*5nTpoe#&I_4^qscLlwn+N+W zr+W(0wm^CAD$w}Sj!Ir6BFkOY(->&X(~ND-SIyGHPDP4y*f&c4H#4V?Ry{t9Tz_RS zgp^+O&}uvM_f?-}(j_3$J*GKAD5?JQk0da&)Ov54bEw z{VO4ZkbLMA;=L+yqY}2z8&35Vh4M%-v#!OHiE8QNqEx^Fr1{dffJ3@l;rz-gy+DdN z|L*Bo4pB!`m1`hxd6VwXXbv~D`6Ohmn4zC?Re38a)rfPHN2Ktub&9=K;+YDX#;VU> zhvNPT7|vyiPm|fAFu`6*@Bmp45g;x_prsup4^ZgVZwcdoYq_G&U&h%f3FdRUy3Oq$ zNg=7ul9=#~H=`h5*)U+)GZuz`E=wqg6Uzj%bjwuQs9!J{%|&Qy;$b1eqGPTH2W(^J zIXkXU!Qnz3pTF)dS+jvgbU<0zh-q97=dH5DYTVkY7ER~Oq}nI@io2lK{;726Pb8p0 z5L~R`ejF(tIoq>_rJ3*O5!!%D0!@aa+XdZQxKyzjkV_;@0eWNvN#-wx0X%AS5-1u# z=6Au6PDy-AP{+2%v53bgX9cVsbf5ZDGG78R%0}0n!zHj#g}jNf*$fxg9n@#i=J+Sd zql(!*#M=vVlu$-S>Mxv^!W!)wGw1ozh_SUacIn+{UL`J2Lox}BeXOdtOj&sdmQ{(k zzBTB{GL!JfN+ll>e>o9{I?Tb9v$ez9K;<Ma4`C)lS^-~tHs)i3 zYFeYD47dJQ*uZCZ8hG%%rNv*+{LNbXy~aJ<}0)^anY-Sf#Xlj@_aoxpRYp3n{foJ_cXtXwB8z` zoaXh!@@|mHOk271E)=4+9sU^L=?M`n9oAK9ui1a3!EgxNK; z6j2xg5l+)7p1T<6> z@-Tg}C_nazI6+k@P_lvqvlhw_VGDN=){f;tio9K%xq>RD@50JRe@DO>7&Iw+XM?2c z7*1Fh&WVnGW$SR>=|yb9Jmhbr=Z6uKRDE_jqERzdfHZB4?y;P*`7&@Wb4n{97xi>d zMJg})z%Ip<3-^aD|L~kxjhJ_t^*6H~43umG zYsU~Gr1e3L3e24Eu}71is96YoGPAS$nC+1>cXJY>v^4=IM$uRf_#_Spr(3tJFE&+z zFF00oBy?7t?meTQ`nK-?DrcCws6iEaVH<*rWW<3PYq!uf>2X$sl_ zJP)a~ALc$Y)x>oceYdopE}Kb9?8&CPk1|u9`6s_T9WI*&!se9+B^VWECWM(MI5aCJ z%M_vMT7^%IHB~Kp$rmew;gY1?O)kL2NRyomtL`w;xQ~KBMrN}A;N1UR_NIba>Z??; zj7S{F`|sWJ>iNri^fc>@Z)yXzFI8b6i8ErfD%OW?Kk5VO&2Ws5Q67h(cz9{KU-0DU zbEy4F+p~Q!3B07;uQFEb{%&wIy=`S^2}*}QQInCLruR-~8|`4i0}Y{-yNf5bbK1|l z$~=$S8wZ({7Rh;__Vg6Owa|-kIIL9^COHi}B%6ZTChRZ+JjDr|%aS~mmyZ4GCn7T3`GcD5g}0@Qwoaa-&A@(@2Oab?YbM z7vM(NUj38bQX4a87cu!q3zQ!+4RQ&mPMIbfpuGaZC`_R%8=~pdn4%3rh%X^xadH~& zKPhsLf3>Pn4SXZ*CdFyhd#Fbn2Wvm7%Y&jhn=Kt;Ud3CVx~=Osx6op;IFLNE2sey@ z5IB|&AYxl5Bdhpn@-A~!Q^6$bLGg(14YvRD(&01B0yQm9P&rk6C6=ENWz#Ghq>LB#vaS*<}aFgh# zY5ScCXQe&yUFD$?AY@G-;{z+j4cu!;n@Ru_g69Nh`AD*^aj=0ZpmBz&l-GKgi)kwI z{qS|alB7krtoVKfRw7gH*Jd`EV$9XPHG*zDAy6tbR8&tU-OTi;UXwd;Y~12jY+8&w zJVmUE$D3g!k7)J;9k9-mFU16U*lfX~=U%^8FSj3i)1pMRnjlEM;s>8{r|2`lh{z*) zyu6~cNVs2K3Nn>)ZQD^l>d8E6(f8lzMQ0e$D-PM7$4z9l8VlWx{&oOzsInYs3KSEXz8o~;lXjsLu;fB>R>G@V|F2MU}b324L* z(zN?>UL$TqG>-leN#5?D;**h$*+ld-vZ-cjWm5(krdJPUWVqlLN0k|;&(D*4tP-5{ z4_IO?4!dYD%m5Te{dmaQ%d%UYKz2J-ECKDj!oB=ChlJ-vvE1Snw8ySVAZs~w{$)AJ z&Yx8bX!HqfOZ40y_VnlAx-mtSUrDE&JcPE>R>T?7r9bdE!#me#X$fIBvRFX9n+zk5 zxO;>jfj3Llej!74X8*qA1q^si1c9XGbp$`{T|-OVQ1Rsh6|C{0iY-8f4GO1A}}~ zZ$on*J@U{zIOV5}+o!xc#4URB6#~Jpqa7Bkd+;QKoKuRr{ZED99BD0L_N?MbKdUIr zTuN6lE>5++B5|ITVh!<1}SiWqTmk>6Hogw8KlkYr%a83+Q5+bCEy{|EgVGF8&NQq`lz#kK10s+x%m9WMMKC%o+#@9Po4;SaBQlO^`r(YK$EFVE z$x0!UUbhu{v_`#4n=oey8`cS;I{Hu#1PYXoUQN58kbI~MfsGWhP*{!e(M+@=E|D%T z1mgK7|4U`p)=deL>R!w1e+m*EF60FHWw4snLV0|8*)WAd!=-OoA>-;E z`J;VVuBwFSV~el#JUl(#(Jq+&Aq&Buha;eE{2NLJK7m&s-aHalQ7$QM_-=CD(wjz| zD05#d3-umb*!&%N`7srHN!xoR^{c8>yLS6;5|^)=>))p6&uZ?=^-0e!_1w{p1gF8= zR~VSlh5t9RYvRl18vR-LgySTI_kMQG?kFRjq~Q-Cx^ff_t}0lw(H*?GTDPj4M_Qgf zb_ofPoB^cm`IQTHoenc^NLf0bT!jvbN{W~ae%71p_Y|y*Mi`WGis$XElcbz{pw5YW z2BZ&uN)%d3U>aA7mUasMEd8>WjKwBJML6s%pX*(9+IMsTF||y(n5!B z7f>nsOdY?TTWsJUJ)OxLA-rU$lE{pQ!hFKbbl44(tiwsv{aJ8E2%$y=c$1l_sZw!( zcY43y7GJ7%t|>#-i`Rp=iuet}HuERr+F}c;DDI=!g@v4@^+l09#GHiMPTQ;w2`rUT5P!ch(1*gD?m5z5{eUH!tWZ;e_sfwJG5xDzXs-Itzk%Jd zuA#H~JaZsx$DVNd85EVpoulw30xQ55M=1otwFe>U1k2%e7y zM(~#w_7pkNt>JE5T8lya?_3fp8BU#JiPB@Z%`j?CQk$X#Ks1NOvd+jKpyw+=%gQ8a z|7bxZq6rj_D8Y02Hh9^O?lhBhlh9D@ZpcClg@}`MB+gHF_nD(#(AEOkHodfQQPtUC zTA*WM2jKR81E82E-f#R>{KD}Lz=b+1$Wk_ekvC%-<0;j7P7T`+5LQR{fN`rdj$fGq zL5oayYuSA@-70+X=-c)v*PQ1TQoHk?5wo$k+kuOLK*#MPAOk~5@!Ivs3cLoveUE;#g+jT zmg2^4hr}N2`0k?|9bv*R@V2ZT3ODMs1e--GYEO1b;!~hIdWADEs^o;^Rdhj4R69vmEmeTE)c;t375g(Fm_FcsgB@hiabuf^@ZN?5~JrhKJQ)LsslL!<=f;*q0tOt?QaQa` z%FdXdi2n}&F+k40#~D&*I8Zpp!dXp7A9beYonD+5nsv2DiEN|=QLwGem)lho=<&zm z`qvL#$!5jyS)M~cwD6>Jh@8C#Ps8erVlW8(onfy`WW}kcFWYpcOcEJfos~preONLA z=EfNe5pDgmfCpDq-%qxUi-~LRb%_1);;Vw(I&`q-c-tBIIHcx7wlNesUqzZ#&6I5C zNyW1HEtc%YAhi3zg>&74!%>71Lc0|fK{Z=Ha+lP1*S{W;|?=%x8%2VZQq) zzjJP-vQW!>NB0F;D++)<+hfpzHahpw?W#FfeO06(sqyq#J){9)GiTm~@-=m*q&rqC z{wwU7BMhVcO>b$R0YEnVl

$E+h`gp|q=BKGN72Nk9?$`^Hh|f#tYA>P2jnW=NPAI= z#PphV6l-j2Y!&hW4?oj^hnvUpDz44S?`Eu-p9v(8krT4n>3xT2rjO9?5B<`qbZ2IheAl|&Bjs6$cs;x8cBXoWkN8>Xu-aq6f1o+IonHo3tq^jN zI+28=;e@5Gd7$6p5ZgIJD-tm`xTo%vj4`(7ru&@7ucUs~OV)o|eQa}nhVjVM4IQxt z!y)*IYU!8*;17J_|7dqRT?jvR075gW-EJT(5H|M7*3C2~W)j$grLwWD=X~Rajhe#~ z1pGS~L~SEoNIy-$Vd)Pl+tZK|B&k!93Uyg$nYo8?yd@G;>X5yzOAH>^z324Z4wNoe zZht(6GcJ2?JG@wM{muV+oIMfpF$yhYweM-57C?4_!$e!BHa^x|*$cg^R3&27=(vWr z$x*5QD=%|8IKhA;8vt z);`S3{=jyp&ywyfdMPBxy|B015jOav+2gE{7X z*1LKGckBcmkMP%pJtGcA>~vGtu7dEC7+qWzLdGkP!5DUo<_Nf_th~Xe)(pW$3qKKr zB}G}{4;1guP4A;$toTf=``VyPsol`k@SMF2AUBQVd_hG<$7h1mwO9>@nYR7nl6|n| z#XxwN{`K5y%V96%JvW*+1j0voSvU-69y{7ihxBlsQ%^CC|5rpeot&i^vy1IB4?|dd z10e0Dtm*r3in4e5cB^EtW+O)}1vuo_O&=KB$!L_`nfY-6S$!sJiLw3E{v43`Y{lUn zU$aoCA=??`9JJyp{RwGAm9ys@H$!bBZ^^1sM$cY(4Jr#qJqK^3*(u=@fYsg{>IEUY;HoF z=9ZypRo-aFTWPY2fmebrnN?qynXFM~`UKDQNlBgKf6pLtrz=k|x!?9Ze#$IfveBfX zBkiblMWHC|bCX|xibiaZ4IKFWj3=7i(10UJt@A6`v%eJG&?d?@fobdEHiDtRP()|? z$cDdqtf|wxcKU}TP8s<8%YU;!+PL0yiG^{kP+0cxiakE@SnPWAO`b=!lv%ODS5PV^!2 zoGbo62pUEW0`HpkNlW6NnXXnb6~F@pm&fv;ljW{oOVnt03K1%n(OMp)E$tqVS3Ytu z-(YkH9FGZQc_{4M6>jartF?P#qM5HI&H9&y#Jm^$^w=}k@2O(tW!n8#SX%GOkCC-7@ z{OaB~eA)RbG}-6Fq$eCTH6?Q7u~}*4eY87X!x;>zT{Pl%tDX;YC;%7YtbJIsy*gE^ z5Z<1WBRLwGZIWHS+rvipFYg;|m8#J2SAk0MZrcP0Y?FTRK8Z@x59Qm=%>QDKG?+cU zaw+r#A`bnJgBPBFAregt`OG23g0hRacUV`NbL!ReX-p?Y=g^p8D=xu2b) z#~R>eIE8*S0q;Ls_ouO3$izZ}S&X45rQvX}wL@$sSY#z3rt9+9#PCkJkVZAG0z&YR z2Ss5O=6?AkK%}Hor%6{hYElS%irboQ5V;caoP(X1hslD!mi_p{MeN9Z>@76HlunBD zvt+NB^VnVt5E;bf*K{XO07SM@V-+uqOu}Unj(t*b+j+e zsmp6)-;Sv;`8qIU=SgM?$5EXdWZyV{+$)Q=N${(v6olNDKZ zwbeo`TV$^>E_Wp$Y}m6zm$@XoZpCmy#O3+(vH;0%#)yNfv|=+a)ocv-RD-3hn8@?{ z{Aw2mwdFq>Qupdz;Yr@uVR>GfB%MMN<=Rk?^? zTye75$7*9VAD|fprv0#x8Y0Uf^afN};g7jR7{%x1GQ90qY^2bn#1L5Qs{tToVDj^( z?bFLN+4$!H%`C_v;NHQh8WLa>QQ=CV6Nby(S2lG={>05;pd{(4a%$0w#OcXM04a8# zeONZRgvFa5RJDX&M7cVtOqX%J{;W6zgV~yNWldHJ?+#gN>W`qjrn!oEp61gl9P(iP zm-7x6hR@^%s{|nW=Ydx%rU5%GW*!a9W$^#eY?g`UrV9WtKI%&h@F78vHV;Ebh zi=GI&sM5^>B$v?K*J5T^#6He`Ae-}IQei9=@w82%#U56Vue6IUR1d zw(O-T)&CXPbP_$U7ozYp3>nKIMgQn~j`p)bV<2ia%4vf~BNHiwW9;1j*yBYg&m_RAu1%9^wR?3uB zTdl{&>2JkXD(w5ogp{-7dRyyC7yll#bLPpv;vW07l#!+NO z$lXImhl!Tld)1aBd0K0zdMlf#Hgg%;Ix60a=Xs0%EQc2)R4W}GTC?_aX&>s%bA)dY z9Z0?jYVTeF+51~+&ma@6bFx8y3s3LdHEZSJ8oqmBs@|$bzr{n1>Ra9t)Ty`OI0pck zmv`o$XmTKqcWB`LipKJMsg(uD8=eb|l0Gz%uOd@^BAhkaIGYvJ{}v?>li|9YnjQOl z5DNOr+}AIls{09}ipQQt53p5<)9qhe58+nL_q|k+x-*OW%0m*!QDe13uVK%%EN>bM zdBU$Ek0k}lhmIhgzFbdo+r3!h!SD(GaY-?HwOrcXIptMeHF*`#G* zJI_n3;U#m$V(U8r@od*-rKa%JO%H3rmf~fS$527SGk7*ZF`#%}8)~s{F@R+%?*rL4 zSQ8v2=~B)QE)z4%hL>7nL;=nn8sPbee-GQt(;-Q5nCQq!!Q0w22zJA|e}p{qg&=3U zyP`y9K(^ITXLBYN#azRL^wMXGa0)%ct1mm;=rRti(1j&%=v|7RQ1s&aln0Q-hvK@P zPaq!Jn`)rz@0b10-62G`{i$jok)PQ_Q0m^?lkB?N9IXT*Hm8Q?h+T=wOJEBd*O0R9 zIxi_FJ1<#?H$;7?-fRjxR2sty9Ve#$eX%HSEu!}O4O3**eY3*djtu-Xz1WFx-RY0P z^jTad1c+i+6L_ zP{hL}quNTteD-`b14~nC$=nz@mE|L~$3vgE_Lj8U-bEmwoBm07AaLKHh02GAf42G?UI>a8f2@`UWV?MxK4y~S# zEuSgzv39)E2Ik`5oapb*$V&=~{x%`hJ%LRo%$~ux_43G~3JHIl*oKOoUMfD%o7y!l zUi2$ijN!^QC=^&(k8^yk^lYyei*r$XLak#qdQ--W_xEr*Hk^aa-WJpbcoLe!oF-1a z6Bu5*?fC}d{A}C%1tLg4xDh^-%%Xd2`*r-l!(6-jHD>$9e&@9%xATwA z!UQF`O4jw%!JT(E?>&jlAxshu)QXAYFC$)tYt#ll1(NRmbmpbRF?7nMT0TSlf{h4@f{YE$r4;E=q&jAHR3NXWl6$5LS z0SDd7`z-kKV6BygQCki>v{ox+QV=al0P-<2;OirGU` zclHaWtW^*1-_23IQH!MQ)LJ9k+arExCrbwF%K0601a~TQRfV%*bxQtn({)6Q#8I-K zQ*wu|M+Zxt3ka4agw;4DB;mfcEfy z!pRpQuSiwBhdvgCld3+Z0F5Sjl(46aG|G>?H4>8b-0aMKGRKqaa^P%kX`5oxiOZ|>!PnX4zj%CMK$@yy z2F-SK{?*7}XoUsn{tr)Pp|VY}BIoCb6fID);`Oy*r?$xfL(%>~%zn=lq*BOA5i(Hl ze3!~Hl2C}vQG77|stTLY&TXzaGysP8)zpQy3lH6&F0!~YXuvs2tCMT^k`OBJ(B-V zA#^Y6dH9JSqF!)`x&Jj-q2F$iucYZv%qwb`z9;xUv1=)pgl+ijc+!Mm$59F_v%(>RS=__*KzG*J#G}n?DD2VjKnADV60M zWVC6KEEJZVMbDZUVvhz#%SwX=RXlaZpUp85h~bctFwbkIYup%yV=1p;0|8d2$Uz6& z+1q58^fZz^-7H`f8aaWoVg+u9IF(Ejz`ZhhtkP$~m31A@ndFcx%%Zu;+5V(Hxa0Ae zK$@GtJ%G$GDsnZhHD_{h5eg=3BBTW4Z6lLr0CQ7sFIwDcCTmowbAX+14FN?0_*j!% z01TOlb3lk&%v{dad>n;7Z0G}RT<2*z0)Iir7~DBEN^;U&K(n|QlQc(3FJT{0mDN0Y z^}N*P_F`=(fr53{cgCkeX4x4oRiINyTnd|nnte9haMkU1-4(9lGQUcryI0+V5L7P1 z-+r~sm_8aje5Gs5{>nj!eTg&7`t}o6HK&wU>)J9rHW8_EK{6+ESktP?d!YClrq>dZ zsQT#3eDIIMaJp>!4T)v>c@u7?f7v4!02LNO|76vL&#v7ktL0gu?La164s4wR|2`2{ zAN^_lXyoYgiZy@N)&zbb_QJp+QIz`S1wtCj%P=tjQ|jX9c0acrI_gl!z4G{R^ioO1 zknosQwA?GVuF8}dAt-p^9N|*Swlw$oy!DDk=joPsw|PstC*w?A*YDmYJ3UA9aoIC7 z8A!Bgy%5qJ}krNuJkp4v;9b^B*au3GZ^tog5X4Gl+|Qlc}ic0L6ow}y6Z@J5Cn(E_Mm+W5u`r| z)KgRsEu`HIoQNl^fZ2Z(JChRRqnce{UUF?!zZhL!MZf<%iJ~W>*yRzJYYBIb`vB0V z0jkcJA7DJG&SQgy>vQA3iFpu@k7#+Y5Vr$k4@K)MZ`v*Xj9!|oNpm>U11U}k&A3Jh z0fUg3d8o>%adwg#+B2X}MPJ+MXX#OIm*ldf9&8>zd2TG8ex0q#?JepV)&XIlI{y4Q8= z-+r}w1H7;BiqiCT9FMTJxbLqQ$i>C+>c3}$nCX8BsA!gOy0_?o&5cvBq;LM-40m{Pg`(-doP#O}gE z=WUgJs(9Xmcez>}N+}UFl0MTyqY=qlowbdtNe^*7w5LBFlL0BpJc$i=xi0hv-B9OH z)IGRxI_h8^1%Tu77HFNa;ua-2e44%Ipr z@;Fp>PoKc%#GbodyeUXFmlN-6@-5j_5x#QijdQ4YOg-p4vmnUrXnz@x`%dBS14H1@ zL;n4kSgs00kFli7bgW>VDR@fHK_mt}-SmHGU;TSyP3U)=Xwi|IG>yDm{CssZR@PfQ zo$|1m$&2O{wVEBS%rgc|Kwa-j}#4THyOn48@TZW@$N6 z&wrw&ct4)^SEe;|X=wHK5`#gdFvzSj7&m!tl)L$Jep-awmu!Zuq~b)og@agxEnXlr z54jVT9F8&TJ}of>X>O#;9s9bkD0?=L$3e!D@L!%wC;rxubUe@WNK%7+5T~7Uva&!x zyjB+5DQj9M0RS+X7$jVok;S)lz@a5HH!Cn=KTtQDvWMbm=A01_$Zhw%I(&tc-|x_EPivNmCga ztnTKr(fg3FrG z!Z{9WdS2k1+nmeI_2Vuvy@oCwM|f791M zXZJN3)UBX2wW#4$&CRo+2-?o`%?D|5r0?jK-QrFX8CUHMq;}E#B!&Izj$(!^ww}6g zLu<5ZMc4wo(w*J=`Ttj^;>0DN@FCgh9#1uUBOhRU(3sZqS$=d(Cu>&Z?1F=#m176j?jzGd~blZkTGduiQil7Y0u)mYx+@Afmc%>+2 zkgh_NVE(g%Cr|1jB&036QYPq`&~*pGv=;>C3&2{8^915}Pzx)kF7kD&xCk+Ph>yHr z531vB>k0@00C>zZnf%{eTr_dCV{<05@|)<-4fTP71_lrqhB~qq8fX=7KjKIW!zvhKloO!uvSiTgEVEf3ToKQ%^vI z^ilbE-7`#%l9$56j~cj#B(3X$EUvT05Yf723Q)XBlGrSF56&P}wTL5_ndnzebHgf{ zzR|te=@q%IJp?A&aQ$iYt&8!1(0Ub7UMIF3n8$y+x6I77oBkbQADgJ8RTuqe*<0Q{ zektHkb`iiY{c*@2gQQ_SbxM;Z_>|7-6mts;cBtGx*Ljj=Ek3F;+dYpbtEGa9^|SRN zg+ayLSrrHwEZc`z57nsPDY0!vHakq$=)X4f*AT64e_gw=QvmU{Dy`ty-R{z)mKWBX z!Z0nAuA0rbh#4KnlWW@?y7f>Oes!|!A}Hp5(lYdm?6)r?z>Zk7MR8^J+y54%eXtmG zj#!;U(qcR3ADmc)S&HFfX=~Oz%chdcgcX zWHmDGQJ>KUuY_IMj>v6gOuw0B0%T~ImdG_s`6TZP{e$OZcpFy%Sazrsr_h)J*&{6l zuQsp^CQ-0_-@eKuHO34m>)@kbR!t<2tV(G%6z<#W)}=|?zYJh*-H1qM;%iP;MoHRQ z&j!BwKF<=YJJwMQ?eh7oQFHerqPK!?l_)sMG97Wl3+1(cjZygc#X#+YZAio&80Cz4 zVLjO3-K<*C*zW^{=r{RFY2_4~aPC`66(Xl_QDOH8n{X>X-16`{ysI;N3z7pH6IHBY z;7Y!Tx>iYSueZiUDQ3Ow>nfl=L%{3W$JP%v-N7)skdC`*^UY~-l0t)BL@Rfi{PS;X z-`|BMlSqtHr0&-^;ft~V=)&l zw6{Ef#B{z>2p($6#tb6(%GV6N9d&g=lPgz(DBY3~0mLgR7{KqPoCkx)0g(J~)kR*F zP-Jl(Q?P^ViGZnwoBZJrsbt#{2{ChiwY%1nc_^3+6V0;L&^qJ6b%oHL+L_6&(lVX; z*G^|vkBplSGaKsabv4WBL{44*5S9cd0NvVi`P2~2x5RgS}%qITArM>Pf+#*TV2hzB40e2IxxU4 zLYma>rl}GXbfQ6F!YDt;mz30J!>`ZMHPvytms)4Z6d6**|7{Se3kznwHzn3wh|Nf= zb39Wl8(fyzGQKB98SXo!cWp^H>1qv9ncIxFznG$Apm+7L_F{Dye)5)iTPf)f$cAZ} zG+`|d0qdG*_@92T-7$x;R^k=0C~WddR9Vv_RM-HtXv8?bVE*l0X~LiGZZJq)I#e(# ziQ*}`5_K{quloj*;WLiCGJPyvlvy;!rwdksxp?n0e;e`F5}vQSca?mGj-y#X{2-j3 zefnLFA6NzRa)gY+agB@{_E{m!QKaGThp^@j?GdSi!Yb5O?f~OzTvE?2;uM4UUK??f zuV>8bK?Rk_Mhx1|jxGu26@@~>00e!(PW9OUaZt;yD)X3OJDfQGcpZIkhaU!Nk6*p^ zTZ94>hYQ<+P`A*Tk>LAHJ%n^4V@Lv=RA7^3M(vRH@yCkIA7l!sSxi9Lha+lPI&Uq0 zUn_~tM?jov6EmmAnFx5{JsOv2%WtmHTqgeWDU(g~LYLmYLlmkwzO3oh8dmkLOv+1S zZbJrf`L29{!FFEKbwtNwk*5!D?Ww54d2X2Wd$Mh=`z<-fit8Xp4g@VDylGDCJNHOc z!aIE!MW;8bj%r0}yGE?)nf=nq#!N^Jl4ph~(&7sp-??UHem#6popI?@J8$aETx@KsA6&RkU@dfds73I=l`#CGq`X@9h40 zA@XEiShYag;H%5DBvJbhPdBFXyP%oxa;2}DdR^+A^6Js}Yc^A02`Y}a=nS@Cs*3tY zbyo8KCoFGIO_~Fg9Y9s-iQC~8bVf?rC91EP^yrUPnDvBp5>KGz!DrU94=bk4NP~aX z0sKdaMvTOOE^`#BH_{-3eITL+0<<b^9}eXRVjH&3c`=;Ut^e)r*E7Df?H`>G<3)ss-l0!la(q}^6Zc8%$NGiKFl^&SgTY74}Rz^>Auf2k8)G`T=!PYVq^ zH`zvnM8ysq6Nn93<2#|YDn22ERQ&Td^482|yzhLVOzn1}7SDB!F6y9J>hZvFNo(DK zFo}UU%NAl_wOhp~iQp|DN@`@rcq6}di)3BD7?|s4i{iYkq<&bL8TeS}zTN3Wq}NPgaU4H1&80E0?>}x#n$ds%+CK;E@%h3T6ct08JPT z_q(SDhmE$keK|rX!!XR(I@e9B;Hb+=vynX1UMkPh<6p;(#e#U%p>06JxfGc&HJHU_ zMs;%xNa0O|^2^EkKFPXom;YYOnLGmD0M^nC0fOqJPq={R0pQ{u8RWYM?_`_C(JgI; zFa#v^7`s!*J3d!e+k5#(*}7cZvdY)H1m6s^@B@D6=YVTI%%4P+&Q5T6F z<94>239hv#2{jlky@nU|JwBc3`K1||g@QA|>2)^FjY_$fhzGSzNM6>5R1Ia%)7sU`xL#j()-3MYK5kXXoASplJm4^2 zXIICP<#M=)fRm86HCmX%HRSV?n4%LfCWa&|c-#JjvGooX&!7hl01};A0W*jk$_6?l zVVbvXnI;bTtIbKH>gbh?So2vVUw!=;J&6?k0$5Ou@EG;GRPZmR&iug_`vt7kIx6{# zYLuy_f+BEO*-9N`l^0Q3-2jYIoZ;XsGi6c@H{keHiELTBUnqc6LoXaG!krb z!a0GjKV=7mmW&AGqwN&Wb%Ad+lxIYw*rXTn1`-SOMqz2^6CBn*kGoE~%JQKT+Y0}BS&PnV0Mht@nqxw8uHnnekq{~TE5 zeseiDZ;y*DjIg%mN~~v18k=)PmE+7%|6M{_ne@h%l;7F1*W#)ug5{~MITYq2#mPis z7}cJZ!J-zT)$OAB0pLUvQsHoF(qlG{P=!l6^+LyLr6jMFXFU3BX{tt7b?6(EsQNzF zFJBYDIy4}(BL8+Idq7t2X+NqR7f-mnARO;<$3 za*}<&M2m6T!BI{*DQ>ayNJh$r!#8&f1<3MCYm3IzK(q9rn^e>0OJRbs<$1P@;pIm7 zU%blO(*(S zs9_;r-H~h$gULu}E{+!Y?N1-Iw(avxT`-nS&Wk%ogyTwd$&sne?le^F>q1IWmERGdsiHRX3> zl;*pwrbWGcZvtzttYF{F=A;Lwz$;2kU@F9*RZ#!eYEn^|m3U2`%J|o_u>M91 z@=c`ZLKUK0FaK=yChR|bn`;YMmXOw>cm>49pW_qpoAJhbFvZw0*_zkOR_gavbNJXC z17a?88{s&NF!r`=m@>B}IVnmSqSh1Koxk6CvEYAi5T0+D0w(r5*N^L2!f#D`B}cMn z(sL9{?0gsmxs29&N0`mPlAlik4jTx+5>KsD%HSAy1WPGA#*NoCapt2zuH|q(b}041 zmd~)BBbdR#L*iUX0~>%SU1%8SyPbDbPKZL1H82s46|(iL5!)m(i%GEi2TO)#8fq>+ zEGpVrDZHAEZWvmU5ce5vdBMm{ba`i8elpx`7;0j~_&%-Xjq*G-fC_@E2KWC~9%rn% zLNi*>AGOib8R*EKRfn2#Y^;JLW0{82gy@&M{(ke6gyA7NvVfet&Sagok}0@a7z}1& z?vMw7oKVUv$F!9lH(#%jrRJGvifWu&-;jcgpU~GD?{UjBpFJZgNYf*kSaEeqNC?CB z))|WTjLOWO`?ZME^k8B685=RpoO{RkRsAre1_TRIk+*qnUT!6HKZh4vZ)iDe&j7zT zezKlmRyO)}tG%ay`h*I?ks;KK&4m6niHm<-%iFFwdGC_ICz%$XQ`%R@&hi{O6H6R) zjG;Ziti$fC^>w>)*>U(DdJhY(bEQqSs%Y<#OoxApDw`)#;~6{|5{|Au#ziv9KkDtC zcb>>3vK;!N_5@2>fY#;~xCXx*P9C)_fFdwx%pb;37W0Ljr~2i9nfw_-zgsVd9Kd@B|0z|Wb-->iVUaZ5QR zQu=OB#t!dje}n)?nA;k**@~0<)V5f)$As`k!4jLR5?P*Yzrg)h-#ZGms*Bn$FOZSS zv;qbdDEq;M?*o;|fOvh>$;%@j8k?=HCv4{D)9?Vwm$Areq3N#%61?HC7X)kf`u?oU zAQUZL3Co+MU1~;!KV&opH3QP5<+5+wvMz*^Pqm(PW)mwaf+@tPVoz<~H0ZA@#Fven zYjv+=KgVy{sAH*!%8MyOkq0QiQIH^RP*Us3aEL!TSFZuX9ivR2J*5CIj)p>oqcZoW zUYl-7UzHb$E{;y%@`KO}ehd{D6tVY|#s7Uy)%cTARHNf`1p^y0d_P*zl#CIn2a&{X z?20>fzo5_`hkC3p?+^fm0Y`zBQ~*-T`SL>dwm8lgURbk6A^SBwc3b=I13WZryWuDb zsl5i2$;Qr%jPB8`)J+qKr@;Q>84nnjg9BGC&4ms~V4c(l@vk zL!=T}rD~HvIOJdZ{Q3QQ2m*kj1dj2%Ct;Gs>LEN4V4QWb&c&tK?Kuh zuC~HF#pdY2CHcRlmR1l{N{XZO0-h>lYuXLTyn(^1dq5{^0)xSTICF&RW8@0Oi01>y z(FZa}_xc3BSkbNhRi!tvy-zv8gg;L_K6-cE%NKcX`2NbJeiD1wRg46P40&&438x5X zTDBC+0-Y2HF}_976*XOMW5JwI{Blm{;+7&P`4-JmA0AkdX=*~gW#ppfTx_0uT}xHb zJTj9}`|l@A$z4WgJ==cRiG(Yas%E=ppNVKvN~hIPPALeSMcxh;=8#J*rK#MzJ?Cu+ zDnb#TGj+lun5R~!*m48?W|OXIIOQ2NkpE4RlZZ47YO-o#z*cQ;=?j{k;V{*zA>$bl z?!n>&0^Jr^6lx18Ko$Wx!*KPMX)LVDcm z5@;hDv65mmpudNI`HPeusbLSRr}432qn_y=6oJ6y|4OrD-nz|fm=+88>c@!_#{ylB zHJmGo-v`NJ<6-w`r@{b0j`8x5f+^eZoidSC{gl+BBvVkv<3!WuNLlBAd3WBsJp#im zB^gOTTT{%zd?GH}$AI>R_xqmJ;O6+(JLA#_ZrqI&A`C=}WkU~Wjzoc5nwS=S?wLRc zVv$#)jn}}EjAglxJw3`AxTdri=nyh(?(H`lLQnY@Oo!i=YyC4+#EbIw35ez8dpCVdOb7T4p~(;Xem#sYkz!Ug!7#nknO>%x-O7~rSOq)a?p=-G2UCqRV<95!BdHLYsj){klte=0b=!nR zchZavjBX`=&Ss!zS@MplukHq@??Q&XX-k;?yd7D?O>;o13y6kqu0y@l6wCP+5+OQX zf?CR_2hw)OkVR{Gk^FHLqj?MjbdcZVMwD1aHvG8y!Nm9$YWV4yu0tg8VTcc@zC9l+ z=RUA}>hz=*CG3Mrf4hLrcl9=nX?)nQrSU~(PzzNjU?Uv61zUsvc0D&@pe)eOtEBG1 z&B}CRu)w?I{4X~am)lL4AE29(pgZ#`fdV$`L^SDx`UX)Y^OO~ zCA~xMQvkJTGsG^U6NGO=U(@gR{Kh|<`%C#zc^n2veke?i2m0m0kOGATz(D|l0}Xen z?GtskWE1oH7pO2qfv@-4@^aarpuLLBXL4OFkh?LWhzTY7a6K-RUu>{kbG=;ESu0ub zhi;($^y098n3JrSteA*{YJr{-&ALO^bdn?{M{_1T)so8oJd zMw7Ir;b6E6UB9Z$^I|cC92JOKO6BgYA6R3vax68>`XU~TWJp_KVdTlXB%TLq7h#wY zwMA7I2q`ZnEL?NLDY5?0nf*!a@5^SeL32G|nk&Y_L-%19kl6oL+fS~uvkG5b$F58; zKPf-AF##G34da5L15}~D_Y4T|W#`_b<(!v=ct7K+vlVh6jyx<6CKCYx)Hp2_O0iPA z?QVgxwfHV;i8tir?oER23fXiMAqDp^58F07>N-6UqY!_TC44#70-=cTlR0S($ z_ZaP+*v>`Z(4ghzdVjVMn__r*h_2G%s^)0Ta*;+%wZPc|{E!i&P9tHlyU!9~T5?D-O3w2f3C6Tp~pfYmOjbvejG+hNJkOs?{5 ze=ILE zsq7=xC4=lVv}FlfcDfMQD)*%vXBGliPGEk#$L!l1Y;p0yg_69KTgO|FFiPPXQ+{7s zUN}4wugW|pu_aJGmK-cqk`4eB?s?fL9zcf$CXNsNg3}%&6 zQ5F{56B>#7>bJy4hI|yKogO&=H_BdR;x6ga=#eHD;%cm;bQr1vldv3``qgQobu92J70=QNLNvrPxIVZ1nPxZ zc*`I5cFqmSN&D?h5MeLUTYiorOr&PM&>iM4m$5BMO|M->F;}6b4gSl`KT7 z?z;uO!2GHb3(^x5{9?1LRfk;30#ovWp2BP}9DT^(5y^X_dna?ANiadfA_}b^7y{c< zhaeW&{Zp+@8jb0E{`Qc#>V0TsrSQ~8w28gjI)g%3G+L^&`5nC1;Xazd5?WG^VOkDP z^da{|s>k?=O=IN7^`$Aki6ceE(cdz^lQ2G3H}55&VK_Uwf_++d)?U8Qb(iI?I2g|o zzEP@$l&Y<8ikeKSX+3iMn|CIpz4wRRPIRi8Heo!-DjJ|VwWfXumvtBwhGxST-W}M- z!%I67d+~)Q+<1$W>?*}1fkL-rhm>Zay$yDFDuUmbsvbO?keG9r>bVyJwxsPLXi3>? zpzTWKOgsRm9|E9XH`Xwh@OGs&%$b^(&!t%U^IG$#N>$G_FOd4^vxr4WcvZ;UEQUR6 zEez65#+5-cC9Jb$ZB_{FxW#75iz(%}!0^h1c;)B0DW-&k3^;@4gcI#uD-L3z{};Tb zo=av@yD>bur%E>y)jco?7%|4%-n1?BBX2>2_yD>=hq^kM1Nu{fwwLsjXzO`BTGwvV zUlDXyH9XzMQB!$G7IXH47>h0D@r@DLKfbVWKsB-qWKWq$60=$L(lF`!It_+7E{}K< zsv9XI>5BRk)8?&e(;uOFMDJua|1vqTc-#&%Fb?x1K-T|k^@sSh!mf0}-cd>Uw-yE~ z0=9FkRr4yNJ?bC$V_*Q$#?a8BQeLnf^Mc={I2u+#HtOT#)U&Nkbtz3YsGyy>jcm#I zhGmjkRO=9|0`uG?8C=G?Kk&f^+o?2IElk{cweJ51BveZ|tJSL^^zD>_BiS7KaE9~7 zrr5WqV!gOrka$xN&{&nKhiIwhWsJ6`L?J)ib)B!-{?yRUsXGnono>PYcJxV zVU4J5qPTgf_)Of!xgYFVrnNpLKQ;U3BcN~pJd%GCk?EZv)GE_DZjLfoDC{ax7B%u? zC;kPLNvzvF-MbeH=oni!yaBq?DllL8f3GCvDM|sM&Vu}_C}?J@lYf}4n&qwNDCB;~A1bRgo}h7)hOsUg zzh=*9q!TCeMX6*m{YF33*oA=lc7mP6sqKx@^L^%TV?VpYn)b2)^B()I0I~6D2EQsx zO^uY41odtP0G6E_9r@YVn5?7jOZgl>Ll(+UlGZ>odgBb!*s%ENJFkmsrxH;k$M~?d z*w|PX$5U}5idWKdSrw|WgOi3a5>Hh*x#P>L{N27@Y(Su>P(qs1Q$=+C@6LJ>~nMVKoo_5BR8t)F&L? ze0AOkA(a-%KwrjK{mpPJI0i&dq&aY`$LN59-+(nwt)SH^jo2jxjr;7s?l!}GV1`c9 zw9t9p8O?;ALl{mVcPm2GGp$^9Ho$NQ0de5L6={0^ak=}__gZOw1n*Lu`7U*-T+NNvcG$+4>rYmJ;)Kqbu9Iq4xqTQR#Pk7;xtl5iWH_TNW!)u z3|B+m8@1_p6Z9qY%$x6<)m=RZiJ=MTj~C*=i9$a~n&X?TprOTC%@DPbm`6xV+KAI6 zITRGKyhc@@L%-HkK~vF7v{Gi37vweIdPbs&{m@TkeSDzfU~#5%1hW@^o<;m*%X|g; z6OkWe_Slgjz0ew{5jE5k4Tz1;b!Q9iyJko(h>twbK__iuQV)AS*$m(p1LGP-judrO z70Fa8^+mW^xlpFDzN+QF%gpd>J#_-Y&^qRQsSW#B?0R9`{=$T|IIP^%$I1`DD3}5t zRD-sqjB~;IQI68T&pEPE_<3xm4SM?f61Ok5V?!gh}zAn`o z6Ke%>B5Bo_W&3?=cdULm%gD zNQnXv+Z*#wwCao<-$;Tf;6^YStj5(klIrReW+eSVoycENLgATJ>F3YEK0of@{-`=e zu?#Qk>);w?Z~$%T+TJ!P7oQ!_#8hIx5w#Ip=1^xrbO)y?>!yivee~*!EaI{_j zE}|Qpv|$6YW^7hGKnj8K`#s0r-E3U*?v2uo_TTI)*!^GJZFyyL8sEYskOZ3roFW4u zh$;u#()k7TVh^Pq=RP! zlY9RP*Oz~MWv7bu`Ekk65egOr9Yf&@byfM>7Zm}lCQm-p9ri#6hjF{Y>ZHY!~MJu_$r5s|6hfKNgEjb=J}T9T_H zn^iF)Y%CeTwC(+sTywJYb6?hs-lilJo!K{LfE*?$Csf^k@?AK=jGxhwrH`xMQWhy$ z@1ui<4!NA1>ov^^;xlEP0RXFnSD}F3ycjswqP!Vd4VCoH)+%tu_pMJWuY)5(BtO!Q zgy%aN0yi23D-9XGGHHav>!E&%f_{qejnRO}0pjhIKWvlvv*mo(etA>QGRWf~|KJ)zs zbfb|2{r1d0kr}=O;7yBN3CWJaZs17BaTjS&$j)_yHw=G>fMQYiu`4_$ zeY(T0B*>_r^e}!$KC`0nkf)AriM#KV@Kyz93sOB-%On@T{qeP@JvQKT z+r71s|96%sNY)?cQ8Y}hT-%r95)O48e?>SxBrYOe7K?zkIT8ahdY4mut3Euu>JB0w zD?2f)trl0rNT1B8>i*|Y+yaH0r*o9p?r~AHoKagm1~E2_?@_W_ls1N_SENYCHZTw|4Strg^dA{Od*oW(M;euJ-B|R@Y%6)5?S5jXAOoPaLadp#GINb5 z`d~L}1EC9&U;c?ecmS{fpc58UYym@<49r%WnL?XW=5`%R>1fbglcG82ADCAg$}Etf zHW%}9wgMa!69*g(_k{;lGWNQRzd4#}I!j3bC^Q%ocK$o~@) zRP|pSjvYvI_~UgY9UdCdT%;w3-}@pdX#;>BT&4mW zz#B_^$cLxbjhp3nv9%3KjH>rH;Mej7@C>`Fs|WGL?w#o_{^tSPSCj*5q3WZu)JnS5 z{aw3Hy3FBnqHs>6PmQX-l@Ma^(=A&P(Y-!tT$Mo|hDjZ_iZGU@yf3XvF|I_lrb$-l;2-m$?6F3S3&s?i_r>9Q0=?*~QQwtdwn1HxuJ87^>S~^oXtN z!Ar+M?7NW_2-Piem&89sf}zYV?0gG57S8$qN;-stI!JfjP*5_)M<_#Z^Ul1lZbjFV z-AvPT>mNyn#cVsk90f~6j8Dnot_jo149P~Rv-@b^4@DFv6I$s<_ni3Rt%zNfjdfln zVOwymynU{JP=q>-lzH?xABDv6Z1ssejX-FSpCd|QRg~CTw_aELglv(swJ0k~4C`Ai zhGlv0T#O2mE%roLHoeyZpBNPBt`5x+(hLp-kgRAyA$TwMfr+n5*-gP5?V|Y7f;IkE zJCGC0ft_e;9@OB4(rdYEUZt!S=I@(lmq+|`$++eD3o5-0 zo-G%ilGe-EBo5N`*>Q)M>R6v1K;E~ivGVz*rOz#sxje48}=8Y&E#N<`ekG`Kc9;dn?+TXK|f?lnS2VxPBlgF0RY->#; z;om((&jn@}Cdx8m!D_R=JiT?V8cD6Rqu^+eV~XKGuI)eKJ1<;S^A3BT4iIG2qfIGO z;)A2@6J7sq`k!|=>fAot>mz$%?HZ@(%?mV~Ge}f(WWT@-hd&@*yz`)Kq?0j6QxThGRI(7 zR9THua2|3(y(tFGq%=Qdi&^Ox;i0?*-Q5c z@Q|eU)yP;Wj-mb?kp|}nKn`wk ziJcEF_+<|6S6aL(o@_bMwp@}S_QA;0nLx#NU-wf@q$+Gf=}0dHiA862#y&Sm)6E>Er|WBaZ5C3C=mO3_<4a>tUvt7 zSEi^@ee?82QFXd0I2aaw{*r%z^r^>+69{L50H;+cmvz9>*MxHL%ZyDgP^&63xIE(^ zJwkUU`Rkn?TIOWsWN6!8GL7j(FU-o;FLs?$tKnPdlm8XYqmwTXz%m>Q%nd!R$bTdO zQnO}FWmqr8B^!MwF*$M9Dv8?nI%R%XpGqsTedqXWI{YAU1_j~HuJI_h*3b6Q>t1*l zVI&c3XOhaGXZ;Xn3ADyG~_FwcWV zy-Oo$4(X2gucZObeknX>>kSIxbmJ^f_G+EE=Cde}$)DE5xQ8>gR?AAp>5p&jiIY* z^Ho^p-2S+AMw_{R1|u)2Mgng7e1NyN7n?f$K7+J_jD^l|w#T8d;u#*wXkU;9s}r@? zBjGr;8$Xe)CbXUwW{UX~!AEI_m)2H{qiYKttYS-hU5`JF1+<2P!;Lbxs!2fiu_y8t zJv}^bmw>}MDuJ+Ku)kNO$@r)yAj{0iNb7NCF&=VN{PyBcc?9XHSxFNXuJt%vd~DsN zG(8-C)OAIW40m5}l6^KTJp(D0wkte3lS^dR$LOp~b9a;BD<*&%9u22VAmhI;gxEOq zcR;{Yqj%Gm*7wc=DmE*1w&JJcj?FOlh--)#i=Hu5H_bwgDtKx%mk1Tz`E5kBvTkUB zW#%*X@y=J%8@x5AxFE==u<;9?H)LfW&mC{2NJkekw4??$~Tr$7#`grz7R zT-ET@$sKJDNBD2%>**)>I*OxPXU$5f6D4ZowqqaH2j6OTn1=)HNk za89OK901^&omj|>d$-XSjv__@youX zms85-o+~VK&GSwRV70bFKuJ;zMXxRcFguU|C2}cm{|9#*Z^#l^FQoGp#skd1JLO`7 zhF)8bxu1C=W?dTehcnGWP$m(-C(Y8j$Ay_6o%9yJhw9q)3Off^+xgX3Rn}e=&-aY1 z4-+d>I!P@8&QRd0?>Y-H&@iDhE0sb}dFQW=*^bChRxAj#iP(2~BCBx|yxH^x*es{rLS& z<@m^&k%^&i*Mk?%AU&ncacs2qv<5mHsHC8e2BpshwGF7@$w`DA7Ag<_5o&70cC}NQ z*w2DKoGpSjJtsO0J|_wI>fmFQ=p0m+hCTvo&eti{H1$foBQH1nR^EZn`MNIq+h@uW zLmahox8bGkqO)*l+;|@R5k2e|1RmxvG%56*wkiypN_&cA9Y-A>LX4dwA4J-1sfjgn>*M;`jxWjU#K3&z}Kl|n9s4~m$jG?f(q!oZ8K!T_L_x# zKcodehAcQ7VCB~zl5O75B^S_lTXyQwm}yJG)5%>h(KL-or{@V69$)7uZeC8vvczA6 zt*j`Kr$=$#K$YF)#0tzAKA%yMT@j;^{f&>F>q0-Dgy&3s4m1+IUq6uxTUmnP^EiuR zF6z>kwBhWVPX!u;B|jrQKQ=H zkpZnB1=1&XiMW4bZBH=*P7@?wrFl!o>+(qHbv)!GUXzv+cP%N<)R-+r(D`80xjI|+ z+;N)V3{K4J=5uX03_F#_4Oc(KQ_sSDwQB5Teq(+Z@pVk=h9W!NRQT$=L_$Vu^@~|K131AXHL}i&Bj&n~i?rHOiEz}4 zgRtVho?CB&&$7`;FzFOHXAA?rMrl$Z$b;){yv2n98TzX^A}innrL1vrgtKeckJwU8 z=S&07R;AePgq_S8Nww#1x)NpP#&{-Rn_2_>#EE9bs6RIxZ9;5{znx+t=3 zS|FF1w)=EY0r{Qb22WmTlqVRtBHv7#M_n?JqJ-3E6001ScwtaEZs$|*?0OVkr+!Ae z3`F^)XfVk>ePZ)<+RA&%wQ$=8c1D4}5WT2G1hB83m%fa;f%!MFc~B1afwaFQd!#bQ z?7Rj4XAXnb4(^5SzAZ^W*%SywBHgXCdQ)$r%lhLjSwWVGW8VnR-Rt3(yaey zYZ=z8eg9(Y!FWk&MjQR0cLsc$ONy021v-FU4KY0i)uB&OjzC+!S?QH;#C z9jZ&OQhvF||7E&Eue0$xq^G^T_qIJ>oq|Y&UPp!KMbnG}{605?GRzustZR%4`z2J` z0!S{k2GQJ}?X&EfUByrGgx6dUV|gvfp)1ANdUEbz4E+q{ra%J1w$BZ|S&JHrZ@xI` zJmfCyy1^|0&Am-l}b?6uLZM03M`6hk?nLLsV`>e3=lp7rEo2 z8VInGq*hN2bpaPm<;e8B8*L2iW54ugac7?&@8NH;nOiy@hqDvL{U2@t{$*5dEr={3 zwx$S0@J63#9+0jRDBpYJx%pYQ{9xsJGhhOUvqc}hVGHFVuWtSSQ~KN^4X<|k<+(^@ z=VNZ+#b?! z(Dj?`brE-{e2IYMX4&SadU_c892sSZF^L$&oKokY`$zRzT+46t@*4#1CTI2j_6yhv z1S;dh{Fv$h_m_6^BDI+5@jghNHOyt{&5a%d6JQkqKey(2f+IlJ>XW(qBPvGGEsyAq zHf1>ShwL-B2uN0yi}j z)N%4vg2(@s}ZYfFQ7H>)cNybO*N<&M&3k;O1y zBXZ%3hjP8M`&ACMqO+NC=oK5*;TDD2DY;xet7f5pz0#w&{JnS#hv4=p=&(bRSB|Ej{9fTL(!UpA}ugEUY-w{VlA zlb4RE3-7kYpMVkfruWT>yigBw_Chd{>4cgC7?Wp6n1PjAEQfQGSNL124tu&_+C1DQ zGn5<}N@|C^+`+x~T3HU|*G<1l%yv9ngu0g`DSXR#*lxc=c6~LzP8voVO?xdQjPr=| zgOr}9&rhC_iSW)!yuqf7BpZQA*9rt!+p6K61a9gQm4!E~M!`zm4~^HuwpFMjD+!?{23yJH8{_)j*B{AB|;xDjY6G^KAnTGB3 z<|N)sT?=~}IRRSFuV#bNAE!oLUGFdzR0B~AI9JYZ zD)fsF9gX@(Q@YIie7??fUwGReJYp`MDyo%)V+kchDKni$nc&kqZUD&{FJDdd>J+=x z;JXu|Z$hYU*u2$RKWe%ADMU33fUeA(rRK8mm!dN7o&2QwTz9(;C=rz7}1?T z)y1$wB8p+DE@=+|R3foV;8U$5_l&=ks?~^!2~bEE1bH_@l!*ul!~HX^6ufsrS8&_a z{RLBv0$}#4sD(UmDj%aAzSI20M{unLsnq_gWM0eBSsFB}HvHMaL76kk%p1)i4oxWWC3gB?XrC1xZU;$o_OyFfG@z&^?g7$<)v2W3VTg=02Z|E-azvr zm}DbMo7gFUvU>#{WliUbAHP{odb!|5<#UQx+|E_U4I-(0No{h;aSSM5V517aJL(G4M;G ztaWv)dr#l*9+jSAk$SEjtn)yGTRfMoQg0? z2nf|Hrm7(cnZm@9ZaB;CP@M4NDe`vXE(NH9>bAT&#CpMRcj=s2&RUpaD+ibu9r3X@IQGnV1nqx1 z20D$;Z{;^oVxtd`WfDH0Ok4gq-(s<_(z0yqJjukk4R)ci)v!uqaa#>EbqjX0q}!)`#6 z%s}KV7~O9eQhsoevHv=)BRgc(DIwqk!=G=Me-8!itZ0=TK&sdk+1)DJY5YqO6|gH7IudLH&Mob_5ia5h$hS$niaG|I25*PtIe z#zwy(>X80VJJe0mfM-?^;>-JLIsX|NJ>PMGXhRy(EbNR4nh$Y!s6`sEt9QGmOK6B?LW7 zfPjF2fPjF2^ZY%)@3-t>@3*y^?fW0Ev+g?nA5G5vzi%h(`+)y&`nrE_(r5dAt~>4a zbLaSb)BgwCX}@oA-^1*u{r@{V_Wd;fczvgr+4l=?+4VI42h%})zgbW1_GIDxzSrNk z>#6@Uu>WoP*?(u*<@d0h{l7!k?fP*4E7vgb!7uW{wYG^8hW1Q; zvn^_R{8RNz28oLRot5<~gF$y>u2hEtto3tOg;*j{z#yF(f(psso_?E5PgYR+5+XuT zaH&&rACoh^nRBd!R56m7Mi#@v`j>vm;lY{Nxs8ER+{>M`&_S0Q6fzG6tuO@ZXh;~V zw{mpaR1*Jt$**8KFb7Z$n4#)>zFm}V?qMk9U<-0&0k70Y3g(*PF}^1FFTQgi0r)Mt zi8|v~pkFi-J+a75zR3%k{>83=_11hZd*qRrNZqLl+K6b)B2$4AH{LN{kqp1QplWVE z!{skBIC+Xjv9at3aopzbWw@UZN?!`b$2EmygwdIRjegfa`3bj*PQ0YN?>z$b$C?+c@{9^;6Slits-0+>fiY7Up< zEypu3k%|k-T)E1*62=@(ccR_P1iWY0m@Ba$HbJcii`Xl-zEKkf%_`R|j%uu<#|^9Z zk_#j}wI8~}1}R5RUcAi2p|<#E+zZ)v;iw)oKbLvwMG)Q08Q+XBUHb{&(%*^Y-}-KOk<@PXvD zR%nq~E%8Nf4@kGTp6#9yb)mUYG>jr*8PS3X1Bn7uMM`3&PnuYhjQc4j#na%|0tiJ>ZSGk9Z`m**4ZbB^{3-R{jTux@QV-d1;Dm- zLuBA1g?U%cA{dbm7x)8|W4`iP3I?G8^D3!sn1)N?;|xpme}k*ER+7!6TuH(KNQ`tJ zuf`+nPrH&sYYm`StVelmU0s{FJv4oh0v;8HI zEs5H{+fGn`VjR1gv&91%a~3cu_G~a#;?EM@&P|5XBEr3_bulP6n-Q=5@ekd^6PRm4 zq3bMOE@xD^Dgb| zl<^TRAruQ3BN=-5{O>l#kIQ&6igAZuF6=a2p_kbbj2IJFj)dAr-jI!qQfZ8@MuU3#>3(y{KHU5_J8u{M;1kq?=@#*FS9J zM_5chqqq`y;#pAv$`(VS>cLA);NPG9Tp3LtJPr+PCZOnQvF;$y84V2C0T}n;6nL#; zBHc%gUH?ulHz{x~1f#lh?hO-*(xMouAfD#B_R!2TQdgtsc|Ji!GC+#NoyNBQ4e@Y8 zgTOP+X~;&sGJ_5Z_|#7}$UG1Pk6|Dcr)g0M3v|jBpJ_J*vWR-TA5v$x*Bh2d^a7GC zT47xzk(#KzIYx+6tFw+h*%;CTv6${@;-)n4*lIBW_H?dkfURsbH}Za_Z)?BSs3`j$=VRW~ z{*2h-AR^KjQg*H0>t=HXsOES&h?cXw@)BgZU*bOlL8QyZ-o^ettg`og!tN=La2DO^ zv0*@yWPDxz{S^QpfrFhyNJJYk*tNcKv?D?*Oxl@Ems^yF+R`(b4BgE=E1qn#He1cu zxP~-aC31F)8{E|gUw=7UT8+aLWluG2gMNCiVaHfh=JL4l=q#91KQY9%V4HIJi56=X z;_~OE_iSus&(eBs#)fAt!9%WMrdds(j-6Byg)D`PKsvA?e*s^eb)Y_Lrj~)-F3<~0 zHQQER^UfvHWK;Pur;5eWJWlIM?fnfUhpnumviH!cz{<{rzjSK6lns@3am9Z#WC0-a z&W6?rs>-iDYw9v`Z50yE`o^I6-{?nfB=z3-8TuLwh{Z6VFLdZeILWixymn>snKQfc zvR4Fsi>`4PxA_v@O}Qy--!hQ6Z1kpD^6SM>npT55omAiYkLXS3#Bz0@u;_mh?B#l4 z1Zy&T&y=bl*$l;4CIBHn?o8E9JO%|`?1j#IfP34hS3W_2f)M((Hdz*Daxd)*&5;CT zuAUSOw#KZfEPo*XXXTGo;3L=6mUTKe4)W5tb1kh!JAJoEe*PoM4#|4GyExuQ9V>u* z;LjOhL@hU@=8{XeKUH|zKKM5q^u0nk`U9HZgClcc%M+!j@M;&)SYYGRO$_I_@U8v~ zZ#mznz5+)c&8g~RPpk@%fe_uyAiU@Vm{44P&w>u8MqWF`6&N#r@o8E{JP)4Y7NZ@+ zAB;t>(~yU_lCXE&`Fjf<(!g&Uyqih2t$4>wzwb^vPv7MOO1WSvAaPv$%^xQi!>uO zv!cH)zHqKhD_GA4h7U{`cA`=BM4Z8-4*Sx2<xOh*vZ%)#>$W*v9{0ujXZLB*;cX zNQ_=0@<a^%WdjcU8Gp_@V4>N&{L&XI}%AOV<8 z(B%6l|A)t@fChXkpYFkHJM(yc{t&VlX!#uy&+0#u)!%uYCo6O~0X56MlR8)%!FH?# z>acb;sgc|?y$TAWa)2MgwZ)0w@d}Bi?5O{KvEb_vLJ~;Q4{q4i{ega$EBNp$>n4jh=@KWMCJb@cMJa2uI$hSehnmNKE00zi|A0oFYw+tT!e$;A&X5 z&|iG#&PT?(FDl2QM%gM|xU%hm+=k_f`s7le$bJo{9$L?A_6rdsx#l3Zju80L^n>EM zf#+-{CWTd}SHaXy27vOW!Hx|f;l`^Sy@eqDkgAC7ro3A>M6V?E@bhd)e|x|%8Z&1= zx$u2<9Zc~aG2VK5`yF&TF?3;cJhFMP0iCoH(E$JxQO=b)V1O(kqy+ap5ZscMRVQ$b zKHdK;_|~sQ6*!yHQ<*|RLka0-9;K3Aj8H$~<`tJ-m@X^`tg#oh-YJUM=gY`gb6y?3 z)yfdx3QK0&A%^Q?4+uXg6FLe5`IQpSsFBXS9~yu*#Hi2ubVWJpra4+1p0b@rRlChG zhxeT?6x?`yIzLOYK0GI=%NH&Hr~I*kth65)zj$qI5LN^f*dq(70aj|sNKi@9P1ZI% zGDZZCFA=WCJI=;wFZs2iW8%f4v;hM8hwaoQRR+T2ZN=*$>>q5Eju6%}SzJ6`6#{tc zCjqVk5uJxD8(X!81DIK&$7j=SY+C83Z{SZZQ(x%ZJgNy?Wu_C$yZMPc{V_js5GYgA zM$l}MMo-Ukj@o91;|n?q5HR@EOi)p~&zUsz!WRQaxif5eOIKZdRelauxv053M60%JYQPZ2*REVhjxCJMvY@6~H3iJH!P6srUQbB^;m{sl zp#z-v%Y}u8)~<>-x!eOci7jNEV+0~6|5=45X{}zq3KAL-1fmf+t8v%D-%OaHKE>^@ zj_-t6{b;tPIISz8^`^>3-0wp}BS$G@Oo&rJsya9VMJ}Va7bL16RW8EB_KRL~*{L)) zwtMjHav2uxwl5Mqc9=?-uMcdw$d$eCrubGBsx1g~W+cnS8G(D2LY=T{UY2tyhfuc+ zwUOw6n>=%h-AePkGChZO$--`mX83=r?-+KtSi)^d1Lq5Wb?2Sh8O(h?9nZdPSgTP$ zEehJEPb~GpAk=+`tCLDs!ITyuJK0)G;5;dEd~k5r7w>G&V8#sC)#+9W5Rl_X3JYkq z1>E^?QDFpMsQ^rWA*47hDx~sFm%?@W>NUP$vLe6IeTyShuGErtx`*iO7yDesb8BD6SeWt(u12kN1RA0L%{GRqox^uB#IYskBt>kbFZ%*84p zv&n7#KEd(5;fiBi-}LzXEd%Xh2qSueRETZtosisEu$nYxrgfZz5pQwc4uq!gsf2aM zbCUX?tlN}J)~GXsB5hNH%;HsUTZP2W5Ggjt>&F)?WR~4ny)Hv~TB(4FPs;y-lJ;Nr zPdR67xiN<66R1^#-==5KA*&9v3iZ3Y_jM%5jxEHN6#)dhDVNA^NHBtqv|>Zx4z+~^ zl8(B65>Y)iyjcaQXNcj=Xy};Lu!7S+`z4s617R{t+I4$Mj^zedj(1 zKy>*A#ITGnIX)KuO0i)dT1h$_I2WY}g#YPOW({7&7GvhsDBM&>-&( ze?2k!Pm5Fn`p^Zn`&44_3BqKzpthgl`=L=^qx}$QW%{uI;#!PRB1YJ`x_F8TDuIML z`~;)0g(W5b3oa@4B3S#y^$o!k9b8wsw(8~%VQo?JX)-c_i#`7}1EEqNVG>H;rtKgT zmpG~G0dO0EyxQ$wM6^1jdi5Ndi8PXBO9y2q8zij1|51wGr{UmZ#G1MqTmke?#V6kk zt=mW+S&F&k>qFJ`H|x~^hSSq(jh%@YeQPT#A`LSkvHQvp5Z#(4^zyLt8W2hxWP=92 zcwoKY{1KL@Km}*h;JnR`OSxxkDwbRvaGjqDRi5&!<6hKLvUj0}$1up!4#~)x`v+vO zy5O?MJHba+y@Vl6n~PrVXZdBPo^Ag1enBGis6KJjk!BpY${9mjJ7C(GpVn@uL_hN< zzoDNBl8#SuOdpspV5QJbxE&4@fo~fLzVsuQ)mQMd%dzZ190c;Tc!lo1)%y0};H_P4 zfLp4`ey%u-HEMhLbFaG{KwbhWBgZ?)p$`85H3PQxVe}F-6IIR9W7JyBs zQ^VeIhs|qM4K?iT3~9&|u+ft@%9)8HY1lZ5at=d;ZtxbHLGDfqkJKpIVrvoQB94ln zOj8PytLRUi25UQd3>E3Gg2))^qh_bsI`aep%P&%#u+g{RW%R?u{jkhKT*rWb(WRDs z{ie2ud!{H-5|cmb2VhFHz3do$2bU`MUeNKdEXgeraT%g2tA~ORy*?@y#(xdExt@j$ z$Ru&!OXhZY_>Toejp@iW$*bXB(gtcTG5Oksv|chi#Mtz{!Xe~5Q{g`UJo9IIK9nN< z2zUCX@LRa%wXbApo(!ivMAIEhzRE52A$`qFv>)onjCy@?(Y}GrVOo{ggnh+cMv;XJ zv#Dvh5#L+-8{}B?)5Uxn*CdvBc;HK%7y=?q~0G^xNrsG;33 z#E`%@zuCOB$)D@3eD|&!dnBQB&<6zV^THX-B{@rBVAp+iY#EBlALrO|zIWira}Pn= zjcbO|=BI-#iV$jD5RA1+3|V&JU)hVIq0w<;J61tTXeXo*588Z+P@CbZ3lwrM;13Ux zOJK0s*6G5&k09Ay<))D!GX89l%oIflep;;N$dy(bEGQK;HcQ8gs(z0B+ z#3qq6$znN5b~zx{i#qUSH8VqlcW0K3YE?#bAMJ1_AN~41W^ovU)9FD8=7ALAbfD%` z)Uecc>GoW9ahD7tGJBw}g*)<@x7*?pXiLC6WH4p1klMZf4+m!Xjh&Mo{ZeQphMC^J zP1!qo>IM7)wRy&)yREGU;duamcq5uz38S53>K)G=<}rIl`71A>p{T(i_2F5}*Mi9a zenCPAb${8W?(o0}8cW)PQ=P*VB=dAR7Y2%Xhh!nkfnbg152#qiSX>dHLaLX4Xd892 zteOiqs}l>9qQ;pS-m@Br2A3)pU#R{WJS9u!x{V5BzK#{I5MMErKXkl2SeSMfUV^VC zoYU(-wZ=Fn;}|*2_|V(4c-)r>;U^#VVj1JL=axNM*#|CHZr(UJHaBZd7;{+)B^T z8b7ls-@O~%ilaCj1m%#8MS3-r2+WZ@ni7bcMfZ@r6bElY#bnatt;Gwa`wWSgfyluVr6k3T{v(wB1)qSenTgAo=o-JBT8l$jgPXtw^b z<5XK#Y>f(osv5EbS`Q5O>UYukJP}U5+?*I{#FY}yJ)2W>CZC9WI8!JeLL#Obt&+}< z`o#?Op+A41Bo|i9?v;M>9P8$gtS7iR)u|0ufIL*hDCZ8hcDWmgeNOwm6@cSOC;5v` z_7h?f?KIXnPU_Xc&RW}m8*9$$=#$8Rp z2O>Wnf8b4&{@)G7Iaz&TOCxz^;sluS2M>x|xT$ldDVOnOi!Z$|@ySq@Jho1ejs6;h z?kJ?~ij{PL!xUKDqT+;GeBqo~it!jU=tetk5ZVEiJ1DM=AWJx1&1fl0X<9sYh=dhi zFY`ovDR#o z%hvr08tqnnljSVdlKi#D2HN=EZ*wQURTbyzb1}F@@Q~e(cD67ANF)uu0BYOI)IYs4 zuo_pAw#jUBI;aKSLZXiVCzGAmk#{FMJ2jfe@S`@f-)XVM;Y<6-s{Ln5=QmpPPO2EN zKNXwn&JJ{_wZ(hcsHAVa?z~^juL9p)JR-{PlyDsUXPq6 zJ8B9orV1Fqbu7s}RbrmL+4(1QS2ewVLW1KAv%YNYxH2bM#?&=%G|74}Cx63*su3=1 z;VjRRhF0z$1W3Gf(dMo$Ycy?h16|c|9CknJEoHKvNK8>prg2oi#>!Ci_=alNdMFtI zH|$q$$o&Pf_gU{2kGmLCjj|73TKsd@r9Td5y4vjrp5W&aI!)cFb}y!9txHoPQ9;x~ zc37e7Xy@&(4Z~4;GOh2C6*RRw%`H-vvGTgrfw8*?C zCMj?7Vd<$rB#cxf*8DgH0t$CwMkM^DQq6ampQFkZa{pkH3{*dF8b-|ovnV3rezsFk zlY{R&@d7die)#r|fX}tTIgg=k-ok<3Z zZn87J$GUh)FwkSB^xT*&Dzf>JvpydH*mXKK)-Wb8bIg$ZCH5WN<{dMt&)=6U}4u(NluD1{-d3`jm&QBiSd|Crt98D527b7JQzgmhwi%UjiJ`#g?W}H)@ zkqvs+zcD1&@FLQ!0Fg{7PK-l0*FH<>XGM^rmdL!Bd3;IqO3Agy)6jbdf|!lA5Ynuj zFSzEN1Y9L?jq4~y{UeuhbnJXhDy$sSid2UJ z?C)1@sn2oR2(<-G^s~!*;)Y4p9xQv`iV!B5U;&kN>Qm>{2X>Ij+8YW~Bi#VT_yn*- z4TYl;lZfmGv|OF7>jL4n7cJHAhn!LJJf4TuUsTcB4o~_+33;RE9~5E|($||A-*#Gxd6fXrMp6(EUzTmH3(-zzcYpD+01+!5w{9q7>!{mfON%32hFJ#aCX@$q9l9K53BcsI<+-H0JVnCD@GYeJ+xuF<3*g9Q>L z=1acfPi;I08xIS1QIZ_YY4cVi!AAx0mB6IBj~l5$ZuvV zLN(}-XEnz{IbBCj(Z!VQWNgiw$_C`r*3w|&Gun3TTMT`6YTN0;m=Nod2^do8(-Nkl zQWLS+I51o;6mcsrr!5@OVLnRV8-F2;j}03J-T7pj|48(YB^KOhX8UEX_V2 z9I6M*FupCzLz-WQ>N$jZrgDoD~qM||qS z>lil3$bG~1hb-;hGCwN_hU_|Uxf#?<6fXZL$}%Oa5!vd8^pn%J?q9u^ZZeAiKtR90 z%1>I6y|fMwqD9DddlZB8V_%-{!~9Yj>q9wZP)}z9^+@g_ba1qq{A-5VE{#*&FX;Xi zhNwinmMN}LaNG*Hl4yV0(hv9ErnQ`FW(_TMqA7QCUO+s(RmB^Vnz|yp^c71(}YO0;FMIo>pH#+=PGTUWh6FDWc^kwpTC! zP?)tlG~c<^uUv=BX1eY6Yy9~De=xsuF4g21v$AE&PTzhVAt3SSx`-&0P*1z9hX;RE74!qB74X$EtJ-0o{ z3+yV)Sl^4a?-@gW;WVU@J4mu`+%lv4NuKb*7tQ8w1JrhEuppwdhqiU>7%MRALDRh{ zw!UQscsf4{P3ex6t;>Cs<)zp-l6OMRicsOu(VlOGUa#P%+Z(uF?BOef_@7b{RO`lW zsR~XC+5J@6LK*@uP>17c&oi?cQ5jISet$S;0mOU+_YJ^Pe;tvoqOwT!ApB4tZZH&_ zQVOuCk;G4j*p$cs#UW=$QTle*eYcdKf4-}Bo-LaFI8aLF5?S~^M^W{%v2p)OI`yeXxSAaK#k|;Jw4cKUt3j`;B_??`giuK(gy?bQ8o` z(ph2%)4jMhYe;!*OM6gBpq8xrA+FD5Ztk}rnhvPrHTc=i_%^eRq|8)yqs$v|?-(Rk zeYNlk_;d`ncvgisPFBgIU*J@*BR4K&Rm8%^mGh_LQyn|`-^}nwr+e*Bk~+5I`{oTr z9`uq+9$ll_d}{mjKM3Z= z6*<@ISv*Jg4nGnU!KY(FMF17TV;^`VNzBLd9&_^tV=~!bt-9{8pAfyLDZ-{92}Y<6 z&Lna$5wC8<4)W}A&G+Aq|7)U3F3Cxd+3}$>$czs;aZDf`ZDIVU~%bkY)nFjLGI$eqow!ylz+CIb#HiJ&_w{UpGrXfbs^(NnRar_KJd_{x#OXQFCu{Xh(z%`ICqIGn(|rOB^v-D<4R8<9X+Cq?N`cx}sXgKQ z(vMzsiwBbqBFuOTb|d!s3-?G`@e|GAd2d*a=EE7KD!oRb7i1}^*9*VM$2seATa4QM zcm(vEVklft#1!MArajr;3sE1_#?IPQUWW6IiP}YYI2Vo19+o8(4$4R)rrIX=Ch1H0 zg7Vk@FD0<3BJtd^USyH*Ban+a2MC2sj3U`xH8myE1$~gC><`e9L*}hl2vu4yXn++D z#AK98cAD`rguSH|vH)z97!+#r8BD(=&*APCdZpCVG5OrpvFXO!n7q`e{$iO_QkzRI zI9FbQ_yM@l8&#_v)Qp|lg(+Lx0A-mblJ0nE7wQBg5cDVmtusVu8`t$Vh~bUpx_-Ju zuydiC+FNBt+$+vB>tv%$IV&va;e63A)W z&(E_WvbE;0P+_D)RmB(HM|r;UaFtKS-pgp+0;u%;#VCcEYmj0&dkS zj-F)C`xLwkzn0AJUL6< zg8W&$H%Fmf;eUm$aWQ&XkllM-v3AOtM_!o0dVu^h_QPT>#gxw9Lc&_hL0lkv1sj}z zkDr4E$%HjvS*z+SV){iK{3|cfQc4!ps636Al%ZOeD1vZ#(I{`#QW$GdGrl3IC~YL{ zD?~PCN#vl=&f!pe)m&yfojjd>0%1qYbKi>#i2|(GODf^Sb{2VJ@bu^1}9V5IMST|CJ(5c|Nd@|S2ZJ2{b@@paz;0|?DiheCtf-y-uG1+K7 z@l@ii@N4dGp}TvUIyVyH5pB+eFttE0m`)W>Ynff-pAg_l#@80oYx`nzr-qLD{pJ;F z?|@*o;@AA_83wg7409KGh?@QK59YR`d=I`>a6i4Aa_a#(6c1q5`gCvNo}X`4SK@BE-bklHgLIH7lc z9S7k)7oDcE%Io>}uIHv!qbHsF%aMHI=is}>3-yx@D#~^4iS2UTq}^mON@pn?W2 z8LZarK~oFkmtn=h^&Gv)jt=6h$!=ucEHM)(2D}8Ju$fzSsp$I;7X1#J&ZwZcGh|A}VchkCE1Vh;SH*t%5#AvE6?EN;nbDqdaD=&#dZQ z#FcjD!Mh|&zTmV^c1cc3BeM7TVd)ztmVgEZsJED6@8Azrs?yN923aygnc%Y?gn8bH zx;1+A9!^&!@aFJ%`2x1tjAM`Vp;OTB%cw?m_inbktl3j!{|SsPrKfjS?Kr{#Vp7d( zVS?Fl(~U%Bs$_TkUduARf96j8G+6|6RLen~(gR-AE8Jz0LGmC+wI>x#O28&8kstZ` zYOuPOxqu=MLmS12$E-^T$}N*@)^C}P;Uf=XR*v8wFbdl`?13098+8r9TH4R^!+`>> zjrU$*DYW6AFw?_GG;gp|k@Wo_yxheCC>L13Wm!NrbTOEj-mgA71swyk$cWOiQSwXA0E#XD{(#FbmKA6EYD!bw&<&<&wAxN!LwKG;LFUt}<2T7znnO$#> zaeSC684(dV!#F4Ad|fiaJz5=+T^M4Ea7EoGL)PFY$P$dLnY19MTBF#kZYJ*hN@~x1R(eK*|hI#s#NH7;5^` z3;a-=nNZItO!Jb*?!G~=yLPhDHyZdQRK)9d*5)@Vzql}0p~)kQM#uqxqb^Hgz38vZ}b9{4Yb*;22=0A%`RU6W(CJuQs$qE~XOCD;Y( z*mfB64=$LG>UY=2rq=35&`jUEq+*r9%~VG#_{=kud!}g6Y*1tyqx6&LW55x;Ajmb> zpdX-|2_IX=?^^ z@lEkakE~c4SI%c6yM0&^q$X}&%|Q@*rp`AneyOPjkot8^K*u6Cm$kW3pfI+!h9T}2 z4?}04qlaxx7P0#0iuG*7LD4#$b~zttd(O66d&9w0119ORI#BSpi_yrS-4!<0XnUAtmBQ&)Dh0aTrF~8_7o8n`q)d z-!4|l?v^rsqQNk2F%L9bs?UbZQLFd5Ye2mjD=$g9UzYQMZL#KJTWPJ{&}nlskPDHG zYnVO867-ivfE3F2H*HC_^wdX-F2tSRpr>V8IL2#C*Q<|cteJ5){v)!Ll)(lBFe=P)5g z7U#s!9&gHIV#v=Dt+0|Wb9x13#cQ?IzR8sN#G`Po1_Iq2fJz$H zkp$KrXT3=M0YT9~*4_iQtyLLHUVca@OWKM3j;2bDsEi61UJ7V|;`;f_Jg)je>?itc zg9#$kG|=+cOl+0cRow;NIFHim;{n9kL+;3k=xo1|al}}B;FlqTc|SDxJUQKuP^Gw# z#m_#CA!|;^Z|Ao&&lU*g1-IE4lYzK84gX}kZib-6n{TCzDHeL@GVEJF@&maL6Wz3A zp~&Y`U06>45C42j|2E|7Kd8mSLkci(+U*8}-LmbX2iI8})U675=~S>9B(qGU`UH`c zc_K)|lt1Iwejg$b1YAIK{%LEUjHc$c4ID&blm7)N6oe-- zoy&K6`IBPZ_6N1?(de&e7?@Pj7JsN1Mv~AV{IHbfdB`<0FJ|oA*V8fCeUJ}WMe})0 z*xn5S%1dk^e6!HxCz8!T)fwAO3sR45=%rRgzicQJJFuB-OD_2pW<{|jaMaO(Q__;l zele#@S-6r~qZqr1H#{OoH8^P~{HCJtE<||S`&b%MJ$D5kCGIxn1F29x6rebhz|B!r zsy1{rr|Z;%evT7a=PY28N7|zge_>pYo;;jkFoSH10;*8KE{OxnvTa{X)X-m~2qBLD_*tfPV*fR1gC30JI1$6i?>oyK*-iE)|PlezOxa3gjoGfaWaI~hqb7*F-5N&Y_4(PiU(AC z-UCm~J#Lv;PZ~N=eKD|+1y&z3f&s97=P~IxSB7NO$;SPhI&Sh!hcJWnAd2`Qf_+l6 zr1yCq`e&&XeGf2|$lG9K+WN6laiim4R<;8^*w&#aL*`woAjj23o)UHlG@a6->jb`2@r> zFvulywFm$$h5g@8n~EiqI2H4sXs{1!+V$&(2Gd_mQ|~E;`0h)a{{RB5dG5fb5k(c+ z!`j$JdxTH4#1imAsL^vLJbD|sLXE9CSMPZqZXN>tx?NG-e`7hCwyLbBfYsWmii%WHKguglRwItM=71*B}RBC-w&} zTRDK$jteB|hskxa4!LY@9tmyBfkZA3Anp6yP&LRA5B7cR@2~OPfH@vt# zJ$FFbE^9KrL$?yQF$XtADdcP%2BEZ8a`u0BV>}clHm>RM9XHOtM==`u4y$dCTC!|i zTV-f;tM{oBqR(yP{JSVx9_pm^GJV_akK04-Tf1bK>v70_ZAs5yvKe&8E)ug9 zuh*7gPLU{Utsl@2=(wVk5Obbs%=l?)8#q?+|$#vj(x|x~hDQID8@8~CIDaOX{ zXl%$5i(89{_Dor)#uc&WhZ-MoW+M>oZ$Z2El4Ln)vKK{~_f;#Jl!W;CIbSr~m&i)4 z(uh%B>PgF+QVlSOCS9^?Dbe32zL_%F58-3ngELzKm6wF#Vl~zFnLYF$FD?^6*vKWS z%Xpm$bcqyYp+iuS?3J%!oUm>zafzf8FRlaHK>)QOO=Py8sS$l+H_A@qR1;}S=<4`{ z^2MapjvHlxH;H2jw*o{`w{(7-nnqxcXj~gdm@e%7{zsNB&bCgAq?2P!M+w;jp?4RH zkLz}4t=_|2Xxbm1_*Z++72@}m%p>HR6K{xshI{>!YLbHvnJ~jx05hBv$0)O z^On7#-XskVV=&`lNB#zzdbhcAb2;M*+eYdzh|4)Sn+c%2Z?Y0LmZYs_M6WHQ>mV8M zM2}IboaeN&7&NGS;zXvK$d391+Q3cmJ|mB>r!!!%S6UQss~QtS*QO<5NN@E0fPiqY zJYEx7J1BuX>m0FDXJCUf+Lk){w@pTWBWpp%G3fn5&KAl_U#L(Cg}vq94*E+NIKhpt zk!Z?2vUeOf+51?12Ni`gq3*Ibb~(6a$3y$ojF!x1fckYqAeS}Y#NX7E#;Q4)AL>Nc zy;XHG6lZOjRa9(XYrx#0b;(AKIw596exM;#vViJ_ZE1pTN4-W*L1${`zyf)79{n9D zahOQynCMdIC?*9MRInXv93Fx>w6Ey=eYYtXfmcNL2&o^FMyFl+-cKZta(rAKxD3UU zLX52f&eeIljux{0aq0l0n$|Iq(K_DW*?&gY4R*k3vuL%+Omm(rvUbBjkengrs(1Q; zr36xccUV*eW3|7V89d-eREJ7U9I2<;^JmC6=bQj%ZgJ?W|9BIpWY-`>Y;9*E&?$;c z*)C_kt|nw^2NXkG*PzGPxnZUttUYUnZuqm=+Phty=B47-5pEQ80KK{}ZPa0yp`oiK zrZ7}O`kERrDA-?UwlZ#aWS+^87~*O;#dIWn0&h)RApjLH5refMP*%Eu9OaespLMNt zL+n8`z-22y$x1wtlim&7T#B077{$Z*=Gt=6<$)4uf{#3>_Mh5=rYMR)IKf{OwCAY% zI!U$Aya)EYjiN7Cz8UXXzv!+`LgW-Mps3I(<=O>gw72r#E`(rm*)ZH$6Kj5-x8k+S zQG>`x#WfUf?|E!K;w5}{$9{@aPaPn_7>u`R(_gJCE>ioPJLxjbW*WXZ|95%sc?yA8 z2mqjR@~og(LkSi3&aHWrt$MN|#6i48o1^y~W&tjiB{O1c2X`vA{jS*@Dzbw1{>LpEL>S4DBaXhi(#}tovp@G8J zG*`4laPW_z`W)Yk@YqSAeOfuF`lp6Qj4bTX_G=a^bA@taFPYat_l{_sRkA>qNxmKl zfm45|+-a%T44N-rUZ`Bu0zT(&Y_6uNHK++P=^c>J23o#JZ=n~ zhkXWtONv{)5PCX4k>CjSQk2YsqIdG;ffmmE@c(iIQsy`c1kluNw-Rhz8=D9^XUSj_ z139I#D$u#s8Z>f50KZLQBH}tO|0d=c!&;ERfGN26lq(o$pqZZpIi1(@*&2L~kqX41 zHJhXfAK@T}otf*G!GyIMAeSaLx4uYrGNJ|Vx1r!s{k;OW5!V;#Hv-!ZZF+H#?TH6n z`mH79Od?#V_;R!fP7xL~sBDgY3L*I+@&(t_ln&p=Jel}cj8Wz&Argzl1Y7w@*0h$+|aeo4H6Syty!=lxI3>!pWIGu2EUEJX3C6K^#tLmJ#GpzD&|9__f z;!@zU%<9D2GYV+sB9<-@Th+3+H{BB%K;M*-u@sLHd6_y>sP{##ucR2l{il-`oN=v_%$F#xys+$N9hLKPk=ZF5@SZ5aL!d*Oyy zdgMEPSSszx->Gw>;{fCA@Gn9GBL%SKYr?il;L$RnjVpDjIjvT(1>$L`30Ng&bKh^1 zbj{LH5N#z2GYtO)>wu`Fui%X$yY5vcRrYi+jZKWuK*J1~VJ7mtWe>rjQYr;HH=fWj zw&AbguA*`hPKH>AHn0@Se<~$!U@1lm@b9-VgeH$3lCdI;&U@Lm0JWX=aVM&5$xIfF1z<{}r9t6|!q(?*E^knCSTORN6mG%{h_+u(M} zl|EPnR_7nJ06NAK#7XwcZD?Z$xrEfhFReCJ7U46xRINp_ST`4_I|h(4>xDNca;0^m zi$Ru|NiaB~%0|~IJXy&6(D2Usm8*p%Fc74Ei6kB^;Lnp&qzQm|c7(y*X_}g$^@44L1Y50S7 z-}F=1gx{??JUwiYntmj)PL^C~RF_96&GiT%ba^P_TjRYd3?pb`zoep*9VTQ5;$huN z$zJS%$t^`vL$pkhy462=YkVvkTuhK3YNR1Eb!CL+H*M7w_YH^{gR z^+?w`O4$~IyrdsrJ|BDwS~Og`wgehGi?lk#?VU89tQ;KdWPP1CKQoSe(~dl=X?Pc4+N6&?&g| zqne2%Ar%E2RB23lz;M~7>j5udpLO)JiNITR4I(p+;l~LW=cxYG#iA?GJ_9Ey%iyop zqs1d3CGLk-*vaPL*^Tk#^(a9D22YEqjh1Q5A%P_Xt9N__Vt*(bA8A&#Z{}#Lz0+}9lt9VPu-Nn?{&0a zE?ul|*E_@cc0d$rTuL*!uZICs(M5N=kcFNW3_-B7tL)J^$i6n!6r)`C zSfm52P!6Xb`sC5ViV)-eN5S27{DJSS8b|L|^$U_I&x0pOu&vaff5$)bMmyW2_ipuZ zUjy09Riu|ymi0~#i{wCIbA4G=1zy+U$9{bFzX0uJprb8X6PyyEd6ANRl>DYSk6798 z-o{$OdR1Pyg4dNaFYK2`mxgj>r>+IH5f}O&BVvH)2HgNkMuj;Zl|R9V#9@;BzK}I) zs8#^-13#S;?}`EIaD?qz{#6YL*t10(Ib;*1twp^&hUP5d3*J4I`YB2;86`AVlmKeg zPzZz!?JK5WS_>(W{Dr6Wsg^mgn$i^HsHOF_Syk3FGvxL*bWcS14DxxJwqZsFt6K2@ zlAcVKEHB|fWx>NS?dE$CL&1sYU^$@rsPK579Oad-1sfQU!Yug1$-0e(gJ?fDJH)va zj!=qGuEOBjRELlfFGcB17@a1LbIHWoYtCJjuKzVkVes0SgTJWQX!sp981|g5kDkF- zT`U4L16U<{E_%R&tc0iarGT3mAszVxE`DIitG)u7g-wIj zs^O-|*w>FmBq$Hbvsu3N~ zGfS+qE+=M-Ss3AZe;1)PAv-IRA={qcmP*^?R*IK?+ltB#?#zUS!h92v?l}9DrQJCq zmwMh7DYJo>ix;#V%}618J(CSqHhrVR4u4G{hidUghwMl;x{X7x^{cDLVFp^KgZC_K z(f~UHYl*y2XYnA_Hl*un9>ha!-Yu|}l%4o=pMm}a^fgIxRP0(nfU~^oD z4Jm^f(Di{Q&t%XWlYpCwX0>B*uHc**GcVH8cY`@~>7G}hW>}!{mHc=;KfyX4D@W;y zCIf~MQB;|i^YjkVBfbYuRh+H7he76!F}Rul<>1Jk5UiQD$8D`U0jqm>k~_bPuDJgN z)n1*iXy*z8E_}Z2omhZm#af1%Nruuvvj+3FnSh%k769^~^JzA9lVMykrndbbXGjxI zWoLb(BpVb)pqB>{VOyC1b|H(0TeZ z!#Sf+M`l*5M0}8$?l}2B#sx~|WiNoDs7W1t9^JJkgyp>J_kNYTL_P+4u{l5aQDHAu z{^!BPL=KUnz+;?N`?a48$er{ZMoqm(f|0MIr=_21Z`)VTVoprSG#e(s9VAI?esang z{#?26b@HVOu*qKE6xetB{k;9zJ zVIe?M+^-RP0iU*gmzWD?^a4=3Krv{LNKbphk4;L5oAZ zYhWesiZN8#R35&8g(m%&p1C^+P#?Ruc~kdnO>1^z)n_(;edfN^oTC2|ObQiIJ3-3= z#AT>Hw0f2Dd1_#4|0psjndk66#_nRNX^8~la1GDu^f{-!5}!OxgJW8jzDRB0*=pp2 z4P@9@J>(cg+qzchjXb)efxVuC;Csfi?*eFQ*WCh^s>A4>z2TPx4#xSRTehgV$}$>1 zQ1f~|%A!j?sg!8j0Ts2!9smMpRlmFj*szHAzy~uRnz72{~)^79}iBihfVs?#;ev6G$Exwa$WKsU@I|t+dbA zv#c960AZCE*XNYZyTfe42mG{v2SbgoEyfD0&m239K z25pa`N5r}B_1N%nDeN{D0(0HL8fzg2s)XSn$O{M9gU|Ye)jPq%w?Kt(xUv%%tdvm> z_tN{h_!LJN-Vy4dVrmzr>30#T-SC*@6&3apjLKHaifYbYMvi0rAAI^irt9QOzbkz? zn2C!(PKHo&f+d=r=484~fGCyU8x2@%ud^*LKrSQ8{!T9SNzI)sMg5fcZ4jh|A3dk- zg$_VongCS~vZcJWTqSy{bdU5IUguz1a8Fg%0QYK<&i2H?g_jGpOJC6g5^oCv$2t2C zh|uOW^?oN>9R&mZ3SBZ)W+wGQc7qz2cZ~OcHdhz_3g5PIRiE(f@wus{V>gi7=|n|i z!8XjeL`xFIoxm;P8nirE1+3ssJO^boR#P7ydAY+n9YgWOw@-m)oZx2ZrwUK0;vevS zkf@r?bLQEhCmsf*bwf{;0nFv}ze;>Ujl$%e4%OFM4~LB)OE=%KmqHSXp?9RL=QQL5 zImRmw4D&0r!9~M1y;UqIG&QyW4T!Pgej z4$lwslY=~*$@@KW)|z|24ejsov(#&2w)$^-HC{{Dd}MS#z} zOtyuT0FRvD1#i1$E#S|lM3h&_0RpTvi_c}R4^#I6tKI`+-K zaHuDk%;MuVj$`%&-UVw8%q6zo)J_5p`f?yvrhhsntf?m5%*2*~TI%SzeaB$X63N=A zv_F{1fFyQr_@g=YW~anrx#XE#4?g+;={80BF0g4^*W80Lj8M+j)3o6%K-}gKIWR+r zyh8@pTsV6mF{+6gMf-5Y+dlBN6|z5ldiu06OpU$Pz*f}*TkL1cFX%`jc z+dPxdWkDu~u`)TQx~l_nQ>!y`4g{s1FR$MU&M&iE=n>xPG*v8PXN&tAx1SO`j2i(3nyDs+`6gAD6T?DSB{PAtD=P=eet4)FYC>I_&zu^LsfVAY%P@3XQ+;RTQGwfV`Tu&q(+bB1F|EWCdn4 zO5zfLGnUPqiP=z_=(=)Ww9cxqrR)~$TAEz>UtM{E4L{^lv#9o&sV;>7fDYGvDYIqC zITdpqYlRT$H(?aZu_>S^`0&)sHqpbW3%2wavUe~15r4eZs3M5kW0TE5B&cNygy{A; zgY-#f+L3G;Xk?NL1yWqb(n-bD*4ArM(cq^gN&iLoI>SWOLOQ4B5F#@vsjG|09!^VB z--kwy4YTVLyg%q^4LfmFuBD>o(~cFsc&bOm`?w&Y4iH4~q~cWw$u@P$a(Ga(^55_U zqsfx1ikV~Z0K;qtUd~OHC`9>Z@{WHo@QstJqyGyqYhU|a8Mp$&`d%7Cp42*&z&Bec z31iLyeZBj;w7Q#Dp@{fVA5r3VwTq9~lqNFcW<#ix^OF4iW^EKg%cxP9pwk$KjY*Xk z9@qL4r!hk3bL|N;Y1=Rt6rPF5-=9PkX&f#FfXIO^NgFW9|61g|64|E?jXlSrpP?J^ zvW5mQ_B9|!uur5Qo;FgAVPppWvHvi87P$1_h%}(j=-7xK>j?L{<8;$_l&x{z*86;B zp*p3n;`GQ%RFU(XL2G};x0@-5czV5E1EH8ID;QN ze2Xmlt`YTC=rM4OR_%{IMnFe7@psq}Wje+qKrnlH>H)WR%sR4$qStupV`M{r%5b^ z7qc5Sc;}Poo%T?m^et~J{08b40Q( zF*rXhJ6{q`o3@P8Y(1JA8cqi9qF2+!zsW=YE0r$p$L&I%MayCN47SUp zE{7>tptr4!(C2=G3n;bRrr6U%dVJPZ%z9uDNuFpOn+lr-u66K_c2stx$ONE58A9=M z-=~4B(QSX4S72%Cn|8I_(pU&3MXCsX0y5pIDi_YRu%0!2|x^fddSJNeYRW<4XeT| z8IBIR$fv@G+-iNCYej<1X4z57qNG1~K@m+3YZ>H{vl&rAn?_JQZ=1-juW+1JioI{v zQmZO1rRvqv((Gb{5P6*>vUfc(MrL&eY;35GYc3$E&uY>gQ>1?`F!f9VHj;n~TQeE5gy7 zVRHi0I4|MD>?KW(gC7MCT9WJ0ms*iVTBJg76bk#*f|ejXpXRT>bQ>tUfT)Y8s_`88s?XvSmb zQ5#_igI=r*I(qt8-q?41u(O^Uw4qSg=t;I}gr(Bq4v}Imhsrxd=W}7w)C1jV3x$>;2{ zg${~U3`l@LV^BLb=~G4O;?<&)LDXxTQj0Rd_Bsvi=jXlz^*RFK=yDs%X#?d(hkH{? zFWzuJ&IEfyyBRSRAVL-AWq_=rVj%tsCERo@#o$)d4sLafTLkfl=RL=?#yM2Hv`;1a zY0cV(7VCH!0@P5KyV1~O0u9PDZjG)%WR4dHa^Z&Pk*a({K&O%`&G-5H$2hw3Q4M;( z`qf)eyPn_3(@i>N*)_}u)DcxVb;%-IDBW5`YCEXvxf#a72@Cx3Zq%4oMIe?i^nu(m zPNPt%6~wM`lzB4B;h=%0LH@g9E)Qht>Pt#R4Q3#{n(IEi>~QE_YEp1QSj#C^S~{Nf5<)kFY^AKxxUpRlW%+dh`!vzUP6;E=l+FU_?2gP zUP&Z9ZiQsdR{%2+$F7!TZq(S560L_BZ0wwUor$1W8^to+&9r9wyHz;}cKzX+&M*43 zD6Fa7Wj^o}g_>yE8kDBFfrWisdms>g2%qTCG`=!Zmg>>_Zr;1=PKRWlKjB&fXR!k9d;bTw(qe&sstMVEj-i$b@;_-^p|Fn zX$3{3@v2?LfOscWW$);i<$SKG1*8%ac5a1>Kk_&#k0?JB^5H_7%%tsJjSw3~st_>R zpWq2<*vBcF1JcKa`jz}%UBFD~5I(>Cp0Jjft|0H~6$dXWvo>h}-NLAJ24w}9=Nrd2 z;ir^Ky7!GT96Z9mYN7twpZ|hy38S1USg7bN5R$ONGx*cj(MG-ls~|-_b>K!(@jtN| zLMjtRmy!Zo0I_dfi+f(d8%O>a6rb{)uFAC{{o}4E{Pv3E);6b4rtJmpY51|TO)O2U zi7iUV{9x<&zmM~tb=~L=nhsswXAu&}u!QPOR7n@$c@ddlDXFc}2Zt96gioHn?YBHi z$Z2SuCiap~qY(iRm;4Kqd)Zn8VzF=^z$UEH>>z0rYV$+6*d}d$Ql)JR?)`f~HxgN1 zXr>dI14uhbE5OWV%~OyB8CBy9w9x4ddlGWJ%({Lzogm_i93xVJq{~XfLGEdXsSAA^ zh`0~e*{qt)@-EB+Zr~>bvH-23>fi|TbvzBg*3!)q%C(q&a zx^paljlot+)zlqn0l6j-eXoY#w40_}X&1*oR0&IK=b8c1Wh@BnFa3)$-sU)G@v|=1 z4jzwCo5^oT_r@1HremKPD<%r-&7mi1I z(>s#8Y?vF?;a`^ldD`Mk8~-h_lX%M`G+0L0Sz9c0W2z;%Uo=VUmuGdX#LJ8beh1S& zZjtBf2qWX~mqAy{9`@-wIR0Km`uZZbRTpMJE-`F$;l%KTgxt0`Ozb4Mnb!v=>Kti} zKwmJW)%+c2erhgh(A0?}{gtaNdSKqgSU9iQt^PIEkQRsmz9o)aYCkGF$_QztOW0omWTa94WS zW({NkhRuA5z=(+Z;9qPD`ixTs{}&(U@swJ#e{hn9J}9(X;D7Ypty#eNTe>19f}PZw z@=>=Dxxn@rh~c0N$>g6X+z}P8klM+Phn5i{Q(|hrM7M&dbR*E=ZON-bwi{QKz5bzDAX~Y`7Z}TKmKO!D}~>Tv!L_HG#|Bbn2ZW739z| zG*Ws2Z@iL44cg701DCHe_y(b}jcz(bZwdsE$pXK2PlIVK7wrUXqbLfE61jh!}5y>42+edA;r)Ub)7|D!soUKpc>8!k(D`kF4ghA5@vku)2(%GMJH?FLN^Ug(L9S7ijkb)bM|oTj`x^yOGuLk zdww!Rny5o)bYW{tY;ddHB|-W!yN^1SGVGTre_p3vXZ=~DWDxgbrdaE54Q=?BAg`oW z0&Nn=NFBH=#MFeFEka8heap*Wmt<&d!Q)z{uktRnNRVHlVe_RtMtmhc-(|r^f|%wM zW7P=sqkOA%$8$8_EI53*_8;fU--U9B>H)hxK=AljB)4U;THEyXCD}V}r`GBt3QV*s z%fv$Td^4gB3}WZhm1gC#GW!cHGM%f8@yz?*Uez7=WM5=B?(U2hZW=DTrylvl^ua93 z(>nHA99SJQi0V+r7ub`;zZ>*mw_l(hFj`Yaf8in)_;ila9UM^}viWt*Ocf>RfycPVxpN1Dku~(TfpUTX zw@vwk`Ch?j=w{HJB`xf2kKlqH#MX=(;(}^QZGYmlXs*T-`Q*dC=g}<(H6jZWQJkFi z8}M0i6Gw~EXW_u;0?2OK41bRA)lWAAA;?XZ~7ih`CxicH9b!_4?rR(vNogy07{q@E@&XUd4 zn*Ve{HuHqzmuoi%bVGL*w_<|bMP{HS?~|wL+~(~yN?d@uFsMVj6{cZ@3oTuHV0p08 zgcmmwmU(ziC@O9G}c#+ zil*vka>?A+WO@SYPKc})?lo;kE!s%TpX62jsNwxT;E#fAMFn<5z{C7bLf%+Q>)S>w zW-t|dw-AlUUirj0I`4ar-Cf#F-RG$D{fmUO&>RTM^fQbFxs8jeKxT4V>-&ubhzIa& zwo$r1z1$Y0{4P%c?^DJ#Oc|p)l)K{gTdf=vK4qvPbpXXSHzM(8~Lj^&x=qq%Rz>o4Nwdo%S=gguntUE73|YZm(00#J>(j((j31Lj4X zQ|0&*zN>^Gjv^3QLeg1}YeouftHYPe>s1ZH%?<#NGzdog)@F(81@`8J(I~SR`ztTV zuQHH6J+4SuvD`4Dcel}KIA#~d?-59oZJ#M{XpazG`O7%}2kwl3DtWw?kh;G*A{|#3 zcHa!nid+r9B>Q;6kC7A$e=py*9gYGr7DE9eShnT7q`>Q1f5WJ#*~%@S<{?9rAr^mp z$l@B2na69lUo#eM1#yJazf3Gf(OGy|*ib%p#n@SfJKI&dEHp%-Rl)Jhz=_J-5)$ng z!&`Tothk!(;_^(r`B}A%)dLrgsJaSb42uyt8E|Fe@LH0PO|2SjZRGCjRJD%+w?G$gr zAJF2%GQUVycReKqFZdlHR#vohba`yHXt2JsPu~9ll8y0tD8C>kar5Yl*=A_WbIPuH z*_@hwX8#lq&3!^{K5N-R6~|6x4@Y-dG7N58jt@6QaU>S8LfM;b5k(J~QaT>8D3fIO zugKg`av`%MbRPlxH4NxS;fV`zDNDbM&xdM(bhL7VMpYP|riP9?3?7r@%$l(iW~!N` zo7b3KyurhE4flkgsvUwi9g%P0B`o|Wz^!SGochAdv!WT$FOW^2F}I7h*LF3D$h*&} zIh7tKlF@Ds(-N+8e0JbVV_YzD`P8VOIQ4wBpZ!zBg zda|ojy_!nhjvJC^sbfBvP@E>@-S7&Kf3^{P30?#}(8$=pZz8rO`?cp}ZNr}yM!m?f zk{Zdj-+1wb(TPK#sAeBP6hENzFg52aJ#3I|Q}lRZ3|_G1-I{H}TxasHhMQ9!t5gVv zNOC^VITkO?2dQ~PvI7>xRGA8?FQcJ|$o@Rw-^bej7ZEabrv;$oo}_Zv4mDNO8ex*m zg~i9+o|>NMf}T+7WX1WDT1=cIo-5wj9E5I_RI5zsz{pyed0tTc&V^@q*A%z z{m#~O-)r6CnUoAERRXy>h&iH;w0>r{zBy;dQ^x!Vm=BON# zM;=lDA0QEV1YH>56l`y=ExBxF!;OE!fQLOHOLK~QgQX)8EE6Lg;&61-VnbfUKQ?Kp!!i178J2POAcrKA zsSK1tQ(2%49k{{L_k>dyrHcOEv5wlnID0=Bn{}>9J+aEFv z@Tx;G^L+f-fXv|9G8F21xy&3jC z)|s}1y5I000AHUb&@j?#W5s&uSiI;B!9+NuloU2R0V*!H|4xzv8RQ6;mK@M`i`JsfvgA&n%LM|@0OYKiC{ zRS(b1p1=mSCSQFauut8nJ;8vzP7y}81k5pHgBwI;$?$)x5#otl=JTt#&h0ut1IYMC zb8W3*`XJ$?MIW6lbaEn(s}|*xn~3=_n$ZM$vKXBXLbO7oon#LrP{hzwH8Wzf}@Q z){9RS_2M^cYN!s{BRX({^3DrYyLJ(mg9~8-p5zVDe5psa^sR}ZsF?q=C)|iHqrYPl>j(@UiIrapMHTVk) zuasS8B+l*4Q)%e@J29eewFa8lf`U!ZYSp4tc{BxGIL?F7$@%U)SW8H3qG&_+&*{lEeg0vJ-N@#Fi?gD* zUSqa1AsA^Ob{bplX@iWzKrM+MYSOvqbnirLoACy_uR8qv%nqM=!P{Hj(FX5Lz{qiB zna>@Of(A7>pIUixs;2O*t&vfg0Az`1x@Imx`H+Q|b?43fPS>B$U?uxde-nf&vRI}! ze-ugf$P#jlpZ?n2Q!qZCQx`1H>yc!VOB)@D8L6dgobsPHru9WYDrL( zW6Uyg;dQdoL$)^D&oh4&I2N(@BKz9AR!dE*N#xg+I=-qq$80ce?ed>D*|dg?f6{xiP^8~ig5NPz*V>%Q@*AgQZLcjLJH8{mV6QHt(U2-99AW6v0 z_q|>mG?Pd_Rql8k-NiJx>$sGY&(dHohp+JNMhNQ#>M8#RFs?TD-+wio?{bkAX)IxG zoEHT0d@QzSz()JU&rH0X4MXAyuM#xIE>>H)iMUdO|9o-+hj|trlq7f#GSqD8_PgzF zh0H1i2eu$`hc=1EIpW>q1Z-bgv!&CJo5L6KWEQGI^n7QL3aONEGX_;V=z(^UoJ_ZEF5(dBTpp}%YVDGXG*5^&|n+sm_Jj8`8Ve@ z6O2Azas-sXm^$CEyU_Vfr!O;LYHWkXEHd{9=AVBx3V?a(SKIf$WHBOOB4tr1&Ev)} zgi=pt7+7Zz+c#_wE|LtQ$Q~4l~u#&J#8OlX^@Ga%WW zVMv#tUbxGGk{SCcmn(!6(gIYIxpbjRyygV)K1F$Q<{`dMV|P1k=nQDjL@8c?w=UjY zgmH&6HX=`SJ@M7pf~c4ov%&!_06#yG3h0tB(G;Ce{FBPlexD7l(V!2Kk-TaBXR{Qw zU|h(9fIK!PS27LG2Z>UBcZ3~8*NbmBOuy`AA&G6NYjrvZ?$%PD1B;nD@_OW{J`6lo zbqj62Y~EDTrB)rtbyo#nR_Mf|yweQ?xDsaL80LT%T!Nyn{CTpNTysBax+h$Spr;tx z1A@>b^8#C9do@hl1Q=5+44w(h_u7U%GToEOM)ZfGL<0*|R~6dSuB?Yr}hrqMn!D_0{ z%I@76wJ05RT9lxd%GPDF%=ZMn;>A5ES{9uW)-*i^QU)VZE-*C79G(hRL%&6VSj zzubA%mYeo7H1jadn+#~KW(3YcK}hRoG*`RjOgGr+oWqAJR06V4&3`?`UlJot;m!fw zF1$zr?TRDVmU*D@A-uw0os4$X;n;PP6+HtW_%Vphfv`pIlAC*_Z9nuUjktB+5D*+q3QjXk#BN2+|LSC92&S^ zkzKqEUxpqd{-%}w02t#BKcXLoq6p=5G>aFKGo56+q(k{u1Un*;S2r=dJRmHv`~qm# zS+sMy!59g&RrNVqTGp80=Ko02hjcZ1+;Y9Dy0ZZ2Ms>=~G*N5)X`n%kDNuzlHq-)_ z`io@hAB?-4P;hE1b;XBDXg^Ec?9*+MJGo$kl6plfgoNB~33x1xu=|&CM9gL>h}5>y zw{D)8f`hTHPPKtbywNoNrO?+ApFUhxD9r7(Qe@e~aqoTbo>~4ZWYm8v9!t6*Mgz9o zl!Pu;mRI#a=GAFCMKn`W0;FN4mD$YR##*ZR)cm-rpeM+3)|rDWej9^cZdsrsQmV+| z!M{i`N8J1g#GTPboR^Qyj;SuyOlY?Jk^fS85?tNR6ljYvk0NfbQMOyPYs!S42X78n zK}ZkK1-Z`fQF@a70^L32Q$Qu&`1zfu^_$SrIjk}iEzu~siFh7VCxE=MXN|rGfsd=4 zziAfyT*IKbL`4P%0Wj^Y8t_Q2(W6cXCuUdhp>3a?Qua>sVrkKN=`#RNvbVLkPwezy zJv`NOeS*A{ye|B38c2gMhe4b4_i7sxg2w`@mOp86lq%`k-g9u)GP&nG7*oM$UT)2f zte|ym^fZTSEDA_dKcDfqEgzra{}Y^q9o^SHQ=!A-HhzzZ=^Mz(Y4M#@wR4 z5$s!)J(nTdbc5ye4VhMd_3za%TB4gx8B<*7nI%%1U ze4GX~)SaqDf4iJ^9r=?x%JoW8|A6(rEZ!(!{I%743}Z+w^U{Hzaz|6*xC7&fP|*M0`N`0WdZ?5s6oEPk)6iih>1jIIoopswHBVXo&k=OK5i^NO;N%lK1& z41U@kyhuJ%?$M!`q<8>91XDOLs~|;c|1Gg1-RYH5GTfFgac87>1{ZY%SVf z5iglNa=35qIJ~jdIM1llmaKN>FmzFoUk}ia2~L4~7S4q@qT1jX1x{g56yYU+`@JD z4+zi|WAUVxt#mTf;#0xu*SlmBUlZ9DM5JM?k<|w0CWlXrfl&Gz4`{}RJS@eN9m~-& zv$?jk$`*kHk{#gP-#)u}<}WviiX|E^NuVcJi4+|hx*ExMXbWLv?IoKP~tTmZ$TWFtwG}z*(yBJpc zKM$^qCrhEcvpCN5S5wtX`=R7Fd{#mc0ct<;YRCDQG+BPGvCoz ztYQo;^1RTIVQ`msxxpIY{~a_e6Ogx8tq0SFFz>c~>smK}5H*=|+=~=LpJ8oGyvWFba@Cdv@?+xKiL( zbS|{#JdR_!9;Bte=$Gv;_dh{Ou_jVE;N`T%)Cjt0P6+n%%& zXrCmtSbvyMDXjis77c8_@dU|Kb}ph8%# zu*XvY+AWbe>CB@3&%12(0yu70tiXF*J8e4c~5U??esJ9mpSr+ILZ`2!DY^D!5GE2}IsU>BFJJ1|p}wnDKJ88N#lB(k8&M)>^68RmlRc*(~gdQt?xtHcQF@_SN1EJ-^v z#cYEXj&k)#doIHKy;{s2kjSM=Q;`NX74X8o?5q{(JbU{sVXywx4#Sg8GrB&HJs`S< zQa5hUBaIwHl?lLOO-@5s2wBrcb|4NvQ4qIa8j-5xDqIXFAP}4!(iRqT#yYc=rzF%| z+kxY0=lIK&AXj%n9be7DmRZ(k1S;}&?t-!SIkS$36tY@G3~Tq}^TPd$<;{Ejih zLq&Ti%P%#?fYo}G9S*7Xhp{!n3&wK?{~*zzI!s$YDYT#sv}?MkFLU-(8QJ@DRQ(Q* zX^mSgpcV(kn83Qmi=l%la_t1dzRSa~6BSdimr)duD66zU8ns~mYl`R-2sfa;%aL?_ zj9aB!%QSkarsO+8%Rplh+`C5Z(Dy=K*I}H7<0j*adY_QCG)y#T*;yt8dO7Z@{=~V zHj5I^lS|wgl2Bvx7aCQ~sC-|Z=VNhn?9#SXm>u`Xs3TrXddd~zTT2z6Q}23Xi5D*z zubT$jn`@f)u9aVMKA0P-%3uF-O2X{y@fdZLDQO4*BM|L(@-2T7RqH{|NWQWzRuJdf$Xc z)n}MWX>+y*lD#`DuY_1sd&k#p6#`a5Q;)~aUMp0QVlxosd7;Q=(Z~vvF<1uUgP86B z%=ukdon~;Ip-tdlda9sa)f(#dftb5LS0ZVL(Izs0q%^mbKoH4^4@4?8Gnjr)PE2Y{ z(eU!@>t4FJ5LikUP|_A(TG1esXv`$hI7*l^_IL+!rL)5!^eFD@;c!VDqOA_X` zwH4eQEomC(Wmm6)Ky=(8KC!%;ZgAmI!74>;Z6<4v^R>KEpkH04-k|V6yDLsn@b!j$z3TK=nMnkhmH__ z<9JiY%xxev5)T*~HMR9Z3=3klCga2{WBuqUWp2P}bmBDm%3WI#ix*Ca0A=YM4YQjh z`Y7H|4D@-J!5EVUY~@>8tK`DJdwgwSJ{`BGDH2_37=Q-1Utvd)B#ug%J~Hvb_|WIzrV z*zYVeGM*xo%IGQM@wAgSP_FxR_GaQ_q0!tenFO+$kR=b20Na)pdufy>9sO0)@ zEwpPM?e9t4>QhQxmIoK6MFQW|-rN=5*`M_%ft8wFQ-(p%A@w?qy>S%_hTB(j2?u`* zJdrvHFji&>wB{I#u%#^ZOg1+vEB_T7b#c+gBpCR+duesV&i@)BQCAy0Wlr<3$H}HW zV&uIZ$81HgI}_yW(RE%!Ea4*hDFx)mn*oUsuI*K{$db^=5S$^ND_srh=X|+(m!;dPt9v zNCWSGI5Y3qxsc+5OQJD!@}m=nD*fz$|495wXt@vkjIG37RY*q1Pth(GQeY*OxF11i zaaoJO{2O<-d1{Ql7Ws{J5*;9}A}}fZxh4eQLdp2d!xF<(-)`|jf9VGPJ)16|`gRrO z7<*K@Q;tRpSkk)R`EkI;CR)Sw1>ttjj0i7#M++CtBONOTC4?<4eZ>uk&1v5(!@a2( z7`}!4peSMx9St8J>f2CVYKc%T!g+6nb8;1r8zW^c4}$gEh{eYQ25QEOLBSiJq~Jqi zzc{~gLV=4sxNsX$iD>Z5_syng-@ufD!451uj{i8FMK|Ew&-cEYA{feClxG3QrYhtI`ZyRjEn{PC<`DVh)zL$>ru zQ0iMv%1*9bmHvyGWiLHeh3r_j;n^O+ZZfnMU=TVj=+=@qh0?WcOz`Z@PX89*1JpF! zsSuGbCT-@KpCr9XRT@(3_d1ju^Tnh{IlVb(mS{*A$X4#e;4u0{n%Hq?$VU!1~ydc+i-? z>m%(l5YwEXVs?@jBi{5w-8Nr#H+^p8fStBqc$Zd z^1L_ex}2P^(}q%V)I81ZTpGcMI?SC8>YhG11F*@hRUz}MpT*$6=6q3Pb@~d&7 zT_lP3MjwE5;6Y(3u#hqgKMY}8r zu+jcKN)q!gRn#m9w%N_wJ;X-}EB`~iC=86Yz`-k2-DjlcCoRm6A>oym*#eMxau8n3 zKw4A}O)~(rLOV<2G=wlV)&>{O^#%3wqLz2R4^V9*JEP655F;}`9v7Hu@QtWwWHL)1 zYU7^10a)dRd0w8U+eH1#w3%#zb~tJ9z7HwqN6R1)q{;l$mV)g_JBeafrlgOW*Y~_f zG9j72TsC|+95EM%Am+><{K-`P6yQWEM;^;=&dmmB97w}J{-lq%qb&e@V@7f6F8hD! z!0m?#u9W$H!xy29+835FGk6x_w?$fIArr~9%Inc<;vqE>vR&Z$qMA_*4h%-8?>VVhH|&^}$z{DP z)3V_G&VdJ}%{WIwFQH|5jl3QUFwO1BTN3dJ`5Oj~uO0NiRdWRJ?wajmk%DI}J&PZa> z`))3592|mb@y^30{@lS)lT=TQS0p7x&6`Xx8$fUVi!EkKI6hcIYkiye3^~V-uk{SEN$xB(-9CQU=)6YbPF`$ z#?nZky=M@O7{-3fkEoJZJ>wo3Wt%vRQ)70TM=?_l1{ww21d_aN9=N5P${e#7v1l7@ zGX>Sm%RQ3982i@Ghoz)0LOi84KfE3&Z{#_w(vxxp;6`+^9oK+Kz97ox=NKHuUDe?1 zF$O=P%5b=-2iiWrMN#*N-LaFS((l*QR&-nt$J6ad(p^OFnXuKY;!!rW|2hoeYk2CH zP|x@ygd`EqtL2|XcZx9#F7kwjHi6M>QCd7DUYxg!e(sYv4b&w)QU zK=|!1%!&Br|9{gC2>j|?Ly^0K9;1#w+EB4jdni&fiR0TP8H|5d@o8M}vDhVWAkX6nbZygT;pZDzaQ0pD!| zCIpwcgK1A<#&UISCXrljLIWXEndBFmY@qHo+9OYMoyOl0K{`VK2T3Le& zdtB8u256A6bZ(YlAGjf%vd6?Ws(3-*RFYYGEL}NfseQ<#{p%kIvcSzv_yotQ<7S?B z+w@%AAIrsF0gyj69LqkRdiz9w!j>A&Dj)GcH+4#0;EEc-yr<(4b;}OcYu`H6E(-q&B?Gtrqc7O!6c*(}@>%u+5N9IQT?~Xi`5@ z=FGbt@OQ0aPo=@pV1*)Ur7YY1VyD`nBkn{My-;d;Kg<7M_4!MHxIpe(Yr81|nS6+; zu-W`48FGcfyhFG~Q2N<$n1buDM=3HO@i;Mgfrt}=Ztk6ppcdGE@S0@Vpi0|)mT-}A zh}{DKdi-*F!w=}_5%6XvhY&a?Xc-GQ+zr7W*6w0L5Ma+bDQ#}{b)W~?f|D$#@2&V^ zo)2#8V-;D>uiFqYdT$%Iu0Bc`WX)ggF z{B^HfLvnsgU-Brpe~n1bjPbB1eMl)gR1fO`iTW}+KtM;~zC<%{!zakiljp!Yykh!| zo0jO6{yAb9`c7y^5p@VgwsbWxS!;$RJ~7(-UfH-id{4VKyzs`g%`qCEn@hm;+50!6 zb!{kJF55F#%dk4Nn72V*AUc^G<))4~Y_&jH2z}Au3kytTzA{+Y7aLNpRtAIT-Ev~)QK_lT!=bbbrzQfs&flE^0zHdv|qSc{Bq zk8<}r`Bjh+afjqf*QN{Man7fDQ!w3Y7y4~uEg(6e-}&Z?>ICDQe}ptrwH{;a8U;gl z_4pi$hLxS+?{LPGSd(J9&)D`p-oR;+F_6V^$`dHHQcsx>ROm?YzKJ0gc(rQ{bFW8Q z)^ck0zsaM(I6h*r$^s;VwGLGQ!AP{)wFQzDwIEg&WCPepT1zFb`hhE0NT{e(Y}_9w znuH3%@jbDuq`X?<%bxY^)gIX&33{)O;p_$Giz$x9c%n`EQQa{E+k<3-#NodZ3Di7e zneN~}*`JkK!@-M^?zEaTK-XXzJKEovzDqpsPcwqNnKXO@<`tpraEIF^5|ZF9e>}5w zDY=gzm6$r`I+O%7;R?>z>Jgmj^D(zboBiDUCBpXtxG9#+(iv%@@uImqF(co=oTLSq zQO1x3j`vb*=Gf{FZ*f@A{nx#$q%<*pro-W3eS0F=JY_mknVe6L&}Es#Yi=Mmt&whR z?-e+2nnbB)FvJq=!p_8nWL?HTr=|LtEW_E^(HrnC z;7avH?tP~gLFtbeLaYP*^>0d{G_O5SBeKWya;BTlaX}K!sE!OBz_AeUZXxD=QsZ1I@C@ee zpRBjt4-x7|Go(nh`CD{+IcAf)^Zb`6za8Y2Yr{TG@}YS7RUW~#N>v>25z}cbv7ybu zlC(5nnbU5YijefSpH3Ez3IB4y2q-a_4dEjVY7sPNArWraL%Y0|HhG)!&J8%^O)L3AuO#o95$$I6%;W9X9uB8B{ZJz{Z& zo6Z_d6Em^+Eo}b)oxR|k#E5_QZ&oP-(J}!P;uRk};|k%gYk8)Va4oMAu$_Lk(=GKX zI~R6B1X|l=ey28*ntZ=uzOG3E6qNhhJx7A*^8!0fHik!Mnvvo!dm3a5#<2lFqU$xc z{9B#D78bb%KbR1sJkdQdUtjF@A~BG$U|>TP18crrRyM(Ig(fw4YUv?iMZUO=C6cmW zj>+vep=r|!jsB{FMJnnS*uao%stNV2+rY=4t?lX6iV9mOK8cRCUwfb4NA1-u;g zr}WYRaAB{umei`_7Q+2O{iq;Ttu=6tU(#p@#(#S4&v{K+H`@g8O^)^Jj?X~~5|VM5 z%k9Y#lyt8B$*FYcTW6uh8nEwV?nGbcPBnO_Ad_gNI*6}9i80mu(d|>0b@MCB!(t!p z+)@=G^n;WAN6cNy7nXvSddtXogg9&kY1bKW$Q>|M&+7u@I{JX+!s20^Vs?{QNb+9} zUy14#?K}GXEVp~^!%1vDg-#`?ZYjL+}p_Yl$y(RFBBa@-=W~hCC%$Enpj=3nM>|#^uRW! zozE9l@wmwF5Q_Mf9p8u=Zu%`rf4ReMwGAC?Rb}|zeZGx2YX3=QF`bNQmW8(`R`Tpz z$iFbPVb5&a5+$;+!-^E|9+N)tHUwiku0dXvh5NY(5zxYwwkssB0t6oE*> zIT8o9?q(FR={k~7wZwgURoi9QGz#{bWhf`e>#!cP(VChG@#b&m#U}71f=qI_6G?*j z4vf$SCzRC@TJ2&=T2kX^4MQC<|AVIYs$KV4MhM485q?EK?Q#FxwLr+l!`; zf|pBzI+zSS;3_Igz+Jv$7ymtbg)-=_I|MF41@*7l73F8Q+u%}5pgpj&y$tk={~yB7 zKr|+26>9%aNbVh#{>vhQ%J6n|$Fi}I`FgQ^uWY=o*l+@fUXq2J?vKSy#|;A5H4l6@ zOFaF$rk;Z81mfTfVenoNn|Pvf@TpwoYss)oz>#V5va^{)u3slevh=eTkF7`|&Td$% z3*DT?Lb{V!C%{V2^SLrxeaLu^rvwAQs3|uSu7dImA}vGQ7F*=jT_H%?KG-*R)3#&& zZvjiy+KsU8m|t}z#EhWGLESUFbUhIGbeQ5*`w_hS7pcGMYPz@Fcn8F-smH8~A#J*b#)bQ%fLb6gv-EeZhSnK0*&=96{&_N+)I1^=yMPak}W-B`RtWlSAm-E5D z7uy2};n{)#m*q#}Q=CcdPW*<5q6O)~9xI@{67B<-K#((CuNZwdNkX@b3OWiD7?_DR z0YLb?4HhVnGh@9B7Z=Eq-~t!aTwY=sc8F<_wY?f&rcheL>D!jtF@nV<82H2V+Z@@e zghll70~HjNq?eEE5WTj~N;g(+%zahBpOb{Em_il69z@j01}T&4%A z&9CcH98~$$HD*}%nzqXZP^@leRKVf+_{3EGGh#`dXQl9%p}>#`wC63bXz_2pOx0kaujE4+#XCamAr|%>(^UuJ!$|@8a-;3bOAOEr8-^M7cqNn_coZ_?^Ss2MDFHV zq5=T^W{H=i&iAayL4+EM$CrVEM~{S7_b>v|?LWtkyH&1KLuXS%21tyLEM?E3uXeyf z`jpUE$DQx0wr*Xn8)uVQ_(|j0?eY&YdfUb1isf7rwb^iv5be=H1kZ zm-G$WbF_*lF@?{`gaaMWw>lf%&g|bj8q^+P&lzhm?Xs2Vg&`vlj?h;Fl+7m*UucLQ z(rp1}`NI);zW+YOcqC)hir)e(PY(attIRgG>Ay=RN5v+Tqg?cW~#9m)ni4 z&jE{6i|~KvHK4JgOt|9_b%sEY;2l9Dm0O1$bmL8DP2~qW7r)(q^u)T^5452yq{^T^ zLtL(ikFW<(6zu-h3%TEGax^(P5due9{@`bKkAk#`LX>;NV3$_n>q-)ye4;)4!MjFZf2#5dU=eYR*Y`s5o3h;5_4-1?3sIvm)bB!{JA!^@@fB|91s91k)hS>M%mo(FTQjOwmiF@RA zGs-UN^a+LvZqpZ>)!mTqPFFcK?-RQ7%NHzCwD8?v_@;qZyL_zfl=9@5w?5=QWHIW|0ojT_S+^Xm5mrMJLj@VHx2NL3sOf^sY=p!t( z1rm;?dmBBAg>`KKn1>z1Fm}(K$28ZKL@kQ0mNtnzp|P@B2|g(9x$7T+e%Mr(BuZxB zbR2zxoyiWvKzx|Txq`KtpUF9hvFcv2Qyrr{%m>YMTk{x0sZUDFEWb=U>(*)LFyw6;cdzn4 zq}L=oY??MqYJ9LtpNo$^1M_js$FD~x2`KKZ8fI_Kc-jquw2{rAtjg1FO%duB9MU=} z0-|(_F;=!LD=+bsHrqrW84RxfV7CpqP0LuW+<%?z@Z)1)xeeVOvwf{HIi z<4^Jrv)vowO<&qSp0wa?4v$4rGyuNCK>q2=lHfGNO>i}yh=0PIV4GZn{S|YRg3ke~ z@3dT~IBe{Y_I)X9t&RCjUDHhd^A$ z6^F4;8|}L~9Z7i;MfRsvb>6>J=& zwsVj7FxDMi=XENo(&CV+E_Ay|6wDEnFmTT9d~EmK{CpP6RyA8eaA{$bzn9dlZ25tz z%5wco?Xg70Lj#YbsGG$PIhUoZ>3T+9S2di8nnIjM?#u_9i z`C^i}@i3i?Z|5@zCRqyVZosnxt7F<8;V=MFiq;-%^DnFk0xdi0F#ZJ_n?$yY;ih5N zy)K+L(mF&yY0E18_|ijB3m|e}arLF~7&JotL%k9|^2zvimQS;{hLypZr^B~T)JiJC ze7_f-G@f~x?IxrNSpH0NnuJ!Wv>-e@R3|+3qPSA(ujp!pSf$1m_2Q2V=*G4UGua9( zGkJQ(rir@VG$FZkw$kqNfqjeYra28i+b~Jz7@&MEAJg`GUSw7NhLVVsGx>Ev6LxP> zRR~idy@Gy$Tuhy4KJK->EP_K2fSRWHt3paGiGod_*-!&juXotffO_0Z=|BYMDuPd;~EtB8NA=jKMY^pf@-Z;+-Iw}HJygv2Ov zfg#waP7F1P_;~U6-NN%OUY9EWYtC(0l{SC>L1#~Gjz+rhN;iW$ZUqjtEwR1!lABiF zL;-(d3LXs)w)`qDvQn$|9wLe_>Yr`&YtcjsyIPt610s)t2waOPp$SS9g4u#K9~nZq1&&qh(VT_rfM_*#v6_8z7Z=0CK_-veLs_VANKFxDey8WagIh zEd|<@%QP0t zF+RNTvCLjQ6m^Z9q_;;K@IxsY7#VbgumVQ?LsK9kWt2w3rOg&dz?^r!u_<*HsLbX} zZX%}0fIgZX14c9`u`ydNBhajIqI7y*tR)+wL24gP&*|cDk-PqWxKvEcI!DB~HJf=O zVCnc;Q&G66S7cwMG#5%Dht+7ZySAPL0HJ9Zi*E)R{{8D9C=Z$JTJAltUEitAD3{@u zYv<%mzRcWjRT)A6MU0q5W=gtfk2_y6B`@AZLR;BESXW#v^O?kgcvzueZrIi(g@n;i zXO4*eE>{YEOP=sVCB%O@ekp)pKT`U(W)KD8wMytaYqqFOwKcSK!zw+%y4ugT8NYrq zAQZ=|?MAa8)lX{SX}0csR0()5hxiscH_fU6{z|3R7NNnU>oq-5$dMA(qLR6iyshJ> zErL_Gk%L@F|F|2SfG|6P5SiN zI?zf)hiMUyI;Ue`?;CPE^iO1Xc0k*$pLhp6pA4%6Ii8#{s9QtQ-jQ=A346C;67Y2GuPdYpkomP{$ok; zCQU2eb9hfZJWkUAU;}P|k-TKn5y6RS+nZ`6^6rL3*#LPcar=XwWUZ9L7reNR2;g*q zY>0u+qjR>5sxr3Ph@JE}QdJX`zQj1z7~te02X)i=;?_pW5DY!nX3$r=KOW4$7{*38 zNCbDuiG*2c4VB8sZ}*I5TRPTY5QL0t^CQSF!4i5GriAfJ&iW?loIw)K&FM=SJ&SofRMC44}`PwSvG zQL*w@v+sskzycfJhoXZ7^Nl)VSi-#49n_SjS4oG6{==-kp%=~8y!5Lez3wzjxFPk9 zz_WKu?p;1%ZB5l~{39pVsBsPwp~15IsI^w#WCU9qu%puOwWjDbG7dj8gCBHU3JI2zUZ67|hwKLLz4RkPHk z+VTO4p}V7k$)30W835S`?j4>+&eVpHTUX4NJ~vL#m`@f&j0q#AM(`f% zDU9%PjYtXap`JHDMRI!xc&6>3qlT=GSP%3?a~N8N%8-|DmG#qsLG$);4hTmvacWm3 z7Fj#224B>!HjMG^kTtaGSsj^wEeHU8JmHCbiq^tvA7`d5nyL@~H;$z+f?@X4emi$} z({jVV=AJC`?wR}7Vch<#=VPB~cHwOhs`M*<=nK+b$}H@IKt^E(Ap1vnxR%N;j1l~0 z_k1()U56ZrJy489=W2uWwIHm(Up;FZu%&u*vp)|oWY4HIzlk(1mzK!lSX-m;wE>Jd zxPi*n&rAFTc|Ip^u?}h1Y}1TK!8EL2i$EZ1KwoS6g~2+-zE_IO@mgl}vq+G`l{XND zuheh@L5LwdeLe6ltc$3+W&LkuqYh@Kh>*7y1jP$~r&S|)q8%VnvW_}Y`1q~d*qcgN z2$97#je+fL-jX0IqX87NoKBf2!a~Ai@kZlyMQ>{%!Dl*y^Q1cjLL>}nmOJ+Rw=5ml zJ_M2*OLC}i(`>kR6XX+aZX#}H4R2b@T1OEl&adB+9Mqkm&Q_Zbw%?>JxT5NVpPb2W z{l$^~G5u!S`^<9W!|A;CF9DBW{BLb_{p>d^9qMrhCJo2N;-L{W!7S42_#g)q4+fOO zky!6uZgg{>s1f}stRGY4&fY4(Vg_8s&frJhkfk|&7quN5bulnP1I~3uC!;Yc?AhUh;MB7QT_mEH?f7^hBnU3OCkp_ zbLrU?fR{}eYUFV`vHCN?@hQH~Gh_Az>?bS)Y;dPa18TTZzw2WTz^b<^WE22FK)$~u zm!b_-ulLT{j*p!B4C&IHzrzS`hqW9ucZGGB=^^BQ8a-gdr+7F0PG?&m|9Dum>T9xM zT%>w2mUGz~B`=>U$cL}VIGEc<=kOZO4&nJ=U`TWFZSQ@5(`D<5d0Ji5YxHS2JAHjU zl9LQP#;mdBsvxiLS0Q^gRZlQ|$FwJRAok%EX_*FrTEbxO+IhLIlA+ynNNn+k!-(b1KTyj4HNIbuN)TRW>pUpxY*kcu7q^4O2&uut(tA={|f<~AV;cI*cQ?=dacfX>Fv?;yK;*q6&B>1OAd~u$w0mrJ2Oy= zj!}B!=zE@gWjMsml7@_TM&9RBE!g<6I<>8sEOWP!_2fsD=QM$OKJD8cUSYLc$#4IBb#0->nC?7=X>Su%6FfnKrI z#?QmC9utd>c=D*X9e!j z!S*MP7kp)XFPcKU&jcA2`z+u?uD9uV$-^AtSB0L$fT$r->{0YkJih#dOJ{6sdIcAoEvsNm_o7N>CVb2DXj94l0dkh$&_uk<{|40kupDV3LNe zw^sj3D?Z|-lH6zb&>R`(+$9?xg1KVIjv+NT?gl_D9bmQ76Ws_i;Tm?kk6%)P{xQCS z&0FMb)W}IXJ+Do@S(Cy@FK9sKk$+JW;wy1qx4@+TUA}DAwA)3fiGs*yQ8Qw)ww7=F zrWG!(a~*`#E{A_T0CA+K`Cgxx+4wF}XjaIZtdgku&wII!>O;X8&+9R0EI>G_qfH5z zXzP0UKkqX}9b~m=gn;|lnY5-}+0Aq&Aa@VZbYDnYgLviaR*H^@^x4DD``l04kz{bpxrpgP&rG!3zrwnJhARPs$Z*% z9hMmE&Hr?YAOxC_77{TGKb&=F{bwtK_@ZV54RKdoE*Op`3yZ=^FQCNPS0>)iR z|8Cy^WkNSM^CX=sLp1sS!wdN=8*zzl7fzUSg~NUNm_S zzI7B-B9_};h8g+a&?o_l@{}<~FDtxBb{?iw^7F(P&Or0gvGZ{FNx=pGcC!z9{9uA2 zCn4Q=&IS77vFpYtRkgE%n>8P^&m-=~E!mT`F%m+#&Xs%nxB~~GOiZ(f_T%`OJukUo z#n9o4Et#|_>@72mkhqc5%~4V>by3ZsA4ZCx*+S{OFq~)G*y4PP3KEHKj?w%I#K39< zePmcVP^w3tByP9(zqJJZPU4O~*rRxpoSmOB_EnIx=0J_Y^KN{A{bV?)Cx+INSLy!- za*?VSu=-;fEWaJm)iSVo0WrTOPP%%E7^?~P%(|+4BFP&X9^d0EUqfiGB8Kc`kwhn8-1F#GcVGZmk}PvO-tK#wf+CHK1xkKm zDRJ3>m7y&m8)CqAyW_bU4O`!t#%F;xt-3JRh(Y;4oGB+=&0oGH9%tQ(=nD=>LyrDu zTwEj$!r4CH4mOn2N!QBN)eb(ee+Zw|R9E%{>3b#=SOq_cjU$0=-uP#E%|x9W6I@Wy zuluyp`;}_QuWajJnMzn4sFVL~b*0|g}SGp@oWGB#A($*Vi zOiA3TjOM|t*{yS4{nUCC#X!@ufiU8|piPE^sE!M1L`)b#dn4Ue>Lj#Y&I1wxxB&kj zN@`>NswkOiPl3oG8g#{sx5vWW z;%i%3U%&~)I-xw&x7%!<3Tj z;59$YN#y691#BTqv`PO$94lTz0Q-`S?F@9_^DeO`w_HHv?ZLGBk?94MdGbO>BQ`9<}ETp1?Q%~)_tZmW8ZOB+t2zle3a>(T9G^{atb{Xv7i}g zG~qJM6-Tv8P`4~w-n04 z=(0$=xUP7};>HXebKQPm8&PI;w)zS=XQt>|>hK>R`<&S#G&??ic$w$(%Y4yX#SL2* zA8!UUOnQ`NUwiQcyCH{2@6Y@N8fp?e;J0jbP=Cmo?*BVu2q&<1pTd9IQ!EO$M`4%t zD0e~6sQW0T3R*cvT;cv-b2F;E-`47Qx}W=corQ<*YzjIxQ4ib`se#Il#N^PP=U;BE zuCz>B-66JgJ-l8WX#Kj+qAAv6Sd+LG>jySjYO)AHXn0PAi1H&K@5}%bGCe-%xO061uQSC|;o?5ptb?2Qz=IvhD@_ z4d8L4oEZUFQBJ6|3rJ`m^os@z2*+A#@kkXCkV~mdpsT{1A3Vcfe(MYlro+35JbYQv z*u756l^@a7#!$UsYvTIm1RF5%QBF>n8V@-VZ{fQWDz2^L>r8Pw^iJ8i9cQUgrxH7x zOEzY+aAGF#(&5p)j+ud?W+&q4DQ5U`0PA)oJCjyON-mlYxs{vo3scMLSBxkV!~E6j zedS}h?62d9mRyojYCKbjD8)L;_Ly3kDj9eo_s2BM@4Mp-D1#oU$HVVvuXS&#sm!|_ z!|H8Tu(RW8xLqyCtL&?ko~%XM*>(o3GAJBdp<<4v?l7Rc;=68q`T2Q6lp4bmt=uXd zsgmo8d@)i~zd@M$iGEUSdEfU7DB}(sPHmlAR%DZMEXx0=T|Mw$50#JvjUdX%9F%+Dg*r-Cr(q`=6{tr5oDe#T2C3tsO@ zK6PjzffKO_7|GyZCO&R!`C{5wC_2}VrSRB6A`71mr%9wEN@+f_@Tk{=3jWP5Z7^@$ zG5~fsj$cOUbNT8#9?hk<_k{V|?T)`O;YBOKG`B-QhA<2y`S}>8-~< zvfZ_S^GVn8cf_x^vZzb7VSKFHv?Fm`e%iW1tGlOm&91>5ayWEp2^d-n7`euDxfzI=u+cA+kQuu{lodttS z>aFsY^G2x%v2 zwh&)>-DAjFA12zfjhh_}t!4+xAfUS^+vrVQZKDZenGcJ+nJaVeCk2&%dfvw}X=x^e z)DgAr?AwaLrX6$jc=M7x>@%Cm+Umz~!ZtlotV~DWF%8KC7Uq>Sjro!;@oRUcjZtW0Io!zL4=m7?|I%BcvGlab}5_}dQ#wup!{46Q;_g8;U# z{pj63@xq%g9%azNu3-K|ny`B5V5nM8+5UJzY-mNg?XK`Tvw+zvyr2Sd2V7iysy5@LzkZ#i0^|3 z5nR&6p1#Js94{b`XEY-}+_CdWTu;>p%DVs+BX&uP9|vS#aAssY=RR9nvGhxAE?nH~ z#ARGl7|5Y92_>c*ycN#0He%oPVM~V~HBj#^0bC2bGZP_Vr89qvf9sZZ)YJZq(o6*F z^Gs93_f_!2UJhvz$_%xTEIWG%XcXK3h z(}dmeg^lppKY)u(ZawdOYxO)n8vdP?38xvox-IrRX(*O=GwoAHh;E;1=0W_h4C=&E zuZ3Ha4~M<-=NHQERFpZ!cI&M*ZX7ucLCBn0%EL}al<6Ds9*WAowKCg3?e{A9TG25uo%C)G2nFJ((+C_y zPFI%63%yyk#Q+z4_nJ$tA-}o z@(WB549lFIjD|Y1GEi28%x9G#vmhyt=MXCZ&4-NU@F}DGQkL0kU8uQUm1FBEnVh|z zg+SkEzm|6hX(>2;H9R7AryYTEw*QCz%YU*Ck_2=b(-=p5x}$f6n~Ts(@r>Zuh4qiQ zssyceO^{EuO2gQ4nu!XMp=X|e!4kf*4}vZBQxhbo8dT5G3yC$K;xjf?BtC1Y70!MY z3&DCoD5SOf%w!RfZ`hTH!XF1qp9Fv@se^Q_v`SB1<`sDBmQ*RGb9w`K3KNz`UVvRf ziiaY1&QcgLnzV%*dq#?9Oc#Rk(Mx<6Q}V6jtr#ZC(ok||iT^phudDHKqRPlqtw%Xv zs|Su^*B27-sJUofW<{vT>;Z@>$^@RGkHx^1^6O{ysFP=3{R;)wn&8UPE0FlnYo0YK zcof`_wvS1qG2$GsCN3yDqJ=+oyWXWq$j#5rzBY6lYyB2}6lM%YX-PduDg<{#veWF>}Yy+%gfnqT}}c3_(l060>J>8S!xODW3@R zcng0G*Hul9It4sTDjl6y(Kr&j=}wnq%Ut9Fl zw6tvr=$ss&Z6?&I)MVjSTLQ<G9ZV|4cMdqO7JE zcUM8+^I&rZc=&7Ep|p)jbnW#+FUh3GBC`7})6s%+3&Xg1a!o5H*wChxx|MhJBi66o zGJ##e?(qf@6~6OX8e4kn3_T{(F zQw4i_06wDS2g?BfOGDS-wu@^mgLr*Lj>gzi(HJ2_xcuOF1TmJAC(kZUh`+iYQnqPt zAc+n_HG~pOm8LfvNYn%jqf{Xj5x0+#{sZC~HI|0c2NO< zuuRkY(GQgj?TPkK<@^TzhD9)hZ(cvoICLt^0$p|74b3sJ@(y2mOP1peXx6 zPejtqw}L3l*`FP3{N}zh5;Iy8*z2!lh=J_w@{ol!R7a48Ag;S9TucMXPR2LoQQ)Ie zPZ5Z0?*ycSl7!4FBJ7wIkYO%_yhQW<{DpLzI7Ci3!}?b#yXH$As9riMb3O2-7x_lf zFf7NQ1u!)#yV^Gk`6%Z285D0OAiuUM`XMGaJ5pB!#LvHgrF%YOaJ{K}5JHH}{$
^|s|8KPhax4;l=f(3b@6paGp-lwbtXn;O0i}1 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 KXJv9AC^0Fwos&TT literal 0 HcmV?d00001 diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java b/apitest/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java index 718514ec0..5d12f4beb 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java @@ -21,6 +21,7 @@ import com.nimbusds.jose.jwk.KeyUse; import com.nimbusds.jose.jwk.RSAKey; +import io.mosip.testrig.apirig.dataprovider.BiometricDataProvider; import io.mosip.testrig.apirig.dbaccess.DBManager; import io.mosip.testrig.apirig.utils.AdminTestUtil; import io.mosip.testrig.apirig.utils.CertificateGenerationUtil; @@ -90,19 +91,18 @@ public static void main(String[] arg) { String updatedPartnerKeyURL = ""; String ekycPartnerKeyURL = ""; - if (BaseTestCase.listOfModules.contains("auth") - || BaseTestCase.listOfModules.contains(GlobalConstants.ESIGNET)) { - PartnerRegistration.deleteCertificates(); - CertificateGenerationUtil.getThumbprints(); - AdminTestUtil.createAndPublishPolicy(); - AdminTestUtil.createEditAndPublishPolicy(); - partnerKeyURL = PartnerRegistration.generateAndGetPartnerKeyUrl(); - updatedPartnerKeyURL = PartnerRegistration.generateAndGetUpdatedPartnerKeyUrl(); - - AdminTestUtil.createAndPublishPolicyForKyc(); - ekycPartnerKeyURL = PartnerRegistration.generateAndGetEkycPartnerKeyUrl(); + PartnerRegistration.deleteCertificates(); + CertificateGenerationUtil.getThumbprints(); + AdminTestUtil.createAndPublishPolicy(); + AdminTestUtil.createEditAndPublishPolicy(); + partnerKeyURL = PartnerRegistration.generateAndGetPartnerKeyUrl(); + updatedPartnerKeyURL = PartnerRegistration.generateAndGetUpdatedPartnerKeyUrl(); + + AdminTestUtil.createAndPublishPolicyForKyc(); + ekycPartnerKeyURL = PartnerRegistration.generateAndGetEkycPartnerKeyUrl(); + + BiometricDataProvider.generateBiometricTestData("Registration"); - } if (BaseTestCase.listOfModules.contains(GlobalConstants.MASTERDATA)) { AdminTestUtil.getHierarchyZoneCode(); diff --git a/apitest/src/main/resources/config/Kernel.properties b/apitest/src/main/resources/config/Kernel.properties index 02e7c0ba7..2e3ad297a 100644 --- a/apitest/src/main/resources/config/Kernel.properties +++ b/apitest/src/main/resources/config/Kernel.properties @@ -171,10 +171,11 @@ keycloak_UserName = admin keycloak_Password = sMDr9Ainw9 keycloak-external-url = https://iam.qa-inji.mosip.net keycloak-realm-id = mosip -iam-users-to-create = 111997,111998,220005,111992,globaladmin,111887 +iam-users-to-create = 111997,111998,220005,111992,globaladmin,111887,111999 iam-users-password = mosip123,mosip123,mosip123,mosip123,mosip123 roles.220005 = GLOBAL_ADMIN,ID_AUTHENTICATION,REGISTRATION_ADMIN,REGISTRATION_SUPERVISOR,ZONAL_ADMIN roles.111997 = AUTH_PARTNER,PARTNER_ADMIN,PMS_ADMIN,POLICYMANAGER,REGISTRATION_SUPERVISOR +roles.111999 = AUTH_PARTNER,PARTNER_ADMIN,PMS_ADMIN,POLICYMANAGER,REGISTRATION_SUPERVISOR roles.111887 = AUTH_PARTNER,PARTNER_ADMIN,PMS_ADMIN,REGISTRATION_SUPERVISOR roles.111998 = POLICYMANAGER roles.111992 = GLOBAL_ADMIN @@ -239,7 +240,7 @@ usePreConfiguredOtp=true # supported values yes or no. Assume that by Default e-signet is deployed eSignetDeployed=yes partnerUrlSuffix=oYf63Lax0DY2QkYMRHnrmDqhmO3RMWQagwm0ftgLlkuin1KOND/666/576732 -reportIgnoredTestCases=yes +reportIgnoredTestCases=no servicesNotDeployed= esignetMockBaseURL=esignet-insurance. slack-webhook-url= @@ -247,6 +248,7 @@ serverErrorsToMonitor=IDA-MLC-018 pmsAuthInternal=true partner_password=mosip123 partner_userName=111997 +partner_revamp_userName=111999 partner_user_password=mosip123 policytest_password=mosip123 policytest_userName=111998 @@ -268,11 +270,11 @@ langselect=0 #----------------------------------AuthDemoService Host properties----------------------------------------------------------# -#Uncommemnt the below to run locally -authDemoServiceBaseURL=http://localhost -authDemoServicePort=8082 -authCertsPath= -#Uncommemnt the below to run in Docker -#authDemoServiceBaseURL=http://authdemo.apitestrig -#authDemoServicePort=80 -#authCertsPath=/home/mosip/authcerts \ No newline at end of file +#authCertsPath= +authCertsPath=/home/mosip/authcerts + + + + +mosip_components_base_urls= +#auditmanager=api-internal.dev1.mosip.net;idrepository=api-internal.dev1.mosip.net;partnermanager=api-internal.qa-inji.mosip.net;idauthentication=api-internal.qa-inji.mosip.net;policymanager=api-internal.qa-inji.mosip.net \ No newline at end of file From 33da7cecfeb1a8c508684ec3690397cd3866ce02 Mon Sep 17 00:00:00 2001 From: abhip2565 <74866247+abhip2565@users.noreply.github.com> Date: Thu, 18 Jul 2024 18:16:38 +0530 Subject: [PATCH 180/860] [INJIMOB-1250] add api for fetching wellknown (#300) * [INJIMOB-1250] add api for fetching wellknown Signed-off-by: Abhishek Paul * [INJIMOB-1250] add unit tests and api test Signed-off-by: Abhishek Paul * [INJIMOB-1250] refactor changes Signed-off-by: Abhishek Paul * [INJIMOB-1250] separate draft11 and draft 13 wellknown response Signed-off-by: Abhishek Paul * [INJIMOB-1250] add controller test Signed-off-by: Abhishek Paul --------- Signed-off-by: Abhishek Paul --- .../controller/CredentialsController.java | 9 --- .../mimoto/controller/IssuersController.java | 29 ++++--- .../CredentialDefinitionResponseDto.java | 7 ++ .../mimoto/CredentialDisplayResponseDto.java | 5 ++ .../CredentialIssuerDisplayResponse.java | 8 ++ .../CredentialIssuerWellKnownResponse.java | 11 ++- ...dentialIssuerWellKnownResponseDraft11.java | 22 +++++ .../CredentialSupportedDisplayResponse.java | 9 ++- .../mimoto/CredentialsSupportedResponse.java | 7 +- .../CredentialsSupportedResponseDraft11.java | 26 ++++++ .../IssuerSupportedCredentialsResponse.java | 2 +- .../ProofSigningAlgValuesSupported.java | 7 ++ .../dto/mimoto/ProofTypesSupported.java | 12 +++ .../mosip/mimoto/service/IssuersService.java | 4 +- .../service/impl/CredentialServiceImpl.java | 54 ++++++------- .../service/impl/IssuersServiceImpl.java | 22 ++++- .../mimoto/controller/InjiControllerTest.java | 47 ++++++++--- .../mimoto/service/CredentialServiceTest.java | 12 ++- .../mimoto/service/IssuersServiceTest.java | 39 ++++++--- .../io/mosip/mimoto/util/TestUtilities.java | 81 ++++++++++++++++++- .../responses/expectedWellknown.json | 58 +++++++++++++ 21 files changed, 380 insertions(+), 91 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerWellKnownResponseDraft11.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponseDraft11.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/ProofSigningAlgValuesSupported.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/ProofTypesSupported.java create mode 100644 src/test/resources/responses/expectedWellknown.json diff --git a/src/main/java/io/mosip/mimoto/controller/CredentialsController.java b/src/main/java/io/mosip/mimoto/controller/CredentialsController.java index b06114eef..d038503dc 100644 --- a/src/main/java/io/mosip/mimoto/controller/CredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/CredentialsController.java @@ -2,27 +2,18 @@ import io.mosip.mimoto.core.http.ResponseWrapper; import io.mosip.mimoto.dto.ErrorDTO; -import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; -import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; -import io.mosip.mimoto.dto.mimoto.CredentialsSupportedResponse; -import io.mosip.mimoto.dto.mimoto.VCCredentialRequest; -import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; import io.mosip.mimoto.exception.ApiNotAccessibleException; -import io.mosip.mimoto.exception.IdpException; import io.mosip.mimoto.service.CredentialService; import io.mosip.mimoto.service.IdpService; import io.mosip.mimoto.service.IssuersService; import io.mosip.mimoto.util.DateUtils; -import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.InputStreamResource; import org.springframework.http.*; -import org.springframework.util.MultiValueMap; import org.springframework.web.bind.annotation.*; -import org.springframework.web.client.RestTemplate; import java.io.ByteArrayInputStream; import java.io.IOException; diff --git a/src/main/java/io/mosip/mimoto/controller/IssuersController.java b/src/main/java/io/mosip/mimoto/controller/IssuersController.java index 8070f0ec1..0c663e6d8 100644 --- a/src/main/java/io/mosip/mimoto/controller/IssuersController.java +++ b/src/main/java/io/mosip/mimoto/controller/IssuersController.java @@ -4,10 +4,8 @@ import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.IssuersDTO; -import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.exception.ApiNotAccessibleException; -import io.mosip.mimoto.exception.IdpException; import io.mosip.mimoto.service.CredentialService; import io.mosip.mimoto.service.IdpService; import io.mosip.mimoto.service.IssuersService; @@ -15,16 +13,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.io.InputStreamResource; import org.springframework.http.*; -import org.springframework.util.MultiValueMap; import org.springframework.web.bind.annotation.*; import org.springframework.web.client.RestTemplate; -import java.io.ByteArrayInputStream; import java.io.IOException; import java.util.List; -import java.util.Map; import static io.mosip.mimoto.exception.PlatformErrorMessages.*; import static io.mosip.mimoto.util.Utilities.handleExceptionWithErrorCode; @@ -61,6 +55,23 @@ public ResponseEntity getAllIssuers(@RequestParam(required = false) Stri return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); } + @GetMapping("/{issuer-id}/wellknown") + public ResponseEntity getIssuerWellknown(@PathVariable("issuer-id") String issuerId) { + ResponseWrapper responseWrapper = new ResponseWrapper<>(); + responseWrapper.setId(ID); + responseWrapper.setVersion("v1"); + responseWrapper.setResponsetime(DateUtils.getRequestTimeString()); + try { + CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = issuersService.getIssuerWellknown(issuerId); + responseWrapper.setResponse(credentialIssuerWellKnownResponse); + return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); + } catch (Exception exception) { + logger.error("Exception occurred while fetching issuers wellknown ", exception); + responseWrapper = handleExceptionWithErrorCode(exception); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); + } + } + @GetMapping("/{issuer-id}") public ResponseEntity getIssuerConfig(@PathVariable("issuer-id") String issuerId) { ResponseWrapper responseWrapper = new ResponseWrapper<>(); @@ -71,7 +82,7 @@ public ResponseEntity getIssuerConfig(@PathVariable("issuer-id") String IssuerDTO issuerConfig; try { issuerConfig = issuersService.getIssuerConfig(issuerId); - } catch (Exception exception ) { + } catch (Exception exception) { logger.error("Exception occurred while fetching issuers ", exception); responseWrapper = handleExceptionWithErrorCode(exception); return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); @@ -90,7 +101,7 @@ public ResponseEntity getIssuerConfig(@PathVariable("issuer-id") String @GetMapping("/{issuer-id}/credentialTypes") public ResponseEntity getCredentialTypes(@PathVariable("issuer-id") String issuerId, - @RequestParam(required = false) String search) { + @RequestParam(required = false) String search) { ResponseWrapper responseWrapper = new ResponseWrapper<>(); responseWrapper.setId(ID); responseWrapper.setVersion("v1"); @@ -98,7 +109,7 @@ public ResponseEntity getCredentialTypes(@PathVariable("issuer-id") Stri IssuerSupportedCredentialsResponse credentialTypes; try { credentialTypes = credentialService.getCredentialsSupported(issuerId, search); - }catch (ApiNotAccessibleException | IOException exception){ + } catch (ApiNotAccessibleException | IOException exception) { logger.error("Exception occurred while fetching credential types", exception); responseWrapper.setErrors(List.of(new ErrorDTO(API_NOT_ACCESSIBLE_EXCEPTION.getCode(), API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDefinitionResponseDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDefinitionResponseDto.java index ce001b8a7..d71c34199 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDefinitionResponseDto.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDefinitionResponseDto.java @@ -1,5 +1,7 @@ package io.mosip.mimoto.dto.mimoto; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.google.gson.annotations.SerializedName; import lombok.Data; import java.util.List; @@ -7,6 +9,11 @@ @Data public class CredentialDefinitionResponseDto { + @SerializedName("type") + @JsonProperty("type") private List type; + + @SerializedName("credentialSubject") + @JsonProperty("credentialSubject") private Map credentialSubject; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDisplayResponseDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDisplayResponseDto.java index caa4faa42..8f5ff40f1 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDisplayResponseDto.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDisplayResponseDto.java @@ -1,10 +1,15 @@ package io.mosip.mimoto.dto.mimoto; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.google.gson.annotations.SerializedName; import lombok.Data; import java.util.List; @Data public class CredentialDisplayResponseDto { + + @SerializedName("display") + @JsonProperty("display") private List display; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerDisplayResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerDisplayResponse.java index 5a6cf6832..801e5ac79 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerDisplayResponse.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerDisplayResponse.java @@ -1,9 +1,17 @@ package io.mosip.mimoto.dto.mimoto; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.google.gson.annotations.SerializedName; import lombok.Data; @Data public class CredentialIssuerDisplayResponse { + + @SerializedName("name") + @JsonProperty("name") private String name; + + @SerializedName("locale") + @JsonProperty("locale") private String locale; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerWellKnownResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerWellKnownResponse.java index 5cb868cc5..70d5bfc7e 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerWellKnownResponse.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerWellKnownResponse.java @@ -5,6 +5,7 @@ import lombok.Data; import java.util.List; +import java.util.Map; @Data public class CredentialIssuerWellKnownResponse { @@ -12,11 +13,15 @@ public class CredentialIssuerWellKnownResponse { @JsonProperty("credential_issuer") private String credentialIssuer; + @SerializedName("authorization_servers") + @JsonProperty("authorization_servers") + private List authorizationServers; + @SerializedName("credential_endpoint") @JsonProperty("credential_endpoint") private String credentialEndPoint; - @SerializedName("credentials_supported") - @JsonProperty("credentials_supported") - private List credentialsSupported; + @SerializedName("credential_configurations_supported") + @JsonProperty("credential_configurations_supported") + private Map credentialConfigurationsSupported; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerWellKnownResponseDraft11.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerWellKnownResponseDraft11.java new file mode 100644 index 000000000..cb08857a6 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerWellKnownResponseDraft11.java @@ -0,0 +1,22 @@ +package io.mosip.mimoto.dto.mimoto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.google.gson.annotations.SerializedName; +import lombok.Data; + +import java.util.List; + +@Data +public class CredentialIssuerWellKnownResponseDraft11 { + @SerializedName("credential_issuer") + @JsonProperty("credential_issuer") + private String credentialIssuer; + + @SerializedName("credential_endpoint") + @JsonProperty("credential_endpoint") + private String credentialEndPoint; + + @SerializedName("credentials_supported") + @JsonProperty("credentials_supported") + private List credentialsSupported; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialSupportedDisplayResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialSupportedDisplayResponse.java index 09ee09d84..5dea516e3 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialSupportedDisplayResponse.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialSupportedDisplayResponse.java @@ -8,6 +8,7 @@ import javax.validation.Valid; import javax.validation.constraints.NotBlank; +import java.util.Map; @Data public class CredentialSupportedDisplayResponse { @@ -16,13 +17,19 @@ public class CredentialSupportedDisplayResponse { @NotBlank String name; + @Expose + @NotBlank + String locale; + @Expose @Valid LogoDTO logo; + @JsonProperty("background_image") + @SerializedName("background_image") @Expose @NotBlank - String locale; + Map backgroundImage; @JsonProperty("background_color") @SerializedName("background_color") diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java index d81f464e2..dcf2b2030 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java @@ -5,22 +5,23 @@ import lombok.Data; import java.util.List; +import java.util.Map; import java.util.Set; @Data public class CredentialsSupportedResponse { private String format; - private String id; private String scope; @SerializedName("proof_types_supported") @JsonProperty("proof_types_supported") - private List proofTypesSupported; + private Map proofTypesSupported; @SerializedName("credential_definition") @JsonProperty("credential_definition") private CredentialDefinitionResponseDto credentialDefinition; + @SerializedName("display") + @JsonProperty("display") private List display; - private Set order; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponseDraft11.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponseDraft11.java new file mode 100644 index 000000000..ec176265c --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponseDraft11.java @@ -0,0 +1,26 @@ +package io.mosip.mimoto.dto.mimoto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.google.gson.annotations.SerializedName; +import lombok.Data; + +import java.util.List; +import java.util.Set; + +@Data +public class CredentialsSupportedResponseDraft11 { + private String format; + private String id; + private String scope; + + @SerializedName("proof_types_supported") + @JsonProperty("proof_types_supported") + private List proofTypesSupported; + + @SerializedName("credential_definition") + @JsonProperty("credential_definition") + private CredentialDefinitionResponseDto credentialDefinition; + + private List display; + private Set order; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/IssuerSupportedCredentialsResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/IssuerSupportedCredentialsResponse.java index 1a2ecc86b..e535d6e91 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/IssuerSupportedCredentialsResponse.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/IssuerSupportedCredentialsResponse.java @@ -9,5 +9,5 @@ public class IssuerSupportedCredentialsResponse { @JsonProperty("authorization_endpoint") private String authorizationEndPoint; - private List supportedCredentials; + private List supportedCredentials; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/ProofSigningAlgValuesSupported.java b/src/main/java/io/mosip/mimoto/dto/mimoto/ProofSigningAlgValuesSupported.java new file mode 100644 index 000000000..679205b84 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/ProofSigningAlgValuesSupported.java @@ -0,0 +1,7 @@ +package io.mosip.mimoto.dto.mimoto; + +import java.util.List; + +public class ProofSigningAlgValuesSupported { + List algValues; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/ProofTypesSupported.java b/src/main/java/io/mosip/mimoto/dto/mimoto/ProofTypesSupported.java new file mode 100644 index 000000000..fa72a24ca --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/ProofTypesSupported.java @@ -0,0 +1,12 @@ +package io.mosip.mimoto.dto.mimoto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.google.gson.annotations.SerializedName; + +import java.util.Map; + +public class ProofTypesSupported { + @SerializedName("proof_signing_alg_values_supported") + @JsonProperty("proof_signing_alg_values_supported") + private Map proofSigningAlgValuesSupported; +} diff --git a/src/main/java/io/mosip/mimoto/service/IssuersService.java b/src/main/java/io/mosip/mimoto/service/IssuersService.java index 5ade20c3e..e5cd3fe74 100644 --- a/src/main/java/io/mosip/mimoto/service/IssuersService.java +++ b/src/main/java/io/mosip/mimoto/service/IssuersService.java @@ -5,9 +5,7 @@ import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.InvalidIssuerIdException; -import org.apache.http.auth.InvalidCredentialsException; -import java.io.ByteArrayInputStream; import java.io.IOException; public interface IssuersService { @@ -16,4 +14,6 @@ public interface IssuersService { IssuersDTO getAllIssuersWithAllFields() throws ApiNotAccessibleException, IOException; IssuerDTO getIssuerConfig(String issuerId) throws ApiNotAccessibleException, IOException, InvalidIssuerIdException; + + CredentialIssuerWellKnownResponse getIssuerWellknown(String issuerId) throws ApiNotAccessibleException, IOException; } diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java index 3df74b9b4..50eabfaba 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java @@ -82,11 +82,11 @@ public TokenResponseDTO getTokenResponse(Map params, String issu @Override public ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String credentialType, TokenResponseDTO response) throws Exception { IssuerDTO issuerConfig = issuerService.getIssuerConfig(issuerId); - CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = getCredentialIssuerWellknown(issuerId, credentialType); - CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupported(credentialIssuerWellKnownResponse, credentialType); - VCCredentialRequest vcCredentialRequest = generateVCCredentialRequest(issuerConfig, credentialsSupportedResponse, response.getAccess_token()); - VCCredentialResponse vcCredentialResponse = downloadCredential(credentialIssuerWellKnownResponse.getCredentialEndPoint(), vcCredentialRequest, response.getAccess_token()); - return generatePdfForVerifiableCredentials(vcCredentialResponse, issuerConfig, credentialsSupportedResponse, credentialIssuerWellKnownResponse.getCredentialEndPoint()); + CredentialIssuerWellKnownResponseDraft11 credentialIssuerWellKnownResponseDraft11 = getCredentialIssuerWellknown(issuerId, credentialType); + CredentialsSupportedResponseDraft11 credentialsSupportedResponseDraft11 = getCredentialSupported(credentialIssuerWellKnownResponseDraft11, credentialType); + VCCredentialRequest vcCredentialRequest = generateVCCredentialRequest(issuerConfig, credentialsSupportedResponseDraft11, response.getAccess_token()); + VCCredentialResponse vcCredentialResponse = downloadCredential(credentialIssuerWellKnownResponseDraft11.getCredentialEndPoint(), vcCredentialRequest, response.getAccess_token()); + return generatePdfForVerifiableCredentials(vcCredentialResponse, issuerConfig, credentialsSupportedResponseDraft11, credentialIssuerWellKnownResponseDraft11.getCredentialEndPoint()); } public VCCredentialResponse downloadCredential(String credentialEndpoint, VCCredentialRequest vcCredentialRequest, String accessToken) throws ApiNotAccessibleException, IOException, InvalidCredentialsException { @@ -97,31 +97,31 @@ public VCCredentialResponse downloadCredential(String credentialEndpoint, VCCred return vcCredentialResponse; } - public VCCredentialRequest generateVCCredentialRequest(IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String accessToken) throws Exception { + public VCCredentialRequest generateVCCredentialRequest(IssuerDTO issuerDTO, CredentialsSupportedResponseDraft11 credentialsSupportedResponseDraft11, String accessToken) throws Exception { String jwt = joseUtil.generateJwt(issuerDTO.getCredential_audience(), issuerDTO.getClient_id(), accessToken); return VCCredentialRequest.builder() - .format(credentialsSupportedResponse.getFormat()) + .format(credentialsSupportedResponseDraft11.getFormat()) .proof(VCCredentialRequestProof.builder() - .proofType(credentialsSupportedResponse.getProofTypesSupported().get(0)) + .proofType(credentialsSupportedResponseDraft11.getProofTypesSupported().get(0)) .jwt(jwt) .build()) .credentialDefinition(VCCredentialDefinition.builder() - .type(credentialsSupportedResponse.getCredentialDefinition().getType()) + .type(credentialsSupportedResponseDraft11.getCredentialDefinition().getType()) .context(List.of("https://www.w3.org/2018/credentials/v1")) .build()) .build(); } - public ByteArrayInputStream generatePdfForVerifiableCredentials(VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String credentialEndPoint) throws Exception { + public ByteArrayInputStream generatePdfForVerifiableCredentials(VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, CredentialsSupportedResponseDraft11 credentialsSupportedResponseDraft11, String credentialEndPoint) throws Exception { LinkedHashMap displayProperties = new LinkedHashMap<>(); Map credentialProperties = vcCredentialResponse.getCredential().getCredentialSubject(); LinkedHashMap vcPropertiesFromWellKnown = new LinkedHashMap<>(); - Map credentialSubject = credentialsSupportedResponse.getCredentialDefinition().getCredentialSubject(); + Map credentialSubject = credentialsSupportedResponseDraft11.getCredentialDefinition().getCredentialSubject(); credentialSubject.keySet().forEach(VCProperty -> vcPropertiesFromWellKnown.put(VCProperty, credentialSubject.get(VCProperty).getDisplay().get(0).getName())); - Set orderProperty = credentialsSupportedResponse.getOrder(); + Set orderProperty = credentialsSupportedResponseDraft11.getOrder(); Set fieldProperties = orderProperty == null ? vcPropertiesFromWellKnown.keySet() : orderProperty; fieldProperties.forEach(vcProperty -> { @@ -129,17 +129,17 @@ public ByteArrayInputStream generatePdfForVerifiableCredentials(VCCredentialResp displayProperties.put(vcPropertiesFromWellKnown.get(vcProperty), credentialProperties.get(vcProperty)); } }); - return getPdfResourceFromVcProperties(displayProperties, credentialsSupportedResponse, vcCredentialResponse, + return getPdfResourceFromVcProperties(displayProperties, credentialsSupportedResponseDraft11, vcCredentialResponse, issuerDTO.getDisplay().stream().map(d -> d.getLogo().getUrl()).findFirst().orElse("")); } - private ByteArrayInputStream getPdfResourceFromVcProperties(LinkedHashMap displayProperties, CredentialsSupportedResponse credentialsSupportedResponse, VCCredentialResponse vcCredentialResponse, String issuerLogoUrl) throws IOException, WriterException { + private ByteArrayInputStream getPdfResourceFromVcProperties(LinkedHashMap displayProperties, CredentialsSupportedResponseDraft11 credentialsSupportedResponseDraft11, VCCredentialResponse vcCredentialResponse, String issuerLogoUrl) throws IOException, WriterException { Map data = new HashMap<>(); LinkedHashMap rowProperties = new LinkedHashMap<>(); - String backgroundColor = credentialsSupportedResponse.getDisplay().get(0).getBackgroundColor(); - String textColor = credentialsSupportedResponse.getDisplay().get(0).getTextColor(); - String credentialSupportedType = credentialsSupportedResponse.getDisplay().get(0).getName(); + String backgroundColor = credentialsSupportedResponseDraft11.getDisplay().get(0).getBackgroundColor(); + String textColor = credentialsSupportedResponseDraft11.getDisplay().get(0).getTextColor(); + String credentialSupportedType = credentialsSupportedResponseDraft11.getDisplay().get(0).getName(); String face = vcCredentialResponse.getCredential().getCredentialSubject().get("face") != null ? (String) vcCredentialResponse.getCredential().getCredentialSubject().get("face") : null; displayProperties.entrySet().stream() @@ -159,7 +159,7 @@ private ByteArrayInputStream getPdfResourceFromVcProperties(LinkedHashMap issuerCredentialsSupported = response.getCredentialsSupported(); + List issuerCredentialsSupported = response.getCredentialsSupported(); credentialTypesWithAuthorizationEndpoint.setAuthorizationEndPoint(issuerDto.getAuthorization_endpoint()); credentialTypesWithAuthorizationEndpoint.setSupportedCredentials(issuerCredentialsSupported); @@ -250,24 +250,24 @@ public IssuerSupportedCredentialsResponse getCredentialsSupported(String issuerI } return credentialTypesWithAuthorizationEndpoint; } - public CredentialIssuerWellKnownResponse getCredentialIssuerWellknown(String issuerId, String search) throws ApiNotAccessibleException, IOException { - CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = new CredentialIssuerWellKnownResponse(); + public CredentialIssuerWellKnownResponseDraft11 getCredentialIssuerWellknown(String issuerId, String search) throws ApiNotAccessibleException, IOException { + CredentialIssuerWellKnownResponseDraft11 credentialIssuerWellKnownResponseDraft11 = new CredentialIssuerWellKnownResponseDraft11(); IssuersDTO issuersDto = issuerService.getAllIssuersWithAllFields(); Optional issuerConfigResp = issuersDto.getIssuers().stream() .filter(issuer -> issuer.getCredential_issuer().equals(issuerId)) .findFirst(); if (issuerConfigResp.isPresent()) { IssuerDTO issuerDto = issuerConfigResp.get(); - credentialIssuerWellKnownResponse = restApiClient.getApi(issuerDto.getWellKnownEndpoint(), CredentialIssuerWellKnownResponse.class); - if (credentialIssuerWellKnownResponse == null) { + credentialIssuerWellKnownResponseDraft11 = restApiClient.getApi(issuerDto.getWellKnownEndpoint(), CredentialIssuerWellKnownResponseDraft11.class); + if (credentialIssuerWellKnownResponseDraft11 == null) { throw new ApiNotAccessibleException(); } } - return credentialIssuerWellKnownResponse; + return credentialIssuerWellKnownResponseDraft11; } - public CredentialsSupportedResponse getCredentialSupported(CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse, String credentialType) throws ApiNotAccessibleException, IOException, InvalidCredentialsException { - Optional credentialsSupportedResponse = credentialIssuerWellKnownResponse.getCredentialsSupported().stream() + public CredentialsSupportedResponseDraft11 getCredentialSupported(CredentialIssuerWellKnownResponseDraft11 credentialIssuerWellKnownResponseDraft11, String credentialType) throws ApiNotAccessibleException, IOException, InvalidCredentialsException { + Optional credentialsSupportedResponse = credentialIssuerWellKnownResponseDraft11.getCredentialsSupported().stream() .filter(credentialsSupported -> credentialsSupported.getId().equals(credentialType)) .findFirst(); if (credentialsSupportedResponse.isEmpty()){ diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index d10988d3c..c3e64f23d 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -6,6 +6,7 @@ import io.mosip.kernel.core.logger.spi.Logger; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.IssuersDTO; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.InvalidIssuerIdException; import io.mosip.mimoto.service.IssuersService; @@ -15,8 +16,10 @@ import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.io.*; -import java.util.*; + +import java.io.IOException; +import java.util.List; +import java.util.Optional; import java.util.stream.Collectors; @@ -27,6 +30,10 @@ public class IssuersServiceImpl implements IssuersService { @Autowired private Utilities utilities; + @Autowired + private RestApiClient restApiClient; + + @Override public IssuersDTO getAllIssuers(String search) throws ApiNotAccessibleException, IOException { IssuersDTO issuers; @@ -67,7 +74,6 @@ public IssuersDTO getAllIssuersWithAllFields() throws ApiNotAccessibleException, } - @Override public IssuerDTO getIssuerConfig(String issuerId) throws ApiNotAccessibleException, IOException { IssuerDTO issuerDTO = null; @@ -85,4 +91,14 @@ public IssuerDTO getIssuerConfig(String issuerId) throws ApiNotAccessibleExcepti throw new InvalidIssuerIdException(); return issuerDTO; } + + @Override + public CredentialIssuerWellKnownResponse getIssuerWellknown(String issuerId) throws ApiNotAccessibleException, IOException { + IssuerDTO issuerConfig = getIssuerConfig(issuerId); + String wellknown = issuerConfig.getWellKnownEndpoint(); + String wellknownJson = restApiClient.getApi(wellknown, String.class); + return new Gson().fromJson(wellknownJson, CredentialIssuerWellKnownResponse.class); + } } + + diff --git a/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java b/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java index 45ba3afb1..901f88090 100644 --- a/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java @@ -8,10 +8,7 @@ import io.mosip.kernel.websub.api.model.SubscriptionChangeResponse; import io.mosip.mimoto.TestBootApplication; import io.mosip.mimoto.core.http.ResponseWrapper; -import io.mosip.mimoto.dto.DisplayDTO; -import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.IssuersDTO; -import io.mosip.mimoto.dto.LogoDTO; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.dto.resident.*; import io.mosip.mimoto.exception.ApiNotAccessibleException; @@ -25,6 +22,7 @@ import io.mosip.mimoto.service.impl.IssuersServiceImpl; import io.mosip.mimoto.util.*; import org.hamcrest.Matchers; +import org.json.JSONObject; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; @@ -33,6 +31,8 @@ import org.mockito.InjectMocks; import org.mockito.Mockito; import org.powermock.core.classloader.annotations.PrepareForTest; +import org.skyscreamer.jsonassert.JSONAssert; +import org.skyscreamer.jsonassert.JSONCompareMode; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; @@ -41,8 +41,10 @@ import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.util.ReflectionTestUtils; import org.springframework.test.web.servlet.MockMvc; +import org.springframework.util.ResourceUtils; import java.io.ByteArrayInputStream; +import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.util.*; @@ -51,6 +53,8 @@ import static io.mosip.mimoto.exception.PlatformErrorMessages.API_NOT_ACCESSIBLE_EXCEPTION; import static io.mosip.mimoto.exception.PlatformErrorMessages.INVALID_ISSUER_ID_EXCEPTION; import static io.mosip.mimoto.util.TestUtilities.*; +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.verify; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; @@ -94,6 +98,8 @@ public class InjiControllerTest { @MockBean Utilities utilities; + @Autowired + IssuersController issuersController; @MockBean private AttestationOfflineVerify attestationOfflineVerify; @@ -136,16 +142,16 @@ public void getAllPropertiesTest() throws Exception { @Test - public void getCredentialTypesTest() throws Exception{ + public void getCredentialTypesTest() throws Exception { IssuerSupportedCredentialsResponse credentialTypesResponse = new IssuerSupportedCredentialsResponse(); - credentialTypesResponse.setSupportedCredentials(List.of(getCredentialSupportedResponse("credentialType1"), - getCredentialSupportedResponse("credentialType2"))); + credentialTypesResponse.setSupportedCredentials(List.of(getCredentialSupportedResponseDraft11("credentialType1"), + getCredentialSupportedResponseDraft11("credentialType2"))); credentialTypesResponse.setAuthorizationEndPoint("authorization-endpoint"); Mockito.when(credentialService.getCredentialsSupported("Issuer1", null)) .thenReturn(credentialTypesResponse) .thenThrow(new ApiNotAccessibleException()); Mockito.when(credentialService.getCredentialsSupported("invalidId", null)) - .thenReturn(new IssuerSupportedCredentialsResponse()); + .thenReturn(new IssuerSupportedCredentialsResponse()); mockMvc.perform(get("/issuers/{issuer-id}/credentialTypes", "Issuer1").accept(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) @@ -182,12 +188,12 @@ public void generatePdfForVCTest() throws Exception { .thenThrow(new ApiNotAccessibleException()); Mockito.when(restApiClient.getApi(ArgumentMatchers.any(String.class), ArgumentMatchers.any())) - .thenReturn(getCredentialIssuerWellKnownResponseDto("Issuer1", - List.of(getCredentialSupportedResponse("CredentialType1")))); + .thenReturn(getCredentialIssuerWellKnownResponseDtoDraft11("Issuer1", + List.of(getCredentialSupportedResponseDraft11("CredentialType1")))); Mockito.when(credentialService.generatePdfForVerifiableCredentials(new VCCredentialResponse(), - getIssuerDTO("Issuer1"), getCredentialSupportedResponse("CredentialType1"), + getIssuerDTO("Issuer1"), getCredentialSupportedResponseDraft11("CredentialType1"), "credential_endpoint")) .thenReturn(new ByteArrayInputStream("Mock Pdf".getBytes())) .thenThrow(new Exception()); @@ -290,6 +296,27 @@ public void getIssuerConfigTest() throws Exception { .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); } + @Test + public void getIssuerWellknownTest() throws Exception { + String issuerId = "id1"; + File file = ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX + "responses/expectedWellknown.json"); + String expectedCredentialIssuerWellknownResponse = new String(Files.readAllBytes(file.toPath())); + CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = getCredentialIssuerWellKnownResponseDto(issuerId, Map.of("CredentialType1", getCredentialSupportedResponse("Credential1"))); + Mockito.when(issuersService.getIssuerWellknown(issuerId)).thenReturn(credentialIssuerWellKnownResponse); + + + String actualResponse=mockMvc.perform(get("/issuers/" + issuerId + "/wellknown").accept(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isOk()) + .andReturn() + .getResponse() + .getContentAsString(); + + + JSONAssert.assertEquals(new JSONObject(expectedCredentialIssuerWellknownResponse),new JSONObject(actualResponse),JSONCompareMode.LENIENT); + + } + + @Test public void processOfflineTest() throws Exception { AttestationStatement attestationStatement = new AttestationStatement(); diff --git a/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java index 5eaa705c9..3ad520490 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java @@ -1,8 +1,6 @@ package io.mosip.mimoto.service; -import com.google.gson.Gson; import io.mosip.mimoto.dto.IssuersDTO; -import io.mosip.mimoto.dto.LogoDTO; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.service.impl.CredentialServiceImpl; @@ -58,15 +56,15 @@ public void setUp() throws Exception { @Test public void shouldReturnIssuerCredentialSupportedResponseForTheIssuerIdIfExist() throws Exception { IssuerSupportedCredentialsResponse expectedIssuerCredentialsSupported = new IssuerSupportedCredentialsResponse(); - List credentialsSupportedResponses =List.of(getCredentialSupportedResponse("CredentialSupported1"), - getCredentialSupportedResponse("CredentialSupported2")); + List credentialsSupportedResponsDraft11s =List.of(getCredentialSupportedResponseDraft11("CredentialSupported1"), + getCredentialSupportedResponseDraft11("CredentialSupported2")); String authorization_endpoint = getIssuerConfigDTO("Issuer1", issuerConfigRelatedFields).getAuthorization_endpoint(); - expectedIssuerCredentialsSupported.setSupportedCredentials(credentialsSupportedResponses); + expectedIssuerCredentialsSupported.setSupportedCredentials(credentialsSupportedResponsDraft11s); expectedIssuerCredentialsSupported.setAuthorizationEndPoint(authorization_endpoint); - Mockito.when(restApiClient.getApi(any(String.class), any())).thenReturn(getCredentialIssuerWellKnownResponseDto("Issuer1", - List.of(getCredentialSupportedResponse("CredentialSupported1"), getCredentialSupportedResponse("CredentialSupported2")))); + Mockito.when(restApiClient.getApi(any(String.class), any())).thenReturn(getCredentialIssuerWellKnownResponseDtoDraft11("Issuer1", + List.of(getCredentialSupportedResponseDraft11("CredentialSupported1"), getCredentialSupportedResponseDraft11("CredentialSupported2")))); IssuerSupportedCredentialsResponse issuerSupportedCredentialsResponse = credentialService.getCredentialsSupported("Issuer1id", null); assertEquals(issuerSupportedCredentialsResponse, expectedIssuerCredentialsSupported); } diff --git a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java index 2ec8565e1..58006d801 100644 --- a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java @@ -1,19 +1,15 @@ package io.mosip.mimoto.service; import com.google.gson.Gson; -import io.mosip.mimoto.dto.DisplayDTO; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.IssuersDTO; -import io.mosip.mimoto.dto.LogoDTO; -import io.mosip.mimoto.dto.mimoto.*; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.InvalidIssuerIdException; import io.mosip.mimoto.service.impl.CredentialServiceImpl; import io.mosip.mimoto.service.impl.IssuersServiceImpl; import io.mosip.mimoto.util.RestApiClient; import io.mosip.mimoto.util.Utilities; -import org.apache.velocity.VelocityContext; -import org.apache.velocity.app.Velocity; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -21,18 +17,19 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; -import org.springframework.boot.test.context.SpringBootTest; import java.io.IOException; -import java.io.StringWriter; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; -import static io.mosip.mimoto.util.TestUtilities.getIssuerConfigDTO; -import static org.junit.Assert.*; -import static org.mockito.ArgumentMatchers.any; +import static io.mosip.mimoto.util.TestUtilities.*; +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; @RunWith(MockitoJUnitRunner.class) -@SpringBootTest public class IssuersServiceTest { @InjectMocks @@ -41,6 +38,9 @@ public class IssuersServiceTest { @InjectMocks CredentialServiceImpl credentialService = new CredentialServiceImpl(); + @Mock + RestApiClient restApiClient; + @Mock Utilities utilities; @@ -86,6 +86,21 @@ public void shouldReturnIssuerDataAndConfigForTheIssuerIdIfExist() throws ApiNot assertEquals(expectedIssuer, issuer); } + @Test + public void shouldReturnIssuerWellknownForTheIssuerIdIfExist() throws ApiNotAccessibleException, IOException { + String issuerId = "Issuer1id"; + String wellKnownUrl = "/.well-known"; + CredentialIssuerWellKnownResponse expextedCredentialIssuerWellKnownResponse=getCredentialIssuerWellKnownResponseDto("Issuer1", + Map.of("CredentialType1",getCredentialSupportedResponse("CredentialType1"))); + + Mockito.when(restApiClient.getApi(wellKnownUrl , String.class)) + .thenReturn(getExpectedWellKnownJson()); + + CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse=issuersService.getIssuerWellknown(issuerId); + assertEquals(expextedCredentialIssuerWellKnownResponse,credentialIssuerWellKnownResponse); + verify(restApiClient, times(1)).getApi(wellKnownUrl, String.class); + } + @Test public void shouldReturnIssuerDataAndConfigForAllIssuer() throws ApiNotAccessibleException, IOException { IssuersDTO expectedIssuers = new IssuersDTO(); diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index bf2178ad9..3e425725d 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -6,10 +6,39 @@ import io.mosip.mimoto.dto.mimoto.*; import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.Map; public class TestUtilities { + public static CredentialsSupportedResponseDraft11 getCredentialSupportedResponseDraft11(String credentialSupportedName){ + LogoDTO logo = new LogoDTO(); + logo.setUrl("/logo"); + logo.setAlt_text("logo-url"); + CredentialSupportedDisplayResponse credentialSupportedDisplay = new CredentialSupportedDisplayResponse(); + credentialSupportedDisplay.setLogo(logo); + credentialSupportedDisplay.setName(credentialSupportedName); + credentialSupportedDisplay.setLocale("en"); + credentialSupportedDisplay.setTextColor("#FFFFFF"); + credentialSupportedDisplay.setBackgroundColor("#B34622"); + CredentialIssuerDisplayResponse credentialIssuerDisplayResponse = new CredentialIssuerDisplayResponse(); + credentialIssuerDisplayResponse.setName("Given Name"); + credentialIssuerDisplayResponse.setLocale("en"); + CredentialDisplayResponseDto credentialDisplayResponseDto = new CredentialDisplayResponseDto(); + credentialDisplayResponseDto.setDisplay(Collections.singletonList(credentialIssuerDisplayResponse)); + CredentialDefinitionResponseDto credentialDefinitionResponseDto = new CredentialDefinitionResponseDto(); + credentialDefinitionResponseDto.setType(List.of("VerifiableCredential", credentialSupportedName)); + credentialDefinitionResponseDto.setCredentialSubject(Map.of("name", credentialDisplayResponseDto)); + CredentialsSupportedResponseDraft11 credentialsSupportedResponseDraft11 = new CredentialsSupportedResponseDraft11(); + credentialsSupportedResponseDraft11.setFormat("ldp_vc"); + credentialsSupportedResponseDraft11.setId(credentialSupportedName+"id"); + credentialsSupportedResponseDraft11.setScope(credentialSupportedName+"_vc_ldp"); + credentialsSupportedResponseDraft11.setDisplay(Collections.singletonList(credentialSupportedDisplay)); + credentialsSupportedResponseDraft11.setProofTypesSupported(Collections.singletonList("jwt")); + credentialsSupportedResponseDraft11.setCredentialDefinition(credentialDefinitionResponseDto); + return credentialsSupportedResponseDraft11; + } + public static CredentialsSupportedResponse getCredentialSupportedResponse(String credentialSupportedName){ LogoDTO logo = new LogoDTO(); logo.setUrl("/logo"); @@ -30,19 +59,28 @@ public static CredentialsSupportedResponse getCredentialSupportedResponse(String credentialDefinitionResponseDto.setCredentialSubject(Map.of("name", credentialDisplayResponseDto)); CredentialsSupportedResponse credentialsSupportedResponse = new CredentialsSupportedResponse(); credentialsSupportedResponse.setFormat("ldp_vc"); - credentialsSupportedResponse.setId(credentialSupportedName+"id"); credentialsSupportedResponse.setScope(credentialSupportedName+"_vc_ldp"); credentialsSupportedResponse.setDisplay(Collections.singletonList(credentialSupportedDisplay)); - credentialsSupportedResponse.setProofTypesSupported(Collections.singletonList("jwt")); + credentialsSupportedResponse.setProofTypesSupported(new HashMap<>()); credentialsSupportedResponse.setCredentialDefinition(credentialDefinitionResponseDto); return credentialsSupportedResponse; } - public static CredentialIssuerWellKnownResponse getCredentialIssuerWellKnownResponseDto(String issuerName, List credentialsSupportedResponses){ + public static CredentialIssuerWellKnownResponseDraft11 getCredentialIssuerWellKnownResponseDtoDraft11(String issuerName, List credentialsSupportedResponseDraft11sDraft11s){ + CredentialIssuerWellKnownResponseDraft11 credentialIssuerWellKnownResponseDraft11 = new CredentialIssuerWellKnownResponseDraft11(); + credentialIssuerWellKnownResponseDraft11.setCredentialIssuer(issuerName); + credentialIssuerWellKnownResponseDraft11.setCredentialEndPoint("/credential_endpoint"); + credentialIssuerWellKnownResponseDraft11.setCredentialsSupported(credentialsSupportedResponseDraft11sDraft11s); + return credentialIssuerWellKnownResponseDraft11; + } + + + + public static CredentialIssuerWellKnownResponse getCredentialIssuerWellKnownResponseDto(String issuerName, Map credentialsSupportedResponses){ CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = new CredentialIssuerWellKnownResponse(); credentialIssuerWellKnownResponse.setCredentialIssuer(issuerName); credentialIssuerWellKnownResponse.setCredentialEndPoint("/credential_endpoint"); - credentialIssuerWellKnownResponse.setCredentialsSupported(credentialsSupportedResponses); + credentialIssuerWellKnownResponse.setCredentialConfigurationsSupported(credentialsSupportedResponses); return credentialIssuerWellKnownResponse; } public static IssuerDTO getIssuerDTO(String issuerName) { @@ -70,6 +108,41 @@ public static IssuerDTO getIssuerDTO(String issuerName) { return issuer; } + public static String getExpectedWellKnownJson() { + return "{" + + "\"credential_issuer\": \"Issuer1\"," + + "\"credential_endpoint\": \"/credential_endpoint\"," + + "\"credential_configurations_supported\": {" + + "\"CredentialType1\": {" + + "\"format\": \"ldp_vc\"," + + "\"scope\": \"CredentialType1_vc_ldp\"," + + "\"display\": [{" + + "\"logo\": {" + + "\"url\": \"/logo\"," + + "\"alt_text\": \"logo-url\"" + + "}," + + "\"name\": \"CredentialType1\"," + + "\"locale\": \"en\"," + + "\"text_color\": \"#FFFFFF\"," + + "\"background_color\": \"#B34622\"" + + "}]," + + "\"proof_types_supported\": {}," + + "\"credential_definition\": {" + + "\"type\": [\"VerifiableCredential\", \"CredentialType1\"]," + + "\"credentialSubject\": {" + + "\"name\": {" + + "\"display\": [{" + + "\"name\": \"Given Name\"," + + "\"locale\": \"en\"" + + "}]" + + "}" + + "}" + + "}" + + "}" + + "}" + + "}"; + } + public static IssuerDTO getIssuerConfigDTO(String issuerName, List nullFields) { LogoDTO logo = new LogoDTO(); logo.setUrl("/logo"); diff --git a/src/test/resources/responses/expectedWellknown.json b/src/test/resources/responses/expectedWellknown.json new file mode 100644 index 000000000..e61f1e176 --- /dev/null +++ b/src/test/resources/responses/expectedWellknown.json @@ -0,0 +1,58 @@ +{ + "id": "mosip.mimoto.issuers", + "version": "v1", + "str": null, + "metadata": null, + "response": + { + "credential_issuer": "id1", + "authorization_servers": null, + "credential_endpoint": "/credential_endpoint", + "credential_configurations_supported": + { + "CredentialType1": + { + "format": "ldp_vc", + "scope": "Credential1_vc_ldp", + "proof_types_supported": {}, + "credential_definition": + { + "type": + [ + "VerifiableCredential", + "Credential1" + ], + "credentialSubject": + { + "name": + { + "display": + [ + { + "name": "Given Name", + "locale": "en" + } + ] + } + } + }, + "display": + [ + { + "name": "Credential1", + "locale": "en", + "logo": + { + "url": "/logo", + "alt_text": "logo-url" + }, + "background_image": null, + "background_color": "#B34622", + "text_color": "#FFFFFF" + } + ] + } + } + }, + "errors": [] +} \ No newline at end of file From 9d28fb4bd0a9f089f0e6a79cce0635107c2c58c9 Mon Sep 17 00:00:00 2001 From: Swati Goel Date: Fri, 19 Jul 2024 13:32:12 +0530 Subject: [PATCH 181/860] [INJIMOB-1665] - remove unused property Signed-off-by: Swati Goel --- .talismanrc | 6 +- .../config/mimoto-default.properties | 1 - .../java/io/mosip/mimoto/util/Utilities.java | 15 +- .../resources/application-local.properties | 3 +- .../resources/wellKnownIssuer/Insurance.json | 170 ------------------ 5 files changed, 6 insertions(+), 189 deletions(-) delete mode 100644 src/main/resources/wellKnownIssuer/Insurance.json diff --git a/.talismanrc b/.talismanrc index 51f7ba942..6bb31fd6e 100644 --- a/.talismanrc +++ b/.talismanrc @@ -36,9 +36,9 @@ fileignoreconfig: - filename: src/main/java/io/mosip/mimoto/util/WebSubSubscriptionHelper.java checksum: c25969b732f7dd0fd49262c68983d85611cb78800b8080d9f63f7ed9eeb0251b - filename: src/main/java/io/mosip/mimoto/util/Utilities.java - checksum: 71605c7209583dd3494e6778403ec89fb5f78f00db06c1b9b8512da20621390b + checksum: 52ac8d1e6fcf3f662a757eef2774357165a618c29d8e1fa6e97395bad3c24065 - filename: src/main/resources/application-local.properties - checksum: 4fd09fe56696b8156663da5e06c9c072bddd2007f81a87fdc69ce8f3acdee08b + checksum: 6d0725d775fca0de0a05733640ad1ef615cfd1dfb41a0680823a60f961e7c932 - filename: src/test/java/io/mosip/mimoto/config/MimotoConfig.java checksum: ba189011b924fe58a804281c88a190b9b969d21bc485e03206471f69be1a1b5d - filename: src/main/java/io/mosip/mimoto/util/JsonUtil.java @@ -74,4 +74,4 @@ fileignoreconfig: - filename: docker-compose/docker-compose.yml checksum: 857f5dcebdef810161b9ef09ad078c091c7d9969035bc45132975b296675dac9 - filename: docker-compose/config/mimoto-default.properties - checksum: 7d48484daa8b3e6e53d8a5958dd3597207d4bd1368a8422d99c9b28d4aefc247 \ No newline at end of file + checksum: 746b60fa10a8c2c10c00bd35313407186db7aef0762f99e919bbc42fdc597824 \ No newline at end of file diff --git a/docker-compose/config/mimoto-default.properties b/docker-compose/config/mimoto-default.properties index 0bc11d23c..01f7010b0 100644 --- a/docker-compose/config/mimoto-default.properties +++ b/docker-compose/config/mimoto-default.properties @@ -255,7 +255,6 @@ mosip.notificationtype=SMS|EMAIL|PHONE # Configurations related to openid4vc mosip.openid.issuers=mimoto-issuers-config.json -mosip.openid.issuer.credentialSupported=sunbird-insurance-wellKnown.json mosip.openid.htmlTemplate=credential-template.html mosip.oidc.client.assertion.type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer mosip.oidc.p12.filename=oidckeystore.p12 diff --git a/src/main/java/io/mosip/mimoto/util/Utilities.java b/src/main/java/io/mosip/mimoto/util/Utilities.java index 0fdfee164..83981e980 100644 --- a/src/main/java/io/mosip/mimoto/util/Utilities.java +++ b/src/main/java/io/mosip/mimoto/util/Utilities.java @@ -104,9 +104,6 @@ public class Utilities { @Value("${mosip.openid.issuers}") private String getIssuersConfigJson; - @Value("${mosip.openid.issuer.credentialSupported}") - private String getIssuerCredentialSupportedJson; - @Value("${mosip.openid.htmlTemplate}") private String getCredentialSupportedHtml; @@ -118,16 +115,13 @@ public class Utilities { private String issuersConfigJsonString = null; - private String credentialsSupportedJsonString = null; - private String credentialTemplateHtmlString = null; + // uncomment for running mimoto Locally to populate the issuers json -// public Utilities(@Value("classpath:/wellKnownIssuer/Insurance.json") Resource credentialsSupportedResource, -// @Value("classpath:mimoto-issuers-config.json") Resource resource, +// public Utilities(@Value("classpath:mimoto-issuers-config.json") Resource resource, // @Value("classpath:/templates/CredentialTemplate.html") Resource credentialTemplateResource) throws IOException{ // // issuersConfigJsonString = (Files.readString(resource.getFile().toPath())); -// credentialsSupportedJsonString = (Files.readString(credentialsSupportedResource.getFile().toPath())); // credentialTemplateHtmlString = (Files.readString(credentialTemplateResource.getFile().toPath())); // } @@ -311,11 +305,6 @@ public static ResponseWrapper handleExceptionWithErrorCode(Exception exc return getErrorResponse(errorCode, errorMessage); } - public String getCredentialsSupportedConfigJsonValue() throws IOException{ - return (credentialsSupportedJsonString != null && !credentialsSupportedJsonString.isEmpty()) ? - credentialsSupportedJsonString : getJson(configServerFileStorageURL, getIssuerCredentialSupportedJson); - } - public String getCredentialSupportedTemplateString() throws IOException{ return (credentialTemplateHtmlString != null && !credentialTemplateHtmlString.isEmpty()) ? credentialTemplateHtmlString : getJson(configServerFileStorageURL, getCredentialSupportedHtml); diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index ef23e6d92..37c2361fe 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -199,10 +199,9 @@ wallet.binding.partner.api.key=Aci9jg28B8mO_LDfDXo3ZTp5_HKgEMun2tYyHCa1e8k #wallet.binding.partner.api.key=14378 # OpenID +#configurations related to openid4vc mosip.openid.issuers=mimoto-issuers-config.json -mosip.openid.issuer.credentialSupported=/wellKnownIssuer/Insurance.json mosip.openid.htmlTemplate=CredentialTemplate.html -#configurations related to openid4vc mosip.oidc.client.assertion.type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer mosip.oidc.p12.filename=oidckeystore.p12 mosip.oidc.p12.password=5YBx6QT2wbY8Ls6w diff --git a/src/main/resources/wellKnownIssuer/Insurance.json b/src/main/resources/wellKnownIssuer/Insurance.json deleted file mode 100644 index a701f1f0c..000000000 --- a/src/main/resources/wellKnownIssuer/Insurance.json +++ /dev/null @@ -1,170 +0,0 @@ -{ - "credential_issuer": "MosipInsurance", - "credential_endpoint": "http://localhost:8088/v1/esignet/vci/credential", - "credentials_supported": [ - { - "format": "ldp_vc", - "id": "InsuranceCredential", - "scope": "sunbird_rc_insurance_vc_ldp", - "cryptographic_binding_methods_supported": [ - "did:jwk" - ], - "cryptographic_suites_supported": [ - "RsaSignature2018" - ], - "proof_types_supported": [ - "jwt" - ], - "credential_definition": { - "type": [ - "VerifiableCredential", - "InsuranceCredential" - ], - "credentialSubject": { - "fullName": { - "display": [ - { - "name": "Full Name", - "locale": "en" - } - ] - }, - "policyName": { - "display": [ - { - "name": "Policy Name", - "locale": "en" - } - ] - }, - "policyNumber": { - "display": [ - { - "name": "Policy Number", - "locale": "en" - } - ] - }, - "gender": { - "display": [ - { - "name": "Gender", - "locale": "en" - } - ] - }, - "expiresOn": { - "display": [ - { - "name": "Expiry Date", - "locale": "en" - } - ] - }, - "dob": { - "display": [ - { - "name": "Date Of Birth", - "locale": "en" - } - ] - } - } - }, - "display": [ - { - "name": "MOSIP Insurance", - "locale": "en", - "logo": { - "url": "https://api.qa-inji1.mosip.net/inji/mosip-logo.png", - "alt_text": "insurance logo" - }, - "background_color": "#fafcff", - "text_color": "#00284d" - } - ] - }, - { - "format": "ldp_vc", - "id": "LifeInsuranceCredential_ldp", - "scope": "life_insurance_vc_ldp", - "cryptographic_binding_methods_supported": [ - "did:jwk" - ], - "cryptographic_suites_supported": [ - "RsaSignature2018" - ], - "proof_types_supported": [ - "jwt" - ], - "credential_definition": { - "type": [ - "VerifiableCredential", - "LifeInsuranceCredential" - ], - "credentialSubject": { - "fullName": { - "display": [ - { - "name": "Full Name", - "locale": "en" - } - ] - }, - "policyName": { - "display": [ - { - "name": "Policy Name", - "locale": "en" - } - ] - }, - "policyNumber": { - "display": [ - { - "name": "Policy Number", - "locale": "en" - } - ] - }, - "gender": { - "display": [ - { - "name": "Gender", - "locale": "en" - } - ] - }, - "policyExpiresOn": { - "display": [ - { - "name": "Expiry Date", - "locale": "en" - } - ] - }, - "dob": { - "display": [ - { - "name": "Date Of Birth", - "locale": "en" - } - ] - } - } - }, - "display": [ - { - "name": "Sunbird Life Insurance", - "locale": "en", - "logo": { - "url": "https://sunbird.org/images/sunbird-logo-new.png", - "alt_text": "Sunbird life insurance logo" - }, - "background_color": "#fefcfa", - "text_color": "#7C4616" - } - ] - } - ] -} \ No newline at end of file From 0e7ac7e9372443ff3ec437501f968b759ff0b893 Mon Sep 17 00:00:00 2001 From: Vijay Kumar S <94220135+vijay151096@users.noreply.github.com> Date: Mon, 22 Jul 2024 11:23:02 +0530 Subject: [PATCH 182/860] [INJIWEB-639] : OpenId4VP implementation with authorize and QR generation for VP Request. (#307) * [INJIWEB-639]: OpenId4VP implementation with authorize and QR generation for VP Request. Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-639]: OpenId4VP implementation with authorize and QR generation for VP Request. Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-639]: Optimize the Presentation DTO and renmaing of the credential-template (#301) * [INJIWEB-639]: Optimize the Presentation DTO and renmaing of the credential-template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-639]: remove the unused methods in utilities Signed-off-by: Vijay Kumar S <94220135+vijay151096@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> Signed-off-by: Vijay Kumar S <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-639] : add test suite for verifiers and presentation services. Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-639] : add test suite for verifiers and presentation services. Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-639] : add test suite for verifiers and presentation services. Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * MOSIP-34397 - Updating MosipTestRunner (#297) * MOSIP-34397 - Updating MosipTestRunner Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> * MOSIP-34397 - Updating MosipTestRunner Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> --------- Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> * [DSD-5725] updated install.sh script with inji-config changes also updated CHart version of partner onboarder Signed-off-by: techno-467 * [INJIMOB-1153] : update README Signed-off-by: Swati Goel * [INJIMOB-1153] : delete unused docker-compose file Signed-off-by: Swati Goel * [INJIMOB-1153] : update mimoto version Signed-off-by: Swati Goel * [INJIMOB-1153] : add url tag in pom.xml Signed-off-by: Swati Goel * [INJIWEB-639] : store and retrieve the credentials in durian datashare (#311) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-639] : correct the property reference Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-639] : add necessary loggers Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-639] : correct the credential response POJO Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-639] : fix the failing tests Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-639] : initialize the instance with builder and updated the testUtilities Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-639] : add custom Exception Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-639] : modify the test case to remove any method from mock. Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-639] : remove unnecessary properties values Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-639] : remove unnecessary properties values Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-639] : optimize the source and test with builder. Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-639] : handle SSRF for authorize Request Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-639] : fix the failing test Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-639] : skipping the sonar analysis , until java 21 is introduced to avoid failure and java version mismatch error Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> Signed-off-by: Vijay Kumar S <94220135+vijay151096@users.noreply.github.com> Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> Signed-off-by: techno-467 Signed-off-by: Swati Goel Co-authored-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> Co-authored-by: PRAFUL RAKHADE <99539100+prafulrakhade@users.noreply.github.com> Co-authored-by: Swati Goel --- .github/workflows/push-trigger.yml | 56 ++--- .gitignore | 4 +- ...Template.html => credential-template.html} | 0 docker-compose/docker-compose.yml | 4 +- .../mimoto/controller/IssuersController.java | 8 +- .../controller/PresentationController.java | 40 +++ .../java/io/mosip/mimoto/dto/IssuerDTO.java | 1 + .../dto/mimoto/VCCredentialProperties.java | 6 + .../dto/mimoto/VCCredentialResponse.java | 6 + .../dto/mimoto/VCCredentialResponseProof.java | 6 + .../mosip/mimoto/dto/openid/VerifierDTO.java | 21 ++ .../mosip/mimoto/dto/openid/VerifiersDTO.java | 16 ++ .../datashare/DataShareResponseDTO.java | 12 + .../DataShareResponseWrapperDTO.java | 18 ++ .../dto/openid/presentation/Format.java | 14 ++ .../presentation/InputDescriptorDTO.java | 15 ++ .../mimoto/dto/openid/presentation/LDPVc.java | 16 ++ .../PresentationDefinitionDTO.java | 20 ++ .../presentation/PresentationRequestDTO.java | 20 ++ .../PresentationSubmissionDTO.java | 20 ++ .../presentation/SubmissionDescriptorDTO.java | 16 ++ .../VerifiablePresentationDTO.java | 28 +++ .../InvalidCredentialResourceException.java | 20 ++ .../exception/InvalidVerifierException.java | 20 ++ .../exception/PlatformErrorMessages.java | 6 +- .../exception/VPNotCreatedException.java | 20 ++ .../mimoto/service/PresentationService.java | 11 + .../mimoto/service/VerifiersService.java | 14 ++ .../service/impl/CredentialServiceImpl.java | 86 +++++-- .../service/impl/DataShareServiceImpl.java | 47 ++++ .../service/impl/PresentationServiceImpl.java | 127 ++++++++++ .../service/impl/VerifiersServiceImpl.java | 51 ++++ .../java/io/mosip/mimoto/util/Utilities.java | 236 ++---------------- .../resources/application-local.properties | 20 +- src/main/resources/mimoto-issuers-config.json | 203 +++------------ .../resources/mimoto-trusted-verifiers.json | 18 ++ ...Template.html => credential-template.html} | 0 .../mimoto/controller/InjiControllerTest.java | 9 +- .../service/PresentationServiceTest.java | 91 +++++++ .../mimoto/service/VerifierServiceTest.java | 81 ++++++ .../io/mosip/mimoto/util/TestUtilities.java | 90 +++++++ 41 files changed, 1043 insertions(+), 454 deletions(-) rename docker-compose/config/{CredentialTemplate.html => credential-template.html} (100%) create mode 100644 src/main/java/io/mosip/mimoto/controller/PresentationController.java create mode 100644 src/main/java/io/mosip/mimoto/dto/openid/VerifierDTO.java create mode 100644 src/main/java/io/mosip/mimoto/dto/openid/VerifiersDTO.java create mode 100644 src/main/java/io/mosip/mimoto/dto/openid/datashare/DataShareResponseDTO.java create mode 100644 src/main/java/io/mosip/mimoto/dto/openid/datashare/DataShareResponseWrapperDTO.java create mode 100644 src/main/java/io/mosip/mimoto/dto/openid/presentation/Format.java create mode 100644 src/main/java/io/mosip/mimoto/dto/openid/presentation/InputDescriptorDTO.java create mode 100644 src/main/java/io/mosip/mimoto/dto/openid/presentation/LDPVc.java create mode 100644 src/main/java/io/mosip/mimoto/dto/openid/presentation/PresentationDefinitionDTO.java create mode 100644 src/main/java/io/mosip/mimoto/dto/openid/presentation/PresentationRequestDTO.java create mode 100644 src/main/java/io/mosip/mimoto/dto/openid/presentation/PresentationSubmissionDTO.java create mode 100644 src/main/java/io/mosip/mimoto/dto/openid/presentation/SubmissionDescriptorDTO.java create mode 100644 src/main/java/io/mosip/mimoto/dto/openid/presentation/VerifiablePresentationDTO.java create mode 100644 src/main/java/io/mosip/mimoto/exception/InvalidCredentialResourceException.java create mode 100644 src/main/java/io/mosip/mimoto/exception/InvalidVerifierException.java create mode 100644 src/main/java/io/mosip/mimoto/exception/VPNotCreatedException.java create mode 100644 src/main/java/io/mosip/mimoto/service/PresentationService.java create mode 100644 src/main/java/io/mosip/mimoto/service/VerifiersService.java create mode 100644 src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java create mode 100644 src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java create mode 100644 src/main/java/io/mosip/mimoto/service/impl/VerifiersServiceImpl.java create mode 100644 src/main/resources/mimoto-trusted-verifiers.json rename src/main/resources/templates/{CredentialTemplate.html => credential-template.html} (100%) create mode 100644 src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java create mode 100644 src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java diff --git a/.github/workflows/push-trigger.yml b/.github/workflows/push-trigger.yml index c1ca7d4b9..4cdf8cc48 100644 --- a/.github/workflows/push-trigger.yml +++ b/.github/workflows/push-trigger.yml @@ -86,20 +86,20 @@ jobs: GPG_SECRET: ${{ secrets.GPG_SECRET }} SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }} - sonar_analysis: - needs: build-mimoto - if: "${{ github.event_name != 'pull_request' }}" - uses: mosip/kattu/.github/workflows/maven-sonar-analysis.yml@master - with: - SERVICE_LOCATION: ./ - secrets: - SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - ORG_KEY: ${{ secrets.ORG_KEY }} - OSSRH_USER: ${{ secrets.OSSRH_USER }} - OSSRH_SECRET: ${{ secrets.OSSRH_SECRET }} - OSSRH_TOKEN: ${{ secrets.OSSRH_TOKEN }} - GPG_SECRET: ${{ secrets.GPG_SECRET }} - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }} +# sonar_analysis: +# needs: build-mimoto +# if: "${{ github.event_name != 'pull_request' }}" +# uses: mosip/kattu/.github/workflows/maven-sonar-analysis.yml@master +# with: +# SERVICE_LOCATION: ./ +# secrets: +# SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} +# ORG_KEY: ${{ secrets.ORG_KEY }} +# OSSRH_USER: ${{ secrets.OSSRH_USER }} +# OSSRH_SECRET: ${{ secrets.OSSRH_SECRET }} +# OSSRH_TOKEN: ${{ secrets.OSSRH_TOKEN }} +# GPG_SECRET: ${{ secrets.GPG_SECRET }} +# SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }} build-dockers: needs: recreate-zips @@ -217,17 +217,17 @@ jobs: RELEASE_DOCKER_HUB: ${{ secrets.RELEASE_DOCKER_HUB }} SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }} - sonar_analysis_apitest_mimoto: - needs: build-maven-apitest-mimoto - if: "${{ github.event_name != 'pull_request' }}" - uses: mosip/kattu/.github/workflows/maven-sonar-analysis.yml@master - with: - SERVICE_LOCATION: ./apitest - secrets: - SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - ORG_KEY: ${{ secrets.ORG_KEY }} - OSSRH_USER: ${{ secrets.OSSRH_USER }} - OSSRH_SECRET: ${{ secrets.OSSRH_SECRET }} - OSSRH_TOKEN: ${{ secrets.OSSRH_TOKEN }} - GPG_SECRET: ${{ secrets.GPG_SECRET }} - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }} +# sonar_analysis_apitest_mimoto: +# needs: build-maven-apitest-mimoto +# if: "${{ github.event_name != 'pull_request' }}" +# uses: mosip/kattu/.github/workflows/maven-sonar-analysis.yml@master +# with: +# SERVICE_LOCATION: ./apitest +# secrets: +# SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} +# ORG_KEY: ${{ secrets.ORG_KEY }} +# OSSRH_USER: ${{ secrets.OSSRH_USER }} +# OSSRH_SECRET: ${{ secrets.OSSRH_SECRET }} +# OSSRH_TOKEN: ${{ secrets.OSSRH_TOKEN }} +# GPG_SECRET: ${{ secrets.GPG_SECRET }} +# SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }} diff --git a/.gitignore b/.gitignore index 87ba6d123..804af1755 100644 --- a/.gitignore +++ b/.gitignore @@ -32,5 +32,5 @@ build/ ### VS Code ### .vscode/ *.code-workspace - -data \ No newline at end of file +.DS_Store +data diff --git a/docker-compose/config/CredentialTemplate.html b/docker-compose/config/credential-template.html similarity index 100% rename from docker-compose/config/CredentialTemplate.html rename to docker-compose/config/credential-template.html diff --git a/docker-compose/docker-compose.yml b/docker-compose/docker-compose.yml index b06f45376..53660d5d5 100644 --- a/docker-compose/docker-compose.yml +++ b/docker-compose/docker-compose.yml @@ -8,7 +8,7 @@ services: - '80:80' volumes: - ./config/mimoto-issuers-config.json:/config/server/mimoto-issuers-config.json - - ./config/CredentialTemplate.html:/config/server/CredentialTemplate.html + - ./config/credential-template.html:/config/server/credential-template.html - ./nginx.conf:/etc/nginx/nginx.conf mimoto-service: container_name: 'Mimoto-Service' @@ -27,4 +27,4 @@ services: - ./certs/oidckeystore.p12:/home/mosip/certs/oidckeystore.p12 - ./loader_path/:/home/mosip/additional_jars/ depends_on: - - nginx \ No newline at end of file + - nginx diff --git a/src/main/java/io/mosip/mimoto/controller/IssuersController.java b/src/main/java/io/mosip/mimoto/controller/IssuersController.java index 0c663e6d8..0c08f3441 100644 --- a/src/main/java/io/mosip/mimoto/controller/IssuersController.java +++ b/src/main/java/io/mosip/mimoto/controller/IssuersController.java @@ -4,6 +4,7 @@ import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.IssuersDTO; +import io.mosip.mimoto.dto.mimoto.IssuerSupportedCredentialsResponse; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.service.CredentialService; @@ -13,14 +14,15 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.*; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; -import org.springframework.web.client.RestTemplate; import java.io.IOException; import java.util.List; -import static io.mosip.mimoto.exception.PlatformErrorMessages.*; +import static io.mosip.mimoto.exception.PlatformErrorMessages.API_NOT_ACCESSIBLE_EXCEPTION; +import static io.mosip.mimoto.exception.PlatformErrorMessages.INVALID_ISSUER_ID_EXCEPTION; import static io.mosip.mimoto.util.Utilities.handleExceptionWithErrorCode; @RestController diff --git a/src/main/java/io/mosip/mimoto/controller/PresentationController.java b/src/main/java/io/mosip/mimoto/controller/PresentationController.java new file mode 100644 index 000000000..f08094d02 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/controller/PresentationController.java @@ -0,0 +1,40 @@ +package io.mosip.mimoto.controller; + +import io.mosip.mimoto.dto.openid.presentation.PresentationRequestDTO; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.VPNotCreatedException; +import io.mosip.mimoto.service.PresentationService; +import io.mosip.mimoto.service.impl.PresentationServiceImpl; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +@RestController +public class PresentationController { + + @Autowired + PresentationService presentationService; + + private final Logger logger = LoggerFactory.getLogger(PresentationController.class); + + @GetMapping("/authorize") + public void performAuthorization(HttpServletResponse response, @ModelAttribute PresentationRequestDTO presentationRequestDTO) throws IOException, ApiNotAccessibleException { + try { + logger.info("Started Presentation Authorization in the controller."); + String redirectString = presentationService.authorizePresentation(presentationRequestDTO); + logger.info("Completed Presentation Authorization in the controller."); + response.sendRedirect(redirectString); + } catch (VPNotCreatedException | IOException | ApiNotAccessibleException exception){ + logger.error("Exception Occurred in Authorizing the presentation" + exception); + throw exception; + } + } + + +} diff --git a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java index 6ff2fbb91..436a5f871 100644 --- a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java @@ -61,6 +61,7 @@ public class IssuerDTO { @JsonInclude(NON_NULL) @NotBlank String client_alias; + String ovp_qr_enabled; @JsonInclude(NON_NULL) Map additional_headers; @JsonInclude(NON_NULL) diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialProperties.java b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialProperties.java index eefdcc418..139e9f988 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialProperties.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialProperties.java @@ -3,7 +3,10 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotEmpty; @@ -12,6 +15,9 @@ @Data @JsonPropertyOrder({"@context", "credentialSubject", "expirationDate", "id", "issuanceDate", "issuer", "proof", "type"}) +@NoArgsConstructor +@AllArgsConstructor +@Builder public class VCCredentialProperties { private String issuer; diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponse.java index 5d83fd655..19ba9972a 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponse.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponse.java @@ -1,12 +1,18 @@ package io.mosip.mimoto.dto.mimoto; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; import javax.validation.Valid; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; @Data +@NoArgsConstructor +@AllArgsConstructor +@Builder public class VCCredentialResponse { @NotBlank diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponseProof.java b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponseProof.java index 844cba82a..8c52fdf86 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponseProof.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponseProof.java @@ -1,11 +1,17 @@ package io.mosip.mimoto.dto.mimoto; import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; import javax.validation.constraints.NotBlank; @Data +@NoArgsConstructor +@AllArgsConstructor +@Builder public class VCCredentialResponseProof { @NotBlank private String type; diff --git a/src/main/java/io/mosip/mimoto/dto/openid/VerifierDTO.java b/src/main/java/io/mosip/mimoto/dto/openid/VerifierDTO.java new file mode 100644 index 000000000..2820c75a4 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/openid/VerifierDTO.java @@ -0,0 +1,21 @@ +package io.mosip.mimoto.dto.openid; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class VerifierDTO { + @JsonProperty("client_id") + String clientId; + + @JsonProperty("redirect_uri") + List redirectUri; +} diff --git a/src/main/java/io/mosip/mimoto/dto/openid/VerifiersDTO.java b/src/main/java/io/mosip/mimoto/dto/openid/VerifiersDTO.java new file mode 100644 index 000000000..36657eb2b --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/openid/VerifiersDTO.java @@ -0,0 +1,16 @@ +package io.mosip.mimoto.dto.openid; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class VerifiersDTO { + List verifiers; +} diff --git a/src/main/java/io/mosip/mimoto/dto/openid/datashare/DataShareResponseDTO.java b/src/main/java/io/mosip/mimoto/dto/openid/datashare/DataShareResponseDTO.java new file mode 100644 index 000000000..755b58696 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/openid/datashare/DataShareResponseDTO.java @@ -0,0 +1,12 @@ +package io.mosip.mimoto.dto.openid.datashare; + +import lombok.Data; + +@Data +public class DataShareResponseDTO { + private String url; + private int validForInMinutes; + private int transactionsAllowed; + private String policyId; + private String subscriberId; +} diff --git a/src/main/java/io/mosip/mimoto/dto/openid/datashare/DataShareResponseWrapperDTO.java b/src/main/java/io/mosip/mimoto/dto/openid/datashare/DataShareResponseWrapperDTO.java new file mode 100644 index 000000000..b55c50eca --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/openid/datashare/DataShareResponseWrapperDTO.java @@ -0,0 +1,18 @@ +package io.mosip.mimoto.dto.openid.datashare; + +import io.mosip.mimoto.dto.ErrorDTO; +import lombok.Data; +import javax.validation.constraints.NotNull; +import java.util.ArrayList; +import java.util.List; + +@Data +public class DataShareResponseWrapperDTO { + private String id; + private String version; + private String responsetime; + @NotNull + private DataShareResponseDTO dataShare; + + private List errors = new ArrayList<>(); +} diff --git a/src/main/java/io/mosip/mimoto/dto/openid/presentation/Format.java b/src/main/java/io/mosip/mimoto/dto/openid/presentation/Format.java new file mode 100644 index 000000000..0da11a35a --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/openid/presentation/Format.java @@ -0,0 +1,14 @@ +package io.mosip.mimoto.dto.openid.presentation; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class Format { + LDPVc ldpVc; +} diff --git a/src/main/java/io/mosip/mimoto/dto/openid/presentation/InputDescriptorDTO.java b/src/main/java/io/mosip/mimoto/dto/openid/presentation/InputDescriptorDTO.java new file mode 100644 index 000000000..0052e42f9 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/openid/presentation/InputDescriptorDTO.java @@ -0,0 +1,15 @@ +package io.mosip.mimoto.dto.openid.presentation; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class InputDescriptorDTO { + String id; + Format format; +} diff --git a/src/main/java/io/mosip/mimoto/dto/openid/presentation/LDPVc.java b/src/main/java/io/mosip/mimoto/dto/openid/presentation/LDPVc.java new file mode 100644 index 000000000..08952770f --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/openid/presentation/LDPVc.java @@ -0,0 +1,16 @@ +package io.mosip.mimoto.dto.openid.presentation; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class LDPVc { + List proofTypes; +} diff --git a/src/main/java/io/mosip/mimoto/dto/openid/presentation/PresentationDefinitionDTO.java b/src/main/java/io/mosip/mimoto/dto/openid/presentation/PresentationDefinitionDTO.java new file mode 100644 index 000000000..eed13571c --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/openid/presentation/PresentationDefinitionDTO.java @@ -0,0 +1,20 @@ +package io.mosip.mimoto.dto.openid.presentation; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class PresentationDefinitionDTO { + + String id; + @JsonProperty("input_descriptors") + List inputDescriptors; +} diff --git a/src/main/java/io/mosip/mimoto/dto/openid/presentation/PresentationRequestDTO.java b/src/main/java/io/mosip/mimoto/dto/openid/presentation/PresentationRequestDTO.java new file mode 100644 index 000000000..5074905ec --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/openid/presentation/PresentationRequestDTO.java @@ -0,0 +1,20 @@ +package io.mosip.mimoto.dto.openid.presentation; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class PresentationRequestDTO { + + String response_type; + String resource; + String presentation_definition; + String client_id; + String redirect_uri; + +} diff --git a/src/main/java/io/mosip/mimoto/dto/openid/presentation/PresentationSubmissionDTO.java b/src/main/java/io/mosip/mimoto/dto/openid/presentation/PresentationSubmissionDTO.java new file mode 100644 index 000000000..0551275db --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/openid/presentation/PresentationSubmissionDTO.java @@ -0,0 +1,20 @@ +package io.mosip.mimoto.dto.openid.presentation; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class PresentationSubmissionDTO { + String id; + String definition_id; + @JsonProperty("descriptor_map") + List descriptorMap; +} diff --git a/src/main/java/io/mosip/mimoto/dto/openid/presentation/SubmissionDescriptorDTO.java b/src/main/java/io/mosip/mimoto/dto/openid/presentation/SubmissionDescriptorDTO.java new file mode 100644 index 000000000..32a24d738 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/openid/presentation/SubmissionDescriptorDTO.java @@ -0,0 +1,16 @@ +package io.mosip.mimoto.dto.openid.presentation; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class SubmissionDescriptorDTO { + String id; + String format; + String path; +} diff --git a/src/main/java/io/mosip/mimoto/dto/openid/presentation/VerifiablePresentationDTO.java b/src/main/java/io/mosip/mimoto/dto/openid/presentation/VerifiablePresentationDTO.java new file mode 100644 index 000000000..346288d87 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/openid/presentation/VerifiablePresentationDTO.java @@ -0,0 +1,28 @@ +package io.mosip.mimoto.dto.openid.presentation; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import io.mosip.mimoto.dto.mimoto.VCCredentialProperties; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import java.util.List; + +@Data +@JsonPropertyOrder({"@context", "type", "verifiableCredential"}) +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class VerifiablePresentationDTO { + @JsonProperty("@context") + private Object context; + + @NotEmpty + private List<@NotBlank String> type; + + List verifiableCredential; +} diff --git a/src/main/java/io/mosip/mimoto/exception/InvalidCredentialResourceException.java b/src/main/java/io/mosip/mimoto/exception/InvalidCredentialResourceException.java new file mode 100644 index 000000000..5205a2a45 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/exception/InvalidCredentialResourceException.java @@ -0,0 +1,20 @@ +package io.mosip.mimoto.exception; + +public class InvalidCredentialResourceException extends BaseUncheckedException { + + private static final long serialVersionUID = -5350213197226295789L; + + /** + * Constructor with errorCode, and errorMessage + * + * @param errorCode The error code for this exception + * @param errorMessage The error message for this exception + */ + public InvalidCredentialResourceException(String errorCode, String errorMessage) { + super(errorCode, errorMessage); + } + + public InvalidCredentialResourceException(String errorMessage) { + super(PlatformErrorMessages.MIMOTO_PGS_INVALID_INPUT_PARAMETER.getCode(), errorMessage); + } +} diff --git a/src/main/java/io/mosip/mimoto/exception/InvalidVerifierException.java b/src/main/java/io/mosip/mimoto/exception/InvalidVerifierException.java new file mode 100644 index 000000000..82a6844d2 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/exception/InvalidVerifierException.java @@ -0,0 +1,20 @@ +package io.mosip.mimoto.exception; + +public class InvalidVerifierException extends BaseUncheckedException { + + private static final long serialVersionUID = -5350213197226295789L; + + /** + * Constructor with errorCode, and errorMessage + * + * @param errorCode The error code for this exception + * @param errorMessage The error message for this exception + */ + public InvalidVerifierException(String errorCode, String errorMessage) { + super(errorCode, errorMessage); + } + + public InvalidVerifierException(String errorMessage) { + super(PlatformErrorMessages.MIMOTO_PGS_INVALID_INPUT_PARAMETER.getCode(), errorMessage); + } +} diff --git a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java index 28d8288a1..67fbb4948 100644 --- a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java +++ b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java @@ -83,7 +83,11 @@ public enum PlatformErrorMessages { MIMOTO_IDP_GENERIC_EXCEPTION(PlatformConstants.PREFIX + "034", "Could not get response from server"), INVALID_ISSUER_ID_EXCEPTION(PlatformConstants.PREFIX + "035", "Invalid issuer ID"), INVALID_CREDENTIAL_TYPE_EXCEPTION(PlatformConstants.PREFIX + "036", "Invalid Credential Type Id"), - MIMOTO_ISSUER_ONBOARDING_EXCEPTION(PlatformConstants.PREFIX + "037", "Issuers Onboarding exception occurred "); + MIMOTO_ISSUER_ONBOARDING_EXCEPTION(PlatformConstants.PREFIX + "037", "Issuers Onboarding exception occurred "), + INVALID_VERIFIER_ID_EXCEPTION(PlatformConstants.PREFIX + "038", "Invalid Verifier ClientId"), + INVALID_VERIFIER_REDIRECT_URI_EXCEPTION(PlatformConstants.PREFIX + "039", "Invalid Redirect Uri"), + NO_CREDENTIALS_MATCH_VP_DEFINITION_EXCEPTION(PlatformConstants.PREFIX + "040", "VP Request Results Empty Credentials"), + INVALID_CREDENTIAL_RESOURCE_URI_EXCEPTION(PlatformConstants.PREFIX + "041", "The Credential Resource is Invalid"); /** The error message. */ private final String errorMessage; diff --git a/src/main/java/io/mosip/mimoto/exception/VPNotCreatedException.java b/src/main/java/io/mosip/mimoto/exception/VPNotCreatedException.java new file mode 100644 index 000000000..ac074be47 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/exception/VPNotCreatedException.java @@ -0,0 +1,20 @@ +package io.mosip.mimoto.exception; + +public class VPNotCreatedException extends BaseUncheckedException { + + private static final long serialVersionUID = -5350213197226295789L; + + /** + * Constructor with errorCode, and errorMessage + * + * @param errorCode The error code for this exception + * @param errorMessage The error message for this exception + */ + public VPNotCreatedException(String errorCode, String errorMessage) { + super(errorCode, errorMessage); + } + + public VPNotCreatedException(String errorMessage) { + super(PlatformErrorMessages.NO_CREDENTIALS_MATCH_VP_DEFINITION_EXCEPTION.getCode(), errorMessage); + } +} diff --git a/src/main/java/io/mosip/mimoto/service/PresentationService.java b/src/main/java/io/mosip/mimoto/service/PresentationService.java new file mode 100644 index 000000000..19a796280 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/PresentationService.java @@ -0,0 +1,11 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.dto.openid.presentation.PresentationRequestDTO; +import io.mosip.mimoto.exception.ApiNotAccessibleException; + +import java.io.IOException; + +public interface PresentationService { + + String authorizePresentation(PresentationRequestDTO presentationRequestDTO) throws ApiNotAccessibleException, IOException; +} diff --git a/src/main/java/io/mosip/mimoto/service/VerifiersService.java b/src/main/java/io/mosip/mimoto/service/VerifiersService.java new file mode 100644 index 000000000..84bd0c77e --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/VerifiersService.java @@ -0,0 +1,14 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.dto.openid.VerifierDTO; +import io.mosip.mimoto.dto.openid.VerifiersDTO; +import io.mosip.mimoto.dto.openid.presentation.PresentationRequestDTO; +import io.mosip.mimoto.exception.ApiNotAccessibleException; + +import java.io.IOException; +import java.util.Optional; + +public interface VerifiersService { + Optional getVerifiersByClientId(String clientId) throws ApiNotAccessibleException, IOException; + void validateVerifier(PresentationRequestDTO presentationRequestDTO) throws ApiNotAccessibleException, IOException; +} diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java index 50eabfaba..557697c19 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.service.impl; +import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.zxing.BarcodeFormat; import com.google.zxing.WriterException; @@ -15,6 +16,10 @@ import io.mosip.mimoto.dto.IssuersDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.*; +import io.mosip.mimoto.dto.openid.presentation.Format; +import io.mosip.mimoto.dto.openid.presentation.InputDescriptorDTO; +import io.mosip.mimoto.dto.openid.presentation.LDPVc; +import io.mosip.mimoto.dto.openid.presentation.PresentationDefinitionDTO; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.IdpException; import io.mosip.mimoto.service.CredentialService; @@ -29,7 +34,9 @@ import org.apache.http.auth.InvalidCredentialsException; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; +import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpEntity; import org.springframework.http.MediaType; import org.springframework.stereotype.Service; @@ -42,6 +49,8 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.StringWriter; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import java.util.*; import java.util.stream.Collectors; @@ -64,9 +73,21 @@ public class CredentialServiceImpl implements CredentialService { @Autowired IssuersService issuerService; + @Autowired + DataShareServiceImpl dataShareService; + + @Autowired + ObjectMapper objectMapper; + @Autowired IdpService idpService; + @Value("${mosip.inji.web.authorize.url}") + String injiWebAuthorizeUrl; + + @Autowired + PresentationServiceImpl presentationService; + @Override public TokenResponseDTO getTokenResponse(Map params, String issuerId) throws ApiNotAccessibleException, IOException { RestTemplate restTemplate = new RestTemplate(); @@ -86,7 +107,8 @@ public ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String cred CredentialsSupportedResponseDraft11 credentialsSupportedResponseDraft11 = getCredentialSupported(credentialIssuerWellKnownResponseDraft11, credentialType); VCCredentialRequest vcCredentialRequest = generateVCCredentialRequest(issuerConfig, credentialsSupportedResponseDraft11, response.getAccess_token()); VCCredentialResponse vcCredentialResponse = downloadCredential(credentialIssuerWellKnownResponseDraft11.getCredentialEndPoint(), vcCredentialRequest, response.getAccess_token()); - return generatePdfForVerifiableCredentials(vcCredentialResponse, issuerConfig, credentialsSupportedResponseDraft11, credentialIssuerWellKnownResponseDraft11.getCredentialEndPoint()); + String dataShareUrl = dataShareService.storeDataInDataShare(objectMapper.writeValueAsString(vcCredentialResponse)); + return generatePdfForVerifiableCredentials(vcCredentialResponse, issuerConfig, credentialsSupportedResponseDraft11, dataShareUrl); } public VCCredentialResponse downloadCredential(String credentialEndpoint, VCCredentialRequest vcCredentialRequest, String accessToken) throws ApiNotAccessibleException, IOException, InvalidCredentialsException { @@ -112,8 +134,14 @@ public VCCredentialRequest generateVCCredentialRequest(IssuerDTO issuerDTO, Cred .build(); } - public ByteArrayInputStream generatePdfForVerifiableCredentials(VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, CredentialsSupportedResponseDraft11 credentialsSupportedResponseDraft11, String credentialEndPoint) throws Exception { + public ByteArrayInputStream generatePdfForVerifiableCredentials(VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, CredentialsSupportedResponseDraft11 credentialsSupportedResponseDraft11, String dataShareUrl) throws Exception { + LinkedHashMap displayProperties = loadDisplayPropertiesFromWellknown(vcCredentialResponse, credentialsSupportedResponseDraft11); + Map data = getPdfResourceFromVcProperties(displayProperties, credentialsSupportedResponseDraft11, vcCredentialResponse, issuerDTO, dataShareUrl); + return renderVCInCredentialTemplate(data); + } + @NotNull + private static LinkedHashMap loadDisplayPropertiesFromWellknown(VCCredentialResponse vcCredentialResponse, CredentialsSupportedResponseDraft11 credentialsSupportedResponseDraft11) { LinkedHashMap displayProperties = new LinkedHashMap<>(); Map credentialProperties = vcCredentialResponse.getCredential().getCredentialSubject(); @@ -129,12 +157,11 @@ public ByteArrayInputStream generatePdfForVerifiableCredentials(VCCredentialResp displayProperties.put(vcPropertiesFromWellKnown.get(vcProperty), credentialProperties.get(vcProperty)); } }); - return getPdfResourceFromVcProperties(displayProperties, credentialsSupportedResponseDraft11, vcCredentialResponse, - issuerDTO.getDisplay().stream().map(d -> d.getLogo().getUrl()).findFirst().orElse("")); + return displayProperties; } - private ByteArrayInputStream getPdfResourceFromVcProperties(LinkedHashMap displayProperties, CredentialsSupportedResponseDraft11 credentialsSupportedResponseDraft11, VCCredentialResponse vcCredentialResponse, String issuerLogoUrl) throws IOException, WriterException { + private Map getPdfResourceFromVcProperties(LinkedHashMap displayProperties, CredentialsSupportedResponseDraft11 credentialsSupportedResponseDraft11, VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, String dataShareUrl) throws IOException, WriterException { Map data = new HashMap<>(); LinkedHashMap rowProperties = new LinkedHashMap<>(); String backgroundColor = credentialsSupportedResponseDraft11.getDisplay().get(0).getBackgroundColor(); @@ -159,27 +186,21 @@ private ByteArrayInputStream getPdfResourceFromVcProperties(LinkedHashMap " + qrData); - QRCodeWriter qrCodeWriter = new QRCodeWriter(); - BitMatrix bitMatrix = qrCodeWriter.encode(qrData, BarcodeFormat.QR_CODE, 650, 650); - BufferedImage qrImage = MatrixToImageWriter.toBufferedImage(bitMatrix); - String base64Image = encodeToString(qrImage, "png"); - data.put("qrCodeImage", base64Image); - } - - - data.put("logoUrl", issuerLogoUrl); + String qrCodeImage = !"false".equals(issuerDTO.getOvp_qr_enabled()) ? + constructQRCodeWithAuthorizeRequest(vcCredentialResponse, dataShareUrl) : + constructQRCodeWithVCData(credentialsSupportedResponseDraft11, vcCredentialResponse) ; + data.put("qrCodeImage", qrCodeImage); + data.put("logoUrl", issuerDTO.getDisplay().stream().map(d -> d.getLogo().getUrl()).findFirst().orElse("")); data.put("rowProperties", rowProperties); data.put("textColor", textColor); data.put("backgroundColor", backgroundColor); data.put("titleName", credentialSupportedType); data.put("face", face); + return data; + } + @NotNull + private ByteArrayInputStream renderVCInCredentialTemplate(Map data) throws IOException { String credentialTemplate = utilities.getCredentialSupportedTemplateString(); Properties props = new Properties(); @@ -203,6 +224,31 @@ private ByteArrayInputStream getPdfResourceFromVcProperties(LinkedHashMap map = new LinkedMultiValueMap<>(); + map.add("file", contentsAsResource); + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.MULTIPART_FORM_DATA); + + HttpEntity> requestEntity = new HttpEntity<>(map, headers); + DataShareResponseWrapperDTO dataShareResponseWrapperDTO = restApiClient.postApi(dataShareUrl, MediaType.MULTIPART_FORM_DATA, requestEntity, DataShareResponseWrapperDTO.class); + URL dataShareUrl = new URL(dataShareResponseWrapperDTO.getDataShare().getUrl()); +// return publicHostUrl + dataShareUrl.getPath(); + return "https://api-internal.dev.mosip.net" + dataShareUrl.getPath(); + } + +} diff --git a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java new file mode 100644 index 000000000..2da129f82 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java @@ -0,0 +1,127 @@ +package io.mosip.mimoto.service.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.dto.mimoto.VCCredentialProperties; +import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; +import io.mosip.mimoto.dto.openid.presentation.*; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.InvalidCredentialResourceException; +import io.mosip.mimoto.exception.PlatformErrorMessages; +import io.mosip.mimoto.exception.VPNotCreatedException; +import io.mosip.mimoto.service.PresentationService; +import io.mosip.mimoto.service.VerifiersService; +import io.mosip.mimoto.util.RestApiClient; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; + +@Service +public class PresentationServiceImpl implements PresentationService { + + @Autowired + VerifiersService verifiersService; + + @Autowired + RestApiClient restApiClient; + + @Autowired + ObjectMapper objectMapper; + + @Value("${mosip.inji.verify.redirect.url}") + String injiVerifyRedirectUrl; + + @Value("${mosip.data.share.url}") + String dataShareUrl; + + private final Logger logger = LoggerFactory.getLogger(PresentationServiceImpl.class); + + @Override + public String authorizePresentation(PresentationRequestDTO presentationRequestDTO) throws ApiNotAccessibleException, IOException { + + logger.info("Started the presentation Validation"); + verifiersService.validateVerifier(presentationRequestDTO); + + logger.info("Started the Credential Download From DataShare"); + String credentialsResourceUri = presentationRequestDTO.getResource(); + if(!credentialsResourceUri.contains(dataShareUrl)){ + throw new InvalidCredentialResourceException(PlatformErrorMessages.INVALID_CREDENTIAL_RESOURCE_URI_EXCEPTION.getMessage()); + } + + String vcCredentialResponseString = restApiClient.getApi(credentialsResourceUri, String.class); + + logger.info("Started the ObjectMapping"); + VCCredentialResponse vcCredentialResponse = objectMapper.readValue(vcCredentialResponseString, VCCredentialResponse.class); + PresentationDefinitionDTO presentationDefinitionDTO = objectMapper.readValue(presentationRequestDTO.getPresentation_definition(), PresentationDefinitionDTO.class); + + return presentationDefinitionDTO.getInputDescriptors() + .stream() + .findFirst() + .map( inputDescriptorDTO -> { + boolean matchingProofTypes = inputDescriptorDTO.getFormat().getLdpVc().getProofTypes() + .stream() + .anyMatch(proofType -> vcCredentialResponse.getCredential().getProof().getType().equals(proofType)); + if(matchingProofTypes){ + logger.info("Started the Construction of VP token"); + try { + String vpToken = constructVerifiablePresentationString(vcCredentialResponse.getCredential()); + String presentationSubmission = constructPresentationSubmission(vpToken); + return String.format(injiVerifyRedirectUrl, + presentationRequestDTO.getRedirect_uri(), + Base64.getUrlEncoder().encodeToString(vpToken.getBytes(StandardCharsets.UTF_8)), + URLEncoder.encode(presentationSubmission, StandardCharsets.UTF_8)); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + logger.info("No Credentials Matched the VP request."); + throw new VPNotCreatedException(PlatformErrorMessages.NO_CREDENTIALS_MATCH_VP_DEFINITION_EXCEPTION.getMessage()); + }).orElseThrow(() -> new VPNotCreatedException(PlatformErrorMessages.NO_CREDENTIALS_MATCH_VP_DEFINITION_EXCEPTION.getMessage())); + } + + private String constructVerifiablePresentationString(VCCredentialProperties vcCredentialProperties) throws JsonProcessingException { + VerifiablePresentationDTO verifiablePresentationDTO = VerifiablePresentationDTO.builder() + .verifiableCredential(Collections.singletonList(vcCredentialProperties)) + .type(Collections.singletonList("VerifiablePresentation")) + .context(Collections.singletonList("https://www.w3.org/2018/credentials/v1")) + .build(); + return objectMapper.writeValueAsString(verifiablePresentationDTO); + } + + private String constructPresentationSubmission(String vpToken) throws JsonProcessingException { + VerifiablePresentationDTO verifiablePresentationDTO = objectMapper.readValue(vpToken, VerifiablePresentationDTO.class); + + AtomicInteger atomicInteger = new AtomicInteger(0); + List submissionDescriptorDTOList = verifiablePresentationDTO.getVerifiableCredential() + .stream().map(verifiableCredential -> SubmissionDescriptorDTO.builder() + .id(UUID.randomUUID().toString()) + .format("ldp_vc") + .path("$.verifiableCredential[" + atomicInteger.getAndIncrement() + "]").build()).collect(Collectors.toList()); + + PresentationSubmissionDTO presentationSubmissionDTO = PresentationSubmissionDTO.builder() + .id(UUID.randomUUID().toString()) + .definition_id(UUID.randomUUID().toString()) + .descriptorMap(submissionDescriptorDTOList).build(); + return objectMapper.writeValueAsString(presentationSubmissionDTO); + } + + PresentationDefinitionDTO constructPresentationDefinition(VCCredentialResponse vcCredentialResponse){ + LDPVc ldpVc = LDPVc.builder().proofTypes(Collections.singletonList(vcCredentialResponse.getCredential().getProof().getType())).build(); + Format format = Format.builder().ldpVc(ldpVc).build(); + InputDescriptorDTO inputDescriptorDTO = InputDescriptorDTO.builder().id(UUID.randomUUID().toString()).format(format).build(); + + return PresentationDefinitionDTO.builder() + .inputDescriptors(Collections.singletonList(inputDescriptorDTO)) + .id(UUID.randomUUID().toString()).build(); + } + +} diff --git a/src/main/java/io/mosip/mimoto/service/impl/VerifiersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/VerifiersServiceImpl.java new file mode 100644 index 000000000..4f6693fc9 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/impl/VerifiersServiceImpl.java @@ -0,0 +1,51 @@ +package io.mosip.mimoto.service.impl; + +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.dto.openid.VerifierDTO; +import io.mosip.mimoto.dto.openid.VerifiersDTO; +import io.mosip.mimoto.dto.openid.presentation.PresentationRequestDTO; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.InvalidVerifierException; +import io.mosip.mimoto.exception.PlatformErrorMessages; +import io.mosip.mimoto.service.VerifiersService; +import io.mosip.mimoto.util.Utilities; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.util.List; +import java.util.Optional; + +@Service +public class VerifiersServiceImpl implements VerifiersService { + + @Autowired + Utilities utilities; + + @Autowired + ObjectMapper objectMapper; + + @Override + public Optional getVerifiersByClientId(String clientId) throws ApiNotAccessibleException, IOException { + String trustedVerifiersJsonValue = utilities.getTrustedVerifiersJsonValue(); + if (trustedVerifiersJsonValue == null) { + throw new ApiNotAccessibleException(); + } + VerifiersDTO verifiersDTO = objectMapper.readValue(trustedVerifiersJsonValue, VerifiersDTO.class); + return verifiersDTO.getVerifiers().stream().filter(verifier -> verifier.getClientId().equals(clientId)).findFirst(); + } + @Override + public void validateVerifier(PresentationRequestDTO presentationRequestDTO) throws ApiNotAccessibleException, IOException { + getVerifiersByClientId(presentationRequestDTO.getClient_id()).ifPresentOrElse( + (verifierDTO) -> { + List registeredRedirectUri = verifierDTO.getRedirectUri(); + if(!registeredRedirectUri.contains(presentationRequestDTO.getRedirect_uri())){ + throw new InvalidVerifierException(PlatformErrorMessages.INVALID_VERIFIER_REDIRECT_URI_EXCEPTION.getMessage()); + } + }, + () -> { + throw new InvalidVerifierException(PlatformErrorMessages.INVALID_VERIFIER_ID_EXCEPTION.getMessage()); + } + ); + } +} diff --git a/src/main/java/io/mosip/mimoto/util/Utilities.java b/src/main/java/io/mosip/mimoto/util/Utilities.java index 83981e980..a4b17bd54 100644 --- a/src/main/java/io/mosip/mimoto/util/Utilities.java +++ b/src/main/java/io/mosip/mimoto/util/Utilities.java @@ -1,25 +1,14 @@ package io.mosip.mimoto.util; -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import io.mosip.kernel.core.logger.spi.Logger; -import io.mosip.mimoto.constant.ApiName; -import io.mosip.mimoto.constant.LoggerFileConstant; -import io.mosip.mimoto.constant.MappingJsonConstants; import io.mosip.mimoto.core.http.ResponseWrapper; -import io.mosip.mimoto.dto.ErrorDTO; -import io.mosip.mimoto.dto.IdResponseDTO; -import io.mosip.mimoto.exception.ApisResourceAccessException; import io.mosip.mimoto.exception.ExceptionUtils; -import io.mosip.mimoto.exception.IdRepoAppException; import io.mosip.mimoto.exception.PlatformErrorMessages; -import io.mosip.mimoto.service.RestClientService; import io.mosip.mimoto.service.impl.CredentialShareServiceImpl; import lombok.Data; import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.Resource; @@ -30,7 +19,6 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; -import java.util.LinkedHashMap; import java.util.List; import static io.mosip.mimoto.constant.LoggerFileConstant.DELIMITER; @@ -57,87 +45,49 @@ public class Utilities { private Logger logger = LoggerUtil.getLogger(Utilities.class); - /** - * The Constant FILE_SEPARATOR. - */ - public static final String FILE_SEPARATOR = "\\"; - - @Autowired - private ObjectMapper objMapper; @Autowired private RestApiClient restApiClient; - /** - * The rest client service. - */ - @Autowired - private RestClientService restClientService; - /** * The config server file storage URL. */ @Value("${config.server.file.storage.uri}") private String configServerFileStorageURL; - /** - * The get reg processor identity json. - */ - @Value("${registration.processor.identityjson}") - private String getRegProcessorIdentityJson; - - /** - * The get reg processor demographic identity. - */ - @Value("${registration.processor.demographic.identity}") - private String getRegProcessorDemographicIdentity; - - /** - * The registration processor abis json. - */ - @Value("${registration.processor.print.textfile}") - private String registrationProcessorPrintTextFile; - /** * The get reg issuers config json. */ @Value("${mosip.openid.issuers}") private String getIssuersConfigJson; + @Value("${mosip.openid.verifiers}") + private String trustedVerifiers; + @Value("${mosip.openid.htmlTemplate}") private String getCredentialSupportedHtml; - private String mappingJsonString = null; - - private String identityMappingJsonString = null; - - private String printTextFileJsonString = null; - private String issuersConfigJsonString = null; + private String trustedVerifiersJsonString = null; + private String credentialTemplateHtmlString = null; // uncomment for running mimoto Locally to populate the issuers json // public Utilities(@Value("classpath:mimoto-issuers-config.json") Resource resource, -// @Value("classpath:/templates/CredentialTemplate.html") Resource credentialTemplateResource) throws IOException{ +// @Value("classpath:mimoto-trusted-verifiers.json") Resource trustedVerifiersResource, +// @Value("classpath:/templates/credential-template.html") Resource credentialTemplateResource) throws IOException{ // // issuersConfigJsonString = (Files.readString(resource.getFile().toPath())); +// trustedVerifiersJsonString = (Files.readString(trustedVerifiersResource.getFile().toPath())); // credentialTemplateHtmlString = (Files.readString(credentialTemplateResource.getFile().toPath())); // } - public JSONObject getTemplate() throws JsonParseException, JsonMappingException, IOException { + public JSONObject getTemplate() throws IOException { return objectMapper.readValue(classLoader.getResourceAsStream(defaultTemplate), JSONObject.class); } - public JsonNode getEvent(String requestId, String individualId) throws JsonParseException, JsonMappingException, IOException { - Path resourcePath = Path.of(dataPath, String.format(CredentialShareServiceImpl.EVENT_JSON_FILE_NAME, requestId)); - if (Files.exists(resourcePath)) { - return objectMapper.readValue(resourcePath.toFile(), JsonNode.class); - } - return null; - } - - public JsonNode getVC(String requestId) throws JsonParseException, JsonMappingException, IOException { + public JsonNode getVC(String requestId) throws IOException { Path resourcePath = Path.of(dataPath, String.format(CredentialShareServiceImpl.VC_JSON_FILE_NAME, requestId)); if (Files.exists(resourcePath)) { return objectMapper.readValue(resourcePath.toFile(), JsonNode.class); @@ -145,7 +95,7 @@ public JsonNode getVC(String requestId) throws JsonParseException, JsonMappingEx return null; } - public JsonNode getRequestVC(String requestId) throws JsonParseException, JsonMappingException, IOException { + public JsonNode getRequestVC(String requestId) throws IOException { Path resourcePath = Path.of(dataPath, String.format(CredentialShareServiceImpl.VC_REQUEST_FILE_NAME, requestId)); if (Files.exists(resourcePath)) { return objectMapper.readValue(resourcePath.toFile(), JsonNode.class); @@ -153,7 +103,7 @@ public JsonNode getRequestVC(String requestId) throws JsonParseException, JsonMa return null; } - public JsonNode getDecryptedVC(String requestId) throws JsonParseException, JsonMappingException, IOException { + public JsonNode getDecryptedVC(String requestId) throws IOException { Path resourcePath = Path.of(dataPath, String.format(CredentialShareServiceImpl.CARD_JSON_FILE_NAME, requestId)); if (Files.exists(resourcePath)) { return objectMapper.readValue(resourcePath.toFile(), JsonNode.class); @@ -195,104 +145,18 @@ public String getJson(String configServerFileStorageURL, String uri) { return json; } - public String getPrintTextFileJson(String configServerFileStorageURL, String uri) { - printTextFileJsonString = (printTextFileJsonString != null && !printTextFileJsonString.isEmpty()) ? - printTextFileJsonString : getJson(configServerFileStorageURL, uri); - return printTextFileJsonString; - } - - public String getIdentityMappingJson(String configServerFileStorageURL, String uri) { - identityMappingJsonString = (identityMappingJsonString != null && !identityMappingJsonString.isEmpty()) ? - identityMappingJsonString : getJson(configServerFileStorageURL, uri); - return identityMappingJsonString; - } - - /** - * retrieving identity json ffrom id repo by UIN. - * - * @param uin the uin - * @return the JSON object - * @throws ApisResourceAccessException the apis resource access exception - * @throws IdRepoAppException the id repo app exception - * @throws IOException Signals that an I/O exception has - * occurred. - */ - @SuppressWarnings("unchecked") - public JSONObject retrieveIdrepoJson(String uin) - throws ApisResourceAccessException, IdRepoAppException, IOException { - - if (uin != null) { - logger.debug(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.UIN.toString(), "", - "Utilities::retrieveIdrepoJson()::entry"); - List pathSegments = new ArrayList<>(); - pathSegments.add(uin); - ResponseWrapper idResponseDto; - - idResponseDto = (ResponseWrapper) restClientService.getApi(ApiName.IDREPOGETIDBYUIN, pathSegments, "", "", - ResponseWrapper.class); - if (idResponseDto == null) { - logger.debug(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.UIN.toString(), "", - "Utilities::retrieveIdrepoJson()::exit idResponseDto is null"); - return null; - } - if (!idResponseDto.getErrors().isEmpty()) { - List error = idResponseDto.getErrors(); - logger.error(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.UIN.toString(), "", - "Utilities::retrieveIdrepoJson():: error with error message " + error.get(0).getErrorMessage()); - throw new IdRepoAppException(error.get(0).getErrorMessage()); - } - String response = objMapper.writeValueAsString(idResponseDto.getResponse().getIdentity()); - logger.debug(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.UIN.toString(), "", - "Utilities::retrieveIdrepoJson():: IDREPOGETIDBYUIN GET service call ended Successfully"); - try { - return (JSONObject) new JSONParser().parse(response); - } catch (org.json.simple.parser.ParseException e) { - logger.error(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.UIN.toString(), "", - ExceptionUtils.getStackTrace(e)); - throw new IdRepoAppException("Error while parsing string to JSONObject", e); - } - - } - logger.debug(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.UIN.toString(), "", - "Utilities::retrieveIdrepoJson()::exit UIN is null"); - return null; - } - - /** - * Gets registration processor mapping json from config and maps to - * RegistrationProcessorIdentity java class. - * - * @return the registration processor identity json - * @throws IOException Signals that an I/O exception has occurred. - */ - public JSONObject getRegistrationProcessorMappingJson() throws IOException { - logger.debug(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.USERID.toString(), "", - "Utilities::getRegistrationProcessorMappingJson()::entry"); - - mappingJsonString = (mappingJsonString != null && !mappingJsonString.isEmpty()) ? - mappingJsonString : getJson(configServerFileStorageURL, getRegProcessorIdentityJson); - ObjectMapper mapIdentityJsonStringToObject = new ObjectMapper(); - logger.debug(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.USERID.toString(), "", - "Utilities::getRegistrationProcessorMappingJson()::exit"); - return JsonUtil.getJSONObject(mapIdentityJsonStringToObject.readValue(mappingJsonString, JSONObject.class), MappingJsonConstants.IDENTITY); - - } - - public String getMappingJsonValue(String key) throws IOException { - JSONObject jsonObject = getRegistrationProcessorMappingJson(); - Object obj = jsonObject.get(key); - if (obj instanceof LinkedHashMap) { - LinkedHashMap hm = (LinkedHashMap) obj; - return hm.get("value") != null ? hm.get("value").toString() : null; - } - return jsonObject.get(key) != null ? jsonObject.get(key).toString() : null; - } - - public String getIssuersConfigJsonValue() throws IOException { + public String getIssuersConfigJsonValue() { return (issuersConfigJsonString != null && !issuersConfigJsonString.isEmpty()) ? issuersConfigJsonString : getJson(configServerFileStorageURL, getIssuersConfigJson); } - + public String getTrustedVerifiersJsonValue() { + return (trustedVerifiersJsonString != null && !trustedVerifiersJsonString.isEmpty()) ? + trustedVerifiersJsonString : getJson(configServerFileStorageURL, trustedVerifiers); + } + public String getCredentialSupportedTemplateString() { + return (credentialTemplateHtmlString != null && !credentialTemplateHtmlString.isEmpty()) ? + credentialTemplateHtmlString : getJson(configServerFileStorageURL, getCredentialSupportedHtml); + } public static ResponseWrapper handleExceptionWithErrorCode(Exception exception) { String errorMessage = exception.getMessage(); String errorCode = PlatformErrorMessages.MIMOTO_IDP_GENERIC_EXCEPTION.getCode(); @@ -304,62 +168,4 @@ public static ResponseWrapper handleExceptionWithErrorCode(Exception exc } return getErrorResponse(errorCode, errorMessage); } - - public String getCredentialSupportedTemplateString() throws IOException{ - return (credentialTemplateHtmlString != null && !credentialTemplateHtmlString.isEmpty()) ? - credentialTemplateHtmlString : getJson(configServerFileStorageURL, getCredentialSupportedHtml); - } - - - /** - * retrieve UIN from IDRepo by registration id. - * - * @param regId the reg id - * @return the JSON object - * @throws ApisResourceAccessException the apis resource access exception - * @throws IdRepoAppException the id repo app exception - * @throws IOException Signals that an I/O exception has - * occurred. - */ - @SuppressWarnings("unchecked") - public JSONObject retrieveUIN(String regId) throws ApisResourceAccessException, IdRepoAppException, IOException { - logger.debug(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.REGISTRATIONID.toString(), - regId, "Utilities::retrieveUIN()::entry"); - - if (regId != null) { - List pathSegments = new ArrayList<>(); - pathSegments.add(regId); - ResponseWrapper idResponseDto; - logger.debug(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.REGISTRATIONID.toString(), - regId, "Utilities::retrieveUIN():: RETRIEVEIDENTITYFROMRID GET service call Started"); - - idResponseDto = (ResponseWrapper) restClientService.getApi(ApiName.RETRIEVEIDENTITYFROMRID, pathSegments, "", - "", ResponseWrapper.class); - logger.debug(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.UIN.toString(), "", - "Utilities::retrieveUIN():: RETRIEVEIDENTITYFROMRID GET service call ended successfully"); - - if (!idResponseDto.getErrors().isEmpty()) { - logger.error(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.REGISTRATIONID.toString(), - regId, - "Utilities::retrieveUIN():: error with error message " - + PlatformErrorMessages.MIMOTO_PVM_INVALID_UIN.getMessage() + " " - + idResponseDto.getErrors().toString()); - throw new IdRepoAppException( - PlatformErrorMessages.MIMOTO_PVM_INVALID_UIN.getMessage() + idResponseDto.getErrors().toString()); - } - String response = objMapper.writeValueAsString(idResponseDto.getResponse().getIdentity()); - try { - return (JSONObject) new JSONParser().parse(response); - } catch (org.json.simple.parser.ParseException e) { - logger.error(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.UIN.toString(), "", - ExceptionUtils.getStackTrace(e)); - throw new IdRepoAppException("Error while parsing string to JSONObject", e); - } - - } - logger.debug(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.REGISTRATIONID.toString(), "", - "Utilities::retrieveUIN()::exit regId is null"); - - return null; - } } diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 37c2361fe..8e6c0bebf 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -1,9 +1,9 @@ # MOSIP -mosipbox.public.url=https://api-internal.dev2.mosip.net -public.internet.url=https://api.dev2.mosip.net -public.url=https://api-internal.dev2.mosip.net -keycloak.internal.url=https://iam.dev2.mosip.net/ +mosipbox.public.url=https://api-internal.dev1.mosip.net +public.internet.url=https://api-internal.dev1.mosip.net +public.url=https://api.dev1.mosip.net +keycloak.internal.url=https://iam.dev1.mosip.net/ # Resident service mosip.resident.base.url=${mosipbox.public.url}/resident/v1 @@ -201,13 +201,19 @@ wallet.binding.partner.api.key=Aci9jg28B8mO_LDfDXo3ZTp5_HKgEMun2tYyHCa1e8k # OpenID #configurations related to openid4vc mosip.openid.issuers=mimoto-issuers-config.json -mosip.openid.htmlTemplate=CredentialTemplate.html +mosip.openid.verifiers=mimoto-trusted-verifiers.json +mosip.openid.htmlTemplate=credential-template.html +#configurations related to openid4vc mosip.oidc.client.assertion.type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer mosip.oidc.p12.filename=oidckeystore.p12 -mosip.oidc.p12.password=5YBx6QT2wbY8Ls6w +mosip.oidc.p12.password=password mosip.oidc.p12.path=certs/ - +mosip.inji.web.host=http://injiweb.dev1.mosip.net/v1/mimoto +mosip.inji.web.authorize.url=INJI_OVP://payload=${mosip.inji.web.host}/presentation/authorize?response_type=vp_token&resource=%s&presentation_definition=%s +mosip.inji.verify.redirect.url=%s#vp_token=%s&presentation_submission=%s +#mosip.data.share.url=${public.internet.url}/v1/datashare/create/static-policyid/static-subscriberid +mosip.data.share.url=https://api-internal.dev.mosip.net/v1/datashare/create/static-policyid/static-subscriberid diff --git a/src/main/resources/mimoto-issuers-config.json b/src/main/resources/mimoto-issuers-config.json index 3c4ba7422..bfdf3219b 100644 --- a/src/main/resources/mimoto-issuers-config.json +++ b/src/main/resources/mimoto-issuers-config.json @@ -1,72 +1,5 @@ { "issuers": [ - { - "credential_issuer": "Mosip", - "display": [ - { - "name": "UIN, VID, AID", - "logo": { - "url": "https://mosip.io/images/footer/foot-logo-b.png", - "alt_text": "mosip logo" - }, - "title": "Download MOSIP Credentials via OTP", - "description": "Download credentials by providing UIN, VID or AID", - "language": "en" - }, - { - "name": "UIN, VID, AID", - "logo": { - "url": "https://mosip.io/images/footer/foot-logo-b.png", - "alt_text": "شعار موسيب" - }, - "title": "قم بتنزيل بيانات اعتماد MOSIP عبر OTP", - "description": "قم بتنزيل بيانات الاعتماد من خلال توفير UIN أو VID أو AID", - "language": "ar" - }, - { - "name": "UIN, VID, AID", - "logo": { - "url": "https://mosip.io/images/footer/foot-logo-b.png", - "alt_text": "मोसिप लोगो" - }, - "title": "OTP के माध्यम से MOSIP क्रेडेंशियल डाउनलोड करें", - "description": "यूआईएन, वीआईडी या एआईडी प्रदान करके क्रेडेंशियल डाउनलोड करें", - "language": "hi" - }, - { - "name": "UIN, VID, AID", - "logo": { - "url": "https://mosip.io/images/footer/foot-logo-b.png", - "alt_text": "mosip ಲೋಗೋ" - }, - "title": "OTP ಮೂಲಕ MOSIP ರುಜುವಾತುಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿ", - "description": "UIN, VID ಅಥವಾ AID ಒದಗಿಸುವ ಮೂಲಕ ರುಜುವಾತುಗಳನ್ನು ಡೌನ್\u200Cಲೋಡ್ ಮಾಡಿ", - "language": "kn" - }, - { - "name": "UIN, VID, AID", - "logo": { - "url": "https://mosip.io/images/footer/foot-logo-b.png", - "alt_text": "mosip சின்னம்" - }, - "title": "OTP வழியாக MOSIP சான்றுகளைப் பதிவிறக்கவும்", - "description": "UIN, VID அல்லது AID ஐ வழங்குவதன் மூலம் நற்சான்றிதழ்களைப் பதிவிறக்கவும்", - "language": "ta" - }, - { - "name": "UIN, VID, AID", - "logo": { - "url": "https://mosip.io/images/footer/foot-logo-b.png", - "alt_text": "logo ng mosip" - }, - "title": "I-download ang Mga Kredensyal ng MOSIP sa pamamagitan ng OTP", - "description": "Mag-download ng mga kredensyal sa pamamagitan ng pagbibigay ng UIN, VID o AID", - "language": "fil" - } - ], - "protocol": "OTP", - "enabled": "true" - }, { "credential_issuer": "ESignet", "display": [ @@ -152,171 +85,95 @@ "MOSIPVerifiableCredential" ], "credential_audience": "https://${mosip.esignet.host}/v1/esignet", + "ovp_qr_enabled": "false", "enabled": "false" }, { "credential_issuer": "Sunbird", + "protocol": "OpenId4VCI", "display": [ { - "name": "Sunbird RC Insurance Verifiable Credential", + "name": "Sunbird Insurance", "logo": { "url": "https://sunbird.org/images/sunbird-logo-new.png", "alt_text": "a square logo of a Sunbird" }, - "language": "en", "title": "Download Sunbird Credentials", - "description": "Download credentials with your Policy Number" + "description": "Download credentials with your Policy Number", + "language": "en" }, { - "name": "بيانات الاعتماد التي يمكن التحقق منها للتأمين Sunbird RC", + "name": "التأمين سنبيرد", "logo": { "url": "https://sunbird.org/images/sunbird-logo-new.png", "alt_text": "شعار مربع لطائر الشمس" }, - "language": "ar", "title": "قم بتنزيل بيانات اعتماد Sunbird", - "description": "قم بتنزيل بيانات الاعتماد باستخدام رقم السياسة الخاص بك" + "description": "قم بتنزيل بيانات الاعتماد باستخدام رقم السياسة الخاص بك", + "language": "ar" }, { - "name": "सनबर्ड आरसी बीमा सत्यापन योग्य क्रेडेंशियल", + "name": "सनबर्ड बीमा", "logo": { "url": "https://sunbird.org/images/sunbird-logo-new.png", "alt_text": "सनबर्ड का एक चौकोर लोगो" }, - "language": "hi", "title": "सनबर्ड क्रेडेंशियल्स डाउनलोड करेंं", - "description": "अपने पॉलिसी नंबर के साथ क्रेडेंशियल डाउनलोड करें" + "description": "अपने पॉलिसी नंबर के साथ क्रेडेंशियल डाउनलोड करें", + "language": "hi" }, { - "name": "ಸನ್ಬರ್ಡ್ ಆರ್ಸಿ ವಿಮೆ ಪರಿಶೀಲಿಸಬಹುದಾದ ರುಜುವಾತು", + "name": "ಸನ್ ಬರ್ಡ್", "logo": { "url": "https://sunbird.org/images/sunbird-logo-new.png", "alt_text": "ಸನ್ ಬರ್ಡ್ ನ ಚೌಕಾಕಾರದ ಲೋಗೋ" }, - "language": "kn", "title": "ಸನ್ಬರ್ಡ್ ರುಜುವಾತುಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿ", - "description": "ನಿಮ್ಮ ಪಾಲಿಸಿ ಸಂಖ್ಯೆಯೊಂದಿಗೆ ರುಜುವಾತುಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿ" + "description": "ನಿಮ್ಮ ಪಾಲಿಸಿ ಸಂಖ್ಯೆಯೊಂದಿಗೆ ರುಜುವಾತುಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿ", + "language": "kn" }, { - "name": "Sunbird RC இன்சூரன்ஸ் சரிபார்க்கக்கூடிய நற்சான்றிதழ்", + "name": "சன்பேர்ட் காப்பீடு", "logo": { "url": "https://sunbird.org/images/sunbird-logo-new.png", "alt_text": "சூரிய பறவையின் சதுர சின்னம்" }, - "language": "ta", "title": "Sunbird சான்றுகளைப் பதிவிறக்கவும்", - "description": "உங்கள் பாலிசி எண்ணுடன் நற்சான்றிதழ்களைப் பதிவிறக்கவும்" + "description": "உங்கள் பாலிசி எண்ணுடன் நற்சான்றிதழ்களைப் பதிவிறக்கவும்", + "language": "ta" }, { - "name": "Kredensyal na Nabe-verify ng Sunbird RC Insurance", + "name": "Seguro sa Sunbird", "logo": { "url": "https://sunbird.org/images/sunbird-logo-new.png", "alt_text": "isang parisukat na logo ng isang Sunbird" }, - "language": "fil", "title": "I-download ang Mga Kredensyal ng Sunbird", - "description": "Mag-download ng mga kredensyal gamit ang iyong Numero ng Patakaran" + "description": "Mag-download ng mga kredensyal gamit ang iyong Numero ng Patakaran", + "language": "fil" } ], - "protocol": "OpenId4VCI", - "client_id": "${mimoto.oidc.sunbird.partner.clientid}", - "client_alias": "esignet-sunbird-partner", + "client_id": "esignet-sunbird-partner", + "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", "scopes_supported": [ "sunbird_rc_insurance_vc_ldp" ], - "additional_headers": { - "Accept": "application/json" - }, - ".well-known": "https://vijay151096.github.io/did-testing/openid-credential-issuer.json", - "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", - "authorization_endpoint": "https://${mosip.esignet.mock.host}/authorize", - "authorization_audience": "https://${mosip.esignet.mock.host}/v1/esignet/oauth/v2/token", - "token_endpoint": "https://${mosip.api.public.host}/residentmobileapp/get-token/Sunbird", - "proxy_token_endpoint": "https://${mosip.esignet.mock.host}/v1/esignet/oauth/v2/token", - "credential_endpoint": "https://${mosip.esignet.mock.host}/v1/esignet/vci/credential", + "authorization_endpoint": "https://esignet-insurance.dev1.mosip.net/authorize", + "authorization_audience": "https://esignet-insurance.dev1.mosip.net/v1/esignet/oauth/v2/token", + "token_endpoint": "https://api.dev1.mosip.net/residentmobileapp/get-token/Sunbird", + "proxy_token_endpoint": "https://esignet-insurance.dev1.mosip.net/v1/esignet/oauth/v2/token", + "credential_endpoint": "https://esignet-insurance.dev1.mosip.net/v1/esignet/vci/credential", "credential_type": [ "VerifiableCredential", "InsuranceCredential" ], - "credential_audience": "https://${mosip.esignet.mock.host}/v1/esignet", - "enabled": "false" - }, - { - "credential_issuer": "HealthCoverageZ", - "display": [ - { - "name": "HealthCoverageZ Verifiable Credential", - "logo": { - "url": "https://sunbird.org/images/sunbird-logo-new.png", - "alt_text": "a square logo of a HealthCoverageZ" - }, - "language": "en", - "title": "Download HealthCoverageZ Credentials", - "description": "Download credentials with your Policy Number" - } - ], - "protocol": "OpenId4VCI", - "client_id": "${mimoto.oidc.sunbird.partner.clientid}", - "client_alias": "esignet-sunbird-partner", - "additional_headers": { - "Accept": "application/json" - }, - ".well-known": "https://esignet.qa-inji.mosip.net/.well-known/openid-credential-issuer", - "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", - "authorization_endpoint": "https://issuer-host/authorize", - "authorization_audience": "https://issuer-host/v1/esignet/oauth/v2/token", - "token_endpoint": "https://issuer-public-host/residentmobileapp/get-token/HealthCoverageZ", - "proxy_token_endpoint": "https://issuer-host/v1/esignet/oauth/v2/token", - "enabled": "true" - }, - { - "credential_issuer": "ProtectionPlus+", - "display": [ - { - "name": "ProtectionPlus+ Verifiable Credential", - "logo": { - "url": "https://sunbird.org/images/sunbird-logo-new.png", - "alt_text": "a square logo of a Sunbird" - }, - "language": "en", - "title": "Download ProtectionPlus+ Credentials", - "description": "Download credentials with your Policy Number" - } - ], - "protocol": "OpenId4VCI", - "client_id": "${mimoto.oidc.sunbird.partner.clientid}", + "credential_audience": "https://esignet-insurance.dev1.mosip.net", "client_alias": "esignet-sunbird-partner", - "scopes_supported": [ - "sunbird_rc_insurance_vc_ldp" - ], "additional_headers": { "Accept": "application/json" }, - "credentials_supported": [ - { - "format": "ldp_vc", - "id": "VehicleInsuranceCredential", - "credential_definition": { - "type": [ - "VerifiableCredential", - "InsuranceCredential" - ] - }, - "scope": "vehicle_insurance_vc_ldp" - } - ], - "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", - "authorization_endpoint": "https://issuer-host/authorize", - "authorization_audience": "https://issuer-host/v1/esignet/oauth/v2/token", - "token_endpoint": "https://issuer-public-host/residentmobileapp/get-token/ProtectionPlus+", - "proxy_token_endpoint": "https://issuer-host/v1/esignet/oauth/v2/token", - "credential_endpoint": "https://issuer-host/v1/esignet/vci/credential", - "credential_type": [ - "VerifiableCredential", - "InsuranceCredential" - ], - "credential_audience": "https://issuer-host", - "enabled": "true" + "enabled": "true", + ".well-known": "https://esignet-insurance.dev1.mosip.net/.well-known/openid-credential-issuer?version=v11" } ] } diff --git a/src/main/resources/mimoto-trusted-verifiers.json b/src/main/resources/mimoto-trusted-verifiers.json new file mode 100644 index 000000000..3d35060a6 --- /dev/null +++ b/src/main/resources/mimoto-trusted-verifiers.json @@ -0,0 +1,18 @@ +{ + "verifiers": [ + { + "client_id": "https://injiverify.dev2.mosip.net", + "redirect_uri": [ + "https://injiverify.qa-inji.mosip.net/redirect", + "https://injiverify.dev2.mosip.net/redirect" + ] + }, + { + "client_id": "https://injiverify.dev1.mosip.net", + "redirect_uri": [ + "https://injiverify.qa-inji.mosip.net/redirect", + "https://injiverify.dev1.mosip.net/redirect" + ] + } + ] +} diff --git a/src/main/resources/templates/CredentialTemplate.html b/src/main/resources/templates/credential-template.html similarity index 100% rename from src/main/resources/templates/CredentialTemplate.html rename to src/main/resources/templates/credential-template.html diff --git a/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java b/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java index 901f88090..105ac6b3e 100644 --- a/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java @@ -47,7 +47,9 @@ import java.io.File; import java.io.IOException; import java.nio.file.Files; -import java.util.*; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.stream.Collectors; import static io.mosip.mimoto.exception.PlatformErrorMessages.API_NOT_ACCESSIBLE_EXCEPTION; @@ -57,7 +59,8 @@ import static org.mockito.Mockito.verify; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @RunWith(SpringRunner.class) @SpringBootTest(classes = TestBootApplication.class) @@ -194,7 +197,7 @@ public void generatePdfForVCTest() throws Exception { Mockito.when(credentialService.generatePdfForVerifiableCredentials(new VCCredentialResponse(), getIssuerDTO("Issuer1"), getCredentialSupportedResponseDraft11("CredentialType1"), - "credential_endpoint")) + "dataShareUrl")) .thenReturn(new ByteArrayInputStream("Mock Pdf".getBytes())) .thenThrow(new Exception()); diff --git a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java new file mode 100644 index 000000000..a85c0d1f5 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java @@ -0,0 +1,91 @@ +package io.mosip.mimoto.service; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; +import io.mosip.mimoto.dto.openid.presentation.PresentationDefinitionDTO; +import io.mosip.mimoto.dto.openid.presentation.PresentationRequestDTO; +import io.mosip.mimoto.dto.openid.presentation.VerifiablePresentationDTO; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.InvalidVerifierException; +import io.mosip.mimoto.exception.VPNotCreatedException; +import io.mosip.mimoto.service.impl.PresentationServiceImpl; +import io.mosip.mimoto.service.impl.VerifiersServiceImpl; +import io.mosip.mimoto.util.RestApiClient; +import io.mosip.mimoto.util.TestUtilities; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.test.util.ReflectionTestUtils; + +import java.io.IOException; + +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.*; + +@RunWith(MockitoJUnitRunner.class) +public class PresentationServiceTest { + @Mock + VerifiersService verifiersService = new VerifiersServiceImpl(); + @Mock + RestApiClient restApiClient; + @Mock + ObjectMapper objectMapper; + + @InjectMocks + PresentationServiceImpl presentationService; + + @Before + public void setup() throws JsonProcessingException { + PresentationDefinitionDTO presentationDefinitionDTO = TestUtilities.getPresentationDefinitionDTO(); + ReflectionTestUtils.setField(presentationService, "injiVerifyRedirectUrl", "%s#vp_token=%s&presentation_submission=%s"); + ReflectionTestUtils.setField(presentationService, "dataShareUrl", "test_resource"); + + when(objectMapper.readValue(eq(TestUtilities.getObjectAsString(presentationDefinitionDTO)), eq(PresentationDefinitionDTO.class))).thenReturn(presentationDefinitionDTO); + when(objectMapper.writeValueAsString(any())).thenReturn("test-data"); + } + @Test(expected = InvalidVerifierException.class) + public void throwInvalidVerifierExceptionWhenClientIdPassedIsIncorrect() throws ApiNotAccessibleException, IOException { + PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); + doThrow(InvalidVerifierException.class).when(verifiersService).validateVerifier(presentationRequestDTO); + presentationService.authorizePresentation(TestUtilities.getPresentationRequestDTO()); + } + + @Test + public void credentialProofMatchingWithVPRequest() throws Exception { + + String mockResponse = TestUtilities.getObjectAsString(TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020")); + VCCredentialResponse vcCredentialResponse = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); + VerifiablePresentationDTO verifiablePresentationDTO = TestUtilities.getVerifiablePresentationDTO(); + PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); + + doNothing().when(verifiersService).validateVerifier(eq(presentationRequestDTO)); + when(restApiClient.getApi(eq(presentationRequestDTO.getResource()), eq(String.class))).thenReturn(mockResponse); + when(objectMapper.readValue(eq(TestUtilities.getObjectAsString(vcCredentialResponse)), eq(VCCredentialResponse.class))).thenReturn(vcCredentialResponse); + when(objectMapper.readValue(eq("test-data"), eq(VerifiablePresentationDTO.class))).thenReturn(verifiablePresentationDTO); + + String actualRedirectUrl = presentationService.authorizePresentation(TestUtilities.getPresentationRequestDTO()); + String expectedRedirectUrl = "test_redirect_uri#vp_token=dGVzdC1kYXRh&presentation_submission=test-data"; + + assertEquals(expectedRedirectUrl, actualRedirectUrl); + } + + @Test(expected = VPNotCreatedException.class) + public void credentialProofMismatchWithVPRequest() throws ApiNotAccessibleException, IOException { + + String mockResponse = TestUtilities.getObjectAsString(TestUtilities.getVCCredentialResponseDTO("RSASignature2020")); + VCCredentialResponse vcCredentialResponse = TestUtilities.getVCCredentialResponseDTO("RSASignature2020"); + PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); + + doNothing().when(verifiersService).validateVerifier(eq(presentationRequestDTO)); + when(restApiClient.getApi(eq(presentationRequestDTO.getResource()), eq(String.class))).thenReturn(mockResponse); + when(objectMapper.readValue(eq(TestUtilities.getObjectAsString(vcCredentialResponse)), eq(VCCredentialResponse.class))).thenReturn(vcCredentialResponse); + + presentationService.authorizePresentation(TestUtilities.getPresentationRequestDTO()); + } +} diff --git a/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java b/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java new file mode 100644 index 000000000..059060a22 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java @@ -0,0 +1,81 @@ +package io.mosip.mimoto.service; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.dto.openid.VerifierDTO; +import io.mosip.mimoto.dto.openid.VerifiersDTO; +import io.mosip.mimoto.dto.openid.presentation.PresentationRequestDTO; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.InvalidVerifierException; +import io.mosip.mimoto.service.impl.VerifiersServiceImpl; +import io.mosip.mimoto.util.TestUtilities; +import io.mosip.mimoto.util.Utilities; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; + +import java.io.IOException; +import java.util.Optional; + +import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.when; + +@RunWith(MockitoJUnitRunner.class) +public class VerifierServiceTest { + + @Mock + Utilities utilities; + @Mock + ObjectMapper objectMapper; + @InjectMocks + VerifiersServiceImpl verifiersService; + + @Before + public void setUp() throws JsonProcessingException { + VerifiersDTO verifiersDTO = TestUtilities.getTrustedVerifiers(); + String verifiersListString = TestUtilities.getObjectAsString(verifiersDTO); + when(utilities.getTrustedVerifiersJsonValue()).thenReturn(verifiersListString); + when(objectMapper.readValue(eq(verifiersListString), eq(VerifiersDTO.class))).thenReturn(verifiersDTO); + } + + @Test + public void getCorrectVerifierWhenCorrectClientIdIsPassed() throws ApiNotAccessibleException, IOException { + Optional verifierDTO = verifiersService.getVerifiersByClientId("test-clientId"); + assertNotNull(verifierDTO.get()); + assertEquals(verifierDTO.get().getClientId(), "test-clientId"); + } + + @Test + public void getNullWhenInvalidClientIdIsPassed() throws ApiNotAccessibleException, IOException { + Optional verifierDTO = verifiersService.getVerifiersByClientId("test-clientId2"); + assertTrue(verifierDTO.isEmpty()); + } + + @Test + public void validateTrustedVerifiersAndDoNothing() throws ApiNotAccessibleException, IOException { + PresentationRequestDTO presentationRequestDTO = new PresentationRequestDTO(); + presentationRequestDTO.setClient_id("test-clientId"); + presentationRequestDTO.setRedirect_uri("test-redirectUri"); + verifiersService.validateVerifier(presentationRequestDTO); + } + + @Test(expected = InvalidVerifierException.class) + public void validateTrustedVerifiersAndThrowInvalidVerifierExceptionWhenClientIdIsIncorrect() throws ApiNotAccessibleException, IOException { + PresentationRequestDTO presentationRequestDTO = new PresentationRequestDTO(); + presentationRequestDTO.setClient_id("test-clientId2"); + presentationRequestDTO.setRedirect_uri("test-redirectUri"); + verifiersService.validateVerifier(presentationRequestDTO); + } + + @Test(expected = InvalidVerifierException.class) + public void validateTrustedVerifiersAndThrowInvalidVerifiersExceptionWhenRedirectUriIsIncorrect() throws ApiNotAccessibleException, IOException { + PresentationRequestDTO presentationRequestDTO = new PresentationRequestDTO(); + presentationRequestDTO.setClient_id("test-clientId"); + presentationRequestDTO.setRedirect_uri("test-redirectUri2"); + verifiersService.validateVerifier(presentationRequestDTO); + } +} diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index 3e425725d..d1c60eb26 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -1,10 +1,16 @@ package io.mosip.mimoto.util; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import io.mosip.mimoto.dto.DisplayDTO; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.LogoDTO; import io.mosip.mimoto.dto.mimoto.*; +import io.mosip.mimoto.dto.openid.VerifierDTO; +import io.mosip.mimoto.dto.openid.VerifiersDTO; +import io.mosip.mimoto.dto.openid.presentation.*; +import java.util.*; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -181,4 +187,88 @@ public static IssuerDTO getIssuerConfigDTO(String issuerName, List nullF } return issuer; } + + public static PresentationRequestDTO getPresentationRequestDTO(){ + return PresentationRequestDTO.builder() + .presentation_definition("{\"id\":\"test-id\",\"input_descriptors\":[{\"id\":\"test-input-id\",\"format\":{\"ldpVc\":{\"proofTypes\":[\"Ed25519Signature2020\"]}}}]}") + .client_id("test_client_id") + .resource("test_resource") + .response_type("test_response_type") + .redirect_uri("test_redirect_uri").build(); + } + + public static VCCredentialProperties getVCCredentialPropertiesDTO(String type){ + + ArrayList contextList = new ArrayList<>(); + contextList.add("context-1"); + contextList.add("context-2"); + + List typeList = new ArrayList<>(); + typeList.add("VerifiableCredential"); + typeList.add("VCTypeCredential"); + + Map credentialSubject = new HashMap<>(); + credentialSubject.put("key1", "value1"); + credentialSubject.put("key2", "value2"); + + VCCredentialResponseProof vcCredentialResponseProof = VCCredentialResponseProof.builder() + .type(type) + .proofPurpose("test-proofPurpose") + .proofValue("test-proofValue") + .jws("test-jws") + .verificationMethod("test-verificationMethod").build(); + + return VCCredentialProperties.builder() + .id("test-id") + .issuer("test-issuer") + .issuanceDate("test-issuanceDate") + .expirationDate("test-expirationDate") + .context(contextList) + .type(typeList) + .proof(vcCredentialResponseProof) + .credentialSubject(credentialSubject).build(); + } + + public static VCCredentialResponse getVCCredentialResponseDTO(String type){ + return VCCredentialResponse.builder() + .credential(getVCCredentialPropertiesDTO(type)) + .format("ldp_vc").build(); + } + + public static PresentationDefinitionDTO getPresentationDefinitionDTO(){ + LDPVc ldpVc = LDPVc.builder().proofTypes(Collections.singletonList("Ed25519Signature2020")).build(); + Format format = Format.builder().ldpVc(ldpVc).build(); + InputDescriptorDTO inputDescriptorDTO = InputDescriptorDTO.builder().id("test-input-id").format(format).build(); + + return PresentationDefinitionDTO.builder() + .inputDescriptors(Collections.singletonList(inputDescriptorDTO)) + .id("test-id").build(); + } + + public static VerifiablePresentationDTO getVerifiablePresentationDTO(){ + List contextList = new ArrayList<>(); + contextList.add("https://www.w3.org/2018/credentials/v1"); + + List typeList = new ArrayList<>(); + typeList.add("VerifiablePresentation"); + + return VerifiablePresentationDTO.builder() + .verifiableCredential(Collections.singletonList(getVCCredentialPropertiesDTO("Ed25519Signature2020"))) + .context(contextList) + .type(typeList).build(); + } + + public static VerifiersDTO getTrustedVerifiers() { + VerifierDTO verifierDTO = VerifierDTO.builder() + .clientId("test-clientId") + .redirectUri(Collections.singletonList("test-redirectUri")).build(); + + return VerifiersDTO.builder() + .verifiers(Collections.singletonList(verifierDTO)).build(); + } + + public static String getObjectAsString(Object object) throws JsonProcessingException { + ObjectMapper objectMapper = new ObjectMapper(); + return objectMapper.writeValueAsString(object); + } } From b6749e1ca1c63b92046934bfb64262d5b8d79e04 Mon Sep 17 00:00:00 2001 From: bhumi46 <111699703+bhumi46@users.noreply.github.com> Date: Tue, 23 Jul 2024 17:24:52 +0530 Subject: [PATCH 183/860] [DSD-5795] updated docker file to copy Biometrics and app prop as well as reduced docker layers for run commands (#332) * Update Dockerfile Signed-off-by: bhumi46 <111699703+bhumi46@users.noreply.github.com> * Update Dockerfile Signed-off-by: bhumi46 <111699703+bhumi46@users.noreply.github.com> * Update Dockerfile Signed-off-by: bhumi46 <111699703+bhumi46@users.noreply.github.com> * Update Dockerfile Signed-off-by: bhumi46 <111699703+bhumi46@users.noreply.github.com> * Update Dockerfile Signed-off-by: bhumi46 <111699703+bhumi46@users.noreply.github.com> * Update Dockerfile Signed-off-by: bhumi46 <111699703+bhumi46@users.noreply.github.com> * Update Dockerfile Signed-off-by: bhumi46 <111699703+bhumi46@users.noreply.github.com> * [DSD-5795] Signed-off-by: bhumi46 * [DSD-5795] Signed-off-by: bhumi46 * [DSD-5795] Signed-off-by: bhumi46 * [DSD-5795] Signed-off-by: bhumi46 --------- Signed-off-by: bhumi46 <111699703+bhumi46@users.noreply.github.com> Signed-off-by: bhumi46 --- apitest/Dockerfile | 40 ++++++++++++++++++---------------------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/apitest/Dockerfile b/apitest/Dockerfile index 287c09bd2..8ab868535 100644 --- a/apitest/Dockerfile +++ b/apitest/Dockerfile @@ -23,36 +23,32 @@ ARG container_user_gid=1001 ARG KUBECTL_VERSION=1.22.9 -# install packages and create user -RUN apt-get -y update \ -&& apt-get install -y unzip jq \ -&& groupadd -g ${container_user_gid} ${container_user_group} \ -&& useradd -u ${container_user_uid} -g ${container_user_group} -s /bin/sh -m ${container_user} \ -&& curl -LO "https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VERSION}/bin/linux/amd64/kubectl" \ -&& chmod +x kubectl \ -&& mv kubectl /usr/local/bin/ - -# set working directory for the user WORKDIR /home/${container_user} ENV work_dir=/home/${container_user} -ADD ./apitest/target/ $work_dir +COPY ./apitest/target $work_dir/ +COPY application.properties $work_dir/ +COPY ["Biometric Devices", "$work_dir/Biometric Devices"] +COPY ["resource", "$work_dir/resource"] +COPY entrypoint.sh $work_dir -ADD entrypoint.sh $work_dir/entrypoint.sh +RUN apt-get -y update && \ + apt-get install -y unzip jq && \ + groupadd -g ${container_user_gid} ${container_user_group} && \ + useradd -u ${container_user_uid} -g ${container_user_group} -s /bin/sh -m ${container_user} && \ + curl -LO "https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VERSION}/bin/linux/amd64/kubectl" && \ + chmod +x kubectl && \ + mv kubectl /usr/local/bin/ && \ + chown -R ${container_user}:${container_user} /home/${container_user} /usr/local/openjdk-11/lib/security/cacerts && \ + chmod 644 /usr/local/openjdk-11/lib/security/cacerts && \ + chmod +x $work_dir/entrypoint.sh -RUN chmod +x $work_dir/entrypoint.sh -#ADD ./testNgXmlFiles/ $work_dir/testNgXmlFiles/ - -# change permissions of file inside working dir -RUN chown -R ${container_user}:${container_user} /home/${container_user} /usr/local/openjdk-11/lib/security/cacerts - -RUN chmod 644 /usr/local/openjdk-11/lib/security/cacerts - -# select container user for all tasks USER ${container_user_uid}:${container_user_gid} +WORKDIR ${work_dir} + EXPOSE 8083 ENV MODULES= @@ -60,4 +56,4 @@ ENV ENV_USER= ENV ENV_ENDPOINT= ENV ENV_TESTLEVEL=smokeAndRegression -ENTRYPOINT ["./entrypoint.sh"] +ENTRYPOINT ["./entrypoint.sh"] \ No newline at end of file From ff30d65616cd522500c22b6fe30a9df031845ce6 Mon Sep 17 00:00:00 2001 From: Praful Rakhade <99539100+Prafulrakhade@users.noreply.github.com> Date: Wed, 24 Jul 2024 11:03:18 +0530 Subject: [PATCH 184/860] [DSD-5811] updated values.yaml file (#331) * [DSD-5811] updated values.yaml file * [DSD-5811] updated values.yaml file * [DSD-5811] updated values.yaml file * [DSD-5811] updated values.yaml file Signed-off-by: techno-467 --------- Signed-off-by: techno-467 --- helm/inji-config-server/copy_secrets.sh | 1 + helm/inji-config-server/values.yaml | 71 +++++++++++++++++++++++-- 2 files changed, 69 insertions(+), 3 deletions(-) diff --git a/helm/inji-config-server/copy_secrets.sh b/helm/inji-config-server/copy_secrets.sh index 07757ed56..ad391a1f2 100755 --- a/helm/inji-config-server/copy_secrets.sh +++ b/helm/inji-config-server/copy_secrets.sh @@ -5,6 +5,7 @@ function copying_secrets() { COPY_UTIL=./copy_cm_func.sh DST_NS=config-server # DST_NS: Destination namespace $COPY_UTIL secret db-common-secrets postgres $DST_NS + $COPY_UTIL secret conf-secrets-various conf-secrets $DST_NS return 0 } diff --git a/helm/inji-config-server/values.yaml b/helm/inji-config-server/values.yaml index c166e9349..b707b1264 100755 --- a/helm/inji-config-server/values.yaml +++ b/helm/inji-config-server/values.yaml @@ -15,15 +15,80 @@ envVariables: name: global key: mosip-api-host enabled: true + - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_API_INTERNAL_HOST valueFrom: configMapKeyRef: name: global key: mosip-api-internal-host enabled: true - - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_INJIWEB_HOST + + - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_PARTNER_CRYPTO_P12_PASSWORD + valueFrom: + secretKeyRef: + key: mosip-partner-crypto-p12-password + name: conf-secrets-various + enabled: true + + - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MPARTNER_DEFAULT_MOBILE_SECRET + valueFrom: + secretKeyRef: + key: mpartner_default_mobile_secret + name: keycloak-client-secrets + enabled: true + + - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_KEYCLOAK_INTERNAL_URL valueFrom: configMapKeyRef: - name: global - key: mosip-injiweb-host + name: keycloak-host + key: keycloak-internal-url + enabled: true + + - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_KEYCLOAK_EXTERNAL_URL + valueFrom: + configMapKeyRef: + name: keycloak-host + key: keycloak-external-url + enabled: true + + - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_KEYCLOAK_INTERNAL_HOST + valueFrom: + configMapKeyRef: + name: keycloak-host + key: keycloak-internal-host enabled: true + + - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_KEYCLOAK_EXTERNAL_HOST + valueFrom: + configMapKeyRef: + name: keycloak-host + key: keycloak-external-host + enabled: true + + - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_DB_DBUSER_PASSWORD + valueFrom: + secretKeyRef: + name: db-common-secrets + key: db-dbuser-password + enabled: true + + - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_S3_ACCESSKEY + valueFrom: + configMapKeyRef: + name: s3 + key: s3-user-key + enabled: true + + - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_S3_REGION + valueFrom: + configMapKeyRef: + name: s3 + key: s3-region + enabled: true + + - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_S3_SECRETKEY + valueFrom: + secretKeyRef: + name: s3 + key: s3-user-secret + enabled: true \ No newline at end of file From 46a8e39b5b34c532edde42951c12daeb1f763f63 Mon Sep 17 00:00:00 2001 From: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> Date: Wed, 24 Jul 2024 12:15:03 +0530 Subject: [PATCH 185/860] INJIMOB-1593 & INJIWEB-178 - Added test cases for create policy in sunbird registry and download sunbird VC (#330) * INJIMOB-1593 & INJIWEB-178 - Added test cases for create policy in sunbird registry and download sunbird VC Signed-off-by: Mohanachandran S * INJIMOB-1593 & INJIWEB-178 - Added test cases for create policy in sunbird registry and download sunbird VC Signed-off-by: Mohanachandran S --------- Signed-off-by: Mohanachandran S --- .../apirig/testscripts/DeleteWithParam.java | 165 ++++++++++++++++++ .../apirig/testscripts/GetWithParam.java | 27 +++ .../apirig/testscripts/SimplePost.java | 40 ++++- .../testscripts/SimplePostForAutoGenId.java | 12 +- .../main/resources/config/Kernel.properties | 3 + .../resources/config/application.properties | 6 +- .../DownloadIssuerCredential.yml | 23 ++- .../AuthenticateUserSunBirdC.hbs | 15 ++ .../AuthenticateUserSunBirdC.yml | 20 +++ .../AuthenticateUserSunBirdCResult.hbs | 1 + .../AuthorizationCodeSunBirdC.hbs | 19 ++ .../AuthorizationCodeSunBirdC.yml | 17 ++ .../AuthorizationCodeSunBirdCResult.hbs | 1 + .../OAuthDetailsRequestSunBirdC.hbs | 17 ++ .../OAuthDetailsRequestSunBirdC.yml | 26 +++ .../OAuthDetailsRequestSunBirdCResult.hbs | 1 + .../CreatePolicySunBirdR.hbs | 16 ++ .../CreatePolicySunBirdR.yml | 24 +++ .../CreatePolicySunBirdRResult.hbs | 5 + .../DeletePolicySunBirdR.hbs | 3 + .../DeletePolicySunBirdR.yml | 15 ++ .../DeletePolicySunBirdRResult.hbs | 5 + .../GetPolicySunBirdR/GetPolicySunBirdR.hbs | 3 + .../GetPolicySunBirdR/GetPolicySunBirdR.yml | 15 ++ .../GetPolicySunBirdRResult.hbs | 3 + .../SearchPolicySunBirdR.hbs | 21 +++ .../SearchPolicySunBirdR.yml | 18 ++ .../SearchPolicySunBirdRResult.hbs | 1 + apitest/testNgXmlFiles/mimotoApi.xml | 61 ++++++- 29 files changed, 573 insertions(+), 10 deletions(-) create mode 100644 apitest/src/main/java/io/mosip/testrig/apirig/testscripts/DeleteWithParam.java create mode 100644 apitest/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.hbs create mode 100644 apitest/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml create mode 100644 apitest/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdCResult.hbs create mode 100644 apitest/src/main/resources/mimoto/SunBirdC/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.hbs create mode 100644 apitest/src/main/resources/mimoto/SunBirdC/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.yml create mode 100644 apitest/src/main/resources/mimoto/SunBirdC/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdCResult.hbs create mode 100644 apitest/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.hbs create mode 100644 apitest/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml create mode 100644 apitest/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdCResult.hbs create mode 100644 apitest/src/main/resources/mimoto/SunBirdR/CreatePolicySunBirdR/CreatePolicySunBirdR.hbs create mode 100644 apitest/src/main/resources/mimoto/SunBirdR/CreatePolicySunBirdR/CreatePolicySunBirdR.yml create mode 100644 apitest/src/main/resources/mimoto/SunBirdR/CreatePolicySunBirdR/CreatePolicySunBirdRResult.hbs create mode 100644 apitest/src/main/resources/mimoto/SunBirdR/DeletePolicySunBirdR/DeletePolicySunBirdR.hbs create mode 100644 apitest/src/main/resources/mimoto/SunBirdR/DeletePolicySunBirdR/DeletePolicySunBirdR.yml create mode 100644 apitest/src/main/resources/mimoto/SunBirdR/DeletePolicySunBirdR/DeletePolicySunBirdRResult.hbs create mode 100644 apitest/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.hbs create mode 100644 apitest/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.yml create mode 100644 apitest/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdRResult.hbs create mode 100644 apitest/src/main/resources/mimoto/SunBirdR/SearchPolicySunBirdR/SearchPolicySunBirdR.hbs create mode 100644 apitest/src/main/resources/mimoto/SunBirdR/SearchPolicySunBirdR/SearchPolicySunBirdR.yml create mode 100644 apitest/src/main/resources/mimoto/SunBirdR/SearchPolicySunBirdR/SearchPolicySunBirdRResult.hbs diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/DeleteWithParam.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/DeleteWithParam.java new file mode 100644 index 000000000..de59b2124 --- /dev/null +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/DeleteWithParam.java @@ -0,0 +1,165 @@ +package io.mosip.testrig.apirig.testscripts; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.json.JSONObject; +import org.testng.ITest; +import org.testng.ITestContext; +import org.testng.ITestResult; +import org.testng.Reporter; +import org.testng.SkipException; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; +import org.testng.internal.BaseTestMethod; +import org.testng.internal.TestResult; + +import io.mosip.testrig.apirig.dto.OutputValidationDto; +import io.mosip.testrig.apirig.dto.TestCaseDTO; +import io.mosip.testrig.apirig.testrunner.HealthChecker; +import io.mosip.testrig.apirig.utils.AdminTestException; +import io.mosip.testrig.apirig.utils.AdminTestUtil; +import io.mosip.testrig.apirig.utils.AuthenticationTestException; +import io.mosip.testrig.apirig.utils.ConfigManager; +import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.OutputValidationUtil; +import io.mosip.testrig.apirig.utils.ReportUtil; +import io.restassured.response.Response; + +public class DeleteWithParam extends AdminTestUtil implements ITest { + private static final Logger logger = Logger.getLogger(DeleteWithParam.class); + protected String testCaseName = ""; + public Response response = null; + + @BeforeClass + public static void setLogLevel() { + if (ConfigManager.IsDebugEnabled()) + logger.setLevel(Level.ALL); + else + logger.setLevel(Level.ERROR); + } + + /** + * get current testcaseName + */ + @Override + public String getTestName() { + return testCaseName; + } + + /** + * Data provider class provides test case list + * + * @return object of data provider + */ + @DataProvider(name = "testcaselist") + public Object[] getTestCaseList(ITestContext context) { + String ymlFile = context.getCurrentXmlTest().getLocalParameters().get("ymlFile"); + logger.info("Started executing yml: " + ymlFile); + return getYmlTestData(ymlFile); + } + + /** + * Test method for OTP Generation execution + * + * @param objTestParameters + * @param testScenario + * @param testcaseName + * @throws AuthenticationTestException + * @throws AdminTestException + */ + @Test(dataProvider = "testcaselist") + public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException { + testCaseName = testCaseDTO.getTestCaseName(); + testCaseName = isTestCaseValidForExecution(testCaseDTO); + if (HealthChecker.signalTerminateExecution) { + throw new SkipException( + GlobalConstants.TARGET_ENV_HEALTH_CHECK_FAILED + HealthChecker.healthCheckFailureMapS); + } + String[] templateFields = testCaseDTO.getTemplateFields(); + + if (testCaseDTO.getTemplateFields() != null && templateFields.length > 0) { + ArrayList inputtestCases = AdminTestUtil.getInputTestCase(testCaseDTO); + ArrayList outputtestcase = AdminTestUtil.getOutputTestCase(testCaseDTO); + + for (int i = 0; i < languageList.size(); i++) { + response = deleteWithPathParamAndCookie(ApplnURI + testCaseDTO.getEndPoint(), + getJsonFromTemplate(inputtestCases.get(i).toString(), testCaseDTO.getInputTemplate()), + COOKIENAME, testCaseDTO.getRole(), testCaseDTO.getTestCaseName()); + + Map> ouputValid = OutputValidationUtil.doJsonOutputValidation( + response.asString(), + getJsonFromTemplate(outputtestcase.get(i).toString(), testCaseDTO.getOutputTemplate()), + testCaseDTO, response.getStatusCode()); + Reporter.log(ReportUtil.getOutputValidationReport(ouputValid)); + + if (!OutputValidationUtil.publishOutputResult(ouputValid)) + throw new AdminTestException("Failed at output validation"); + } + } + + else { + + if (testCaseName.contains("ESignet_")) { + if (ConfigManager.isInServiceNotDeployedList(GlobalConstants.ESIGNET)) { + throw new SkipException("esignet is not deployed hence skipping the testcase"); + } + + String tempUrl = ApplnURI; + + if (testCaseDTO.getEndPoint().startsWith("$SUNBIRDBASEURL$") && testCaseName.contains("SunBirdR")) { + + if (ConfigManager.isInServiceNotDeployedList("sunbirdrc")) + throw new SkipException(GlobalConstants.SERVICE_NOT_DEPLOYED_MESSAGE); + + if (ConfigManager.getSunBirdBaseURL() != null && !ConfigManager.getSunBirdBaseURL().isBlank()) + tempUrl = ConfigManager.getSunBirdBaseURL(); + //Once sunbird registry is pointing to specific env, remove the above line and uncomment below line + //tempUrl = ApplnURI.replace(GlobalConstants.API_INTERNAL, ConfigManager.getSunBirdBaseURL()); + testCaseDTO.setEndPoint(testCaseDTO.getEndPoint().replace("$SUNBIRDBASEURL$", "")); + } + + response = deleteWithPathParamAndCookie(tempUrl + testCaseDTO.getEndPoint(), + getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()), COOKIENAME, + testCaseDTO.getRole(), testCaseDTO.getTestCaseName()); + + } else { + response = deleteWithPathParamAndCookie(ApplnURI + testCaseDTO.getEndPoint(), + getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()), COOKIENAME, + testCaseDTO.getRole(), testCaseDTO.getTestCaseName()); + } + Map> ouputValid = OutputValidationUtil.doJsonOutputValidation( + response.asString(), getJsonFromTemplate(testCaseDTO.getOutput(), testCaseDTO.getOutputTemplate()), + testCaseDTO, response.getStatusCode()); + Reporter.log(ReportUtil.getOutputValidationReport(ouputValid)); + if (!OutputValidationUtil.publishOutputResult(ouputValid)) + throw new AdminTestException("Failed at output validation"); + } + } + + /** + * The method ser current test name to result + * + * @param result + */ + @AfterMethod(alwaysRun = true) + public void setResultTestName(ITestResult result) { + try { + Field method = TestResult.class.getDeclaredField("m_method"); + method.setAccessible(true); + method.set(result, result.getMethod().clone()); + BaseTestMethod baseTestMethod = (BaseTestMethod) result.getMethod(); + Field f = baseTestMethod.getClass().getSuperclass().getDeclaredField("m_methodName"); + f.setAccessible(true); + f.set(baseTestMethod, testCaseName); + } catch (Exception e) { + Reporter.log("Exception : " + e.getMessage()); + } + } +} \ No newline at end of file diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java index e450cf8ba..308c71395 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java @@ -130,9 +130,36 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad } else { + + if (testCaseName.contains("ESignet_")) { + if (ConfigManager.isInServiceNotDeployedList(GlobalConstants.ESIGNET)) { + throw new SkipException("esignet is not deployed hence skipping the testcase"); + } + + String tempUrl = ApplnURI; + + if (testCaseDTO.getEndPoint().startsWith("$SUNBIRDBASEURL$") && testCaseName.contains("SunBirdR")) { + + if (ConfigManager.isInServiceNotDeployedList("sunbirdrc")) + throw new SkipException(GlobalConstants.SERVICE_NOT_DEPLOYED_MESSAGE); + + if (ConfigManager.getSunBirdBaseURL() != null && !ConfigManager.getSunBirdBaseURL().isBlank()) + tempUrl = ConfigManager.getSunBirdBaseURL(); + //Once sunbird registry is pointing to specific env, remove the above line and uncomment below line + //tempUrl = ApplnURI.replace(GlobalConstants.API_INTERNAL, ConfigManager.getSunBirdBaseURL()); + testCaseDTO.setEndPoint(testCaseDTO.getEndPoint().replace("$SUNBIRDBASEURL$", "")); + } + + response = getWithPathParamAndCookie(tempUrl + testCaseDTO.getEndPoint(), + getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()), auditLogCheck, + COOKIENAME, testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), sendEsignetToken); + + } else { response = getWithPathParamAndCookie(ApplnURI + testCaseDTO.getEndPoint(), getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()), auditLogCheck, COOKIENAME, testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), sendEsignetToken); + } + Map> ouputValid = null; if (testCaseName.contains("_StatusCode")) { diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java index 927e8d0fe..fd8b3c358 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java @@ -156,8 +156,44 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad } else { - response = postWithBodyAndCookie(ApplnURI + testCaseDTO.getEndPoint(), inputJson, auditLogCheck, COOKIENAME, - testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), sendEsignetToken); + if (testCaseName.contains("ESignet_")) { + if (ConfigManager.isInServiceNotDeployedList(GlobalConstants.ESIGNET)) { + throw new SkipException("esignet is not deployed hence skipping the testcase"); + } + + String tempUrl = ApplnURI; + + if (testCaseDTO.getEndPoint().startsWith("$SUNBIRDBASEURL$") && testCaseName.contains("SunBirdR")) { + + if (ConfigManager.isInServiceNotDeployedList("sunbirdrc")) + throw new SkipException(GlobalConstants.SERVICE_NOT_DEPLOYED_MESSAGE); + + if (ConfigManager.getSunBirdBaseURL() != null && !ConfigManager.getSunBirdBaseURL().isBlank()) + tempUrl = ConfigManager.getSunBirdBaseURL(); + //Once sunbird registry is pointing to specific env, remove the above line and uncomment below line + //tempUrl = ApplnURI.replace(GlobalConstants.API_INTERNAL, ConfigManager.getSunBirdBaseURL()); + testCaseDTO.setEndPoint(testCaseDTO.getEndPoint().replace("$SUNBIRDBASEURL$", "")); + + response = postWithBodyAndCookie(tempUrl + testCaseDTO.getEndPoint(), inputJson, auditLogCheck, + COOKIENAME, testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), sendEsignetToken); + + } else if (testCaseDTO.getEndPoint().startsWith("$ESIGNETMOCKBASEURL$") + && testCaseName.contains("SunBirdC")) { + if (ConfigManager.isInServiceNotDeployedList("sunbirdrc")) + throw new SkipException(GlobalConstants.SERVICE_NOT_DEPLOYED_MESSAGE); + + if (ConfigManager.getEsignetMockBaseURL() != null + && !ConfigManager.getEsignetMockBaseURL().isBlank()) + tempUrl = ApplnURI.replace("api-internal.", ConfigManager.getEsignetMockBaseURL()); + testCaseDTO.setEndPoint(testCaseDTO.getEndPoint().replace("$ESIGNETMOCKBASEURL$", "")); + + response = postRequestWithCookieAuthHeaderAndXsrfToken(tempUrl + testCaseDTO.getEndPoint(), + inputJson, COOKIENAME, testCaseDTO.getTestCaseName()); + } + } else { + response = postWithBodyAndCookie(ApplnURI + testCaseDTO.getEndPoint(), inputJson, auditLogCheck, + COOKIENAME, testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), sendEsignetToken); + } Map> ouputValid = null; if (testCaseName.contains("_StatusCode")) { diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java index 0a9fe539f..3519ecfbd 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java @@ -146,7 +146,7 @@ public void test(TestCaseDTO testCaseDTO) } String tempUrl = ConfigManager.getEsignetBaseUrl(); if (testCaseDTO.getEndPoint().startsWith("$ESIGNETMOCKBASEURL$") - && testCaseName.contains("SunBirdRC")) { + && testCaseName.contains("SunBirdC")) { if (ConfigManager.isInServiceNotDeployedList("sunbirdrc")) throw new SkipException(GlobalConstants.SERVICE_NOT_DEPLOYED_MESSAGE); @@ -154,6 +154,16 @@ public void test(TestCaseDTO testCaseDTO) && !ConfigManager.getEsignetMockBaseURL().isBlank()) tempUrl = ApplnURI.replace("api-internal.", ConfigManager.getEsignetMockBaseURL()); testCaseDTO.setEndPoint(testCaseDTO.getEndPoint().replace("$ESIGNETMOCKBASEURL$", "")); + } else if (testCaseDTO.getEndPoint().startsWith("$SUNBIRDBASEURL$") && testCaseName.contains("SunBirdR")) { + + if (ConfigManager.isInServiceNotDeployedList("sunbirdrc")) + throw new SkipException(GlobalConstants.SERVICE_NOT_DEPLOYED_MESSAGE); + + if (ConfigManager.getSunBirdBaseURL() != null && !ConfigManager.getSunBirdBaseURL().isBlank()) + tempUrl = ConfigManager.getSunBirdBaseURL(); + //Once sunbird registry is pointing to specific env, remove the above line and uncomment below line + //tempUrl = ApplnURI.replace(GlobalConstants.API_INTERNAL, ConfigManager.getSunBirdBaseURL()); + testCaseDTO.setEndPoint(testCaseDTO.getEndPoint().replace("$SUNBIRDBASEURL$", "")); } if (testCaseName.contains("_AuthorizationCode_")) { response = postRequestWithCookieAuthHeaderAndXsrfTokenForAutoGenId( diff --git a/apitest/src/main/resources/config/Kernel.properties b/apitest/src/main/resources/config/Kernel.properties index 2e3ad297a..3649f20fc 100644 --- a/apitest/src/main/resources/config/Kernel.properties +++ b/apitest/src/main/resources/config/Kernel.properties @@ -243,6 +243,9 @@ partnerUrlSuffix=oYf63Lax0DY2QkYMRHnrmDqhmO3RMWQagwm0ftgLlkuin1KOND/666/576732 reportIgnoredTestCases=no servicesNotDeployed= esignetMockBaseURL=esignet-insurance. +sunBirdBaseURL=https://registry.dev1.mosip.net +#Once sunbird registry is pointing to specific env, remove the above line and uncomment below line +#sunBirdBaseURL=registry slack-webhook-url= serverErrorsToMonitor=IDA-MLC-018 pmsAuthInternal=true diff --git a/apitest/src/main/resources/config/application.properties b/apitest/src/main/resources/config/application.properties index c0e9841a7..2da96db1c 100644 --- a/apitest/src/main/resources/config/application.properties +++ b/apitest/src/main/resources/config/application.properties @@ -99,5 +99,7 @@ passwordToReset=12341234_AaB XSRFTOKEN=7d01b2a8-b89d-41ad-9361-d7f6294021d1 codeChallenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM codeVerifier=dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk -policyNumberForSunBirdRC=654321 -challengeValueForSunBirdRC=eyJmdWxsTmFtZSI6IkthaWYgU2lkZGlxdWUiLCJkb2IiOiIyMDAwLTA3LTI2In0= \ No newline at end of file +policyNumberForSunBirdRC=326253801 +challengeValueForSunBirdRC=eyJmdWxsTmFtZSI6IlJvaGFuIEt1bWFyIiwiZG9iIjoiMTk5OS0xMC0xMiJ9 +fullNameForSunBirdRC=Rohan Kumar +dobForSunBirdRC=1999-10-12 \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml b/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml index a86d6c710..f23212b5f 100644 --- a/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml +++ b/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml @@ -1,5 +1,5 @@ DownloadIssuerCredential: - Mimoto_DownloadIssuerCredential_All_Valid_Smoke: + Mimoto_DownloadIssuerCredential_IssuerMosip_All_Valid_Smoke: endPoint: /residentmobileapp/credentials/download role: resident restMethod: get @@ -86,7 +86,7 @@ DownloadIssuerCredential: ] }' - Mimoto_DownloadIssuerCredential_Expired_AuthorizationCode_Neg: + Mimoto_DownloadIssuerCredential_Reused_AuthorizationCode_Neg: endPoint: /residentmobileapp/credentials/download role: resident restMethod: get @@ -95,7 +95,7 @@ DownloadIssuerCredential: outputTemplate: mimoto/DownloadIssuerCredential/DownloadIssuerCredentialResult input: '{ "grant_type": "authorization_code", - "code": "XjIsJgQAX3lrhMmXgRn-jerNMCqf0GdiBLx5MbMigNY", + "code": "$ID:ESignet_AuthorizationCode_uin_All_Valid_Smoke_sid_code$", "redirect_uri": "$INJIREDIRECTURI$", "code_verifier": "$CODEVERIFIER$", "issuer": "Mosip", @@ -107,4 +107,21 @@ DownloadIssuerCredential: "errorCode":"RESIDENT-APP-035" } ] +}' + Mimoto_DownloadIssuerCredential_IssuerSunBird_All_Valid_Smoke: + endPoint: /residentmobileapp/credentials/download + role: resident + restMethod: get + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/DownloadIssuerCredential/DownloadIssuerCredentialResult + input: '{ + "grant_type": "authorization_code", + "code": "$ID:ESignet_AuthorizationCode_SunBirdC_All_Valid_Smoke_sid_code$", + "redirect_uri": "$INJIREDIRECTURI$", + "code_verifier": "$CODEVERIFIER$", + "issuer": "Sunbird", + "credential": "InsuranceCredential" +}' + output: '{ }' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.hbs b/apitest/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.hbs new file mode 100644 index 000000000..0e92bbf36 --- /dev/null +++ b/apitest/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.hbs @@ -0,0 +1,15 @@ +{ + "encodedHash": "{{encodedHash}}", + "requestTime": "{{requestTime}}", + "request": { + "transactionId": "{{transactionId}}", + "individualId": "{{individualId}}", + "challengeList" : [ + { + "authFactorType" : "{{authFactorType}}", + "challenge" : "{{challenge}}", + "format": "{{format}}" + } + ] + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml b/apitest/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml new file mode 100644 index 000000000..9dbf3d6d6 --- /dev/null +++ b/apitest/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml @@ -0,0 +1,20 @@ +AuthenticateUserSunBirdC: + Mimoto_ESignet_AuthenticateUser_SunBirdC_Valid_Smoke: + endPoint: $ESIGNETMOCKBASEURL$/v1/esignet/authorization/authenticate + role: resident + restMethod: post + checkErrorsOnlyInResponse: true + validityCheckRequired: true + inputTemplate: mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC + outputTemplate: mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdCResult + input: '{ + "encodedHash": "$ID:ESignet_OAuthDetailsRequest_SunBirdC_all_Valid_Smoke_sid_encodedResp$", + "requestTime": "$TIMESTAMP$", + "transactionId": "$ID:ESignet_OAuthDetailsRequest_SunBirdC_all_Valid_Smoke_sid_transactionId$", + "individualId": "$POLICYNUMBERFORSUNBIRDRC$", + "authFactorType" : "KBA", + "challenge" : "$CHALLENGEVALUEFORSUNBIRDC$", + "format": "base64url-encoded-json" + }' + output: '{ +}' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdCResult.hbs b/apitest/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdCResult.hbs new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/apitest/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdCResult.hbs @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SunBirdC/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.hbs b/apitest/src/main/resources/mimoto/SunBirdC/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.hbs new file mode 100644 index 000000000..491dca1ba --- /dev/null +++ b/apitest/src/main/resources/mimoto/SunBirdC/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.hbs @@ -0,0 +1,19 @@ +{ + "encodedHash": "{{encodedHash}}", + "requestTime": "{{requestTime}}", + "request": { + "transactionId": "{{transactionId}}", + "acceptedClaims": [ + {{#each acceptedClaims}} + "{{claim}}" + {{#unless @last}},{{/unless}} + {{/each}} + ], + "permittedAuthorizeScopes": [ + {{#each permittedAuthorizeScopes}} + "{{scope}}" + {{#unless @last}},{{/unless}} + {{/each}} + ] + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SunBirdC/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.yml b/apitest/src/main/resources/mimoto/SunBirdC/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.yml new file mode 100644 index 000000000..eba675ef3 --- /dev/null +++ b/apitest/src/main/resources/mimoto/SunBirdC/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.yml @@ -0,0 +1,17 @@ +AuthorizationCodeSunBirdC: + Mimoto_ESignet_AuthorizationCode_SunBirdC_All_Valid_Smoke_sid: + endPoint: $ESIGNETMOCKBASEURL$/v1/esignet/authorization/auth-code + role: resident + restMethod: post + checkErrorsOnlyInResponse: true + validityCheckRequired: true + inputTemplate: mimoto/SunBirdC/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC + outputTemplate: mimoto/SunBirdC/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdCResult + input: '{ + "encodedHash": "$ID:ESignet_OAuthDetailsRequest_SunBirdC_all_Valid_Smoke_sid_encodedResp$", + "requestTime": "$TIMESTAMP$", + "transactionId": "$ID:ESignet_OAuthDetailsRequest_SunBirdC_all_Valid_Smoke_sid_transactionId$", + "permittedAuthorizeScopes": [{scope: "sunbird_rc_insurance_vc_ldp"}] +}' + output: '{ +}' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SunBirdC/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdCResult.hbs b/apitest/src/main/resources/mimoto/SunBirdC/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdCResult.hbs new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/apitest/src/main/resources/mimoto/SunBirdC/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdCResult.hbs @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.hbs b/apitest/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.hbs new file mode 100644 index 000000000..6dec068b5 --- /dev/null +++ b/apitest/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.hbs @@ -0,0 +1,17 @@ +{ + "requestTime": "{{requestTime}}", + "request": { + "clientId": "{{clientId}}", + "scope": "{{scope}}", + "responseType": "{{responseType}}", + "redirectUri": "{{redirectUri}}", + "display": "{{display}}", + "prompt": "{{prompt}}", + "acrValues": "{{acrValues}}", + "nonce" : "{{nonce}}", + "state" : "{{state}}", + "claimsLocales" : "{{claimsLocales}}", + "codeChallenge" : "{{codeChallenge}}", + "codeChallengeMethod" : "{{codeChallengeMethod}}" + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml b/apitest/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml new file mode 100644 index 000000000..0379b789f --- /dev/null +++ b/apitest/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml @@ -0,0 +1,26 @@ +OAuthDetailsRequestSunBirdC: + Mimoto_ESignet_OAuthDetailsRequest_SunBirdC_all_Valid_Smoke_sid: + endPoint: $ESIGNETMOCKBASEURL$/v1/esignet/authorization/v2/oauth-details + role: resident + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC + outputTemplate: mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdCResult + input: '{ + "requestTime": "$TIMESTAMP$", + "clientId": "esignet-sunbird-partner", + "scope": "sunbird_rc_insurance_vc_ldp", + "responseType": "code", + "redirectUri": "$INJIREDIRECTURI$", + "display": "popup", + "prompt": "login", + "acrValues": "mosip:idp:acr:knowledge", + "nonce": "973eieljzng", + "state": "eree2311", + "claimsLocales": "en", + "codeChallenge": "$CODECHALLENGE$", + "codeChallengeMethod": "S256" +}' + output: '{ + +}' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdCResult.hbs b/apitest/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdCResult.hbs new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/apitest/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdCResult.hbs @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SunBirdR/CreatePolicySunBirdR/CreatePolicySunBirdR.hbs b/apitest/src/main/resources/mimoto/SunBirdR/CreatePolicySunBirdR/CreatePolicySunBirdR.hbs new file mode 100644 index 000000000..fedc127da --- /dev/null +++ b/apitest/src/main/resources/mimoto/SunBirdR/CreatePolicySunBirdR/CreatePolicySunBirdR.hbs @@ -0,0 +1,16 @@ +{ + "policyNumber": "{{policyNumber}}", + "policyName": "{{policyName}}", + "policyExpiresOn": "{{policyExpiresOn}}", + "policyIssuedOn": "{{policyIssuedOn}}", + "fullName": "{{fullName}}", + "dob": "{{dob}}", + "benefits": [ + {{#each benefits}} + "{{benefits}}"{{#unless @last}},{{/unless}} + {{/each}} + ], + "gender": "{{gender}}", + "mobile": "{{mobile}}", + "email": "{{email}}" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SunBirdR/CreatePolicySunBirdR/CreatePolicySunBirdR.yml b/apitest/src/main/resources/mimoto/SunBirdR/CreatePolicySunBirdR/CreatePolicySunBirdR.yml new file mode 100644 index 000000000..b1a01b1d7 --- /dev/null +++ b/apitest/src/main/resources/mimoto/SunBirdR/CreatePolicySunBirdR/CreatePolicySunBirdR.yml @@ -0,0 +1,24 @@ +CreatePolicySunBirdR: + Mimoto_ESignet_SunBirdR_CreatePolicy_NOAUTH_Valid_Smoke_Sid: + endPoint: $SUNBIRDBASEURL$/api/v1/Insurance + role: resident + restMethod: post + checkErrorsOnlyInResponse: true + validityCheckRequired: true + inputTemplate: mimoto/SunBirdR/CreatePolicySunBirdR/CreatePolicySunBirdR + outputTemplate: mimoto/SunBirdR/CreatePolicySunBirdR/CreatePolicySunBirdRResult + input: '{ + "policyNumber": "$POLICYNUMBERFORSUNBIRDRC$", + "policyName": "Start Insurance Gold Premium", + "policyExpiresOn": "2033-04-20T20:48:17.684Z", + "policyIssuedOn": "$TIMESTAMP$", + "fullName" : "$FULLNAMEFORSUNBIRDRC$", + "dob" : "$DOBFORSUNBIRDRC$", + "benefits": [{"benefits": "Critical Surgery"}, {"benefits": "Full body checkup"}], + "gender": "Male", + "mobile": "0123456789", + "email": "abhishek@gmail.com" + }' + output: '{ + "status": "SUCCESSFUL" +}' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SunBirdR/CreatePolicySunBirdR/CreatePolicySunBirdRResult.hbs b/apitest/src/main/resources/mimoto/SunBirdR/CreatePolicySunBirdR/CreatePolicySunBirdRResult.hbs new file mode 100644 index 000000000..8efaf79fa --- /dev/null +++ b/apitest/src/main/resources/mimoto/SunBirdR/CreatePolicySunBirdR/CreatePolicySunBirdRResult.hbs @@ -0,0 +1,5 @@ +{ + "params": { + "status": "{{status}}" + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SunBirdR/DeletePolicySunBirdR/DeletePolicySunBirdR.hbs b/apitest/src/main/resources/mimoto/SunBirdR/DeletePolicySunBirdR/DeletePolicySunBirdR.hbs new file mode 100644 index 000000000..4f7673ad4 --- /dev/null +++ b/apitest/src/main/resources/mimoto/SunBirdR/DeletePolicySunBirdR/DeletePolicySunBirdR.hbs @@ -0,0 +1,3 @@ +{ + "insuranceid": "{{insuranceid}}" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SunBirdR/DeletePolicySunBirdR/DeletePolicySunBirdR.yml b/apitest/src/main/resources/mimoto/SunBirdR/DeletePolicySunBirdR/DeletePolicySunBirdR.yml new file mode 100644 index 000000000..a4d2a2c5a --- /dev/null +++ b/apitest/src/main/resources/mimoto/SunBirdR/DeletePolicySunBirdR/DeletePolicySunBirdR.yml @@ -0,0 +1,15 @@ +DeletePolicySunBirdR: + Mimoto_ESignet_SunBirdR_DeletePolicy_NOAUTH_Valid_Smoke: + endPoint: $SUNBIRDBASEURL$/api/v1/Insurance/{insuranceid} + role: resident + restMethod: delete + checkErrorsOnlyInResponse: true + validityCheckRequired: true + inputTemplate: mimoto/SunBirdR/DeletePolicySunBirdR/DeletePolicySunBirdR + outputTemplate: mimoto/SunBirdR/DeletePolicySunBirdR/DeletePolicySunBirdRResult + input: '{ + "insuranceid": "$ID:ESignet_SunBirdR_CreatePolicy_NOAUTH_Valid_Smoke_Sid_osid$" + }' + output: '{ + "status": "SUCCESSFUL" +}' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SunBirdR/DeletePolicySunBirdR/DeletePolicySunBirdRResult.hbs b/apitest/src/main/resources/mimoto/SunBirdR/DeletePolicySunBirdR/DeletePolicySunBirdRResult.hbs new file mode 100644 index 000000000..8efaf79fa --- /dev/null +++ b/apitest/src/main/resources/mimoto/SunBirdR/DeletePolicySunBirdR/DeletePolicySunBirdRResult.hbs @@ -0,0 +1,5 @@ +{ + "params": { + "status": "{{status}}" + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.hbs b/apitest/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.hbs new file mode 100644 index 000000000..4f7673ad4 --- /dev/null +++ b/apitest/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.hbs @@ -0,0 +1,3 @@ +{ + "insuranceid": "{{insuranceid}}" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.yml b/apitest/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.yml new file mode 100644 index 000000000..d8eef6691 --- /dev/null +++ b/apitest/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.yml @@ -0,0 +1,15 @@ +GetPolicySunBirdR: + Mimoto_ESignet_SunBirdR_DeletePolicy_NOAUTH_Valid_Smoke: + endPoint: $SUNBIRDBASEURL$/api/v1/Insurance/{insuranceid} + role: resident + restMethod: get + checkErrorsOnlyInResponse: true + validityCheckRequired: true + inputTemplate: mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR + outputTemplate: mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdRResult + input: '{ + "insuranceid": "$ID:ESignet_SunBirdR_CreatePolicy_NOAUTH_Valid_Smoke_Sid_osid$" + }' + output: '{ + "policyNumber": "326253801" +}' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdRResult.hbs b/apitest/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdRResult.hbs new file mode 100644 index 000000000..d1a64cf38 --- /dev/null +++ b/apitest/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdRResult.hbs @@ -0,0 +1,3 @@ +{ + "policyNumber": {{policyNumber}} +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SunBirdR/SearchPolicySunBirdR/SearchPolicySunBirdR.hbs b/apitest/src/main/resources/mimoto/SunBirdR/SearchPolicySunBirdR/SearchPolicySunBirdR.hbs new file mode 100644 index 000000000..38866c7ac --- /dev/null +++ b/apitest/src/main/resources/mimoto/SunBirdR/SearchPolicySunBirdR/SearchPolicySunBirdR.hbs @@ -0,0 +1,21 @@ +{ + "offset": {{offset}}, + "limit": {{limit}}, + "filters": { + {{#if fullName}} + "fullName": { + "eq": "{{fullName}}" + }, + {{/if}} + {{#if dob}} + "dob": { + "eq": "{{dob}}" + }, + {{/if}} + {{#if policyNumber}} + "policyNumber": { + "eq": "{{policyNumber}}" + } + {{/if}} + } +} diff --git a/apitest/src/main/resources/mimoto/SunBirdR/SearchPolicySunBirdR/SearchPolicySunBirdR.yml b/apitest/src/main/resources/mimoto/SunBirdR/SearchPolicySunBirdR/SearchPolicySunBirdR.yml new file mode 100644 index 000000000..311703645 --- /dev/null +++ b/apitest/src/main/resources/mimoto/SunBirdR/SearchPolicySunBirdR/SearchPolicySunBirdR.yml @@ -0,0 +1,18 @@ +SearchPolicySunBirdR: + Mimoto_ESignet_SunBirdR_SearchPolicy_NOAUTH_Valid_Smoke: + endPoint: $SUNBIRDBASEURL$/api/v1/Insurance/search + role: resident + restMethod: post + checkErrorsOnlyInResponse: true + validityCheckRequired: true + inputTemplate: mimoto/SunBirdR/SearchPolicySunBirdR/SearchPolicySunBirdR + outputTemplate: mimoto/SunBirdR/SearchPolicySunBirdR/SearchPolicySunBirdRResult + input: '{ + "offset": "0", + "limit": "5", + "fullName": "$FULLNAMEFORSUNBIRDRC$", + "dob": "$DOBFORSUNBIRDRC$", + "policyNumber": "$POLICYNUMBERFORSUNBIRDRC$" + }' + output: '{ +}' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SunBirdR/SearchPolicySunBirdR/SearchPolicySunBirdRResult.hbs b/apitest/src/main/resources/mimoto/SunBirdR/SearchPolicySunBirdR/SearchPolicySunBirdRResult.hbs new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/apitest/src/main/resources/mimoto/SunBirdR/SearchPolicySunBirdR/SearchPolicySunBirdRResult.hbs @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/apitest/testNgXmlFiles/mimotoApi.xml b/apitest/testNgXmlFiles/mimotoApi.xml index 29812fb04..434f4c82a 100644 --- a/apitest/testNgXmlFiles/mimotoApi.xml +++ b/apitest/testNgXmlFiles/mimotoApi.xml @@ -23,7 +23,31 @@ - + + + + + + + + + + + + + + + + + + + + + + @@ -48,7 +72,31 @@ - + + + + + + + + + + + + + + + + + + + + + + @@ -141,5 +189,14 @@ + + + + + + + + \ No newline at end of file From e7089d5bed2308a72180958fd7aef278a2d45874 Mon Sep 17 00:00:00 2001 From: Chandra Keshav Mishra Date: Wed, 24 Jul 2024 13:32:53 +0530 Subject: [PATCH 186/860] updated virtualservice to add two match uri's (#335) Signed-off-by: ckm007 --- helm/mimoto/templates/virtualservice.yaml | 4 +++- helm/mimoto/values.yaml | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/helm/mimoto/templates/virtualservice.yaml b/helm/mimoto/templates/virtualservice.yaml index 7b5948fac..cdeb45831 100644 --- a/helm/mimoto/templates/virtualservice.yaml +++ b/helm/mimoto/templates/virtualservice.yaml @@ -19,7 +19,9 @@ spec: http: - match: - uri: - prefix: {{ .Values.istio.prefix }} + prefix: {{ .Values.istio.prefix1 }} + - uri: + prefix: {{ .Values.istio.prefix2 }} rewrite: uri: {{ .Values.istio.rewrite }} route: diff --git a/helm/mimoto/values.yaml b/helm/mimoto/values.yaml index f6814220c..f110e5158 100644 --- a/helm/mimoto/values.yaml +++ b/helm/mimoto/values.yaml @@ -457,7 +457,8 @@ istio: gateways: - istio-system/internal - istio-system/public - prefix: /residentmobileapp + prefix1: /residentmobileapp + prefix2: /v1/mimoto rewrite: /v1/mimoto enable_insecure: false From b8129fa83959d5474d0da4b9e536e803f46586c0 Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Thu, 25 Jul 2024 13:20:38 +0530 Subject: [PATCH 187/860] INJIMOB-1425 Signed-off-by: Nandhukumar --- .../src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml b/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml index bcc709f1e..c9afa105d 100644 --- a/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml +++ b/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml @@ -12,7 +12,7 @@ GetAllIssuers: }' Mimoto_GetAllIssuers_Specific_Issuer_All_Valid_Smoke: - endPoint: /residentmobileapp/issuers/ESignet + endPoint: /residentmobileapp/issuers/Mosip role: resident restMethod: get checkErrorsOnlyInResponse: true From 7cb6d31ebe433e3890937cc1bd753822d1d01613 Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Thu, 25 Jul 2024 13:43:46 +0530 Subject: [PATCH 188/860] INJIMOB-1425 Signed-off-by: Nandhukumar --- apitest/src/main/resources/config/Kernel.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apitest/src/main/resources/config/Kernel.properties b/apitest/src/main/resources/config/Kernel.properties index 3649f20fc..eb800a2e0 100644 --- a/apitest/src/main/resources/config/Kernel.properties +++ b/apitest/src/main/resources/config/Kernel.properties @@ -158,7 +158,7 @@ s3-account = automation s3-region = null reportExpirationInDays = 3 s3-account-for-persona-data = personaData -push-reports-to-s3 = no +push-reports-to-s3 = yes #-------------------- Keycloak User Creation proprties ----------------------# From 7f816c6c4171dfe914f318e428ab0f73e0be286b Mon Sep 17 00:00:00 2001 From: abhip2565 <74866247+abhip2565@users.noreply.github.com> Date: Thu, 25 Jul 2024 16:05:44 +0530 Subject: [PATCH 189/860] [INJIMOB-1093] modify issuer api and refactoring (#333) Signed-off-by: Abhishek Paul --- .../mimoto/controller/IssuersController.java | 12 +-- .../java/io/mosip/mimoto/dto/IssuerDTO.java | 4 + .../ProofSigningAlgValuesSupported.java | 7 -- .../dto/mimoto/ProofTypesSupported.java | 6 +- .../mimoto/controller/InjiControllerTest.java | 2 +- .../mimoto/service/IssuersServiceTest.java | 4 +- .../responses/expectedWellknown.json | 91 ++++++++----------- 7 files changed, 50 insertions(+), 76 deletions(-) delete mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/ProofSigningAlgValuesSupported.java diff --git a/src/main/java/io/mosip/mimoto/controller/IssuersController.java b/src/main/java/io/mosip/mimoto/controller/IssuersController.java index 0c08f3441..9c76090e1 100644 --- a/src/main/java/io/mosip/mimoto/controller/IssuersController.java +++ b/src/main/java/io/mosip/mimoto/controller/IssuersController.java @@ -57,20 +57,14 @@ public ResponseEntity getAllIssuers(@RequestParam(required = false) Stri return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); } - @GetMapping("/{issuer-id}/wellknown") + @GetMapping("/{issuer-id}/.well-known") public ResponseEntity getIssuerWellknown(@PathVariable("issuer-id") String issuerId) { - ResponseWrapper responseWrapper = new ResponseWrapper<>(); - responseWrapper.setId(ID); - responseWrapper.setVersion("v1"); - responseWrapper.setResponsetime(DateUtils.getRequestTimeString()); try { CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = issuersService.getIssuerWellknown(issuerId); - responseWrapper.setResponse(credentialIssuerWellKnownResponse); - return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); + return ResponseEntity.status(HttpStatus.OK).body(credentialIssuerWellKnownResponse); } catch (Exception exception) { logger.error("Exception occurred while fetching issuers wellknown ", exception); - responseWrapper = handleExceptionWithErrorCode(exception); - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null); } } diff --git a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java index 436a5f871..0648ca07f 100644 --- a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java @@ -34,6 +34,7 @@ public class IssuerDTO { @JsonProperty(".well-known") @Expose String wellKnownEndpoint; + @Expose @JsonInclude(NON_NULL) @NotBlank String redirect_uri; @@ -46,8 +47,10 @@ public class IssuerDTO { @JsonInclude(NON_NULL) @NotBlank String authorization_audience; + @Expose @JsonInclude(NON_NULL) String token_endpoint; + @Expose @JsonInclude(NON_NULL) @NotBlank String proxy_token_endpoint; @@ -58,6 +61,7 @@ public class IssuerDTO { List credential_type; @JsonInclude(NON_NULL) String credential_audience; + @Expose @JsonInclude(NON_NULL) @NotBlank String client_alias; diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/ProofSigningAlgValuesSupported.java b/src/main/java/io/mosip/mimoto/dto/mimoto/ProofSigningAlgValuesSupported.java deleted file mode 100644 index 679205b84..000000000 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/ProofSigningAlgValuesSupported.java +++ /dev/null @@ -1,7 +0,0 @@ -package io.mosip.mimoto.dto.mimoto; - -import java.util.List; - -public class ProofSigningAlgValuesSupported { - List algValues; -} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/ProofTypesSupported.java b/src/main/java/io/mosip/mimoto/dto/mimoto/ProofTypesSupported.java index fa72a24ca..303b74973 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/ProofTypesSupported.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/ProofTypesSupported.java @@ -3,10 +3,10 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.google.gson.annotations.SerializedName; -import java.util.Map; +import java.util.List; public class ProofTypesSupported { - @SerializedName("proof_signing_alg_values_supported") @JsonProperty("proof_signing_alg_values_supported") - private Map proofSigningAlgValuesSupported; + @SerializedName("proof_signing_alg_values_supported") + private List proofSigningAlgValuesSupported; } diff --git a/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java b/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java index 105ac6b3e..d23a45ad5 100644 --- a/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java @@ -308,7 +308,7 @@ public void getIssuerWellknownTest() throws Exception { Mockito.when(issuersService.getIssuerWellknown(issuerId)).thenReturn(credentialIssuerWellKnownResponse); - String actualResponse=mockMvc.perform(get("/issuers/" + issuerId + "/wellknown").accept(MediaType.APPLICATION_JSON_VALUE)) + String actualResponse=mockMvc.perform(get("/issuers/" + issuerId + "/.well-known").accept(MediaType.APPLICATION_JSON_VALUE)) .andExpect(status().isOk()) .andReturn() .getResponse() diff --git a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java index 58006d801..baef1778b 100644 --- a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java @@ -44,8 +44,8 @@ public class IssuersServiceTest { @Mock Utilities utilities; - List issuerConfigRelatedFields = List.of("additional_headers", "authorization_endpoint","authorization_audience", "token_endpoint", "proxy_token_endpoint", "credential_endpoint", "credential_audience", "redirect_uri"); - + List issuerConfigRelatedFields11 = List.of("additional_headers", "authorization_endpoint","authorization_audience", "token_endpoint", "proxy_token_endpoint", "credential_endpoint", "credential_audience", "redirect_uri"); + List issuerConfigRelatedFields=List.of("additional_headers", "authorization_endpoint","authorization_audience","credential_endpoint", "credential_audience"); @Before public void setUp() throws Exception { diff --git a/src/test/resources/responses/expectedWellknown.json b/src/test/resources/responses/expectedWellknown.json index e61f1e176..db3290afb 100644 --- a/src/test/resources/responses/expectedWellknown.json +++ b/src/test/resources/responses/expectedWellknown.json @@ -1,58 +1,41 @@ { - "id": "mosip.mimoto.issuers", - "version": "v1", - "str": null, - "metadata": null, - "response": - { - "credential_issuer": "id1", - "authorization_servers": null, - "credential_endpoint": "/credential_endpoint", - "credential_configurations_supported": + "credential_issuer": "id1", + "authorization_servers": null, + "credential_endpoint": "/credential_endpoint", + "credential_configurations_supported": { + "CredentialType1": { + "format": "ldp_vc", + "scope": "Credential1_vc_ldp", + "proof_types_supported": {}, + "credential_definition": { + "type": [ + "VerifiableCredential", + "Credential1" + ], + "credentialSubject": { + "name": { + "display": [ + { + "name": "Given Name", + "locale": "en" + } + ] + } + } + }, + "display": [ { - "CredentialType1": - { - "format": "ldp_vc", - "scope": "Credential1_vc_ldp", - "proof_types_supported": {}, - "credential_definition": - { - "type": - [ - "VerifiableCredential", - "Credential1" - ], - "credentialSubject": - { - "name": - { - "display": - [ - { - "name": "Given Name", - "locale": "en" - } - ] - } - } - }, - "display": - [ - { - "name": "Credential1", - "locale": "en", - "logo": - { - "url": "/logo", - "alt_text": "logo-url" - }, - "background_image": null, - "background_color": "#B34622", - "text_color": "#FFFFFF" - } - ] - } + "name": "Credential1", + "locale": "en", + "logo": { + "url": "/logo", + "alt_text": "logo-url" + }, + "background_image": null, + "background_color": "#B34622", + "text_color": "#FFFFFF" } - }, - "errors": [] + ] + } + } } \ No newline at end of file From d27a8040cd38638419fe093fba31c5e89316ef21 Mon Sep 17 00:00:00 2001 From: Nandhukumar <100744358+nandhu-kumar@users.noreply.github.com> Date: Thu, 25 Jul 2024 16:11:27 +0530 Subject: [PATCH 190/860] INJIMOB-1425 (#340) * INJIMOB-1425 Signed-off-by: Nandhukumar * INJIMOB-1425 Signed-off-by: Nandhukumar --------- Signed-off-by: Nandhukumar --- apitest/src/main/resources/config/Kernel.properties | 2 +- .../src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apitest/src/main/resources/config/Kernel.properties b/apitest/src/main/resources/config/Kernel.properties index 3649f20fc..eb800a2e0 100644 --- a/apitest/src/main/resources/config/Kernel.properties +++ b/apitest/src/main/resources/config/Kernel.properties @@ -158,7 +158,7 @@ s3-account = automation s3-region = null reportExpirationInDays = 3 s3-account-for-persona-data = personaData -push-reports-to-s3 = no +push-reports-to-s3 = yes #-------------------- Keycloak User Creation proprties ----------------------# diff --git a/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml b/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml index bcc709f1e..c9afa105d 100644 --- a/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml +++ b/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml @@ -12,7 +12,7 @@ GetAllIssuers: }' Mimoto_GetAllIssuers_Specific_Issuer_All_Valid_Smoke: - endPoint: /residentmobileapp/issuers/ESignet + endPoint: /residentmobileapp/issuers/Mosip role: resident restMethod: get checkErrorsOnlyInResponse: true From 975f32fedd90cace9cd298cd3d2ef8d1d80801fc Mon Sep 17 00:00:00 2001 From: Swati Goel Date: Thu, 25 Jul 2024 18:52:05 +0530 Subject: [PATCH 191/860] Merge Java21 changes to develop (#341) * MOSIP-32363 Signed-off-by: Mohanachandran S * Updated the API commons artifact ID Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> * Updated the API commons artifact ID (#208) * MOSIP-32363 Signed-off-by: Mohanachandran S * Updated the API commons artifact ID Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> --------- Signed-off-by: Mohanachandran S Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> * [DSD-5355] Updated push-trigger.yml Signed-off-by: VSIVAKALYAN * [DSD-5355] Updated push-trigger.yml Signed-off-by: VSIVAKALYAN <103260988+VSIVAKALYAN@users.noreply.github.com> * [DSD-5355] Update push-trigger.yml Signed-off-by: VSIVAKALYAN <103260988+VSIVAKALYAN@users.noreply.github.com> * Merged the develop branch Signed-off-by: Mohanachandran S * [DSD-5355] Updated Dockerfile with alpine img Signed-off-by: VSIVAKALYAN * [DSD-5355] Updated Dockerfile Signed-off-by: VSIVAKALYAN * [DSD-5355] Updated Dockerfile with jdk21 Signed-off-by: VSIVAKALYAN * [DSD-5355] Updated Docker_File Signed-off-by: VSIVAKALYAN * [INJIMOB-857]: update all the libraries needed for java 21 migration Signed-off-by: Alka Prasad * [INJIMOB-857]: update spring config according to the new version Signed-off-by: Alka Prasad * [INJIMOB-857]: change javax pacakge to jakarta package Signed-off-by: Alka Prasad * [INJIMOB-857]: fix all the failing tests Signed-off-by: Alka Prasad * [INJIMOB-857]: update the kattu branch to master-java21 Signed-off-by: Alka Prasad * [INJIMOB-857]: change back jakarta package to javax in api test files Signed-off-by: Alka Prasad * [INJIMOB-857] Java21 migration (#251) * [INJIMOB-857]: update all the libraries needed for java 21 migration Signed-off-by: Alka Prasad * [INJIMOB-857]: update spring config according to the new version Signed-off-by: Alka Prasad * [INJIMOB-857]: change javax pacakge to jakarta package Signed-off-by: Alka Prasad * [INJIMOB-857]: fix all the failing tests Signed-off-by: Alka Prasad * [INJIMOB-857]: update the kattu branch to master-java21 Signed-off-by: Alka Prasad * [INJIMOB-857]: change back jakarta package to javax in api test files Signed-off-by: Alka Prasad --------- Signed-off-by: Alka Prasad * [INJIMOB-857]: change jre image from 11 to 21 in dockerfile Signed-off-by: Alka Prasad * [INJIMOB-857]: change jre image from 11 to 21 in dockerfile Signed-off-by: Alka Prasad * [INJIMOB-857]: resolve 403 and 500 error and remove unwanted code (#255) Signed-off-by: Alka Prasad * [INJIMOB - 857] (#258) * MOSIP-32084 Signed-off-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> * resolved mimoto testrig build issues Signed-off-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> * Reverting the JAVA 21 upgrade (#200) Signed-off-by: Mohanachandran S * MOSIP-30868 Artifact id updated Signed-off-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> * [INJIWEB-399]: modify the credential template to mimic injimobile details view (#207) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-399]: handle array fields in credential (#209) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [DSD-5071] Setup for apitest-mimoto Signed-off-by: VSIVAKALYAN * [DSD-5071] Setup for mimoto Signed-off-by: VSIVAKALYAN * [INJIWEB-423]: include face in the credential template for MOSIP vc and preserve the order (#212) * [INJIWEB-423]: include face in the credential template for MOSIP vc Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-423]: include face in the credential template for MOSIP vc Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [DSD-5071] Setup for apitest-mimoto Signed-off-by: VSIVAKALYAN * DSD-5071 Signed-off-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> * DSD-5071 Signed-off-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> * [INJIWEB-465][INJIWEB-460]: Fixing sunbird Logo Stretching & Wrapping the claim values (#217) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-468]: Generate Multiple KeyPairs for Everyy Credential Download Request (#218) * [INJIWEB-468]: generate separate keypairs for downloading different VC's Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-468]: generate separate keypairs for downloading different VC's Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-468]: updated the keypair size to RSA 2k (#219) * [INJIWEB-468]: updated the keypair size to RSA 2k Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-468]: remove the qr code from the credential template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * MOSIP-33136 (#221) Signed-off-by: Nandhukumar Co-authored-by: Nandhukumar * [INJIWEB-570]: render only the fields that has values in the PDF template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-570]: render only the fields that has values in the PDF template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-570]: render only the fields that has values in the PDF template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * MOSIP-33173 Updated the POM version and apitest-commons version Signed-off-by: Mohanachandran S * [MOSIP-33402] Updatde chart-lint-publish.yml Signed-off-by: Praful Rakhade <99539100+Prafulrakhade@users.noreply.github.com> * [INJIMOB-1458] add supported credentials attribute in issuers config (#244) Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> * [INJIMOB-1458] add id field to credentials_supported in issuers config (#245) Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> * [INJIMOB-1469] : update error response for wallet binding apis. (#248) Signed-off-by: Swati Goel * [INJIWEB-577]: modify the credential endpoint with request construction from client side (#253) * [INJIWEB-577]: modify the credential endpoint with request construction from client side Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577]: modify the credential endpoint with request construction from client side Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577]: modify the credential endpoint with request construction from client side (#228) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577]: modify the credential endpoint with request construction from client side Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577]: modify the credential endpoint with loggers (#236) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577] : Merge Latest Develop Changes (#247) * [INJIWEB-570]: render only the fields that has values in the PDF template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-570]: render only the fields that has values in the PDF template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-570]: render only the fields that has values in the PDF template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577]: modify the credential endpoint with loggers Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * MOSIP-33173 Updated the POM version and apitest-commons version Signed-off-by: Mohanachandran S * [INJIMOB-1458] add supported credentials attribute in issuers config (#244) Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> * [INJIMOB-1458] add id field to credentials_supported in issuers config (#245) Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> Signed-off-by: Mohanachandran S Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Co-authored-by: Mohanachandran S Co-authored-by: Chandra Keshav Mishra Co-authored-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> Signed-off-by: Mohanachandran S Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Co-authored-by: Mohanachandran S Co-authored-by: Chandra Keshav Mishra Co-authored-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> --------- Signed-off-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> Signed-off-by: Mohanachandran S Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> Signed-off-by: VSIVAKALYAN Signed-off-by: Nandhukumar Signed-off-by: Praful Rakhade <99539100+Prafulrakhade@users.noreply.github.com> Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Signed-off-by: Swati Goel Signed-off-by: Alka Prasad Co-authored-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> Co-authored-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> Co-authored-by: Chandra Keshav Mishra Co-authored-by: Vijay Kumar S <94220135+vijay151096@users.noreply.github.com> Co-authored-by: VSIVAKALYAN Co-authored-by: Nandhukumar <100744358+nandhu-kumar@users.noreply.github.com> Co-authored-by: Nandhukumar Co-authored-by: Mohanachandran S Co-authored-by: Praful Rakhade <99539100+Prafulrakhade@users.noreply.github.com> Co-authored-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Co-authored-by: Swati Goel * [Injimob 857] Merge develop to develop-java21 (#260) * MOSIP-32084 Signed-off-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> * resolved mimoto testrig build issues Signed-off-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> * Reverting the JAVA 21 upgrade (#200) Signed-off-by: Mohanachandran S * MOSIP-30868 Artifact id updated Signed-off-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> * [INJIWEB-399]: modify the credential template to mimic injimobile details view (#207) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-399]: handle array fields in credential (#209) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [DSD-5071] Setup for apitest-mimoto Signed-off-by: VSIVAKALYAN * [DSD-5071] Setup for mimoto Signed-off-by: VSIVAKALYAN * [INJIWEB-423]: include face in the credential template for MOSIP vc and preserve the order (#212) * [INJIWEB-423]: include face in the credential template for MOSIP vc Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-423]: include face in the credential template for MOSIP vc Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [DSD-5071] Setup for apitest-mimoto Signed-off-by: VSIVAKALYAN * DSD-5071 Signed-off-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> * DSD-5071 Signed-off-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> * [INJIWEB-465][INJIWEB-460]: Fixing sunbird Logo Stretching & Wrapping the claim values (#217) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-468]: Generate Multiple KeyPairs for Everyy Credential Download Request (#218) * [INJIWEB-468]: generate separate keypairs for downloading different VC's Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-468]: generate separate keypairs for downloading different VC's Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-468]: updated the keypair size to RSA 2k (#219) * [INJIWEB-468]: updated the keypair size to RSA 2k Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-468]: remove the qr code from the credential template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * MOSIP-33136 (#221) Signed-off-by: Nandhukumar Co-authored-by: Nandhukumar * [INJIWEB-570]: render only the fields that has values in the PDF template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-570]: render only the fields that has values in the PDF template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-570]: render only the fields that has values in the PDF template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * MOSIP-33173 Updated the POM version and apitest-commons version Signed-off-by: Mohanachandran S * [MOSIP-33402] Updatde chart-lint-publish.yml Signed-off-by: Praful Rakhade <99539100+Prafulrakhade@users.noreply.github.com> * [INJIMOB-1458] add supported credentials attribute in issuers config (#244) Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> * [INJIMOB-1458] add id field to credentials_supported in issuers config (#245) Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> * [INJIMOB-1469] : update error response for wallet binding apis. (#248) Signed-off-by: Swati Goel * [INJIWEB-577]: modify the credential endpoint with request construction from client side (#253) * [INJIWEB-577]: modify the credential endpoint with request construction from client side Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577]: modify the credential endpoint with request construction from client side Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577]: modify the credential endpoint with request construction from client side (#228) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577]: modify the credential endpoint with request construction from client side Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577]: modify the credential endpoint with loggers (#236) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577] : Merge Latest Develop Changes (#247) * [INJIWEB-570]: render only the fields that has values in the PDF template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-570]: render only the fields that has values in the PDF template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-570]: render only the fields that has values in the PDF template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577]: modify the credential endpoint with loggers Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * MOSIP-33173 Updated the POM version and apitest-commons version Signed-off-by: Mohanachandran S * [INJIMOB-1458] add supported credentials attribute in issuers config (#244) Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> * [INJIMOB-1458] add id field to credentials_supported in issuers config (#245) Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> Signed-off-by: Mohanachandran S Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Co-authored-by: Mohanachandran S Co-authored-by: Chandra Keshav Mishra Co-authored-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> Signed-off-by: Mohanachandran S Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Co-authored-by: Mohanachandran S Co-authored-by: Chandra Keshav Mishra Co-authored-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> --------- Signed-off-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> Signed-off-by: Mohanachandran S Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> Signed-off-by: VSIVAKALYAN Signed-off-by: Nandhukumar Signed-off-by: Praful Rakhade <99539100+Prafulrakhade@users.noreply.github.com> Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Signed-off-by: Swati Goel Signed-off-by: Alka Prasad Co-authored-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> Co-authored-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> Co-authored-by: Chandra Keshav Mishra Co-authored-by: Vijay Kumar S <94220135+vijay151096@users.noreply.github.com> Co-authored-by: VSIVAKALYAN Co-authored-by: Nandhukumar <100744358+nandhu-kumar@users.noreply.github.com> Co-authored-by: Nandhukumar Co-authored-by: Mohanachandran S Co-authored-by: Praful Rakhade <99539100+Prafulrakhade@users.noreply.github.com> Co-authored-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Co-authored-by: Swati Goel * [INJIMOB-857] Merge Test Refactor changes (#263) * MOSIP-32084 Signed-off-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> * resolved mimoto testrig build issues Signed-off-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> * Reverting the JAVA 21 upgrade (#200) Signed-off-by: Mohanachandran S * MOSIP-30868 Artifact id updated Signed-off-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> * [INJIWEB-399]: modify the credential template to mimic injimobile details view (#207) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-399]: handle array fields in credential (#209) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [DSD-5071] Setup for apitest-mimoto Signed-off-by: VSIVAKALYAN * [DSD-5071] Setup for mimoto Signed-off-by: VSIVAKALYAN * [INJIWEB-423]: include face in the credential template for MOSIP vc and preserve the order (#212) * [INJIWEB-423]: include face in the credential template for MOSIP vc Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-423]: include face in the credential template for MOSIP vc Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [DSD-5071] Setup for apitest-mimoto Signed-off-by: VSIVAKALYAN * DSD-5071 Signed-off-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> * DSD-5071 Signed-off-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> * [INJIWEB-465][INJIWEB-460]: Fixing sunbird Logo Stretching & Wrapping the claim values (#217) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-468]: Generate Multiple KeyPairs for Everyy Credential Download Request (#218) * [INJIWEB-468]: generate separate keypairs for downloading different VC's Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-468]: generate separate keypairs for downloading different VC's Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-468]: updated the keypair size to RSA 2k (#219) * [INJIWEB-468]: updated the keypair size to RSA 2k Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-468]: remove the qr code from the credential template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * MOSIP-33136 (#221) Signed-off-by: Nandhukumar Co-authored-by: Nandhukumar * [INJIWEB-570]: render only the fields that has values in the PDF template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-570]: render only the fields that has values in the PDF template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-570]: render only the fields that has values in the PDF template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * MOSIP-33173 Updated the POM version and apitest-commons version Signed-off-by: Mohanachandran S * [MOSIP-33402] Updatde chart-lint-publish.yml Signed-off-by: Praful Rakhade <99539100+Prafulrakhade@users.noreply.github.com> * [INJIMOB-1458] add supported credentials attribute in issuers config (#244) Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> * [INJIMOB-1458] add id field to credentials_supported in issuers config (#245) Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> * [INJIMOB-1469] : update error response for wallet binding apis. (#248) Signed-off-by: Swati Goel * [INJIWEB-577]: modify the credential endpoint with request construction from client side (#253) * [INJIWEB-577]: modify the credential endpoint with request construction from client side Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577]: modify the credential endpoint with request construction from client side Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577]: modify the credential endpoint with request construction from client side (#228) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577]: modify the credential endpoint with request construction from client side Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577]: modify the credential endpoint with loggers (#236) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577] : Merge Latest Develop Changes (#247) * [INJIWEB-570]: render only the fields that has values in the PDF template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-570]: render only the fields that has values in the PDF template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-570]: render only the fields that has values in the PDF template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577]: modify the credential endpoint with loggers Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * MOSIP-33173 Updated the POM version and apitest-commons version Signed-off-by: Mohanachandran S * [INJIMOB-1458] add supported credentials attribute in issuers config (#244) Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> * [INJIMOB-1458] add id field to credentials_supported in issuers config (#245) Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> Signed-off-by: Mohanachandran S Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Co-authored-by: Mohanachandran S Co-authored-by: Chandra Keshav Mishra Co-authored-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> Signed-off-by: Mohanachandran S Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Co-authored-by: Mohanachandran S Co-authored-by: Chandra Keshav Mishra Co-authored-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> * [INJIMOB-857]: remove autowire annotation from the controller class in test Signed-off-by: Alka Prasad * [INJIMOB-857]: refactor controller test function to used data from resources instead of using reflection for mocking Signed-off-by: Alka Prasad * [INJIMOB-857]: remove unused import Signed-off-by: Alka Prasad * [INJIMOB-857]: remove unnecessary white spaces Signed-off-by: Alka Prasad * [INJIMOB-857]: extract api json response into a file and read it from the file for assertion Signed-off-by: Alka Prasad --------- Signed-off-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> Signed-off-by: Mohanachandran S Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> Signed-off-by: VSIVAKALYAN Signed-off-by: Nandhukumar Signed-off-by: Praful Rakhade <99539100+Prafulrakhade@users.noreply.github.com> Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Signed-off-by: Swati Goel Signed-off-by: Alka Prasad Co-authored-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> Co-authored-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> Co-authored-by: Chandra Keshav Mishra Co-authored-by: Vijay Kumar S <94220135+vijay151096@users.noreply.github.com> Co-authored-by: VSIVAKALYAN Co-authored-by: Nandhukumar <100744358+nandhu-kumar@users.noreply.github.com> Co-authored-by: Nandhukumar Co-authored-by: Mohanachandran S Co-authored-by: Praful Rakhade <99539100+Prafulrakhade@users.noreply.github.com> Co-authored-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Co-authored-by: Swati Goel * Injimob 857 develop java21 (#265) * MOSIP-32084 Signed-off-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> * resolved mimoto testrig build issues Signed-off-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> * Reverting the JAVA 21 upgrade (#200) Signed-off-by: Mohanachandran S * MOSIP-30868 Artifact id updated Signed-off-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> * [INJIWEB-399]: modify the credential template to mimic injimobile details view (#207) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-399]: handle array fields in credential (#209) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [DSD-5071] Setup for apitest-mimoto Signed-off-by: VSIVAKALYAN * [DSD-5071] Setup for mimoto Signed-off-by: VSIVAKALYAN * [INJIWEB-423]: include face in the credential template for MOSIP vc and preserve the order (#212) * [INJIWEB-423]: include face in the credential template for MOSIP vc Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-423]: include face in the credential template for MOSIP vc Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [DSD-5071] Setup for apitest-mimoto Signed-off-by: VSIVAKALYAN * DSD-5071 Signed-off-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> * DSD-5071 Signed-off-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> * [INJIWEB-465][INJIWEB-460]: Fixing sunbird Logo Stretching & Wrapping the claim values (#217) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-468]: Generate Multiple KeyPairs for Everyy Credential Download Request (#218) * [INJIWEB-468]: generate separate keypairs for downloading different VC's Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-468]: generate separate keypairs for downloading different VC's Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-468]: updated the keypair size to RSA 2k (#219) * [INJIWEB-468]: updated the keypair size to RSA 2k Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-468]: remove the qr code from the credential template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * MOSIP-33136 (#221) Signed-off-by: Nandhukumar Co-authored-by: Nandhukumar * [INJIWEB-570]: render only the fields that has values in the PDF template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-570]: render only the fields that has values in the PDF template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-570]: render only the fields that has values in the PDF template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * MOSIP-33173 Updated the POM version and apitest-commons version Signed-off-by: Mohanachandran S * [MOSIP-33402] Updatde chart-lint-publish.yml Signed-off-by: Praful Rakhade <99539100+Prafulrakhade@users.noreply.github.com> * [INJIMOB-1458] add supported credentials attribute in issuers config (#244) Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> * [INJIMOB-1458] add id field to credentials_supported in issuers config (#245) Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> * [INJIMOB-1469] : update error response for wallet binding apis. (#248) Signed-off-by: Swati Goel * [INJIWEB-577]: modify the credential endpoint with request construction from client side (#253) * [INJIWEB-577]: modify the credential endpoint with request construction from client side Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577]: modify the credential endpoint with request construction from client side Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577]: modify the credential endpoint with request construction from client side (#228) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577]: modify the credential endpoint with request construction from client side Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577]: modify the credential endpoint with loggers (#236) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577] : Merge Latest Develop Changes (#247) * [INJIWEB-570]: render only the fields that has values in the PDF template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-570]: render only the fields that has values in the PDF template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-570]: render only the fields that has values in the PDF template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577]: modify the credential endpoint with loggers Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * MOSIP-33173 Updated the POM version and apitest-commons version Signed-off-by: Mohanachandran S * [INJIMOB-1458] add supported credentials attribute in issuers config (#244) Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> * [INJIMOB-1458] add id field to credentials_supported in issuers config (#245) Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> Signed-off-by: Mohanachandran S Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Co-authored-by: Mohanachandran S Co-authored-by: Chandra Keshav Mishra Co-authored-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> Signed-off-by: Mohanachandran S Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Co-authored-by: Mohanachandran S Co-authored-by: Chandra Keshav Mishra Co-authored-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> * [INJIMOB-857]: remove autowire annotation from the controller class in test Signed-off-by: Alka Prasad * [INJIMOB-857]: refactor controller test function to used data from resources instead of using reflection for mocking Signed-off-by: Alka Prasad * [INJIMOB-857]: remove unused import Signed-off-by: Alka Prasad * [INJIMOB-857]: remove unnecessary white spaces Signed-off-by: Alka Prasad * [INJIMOB-857]: extract api json response into a file and read it from the file for assertion Signed-off-by: Alka Prasad * [INJIMOB-857]: permit any request without authentication Signed-off-by: Alka Prasad --------- Signed-off-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> Signed-off-by: Mohanachandran S Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> Signed-off-by: VSIVAKALYAN Signed-off-by: Nandhukumar Signed-off-by: Praful Rakhade <99539100+Prafulrakhade@users.noreply.github.com> Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Signed-off-by: Swati Goel Signed-off-by: Alka Prasad Co-authored-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> Co-authored-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> Co-authored-by: Chandra Keshav Mishra Co-authored-by: Vijay Kumar S <94220135+vijay151096@users.noreply.github.com> Co-authored-by: VSIVAKALYAN Co-authored-by: Nandhukumar <100744358+nandhu-kumar@users.noreply.github.com> Co-authored-by: Nandhukumar Co-authored-by: Mohanachandran S Co-authored-by: Praful Rakhade <99539100+Prafulrakhade@users.noreply.github.com> Co-authored-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Co-authored-by: Swati Goel * [INJIMOB-857]: resolve 403 and 500 errors (#278) Signed-off-by: Alka Prasad * Injimob 857 java21 issue (#279) * [INJIMOB-857]: resolve 403 and 500 errors Signed-off-by: Alka Prasad * [INJIMOB-857]: bring back apitest/pom file changes which got overridden in merge commit Signed-off-by: Alka Prasad * [INJIMOB-857]: fix 400 error Signed-off-by: Alka Prasad --------- Signed-off-by: Alka Prasad Signed-off-by: Alka Prasad * [INJIMOB-857] : temporarily add print statement to fetch the params value passed in get token api (#290) * [INJIMOB-857]: resolve 403 and 500 errors Signed-off-by: Alka Prasad * [INJIMOB-857]: bring back apitest/pom file changes which got overridden in merge commit Signed-off-by: Alka Prasad * [INJIMOB-857]: fix 400 error Signed-off-by: Alka Prasad * temporarily add print statement to fetch the params value passed in get token api for debugging Signed-off-by: Alka Prasad --------- Signed-off-by: Alka Prasad Signed-off-by: Alka Prasad * [INJIMOB-857]: remove print statement (#292) * [INJIMOB-857]: resolve 403 and 500 errors Signed-off-by: Alka Prasad * [INJIMOB-857]: bring back apitest/pom file changes which got overridden in merge commit Signed-off-by: Alka Prasad * [INJIMOB-857]: fix 400 error Signed-off-by: Alka Prasad * temporarily add print statement to fetch the params value passed in get token api for debugging Signed-off-by: Alka Prasad * [INJIMOB-857]: remove the print statement Signed-off-by: Alka Prasad --------- Signed-off-by: Alka Prasad Signed-off-by: Alka Prasad * Sync with develop branch (#321) * MOSIP-32084 Signed-off-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> * resolved mimoto testrig build issues Signed-off-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> * Reverting the JAVA 21 upgrade (#200) Signed-off-by: Mohanachandran S * MOSIP-30868 Artifact id updated Signed-off-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> * [INJIWEB-399]: modify the credential template to mimic injimobile details view (#207) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-399]: handle array fields in credential (#209) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [DSD-5071] Setup for apitest-mimoto Signed-off-by: VSIVAKALYAN * [DSD-5071] Setup for mimoto Signed-off-by: VSIVAKALYAN * [INJIWEB-423]: include face in the credential template for MOSIP vc and preserve the order (#212) * [INJIWEB-423]: include face in the credential template for MOSIP vc Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-423]: include face in the credential template for MOSIP vc Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [DSD-5071] Setup for apitest-mimoto Signed-off-by: VSIVAKALYAN * DSD-5071 Signed-off-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> * DSD-5071 Signed-off-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> * [INJIWEB-465][INJIWEB-460]: Fixing sunbird Logo Stretching & Wrapping the claim values (#217) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-468]: Generate Multiple KeyPairs for Everyy Credential Download Request (#218) * [INJIWEB-468]: generate separate keypairs for downloading different VC's Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-468]: generate separate keypairs for downloading different VC's Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-468]: updated the keypair size to RSA 2k (#219) * [INJIWEB-468]: updated the keypair size to RSA 2k Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-468]: remove the qr code from the credential template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * MOSIP-33136 Signed-off-by: Nandhukumar * MOSIP-33136 (#221) Signed-off-by: Nandhukumar Co-authored-by: Nandhukumar * [INJIWEB-570]: render only the fields that has values in the PDF template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-570]: render only the fields that has values in the PDF template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-570]: render only the fields that has values in the PDF template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * MOSIP-33173 Updated the POM version and apitest-commons version Signed-off-by: Mohanachandran S * [MOSIP-33402] Updatde chart-lint-publish.yml Signed-off-by: Praful Rakhade <99539100+Prafulrakhade@users.noreply.github.com> * [INJIMOB-1458] add supported credentials attribute in issuers config (#244) Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> * [INJIMOB-1458] add id field to credentials_supported in issuers config (#245) Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> * [INJIMOB-1469] : update error response for wallet binding apis. (#248) Signed-off-by: Swati Goel * [INJIWEB-577]: modify the credential endpoint with request construction from client side (#253) * [INJIWEB-577]: modify the credential endpoint with request construction from client side Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577]: modify the credential endpoint with request construction from client side Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577]: modify the credential endpoint with request construction from client side (#228) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577]: modify the credential endpoint with request construction from client side Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577]: modify the credential endpoint with loggers (#236) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577] : Merge Latest Develop Changes (#247) * [INJIWEB-570]: render only the fields that has values in the PDF template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-570]: render only the fields that has values in the PDF template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-570]: render only the fields that has values in the PDF template Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577]: modify the credential endpoint with loggers Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * MOSIP-33173 Updated the POM version and apitest-commons version Signed-off-by: Mohanachandran S * [INJIMOB-1458] add supported credentials attribute in issuers config (#244) Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> * [INJIMOB-1458] add id field to credentials_supported in issuers config (#245) Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> Signed-off-by: Mohanachandran S Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Co-authored-by: Mohanachandran S Co-authored-by: Chandra Keshav Mishra Co-authored-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> Signed-off-by: Mohanachandran S Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Co-authored-by: Mohanachandran S Co-authored-by: Chandra Keshav Mishra Co-authored-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> * MOSIP-32418 Merging java21 with develop (#252) * MOSIP-32418 Merging java21 with develop Signed-off-by: Mohanachandran S * MOSIP-32418 Merging java21 with develop Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> * MOSIP-32418 Merging java21 with develop Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> * MOSIP-32418 Merging java21 with develop Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> * MOSIP-32418 Merging java21 with develop Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> --------- Signed-off-by: Mohanachandran S Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> * [INJIWEB-577]&[INJIWEB-597]: Generate QR Code for the Credential & Merge download api and token Endpoint (#273) * merge download credential and token endpoint (#266) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * Adding Loggers For Debugging (#267) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * adding missing properties in the pojo (#268) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * preseerving the order of serialization (#269) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577]: Create separate Controller for Credentials (#272) * [INJIWEB-577]: Create separate Controller for Credentials Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-577]: comment local changes Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * Adding Test Case review (#274) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * MOSIP-33946 - Rollback to Java11 (#275) * MOSIP-33946 - Rollback to Java11 Signed-off-by: Mohanachandran S * Update push-trigger.yml Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> --------- Signed-off-by: Mohanachandran S Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> * [INJIMOB-857] - add docker-compose Signed-off-by: Swati Goel * [MOSIP-34144] added inji-config-server deployment script in mimoto Signed-off-by: techno-467 * [MOSIP-34144] added inji-config-server deployment script in mimoto Signed-off-by: techno-467 * [MOSIP-34144] added inji-config-server deployment script in mimoto Signed-off-by: techno-467 * [MOSIP-34144] added inji-config-server deployment script in mimoto Signed-off-by: techno-467 * Update install.sh Signed-off-by: Praful Rakhade <99539100+Prafulrakhade@users.noreply.github.com> * Update values.yaml Signed-off-by: Praful Rakhade <99539100+Prafulrakhade@users.noreply.github.com> * INJIWEB-179 Added new test cases (#281) * MOSIP-32363 Signed-off-by: Mohanachandran S * INJIWEB-179 Signed-off-by: Mohanachandran S * Download credential API Signed-off-by: Mohanachandran S * INJIWEB-179 Added new test cases Signed-off-by: Mohanachandran S * INJIWEB-179 Added new test cases Signed-off-by: Mohanachandran S * INJIWEB-179 Added new test cases Signed-off-by: Mohanachandran S --------- Signed-off-by: Mohanachandran S Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> * [DSD-5651]Update chart-lint-publish.yml Signed-off-by: Rakshitha650 <76676196+Rakshitha650@users.noreply.github.com> * [[DSD-5651]]Updated README.md Signed-off-by: Rakshitha650 <76676196+Rakshitha650@users.noreply.github.com> * MOSIP-34397 - Updating MosipTestRunner (#297) * MOSIP-34397 - Updating MosipTestRunner Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> * MOSIP-34397 - Updating MosipTestRunner Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> --------- Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> * [DSD-5725] updated install.sh script with inji-config changes also updated CHart version of partner onboarder Signed-off-by: techno-467 * [INJIMOB-1153] : update README Signed-off-by: Swati Goel * [INJIMOB-1153] : delete unused docker-compose file Signed-off-by: Swati Goel * [INJIMOB-1153] : update mimoto version Signed-off-by: Swati Goel * [INJIMOB-1153] : add url tag in pom.xml Signed-off-by: Swati Goel * MOSIP-33845 Signed-off-by: Nandhukumar * [INJIMOB-1250] add api for fetching wellknown (#300) * [INJIMOB-1250] add api for fetching wellknown Signed-off-by: Abhishek Paul * [INJIMOB-1250] add unit tests and api test Signed-off-by: Abhishek Paul * [INJIMOB-1250] refactor changes Signed-off-by: Abhishek Paul * [INJIMOB-1250] separate draft11 and draft 13 wellknown response Signed-off-by: Abhishek Paul * [INJIMOB-1250] add controller test Signed-off-by: Abhishek Paul --------- Signed-off-by: Abhishek Paul * [INJIMOB-1665] - remove unused property Signed-off-by: Swati Goel * [INJIMOB-857] - kernel dependencies Signed-off-by: Swati Goel * [INJIMOB-857] - use java21 workflow Signed-off-by: Swati Goel * [INJIMOB-857] - correct dependencies after merge conflicts. Signed-off-by: Swati Goel * [INJIMOB-857] - correct apitest dependenices after merge conflict Signed-off-by: Swati Goel * Revert "[INJIMOB-857] - correct apitest dependenices after merge conflict" This reverts commit f4809fe076743491f153f16c7944560453266ae4. Signed-off-by: Swati Goel * [INJIMOB-857] - correct apitest dependenices after merge conflict Signed-off-by: Swati Goel --------- Signed-off-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> Signed-off-by: Mohanachandran S Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> Signed-off-by: VSIVAKALYAN Signed-off-by: Nandhukumar Signed-off-by: Praful Rakhade <99539100+Prafulrakhade@users.noreply.github.com> Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Signed-off-by: Swati Goel Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> Signed-off-by: techno-467 Signed-off-by: Rakshitha650 <76676196+Rakshitha650@users.noreply.github.com> Signed-off-by: Abhishek Paul Co-authored-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> Co-authored-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> Co-authored-by: Chandra Keshav Mishra Co-authored-by: Vijay Kumar S <94220135+vijay151096@users.noreply.github.com> Co-authored-by: VSIVAKALYAN Co-authored-by: Nandhukumar Co-authored-by: Nandhukumar <100744358+nandhu-kumar@users.noreply.github.com> Co-authored-by: Mohanachandran S Co-authored-by: Praful Rakhade <99539100+Prafulrakhade@users.noreply.github.com> Co-authored-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Co-authored-by: techno-467 Co-authored-by: Rakshitha650 <76676196+Rakshitha650@users.noreply.github.com> Co-authored-by: abhip2565 <74866247+abhip2565@users.noreply.github.com> * [INJIMOB-857] - correct apitest dependenices and update mimoto java21 version (#326) * [INJIMOB-857] - correct apitest dependenices and update mimoto java21 version Signed-off-by: Swati Goel * [INJIMOB-857] - use java21 for running apitest locally Signed-off-by: Swati Goel --------- Signed-off-by: Swati Goel * [INJIMOB-857] correct apitest dependenices (#336) * [INJIMOB-857] - correct apitest dependenices and update mimoto java21 version Signed-off-by: Swati Goel * [INJIMOB-857] - use java21 for running apitest locally Signed-off-by: Swati Goel --------- Signed-off-by: Swati Goel * [INJIMOB-857] - fix merge conficts Signed-off-by: Swati Goel * [INJIMOB-857] - fix compliation error Signed-off-by: Swati Goel * [INJIMOB-857] - add missing properties in test profile. Signed-off-by: Swati Goel --------- Signed-off-by: Mohanachandran S Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> Signed-off-by: VSIVAKALYAN Signed-off-by: VSIVAKALYAN <103260988+VSIVAKALYAN@users.noreply.github.com> Signed-off-by: Alka Prasad Signed-off-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> Signed-off-by: Nandhukumar Signed-off-by: Praful Rakhade <99539100+Prafulrakhade@users.noreply.github.com> Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Signed-off-by: Swati Goel Signed-off-by: Alka Prasad Signed-off-by: techno-467 Signed-off-by: Rakshitha650 <76676196+Rakshitha650@users.noreply.github.com> Signed-off-by: Abhishek Paul Co-authored-by: Mohanachandran S Co-authored-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> Co-authored-by: VSIVAKALYAN Co-authored-by: VSIVAKALYAN <103260988+VSIVAKALYAN@users.noreply.github.com> Co-authored-by: Chandra Keshav Mishra Co-authored-by: Alka Prasad Co-authored-by: Alka Prasad Co-authored-by: Vijay Kumar S <94220135+vijay151096@users.noreply.github.com> Co-authored-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> Co-authored-by: Nandhukumar <100744358+nandhu-kumar@users.noreply.github.com> Co-authored-by: Nandhukumar Co-authored-by: Praful Rakhade <99539100+Prafulrakhade@users.noreply.github.com> Co-authored-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Co-authored-by: techno-467 Co-authored-by: Rakshitha650 <76676196+Rakshitha650@users.noreply.github.com> Co-authored-by: abhip2565 <74866247+abhip2565@users.noreply.github.com> --- .github/workflows/push-trigger.yml | 28 +- Dockerfile | 12 +- apitest/Dockerfile | 2 +- apitest/pom.xml | 480 +++++++----------- apitest/testNgXmlFiles/mimotoApi.xml | 16 +- docker-compose/config/oidckeystore.p12 | Bin 4540 -> 0 bytes pom.xml | 153 +++--- .../mimoto/MimotoServiceApplication.java | 1 + .../java/io/mosip/mimoto/config/Config.java | 43 +- .../io/mosip/mimoto/config/SwaggerConfig.java | 2 +- .../controller/CommonInjiController.java | 4 - .../controller/CredentialShareController.java | 2 +- .../mimoto/controller/IdpController.java | 7 +- .../mimoto/controller/IssuersController.java | 5 +- .../controller/PresentationController.java | 1 - .../mimoto/core/http/RequestWrapper.java | 4 +- .../io/mosip/mimoto/dto/AuditRequestDto.java | 4 +- .../java/io/mosip/mimoto/dto/DisplayDTO.java | 4 +- .../java/io/mosip/mimoto/dto/IssuerDTO.java | 6 +- .../java/io/mosip/mimoto/dto/IssuersDTO.java | 2 +- .../java/io/mosip/mimoto/dto/LogoDTO.java | 2 +- .../CredentialSupportedDisplayResponse.java | 4 +- .../mimoto/CredentialsSupportedResponse.java | 1 + .../dto/mimoto/VCCredentialRequestProof.java | 2 +- .../dto/mimoto/VCCredentialResponse.java | 6 +- .../dto/mimoto/VCCredentialResponseProof.java | 2 +- .../resources/application-local.properties | 1 - src/main/resources/keystore.p12 | Bin 4380 -> 0 bytes .../templates/CredentialTemplate.html | 0 .../io/mosip/mimoto/TestBootApplication.java | 4 +- .../io/mosip/mimoto/config/MimotoConfig.java | 90 ++-- .../mimoto/controller/InjiControllerTest.java | 44 +- .../service/CredentialShareServiceTest.java | 18 +- .../resources/application-test.properties | 24 + src/test/resources/bootstrap.properties | 21 + src/test/resources/responses/InjiConfig.json | 16 + 36 files changed, 478 insertions(+), 533 deletions(-) delete mode 100644 docker-compose/config/oidckeystore.p12 delete mode 100644 src/main/resources/keystore.p12 create mode 100644 src/main/resources/templates/CredentialTemplate.html create mode 100644 src/test/resources/application-test.properties create mode 100644 src/test/resources/bootstrap.properties create mode 100644 src/test/resources/responses/InjiConfig.json diff --git a/.github/workflows/push-trigger.yml b/.github/workflows/push-trigger.yml index 4cdf8cc48..53726dbff 100644 --- a/.github/workflows/push-trigger.yml +++ b/.github/workflows/push-trigger.yml @@ -25,7 +25,7 @@ on: jobs: build-mimoto: - uses: mosip/kattu/.github/workflows/maven-build.yml@master + uses: mosip/kattu/.github/workflows/maven-build.yml@master-java21 with: SERVICE_LOCATION: ./ BUILD_ARTIFACT: mimoto @@ -75,7 +75,7 @@ jobs: publish_to_nexus: if: "${{ !contains(github.ref, 'master') && github.event_name != 'pull_request' }}" needs: build-mimoto - uses: mosip/kattu/.github/workflows/maven-publish-to-nexus.yml@master + uses: mosip/kattu/.github/workflows/maven-publish-to-nexus.yml@master-java21 with: SERVICE_LOCATION: ./ secrets: @@ -89,7 +89,7 @@ jobs: # sonar_analysis: # needs: build-mimoto # if: "${{ github.event_name != 'pull_request' }}" -# uses: mosip/kattu/.github/workflows/maven-sonar-analysis.yml@master +# uses: mosip/kattu/.github/workflows/maven-sonar-analysis.yml@master-java21 # with: # SERVICE_LOCATION: ./ # secrets: @@ -110,7 +110,7 @@ jobs: SERVICE_NAME: 'mimoto' BUILD_ARTIFACT: 'mimoto-recreated' fail-fast: false - uses: mosip/kattu/.github/workflows/docker-build.yml@master + uses: mosip/kattu/.github/workflows/docker-build.yml@master-java21 name: ${{ matrix.SERVICE_NAME }} with: SERVICE_LOCATION: ${{ matrix.SERVICE_LOCATION }} @@ -123,7 +123,7 @@ jobs: SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }} build-maven-apitest-mimoto: - uses: mosip/kattu/.github/workflows/maven-build.yml@master + uses: mosip/kattu/.github/workflows/maven-build.yml@master-java21 with: SERVICE_LOCATION: ./apitest BUILD_ARTIFACT: apitest-mimoto @@ -137,7 +137,7 @@ jobs: publish_to_nexus_apitest_mimoto: if: "${{ !contains(github.ref, 'master') && github.event_name != 'pull_request' && github.event_name != 'release' && github.event_name != 'prerelease' && github.event_name != 'publish' }}" needs: build-maven-apitest-mimoto - uses: mosip/kattu/.github/workflows/maven-publish-to-nexus.yml@master + uses: mosip/kattu/.github/workflows/maven-publish-to-nexus.yml@master-java21 with: SERVICE_LOCATION: ./apitest secrets: @@ -157,12 +157,12 @@ jobs: SERVICE_LOCATION: apitest BUILD_ARTIFACT: apitest-mimoto-local steps: - - uses: actions/checkout@v2 - - name: Set up JDK 11 - uses: actions/setup-java@v1 + - uses: actions/checkout@v3 + - name: Set up JDK 21 + uses: actions/setup-java@v3 with: - ref: ${{ github.ref }} - java-version: 11 + distribution: 'temurin' + java-version: '21' server-id: ossrh # Value of the distributionManagement/repository/id field of the pom.xml settings-path: ${{ github.workspace }} # location for the settings.xml file - name: Setup the settings file for ossrh server @@ -205,7 +205,7 @@ jobs: ONLY_DOCKER: true fail-fast: false name: ${{ matrix.SERVICE_NAME }} - uses: mosip/kattu/.github/workflows/docker-build.yml@master + uses: mosip/kattu/.github/workflows/docker-build.yml@master-java21 with: SERVICE_LOCATION: ${{ matrix.SERVICE_LOCATION }} SERVICE_NAME: ${{ matrix.SERVICE_NAME }} @@ -220,7 +220,7 @@ jobs: # sonar_analysis_apitest_mimoto: # needs: build-maven-apitest-mimoto # if: "${{ github.event_name != 'pull_request' }}" -# uses: mosip/kattu/.github/workflows/maven-sonar-analysis.yml@master +# uses: mosip/kattu/.github/workflows/maven-sonar-analysis.yml@master-java21 # with: # SERVICE_LOCATION: ./apitest # secrets: @@ -230,4 +230,4 @@ jobs: # OSSRH_SECRET: ${{ secrets.OSSRH_SECRET }} # OSSRH_TOKEN: ${{ secrets.OSSRH_TOKEN }} # GPG_SECRET: ${{ secrets.GPG_SECRET }} -# SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }} +# SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }} \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index d00430ac3..d48e1222c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM openjdk:11 +FROM eclipse-temurin:21-jre-alpine ARG SOURCE ARG COMMIT_HASH @@ -49,16 +49,16 @@ ARG container_user=mosip ARG container_user_group=mosip # can be passed during Docker build as build time environment for github branch to pickup configuration from. -ARG container_user_uid=1001 +ARG container_user_uid=1002 # can be passed during Docker build as build time environment for github branch to pickup configuration from. ARG container_user_gid=1001 # install packages and create user -RUN apt-get -y update \ -&& apt-get install -y unzip \ -&& groupadd -g ${container_user_gid} ${container_user_group} \ -&& useradd -u ${container_user_uid} -g ${container_user_group} -s /bin/sh -m ${container_user} +RUN apk -q update \ +&& apk add -q unzip wget \ +&& addgroup -g ${container_user_gid} ${container_user_group} \ +&& adduser -s /bin/sh -u ${container_user_uid} -G ${container_user_group} -h /home/${container_user} --disabled-password ${container_user} # set working directory for the user WORKDIR /home/${container_user} diff --git a/apitest/Dockerfile b/apitest/Dockerfile index 8ab868535..1937a431f 100644 --- a/apitest/Dockerfile +++ b/apitest/Dockerfile @@ -1,4 +1,4 @@ -FROM openjdk:11 +FROM mosipdev/openjdk-21-jre:latest ARG SOURCE ARG COMMIT_HASH diff --git a/apitest/pom.xml b/apitest/pom.xml index 41d5631df..506d621f7 100644 --- a/apitest/pom.xml +++ b/apitest/pom.xml @@ -8,7 +8,7 @@ apitest-mimoto Parent project of apitest-mimoto https://github.com/mosip/mimoto - 1.2.1-SNAPSHOT + 1.2.1-java21-SNAPSHOT @@ -33,157 +33,39 @@ - - UTF-8 - 11 - 11 - 3.7.0 + 21 + 21 + 3.8.0 3.0.2 3.1.0 - 2.9 - 0.8.1 - 3.2 - 3.0.1 - 2.3 - false - 3.7.0.1746 - - 2.0.2.RELEASE - 2.0.7.RELEASE - 5.0.5.RELEASE - 2.0.0.RELEASE - - 2.0.7 - 1.5.20 - 2.9.2 - - 3.6.2 - 3.7.0 - - - - 1.2 - 3.0.0 - 1.3 - 2.2 - 2.0.1.Final - 2.2.6 - - - 1.4.197 - 5.1.46 - 42.2.2 - 2.5.0 - 6.0.12.Final - - - 1.10.19 - 1.7.4 - 2.0.0-beta.5 - - - 3.6.1 - 3.7 - 2.6 - 1.11 - 4.3 - 1.9.2 - 2.2 - 4.5.6 - 19.0 - 1.18.8 - 0.1.54 - 1.4.0 - 7.1.0 - 2.0.0 - 5.5.13 - 2.3.23 - 1.7 - 2.0 - 1.5.2 - 2.1.1 - 1.60 - 63.1 - 1.0.0 - 3.3.3 - 2.8.1 - 4.1.0-incubating - 1.11.368 - 0.2.4 - 2.3.0 - 3.0.1 - 1.9.12 - 0.6.0 - 2.0.0.AM2 - - - - - - - - 0.8.2 - 2.2 - 3.2 - UTF-8 - 3.7.0 - 3.0.1 - - - 1.1.6 - 1.7.19 - 1.10.19 + 3.2.0 + 1.5 + 3.2.4 + 3.0.0 + 2.2.1 - - 1.4.6 + 3.0.1 + apitest-mimoto-1.2.1-java21-SNAPSHOT-jar-with-dependencies + - - 5.0.6.RELEASE - - - 5.4.2.Final - - - 2.1.1 - - - 10.13.1.1 - - - 3.4.0 - - - 1.3.5 - - - 0.3.12 - - - 0.3.0 + + + io.mosip.testrig.apirig.apitest.commons + apitest-commons + 1.2.1-SNAPSHOT + + - - 1.1.2-incubating - 1.2.0.1-B1 - 0.4.7 - 3.0.0 - 2.41.2 - 2.4.0 - 3.3.9 - 3.0.7 - 6.11 - 1.13 - apitest-mimoto-1.2.0.1-SNAPSHOT-jar-with-dependencies - - + org.apache.maven.plugins @@ -202,166 +84,167 @@ maven-compiler-plugin - 3.5.1 + ${maven.compiler.version} - 11 - 11 + ${maven.compiler.source} + ${maven.compiler.target} -Dfile.encoding=UTF-8 - - org.apache.maven.plugins - maven-javadoc-plugin - 3.2.0 - - none - - - pl.project13.maven - git-commit-id-plugin - 3.0.1 - - - populate-git-commit-information - - revision - - - true - MM/dd/yyyy HH:mm:ss Z - 8 - true - ${project.build.outputDirectory}/git.properties - - - - - ${project.basedir}/.git - - - + org.apache.maven.plugins + maven-javadoc-plugin + ${maven.javadoc.version} + + none + + - org.apache.maven.plugins - maven-gpg-plugin - 1.5 - - - sign-artifacts - verify - - sign - - - - --pinentry-mode - loopback - - - - + pl.project13.maven + git-commit-id-plugin + ${git.commit.id.plugin.version} + + + populate-git-commit-information + + revision + + + true + MM/dd/yyyy HH:mm:ss Z + 8 + true + + ${project.build.outputDirectory}/git.properties + + + + + ${project.basedir}/.git + + + + org.apache.maven.plugins + maven-gpg-plugin + ${maven.gpg.plugin.version} + + + sign-artifacts + verify + + sign + + + + --pinentry-mode + loopback + + + + + + + org.apache.maven.plugins + maven-shade-plugin + ${maven.shade.plugin.version} + + + + shade + + + ${fileName} + + + + + + + io.mosip.testrig.apirig.testrunner.MosipTestRunner + + + + + + *:* + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + + + + + + org.apache.maven.plugins + maven-jar-plugin + ${maven.jar.plugin.version} + + + + true + true + + + ${project.name} + ${project.version} + ${user.name} + ${os.name} + ${maven.build.timestamp} + ${env.BUILD_NUMBER} + ${env.BUILD_ID} + ${env.BUILD_URL} + + + + + + org.apache.maven.plugins + maven-war-plugin + ${maven.war.plugin.version} + + + + true + true + + + ${project.name} + ${project.version} + ${user.name} + ${os.name} + ${maven.build.timestamp} + ${env.BUILD_NUMBER} + ${env.BUILD_ID} + ${env.BUILD_URL} + + + + + + org.apache.maven.plugins + maven-source-plugin + ${maven.source.plugin.version} + + + attach-sources + + jar-no-fork + + + - - - - org.apache.maven.plugins - maven-shade-plugin - 3.2.4 - - - - shade - - - ${fileName} - - - - - - io.mosip.testrig.apirig.testrunner.MosipTestRunner - - - - - - *:* - - META-INF/*.SF - META-INF/*.DSA - META-INF/*.RSA - - - - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - true - true - - - ${project.name} - ${project.version} - ${user.name} - ${os.name} - ${maven.build.timestamp} - ${env.BUILD_NUMBER} - ${env.BUILD_ID} - ${env.BUILD_URL} - - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven.war.plugin.version} - - - - true - true - - - ${project.name} - ${project.version} - ${user.name} - ${os.name} - ${maven.build.timestamp} - ${env.BUILD_NUMBER} - ${env.BUILD_ID} - ${env.BUILD_URL} - - - - - - org.apache.maven.plugins - maven-source-plugin - 2.2.1 - - - attach-sources - - jar-no-fork - - - - org.apache.maven.plugins maven-antrun-plugin - 3.0.0 + ${maven.antrun.plugin.version} make-jar-executable @@ -371,8 +254,10 @@ - - + + @@ -380,17 +265,4 @@ - - - - - - - io.mosip.testrig.apirig.apitest.commons - apitest-commons - 1.2.1-SNAPSHOT - - - - - \ No newline at end of file + diff --git a/apitest/testNgXmlFiles/mimotoApi.xml b/apitest/testNgXmlFiles/mimotoApi.xml index 434f4c82a..f7a6cf5cd 100644 --- a/apitest/testNgXmlFiles/mimotoApi.xml +++ b/apitest/testNgXmlFiles/mimotoApi.xml @@ -5,7 +5,7 @@ - + @@ -46,8 +46,8 @@ - - + + @@ -55,14 +55,14 @@ - + - + @@ -71,7 +71,7 @@ - + @@ -95,7 +95,7 @@ - + @@ -189,7 +189,7 @@ - + diff --git a/docker-compose/config/oidckeystore.p12 b/docker-compose/config/oidckeystore.p12 deleted file mode 100644 index 92e794eb7d4fa586f6cdc686394475014b55f84d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4540 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 D{pE6a diff --git a/pom.xml b/pom.xml index 51c3cfb19..00faaa0a1 100644 --- a/pom.xml +++ b/pom.xml @@ -1,18 +1,13 @@ 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 2.0.2.RELEASE - - io.mosip mimoto - 0.13.0 + 0.13.0-java21-SNAPSHOT mimoto https://github.com/mosip/mimoto Mobile server backend supporting Inji. + MPL 2.0 @@ -33,47 +28,45 @@ https://github.com/mosip/mimoto - - 11 + UTF-8 - - 1.2.0.1-B1 - 1.2.0.1-B1 - 1.2.0.1-B1 - 1.2.0.1-B2 - 1.2.0.1-B1 + + 1.2.1-SNAPSHOT + 1.2.1-SNAPSHOT + 1.2.1-SNAPSHOT + 1.2.1-SNAPSHOT + 1.2.1-SNAPSHOT + 3.9.1 - - 11 - 11 + + 21 + 21 3.8.0 3.0.2 3.1.0 2.22.0 - 0.8.5 + 0.8.11 3.7.0.1746 - 3.0.1 + 3.6.3 - - 2.0.2.RELEASE + + 3.2.3 - + 2.1.210 - + 4.13.1 2.23.4 - 1.7.4 - 2.0.7 - + 1.2.3 - + 2.13.2 2.13.2.2 @@ -81,13 +74,12 @@ 2.2.10 20180813 - + 4.5.13 - 1.18.8 + 1.18.30 2.8.9 1.1.1 - 1.4.2 - 1.70 + 1.78.1 3.8.1 3.3.3 8.0.3 @@ -106,17 +98,37 @@ **/dto/**,**/entity/**,**/config/** + + + + io.mosip.kernel + kernel-bom + 1.2.1-SNAPSHOT + pom + import + + + + - io.micrometer - micrometer-core - ${io.micrometer.prometheus.version} - - - io.micrometer - micrometer-registry-prometheus - ${io.micrometer.prometheus.version} - + io.mosip.kernel + kernel-core + 1.2.1-SNAPSHOT + + + org.apache.logging.log4j + log4j-core + + + + io.micrometer + micrometer-core + + + io.micrometer + micrometer-registry-prometheus + io.springfox springfox-swagger2 @@ -129,8 +141,8 @@ org.springdoc - springdoc-openapi-ui - ${springdoc.version} + springdoc-openapi-starter-webmvc-ui + 2.5.0 org.springframework.boot @@ -162,6 +174,12 @@ org.springframework.boot spring-boot-starter-test + + + org.mockito + mockito-core + + test @@ -170,6 +188,10 @@ spring-boot-starter-data-jpa ${spring.boot.version} + + org.junit.vintage + junit-vintage-engine + @@ -187,7 +209,7 @@ io.mosip.kernel kernel-websubclient-api - ${mosip.kernel.core.version} + 1.2.1-SNAPSHOT @@ -200,18 +222,15 @@ org.projectlombok lombok - ${lombok.version} compile com.googlecode.json-simple json-simple - 1.1.1 org.json json - 20190722 com.google.code.gson @@ -277,9 +296,14 @@ commons-lang3 ${commons-lang3} + + commons-logging + commons-logging + 1.2 + org.bouncycastle - bcprov-jdk15on + bcprov-jdk18on ${bouncycastle.version} @@ -310,12 +334,14 @@ javax.activation activation - 1.1 + + + javax.servlet + javax.servlet-api org.glassfish.jaxb jaxb-runtime - 2.3.0-b170127.1453 com.itextpdf @@ -351,7 +377,6 @@ org.apache.httpcomponents httpclient - 4.5.13 org.mockito @@ -368,7 +393,6 @@ io.jsonwebtoken jjwt - ${jjwt-version} org.bitbucket.b_c @@ -393,24 +417,17 @@ ${kernel.biometrics.api.version} + + org.springframework + spring-core + 5.1.12.RELEASE + io.mosip.kernel kernel-cbeffutil-api ${kernel.cbeffutil.version} - - org.powermock - powermock-module-junit4 - ${powermock.beta.version} - test - - - org.powermock - powermock-api-mockito2 - ${powermock.beta.version} - test - @@ -448,7 +465,13 @@ ${skipTests} false - ${argLine} --add-opens java.xml/jdk.xml.internal=ALL-UNNAMED --illegal-access=permit + --add-opens java.xml/jdk.xml.internal=ALL-UNNAMED + --add-opens java.base/java.lang=ALL-UNNAMED + --add-opens java.base/sun.security.jca=ALL-UNNAMED + --add-opens java.base/sun.security.util=ALL-UNNAMED + --add-opens java.base/jdk.internal.util=ALL-UNNAMED + --add-opens java.base/java.util=ALL-UNNAMED + --add-opens java.base/java.time=ALL-UNNAMED diff --git a/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java b/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java index 86f024cc5..68d5a946c 100644 --- a/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java +++ b/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java @@ -22,6 +22,7 @@ @SpringBootApplication(scanBasePackages = { "io.mosip.mimoto.*", + "io.mosip.kernel.websub.*", "${mosip.auth.adapter.impl.basepackage}" }, exclude = { SecurityAutoConfiguration.class, diff --git a/src/main/java/io/mosip/mimoto/config/Config.java b/src/main/java/io/mosip/mimoto/config/Config.java index 3a089f41a..ec4fa0f8e 100644 --- a/src/main/java/io/mosip/mimoto/config/Config.java +++ b/src/main/java/io/mosip/mimoto/config/Config.java @@ -1,30 +1,31 @@ package io.mosip.mimoto.config; +import io.mosip.kernel.auth.defaultadapter.filter.AuthFilter; +import io.mosip.kernel.auth.defaultadapter.filter.CorsFilter; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.annotation.Order; -import org.springframework.scheduling.TaskScheduler; -import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; -import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; +import org.springframework.security.config.Customizer; +import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; -import io.mosip.kernel.auth.defaultadapter.filter.AuthFilter; -import io.mosip.kernel.auth.defaultadapter.filter.CorsFilter; import io.mosip.kernel.core.logger.spi.Logger; import io.mosip.mimoto.util.LoggerUtil; +import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; +import org.springframework.security.config.annotation.web.configurers.HeadersConfigurer; +import org.springframework.security.web.SecurityFilterChain; import java.util.HashMap; import java.util.Map; @Configuration @EnableWebSecurity -@EnableGlobalMethodSecurity(prePostEnabled = true) +@EnableMethodSecurity @Order(1) -public class Config extends WebSecurityConfigurerAdapter { +public class Config { private Logger logger = LoggerUtil.getLogger(Config.class); @Value("${mosipbox.public.url}") @@ -36,7 +37,7 @@ public class Config extends WebSecurityConfigurerAdapter { @Value("${mosip.security.cors-enable:false}") private boolean isCORSEnable; - @Value("${mosip.security.origins:localhost:8080}") + @Value("${mosip.security.origins:localhost:8088}") private String origins; @Bean @@ -45,28 +46,22 @@ public Map injiConfig() { return new HashMap<>(); } - @Override - protected void configure(HttpSecurity http) throws Exception { - + @Bean + public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { if (!isCSRFEnable) { - http = http.csrf().disable(); + http.csrf(AbstractHttpConfigurer::disable); } - // FIXME: web security is disabled for all enpoints - http.authorizeRequests().antMatchers("*").authenticated().anyRequest().permitAll().and().exceptionHandling(); if (isCORSEnable) { http.addFilterBefore(new CorsFilter(origins), AuthFilter.class); } - http.headers().cacheControl(); - http.headers().frameOptions().sameOrigin(); + http.headers(headersEntry -> { + headersEntry.cacheControl(Customizer.withDefaults()); + headersEntry.frameOptions(HeadersConfigurer.FrameOptionsConfig::sameOrigin); + }); - } + return http.build(); - @Bean - public TaskScheduler taskScheduler() { - ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler(); - threadPoolTaskScheduler.setPoolSize(5); - threadPoolTaskScheduler.setThreadNamePrefix("ThreadPoolTaskScheduler"); - return threadPoolTaskScheduler; } + } diff --git a/src/main/java/io/mosip/mimoto/config/SwaggerConfig.java b/src/main/java/io/mosip/mimoto/config/SwaggerConfig.java index 962b47964..9a7d6c827 100644 --- a/src/main/java/io/mosip/mimoto/config/SwaggerConfig.java +++ b/src/main/java/io/mosip/mimoto/config/SwaggerConfig.java @@ -7,7 +7,7 @@ import io.swagger.v3.oas.models.servers.Server; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springdoc.core.GroupedOpenApi; +import org.springdoc.core.models.GroupedOpenApi; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/src/main/java/io/mosip/mimoto/controller/CommonInjiController.java b/src/main/java/io/mosip/mimoto/controller/CommonInjiController.java index 588a5f32f..12d6ac913 100644 --- a/src/main/java/io/mosip/mimoto/controller/CommonInjiController.java +++ b/src/main/java/io/mosip/mimoto/controller/CommonInjiController.java @@ -3,14 +3,10 @@ import io.mosip.mimoto.core.http.ResponseWrapper; import io.mosip.mimoto.util.DateUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Bean; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; - -import java.util.HashMap; import java.util.Map; @RestController diff --git a/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java b/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java index 86eea8632..7a8f032db 100644 --- a/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java +++ b/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java @@ -166,7 +166,7 @@ public ResponseEntity request(@RequestBody AppCredentialRequestDTO reque */ @GetMapping(path = "/request/status/{requestId}", produces = MediaType.APPLICATION_JSON_VALUE) @SuppressWarnings("unchecked") - public ResponseEntity requestStatus(@PathVariable String requestId) + public ResponseEntity requestStatus(@PathVariable("requestId") String requestId) throws Exception { List pathSegment = new ArrayList(); diff --git a/src/main/java/io/mosip/mimoto/controller/IdpController.java b/src/main/java/io/mosip/mimoto/controller/IdpController.java index edf4797ed..46654c9d7 100644 --- a/src/main/java/io/mosip/mimoto/controller/IdpController.java +++ b/src/main/java/io/mosip/mimoto/controller/IdpController.java @@ -14,7 +14,6 @@ import io.mosip.mimoto.service.IdpService; import io.mosip.mimoto.service.IssuersService; import io.mosip.mimoto.service.RestClientService; -import io.mosip.mimoto.service.impl.IdpServiceImpl; import io.mosip.mimoto.util.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.*; @@ -107,13 +106,13 @@ public ResponseEntity request(@RequestBody WalletBindingRequestDTO reque } @PostMapping(value = {"/get-token/{issuer}"}, consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) - public ResponseEntity getToken(@RequestParam Map params, @PathVariable(required = false) String issuer) { + public ResponseEntity getToken(@RequestParam Map params, @PathVariable(required = true, name= "issuer") String issuer) { + logger.info("Reached the getToken Controller for Issuer " + issuer); - RestTemplate restTemplate = new RestTemplate(); try { IssuerDTO issuerDTO = issuersService.getIssuerConfig(issuer); HttpEntity> request = idpService.constructGetTokenRequest(params, issuerDTO); - TokenResponseDTO response = restTemplate.postForObject(idpService.getTokenEndpoint(issuerDTO), request, TokenResponseDTO.class); + TokenResponseDTO response = new RestTemplate().postForObject(idpService.getTokenEndpoint(issuerDTO), request, TokenResponseDTO.class); return ResponseEntity.status(HttpStatus.OK).body(response); } catch (Exception ex){ logger.error("Exception Occurred while Invoking the Token Endpoint : ", ex); diff --git a/src/main/java/io/mosip/mimoto/controller/IssuersController.java b/src/main/java/io/mosip/mimoto/controller/IssuersController.java index 9c76090e1..3f078b601 100644 --- a/src/main/java/io/mosip/mimoto/controller/IssuersController.java +++ b/src/main/java/io/mosip/mimoto/controller/IssuersController.java @@ -36,12 +36,13 @@ public class IssuersController { @Autowired CredentialService credentialService; + private static final String ID = "mosip.mimoto.issuers"; private final Logger logger = LoggerFactory.getLogger(IssuersController.class); @GetMapping() - public ResponseEntity getAllIssuers(@RequestParam(required = false) String search) { + public ResponseEntity getAllIssuers(@RequestParam(required = false, name = "search") String search) { ResponseWrapper responseWrapper = new ResponseWrapper<>(); responseWrapper.setId(ID); responseWrapper.setVersion("v1"); @@ -97,7 +98,7 @@ public ResponseEntity getIssuerConfig(@PathVariable("issuer-id") String @GetMapping("/{issuer-id}/credentialTypes") public ResponseEntity getCredentialTypes(@PathVariable("issuer-id") String issuerId, - @RequestParam(required = false) String search) { + @RequestParam(required = false, name = "search") String search) { ResponseWrapper responseWrapper = new ResponseWrapper<>(); responseWrapper.setId(ID); responseWrapper.setVersion("v1"); diff --git a/src/main/java/io/mosip/mimoto/controller/PresentationController.java b/src/main/java/io/mosip/mimoto/controller/PresentationController.java index f08094d02..3e6332a20 100644 --- a/src/main/java/io/mosip/mimoto/controller/PresentationController.java +++ b/src/main/java/io/mosip/mimoto/controller/PresentationController.java @@ -4,7 +4,6 @@ import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.VPNotCreatedException; import io.mosip.mimoto.service.PresentationService; -import io.mosip.mimoto.service.impl.PresentationServiceImpl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/src/main/java/io/mosip/mimoto/core/http/RequestWrapper.java b/src/main/java/io/mosip/mimoto/core/http/RequestWrapper.java index d9a0b2c9f..f0482c081 100644 --- a/src/main/java/io/mosip/mimoto/core/http/RequestWrapper.java +++ b/src/main/java/io/mosip/mimoto/core/http/RequestWrapper.java @@ -1,7 +1,7 @@ package io.mosip.mimoto.core.http; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import lombok.Data; diff --git a/src/main/java/io/mosip/mimoto/dto/AuditRequestDto.java b/src/main/java/io/mosip/mimoto/dto/AuditRequestDto.java index 611fbd491..0259fa928 100644 --- a/src/main/java/io/mosip/mimoto/dto/AuditRequestDto.java +++ b/src/main/java/io/mosip/mimoto/dto/AuditRequestDto.java @@ -1,7 +1,7 @@ package io.mosip.mimoto.dto; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/src/main/java/io/mosip/mimoto/dto/DisplayDTO.java b/src/main/java/io/mosip/mimoto/dto/DisplayDTO.java index 515893e95..17dc858c6 100644 --- a/src/main/java/io/mosip/mimoto/dto/DisplayDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/DisplayDTO.java @@ -3,8 +3,8 @@ import com.google.gson.annotations.Expose; import lombok.Data; -import javax.validation.Valid; -import javax.validation.constraints.NotBlank; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; @Data public class DisplayDTO { diff --git a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java index 0648ca07f..7d731a491 100644 --- a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java @@ -6,9 +6,9 @@ import com.google.gson.annotations.SerializedName; import lombok.Data; -import javax.validation.Valid; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotEmpty; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; import java.util.List; import java.util.Map; diff --git a/src/main/java/io/mosip/mimoto/dto/IssuersDTO.java b/src/main/java/io/mosip/mimoto/dto/IssuersDTO.java index 1d24101cd..5b7dcbe07 100644 --- a/src/main/java/io/mosip/mimoto/dto/IssuersDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/IssuersDTO.java @@ -3,7 +3,7 @@ import com.google.gson.annotations.Expose; import lombok.Data; -import javax.validation.Valid; +import jakarta.validation.Valid; import java.util.List; @Data diff --git a/src/main/java/io/mosip/mimoto/dto/LogoDTO.java b/src/main/java/io/mosip/mimoto/dto/LogoDTO.java index 987f267d9..89697d796 100644 --- a/src/main/java/io/mosip/mimoto/dto/LogoDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/LogoDTO.java @@ -4,7 +4,7 @@ import com.google.gson.annotations.Expose; import lombok.Data; -import javax.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotBlank; @Data public class LogoDTO { diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialSupportedDisplayResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialSupportedDisplayResponse.java index 5dea516e3..5aa71fb6b 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialSupportedDisplayResponse.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialSupportedDisplayResponse.java @@ -6,8 +6,8 @@ import io.mosip.mimoto.dto.LogoDTO; import lombok.Data; -import javax.validation.Valid; -import javax.validation.constraints.NotBlank; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; import java.util.Map; @Data diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java index dcf2b2030..59aaa3530 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java @@ -24,4 +24,5 @@ public class CredentialsSupportedResponse { @SerializedName("display") @JsonProperty("display") private List display; + private Set order; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialRequestProof.java b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialRequestProof.java index 2c1f1635e..d665d0c5e 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialRequestProof.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialRequestProof.java @@ -4,7 +4,7 @@ import lombok.Builder; import lombok.Data; -import javax.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotBlank; @Data @Builder diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponse.java index 19ba9972a..602345597 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponse.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponse.java @@ -5,9 +5,9 @@ import lombok.Data; import lombok.NoArgsConstructor; -import javax.validation.Valid; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; @Data @NoArgsConstructor diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponseProof.java b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponseProof.java index 8c52fdf86..455a61120 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponseProof.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponseProof.java @@ -6,7 +6,7 @@ import lombok.Data; import lombok.NoArgsConstructor; -import javax.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotBlank; @Data @NoArgsConstructor diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 8e6c0bebf..47ee1337e 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -203,7 +203,6 @@ wallet.binding.partner.api.key=Aci9jg28B8mO_LDfDXo3ZTp5_HKgEMun2tYyHCa1e8k mosip.openid.issuers=mimoto-issuers-config.json mosip.openid.verifiers=mimoto-trusted-verifiers.json mosip.openid.htmlTemplate=credential-template.html -#configurations related to openid4vc mosip.oidc.client.assertion.type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer mosip.oidc.p12.filename=oidckeystore.p12 mosip.oidc.p12.password=password diff --git a/src/main/resources/keystore.p12 b/src/main/resources/keystore.p12 deleted file mode 100644 index 5d5fd9a2e908f3bbf387ff74fa019696beca1720..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4380 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 Ju76A1e*wr&PZj_G diff --git a/src/main/resources/templates/CredentialTemplate.html b/src/main/resources/templates/CredentialTemplate.html new file mode 100644 index 000000000..e69de29bb diff --git a/src/test/java/io/mosip/mimoto/TestBootApplication.java b/src/test/java/io/mosip/mimoto/TestBootApplication.java index 1fb6fc606..9d690a1aa 100644 --- a/src/test/java/io/mosip/mimoto/TestBootApplication.java +++ b/src/test/java/io/mosip/mimoto/TestBootApplication.java @@ -4,11 +4,9 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication(scanBasePackages = "io.mosip.mimoto.*") -//@Profile("test") -//@Import(TestSecurityConfig.class) public class TestBootApplication { public static void main(String[] args) { SpringApplication.run(TestBootApplication.class, args); } -} \ No newline at end of file +} diff --git a/src/test/java/io/mosip/mimoto/config/MimotoConfig.java b/src/test/java/io/mosip/mimoto/config/MimotoConfig.java index f799097be..d303b0231 100644 --- a/src/test/java/io/mosip/mimoto/config/MimotoConfig.java +++ b/src/test/java/io/mosip/mimoto/config/MimotoConfig.java @@ -1,16 +1,25 @@ package io.mosip.mimoto.config; -import org.apache.http.conn.ssl.SSLConnectionSocketFactory; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClients; -import org.apache.http.ssl.TrustStrategy; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.FilterType; +import org.apache.hc.client5.http.classic.HttpClient; +import org.apache.hc.client5.http.impl.classic.HttpClientBuilder; +import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager; +import org.apache.hc.client5.http.socket.ConnectionSocketFactory; +import org.apache.hc.client5.http.socket.PlainConnectionSocketFactory; +import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory; +import org.apache.hc.core5.http.URIScheme; +import org.apache.hc.core5.http.config.Registry; +import org.apache.hc.core5.http.config.RegistryBuilder; +import org.apache.hc.core5.ssl.SSLContextBuilder; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.*; +import org.springframework.http.client.ClientHttpRequestFactory; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; +import org.springframework.security.config.Customizer; import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; +import org.springframework.security.config.annotation.web.configurers.ExceptionHandlingConfigurer; +import org.springframework.security.config.annotation.web.configurers.HeadersConfigurer; +import org.springframework.security.web.SecurityFilterChain; import org.springframework.web.client.RestTemplate; import javax.net.ssl.SSLContext; @@ -21,37 +30,47 @@ import java.util.HashMap; import java.util.Map; + @Configuration @ComponentScan(basePackages = { "io.mosip.mimoto.*" }, excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = { Config.class, OpenApiProperties.class, SwaggerConfig.class})) -public class MimotoConfig extends WebSecurityConfigurerAdapter { - - @Override - protected void configure(HttpSecurity http) throws Exception { - http = http.csrf().disable(); - http.authorizeRequests().antMatchers("*").authenticated().anyRequest().permitAll().and().exceptionHandling(); - http.headers().cacheControl(); - http.headers().frameOptions().sameOrigin(); +public class MimotoConfig { + @Bean + public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { + http.csrf(AbstractHttpConfigurer::disable); + http.headers(headersEntry -> { + headersEntry.cacheControl(Customizer.withDefaults()); + headersEntry.frameOptions(HeadersConfigurer.FrameOptionsConfig::sameOrigin); + }); + + return http.build(); } @Bean public RestTemplate selfTokenRestTemplate() throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException { - TrustStrategy acceptingTrustStrategy = (X509Certificate[] chain, String authType) -> true; + final RestTemplate restTemplate = new RestTemplate(); - SSLContext sslContext = org.apache.http.ssl.SSLContexts.custom().loadTrustMaterial(null, acceptingTrustStrategy) + SSLContext sslContext = SSLContextBuilder.create() + .loadTrustMaterial((X509Certificate[] certificateChain, String authType) -> true) // <--- accepts each certificate .build(); - SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext); + Registry socketRegistry = RegistryBuilder.create() + .register(URIScheme.HTTPS.getId(), new SSLConnectionSocketFactory(sslContext)) + .register(URIScheme.HTTP.getId(), new PlainConnectionSocketFactory()) + .build(); - CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(csf).build(); - HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(); + HttpClient httpClient = HttpClientBuilder.create() + .setConnectionManager(new PoolingHttpClientConnectionManager(socketRegistry)) + .setConnectionManagerShared(true) + .build(); - requestFactory.setHttpClient(httpClient); - return new RestTemplate(requestFactory); + ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient); + restTemplate.setRequestFactory(requestFactory); + return restTemplate; } @@ -59,23 +78,30 @@ public RestTemplate selfTokenRestTemplate() public RestTemplate plainRestTemplate() throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException { - TrustStrategy acceptingTrustStrategy = (X509Certificate[] chain, String authType) -> true; + final RestTemplate restTemplate = new RestTemplate(); - SSLContext sslContext = org.apache.http.ssl.SSLContexts.custom().loadTrustMaterial(null, acceptingTrustStrategy) + SSLContext sslContext = SSLContextBuilder.create() + .loadTrustMaterial((X509Certificate[] certificateChain, String authType) -> true) // <--- accepts each certificate .build(); - SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext); + Registry socketRegistry = RegistryBuilder.create() + .register(URIScheme.HTTPS.getId(), new SSLConnectionSocketFactory(sslContext)) + .register(URIScheme.HTTP.getId(), new PlainConnectionSocketFactory()) + .build(); - CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(csf).build(); - HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(); + HttpClient httpClient = HttpClientBuilder.create() + .setConnectionManager(new PoolingHttpClientConnectionManager(socketRegistry)) + .setConnectionManagerShared(true) + .build(); - requestFactory.setHttpClient(httpClient); - return new RestTemplate(requestFactory); + ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient); + restTemplate.setRequestFactory(requestFactory); + return restTemplate; } - @Bean + @ConfigurationProperties(prefix = "mosip.inji") public Map injiConfig() { return new HashMap<>(); } diff --git a/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java b/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java index d23a45ad5..6c6f3e34e 100644 --- a/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java @@ -28,9 +28,9 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentMatchers; -import org.mockito.InjectMocks; import org.mockito.Mockito; -import org.powermock.core.classloader.annotations.PrepareForTest; +import org.skyscreamer.jsonassert.JSONAssert; +import org.skyscreamer.jsonassert.JSONCompareMode; import org.skyscreamer.jsonassert.JSONAssert; import org.skyscreamer.jsonassert.JSONCompareMode; import org.springframework.beans.factory.annotation.Autowired; @@ -39,7 +39,6 @@ import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.http.MediaType; import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.test.util.ReflectionTestUtils; import org.springframework.test.web.servlet.MockMvc; import org.springframework.util.ResourceUtils; @@ -65,18 +64,8 @@ @RunWith(SpringRunner.class) @SpringBootTest(classes = TestBootApplication.class) @AutoConfigureMockMvc -@PrepareForTest({Files.class}) public class InjiControllerTest { - @InjectMocks - private CommonInjiController commonInjiController = new CommonInjiController(); - - @InjectMocks - private CredentialShareController credentialShareController = new CredentialShareController(); - - @MockBean - private Map injiConfig; - @MockBean private CbeffUtil cbeffUtil; @@ -103,6 +92,7 @@ public class InjiControllerTest { @Autowired IssuersController issuersController; + @MockBean private AttestationOfflineVerify attestationOfflineVerify; @@ -116,19 +106,7 @@ public class InjiControllerTest { public CryptoCoreUtil cryptoCoreUtil; @Before - public void setup() throws IOException { - //PowerMockito.mockStatic(Files.class); - //PowerMockito.doNothing().when(Files.write(Mockito.any(Path.class), Mockito.any(byte[].class))); - - Map injiConfig = new HashMap<>(); - injiConfig.put("datashareUrl", "http://www.mosipdatashare.com"); - - ReflectionTestUtils.setField(commonInjiController, "injiConfig", injiConfig); - ReflectionTestUtils.setField(credentialShareController, "partnerEncryptionKey", "partnerkey"); - ReflectionTestUtils.setField(credentialShareController, "partnerId", "partnerId"); - ReflectionTestUtils.setField(credentialShareController, "topic", "topic"); - - + public void setup() { Mockito.when(utilities.getDataPath()).thenReturn("target"); Mockito.when(webSubSubscriptionHelper.subscribeEvent(Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(new SubscriptionChangeResponse()); @@ -139,8 +117,18 @@ public void setup() throws IOException { @Test public void getAllPropertiesTest() throws Exception { - this.mockMvc.perform(get("/allProperties").accept(MediaType.APPLICATION_JSON_VALUE)) - .andExpect(status().isOk()); + File file = ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX + "responses/InjiConfig.json"); + String expectedResponse = new String(Files.readAllBytes(file.toPath())); + + String actualResponse = this.mockMvc.perform(get("/allProperties") + .accept(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isOk()) + .andReturn() + .getResponse() + .getContentAsString(); + + JSONAssert.assertEquals(expectedResponse, actualResponse, JSONCompareMode.LENIENT); + } diff --git a/src/test/java/io/mosip/mimoto/service/CredentialShareServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialShareServiceTest.java index 1de866d3d..d96a80957 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialShareServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialShareServiceTest.java @@ -8,7 +8,6 @@ import io.mosip.mimoto.core.http.ResponseWrapper; import io.mosip.mimoto.dto.AuditResponseDto; import io.mosip.mimoto.dto.CryptoWithPinResponseDto; -import io.mosip.mimoto.exception.DocumentGeneratorException; import io.mosip.mimoto.model.Event; import io.mosip.mimoto.model.EventModel; import io.mosip.mimoto.service.impl.CredentialShareServiceImpl; @@ -21,10 +20,7 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PowerMockIgnore; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; +import org.mockito.junit.MockitoJUnitRunner; import java.net.URI; import java.security.InvalidKeyException; @@ -35,9 +31,7 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; -@RunWith(PowerMockRunner.class) -@PrepareForTest({ URI.class, org.json.JSONObject.class, CommonUtil.class}) -@PowerMockIgnore({ "javax.management.*", "javax.net.ssl.*","com.sun.org.apache.xerces.*", "javax.xml.*", "org.xml.*", "javax.management.*" }) +@RunWith(MockitoJUnitRunner.class) public class CredentialShareServiceTest { @InjectMocks @@ -106,14 +100,6 @@ public void setup() throws Exception { Mockito.when(util.getBIRTypeList(Mockito.anyString())).thenReturn(birs); Mockito.when(util.getPhotoByTypeAndSubType(Mockito.any(), Mockito.any(), Mockito.any())).thenReturn("face image strring".getBytes()); - PowerMockito.mockStatic(CommonUtil.class); - Mockito.when(CommonUtil.convertJP2ToJPEGBytes(Mockito.any(byte[].class))).thenReturn(("VkVSX1IyUePARBpE1-kwFG3i9AXxWsH67-sAbyvWC1joGfw-QgFjLTgLRCwUrzaPC0_K1NuXl" + - "t_TNHNyGu0aAcyqMe3zbBBgZXiP0sImJ0OjjkdbpjBdO_BGyWpLsz-T5eW3luz2RILFSKpDtTwDAVJ8y2jsSONgWDUza14cglCHvt9MT6UWv18oYJ8uCw2Aqx3Pf3Op" + - "9P3HJd_32G03U6HhrHD9AVRCon9R2Uh2IYgUmn8zwKozC7bWoGqO74LCYt15zsmYTvJg9v9zqVUAPxrPvo5VVJmbKm_kP8ZPtkslnPte_EML4wkVvZDPpa7D6H3aIn-t" + - "2l8G7w8zWRwnTjrQqBn_fmTS43cabLyr3Vc2RmVd0LOX_LXuikS-n5gEjy-Xw6Yc-xAZb0F_spB2Q_ihAi9Ej2FMAXa1Why1MYp0jNCK1FIyTns5S9oc7bonaaK5Zo1aqkut" + - "v_I2wWvYKOR2UxXLmfPzgcjFDVpnIG3hDSGn-1Oat2liFgKBM_cBQvapPyMgqE3CokFI6DAvBeHJrOgtR1k5m4JuRsqwtrzf3_PCBFHW6jkEjYm9VJc5zBgAFi-0KiZoRF" + - "a-XG4L3ZCA42gOfTAlQ6iVq0_3M5uxi4BdSkr1Cyr0CBHZgAivU5vyajLbnvvJVlbDpGb_T3LqG7l7oBVvo9zq74QbQFKOaKwzJn9432_yD4DG2qOHBPnOmyopfxaSSoosM" + - "1qmDxC9CaE2zVWDjmJdPk630AkKJhvNmMJJXxkeZnvsGg5QsjP4_i2isLg63kjhb2MtNtgN0uCUsXNbqEyb3kJAVvM34KGR1bsmO5Zowq_yKenNCFm68zNWm05pFMW0_4").getBytes()); } @Test diff --git a/src/test/resources/application-test.properties b/src/test/resources/application-test.properties new file mode 100644 index 000000000..ce816f041 --- /dev/null +++ b/src/test/resources/application-test.properties @@ -0,0 +1,24 @@ +# MOSIP partner + +mosip.partner.id=partnerId +mosip.partner.encryption.key=partnerkey +mosip.event.topic=topic + +mosip.inji.allowedAuthType=demo,otp,bio-Finger,bio-Iris,bio-Face +mosip.inji.allowedEkycAuthType=demo,otp,bio-Finger,bio-Iris,bio-Face +mosip.inji.allowedInternalAuthType=otp,bio-Finger,bio-Iris,bio-Face +mosip.inji.vcDownloadMaxRetry=10 +mosip.inji.vcDownloadPoolInterval=6000 +mosip.inji.issuer=residentapp +mosip.inji.openId4VCIDownloadVCTimeout=30000 + +mosipbox.public.url=https://api.dev1.mosip.net +public.url=https://api.dev1.mosip.net + +mosip.oidc.client.assertion.type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer +mosip.oidc.p12.filename=oidckeystore.p12 +mosip.oidc.p12.password=5YBx6QT2wbY8Ls6w +mosip.oidc.p12.path=certs/ + +mosip.inji.verify.redirect.url=%s#vp_token=%s&presentation_submission=%s +mosip.data.share.url=https://api-internal.dev.mosip.net/v1/datashare/create/static-policyid/static-subscriberid diff --git a/src/test/resources/bootstrap.properties b/src/test/resources/bootstrap.properties new file mode 100644 index 000000000..99c082bf4 --- /dev/null +++ b/src/test/resources/bootstrap.properties @@ -0,0 +1,21 @@ +spring.cloud.config.uri=localhost +spring.cloud.config.label=develop +spring.profiles.active=test +spring.cloud.config.name=mimoto,inji +spring.application.name=mimoto +spring.main.allow-bean-definition-overriding=true + +server.port=8088 +server.servlet.context-path=/v1/mimoto + +openapi.info.title=${spring.application.name} +openapi.info.description=${spring.application.name} +openapi.info.version=1.0 +openapi.info.license.name=Mosip +openapi.info.license.url=https://docs.mosip.io/platform/license +mosipbox.public.url=http://localhost:${server.port} +openapi.service.servers[0].url=${mosipbox.public.url}${server.servlet.context-path} +openapi.service.servers[0].description=${spring.application.name} +openapi.group.name=${openapi.info.title} +openapi.group.paths[0]=/** + diff --git a/src/test/resources/responses/InjiConfig.json b/src/test/resources/responses/InjiConfig.json new file mode 100644 index 000000000..c2d957370 --- /dev/null +++ b/src/test/resources/responses/InjiConfig.json @@ -0,0 +1,16 @@ +{ + "id": "mosip.inji.properties", + "version": "v1", + "str": null, + "metadata": null, + "response": { + "allowedAuthType": "demo,otp,bio-Finger,bio-Iris,bio-Face", + "allowedEkycAuthType": "demo,otp,bio-Finger,bio-Iris,bio-Face", + "allowedInternalAuthType": "otp,bio-Finger,bio-Iris,bio-Face", + "openId4VCIDownloadVCTimeout": "30000", + "vcDownloadMaxRetry": "10", + "vcDownloadPoolInterval": "6000", + "issuer": "residentapp" + }, + "errors": [] +} From d5daf7a3720c8d78f9cc2105bd6bccb4a0ff3005 Mon Sep 17 00:00:00 2001 From: Swati Goel Date: Thu, 25 Jul 2024 19:07:37 +0530 Subject: [PATCH 192/860] [INJIMOB-1666] Use /v1/mimoto uri for all mimoto apis (#343) * [INJIMOB-1666] - use /v1/mimoto for mimoto apis. Signed-off-by: Swati Goel * [INJIMOB-1666] - use /v1/mimoto for api tests Signed-off-by: Swati Goel --------- Signed-off-by: Swati Goel --- .../main/resources/config/Kernel.properties | 2 +- .../AidGetIndividualId/AidGetIndividualId.yml | 20 +- .../mimoto/AuthLock/createAuthLock.yml | 24 +- .../mimoto/AuthUnLock/createAuthUnLock.yml | 16 +- .../mimoto/BindingOtp/BindingOtp.yml | 72 ++-- .../CredentialCheckStatus.yml | 6 +- .../DownloadCredential/DownloadCredential.yml | 6 +- .../DownloadWithReqid/DownloadWithReqid.yml | 4 +- .../RequestCredentials/ReqCredential.yml | 24 +- .../DownloadIssuerCredential.yml | 12 +- .../mimoto/GenerateVID/createGenerateVID.yml | 24 +- .../GetAllCredentialTypes.yml | 6 +- .../mimoto/GetAllIssuers/GetAllIssuers.yml | 6 +- .../resources/mimoto/SendOTP1/SendOTP.yml | 2 +- .../mimoto/SendOTPUIN/createSendOTP.yml | 2 +- .../mimoto/WalletBinding/WalletBinding.yml | 312 +++++++++--------- docker-compose/README.md | 8 +- .../config/mimoto-default.properties | 2 +- .../config/mimoto-issuers-config.json | 4 +- .../Collab.postman_environment.json | 2 +- src/main/resources/mimoto-issuers-config.json | 4 +- 21 files changed, 279 insertions(+), 279 deletions(-) diff --git a/apitest/src/main/resources/config/Kernel.properties b/apitest/src/main/resources/config/Kernel.properties index eb800a2e0..f90e39c57 100644 --- a/apitest/src/main/resources/config/Kernel.properties +++ b/apitest/src/main/resources/config/Kernel.properties @@ -101,7 +101,7 @@ auditActuatorEndpoint=/v1/auditmanager/actuator/info validateBindingEndpoint=ida-binding esignetWellKnownEndPoint=/v1/esignet/oidc/.well-known/openid-configuration signupSettingsEndPoint=/v1/signup/settings -actuatorMimotoEndpoint=/residentmobileapp/actuator/env +actuatorMimotoEndpoint=/v1/mimoto/actuator/env diff --git a/apitest/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml b/apitest/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml index b778650a1..84abc6d1b 100644 --- a/apitest/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml +++ b/apitest/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml @@ -1,6 +1,6 @@ AidGetIndividualId: Mimoto_AidGetIndividualId_Getting_With_Valid_UIN_All: - endPoint: /residentmobileapp/aid/get-individual-id + endPoint: /v1/mimoto/aid/get-individual-id role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -14,7 +14,7 @@ AidGetIndividualId: "aid": "$ID:AddIdentity_withValidParameters_smoke_Pos_RID$", "transactionID": "$TRANSACTIONID$", "sendOtpReqTemplate": "mimoto/SendOTPUIN/individualIdOtp", - "sendOtpEndPoint": "/residentmobileapp/req/individualId/otp" + "sendOtpEndPoint": "/v1/mimoto/req/individualId/otp" } }' output: '{ @@ -25,7 +25,7 @@ AidGetIndividualId: }' Mimoto_AidGetIndividualId_Getting_With_Invalid_AID_Neg: - endPoint: /residentmobileapp/aid/get-individual-id + endPoint: /v1/mimoto/aid/get-individual-id role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -39,7 +39,7 @@ AidGetIndividualId: "aid": "$ID:AddIdentity_withValidParameters_smoke_Pos_RID$", "transactionID": "$TRANSACTIONID$", "sendOtpReqTemplate": "mimoto/SendOTPUIN/individualIdOtp", - "sendOtpEndPoint": "/residentmobileapp/req/individualId/otp" + "sendOtpEndPoint": "/v1/mimoto/req/individualId/otp" } }' output: '{ @@ -54,7 +54,7 @@ AidGetIndividualId: }' Mimoto_AidGetIndividualId_Getting_With_Invalid_Otp_Neg: - endPoint: /residentmobileapp/aid/get-individual-id + endPoint: /v1/mimoto/aid/get-individual-id role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -68,7 +68,7 @@ AidGetIndividualId: "aid": "$ID:AddIdentity_withValidParameters_smoke_Pos_RID$", "transactionID": "$TRANSACTIONID$", "sendOtpReqTemplate": "mimoto/SendOTPUIN/individualIdOtp", - "sendOtpEndPoint": "/residentmobileapp/req/individualId/otp" + "sendOtpEndPoint": "/v1/mimoto/req/individualId/otp" } }' output: '{ @@ -83,7 +83,7 @@ AidGetIndividualId: }' Mimoto_AidGetIndividualId_Getting_With_Valid_Otp_All: - endPoint: /residentmobileapp/aid/get-individual-id + endPoint: /v1/mimoto/aid/get-individual-id role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -97,7 +97,7 @@ AidGetIndividualId: "aid": "$ID:AddIdentity_withValidParameters_smoke_Pos_RID$", "transactionID": "$TRANSACTIONID$", "sendOtpReqTemplate": "mimoto/SendOTPUIN/individualIdOtp", - "sendOtpEndPoint": "/residentmobileapp/req/individualId/otp" + "sendOtpEndPoint": "/v1/mimoto/req/individualId/otp" } }' output: '{ @@ -108,7 +108,7 @@ AidGetIndividualId: }' Mimoto_AidGetIndividualId_Getting_With_Invalid_lenght_Of_AID_Neg: - endPoint: /residentmobileapp/aid/get-individual-id + endPoint: /v1/mimoto/aid/get-individual-id role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -122,7 +122,7 @@ AidGetIndividualId: "aid": "$ID:AddIdentity_withValidParameters_smoke_Pos_RID$", "transactionID": "$TRANSACTIONID$", "sendOtpReqTemplate": "mimoto/SendOTPUIN/individualIdOtp", - "sendOtpEndPoint": "/residentmobileapp/req/individualId/otp" + "sendOtpEndPoint": "/v1/mimoto/req/individualId/otp" } }' output: '{ diff --git a/apitest/src/main/resources/mimoto/AuthLock/createAuthLock.yml b/apitest/src/main/resources/mimoto/AuthLock/createAuthLock.yml index 533b98724..8cdcce921 100644 --- a/apitest/src/main/resources/mimoto/AuthLock/createAuthLock.yml +++ b/apitest/src/main/resources/mimoto/AuthLock/createAuthLock.yml @@ -1,6 +1,6 @@ AuthLock: Mimoto_AuthLock_Valid_UIN_All: - endPoint: /residentmobileapp/req/auth/lock + endPoint: /v1/mimoto/req/auth/lock role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -18,7 +18,7 @@ AuthLock: "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", "individualIdType": "UIN", "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", - "sendOtpEndPoint": "/residentmobileapp/req/otp" + "sendOtpEndPoint": "/v1/mimoto/req/otp" } }' output: '{ @@ -27,7 +27,7 @@ AuthLock: } }' Mimoto_AuthLock_InValid_Otp_All: - endPoint: /residentmobileapp/req/auth/lock + endPoint: /v1/mimoto/req/auth/lock role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -45,7 +45,7 @@ AuthLock: "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", "individualIdType": "UIN", "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", - "sendOtpEndPoint": "/residentmobileapp/req/otp" + "sendOtpEndPoint": "/v1/mimoto/req/otp" } }' output: '{ @@ -59,7 +59,7 @@ AuthLock: } }' Mimoto_AuthLock_with_invalidUIN_Valid_Otp_sid: - endPoint: /residentmobileapp/req/auth/lock + endPoint: /v1/mimoto/req/auth/lock role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -77,7 +77,7 @@ AuthLock: "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", "individualIdType": "UIN", "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", - "sendOtpEndPoint": "/residentmobileapp/req/otp" + "sendOtpEndPoint": "/v1/mimoto/req/otp" } }' output: '{ @@ -91,7 +91,7 @@ AuthLock: } }' Mimoto_AuthLock_Valid_VID_All: - endPoint: /residentmobileapp/req/auth/lock + endPoint: /v1/mimoto/req/auth/lock role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -109,7 +109,7 @@ AuthLock: "individualId": "$ID:Generate_Perpetual_VID_Valid_Smoke_sid_vid$", "individualIdType": "VID", "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", - "sendOtpEndPoint": "/residentmobileapp/req/otp" + "sendOtpEndPoint": "/v1/mimoto/req/otp" } }' output: '{ @@ -118,7 +118,7 @@ AuthLock: } }' Mimoto_AuthLock_with_invalidVID_Valid_Otp: - endPoint: /residentmobileapp/req/auth/lock + endPoint: /v1/mimoto/req/auth/lock role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -136,7 +136,7 @@ AuthLock: "individualId": "$ID:Generate_Perpetual_VID_Valid_Smoke_sid_vid$", "individualIdType": "VID", "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", - "sendOtpEndPoint": "/residentmobileapp/req/otp" + "sendOtpEndPoint": "/v1/mimoto/req/otp" } }' output: '{ @@ -150,7 +150,7 @@ AuthLock: } }' Mimoto_AuthLock_invalidVID_Valid_Otp: - endPoint: /residentmobileapp/req/auth/lock + endPoint: /v1/mimoto/req/auth/lock role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -168,7 +168,7 @@ AuthLock: "individualId": "$ID:Generate_Perpetual_VID_Valid_Smoke_sid_vid$", "individualIdType": "VID", "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", - "sendOtpEndPoint": "/residentmobileapp/req/otp" + "sendOtpEndPoint": "/v1/mimoto/req/otp" } }' output: '{ diff --git a/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml b/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml index 9fe7af39f..73096d086 100644 --- a/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml +++ b/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml @@ -1,6 +1,6 @@ AuthUnlock: Mimoto_AuthUnLock_Valid_UIN_All: - endPoint: /residentmobileapp/req/auth/unlock + endPoint: /v1/mimoto/req/auth/unlock role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -19,7 +19,7 @@ AuthUnlock: "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", "individualIdType": "UIN", "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", - "sendOtpEndPoint": "/residentmobileapp/req/otp" + "sendOtpEndPoint": "/v1/mimoto/req/otp" } }' output: '{ @@ -28,7 +28,7 @@ AuthUnlock: } }' Mimoto_AuthUnLock_Valid_UIN_With_VID_All: - endPoint: /residentmobileapp/req/auth/unlock + endPoint: /v1/mimoto/req/auth/unlock role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -47,7 +47,7 @@ AuthUnlock: "individualId": "$ID:Generate_Perpetual_VID_Valid_Smoke_sid_vid$", "individualIdType": "VID", "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", - "sendOtpEndPoint": "/residentmobileapp/req/otp" + "sendOtpEndPoint": "/v1/mimoto/req/otp" } }' output: '{ @@ -56,7 +56,7 @@ AuthUnlock: } }' Mimoto_AuthUnLock_With_InValid_OTP_All: - endPoint: /residentmobileapp/req/auth/unlock + endPoint: /v1/mimoto/req/auth/unlock role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -75,7 +75,7 @@ AuthUnlock: "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", "individualIdType": "UIN", "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", - "sendOtpEndPoint": "/residentmobileapp/req/otp" + "sendOtpEndPoint": "/v1/mimoto/req/otp" } }' output: '{ @@ -89,7 +89,7 @@ AuthUnlock: } }' Mimoto_AuthUnLock_InValid_OTP_With_VID_All: - endPoint: /residentmobileapp/req/auth/unlock + endPoint: /v1/mimoto/req/auth/unlock role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -108,7 +108,7 @@ AuthUnlock: "individualId": "$ID:Generate_Perpetual_VID_Valid_Smoke_sid_vid$", "individualIdType": "VID", "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", - "sendOtpEndPoint": "/residentmobileapp/req/otp" + "sendOtpEndPoint": "/v1/mimoto/req/otp" } }' output: '{ diff --git a/apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.yml b/apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.yml index 8d63d2a9b..386d1bb7b 100644 --- a/apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.yml +++ b/apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.yml @@ -1,6 +1,6 @@ BindingOtp: Mimoto_BindingOtp_Valid_UIN_All_Smoke: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -17,7 +17,7 @@ BindingOtp: }' Mimoto_BindingOtp_Valid_vid_All_Smoke: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -34,7 +34,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Invalid_individualId_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp role: resident restMethod: post validityCheckRequired: true @@ -54,7 +54,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Missing_individualId_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp role: resident restMethod: post validityCheckRequired: true @@ -74,7 +74,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Empty_individualId_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp role: resident restMethod: post validityCheckRequired: true @@ -94,7 +94,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Null_individualId_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp role: resident restMethod: post validityCheckRequired: true @@ -114,7 +114,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_SpaceSeparated_otpChannels_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp role: resident restMethod: post validityCheckRequired: true @@ -134,7 +134,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Invalid_OtpChannels_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp role: resident restMethod: post validityCheckRequired: true @@ -154,7 +154,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Missing_OtpChannels_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp role: resident restMethod: post validityCheckRequired: true @@ -174,7 +174,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Empty_OtpChannels_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp role: resident restMethod: post validityCheckRequired: true @@ -194,7 +194,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Null_OtpChannels_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp role: resident restMethod: post validityCheckRequired: true @@ -214,7 +214,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Missing_OtpChannel_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp role: resident restMethod: post validityCheckRequired: true @@ -234,7 +234,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Empty_OtpChannel_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp role: resident restMethod: post validityCheckRequired: true @@ -254,7 +254,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Null_OtpChannel_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp role: resident restMethod: post validityCheckRequired: true @@ -274,7 +274,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Invalid_RequestTime_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp role: resident restMethod: post validityCheckRequired: true @@ -294,7 +294,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Past_RequestTime_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp role: resident restMethod: post validityCheckRequired: true @@ -314,7 +314,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Future_RequestTime_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp role: resident restMethod: post validityCheckRequired: true @@ -334,7 +334,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Missing_RequestTime_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp role: resident restMethod: post validityCheckRequired: true @@ -354,7 +354,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Empty_RequestTime_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp role: resident restMethod: post validityCheckRequired: true @@ -374,7 +374,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Invalid_individualId_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp role: resident restMethod: post validityCheckRequired: true @@ -394,7 +394,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Missing_individualId_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp role: resident restMethod: post validityCheckRequired: true @@ -414,7 +414,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Empty_individualId_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp role: resident restMethod: post validityCheckRequired: true @@ -434,7 +434,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Null_individualId_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp role: resident restMethod: post validityCheckRequired: true @@ -454,7 +454,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_SpaceSeparated_otpChannels_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp role: resident restMethod: post validityCheckRequired: true @@ -474,7 +474,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Invalid_OtpChannels_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp role: resident restMethod: post validityCheckRequired: true @@ -494,7 +494,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Missing_OtpChannels_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp role: resident restMethod: post validityCheckRequired: true @@ -514,7 +514,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Empty_OtpChannels_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp role: resident restMethod: post validityCheckRequired: true @@ -534,7 +534,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Null_OtpChannels_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp role: resident restMethod: post validityCheckRequired: true @@ -554,7 +554,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Missing_OtpChannel_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp role: resident restMethod: post validityCheckRequired: true @@ -574,7 +574,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Empty_OtpChannel_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp role: resident restMethod: post validityCheckRequired: true @@ -594,7 +594,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Null_OtpChannel_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp role: resident restMethod: post validityCheckRequired: true @@ -614,7 +614,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Invalid_RequestTime_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp role: resident restMethod: post validityCheckRequired: true @@ -634,7 +634,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Past_RequestTime_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp role: resident restMethod: post validityCheckRequired: true @@ -654,7 +654,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Future_RequestTime_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp role: resident restMethod: post validityCheckRequired: true @@ -674,7 +674,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Missing_RequestTime_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp role: resident restMethod: post validityCheckRequired: true @@ -694,7 +694,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Empty_RequestTime_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp role: resident restMethod: post validityCheckRequired: true diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml b/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml index eab5ca524..00eaaf51a 100644 --- a/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml @@ -1,6 +1,6 @@ CredentialsStatus: Mimoto_CredentialsStatus_euin_All_Valid_Smoke: - endPoint: /residentmobileapp/credentialshare/request/status/{requestId} + endPoint: /v1/mimoto/credentialshare/request/status/{requestId} role: resident restMethod: get inputTemplate: mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatus @@ -12,7 +12,7 @@ CredentialsStatus: "statusCode": "ISSUED" }' Mimoto_CredentialsStatus_euin_With_VID_All_Valid_Smoke: - endPoint: /residentmobileapp/credentialshare/request/status/{requestId} + endPoint: /v1/mimoto/credentialshare/request/status/{requestId} role: resident restMethod: get inputTemplate: mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatus @@ -25,7 +25,7 @@ CredentialsStatus: }' Mimoto_CredentialsStatus_euin_With_Invalid_RequestId_Neg: - endPoint: /residentmobileapp/credentialshare/request/status/{requestId} + endPoint: /v1/mimoto/credentialshare/request/status/{requestId} role: resident restMethod: get inputTemplate: mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatus diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml index 815e3c5a1..1b9476099 100644 --- a/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml @@ -1,6 +1,6 @@ DownloadCredential: Mimoto_DownloadCredential_All_Valid_Smoke: - endPoint: /residentmobileapp/credentialshare/download + endPoint: /v1/mimoto/credentialshare/download role: resident restMethod: post inputTemplate: mimoto/CredentialIssuance/DownloadCredential/downloadCredential @@ -14,7 +14,7 @@ DownloadCredential: }' Mimoto_DownloadCredential_Invalid_RequestId_Neg: - endPoint: /residentmobileapp/credentialshare/download + endPoint: /v1/mimoto/credentialshare/download role: resident restMethod: post inputTemplate: mimoto/CredentialIssuance/DownloadCredential/downloadCredential @@ -28,7 +28,7 @@ DownloadCredential: }' Mimoto_DownloadCredential_Invalid_IndividualId_Neg: - endPoint: /residentmobileapp/credentialshare/download + endPoint: /v1/mimoto/credentialshare/download role: resident restMethod: post inputTemplate: mimoto/CredentialIssuance/DownloadCredential/downloadCredential diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml index 0f0a43c91..deda547da 100644 --- a/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml @@ -1,6 +1,6 @@ DownloadCredential: Mimoto_CredentialsStatus_All_Valid_Smoke_euin: - endPoint: /residentmobileapp/credentialshare/download + endPoint: /v1/mimoto/credentialshare/download role: resident checkErrorsOnlyInResponse: true restMethod: get @@ -14,7 +14,7 @@ DownloadCredential: "Content-Type": "application/pdf" }' Mimoto_CredentialsStatus_StatusCode_InValid_Smoke_euin: - endPoint: /residentmobileapp/credentialshare/download + endPoint: /v1/mimoto/credentialshare/download role: resident restMethod: get inputTemplate: mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqid diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml b/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml index b5ea20448..e8c1de4d2 100644 --- a/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml @@ -1,6 +1,6 @@ RequestCredentials: Mimoto_RequestCredentials__All_Valid_Smoke_sid: - endPoint: /residentmobileapp/credentialshare/request + endPoint: /v1/mimoto/credentialshare/request role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -17,7 +17,7 @@ RequestCredentials: "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", "individualIdType": "UIN", "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", - "sendOtpEndPoint": "/residentmobileapp/req/otp" + "sendOtpEndPoint": "/v1/mimoto/req/otp" } }' output: '{ @@ -27,7 +27,7 @@ RequestCredentials: } }' Mimoto_RequestCredentials_All_Valid_Smoke_with_VID_sid: - endPoint: /residentmobileapp/credentialshare/request + endPoint: /v1/mimoto/credentialshare/request role: resident restMethod: post checkErrorsOnlyInResponse: true @@ -44,7 +44,7 @@ RequestCredentials: "individualId": "$ID:Generate_Perpetual_VID_Valid_Smoke_sid_vid$", "individualIdType": "VID", "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", - "sendOtpEndPoint": "/residentmobileapp/req/otp" + "sendOtpEndPoint": "/v1/mimoto/req/otp" } }' output: '{ @@ -54,7 +54,7 @@ RequestCredentials: } }' Mimoto_RequestCredentials_InValid_Otp_UIN_sid: - endPoint: /residentmobileapp/credentialshare/request + endPoint: /v1/mimoto/credentialshare/request role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -71,7 +71,7 @@ RequestCredentials: "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", "individualIdType": "UIN", "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", - "sendOtpEndPoint": "/residentmobileapp/req/otp" + "sendOtpEndPoint": "/v1/mimoto/req/otp" } }' output: '{ @@ -85,7 +85,7 @@ RequestCredentials: } }' Mimoto_RequestCredentials_InValid_TransactionId_sid: - endPoint: /residentmobileapp/credentialshare/request + endPoint: /v1/mimoto/credentialshare/request role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -102,7 +102,7 @@ RequestCredentials: "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", "individualIdType": "UIN", "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", - "sendOtpEndPoint": "/residentmobileapp/req/otp" + "sendOtpEndPoint": "/v1/mimoto/req/otp" } }' output: '{ @@ -117,7 +117,7 @@ RequestCredentials: }' Mimoto_RequestCredentials_InValid_UIN_sid: - endPoint: /residentmobileapp/credentialshare/request + endPoint: /v1/mimoto/credentialshare/request role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -134,7 +134,7 @@ RequestCredentials: "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", "individualIdType": "UIN", "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", - "sendOtpEndPoint": "/residentmobileapp/req/otp" + "sendOtpEndPoint": "/v1/mimoto/req/otp" } }' output: '{ @@ -149,7 +149,7 @@ RequestCredentials: }' Mimoto_RequestCredentials_Invalid_VID_sid_Neg: - endPoint: /residentmobileapp/credentialshare/request + endPoint: /v1/mimoto/credentialshare/request role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -166,7 +166,7 @@ RequestCredentials: "individualId": "$ID:Generate_Perpetual_VID_Valid_Smoke_sid_vid$", "individualIdType": "VID", "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", - "sendOtpEndPoint": "/residentmobileapp/req/otp" + "sendOtpEndPoint": "/v1/mimoto/req/otp" } }' output: '{ diff --git a/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml b/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml index f23212b5f..378b6daa4 100644 --- a/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml +++ b/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml @@ -1,6 +1,6 @@ DownloadIssuerCredential: Mimoto_DownloadIssuerCredential_IssuerMosip_All_Valid_Smoke: - endPoint: /residentmobileapp/credentials/download + endPoint: /v1/mimoto/credentials/download role: resident restMethod: get checkErrorsOnlyInResponse: true @@ -18,7 +18,7 @@ DownloadIssuerCredential: }' Mimoto_DownloadIssuerCredential_Invalid_Issuer_Neg: - endPoint: /residentmobileapp/credentials/download + endPoint: /v1/mimoto/credentials/download role: resident restMethod: get checkErrorsOnlyInResponse: true @@ -41,7 +41,7 @@ DownloadIssuerCredential: }' Mimoto_DownloadIssuerCredential_Invalid_Credential_Neg: - endPoint: /residentmobileapp/credentials/download + endPoint: /v1/mimoto/credentials/download role: resident restMethod: get checkErrorsOnlyInResponse: true @@ -64,7 +64,7 @@ DownloadIssuerCredential: }' Mimoto_DownloadIssuerCredential_Invalid_AuthorizationCode_Neg: - endPoint: /residentmobileapp/credentials/download + endPoint: /v1/mimoto/credentials/download role: resident restMethod: get checkErrorsOnlyInResponse: true @@ -87,7 +87,7 @@ DownloadIssuerCredential: }' Mimoto_DownloadIssuerCredential_Reused_AuthorizationCode_Neg: - endPoint: /residentmobileapp/credentials/download + endPoint: /v1/mimoto/credentials/download role: resident restMethod: get checkErrorsOnlyInResponse: true @@ -109,7 +109,7 @@ DownloadIssuerCredential: ] }' Mimoto_DownloadIssuerCredential_IssuerSunBird_All_Valid_Smoke: - endPoint: /residentmobileapp/credentials/download + endPoint: /v1/mimoto/credentials/download role: resident restMethod: get checkErrorsOnlyInResponse: true diff --git a/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml b/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml index 803a0accb..a68b5344a 100644 --- a/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml +++ b/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml @@ -1,6 +1,6 @@ GenerateVID: Mimoto_Generate_Perpetual_VID_Valid_Smoke_sid: - endPoint: /residentmobileapp/vid + endPoint: /v1/mimoto/vid role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -18,7 +18,7 @@ GenerateVID: "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", "individualIdType": "UIN", "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", - "sendOtpEndPoint": "/residentmobileapp/req/otp" + "sendOtpEndPoint": "/v1/mimoto/req/otp" } }' output: '{ @@ -27,7 +27,7 @@ GenerateVID: } }' Mimoto_Generate_Perpetual_VID_InValid_Otp_sid: - endPoint: /residentmobileapp/vid + endPoint: /v1/mimoto/vid role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -45,7 +45,7 @@ GenerateVID: "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", "individualIdType": "UIN", "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", - "sendOtpEndPoint": "/residentmobileapp/req/otp" + "sendOtpEndPoint": "/v1/mimoto/req/otp" } }' output: '{ @@ -59,7 +59,7 @@ GenerateVID: } }' Mimoto_Generate_Perpetual_VID_with_InvalidUIN_Valid_Otp_sid: - endPoint: /residentmobileapp/vid + endPoint: /v1/mimoto/vid role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -77,7 +77,7 @@ GenerateVID: "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", "individualIdType": "UIN", "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", - "sendOtpEndPoint": "/residentmobileapp/req/otp" + "sendOtpEndPoint": "/v1/mimoto/req/otp" } }' output: '{ @@ -92,7 +92,7 @@ GenerateVID: }' mimoto_Generate_Temporary_VID_Valid_Smoke_sid: - endPoint: /residentmobileapp/vid + endPoint: /v1/mimoto/vid role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -110,7 +110,7 @@ GenerateVID: "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", "individualIdType": "UIN", "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", - "sendOtpEndPoint": "/residentmobileapp/req/otp" + "sendOtpEndPoint": "/v1/mimoto/req/otp" } }' output: '{ @@ -120,7 +120,7 @@ GenerateVID: }' Mimoto_Generate_Perpetual_VID_Invalid_TransactionId_Neg: - endPoint: /residentmobileapp/vid + endPoint: /v1/mimoto/vid role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -138,7 +138,7 @@ GenerateVID: "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", "individualIdType": "UIN", "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", - "sendOtpEndPoint": "/residentmobileapp/req/otp" + "sendOtpEndPoint": "/v1/mimoto/req/otp" } }' output: '{ @@ -153,7 +153,7 @@ GenerateVID: }' Mimoto_Generate_Perpetual_VID_Binding_Valid_Smoke_sid: - endPoint: /residentmobileapp/vid + endPoint: /v1/mimoto/vid role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -171,7 +171,7 @@ GenerateVID: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "individualIdType": "UIN", "sendOtpReqTemplate": "mimoto/SendOTP/createSendOTP", - "sendOtpEndPoint": "/residentmobileapp/req/otp" + "sendOtpEndPoint": "/v1/mimoto/req/otp" } }' output: '{ diff --git a/apitest/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.yml b/apitest/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.yml index aeb6e5c6e..942113a2c 100644 --- a/apitest/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.yml +++ b/apitest/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.yml @@ -1,6 +1,6 @@ GetAllCredentialTypes: Mimoto_GetAllCredentialTypes_All_Valid_Smoke: - endPoint: /residentmobileapp/issuers/{issuerId}/credentialTypes + endPoint: /v1/mimoto/issuers/{issuerId}/credentialTypes role: resident restMethod: get checkErrorsOnlyInResponse: true @@ -14,7 +14,7 @@ GetAllCredentialTypes: }' Mimoto_GetAllCredentialTypes_Specific_Issuer_All_Valid_Smoke: - endPoint: /residentmobileapp/issuers/{issuerId}/credentialTypes/?search={credentialType} + endPoint: /v1/mimoto/issuers/{issuerId}/credentialTypes/?search={credentialType} role: resident restMethod: get checkErrorsOnlyInResponse: true @@ -28,7 +28,7 @@ GetAllCredentialTypes: }' Mimoto_GetAllCredentialTypes_Invalid_Issuer_Neg: - endPoint: /residentmobileapp/issuers/{issuerId}/credentialTypes + endPoint: /v1/mimoto/issuers/{issuerId}/credentialTypes role: resident restMethod: get checkErrorsOnlyInResponse: true diff --git a/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml b/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml index c9afa105d..802bc2045 100644 --- a/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml +++ b/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml @@ -1,6 +1,6 @@ GetAllIssuers: Mimoto_GetAllIssuers_All_Valid_Smoke: - endPoint: /residentmobileapp/issuers + endPoint: /v1/mimoto/issuers role: resident restMethod: get checkErrorsOnlyInResponse: true @@ -12,7 +12,7 @@ GetAllIssuers: }' Mimoto_GetAllIssuers_Specific_Issuer_All_Valid_Smoke: - endPoint: /residentmobileapp/issuers/Mosip + endPoint: /v1/mimoto/issuers/Mosip role: resident restMethod: get checkErrorsOnlyInResponse: true @@ -24,7 +24,7 @@ GetAllIssuers: }' Mimoto_GetAllIssuers_Invalid_Issuer_Neg: - endPoint: /residentmobileapp/issuers/invalid + endPoint: /v1/mimoto/issuers/invalid role: resident restMethod: get checkErrorsOnlyInResponse: true diff --git a/apitest/src/main/resources/mimoto/SendOTP1/SendOTP.yml b/apitest/src/main/resources/mimoto/SendOTP1/SendOTP.yml index 26ecf09ed..3edc30c09 100644 --- a/apitest/src/main/resources/mimoto/SendOTP1/SendOTP.yml +++ b/apitest/src/main/resources/mimoto/SendOTP1/SendOTP.yml @@ -36,7 +36,7 @@ SendOTP: }' Mimoto_SendOTP_InValid_UIN_All: - endPoint: /residentmobileapp/req/otp + endPoint: /v1/mimoto/req/otp role: resident restMethod: post inputTemplate: mimoto/SendOTP1/createSendOTP diff --git a/apitest/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml b/apitest/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml index 815639521..c5277615a 100644 --- a/apitest/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml +++ b/apitest/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml @@ -1,6 +1,6 @@ individualOTP: Mimoto_individualOTP_All_Valid_Smoke: - endPoint: /residentmobileapp/req/individualId/otp + endPoint: /v1/mimoto/req/individualId/otp role: resident checkErrorsOnlyInResponse: true restMethod: post diff --git a/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml b/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml index 0c621a1f3..f4d3be45d 100644 --- a/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml +++ b/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml @@ -1,6 +1,6 @@ WalletBinding: Mimoto_WalletBinding_uin_OTP_Valid_Smoke: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -21,7 +21,7 @@ WalletBinding: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -33,7 +33,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_OTP_Valid_Smoke: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -54,7 +54,7 @@ WalletBinding: "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -66,7 +66,7 @@ WalletBinding: }' Mimoto_WalletBinding_uin_Invalid_RequestTime_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -87,7 +87,7 @@ WalletBinding: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -104,7 +104,7 @@ WalletBinding: }' Mimoto_WalletBinding_uin_PastVal_RequestTime_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -125,7 +125,7 @@ WalletBinding: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -142,7 +142,7 @@ WalletBinding: }' Mimoto_WalletBinding_uin_FutureVal_RequestTime_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -163,7 +163,7 @@ WalletBinding: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -180,7 +180,7 @@ WalletBinding: }' Mimoto_WalletBinding_uin_Empty_RequestTime_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -201,7 +201,7 @@ WalletBinding: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -218,7 +218,7 @@ WalletBinding: }' Mimoto_WalletBinding_uin_Missing_RequestTime_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -239,7 +239,7 @@ WalletBinding: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -256,7 +256,7 @@ WalletBinding: }' Mimoto_WalletBinding_uin_Invalid_IndividualId_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -277,7 +277,7 @@ WalletBinding: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -294,7 +294,7 @@ WalletBinding: }' Mimoto_WalletBinding_uin_Empty_IndividualId_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -315,7 +315,7 @@ WalletBinding: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -332,7 +332,7 @@ WalletBinding: }' Mimoto_WalletBinding_uin_Null_IndividualId_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -353,7 +353,7 @@ WalletBinding: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -370,7 +370,7 @@ WalletBinding: }' Mimoto_WalletBinding_uin_Missing_IndividualId_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -391,7 +391,7 @@ WalletBinding: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -408,7 +408,7 @@ WalletBinding: }' Mimoto_WalletBinding_uin_SpaceVal_IndividualId_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -429,7 +429,7 @@ WalletBinding: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -446,7 +446,7 @@ WalletBinding: }' Mimoto_WalletBinding_uin_Invalid_AuthFactorType_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -468,7 +468,7 @@ WalletBinding: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -485,7 +485,7 @@ WalletBinding: }' Mimoto_WalletBinding_uin_Empty_AuthFactorType_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -507,7 +507,7 @@ WalletBinding: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -524,7 +524,7 @@ WalletBinding: }' Mimoto_WalletBinding_uin_Missing_AuthFactorType_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -546,7 +546,7 @@ WalletBinding: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -563,7 +563,7 @@ WalletBinding: }' Mimoto_WalletBinding_uin_SpaceVal_AuthFactorType_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -585,7 +585,7 @@ WalletBinding: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -602,7 +602,7 @@ WalletBinding: }' Mimoto_WalletBinding_uin_Null_AuthFactorType_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -624,7 +624,7 @@ WalletBinding: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -641,7 +641,7 @@ WalletBinding: }' Mimoto_WalletBinding_uin_Invalid_Challenge_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -663,7 +663,7 @@ WalletBinding: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -680,7 +680,7 @@ WalletBinding: }' Mimoto_WalletBinding_uin_Missing_Challenge_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -702,7 +702,7 @@ WalletBinding: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -719,7 +719,7 @@ WalletBinding: }' Mimoto_WalletBinding_uin_Empty_Challenge_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -741,7 +741,7 @@ WalletBinding: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -758,7 +758,7 @@ WalletBinding: }' Mimoto_WalletBinding_uin_SpaceVal_Challenge_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -780,7 +780,7 @@ WalletBinding: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -797,7 +797,7 @@ WalletBinding: }' Mimoto_WalletBinding_uin_Null_Challenge_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true allowedErrorCodes: @@ -819,7 +819,7 @@ WalletBinding: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -836,7 +836,7 @@ WalletBinding: }' Mimoto_WalletBinding_uin_Invalid_Formate_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -858,7 +858,7 @@ WalletBinding: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -875,7 +875,7 @@ WalletBinding: }' Mimoto_WalletBinding_uin_Missing_Formate_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -897,7 +897,7 @@ WalletBinding: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -914,7 +914,7 @@ WalletBinding: }' Mimoto_WalletBinding_uin_Empty_Formate_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -936,7 +936,7 @@ WalletBinding: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -953,7 +953,7 @@ WalletBinding: }' Mimoto_WalletBinding_uin_SpaceVal_Formate_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -975,7 +975,7 @@ WalletBinding: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -992,7 +992,7 @@ WalletBinding: }' Mimoto_WalletBinding_uin_Null_Formate_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -1014,7 +1014,7 @@ WalletBinding: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -1031,7 +1031,7 @@ WalletBinding: }' Mimoto_WalletBinding_uin_Invalid_authFactorType1_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -1052,7 +1052,7 @@ WalletBinding: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -1069,7 +1069,7 @@ WalletBinding: }' Mimoto_WalletBinding_uin_Missing_authFactorType1_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -1090,7 +1090,7 @@ WalletBinding: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -1107,7 +1107,7 @@ WalletBinding: }' Mimoto_WalletBinding_uin_Empty_authFactorType1_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -1128,7 +1128,7 @@ WalletBinding: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -1145,7 +1145,7 @@ WalletBinding: }' Mimoto_WalletBinding_uin_SpaceVal_authFactorType1_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -1166,7 +1166,7 @@ WalletBinding: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -1183,7 +1183,7 @@ WalletBinding: }' Mimoto_WalletBinding_uin_Null_authFactorType1_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -1204,7 +1204,7 @@ WalletBinding: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -1221,7 +1221,7 @@ WalletBinding: }' Mimoto_WalletBinding_uin_Invalid_format1_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -1242,7 +1242,7 @@ WalletBinding: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -1259,7 +1259,7 @@ WalletBinding: }' Mimoto_WalletBinding_uin_Missing_format1_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -1280,7 +1280,7 @@ WalletBinding: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -1297,7 +1297,7 @@ WalletBinding: }' Mimoto_WalletBinding_uin_Empty_format1_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -1318,7 +1318,7 @@ WalletBinding: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -1335,7 +1335,7 @@ WalletBinding: }' Mimoto_WalletBinding_uin_SpaceVal_format1_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -1356,7 +1356,7 @@ WalletBinding: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -1373,7 +1373,7 @@ WalletBinding: }' Mimoto_WalletBinding_uin_Null_format1_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -1394,7 +1394,7 @@ WalletBinding: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -1411,7 +1411,7 @@ WalletBinding: }' Mimoto_WalletBinding_uin_Invalid_publicKey_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -1432,7 +1432,7 @@ WalletBinding: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -1449,7 +1449,7 @@ WalletBinding: }' Mimoto_WalletBinding_uin_Null_publicKey_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -1470,7 +1470,7 @@ WalletBinding: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -1487,7 +1487,7 @@ WalletBinding: }' Mimoto_WalletBinding_uin_Missing_publicKey_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -1508,7 +1508,7 @@ WalletBinding: "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -1525,7 +1525,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_Invalid_RequestTime_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -1546,7 +1546,7 @@ WalletBinding: "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -1563,7 +1563,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_PastVal_RequestTime_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -1584,7 +1584,7 @@ WalletBinding: "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -1601,7 +1601,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_FutureVal_RequestTime_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -1622,7 +1622,7 @@ WalletBinding: "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -1639,7 +1639,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_Empty_RequestTime_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -1660,7 +1660,7 @@ WalletBinding: "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -1677,7 +1677,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_Missing_RequestTime_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -1698,7 +1698,7 @@ WalletBinding: "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -1715,7 +1715,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_Invalid_IndividualId_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -1736,7 +1736,7 @@ WalletBinding: "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -1753,7 +1753,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_Empty_IndividualId_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -1774,7 +1774,7 @@ WalletBinding: "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -1791,7 +1791,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_Null_IndividualId_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -1812,7 +1812,7 @@ WalletBinding: "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -1829,7 +1829,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_Missing_IndividualId_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -1850,7 +1850,7 @@ WalletBinding: "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -1867,7 +1867,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_SpaceVal_IndividualId_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -1888,7 +1888,7 @@ WalletBinding: "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -1905,7 +1905,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_Invalid_AuthFactorType_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -1927,7 +1927,7 @@ WalletBinding: "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -1944,7 +1944,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_Empty_AuthFactorType_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -1966,7 +1966,7 @@ WalletBinding: "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -1983,7 +1983,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_Missing_AuthFactorType_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -2005,7 +2005,7 @@ WalletBinding: "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -2022,7 +2022,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_SpaceVal_AuthFactorType_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -2044,7 +2044,7 @@ WalletBinding: "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -2061,7 +2061,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_Null_AuthFactorType_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -2082,7 +2082,7 @@ WalletBinding: "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -2099,7 +2099,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_Invalid_Challenge_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -2121,7 +2121,7 @@ WalletBinding: "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -2138,7 +2138,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_Missing_Challenge_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -2160,7 +2160,7 @@ WalletBinding: "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -2177,7 +2177,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_Empty_Challenge_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -2199,7 +2199,7 @@ WalletBinding: "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -2216,7 +2216,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_SpaceVal_Challenge_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -2238,7 +2238,7 @@ WalletBinding: "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -2255,7 +2255,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_Null_Challenge_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -2276,7 +2276,7 @@ WalletBinding: "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -2293,7 +2293,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_Invalid_Formate_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -2314,7 +2314,7 @@ WalletBinding: "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -2331,7 +2331,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_Missing_Formate_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -2353,7 +2353,7 @@ WalletBinding: "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -2370,7 +2370,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_Empty_Formate_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -2392,7 +2392,7 @@ WalletBinding: "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -2409,7 +2409,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_SpaceVal_Formate_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -2431,7 +2431,7 @@ WalletBinding: "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -2448,7 +2448,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_Null_Formate_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -2469,7 +2469,7 @@ WalletBinding: "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -2486,7 +2486,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_Invalid_authFactorType1_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -2507,7 +2507,7 @@ WalletBinding: "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -2524,7 +2524,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_Missing_authFactorType1_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -2545,7 +2545,7 @@ WalletBinding: "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -2562,7 +2562,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_Empty_authFactorType1_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -2583,7 +2583,7 @@ WalletBinding: "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -2600,7 +2600,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_SpaceVal_authFactorType1_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -2621,7 +2621,7 @@ WalletBinding: "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -2638,7 +2638,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_Null_authFactorType1_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -2659,7 +2659,7 @@ WalletBinding: "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -2676,7 +2676,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_Invalid_format1_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -2697,7 +2697,7 @@ WalletBinding: "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -2714,7 +2714,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_Missing_format1_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -2735,7 +2735,7 @@ WalletBinding: "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -2752,7 +2752,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_Empty_format1_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -2773,7 +2773,7 @@ WalletBinding: "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -2790,7 +2790,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_SpaceVal_format1_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -2811,7 +2811,7 @@ WalletBinding: "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -2828,7 +2828,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_Null_format1_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -2849,7 +2849,7 @@ WalletBinding: "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -2866,7 +2866,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_Invalid_publicKey_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -2887,7 +2887,7 @@ WalletBinding: "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -2904,7 +2904,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_Null_publicKey_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -2925,7 +2925,7 @@ WalletBinding: "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ @@ -2942,7 +2942,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_Missing_publicKey_Neg: - endPoint: /residentmobileapp/wallet-binding + endPoint: /v1/mimoto/wallet-binding role: resident validityCheckRequired: true restMethod: post @@ -2963,7 +2963,7 @@ WalletBinding: "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"},{channel: "PHONE"}], "sendOtpReqTemplate": "mimoto/BindingOtp/BindingOtp", - "sendOtpEndPoint": "/residentmobileapp/binding-otp" + "sendOtpEndPoint": "/v1/mimoto/binding-otp" } }' output: '{ diff --git a/docker-compose/README.md b/docker-compose/README.md index 24b860d11..a7367bfc9 100644 --- a/docker-compose/README.md +++ b/docker-compose/README.md @@ -27,10 +27,10 @@ Refer [here](https://docs.mosip.io/inji/inji-mobile-wallet/customization-overvie > docker-compose up 7. Access Apis as - * http://localhost:8099/residentmobileapp/allProperties - * http://localhost:8099/residentmobileapp/issuers - * http://localhost:8099/residentmobileapp/issuers/Sunbird - * http://localhost:8099/residentmobileapp/issuers/Sunbird/credentialTypes + * http://localhost:8099/v1/mimoto/allProperties + * http://localhost:8099/v1/mimoto/issuers + * http://localhost:8099/v1/mimoto/issuers/Sunbird + * http://localhost:8099/v1/mimoto/issuers/Sunbird/credentialTypes Note: diff --git a/docker-compose/config/mimoto-default.properties b/docker-compose/config/mimoto-default.properties index 01f7010b0..4b25759db 100644 --- a/docker-compose/config/mimoto-default.properties +++ b/docker-compose/config/mimoto-default.properties @@ -1,5 +1,5 @@ server.port=8099 -server.servlet.context-path=/residentmobileapp +server.servlet.context-path=/v1/mimoto health.config.enabled=false mosip.service.end-points=/**/* diff --git a/docker-compose/config/mimoto-issuers-config.json b/docker-compose/config/mimoto-issuers-config.json index 10024dedc..508e5f48b 100644 --- a/docker-compose/config/mimoto-issuers-config.json +++ b/docker-compose/config/mimoto-issuers-config.json @@ -73,7 +73,7 @@ "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", "authorization_endpoint": "https://esignet.collab.mosip.net/authorize", "authorization_audience": "https://esignet.collab.mosip.net/v1/esignet/oauth/v2/token", - "token_endpoint": "https://api.collab.mosip.net/residentmobileapp/get-token/ESignet", + "token_endpoint": "https://api.collab.mosip.net/v1/mimoto/get-token/ESignet", "proxy_token_endpoint": "https://api.collab.mosip.net/v1/esignet/oauth/v2/token", "credential_endpoint": "https://api.collab.mosip.net/v1/esignet/vci/credential", "credential_type": ["VerifiableCredential", "MOSIPVerifiableCredential"], @@ -153,7 +153,7 @@ "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", "authorization_endpoint": "https://esignet-insurance.collab.mosip.net/authorize", "authorization_audience": "https://esignet-insurance.collab.mosip.net/v1/esignet/oauth/v2/token", - "token_endpoint": "https://api.collab.mosip.net/residentmobileapp/get-token/Sunbird", + "token_endpoint": "https://api.collab.mosip.net/v1/mimoto/get-token/Sunbird", "proxy_token_endpoint": "https://esignet-insurance.collab.mosip.net/v1/esignet/oauth/v2/token", "credential_endpoint": "https://esignet-insurance.collab.mosip.net/v1/esignet/vci/credential", "credential_type": ["VerifiableCredential", "InsuranceCredential"], diff --git a/docs/postman-collections/Collab.postman_environment.json b/docs/postman-collections/Collab.postman_environment.json index 244d7e88a..83de22baa 100644 --- a/docs/postman-collections/Collab.postman_environment.json +++ b/docs/postman-collections/Collab.postman_environment.json @@ -4,7 +4,7 @@ "values": [ { "key": "HOST", - "value": "https://api.collab.mosip.net/residentmobileapp", + "value": "https://api.collab.mosip.net/v1/mimoto", "type": "default", "enabled": true }, diff --git a/src/main/resources/mimoto-issuers-config.json b/src/main/resources/mimoto-issuers-config.json index bfdf3219b..9234d02f2 100644 --- a/src/main/resources/mimoto-issuers-config.json +++ b/src/main/resources/mimoto-issuers-config.json @@ -77,7 +77,7 @@ "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", "authorization_endpoint": "https://${mosip.esignet.host}/authorize", "authorization_audience": "https://${mosip.esignet.host}/v1/esignet/oauth/v2/token", - "token_endpoint": "https://${mosip.api.public.host}/residentmobileapp/get-token/ESignet", + "token_endpoint": "https://${mosip.api.public.host}/v1/mimoto/get-token/ESignet", "proxy_token_endpoint": "https://${mosip.api.public.host}/v1/esignet/oauth/v2/token", "credential_endpoint": "https://${mosip.api.public.host}/v1/esignet/vci/credential", "credential_type": [ @@ -160,7 +160,7 @@ ], "authorization_endpoint": "https://esignet-insurance.dev1.mosip.net/authorize", "authorization_audience": "https://esignet-insurance.dev1.mosip.net/v1/esignet/oauth/v2/token", - "token_endpoint": "https://api.dev1.mosip.net/residentmobileapp/get-token/Sunbird", + "token_endpoint": "https://api.dev1.mosip.net/v1/mimoto/get-token/Sunbird", "proxy_token_endpoint": "https://esignet-insurance.dev1.mosip.net/v1/esignet/oauth/v2/token", "credential_endpoint": "https://esignet-insurance.dev1.mosip.net/v1/esignet/vci/credential", "credential_type": [ From 31d2e3c76a84bc0aaa8a6d06684a1ba65b147046 Mon Sep 17 00:00:00 2001 From: Praful Rakhade <99539100+Prafulrakhade@users.noreply.github.com> Date: Fri, 26 Jul 2024 12:37:16 +0530 Subject: [PATCH 193/860] [DSD-5811] Updated values.yaml (#348) Signed-off-by: Praful Rakhade <99539100+Prafulrakhade@users.noreply.github.com> --- helm/inji-config-server/values.yaml | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/helm/inji-config-server/values.yaml b/helm/inji-config-server/values.yaml index b707b1264..8b71e907d 100755 --- a/helm/inji-config-server/values.yaml +++ b/helm/inji-config-server/values.yaml @@ -91,4 +91,18 @@ envVariables: secretKeyRef: name: s3 key: s3-user-secret - enabled: true \ No newline at end of file + enabled: true + + - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_ESIGNET_HOST + valueFrom: + configMapKeyRef: + key: mosip-esignet-host + name: global + enabled: true + + - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_ESIGNET_INSURANCE_HOST + valueFrom: + configMapKeyRef: + key: mosip-esignet-insurance-host + name: global + enabled: true From b2321ec9c91af35872c48bcc579f95c8e755218d Mon Sep 17 00:00:00 2001 From: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> Date: Mon, 29 Jul 2024 19:03:37 +0530 Subject: [PATCH 194/860] MOSIP-34783 - Updated the apitest commons version for java21 (#366) * INJIMOB-1593 & INJIWEB-178 - Added test cases for create policy in sunbird registry and download sunbird VC Signed-off-by: Mohanachandran S * INJIMOB-1593 & INJIWEB-178 - Added test cases for create policy in sunbird registry and download sunbird VC Signed-off-by: Mohanachandran S * Update push-trigger.yml Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> * Update Dockerfile Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> --------- Signed-off-by: Mohanachandran S Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> --- .github/workflows/push-trigger.yml | 2 +- apitest/Dockerfile | 34 +++++++++++++--------------- apitest/pom.xml | 2 +- apitest/testNgXmlFiles/mimotoApi.xml | 5 +--- 4 files changed, 19 insertions(+), 24 deletions(-) diff --git a/.github/workflows/push-trigger.yml b/.github/workflows/push-trigger.yml index 53726dbff..f331ae151 100644 --- a/.github/workflows/push-trigger.yml +++ b/.github/workflows/push-trigger.yml @@ -230,4 +230,4 @@ jobs: # OSSRH_SECRET: ${{ secrets.OSSRH_SECRET }} # OSSRH_TOKEN: ${{ secrets.OSSRH_TOKEN }} # GPG_SECRET: ${{ secrets.GPG_SECRET }} -# SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }} \ No newline at end of file +# SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }} diff --git a/apitest/Dockerfile b/apitest/Dockerfile index 1937a431f..fdc056e09 100644 --- a/apitest/Dockerfile +++ b/apitest/Dockerfile @@ -23,32 +23,30 @@ ARG container_user_gid=1001 ARG KUBECTL_VERSION=1.22.9 +# set working directory for the user WORKDIR /home/${container_user} ENV work_dir=/home/${container_user} -COPY ./apitest/target $work_dir/ -COPY application.properties $work_dir/ -COPY ["Biometric Devices", "$work_dir/Biometric Devices"] -COPY ["resource", "$work_dir/resource"] -COPY entrypoint.sh $work_dir +ADD ./apitest/target/ $work_dir -RUN apt-get -y update && \ - apt-get install -y unzip jq && \ - groupadd -g ${container_user_gid} ${container_user_group} && \ - useradd -u ${container_user_uid} -g ${container_user_group} -s /bin/sh -m ${container_user} && \ - curl -LO "https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VERSION}/bin/linux/amd64/kubectl" && \ - chmod +x kubectl && \ - mv kubectl /usr/local/bin/ && \ - chown -R ${container_user}:${container_user} /home/${container_user} /usr/local/openjdk-11/lib/security/cacerts && \ - chmod 644 /usr/local/openjdk-11/lib/security/cacerts && \ - chmod +x $work_dir/entrypoint.sh +ADD entrypoint.sh $work_dir/entrypoint.sh +# install packages and create user +RUN apt-get -y update \ +&& apt-get install -y unzip jq curl \ +&& groupadd -g ${container_user_gid} ${container_user_group} \ +&& useradd -u ${container_user_uid} -g ${container_user_group} -s /bin/bash -m ${container_user} \ +&& curl -LO "https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VERSION}/bin/linux/amd64/kubectl" \ +&& mkdir -p /home/${container_user} \ +&& chmod +x kubectl $work_dir/entrypoint.sh \ +&& mv kubectl /usr/local/bin/ \ +&& chown -R ${container_user}:${container_user} /home/${container_user} /etc/ssl/certs/java/cacerts \ +&& chmod 644 /etc/ssl/certs/java/cacerts +# select container user for all tasks USER ${container_user_uid}:${container_user_gid} -WORKDIR ${work_dir} - EXPOSE 8083 ENV MODULES= @@ -56,4 +54,4 @@ ENV ENV_USER= ENV ENV_ENDPOINT= ENV ENV_TESTLEVEL=smokeAndRegression -ENTRYPOINT ["./entrypoint.sh"] \ No newline at end of file +ENTRYPOINT ["./entrypoint.sh"] diff --git a/apitest/pom.xml b/apitest/pom.xml index 506d621f7..f253133bb 100644 --- a/apitest/pom.xml +++ b/apitest/pom.xml @@ -56,7 +56,7 @@ io.mosip.testrig.apirig.apitest.commons apitest-commons - 1.2.1-SNAPSHOT + 1.2.1-java21-SNAPSHOT diff --git a/apitest/testNgXmlFiles/mimotoApi.xml b/apitest/testNgXmlFiles/mimotoApi.xml index f7a6cf5cd..e58afb2ea 100644 --- a/apitest/testNgXmlFiles/mimotoApi.xml +++ b/apitest/testNgXmlFiles/mimotoApi.xml @@ -46,8 +46,6 @@ - - @@ -71,7 +69,6 @@ - @@ -189,7 +186,7 @@ - + From c67be19a1e8ba39f88015e564f6a3c990204a428 Mon Sep 17 00:00:00 2001 From: Vijay Kumar S <94220135+vijay151096@users.noreply.github.com> Date: Tue, 30 Jul 2024 10:26:02 +0530 Subject: [PATCH 195/860] [INJIWEB-665] : Error Handling in OVP Sharing (#363) * [INJIWEB-665] : Handling Errors for OVP Data Sharing Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-665] : enable cross origin for presentation controller Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-665] : enable cross origin for presentation controller Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-665] : enable cross origin for presentation controller Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-665] : handle the errors in mimoto through redirect Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-665] : handle the errors in mimoto through redirect (#345) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-665] : handle the errors in mimoto through redirect Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-665] : fixing the failed test Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-665] : fixing the failed test Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-665] : update injiweb url redirection Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-665] : add missing tests for datashare impl Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-665] : handle mosip vc long redirect uri error handling. Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-665] : handle mosip vc long redirect uri error handling. Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-665] : fix instance creation in datashare object Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-665] : apply server properties to bootstrap Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-665] : fix pr review comments. Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- .../controller/CredentialsController.java | 5 + .../controller/PresentationController.java | 37 +++++-- .../java/io/mosip/mimoto/dto/ErrorDTO.java | 4 +- .../datashare/DataShareResponseDTO.java | 6 ++ .../DataShareResponseWrapperDTO.java | 9 +- .../mimoto/exception/ErrorConstants.java | 24 +++++ .../InvalidCredentialResourceException.java | 2 +- .../exception/PlatformErrorMessages.java | 3 +- .../exception/VPNotCreatedException.java | 2 +- ...fiersService.java => VerifierService.java} | 5 +- .../service/impl/CredentialServiceImpl.java | 14 +-- .../service/impl/DataShareServiceImpl.java | 63 +++++++++-- .../service/impl/PresentationServiceImpl.java | 63 ++++++----- ...viceImpl.java => VerifierServiceImpl.java} | 28 +++-- .../resources/application-local.properties | 19 +++- src/main/resources/bootstrap.properties | 1 + .../mimoto/service/DataShareServiceTest.java | 100 ++++++++++++++++++ .../service/PresentationServiceTest.java | 23 ++-- .../mimoto/service/VerifierServiceTest.java | 8 +- .../io/mosip/mimoto/util/TestUtilities.java | 20 ++++ .../resources/application-test.properties | 18 +++- 21 files changed, 364 insertions(+), 90 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/exception/ErrorConstants.java rename src/main/java/io/mosip/mimoto/service/{VerifiersService.java => VerifierService.java} (66%) rename src/main/java/io/mosip/mimoto/service/impl/{VerifiersServiceImpl.java => VerifierServiceImpl.java} (56%) create mode 100644 src/test/java/io/mosip/mimoto/service/DataShareServiceTest.java diff --git a/src/main/java/io/mosip/mimoto/controller/CredentialsController.java b/src/main/java/io/mosip/mimoto/controller/CredentialsController.java index d038503dc..5a4dbead9 100644 --- a/src/main/java/io/mosip/mimoto/controller/CredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/CredentialsController.java @@ -4,6 +4,7 @@ import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.InvalidCredentialResourceException; import io.mosip.mimoto.service.CredentialService; import io.mosip.mimoto.service.IdpService; import io.mosip.mimoto.service.IssuersService; @@ -67,6 +68,10 @@ public ResponseEntity downloadCredentialAsPDF( logger.error("Exception occurred while fetching credential types ", exception); responseWrapper.setErrors(List.of(new ErrorDTO(API_NOT_ACCESSIBLE_EXCEPTION.getCode(), API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); + } catch (InvalidCredentialResourceException invalidCredentialResourceException) { + logger.error("Exception occurred while pushing the data to data share ", invalidCredentialResourceException); + responseWrapper.setErrors(List.of(new ErrorDTO(invalidCredentialResourceException.getErrorCode(), invalidCredentialResourceException.getMessage()))); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); } catch (Exception exception) { logger.error("Exception occurred while generating pdf ", exception); responseWrapper.setErrors(List.of(new ErrorDTO(MIMOTO_PDF_SIGN_EXCEPTION.getCode(), exception.getMessage()))); diff --git a/src/main/java/io/mosip/mimoto/controller/PresentationController.java b/src/main/java/io/mosip/mimoto/controller/PresentationController.java index 3e6332a20..280df3d66 100644 --- a/src/main/java/io/mosip/mimoto/controller/PresentationController.java +++ b/src/main/java/io/mosip/mimoto/controller/PresentationController.java @@ -1,39 +1,60 @@ package io.mosip.mimoto.controller; import io.mosip.mimoto.dto.openid.presentation.PresentationRequestDTO; -import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.InvalidCredentialResourceException; +import io.mosip.mimoto.exception.InvalidVerifierException; +import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.exception.VPNotCreatedException; import io.mosip.mimoto.service.PresentationService; +import jakarta.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RestController; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; @RestController public class PresentationController { @Autowired PresentationService presentationService; - private final Logger logger = LoggerFactory.getLogger(PresentationController.class); + @Value("${mosip.inji.ovp.error.redirect.url}") + String injiOvpErrorRedirectUrl; + + @Value("${mosip.inji.web.redirect.url}") + String injiWebRedirectUrl; + @GetMapping("/authorize") - public void performAuthorization(HttpServletResponse response, @ModelAttribute PresentationRequestDTO presentationRequestDTO) throws IOException, ApiNotAccessibleException { + public void performAuthorization(HttpServletResponse response, @ModelAttribute PresentationRequestDTO presentationRequestDTO) throws IOException { try { logger.info("Started Presentation Authorization in the controller."); String redirectString = presentationService.authorizePresentation(presentationRequestDTO); logger.info("Completed Presentation Authorization in the controller."); response.sendRedirect(redirectString); - } catch (VPNotCreatedException | IOException | ApiNotAccessibleException exception){ - logger.error("Exception Occurred in Authorizing the presentation" + exception); - throw exception; + } catch( InvalidVerifierException exception){ + sendRedirect(response, injiWebRedirectUrl, exception.getErrorCode(), exception.getErrorText()); + } catch(VPNotCreatedException | InvalidCredentialResourceException exception){ + sendRedirect(response, presentationRequestDTO.getRedirect_uri(), exception.getErrorCode(), exception.getErrorText()); + } catch (Exception exception){ + sendRedirect(response, presentationRequestDTO.getRedirect_uri(), ErrorConstants.INTERNAL_SERVER_ERROR.getErrorCode(), ErrorConstants.INTERNAL_SERVER_ERROR.getErrorMessage()); } } - + private void sendRedirect(HttpServletResponse response, String domain, String code, String message) throws IOException { + logger.error("Exception Occurred in Authorizing the presentation"); + String injiVerifyRedirectString = String.format(injiOvpErrorRedirectUrl, + domain, + code, + URLEncoder.encode(message, StandardCharsets.UTF_8)); + response.setStatus(302); + response.sendRedirect(injiVerifyRedirectString); + } } diff --git a/src/main/java/io/mosip/mimoto/dto/ErrorDTO.java b/src/main/java/io/mosip/mimoto/dto/ErrorDTO.java index b10d156e4..4d6a3e894 100644 --- a/src/main/java/io/mosip/mimoto/dto/ErrorDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/ErrorDTO.java @@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonAlias; import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; @@ -13,12 +14,13 @@ * * @param errorcode the errorcode * @param message the message - * + * * @author Rishabh Keshari */ @Data @AllArgsConstructor @NoArgsConstructor +@Builder public class ErrorDTO implements Serializable { private static final long serialVersionUID = 2452990684776944908L; diff --git a/src/main/java/io/mosip/mimoto/dto/openid/datashare/DataShareResponseDTO.java b/src/main/java/io/mosip/mimoto/dto/openid/datashare/DataShareResponseDTO.java index 755b58696..17662916c 100644 --- a/src/main/java/io/mosip/mimoto/dto/openid/datashare/DataShareResponseDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/openid/datashare/DataShareResponseDTO.java @@ -1,8 +1,14 @@ package io.mosip.mimoto.dto.openid.datashare; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; @Data +@Builder +@AllArgsConstructor +@NoArgsConstructor public class DataShareResponseDTO { private String url; private int validForInMinutes; diff --git a/src/main/java/io/mosip/mimoto/dto/openid/datashare/DataShareResponseWrapperDTO.java b/src/main/java/io/mosip/mimoto/dto/openid/datashare/DataShareResponseWrapperDTO.java index b55c50eca..e55c010f0 100644 --- a/src/main/java/io/mosip/mimoto/dto/openid/datashare/DataShareResponseWrapperDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/openid/datashare/DataShareResponseWrapperDTO.java @@ -1,18 +1,23 @@ package io.mosip.mimoto.dto.openid.datashare; import io.mosip.mimoto.dto.ErrorDTO; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; + import javax.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; @Data +@Builder +@AllArgsConstructor +@NoArgsConstructor public class DataShareResponseWrapperDTO { private String id; private String version; private String responsetime; - @NotNull private DataShareResponseDTO dataShare; - private List errors = new ArrayList<>(); } diff --git a/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java b/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java new file mode 100644 index 000000000..d9cdd2679 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java @@ -0,0 +1,24 @@ +package io.mosip.mimoto.exception; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum ErrorConstants { + + INVALID_REQUEST("invalid_request", "Some incorrect parameters in the request"), + UNSUPPORTED_FORMAT("unsupported_format", "No VC of this format is found"), + RESOURCE_NOT_FOUND("resource_not_found", "The requested resource doesn’t exist."), + SERVER_UNAVAILABLE("server_unavailable", "The server is not reachable right now."), + RESOURCE_EXPIRED("resource_expired", "The requested resource expired."), + REQUEST_TIMED_OUT("request_timed_out", "We are unable to process your request right now"), + URI_TOO_LONG("uri_too_long", "Resource URI is too long to be handled"), + INVALID_CLIENT("invalid_client", "The requested client doesn’t match."), + INVALID_REDIRECT_URI("invalid_redirect_uri", "The requested redirect uri doesn’t match."), + INTERNAL_SERVER_ERROR("internal_server_error", "We are unable to process request now"); + + private final String errorCode; + private final String errorMessage; + +} diff --git a/src/main/java/io/mosip/mimoto/exception/InvalidCredentialResourceException.java b/src/main/java/io/mosip/mimoto/exception/InvalidCredentialResourceException.java index 5205a2a45..1efc763b1 100644 --- a/src/main/java/io/mosip/mimoto/exception/InvalidCredentialResourceException.java +++ b/src/main/java/io/mosip/mimoto/exception/InvalidCredentialResourceException.java @@ -15,6 +15,6 @@ public InvalidCredentialResourceException(String errorCode, String errorMessage) } public InvalidCredentialResourceException(String errorMessage) { - super(PlatformErrorMessages.MIMOTO_PGS_INVALID_INPUT_PARAMETER.getCode(), errorMessage); + super(ErrorConstants.RESOURCE_NOT_FOUND.getErrorCode(), errorMessage); } } diff --git a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java index 67fbb4948..38f2d837c 100644 --- a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java +++ b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java @@ -86,8 +86,7 @@ public enum PlatformErrorMessages { MIMOTO_ISSUER_ONBOARDING_EXCEPTION(PlatformConstants.PREFIX + "037", "Issuers Onboarding exception occurred "), INVALID_VERIFIER_ID_EXCEPTION(PlatformConstants.PREFIX + "038", "Invalid Verifier ClientId"), INVALID_VERIFIER_REDIRECT_URI_EXCEPTION(PlatformConstants.PREFIX + "039", "Invalid Redirect Uri"), - NO_CREDENTIALS_MATCH_VP_DEFINITION_EXCEPTION(PlatformConstants.PREFIX + "040", "VP Request Results Empty Credentials"), - INVALID_CREDENTIAL_RESOURCE_URI_EXCEPTION(PlatformConstants.PREFIX + "041", "The Credential Resource is Invalid"); + INVALID_CREDENTIAL_RESOURCE_URI_EXCEPTION(PlatformConstants.PREFIX + "040", "The Credential Resource is Invalid"); /** The error message. */ private final String errorMessage; diff --git a/src/main/java/io/mosip/mimoto/exception/VPNotCreatedException.java b/src/main/java/io/mosip/mimoto/exception/VPNotCreatedException.java index ac074be47..cc15e9548 100644 --- a/src/main/java/io/mosip/mimoto/exception/VPNotCreatedException.java +++ b/src/main/java/io/mosip/mimoto/exception/VPNotCreatedException.java @@ -15,6 +15,6 @@ public VPNotCreatedException(String errorCode, String errorMessage) { } public VPNotCreatedException(String errorMessage) { - super(PlatformErrorMessages.NO_CREDENTIALS_MATCH_VP_DEFINITION_EXCEPTION.getCode(), errorMessage); + super(ErrorConstants.INVALID_REQUEST.getErrorCode(), errorMessage); } } diff --git a/src/main/java/io/mosip/mimoto/service/VerifiersService.java b/src/main/java/io/mosip/mimoto/service/VerifierService.java similarity index 66% rename from src/main/java/io/mosip/mimoto/service/VerifiersService.java rename to src/main/java/io/mosip/mimoto/service/VerifierService.java index 84bd0c77e..87f566d9b 100644 --- a/src/main/java/io/mosip/mimoto/service/VerifiersService.java +++ b/src/main/java/io/mosip/mimoto/service/VerifierService.java @@ -1,14 +1,13 @@ package io.mosip.mimoto.service; import io.mosip.mimoto.dto.openid.VerifierDTO; -import io.mosip.mimoto.dto.openid.VerifiersDTO; import io.mosip.mimoto.dto.openid.presentation.PresentationRequestDTO; import io.mosip.mimoto.exception.ApiNotAccessibleException; import java.io.IOException; import java.util.Optional; -public interface VerifiersService { - Optional getVerifiersByClientId(String clientId) throws ApiNotAccessibleException, IOException; +public interface VerifierService { + Optional getVerifierByClientId(String clientId) throws ApiNotAccessibleException, IOException; void validateVerifier(PresentationRequestDTO presentationRequestDTO) throws ApiNotAccessibleException, IOException; } diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java index 557697c19..772d63f29 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java @@ -16,12 +16,11 @@ import io.mosip.mimoto.dto.IssuersDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.*; -import io.mosip.mimoto.dto.openid.presentation.Format; -import io.mosip.mimoto.dto.openid.presentation.InputDescriptorDTO; -import io.mosip.mimoto.dto.openid.presentation.LDPVc; import io.mosip.mimoto.dto.openid.presentation.PresentationDefinitionDTO; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.IdpException; +import io.mosip.mimoto.exception.InvalidCredentialResourceException; +import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.service.CredentialService; import io.mosip.mimoto.service.IdpService; import io.mosip.mimoto.service.IssuersService; @@ -31,7 +30,6 @@ import io.mosip.mimoto.util.Utilities; import io.mosip.pixelpass.PixelPass; import org.apache.commons.lang.StringUtils; -import org.apache.http.auth.InvalidCredentialsException; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; import org.jetbrains.annotations.NotNull; @@ -54,8 +52,6 @@ import java.util.*; import java.util.stream.Collectors; -import static io.mosip.mimoto.exception.PlatformErrorMessages.INVALID_CREDENTIAL_TYPE_EXCEPTION; - @Service public class CredentialServiceImpl implements CredentialService { @@ -111,7 +107,7 @@ public ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String cred return generatePdfForVerifiableCredentials(vcCredentialResponse, issuerConfig, credentialsSupportedResponseDraft11, dataShareUrl); } - public VCCredentialResponse downloadCredential(String credentialEndpoint, VCCredentialRequest vcCredentialRequest, String accessToken) throws ApiNotAccessibleException, IOException, InvalidCredentialsException { + public VCCredentialResponse downloadCredential(String credentialEndpoint, VCCredentialRequest vcCredentialRequest, String accessToken) throws InvalidCredentialResourceException { VCCredentialResponse vcCredentialResponse = restApiClient.postApi(credentialEndpoint, MediaType.APPLICATION_JSON, vcCredentialRequest, VCCredentialResponse.class, accessToken); logger.debug("VC Credential Response is -> " + vcCredentialResponse); @@ -312,13 +308,13 @@ public CredentialIssuerWellKnownResponseDraft11 getCredentialIssuerWellknown(Str return credentialIssuerWellKnownResponseDraft11; } - public CredentialsSupportedResponseDraft11 getCredentialSupported(CredentialIssuerWellKnownResponseDraft11 credentialIssuerWellKnownResponseDraft11, String credentialType) throws ApiNotAccessibleException, IOException, InvalidCredentialsException { + public CredentialsSupportedResponseDraft11 getCredentialSupported(CredentialIssuerWellKnownResponseDraft11 credentialIssuerWellKnownResponseDraft11, String credentialType) throws InvalidCredentialResourceException { Optional credentialsSupportedResponse = credentialIssuerWellKnownResponseDraft11.getCredentialsSupported().stream() .filter(credentialsSupported -> credentialsSupported.getId().equals(credentialType)) .findFirst(); if (credentialsSupportedResponse.isEmpty()){ logger.error("Invalid credential Type passed - {}", credentialType); - throw new InvalidCredentialsException(INVALID_CREDENTIAL_TYPE_EXCEPTION.getMessage()); + throw new InvalidCredentialResourceException(ErrorConstants.RESOURCE_NOT_FOUND.getErrorMessage()); } return credentialsSupportedResponse.get(); } diff --git a/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java index 911e011c4..5da1d1c47 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java @@ -1,7 +1,15 @@ package io.mosip.mimoto.service.impl; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; import io.mosip.mimoto.dto.openid.datashare.DataShareResponseWrapperDTO; +import io.mosip.mimoto.dto.openid.presentation.PresentationRequestDTO; +import io.mosip.mimoto.exception.InvalidCredentialResourceException; +import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.util.RestApiClient; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.ByteArrayResource; @@ -19,11 +27,19 @@ public class DataShareServiceImpl { @Autowired RestApiClient restApiClient; - @Value("${public.url}") - String publicHostUrl; + @Value("${mosip.data.share.host}") + String dataShareHostUrl; - @Value("${mosip.data.share.url}") - String dataShareUrl; + @Value("${mosip.data.share.create.url}") + String dataShareCreateUrl; + + @Value("${mosip.data.share.create.retry.count}") + Integer maxRetryCount; + + private final Logger logger = LoggerFactory.getLogger(DataShareServiceImpl.class); + + @Autowired + ObjectMapper objectMapper; public String storeDataInDataShare(String data) throws Exception { ByteArrayResource contentsAsResource = new ByteArrayResource(data.getBytes()) { @@ -38,10 +54,43 @@ public String getFilename() { headers.setContentType(MediaType.MULTIPART_FORM_DATA); HttpEntity> requestEntity = new HttpEntity<>(map, headers); - DataShareResponseWrapperDTO dataShareResponseWrapperDTO = restApiClient.postApi(dataShareUrl, MediaType.MULTIPART_FORM_DATA, requestEntity, DataShareResponseWrapperDTO.class); + DataShareResponseWrapperDTO dataShareResponseWrapperDTO = pushCredentialIntoDataShare(requestEntity); URL dataShareUrl = new URL(dataShareResponseWrapperDTO.getDataShare().getUrl()); -// return publicHostUrl + dataShareUrl.getPath(); - return "https://api-internal.dev.mosip.net" + dataShareUrl.getPath(); + return dataShareHostUrl + dataShareUrl.getPath(); + } + + private DataShareResponseWrapperDTO pushCredentialIntoDataShare(HttpEntity> requestEntity) throws Exception { + int attempt =0 ; + DataShareResponseWrapperDTO dataShareResponseWrapperDTO = null; + while(attempt++ < maxRetryCount ){ + try { + dataShareResponseWrapperDTO = restApiClient.postApi(dataShareCreateUrl, MediaType.MULTIPART_FORM_DATA, requestEntity, DataShareResponseWrapperDTO.class); + } catch (Exception e) { + logger.error(attempt + " attempt to push credential failed"); + } + } + if(dataShareResponseWrapperDTO == null){ + throw new InvalidCredentialResourceException( + ErrorConstants.REQUEST_TIMED_OUT.getErrorCode(), + ErrorConstants.REQUEST_TIMED_OUT.getErrorMessage()); + } + return dataShareResponseWrapperDTO; + } + + public VCCredentialResponse downloadCredentialFromDataShare(PresentationRequestDTO presentationRequestDTO) throws JsonProcessingException { + logger.info("Started the Credential Download From DataShare"); + String credentialsResourceUri = presentationRequestDTO.getResource(); + String vcCredentialResponseString = restApiClient.getApi(credentialsResourceUri, String.class); + if (vcCredentialResponseString == null) { + throw new InvalidCredentialResourceException( + ErrorConstants.SERVER_UNAVAILABLE.getErrorCode(), + ErrorConstants.SERVER_UNAVAILABLE.getErrorMessage()); + } + VCCredentialResponse vcCredentialResponse = objectMapper.readValue(vcCredentialResponseString, VCCredentialResponse.class); + if(vcCredentialResponse.getCredential() == null){ + throw new InvalidCredentialResourceException(ErrorConstants.RESOURCE_EXPIRED.getErrorMessage()); + } + return vcCredentialResponse; } } diff --git a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java index 2da129f82..993f72608 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java @@ -6,11 +6,10 @@ import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; import io.mosip.mimoto.dto.openid.presentation.*; import io.mosip.mimoto.exception.ApiNotAccessibleException; -import io.mosip.mimoto.exception.InvalidCredentialResourceException; -import io.mosip.mimoto.exception.PlatformErrorMessages; +import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.exception.VPNotCreatedException; import io.mosip.mimoto.service.PresentationService; -import io.mosip.mimoto.service.VerifiersService; +import io.mosip.mimoto.service.VerifierService; import io.mosip.mimoto.util.RestApiClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,7 +20,10 @@ import java.io.IOException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; -import java.util.*; +import java.util.Base64; +import java.util.Collections; +import java.util.List; +import java.util.UUID; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; @@ -29,7 +31,10 @@ public class PresentationServiceImpl implements PresentationService { @Autowired - VerifiersService verifiersService; + VerifierService verifierService; + + @Autowired + DataShareServiceImpl dataShareService; @Autowired RestApiClient restApiClient; @@ -40,37 +45,39 @@ public class PresentationServiceImpl implements PresentationService { @Value("${mosip.inji.verify.redirect.url}") String injiVerifyRedirectUrl; - @Value("${mosip.data.share.url}") + @Value("${mosip.data.share.host}") String dataShareUrl; + @Value("${server.tomcat.max-http-response-header-size:65536}") + Integer maximumResponseHeaderSize; + private final Logger logger = LoggerFactory.getLogger(PresentationServiceImpl.class); @Override public String authorizePresentation(PresentationRequestDTO presentationRequestDTO) throws ApiNotAccessibleException, IOException { - logger.info("Started the presentation Validation"); - verifiersService.validateVerifier(presentationRequestDTO); - - logger.info("Started the Credential Download From DataShare"); - String credentialsResourceUri = presentationRequestDTO.getResource(); - if(!credentialsResourceUri.contains(dataShareUrl)){ - throw new InvalidCredentialResourceException(PlatformErrorMessages.INVALID_CREDENTIAL_RESOURCE_URI_EXCEPTION.getMessage()); + verifierService.validateVerifier(presentationRequestDTO); + VCCredentialResponse vcCredentialResponse = dataShareService.downloadCredentialFromDataShare(presentationRequestDTO); + + PresentationDefinitionDTO presentationDefinitionDTO; + try { + presentationDefinitionDTO = objectMapper.readValue(presentationRequestDTO.getPresentation_definition(), PresentationDefinitionDTO.class); + if (presentationDefinitionDTO == null) { + throw new VPNotCreatedException(ErrorConstants.INVALID_REQUEST.getErrorMessage()); + } + } catch (IOException ioException) { + throw new VPNotCreatedException(ErrorConstants.INVALID_REQUEST.getErrorMessage()); } - String vcCredentialResponseString = restApiClient.getApi(credentialsResourceUri, String.class); - - logger.info("Started the ObjectMapping"); - VCCredentialResponse vcCredentialResponse = objectMapper.readValue(vcCredentialResponseString, VCCredentialResponse.class); - PresentationDefinitionDTO presentationDefinitionDTO = objectMapper.readValue(presentationRequestDTO.getPresentation_definition(), PresentationDefinitionDTO.class); - - return presentationDefinitionDTO.getInputDescriptors() + logger.info("Started the Constructing VP Token"); + String redirectionString = presentationDefinitionDTO.getInputDescriptors() .stream() .findFirst() - .map( inputDescriptorDTO -> { + .map(inputDescriptorDTO -> { boolean matchingProofTypes = inputDescriptorDTO.getFormat().getLdpVc().getProofTypes() .stream() .anyMatch(proofType -> vcCredentialResponse.getCredential().getProof().getType().equals(proofType)); - if(matchingProofTypes){ + if (matchingProofTypes) { logger.info("Started the Construction of VP token"); try { String vpToken = constructVerifiablePresentationString(vcCredentialResponse.getCredential()); @@ -80,12 +87,18 @@ public String authorizePresentation(PresentationRequestDTO presentationRequestDT Base64.getUrlEncoder().encodeToString(vpToken.getBytes(StandardCharsets.UTF_8)), URLEncoder.encode(presentationSubmission, StandardCharsets.UTF_8)); } catch (JsonProcessingException e) { - throw new RuntimeException(e); + throw new VPNotCreatedException(ErrorConstants.INVALID_REQUEST.getErrorMessage()); } } logger.info("No Credentials Matched the VP request."); - throw new VPNotCreatedException(PlatformErrorMessages.NO_CREDENTIALS_MATCH_VP_DEFINITION_EXCEPTION.getMessage()); - }).orElseThrow(() -> new VPNotCreatedException(PlatformErrorMessages.NO_CREDENTIALS_MATCH_VP_DEFINITION_EXCEPTION.getMessage())); + throw new VPNotCreatedException(ErrorConstants.INVALID_REQUEST.getErrorMessage()); + }).orElseThrow(() -> new VPNotCreatedException(ErrorConstants.INVALID_REQUEST.getErrorMessage())); + if(redirectionString.length() > maximumResponseHeaderSize) { + throw new VPNotCreatedException( + ErrorConstants.URI_TOO_LONG.getErrorCode(), + ErrorConstants.URI_TOO_LONG.getErrorMessage()); + } + return redirectionString; } private String constructVerifiablePresentationString(VCCredentialProperties vcCredentialProperties) throws JsonProcessingException { diff --git a/src/main/java/io/mosip/mimoto/service/impl/VerifiersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java similarity index 56% rename from src/main/java/io/mosip/mimoto/service/impl/VerifiersServiceImpl.java rename to src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java index 4f6693fc9..db1cf0ec4 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/VerifiersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java @@ -1,23 +1,25 @@ package io.mosip.mimoto.service.impl; +import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import io.mosip.mimoto.dto.openid.VerifierDTO; import io.mosip.mimoto.dto.openid.VerifiersDTO; import io.mosip.mimoto.dto.openid.presentation.PresentationRequestDTO; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.InvalidVerifierException; -import io.mosip.mimoto.exception.PlatformErrorMessages; -import io.mosip.mimoto.service.VerifiersService; +import io.mosip.mimoto.exception.ErrorConstants; +import io.mosip.mimoto.service.VerifierService; import io.mosip.mimoto.util.Utilities; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.io.IOException; import java.util.List; import java.util.Optional; @Service -public class VerifiersServiceImpl implements VerifiersService { +public class VerifierServiceImpl implements VerifierService { @Autowired Utilities utilities; @@ -25,8 +27,9 @@ public class VerifiersServiceImpl implements VerifiersService { @Autowired ObjectMapper objectMapper; - @Override - public Optional getVerifiersByClientId(String clientId) throws ApiNotAccessibleException, IOException { + private final Logger logger = LoggerFactory.getLogger(VerifierServiceImpl.class); + + public Optional getVerifierByClientId(String clientId) throws ApiNotAccessibleException, JsonProcessingException { String trustedVerifiersJsonValue = utilities.getTrustedVerifiersJsonValue(); if (trustedVerifiersJsonValue == null) { throw new ApiNotAccessibleException(); @@ -35,16 +38,21 @@ public Optional getVerifiersByClientId(String clientId) throws ApiN return verifiersDTO.getVerifiers().stream().filter(verifier -> verifier.getClientId().equals(clientId)).findFirst(); } @Override - public void validateVerifier(PresentationRequestDTO presentationRequestDTO) throws ApiNotAccessibleException, IOException { - getVerifiersByClientId(presentationRequestDTO.getClient_id()).ifPresentOrElse( + public void validateVerifier(PresentationRequestDTO presentationRequestDTO) throws ApiNotAccessibleException, JsonProcessingException { + logger.info("Started the presentation Validation"); + getVerifierByClientId(presentationRequestDTO.getClient_id()).ifPresentOrElse( (verifierDTO) -> { List registeredRedirectUri = verifierDTO.getRedirectUri(); if(!registeredRedirectUri.contains(presentationRequestDTO.getRedirect_uri())){ - throw new InvalidVerifierException(PlatformErrorMessages.INVALID_VERIFIER_REDIRECT_URI_EXCEPTION.getMessage()); + throw new InvalidVerifierException( + ErrorConstants.INVALID_REDIRECT_URI.getErrorCode(), + ErrorConstants.INVALID_REDIRECT_URI.getErrorMessage()); } }, () -> { - throw new InvalidVerifierException(PlatformErrorMessages.INVALID_VERIFIER_ID_EXCEPTION.getMessage()); + throw new InvalidVerifierException( + ErrorConstants.INVALID_CLIENT.getErrorCode(), + ErrorConstants.INVALID_CLIENT.getErrorMessage()); } ); } diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 47ee1337e..94ff3ed9b 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -208,13 +208,24 @@ mosip.oidc.p12.filename=oidckeystore.p12 mosip.oidc.p12.password=password mosip.oidc.p12.path=certs/ -mosip.inji.web.host=http://injiweb.dev1.mosip.net/v1/mimoto -mosip.inji.web.authorize.url=INJI_OVP://payload=${mosip.inji.web.host}/presentation/authorize?response_type=vp_token&resource=%s&presentation_definition=%s + +#OpenId4VP related Configuration START + +#Inji Web Config +mosip.inji.web.host=https://injiweb.dev1.mosip.net +mosip.inji.web.authorize.url=INJI_OVP://payload=${mosip.inji.web.host}/authorize?response_type=vp_token&resource=%s&presentation_definition=%s +mosip.inji.web.redirect.url=${mosip.inji.web.host}/authorize + +#Inji Verify Config mosip.inji.verify.redirect.url=%s#vp_token=%s&presentation_submission=%s -#mosip.data.share.url=${public.internet.url}/v1/datashare/create/static-policyid/static-subscriberid -mosip.data.share.url=https://api-internal.dev.mosip.net/v1/datashare/create/static-policyid/static-subscriberid +mosip.inji.ovp.error.redirect.url=%s?error=%s&error_description=%s +#DataShare Config +mosip.data.share.host=https://datashare-inji.dev1.mosip.net +mosip.data.share.create.url=${mosip.data.share.host}/v1/datashare/create/static-policyid/static-subscriberid +mosip.data.share.create.retry.count=3 +#OpenId4VP related Configuration END diff --git a/src/main/resources/bootstrap.properties b/src/main/resources/bootstrap.properties index 9805fe409..992e2a0b4 100644 --- a/src/main/resources/bootstrap.properties +++ b/src/main/resources/bootstrap.properties @@ -9,6 +9,7 @@ management.endpoints.web.exposure.include=info,health,refresh server.port=8088 server.servlet.context-path=/v1/mimoto +server.tomcat.max-http-response-header-size=65536 health.config.enabled=false openapi.info.title=${spring.application.name} diff --git a/src/test/java/io/mosip/mimoto/service/DataShareServiceTest.java b/src/test/java/io/mosip/mimoto/service/DataShareServiceTest.java new file mode 100644 index 000000000..3d844800e --- /dev/null +++ b/src/test/java/io/mosip/mimoto/service/DataShareServiceTest.java @@ -0,0 +1,100 @@ +package io.mosip.mimoto.service; + +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; +import io.mosip.mimoto.dto.openid.datashare.DataShareResponseWrapperDTO; +import io.mosip.mimoto.dto.openid.presentation.PresentationRequestDTO; +import io.mosip.mimoto.exception.InvalidCredentialResourceException; +import io.mosip.mimoto.service.impl.DataShareServiceImpl; +import io.mosip.mimoto.util.RestApiClient; +import io.mosip.mimoto.util.TestUtilities; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.http.MediaType; +import org.springframework.test.util.ReflectionTestUtils; + +@RunWith(MockitoJUnitRunner.class) + +public class DataShareServiceTest { + + @Mock + RestApiClient restApiClient; + @Mock + ObjectMapper objectMapper; + @InjectMocks + DataShareServiceImpl dataShareService; + + @Before + public void setUp(){ + ReflectionTestUtils.setField(dataShareService, "dataShareHostUrl", "https://test-url"); + ReflectionTestUtils.setField(dataShareService, "dataShareCreateUrl", "https://test-url"); + ReflectionTestUtils.setField(dataShareService, "maxRetryCount", 1); + } + + @Test + public void storeDataInDataShareWhenProperDataIsPassed() throws Exception { + DataShareResponseWrapperDTO dataShareResponseWrapperDTO = TestUtilities.getDataShareResponseWrapperDTO(); + Mockito.when(restApiClient.postApi(Mockito.anyString(), Mockito.eq(MediaType.MULTIPART_FORM_DATA), Mockito.any(), Mockito.eq(DataShareResponseWrapperDTO.class))) + .thenReturn(dataShareResponseWrapperDTO); + String actualDataShareLink = dataShareService.storeDataInDataShare("SampleData"); + String expectedDataShareLink = dataShareResponseWrapperDTO.getDataShare().getUrl(); + Assert.assertEquals(expectedDataShareLink, actualDataShareLink); + } + + @Test(expected = InvalidCredentialResourceException.class) + public void throwRequestTimedOutExceptionWhenMaxCountIsReached() throws Exception { + ReflectionTestUtils.setField(dataShareService, "maxRetryCount", 0); + dataShareService.storeDataInDataShare("SampleData"); + } + + @Test(expected = InvalidCredentialResourceException.class) + public void throwServiceUnavailableExceptionWhenCredentialPushIsNotDone() throws Exception { + ReflectionTestUtils.setField(dataShareService, "maxRetryCount", 1); + Mockito.when(restApiClient.postApi(Mockito.anyString(), Mockito.eq(MediaType.MULTIPART_FORM_DATA), Mockito.any(), Mockito.eq(DataShareResponseWrapperDTO.class))) + .thenThrow(InvalidCredentialResourceException.class); + dataShareService.storeDataInDataShare("SampleData"); + } + + @Test + public void downloadCredentialWhenRequestIsProper() throws Exception { + PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); + VCCredentialResponse vcCredentialResponseDTO = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); + String credentialString = TestUtilities.getObjectAsString(vcCredentialResponseDTO); + Mockito.when(restApiClient.getApi(Mockito.eq("test_resource"), Mockito.eq(String.class))) + .thenReturn(credentialString); + Mockito.when(objectMapper.readValue(Mockito.eq(credentialString), Mockito.eq(VCCredentialResponse.class))) + .thenReturn(vcCredentialResponseDTO); + VCCredentialResponse actualVCCredentialResponse = dataShareService.downloadCredentialFromDataShare(presentationRequestDTO); + Assert.assertEquals(vcCredentialResponseDTO, actualVCCredentialResponse); + } + + @Test(expected = InvalidCredentialResourceException.class) + public void throwServiceUnavailableExceptionWhenCredentialIsNotFetched() throws Exception { + PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); + VCCredentialResponse vcCredentialResponseDTO = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); + Mockito.when(restApiClient.getApi(Mockito.eq("test_resource"), Mockito.eq(String.class))) + .thenReturn(null); + dataShareService.downloadCredentialFromDataShare(presentationRequestDTO); + } + + @Test(expected = InvalidCredentialResourceException.class) + public void throwResourceExpiredExceptionWhenCredentialIsExpired() throws Exception { + PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); + VCCredentialResponse vcCredentialResponseDTO = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); + String credentialString = TestUtilities.getObjectAsString(vcCredentialResponseDTO); + Mockito.when(restApiClient.getApi(Mockito.eq("test_resource"), Mockito.eq(String.class))) + .thenReturn(credentialString); + vcCredentialResponseDTO.setCredential(null); + Mockito.when(objectMapper.readValue(Mockito.eq(credentialString), Mockito.eq(VCCredentialResponse.class))) + .thenReturn(vcCredentialResponseDTO); + dataShareService.downloadCredentialFromDataShare(presentationRequestDTO); + + } + +} diff --git a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java index a85c0d1f5..79e99bfaf 100644 --- a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java @@ -9,8 +9,9 @@ import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.InvalidVerifierException; import io.mosip.mimoto.exception.VPNotCreatedException; +import io.mosip.mimoto.service.impl.DataShareServiceImpl; import io.mosip.mimoto.service.impl.PresentationServiceImpl; -import io.mosip.mimoto.service.impl.VerifiersServiceImpl; +import io.mosip.mimoto.service.impl.VerifierServiceImpl; import io.mosip.mimoto.util.RestApiClient; import io.mosip.mimoto.util.TestUtilities; import org.junit.Before; @@ -31,10 +32,12 @@ @RunWith(MockitoJUnitRunner.class) public class PresentationServiceTest { @Mock - VerifiersService verifiersService = new VerifiersServiceImpl(); + VerifierService verifierService = new VerifierServiceImpl(); @Mock RestApiClient restApiClient; @Mock + DataShareServiceImpl dataShareService; + @Mock ObjectMapper objectMapper; @InjectMocks @@ -45,6 +48,7 @@ public void setup() throws JsonProcessingException { PresentationDefinitionDTO presentationDefinitionDTO = TestUtilities.getPresentationDefinitionDTO(); ReflectionTestUtils.setField(presentationService, "injiVerifyRedirectUrl", "%s#vp_token=%s&presentation_submission=%s"); ReflectionTestUtils.setField(presentationService, "dataShareUrl", "test_resource"); + ReflectionTestUtils.setField(presentationService, "maximumResponseHeaderSize", 65536); when(objectMapper.readValue(eq(TestUtilities.getObjectAsString(presentationDefinitionDTO)), eq(PresentationDefinitionDTO.class))).thenReturn(presentationDefinitionDTO); when(objectMapper.writeValueAsString(any())).thenReturn("test-data"); @@ -52,21 +56,19 @@ public void setup() throws JsonProcessingException { @Test(expected = InvalidVerifierException.class) public void throwInvalidVerifierExceptionWhenClientIdPassedIsIncorrect() throws ApiNotAccessibleException, IOException { PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); - doThrow(InvalidVerifierException.class).when(verifiersService).validateVerifier(presentationRequestDTO); + doThrow(InvalidVerifierException.class).when(verifierService).validateVerifier(presentationRequestDTO); presentationService.authorizePresentation(TestUtilities.getPresentationRequestDTO()); } @Test public void credentialProofMatchingWithVPRequest() throws Exception { - String mockResponse = TestUtilities.getObjectAsString(TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020")); VCCredentialResponse vcCredentialResponse = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); VerifiablePresentationDTO verifiablePresentationDTO = TestUtilities.getVerifiablePresentationDTO(); PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); - doNothing().when(verifiersService).validateVerifier(eq(presentationRequestDTO)); - when(restApiClient.getApi(eq(presentationRequestDTO.getResource()), eq(String.class))).thenReturn(mockResponse); - when(objectMapper.readValue(eq(TestUtilities.getObjectAsString(vcCredentialResponse)), eq(VCCredentialResponse.class))).thenReturn(vcCredentialResponse); + doNothing().when(verifierService).validateVerifier(eq(presentationRequestDTO)); + when(dataShareService.downloadCredentialFromDataShare(eq(presentationRequestDTO))).thenReturn(vcCredentialResponse); when(objectMapper.readValue(eq("test-data"), eq(VerifiablePresentationDTO.class))).thenReturn(verifiablePresentationDTO); String actualRedirectUrl = presentationService.authorizePresentation(TestUtilities.getPresentationRequestDTO()); @@ -77,14 +79,11 @@ public void credentialProofMatchingWithVPRequest() throws Exception { @Test(expected = VPNotCreatedException.class) public void credentialProofMismatchWithVPRequest() throws ApiNotAccessibleException, IOException { - - String mockResponse = TestUtilities.getObjectAsString(TestUtilities.getVCCredentialResponseDTO("RSASignature2020")); VCCredentialResponse vcCredentialResponse = TestUtilities.getVCCredentialResponseDTO("RSASignature2020"); PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); - doNothing().when(verifiersService).validateVerifier(eq(presentationRequestDTO)); - when(restApiClient.getApi(eq(presentationRequestDTO.getResource()), eq(String.class))).thenReturn(mockResponse); - when(objectMapper.readValue(eq(TestUtilities.getObjectAsString(vcCredentialResponse)), eq(VCCredentialResponse.class))).thenReturn(vcCredentialResponse); + doNothing().when(verifierService).validateVerifier(eq(presentationRequestDTO)); + when(dataShareService.downloadCredentialFromDataShare(eq(presentationRequestDTO))).thenReturn(vcCredentialResponse); presentationService.authorizePresentation(TestUtilities.getPresentationRequestDTO()); } diff --git a/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java b/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java index 059060a22..3f5f008ad 100644 --- a/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java @@ -7,7 +7,7 @@ import io.mosip.mimoto.dto.openid.presentation.PresentationRequestDTO; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.InvalidVerifierException; -import io.mosip.mimoto.service.impl.VerifiersServiceImpl; +import io.mosip.mimoto.service.impl.VerifierServiceImpl; import io.mosip.mimoto.util.TestUtilities; import io.mosip.mimoto.util.Utilities; import org.junit.Before; @@ -32,7 +32,7 @@ public class VerifierServiceTest { @Mock ObjectMapper objectMapper; @InjectMocks - VerifiersServiceImpl verifiersService; + VerifierServiceImpl verifiersService; @Before public void setUp() throws JsonProcessingException { @@ -44,14 +44,14 @@ public void setUp() throws JsonProcessingException { @Test public void getCorrectVerifierWhenCorrectClientIdIsPassed() throws ApiNotAccessibleException, IOException { - Optional verifierDTO = verifiersService.getVerifiersByClientId("test-clientId"); + Optional verifierDTO = verifiersService.getVerifierByClientId("test-clientId"); assertNotNull(verifierDTO.get()); assertEquals(verifierDTO.get().getClientId(), "test-clientId"); } @Test public void getNullWhenInvalidClientIdIsPassed() throws ApiNotAccessibleException, IOException { - Optional verifierDTO = verifiersService.getVerifiersByClientId("test-clientId2"); + Optional verifierDTO = verifiersService.getVerifierByClientId("test-clientId2"); assertTrue(verifierDTO.isEmpty()); } diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index d1c60eb26..064856f3f 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -3,11 +3,14 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import io.mosip.mimoto.dto.DisplayDTO; +import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.LogoDTO; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.dto.openid.VerifierDTO; import io.mosip.mimoto.dto.openid.VerifiersDTO; +import io.mosip.mimoto.dto.openid.datashare.DataShareResponseDTO; +import io.mosip.mimoto.dto.openid.datashare.DataShareResponseWrapperDTO; import io.mosip.mimoto.dto.openid.presentation.*; import java.util.*; @@ -271,4 +274,21 @@ public static String getObjectAsString(Object object) throws JsonProcessingExcep ObjectMapper objectMapper = new ObjectMapper(); return objectMapper.writeValueAsString(object); } + + public static DataShareResponseWrapperDTO getDataShareResponseWrapperDTO(){ + ErrorDTO errorDTO = ErrorDTO.builder().errorCode("test-errorCode").errorMessage("test-errorMessage").build(); + DataShareResponseDTO dataShareResponseDTO = DataShareResponseDTO.builder() + .url("https://test-url") + .validForInMinutes(1) + .transactionsAllowed(1) + .policyId("static-policyid") + .subscriberId("static-subscriberId").build(); + + return DataShareResponseWrapperDTO.builder() + .id("test-id") + .version("test-version") + .responsetime("test-responsetime") + .dataShare(dataShareResponseDTO) + .errors(Collections.singletonList(errorDTO)).build(); + } } diff --git a/src/test/resources/application-test.properties b/src/test/resources/application-test.properties index ce816f041..f56a0d342 100644 --- a/src/test/resources/application-test.properties +++ b/src/test/resources/application-test.properties @@ -20,5 +20,21 @@ mosip.oidc.p12.filename=oidckeystore.p12 mosip.oidc.p12.password=5YBx6QT2wbY8Ls6w mosip.oidc.p12.path=certs/ + +#OpenId4VP related Configuration START + +#Inji Web Config +mosip.inji.web.host=https://injiweb.dev1.mosip.net +mosip.inji.web.authorize.url=INJI_OVP://payload=${mosip.inji.web.host}/authorize?response_type=vp_token&resource=%s&presentation_definition=%s +mosip.inji.web.redirect.url=${mosip.inji.web.host}/authorize + +#Inji Verify Config mosip.inji.verify.redirect.url=%s#vp_token=%s&presentation_submission=%s -mosip.data.share.url=https://api-internal.dev.mosip.net/v1/datashare/create/static-policyid/static-subscriberid +mosip.inji.ovp.error.redirect.url=%s?error=%s&error_description=%s + +#DataShare Config +mosip.data.share.host=https://datashare-inji.dev1.mosip.net +mosip.data.share.create.url=${mosip.data.share.host}/v1/datashare/create/static-policyid/static-subscriberid +mosip.data.share.create.retry.count=3 + +#OpenId4VP related Configuration END From f5fd35305202d32af43e5bf262a4a652e53aedb9 Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Thu, 1 Aug 2024 18:20:39 +0530 Subject: [PATCH 196/860] MOSIP-33845 Signed-off-by: Nandhukumar --- .../config/idaCertDataDeleteQueries.txt | 8 ++++++++ .../config/idaDeleteQueriesForEsignet.txt | 8 -------- ...t.txt => keyManagerCertDataDeleteQueries.txt} | 16 ++++++++-------- .../config/masterDataCertDataDeleteQueries.txt | 8 ++++++++ .../config/masterDataDeleteQueriesForEsignet.txt | 8 -------- 5 files changed, 24 insertions(+), 24 deletions(-) create mode 100644 apitest/src/main/resources/config/idaCertDataDeleteQueries.txt delete mode 100644 apitest/src/main/resources/config/idaDeleteQueriesForEsignet.txt rename apitest/src/main/resources/config/{keyManagerDataDeleteQueriesForEsignet.txt => keyManagerCertDataDeleteQueries.txt} (80%) create mode 100644 apitest/src/main/resources/config/masterDataCertDataDeleteQueries.txt delete mode 100644 apitest/src/main/resources/config/masterDataDeleteQueriesForEsignet.txt diff --git a/apitest/src/main/resources/config/idaCertDataDeleteQueries.txt b/apitest/src/main/resources/config/idaCertDataDeleteQueries.txt new file mode 100644 index 000000000..c16ccc493 --- /dev/null +++ b/apitest/src/main/resources/config/idaCertDataDeleteQueries.txt @@ -0,0 +1,8 @@ +##### DB queries to be executed to tear down the data used and generated during the test rig run + +delete from ida.ca_cert_store WHERE cert_subject LIKE '%O=mimoto_pid%' +delete from ida.ca_cert_store WHERE cert_subject LIKE '%O=mimoto_ekyc_pid%' +delete from ida.ca_cert_store WHERE cert_subject LIKE '%O=mimoto_device_pid%' +delete from ida.ca_cert_store WHERE cert_subject LIKE '%O=mimoto_ftm_pid%' +delete from ida.ca_cert_store WHERE cert_subject LIKE '%O=partnernameforautomationesi%' +delete from ida.ca_cert_store WHERE cert_subject LIKE '%O=partnernameforesignet%' \ No newline at end of file diff --git a/apitest/src/main/resources/config/idaDeleteQueriesForEsignet.txt b/apitest/src/main/resources/config/idaDeleteQueriesForEsignet.txt deleted file mode 100644 index 0b683afb8..000000000 --- a/apitest/src/main/resources/config/idaDeleteQueriesForEsignet.txt +++ /dev/null @@ -1,8 +0,0 @@ -##### DB queries to be executed to tear down the data used and generated during the test rig run - -delete from ida.ca_cert_store WHERE cert_subject LIKE '%O=mosip_partnerorg%' -delete from ida.ca_cert_store WHERE cert_subject LIKE '%O=mosip_ekyc_partner%' -delete from ida.ca_cert_store WHERE cert_subject LIKE '%O=mosip_deviceorg%' -delete from ida.ca_cert_store WHERE cert_subject LIKE '%O=mosip_ftmorg%' -delete from ida.ca_cert_store WHERE cert_subject LIKE '%O=partnernameforautomationesi%' -delete from ida.ca_cert_store WHERE cert_subject LIKE '%O=partnernameforesignet%' \ No newline at end of file diff --git a/apitest/src/main/resources/config/keyManagerDataDeleteQueriesForEsignet.txt b/apitest/src/main/resources/config/keyManagerCertDataDeleteQueries.txt similarity index 80% rename from apitest/src/main/resources/config/keyManagerDataDeleteQueriesForEsignet.txt rename to apitest/src/main/resources/config/keyManagerCertDataDeleteQueries.txt index da5d261d0..60a12aebe 100644 --- a/apitest/src/main/resources/config/keyManagerDataDeleteQueriesForEsignet.txt +++ b/apitest/src/main/resources/config/keyManagerCertDataDeleteQueries.txt @@ -1,14 +1,14 @@ ##### DB queries to be executed to tear down the data used and generated during the test rig run -delete from mosip_keymgr.keymgr.ca_cert_store WHERE cert_subject LIKE '%O=mosip_partnerorg%' -delete from mosip_keymgr.keymgr.ca_cert_store WHERE cert_subject LIKE '%O=mosip_ekyc_partner%' -delete from mosip_keymgr.keymgr.ca_cert_store WHERE cert_subject LIKE '%O=mosip_deviceorg%' -delete from mosip_keymgr.keymgr.ca_cert_store WHERE cert_subject LIKE '%O=mosip_ftmorg%' +delete from mosip_keymgr.keymgr.ca_cert_store WHERE cert_subject LIKE '%O=mimoto_pid%' +delete from mosip_keymgr.keymgr.ca_cert_store WHERE cert_subject LIKE '%O=mimoto_ekyc_pid%' +delete from mosip_keymgr.keymgr.ca_cert_store WHERE cert_subject LIKE '%O=mimoto_device_pid%' +delete from mosip_keymgr.keymgr.ca_cert_store WHERE cert_subject LIKE '%O=mimoto_ftm_pid%' delete from mosip_keymgr.keymgr.ca_cert_store WHERE cert_subject LIKE '%O=partnernameforautomationesi%' delete from mosip_keymgr.keymgr.ca_cert_store WHERE cert_subject LIKE '%O=partnernameforesignet%' -delete from mosip_keymgr.keymgr.partner_cert_store WHERE cert_subject LIKE '%O=mosip_partnerorg%' -delete from mosip_keymgr.keymgr.partner_cert_store WHERE cert_subject LIKE '%O=mosip_ekyc_partner%' -delete from mosip_keymgr.keymgr.partner_cert_store WHERE cert_subject LIKE '%O=mosip_deviceorg%' -delete from mosip_keymgr.keymgr.partner_cert_store WHERE cert_subject LIKE '%O=mosip_ftmorg%' +delete from mosip_keymgr.keymgr.partner_cert_store WHERE cert_subject LIKE '%O=mimoto_pid%' +delete from mosip_keymgr.keymgr.partner_cert_store WHERE cert_subject LIKE '%O=mimoto_ekyc_pid%' +delete from mosip_keymgr.keymgr.partner_cert_store WHERE cert_subject LIKE '%O=mimoto_device_pid%' +delete from mosip_keymgr.keymgr.partner_cert_store WHERE cert_subject LIKE '%O=mimoto_ftm_pid%' delete from mosip_keymgr.keymgr.partner_cert_store WHERE cert_subject LIKE '%O=partnernameforautomationesi%' delete from mosip_keymgr.keymgr.partner_cert_store WHERE cert_subject LIKE '%O=partnernameforesignet%' \ No newline at end of file diff --git a/apitest/src/main/resources/config/masterDataCertDataDeleteQueries.txt b/apitest/src/main/resources/config/masterDataCertDataDeleteQueries.txt new file mode 100644 index 000000000..b95b8e0bf --- /dev/null +++ b/apitest/src/main/resources/config/masterDataCertDataDeleteQueries.txt @@ -0,0 +1,8 @@ +##### DB queries to be executed to tear down the data used and generated during the test rig run + +delete from master.ca_cert_store WHERE cert_subject LIKE '%O=mimoto_pid%' +delete from master.ca_cert_store WHERE cert_subject LIKE '%O=mimoto_ekyc_pid%' +delete from master.ca_cert_store WHERE cert_subject LIKE '%O=mimoto_device_pid%' +delete from master.ca_cert_store WHERE cert_subject LIKE '%O=mimoto_ftm_pid%' +delete from master.ca_cert_store WHERE cert_subject LIKE '%O=partnernameforautomationesi%' +delete from master.ca_cert_store WHERE cert_subject LIKE '%O=partnernameforesignet%' \ No newline at end of file diff --git a/apitest/src/main/resources/config/masterDataDeleteQueriesForEsignet.txt b/apitest/src/main/resources/config/masterDataDeleteQueriesForEsignet.txt deleted file mode 100644 index 736aa7684..000000000 --- a/apitest/src/main/resources/config/masterDataDeleteQueriesForEsignet.txt +++ /dev/null @@ -1,8 +0,0 @@ -##### DB queries to be executed to tear down the data used and generated during the test rig run - -delete from master.ca_cert_store WHERE cert_subject LIKE '%O=mosip_partnerorg%' -delete from master.ca_cert_store WHERE cert_subject LIKE '%O=mosip_ekyc_partner%' -delete from master.ca_cert_store WHERE cert_subject LIKE '%O=mosip_deviceorg%' -delete from master.ca_cert_store WHERE cert_subject LIKE '%O=mosip_ftmorg%' -delete from master.ca_cert_store WHERE cert_subject LIKE '%O=partnernameforautomationesi%' -delete from master.ca_cert_store WHERE cert_subject LIKE '%O=partnernameforesignet%' \ No newline at end of file From 7be5444a562c1cc35db1e0dcce0aa97787ca12ba Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Fri, 2 Aug 2024 12:53:18 +0530 Subject: [PATCH 197/860] MOSIP-33845 Signed-off-by: Nandhukumar --- .../apirig/testrunner/MosipTestRunner.java | 47 ++----------------- 1 file changed, 4 insertions(+), 43 deletions(-) diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java b/apitest/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java index 5d12f4beb..ebd839604 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java @@ -86,55 +86,16 @@ public static void main(String[] arg) { List localLanguageList = new ArrayList<>(BaseTestCase.getLanguageList()); AdminTestUtil.getLocationData(); - - String partnerKeyURL = ""; - String updatedPartnerKeyURL = ""; - String ekycPartnerKeyURL = ""; - + + // Generate device certificates to be consumed by Mock-MDS PartnerRegistration.deleteCertificates(); - CertificateGenerationUtil.getThumbprints(); AdminTestUtil.createAndPublishPolicy(); AdminTestUtil.createEditAndPublishPolicy(); - partnerKeyURL = PartnerRegistration.generateAndGetPartnerKeyUrl(); - updatedPartnerKeyURL = PartnerRegistration.generateAndGetUpdatedPartnerKeyUrl(); + PartnerRegistration.deviceGeneration(); - AdminTestUtil.createAndPublishPolicyForKyc(); - ekycPartnerKeyURL = PartnerRegistration.generateAndGetEkycPartnerKeyUrl(); - BiometricDataProvider.generateBiometricTestData("Registration"); - - if (BaseTestCase.listOfModules.contains(GlobalConstants.MASTERDATA)) { - AdminTestUtil.getHierarchyZoneCode(); - BaseTestCase.mapUserToZone(); - BaseTestCase.mapZone(); - AdminTestUtil.getLocationLevelData(); - AdminTestUtil.getLocationData(); - AdminTestUtil.getZoneName(); - - - - for (int i = 0; i < localLanguageList.size(); i++) { - BaseTestCase.languageList.clear(); - BaseTestCase.languageList.add(localLanguageList.get(i)); - - DBManager.clearMasterDbData(); - BaseTestCase.currentModule = GlobalConstants.MASTERDATA; - BaseTestCase.setReportName("masterdata-" + localLanguageList.get(i)); - startTestRunner(); - - } - - } else if (BaseTestCase.listOfModules.contains("auth") - || BaseTestCase.listOfModules.contains(GlobalConstants.ESIGNET)) { - if (partnerKeyURL.isEmpty()) - // if (partnerKeyURL.isEmpty() || ekycPartnerKeyURL.isEmpty()) - LOGGER.error("partnerKeyURL is null"); - else - startTestRunner(); - } else { - startTestRunner(); - } + startTestRunner(); } catch (Exception e) { LOGGER.error("Exception " + e.getMessage()); } From 1fc35fe9e7f6c33bb668172db10bceecb65ec946 Mon Sep 17 00:00:00 2001 From: santhoshsunder Date: Mon, 5 Aug 2024 12:38:44 +0530 Subject: [PATCH 198/860] INJIMOB-1568 added description for the apis Signed-off-by: santhoshsunder --- .../mimoto/AddIdentity/AddIdentity.yml | 8 +- .../AidGetIndividualId/AidGetIndividualId.yml | 10 +- .../mimoto/AuthLock/createAuthLock.yml | 12 +- .../mimoto/AuthUnLock/createAuthUnLock.yml | 8 +- .../AuthenticateUser/AuthenticateUser.yml | 2 +- .../AuthorizationCode/AuthorizationCode.yml | 2 +- .../mimoto/BindingOtp/BindingOtp.yml | 72 ++++---- .../CredentialCheckStatus.yml | 6 +- .../DownloadCredential/DownloadCredential.yml | 6 +- .../DownloadWithReqid/DownloadWithReqid.yml | 4 +- .../RequestCredentials/ReqCredential.yml | 12 +- .../DownloadIssuerCredential.yml | 10 +- .../mimoto/GenerateVID/createGenerateVID.yml | 12 +- .../GetAllCredentialTypes.yml | 6 +- .../mimoto/GetAllIssuers/GetAllIssuers.yml | 6 +- .../OAuthDetailsRequest.yml | 2 +- .../main/resources/mimoto/SendOTP/SendOTP.yml | 6 +- .../resources/mimoto/SendOTP1/SendOTP.yml | 8 +- .../mimoto/SendOTPUIN/createSendOTP.yml | 2 +- .../mimoto/SendOtpForVid/createSendOTP.yml | 2 +- .../mimoto/ValidateOTP/ValidateOTP.yml | 24 +-- .../mimoto/WalletBinding/WalletBinding.yml | 156 +++++++++--------- 22 files changed, 188 insertions(+), 188 deletions(-) diff --git a/apitest/src/main/resources/mimoto/AddIdentity/AddIdentity.yml b/apitest/src/main/resources/mimoto/AddIdentity/AddIdentity.yml index 9ac7340df..d21b4ea28 100644 --- a/apitest/src/main/resources/mimoto/AddIdentity/AddIdentity.yml +++ b/apitest/src/main/resources/mimoto/AddIdentity/AddIdentity.yml @@ -1,7 +1,7 @@ AddIdentity: Mimoto_AddIdentity_withValidParameters_smoke_Pos: endPoint: /idrepository/v1/identity/ - description : Tring to addidentity with all valid parameters + description: Creating a new identity with all valid parameters role: idrepo restMethod: post inputTemplate: mimoto/AddIdentity/addIdentity_$LANGNUMBER$ @@ -29,7 +29,7 @@ AddIdentity: Mimoto_AddIdentity_Binding_smoke_Pos: endPoint: /idrepository/v1/identity/ - description : Tring to addidentity for binding with all valid parameters + description: Creating a new identity with all valid parameters for Binding APIs role: idrepo restMethod: post inputTemplate: mimoto/AddIdentity/addIdentity_$LANGNUMBER$ @@ -57,7 +57,7 @@ AddIdentity: Mimoto_AddIdentity_without_FaceDate_CBEFF_smoke_Pos: endPoint: /idrepository/v1/identity/ - description : Tring to addidentity without FaceDate + description: Creating a new identity UIN with out face data role: idrepo restMethod: post inputTemplate: mimoto/AddIdentity/addIdentity_$LANGNUMBER$ @@ -89,7 +89,7 @@ AddIdentity: Mimoto_AddIdentity_downloadIssuerCredential_smoke_Pos: endPoint: /idrepository/v1/identity/ - description : Tring to addidentity for downloading issuer credential + description: Creating a new identity for downloading issuer credential role: idrepo restMethod: post inputTemplate: mimoto/AddIdentity/addIdentity_$LANGNUMBER$ diff --git a/apitest/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml b/apitest/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml index 907a80dbc..c44eca5b1 100644 --- a/apitest/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml +++ b/apitest/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml @@ -1,7 +1,7 @@ AidGetIndividualId: Mimoto_AidGetIndividualId_Getting_With_Valid_UIN_All: endPoint: /residentmobileapp/aid/get-individual-id - description : Tring to get individualID with valid AID + description: Generating AID status with valid AID role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -27,7 +27,7 @@ AidGetIndividualId: Mimoto_AidGetIndividualId_Getting_With_Invalid_AID_Neg: endPoint: /residentmobileapp/aid/get-individual-id - description : Tring to get individualID with invalid AID + description: Generating individualID with invalid AID role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -57,7 +57,7 @@ AidGetIndividualId: Mimoto_AidGetIndividualId_Getting_With_Invalid_Otp_Neg: endPoint: /residentmobileapp/aid/get-individual-id - description : Tring to get individualID with Invalid OTP + description: Generating individualID with Invalid OTP role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -87,7 +87,7 @@ AidGetIndividualId: Mimoto_AidGetIndividualId_Getting_With_Valid_Otp_All: endPoint: /residentmobileapp/aid/get-individual-id - description : Tring to get individualID with valid OTP + description: Generating individualID with valid OTP role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -113,7 +113,7 @@ AidGetIndividualId: Mimoto_AidGetIndividualId_Getting_With_Invalid_lenght_Of_AID_Neg: endPoint: /residentmobileapp/aid/get-individual-id - description : Tring to get individualID with invalid lengh of AID + description: Generating individualID with invalid lengh of AID role: resident checkErrorsOnlyInResponse: true restMethod: post diff --git a/apitest/src/main/resources/mimoto/AuthLock/createAuthLock.yml b/apitest/src/main/resources/mimoto/AuthLock/createAuthLock.yml index 21e979ac8..1cd85d8b7 100644 --- a/apitest/src/main/resources/mimoto/AuthLock/createAuthLock.yml +++ b/apitest/src/main/resources/mimoto/AuthLock/createAuthLock.yml @@ -1,7 +1,7 @@ AuthLock: Mimoto_AuthLock_Valid_UIN_All: endPoint: /residentmobileapp/req/auth/lock - description : Tring to lock a credential with valid UIN + description: Auth lock a particular UIN with valid parameters role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -29,7 +29,7 @@ AuthLock: }' Mimoto_AuthLock_InValid_Otp_All: endPoint: /residentmobileapp/req/auth/lock - description : Tring to lock a credential with invalid OTP + description: Auth Lock a particular UIN with invalid OTP role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -62,7 +62,7 @@ AuthLock: }' Mimoto_AuthLock_with_invalidUIN_Valid_Otp_sid: endPoint: /residentmobileapp/req/auth/lock - description : Tring to lock a credential with valid OTP + description: Auth Lock a particular UIN with valid OTP role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -95,7 +95,7 @@ AuthLock: }' Mimoto_AuthLock_Valid_VID_All: endPoint: /residentmobileapp/req/auth/lock - description : Tring to lock a VID credential with valid VID + description: Auth lock a particular VID with valid VID role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -123,7 +123,7 @@ AuthLock: }' Mimoto_AuthLock_with_invalidVID_Valid_Otp: endPoint: /residentmobileapp/req/auth/lock - description : Tring to lock a VID credential with invalid OTP + description: Auth lock a particular VID with invalid OTP role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -156,7 +156,7 @@ AuthLock: }' Mimoto_AuthLock_invalidVID_Valid_Otp: endPoint: /residentmobileapp/req/auth/lock - description : Tring to lock a VID credential with invalid VID + description : Auth lock a particular VID with invalid VID role: resident checkErrorsOnlyInResponse: true restMethod: post diff --git a/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml b/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml index 4be3631b6..9ec60e96d 100644 --- a/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml +++ b/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml @@ -1,7 +1,7 @@ AuthUnlock: Mimoto_AuthUnLock_Valid_UIN_All: endPoint: /residentmobileapp/req/auth/unlock - description : Trying to uloack a locked UIN credential with valid request + description: Auth unlock a particular UIN with valid parameters role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -30,7 +30,7 @@ AuthUnlock: }' Mimoto_AuthUnLock_Valid_UIN_With_VID_All: endPoint: /residentmobileapp/req/auth/unlock - description : Trying to uloack a locked VID credential with valid request + description: Auth unlock a particular VID with valid parameters role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -59,7 +59,7 @@ AuthUnlock: }' Mimoto_AuthUnLock_With_InValid_OTP_All: endPoint: /residentmobileapp/req/auth/unlock - description : Trying to uloack a locked UIN credential with invalid + description: Auth unlock a particular UIN with invalid OTP role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -93,7 +93,7 @@ AuthUnlock: }' Mimoto_AuthUnLock_InValid_OTP_With_VID_All: endPoint: /residentmobileapp/req/auth/unlock - description : Trying to uloack a locked VID credential with invalid OTP + description: Unlock a particular VID with invalid OTP role: resident checkErrorsOnlyInResponse: true restMethod: post diff --git a/apitest/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.yml b/apitest/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.yml index d7d88f9cc..79ce77de8 100644 --- a/apitest/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.yml +++ b/apitest/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.yml @@ -1,7 +1,7 @@ AuthenticateUser: Mimoto_ESignet_AuthenticateUserIDP_uin_Otp_Valid_Smoke: endPoint: /v1/esignet/authorization/authenticate - description : trying to retrive OTP authenticate the esignet page + description: Authenticate user to download credentials with all valid parameters role: resident restMethod: post checkErrorsOnlyInResponse: true diff --git a/apitest/src/main/resources/mimoto/AuthorizationCode/AuthorizationCode.yml b/apitest/src/main/resources/mimoto/AuthorizationCode/AuthorizationCode.yml index d29754168..8ab0f1e0c 100644 --- a/apitest/src/main/resources/mimoto/AuthorizationCode/AuthorizationCode.yml +++ b/apitest/src/main/resources/mimoto/AuthorizationCode/AuthorizationCode.yml @@ -1,7 +1,7 @@ AuthorizationCode: Mimoto_ESignet_AuthorizationCode_uin_All_Valid_Smoke_sid: endPoint: /v1/esignet/authorization/auth-code - description : trying to get authhorization from esignet page with valid request + description: Generate authorization code to download credential issuer role: resident restMethod: post checkErrorsOnlyInResponse: true diff --git a/apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.yml b/apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.yml index 783ac820b..8e069c302 100644 --- a/apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.yml +++ b/apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.yml @@ -2,7 +2,7 @@ BindingOtp: Mimoto_BindingOtp_Valid_UIN_All_Smoke: endPoint: /residentmobileapp/binding-otp role: resident - description : Reqeusting OTP for binding a individualID with valid UIN + description: Creating OTP for binding a individualID with valid UIN checkErrorsOnlyInResponse: true restMethod: post validityCheckRequired: true @@ -19,7 +19,7 @@ BindingOtp: Mimoto_BindingOtp_Valid_vid_All_Smoke: endPoint: /residentmobileapp/binding-otp - description : Reqeusting OTP for binding a individualID with valid VID + description: Creating OTP for binding a individualID with valid VID role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -37,7 +37,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Invalid_individualId_Neg: endPoint: /residentmobileapp/binding-otp - description : Reqeusting OTP for binding a individualID with invalid UIN + description: Creating OTP for binding a individualID with invalid UIN role: resident restMethod: post validityCheckRequired: true @@ -58,7 +58,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Missing_individualId_Neg: endPoint: /residentmobileapp/binding-otp - description : Reqeusting OTP for binding a individualID without individualId attribute + description: Creating OTP for binding a individualID without individualId attribute role: resident restMethod: post validityCheckRequired: true @@ -79,7 +79,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Empty_individualId_Neg: endPoint: /residentmobileapp/binding-otp - description : Reqeusting OTP for binding a individualID with individualId missing + description: Creating OTP for binding a individualID with individualId missing role: resident restMethod: post validityCheckRequired: true @@ -100,7 +100,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Null_individualId_Neg: endPoint: /residentmobileapp/binding-otp - description : Reqeusting OTP for binding a individualID with individualId value as null + description: Creating OTP for binding a individualID with individualId value as null role: resident restMethod: post validityCheckRequired: true @@ -121,7 +121,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_SpaceSeparated_otpChannels_Neg: endPoint: /residentmobileapp/binding-otp - description : Reqeusting OTP for binding a individualID with OTP channel value been spaced in between + description: Creating OTP for binding a individualID with OTP channel value been spaced in between role: resident restMethod: post validityCheckRequired: true @@ -142,7 +142,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Invalid_OtpChannels_Neg: endPoint: /residentmobileapp/binding-otp - description : Reqeusting OTP for binding a individualID with invalid OTP channel + description: Creating OTP for binding a individualID with invalid OTP channel role: resident restMethod: post validityCheckRequired: true @@ -163,7 +163,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Missing_OtpChannels_Neg: endPoint: /residentmobileapp/binding-otp - description : Reqeusting OTP for binding a individualID with OTP channel missing + description: Creating OTP for binding a individualID with OTP channel missing role: resident restMethod: post validityCheckRequired: true @@ -184,7 +184,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Empty_OtpChannels_Neg: endPoint: /residentmobileapp/binding-otp - description : Reqeusting OTP for binding a individualID with OTP channel being empty + description: Creating OTP for binding a individualID with OTP channel being empty role: resident restMethod: post validityCheckRequired: true @@ -205,7 +205,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Null_OtpChannels_Neg: endPoint: /residentmobileapp/binding-otp - description : Reqeusting OTP for binding a individualID with OTP channel value being null + description: Creating OTP for binding a individualID with OTP channel value being null role: resident restMethod: post validityCheckRequired: true @@ -226,7 +226,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Missing_OtpChannel_Neg: endPoint: /residentmobileapp/binding-otp - description : Reqeusting OTP for binding a individualID with OTP channel missing + description: Creating OTP for binding a individualID with OTP channel missing role: resident restMethod: post validityCheckRequired: true @@ -247,7 +247,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Empty_OtpChannel_Neg: endPoint: /residentmobileapp/binding-otp - description : Reqeusting OTP for binding a individualID with OTP channel being empty + description: Creating OTP for binding a individualID with OTP channel being empty role: resident restMethod: post validityCheckRequired: true @@ -268,7 +268,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Null_OtpChannel_Neg: endPoint: /residentmobileapp/binding-otp - description : Reqeusting OTP for binding a individualID with OTP channel being empty + description: Creating OTP for binding a individualID with OTP channel being empty role: resident restMethod: post validityCheckRequired: true @@ -289,7 +289,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Invalid_RequestTime_Neg: endPoint: /residentmobileapp/binding-otp - description : Reqeusting OTP for binding a individualID with invalid request time + description: Creating OTP for binding a individualID with invalid request time role: resident restMethod: post validityCheckRequired: true @@ -310,7 +310,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Past_RequestTime_Neg: endPoint: /residentmobileapp/binding-otp - description : Reqeusting OTP for binding a individualID with past request time + description: Creating OTP for binding a individualID with past request time role: resident restMethod: post validityCheckRequired: true @@ -331,7 +331,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Future_RequestTime_Neg: endPoint: /residentmobileapp/binding-otp - description : Reqeusting OTP for binding a individualID with future request time + description: Creating OTP for binding a individualID with future request time role: resident restMethod: post validityCheckRequired: true @@ -352,7 +352,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Missing_RequestTime_Neg: endPoint: /residentmobileapp/binding-otp - description : Reqeusting OTP for binding a individualID with missing request time + description: Creating OTP for binding a individualID with missing request time role: resident restMethod: post validityCheckRequired: true @@ -373,7 +373,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Empty_RequestTime_Neg: endPoint: /residentmobileapp/binding-otp - description : Reqeusting OTP for binding a individualID with empty request time + description: Creating OTP for binding a individualID with empty request time role: resident restMethod: post validityCheckRequired: true @@ -394,7 +394,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Invalid_individualId_Neg: endPoint: /residentmobileapp/binding-otp - description : Reqeusting OTP for binding a individualID with invalid VID + description: Creating OTP for binding a individualID with invalid VID role: resident restMethod: post validityCheckRequired: true @@ -415,7 +415,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Missing_individualId_Neg: endPoint: /residentmobileapp/binding-otp - description : Reqeusting OTP for binding a individualID with missing VID + description: Creating OTP for binding a individualID with missing VID role: resident restMethod: post validityCheckRequired: true @@ -436,7 +436,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Empty_individualId_Neg: endPoint: /residentmobileapp/binding-otp - description : Reqeusting OTP for binding a individualID with empty VID + description: Creating OTP for binding a individualID with empty VID role: resident restMethod: post validityCheckRequired: true @@ -457,7 +457,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Null_individualId_Neg: endPoint: /residentmobileapp/binding-otp - description : Reqeusting OTP for binding a individualID with invalid VID + description: Creating OTP for binding a individualID with invalid VID role: resident restMethod: post validityCheckRequired: true @@ -478,7 +478,7 @@ BindingOtp: Mimoto_BindingOtp_vid_SpaceSeparated_otpChannels_Neg: endPoint: /residentmobileapp/binding-otp - description : Reqeusting OTP for binding a VID with OTP channel value been spaced in between + description: Creating OTP for binding a VID with OTP channel value been spaced in between role: resident restMethod: post validityCheckRequired: true @@ -499,7 +499,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Invalid_OtpChannels_Neg: endPoint: /residentmobileapp/binding-otp - description : Reqeusting OTP for binding a VID with invalid OTP channel + description: Creating OTP for binding a VID with invalid OTP channel role: resident restMethod: post validityCheckRequired: true @@ -520,7 +520,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Missing_OtpChannels_Neg: endPoint: /residentmobileapp/binding-otp - description : Reqeusting OTP for binding a VID with missing OTP channel values + description: Creating OTP for binding a VID with missing OTP channel values role: resident restMethod: post validityCheckRequired: true @@ -541,7 +541,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Empty_OtpChannels_Neg: endPoint: /residentmobileapp/binding-otp - description : Reqeusting OTP for binding a VID with empty OTP channel values + description: Creating OTP for binding a VID with empty OTP channel values role: resident restMethod: post validityCheckRequired: true @@ -562,7 +562,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Null_OtpChannels_Neg: endPoint: /residentmobileapp/binding-otp - description : Reqeusting OTP for binding a VID with OTP channel values as null + description: Creating OTP for binding a VID with OTP channel values as null role: resident restMethod: post validityCheckRequired: true @@ -583,7 +583,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Missing_OtpChannel_Neg: endPoint: /residentmobileapp/binding-otp - description : Reqeusting OTP for binding a VID with OTP channel values missing + description: Creating OTP for binding a VID with OTP channel values missing role: resident restMethod: post validityCheckRequired: true @@ -604,7 +604,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Empty_OtpChannel_Neg: endPoint: /residentmobileapp/binding-otp - description : Reqeusting OTP for binding a VID with OTP channel values empty + description: Creating OTP for binding a VID with OTP channel values empty role: resident restMethod: post validityCheckRequired: true @@ -625,7 +625,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Null_OtpChannel_Neg: endPoint: /residentmobileapp/binding-otp - description : Reqeusting OTP for binding a VID with OTP channel values as null + description: Creating OTP for binding a VID with OTP channel values as null role: resident restMethod: post validityCheckRequired: true @@ -646,7 +646,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Invalid_RequestTime_Neg: endPoint: /residentmobileapp/binding-otp - description : Reqeusting OTP for binding a VID with invalid request time + description: Creating OTP for binding a VID with invalid request time role: resident restMethod: post validityCheckRequired: true @@ -667,7 +667,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Past_RequestTime_Neg: endPoint: /residentmobileapp/binding-otp - description : Reqeusting OTP for binding a VID with past request time + description: Creating OTP for binding a VID with past request time role: resident restMethod: post validityCheckRequired: true @@ -688,7 +688,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Future_RequestTime_Neg: endPoint: /residentmobileapp/binding-otp - description : Reqeusting OTP for binding a VID with future request time + description: Creating OTP for binding a VID with future request time role: resident restMethod: post validityCheckRequired: true @@ -709,7 +709,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Missing_RequestTime_Neg: endPoint: /residentmobileapp/binding-otp - description : Reqeusting OTP for binding a VID with request time missing + description: Creating OTP for binding a VID with request time missing role: resident restMethod: post validityCheckRequired: true @@ -730,7 +730,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Empty_RequestTime_Neg: endPoint: /residentmobileapp/binding-otp - description : Reqeusting OTP for binding a VID with request time empty + description: Creating OTP for binding a VID with request time empty role: resident restMethod: post validityCheckRequired: true diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml b/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml index 29ae8cfc0..e8a1f9e9a 100644 --- a/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml @@ -1,7 +1,7 @@ CredentialsStatus: Mimoto_CredentialsStatus_euin_All_Valid_Smoke: endPoint: /residentmobileapp/credentialshare/request/status/{requestId} - description : Checking credential status with valid UIN + description: Retrieving credential status with valid UIN role: resident restMethod: get inputTemplate: mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatus @@ -14,7 +14,7 @@ CredentialsStatus: }' Mimoto_CredentialsStatus_euin_With_VID_All_Valid_Smoke: endPoint: /residentmobileapp/credentialshare/request/status/{requestId} - description : Checking credential status with valid VID + description: Retrieving credential status with valid VID role: resident restMethod: get inputTemplate: mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatus @@ -28,7 +28,7 @@ CredentialsStatus: Mimoto_CredentialsStatus_euin_With_Invalid_RequestId_Neg: endPoint: /residentmobileapp/credentialshare/request/status/{requestId} - description : Checking credential status with invalid requestId + description: Retrieving credential status with invalid requestId role: resident restMethod: get inputTemplate: mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatus diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml index 6641287a7..88498c8a3 100644 --- a/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml @@ -1,7 +1,7 @@ DownloadCredential: Mimoto_DownloadCredential_All_Valid_Smoke: endPoint: /residentmobileapp/credentialshare/download - description : download credetial with all valid request + description: Downloading credential with all valid parameters role: resident restMethod: post inputTemplate: mimoto/CredentialIssuance/DownloadCredential/downloadCredential @@ -16,7 +16,7 @@ DownloadCredential: Mimoto_DownloadCredential_Invalid_RequestId_Neg: endPoint: /residentmobileapp/credentialshare/download - description : download credetial with invalid RequestId + description: Downloading credetial with invalid RequestId role: resident restMethod: post inputTemplate: mimoto/CredentialIssuance/DownloadCredential/downloadCredential @@ -31,7 +31,7 @@ DownloadCredential: Mimoto_DownloadCredential_Invalid_IndividualId_Neg: endPoint: /residentmobileapp/credentialshare/download - description : download credetial with invalid IndividualId + description: Downloading credetial with invalid IndividualId role: resident restMethod: post inputTemplate: mimoto/CredentialIssuance/DownloadCredential/downloadCredential diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml index 0b9aa9cbb..1342078f2 100644 --- a/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml @@ -1,7 +1,7 @@ DownloadCredential: Mimoto_CredentialsStatus_All_Valid_Smoke_euin: endPoint: /residentmobileapp/credentialshare/download - description : Checking credential status with all valid request + description: Checking credential status with all valid parameters role: resident checkErrorsOnlyInResponse: true restMethod: get @@ -16,7 +16,7 @@ DownloadCredential: }' Mimoto_CredentialsStatus_StatusCode_InValid_Smoke_euin: endPoint: /residentmobileapp/credentialshare/download - description : Checking credential status with invalid StatusCode + description: Checking credential status with invalid StatusCode role: resident restMethod: get inputTemplate: mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqid diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml b/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml index c41553791..1ee3a25fb 100644 --- a/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml @@ -1,7 +1,7 @@ RequestCredentials: Mimoto_RequestCredentials__All_Valid_Smoke_sid: endPoint: /residentmobileapp/credentialshare/request - description : requesting credential with all valid request + description: requesting credential with all valid parameters role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -29,7 +29,7 @@ RequestCredentials: }' Mimoto_RequestCredentials_All_Valid_Smoke_with_VID_sid: endPoint: /residentmobileapp/credentialshare/request - description : requesting credential with valid VID + description: requesting credential with valid VID role: resident restMethod: post checkErrorsOnlyInResponse: true @@ -58,7 +58,7 @@ RequestCredentials: Mimoto_RequestCredentials_InValid_Otp_UIN_sid: endPoint: /residentmobileapp/credentialshare/request role: resident - description : requesting UIN credential with invalid OTP + description: requesting UIN credential with invalid OTP checkErrorsOnlyInResponse: true restMethod: post inputTemplate: mimoto/CredentialIssuance/RequestCredentials/reqCredential @@ -89,7 +89,7 @@ RequestCredentials: }' Mimoto_RequestCredentials_InValid_TransactionId_sid: endPoint: /residentmobileapp/credentialshare/request - description : requesting credential with invalid transactionID + description: requesting credential with invalid transactionID role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -122,7 +122,7 @@ RequestCredentials: Mimoto_RequestCredentials_InValid_UIN_sid: endPoint: /residentmobileapp/credentialshare/request - description : requesting credential with invalid UIN + description: requesting credential with invalid UIN role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -155,7 +155,7 @@ RequestCredentials: Mimoto_RequestCredentials_Invalid_VID_sid_Neg: endPoint: /residentmobileapp/credentialshare/request - description : requesting credential with invalid VID + description: requesting credential with invalid VID role: resident checkErrorsOnlyInResponse: true restMethod: post diff --git a/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml b/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml index aef0627a1..08e0243ef 100644 --- a/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml +++ b/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml @@ -1,7 +1,7 @@ DownloadIssuerCredential: Mimoto_DownloadIssuerCredential_All_Valid_Smoke: endPoint: /residentmobileapp/credentials/download - description : requesting credential with all valid request + description: Downloading credential with all valid parameters role: resident restMethod: get checkErrorsOnlyInResponse: true @@ -20,7 +20,7 @@ DownloadIssuerCredential: Mimoto_DownloadIssuerCredential_Invalid_Issuer_Neg: endPoint: /residentmobileapp/credentials/download - description : requesting credential with invalid issuer + description: Downloading credential with invalid issuer role: resident restMethod: get checkErrorsOnlyInResponse: true @@ -44,7 +44,7 @@ DownloadIssuerCredential: Mimoto_DownloadIssuerCredential_Invalid_Credential_Neg: endPoint: /residentmobileapp/credentials/download - description : requesting credential with invalid credential + description: Downloading credential with invalid credential role: resident restMethod: get checkErrorsOnlyInResponse: true @@ -68,7 +68,7 @@ DownloadIssuerCredential: Mimoto_DownloadIssuerCredential_Invalid_AuthorizationCode_Neg: endPoint: /residentmobileapp/credentials/download - description : requesting credential with invalid credential AuthorizationCode + description: Downloading credential with invalid credential AuthorizationCode role: resident restMethod: get checkErrorsOnlyInResponse: true @@ -92,7 +92,7 @@ DownloadIssuerCredential: Mimoto_DownloadIssuerCredential_Expired_AuthorizationCode_Neg: endPoint: /residentmobileapp/credentials/download - description : requesting credential with invalid expired authorizationCode + description: Downloading credential with invalid expired authorizationCode role: resident restMethod: get checkErrorsOnlyInResponse: true diff --git a/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml b/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml index 937d05f42..a39ad89c9 100644 --- a/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml +++ b/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml @@ -1,7 +1,7 @@ GenerateVID: Mimoto_Generate_Perpetual_VID_Valid_Smoke_sid: endPoint: /residentmobileapp/vid - description : genrate Perpetual VID with all valid request + description: Creating Perpetual VID with all valid parameters role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -29,7 +29,7 @@ GenerateVID: }' Mimoto_Generate_Perpetual_VID_InValid_Otp_sid: endPoint: /residentmobileapp/vid - description : genrate Perpetual VID with invalid OTP + description: Creating Perpetual VID with invalid OTP role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -62,7 +62,7 @@ GenerateVID: }' Mimoto_Generate_Perpetual_VID_with_InvalidUIN_Valid_Otp_sid: endPoint: /residentmobileapp/vid - description : genrate Perpetual VID with invalid UIN + description: Creating Perpetual VID with invalid UIN role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -96,7 +96,7 @@ GenerateVID: mimoto_Generate_Temporary_VID_Valid_Smoke_sid: endPoint: /residentmobileapp/vid - description : genrate temporary VID with all valid request + description: Creating temporary VID with all valid request role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -125,7 +125,7 @@ GenerateVID: Mimoto_Generate_Perpetual_VID_Invalid_TransactionId_Neg: endPoint: /residentmobileapp/vid - description : genrate perpetual VID with invalid transactionID + description: Creating perpetual VID with invalid transactionID role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -159,7 +159,7 @@ GenerateVID: Mimoto_Generate_Perpetual_VID_Binding_Valid_Smoke_sid: endPoint: /residentmobileapp/vid - description : genrate perpetual VID with binding valid request + description: Creating perpetual VID with binding valid request role: resident checkErrorsOnlyInResponse: true restMethod: post diff --git a/apitest/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.yml b/apitest/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.yml index 7a62c3369..2cb12ee22 100644 --- a/apitest/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.yml +++ b/apitest/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.yml @@ -1,7 +1,7 @@ GetAllCredentialTypes: Mimoto_GetAllCredentialTypes_All_Valid_Smoke: endPoint: /residentmobileapp/issuers/{issuerId}/credentialTypes - description : trying to get credential types with all valid request + description: Generating the credential types with all valid parameters role: resident restMethod: get checkErrorsOnlyInResponse: true @@ -16,7 +16,7 @@ GetAllCredentialTypes: Mimoto_GetAllCredentialTypes_Specific_Issuer_All_Valid_Smoke: endPoint: /residentmobileapp/issuers/{issuerId}/credentialTypes/?search={credentialType} - description : trying to get specific credential type with all valid request + description: Generating the specific credential type with all valid parameters role: resident restMethod: get checkErrorsOnlyInResponse: true @@ -31,7 +31,7 @@ GetAllCredentialTypes: Mimoto_GetAllCredentialTypes_Invalid_Issuer_Neg: endPoint: /residentmobileapp/issuers/{issuerId}/credentialTypes - description : trying to get invalid credential type + description: Generating the invalid credential type role: resident restMethod: get checkErrorsOnlyInResponse: true diff --git a/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml b/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml index 1925ac127..c1f494e81 100644 --- a/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml +++ b/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml @@ -1,7 +1,7 @@ GetAllIssuers: Mimoto_GetAllIssuers_All_Valid_Smoke: endPoint: /residentmobileapp/issuers - description : trying to get all issuers with all valid request + description: Retrieving issuers with all valid parameters role: resident restMethod: get checkErrorsOnlyInResponse: true @@ -14,7 +14,7 @@ GetAllIssuers: Mimoto_GetAllIssuers_Specific_Issuer_All_Valid_Smoke: endPoint: /residentmobileapp/issuers/ESignet - description : trying to get specific issuer with all valid request + description: Retrieving all specific issuer with all valid parameters role: resident restMethod: get checkErrorsOnlyInResponse: true @@ -27,7 +27,7 @@ GetAllIssuers: Mimoto_GetAllIssuers_Invalid_Issuer_Neg: endPoint: /residentmobileapp/issuers/invalid - description : trying to get invalid issuer + description : Retrieving invalid issuer role: resident restMethod: get checkErrorsOnlyInResponse: true diff --git a/apitest/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.yml b/apitest/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.yml index f9154822b..fd2984904 100644 --- a/apitest/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.yml +++ b/apitest/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.yml @@ -1,7 +1,7 @@ OAuthDetailsRequest: Mimoto_ESignet_OAuthDetailsRequest_all_Valid_Smoke_sid: endPoint: /v1/esignet/authorization/v2/oauth-details - description : Requesting auth's details with all valid request + description : Creating Oauth's details with all valid parameters role: resident restMethod: post checkErrorsOnlyInResponse: true diff --git a/apitest/src/main/resources/mimoto/SendOTP/SendOTP.yml b/apitest/src/main/resources/mimoto/SendOTP/SendOTP.yml index 7d2738aba..fdcb2e60d 100644 --- a/apitest/src/main/resources/mimoto/SendOTP/SendOTP.yml +++ b/apitest/src/main/resources/mimoto/SendOTP/SendOTP.yml @@ -1,7 +1,7 @@ SendOTP: Resident_SendOTP_Valid_UIN_All_Smoke: endPoint: /resident/v1/req/otp - description : resident requesting OTP with valid UIN + description: Creating resident requesting OTP with valid UIN role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -20,7 +20,7 @@ SendOTP: Resident_SendOTP_Invalid_UIN_Neg: endPoint: /resident/v1/req/otp - description : resident requesting OTP with invalid UIN + description: Creating resident requesting OTP with invalid UIN role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -39,7 +39,7 @@ SendOTP: Resident_SendOTP_Invalid_VID_Neg: endPoint: /resident/v1/req/otp - description : resident requesting OTP with invalid VID + description: Creating requesting OTP with invalid VID role: resident restMethod: post inputTemplate: resident/SendOTP/createSendOTP diff --git a/apitest/src/main/resources/mimoto/SendOTP1/SendOTP.yml b/apitest/src/main/resources/mimoto/SendOTP1/SendOTP.yml index 589367777..fa596b18d 100644 --- a/apitest/src/main/resources/mimoto/SendOTP1/SendOTP.yml +++ b/apitest/src/main/resources/mimoto/SendOTP1/SendOTP.yml @@ -1,7 +1,7 @@ SendOTP: Mimoto_SendOTP_Valid_UIN_All_Smoke: endPoint: /resident/v1/req/otp - description : resident requesting OTP with valid UIN + description: Send OTP for valid UIN role: resident restMethod: post checkErrorsOnlyInResponse: true @@ -20,7 +20,7 @@ SendOTP: Mimoto_SendOTP_Valid_VID_All_Smoke: endPoint: /resident/v1/req/otp - description : resident requesting OTP with valid VID + description: Send OTP to valid VID role: resident restMethod: post checkErrorsOnlyInResponse: true @@ -39,7 +39,7 @@ SendOTP: Mimoto_SendOTP_InValid_UIN_All: endPoint: /residentmobileapp/req/otp - description : resident requesting OTP with invalid UIN + description: Send OTP to invalid UIN role: resident restMethod: post inputTemplate: mimoto/SendOTP1/createSendOTP @@ -61,7 +61,7 @@ SendOTP: Mimoto_SendOTP_Invalid_VID_Neg: endPoint: /resident/v1/req/otp - description : resident requesting OTP with invalid VID + description: Send OTP to invalid VID role: resident checkErrorsOnlyInResponse: true restMethod: post diff --git a/apitest/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml b/apitest/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml index 7ba35258d..a74eb9c4a 100644 --- a/apitest/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml +++ b/apitest/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml @@ -1,7 +1,7 @@ individualOTP: Mimoto_individualOTP_All_Valid_Smoke: endPoint: /residentmobileapp/req/individualId/otp - description : Tring to get individual OTP with valid request + description : generating individual OTP with valid parameters role: resident checkErrorsOnlyInResponse: true restMethod: post diff --git a/apitest/src/main/resources/mimoto/SendOtpForVid/createSendOTP.yml b/apitest/src/main/resources/mimoto/SendOtpForVid/createSendOTP.yml index 88b8833e1..497135f01 100644 --- a/apitest/src/main/resources/mimoto/SendOtpForVid/createSendOTP.yml +++ b/apitest/src/main/resources/mimoto/SendOtpForVid/createSendOTP.yml @@ -1,7 +1,7 @@ createSendOTP: Resident_SendOTP_All_Valid_Smoke: endPoint: /idauthentication/v1/otp/v4jO2rTUkDglaG7rCkWDnqIT3WpZaGEW9j3FMXwTA5xXKVaDpx/6001/34536061 - description : resident requesting OTP with all valid request + description: Generating OTP with all valid parameters role: resident restMethod: post inputTemplate: resident/SendOtpForVid/createSendOTP diff --git a/apitest/src/main/resources/mimoto/ValidateOTP/ValidateOTP.yml b/apitest/src/main/resources/mimoto/ValidateOTP/ValidateOTP.yml index 149f8f110..ddbe571d3 100644 --- a/apitest/src/main/resources/mimoto/ValidateOTP/ValidateOTP.yml +++ b/apitest/src/main/resources/mimoto/ValidateOTP/ValidateOTP.yml @@ -1,7 +1,7 @@ SendOTP: Resident_SendOTP_Valid_UIN_All_Smoke: endPoint: /resident/v1/req/otp - description : resident request OTP with valid UIN + description: Generating OTP with valid UIN role: resident restMethod: post inputTemplate: resident/SendOTP/createSendOTP @@ -17,7 +17,7 @@ SendOTP: }' Resident_SendOTP_Valid_UIN_Phone_Smoke: endPoint: /resident/v1/req/otp - description : resident request OTP with OTP channel as phone + description: Generating OTP with OTP channel as phone role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -35,7 +35,7 @@ SendOTP: }' Resident_SendOTP_Valid_UIN_Email_Smoke: endPoint: /resident/v1/req/otp - description : resident request OTP with OTP channel as email + description: Generating OTP with OTP channel as email role: resident restMethod: post inputTemplate: resident/SendOTP/createSendOTP2 @@ -52,7 +52,7 @@ SendOTP: }' Resident_SendOTP_RevokedVID_Invalid: endPoint: /resident/v1/req/otp - description : resident request OTP with revoked VID + description: Generating OTP with revoked VID role: resident restMethod: post inputTemplate: resident/SendOTP/createSendOTP @@ -68,7 +68,7 @@ SendOTP: }' Resident_SendOTP_Valid_UIN_Invalid_empty_otpChannel: endPoint: /resident/v1/req/otp - description : resident request OTP with empty OTP channel + description: Generating OTP with empty OTP channel role: resident restMethod: post inputTemplate: resident/SendOTP/createSendOTP2 @@ -85,7 +85,7 @@ SendOTP: }' Resident_SendOTP_InValid_individualId: endPoint: /resident/v1/req/otp - description : resident request OTP with invalid individualID + description: Generating OTP with invalid individualID role: resident restMethod: post inputTemplate: resident/SendOTP/createSendOTP @@ -101,7 +101,7 @@ SendOTP: }' Resident_SendOTP_InValid_Missing_individualId: endPoint: /resident/v1/req/otp - description : resident request OTP with missing individualID + description: Generating OTP with missing individualID role: resident restMethod: post inputTemplate: resident/SendOTP/createSendOTP @@ -117,7 +117,7 @@ SendOTP: }' Resident_SendOTP_InValid_Empty_transactionID: endPoint: /resident/v1/req/otp - description : resident request OTP with empty transactionID + description: Generating OTP with empty transactionID role: resident restMethod: post inputTemplate: resident/SendOTP/createSendOTP @@ -133,7 +133,7 @@ SendOTP: }' Resident_SendOTP_InValid_transactionID: endPoint: /resident/v1/req/otp - description : resident request OTP with invalid transactionID + description: Generating OTP with invalid transactionID role: resident restMethod: post inputTemplate: resident/SendOTP/createSendOTP @@ -149,7 +149,7 @@ SendOTP: }' Resident_SendOTP_InValid_Missing_transactionID: endPoint: /resident/v1/req/otp - description : resident request OTP with missing transactionID + description: Generating OTP with missing transactionID role: resident restMethod: post inputTemplate: resident/SendOTP/createSendOTP @@ -165,7 +165,7 @@ SendOTP: }' Resident_SendOTP_InValid_Empty_requestTime: endPoint: /resident/v1/req/otp - description : resident request OTP with empty request time + description: Generating OTP with empty request time role: resident restMethod: post inputTemplate: resident/SendOTP/createSendOTP @@ -181,7 +181,7 @@ SendOTP: }' Resident_SendOTP_InValid_requestTime: endPoint: /resident/v1/req/otp - description : resident request OTP with invalid request time + description: Generating OTP with invalid request time role: resident restMethod: post inputTemplate: resident/SendOTP/createSendOTP diff --git a/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml b/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml index f41f52921..3a639d75e 100644 --- a/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml +++ b/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml @@ -1,7 +1,7 @@ WalletBinding: Mimoto_WalletBinding_uin_OTP_Valid_Smoke: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with valid UIN + description: generating OTP to bind VC with valid UIN role: resident validityCheckRequired: true restMethod: post @@ -35,7 +35,7 @@ WalletBinding: Mimoto_WalletBinding_vid_OTP_Valid_Smoke: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with valid VID + description: generating OTP to bind VC with valid VID role: resident validityCheckRequired: true restMethod: post @@ -69,7 +69,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_RequestTime_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with invalid requestime + description: generating OTP to bind VC with invalid request time role: resident validityCheckRequired: true restMethod: post @@ -108,7 +108,7 @@ WalletBinding: Mimoto_WalletBinding_uin_PastVal_RequestTime_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with past requestime + description: generating OTP to bind VC with past request time role: resident validityCheckRequired: true restMethod: post @@ -147,7 +147,7 @@ WalletBinding: Mimoto_WalletBinding_uin_FutureVal_RequestTime_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with future requestime + description: generating OTP to bind VC with future request time role: resident validityCheckRequired: true restMethod: post @@ -186,7 +186,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Empty_RequestTime_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with empty requestime + description: generating OTP to bind VC with empty requestime role: resident validityCheckRequired: true restMethod: post @@ -225,7 +225,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_RequestTime_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with missing requestime + description: generating OTP to bind VC with missing requestime role: resident validityCheckRequired: true restMethod: post @@ -264,7 +264,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_IndividualId_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with invalid individualId + description: generating OTP to bind VC with invalid individualId role: resident validityCheckRequired: true restMethod: post @@ -303,7 +303,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Empty_IndividualId_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with empty individualId + description: generating OTP to bind VC with empty individualId role: resident validityCheckRequired: true restMethod: post @@ -342,7 +342,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Null_IndividualId_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with individualId being null + description: generating OTP to bind VC with individualId being null role: resident validityCheckRequired: true restMethod: post @@ -381,7 +381,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_IndividualId_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with individualId being missing + description: generating OTP to bind VC with individualId being missing role: resident validityCheckRequired: true restMethod: post @@ -420,7 +420,7 @@ WalletBinding: Mimoto_WalletBinding_uin_SpaceVal_IndividualId_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with individualId value having space + description: generating OTP to bind VC with individualId value having space role: resident validityCheckRequired: true restMethod: post @@ -459,7 +459,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_AuthFactorType_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with invalid authfactortype + description: generating OTP to bind VC with invalid authfactortype role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -499,7 +499,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Empty_AuthFactorType_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with empty authfactortype + description: generating OTP to bind VC with empty authfactortype role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -539,7 +539,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_AuthFactorType_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with missing authfactortype + description: generating OTP to bind VC with missing authfactortype role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -579,7 +579,7 @@ WalletBinding: Mimoto_WalletBinding_uin_SpaceVal_AuthFactorType_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with authfactortype value being just space + description: generating OTP to bind VC with authfactortype value being just space role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -619,7 +619,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Null_AuthFactorType_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with authfactortype value being just null + description: generating OTP to bind VC with authfactortype value being just null role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -659,7 +659,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_Challenge_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with invalid challenge + description: generating OTP to bind VC with invalid challenge role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -699,7 +699,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_Challenge_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with missing challenge + description: generating OTP to bind VC with missing challenge role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -739,7 +739,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Empty_Challenge_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with empty challenge + description: generating OTP to bind VC with empty challenge role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -779,7 +779,7 @@ WalletBinding: Mimoto_WalletBinding_uin_SpaceVal_Challenge_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with challenge value having space + description: generating OTP to bind VC with challenge value having space role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -819,7 +819,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Null_Challenge_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with challenge value having null + description: generating OTP to bind VC with challenge value having null role: resident validityCheckRequired: true allowedErrorCodes: @@ -859,7 +859,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_Formate_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with invalid formate + description: generating OTP to bind VC with invalid formate role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -899,7 +899,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_Formate_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with missing formate + description: generating OTP to bind VC with missing formate role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -939,7 +939,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Empty_Formate_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with empty formate + description: generating OTP to bind VC with empty formate role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -979,7 +979,7 @@ WalletBinding: Mimoto_WalletBinding_uin_SpaceVal_Formate_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with formate value having space + description: generating OTP to bind VC with formate value having space role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -1019,7 +1019,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Null_Formate_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with formate value having null + description: generating OTP to bind VC with formate value having null role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -1059,7 +1059,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_authFactorType1_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with invalid authFactorType1 + description: generating OTP to bind VC with invalid authFactorType1 role: resident validityCheckRequired: true restMethod: post @@ -1098,7 +1098,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_authFactorType1_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with missing authFactorType1 + description: generating OTP to bind VC with missing authFactorType1 role: resident validityCheckRequired: true restMethod: post @@ -1137,7 +1137,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Empty_authFactorType1_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with empty authFactorType1 + description: generating OTP to bind VC with empty authFactorType1 role: resident validityCheckRequired: true restMethod: post @@ -1176,7 +1176,7 @@ WalletBinding: Mimoto_WalletBinding_uin_SpaceVal_authFactorType1_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with authFactorType1 value having space + description: generating OTP to bind VC with authFactorType1 value having space role: resident validityCheckRequired: true restMethod: post @@ -1215,7 +1215,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Null_authFactorType1_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with authFactorType1 value having null + description: generating OTP to bind VC with authFactorType1 value having null role: resident validityCheckRequired: true restMethod: post @@ -1254,7 +1254,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_format1_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with invalid format1 + description: generating OTP to bind VC with invalid format1 role: resident validityCheckRequired: true restMethod: post @@ -1293,7 +1293,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_format1_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with missing format1 + description: generating OTP to bind VC with missing format1 role: resident validityCheckRequired: true restMethod: post @@ -1332,7 +1332,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Empty_format1_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with empty format1 + description: generating OTP to bind VC with empty format1 role: resident validityCheckRequired: true restMethod: post @@ -1371,7 +1371,7 @@ WalletBinding: Mimoto_WalletBinding_uin_SpaceVal_format1_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with format1 value having space + description: generating OTP to bind VC with format1 value having space role: resident validityCheckRequired: true restMethod: post @@ -1410,7 +1410,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Null_format1_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with format1 value having null + description: generating OTP to bind VC with format1 value having null role: resident validityCheckRequired: true restMethod: post @@ -1449,7 +1449,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_publicKey_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with invalid publickey + description: generating OTP to bind VC with invalid publickey role: resident validityCheckRequired: true restMethod: post @@ -1488,7 +1488,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Null_publicKey_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with null as publickey + description: generating OTP to bind VC with null as publickey role: resident validityCheckRequired: true restMethod: post @@ -1527,7 +1527,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_publicKey_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VC with missing publickey + description: generating OTP to bind VC with missing publickey role: resident validityCheckRequired: true restMethod: post @@ -1566,7 +1566,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_RequestTime_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind vid VC with invalid request time + description: generating OTP to bind vid VC with invalid request time role: resident validityCheckRequired: true restMethod: post @@ -1605,7 +1605,7 @@ WalletBinding: Mimoto_WalletBinding_vid_PastVal_RequestTime_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind vid VC with past request time + description: generating OTP to bind vid VC with past request time role: resident validityCheckRequired: true restMethod: post @@ -1644,7 +1644,7 @@ WalletBinding: Mimoto_WalletBinding_vid_FutureVal_RequestTime_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind vid VC with future request time + description: generating OTP to bind vid VC with future request time role: resident validityCheckRequired: true restMethod: post @@ -1683,7 +1683,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Empty_RequestTime_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind vid VC with empty request time + description: generating OTP to bind vid VC with empty request time role: resident validityCheckRequired: true restMethod: post @@ -1722,7 +1722,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_RequestTime_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind vid VC with missing request time + description: generating OTP to bind vid VC with missing request time role: resident validityCheckRequired: true restMethod: post @@ -1761,7 +1761,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_IndividualId_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind vid VC with invalid individualId + description: generating OTP to bind vid VC with invalid individualId role: resident validityCheckRequired: true restMethod: post @@ -1800,7 +1800,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Empty_IndividualId_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind vid VC with empty individualId + description: generating OTP to bind vid VC with empty individualId role: resident validityCheckRequired: true restMethod: post @@ -1839,7 +1839,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Null_IndividualId_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind vid VC with null individualId + description: generating OTP to bind vid VC with null individualId role: resident validityCheckRequired: true restMethod: post @@ -1878,7 +1878,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_IndividualId_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind vid VC with missing individualId + description: generating OTP to bind vid VC with missing individualId role: resident validityCheckRequired: true restMethod: post @@ -1917,7 +1917,7 @@ WalletBinding: Mimoto_WalletBinding_vid_SpaceVal_IndividualId_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VID VC with individualId value having space + description: generating OTP to bind VID VC with individualId value having space role: resident validityCheckRequired: true restMethod: post @@ -1956,7 +1956,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_AuthFactorType_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VID VC with invalid authfactortype + description: generating OTP to bind VID VC with invalid authfactortype role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -1996,7 +1996,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Empty_AuthFactorType_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VID VC with empty authfactortype + description: generating OTP to bind VID VC with empty authfactortype role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -2036,7 +2036,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_AuthFactorType_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VID VC with missing authfactortype + description: generating OTP to bind VID VC with missing authfactortype role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -2076,7 +2076,7 @@ WalletBinding: Mimoto_WalletBinding_vid_SpaceVal_AuthFactorType_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VID VC with authfactortype value being just space + description: generating OTP to bind VID VC with authfactortype value being just space role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -2116,7 +2116,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Null_AuthFactorType_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VID VC with authfactortype value being just null + description: generating OTP to bind VID VC with authfactortype value being just null role: resident validityCheckRequired: true restMethod: post @@ -2155,7 +2155,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_Challenge_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VID VC with invalid challenge + description: generating OTP to bind VID VC with invalid challenge role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -2195,7 +2195,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_Challenge_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VID VC with missing challenge + description: generating OTP to bind VID VC with missing challenge role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -2235,7 +2235,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Empty_Challenge_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VID VC with empty challenge + description: generating OTP to bind VID VC with empty challenge role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -2275,7 +2275,7 @@ WalletBinding: Mimoto_WalletBinding_vid_SpaceVal_Challenge_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VID VC with challenge value having space + description: generating OTP to bind VID VC with challenge value having space role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -2315,7 +2315,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Null_Challenge_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VID VC with challenge value having null + description: generating OTP to bind VID VC with challenge value having null role: resident validityCheckRequired: true restMethod: post @@ -2354,7 +2354,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_Formate_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VID VC with invalid formate + description: generating OTP to bind VID VC with invalid formate role: resident validityCheckRequired: true restMethod: post @@ -2393,7 +2393,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_Formate_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VID VC with missing formate + description: generating OTP to bind VID VC with missing formate role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -2433,7 +2433,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Empty_Formate_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VID VC with empty formate + description: generating OTP to bind VID VC with empty formate role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -2473,7 +2473,7 @@ WalletBinding: Mimoto_WalletBinding_vid_SpaceVal_Formate_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VID VC with formate value having space + description: generating OTP to bind VID VC with formate value having space role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -2513,7 +2513,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Null_Formate_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VID VC with formate value having null + description: generating OTP to bind VID VC with formate value having null role: resident validityCheckRequired: true restMethod: post @@ -2552,7 +2552,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_authFactorType1_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VID VC with invalid authFactorType1 + description: generating OTP to bind VID VC with invalid authFactorType1 role: resident validityCheckRequired: true restMethod: post @@ -2591,7 +2591,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_authFactorType1_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VID VC with missing authFactorType1 + description: generating OTP to bind VID VC with missing authFactorType1 role: resident validityCheckRequired: true restMethod: post @@ -2630,7 +2630,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Empty_authFactorType1_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VID VC with empty authFactorType1 + description: generating OTP to bind VID VC with empty authFactorType1 role: resident validityCheckRequired: true restMethod: post @@ -2669,7 +2669,7 @@ WalletBinding: Mimoto_WalletBinding_vid_SpaceVal_authFactorType1_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VID VC with authFactorType1 value having space + description: generating OTP to bind VID VC with authFactorType1 value having space role: resident validityCheckRequired: true restMethod: post @@ -2708,7 +2708,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Null_authFactorType1_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VID VC with authFactorType1 value having null + description: generating OTP to bind VID VC with authFactorType1 value having null role: resident validityCheckRequired: true restMethod: post @@ -2747,7 +2747,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_format1_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VID VC with invalid format1 + description: generating OTP to bind VID VC with invalid format1 role: resident validityCheckRequired: true restMethod: post @@ -2786,7 +2786,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_format1_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VID VC with missing format1 + description: generating OTP to bind VID VC with missing format1 role: resident validityCheckRequired: true restMethod: post @@ -2825,7 +2825,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Empty_format1_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VID VC with empty format1 + description: generating OTP to bind VID VC with empty format1 role: resident validityCheckRequired: true restMethod: post @@ -2864,7 +2864,7 @@ WalletBinding: Mimoto_WalletBinding_vid_SpaceVal_format1_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VID VC with format1 value having space + description: generating OTP to bind VID VC with format1 value having space role: resident validityCheckRequired: true restMethod: post @@ -2903,7 +2903,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Null_format1_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VID VC with format1 value having null + description: generating OTP to bind VID VC with format1 value having null role: resident validityCheckRequired: true restMethod: post @@ -2942,7 +2942,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_publicKey_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VID VC with invalid publickey + description: generating OTP to bind VID VC with invalid publickey role: resident validityCheckRequired: true restMethod: post @@ -2981,7 +2981,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Null_publicKey_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VID VC with null as publickey + description: generating OTP to bind VID VC with null as publickey role: resident validityCheckRequired: true restMethod: post @@ -3020,7 +3020,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_publicKey_Neg: endPoint: /residentmobileapp/wallet-binding - description : Requesting OTP to bind VID VC with missing publickey + description: generating OTP to bind VID VC with missing publickey role: resident validityCheckRequired: true restMethod: post From c7a221d9bbd138c46ed895d5b0c1ed7778c89758 Mon Sep 17 00:00:00 2001 From: Vijay Kumar S <94220135+vijay151096@users.noreply.github.com> Date: Mon, 5 Aug 2024 14:12:59 +0530 Subject: [PATCH 199/860] [INJIWEB-679] : migrate to issuer wellknown draft 13 changes and removed the /credentialsTypes endpoint (#374) * [INJIWEB-679] : migrate to draft 13 changes Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-679] : fix failing tests Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-679] : removed credentialTypes endpoint and draft 11 DTO and tests Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-679] : removed unwanted fields from config Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-679] : add config server uri in bootstrap.properties Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-679] : removed unwanted fields from config Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-679] : fix pr comments and add support for background image Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-679] : fix pr comments and add support for background image Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-679] : fix pr comments Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-679] : opitimze the wellknown method Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- README.md | 2 +- .../controller/CommonInjiController.java | 3 +- .../mimoto/controller/IdpController.java | 4 +- .../mimoto/controller/IssuersController.java | 35 +---- .../mosip/mimoto/dto/BackgroundImageDTO.java | 14 ++ .../java/io/mosip/mimoto/dto/IssuerDTO.java | 30 ---- ...dentialIssuerWellKnownResponseDraft11.java | 22 --- .../CredentialSupportedDisplayResponse.java | 3 +- .../mimoto/CredentialsSupportedResponse.java | 2 +- .../CredentialsSupportedResponseDraft11.java | 26 ---- .../IssuerSupportedCredentialsResponse.java | 13 -- .../mimoto/service/CredentialService.java | 1 - .../mosip/mimoto/service/IssuersService.java | 2 + .../service/impl/CredentialServiceImpl.java | 130 ++++-------------- .../service/impl/IssuersServiceImpl.java | 21 ++- .../java/io/mosip/mimoto/util/Utilities.java | 21 +++ src/main/resources/bootstrap.properties | 1 + .../mimoto/controller/InjiControllerTest.java | 70 ---------- .../mimoto/service/CredentialServiceTest.java | 49 ------- .../mimoto/service/IssuersServiceTest.java | 6 +- .../io/mosip/mimoto/util/TestUtilities.java | 48 ------- 21 files changed, 97 insertions(+), 406 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/dto/BackgroundImageDTO.java delete mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerWellKnownResponseDraft11.java delete mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponseDraft11.java delete mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/IssuerSupportedCredentialsResponse.java diff --git a/README.md b/README.md index 1fb387ec1..19ad88a5e 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ This repository contains source code for backend service of Inji Mobile and Inji ## Build & run (for developers) -The project requires JDK 11 +The project requires JDK 21 ### Build & install ``` mvn clean install -Dgpg.skip=true -Dmaven.javadoc.skip=true -DskipTests=true diff --git a/src/main/java/io/mosip/mimoto/controller/CommonInjiController.java b/src/main/java/io/mosip/mimoto/controller/CommonInjiController.java index 12d6ac913..27331e718 100644 --- a/src/main/java/io/mosip/mimoto/controller/CommonInjiController.java +++ b/src/main/java/io/mosip/mimoto/controller/CommonInjiController.java @@ -4,6 +4,7 @@ import io.mosip.mimoto.util.DateUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @@ -15,7 +16,7 @@ public class CommonInjiController { @Autowired private Map injiConfig; - @GetMapping("/allProperties") + @GetMapping(value = "/allProperties", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity getAllProperties() { ResponseWrapper> responseWrapper = new ResponseWrapper<>(); responseWrapper.setId("mosip.inji.properties"); diff --git a/src/main/java/io/mosip/mimoto/controller/IdpController.java b/src/main/java/io/mosip/mimoto/controller/IdpController.java index 46654c9d7..79c3fca84 100644 --- a/src/main/java/io/mosip/mimoto/controller/IdpController.java +++ b/src/main/java/io/mosip/mimoto/controller/IdpController.java @@ -49,7 +49,7 @@ public class IdpController { @Autowired RequestValidator requestValidator; - @PostMapping("/binding-otp") + @PostMapping(value = "/binding-otp", produces = MediaType.APPLICATION_JSON_VALUE) @SuppressWarnings("unchecked") public ResponseEntity otpRequest(@Valid @RequestBody BindingOtpRequestDto requestDTO, BindingResult result) throws Exception { logger.debug("Received binding-otp request : " + JsonUtils.javaObjectToJsonString(requestDTO)); @@ -105,7 +105,7 @@ public ResponseEntity request(@RequestBody WalletBindingRequestDTO reque } } - @PostMapping(value = {"/get-token/{issuer}"}, consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) + @PostMapping(value = {"/get-token/{issuer}"}, consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}, produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity getToken(@RequestParam Map params, @PathVariable(required = true, name= "issuer") String issuer) { logger.info("Reached the getToken Controller for Issuer " + issuer); diff --git a/src/main/java/io/mosip/mimoto/controller/IssuersController.java b/src/main/java/io/mosip/mimoto/controller/IssuersController.java index 3f078b601..9f2ee4958 100644 --- a/src/main/java/io/mosip/mimoto/controller/IssuersController.java +++ b/src/main/java/io/mosip/mimoto/controller/IssuersController.java @@ -4,7 +4,6 @@ import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.IssuersDTO; -import io.mosip.mimoto.dto.mimoto.IssuerSupportedCredentialsResponse; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.service.CredentialService; @@ -15,6 +14,7 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -41,7 +41,7 @@ public class IssuersController { private final Logger logger = LoggerFactory.getLogger(IssuersController.class); - @GetMapping() + @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity getAllIssuers(@RequestParam(required = false, name = "search") String search) { ResponseWrapper responseWrapper = new ResponseWrapper<>(); responseWrapper.setId(ID); @@ -58,7 +58,7 @@ public ResponseEntity getAllIssuers(@RequestParam(required = false, name return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); } - @GetMapping("/{issuer-id}/.well-known") + @GetMapping(value = "/{issuer-id}/.well-known", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity getIssuerWellknown(@PathVariable("issuer-id") String issuerId) { try { CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = issuersService.getIssuerWellknown(issuerId); @@ -69,7 +69,7 @@ public ResponseEntity getIssuerWellknown(@PathVariable("issuer-id") Stri } } - @GetMapping("/{issuer-id}") + @GetMapping(value = "/{issuer-id}", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity getIssuerConfig(@PathVariable("issuer-id") String issuerId) { ResponseWrapper responseWrapper = new ResponseWrapper<>(); responseWrapper.setId(ID); @@ -95,31 +95,4 @@ public ResponseEntity getIssuerConfig(@PathVariable("issuer-id") String return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); } - - @GetMapping("/{issuer-id}/credentialTypes") - public ResponseEntity getCredentialTypes(@PathVariable("issuer-id") String issuerId, - @RequestParam(required = false, name = "search") String search) { - ResponseWrapper responseWrapper = new ResponseWrapper<>(); - responseWrapper.setId(ID); - responseWrapper.setVersion("v1"); - responseWrapper.setResponsetime(DateUtils.getRequestTimeString()); - IssuerSupportedCredentialsResponse credentialTypes; - try { - credentialTypes = credentialService.getCredentialsSupported(issuerId, search); - } catch (ApiNotAccessibleException | IOException exception) { - logger.error("Exception occurred while fetching credential types", exception); - responseWrapper.setErrors(List.of(new ErrorDTO(API_NOT_ACCESSIBLE_EXCEPTION.getCode(), API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); - } - responseWrapper.setResponse(credentialTypes); - - if (credentialTypes.getSupportedCredentials() == null) { - logger.error("invalid issuer id passed - {}", issuerId); - responseWrapper.setErrors(List.of(new ErrorDTO(INVALID_ISSUER_ID_EXCEPTION.getCode(), INVALID_ISSUER_ID_EXCEPTION.getMessage()))); - return ResponseEntity.status(HttpStatus.NOT_FOUND).body(responseWrapper); - } - - return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); - } - } diff --git a/src/main/java/io/mosip/mimoto/dto/BackgroundImageDTO.java b/src/main/java/io/mosip/mimoto/dto/BackgroundImageDTO.java new file mode 100644 index 000000000..7c8ad6b19 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/BackgroundImageDTO.java @@ -0,0 +1,14 @@ +package io.mosip.mimoto.dto; + +import com.google.gson.annotations.Expose; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class BackgroundImageDTO { + @Expose + String uri; +} diff --git a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java index 7d731a491..966217b86 100644 --- a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java @@ -39,12 +39,6 @@ public class IssuerDTO { @NotBlank String redirect_uri; @JsonInclude(NON_NULL) - @NotEmpty - List scopes_supported; - @JsonInclude(NON_NULL) - @NotBlank - String authorization_endpoint; - @JsonInclude(NON_NULL) @NotBlank String authorization_audience; @Expose @@ -54,37 +48,13 @@ public class IssuerDTO { @JsonInclude(NON_NULL) @NotBlank String proxy_token_endpoint; - @JsonInclude(NON_NULL) - String credential_endpoint; - @JsonInclude(NON_NULL) - @NotEmpty - List credential_type; - @JsonInclude(NON_NULL) - String credential_audience; @Expose @JsonInclude(NON_NULL) @NotBlank String client_alias; String ovp_qr_enabled; - @JsonInclude(NON_NULL) - Map additional_headers; - @JsonInclude(NON_NULL) - List credentials_supported; @Expose @JsonInclude(NON_NULL) @NotBlank String enabled; } - - -@Data -class SupportedCredential { - @NotEmpty - String format; - @NotEmpty - String id; - Map credential_definition; - String scope; - @JsonInclude(NON_NULL) - List display; -} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerWellKnownResponseDraft11.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerWellKnownResponseDraft11.java deleted file mode 100644 index cb08857a6..000000000 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerWellKnownResponseDraft11.java +++ /dev/null @@ -1,22 +0,0 @@ -package io.mosip.mimoto.dto.mimoto; - -import com.fasterxml.jackson.annotation.JsonProperty; -import com.google.gson.annotations.SerializedName; -import lombok.Data; - -import java.util.List; - -@Data -public class CredentialIssuerWellKnownResponseDraft11 { - @SerializedName("credential_issuer") - @JsonProperty("credential_issuer") - private String credentialIssuer; - - @SerializedName("credential_endpoint") - @JsonProperty("credential_endpoint") - private String credentialEndPoint; - - @SerializedName("credentials_supported") - @JsonProperty("credentials_supported") - private List credentialsSupported; -} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialSupportedDisplayResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialSupportedDisplayResponse.java index 5aa71fb6b..0dd986b6b 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialSupportedDisplayResponse.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialSupportedDisplayResponse.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; +import io.mosip.mimoto.dto.BackgroundImageDTO; import io.mosip.mimoto.dto.LogoDTO; import lombok.Data; @@ -29,7 +30,7 @@ public class CredentialSupportedDisplayResponse { @SerializedName("background_image") @Expose @NotBlank - Map backgroundImage; + BackgroundImageDTO backgroundImage; @JsonProperty("background_color") @SerializedName("background_color") diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java index 59aaa3530..0e6b09189 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java @@ -24,5 +24,5 @@ public class CredentialsSupportedResponse { @SerializedName("display") @JsonProperty("display") private List display; - private Set order; + private List order; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponseDraft11.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponseDraft11.java deleted file mode 100644 index ec176265c..000000000 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponseDraft11.java +++ /dev/null @@ -1,26 +0,0 @@ -package io.mosip.mimoto.dto.mimoto; - -import com.fasterxml.jackson.annotation.JsonProperty; -import com.google.gson.annotations.SerializedName; -import lombok.Data; - -import java.util.List; -import java.util.Set; - -@Data -public class CredentialsSupportedResponseDraft11 { - private String format; - private String id; - private String scope; - - @SerializedName("proof_types_supported") - @JsonProperty("proof_types_supported") - private List proofTypesSupported; - - @SerializedName("credential_definition") - @JsonProperty("credential_definition") - private CredentialDefinitionResponseDto credentialDefinition; - - private List display; - private Set order; -} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/IssuerSupportedCredentialsResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/IssuerSupportedCredentialsResponse.java deleted file mode 100644 index e535d6e91..000000000 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/IssuerSupportedCredentialsResponse.java +++ /dev/null @@ -1,13 +0,0 @@ -package io.mosip.mimoto.dto.mimoto; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - -import java.util.List; - -@Data -public class IssuerSupportedCredentialsResponse { - @JsonProperty("authorization_endpoint") - private String authorizationEndPoint; - private List supportedCredentials; -} diff --git a/src/main/java/io/mosip/mimoto/service/CredentialService.java b/src/main/java/io/mosip/mimoto/service/CredentialService.java index ed89184e6..603499aa7 100644 --- a/src/main/java/io/mosip/mimoto/service/CredentialService.java +++ b/src/main/java/io/mosip/mimoto/service/CredentialService.java @@ -13,5 +13,4 @@ public interface CredentialService { TokenResponseDTO getTokenResponse(Map params, String issuerId) throws ApiNotAccessibleException, IOException; ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String credentialType, TokenResponseDTO response) throws Exception; - IssuerSupportedCredentialsResponse getCredentialsSupported(String issuerId, String search) throws ApiNotAccessibleException, IOException; } diff --git a/src/main/java/io/mosip/mimoto/service/IssuersService.java b/src/main/java/io/mosip/mimoto/service/IssuersService.java index e5cd3fe74..ab1ef4c04 100644 --- a/src/main/java/io/mosip/mimoto/service/IssuersService.java +++ b/src/main/java/io/mosip/mimoto/service/IssuersService.java @@ -16,4 +16,6 @@ public interface IssuersService { IssuerDTO getIssuerConfig(String issuerId) throws ApiNotAccessibleException, IOException, InvalidIssuerIdException; CredentialIssuerWellKnownResponse getIssuerWellknown(String issuerId) throws ApiNotAccessibleException, IOException; + + CredentialsSupportedResponse getIssuerWellknownForCredentialType(String issuerId, String credentialId) throws ApiNotAccessibleException, IOException; } diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java index 772d63f29..c15430a57 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java @@ -20,7 +20,6 @@ import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.IdpException; import io.mosip.mimoto.exception.InvalidCredentialResourceException; -import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.service.CredentialService; import io.mosip.mimoto.service.IdpService; import io.mosip.mimoto.service.IssuersService; @@ -41,7 +40,6 @@ import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; -import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -99,12 +97,12 @@ public TokenResponseDTO getTokenResponse(Map params, String issu @Override public ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String credentialType, TokenResponseDTO response) throws Exception { IssuerDTO issuerConfig = issuerService.getIssuerConfig(issuerId); - CredentialIssuerWellKnownResponseDraft11 credentialIssuerWellKnownResponseDraft11 = getCredentialIssuerWellknown(issuerId, credentialType); - CredentialsSupportedResponseDraft11 credentialsSupportedResponseDraft11 = getCredentialSupported(credentialIssuerWellKnownResponseDraft11, credentialType); - VCCredentialRequest vcCredentialRequest = generateVCCredentialRequest(issuerConfig, credentialsSupportedResponseDraft11, response.getAccess_token()); - VCCredentialResponse vcCredentialResponse = downloadCredential(credentialIssuerWellKnownResponseDraft11.getCredentialEndPoint(), vcCredentialRequest, response.getAccess_token()); + CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = issuerService.getIssuerWellknown(issuerId); + CredentialsSupportedResponse credentialsSupportedResponse = issuerService.getIssuerWellknownForCredentialType(issuerId, credentialType); + VCCredentialRequest vcCredentialRequest = generateVCCredentialRequest(issuerConfig, credentialIssuerWellKnownResponse, credentialsSupportedResponse, response.getAccess_token()); + VCCredentialResponse vcCredentialResponse = downloadCredential(credentialIssuerWellKnownResponse.getCredentialEndPoint(), vcCredentialRequest, response.getAccess_token()); String dataShareUrl = dataShareService.storeDataInDataShare(objectMapper.writeValueAsString(vcCredentialResponse)); - return generatePdfForVerifiableCredentials(vcCredentialResponse, issuerConfig, credentialsSupportedResponseDraft11, dataShareUrl); + return generatePdfForVerifiableCredentials(vcCredentialResponse, issuerConfig, credentialsSupportedResponse, dataShareUrl); } public VCCredentialResponse downloadCredential(String credentialEndpoint, VCCredentialRequest vcCredentialRequest, String accessToken) throws InvalidCredentialResourceException { @@ -115,39 +113,39 @@ public VCCredentialResponse downloadCredential(String credentialEndpoint, VCCred return vcCredentialResponse; } - public VCCredentialRequest generateVCCredentialRequest(IssuerDTO issuerDTO, CredentialsSupportedResponseDraft11 credentialsSupportedResponseDraft11, String accessToken) throws Exception { - String jwt = joseUtil.generateJwt(issuerDTO.getCredential_audience(), issuerDTO.getClient_id(), accessToken); + public VCCredentialRequest generateVCCredentialRequest(IssuerDTO issuerDTO, CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse, CredentialsSupportedResponse credentialsSupportedResponse, String accessToken) throws Exception { + String jwt = joseUtil.generateJwt(credentialIssuerWellKnownResponse.getCredentialIssuer(), issuerDTO.getClient_id(), accessToken); return VCCredentialRequest.builder() - .format(credentialsSupportedResponseDraft11.getFormat()) + .format(credentialsSupportedResponse.getFormat()) .proof(VCCredentialRequestProof.builder() - .proofType(credentialsSupportedResponseDraft11.getProofTypesSupported().get(0)) + .proofType(credentialsSupportedResponse.getProofTypesSupported().keySet().stream().findFirst().get()) .jwt(jwt) .build()) .credentialDefinition(VCCredentialDefinition.builder() - .type(credentialsSupportedResponseDraft11.getCredentialDefinition().getType()) + .type(credentialsSupportedResponse.getCredentialDefinition().getType()) .context(List.of("https://www.w3.org/2018/credentials/v1")) .build()) .build(); } - public ByteArrayInputStream generatePdfForVerifiableCredentials(VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, CredentialsSupportedResponseDraft11 credentialsSupportedResponseDraft11, String dataShareUrl) throws Exception { - LinkedHashMap displayProperties = loadDisplayPropertiesFromWellknown(vcCredentialResponse, credentialsSupportedResponseDraft11); - Map data = getPdfResourceFromVcProperties(displayProperties, credentialsSupportedResponseDraft11, vcCredentialResponse, issuerDTO, dataShareUrl); + public ByteArrayInputStream generatePdfForVerifiableCredentials(VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String dataShareUrl) throws Exception { + LinkedHashMap displayProperties = loadDisplayPropertiesFromWellknown(vcCredentialResponse, credentialsSupportedResponse); + Map data = getPdfResourceFromVcProperties(displayProperties, credentialsSupportedResponse, vcCredentialResponse, issuerDTO, dataShareUrl); return renderVCInCredentialTemplate(data); } @NotNull - private static LinkedHashMap loadDisplayPropertiesFromWellknown(VCCredentialResponse vcCredentialResponse, CredentialsSupportedResponseDraft11 credentialsSupportedResponseDraft11) { + private static LinkedHashMap loadDisplayPropertiesFromWellknown(VCCredentialResponse vcCredentialResponse, CredentialsSupportedResponse credentialsSupportedResponse) { LinkedHashMap displayProperties = new LinkedHashMap<>(); Map credentialProperties = vcCredentialResponse.getCredential().getCredentialSubject(); LinkedHashMap vcPropertiesFromWellKnown = new LinkedHashMap<>(); - Map credentialSubject = credentialsSupportedResponseDraft11.getCredentialDefinition().getCredentialSubject(); + Map credentialSubject = credentialsSupportedResponse.getCredentialDefinition().getCredentialSubject(); credentialSubject.keySet().forEach(VCProperty -> vcPropertiesFromWellKnown.put(VCProperty, credentialSubject.get(VCProperty).getDisplay().get(0).getName())); - Set orderProperty = credentialsSupportedResponseDraft11.getOrder(); + List orderProperty = credentialsSupportedResponse.getOrder(); - Set fieldProperties = orderProperty == null ? vcPropertiesFromWellKnown.keySet() : orderProperty; + List fieldProperties = orderProperty == null ? new ArrayList<>(vcPropertiesFromWellKnown.keySet()) : orderProperty; fieldProperties.forEach(vcProperty -> { if(credentialProperties.get(vcProperty) != null) { displayProperties.put(vcPropertiesFromWellKnown.get(vcProperty), credentialProperties.get(vcProperty)); @@ -157,12 +155,13 @@ private static LinkedHashMap loadDisplayPropertiesFromWellknown( } - private Map getPdfResourceFromVcProperties(LinkedHashMap displayProperties, CredentialsSupportedResponseDraft11 credentialsSupportedResponseDraft11, VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, String dataShareUrl) throws IOException, WriterException { + private Map getPdfResourceFromVcProperties(LinkedHashMap displayProperties, CredentialsSupportedResponse credentialsSupportedResponse, VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, String dataShareUrl) throws IOException, WriterException { Map data = new HashMap<>(); LinkedHashMap rowProperties = new LinkedHashMap<>(); - String backgroundColor = credentialsSupportedResponseDraft11.getDisplay().get(0).getBackgroundColor(); - String textColor = credentialsSupportedResponseDraft11.getDisplay().get(0).getTextColor(); - String credentialSupportedType = credentialsSupportedResponseDraft11.getDisplay().get(0).getName(); + String backgroundColor = credentialsSupportedResponse.getDisplay().get(0).getBackgroundColor(); + String backgroundImage = credentialsSupportedResponse.getDisplay().get(0).getBackgroundImage().getUri(); + String textColor = credentialsSupportedResponse.getDisplay().get(0).getTextColor(); + String credentialSupportedType = credentialsSupportedResponse.getDisplay().get(0).getName(); String face = vcCredentialResponse.getCredential().getCredentialSubject().get("face") != null ? (String) vcCredentialResponse.getCredential().getCredentialSubject().get("face") : null; displayProperties.entrySet().stream() @@ -184,12 +183,13 @@ private Map getPdfResourceFromVcProperties(LinkedHashMap d.getLogo().getUrl()).findFirst().orElse("")); data.put("rowProperties", rowProperties); data.put("textColor", textColor); data.put("backgroundColor", backgroundColor); + data.put("backgroundImage", backgroundImage); data.put("titleName", credentialSupportedType); data.put("face", face); return data; @@ -225,11 +225,11 @@ private String constructQRCode(String qrData) throws WriterException { QRCodeWriter qrCodeWriter = new QRCodeWriter(); BitMatrix bitMatrix = qrCodeWriter.encode(qrData, BarcodeFormat.QR_CODE, 650, 650); BufferedImage qrImage = MatrixToImageWriter.toBufferedImage(bitMatrix); - return encodeToString(qrImage, "png"); + return Utilities.encodeToString(qrImage, "png"); } - private String constructQRCodeWithVCData(CredentialsSupportedResponseDraft11 credentialsSupportedResponseDraft11, VCCredentialResponse vcCredentialResponse) throws JsonProcessingException, WriterException { - if(!credentialsSupportedResponseDraft11.getId().equals("MOSIPVerifiableCredential")) { + private String constructQRCodeWithVCData(VCCredentialResponse vcCredentialResponse) throws JsonProcessingException, WriterException { + if(!vcCredentialResponse.getCredential().getType().contains("MOSIPVerifiableCredential")) { PixelPass pixelPass = new PixelPass(); ObjectMapper objectMapper = new ObjectMapper(); String qrData = pixelPass.generateQRData(objectMapper.writeValueAsString(vcCredentialResponse.getCredential()), ""); @@ -244,80 +244,4 @@ private String constructQRCodeWithAuthorizeRequest(VCCredentialResponse vcCreden String qrData = String.format(injiWebAuthorizeUrl, URLEncoder.encode(dataShareUrl, StandardCharsets.UTF_8), URLEncoder.encode(presentationString, StandardCharsets.UTF_8)); return constructQRCode(qrData); } - - public static String encodeToString(BufferedImage image, String type) { - String imageString = null; - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - - try { - ImageIO.write(image, type, bos); - byte[] imageBytes = bos.toByteArray(); - Base64.Encoder encoder = Base64.getEncoder(); - imageString = encoder.encodeToString(imageBytes); - bos.close(); - } catch (Exception e) { - e.printStackTrace(); - } - return imageString; - } - - @Override - public IssuerSupportedCredentialsResponse getCredentialsSupported(String issuerId, String search) throws ApiNotAccessibleException, IOException { - IssuerSupportedCredentialsResponse credentialTypesWithAuthorizationEndpoint = new IssuerSupportedCredentialsResponse(); - - IssuersDTO issuersDto = issuerService.getAllIssuersWithAllFields(); - - Optional issuerConfigResp = issuersDto.getIssuers().stream() - .filter(issuer -> issuer.getCredential_issuer().equals(issuerId)) - .findFirst(); - if (issuerConfigResp.isPresent()) { - IssuerDTO issuerDto = issuerConfigResp.get(); - - CredentialIssuerWellKnownResponseDraft11 response = restApiClient.getApi(issuerDto.getWellKnownEndpoint(), CredentialIssuerWellKnownResponseDraft11.class); - if (response == null) { - throw new ApiNotAccessibleException(); - } - List issuerCredentialsSupported = response.getCredentialsSupported(); - credentialTypesWithAuthorizationEndpoint.setAuthorizationEndPoint(issuerDto.getAuthorization_endpoint()); - credentialTypesWithAuthorizationEndpoint.setSupportedCredentials(issuerCredentialsSupported); - - if (!StringUtils.isEmpty(search)){ - credentialTypesWithAuthorizationEndpoint.setSupportedCredentials(issuerCredentialsSupported - .stream() - .filter(credentialsSupportedResponse -> credentialsSupportedResponse.getDisplay().stream() - .anyMatch(credDisplay -> credDisplay.getName().toLowerCase().contains(search.toLowerCase()))) - .collect(Collectors.toList())); - } - return credentialTypesWithAuthorizationEndpoint; - } - return credentialTypesWithAuthorizationEndpoint; - } - public CredentialIssuerWellKnownResponseDraft11 getCredentialIssuerWellknown(String issuerId, String search) throws ApiNotAccessibleException, IOException { - CredentialIssuerWellKnownResponseDraft11 credentialIssuerWellKnownResponseDraft11 = new CredentialIssuerWellKnownResponseDraft11(); - IssuersDTO issuersDto = issuerService.getAllIssuersWithAllFields(); - Optional issuerConfigResp = issuersDto.getIssuers().stream() - .filter(issuer -> issuer.getCredential_issuer().equals(issuerId)) - .findFirst(); - if (issuerConfigResp.isPresent()) { - IssuerDTO issuerDto = issuerConfigResp.get(); - credentialIssuerWellKnownResponseDraft11 = restApiClient.getApi(issuerDto.getWellKnownEndpoint(), CredentialIssuerWellKnownResponseDraft11.class); - if (credentialIssuerWellKnownResponseDraft11 == null) { - throw new ApiNotAccessibleException(); - } - } - return credentialIssuerWellKnownResponseDraft11; - } - - public CredentialsSupportedResponseDraft11 getCredentialSupported(CredentialIssuerWellKnownResponseDraft11 credentialIssuerWellKnownResponseDraft11, String credentialType) throws InvalidCredentialResourceException { - Optional credentialsSupportedResponse = credentialIssuerWellKnownResponseDraft11.getCredentialsSupported().stream() - .filter(credentialsSupported -> credentialsSupported.getId().equals(credentialType)) - .findFirst(); - if (credentialsSupportedResponse.isEmpty()){ - logger.error("Invalid credential Type passed - {}", credentialType); - throw new InvalidCredentialResourceException(ErrorConstants.RESOURCE_NOT_FOUND.getErrorMessage()); - } - return credentialsSupportedResponse.get(); - } - - } diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index c3e64f23d..3a1f9ab54 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -7,6 +7,7 @@ import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.IssuersDTO; import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; +import io.mosip.mimoto.dto.mimoto.CredentialsSupportedResponse; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.InvalidIssuerIdException; import io.mosip.mimoto.service.IssuersService; @@ -20,6 +21,7 @@ import java.io.IOException; import java.util.List; import java.util.Optional; +import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; @@ -94,10 +96,21 @@ public IssuerDTO getIssuerConfig(String issuerId) throws ApiNotAccessibleExcepti @Override public CredentialIssuerWellKnownResponse getIssuerWellknown(String issuerId) throws ApiNotAccessibleException, IOException { - IssuerDTO issuerConfig = getIssuerConfig(issuerId); - String wellknown = issuerConfig.getWellKnownEndpoint(); - String wellknownJson = restApiClient.getApi(wellknown, String.class); - return new Gson().fromJson(wellknownJson, CredentialIssuerWellKnownResponse.class); + return (CredentialIssuerWellKnownResponse) getAllIssuersWithAllFields().getIssuers().stream() + .filter(issuer -> issuer.getCredential_issuer().equals(issuerId)) + .findFirst() + .map(issuerDTO -> restApiClient.getApi(issuerDTO.getWellKnownEndpoint(), CredentialIssuerWellKnownResponse.class)) + .orElseThrow(ApiNotAccessibleException::new); + } + + @Override + public CredentialsSupportedResponse getIssuerWellknownForCredentialType(String issuerId, String credentialId) throws ApiNotAccessibleException, IOException { + CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = getIssuerWellknown(issuerId); + CredentialsSupportedResponse credentialsSupportedResponse = credentialIssuerWellKnownResponse.getCredentialConfigurationsSupported().get(credentialId); + if(credentialsSupportedResponse == null){ + throw new ApiNotAccessibleException(); + } + return credentialsSupportedResponse; } } diff --git a/src/main/java/io/mosip/mimoto/util/Utilities.java b/src/main/java/io/mosip/mimoto/util/Utilities.java index a4b17bd54..d93f2615c 100644 --- a/src/main/java/io/mosip/mimoto/util/Utilities.java +++ b/src/main/java/io/mosip/mimoto/util/Utilities.java @@ -11,14 +11,19 @@ import org.json.simple.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Profile; import org.springframework.core.io.Resource; import org.springframework.stereotype.Component; +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.ByteArrayOutputStream; import java.io.IOException; import java.net.URI; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; +import java.util.Base64; import java.util.List; import static io.mosip.mimoto.constant.LoggerFileConstant.DELIMITER; @@ -83,6 +88,22 @@ public class Utilities { // credentialTemplateHtmlString = (Files.readString(credentialTemplateResource.getFile().toPath())); // } + public static String encodeToString(BufferedImage image, String type) { + String imageString = null; + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + + try { + ImageIO.write(image, type, bos); + byte[] imageBytes = bos.toByteArray(); + Base64.Encoder encoder = Base64.getEncoder(); + imageString = encoder.encodeToString(imageBytes); + bos.close(); + } catch (Exception e) { + e.printStackTrace(); + } + return imageString; + } + public JSONObject getTemplate() throws IOException { return objectMapper.readValue(classLoader.getResourceAsStream(defaultTemplate), JSONObject.class); } diff --git a/src/main/resources/bootstrap.properties b/src/main/resources/bootstrap.properties index 992e2a0b4..0c72fa3da 100644 --- a/src/main/resources/bootstrap.properties +++ b/src/main/resources/bootstrap.properties @@ -3,6 +3,7 @@ spring.cloud.config.label=develop spring.profiles.active=local spring.cloud.config.name=mimoto,inji spring.application.name=mimoto +config.server.file.storage.uri=${spring.cloud.config.uri}/print/${spring.profiles.active}/${spring.cloud.config.label}/ management.endpoint.health.show-details=always management.endpoints.web.exposure.include=info,health,refresh diff --git a/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java b/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java index 6c6f3e34e..3cb0353aa 100644 --- a/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java @@ -131,76 +131,6 @@ public void getAllPropertiesTest() throws Exception { } - - @Test - public void getCredentialTypesTest() throws Exception { - IssuerSupportedCredentialsResponse credentialTypesResponse = new IssuerSupportedCredentialsResponse(); - credentialTypesResponse.setSupportedCredentials(List.of(getCredentialSupportedResponseDraft11("credentialType1"), - getCredentialSupportedResponseDraft11("credentialType2"))); - credentialTypesResponse.setAuthorizationEndPoint("authorization-endpoint"); - Mockito.when(credentialService.getCredentialsSupported("Issuer1", null)) - .thenReturn(credentialTypesResponse) - .thenThrow(new ApiNotAccessibleException()); - Mockito.when(credentialService.getCredentialsSupported("invalidId", null)) - .thenReturn(new IssuerSupportedCredentialsResponse()); - - mockMvc.perform(get("/issuers/{issuer-id}/credentialTypes", "Issuer1").accept(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.response", Matchers.allOf( - Matchers.hasKey("authorization_endpoint"), - Matchers.hasKey("supportedCredentials") - ))) - .andExpect(jsonPath("$.response.supportedCredentials", Matchers.everyItem( - Matchers.allOf( - Matchers.hasKey("format"), - Matchers.hasKey("id"), - Matchers.hasKey("scope"), - Matchers.hasKey("display"), - Matchers.hasKey("proof_types_supported"), - Matchers.hasKey("credential_definition") - ) - ))); - mockMvc.perform(get("/issuers/{issuer-id}/credentialTypes", "Issuer1").accept(MediaType.APPLICATION_JSON)) - .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getCode()))) - .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); - - mockMvc.perform(get("/issuers/{issuer-id}/credentialTypes", "invalidId").accept(MediaType.APPLICATION_JSON)) - .andExpect(status().isNotFound()) - .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is(INVALID_ISSUER_ID_EXCEPTION.getCode()))) - .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(INVALID_ISSUER_ID_EXCEPTION.getMessage()))); - } - - @Ignore - @Test - public void generatePdfForVCTest() throws Exception { - Mockito.when(issuersService.getIssuerConfig("Issuer1")) - .thenReturn(getIssuerDTO("Issuer1")) - .thenThrow(new ApiNotAccessibleException()); - - Mockito.when(restApiClient.getApi(ArgumentMatchers.any(String.class), ArgumentMatchers.any())) - .thenReturn(getCredentialIssuerWellKnownResponseDtoDraft11("Issuer1", - List.of(getCredentialSupportedResponseDraft11("CredentialType1")))); - - - Mockito.when(credentialService.generatePdfForVerifiableCredentials(new VCCredentialResponse(), - getIssuerDTO("Issuer1"), getCredentialSupportedResponseDraft11("CredentialType1"), - "dataShareUrl")) - .thenReturn(new ByteArrayInputStream("Mock Pdf".getBytes())) - .thenThrow(new Exception()); - - mockMvc.perform(get("/issuers/Issuer1/credentials/CredentialType1/download") - .header("Authorization", "Bearer accessToken") - .accept(MediaType.APPLICATION_PDF)) - .andExpect(status().isOk()); - - mockMvc.perform(get("/issuers/Issuer1/credentials/CredentialType1/download") - .header("Authorization", "Bearer accessToken").accept(MediaType.APPLICATION_JSON_VALUE)) - .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getCode()))) - .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); - } - @Test public void getAllIssuersTest() throws Exception { IssuersDTO issuers = new IssuersDTO(); diff --git a/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java index 3ad520490..8f1001263 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java @@ -33,49 +33,6 @@ @SpringBootTest public class CredentialServiceTest { - @Mock - IssuersService issuersService = new IssuersServiceImpl(); - @InjectMocks - CredentialServiceImpl credentialService = new CredentialServiceImpl(); - - @Mock - Utilities utilities; - - @Mock - public RestApiClient restApiClient; - - List issuerConfigRelatedFields = List.of("additional_headers", "authorization_endpoint","authorization_audience", "token_endpoint", "proxy_token_endpoint", "credential_endpoint", "credential_audience", "redirect_uri"); - - @Before - public void setUp() throws Exception { - IssuersDTO issuers = new IssuersDTO(); - issuers.setIssuers(List.of(getIssuerConfigDTO("Issuer1", Collections.emptyList()), getIssuerConfigDTO("Issuer2", Collections.emptyList()))); - Mockito.when(issuersService.getAllIssuersWithAllFields()).thenReturn(issuers); - } - - @Test - public void shouldReturnIssuerCredentialSupportedResponseForTheIssuerIdIfExist() throws Exception { - IssuerSupportedCredentialsResponse expectedIssuerCredentialsSupported = new IssuerSupportedCredentialsResponse(); - List credentialsSupportedResponsDraft11s =List.of(getCredentialSupportedResponseDraft11("CredentialSupported1"), - getCredentialSupportedResponseDraft11("CredentialSupported2")); - - String authorization_endpoint = getIssuerConfigDTO("Issuer1", issuerConfigRelatedFields).getAuthorization_endpoint(); - expectedIssuerCredentialsSupported.setSupportedCredentials(credentialsSupportedResponsDraft11s); - expectedIssuerCredentialsSupported.setAuthorizationEndPoint(authorization_endpoint); - - Mockito.when(restApiClient.getApi(any(String.class), any())).thenReturn(getCredentialIssuerWellKnownResponseDtoDraft11("Issuer1", - List.of(getCredentialSupportedResponseDraft11("CredentialSupported1"), getCredentialSupportedResponseDraft11("CredentialSupported2")))); - IssuerSupportedCredentialsResponse issuerSupportedCredentialsResponse = credentialService.getCredentialsSupported("Issuer1id", null); - assertEquals(issuerSupportedCredentialsResponse, expectedIssuerCredentialsSupported); - } - - @Test - public void shouldReturnNullIfTheIssuerIdNotExistsForCredentialSupportedTypes() throws ApiNotAccessibleException, IOException { - IssuerSupportedCredentialsResponse issuerSupportedCredentialsResponse = credentialService.getCredentialsSupported("Issuer3id", null); - assertNull(issuerSupportedCredentialsResponse.getSupportedCredentials()); - assertNull(issuerSupportedCredentialsResponse.getAuthorizationEndPoint()); - } - @Test public void shouldParseHtmlStringToDocument() { String htmlContent = "

$message

"; @@ -89,10 +46,4 @@ public void shouldParseHtmlStringToDocument() { assertTrue(mergedHtml.contains("PDF")); } - - @Test(expected = ApiNotAccessibleException.class) - public void shouldThrowApiNotAccessibleExceptionWhenCredentialsSupportedJsonStringIsNullForGettingCredentialsSupportedList() throws Exception { - Mockito.when(restApiClient.getApi(any(String.class), any(Class.class))).thenReturn(null); - credentialService.getCredentialsSupported("Issuer1id", null); - } } diff --git a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java index baef1778b..21b3d0cea 100644 --- a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java @@ -93,12 +93,12 @@ public void shouldReturnIssuerWellknownForTheIssuerIdIfExist() throws ApiNotAcce CredentialIssuerWellKnownResponse expextedCredentialIssuerWellKnownResponse=getCredentialIssuerWellKnownResponseDto("Issuer1", Map.of("CredentialType1",getCredentialSupportedResponse("CredentialType1"))); - Mockito.when(restApiClient.getApi(wellKnownUrl , String.class)) - .thenReturn(getExpectedWellKnownJson()); + Mockito.when(restApiClient.getApi(wellKnownUrl , CredentialIssuerWellKnownResponse.class)) + .thenReturn(expextedCredentialIssuerWellKnownResponse); CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse=issuersService.getIssuerWellknown(issuerId); assertEquals(expextedCredentialIssuerWellKnownResponse,credentialIssuerWellKnownResponse); - verify(restApiClient, times(1)).getApi(wellKnownUrl, String.class); + verify(restApiClient, times(1)).getApi(wellKnownUrl, CredentialIssuerWellKnownResponse.class); } @Test diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index 064856f3f..e369eea24 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -20,33 +20,6 @@ import java.util.Map; public class TestUtilities { - public static CredentialsSupportedResponseDraft11 getCredentialSupportedResponseDraft11(String credentialSupportedName){ - LogoDTO logo = new LogoDTO(); - logo.setUrl("/logo"); - logo.setAlt_text("logo-url"); - CredentialSupportedDisplayResponse credentialSupportedDisplay = new CredentialSupportedDisplayResponse(); - credentialSupportedDisplay.setLogo(logo); - credentialSupportedDisplay.setName(credentialSupportedName); - credentialSupportedDisplay.setLocale("en"); - credentialSupportedDisplay.setTextColor("#FFFFFF"); - credentialSupportedDisplay.setBackgroundColor("#B34622"); - CredentialIssuerDisplayResponse credentialIssuerDisplayResponse = new CredentialIssuerDisplayResponse(); - credentialIssuerDisplayResponse.setName("Given Name"); - credentialIssuerDisplayResponse.setLocale("en"); - CredentialDisplayResponseDto credentialDisplayResponseDto = new CredentialDisplayResponseDto(); - credentialDisplayResponseDto.setDisplay(Collections.singletonList(credentialIssuerDisplayResponse)); - CredentialDefinitionResponseDto credentialDefinitionResponseDto = new CredentialDefinitionResponseDto(); - credentialDefinitionResponseDto.setType(List.of("VerifiableCredential", credentialSupportedName)); - credentialDefinitionResponseDto.setCredentialSubject(Map.of("name", credentialDisplayResponseDto)); - CredentialsSupportedResponseDraft11 credentialsSupportedResponseDraft11 = new CredentialsSupportedResponseDraft11(); - credentialsSupportedResponseDraft11.setFormat("ldp_vc"); - credentialsSupportedResponseDraft11.setId(credentialSupportedName+"id"); - credentialsSupportedResponseDraft11.setScope(credentialSupportedName+"_vc_ldp"); - credentialsSupportedResponseDraft11.setDisplay(Collections.singletonList(credentialSupportedDisplay)); - credentialsSupportedResponseDraft11.setProofTypesSupported(Collections.singletonList("jwt")); - credentialsSupportedResponseDraft11.setCredentialDefinition(credentialDefinitionResponseDto); - return credentialsSupportedResponseDraft11; - } public static CredentialsSupportedResponse getCredentialSupportedResponse(String credentialSupportedName){ LogoDTO logo = new LogoDTO(); @@ -75,16 +48,6 @@ public static CredentialsSupportedResponse getCredentialSupportedResponse(String return credentialsSupportedResponse; } - public static CredentialIssuerWellKnownResponseDraft11 getCredentialIssuerWellKnownResponseDtoDraft11(String issuerName, List credentialsSupportedResponseDraft11sDraft11s){ - CredentialIssuerWellKnownResponseDraft11 credentialIssuerWellKnownResponseDraft11 = new CredentialIssuerWellKnownResponseDraft11(); - credentialIssuerWellKnownResponseDraft11.setCredentialIssuer(issuerName); - credentialIssuerWellKnownResponseDraft11.setCredentialEndPoint("/credential_endpoint"); - credentialIssuerWellKnownResponseDraft11.setCredentialsSupported(credentialsSupportedResponseDraft11sDraft11s); - return credentialIssuerWellKnownResponseDraft11; - } - - - public static CredentialIssuerWellKnownResponse getCredentialIssuerWellKnownResponseDto(String issuerName, Map credentialsSupportedResponses){ CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = new CredentialIssuerWellKnownResponse(); credentialIssuerWellKnownResponse.setCredentialIssuer(issuerName); @@ -109,10 +72,7 @@ public static IssuerDTO getIssuerDTO(String issuerName) { if (issuerName.equals("Issuer1")) issuer.setWellKnownEndpoint("/.well-known"); else { issuer.setRedirect_uri(null); - issuer.setAuthorization_endpoint(null); - issuer.setCredential_endpoint(null); issuer.setToken_endpoint(null); - issuer.setScopes_supported(null); } return issuer; } @@ -175,18 +135,10 @@ public static IssuerDTO getIssuerConfigDTO(String issuerName, List nullF issuer.setAuthorization_audience("/authorization_audience"); if (!nullFields.contains("redirect_uri")) issuer.setRedirect_uri("/redirection"); - if (!nullFields.contains("authorization_endpoint")) - issuer.setAuthorization_endpoint("/authorization_endpoint"); if (!nullFields.contains("token_endpoint")) issuer.setToken_endpoint("/token_endpoint"); if (!nullFields.contains("proxy_token_endpoint")) issuer.setProxy_token_endpoint("/proxy_token_endpoint"); - if (!nullFields.contains("credential_endpoint")) - issuer.setCredential_endpoint("/credential_endpoint"); - if (!nullFields.contains("credential_audience")) - issuer.setCredential_audience("/credential_audience"); - if (!nullFields.contains("additional_headers")) - issuer.setAdditional_headers(Map.of("Content-Type", "application/json")); } return issuer; } From fc4f8c121d80cb3bb5ac7ce61ccb7aa2cb9d9d83 Mon Sep 17 00:00:00 2001 From: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> Date: Wed, 7 Aug 2024 19:14:33 +0530 Subject: [PATCH 200/860] MOSIP-35107 - Updated the biometric details w.r.t mock mds java21 (#379) Signed-off-by: Mohanachandran S --- .../java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java | 1 + 1 file changed, 1 insertion(+) diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java b/apitest/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java index ebd839604..fddc667de 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java @@ -93,6 +93,7 @@ public static void main(String[] arg) { AdminTestUtil.createEditAndPublishPolicy(); PartnerRegistration.deviceGeneration(); + // Generating biometric details with mock MDS BiometricDataProvider.generateBiometricTestData("Registration"); startTestRunner(); From 3fd9b43733ef37802dca7e9e875b52735a5a7ad1 Mon Sep 17 00:00:00 2001 From: Vijay <94220135+vijay151096@users.noreply.github.com> Date: Thu, 8 Aug 2024 16:17:45 +0530 Subject: [PATCH 201/860] [INJIWEB-639] : Address all the OVP PR review comments Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- .../config/credential-template.html | 3 +- pom.xml | 5 +++ .../mimoto/controller/IssuersController.java | 2 +- .../controller/PresentationController.java | 27 ++++++++---- .../java/io/mosip/mimoto/dto/IssuerDTO.java | 8 ++-- .../presentation/PresentationRequestDTO.java | 13 ++++-- .../io/mosip/mimoto/model/QRCodeType.java | 6 +++ .../service/impl/CredentialServiceImpl.java | 43 ++++++++++++------- .../service/impl/PresentationServiceImpl.java | 24 +++++------ .../service/impl/VerifierServiceImpl.java | 27 +++++++++--- .../java/io/mosip/mimoto/util/Utilities.java | 1 - .../resources/application-local.properties | 13 +++--- .../templates/CredentialTemplate.html | 0 .../templates/credential-template.html | 1 + .../service/PresentationServiceTest.java | 8 +--- .../mimoto/service/VerifierServiceTest.java | 12 ++---- .../io/mosip/mimoto/util/TestUtilities.java | 10 ++--- .../resources/application-test.properties | 13 +++--- 18 files changed, 132 insertions(+), 84 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/model/QRCodeType.java delete mode 100644 src/main/resources/templates/CredentialTemplate.html diff --git a/docker-compose/config/credential-template.html b/docker-compose/config/credential-template.html index 204c1d945..4607e5b04 100644 --- a/docker-compose/config/credential-template.html +++ b/docker-compose/config/credential-template.html @@ -33,6 +33,7 @@ #end + QR Code - \ No newline at end of file + diff --git a/pom.xml b/pom.xml index 00faaa0a1..5a23fb163 100644 --- a/pom.xml +++ b/pom.xml @@ -275,6 +275,11 @@ velocity 1.7 + + commons-validator + commons-validator + 1.7 + org.apache.velocity velocity-tools diff --git a/src/main/java/io/mosip/mimoto/controller/IssuersController.java b/src/main/java/io/mosip/mimoto/controller/IssuersController.java index 9f2ee4958..e74c84997 100644 --- a/src/main/java/io/mosip/mimoto/controller/IssuersController.java +++ b/src/main/java/io/mosip/mimoto/controller/IssuersController.java @@ -4,7 +4,7 @@ import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.IssuersDTO; -import io.mosip.mimoto.dto.mimoto.*; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.service.CredentialService; import io.mosip.mimoto.service.IdpService; diff --git a/src/main/java/io/mosip/mimoto/controller/PresentationController.java b/src/main/java/io/mosip/mimoto/controller/PresentationController.java index 280df3d66..ac60ec154 100644 --- a/src/main/java/io/mosip/mimoto/controller/PresentationController.java +++ b/src/main/java/io/mosip/mimoto/controller/PresentationController.java @@ -1,9 +1,9 @@ package io.mosip.mimoto.controller; import io.mosip.mimoto.dto.openid.presentation.PresentationRequestDTO; +import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.exception.InvalidCredentialResourceException; import io.mosip.mimoto.exception.InvalidVerifierException; -import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.exception.VPNotCreatedException; import io.mosip.mimoto.service.PresentationService; import jakarta.servlet.http.HttpServletResponse; @@ -12,7 +12,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.io.IOException; @@ -26,31 +26,42 @@ public class PresentationController { PresentationService presentationService; private final Logger logger = LoggerFactory.getLogger(PresentationController.class); - @Value("${mosip.inji.ovp.error.redirect.url}") - String injiOvpErrorRedirectUrl; + @Value("${mosip.inji.ovp.error.redirect.url.pattern}") + String injiOvpErrorRedirectUrlPattern; @Value("${mosip.inji.web.redirect.url}") String injiWebRedirectUrl; @GetMapping("/authorize") - public void performAuthorization(HttpServletResponse response, @ModelAttribute PresentationRequestDTO presentationRequestDTO) throws IOException { + public void performAuthorization(HttpServletResponse response, + @RequestParam("response_type") String responseType, + @RequestParam("resource") String resource, + @RequestParam("presentation_definition") String presentationDefinition, + @RequestParam("client_id") String clientId, + @RequestParam("redirect_uri") String redirectUri ) throws IOException { try { logger.info("Started Presentation Authorization in the controller."); + PresentationRequestDTO presentationRequestDTO = PresentationRequestDTO.builder() + .responseType(responseType) + .resource(resource) + .presentationDefinition(presentationDefinition) + .clientId(clientId) + .redirectUri(redirectUri).build(); String redirectString = presentationService.authorizePresentation(presentationRequestDTO); logger.info("Completed Presentation Authorization in the controller."); response.sendRedirect(redirectString); } catch( InvalidVerifierException exception){ sendRedirect(response, injiWebRedirectUrl, exception.getErrorCode(), exception.getErrorText()); } catch(VPNotCreatedException | InvalidCredentialResourceException exception){ - sendRedirect(response, presentationRequestDTO.getRedirect_uri(), exception.getErrorCode(), exception.getErrorText()); + sendRedirect(response, redirectUri, exception.getErrorCode(), exception.getErrorText()); } catch (Exception exception){ - sendRedirect(response, presentationRequestDTO.getRedirect_uri(), ErrorConstants.INTERNAL_SERVER_ERROR.getErrorCode(), ErrorConstants.INTERNAL_SERVER_ERROR.getErrorMessage()); + sendRedirect(response, redirectUri, ErrorConstants.INTERNAL_SERVER_ERROR.getErrorCode(), ErrorConstants.INTERNAL_SERVER_ERROR.getErrorMessage()); } } private void sendRedirect(HttpServletResponse response, String domain, String code, String message) throws IOException { logger.error("Exception Occurred in Authorizing the presentation"); - String injiVerifyRedirectString = String.format(injiOvpErrorRedirectUrl, + String injiVerifyRedirectString = String.format(injiOvpErrorRedirectUrlPattern, domain, code, URLEncoder.encode(message, StandardCharsets.UTF_8)); diff --git a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java index 966217b86..992a72af6 100644 --- a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java @@ -4,13 +4,13 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; -import lombok.Data; - +import io.mosip.mimoto.model.QRCodeType; import jakarta.validation.Valid; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + import java.util.List; -import java.util.Map; import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL; @@ -52,7 +52,7 @@ public class IssuerDTO { @JsonInclude(NON_NULL) @NotBlank String client_alias; - String ovp_qr_enabled; + QRCodeType qr_code_type; @Expose @JsonInclude(NON_NULL) @NotBlank diff --git a/src/main/java/io/mosip/mimoto/dto/openid/presentation/PresentationRequestDTO.java b/src/main/java/io/mosip/mimoto/dto/openid/presentation/PresentationRequestDTO.java index 5074905ec..743e69a88 100644 --- a/src/main/java/io/mosip/mimoto/dto/openid/presentation/PresentationRequestDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/openid/presentation/PresentationRequestDTO.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.dto.openid.presentation; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -11,10 +12,14 @@ @Builder public class PresentationRequestDTO { - String response_type; + @JsonProperty("response_type") + String responseType; String resource; - String presentation_definition; - String client_id; - String redirect_uri; + @JsonProperty("presentation_definition") + String presentationDefinition; + @JsonProperty("client_id") + String clientId; + @JsonProperty("redirect_uri") + String redirectUri; } diff --git a/src/main/java/io/mosip/mimoto/model/QRCodeType.java b/src/main/java/io/mosip/mimoto/model/QRCodeType.java new file mode 100644 index 000000000..ccf546f5c --- /dev/null +++ b/src/main/java/io/mosip/mimoto/model/QRCodeType.java @@ -0,0 +1,6 @@ +package io.mosip.mimoto.model; +public enum QRCodeType { + OVPRequest, + EmbeddedVC, + None; +} diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java index c15430a57..85c9b6add 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java @@ -13,13 +13,13 @@ import com.itextpdf.kernel.pdf.PdfWriter; import io.mosip.kernel.core.logger.spi.Logger; import io.mosip.mimoto.dto.IssuerDTO; -import io.mosip.mimoto.dto.IssuersDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.dto.openid.presentation.PresentationDefinitionDTO; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.IdpException; import io.mosip.mimoto.exception.InvalidCredentialResourceException; +import io.mosip.mimoto.model.QRCodeType; import io.mosip.mimoto.service.CredentialService; import io.mosip.mimoto.service.IdpService; import io.mosip.mimoto.service.IssuersService; @@ -28,7 +28,8 @@ import io.mosip.mimoto.util.RestApiClient; import io.mosip.mimoto.util.Utilities; import io.mosip.pixelpass.PixelPass; -import org.apache.commons.lang.StringUtils; +import jakarta.annotation.PostConstruct; +import lombok.NoArgsConstructor; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; import org.jetbrains.annotations.NotNull; @@ -48,7 +49,6 @@ import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.*; -import java.util.stream.Collectors; @Service public class CredentialServiceImpl implements CredentialService { @@ -76,12 +76,27 @@ public class CredentialServiceImpl implements CredentialService { @Autowired IdpService idpService; - @Value("${mosip.inji.web.authorize.url}") - String injiWebAuthorizeUrl; + @Value("${mosip.inji.ovp.qrdata.pattern}") + String ovpQRDataPattern; + + @Value("${mosip.inji.qr.code.height:500}") + Integer qrCodeHeight; + + @Value("${mosip.inji.qr.code.width:500}") + Integer qrCodeWidth; + + @Value("${mosip.inji.qr.data.size.limit:10000}") + Integer allowedQRDataSizeLimit; @Autowired PresentationServiceImpl presentationService; + PixelPass pixelPass; + @PostConstruct + public void init(){ + pixelPass = new PixelPass(); + } + @Override public TokenResponseDTO getTokenResponse(Map params, String issuerId) throws ApiNotAccessibleException, IOException { RestTemplate restTemplate = new RestTemplate(); @@ -181,9 +196,8 @@ private Map getPdfResourceFromVcProperties(LinkedHashMap d.getLogo().getUrl()).findFirst().orElse("")); data.put("rowProperties", rowProperties); @@ -223,25 +237,22 @@ private ByteArrayInputStream renderVCInCredentialTemplate(Map da private String constructQRCode(String qrData) throws WriterException { QRCodeWriter qrCodeWriter = new QRCodeWriter(); - BitMatrix bitMatrix = qrCodeWriter.encode(qrData, BarcodeFormat.QR_CODE, 650, 650); + BitMatrix bitMatrix = qrCodeWriter.encode(qrData, BarcodeFormat.QR_CODE, qrCodeWidth, qrCodeHeight); BufferedImage qrImage = MatrixToImageWriter.toBufferedImage(bitMatrix); return Utilities.encodeToString(qrImage, "png"); } private String constructQRCodeWithVCData(VCCredentialResponse vcCredentialResponse) throws JsonProcessingException, WriterException { - if(!vcCredentialResponse.getCredential().getType().contains("MOSIPVerifiableCredential")) { - PixelPass pixelPass = new PixelPass(); - ObjectMapper objectMapper = new ObjectMapper(); - String qrData = pixelPass.generateQRData(objectMapper.writeValueAsString(vcCredentialResponse.getCredential()), ""); + String qrData = pixelPass.generateQRData(objectMapper.writeValueAsString(vcCredentialResponse.getCredential()), ""); + if(allowedQRDataSizeLimit > qrData.length()){ return constructQRCode(qrData); } - return ""; + return ""; } private String constructQRCodeWithAuthorizeRequest(VCCredentialResponse vcCredentialResponse, String dataShareUrl) throws WriterException, JsonProcessingException { PresentationDefinitionDTO presentationDefinitionDTO = presentationService.constructPresentationDefinition(vcCredentialResponse); - ObjectMapper objectMapper = new ObjectMapper(); String presentationString = objectMapper.writeValueAsString(presentationDefinitionDTO); - String qrData = String.format(injiWebAuthorizeUrl, URLEncoder.encode(dataShareUrl, StandardCharsets.UTF_8), URLEncoder.encode(presentationString, StandardCharsets.UTF_8)); + String qrData = String.format(ovpQRDataPattern, URLEncoder.encode(dataShareUrl, StandardCharsets.UTF_8), URLEncoder.encode(presentationString, StandardCharsets.UTF_8)); return constructQRCode(qrData); } } diff --git a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java index 993f72608..c630e4230 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java @@ -42,8 +42,8 @@ public class PresentationServiceImpl implements PresentationService { @Autowired ObjectMapper objectMapper; - @Value("${mosip.inji.verify.redirect.url}") - String injiVerifyRedirectUrl; + @Value("${mosip.inji.ovp.redirect.url.pattern}") + String injiOvpRedirectURLPattern; @Value("${mosip.data.share.host}") String dataShareUrl; @@ -61,7 +61,7 @@ public String authorizePresentation(PresentationRequestDTO presentationRequestDT PresentationDefinitionDTO presentationDefinitionDTO; try { - presentationDefinitionDTO = objectMapper.readValue(presentationRequestDTO.getPresentation_definition(), PresentationDefinitionDTO.class); + presentationDefinitionDTO = objectMapper.readValue(presentationRequestDTO.getPresentationDefinition(), PresentationDefinitionDTO.class); if (presentationDefinitionDTO == null) { throw new VPNotCreatedException(ErrorConstants.INVALID_REQUEST.getErrorMessage()); } @@ -80,10 +80,11 @@ public String authorizePresentation(PresentationRequestDTO presentationRequestDT if (matchingProofTypes) { logger.info("Started the Construction of VP token"); try { - String vpToken = constructVerifiablePresentationString(vcCredentialResponse.getCredential()); - String presentationSubmission = constructPresentationSubmission(vpToken); - return String.format(injiVerifyRedirectUrl, - presentationRequestDTO.getRedirect_uri(), + VerifiablePresentationDTO verifiablePresentationDTO = constructVerifiablePresentationString(vcCredentialResponse.getCredential()); + String presentationSubmission = constructPresentationSubmission(verifiablePresentationDTO); + String vpToken = objectMapper.writeValueAsString(verifiablePresentationDTO); + return String.format(injiOvpRedirectURLPattern, + presentationRequestDTO.getRedirectUri(), Base64.getUrlEncoder().encodeToString(vpToken.getBytes(StandardCharsets.UTF_8)), URLEncoder.encode(presentationSubmission, StandardCharsets.UTF_8)); } catch (JsonProcessingException e) { @@ -101,18 +102,15 @@ public String authorizePresentation(PresentationRequestDTO presentationRequestDT return redirectionString; } - private String constructVerifiablePresentationString(VCCredentialProperties vcCredentialProperties) throws JsonProcessingException { - VerifiablePresentationDTO verifiablePresentationDTO = VerifiablePresentationDTO.builder() + private VerifiablePresentationDTO constructVerifiablePresentationString(VCCredentialProperties vcCredentialProperties) throws JsonProcessingException { + return VerifiablePresentationDTO.builder() .verifiableCredential(Collections.singletonList(vcCredentialProperties)) .type(Collections.singletonList("VerifiablePresentation")) .context(Collections.singletonList("https://www.w3.org/2018/credentials/v1")) .build(); - return objectMapper.writeValueAsString(verifiablePresentationDTO); } - private String constructPresentationSubmission(String vpToken) throws JsonProcessingException { - VerifiablePresentationDTO verifiablePresentationDTO = objectMapper.readValue(vpToken, VerifiablePresentationDTO.class); - + private String constructPresentationSubmission(VerifiablePresentationDTO verifiablePresentationDTO) throws JsonProcessingException { AtomicInteger atomicInteger = new AtomicInteger(0); List submissionDescriptorDTOList = verifiablePresentationDTO.getVerifiableCredential() .stream().map(verifiableCredential -> SubmissionDescriptorDTO.builder() diff --git a/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java index db1cf0ec4..b33cc04e8 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java @@ -6,18 +6,24 @@ import io.mosip.mimoto.dto.openid.VerifiersDTO; import io.mosip.mimoto.dto.openid.presentation.PresentationRequestDTO; import io.mosip.mimoto.exception.ApiNotAccessibleException; -import io.mosip.mimoto.exception.InvalidVerifierException; import io.mosip.mimoto.exception.ErrorConstants; +import io.mosip.mimoto.exception.InvalidVerifierException; import io.mosip.mimoto.service.VerifierService; import io.mosip.mimoto.util.Utilities; +import org.apache.commons.validator.routines.UrlValidator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.AntPathMatcher; +import org.springframework.util.PathMatcher; -import java.util.List; import java.util.Optional; +import static org.apache.commons.validator.routines.UrlValidator.ALLOW_ALL_SCHEMES; +import static org.apache.commons.validator.routines.UrlValidator.ALLOW_LOCAL_URLS; + + @Service public class VerifierServiceImpl implements VerifierService { @@ -27,6 +33,14 @@ public class VerifierServiceImpl implements VerifierService { @Autowired ObjectMapper objectMapper; + private static final PathMatcher pathMatcher; + private static final UrlValidator urlValidator; + + static { + pathMatcher = new AntPathMatcher(); + urlValidator = new UrlValidator(ALLOW_ALL_SCHEMES+ALLOW_LOCAL_URLS); + } + private final Logger logger = LoggerFactory.getLogger(VerifierServiceImpl.class); public Optional getVerifierByClientId(String clientId) throws ApiNotAccessibleException, JsonProcessingException { @@ -40,10 +54,13 @@ public Optional getVerifierByClientId(String clientId) throws ApiNo @Override public void validateVerifier(PresentationRequestDTO presentationRequestDTO) throws ApiNotAccessibleException, JsonProcessingException { logger.info("Started the presentation Validation"); - getVerifierByClientId(presentationRequestDTO.getClient_id()).ifPresentOrElse( + getVerifierByClientId(presentationRequestDTO.getClientId()).ifPresentOrElse( (verifierDTO) -> { - List registeredRedirectUri = verifierDTO.getRedirectUri(); - if(!registeredRedirectUri.contains(presentationRequestDTO.getRedirect_uri())){ + boolean isValidVerifier = verifierDTO.getRedirectUri().stream().anyMatch(registeredRedirectUri -> + urlValidator.isValid(registeredRedirectUri) && + urlValidator.isValid(presentationRequestDTO.getRedirectUri()) && + pathMatcher.match(registeredRedirectUri, presentationRequestDTO.getRedirectUri())); + if(!isValidVerifier){ throw new InvalidVerifierException( ErrorConstants.INVALID_REDIRECT_URI.getErrorCode(), ErrorConstants.INVALID_REDIRECT_URI.getErrorMessage()); diff --git a/src/main/java/io/mosip/mimoto/util/Utilities.java b/src/main/java/io/mosip/mimoto/util/Utilities.java index d93f2615c..cd8ef77ed 100644 --- a/src/main/java/io/mosip/mimoto/util/Utilities.java +++ b/src/main/java/io/mosip/mimoto/util/Utilities.java @@ -11,7 +11,6 @@ import org.json.simple.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Profile; import org.springframework.core.io.Resource; import org.springframework.stereotype.Component; diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 94ff3ed9b..501cd691d 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -213,12 +213,15 @@ mosip.oidc.p12.path=certs/ #Inji Web Config mosip.inji.web.host=https://injiweb.dev1.mosip.net -mosip.inji.web.authorize.url=INJI_OVP://payload=${mosip.inji.web.host}/authorize?response_type=vp_token&resource=%s&presentation_definition=%s mosip.inji.web.redirect.url=${mosip.inji.web.host}/authorize - -#Inji Verify Config -mosip.inji.verify.redirect.url=%s#vp_token=%s&presentation_submission=%s -mosip.inji.ovp.error.redirect.url=%s?error=%s&error_description=%s +mosip.inji.qr.data.size.limit=10000 +mosip.inji.qr.code.height=650 +mosip.inji.qr.code.width=650 + +#OVP Config +mosip.inji.ovp.qrdata.pattern=INJI_OVP://${mosip.inji.web.host}/authorize?response_type=vp_token&resource=%s&presentation_definition=%s +mosip.inji.ovp.redirect.url.pattern=%s#vp_token=%s&presentation_submission=%s +mosip.inji.ovp.error.redirect.url.pattern=%s?error=%s&error_description=%s #DataShare Config mosip.data.share.host=https://datashare-inji.dev1.mosip.net diff --git a/src/main/resources/templates/CredentialTemplate.html b/src/main/resources/templates/CredentialTemplate.html deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/main/resources/templates/credential-template.html b/src/main/resources/templates/credential-template.html index d46517065..b467b1cdc 100644 --- a/src/main/resources/templates/credential-template.html +++ b/src/main/resources/templates/credential-template.html @@ -33,6 +33,7 @@ #end + QR Code diff --git a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java index 79e99bfaf..c918fb6ab 100644 --- a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java @@ -5,14 +5,12 @@ import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; import io.mosip.mimoto.dto.openid.presentation.PresentationDefinitionDTO; import io.mosip.mimoto.dto.openid.presentation.PresentationRequestDTO; -import io.mosip.mimoto.dto.openid.presentation.VerifiablePresentationDTO; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.InvalidVerifierException; import io.mosip.mimoto.exception.VPNotCreatedException; import io.mosip.mimoto.service.impl.DataShareServiceImpl; import io.mosip.mimoto.service.impl.PresentationServiceImpl; import io.mosip.mimoto.service.impl.VerifierServiceImpl; -import io.mosip.mimoto.util.RestApiClient; import io.mosip.mimoto.util.TestUtilities; import org.junit.Before; import org.junit.Test; @@ -34,8 +32,6 @@ public class PresentationServiceTest { @Mock VerifierService verifierService = new VerifierServiceImpl(); @Mock - RestApiClient restApiClient; - @Mock DataShareServiceImpl dataShareService; @Mock ObjectMapper objectMapper; @@ -46,7 +42,7 @@ public class PresentationServiceTest { @Before public void setup() throws JsonProcessingException { PresentationDefinitionDTO presentationDefinitionDTO = TestUtilities.getPresentationDefinitionDTO(); - ReflectionTestUtils.setField(presentationService, "injiVerifyRedirectUrl", "%s#vp_token=%s&presentation_submission=%s"); + ReflectionTestUtils.setField(presentationService, "injiOvpRedirectURLPattern", "%s#vp_token=%s&presentation_submission=%s"); ReflectionTestUtils.setField(presentationService, "dataShareUrl", "test_resource"); ReflectionTestUtils.setField(presentationService, "maximumResponseHeaderSize", 65536); @@ -64,12 +60,10 @@ public void throwInvalidVerifierExceptionWhenClientIdPassedIsIncorrect() throws public void credentialProofMatchingWithVPRequest() throws Exception { VCCredentialResponse vcCredentialResponse = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); - VerifiablePresentationDTO verifiablePresentationDTO = TestUtilities.getVerifiablePresentationDTO(); PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); doNothing().when(verifierService).validateVerifier(eq(presentationRequestDTO)); when(dataShareService.downloadCredentialFromDataShare(eq(presentationRequestDTO))).thenReturn(vcCredentialResponse); - when(objectMapper.readValue(eq("test-data"), eq(VerifiablePresentationDTO.class))).thenReturn(verifiablePresentationDTO); String actualRedirectUrl = presentationService.authorizePresentation(TestUtilities.getPresentationRequestDTO()); String expectedRedirectUrl = "test_redirect_uri#vp_token=dGVzdC1kYXRh&presentation_submission=test-data"; diff --git a/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java b/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java index 3f5f008ad..a871669dd 100644 --- a/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java @@ -57,25 +57,19 @@ public void getNullWhenInvalidClientIdIsPassed() throws ApiNotAccessibleExceptio @Test public void validateTrustedVerifiersAndDoNothing() throws ApiNotAccessibleException, IOException { - PresentationRequestDTO presentationRequestDTO = new PresentationRequestDTO(); - presentationRequestDTO.setClient_id("test-clientId"); - presentationRequestDTO.setRedirect_uri("test-redirectUri"); + PresentationRequestDTO presentationRequestDTO = PresentationRequestDTO.builder().clientId("test-clientId").redirectUri("https://test-redirectUri").build(); verifiersService.validateVerifier(presentationRequestDTO); } @Test(expected = InvalidVerifierException.class) public void validateTrustedVerifiersAndThrowInvalidVerifierExceptionWhenClientIdIsIncorrect() throws ApiNotAccessibleException, IOException { - PresentationRequestDTO presentationRequestDTO = new PresentationRequestDTO(); - presentationRequestDTO.setClient_id("test-clientId2"); - presentationRequestDTO.setRedirect_uri("test-redirectUri"); + PresentationRequestDTO presentationRequestDTO = PresentationRequestDTO.builder().clientId("test-clientId2").redirectUri("https://test-redirectUri").build(); verifiersService.validateVerifier(presentationRequestDTO); } @Test(expected = InvalidVerifierException.class) public void validateTrustedVerifiersAndThrowInvalidVerifiersExceptionWhenRedirectUriIsIncorrect() throws ApiNotAccessibleException, IOException { - PresentationRequestDTO presentationRequestDTO = new PresentationRequestDTO(); - presentationRequestDTO.setClient_id("test-clientId"); - presentationRequestDTO.setRedirect_uri("test-redirectUri2"); + PresentationRequestDTO presentationRequestDTO = PresentationRequestDTO.builder().clientId("test-clientId2").redirectUri("https://test-redirectUri").build(); verifiersService.validateVerifier(presentationRequestDTO); } } diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index e369eea24..3bbd23dc2 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -145,11 +145,11 @@ public static IssuerDTO getIssuerConfigDTO(String issuerName, List nullF public static PresentationRequestDTO getPresentationRequestDTO(){ return PresentationRequestDTO.builder() - .presentation_definition("{\"id\":\"test-id\",\"input_descriptors\":[{\"id\":\"test-input-id\",\"format\":{\"ldpVc\":{\"proofTypes\":[\"Ed25519Signature2020\"]}}}]}") - .client_id("test_client_id") + .presentationDefinition("{\"id\":\"test-id\",\"input_descriptors\":[{\"id\":\"test-input-id\",\"format\":{\"ldpVc\":{\"proofTypes\":[\"Ed25519Signature2020\"]}}}]}") + .clientId("test_client_id") .resource("test_resource") - .response_type("test_response_type") - .redirect_uri("test_redirect_uri").build(); + .responseType("test_response_type") + .redirectUri("test_redirect_uri").build(); } public static VCCredentialProperties getVCCredentialPropertiesDTO(String type){ @@ -216,7 +216,7 @@ public static VerifiablePresentationDTO getVerifiablePresentationDTO(){ public static VerifiersDTO getTrustedVerifiers() { VerifierDTO verifierDTO = VerifierDTO.builder() .clientId("test-clientId") - .redirectUri(Collections.singletonList("test-redirectUri")).build(); + .redirectUri(Collections.singletonList("https://test-redirectUri")).build(); return VerifiersDTO.builder() .verifiers(Collections.singletonList(verifierDTO)).build(); diff --git a/src/test/resources/application-test.properties b/src/test/resources/application-test.properties index f56a0d342..d4fc430f9 100644 --- a/src/test/resources/application-test.properties +++ b/src/test/resources/application-test.properties @@ -25,12 +25,15 @@ mosip.oidc.p12.path=certs/ #Inji Web Config mosip.inji.web.host=https://injiweb.dev1.mosip.net -mosip.inji.web.authorize.url=INJI_OVP://payload=${mosip.inji.web.host}/authorize?response_type=vp_token&resource=%s&presentation_definition=%s mosip.inji.web.redirect.url=${mosip.inji.web.host}/authorize - -#Inji Verify Config -mosip.inji.verify.redirect.url=%s#vp_token=%s&presentation_submission=%s -mosip.inji.ovp.error.redirect.url=%s?error=%s&error_description=%s +mosip.inji.qr.data.size.limit=10000 +mosip.inji.qr.code.height=650 +mosip.inji.qr.code.width=650 + +#OVP Config +mosip.inji.ovp.qrdata.pattern=INJI_OVP://${mosip.inji.web.host}/authorize?response_type=vp_token&resource=%s&presentation_definition=%s +mosip.inji.ovp.redirect.url.pattern=%s#vp_token=%s&presentation_submission=%s +mosip.inji.ovp.error.redirect.url.pattern=%s?error=%s&error_description=%s #DataShare Config mosip.data.share.host=https://datashare-inji.dev1.mosip.net From ac859cc25ed646689fa110958e4139d74bbdf2e0 Mon Sep 17 00:00:00 2001 From: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> Date: Thu, 8 Aug 2024 18:19:48 +0530 Subject: [PATCH 202/860] MOSIP-35107 - Updated the biometric details w.r.t mock mds java21 (#380) * MOSIP-35107 - Updated the biometric details w.r.t mock mds java21 Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> * MOSIP-35107 - Updated the biometric details w.r.t mock mds java21 Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> * MOSIP-35107 - Updated the biometric details w.r.t mock mds java21 Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> * MOSIP-35107 - Updated the biometric details w.r.t mock mds java21 Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> * MOSIP-35107 - Updated the biometric details w.r.t mock mds java21 Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> * MOSIP-35107 - Updated the biometric details w.r.t mock mds java21 Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> --------- Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> --- apitest/Dockerfile | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/apitest/Dockerfile b/apitest/Dockerfile index fdc056e09..5dea0ddba 100644 --- a/apitest/Dockerfile +++ b/apitest/Dockerfile @@ -28,9 +28,12 @@ WORKDIR /home/${container_user} ENV work_dir=/home/${container_user} -ADD ./apitest/target/ $work_dir - -ADD entrypoint.sh $work_dir/entrypoint.sh +# Combine all necessary files into a single COPY command +COPY ./apitest/target $work_dir/ +COPY application.properties $work_dir/ +COPY ["Biometric Devices", "$work_dir/Biometric Devices"] +COPY ["resource", "$work_dir/resource"] +COPY entrypoint.sh $work_dir # install packages and create user RUN apt-get -y update \ From af9712763085c77f4a1e9112f7aa170ba0736a33 Mon Sep 17 00:00:00 2001 From: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> Date: Fri, 9 Aug 2024 19:45:52 +0530 Subject: [PATCH 203/860] add identity array handle Signed-off-by: Sohan Kumar Dey <72375959+Sohandey@users.noreply.github.com> --- .../java/io/mosip/testrig/apirig/testscripts/AddIdentity.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java index 97c2a6dda..585132dd7 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java @@ -111,6 +111,7 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad inputJson = inputJson.replace("$UIN$", uin); inputJson = inputJson.replace("$RID$", genRid); String phoneNumber = ""; + String email = testCaseName +"@mosip.net"; if (inputJson.contains("$PHONENUMBERFORIDENTITY$")) { if (!phoneSchemaRegex.isEmpty()) try { @@ -119,6 +120,7 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad logger.error(e.getMessage()); } inputJson = replaceKeywordWithValue(inputJson, "$PHONENUMBERFORIDENTITY$", phoneNumber); + inputJson = replaceKeywordWithValue(inputJson, "$EMAILVALUE$", email); } response = postWithBodyAndCookie(ApplnURI + testCaseDTO.getEndPoint(), inputJson, COOKIENAME, From bb3821bf34275ea9ca32aef333dffbbf07da213a Mon Sep 17 00:00:00 2001 From: Vijay <94220135+vijay151096@users.noreply.github.com> Date: Mon, 12 Aug 2024 12:59:14 +0530 Subject: [PATCH 204/860] [INJIWEB-639] : Address all the OVP PR review comments Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- .../config/mimoto-default.properties | 22 +++ .../config/mimoto-issuers-config.json | 163 ++++++--------- .../mimoto/dto/idp/TokenResponseDTO.java | 8 +- .../openid/presentation/ConstraintsDTO.java | 14 ++ .../dto/openid/presentation/FieldDTO.java | 16 ++ .../dto/openid/presentation/FilterDTO.java | 16 ++ .../dto/openid/presentation/Format.java | 2 +- .../dto/openid/presentation/IFormat.java | 8 + .../presentation/InputDescriptorDTO.java | 1 + .../mimoto/dto/openid/presentation/LDPVc.java | 2 +- .../service/impl/CredentialServiceImpl.java | 4 +- .../service/impl/DataShareServiceImpl.java | 3 +- .../service/impl/PresentationServiceImpl.java | 18 +- src/main/resources/mimoto-issuers-config.json | 186 +++++++----------- .../io/mosip/mimoto/util/TestUtilities.java | 19 +- 15 files changed, 243 insertions(+), 239 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/dto/openid/presentation/ConstraintsDTO.java create mode 100644 src/main/java/io/mosip/mimoto/dto/openid/presentation/FieldDTO.java create mode 100644 src/main/java/io/mosip/mimoto/dto/openid/presentation/FilterDTO.java create mode 100644 src/main/java/io/mosip/mimoto/dto/openid/presentation/IFormat.java diff --git a/docker-compose/config/mimoto-default.properties b/docker-compose/config/mimoto-default.properties index 4b25759db..fb9c47f6f 100644 --- a/docker-compose/config/mimoto-default.properties +++ b/docker-compose/config/mimoto-default.properties @@ -260,3 +260,25 @@ mosip.oidc.client.assertion.type=urn:ietf:params:oauth:client-assertion-type:jwt mosip.oidc.p12.filename=oidckeystore.p12 mosip.oidc.p12.password=5YBx6QT2wbY8Ls6w mosip.oidc.p12.path=certs/ + + +#OpenId4VP related Configuration START + +#Inji Web Config +mosip.inji.web.host=https://injiweb.dev1.mosip.net +mosip.inji.web.redirect.url=${mosip.inji.web.host}/authorize +mosip.inji.qr.data.size.limit=10000 +mosip.inji.qr.code.height=650 +mosip.inji.qr.code.width=650 + +#OVP Config +mosip.inji.ovp.qrdata.pattern=INJI_OVP://${mosip.inji.web.host}/authorize?response_type=vp_token&resource=%s&presentation_definition=%s +mosip.inji.ovp.redirect.url.pattern=%s#vp_token=%s&presentation_submission=%s +mosip.inji.ovp.error.redirect.url.pattern=%s?error=%s&error_description=%s + +#DataShare Config +mosip.data.share.host=https://datashare-inji.dev1.mosip.net +mosip.data.share.create.url=${mosip.data.share.host}/v1/datashare/create/static-policyid/static-subscriberid +mosip.data.share.create.retry.count=3 + +#OpenId4VP related Configuration END diff --git a/docker-compose/config/mimoto-issuers-config.json b/docker-compose/config/mimoto-issuers-config.json index 508e5f48b..9c87da474 100644 --- a/docker-compose/config/mimoto-issuers-config.json +++ b/docker-compose/config/mimoto-issuers-config.json @@ -1,12 +1,13 @@ { "issuers": [ { - "credential_issuer": "ESignet", + "credential_issuer": "Mosip", + "protocol": "OpenId4VCI", "display": [ { "name": "National Identity Department", "logo": { - "url": "https://api.collab.mosip.net/inji/mosip-logo.png", + "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", "alt_text": "mosip-logo" }, "title": "National Identity Department", @@ -16,149 +17,113 @@ { "name": "دائرة الهوية الوطنية", "logo": { - "url": "https://api.collab.mosip.net/inji/mosip-logo.png", - "alt_text": "mosip-logo" + "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", + "alt_text": "شعار موسيب" }, "title": "دائرة الهوية الوطنية", - "description": "قم بتنزيل بيانات اعتماد الهوية الوطنية / التأسيسية MOSIP" , + "description": "قم بتنزيل بيانات اعتماد الهوية الوطنية / التأسيسية MOSIP", "language": "ar" }, { "name": "राष्ट्रीय पहचान विभाग", "logo": { - "url": "https://api.collab.mosip.net/inji/mosip-logo.png", - "alt_text": "mosip-logo" + "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", + "alt_text": "मोसिप लोगो" }, "title": "राष्ट्रीय पहचान विभाग", - "description":"MOSIP नेशनल/फाउंडेशनल आइडेंटिटी क्रेडेंशियल डाउनलोड करेंं", + "description": "MOSIP नेशनल/फाउंडेशनल आइडेंटिटी क्रेडेंशियल डाउनलोड करेंं", "language": "hi" }, { "name": "ರಾಷ್ಟ್ರೀಯ ಗುರುತಿನ ಇಲಾಖೆ", "logo": { - "url": "https://api.collab.mosip.net/inji/mosip-logo.png", - "alt_text": "mosip-logo" + "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", + "alt_text": "mosip ಲೋಗೋ" }, "title": "ರಾಷ್ಟ್ರೀಯ ಗುರುತಿನ ಇಲಾಖೆ", - "description": "MOSIP ರಾಷ್ಟ್ರೀಯ / ಫೌಂಡೇಶನಲ್ ಐಡೆಂಟಿಟಿ ರುಜುವಾತು ಡೌನ್\u200Cಲೋಡ್ ಮಾಡಿ", + "description": "MOSIP ರಾಷ್ಟ್ರೀಯ / ಫೌಂಡೇಶನಲ್ ಐಡೆಂಟಿಟಿ ರುಜುವಾತು ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ", "language": "kn" }, { "name": "தேசிய அடையாளத் துறை", "logo": { - "url": "https://api.collab.mosip.net/inji/mosip-logo.png", - "alt_text": "mosip-logo" + "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", + "alt_text": "mosip லோகோ" }, "title": "தேசிய அடையாளத் துறை", - "description":"MOSIP தேசிய / அடிப்படை அடையாளச் சான்றிதழைப் பதிவிறக்கவும்", + "description": "MOSIP தேசிய / அடிப்படை அடையாளச் சான்றிதழைப் பதிவிறக்கவும்", "language": "ta" }, { "name": "National Identity Department", "logo": { - "url": "https://api.collab.mosip.net/inji/mosip-logo.png", - "alt_text": "mosip-logo" + "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", + "alt_text": "logo ng mosip" }, "title": "National Identity Department", - "description":"I-download ang MOSIP National / Foundational Identity Credential", + "description": "I-download ang MOSIP National / Foundational Identity Credential", "language": "fil" } ], - "protocol": "OpenId4VCI", - "client_id": "mpartner-default-mimotooidc", - "client_alias": "mpartner-default-mimotooidc", - "scopes_supported": ["mosip_identity_vc_ldp"], - "additional_headers": { "Accept": "application/json" }, - ".well-known": "https://esignet.collab.mosip.net/.well-known/openid-credential-issuer?version=v11", + "client_id": "XusU7P1y10lMr9NA1qnrny_fqynODwV4SCvWPP8cfdY", "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", - "authorization_endpoint": "https://esignet.collab.mosip.net/authorize", - "authorization_audience": "https://esignet.collab.mosip.net/v1/esignet/oauth/v2/token", - "token_endpoint": "https://api.collab.mosip.net/v1/mimoto/get-token/ESignet", - "proxy_token_endpoint": "https://api.collab.mosip.net/v1/esignet/oauth/v2/token", - "credential_endpoint": "https://api.collab.mosip.net/v1/esignet/vci/credential", - "credential_type": ["VerifiableCredential", "MOSIPVerifiableCredential"], - "credential_audience": "https://esignet.collab.mosip.net/v1/esignet", - "enabled": "true" + "token_endpoint": "https://api.dev1.mosip.net/v1/mimoto/get-token/Mosip", + "authorization_audience": "https://esignet-insurance.dev1.mosip.net/v1/esignet/oauth/v2/token", + "proxy_token_endpoint": "https://esignet-mosipid.dev1.mosip.net/v1/esignet/oauth/v2/token", + "client_alias": "mpartner-default-test-mosipid", + "qr_code_type": "OVPRequest", + "enabled": "true", + ".well-known": "https://injicertify-mosipid.dev1.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer" }, { - "credential_issuer": "Sunbird", + "credential_issuer": "StayProtected", + "protocol": "OpenId4VCI", "display": [ { - "name": "Veridonia Insurance Company", - "logo": { - "url": "https://api.collab.mosip.net/inji/veridonia-logo.png", - "alt_text": "a Veridonia logo" - }, - "language": "en", - "title": "Veridonia Insurance Company", - "description": "Download Insurance Credentials using policy details" - }, - { - "name": "شركة فيريدونيا للتأمين", - "logo": { - "url": "https://api.collab.mosip.net/inji/veridonia-logo.png", - "alt_text": "شعار فيريدونيا" - }, - "language": "ar", - "title": "شركة فيريدونيا للتأمين", - "description": "قم بتنزيل بيانات اعتماد التأمين باستخدام تفاصيل السياسة" - }, - { - "name": "वेरिडोनिया बीमा कंपनींं", - "logo": { - "url": "https://api.collab.mosip.net/inji/veridonia-logo.png", - "alt_text": "एक वेरिडोनिया लोगो" - }, - "language": "hi", - "title": "वेरिडोनिया बीमा कंपनींं", - "description": "पॉलिसी विवरण का उपयोग करके बीमा क्रेडेंशियल डाउनलोड करें" - }, - { - "name": "ವೆರಿಡೋನಿಯಾ ವಿಮಾ ಕಂಪನಿ", + "name": "StayProtected Insurance", "logo": { - "url": "https://api.collab.mosip.net/inji/veridonia-logo.png", - "alt_text": "ವೆರಿಡೋನಿಯಾ ಲೋಗೋ" + "url": "https://raw.githubusercontent.com/tw-mosip/file-server/master/StayProtectedInsurance.png", + "alt_text": "a square logo of a Sunbird" }, - "language": "kn", - "title": "ವೆರಿಡೋನಿಯಾ ವಿಮಾ ಕಂಪನಿ", - "description": "ಪಾಲಿಸಿ ವಿವರಗಳನ್ನು ಬಳಸಿಕೊಂಡು ವಿಮಾ ರುಜುವಾತುಗಳನ್ನು ಡೌನ್\u200Cಲೋಡ್ ಮಾಡಿ" - }, - { - "name": "வெரிடோனியா இன்சூரன்ஸ் நிறுவனம்", - "logo": { - "url": "https://api.collab.mosip.net/inji/veridonia-logo.png", - "alt_text": "ஒரு வெரிடோனியா லோகோ" - }, - "language": "ta", - "title": "வெரிடோனியா இன்சூரன்ஸ் நிறுவனம்", - "description": "பாலிசி விவரங்களைப் பயன்படுத்தி காப்பீட்டுச் சான்றுகளைப் பதிவிறக்கவும்" - }, + "title": "Download StayProtected Insurance Credentials", + "description": "Download insurance credential", + "language": "en" + } + ], + "client_id": "esignet-sunbird-partner", + "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", + "token_endpoint": "https://api.dev1.mosip.net/v1/mimoto/get-token/StayProtected", + "authorization_audience": "https://esignet-insurance.dev1.mosip.net/v1/esignet/oauth/v2/token", + "proxy_token_endpoint": "https://esignet-insurance.dev1.mosip.net/v1/esignet/oauth/v2/token", + "client_alias": "esignet-sunbird-partner", + "qr_code_type": "OVPRequest", + "enabled": "true", + ".well-known": "https://injicertify-insurance.dev1.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer" + }, + { + "credential_issuer": "Mock", + "protocol": "OpenId4VCI", + "display": [ { - "name": "Veridonia Insurance Company", + "name": "Mock Identity", "logo": { - "url": "https://api.collab.mosip.net/inji/veridonia-logo.png", - "alt_text": "isang logo ng Veridonia" + "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", + "alt_text": "mosip-logo" }, - "language": "fil", - "title": "Veridonia Insurance Company", - "description": "I-download ang Mga Kredensyal ng Seguro gamit ang mga detalye ng patakaran" + "title": "Mock Identity", + "description": "Download Mock Identity Credential", + "language": "en" } ], - "protocol": "OpenId4VCI", - "client_id": "esignet-sunbird-partner", - "client_alias": "esignet-sunbird-partner", - "scopes_supported": ["sunbird_rc_insurance_vc_ldp"], - "additional_headers": { "Accept": "application/json" }, - ".well-known": "https://esignet-insurance.collab.mosip.net/.well-known/openid-credential-issuer?version=v11", + "client_id": "mpartner-mock-testing", "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", - "authorization_endpoint": "https://esignet-insurance.collab.mosip.net/authorize", - "authorization_audience": "https://esignet-insurance.collab.mosip.net/v1/esignet/oauth/v2/token", - "token_endpoint": "https://api.collab.mosip.net/v1/mimoto/get-token/Sunbird", - "proxy_token_endpoint": "https://esignet-insurance.collab.mosip.net/v1/esignet/oauth/v2/token", - "credential_endpoint": "https://esignet-insurance.collab.mosip.net/v1/esignet/vci/credential", - "credential_type": ["VerifiableCredential", "InsuranceCredential"], - "credential_audience": "https://esignet-insurance.collab.mosip.net/v1/esignet", - "enabled": "true" + "token_endpoint": "https://api.dev1.mosip.net/v1/mimoto/get-token/Mock", + "authorization_audience": "https://esignet-insurance.dev1.mosip.net/v1/esignet/oauth/v2/token", + "proxy_token_endpoint": "https://esignet-mock.dev1.mosip.net/v1/esignet/oauth/v2/token", + "client_alias": "mpartner-mock-testing", + "qr_code_type": "OVPRequest", + "enabled": "true", + ".well-known": "https://injicertify-mock.dev1.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer" } ] } diff --git a/src/main/java/io/mosip/mimoto/dto/idp/TokenResponseDTO.java b/src/main/java/io/mosip/mimoto/dto/idp/TokenResponseDTO.java index 365fe10ff..8b688decf 100644 --- a/src/main/java/io/mosip/mimoto/dto/idp/TokenResponseDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/idp/TokenResponseDTO.java @@ -1,14 +1,14 @@ package io.mosip.mimoto.dto.idp; import com.fasterxml.jackson.annotation.JsonInclude; -import lombok.Data; -import lombok.Getter; -import lombok.Setter; +import lombok.*; @Getter @Setter @Data - +@AllArgsConstructor +@NoArgsConstructor +@Builder public class TokenResponseDTO { @JsonInclude(JsonInclude.Include.NON_NULL) private String id_token; diff --git a/src/main/java/io/mosip/mimoto/dto/openid/presentation/ConstraintsDTO.java b/src/main/java/io/mosip/mimoto/dto/openid/presentation/ConstraintsDTO.java new file mode 100644 index 000000000..aaccbde6c --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/openid/presentation/ConstraintsDTO.java @@ -0,0 +1,14 @@ +package io.mosip.mimoto.dto.openid.presentation; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ConstraintsDTO { + FieldDTO[] fields; +} diff --git a/src/main/java/io/mosip/mimoto/dto/openid/presentation/FieldDTO.java b/src/main/java/io/mosip/mimoto/dto/openid/presentation/FieldDTO.java new file mode 100644 index 000000000..0dcdd2d77 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/openid/presentation/FieldDTO.java @@ -0,0 +1,16 @@ +package io.mosip.mimoto.dto.openid.presentation; + + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class FieldDTO { + String[] path; + FilterDTO filter; +} diff --git a/src/main/java/io/mosip/mimoto/dto/openid/presentation/FilterDTO.java b/src/main/java/io/mosip/mimoto/dto/openid/presentation/FilterDTO.java new file mode 100644 index 000000000..973fea5bb --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/openid/presentation/FilterDTO.java @@ -0,0 +1,16 @@ +package io.mosip.mimoto.dto.openid.presentation; + + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class FilterDTO { + String type; + String pattern; +} diff --git a/src/main/java/io/mosip/mimoto/dto/openid/presentation/Format.java b/src/main/java/io/mosip/mimoto/dto/openid/presentation/Format.java index 0da11a35a..6b01c5a0a 100644 --- a/src/main/java/io/mosip/mimoto/dto/openid/presentation/Format.java +++ b/src/main/java/io/mosip/mimoto/dto/openid/presentation/Format.java @@ -10,5 +10,5 @@ @AllArgsConstructor @Builder public class Format { - LDPVc ldpVc; + IFormat ldpVc; } diff --git a/src/main/java/io/mosip/mimoto/dto/openid/presentation/IFormat.java b/src/main/java/io/mosip/mimoto/dto/openid/presentation/IFormat.java new file mode 100644 index 000000000..7ba6453a0 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/openid/presentation/IFormat.java @@ -0,0 +1,8 @@ +package io.mosip.mimoto.dto.openid.presentation; + +import java.util.List; + +public interface IFormat { + List getProofTypes(); + void setProofTypes(List proofTypes); +} diff --git a/src/main/java/io/mosip/mimoto/dto/openid/presentation/InputDescriptorDTO.java b/src/main/java/io/mosip/mimoto/dto/openid/presentation/InputDescriptorDTO.java index 0052e42f9..d06d8423b 100644 --- a/src/main/java/io/mosip/mimoto/dto/openid/presentation/InputDescriptorDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/openid/presentation/InputDescriptorDTO.java @@ -12,4 +12,5 @@ public class InputDescriptorDTO { String id; Format format; + ConstraintsDTO constraints; } diff --git a/src/main/java/io/mosip/mimoto/dto/openid/presentation/LDPVc.java b/src/main/java/io/mosip/mimoto/dto/openid/presentation/LDPVc.java index 08952770f..aaa6a1524 100644 --- a/src/main/java/io/mosip/mimoto/dto/openid/presentation/LDPVc.java +++ b/src/main/java/io/mosip/mimoto/dto/openid/presentation/LDPVc.java @@ -11,6 +11,6 @@ @NoArgsConstructor @AllArgsConstructor @Builder -public class LDPVc { +public class LDPVc implements IFormat{ List proofTypes; } diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java index 85c9b6add..bbc8acf6b 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java @@ -76,6 +76,9 @@ public class CredentialServiceImpl implements CredentialService { @Autowired IdpService idpService; + @Autowired + RestTemplate restTemplate; + @Value("${mosip.inji.ovp.qrdata.pattern}") String ovpQRDataPattern; @@ -99,7 +102,6 @@ public void init(){ @Override public TokenResponseDTO getTokenResponse(Map params, String issuerId) throws ApiNotAccessibleException, IOException { - RestTemplate restTemplate = new RestTemplate(); IssuerDTO issuerDTO = issuerService.getIssuerConfig(issuerId); HttpEntity> request = idpService.constructGetTokenRequest(params, issuerDTO); TokenResponseDTO response = restTemplate.postForObject(idpService.getTokenEndpoint(issuerDTO), request, TokenResponseDTO.class); diff --git a/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java index 5da1d1c47..07d9f33ea 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java @@ -55,8 +55,7 @@ public String getFilename() { HttpEntity> requestEntity = new HttpEntity<>(map, headers); DataShareResponseWrapperDTO dataShareResponseWrapperDTO = pushCredentialIntoDataShare(requestEntity); - URL dataShareUrl = new URL(dataShareResponseWrapperDTO.getDataShare().getUrl()); - return dataShareHostUrl + dataShareUrl.getPath(); + return dataShareResponseWrapperDTO.getDataShare().getUrl(); } private DataShareResponseWrapperDTO pushCredentialIntoDataShare(HttpEntity> requestEntity) throws Exception { diff --git a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java index c630e4230..4827c3a10 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java @@ -81,7 +81,7 @@ public String authorizePresentation(PresentationRequestDTO presentationRequestDT logger.info("Started the Construction of VP token"); try { VerifiablePresentationDTO verifiablePresentationDTO = constructVerifiablePresentationString(vcCredentialResponse.getCredential()); - String presentationSubmission = constructPresentationSubmission(verifiablePresentationDTO); + String presentationSubmission = constructPresentationSubmission(verifiablePresentationDTO, presentationDefinitionDTO, inputDescriptorDTO); String vpToken = objectMapper.writeValueAsString(verifiablePresentationDTO); return String.format(injiOvpRedirectURLPattern, presentationRequestDTO.getRedirectUri(), @@ -110,25 +110,31 @@ private VerifiablePresentationDTO constructVerifiablePresentationString(VCCreden .build(); } - private String constructPresentationSubmission(VerifiablePresentationDTO verifiablePresentationDTO) throws JsonProcessingException { + private String constructPresentationSubmission(VerifiablePresentationDTO verifiablePresentationDTO, PresentationDefinitionDTO presentationDefinitionDTO, InputDescriptorDTO inputDescriptorDTO) throws JsonProcessingException { AtomicInteger atomicInteger = new AtomicInteger(0); List submissionDescriptorDTOList = verifiablePresentationDTO.getVerifiableCredential() .stream().map(verifiableCredential -> SubmissionDescriptorDTO.builder() - .id(UUID.randomUUID().toString()) + .id(inputDescriptorDTO.getId()) .format("ldp_vc") .path("$.verifiableCredential[" + atomicInteger.getAndIncrement() + "]").build()).collect(Collectors.toList()); PresentationSubmissionDTO presentationSubmissionDTO = PresentationSubmissionDTO.builder() .id(UUID.randomUUID().toString()) - .definition_id(UUID.randomUUID().toString()) + .definition_id(presentationDefinitionDTO.getId()) .descriptorMap(submissionDescriptorDTOList).build(); return objectMapper.writeValueAsString(presentationSubmissionDTO); } PresentationDefinitionDTO constructPresentationDefinition(VCCredentialResponse vcCredentialResponse){ - LDPVc ldpVc = LDPVc.builder().proofTypes(Collections.singletonList(vcCredentialResponse.getCredential().getProof().getType())).build(); + FilterDTO filterDTO = FilterDTO.builder().type("String").pattern(vcCredentialResponse.getCredential().getType().getLast()).build(); + FieldDTO fieldDTO = FieldDTO.builder().path(new String[]{"$.type"}).filter(filterDTO).build(); + ConstraintsDTO constraintsDTO = ConstraintsDTO.builder().fields(new FieldDTO[]{fieldDTO}).build(); + IFormat ldpVc = LDPVc.builder().proofTypes(Collections.singletonList(vcCredentialResponse.getCredential().getProof().getType())).build(); Format format = Format.builder().ldpVc(ldpVc).build(); - InputDescriptorDTO inputDescriptorDTO = InputDescriptorDTO.builder().id(UUID.randomUUID().toString()).format(format).build(); + InputDescriptorDTO inputDescriptorDTO = InputDescriptorDTO.builder() + .id(UUID.randomUUID().toString()) + .constraints(constraintsDTO) + .format(format).build(); return PresentationDefinitionDTO.builder() .inputDescriptors(Collections.singletonList(inputDescriptorDTO)) diff --git a/src/main/resources/mimoto-issuers-config.json b/src/main/resources/mimoto-issuers-config.json index 9234d02f2..9c87da474 100644 --- a/src/main/resources/mimoto-issuers-config.json +++ b/src/main/resources/mimoto-issuers-config.json @@ -1,179 +1,129 @@ { "issuers": [ { - "credential_issuer": "ESignet", + "credential_issuer": "Mosip", + "protocol": "OpenId4VCI", "display": [ { - "name": "e-Signet", + "name": "National Identity Department", "logo": { - "url": "https://mosip.io/images/footer/foot-logo-b.png", - "alt_text": "esignet-logo" + "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", + "alt_text": "mosip-logo" }, - "title": "Download MOSIP Credentials", - "description": "Download credentials by providing UIN or VID", + "title": "National Identity Department", + "description": "Download MOSIP National / Foundational Identity Credential", "language": "en" }, { - "name": "e-Signet", + "name": "دائرة الهوية الوطنية", "logo": { - "url": "https://mosip.io/images/footer/foot-logo-b.png", + "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", "alt_text": "شعار موسيب" }, - "title": "قم بتنزيل بيانات اعتماد MOSIP", - "description": "توفير UIN أو VIDقم بتنزيل بيانات الاعتماد عن طريق", + "title": "دائرة الهوية الوطنية", + "description": "قم بتنزيل بيانات اعتماد الهوية الوطنية / التأسيسية MOSIP", "language": "ar" }, { - "name": "e-Signet", + "name": "राष्ट्रीय पहचान विभाग", "logo": { - "url": "https://mosip.io/images/footer/foot-logo-b.png", + "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", "alt_text": "मोसिप लोगो" }, - "title": "MOSIP क्रेडेंशियल डाउनलोड करेंं", - "description": "यूआईएन या वीआईडी प्रदान करके क्रेडेंशियल डाउनलोड करें", + "title": "राष्ट्रीय पहचान विभाग", + "description": "MOSIP नेशनल/फाउंडेशनल आइडेंटिटी क्रेडेंशियल डाउनलोड करेंं", "language": "hi" }, { - "name": "e-Signet", + "name": "ರಾಷ್ಟ್ರೀಯ ಗುರುತಿನ ಇಲಾಖೆ", "logo": { - "url": "https://mosip.io/images/footer/foot-logo-b.png", + "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", "alt_text": "mosip ಲೋಗೋ" }, - "title": "MOSIP ರುಜುವಾತುಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿ", - "description": "UIN ಅಥವಾ VID ಒದಗಿಸುವ ಮೂಲಕ ರುಜುವಾತುಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿ", + "title": "ರಾಷ್ಟ್ರೀಯ ಗುರುತಿನ ಇಲಾಖೆ", + "description": "MOSIP ರಾಷ್ಟ್ರೀಯ / ಫೌಂಡೇಶನಲ್ ಐಡೆಂಟಿಟಿ ರುಜುವಾತು ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ", "language": "kn" }, { - "name": "e-Signet", + "name": "தேசிய அடையாளத் துறை", "logo": { - "url": "https://mosip.io/images/footer/foot-logo-b.png", + "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", "alt_text": "mosip லோகோ" }, - "title": "MOSIP சான்றுகளைப் பதிவிறக்கவும்", - "description": "UIN அல்லது VIDஐ வழங்குவதன் மூலம் நற்சான்றிதழ்களைப் பதிவிறக்கவும்", + "title": "தேசிய அடையாளத் துறை", + "description": "MOSIP தேசிய / அடிப்படை அடையாளச் சான்றிதழைப் பதிவிறக்கவும்", "language": "ta" }, { - "name": "e-Signet", + "name": "National Identity Department", "logo": { - "url": "https://mosip.io/images/footer/foot-logo-b.png", + "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", "alt_text": "logo ng mosip" }, - "title": "I-download ang Mga Kredensyal ng MOSIP", - "description": "Mag-download ng mga kredensyal sa pamamagitan ng pagbibigay ng UIN o VID", + "title": "National Identity Department", + "description": "I-download ang MOSIP National / Foundational Identity Credential", "language": "fil" } ], - "protocol": "OpenId4VCI", - "client_id": "${mimoto.oidc.partner.clientid}", - "client_alias": "mpartner-default-mimotooidc", - "scopes_supported": [ - "mosip_identity_vc_ldp" - ], - "additional_headers": { - "Accept": "application/json" - }, - ".well-known": "https://${mosip.esignet.host}/.well-known/openid-credential-issuer", + "client_id": "XusU7P1y10lMr9NA1qnrny_fqynODwV4SCvWPP8cfdY", "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", - "authorization_endpoint": "https://${mosip.esignet.host}/authorize", - "authorization_audience": "https://${mosip.esignet.host}/v1/esignet/oauth/v2/token", - "token_endpoint": "https://${mosip.api.public.host}/v1/mimoto/get-token/ESignet", - "proxy_token_endpoint": "https://${mosip.api.public.host}/v1/esignet/oauth/v2/token", - "credential_endpoint": "https://${mosip.api.public.host}/v1/esignet/vci/credential", - "credential_type": [ - "VerifiableCredential", - "MOSIPVerifiableCredential" - ], - "credential_audience": "https://${mosip.esignet.host}/v1/esignet", - "ovp_qr_enabled": "false", - "enabled": "false" + "token_endpoint": "https://api.dev1.mosip.net/v1/mimoto/get-token/Mosip", + "authorization_audience": "https://esignet-insurance.dev1.mosip.net/v1/esignet/oauth/v2/token", + "proxy_token_endpoint": "https://esignet-mosipid.dev1.mosip.net/v1/esignet/oauth/v2/token", + "client_alias": "mpartner-default-test-mosipid", + "qr_code_type": "OVPRequest", + "enabled": "true", + ".well-known": "https://injicertify-mosipid.dev1.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer" }, { - "credential_issuer": "Sunbird", + "credential_issuer": "StayProtected", "protocol": "OpenId4VCI", "display": [ { - "name": "Sunbird Insurance", + "name": "StayProtected Insurance", "logo": { - "url": "https://sunbird.org/images/sunbird-logo-new.png", + "url": "https://raw.githubusercontent.com/tw-mosip/file-server/master/StayProtectedInsurance.png", "alt_text": "a square logo of a Sunbird" }, - "title": "Download Sunbird Credentials", - "description": "Download credentials with your Policy Number", + "title": "Download StayProtected Insurance Credentials", + "description": "Download insurance credential", "language": "en" - }, - { - "name": "التأمين سنبيرد", - "logo": { - "url": "https://sunbird.org/images/sunbird-logo-new.png", - "alt_text": "شعار مربع لطائر الشمس" - }, - "title": "قم بتنزيل بيانات اعتماد Sunbird", - "description": "قم بتنزيل بيانات الاعتماد باستخدام رقم السياسة الخاص بك", - "language": "ar" - }, - { - "name": "सनबर्ड बीमा", - "logo": { - "url": "https://sunbird.org/images/sunbird-logo-new.png", - "alt_text": "सनबर्ड का एक चौकोर लोगो" - }, - "title": "सनबर्ड क्रेडेंशियल्स डाउनलोड करेंं", - "description": "अपने पॉलिसी नंबर के साथ क्रेडेंशियल डाउनलोड करें", - "language": "hi" - }, - { - "name": "ಸನ್ ಬರ್ಡ್", - "logo": { - "url": "https://sunbird.org/images/sunbird-logo-new.png", - "alt_text": "ಸನ್ ಬರ್ಡ್ ನ ಚೌಕಾಕಾರದ ಲೋಗೋ" - }, - "title": "ಸನ್ಬರ್ಡ್ ರುಜುವಾತುಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿ", - "description": "ನಿಮ್ಮ ಪಾಲಿಸಿ ಸಂಖ್ಯೆಯೊಂದಿಗೆ ರುಜುವಾತುಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿ", - "language": "kn" - }, - { - "name": "சன்பேர்ட் காப்பீடு", - "logo": { - "url": "https://sunbird.org/images/sunbird-logo-new.png", - "alt_text": "சூரிய பறவையின் சதுர சின்னம்" - }, - "title": "Sunbird சான்றுகளைப் பதிவிறக்கவும்", - "description": "உங்கள் பாலிசி எண்ணுடன் நற்சான்றிதழ்களைப் பதிவிறக்கவும்", - "language": "ta" - }, - { - "name": "Seguro sa Sunbird", - "logo": { - "url": "https://sunbird.org/images/sunbird-logo-new.png", - "alt_text": "isang parisukat na logo ng isang Sunbird" - }, - "title": "I-download ang Mga Kredensyal ng Sunbird", - "description": "Mag-download ng mga kredensyal gamit ang iyong Numero ng Patakaran", - "language": "fil" } ], "client_id": "esignet-sunbird-partner", "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", - "scopes_supported": [ - "sunbird_rc_insurance_vc_ldp" - ], - "authorization_endpoint": "https://esignet-insurance.dev1.mosip.net/authorize", + "token_endpoint": "https://api.dev1.mosip.net/v1/mimoto/get-token/StayProtected", "authorization_audience": "https://esignet-insurance.dev1.mosip.net/v1/esignet/oauth/v2/token", - "token_endpoint": "https://api.dev1.mosip.net/v1/mimoto/get-token/Sunbird", "proxy_token_endpoint": "https://esignet-insurance.dev1.mosip.net/v1/esignet/oauth/v2/token", - "credential_endpoint": "https://esignet-insurance.dev1.mosip.net/v1/esignet/vci/credential", - "credential_type": [ - "VerifiableCredential", - "InsuranceCredential" - ], - "credential_audience": "https://esignet-insurance.dev1.mosip.net", "client_alias": "esignet-sunbird-partner", - "additional_headers": { - "Accept": "application/json" - }, + "qr_code_type": "OVPRequest", + "enabled": "true", + ".well-known": "https://injicertify-insurance.dev1.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer" + }, + { + "credential_issuer": "Mock", + "protocol": "OpenId4VCI", + "display": [ + { + "name": "Mock Identity", + "logo": { + "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", + "alt_text": "mosip-logo" + }, + "title": "Mock Identity", + "description": "Download Mock Identity Credential", + "language": "en" + } + ], + "client_id": "mpartner-mock-testing", + "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", + "token_endpoint": "https://api.dev1.mosip.net/v1/mimoto/get-token/Mock", + "authorization_audience": "https://esignet-insurance.dev1.mosip.net/v1/esignet/oauth/v2/token", + "proxy_token_endpoint": "https://esignet-mock.dev1.mosip.net/v1/esignet/oauth/v2/token", + "client_alias": "mpartner-mock-testing", + "qr_code_type": "OVPRequest", "enabled": "true", - ".well-known": "https://esignet-insurance.dev1.mosip.net/.well-known/openid-credential-issuer?version=v11" + ".well-known": "https://injicertify-mock.dev1.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer" } ] } diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index 3bbd23dc2..deb505f6b 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -2,16 +2,18 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import io.mosip.mimoto.dto.DisplayDTO; -import io.mosip.mimoto.dto.ErrorDTO; -import io.mosip.mimoto.dto.IssuerDTO; -import io.mosip.mimoto.dto.LogoDTO; +import io.mosip.mimoto.dto.*; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.dto.openid.VerifierDTO; import io.mosip.mimoto.dto.openid.VerifiersDTO; import io.mosip.mimoto.dto.openid.datashare.DataShareResponseDTO; import io.mosip.mimoto.dto.openid.datashare.DataShareResponseWrapperDTO; import io.mosip.mimoto.dto.openid.presentation.*; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; import java.util.*; import java.util.Collections; @@ -145,7 +147,7 @@ public static IssuerDTO getIssuerConfigDTO(String issuerName, List nullF public static PresentationRequestDTO getPresentationRequestDTO(){ return PresentationRequestDTO.builder() - .presentationDefinition("{\"id\":\"test-id\",\"input_descriptors\":[{\"id\":\"test-input-id\",\"format\":{\"ldpVc\":{\"proofTypes\":[\"Ed25519Signature2020\"]}}}]}") + .presentationDefinition("{\"id\":\"test-id\",\"input_descriptors\":[{\"id\":\"test-input-id\",\"format\":{\"ldpVc\":{\"proofTypes\":[\"Ed25519Signature2020\"]}},\"constraints\":{\"fields\":[{\"path\":[\"$.type\"],\"filter\":{\"type\":\"String\",\"pattern\":\"InsuranceCredential\"}}]}}]}") .clientId("test_client_id") .resource("test_resource") .responseType("test_response_type") @@ -191,9 +193,12 @@ public static VCCredentialResponse getVCCredentialResponseDTO(String type){ } public static PresentationDefinitionDTO getPresentationDefinitionDTO(){ - LDPVc ldpVc = LDPVc.builder().proofTypes(Collections.singletonList("Ed25519Signature2020")).build(); + FilterDTO filterDTO = FilterDTO.builder().type("String").pattern("test-credential").build(); + FieldDTO fieldDTO = FieldDTO.builder().path(new String[]{"$.type"}).filter(filterDTO).build(); + ConstraintsDTO constraintsDTO = ConstraintsDTO.builder().fields(new FieldDTO[]{fieldDTO}).build(); + IFormat ldpVc = LDPVc.builder().proofTypes(Collections.singletonList("Ed25519Signature2020")).build(); Format format = Format.builder().ldpVc(ldpVc).build(); - InputDescriptorDTO inputDescriptorDTO = InputDescriptorDTO.builder().id("test-input-id").format(format).build(); + InputDescriptorDTO inputDescriptorDTO = InputDescriptorDTO.builder().id("test-input-id").format(format).constraints(constraintsDTO).build(); return PresentationDefinitionDTO.builder() .inputDescriptors(Collections.singletonList(inputDescriptorDTO)) From 86796066dc934fccfcd242cd24052e675e4b31ee Mon Sep 17 00:00:00 2001 From: Vijay <94220135+vijay151096@users.noreply.github.com> Date: Mon, 12 Aug 2024 13:02:26 +0530 Subject: [PATCH 205/860] [INJIWEB-639] : modify the tests Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- .../service/PresentationServiceTest.java | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java index c918fb6ab..027845fd2 100644 --- a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java @@ -46,8 +46,8 @@ public void setup() throws JsonProcessingException { ReflectionTestUtils.setField(presentationService, "dataShareUrl", "test_resource"); ReflectionTestUtils.setField(presentationService, "maximumResponseHeaderSize", 65536); - when(objectMapper.readValue(eq(TestUtilities.getObjectAsString(presentationDefinitionDTO)), eq(PresentationDefinitionDTO.class))).thenReturn(presentationDefinitionDTO); - when(objectMapper.writeValueAsString(any())).thenReturn("test-data"); +// when(objectMapper.readValue(eq(TestUtilities.getObjectAsString(presentationDefinitionDTO)), eq(PresentationDefinitionDTO.class))).thenReturn(presentationDefinitionDTO); +// when(objectMapper.writeValueAsString(any())).thenReturn("test-data"); } @Test(expected = InvalidVerifierException.class) public void throwInvalidVerifierExceptionWhenClientIdPassedIsIncorrect() throws ApiNotAccessibleException, IOException { @@ -56,20 +56,20 @@ public void throwInvalidVerifierExceptionWhenClientIdPassedIsIncorrect() throws presentationService.authorizePresentation(TestUtilities.getPresentationRequestDTO()); } - @Test - public void credentialProofMatchingWithVPRequest() throws Exception { - - VCCredentialResponse vcCredentialResponse = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); - PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); - - doNothing().when(verifierService).validateVerifier(eq(presentationRequestDTO)); - when(dataShareService.downloadCredentialFromDataShare(eq(presentationRequestDTO))).thenReturn(vcCredentialResponse); - - String actualRedirectUrl = presentationService.authorizePresentation(TestUtilities.getPresentationRequestDTO()); - String expectedRedirectUrl = "test_redirect_uri#vp_token=dGVzdC1kYXRh&presentation_submission=test-data"; - - assertEquals(expectedRedirectUrl, actualRedirectUrl); - } +// @Test +// public void credentialProofMatchingWithVPRequest() throws Exception { +// +// VCCredentialResponse vcCredentialResponse = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); +// PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); +// +// doNothing().when(verifierService).validateVerifier(eq(presentationRequestDTO)); +// when(dataShareService.downloadCredentialFromDataShare(eq(presentationRequestDTO))).thenReturn(vcCredentialResponse); +// +// String actualRedirectUrl = presentationService.authorizePresentation(TestUtilities.getPresentationRequestDTO()); +// String expectedRedirectUrl = "test_redirect_uri#vp_token=dGVzdC1kYXRh&presentation_submission=test-data"; +// +// assertEquals(expectedRedirectUrl, actualRedirectUrl); +// } @Test(expected = VPNotCreatedException.class) public void credentialProofMismatchWithVPRequest() throws ApiNotAccessibleException, IOException { From dd628106534c9c8345e3968b37aa8aaa19956d90 Mon Sep 17 00:00:00 2001 From: Vijay <94220135+vijay151096@users.noreply.github.com> Date: Mon, 12 Aug 2024 14:14:23 +0530 Subject: [PATCH 206/860] [INJIWEB-639] : modify the datashare url Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- .../io/mosip/mimoto/service/impl/DataShareServiceImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java index 07d9f33ea..5da1d1c47 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java @@ -55,7 +55,8 @@ public String getFilename() { HttpEntity> requestEntity = new HttpEntity<>(map, headers); DataShareResponseWrapperDTO dataShareResponseWrapperDTO = pushCredentialIntoDataShare(requestEntity); - return dataShareResponseWrapperDTO.getDataShare().getUrl(); + URL dataShareUrl = new URL(dataShareResponseWrapperDTO.getDataShare().getUrl()); + return dataShareHostUrl + dataShareUrl.getPath(); } private DataShareResponseWrapperDTO pushCredentialIntoDataShare(HttpEntity> requestEntity) throws Exception { From 147a590dc3c07bced841c37c76d1a40aa9d558f2 Mon Sep 17 00:00:00 2001 From: Vijay <94220135+vijay151096@users.noreply.github.com> Date: Mon, 12 Aug 2024 14:54:02 +0530 Subject: [PATCH 207/860] [INJIWEB-639] : modify the datashare url Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- .../mimoto/controller/PresentationController.java | 10 +++++----- .../mimoto/service/impl/DataShareServiceImpl.java | 3 +-- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/PresentationController.java b/src/main/java/io/mosip/mimoto/controller/PresentationController.java index ac60ec154..2ce82dcfa 100644 --- a/src/main/java/io/mosip/mimoto/controller/PresentationController.java +++ b/src/main/java/io/mosip/mimoto/controller/PresentationController.java @@ -51,16 +51,16 @@ public void performAuthorization(HttpServletResponse response, logger.info("Completed Presentation Authorization in the controller."); response.sendRedirect(redirectString); } catch( InvalidVerifierException exception){ - sendRedirect(response, injiWebRedirectUrl, exception.getErrorCode(), exception.getErrorText()); + sendRedirect(response, injiWebRedirectUrl, exception.getErrorCode(), exception.getErrorText(), exception); } catch(VPNotCreatedException | InvalidCredentialResourceException exception){ - sendRedirect(response, redirectUri, exception.getErrorCode(), exception.getErrorText()); + sendRedirect(response, redirectUri, exception.getErrorCode(), exception.getErrorText(), exception); } catch (Exception exception){ - sendRedirect(response, redirectUri, ErrorConstants.INTERNAL_SERVER_ERROR.getErrorCode(), ErrorConstants.INTERNAL_SERVER_ERROR.getErrorMessage()); + sendRedirect(response, redirectUri, ErrorConstants.INTERNAL_SERVER_ERROR.getErrorCode(), ErrorConstants.INTERNAL_SERVER_ERROR.getErrorMessage(), exception); } } - private void sendRedirect(HttpServletResponse response, String domain, String code, String message) throws IOException { - logger.error("Exception Occurred in Authorizing the presentation"); + private void sendRedirect(HttpServletResponse response, String domain, String code, String message, Exception exception) throws IOException { + logger.error("Exception Occurred in Authorizing the presentation : code - " + code + " message - " + message + exception); String injiVerifyRedirectString = String.format(injiOvpErrorRedirectUrlPattern, domain, code, diff --git a/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java index 5da1d1c47..1b09636c1 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java @@ -55,8 +55,7 @@ public String getFilename() { HttpEntity> requestEntity = new HttpEntity<>(map, headers); DataShareResponseWrapperDTO dataShareResponseWrapperDTO = pushCredentialIntoDataShare(requestEntity); - URL dataShareUrl = new URL(dataShareResponseWrapperDTO.getDataShare().getUrl()); - return dataShareHostUrl + dataShareUrl.getPath(); + return dataShareResponseWrapperDTO.getDataShare().getUrl(); } private DataShareResponseWrapperDTO pushCredentialIntoDataShare(HttpEntity> requestEntity) throws Exception { From b9891ca2a5bb19e1301c061140c3493ded09d15b Mon Sep 17 00:00:00 2001 From: Vijay <94220135+vijay151096@users.noreply.github.com> Date: Mon, 12 Aug 2024 15:39:57 +0530 Subject: [PATCH 208/860] [INJIWEB-639] : modify the tests Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- .../controller/PresentationController.java | 3 +- .../service/PresentationServiceTest.java | 33 ++++++++-------- .../io/mosip/mimoto/util/TestUtilities.java | 38 +------------------ 3 files changed, 20 insertions(+), 54 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/PresentationController.java b/src/main/java/io/mosip/mimoto/controller/PresentationController.java index 2ce82dcfa..91e389631 100644 --- a/src/main/java/io/mosip/mimoto/controller/PresentationController.java +++ b/src/main/java/io/mosip/mimoto/controller/PresentationController.java @@ -18,6 +18,7 @@ import java.io.IOException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; +import java.util.Arrays; @RestController public class PresentationController { @@ -60,7 +61,7 @@ public void performAuthorization(HttpServletResponse response, } private void sendRedirect(HttpServletResponse response, String domain, String code, String message, Exception exception) throws IOException { - logger.error("Exception Occurred in Authorizing the presentation : code - " + code + " message - " + message + exception); + logger.error("Exception Occurred in Authorizing the presentation : \n\t code - " + code + "\n\t message - " + message + "\n\t Trace - " + Arrays.toString(exception.getStackTrace())); String injiVerifyRedirectString = String.format(injiOvpErrorRedirectUrlPattern, domain, code, diff --git a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java index 027845fd2..bde08733a 100644 --- a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java @@ -46,8 +46,9 @@ public void setup() throws JsonProcessingException { ReflectionTestUtils.setField(presentationService, "dataShareUrl", "test_resource"); ReflectionTestUtils.setField(presentationService, "maximumResponseHeaderSize", 65536); -// when(objectMapper.readValue(eq(TestUtilities.getObjectAsString(presentationDefinitionDTO)), eq(PresentationDefinitionDTO.class))).thenReturn(presentationDefinitionDTO); -// when(objectMapper.writeValueAsString(any())).thenReturn("test-data"); + String presentationDefitionString = TestUtilities.getObjectAsString(presentationDefinitionDTO); + when(objectMapper.readValue(eq(presentationDefitionString), eq(PresentationDefinitionDTO.class))).thenReturn(presentationDefinitionDTO); + when(objectMapper.writeValueAsString(any())).thenReturn("test-data"); } @Test(expected = InvalidVerifierException.class) public void throwInvalidVerifierExceptionWhenClientIdPassedIsIncorrect() throws ApiNotAccessibleException, IOException { @@ -56,20 +57,20 @@ public void throwInvalidVerifierExceptionWhenClientIdPassedIsIncorrect() throws presentationService.authorizePresentation(TestUtilities.getPresentationRequestDTO()); } -// @Test -// public void credentialProofMatchingWithVPRequest() throws Exception { -// -// VCCredentialResponse vcCredentialResponse = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); -// PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); -// -// doNothing().when(verifierService).validateVerifier(eq(presentationRequestDTO)); -// when(dataShareService.downloadCredentialFromDataShare(eq(presentationRequestDTO))).thenReturn(vcCredentialResponse); -// -// String actualRedirectUrl = presentationService.authorizePresentation(TestUtilities.getPresentationRequestDTO()); -// String expectedRedirectUrl = "test_redirect_uri#vp_token=dGVzdC1kYXRh&presentation_submission=test-data"; -// -// assertEquals(expectedRedirectUrl, actualRedirectUrl); -// } + @Test + public void credentialProofMatchingWithVPRequest() throws Exception { + + VCCredentialResponse vcCredentialResponse = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); + PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); + + doNothing().when(verifierService).validateVerifier(eq(presentationRequestDTO)); + when(dataShareService.downloadCredentialFromDataShare(eq(presentationRequestDTO))).thenReturn(vcCredentialResponse); + + String actualRedirectUrl = presentationService.authorizePresentation(TestUtilities.getPresentationRequestDTO()); + String expectedRedirectUrl = "test_redirect_uri#vp_token=dGVzdC1kYXRh&presentation_submission=test-data"; + + assertEquals(expectedRedirectUrl, actualRedirectUrl); + } @Test(expected = VPNotCreatedException.class) public void credentialProofMismatchWithVPRequest() throws ApiNotAccessibleException, IOException { diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index deb505f6b..b6763c8d9 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -78,42 +78,6 @@ public static IssuerDTO getIssuerDTO(String issuerName) { } return issuer; } - - public static String getExpectedWellKnownJson() { - return "{" - + "\"credential_issuer\": \"Issuer1\"," - + "\"credential_endpoint\": \"/credential_endpoint\"," - + "\"credential_configurations_supported\": {" - + "\"CredentialType1\": {" - + "\"format\": \"ldp_vc\"," - + "\"scope\": \"CredentialType1_vc_ldp\"," - + "\"display\": [{" - + "\"logo\": {" - + "\"url\": \"/logo\"," - + "\"alt_text\": \"logo-url\"" - + "}," - + "\"name\": \"CredentialType1\"," - + "\"locale\": \"en\"," - + "\"text_color\": \"#FFFFFF\"," - + "\"background_color\": \"#B34622\"" - + "}]," - + "\"proof_types_supported\": {}," - + "\"credential_definition\": {" - + "\"type\": [\"VerifiableCredential\", \"CredentialType1\"]," - + "\"credentialSubject\": {" - + "\"name\": {" - + "\"display\": [{" - + "\"name\": \"Given Name\"," - + "\"locale\": \"en\"" - + "}]" - + "}" - + "}" - + "}" - + "}" - + "}" - + "}"; - } - public static IssuerDTO getIssuerConfigDTO(String issuerName, List nullFields) { LogoDTO logo = new LogoDTO(); logo.setUrl("/logo"); @@ -147,7 +111,7 @@ public static IssuerDTO getIssuerConfigDTO(String issuerName, List nullF public static PresentationRequestDTO getPresentationRequestDTO(){ return PresentationRequestDTO.builder() - .presentationDefinition("{\"id\":\"test-id\",\"input_descriptors\":[{\"id\":\"test-input-id\",\"format\":{\"ldpVc\":{\"proofTypes\":[\"Ed25519Signature2020\"]}},\"constraints\":{\"fields\":[{\"path\":[\"$.type\"],\"filter\":{\"type\":\"String\",\"pattern\":\"InsuranceCredential\"}}]}}]}") + .presentationDefinition("{\"id\":\"test-id\",\"input_descriptors\":[{\"id\":\"test-input-id\",\"format\":{\"ldpVc\":{\"proofTypes\":[\"Ed25519Signature2020\"]}},\"constraints\":{\"fields\":[{\"path\":[\"$.type\"],\"filter\":{\"type\":\"String\",\"pattern\":\"test-credential\"}}]}}]}") .clientId("test_client_id") .resource("test_resource") .responseType("test_response_type") From 03508f7965fec7e918a4ee7fab8d37809ac51275 Mon Sep 17 00:00:00 2001 From: Vijay <94220135+vijay151096@users.noreply.github.com> Date: Mon, 12 Aug 2024 16:12:37 +0530 Subject: [PATCH 209/860] [INJIWEB-639] : add necessary loggers Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- .../io/mosip/mimoto/dto/openid/presentation/Format.java | 2 +- .../io/mosip/mimoto/dto/openid/presentation/IFormat.java | 8 -------- .../io/mosip/mimoto/dto/openid/presentation/LDPVc.java | 2 +- .../mosip/mimoto/service/impl/DataShareServiceImpl.java | 2 ++ .../mimoto/service/impl/PresentationServiceImpl.java | 4 +++- src/test/java/io/mosip/mimoto/util/TestUtilities.java | 7 +------ 6 files changed, 8 insertions(+), 17 deletions(-) delete mode 100644 src/main/java/io/mosip/mimoto/dto/openid/presentation/IFormat.java diff --git a/src/main/java/io/mosip/mimoto/dto/openid/presentation/Format.java b/src/main/java/io/mosip/mimoto/dto/openid/presentation/Format.java index 6b01c5a0a..0da11a35a 100644 --- a/src/main/java/io/mosip/mimoto/dto/openid/presentation/Format.java +++ b/src/main/java/io/mosip/mimoto/dto/openid/presentation/Format.java @@ -10,5 +10,5 @@ @AllArgsConstructor @Builder public class Format { - IFormat ldpVc; + LDPVc ldpVc; } diff --git a/src/main/java/io/mosip/mimoto/dto/openid/presentation/IFormat.java b/src/main/java/io/mosip/mimoto/dto/openid/presentation/IFormat.java deleted file mode 100644 index 7ba6453a0..000000000 --- a/src/main/java/io/mosip/mimoto/dto/openid/presentation/IFormat.java +++ /dev/null @@ -1,8 +0,0 @@ -package io.mosip.mimoto.dto.openid.presentation; - -import java.util.List; - -public interface IFormat { - List getProofTypes(); - void setProofTypes(List proofTypes); -} diff --git a/src/main/java/io/mosip/mimoto/dto/openid/presentation/LDPVc.java b/src/main/java/io/mosip/mimoto/dto/openid/presentation/LDPVc.java index aaa6a1524..08952770f 100644 --- a/src/main/java/io/mosip/mimoto/dto/openid/presentation/LDPVc.java +++ b/src/main/java/io/mosip/mimoto/dto/openid/presentation/LDPVc.java @@ -11,6 +11,6 @@ @NoArgsConstructor @AllArgsConstructor @Builder -public class LDPVc implements IFormat{ +public class LDPVc { List proofTypes; } diff --git a/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java index 1b09636c1..dcd62e947 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java @@ -80,12 +80,14 @@ public VCCredentialResponse downloadCredentialFromDataShare(PresentationRequest logger.info("Started the Credential Download From DataShare"); String credentialsResourceUri = presentationRequestDTO.getResource(); String vcCredentialResponseString = restApiClient.getApi(credentialsResourceUri, String.class); + logger.info("Completed Downloading the Credential => " + vcCredentialResponseString ); if (vcCredentialResponseString == null) { throw new InvalidCredentialResourceException( ErrorConstants.SERVER_UNAVAILABLE.getErrorCode(), ErrorConstants.SERVER_UNAVAILABLE.getErrorMessage()); } VCCredentialResponse vcCredentialResponse = objectMapper.readValue(vcCredentialResponseString, VCCredentialResponse.class); + logger.info("Completed Mapping the Credential to Oject => " + vcCredentialResponse ); if(vcCredentialResponse.getCredential() == null){ throw new InvalidCredentialResourceException(ErrorConstants.RESOURCE_EXPIRED.getErrorMessage()); } diff --git a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java index 4827c3a10..02532eae0 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java @@ -61,7 +61,9 @@ public String authorizePresentation(PresentationRequestDTO presentationRequestDT PresentationDefinitionDTO presentationDefinitionDTO; try { + logger.info("Started the Mapping Presentation Definition " + presentationRequestDTO.getPresentationDefinition()); presentationDefinitionDTO = objectMapper.readValue(presentationRequestDTO.getPresentationDefinition(), PresentationDefinitionDTO.class); + logger.info("Completed the Mapping Presentation Definition " + presentationDefinitionDTO); if (presentationDefinitionDTO == null) { throw new VPNotCreatedException(ErrorConstants.INVALID_REQUEST.getErrorMessage()); } @@ -129,7 +131,7 @@ PresentationDefinitionDTO constructPresentationDefinition(VCCredentialResponse v FilterDTO filterDTO = FilterDTO.builder().type("String").pattern(vcCredentialResponse.getCredential().getType().getLast()).build(); FieldDTO fieldDTO = FieldDTO.builder().path(new String[]{"$.type"}).filter(filterDTO).build(); ConstraintsDTO constraintsDTO = ConstraintsDTO.builder().fields(new FieldDTO[]{fieldDTO}).build(); - IFormat ldpVc = LDPVc.builder().proofTypes(Collections.singletonList(vcCredentialResponse.getCredential().getProof().getType())).build(); + LDPVc ldpVc = LDPVc.builder().proofTypes(Collections.singletonList(vcCredentialResponse.getCredential().getProof().getType())).build(); Format format = Format.builder().ldpVc(ldpVc).build(); InputDescriptorDTO inputDescriptorDTO = InputDescriptorDTO.builder() .id(UUID.randomUUID().toString()) diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index b6763c8d9..44955f020 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -9,11 +9,6 @@ import io.mosip.mimoto.dto.openid.datashare.DataShareResponseDTO; import io.mosip.mimoto.dto.openid.datashare.DataShareResponseWrapperDTO; import io.mosip.mimoto.dto.openid.presentation.*; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.MediaType; -import org.springframework.util.LinkedMultiValueMap; -import org.springframework.util.MultiValueMap; import java.util.*; import java.util.Collections; @@ -160,7 +155,7 @@ public static PresentationDefinitionDTO getPresentationDefinitionDTO(){ FilterDTO filterDTO = FilterDTO.builder().type("String").pattern("test-credential").build(); FieldDTO fieldDTO = FieldDTO.builder().path(new String[]{"$.type"}).filter(filterDTO).build(); ConstraintsDTO constraintsDTO = ConstraintsDTO.builder().fields(new FieldDTO[]{fieldDTO}).build(); - IFormat ldpVc = LDPVc.builder().proofTypes(Collections.singletonList("Ed25519Signature2020")).build(); + LDPVc ldpVc = LDPVc.builder().proofTypes(Collections.singletonList("Ed25519Signature2020")).build(); Format format = Format.builder().ldpVc(ldpVc).build(); InputDescriptorDTO inputDescriptorDTO = InputDescriptorDTO.builder().id("test-input-id").format(format).constraints(constraintsDTO).build(); From 4fd7acbcf944fc093fb546483748f1ba346aca30 Mon Sep 17 00:00:00 2001 From: Vijay <94220135+vijay151096@users.noreply.github.com> Date: Mon, 12 Aug 2024 22:21:06 +0530 Subject: [PATCH 210/860] [INJIWEB-639] : validate the datashare get url Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- .../mimoto/exception/ErrorConstants.java | 1 + .../service/impl/DataShareServiceImpl.java | 20 ++++++++++++++- .../resources/application-local.properties | 1 + .../mimoto/service/DataShareServiceTest.java | 25 ++++++++++++------- .../io/mosip/mimoto/util/TestUtilities.java | 2 +- .../resources/application-test.properties | 1 + 6 files changed, 39 insertions(+), 11 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java b/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java index d9cdd2679..61dbb7253 100644 --- a/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java +++ b/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java @@ -12,6 +12,7 @@ public enum ErrorConstants { RESOURCE_NOT_FOUND("resource_not_found", "The requested resource doesn’t exist."), SERVER_UNAVAILABLE("server_unavailable", "The server is not reachable right now."), RESOURCE_EXPIRED("resource_expired", "The requested resource expired."), + RESOURCE_INVALID("invalid_resource", "The requested resource is invalid."), REQUEST_TIMED_OUT("request_timed_out", "We are unable to process your request right now"), URI_TOO_LONG("uri_too_long", "Resource URI is too long to be handled"), INVALID_CLIENT("invalid_client", "The requested client doesn’t match."), diff --git a/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java index dcd62e947..308e5faba 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java @@ -8,6 +8,8 @@ import io.mosip.mimoto.exception.InvalidCredentialResourceException; import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.util.RestApiClient; +import jakarta.annotation.PostConstruct; +import org.apache.oro.text.regex.PatternMatcher; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -17,7 +19,9 @@ import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.stereotype.Service; +import org.springframework.util.AntPathMatcher; import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.PathMatcher; import java.net.URL; @@ -33,6 +37,9 @@ public class DataShareServiceImpl { @Value("${mosip.data.share.create.url}") String dataShareCreateUrl; + @Value("${mosip.data.share.get.url.pattern}") + String dataShareGetUrlPattern; + @Value("${mosip.data.share.create.retry.count}") Integer maxRetryCount; @@ -41,6 +48,13 @@ public class DataShareServiceImpl { @Autowired ObjectMapper objectMapper; + PathMatcher pathMatcher ; + + @PostConstruct + public void setUp(){ + pathMatcher = new AntPathMatcher(); + } + public String storeDataInDataShare(String data) throws Exception { ByteArrayResource contentsAsResource = new ByteArrayResource(data.getBytes()) { @Override @@ -79,8 +93,12 @@ private DataShareResponseWrapperDTO pushCredentialIntoDataShare(HttpEntity " + vcCredentialResponseString ); if (vcCredentialResponseString == null) { throw new InvalidCredentialResourceException( ErrorConstants.SERVER_UNAVAILABLE.getErrorCode(), diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 501cd691d..42aac0cdf 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -227,6 +227,7 @@ mosip.inji.ovp.error.redirect.url.pattern=%s?error=%s&error_description=%s mosip.data.share.host=https://datashare-inji.dev1.mosip.net mosip.data.share.create.url=${mosip.data.share.host}/v1/datashare/create/static-policyid/static-subscriberid mosip.data.share.create.retry.count=3 +mosip.data.share.get.url.pattern=http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/* #OpenId4VP related Configuration END diff --git a/src/test/java/io/mosip/mimoto/service/DataShareServiceTest.java b/src/test/java/io/mosip/mimoto/service/DataShareServiceTest.java index 3d844800e..435cc7e2e 100644 --- a/src/test/java/io/mosip/mimoto/service/DataShareServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/DataShareServiceTest.java @@ -18,6 +18,7 @@ import org.mockito.junit.MockitoJUnitRunner; import org.springframework.http.MediaType; import org.springframework.test.util.ReflectionTestUtils; +import org.springframework.util.PathMatcher; @RunWith(MockitoJUnitRunner.class) @@ -27,6 +28,8 @@ public class DataShareServiceTest { RestApiClient restApiClient; @Mock ObjectMapper objectMapper; + @Mock + PathMatcher pathMatcher; @InjectMocks DataShareServiceImpl dataShareService; @@ -34,6 +37,7 @@ public class DataShareServiceTest { public void setUp(){ ReflectionTestUtils.setField(dataShareService, "dataShareHostUrl", "https://test-url"); ReflectionTestUtils.setField(dataShareService, "dataShareCreateUrl", "https://test-url"); + ReflectionTestUtils.setField(dataShareService, "dataShareGetUrlPattern", "http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/*"); ReflectionTestUtils.setField(dataShareService, "maxRetryCount", 1); } @@ -66,10 +70,11 @@ public void downloadCredentialWhenRequestIsProper() throws Exception { PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); VCCredentialResponse vcCredentialResponseDTO = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); String credentialString = TestUtilities.getObjectAsString(vcCredentialResponseDTO); - Mockito.when(restApiClient.getApi(Mockito.eq("test_resource"), Mockito.eq(String.class))) + Mockito.when(restApiClient.getApi(Mockito.eq("http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/test"), Mockito.eq(String.class))) .thenReturn(credentialString); Mockito.when(objectMapper.readValue(Mockito.eq(credentialString), Mockito.eq(VCCredentialResponse.class))) .thenReturn(vcCredentialResponseDTO); + Mockito.when(pathMatcher.match(Mockito.eq("http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/*"),Mockito.eq("http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/test"))).thenReturn(true); VCCredentialResponse actualVCCredentialResponse = dataShareService.downloadCredentialFromDataShare(presentationRequestDTO); Assert.assertEquals(vcCredentialResponseDTO, actualVCCredentialResponse); } @@ -77,9 +82,6 @@ public void downloadCredentialWhenRequestIsProper() throws Exception { @Test(expected = InvalidCredentialResourceException.class) public void throwServiceUnavailableExceptionWhenCredentialIsNotFetched() throws Exception { PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); - VCCredentialResponse vcCredentialResponseDTO = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); - Mockito.when(restApiClient.getApi(Mockito.eq("test_resource"), Mockito.eq(String.class))) - .thenReturn(null); dataShareService.downloadCredentialFromDataShare(presentationRequestDTO); } @@ -87,12 +89,17 @@ public void throwServiceUnavailableExceptionWhenCredentialIsNotFetched() throws public void throwResourceExpiredExceptionWhenCredentialIsExpired() throws Exception { PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); VCCredentialResponse vcCredentialResponseDTO = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); - String credentialString = TestUtilities.getObjectAsString(vcCredentialResponseDTO); - Mockito.when(restApiClient.getApi(Mockito.eq("test_resource"), Mockito.eq(String.class))) - .thenReturn(credentialString); vcCredentialResponseDTO.setCredential(null); - Mockito.when(objectMapper.readValue(Mockito.eq(credentialString), Mockito.eq(VCCredentialResponse.class))) - .thenReturn(vcCredentialResponseDTO); + dataShareService.downloadCredentialFromDataShare(presentationRequestDTO); + + } + + @Test(expected = InvalidCredentialResourceException.class) + public void throwInvalidResourceExceptionWhenResourceURLDoesnotMatchPattern() throws Exception { + PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); + presentationRequestDTO.setResource("test-resource"); + VCCredentialResponse vcCredentialResponseDTO = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); + vcCredentialResponseDTO.setCredential(null); dataShareService.downloadCredentialFromDataShare(presentationRequestDTO); } diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index 44955f020..a88ae6195 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -108,7 +108,7 @@ public static PresentationRequestDTO getPresentationRequestDTO(){ return PresentationRequestDTO.builder() .presentationDefinition("{\"id\":\"test-id\",\"input_descriptors\":[{\"id\":\"test-input-id\",\"format\":{\"ldpVc\":{\"proofTypes\":[\"Ed25519Signature2020\"]}},\"constraints\":{\"fields\":[{\"path\":[\"$.type\"],\"filter\":{\"type\":\"String\",\"pattern\":\"test-credential\"}}]}}]}") .clientId("test_client_id") - .resource("test_resource") + .resource("http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/test") .responseType("test_response_type") .redirectUri("test_redirect_uri").build(); } diff --git a/src/test/resources/application-test.properties b/src/test/resources/application-test.properties index d4fc430f9..8d490757e 100644 --- a/src/test/resources/application-test.properties +++ b/src/test/resources/application-test.properties @@ -38,6 +38,7 @@ mosip.inji.ovp.error.redirect.url.pattern=%s?error=%s&error_description=%s #DataShare Config mosip.data.share.host=https://datashare-inji.dev1.mosip.net mosip.data.share.create.url=${mosip.data.share.host}/v1/datashare/create/static-policyid/static-subscriberid +mosip.data.share.get.url.pattern=http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/* mosip.data.share.create.retry.count=3 #OpenId4VP related Configuration END From c70d267772469ccc5d6d634473e481b1b73b9bd4 Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Wed, 14 Aug 2024 14:36:39 +0530 Subject: [PATCH 211/860] INJIMOB-1592 Signed-off-by: Nandhukumar --- .../apirig/testrunner/MosipTestRunner.java | 3 - .../PostWithAutogenIdWithOtpGenerate.java | 14 +--- .../apirig/testscripts/SimplePost.java | 37 --------- .../testscripts/SimplePostForAutoGenId.java | 12 --- .../resources/mimoto/CreateVID/CreateVid.yml | 51 ++++++++++++ .../resources/mimoto/CreateVID/createVid.hbs | 11 +++ .../mimoto/CreateVID/createVidResult.hbs | 5 ++ .../mimoto/GetAllIssuers/GetAllIssuers.yml | 2 +- .../resources/mimoto/SendOTP1/SendOTP.yml | 81 ------------------- .../mimoto/SendOTP1/createSendOTP.hbs | 10 --- .../mimoto/SendOTP1/createSendOTP2.hbs | 10 --- .../SendOTP1/createSendOTPErrorResult.hbs | 14 ---- .../SendOTP1/createSendOTPErrorResult2.hbs | 14 ---- .../mimoto/SendOTP1/createSendOTPResult.hbs | 12 --- apitest/testNgXmlFiles/mimotoApi.xml | 29 +++---- 15 files changed, 85 insertions(+), 220 deletions(-) create mode 100644 apitest/src/main/resources/mimoto/CreateVID/CreateVid.yml create mode 100644 apitest/src/main/resources/mimoto/CreateVID/createVid.hbs create mode 100644 apitest/src/main/resources/mimoto/CreateVID/createVidResult.hbs delete mode 100644 apitest/src/main/resources/mimoto/SendOTP1/SendOTP.yml delete mode 100644 apitest/src/main/resources/mimoto/SendOTP1/createSendOTP.hbs delete mode 100644 apitest/src/main/resources/mimoto/SendOTP1/createSendOTP2.hbs delete mode 100644 apitest/src/main/resources/mimoto/SendOTP1/createSendOTPErrorResult.hbs delete mode 100644 apitest/src/main/resources/mimoto/SendOTP1/createSendOTPErrorResult2.hbs delete mode 100644 apitest/src/main/resources/mimoto/SendOTP1/createSendOTPResult.hbs diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java b/apitest/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java index ebd839604..1be94abe7 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java @@ -83,9 +83,6 @@ public static void main(String[] arg) { KeycloakUserManager.removeUser(); KeycloakUserManager.createUsers(); KeycloakUserManager.closeKeycloakInstance(); - - List localLanguageList = new ArrayList<>(BaseTestCase.getLanguageList()); - AdminTestUtil.getLocationData(); // Generate device certificates to be consumed by Mock-MDS PartnerRegistration.deleteCertificates(); diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java index 553f1801b..29eab1400 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java @@ -96,19 +96,8 @@ public void test(TestCaseDTO testCaseDTO) } } testCaseName = isTestCaseValidForExecution(testCaseDTO); - - String inputJson = testCaseDTO.getInput().toString(); JSONObject req = new JSONObject(testCaseDTO.getInput()); - if (inputJson.contains("$PHONENUMBERFROMREGEXFORSIGNUP$")) { - String phoneNumber = getPhoneNumber(); - if (phoneNumber != null && !phoneNumber.isEmpty()) { - inputJson = replaceKeywordWithValue(inputJson, "$PHONENUMBERFROMREGEXFORSIGNUP$", phoneNumber); - req = new JSONObject(inputJson); - writeAutoGeneratedId(testCaseDTO.getTestCaseName(), "PHONE", phoneNumber); - } - } - auditLogCheck = testCaseDTO.isAuditLogCheck(); String otpRequest = null; String sendOtpReqTemplate = null; @@ -236,7 +225,8 @@ public void setResultTestName(ITestResult result) { @AfterClass(alwaysRun = true) public void waittime() { - if (!testCaseName.contains(GlobalConstants._AUTHENTICATEUSER)) { + if (!testCaseName.contains(GlobalConstants._AUTHENTICATEUSER) + && isOTPEnabled().equals("true")) { try { long delayTime = Long.parseLong(properties.getProperty("Delaytime")); if (!BaseTestCase.isTargetEnvLTS()) diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java index fd8b3c358..70b975124 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java @@ -98,43 +98,6 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad } String inputJson = getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()); - if (testCaseName.contains("CreateIdSchema")) { - inputJson = modifyIdSchemaInputJson(inputJson); - } - - if (inputJson.contains(""")) { - inputJson = inputJson.replace(""", "\""); - } - - if (inputJson.contains("$PHONENUMBERFROMREGEXFORSIGNUP$")) { - String phoneNumber = getPhoneNumber(); - if (phoneNumber != null && !phoneNumber.isEmpty()) { - inputJson = replaceKeywordWithValue(inputJson, "$PHONENUMBERFROMREGEXFORSIGNUP$", phoneNumber); - writeAutoGeneratedId(testCaseDTO.getTestCaseName(), "PHONE", phoneNumber); - } - } - - if (inputJson.contains("$FULLNAMETOREGISTERUSER$")) { - String jsonString = generateFullNameToRegisterUser(inputJson, testCaseDTO.getTestCaseName()); - if (!jsonString.isBlank()) - inputJson = jsonString; - } - - if (inputJson.contains("$PASSWORDTOREGISTERUSER$")) { -// String password = getPasswordPattern(); - String password = PASSWORD_FOR_ADDIDENTITY_AND_REGISTRATION; - if (password != null && !password.isEmpty()) { - inputJson = replaceKeywordWithValue(inputJson, "$PASSWORDTOREGISTERUSER$", password); -// writeAutoGeneratedId(testCaseDTO.getTestCaseName(), "PASSWORD", password); - } - } - - if (inputJson.contains("$PASSWORDTORESET$")) { - String passwordToReset = PASSWORD_TO_RESET; - if (passwordToReset != null && !passwordToReset.isEmpty()) { - inputJson = replaceKeywordWithValue(inputJson, "$PASSWORDTORESET$", passwordToReset); - } - } if (testCaseDTO.getTemplateFields() != null && templateFields.length > 0) { ArrayList inputtestCases = AdminTestUtil.getInputTestCase(testCaseDTO); diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java index 3519ecfbd..b984eca2e 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java @@ -98,18 +98,6 @@ public void test(TestCaseDTO testCaseDTO) } } - if (BaseTestCase.isTargetEnvLTS()) { - if (!ConfigManager.isInServiceNotDeployedList(GlobalConstants.RESIDENT)) { - if ((BaseTestCase.currentModule.equals("esignet") && testCaseName.startsWith("ESignetIdR_Generate"))) { - throw new SkipException( - GlobalConstants.VID_GENERATED_USING_RESIDENT_API_SO_FEATURE_NOT_SUPPORTED_OR_NEEDED_MESSAGE); -// qa115 - f -// cam - t f -// dev - t - } - } - } - testCaseName = isTestCaseValidForExecution(testCaseDTO); String[] templateFields = testCaseDTO.getTemplateFields(); String inputJson = ""; diff --git a/apitest/src/main/resources/mimoto/CreateVID/CreateVid.yml b/apitest/src/main/resources/mimoto/CreateVID/CreateVid.yml new file mode 100644 index 000000000..e1ab19217 --- /dev/null +++ b/apitest/src/main/resources/mimoto/CreateVID/CreateVid.yml @@ -0,0 +1,51 @@ +CreateVID: + Mimoto_Generate_Perpetual_VID_Valid_Smoke_sid: + endPoint: /idrepository/v1/vid + role: idrepo + restMethod: post + inputTemplate: mimoto/CreateVID/createVid + outputTemplate: mimoto/CreateVID/createVidResult + input: '{ + "vidType": "Perpetual", + "UIN": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "version": "v1", + "id": "mosip.vid.create", + "requesttime": "$TIMESTAMP$" +}' + output: '{ + "vidStatus":"ACTIVE" +}' + + Mimoto_Generate_Temporary_VID_Valid_Smoke_sid: + endPoint: /idrepository/v1/vid + role: idrepo + restMethod: post + inputTemplate: mimoto/CreateVID/createVid + outputTemplate: mimoto/CreateVID/createVidResult + input: '{ + "vidType": "Perpetual", + "UIN": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "version": "v1", + "id": "mosip.vid.create", + "requesttime": "$TIMESTAMP$" +}' + output: '{ + "vidStatus":"ACTIVE" +}' + + Mimoto_Generate_Perpetual_VID_Binding_Valid_Smoke_sid: + endPoint: /idrepository/v1/vid + role: idrepo + restMethod: post + inputTemplate: mimoto/CreateVID/createVid + outputTemplate: mimoto/CreateVID/createVidResult + input: '{ + "vidType": "Perpetual", + "UIN": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "version": "v1", + "id": "mosip.vid.create", + "requesttime": "$TIMESTAMP$" +}' + output: '{ + "vidStatus":"ACTIVE" +}' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/CreateVID/createVid.hbs b/apitest/src/main/resources/mimoto/CreateVID/createVid.hbs new file mode 100644 index 000000000..b0dfb2cbf --- /dev/null +++ b/apitest/src/main/resources/mimoto/CreateVID/createVid.hbs @@ -0,0 +1,11 @@ + +{ + "id": "{{id}}", + "metadata": {}, + "request": { + "UIN": "{{UIN}}", + "vidType": "{{vidType}}" + }, + "requesttime": "{{requesttime}}", + "version": "{{version}}" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/CreateVID/createVidResult.hbs b/apitest/src/main/resources/mimoto/CreateVID/createVidResult.hbs new file mode 100644 index 000000000..5e95428a4 --- /dev/null +++ b/apitest/src/main/resources/mimoto/CreateVID/createVidResult.hbs @@ -0,0 +1,5 @@ +{ + "response": { + "vidStatus": "{{vidStatus}}" + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml b/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml index 6c41a5625..2f2d956b2 100644 --- a/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml +++ b/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml @@ -12,7 +12,7 @@ GetAllIssuers: }' Mimoto_GetAllIssuers_Specific_Issuer_All_Valid_Smoke: - endPoint: /residentmobileapp/issuers/Mosip + endPoint: /mimoto/issuers/Mosip role: resident restMethod: get checkErrorsOnlyInResponse: true diff --git a/apitest/src/main/resources/mimoto/SendOTP1/SendOTP.yml b/apitest/src/main/resources/mimoto/SendOTP1/SendOTP.yml deleted file mode 100644 index 3edc30c09..000000000 --- a/apitest/src/main/resources/mimoto/SendOTP1/SendOTP.yml +++ /dev/null @@ -1,81 +0,0 @@ -SendOTP: - Mimoto_SendOTP_Valid_UIN_All_Smoke: - endPoint: /resident/v1/req/otp - role: resident - restMethod: post - checkErrorsOnlyInResponse: true - inputTemplate: mimoto/SendOTP1/createSendOTP - outputTemplate: mimoto/SendOTP1/createSendOTPResult - input: '{ - "transactionID": "$TRANSACTIONID$", - "requestTime": "$TIMESTAMP$", - "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", - "individualIdType": "UIN" -}' - output: '{ - "maskedMobile": "$IGNORE$", - "maskedEmail": "$IGNORE$" - }' - - Mimoto_SendOTP_Valid_VID_All_Smoke: - endPoint: /resident/v1/req/otp - role: resident - restMethod: post - checkErrorsOnlyInResponse: true - inputTemplate: mimoto/SendOTP1/createSendOTP - outputTemplate: mimoto/SendOTP1/createSendOTPResult - input: '{ - "transactionID": "$TRANSACTIONID$", - "requestTime": "$TIMESTAMP$", - "individualId": "$ID:Generate_Perpetual_VID_Valid_Smoke_sid_vid$", - "individualIdType": "VID" -}' - output: '{ - "maskedMobile": "$IGNORE$", - "maskedEmail": "$IGNORE$" -}' - - Mimoto_SendOTP_InValid_UIN_All: - endPoint: /v1/mimoto/req/otp - role: resident - restMethod: post - inputTemplate: mimoto/SendOTP1/createSendOTP - outputTemplate: mimoto/error - input: '{ - "transactionID": "$TRANSACTIONID$", - "requestTime": "$TIMESTAMP$", - "individualId": "4Y4B4 N@&&&&", - "individualIdType": "UIN" -}' - output: '{ - "errors": [ - { - "errorCode": "IDA-MLC-009", - "errorMessage": "$IGNORE$" - } - ] -}' - - Mimoto_SendOTP_Invalid_VID_Neg: - endPoint: /resident/v1/req/otp - role: resident - checkErrorsOnlyInResponse: true - restMethod: post - inputTemplate: mimoto/SendOTP1/createSendOTP - outputTemplate: mimoto/error - input: '{ - "transactionID": "$TRANSACTIONID$", - "requestTime": "$TIMESTAMP$", - "individualId": "$gyx56", - "individualIdType": "VID" -}' - output: '{ - "errors": [ - { - "errorCode": "IDA-MLC-009", - "errorMessage": "Invalid Input Parameter - individualId" - } - ], - "maskedMobile": "$IGNORE$", - "maskedEmail": "XXsXXeXXaXXoXXtXXn@gmail.com" -}' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP1/createSendOTP.hbs b/apitest/src/main/resources/mimoto/SendOTP1/createSendOTP.hbs deleted file mode 100644 index 34cba88fd..000000000 --- a/apitest/src/main/resources/mimoto/SendOTP1/createSendOTP.hbs +++ /dev/null @@ -1,10 +0,0 @@ -{ - "id": "mosip.identity.otp.internal", - "individualId": "{{individualId}}", - "individualIdType": "{{individualIdType}}", - "metadata": {}, - "otpChannel": ["PHONE","EMAIL"], - "requestTime": "{{requestTime}}", - "transactionID": "{{transactionID}}", - "version": "1.0" -} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP1/createSendOTP2.hbs b/apitest/src/main/resources/mimoto/SendOTP1/createSendOTP2.hbs deleted file mode 100644 index a0a1e4fc3..000000000 --- a/apitest/src/main/resources/mimoto/SendOTP1/createSendOTP2.hbs +++ /dev/null @@ -1,10 +0,0 @@ -{ - "id": "mosip.identity.otp.internal", - "individualId": "{{individualId}}", - "individualIdType": "{{individualIdType}}", - "metadata": {}, - "otpChannel": {{otpChannel}}, - "requestTime": "{{requestTime}}", - "transactionID": "{{transactionID}}", - "version": "1.0" -} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP1/createSendOTPErrorResult.hbs b/apitest/src/main/resources/mimoto/SendOTP1/createSendOTPErrorResult.hbs deleted file mode 100644 index c83688009..000000000 --- a/apitest/src/main/resources/mimoto/SendOTP1/createSendOTPErrorResult.hbs +++ /dev/null @@ -1,14 +0,0 @@ -{ - "id": "$IGNORE$", - "version": "$IGNORE$", - "responseTime": "$IGNORE$", - "transactionID": "$IGNORE$", - "metadata": "$IGNORE$", - "response": "$IGNORE$", - "errors": [ - { - "errorCode": "{{errorCode}}", - "errorMessage": "{{errorMessage}}" - } - ] -} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP1/createSendOTPErrorResult2.hbs b/apitest/src/main/resources/mimoto/SendOTP1/createSendOTPErrorResult2.hbs deleted file mode 100644 index 1216fda84..000000000 --- a/apitest/src/main/resources/mimoto/SendOTP1/createSendOTPErrorResult2.hbs +++ /dev/null @@ -1,14 +0,0 @@ -{ - "id": "$IGNORE$", - "version": "$IGNORE$", - "responseTime": "$IGNORE$", - "transactionID": "$IGNORE$", - "metadata": "$IGNORE$", - "response": "$IGNORE$", - "errors": [ - { - "errorCode": "{{errorCode}}", - "message": "{{message}}" - } - ] -} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP1/createSendOTPResult.hbs b/apitest/src/main/resources/mimoto/SendOTP1/createSendOTPResult.hbs deleted file mode 100644 index bd241fc20..000000000 --- a/apitest/src/main/resources/mimoto/SendOTP1/createSendOTPResult.hbs +++ /dev/null @@ -1,12 +0,0 @@ -{ - "id": "mosip.identity.otp.internal", - "version": "1.0", - "responseTime": "$IGNORE$", - "transactionID": "$IGNORE$", - "metadata": "$IGNORE$", - "response": { - "maskedMobile": "{{maskedMobile}}", - "maskedEmail": "$IGNORE$" - }, - "errors": "$IGNORE$" -} \ No newline at end of file diff --git a/apitest/testNgXmlFiles/mimotoApi.xml b/apitest/testNgXmlFiles/mimotoApi.xml index e58afb2ea..3237e5a10 100644 --- a/apitest/testNgXmlFiles/mimotoApi.xml +++ b/apitest/testNgXmlFiles/mimotoApi.xml @@ -8,21 +8,29 @@ - - + + + - - + + + + + + + + + + + - - - - - - - + From 1f674a7ff2b13b1f70f0eb3f44b1d14dabe3a528 Mon Sep 17 00:00:00 2001 From: Nandhukumar <100744358+nandhu-kumar@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:37:08 +0530 Subject: [PATCH 212/860] INJIMOB-1592 (#390) Signed-off-by: Nandhukumar --- .../apirig/testrunner/MosipTestRunner.java | 3 - .../PostWithAutogenIdWithOtpGenerate.java | 14 +--- .../apirig/testscripts/SimplePost.java | 37 --------- .../testscripts/SimplePostForAutoGenId.java | 12 --- .../resources/mimoto/CreateVID/CreateVid.yml | 51 ++++++++++++ .../resources/mimoto/CreateVID/createVid.hbs | 11 +++ .../mimoto/CreateVID/createVidResult.hbs | 5 ++ .../mimoto/GetAllIssuers/GetAllIssuers.yml | 2 +- .../resources/mimoto/SendOTP1/SendOTP.yml | 81 ------------------- .../mimoto/SendOTP1/createSendOTP.hbs | 10 --- .../mimoto/SendOTP1/createSendOTP2.hbs | 10 --- .../SendOTP1/createSendOTPErrorResult.hbs | 14 ---- .../SendOTP1/createSendOTPErrorResult2.hbs | 14 ---- .../mimoto/SendOTP1/createSendOTPResult.hbs | 12 --- apitest/testNgXmlFiles/mimotoApi.xml | 29 +++---- 15 files changed, 85 insertions(+), 220 deletions(-) create mode 100644 apitest/src/main/resources/mimoto/CreateVID/CreateVid.yml create mode 100644 apitest/src/main/resources/mimoto/CreateVID/createVid.hbs create mode 100644 apitest/src/main/resources/mimoto/CreateVID/createVidResult.hbs delete mode 100644 apitest/src/main/resources/mimoto/SendOTP1/SendOTP.yml delete mode 100644 apitest/src/main/resources/mimoto/SendOTP1/createSendOTP.hbs delete mode 100644 apitest/src/main/resources/mimoto/SendOTP1/createSendOTP2.hbs delete mode 100644 apitest/src/main/resources/mimoto/SendOTP1/createSendOTPErrorResult.hbs delete mode 100644 apitest/src/main/resources/mimoto/SendOTP1/createSendOTPErrorResult2.hbs delete mode 100644 apitest/src/main/resources/mimoto/SendOTP1/createSendOTPResult.hbs diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java b/apitest/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java index fddc667de..98ad80cf5 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java @@ -83,9 +83,6 @@ public static void main(String[] arg) { KeycloakUserManager.removeUser(); KeycloakUserManager.createUsers(); KeycloakUserManager.closeKeycloakInstance(); - - List localLanguageList = new ArrayList<>(BaseTestCase.getLanguageList()); - AdminTestUtil.getLocationData(); // Generate device certificates to be consumed by Mock-MDS PartnerRegistration.deleteCertificates(); diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java index 553f1801b..29eab1400 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java @@ -96,19 +96,8 @@ public void test(TestCaseDTO testCaseDTO) } } testCaseName = isTestCaseValidForExecution(testCaseDTO); - - String inputJson = testCaseDTO.getInput().toString(); JSONObject req = new JSONObject(testCaseDTO.getInput()); - if (inputJson.contains("$PHONENUMBERFROMREGEXFORSIGNUP$")) { - String phoneNumber = getPhoneNumber(); - if (phoneNumber != null && !phoneNumber.isEmpty()) { - inputJson = replaceKeywordWithValue(inputJson, "$PHONENUMBERFROMREGEXFORSIGNUP$", phoneNumber); - req = new JSONObject(inputJson); - writeAutoGeneratedId(testCaseDTO.getTestCaseName(), "PHONE", phoneNumber); - } - } - auditLogCheck = testCaseDTO.isAuditLogCheck(); String otpRequest = null; String sendOtpReqTemplate = null; @@ -236,7 +225,8 @@ public void setResultTestName(ITestResult result) { @AfterClass(alwaysRun = true) public void waittime() { - if (!testCaseName.contains(GlobalConstants._AUTHENTICATEUSER)) { + if (!testCaseName.contains(GlobalConstants._AUTHENTICATEUSER) + && isOTPEnabled().equals("true")) { try { long delayTime = Long.parseLong(properties.getProperty("Delaytime")); if (!BaseTestCase.isTargetEnvLTS()) diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java index fd8b3c358..70b975124 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java @@ -98,43 +98,6 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad } String inputJson = getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()); - if (testCaseName.contains("CreateIdSchema")) { - inputJson = modifyIdSchemaInputJson(inputJson); - } - - if (inputJson.contains(""")) { - inputJson = inputJson.replace(""", "\""); - } - - if (inputJson.contains("$PHONENUMBERFROMREGEXFORSIGNUP$")) { - String phoneNumber = getPhoneNumber(); - if (phoneNumber != null && !phoneNumber.isEmpty()) { - inputJson = replaceKeywordWithValue(inputJson, "$PHONENUMBERFROMREGEXFORSIGNUP$", phoneNumber); - writeAutoGeneratedId(testCaseDTO.getTestCaseName(), "PHONE", phoneNumber); - } - } - - if (inputJson.contains("$FULLNAMETOREGISTERUSER$")) { - String jsonString = generateFullNameToRegisterUser(inputJson, testCaseDTO.getTestCaseName()); - if (!jsonString.isBlank()) - inputJson = jsonString; - } - - if (inputJson.contains("$PASSWORDTOREGISTERUSER$")) { -// String password = getPasswordPattern(); - String password = PASSWORD_FOR_ADDIDENTITY_AND_REGISTRATION; - if (password != null && !password.isEmpty()) { - inputJson = replaceKeywordWithValue(inputJson, "$PASSWORDTOREGISTERUSER$", password); -// writeAutoGeneratedId(testCaseDTO.getTestCaseName(), "PASSWORD", password); - } - } - - if (inputJson.contains("$PASSWORDTORESET$")) { - String passwordToReset = PASSWORD_TO_RESET; - if (passwordToReset != null && !passwordToReset.isEmpty()) { - inputJson = replaceKeywordWithValue(inputJson, "$PASSWORDTORESET$", passwordToReset); - } - } if (testCaseDTO.getTemplateFields() != null && templateFields.length > 0) { ArrayList inputtestCases = AdminTestUtil.getInputTestCase(testCaseDTO); diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java index 3519ecfbd..b984eca2e 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java @@ -98,18 +98,6 @@ public void test(TestCaseDTO testCaseDTO) } } - if (BaseTestCase.isTargetEnvLTS()) { - if (!ConfigManager.isInServiceNotDeployedList(GlobalConstants.RESIDENT)) { - if ((BaseTestCase.currentModule.equals("esignet") && testCaseName.startsWith("ESignetIdR_Generate"))) { - throw new SkipException( - GlobalConstants.VID_GENERATED_USING_RESIDENT_API_SO_FEATURE_NOT_SUPPORTED_OR_NEEDED_MESSAGE); -// qa115 - f -// cam - t f -// dev - t - } - } - } - testCaseName = isTestCaseValidForExecution(testCaseDTO); String[] templateFields = testCaseDTO.getTemplateFields(); String inputJson = ""; diff --git a/apitest/src/main/resources/mimoto/CreateVID/CreateVid.yml b/apitest/src/main/resources/mimoto/CreateVID/CreateVid.yml new file mode 100644 index 000000000..e1ab19217 --- /dev/null +++ b/apitest/src/main/resources/mimoto/CreateVID/CreateVid.yml @@ -0,0 +1,51 @@ +CreateVID: + Mimoto_Generate_Perpetual_VID_Valid_Smoke_sid: + endPoint: /idrepository/v1/vid + role: idrepo + restMethod: post + inputTemplate: mimoto/CreateVID/createVid + outputTemplate: mimoto/CreateVID/createVidResult + input: '{ + "vidType": "Perpetual", + "UIN": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "version": "v1", + "id": "mosip.vid.create", + "requesttime": "$TIMESTAMP$" +}' + output: '{ + "vidStatus":"ACTIVE" +}' + + Mimoto_Generate_Temporary_VID_Valid_Smoke_sid: + endPoint: /idrepository/v1/vid + role: idrepo + restMethod: post + inputTemplate: mimoto/CreateVID/createVid + outputTemplate: mimoto/CreateVID/createVidResult + input: '{ + "vidType": "Perpetual", + "UIN": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", + "version": "v1", + "id": "mosip.vid.create", + "requesttime": "$TIMESTAMP$" +}' + output: '{ + "vidStatus":"ACTIVE" +}' + + Mimoto_Generate_Perpetual_VID_Binding_Valid_Smoke_sid: + endPoint: /idrepository/v1/vid + role: idrepo + restMethod: post + inputTemplate: mimoto/CreateVID/createVid + outputTemplate: mimoto/CreateVID/createVidResult + input: '{ + "vidType": "Perpetual", + "UIN": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", + "version": "v1", + "id": "mosip.vid.create", + "requesttime": "$TIMESTAMP$" +}' + output: '{ + "vidStatus":"ACTIVE" +}' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/CreateVID/createVid.hbs b/apitest/src/main/resources/mimoto/CreateVID/createVid.hbs new file mode 100644 index 000000000..b0dfb2cbf --- /dev/null +++ b/apitest/src/main/resources/mimoto/CreateVID/createVid.hbs @@ -0,0 +1,11 @@ + +{ + "id": "{{id}}", + "metadata": {}, + "request": { + "UIN": "{{UIN}}", + "vidType": "{{vidType}}" + }, + "requesttime": "{{requesttime}}", + "version": "{{version}}" +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/CreateVID/createVidResult.hbs b/apitest/src/main/resources/mimoto/CreateVID/createVidResult.hbs new file mode 100644 index 000000000..5e95428a4 --- /dev/null +++ b/apitest/src/main/resources/mimoto/CreateVID/createVidResult.hbs @@ -0,0 +1,5 @@ +{ + "response": { + "vidStatus": "{{vidStatus}}" + } +} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml b/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml index 6c41a5625..2f2d956b2 100644 --- a/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml +++ b/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml @@ -12,7 +12,7 @@ GetAllIssuers: }' Mimoto_GetAllIssuers_Specific_Issuer_All_Valid_Smoke: - endPoint: /residentmobileapp/issuers/Mosip + endPoint: /mimoto/issuers/Mosip role: resident restMethod: get checkErrorsOnlyInResponse: true diff --git a/apitest/src/main/resources/mimoto/SendOTP1/SendOTP.yml b/apitest/src/main/resources/mimoto/SendOTP1/SendOTP.yml deleted file mode 100644 index 3edc30c09..000000000 --- a/apitest/src/main/resources/mimoto/SendOTP1/SendOTP.yml +++ /dev/null @@ -1,81 +0,0 @@ -SendOTP: - Mimoto_SendOTP_Valid_UIN_All_Smoke: - endPoint: /resident/v1/req/otp - role: resident - restMethod: post - checkErrorsOnlyInResponse: true - inputTemplate: mimoto/SendOTP1/createSendOTP - outputTemplate: mimoto/SendOTP1/createSendOTPResult - input: '{ - "transactionID": "$TRANSACTIONID$", - "requestTime": "$TIMESTAMP$", - "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", - "individualIdType": "UIN" -}' - output: '{ - "maskedMobile": "$IGNORE$", - "maskedEmail": "$IGNORE$" - }' - - Mimoto_SendOTP_Valid_VID_All_Smoke: - endPoint: /resident/v1/req/otp - role: resident - restMethod: post - checkErrorsOnlyInResponse: true - inputTemplate: mimoto/SendOTP1/createSendOTP - outputTemplate: mimoto/SendOTP1/createSendOTPResult - input: '{ - "transactionID": "$TRANSACTIONID$", - "requestTime": "$TIMESTAMP$", - "individualId": "$ID:Generate_Perpetual_VID_Valid_Smoke_sid_vid$", - "individualIdType": "VID" -}' - output: '{ - "maskedMobile": "$IGNORE$", - "maskedEmail": "$IGNORE$" -}' - - Mimoto_SendOTP_InValid_UIN_All: - endPoint: /v1/mimoto/req/otp - role: resident - restMethod: post - inputTemplate: mimoto/SendOTP1/createSendOTP - outputTemplate: mimoto/error - input: '{ - "transactionID": "$TRANSACTIONID$", - "requestTime": "$TIMESTAMP$", - "individualId": "4Y4B4 N@&&&&", - "individualIdType": "UIN" -}' - output: '{ - "errors": [ - { - "errorCode": "IDA-MLC-009", - "errorMessage": "$IGNORE$" - } - ] -}' - - Mimoto_SendOTP_Invalid_VID_Neg: - endPoint: /resident/v1/req/otp - role: resident - checkErrorsOnlyInResponse: true - restMethod: post - inputTemplate: mimoto/SendOTP1/createSendOTP - outputTemplate: mimoto/error - input: '{ - "transactionID": "$TRANSACTIONID$", - "requestTime": "$TIMESTAMP$", - "individualId": "$gyx56", - "individualIdType": "VID" -}' - output: '{ - "errors": [ - { - "errorCode": "IDA-MLC-009", - "errorMessage": "Invalid Input Parameter - individualId" - } - ], - "maskedMobile": "$IGNORE$", - "maskedEmail": "XXsXXeXXaXXoXXtXXn@gmail.com" -}' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP1/createSendOTP.hbs b/apitest/src/main/resources/mimoto/SendOTP1/createSendOTP.hbs deleted file mode 100644 index 34cba88fd..000000000 --- a/apitest/src/main/resources/mimoto/SendOTP1/createSendOTP.hbs +++ /dev/null @@ -1,10 +0,0 @@ -{ - "id": "mosip.identity.otp.internal", - "individualId": "{{individualId}}", - "individualIdType": "{{individualIdType}}", - "metadata": {}, - "otpChannel": ["PHONE","EMAIL"], - "requestTime": "{{requestTime}}", - "transactionID": "{{transactionID}}", - "version": "1.0" -} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP1/createSendOTP2.hbs b/apitest/src/main/resources/mimoto/SendOTP1/createSendOTP2.hbs deleted file mode 100644 index a0a1e4fc3..000000000 --- a/apitest/src/main/resources/mimoto/SendOTP1/createSendOTP2.hbs +++ /dev/null @@ -1,10 +0,0 @@ -{ - "id": "mosip.identity.otp.internal", - "individualId": "{{individualId}}", - "individualIdType": "{{individualIdType}}", - "metadata": {}, - "otpChannel": {{otpChannel}}, - "requestTime": "{{requestTime}}", - "transactionID": "{{transactionID}}", - "version": "1.0" -} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP1/createSendOTPErrorResult.hbs b/apitest/src/main/resources/mimoto/SendOTP1/createSendOTPErrorResult.hbs deleted file mode 100644 index c83688009..000000000 --- a/apitest/src/main/resources/mimoto/SendOTP1/createSendOTPErrorResult.hbs +++ /dev/null @@ -1,14 +0,0 @@ -{ - "id": "$IGNORE$", - "version": "$IGNORE$", - "responseTime": "$IGNORE$", - "transactionID": "$IGNORE$", - "metadata": "$IGNORE$", - "response": "$IGNORE$", - "errors": [ - { - "errorCode": "{{errorCode}}", - "errorMessage": "{{errorMessage}}" - } - ] -} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP1/createSendOTPErrorResult2.hbs b/apitest/src/main/resources/mimoto/SendOTP1/createSendOTPErrorResult2.hbs deleted file mode 100644 index 1216fda84..000000000 --- a/apitest/src/main/resources/mimoto/SendOTP1/createSendOTPErrorResult2.hbs +++ /dev/null @@ -1,14 +0,0 @@ -{ - "id": "$IGNORE$", - "version": "$IGNORE$", - "responseTime": "$IGNORE$", - "transactionID": "$IGNORE$", - "metadata": "$IGNORE$", - "response": "$IGNORE$", - "errors": [ - { - "errorCode": "{{errorCode}}", - "message": "{{message}}" - } - ] -} \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTP1/createSendOTPResult.hbs b/apitest/src/main/resources/mimoto/SendOTP1/createSendOTPResult.hbs deleted file mode 100644 index bd241fc20..000000000 --- a/apitest/src/main/resources/mimoto/SendOTP1/createSendOTPResult.hbs +++ /dev/null @@ -1,12 +0,0 @@ -{ - "id": "mosip.identity.otp.internal", - "version": "1.0", - "responseTime": "$IGNORE$", - "transactionID": "$IGNORE$", - "metadata": "$IGNORE$", - "response": { - "maskedMobile": "{{maskedMobile}}", - "maskedEmail": "$IGNORE$" - }, - "errors": "$IGNORE$" -} \ No newline at end of file diff --git a/apitest/testNgXmlFiles/mimotoApi.xml b/apitest/testNgXmlFiles/mimotoApi.xml index e58afb2ea..3237e5a10 100644 --- a/apitest/testNgXmlFiles/mimotoApi.xml +++ b/apitest/testNgXmlFiles/mimotoApi.xml @@ -8,21 +8,29 @@ - - + + + - - + + + + + + + + + + + - - - - - - - + From 90f550e989676633c430583c93910f6cf75facf5 Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Wed, 14 Aug 2024 18:06:53 +0530 Subject: [PATCH 213/860] MOSIP-35227 Signed-off-by: Nandhukumar --- apitest/src/main/resources/config/Kernel.properties | 1 + 1 file changed, 1 insertion(+) diff --git a/apitest/src/main/resources/config/Kernel.properties b/apitest/src/main/resources/config/Kernel.properties index f90e39c57..34b12aae6 100644 --- a/apitest/src/main/resources/config/Kernel.properties +++ b/apitest/src/main/resources/config/Kernel.properties @@ -102,6 +102,7 @@ validateBindingEndpoint=ida-binding esignetWellKnownEndPoint=/v1/esignet/oidc/.well-known/openid-configuration signupSettingsEndPoint=/v1/signup/settings actuatorMimotoEndpoint=/v1/mimoto/actuator/env +esignetActuatorPropertySection=esignet-default.properties From 31e233311928d5c092494516d50fb426628e8603 Mon Sep 17 00:00:00 2001 From: abhip2565 <74866247+abhip2565@users.noreply.github.com> Date: Wed, 14 Aug 2024 18:29:19 +0530 Subject: [PATCH 214/860] [INJIMOB-1850] update getissuerwellknown method to read fallback json file (#391) Signed-off-by: Abhishek Paul --- .../service/impl/IssuersServiceImpl.java | 18 +++++++++++++++--- .../mimoto/service/IssuersServiceTest.java | 12 +++++++++--- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index 3a1f9ab54..0d98bb7fb 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -1,6 +1,8 @@ package io.mosip.mimoto.service.impl; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import io.mosip.kernel.core.logger.spi.Logger; @@ -35,9 +37,12 @@ public class IssuersServiceImpl implements IssuersService { @Autowired private RestApiClient restApiClient; + @Autowired + private ObjectMapper objectMapper; + @Override - public IssuersDTO getAllIssuers(String search) throws ApiNotAccessibleException, IOException { + public IssuersDTO getAllIssuers(String search) throws ApiNotAccessibleException{ IssuersDTO issuers; String issuersConfigJsonValue = utilities.getIssuersConfigJsonValue(); if (issuersConfigJsonValue == null) { @@ -96,10 +101,17 @@ public IssuerDTO getIssuerConfig(String issuerId) throws ApiNotAccessibleExcepti @Override public CredentialIssuerWellKnownResponse getIssuerWellknown(String issuerId) throws ApiNotAccessibleException, IOException { - return (CredentialIssuerWellKnownResponse) getAllIssuersWithAllFields().getIssuers().stream() + return getAllIssuersWithAllFields().getIssuers().stream() .filter(issuer -> issuer.getCredential_issuer().equals(issuerId)) .findFirst() - .map(issuerDTO -> restApiClient.getApi(issuerDTO.getWellKnownEndpoint(), CredentialIssuerWellKnownResponse.class)) + .map(issuerDTO -> { + String wellknownResponse = restApiClient.getApi(issuerDTO.getWellKnownEndpoint(), String.class); + try { + return objectMapper.readValue(wellknownResponse,CredentialIssuerWellKnownResponse.class); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + }) .orElseThrow(ApiNotAccessibleException::new); } diff --git a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java index 21b3d0cea..72027c058 100644 --- a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.service; +import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.Gson; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.IssuersDTO; @@ -17,6 +18,7 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.beans.factory.annotation.Autowired; import java.io.IOException; import java.util.ArrayList; @@ -44,6 +46,9 @@ public class IssuersServiceTest { @Mock Utilities utilities; + @Mock + ObjectMapper objectMapper; + List issuerConfigRelatedFields11 = List.of("additional_headers", "authorization_endpoint","authorization_audience", "token_endpoint", "proxy_token_endpoint", "credential_endpoint", "credential_audience", "redirect_uri"); List issuerConfigRelatedFields=List.of("additional_headers", "authorization_endpoint","authorization_audience","credential_endpoint", "credential_audience"); @@ -93,12 +98,13 @@ public void shouldReturnIssuerWellknownForTheIssuerIdIfExist() throws ApiNotAcce CredentialIssuerWellKnownResponse expextedCredentialIssuerWellKnownResponse=getCredentialIssuerWellKnownResponseDto("Issuer1", Map.of("CredentialType1",getCredentialSupportedResponse("CredentialType1"))); - Mockito.when(restApiClient.getApi(wellKnownUrl , CredentialIssuerWellKnownResponse.class)) - .thenReturn(expextedCredentialIssuerWellKnownResponse); + Mockito.when(restApiClient.getApi(wellKnownUrl , String.class)) + .thenReturn(getExpectedWellKnownJson()); + Mockito.when(objectMapper.readValue(getExpectedWellKnownJson(), CredentialIssuerWellKnownResponse.class)).thenReturn(expextedCredentialIssuerWellKnownResponse); CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse=issuersService.getIssuerWellknown(issuerId); assertEquals(expextedCredentialIssuerWellKnownResponse,credentialIssuerWellKnownResponse); - verify(restApiClient, times(1)).getApi(wellKnownUrl, CredentialIssuerWellKnownResponse.class); + verify(restApiClient, times(1)).getApi(wellKnownUrl, String.class); } @Test From 805ca3040e7257bd4f704d8733b927988a1b9b94 Mon Sep 17 00:00:00 2001 From: Vijay <94220135+vijay151096@users.noreply.github.com> Date: Fri, 16 Aug 2024 09:28:40 +0530 Subject: [PATCH 215/860] [INJIWEB-639] : make format agnostic Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- .../mimoto/dto/openid/presentation/Format.java | 14 -------------- .../openid/presentation/InputDescriptorDTO.java | 5 ++++- .../mimoto/dto/openid/presentation/LDPVc.java | 16 ---------------- .../service/impl/PresentationServiceImpl.java | 11 ++++------- .../java/io/mosip/mimoto/util/TestUtilities.java | 4 ++-- 5 files changed, 10 insertions(+), 40 deletions(-) delete mode 100644 src/main/java/io/mosip/mimoto/dto/openid/presentation/Format.java delete mode 100644 src/main/java/io/mosip/mimoto/dto/openid/presentation/LDPVc.java diff --git a/src/main/java/io/mosip/mimoto/dto/openid/presentation/Format.java b/src/main/java/io/mosip/mimoto/dto/openid/presentation/Format.java deleted file mode 100644 index 0da11a35a..000000000 --- a/src/main/java/io/mosip/mimoto/dto/openid/presentation/Format.java +++ /dev/null @@ -1,14 +0,0 @@ -package io.mosip.mimoto.dto.openid.presentation; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -@AllArgsConstructor -@Builder -public class Format { - LDPVc ldpVc; -} diff --git a/src/main/java/io/mosip/mimoto/dto/openid/presentation/InputDescriptorDTO.java b/src/main/java/io/mosip/mimoto/dto/openid/presentation/InputDescriptorDTO.java index d06d8423b..b01c11d1f 100644 --- a/src/main/java/io/mosip/mimoto/dto/openid/presentation/InputDescriptorDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/openid/presentation/InputDescriptorDTO.java @@ -5,12 +5,15 @@ import lombok.Data; import lombok.NoArgsConstructor; +import java.util.List; +import java.util.Map; + @Data @NoArgsConstructor @AllArgsConstructor @Builder public class InputDescriptorDTO { String id; - Format format; + Map>> format; ConstraintsDTO constraints; } diff --git a/src/main/java/io/mosip/mimoto/dto/openid/presentation/LDPVc.java b/src/main/java/io/mosip/mimoto/dto/openid/presentation/LDPVc.java deleted file mode 100644 index 08952770f..000000000 --- a/src/main/java/io/mosip/mimoto/dto/openid/presentation/LDPVc.java +++ /dev/null @@ -1,16 +0,0 @@ -package io.mosip.mimoto.dto.openid.presentation; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; - -@Data -@NoArgsConstructor -@AllArgsConstructor -@Builder -public class LDPVc { - List proofTypes; -} diff --git a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java index 02532eae0..5603b62d0 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java @@ -20,10 +20,7 @@ import java.io.IOException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; -import java.util.Base64; -import java.util.Collections; -import java.util.List; -import java.util.UUID; +import java.util.*; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; @@ -76,7 +73,7 @@ public String authorizePresentation(PresentationRequestDTO presentationRequestDT .stream() .findFirst() .map(inputDescriptorDTO -> { - boolean matchingProofTypes = inputDescriptorDTO.getFormat().getLdpVc().getProofTypes() + boolean matchingProofTypes = inputDescriptorDTO.getFormat().get("ldpVc").get("proofTypes") .stream() .anyMatch(proofType -> vcCredentialResponse.getCredential().getProof().getType().equals(proofType)); if (matchingProofTypes) { @@ -131,8 +128,8 @@ PresentationDefinitionDTO constructPresentationDefinition(VCCredentialResponse v FilterDTO filterDTO = FilterDTO.builder().type("String").pattern(vcCredentialResponse.getCredential().getType().getLast()).build(); FieldDTO fieldDTO = FieldDTO.builder().path(new String[]{"$.type"}).filter(filterDTO).build(); ConstraintsDTO constraintsDTO = ConstraintsDTO.builder().fields(new FieldDTO[]{fieldDTO}).build(); - LDPVc ldpVc = LDPVc.builder().proofTypes(Collections.singletonList(vcCredentialResponse.getCredential().getProof().getType())).build(); - Format format = Format.builder().ldpVc(ldpVc).build(); + Map> proofTypes = Map.of("proofTypes", Collections.singletonList(vcCredentialResponse.getCredential().getProof().getType())); + Map>> format = Map.of("ldpVc", proofTypes ); InputDescriptorDTO inputDescriptorDTO = InputDescriptorDTO.builder() .id(UUID.randomUUID().toString()) .constraints(constraintsDTO) diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index a88ae6195..207d74426 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -155,8 +155,8 @@ public static PresentationDefinitionDTO getPresentationDefinitionDTO(){ FilterDTO filterDTO = FilterDTO.builder().type("String").pattern("test-credential").build(); FieldDTO fieldDTO = FieldDTO.builder().path(new String[]{"$.type"}).filter(filterDTO).build(); ConstraintsDTO constraintsDTO = ConstraintsDTO.builder().fields(new FieldDTO[]{fieldDTO}).build(); - LDPVc ldpVc = LDPVc.builder().proofTypes(Collections.singletonList("Ed25519Signature2020")).build(); - Format format = Format.builder().ldpVc(ldpVc).build(); + Map> proofTypes = Map.of("proofTypes", Collections.singletonList("Ed25519Signature2020")); + Map>> format = Map.of("ldpVc", proofTypes ); InputDescriptorDTO inputDescriptorDTO = InputDescriptorDTO.builder().id("test-input-id").format(format).constraints(constraintsDTO).build(); return PresentationDefinitionDTO.builder() From 8ab6c647c33cc37345b5887e594765bdf50b19a4 Mon Sep 17 00:00:00 2001 From: Vijay <94220135+vijay151096@users.noreply.github.com> Date: Tue, 20 Aug 2024 11:28:03 +0530 Subject: [PATCH 216/860] [INJIWEB-639] : address PR comments Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- .../config/mimoto-issuers-config.json | 38 +++++++++---------- .../controller/PresentationController.java | 8 +++- .../presentation/PresentationRequestDTO.java | 2 +- .../service/impl/DataShareServiceImpl.java | 1 + .../service/impl/PresentationServiceImpl.java | 11 +----- .../resources/application-local.properties | 2 +- .../service/PresentationServiceTest.java | 4 -- .../io/mosip/mimoto/util/TestUtilities.java | 2 +- 8 files changed, 32 insertions(+), 36 deletions(-) diff --git a/docker-compose/config/mimoto-issuers-config.json b/docker-compose/config/mimoto-issuers-config.json index 9c87da474..958d68ad5 100644 --- a/docker-compose/config/mimoto-issuers-config.json +++ b/docker-compose/config/mimoto-issuers-config.json @@ -7,7 +7,7 @@ { "name": "National Identity Department", "logo": { - "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", + "url": "https://api.collab.mosip.net/inji/mosip-logo.png", "alt_text": "mosip-logo" }, "title": "National Identity Department", @@ -17,7 +17,7 @@ { "name": "دائرة الهوية الوطنية", "logo": { - "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", + "url": "https://api.collab.mosip.net/inji/mosip-logo.png", "alt_text": "شعار موسيب" }, "title": "دائرة الهوية الوطنية", @@ -27,7 +27,7 @@ { "name": "राष्ट्रीय पहचान विभाग", "logo": { - "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", + "url": "https://api.collab.mosip.net/inji/mosip-logo.png", "alt_text": "मोसिप लोगो" }, "title": "राष्ट्रीय पहचान विभाग", @@ -37,7 +37,7 @@ { "name": "ರಾಷ್ಟ್ರೀಯ ಗುರುತಿನ ಇಲಾಖೆ", "logo": { - "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", + "url": "https://api.collab.mosip.net/inji/mosip-logo.png", "alt_text": "mosip ಲೋಗೋ" }, "title": "ರಾಷ್ಟ್ರೀಯ ಗುರುತಿನ ಇಲಾಖೆ", @@ -47,7 +47,7 @@ { "name": "தேசிய அடையாளத் துறை", "logo": { - "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", + "url": "https://api.collab.mosip.net/inji/mosip-logo.png", "alt_text": "mosip லோகோ" }, "title": "தேசிய அடையாளத் துறை", @@ -57,7 +57,7 @@ { "name": "National Identity Department", "logo": { - "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", + "url": "https://api.collab.mosip.net/inji/mosip-logo.png", "alt_text": "logo ng mosip" }, "title": "National Identity Department", @@ -67,13 +67,13 @@ ], "client_id": "XusU7P1y10lMr9NA1qnrny_fqynODwV4SCvWPP8cfdY", "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", - "token_endpoint": "https://api.dev1.mosip.net/v1/mimoto/get-token/Mosip", - "authorization_audience": "https://esignet-insurance.dev1.mosip.net/v1/esignet/oauth/v2/token", - "proxy_token_endpoint": "https://esignet-mosipid.dev1.mosip.net/v1/esignet/oauth/v2/token", + "token_endpoint": "https://api.collab.mosip.net/v1/mimoto/get-token/Mosip", + "authorization_audience": "https://esignet-insurance.collab.mosip.net/v1/esignet/oauth/v2/token", + "proxy_token_endpoint": "https://esignet-mosipid.collab.mosip.net/v1/esignet/oauth/v2/token", "client_alias": "mpartner-default-test-mosipid", "qr_code_type": "OVPRequest", "enabled": "true", - ".well-known": "https://injicertify-mosipid.dev1.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer" + ".well-known": "https://injicertify-mosipid.collab.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer" }, { "credential_issuer": "StayProtected", @@ -92,13 +92,13 @@ ], "client_id": "esignet-sunbird-partner", "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", - "token_endpoint": "https://api.dev1.mosip.net/v1/mimoto/get-token/StayProtected", - "authorization_audience": "https://esignet-insurance.dev1.mosip.net/v1/esignet/oauth/v2/token", - "proxy_token_endpoint": "https://esignet-insurance.dev1.mosip.net/v1/esignet/oauth/v2/token", + "token_endpoint": "https://api.collab.mosip.net/v1/mimoto/get-token/StayProtected", + "authorization_audience": "https://esignet-insurance.collab.mosip.net/v1/esignet/oauth/v2/token", + "proxy_token_endpoint": "https://esignet-insurance.collab.mosip.net/v1/esignet/oauth/v2/token", "client_alias": "esignet-sunbird-partner", "qr_code_type": "OVPRequest", "enabled": "true", - ".well-known": "https://injicertify-insurance.dev1.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer" + ".well-known": "https://injicertify-insurance.collab.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer" }, { "credential_issuer": "Mock", @@ -107,7 +107,7 @@ { "name": "Mock Identity", "logo": { - "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", + "url": "https://api.collab.mosip.net/inji/mosip-logo.png", "alt_text": "mosip-logo" }, "title": "Mock Identity", @@ -117,13 +117,13 @@ ], "client_id": "mpartner-mock-testing", "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", - "token_endpoint": "https://api.dev1.mosip.net/v1/mimoto/get-token/Mock", - "authorization_audience": "https://esignet-insurance.dev1.mosip.net/v1/esignet/oauth/v2/token", - "proxy_token_endpoint": "https://esignet-mock.dev1.mosip.net/v1/esignet/oauth/v2/token", + "token_endpoint": "https://api.collab.mosip.net/v1/mimoto/get-token/Mock", + "authorization_audience": "https://esignet-insurance.collab.mosip.net/v1/esignet/oauth/v2/token", + "proxy_token_endpoint": "https://esignet-mock.collab.mosip.net/v1/esignet/oauth/v2/token", "client_alias": "mpartner-mock-testing", "qr_code_type": "OVPRequest", "enabled": "true", - ".well-known": "https://injicertify-mock.dev1.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer" + ".well-known": "https://injicertify-mock.collab.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer" } ] } diff --git a/src/main/java/io/mosip/mimoto/controller/PresentationController.java b/src/main/java/io/mosip/mimoto/controller/PresentationController.java index 91e389631..614eb2327 100644 --- a/src/main/java/io/mosip/mimoto/controller/PresentationController.java +++ b/src/main/java/io/mosip/mimoto/controller/PresentationController.java @@ -1,5 +1,7 @@ package io.mosip.mimoto.controller; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.dto.openid.presentation.PresentationDefinitionDTO; import io.mosip.mimoto.dto.openid.presentation.PresentationRequestDTO; import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.exception.InvalidCredentialResourceException; @@ -33,6 +35,9 @@ public class PresentationController { @Value("${mosip.inji.web.redirect.url}") String injiWebRedirectUrl; + @Autowired + ObjectMapper objectMapper; + @GetMapping("/authorize") public void performAuthorization(HttpServletResponse response, @RequestParam("response_type") String responseType, @@ -42,10 +47,11 @@ public void performAuthorization(HttpServletResponse response, @RequestParam("redirect_uri") String redirectUri ) throws IOException { try { logger.info("Started Presentation Authorization in the controller."); + PresentationDefinitionDTO presentationDefinitionDTO = objectMapper.readValue(presentationDefinition, PresentationDefinitionDTO.class); PresentationRequestDTO presentationRequestDTO = PresentationRequestDTO.builder() .responseType(responseType) .resource(resource) - .presentationDefinition(presentationDefinition) + .presentationDefinition(presentationDefinitionDTO) .clientId(clientId) .redirectUri(redirectUri).build(); String redirectString = presentationService.authorizePresentation(presentationRequestDTO); diff --git a/src/main/java/io/mosip/mimoto/dto/openid/presentation/PresentationRequestDTO.java b/src/main/java/io/mosip/mimoto/dto/openid/presentation/PresentationRequestDTO.java index 743e69a88..0cddb8c4d 100644 --- a/src/main/java/io/mosip/mimoto/dto/openid/presentation/PresentationRequestDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/openid/presentation/PresentationRequestDTO.java @@ -16,7 +16,7 @@ public class PresentationRequestDTO { String responseType; String resource; @JsonProperty("presentation_definition") - String presentationDefinition; + PresentationDefinitionDTO presentationDefinition; @JsonProperty("client_id") String clientId; @JsonProperty("redirect_uri") diff --git a/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java index 308e5faba..9fe240ea8 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java @@ -69,6 +69,7 @@ public String getFilename() { HttpEntity> requestEntity = new HttpEntity<>(map, headers); DataShareResponseWrapperDTO dataShareResponseWrapperDTO = pushCredentialIntoDataShare(requestEntity); + logger.info("Data pushed into DataShare -> " + dataShareResponseWrapperDTO); return dataShareResponseWrapperDTO.getDataShare().getUrl(); } diff --git a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java index 5603b62d0..d5c4b1170 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java @@ -56,15 +56,8 @@ public String authorizePresentation(PresentationRequestDTO presentationRequestDT verifierService.validateVerifier(presentationRequestDTO); VCCredentialResponse vcCredentialResponse = dataShareService.downloadCredentialFromDataShare(presentationRequestDTO); - PresentationDefinitionDTO presentationDefinitionDTO; - try { - logger.info("Started the Mapping Presentation Definition " + presentationRequestDTO.getPresentationDefinition()); - presentationDefinitionDTO = objectMapper.readValue(presentationRequestDTO.getPresentationDefinition(), PresentationDefinitionDTO.class); - logger.info("Completed the Mapping Presentation Definition " + presentationDefinitionDTO); - if (presentationDefinitionDTO == null) { - throw new VPNotCreatedException(ErrorConstants.INVALID_REQUEST.getErrorMessage()); - } - } catch (IOException ioException) { + PresentationDefinitionDTO presentationDefinitionDTO = presentationRequestDTO.getPresentationDefinition(); + if (presentationDefinitionDTO == null) { throw new VPNotCreatedException(ErrorConstants.INVALID_REQUEST.getErrorMessage()); } diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 42aac0cdf..9e61be872 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -224,7 +224,7 @@ mosip.inji.ovp.redirect.url.pattern=%s#vp_token=%s&presentation_submission=%s mosip.inji.ovp.error.redirect.url.pattern=%s?error=%s&error_description=%s #DataShare Config -mosip.data.share.host=https://datashare-inji.dev1.mosip.net +mosip.data.share.host=http://injiweb.datashare-inji mosip.data.share.create.url=${mosip.data.share.host}/v1/datashare/create/static-policyid/static-subscriberid mosip.data.share.create.retry.count=3 mosip.data.share.get.url.pattern=http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/* diff --git a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java index bde08733a..17262ba13 100644 --- a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java @@ -41,13 +41,9 @@ public class PresentationServiceTest { @Before public void setup() throws JsonProcessingException { - PresentationDefinitionDTO presentationDefinitionDTO = TestUtilities.getPresentationDefinitionDTO(); ReflectionTestUtils.setField(presentationService, "injiOvpRedirectURLPattern", "%s#vp_token=%s&presentation_submission=%s"); ReflectionTestUtils.setField(presentationService, "dataShareUrl", "test_resource"); ReflectionTestUtils.setField(presentationService, "maximumResponseHeaderSize", 65536); - - String presentationDefitionString = TestUtilities.getObjectAsString(presentationDefinitionDTO); - when(objectMapper.readValue(eq(presentationDefitionString), eq(PresentationDefinitionDTO.class))).thenReturn(presentationDefinitionDTO); when(objectMapper.writeValueAsString(any())).thenReturn("test-data"); } @Test(expected = InvalidVerifierException.class) diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index 207d74426..74b9730f7 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -106,7 +106,7 @@ public static IssuerDTO getIssuerConfigDTO(String issuerName, List nullF public static PresentationRequestDTO getPresentationRequestDTO(){ return PresentationRequestDTO.builder() - .presentationDefinition("{\"id\":\"test-id\",\"input_descriptors\":[{\"id\":\"test-input-id\",\"format\":{\"ldpVc\":{\"proofTypes\":[\"Ed25519Signature2020\"]}},\"constraints\":{\"fields\":[{\"path\":[\"$.type\"],\"filter\":{\"type\":\"String\",\"pattern\":\"test-credential\"}}]}}]}") + .presentationDefinition(getPresentationDefinitionDTO()) .clientId("test_client_id") .resource("http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/test") .responseType("test_response_type") From d1160e536d6989e95edc8ca02d40d39dec6433e2 Mon Sep 17 00:00:00 2001 From: Vijay <94220135+vijay151096@users.noreply.github.com> Date: Wed, 21 Aug 2024 11:29:04 +0530 Subject: [PATCH 217/860] [INJIWEB-639] : address verifier redirect validation Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- .../mosip/mimoto/controller/PresentationController.java | 5 +++++ .../java/io/mosip/mimoto/service/VerifierService.java | 3 ++- .../mimoto/service/impl/PresentationServiceImpl.java | 8 +------- .../mosip/mimoto/service/impl/VerifierServiceImpl.java | 9 ++++----- src/main/resources/application-local.properties | 2 +- .../io/mosip/mimoto/service/PresentationServiceTest.java | 9 --------- .../io/mosip/mimoto/service/VerifierServiceTest.java | 6 +++--- 7 files changed, 16 insertions(+), 26 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/PresentationController.java b/src/main/java/io/mosip/mimoto/controller/PresentationController.java index 614eb2327..4d47a442e 100644 --- a/src/main/java/io/mosip/mimoto/controller/PresentationController.java +++ b/src/main/java/io/mosip/mimoto/controller/PresentationController.java @@ -8,6 +8,7 @@ import io.mosip.mimoto.exception.InvalidVerifierException; import io.mosip.mimoto.exception.VPNotCreatedException; import io.mosip.mimoto.service.PresentationService; +import io.mosip.mimoto.service.VerifierService; import jakarta.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -35,6 +36,9 @@ public class PresentationController { @Value("${mosip.inji.web.redirect.url}") String injiWebRedirectUrl; + @Autowired + VerifierService verifierService; + @Autowired ObjectMapper objectMapper; @@ -47,6 +51,7 @@ public void performAuthorization(HttpServletResponse response, @RequestParam("redirect_uri") String redirectUri ) throws IOException { try { logger.info("Started Presentation Authorization in the controller."); + verifierService.validateVerifier(clientId, redirectUri); PresentationDefinitionDTO presentationDefinitionDTO = objectMapper.readValue(presentationDefinition, PresentationDefinitionDTO.class); PresentationRequestDTO presentationRequestDTO = PresentationRequestDTO.builder() .responseType(responseType) diff --git a/src/main/java/io/mosip/mimoto/service/VerifierService.java b/src/main/java/io/mosip/mimoto/service/VerifierService.java index 87f566d9b..4fb506651 100644 --- a/src/main/java/io/mosip/mimoto/service/VerifierService.java +++ b/src/main/java/io/mosip/mimoto/service/VerifierService.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.service; +import com.fasterxml.jackson.core.JsonProcessingException; import io.mosip.mimoto.dto.openid.VerifierDTO; import io.mosip.mimoto.dto.openid.presentation.PresentationRequestDTO; import io.mosip.mimoto.exception.ApiNotAccessibleException; @@ -9,5 +10,5 @@ public interface VerifierService { Optional getVerifierByClientId(String clientId) throws ApiNotAccessibleException, IOException; - void validateVerifier(PresentationRequestDTO presentationRequestDTO) throws ApiNotAccessibleException, IOException; + void validateVerifier(String clientId, String redirectUri) throws ApiNotAccessibleException, JsonProcessingException; } diff --git a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java index d5c4b1170..43537f74a 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java @@ -9,7 +9,6 @@ import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.exception.VPNotCreatedException; import io.mosip.mimoto.service.PresentationService; -import io.mosip.mimoto.service.VerifierService; import io.mosip.mimoto.util.RestApiClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -27,9 +26,6 @@ @Service public class PresentationServiceImpl implements PresentationService { - @Autowired - VerifierService verifierService; - @Autowired DataShareServiceImpl dataShareService; @@ -51,9 +47,7 @@ public class PresentationServiceImpl implements PresentationService { private final Logger logger = LoggerFactory.getLogger(PresentationServiceImpl.class); @Override - public String authorizePresentation(PresentationRequestDTO presentationRequestDTO) throws ApiNotAccessibleException, IOException { - - verifierService.validateVerifier(presentationRequestDTO); + public String authorizePresentation(PresentationRequestDTO presentationRequestDTO) throws IOException { VCCredentialResponse vcCredentialResponse = dataShareService.downloadCredentialFromDataShare(presentationRequestDTO); PresentationDefinitionDTO presentationDefinitionDTO = presentationRequestDTO.getPresentationDefinition(); diff --git a/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java index b33cc04e8..3b5493541 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java @@ -4,7 +4,6 @@ import com.fasterxml.jackson.databind.ObjectMapper; import io.mosip.mimoto.dto.openid.VerifierDTO; import io.mosip.mimoto.dto.openid.VerifiersDTO; -import io.mosip.mimoto.dto.openid.presentation.PresentationRequestDTO; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.exception.InvalidVerifierException; @@ -52,14 +51,14 @@ public Optional getVerifierByClientId(String clientId) throws ApiNo return verifiersDTO.getVerifiers().stream().filter(verifier -> verifier.getClientId().equals(clientId)).findFirst(); } @Override - public void validateVerifier(PresentationRequestDTO presentationRequestDTO) throws ApiNotAccessibleException, JsonProcessingException { + public void validateVerifier(String clientId, String redirectUri) throws ApiNotAccessibleException, JsonProcessingException { logger.info("Started the presentation Validation"); - getVerifierByClientId(presentationRequestDTO.getClientId()).ifPresentOrElse( + getVerifierByClientId(clientId).ifPresentOrElse( (verifierDTO) -> { boolean isValidVerifier = verifierDTO.getRedirectUri().stream().anyMatch(registeredRedirectUri -> urlValidator.isValid(registeredRedirectUri) && - urlValidator.isValid(presentationRequestDTO.getRedirectUri()) && - pathMatcher.match(registeredRedirectUri, presentationRequestDTO.getRedirectUri())); + urlValidator.isValid(redirectUri) && + pathMatcher.match(registeredRedirectUri, redirectUri)); if(!isValidVerifier){ throw new InvalidVerifierException( ErrorConstants.INVALID_REDIRECT_URI.getErrorCode(), diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 9e61be872..8d56145c5 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -214,7 +214,7 @@ mosip.oidc.p12.path=certs/ #Inji Web Config mosip.inji.web.host=https://injiweb.dev1.mosip.net mosip.inji.web.redirect.url=${mosip.inji.web.host}/authorize -mosip.inji.qr.data.size.limit=10000 +mosip.inji.qr.data.size.limit=2000 mosip.inji.qr.code.height=650 mosip.inji.qr.code.width=650 diff --git a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java index 17262ba13..4ad22d40a 100644 --- a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java @@ -46,20 +46,12 @@ public void setup() throws JsonProcessingException { ReflectionTestUtils.setField(presentationService, "maximumResponseHeaderSize", 65536); when(objectMapper.writeValueAsString(any())).thenReturn("test-data"); } - @Test(expected = InvalidVerifierException.class) - public void throwInvalidVerifierExceptionWhenClientIdPassedIsIncorrect() throws ApiNotAccessibleException, IOException { - PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); - doThrow(InvalidVerifierException.class).when(verifierService).validateVerifier(presentationRequestDTO); - presentationService.authorizePresentation(TestUtilities.getPresentationRequestDTO()); - } - @Test public void credentialProofMatchingWithVPRequest() throws Exception { VCCredentialResponse vcCredentialResponse = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); - doNothing().when(verifierService).validateVerifier(eq(presentationRequestDTO)); when(dataShareService.downloadCredentialFromDataShare(eq(presentationRequestDTO))).thenReturn(vcCredentialResponse); String actualRedirectUrl = presentationService.authorizePresentation(TestUtilities.getPresentationRequestDTO()); @@ -73,7 +65,6 @@ public void credentialProofMismatchWithVPRequest() throws ApiNotAccessibleExcept VCCredentialResponse vcCredentialResponse = TestUtilities.getVCCredentialResponseDTO("RSASignature2020"); PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); - doNothing().when(verifierService).validateVerifier(eq(presentationRequestDTO)); when(dataShareService.downloadCredentialFromDataShare(eq(presentationRequestDTO))).thenReturn(vcCredentialResponse); presentationService.authorizePresentation(TestUtilities.getPresentationRequestDTO()); diff --git a/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java b/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java index a871669dd..c12386f80 100644 --- a/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java @@ -58,18 +58,18 @@ public void getNullWhenInvalidClientIdIsPassed() throws ApiNotAccessibleExceptio @Test public void validateTrustedVerifiersAndDoNothing() throws ApiNotAccessibleException, IOException { PresentationRequestDTO presentationRequestDTO = PresentationRequestDTO.builder().clientId("test-clientId").redirectUri("https://test-redirectUri").build(); - verifiersService.validateVerifier(presentationRequestDTO); + verifiersService.validateVerifier(presentationRequestDTO.getClientId(), presentationRequestDTO.getRedirectUri()); } @Test(expected = InvalidVerifierException.class) public void validateTrustedVerifiersAndThrowInvalidVerifierExceptionWhenClientIdIsIncorrect() throws ApiNotAccessibleException, IOException { PresentationRequestDTO presentationRequestDTO = PresentationRequestDTO.builder().clientId("test-clientId2").redirectUri("https://test-redirectUri").build(); - verifiersService.validateVerifier(presentationRequestDTO); + verifiersService.validateVerifier(presentationRequestDTO.getClientId(), presentationRequestDTO.getRedirectUri()); } @Test(expected = InvalidVerifierException.class) public void validateTrustedVerifiersAndThrowInvalidVerifiersExceptionWhenRedirectUriIsIncorrect() throws ApiNotAccessibleException, IOException { PresentationRequestDTO presentationRequestDTO = PresentationRequestDTO.builder().clientId("test-clientId2").redirectUri("https://test-redirectUri").build(); - verifiersService.validateVerifier(presentationRequestDTO); + verifiersService.validateVerifier(presentationRequestDTO.getClientId(), presentationRequestDTO.getRedirectUri()); } } From 3a1d9f7c550f85172cd335d4318684aa901151ab Mon Sep 17 00:00:00 2001 From: Vijay <94220135+vijay151096@users.noreply.github.com> Date: Wed, 21 Aug 2024 12:34:13 +0530 Subject: [PATCH 218/860] [INJIWEB-639] : address verifier redirect validation Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- .../io/mosip/mimoto/service/impl/CredentialServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java index bbc8acf6b..a65f8ce26 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java @@ -88,7 +88,7 @@ public class CredentialServiceImpl implements CredentialService { @Value("${mosip.inji.qr.code.width:500}") Integer qrCodeWidth; - @Value("${mosip.inji.qr.data.size.limit:10000}") + @Value("${mosip.inji.qr.data.size.limit:2000}") Integer allowedQRDataSizeLimit; @Autowired From cc56d553e991f932ae01ccfc7b43b367c0e59689 Mon Sep 17 00:00:00 2001 From: Vijay <94220135+vijay151096@users.noreply.github.com> Date: Wed, 21 Aug 2024 13:13:09 +0530 Subject: [PATCH 219/860] [INJIWEB-639] : readd ununsed method Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- .../io/mosip/mimoto/util/TestUtilities.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index 74b9730f7..99189342c 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -104,6 +104,41 @@ public static IssuerDTO getIssuerConfigDTO(String issuerName, List nullF return issuer; } + public static String getExpectedWellKnownJson() { + return "{" + + "\"credential_issuer\": \"Issuer1\"," + + "\"credential_endpoint\": \"/credential_endpoint\"," + + "\"credential_configurations_supported\": {" + + "\"CredentialType1\": {" + + "\"format\": \"ldp_vc\"," + + "\"scope\": \"CredentialType1_vc_ldp\"," + + "\"display\": [{" + + "\"logo\": {" + + "\"url\": \"/logo\"," + + "\"alt_text\": \"logo-url\"" + + "}," + + "\"name\": \"CredentialType1\"," + + "\"locale\": \"en\"," + + "\"text_color\": \"#FFFFFF\"," + + "\"background_color\": \"#B34622\"" + + "}]," + + "\"proof_types_supported\": {}," + + "\"credential_definition\": {" + + "\"type\": [\"VerifiableCredential\", \"CredentialType1\"]," + + "\"credentialSubject\": {" + + "\"name\": {" + + "\"display\": [{" + + "\"name\": \"Given Name\"," + + "\"locale\": \"en\"" + + "}]" + + "}" + + "}" + + "}" + + "}" + + "}" + + "}"; + } + public static PresentationRequestDTO getPresentationRequestDTO(){ return PresentationRequestDTO.builder() .presentationDefinition(getPresentationDefinitionDTO()) From b68ee5de4a74529c2eb8b81133b34bdcd2e768c9 Mon Sep 17 00:00:00 2001 From: shubham-technoforte Date: Thu, 22 Aug 2024 13:40:29 +0530 Subject: [PATCH 220/860] [MOSIP-34934] Updated Values.yaml Signed-off-by: shubham-technoforte --- helm/inji-config-server/values.yaml | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/helm/inji-config-server/values.yaml b/helm/inji-config-server/values.yaml index 8b71e907d..3ee9b4811 100755 --- a/helm/inji-config-server/values.yaml +++ b/helm/inji-config-server/values.yaml @@ -103,6 +103,18 @@ envVariables: - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_ESIGNET_INSURANCE_HOST valueFrom: configMapKeyRef: - key: mosip-esignet-insurance-host - name: global + key: mosip-esignet-insurance-host + name: global enabled: true + + - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_INJI_DATASHARE_HOST + valueFrom: + configMapKeyRef: + key: mosip-inji-datashare-host + name: global + + - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_INJIWEB_HOST + valueFrom: + configMapKeyRef: + key: mosip-injiweb-host + name: global From 3ef3e1c07a3f7c2e6b96cb1bf16e27f7680d12ca Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Fri, 23 Aug 2024 11:26:56 +0530 Subject: [PATCH 221/860] INJIMOB-1834 Signed-off-by: Nandhukumar --- .../src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml b/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml index 2f2d956b2..802bc2045 100644 --- a/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml +++ b/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml @@ -12,7 +12,7 @@ GetAllIssuers: }' Mimoto_GetAllIssuers_Specific_Issuer_All_Valid_Smoke: - endPoint: /mimoto/issuers/Mosip + endPoint: /v1/mimoto/issuers/Mosip role: resident restMethod: get checkErrorsOnlyInResponse: true From 449c72875a32717d3947b9add2f353a2e751996e Mon Sep 17 00:00:00 2001 From: Nandhukumar <100744358+nandhu-kumar@users.noreply.github.com> Date: Fri, 23 Aug 2024 12:25:43 +0530 Subject: [PATCH 222/860] INJIMOB-1834 (#403) Signed-off-by: Nandhukumar --- .../src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml b/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml index 2f2d956b2..802bc2045 100644 --- a/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml +++ b/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml @@ -12,7 +12,7 @@ GetAllIssuers: }' Mimoto_GetAllIssuers_Specific_Issuer_All_Valid_Smoke: - endPoint: /mimoto/issuers/Mosip + endPoint: /v1/mimoto/issuers/Mosip role: resident restMethod: get checkErrorsOnlyInResponse: true From 382e66326baf02625d9f1db87d4c5e0fbb0996ba Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Tue, 27 Aug 2024 15:00:47 +0530 Subject: [PATCH 223/860] MOSIP-35295 Signed-off-by: Nandhukumar --- .../main/resources/config/Kernel.properties | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/apitest/src/main/resources/config/Kernel.properties b/apitest/src/main/resources/config/Kernel.properties index 34b12aae6..7f749b5f8 100644 --- a/apitest/src/main/resources/config/Kernel.properties +++ b/apitest/src/main/resources/config/Kernel.properties @@ -137,17 +137,17 @@ AuthClientID = mosip-resident-client #---------------------------------- Client Secret Keys -----------------------# #-- When test rig ran in docker, these values dervied from the environment ---# -mosip_partner_client_secret = vXS7WUyPDpfWYuoz -mosip_pms_client_secret = 5Qj8vn989OL1Vlu6 -mosip_resident_client_secret = SnZQ6nnVwN9YWvdM -mosip_idrepo_client_secret = AeM2TwFuuZygCuvO -mosip_reg_client_secret = DLXygc82rkAkjrwV -mosip_admin_client_secret = Styop9nqkshXMTgj -mosip_hotlist_client_secret = TKyc4cqWymxjiLEsVydX4uME1xU3i9xl -mosip_regproc_client_secret = eyeXdyhO0u2ETibw -mpartner_default_mobile_secret = iCkj8BRZU6hP6MAN -mosip_testrig_client_secret = AonuXbikoWmHP5ug -AuthClientSecret = SnZQ6nnVwN9YWvdM +mosip_partner_client_secret = +mosip_pms_client_secret = +mosip_resident_client_secret = +mosip_idrepo_client_secret = +mosip_reg_client_secret = +mosip_admin_client_secret = +mosip_hotlist_client_secret = +mosip_regproc_client_secret = +mpartner_default_mobile_secret = +mosip_testrig_client_secret = +AuthClientSecret = @@ -261,7 +261,7 @@ admin_password=mosip123 admin_userName=220005 admin_zone_password=mosip123 admin_zone_userName=globaladmin - +mockNotificationChannel=email,phone #------------------------- Need to check if these are used or not ------------------------# From d2f706af671f4e36f70b13b7a939b1226d4d6e78 Mon Sep 17 00:00:00 2001 From: abhip2565 <74866247+abhip2565@users.noreply.github.com> Date: Thu, 29 Aug 2024 14:19:32 +0530 Subject: [PATCH 224/860] [INJIMOB-1854] add validation for issuer wellknown response (#407) Signed-off-by: Abhishek Paul --- .../mosip/mimoto/dto/BackgroundImageDTO.java | 4 + .../java/io/mosip/mimoto/dto/IssuerDTO.java | 1 + .../java/io/mosip/mimoto/dto/LogoDTO.java | 2 + .../CredentialDefinitionResponseDto.java | 10 +- .../mimoto/CredentialDisplayResponseDto.java | 6 +- .../CredentialIssuerDisplayResponse.java | 3 + .../CredentialIssuerWellKnownResponse.java | 16 +- .../CredentialSupportedDisplayResponse.java | 5 +- .../mimoto/CredentialsSupportedResponse.java | 20 +- .../dto/mimoto/ProofTypesSupported.java | 5 + .../InvalidWellknownResponseException.java | 17 ++ .../exception/PlatformErrorMessages.java | 3 +- .../service/impl/IssuersServiceImpl.java | 16 +- ...ntialIssuerWellknownResponseValidator.java | 21 ++ .../mimoto/service/IssuersServiceTest.java | 7 +- ...lIssuerWellknownResponseValidatorTest.java | 233 ++++++++++++++++++ .../io/mosip/mimoto/util/TestUtilities.java | 4 +- 17 files changed, 359 insertions(+), 14 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/exception/InvalidWellknownResponseException.java create mode 100644 src/main/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidator.java create mode 100644 src/test/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidatorTest.java diff --git a/src/main/java/io/mosip/mimoto/dto/BackgroundImageDTO.java b/src/main/java/io/mosip/mimoto/dto/BackgroundImageDTO.java index 7c8ad6b19..22f306bdf 100644 --- a/src/main/java/io/mosip/mimoto/dto/BackgroundImageDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/BackgroundImageDTO.java @@ -1,14 +1,18 @@ package io.mosip.mimoto.dto; import com.google.gson.annotations.Expose; +import jakarta.validation.constraints.NotBlank; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import org.hibernate.validator.constraints.URL; @Data @AllArgsConstructor @NoArgsConstructor public class BackgroundImageDTO { @Expose + @URL + @NotBlank String uri; } diff --git a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java index 992a72af6..1e0a7c711 100644 --- a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java @@ -30,6 +30,7 @@ public class IssuerDTO { @Expose @NotBlank String client_id; + @NotBlank @SerializedName(".well-known") @JsonProperty(".well-known") @Expose diff --git a/src/main/java/io/mosip/mimoto/dto/LogoDTO.java b/src/main/java/io/mosip/mimoto/dto/LogoDTO.java index 89697d796..cce525a77 100644 --- a/src/main/java/io/mosip/mimoto/dto/LogoDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/LogoDTO.java @@ -5,11 +5,13 @@ import lombok.Data; import jakarta.validation.constraints.NotBlank; +import org.hibernate.validator.constraints.URL; @Data public class LogoDTO { @Expose @NotBlank + @URL String url; @Expose @NotBlank diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDefinitionResponseDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDefinitionResponseDto.java index d71c34199..ac1bc541f 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDefinitionResponseDto.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDefinitionResponseDto.java @@ -2,6 +2,8 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.google.gson.annotations.SerializedName; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotEmpty; import lombok.Data; import java.util.List; @@ -9,11 +11,15 @@ @Data public class CredentialDefinitionResponseDto { + + @NotEmpty @SerializedName("type") @JsonProperty("type") - private List type; + private List<@NotEmpty String> type; + @NotEmpty + @Valid @SerializedName("credentialSubject") @JsonProperty("credentialSubject") - private Map credentialSubject; + private Map<@NotEmpty String, @Valid CredentialDisplayResponseDto> credentialSubject; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDisplayResponseDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDisplayResponseDto.java index 8f5ff40f1..eeec2af82 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDisplayResponseDto.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDisplayResponseDto.java @@ -2,6 +2,8 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.google.gson.annotations.SerializedName; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotEmpty; import lombok.Data; import java.util.List; @@ -9,7 +11,9 @@ @Data public class CredentialDisplayResponseDto { + @NotEmpty + @Valid @SerializedName("display") @JsonProperty("display") - private List display; + private List<@Valid CredentialIssuerDisplayResponse> display; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerDisplayResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerDisplayResponse.java index 801e5ac79..0fd6694d5 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerDisplayResponse.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerDisplayResponse.java @@ -2,15 +2,18 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.google.gson.annotations.SerializedName; +import jakarta.validation.constraints.NotBlank; import lombok.Data; @Data public class CredentialIssuerDisplayResponse { + @NotBlank @SerializedName("name") @JsonProperty("name") private String name; + @NotBlank @SerializedName("locale") @JsonProperty("locale") private String locale; diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerWellKnownResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerWellKnownResponse.java index 70d5bfc7e..17cb26ea2 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerWellKnownResponse.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerWellKnownResponse.java @@ -2,26 +2,38 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.google.gson.annotations.SerializedName; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.Pattern; import lombok.Data; +import org.hibernate.validator.constraints.URL; import java.util.List; import java.util.Map; @Data public class CredentialIssuerWellKnownResponse { + @NotBlank + @URL @SerializedName("credential_issuer") @JsonProperty("credential_issuer") private String credentialIssuer; + @NotEmpty @SerializedName("authorization_servers") @JsonProperty("authorization_servers") - private List authorizationServers; + private List<@NotBlank @URL String> authorizationServers; + @NotBlank @SerializedName("credential_endpoint") + @Pattern(regexp = "https?://.*?/credential$") @JsonProperty("credential_endpoint") private String credentialEndPoint; + @NotEmpty + @Valid @SerializedName("credential_configurations_supported") @JsonProperty("credential_configurations_supported") - private Map credentialConfigurationsSupported; + private Map<@NotBlank String, @Valid CredentialsSupportedResponse> credentialConfigurationsSupported; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialSupportedDisplayResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialSupportedDisplayResponse.java index 0dd986b6b..53d2ea5eb 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialSupportedDisplayResponse.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialSupportedDisplayResponse.java @@ -5,6 +5,7 @@ import com.google.gson.annotations.SerializedName; import io.mosip.mimoto.dto.BackgroundImageDTO; import io.mosip.mimoto.dto.LogoDTO; +import jakarta.validation.constraints.NotNull; import lombok.Data; import jakarta.validation.Valid; @@ -23,13 +24,15 @@ public class CredentialSupportedDisplayResponse { String locale; @Expose + @NotNull @Valid LogoDTO logo; @JsonProperty("background_image") @SerializedName("background_image") @Expose - @NotBlank + @Valid + @NotNull BackgroundImageDTO backgroundImage; @JsonProperty("background_color") diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java index 0e6b09189..4c87de3d9 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java @@ -2,27 +2,41 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.google.gson.annotations.SerializedName; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; import lombok.Data; import java.util.List; import java.util.Map; -import java.util.Set; @Data public class CredentialsSupportedResponse { + + @NotBlank(message = "Format must not be blank") private String format; + + @NotBlank(message = "Scope must not be blank") private String scope; + @NotEmpty(message = "Proof types supported must not be empty") + @Valid @SerializedName("proof_types_supported") @JsonProperty("proof_types_supported") - private Map proofTypesSupported; + private Map<@NotEmpty String, @Valid ProofTypesSupported> proofTypesSupported; + @Valid + @NotNull @SerializedName("credential_definition") @JsonProperty("credential_definition") private CredentialDefinitionResponseDto credentialDefinition; + @NotEmpty(message = "Display information must not be empty") + @Valid @SerializedName("display") @JsonProperty("display") - private List display; + private List<@Valid CredentialSupportedDisplayResponse> display; + private List order; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/ProofTypesSupported.java b/src/main/java/io/mosip/mimoto/dto/mimoto/ProofTypesSupported.java index 303b74973..15cfe4b46 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/ProofTypesSupported.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/ProofTypesSupported.java @@ -2,10 +2,15 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.google.gson.annotations.SerializedName; +import jakarta.validation.constraints.NotNull; +import javax.validation.constraints.NotEmpty; import java.util.List; public class ProofTypesSupported { + + @NotEmpty + @NotNull @JsonProperty("proof_signing_alg_values_supported") @SerializedName("proof_signing_alg_values_supported") private List proofSigningAlgValuesSupported; diff --git a/src/main/java/io/mosip/mimoto/exception/InvalidWellknownResponseException.java b/src/main/java/io/mosip/mimoto/exception/InvalidWellknownResponseException.java new file mode 100644 index 000000000..bbd0b9bff --- /dev/null +++ b/src/main/java/io/mosip/mimoto/exception/InvalidWellknownResponseException.java @@ -0,0 +1,17 @@ +package io.mosip.mimoto.exception; + +public class InvalidWellknownResponseException extends BaseCheckedException { + + public InvalidWellknownResponseException() { + super(PlatformErrorMessages.INVALID_CREDENTIAL_ISSUER_WELLKNOWN_RESPONSE_EXCEPTION.getCode(),PlatformErrorMessages.INVALID_CREDENTIAL_ISSUER_WELLKNOWN_RESPONSE_EXCEPTION.getMessage()); + } + + public InvalidWellknownResponseException(String message) { + super(PlatformErrorMessages.INVALID_CREDENTIAL_ISSUER_WELLKNOWN_RESPONSE_EXCEPTION.getCode(),PlatformErrorMessages.INVALID_CREDENTIAL_ISSUER_WELLKNOWN_RESPONSE_EXCEPTION.getMessage()+"\n"+message); + + } + + public InvalidWellknownResponseException(String message, Throwable cause) { + super(PlatformErrorMessages.INVALID_CREDENTIAL_ISSUER_WELLKNOWN_RESPONSE_EXCEPTION.getCode(),message, cause); + } +} diff --git a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java index 38f2d837c..cfaaa8136 100644 --- a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java +++ b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java @@ -86,7 +86,8 @@ public enum PlatformErrorMessages { MIMOTO_ISSUER_ONBOARDING_EXCEPTION(PlatformConstants.PREFIX + "037", "Issuers Onboarding exception occurred "), INVALID_VERIFIER_ID_EXCEPTION(PlatformConstants.PREFIX + "038", "Invalid Verifier ClientId"), INVALID_VERIFIER_REDIRECT_URI_EXCEPTION(PlatformConstants.PREFIX + "039", "Invalid Redirect Uri"), - INVALID_CREDENTIAL_RESOURCE_URI_EXCEPTION(PlatformConstants.PREFIX + "040", "The Credential Resource is Invalid"); + INVALID_CREDENTIAL_RESOURCE_URI_EXCEPTION(PlatformConstants.PREFIX + "040", "The Credential Resource is Invalid"), + INVALID_CREDENTIAL_ISSUER_WELLKNOWN_RESPONSE_EXCEPTION(PlatformConstants.PREFIX + "041", "Invalid Wellknown from Issuer"); /** The error message. */ private final String errorMessage; diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index 0d98bb7fb..f23329dfd 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -12,10 +12,14 @@ import io.mosip.mimoto.dto.mimoto.CredentialsSupportedResponse; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.InvalidIssuerIdException; +import io.mosip.mimoto.exception.InvalidWellknownResponseException; import io.mosip.mimoto.service.IssuersService; +import io.mosip.mimoto.util.CredentialIssuerWellknownResponseValidator; import io.mosip.mimoto.util.LoggerUtil; import io.mosip.mimoto.util.RestApiClient; import io.mosip.mimoto.util.Utilities; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Validator; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -23,6 +27,7 @@ import java.io.IOException; import java.util.List; import java.util.Optional; +import java.util.Set; import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; @@ -34,6 +39,9 @@ public class IssuersServiceImpl implements IssuersService { @Autowired private Utilities utilities; + @Autowired + private Validator validator; + @Autowired private RestApiClient restApiClient; @@ -107,8 +115,10 @@ public CredentialIssuerWellKnownResponse getIssuerWellknown(String issuerId) thr .map(issuerDTO -> { String wellknownResponse = restApiClient.getApi(issuerDTO.getWellKnownEndpoint(), String.class); try { - return objectMapper.readValue(wellknownResponse,CredentialIssuerWellKnownResponse.class); - } catch (JsonProcessingException e) { + CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = objectMapper.readValue(wellknownResponse, CredentialIssuerWellKnownResponse.class); + new CredentialIssuerWellknownResponseValidator().validate(credentialIssuerWellKnownResponse, validator); + return credentialIssuerWellKnownResponse; + } catch (JsonProcessingException | ApiNotAccessibleException | InvalidWellknownResponseException e) { throw new RuntimeException(e); } }) @@ -124,6 +134,8 @@ public CredentialsSupportedResponse getIssuerWellknownForCredentialType(String i } return credentialsSupportedResponse; } + + } diff --git a/src/main/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidator.java b/src/main/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidator.java new file mode 100644 index 000000000..db7cdfc29 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidator.java @@ -0,0 +1,21 @@ +package io.mosip.mimoto.util; + +import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.InvalidWellknownResponseException; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Validator; + +import java.util.Set; +public class CredentialIssuerWellknownResponseValidator { + public void validate(CredentialIssuerWellKnownResponse response, Validator validator) throws ApiNotAccessibleException, InvalidWellknownResponseException { + Set> violations = validator.validate(response); + if (!violations.isEmpty()) { + StringBuilder sb = new StringBuilder("Validation failed:"); + for (ConstraintViolation violation : violations) { + sb.append("\n").append(violation.getPropertyPath()).append(": ").append(violation.getMessage()); + } + throw new InvalidWellknownResponseException(sb.toString()); + } + } +} diff --git a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java index 72027c058..dd71cb4ed 100644 --- a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java @@ -11,6 +11,7 @@ import io.mosip.mimoto.service.impl.IssuersServiceImpl; import io.mosip.mimoto.util.RestApiClient; import io.mosip.mimoto.util.Utilities; +import jakarta.validation.Validator; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -18,7 +19,6 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; -import org.springframework.beans.factory.annotation.Autowired; import java.io.IOException; import java.util.ArrayList; @@ -28,6 +28,7 @@ import static io.mosip.mimoto.util.TestUtilities.*; import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -37,6 +38,9 @@ public class IssuersServiceTest { @InjectMocks IssuersServiceImpl issuersService = new IssuersServiceImpl(); + @Mock + Validator validator; + @InjectMocks CredentialServiceImpl credentialService = new CredentialServiceImpl(); @@ -101,6 +105,7 @@ public void shouldReturnIssuerWellknownForTheIssuerIdIfExist() throws ApiNotAcce Mockito.when(restApiClient.getApi(wellKnownUrl , String.class)) .thenReturn(getExpectedWellKnownJson()); Mockito.when(objectMapper.readValue(getExpectedWellKnownJson(), CredentialIssuerWellKnownResponse.class)).thenReturn(expextedCredentialIssuerWellKnownResponse); + Mockito.when(validator.validate(any())).thenReturn(Collections.emptySet()); CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse=issuersService.getIssuerWellknown(issuerId); assertEquals(expextedCredentialIssuerWellKnownResponse,credentialIssuerWellKnownResponse); diff --git a/src/test/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidatorTest.java b/src/test/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidatorTest.java new file mode 100644 index 000000000..e28a67053 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidatorTest.java @@ -0,0 +1,233 @@ +package io.mosip.mimoto.util; + +import io.mosip.mimoto.dto.BackgroundImageDTO; +import io.mosip.mimoto.dto.mimoto.CredentialDefinitionResponseDto; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; +import io.mosip.mimoto.dto.mimoto.CredentialSupportedDisplayResponse; +import io.mosip.mimoto.dto.mimoto.CredentialsSupportedResponse; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.InvalidWellknownResponseException; +import jakarta.validation.Validation; +import jakarta.validation.Validator; +import jakarta.validation.ValidatorFactory; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import static io.mosip.mimoto.util.TestUtilities.getCredentialIssuerWellKnownResponseDto; +import static io.mosip.mimoto.util.TestUtilities.getCredentialSupportedResponse; +import static org.junit.Assert.assertThrows; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class CredentialIssuerWellknownResponseValidatorTest { + + @Autowired + private Validator validator; + + @BeforeEach + void setUp() { + ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); + validator = factory.getValidator(); + } + + @Test + public void shouldThrowExceptionWhenCredentialIssuerIsMissingInCredentialIssuerWellknownResponse() throws ApiNotAccessibleException { + CredentialIssuerWellKnownResponse response = getCredentialIssuerWellKnownResponseDto("Issuer1", + Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); + + response.setCredentialIssuer(""); + response.setCredentialEndPoint("http://example.com"); + + CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); + InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> + credentialIssuerWellknownResponseValidator.validate(response, validator)); + assertEquals("RESIDENT-APP-041", invalidWellknownResponseException.getErrorCode()); + assertTrue(invalidWellknownResponseException.getMessage().contains("credentialIssuer: must not be blank"), "Exception message should indicate the missing 'credentialIssuer'"); + } + + @Test + public void shouldThrowExceptionWhenCredentialEndpointIsIncorrectInCredentialIssuerWellknownResponse() throws ApiNotAccessibleException { + CredentialIssuerWellKnownResponse response = getCredentialIssuerWellKnownResponseDto("Issuer1", + Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); + + response.setCredentialEndPoint("http://example.com"); // Incorrect because it does not end with "/credential" + + CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); + InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> + credentialIssuerWellknownResponseValidator.validate(response, validator)); + assertEquals("RESIDENT-APP-041", invalidWellknownResponseException.getErrorCode()); + assertTrue(invalidWellknownResponseException.getMessage().contains("credentialEndPoint: must match \"https?://.*?/credential$\""), "Exception message should indicate the incorrect 'credentialEndpoint'"); + } + + @Test + public void shouldThrowExceptionWhenAuthorizationServersIsEmpty() { + CredentialIssuerWellKnownResponse response = getCredentialIssuerWellKnownResponseDto("Issuer1", + Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); + + response.setCredentialIssuer("https://valid.url/credential"); + response.setAuthorizationServers(Collections.emptyList()); // Invalid empty list + + CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); + InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> + credentialIssuerWellknownResponseValidator.validate(response, validator)); + assertEquals("RESIDENT-APP-041", invalidWellknownResponseException.getErrorCode()); + assertTrue(invalidWellknownResponseException.getMessage().contains("authorizationServers: must not be empty"), "Exception message should indicate 'authorizationServers' cannot be empty"); + } + + @Test + public void shouldThrowExceptionWhenFormatIsMissingInCredentialsSupported() { + CredentialIssuerWellKnownResponse response = getCredentialIssuerWellKnownResponseDto("Issuer1", + Map.of("CredentialType1", new CredentialsSupportedResponse())); // `format` is not set, default is null + + response.getCredentialConfigurationsSupported().get("CredentialType1").setFormat(null); + + CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); + InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> + credentialIssuerWellknownResponseValidator.validate(response, validator)); + assertEquals("RESIDENT-APP-041", invalidWellknownResponseException.getErrorCode()); + assertTrue(invalidWellknownResponseException.getMessage().contains("format: Format must not be blank"), "Exception message should indicate 'format' must not be blank"); + } + + @Test + public void shouldThrowExceptionWhenCredentialDefinitionTypeIsEmpty() { + CredentialIssuerWellKnownResponse response = getCredentialIssuerWellKnownResponseDto("Issuer1", + Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); + response.getCredentialConfigurationsSupported().get("CredentialType1").getCredentialDefinition().setType(Collections.emptyList()); // Invalid empty list + + CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); + InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> + credentialIssuerWellknownResponseValidator.validate(response, validator)); + assertEquals("RESIDENT-APP-041", invalidWellknownResponseException.getErrorCode()); + assertTrue(invalidWellknownResponseException.getMessage().contains("type: must not be empty"), "Exception message should indicate 'type' must not be empty"); + } + + @Test + public void shouldThrowExceptionWhenLogoUrlIsInvalid() { + CredentialIssuerWellKnownResponse response = getCredentialIssuerWellKnownResponseDto("Issuer1", + Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); + response.getCredentialConfigurationsSupported().get("CredentialType1").getDisplay().getFirst().getLogo().setUrl("ftp//invalid-url"); // Invalid URL + CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); + InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> + credentialIssuerWellknownResponseValidator.validate(response, validator)); + assertEquals("RESIDENT-APP-041", invalidWellknownResponseException.getErrorCode()); + System.out.println(invalidWellknownResponseException.getMessage()); + assertTrue(invalidWellknownResponseException.getMessage().contains("logo.url: must be a valid URL"), "Exception message should indicate 'logo.url' must be a valid URL"); + } + + @Test + public void shouldThrowExceptionWhenBackgroundImageUrlIsInvalid() { + CredentialIssuerWellKnownResponse response = getCredentialIssuerWellKnownResponseDto("Issuer1", + Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); + + response.getCredentialConfigurationsSupported().get("CredentialType1").getDisplay().getFirst().setBackgroundImage(new BackgroundImageDTO("local//imgbasebase64")); + + CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); + InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> + credentialIssuerWellknownResponseValidator.validate(response, validator)); + System.out.println(invalidWellknownResponseException.getMessage()); + assertEquals("RESIDENT-APP-041", invalidWellknownResponseException.getErrorCode()); + assertTrue(invalidWellknownResponseException.getMessage().contains("backgroundImage.uri: must be a valid URL"), "Exception message should indicate 'background_image.uri' must be a valid URL"); + } + + @Test + public void shouldDetectMissingMandatoryFields() { + + CredentialIssuerWellKnownResponse response = getCredentialIssuerWellKnownResponseDto("Issuer1", + Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); + response.setCredentialEndPoint(null); + response.setCredentialConfigurationsSupported(null); + response.setAuthorizationServers(null); + response.setCredentialIssuer(null); + CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); + InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> + credentialIssuerWellknownResponseValidator.validate(response, validator)); + assertEquals("RESIDENT-APP-041", invalidWellknownResponseException.getErrorCode()); + assertTrue(invalidWellknownResponseException.getMessage().contains("authorizationServers: must not be empty")); + assertTrue(invalidWellknownResponseException.getMessage().contains("credentialIssuer: must not be blank")); + assertTrue(invalidWellknownResponseException.getMessage().contains("credentialConfigurationsSupported: must not be empty")); + assertTrue(invalidWellknownResponseException.getMessage().contains("credentialEndPoint: must not be blank")); + + } + + @Test + public void shouldDetectMissingMandatoryFieldsOfCredentialSupportedResponse() { + + CredentialIssuerWellKnownResponse response = getCredentialIssuerWellKnownResponseDto("Issuer1", + Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); + response.getCredentialConfigurationsSupported().get("CredentialType1").setFormat(null); + response.getCredentialConfigurationsSupported().get("CredentialType1").setScope(null); + response.getCredentialConfigurationsSupported().get("CredentialType1").setDisplay(null); + response.getCredentialConfigurationsSupported().get("CredentialType1").setProofTypesSupported(null); + response.getCredentialConfigurationsSupported().get("CredentialType1").setCredentialDefinition(null); + CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); + InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> + credentialIssuerWellknownResponseValidator.validate(response, validator)); + assertEquals("RESIDENT-APP-041", invalidWellknownResponseException.getErrorCode()); + assertTrue(invalidWellknownResponseException.getMessage().contains("format: Format must not be blank")); + assertTrue(invalidWellknownResponseException.getMessage().contains("scope: Scope must not be blank")); + assertTrue(invalidWellknownResponseException.getMessage().contains("proofTypesSupported: Proof types supported must not be empty")); + assertTrue(invalidWellknownResponseException.getMessage().contains("credentialDefinition: must not be null")); + assertTrue(invalidWellknownResponseException.getMessage().contains("display: Display information must not be empty")); + + } + + @Test + public void shouldDetectMissingProofAlgorithmsSupported() { + CredentialIssuerWellKnownResponse response = getCredentialIssuerWellKnownResponseDto("Issuer1", + Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); + response.getCredentialConfigurationsSupported().get("CredentialType1").getProofTypesSupported().get("jwt"); + CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); + InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> + credentialIssuerWellknownResponseValidator.validate(response, validator)); + assertTrue(invalidWellknownResponseException.getMessage().contains("proofSigningAlgValuesSupported: must not be null")); + } + + @Test + public void shouldDetectMissingMandatoryFieldsOfCredentialSupportedDisplayResponse() { + // Create a new response object with nested display response details + CredentialIssuerWellKnownResponse response = getCredentialIssuerWellKnownResponseDto("Issuer1", + Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); + List credentialSupportedDisplayResponseList = new ArrayList<>(); + CredentialSupportedDisplayResponse credentialSupportedDisplayResponse = new CredentialSupportedDisplayResponse(); + credentialSupportedDisplayResponse.setLogo(null); + credentialSupportedDisplayResponse.setName(null); + credentialSupportedDisplayResponse.setLocale(null); + credentialSupportedDisplayResponse.setTextColor(null); + credentialSupportedDisplayResponse.setBackgroundColor(null); + credentialSupportedDisplayResponse.setBackgroundImage(null); + credentialSupportedDisplayResponseList.add(credentialSupportedDisplayResponse); + response.getCredentialConfigurationsSupported().get("CredentialType1").setDisplay(credentialSupportedDisplayResponseList); + + CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); + InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> + credentialIssuerWellknownResponseValidator.validate(response, validator) + ); + assertTrue(invalidWellknownResponseException.getMessage().contains("name: must not be blank")); + assertTrue(invalidWellknownResponseException.getMessage().contains("locale: must not be blank")); + assertTrue(invalidWellknownResponseException.getMessage().contains("backgroundImage: must not be null")); + assertTrue(invalidWellknownResponseException.getMessage().contains("backgroundColor: must not be blank")); + assertTrue(invalidWellknownResponseException.getMessage().contains("textColor: must not be blank")); + } + + @Test + public void shouldDetectMissingMandatoryFieldsOfCredentialDefinitionResponseDtoResponse() { + CredentialIssuerWellKnownResponse response = getCredentialIssuerWellKnownResponseDto("Issuer1", + Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); + CredentialDefinitionResponseDto credentialDefinitionResponseDto=new CredentialDefinitionResponseDto(); + credentialDefinitionResponseDto.setCredentialSubject(null); + credentialDefinitionResponseDto.setType(null); + response.getCredentialConfigurationsSupported().get("CredentialType1").setCredentialDefinition(credentialDefinitionResponseDto); + + CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); + InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> + credentialIssuerWellknownResponseValidator.validate(response, validator) + ); + assertTrue(invalidWellknownResponseException.getMessage().contains("type: must not be empty")); + assertTrue(invalidWellknownResponseException.getMessage().contains("credentialSubject: must not be empty")); + } +} diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index 99189342c..163a7cad2 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -40,7 +40,9 @@ public static CredentialsSupportedResponse getCredentialSupportedResponse(String credentialsSupportedResponse.setFormat("ldp_vc"); credentialsSupportedResponse.setScope(credentialSupportedName+"_vc_ldp"); credentialsSupportedResponse.setDisplay(Collections.singletonList(credentialSupportedDisplay)); - credentialsSupportedResponse.setProofTypesSupported(new HashMap<>()); + HashMap proofTypesSupportedHashMap=new HashMap<>(); + proofTypesSupportedHashMap.put("jwt",new ProofTypesSupported()); + credentialsSupportedResponse.setProofTypesSupported(proofTypesSupportedHashMap); credentialsSupportedResponse.setCredentialDefinition(credentialDefinitionResponseDto); return credentialsSupportedResponse; } From 22d586263772f493544e25d1d8082ef53e97a513 Mon Sep 17 00:00:00 2001 From: santhoshsunder Date: Fri, 30 Aug 2024 16:10:43 +0530 Subject: [PATCH 225/860] Task INJIMOB-1568 Signed-off-by: santhoshsunder --- .../AidGetIndividualId/AidGetIndividualId.yml | 10 +-- .../mimoto/AuthLock/createAuthLock.yml | 12 ++-- .../mimoto/AuthUnLock/createAuthUnLock.yml | 8 +-- .../mimoto/BindingOtp/BindingOtp.yml | 68 +++++++++---------- .../CredentialCheckStatus.yml | 4 +- .../DownloadCredential/DownloadCredential.yml | 6 +- .../DownloadWithReqid/DownloadWithReqid.yml | 4 +- .../RequestCredentials/ReqCredential.yml | 12 ++-- .../DownloadIssuerCredential.yml | 14 ++-- .../mimoto/GenerateVID/createGenerateVID.yml | 12 ++-- .../GetAllCredentialTypes.yml | 6 +- .../mimoto/GetAllIssuers/GetAllIssuers.yml | 6 +- .../main/resources/mimoto/SendOTP/SendOTP.yml | 2 +- .../mimoto/SendOTPUIN/createSendOTP.yml | 2 +- 14 files changed, 83 insertions(+), 83 deletions(-) diff --git a/apitest/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml b/apitest/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml index 9d682e925..a2f89cb4f 100644 --- a/apitest/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml +++ b/apitest/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml @@ -1,6 +1,6 @@ AidGetIndividualId: Mimoto_AidGetIndividualId_Getting_With_Valid_UIN_All: - endPoint: /v1/mimoto/aid/get-individual-id + endPoint: /residentmobileapp/aid/get-individual-id description: Generating AID status with valid AID role: resident checkErrorsOnlyInResponse: true @@ -26,7 +26,7 @@ AidGetIndividualId: }' Mimoto_AidGetIndividualId_Getting_With_Invalid_AID_Neg: - endPoint: /v1/mimoto/aid/get-individual-id + endPoint: /residentmobileapp/aid/get-individual-id description: Generating individualID with invalid AID role: resident checkErrorsOnlyInResponse: true @@ -56,7 +56,7 @@ AidGetIndividualId: }' Mimoto_AidGetIndividualId_Getting_With_Invalid_Otp_Neg: - endPoint: v1/mimoto/aid/get-individual-id + endPoint: /residentmobileapp/aid/get-individual-id description: Generating individualID with Invalid OTP role: resident checkErrorsOnlyInResponse: true @@ -86,7 +86,7 @@ AidGetIndividualId: }' Mimoto_AidGetIndividualId_Getting_With_Valid_Otp_All: - endPoint: /v1/mimoto/aid/get-individual-id + endPoint: /residentmobileapp/aid/get-individual-id description: Generating individualID with valid OTP role: resident checkErrorsOnlyInResponse: true @@ -112,7 +112,7 @@ AidGetIndividualId: }' Mimoto_AidGetIndividualId_Getting_With_Invalid_lenght_Of_AID_Neg: - endPoint: /v1/mimoto/aid/get-individual-id + endPoint: /residentmobileapp/get-individual-id description: Generating individualID with invalid lengh of AID role: resident checkErrorsOnlyInResponse: true diff --git a/apitest/src/main/resources/mimoto/AuthLock/createAuthLock.yml b/apitest/src/main/resources/mimoto/AuthLock/createAuthLock.yml index 628ec2d1a..6329fdd78 100644 --- a/apitest/src/main/resources/mimoto/AuthLock/createAuthLock.yml +++ b/apitest/src/main/resources/mimoto/AuthLock/createAuthLock.yml @@ -1,6 +1,6 @@ AuthLock: Mimoto_AuthLock_Valid_UIN_All: - endPoint: /v1/mimoto/req/auth/lock + endPoint: /residentmobileapp/req/auth/lock description: Auth lock a particular UIN with valid parameters role: resident checkErrorsOnlyInResponse: true @@ -28,7 +28,7 @@ AuthLock: } }' Mimoto_AuthLock_InValid_Otp_All: - endPoint: /v1/mimoto/req/auth/lock + endPoint: /residentmobileapp/req/auth/lock description: Auth Lock a particular UIN with invalid OTP role: resident checkErrorsOnlyInResponse: true @@ -61,7 +61,7 @@ AuthLock: } }' Mimoto_AuthLock_with_invalidUIN_Valid_Otp_sid: - endPoint: //v1/mimoto/req/auth/lock + endPoint: /residentmobileapp/req/auth/lock description: Auth Lock a particular UIN with valid OTP role: resident checkErrorsOnlyInResponse: true @@ -94,7 +94,7 @@ AuthLock: } }' Mimoto_AuthLock_Valid_VID_All: - endPoint: /v1/mimoto/req/auth/lock + endPoint: /residentmobileapp/req/auth/lock description: Auth lock a particular VID with valid VID role: resident checkErrorsOnlyInResponse: true @@ -122,7 +122,7 @@ AuthLock: } }' Mimoto_AuthLock_with_invalidVID_Valid_Otp: - endPoint: /v1/mimoto/req/auth/lock + endPoint: /residentmobileapp/req/auth/lock description: Auth lock a particular VID with invalid OTP role: resident checkErrorsOnlyInResponse: true @@ -155,7 +155,7 @@ AuthLock: } }' Mimoto_AuthLock_invalidVID_Valid_Otp: - endPoint: mimoto/AuthLock/createAuthLock + endPoint: /residentmobileapp/req/auth/lock description : Auth lock a particular VID with invalid VID role: resident checkErrorsOnlyInResponse: true diff --git a/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml b/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml index 2a7935378..c05e52f17 100644 --- a/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml +++ b/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml @@ -1,6 +1,6 @@ AuthUnlock: Mimoto_AuthUnLock_Valid_UIN_All: - endPoint: v1/mimoto/req/auth/unlock + endPoint: /residentmobileapp/req/auth/unlock description: Auth unlock a particular UIN with valid parameters role: resident checkErrorsOnlyInResponse: true @@ -29,7 +29,7 @@ AuthUnlock: } }' Mimoto_AuthUnLock_Valid_UIN_With_VID_All: - endPoint: /v1/mimoto/req/auth/unlock + endPoint: /residentmobileapp/req/auth/unlock description: Auth unlock a particular VID with valid parameters role: resident checkErrorsOnlyInResponse: true @@ -58,7 +58,7 @@ AuthUnlock: } }' Mimoto_AuthUnLock_With_InValid_OTP_All: - endPoint: /v1/mimoto/req/auth/unlock + endPoint: /residentmobileapp/req/auth/unlock description: Auth unlock a particular UIN with invalid OTP role: resident checkErrorsOnlyInResponse: true @@ -92,7 +92,7 @@ AuthUnlock: } }' Mimoto_AuthUnLock_InValid_OTP_With_VID_All: - endPoint: /v1/mimoto/req/auth/unlock + endPoint: /residentmobileapp/req/auth/unlock description: Unlock a particular VID with invalid OTP role: resident checkErrorsOnlyInResponse: true diff --git a/apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.yml b/apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.yml index 971f84d1e..8e069c302 100644 --- a/apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.yml +++ b/apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.yml @@ -1,6 +1,6 @@ BindingOtp: Mimoto_BindingOtp_Valid_UIN_All_Smoke: - endPoint: /v1/mimoto/binding-otp + endPoint: /residentmobileapp/binding-otp role: resident description: Creating OTP for binding a individualID with valid UIN checkErrorsOnlyInResponse: true @@ -18,7 +18,7 @@ BindingOtp: }' Mimoto_BindingOtp_Valid_vid_All_Smoke: - endPoint: /v1/mimoto/binding-otp + endPoint: /residentmobileapp/binding-otp description: Creating OTP for binding a individualID with valid VID role: resident checkErrorsOnlyInResponse: true @@ -36,7 +36,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Invalid_individualId_Neg: - endPoint: /v1/mimoto/binding-otp + endPoint: /residentmobileapp/binding-otp description: Creating OTP for binding a individualID with invalid UIN role: resident restMethod: post @@ -57,7 +57,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Missing_individualId_Neg: - endPoint: /v1/mimoto/binding-otp + endPoint: /residentmobileapp/binding-otp description: Creating OTP for binding a individualID without individualId attribute role: resident restMethod: post @@ -78,7 +78,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Empty_individualId_Neg: - endPoint: /v1/mimoto/binding-otp + endPoint: /residentmobileapp/binding-otp description: Creating OTP for binding a individualID with individualId missing role: resident restMethod: post @@ -99,7 +99,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Null_individualId_Neg: - endPoint: /v1/mimoto/binding-otp + endPoint: /residentmobileapp/binding-otp description: Creating OTP for binding a individualID with individualId value as null role: resident restMethod: post @@ -120,7 +120,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_SpaceSeparated_otpChannels_Neg: - endPoint: /v1/mimoto/binding-otp + endPoint: /residentmobileapp/binding-otp description: Creating OTP for binding a individualID with OTP channel value been spaced in between role: resident restMethod: post @@ -141,7 +141,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Invalid_OtpChannels_Neg: - endPoint: /v1/mimoto/binding-otp + endPoint: /residentmobileapp/binding-otp description: Creating OTP for binding a individualID with invalid OTP channel role: resident restMethod: post @@ -162,7 +162,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Missing_OtpChannels_Neg: - endPoint: /v1/mimoto/binding-otp + endPoint: /residentmobileapp/binding-otp description: Creating OTP for binding a individualID with OTP channel missing role: resident restMethod: post @@ -183,7 +183,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Empty_OtpChannels_Neg: - endPoint: /v1/mimoto/binding-otp + endPoint: /residentmobileapp/binding-otp description: Creating OTP for binding a individualID with OTP channel being empty role: resident restMethod: post @@ -204,7 +204,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Null_OtpChannels_Neg: - endPoint: /v1/mimoto/binding-otp + endPoint: /residentmobileapp/binding-otp description: Creating OTP for binding a individualID with OTP channel value being null role: resident restMethod: post @@ -225,7 +225,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Missing_OtpChannel_Neg: - endPoint: /v1/mimoto/binding-otp + endPoint: /residentmobileapp/binding-otp description: Creating OTP for binding a individualID with OTP channel missing role: resident restMethod: post @@ -246,7 +246,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Empty_OtpChannel_Neg: - endPoint: /v1/mimoto/binding-otp + endPoint: /residentmobileapp/binding-otp description: Creating OTP for binding a individualID with OTP channel being empty role: resident restMethod: post @@ -267,7 +267,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Null_OtpChannel_Neg: - endPoint: /v1/mimoto/binding-otp + endPoint: /residentmobileapp/binding-otp description: Creating OTP for binding a individualID with OTP channel being empty role: resident restMethod: post @@ -288,7 +288,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Invalid_RequestTime_Neg: - endPoint: /v1/mimoto/binding-otp + endPoint: /residentmobileapp/binding-otp description: Creating OTP for binding a individualID with invalid request time role: resident restMethod: post @@ -309,7 +309,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Past_RequestTime_Neg: - endPoint: /v1/mimoto/binding-otp + endPoint: /residentmobileapp/binding-otp description: Creating OTP for binding a individualID with past request time role: resident restMethod: post @@ -330,7 +330,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Future_RequestTime_Neg: - endPoint: /v1/mimoto/binding-ot + endPoint: /residentmobileapp/binding-otp description: Creating OTP for binding a individualID with future request time role: resident restMethod: post @@ -351,7 +351,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Missing_RequestTime_Neg: - endPoint: /v1/mimoto/binding-otp + endPoint: /residentmobileapp/binding-otp description: Creating OTP for binding a individualID with missing request time role: resident restMethod: post @@ -372,7 +372,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Empty_RequestTime_Neg: - endPoint: /v1/mimoto/binding-otp + endPoint: /residentmobileapp/binding-otp description: Creating OTP for binding a individualID with empty request time role: resident restMethod: post @@ -393,7 +393,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Invalid_individualId_Neg: - endPoint: /v1/mimoto/binding-otp + endPoint: /residentmobileapp/binding-otp description: Creating OTP for binding a individualID with invalid VID role: resident restMethod: post @@ -414,7 +414,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Missing_individualId_Neg: - endPoint: /v1/mimoto/binding-otp + endPoint: /residentmobileapp/binding-otp description: Creating OTP for binding a individualID with missing VID role: resident restMethod: post @@ -435,7 +435,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Empty_individualId_Neg: - endPoint: /v1/mimoto/binding-otp + endPoint: /residentmobileapp/binding-otp description: Creating OTP for binding a individualID with empty VID role: resident restMethod: post @@ -456,7 +456,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Null_individualId_Neg: - endPoint: /v1/mimoto/binding-otp + endPoint: /residentmobileapp/binding-otp description: Creating OTP for binding a individualID with invalid VID role: resident restMethod: post @@ -477,7 +477,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_SpaceSeparated_otpChannels_Neg: - endPoint: /v1/mimoto/binding-otp + endPoint: /residentmobileapp/binding-otp description: Creating OTP for binding a VID with OTP channel value been spaced in between role: resident restMethod: post @@ -498,7 +498,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Invalid_OtpChannels_Neg: - endPoint: /v1/mimoto/binding-otp + endPoint: /residentmobileapp/binding-otp description: Creating OTP for binding a VID with invalid OTP channel role: resident restMethod: post @@ -519,7 +519,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Missing_OtpChannels_Neg: - endPoint: /v1/mimoto/binding-otp + endPoint: /residentmobileapp/binding-otp description: Creating OTP for binding a VID with missing OTP channel values role: resident restMethod: post @@ -540,7 +540,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Empty_OtpChannels_Neg: - endPoint: /v1/mimoto/binding-otp + endPoint: /residentmobileapp/binding-otp description: Creating OTP for binding a VID with empty OTP channel values role: resident restMethod: post @@ -561,7 +561,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Null_OtpChannels_Neg: - endPoint: /v1/mimoto/binding-otp + endPoint: /residentmobileapp/binding-otp description: Creating OTP for binding a VID with OTP channel values as null role: resident restMethod: post @@ -582,7 +582,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Missing_OtpChannel_Neg: - endPoint: /v1/mimoto/binding-otp + endPoint: /residentmobileapp/binding-otp description: Creating OTP for binding a VID with OTP channel values missing role: resident restMethod: post @@ -603,7 +603,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Empty_OtpChannel_Neg: - endPoint: /v1/mimoto/binding-otp + endPoint: /residentmobileapp/binding-otp description: Creating OTP for binding a VID with OTP channel values empty role: resident restMethod: post @@ -624,7 +624,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Null_OtpChannel_Neg: - endPoint: /v1/mimoto/binding-otp + endPoint: /residentmobileapp/binding-otp description: Creating OTP for binding a VID with OTP channel values as null role: resident restMethod: post @@ -645,7 +645,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Invalid_RequestTime_Neg: - endPoint: /v1/mimoto/binding-otp + endPoint: /residentmobileapp/binding-otp description: Creating OTP for binding a VID with invalid request time role: resident restMethod: post @@ -666,7 +666,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Past_RequestTime_Neg: - endPoint: /v1/mimoto/binding-otp + endPoint: /residentmobileapp/binding-otp description: Creating OTP for binding a VID with past request time role: resident restMethod: post @@ -687,7 +687,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Future_RequestTime_Neg: - endPoint: /v1/mimoto/binding-otp + endPoint: /residentmobileapp/binding-otp description: Creating OTP for binding a VID with future request time role: resident restMethod: post diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml b/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml index 53258f0a1..e8a1f9e9a 100644 --- a/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml @@ -1,6 +1,6 @@ CredentialsStatus: Mimoto_CredentialsStatus_euin_All_Valid_Smoke: - endPoint: /v1/mimoto/credentialshare/request/status/{requestId} + endPoint: /residentmobileapp/credentialshare/request/status/{requestId} description: Retrieving credential status with valid UIN role: resident restMethod: get @@ -13,7 +13,7 @@ CredentialsStatus: "statusCode": "ISSUED" }' Mimoto_CredentialsStatus_euin_With_VID_All_Valid_Smoke: - endPoint: /v1/mimoto/credentialshare/request/status/{requestId} + endPoint: /residentmobileapp/credentialshare/request/status/{requestId} description: Retrieving credential status with valid VID role: resident restMethod: get diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml index 14d5ae41c..88498c8a3 100644 --- a/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml @@ -1,6 +1,6 @@ DownloadCredential: Mimoto_DownloadCredential_All_Valid_Smoke: - endPoint: /v1/mimoto/credentialshare/download + endPoint: /residentmobileapp/credentialshare/download description: Downloading credential with all valid parameters role: resident restMethod: post @@ -15,7 +15,7 @@ DownloadCredential: }' Mimoto_DownloadCredential_Invalid_RequestId_Neg: - endPoint: /v1/mimoto/credentialshare/download + endPoint: /residentmobileapp/credentialshare/download description: Downloading credetial with invalid RequestId role: resident restMethod: post @@ -30,7 +30,7 @@ DownloadCredential: }' Mimoto_DownloadCredential_Invalid_IndividualId_Neg: - endPoint: /v1/mimoto/credentialshare/download + endPoint: /residentmobileapp/credentialshare/download description: Downloading credetial with invalid IndividualId role: resident restMethod: post diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml index 6d924b024..1342078f2 100644 --- a/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml @@ -1,6 +1,6 @@ DownloadCredential: Mimoto_CredentialsStatus_All_Valid_Smoke_euin: - endPoint: /v1/mimoto/credentialshare/download + endPoint: /residentmobileapp/credentialshare/download description: Checking credential status with all valid parameters role: resident checkErrorsOnlyInResponse: true @@ -15,7 +15,7 @@ DownloadCredential: "Content-Type": "application/pdf" }' Mimoto_CredentialsStatus_StatusCode_InValid_Smoke_euin: - endPoint: /v1/mimoto/credentialshare/download + endPoint: /residentmobileapp/credentialshare/download description: Checking credential status with invalid StatusCode role: resident restMethod: get diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml b/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml index fc551b0b6..6688f4ebc 100644 --- a/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml @@ -1,6 +1,6 @@ RequestCredentials: Mimoto_RequestCredentials__All_Valid_Smoke_sid: - endPoint: /v1/mimoto/credentialshare/request + endPoint: /residentmobileapp/credentialshare/request description: requesting credential with all valid parameters role: resident checkErrorsOnlyInResponse: true @@ -28,7 +28,7 @@ RequestCredentials: } }' Mimoto_RequestCredentials_All_Valid_Smoke_with_VID_sid: - endPoint: /v1/mimoto/credentialshare/request + endPoint: /residentmobileapp/credentialshare/request description: requesting credential with valid VID role: resident restMethod: post @@ -56,7 +56,7 @@ RequestCredentials: } }' Mimoto_RequestCredentials_InValid_Otp_UIN_sid: - endPoint: /v1/mimoto/credentialshare/request + endPoint: /residentmobileapp/credentialshare/request role: resident description: requesting UIN credential with invalid OTP checkErrorsOnlyInResponse: true @@ -88,7 +88,7 @@ RequestCredentials: } }' Mimoto_RequestCredentials_InValid_TransactionId_sid: - endPoint: /v1/mimoto/credentialshare/request + endPoint: /residentmobileapp/credentialshare/request description: requesting credential with invalid transactionID role: resident checkErrorsOnlyInResponse: true @@ -121,7 +121,7 @@ RequestCredentials: }' Mimoto_RequestCredentials_InValid_UIN_sid: - endPoint: /v1/mimoto/credentialshare/request + endPoint: /residentmobileapp/credentialshare/request description: requesting credential with invalid UIN role: resident checkErrorsOnlyInResponse: true @@ -154,7 +154,7 @@ RequestCredentials: }' Mimoto_RequestCredentials_Invalid_VID_sid_Neg: - endPoint: /v1/mimoto/credentialshare/request + endPoint: /residentmobileapp/credentialshare/request description: requesting credential with invalid VID role: resident checkErrorsOnlyInResponse: true diff --git a/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml b/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml index 25ec97a8c..f091a7985 100644 --- a/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml +++ b/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml @@ -1,6 +1,6 @@ DownloadIssuerCredential: Mimoto_DownloadIssuerCredential_All_Valid_Smoke: - endPoint: /v1/mimoto/credentials/download + endPoint: /residentmobileapp/credentials/download description: Downloading credential with all valid parameters role: resident restMethod: get @@ -19,7 +19,7 @@ DownloadIssuerCredential: }' Mimoto_DownloadIssuerCredential_Invalid_Issuer_Neg: - endPoint: /v1/mimoto/credentials/download + endPoint: /residentmobileapp/credentials/download description: Downloading credential with invalid issuer role: resident restMethod: get @@ -43,7 +43,7 @@ DownloadIssuerCredential: }' Mimoto_DownloadIssuerCredential_Invalid_Credential_Neg: - endPoint: /v1/mimoto/credentials/download + endPoint: /residentmobileapp/credentials/download description: Downloading credential with invalid credential role: resident restMethod: get @@ -67,7 +67,7 @@ DownloadIssuerCredential: }' Mimoto_DownloadIssuerCredential_Invalid_AuthorizationCode_Neg: - endPoint: /v1/mimoto/credentials/download + endPoint: /residentmobileapp/credentials/download description: Downloading credential with invalid credential AuthorizationCode role: resident restMethod: get @@ -92,7 +92,7 @@ DownloadIssuerCredential: Mimoto_DownloadIssuerCredential_Reused_AuthorizationCode_Neg: - endPoint: /v1/mimoto/credentials/download + endPoint: /residentmobileapp/credentials/download description: Downloading credential with invalid expired authorizationCode role: resident restMethod: get @@ -114,8 +114,8 @@ DownloadIssuerCredential: } ] }' - Mimoto_DownloadIssuerCredential_IssuerSunBird_All_Valid_Smoke: - endPoint: /v1/mimoto/credentials/download + Mimoto_DownloadIssuerCredential_Expired_AuthorizationCode_Neg: + endPoint: /residentmobileapp/credentials/download role: resident restMethod: get checkErrorsOnlyInResponse: true diff --git a/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml b/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml index 71ce03900..f2408834b 100644 --- a/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml +++ b/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml @@ -1,6 +1,6 @@ GenerateVID: Mimoto_Generate_Perpetual_VID_Valid_Smoke_sid: - endPoint: /v1/mimoto/vid + endPoint: /residentmobileapp/vid description: Creating Perpetual VID with all valid parameters role: resident checkErrorsOnlyInResponse: true @@ -28,7 +28,7 @@ GenerateVID: } }' Mimoto_Generate_Perpetual_VID_InValid_Otp_sid: - endPoint: /v1/mimoto/vid + endPoint: /residentmobileapp/vid description: Creating Perpetual VID with invalid OTP role: resident checkErrorsOnlyInResponse: true @@ -61,7 +61,7 @@ GenerateVID: } }' Mimoto_Generate_Perpetual_VID_with_InvalidUIN_Valid_Otp_sid: - endPoint: /v1/mimoto/vid + endPoint: /residentmobileapp/vid description: Creating Perpetual VID with invalid UIN role: resident checkErrorsOnlyInResponse: true @@ -95,7 +95,7 @@ GenerateVID: }' mimoto_Generate_Temporary_VID_Valid_Smoke_sid: - endPoint: /v1/mimoto/vid + endPoint: /residentmobileapp/vid description: Creating temporary VID with all valid request role: resident checkErrorsOnlyInResponse: true @@ -124,7 +124,7 @@ GenerateVID: }' Mimoto_Generate_Perpetual_VID_Invalid_TransactionId_Neg: - endPoint: /v1/mimoto/vid + endPoint: /residentmobileapp/vid description: Creating perpetual VID with invalid transactionID role: resident checkErrorsOnlyInResponse: true @@ -158,7 +158,7 @@ GenerateVID: }' Mimoto_Generate_Perpetual_VID_Binding_Valid_Smoke_sid: - endPoint: /v1/mimoto/vid + endPoint: /residentmobileapp/vid description: Creating perpetual VID with binding valid request role: resident checkErrorsOnlyInResponse: true diff --git a/apitest/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.yml b/apitest/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.yml index 8f507a6c5..2cb12ee22 100644 --- a/apitest/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.yml +++ b/apitest/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.yml @@ -1,6 +1,6 @@ GetAllCredentialTypes: Mimoto_GetAllCredentialTypes_All_Valid_Smoke: - endPoint: /v1/mimoto/issuers/{issuerId}/credentialTypes + endPoint: /residentmobileapp/issuers/{issuerId}/credentialTypes description: Generating the credential types with all valid parameters role: resident restMethod: get @@ -15,7 +15,7 @@ GetAllCredentialTypes: }' Mimoto_GetAllCredentialTypes_Specific_Issuer_All_Valid_Smoke: - endPoint: /v1/mimoto/issuers/{issuerId}/credentialTypes/?search={credentialType} + endPoint: /residentmobileapp/issuers/{issuerId}/credentialTypes/?search={credentialType} description: Generating the specific credential type with all valid parameters role: resident restMethod: get @@ -30,7 +30,7 @@ GetAllCredentialTypes: }' Mimoto_GetAllCredentialTypes_Invalid_Issuer_Neg: - endPoint: /v1/mimoto/issuers/{issuerId}/credentialTypes + endPoint: /residentmobileapp/issuers/{issuerId}/credentialTypes description: Generating the invalid credential type role: resident restMethod: get diff --git a/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml b/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml index e3a299b84..3718f40e8 100644 --- a/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml +++ b/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml @@ -1,6 +1,6 @@ GetAllIssuers: Mimoto_GetAllIssuers_All_Valid_Smoke: - endPoint: /v1/mimoto/issuers + endPoint: /residentmobileapp/issuers description: Retrieving issuers with all valid parameters role: resident restMethod: get @@ -26,8 +26,8 @@ GetAllIssuers: }' Mimoto_GetAllIssuers_Invalid_Issuer_Neg: - endPoint: /v1/mimoto/issuers/invalid - description : Retrieving invalid issuer + endPoint: /residentmobileapp/issuers/invalid + description: Retrieving invalid issuer role: resident restMethod: get checkErrorsOnlyInResponse: true diff --git a/apitest/src/main/resources/mimoto/SendOTP/SendOTP.yml b/apitest/src/main/resources/mimoto/SendOTP/SendOTP.yml index fdcb2e60d..4a5311816 100644 --- a/apitest/src/main/resources/mimoto/SendOTP/SendOTP.yml +++ b/apitest/src/main/resources/mimoto/SendOTP/SendOTP.yml @@ -1,6 +1,6 @@ SendOTP: Resident_SendOTP_Valid_UIN_All_Smoke: - endPoint: /resident/v1/req/otp + endPoint: /residentmobileapp/req/otp description: Creating resident requesting OTP with valid UIN role: resident checkErrorsOnlyInResponse: true diff --git a/apitest/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml b/apitest/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml index 70b2d5191..a74eb9c4a 100644 --- a/apitest/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml +++ b/apitest/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml @@ -1,6 +1,6 @@ individualOTP: Mimoto_individualOTP_All_Valid_Smoke: - endPoint: /v1/mimoto/req/individualId/otp + endPoint: /residentmobileapp/req/individualId/otp description : generating individual OTP with valid parameters role: resident checkErrorsOnlyInResponse: true From 38627d8ea5f0365d2bc1103309d04174dbf686a3 Mon Sep 17 00:00:00 2001 From: santhoshsunder Date: Fri, 30 Aug 2024 17:27:44 +0530 Subject: [PATCH 226/860] Task INJIMOB-1568 Signed-off-by: santhoshsunder --- .../AidGetIndividualId/AidGetIndividualId.yml | 10 +-- .../mimoto/AuthLock/createAuthLock.yml | 14 +-- .../mimoto/AuthUnLock/createAuthUnLock.yml | 8 +- .../mimoto/BindingOtp/BindingOtp.yml | 72 ++++++++-------- .../CredentialCheckStatus.yml | 6 +- .../DownloadCredential/DownloadCredential.yml | 6 +- .../DownloadWithReqid/DownloadWithReqid.yml | 4 +- .../RequestCredentials/ReqCredential.yml | 12 +-- .../DownloadIssuerCredential.yml | 16 ++-- .../mimoto/GenerateVID/createGenerateVID.yml | 12 +-- .../GetAllCredentialTypes.yml | 6 +- .../mimoto/GetAllIssuers/GetAllIssuers.yml | 4 +- .../OAuthDetailsRequest.yml | 2 +- .../main/resources/mimoto/SendOTP/SendOTP.yml | 2 +- .../resources/mimoto/SendOTP1/SendOTP.yml | 85 ------------------- .../mimoto/SendOTPUIN/createSendOTP.yml | 4 +- 16 files changed, 89 insertions(+), 174 deletions(-) delete mode 100644 apitest/src/main/resources/mimoto/SendOTP1/SendOTP.yml diff --git a/apitest/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml b/apitest/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml index a2f89cb4f..c4b95501c 100644 --- a/apitest/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml +++ b/apitest/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml @@ -1,6 +1,6 @@ AidGetIndividualId: Mimoto_AidGetIndividualId_Getting_With_Valid_UIN_All: - endPoint: /residentmobileapp/aid/get-individual-id + endPoint: /v1/mimoto/aid/get-individual-id description: Generating AID status with valid AID role: resident checkErrorsOnlyInResponse: true @@ -26,7 +26,7 @@ AidGetIndividualId: }' Mimoto_AidGetIndividualId_Getting_With_Invalid_AID_Neg: - endPoint: /residentmobileapp/aid/get-individual-id + endPoint: /v1/mimoto/aid/get-individual-id description: Generating individualID with invalid AID role: resident checkErrorsOnlyInResponse: true @@ -56,7 +56,7 @@ AidGetIndividualId: }' Mimoto_AidGetIndividualId_Getting_With_Invalid_Otp_Neg: - endPoint: /residentmobileapp/aid/get-individual-id + endPoint: /v1/mimoto/aid/get-individual-id description: Generating individualID with Invalid OTP role: resident checkErrorsOnlyInResponse: true @@ -86,7 +86,7 @@ AidGetIndividualId: }' Mimoto_AidGetIndividualId_Getting_With_Valid_Otp_All: - endPoint: /residentmobileapp/aid/get-individual-id + endPoint: /v1/mimoto/aid/get-individual-id description: Generating individualID with valid OTP role: resident checkErrorsOnlyInResponse: true @@ -112,7 +112,7 @@ AidGetIndividualId: }' Mimoto_AidGetIndividualId_Getting_With_Invalid_lenght_Of_AID_Neg: - endPoint: /residentmobileapp/get-individual-id + endPoint: /v1/mimoto/aid/get-individual-id description: Generating individualID with invalid lengh of AID role: resident checkErrorsOnlyInResponse: true diff --git a/apitest/src/main/resources/mimoto/AuthLock/createAuthLock.yml b/apitest/src/main/resources/mimoto/AuthLock/createAuthLock.yml index 6329fdd78..a99f88baa 100644 --- a/apitest/src/main/resources/mimoto/AuthLock/createAuthLock.yml +++ b/apitest/src/main/resources/mimoto/AuthLock/createAuthLock.yml @@ -1,6 +1,6 @@ AuthLock: Mimoto_AuthLock_Valid_UIN_All: - endPoint: /residentmobileapp/req/auth/lock + endPoint: /v1/mimoto/req/auth/lock description: Auth lock a particular UIN with valid parameters role: resident checkErrorsOnlyInResponse: true @@ -28,7 +28,7 @@ AuthLock: } }' Mimoto_AuthLock_InValid_Otp_All: - endPoint: /residentmobileapp/req/auth/lock + endPoint: /v1/mimoto/req/auth/lock description: Auth Lock a particular UIN with invalid OTP role: resident checkErrorsOnlyInResponse: true @@ -61,7 +61,7 @@ AuthLock: } }' Mimoto_AuthLock_with_invalidUIN_Valid_Otp_sid: - endPoint: /residentmobileapp/req/auth/lock + endPoint: /v1/mimoto/req/auth/lock description: Auth Lock a particular UIN with valid OTP role: resident checkErrorsOnlyInResponse: true @@ -94,7 +94,7 @@ AuthLock: } }' Mimoto_AuthLock_Valid_VID_All: - endPoint: /residentmobileapp/req/auth/lock + endPoint: /v1/mimoto/req/auth/lock description: Auth lock a particular VID with valid VID role: resident checkErrorsOnlyInResponse: true @@ -122,7 +122,7 @@ AuthLock: } }' Mimoto_AuthLock_with_invalidVID_Valid_Otp: - endPoint: /residentmobileapp/req/auth/lock + endPoint: /v1/mimoto/req/auth/lock description: Auth lock a particular VID with invalid OTP role: resident checkErrorsOnlyInResponse: true @@ -155,8 +155,8 @@ AuthLock: } }' Mimoto_AuthLock_invalidVID_Valid_Otp: - endPoint: /residentmobileapp/req/auth/lock - description : Auth lock a particular VID with invalid VID + endPoint: /v1/mimoto/req/auth/lock + description: Auth lock a particular VID with invalid VID role: resident checkErrorsOnlyInResponse: true restMethod: post diff --git a/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml b/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml index c05e52f17..843798bef 100644 --- a/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml +++ b/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml @@ -1,6 +1,6 @@ AuthUnlock: Mimoto_AuthUnLock_Valid_UIN_All: - endPoint: /residentmobileapp/req/auth/unlock + endPoint: /v1/mimoto/req/auth/unlock description: Auth unlock a particular UIN with valid parameters role: resident checkErrorsOnlyInResponse: true @@ -29,7 +29,7 @@ AuthUnlock: } }' Mimoto_AuthUnLock_Valid_UIN_With_VID_All: - endPoint: /residentmobileapp/req/auth/unlock + endPoint: /v1/mimoto/req/auth/unlock description: Auth unlock a particular VID with valid parameters role: resident checkErrorsOnlyInResponse: true @@ -58,7 +58,7 @@ AuthUnlock: } }' Mimoto_AuthUnLock_With_InValid_OTP_All: - endPoint: /residentmobileapp/req/auth/unlock + endPoint: /v1/mimoto/req/auth/unlock description: Auth unlock a particular UIN with invalid OTP role: resident checkErrorsOnlyInResponse: true @@ -92,7 +92,7 @@ AuthUnlock: } }' Mimoto_AuthUnLock_InValid_OTP_With_VID_All: - endPoint: /residentmobileapp/req/auth/unlock + endPoint: /v1/mimoto/req/auth/unlock description: Unlock a particular VID with invalid OTP role: resident checkErrorsOnlyInResponse: true diff --git a/apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.yml b/apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.yml index 8e069c302..b74516d92 100644 --- a/apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.yml +++ b/apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.yml @@ -1,6 +1,6 @@ BindingOtp: Mimoto_BindingOtp_Valid_UIN_All_Smoke: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp role: resident description: Creating OTP for binding a individualID with valid UIN checkErrorsOnlyInResponse: true @@ -18,7 +18,7 @@ BindingOtp: }' Mimoto_BindingOtp_Valid_vid_All_Smoke: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with valid VID role: resident checkErrorsOnlyInResponse: true @@ -36,7 +36,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Invalid_individualId_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with invalid UIN role: resident restMethod: post @@ -57,7 +57,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Missing_individualId_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID without individualId attribute role: resident restMethod: post @@ -78,7 +78,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Empty_individualId_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with individualId missing role: resident restMethod: post @@ -99,7 +99,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Null_individualId_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with individualId value as null role: resident restMethod: post @@ -120,7 +120,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_SpaceSeparated_otpChannels_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with OTP channel value been spaced in between role: resident restMethod: post @@ -141,7 +141,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Invalid_OtpChannels_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with invalid OTP channel role: resident restMethod: post @@ -162,7 +162,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Missing_OtpChannels_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with OTP channel missing role: resident restMethod: post @@ -183,7 +183,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Empty_OtpChannels_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with OTP channel being empty role: resident restMethod: post @@ -204,7 +204,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Null_OtpChannels_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with OTP channel value being null role: resident restMethod: post @@ -225,7 +225,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Missing_OtpChannel_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with OTP channel missing role: resident restMethod: post @@ -246,7 +246,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Empty_OtpChannel_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with OTP channel being empty role: resident restMethod: post @@ -267,7 +267,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Null_OtpChannel_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with OTP channel being empty role: resident restMethod: post @@ -288,7 +288,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Invalid_RequestTime_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with invalid request time role: resident restMethod: post @@ -309,7 +309,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Past_RequestTime_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with past request time role: resident restMethod: post @@ -330,7 +330,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Future_RequestTime_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with future request time role: resident restMethod: post @@ -351,7 +351,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Missing_RequestTime_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with missing request time role: resident restMethod: post @@ -372,7 +372,7 @@ BindingOtp: }' Mimoto_BindingOtp_UIN_Empty_RequestTime_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with empty request time role: resident restMethod: post @@ -393,7 +393,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Invalid_individualId_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with invalid VID role: resident restMethod: post @@ -414,7 +414,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Missing_individualId_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with missing VID role: resident restMethod: post @@ -435,7 +435,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Empty_individualId_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with empty VID role: resident restMethod: post @@ -456,7 +456,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Null_individualId_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with invalid VID role: resident restMethod: post @@ -477,7 +477,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_SpaceSeparated_otpChannels_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a VID with OTP channel value been spaced in between role: resident restMethod: post @@ -498,7 +498,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Invalid_OtpChannels_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a VID with invalid OTP channel role: resident restMethod: post @@ -519,7 +519,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Missing_OtpChannels_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a VID with missing OTP channel values role: resident restMethod: post @@ -540,7 +540,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Empty_OtpChannels_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a VID with empty OTP channel values role: resident restMethod: post @@ -561,7 +561,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Null_OtpChannels_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a VID with OTP channel values as null role: resident restMethod: post @@ -582,7 +582,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Missing_OtpChannel_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a VID with OTP channel values missing role: resident restMethod: post @@ -603,7 +603,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Empty_OtpChannel_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a VID with OTP channel values empty role: resident restMethod: post @@ -624,7 +624,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Null_OtpChannel_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a VID with OTP channel values as null role: resident restMethod: post @@ -645,7 +645,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Invalid_RequestTime_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a VID with invalid request time role: resident restMethod: post @@ -666,7 +666,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Past_RequestTime_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a VID with past request time role: resident restMethod: post @@ -687,7 +687,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Future_RequestTime_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a VID with future request time role: resident restMethod: post @@ -708,7 +708,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Missing_RequestTime_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a VID with request time missing role: resident restMethod: post @@ -729,7 +729,7 @@ BindingOtp: }' Mimoto_BindingOtp_vid_Empty_RequestTime_Neg: - endPoint: /residentmobileapp/binding-otp + endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a VID with request time empty role: resident restMethod: post diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml b/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml index e8a1f9e9a..f8d568a8a 100644 --- a/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml @@ -1,6 +1,6 @@ CredentialsStatus: Mimoto_CredentialsStatus_euin_All_Valid_Smoke: - endPoint: /residentmobileapp/credentialshare/request/status/{requestId} + endPoint: /v1/mimoto/credentialshare/request/status/{requestId} description: Retrieving credential status with valid UIN role: resident restMethod: get @@ -13,7 +13,7 @@ CredentialsStatus: "statusCode": "ISSUED" }' Mimoto_CredentialsStatus_euin_With_VID_All_Valid_Smoke: - endPoint: /residentmobileapp/credentialshare/request/status/{requestId} + endPoint: /v1/mimoto/credentialshare/request/status/{requestId} description: Retrieving credential status with valid VID role: resident restMethod: get @@ -27,7 +27,7 @@ CredentialsStatus: }' Mimoto_CredentialsStatus_euin_With_Invalid_RequestId_Neg: - endPoint: /residentmobileapp/credentialshare/request/status/{requestId} + endPoint: /v1/mimoto/credentialshare/request/status/{requestId} description: Retrieving credential status with invalid requestId role: resident restMethod: get diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml index 88498c8a3..14d5ae41c 100644 --- a/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml @@ -1,6 +1,6 @@ DownloadCredential: Mimoto_DownloadCredential_All_Valid_Smoke: - endPoint: /residentmobileapp/credentialshare/download + endPoint: /v1/mimoto/credentialshare/download description: Downloading credential with all valid parameters role: resident restMethod: post @@ -15,7 +15,7 @@ DownloadCredential: }' Mimoto_DownloadCredential_Invalid_RequestId_Neg: - endPoint: /residentmobileapp/credentialshare/download + endPoint: /v1/mimoto/credentialshare/download description: Downloading credetial with invalid RequestId role: resident restMethod: post @@ -30,7 +30,7 @@ DownloadCredential: }' Mimoto_DownloadCredential_Invalid_IndividualId_Neg: - endPoint: /residentmobileapp/credentialshare/download + endPoint: /v1/mimoto/credentialshare/download description: Downloading credetial with invalid IndividualId role: resident restMethod: post diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml index 1342078f2..6d924b024 100644 --- a/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml @@ -1,6 +1,6 @@ DownloadCredential: Mimoto_CredentialsStatus_All_Valid_Smoke_euin: - endPoint: /residentmobileapp/credentialshare/download + endPoint: /v1/mimoto/credentialshare/download description: Checking credential status with all valid parameters role: resident checkErrorsOnlyInResponse: true @@ -15,7 +15,7 @@ DownloadCredential: "Content-Type": "application/pdf" }' Mimoto_CredentialsStatus_StatusCode_InValid_Smoke_euin: - endPoint: /residentmobileapp/credentialshare/download + endPoint: /v1/mimoto/credentialshare/download description: Checking credential status with invalid StatusCode role: resident restMethod: get diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml b/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml index 6688f4ebc..fc551b0b6 100644 --- a/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml +++ b/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml @@ -1,6 +1,6 @@ RequestCredentials: Mimoto_RequestCredentials__All_Valid_Smoke_sid: - endPoint: /residentmobileapp/credentialshare/request + endPoint: /v1/mimoto/credentialshare/request description: requesting credential with all valid parameters role: resident checkErrorsOnlyInResponse: true @@ -28,7 +28,7 @@ RequestCredentials: } }' Mimoto_RequestCredentials_All_Valid_Smoke_with_VID_sid: - endPoint: /residentmobileapp/credentialshare/request + endPoint: /v1/mimoto/credentialshare/request description: requesting credential with valid VID role: resident restMethod: post @@ -56,7 +56,7 @@ RequestCredentials: } }' Mimoto_RequestCredentials_InValid_Otp_UIN_sid: - endPoint: /residentmobileapp/credentialshare/request + endPoint: /v1/mimoto/credentialshare/request role: resident description: requesting UIN credential with invalid OTP checkErrorsOnlyInResponse: true @@ -88,7 +88,7 @@ RequestCredentials: } }' Mimoto_RequestCredentials_InValid_TransactionId_sid: - endPoint: /residentmobileapp/credentialshare/request + endPoint: /v1/mimoto/credentialshare/request description: requesting credential with invalid transactionID role: resident checkErrorsOnlyInResponse: true @@ -121,7 +121,7 @@ RequestCredentials: }' Mimoto_RequestCredentials_InValid_UIN_sid: - endPoint: /residentmobileapp/credentialshare/request + endPoint: /v1/mimoto/credentialshare/request description: requesting credential with invalid UIN role: resident checkErrorsOnlyInResponse: true @@ -154,7 +154,7 @@ RequestCredentials: }' Mimoto_RequestCredentials_Invalid_VID_sid_Neg: - endPoint: /residentmobileapp/credentialshare/request + endPoint: /v1/mimoto/credentialshare/request description: requesting credential with invalid VID role: resident checkErrorsOnlyInResponse: true diff --git a/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml b/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml index f091a7985..376e94f8e 100644 --- a/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml +++ b/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml @@ -1,6 +1,6 @@ DownloadIssuerCredential: - Mimoto_DownloadIssuerCredential_All_Valid_Smoke: - endPoint: /residentmobileapp/credentials/download + Mimoto_DownloadIssuerCredential_IssuerMosip_All_Valid_Smoke: + endPoint: /v1/mimoto/credentials/download description: Downloading credential with all valid parameters role: resident restMethod: get @@ -19,7 +19,7 @@ DownloadIssuerCredential: }' Mimoto_DownloadIssuerCredential_Invalid_Issuer_Neg: - endPoint: /residentmobileapp/credentials/download + endPoint: /v1/mimoto/credentials/download description: Downloading credential with invalid issuer role: resident restMethod: get @@ -43,7 +43,7 @@ DownloadIssuerCredential: }' Mimoto_DownloadIssuerCredential_Invalid_Credential_Neg: - endPoint: /residentmobileapp/credentials/download + endPoint: /v1/mimoto/credentials/download description: Downloading credential with invalid credential role: resident restMethod: get @@ -67,7 +67,7 @@ DownloadIssuerCredential: }' Mimoto_DownloadIssuerCredential_Invalid_AuthorizationCode_Neg: - endPoint: /residentmobileapp/credentials/download + endPoint: /v1/mimoto/credentials/download description: Downloading credential with invalid credential AuthorizationCode role: resident restMethod: get @@ -92,7 +92,7 @@ DownloadIssuerCredential: Mimoto_DownloadIssuerCredential_Reused_AuthorizationCode_Neg: - endPoint: /residentmobileapp/credentials/download + endPoint: /v1/mimoto/credentials/download description: Downloading credential with invalid expired authorizationCode role: resident restMethod: get @@ -114,8 +114,8 @@ DownloadIssuerCredential: } ] }' - Mimoto_DownloadIssuerCredential_Expired_AuthorizationCode_Neg: - endPoint: /residentmobileapp/credentials/download + Mimoto_DownloadIssuerCredential_IssuerSunBird_All_Valid_Smoke: + endPoint: /v1/mimoto/credentials/download role: resident restMethod: get checkErrorsOnlyInResponse: true diff --git a/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml b/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml index f2408834b..71ce03900 100644 --- a/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml +++ b/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml @@ -1,6 +1,6 @@ GenerateVID: Mimoto_Generate_Perpetual_VID_Valid_Smoke_sid: - endPoint: /residentmobileapp/vid + endPoint: /v1/mimoto/vid description: Creating Perpetual VID with all valid parameters role: resident checkErrorsOnlyInResponse: true @@ -28,7 +28,7 @@ GenerateVID: } }' Mimoto_Generate_Perpetual_VID_InValid_Otp_sid: - endPoint: /residentmobileapp/vid + endPoint: /v1/mimoto/vid description: Creating Perpetual VID with invalid OTP role: resident checkErrorsOnlyInResponse: true @@ -61,7 +61,7 @@ GenerateVID: } }' Mimoto_Generate_Perpetual_VID_with_InvalidUIN_Valid_Otp_sid: - endPoint: /residentmobileapp/vid + endPoint: /v1/mimoto/vid description: Creating Perpetual VID with invalid UIN role: resident checkErrorsOnlyInResponse: true @@ -95,7 +95,7 @@ GenerateVID: }' mimoto_Generate_Temporary_VID_Valid_Smoke_sid: - endPoint: /residentmobileapp/vid + endPoint: /v1/mimoto/vid description: Creating temporary VID with all valid request role: resident checkErrorsOnlyInResponse: true @@ -124,7 +124,7 @@ GenerateVID: }' Mimoto_Generate_Perpetual_VID_Invalid_TransactionId_Neg: - endPoint: /residentmobileapp/vid + endPoint: /v1/mimoto/vid description: Creating perpetual VID with invalid transactionID role: resident checkErrorsOnlyInResponse: true @@ -158,7 +158,7 @@ GenerateVID: }' Mimoto_Generate_Perpetual_VID_Binding_Valid_Smoke_sid: - endPoint: /residentmobileapp/vid + endPoint: /v1/mimoto/vid description: Creating perpetual VID with binding valid request role: resident checkErrorsOnlyInResponse: true diff --git a/apitest/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.yml b/apitest/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.yml index 2cb12ee22..8f507a6c5 100644 --- a/apitest/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.yml +++ b/apitest/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.yml @@ -1,6 +1,6 @@ GetAllCredentialTypes: Mimoto_GetAllCredentialTypes_All_Valid_Smoke: - endPoint: /residentmobileapp/issuers/{issuerId}/credentialTypes + endPoint: /v1/mimoto/issuers/{issuerId}/credentialTypes description: Generating the credential types with all valid parameters role: resident restMethod: get @@ -15,7 +15,7 @@ GetAllCredentialTypes: }' Mimoto_GetAllCredentialTypes_Specific_Issuer_All_Valid_Smoke: - endPoint: /residentmobileapp/issuers/{issuerId}/credentialTypes/?search={credentialType} + endPoint: /v1/mimoto/issuers/{issuerId}/credentialTypes/?search={credentialType} description: Generating the specific credential type with all valid parameters role: resident restMethod: get @@ -30,7 +30,7 @@ GetAllCredentialTypes: }' Mimoto_GetAllCredentialTypes_Invalid_Issuer_Neg: - endPoint: /residentmobileapp/issuers/{issuerId}/credentialTypes + endPoint: /v1/mimoto/issuers/{issuerId}/credentialTypes description: Generating the invalid credential type role: resident restMethod: get diff --git a/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml b/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml index 3718f40e8..e4c7010d0 100644 --- a/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml +++ b/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml @@ -1,6 +1,6 @@ GetAllIssuers: Mimoto_GetAllIssuers_All_Valid_Smoke: - endPoint: /residentmobileapp/issuers + endPoint: /v1/mimoto/issuers description: Retrieving issuers with all valid parameters role: resident restMethod: get @@ -26,7 +26,7 @@ GetAllIssuers: }' Mimoto_GetAllIssuers_Invalid_Issuer_Neg: - endPoint: /residentmobileapp/issuers/invalid + endPoint: /v1/mimoto/issuers/invalid description: Retrieving invalid issuer role: resident restMethod: get diff --git a/apitest/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.yml b/apitest/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.yml index fd2984904..6c28f19f6 100644 --- a/apitest/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.yml +++ b/apitest/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.yml @@ -1,7 +1,7 @@ OAuthDetailsRequest: Mimoto_ESignet_OAuthDetailsRequest_all_Valid_Smoke_sid: endPoint: /v1/esignet/authorization/v2/oauth-details - description : Creating Oauth's details with all valid parameters + description: Creating Oauth's details with all valid parameters role: resident restMethod: post checkErrorsOnlyInResponse: true diff --git a/apitest/src/main/resources/mimoto/SendOTP/SendOTP.yml b/apitest/src/main/resources/mimoto/SendOTP/SendOTP.yml index 4a5311816..fdcb2e60d 100644 --- a/apitest/src/main/resources/mimoto/SendOTP/SendOTP.yml +++ b/apitest/src/main/resources/mimoto/SendOTP/SendOTP.yml @@ -1,6 +1,6 @@ SendOTP: Resident_SendOTP_Valid_UIN_All_Smoke: - endPoint: /residentmobileapp/req/otp + endPoint: /resident/v1/req/otp description: Creating resident requesting OTP with valid UIN role: resident checkErrorsOnlyInResponse: true diff --git a/apitest/src/main/resources/mimoto/SendOTP1/SendOTP.yml b/apitest/src/main/resources/mimoto/SendOTP1/SendOTP.yml deleted file mode 100644 index a85e4f814..000000000 --- a/apitest/src/main/resources/mimoto/SendOTP1/SendOTP.yml +++ /dev/null @@ -1,85 +0,0 @@ -SendOTP: - Mimoto_SendOTP_Valid_UIN_All_Smoke: - endPoint: /resident/v1/req/otp - description: Send OTP for valid UIN - role: resident - restMethod: post - checkErrorsOnlyInResponse: true - inputTemplate: mimoto/SendOTP1/createSendOTP - outputTemplate: mimoto/SendOTP1/createSendOTPResult - input: '{ - "transactionID": "$TRANSACTIONID$", - "requestTime": "$TIMESTAMP$", - "individualId": "$ID:AddIdentity_withValidParameters_smoke_Pos_UIN$", - "individualIdType": "UIN" -}' - output: '{ - "maskedMobile": "$IGNORE$", - "maskedEmail": "$IGNORE$" - }' - - Mimoto_SendOTP_Valid_VID_All_Smoke: - endPoint: /resident/v1/req/otp - description: Send OTP to valid VID - role: resident - restMethod: post - checkErrorsOnlyInResponse: true - inputTemplate: mimoto/SendOTP1/createSendOTP - outputTemplate: mimoto/SendOTP1/createSendOTPResult - input: '{ - "transactionID": "$TRANSACTIONID$", - "requestTime": "$TIMESTAMP$", - "individualId": "$ID:Generate_Perpetual_VID_Valid_Smoke_sid_vid$", - "individualIdType": "VID" -}' - output: '{ - "maskedMobile": "$IGNORE$", - "maskedEmail": "$IGNORE$" -}' - - Mimoto_SendOTP_InValid_UIN_All: - endPoint: /v1/mimoto/req/otp - description: Send OTP to invalid UIN - role: resident - restMethod: post - inputTemplate: mimoto/SendOTP1/createSendOTP - outputTemplate: mimoto/error - input: '{ - "transactionID": "$TRANSACTIONID$", - "requestTime": "$TIMESTAMP$", - "individualId": "4Y4B4 N@&&&&", - "individualIdType": "UIN" -}' - output: '{ - "errors": [ - { - "errorCode": "IDA-MLC-009", - "errorMessage": "$IGNORE$" - } - ] -}' - - Mimoto_SendOTP_Invalid_VID_Neg: - endPoint: /resident/v1/req/otp - description: Send OTP to invalid VID - role: resident - checkErrorsOnlyInResponse: true - restMethod: post - inputTemplate: mimoto/SendOTP1/createSendOTP - outputTemplate: mimoto/error - input: '{ - "transactionID": "$TRANSACTIONID$", - "requestTime": "$TIMESTAMP$", - "individualId": "$gyx56", - "individualIdType": "VID" -}' - output: '{ - "errors": [ - { - "errorCode": "IDA-MLC-009", - "errorMessage": "Invalid Input Parameter - individualId" - } - ], - "maskedMobile": "$IGNORE$", - "maskedEmail": "XXsXXeXXaXXoXXtXXn@gmail.com" -}' \ No newline at end of file diff --git a/apitest/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml b/apitest/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml index a74eb9c4a..f1a84c686 100644 --- a/apitest/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml +++ b/apitest/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml @@ -1,7 +1,7 @@ individualOTP: Mimoto_individualOTP_All_Valid_Smoke: - endPoint: /residentmobileapp/req/individualId/otp - description : generating individual OTP with valid parameters + endPoint: /v1/mimoto/req/individualId/otp + description: generating individual OTP with valid parameters role: resident checkErrorsOnlyInResponse: true restMethod: post From 8136fae2f7bd5443eec73b3a245009dbb7bc6aee Mon Sep 17 00:00:00 2001 From: santhoshsunder Date: Fri, 30 Aug 2024 17:32:26 +0530 Subject: [PATCH 227/860] Task INJIMOB-1568 Signed-off-by: santhoshsunder --- .../main/resources/mimoto/WalletBinding/WalletBinding.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml b/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml index c4fe5bc7a..00529e47b 100644 --- a/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml +++ b/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml @@ -1448,7 +1448,7 @@ WalletBinding: }' Mimoto_WalletBinding_uin_Invalid_publicKey_Neg: - endPoint: v1/mimoto/wallet-binding + endPoint: /v1/mimoto/wallet-binding description: generating OTP to bind VC with invalid publickey role: resident validityCheckRequired: true @@ -1877,7 +1877,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_Missing_IndividualId_Neg: - endPoint: v1/mimoto/wallet-binding + endPoint: /v1/mimoto/wallet-binding description: generating OTP to bind vid VC with missing individualId role: resident validityCheckRequired: true @@ -2551,7 +2551,7 @@ WalletBinding: }' Mimoto_WalletBinding_vid_Invalid_authFactorType1_Neg: - endPoint: v1/mimoto/wallet-binding + endPoint: /v1/mimoto/wallet-binding description: generating OTP to bind VID VC with invalid authFactorType1 role: resident validityCheckRequired: true From 15e46cfc8a254a7a43b76724b99585429e467f25 Mon Sep 17 00:00:00 2001 From: santhoshsunder Date: Fri, 30 Aug 2024 18:10:14 +0530 Subject: [PATCH 228/860] Task INJIMOB-1568 Signed-off-by: santhoshsunder --- apitest/src/main/resources/mimoto/CreateVID/CreateVid.yml | 3 +++ .../DownloadIssuerCredential/DownloadIssuerCredential.yml | 1 + 2 files changed, 4 insertions(+) diff --git a/apitest/src/main/resources/mimoto/CreateVID/CreateVid.yml b/apitest/src/main/resources/mimoto/CreateVID/CreateVid.yml index e1ab19217..4571e0476 100644 --- a/apitest/src/main/resources/mimoto/CreateVID/CreateVid.yml +++ b/apitest/src/main/resources/mimoto/CreateVID/CreateVid.yml @@ -1,6 +1,7 @@ CreateVID: Mimoto_Generate_Perpetual_VID_Valid_Smoke_sid: endPoint: /idrepository/v1/vid + description: Create perpetual VID with valid details role: idrepo restMethod: post inputTemplate: mimoto/CreateVID/createVid @@ -18,6 +19,7 @@ CreateVID: Mimoto_Generate_Temporary_VID_Valid_Smoke_sid: endPoint: /idrepository/v1/vid + description: Create temporary VID with valid details role: idrepo restMethod: post inputTemplate: mimoto/CreateVID/createVid @@ -35,6 +37,7 @@ CreateVID: Mimoto_Generate_Perpetual_VID_Binding_Valid_Smoke_sid: endPoint: /idrepository/v1/vid + description: Create perpetual VID for binding with valid details role: idrepo restMethod: post inputTemplate: mimoto/CreateVID/createVid diff --git a/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml b/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml index 376e94f8e..800547680 100644 --- a/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml +++ b/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml @@ -116,6 +116,7 @@ DownloadIssuerCredential: }' Mimoto_DownloadIssuerCredential_IssuerSunBird_All_Valid_Smoke: endPoint: /v1/mimoto/credentials/download + description: Downloading sunbird credential with valid authorizationCode role: resident restMethod: get checkErrorsOnlyInResponse: true From ff94484bebc0597d2caf54ba2c28961b56be9283 Mon Sep 17 00:00:00 2001 From: santhoshsunder Date: Fri, 30 Aug 2024 18:22:00 +0530 Subject: [PATCH 229/860] Task INJIMOB-1568 Signed-off-by: santhoshsunder --- .../mimoto/WalletBinding/WalletBinding.yml | 156 +++++++++--------- 1 file changed, 78 insertions(+), 78 deletions(-) diff --git a/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml b/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml index 00529e47b..ba2b8596c 100644 --- a/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml +++ b/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml @@ -1,7 +1,7 @@ WalletBinding: Mimoto_WalletBinding_uin_OTP_Valid_Smoke: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with valid UIN + description: Generating OTP to bind VC with valid UIN role: resident validityCheckRequired: true restMethod: post @@ -35,7 +35,7 @@ WalletBinding: Mimoto_WalletBinding_vid_OTP_Valid_Smoke: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with valid VID + description: Generating OTP to bind VC with valid VID role: resident validityCheckRequired: true restMethod: post @@ -69,7 +69,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_RequestTime_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with invalid request time + description: Generating OTP to bind VC with invalid request time role: resident validityCheckRequired: true restMethod: post @@ -108,7 +108,7 @@ WalletBinding: Mimoto_WalletBinding_uin_PastVal_RequestTime_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with past request time + description: Generating OTP to bind VC with past request time role: resident validityCheckRequired: true restMethod: post @@ -147,7 +147,7 @@ WalletBinding: Mimoto_WalletBinding_uin_FutureVal_RequestTime_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with future request time + description: Generating OTP to bind VC with future request time role: resident validityCheckRequired: true restMethod: post @@ -186,7 +186,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Empty_RequestTime_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with empty requestime + description: Generating OTP to bind VC with empty requestime role: resident validityCheckRequired: true restMethod: post @@ -225,7 +225,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_RequestTime_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with missing requestime + description: Generating OTP to bind VC with missing requestime role: resident validityCheckRequired: true restMethod: post @@ -264,7 +264,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_IndividualId_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with invalid individualId + description: Generating OTP to bind VC with invalid individualId role: resident validityCheckRequired: true restMethod: post @@ -303,7 +303,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Empty_IndividualId_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with empty individualId + description: Generating OTP to bind VC with empty individualId role: resident validityCheckRequired: true restMethod: post @@ -342,7 +342,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Null_IndividualId_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with individualId being null + description: Generating OTP to bind VC with individualId being null role: resident validityCheckRequired: true restMethod: post @@ -381,7 +381,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_IndividualId_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with individualId being missing + description: Generating OTP to bind VC with individualId being missing role: resident validityCheckRequired: true restMethod: post @@ -420,7 +420,7 @@ WalletBinding: Mimoto_WalletBinding_uin_SpaceVal_IndividualId_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with individualId value having space + description: Generating OTP to bind VC with individualId value having space role: resident validityCheckRequired: true restMethod: post @@ -459,7 +459,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_AuthFactorType_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with invalid authfactortype + description: Generating OTP to bind VC with invalid authfactortype role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -499,7 +499,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Empty_AuthFactorType_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with empty authfactortype + description: Generating OTP to bind VC with empty authfactortype role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -539,7 +539,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_AuthFactorType_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with missing authfactortype + description: Generating OTP to bind VC with missing authfactortype role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -579,7 +579,7 @@ WalletBinding: Mimoto_WalletBinding_uin_SpaceVal_AuthFactorType_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with authfactortype value being just space + description: Generating OTP to bind VC with authfactortype value being just space role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -619,7 +619,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Null_AuthFactorType_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with authfactortype value being just null + description: Generating OTP to bind VC with authfactortype value being just null role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -659,7 +659,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_Challenge_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with invalid challenge + description: Generating OTP to bind VC with invalid challenge role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -699,7 +699,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_Challenge_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with missing challenge + description: Generating OTP to bind VC with missing challenge role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -739,7 +739,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Empty_Challenge_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with empty challenge + description: Generating OTP to bind VC with empty challenge role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -779,7 +779,7 @@ WalletBinding: Mimoto_WalletBinding_uin_SpaceVal_Challenge_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with challenge value having space + description: Generating OTP to bind VC with challenge value having space role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -819,7 +819,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Null_Challenge_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with challenge value having null + description: Generating OTP to bind VC with challenge value having null role: resident validityCheckRequired: true allowedErrorCodes: @@ -859,7 +859,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_Formate_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with invalid formate + description: Generating OTP to bind VC with invalid formate role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -899,7 +899,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_Formate_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with missing formate + description: Generating OTP to bind VC with missing formate role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -939,7 +939,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Empty_Formate_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with empty formate + description: Generating OTP to bind VC with empty formate role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -979,7 +979,7 @@ WalletBinding: Mimoto_WalletBinding_uin_SpaceVal_Formate_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with formate value having space + description: Generating OTP to bind VC with formate value having space role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -1019,7 +1019,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Null_Formate_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with formate value having null + description: Generating OTP to bind VC with formate value having null role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -1059,7 +1059,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_authFactorType1_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with invalid authFactorType1 + description: Generating OTP to bind VC with invalid authFactorType1 role: resident validityCheckRequired: true restMethod: post @@ -1098,7 +1098,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_authFactorType1_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with missing authFactorType1 + description: Generating OTP to bind VC with missing authFactorType1 role: resident validityCheckRequired: true restMethod: post @@ -1137,7 +1137,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Empty_authFactorType1_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with empty authFactorType1 + description: Generating OTP to bind VC with empty authFactorType1 role: resident validityCheckRequired: true restMethod: post @@ -1176,7 +1176,7 @@ WalletBinding: Mimoto_WalletBinding_uin_SpaceVal_authFactorType1_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with authFactorType1 value having space + description: Generating OTP to bind VC with authFactorType1 value having space role: resident validityCheckRequired: true restMethod: post @@ -1215,7 +1215,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Null_authFactorType1_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with authFactorType1 value having null + description: Generating OTP to bind VC with authFactorType1 value having null role: resident validityCheckRequired: true restMethod: post @@ -1254,7 +1254,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_format1_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with invalid format1 + description: Generating OTP to bind VC with invalid format1 role: resident validityCheckRequired: true restMethod: post @@ -1293,7 +1293,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_format1_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with missing format1 + description: Generating OTP to bind VC with missing format1 role: resident validityCheckRequired: true restMethod: post @@ -1332,7 +1332,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Empty_format1_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with empty format1 + description: Generating OTP to bind VC with empty format1 role: resident validityCheckRequired: true restMethod: post @@ -1371,7 +1371,7 @@ WalletBinding: Mimoto_WalletBinding_uin_SpaceVal_format1_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with format1 value having space + description: Generating OTP to bind VC with format1 value having space role: resident validityCheckRequired: true restMethod: post @@ -1410,7 +1410,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Null_format1_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with format1 value having null + description: Generating OTP to bind VC with format1 value having null role: resident validityCheckRequired: true restMethod: post @@ -1449,7 +1449,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_publicKey_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with invalid publickey + description: Generating OTP to bind VC with invalid publickey role: resident validityCheckRequired: true restMethod: post @@ -1488,7 +1488,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Null_publicKey_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with null as publickey + description: Generating OTP to bind VC with null as publickey role: resident validityCheckRequired: true restMethod: post @@ -1527,7 +1527,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_publicKey_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VC with missing publickey + description: Generating OTP to bind VC with missing publickey role: resident validityCheckRequired: true restMethod: post @@ -1566,7 +1566,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_RequestTime_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind vid VC with invalid request time + description: Generating OTP to bind vid VC with invalid request time role: resident validityCheckRequired: true restMethod: post @@ -1605,7 +1605,7 @@ WalletBinding: Mimoto_WalletBinding_vid_PastVal_RequestTime_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind vid VC with past request time + description: Generating OTP to bind vid VC with past request time role: resident validityCheckRequired: true restMethod: post @@ -1644,7 +1644,7 @@ WalletBinding: Mimoto_WalletBinding_vid_FutureVal_RequestTime_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind vid VC with future request time + description: Generating OTP to bind vid VC with future request time role: resident validityCheckRequired: true restMethod: post @@ -1683,7 +1683,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Empty_RequestTime_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind vid VC with empty request time + description: Generating OTP to bind vid VC with empty request time role: resident validityCheckRequired: true restMethod: post @@ -1722,7 +1722,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_RequestTime_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind vid VC with missing request time + description: Generating OTP to bind vid VC with missing request time role: resident validityCheckRequired: true restMethod: post @@ -1761,7 +1761,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_IndividualId_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind vid VC with invalid individualId + description: Generating OTP to bind vid VC with invalid individualId role: resident validityCheckRequired: true restMethod: post @@ -1800,7 +1800,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Empty_IndividualId_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind vid VC with empty individualId + description: Generating OTP to bind vid VC with empty individualId role: resident validityCheckRequired: true restMethod: post @@ -1839,7 +1839,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Null_IndividualId_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind vid VC with null individualId + description: Generating OTP to bind vid VC with null individualId role: resident validityCheckRequired: true restMethod: post @@ -1878,7 +1878,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_IndividualId_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind vid VC with missing individualId + description: Generating OTP to bind vid VC with missing individualId role: resident validityCheckRequired: true restMethod: post @@ -1917,7 +1917,7 @@ WalletBinding: Mimoto_WalletBinding_vid_SpaceVal_IndividualId_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VID VC with individualId value having space + description: Generating OTP to bind VID VC with individualId value having space role: resident validityCheckRequired: true restMethod: post @@ -1956,7 +1956,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_AuthFactorType_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VID VC with invalid authfactortype + description: Generating OTP to bind VID VC with invalid authfactortype role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -1996,7 +1996,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Empty_AuthFactorType_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VID VC with empty authfactortype + description: Generating OTP to bind VID VC with empty authfactortype role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -2036,7 +2036,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_AuthFactorType_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VID VC with missing authfactortype + description: Generating OTP to bind VID VC with missing authfactortype role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -2076,7 +2076,7 @@ WalletBinding: Mimoto_WalletBinding_vid_SpaceVal_AuthFactorType_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VID VC with authfactortype value being just space + description: Generating OTP to bind VID VC with authfactortype value being just space role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -2116,7 +2116,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Null_AuthFactorType_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VID VC with authfactortype value being just null + description: Generating OTP to bind VID VC with authfactortype value being just null role: resident validityCheckRequired: true restMethod: post @@ -2155,7 +2155,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_Challenge_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VID VC with invalid challenge + description: Generating OTP to bind VID VC with invalid challenge role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -2195,7 +2195,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_Challenge_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VID VC with missing challenge + description: Generating OTP to bind VID VC with missing challenge role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -2235,7 +2235,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Empty_Challenge_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VID VC with empty challenge + description: Generating OTP to bind VID VC with empty challenge role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -2275,7 +2275,7 @@ WalletBinding: Mimoto_WalletBinding_vid_SpaceVal_Challenge_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VID VC with challenge value having space + description: Generating OTP to bind VID VC with challenge value having space role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -2315,7 +2315,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Null_Challenge_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VID VC with challenge value having null + description: Generating OTP to bind VID VC with challenge value having null role: resident validityCheckRequired: true restMethod: post @@ -2354,7 +2354,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_Formate_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VID VC with invalid formate + description: Generating OTP to bind VID VC with invalid formate role: resident validityCheckRequired: true restMethod: post @@ -2393,7 +2393,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_Formate_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VID VC with missing formate + description: Generating OTP to bind VID VC with missing formate role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -2433,7 +2433,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Empty_Formate_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VID VC with empty formate + description: Generating OTP to bind VID VC with empty formate role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -2473,7 +2473,7 @@ WalletBinding: Mimoto_WalletBinding_vid_SpaceVal_Formate_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VID VC with formate value having space + description: Generating OTP to bind VID VC with formate value having space role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -2513,7 +2513,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Null_Formate_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VID VC with formate value having null + description: Generating OTP to bind VID VC with formate value having null role: resident validityCheckRequired: true restMethod: post @@ -2552,7 +2552,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_authFactorType1_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VID VC with invalid authFactorType1 + description: Generating OTP to bind VID VC with invalid authFactorType1 role: resident validityCheckRequired: true restMethod: post @@ -2591,7 +2591,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_authFactorType1_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VID VC with missing authFactorType1 + description: Generating OTP to bind VID VC with missing authFactorType1 role: resident validityCheckRequired: true restMethod: post @@ -2630,7 +2630,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Empty_authFactorType1_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VID VC with empty authFactorType1 + description: Generating OTP to bind VID VC with empty authFactorType1 role: resident validityCheckRequired: true restMethod: post @@ -2669,7 +2669,7 @@ WalletBinding: Mimoto_WalletBinding_vid_SpaceVal_authFactorType1_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VID VC with authFactorType1 value having space + description: Generating OTP to bind VID VC with authFactorType1 value having space role: resident validityCheckRequired: true restMethod: post @@ -2708,7 +2708,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Null_authFactorType1_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VID VC with authFactorType1 value having null + description: Generating OTP to bind VID VC with authFactorType1 value having null role: resident validityCheckRequired: true restMethod: post @@ -2747,7 +2747,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_format1_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VID VC with invalid format1 + description: Generating OTP to bind VID VC with invalid format1 role: resident validityCheckRequired: true restMethod: post @@ -2786,7 +2786,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_format1_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VID VC with missing format1 + description: Generating OTP to bind VID VC with missing format1 role: resident validityCheckRequired: true restMethod: post @@ -2825,7 +2825,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Empty_format1_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VID VC with empty format1 + description: Generating OTP to bind VID VC with empty format1 role: resident validityCheckRequired: true restMethod: post @@ -2864,7 +2864,7 @@ WalletBinding: Mimoto_WalletBinding_vid_SpaceVal_format1_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VID VC with format1 value having space + description: Generating OTP to bind VID VC with format1 value having space role: resident validityCheckRequired: true restMethod: post @@ -2903,7 +2903,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Null_format1_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VID VC with format1 value having null + description: Generating OTP to bind VID VC with format1 value having null role: resident validityCheckRequired: true restMethod: post @@ -2942,7 +2942,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_publicKey_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VID VC with invalid publickey + description: Generating OTP to bind VID VC with invalid publickey role: resident validityCheckRequired: true restMethod: post @@ -2981,7 +2981,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Null_publicKey_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VID VC with null as publickey + description: Generating OTP to bind VID VC with null as publickey role: resident validityCheckRequired: true restMethod: post @@ -3020,7 +3020,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_publicKey_Neg: endPoint: /v1/mimoto/wallet-binding - description: generating OTP to bind VID VC with missing publickey + description: Generating OTP to bind VID VC with missing publickey role: resident validityCheckRequired: true restMethod: post From 38a07d9fdfeb7e018e5b34229ab7a93518449843 Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> Date: Wed, 4 Sep 2024 14:50:28 +0530 Subject: [PATCH 230/860] [INJIMOB-1078] add support for wellknown response of mso_mdoc VC format (#410) * [INJIMOB-1078] add support for wellknown response of mso_mdoc VC format Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> * [INJIMOB-1078] use builtin functions for performing equality check and map iteration Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> * [INJIMOB-1078] use builtin functions for performing equality check and map iteration Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> * [INJIMOB-1078] restructure test in CredentialIssuerWellknownResponseValidatorTest Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> * [INJIMOB-1078] refcator accessing of data Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> --------- Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com> --- .../mimoto/CredentialsSupportedResponse.java | 13 +- .../dto/mimoto/ProofTypesSupported.java | 2 + ...ntialIssuerWellknownResponseValidator.java | 31 +++ ...lIssuerWellknownResponseValidatorTest.java | 239 +++++++++++++----- .../io/mosip/mimoto/util/TestUtilities.java | 43 +++- .../responses/expectedWellknown.json | 14 +- 6 files changed, 264 insertions(+), 78 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java index 4c87de3d9..26dee4297 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java @@ -1,16 +1,18 @@ package io.mosip.mimoto.dto.mimoto; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.google.gson.annotations.SerializedName; import jakarta.validation.Valid; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; import lombok.Data; import java.util.List; import java.util.Map; +import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL; + @Data public class CredentialsSupportedResponse { @@ -20,16 +22,21 @@ public class CredentialsSupportedResponse { @NotBlank(message = "Scope must not be blank") private String scope; + @JsonInclude(NON_NULL) + private String doctype; + @NotEmpty(message = "Proof types supported must not be empty") @Valid @SerializedName("proof_types_supported") @JsonProperty("proof_types_supported") private Map<@NotEmpty String, @Valid ProofTypesSupported> proofTypesSupported; - @Valid - @NotNull + @JsonInclude(NON_NULL) + private Map claims; + @SerializedName("credential_definition") @JsonProperty("credential_definition") + @JsonInclude(NON_NULL) private CredentialDefinitionResponseDto credentialDefinition; @NotEmpty(message = "Display information must not be empty") diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/ProofTypesSupported.java b/src/main/java/io/mosip/mimoto/dto/mimoto/ProofTypesSupported.java index 15cfe4b46..cdd54087c 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/ProofTypesSupported.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/ProofTypesSupported.java @@ -3,10 +3,12 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.google.gson.annotations.SerializedName; import jakarta.validation.constraints.NotNull; +import lombok.Data; import javax.validation.constraints.NotEmpty; import java.util.List; +@Data public class ProofTypesSupported { @NotEmpty diff --git a/src/main/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidator.java b/src/main/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidator.java index db7cdfc29..31189e2a1 100644 --- a/src/main/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidator.java +++ b/src/main/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidator.java @@ -1,12 +1,17 @@ package io.mosip.mimoto.util; +import io.mosip.mimoto.dto.mimoto.CredentialDefinitionResponseDto; import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; +import io.mosip.mimoto.dto.mimoto.CredentialsSupportedResponse; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.InvalidWellknownResponseException; import jakarta.validation.ConstraintViolation; import jakarta.validation.Validator; +import org.apache.commons.lang.StringUtils; +import org.springframework.util.CollectionUtils; import java.util.Set; + public class CredentialIssuerWellknownResponseValidator { public void validate(CredentialIssuerWellKnownResponse response, Validator validator) throws ApiNotAccessibleException, InvalidWellknownResponseException { Set> violations = validator.validate(response); @@ -17,5 +22,31 @@ public void validate(CredentialIssuerWellKnownResponse response, Validator valid } throw new InvalidWellknownResponseException(sb.toString()); } + + for (CredentialsSupportedResponse supportedCredentialConfiguration : response.getCredentialConfigurationsSupported().values()) { + //TODO: Extract the vc specific validations to separate classes + if (supportedCredentialConfiguration.getFormat().equals("mso_mdoc")) { + if (StringUtils.isBlank(supportedCredentialConfiguration.getDoctype())) { + throw new InvalidWellknownResponseException("Mandatory field 'doctype' missing"); + } + if (CollectionUtils.isEmpty(supportedCredentialConfiguration.getClaims())) { + throw new InvalidWellknownResponseException("Mandatory field 'claims' missing"); + } + } + + if (supportedCredentialConfiguration.getFormat().equals("ldp_vc")) { + if (supportedCredentialConfiguration.getCredentialDefinition() == null) { + throw new InvalidWellknownResponseException("credentialDefinition: must not be null"); + } + Set> credentialDefinitionViolations = validator.validate(supportedCredentialConfiguration.getCredentialDefinition()); + if (!credentialDefinitionViolations.isEmpty()) { + StringBuilder sb = new StringBuilder("Validation failed:"); + for (ConstraintViolation violation : credentialDefinitionViolations) { + sb.append("\n").append(violation.getPropertyPath()).append(": ").append(violation.getMessage()); + } + throw new InvalidWellknownResponseException(sb.toString()); + } + } + } } } diff --git a/src/test/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidatorTest.java b/src/test/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidatorTest.java index e28a67053..dd88da1e3 100644 --- a/src/test/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidatorTest.java +++ b/src/test/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidatorTest.java @@ -10,19 +10,20 @@ import jakarta.validation.Validation; import jakarta.validation.Validator; import jakarta.validation.ValidatorFactory; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; + import static io.mosip.mimoto.util.TestUtilities.getCredentialIssuerWellKnownResponseDto; import static io.mosip.mimoto.util.TestUtilities.getCredentialSupportedResponse; -import static org.junit.Assert.assertThrows; +import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; public class CredentialIssuerWellknownResponseValidatorTest { @@ -41,17 +42,20 @@ public void shouldThrowExceptionWhenCredentialIssuerIsMissingInCredentialIssuerW Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); response.setCredentialIssuer(""); - response.setCredentialEndPoint("http://example.com"); + response.setCredentialEndPoint("http://example.com/credential"); CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> credentialIssuerWellknownResponseValidator.validate(response, validator)); assertEquals("RESIDENT-APP-041", invalidWellknownResponseException.getErrorCode()); - assertTrue(invalidWellknownResponseException.getMessage().contains("credentialIssuer: must not be blank"), "Exception message should indicate the missing 'credentialIssuer'"); + assertEquals(""" + RESIDENT-APP-041 --> Invalid Wellknown from Issuer + Validation failed: + credentialIssuer: must not be blank""", invalidWellknownResponseException.getMessage()); } @Test - public void shouldThrowExceptionWhenCredentialEndpointIsIncorrectInCredentialIssuerWellknownResponse() throws ApiNotAccessibleException { + public void shouldThrowExceptionWhenCredentialEndpointIsIncorrectInCredentialIssuerWellknownResponse() { CredentialIssuerWellKnownResponse response = getCredentialIssuerWellKnownResponseDto("Issuer1", Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); @@ -61,7 +65,10 @@ public void shouldThrowExceptionWhenCredentialEndpointIsIncorrectInCredentialIss InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> credentialIssuerWellknownResponseValidator.validate(response, validator)); assertEquals("RESIDENT-APP-041", invalidWellknownResponseException.getErrorCode()); - assertTrue(invalidWellknownResponseException.getMessage().contains("credentialEndPoint: must match \"https?://.*?/credential$\""), "Exception message should indicate the incorrect 'credentialEndpoint'"); + assertEquals(""" + RESIDENT-APP-041 --> Invalid Wellknown from Issuer + Validation failed: + credentialEndPoint: must match "https?://.*?/credential$\"""", invalidWellknownResponseException.getMessage(), "Exception message should indicate the incorrect 'credentialEndpoint'"); } @Test @@ -76,34 +83,28 @@ public void shouldThrowExceptionWhenAuthorizationServersIsEmpty() { InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> credentialIssuerWellknownResponseValidator.validate(response, validator)); assertEquals("RESIDENT-APP-041", invalidWellknownResponseException.getErrorCode()); - assertTrue(invalidWellknownResponseException.getMessage().contains("authorizationServers: must not be empty"), "Exception message should indicate 'authorizationServers' cannot be empty"); + assertEquals(""" + RESIDENT-APP-041 --> Invalid Wellknown from Issuer + Validation failed: + authorizationServers: must not be empty""", invalidWellknownResponseException.getMessage(), "Exception message should indicate 'authorizationServers' cannot be empty"); } @Test public void shouldThrowExceptionWhenFormatIsMissingInCredentialsSupported() { + CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupportedResponse("CredentialType1"); + credentialsSupportedResponse.setFormat(null); CredentialIssuerWellKnownResponse response = getCredentialIssuerWellKnownResponseDto("Issuer1", - Map.of("CredentialType1", new CredentialsSupportedResponse())); // `format` is not set, default is null + Map.of("CredentialType1", credentialsSupportedResponse)); - response.getCredentialConfigurationsSupported().get("CredentialType1").setFormat(null); CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> credentialIssuerWellknownResponseValidator.validate(response, validator)); assertEquals("RESIDENT-APP-041", invalidWellknownResponseException.getErrorCode()); - assertTrue(invalidWellknownResponseException.getMessage().contains("format: Format must not be blank"), "Exception message should indicate 'format' must not be blank"); - } - - @Test - public void shouldThrowExceptionWhenCredentialDefinitionTypeIsEmpty() { - CredentialIssuerWellKnownResponse response = getCredentialIssuerWellKnownResponseDto("Issuer1", - Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); - response.getCredentialConfigurationsSupported().get("CredentialType1").getCredentialDefinition().setType(Collections.emptyList()); // Invalid empty list - - CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); - InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> - credentialIssuerWellknownResponseValidator.validate(response, validator)); - assertEquals("RESIDENT-APP-041", invalidWellknownResponseException.getErrorCode()); - assertTrue(invalidWellknownResponseException.getMessage().contains("type: must not be empty"), "Exception message should indicate 'type' must not be empty"); + assertEquals(""" + RESIDENT-APP-041 --> Invalid Wellknown from Issuer + Validation failed: + credentialConfigurationsSupported[CredentialType1].format: Format must not be blank""", invalidWellknownResponseException.getMessage(), "Exception message should indicate 'format' must not be blank"); } @Test @@ -112,11 +113,14 @@ public void shouldThrowExceptionWhenLogoUrlIsInvalid() { Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); response.getCredentialConfigurationsSupported().get("CredentialType1").getDisplay().getFirst().getLogo().setUrl("ftp//invalid-url"); // Invalid URL CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); + InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> credentialIssuerWellknownResponseValidator.validate(response, validator)); assertEquals("RESIDENT-APP-041", invalidWellknownResponseException.getErrorCode()); - System.out.println(invalidWellknownResponseException.getMessage()); - assertTrue(invalidWellknownResponseException.getMessage().contains("logo.url: must be a valid URL"), "Exception message should indicate 'logo.url' must be a valid URL"); + assertEquals(""" + RESIDENT-APP-041 --> Invalid Wellknown from Issuer + Validation failed: + credentialConfigurationsSupported[CredentialType1].display[0].logo.url: must be a valid URL""", invalidWellknownResponseException.getMessage(), "Exception message should indicate 'logo.url' must be a valid URL"); } @Test @@ -127,11 +131,14 @@ public void shouldThrowExceptionWhenBackgroundImageUrlIsInvalid() { response.getCredentialConfigurationsSupported().get("CredentialType1").getDisplay().getFirst().setBackgroundImage(new BackgroundImageDTO("local//imgbasebase64")); CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); + InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> credentialIssuerWellknownResponseValidator.validate(response, validator)); - System.out.println(invalidWellknownResponseException.getMessage()); assertEquals("RESIDENT-APP-041", invalidWellknownResponseException.getErrorCode()); - assertTrue(invalidWellknownResponseException.getMessage().contains("backgroundImage.uri: must be a valid URL"), "Exception message should indicate 'background_image.uri' must be a valid URL"); + assertEquals(""" + RESIDENT-APP-041 --> Invalid Wellknown from Issuer + Validation failed: + credentialConfigurationsSupported[CredentialType1].display[0].backgroundImage.uri: must be a valid URL""", invalidWellknownResponseException.getMessage(), "Exception message should indicate 'background_image.uri' must be a valid URL"); } @Test @@ -144,19 +151,20 @@ public void shouldDetectMissingMandatoryFields() { response.setAuthorizationServers(null); response.setCredentialIssuer(null); CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); + InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> credentialIssuerWellknownResponseValidator.validate(response, validator)); assertEquals("RESIDENT-APP-041", invalidWellknownResponseException.getErrorCode()); - assertTrue(invalidWellknownResponseException.getMessage().contains("authorizationServers: must not be empty")); - assertTrue(invalidWellknownResponseException.getMessage().contains("credentialIssuer: must not be blank")); - assertTrue(invalidWellknownResponseException.getMessage().contains("credentialConfigurationsSupported: must not be empty")); - assertTrue(invalidWellknownResponseException.getMessage().contains("credentialEndPoint: must not be blank")); - + assertTrue(Arrays.stream(invalidWellknownResponseException.getMessage().split("\n")).collect(Collectors.toList()).containsAll(List.of("RESIDENT-APP-041 --> Invalid Wellknown from Issuer", + "Validation failed:", + "credentialIssuer: must not be blank", + "credentialConfigurationsSupported: must not be empty", + "authorizationServers: must not be empty", + "credentialEndPoint: must not be blank"))); } @Test public void shouldDetectMissingMandatoryFieldsOfCredentialSupportedResponse() { - CredentialIssuerWellKnownResponse response = getCredentialIssuerWellKnownResponseDto("Issuer1", Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); response.getCredentialConfigurationsSupported().get("CredentialType1").setFormat(null); @@ -165,26 +173,32 @@ public void shouldDetectMissingMandatoryFieldsOfCredentialSupportedResponse() { response.getCredentialConfigurationsSupported().get("CredentialType1").setProofTypesSupported(null); response.getCredentialConfigurationsSupported().get("CredentialType1").setCredentialDefinition(null); CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); + InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> credentialIssuerWellknownResponseValidator.validate(response, validator)); assertEquals("RESIDENT-APP-041", invalidWellknownResponseException.getErrorCode()); - assertTrue(invalidWellknownResponseException.getMessage().contains("format: Format must not be blank")); - assertTrue(invalidWellknownResponseException.getMessage().contains("scope: Scope must not be blank")); - assertTrue(invalidWellknownResponseException.getMessage().contains("proofTypesSupported: Proof types supported must not be empty")); - assertTrue(invalidWellknownResponseException.getMessage().contains("credentialDefinition: must not be null")); - assertTrue(invalidWellknownResponseException.getMessage().contains("display: Display information must not be empty")); - + assertTrue(Arrays.stream(invalidWellknownResponseException.getMessage().split("\n")).toList().containsAll(Arrays.stream(""" + RESIDENT-APP-041 --> Invalid Wellknown from Issuer + Validation failed: + credentialConfigurationsSupported[CredentialType1].proofTypesSupported: Proof types supported must not be empty + credentialConfigurationsSupported[CredentialType1].scope: Scope must not be blank + credentialConfigurationsSupported[CredentialType1].format: Format must not be blank + credentialConfigurationsSupported[CredentialType1].display: Display information must not be empty""".split("\n")).toList())); } @Test public void shouldDetectMissingProofAlgorithmsSupported() { CredentialIssuerWellKnownResponse response = getCredentialIssuerWellKnownResponseDto("Issuer1", Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); - response.getCredentialConfigurationsSupported().get("CredentialType1").getProofTypesSupported().get("jwt"); + response.getCredentialConfigurationsSupported().get("CredentialType1").getProofTypesSupported().get("jwt").setProofSigningAlgValuesSupported(null); CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); + InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> credentialIssuerWellknownResponseValidator.validate(response, validator)); - assertTrue(invalidWellknownResponseException.getMessage().contains("proofSigningAlgValuesSupported: must not be null")); + assertEquals(""" + RESIDENT-APP-041 --> Invalid Wellknown from Issuer + Validation failed: + credentialConfigurationsSupported[CredentialType1].proofTypesSupported[jwt].proofSigningAlgValuesSupported: must not be null""", invalidWellknownResponseException.getMessage()); } @Test @@ -202,32 +216,127 @@ public void shouldDetectMissingMandatoryFieldsOfCredentialSupportedDisplayRespon credentialSupportedDisplayResponse.setBackgroundImage(null); credentialSupportedDisplayResponseList.add(credentialSupportedDisplayResponse); response.getCredentialConfigurationsSupported().get("CredentialType1").setDisplay(credentialSupportedDisplayResponseList); - CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); + InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> credentialIssuerWellknownResponseValidator.validate(response, validator) ); - assertTrue(invalidWellknownResponseException.getMessage().contains("name: must not be blank")); - assertTrue(invalidWellknownResponseException.getMessage().contains("locale: must not be blank")); - assertTrue(invalidWellknownResponseException.getMessage().contains("backgroundImage: must not be null")); - assertTrue(invalidWellknownResponseException.getMessage().contains("backgroundColor: must not be blank")); - assertTrue(invalidWellknownResponseException.getMessage().contains("textColor: must not be blank")); + assertTrue(Arrays.stream(invalidWellknownResponseException.getMessage().split("\n")).collect(Collectors.toList()).containsAll(Arrays.stream(""" + RESIDENT-APP-041 --> Invalid Wellknown from Issuer + Validation failed: + credentialConfigurationsSupported[CredentialType1].display[0].backgroundColor: must not be blank + credentialConfigurationsSupported[CredentialType1].display[0].textColor: must not be blank + credentialConfigurationsSupported[CredentialType1].display[0].backgroundImage: must not be null + credentialConfigurationsSupported[CredentialType1].display[0].name: must not be blank + credentialConfigurationsSupported[CredentialType1].display[0].locale: must not be blank + credentialConfigurationsSupported[CredentialType1].display[0].logo: must not be null""".split("\n")).toList())); } - @Test - public void shouldDetectMissingMandatoryFieldsOfCredentialDefinitionResponseDtoResponse() { - CredentialIssuerWellKnownResponse response = getCredentialIssuerWellKnownResponseDto("Issuer1", - Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); - CredentialDefinitionResponseDto credentialDefinitionResponseDto=new CredentialDefinitionResponseDto(); - credentialDefinitionResponseDto.setCredentialSubject(null); - credentialDefinitionResponseDto.setType(null); - response.getCredentialConfigurationsSupported().get("CredentialType1").setCredentialDefinition(credentialDefinitionResponseDto); - CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); - InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> - credentialIssuerWellknownResponseValidator.validate(response, validator) - ); - assertTrue(invalidWellknownResponseException.getMessage().contains("type: must not be empty")); - assertTrue(invalidWellknownResponseException.getMessage().contains("credentialSubject: must not be empty")); + @Nested + class LdpVcFormatWellKnownResponseValidationTest { + @Test + public void shouldDetectMissingMandatoryFieldsCredentialDefinitionOfCredentialSupportedResponse() { + CredentialIssuerWellKnownResponse response = getCredentialIssuerWellKnownResponseDto("Issuer1", + Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); + response.getCredentialConfigurationsSupported().get("CredentialType1").setCredentialDefinition(null); + CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); + + InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> + credentialIssuerWellknownResponseValidator.validate(response, validator)); + assertEquals("RESIDENT-APP-041", invalidWellknownResponseException.getErrorCode()); + assertEquals(""" + RESIDENT-APP-041 --> Invalid Wellknown from Issuer + credentialDefinition: must not be null""", invalidWellknownResponseException.getMessage()); + } + + @Test + public void shouldDetectMissingMandatoryFieldsOfCredentialDefinitionInWellknownResponse() { + CredentialIssuerWellKnownResponse response = getCredentialIssuerWellKnownResponseDto("Issuer1", + Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); + CredentialDefinitionResponseDto credentialDefinitionResponseDto = new CredentialDefinitionResponseDto(); + credentialDefinitionResponseDto.setCredentialSubject(null); + credentialDefinitionResponseDto.setType(null); + response.getCredentialConfigurationsSupported().get("CredentialType1").setCredentialDefinition(credentialDefinitionResponseDto); + + CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); + InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> + credentialIssuerWellknownResponseValidator.validate(response, validator) + ); + + assertTrue(Arrays.stream(invalidWellknownResponseException.getMessage().split("\n")).toList().containsAll(Arrays.stream(""" + RESIDENT-APP-041 --> Invalid Wellknown from Issuer + Validation failed: + type: must not be empty + credentialSubject: must not be empty""".split("\n")).toList())); + } + + @Test + public void shouldThrowExceptionWhenCredentialDefinitionTypeIsEmpty() { + CredentialIssuerWellKnownResponse response = getCredentialIssuerWellKnownResponseDto("Issuer1", + Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); + response.getCredentialConfigurationsSupported().get("CredentialType1").getCredentialDefinition().setType(Collections.emptyList()); // Invalid empty list + + CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); + + InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> + credentialIssuerWellknownResponseValidator.validate(response, validator)); + assertEquals("RESIDENT-APP-041", invalidWellknownResponseException.getErrorCode()); + assertEquals(""" + RESIDENT-APP-041 --> Invalid Wellknown from Issuer + Validation failed: + type: must not be empty""", invalidWellknownResponseException.getMessage()); + } + } + + @Nested + class MsoMdocFormatWellKnownResponseValidationTest { + + @Test + void shouldThrowInvalidWellKnownResponseExceptionWhenMandatoryFieldDocTypeIsNotPresent() { + CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); + CredentialsSupportedResponse credentialSupportedResponse1 = getCredentialSupportedResponse("CredentialType1", "mso_mdoc"); + credentialSupportedResponse1.setDoctype(""); + CredentialIssuerWellKnownResponse wellKnownResponseWithoutDocType = getCredentialIssuerWellKnownResponseDto("Issuer1", + Map.of("CredentialType1", credentialSupportedResponse1)); + + InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> + credentialIssuerWellknownResponseValidator.validate(wellKnownResponseWithoutDocType, validator) + ); + + assertEquals(""" + RESIDENT-APP-041 --> Invalid Wellknown from Issuer + Mandatory field 'doctype' missing""", invalidWellknownResponseException.getMessage()); + } + + @Test + void shouldThrowInvalidWellKnownResponseExceptionWhenMandatoryFieldClaimIsNotPresent() { + CredentialsSupportedResponse credentialSupportedResponse = getCredentialSupportedResponse("CredentialType1", "mso_mdoc"); + credentialSupportedResponse.setClaims(Map.of()); + CredentialIssuerWellKnownResponse wellKnownResponseWithoutClaims = getCredentialIssuerWellKnownResponseDto("Issuer1", + Map.of("CredentialType1", credentialSupportedResponse)); + + CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); + InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> + credentialIssuerWellknownResponseValidator.validate(wellKnownResponseWithoutClaims, validator) + ); + + assertEquals(""" + RESIDENT-APP-041 --> Invalid Wellknown from Issuer + Mandatory field 'claims' missing""", invalidWellknownResponseException.getMessage()); + } + + + @Test + void shouldNotThrowInvalidWellKnownResponseExceptionWhenMandatoryFieldsAreNotPresentInMsoMdocVc() { + CredentialIssuerWellKnownResponse wellKnownResponseWithoutClaims = getCredentialIssuerWellKnownResponseDto("Issuer1", + Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1", "mso_mdoc"))); + + CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); + + assertDoesNotThrow(() -> + credentialIssuerWellknownResponseValidator.validate(wellKnownResponseWithoutClaims, validator)); + + } } } diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index 163a7cad2..b7a04ec38 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -20,9 +20,10 @@ public class TestUtilities { public static CredentialsSupportedResponse getCredentialSupportedResponse(String credentialSupportedName){ LogoDTO logo = new LogoDTO(); - logo.setUrl("/logo"); + logo.setUrl("https://logo"); logo.setAlt_text("logo-url"); CredentialSupportedDisplayResponse credentialSupportedDisplay = new CredentialSupportedDisplayResponse(); + credentialSupportedDisplay.setBackgroundImage(new BackgroundImageDTO("https://bgimage")); credentialSupportedDisplay.setLogo(logo); credentialSupportedDisplay.setName(credentialSupportedName); credentialSupportedDisplay.setLocale("en"); @@ -41,19 +42,53 @@ public static CredentialsSupportedResponse getCredentialSupportedResponse(String credentialsSupportedResponse.setScope(credentialSupportedName+"_vc_ldp"); credentialsSupportedResponse.setDisplay(Collections.singletonList(credentialSupportedDisplay)); HashMap proofTypesSupportedHashMap=new HashMap<>(); - proofTypesSupportedHashMap.put("jwt",new ProofTypesSupported()); + ProofTypesSupported proofTypesSupported = new ProofTypesSupported(); + proofTypesSupported.setProofSigningAlgValuesSupported(List.of("RS256")); + proofTypesSupportedHashMap.put("jwt",proofTypesSupported); credentialsSupportedResponse.setProofTypesSupported(proofTypesSupportedHashMap); credentialsSupportedResponse.setCredentialDefinition(credentialDefinitionResponseDto); return credentialsSupportedResponse; } + public static CredentialsSupportedResponse getCredentialSupportedResponse(String credentialSupportedName, String format){ + LogoDTO logo = new LogoDTO(); + logo.setUrl("https://logo"); + logo.setAlt_text("logo-url"); + CredentialSupportedDisplayResponse credentialSupportedDisplay = new CredentialSupportedDisplayResponse(); + credentialSupportedDisplay.setLogo(logo); + credentialSupportedDisplay.setName(credentialSupportedName); + credentialSupportedDisplay.setLocale("en"); + credentialSupportedDisplay.setTextColor("#FFFFFF"); + credentialSupportedDisplay.setBackgroundColor("#B34622"); + credentialSupportedDisplay.setBackgroundImage(new BackgroundImageDTO("https://bgimage")); + CredentialIssuerDisplayResponse credentialIssuerDisplayResponse = new CredentialIssuerDisplayResponse(); + credentialIssuerDisplayResponse.setName("Given Name"); + credentialIssuerDisplayResponse.setLocale("en"); + CredentialDisplayResponseDto credentialDisplayResponseDto = new CredentialDisplayResponseDto(); + credentialDisplayResponseDto.setDisplay(Collections.singletonList(credentialIssuerDisplayResponse)); + CredentialsSupportedResponse credentialsSupportedResponse = new CredentialsSupportedResponse(); + credentialsSupportedResponse.setFormat(format); + credentialsSupportedResponse.setScope(credentialSupportedName+"_vc_"+format); + credentialsSupportedResponse.setDisplay(Collections.singletonList(credentialSupportedDisplay)); + HashMap proofTypesSupportedHashMap=new HashMap<>(); + ProofTypesSupported proofTypesSupported = new ProofTypesSupported(); + proofTypesSupported.setProofSigningAlgValuesSupported(List.of("RS256")); + proofTypesSupportedHashMap.put("jwt", proofTypesSupported); + credentialsSupportedResponse.setProofTypesSupported(proofTypesSupportedHashMap); + credentialsSupportedResponse.setDoctype("org.iso.18018"); + credentialsSupportedResponse.setClaims(Map.of("org.iso.18018", Map.of("given_name",Map.of("display", List.of(Map.of("name","Given Name","locale","en")))))); + return credentialsSupportedResponse; + } + public static CredentialIssuerWellKnownResponse getCredentialIssuerWellKnownResponseDto(String issuerName, Map credentialsSupportedResponses){ CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = new CredentialIssuerWellKnownResponse(); - credentialIssuerWellKnownResponse.setCredentialIssuer(issuerName); - credentialIssuerWellKnownResponse.setCredentialEndPoint("/credential_endpoint"); + credentialIssuerWellKnownResponse.setCredentialIssuer("https://dev/"+issuerName); + credentialIssuerWellKnownResponse.setCredentialEndPoint("https://dev/issuance/credential"); + credentialIssuerWellKnownResponse.setAuthorizationServers(List.of("https://dev.net")); credentialIssuerWellKnownResponse.setCredentialConfigurationsSupported(credentialsSupportedResponses); return credentialIssuerWellKnownResponse; } + public static IssuerDTO getIssuerDTO(String issuerName) { LogoDTO logo = new LogoDTO(); logo.setUrl("/logo"); diff --git a/src/test/resources/responses/expectedWellknown.json b/src/test/resources/responses/expectedWellknown.json index db3290afb..58e803e62 100644 --- a/src/test/resources/responses/expectedWellknown.json +++ b/src/test/resources/responses/expectedWellknown.json @@ -1,7 +1,7 @@ { - "credential_issuer": "id1", - "authorization_servers": null, - "credential_endpoint": "/credential_endpoint", + "credential_issuer": "https://dev/id1", + "authorization_servers": ["https://dev.net"], + "credential_endpoint": "https://dev/issuance/credential", "credential_configurations_supported": { "CredentialType1": { "format": "ldp_vc", @@ -28,14 +28,16 @@ "name": "Credential1", "locale": "en", "logo": { - "url": "/logo", + "url": "https://logo", "alt_text": "logo-url" }, - "background_image": null, + "background_image": { + "uri": "https://bgimage" + }, "background_color": "#B34622", "text_color": "#FFFFFF" } ] } } -} \ No newline at end of file +} From 56848dbcd289904d73c6d1f91a68328fa23b3b16 Mon Sep 17 00:00:00 2001 From: Vijay Kumar S <94220135+vijay151096@users.noreply.github.com> Date: Thu, 5 Sep 2024 20:47:44 +0530 Subject: [PATCH 231/860] [INJIWEB-759] : Update pixelpass dependency version and kernel Version with StopLight & Postman (#419) * [INJIWEB-723] : release version upgrade with postman and stoplight inclusion (#415) * [INJIWEB-721] : update snapshot version for release 14.x Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-723] : release version upgrade with postman and stoplight inclusion Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-723] : release version upgrade with postman and stoplight inclusion Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-723] : release version upgrade with postman and stoplight inclusion Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-723] : release version upgrade with postman and stoplight inclusion Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-759C] : update pixel pass library Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- .../MIMOTO.postman_collection.json | 250 +- docs/stoplight/mimoto_openapi_spec.json | 2745 +++++++++++++++++ pom.xml | 16 +- 3 files changed, 2990 insertions(+), 21 deletions(-) create mode 100644 docs/stoplight/mimoto_openapi_spec.json diff --git a/docs/postman-collections/MIMOTO.postman_collection.json b/docs/postman-collections/MIMOTO.postman_collection.json index aaf06f78d..f8ea3ede9 100644 --- a/docs/postman-collections/MIMOTO.postman_collection.json +++ b/docs/postman-collections/MIMOTO.postman_collection.json @@ -1,8 +1,8 @@ { "info": { - "_postman_id": "3f372076-5eb8-45f3-8476-2a591301de8b", + "_postman_id": "070c5a99-ffc3-48fb-9259-d9170916c728", "name": "MIMOTO", - "schema": "https://schema.getpostman.com/json/collection/v2.0.0/collection.json", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json", "_exporter_id": "26539037" }, "item": [ @@ -14,7 +14,16 @@ "request": { "method": "GET", "header": [], - "url": "{{HOST}}/issuers/" + "url": { + "raw": "{{HOST}}/issuers", + "host": [ + "{{HOST}}" + ], + "path": [ + "issuers", + "" + ] + } }, "response": [] }, @@ -23,7 +32,150 @@ "request": { "method": "GET", "header": [], - "url": "{{HOST}}/issuers/ESignet" + "url": { + "raw": "{{HOST}}/issuers/StayProtected", + "host": [ + "{{HOST}}" + ], + "path": [ + "issuers", + "StayProtected" + ] + } + }, + "response": [] + }, + { + "name": "get Issuers Wellknown", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{HOST}}/issuers/StayProtected/.well-known", + "host": [ + "{{HOST}}" + ], + "path": [ + "issuers", + "StayProtected", + ".well-known" + ] + } + }, + "response": [] + }, + { + "name": "Search Issuers List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{HOST}}/issuers?search=Sunbird", + "host": [ + "{{HOST}}" + ], + "path": [ + "issuers" + ], + "query": [ + { + "key": "search", + "value": "Sunbird" + } + ] + } + }, + "response": [] + }, + { + "name": "Download Credential With GetToken", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "grant_type", + "value": "authorization_code", + "type": "text" + }, + { + "key": "code", + "value": "GL9N1V-zW_OFgLSa2VBANv8qz6XOxh3yBkoaonjplms", + "type": "text" + }, + { + "key": "redirect_uri", + "value": "https://injiweb.dev1.mosip.net/redirect", + "type": "text" + }, + { + "key": "code_verifier", + "value": "Sq6nZNToevtx8LX-H2LI_~_Ds9vZGAImDKYjXw70LCJ", + "type": "text" + }, + { + "key": "issuer", + "value": "StayProtected", + "type": "text" + }, + { + "key": "credential", + "value": "InsuranceCredential", + "type": "text" + } + ] + }, + "url": { + "raw": "{{HOST}}/credentials/download", + "host": [ + "{{HOST}}" + ], + "path": [ + "credentials", + "download" + ] + } + }, + "response": [] + }, + { + "name": "Presentation Authorize", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{HOST}}/authorize?response_type=vp_token&resource=https://raw.githubusercontent.com/tw-mosip/verify-credential-js/main/VC/sunbird_qr.json&client_id=https://injiverify.dev2.mosip.net&redirect_uri=https://injiverify.dev2.mosip.net/redirect&presentation_definition=%7B%22id%22%3A%22vp%20token%20example%22%2C%22input_descriptors%22%3A%5B%7B%22id%22%3A%22id%20card%20credential%22%2C%22format%22%3A%7B%22ldpVc%22%3A%7B%22proofTypes%22%3A%5B%22Ed25519Signature2020%22%5D%7D%7D%7D%5D%7D", + "host": [ + "{{HOST}}" + ], + "path": [ + "authorize" + ], + "query": [ + { + "key": "response_type", + "value": "vp_token" + }, + { + "key": "resource", + "value": "https://raw.githubusercontent.com/tw-mosip/verify-credential-js/main/VC/sunbird_qr.json" + }, + { + "key": "client_id", + "value": "https://injiverify.dev2.mosip.net" + }, + { + "key": "redirect_uri", + "value": "https://injiverify.dev2.mosip.net/redirect" + }, + { + "key": "presentation_definition", + "value": "%7B%22id%22%3A%22vp%20token%20example%22%2C%22input_descriptors%22%3A%5B%7B%22id%22%3A%22id%20card%20credential%22%2C%22format%22%3A%7B%22ldpVc%22%3A%7B%22proofTypes%22%3A%5B%22Ed25519Signature2020%22%5D%7D%7D%7D%5D%7D" + } + ] + } }, "response": [] } @@ -46,7 +198,16 @@ } } }, - "url": "{{HOST}}/req/otp" + "url": { + "raw": "{{HOST}}/req/otp", + "host": [ + "{{HOST}}" + ], + "path": [ + "req", + "otp" + ] + } }, "response": [] }, @@ -75,7 +236,16 @@ } } }, - "url": "{{HOST}}/credentialshare/request" + "url": { + "raw": "{{HOST}}/credentialshare/request", + "host": [ + "{{HOST}}" + ], + "path": [ + "credentialshare", + "request" + ] + } }, "response": [] }, @@ -96,7 +266,18 @@ } } }, - "url": "{{HOST}}/credentialshare/request/status/c0fc00ae-6fc7-4e9f-b818-f51827582c2f" + "url": { + "raw": "{{HOST}}/credentialshare/request/status/c0fc00ae-6fc7-4e9f-b818-f51827582c2f", + "host": [ + "{{HOST}}" + ], + "path": [ + "credentialshare", + "request", + "status", + "c0fc00ae-6fc7-4e9f-b818-f51827582c2f" + ] + } }, "response": [] }, @@ -125,7 +306,16 @@ } } }, - "url": "{{HOST}}/credentialshare/download" + "url": { + "raw": "{{HOST}}/credentialshare/download", + "host": [ + "{{HOST}}" + ], + "path": [ + "credentialshare", + "download" + ] + } }, "response": [] } @@ -152,7 +342,15 @@ "mode": "raw", "raw": "{\n \"requestTime\": \"{{$isoTimestamp}}\",\n \"request\": {\n \"individualId\": \"4536710485\",\n \"otpChannels\": [\n \"EMAIL\",\n \"PHONE\"\n ]\n }\n}" }, - "url": "{{HOST}}/binding-otp" + "url": { + "raw": "{{HOST}}/binding-otp", + "host": [ + "{{HOST}}" + ], + "path": [ + "binding-otp" + ] + } }, "response": [] }, @@ -174,7 +372,15 @@ "mode": "raw", "raw": "{\n \"requestTime\": \"{{$isoTimestamp}}\",\n \"request\": {\n \"individualId\": \"6148072053\",\n \"challengeList\": [\n {\n \"authFactorType\": \"OTP\",\n \"challenge\": \"111111\",\n \"format\": \"alpha-numeric\"\n }\n ],\n \"publicKey\": \"-----BEGIN RSA PUBLIC KEY-----\\nMIICCgKCAgEArk/N6Us8TkfH+r1UGCqTGWegJ3UzqHXmj49uE3l9ygIPrTB7Hee8\\ntiVnlNKcQR/7EipumAcNzOFzaysUUIX8rh/QSdlwYYXvC4OT9fLg5tmToYc5x3pN\\nO1k7qg9fnMb/Ksr4D95xUUxQjMLlbojBNWjLhvdP4da1gWUeAdfjIfyLjZGYiD8r\\nUqsVqOfmrec9Y0nLsIsUq735NVl2WIP9mMfjXuRId4MgEE3mN6x/Gj9Ov0AWfb48\\n22wLgybggTdIJZlCBAnPn/n+oiowqUdXADAB4CIaVH8hDJ1fz3Ag2RetriqwrcLF\\nVSK+PyVuLD261BhIeQrgyHdKC6qilVBOYIMqtXjazCdjGICNFoEa1nVP6mu85RN1\\ny8TTS+4ATUTm44++TFSNfsEEpagvd6O/BWlj6mJNGB9dmtEohowwR5fcSHgKbGtP\\ng5J49fKeSDapEln2A/xL7Ubk8KFzzgcQvPWttGaazs7tqdOE4iOMkI72XFbyvIVz\\nzwQEB7vOuRJRclP30SkcR81u694vCtXJ2t2pFUMQVJXat9ypg5BtiZMwBtAnc0Pz\\nDWdGCR5LIpJIaDISmPumHGAzeeRfREbsoVaCdi99vORoxBjuscpEOa5+MgYDKM3S\\nsJZWl2E2/7Kt9KCRVJoqeEkFFKq696zKVD3qbhbZJG3TjBcgYfbN2jMCAwEAAQ==\\n-----END RSA PUBLIC KEY-----\\n\",\n \"authFactorType\": \"WLA\",\n \"format\": \"jwt\"\n }\n}" }, - "url": "{{HOST}}/wallet-binding" + "url": { + "raw": "{{HOST}}/wallet-binding", + "host": [ + "{{HOST}}" + ], + "path": [ + "wallet-binding" + ] + } }, "response": [] } @@ -185,7 +391,15 @@ "request": { "method": "GET", "header": [], - "url": "{{HOST}}/allProperties" + "url": { + "raw": "{{HOST}}/allProperties", + "host": [ + "{{HOST}}" + ], + "path": [ + "allProperties" + ] + } }, "response": [] }, @@ -203,9 +417,19 @@ } } }, - "url": "{{HOST}}/req/individualId/otp" + "url": { + "raw": "{{HOST}}/req/individualId/otp", + "host": [ + "{{HOST}}" + ], + "path": [ + "req", + "individualId", + "otp" + ] + } }, "response": [] } ] -} \ No newline at end of file +} diff --git a/docs/stoplight/mimoto_openapi_spec.json b/docs/stoplight/mimoto_openapi_spec.json new file mode 100644 index 000000000..6acef56f9 --- /dev/null +++ b/docs/stoplight/mimoto_openapi_spec.json @@ -0,0 +1,2745 @@ +{ + "openapi": "3.0.1", + "x-stoplight": { + "id": "5bf5a1n68g4tq" + }, + "info": { + "title": "mimoto", + "description": "mimoto", + "license": { + "name": "Mosip", + "url": "https://docs.mosip.io/platform/license" + }, + "version": "1.0" + }, + "servers": [ + { + "url": "https://api.collab.mosip.net/v1/mimoto", + "description": "For Swagger" + } + ], + "paths": { + "/req/otp": { + "post": { + "operationId": "otpRequest", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AppOTPRequestDTO" + }, + "examples": { + "example-1": { + "value": { + "individualId": "1289358704", + "individualIdType": "UIN", + "otpChannel": [ + "EMAIL", + "PHONE" + ], + "transactionID": "1234567890" + } + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "version": { + "type": "string" + }, + "str": { + "type": "null" + }, + "responsetime": { + "type": "null" + }, + "metadata": { + "type": "null" + }, + "response": { + "type": "object", + "properties": { + "maskedMobile": { + "type": "string" + }, + "maskedEmail": { + "type": "string" + } + } + }, + "errors": { + "type": "null" + } + }, + "x-examples": { + "Example 1": { + "id": "mosip.identity.otp.internal", + "version": "1.0", + "str": null, + "responsetime": null, + "metadata": null, + "response": { + "maskedMobile": "XXXXXX6677", + "maskedEmail": "XXuXXrXX5XX9@gmail.com" + }, + "errors": null + } + } + }, + "examples": { + "example-1": { + "value": { + "id": "mosip.identity.otp.internal", + "version": "1.0", + "str": null, + "responsetime": null, + "metadata": null, + "response": { + "maskedMobile": "XXXXXX6677", + "maskedEmail": "XXuXXrXX5XX9@gmail.com" + }, + "errors": null + } + } + } + } + } + } + }, + "description": "Request new otp", + "tags": [ + "Credential Download - OTP Flow" + ], + "summary": "Generate Credential - Request Otp" + } + }, + "/credentialshare/request": { + "post": { + "operationId": "request", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "individualId": { + "type": "string" + }, + "otp": { + "type": "string" + }, + "transactionID": { + "type": "string" + }, + "user": { + "type": "string" + } + }, + "x-examples": { + "Example 1": { + "individualId": "2057135194", + "otp": "111111", + "transactionID": "1234567890", + "user": "mono" + } + } + }, + "examples": { + "example-1": { + "value": { + "individualId": "2057135194", + "otp": "111111", + "transactionID": "1234567890", + "user": "mono" + } + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "version": { + "type": "string" + }, + "str": { + "type": "null" + }, + "responsetime": { + "type": "string" + }, + "metadata": { + "type": "null" + }, + "response": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "requestId": { + "type": "string" + } + } + }, + "errors": { + "type": "null" + } + }, + "x-examples": { + "Example 1": { + "id": "mosip.resident.vid", + "version": "v1", + "str": null, + "responsetime": "2022-10-31T05:08:14.846Z", + "metadata": null, + "response": { + "id": "2057135194", + "requestId": "2bc3bb7f-6156-46d1-ae03-bf7b76e0c257" + }, + "errors": null + } + } + }, + "examples": { + "Success response": { + "value": { + "id": "mosip.resident.vid", + "version": "v1", + "str": null, + "responsetime": "2022-10-31T05:08:14.846Z", + "metadata": null, + "response": { + "id": "2057135194", + "requestId": "2bc3bb7f-6156-46d1-ae03-bf7b76e0c257" + }, + "errors": null + } + }, + "Failure response": { + "value": { + "id": null, + "version": "v1", + "str": null, + "responsetime": "2022-10-31T05:07:34.789Z", + "metadata": null, + "response": null, + "errors": [ + { + "errorCode": "RES-SER-422", + "errorMessage": "Input transactionID does not match transactionID of OTP Request" + } + ] + } + } + } + } + } + } + }, + "description": "Credential request", + "tags": [ + "Credential Download - OTP Flow" + ], + "summary": "Generate Credential - request new credential" + } + }, + "/credentialshare/request/status/{requestId}": { + "get": { + "operationId": "requestStatus", + "parameters": [ + { + "name": "requestId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "null" + }, + "version": { + "type": "null" + }, + "str": { + "type": "null" + }, + "responsetime": { + "type": "string" + }, + "metadata": { + "type": "null" + }, + "response": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "requestId": { + "type": "string" + }, + "statusCode": { + "type": "string" + } + } + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": {} + } + } + }, + "x-examples": { + "Example 1": { + "id": null, + "version": null, + "str": null, + "responsetime": "2022-10-31T05:10:58.337Z", + "metadata": null, + "response": { + "id": "2057135194", + "requestId": "2bc3bb7f-6156-46d1-ae03-bf7b76e0c257", + "statusCode": "ISSUED" + }, + "errors": [] + } + } + }, + "examples": { + "success response": { + "value": { + "id": null, + "version": null, + "str": null, + "responsetime": "2022-10-31T05:10:58.337Z", + "metadata": null, + "response": { + "id": "2057135194", + "requestId": "2bc3bb7f-6156-46d1-ae03-bf7b76e0c257", + "statusCode": "ISSUED" + }, + "errors": [] + } + } + } + } + } + } + }, + "description": "Credential request status", + "tags": [ + "Credential Download - OTP Flow" + ], + "summary": "Generate Credential - Check Status of Credential Share" + }, + "parameters": [ + { + "schema": { + "type": "string" + }, + "name": "requestId", + "in": "path", + "required": true, + "description": "The credential request id" + } + ] + }, + "/credentialshare/download": { + "post": { + "operationId": "download", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CredentialDownloadResponseDTO" + }, + "examples": { + "success response": { + "value": { + "credential": { + "biometrics": { + "face": "" + }, + "province": [ + { + "language": "eng", + "value": "Kenitra" + }, + { + "language": "kan", + "value": "ಕೆನಿತ್ರಾ" + } + ], + "phone": "4567897654", + "city": [ + { + "language": "eng", + "value": "Kenitra" + }, + { + "language": "kan", + "value": "ಕೆನಿತ್ರಾ" + } + ], + "postalCode": "14022", + "fullName": [ + { + "language": "eng", + "value": "kimgḻbb" + }, + { + "language": "kan", + "value": "ಕಿಮ್ಗ್ೞ್ಬ್ಬ್" + } + ], + "region": [ + { + "language": "eng", + "value": "Rabat Sale Kenitra" + }, + { + "language": "kan", + "value": "ರಬತ್ ಸಲೆ ಕೆನಿತ್ರ" + } + ] + }, + "verifiableCredential": { + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "http://localhost:8088/.well-known/mosip-context.json", + { + "sec": "https://w3id.org/security#" + } + ], + "credentialSubject": { + "biometrics": "", + "province": [ + { + "language": "eng", + "value": "Kenitra" + }, + { + "language": "kan", + "value": "ಕೆನಿತ್ರಾ" + } + ], + "city": [ + { + "language": "eng", + "value": "Kenitra" + }, + { + "language": "kan", + "value": "ಕೆನಿತ್ರಾ" + } + ], + "phone": "4567897654", + "postalCode": "14022", + "fullName": [ + { + "language": "eng", + "value": "kimgḻbb" + }, + { + "language": "kan", + "value": "ಕಿಮ್ಗ್ೞ್ಬ್ಬ್" + } + ], + "dateOfBirth": "1990/01/01", + "id": "http://credential.idrepo/credentials/2057135194", + "vcVer": "VC-V1", + "UIN": "2057135194", + "region": [ + { + "language": "eng", + "value": "Rabat Sale Kenitra" + }, + { + "language": "kan", + "value": "ರಬತ್ ಸಲೆ ಕೆನಿತ್ರ" + } + ], + "email": "santhosdss14@gmail.com" + }, + "id": "http://credential.idrepo/credentials/a3afcf8c-e5a6-4782-9ce5-84740ec2f332", + "issuanceDate": "2022-10-31T05:08:26.980Z", + "issuer": "http://localhost:8088/.well-known/controller.json", + "proof": { + "type": "RsaSignature2018", + "created": "2022-10-31T05:08:26Z", + "proofPurpose": "assertionMethod", + "verificationMethod": "http://localhost:8088/.well-known/public-key.json", + "jws": "" + }, + "type": [ + "VerifiableCredential", + "MOSIPVerifiableCredential" + ] + } + } + } + } + } + } + } + }, + "description": "download VC", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "individualId": { + "type": "string" + }, + "requestId": { + "type": "string" + } + }, + "x-examples": { + "Example 1": { + "individualId": "2057135194", + "requestId": "2bc3bb7f-6156-46d1-ae03-bf7b76e0c257" + } + } + }, + "examples": { + "example-1": { + "value": { + "individualId": "2057135194", + "requestId": "2bc3bb7f-6156-46d1-ae03-bf7b76e0c257" + } + } + } + } + } + }, + "tags": [ + "Credential Download - OTP Flow" + ], + "summary": "Generate Credential - Download Credential" + } + }, + "/credentialshare/callback/notify": { + "post": { + "operationId": "handleSubscribeEvent", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EventModel" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GenericResponseDTO" + } + } + } + } + }, + "description": "callback uri used by websub to notify", + "summary": "Callback API - Notify when credential is ready", + "tags": [ + "Credential Download - OTP Flow" + ], + "x-internal": true + } + }, + "/binding-otp": { + "post": { + "operationId": "bindingOtpGenerate", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "x-examples": { + "Example 1": { + "individualId": "2057135194", + "individualIdType": "UIN", + "otp": "111111", + "vidType": "PERPETUAL", + "transactionID": "1234567890" + } + }, + "properties": { + "requestTime": { + "type": "string" + }, + "request": { + "type": "object", + "properties": { + "individualId": { + "type": "string", + "description": "The individual id. UIN or VID." + }, + "otpChannels": { + "type": "array", + "description": "Otp channels using which user will be notified, for example - EMAIL, PHONE", + "items": {} + } + } + } + } + }, + "examples": { + "Wallet binding otp request example": { + "value": { + "requestTime": "{{$isoTimestamp}}", + "request": { + "individualId": "3816083254", + "otpChannels": [ + "EMAIL" + ] + } + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "individualId": { + "type": "string" + }, + "individualIdType": { + "type": "string" + }, + "otp": { + "type": "string" + }, + "vidType": { + "type": "string" + }, + "transactionID": { + "type": "string" + } + }, + "x-examples": { + "Example 1": { + "individualId": "2057135194", + "individualIdType": "UIN", + "otp": "111111", + "vidType": "PERPETUAL", + "transactionID": "1234567890" + } + } + }, + "examples": { + "example-1": { + "value": "{\n \"individualId\": \"2057135194\",\n \"individualIdType\": \"UIN\",\n \"otp\": \"111111\",\n \"vidType\": \"PERPETUAL\",\n \"transactionID\": \"1234567890\"\n}" + } + } + }, + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "requestTime": { + "type": "string" + }, + "request": { + "type": "object", + "properties": { + "individualId": { + "type": "string" + }, + "otpChannels": { + "type": "array", + "items": {} + } + } + } + } + } + } + }, + "required": true, + "description": "" + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "x-examples": { + "Example 1": { + "id": null, + "version": null, + "str": null, + "responsetime": null, + "metadata": null, + "response": { + "maskedEmail": "mock", + "maskedMobile": "mock" + }, + "errors": [] + } + }, + "properties": { + "id": { + "type": "string" + }, + "version": { + "type": "string" + }, + "responsetime": { + "type": "string" + }, + "metadata": { + "type": "object" + }, + "response": { + "type": "object", + "properties": { + "maskedEmail": { + "type": "string", + "description": "The masked email of user" + }, + "maskedMobile": { + "type": "string", + "description": "the masked mobile of user." + } + } + } + } + }, + "examples": { + "Success response": { + "value": { + "id": null, + "version": null, + "str": null, + "responsetime": null, + "metadata": null, + "response": { + "maskedEmail": "mono@mono.com", + "maskedMobile": "7897897890" + }, + "errors": [] + } + }, + "Failure response": { + "value": { + "id": "mosip.resident.vid", + "version": "v1", + "str": null, + "responsetime": "2022-10-31T04:57:10.792Z", + "metadata": null, + "response": null, + "errors": [ + { + "errorCode": "RES-SER-422", + "errorMessage": "Invalid UIN" + } + ] + } + } + } + } + } + } + }, + "summary": "Wallet Binding - Generate Otp", + "tags": [ + "Wallet Binding" + ], + "description": "This api is used to generate otp for wallet binding.\nThis api is used as a proxy to call [Identity Provider - Send Binding OTP Endpoint](https://mosip.stoplight.io/docs/identity-provider/a34e5371d4876-send-binding-otp-endpoint-draft) api internally." + } + }, + "/wallet-binding": { + "post": { + "operationId": "walletBinding", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "x-examples": { + "Example 1": { + "requestTime": "{{$isoTimestamp}}", + "request": { + "authFactorType": "WLA", + "format": "jwt", + "individualId": "3816083254", + "publicKey": "-----BEGIN RSA PUBLIC KEY-----\nMIICCgKCAgEAxo8hdrLl6nXyPSeSJu8xgmBBwVutacZS57rmIlHeKJfjYhKLT51v\n0k2IQqN2v6A3HOZqzKXh41p3RrxdSndkqqHwS0BLEVPNpKqYoEbe0tUICDpDSFaa\n7w87Z/OSGrw8bKpxmUT0xZ70+DGPhnWlMvPV5xenG1bVtf/vEq7cwQei1iNbNQRb\nqw/57e9LgmXdmbh/v5XOllT7rlUFmVFm4V4J3u6NH9iOPGlIKTplBlYyxlx6ayaR\n09Z6z4RJICG1MIipCv5qJwuzzXXpBja6gEG4xsN5K4W6b5GLt3IuzMMaQmReseRR\n46s53vBp7aqq1wrjs/CZ1SZqZ5ZG/nUchjTv+Nir0vPR9acvPB5j5qDgfdVz2sT/\nYL1HoeFPOIgcY1ydz+tUBm9F4AMCMZa7GbEmtAIWvxlQp6emo50/opdb51B3Teh3\neVQ+JqYYhOpuTEv0uHfhonXEsNfpGyttjR0FSAH2c6mI6UULi/PfLgcvKuqkhE+7\nlB0SFd852C993GqsY7qfxW1GvJpXYRvo6oRoFO8sj+St36MkmzJbm56AQn/9KWd5\nRLh13xrIUVRnW48y/Blchw/C68Ez1bmCyDeVe1WBPwel0zPl62jCtKawzCQiZcTL\n/ejmlKFHKQd980MwWN18OVakKU52CkO0NT+9ovgi0TRfLKvG6PQ1qGECAwEAAQ==\n-----END RSA PUBLIC KEY-----\n", + "challengeList": [ + { + "authFactorType": "OTP", + "challenge": "111111", + "format": "alpha-numeric" + } + ] + } + } + }, + "properties": { + "requestTime": { + "type": "string", + "description": "The request time" + }, + "request": { + "type": "object", + "properties": { + "authFactorType": { + "type": "string", + "description": "Auth factor type to be binded for the provided key." + }, + "format": { + "type": "string", + "description": "Format of the auth factor type supported in the wallet app. Right now Inji supports only jwt." + }, + "individualId": { + "type": "string", + "description": "The individual id. UIN or VID.\n" + }, + "publicKey": { + "type": "string", + "description": "The public key of the wallet app." + }, + "challengeList": { + "type": "array", + "items": { + "type": "object", + "properties": { + "authFactorType": { + "type": "string", + "description": "Defines the type of auth challenge. It should be same as authfactor.type (oauth-details response)." + }, + "challenge": { + "type": "string", + "description": "Actual challenge as string. A jwt in case of inji." + }, + "format": { + "type": "string", + "description": "Format of the challenge provided." + } + } + } + } + } + } + } + }, + "examples": { + "Wallet binding otp request example": { + "value": { + "requestTime": "2023-01-17T05:38:41.869Z", + "request": { + "authFactorType": "WLA", + "format": "jwt", + "individualId": "3816083254", + "publicKey": "-----BEGIN RSA PUBLIC KEY-----\nMIICCgKCAgEAxo8hdrLl6nXyPSeSJu8xgmBBwVutacZS57rmIlHeKJfjYhKLT51v\n0k2IQqN2v6A3HOZqzKXh41p3RrxdSndkqqHwS0BLEVPNpKqYoEbe0tUICDpDSFaa\n7w87Z/OSGrw8bKpxmUT0xZ70+DGPhnWlMvPV5xenG1bVtf/vEq7cwQei1iNbNQRb\nqw/57e9LgmXdmbh/v5XOllT7rlUFmVFm4V4J3u6NH9iOPGlIKTplBlYyxlx6ayaR\n09Z6z4RJICG1MIipCv5qJwuzzXXpBja6gEG4xsN5K4W6b5GLt3IuzMMaQmReseRR\n46s53vBp7aqq1wrjs/CZ1SZqZ5ZG/nUchjTv+Nir0vPR9acvPB5j5qDgfdVz2sT/\nYL1HoeFPOIgcY1ydz+tUBm9F4AMCMZa7GbEmtAIWvxlQp6emo50/opdb51B3Teh3\neVQ+JqYYhOpuTEv0uHfhonXEsNfpGyttjR0FSAH2c6mI6UULi/PfLgcvKuqkhE+7\nlB0SFd852C993GqsY7qfxW1GvJpXYRvo6oRoFO8sj+St36MkmzJbm56AQn/9KWd5\nRLh13xrIUVRnW48y/Blchw/C68Ez1bmCyDeVe1WBPwel0zPl62jCtKawzCQiZcTL\n/ejmlKFHKQd980MwWN18OVakKU52CkO0NT+9ovgi0TRfLKvG6PQ1qGECAwEAAQ==\n-----END RSA PUBLIC KEY-----\n", + "challengeList": [ + { + "authFactorType": "OTP", + "challenge": "111111", + "format": "alpha-numeric" + } + ] + } + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "individualId": { + "type": "string" + }, + "individualIdType": { + "type": "string" + }, + "otp": { + "type": "string" + }, + "vidType": { + "type": "string" + }, + "transactionID": { + "type": "string" + } + }, + "x-examples": { + "Example 1": { + "individualId": "2057135194", + "individualIdType": "UIN", + "otp": "111111", + "vidType": "PERPETUAL", + "transactionID": "1234567890" + } + } + }, + "examples": { + "example-1": { + "value": "{\n \"individualId\": \"2057135194\",\n \"individualIdType\": \"UIN\",\n \"otp\": \"111111\",\n \"vidType\": \"PERPETUAL\",\n \"transactionID\": \"1234567890\"\n}" + } + } + }, + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "requestTime": { + "type": "string" + }, + "request": { + "type": "object", + "properties": { + "individualId": { + "type": "string" + }, + "otpChannels": { + "type": "array", + "items": {} + } + } + } + } + } + } + }, + "required": true, + "description": "" + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "x-examples": { + "Example 1": { + "id": null, + "version": null, + "str": null, + "responsetime": null, + "metadata": null, + "response": { + "certificate": "-----BEGIN CERTIFICATE-----\nMIIDqjCCApKgAwIBAgIGAYW+PCLUMA0GCSqGSIb3DQEBCwUAMBMxETAPBgNVBAMT\nCE1vY2stSURBMB4XDTIzMDExNzA1MzgxMFoXDTIzMDEyNzA1MzgxMFowGTEXMBUG\nA1UEAxMOTW9jay11c2VyLW5hbWUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK\nAoICAQDGjyF2suXqdfI9J5Im7zGCYEHBW61pxlLnuuYiUd4ol+NiEotPnW/STYhC\no3a/oDcc5mrMpeHjWndGvF1Kd2SqofBLQEsRU82kqpigRt7S1QgIOkNIVprvDztn\n85IavDxsqnGZRPTFnvT4MY+GdaUy89XnF6cbVtW1/+8SrtzBB6LWI1s1BFurD/nt\n70uCZd2ZuH+/lc6WVPuuVQWZUWbhXgne7o0f2I48aUgpOmUGVjLGXHprJpHT1nrP\nhEkgIbUwiKkK/monC7PNdekGNrqAQbjGw3krhbpvkYu3ci7MwxpCZF6x5FHjqzne\n8GntqqrXCuOz8JnVJmpnlkb+dRyGNO/42KvS89H1py88HmPmoOB91XPaxP9gvUeh\n4U84iBxjXJ3P61QGb0XgAwIxlrsZsSa0Aha/GVCnp6ajnT+il1vnUHdN6Hd5VD4m\nphiE6m5MS/S4d+GidcSw1+kbK22NHQVIAfZzqYjpRQuL898uBy8q6qSET7uUHRIV\n3znYL33caqxjup/FbUa8mldhG+jqhGgU7yyP5K3foySbMlubnoBCf/0pZ3lEuHXf\nGshRVGdbjzL8GVyHD8LrwTPVuYLIN5V7VYE/B6XTM+XraMK0prDMJCJlxMv96OaU\noUcpB33zQzBY3Xw5VqQpTnYKQ7Q1P72i+CLRNF8sq8bo9DWoYQIDAQABMA0GCSqG\nSIb3DQEBCwUAA4IBAQAmbgQcW22AnrP/GH5lzt+Fy6t20lxqpMDIc3rCO6dzXMCR\n9ocjwLj7E243jGFbhHzC8637qOC8b5bYLZL2ND9ZehSu0qdz/0U0Kwt81rj/lihk\nvhD6xgx8g966AMZcZ0iQncyTzbdEukq6jMAtYfWvAu41rL0H5qvIFvxLHGOoxOYV\n0XZslWTC8B8TB3hzQ+HHexxSZbLSbB+sHFShubOlqqxE/zMj2O+c2FGYSOKlbTXi\nTd4m1WY/eJ4+0XjvEAAMZqLSLtnF5U1POz2onnk0u/lzsRnpxiqJY2++1WmCnuAT\nwDIwNEeAPotfm6tM1TjWuwakYrbSY7Ru0YjaFC1S\n-----END CERTIFICATE-----\n", + "encryptedWalletBindingId": "qeCUuKEjRDUiDHfbYAsHv5L4RCiHe_KE7eKKjpw7jIo", + "expireDateTime": "2023-01-27T05:38:10.000Z", + "thumbprint": "rOe3ifBa0uIuKfArURKRKK5psE8YVdWxXbQoDXAvntk", + "keyId": "1673933890260" + }, + "errors": [] + } + }, + "properties": { + "version": { + "type": "string", + "nullable": true + }, + "id": { + "type": "string", + "nullable": true + }, + "responsetime": { + "type": "string", + "nullable": true + }, + "metadata": { + "type": "string", + "nullable": true + }, + "response": { + "type": "object", + "properties": { + "certificate": { + "type": "string", + "description": "Server certificate after successful binding. This certificate will be stored in wallet app." + }, + "encryptedWalletBindingId": { + "type": "string", + "description": "the wallet binding id in encrypted format. The wallet app will associate the requested credential with this id." + }, + "expireDateTime": { + "type": "string", + "description": "expiry date time of the binding." + }, + "thumbprint": { + "type": "string", + "description": "the certificate thumbprint." + }, + "keyId": { + "type": "string", + "description": "the certificate key id." + } + } + }, + "errors": { + "type": "array", + "items": { + "type": "object" + } + } + } + }, + "examples": { + "Success response": { + "value": { + "id": null, + "version": null, + "str": null, + "responsetime": null, + "metadata": null, + "response": { + "certificate": "-----BEGIN CERTIFICATE-----\nMIIDqjCCApKgAwIBAgIGAYW+PCLUMA0GCSqGSIb3DQEBCwUAMBMxETAPBgNVBAMT\nCE1vY2stSURBMB4XDTIzMDExNzA1MzgxMFoXDTIzMDEyNzA1MzgxMFowGTEXMBUG\nA1UEAxMOTW9jay11c2VyLW5hbWUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK\nAoICAQDGjyF2suXqdfI9J5Im7zGCYEHBW61pxlLnuuYiUd4ol+NiEotPnW/STYhC\no3a/oDcc5mrMpeHjWndGvF1Kd2SqofBLQEsRU82kqpigRt7S1QgIOkNIVprvDztn\n85IavDxsqnGZRPTFnvT4MY+GdaUy89XnF6cbVtW1/+8SrtzBB6LWI1s1BFurD/nt\n70uCZd2ZuH+/lc6WVPuuVQWZUWbhXgne7o0f2I48aUgpOmUGVjLGXHprJpHT1nrP\nhEkgIbUwiKkK/monC7PNdekGNrqAQbjGw3krhbpvkYu3ci7MwxpCZF6x5FHjqzne\n8GntqqrXCuOz8JnVJmpnlkb+dRyGNO/42KvS89H1py88HmPmoOB91XPaxP9gvUeh\n4U84iBxjXJ3P61QGb0XgAwIxlrsZsSa0Aha/GVCnp6ajnT+il1vnUHdN6Hd5VD4m\nphiE6m5MS/S4d+GidcSw1+kbK22NHQVIAfZzqYjpRQuL898uBy8q6qSET7uUHRIV\n3znYL33caqxjup/FbUa8mldhG+jqhGgU7yyP5K3foySbMlubnoBCf/0pZ3lEuHXf\nGshRVGdbjzL8GVyHD8LrwTPVuYLIN5V7VYE/B6XTM+XraMK0prDMJCJlxMv96OaU\noUcpB33zQzBY3Xw5VqQpTnYKQ7Q1P72i+CLRNF8sq8bo9DWoYQIDAQABMA0GCSqG\nSIb3DQEBCwUAA4IBAQAmbgQcW22AnrP/GH5lzt+Fy6t20lxqpMDIc3rCO6dzXMCR\n9ocjwLj7E243jGFbhHzC8637qOC8b5bYLZL2ND9ZehSu0qdz/0U0Kwt81rj/lihk\nvhD6xgx8g966AMZcZ0iQncyTzbdEukq6jMAtYfWvAu41rL0H5qvIFvxLHGOoxOYV\n0XZslWTC8B8TB3hzQ+HHexxSZbLSbB+sHFShubOlqqxE/zMj2O+c2FGYSOKlbTXi\nTd4m1WY/eJ4+0XjvEAAMZqLSLtnF5U1POz2onnk0u/lzsRnpxiqJY2++1WmCnuAT\nwDIwNEeAPotfm6tM1TjWuwakYrbSY7Ru0YjaFC1S\n-----END CERTIFICATE-----\n", + "encryptedWalletBindingId": "qeCUuKEjRDUiDHfbYAsHv5L4RCiHe_KE7eKKjpw7jIo", + "expireDateTime": "2023-01-27T05:38:10.000Z", + "thumbprint": "rOe3ifBa0uIuKfArURKRKK5psE8YVdWxXbQoDXAvntk", + "keyId": "1673933890260" + }, + "errors": [] + } + } + } + } + } + } + }, + "summary": "Wallet Binding - Bind Credential with wallet", + "tags": [ + "Wallet Binding" + ], + "description": "This api is used to bind the credential with wallet.\nThis api is used as a proxy to call [Identity Provider - Wallet binding Endpoint](https://mosip.stoplight.io/docs/identity-provider/6e91115b16311-wallet-binding-endpoint) api internally." + } + }, + "/allProperties": { + "get": { + "operationId": "getAllProperties", + "responses": {}, + "description": "get all configurable properties for inji.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "version": { + "type": "string" + }, + "str": { + "type": "null" + }, + "responsetime": { + "type": "string" + }, + "metadata": { + "type": "null" + }, + "response": { + "type": "object", + "properties": { + "internal.auth.types.allowed": { + "type": "string" + }, + "auth.types.allowed": { + "type": "string" + }, + "ekyc.auth.types.allowed": { + "type": "string" + } + } + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": {} + } + } + }, + "x-examples": { + "Example 1": { + "id": "mosip.inji.properties", + "version": "v1", + "str": null, + "responsetime": "2022-10-31T05:22:21.009Z", + "metadata": null, + "response": { + "internal.auth.types.allowed": "otp,bio-Finger,bio-Iris,bio-Face", + "auth.types.allowed": "demo,otp,bio-Finger,bio-Iris,bio-Face", + "ekyc.auth.types.allowed": "demo,otp,bio-Finger,bio-Iris,bio-Face" + }, + "errors": [] + } + } + }, + "examples": { + "example-1": { + "value": { + "id": "mosip.inji.properties", + "version": "v1", + "str": null, + "responsetime": "2022-10-31T05:22:21.009Z", + "metadata": null, + "response": { + "internal.auth.types.allowed": "otp,bio-Finger,bio-Iris,bio-Face", + "auth.types.allowed": "demo,otp,bio-Finger,bio-Iris,bio-Face", + "ekyc.auth.types.allowed": "demo,otp,bio-Finger,bio-Iris,bio-Face" + }, + "errors": [] + } + } + } + } + } + }, + "summary": "Get all Inji app properties" + } + }, + "/issuers": { + "get": { + "operationId": "getAllIssuers", + "parameters": [ + { + "name": "search", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Trusted Issuers" + ], + "description": "This API provides data with search capability to populate the list of supported issuers in Inji Web, which is then displayed under the List of Issuers", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "issuers": [ + { + "credential_issuer": "string", + "protocol": "string", + "display": [ + { + "name": "string", + "logo": { + "url": "string", + "alt_text": "string" + }, + "title": "string", + "description": "string", + "language": "string" + } + ], + "client_id": "string", + "redirect_uri": "string", + "scopes_supported": [ + "string" + ], + "authorization_endpoint": "string", + "authorization_audience": "string", + "token_endpoint": "string", + "proxy_token_endpoint": "string", + "credential_endpoint": "string", + "credential_type": [ + "string" + ], + "credential_audience": "string", + "client_alias": "string", + "additional_headers": { + "additionalProp1": "string", + "additionalProp2": "string", + "additionalProp3": "string" + }, + ".well-known": "string" + } + ] + } + }, + "x-examples": { + "Example 1": { + "id": "mosip.resident.vid", + "version": "v1", + "str": null, + "responsetime": "2022-10-31T05:08:14.846Z", + "metadata": null, + "response": { + "issuers": [ + { + "credential_issuer": "MOSIPInsurance", + "protocol": "OpenId4VCI", + "display": [ + { + "name": "MOSIP Insurance", + "logo": { + "url": "https://api.collab.mosip.net/inji/mosip-logo.png", + "alt_text": "MOSIP-Logo" + }, + "title": "Download via LIC", + "description": "This API provides data to populate the list of supported issuers in Inji Web, which is then displayed under the List of Issuers section on the Home page of Inji Web.", + "language": "en" + } + ], + "client_id": "3yz7-j3xRzU3SODdoNgSGvO_cD8UijH3AIWRDAg1x-M", + ".well-known": "http://localhost:8088/.well-known/openid-credential-issuer" + }, + { + "credential_issuer": "MOSIPNationalID", + "protocol": "OpenId4VCI", + "display": [ + { + "name": "MOSIP National ID", + "logo": { + "url": "https://api.collab.mosip.net/inji/mosip-logo.png", + "alt_text": "MOSIP-Logo" + }, + "title": "Download via LIC", + "description": "Enter your policy number to download your card.", + "language": "en" + } + ], + "client_id": "3yz7-j3xRzU3SODdoNgSGvO_cD8UijH3AIWRDAg1x-M", + ".well-known": "http://localhost:8088/.well-known/openid-credential-issuer" + } + ] + } + }, + "errors": null + }, + "examples": { + "Success response": { + "value": { + "id": "mosip.resident.vid", + "version": "v1", + "str": null, + "responsetime": "2022-10-31T05:08:14.846Z", + "metadata": null, + "response": { + "issuers": [ + { + "credential_issuer": "MOSIPInsurance", + "protocol": "OpenId4VCI", + "display": [ + { + "name": "MOSIP Insurance", + "logo": { + "url": "https://api.collab.mosip.net/inji/mosip-logo.png", + "alt_text": "MOSIP-Logo" + }, + "title": "Download via LIC", + "description": "Enter your policy number to download your card.", + "language": "en" + } + ], + "client_id": "3yz7-j3xRzU3SODdoNgSGvO_cD8UijH3AIWRDAg1x-M", + ".well-known": "http://localhost:8088/.well-known/openid-credential-issuer" + }, + { + "credential_issuer": "MOSIPNationalID", + "protocol": "OpenId4VCI", + "display": [ + { + "name": "MOSIP National ID", + "logo": { + "url": "https://api.collab.mosip.net/inji/mosip-logo.png", + "alt_text": "MOSIP-Logo" + }, + "title": "Download via LIC", + "description": "Enter your policy number to download your card.", + "language": "en" + } + ], + "client_id": "3yz7-j3xRzU3SODdoNgSGvO_cD8UijH3AIWRDAg1x-M", + ".well-known": "http://localhost:8088/.well-known/openid-credential-issuer" + } + ] + } + }, + "errors": null + }, + "Failure response": { + "value": { + "id": null, + "version": "v1", + "str": null, + "responsetime": "2022-10-31T05:07:34.789Z", + "metadata": null, + "response": null, + "errors": [ + { + "errorCode": "RESIDENT-APP-26", + "errorMessage": "Api not accessible failure" + } + ] + } + } + } + } + } + } + } + } + }, + "/issuers/{issuer-id}": { + "get": { + "operationId": "getIssuerConfig", + "parameters": [ + { + "name": "issuer-id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Trusted Issuers" + ], + "description": "This API provides the complete configuration details for the specific issuers passed in the path variable", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "issuers": [ + { + "credential_issuer": "string", + "protocol": "string", + "display": [ + { + "name": "string", + "logo": { + "url": "string", + "alt_text": "string" + }, + "title": "string", + "description": "string", + "language": "string" + } + ], + "client_id": "string", + "redirect_uri": "string", + "scopes_supported": [ + "string" + ], + "authorization_endpoint": "string", + "authorization_audience": "string", + "token_endpoint": "string", + "proxy_token_endpoint": "string", + "credential_endpoint": "string", + "credential_type": [ + "string" + ], + "credential_audience": "string", + "client_alias": "string", + "additional_headers": { + "additionalProp1": "string", + "additionalProp2": "string", + "additionalProp3": "string" + }, + ".well-known": "string" + } + ] + } + }, + "x-examples": { + "Example 1": { + "id": "mosip.mimoto.issuers", + "version": "v1", + "str": null, + "responsetime": "2024-04-25T05:56:55.890Z", + "metadata": null, + "response": { + "credential_issuer": "ESignet", + "protocol": "OpenId4VCI", + "display": [ + { + "name": "e-Signet", + "logo": { + "url": "https://api.collab.mosip.net/inji/mosip-logo.png", + "alt_text": "mosip-logo" + }, + "title": "Download MOSIP Credentials", + "description": "Download credentials by providing UIN or VID", + "language": "en" + }, + { + "name": "e-Signet", + "logo": { + "url": "https://api.collab.mosip.net/inji/mosip-logo.png", + "alt_text": "شعار موسيب" + }, + "title": "قم بتنزيل بيانات اعتماد MOSIP", + "description": "توفير UIN أو VIDقم بتنزيل بيانات الاعتماد عن طريق", + "language": "ar" + }, + { + "name": "e-Signet", + "logo": { + "url": "https://api.collab.mosip.net/inji/mosip-logo.png", + "alt_text": "मोसिप लोगो" + }, + "title": "MOSIP क्रेडेंशियल डाउनलोड करेंं", + "description": "यूआईएन या वीआईडी प्रदान करके क्रेडेंशियल डाउनलोड करें", + "language": "hi" + }, + { + "name": "e-Signet", + "logo": { + "url": "https://api.collab.mosip.net/inji/mosip-logo.png", + "alt_text": "mosip ಲೋಗೋ" + }, + "title": "MOSIP ರುಜುವಾತುಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿ", + "description": "UIN ಅಥವಾ VID ಒದಗಿಸುವ ಮೂಲಕ ರುಜುವಾತುಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿ", + "language": "kn" + }, + { + "name": "e-Signet", + "logo": { + "url": "https://api.collab.mosip.net/inji/mosip-logo.png", + "alt_text": "mosip லோகோ" + }, + "title": "MOSIP சான்றுகளைப் பதிவிறக்கவும்", + "description": "UIN அல்லது VIDஐ வழங்குவதன் மூலம் நற்சான்றிதழ்களைப் பதிவிறக்கவும்", + "language": "ta" + }, + { + "name": "e-Signet", + "logo": { + "url": "https://api.collab.mosip.net/inji/mosip-logo.png", + "alt_text": "logo ng mosip" + }, + "title": "I-download ang Mga Kredensyal ng MOSIP", + "description": "Mag-download ng mga kredensyal sa pamamagitan ng pagbibigay ng UIN o VID", + "language": "fil" + } + ], + "client_id": "*****", + "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", + "scopes_supported": [ + "mosip_identity_vc_ldp" + ], + "authorization_endpoint": "https://esignet.collab.mosip.net/authorize", + "authorization_audience": "https://esignet.collab.mosip.net/v1/esignet/oauth/v2/token", + "token_endpoint": "https://api.collab.mosip.net/v1/mimoto/get-token/ESignet", + "proxy_token_endpoint": "https://esignet.collab.mosip.net/v1/esignet/oauth/v2/token", + "credential_endpoint": "https://esignet.collab.mosip.net/v1/esignet/vci/credential", + "credential_type": [ + "VerifiableCredential", + "MOSIPVerifiableCredential" + ], + "credential_audience": "https://esignet.collab.mosip.net", + "client_alias": "mpartner-default-mimotooidc", + "additional_headers": { + "Accept": "application/json" + }, + ".well-known": "https://esignet.collab.mosip.net/.well-known/openid-credential-issuer" + }, + "errors": [] + }, + "errors": null + }, + "examples": { + "Success response": { + "value": { + "id": "mosip.mimoto.issuers", + "version": "v1", + "str": null, + "responsetime": "2024-04-25T05:56:55.890Z", + "metadata": null, + "response": { + "credential_issuer": "ESignet", + "protocol": "OpenId4VCI", + "display": [ + { + "name": "e-Signet", + "logo": { + "url": "https://api.collab.mosip.net/inji/mosip-logo.png", + "alt_text": "mosip-logo" + }, + "title": "Download MOSIP Credentials", + "description": "Download credentials by providing UIN or VID", + "language": "en" + }, + { + "name": "e-Signet", + "logo": { + "url": "https://api.collab.mosip.net/inji/mosip-logo.png", + "alt_text": "شعار موسيب" + }, + "title": "قم بتنزيل بيانات اعتماد MOSIP", + "description": "توفير UIN أو VIDقم بتنزيل بيانات الاعتماد عن طريق", + "language": "ar" + }, + { + "name": "e-Signet", + "logo": { + "url": "https://api.collab.mosip.net/inji/mosip-logo.png", + "alt_text": "मोसिप लोगो" + }, + "title": "MOSIP क्रेडेंशियल डाउनलोड करेंं", + "description": "यूआईएन या वीआईडी प्रदान करके क्रेडेंशियल डाउनलोड करें", + "language": "hi" + }, + { + "name": "e-Signet", + "logo": { + "url": "https://api.collab.mosip.net/inji/mosip-logo.png", + "alt_text": "mosip ಲೋಗೋ" + }, + "title": "MOSIP ರುಜುವಾತುಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿ", + "description": "UIN ಅಥವಾ VID ಒದಗಿಸುವ ಮೂಲಕ ರುಜುವಾತುಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿ", + "language": "kn" + }, + { + "name": "e-Signet", + "logo": { + "url": "https://api.collab.mosip.net/inji/mosip-logo.png", + "alt_text": "mosip லோகோ" + }, + "title": "MOSIP சான்றுகளைப் பதிவிறக்கவும்", + "description": "UIN அல்லது VIDஐ வழங்குவதன் மூலம் நற்சான்றிதழ்களைப் பதிவிறக்கவும்", + "language": "ta" + }, + { + "name": "e-Signet", + "logo": { + "url": "https://api.collab.mosip.net/inji/mosip-logo.png", + "alt_text": "logo ng mosip" + }, + "title": "I-download ang Mga Kredensyal ng MOSIP", + "description": "Mag-download ng mga kredensyal sa pamamagitan ng pagbibigay ng UIN o VID", + "language": "fil" + } + ], + "client_id": "DEqVWfdKe9cQWikLdjak3vlDF0Pq7jtnwTcGdEXoT1I", + "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", + "scopes_supported": [ + "mosip_identity_vc_ldp" + ], + "authorization_endpoint": "https://esignet.collab.mosip.net/authorize", + "authorization_audience": "https://esignet.collab.mosip.net/v1/esignet/oauth/v2/token", + "token_endpoint": "https://api.collab.mosip.net/v1/mimoto/get-token/ESignet", + "proxy_token_endpoint": "https://esignet.collab.mosip.net/v1/esignet/oauth/v2/token", + "credential_endpoint": "https://esignet.collab.mosip.net/v1/esignet/vci/credential", + "credential_type": [ + "VerifiableCredential", + "MOSIPVerifiableCredential" + ], + "credential_audience": "https://esignet.collab.mosip.net", + "client_alias": "mpartner-default-mimotooidc", + "additional_headers": { + "Accept": "application/json" + }, + ".well-known": "https://esignet.collab.mosip.net/.well-known/openid-credential-issuer" + }, + "errors": [] + }, + "errors": null + }, + "Failure response": { + "value": { + "id": null, + "version": "v1", + "str": null, + "responsetime": "2022-10-31T05:07:34.789Z", + "metadata": null, + "response": null, + "errors": [ + { + "errorCode": "RESIDENT-APP-26", + "errorMessage": "Api not accessible failure" + } + ] + } + } + } + } + } + } + } + } + }, + "/issuers/{issuer-id}/credentialTypes": { + "get": { + "operationId": "getCredentialTypes", + "parameters": [ + { + "name": "issuer-id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "search", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Trusted Issuers" + ], + "description": "This API fetches and allows searching for Credential Types offered by the issuer, all sourced from the issuer's well-known configuration.", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "supportedCredentials": [ + { + "format": "string", + "id": "string", + "scope": "string", + "display": [ + { + "name": "string", + "logo": { + "url": "string", + "alt_text": "string" + }, + "locale": "string", + "background_color": "string", + "text_color": "string" + } + ], + "proof_types_supported": [ + "string" + ], + "credential_definition": { + "type": [ + "string" + ], + "credentialSubject": { + "additionalProp1": { + "display": [ + { + "name": "string", + "locale": "string" + } + ] + }, + "additionalProp2": { + "display": [ + { + "name": "string", + "locale": "string" + } + ] + }, + "additionalProp3": { + "display": [ + { + "name": "string", + "locale": "string" + } + ] + } + } + } + } + ], + "authorization_endpoint": "string" + }, + "errors": { + "type": "null" + } + }, + "x-examples": { + "Example 1": { + "supportedCredentials": [ + { + "format": "ldp_vc", + "id": "InsuranceCredential", + "scope": "sunbird_rc_insurance_vc_ldp", + "display": [ + { + "name": "MOSIP Insurance", + "logo": { + "url": "https://api.collab.mosip.net/inji/mosip-logo.png", + "alt_text": "insurance logo" + }, + "locale": "en", + "background_color": "#fafcff", + "text_color": "#00284d" + } + ], + "proof_types_supported": [ + "jwt" + ], + "credential_definition": { + "type": [ + "VerifiableCredential", + "InsuranceCredential" + ], + "credentialSubject": { + "fullName": { + "display": [ + { + "name": "Full Name", + "locale": "en" + } + ] + }, + "policyName": { + "display": [ + { + "name": "Policy Name", + "locale": "en" + } + ] + }, + "policyNumber": { + "display": [ + { + "name": "Policy Number", + "locale": "en" + } + ] + }, + "gender": { + "display": [ + { + "name": "Gender", + "locale": "en" + } + ] + }, + "expiresOn": { + "display": [ + { + "name": "Expiry Date", + "locale": "en" + } + ] + }, + "dob": { + "display": [ + { + "name": "Date Of Birth", + "locale": "en" + } + ] + } + } + } + }, + { + "format": "ldp_vc", + "id": "LifeInsuranceCredential_ldp", + "scope": "life_insurance_vc_ldp", + "display": [ + { + "name": "Sunbird Life Insurance", + "logo": { + "url": "https://sunbird.org/images/sunbird-logo-new.png", + "alt_text": "Sunbird life insurance logo" + }, + "locale": "en", + "background_color": "#fefcfa", + "text_color": "#7C4616" + } + ], + "proof_types_supported": [ + "jwt" + ], + "credential_definition": { + "type": [ + "VerifiableCredential", + "LifeInsuranceCredential" + ], + "credentialSubject": { + "fullName": { + "display": [ + { + "name": "Full Name", + "locale": "en" + } + ] + }, + "policyName": { + "display": [ + { + "name": "Policy Name", + "locale": "en" + } + ] + }, + "policyNumber": { + "display": [ + { + "name": "Policy Number", + "locale": "en" + } + ] + }, + "gender": { + "display": [ + { + "name": "Gender", + "locale": "en" + } + ] + }, + "policyExpiresOn": { + "display": [ + { + "name": "Expiry Date", + "locale": "en" + } + ] + }, + "dob": { + "display": [ + { + "name": "Date Of Birth", + "locale": "en" + } + ] + } + } + } + } + ], + "authorization_endpoint": "http://localhost:8088/authorize" + } + }, + "examples": { + "Success response": { + "value": { + "id": "mosip.resident.vid", + "version": "v1", + "str": null, + "responsetime": "2022-10-31T05:08:14.846Z", + "metadata": null, + "response": { + "supportedCredentials": [ + { + "format": "ldp_vc", + "id": "InsuranceCredential", + "scope": "sunbird_rc_insurance_vc_ldp", + "display": [ + { + "name": "MOSIP Insurance", + "logo": { + "url": "https://api.collab.mosip.net/inji/mosip-logo.png", + "alt_text": "insurance logo" + }, + "locale": "en", + "background_color": "#fafcff", + "text_color": "#00284d" + } + ], + "proof_types_supported": [ + "jwt" + ], + "credential_definition": { + "type": [ + "VerifiableCredential", + "InsuranceCredential" + ], + "credentialSubject": { + "fullName": { + "display": [ + { + "name": "Full Name", + "locale": "en" + } + ] + }, + "policyName": { + "display": [ + { + "name": "Policy Name", + "locale": "en" + } + ] + }, + "policyNumber": { + "display": [ + { + "name": "Policy Number", + "locale": "en" + } + ] + }, + "gender": { + "display": [ + { + "name": "Gender", + "locale": "en" + } + ] + }, + "expiresOn": { + "display": [ + { + "name": "Expiry Date", + "locale": "en" + } + ] + }, + "dob": { + "display": [ + { + "name": "Date Of Birth", + "locale": "en" + } + ] + } + } + } + }, + { + "format": "ldp_vc", + "id": "LifeInsuranceCredential_ldp", + "scope": "life_insurance_vc_ldp", + "display": [ + { + "name": "Sunbird Life Insurance", + "logo": { + "url": "https://sunbird.org/images/sunbird-logo-new.png", + "alt_text": "Sunbird life insurance logo" + }, + "locale": "en", + "background_color": "#fefcfa", + "text_color": "#7C4616" + } + ], + "proof_types_supported": [ + "jwt" + ], + "credential_definition": { + "type": [ + "VerifiableCredential", + "LifeInsuranceCredential" + ], + "credentialSubject": { + "fullName": { + "display": [ + { + "name": "Full Name", + "locale": "en" + } + ] + }, + "policyName": { + "display": [ + { + "name": "Policy Name", + "locale": "en" + } + ] + }, + "policyNumber": { + "display": [ + { + "name": "Policy Number", + "locale": "en" + } + ] + }, + "gender": { + "display": [ + { + "name": "Gender", + "locale": "en" + } + ] + }, + "policyExpiresOn": { + "display": [ + { + "name": "Expiry Date", + "locale": "en" + } + ] + }, + "dob": { + "display": [ + { + "name": "Date Of Birth", + "locale": "en" + } + ] + } + } + } + } + ], + "authorization_endpoint": "http://localhost:8088/authorize" + }, + "errors": null + } + }, + "Failure response": { + "value": { + "id": null, + "version": "v1", + "str": null, + "responsetime": "2022-10-31T05:07:34.789Z", + "metadata": null, + "response": null, + "errors": [ + { + "errorCode": "RESIDENT-APP-026", + "errorMessage": "Api not accessible failure" + } + ] + } + }, + "Failure response 2": { + "value": { + "id": null, + "version": "v1", + "str": null, + "responsetime": "2022-10-31T05:07:34.789Z", + "metadata": null, + "response": null, + "errors": [ + { + "errorCode": "RESIDENT-APP-035", + "errorMessage": "Invalid issuer ID" + } + ] + } + } + } + } + } + } + } + } + }, + "/issuers/{issuer-id}/.well-known": { + "get": { + "operationId": "getCredentialWellknown", + "parameters": [ + { + "name": "issuer-id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Trusted Issuers" + ], + "description": "This API fetches and allows searching for Credential Types offered by the issuer, all sourced from the issuer's well-known configuration.", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "errors": { + "type": "null" + } + }, + "examples": { + "Success response": { + "value": { + "credential_issuer": "https://injicertify-insurance.dev1.mosip.net", + "authorization_servers": [ + "https://esignet-insurance.dev1.mosip.net" + ], + "credential_endpoint": "https://injicertify-insurance.dev1.mosip.net/v1/certify/issuance/credential", + "credential_configurations_supported": { + "InsuranceCredential": { + "format": "ldp_vc", + "scope": "sunbird_rc_insurance_vc_ldp", + "order": [ + "fullName", + "policyName", + "policyExpiresOn", + "policyIssuedOn", + "policyNumber", + "mobile", + "dob", + "gender", + "benefits", + "email" + ], + "proof_types_supported": { + "jwt": { + "proof_signing_alg_values_supported": [ + "RS256", + "PS256" + ] + } + }, + "credential_definition": { + "type": [ + "VerifiableCredential", + "InsuranceCredential" + ], + "credentialSubject": { + "fullName": { + "display": [ + { + "name": "Name", + "locale": "en" + } + ] + }, + "mobile": { + "display": [ + { + "name": "Phone Number", + "locale": "en" + } + ] + }, + "dob": { + "display": [ + { + "name": "Date of Birth", + "locale": "en" + } + ] + }, + "gender": { + "display": [ + { + "name": "Gender", + "locale": "en" + } + ] + }, + "benefits": { + "display": [ + { + "name": "Benefits", + "locale": "en" + } + ] + }, + "email": { + "display": [ + { + "name": "Email Id", + "locale": "en" + } + ] + }, + "policyIssuedOn": { + "display": [ + { + "name": "Policy Issued On", + "locale": "en" + } + ] + }, + "policyExpiresOn": { + "display": [ + { + "name": "Policy Expires On", + "locale": "en" + } + ] + }, + "policyName": { + "display": [ + { + "name": "Policy Name", + "locale": "en" + } + ] + }, + "policyNumber": { + "display": [ + { + "name": "Policy Number", + "locale": "en" + } + ] + } + } + }, + "display": [ + { + "name": "Health Insurance", + "locale": "en", + "logo": { + "url": "https://raw.githubusercontent.com/tw-mosip/file-server/master/StayProtectedInsurance.png", + "alt_text": "a square logo of a Veridonia" + }, + "background_image": { + "uri": "https://api.dev1.mosip.net/inji/veridonia-logo.png" + }, + "background_color": "#FDFAF9", + "text_color": "#7C4616" + } + ] + }, + "LifeInsuranceCredential": { + "format": "ldp_vc", + "scope": "life_insurance_vc_ldp", + "order": [ + "fullName", + "policyName", + "policyExpiresOn", + "policyIssuedOn", + "policyNumber", + "mobile", + "dob", + "gender", + "benefits", + "email" + ], + "proof_types_supported": { + "jwt": { + "proof_signing_alg_values_supported": [ + "RS256", + "ES256" + ] + } + }, + "credential_definition": { + "type": [ + "VerifiableCredential", + "LifeInsuranceCredential" + ], + "credentialSubject": { + "fullName": { + "display": [ + { + "name": "Name", + "locale": "en" + } + ] + }, + "mobile": { + "display": [ + { + "name": "Phone Number", + "locale": "en" + } + ] + }, + "dob": { + "display": [ + { + "name": "Date of Birth", + "locale": "en" + } + ] + }, + "gender": { + "display": [ + { + "name": "Gender", + "locale": "en" + } + ] + }, + "benefits": { + "display": [ + { + "name": "Benefits", + "locale": "en" + } + ] + }, + "email": { + "display": [ + { + "name": "Email Id", + "locale": "en" + } + ] + }, + "policyIssuedOn": { + "display": [ + { + "name": "Policy Issued On", + "locale": "en" + } + ] + }, + "policyExpiresOn": { + "display": [ + { + "name": "Policy Expires On", + "locale": "en" + } + ] + }, + "policyName": { + "display": [ + { + "name": "Policy Name", + "locale": "en" + } + ] + }, + "policyNumber": { + "display": [ + { + "name": "Policy Number", + "locale": "en" + } + ] + } + } + }, + "display": [ + { + "name": "Life Insurance", + "locale": "en", + "logo": { + "url": "https://raw.githubusercontent.com/tw-mosip/file-server/master/StayProtectedInsurance.png", + "alt_text": "a square logo of a Veridonia" + }, + "background_image": { + "uri": "https://api.dev1.mosip.net/inji/veridonia-logo.png" + }, + "background_color": "#FDFAF9", + "text_color": "#7C4616" + } + ] + } + } + } + }, + "Failure response": { + "value": { + "id": null, + "version": "v1", + "str": null, + "responsetime": "2022-10-31T05:07:34.789Z", + "metadata": null, + "response": null, + "errors": [ + { + "errorCode": "RESIDENT-APP-026", + "errorMessage": "Api not accessible failure" + } + ] + } + }, + "Failure response 2": { + "value": { + "id": null, + "version": "v1", + "str": null, + "responsetime": "2022-10-31T05:07:34.789Z", + "metadata": null, + "response": null, + "errors": [ + { + "errorCode": "RESIDENT-APP-035", + "errorMessage": "Invalid issuer ID" + } + ] + } + } + } + } + } + } + }, + "summary": "Get Issuers Wellknown" + } + }, + "/issuers/{issuer-id}/credentials/{credentialType}/download": { + "get": { + "operationId": "generatePdfForVC", + "parameters": [ + { + "name": "Bearer", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "issuer-id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "credentialType", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Trusted Issuers" + ], + "description": "This API is responsible for generating PDFs for the received VC content. It fetches display properties from the well-known configuration of the issuer and incorporates them into the predefined template of the PDF file.", + "responses": { + "200": { + "description": "OK", + "content": { + "application/pdf": { + "schema": { + "type": "string", + "format": "binary" + }, + "examples": { + "Failure response 1": { + "value": { + "id": null, + "version": "v1", + "str": null, + "responsetime": "2022-10-31T05:07:34.789Z", + "metadata": null, + "response": null, + "errors": [ + { + "errorCode": "RESIDENT-APP-036", + "errorMessage": "Invalid Credential Type Id" + } + ] + } + }, + "Failure response 2": { + "value": { + "id": null, + "version": "v1", + "str": null, + "responsetime": "2022-10-31T05:07:34.789Z", + "metadata": null, + "response": null, + "errors": [ + { + "errorCode": "RESIDENT-APP-026", + "errorMessage": "Api not accessible failure" + } + ] + } + }, + "Failure response 3": { + "value": { + "id": null, + "version": "v1", + "str": null, + "responsetime": "2022-10-31T05:07:34.789Z", + "metadata": null, + "response": null, + "errors": [ + { + "errorCode": "RESIDENT-APP-028", + "errorMessage": "error occured while signing pdf" + } + ] + } + } + } + } + } + } + }, + "summary": "Download Credential As PDF" + } + }, + "/authorize": { + "get": { + "summary": "Authorize Verifiable Presentation", + "tags": [ + "Authorize the Verifiable Presentation" + ], + "responses": { + "302": { + "description": "Found\n\n**Success Case :**\n\n```json\n\n{redirectUri}#vp_token={base64_encoded_vpToken}&presentation_submission={url_encoded_presentation_submission}\n\n```\n**Error Case :** \n\n```json\n\n{redirectUri}?error={error_codes}&error_messages={error_messages}\n\n```\n\n\n**Possible Error Codes and Error Messages :**\n\n- **invalid_request** - \"Some incorrect parameters in the request\"\n- **unsupported_format** - \"No VC of this format is found\"\n- **resource_not_found** - \"The requested resource doesn’t exist.\"\n- **server_unavailable** - \"The server is not reachable right now.\"\n- **resource_expired** - \"The requested resource expired.\"\n- **resource_invalid** - \"The requested resource is invalid.\"\n- **request_timed_out** - \"We are unable to process your request right now\"\n- **uri_too_long** - \"Resource URI is too long to be handled\"\n- **invalid_client** - \"The requested client doesn’t match.\"\n- **invalid_redirect_uri** - \"The requested redirect URI doesn’t match.\"\n- **internal_server_error** - \"We are unable to process request now\"\n\n" + } + }, + "operationId": "get-v1-mimoto-authorize", + "x-stoplight": { + "id": "x4k8ruhin2f09" + }, + "parameters": [ + { + "schema": { + "type": "string", + "default": "vp_token" + }, + "in": "query", + "name": "response_type", + "description": "Response Type of the authorization" + }, + { + "schema": { + "type": "string" + }, + "in": "query", + "name": "resource", + "description": "Credential Resource url" + }, + { + "schema": { + "type": "string" + }, + "in": "query", + "name": "presentation_definition", + "description": "URL Encoded Value of the presentation Definition" + }, + { + "schema": { + "type": "string" + }, + "in": "query", + "name": "client_id", + "description": "Client ID of the registered verifier" + }, + { + "schema": { + "type": "string" + }, + "in": "query", + "name": "redirect_uri", + "description": "One of the Redirect uri of the registered verifiers" + } + ] + } + } + }, + "components": { + "schemas": { + "AppVIDGenerateRequestDTO": { + "type": "object", + "properties": { + "individualId": { + "type": "string" + }, + "individualIdType": { + "type": "string" + }, + "otp": { + "type": "string" + }, + "vidType": { + "type": "string" + }, + "transactionID": { + "type": "string" + } + } + }, + "AppOTPRequestDTO": { + "type": "object", + "properties": { + "individualId": { + "type": "string" + }, + "individualIdType": { + "type": "string" + }, + "otpChannel": { + "type": "array", + "items": { + "type": "string" + } + }, + "transactionID": { + "type": "string" + } + } + }, + "AppCredentialRequestDTO": { + "type": "object", + "properties": { + "individualId": { + "type": "string" + }, + "otp": { + "type": "string" + }, + "transactionID": { + "type": "string" + }, + "issuer": { + "type": "string" + }, + "credentialType": { + "type": "string" + }, + "user": { + "type": "string" + } + } + }, + "CredentialDownloadRequestDTO": { + "type": "object", + "properties": { + "individualId": { + "type": "string" + }, + "requestId": { + "type": "string" + } + } + }, + "CredentialDownloadResponseDTO": { + "type": "object", + "properties": { + "credential": { + "$ref": "#/components/schemas/JsonNode" + }, + "verifiableCredential": { + "$ref": "#/components/schemas/JsonNode" + } + } + }, + "JsonNode": { + "type": "object" + }, + "Event": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "transactionId": { + "type": "string" + }, + "type": { + "$ref": "#/components/schemas/Type" + }, + "timestamp": { + "type": "string" + }, + "dataShareUri": { + "type": "string" + }, + "data": { + "type": "object", + "additionalProperties": { + "type": "object" + } + } + } + }, + "EventModel": { + "type": "object", + "properties": { + "publisher": { + "type": "string" + }, + "topic": { + "type": "string" + }, + "publishedOn": { + "type": "string" + }, + "event": { + "$ref": "#/components/schemas/Event" + } + } + }, + "Type": { + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "GenericResponseDTO": { + "type": "object", + "properties": { + "status": { + "type": "string" + }, + "message": { + "type": "string" + } + } + }, + "AidStatusRequestDTO": { + "type": "object", + "properties": { + "aid": { + "type": "string" + }, + "otp": { + "type": "string" + }, + "transactionID": { + "type": "string" + } + } + } + } + }, + "x-internal": true +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index 5a23fb163..c843d46a4 100644 --- a/pom.xml +++ b/pom.xml @@ -33,11 +33,11 @@ UTF-8 - 1.2.1-SNAPSHOT - 1.2.1-SNAPSHOT - 1.2.1-SNAPSHOT - 1.2.1-SNAPSHOT - 1.2.1-SNAPSHOT + 1.3.0-beta.1 + 1.3.0-SNAPSHOT + 1.3.0-SNAPSHOT + 1.3.0-SNAPSHOT + 1.3.0-SNAPSHOT 3.9.1 @@ -209,7 +209,7 @@ io.mosip.kernel kernel-websubclient-api - 1.2.1-SNAPSHOT + 1.3.0-beta.1 @@ -412,8 +412,8 @@ io.mosip - pixelpass - 1.0-SNAPSHOT + pixelpass-jar + 0.3.0-SNAPSHOT From ec3a86b3330444cbffaa8a73bb94a02e5573067e Mon Sep 17 00:00:00 2001 From: Vijay Kumar S <94220135+vijay151096@users.noreply.github.com> Date: Tue, 10 Sep 2024 10:18:54 +0530 Subject: [PATCH 232/860] [INJIWEB-424] : vc verification before pdf download with error handling (#423) * [INJIMOB-1679]: expose an api to verift the VC by consuming Vc-verifier library Signed-off-by: Alka Prasad * [INJIMOB-1679]: update multiple catch block structure Signed-off-by: Alka Prasad * [INJIMOB-1679]: update the vc-verify endpoint to expect VCCredentialResponse instead of String data Signed-off-by: Alka Prasad * [INJIMOB-1679]: refactor all controller tests Signed-off-by: Alka Prasad * [INJIMOB-1679]: rename ProofTypeNotFoundException to ProofTypeNotSupportedException Signed-off-by: Alka Prasad * [INJIWEB-424] : vc verification before pdf download Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-424] : vc verification before pdf download Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-424] : vc verification before pdf download with error handling Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-424] : introduce error in vc verification Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-424] : introduce error testing in vc verification Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-424] : introduce error testing in vc verification Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-424] : introduce error testing in vc verification Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-424] : remove test ignore Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-424] : modifying the utilities Bean Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-424] : modifying the utilities Bean Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-424] : modifying the utilities Bean Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --------- Signed-off-by: Alka Prasad Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> Co-authored-by: Alka Prasad --- pom.xml | 5 + .../controller/CredentialsController.java | 22 +- .../mimoto/controller/IssuersController.java | 8 - .../mimoto/exception/ErrorConstants.java | 10 +- .../exception/PlatformErrorMessages.java | 1 + .../exception/VCVerificationException.java | 16 + .../mimoto/service/CredentialService.java | 10 +- .../service/impl/CredentialServiceImpl.java | 51 +- .../java/io/mosip/mimoto/util/Utilities.java | 3 +- src/main/resources/mimoto-issuers-config.json | 2 +- .../mimoto/config/InjiConfiguration.java | 18 + .../io/mosip/mimoto/config/MimotoConfig.java | 5 - .../AttestationServiceControllerTest.java | 74 +++ .../CredentialShareControllerTest.java | 156 +++++ .../controller/CredentialsControllerTest.java | 118 ++++ .../mimoto/controller/IdpControllerTest.java | 103 +++ .../mimoto/controller/InjiControllerTest.java | 606 +----------------- .../controller/IssuersControllerTest.java | 156 +++++ .../ResidentServiceControllerTest.java | 153 +++++ .../mimoto/service/CredentialServiceTest.java | 26 + .../io/mosip/mimoto/util/TestUtilities.java | 10 + .../responses/VerifiableCredential.json | 56 ++ 22 files changed, 976 insertions(+), 633 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/exception/VCVerificationException.java create mode 100644 src/test/java/io/mosip/mimoto/config/InjiConfiguration.java create mode 100644 src/test/java/io/mosip/mimoto/controller/AttestationServiceControllerTest.java create mode 100644 src/test/java/io/mosip/mimoto/controller/CredentialShareControllerTest.java create mode 100644 src/test/java/io/mosip/mimoto/controller/CredentialsControllerTest.java create mode 100644 src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java create mode 100644 src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java create mode 100644 src/test/java/io/mosip/mimoto/controller/ResidentServiceControllerTest.java create mode 100644 src/test/resources/responses/VerifiableCredential.json diff --git a/pom.xml b/pom.xml index c843d46a4..45744040d 100644 --- a/pom.xml +++ b/pom.xml @@ -116,6 +116,11 @@ kernel-core 1.2.1-SNAPSHOT + + io.mosip.vercred + vcverifier + 1.1.0-SNAPSHOT + org.apache.logging.log4j log4j-core diff --git a/src/main/java/io/mosip/mimoto/controller/CredentialsController.java b/src/main/java/io/mosip/mimoto/controller/CredentialsController.java index 5a4dbead9..f569f1fcc 100644 --- a/src/main/java/io/mosip/mimoto/controller/CredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/CredentialsController.java @@ -1,19 +1,23 @@ package io.mosip.mimoto.controller; +import com.fasterxml.jackson.core.JsonProcessingException; import io.mosip.mimoto.core.http.ResponseWrapper; import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; +import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.InvalidCredentialResourceException; +import io.mosip.mimoto.exception.VCVerificationException; import io.mosip.mimoto.service.CredentialService; -import io.mosip.mimoto.service.IdpService; -import io.mosip.mimoto.service.IssuersService; import io.mosip.mimoto.util.DateUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.InputStreamResource; -import org.springframework.http.*; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.io.ByteArrayInputStream; @@ -21,8 +25,7 @@ import java.util.List; import java.util.Map; -import static io.mosip.mimoto.exception.PlatformErrorMessages.API_NOT_ACCESSIBLE_EXCEPTION; -import static io.mosip.mimoto.exception.PlatformErrorMessages.MIMOTO_PDF_SIGN_EXCEPTION; +import static io.mosip.mimoto.exception.PlatformErrorMessages.*; @RestController @RequestMapping(value="/credentials") @@ -31,14 +34,10 @@ public class CredentialsController { private static final String ID = "mosip.mimoto.credentials"; private final Logger logger = LoggerFactory.getLogger(CredentialsController.class); - @Autowired - IssuersService issuersService; @Autowired CredentialService credentialService; - @Autowired - IdpService idpService; @PostMapping("/download") public ResponseEntity downloadCredentialAsPDF( @@ -72,11 +71,14 @@ public ResponseEntity downloadCredentialAsPDF( logger.error("Exception occurred while pushing the data to data share ", invalidCredentialResourceException); responseWrapper.setErrors(List.of(new ErrorDTO(invalidCredentialResourceException.getErrorCode(), invalidCredentialResourceException.getMessage()))); return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); + } catch (VCVerificationException exception) { + logger.error("Exception occurred while verification of the verifiable Credential", exception); + responseWrapper.setErrors(List.of(new ErrorDTO(exception.getErrorCode(), exception.getMessage()))); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); } catch (Exception exception) { logger.error("Exception occurred while generating pdf ", exception); responseWrapper.setErrors(List.of(new ErrorDTO(MIMOTO_PDF_SIGN_EXCEPTION.getCode(), exception.getMessage()))); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(responseWrapper); } } - } diff --git a/src/main/java/io/mosip/mimoto/controller/IssuersController.java b/src/main/java/io/mosip/mimoto/controller/IssuersController.java index e74c84997..689e686f5 100644 --- a/src/main/java/io/mosip/mimoto/controller/IssuersController.java +++ b/src/main/java/io/mosip/mimoto/controller/IssuersController.java @@ -6,8 +6,6 @@ import io.mosip.mimoto.dto.IssuersDTO; import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; import io.mosip.mimoto.exception.ApiNotAccessibleException; -import io.mosip.mimoto.service.CredentialService; -import io.mosip.mimoto.service.IdpService; import io.mosip.mimoto.service.IssuersService; import io.mosip.mimoto.util.DateUtils; import org.slf4j.Logger; @@ -31,12 +29,6 @@ public class IssuersController { @Autowired IssuersService issuersService; - @Autowired - IdpService idpService; - - @Autowired - CredentialService credentialService; - private static final String ID = "mosip.mimoto.issuers"; private final Logger logger = LoggerFactory.getLogger(IssuersController.class); diff --git a/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java b/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java index 61dbb7253..1bf3d2b38 100644 --- a/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java +++ b/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java @@ -17,7 +17,15 @@ public enum ErrorConstants { URI_TOO_LONG("uri_too_long", "Resource URI is too long to be handled"), INVALID_CLIENT("invalid_client", "The requested client doesn’t match."), INVALID_REDIRECT_URI("invalid_redirect_uri", "The requested redirect uri doesn’t match."), - INTERNAL_SERVER_ERROR("internal_server_error", "We are unable to process request now"); + INTERNAL_SERVER_ERROR("internal_server_error", "We are unable to process request now"), + + PROOF_TYPE_NOT_SUPPORTED_EXCEPTION("proof_type_not_supported", "Proof Type available in received credentials is not matching with supported proof terms" ), + SIGNATURE_VERIFICATION_EXCEPTION("signature_verification_failed", "Error while doing signature verification" ), + JSON_PARSING_EXCEPTION("json_parsing_failed", "Given data couldn't be parsed to JSON string" ), + UNKNOWN_EXCEPTION("unknown_exception", "Error while doing verification of verifiable credential" ), + PROOF_DOCUMENT_NOT_FOUND_EXCEPTION("proof_document_not_found", "Proof document is not available in the received credentials" ), + PUBLIC_KEY_NOT_FOUND_EXCEPTION("public_key_not_found", "Proof document is not available in the received credentials"); + private final String errorCode; private final String errorMessage; diff --git a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java index cfaaa8136..cb965e675 100644 --- a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java +++ b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java @@ -89,6 +89,7 @@ public enum PlatformErrorMessages { INVALID_CREDENTIAL_RESOURCE_URI_EXCEPTION(PlatformConstants.PREFIX + "040", "The Credential Resource is Invalid"), INVALID_CREDENTIAL_ISSUER_WELLKNOWN_RESPONSE_EXCEPTION(PlatformConstants.PREFIX + "041", "Invalid Wellknown from Issuer"); + /** The error message. */ private final String errorMessage; diff --git a/src/main/java/io/mosip/mimoto/exception/VCVerificationException.java b/src/main/java/io/mosip/mimoto/exception/VCVerificationException.java new file mode 100644 index 000000000..67f03ab8a --- /dev/null +++ b/src/main/java/io/mosip/mimoto/exception/VCVerificationException.java @@ -0,0 +1,16 @@ +package io.mosip.mimoto.exception; + +public class VCVerificationException extends BaseUncheckedException { + + private static final long serialVersionUID = -5350213197226295789L; + + /** + * Constructor with errorCode, and errorMessage + * + * @param errorCode The error code for this exception + * @param errorMessage The error message for this exception + */ + public VCVerificationException(String errorCode, String errorMessage) { + super(errorCode, errorMessage); + } +} diff --git a/src/main/java/io/mosip/mimoto/service/CredentialService.java b/src/main/java/io/mosip/mimoto/service/CredentialService.java index 603499aa7..753dfdba8 100644 --- a/src/main/java/io/mosip/mimoto/service/CredentialService.java +++ b/src/main/java/io/mosip/mimoto/service/CredentialService.java @@ -1,10 +1,13 @@ package io.mosip.mimoto.service; -import io.mosip.mimoto.dto.IssuerDTO; +import com.fasterxml.jackson.core.JsonProcessingException; import io.mosip.mimoto.dto.idp.TokenResponseDTO; -import io.mosip.mimoto.dto.mimoto.*; +import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; import io.mosip.mimoto.exception.ApiNotAccessibleException; -import org.apache.http.auth.InvalidCredentialsException; +import io.mosip.vercred.exception.ProofDocumentNotFoundException; +import io.mosip.vercred.exception.ProofTypeNotSupportedException; +import io.mosip.vercred.exception.SignatureVerificationException; +import io.mosip.vercred.exception.UnknownException; import java.io.ByteArrayInputStream; import java.io.IOException; @@ -12,5 +15,6 @@ public interface CredentialService { TokenResponseDTO getTokenResponse(Map params, String issuerId) throws ApiNotAccessibleException, IOException; + ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String credentialType, TokenResponseDTO response) throws Exception; } diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java index a65f8ce26..12b684dda 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java @@ -19,6 +19,7 @@ import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.IdpException; import io.mosip.mimoto.exception.InvalidCredentialResourceException; +import io.mosip.mimoto.exception.VCVerificationException; import io.mosip.mimoto.model.QRCodeType; import io.mosip.mimoto.service.CredentialService; import io.mosip.mimoto.service.IdpService; @@ -28,8 +29,9 @@ import io.mosip.mimoto.util.RestApiClient; import io.mosip.mimoto.util.Utilities; import io.mosip.pixelpass.PixelPass; +import io.mosip.vercred.CredentialsVerifier; +import io.mosip.vercred.exception.*; import jakarta.annotation.PostConstruct; -import lombok.NoArgsConstructor; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; import org.jetbrains.annotations.NotNull; @@ -50,6 +52,8 @@ import java.nio.charset.StandardCharsets; import java.util.*; +import static io.mosip.mimoto.exception.ErrorConstants.*; + @Service public class CredentialServiceImpl implements CredentialService { @@ -95,9 +99,11 @@ public class CredentialServiceImpl implements CredentialService { PresentationServiceImpl presentationService; PixelPass pixelPass; + CredentialsVerifier credentialsVerifier; @PostConstruct public void init(){ pixelPass = new PixelPass(); + credentialsVerifier = new CredentialsVerifier(); } @Override @@ -118,8 +124,13 @@ public ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String cred CredentialsSupportedResponse credentialsSupportedResponse = issuerService.getIssuerWellknownForCredentialType(issuerId, credentialType); VCCredentialRequest vcCredentialRequest = generateVCCredentialRequest(issuerConfig, credentialIssuerWellKnownResponse, credentialsSupportedResponse, response.getAccess_token()); VCCredentialResponse vcCredentialResponse = downloadCredential(credentialIssuerWellKnownResponse.getCredentialEndPoint(), vcCredentialRequest, response.getAccess_token()); - String dataShareUrl = dataShareService.storeDataInDataShare(objectMapper.writeValueAsString(vcCredentialResponse)); - return generatePdfForVerifiableCredentials(vcCredentialResponse, issuerConfig, credentialsSupportedResponse, dataShareUrl); + boolean verificationStatus = vcCredentialResponse.getCredential().getProof().getType().equals("RsaSignature2018") ? verifyCredential(vcCredentialResponse) : true; + if(verificationStatus) { + String dataShareUrl = dataShareService.storeDataInDataShare(objectMapper.writeValueAsString(vcCredentialResponse)); + return generatePdfForVerifiableCredentials(vcCredentialResponse, issuerConfig, credentialsSupportedResponse, dataShareUrl); + } + throw new VCVerificationException(SIGNATURE_VERIFICATION_EXCEPTION.getErrorCode(), + SIGNATURE_VERIFICATION_EXCEPTION.getErrorMessage()); } public VCCredentialResponse downloadCredential(String credentialEndpoint, VCCredentialRequest vcCredentialRequest, String accessToken) throws InvalidCredentialResourceException { @@ -151,6 +162,40 @@ public ByteArrayInputStream generatePdfForVerifiableCredentials(VCCredentialResp return renderVCInCredentialTemplate(data); } + public Boolean verifyCredential(VCCredentialResponse vcCredentialResponse) throws VCVerificationException { + try { + String credentialString = objectMapper.writeValueAsString(vcCredentialResponse.getCredential()); + return credentialsVerifier.verifyCredentials(credentialString); + } catch (ProofDocumentNotFoundException | ProofTypeNotSupportedException | SignatureVerificationException | UnknownException | JsonProcessingException | + PublicKeyNotFoundException exception ) { + String errorCode = UNKNOWN_EXCEPTION.getErrorCode(); + String errorMessage = UNKNOWN_EXCEPTION.getErrorMessage(); + switch (exception.getClass().getSimpleName()) { + case "ProofDocumentNotFoundException" -> { + errorCode = PROOF_DOCUMENT_NOT_FOUND_EXCEPTION.getErrorCode(); + errorMessage = PROOF_DOCUMENT_NOT_FOUND_EXCEPTION.getErrorMessage(); + } + case "ProofTypeNotSupportedException" -> { + errorCode = PROOF_TYPE_NOT_SUPPORTED_EXCEPTION.getErrorCode(); + errorMessage = PROOF_TYPE_NOT_SUPPORTED_EXCEPTION.getErrorMessage(); + } + case "SignatureVerificationException" -> { + errorCode = SIGNATURE_VERIFICATION_EXCEPTION.getErrorCode(); + errorMessage = SIGNATURE_VERIFICATION_EXCEPTION.getErrorMessage(); + } + case "JsonProcessingException" -> { + errorCode = JSON_PARSING_EXCEPTION.getErrorCode(); + errorMessage = JSON_PARSING_EXCEPTION.getErrorMessage(); + } + case "PublicKeyNotFoundException" -> { + errorCode = PUBLIC_KEY_NOT_FOUND_EXCEPTION.getErrorCode(); + errorMessage = PUBLIC_KEY_NOT_FOUND_EXCEPTION.getErrorMessage(); + } + } + throw new VCVerificationException(errorCode, errorMessage); + } + } + @NotNull private static LinkedHashMap loadDisplayPropertiesFromWellknown(VCCredentialResponse vcCredentialResponse, CredentialsSupportedResponse credentialsSupportedResponse) { LinkedHashMap displayProperties = new LinkedHashMap<>(); diff --git a/src/main/java/io/mosip/mimoto/util/Utilities.java b/src/main/java/io/mosip/mimoto/util/Utilities.java index cd8ef77ed..cacda19e4 100644 --- a/src/main/java/io/mosip/mimoto/util/Utilities.java +++ b/src/main/java/io/mosip/mimoto/util/Utilities.java @@ -11,7 +11,6 @@ import org.json.simple.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.core.io.Resource; import org.springframework.stereotype.Component; import javax.imageio.ImageIO; @@ -77,7 +76,7 @@ public class Utilities { private String credentialTemplateHtmlString = null; -// uncomment for running mimoto Locally to populate the issuers json + // uncomment for running mimoto Locally to populate the issuers json // public Utilities(@Value("classpath:mimoto-issuers-config.json") Resource resource, // @Value("classpath:mimoto-trusted-verifiers.json") Resource trustedVerifiersResource, // @Value("classpath:/templates/credential-template.html") Resource credentialTemplateResource) throws IOException{ diff --git a/src/main/resources/mimoto-issuers-config.json b/src/main/resources/mimoto-issuers-config.json index 9c87da474..8af145581 100644 --- a/src/main/resources/mimoto-issuers-config.json +++ b/src/main/resources/mimoto-issuers-config.json @@ -68,7 +68,7 @@ "client_id": "XusU7P1y10lMr9NA1qnrny_fqynODwV4SCvWPP8cfdY", "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", "token_endpoint": "https://api.dev1.mosip.net/v1/mimoto/get-token/Mosip", - "authorization_audience": "https://esignet-insurance.dev1.mosip.net/v1/esignet/oauth/v2/token", + "authorization_audience": "https://esignet-mosipid.dev1.mosip.net/v1/esignet/oauth/v2/token", "proxy_token_endpoint": "https://esignet-mosipid.dev1.mosip.net/v1/esignet/oauth/v2/token", "client_alias": "mpartner-default-test-mosipid", "qr_code_type": "OVPRequest", diff --git a/src/test/java/io/mosip/mimoto/config/InjiConfiguration.java b/src/test/java/io/mosip/mimoto/config/InjiConfiguration.java new file mode 100644 index 000000000..a0332f0fa --- /dev/null +++ b/src/test/java/io/mosip/mimoto/config/InjiConfiguration.java @@ -0,0 +1,18 @@ +package io.mosip.mimoto.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.HashMap; +import java.util.Map; + +@Configuration +public class InjiConfiguration { + @Bean + @ConfigurationProperties(prefix = "mosip.inji") + public Map injiConfig() { + return new HashMap<>(); + } + +} diff --git a/src/test/java/io/mosip/mimoto/config/MimotoConfig.java b/src/test/java/io/mosip/mimoto/config/MimotoConfig.java index d303b0231..0a127fdce 100644 --- a/src/test/java/io/mosip/mimoto/config/MimotoConfig.java +++ b/src/test/java/io/mosip/mimoto/config/MimotoConfig.java @@ -100,9 +100,4 @@ public RestTemplate plainRestTemplate() } - @Bean - @ConfigurationProperties(prefix = "mosip.inji") - public Map injiConfig() { - return new HashMap<>(); - } } diff --git a/src/test/java/io/mosip/mimoto/controller/AttestationServiceControllerTest.java b/src/test/java/io/mosip/mimoto/controller/AttestationServiceControllerTest.java new file mode 100644 index 000000000..8dbe6a02b --- /dev/null +++ b/src/test/java/io/mosip/mimoto/controller/AttestationServiceControllerTest.java @@ -0,0 +1,74 @@ +package io.mosip.mimoto.controller; + +import io.mosip.mimoto.dto.mimoto.AttestationStatement; +import io.mosip.mimoto.util.AttestationOfflineVerify; +import io.mosip.mimoto.util.AttestationOnlineVerify; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = AttestationServiceController.class) +@AutoConfigureMockMvc(addFilters = false) +@EnableWebMvc +public class AttestationServiceControllerTest { + + + @MockBean + private AttestationOfflineVerify attestationOfflineVerify; + + @MockBean + private AttestationOnlineVerify attestationOnlineVerify; + + @Autowired + private MockMvc mockMvc; + + @Test + public void processOfflineTest() throws Exception { + AttestationStatement attestationStatement = new AttestationStatement(); + Mockito.when(attestationOfflineVerify.parseAndVerify(Mockito.anyString())).thenReturn(attestationStatement); + this.mockMvc.perform(post("/safetynet/offline/verify").contentType(MediaType.APPLICATION_JSON_VALUE) + .content("offlineStr")) + .andExpect(status().isOk()); + } + + @Test + public void processOfflineFailureTest() throws Exception { + AttestationStatement attestationStatement = new AttestationStatement(); + Mockito.when(attestationOfflineVerify.parseAndVerify(Mockito.anyString())).thenThrow(new Exception("Exception")); + this.mockMvc.perform(post("/safetynet/offline/verify").contentType(MediaType.APPLICATION_JSON_VALUE) + .content("offlineStr")) + .andExpect(status().isOk()); + } + + @Test + public void processOnlineTest() throws Exception { + AttestationStatement attestationStatement = new AttestationStatement(); + Mockito.when(attestationOnlineVerify.parseAndVerify(Mockito.anyString())).thenReturn(attestationStatement); + this.mockMvc.perform(post("/safetynet/online/verify").contentType(MediaType.APPLICATION_JSON_VALUE) + .content("offlineStr")) + .andExpect(status().isOk()); + } + + @Test + public void processOnlineFailureTest() throws Exception { + AttestationStatement attestationStatement = new AttestationStatement(); + Mockito.when(attestationOnlineVerify.parseAndVerify(Mockito.anyString())).thenThrow(new Exception("Exception")); + this.mockMvc.perform(post("/safetynet/online/verify").contentType(MediaType.APPLICATION_JSON_VALUE) + .content("offlineStr")) + .andExpect(status().isOk()); + } + +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/controller/CredentialShareControllerTest.java b/src/test/java/io/mosip/mimoto/controller/CredentialShareControllerTest.java new file mode 100644 index 000000000..f595cbcf0 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/controller/CredentialShareControllerTest.java @@ -0,0 +1,156 @@ +package io.mosip.mimoto.controller; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.JsonNodeFactory; +import io.mosip.kernel.core.util.JsonUtils; +import io.mosip.mimoto.core.http.ResponseWrapper; +import io.mosip.mimoto.dto.mimoto.AppCredentialRequestDTO; +import io.mosip.mimoto.dto.mimoto.CredentialDownloadRequestDTO; +import io.mosip.mimoto.dto.resident.CredentialRequestResponseDTO; +import io.mosip.mimoto.dto.resident.CredentialRequestResponseInnerResponseDTO; +import io.mosip.mimoto.dto.resident.CredentialRequestStatusResponseDTO; +import io.mosip.mimoto.model.Event; +import io.mosip.mimoto.model.EventModel; +import io.mosip.mimoto.service.RestClientService; +import io.mosip.mimoto.service.impl.CredentialShareServiceImpl; +import io.mosip.mimoto.util.CryptoCoreUtil; +import io.mosip.mimoto.util.RequestValidator; +import io.mosip.mimoto.util.RestApiClient; +import io.mosip.mimoto.util.Utilities; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; + +import java.io.IOException; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = CredentialShareController.class) +@AutoConfigureMockMvc(addFilters = false) +@EnableWebMvc +public class CredentialShareControllerTest { + + + @Autowired + private MockMvc mockMvc; + + @MockBean + public RestApiClient restApiClient; + + + @MockBean + public RestClientService restClientService; + + @MockBean + private CredentialShareServiceImpl credentialShareService; + + @MockBean + Utilities utilities; + + @MockBean + public CryptoCoreUtil cryptoCoreUtil; + + @MockBean + RequestValidator requestValidator; + + @Before + public void setup() { + Mockito.when(utilities.getDataPath()).thenReturn("target"); + } + + @Test + public void handleSubscribeEventTest() throws Exception { + Event event = new Event(); + event.setId("id"); + event.setTransactionId("transId"); + EventModel eventModel = new EventModel(); + eventModel.setEvent(event); + + Mockito.when(credentialShareService.generateDocuments(Mockito.any())).thenReturn(true); + + this.mockMvc.perform(post("/credentialshare/callback/notify").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(eventModel))) + .andExpect(status().isOk()); + } + + @Test + public void requestTest() throws Exception { + AppCredentialRequestDTO requestDTO = new AppCredentialRequestDTO(); + requestDTO.setUser("mono"); + requestDTO.setTransactionID("transactionId"); + requestDTO.setOtp("123456"); + requestDTO.setIndividualId("123456"); + requestDTO.setCredentialType("VERCRED"); + + CredentialRequestResponseInnerResponseDTO dto = new CredentialRequestResponseInnerResponseDTO(); + dto.setRequestId("requestId"); + CredentialRequestResponseDTO response = new CredentialRequestResponseDTO(); + response.setResponse(dto); + + Mockito.when(restClientService.postApi(Mockito.any(), Mockito.anyString(), Mockito.anyString(), + Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(response); + + Mockito.when(credentialShareService.generateDocuments(Mockito.any())).thenReturn(true); + + this.mockMvc.perform(post("/credentialshare/request").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .andExpect(status().isOk()); + } + + @Test + public void requestStatusTest() throws Exception { + + ResponseWrapper responseWrapper = new ResponseWrapper<>(); + + Mockito.when(restClientService.postApi(Mockito.any(), Mockito.anyString(), Mockito.anyString(), + Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(responseWrapper); + + this.mockMvc.perform(get("/credentialshare/request/status/1234567890").accept(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isOk()); + } + + @Test + public void downloadTest() throws Exception { + + CredentialDownloadRequestDTO requestDTO = new CredentialDownloadRequestDTO(); + requestDTO.setRequestId("requestId"); + requestDTO.setIndividualId("individualId"); + + JsonNode credentialJSON = JsonNodeFactory.instance.objectNode(); + Mockito.when(utilities.getVC(Mockito.anyString())).thenReturn(credentialJSON); + + JsonNode decryptedCredentialJSON = JsonNodeFactory.instance.objectNode(); + Mockito.when(utilities.getDecryptedVC(Mockito.anyString())).thenReturn(decryptedCredentialJSON); + + JsonNode requestCredentialJSON = JsonNodeFactory.instance.objectNode(); + Mockito.when(utilities.getRequestVC(Mockito.anyString())).thenReturn(requestCredentialJSON); + + this.mockMvc.perform(post("/credentialshare/download").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .andExpect(status().isOk()); + + Mockito.when(utilities.getDecryptedVC(Mockito.anyString())).thenReturn(null); + + this.mockMvc.perform(post("/credentialshare/download").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .andExpect(status().isNotFound()); + + Mockito.when(utilities.getDecryptedVC(Mockito.anyString())).thenThrow(new IOException("Exception")); + + this.mockMvc.perform(post("/credentialshare/download").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .andExpect(status().isNotFound()); + } +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/controller/CredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/CredentialsControllerTest.java new file mode 100644 index 000000000..93116f3b3 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/controller/CredentialsControllerTest.java @@ -0,0 +1,118 @@ +package io.mosip.mimoto.controller; + +import io.mosip.mimoto.dto.idp.TokenResponseDTO; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.service.impl.CredentialServiceImpl; +import io.mosip.mimoto.util.TestUtilities; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; + +import java.io.ByteArrayInputStream; +import java.util.Arrays; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = CredentialsController.class) +@AutoConfigureMockMvc(addFilters = false) +@EnableWebMvc +public class CredentialsControllerTest { + + + @Autowired + private MockMvc mockMvc; + + @MockBean + private CredentialServiceImpl credentialService; + + @Test + public void downloadPDFSuccessfully() throws Exception { + + String issuer = "test-issuer"; + String credential = "test-credential"; + TokenResponseDTO tokenResponseDTO = TestUtilities.getTokenResponseDTO(); + ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream("test-data".getBytes()); + Mockito.when(credentialService.getTokenResponse(Mockito.anyMap(), Mockito.eq(issuer))).thenReturn(tokenResponseDTO); + Mockito.when(credentialService.downloadCredentialAsPDF(Mockito.eq(issuer), Mockito.eq(credential), Mockito.eq(tokenResponseDTO))).thenReturn(byteArrayInputStream); + + mockMvc.perform(post("/credentials/download") + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .content(EntityUtils.toString(new UrlEncodedFormEntity(Arrays.asList( + new BasicNameValuePair("grant_type", "authorization_code"), + new BasicNameValuePair("code", "test-code"), + new BasicNameValuePair("redirect_uri", "test-redirect_uri"), + new BasicNameValuePair("code_verifier", "test-code_verifier"), + new BasicNameValuePair("issuer", issuer), + new BasicNameValuePair("credential", credential) + ))))) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_PDF)) + .andReturn() + .getResponse() + .getContentAsString(); + } + + + @Test + public void throwExceptionWhenTokenIsNotFetched() throws Exception { + + String issuer = "test-issuer"; + String credential = "test-credential"; + Mockito.when(credentialService.getTokenResponse(Mockito.anyMap(), Mockito.eq(issuer))).thenThrow(ApiNotAccessibleException.class); + + mockMvc.perform(post("/credentials/download") + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .content(EntityUtils.toString(new UrlEncodedFormEntity(Arrays.asList( + new BasicNameValuePair("grant_type", "authorization_code"), + new BasicNameValuePair("code", "test-code"), + new BasicNameValuePair("redirect_uri", "test-redirect_uri"), + new BasicNameValuePair("code_verifier", "test-code_verifier"), + new BasicNameValuePair("issuer", issuer), + new BasicNameValuePair("credential", credential) + ))))) + .andExpect(status().isBadRequest()) + .andReturn() + .getResponse() + .getContentAsString(); + } + + @Test + public void throwExceptionWhenPDFGenerationFailed() throws Exception { + + String issuer = "test-issuer"; + String credential = "test-credential"; + TokenResponseDTO tokenResponseDTO = TestUtilities.getTokenResponseDTO(); + Mockito.when(credentialService.getTokenResponse(Mockito.anyMap(), Mockito.eq(issuer))).thenReturn(tokenResponseDTO); + Mockito.when(credentialService.downloadCredentialAsPDF(Mockito.eq(issuer), Mockito.eq(credential), Mockito.eq(tokenResponseDTO))).thenThrow(ApiNotAccessibleException.class); + + mockMvc.perform(post("/credentials/download") + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .content(EntityUtils.toString(new UrlEncodedFormEntity(Arrays.asList( + new BasicNameValuePair("grant_type", "authorization_code"), + new BasicNameValuePair("code", "test-code"), + new BasicNameValuePair("redirect_uri", "test-redirect_uri"), + new BasicNameValuePair("code_verifier", "test-code_verifier"), + new BasicNameValuePair("issuer", issuer), + new BasicNameValuePair("credential", credential) + ))))) + .andExpect(status().isBadRequest()) + .andReturn() + .getResponse() + .getContentAsString(); + } + +} diff --git a/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java b/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java new file mode 100644 index 000000000..5ab6d0495 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java @@ -0,0 +1,103 @@ +package io.mosip.mimoto.controller; + +import com.google.common.collect.Lists; +import io.mosip.kernel.core.util.JsonUtils; +import io.mosip.mimoto.core.http.ResponseWrapper; +import io.mosip.mimoto.dto.mimoto.*; +import io.mosip.mimoto.exception.BaseUncheckedException; +import io.mosip.mimoto.service.RestClientService; +import io.mosip.mimoto.service.impl.IdpServiceImpl; +import io.mosip.mimoto.service.impl.IssuersServiceImpl; +import io.mosip.mimoto.util.DateUtils; +import io.mosip.mimoto.util.JoseUtil; +import io.mosip.mimoto.util.RequestValidator; +import io.mosip.mimoto.util.RestApiClient; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = IdpController.class) +@AutoConfigureMockMvc(addFilters = false) +@EnableWebMvc +public class IdpControllerTest { + + + @Autowired + private MockMvc mockMvc; + + @MockBean + public RestApiClient restApiClient; + + @MockBean + private JoseUtil joseUtil; + + @MockBean + RequestValidator requestValidator; + + @MockBean + public RestClientService restClientService; + + @MockBean + private IssuersServiceImpl issuersService; + + @MockBean + private IdpServiceImpl idpService; + + @Test + public void otpRequestTest() throws Exception { + BindingOtpInnerReqDto innerReqDto = new BindingOtpInnerReqDto(); + innerReqDto.setIndividualId("individualId"); + innerReqDto.setOtpChannels(Lists.newArrayList("EMAIL")); + BindingOtpRequestDto requestDTO = new BindingOtpRequestDto(DateUtils.getUTCCurrentDateTimeString(), innerReqDto); + + + ResponseWrapper response = new ResponseWrapper<>(); + + Mockito.when(restClientService.postApi(Mockito.any(), + Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(response).thenThrow(new BaseUncheckedException("Exception")); + + this.mockMvc.perform(post("/binding-otp").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .andExpect(status().isOk()); + + this.mockMvc.perform(post("/binding-otp").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .andExpect(status().isBadRequest()); + } + + @Test + public void walletBindingTest() throws Exception { + WalletBindingInnerReq innerReqDto = new WalletBindingInnerReq(); + innerReqDto.setPublicKey("-----BEGIN RSA PUBLIC KEY-----\nMIICCgKCAgEAn6+frMlD7DQqbxZW943hRLBApDj1/lHIJdLYSKEGIfwhd58gc0Y4\n1q11mPnpv7gAZ/Wm0iOAkWSzcIWljXFmGnLrUrBsp4WYKdPjqn4tkrCOjiZa5RPk\nY03a40Kz1lx0W9f94Naozglf6KFUSq+qAwuC5kiPxaxsjFA/LWIP+zT2QX/MnrX9\nv7gt2g0BC4pQ01eTTzhhwO2A7k5z3ucsb56ohND4xdIsdCMm1IczBjW0URSO60Bb\n7m5dlO8BFHJ6inV8awO2KHoADbp3wZgid4KqLJ0eVGyNViVFzj4rxSxL3vcYbyKS\nORWSlPZIZL9ZWO1cyPO9+Wxu29IKj4DQEt8glgITlBZ4L29uT7gFPAbypSn/8SvU\nBrNno8+GIe9XWsrDTMT9dfLGzLUitF3A+wwVZuRVhCqYIisOOGuGE18YK0jmdk9l\n89OpK4PduGiUh66zZTcH3thdtaOz6jj+FLKMg2Q3gNqQ1Y0cezO175RNVVX1ffOu\n5qss1RWams5RAXDqqt/MhiopG3DhlyaSC4xdqei7SI8d+S4Bvflub9rypPnhW67g\nNhZvQDJ7Tb1AWHxKmU0wQvEMtwSm9xtsMs4bqotn2M/09BuRqbrhpvAfrfZArkVO\nv8eLXhtDvo2J9gRwHZIS/JZ1Fo+tep1QFHz1Lr5iGRqwLWQlGbKFuL0CAwEAAQ==\n-----END RSA PUBLIC KEY-----\n"); + innerReqDto.setIndividualId("individualId"); + WalletBindingRequestDTO requestDTO = new WalletBindingRequestDTO(); + requestDTO.setRequestTime(DateUtils.getUTCCurrentDateTimeString()); + requestDTO.setRequest(innerReqDto); + + ResponseWrapper response = new ResponseWrapper<>(); + + Mockito.when(restClientService.postApi(Mockito.any(), + Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(response).thenThrow(new BaseUncheckedException("Exception")); + + this.mockMvc.perform(post("/wallet-binding").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .andExpect(status().isOk()); + + this.mockMvc.perform(post("/wallet-binding").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .andExpect(status().isBadRequest()); + } + +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java b/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java index 3cb0353aa..551f33ae7 100644 --- a/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java @@ -1,120 +1,34 @@ package io.mosip.mimoto.controller; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.JsonNodeFactory; -import com.google.common.collect.Lists; -import io.mosip.kernel.biometrics.spi.CbeffUtil; -import io.mosip.kernel.core.util.JsonUtils; -import io.mosip.kernel.websub.api.model.SubscriptionChangeResponse; -import io.mosip.mimoto.TestBootApplication; -import io.mosip.mimoto.core.http.ResponseWrapper; -import io.mosip.mimoto.dto.IssuersDTO; -import io.mosip.mimoto.dto.mimoto.*; -import io.mosip.mimoto.dto.resident.*; -import io.mosip.mimoto.exception.ApiNotAccessibleException; -import io.mosip.mimoto.exception.ApisResourceAccessException; -import io.mosip.mimoto.exception.BaseUncheckedException; -import io.mosip.mimoto.model.Event; -import io.mosip.mimoto.model.EventModel; -import io.mosip.mimoto.service.RestClientService; -import io.mosip.mimoto.service.impl.CredentialServiceImpl; -import io.mosip.mimoto.service.impl.CredentialShareServiceImpl; -import io.mosip.mimoto.service.impl.IssuersServiceImpl; -import io.mosip.mimoto.util.*; -import org.hamcrest.Matchers; -import org.json.JSONObject; -import org.junit.Before; -import org.junit.Ignore; +import io.mosip.mimoto.config.InjiConfiguration; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.ArgumentMatchers; -import org.mockito.Mockito; -import org.skyscreamer.jsonassert.JSONAssert; -import org.skyscreamer.jsonassert.JSONCompareMode; import org.skyscreamer.jsonassert.JSONAssert; import org.skyscreamer.jsonassert.JSONCompareMode; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.http.MediaType; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.util.ResourceUtils; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; -import java.io.ByteArrayInputStream; import java.io.File; -import java.io.IOException; import java.nio.file.Files; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; -import static io.mosip.mimoto.exception.PlatformErrorMessages.API_NOT_ACCESSIBLE_EXCEPTION; -import static io.mosip.mimoto.exception.PlatformErrorMessages.INVALID_ISSUER_ID_EXCEPTION; -import static io.mosip.mimoto.util.TestUtilities.*; -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.verify; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @RunWith(SpringRunner.class) -@SpringBootTest(classes = TestBootApplication.class) -@AutoConfigureMockMvc +@SpringBootTest(classes = {CommonInjiController.class, InjiConfiguration.class}) +@AutoConfigureMockMvc(addFilters = false) +@EnableWebMvc public class InjiControllerTest { - @MockBean - private CbeffUtil cbeffUtil; - - @MockBean - private WebSubSubscriptionHelper webSubSubscriptionHelper; - - @MockBean - private CredentialShareServiceImpl credentialShareService; - - @MockBean - private IssuersServiceImpl issuersService; - - @MockBean - private CredentialServiceImpl credentialService; - - @MockBean - public RestApiClient restApiClient; - @Autowired private MockMvc mockMvc; - @MockBean - Utilities utilities; - - @Autowired - IssuersController issuersController; - - @MockBean - private AttestationOfflineVerify attestationOfflineVerify; - - @MockBean - private AttestationOnlineVerify attestationOnlineVerify; - - @MockBean - public RestClientService restClientService; - - @MockBean - public CryptoCoreUtil cryptoCoreUtil; - - @Before - public void setup() { - Mockito.when(utilities.getDataPath()).thenReturn("target"); - - Mockito.when(webSubSubscriptionHelper.subscribeEvent(Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(new SubscriptionChangeResponse()); - Mockito.doNothing().when(webSubSubscriptionHelper).initSubscriptions(); - Mockito.doNothing().when(webSubSubscriptionHelper).registerTopic(Mockito.any()); - Mockito.doNothing().when(webSubSubscriptionHelper).publish(Mockito.any(), Mockito.any()); - } - @Test public void getAllPropertiesTest() throws Exception { File file = ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX + "responses/InjiConfig.json"); @@ -122,521 +36,13 @@ public void getAllPropertiesTest() throws Exception { String actualResponse = this.mockMvc.perform(get("/allProperties") .accept(MediaType.APPLICATION_JSON_VALUE)) - .andExpect(status().isOk()) - .andReturn() - .getResponse() - .getContentAsString(); - - JSONAssert.assertEquals(expectedResponse, actualResponse, JSONCompareMode.LENIENT); - - } - - @Test - public void getAllIssuersTest() throws Exception { - IssuersDTO issuers = new IssuersDTO(); - issuers.setIssuers((List.of(getIssuerDTO("Issuer1"), getIssuerDTO("Issuer2")))); - Mockito.when(issuersService.getAllIssuers(null)) - .thenReturn(issuers) - .thenThrow(new ApiNotAccessibleException()); - - IssuersDTO filteredIssuers = new IssuersDTO(); - filteredIssuers.setIssuers(issuers.getIssuers().stream().filter(issuer -> issuer.getDisplay().stream() - .anyMatch(displayDTO -> displayDTO.getTitle().toLowerCase().contains("Issuer1".toLowerCase()))) - .collect(Collectors.toList())); - - Mockito.when(issuersService.getAllIssuers("Issuer1")) - .thenReturn(filteredIssuers) - .thenThrow(new ApiNotAccessibleException()); - - mockMvc.perform(get("/issuers").accept(MediaType.APPLICATION_JSON_VALUE)) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.response.issuers", Matchers.everyItem( - Matchers.allOf( - Matchers.hasKey("credential_issuer"), - Matchers.hasKey("display"), - Matchers.hasKey("client_id"), - Matchers.hasKey(".well-known"), - Matchers.not(Matchers.hasKey("redirect_url")), - Matchers.not(Matchers.hasKey("authorization_endpoint")), - Matchers.not(Matchers.hasKey("token_endpoint")), - Matchers.not(Matchers.hasKey("credential_endpoint")), - Matchers.not(Matchers.hasKey("credential_audience")), - Matchers.not(Matchers.hasKey("additional_headers")), - Matchers.not(Matchers.hasKey("scopes_supported")) - ) - ))); - - mockMvc.perform(get("/issuers?search=Issuer1").accept(MediaType.APPLICATION_JSON_VALUE)) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.response.issuers", Matchers.everyItem( - Matchers.allOf( - Matchers.hasKey("credential_issuer"), - Matchers.hasKey("display"), - Matchers.hasKey("client_id"), - Matchers.hasKey(".well-known"), - Matchers.not(Matchers.hasKey("redirect_url")), - Matchers.not(Matchers.hasKey("authorization_endpoint")), - Matchers.not(Matchers.hasKey("token_endpoint")), - Matchers.not(Matchers.hasKey("credential_endpoint")), - Matchers.not(Matchers.hasKey("credential_audience")), - Matchers.not(Matchers.hasKey("additional_headers")), - Matchers.not(Matchers.hasKey("scopes_supported")) - ) - ))); - - mockMvc.perform(get("/issuers").accept(MediaType.APPLICATION_JSON_VALUE)) - .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getCode()))) - .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); - - - mockMvc.perform(get("/issuers?search=Issuer1").accept(MediaType.APPLICATION_JSON_VALUE)) - .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getCode()))) - .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); - } - - @Test - public void getIssuerConfigTest() throws Exception { - Mockito.when(issuersService.getIssuerConfig("id1")) - .thenReturn(getIssuerDTO("Issuer1")) - .thenThrow(new ApiNotAccessibleException()); - Mockito.when(issuersService.getIssuerConfig("invalidId")).thenReturn(null); - - mockMvc.perform(get("/issuers/id1").accept(MediaType.APPLICATION_JSON_VALUE)) - .andExpect(status().isOk()); - - mockMvc.perform(get("/issuers/invalidId").accept(MediaType.APPLICATION_JSON_VALUE)) - .andExpect(status().isNotFound()) - .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is(INVALID_ISSUER_ID_EXCEPTION.getCode()))) - .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(INVALID_ISSUER_ID_EXCEPTION.getMessage()))); - - mockMvc.perform(get("/issuers/id1").accept(MediaType.APPLICATION_JSON_VALUE)) - .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getCode()))) - .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); - } - - @Test - public void getIssuerWellknownTest() throws Exception { - String issuerId = "id1"; - File file = ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX + "responses/expectedWellknown.json"); - String expectedCredentialIssuerWellknownResponse = new String(Files.readAllBytes(file.toPath())); - CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = getCredentialIssuerWellKnownResponseDto(issuerId, Map.of("CredentialType1", getCredentialSupportedResponse("Credential1"))); - Mockito.when(issuersService.getIssuerWellknown(issuerId)).thenReturn(credentialIssuerWellKnownResponse); - - - String actualResponse=mockMvc.perform(get("/issuers/" + issuerId + "/.well-known").accept(MediaType.APPLICATION_JSON_VALUE)) .andExpect(status().isOk()) .andReturn() .getResponse() .getContentAsString(); + JSONAssert.assertEquals(expectedResponse, actualResponse, JSONCompareMode.LENIENT); - JSONAssert.assertEquals(new JSONObject(expectedCredentialIssuerWellknownResponse),new JSONObject(actualResponse),JSONCompareMode.LENIENT); - - } - - - @Test - public void processOfflineTest() throws Exception { - AttestationStatement attestationStatement = new AttestationStatement(); - Mockito.when(attestationOfflineVerify.parseAndVerify(Mockito.anyString())).thenReturn(attestationStatement); - this.mockMvc.perform(post("/safetynet/offline/verify").contentType(MediaType.APPLICATION_JSON_VALUE) - .content("offlineStr")) - .andExpect(status().isOk()); - } - - @Test - public void processOfflineFailureTest() throws Exception { - AttestationStatement attestationStatement = new AttestationStatement(); - Mockito.when(attestationOfflineVerify.parseAndVerify(Mockito.anyString())).thenThrow(new Exception("Exception")); - this.mockMvc.perform(post("/safetynet/offline/verify").contentType(MediaType.APPLICATION_JSON_VALUE) - .content("offlineStr")) - .andExpect(status().isOk()); - } - - @Test - public void processOnlineTest() throws Exception { - AttestationStatement attestationStatement = new AttestationStatement(); - Mockito.when(attestationOnlineVerify.parseAndVerify(Mockito.anyString())).thenReturn(attestationStatement); - this.mockMvc.perform(post("/safetynet/online/verify").contentType(MediaType.APPLICATION_JSON_VALUE) - .content("offlineStr")) - .andExpect(status().isOk()); - } - - @Test - public void processOnlineFailureTest() throws Exception { - AttestationStatement attestationStatement = new AttestationStatement(); - Mockito.when(attestationOnlineVerify.parseAndVerify(Mockito.anyString())).thenThrow(new Exception("Exception")); - this.mockMvc.perform(post("/safetynet/online/verify").contentType(MediaType.APPLICATION_JSON_VALUE) - .content("offlineStr")) - .andExpect(status().isOk()); - } - - /** - * CREDENTIAL SHARE CONTROLLER TEST CASES - */ - - @Test - @Ignore - public void handleSubscribeEventTest() throws Exception { - Event event = new Event(); - event.setId("id"); - event.setTransactionId("transId"); - EventModel eventModel = new EventModel(); - eventModel.setEvent(event); - - Mockito.when(credentialShareService.generateDocuments(Mockito.any())).thenReturn(true); - - this.mockMvc.perform(post("/v1/mimoto/credentialshare/callback/notify").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(eventModel))) - .andExpect(status().isOk()); - } - - @Test - public void requestTest() throws Exception { - AppCredentialRequestDTO requestDTO = new AppCredentialRequestDTO(); - requestDTO.setUser("mono"); - requestDTO.setTransactionID("transactionId"); - requestDTO.setOtp("123456"); - requestDTO.setIndividualId("123456"); - requestDTO.setCredentialType("VERCRED"); - - CredentialRequestResponseInnerResponseDTO dto = new CredentialRequestResponseInnerResponseDTO(); - dto.setRequestId("requestId"); - CredentialRequestResponseDTO response = new CredentialRequestResponseDTO(); - response.setResponse(dto); - - Mockito.when(restClientService.postApi(Mockito.any(), Mockito.anyString(), Mockito.anyString(), - Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(response); - - Mockito.when(credentialShareService.generateDocuments(Mockito.any())).thenReturn(true); - - this.mockMvc.perform(post("/credentialshare/request").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDTO))) - .andExpect(status().isOk()); - } - - @Test - public void requestStatusTest() throws Exception { - - ResponseWrapper responseWrapper = new ResponseWrapper<>(); - - Mockito.when(restClientService.postApi(Mockito.any(), Mockito.anyString(), Mockito.anyString(), - Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(responseWrapper); - - this.mockMvc.perform(get("/credentialshare/request/status/1234567890").accept(MediaType.APPLICATION_JSON_VALUE)) - .andExpect(status().isOk()); - } - - @Test - public void downloadTest() throws Exception { - - CredentialDownloadRequestDTO requestDTO = new CredentialDownloadRequestDTO(); - requestDTO.setRequestId("requestId"); - requestDTO.setIndividualId("individualId"); - - JsonNode credentialJSON = JsonNodeFactory.instance.objectNode(); - Mockito.when(utilities.getVC(Mockito.anyString())).thenReturn(credentialJSON); - - JsonNode decryptedCredentialJSON = JsonNodeFactory.instance.objectNode(); - Mockito.when(utilities.getDecryptedVC(Mockito.anyString())).thenReturn(decryptedCredentialJSON); - - JsonNode requestCredentialJSON = JsonNodeFactory.instance.objectNode(); - Mockito.when(utilities.getRequestVC(Mockito.anyString())).thenReturn(requestCredentialJSON); - - this.mockMvc.perform(post("/credentialshare/download").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDTO))) - .andExpect(status().isOk()); - - Mockito.when(utilities.getDecryptedVC(Mockito.anyString())).thenReturn(null); - - this.mockMvc.perform(post("/credentialshare/download").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDTO))) - .andExpect(status().isNotFound()); - - Mockito.when(utilities.getDecryptedVC(Mockito.anyString())).thenThrow(new IOException("Exception")); - - this.mockMvc.perform(post("/credentialshare/download").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDTO))) - .andExpect(status().isNotFound()); - } - - /** - * IDP CONTROLLER TEST CASES - */ - - @Test - public void otpRequestTest() throws Exception { - BindingOtpInnerReqDto innerReqDto = new BindingOtpInnerReqDto(); - innerReqDto.setIndividualId("individualId"); - innerReqDto.setOtpChannels(Lists.newArrayList("EMAIL")); - BindingOtpRequestDto requestDTO = new BindingOtpRequestDto(DateUtils.getUTCCurrentDateTimeString(), innerReqDto); - - - ResponseWrapper response = new ResponseWrapper<>(); - - Mockito.when(restClientService.postApi(Mockito.any(), - Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(response).thenThrow(new BaseUncheckedException("Exception")); - - this.mockMvc.perform(post("/binding-otp").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDTO))) - .andExpect(status().isOk()); - - this.mockMvc.perform(post("/binding-otp").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDTO))) - .andExpect(status().isBadRequest()); - } - - @Test - public void walletBindingTest() throws Exception { - WalletBindingInnerReq innerReqDto = new WalletBindingInnerReq(); - innerReqDto.setPublicKey("-----BEGIN RSA PUBLIC KEY-----\nMIICCgKCAgEAn6+frMlD7DQqbxZW943hRLBApDj1/lHIJdLYSKEGIfwhd58gc0Y4\n1q11mPnpv7gAZ/Wm0iOAkWSzcIWljXFmGnLrUrBsp4WYKdPjqn4tkrCOjiZa5RPk\nY03a40Kz1lx0W9f94Naozglf6KFUSq+qAwuC5kiPxaxsjFA/LWIP+zT2QX/MnrX9\nv7gt2g0BC4pQ01eTTzhhwO2A7k5z3ucsb56ohND4xdIsdCMm1IczBjW0URSO60Bb\n7m5dlO8BFHJ6inV8awO2KHoADbp3wZgid4KqLJ0eVGyNViVFzj4rxSxL3vcYbyKS\nORWSlPZIZL9ZWO1cyPO9+Wxu29IKj4DQEt8glgITlBZ4L29uT7gFPAbypSn/8SvU\nBrNno8+GIe9XWsrDTMT9dfLGzLUitF3A+wwVZuRVhCqYIisOOGuGE18YK0jmdk9l\n89OpK4PduGiUh66zZTcH3thdtaOz6jj+FLKMg2Q3gNqQ1Y0cezO175RNVVX1ffOu\n5qss1RWams5RAXDqqt/MhiopG3DhlyaSC4xdqei7SI8d+S4Bvflub9rypPnhW67g\nNhZvQDJ7Tb1AWHxKmU0wQvEMtwSm9xtsMs4bqotn2M/09BuRqbrhpvAfrfZArkVO\nv8eLXhtDvo2J9gRwHZIS/JZ1Fo+tep1QFHz1Lr5iGRqwLWQlGbKFuL0CAwEAAQ==\n-----END RSA PUBLIC KEY-----\n"); - innerReqDto.setIndividualId("individualId"); - WalletBindingRequestDTO requestDTO = new WalletBindingRequestDTO(); - requestDTO.setRequestTime(DateUtils.getUTCCurrentDateTimeString()); - requestDTO.setRequest(innerReqDto); - - ResponseWrapper response = new ResponseWrapper<>(); - - Mockito.when(restClientService.postApi(Mockito.any(), - Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(response).thenThrow(new BaseUncheckedException("Exception")); - - this.mockMvc.perform(post("/wallet-binding").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDTO))) - .andExpect(status().isOk()); - - this.mockMvc.perform(post("/wallet-binding").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDTO))) - .andExpect(status().isBadRequest()); - } - - @Test - @Ignore - public void linkTransactionTest() throws Exception { - LinkTransactionRequestDto requestDTO = new LinkTransactionRequestDto(); - requestDTO.setRequestTime(DateUtils.getUTCCurrentDateTimeString()); - requestDTO.setLinkCode("linkcode"); - - LinkTransactionResponseDto response = new LinkTransactionResponseDto(); - - Mockito.when(restClientService.postApi(Mockito.any(), - Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(response).thenThrow(new BaseUncheckedException("Exception")); - - this.mockMvc.perform(post("/link-transaction").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDTO))) - .andExpect(status().isOk()); - - this.mockMvc.perform(post("/link-transaction").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDTO))) - .andExpect(status().isOk()); - } - - @Test - @Ignore - public void idpAuthAndConsentTest() throws Exception { - AuthAndConsentRequestDto innerDto = new AuthAndConsentRequestDto(); - innerDto.setLinkedTransactionId("LinkedTransactionId"); - innerDto.setIndividualId("individualId"); - innerDto.setLinkedTransactionId("LinkedTransactionId"); - innerDto.setAcceptedClaims(Lists.newArrayList("OTP")); - IdpAuthChallangeDto challangeDto = new IdpAuthChallangeDto(); - challangeDto.setAuthFactorType("OTP"); - challangeDto.setChallenge("1234"); - innerDto.setChallengeList(Lists.newArrayList(challangeDto)); - IdpAuthAndConsentDto requestDto = new IdpAuthAndConsentDto(); - requestDto.setRequestTime(DateUtils.getUTCCurrentDateTimeString()); - requestDto.setRequest(innerDto); - - - LinkedTransactionResponseDto resp = new LinkedTransactionResponseDto(); - resp.setLinkedTransactionId("linkedTransactionId"); - ResponseWrapper responseWrapper = new ResponseWrapper<>(); - responseWrapper.setResponse(resp); - - Mockito.when(restClientService.postApi(Mockito.any(), - Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(responseWrapper) - .thenReturn(responseWrapper).thenThrow(new ApisResourceAccessException("exception")); - - this.mockMvc.perform(post("/idp-auth-consent").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDto))) - .andExpect(status().isOk()); - - this.mockMvc.perform(post("/idp-auth-consent").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDto))) - .andExpect(status().isOk()); - } - - @Test - @Ignore - public void idpAuthenticateTest() throws Exception { - IdpAuthInternalRequestDto innerDto = new IdpAuthInternalRequestDto(); - innerDto.setLinkedTransactionId("LinkedTransactionId"); - innerDto.setIndividualId("individualId"); - IdpAuthChallangeDto challangeDto = new IdpAuthChallangeDto(); - challangeDto.setAuthFactorType("OTP"); - challangeDto.setChallenge("1234"); - innerDto.setChallengeList(Lists.newArrayList(challangeDto)); - IdpAuthRequestDto requestDto = new IdpAuthRequestDto(); - requestDto.setRequestTime(DateUtils.getUTCCurrentDateTimeString()); - requestDto.setRequest(innerDto); - - - BindingOtpResponseDto responseDto = new BindingOtpResponseDto(); - responseDto.setTransactionId("1111111"); - ResponseWrapper otpResponse = new ResponseWrapper<>(); - otpResponse.setResponse(responseDto); - ResponseWrapper otpResponse2 = new ResponseWrapper<>(); - ResponseWrapper response = new ResponseWrapper<>(); - - Mockito.when(restClientService.postApi(Mockito.any(), - Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(otpResponse).thenReturn(response).thenReturn(otpResponse2); - - this.mockMvc.perform(post("/idp-authenticate").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDto))) - .andExpect(status().isOk()); - - this.mockMvc.perform(post("/idp-authenticate").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDto))) - .andExpect(status().isOk()); - } - - @Test - @Ignore - public void idpConsentTest() throws Exception { - IdpConsentRequestDto innerDto = new IdpConsentRequestDto(); - innerDto.setLinkedTransactionId("LinkedTransactionId"); - innerDto.setAcceptedClaims(Lists.newArrayList("OTP")); - IdpConsentDto requestDto = new IdpConsentDto(); - requestDto.setRequestTime(DateUtils.getUTCCurrentDateTimeString()); - requestDto.setRequest(innerDto); - - - ResponseWrapper response = new ResponseWrapper<>(); - - Mockito.when(restClientService.postApi(Mockito.any(), - Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(response).thenThrow(new BaseUncheckedException("Exception")); - - this.mockMvc.perform(post("/idp-consent").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDto))) - .andExpect(status().isOk()); - - this.mockMvc.perform(post("/idp-consent").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDto))) - .andExpect(status().isOk()); - } - - /** - * RESIDENT CONTROLLER TEST CASES - */ - @Test - public void residentOtpRequestTest() throws Exception { - AppOTPRequestDTO requestDTO = new AppOTPRequestDTO(); - requestDTO.setIndividualId("IndividualId"); - requestDTO.setIndividualIdType("UIN"); - requestDTO.setTransactionID("1234567890"); - requestDTO.setOtpChannel(Lists.newArrayList("EMAIL")); - - - ResponseWrapper response = new ResponseWrapper<>(); - - Mockito.when(restClientService.postApi(Mockito.any(), - Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(response); - - this.mockMvc.perform(post("/req/otp").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDTO))) - .andExpect(status().isOk()); - } - - @Test - public void vidGenerateTest() throws Exception { - AppVIDGenerateRequestDTO requestDTO = new AppVIDGenerateRequestDTO(); - requestDTO.setIndividualId("IndividualId"); - requestDTO.setIndividualIdType("UIN"); - requestDTO.setTransactionID("1234567890"); - requestDTO.setOtp("111111"); - - - ResponseWrapper response = new ResponseWrapper<>(); - - Mockito.when(restClientService.postApi(Mockito.any(), - Mockito.anyString(), Mockito.anyString(), Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(response); - - this.mockMvc.perform(post("/vid").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDTO))) - .andExpect(status().isOk()); - } - - @Test - public void authLockTest() throws Exception { - AuthLockRequestDTO requestDTO = new AuthLockRequestDTO(); - requestDTO.setIndividualId("IndividualId"); - requestDTO.setIndividualIdType("UIN"); - requestDTO.setTransactionID("1234567890"); - requestDTO.setOtp("111111"); - - - ResponseWrapper response = new ResponseWrapper<>(); - - Mockito.when(restClientService.postApi(Mockito.any(), - Mockito.anyString(), Mockito.anyString(), Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(response); - - this.mockMvc.perform(post("/req/auth/lock").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDTO))) - .andExpect(status().isOk()); - } - - @Test - public void authUnLockTest() throws Exception { - AuthUnlockRequestDTO requestDTO = new AuthUnlockRequestDTO(); - requestDTO.setIndividualId("IndividualId"); - requestDTO.setIndividualIdType("UIN"); - requestDTO.setTransactionID("1234567890"); - requestDTO.setOtp("111111"); - - - ResponseWrapper response = new ResponseWrapper<>(); - - Mockito.when(restClientService.postApi(Mockito.any(), - Mockito.anyString(), Mockito.anyString(), Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(response); - - this.mockMvc.perform(post("/req/auth/unlock").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDTO))) - .andExpect(status().isOk()); - } - - @Test - public void individualIdOtpRequestTest() throws Exception { - IndividualIdOtpRequestDTO requestDTO = new IndividualIdOtpRequestDTO(); - requestDTO.setAid("IndividualId"); - requestDTO.setOtpChannel(Lists.newArrayList("EMAIL")); - requestDTO.setTransactionID("1234567890"); - - OTPResponseDTO response = new OTPResponseDTO(); - - Mockito.when(restClientService.postApi(Mockito.any(), - Mockito.anyString(), Mockito.anyString(), Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(response); - - this.mockMvc.perform(post("/req/individualId/otp").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDTO))) - .andExpect(status().isOk()); } - @Test - public void aidGetIndividualIdTest() throws Exception { - AidStatusRequestDTO requestDTO = new AidStatusRequestDTO(); - requestDTO.setAid("IndividualId"); - requestDTO.setTransactionID("1234567890"); - requestDTO.setOtp("111111"); - - ResponseWrapper response = new ResponseWrapper<>(); - - Mockito.when(restClientService.postApi(Mockito.any(), - Mockito.anyString(), Mockito.anyString(), Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(response); - - this.mockMvc.perform(post("/aid/get-individual-id").contentType(MediaType.APPLICATION_JSON_VALUE) - .content(JsonUtils.javaObjectToJsonString(requestDTO))) - .andExpect(status().isOk()); - } } diff --git a/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java b/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java new file mode 100644 index 000000000..afea411ee --- /dev/null +++ b/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java @@ -0,0 +1,156 @@ +package io.mosip.mimoto.controller; + +import io.mosip.mimoto.dto.IssuersDTO; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.service.impl.IssuersServiceImpl; +import org.hamcrest.Matchers; +import org.json.JSONObject; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.skyscreamer.jsonassert.JSONAssert; +import org.skyscreamer.jsonassert.JSONCompareMode; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.util.ResourceUtils; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; + +import java.io.File; +import java.nio.file.Files; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import static io.mosip.mimoto.exception.PlatformErrorMessages.API_NOT_ACCESSIBLE_EXCEPTION; +import static io.mosip.mimoto.exception.PlatformErrorMessages.INVALID_ISSUER_ID_EXCEPTION; +import static io.mosip.mimoto.util.TestUtilities.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = IssuersController.class) +@AutoConfigureMockMvc(addFilters = false) +@EnableWebMvc +public class IssuersControllerTest { + + @Autowired + private MockMvc mockMvc; + + @MockBean + private IssuersServiceImpl issuersService; + + + @Test + public void getAllIssuersTest() throws Exception { + IssuersDTO issuers = new IssuersDTO(); + issuers.setIssuers((List.of(getIssuerDTO("Issuer1"), getIssuerDTO("Issuer2")))); + Mockito.when(issuersService.getAllIssuers(null)) + .thenReturn(issuers) + .thenThrow(new ApiNotAccessibleException()); + + IssuersDTO filteredIssuers = new IssuersDTO(); + filteredIssuers.setIssuers(issuers.getIssuers().stream().filter(issuer -> issuer.getDisplay().stream() + .anyMatch(displayDTO -> displayDTO.getTitle().toLowerCase().contains("Issuer1".toLowerCase()))) + .collect(Collectors.toList())); + + Mockito.when(issuersService.getAllIssuers("Issuer1")) + .thenReturn(filteredIssuers) + .thenThrow(new ApiNotAccessibleException()); + + mockMvc.perform(get("/issuers").accept(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.response.issuers", Matchers.everyItem( + Matchers.allOf( + Matchers.hasKey("credential_issuer"), + Matchers.hasKey("display"), + Matchers.hasKey("client_id"), + Matchers.hasKey(".well-known"), + Matchers.not(Matchers.hasKey("redirect_url")), + Matchers.not(Matchers.hasKey("authorization_endpoint")), + Matchers.not(Matchers.hasKey("token_endpoint")), + Matchers.not(Matchers.hasKey("credential_endpoint")), + Matchers.not(Matchers.hasKey("credential_audience")), + Matchers.not(Matchers.hasKey("additional_headers")), + Matchers.not(Matchers.hasKey("scopes_supported")) + ) + ))); + + mockMvc.perform(get("/issuers?search=Issuer1").accept(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.response.issuers", Matchers.everyItem( + Matchers.allOf( + Matchers.hasKey("credential_issuer"), + Matchers.hasKey("display"), + Matchers.hasKey("client_id"), + Matchers.hasKey(".well-known"), + Matchers.not(Matchers.hasKey("redirect_url")), + Matchers.not(Matchers.hasKey("authorization_endpoint")), + Matchers.not(Matchers.hasKey("token_endpoint")), + Matchers.not(Matchers.hasKey("credential_endpoint")), + Matchers.not(Matchers.hasKey("credential_audience")), + Matchers.not(Matchers.hasKey("additional_headers")), + Matchers.not(Matchers.hasKey("scopes_supported")) + ) + ))); + + mockMvc.perform(get("/issuers").accept(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getCode()))) + .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); + + + mockMvc.perform(get("/issuers?search=Issuer1").accept(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getCode()))) + .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); + } + + @Test + public void getIssuerConfigTest() throws Exception { + Mockito.when(issuersService.getIssuerConfig("id1")) + .thenReturn(getIssuerDTO("Issuer1")) + .thenThrow(new ApiNotAccessibleException()); + Mockito.when(issuersService.getIssuerConfig("invalidId")).thenReturn(null); + + mockMvc.perform(get("/issuers/id1").accept(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isOk()); + + mockMvc.perform(get("/issuers/invalidId").accept(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isNotFound()) + .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is(INVALID_ISSUER_ID_EXCEPTION.getCode()))) + .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(INVALID_ISSUER_ID_EXCEPTION.getMessage()))); + + mockMvc.perform(get("/issuers/id1").accept(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getCode()))) + .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); + } + + @Test + public void getIssuerWellknownTest() throws Exception { + String issuerId = "id1"; + File file = ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX + "responses/expectedWellknown.json"); + String expectedCredentialIssuerWellknownResponse = new String(Files.readAllBytes(file.toPath())); + CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = getCredentialIssuerWellKnownResponseDto(issuerId, Map.of("CredentialType1", getCredentialSupportedResponse("Credential1"))); + Mockito.when(issuersService.getIssuerWellknown(issuerId)).thenReturn(credentialIssuerWellKnownResponse); + + + String actualResponse = mockMvc.perform(get("/issuers/" + issuerId + "/.well-known").accept(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isOk()) + .andReturn() + .getResponse() + .getContentAsString(); + + + JSONAssert.assertEquals(new JSONObject(expectedCredentialIssuerWellknownResponse), new JSONObject(actualResponse), JSONCompareMode.LENIENT); + + } + +} diff --git a/src/test/java/io/mosip/mimoto/controller/ResidentServiceControllerTest.java b/src/test/java/io/mosip/mimoto/controller/ResidentServiceControllerTest.java new file mode 100644 index 000000000..d45e784ca --- /dev/null +++ b/src/test/java/io/mosip/mimoto/controller/ResidentServiceControllerTest.java @@ -0,0 +1,153 @@ +package io.mosip.mimoto.controller; + +import com.google.common.collect.Lists; +import io.mosip.kernel.core.util.JsonUtils; +import io.mosip.mimoto.core.http.ResponseWrapper; +import io.mosip.mimoto.dto.mimoto.AidStatusRequestDTO; +import io.mosip.mimoto.dto.mimoto.AppOTPRequestDTO; +import io.mosip.mimoto.dto.mimoto.AppVIDGenerateRequestDTO; +import io.mosip.mimoto.dto.mimoto.IndividualIdOtpRequestDTO; +import io.mosip.mimoto.dto.resident.*; +import io.mosip.mimoto.service.RestClientService; +import io.mosip.mimoto.util.RequestValidator; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = ResidentServiceController.class) +@AutoConfigureMockMvc(addFilters = false) +@EnableWebMvc +public class ResidentServiceControllerTest { + + @MockBean + public RestClientService restClientService; + + @MockBean + public RequestValidator requestValidator; + + @Autowired + private MockMvc mockMvc; + + @Test + public void residentOtpRequestTest() throws Exception { + AppOTPRequestDTO requestDTO = new AppOTPRequestDTO(); + requestDTO.setIndividualId("IndividualId"); + requestDTO.setIndividualIdType("UIN"); + requestDTO.setTransactionID("1234567890"); + requestDTO.setOtpChannel(Lists.newArrayList("EMAIL")); + + + ResponseWrapper response = new ResponseWrapper<>(); + + Mockito.when(restClientService.postApi(Mockito.any(), + Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(response); + + this.mockMvc.perform(post("/req/otp").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .andExpect(status().isOk()); + } + + @Test + public void vidGenerateTest() throws Exception { + AppVIDGenerateRequestDTO requestDTO = new AppVIDGenerateRequestDTO(); + requestDTO.setIndividualId("IndividualId"); + requestDTO.setIndividualIdType("UIN"); + requestDTO.setTransactionID("1234567890"); + requestDTO.setOtp("111111"); + + + ResponseWrapper response = new ResponseWrapper<>(); + + Mockito.when(restClientService.postApi(Mockito.any(), + Mockito.anyString(), Mockito.anyString(), Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(response); + + this.mockMvc.perform(post("/vid").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .andExpect(status().isOk()); + } + + @Test + public void authLockTest() throws Exception { + AuthLockRequestDTO requestDTO = new AuthLockRequestDTO(); + requestDTO.setIndividualId("IndividualId"); + requestDTO.setIndividualIdType("UIN"); + requestDTO.setTransactionID("1234567890"); + requestDTO.setOtp("111111"); + + + ResponseWrapper response = new ResponseWrapper<>(); + + Mockito.when(restClientService.postApi(Mockito.any(), + Mockito.anyString(), Mockito.anyString(), Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(response); + + this.mockMvc.perform(post("/req/auth/lock").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .andExpect(status().isOk()); + } + + @Test + public void authUnLockTest() throws Exception { + AuthUnlockRequestDTO requestDTO = new AuthUnlockRequestDTO(); + requestDTO.setIndividualId("IndividualId"); + requestDTO.setIndividualIdType("UIN"); + requestDTO.setTransactionID("1234567890"); + requestDTO.setOtp("111111"); + + + ResponseWrapper response = new ResponseWrapper<>(); + + Mockito.when(restClientService.postApi(Mockito.any(), + Mockito.anyString(), Mockito.anyString(), Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(response); + + this.mockMvc.perform(post("/req/auth/unlock").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .andExpect(status().isOk()); + } + + @Test + public void individualIdOtpRequestTest() throws Exception { + IndividualIdOtpRequestDTO requestDTO = new IndividualIdOtpRequestDTO(); + requestDTO.setAid("IndividualId"); + requestDTO.setOtpChannel(Lists.newArrayList("EMAIL")); + requestDTO.setTransactionID("1234567890"); + + OTPResponseDTO response = new OTPResponseDTO(); + + Mockito.when(restClientService.postApi(Mockito.any(), + Mockito.anyString(), Mockito.anyString(), Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(response); + + this.mockMvc.perform(post("/req/individualId/otp").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .andExpect(status().isOk()); + } + + @Test + public void aidGetIndividualIdTest() throws Exception { + AidStatusRequestDTO requestDTO = new AidStatusRequestDTO(); + requestDTO.setAid("IndividualId"); + requestDTO.setTransactionID("1234567890"); + requestDTO.setOtp("111111"); + + ResponseWrapper response = new ResponseWrapper<>(); + + Mockito.when(restClientService.postApi(Mockito.any(), + Mockito.anyString(), Mockito.anyString(), Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(response); + + this.mockMvc.perform(post("/aid/get-individual-id").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .andExpect(status().isOk()); + } +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java index 8f1001263..18d45e875 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java @@ -1,15 +1,21 @@ package io.mosip.mimoto.service; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import io.mosip.mimoto.dto.IssuersDTO; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.VCVerificationException; import io.mosip.mimoto.service.impl.CredentialServiceImpl; import io.mosip.mimoto.service.impl.IssuersServiceImpl; import io.mosip.mimoto.util.RestApiClient; +import io.mosip.mimoto.util.TestUtilities; import io.mosip.mimoto.util.Utilities; +import io.mosip.vercred.CredentialsVerifier; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; @@ -28,11 +34,20 @@ import static io.mosip.mimoto.util.TestUtilities.*; import static org.junit.Assert.*; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; @RunWith(MockitoJUnitRunner.class) @SpringBootTest public class CredentialServiceTest { + @Mock + CredentialsVerifier credentialsVerifier; + @Mock + ObjectMapper objectMapper; + @InjectMocks + CredentialServiceImpl credentialService = new CredentialServiceImpl(); + + @Test public void shouldParseHtmlStringToDocument() { String htmlContent = "

$message

"; @@ -46,4 +61,15 @@ public void shouldParseHtmlStringToDocument() { assertTrue(mergedHtml.contains("PDF")); } + + @Test + public void shouldReturnTrueIfAValidCredentialIsPassedForVerification() throws VCVerificationException, JsonProcessingException { + VCCredentialResponse vc = TestUtilities.getVCCredentialResponseDTO("ed25519Signature2020"); + Mockito.when(credentialsVerifier.verifyCredentials(any(String.class))).thenReturn(true); + Mockito.when(objectMapper.writeValueAsString(vc.getCredential())).thenReturn("vc"); + + Boolean verificationStatus = credentialService.verifyCredential(vc); + + assertTrue(verificationStatus); + } } diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index b7a04ec38..4449ab23b 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -223,6 +223,16 @@ public static VCCredentialResponse getVCCredentialResponseDTO(String type){ .format("ldp_vc").build(); } + public static io.mosip.mimoto.dto.idp.TokenResponseDTO getTokenResponseDTO(){ + return io.mosip.mimoto.dto.idp.TokenResponseDTO.builder() + .id_token("test-id-token") + .access_token("test-accesstoken") + .expires_in(12345) + .scope("test-scope") + .token_type("test-token-type") + .build(); + } + public static PresentationDefinitionDTO getPresentationDefinitionDTO(){ FilterDTO filterDTO = FilterDTO.builder().type("String").pattern("test-credential").build(); FieldDTO fieldDTO = FieldDTO.builder().path(new String[]{"$.type"}).filter(filterDTO).build(); diff --git a/src/test/resources/responses/VerifiableCredential.json b/src/test/resources/responses/VerifiableCredential.json new file mode 100644 index 000000000..a5c095fef --- /dev/null +++ b/src/test/resources/responses/VerifiableCredential.json @@ -0,0 +1,56 @@ +{ + "format": "format", + "credential":{ + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://api.qa-inji.mosip.net/.well-known/mosip-ida-context.json", + { + "sec": "https://w3id.org/security#" + } + ], + "credentialSubject": { + "face": "data:image/jpeg;base64,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", + "gender": [ + { + "language": "eng", + "value": "Male" + } + ], + "phone": "9876785789", + "city": [ + { + "language": "eng", + "value": "Kenitra" + } + ], + "fullName": [ + { + "language": "eng", + "value": "kumar" + } + ], + "addressLine1": [ + { + "language": "eng", + "value": "saravangar" + } + ], + "dateOfBirth": "1999/01/01", + "id": "did:jwk:eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsInVzZSI6InNpZyIsImFsZyI6IlJTMjU2IiwibiI6InBQZTNzOXRCRUstak15dFN6emN3SDAxUHFhTmU0WXQxQ1ByNkxULU9oVVgyQjVJbm5TWERFT294ZC1GalFYRHRJN0VKcW9YdF9DalZaOXJQQ0gxX2R3dzljSVdCWUh4S0R3cEQzQmhLTUhVWTdGdDk3ZTVaYlJkcjlyME5kVmlPRzFXbGxoZ0Q0ZTFWYWJsbDJTNzZ5QjQ1STZ6V05rM0paSzBoX3E2NmxMM2FFVUREbFFJbDFBQVBySHEzaGVzTjZjY2x2R1FoSmEwams2a3ZZQ1BpWXp3N1N3em4wcldMVmg3MDJ6U2ZOSWtXUl9KX0dMd2VhNTNfemJCVzRVdU8tbjVJbGNLdk56RGRSQ21YWGZIOExXWjlmd3BJeGttX0Q0X01aazFfV3hwbmdJUGd0MWYyLXRMU3h5dzJWV25BZnFsS3IyY2M2LS1GMXFLaEx3UGpFdyJ9", + "UIN": "3974189657", + "email": "Aswin@gmail.com" + }, + "id": "https://api.qa-inji.mosip.net/credentials/a45bffe3-ecdf-46c1-b059-0288f3dfe2fa", + "issuanceDate": "2024-07-22T07:49:22.219Z", + "issuer": "https://api.qa-inji.mosip.net/.well-known/ida-controller.json", + "proof": { + "created": "2024-07-22T07:49:22Z", + "jws": "eyJiNjQiOmZhbHNlLCJjcml0IjpbImI2NCJdLCJraWQiOiJRVmRMTW9uWmNqM0doTUxjbmhuZEdmT0J2RVdHZHg0LU5qazRKRGNxb19NIiwiYWxnIjoiUFMyNTYifQ..lhM2BzYapSIWNI8oHhYKx4na7lOEO-TSzJOndP0PowTGbT1op2AOWdxnozidPckdBIFAPaIAbS4pmVj-jW-QeqiWqERbcHSNePLc-5ykz0VA-q6rFNJs-PJVldZlQMl1Ww_nNpRbTwTirGum3f0tp7MhXcqV_66tQQrFr81odP-rAntPdg-BUpsZ0tXbWUxczmmWshRIw5a67ZrslxVXx0umtE_rx3lVIStSXhUXdbwGOkZPNwAj4AdFTlSbYlRrrazWg1sAqzfT1EE8Kdj7D16TlEyKy011srtMqu2n-sRJBg69mZlcsqlDF6_sIspILMZnKueQvxZqeBOMRmQtpw", + + "proofPurpose": "assertionMethod", + "type": "RsaSignature2018", + "verificationMethod": "https://api.qa-inji.mosip.net/.well-known/ida-public-key.json" + }, + "type": ["VerifiableCredential", "MOSIPVerifiableCredential"] + } +} \ No newline at end of file From cd3595ad386ad39118ba1d8bb35e975353d7ebb7 Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Tue, 10 Sep 2024 11:22:46 +0530 Subject: [PATCH 233/860] MOSIP-35243 Signed-off-by: Nandhukumar --- apitest/testNgXmlFiles/mimotoApi.xml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/apitest/testNgXmlFiles/mimotoApi.xml b/apitest/testNgXmlFiles/mimotoApi.xml index 3237e5a10..c3f2af23a 100644 --- a/apitest/testNgXmlFiles/mimotoApi.xml +++ b/apitest/testNgXmlFiles/mimotoApi.xml @@ -36,6 +36,7 @@ + @@ -43,6 +44,7 @@ + @@ -50,6 +52,7 @@ + @@ -58,6 +61,7 @@ + @@ -65,6 +69,7 @@ + @@ -72,6 +77,7 @@ + @@ -81,6 +87,7 @@ + @@ -88,6 +95,7 @@ + @@ -96,6 +104,7 @@ + @@ -192,6 +201,7 @@ + From 12758e5a75b8a9197682c94b365c7773602902ab Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Tue, 10 Sep 2024 11:26:00 +0530 Subject: [PATCH 234/860] MOSIP-35243 Signed-off-by: Nandhukumar --- .../mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apitest/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.yml b/apitest/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.yml index feffab958..3f8e5bd0e 100644 --- a/apitest/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.yml +++ b/apitest/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.yml @@ -1,5 +1,5 @@ GetPolicySunBirdR: - Mimoto_ESignet_SunBirdR_DeletePolicy_NOAUTH_Valid_Smoke: + Mimoto_ESignet_SunBirdR_GetPolicy_NOAUTH_Valid_Smoke: endPoint: $SUNBIRDBASEURL$/api/v1/Insurance/{insuranceid} description: Getting sunbird policy with valid parameters role: resident From baf1c221ee8d657ef12a53867e049dd6ea73db3e Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Wed, 11 Sep 2024 15:36:34 +0530 Subject: [PATCH 235/860] MOSIP-35700 | Modifying the mimoto testrig to adopt context URL through config Signed-off-by: Nandhukumar --- apitest/pom.xml | 6 +-- .../apirig/testscripts/AddIdentity.java | 4 +- .../apirig/testscripts/DeleteWithParam.java | 4 +- .../apirig/testscripts/GetWithParam.java | 4 +- .../PostWithAutogenIdWithOtpGenerate.java | 6 ++- .../PostWithBodyWithOtpGenerate.java | 4 +- .../PostWithFormDataBodyForPdfDownload.java | 4 +- .../apirig/testscripts/SimplePost.java | 4 +- .../testscripts/SimplePostForAutoGenId.java | 9 +++- .../testrig/apirig/utils/MimotoUtil.java | 52 +++++++++++++++++++ .../main/resources/config/Kernel.properties | 36 ++++++------- apitest/testNgXmlFiles/mimotoApi.xml | 8 --- 12 files changed, 103 insertions(+), 38 deletions(-) create mode 100644 apitest/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java diff --git a/apitest/pom.xml b/apitest/pom.xml index f253133bb..d68b951db 100644 --- a/apitest/pom.xml +++ b/apitest/pom.xml @@ -8,7 +8,7 @@ apitest-mimoto Parent project of apitest-mimoto https://github.com/mosip/mimoto - 1.2.1-java21-SNAPSHOT + 1.2.1-SNAPSHOT @@ -49,14 +49,14 @@ 2.2.1 3.0.1 - apitest-mimoto-1.2.1-java21-SNAPSHOT-jar-with-dependencies + apitest-mimoto-1.2.1-SNAPSHOT-jar-with-dependencies io.mosip.testrig.apirig.apitest.commons apitest-commons - 1.2.1-java21-SNAPSHOT + 1.2.2-SNAPSHOT diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java index 585132dd7..cc4826529 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java @@ -34,6 +34,7 @@ import io.mosip.testrig.apirig.utils.ConfigManager; import io.mosip.testrig.apirig.utils.GlobalConstants; import io.mosip.testrig.apirig.utils.KernelAuthentication; +import io.mosip.testrig.apirig.utils.MimotoUtil; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; import io.mosip.testrig.apirig.utils.RestClient; @@ -97,7 +98,8 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad new KernelAuthentication().getTokenByRole(testCaseDTO.getRole())).asString(), "response.uin"); - testCaseName = isTestCaseValidForExecution(testCaseDTO); + testCaseName = MimotoUtil.isTestCaseValidForExecution(testCaseDTO); + testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); DateFormat dateFormatter = new SimpleDateFormat("yyyyMMddHHmmss"); Calendar cal = Calendar.getInstance(); diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/DeleteWithParam.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/DeleteWithParam.java index de59b2124..4132217d0 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/DeleteWithParam.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/DeleteWithParam.java @@ -28,6 +28,7 @@ import io.mosip.testrig.apirig.utils.AuthenticationTestException; import io.mosip.testrig.apirig.utils.ConfigManager; import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.MimotoUtil; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; import io.restassured.response.Response; @@ -77,7 +78,8 @@ public Object[] getTestCaseList(ITestContext context) { @Test(dataProvider = "testcaselist") public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException { testCaseName = testCaseDTO.getTestCaseName(); - testCaseName = isTestCaseValidForExecution(testCaseDTO); + testCaseName = MimotoUtil.isTestCaseValidForExecution(testCaseDTO); + testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); if (HealthChecker.signalTerminateExecution) { throw new SkipException( GlobalConstants.TARGET_ENV_HEALTH_CHECK_FAILED + HealthChecker.healthCheckFailureMapS); diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java index 308c71395..bdc69e6bf 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java @@ -30,6 +30,7 @@ import io.mosip.testrig.apirig.utils.AuthenticationTestException; import io.mosip.testrig.apirig.utils.ConfigManager; import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.MimotoUtil; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; import io.restassured.response.Response; @@ -82,7 +83,8 @@ public Object[] getTestCaseList(ITestContext context) { @Test(dataProvider = "testcaselist") public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException { testCaseName = testCaseDTO.getTestCaseName(); - testCaseName = isTestCaseValidForExecution(testCaseDTO); + testCaseName = MimotoUtil.isTestCaseValidForExecution(testCaseDTO); + testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); if (HealthChecker.signalTerminateExecution) { throw new SkipException( GlobalConstants.TARGET_ENV_HEALTH_CHECK_FAILED + HealthChecker.healthCheckFailureMapS); diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java index 29eab1400..680e4842b 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java @@ -29,6 +29,7 @@ import io.mosip.testrig.apirig.utils.AuthenticationTestException; import io.mosip.testrig.apirig.utils.ConfigManager; import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.MimotoUtil; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; import io.restassured.response.Response; @@ -95,7 +96,8 @@ public void test(TestCaseDTO testCaseDTO) throw new SkipException(GlobalConstants.VID_FEATURE_NOT_SUPPORTED); } } - testCaseName = isTestCaseValidForExecution(testCaseDTO); + testCaseName = MimotoUtil.isTestCaseValidForExecution(testCaseDTO); + testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); JSONObject req = new JSONObject(testCaseDTO.getInput()); auditLogCheck = testCaseDTO.isAuditLogCheck(); @@ -226,7 +228,7 @@ public void setResultTestName(ITestResult result) { @AfterClass(alwaysRun = true) public void waittime() { if (!testCaseName.contains(GlobalConstants._AUTHENTICATEUSER) - && isOTPEnabled().equals("true")) { + && MimotoUtil.isOTPEnabled().equals("true")) { try { long delayTime = Long.parseLong(properties.getProperty("Delaytime")); if (!BaseTestCase.isTargetEnvLTS()) diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithBodyWithOtpGenerate.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithBodyWithOtpGenerate.java index 1cded4cfa..d776c7e29 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithBodyWithOtpGenerate.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithBodyWithOtpGenerate.java @@ -28,6 +28,7 @@ import io.mosip.testrig.apirig.utils.AuthenticationTestException; import io.mosip.testrig.apirig.utils.ConfigManager; import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.MimotoUtil; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; import io.restassured.response.Response; @@ -91,7 +92,8 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad } } - testCaseName = isTestCaseValidForExecution(testCaseDTO); + testCaseName = MimotoUtil.isTestCaseValidForExecution(testCaseDTO); + testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); auditLogCheck = testCaseDTO.isAuditLogCheck(); String tempUrl = ConfigManager.getEsignetBaseUrl(); JSONObject req = new JSONObject(testCaseDTO.getInput()); diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithFormDataBodyForPdfDownload.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithFormDataBodyForPdfDownload.java index 8897361f4..83b1fc74a 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithFormDataBodyForPdfDownload.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithFormDataBodyForPdfDownload.java @@ -30,6 +30,7 @@ import io.mosip.testrig.apirig.utils.ConfigManager; import io.mosip.testrig.apirig.utils.GlobalConstants; import io.mosip.testrig.apirig.utils.GlobalMethods; +import io.mosip.testrig.apirig.utils.MimotoUtil; import io.restassured.response.Response; public class PostWithFormDataBodyForPdfDownload extends AdminTestUtil implements ITest { @@ -80,7 +81,8 @@ public Object[] getTestCaseList(ITestContext context) { @Test(dataProvider = "testcaselist") public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException { testCaseName = testCaseDTO.getTestCaseName(); - testCaseName = isTestCaseValidForExecution(testCaseDTO); + testCaseName = MimotoUtil.isTestCaseValidForExecution(testCaseDTO); + testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); if (HealthChecker.signalTerminateExecution) { throw new SkipException(GlobalConstants.TARGET_ENV_HEALTH_CHECK_FAILED + HealthChecker.healthCheckFailureMapS); } diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java index 70b975124..71ec92cf3 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java @@ -30,6 +30,7 @@ import io.mosip.testrig.apirig.utils.AuthenticationTestException; import io.mosip.testrig.apirig.utils.ConfigManager; import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.MimotoUtil; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; import io.restassured.response.Response; @@ -82,7 +83,8 @@ public Object[] getTestCaseList(ITestContext context) { @Test(dataProvider = "testcaselist") public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException { testCaseName = testCaseDTO.getTestCaseName(); - testCaseName = isTestCaseValidForExecution(testCaseDTO); + testCaseName = MimotoUtil.isTestCaseValidForExecution(testCaseDTO); + testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); auditLogCheck = testCaseDTO.isAuditLogCheck(); String[] templateFields = testCaseDTO.getTemplateFields(); if (HealthChecker.signalTerminateExecution) { diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java index b984eca2e..9a82dd526 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java @@ -31,6 +31,7 @@ import io.mosip.testrig.apirig.utils.AuthenticationTestException; import io.mosip.testrig.apirig.utils.ConfigManager; import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.MimotoUtil; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; import io.restassured.response.Response; @@ -98,7 +99,8 @@ public void test(TestCaseDTO testCaseDTO) } } - testCaseName = isTestCaseValidForExecution(testCaseDTO); + testCaseName = MimotoUtil.isTestCaseValidForExecution(testCaseDTO); + testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); String[] templateFields = testCaseDTO.getTemplateFields(); String inputJson = ""; @@ -153,6 +155,11 @@ public void test(TestCaseDTO testCaseDTO) //tempUrl = ApplnURI.replace(GlobalConstants.API_INTERNAL, ConfigManager.getSunBirdBaseURL()); testCaseDTO.setEndPoint(testCaseDTO.getEndPoint().replace("$SUNBIRDBASEURL$", "")); } + + if (inputJson.contains("$GETCLIENTIDFROMMIMOTOACTUATOR$")) { + inputJson = replaceKeywordWithValue(inputJson, "$GETCLIENTIDFROMMIMOTOACTUATOR$", + getValueFromMimotoActuator("overrides", "mimoto.oidc.partner.clientid")); + } if (testCaseName.contains("_AuthorizationCode_")) { response = postRequestWithCookieAuthHeaderAndXsrfTokenForAutoGenId( tempUrl + testCaseDTO.getEndPoint(), inputJson, COOKIENAME, testCaseDTO.getTestCaseName(), diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java b/apitest/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java new file mode 100644 index 000000000..3202bfd20 --- /dev/null +++ b/apitest/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java @@ -0,0 +1,52 @@ +package io.mosip.testrig.apirig.utils; + +import org.apache.log4j.Logger; +import org.testng.SkipException; + +import io.mosip.testrig.apirig.dto.TestCaseDTO; + +public class MimotoUtil extends AdminTestUtil { + + private static final Logger logger = Logger.getLogger(MimotoUtil.class); + public static final String SEND_OTP_ENDPOINT = "mimoto/req/"; + public static final String MIMOTO_CREDENTIAL_STATUS = "Mimoto_CredentialsStatus_"; + public static final String OTP_FEATURE_NOT_SUPPORTED = "OTP feature not supported. Hence skipping the testcase"; + + + private static String otpEnabled = "true"; + + public static String isOTPEnabled() { + String value = getValueFromMimotoActuator("/mimoto-default.properties", "mosip.otp.download.enable").isBlank() + ? System.getenv("isOTPEnabled") + : getValueFromMimotoActuator("/mimoto-default.properties", "mosip.otp.download.enable"); + if (value != null && !(value.isBlank())) + otpEnabled = value; + logger.info("OTP Enabled value: " + otpEnabled); + return otpEnabled; + } + + public static TestCaseDTO changeContextURLByFlag(TestCaseDTO testCaseDTO) { + if (!(System.getenv("useOldContextURL") == null) && !(System.getenv("useOldContextURL").isBlank()) + && System.getenv("useOldContextURL").equalsIgnoreCase("true")) { + if (testCaseDTO.getEndPoint().contains("/v1/mimoto/")) { + testCaseDTO.setEndPoint(testCaseDTO.getEndPoint().replace("/v1/mimoto/", "/residentmobileapp/")); + } + if (testCaseDTO.getInput().contains("/v1/mimoto/")) { + testCaseDTO.setInput(testCaseDTO.getInput().replace("/v1/mimoto/", "/residentmobileapp/")); + } + } + + return testCaseDTO; + } + + public static String isTestCaseValidForExecution(TestCaseDTO testCaseDTO) { + String testCaseName = testCaseDTO.getTestCaseName(); + if (isOTPEnabled().equals("false") && (testCaseDTO.getEndPoint().contains(SEND_OTP_ENDPOINT) + || testCaseDTO.getInput().contains(SEND_OTP_ENDPOINT) + || testCaseName.startsWith(MIMOTO_CREDENTIAL_STATUS) || testCaseName.contains("_vid"))) { + throw new SkipException(OTP_FEATURE_NOT_SUPPORTED); + } + return testCaseName; + } + +} \ No newline at end of file diff --git a/apitest/src/main/resources/config/Kernel.properties b/apitest/src/main/resources/config/Kernel.properties index 7f749b5f8..f6a5a0cca 100644 --- a/apitest/src/main/resources/config/Kernel.properties +++ b/apitest/src/main/resources/config/Kernel.properties @@ -137,17 +137,17 @@ AuthClientID = mosip-resident-client #---------------------------------- Client Secret Keys -----------------------# #-- When test rig ran in docker, these values dervied from the environment ---# -mosip_partner_client_secret = -mosip_pms_client_secret = -mosip_resident_client_secret = -mosip_idrepo_client_secret = -mosip_reg_client_secret = -mosip_admin_client_secret = -mosip_hotlist_client_secret = -mosip_regproc_client_secret = -mpartner_default_mobile_secret = -mosip_testrig_client_secret = -AuthClientSecret = +mosip_partner_client_secret = w6z9XQQ6Toi5vzzY +mosip_pms_client_secret = 3XiMpmPfAAzT47EC +mosip_resident_client_secret = MiTOjWLVoFZw3CHZ +mosip_idrepo_client_secret = qKNTW5CTxKsgVGjw +mosip_reg_client_secret = Msc7sItq6Rg8vcEC +mosip_admin_client_secret = auWjWiniqX0YX8KF +mosip_hotlist_client_secret = lA7pCSLknLvT9Owj +mosip_regproc_client_secret = rR5eKHfG4i3BJf8S +mpartner_default_mobile_secret = duo1HolnpqNc6aMA +mosip_testrig_client_secret = G9qAJ3SrOm575GqL +AuthClientSecret = MiTOjWLVoFZw3CHZ @@ -169,8 +169,8 @@ new_Resident_Password = mosip123 new_Resident_Role = default-roles-mosip,PARTNER_ADMIN roles.111995 = PARTNER_ADMIN,default-roles-mosip keycloak_UserName = admin -keycloak_Password = sMDr9Ainw9 -keycloak-external-url = https://iam.qa-inji.mosip.net +keycloak_Password = DyWRaJqTFh +keycloak-external-url = https://iam.released.mosip.net keycloak-realm-id = mosip iam-users-to-create = 111997,111998,220005,111992,globaladmin,111887,111999 iam-users-password = mosip123,mosip123,mosip123,mosip123,mosip123 @@ -190,15 +190,15 @@ pool_size=1 dialect=org.hibernate.dialect.PostgreSQLDialect show_sql=true current_session_context_class=thread -audit_url=jdbc:postgresql://qa-inji.mosip.net:5432/mosip_audit +audit_url=jdbc:postgresql://released.mosip.net:5432/mosip_audit audit_username=postgres -audit_password=2BhgiSpCaT +audit_password=WfJpMctLjp audit_default_schema=audit DB_PORT= installation-domain= -partner_url=jdbc:postgresql://qa-inji.mosip.net:5432/mosip_ida +partner_url=jdbc:postgresql://released.mosip.net:5432/mosip_ida partner_username=postgres -partner_password=2BhgiSpCaT +partner_password=WfJpMctLjp partner_default_schema=partner reportLogPath=automationLogAndReport postgresqlUser=postgresql @@ -210,7 +210,7 @@ hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect hibernate.show_sql=true hibernate.current_session_context_class=thread db-su-user=postgres -postgres-password=2BhgiSpCaT +postgres-password=WfJpMctLjp pms_db_schema=pms km_db_schema=keymgr master_db_schema=master diff --git a/apitest/testNgXmlFiles/mimotoApi.xml b/apitest/testNgXmlFiles/mimotoApi.xml index c3f2af23a..6c86963cc 100644 --- a/apitest/testNgXmlFiles/mimotoApi.xml +++ b/apitest/testNgXmlFiles/mimotoApi.xml @@ -23,14 +23,6 @@ - - - - - - - - Date: Wed, 11 Sep 2024 16:17:02 +0530 Subject: [PATCH 236/860] MOSIP-35700 | Modifying the mimoto testrig to adopt context URL through config Signed-off-by: Nandhukumar --- apitest/pom.xml | 4 ++-- .../main/resources/config/Kernel.properties | 22 +++++++++---------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/apitest/pom.xml b/apitest/pom.xml index d68b951db..bcdaa5a17 100644 --- a/apitest/pom.xml +++ b/apitest/pom.xml @@ -8,7 +8,7 @@ apitest-mimoto Parent project of apitest-mimoto https://github.com/mosip/mimoto - 1.2.1-SNAPSHOT + 0.15.0-SNAPSHOT @@ -49,7 +49,7 @@ 2.2.1 3.0.1 - apitest-mimoto-1.2.1-SNAPSHOT-jar-with-dependencies + apitest-mimoto-0.15.0-SNAPSHOT-jar-with-dependencies diff --git a/apitest/src/main/resources/config/Kernel.properties b/apitest/src/main/resources/config/Kernel.properties index f6a5a0cca..b752f6ec0 100644 --- a/apitest/src/main/resources/config/Kernel.properties +++ b/apitest/src/main/resources/config/Kernel.properties @@ -137,17 +137,17 @@ AuthClientID = mosip-resident-client #---------------------------------- Client Secret Keys -----------------------# #-- When test rig ran in docker, these values dervied from the environment ---# -mosip_partner_client_secret = w6z9XQQ6Toi5vzzY -mosip_pms_client_secret = 3XiMpmPfAAzT47EC -mosip_resident_client_secret = MiTOjWLVoFZw3CHZ -mosip_idrepo_client_secret = qKNTW5CTxKsgVGjw -mosip_reg_client_secret = Msc7sItq6Rg8vcEC -mosip_admin_client_secret = auWjWiniqX0YX8KF -mosip_hotlist_client_secret = lA7pCSLknLvT9Owj -mosip_regproc_client_secret = rR5eKHfG4i3BJf8S -mpartner_default_mobile_secret = duo1HolnpqNc6aMA -mosip_testrig_client_secret = G9qAJ3SrOm575GqL -AuthClientSecret = MiTOjWLVoFZw3CHZ +mosip_partner_client_secret = +mosip_pms_client_secret = +mosip_resident_client_secret = +mosip_idrepo_client_secret = +mosip_reg_client_secret = +mosip_admin_client_secret = +mosip_hotlist_client_secret = +mosip_regproc_client_secret = +mpartner_default_mobile_secret = +mosip_testrig_client_secret = +AuthClientSecret = From 3b4be0d0dae1b85fe2326df52b3788a64e5ac998 Mon Sep 17 00:00:00 2001 From: nihallakshmankonchady <115219608+nihallakshmankonchady@users.noreply.github.com> Date: Wed, 11 Sep 2024 16:40:29 +0530 Subject: [PATCH 237/860] [PER-104] : Creation of InjiWeb Scripts and ReadMe file (#357) * Added JMeter script and ReadMe file Signed-off-by: Nihal LK * update script with right number of users Signed-off-by: Nihal LK * Updated script with new transaction name Signed-off-by: Nihal LK * Re-arranged the script with Setup and preparation Signed-off-by: Nihal LK * Updated script Signed-off-by: Nihal LK * Updated csv config file name Signed-off-by: Nihal LK * Updated script with Endpoint name Signed-off-by: Nihal LK * Updated ReadMe file Signed-off-by: Nihal LK * Updated the script with respect to reviews Signed-off-by: Nihal LK * Updated the script as per review comments Signed-off-by: Nihal LK * Updated the script and Readme file Signed-off-by: Nihal LK * Updated script and ReadMe file with review comments Signed-off-by: Nihal LK * Updated ReadMe file Signed-off-by: Nihal LK * Updated the ReadMe file for expiry time Signed-off-by: Nihal LK * Updated ReadMe file Signed-off-by: Nihal LK * Updated the runtime file path Signed-off-by: Nihal LK * Updating sampler names of script Signed-off-by: Nihal LK * Updated the file path info Signed-off-by: Nihal LK * Updated the script as per review comments Signed-off-by: Nihal LK * Updated value numberOfIdentitiesPerThread Signed-off-by: Nihal LK * Updated Readme file for testdata creation Signed-off-by: Nihal LK --------- Signed-off-by: Nihal LK Co-authored-by: Nihal LK --- performance-test/README.md | 138 ++ .../scripts/InjiWeb_Test_Script.jmx | 2124 +++++++++++++++++ .../add_identity_request_details.csv | 10 + .../support-files/biometrics_data.txt | 1 + .../center_machine_id_values.csv | 6 + 5 files changed, 2279 insertions(+) create mode 100644 performance-test/README.md create mode 100644 performance-test/scripts/InjiWeb_Test_Script.jmx create mode 100644 performance-test/support-files/add_identity_request_details.csv create mode 100644 performance-test/support-files/biometrics_data.txt create mode 100644 performance-test/support-files/center_machine_id_values.csv diff --git a/performance-test/README.md b/performance-test/README.md new file mode 100644 index 000000000..c53c79c27 --- /dev/null +++ b/performance-test/README.md @@ -0,0 +1,138 @@ + +### Contains +* This folder contains performance Test script of below API endpoint categories. + 01. Create Identities in MOSIP Identity System (Setup) + 02. S03 User downloads MOSIP National ID credential (Preparation) + 03. S01 User accessing Inji Web portal landing page (Execution) + 04. S02 User choosing an issuer and landing on credential types screen (Execution) + 05. S03 User downloads MOSIP National ID credential (Execution) + +* Open source Tools used, + 1. [Apache JMeter](https://jmeter.apache.org/) + +### How to run performance scripts using Apache JMeter tool +* Download Apache JMeter from https://jmeter.apache.org/download_jmeter.cgi +* Download scripts for the required module. +* Start JMeter by running the jmeter.bat file for Windows or jmeter file for Unix. +* Validate the scripts for one user. +* Execute a dry run for 10 min. +* Execute performance run with various loads in order to achieve targeted NFR's. + +### Setup points for Execution + +* We need some jar files which needs to be added in lib folder of jmeter, PFA dependency links for your reference : + + * jmeter-plugins-manager-1.10.jar + * + + kg.apc + jmeter-plugins-manager + 1.10 + + + * jmeter-plugins-synthesis-2.2.jar + * + + kg.apc + jmeter-plugins-synthesis + 2.2 + + + +* eSignet-default properties: Update the value for the properties according to the execution setup. Perform the execution for eSignet api's with redis setup. So check for the redis setup accordingly. + + * Enabling redis cache of eSignet application. + *spring.cache.type=redis + *spring.redis.host=redis-master-0.redis-headless.redis.svc.cluster.local + *spring.redis.port=6379 + *management.health.redis.enabled=false + + * Increasing the expire time to 24 hours for field mosip.esignet.cache.expire-in-seconds + *'clientdetails' : 86400 + *'authcodegenerated': 86400 + *'authtokens': 86400 + +* id-authentication-default.properties: Update the value for the properties according to the execution setup. + *mosip.ida.kyc.token.expire.time.adjustment.seconds=86400 + +### Execution points for eSignet Authentication API's + +*InjiWeb_Test_Script.jmx + + * Create Identities in MOSIP Identity System (Setup) : This thread contains the authorization api's for regproc and idrepo from which the auth token will be generated. There is set of 4 api's generate RID, generate UIN, add identity and add VID. From here we will get the VID which can be further used as individual id. These 4 api's are present in the loop controller where we can define the number of samples for creating identities in which "addIdentitySetup" is used as a variable. + + * S03 User downloads MOSIP National ID credential (Preparation) : This thread generates authcode-token for the download of National ID department PDF. The number of testdata created is depended upon the TPS planned for test execution. The testdata created is non-reusable and expires after 24 hours. + + *Procedure to calculate number of authcodegenerated token values. + * Considering load of 100 TPS volume : As per the request page, 40% Load will be consumed by User downloads MOSIP National ID credential Scenario which is equivalent to 40 TPS. + * User downloads MOSIP National ID credential Scenario consists following 5 endpoints. + */issuers + */issuers/ + */issuers//credentialTypes + */get-token/ + */issuers//credential/download + * Each point url will consume 8 TPS ( 40 TPS / 5 requests). + * If we are executing test only for one hour then number of testdata will be as follows + * Total Number of testdata = TPS value X 3600(number of seconds in one hour) + = 8 X 3600 + = 28800 + * After calculating number of testdata. provide random number of threads in threadgroup (Assuming thread numbers equal to 4 for the sake of calculation), calculate number of iterations as follows + * Number of iterations = Total testdata required / Number of users + = 28800 / 4 + = 7200 + + * S01 User accessing Inji Web portal landing page (Execution) : + * S01 T01 Issuers : This thread executes issuer endpoint. + + * S02 User choosing an issuer and landing on credential types screen (Execution): + * S02 T01 Issuers : This thread executes issuer endpoint. + * S02 T02 Issuer Id : This thread executes eSignet issuer endpoint. + * S02 T03 Credential Types : This thread executes credential type endpoint. + + * S03 User downloads MOSIP National ID credential (Execution): + * S03 T01 Issuers : This thread executes issuer endpoint. + * S03 T02 Issuer Id : This thread executes eSignet issuer endpoint. + * S03 T03 Credential Types : This thread executes credential type endpoint. + * S03 T04 Get Token : This thread connects to eSignet /token endpoint with the authorization code. + * S03 T05 Download File : This thread downloads National ID department PDF file. + +### Downloading Plugin manager jar file for the purpose installing other JMeter specific plugins + +* Download JMeter plugin manager from below url links. + *https://jmeter-plugins.org/get/ + +* After downloading the jar file place it in below folder path. + *lib/ext + +* Please refer to following link to download JMeter jars. + https://mosip.atlassian.net/wiki/spaces/PT/pages/1227751491/Steps+to+set+up+the+local+system#PluginManager + +### Designing the workload model for performance test execution +* Calculation of number of users depending on Transactions per second (TPS) provided by client + +* Applying little's law + * Users = TPS * (SLA of transaction + think time + pacing) + * TPS --> Transaction per second. + +* For the realistic approach we can keep (Think time + Pacing) = 1 second for API testing + * Calculating number of users for 10 TPS + * Users= 10 X (SLA of transaction + 1) + = 10 X (1 + 1) + = 20 + +### Usage of Constant Throughput timer to control Hits/sec from JMeter +* In order to control hits/ minute in JMeter, it is better to use Timer called Constant Throughput Timer. + +* If we are performing load test with 10TPS as hits / sec in one thread group. Then we need to provide value hits / minute as in Constant Throughput Timer + * Value = 10 X 60 + = 600 + +* Dropdown option in Constant Throughput Timer + * Calculate Throughput based on as = All active threads in current thread group + * If we are performing load test with 10TPS as hits / sec in one thread group. Then we need to provide value hits / minute as in Constant Throughput Timer + Value = 10 X 60 + = 600 + + * Calculate Throughput based on as = this thread + * If we are performing scalability testing we need to calculate throughput for 10 TPS as + Value = (10 * 60 )/(Number of users) diff --git a/performance-test/scripts/InjiWeb_Test_Script.jmx b/performance-test/scripts/InjiWeb_Test_Script.jmx new file mode 100644 index 000000000..ecda1cd2c --- /dev/null +++ b/performance-test/scripts/InjiWeb_Test_Script.jmx @@ -0,0 +1,2124 @@ + + + + + + false + false + + + + + + + + + + protocol + https + = + + + serverIP + inji.cellbox1.mosip.net + = + + + serverPortNo + 443 + = + + + schemaVersion + 0 + = + + + serverIPEsignet + esignet.cellbox1.mosip.net + = + + + regProcClientId + mosip-regproc-client + = + + + regProcSecretKey + abc123 + = + + + regProcAppId + regproc + = + + + idRepoClientId + mosip-idrepo-client + = + + + idRepoSecretKey + abc123 + = + + + idRepoAppId + idrepo + = + + + numberOfIdentitiesPerThread + 50 + = + + + serverIPInternal + api-internal.cellbox1.mosip.net + = + + + rampUp + 30 + = + + + testDuration + 3600 + = + + + runTimeFilePath + ./runtime-files + = + + + issuerName + ESignet + = + + + + + + continue + + false + 1 + + 1 + 1 + false + 300 + + true + + + + + + false + import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.TimeZone;//Set the format for the date-time +SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sss"); +dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));// Get the current time in UTC +Calendar cal = Calendar.getInstance(); +String utcTime = dateFormat.format(cal.getTime()); +vars.put("utcTime", utcTime); + + + + true + + + + false + { + "id": "string", + "metadata": {}, + "request": { + "clientId": "${regProcClientId}", + "secretKey": "${regProcSecretKey}", + "appId": "${regProcAppId}" + }, + "requesttime": "${utcTime}Z", + "version": "1.0" +} + = + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + v1/authmanager/authenticate/clientidsecretkey + POST + true + false + true + false + + + + + + + + + Content-Type + application/json + + + + + + + "message":"Clientid and Token combination had been validated successfully" + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + true + regprocAuthToken + set-cookie: Authorization=(.*?); + $1$ + authToken_not_found + 1 + + + + + true + + + + false + { + "id": "string", + "metadata": {}, + "request": { + "clientId": "${idRepoClientId}", + "secretKey": "${idRepoSecretKey}", + "appId": "${idRepoAppId}" + }, + "requesttime": "${utcTime}Z", + "version": "1.0" +} + = + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + v1/authmanager/authenticate/clientidsecretkey + POST + true + false + true + false + + + + + + + + + Content-Type + application/json + + + + + + + "message":"Clientid and Token combination had been validated successfully" + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + true + idrepoAuthToken + set-cookie: Authorization=([\w.-]+); + $1$ + authToken_not_found + 1 + + + + + true + ${numberOfIdentitiesPerThread} + + + + ./support-files/center_machine_id_values.csv + + machineID,centerID + true + , + false + true + true + shareMode.all + + + + ./support-files/biometrics_data.txt + + biometrics + false + , + false + true + true + shareMode.all + + + + ./support-files/add_identity_request_details.csv + + firstName,dateOfBirth,gender + true + , + false + true + false + shareMode.all + + + + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + v1/ridgenerator/generate/rid/${centerID}/${machineID} + GET + true + false + true + false + + + + + + + + + Cookie + Authorization=${regprocAuthToken} + + + Content-Type + application/json + + + + + + + "response":{"rid":" + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + false + rid + {"rid":"(.*?)"}," + $1$ + rid not found + 1 + + + + + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + v1/idgenerator/uin + GET + true + false + true + false + + + + + + + + + Cookie + Authorization=${idrepoAuthToken} + + + Content-Type + application/json + + + + + + + response":{"uin":" + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + false + uin + {"uin":"(.*?)"}," + $1$ + uin not found + 1 + + + + + true + + + + false + { + "id": "mosip.id.create", + "request": { + "registrationId": "${rid}", + "identity": { + "IDSchemaVersion": 0.1, + "UIN": "${uin}", + + + "addressLine1": [{ + "language": "eng", + "value": "Line1" + }], + + "addressLine2": [{ + "language": "eng", + "value": "Line2" + }], + + "addressLine3": [{ + "language": "eng", + "value": "Line3" + }], + + "city": [{ + "language": "eng", + "value": "FR" + }], + + + "email": "abc@gmail${__Random(100,999999999999,)}.com", + + "phone": "8249742850", + "dateOfBirth": "${dateOfBirth}", + "postalCode": "14022", + + "fullName": [{ + "language": "eng", + "value": "FR" + }], + + "gender": [{ + "language": "eng", + "value": "${gender}" + }], + + + "province": [{ + "language": "eng", + "value": "FR" + }], + + + + "region": [{ + "language": "eng", + "value": "FR" + }], + + "zone": [{ + "language": "eng", + "value": "FR" + }], + + "proofOfAddress": { + "format": "pdf", + "type": "DOC015", + "value": "proofOfAddress" + }, + + + + "proofOfIdentity": { + "format": "pdf", + "type": "DOC015", + "value": "proofOfIdentity" + }, + + + + "individualBiometrics": { + "format": "cbeff", + "version": 1, + "value": "individualBiometrics_bio_CBEFF" + } + }, + "documents": [{ + "category": "proofOfAddress", + "value": "ZGF0YQ" + }, + { + "category": "individualBiometrics", + "value": "${biometrics}" + } + ] + }, + + + + + + + "requesttime": "${utcTime}Z", + "version": "v1.0" +} + = + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + idrepository/v1/identity/ + POST + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${idrepoAuthToken} + + + + + + + {"status":"ACTIVATED + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + false + ${__StringToFile(credential_password_auth.csv,${identifier}@phone\,${genPassword}\,${fullName}\n,true,)} + + + + groovy + + + true + def data=prev.getResponseDataAsString(); +log.info(data); + + + + + true + + + + false + { + "id": "mosip.vid.create", + "metadata": {}, + "request": { + "UIN":"${uin}", + "vidType": "Perpetual" + }, + "requesttime": "${utcTime}Z", + "version": "v1" +} + = + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /idrepository/v1/vid + POST + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${idrepoAuthToken} + + + + + + + "vidStatus":"ACTIVE" + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + false + vid + "VID":"(.*?)" + $1$ + vid not found + 1 + + + + false + + + ${__StringToFile(${runTimeFilePath}/vid_testdata.txt,${vid}\n,true,)} + + + + + + + continue + + false + 1 + + 1 + 1 + false + 300 + + false + + + + ${runTimeFilePath}/vid_testdata.txt + + vId + true + , + false + true + true + shareMode.all + + + + + + + + + ${serverIP} + + https + + v1/mimoto/issuers + GET + true + false + true + false + + + + + + + groovy + + + true + def starttime="${__time(,)}" +vars.put("starttime",starttime); + + + + + "errors":[] + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + ${serverIP} + + https + + v1/mimoto/issuers/${issuerName} + GET + true + false + true + false + + + + + + + false + clientId + client_id":"(.*?)" + $1$ + + 1 + true + + + + + "errors":[] + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + ${serverIP} + + https + + v1/mimoto/issuers/${issuerName}/credentialTypes + GET + true + false + true + false + + + + + + + + "errors":[] + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + + ${serverIPEsignet} + + https + + v1/esignet/csrf/token + GET + true + false + true + false + + + + + + + false + loadCsrfToken + token":"(.*?)" + $1$ + + 1 + true + + + + + token + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + true + + + + false + {"requestTime":"${__timeShift(yyyy-MM-dd'T'HH:mm:ss.SSS'Z',,-PT5H30M,,)}","request":{"nonce":null,"state":"qTFFS9uGVpWnit0SwUGlQU62NRh06GA4wqtMfDpbwRI","clientId":"${clientId}","redirectUri":"https://${serverIP}/redirect","responseType":"code","scope":"mosip_identity_vc_ldp","acrValues":null,"claims":null,"claimsLocales":null,"display":null,"maxAge":null,"prompt":null,"uiLocales":"en","codeChallenge":"${codeChallenge}","codeChallengeMethod":"S256"}} + + + = + + + + ${serverIPEsignet} + + https + + /v1/esignet/authorization/v2/oauth-details + POST + true + false + true + false + + + + + + + + + Content-Type + application/json + + + X-XSRF-TOKEN + ${loadCsrfToken} + + + Cookie + XSRF-TOKEN=${loadCsrfToken} + + + + + + + "errors":[] + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + groovy + + + true + import org.apache.commons.codec.binary.Base64; +import java.security.SecureRandom; +import java.security.MessageDigest; + +SecureRandom secureRandom = new SecureRandom(); +byte[] codeVerifierBytes = new byte[32]; // 256 bits +secureRandom.nextBytes(codeVerifierBytes); + +String codeVerifier = Base64.encodeBase64URLSafeString(codeVerifierBytes); +vars.put("codeVerifier", codeVerifier); +log.info("codeVerifier: " + codeVerifier); + +MessageDigest digest = MessageDigest.getInstance("SHA-256"); +byte[] hash = digest.digest(codeVerifier.getBytes("UTF-8")); +String codeChallenge = Base64.encodeBase64URLSafeString(hash); +vars.put("codeChallenge", codeChallenge); +log.info("codeChallenge: " + codeChallenge); + + + + + false + tidUserInfoPrep + "transactionId":"(.*?)" + $1$ + tidUserInfoPrep not found + 1 + + + + javascript + + + true + // Import the required Java classes +var Base64 = Java.type('java.util.Base64'); +var StandardCharsets = Java.type('java.nio.charset.StandardCharsets'); + +// Retrieve the previous response value +var jsonResponse = prev.getResponseDataAsString(); + +// Print the previous response value +log.info("Previous Response: " + jsonResponse); + +// Parse the JSON response +var jsonObject = JSON.parse(jsonResponse); +var responseObjectString = JSON.stringify(jsonObject.response); + +log.info("Previous Response: " + responseObjectString); + +// Convert JSON to base64 URL-encoded SHA-256 hash +var sha256Hash = hashSHA256(responseObjectString); +var base64UrlEncodedHash = encodeBase64Url(sha256Hash); + +//Print the sha256 value +log.info("sha256Hash Value: " + sha256Hash); + +// Print the final hash value +log.info("Final Hash Value: " + base64UrlEncodedHash); + +// Set the new variable value in JMeter +vars.put("hashValue", base64UrlEncodedHash); + +// Function to compute the SHA-256 hash +function hashSHA256(value) { + var messageDigest = Java.type('java.security.MessageDigest').getInstance('SHA-256'); + var bytes = (value).getBytes(StandardCharsets.UTF_8); + var digest = messageDigest.digest(bytes); + return digest; +} + +// Function to base64 URL-encode the hash value +function encodeBase64Url(value) { + var base64 = Base64.getUrlEncoder().withoutPadding().encodeToString(value); + return base64; +} + + + + + true + + + + false + { + "requestTime": "${utcTime}Z", + "request": { + "transactionId": "${tidUserInfoPrep}", + "individualId": "${vId}", + "otpChannels": ["PHONE"], + "captchaToken" : "" + + } +} + + = + + + + ${serverIPEsignet} + ${serverPortNo} + ${protocol} + + /v1/esignet/authorization/send-otp + POST + true + false + true + false + + + + + + + + + Content-Type + application/json + + + X-XSRF-TOKEN + ${loadCsrfToken} + + + Cookie + XSRF-TOKEN=${loadCsrfToken} + + + oauth-details-hash + ${hashValue} + + + oauth-details-key + ${tidUserInfoPrep} + + + + + + + "errors":[] + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + false + import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.TimeZone;//Set the format for the date-time +SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sss"); +dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));// Get the current time in UTC +Calendar cal = Calendar.getInstance(); +String utcTime = dateFormat.format(cal.getTime()); +vars.put("utcTime", utcTime); + + + + + + + true + + + + false + { + "requestTime": "${utcTime}Z", + "request": { + "transactionId": "${tidUserInfoPrep}", + "individualId": "${vId}", + "challengeList" : [ + { + "authFactorType" : "OTP", + "challenge" : "111111", + "format" : "alpha-numeric" + } + ] + } +} + = + + + + ${serverIPEsignet} + ${serverPortNo} + ${protocol} + + /v1/esignet/authorization/v3/authenticate + POST + true + false + true + false + + + + + + + + + Content-Type + application/json + + + X-XSRF-TOKEN + ${loadCsrfToken} + + + Cookie + XSRF-TOKEN=${loadCsrfToken} + + + oauth-details-hash + ${hashValue} + + + oauth-details-key + ${tidUserInfoPrep} + + + + + + + "errors":[] + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + false + import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.TimeZone;//Set the format for the date-time +SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sss"); +dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));// Get the current time in UTC +Calendar cal = Calendar.getInstance(); +String utcTime = dateFormat.format(cal.getTime()); +vars.put("utcTime", utcTime); + + + + + + + true + + + + false + { + "requestTime": "${utcTime}Z", + "request": { + "transactionId": "${tidUserInfoPrep}", + "permittedAuthorizeScopes": [], + "acceptedClaims": [] + } +} + = + + + + ${serverIPEsignet} + ${serverPortNo} + ${protocol} + + /v1/esignet/authorization/auth-code + POST + true + false + true + false + + + + + + + + + Content-Type + application/json + + + X-XSRF-TOKEN + ${loadCsrfToken} + + + Cookie + XSRF-TOKEN=${loadCsrfToken} + + + oauth-details-hash + ${hashValue} + + + oauth-details-key + ${tidUserInfoPrep} + + + + + + + "errors":[] + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + false + codeTokenEndpoint + "code":"(.*?)" + $1$ + Code not found + 1 + + + + false + + + ${__StringToFile(${runTimeFilePath}/authcode_token.txt,${codeTokenEndpoint}\,${codeChallenge}\,${codeVerifier}\n,true,)} + + + + + + continue + + false + -1 + + 30 + ${rampUp} + true + ${testDuration} + + true + + + + false + true + + + + + + + ${serverIP} + + https + + v1/mimoto/issuers + GET + true + false + true + false + + + + + + + + "errors":[] + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + 2 + + throughput + 1800.0 + 0.0 + + + + + + continue + + false + -1 + + 30 + ${rampUp} + true + ${testDuration} + + true + + + + false + true + + + + + + + ${serverIP} + + https + + v1/mimoto/issuers + GET + true + false + true + false + + + + + + + + "errors":[] + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + false + true + + + + + + + ${serverIP} + + https + + v1/mimoto/issuers/${issuerName} + GET + true + false + true + false + + + + + + + + "errors":[] + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + false + true + + + + + + + ${serverIP} + + https + + v1/mimoto/issuers/${issuerName}/credentialTypes + GET + true + false + true + false + + + + + + + + "errors":[] + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + throughput + 1800.0 + 0.0 + + 2 + + + + + continue + + false + -1 + + 40 + ${rampUp} + true + ${testDuration} + + false + + + + ${runTimeFilePath}/authcode_token.txt + + codeTokenEndpoint,codeChallenge,codeVerifier + true + , + false + false + true + shareMode.group + + + + false + true + + + + + + + ${serverIP} + + https + + v1/mimoto/issuers + GET + true + false + true + false + + + + + + + + "errors":[] + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + false + true + + + + + + + ${serverIP} + + https + + v1/mimoto/issuers/${issuerName} + GET + true + false + true + false + + + + + + + false + clientId + client_id":"(.*?)" + $1$ + + 1 + true + + + + + "errors":[] + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + false + true + + + + + + + ${serverIP} + + https + + v1/mimoto/issuers/${issuerName}/credentialTypes + GET + true + false + true + false + + + + + + + + "errors":[] + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + false + true + + + + + + + false + authorization_code + = + true + grant_type + + + false + ${codeTokenEndpoint} + = + true + code + + + false + https://${serverIP}/redirect + = + true + redirect_uri + + + false + ${codeVerifier} + = + true + code_verifier + + + false + ${clientId} + = + true + client_id + + + false + urn:ietf:params:oauth:client-assertion-type:jwt-bearer + = + true + client_assertion_type + + + + ${serverIP} + ${serverPortNo} + ${protocol} + + v1/mimoto/get-token/${issuerName} + POST + true + false + true + false + + + + + + + + + Content-Type + application/x-www-form-urlencoded + + + + + + + access_token + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + false + accessToken + "access_token":"(.*?)" + $1$ + access_token not found + 1 + + + + + + false + true + + + + + + + ${serverIP} + ${serverPortNo} + ${protocol} + + v1/mimoto/issuers/${issuerName}/credentials/MOSIPVerifiableCredential/download + GET + true + false + true + false + + + + + + + + + Content-Type + application/x-www-form-urlencoded + + + Bearer + ${accessToken} + + + + + + + PDF + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + throughput + 2400.0 + 0.0 + + 2 + + + + + false + + saveConfig + + + true + true + true + + true + true + true + true + false + true + true + false + false + false + true + false + false + false + true + 0 + true + true + true + true + true + true + + + + + + + false + + saveConfig + + + true + true + true + + true + true + true + true + false + true + true + false + false + false + true + false + false + false + true + 0 + true + true + true + true + true + true + + + + + + + false + + saveConfig + + + true + true + true + + true + true + true + true + false + true + true + false + false + false + true + false + false + false + true + 0 + true + true + true + true + true + true + + + + 500 + false + .*Endpoint.* + + + + true + false + + + + false + + saveConfig + + + true + true + true + + true + true + true + true + false + true + true + false + false + false + true + false + false + false + true + 0 + true + true + true + true + true + true + + + + 500 + false + + .*Endpoint.* + + + false + true + + + + + diff --git a/performance-test/support-files/add_identity_request_details.csv b/performance-test/support-files/add_identity_request_details.csv new file mode 100644 index 000000000..27d3063d0 --- /dev/null +++ b/performance-test/support-files/add_identity_request_details.csv @@ -0,0 +1,10 @@ +firstName,dateOfBirth,gender +Sabya,1995\/05\/07,Male +Vishwa,1972\/03\/04,Male +Siva,1975\/05\/06,Male +Reeba,1982\/05\/08,Female +Manoj SP,1972\/05\/07,Male +Priya,1982\/05\/07,Female +Riya,1992\/05\/07,Female +Arun,1992\/03\/07,Male +Arvind,1993\/03\/06,Male diff --git a/performance-test/support-files/biometrics_data.txt b/performance-test/support-files/biometrics_data.txt new file mode 100644 index 000000000..099e07f32 --- /dev/null +++ b/performance-test/support-files/biometrics_data.txt @@ -0,0 +1 @@ +PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI_Pgo8QklSIHhtbG5zPSJodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLWllYy8xOTc4NS8tMy9lZC0yLyI-CiAgICA8QklSSW5mbz4KICAgICAgICA8SW50ZWdyaXR5PmZhbHNlPC9JbnRlZ3JpdHk-CiAgICA8L0JJUkluZm8-CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24-CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I-MTwvTWlub3I-CiAgICAgICAgPC9DQkVGRlZlcnNpb24-CiAgICAgICAgPEJJUkluZm8-CiAgICAgICAgICAgIDxJbnRlZ3JpdHk-ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8-CiAgICAgICAgPEJEQkluZm8-CiAgICAgICAgICAgIDxGb3JtYXQ-CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24-CiAgICAgICAgICAgICAgICA8VHlwZT43PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MFo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU-RmluZ2VyPC9UeXBlPgogICAgICAgICAgICA8U3VidHlwZT5MZWZ0IFJpbmdGaW5nZXI8L1N1YnR5cGU-CiAgICAgICAgICAgIDxMZXZlbD5SYXc8L0xldmVsPgogICAgICAgICAgICA8UHVycG9zZT5FbnJvbGw8L1B1cnBvc2U-CiAgICAgICAgICAgIDxRdWFsaXR5PgogICAgICAgICAgICAgICAgPEFsZ29yaXRobT4KICAgICAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPkhNQUM8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5TSEEtMjU2PC9UeXBlPgogICAgICAgICAgICAgICAgPC9BbGdvcml0aG0-CiAgICAgICAgICAgICAgICA8U2NvcmU-NjQ8L1Njb3JlPgogICAgICAgICAgICA8L1F1YWxpdHk-CiAgICAgICAgPC9CREJJbmZvPgogICAgICAgIDxCREI-UmtsU0FEQXlNQUFBQVdEYkFBRUJBUUFCWU1zSDVnd2NEQjRQQVZrQUFBQUFBQUV4QUVBQUR3SUFRQUlBUUFJSkFBRUI5QUgwQWZRQjlBZ0ZIUUQ4QWM0QUFXQmFBQUFBREdwUUlDQU5Db2NLQUFBQUZHWjBlWEJxY0RJZ0FBQUFBR3B3TWlBQUFBQkhhbkF5YUFBQUFCWnBhR1J5QUFBQnpnQUFBUHdBQVFjSEFBQUFBQUFQWTI5c2NnRUFBQUFBQUJFQUFBQWFjbVZ6SUFBQUFCSnlaWE5qbWNvQUFabktBQUVBQUFBQUFBQnFjREpqLzAvL1VRQXBBQUFBQUFEOEFBQUJ6Z0FBQUFBQUFBQUFBQUFBL0FBQUFjNEFBQUFBQUFBQUFBQUJCd0VCLzJRQUl3QUJRM0psWVhSdmNqb2dTbUZ6VUdWeUlGWmxjbk5wYjI0Z01TNDVNREF1TWY5a0FCQUFBVVZ1WTBsRU9rZFNRbFF3TWY5U0FBd0FBZ0FKQUFVRUJBQUIvMXdBRTBCQVNFaFFTRWhRU0VoUVNFaFFTRWhRLzVBQUNnQUFBQUZmWWdBQi81UGZHeEFPelpINllyNnU5bisrbEtwZ3ZleUxHR3piZjlocHNZSGlHTlNCK3htTWVqV09yS2d3S2dXTDJTbXc2ejZ3SU5oZGdJQ0E4b2pleEZBQ1dON0tOLzBhM2tNS3Fnd3VLNENBOFFBMVBJQldRZkE1bTN3RmxrNzZTaTg4L0FlQUwxWmFNSnlhRmt3Q05wY0xCOVJxbnBNZGw3Qld3ZGJMdXZHdGpRcS9nTWRVQURnZ3FnSWNIZEwrSGxqeXpId1hzcVZ0MzM0ZW84eENxQ2E2SG9qb29ZdnZQeDdOZXIxNnA1azFCMnN6VmovblJoNXZkeTFIU3A0Mi9BSFZKZ0M5M1huWW1yS1cwY3NZVE9sRzBVWm4wMnVZWC9vSThTeWNRSzczNVhTaTJ5ZnhuTHJNNEV0NExGNHZtOUZuZFFad2szSkxCSmdnOStyTHN3WUNxdWNBaWNrcFArcFEyUWMxWmFZRlhoNnU4ZlZLUUFncVdoT0FYc1lBNE9Yd3dyOFM0bUpHdFZ1azBXTEZUSXJ3VGlGOUJXWjlPRkp0MlB3cXZqTGZtUENRUG0xYkRZenVlNThtU0VmdWk1bU9GYXVZQmNuMnkyQ3Nac3UxdkUvdVdRMmpVa05RUmpGZHRyOExwV3RVSDlhaWpISkVtQnZxMXdReGVIcDZoSEhqaHBUaGNhcXEzU0RicVF0MUZUVzQvZUx6U1ZGQ09qRnpBclFpYTA0VlcwR0lORVBlS3BBOFJpZEZKNStnTjh4MUhpU2VYYkRqdWlJV3BPYjZuWXlYbi9IM2Q4eHBvdzhaM2pkMEVpaFQ5dlZJbWRlbXRSYlF1b2RhdkxLTG10UnladDZTYlNwWVBBQ3pSL2RLQ2t0QTBIWSthL0wrWWIvOFV4WTV2UXlvZ1QycFlwY1B2OVpqQ1pOdFNiS0F1bW1EeG5zeUUyS0d2RHVBT00wVVRObCsvdXJPMFlCdE5teG9QMWsxbERpRlBmMS9yVkIwbjdnU2hncHhnSndtQ0o0VE5sMFI4c0s5VXEwRlFtWjBLTExCdkJremZuUWVUSnhIaFFrVUdLMjBZbkMxdjZRRWpjajVUSEdMcnZjd1Q5Qlh3STZ2Nllsc29KN1lxSUxZVGR6VDhja1I4TXNtNGkzZkhINE04dmNOWWRCOTJVVmI0NHVDb2RoREIyVTYxcmpZNll3SzlaczBhcksydG1XeVVvL0FCN2tsMWpTZFZobHpEcGxGdUc4dThNQnFQb0xXdU9Cd1d5T0o4WVFOWmZya1FEaGF5c1k0YTEycjVSTmgyakF3VWJ4UU16bEhYU3kwcm05cHdHMG9OeCtJaEdQRkRHZEJLeVU1YkpJZENWeCtNYnZicWRicGlQb2hKTHRDeVBjNHpSNDJZTlVYN29qQWN3VjVUcDJ5eWlyYldoQWJDV2FjeGJBYzl3bTQ1ZEI4d0ZNK3hmakFEa25kTk91SXh3eHRnM1llTzl0ZmtTWWlQLzE1UVJXRkU1NnB1cVBST1FvZ1dpcUcvcHRMOHc4YWpGb3BzOVAzTXp3L2ZlWlJ5WllLdytWZ3RiNTBVdkVEOFl6S055Zk80ZnhLbVZWd2I2L3pzUDZCOE5ia2tobEVCd09qNUpORkRYdklWakVZNFZhUXk4YjNqc3FtcDRGSFpCamlWZUlNTmNOd0RIUUQrR0RzZi9aSXhKeC9mSHB1OTFpdkFFT1h2UTVaQUhPYmM0MXFpZ0RudUpLOGNOQjVFQ3luT2pqRnBXdDFNQjhpM0FsdFFHZHpQQnViUmViNDhNVkZGNzgvY0ZlcDR6K2FYQlhaV0xDOXo0cW1kcFNnTXFJYjQwRmNtd3k3VDFuNHJEaHc4Y29OeDU0THNNRmhuQlA4aHQvS2Yvem8yTTVpRFI2TGlJRTBTeGo1bnVlYmRkUkplbWxRbE1DbGFGbDlvN3VyZWdRZTBzMC9ieGNzaitjUFFyNWQzRnoxQ0JtNk1GVmhoejV4V1NXV2UvOVNUVFpPNkx1NVZZWi9LVTA3Q05NRTErcWxaejN1YldQRWpjWWxTL0VXdkFLOGJGYmZuQ3VVYjdhbjZPZjF0OVVKYWlRSkVBbWV6aVREVUozRnE1YXZ1TVBTZm1SKy8ycWw4QkZZRTBlek5ObmZlTEpmTytySHFkT3lqeEIvUXE5V01WQVd0T1VjRm5HYkNHdDRsWlJJRHEvZmZ1WHVWdk0xcTVKL3hPdWt2YUxuaHdkOXhBMVcrL2x4MnNFL1JnTnVzV01tMjVPdmlON0o5Tm1MTDR1UzNiem91VU9XNDVwaUx0cGxidDJIS3JKTTF0ekh5eWR6ODJ2TVRvZ01qYW1KMDBSY3RabFV6RDJ0SmRJM1hEOEdueWdIMUNTaWhSdHVvUWNOSWVrenlma2htd0Nnc1dudjRjbEZ4NzMzbVBZUVZBMEtXRFlyeHE4aHg4ZkRNZ0lvQk15V0xmU3VuOFE5T3ZBdE13NmdDS0N3RGVuRzhUZUZVK3R3MGZPNGR2dSs1TG5MU2lvYk5lbTZ1bTdhYzNLaE4rMUpONVVXV2dxNFdQOHFBYnYzQVpjMFJOSFRYcWoxYWhWekZNbG1YWEVkU3daUEFQWFRFOFVNNTlDVFVOdE91VkJyY0RSZEEvYmpRc0hJM2VOczVKSzRHVHF2a1Vud0p2b1YxSGVYcFlHdjFaSkNsaUNCWVVJOXFydGcvU2NCVlhZVDZXY1h0STRWdVYzR3g0Um9aR0JrMk91SVg2azQrcDh0UVc5L29aV2JzSUJQelA0cWo4SHhCeENUWGJocFRzb25BbjEwK0VsTlAweDhLOG9TbEcvd0dyVjFIdVRzYW0xZnRqSjZoWWwyWnhvckxmQ1d5OU13SEZ1eDNSTjI5YjBCTTYvVEwrUUUxSWpmbjdGTUlGaGQ1Q21JckJHeFZlTFFCNDllUDRnMWYvQXQxelRpRlh4MXJlVVVFVk1UcTE2VkFlMlkxWEF1NEpBZHhUUjZWc0FYZEU2Z29SYlI5N3Z6SllIbm5oQlFoQWtHYm54UlhWaWxFN1J6bStwOWoxNlRQUW1aU2F5Z0xJc0FXdy85R0kvanp2TWhzV2F0QWxvZjhjY1JOUzdteHZwcVJYMS80UkJoM1BnTXlMTVpOVXlHdFh0SkJmVnFpMElJa25uUUt6KzZyN1ZNNDg1b0QrWWNkU2pzcUlvM0x0cjYwRkF4Uzdxa1c3MGpuajcxYjIvYTNibTA3cE9BeTk0QWdldzU3c1B0SnpQT2h3QVZMdW0xTkdrdkQwenkxN3lTL0ZZSXdlVkM2VU5HM2cvYlVyVDZMVUhZL3ZpaXNPRTB3clZYTnJCNC9yQVFxakRYYVZOZENMSFY5MlVQaE4wOEZxR2dYSUFtODltNmM3Y0EwdHdmaHVxR2xDamoxQU8vWWRkRTdYNEpCaHlKRHh0bnNQY1FwVnl5RkJuZGUvOWl6ZkwwWUpnNzFoK0dlcC9ScTBZVDZjWUhjZ3QzWjRzc3NiMUtzL1pMbVZjbnkxQm5QSDNjU2JQL0tUMUIyT1Z0SGkxZG91RkJBUDhJTlBuQ21jY3pIdWVoNldmcHNHSDdYNUlWUWVKdm9lemMwL2lzbEdGZ2loRFpTQ2gyS0diNkR6M1g4R0pIcE1oWWd6K1pkT2JvK25zZERVMnhZdm5qRjhhV0Nzbnhxc2diZG81WDV6Tzc4VjNDVDhjSGI4Y2pxYzgzdUg5TTRuL3dZZmd1UXBjaEQ4c1RDeFJ5MG12bGxEMXZGUFNrWVJaelJnSS9NTGthM2x2QitOczJ0QzZ4NXA3SEorWUlDbmlBNm10YWRpY08rVzBWcldRTE56ZmtCanhIV2MxUGpyeSs1d3dQc001OExCeEdxaFNiWmdybXRtS2c1VlpUNVhxNStMSzNQNjhDYms0Sk84RFBPQUZ3aTFWbEhYdnNMMkUycUNEd3VOYTRzMDZvTzdvSVlOd0ltL1dLN2c5SWxEcmtvMkVJMnFwbUpQQ2ZNRFNXTVI0c1poVjdrUkdVblA4N2NMWXQzdlFjaXZDYy9yRFR1a3BoMVhYcVlMcDZKTUdoamxSaGxjUlMwblNHSzlGSFduaklzeDZyZ0RRa2N3NjB4dzc1QkJOSTBRSU9OUnE3THdpRkM1QzVTWHN4NGltYmNPdFFWL2lBRHlMSkxOUnF3UG0vbHJxb0NMMFVvVnNyK01MUjl6cmJyV3FmVm1NbDZvMEpyVElqaDl0TGh3ZkREQWlpVEdzUUpVZVM1TCtIZERHN1I2MlRBWHJCUVVRbXNlbVEvZGJPMXNpOTJNU1V6eEV4bm5UaStjQkpEVGlwWURvUENkeGlqaHFEOGZ2R0lJS3kvTmJ5YjdnNndBUm9WS0xJNlJ5MzJFamxjdENKZDVNejU5RDRBa2hDa1RRS2tuSjQxdTBFMUE4WUxvTVlGU1NGWldJOFUxUjlRSG5waFFhdUNQS0w2MnduK01uRlZjK1RucDNGcWVGU0Y0WkJuSWlpaXp2NTlsbTBhcytGb0dnOFZ4anY5bTNkLzNzempmaVREUWcyNHlteWc2clFjNDhSeGZZUUFURjBZV2EwTUF4dmlkMndMZTlpT1lqUjdISysyeEhvemNaRU5PUmFXMlV0VjRGZVgwc3JPaWF0Y0NpSGROd0plY1BYL3MvaTFLNlJqdCtxZmtvUnhtYURvZWdmTnhlUmZXVmEvQUNIOG52bVNEY1lUN1hKL2xMWXBkTEtNbWVJYkhvWkdacE0wZE1FT2FCam9IdVdFeWxSMjUzS0kxeDNRSXJEZEhnK0VNMHphTUNLbFgybDVZbEp6SGlpejh1bzJWQTJpS0ZsYSsrZjI1dHVidWxOVVpzaWY3R2JvZXdVMkpZUk9yWUExTHVXOE4xSjlaVk5QNnpKTDZpeVBONG14dHl2ZC80WjBWOTcya2lQdFE4NHErWHNSMk9LUFBlK0MxVzliU0RsdklmSEw1YW1lbFUvTkZjOUlEQ2Nyc0NQZDlrRFdVL1ZyYVJSTDQ0eEM3aDNIaUlWTllwMVhkejBDRnIwUW9LWFFidmhuckV1cHBXb3NHOUhFdjVTbDZkemRjNklrUXFKTGtmMjVDNGNZV0N0VDgzbnJOc1JoZDIwWXNBS2N1TTE2U0E3bVo0UTRyZ3lIeXRIRlNES3VUbnpUNG9ucGFqR0JpR1JER0QvZEd3bG5HNDY4WjBURUxCcEd2VERXbWlrOW4xTGtVaSsyOU5yTFVVUmJZNHNoNERZbGIvd1dveGhTRFNXdXQwZ0ljajZyb1Z3TTl2UjVEZGNnV0xqNjhxZE9uZWhoNmJaOGFpdFlkYUR0NGRWRG1oc2JNWEQyNkhGSnVIL1ZDSENyMHZEZHBrbDhmR1JVYzJ5ZC9QcHl5QkVnRDRpZnIwd0FLL09odFJpR1I0aGFQZVROa0p1ZXNUeU1CWFlROVJLMlIzWlB0WU9aemxOMUVFQ0FtYnRDMlIveUY3MkUvcFVSVXdKUkJITEpFcEZnaUFrNGI4YnFjbWhZRnpSTVI0R091VE1xUHg3eE82RHNYM3cyY0t0WUlBd1huSmFrSVZCWmdudHlhcTFjYUlwWTRQVzVRZEpIcG42WjRXdnRrTDhmdkxhVUltbDdPQXVEKzJERnVHTCtWalh0L0pBaHJTTVNzMXN2eG5PWkU2ZWdSVkdlQTcyTFNtOVZkL1NNNElWQlIzbUJyRDE0c0cwTTd6SjBaWjY4elpySE1qL2NwMkRNTllUT0FHL1c2NldJay9rQkdkaDE3S29SL1hBNlEwMDRPbFREcEhNNUs4OTB5ZGVscm5BbkU0U00yQ1IrT1lJdkZrL3U1WFQzTkc3UGw1aklQeVR2ZDYrZ0NJYk12WmhjSVdHZTJhQlZSMjdSR0RVQkRXQWR1YnUrRUpmcElqeEs2d2FCZjk1NHhadTAyWENTZk9oQWJSU1hVZXZMc3dpMjlHQVh0d0x5NFhHZURjYW9nVzFCd2dpMENhTHlibWJFMGdLSGZyRTNTVUhFQVI3MnpKYXFqTTdnWEg3VFdQZ3V5QWRHUWEzbm5sYThEOFJtaXEvcHZMOHZ4Nmw3eG84TjJQbUQyZkVOZDlkTGJCS0hHYkZtd2JFaGlPc1p6YS9PWi9OMFFTWklqOU8wL0luR2twQjJYMWlDYzk2bHNoYnJwRlY3UG9Kc1RjME54aEhvaUxzYXFwMXNSdUp4SUpxek1rVmlQWjBCaG16OEx3K1ZNaWhaZDBsd0t1QUFDUVFNQ2ZxeXlyNWFMVUk2WjRZak9McWNiaktwL1RwaDZ6K1c1S2RjWXhSdU5RR3UrTzR6N0Q2d2dyc3ppakpUS2t4a3N2Ymk0aktwOWpnTzh2SVdRNWdDVVpOaXo0UW92RUxZN0dyQkh5dW5hbFBhNklPWXFRaXpWMzV5M1IvNDVJRHlUZ2RueG1BYnd2OUNFZjBKbGZXVHdDandDUEEwSVM0a2JtTDgzbnJ6S0c5L0MrSTJOQkR2MjF0NGovUXc1VE01ZWhNcHA5bTFkYUNyWlMzS05wMVNObVk1Sjc2bk5ZdUVHREpEblZSOW4xY095TWtCVTNiM0RqdGtEbGtsTEVtY1lKbnpoczZzaGJWK1A3YlF3TXdVcllDdkVHdDBIbXFsY2syMDVEd2lTektCT1NwMDRwQkY2MFRXK2szOXcrRnJvbTk4U2FTMEppaHpwM2ZIMDYvTC9TSXJ3NWRMOGhvNTcxZVNkS1d4emRLRzJPemx0TXczTDFJR0RPbGFueW9pUnVmWEpwc1hncVBhRmZyWEZ1VmJFYVNlVVg3UUNNb2xOTUpTd082OFV3MHVhMkZyZEIvWFpWZ3g2UjRITEtIZTE1UnNzdUd5ekEzQjlhOUVleGJNdWFydzJiRE04Sk1ETUtjMnVmaFducys5dDlnYXdQOURHc3MrbjFCVnRYMGtKbWZneDgzWjgybGUrS2dwUXppU24zaU9YamtTSVZDdmlFTnpQZXpMWDZoZk5DbUtVaU1wUzltMG45ZExRanpDT2pOTWRZeXBDOGMreWRTVndTRThpYVBTNGpJeWRJL1ZBbGUwOTV0Vm5DTHZIVmwrN1JFanFxM1Jvb1dIKzFHRm5hazcrcDNIL0d6VlF0UEU1aFBoNk5Vb2I5WHNxdnA3LzZXNW9PMzBNY241UDVLUy9qbENiNTllQTlCSnRqcnZwaU01VWJQSVk4cEFxclE3YTNQSjY2WDRTUUVBYTYyREhYS2xBQXRSczIwRG9FejF0QlF3NVI3aVYyWjYvMlNwSU45SEQzSWZIaEhZK1hMNG1DOEdsQXByKyt4VXFkcTdRUFhBR2pJWmJKdFR4a0M5MmUrUHByTm8vbE9VSysrSUNSVS9IT3lOMnEyOUZ3OVMrUnlFM3FCa3lhR21pV2U0cjZpOHl3WktwaGdwQ1duU1AzL1h0TVR4SUtXRVFJRGNyS0xYeEUvTExmUWs5TElQTXJSZzYzNlVBcHdSK1RIZTlKSkhZZUg0QWpXQ252QWNtZHRmWnQ5TXJsNFFxRVd3TjcrZXdqeE9SZXlFcjllRjhscEtaaWQ5NmZvZ3kwaWZybHlxTmtscndCUFFzbk13RnpEbldEVHd5TWlFVHovR3lzN0NxZ3gyWldFUVhFNkdubFdHMUcrL09sVzlZeVdUbFE4QkI1eHdUdXRURHljaVlrWmxIcjdvL1FyVHpZMWg0YkY2UVNydGFqTHNDallTSHhhTDJ4T0hXY25lamJpSmRBc1orY0c0MlBNbjBybzFWZVh3NXNEYWoxOHpMS0ZYUW1ZM0tSVGxtK2xYbyt6cDRCUEJYN3pVYjZ6LzNTUDZVVlV0dExSVkR1dkNaN0MyQkZTc2V1YktuK0Nia2lUU0xUMFZray9IOVBiYXRya1JnS3pncjdjT3J4TVU2eDgxb2dsRGoyZS9wWjE4NkdlZEQzeUhiZkcxaUdtdWpqcFFvTEZXOURxWGs4eld6aFFObFBLZDBhdDN6OHh3eFBKTVNkU0VWTHl0WkdodURsbzZKdW56U21CQW5mWjNzTjN6REhjQmZiOFlyS2x4S2xNL3cveHhjRmhaa1FCaXNSSG9KRDZxN2Y4ZGtNOGJKcjAwME93MngxbTIvWUdKUDBtWTN2S3JlQitLblcveS8zTDc5WTA0UW9ybVh1NDdtSURsM1ZRUFVpNVI5NGFNZEQzK2wvSEFYQk1hT2V5QWlvNkpHTG95R1dGdDRSOEZHL0krblFwUHh2NnlWQXdzWThFWlhHYVV1S3EzTy9iUG5nSHh1TkQyNkpOTkVEN3R0UmQyNktSTVNpUkxEZlV4WHJ6bHY5YzhJMHdHV3RUTEhwbGRXMXMzWjdHdldTcGpzbUV0RjZFZGN1Y2ZLdEJZUTd4NHNlMWhPSm1vWUY0eEVyK3k4aEFSWmVIQnVNdTJmUTRaNTZTMHEzbHg4MzE3UGxDVlcxUUkzSXFDZVMzQUFpVTFDaEJ0WXZpbldoQy94S3BwZXp6eG5YRTlBWkd5eWhoZHpsVFBrcWZWbWw4RVBVUitPMVc0cEZmOUVWeDBjNmhxSEVGZ0FCN29JYldSTWpKWndxYllJRGY2TG8rVy84aEVpOUQzU1dJVmx2SXdCTWdMOEI3TlI3ZG8rY2o3V05HeWRzL0lEdjEvalZJUTVVYzAwcVJLaUpZaEpjYVU1UFd1VGhWbVJFWmhYa0I3cDU1cUNOUXNycTZ3QmNPemFlcHNkWVhFODRsL3NqZnJiOUp2dGU4QnVDaW1NOWR2LzJyOUp0eVkrRWI0Mm4yVk1ncTlKOTVCTkVZWVcxYnNtTjdLNDZjSkp3MUcwNXFXOHBhSVN2NTBkZW51Ky95NVdCZitDbjA2ZmtTaXhwdng3b2J3KzVZTjVVNzYydGNGV2x2Z1BsUGdXNVhTMUlsaWFNZU1OaVVZUkJ5YllURGxDOUNvZS85RjYyUkE3aVB2akxEQ0ZiNEVBUGhUbitVSW5HRnkybzhwbzkxUkFTK1hEa0U1QlkvSFhyWFBaRmgwcHVYMTd2NHRjNldOc090VEhSRmp1MllyZGE1SFo1c0ozNTh3cjlVL2M5eHdkMHhnSlFlS3hnSnNuOHlSRlkweUNja0lnREhxV2JWSWtVU2g5TWFlQWhlYmN1Zkc2YlRudGFNekFGOWlqMmhTeWFpU3pGQk1GMFRMT1ZXMGdYVjJIWmM0WElxemJOWVErRHVmSjRQWTR5d3RGRkJUOVV2NThVK0M3aDR5TGYxTTVFWCtPT1h5cjRhTEs5WUM5aTU4aCtCM3d3ekY2U2FRdGxPalBaK2s1WHVxV3hvcm1PK3hMRzlWbXNySHRIdlczV2lpS3RDeWJGQlNKUFJDWWlkM1BaNjJydENkeE5qNUZTem5WSG85djBENCtzWDhJbEd2cXE0T2xMV3ROdFFwZHJIL3pETGlua0ZOMHRTajBSM0I2b0FKMm0yNUNrTkFMY2xIK1Vuam9tRmgwWGdnY2thVkpwYWt6aVZhTGVJcmNLbEpsZlZITHFaeTYza3AybER4cjRRUnhMejdNMmtmYmR1eVZ2QmJLSFhLTUc0K1psT01hYXdzTnI1YWl4dnJmTEZITWV1b2xJQXpUNHQ2ZVFPckFYWWozZnFDR1ZXUTV5dEsyTmFzemJMbXZtYTFoRjVTOXJ3SGthV2pSdU5WenFic2d5MCs3b2IvMmZTQkpzU25BUHFmSmhsbUZaMzUxcjBjdEJQSWRUOGR2TUo0eS9xNnlJSkdzdlQ4aVpDcXMreDJvU0tXNm5zM1VtVzUyODVwOG13aHNENTFtZC9SSXc1QUFzTkJCL2VwQTl6MWhEU05wNjhtL3JhN0MxQ3ZsR1lNNVVXaWpkb2tUYzA2Y1ZsaGljZnhROXM1ak1JRUNXWDFCdnY0eDR4OG1oVWYrbG1SaC9rUTY3WVlmMWNOOGRPREMxbk5aSjBZM3JpQ1MrakJ2M3gveU9KUGwzVUNzb3FoVzgyeGpaK01UVU1sSHh4WmNKS1N2ejF4bmMzQ1pIMm9vYitJQkVaQ0FjRlh6bGJYQ1JtRHl2REhnbE5kM0dvbjBRamNzL3gwYlhCR0hBYVUrU2poNERHa1hPcVducisycE5rSlhrZG9UTDhaWkp0Uit5bC9ZdXBhWXhtQ3UvbGtmRVV1all6ZXBNN2FrU1FoQkVldnFRVDlYK3JVL2ltWkRxUHZ4Qy9XakZmZmVERnVVTkZuNU9IN0UybEl5RXBZVjRBelpYQmFLckhYMTVLU0h6dHBDVFpFeVdIUWtYd2VjQnFQamR1T0o1SEZaMzdsazRoOHVubVZBTERrSndyYk5vNnRtQ3hyQ2FmK2FvTVQybUthajZuQ0ZYQXFhZHo0Y1BkVkhqeTlHZENaRmppMEJYUTQ4YnoyWDZ5N3hUOEpEbU9YNVZWV2VFcUdEZ2tnMW5lNTZua09RK1JZd29KOTNsclhsODdUeVhUd3E0NWJIUHQrTWtTaDdlbVhIQmxkbmtOb3FaV0hhc0tydGpsSDRLNi9MYWduZVlHdEpsRU5BcXhxZG8yVUFMNE5kdXAxM1pmdytubnMwWmdSUFc4L3pXbW9wWVg3aG5xQXBLZ2I2ZVgzanFFaVZWZ1FUZGhJSnBRMUN3NmgvUm1MKzhwQlo0Z3drVHBWM0p3aVdNY3RjYlpaQlRkc3cydHBhdjFrUjNzQU83aDAwNDMvQ1hwL3RwVkRaZDZtT0ZJcjVmb3QxK0FndThzREFHUWljTzgwWTB6Mk1aaEZwN1RVQ3VhM1JQL0Jobk43aHhJaERGcDBhQzZ0SFJqQ0tEeEdqV3N4NnM0Rk83NHdGd09lYmF4cVdudmZ6RlRUaTk0Z2VpK3ZDZHA1bmh4N0drRzNMQ2hRVUVTM1h2TW9TZldFSTlaT1VGZEVKUzE5VmZGTzBXeE5wVmdPdjhvWWJpUVNTTTZ4N0gvUUpuQjhtalQxLzlzZWhmS3dRUGk3WnpYRFJyU01LaDRTYU1yVzc2WW9rTjhNeHkwTEVZbjVOQ0FpNktGa0VvYlBDYUhPNkVZdlY2RWVUZW15dEdTbHdEVmZicklxck51VTdNWng1ZjUwOFUwUUVlOG8vU1RsdkJjT0RpenlnQXZKK0FVQTBoY3JmZjh0TWYwU2Q4b0RNQXhqemNOZm80aVY4dU1jeFZaSUY2OEpTVXhQa1liZ3JYOVZpa084Vmcyb09rMFJpZlRPUGcvUEVmQ05OS2w2R2p3dW9zTkpwQ0tMOUhOdkRpcWtObmhGc04yK1RoZ1Y0dG1KMGhuOUpQdVJ6RWg0andPaDRzL2F5WjBiZjlaWmlocUNYVDBkd21ObzZvZDRnSjNuZXhvMWVOTWE3VUo5MHhZVFN1M2dvNHZPS04rallMNkJMMUpTbHF0RlJVUGF5bXRuRklYTEh5TU41QUxsVjByY01hTjVCc2crVjRFYTlsRUltZVcyZ3ZBT3MxT1NTYzNwcDhjeUlZbHE3MEY3WnBVTGtQbTBQQnZ2N25FUjhHai8zczdScXUzc3NFMDJRVmZITXlMZlVIZmZ3WmVhTWZqNmoxWmlYZWNtdGRFNFd2ZkFnbmhPSXVWN2h0U0Y5UkZiVlozTnhIQzk4Nkk3MWhrSlBqTW9BNE9CaXZoSU8rRGxhTHNJbWYxWUVTTnE0VVZENVd5R1pwTEcrMXhXMjgveGhjR3oyZTh0U21vOHFWTDFMbkdNRkx3V013em1hMVpNQmd3SFY4SkNKekcrVEJ6Qzg3TTNTRVl6dlBqWUsreDBkQnhBWEFBSFc2VDdva0Z5U0NRWnZ5TWlmcWxqWmVmTHVTQWRCVmFBTVV4UFBvaTlPUmoxSnVjK3l2MXVaeEpzZTFFTEtnaDJQOUV4UHlweUIvbWdCYUpGOGpXSjdSWXRSKzA0SnBqVzVmdmxYZXhEb0tXMUtmZ2JPYnlrT3NlWUwzT0kxVEF5NnFiSHdZZXUwdDk4dzVrSmUxQmw4RzlHMW0yZWpsWTgwcDl4b1JRL0dTV2lUWSsrMWFBbGNLZ21jRStkOVNlNFhQS3h0ZEV4Q1BLRCtML0s5ZVNaaEgyNTd3NURoWWFTVVg2cFJrVnYxK2VuTkQwcEJQOTd3Q2JrS0hLRUV0NU8rYy9abWRHa29OcWFhUXc2UjFnWXU1WGc1WG83Y1VlUGJlQ0tEMEhHL0loVm1HSU11Njl5UXo3Z1pyV0lyYTNiVVlCNnlGTFhtQmxJUmhTU1BYRmdaTVArUHpkczdpUFphZ3dRRmpYN3IvZy9YN25XM2lVTVRUc3Jlb3hjdzgzbmorWUJQdmFuYVQ4clF1ZUxtQVdNclI1WFJ0SlgxbFRiZzd1dm9wZnVDRWh4Q2VPSG1RNWlJTTMyTUp6cVNUZEVJaEdMU25uMVNVYlBtOWQ2MFRSbTFTM0NhR2FuTTVOSVo0YUVUd3JxaDdrSG9NS1VGNHJqOWpoWmRvbVppTXYyYUk2VzNPUThzbW5VNmFPbWcraElRbnNBZ0V1QytTQ1liWWVrYS9wQWd2Y0xzQlpsMjMrTWs2enlQMG01N1dQWTdLZHBqT0JTcDJ1S1NrQkhjZ2w5Q1Q5YWxQYTdaYkJzejc0UURleFJHS09TZE8xbk9jQVZrQVJOSEIxdVlCSFBCKzBvS1lHeDVGTFI3N01IeEdwNXVzYTFXWm9xSUtRZkNGaXhUZmUySGgyVlBlempzd2JWR3NLMnl5bVNCcEFTdXRxV1RyTkI0MWdYeURlU1lwYUVDNUtKU29aU1k2VmJhK0FnSUNBNXZlR2JzalpYOEhwZ2RhcmVqelF1akIwcHg3dVpsNmpWTklvVlFVOVdjM3FwdlFpS3NNY0dSV1ltS3d1eis4RDhxSkdML0JML0dWVlNTYUlqTlRCdmhvNVFSdDltc01rdS9yZXN0cjBoRUlxNUF2WDRmOWt6aFkyNEZTUnZXVW9wemZMZXpveWhTOGM1UnhFYytpTXh4K29jRGxoemZZekl2eksrakNIT25nOHkzQnEyOUJkWGpjMXJzL2QrTXh5dktsc2YvcGF4dVFMV295Q0RMZGtjM3NRRml1dlgwQ3pZR3VHdTlDd1Zlbyt4NkFDNkxBYzFLMTFqMzVGdytFVUVtdE5sNFpwd0ZqNlZMc2VkeVMyRytrd0IxTUpnZUhLYWoxa3lMUUFpcFFnSFNwenM5YnJkejZIQ1lHdWdTcXJtU3I1MGFURVJHQzVFSFlub3BDTlFKUnZkM2VnQStDYk5ZNVBRUnpTbDBTRDFROW1YT0pWWno2Uk9mNEJqRnBnMkhwdHJtMGdDQVdMZEQyVkJrRVpvQkdzenhZK0tWMU43MXVzMHVab05Obzg4RzlnK1JkaElGekl5aHRmZDBvZWNJam1RYTNGU0RoekFTamVEdWpRK3FLa0pQdEgvcGZXUXJsUGJsdDhQMGlRRExXNDNZSXhtRENOS0tQdmhYWWFFVkdtK1hhZ0gvNHVxWEpRTkZ0QWdQU0xKOSthRnoveVZtbzN6NVRpbDZVaWtMSlRiT29QVFdOb2kyTTllb1BRcGpFUmZ6bVNFNlVCa01KWGU2Sk5lNUIwSlI4aVRqU1Q0SEFlNDk1M0VpMHNVc1dNTFRDVXZXRDg2Mmp6TFNoRGZLUDRRMWFJYlY0MStrTTRZMWVYSXV2NnJsa0FYT3lDWEdnVkVyTVpnOCtqaDZQaWdoaTE5QWxqS09SdHlZN016MzBDZSsyUUhvdlVyWG5tMHBydnBJME5HNnFpOGE4Y0hsZEpadWpzNVdtWU5VWUozVGpKbkpoeVV6U3BrNnJ0VitqUWdWU0RtSTIxNGpkVVNSdWRpOHk0dTB2bjJkWFRmbzZxRjRFU1F5MjhCUmZkNW0veEFLNCtlQmFsbHVaSEw5c3V4b1c1NkViaWR1OEFSa21zRTU0REF2VmRXdXlEUkZpZWdQY0NzanBqZE1BQS9VQTVWU0RhYXlsSHkrbWhaTzN5MkNZMjBXT2dlNDNZbUswVTNISDBrZDJPZER6SzA0TThqNVVUV1JXZVZaWTJ4T0RFUlk1UFcvTytBbVhvTFJma1ZkZ3ZVQWhpeE9qRDFkeURmb2dqT1VxZm4xWnE2dFBHTTN6SEpBNSsxT0QrZlRveUMvSHhUaG1DRmFLcmtwVTIrTHRja1dhY1NuNm83N3RBYk0yaHZBczI1Qzk4QWMvZ3o1MExzbEhEejEvdzhqaFljQlc4U1l0OER1dW1DOHZXeVE5R0ZOeDVqR05QeW5KOGJKbGNRQkRyMzJvcEt6NnRqRndjY295NHJPdlE1ckhibkIyRjg3U2ViVzVNSUxuZFFPekRNVmpZMEpGaFlKckNaekxFR2Q0Zm12ZWRrQ3dCTG9UaUZyVlRlZ3VUUmxJL0orblNqaCtvUmlrZG9RVDhMcWlHeFVDcGZSMkdYYlpHeVd4dWRZUERPM3hyVmg5Zm03YklKSU9EY3NkS1gwRzdZVXg2UTBrS25QTE1xWlpYdnJRLzJrUHVFeWcxTjIyZjU5MVhMQkQ5QXRjSlNTdGs4Y1RpemM3TGZuYU9NUGlYY280Nk5VYkZwTnJMUEthMUh5MFlhZXlEM1BlaXRSM2pEMkFwT09hQ3cySUw3bEZNTituVjlha09rMFlZQmVTMW1TOHE0eEVFQzNSNzRQUktzaWU5U3dWV0VENWY1a2x4dnRYOHYwdmZWb0QyVHViRW1Qd0l2cWN5enMrdzY5K3Q1ZkRNYWgxemxEOUR1aDF1SjZBUkI3RlIxRTMybDBseFl2Mkd0Yk9lVDFrODVLcGxSR2FseFRRWXpncVBsaW5RNjFuaUo5L0tZUWZnenV4ckNPSVN0aXhFSkZRcjk1eC9EaWplYUNXZWVXNjlFbjdmQ2NWUEJ0TGNHYk1odmRKOUx5UGNsRVJ1S3VkMGlGbTdzMjdGZm5ROERkN21IcVdyb2xsU2NRRXdJVGpxL1FBTEVsNVJvU2s0MDdJM2tmbGQ0UnpRdnljOXhhd0RSTzhLRHJVc2ZCVWtZdjl6VGJsNld0eDhNSzNQa21Sbm9oMTJJRU1GS1o3MmY2Vk9hOWJIbkNEbk5NazRsUkRCUWFMY0N2VnorMkgzN0JnQ09yTitvVGwwN1NmakxGUlFDQTN3TzBaVjVoemxiZkZZMlJYc2NJTU1FcmRXdllSVWkxSVZVNzZNR0FabzVEN21RcUFwOEt6MXNubzJCRWZjVmIxYmhjcmVZMFZlVkFFNk9odlNhOWVGbnZ2YXlBdHgzMWg0VzQ0OFpDb1JKKzUvOFV0Tjh4WXNhWWI3YkIwdWxqVEx6akpwc0NOT0s5VnoveGJWbVd2N1lBRHhLRlFzdGdZRHU1aktaL1U1aW0wSUFPVU50UjFOQk13YUpwYmw0OE1WYXBaVXhXWlU1Sm51M0ZDVU83NjYvTE84cmVnQi9wdG5zV3c0Y3FjSmNvcFEzNFlHWHVyTkRwTG9NTEpKVk03Ri9PREh5cm9ySjBFcGNPTEdSY2xjNmRIUDNFUURSeEFjempja3hrRlJMQUF1dXNYbEsyZ25tckFDTDdwNkJTM09nTjJCWUZFbG0wS1BuckZrd3c4Y3lLeWoyZlRmdHJDeDdVQlNpdERQaDY1M3pmT0VHS1Vack4yanJmd1hNdHBwMGdLYzB2bk1wSGpaTTVIYzlTUis1VUhXcUFCZ3psU3poUHBMOUkzMEFTRUd0OWpVU1dEa2F3azk0WHZKZkhzSGRURHF3b0ZJT25Jdmx2RzcwM1lBUy9DK0NmeGtCNUFkZ2lac284UXIzSXBRdEJrY1V5aDVSRDRHbm9lRjhnZWw4RFZwSmZHL29kcDZDREVLVTlld3pYUG5XN21Hb0FOR1R0ck1PVkZXV0ROVGVaa1U1eTZwQ2krZjZseUhaZWlqNmd5REtjWGsrKzV3c1FVSDZpOXhOWk5EZVpyendOYkl6WkhEeUp2NFgzc2hYNWtpc09xK1BEc1JwUU1CYmxzTkJVRjY2Ylg3bW93U09xZFdOSm5wOVNYTFhHMWZxSC91U2orOWJiV1prMFdmTUVtdFpDZUlUOVFyTGp2TjIwcWVkT3BUR01KM05mUTNjczBUYVRtYW1pMFZZYWM0ejE0a2tBc1g2WTFvU2NNdEFxYVExd1p1bXI2QnRkWThaNklKOUhDRENFZDNGbTZhajNyY0NxczZDRitMb2hwMmFkS3FXUlcxdm9oQ1NoaElqLzhSTCt3UlJFUFlpemdzdmJxZXR4WEtXTVNKYVdVa3BWanlEc0FMVURIUWRTb3BvTStGaGFFTkRnRkZ1SlZZUGtpOGtvVEFoSlY4QmY0MzhLbHVFNDJLQ2xpTnNUQTR6aHNnTTBYQmZRaFJpMmlha01jZEsrS1hIS3Z0cWJvUEVKejFnWUZaejVIdFo0WlR0bEFTRE0wNE80WnBjSE9uWVh6NHcva1JqM0xHWWN4RWowT2hGeVcyYm5HYlZWM1ZKdXFraFJJMnBPM2pVeUxFTTdyQnVlRVYvMjhkWkM5RVhsY2d3TytZa1NQMVBhd1JNaUVmM1V4Tnd6Tll1K3E1WlV5SkxsNVlYSElQZ1FmZVNobk10NEFLcnhyeXZaT3Y5aEdNek42Zm43KzZ5WUtFVHFLS3g5UWhXbDUxY0xXOEVITXJxSGc5NWZjSEpkTHUzdWRaZERzZCtFZndoQWo3MXpxSVdpYVZ5VmZhdVlxZ2Y5TTRyOE9jUDZPbldKUjBHbE10SlF2ZlJxcUM3QlBzdzdibFZ2TlNuTlBzNFdYdXdwaXQwT0R0alpNTmc1dmZQTEhWS0RzRWdvMmVMQ05GNXA0eXpwbUxBektuWWIraEp3VHozZUJXcjk3ellBY2lCTFNjbU90K2k5ZGlpV1Uwa0tHdnJMRkNjcTNVVDI5OHl1cU85ek1tWVliVVI0WjFqWEVmWmlaRHhGUDR6Qk45d1Vlb0lvV1RaQTF6S0lXaWpGaVB1eEMvZC9MMGZPRFJsUUhOazkzOVpQcjlsVnQ5aTZUNnlPbkg4UHRTZjRmWHZpeGM5ZnpMNzJLVVBpYzltazh0b1Z0Z3RWNUNVTVg3M3g4anhSV2I1LzAwS2xSb0s5S29sQ1B4YjNDMXJzK2xoN01DS0VQZWZBT1ZlNkl3SEk5dFZLdUZVVjBhenptWFZGMWFxK1d0azY1U0NwaHlKWGRpYVMwNEwreFZrcWNGQ2VocGxFcFRlemRiTjRjbm1SNE8zYUNwVmJvYlY5V3pnZzlpWFFXMlRpd1FuaTlGd2taUE5aTTZqUS90L2owZXNpS2VxcXhnSnREWjVvSmVqeHI0YUxvTTF2M1RQTjZISXFMeStndlB1Wk5BR3hUL0w4cXVPRDBxdXlOa3NNZGlTWisrS0N4MzdrS1V5R2RiODExc1FwbzR6cTZOeVJSaklUVUJUTDRqeHlLR2JUbjFkYnZoMmF0RU5vRmMwQVVqMGlMWlo5U05NVHhOdHJ2Tkxsci9KQ2xSbHhIbTJXWTUrWlZEQXhMazlic1VtM1A0TysrY0pkdG5DWnRicVhZYitQTk5oN05xUkI3dzVFeTR5L240R3lPa0paZytEQlNPdjlYR3E5ak5tYWd3VjVaUzZVM2c2bnZsSUYyMjhGVDB5eUZucHJ0cFpoYkNGTG9PT2U1ZmR4VkIvVWRjTkRQdllFdjRVbnhkT3ZLSXYveDJNMklEZjY4YXZySmozcTJxUThFbW1uc25aVEFGaXdGSmh0N3YyMkt6Nk1mdkprR3l6eEJzRWlvc25naWNsdW9ldzB5UElvLytoSWIxbG9nenlzaFcwd2VsLzBGU0ZHQUNDb2lPMHVqL0hBSFd5ZUhqUS9xVnRNUlU3UjJJZjI0NlZCdU0wM3ZuR3ZtQTFGd2Z1NDBLd1Y3UnhjdGtQUjVFaVF5NnFRMFZ5YWwzK0tjS3NtL1JiRE9PczAyT0NIU3pjM0JOOElNTXVVQkhKZ05LTVRJbkJuWXhPOElVL011S0EzbHpmVUJsb3BaeDAzdnNnZGU3WEtEb1BKSGlSdlR4SFZGYjRkdFRscFN2dFpHQTNLcmRCblA0MTJaekNtM1o2Z3AyczhNaFFkaUU4amlMbE1sQU9LbGJ4SlNaZWJ5aEhzd2k1UDdwVlpBSEs0M2hwSzUvZjZ2b1FLUEZaa2U1M1hUQjhPU3hUTEpyVXBCVTR0cG1NcHFNWG83MkZVWkp2cEhLNzBTaTVnN2szT29IKzE4ck9iWVBuT0FGMmhhRFN0Titnb1pBcGxYbm40bEh6MGRTVjdLTE1xNlAwalV2RlIwWWlLVmRNV2tZK3NqSzdVaTJGWnprUG9RQld2TkFQWUNJZGJQRUl0OVN1Y3ozSU1EQkJIemJ2Tm1wWWQrY2Q1OExJODg4Zkg5R2FoaTNJUnhia05KYitUTzZ0WjZVQ1hvR1RsVmFhUHNFUWh0SThva0N4QWNVeXpFUlhEYXg4TDNnTEtiNURlNndubi91S2JvTUpHM1dkS2dXVXNpUzVsdHduSE9OODZkbUpCTU5EdzZRZGQ4RUV3dVhqS3FJZDU5VUs2MVoxdEgzckpSWTkyb2s5SEtmNEVlOHgrWncrMDNjY2FkMHFjeXhkaUVLQVpxYm9kR3RocDhRMmFNbFQ0THpYVjd1RWkzd2M4UkFPSldneExzRldMV1FaRG9HQkJmZ3QwQ3dZZ0U2R1pvR09YaDhFdVJFT3ZyeFJTYWNCZTBPTmNKQ2VHQjI2c1QxUjY4TmxNdTJFZEVoZzZ5U3ExME0veXNYcHA0dmJobEFBQy9kck84Sm5ROUFINjdvQ2FyOEdncTlOSm1vaDdRaW52Y2ZqS1JFK01kN0xSNVRPVFM1KzB0bVo2S2dGR0toYlJCeFp2OFVxemhvVlF2c1dWazkxR2ZIWGRUQXJRWEhIWEkxcmdCYUU0c0pRRU02MXh4Mm1qY3dEdlhTQnIvaVdYeTVnTkFJeGd0WUZjY0YwSEMycXZqMmk5T2hlVXNOeW1YZFpXSFZBMldKclFPQ04vVWFzWS9lUXQwOU9lWXYxT0YrU2ZLdmNLM3o2eDh2dEhZamduS28xYXhHMmNVS1VsWHg2aHdSMGpaenl6NWFlbmxpQW9sTFltMkgzQWtMWFZFNWU0dVdkKzRKb21QZllyRkVzamRyYlRFZm1LaStXeWJGVHorTkI0Y2hVQUV5K0xFa0pRT3lMenFHMFMydTNyMCs3Rk1kSXZDTmw1UTY3NWlDcWo0ZlVPNzZrUnVBdzNaV0J1Y1c0ZkhNRjIvaEtpM1FwZ3pST3BGOUFiU0oyOWVtd2RMNTJ1WWJIdnlyQjQ1Z2xEd0x0L1RYTEc3NEdiVlpwZVM2Nys3dDJTQnhydEIwUDBhc0RSOUdLODFyNlhsdWRETnNadEY1S0FZWnROUVpyTk9vbno4M2EzTUEyeVNDUWlCb1BVVlFRQUFNUDJLam12ZFhnRjliZEFqZTRXbmxXQ1pETzUyTTNtQ0t5eW1hSzJTdEpCWmpxdTlPYWJKTFVRRmF0VThHN1REZ2hOdndsYzJuZzVBSXdsSEEwUktXWHZtallwcHY4Zks4TVA5ZE95cWxHMWpPcmY3ZWRNTWYxaWdZdUtMaU9IZExaQjNxZHpIRFNoWWZwRDc3dzFYZFBoOWVGSUw5MkRjckJ2M0JrMDNWdnY3V0FiVXVPSzVENWM4ZEFHMWRZS1pGeEQwNjAra1V0NHgzR0dCMUlmMUtBS05xcy9Vc0JHY3FoMXYwdWdTTE01SGx3N1duUW44ZXd5OW1IZnNaZEkrOTRZSlgwZ2lwNjBrcUNEMU9CcnNBT2pJeGVwRzlZNGFjcFlLdW1POWlMY2YyL0xRenJGakVXa3pBM3g3VmZ3MkNnMGtiOXZzLzJQN0ZEUnZSV29uMTN1dDJ3cjViK1ZBaU1BcnJNWEFsdGxDWWgzalNtZUhtWHRoOXpwM2I2N0ZCc2d5aHV6YS9Ua21PbjlsN29ELzlrb3FHMTF4dVJjalVlWk5GNG5LZDQ2OVNPTTVHeFc0Y1hiOTk5dnNoV1MvdGsrcmdLM1RleElBQkZjd0ZuRzZGMktyZVRQeFgyakZEL2dRTmV6RjBFY1Z2eEtrcmJXTEJyVm9sUkFibkQzeXRkeE9ibUg0RWdJRGo1TXBMbVhSS2c0OXM3VjZnT2xLblB5UWhkRm5COFgrU3gxRzh2Ui9OdzI2ZnZQY0ZBVVVOOVZVYnBtSzh5RVpZdjNTQUNBUEdvSzMxUFMvcmRUV3ZUclROM0w4VVc5Sks3N1BSdVNCS1YrSVN6R0kzN1RJZ01tTnZGWnJlMGZaYkRIaWFiamNuTWI5Vk1uL20zOHRORkFxL3Z4R2N0Q0tyajFPRkxRd3o1MmZGMFFWL3UwUWQzdVlEWFp5NTZ6TEtIOEpDOHIrQXNQeE1QUUwxVmc1TjJRc3ZrbzFIWUk0OVFWQVZacDJhTzFhWmVkZG9jenlIK0F3RTZDNW54UlRYUGhmd1ZTbmVwZzg0OWx1K1dxMjBRdzRCb2F0dERTNWQ1NG5lenhrU3FtQllHeG5iYWF1NzdzSjZ4VlRRYThKdGFEQitrTmR1ZlVUcmkzVE95elBOWkdNUCtOTmM3MU8rbGlqK0g3eVM5MmhxTEQ4TWlRbEFqajVhM0hIT3FZZ2I3blh1N2tOdG43NmRMZENLTEZJcEpVdXdQdWJOaEU4blVIU3pjRHFhMmpwakd0V2t6eW81QmhCanFoWjc2b2FFT29IekRXbmZMbloxT2VKcDBPcytQVExiWkNoZnAyTU1hZW9RSjRIQVgvOGFlbGw5MDdpeHI1SW5xZ1dLSTVzOFEzek53TzNnNWh0VWlRejNHOGQ4ZTlPNU52YTVDekNNQXVwL1NweXI5QTRTMUNCQnZJb3dtM3o5cFkrSk4rYkdkKzZLSmFIWnJBdmt5bjByL3RlM3cwVEJtRXRyOVYzSTljcldvRWQzL1g5aUZYdXVHd3c3blNjdFFWaFNZRE1RYzMzbFp5ZlR3VjVuUWxzVWRNSmV1TjEraTR5aEFzWmN2VUtPUGxadDljNEsrN1NMSStBemRBWmZlWHBLZWl5dkEyWHFscmxJWVdnTGV3cWtwOHkzVi9pcVEwZTZMNk55N2hBSnIxZHdzSjBkUmdUNndsWVJ1WndHRjFlRURHeDhmcU5nSGVDMmc0eGlGUkwxek0wRkpQWHB0Vm9pV2Y3RU9uKzR5RlFCc2ZGdDZpNm16MnlCWU1Dd2RmeHg3cTl4aHNEL2RPRUJEWFhubS96ZUR2Y0s4azFqM1JrSlZpUlRwTUM4b0plKy90cmVtWkRKY25SckZTSzNsR0sreDRhbnZmY25aL0l0NXJNN1NncTlvenJNZ0hsREZkUGFJT2RQTU9Hc2xUd2l3TWZ5WnlaZ1Y4VXdwQ05RVUoxck5JbFBSaTJCb2ZETnh5MFJWYzl1S0ZmMlAzWVZLMzViVEdlQWlINjd6bVZXNVFEWm9ydlBXenF4bUJOZmJiTDQzc3ZpZEhib1JFa01qNUhuVWRobzVFKzdYVVM2MHlZdkxORHE5RGZqTjYyVGhTMmp4ZWZ5YWx1UnpJWFlTRHpPaHdWeXpuZUhtd0J3L0QxR1E4VUpNa1QvSWhTY2l1U202SVJ1SlU5MWdCY2lNZkVFU1hiZ0tmWk9hY1ZBUTg4SytYRjRGYW04RGluS2JhdGE2cFZNMGtmK3lCd1h1a0JQWG1rS1gyK0I5Q3kwbit0dG1QR3ZDcWE4SHhsWjNoS3k0N2ZIUHBwNjhHa3pjdURVWi9EdUUvZFdNQ2VCQVBENnZPa0g3Umk4Qy9wWVN4bnlCN1dHOFpHamZaUTJvOVMxY0VLdXNzWGlGK0VmOG1leFdmcXJ0U3JIZGdLNmlyTE9nT25PaVhUcEpQaWNrRU5US2Fla2E0V2ZIdzREVlNDOVh3Vjd4eW1KaXI5N004a3UvWUF3MUtQNTFoM2tpZmZEbWQzRTB3cUNacXNGTk91d1M0emFJS3RtZkdocjVKdzV2OVdkcUxqWnF3bzEyWkFROWZrZGdhU3pWSWtlTVRGeXNuRWpqQUEyZ3lkZSt4dkVuOVg3UkRGUDVPclFGaGNVQWdNSlBIZW5iOUk1Qytab3IwdXFSdGNiNHBUSEhsYWdVUStsbXIwNDBoWVNiL3NMOHdVS2tTOUEzeUlWNUQ3ajUzRDNDYWNyT0RiekYvZmF6Y1U0R3EzL0d4SDRIMldPZ29tZ1ZwTnhmZ1RDa1Fpc0lnb0pMYXRKUjloS1FURUxlaUFzK1JjaHROaEFTMjJoRWdFdXpQWnlWNTBtVzhGVk05ZWlKRGt1L093YklweWc1RVI2SU5WYUh6emdpN2VnZ2RabFFnSHBtdDA5WVA4OGZEZ01GVmphOHNucElLck1ZbDQ1M3g2R3NFQUZJMCswYlFCSjdUengvVkZZTE9KSDJtTUVQVmZmY0Q2clA0QW5GSzBPQ2pOcEx0UDBiSElUb1Vndjd4aU5iRXQ3R0x1UG1ScjVYRXo3ZWFVWFR2VlBIZVh0Sk0vOTd4OERnNVlzSDVSOWNCa2VVeWsyY0R2dzlOSmlQN0pXazVIcXBmUGRFV1Q5eVEwUlRaRzdaZG9adDNhRitCOFpNSnVNb3hvOHdHNkdrVDVjRFNTdlluUmpqdzVSZFFYaWYzaTVLbDF0NVc5dktWRzRHczdzaTl4aFhZbTJyZ3pmZ2hDT1RieExYelFERHdXZktIK3F6TUhZTWpRejM1ZXVCTjYyWnU1SXIrTVdGeWZ4QUQrSTB0VGFxendCakdEakYyd0tmbHhGWWRyRkxFR3FKY0lsM1pqVHRnSjRwMktoRmFFWkV6N1BCQUJhM0kyQXluR0xPQ0ZPRDRjbGdrWm43UytDVlpCaUYrODE0MTcyT3JNWVVSRHN5SVl2Y1Y3YnYwdnpFSEExcFNtdnVmY2xjQTFBU1NZcjlSOUViSFE3MEs1WFRZaHk1bWJWVmQwMHIrem1yeFByeGx3WjlITXZOS1NQU2IwREVZYldLd3AreDRQT25OdFl3dUdMQm9HcGE5S2xHTWxYVjJVaSs2QXNydjdIUWlaRnlJakIyb08zcW1sclhWbHcrQ0oyRmdiL0J4b0NmakdEbkZvUFJwUEo5QVlFdnl2SGFBTTNUb1Y5RGZnNHZ1ZEE0cnB4VGJBZm50THJsU2dUbXVVYUt6QzVVNWg5YTRacnptK21ndC9jMXUyUDJEOTYvb0tWQ0xZZ256QTRhanFFZjBMOEZRUUtsamNuaFY3WDJqWnNiVUlBVzhSM2VBRktKMDZqekY2QjFicmFRZWRZRUd2Ylo2OWk4aVJIY0xBWFNzRzI0ZWhRcm91V1ZpRTlRamU4dStrN0I3N1c0U0JJSGpmbytnQ0ViQWFJdjlTelNmU2hTNVN1VmNYRHpLZmlRV1ViT1JmTjhLZ2E4Mlo0RlVkckwxVUxNM251aEQyVXptcjdxTkJPNThEbWJuTDRQU2hFT0d6Y0NVTE9CSXg0Q255ZFIraThtcVBDUjMxUkVRWVdITldWRjA0KzFUNC9sOVd4N1p0T0EvUXZxeGhMaUE4YmptdzFKUlFuWFV6Q1pVSFRHSE0yakdLY0JlUFVIb0Q1UjNMWTJBNHNPSk02YTZNdndPM0lWOHRXbVlkSGI3RzVJb004NVRrQmdOVWRBU3U2S0VLVjRYa3JVR2ptZGVTaGRmMWF0aHhmQ1BlY1lIK1prbE5jZ1JSdkdyZG84MndWUUJSa25menNwSUEyeGE5NXJOQW91VUxibGoxeFlvYTM2Q1RIMEl5NmV4aFI1Q0xXNlkvOVdpMzdkTGt2ZitLUnllUTVDS0ZqZmx1Y1ZxL0lMNjVrb0J5N1g3RzQzakNta3phUHBra2ozNTRxU1NXV1RteCt2dDVuY1BwbEF0ZmFnb1VwRm1hK1JPU1l6a0VSdUNJdWwvSnpHZE1OcGpDT2pLWlFFUno2d2JhV2tFeHUvSVZUdTF4WXlTMS9MQ29zdUZhcmlkUWprMXZIUmJCd2V1aWtSU295RnNqQlEzOWhkMEhIeDkrSkpXckx0STI5NTVRa1BOdzU2T0RINHBuYm1NQ0J5Uis0cHc5cDVGOFlnZytGRllYUlYzVjhlb3ZURWwrWGdzSUhnbDZpQ1JrVjg4NTFzdWUxRmU0WVpLYmU0eHc3Q3lZZ0NzYjRSNzZSTitOK09wYkM5TWs5NHVRS0JSUXN5Z2JnUm9VcllLYVlhNnh5WDJ4VDZMODZURDliZS8xaFRReFdobEhqbFhOUVAzamYvY3lyb3hkbzQ1MU5DMnF0VVA3N2pOMkZPVzVQdisybG0xcDdPMTk3Tkd5eGVBd2VhVmNZL0FLSlRyWS9uVnVZY2hzS3dpZEdGNkxCVEtJcDUwSWwvd2lXTmNTSzhCREdxR3JlUTcwckV0cjRDamJmcXVEaDc3YjRRbXdoajhWQ0VKTU8vMUVEcnpTU1ZqWmgvZnBwTWtIUXJOOTc5ekp5OUY3SVdWVEdKNk9SU01rTUlTSzRKcDk2L0lVRE0xVnVrNGhZSFd2Smc5bUxuKzhndm52aGt2aFVrZGtPNkpTNVdYY0c3RWtvU3lyRjIrVDZlb3ZqMXNIM3NtUEorK3VPejlRMmRuVFlDTStDdjVLZHAvbUlmN2dvVnBlc0V4NmNETFlIelhseUdHZmNYbk4wdjBjMCtmaWE4aXl0ZGhVQjkxVkx4TlI4cjkweU90MngvQmdtWXVHVmx4MUtFWEd1MGFEaVh5bklUYk5wT0xQOVBTKzkwWGp0NktLd1B3MnpBRFZ1Y1NoR2daem84VCtpekNsNE5hWjMzU2VpM0Rxei9yOS85YTBuMlluRmJCSDNZYVluSFF0dTgyM3psYzZqOFhzSUxEK0ErdlNwWURhWXFSRGpnejNlTzM3djZzYitLQWY3ME9yZmtYalZhWk51YjEzYWZvM2N0SjZmckYxMVdtTDAyaHVpUno4SlN0RzAwNldLVGE3WmZ0Rm41UzJtQ2N0eDNHem0wUk1TUGpIY0FGVTZsZzk3UzNwaGtvRUxXQjZTeGxHalphdW5ybGZJaTFFOWl1WGd5b1dwLzM1d3prUlZWS0JBTlVHM2VsOWlWR1dVSU9vYVhYcGJlUG1nZG1FbEwzRVlkTjRTbkh5SUdZS3RzWEVCa3QxaTFuUDlzUktMMlcza3NvUVFDSllZTVpoUTZ3TGhUYmNxWlFGeDRBUkVLK3dDQ1RWNC9QSU9RQTBKL1pLU2xrVHY1S0JNOE1qRTkxRTB3ZnpyTytYMEw2cnBmUVhrWkw5ajBvRE91Nkg5UkpLQ2VNSkhLK3FIdWhkb0NPZ0JDdTFFQVV2TUkwOWxEOFhiVEcvVXdxR3Mwb3BtLzFEc0RkOHVYQjVOWkVZS1VhejNPb0ZsUzg2M2NnUlFHV2h5RE5KNFd6ZS8xYlIyV0VScnNaalpMc1JUR3BUWXV4NmRzMnpmQXpuazVxL1MyQ0dZMThYcFdESThYUDJ6OHkxSFNteVAvVU1VWjdXNVJpSFQxbkR3WDVPYnFKTXVyZzVLRVpiMHYyaFR2YU81YzRvTlN5QWN5MkdRaHVOMG1xQ3NnYVZVK3hyR0hxQjRJVGh6dkNMMEY5MWlZRngyQ0Q3Tk9ZNGFOYXlUSklDZ1FXUHJHS2xPTGxPdGVVemJhVndFYzRsM0xqdDhlbnhveTBodW5tV1VOcGZwdFlFek5oTHdmWUNxYkpKUzJlMGtRUlZmODl3a1Vscm85NS9ZYS90NkI5Y3NOcEdld1lTWUttM2ttZkhvZExaMGtNVlRCMlZaY2NIU1pKbnA1OWx2c2lldlpKZ2M0YlJrVjVDWE9sU1B1QmFCaUVjelhoREd0THZ1bkJXL2I5a0xGWWdkWVl4cnVPYTI1Ym1IWTNWYTltZVcvMnY2QWJZcWFKQXdXM2ZyRlBsbWkzUnBud3o5bzEzNTBFUmhBODZhbmFUMkFkOHdmMCtTaW9kWjRNdWNyQk1iY09ZdjZRKysxMDBDN0NKZUNSaFNCRm1QNFlQcHJ6YVlTeVlhVzMvSFFIdlZlc1lOL01ib3RvTXBRSFQzRlNhbi93dVNPT2N2clNySkg4a2tadldhclljTnZZSG1HUEV1c20rdlFtMkpmSkJrc3JROUJQMVFvY0JBZTlRcFZITFJ3U0ZDbU9HbkFpNzZiTlRaRlBzTzVzNHpEMkIzZC9IeFJGcURObnhOZG5pT2c4aUhsc0sxNVlCaWx6cmU1bDVQUld2WnA4S3ZLZXFNNHZDVnR6Z0lGTlR2ejZsblBlT3loWWhXTVVzWFNNK1k2TVNaUWxxOG83b3BIOE1wWm9lYzhzT0VEVVdHV3hheFRaL0p6ZmY1TjJLS05adXhOZlQyMHVNdzFpQnVoQ2d0enVHZ3Bjc3pqYWswdFU2RitmdVQyZVJTNG1MUG00ZlZOVzltS1FMUStNSzVQSE1UQXhRMGpBQWoybWpnUjNOSXFoMFVZNEFEb2JNbDYwOTVqSU5LRHVLRjY4WmFPQ1VRTjVqWXVuY2R2SWwyWktTQmM4ODc1OVVJOElhWXNWUk5GSDJRemg5WVNjbWt1ZkFybGhRRVcxekNIeW1rWEFaQjk0WUlMK1owelNpL2dJbEpwOGdNcXRHaXZ4bUdUSCtIRHRxOVgyNVQ5OHBzbHR4NGZtNko5M3FyWlhJcnJhTDJoRXZiTTloSWkyWGErVlhacWhtMVVJVkdDdHMrOXpsRXplQmI4WXhqaENDVlJZZUdCaGZaYjJjMHBhb2d2aE5IMGIzRVB6OWcvMnFGaXZTRXdZdDY3aGNRdTBkRkdSYmlUSnljRUZYaml4Y3dZTHYzblEyeEE2SzlFdkkyRURobUkyZGxRajN0Zm1DSE5QdlQzY2p0R2RZVWtxNVVCYVBSZ29EbWh3K1p5VWRPRjF5WmhteHA4bWJnWi9WYkRCc21tS2ErMFdxZTF5NVMxNTFMekVJNHBrL1kzNkx0RWk5WE5ZWVdMT2tmaVBxTFkrRmg5VmVaaE9CdHFTOXo2WTdKOGc4RG5aT2piK3N1eWVsR2RJc3ZzQytuMXB6Qis2bmd3MG92blRXWi9XaXBMM05nb214b0EvdWdmRnFTRS81QnBVZ0QzenhlU3ZCUjB1T2NSWExBSHAzNkZHTTVSUUVsSkFFbXlLUmt3b2pnbVVXKzlUenJIMzZWWWhSb3AvcFBsaXQxWG5uR1VERGFaKzhxdTUvNDdtUS9jSnJVSFpyenh1T1JCUmJiODV6Wmx5QVVWZDdjVGdTNUJITXY0aWRCbVdCWm8xZFdTaW9kcm02VXE2RnJKa3FGTkRQeU5Zd1lkeDMyUmErT21jcFhuLzhrVEUzdHB1VjJEd2JhRmxwbGUxZmtCQy8yZFJhT1NSaUJZUFFMQ3ovVWZjaXpoUTlXUm5JS0s1czRjV3IvZ01ld2h1aFByZ2ZGYkdKY3NpUU1BNC82NTR4UzdXYWo0aHh0UzB6cUlJYk5VZjBUbWdZdWVSUVBhSGdxRk5RWlh5SzkvdHV6MWJWUm1WMS94cUxtNFFVYkh3eEtoSVR3TlduVVNJQXVvYlBaSmkxVlNMa1c0T25kSXJUWHFaSzBXMUtLaDArckZyZjVFVW00K1RvdnFuMmYwMmJuVVp0ZEoyVkxnU1R5eFdseUJHTjN0NE9SbW43bmVjMTF5VDI5bzZTWXp2c01MUVZGN0dOQXMvYzRWMElGV3ZEMkFIOVlSS1Z0dDlLME5qcGZLWXRlYXJ0NjhiVk9VZFpvV0JXMFNHdFN6Z2U5QjgyZCtEamoycHlqcUZwSDJxQTR2QnlEdGEvcGNPaW95R09uczR2Q1VPM2dITVpQZFJZZUo0a2k2ZHVuU0xSMWhLU2Y0SzBOYlo5SXZFU05wa3hEM0pGbEhXZEoxT1hFNFJWbEt1OGZvcTVENll3Um8zWXdiNitrckM5amtmV3dyUjM1ZXo3U1EvczlHQTlHOW5McGNaaFROSFh6T2RHY0UwNlJkM1hMcS9wRStSbHBMQmZzZkxrODZuK3UzMVlhTm9mNmZqVm83cGdGb0xxbGVXRHFxei9jaUlyMmp2RVNIcUw4WGUwU0FaMG81WkxtSjhzSjRtQjloMURwVlpmaUJnTy9YcG5KMVljeHc4NEIwcU9obUY4a05kVlRKMjBMOXk0aG4yTXZFd0VoSTliOVhOeVdXZG1jQmp0ZXhDWld3Z2t0bENRcnlYcklEUWlmaUFQN042dlplYlhRY0JZcmw0a1pDTEZVZjVzK0FjQkRMUng1eG84VG9scmgzKzBwaUhxV2svazdLbmNFZnU1Kyt6Unp5WWt5WVIxTHZMRHc1S2ZpMXQyWS9EZkY4RlBEdHdXci9CT1ArOWZ3d0owV3pkSk5acUdTenN5RTZKZFNvSEZNOXpIcWJQbERETHljZTh2UmlnU0RYd1pJbjBJekU0azkxVkFUYS9pRVNQcnp2SXlTcVAzMmhHMjQ5M3dTY2hsaWl2SWhIZTh0VFVUVndJazdoTkxBRTc1QTlBNGRJYnFCcGI4QnVMNzdGcFhrUkFJRXdWR3VVdXVEcDNHVjJNQ3Bob05aWC9QaXRib0ovVHhDVngwUWVpUXA4bHVKRzgvSU4wTlA0U0RBakw3dk1MMUt6YXpzVENxV2FvUEtycFRLeHErVzlSTDBVaDBsWWFaZ0FkWHhESFNqUDlMVkVIVTgvYTB2UktxdGEyTDYxcklUQ0VCL0FwVWwzd2JxbU1hRk9xdE9kRThrYnM0UkhDS3JVNmxHQnpCd1MvS2gxbzBFRm16L1JHQktsRjR1UlZ0RW03akxXQVRZYlQ0SUlRSkxwZkVqbmIrOWRGcUNuMVc1dXpEYSt1NFRaZmsvN3VBZk5GMXJwYTBWV2ZPcVRuamxIMEtDVW5UdVhuLzlpT1FQUGZvczVweC9qL1dpdzdrSC9BK0VtVFRIemxocnRTZkxncEZOK243ZklNSStMVFB3dkNhOXphbWlhYXZNWkZiU1JFM1E4dDZhSktyb2JQZmFnVnRUcTFyczBPdkhYTjAzN1NBS0Zsc1NWSTErRVllUnR0WXNJU1hYTVVIUUNzVDYyRzcxMlRNUEMxZ21SZjhxUUFhK0dlSncwRnptM0RrUnRVVEhZTm9DRy8wWU1TMmFhMzlOVjJtS1NyTC9JVHRmbXArY3pWNG1jNDZHN0IzSmlvanBlYWI4L3dMbUpkSVNiMUFZT0kyRG1XSHBPSnJ2Z01zYnJDeUxWeTEzWm9OaHlTbWtJaWZUUTk5NlBEY1B4SUdRT2ZWOXF3QVcwOStadExxSmZ1ZWZaQW85MG9aYngrMlkwTFZ2Wmdwc1pJb2lXZUs2OW9FdnlWMTg3NDVOdXBWcjFtNkh6bWgzdGtURzNTT0EzMGtGTVJNYTljc2xoZVNuK3YzSDBtS1o3OXFkSElDblNxempHelRjY05kYm1hL3FsdU1ZcFBZMml2VWRMYTREa1hlOElnRzd6M1dvcklzVmhpS25sUGFPeHhpc0N3anhua2U0V0ZTcVQycnQ2Vy9sdEp2QzNTcElnT1VETUpyWkhoUWRReVg0SGJ0VzhWTnVTdENrZmVjQkRjRkd1WFVCb1AwdVpDZzd2UEhXZFZiNGhSVW4zQnpKckFlV2xod0FqSnFIZGhVWlM4UlJpM2xuY2w2NUZlSjQ1NytBZ2JYSC9VZTJyL3VscDlQbXdMNDM3YjdVUU5VU25LTSt5UStMd29NMnp4dTlMKzVnMlEzakNmdzR4VmNVQ01pRm91QmdHQUMxNUR6U1NmQWtSUlR1ZW1oRWgvRGM1RlUwa3RoWTl1aHI5a0N2cWhOUTJFUDFpemxVZUhONzluRmlnckdwbjF3eHIvSldoa2pONnRHS2kyaG91d1FyTnVwWSt2cW9NZnJ2b0JtU2FVSWlIZHBna0ZjN3ZEQWJGdGhyRUlqUW5FVEN0OFhZc1dQYityNVdzaGJYbFgxZUoxV2pQeXJJcXI5bm95bmpHUUFTYTJuQTZyRkdtMnJLRWxwRWhBakN2Y2Job0cxQk55NmlzY0JUdC9QZnE3dGNjNVBFQlQ0bXBLaEpmMTJuZXZBRmUzUEx0eWhyYUc2NnN5NDZzdzNkVXJlVG9qalhFc2laeXUwbEF3aXFsREtjTDRQbXhwNnV6Ym1UWTU0Z2ZoeCtBSkU2bjdhMmFEU3Zoa0JrTjUybFF0OWxlN3ZqcHE3MHptN3JteUJ6SzA4SlRJa0ZoSEZXOW1LM0JKRWcwQ0hvOVd5Rk4wVTloY3hRdGMwLy9Pc05HMmFDc3Y4ZTU3S2hkV0JOenprVUtSV0t5dWhvRjRXQ3ZKTlp6NDlrVWZOZDFZcDNxVFZBTU1ucjdXd1F0MzdDL0ZUUjN5YjMrbEJiRHZaWUE2ZzhRMDEyV2xma2JEY0M2NGxaTmdmQU50QnFab1k4VU80U2JLcnFadGg0bVNjTys4azM5cmxSVnc2Nm1FN0tMdWhHZUZZM3ZXWjJvWnBnNG5mSy9nTE16ZVJ2cFloM1Z5c29OcitYRVdURCtNdm8ycWVhN3V5Tk5YVDJiR2ZhdmwxbGRNdnllcXFMRWxldW5lZy9rbkYySTRnelpmZlZJTHA1VzAzc3BNZlBTZ3Z5MHBzbHZ3R3MvSU5lUCtBYkhKeEM1VTkvdXF5alkxbVR3bTFocjRJVEkxaUttcDNrbjQrREZMQ3hOdWYyMHNMbGdGMFgzekE1TVpUQXhDT1NacklxZVNpOHVGR1Y2VFE3WTJvOTVndnBXMy9hdzhOSHl1Q29qSUFicDJ1U2lBbEZPMXRTdk9mNmcxejVpRVJROE1odzRRb1R2Y3R5dEE5RUprVHRuUXJ5MWQwb0U0ejJUZWpBWVZ2MWtNRUgycVRZUmc3WHcwY3lHM25FNytSYjd4czBCVlhkckJibTdqb29Za2c5V29HSE1JU0VSRkFNNmhpOURiYlZMVXJ5UlRmUWdaZHlyMWxIOFI5NUlSNjNobFRKWkc4OTBzMEtiRHo0TFNIY1R6RGN5dmxzMG02M1V2YXU1MFdQT2t6MDdDNzk4MEgvSU1mVjQxMCs4Qk5HUmhHcitWVlJ1eUNBWnExVmE1bEp1ZURBYkQxNUlUa01ZNzVTcllyVktOaUZCL0pqNkNGSzFLOXZtZnk1MGV3eHAyTE4rVUNNQ2VKaUdvdWpNYjBPcmhnZFRRa1BZNU1ScmwxK3dsWm9lSkdaY09BTVhQd041ZjBjR3psRWhZWjBNMkdUY1VQcjFBYUsrcGttWkJjTTFwOHNTZTh1ZGtkSUsyS0xwQ1c3dzNlWTFaVXgrM3dQcTRMK0dOODFJbkVIcXQ3cnEzNWRlYUNRUHZDN3VpeU5aRWlzK3pVamVkQ010d0FzNVN4LzZQSjdod2RBU1NId0l4SDZseFh0MTEzVWFBWXBKNkVvMDVXaUI0R0grRFlEZUd5SzUzZmpYbTlGV3RFbjVjK0c1anV0TVdaV05MUnl1aUwvSTRCazhCZm1KY0ltWkdOK0YxajUvVW1YcmxyeWlZZzR2eUllaDREQktGUmVTS2Q3dVhubVJsTTc5eVRJYUxvNHJlSC9ldkNaTEVPaHYrcElybkJjaXVwU0JTU25pMlhOY2N5SnNrN1pXSHJvNXJNWk5HN2hIRUVEcEo3SFB3SXZJdmxycllaMkdUb1FzaUxWYjBwNFlab2duU2xCelp4MGhQTk5sUno3cEk3L2Y3TnlLTWlsTkRZSDAvMURNL0tKb1B2MWdjTWZONVFTMXEyN3Y3aUFSMTVXM0JCVWRCQXFma0lZZGxZUEl6ZXhBRUQrb3hqcUozZ2ZhUkhoUmR2eGszRys4bUg4OHlnRzdoZFNuVkFFbEhQajBmS2NnR3lIVnZLU3laYVFxckRKVndYTkZ3SWEwZDNxWlp3c0xyZGJYL3dOZDVoSjhaZHF5clo5RWZlUXl4ZWFzNjNNUm5kMm15YnBRUnlvZ1pJais2R2pZdU1ubFJnVjRQRG1CZEhsQjVaTjlMTFhlQVJZb1k3bkorMnpRY21xNXUwUm14cm0wdFJPNDV1SmdPQzh1dHZ2SUpFVXZxMjYxZWk4ZmNvUDEvaGR5UDM5eDNoM1VNWVJHTUtsYlI0MzFPZDNnZGpsUmtPOEtVWG1aREhnNVBhTC9ZVmRCNVFXOHArQXl0RU1oSW8zTzZ1Q0dRY0o5RHVyRkMwVGVMazZTaFAwTG5COG5xbkhVMkVqWUx2eW93ekhZYXMxUXVpQUZSa2ptT0ZtTEEvUWF6UnNudks2MW5qNnVvRzg4bVljeU0xNnhINjFsNEllR1d4S0NrUHVJRFF4UUl6NFZlVVJKbmhmbzBEamJqTHRTM2EvZ3F5T05QYlJrblZvaS9SZm5hSThjbU10QWZra05wQTd4QjV3VnJDUVBSNTljbGVCdUFmSEpwVnpFYzI0SkRUR3IySHphd1FnQkRjcjBqdmxwakZxcktXeGEvOVN3KzlNTndzMFN6N3Y4U1ZHOWlPem1QVjJnNldLTENIUi9UYTlRL3VqdmF4ZmZMOVpENDh2bE1DT2c4YmorK2xLbCswY2FZZDhlcFlldlZPMTB1MXFhWCtMREhSRDZJRXQxTm1vNEsxR21hTEM1NUpKdWxMZTUvM0NmZnJIZTVrVHNRd0ZiWldyYmV4cWtIRXJYeVM2NmJwZ3Z2UWdnRHZTSnl6RDdaamdLSUdsNXovVFoxYkJ5NkRqclUxQXM5L0Evem1Yc0xxdkpDZjVOY2o3TnMyMkowMk01T1BSTEs3VzAwNUtBMGFZbE1nYVkwRkVDMENTNTFFVVpnWWNaU2F5cjBBbHdHVjN0eWpockpIZkRXcks3N0hoMU1GOVd0czJtTnp3MEEzMUZTdGpHQXZpNXdQSEsraVpCNlIwY09PeTlWYlVTNFVFS21UNm5iY2J0K2hFczdPbmpKaTJmQ3dVZTZtblZBNm56Q2c5dkwyQXlHeWdrRUxIY25NQWtleG5kTFF4dkx6V2JSYWpkODY3OEdHK0lMblZOcU5uZkV3b3VCbGxCU3ZYOW9uNVdRSWVUSlpIVXd4UmtPQkkxVCtoODdVZWErRUZTWjkwL0Q5N0lTWDhyRUxrSGlaa2NrcUQvVVkyNExEVHVmWitiOUhGcXZOWUJhdnp5djhWRWJqZEg0RVhGRk1XMk52UFRFd0wyRXBOQVRtZGlvSjhMZ2ZENEtGbUFHeUJnanNpSEhRbW1jQlk5dkZTUDdHeGl6MzFDUlV1RiszSkRvaEc4bWxzKzVQVWR0OXhQRHN0MVZvYWVYTEdacGs1VVZzU3FHcmZMTnpiYjlUSXF5d1JVQUlodmxRd3VzOVRpVlkxUjBOanJFQXk4dnJCTEVLZHk2OFh2aWZudnVhVlptOGs2aHYvY3dkK1lmY2wrQ0VEL0xENUYxUjRITitoS3pYTzZPSm5UUEdFSjU0SmljeDVLRnl6dzNoL3hVYm1qZWpqVERncVN5c3FBRXJwMFhZWUd6bS9IbXJ0OXJRZlphRjUyRSsyTWI2VGJjVngzL0xXOGtsdmhsRWxhRnRJaVZkVjF0Zjh1TngrQUI4cVFVRERlTnpoeE1HRnc4ckpHVGQ5K1Q4WXRtQytqSm50TkdLK0JFNzFBNmJPVGdudUtyWjUydEt6SkZTZDVtcnNsMk5zc0RpWkdjTmFnTXlrRUhHLzY3ZEhQYUgvYjJoNkhhZzl1MW1Mc1J3MzdiUDk1dEFtZUEvTDFkdUhRU21tK3hLMWtNUUhUb2w0MHZmaDk4UmVSUFBaeEZQTmdSMStLdStIc0dMWlZPYnpKT1AzbkQ0Mjh1WkRsWGlJUDRBYk5yS0NQSE1EQ3JVOFhqKzF2L2xaQU9oeWJyMkZ3L1FqYVcrdUc1Q25Gb2Y0blJwYzM5cTNydFhTWHgyYUtvNFd5Tm1HcC9MT3VjdCt4VEIrVlY3ZjlwbXVJc3ozNDU1Q1ptOVFKbVhiYnFxRFBtWHZEazdINVFoeEQwUUIwR05uZDFDMHgzTFYyVk5pQ3YzUkRzYjZWUUdsd3FnLzZiR3A3K3gwd1E5dEh5MjFlVEZYU2VvQ0FzeVNQRmdYUEx3SjJpQnZScTZJNXNCL3M0S0RiQnJLVTh3UzN0Z3UvY3Q3VURXWThtdmpzd0F5YTFjYitVMElzMHFoMEp5NURDSSt0OFRFY0Y2UXI0Vmg1VEZNdElnVkRlOWk4Ylo4eE9GTnRHczVSZ05XWTc5amVaeUlDamN4TUM2Z0lwdWJtdExZSjA4elZLdG5CVVBFcXNhaXltL21PSi9NTk1iT1pFT2k2Zk1UTHdlMGVIK0Jta3FPMXMxdzRONmtocHpnM3lIRzBHck1NQi83TzI4Wnc0T1pJc1p3TnU4QmVCeEVCeVJObnRyR3FYc1ZZTkNDZGp4ZUhteDAyZzZJVUhYVTg4SmxlTDIwZWgyT0haTjlqbTdLTDI0ZFV1UjZIL1k3K2RPWEV0dlY0WGMvZm1ZZlNXcjBEdXV6aHppYVdHbjdHRUFRTzFZd2dQSEU0dWIxaUVab1JqODZEVDM3c1htWVd2OFc3bmhiZFpLV2xhZjQxaE1JeGRrTzl5Yk1haE9DQ3A5cU8rOHlOeldnMDkySWVBaGZ4L1Q3VVNndkhQdktUb25DTkF1K1RNZnRMZ3pCeDZzbDJiNmR3czQ0akpIRmkzSlE5aUZPMVV0MFltTWY3bVZxTzFOOHBOc0poTXZQazBvR0t1aHBTS01NbG1BSllCR2x5bmhzVDFnVnBvK1RDZzFHekFjNlBkZ2hGV3NmUnBob28vMUVHZWFqWmQvVWVYenViQmVSWW9rSnExS1l1b0F5NHpicHNsMUlXVkJTSUdVaUY1SUtpVG1veE1CQUQyc1lqU2hxcVdHK2hGODJFdTdLZ1ZJM05UeExjeHpWMmVzVVh5Sm9kWVlPK1ZRd0tyTTlFak0wVFhOc0EwOFMyekwxYm5hK3VIRlZVWmFzWW1zWVVvR2Ntc1l6cmRrQW5VQ296WWllaXdNeklQck1FOXpTSmZnZUgrR3JxVi9BNWpjM0ZjenI3RmhaNjQyc3ZSbHIwTWJic2J6OHM0cFF3cXRrMzliUmV1NHMyeDl2a1BMZkVJTEhYVlJzeTlqME9hTTM2RlA1WlVxbm5RcmJmVG4vZXA5c0N3VENYckZPU3JrTlVnek5zSldLUmJpZDdGc2RvYjdQWm1ncEZZdGx1ZGNhR3A2alZFd0FlMjBhTlBKa3U1bFpVL3Nralc4R1hJWE1hRFh1M21reVNwdHVubWNNUWEySHJTeHNaR0hZbXR4RXZqM2UvWWVnc0owRXlzNHYrcmw2ajlka0hTUXJ6SDZMVkY2NTZTZkVzQUxFN0ROeWNWUjhRN1pSNnRjbkhtc3VNeWs2d0FvQnlpUjVsOW43T21nWHBqTmphNUJpc2RMZW9DeWRuRzIzQzF5MEw3Wm5JY2lNRjJBaTNzbWQ3c1BpOXlBTWxmTlNzNllXRUhOandNK240ejE5c0VYbHA2Z1cvWVd2cE5OcWYwOWRDelE4NGZBb3ZuNWxrdUhyQjJlSGxlWlp4MU9FTERoVnN0Q1FVSC80WG9BR1hEYlJqak1PM3dYYUFxbHJvWWQwMDVXTDVxbHNKRUdQR3hDeUZPMGYyTUtQNERZcnhRZDZrdldnTDc1YUR6eXJPaElwaGJUT3NHTGZTZW1TN0h2blBHdW5xOUpEQUE0N29uNW5QQy82OUJ1cmpBbWswNjFxNE9yV29zRTlacFhPcnFwWUtPbVh2UHVKZEJUK1p1c05UZWx5TDQ0UlNEMlFySlJGeWZuNzgybEpNR245SHJnZi9ITVVsbzlkR0UzY1ZVL3dWdStxTGdZNTlEM0J5VS9ZU05JMnBHRFV5eUZ3QWFsUmJLWWRhZ3hsTWdHem1zV1ZBelc1K05IRXliVFE0S3RoUGNvd0dUUkppMmZsUE04MVA5b0c2WWVDSThxcGdpSEx6WXo3RnJ1eWNnV1pKaVpHemtHMU8zN0VnMlI2UDRQd3paRExDeUprNlhIWjRUdE5VRy9NYUh3cGIxUmRIS2dpcGg3MnNwbzFzaTFybXZWd0l1WTRqM1RSOW41RVR6a0dIR2xTcGZQTDFEVzFzWjJ2VEc4bklVbWlxME5tQmJxaUk2UDRoRHpDR3NtY2wycE1aTlRnQjFXWmszdWE3WjhyUzJEN0xaeHJnS3BFbVhNOG9hS0x5OGdJbUIyYlRDa1dBVnA3Rzdsa1kwVXo3Tkx0YU5IeWx6YUV0VXA0Z2dXdnQ2Sjl6RCtBU0E5eEZnYzJFdkZhdkl3MWxxc0lKYWUzNTA0RzFUV1BvMmkwamVPWEI5djd3cjNSalZkSnJuNTRsa05iYUltdnJsU0N3TURGSjNMNzV0ekRqWW1Cay84STdJRW1nVGgvTVZNYndRbW0zbEZJblVHNW9PVWxtSjRyc2tLSUxkd3k5ZDlVazdibjVUZENRT0IwZkg1Q0tzbzRjT1RBWUZQMEFMUzhsN2s5Y2JjZXp6TlhZU0QxNXpiVHB6aEFvMURrbnlZN0lRamNpU284amNyTU90TTFhUjF0NSttODhRVm9PZTFwd0xtUFJyanZiQ1Q3M0NDRjJScExoSnNZa1FNeUFadW9xcmhjYm43ckdPbkxEcFRWcDdqZFVjSUR1Mkx0WVZROWFocWFjUzRpNm9oRU9WVDhhM1lxYXBFOE5rZlZWMjlyMkxWOEdDcjA3dXh2QTFjYUJqY1M0eEZqazJYZEROT0J0MmNJNVRRKzZpMmgvTkZDVmdCUVRQempQeUtBNkw3NlNVMkRiem9pa3lwOWttWUdmN1UzRGJFNFk4UiswMWRhNXp4aVBPVHkzNVQ2VTlTclRsVlJ5UWhkbU1paitUcW9RWHdicTFqVEpNTEtWMjVIaXMxdDkyd1p3bDJ2dlUxQmgvYUtUT29VdlZ2eDVaK0pkVHFYNmRodWdLNWdsMWxvbG1haTNlbjZCY08wUVMwdlZ1c1ZaQXViNVU4dnltUFd5MWh5azNja3h5Q3FhSW9XSVJOK3c4ZDk0V2tLR3NmS2RSL0xnQi8wemxkSmN1VmE0MDEzVFlGNDZKS1RvUEtna3BpQmNha3hXcDQ1YVpDNUY0RXorbTZ0dVVxT0Zza2tDVUY3YW53VkNCMWxSYlc0UTd4azEzOFJ5bE12Z1NXYkFLeUdvTm1keUpoZ3BDTWlpSkhEZmU1T1RKMDJRM1BFajMrTGhrbm1rbGh3VVpIN2swZWpZejFuaDA2dTJPb1c5SHBSTFBzOXVBcjljckhYY3dQVHJ1bi9XMnJsVk1jMDdySEt6WXk1bUkyZzlFcG94SmJxWmRmSytVOHZqRHZwR2xVMnhFQ2RrRHk1cVkyMjhMenRScmhQdVNzZDkrTUY2eTdDY3F1RjhLV0VidlV0VDk3dHBPVUM1elBSRG5lRk1pMXF1dDZRbGlPMHE1My9YdUZsbmRMVGFybG85YzlWS0hEeDBNRlFldy9GZDdQaWNQVGsrWjNHUUVhUGR4VjcxY2s2enFRTDhGQU9ZS1JaRk44dFBFY3BMSjBObExWWmRkaEJobUJrRUdwcmw3TVM2bWtNYmFCbkkrbnNtRFhjUGNpalFFOHNobjFSeTJHTDNwTE5BaWdUL2lDa3crdWRKL2kvdDE2SmRnZ1BjSERFbVB1TlZZUVcvZTBVd1hkaEUzSXFET3ZyMktUMzdOeFMzRUtHdjBuekZUbGdlcmoxNzVGSkZuNkUyUUJ0NEhGTEJjdVZ3Nk1mY3FNOFhTWlp0RTQvOHlyWCtGaXFiQ053U1ljaHJXVVNtK3AxOEJsOHVDNHZzaVBkL0w2VzE3MHphRUZMMC9iUm9qVE8vdEtweVlISXd6UW5qSnQ0YWFxTjh0RGswSVVSWXJ4VzcxeCtaRHVMYzZRUFl2VVZwTDRna2U5RFNzeDZOMUVrTWoxMWxsRmlTeWhJR0NKMnROQWtMOFJwNlBwNnpML003bG5UeEtvVk12TFZ4dm9JZ2t0NWY1dit1NnJUT3N0SEtMNHZUdFpYblZTdnhic1dSSkttSHVNelpuM3gzN1VlMXJSMjZhdzRPcVd1M0xDSFNUZ3RhWWI2YzRnbXBNakR5TUVpdlE3Z3B0Y3FTelJhc0x4aDhGVGFFeEo1alBIMmNtREFFRW92VTNBc0g4VjdaS2p2WkplNjdWWTdJNkxmZ1I1NS9GRmgvRzVtVVVZM3V1dUhQVjBZYmU1SU9PTHR3Rit2VU9jNjNJS0FyMzJ6L25iMWQzdWIyMWJTNWVZd3J2Ym5QeldqRElKenVWbStsVG1yVklsTzVONHhpMnJaMDI4MW1ydTlrV3l2ZC9EWXR4TWl4cEdlZ1FCTVhyek0zN2lNVjBsOFRWVWswQ3oraElSMmVMTlV2TlRwTWhzM2RxdVBuMWZPempLbGRhNEpyTko5elpQdHdrSWkvbk8vNmlEY0VFMktkUmsxUzlnc3BUVFFLZjI1eGR5ZVlOQnNFZDdxa2RlUlNYN0pKVXNZcUNIeEdqcThhM1VnM0hvUk9XT2M4QkxtVGU0M1lNbUZoSm1sOFg1bUdkVmxrK0o1Q2Y4UWpKTGJWK0twSmRPUUE4cFZFbURhVVJEWlhObVRYZTFhdXhvUXhoQ0UvdWo4Tkl0UlVQT2RCRi9RS3hvam9UVzM4WEZBVXNFNEZITE9LQmIzbExFQTBETThtVUcrT3ZzbG5QOGtORUp3NCtqb1FhSThRZGhsTGJ3dzEyeHMxNk14dkhqTVNiYVY4eUtzRmVNUnRnMGhMczFkWER0U0dxUUt1cUtLSlZSM3NjSmVWZ1d6NmFQbDY4N1lsbmkrMUZOMWFLME14YWhoSWw3akpYd3N6dWhyRkRHbmNoR0hzYUQyR3JqbTlqai9RMmtkeVhpQWs3ZG9xYk1uanowcWxhZEtuckdyRTJrM1NGRVYxWkwrWXY3ZnpiTlFIK0dKOUxZL1dwMHNVUkY3YU4xZEZiMjRqME9vcloyblYrQUFrT002TlNnRjBIVVBqclZrY1h0Qzc3aDREQ01BTkZQTDBROWtudzIwNlNONlowV0oveVZZa2dGWm40cHJYR1dNUWxUQk9HLzFLS0p2eFBhdDJpaWM2VlZKNDVVZFVLUXNmSnFoa0hKUmRySmVmK2plUDAvNW50UElTQ1F1TVFYcnVrSFBZcUJpTnB6L016RTlUZ28vRzJ3d0tKTXpUZmI5TE9WTmVIWE10VmhWbXlqcUpZUGQzQ1JvMCtKcGp1SmdqdXNYWVRKRU9DYlZNTnhKRUF5UGMyeHBYSks3UitUdU1mNzY5OXk5eGdkajdnM3h1MUNqMVhHdTlveGd5Q3ZNYUdwZW14SmtFS21oSDdxQ0NLay9iYmRLM3E2TUFjNmVpOGNWakpqRi9RaGJwMUM3Vks4b1VpVnpiV3dQR09MSkJ3ckpYeEt5bSs0aXorZUNMUWMyTTIydVVvVCsxQS9ybkpaN3pkdWloUUZOVldFa29udVlCUUR3cjhLQk9lVTllZ2ExSnBRMVpQTnkyY1JmdjdleS8xVStDUmVOZW1sdHE3bVBIbWJpUnM2cVNNMkZzUVdGcUtoQnVWbGN6QithNE56aVNrNVRybEpqc0V6RzN4T2FSV2VSNnY1ZWZodm0rbmVZeTJ1SnRJdXRmeUt3OUVDWDBCeWJFRk12NXFyS0xPMjUwbE9jTkl2S0I4Qjh2WGZXK0FtWHZFT3dOR29BbGM5QkxKdk5VZWw4NTRubE5VM0ttbStIM0RZMXJRcnB3cTlzZnJZMEk5NklpZFBGdW1aWkZZbnd5OG43NFFjdXpWSHJORk5ROUF4Q3h0a0J5YWdsY1VBZ1hHTHI5WEwxSHh5MWlmV01aSDcrS2UrcU1tREJhcE9IN2JTTG5SRm1uV2ptNFZCc1k2S0JKOWx6cS8zb3BMVm1xdkt1VlFIeDVvL2xCQjJ6SWpnWjRDaW44M0VuZ2tESjJTMm4vTUJhbWg5ejFWcjQyU1VJRU82ZnlaQ2doSGhqSkx3NTZsZllVcE1KcmVMOHI5b2dKUU5RYno2SFdHaUp5RTNOcFZhWWF3RFNKeVdwb0p3UXVUVWpneDdJN0JpQ3lmMzhPNkhDOFV1dStKQ0xwWnhlUGk4U3REa1JqSXBMSlc5b2drU25iUERsYjcycGJUV2s0RFdobnpWUW1VaDFJU1B3VUc5ekplS3d2WTF5eFRIdWMxK1ZSdEhtTjU1T29lLzFhOVBMMzdwanJ4UlYyQUJTeW5SRXBlSU8zdjcyRkZnS2xvS0I4L2t5cjBmU2lUZDVBeUZrMkZTYXUzUGxMdmY4T0lRTnBJaVZKbk4yVkl2TzZieEpLMEFabTBqNkxLOStHaXJ2cVU3UUtZWEMzMnBYUGwrekVidzRBZ21aZ2RrVkhCUWI3OTA0K2FXekRiY3duSEVsYUNEY2JieTNtdVI3MEh0bmFuREFTSnpJVFg3UzFSZ3p2bVcvQmVPaHArb24xKzlWSlQ2NFA1UGloRVRCWExCZ2lYbkdIOTFWeTJmd1JXZ1d1NG91RTg3NWh2VFVYa1RSV0pqKzRUMVRLanI2SXdLZzc1dmUxR0FPbHBnOWxQeEZySHFhQ0E3ZVZWTTdwVlNrNCtzWDYxemdDd0VwUTA1VzRQVUo3OWgrVGdwWG54WmdQMkNjV0hRRGFwREVTTU9qK2JiN0xRZ29RaEQ3NUpMYUVxbi9aUG9kRGFFM1k3RS9xcEszQ0dqTHJkeHh4c04zSUtZY0hNcHFvd0NuK2Nsd0xNMVUxdU9udHA5ZVNhWXFzK0xHVHhxN1RHRWoxL1htdjBRVmtLWW9raElneXAzeFM2amRPYlkyNFZOM3BsZTdoSzljTDZtUE5iNFhsRm1NT2dvYkJWSnJaUWVUNGNSZCtqcjdKbjRpUkFFVnlBbit4NXRVRUpIOXUzK0srUlhDZlBKbXQwZW0vd1ZQRGQ4YXZDU0M2Ym50U0J0ckRoQU9BU2NYMEJGeURDR0NTMkNuWWp0c0dQQURIQkdqR25MYkFqRTJBQ3djUVgwckFxRE5GczdacXZxa2w1SGV1Qm1xc0pZQTA2REhZQ2VWR2g0Kyt0T3duWTZoQ0EwdDRYWlBEd2dIa09kL2hxWTNNUjBUTFJWL0dkWE9UZlc1bndUb1BLMGtQU2pzd2F6SXc4a0o2Y2V3VC9JZDRjSUNpM3pHQm9FUk54ZENEblZaNXRxUnpYWUZia0dkbis5ZGhkWVU0Q2Q0YU9vK0tiZGtUVm9jbGExUmQ3N3Qzbnl5VTFYRnVUMFZnRnBXMlREbFY5TW9sZEFzaWxaSDB0UEZjam1UUHFzQ0U2NGRpakovVW9rZG9sUkNqZ2ZmNGlVR2dsUTVUN05rbTFlTE83K2FyVWVtTFBqVWJCdEVIb05Cd2dkWk1vMHFkdS9KQUJ6ekhGUVgyamVtRnFBTTlXa2ExQTRhWHJuUlU4b00rOHhacWF0RjZMb2lFQ0VVQTdVWTVNODJyd25UZksvemRza1lJSDRsUmJTc2FqQzJZVmN2ekRaYk1pMkJUbTFncCtweW5FVzdZcDRxa1ZaTFd0NmNKM0EyaXkvNjFJUWRibXdsQlNQRStpcGRrS0dzYlpKNytBWkN2R3lkM1liSU50U1FSNzRBd3AxOWhzOHdURkRFNlJNNXV1TFpJSlh1YVBrT1dYMUd0VmpOWityZlBRdDhJeG9rYXRFNU5pelVtTTIyRlU3RndwYzFTOWZqK292RU5RR3pUMnljdG9PWk5sQWJleXpVZ3VteWNBdHFnc2FXRXY1enpvcGl6ekpEUXord3VDbEdFaC80QUpCOUJhalkzNVJ0WmlUN1ZGb0JKeEd2ZDlYVndJY0FXRVJ1UzMrK1NtQklWWWZhNDFPamRtV05qSitQUDhhQ1gzbVNrYnpMeXVkYzVzZEZDbEtHRmQ3Y3A5MC9XWWNaVUpuTkYzcy80cWxhTUFhOHNsK2FxS3lNMndHa3M4MTlQTURkZDRwaWMraElrZUlEMFVrOGVJY0YxcisvbFBna2VIc3BwUkxQaEh5VzNaOVE3SzlXTzJVSGxLSmpTeGt6Ylh4NzR6K3ZLK2djRDB3ajVzOVpPaHlQcGlpa2dCWEpuMUJ0ZFJCSW12ZmRTcGpsL0V5MFFLeWZHT3RpRjFXYy9lS21MK29CQVA3bDZ5RFhFQlhtdU5rNmhvdi9FZnorZEkydUF5QVZLcnJLSU1GZDV4OHRZcUpyTWdFeDBIcDRYd2dERG8rYWNUb00yRlFFUU1PandmU2gwS082b0kwUDhwR0pocm9wTWVMaFdwS3piRklMQjAyVEdQWkRtTGNCeGRmQjBjZ043OU9qaDR1My9TMkQ3V3R4YktOS3g5dmZLaVlwMFE2N2QzOXE1NXp4azVSUzcyODJ2ZE9jMm1QS1U0MnFuVFhyb0UxNk9vOFdaWVhEdU1DR3NXbVlHa0d3QzROaE9kU0oxUVVINkVOZjVjWkR5ZWRTOGpRUHRHMjBQTXA1OGdmQjlud3N2YTJBcTQvVkFvZlY1czlhOHJ2aGtZKzF5S2puUkJiWWY5T2NIbktrSlAxc3V1NVJvWUVNT3FOVDAwblR5RG9hSzczWloxMlFWc0JMVERvWStwWWoxSTNHQkpMeWdOQUE4KzlRZHBMdWxKeGxnQmM2SHB1TTZZV3RWdHljd3VOb0c1WERqcnU5c0RLVnRCcXh2WTlvbEJNN0hFZk10SHg0Wm1tUXRZSjBOOWUwZC9JU1ZEdlB0bCsvQWlHSEtweWNCY3MveU9SU20zTVQ3TjVBYzA2ZkN3SkV0bjkwV1RKUERNcFp5UTBwWER1ZkZZcHRyM1BBaDlKVDRyYWwxeWNVL2ZxMEJZQVJMdUNySStuTWc0bHVJdWJtU1BnYjY3N1lYOVhUNmtobTVnOC9WSHQrMEk2RVk1enBZUVhqUGdaaUFWR3ZQYzRvbEtYMzVMMDU1TlQrUjRsbHZjL0Y2WkFWVGZDbDhVSGhYTWNxbk9FcFFZVEVlTzNwMXFvWkhBYTB0eEUyWE43eTJkRk83dXU2WnNrSnNhc1JBb3YrRFFHVWh5eVFGbENEbmpYMFdqZm1xZTk1YmJvV256eFJVeDk5N2FISkEvUTQ1WUZEYTczckIvRmRhc1JpVlVJWGJzUjJEQ2FqRkJVc2Q4ZkRZcmZmRU9VTXQ5ZDd1SVRGSzNuRGVOL1RyZ3F3dVhxTUJUWlpObUZ3U0RwWkxvMVY5TnQrVUg2cWVZekx1YndOUCtabmJBZTFTZzdIOVRiL1ZBdU5ua09hR3l2NVZrMncwZDJGNjVmQlQ5dTRmclAzeWh4SmYyU1QxSUMzWjBMV3VqbU9QUmN0aTNEdDdBL21BcE5ZUk9uWjJCemFvZGxKaVZGUjhLL2VUZFlNMjFtcTQ0VXBmZTdwRFpOelk0WTVmc3QzbktpTUpiQXZES0I0SW1UczFjY1FaTXhISmRTSEJRQldEek81aWNzbG9ORk9BQlR2VHdaUm5RSzNMb2RUWmc0TTdpRWE1QWh6b1FZMnNpemM4dTFhVExxbU4vMmxqVW5KblFGY3BKMU8rVEFHNm5IaU1Xc1NaTlNZekNvNlhWV1Bpd2Q5UTZneW1xQmg4U3hGUjU2QXNVa1FncWU2eE5KZFVDT0c4ellTN0hHL1h3STNOK3ZHMEx3RGZJRW5vUHN6SkR2UjVLZnlFSTJ5SlV3azByeEliclJmaEZsTjREYm9tZFFBOTkzS3I1N1JNNTI5dXd1NWF4Zk9CeTR2cFo5QjlKMzRORVY1bGU2RXN6OGtkeHZ1RzZDc0ErVWdGdFlzNCtQUkF1eitJRFNQaEI1NGFqUTVCaitiMU92b0hvS3VBcmI4eUh5ZEtTOXozd0o5Ylp2aVN3SDhTVmNrSW5lbXoxN25WYWQ3N2dDVlJyOEJsbVBCUk5ycUQraW5LdE9WZGtGTVc2TldGak9KeVFuUjI0VUFITW5LUFEzQnhxZ3M5V0dIRnlaYmkwZWt5d2Z6M3pxVG9jQ1ZCdmJtcldBVkw1NnRCcVR5VThZYlRpdCtZZVptVTNrR0ZYK2o5bUx5Y0VNQWJ4ZThxL2txU0k5YTYwWmN0R2VBcnRxZHliaWFyZjVMeFY5NUNldjkvci9hSmlOMyt3dnJZSEJjbkc4dXRrZ3YwOEtFVmF6OVR3ekRsMWh4b3Fvc0RMZkVMbi83eEFOUGtJU0VGaEpmQ3ZtQkhJdUUwaE93eHBzNG03M3A3d2ZUK09LSXVveWpNMHlZVG9aaDMvdnczeVFxRzY0WGRQaDhjTWZyK2dlNFhBc0l4STlLaXo1UG93OTUyWVIrUDhtYjhSVjJ4eSswdDlkenl0WnhsUDloYVRFK2MwYVcxdmFjeWRWMGEwWGNYTnRJVkU2dVlvb2lQRnFBdFp2bnhVaEtYU2tJZXArRitNL2NsOHo3OVZsTHZnYkFDSzNxT0NrSi9jNVpsV1NTMHdkRVhIcGFUVzVpOHZidmJyN2hrMDlKVm9Td0NWRVplVDVVSTdSNnZmZmszSFpTVmNqdUtvUkd5UVdPNGNDMGRtdWNSRHp6MmF4cll5QnNONkxUc3A0V3ArVjY0K280VFpSbkhkNTQrR2Z4bks1TUdLdEU5Yzd2bkd4cVpoOEJ2YmdCeUxKVGFZdUR3ZVJ4RjNMc2NRNGxMRmJDV2xRV0lMcjNGOUtjaksxdisySXUrNUV3NU93ZTNzZERnMEgwZ2swcnpyNDNLT2RTK212L2NOdFNEcGtwcHV2aE5zM3dFaUlRQ05qdUhUcjNObEJIT0tpL3NLMXZZM1pwajk4WURjNGcyVU5BS3czQnFKN0lZc0E3QzVDUUFpVi9BekVSMGFVcFRjUkhzVWpSeGtGMEMyNFZyckxtMDVhQTFPMTFVTk54V1NmS0RNU2xIY1d6QjlYZkpMR01qRjNxRU1jSjFHNWZUSXRMREtSZGk1L2Fvd1BIVHczcXBLU3RiWWRZY1RRLzVWSndlWldEOFpWeVp0ai9RZ0Rra1lOckhhVHIxQW1tSHFRRThNWGNQYW1ndTRaTlo5M1FEb2tBbW03RG8yN1g2RXhJb3Y2ajVJQzZIQ2NMY0oxUWdXY1pHSDJibVRIZS92M2lNS21Cc3Uyc2xUb0dUTGU3SnNiY283Zkl0Qys1ek95a3QyTGJIOVY5QWhBNlFFTEttUmk2L3I5bGRnRU5QbEc5aHZQMzVWNmhLdDBVMTMyV1pKendjbEdsWnIrMko1cHpDaDZ4aWNBTFVFUjdxU3VOUGhCSXZ3cXVsVGdHaVJTVWFSMHpqSVFtWC9qcVFaSEpNQUx3SFh5cE5VeXVWNkgxdTZPNnV3MW1pQkM1cUh6VHZsZnBiaHBlTmJ3TGRtcmNTN09CdTJmL2Z1WVY1KzRNOTFLZ1M4M3FZdFlNd1gwY01FUG1TTlRVRGl4UHdIblZUUU5CQmxVeXF3VVhQaVFWTEhscXZpdzR4RnlBaTFVTzg2cjQwWEdaaDlIQkdXUFFwSjdmOTBleHY5TzhoaU92K05xRXFaeUlUZmRDVGkrK1RZa0RVYkcyakRseTl4TEMxaVVXU2lGUEdwQzM0S01OL0ZYWHNyRkF2amtoTWh2d29nUFYvT01vUUhUaDRIeTI0cmlNSTE4YkNveDFuUW1ab0wwRUNqOWpMUkVLTy9QeG84cnZPWVF6Y3pKdXhSQlJwRnNRZVk0U09Sa3h1WGxQTHN5TFZpb3FwcG4rTUVMV1ZqUFBaTG4wMEtRSHRSSVlhei80cmo4MVBjWGUyMCtIRnZ0K0FZei9UY2ZzbHA2U2NqQm5CMVdwTTRjcVJwNGM2Z3lvS2tvcFpqdU8xRFRzQkVxdW1uQXZSRDlQYVZNS2JqUWdTSEdFMGRqQlF1Tk5IQy9yR0o2MlBqeE9tMzdqRkNYL2hjRHdJNEtHUDJwWW13bVFkK3N4L2xBY1pvQmZXQVBXVjRCajNLNEM3dlRqOUxtdFhQV0dOczl6YktoY2ZEQWlyVXRPWkxHQm9NUWdKMU1UNGlKMy9ET3g2d0VTaERwQVlrdkR4bGszRFBXVjFWLzFwYVc1ZGpvR084N3NWQk11aHhUYms2NTdSTXRuckZtcW5PQTFzd2Z3aDFocDlQQUpWTkFaK3RrWHVFc3UvenVFS3E2WlltamNQL0tDT3M2UTRpdXhseFpzUVZZbXJzTVdNcjBVWHNLaWVxakVLQ2FKQW0vdFVxVXRQTVpISDhUTkU4MTVRZGQ5eVZIdkJISm5BeW5GbW9BR0dwbjdqRGFUNzM2bzAyRXpkTlFXb01HMmdENVlwK09pY2wwb05taC9BbVQ4Zmw2YkY2OXJjd0NXRm00V0ZXZU5xbVJNWklVY3FtaHhlTWVWNS9MRUliVzlQR1dtb09tTkZYU2hYTzdKZEpJd2V4eC8rb1gvaFROVjI0bTFyQ3R2SGx6d1JySG9HeHNFN21wcE5ZTk8wV09XQW15NzVkL2FPaUZ6M05abUc0N3ZnYlNQTURLYjNqcktCQzUydEdjdnNwU0lLZ01nVmhlTmV0RUFGWG5HYm9KS0xRcmRzQTFXY2FwT2N1ckxRZmFVTnl6NWNVUUR3V1FFRHNZVUlnYWsxSkl0YjNYeXp5NHcvTld1cGtPU1BCZVo3dWp6OHhlY1h5alRPRHFidkdPTU50L0toTk9xeHpkbktYcUxiWFVVdFZnUWlwblVzZTU2Q0tvQUorQkIxcFJ4TVdHRFUva3hNT1NXS2lldlF2SmNxV3NtUDUyTk9iRlZWOG9KdWphb3UybU93K3lrQndCV1ZvYnVCUlA4Y1JQd2dBbUFjYUorZG9JMlNzUkovYWZZQzR5c1VMRmVXdzJYV2E3Y01nR3FXdm5FNkg0MStJNitRR2szbDRITVRZS2JveGtGSFFWRmVoMlVNSkxCWmFIQi9Dc3M1T0dRTDRkWnlHdHlkOFcrRUc0ZFp3UGpJWlRNbFBtajFhZEV2TThjZDR1ck9WY05VUHkvOUk4Z3BMMHRwd1cva0VNaUpBUmVmOHR0T2piQ0h4ZSszdzlENENiaVZteGt2QTFWUXpOZXV0U0R2b0VMTkhueXZ6b0s1YUdWck9Kd2JpVWxlQThqV21FTDNpTnVKYlJ1UTNxNVlPeWRkVHNqWUpYQ1IwYzI5bUZYdms2NFNEMm5FS3V0bXBZTXZ3WFNUSXVJTEtJekg0Q0FnSUNBZ0lDQTgzMi9RNzMyL1ZTWDIvYUQvdjliOC84SDJGZDl2MlMvNy9mSC9oNzcvTjl2MFN2OFBxWHI3ZnI1YjdQc3o5KzM3RDc5bjJoSDdmZjQvWjcvVGgvWjd6WDdmcGJyNnZySnYyZlh6NzlYMVZQNnZySmYxZTNiK3IyOWdOaUF0TTZRb1BxenRkQlB5ejB1T3QwWjZRVjVLM2szTmRkS0Q1ejRvc094dkMrYjRsaWVXbkR2cGJ2cCt5RzdmUVcvTXo4R1l1djY4aE92SjJJL1JYNkk2UkczZDIrdzVoaE45MUtnR0lxNTZISFErTU13d3RhNy9HR2pQTzloNWtEdkJ3N0pUSGxrMlpCejl4TVJBaDh6MGpyMTFuL1JVR0hJL3lVV0VCVjBvbVNYM1JWQVhrZnZkYjVGMDZoNkMxSmYrcHhvVEREbjJuaS9IYUZTWVdwRmJtSDRDbWF2ZElsOVN6TmxZR2hlVkFTdDQrY3ZEdHQwMTc2NDVYNkZ2cHpYekU3UDF1N3Y0Q0ZwaHRNVVhSa0FTRzBBMVNoa3N0ZTI1bjJPZ2ZTalhQZHpVNis1RHFxdkYyNXpBaFpFWktYamc2TjZWQjJZNVlrZWt4OTVBVnRWSERudTdDUDJmTjVzZnIxcTI2RkFaVHpMdmE1bUtiTHpFMzVsYzBWcnNJaGNqVEZoeVB0cFRPYmsrS1lpZlNram1uR0lCa0xzQTM5N0Mzek1SME80ckxSVEVodGNOdHU2VnZWOE8vaGRPTWdCQmFjY2t1d3RDQmx0STE1RTBRQitPZlhaTUZ6cVIzNCt0N3pvSG1IRDZUZWViOUxpcWZrd3RtVXY5R2U2Um90czliK2d5ZFlrSzdpR2VHNVE3Sk1nTFJhZWltYlRaZkVlKzdaeXdTc28rQ1F4ZkxSL003VmtEczNHQ0tSaUpRS0hvM3ppczdFM2tPcjVMWFhBRGtBVW56UHhCVktiUDNMWDIxZnlTNU4zdXJqMXhTZElJZWxZRXRnaEl6TnBwYnBQQ0VDdnFkekFoUjE3bGVzLzZpUW1CeXlneE5wRmt1d0hhUzA5dXVJU242U1p6cDlrZ1pqbjg1R2dkTUkxV0FUWURhblZWNDFrbktRTzVodzErVndMNTM2N21sTXQzQ09UdUpaOUFjekIzbjMyWXhKbVNTZXdyNW51V2JGVGtrcWUwRXpJNk4rQTUvSSswNmwrREMrNUFxTjU4WTI3eWVBeFJJTGhlU0krVzd6Rk5Rd2FaZVlQN0RlL0RIVjFlYldPMFQvUC80UzhEV1BwQmF1M2NTeDM3elN4Mk1SZnIxNVVrQkI2U0YzaGdIQ0pFVlhFaUVabDByRzQ4ZzhKRENUczllZnFRaWgzSzVVZ29kMDY4cnJZVHJvZURwSkQ0TEo4TGpTTzBpd0tpQjh3c2lsbDkyMElkZFNPaktTUEt0TGpMTjRsNGhpYTRBVC9lNS9VNW1YN3hSa1M5WXBicTlFcjdRcE8ydWpxUVV3cXNmUGxrYXBBUEU3WWRNWjJMNldubUl0dzRCY2hQTWU0b04xQS94ZGFWbjJIbjdCT3Q0R25OZTRVN0RXV094M0tiWFJua0RrTWFuRzRXVWN3bmxka1VMMFdsNzRNSUR3NTh0MHJqOHJLRVBMdzVmK0M3VHdxcXEyYVZYSmg5YWthN0FUUXVsU1hYN0tYTnZ0R1JORGFERnpPSmxjYStkUzAvMitZeWhtV0IyL3MzQ25pYnVET2FmSjE5eCtsVnp5QUdHcUZvUVFFNzRWcTlJaFh0eUJZcmpOcXRRR0xIaGg0eTJjTmZvUXJlMzYwVnhEcHg2amJrd0FobFpzOXRjVnFhaXh1OG1zSTBKZE40VldMMjlMYi9xUnFST1ZiZ20zMWdEamdBOHArWmx3eUpBbGR0ZVh0YjhPZStyZUgwNkZNQW4rWld0dlVRb0Rpa2cyRHhTSElpMFNxMFRaUFQvcURZK3FSNFhUcHlYWkN2WEllMjZJZ0tvMUVubHZaM0doZjlhdHdQZkt6RUdWeUMvWU12QWVZSDBwbTl1TjAxeFpkYUsvWWFqTGJOL2lvcnNWRE9aazJmNHd0cmliM3YvTytoWVMvdW52U0o4LzJQbmxPNnZLRXBmb1EySWE3Y2pCcFBDckxxTzJtbTZiOE9hczdqSncxeHVkSnlrdElNZU9mQXEvdzh6TCt5Rkd1YlF3UkRtUGJuSkxqbVI5UnJqTitydHJNcGhQdVZlNWVkUzhPNEZPN0tDQ0VLbVNUSWZhUk8xT1Rob2hBT0pGUGV1SE9wTGNDVTE5UjluQWJoQWQvT0w0YmptYkZyeHp0ZDYvYnkrUDRsNWhDbWlTY3lmdUJSeUxWK01lemR3MzJsSnBMR1BodzZraUx2dUhJNFZEZW93TEJqZnZYSTRmcTBiSXY1cFJrb2VNOEtDb2tsK3pnUkYvQ3dLdXZSNjl4U3g0NGpyWDlBWSthR0lKMURJMlZDOW4yU0tWTnl5V3NzSFhPdTVLQzQvczllRGt5TXVHejFnNE9Jc2h4NmttYzFqdlRoa2EwdmxLRC9ycVFNWnJPellQVXVhWTRxZC8wQmZPU2ZlOENwVzVoVkdNM3ArTVVPdVY3OGF6Rm1PTTJnU2VqcE0rZnhSeStWMnFCMERIdkwzWEFOcnNaKzk5ZFkrY0dwU1pVR3hUNE5kK2s1dk43blcyTVZjUWhZMUFNb1Q5Zk4wV1BZaVhDZStaU1dnRGthdnNWZWd2NEVZL0VoZTdkMmpqVjV3eVNKOFVwM296YThYS3ZKVnRSd3RjeXlSNkptS0RyTDFDcCtJK2d5aWJEM2MzMGJpZVlzNDExcytkNjF6ZTZxTHVwSStMbWZTdGl4bkZoNzQ4U3RxRVorTVdvNy9WQVZSMHErNGJOTGpFd0llMEJRWGt0L3J2NC9saWdkWjhob0Z2Qzd3cDh4SVZSUEhPaTUyNHR6WVBZcTUzenpiODhYTGxBcmdlbEd6aFhtUS9KampTclhKYmFCMWFIZyt2dWNYeGs4ak1tTUVOeVBWNFFnWFpCRHhZTWxsWW0vb0pBdkk5VmFNSU1jenNTN3puMExaMzh6VkY4RWtqY3F1MUsrenhDWStEaWZ6aDVnUGdYeC9ndk1hc2tuTXVURklxaWFYbkw3L2d1WUhib09kZml4MTAwNmZ5RmJ2dzlBZWJGUGpWeWlEMnZGYkl0NU9uS0pmeXZ3djdpci9CZ3Bmai9WT1BTSTViRGw3dEFuKzEvamJWR1JNTWV2cGovTW1mTUNUY2E3RmR5R0crSWJOciswUnFHWUdlYWRucHJGNk1ZdmI4QlQ1NUVydVJwQ093d1dqK1EveThCNFFyWUorWE93VkVSZm9RMm1ZMVEzYmg4bWJmYU1ScTNqMTVKNFJ4U092OHFXQ0o3SXBvRWFaZkloRG5raXUvT1ZjcGtqOFFUcGdONTFXRmJEeFM3TmNwN2dJQ3hTQTRTUnBTeW1NYm5tSEZvWno0VlgrRnlXcFl0eGlua3BBb3VGZ3QzTlBUMUtwYWhOaEk4eFBkbDc3RFZjSFBCZVBtaVBwaVVlTXFVeFlFYW1yWC9MVi9XOXo2a3p3aTMwdVIrbzZ6TEtWa1VFMDhBODhjanNyL290YW1OaXpkY0x5cnZDS0N3QTVpd2dpVTg3WmV4WkQreDI2TUFsNG02Mmd2SjhyMHRMTzBFRjg4RXZBdTNPVGM0ajhLSzNhaUdPM0VnNEFTRTJyU3dGNkl1dllyU2VSdjVrWC9SUHorc2Vtenhhc0x2cFptZFR3RTVSVURKaXVtY054bUJzdDg2T0FTT09hOGlpOWdwSEx6MU9hQXJKbHBQbVliellEUEhEZEZna09iWWhFeXFaVVBMSzhZdksxbjljZlhveWl4OHdKbTVQdXJtWGdxeUcvb3hwWG1QNlEreVViQnI0L0pwdS9GU3FTWkczMk16MmM2VzBSZkpvZGR4WjlXOXdaZ0ZxYklSZWI5V2kwZkEzVTlhcFgvQXVpakltUFpnMHI1MmxXS1QrRlhVT0xtWnRKOW5RL05DcStYY1RVV0ZYcS9MMDhpcnlCWXA1QzRzVGFUdTE2R2dUeGpEcjRPUy9pQU1sM080N1hIaDRDODhwU0luRUlZcXQrZ29FN0lNSlFEa1pvd3pmYUxsZGZBYWkxVElSSng4SzNyVkUyanZGcTJzMFNzZmpVNTJqUldsR2ovQzNIN25ZWUlRL3cybHFWYmVyTGNOMmpiZjhzaGdvQ2tDTlB5SGJxa1MraG54QVNmb0NOOVpOUFEzRTRUa0dzV09GS0RZVDZmV2NKNkl2eUhabUF2OUlXeFFZU2NIVmZJeEZydVQ5b3RZVFZlaGtzSDFrMllqeG85RC90eU0wSkpZOXlmNzVnTkZrWi9keUo0bmh2ZE1mbW9CMnM5aGU0WmVwZk9DcHlid2ltRFdFd0ZxMVkwbEhaMmt1c2ZhdjRzbTBTTDB4NDhDa1NHRXNmZG9xTVhJTTlJUkwvUWk3SVcveEJiQ0VOSSt4eTZWdjcydXF2Nll3SXJncVU5OGl4cGJveTBwZXhseW51SEZwMklORmtBcUVCTy9pU2lPYnhQemtrTjlwUkthN0VWbmU4VUFuMVpoRHlQK2I2UUdkc1BXdkVpYUlmcWkrVHBrUnlvM09vSXljQzArVVA4aWVoR2J6SjVzM3NLejBGeit1ZGNUNDYwTFZxZnVSMVZYTEJoODExL0NHb0Z3S2pzSmNzMmltVko0NUI5OWQ1dWc2SC9iclVSdUFibWU1NGFET2N3Mld6eTBvZGlYcXlzTzIrUDhXTXBVV0RPSWZKdmpOc1pPZVk4TTFBRjFib2xtOS9md00vbnFFQ0ZEWS82TU90YVo2MGRoS2x4dllrVk5RVTg1Ti9VWmNmVzVvZUdzYmRmUmVTYzhnajNlaWVBbElYVmZ0VVZQRkc2RTlxVTczLzUrWkhoZTk4bWw1dGtrQmVpUXN1dmdyaUN4c2RnZ0tYTkRWazZFdXNmdWJMZG9UQzg4NXc2aUZXQ0JaaVB3ZWwvZ0dqVHhHd1pRN29NaXI2a3NmY1F2VERGOXNSOFZ4OFdiQlkvejBkcW9ncEhkK0RWZzlSYjRYY0NCQmhyUEF3RGFoY3lxZ0pVM0NDQUNDOFR1OGVzSElqYnZ4aXdVTUl2VzNsUU9oRDJBbGdhMG40R1kvVFFaR3ZocGZuWHgwbGNiMTEramFrOU53ZGQzQzI4K3hFYUxydFBrRDRYMzRlVE02YWQ5T1lCZStBSDVXaEp4WnpzQ0Z2bktyVCtySzM4RCsrdkdrNXl5N01raVJTUmYrUlgrbG5OWi9KV0NXNnJwbWtEVzBzTXVISGVScmVsd2NxMFV4cVZIS1h3WlJESVBWZzhHQlE5eXRSd2NsQTA5Q1FyWGtTYjQwKzVhWGI0SXpvZ3F2NTE5YUxOUHh2amNCSzRQdzFYaGxmNjhQb2RUNFpEQTFYVWRPaE1tRmY0anBWTzlCenJqT2ZsS3QwQU9GeTFIMjZXM0lVc1VQTjFJQ0NoYjdwVllzeGUxR2MySHFXSjJNSGUyUC9oRnIzaHVBUkE0cWo1dllTQ0pORGFVQm5pZTg0RHpBT28za3FzK0VoRk84L2c3b2VXcmpaSU81anB5MndxYXU0MFg1V0kvN3B2cHZMS2wyQkNWbFRNSUJ6aGJ0dzNUc3JGeUpIUUcrTWdaSXlHNWhkcmwrMG83RGl6djdsVU1XVnJkbUR0NnJVUEZhb2JWNG9RRUQzc01IMXJRMVd6MUUrWWE2NkZEWXE3UWVPcU1PeUdKSlg5UE56SlNYVTBNT2IwSHF2Mi92cEpDblB0cTI4ZCtJZUw3ZUFCbjREZENZb0pEejd0YVNpTlJXVXYvUVRKWFhVdWRXaTY5VGw5MHpzZm9Ob1RqUWg4bWtBdStiNWtibHF5MkR3MXk0aTA4TWxwY1lOeDd0LzhiWStsS3cyR1JBd3hHem5rRTdQRG5Fell3d3FicUZOQVFyRllKQ0dwYUVuS00yeS8xbWdFd0s4akN0MklWZmdWc3A3UzVMK0pyUzg1Q2lwZ0xtNVpjREtWYXNIWVRVRExRU3ZnUXFZM2Jpd0V2UTlseFhzWnZWdnpSUTNwWXFQcjcxT01iQUpGSjBhWUQ3bVhzZWMwcTZWWTQ5Yk40eHd1ZGFqcWpCSnVtd3hLdCtnS2k1OEFOalU4b2pDUy9qL004elF4TUpvdi9NamVyYXdUL0RCR1ExVUU2c0tTdTc1NDk2aG8wRmc2NDRYbVhkUU1jOVhYOEtuVEZKdlhPMG81bVQyU3NzTGNkWXJTakZLckhLM3pST2xBTDRWblE2MFBZNmZMUjF1VDNSSXcwcDVYTTF5aUJxY09MR0o2U1hBRzdTOUhsM3BiR2RBZUF3YkdCWDVrb0F2UWNqY2YyTTMrakRxZG01czZDRHpxT21OcEczWXZDWkNtbHJLZmZvYi83eEFkK0kwSE51Smt6R2ZaY3Y0cFVCQjZ3YTdoMm9kdXdBaG12S0RoY3VscER6MUhpbjFkOE9UM0psNEVKN0x2aEwrUWdCeGlpNHhxeG1MZHMrc1d1UmJjSy94NXIwaEovczJabHcvTzZZL0VJaExLVVI0TXhtYXJjMDV4Tk1XYWphNlMzbUdhTXFwaExpZnZFczkvdmNnV2VESXI3SzFYUWIyVUw0ejhBelpuU2dvb1k3cDVTMGFoaUNwd010WVk3UUJKNm5RMFltYVhhM3NLRWVNRUp6VzAzcWROazFGYXQveW5iZ2RKcnZwVk5tUGZpR2VCUEQxbEoxay94dkJxdGIzYzQ1TG1Qa3B4Q2VISjJ3ZnAvVU5PK0dNMU5oak1DQlg2aGFCV2ozMlFzdUtqREc0R2Ftb0RVOXc1c3ZFK251VVk4d3pIWnZ3QWJvSExLdVRRL0FiZlZJVitlUlNiTW5xaFdZajBqZXlaMUhsRW9EMnhvWFFVaWtMZjFJOUFuYlcwMkZYR20xYlZkb1hKZ2ZKNWZ0TnRRbDFjM005K0RMMWxDYTVMNlVkUDZRTytabDRjbG4yczUxNFIvdFJHQ05QSm05QUVjMzVrQjV0OUMxblZmL3ZlaVY0Y1g3Y0s3SFV0TUF6NThnZHUxaFZaZldvZW9VM25qbHdmbmlEUHpCR0x0QUF4eXlDUDBuYmViSkdWcXlaL29qTWpzV3l3SXE3a2Jwa0ZVd2duemtuOXpzRlZpTGkzekpZNFhUMXQvRTFna2V6Z0x3c0QwalhYUkFjUkZnZkt1R2xpNkxNa1JaVG56OG56N29UY0JiWlJEWnM3OHdITktucmhRa0htd0YwekZvVDYvRkRZSE9mcVNEbThoNkZVUjQrTzNZTnF1cVYyVzNNZHBDVC9QbnJvaWhxL25NdmVnT3FNWjJKOXFvbHF6ZnoyTjYzNGtoSjVNTnRxa2FGdFhmZnllR0toV21TT1k2MlJhbGRzRnkrNWNYeGEvQ3VFMDQ0YXA2TTUxenVuQVdDYTRNaDgwb1dQeFV0cUowTEVXWXhJOUhMdEs2cytOLzNhODBNQTZVUWRBbUg0eFZaVnJEa1VTME9aV2g0QUNoK1dpbE9BRnFkTFhGdzVrNFlyc2trY25KRTNVYmt3UHNMTXF1cnFpNTFOaWNyQytXUldRRkV0OFdaUGlwVUxQWENQK2g1Z3EzZzlwS0pBZTFvbzM1UUJjMVFwb0RQWHBWSlNjU0VqOVgvWC9IZUo4b0Jkd0pYYk1xanVSNUdUSlZaWkxBb1NuVEtJZHZQckNvbjlxTFNmcmVFR0pmM2hoaG5PZ0NvN0lya0ZpNitjV2s3RFdSbnBWK0VDVE9HS2hVSjVrQ29teUMxTTIva2hwUnlxZDlmZEs3TkxWc0F6dTVoNnlFSExyeFhPNGxLNFgxS1Z4NGtNNWhiL1Z2UFJldUg2MUxzSjlOaG83S3VDUXdjOVZOeWZxZkNjYm1tcUozWUwrWWhwWlVKSWRqdk9hWEpRQkxyMHZ1OHplZ2NDZHN0VEUrM3kzU1ZnZlp2d0hpTHk0d3kycGh1M0NQdFFsaVVDM0tDMlpUMlhacmxDV0Z4M0dTS2pKNjZNZzV3cnVkQ2pnNTQ0djhmYVFibFUwZ2NOOUZocE0xT1I0V1l1d1lDaGozMW51eFVJdXFUZzhGdytQWXNPc0xYU2kyc09XNHdnWm1XQ1FTejJaaHhxQjJLQzVJYXhTZldLMVJHaVdpNWg0QmtDUEpIaVRVb1BCaEhCeGRvT29qNEpaUEZuK1g0bXpBT0dmL2VTRUF1RXNObHNFZ2w0b05aSTNlSm5nV3FZZ3AydVdJTDYrSGNWc0t6MllmSzRWNEJVUXprLzNEQzlWSDZSK3gvV2xPQzVHT05qRUFaRUV6SnpGMmkrRFBSRkNadHAwbzQwbmRBb01mVTlPZm5jVm1qNGc2NHIreW1mWm9NSlFMMHhKOHBGcXlhc1UyNnptYUpOSUZmUUhRWkE5WTNZVkUvbGZXZWkyOGo3Q2RNc3FDR0QxeFNtQnpUVEViZWhFenliUzUyN3Vja3kzTG1Uc093d29CajN3TmRxRUJOcGQzK1dDbXNndW03b0tiR1REM0l4VEtXTWlSMTYzRkxmNzNnMEFoRTEvQUtDV1lHTDloZkRGWWUreGtFV2xiRGZHeTNlRHNhUjNiYkFNeFl1UXBKdXptbXhvM3F3eTBtdGp1Q2RCRkltVUJoeHNnRUQ1ZEI0ZlZjT1c5ZjFjVUU3OEp5dFBiUVJrYUZjMWwxSHc1Um1tVmJPZEdpNUxtSzYvUmVNMlBTRHd3YnJ3NTU2VjRFb0RNWmZBVjQ4SGh3Y3ZxVjVSSFNUQVdVRmlUVjJSeXZOd1hzV0RzMnJFYVBaaWZWUFBIVUFocEZWclRVbEJMRDgwUnk2SU9uV1hDWFlDZ1VCVmhZdUkxcHVjcm9La1dtbzI3ZVNoZk5UUkUrdXpYd0NMVTBIUFBSZ3R6YkVTVmFON2RzbXU4ZjJVeFg1TVJZTC9hdTdBUkNad045RVFXQmJQdGFER2V2ci9ZYjBOeC9acis5NTRDd0cwWVQ3Q1pHZVF4WiszeHFDVTdrcGhDOEpubXBSQ3gyRnNBOEkvUllrbHNOOTYyMnZoZEVyTEFUZUdOc3FoaWhYNXlLMmVyY2hUTEoyQmVmWGZiM0dpMUZuaU1sM0gzMngyY1lHNm9LN1IyaVFxMXFyRXhnRzJOUTZ3bnlNWXVEQ1dWVytOeThsMG5NS2NQTzVETk82Sk1hcWx4eXFUTFUvK01mSG80Um5NbldnZ2h1YXBDMDNaVkEyN2tBMGcvUjFoS091R0FWL1FadDZ0MUthRFBnVnY2eW80WnZMYngyN3FTYjN6V3FXMUNBbHlKS0wrbUZJMHp3K0NEZ3hVeElaSUdEQnhlY2dMM0NRdUE0VE5qUUdoRDc1VWxoYkFob3UyOTJMWHlwSkZYR2FoL3c0czNENzJtLzU0ZXppSmxTemNrbkJCdVV5NlhRUUpKeGxVWURRZmFZN3ZhZmd4eVAzeDZzWXpxWkdOcEMzdUpmTE9tWW5NY3NEWFRodG9KaDRSYlhFS2x5Tkl1RGZkay9iVVNteEFuZjJJMGFyS3NtNEhQam9rcjMzcVVwZW11aGxrZzVxMGtzdkU5MkhZZnBPeVgveUVQelQyR2d2K2h6TGxRZCtCTFF1U2txZHVrTTlPeFFEejhsYmUvMXp6TFFqT1dnOHZMUWJOczB2WGJsSmx2T1dDQzdncXhIbWRXaEZROGVjQ2xTUHJVVHMyblh2d3NyVTc4YTdTUHo5cnhxRXprZ3lvZ3NyN25OUGdpNTZrWSswWHJJWkwyOWV0NXVETHAzd2VOODhTQjdoVXBIcUhab0owT3FzRXBFSkc2UnJmd3d3eGNSVzBwUFFQSThLTWsxUEplRE9KNG51Sk9UYXNpMGNmZ3JRSlArak11YTZabDR5cy9YMm5VNXhHRjlLS1lrQ01CbTdzWlpWbEY1ZFdoQnZsaUdXYVl0Mms3ZG5iOHVZVHlZS0pXSlptYzhxcFZQcTFWTkhWTGVUSm1OMFlSamtmTU9RMU1JZ2wxVS9DZnhoWDZPNXBlSFQ2NS9xWmhvdVBkRTdIV09RUm53bEtYSDVJdHR3UWsxVUZoR3ZOZkNiWmY5dmFpdTVKMjhselA2Z2RxNkNqY1FrWXhjUkNsRURiZVlWYU94Sm1EOVBrcVgzQjZMblM1bStYbldvdFg4Y3hUQ1JSckpCYTArMzJYZzZMUGsxNXlYWjNtR1YrTTVENCtwOVRHNTQzSkxQQi9td2lsS0dJdkhZRFdNOXN6M3VDcEI3QUpSUmJNck96enBuZ2xIRTAzbHNIampYS1BBcjJRTkl5MExWTG5BR3FmaWFqb3JqVFRNYVRCMjJNak5rWVh0NmdTaEd5dFpZQ3o0T2MrbzRUa0ZHNkNwQkpOMU96U1dVNTFPODk2aTA1bUVDUG1zbktoQnZUQUdkck5sdnlFY1c3Qk53UVp0WWFkYmYySnArT0RMNGVNeTZrZERVUUlmcElheVNIbUx5SHNQT0FndFhsdFlWdGZyUElVOFBNaDMrK21QTEhCeUkzd1plREhQcGVSMUh3UkdSWUt3OTRwbW11a0JwRkk2YUdkSUsrNHZUekVOSDdLV2FKTmdySGpuKy9OR2ZJSkMwS2pGaG1QZEdWY2NwNVdrekZkYUFxeUg4V00zcGZMUGZpd2hNN05GUGZqVDMyUFZUaWFxTkIySFJnWEpEWFMwdTJVMk83TnpHMXVLNnI1RmFKZ1cremZwd1dBaC9IV0s0ZUI3eXlDYi9VK2g4d3R1NUNWSCs0SDQ3QWw4eldXSXZQMFFhTU4zNWRGNmJRa3V1TGM2Rng3TXJqZDQrY3JReUM0N0krUHNhSktjTXkxelNFQld4Z1pwWlM0MWlURFRBTVRqTXNUYkVUMTI4a3QxNmNnY2swY2R4eWk1WlRRZ3dGZ1dFQW1Oc1VoOHA3TllXclZoL2ZFb1ZMOHA1Z0ZBYStOYllCUWY0emI3ZGRla3ZUbFR4bWlFVlcvcmRORUhIbDBDY2ZsaDFqK2tVb090NG12NlMvVC9Gd3g4TWZSQ0llYUovbFJPei9ScE1OSkRNZXBhMGEyKy9TS2pJKzNzZ1p5T3pEWndMSDkxNnMzU2ZxU20vaGg1Njh2WVBJdlBEV25xYWZsd0hyeDN5Nm5uTVJWdDF0bjN4dDZNMGhaUFN5V3BEYm5OSzg1aUFVc2VVR1pTbEpRTTV2ZFc4WE83THV1NUxsUzdHeU8yTjBpeVk5UjlIdEMzWmszSXI5Q1lQOWdSRkhoOWFKUVVTSDh3VmZGQk80UGZzVXRrQ1ljQy94YldZSTNBYS9DSnNWSmcydGh4dGdZaEJZYSt2ZDJUSmlvQUFPb3h2SHRTakU2Zld0R2FsZ2VlckxKVHlETmdLSGZ2Y0l5NG9xZWlhR29yNWhseUhDcjRYUkdJYmhNSkh6V2V1WnFvMzBqSlByYmpMdW81ZThJQ1dFa2lxYmV4Z3ozWnpQekJ5NVpHQWE3M1cxQndpbDZXbHl5aDZpcDloWVNWRHArcFVuZHhzRUhSMWpIdlpzZmpyd1hzMVY5M2oycDlXd2pSejBVdCtobDN5b2lWanFydnZNeklTKzQ0Wk1kb2xxUXBmdnltVjFoejRKN0llcTcrcDdQelA2OVcwcWVEb2E0VWJZNStJcms2dERNMnptMGZNQ0MxV1RzN2N2SHVVd09MWlUzUHlicTZ1T3p4M1oyTGdDbDZ3SC9MZGdjdm84aUswNXJHMHNLOFlZWmd3YkhhWk1FbElicTJLUVpNd2VnczFVdTZ5TjVJRHZTL0c2d05uZ2U1K0UxZ3Y4V3dpUzRqWVAyM3BrMThDZUE1OVkzSGlFL0pHWDlDcEhNcnRiOWd4RXpVWmF2SmRjV2lQQXFFdTlHL1p4dkhWZDBPU3dBeS9ReTAyTFJaUTFIbWRNb005Wnhpa2NBd0QwdDNBbFYycXgvVVp6SHRZWXEwOFdydVY5dUVCS2FTNXFYeE9pOTRYZHZkRDVJNU5oZmdCN2srT09GanRBelRyY3d3QlRUT2djU0Qyci9YYzZZclRiRnRNU0pGcU9BZ1V1RkVXK0tDNmhVbWNpUVZXckl5RlRHcUpXcjFTN1RiTmtYZERFV1AxdDF3ME5rS1lWS3N0bldUMTJ6Q1k5L2Exc2hFeUVvOUhkaG5pdkN2R0VvY2Y0VnRQNm1rNkJKL1FwbnhLRkVzWEtRMEM5ZkZHc0sxMnVlNUtVUE9GYyt3K1BaYks5c2VoNFBSVUF4ekozMll0QXBVVENuN1hDdDU1bDRnU1V1QlYzS01qY3BwUFg2ejZ2TnJ0R2FzZjNEQ3BTUDNRZ1lsZFRSakNsWWdsK3g0azN2cFV1YVU0QVJzd1orZWU2Y2hPUE9SekRlY2ZyZUNRNnJWcjRjUjNIU3oyNkVqaDJ0OCtDTmdoRWZMc1ViQ0d6WnV5NFgzL2toMFNheWFxNFU0U1VpVE5GTTBWVzJWbkNBZDRBVFhkWWwxb1ZwQWYzbGRMd3VQV1Nmb2x6OXZRM1hNMGt4WTN6Z2tjSy9GdThCaXh4Rzc2VTVDbGdWS2FoUG5MYUVyNzk5bFpGMUwrbytCSEhGWDdSZ0NnYldiNngvaWkyM1JmR0Fra3B0L1dWWjU1MjUrU1ZjenBLYWNRZHFDdlpiQUJCbEJkdkp2aysvazlGcE5VUmZ2NmxNNzlIemdYQ2tQaE5XNzFJbGlqUXRvcDF1VHFZMU4vVkFmaWNVUlUyNEo5WDhVY1o5OEM0M0Vqc2VSZjduQ3ZtVTF6cktNek5sL0x0Q2IxbXF5RkE3VVkvRWtZbjNORTYwbzJxY0I2eVV1OTF6aUpVcVlsS3p6RE8vUnFId0Jpem1XNHpBTkhKamZ2Z001WFoxenBJRlFTdU5xaEFQSTlhQWhhUUp0TVpyOXBEc3U0eWEzLzdrQzVnRktmbkkyOGt0YTdaSVhXVHpMazFIKzdjRjZYNUxHNDNONG1hcWJkdEpnRjV3ZTQ4bitiVS9vQXUvWENEY25RV1RRQng5bUpHTHA2ZHFzNFJGT1d2U3pRalRlaEEvMHBjUnJvYXpIcFRUb05uSzhwVWdGd21SL0syTndXRTg4WitISVN1VXNhM1o4eDB5S1p6empuOGo1OHlQdVhXenorZDltdUJ5YmxJVks4cHdKN3J5MFA1dSt0Vy9WSGNDR25aR1BLOUtEbFpYNWpKdFpMRWxFbGVoS2Fsa3hlRHNMZnd1N25QMWY0YlNOcXlNcGtQQnFYMFJmYXdyTmxCTCtZZGRZS1RuYUVQYVAyVk4zbTJTZ0l1bmNmY2g4dUxGQlh0cGRaS0pESVFINUFnai8xNzFWSTdUcGh4WUhBUG96a0FlZjdmR3FKaDFESmdXWXJZMVlCNkhvWTgyQUd0TFNROFpZejd0V2FjL25mVWdUSDlFZXJIUW9hdFE4a2ZqZDlEVW9jUXhibzRKYWZCR2Rubjk1QXFHUTBFUEkzTmVKNFpyREVJS2tyQmRkV1ZkdjhJL3Z2eTA3TTVZWC9zVkVFendIZDRZanNaRU11akdPaEF1MDdtcUpYQWdSV3ZaVkNUK1hlMHNLRWhmL1dEb3pRUkFPV3NuaFdwTFBoSDl2akViQ1N3ZDNQa09YK0NkK2Zxd1RLRml5cHEvQXNuZXIzNlBKeG5JYy9QU1dKME5aeFZGdGEreTFoZU04ZUlqM1pGT0dveGN0Ty9KdFMzTUUrR2JrUnU1bmRncUYzNmhGYzIydTBmUkhXRVFyRzFGMkJ1SkZlbWN3ZDhqallwVVJzMnBSbUdBZHA5UHlvK1p2NkkrZ1dReDJoZC9kRjNLUEM5bzdERTZ6QUd3c0pETXhMQ3E0Qk9DaEhEN3lHdG5mU0pKS1loL0xkdzRjSWluL1J1TjR2VzVCaWJUdTliVXQxRWUwc1ZGeEgwdzl2UHhheHNHUmhVQmFuRTU5NTZTeS91S3JzVGpwODR4SDZheDNWakpvNG5DeGU0V1E3YWVmVW52NnpSQkhCWnIrNXlVR0traEdzb1ZUTzZYNDFDOUNXazVCa21udUF4YWhkU2psdHRzQjhxZDVLUXVqRHZkUElGS25ob0U0OG1qWDkzWGpFSXROV3Jkam5zbytoVS9mN09VcE9XZWx2alBMalBHdVRlUVFoVGRqOEtRUnlmcnlYWDAzTk5lTkZLMGVWVkNGSFJuQ3p0TytPOVlhNFVyQnVseThiUi80WE1EamE2SjNHZXBJQUp1ZjkyZE82ekR3VXo5UVpxaVkzVWdqZGljMElPNTFGNUxpY0k1RERFNUxKSkI1WWI3Wk5rNG12NFFpbjBlKzUyYUtQUkowa2Ixb3BsMkxkODI3aGVqamM1T1MwaUVBUFhlVGI1Zk1xMXcrNkV2N2NKN1VEOHduTDZKT0lMbUp6cjAvdzJQUlY3VFRjcmx5RXM3ckkxbERqRVNTbFJkNHJ5cHI3VUVJWUV1NkVCdllLQU5zU1NpbFBvQ1ZKMktIVW1oSWw3aGNTT1l3SU03QkNodTF5aXBWckRqUldUYWcrNUZSUmxQWVBQQ09ibFdERHZMdmZ1YmUvMHNpVi8yQnRBL3hEYTVNeitLYm9jRGhBZHZxVE1WVUlEeEJrRW5XMHVoYStlVHpWcTFteGowTFdha2EyRDREVTU4SEgxaUVoWUJoYkRiUlR3c05yWExxVUhHK050SlRJOTZlc1hLcHVlSm5nNXRuYjV6R0UwbnZvRlgzNVU3TjZUeC8rQllzMFZNRjgzdGl0TjRvK3VHNzg1cElJQW5xd1lmK2hkWjR2VnN1Rm9zMjFQZHRzM0tQZXBUN2t6STBtaGU5WWF1OG11bWh1a2V2eU85b244TG94dENFQU5lcmcyTmlKVDY5QTJJUHBYWmpQaHpuYWxpSnVvSkhOd3NFd1ROS08wcjNxR0ljTWM5RzI0eVdZOGI1QVczbkljb0d5NGZZdGdkRTRra0lpMG12eUlIZWRrbWJBMy8wSDVvbXJDZTZtanNWQ01TbWNmd2E0M1ozTGYvMUhQU2xCODFibG5tdzk5ZDNqWW5xSXVvN1RTaHlpaW5LRzAxMnVxdC9uWTRrSFVTMHZyM0RpdXEwUUI0YmNMMWZhS3NoSm9RNkRNdVp1QU9qZDFWSnhQbmlETmtGQkpIbVptaXpNbVZsSlFKMnI0SWxsOU9tbnMwczBKZUVhNmNINDQyNVBoRjd4dmdPTmQ1a1gxQmxVY0VLd1R4eWdUQm1vRXFCOHdFWXJOcG9UTDZKK3VpaTdmWmZBMlgyQk54a25ETGtwK09WSWFtQzZXNlNucEc2Q1hJSDJGN0dSdVFaSDUwanJES29mU00xbzZmcy96SFRyK0xOVmpLeVVnZDk0UVorQUh0MFdqdU1uaWl5SDJLcXgxbkc3QWdSNU9FenUyZTRadFVPUEw0UGt4NG4xeUxsOGY0Z3ZxbGp2SmF4amNOWFdacW80QUk4QnFoUjFWNGtTOThYUCtlQnRoQnZGdnFGTUR0a2JSemJnNzFSOGpMM1lEOHU5QWRnZVdmcGp6ZW42QzRPbkg0Vm00MDZ0ajBNcW9CaW9UUEF2UFJSREYvVTBndG15QVd3eDJ2TXAvdHJQdWhPakNibDB2MEZueExwTW1KeFZQSDBwOGYwcnZtR0lOc1hQUFZBQkw0bWxLRFlvSEhVUmN3eVUwb1dHVElGdW1VbWNoVGNOZ2hOcDBLVTRxVjZiMVBTT3ZtbWsyVEx5N2hSREhQdU9VL0VKRmRwVjdwQlZwSmN3R0VRbW54RzFLZ09LV24vTGt4VldpQlJsTTZZMXhrbXNTVWVUQ09HSXdldkh4akdHbWtHWUdUUnVSK3Myei9wZjhRS0VKVm93OElqdy9oMlR3UXY4TFJjRks0ejVueGx0NXhYMGI5WVpjZjBrMHRuazhVZEozSGFlc1dhZjNCRmMxVitUcFgrYTBORFVCdmRhWGljWk01Vm1xY1B5NUdpTE1DQm00NllQUG9obFJXd0Q1VG02dEdMT1J5aEp1d2xaWkVFQkFORnNUNzBaQ1phRldQQmFMNG05WnZSK0lNMFZNVEZaT3B1MFVYL3I3cVoyNHNuSlQycUo4UlZYSlJTMC9OSmIyczVuMTJqUlRvOUtPUE40Znc2WS91RmlER09xVkhFalRVRGZvaGpxS2JVYUNNU2QrUWdsUHZPZEFFM2Z0UlNGSGRTZGxjVnJ0Ti9haVJnZlA1VkxTeVhtSVFkZEZxcVI2RGttSThDL2o5TFkwd1lpTTNkdjJVcXBqVndDYjVRREdLY0JyR3VycDgvaWVEcFNWdzcrU24rS0p6STJocGRUenpqbmZnbHo4UWdRTWZsRnc4cmVRYkZKcldiWkNEZzcxMUU3RG1Zd3BUK2lQTWNUSnowendiSkNCVnBFRHgvZFVwRnFDNFRIRzlvMzZTbFIxTmN1VU5LUmxyWVZPZFMyb2RMeW5LU0VnZXZWbWFoUVd4ZG1BamRERUJSaVhQajFjMHZTSTA1VWVyd3NQNWN3VXdkZ2JKR2xITC9ST3RxTjJCYnN0czVYTHpvNWdWUTRHY2R6ZkNNTHlpWkNMVDhGb1JESEJJNWtlbS9nTzI4ZGQzbW5tbU45OTdOc25rWFpKalhwNjhXNFF1N0F6YjdobVdFQ3NiT2lIbmgxZHB5YmNOOVJ3U3RkV0RJOXBOTGNod3dPQVRiSFZzYnBGcnNSSmdGeWs1MzYrV0xHWWNXUm5LWk9lSDJwVktLMFV0U3E2c1hoRmtXK09RcVNHQThpbHA4clo1Nk10VVVqZng1RjZPY1lPQU90TzBRQTJhN1NJWG9qQ1lCQk1LUmJ1ZXRPTTVwWE0rUDhOM0M2eE4wSXNKanRDbUdpK3hnRVZhdHVNN0QzR3gwSHZtaHRjNzlpYWJMN0FFc3RaMitEVXNQRkk4cXBtWVkrL0FHS1A2OFN0M3d6Tm8xN2x3MHJRMXpqbmZDendTV1c3TG4rQSs4Nk9qdmlOUFJyMW96bzd6OVlYY3pjK0hVaXJNbzBMNG9kRWo0YnROakhFMDJDV1ovVU5zZjdUMVByZUxmaTRtSDNFbkhmd01mZjcxS2JNWjRaUnFGdU5DZVZTUndTZFUySFArRDRTSzd6ZG5aUkZFOGphZEJ5ZWVaZFJxazZLRUhIZDNkQm9yQnRDOGRlLyswYnZFOW5PR0VLZGJZM0hxL2ZlSUNyYzNiUHY0Q2dRaWJOQkxZdXdUcGtiWHo2TkZOaVQ2RW5CRVhSczRYNVRrTmROYzd4TjJGTjhjaWdoYVJNSjI0MFlSY0dYS0lKWVc1bWJmMkM3ckV0VXNxaSs3cG1GOVp3NVRnM2tkNHlFS3A2QStrMW5DRC9PaEVqUTFrU2ZWdW9wNXl5bGtpRXc2aDVpSUdUTVQ0dVJJSVJTZmowUW1ueGF5d2MwT0Y5dzFMYlQ4MXNtWEhjcVV6OVRweGtMVlhpblVVQW1pdFYrbGwwMWRxVEhTSmp4MjBJc3N5UkVoU0FIU3VFWlNRN1l5Z25SdzBEdklraDZObHZadWkwZHFIZHZpSFdiNVdBWW03MGxTVXRzcmNtYlpIbTc0cUs3YXRKdjBTZHZZUHBlRThzTzByWm9qRWM4WDF5QU9WVU1GNTVBZDhXSndnOUdMQWYxV2JyTUIrTUhUOTBqdUFQYnMrbHM0dDdHeENyVVl1dW4rSUJ4R1VVOVpHak1DVlFvbVhwMFo4cHNhdXFkbHJEL09tOWJPd1Vub09XQmZOQ2dQTC9tTFJyc0tHakZEb2c2ak4zcU9MVnV0YXhwL0ducVo4UEFuWGpFTldjUXEvU01QM1U0RmgrRitzeGdNK2dWWUVkeGlsYit5MnhBeVRCM25TQlYzYStwc0pqbFFGZk1TQm5pRlN1cFVPNXlkOUlrSTlTWGNHS0N0ekxGOUplM2M1d1NzOFdUeUZPaWpqTG1rOUxDdXgxV3lhT2UvclUranNwK2V5bDdFNk5BL090cjBUbjNJeVN1SlRsSE9CV2dwdnQ5bm9xcDV6bWlYazVLc1VocXhWdnhJRm1DLzE0aWNIRkNQbkp5dno0N1h4Z3hUb1phVUJTUUdqUzV6VGxzVWRBUzNPc3lzY3QvVWRkUjZGdTE1OU5aeU4wYnlkM2Q5bVRHeEI1TEhBZmxXazdPQlhxK3NjYkZyYlRxb29Dd0xITGt5eUVWWHpDaXhYT0NTak9WYlpwTENsa3hOZUpuaDdHZGJsV3BqMloyZGlqQTJYSyt1WFZQa3pKM3U4RVFYa1dCa1NXMFIxeGoyYkJWM2g1NmUzdi9IMlhzY1BVWkN6RFZ6L0J6alk5YXVWbE84dHkyKzhqNHFBYVhyVmhZdUVjdkF5eGJaY0taZnV1ZUczYTd6akJEamcyWjRwMHlVclFmZDUwY1JReVg1K3NTaXNuRE9jZnZzU0Q4UVlRUWZOSmpvcTdza1d0U2pXaVdFUmdPcjM1MmUyUG9uazFGWk9yUzhjTit1d1hycWU5bjVIS1dsRW0rRHlPUXNLcVdxc2dNVC9HdW1FeURZTnJ5eHVCSnJCb1VzbWlUVXZqSXlnNFZWWVZLSDZKRUNiL1Y0OTRuVVM4WS9FVDNDZE1FZ0dtbkpTTmI4bUdham54U25yenR5MlpwdzNaTWNmems3dmJsMmtZTmtkZDNud1hlZ0hEREU3TzZ2cVVqZ295cTIzZWJ4anB4M2ZKVDFsUUNNaWtuK2pIZmRUSGVqcWdjQWUzY0ZPSUlpR2lpMHdYL2RWM05OeTRVcFBZTjFBVXZZdklIY0s2VnZPanlMSktzS2JBZmdVVkdiNGphOUhDQXJSNDNSSzVLNGJCbEh6Q3VTY3VvclFuREVaM1JiZTJzT0l5WXdDMmRGZkN3SUJyNTR1L3c1L0pMODU0QkVKRUJHUDhhbmJZeGsyejMwMm5mbDNTR1YvUGZTelp6SXlXYXVsdW1tMml2VEgzK1ozUlMwU0lHM2o5emk4SDBsbjI0RmVXMzNFc1dvcXRaa0NOS1kzeDRMTGZsdGlUeU01VU1TdlJWY0ZJQkFGdU5pWUwxOEF1cGU2RnVLbGRsbVhQWFlDUnpqR0syOXNRaWI1N1hVVnFzK3NGamVOZVVLS1Ewb0dsaVVvSUlCbnM1SzNodWdya3hXT2czY3JadFdxbDNqUEl0ZkRpbEQxRDVyS0xZU0FjRTc1SnFhR3V5VUFidnp3TEhqcHFpbXZXaTlsMENHOVZRWFBUR0E3VHF3L0ZNaTAwYW5udnlrUzdoYkZ6eVhBWFFocXdSUVU1Qk15emtJRFhQbUZrUi9mTlVEWHhyT1JaeFczMEhoOVhUcFNBRnhuRkNITCtmdWJiUWFoK3dOMVZNNzJ6cGNFRXBQVmFLdFhmTVRJOEJCbmE0S212bm1RQ0s1TW94VDBjSjYzcXF2WHROUzgxQUJna2dkdWhEVFFuNUdRWWJBTmhHNXBLaFZtMHFXL3JRbHdoRGdVTCtWOFlDNXR6M1VvN2oyTDBoK0J1M2xpMTBoSU9aWXVCUUpLZm84NHNIUENvOTVnd0NCUnBqbGFua0FDc2ZpMGNkckp3V2h6UnBWKzdBM1ZleVBoZExvRTc4Rjh5QUFyaE1pL016U04zcU5sT2VscnRzSndieDVmOWJvL0pQeW10bUF6V05mMWhra2JlSW1JSUFGcXdlZW5xZTJ5WnZVSFZSaUs5alNobGtWbDFXUFVUL2NrQmZkMXlFS0JzZVlvbTJWMnJhck5aODVwQkNpeG9XNmtaaitmc2QrODRIbDlGMENFWnJhL0dmeEdrbTdONVZDTmY5b1RDWlE0eVpCQkZ0dER0VzhQNkowNmdDcXZuOHFvY0dodGZ5RTlFMGNRa0lGVWk0TXRSdFNmdW8reThWK3hFQlcvcHlDaGlBaUZGRFhOa3I3QTdSNWQ1SzREMWZiVmtabnZJWWRTaDZ4V21DMDk0Zll4Skdkd0g0WjJYaGI0ZEk5M1RrVHJZa3hLL3FSZytFV1N5NXhkZUJOQXlpMm5GS1JTQWV2R0x6L01UaW4rVUNyQUNQbzRqWkRkTi8wWWtlN3k4d25heWdFS0dIeXFUeWpFUlVGRnFQYTR4Vm01RVdLcDJxQ2J0ZURCSlFhMzVxaEQvSnBKaGdOazQ4NndTQjR6Ym10Z1hjYW5rUEcyQzVVN1FWYjhkdGxjMTVqQUVNREt3TVdUMTU3T3V6T0U5c3M0VUdWR0dsS1hYMktHTXcvSHZGOVZ2dG1OV282Z1E2eldVZ1JvY1dzSnpaWHh6MGZWTHB1MUxOQUI4K2tYVENSeDkyVzBGT0dvRUdGM0ZQVmxSTUdEalZjLzYxUDVIUEV3VWxBS0xreisxVjN2OWd5T2NRU09qUnRjN2w0OFU1c2RvdWY1RHRoaEJMQ1owb2xqOFJDSFlnNDVGRUs1TVRMVmZJS3JWaW5SdmZWa216aWJEaE5CZkluYm9EWWlzQ1BGbkRVclcveHY0RTY0K0RyRFR4aGhRTWFpMFdMa29rQ08wUFBJeHNBSmNZTzJCYkJDS2VnNTVCcW9nRThWdUlRMDE3dDF6VHhSMitSclk0Z0ZDMjN2NVJFTi9tcVdqUGx2UFRyNWZveGxxbWF3U2FyNW5MQnJCcHVNN2VOalkvQ296MUdrTVp0TjU3SW8xMVhDZi9COTFOclZLWWwzMWtENTI2OHRuZHRyNEpscENtU2Nsdm1pWFF2ck1yNEtwem9lS2R2d3FpWDJjSHhNOU9SRnJZblJmdFoydmJRU1lKeHdxdmpoRzJFRWYvVk5vbDU5S01LdjkwNENTSzh3NkhVaWF4cVZPRi9QaWFHdzlYdXp5Kys2ZFRtcXd2YmQzTjNwTXlGRG9NVGg1ZzVaMTFqRGVNUFUrOXB6clVBRkpuUy9yNXFwR1lBMG9uMmxFOGEvQVQySGo0ZytIUjZtUmIvRUg5TUpqay93OC9NUUxzNlc4OFo1U1RjYnN5UnV3SkplTndHYzBPQkFKRitJVW53SW5ncHdXY3RZL01xZnpFUCtMR0lncDVaTTRaNWxTWHhGQk5lbEQwMHVzaGRqbjBYbG1WZlVXUTI4VmV5b3BtRVNiRm5Idk1PSlJ3N1g0Q1V1U0lGOTg3RzhqVTRubFNRbkYwU1NLREowVmlmRTc3cXNLdklwMDVxa09RTm5TYjUwTkRRR2taQ1pkWjBoMXhoRE83ZHZ0d0F4QzRlelZYRm1jUE5YOFZwTkNkMUkzRmQzOHFVQjJMckpBWTdnWnZ4YjE1MXJ6Z3kxMjRNV3JNSEpKblo5MEYwTXNxRmVQWkZ4am5FN2FhNElPVmdVM2dqVnpNY2ltT0lLc096N3VJYWlPSHdkNDJCaEZ1L3JtRTRpNjFrV0lQZEdDUGdudjNJL1JWQjFjL3lTTDh4OTUrQzY4V3lPckwzeGRWdUVHRk9yczVzZ0R4c0tyOFl4ODgrTFR4TWQ5SGNuRjlyTm9FdlNKV1Q0UnNSckRrNVNRbU5FeDNOZjlnTmhVdlZEVlBSNFA3L3kxeFZkYXhhb21adDFhNzlBTGtYUXFhT01aWlJ4MDJzcTRlemVIMkhOL3BWeCtwbU9FSlhMNVBmczNXRU41R2ZEdHowQ2RzaWZUMkZFR1hteE5COXZqUERiVDJIaHRldHI5bDRtQXhBVHhmd1k5Wk9LNVJTU1A5aVZIMVJRZC9lT0JSUEtrSk1FTDNYaFowL216ZTRwU3F5NXR1NTU0anNRcG9TUXFEc2ZVYzh1NmZXNVhZelZWNTdyZ3lQZFhwZFUzQ2UrVzB4MVF0bWhCVnVCaHNiWUtENTVQRDExRmExb09OSUdDelBkYTJkVHgxbUxramZhZFpjdlA0OTY1RjFoNnEyNVpSRHJkc3JrR0pTckFQWEswUVFzcmQ3R24zdDBxMW1mWi93VmxzTExmaHpESkcwZTNpdEh3TFZaaDlTNlNjQmErU2JndjRsL2pYN3lYQVhaSTNNTHhFUWdPL1hzNlgvRmRpUGZiRlFzTnBYL01DbnFGWkVrTTgvQ3lYVDRxL2w5SzdKL3N5VndCdFArRG8yQ3VUVFNQYmVtVzl0OFBwaHdNMDhvNWdmU1dvSmNQV0lLcWwxUXFxWmJxK3lDUTdsK2JsenNodGhoUVNzUmUvRHlWdHNNRlg1Zlhqd052NjluSHB6NFgxY2NSV05DOEg1S212SVNMdndtaEVXZkRmYVJtSmVpZVpzR2ovVHY5VVhNMHpDQlhzcU1nZFJHWkg2OWQxRlBrdHo5cFY1aFhEUTA5V0tUZUFZdEpieFc2NTJ4S3ZOWkdpS3FNMFBaRG94U0FVZ1Y4YlZoeW9yR2FvV1lkYVROWjNZeS9PTU44NFkvNWxjcVF5WjZ3SmxPMWdjNTlOYTNLVEhDbWQwYzNCRjNrUnRvYjhHSDJPTjBKSHp0K2lSSGdTWGc5V3Q3OFk4djBCSjh1WDAxWW03UDlmVE5aZWplMUdZTmpPTGxlMFIyUDh6dG9lVG1aOUxqOXRBb2QxZjlra3NsTmxoRkRCT2Q1VVdkK2lvdkk0bG9IeStDd1k3NXlmTFZOT3JYNHJGeWFJUCszOHFYRlAwQkpDYVF6UUdTTFdvN053cTI2OE1iWGpCQmJ1dnZMUnVpZ1MrVC92SEIrSk5UU1RMUUJ3ZzBBcm56RDMyd0NhWWlLWWdhaTlUakJZcDlzTVNpaUFRUFpqdEE1ak80eDR1ZWl3d0tqVUlWelRHRFVmKzB2cHZZTUhLaFlPajFQL1BJd2d6RTIxQ0pLaDQvUjQ3SjRJMEwvdjZMaG1ha3hvcmRYcEk2WDZXekR1NlpKVWhyVVJuTGxrMVNzaXQrME5CcFBtWkJNRi9aSHZtL25lZ2xENCtwYTNnWGs2d0EzcUR0VXRtZ3lQRkREeEw3TnVqazVQRXJaV09FK3YyRGpaUU1rek9PMU02N0JST3hBYk52OWhmMTJMYzFZR0g0VHU3Uy8reGlMTFBtVGNPUE9NdUlMS0VEcktTQVZ6aE5zNFpaMktqeVoxRlFkUzhiNTdWU3FheWk4SnNhUDdzTzFINWtWMWxaVk9Ia3lGMVRxRzZwdHQ5MHdxaHlYeWF6SjJ1djhuS1FRL1lLWmJoc0NQaUJiN0k5R1ZrZlpNa0dTejFBWGRaMVZoQ1JuUlg2QlE4NnRReDFoTU5mWjVGUi9uaEpaK3FodVVOWXJtNy85Nm44Yk5UUzZ3SnlSNlRoN2svZEdWRnYwS01xMUptVmp5MmZhVTZzWjZNMnRIekg1S0tGOXdoMnNRSkorVlNwT0dma0NpdHdKZS9VUGF5enBiZkFwZmxWb1E5ak5MdjRqMGFGdVBJUmlGd010ZVdna3R6WDdrWktLSU1Ea2M1ZzFwbzlWSWZMa0U1ZWxwKzZIR3dDOWJqUDhoOW93dmwxei9iVkVFVkppM1Y0SEZQa25wRWVRVEcxaENzQzl1QXZDYXlLOVVXajhWZVE0V0ZvazlpME15SVpWN0V0VS9scENhbC9zNGMrWStycXFuVjAxVWQ3b3FjNFZjdldvTDU0QnNTdy8zaGNkZ1hvcDJxVzNSRTRKYnhLNGlOWU5FdzZLZHUxUlphdml2VEowMSsxVXgrRUU2MG13bzJpRnd3RFZWbVNnQzRuSW1KMC9McVFUemtYbU81MklISE41NDRoajlrNG5rTHhnWEkzT3NQa3p5elkyWUtOOXNtMk5tR1dHS3JNSVRuUStHVjBSNFJMSlBtRVBrRkE2a3ltTDY1QTdSL2dBaHlRdWhxRnBpVVJkcnhYSTBrbXRKNE50MXdZV1YvaTgyVmRIRGJUZWRwaFRBM2FOelZ6VkNZTjV6Nk80WGdxRHIrVE1IcmdBZllWbGlkK3BCKzZRU0xzTERuaXBMZlRXMVkwbUI1aG1Mc0pTQnFCWlNaTDFCZnpjMm0zL1JsdkIwbGlnNmdwTVdENFlIV0cwTDFNMnBFYXVxN00rSXpaMC83dmkvSzBjQmNuR3lFZlF2Q3RFZnBPWlF6MG9lNVBMWFZrekdHTTJaVS9Lc3pnMHJlcXQwWkdTYlpaM0g5R2xpdDVpbnJHaTNhdGJJa2loUFNEYllMMFRiZ1RScjVRSkNyVmlvT1lpbjJNUGNncXpiQUtmeW9VQ3JEOEZDUkhUYjEvUkx2WHFaRXpRVXpucFE0S244NGMyaXdmQjJ6ZHNTNTNBS1RZZGZLcXh0RmxhQlBRK2RaRDNzajJpaUIzOFh1Qm9aWWNDMXM5bEFlZ3ZPZlNUaC8ybmZpMzN6WTBqVkVDOFNrNTVoUFo2VGpxZnJtQlRwZjU2TmdCZnFRcDVpbERyUHJlY1B5VThNVnJCeVpGdmRuU0N5ZUROVCtIWnZ1MzJlSStqNThDd2hRNjN1aVhyOGJkY3pmcGRkOTNDMjNYaWJzU2VOQmwrdkg0QjlqWHFKL25SdlRGc1JEWGFjSVRyZ1J2S2dmaU81NlZkaVRPaHJzOGlGSW0zQkpXUCtRQ1FJYnZ0ajIwV3FjMFl5bHUxTkVNUzVpUmE1Wnk3a3ZoQVhKVVRCQktBN3dCb3Y3RlhsL1JtOHBmRmxaNXNXUUJ2U2xFaitLWmtLVVhESDRDdWVKelhVcnhlTGFiNVVFMW5WYjVNRlR2Q3dmVmdQYUVzWUpGYU1kVkQvYUFML1kvNUxmWThFNGJJRWdNYnl5MFpMSERGMHRkOHRNanFZMjNic2l0ZWhkTEJ6d0pyUzZOOXNTZDkyQUo5d29hQ0JXaXg4YjU3bFQvUVR1K05wc0k2YVMxd1BIOHRqMlhDcHFlVGdLbkhvR2srNGprUCsvR0FEZWM4bmM2WDdJK3NnQWhFM2M4bitGUkVqZUtBWmd0MldHcm1XTTl6VEZYbDNicXdaMFQwUUVKT1RLZllUWFFMc3l3NVRFZjZrRVdZVUpSaVRBWml5WkdLVVVPb1VVZjhxQm5sMFBsc1BldHhLSHVmUmgwRnVhd084NGQzQ00xN3RpWUl3MDVOM2N6NEtMNW9peExwd044aDRob3JTUHdidFBNcGRLTjBFNlg1SUVtSU5udEVRZWtHMXYwM29lWkcxV3RVcmVoaHBGdFloNlk3VFoxMDZlS1M5RFh0TlIxb2Y3dnY5eENRMHNrSitsRVdvU0ltODBFVUJMT0JoVTB3ekJqd1dRNmtZT3RsMEI0ZGVYeGFmZEF2cFRVdGRlZ2IyaUhDdzNRVzFJSnVtanJEL1pNUFY3VU4wWTBnQzJtdmRUOXhkY1FrUzEzTm83WVp1REpENi9FUi9zTGlPRCsya1lIc1g0dDFEdmlJU0VML3B4ZnlPbmV1K1E0MmYvT3V1YzlLS3lHa2o5MlZZU3BjRjhQNHZXNHF0bHJsZjFjUWxnYUwzM3NsQWVXaEc5bG5xMWJaRi9CcklOeERWM29KL0t4NUVOUkxqNFJJWjNMc0RnZGFRb2VBWDZTMTh1bS93Yy9UYU81QlcwME85Rk9sUjhWUE1ZL0ZKNXVCVDBvNTVNVW9WQU5ndTJRanJoSWV3L21KUmd2REVpb29nUVBzaXNja09JQkMwRzljZitVbjFPai9YbFRITCt0dmhiZHByQkxQd3V0VGR1MWNsMmdnL2UvaFI4UmN4WkdXWTdYTlJNSWdveng3RmthWldRL3RUemRIajVCbWFhdjhOb0JwZ011UVZXOXhkb3h5VlRuV2JpM3pIc21ZOGpSMVhMUHA4aW5QbGlZck9jQ1FDemw1NThldDhyMXpTc3ZaSzNKa2p1YjY1cXdrMUNIbGF3Z01YdzRMdTFxODFrUzBuMDNackNhRFhzN0VpVzZSNG0vYkhMaHVyQkZSY1pnVDRGNlZneEdWcWRZYUVSeTFJMTg1UGtEaitZN2dBaFU3SUpvSjNYMWp5Ti9ybnF1d1R5QjNSRFF2dk5ENzJDNWhHRHdnOW5uUUxqZ25BNEMydXFYSTB0K0g5MjZYa3FZdEcwcC9iTGZHN0dxUVV2U29QQWZNcFpabVhhTUZyZldzNGRYTEh4Q3FtcU1DNU5xcUpuc0JtNmZ0Y3dnTkhLUG1RU2dBTGRiMnEyS1J5M2V4am90RUk4Q1pYaTRaVi9wYlpERGdBb2lVbmFsNHlmVE1QSHErcE1WNjNmT2JsQnlNdjczRSt5ZkwyMkw4bmdibHlQVzZ1WW01bVBRSmZqaTh2TXZzNnBNY1pFQWp3eUZ4NlA3RmEwVnNYWkUrdk1yaWhqV3JoeWJxZUl5VHJ2dURIdnl5MUhGTWtkdHlRbXVPcUhJWDRxN0hMOElFWkxtaU9yMW1XK0tSNWlYZFJGWFdIeXNiVTFyRWtjSFNCRU8yOVo1Ni9lRnhRRFdiRVQrOGN2YURwSWRDS0h3bys4dGNPcnNpRzhOdzcyWGxsWktnZGJEZUxFMDNraHNzdG0vaWZHSzJOcFJjTnRrYUx2R1RmUHozRTRSQ203OSs4UEs2RklpSERuTDQwL2dGRXBMQ3R4ekIwbDV6ZW1hQUJ4b1VLUStxd1N3cEJSa0pRSy9sUllvME1IbmdoeFR0eGl1dG9uMTdCNENEOGhBUkhSTk5vbEtlaEZKVjcvMUt1anFnQmFBTEJtN24zaWdOSW90ZEFodjN2NitTTVM0ZWN3L1A5aHBsNUozQzFSTkZnY1F5c0gwcXBQUWYrMmxzMm1BVENoYWZrNVVrTGxnOEdZN0c0NUtXV0d6QjZ2OFdvRWFoODBQUGhaakphamhYQ0ZQbVRPaVpMMzJZYUNVeVdYdmlZVTVmdFAvQUlEWjNiRENSNUZna2hCUU1tVk1vQXprc3Voc2o4ajdGL0MrZmprWUlFVWlTa1ZHODdRaTBwTWM1S2RyUzVCczJpbTMrdFE5anBaSGNTc3VqMGRHbkM2VUtla0c3SlVQRjVKQkN2MkwzTTdaMERqMlZHdmoreklXcHY2VXBhOFRXbnY2TlpLbG9HL3dla1pGd2dKQzdjVWczNld5N3B1R3NvaWRhNmpGTmZkM1dvS0pjM3VsY1VIMVA4RmNJU3RjYjJjcUdaWTZENkxhbzlreTNTWXJUdWNQaTN1ejFoRTJKaTdJRGtKRFdsZzY4ckNrWnNiYlUweFlSbzFKdFFFN1k3b3d4NHlzcXc1WXg1eFRpNVhzUW9lRFJ0QXU2UUR4MnBqYnJBN2k1TEhwTTBOQ1dyak41V2NxMldtSnF3VFdtSk9LanpHTkRMcEJGY2F5eEhwbUVoMStLdkdFR0hCQXFnRlRIV3p4ZE5OOW91SjJNZHdGRFNjbzFzZnpVREpIZkhpMGpCRk92YUJOQjJKR0dqcVJ0WGtIU3RrUkRQQzhxRjRlbHdjSFUyRjE2ckI5ZFJjY3ErdUxyczNhK0VHazcrYzk0MGw3NzNCZDliZG03WUMzVnRxc1VDWXpHcjhmUnJQbEQzVTc2eUYxM2hkVksvbzZWNlpUdklRNGVUSlZHMExJc05tMmcwWXlOMWRGb0s4S0IrSlgxUFFxdkhBWjlrOGFNUUJvSUV5QldYdHNGNitOdXdYUHVGdHhkZndUaHVJZTBDcGZScDFNY0xrNjZiNW1CYkdUaUxNNDFtM0VwWXhpRDNyellzZHpibmRBVTRjUkI4TEg1dzF6QkZ6M2k3R0o2OEJaams0bS9kMVh5dDlMNzVNRU91a3h4dW9HWFZUWHkxaHR4dUtDU2hBRzZLOWpWSnR4d0dwL1pERzVTc0JCZXdCTC96ZnZkSFYzZ2d1STIvV29HOXBrSjhVckxyYjFDc0NrTGlXYm56a2JsVUc3YkQrbXVXaXlnMXZvWSsrdTB2NU1VMFZPNW1YNk00OEpwWGRNd3djMjY3YWdKY0RLV2ZabENCUWpkajRZWE9qRitlRTk3ZFNxTW1wNURZSk5rNDRXRGd3Z0pvK0R1SW9GZGlvaW5XdUZOamdrdGtFU0FDeFVxd2VqaCsyUkt3Qk9GaGZWRjgyN0c2Q1B5UmNPcmhyQnRJVXp2em1sOGdBUzArMjlHMS9TWDc2MDVYcHdjYnRGcXBaZ0VsWlNVb3Q1M09PNnFXMzJaRVRuQ0FCdmt4RStWUmxrZkliZzRwWTV5eU9tQ1ZFenM2ODVDT0dhVGlhMFNUTTZLbFp0RktIb2p3WjFGcEprblBZMDJlV2djTUU4NmVzUUR6ck1HNFdQcVRBa2lLOFdSRmtjSnQ3c0lmZnNWN3djNHluRW96eUsxTlNibGoyams1Zm5DdG55RXhIeFN2NGZaRWkzRm44ZndEN09vbFhjeUQ2ZjliZHpDWE5QblBXREtqOEpxZFdnZnpYTExTZ1MwOUgyb0djM0N3cEJkQ3pCUVQ4Nk1Fc01QQWpaUzlhVzdZSmtPb0JmZ09nSHJCZEs2VTRFS2lnU0F0L1V6RGFJNkRmaXk3YVVKcVluNXNHbzhwMG1OdHNtMkxORlpCSWEvUDErYU9lSG5FZkJBdlZTV2VpWk5sVEE0SlRVQTNZUGcwQlZxenFWTytYb1VTaUw1K1h6ZXV6cHdmK3orZ0FPK3VwdXNIQ29MaTJWRmx3dU42NjNka2k0eFdQa0I2UG9SYSs5UlBjTnMxN0ZlTU9hcXhhYld1QVMva3hOeDMySE15Y3dhdDZOVEZQNmladTBwWXRqbnYyQm5ONnJwYXRiVDh1cWx1NmVXSDJkUno4bWNEd25FbWVteTg4TyszK1luSEZEME5lMHhVWDhkNEFhTTlPOGc0Y2E2eWpvWUpHc2YrUFpGeUNsSVNCQ05pTGcvdWs0SWF4WG5Wd2Y4alRZYlErUFVqd1JGOG5CdEd4bW5nNzdjRkhTa2F4VWk4SVEvMmFMUitHU05GMTdxdzlPeU9JUzRyY3UxTDAweXhrSTh0emlaQk0xbGMwQUw4bkpOUGJVK2FkbnNEeHBsOGZic0o5eG9TS25TSnplUUVXcTdIWTFjNTNPMkc0c2RFMFlTWm9tb0Qwam1oYVJCL1hzVEZLd3dxc2JCbG5NdTJ1MnNlVC9xbExld1d6azhWZzF0SjdnQjROOGMxaEdpaWFGUVZkQzQ4R08xWDByd29yZW9IcmVwSFRYV3EwbzdzMVlka0JueGJwRTJWZktveCtaOHhrWkFMNHR1QWFiOE1penZiVU1IWHRVNXV2dkI0cnRZcU1zRkxkNXBSQjJleHIzaTJqc3ZxSGp0M3czZDFiSVZOdExBZ3BGNlo1bkQrcml6ZzlacVF4M05uZ3FZbGdYVERXRUVMOENqRXRhVFBnVjRoR3V5UG5ya2lERUkzNWxCTUUrbHV2d2w0eGxSZzJxeldQRlZPc3c3aUJJdTJXcUYzNCsxeXZVZHJNS3FWRTdoQk91MGN2RVU5UzVaRjVUaGdrYlRJRDdHenFiRHhvVXM1eHBRei9ONklKSElVS1BobGpKUlI5RHgyaEhXemtwL0pEelZLb0Z5bEt3YTBqRWtxaE5UaVJWeTFFaTRSTGQvL0pjVytxYUNKb253Z2lmRnFGZEZQcW9lTnJXNTFiS1h2d0xMc2hpNGNhRXQvM0xBMWViSThCWisrQWxxSGJYZlI3SUJCWXdlaXdYRk02UjMraEt2M3A0blovMGIzOG52cTQ3M3FMUlo1UXdpYS9HbUZYeThxZVRqT1Nidlcvb245REE1N25ZK25kRERsbUFnQzQzTjcwYmtTNzA3S0JGc21rMlpjUlNZdkRUVUdyZkN5SFdYSUxDSEw3M3RuTnVNNjRiTmQ4d2wxSlg2Y0tQODdycTFOM1FHcG9CeVdtRHFvbEswMSsxYTNsVGh1Y2ZFVm5HeUw5NCtnOUsrc2NFTGE2TS9LQVBYL0pWcWtRYkpOelhISjFqTDk1eUJoRm51bEdXamVLYjBKejRKakNRenNES0lmY2x6Z1YzSHlsRVc2NVRyeldFNTdPRjlsYmFhbGthZzgwa0FLaHRMbWJFaTlITWN3NWVuSSthQlArTDBLR2h4dUd6OFZMakhVVktjTU5QOHRlaURFVmFFU2pLZXUxdU9pVDE2bEdVeE9XL2xVRDRGWm5DYld3V2RlcG1GbW1xTVJQZXFQL1d6a2FLdWhOUVFYaFhyNlBUazJrYzZEWGlhNGZxTmY3dGpPWjR5L0hiZG9jNGE2aldPTEdVaXlxb3lxNlNPR05NRmZvaFBaaWlrdjhoc3VNd29SRVUxZjJlMFBOVnV4d2Q5Wko2WisrRFVRNmZhWmh6bWFwTm1IdTQrNGpZQVJIZTY3N2NuSkZ5bnozZG5IRXBwekRNNFdaZExDb0F3NVMwN3hMUk5aRjNrOHVmT2lCTnB1M1FBYmRicDV2T1huZTd4REhybkhhQU5vNDdBMFFHT1pNc2t6cHB0bE5ObTIzYVYra0UxYisrR0VITGp5QnNqZzV5QzRrS21zVGZUZlZSNUluMGlaWjZYZHNBcVZhenhCSG9zUkZhVUdXeXlGUXJSRnFTNExuaEQwTk9vZkw5b2xiVTV6blRKK2R6VU1makZzbGhnQVpIZnNLVFhlUUVPR2RkRzRmZUdtbmYxMVltRVZsbFJnY3g2NmxNOHhmblJiUU9Eb3pJSkRHU1A0SW5lS3MvVDBMSkYvOEp1b2RjUDQ5K1hLMXMxd2lMQlNMbWl2am9aZnUzMCtzNFdRcE5iSzFCZmFMRVdqNXFqY3JxMnB0V0dBMWFGK1BjTUpzK3NJY1ZJVzRaMFpHaVBVdnJKRkRxUmVWaFZQYWFQUGh2V1lUdU1OeHRWenJTWmQvZExJZnczMC9mcjJ5Mkd3dEdtVXlEUnRscHdva01UNmN4RnF3SnFuOGZNZnI4c2lMdkhFdFJsTWRNbWt4cThPVGd2WGRNT0tETnlOVnNxMUdPYUpHV1JqRGJ0Vm9UcXoySFVwUGpvNWhHOGQ4VGNkVUNLajU3NW5MaG1lU2lnQnNBcHNyTEl6ZTJEVXRCOXpPVEdrRWp3THVWQ0o2OVpoaVg5MDczQmdXcllISU5jN0J2UndXK0R4RTRNbVF2b0JXMENFN3JJdGNCeFVtYlRJZGhaUjJVMW55UDhTMC9qWVNYQ2ZUbXZZcmdRMFlROXNla0ozOXpVTDNvQ0hSbklDdzQ1d3NjckIwN2szdHpFeUpBTDR6WHBQdFZpNUlWNXNPRmpJTkQ3MzZGcTBvV2lFcUNRL2RMYkJubEZ0cW8ybGd5NkhUdWUyVjlEYjZhNytQUXFLNWdhWnB5cm1pbmlvdEpWa3N1cUhaNzJWSXlpME9MRDBYbkdjT3NzMUQ5ZEJQNGhQRVdNZE1sU3lyall1TkZKSEFDU2JDM0QxcmdPbWJBK2k4cFpNRmRQYThxT2lwckpPenZNZVpORXF3R3A3TTVJaGxaT1hGVi85Ry85RE9lVzlacktVK3pBd1dHakhwS290TlN6Y3YxcmtibVRsNnJkT3p6WFUyejBzZnR4dERpN2ZxcmlyVUhuMXA3ZWxPakhhSGk3bXlmb3cyWmlpSWlYY0tab2h2WUF4NEFxYUJaSHhrZUtwK3RZMWtRUG41MC90Z01PNVR2VmE1MlpJR0xzUkRoTlR4dUFPQU9vb1k0a0NsdzBjRGNWMTVUYTlpMmhGam9NT3FTRE1sd0w4VnpiTlJzd1RpempSWU9xaXljZ2dIZjQrKzRvNHZnUGJxT3hkZWZ2N0ZZbXdZWFNDMEwrV2RDeGxVdGJFMXpEZGVnN1VXZnM3cE9KQ2RRak5FQmorZVdhZHdpcjhYYldyTGJsUmZQbkt3cmhpUDdzNjZmaktsK05CdlMvZ3lFQmJhMlVMYndTdGZUazk5emZ5ajR4MmV0RWJ5MkFKaWlDcHFGSWtoK2lMUUkrdllsNWxiVjUyTVZwbTRyS1NhenlFM1d4VVdyOTFMbXBwa3paQXpqT2drdHQxdEVJYUZ1UHJsVHhVN0FTM3RzRnlOakdZU3ZRRjR0K2ZNdkc1NjZWaUVqZ3Y2enVZU2o5Y3RUNkhFaDRLSU95djgyYlpkUDBYN1NNa3EyZFV1WGNTYURZZ2ZaTmRWeHZ1dHFzL0w2UFlrZWUzUVZXajdTRXBlanQ3OHc4V3pEcWFyQ1VCMHJzZ0NONDFCUzcrdUZwNGR6NzVLalFwWStBK2Jzd2NlbGQvRDRxZmhxUU9OOVUxRERMcUtuSVRpNExBK1VvMEhmWGRHNnBtdkZiZmtpckZIZlFXN291eDRpMHRydzVRQ3krMG9icEJDaS9sU0dTQkllQkZwN0VQRktNVXlDeUQybkVvMEMyUnpGeWQ5SEc4WWVQaFpTUlRIZW0zMmgrd21GWEJreUdGclVJVWtIRGt5dFdKODBxQWd2dll2ZitJWkZpM0dZb0dCNDNuS0NLU0E0ZGJlV3pVZmZGSzVjekxFVlRsWEF1T3BLdHZYQ0pOSU1UV0hwbXR6eVJXME80SVBxS3hDL3hJRkZ6aWNaZ0VtVHNlQzlDUkxnYjQxczMvWitDNm9xN1I1NXhzSE5kTWN0M05OVkVuY0V6V1BmSTdoV0ZwYjRGMjgxcDd6ekhIM1FIcytTSmJadEJBRjZxVjJTeGVESE9SVTJIZjlTL1lEMnpYODArSlhiOU4zQmNyQkhOY0pETFh4UjZ5REkxN1FJbjV1emhyNE9oK1JIOHVTRUtWTHZNWksvb3U3K1poeGlKUjJiUzljR3Y3L2tJZ0ZtVEpNVHpHWUl0RjhjbnBBZkp6Wno0Tk1WMytqLzZJSlF6blZoRy9PNHRBZDBjaElieVZhVzhlQjEvK2Y2YkE5VE51N0lyZnBRWm54UzZRNVdIRGJ4emNjaU9MeDliVGFYTDFtVVJOK25LVWh5OGlydmoxOTZJQy9VcHlkRjZZU3laZWV2ZmI0aHZyeGlYb3RvTTQrNVY0bnY5SEtjN3VVNVk4cnBwV3lQdE9UU2FlRkxjTzQ0TzAwb3NYQkJrVW5SRytQUzBSK3d4UTdMTnhvUk9PVUhhRE9hZDNyK3dQY2cxM215T1VOYk9CUGRJclh4Szl5dHNGeDNpWTFGeURSMnJKenR6M1NhaGZIRmZ4dmJHMDdyTGlEcHN6RTBQUndtdERrc0lJYzVHYU5DcUhkdjU5OGEyWDZXNStMa0VQVnA3QjhMV245aFphU2ZIL1NJZEthdUkxKzY1V2R4L1dKeStyVFBSeEJaQjZDNC9FdlBSSUFQTFhlNGNSb0dsU3FhSi9pSlY1NEpucmVmaGhwUnY2Z0xkd29MVEJ2ZDBsUnc2TnYzUEZoMjFDdWtKZjBIcnZnODBGak5icE9TbmJuWVoyT2NrenVpVlZydEkxb3Q3UWlBdEl4aSsrUjNpY3pQYWxHNTlqTG5zeFFZR29DV3pZYTJuZUZFdkVBWUdQYmJaU2J2UHN3dVNBdWpidEZkalU5QnN0MDAxR0QwZE5iejN1b1ZPRkVDaVNvOGw5RGEzdDJCOWR4WDhKOHBaSXpKRDZ4WVJJaGxVcnlkVzYyYXVEMEtHZ1pCQldRV2ExRFVPbExmQ2grNmhzZkhqNnFyKzk1MGQraEEyYldYQ0toaWdQeDhZL1pER2hBTUY4NzBPQ2l6eUJXR29LU0dHaDRFUFJQRnFSU3FZZHVCOTdsWnBTQ2F6RENEOXBRRkRnaVhqR2E2RzBTYW1LU3F3RGtzZHgxUWJFMWp1T21scG5INThFNWFLOVFhaDZGdVdRWS9jNHpsSklMemZFc0ZJTzN1U2hNVUJPTWhVM01QdDhoMS9MQVBsRlpkaWN1dlFMdzdJekdORG9rc0dMREFPVXMwbWlMcTZWSGZGT2JGWkRGY3NxK0ZjaUNFRmY2ancveDFsSlV6UGUvVDBheUtXTmZxL0IxNWxYVG5mZzFRcXNOSkxtOHhQcThKdWE0akZIMnp6SGJCaEI0dGNEMUtKMjZnU0d1MEVVMDRndFRtVERWL0dCOWRIR0hzRVZUQlpoUE5MZnI1dGQvME44cmUyUmtQMDF4TGc1N2h2T1hBZXBrclpWRDJIUlcxdW94ZlAxSG5NN09ISUlKN1o1VWc1Rmw2aEs5WHpSTVd0VnBscmc3b0gwMGQ5cHQyQjZQSkhGN0tVeVZ6bFovYTRqNzlKZ3dhVkJRVmhkd1lOdDk0bFovZFQxSm02ajFncVhjK0p5NHA0aDZhWndFOFcva1lxbnBEMDAwcFZBMzFHeVJ6VDJMTjYzQS95TWQrWDd3OFBjUXJNYzhkTjFXenBPNWhMUGpENXJBbTJhSHlQUjZEWlM1Z1F3b1hmeVd6UnRnSDBoKzMzWmNOenlkLzhidWh0S014L3FZVlVMVUFIOTZIbEZTK0xiSWdnRlVXYk1SQkxLbk0xbGhGSVQ2TUEvSmVlVE5tU0U4ai9DTXQ2QlRpV3U0MEt0b1YrZUg5d2hMcE5Td2ZZWEo1dVF4NXNFWVp5cGVRWFBqR2dYb2NORnU1NVU1R1ZLTnJUcTJVQXVLNTYrMUhKRGEraHptY2tCWWFsY1Z3ckJjY3NQL2JMM2pleXU1MmYxUTNMd1l0dElWSEhJa0VXSzFLcnE2blpxVndFMDVPNFcyS1pJNnQrTSt0dG5CUW1kWksvb3kvektNakV2L3RpNFVEUzlqUXBuakRJb3FjV1MvRHAvMXBlUDFsSnhna2p2RVVTSTVidXpTeEYwRDExMGY5NnB6QzV3WUVkVjJJM3ZOK2I1dTR3UTNjUDRta1dNd2ZCSy8yYzhUZnlNQ0pvM21QemQ0Y0pibm1xUkNwV010R0krQ25jNi9CZ3lnNjdmVHZDRUNmNW5KL01xMXMxbTJxNXIrQjQ2QVI3TmRiWGM3MlpJdEp3cmVyL2JxYnpjbHp3cGVzSUFVMGlLRzFWeVBDMmZxYjZKSDd3SC9GdzdJaVNxU3YydThiaHpyWExoUGpyWDluQW56MUxLbjNEL0Q0Z2ViWTVwMFdWdEE4RDJhNC9mNWdscUZ5RkdUTms3T01BY1l1WHVsYWcrVDJzS1JvQ0F3ekk0RU8xR1BoZnUwNEMyS2xEanN5MTkyVHRQVnhmd0Q3ZlJWcXc4ZkhZWjJNWm9qcjFjL1FhRFhCaDROOHpoMitDL2dTUW9MYWdJTnVTTjVBWkRiVmdxS244dkxxdzNBcFRUTDdsMGM5LzJDYUppV2pmbGNEdmNiZ2VIVTA2VkFqWER3SXV2T0RVTFJUZHNyY1cxWExubjBXdmRpUDVON1Q5QjhVR1BGd3o0MG0xTWk0WjBXMnp3K1RMckp5NHBpTDZObGhGZ2hBZ21ob0pFU056c25DelpTdXljaG1GNlY2ekplOUNGK2FXMzM1S1lHZHFxVGdJMHJlWkoycXhUMXdWRHBoYStnbnlNd3I0TU9XR2FZM0JvdUlZUXFDYkp4RG9CSjJ0cjFVSW9hMnFEZUpaSU9kL3hjRHRhdDh5VEU4MkxQUXJ2Ykg0TGxOQWRWMHgvdWU2SVRMTlJWMzA0TFAwME5UYzFpck81NVFudk9XdnRXVWdnTE9rdWRPMDI3MGMzRjdBTERXR2RUMTFCZUJyTHJsL0lTVTE1TjNnUFVxOWNWaWRTNkhxK3NhZFVxdjl5VWxnejVOZ09KSVZQQ1hnaE5GaVIxa2ZYckl4TnZ5UnJJRU10Q3ZyY3JnVE92TDJsZW1VTGJkVERwc09EckkvSmZzS2ZKcEdhY1hFSStyMTlDaW5mYldxa0h5aXVMVFNsek0zN3dwQWpHUnFNWkR0Z0NETGVBN1JBUUI0eEUzTVN5c1FrU0wzeDVjaFp5YkFhOWRWN2IxZGtwNGZYdktyQW5FQ2JJb3Z0T3dpNEtRV1p0eG5xYVMvVzFYUkJPZUFrY3VkUDRNem9MRjNaK3lkNjdFSk1jSllBN1pMcG91M2NsZWZtQUVTMndtVnQzNDlEM3UrTEI4VnJUUXNqajRzUmVMRkVtVTE4V2tXcjhmOUJNMG5IR1A4eE9UK05mYmkwcGxwZUpCRXZkWkltYmZucjhyMzMrZDA2UHdMQXZncmJHWXVjWTNLejlUYnp3Yk9USTlib2w4RU9HbXc2NFlEd2tWczFucnZ5U0xiZ0FNdHFINUpQWXlteEx6TS9namFHczJ1d1N5NE1aaXFnUE5lczgxWGJWeWVSdlBKU3RqMVNPM21OWDlaNXJhUEFCR2hLWmJ3RlhFcTA2VnJQTnNmRVM0cDczZmhyZ203SDdtOXlXL2h4d0FWeWx6TGJBbTR3Qzg5UUxub1VJVnpoYlp3Qk1Ra1RIalNLZ1JWUEtyblNVUklNeFAyYnkrcHdtY0tXVFF0dWF4cDlOc3NiWmFMMFd5TitIdk1lZHduL1p3bXpVWUt5ZGJiUG5ZeEVTTjJCWXZUald4TWtCUDhnQ3FSVFFTdXdUbkU5WUZpOGJFcFEzRElZenJZR3lCLzBNOHN4UENKYTB6a3hud01wWXhtNjFKazVLcWF2THF4YkNrbjhHQjJlNkhJcngyZVc3V2hoZ2tlcEJ6VGlySlM5S2VLWWY3UTJTckZTZFh6aW5rVEM3VGdQdkxEL1NGUGRseGNrMkxURnFoZkVCNGVxOTJQdncxRW83dzl2NHF2TUZxeDY1TktMSHV3Z2ZUUDBmdlRtMCtHYUl1czlETEwwQmpKd2R6TTB0cUQwMGtsUE5CempHcG9DaTFRd0xka2xVWHRpRG8yM3dPaU9HNUo3eHFxbzk3anRma1kyUjFhaVRkWjd0WWhLYVlQQXlqbnVETmtRRmtFdG1IUWluSmJrNnBDS0ExTTM0SnMyenBHSzJEcnVnWEFkaVdlYXNRRDZnVHpYRGRQWFR3NzJnRjF2Uk50bWl1YUZkWlFkTjBPYy9zQ1NYNFUvRm5pUFBrd3hOenhlYmJodWhXeWkxSmRObC9lNzJNY3h2YTRqcE5qNVZZRkpRSDdPWkV1VXZ2aUR4akdLQzZlMkJpOVh0bHNaalkxSUtxMFNDM0ZwaUJhTjNnSnFPT1IrUlJGYmNROERHL3VVSitheGpyTTczVXRvOWFGRTJyNWc1Nkt4MStDNDRuTVY2cWU3ZzRNTWJwckp4TDR1Q24xdExGa2czUGpaQnBCNnlBV3FqWDByelBoMWQxSk9PQ0tYb3c0SVU0aUlRL00zM211WEhvejhFVndld01GeUhOVEF0NTRhd2xVejZ4R0MwNjBHUlhiSDEzT2puQ3VvbnVOYXRDVzduSlhxbUFlalczaWs4TTNjOUpiK3dlb1QwSklSMUxrQ3MzYlJ4eXBGSVZXNTJVajQ3clBBalpDaFVJaitMWUhaaDRSWkRaZFJDTmNLN25iVlp4NzgvbUM5QWI1OXhXaExxOVZicWV0VHFFdnEwclBXTVJneTR2QXJlN1I4Y2s2QkRSK0owTlQydnkySDNMYmZNWVd4Y212MlRYUTRDQ3I0YWdxRU9FMVBGaW8vQ1pqSjJpWkF0YTBvVE81UFJ5RTk1SnJ0UENZdUg5QlBEaWJXeG03WDEvOG5wTHhWZC9WM2JCamw3VEN2R2VIWDFtaWhKNndGOXl5bSttcU92MGlMcVM2OTM1WFpMYzJ3Ui9VWWExM1dSZHBoVm93OUh1M2g3Y1hubFVtNXB2bVY0NHRMNnN3OHR6endWNm4yZlEvTEY5bnovUDhKSnZYeEdCdzlqWk1HeGF3M2IxZUtHb1JkZTZIOEhPUmxlaFZVaEsrNHY4VnBZbXJYMXlvZ2lONGJocDgrZ2VkeVlXY1dZMGVzS2JQc2JpeDdUM2FyYy92SzhFZEZPK1FPZGRHMGxra2lQMzFFVk5Oek9oMnBPQUttNkV5QmhzLzVnc0k3c0hkVFIxY0l0SkdjN2pkUXVWR0g2aCtPRGJFdFZsWWphSUFhSDNLc0FnODE3cTlSVU5zdzhMSmxaMzY2VTFGRFBYcm8vWGJrbHZnYTF1RFZqb2RjVnBhUTlsYnlPem1MeDlLcmlaQnh4dTk3U2ptMmFiUGdHdjlJSm1PalUyOWdxTEpmbTVtaENpV3FmU2NPSldyVVE3WnUycmxndTJkc3l3Tk9TSVR3SHRYTVh0a1BYS1pJNEpBcU5veVJCUVdqVjBPWVFtVFNwemg0Sys2d0NFMjBZSFlRZUlrYWdVWE5oV2g3bG1wcUFDWmc4VUlneTYxa2UwYzROUk5JTGR1c1MwS1hrYnVvR21LUWs2bUZRUDkvUy84K1YxQmlmOXZwVVd4aktMODYyenNmR08vL2VKbERpTitEVkNxMmtaemRiUHZOTmxYRndxdmVxdnRtM21RQUxxSXpXMnR2bHNZSWEwVW5oUlpiemp4aXNMUm9sOHhzVnBUWUZsc25GbFhmQ2VsdUtMQ2tVb2lOSFM0MDdsTlliN1Z1L0tBbVRyWXZyNnNQSVhRQ0hpK0NZUVRjeU1aUXpHdW53QllEVGNNc1FheEVFSC9WM1R5cTZsUmovakhEQU5KMk5yWnp6QitzWVo3RzFNcnRJUmp0MXNRZmY3c0hxL1hrMEp1SGNUbW4yLzVVMTdCRktrdGV0ZjJ5Y1EwbHNOME0vWEJxQVB4and5OXBId2VMblJCN1hKYWJOY2lSeGRvREFiSVhSdG5Yd0VYSkpjZk1uSVNJaGt2cGZXWW45bzVpTEhWVXQ0czlqcEJJNXYwMng0VmJ2RTQxcHFPY3RaMUZhbGptc2VSLzI2cmxBbmpwNTNxNXlCaDFrQVlBYXNFL3ZsMzNjbHIycnNDSzZ6Y1F5ZmgvTE0vVmZoaVQ5UzViemV4Q2ZodUNBNDU1Mk1OZmZpVXdXOWpvOTdhcEZjU1QrdllGbGswRW9Gc0liSmp2RUpid21YU3NRWG95RXJoZzBWNTh2Y2pFUTRWL1JiMkhRR1AwNjluMlV3ZHc4TGpnSE5iUjlDbGdaY0VUdDNEK2RHN3RIRHRLLzFsaU5xeW8zdjlIU1ZxMkRnU0JTU0xwcGQrQnduQS9WczE4RWxmNUZleDVrYVNDMGF5anI1RDJiYjlzWTdUZm56bjlWSGY2WHkvU2REcnVCUjN2aENYZUU0NU1FeThDY1lGZ1NhRnhqNXE4UGZDSzlYcGFUUmNuQnd6M3pQNENGUnZTTys0ZEoyR054SDFaenh1SGNPNEhYL2ZpQnhtMHVldFh1d2sxRDlPamhnYjIwK05KaVpwbFRYeXJ6NTg4UTh2akJvaTFiOFFSZCtobUliZTkyeUJhaHhtbC96bklmSDA1VzVFZ1ZKWERPYjZUUTdROUliMnpmUWlNZmZVQmRMelBtL0dKYVVzQmsyUVFoQU41RGpKUThmWFV3R3BoUGhiUkdLVzIwYlJHL2krdGE1YWN5ZnBJZUJWRXdPMDcrRVZDc29pMGRuMVp1Rng5Z0lqMTlneWdUTEpsOUM2cGVHMlJuc1pzKzY1OHJ6Vm1nQ2dTRmNTZjBlTlgyblAyR1FOV3kzb0owbW1YZTBzS1NJYXZobnNrUmtwd3VzRkJDV2hZbGREd05RSWE3dlV3NWg1THVvZVU2dVQvT1VVMzFRQXZFYXI0bGIvaFdXVnYxcnlOK1pmSWVsR2lXV1dxZWE0dmVTV1lXUDhXL0U0YzJFS0I1Y0E4aHQ1WHFIM2NrQ2hEdnFOcEQ2S1Y3bC8zZm10STlEL0dCbDF4SVczMUNFSzZGdmhPSDg5UTYvRFNndVJ6cHczN2RXM1JqODZpYTdKakF6S1cweVA4SUQ0VGFXR3J4REhTWWd2eVZCMkhsT2ljb1NCNUFqYkh0amk3b3M5cU9MWUpTRFB3dG45cXdKTllaNzVDMnNSSHZzNUY4RGp4YnJZNHdra0JsWGNsMm5BS2gxOGJaQ1RyWDRMQ2xWUXRQK3JkSVlhQnMrd0tsSXFITHNGVll3TUV2TDJ5M1lYU0g0dndUcm1QQzRCMWNFR1NTSnlnV2RxeEZQbUo3enY3TTUvS0R5S3dlZ1ljOTJxYUl6RWlMekx2dXV1RTZCOFBqN3dDWlo0UUhyUUVDcHNIQTVQa29Va3p1ek9SODQxdjNkR0pVRXowQllxYVN1VFJQSk1WTXh3Wmc3enZpNG5SWlIvU05RMWRncFN3RjQ1QkdxU2pWekQ5dzVKT0pxSkZGTzg2dGVxMnFBUmMycUJIbXEydit6M1AxeVVQSG9rNTdNL0IraFNtMXkwby9OS0ZQa05iYlBrRVkyT05Odjd0SjI0KzhZZktZQjJ1S1JBU2o2ejBCQ3JOWWwrOFhPeS9tZzBKUWNGWGhUZm9NeU13QVA1RUtSNU81QVBxejVCVXRNbmRjTG1hN2sraExHRHM5Wm1jZWtFVGFqdkRMa3E5K2FkTHIzZ3JxeEY4MWNzcDlpMkQ5R2JlNW94QXdqREc5dXpsUmwyNkl3dXpYM28yclRKTUQ2MCtBK2JsTWtUckxpcGRMeVp3NzM5SjBtcjV6R2NzUVNsM0lwNFdueFlwdVdtSHNDaWVKekJPQjNob211MjZjQzdtK1lqQmxKblA3SVoyUmM2bTZSbFZTMzdYNTJBWi8wUmdZd1RHWlRBaEFzLy9SQ0xGb3VQQ2F1dUw3WXpocUZ6Y2JpQVA5VVNPYW4vZERpQmZNcEZ5RmxQSnh3aXJCWVppbnhLOERTMGp5cFNvRnZ2dVFOTWo2czR5eUxjSElZcEd1Z0Z2ZGlJcm9GZGExM09KZ0Z0WGVobFp6QjduS2pmbmF6RThJdFIvemNDNU9sMWpraVR2Z1Z1YzJPK0o3dlFkekFCYTIwdVh4M1piYU5LWXpLREVjejNhWWpTODNuVkhYUzhXb2lHam0rSEszNDAvZnVuVzNaKzFTNE9rV0lLbm1EczVZQ2ZpYWl5SDFqVm1POUVOejB5SXdPRldkdVd6V0RDazhjNENkVTdyS2o5WDJuYitqQWdKRHJaanlHbmY0MFdBSVNEdG1DbE5GeU9ZN09mOGc1TFozNDdhU3FFZDgzREcwZ1g4QmM3WnFDYUF3RlVvWGpFSm5ndEhoNk04UmI3MUlvaWwyU0dqcWxGMnV5dXVrbEprajBqS0FBdHJVcHE4cUJveG9WUVJ2USsyZ3pFWjlESUNPZXVGZkhrWXNkK1k2K3F4d2RVNXNXcVlta2V4LzN5VVhoc2trbEpYM0xjY0RFakZoZXRIV0tyL1pXc2Njam1ZK3c1NlBPZEdGdUhzYkdTZWN5TC9QL3ZMMFVMMWpRVFgvaCtXM3k2cnJqejRHNDlFblZ0SWdEUkJza1dXd2NOaTgzY05CVzVYaFhtR2ltTVh5WStkb010NlFmcFZCQjNNVnN0aE9CZlE0NmliV0p3WDV1WjJCcEJEZXlJZzBPWWVQeU8rY01Ka1dLdWlHWWlLMW41WFQwblQ4SW0ydGhjeUV1VjZjN2NYVXNteEpSWFg3YXppSGV5aDBGOW9KRmJOUExVZTV5bkw3bHRqV0RLMzJqSDZ5bmtGKzBPbmdsMnVQWURSbDZ5Z3BWTkFkNitKMTl0MEovTE1pNG1PMTloZHc2cTkwazBxU3BaKy9TeGxNMFE5VzY1MTJtRlhZRUZnWUNxYlRzSy8wYlBxa0hCQlBtVSs4ckRjWllaVlZiY2dHWjFyZGZId2FxYXd3V0VmeU81SUw0WVNtNXZLVmtpUXI3WnJUZmRaNTFYTndFSDlxdDZ0cEZhYzFOYjZUcHlJV1M4dXJuSDNNMzNFNHdoeWxzM0g5dVhhbkJVczJLaGhZYjFjeHdnZnIvWG8yR2swdWgwSGQyNkx1cWlYVHREcTM1LzVBRlI5OE1EVGFrUFVpVXhBZjZVaU5IVU16Si80WVpZOE1PS0tKMnY3Witqa3FDaFBqM2ZCSzdMUjRLYWNVdGFCZkhJSjdSYit5NmUrQzVKVHdvZkI1eVhlbkNSU01pTzZ2ek1DNVFIa3NXZWxYa09PTmQyeFFmVExXVHNxRkpGWFpLeDE2QXFocktWcml5Yyt2U2lyK0dhN1R3NXVMaGlVZDZqT3ZNeXBhK01CSWM5M0tvRkQyK2RpVlF3ZmFmVFRZMXcvUk82dTBiWitrTHpPSnFTTktUODhPcHd5VmpnWlcwVGVRYUNqM042Q2NueTBqUk1EcVhRWGxXU0l3SkNRS0NjUWFpMnlNM3ZoNTdObk1KSDQzMjJ3RlV5eWIzVCtKaTlZNWJxUWh4cGRUK1YxWGh2ekoxU0FoNmRzdXFLL3VHUGRSdVRaMGkxL3pHT3V1ZE1wdXFJSFBGaEV2anpJbHNUYkx0ZTJqOFk1VkgyR1hKRlpYTjhWWkxCbTA2OHBhRjVINzNTSHd3V1VQUEw1SVJ1aWZrSmhyWjJRRksybTlzRlllZ1FSMW5yR2dic2RUNllldE5hQ2VWZUdTMWN3MjMrOFhYMUR2SXVsTkFaVExnVmRybWRmQnp1azBKN1VURUtkaEk1azhFWXViVFdvV1V3dXg1WVEzejRkQzhkVDczbHE4anFwOWNNU2lFTzgrN2oxNGFFelpiN2xEZVkweXBLR2xqcG1pSmRuS0Y5bUllSW9MS215UHZBVnBDSFlZbE5jZWlrUkl0dTJZYnc1bXpVU0tjMm40b01GMzQ5N2JyWlI2L1NOR0tNT0IxSVM5RlA1VS9iNWJRNVJrOWp4bVdDODh4TnF3VHVlVmZXYS9TdWxnWm0yaW5CMUEzMjNVYzZUanB1UTZocnA2YzludGpkVEREdkZ1WXJCUjR5NlRuWkY4RVhuTE4rUk11YTdrWFhIaGpIbVVkU2N5eW13cFZ5bjRzUlFkNjJwSXRIdFRpL1B3M1VlUjdYWWNqdzh5SWdBekFlbVlITWh3d3FQSlh5MnI1MmVpbmpxWmZQNklPVVRmaENTQkxzeHNVZzdTdVJnTW8yaGR4RmhCR0xxbFBrTHgvQk9oME5UUjNWbC92STZzUGNwQ1V4VDFMTktYTUpTak9DNStFQWdQNk1BT1llbUlxeW1BazUxTlVJRlptbTdRaS9kdHh4Z3MyVThFZ1Q2d1YxMWp2Ymw3S0xXRGFYblI0OUgwenJoQ1YrNWFFekJ1UVo5M1VqdHpnQ3J6QVpvSVJMcHpKZzJpUVZ5cUM3Mkw3VDVsYndvOTRXRjQrQ1R4YTZZOStGcmJGVzBDbUVPTDF2RnhXVXNXR2JTanRHL013MXV3ckU1TUp2eTNhcUZmZ3RhcG9ydXplRnZZSkJoVTZIT2F4RUw2UlAvQjVObFliUXQ4RVIxU0Z0MTNIdmVVQkp4SUlzYnJlTDBkNTUzYTZYck1ydmI2YkQxcUdlWVN3Z2J1UHQ3N1hsb3l4Tm1vWGFucFZTVW1RV2xFa1hsb1dZVGQyV3ZsSGJDTUYxbWdwT3o2SDRBemw0WDRIa1BzR2trOG8yM25zOURKTHZNQkZ4dFNIQ1V5d1E0N3hPTGxkejJEam4xSkdGNjRKbFZwOHk1dHNlQkJXNXg0cE53OSsrWGVYYjRUU0psMXZPY3FKSWllUTJMS0dHZjNqZXVrbmZkR2wzQldBa1pHLzFYaTVHeEdKc1RZZnFGVGVIRzFsNDI3UklYWXNCWEZac2Q0aEJpd1F3RTZOQ2NqajdYY3FEK2pWNkZZNnA2WDJtYmRJdGRBcVk0MEJRcjhkUVQrMU02RFFNU3lnY3pZVEo3SVVwN1pUaXBPNklkQjdXcHRnUFFmazgxYWpINW4waGRUdXVYZ01pbVY3Z2c0Z1FkTWtLQWpDUTF0L1lLbFNCSjlUN1BzWjBmN0oyOFVlV2pMN21hSXdWdWVVUm4xWHlIdW9nYWJHdis5SVNEQnFnaldKQWJ2ZXJKemo4cjh3d014OWs2RkQwWmtaRW82bkJoNFpKUldDVUcydTJYOXFBN2RJeHQ5Mm5UWkwrZTdNd05sRnRuME4yd0U1dmJsNktDTzJFVXMzV2FLSWlHaW5TQ2Roa3k1S0RYdG12VDNRTHZDczM0dDFyM0NOVk15alNGRDE5MVBaQUdJaTBYdUhsTUd3enFTTmtZRjRTM0NNRVRVTjM1Z2xjdVdwU0pkREVzcXRUM2ROcUJnbjgrT3dFWWM2OW5qSTZPbG95N2ZhSkV0VWtWcEZrQnp0S1BLZUFhZU56OEdrei9hZXpEL3hJYmFPK0dKajZxc2g0cGUvVDJicDBtb3VVSUg3ZlhDa0dOdjZ6eGdsMFBaRlVsRHN3YWlGUytUc09aQzRhbWt3S2FITHBjQncxeC9Ncmg2ODNQc2VzQ3Y1TWw5ZFFZRHVwamJpbDZCOGRhcUJLWGI3SmVqRjZOS1prbjVoem82cmVISW14Umd5akRNVUw2QmFyNmtaZHI3K1ZZVVl6WngxZk5ZdUZybGl2VWp4dWc4K2g5eUtBVWNyUllYMXl3VzBpbzZMQjdteFJSZy8wZjdubnNjQzJkM0tFdnVFRXA4dXhOd2g2d2N1K0ZlM0wwS1E5cXNKUU82NElrUVFxU1VBTHdsT3hMdGVUeVVzY0VjdTUycEF4WndjZ0RrNVpyVG9WNHJ6TTNMVEo3aXE4Znd5LzZBTVNsSGtLaDhCYkRVM3k4bVZ1czZjRTRSQ3BzZFZZVG4vQUR0ZFhzbEo1TDVvT0R1VjFSdGliVDhSYzQ2YXZWbVBHQmgxRzVjckFlbTRqc3FJbnZ1eEt3bU56TTJSQ3VDbmxPK0JqUGRZai9VNndIek5KakRKelRHbUhtV25uTlZySkJxOXhkd3k5Q0NBRjlkazVKbFRlWkZwNmoraTB1T1RVbDJqdmJ2RzdYSE40cVhsRHNFRkh4bjY3VXlOZUYzUVFUWnU3L0g3WWloSUJzaE5wdHI5Rm81UFV3cTZJV0E5dmgwWTNSOTVOMDNadUxWdFhrTnZEditPd0xkTWc2NGp2NUtjRWxhVFdvK2tkVU1IWkd6NlkyRmxScDVWWFVqZHBhSmY5RFB5QVJxN3dNZzJBODVNRHNVZ2JtdmNHRk1tQkRQOWZKSGhqcUI3VkpqTy9NQ1FPTlBlOGhsQnRYL0lKcFRXOGhCRFJyOHlBRUtqSUcxZm9OT3JLZm5MYTFaRHltd3lMWDdwVlV4V0RaVE42RytweGRXUHlVK2dkTkN1aEpxbkppOG8yYXVrTk1lbUVPMVQxNGtiL1VRcGNrUmkxbFd1anNvaUNXcVA5TVc0amUwblpWNnhoZ0JlNkJTanU0ZW51c0g5Q1FZWlhLZ0JUVVVQZmM0TWRSdDlmOWRqaWdxVDdWUjBKR3hXVWNLcUYxZG9mL2VtUCtaZ21ibzVrUE5id29SZnpQcUIrbzczZERiU3JxTDJRU2ZwMFBFaE1EMkxmVzdOOFlIT283a2x1blZ5VlZHYzdLZnE4N2h4MlZBb1JpNW5qd3VCWE1KQkZoL0lydlh0T2pkUklWTThick9FSTVYNnI4S2lPQTRWK3NjUFA3d0toNHBPalE0YURTbWRDYUtHeUNnM2xsWm9aVVM5eUp3NHhkeWxoZXA0THNPL3p6cGpkVlJuK0lIbGR4R0JRdzB4MXpTMGdVeHVyY1pjTXFMMW54WXlYK3BaWDdkZmE0clg0c3IzZ0tTS1VTRHNoK0NxSlNxbHN4bGRjZmhTSlJNWUJjdUtZa3BVeThkbm9KZERLVDV1QXNLV0lmaEdhdnVxTXhGckYyd25ySUl0TzRDL1ZPMEtQSUpWRkI1VE1ITmlrQWFXZmd5bWxXaFVMd3JERXIra3g3YXhaZ1pCTVdzcHN5bUh2ejRnRHYvZkZJTGgzTGE0TlhwZ04xZ1dGMExwSWVXVWpvMElOVXJMTHRUbVpMU2wyanpXRUdUR0xTTVpJSjlPUW9FcXFmTjlab21tRjFQQVdFUGV2WDVIKzFiSTIzV3hacXNDY2Y3UXpTSENNZmdpNGZvcG5tRGIrd3NxVTJOT1pCdS9lUGdXMWxlTm1mYWRnK3FwK3VKUlo3WjQ0blpnRWhpQm12TjYzd1FiaE9wbGQzZHpTbGxCZDlkeFlUNlVHRktrbmNLR2hBWEJOVEZCWlJFcEhieWdRaWR5bGF2d05NaWRBdHF6U3JiNWJLRit3UG5YNVZ0Y2E0cGkrMksyZmRlbWpBUjR0dEM5K0V4K3A0aDFSV2FEc2tmbyt0YVFpOC9RK1pPbCtGdU5IbkRmMjlLM09iRlpqaTNQeEM1a3B0RnVkcytOWEg1WTU4bnJJN0JTMnFaeGR0M2NoR3FCcW93NXo4MDc4VDFHclpRbVl1VXd1NFU1Q1BrbVF2Vnk1UGtmY1NUOVJLaWZEK08wTGl2NzBTZW9pSXpJSE5qYmFvNWlwUlAvUnNGZjVQMzk1M2cxY3BWNStmMlRjQnlJcUFZc3RDM2hpdVFmbkd5TElRdHFiYXIzQ3ZYRC8rbXJEQnduZVg3UmtCTmt3L0IzejM1djJNc1E0TDNkaHpHQ0NRM1ZpeG1hM0VvWXk3dmVZdmdNRGVqNXRBdkUzMXhyclBKTG9kUlJQYUZoWVFzWUVqUml6Q3N6U3BaSkpQcFlQb29uRjFmUE54eWdBZURQeU4rQlY3bFh6dE1YVy92WW5DMHcveGhvZ3NlL3UwVE51QkdONXgwUytRbHRtcEtyUFVyWUNoZWFpbGw4TzlEMW1BWjUzTlcwa25va1ZQaUg2N24raXdIYnN1T1g3d0xTN3ZLNTVNUDdxNytUVXQ0V1JOUGpxUmI1bk05WlI5NzlYdlFjcjF4eGNyblR0YmpKTzRiRGYyRTVuZzBveGFPcmQ2VzlyQzJvOEQyd1BLMXFYRHU2UGN1dVhBd0UxeU5JUzVVU0pvSjlqSTZYVG5LSmNqVnNZMVpTK2UrTVEvNGpvdHNkdkFlT3FvUWYxUmFEa3ZnTndDUTc0RUZzY21XaC9SK1g4NWJnR1I2WitocWpGTGNRaUh0YklvRlZRdEt0ay9ESCszV0J3dEE5QWlxTC9sK09mbHRSZ0Y2SGdxU09tVjVwOG1rNkxuV2kvWWl2NUFoZ0dxSHM4ZmlhcXVuNmFGU0lINzI4dzRDczlFL0ZiK1R1Qzl1ME5Ldk91WnU3aFZtSk9lRFB6eDgzZEpnd3pTZXdsaFVnVitHLzNvMlQvRU1UcVZzNVZZK2RHVmN3cXFnZlRqMFNOUVZpZGpqYnltQUY0TjhjNWNHb2J1ck92WjArUnZveGE0RURLdCtBNEh4dXBWbGw0S1dwYndkMmdWR3Y0R3l6OGRBZnQvUVNOYWgvSE5zV29UelFrVDVQVWVQNzEyaTkxa2I1VDkrV2YvSWNGV0JsUFhUTFViU2FTU1NPZVB6YjZOQ1BxWFUzWEZPRXBjSnNlNzlaOVFPS1BYbU9kcm02eEc2cUx1TnZJeU1pVnJYRkFNOUdWbTM3VjJpczFXdytXNStIWlErc1pXM2FERmpDT0o2ZUpBNXRoTGg4bmJUZC9JRzJDWE9rTXltakhabmlvK09qMW9hVGRPNEorZGR5Rks2MCtwQm5ESFJpWExNcjlyWVE0OUVGN1J4Y1NwWURaTDFqWTBxdWkzc3YxUVV3WnlKREhGYlB1N1BpK1BhSnN5NDRJdEN2SDdsYlJnVlpBWWRyeC9PcGl0L05tQzlLL0xpQmpvekxCSnZpV0lRYmFxQUpRNWl0KzJjdVQrc3hVQjYyWXphQW10YVNpZFBmZ1c5eHQrZmJqWUhzRnhaMG50eGYzbjd5a283bUhmZmFKMm9WRUZxckRvNTY5NlpyRkkxTXZOZGNRdHBYbHplWWRJT2FQVk0wTjJ0NFZkMXJ5NzgxbjZqVGRHOW51eDhsSEM1RnpSTWhQK3c5MTNHOUYwWWNEU0cxUEEvQ21jTW4rTGtyYW1SMDRlV2NCMk1HdFhabnZHSVFPa1ZSMnFtSTh6QTRSZlY4UkluWTNCTHF3UTcrVFp4NkI0eWNqM3pOME1KVzRlS2k1M09WdWNndU1TNGdOY1RRWjZFRVVrcld3SlltR2F3SWhNaWFZZTBNaXZxaXJkV0ZCSml2Y1NWY2ZsZW1CVldudUVSa2w5UHFiY05WWWpRYjhDR0lJQjJRVVFFYUI0elVtNysrZENjUFlTcVJpM1l2cTdvczlXQjgrYVUyQ0h5L0ovNmFFTVd1ZGF1VUtFcXI0TGZwejBCVEg0dkJNU0N1NzQ3QXEyb1VvL2oxTmJaVElFdFhER2lubTVmQWE4UVpML2NoenZXNlNOMGdPTDlhWGtxdWtNV0t2VE1QWDEwajR0UzhORmVSeVpSRHo4T1BkWldrTmlBWVMrYWtQSjVER2NFMk1raGk0dVVCc1pvaVVjczFLd1ZScTZBdWFyeGZhMnFjMXV4SW80QWMxLzRGZzhmcmE2djIyOU1iZjJDcm1qRFFCcXRlRERvNnpIMTN0cnd1bFlrZ3ErU3oybFNKelFWdmZMVlF2Z01tNjA2MHlVWnlrRmprZFhJclM1SXNvZFROY2Q1bENnc0Zobit4SmxMSjV4VEVYeE8wNzlCMUFXRk1Xa0J3QWh3dDlvUEFaZUhRUW5qSmhWblJ6SFpnTmdpcll3SkhTSU9wS05wUStYdEJXZGF1Z3B0K2thWTBNbkkwMGlka3k5cnBjd0VaQVRRWkxjZHpKVHhTd09EaXhIeTZUTUhzQUhzTXQvVWJHZkE4RWtVbWR3a3g5cllOS2tJR0VEQmlIbHA4Qkp1L0puN0xCUlhMcUlTbk5uUjdWSHQzbGNwVWt6TlFGc0cxQkI5NlZodFVINFM2TytYeHZSWWRpVmhSWUNHYm9NTkdPdE82dXZsbmgyK1JBMnVCT3dNOFNUaXRKb3lodmhycnVRcmNDZjIzcXBGSzd6QklMcStvNlluL3R6bGtsUmF5c1RwTCtYNWE5RjlQNWdtSGV6RGt6bnZ5SVdRNGFSaDNHWmhzY1V6RDZlM0tkcGhLT1NnUWhiN28yWWh1YlZwL3FHcUNmalpQYXpsNzZwUXRZTExSNUdsbmUvdUo0YWsrKys3VUlra3pUejgydUtLbE1qaitnY3U1RVFPUnRtWllTV05Wa2lnUzJsckl1eHUxM0p1YW4vSm9XQzJWRWVaemU2SVBIQ2E2SUlaa214U2hWSC9vdUhVS0FXMG5VR1VSVzFNblM4eU9PSW9lOFlUSWZJSjVRU2FJaFdqSXhqOEhGVlVOb1MxZ3dzU1o5dzJySTBKUFJ5VTZLaGxHNm1YZSt0Znp5NWVjV0IrazlCa0xDYmI5TGIwMnVCU3c2OXRwUGZhVXU5MWhRd2dheHVUQ096U2h6TThsdFF4bTZQU29FNTlQNVBEdnkwZ3EwQWV0VEJCWjFZMGRSbEwxdlpXamtNc0gzWmJ3UGdiMHBOdjJPM1RJdmtkRnpDaTh5UDUyUXV0bUlxakJONDc1ZUFMMjN4OGhYSFB3dVg3MUpZajdkY0F6U0FpMC83ckFwdERHaVVQekM0YmluM0ZlUmlpTnM3RkxiTUZaZzc1QUlWSmVaVzc2UFh0Ymo1QzdlbmlwTysyRFVPNVhFSXJVWGxTK0RHSEJ3RUFYNjNkaWtzbjlsWEp1cks5aTMvYmxMVnJURVNDR2V4bGZOWmZteE01MnZUeW9va3QxZnQ2eUxqNnFWNUZnY0NYZVpsWjBsSisyS1MwcFV4Z1ltcWIyNUI5WmhYVmNHRGVkSjZxZ0psSjJncDkza1EwU1UzUUo1YzQwM1NqbXYvRld6TFNtbXI3dTkwTGhpN3hTMHVPZkhNd1QxWlNlQk53blpjWHZoYTFVV01kMmVzQy9DOUVlRHI1UmNlV3dySlFyU2hPU0pBZFU3NlZYOHlha0IxaFo5TjVicnN0cDFPdUxsZGdmeVlVT256eXNoQ0ViMGZaY1NrK3ZRZzlITk1qRHJobjZvQ0xNNUF0aU9nQ29tWGZhSXpyU1ExQjhyVXVuU1RKV0NpY0pPL0sxMjNMYkNnakZRdi9yZ21IQTAycFNZU0FhcWNrbUVhQXdWRDBWVUFKZ3J3RmRDZWxISmJUZVkvQ205WWFYblM4ZEZ6dTN1dU96UkpEQ01ZVzlrb1B5ckJCZ0R6TEFoZUxXRlFPYTljb3Z3cWt5SU1QNnR6VXJBclZlRTVLNURrblZHNDJsd21EYjBTRnFBNDQ4TjAzTmJOVU1EZGZRTXZ5WWt5OFVhVU5XTHRhdjk3REllTGl5TDJqT2NqQzlBT2Y3RU5rME4wczE1dUFuRkwySitscjZCWjk2cktESEJjd0RhSlhVc3FhU1IwZDBRS3c1N1k4QU1OYWpmdlhDMlQwYVNYQ3pYMm5iSko1VkVhQVpMWW5QaHFnNE1yeDRndFJXSWdaMDN0eElnWGU1YkJHTnR3eGpKdU40S1hkRmROd2ttS0w2eXVwSjhMRERuVlN1a3RnY1lGaVBqL1lNRENxR1ZseTJ2VmZ3NmU3UjBtbWxmdTBJN202RlFWUDJucGkwNXFCOSt2RUc2ekxhVDllbTd0M0dMK2VsVHBqZXFETCtGdmtwdVd1MUtZTnNoT3owZzJLSi9ZNWlTWEpGWnkyWWkrd1pBMVBMcEN5UnFwVDB3UGRReElkN1F5L1E4ZW1aOUlKVGRzRzZ5bHoxWXJpZnJ2ZTd3eFRqUmFsT3pvVjNDdXFMREJDWWViRFVOaXY1UW5Nam5BU2FzL1Vac05QUXZFdVg2YmZJVXJYZ0ZiV25FZzcyTWZzM0tZS1F2S0czUEVCVGJEeU5UcUxWcytmS2syeE5DS2RhcTlNcGVXWjZiYkNqblNWc2dHeXVPZXFhdURTa0hqbWxhbUhXYzhvRkF2bTVnRnVZZHY3MUhPQUx0RW90NjVJNHgrZXltSEtLVGRZTVViUzhKRncrb2h3WFdVNWNudUVkNm9nMEZ4SGpRYlpGQ00zb0VMT3hUZDFTRS9zalpXaHhQdXlwSU94SGhSQVFXdjZxWW1oZVY4TEtQc1pkOVo4QUoxTXE5bmg0ZEV1OERoZGRrTWJRb3RxeHVUUm9KV0c4NXZJMjFNVFN3Q09vN1B0MGROQ2NtdmJYUUxRajEzNzJhSEtXUGRNU0xReFAxaXFBdzlZdENiT2VOek5XR2JBOEpPWWRMQ2pqM0pPWVhLcU4xeUlGNytMMS9DOEVsTk02T0ZzSnZzYmM5VHBES3daVzdkQ1J3OUhFK1FTVElxakZmM21MdTlaK05PZlRObElUWStIK2ZJY2RCcjhlRlVUVlFMaEZxMTE0Zm9yVlVadU9DdXh3RkhDb1M1RzBvSXZ6aEpla3RLVjUwRllLQk4zLzVBVHJpczZLcVBETjRqYXFxWVZUNDNtSitqRDg4dUROZGx0VmluY24xMzRyUG9vQ1lzWnoyOHpoK1A4ZkQ2Q3ZtTk5zTmpBSE16UUJ0c05NVUo4dGxRZnhlVnVoMEFOajJOc2xjek9TejdWcFZnOERZSm85alFZdzFZNGcrS2E5K0phdUJSeHVNVlAzSnlNalZyOFAweG1XOVJETkFDQlZvWkFKblE0M0xBNmtSelh0NGNOM0orTENFVEFyZVM1T3lQVDJvendFTnMwYjgwdGNTZnQ3Wkx3bVM5elVKMXhFdWdiRmRmSUxRYXl5N1lrV0l5dm1PWExtSWRYeFpCczIwZTI2a1FsUHFzL3pScW0wMG1IdDZNeWRaOUh1LytOZncvTkt0UlFCM29FOWU2K2RkQUV1SmJLZFdWdERwMzhVaVlITWtZTW8yc1ZncDlHVVgzSFFNL2hYLzNjZy9CcjI3UndkWlE3Y1ZvRkNPQnpnTTI5MlZsM3NmcFlKb0loamF0SGc2c2cxeTFTaGNORDhtdkRRbmR6cXZNQ2xsNURuVjJpVlFVUWs4S0ZpOUVwNDJ5aE9NdUttOTNrckNqVktEUlNla0lrWTg4elNjLzNuOXRCaDNEcjJuZ205VlZCN1RHNm5TUUR6Z29TUlZtVk5LdE4rY2wxZnFCT1g4TDFNVEdOcU1zN2JObncwY2xHSzA1Z2ZCTTk4MzRnUGNTZm5qNEhqS1VMV2JTblk4TVlKNytmaFNXcFNjZXQ2Q2VVaGticmFyRDM3cVNNQzVlUXBsdE9ubEUxeVlrdk51OC9DcXlFMVZORitWbzgzRnAwaE5DWHRiVnZzYnc4SFZORFVwR0duUDh4ekYxZ1lUV1JsZkpTZk01YnYyTnRRT0JSWjlYMUZzcEdJcVVxNXM2THBucG9FYThlTE9ocWtXUkRmak9ibjhHQ3dBeW5oK1RJcmNkUUtBU2JUOXNXRU52SWFuM1RDSVViMXgxWGd0b01FVkEzU0N2SVNLZUZ3bU9HbFdpMVY4NEJ5NEJhQUkyVTU4YmdjbGNza05RVTRycUpFM0ZHUDIzUjBNMnMrSnhlQS9xQjEzc3dlNWRZbVU5bWgzQWsxQnEzczZjUFR2L0kyTXJtZGpzT1B6MVpOb2UxR2ViS2xRM1NFcVJGL1MzdE1mM2g5YiswRGw1a0FWd2cyUVBjTG1JTUdRMEhndlZ2VVlYU2RHQTJYN3ZSTHU0Zi95UitCd2t2eUdjcnRNUjcwVXlsK0pDSXBsbGN5b1FvSlZGUG9JT1Fkc0wwSmRnaU9iWUs2Q1lKT0lPYStqUFZRQXVneXkwalh0YjlKbmQvRlNQTlpRbXZicjB4ak5tRElONm1RazlXTGV3YTJGOVVaeFRqODF0b0FCRVVmd3prbUhVWGx1amQrb1lleUxMT3NlOXpIczVlR3ZWczlQNzNOMEQ1VkdxS2pJTk1uUDBsMmxFRkh2ZG96MlRYVGlFVlZVanVMWE8rRmtlaGh2QXR3RDFib3RnR0xlSTZENkxHdXNwQ2hkaTdiSGlUSDRDM0lldXZCaEFFQ1lOOXp2SllSNXVibkVnUGNVNmVMNEdNY3IwRThHY2hXYWVRbkxxTTJUUTNsZFJlOEZva2l1Z2ZyWCt4MWtiaXVhRWVHYi9GVmpPZkprd2FCcHE2U3NUSXE0VDBMY3ZJdGFmTS8zenRXT2pRZm9VSzAxNENiQTBUQlRZdlAzVkRQQjM4bXUwNUFRSGZ0M2NtQmU3M1JlenM4Y0pscFJCaEU4Qm1hY1Z1bzhmaTloQkdLNmFqYUpiUTFjT3ZjSzZqOTJVVit3cFFLYjRkQnluRFRBSnBVNVRwQlVSZzFTeVpDeTdWWi9iTGkyMHc4K1dydlFuQTlNbVZ6emR5VExxWkcyWUlLT2lBTHVOdnhTUXNWekRubjN1TGZPa0JhYnJtdUVCSWRDMGtCT0hmY3ZJQ3VycDd6MUNjTDBSTE91STdkNUlIUXI3eEtUbVcvT1ZocUJYMVpGWmNKdUwxSTl6bnlEZ1NPa24rOVVIc3JQOXp6d1daNFJxQUdtRGJ4Q3RHRzZ4WXJDdlFFMWQxK3VZYU1KQ0xpRXlUWlNxSHIzdzJrUnViaHdpN2FTd1dVQ2VJaFdBUHJEWnMvdXZoZXhxc2lONXpVbFBpYWd3T0hKenh0cmJKZ3B6NmFjWjMzK2E0S1lSeS9hNGVLNDJyWFJwUHRQTzVaK0F5MUFBYkI1dExTcVBmNE9vMk9nRnJPVWt2Qld5VVpLN2xpUEdINm4waElpY29MUFR1K1BuSjRDNmNmc1owRjlHdTJSN3N5dEt5eldFUTd4Ti93QlFoT3BHNlFBMXNQbStEejgyYVluTng4TThoSVhsNCt6Q3RWNXZ1ODhSRWdCelpaK2ZUeldHTWM3UllWeWtOc1JqVHFXeFI2UCtLVVAzWHlFL25EQ2U2ZWtYUTg4NmJiTGlQZTlUZWZxdDQ2TVUwcmszNkJRcm8zcHlyTjRCZUpaTGx4blNYYWYzWXpaT2g2R3BiMThtZlBQY1lBN24weS9sZjNIbGpBZjhCWXNLOS9kK1NOODFGelN0K1l0RkV3MnNyUHVNZXVITXQrSGRvdktsaTRobTFGeWd1L3I3NWMyQWN2TE9OT1hNL0tvaW9SYjB2dXFDREV5MXVtUnhzSmZpOU95NEVBd1hNZ2ZuYXhqa1FiMFdmejB5WFBub0tVSDArSUdPekd4ZUxITFloT3REa0pRTXEvMkZRSjRRdVBuRzBndTZIU2p2SGNKYW5lck1mREpVYlAxbjU0YkhsZ0V5U2E5ZE54bVV6TVdWMC96U3grMy9ESFVpczBzcmhNYjV2NUxIU3Erdmw4UXVhbVFQeDBrdnhYS3ByOXlwa1Z5VThWUmNwZmpBVnpCM0FNa3kzNGM5K1NrNEErVmtUNlBEYlhDSklVdkgzUkduSFB4amRqdDBJdzNvbHg2dUVOS2tsZmdNdU9OSkV2SXltRGhFcWx0SnZwQjJ1bWZzVVl5Kzh0K2Jva3hXOElQSnRSRllCdXNLMjVORktIcE5xdXRhVlF6dFFSWm5idEVhenQwYVoxbUZZMjZXNlQxQVovaytobi8ycEZjN2lrU2VzK2Zoc2dCZVhHa0ZkQVFlOEN6QnUwZnlIWXBXSWFaWXJYVlNJczN5V2lNY0dIZ0I4YVhEeU9EVlc5VTJ2YVhvY0RJa1FzUEpVeUlNU1lmWHZtd1JaUDc1Qm1Xd1hNdDA3dmlGM29xT3FPNlA3U1ZGKzFLOFU1eWNQaXAxN2ZZdW5VSHA0Z2RPNSt5RGpEZjJUcW9MRUpIWTZ2UFRZWnNOanBRR1FHTXZYTnJma0V6NmxTSnBFUGtiN1RNV1dPWFdVamIrbHhjSTF1MHJCRXFYMmE1M0kwNkcvMVdwOXN5YThtVWlyNDgwQW1iV1VUTEhqWFpOSXNMNXpMWkg3M3V3bHJsS1lMMEQ0L3RTWVhHa0psbWRZMnZ1N1d5SFl4T1dMSmt2dzFHWm5lZi9iOUJNbk1VUWlNYkQ4djdkSFNNZHVMYTM5QkdjT0tocWNwdHpUWXNjQW9XMlRtMWQza3pXN29lMW82NzM4TTh2SnBBOTMybmwzelpkZHEyVGUrM1VGaEU2R0xndGNNUnQxL1I4NEJrcDErWXQ0UlBFM0Jibml0L0t2aGVkLzJwTWNzMnlmSFN3NGNNQlNyK0dLREJCcGV2SStqTzVyeXN4TFZEckRjZ3lxTHpwTGJ5S3RCOStzcE0rK1NMY0F2RUZ6QVp3VHNNNU41QVhld1RIeG1yMXM4MWFHVHZ5bDh6Snpna1pqQlZ0NmRtWkJlMUY3d0JGcUI2aTI1cmZ3Q3g4Z056czV5Ry9FYUw4UlBVZ05GSi9Jbit0MWlVUHordENza3lKdFl6TzNvQUdJSlRXdDBZN3dJVUEzMGFoYVY5TS9zY1IwZkNSZEdOZ2JxV2xSdVlLT01nS1BQQ2hucVJUQkRUdXpVb2FWQldHTWtzcXI1bHJzU1MzSVc1K3JZYU5zTUdZdHZrUHU4MnIzY3E0WUREck1yWU4vSStJU0gxVUVudlZDQitzSWZ2NzRZU1pXbnlVdkw3b1ZOSjNWV2xBMlBCa01BeHM3cVJWNjJXTEZlaGpqazhWcFdYMHhnWWY5UTBsWE00OU55WlRtY3VTcko1bUwvejd4Z3N4cTAxdWYySVpxLzNEZkpidlpBeDlGbFNFSHlwQVlYd2dZSDJ4a1hmNVF6cDJQb205UytET0k1WHdsc0hXYVZzd1h4a3NhZVUvaURpVmt4bmRWVHNiWUdleE5vMG1yRFJyVmFWMzRCQkNxWGcrMlRxeC8xNEt6TmtsTmk1M2VJeHVhZ09UWnZleS9aVGpOZFFwNVZTeURMMU80RVR5TDNPcHc4citJWi9BNE9aNGJxdytpc3VDNzJBTUZBRmgvQkZ5ZCtVMk90K2tWV1E1ekJ6VnVnMEs5MkNMa0JzazBEbkQzWWFSeTJaclpwUm9QRTBMWjhvc1YvaUVZTmR6VytFV1BvalJReWRiOU41SXk5VGl1UnF2Nk5PNEtWazFnUm1TT2s4V3JnMWZ1eEdadVhidzl3UHpVbkZmRGtjRXg5dktxZzRuQkNUSW5TWEozZkE0ZjB3c3VsQTMvMW50a3hUYU1CTWtoWndLTmdtRlhCMTg5Z3JpZmNxNGMwZDlMenpNYjZ0dmlwNEhoRk9sM3h5RHRVT3NZL3plMlRqZDRtT0dKWmVtNktyZFZYSFhFMlRmbEYvem9EQW0vbU5tS0lnUGU3YzRzMnovZmRCK25DdWxxY2tGTDhNSUg2aHVONWh0Q1l0TlFTZzZqZE4rNS9FTGFzd2JOelo4aEYwbTZTdjVWMENkcTR1cUlUUWg0Z2dENjV6VkhFQU1JMW9XcExoZmkvOE1LOEZLbXBMdDdaMldiWFRVSVpYMGwydXA0anJ2TDRXYjZDZEMvS1VkTnJsRGtmS1N3NXVGY1ZkcUpuYWFJdTFTUjRTbzVXWEM4SERTWC9UVVlCOUw4cU85WHJKK1pvaFR3RGZiREZOaUFtdXVaVEIzV29ud2V6WkpNOHFnbm1qTG94Q1FDV29nOW1ZL0hSUFYvbzM5VTFKakNMYWZNTWJyeFRvY2NuQ2U4Nngzbml5dDA5Ti9oNjZYZWRtRDJsWTRJRHlkUjcxNDRnc1cyQ2daWHoxSlJUZjRTdGZ3ZHRwMkt0WFBwdmp6UWlFNUhQS0RVOXY2TTdJTFV1QUtxMWd4NmZBZGxnU3JSc1JFMHF6WjAvWDdzQlpaSUtpOG96TzE5K1ZmK1ZXRTd1c2IrS3lOam1BOGVJZGZVV1ZQc2dreHhsTU5MSjVxZmJFYlN1NUxYeE5RWjVEVGh4OG1ndTJTbGw4MVRaaHF2dzlQOGVLUjBqa04vUzdSdmgxN1BGNThvUk9qSHFOdEpZcDVmM3JvQU1IeVk2bG5lQ3ZZZXJBYjY4MjlEcTFlZVJzUEJJWFZJbTVaZmV4ZGJzRWpLUzNScVovZWozL2xCbzNCanZCeDR2WlB3WnJsdCtDRFRKblNpWExzVFlEbHVNL3ZrZjE1L2VxZkZIa1cyMVlMVDRzYW4zWnBkSFM1RHBzZklVTS9OV21kWWRKY1gyRng4b01ob1h0VHdHWDFLcUxNUEtQN1BETkdxaUxvWkV2MjFDK0VpRnh6aUVPQk9KZjMyT05QbmdiL01FcE1LakRFZ1hUbzNDZTBzV2lxNjVWQlRtUjY0YlB4SElHb2g5ZnYxYWQ4bGFmWkdqNHJWaGZjQkdiRVgwQzYxQ1NIdE1XbGxrTTRvOHhPS3NPQ0MwUEZVaG9YOEFwV2NpSjdoNjhPMURQamMwbWI3NVBEQnVZa2JFak1RMllvMXNqNjdOdU54TTh5NnJ5ai96eTBnT0hVMXdkN0lEY3dIdjduSUVqN0U1eGQwTzdhMm9nV3ZRRU9kamJPMDMvR25OdUpUTThJMVl5S05vcWw5T0tVQnBnUVp5OHpUaDM2aWZZZDJSRGlKRWZXKzUybnNWTXBLTkJkcllOaWRYMFgzTXpKSmxwNHVjdjJvWWRhTkZiVHNIM2w1WGxleWVEMmxyK2NCcFBIQW1VL1BVOFdTQWNET3QvZ1IzZDBhS3pFRmZIRC90c3htL2ZTSk5KdzB3bnNtWjEwU2lROWlHbG5BZklXUjBsaEZDR20rRjhuV0JoTEljZEZWMTJaZllGUWdjY2grTlNaYnVpM3lKODl2eHVaV0tXcnd3NkEvaE1vU1dsVzRHdzFOeXhFeXVKQWp1OG9TU1Vzd0hKTmxyRkFPMG1tcHg2Nmd1K1o2cDR4N3JxOTRPcUQ2Sll6SURhSVhQc2pDUDhyTjNqOE5kSkIrY0JYWjlDdlViNDZ3VEFSM1I0UVdqYjI1QUlNeTdtd0RjZEUxcDkrcmVKbjFDY0FMYk55N1B4eGk5cVJSVnBSSTNyTFRLR0VtLzlrUTdSckNWb0dmOWhKa1d1bVhNTDloTDB2bnhwTTkzbmliMlRPV3BUL1U5ZUcrUXh0ZHdOVm5NSHA3bzhrMmR0WnBsbFoxWkJTb294ZzhUSDZKZXFST2s2NGpNZzN0RDFZYVNrbXRZQ2RuaVVycGRtaStQRmk3dUpWR2dVRzZybTNYZ2xNT3ZJYmJzZ3VadmhSSnNRa1BONjlWc3VQRms3akdLanMxWlNhUnJkOThtcDFPbzJ6M0FzQjZxbW1tTCsyaGx2WGFFcXVKSWhpOXgwS0ZBMm5mdHRXL2o3QnJnN3R3MG43bUZqMm1mVE4yNzFtaUtUSCtIU0pvRkxMdnd6WXRqTEdDaXhuWTZZOFdma2VQYzZ2SEw1VUZFRkVXR1pCcHZCWE0zeXBlMkJrSVRwRlRJSFkyRjBPbnFqZ2Z6YnVOQXhIQ05OV3JkRDA1aHhOa2xGMitkZEc3cE1CYllIYThqZUdZU25sZGVPRnRqOG4xYmhidVJVYmRtckROM2VWQnoxcmpPeDZsaU51a21lYXJRN1RKeGNvUjB4dXVaSVNNUk8rK1N1SFRYYktnU1VVYUo2OUFEQThoOWFTOHg5NXVtQkl5UklRKzBJVkZHWnpyY3plMjU0Q2VqMVRYMjJKMU9rSGR5Q0szQktYZ2lSM0dqaGVYdlppdDFmOVZOcUtYUjJvcWMyRExva0ZqUXZoVjlKVFl4aUQyckZOSUp5eWdWMVBFSjFLenNBbURZcFVSUzE3ZmlPV3M0VllJb0VIVUwxbS93amRHbTFZL3hzL0hEZCtoOUVSbi92OXlsQjc1Zm01SUFwaDViRlZyWWluTkoveGQwMHgxUWVCUk5PSkwvR1RqVkpicmNJR2lWaVA1ZlpQYTVraWNPUW1XNEVLNncxUC96YjFMbDc5dlIyQ0VSdVZxTHQ0cnJOSzFNQmxRUUgwUm9VUHpUOWN6eWlHalQ3ZERxbTN5d2xSQlV0SFphdDdzWWFSTlJNRTJyZ1Z3V2pTeFJtRFlMVTJkanJ1QlMzUGlCeGE4ZlNTdmlDY2hMRWhkNGxZa3d1NFpQVkhxRnVqQVZzdmNlZXFNdDZmNysybUducHI3T0pTRTNmR2FrUkRTVGViRGIrazg1VHcyeUtWeFFocnM3eWdIeWtadEpSdEZyOFBEUFd6Y1pscXMveStIV0xiNVpCRjZoeXREd3lacWZXVVV0Z1dJamdTN0VpL0NDM29Fb3BYWGgwbDU4MElyM1BZcTNhY2Q1MkpxeGV3eXBuZVNBaVU1bisrbkpYRThFWlpKNklIUXRGSjF5cG5SdzNabmJIY3VVazVXeXRFOHQyN2xKV201bGFnMStIQStGR3l0UjMzb1NPMVN5UTVhY2dOdTFjaDlzaGJ5SnpnOHhtZ3VrSjRoTCtsRW1Ua25GbEZZS0VCSjF0MitqaThlMy9McU9sZkhvOVRRODArdUFlL2ZIcGl4aVpHZlMza291bngzMWdHeWZaYnpsOGQ5dGE1NVNjd3pWQlJ4RmNPRFNWbk8yV1NYeE9xUTJnTnIxWFFZemVSRE05aGY1S1UwWHVyNjVIdms1blF6WlFlWHV3dmRsb3B1M1l0YldZRldvYU5hUSsrbkFrYnVtMWdFOERWUWUvQXRTM2F2emRTSEdCUUh6UUZhYzc4UFkxWDdHc0hCT240d1hFbFVyUG85MzQyN01LQnNPaUhBZkFTUTVOYlJWS2l4U0lNc2wvM003dGhjQTlxRnE4SExUMVNQN2l2YWhLbXFicGl4eE5HM043NGRVWGgwRDdvZWdqS2dqNWcwbkVtT1BOOXhXNkhLQys4bnBBWmMyU01VSSs4NU5aeWpWeXNQajdNUVE5dW1nRFh2Z0NsZVVuclhMN3dCblBOZ3ZGNkJJVXBJbUZ6NGxFWi9mOUdySE9HSy84NlZldlV4bFIrVkI0aFRzQkplRFRweXVLazlRL3QwaG03djBNWlN1bHgwWERuRzBTQm51RXUrWEllTmlkRFJXV0cxU016N1JkSFYyUW90TXpYYkFqUEdRU2dpNjJ1YmVnblpYbXArYW9aRVIvRU9JRThZL2VVWWp4dE5HWHJVNURsakJZQkJocTFlRDVRamlrWWpOZHRFdFgvWFlaY0NoRHJ6MFVIV1ZEOWhFdE8vZVpvY3o2dFZ2OFppSjRUR29yZzdUWHhaTWQrYWVJamFuQ3ZGRDBSTU54eXlRSlhRZU84dktNVmJkdzBmRXpQRWk4NElxT3RpRUlMTmNZemN5OGhqUlFEakRPSXpKelFnYzlYejFTMnR5WnBSOW1TNkdibkdHQmwvVk5PTitYRmhFSFpFVzJJTXozbk1DTE9ybmdqb0RYOFg3Ty9DZkhTVHhwampJRFNxeSsrLzBvcnU3dW5JbUtmTmlWK3BQWE5xSGU2eXF1bWFOcXBjaDJhUlVyN3g5M2VkZmdDMm9XejVYaHVwN09QMnQ3b1BPU1kzVVVzdEJaUy80Q1RJeGJGTmR0V1VNRmppYmhOQUlEMDI0eEw0cEFaWWJPMXQxSkYwTHNLUmw4dGJQRldSdEhuQ1JFUmF6bzVNTEkzaTNNQ0JGNVNoN1ZCZDJ6N2ZXY3l2RzFQUFZ5MUx3OU51QUJzcDlMNmxiMnRPTExaTkUrczFBKzBXUTBGSURmZXgyK0ROQWpjS1VGSjVJT2I1UUdqUzRJcE1Uc0FHQTVvcmFpdUVlNHkxS3JaM3J5bHJQQkNNK1FvaG1sV3NPVjh3WkNlOFgzV1Q4UFNxQ0VEb3dxWEl1NTNObFZ1aE0rQnExUWVMTzI5R3FzSE5VWndEZkpuNWx6R2FLZFhVU3dNaUlCVTRYeWtOVTVoUkhRS0J4M2VXSlEyYTFxZlg1YXRKYTd0ZjhlRGpwcnR3VnJLT3FkNjZMZnpYdXBLT2U1aklrTW9lQWdCZ1RvZkRSRGlVTXBVQUhNdmtXN0JRaFZhbEh2RnpSVUI0OGhtOUNXVUIxSnIyUWI2M1REVUgyWUhyeFd3TEl1NTh6SnhmanpnVUN4Q2dZQk03ZWxjT2M2MlFhQ1djWG9CcEdPR0FScS9iVHB6eHZUOWs3MkgwU243YnZ5ZWt2aWJrUXE4U1V5U1hqamltWm9XMW5EM1RLU3pzRlFPZ0JoNWh4d3FtZkYrU1hybmJoUXFhamUvWTMyMGRpSUpaVUJyT0tWOGR0Y3FnWUJHUklOTUhSSWZyYUt3UEtQOCtLSFp3V1Z5OVBuQ2lOcFJZa0VZTm1zaUF0SDl2VTZDRzFjamdxalFxL010Mlg1VEttamU1OTB3dHhnT3pFVll5VlVKaGUzSjltNUE3TXNsK1VoTmRrMDc4UFg5VFB3aEpPaGxBV21ZOGI3ZWlIMmR0aDRxMS9xRXJRc2FFZXNGWkpBU042cmRLcnRmbWtiNFhsMDNVWHpTZlhSdmk1NXZZTzFoNk1wUjJSTDgxRm4xQkdiTVpxRkZVdmNrd21va25SN0dZWldObSt6QjU1N3JGUDFEUVZsZ0ZDbFlRNHhLaTNlUGlBMDRodDNqcVhkd1VzNmlGWnVKbGtOZG00WitFRGZ0T0lNVkFKVW03aXdTdkdLcVhXWk9HR0FjSVg5bm1NdmFWcThhRSs1SUN3ZEpJVnpGdVdHZzE4akZOQ3BSNG51WjZkaXdFQlIrd0lNOXJkenBYemJZZVdZVXFoSzMvTGQ3NWRocnFuR2dFejFCM01hNWw0VmV1ajNQeENzMkhWcUdvQzFlU21vMGI5b01LeWJXdzdtWmg0Ukg0ZnE2bk5LRXh2ZFR4QVp4VjJEbFpQWTh2bkhZL0pEV0l4RmNqL0owY3pCejgyVld3eG05REtyeW4wb1BwR250Ulh5NHd6ejV3R3hmdzRldlBCUktrL2RFQmpGK1N0RzZWMFYrZk9PWnlJeHhxWFYrSHhyQ1BVY0ppQ2Q4OURjRVVtblM2YWRrMzFqNzhXL3JRWXRBZDF6Z3RzQkpLWHBkMTV1QzQ3Ulh5SzJyWTU1MnE0VTFwVCtid1o5ZG9id3REeXBndE5QWHBQcjZSR0VJSFZiYm9taHprVjEveExVOURrWWdsdk5NdFdpZ1J1VHUxeVY1TnZIT1Vtenc2UER6UHNDalJlSmdaeTFyZ25EMFd1ZWZCSmc1Unc3TllyVjBlWnpRZWJPWHVPZFlMejFZOU95aUNkVEpMOU9pV216ZCsxeDNvcHJsRXYxbjU2RVVsWE5IcnhJSFphNW1FYlVzaVhHUmhkUzA5ZUNka2RqeHBMb1hyVlZ5UGpvL3BaRTFrQXc3TWhqVHFZUkVrZUhkYkQ1NXNzNkxpSXViWWJqeVF5WTAvaklzdmwrc3lIYXNVNGdwYXpxYi9vSGxJRUlMK0g4WFdHQUZOM1h6L2E5c0MxRkJpcTZxVzdnUTRqMlVETnVnejA4c2kxSXVFZ1VhVkR4ckljMURXQVNEVGNDblhFdXdwVG1aZjBSY3hiTVhld1ZHV3YzWVJEL1UrVy91WEpGM1M1R2pLZDNyN2ZpeTFVQ0N6NHEvTHNkaUNZT3RrK1FKNFErbHZVNEZRcVhYeFFjemZUbUVXYUE1VFlvMmQ2dWl4WktPLzB0aWtHNmkvb05ZbnNZcmhMRTd6NElrUDVxSWhRWU0wek1SQSszZ3Z1V3pHS3pwVHlhRFVPV1BYMmljQ1VTMHZock55NDBqekF0MlQzajR5aVBSUDBBNDF5a3U1bE9ycXQ5ZG4rNGNhbnJXY0RkL2FFN016YjVTY3ZzMkRKRGhmUVlvdWNHcXB4UnZrUXYwN2MyY1ZCNHUxRzNSV1l6elNBbHdSSFN0WWthemRqY3VKdUtwcFpRTEc4QTNDR0Vnay9CVmx0UGJVTys5TWpFYTRJZE1NSTZscmFFL2RjOU1NNVV6NnhTUjJuUVErdzBCWlFEWUJnUGF6cDNPeXZET1N4cyswVXdhMkt2eThWalB3eVQ5TlFNd3VWd3d2Z1RYTWY2aFIxSmw1UVdMU2EySWhHM0FKd3ZsMEVFbkZleTlyYXVleXhjZUtXZHQ1QlRVWjdIN2tsb05TL1lkTHpUUXVyTnNsclI2eWJaY2p0QVVtRDBXV0hwTmJJNEV2MmsvelQ4UzB5QSsxNGRTdWhFcnpsM1VTSTN0U0Myb0VINzZITnVWdlcvcXNxOXo4dE5wOWtwUFRPYnZKR2JxOVJPWGx1SUVocWFobStpeDg2VDY3NFJiMFpPUW1zNk5wa2ZYamZRQnRxbTdDUWhPejZ5dmpRNzdBdUx4SWJVYW5GV0VSSjBobVhEKzFqMktSVGpWby9FUVBFaEpOdFJNN1RmenVQMG81UnMyVlRRNG9QV21WWE1GQVA5QllBc25xai83Ym9pSTIxQVJkYkdwWXRRTXEvQ0RqWHc1ZEF3ZFR3ekZyRHpoME5Fb2VHanVIVWVBckpyZFp6YllmajJXRjFHbjE5UHdlL0h4YmVVTm00SlZERlVHeUtESDFJZk9FZlJGdkxVNnJCSzFCWHY3U2ZGb01ZWFJrWkRjejdKcFJGVmJ1VTZmWGhKY0hHWjhhSWxPTnJJZVhTVjhTSWVZYmNWWmVNZXlHWk5mUjVEbGI1OWFkdTdTclNKS3ZiQmVUQ1hzdlRwMTJpTjFqZUM3V2RzTmNiWHVkUWtaOEhLMG9kVVp1L0tyNEZqT3YyZUFGdkJiaXUrQTZZMlpkSEtXbTdOTGQvVkcxMXRtUGdnVS9zMUVUNGYyTTFOK3l5elprUlp2TERmaVQwSjBTWnh0MkMvRENicSt3Q2N5bTE1elR4VlZqdXR4c0RWOFY4UGdzdDhJZ1JDTEEwMnpsSm12ZEwzL2hnbmtXS29SNEd4dEMxcityQnhBQXIyc2lrblhRRHFQdzNzWWluS2hEZFVENmxlU0owMHFqV1kyWHpiallhVHhUbUQwQTBoVGlNZVEzWkpqZFZ2Q2FLTWJNRUNIZkF0MzFTeTAwVVhSbmJqQ3FZMGowNDArQWZ1Tk92c1hhREVicXR6RUVSQkowSjF3Vm1taFE1VTJzc3RKc2p1ckZaVGtvbGJNdFk4RjZiNHd6VWtKYktHYWRIazU3cnkzN1R0Zm4vYUhzaFNBS3NZekpZUElZMzJkdXNBY29ubXlJcGttNzhFWXhiOXhSOTkyZW9NRDFZRHJPMWozeVdnNElDVzdYSUdHb1l4SUo4SjJ2USsxazhmTEI2K25PVWdXRlZhU3VVRG9VSXU0a3RGR3hUeUwvd00vb3NqY25HMk81aUQ5NWlmZ1hzcS9KemtwZkFjY1ZRc2wreCs3a096SGtjaFoyUWlDazJxMld5YUkyUDh6UlMyQVN3YVBoalZjd3NGODg0dzR4Y2FNemcwTW4vZTJuL3hYUkU1SFM3aHdWZWhkcjRzV0dNT0RSbks2TjVUNW9nRjVuNFNQcGxoZ1BsU3VPR2RMK1JRdDhoZ0dRZG5wUGpYRGk1TEhOUGNJN2RsMUI0TXM0UFRUdm9YMER4OUtLRVFtTitoYUZDN1ZIYjNESlBLMWU4aHVYRmgwSnVUcDAwVFFlQnlIWko5ZzQ1S3MwZjVmczZIZUNFUnA5OXlVSjV2SWxmMEJFanZTMkZ1dWdkNTBYbzFKbjQvV2hiaUlYSmU4d2JpMzg1TnRqaU44OFYwWVRGcnloeVg0bGwzMEhsMk85YlVXUFlQZU45dzFFQmd1UGd3S0hIMGpjVjdWWjJpdG9hc1FvUEdGb2l0VzRyN1dwRTBaZWtsMGQ0aHM4Wjd6c1ZHdk1uQXJEdm83NXNqUExGcFp4ckgyZWZWTUpRTEU2MzlFbUM3YnpGdGVMNVFwWlQ1K1pua0cxNGk1QlAwQ1Q1NmFZc1U5a1AzR0FUSkFBYUxJVkM1V2lCcTdUM0cwUkpPbXEyT1EzR3puVUtMbWtXSDE2MyswOHhkdzg4ckNrazE4U3V0YjlVNHdRdXJ2S1dLdndBc1FDY2NvNDhEcnROM2xRU3JTNytwSGs0ZzBFRjJMTGoxTS8wWW5BZ0JhWGNmanI3U3JldDdoZ2s2ZnRqbUY5T3BLT0VycmIrd2FHK21kbmE1R1lROGJMTzFzSGtLajk1eHlXdm9Fc0IwUWZXaytkZERGTVAzRHBDVTBUVm9XU1U2blpVbGFmNmdIeTVQRExLRmc3OE9JUWFackJsUEFRODlDQTJZTDdlKzNzL3dib3NCcnk2Q1pyRTBWZ1ZZWldNZHQ1cXg5bVRDNDVOWFFLQUhIbHN5bDJpQWVLc0diL2Jpay9zRUVlZ29rMlJZS2tJVGpCdE9pdUd1cDR3amwxSys5WmdmbEV6WjdYa2w4bnp2OU8yZWQ1NGxjd3YzSzZVRVQ3MllSWGhrdE9LQjJrOVJIMVRDdjBPakVDSXY1UHFVbndNN3ZkUUZKRGxlazB3VXRuQ0NOdWs3QTJiOTdOWmhTU2pmZzhEeUw3M2JwRGV2OGZOeEhhY3NUTHUvWG13UmdvUXllSWRvU2cvQVByRlo0RkZWOGRJT2NxZk9EZmhKT21uY0xuTEcycUFvR005b21nVFlLKzE4SVdxUFY3ejNKeWlYM2Q0bnZDeTlsU1JrTWRDdSttYnVRa0xYNnkwMWhvTVUvbjR1WnlNN05jcHM2bEZaOWlZbytCZnE5aWwvVlZLczRZZ055TVFxK1lQNitOUlZrMGwraW9jRVREa3Z5dlJOZ0hCR251OU9jeVV6MzhSeEFuTE9qYkM0WDl6KzNZRzJQV1RsSmxKeEdyWFQxSWdzb2ptZVBDRndsY1JSVFdncWFnRTNTOU1tMGkxTzJtVVVqYUVwYVNZajI1NTlDTFN2OVFhdlRWYmVQcmJkajZqWEVLc3RVWnp1Y3JqSm1BOXQ2S0RTNFBMWUpZSFRITWt6clpncHZ2SnhuaENHbnl2QlJNVWwrZVNTOXFidDJZd0o4dHpFVGpqK0JsdmdvVCsyOHdRY3Rldm4xRk9BbVBFWFh3dlltM0tYSHl4cDhUR1ZnR2h4UFNLZk14NWNST3dJNTRuSlNYTW90dEhLTWx2VG0xU1dEdkxRa0VOQnJwUDJoZ0VmWVBMWmNJWlZDVmRVS2dLZ0xzbWVDdU1lSFlNVGZvN2FvcWhvQzJXZTN3d2lnZXdNTEp0Q1dYOHFhdzU4ZHluV3IrTlcwckhrSEIyZzBCd3JxNHZ3Wk5IVHJXa0d0Zk1DSDhrU1FwRXdpaFp4VnEzT0lSL3RRY21LTmNvL3VKYkc2Ym5IdkhpSUNPN2VhZm1zK21pcEE1K2lQalJaVkpjN3ZFZkhTZFJuOUNkSWdQZVRiaGhyMUsrQ3lGK2VreWU5M2ZSK2V0VjBBSS85T3YxazdnSHN2U3l2aG9rNmFjVFJYM2I1YkRJQlRPN1RLUys5cm5IUXNhYVBSNjVjSk9qdzNSWlo3VzBBTEUrQUNkcWxSS0lYUk10dGZ0Q05tQWRqZUQvNWMrYWFuMTBkOWplQXFaOE5WeS84eUxjUWZnQlF5UEV5M2duTmFWVk1mU3hjOENGcXlaM1JGSHlNVXk1UElQV0tPQjlVeVZIczhqK3llMkwrZ0dmclRod2Rpall3cUtkRTErMDZsbFFCRnJiQ2ZqVE85STVsQTF0NUFacVlGbENUQ2dNSSsycjFBN3ovdy8yVmRxZkY3M2RZZ3R0eUl6S2w1M3RtV2hRWkRSRXNJMnNHWFEyUDU2ZnYvWXFuektxT0MwR0lqdkFJYzU5YXc2endNQjBjN0tuT2pnd2M3K0IxUDFvcytvOG9NWDVqSmtHMWh4YmZZc1dNRjFzK01GRkduNU8yOSswcHcxZzBhbkpMdjNuUW0vVDFrbzQ0QWRicUw3eERLYzRZUUhlRldWNkVDdTBVd3BKTFRzTTRWM0pZVG8zQWNoTWhncnB4b3lsd1lLR1hmMGtTVTF4NGJEd1FVRzVxaFA3Zk1jNkFsdWZGTDFUYllhclZNSDAzZEtwQXZabDgweEpjT1I2b0Z2cXVkVEYxaExHNVc1S2RnV05mSVBpNEVwZTB6V0s0YjhRV0dGL2xHbDBqUTJpZXZ6SWtzcGhSM0ZOZFdpc1o3eUNVSEVMWHNaOHl4cXp0THpzemF4dW4xT1I4dnJXUVcwM3dQLzNmQjdwT28zK3lwdFFEdlFFNnIvajBRdXJiS2VTZTJqREJQdUYxREJYYVlEWlpUTEp6R0ZSOUI5Y3FqY0w4RklJSFNaR29vQVh2QWFTem5NMjVmQzFnY0s3aGxFYm1Jb1IzdXRDejJOOXFGemNSV0VrTnlid2dLSExzMmxhR2RkWnJhS2ZFdGJQRUVjREVVMkJrLzVCNEgyVjg5SU9vUFduMy9UK1dPdkVFT0dycDM2azQ4Zno2elpyWnJNZk4rZ3lub0dSbzNoQW1mK3BYbnh4a0Z2bjZhSDRhNzVVejNpMk5ycG9heW1BR0VuRVRrRlgxM1l4U1N1YjJPVzFmdlFyZ0ZDQjlIbjk3MUs0WnRPQXd6VVNubWtQRVdqZG0yNWVvOHg1OHhJek5wVzNpWGoraW4rVlBVUzVYajRLRUpyWCthcVZ3S015Y21yMjVPMVU1OUtEbzBMdzFTdTAzeVh6bldYN04xR2VqcUIwRmx6WjBCMWZ4QTB5ZVlmOTFTUFgvYmpNN1hOMWdMalVqWWF4eWpNWEhzbGlJNXdHak52eDVJMWdSZXRjVmxLMEtaeUVFbUozeFgrcUtiaWROUXZrdW4rU0l5c1B5c0hoSUhIWTlFZmhUaFN1OFlRR1RxNFhSZ01DL28rUmZESnVMTGZtdHJFOEFIVHE1enlFcTNYd3dqdy82TzB0bHVKSE5lUWpWeGhlSUl1U2p4MVlzbmJXZ09ScTcxODA1YStpeEZraEJ1S2ZiL1JreWtZMzlNcGdXSE5mU1NTelg2ZkRxSVlQSzlwQ2ZBRC9zMU96WG9FNkMycjhady9rdG5WcUJ1UW5OOXl1eUx1Slg0Q051dzNtcmhXRUcrbWtDWk1pZUMyTDhvc0dNWktBNGZDZFF3YVNxZDdKSk9tZncySmNMbG5QSEw5dTVCUmFoM3I2YS8xeDRRbzdnSk1Qc3A4VGFEL1YxL3d0b01OMjNDT3VJUVFadkxEUzVTWXFnWTY3UUpTMzVRQ28zbUpOdENWVGRSNDQzVHpBZnhFcm5oc2xKc0NQa3NuTUx4SjNoU1RWZG0wMkJZbG9BaVc5bC9KUTc3aGlBaVprMks0NUUvRXdycGRFaTlqY1Arak5SSkUzckYwd016ZFJ6QmpSZStPY0xOMUFXdFFQaU9hNXQyelVWUnNQTHVrSUJONzNnZERieUE3WFNrTnVleUhjM0JzZ0wza3NLOFczVVNqcDVMMFRHNThMcEEzS1VLYm05S2FmTUROR0txWWRDZnY1OHZselVCN0RWRlRJdmtGOCtkUldmalAvZWNueU9laFRRalVkNVJXT1M4eGNmNHArMmFBdDF1MFpEeTE0ZVBOWHNjYWZGVnFBekVSYnV5bjBWTS9oYnJNNmhPVGE0b1QwZk9RM3VHN2xxYXJvYzJmR1oxN2xIYUhEbjdLSXlZeDl5ZlJoQjFVbzY1QnFhb0QxcTV1K0lhZzZKQjdZb2pBV21veis5TUVKTENYMFBCN29sd1FkTTNRUHVGVnZiRmRXN2ZvVElpcEdUckI0c0UrQzcxQ2x6MXhlUmpLVnFvUTA3NnRlcmFZVkNBQi9ZcFl6QTE1dHRkMk53cWRBSmUvaXF3cngyeUlncTNnOEMvbVM2bjZhVGtCY2dMODR0bDlHby96UzQybTg3emo2bGpDM3MyQTNtdU01djZaMmNoWmp0VFBiMVppRVVLM2RoUlRhSmFaRkhPYk1ucm9QMWJaQU1jSUpqNkhmWDBxR3lLTzhtUlpGNFlRbElzVjlYVUpzSjNsNnNaK0Z2dE1maE1uSUdRNU9TNTlPVHZMUkxjbi8yYVU4MVo4QUk3ZDUybG9jaHRkem5QYkRIZExGc05zU1k3Tldka29vWi8yTG1lMjI2RWdFNHA3UWhsdnZ2U3ByT2tFbE51MU9acXo3eTNSa3lrVTg1RkNZRm5ybHgreVU0WHFyOGVnQlNxOHpySDlYQVV1R3JVcjN1VlJNWDJjMnNNZTkzVGlVSEljREFtNFlBSS9wYTArZTJHeFc4T0dHRG90N0l2ZXh6eHZOdkcwTmorTElmS0xPZ09iT2xmVjBGR0JZZlIzQzJEVXk4dlRaMlRQSVdxUG5uaHJTVk1Lak9JYVhLclhJS2pld2hHOVVXRUpNSUJPYUpCbDFYTWZSNXkvTS9ZTjY1VHJVNm1uSjRiM0tTc1FrK0tSZ2hhYVBWaUp3YzczRG5mb040M1dka2U3UjlibGY3UTBKZE41OGtoZ1c2WG1hOGUwb1NGZk5ZRy9uaC9SOVNZbGVvZzNVL3IvZTY1Y1RaNVhzOWlad3RHM2l2UExIN0wzMml0S2F1Sk5xWDBGK0t0dDdEVVE3ZkhoSGs3WExMdlRnSFNGUE9sRGRQUVFZVG9QbFdlZlJxVUEzb2V2SWZpM1BheVltV0JpTzBBd3J3dzJaSEhHQk1OdGl3eGV4RTJXYVhuVGZ4WEo5R1VGUG5kWkw0OWpEOXBXSXdJWjE1MFVIaU52YWd0WmpQL0ZHam1xZEc0Q2xLYW1OVHkrNlIxd2lEM09BL3VSdTJTUmNkdlVBWXZhUWtyTDZFeVZJM21uOEhxWm9qN1JZMWE1N1FVcmN0cXpnNVltRXI1KzRJcUtCTmZMOGhaNExMTDc5ZjcyMmU0WEd1OHdkWTI0YnpKZVFLOXpFR1ZpTzJPbG9VelRyVFV4eUM5RG9wUS9ORkVzd1hLeVNrSnBPL0RvYmlVS2pEQUVaamJWMGxydmp3KzJsdWpDL2s1S2VTTjFoTGprbG94UFVDcEkraEtaTCt4UmV6cUFhMkRXd2pHd3NrR0ZreUFydXZ2YU4rcTRFL21iMG1YdG01dHVEajFoNmkyWjYrbUJHRUZGdXFqZE5XVEJUeHhxcVpRbEdEY0d2T09qMGpuaWpOT3hMWE16V1VpUjdBbWhqcDgwQU53U3JsSEI0L3VINzFRQ0pnYjFXYTlmVjBXdWlDOEsvOFNUeTBkVVZ1RFJ4bVp5aTNxTk1pV1VvcG5xYWVqUG15emdOMlY5YktJOW9zL0JRMzVQcGxDNDFDQS96WHRqR290aEdQd1ByOEJnajkwOEdkQXUzcEs0WmhwWnlwRWMwQkJtdCt6YjMySFlIZmR4QzNBR1c4d3NFaUtwZlRyVVl6WnZ2ZTg1dUYxUlI1dWNGcXIySjZadXgrWVNxMEtaV1hiV0FzQmlDcnBQUWxnd3NKOFlhdDdvOUF2bm5jblRyTms1SXF5SzJpQWhYZkhWcmxuU0xUdS9xWXFxQjhrSC8yTWVIdGJ0OG5vWUdSaDlzSmlDUGwxdFBGMTZEelNYQ2xMWkdzdVBTWEp0ejdSMjJiN0tHUll2eXdzcTZaNFdvR3RaSTB0dXBLRU1CcUROZXZZaVdXQ1l0KzZIZ1c3UjRJNGlhSzF0dkRuTWFqaXZ0Z1Nrc3NFSnVIbGNXRi9DVlc1OTJ0d0pEL3F4UE5ya2RZdzNIYUhoaGN4WlRxVmZOdzg5ckpTdmxyenJINUlGUHM1SWQ0VHAxYS82elFzQUlHNDBuLzVCb0hCbDFlbkhBUEJ3R3NlQUorRkQzbGY3K216dUFnSy9DbG50QVpJeHo1Yi8wcHp1QkxZWW9uVUVJRXdVUGxLTHJ3VjVDNTZKVDNLQm9sUkdoUDhOSVR1UVhqaUZYNVBoSXdYS0REcnVaZWxFR3VZSUJ4ZjR4SGR4SDAvaHZ4NUI0UjRaMTUwVXRmSlMxZnFXd01Fd24yc0ZDVnB4YTQ0NngxUEUvcGh5RzVIV21Vc3V1cFd4R3diQmgrMDNEaHB6cnh0amxXdTdkalZhMGdJM0VqcGVOTHhveDhyeFdZekhnaXNFd0wrWGlvdGVSRjFySDFUQnUxcEFXNXhXMXFGcGUxWDQrbWlTT1ZSRGs5dFhCZ3d5VHh3L0kwTm9TWnFIbUl1SHh0ekVESVdwYU9YZUFIN1pkbGdVQjBJRzB2R2FWa3hJU3RpbzgvUkQ2L05WaXIyM09rVEpxSXlQbVJnYzdOTStSVExxV2htYzlxMXJYSkJUaGN2MVBucFVLQlpsYWhCNjRRV3FGY2hGSk9Xd0RCb2tXeW5pYmhjZW5nRXJrczUyY0wrUGkzVnNCdVExM3ZsejI5UW5YU1h2M1JWOTlCeDdmeHIrVlROWjJCS2d6WW9wNDczdDRnR3Zqb09hTHpONHB1Q3h1V092YUJDQkc2L1dWalBuZ3ZJM3hxeHlMYTY1bjBlcGFJajcwMUh6TG1BVUkvWXRnQ25zckswazZjL2xienBjeTV4Ym5lSHQ3NTBGRnpSdk5ZUVVBak5YSjlqS3NjQjl4bG1nbkNKZDNJeE9IMGs1dWN2b1FZRURIMzc4SytXMUQxQmM0aisySkpLaEZxNmZZNlVURENIUGIxNDJoZDBxczV4QXBhemZXYTJPRGNKN2ZJNUxYSUFUWTVSQVcweER3MTVQMTBrNXEvc3dYRmFlUHBIblRrbklCZml0Vjd3eDdxTU5jdzd5V1VXbElxQlowRkU5bllDNXdZTEorVkwxclN2K0ZLZG45NmpJaHdhWi9Gb01lWHFUNm1pOUFMSkFZTmFHNlduLzNUZk11MDR6N1FHTnF3WXU5dTdKa2xIZnpoaUhQdGdxZXNkbUYvTnZTOUtkK0JRS1NIdVRmRHUwa0lXSm4rTFBUSjZ2L2RNZWVxRTNXNFFJVjA0WFFLQUoxcWFYNTJ2Z2p4Qm5WK1BzK1Q1UVgwbEpySi9DVHBTL0FYVU9RazJLN1BKa25tUzdNSkdFOXd5TFYyRC9GUUEydFQ2dDlMamp3djlNVXZWcXZBNTh4MjhkS0QyVys3U3JEMi9VTitMTGJQbGwvbHIrY3RGVmdzSllVb0RjM1NvVS9kM2VVeTRxNkU2NkIyQ1ZObVRoWDY5TWlub0dlcFdUOXgwMWxHQmp6TlJDSUZSL29tZXcxMStQai9JeW1WWnpOU0ZsSTRjbjJxYVVNbFhqQlVhQ3RnMkk5amtIWndMNjE2SUs4M3VNQXRGR2tRd05Ob3hQK09jUyt3R2ZVUzVLWUNPRWJhRVNvUGc2VE1nMldQUTNwVDhaTXl5QUs1b3pZV1ZRN2ZwYUs0YnprZmVEV1B4TFBZcE9zdnhka05VYXdpcWxSZmxQVko3a05LZnJlVVZTVkRCSkRqaHRsL24xV0pYZ1gzVXBvOUhkWUlXbU9aeUFKcm9Pb000Z2wzNzhJcThYMjJScTNMdkRqMDR0WlJaRGtqTTN4Zk5jZ0tjT2NVY3dCaTQrMCtWWnhhZnJTbFVaK1R4TkdMZVNqRXRBV05IUTBMWkxuUWg5ZjgxMXZWckorcVhKMzBrTTNTTmNsRDk3bEtrc2FidThQS1hCUkNMZ0NSdVlOeU51dGNLM3FNUStOL3hpRlpQZk5kTkRueG1OaU5haE1mRzZmVkorQkZHWEIzQVFnMnhxQklPQXZ0REk1SmE3UVpzOVJENUFHU1FPME5JR3BNYzJRTVY5MDM3bE1XUXMxSURRQzVMTlJQbFlBdDdpU3FSRk5OdjhZWHNOYTBQT1c5QXh5NkFWcjk3aVpKVHdRVG9mQU53cHRaVzQ0eldjeEthbEtVdkN5bHNxdDY3bXpBL3A1dWlBZjg0b0hRNmkyOXFXejVVYUR2VHptRll2cDFvM2tEOHUwOWgvV29yVVB0UzZrVVRwOE05REVJaVV1YXhYN1NxYk85VVhCQlpQcG5rMkdaT0E1bUNDdEI3UGEvWGF2Y2FwYllnWjZ2VzJRcE9nekx0b0ZjUUwybE5QMC9tbUJLNnhMVzA1OURwazgwUFpCdms2TmZVeFVkemlRc0EwWkZlZTE1RVg3bjVFdjNFQkt1N1dpYnZobEdiaGhQb3ozMGZVdzFiSndwR29McmkrMlpacTM5c0R3eldESVNTOWw3R2dmU0tBSkVta2IxeHc4S2dCMXJxdG9kNldYYW1pdWx4ZzZvM25JcmdXUTV5MWUwNndjVitnbnVwTTMrTXhRd3JYVWFGUmhsQ0pCOWZhTno0ZXhjOUFZZm9OeGRMOUhxcWVQTGZDWUpOSGNDNHN1eitzR0t2bnF3ckxLc2tWRTNaV1hERjAySFhrb0xCeDlYRWZKSnBCeko2aDBNYlljQnQ5ZmRuMXNLaUxyWUV4V2g5d3dsajh5NGFDY2dxL1dLTnArTGNtSTM3YWttbG5XTk51RTFRKzNCd3FJYlRsZTU0MW0xa3lzSENxcndUSlZxZERzTFFiejlpazRYZEMzVlNZS2dUalVrdVJjY3drS3dQU2xGbGtnbm5aOGJ2bk5mNzlCajdXMSsyM2M5UFhYamtDV0VuR0ZxNXlvd1RqRU5zV0NSNFpkYnBnZnpMOVdSYTZnS3B4VGtlNVN2dE9lV0dlaVVpZGM1MldXNWFHYmNSNThBcWs3M28rc28ySnpReWQ4VDJmdHFSd3J4UjAyZHVEZ05DZXNtWitNWkpDN2ZodWlDTnVUczBqcmJMZSs3aGZ0ZmVYOEx6eG00UEdGNVFna3p3bnkzOUNoNnNRMlRhQit2cHcxUmIyTmRHTC92eURnNzJ4TzhsME9YcXVjdGczQ3VBSnZQbm55cll1eTI4Ry9KS1dkcmdOZTgzSHNrYmEzamwyUlgyby9PM2JrZDJxdTluL1dwN3ozdzF3NXBHWGdUQmhmU1h0bnFMNWthdmMySzgzSGhpRExGSDBBNmgwUjVYNm0xem1GYmZrQTlvVXdPUEt1aFBKSzArV0xqTXA5NlUyV1ArWHU4eEZ3VGNQRWlpdEMyWWxqSW1RTEI0VjlaWkQzWG0zc3JDS1dzVmtkUUQzVTd1aGRPMGZjVnI4cnJVeFplNDRSdm1TeFl3YkVKR1A0SDlpUzVMQkplSnU0VGJhMHdaM01iWStXTCtzRVcyT1lqODFMM3AwdC82SEJORmRkNEtBNzN6YjVOSll6VWU5V0RtM05vTHcyUkxtUGFud1hqYkl4TkRwdnN2bEsvdWRHbGVpZVBocklNVjQyUjVIVVJOVFRESUVGTUN2akVBUk5Rb250MjZHdVJRcGR6NXRlbTJENHFLdlVVNVBwWFo1WWtvUDRtN2doMjVQdW5malBXbmtxK1NOYmlJUHBuWDdpVnl2bGZSTTJPN2dDZ3VKYWlJRUpvMXgwNVB0TDUrUEVJQ21rTmovZjdvdTlyd3diTFN1ZlJUQldMVkI0UC9aeUw0bk56cWVacXNVSkFhdE5Ma1RqUVBUTzZreUtlSTQ4WDNNZkZDU3J0dWVRSUtxUGtzcldEREttU2RYUzVNajc0NEx2MGt1T3c1TWh0TzVyWVMyTFdBeVhnWWcwd1FIYUZaaVlHZnlMeVlxMUV6N1F1UkFsSS9sVktUcXM1cDM0SHgyWG9OOG4zdWlBREdkNU10bHNwTncrWUgzTUFVdVJyUGh0bWdWTVhkV0d4YjdPSHlTWkhRSDVhYTlha3R2NmpodUZHN3JxalcrSm9lU2tnd0plYi9mdmR1WW0yakFHYWppNjI5dmc5dDdoZzJDZkhnTFdoMXRTOGU2YzUyckNCbzdOa0tnbDJub1BIbTlXM0RJUWJYai9ta0tKWFRlRUN1a3dhYzhJZm50ZzJYODFHamx3VThHcVErdHE1OFArL1AvbGd5eTZ0dzRZa0RjaURMSkpuV3F2dmM2MUg0Y3hTb0xEaTAyTnBScEtBTklDVjNYcmhUV2Zjb0I2ck43dVNjelU3d0hidW43cVk2VVJpNnNhVTNDR1JUMUVESExacmdpQWE2dnJ6L0RGTWZZTW92WlhJU2M4VTZPWjI2bGlxTjFwTzYzRDFBODh0dXcvdlAyaDZYZldoOVZGNWR6cjdNclBNdWFrYWxaSEdEWFZQMDRzNjVHSG8zY1MzbXZOdTRUR2pZNXQ1bEswVFBuSXJjMCtCcEFrY2NaYlY5QlZJU1EzSUNDYUVVS0xJaFNXTis4YkExaTZZeU1sMW9XRXhNNS9GNjhlSDBGTDR4STBsWUZ2OUovTEU0cGFBeEVoZHFSZXJxZEVvZk1yQU9HeEY3WktMaHkrMVM0VmUxNkdTMS9DU2w1VlFTR3RWeFc3REdtVDJpRHlkQVZsSjhVNnJCMXJLMnhINGo1Vm5tWGZhK3l6elVRT1NSbUl2L1RWRUpvWHJYek9LdDZFcXFyTFp5NjFvRnZvME5YVUVudUFMa21hc2dPNlI1MlhZTWU1RGN0Z1BsSXBKSkFxZkY2cFZRSUVpM1drSEljdG45anAwVGJkaktQdkJDRXBwdWpkRGVuclA4QUI1QjFBdmN0Qm9vRlY2NmZiUkFOaTl1ZjlHY3FBb3E4L1NGRExPenJkRjM3Y3B6eXRXUHhaN2hVSGtQcGRkdytCemJBWmhTeXJ1TEhyOHBhZytIWEM0TWZGdXgxcFU3V0dVWmpBK0wxaSt3V2VkL3dXcGZOUk56T3d3Rzkrc1p0ejRGQjc5aktZWk1yd3VEbkJSeEVhc01VRnRQRE1kVW0yTGtjM0Q5MS9vTEorUU1OZldwUWt1cW9YY1AveDlrR3c0a0dRbFlnMWZ0dUVHY2x5N3dabFRRbTUwQ05oVm01Myt6Wk05QzdQcWFYWngwNmlyZmlTbmNETlRDRjQ5akRHRFlZVGNRWUh4cmR1TzJ5QW9BMWFCZk1lZnY0TlVTa3JrSjNYbkFsN1JXdDR0bGFRcURqY2duYk9Cck5qSDhWQlhrM0tJeXdBSEZwc2I4Z1k5cENxQy9OMHZURFVkZ3lZS1Fic1lmQ1E4N0F6NHQwREFEU01JNHFrWGoyQkZENzN4c01tRGtRaGFaMkVTcHhqSGdmMUF5Q0EvOU1UR1ppa0lPRjdvS1pmUENETDlQV09pNEJkU3lzcFNmZE5rSkhJREt6SWdSTEdQdGZadTlLQjRBUmo2NVNUYUlqUkhLTE1Ja05KL2VSZkFJaXlPSTh2Mk83Z1NVRDNmQ3R6dGs0amZEZ2t2a0w4Qmw5UWtvSnNLbEhOVmpnOGE1K2tMOTRQcForQis0Z3UweHFjeVFNVm1Vc3ZXMUZSdndQOEJYOUQ0STFZaDViL050WDBIRmZ0QUt0Und3MHlWRUFTcFpaeEtkc0JYQ200dFBPQkVLYnBQM2l4dUpGaDJrQ3BSRmxsajVpQzhiZHFab0Yrb3NzUWVjTUxPNk9oN2lBcGlHSEs3cS9YVkpXVHVDZW1mSjRtZmEvWU5FSE16ekFPK1AyYWhYcE9nRTNSdnZ2cExlZzJNRERyK1JVOGkveENuTU52MUFIWnBvT2wxWnlockovMmNMS1NUdU5FQTRHRCtXRitod1lLOFJPUXZIeThjNVg3cTRyejNwWE0wSmlCRjJxTGFBakpMTGI3enowK05iREcvUWpKQ1h6ZGxnZ0xnalo4L3FGSVpmUFRwTnVJQVZEaU42RlgreTBwYTBmVTdwa2dhVzlyVjJOYUdtak9wZDJZZDlTdU1BZE5MS2xBbWlwM0RVSG9mcWIyMGk2Ry9zQ1l2Y05YS2M3ajNuYmJOOVo1bGY0Z0U1NThYUjFHUFB5REF3N3BtdTRTMHhScmhvejZuUmZncndhT3FPdnhtOFFFVjFlVnJSSHlVK09JOG8wV0pDZllOWk9SS1FoK3htdjBKbkhNNWdHZzJydHg0cUpscnZEMmMwOGc2V25aQWwzWTUvZXVqMzlrN1dNTG1iT0Mrb0tLUlRlRE9OS1BiZndReEdNbjdoSC91ckEvVkdCRGFLSWRHWUQrdkw3dW1sZ21PbldnM2VPd2dUL0lNdXM5REVoaW9jRncvN0Y5a3dyaWFFK2ZEdEJSMmRQQm5Uek9OWXhkRWt3Zm1HS0QwSEpRaFFSVW5HWjZ2SUlyV3NBdUZ0dncxK1NvMmRCRW1kd2EwQTcvd0V4L0ZkMi9YOUhVaXJXWlozaHhkTEVlcndvS3Y0d2RzbmZab2hmdGtvWkptU3VlaXVHVlRjYllWejBoYkcxTUJSeFpXMzZ1b2hDSXlGenJ6K1lBZlBCa0dPRjluZm1KVUZQc2JBNWw1d0dGdVcwbjFEUS81M1JpK0x5VnBIYURvY1craUp2SGQ1a2xhSE5meDNvdlFCN3RnZ1didWUwWm8reFA5NFVqdDk0bGFIT3R4Z1FmU1JJUy9kaDBTNTZyNS9FSkZIU1NjNGN4TVVnZktFOUVvc1J1YVB3ZlFZN21uNmo3dFB5TnNQVEdUbHJNQ1h6R1pWOWhtL013SGY4QmZHd043bTY3UmoxM3FoSGFZZWpvQ1JUclFab05mRDlBbHZTS1U1RllGYzNnejVaOFEveTV2OXJxWkhnSmpMUFdkeXg4L01Ca2RLUEFsNWJiRis2cmZIS2FKS0VwS3E4S3dCMkVSTGlSTTVpa2N2OHJtREVpRlBUTVlwOWZvdGJkOGIrbTU0MnlReWNkeTZXU0hrc2xlekhVSjljT0NjWjBTNS9xWjdpSkdFWFRXbmdheFJ2cTFxdDFPZDVwTUpKU0pPdmljeXQxM2xQWVFYZG9hazUxTHdHM2YzMFAyVlQvaHdsZ2RuUVVXVkdmWHFYTGZvNk1HdWVFUTFDekZCeUVxVzAzNkoxeW1aRnEreWdzUklYRnJTRXdTckpCZHJOS3piVTlKaEo3eVZ6NmIvWFdBOGxsOFl4SUxQaUZ4SklMUlBGZGI3WGw0NWNscHJkZmh1V2FSZFozQ28zZ0dPTmFxSndOSTdSaEZ4S3Y2YVdCZjhkR2JWaGJqZ1B0cTFrS0FkTGZYMVhWZmhHcjA2bHFyK0didTJPQlFVTmN1WjdpQVl6ZldURWkyU2QxcjNxWXNLRFFYRnpXUS9pd09PZldhRlNyQUM5V0k0MDl0Tkdsb3o0ODR0ZmlhSnNRSWlTc1pqS3dzQ1NxZFpvNEl6ZXd2RjBteTFQejhFRFl2QXR4U2FCTjhwQVhacXBITlBjTURTZW1iYlZrNFNCd1lyM0hhTkRGZkZOa1FNNmZuVHNRQ2FQRDNpTitJZy9rZ1hpdGw1ZG9HWlZ5L2Zza00xTTVsWk9KeFF5ZXhvUnBSNFNDa3E1UW1EVHZLZi9jaE1OOWtmS3AxRVlmZUY5RUhoY2h5OXdQTlJyNGwzbStLR1NUTHE4aW90dFV3Ny9OaE5PSGNoS2ttUkFxWjd3QTNlNUdhYXdtaU11ZEZsdkRGNjVBZ0hNMElVSEp0M0NWbnJ4ZS9ZOGoweUJjd0dRbFpCckdnRE9wYm9ta0pZVFovMzZ3T0dXYXNaOHFkSDl3UXZxSEtCT0REcVFPa3ZNS3JpWUlCRnU0K081Y3hiRzJmUUQ4ZHA4QzdYVk50VEY2M0pnbzd1alMyNWlCRjdlSjdOYlQ4NG5uczJIQlRWM2hrZ2Z5cFhHNlYvVlNldkQwVWQ2d0U0SU5Rc0RaZkpqSnlGbGFKbDNrMitGelhLOVFTSFdHSmQrVXpJK2ZMQ0dYa2NOWnNpNXRqcTNyMElxYnQ5bTVPb05GQXRKZ3hwZnVRMC95VDdpU1J1RlFjK05PY1pKVnNxYlJiWENUbFJhNCt6bnUyN3JOUzI5R1E0RFl5VmE0Z2F2NWk0UThYdFUycyszREh6bVVWcmdZckhhSGlUVmJYYVY3dFFjNzhlMXBvU0ZSejdXN1phM3ZjbE5xZXFqbDJML1p1Sm1MOTJJZUtxb2ZtZHhYLzVmem5xZm5YRElKbFFIZEMrUkFOYnZhVjFlaVIwdkM1OHZBWVhzNEZIT1pFN1ppVXdZbVpDWmloWTdjWkgrdXMxbWlyMm1vUXk0dWdYSDRLNVdXU1I2ays5YnJFWStsZ2FNU05sdzJXSTFUSFViMS9WUnRnZWdBRjZGTWZ4T2JWeWJTOWFZM3hVcmNrV0JxUmRXU0w5aSt0cW45LzBOMmJHL1lNWTNvS29oaUx5YTJTcXFhbGNpVmdXYXEyd2NFOFdIc3dQOWlKSzFNaUtsaW43R3RqMGRTYlBHK2tMdVNQT1VkM0hObEU1Q1VWMjQvRHhPVDlyWUZXUEIxZnhnUEpvajdDbSttUTZ5dFNhRFZsZFlLL3hlQndsbVVJS3RBMEdCTHZLUkdkc2VwM2lncFNEbHlxS3Fpc2taaDJrY1BTME9nKzJFc2JqYU1XR3VTeFl1amtERGxUbXJnMDd4WGVuL3liaDFUY2N0YXhDdzNWUklqMXdxMkRlYng5MmJNYjZyODlzOTVNZ3hBYWJ1NllJT3lmNGtDeGlGbWN5c0JFMWNhY2hNZ1FsWnY5NDhsMnJwRU95Rk4xMTJpU09EWjhQNnpHb0hBbWdMYzN3SVA4ZVhUMDQ2bjdYbDIzUzRsK1NUb1N5U2lEdFRNb2xRWG1qVExlUHBobnNBMFZ6aDBZcjEwNCtMNHdIM2k5bVlQd2dvcmloak1PMFZnSnlRcHZmbFdGZmM2b0hWeGw3MTVVczJlNktPbWN6VUsvWjU1QW55TEw2RGU5NkNaeERpRE5kcnNDUUJIUU4xSWJJOWFReDMxbG1jVURQUHQ4L1JQUjVyNXFvUzdCNllwbS9XVmttU25vZ1BoWXJGSlRKaTA4bm1CTm40RVBJVWYzWlR0MWY0TnhoMDFEREJ2bkp2MHRXa1ZYNXBJdkRvTURlVTBzVExyL3MvMm1tNmYwVHJ4cDBQRWNKK0xUTHpxT0xreFlhcEdMdW9GY3d5N0JheGtGUzdYSUduNktRcDROcGswSnIzNGgzRG9Dc2VPajhuaDdiS2ErMExRQWlvbFp3RDNZbGFBRU9XRmtrcnZROW9yRm5KaXBmUm5TL2QxenllL05UZFRNS3lnK2xhTnNzTmpnTGZ3VENuMUpTeUNpeEtRbXFuVS9CNFErdVdseElUYzdPbHpMSGhqYWYvWEtWU2tqcG0yMDg1a0huK3dLOXp2QUdka3I4dkVvdkZCSmtzbFdGVkZXY0NVQWRMUmFLL2wwL2ZZT1g4Z2N2aXRKVkVRT0c0bi9DWEJtTmpqaVQvMlYvRk92QXZRcUtEVHU0RFJHT05BQTNKenNvTGdlMGJocDNDcEJZN0ZnWGpuTkl0ME10VitkVk96R2NVSjF6SU1sdDFQOHJnOVJaQW42ay9XanRDc1VOVDRIUkhvUXE3YUhqTXMwUzRxdTVXVjgvSU5aQ2tyaGdMdWtDSkxlS1pRajR6NHNwaDdJMlZHRVVvTXN3b1o5allkMERtY21LU05HOXMvcEl6N3NqamdSd2JjWVZVdHpNUGFNNmtOYUdiV1k5SjAwQis1eGxWdWQzVmtUTGtXRTdqbERPMHBqSiszYVBTbEdhaXF4ZlgrRXhBbkVOa0dpSW8xQ2lYeHJ1U0liR2FiZGpHTlo3QU9jWFcyVnNsbUFwZ2w0MnFrTHhzRzRPV203R0lkZjdrNlpEZVdibFdGdUl5TU15V3B3UHhzdUJqTDUyYmNybmthaGFrT2U3Q1cydXM3WGRHVzNOaUVzOVhYbm5yemhxem9LS0ZtK1RBTEFPbjBVK3o4bjBoWGN2M0JxVSt4RmduUW14Rk45eG5pbjBsR2RxNmpxRmhCZDRySEI0MWFnMCt6cEdhSGNnalcvOGhvZkZCS2U2SG9COFErbUVTK3drNEN6NEMrZUJDTnBjQ1JtdDlxOVlkeHFpVnZlUDIzWVo3RlZZMEtyMWNxTkhma3dLelJOYVg0UkdTL0JOb3loUVo0SzA2cllzbnJFZU5tQUlYQ1d0ZmFCT3loNnFLOERYY1NzQWxtcWt6aXpOUTFuNGJENGhyandkUDNkMi9MRjZWbHZXTTNJdHRjRmQxdkhVa1NMUzl0TkdQTkhqQzJaajNRMXpTRkloK1dJRndoM0tqVVR6eVBQVmZFK0t0cnVxdGhySmo2TkI2Q0FEcUcxdUY3dWtHQTgzS1kzODhoVFAwYmwycnZNT3dMQ2JSdXl0MlptY3Y3QW9CUVdvU0FpaWZXOEphREN4WURIZXZabCtUOGVYbDNOdkhNaUJqMURaaGZhZk11NDEzeHpMeTQ5Z3J0T01IdlRwbEQrclJXbCtrc3NWK1g0MjBxRGxqYzh2dlZ0ZlNrT1RCMEN0ME9aV0NBdHNzV0dBbWYyYy9IbXFQYmFVeUVmSGhiUk5zd3BRNTVsb2NCTmUzczRuVmcyZFdoVE9oOHZDZFJtMHF4NHcxTTlsSGZlc09WOEJmTkR1M1czUTUweUc3WGorYkFJQmdCdmNFcVVINDZ6cmE2Q3BNa3Y0K2kvSHdHMDVFNGhsNGhTK3NtdE5kdFJicHdFRFIzdTZlUG9oNUNFZUJGT1l1MnVnaFNJSjg0bjJkckl6K0FlUG5HTE1PWUJmMHhBRmpOc1g2UGZDbS85Ry9VWnBPd1d5MTkvRWdBUk5ib25YaVJaN2UvbnIzcnBFQjRZbVI2dTc2cFRJdGV0MTZvZTlmTmNnVWlpVWJYVnRwR2tJUUFKSE5DSnJqSGJxOEFPUERGZkJuLzJoNWpmaEU0VDhJVGhHZ0FPL29kaGxDQUZvK0dpVzhUNElzNlFmbEFmTGxpd3RHQXZLK3FEc05vV3ZuT2RnajVTSHRFdHhsTjNXb0VkZlNydWJ1ZW9Najc2UW9jVThKRHVTVE5ZWnU1Z2J6b1RHUTlpNVZyTzFYMHBxTE9HaG9vOExKSE11cG9KSGFZYnRYRWprZW5qZE1PbGN4OTBncUh3UEh5Qm1vWDR5bUhSZXBuZ0Z0NUk2L01xbEZKTmVYSzBYVS93Y1BwMXd6Q0FGQkNCVmJRZldSR25PZWhzSGF6SFFYSE5HK21jSUd6NmltOVI1eWdpMzBWQlRMYXg3UUxRYUZmOVhySzdnT2w2RFRkMkoxRUk5N2dxN0x1T1NyVzRySlJCM2V0cjQycGpldDMzaDk2RGNLZlMweWxwWVRmR3dZT2JidU0wMVZqZlhjbkxKZU8yT09VSEFUcERaN2c2TU5zeENnaXdPdjlRTHo0TnJTTzlhR0E4d2JkbTJVa1VvVUNlUWpVeWpqb3phbTI5RVpDQllteWNJcUNYZWJNcXNGcWhZZmhCSG9mMXdacjJPV0hCRDd6Q3daZ01URUluVVlOSURVTDlrQ0pvWUF2cTF3akhjR2dNVTlJVXFBTVdPdWxRRXlxc21SQW9oU0loREJtS1NKUm91NlFxY1Y3djBzNDBWRDNpR2J6eVZwL0VXdTRad3lpR2VWWlhxTjNqSzZodVFyN21ZRkE1S091OHdSZjR0UmRwYVhxMUxpQzJBc2ZWYUdtemt2Tlp6Z1cyWG1JMXV4V2RUTTRhMEh5ZFlJK2U5ck93RTd5ZFhlTDlRb3pralhtRllqQlJnNHdqTi9qZHVJWnBLL29HQkJkN3V1SDUydURqN2g0bTgyb2R5OGJyZWNodjRvWENaeFVZWHhObEo3dFg0cHR3RE5hVTNJQktiNWgxY01NS3EwUE1wY3JPc0gvbzNPY1p0L1RGMzY4YzhCMGlZYXgxS3NyQ0R5YXBMelRpcEszb01EbnlpOUFmT0ovYUx4TmJLblhKT0tBSHQxekh1aVh3V0VPTC9iYUd6b25QYWE3dnU1SkNBUkhxaUROLytGb25aUld1TE5KYUUrTkVHY3dyZHYvc2ZxZWZGcWFGQ3Q0L200cUFySTU1a0owZkh5R003SzFEN1RYRTJqdjdWMkgzL1pBK0RGRThDUlpZK1VPSW9RakN3N3poSnhsTzNMUE5LVERDTXM0YklVeFFSZlN5Q1pTbnEyMG5aUisyUWI3VWJpRXpnbkQvUjgzYW03bFphUzZnS0MvaXFlZlpnSnJ6WHl5OUtteEVNKzRMMFA4TDQ1K0lhaUp1OXRiaGFTOHBsNWdSTnp3NU9rYldoTmJaWDZwZlJLanp6UDB1Y1ljT3luUjh0L2EzY2wzTUh0a0NVUm00NmRXUHV0aVZDdHo2RXZHOHhZVFhVN0ozeUR4ZTIrT0xDNXd6ODErck5taEtwdDNLUEdnbTlNTVhNSnpmbVNwY01qS1h5dk5VdmlxelJOOFhEYlRnSXYwTHB0ajJQVC9YTXRiWVorTEZVTFdmR1VyL3pNcHFKSDYzQ05Ta1NQazY2NUpCd2xwOXR5ajlkOEpZS1hhaWY3NlBybmNJYVY5cENvaWhOUzBEbERRSVMxbllIVDJtQzJ2eFNNZjgwemVEOGYvbmRlczF4QURIRUNzZmlqOGtZT1NvK3A4ZFFjOHhzNDBTTXo2M1Zza00xakVkYkdjczBSbFlzbVRWeHFSUmtuR3JzVTVxZVdYNnF4ZUVqY3cxcG1LMk1lRmRrTzY3ZHZxK25samRQbysxMTczVnUxZy9QcnRvQm5wMTVFK3k1L1VlNmxpMGxSL0FYZGp1a3FxakRod0w4eUl6SVYxWkRSRnF0UzEzNWM5SnB6SWFQRE82aEJoQk16UnowaG9JMVhabjBrVUk5eUhpOWlQNG1jWkU0elZ6OE8vdWdJcVN6cVBKQWRTQWI4LzVwV0dDUHliNGY0S1dxYU9tMjBTS2w1bmFZWUNPMUR4VW0vS0Fyak1oZGk2cUVYZnYyTWJxTUE1Y1dNdHpRR2FnYnNZTmhwSEFkVHY3TUZEK0dPQnZIa3pnZHpOOVUwek56bVpUVU83TEs3MEJnc0NNQmNuZ0FKU09vWnFUaFk1STk3c0FwNXN5UUVsTHhSMWFqOXVVbXNjTU5qaVJJUnp3Y1dtdE9UREdBbGJaMy9oSERBOEVZMEdheUo5RFQ1SU1sL2ltam9oK0gwS2Z4L25YMVFOQ3E2aTNicnFVYmVyUENteE9CNkFidTQycnZQMmszOEpZWTlZUFpYSnV3MXp2Q0NIQ0V3TkZ0eUVKeTl6SklNSlVHVWNvV1RrcndSVFo2Q0VpRWJ6MlQvMjMyYTBrK2hoSkc5akhoa2RLWnVDanNrdkM1cGxTU0RuMVlHWFRjSkhneExkWHcyZDZOY1BuVlVZV3EvMm9pMGNYNCszWnVUZFZObmZybGw4a2JtRVlpTndqK3pGRENUVWNuVFBiZU9PbUx5ZWxsMDFFdktnSy96a3R3MWdXSGJRUlNoNm1TTVR2L0VMcHRaYTNwL3FmdE15c1BEdC9tak1kRkR2YTI3M050dnlNZit0NjNxM2I3VUx3ZzAxL0pobVV5VlhtQVJWU0w4bDFBUlpjTFlpSHFueWJXTzVNaWc1WnBkaitRTFRzbHMxdmdrY0tzLzB3OS9uQ3lSaUE1eGVqOFJPM3F4Tm5FVktkMDV2NUUwZEgrZ09GSjlQcG0wU0MybjJSZ1hESnhacWZBR3Z2WUZOOVVCbVJBTVZXbUFXOWNZeXh5ak15L2FCUHdqUEo5ODBYV1NaTTlTdU5HR2QweFduWFhHTXg0UEZhZXBrbTFmNEVXSG1iZEZJWmhMSzFwMklFeXYzTmhmV0oybWQxc3NTcWVNT2JjVjN1d0NkQ01qcjBVek0zMnJRRDJzU0xNZGNGeVJnV0FLbkN5MGdQNEpDbEZ1Y1FYZy9KbWlUL0s0UlBiQkFXMzlIVlhvYVVnQ3hFZjVtVk1zNzFoeWJQQzJDMTNoR2VwbktJMjllN2lvTWZCaGFMSlhKRVk5RE83MXVpT2tpWXpEN1ZIdk51aXo1SC9ORFBhZENCR2ZtUW5PMi9FU0dsVXFONXQ3VDBrZ3hCK3pDRm9McWVpT05yc3NKZHZ2Mnd4Q2VJNEw3M1ltMkkxVVV3WERCTXpidTZCV2ZCbkxtU2hQazhmR1hSV2N1dm5KdGdTcVVFMnpHTU5DMU9KL08wUlhrYnJRNElzQnI3b3IrQ2xUUU9oZm81K3B2Rkg1TStKa0oyaGxrbzMvSzF4TWVjUEthaTZSRHhKQWFaYlpyeUY1S0QvZE1GVzlPWm8rSmhKamVmYTIxc1FGUGpBb2FTWnh5WmRWWlB4QWxRUmpPRlJ0OEdUdjhEQjQ3WnJuYXpEbTJ5UjVaTVRrSWtkSXc0ZU5zYzg3YTBHVldnVVl2QnEyNG5uMTVLeTJVNlFrb3dxYlBqMVdVMXg5YlZQNDc0WkhqeXFHM3BkSUJTUGVselhtUUtRTVc4TSsyak5aZ1lrS1MycG9oa2tIbm5qVVRmUW56YmMwSlFHbFZCY1htRW8zTmo5bGlaTml1NzNVbTJXeE8zMjBBSnViL1ErY1hiV1RKekdhM3N4b0szeU9HYmM5aElnMHduMlBpOUdrVVlXWHY5aG4rR3A1Tlp0QTVrZHFDTXF2NDF4TzNFZFR4S2tlZ2MxejBNYjFFenlvNGJ2L3cvMnQvc3FwTEZOYVVUQVBQdURYa2JWYVNBUEhoY0JGeVJwSWw1NzdHREhsT2dMNEx2bXkrdzFKdVBVSmtHdUVscHE5dlVoR2k3VjNxVktpTVNuSzVQUWdYQkVySGUwR01NelNoWmtPWFpWNWZLVzZSMWR0cHVkdzFneWhQN0Y5NytKUEdyY0htbmRtVlo0R1NXSGdPUEV6WFplQjU0NW1MbStjUk81MlNSeHhIWGJJTDA4VXFoSGk3NjErbXZ6VTQrNzJWYzAvcDVCNHVnZ2hIaklmQ0tpTWlBVFdPdWZMTmV4Tjg0U2M2UDR0K2RFdmh5eTVoZGJaU0lTL0wza0V4ZUZadE9KMmtnVVk3aUZWMjdFa0diTi91MlRieHZCaUlZQjVwRnpuYyttcitPNFZKdkE3QjAwbjVib0tNMDArbUhYNDRLRlBJd1kwalFEUUlUYjhqQ082d1pDS0NOWkdPazBCSVVCbTNhM2hCdHFXS3VRS2J4UHdTbGZORTBtajhiOXo3UU9kYUw1ei83c296ZnVhT3hWN0xkRDZJL3RXbzkwemVzYnBBWkw2Q2ovQ01FSlUvSWFLb2wyN2FJNG5sSGtjbE9SYjZCTFNrV0psMkgwamJvU1dDd0h6VXBmOGtzcFBzZ3A3VFdRY2RVY1JIUXdsOFdZYlpQRzVEUnp2SVJEWHMzbklmdGZzRjBFcWt2K3dtOVhQWFd5ZzFON1ZrYjdiV2VXN1VUKzFFOEJ5UkxzMmlzRG9zeXAyUnEvRmxYaTdsaHZPRUdCenZpM1dSM3ArbVdhUlpONlJIUVFaZDVnQzc0bEx6MEtRSjRIeG1FL3JSV2MweWZvWDkrTVlxbXZYMGEwRGdFWDdacEgybUprbnkwa3k5OTF3K2VXQmlHdXhEUnEzTWFlVnhHeE0wKzRVZCszVkRYclJGZnVOVEIrdCtIVWxlNXdGWGxleUE4MUwwZW1ONzVMNjZvcEVCNlNqMkJBTXY5aEhEMGFaYXVLazJPbHcwR0YxbmRZbHJxZ2JEZmpMSWovRXNOWTFmaW5tb3E5aHI2ZGt2cGJXZGJXY1hLU0dwQS9ZVUtDeEFPWnUxaDhnWmpwQ1VJcWJEbW9iWElUM1lGcFo0enNncmtDOWtHT0hZNEVwR2dRZTBpa29IdE5XRGV5ekNIWlBWNFhsYUFCTHdEZFE0N0tscXVHYmlZUm1lMUM4Z3dvRFp2dGZnYjlINUtrQVVLR0JxZFJmSHBvVVBkbCtERWpWQTVzek51dHFlaE1qZS8zemtEM21GRGZvYTRMallPbXpGNmdzd3RlQ1JUamVOdWdKbWhiOTJ3NUJuSkZMTld6MXpSTlN0ZzhwRlNWakdHNFN4dWJOcDAwdDNXZU5kSnNUUzlpd3hrSUwyN2U1OTRWT3RwaGxTREFnS3ZHVXovSVpiRXUzcFh6NWdkeGRsNHdUWjAvQXFiVnpRbXMyeXp4bGJZNXZQdDhZOWpMa0kyaTZRNlUvMHhPc1cwKzg4b2hObmlpZXkwZ0YxTG9LSmdBM2lLUTFzS04xR3pubkJIN2FTSXp6UForbGJRaldsdUxtb0lZVndwYUcwSmVBMGc2SUV3V1VVanpaTnlRemFmWDhpZ2dPUnoxS1RGUk9LVzdtZ2hNd3Y5WVlpcldHYS8wb0hiVmFyQVloeWk3UVI4WTdTaWlIRHAwa2F5NU5LSXM2SC92aG10MU9wV252VS9kbjUyWC9ucUEyWUxmZlVmOTBHa1U2ZHRjK0VyZlVNMWtCdXVlZWRLOTBrYlF0QmpyWjZoOVVYRlpsSCtCUXIrUWtGV244QlptRnhmZzJFL1QwSE1SQi9idDdqSXl5bEJRQ1lsYVo5aXVkazV5d2tqd2JZT040WGxsNUc4RXhobU9uL0NvbHg1L2JuOURhR3lvWXpnOUd6Tmw0V243OGRWY3VDYnAyYjlMeWZFb2k4QUZTSFJCMGY5YzNQcVhmWjNSTUsvQW9lWUxGK1JTcFVCMC9DOXlCVG1rMFlBdHVRZHFmZEFZZmdIKzg0RXhWMUZLWEZONHRLRWhjTmZjSndUaWpIN29lMVVwME9vdE5QUXFTWmttZ2YwQVR3SUg3QlVnUGpWS05JbTFsdG92SEZsRVB2TVEzMnNMUnp5QkEwOVAyZTE2QXR2UmxTVGdKaDFiVUZhMmVITXlKeEEzSjFFNlo2eENrTW1rQVVYTVFRQUo4MzNxbTlNZVFKa2xUYUt5RGpBY0hUemRxcThEZWQrbGlsL2ZRYUR0N1pQMStUV0RPSnd6SDNQV2FWY3pSUXZWczBQYTJTYnhnSXoxOG51ZXc5WndDd3JQZjVZWm5QY2ExaGV0UFEvRVVYa0JFZDAwc3lPdHp2UGszMERoODNmYmRnZTMxeVVQNkpVbENQRXhEWkhTMmF1MG81U1MwRFVNT1pSNGxVa0daUVpFSjFvNTZ3WXErY2ZoWDE4ZnRvZzU5UGtad21ZNFdCWThOSTd1TmhOekl6VWIzbGtwTnRKdjVtTndOU0NBK3UyMFJNRExob3gwNk50WGt1UHZPeUFvTGZFTTdocGhyYldGSTlVemQ3ZVVIVThObEtzd21PSWxXZEdObS9HUFZjS3BzV0Nkek4rdU9Lem5SRmFmVW9UOGlDU040MnJHT0xHTDJrRWpDS1F3ZmRtNmhrVWIySzFHajFlQ2VzNmpxWjYyd1lUenkzVFlIQU1TV0REQ3BrYlNuTVdkdFhYVkpwTWx6ZVptTkhVZXhJU0JXMkVCWDdkUy9JdE5CT2N4S2ZJWGVZQlduTEh1aTduMXVnZS85VkxqdllsS09HSjkxWHJPUng1aUw1UFJza05USTBqV28zTXptdDA5V2ZBZU9wT0ZoZTREdjdNckJ3NG8ySDlWRWsyeXFGMStOc0NjbUtCL3kycEVoWndLc3cyMjZHamR2b1FBdnRPVEo2QVFHWkpVSnJkdmdRTVNzRDdpRi9mUDQ2Z2g2NWpQNGw2VzBGaUZNWkVaK0FkQmNXeExtYkpRMnlUelZtRXlwWnlKQWhGWi9VbDUva1c5ZFRBV08rYTJvUDVMRGNjSURMRndmZ3RQa0h3T0xLWVdVNHFpNStyRjIyUHAraklKZTlLOUdRQ205eEhLd1VLRU1QbHJqWU1KTTFhc0xOSkFkbHBTMm11eUR0RlpZcTRIZW9raExHTGFqK2xveFhqajdDajI3SE91TzRvY2VFZmp5b0tpeG1mRzZtSytLLzErOUxJeFhaK01Mdk9iZ1J6elJ6MjZvR3VSNWtGaGJEelVSM1FseDBUdXVJVnUrbWlYeDV2U05CRG9Pa1ZLdXhlNkNVcjFtODlGTTQvS1dPL0RqRUp0MlcwYmRGdE4wOHhWVEYxdDZtQkpFdjhxMFYyM3g3cktpck9rdkNnRFcrRnV1Tlloa1lFVkE4QnNTVFBWNjc0eEhwek5FdnJ5VWV6R2V5OTh6N0VrUGFvZkM5c20rZ3ZxL0pDaldiRVZGaWpIOGpOdkhsVlRkY2xHaW5wYjBpYUJOZ05FajBTY2dmOUxCeUNPc2ZhQkI2TGxPbldKMkxMeWRYd2J0UzNpaFlZMXg0ek80dDZNWnhSWHovUytyVUdQZmE0SFo5cHZPUGRXcGwvVVRGT2VFeGFlVE9lcUg5SitUQjFxWWdlblNPUmJweEFrQS9wN2dDS2QwNi9tT1BuYkZOUjZpQWhoWTVESUY4WVViREpZZHVoSjZlS1ZzYitFMWx1UVlLdHg3ejZEZUFPNCt5WCtkYnZjS3FpOEFZNlF6Snl4N25pbWduNCtDZnlIUVMrYlcyemNRS1ZnYkRwTDJhNzdOdkdyUldXQzJ5Rzc4bkN2N2R4OHl4alRRUWJqbVp2bXg5aisyZ1YyU2dRNWQ0MzhtSUZoOHljaXhWODFiOXZ3N1JVN3F4UUNFUjRZMkNBbWhZUHpRZGs2V1ducGtyUWRwSDZPcHVhYUhnUCtOL1dMdk5vOXpCYzZVWHNuWEJUbWJ6eEMrcW5XVStDdkJNNVVOdndnck44NTgvSkttejV2VUdnLzE3bE8zSVJ5d01lMEJ2UEdoMHJoTG9PSnBqZzR2ZVFPdmFkYXZ1Zk5QT1RROUdyRURZdHhDeXViSnljQ0dTbWVDZHludG9BSDQyZVZIZVhmYjR5a2VsWDBGSzYxTDNFTWRFMDM0RHo2cDB4cnlPSE5aazNWYTk5WkdwV2hLRXJ2UEhUYkpiNmdGTHJCRlBmNkdRUVY2bTQ1MVdpMEg1ejVaWXVtSGZtQ3hLQ0NvVjNVb2M3VExuanZBeDkwcUx2TE1UWFBIYisxYUhBMHZsMGxBaTRJR2hlT3ZMcjFTZllCSjIvZXlPTHB4V1RmNUlWY3NIOEpTb1I4RjF2eDg1bjc5Q3NXTkhoVnUySXMxeno0cmpLZHJvN0hObDZaVlpHK1prbGRSOS9lR1JQb0EwV2Jic3ZCdnA5bXdtRHZ1VmRBcWdNamdFbG1NWmg1QnNLV3hKdUVoUW52Qnk5Z0I5QjE5Y3RVc3FCbFhBMi9BcnB6T29YT1JQZ0FGZWFCWU1hc2lXazlLNnRKZ2RPdDJ4SkxyTmpNT0kybTNsL2UwbThnbXRSdFRvN1NORmI3RTRQVWFiWXhmR0trWTFiOXhkYmo0T0srT29TYnBzKzc0QjE0M2pnK3I5ektnZnBCRVI5di9tM2dTWVNwU0FTYm5iMGRubGNUSHN1QTJZZzV3K00wWE5MU2syZHdZUERZOEdSMjVzZmRQcEgzb0RPZ2F2SmxEQkZJYTZHWEFJWEs0VnVtanE2L3U2bHR6ZU4rYUtRa3hNVk9wWHRkclgvdWtBTkNLS2hWbG5PdFpsTjB1b1ZnMXhiMlU0QUZkaXEvU3o1MFVjY1BORFUwc1grREZEQ0RmN1Zpd2d2TnVub0k3T3AzQjdHaGtsbjZORFBSNE9zV1ovYWZXRTh0REJjTUVHeFdWVGQxQUM3SWJWY2c3eWdSWGtCcEVTclRybjZERVBlRmNjRU1nTHJTQ2NET1hHaGs5aEVGUE9kMlJBS3BJem1sb05VWkc5UW96b0hxTHZBdFQ1Y2ZIRzZTUWtoK1J1MElyU0V0R3ZsQVJ5WERTVlZaZURzam5yS1FXY3VSNnQ5V1VDU3JXeFdFN3NGU3ZXNk9JcUlEMXBUTk5wT25jcWIyOXd6YWhhVm1lOGlTM0toL3l3M2tSS3V3YW5aYzJlem1ST0JYcXltdDFZQnpBWnpMTnJrRDZJeDhlajBhc0I3Z2VQaE9wTDBEajUrUm1jWGJMT1grMzl4OHNpb1NmMXN0MG9pNFNnMlUwZDE1Z1c5c09ncS94R3hXb1hMbWR5c2FURm1kQU9vZ0dueXZscXJvckhMeTIvTndSc3ozUSsxeFZTa2tiUVpleTU4dWszK3JZK1RkL0pKZUdtaG1aMlZzTk1YZzFpZWdlYmg4NnY4ZXJOMm5GYmNLQUliTFN5cnpDcWNIOEdiRXY1elkxT1RmZkVmTTQ3Q2RTTWRiSkQzMGRwWEFaRThLZzY2cFhQd3ExdzlHWjZLWFE3WmN3VW5wbWFtNk9ONzlxN3ZvZmpXaEtyczZUZE5iWFBBdmNmV3hoRVJvWHpwNDNDeVJBeEJnZ0ZaMXgzdENjby9YUFFFV0ltZy9qZ3NoM1IyQlB3eEFZQ3drYytCcTQyVDB6cXdISk9pSFdWbndRSjZZYzE0SXdpdWlsUWhZcnZwVHFkNllGa3k4SFhkVHI4cHozRE90ZWE4a25xY1pEYzN5QzBBWkxlZDZ3RDUyMGd5bVpTaUMzS3c0YWdBY3owRFRTMjA4ZzRjSm9SUTZ5TTBBczhmdTVma20xRERVSWFqL0NSZjNBT2QveWJiZTNacnZKTUh4ek5IcVlQMHkwOW84bERXRWl5TkZsU2luMXVGckdKSk5ZVHNaaHNNNFg3Z1orMTZQbFZwMlRjQUZvRENBVXZYb0VTQ2IvRGVQdG9kb3AyY1Z3M3dyai9RMFo0ekhKL3BoN3RQVjBKNFU3UEsrRkd5Q2k0NFJySlQ0QUxKemduTW4vTDBwN0ErS2NRYTZBc1hKM0VFTkhvR0txVVY0cjA3dGVwc09xOUMrczhZVEgrbCtUSGtpekpNZ2gyaTVUV1gwMTlpYitCTU1YdDhPM0drYlAzV25nM3ZFRnBmREsraE9nRFRQZkxOVnJHRmx1dGlQQWJTM0w4NnBjenRXbElHdktySEwzK21jNlY3U3RCc1RjM2ZvaVQwdDhrQ0Eya2kxQXRxL1Z4bFhudzlGWTR5S3g4L3RMMUFvaEs2bUYwOC9hNVdnbUlONkZMRWRrQzJ2ejJaMVlqNERJY2x1TURIUmxoL2VXb1ozSHNwSmEvOXk5cWEzM1BJWW1sVXBQYm5sM2RsdC9BTlp2WjE2OURUZjFUUWFFem9BTCsyS1lRaUVnWWxlL0ZVRG03UXNPYjdoRGFjRWh2YUdFRFpQdWZzOVF6MUFFeUZNY0hwaTVQdFRxaXRaZUN1UzdNTmZsOWRJbmFLOGE2QmROS3R3aG9RMDlHM2tUK2pnSTJlNi90UnBUOU1tYXZKMTZXRDd6dHVVYm9nR0RGblRXblUvVWVmb0k3K2cvWGludlYya0RDaDBWUS9CbXZsQmE3VHkyZmNHaWZIVkhXU1ZCTzEyYUVrUUw2MUJwZEgweEprL1FJcjVqb3RiT0k4QnJ5VXduS1Y3U3NqTVBWcTVTZThldWJQZlJKalZOTXBPbm40MDVLMUxpVWdCODlNeERaNmFWSXkyMjBVa2RIb211L045QjFWUS9lLzdBekF6N2VHQld6cW9KbjlNUC81R3BueUY0UDhGOVgvNENBaVlIVGg3Rm9HYm80dDlmckFLMnU1THZkd0dXRk1EN1hRV3Z5QjBTVDZqQm9seWNUVUhPZG1lQzM0ZkRaZVJMUnh0YWIrdEJhUWloY24zUDhiSVd4d3NGVlM1WDBhZ0pHVWN3RlU5clBnMDZEV1QzemFUQzhMbDJrQWU3Z3k3eVB6ZmlCcEtCNE9URUk1cURVemhrV295SGtnbG9ZbnF1YSszUmwwaTVtYmZlQUovUDUvdHlHbTBsa1FySnZZcWpiUTl0TjBFbWxzdjBQejc1b2ZRMER2WXdTalc0VFRFWElFNm9hYjFlazhXYmV0WGdwMm9PamlSQk4wdm1hWGt0US9TVm9oc2NxVVVXNUFoRDBrc0xZYjlUR3JLTE84ZzNyUmNIbDFNQU1kcmdHN2dJYURCYUJCdGpUUGxyYlNEc1ZhcXN1N29SdTdldWRyYXhyRTdyUDVRU0RRYTE5aXAvSUk1K1J2dkdSSlBsWnB2azRlM0dPRnJXdDhRT3pxSzNvSjFUUDlSVWptaFludm1WNjJIODZFSTg0TU9QRXRNKzErZVV1WnFIRjF4UWd1d0FFeFdRZDBjOWM1RnJqWWJIcXZWV2JTaHNBRXpsSS9OM3BHYmFLZ2M4QVN1aHZFL3hTdlEvcmdPbUVGZHM2RWVZeWVnY1hNd2JaQ0YrellIRDNwNTB0WHp4cFFrQkpjQm5CcFR2N3N1T3dxWVNsSkRuQ3A1OFNRdGlNdVdiSUdFZFpXaU1aNHU4N2xUSXJrYTdMYm5Ib0xKT3F4VkI2SU01WjcxMVMzVmNoUndBUmp0MU05aG1KMlZJSlY3NDErRk1PY1NhSTFyUmlUMDRBTndCQ0NacEs0V0MwaGMzWTRweDh2ZzVKQ2wvWnFsU0g5VEdtR2xMR2haWmV2elpEZXJvcFhvM1REbkcvalRlRVRwVVlCMzBVWi9lejFUS01jTnkrK1F1OEZTK3NrVm9GcnFaYjhad0RGc1pqVGxNV1N3bXJMODBxbHpkK3ZnMlhITm8wTUVBS2czOTg2Q3Y1dVp4b2JzeTIvZWprMFp2RElEWVMzOS9vK2xFRUNhejNWNHpaeUdKT1A1YWl5VkVlMTNCS3ZlMWN1dW1rU2ZuV29VUzdnY3FMdVdtd0tGSzcxTG1IcGxxcyt2M3FrMjBKZGNSRXZNa0ZuaGZJU1F4SjIzYWYxak5FeTBjMjZLSUFZQXZWWUtvT0lpbmFMUnJqZkw5MURrV28xcWUwMEkyam9TWklvclBwbVgweDVJWlY5Qm1nNkFvV0orUTZWMEdHRFA2OVYxRnpZTzhaZzRUU3NYa3NMeW8raURtVnAxRk1PY3VlazNyQ0daNGY5NG40Qm1maUd1V2pnSVRIQmhZNTgwMmk4WlFrcHErS3U0NGpNOFduWWlLWmJlZmpGMjdaS3JLbE9PUFJHK1lTU1hTRjlFQ2N5cnFRS2dFYnlGNVQyeVFJczdNVUhiMG9lbGxGQ1dXanc5RmNUME50SElGbjRzY1c4cGNQOCtGVkhPcnhsby9FU1dUaDN5NSthbGphQlNyeHpBRWVUSFJBeko3bWUxYjhDbzMxSnZMTExmODJDRUJIdEwvcTM1SWQ3WlVsY1ZhU21KMXRrTVlJdnp0QjFhelpwd3RpcVlwcGhTMXRENlVobWtFS05vVXhXYVJMUGtXQjBKd2hIaVZ5MmphZmRaMEdCUVBWODY2eXpYZE1UdFd2c2srNWhJNHF6RkhjVWVJWU5JUmNMMUVtSVJQMWxFQmFuZ1l2b3VjVk5aOTNqUnM1TlVpcTNZV3hwaFdiU0JCQmU4cGpTUldpRkZLd3N0WXpFWVFxSlZpYUFGdUZKQXljaHJORE1lcnIxWG43Mzl2QWRsVzJHRmg0YklLRG1DQkFGU1B6YUFZSnhhNjRCbE54QUN3NllvbVFqZGFFSytOMHFyNW0zeFd1QUZYYUlQeGxZMHlrT2UwWW11cXdkMytBeHBXb1dtWHF3V3djNHBzYU9SVFN0YVlsdmpxS2l6YU9LQTYrSUswYi9OdWFDLzhNa0NkVHlEL3RjNlVwcWVubGxvUHZ6cyt5TTk3ek5NZEFXSFVVYVJjNUROSFhQWEVqSDdITUhWQXNtRGpQc0ErNDkrRWswa3VwS2o1TVB2b1I2TXpqMGd4WnNYOTdsWjlPazFtaEoxYW85KzNjUitycmtuL2R5cnpnWG5qUE1QVTh0Y3h0ZDFtUkJmSzFxenZJOG5uVkdyZVh6NjVObVRDQ1MwRDhkcHdrOEhwWC9UT2Y1Ym12eEMveC9UNVBiai9SS2xVYnpZMFQ2RnU0YTFWTFNJbXlZVTNKK2dDNWVvY1pKV08vZEJRTkJRRU41VHVpcDViazhidW9XbkN6WG1oQUYxc3lJMXo1d3hYd2dmQ1Baa3U0KzFoeThyZFNta0l4aTJIWXVnUWQyS3lRaXF6R09DRlFVRVhWNmN6L09mMTNDNDNJRzNLcDQzMjlPREx3OWJPZkVqbGRUeVNuRlkrU1dBSWxyUml0WXoxMVkvTzV2Zm0zRXFaNHBtekZYaU1mVzRoRUJzRksvejFidDNLY3RmV3ZMY21TKytTeUs4VThlVGZ5N1dPL0p0NVhXWUV6RDE5SDQ4cmVub091SnIyNndjcGwrMHNXbncwUlA0MW9tMDdBM0NhZ1pRSUlnN1NQSklBWkFIS1MwSjJSVmpnbm5MQ2NNQ3ZrSmtLa21RTDBvNFdaZDhIcG1LaTVmVFdHam5tb0xOdnVnREZaeFpGWEZWTUtuaDcxVHFFNHNGS1JBZXFaNWoxcm5EYlNHMWV0dkIxRUVHMDVsT2FqVVJZeTgzVmJVQW1WelM5ZjVmYzVUTUJWQnJrZ2hNc2ladXR6cVZTbzNrdDQ5TkE4cE82ckpZVTVpYm02aitFVVdBU1N4YUtGV0I0bmJYRDJiR0pzdE9ZYjJTUTNZR25ZZ3dVNTkrOEdhcUx2a0MxcVBMWjNaY2MvQWlCbXdubldKTTNqWW1PQ1RhaEdJWmZvbmt3VmlJNit1OUdsQkVGYXc0U29NeWJwekdOL25MNDgrenRoMXNXbWhHektyWGROeC9FdEFVMFIwd1N3eDVBYjV4ZUdQdDd2YXFnR01FbGc0VTIvaUc2SzQwRnlLdjlQZC82NmloMS9sekhqZ0dKbUtZWVYvcGRwcHBpN3d0NzVHSi90RnY3VXMvMEUxR1pZcHJtVFQ0dkMxMU42bnBzYWtJOHF4OUFmV1dMSmJ5TkRiUjlYb3JHZDh2Ynd6TnFia1FFVHRuTjBaamtzNGs4bTAveFNhK25zKzA4NHE2V092T1V6M0ttc0ttRjh5TUdneHFxZCtoVDVyMndldEhDZm9QSGZtNTFtd1hEV0JManBkdGNMNnJiRzN1WnJxSzBxenpCUEV2cnlyZU00TFdiREtpUzluTXpxdTRpVVNrWUpkcy94dm01TlFJaTBCN1Q3NVZzT0hpM09RWVpqMURkM3NIOS9NdDh0a0o3VWZiUUtDVEtWR3lZYjBjK0VldEkyYTFDSVFxWFlGbDVpWXp0cUJKVXZYcEk0YWNBV3BwemVNbjlzWk83VUxIZHB1NXBnQ1BOelB0aTR3OHcrNnB4MlVmZkZCSGFpY29MS2NjeHFvMXFuT2hUbVdkamw2YTRJSHpFakxzVmNuenk5ZDFiWFRabTVGUjNPL3BISkhxc2xpR2FKVUw3Q2lraWtjajVOdmRjZXpiL3ptWGpqMFE1WUxWTmI1Yk4rNnRWUHRwS3llUGVEYWt3a1J3cXU1dkU3RGFUOTZCb25UK2svQmsrM21vQVlCWUhCRnRzYU5sbmYzQXEvVHdDRjFhaU1YaVJMcG1PVC9JajAwVzNoQ0ZBbnBPWmh1cUN0enNEc2ZIOXpYU1B2MTNEWExjQ25QUnNjZjR3VjR1RTFUaENGOExHKzl1NGFRMmdTSG9ZSEhYdVg5eklCdThsV05aS0hiY1R2MVFoTWhtZFFkS090V0twL05oUzRVTWFRSHovUm1aSDhkN000a0VmM0VMeStRUGUvOVFMOFdKMnNGNWdIZTZRQmtmWUc0Mkl5WTUrazlUdmZ5N2ZPemNsMkZWZmQrS244MFlFZ0M1QTN3S1lQai9QbXllektBa3NYV2dyZTE3cndSbnNuU1dvbGRWTFFaVVRpYlBOMG95K2U4MXBmTlJSa2FUbHVJVE1ZV3g2bi9rcjFzeEh1dTRFWTNqNXhvcDQ5ZjlYVVlaWWFCbnJmOVQ0NmQyY0lRM3QyZmxsZEJmY3lnRUljdUFIVkdxTlJOQmFwZlEwOVpBcll4VlFhbktRQzBiM3hCSmJ6dkczdVZaUlU4c29YR1lxRXh2MU84Vis0ZS9zYSt6WitkVjltbUtDbDZwZmZhTDIyQWh3WGtPV0pzY0h4WnZKVzJyTDVQSzh3MUJBVUNoK21oMlovTGZvTTdrL3Q3M2haRWtIYW00ampOaW13Zkl2WHVRRGczZUVPczNyaDVRd3p1eW1MRnRUdFE1ZEFabklMTE9VamVwRytnbkhRTngrMCt4dnRsbjFrVi9UK01SdGxSUStKNVR2RktzUFYrZ1YxSkhieXJJdm5zR2g1Tlg4Si9YaFNEVHNFWGs4WWVpS3drU1dKRkFmdnFwUmkzQ1pUaHZLSkt4b2h4NmdkNE1yRUd3bUxSN2taUzJpRXdXR29VYVljQXMyWjFMOXJRbW9kMUI2bGgxNmFJSTdGZC9SUFFCNEx1R2xkT0p5WGlSdkJnRFFMbHdVY0laREtnOXVwNkJmMHdGczA5ZXZ6b0o5TFdvUTZkOXQzNUJHeDQ4alFYL1kwYktjMnlEUGFya3dMVzFUcWJnYlVWRmRtQzdjeldWd1JldXZjUXdzVlh2Vmw1VkhwZ1NLUzZISDBEMjBQczI0dFhnQUVYNmxhL2ptL3NDbW5OZ20yRmhSb2NmVy8yclAwY3FNSnVoc3EvS0pmRGFGSVVzdkdyNjd3VFAxK0hBeUhENU1wdjZkYnozMUg1dzhVUHRSRDJ4b0VnM2RVRVIrcmYvWVZ3aU14c09WNkJNUS94NXBycWhBb3pzeUpDYW43THpqNFZ0RTdIelI0SVE1Rk1SYWpsVFpaVXh1MlVNY0RUcE9VdUJUUUZoMDVhY3owekNIbldHRWZDb2g2QkJadEFFN0cyUU85ck9CTkluRG9GL1RIU21qUXhLcnZZQTdsM2llWHNIUERlYkhWWGxLTEYvcmJ6VndqNEp3aCttN3hBck1BS3RlQVRUVTBKT2ZDaEl6Q041aXpnU2RGWXc3OE5uYVROeGlCTFp4L3ZoZy9jaGpTMkk1aFJ1dE80WEV2WThHeG9FOVVtV2VqTzRDZUZjTzBPRjJsTG1FQ2QxMmNCL0hCbzkrYmVrbk93RC9Db0ZrSlZIamNvN2FFQkxvWDV3Z3cvOUZ0d1hEeFJzc2lhdHpLOEJRVXk2RGNkcGZQRmFuRUtJVGdxUWFvVWdtLzIzNEwyVVQzMVZpb3ZqVFJuK3hZMHp2Z3JJR3pvcFJhdnhILzkxRU5CY1FvK3Z4dDlZRjY3TlF4bzJuTUVmUmlWRGZmUmdxMW9yZXQwWkxTY1FuNmExVldPYTZBeEI1MHRsTHB0KzRDSHZHQnI2cTBhckVaZ3A5NzlHK2t2cG9EUDg0R2MxZXdtbitCUlg1UGtjbGp6ZzRRWWY2dHBYYms2Qkw4NThtUk1xSkJZWHlXU0FyYkpvN3dycTBlOFZOWGZFL2hHUE81aHdCa3BYbUNRaEpBNUUvTnpBMS9aZWRoT0luOGt0TGJkMHQxT0diUGQ3UDRzN3J0cEo5dlpSNS9ORlk5S3ZZeXVNNm1SWm9QeUt6OTFiN0hpTjR3ZXJPdFBlL21pdE5lYWhwQWhYcVFuWk1zREZwc0pFNFpYVGU5RGpRalo3bHhJbm4xdUs4L21RZmRMaHBlNVNTNjU4dkpucE84NFJINnlSOXA4aFA0M2VKMDJ4OUlvUmpTZ21jRUVDMjlyTnJzejF0VitWbEhsK0lySkZwdjRrbXlwTTNoWEpXbEF6ZlpRb1lBRjd2NTBKbjg3bE03eVViTkg5ajdHcS9XZlNnSFBPekJvazRzaFhkK21OdExIYWdrUE5YQ2hlRVJSVmJ6Wjdad2twL1hqTzE0TllSQm5SQ2tWaGpmUlM1RXpkOWUzWVJEMFYvRU9QdU1BZmJDMEgwRlh2V3BZMlJ1d1Nqb08yTzg5Snh5bWdwMjdRUk1KakxLck5EeG10NHV1VXJkVFYyc1llUzhja0IwM3ZobllwOSsvYUxNOGVoaE45TFpHVUszQlV3Y2ZnbE41Q0ZkcUxYWktLYnBwelJhZ0tNWHlSbUtCRk54U3JBZzVBNUtoNU91M2Y0N2tCVkRCWkRndEdBOGk5dUpGTkpQWkxXZXJwbHp2T1JTSW5VTXJScW5wRHg4NDFiZjlsa092YzBxWUx6eWQ0cWIrc1IvcHBkSGs0TGJGRkI5V2lhaE4wYkpmVkFtWDJzR283UW1UNXNIYnFnWnNBTkVxYjdPVmtUb2I0S0k2UVUzcUNUVG1zUEU1UE9mOWRvMW1zcWtjSjZyZkgwdVBSVDVwTGVVcWVkamwxZ21OY3lwam5CRldJcHNZK3VjaXVaZzZObTE1c1hhVXVFTFVxUktEcmxyeHJIZW9tZCtPOTRGbldIVGZBL21lSVE5Z2YzSVVSZXpsVFR5ekY3L3Q3a3dmOHg2RmFKanVFNHlkVEZXa3o5MXpBSExzc09CRTFaNWIvVUxqc2d1RFlKNC85YW9yUFQxUEFmN1V6T0JpTlpBeEZnZ1h1K1h6cjdqcG1MTWpvVHF0ZGNSRS9GRUMwSktKZUJoYmx6cStiN0RVdnFTY2pLZ1pGd2FRTVExRDdWN0RFM0E0cUl6a0haWDZkU1k4YnZHd2NaVjlOZTJxRFZDMVZMSEt0YkJWdWV3NFZsYTdtSE5iR3lWNmYwYzEzbXRVZE1HeDNWQ3MxeVlqd1ozYWdlcTFSK3JlWEN6T3pMNVpaZlBYam00ZEJkU05Lc0liakhFT0xjTEZ1WHBtZkx4ZzdSTVBJZUNxZkhlTWlEZE9Gbjh6UjIyRUZEeUI2QUJMcHdPOW1yNVhTd09Mb0FOa3VrQ1hYUTNWQTkxK2JmL25lcUpqZS9pTGN2SDF1Wm0yaUt1d3NwTTBBaFZZZmhrVzF4ank0YVc1S2tqcEJuWFFqWitjSUZFVWJ3R1JZMzhML0NiczJhbHBQdjJ1TjJ5bVlzTGNpRDRJZ1ZPREZqTUhUWkw4UGVHNms1TC96UnB5bVlrNE83eXF5cDUrM3pjdnlnTWVJeVp4VGtxVzVPOWV1c093Q2VMdE9DUm5EU0FpZlRtQktoUW9HdCsvMjVYMG1FcTJzR050dWZZMnRsVmtGc0hvRFdTWFlWUGZkTnBUNjEwU2pmZHYvZEZlVXhXbTFaeHRLaXZjVnE1M0hnSVhQRVBubGRVQlZBa2hPYU5PWTlkR1FxUmhlaEdEcWNzVDJnbHpHZXRYZVlBQTV2VjJ4a3Q3V0JkQkp3ZTBJT3pBSTgrNGQyUStaM0JVZlBHN2VVSk12U05BRnUxU1owUkZOWUlmbkhyY0ZCeXQ1WXNPNEV6d2dTSVlnOFBJdVJPSVltMEgxL282Nmd1eVp0SVJlYzN1MkxuSEVtZXREb1NZdlBZZnJLdDBPMndEZkxxeVBUUG95d2U5Q29jdzVZMFNHWVNnUVdxSGVJVzBYMk5oa09BemVqZDNrVzBMRWg1bE1UeUZmVWwvSml6OG5pdW9VWjFNRDlZK0F5SnVwcHVndis3UlJQSlExQ3JOZE1ueXQ0eVE1Qi9XWTFTZlR0UUhGajVjZ3Z5STg5TkVLaTlOSTA4VXRGdzZRNEZkcWZZdEV4emNFZE5lcXFSUmhzd2dOS0dWcVgyYXdSc0ZnQkxQY1ZzUXhxSWp2QVhwUGVPVXVZcENLNkc0alZjQy9zRjg3WWtjUXZZQ1l2MHFOODI0UHIvMVBTcmhvNmgvUEtycmZpSEtBTyt6RHJDVnpCYThCblpnMVY1cjVwZTJBNFY1NitKTXI3OHRlTWpZcGE0YUVEWmRqamdNaXp0VVhIL0huckFoSWljMm9uUFBtVHRLQm9vWHFLdlVnRncrWFZsWCtqeGo4VFI5bmlWcVVValVQcWN6cUd6S0o1NmQ2Sy9DV0R6M3NoRjFxYUF4YWhPaldtdHkyNE1mYjNDanhJNW1aYktDZ3BlWnI2dG5ibkE2Slg5UjNMbnZnRDJ2Q0x2QnhFNVJmUmZYR0x0U2NRMjdBdEN0QkpSQ2Z3aFhtUmdjL01mUHJWZ2FCT0UyeFlLS2tNZXlwSGx1bitzMmRLL1FtRElvTmdISzFBMUdRY1c3VGFIVndZZWRWRnJDME9oanBGa0xpUU1kUEdpZXNhVGxpTTVUL0VJUmVDQ3VBRDQxc2k5NTBSYVRMTnJqSnRFU0UrRm43UG5YRGhxd0ZJNlVXUnRzaGZZY1hTZE1TYnAwNzBpRUNFSGZ2UFNGVmV6WFUzZXR3dUVzTjNLSWVlbE5HNjBjZElBdElEUVdwaytKbFA4N0d6Lzd3cmZyeENiMUN5TmxyemFXNkhJemYvbm50NVZhRWtXa0dMcHViQXdNTmxZb2FXaE9reVcxdTl2Rjk4VXZMc3MxSkwrVWZDUlFaMm53MVFaYm95ZHo5aGlJMWZRN0lmdTM2TTJJbkkvTi9xcVg3cFdTNkNRbFFpRmtEQmxBeGQ5OEJEL3lFQzh0UTVGTy9EaDJ1bk9pZlNUeU8rdUxWZkRNUG9rdS9UYStBb3ozZ2ZnalFVTkI4NysvWGM0VHRWTXZEcTZQamRDcHJHUE44S3NuRitwaHdSMmdjWW9jM1Q3V1lIL3BKc1lsS2RMWWViUDNZN0pQYUlZeGE5Qlp1RGpaZWxZdGZMYk5uRVhuWjVnU24vRU9wbHozOFFGK0dOZWFsZDU4RHBJMTNFQSttczhkSmJEZW5jZVk5NzJ2TGhIblFaUWtDengzVnBuakNEWEJrOTgreW5EQ005cnltR09RbkE0TEp4cjQwRzJ0RWtjRyt6Z1ZMeHZBczZWSXN5Z2VmMGNvb3Q0RDhkRGNDV3V4YWEzK0czbnlUcE03d0psZFZDSWdFSzFzWUVEcy8xQzdNV3NPT2hCWnpPQXNQL1VVcjJQSDJmbzljVU5ZN0d2N1RBN2JhN0k4dk91YXdpMktEMVd3RXFYcTVpYUduNWdUbU1sVG9WeG1xd2FobXJOZnA1blQ4c2Q0NkJIN1Fsb2UwNW9qZG11c21KOUV5UXVKVmpkTW0zSll6UG4xK1cxREZaT0NRaTY0WkNNUTl0bkdOVEk3cjBKZlBvNHNqU0pPT1pvU0hzOEFxZDNoVktXUmhibitDd2RmWXRNWE53Zm1zU1k3RjRTaWkwOFpibTc0WFpld3JoQStLdzRzV2xhVk1COFI4SFY0QmR0ZHVyNEdWZFdjOFZSUmY4cUlNbzJGRW5VVHpPUDNoajBUUzNoY3JmSFI2N2xPV1Jvc0w2WHR5Tm1ZMlFzaFNZNFRSMHBzNUhIZ1JYaHcySUxYQWZtVUFqOGtVTU53MTRJVEFqY0NwazlXOUdDT0ZYVWJ6VG00aVV0NXJBaHZ0NElva08zdzJzaWdGYlNUWWVuSmU1OXV1dlNISEQxY1lROEF4ZSt0c1dxdlpCMjhjUjNZSnc5VlJOa0pnNlhuaWk1dHZUTzc1NENvcDFwVXRhUGR4S0UvY0xkMFY4bDI4V2ZCUElkRStPc1ZkNjdoTEJkMlhJelg0Mno4RUxwcFZtOU1FZllhYzhCRnExQWhRRC82dENRY1I0M2F2d2RlYytqSDRYT2Z1ak5vVCtoWU53d2Q2L1hLSHQ5YjV1OHVWaDJsMVJjUlhNT3NHVlBXYWNSSVUxcm4zWnNzcDZydUFITXZBRUNsV0c1aU0wM3I5Mk9RNGFFM2dIVjVRdlpwMUJXTDh0OUgwcjBzQkdieVc2S0QrK1Y0WUkzRGtISzZmWit2dmJsK0J5M3RpaGV0eXVwNHlSZ0dmQUtaTENHelNMVXA3bDZBbGJscU9uUTBOSkdIb1ZLNlpnL0t6ZUJ0TXNhK1cxeU84K3pFdHdSNkVBc3hJdWVkVXpzM2JSRVZaMXpOcnJFekpIQ2Q2WVhTZDZHVFVtK3VzNmtkY1A3cjhoR283UnU0eWs5NWdWa3kxYzVYZml0MmpmMzJqTk04NEI3dm5lYngwVzBjOGZHcUZPeTJ4ZExIZmJDRXk5a2NGR2x4SXJpNGFvK1p4eExhL0VGNkRBV2lVbmh6SUlMMnN1RjA3VUUrUFF0eWpvNTUxbTBnZGpwU0hkQ05zOTQrZnhlM2VnRkd1RllwMUVORVVnSjRHelU4eGtZZGdyT1ZkVDJEQiswb09icERFRjVpUWRXcjZGNWtTNXVocXVkV2lLNUlMTkhMM3hESENISUVPUDhFZnhRWkN3TGluZmdXNFZqUDdzckorTTBzb0hmQUh3M2tCSjRkRlZjZTBmYWw2RTRBa2lDREd6RHVZZnpYbHBObXk3cjBPaFdLZm9CTHRXUXhxVmliaXZOTDA1Z3dIakNsaHhXT3EydnF1Qk9nNFBNMTdLSGpzQzdWVnpPTjh4SzRmVzZNMDd6cVZOUVZPQlhIbDFkbHJCTlNVcytIVS9vZTZlQ0NLS1RVbEd0SmtmWW1QdEVxL0Z4UDJsTmRrVHhZcUY3YnQ0cTc2cjNJNWREb2NqdTVTMjhqTlZNNitIclB4N0VyajRlM25DdGVuSjc0ZWh2TUNPZkFRbkxZN0NiditSKzBTMlNQd0RqMGRUd1RMMG1ZSm5zeXdEaXloZUlqaGhDK0xWL3AvV1I3K2hlaDZ4THZrb0tUbE93bFRUS0ZJSDRoUnYwSDR3dXBlVHV6a2lGVDEwTU9EUkEwZ3JscGJEQ1pZMVdIOExYZHZYU1d4bVBvcnViMDhwL3BXaWRVZkFta25JUER2ZUcxclJ0blc1bmZLOWFTR0ZtbFdMR0RSNk1DQ2ZyMSttS29PWG81dmZSYWRHTEFLL0h5YnFDMjZ1a2Q3T2daYkNPbnU2L2ZTZkFjSWVja3REYlBzMi9teDZHVnBxb3FDOWZmV1hWVEdXK2hpam9HTzdpSWlSaXh6Z3JxbWRDakh6cDgzOFUwbjRsSGZ6L0hvZy9SZ01mcTdEbEZ2TzQvdGN3dXo4ZW5CbytvMEJvdHNNNXVqVzhjVUgxWTl0SHRoZU43NlVBdUFVcFNoVFBDN2Q0bTNwMEFPK1hIZnlYUmpyTFJHNTZXN2NqR09CVG9jUXN2cStVUm9Na284bXcwQ0tZQmxrWVRIamlJMjVpeE1xYXFrTkxPZmE3Rk82UXNENnBrM2NXQmJhT1h2UzJNdmRZVmVmK3BFT3lrTnZXclRDSUNCaDF6VFhjMmE4aDkrdUMzTXJjbFVuSC9IMlAxWUhSL2IwaHl2RklrUG1OMlZKWFNvcllNUFVRM0R6eHFGdTkzbmxVSGJKOXZNU0R2RGtZWVhQMUpEZnRvWWt3cDllUnh1SUo3SDd0VmJCUEREMjhWeERSTzBteFgrclFKLzZrVnhpQTVFU0h0Z2hJRkpnTzdpMmZ5Z1R3K1hRemRHeHZkNll5eHVJUG9hM1VXSThVbHdUcVVaRDNnUUlSUXNFUUwycm5oWGx3WVY0bWtyWTBZU3V6d25xQjhLblNoSTk2RExmYmlybFAxSXRoMFJPOEJqbExJd0pnbExpTmJhV05oNXlwL0dpTWMwc2lYWjZ0RitXY0NhN0R0WVpVRTNtZSs3aDZmT0JOVlFkNnIxZ3kvWWEzWGs3Y0VSeVZ4N0kyMnZaNWFLSWxldC9va0NyTWJ2NVN0bGgvRjBlaDc5MzNKMDBsbk5MRWo0ajNLQXV1YXoyOEd6NXc2SHVPVVhJbkhaK001WUgyMCtrZko2ajFVVnpYejhsQklIeUpXZkRzbkN1YWs5cDAreWVNSUh1NzFnOExHbk9QWlptTTg1aTFvM3JUVGE3QitreDdYWnNwUmQ5eE94azY3RE42MzdxSlVKQVNoemtUWkRtNTEwb3pSZVRjdGl2eTJHcm5rSk1xdGw1bmRpdjd6bnhOcWVTdFAxa0tnNndKYWdhTmp6amQ0QVdhTGl3ZUFlZnhwTmtESWJ6TXp3T2RNZyt0R29rZzV4cGp2b3NaZzQzbm9JYkI2YndrS3JYQVJxNm0xMEZhM0dSb2N5aFRPS29hMCtValdwSGczM0hJZ2RVaEU1SGFQaXhSUDJkL2xicEdMM0VSQ3hNRWlkMllEUXVJWVpoR1JOMjNQSUZrQ2hoY3ZIZ3B4ZzRlaU9iTEJrZ3RMU3UzdCs3STRmcXlyNDFPREkzODhpWDJLZ2hHVGhnRTNyMEk1MmxMamU5K0ZuU2NTWm0xSzRuSlBOZkQ0R3VyR2RaeGhSeXRCTVNCV2ZYL3k5YXF2UEpYSXNNVjRjOTh3TVZ6MzhJTEwwZ3NyY1lYWnppaEdFNXZBWFJvcE1XN2d5MXpoWllrVytRT2EzUmNFd2ltc0I2dmxLTFFRcVVEcmZ1TTBpSTd5VzhIZTB2aDB0RDBQV3llVWdITkpBMVQ4VmsvV2wrQ3RQb3M1ZjBKY3FudENESEpDc2h4MGcvU3V3QStUaGtlMnl3dlBLcGVRSFNXaTg2eGFzV0xHUFo5aXRSS0V1TFB5dE84NjVBZzJCYzFrcllqcHZvZ2VlK1NyWkNtVWI4T2lWQVFaa1lrUEEyWjcwRDh5Q3NHQ2M0RzRuNVFJdUZhTmI4UVdLQXFSNHh4WDFQQVQyNXVHYUE1NmxFV1JsZDQxQzcyamw1cTlCUkVUcGVROGdSTktjWTN6ck1zcE9tc09RRm1ybDhtZlh6eWNNQWU4QkhMVmNuY1F6clRITHRzTElVeHFya2QxVnpKVDF4NUJJVHF5VVZmNDBvZXRMd1hFQkltMDl1ajVHSmQzUEU5YTIxT1A4Z21BRDNOMTE2YjA4MElqeXNyWC9CZy83bzJmU29Ia0RIcjZJdC9RMnA3b1BJV0dWNWQ5WDZFTVpSdmFldUdsdXhUOEl4U09xNWRvK0dFNFAweElNSDdwR1J1b0R1eUZjZStNMXJUYTNDTFMzdnBPb0ErUzhwV0paa0t2QjI5S3M4YmdoQkgrc3J4Q3c5T1h2MERwdEFobkJUYmdESUYySkpzeVNaQ2NGcmVSbFZOOVVLcUp2Z2FKdTRWR25IemIvQlNKK2dLT3U2dnhxWmpCWkdsSitHRTVaVnZmVUtBVGtpL0wwQk5MaTZCbnk2eW1JRnNjN0owQ0gzUzFmOGZJTE9CdlFuWE1NMWtadklvRzNuSHhtS1FCUVVQODJBazZaRWhmYWtkTjRpbmsydUU1Y2lCWjZtWWFCS09udEd3QWg1UzU5V0thVlZ0VS9tZGYxaDNjTnlSZDMxN01jdXNQRjFsWDFIMFRjVkV6aldLUi84NUt0RXBOREhHVE5BbTQ5MlMwdDY1WmhtVk9oMjkyclE4THlOUnh2aWZ5TlB2TUd0S24yS3hqM1g1N0dMcVhEQXA4clRzVUFRZGg5N1p5MUFVMVZ0SDFJNGN4VVl1MEhYem5iRFBQVDhPTDBzUlNUbTBNcVp3QzF0RzM5MFRrR2NXckZUM0llS0dBQ2JQRWpwcjRMcWdKZm9oTW1CZ1BXeDJIZmtXRUtSOWp6Q1J6cjZwWkZGdjZCaFBWV0hsQTFTcG52V2hEejZ3eUVWc2JIREdnMzBVR3BYOWFOSjBpRGFtVk9sU01heHVsY2Z1ZHRjdTR6c3I3N0xRdzdHb051MnJnSjUzYTZ3QlU4VzlVckpLTVBlRENRQi9LbHMxWlBEd2h3OWJLMWM2SG52TUF2c0VGUWRlNlVUb1BVRkNmUDBIa3BRYUROY1NFYkYwU3dzcFdXRXhUUGNIVERmN1hXN2R1ckNrVm1qOERuNEVyaURZT1lxSmFibGgvckJ6eW0zVlExZ2V3dnFMS1VQOGhvUVQzUW1jODFWK2EwY3d2Z1o1Y1NTU29oaUZhdnBvazRGYjFRT3J3NmtPeVNKQVJNWXZqYktubWN5TjZMR3pHcGhkWGRDbnFoVllmUmR4ekg2NXZrR2pyR3VGVXRhL2NSL0NaS2Vkb2QyT0l0RDloTTJyZ1Z0a1dUaVpuY1FsaU9ndkZPR1didHVEcjhwSktrYTA1ZERFVWowWFFYUUd0Wi9nQjJxenVjNXhnS1FkamVsYlA3YTZEMFF6aS94ZlVVbThJRUp3ZDQzZ0dTaUZwM0ZXcGxmeTVuTU1kbnY2VkdCUDNEalNqd0lqbENITDQvRFhTZkxrMXVzWS9KZ0xWUDY3Ukx0dFpHMUJpT2xIY1Rxejc1ckZjZjVEQWF5Zjd6eHVzZmllVTVtSzh3MWRtNWRSMUF4VVAydnZ4Zm5XdHBSeXNJR3lEc0dIN3kxczl5VlJXOUFaOTZORHhPZ3JnbFVTbDhQS01YNXQrbkUyeEQyUjJ1QitxbXRJdDNHVWNEUWxyK09uR1ZiSWtOYklST0kwR2Zyemk5RjJ1RzRQdHBIT0RaNFJKd2k4SHAveWg3RzRwb1kvaUVjMi9YTTVyUXNrYVR0V3JFd2ZoTkJETG1BL0JmdGdyWSsva0xORmR3bUJzNkNnWWFDM2kxUjVqaTVkZUV5SFVWMGp4T2FQdjdPQlBXVUFmZVU2dEhFS1FwZ3RJNzVtZXVCZnZPdmNwMWxFaEZNcENacXNhakoza042dlI1TWIzZG9ZVGdHZzIxcXBnT09KMm5Fd3REUG53dFhOUkFSdlc5VmJrRGlPN25PTVFKNHQ5U2ZTa0dVQmQrRjZ4OFhGTjhwWGFCM2t0RUI1elppdlRFS0FKZnNHeFY1SWVYOVdvK2NlNVlUeHJFUHJzQWZrVEgzUW8xNFFpSnRRS1dEeGt0Rml3QkVoNndmcERwOVRDbWZwQTVKbE1ONEVaZEwyaDZ4RElqd1cybHlSK01OKzRkL1pUNHl5V3ZXci8wRTZRQzMxWFBUMHQzNGREQWVLZGVaY2EyYnNQWHE1eWFSSUhScDR3c25vbTFiWHlHSC8zbGxjTStHNlRPMWpVMmwzcHQyaktIT1RkSlBkWjd4MEZMclhMcmN5eHd5MlJXSnpHMGZWbEJaZVNZaXl2V3Mrb3J2NWxFaXBlb0YrU09pZ0x3V1FNZ3YvZlZITTNCWTFKOUZrOWg3UXd3VkZ5elZOK2w3UloxVlhCMmV2OGY3U0xJdUs2WVFkeEoyMWJZYmFFdXp0VlIxTGFmdCtSQm9DUHVkZ2l4M2xwMlhHQjdYa2pqV3JkQWZkZUJ2WnVSSHBNWXR6Unc5UUY1eGpIbTdRekRyTjhOa0xDYi9KaXFDajZEcWdkOVE3bmNiNTNEMjlBWE94OVNwTEVVZVdjS3dxdG5oL2lxQ2hiczVlbVdkc3JZY1ErSjEyM2Eydy94aGpCNlI1elBDb0tjVi9rNjQ2dng0U0UxQWRVVjZrZ1hlYURiY0ErMERWeDdrdENPazhpSkhHMTdkc09CaXRsVDRxS2tPY2ZRdEZUTVo4d2FqcTgxY1paWDBaWE9GV0luZ1lMUkViZ2ZsL05ZTmN6a05lL3Y2N1A1UXg5aUJkV0I3anZiN1U2bXpZNTNZRm02TXpOa3gwT21Rd0ZrTkZVR0ZJSjNLb0Q2RzZMbEs5VVNERWswMUx0Y1h4VWpPck5WcVJ5NzZ0eFpSbW5ia1Iyc2dZVTNmNG5DaVgrOGlqVE9SMXdzQm44YVY3UktKWVJINURiRXk4Zm9wNk04NzV3RTFYQU5RRWlaZS95bk9HK0Q2elRLSnVCZHluTDMvNEl5Q1VyNmF1czl3d1RXVElXNUZEcCs1MFAxeUFpd0tnZnpacExFcE5BU1FsbDU1U0lSY1c4UFJUdG5SZWZYLzEzUDEzZWYveERGVkI3OHJ0Nk40SmJhcGN5aGpFaFZYeWJWWjRoMktxZDVRRExIY2ZKejlpY0k1aXNjamJQdWJZanI3L1BXMnFMMmwrRzRIVUlSU3pIS1VuTWdKOW1nd2dEeklUaXVDOXkvQ3BPY0J0ZGhEMVJEU2lPeTY3Q3JDdEFSYzE0TW90OTRpZTVnZnZFOGNZUWliNXZ5cUtGRkJqa3pFSkNBaHdXVVFpYi9ZcE5KUUpxd3llbHIrSDBKcDNuaEZ3SkVnL2lBK2JCYUl5d2tYbkJmVlVrTGkvSUV2ZE80TllRNFc1REM3RVdDNzExVmJnQ1VLSFNlRXFveUVVZTJDSTZPZWp0STQvMTF0UGx1bTJ1elJSb3RId01nN1dMUmd3R3FhZ0FzLzRZWStMUmlEaDhqWjc0NVRkcDFpSGJPY0N0ZURRdE1JSUE4NkxBckxPeGJ4b1VSNDEvMFRQT2JRejJyaDhMR1g0ZkJLVXNJaXFJT2lYU0VQTVdjYUhsUUJ3Tlp5bURYYU5IS1dVNTFYa2p4TlZNTFhtaUxLVUFzbXdYdmVuNTlOL0E4WCt1WHdTZWRsclh6NFpVOE0yUTJYMmtHa2hZUTUwT0tuQ3k2YWpPUXB1bXBjZWRuY3Z3OURNRHJDL3NUOU5SNFJEMTRvU21FOGlZTnA3QjJEZVBtckQ1a0hWL2VHQzhjWmlxOUtML0hzM2svSHZIKzdoNW5yWHNPenFNZUZ2QXAvemdZSHExRUhlMkErYjkxV2E4OFZ6Tkl4UTE1VHl5TkdIV3ZFaWpJWVIzd0Ywa1ZURFhyWFZXU0tCVC9aTkNjY01jS0xkazFlRTR3V0hTNW1aS1lVYnFWcVZrdXZYbm95dGhXSlNuWGQ5aWh4Q0dRWVFGaW9abWxVMWxBaFd5L0psY0VCZ3krWlhKVm5zaVZLaXB0VUtWZU85L01RV1RUL1VVSEEyQ2x4cU82NXZQNlRGT20yb0xFMTJBTTl4QzZpRUFtTTF0aGlvdjA4VjBtZTZKVTNKM3dOL3UyR3Z1YWx2cGRlNGI3bi9yM1hjWGRZRjA1UVd6MjZUQzl4OENHRithbFEzMVoraUdSM3F5bU1Td0N0cWRvak5KY25sR2ttQ05IWGVsdzI1dkFKVmFodzRkdEp6Zk51TFVZcmhCbGp4UmVmbHBTMkxLWk1aZnpwbkFzaG1oSEVRS0c0UFBLYnZaZFdUYkhlaDRmc3lOemxOUFdXd21GTHNEdi8zRUN6Sm9aZjBzdTFqS1NhYnV0b080anFFbHJaQXhWcCsxcGhFMERWUG9veDhLRUxRTW1aQjJHVzBjbjg1ODdLNFNZbnlpTXBkSHdpUTA2VVRvcnQzb2J4UmE0cGh2emZIaGd2bGRDSU9zZllRWTJ4MVlVK2w4RlYzc3Roa2RtKzVtamVwTDJJczlhTVRyenJLanhzbW10UkpDQ1hrNnl2K2k0Z1ZyQVFYZFBCVE0remFkLzFKR1Y1c0xZaVdlS2pxM0p6LzB1aytCYnFnMzQvbXI5MnREcGE3WXpLdmdRb1NCb1hvbG04eTJqc251S3NodThFMWlqWVI5L0RGMTRoNThkVnpPTjBFeEZkdXJHK1Q2NDRqSmdMMFlYK3lkSUNzMmNoL0F0OTF3S1JVOUNQbGRsWW05c0cvR2ZJYThZTVBqYWJPRW11SEJUcytyVzZmcmhIdWt6dE5IZ1dHZnFEbmFONjhtODl4blpTMXNIYWU5NForSExYQS83N0YxVTFsR1lDK1l4ZEtacTBQTklVSmM1SjZMMlE3TWlBREhwMTJkbXhmV0J5VHAwYlBnMzUxajIyVytrd0pOZGRrQXgrV1N2ZUFWeVlocTRHUExlNlBYL0Q5K0tIbkN0Ykh5bE9BZDY5OEYzWm9ZRksvTmJORmo1SlRKbE5Hc3hWWkVWUG5QU3NzOHE5cVdpZ1FVcUpxNVBGYWJjbXBxdThKR0pDc3hmUlZCV0dZMUhMdEVTRERZeTM5WFFuZmdsY25BdEI1KzZaWEZFRkJHUk5qUWtST0NoQnFTWk9lMHAxNjlqVkJmK2xra2tnWjNHZkdkYmczQmZVb3QrMWVtOFc4SWt0dk1mZFJwOTVTWkM4L2pOdzBpTmhwTWJDV0pJSUlCNDRjSDJvRHVFbnR5N2JQaFpsV0hiZ2ovMHZ4Vm5ySlE2djIzS25LeE9SeTFzZC9sdThvZm1BeDR1L3NjcjE5MTRqb1lFVlcwaXRESmRlUzFPb3k4K1o4M0dDZVdIdGNleEk2K2N5ckRIc1ltekZlUy9GV3FyOUU0UGlkZ1NkKzVGUmdpZlU2Q1A0UG5OWFp2eFJ3Yms2cDdNNFBsRXV4RWNSRGtyRWlnR0dwOWF0aXk0S1JJSlVTdHFISzM1YitKayt5SVJWZG9KVWRUREk2S0JhVmgvbmovdWtwSXE5WVh6cGFiTG1RdUFPOVlqTTc0TSt6R3VlUk5ESkZ2bmt5WWxPWGJzbVhmNllwSE0yRk5FVnkwQVhwYWthTGE5UHpDZlJTUFlwQnBDTTV4VnE5R2FIMkdsM0ZzT0ZOM2xybiszcnREZlFoc2JxMzNpb1o2MW5hTnI4Y0JuaEJFTUdXS1JrWkZ6SnczbXBNSGlUZTlnTHhGTmtsb1M0SlpOaDlYSU9WaHJjQXMzYkhpelN3bmJqWFJvcUlEeHlBRDFHT3NkbitSU3FVTnlObFlpbGJiSWJDdGZCbk1uRkNwVjJlN1dSNU9WRmhyZXdCUGk0V2VsOTFudVZWY2F3MVpMbjhVRXpheWIwV1VucktIRU5DcjBXcFJ2LzMxemM3N2pROG5uUnJoTkZKRmtsdVZVUUl1L24vclRDL3dKTzFiSWt2WDBHY0d5SkNWVXgwaGwxbHB6aFFNZGJZc2lVbGsxVjE3QzZDT3RQeWswcENqZzAvRytNUXlYVGZYNW5xMFluejF3bzVuZVp0WkJ5MW9IcVV0Rmc5VS9tdFl0R0dTekROWWpNZVpWSko0V1ovcy83anFNMFlsTnpMamppMytyWWYzRHB5MHMydEJXRWZONXZWSFN4THJPVk5NV1NaT2x2Z09zQUNrTW04K2ExdjZPeGFRM0J2OWRrcFhRUmFjVjhnNlo0Nk1CMzcvTWl3YXY1bnZMQVl3MW1OV3BXdEJOTm92YXo1TE4rZFJGSW5TNFJxUDV6V0htN0NoU3dLT3g3dzJSYVM5eEFrbHlmZzUxMkYyQjdBNlk1amhTQ3BGQXcxakwrRnBQUHRQbnVQVTFCRnhkSUlrWkhZQ0NCY01ONDkyWmNrSUVUVlpHRnorSnRnVDUyNEpVSWM5M0Jxdktnb0xOeldkTHg1OEYrNHNldzlKUVUrdTVyeldVVSt0V1EyYWlKVldQNjQxU3ZmRFZFV2VPNXRkVG9VLy9Qb2NDd2FnbTIyMnJWWE9Db2Q1SCtCdVRoSE13d05tdXhlT1IwSXFZNGVodFF3a0VaV2hoVzlVV250WU5kb05zQmROSjErWTVQdzRCYUZBM2hOK1BxV0FFdEhWaXNIckdkZnJPQUY5eXkwUlV2TjhKeTg4MUoxWi8rZCtNMG42YnoyVmltSjBsbHQ0cDZQNFJ2WHlEZG9TVWFRNmpTc3dmdHU0WDRLN3pFb3hBa1dzZ2F6ZXl1TzFxa3BjdFNsK0FUTHNRakRpWmRJRnptZW5tTk14UmFKaFBpMmtndGxvSjFXc3krdDh1b2IvNDlmVVVXUi9sZ3FSSStkRlpTNEVxdnppQVpueWZiVlU5VlhyNkxXVU9wY3R3ZXl0K0Fsd3ZsS1phVTY2Q1RRWm1ZRDhNTmJtOWpTVnVaVWRiKzFnV1hlS1ZmRHRqS0dDSUxFajNBcVlYMDM0ZktlSElLQ04wcTA4d1ZmOGR0OGNOcDNhL3NwanR3cUxaM3U4WWJBbWNOZ1hoaEhwT3NNbFh3REowWUhxSFliLy9VQ0ZQWmJIYS95OEZyRnoyWWNPRHU5c2hXc0VUQ2RxTnE2bHYzZXgvdmRReDZPNGlOZVNocU8rNjd2ODMrYVo4OEdZNXpVcHpwQXlxKzZZV0hyaTRhdkNsV3NlMlJvUkk5UnJRaWlHM1I3UllueE85OXVxMjIyQS9KMG5vZ0k0Sk5vTHphOGxIUE1ndU1WRWdUb0t5OVB4cXI5Mjg3YVVYRC95UGJYUlBUeEdjQjZqRE50L3JyVitoU2t3MklXMWJUelhsaTlOblR0ODBLQzh1cGRUaGI0emdKaDBJa2FVcXY0WUZRVnBJY1h1bjZ4dHc3T01UOTR2TWE1alRYTTZneFBKYXJSdVBIWHBucS9wRjNzcUNwYS8zbytOaEd2Z1lVVVBtcW9jNDdCYjJoNXhmL3UzYi9DYWYzRFBxZDVhaTBCQzdoUENWRXZCaGM0c2NyVmc1SjRXaUduUjhHVWNoN0RTTUZrR2ZwTXcyOVcvbzBhMzNOdjlacThYbmR0bWsrWEVvOXliT0hvZ0I5ZHdHN212bWlReHJKUk52ODlndmNqZ095eEdmdGRPUEJ6Mmo1MWM4TkJQSXJtam5URE9XcHZHbXg5RWZZZFFrc2Q2RUZHSEFKWm1VdHkvbEVOVENjcUlYZEEyY24va0dBZkdTYk8wSHJGZnU2R3pXS1oxRHhOOTJxV0ExODVqZy90d0RvRE9reGNBRGJkbVA4dFh0eEFyR1lkV1NpYnd0YWRGRERwM1VkeDhmc2k1aS9oaDRtdjd6dUR5NmI4L2Q4NmxpbDliOHhUSmpoWWtPR2c0Y0tYUHVzdDhmVVhhWmpudU9xVC8rcXM3SkNMdm5mN2FWd0lIcHlENkpVZytCZ3JqUlV5TTUzMXYvMlFBQkFCb0FRQUFCTVFCQUFBOEJDVEVDQUFBQUFBRDhBYzVBQUFJQUNRSUJBUW9DQUFNQUdWUm9hWE1nYVhNZ2IyWWdSbWx1WjJWeUlDZzVLUT09PC9CREI-CiAgICA8L0JJUj4KICAgIDxCSVI-CiAgICAgICAgPFZlcnNpb24-CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvVmVyc2lvbj4KICAgICAgICA8Q0JFRkZWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L0NCRUZGVmVyc2lvbj4KICAgICAgICA8QklSSW5mbz4KICAgICAgICAgICAgPEludGVncml0eT5mYWxzZTwvSW50ZWdyaXR5PgogICAgICAgIDwvQklSSW5mbz4KICAgICAgICA8QkRCSW5mbz4KICAgICAgICAgICAgPEZvcm1hdD4KICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24-TW9zaXA8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgIDxUeXBlPjc8L1R5cGU-CiAgICAgICAgICAgIDwvRm9ybWF0PgogICAgICAgICAgICA8Q3JlYXRpb25EYXRlPjIwMjAtMDEtMDdUMDI6Mzg6NTIuNjcxWjwvQ3JlYXRpb25EYXRlPgogICAgICAgICAgICA8VHlwZT5GaW5nZXI8L1R5cGU-CiAgICAgICAgICAgIDxTdWJ0eXBlPkxlZnQgTWlkZGxlRmluZ2VyPC9TdWJ0eXBlPgogICAgICAgICAgICA8TGV2ZWw-UmF3PC9MZXZlbD4KICAgICAgICAgICAgPFB1cnBvc2U-RW5yb2xsPC9QdXJwb3NlPgogICAgICAgICAgICA8UXVhbGl0eT4KICAgICAgICAgICAgICAgIDxBbGdvcml0aG0-CiAgICAgICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5ITUFDPC9Pcmdhbml6YXRpb24-CiAgICAgICAgICAgICAgICAgICAgPFR5cGU-U0hBLTI1NjwvVHlwZT4KICAgICAgICAgICAgICAgIDwvQWxnb3JpdGhtPgogICAgICAgICAgICAgICAgPFNjb3JlPjY0PC9TY29yZT4KICAgICAgICAgICAgPC9RdWFsaXR5PgogICAgICAgIDwvQkRCSW5mbz4KICAgICAgICA8QkRCPlJrbFNBREF5TUFBQUFYNUVBQUVCQVFBQmZqUUg1Z3djREI0UUFQRUFBQUFBQUFFNUFFQUFEd0lBUUFJQVFBSUlBQUVCOUFIMEFmUUI5QWdGSFFFZkFiSUFBWDNEQUFBQURHcFFJQ0FOQ29jS0FBQUFGR1owZVhCcWNESWdBQUFBQUdwd01pQUFBQUJIYW5BeWFBQUFBQlpwYUdSeUFBQUJzZ0FBQVI4QUFRY0hBQUFBQUFBUFkyOXNjZ0VBQUFBQUFCRUFBQUFhY21WeklBQUFBQkp5WlhOam1jb0FBWm5LQUFFQUFBQUFBQUJxY0RKai8wLy9VUUFwQUFBQUFBRWZBQUFCc2dBQUFBQUFBQUFBQUFBQkh3QUFBYklBQUFBQUFBQUFBQUFCQndFQi8yUUFJd0FCUTNKbFlYUnZjam9nU21GelVHVnlJRlpsY25OcGIyNGdNUzQ1TURBdU1mOWtBQkFBQVVWdVkwbEVPa2RTUWxRd01mOVNBQXdBQWdBSkFBVUVCQUFCLzF3QUUwQkFTRWhRU0VoUVNFaFFTRWhRU0VoUS81QUFDZ0FBQUFGOHl3QUIvNVBmR3dBVGZON1VUZWdzTForL0RQakRqTXp0bGtmeWtvT1Zza09PNnFhR1JlSWpaZDFJc2xJZ0s5RENqTzVpQUFlRzg3MkE1SUE2RVJkLzdTcEdmaW1BZ05TQUFaZC9qOW1pekJDaDRnQjVEMVoyQ3VheEtzemJZdFdXRGx0amJ6aXFNOC84Q0lBOW4zVXBSb0hKYWg3eEYyUTlJQWYwdGV3RlV2dVdQQVNGODd2QU13TVJhZWgveFVSbGdFT1NvWWhacGtNaklqMWkxbFNLVTNZYzFEUHcwT1BFcGRoTVU5Z2Y5UzE2V29HeVk2aUE3ZHhnTjlEVHdRMzRQd25yUmh0SXNVNklJVVB5aUEybEdtR0E4VjFIbElEczJrWmJhZklnVDJqTUhTQmp6M01Tdm14cVIxMW55ZUE4SkhrZy8wSXZhMWZMTWFzak5KQm1mWEwrTURlSWxWZjFOc3JTck5BMnJzdE5teHRMWlVaNUkwSmFaYXFsRTMwVnNlV1ppekd5ZDM2Z3NnQThMUFFKSFhmWWRxMUR4VDFDeEtON3g0L0RnQ1VvQzZ0amlDelRTWmoyTXFVc0lkZjc2TDM0dmRMWWlDODN2elA4Wm44WnA4aDQyVTZWOHFxQVFRV3FaZWgvS2wySzhVNlhKYnltc05yQnJVZFJ6Y2xKc1kwbWJqekhBU3dheC9adGlJVG54MmJpSHM2NzRUc0NseGlhWlBZVUtzZk5HNDhqdW5zeFNWeWlmTWFNV3BOQUpVWS9MK3NXeXJ4NjZ0U3VlM2dDNnRMbFBKRzJ4UkxsdWl1OThYWHZOV1owVmZPekFXZXhoLzhBbjEzNkhUZHZlSklDbGNYY0EycHdEOUE4bld4Rk1McmlGeWlDRE9lQlNJUE9pN2RuVlpOQnYwNTdqNENtU09BK0pmdTlBUXBQZk03VDY1RnZBS0w0ZzRHYUMvNG5uYUwrcTNISmxDQjFMaFlzVFVtZTdUTEFVN3gyZm05ZGhtaXFzcjVtdHZscjJMNkpKaldmMGNrR1ZYTWhlODJER010U240NG9jdUcvZWZBa25hUHJ1OUJ6bUR4MXkyVE5abDVFcVZQYUwvbHZHaGRwWW5RenExYXRHSnB6cHFSSHQwUldoZjlWTnhqVUNXZXpBK285enNLNVUxcGRUSzYwcjNJL0ttdkM4djhIZU9oSmhQQlVYWUZFa21SdVRKNHZsUmdwY3JMSFZsM0N4czdjTWRlZy9nZXpqaFJjVmZPZGx6UFd0Vm1ZaW9KZVFSbzRQOTBCSHpORG9MTmhwVW5XQytuVWpENmFTTjFUcC9pVHBoSmVCNWpidHY4SERWMnVFbXlnSjJHVHo5RWVlWG82dnFGUjR0UEpjbThQMlQ3ZzJ0bDZMdWNRVUlwV0xOY29URmpuWGRyUmxuYk81aTZsTVMxVUs3eURicDZNREt6ZkpHZHdYYkdWdUpkYVUvOWViSUt6Qkh5Z3pVVTVqbjB6MGwyVHpzckljMnQxdUxxOXQ4UTBCQkJzNmMzazNuczdqRnVCQkxpakwzL2FpVlAxNU52WFUxaDQ1eVlJNUkxS05yUTNtUTFIckorZTZPNUZJOHEyUW1uVFFnUUtGVnk1NzRGTVVYbHo1V2dZMEJRUFRjVG4xaHliWTZXRGFYNTFrbmZqK3hNQzJrOVNTdFZCRmlHM0NzVStPeVpyVFVGT1JpaUczbDI1eE54d1JyRGhqWEZ5VnE2T2x6eGRrdDNYZTAzc0ZkNGQvdUg5aFZWTzg2UGNXdkwyQTduaVRnQy94U0tndUFETmtveW02dTZvYTZyY09KUWVRSG10VWs5TTcxamxTY0JhalhpQXJNUUNrMzQ0ckN1bG9Uejg2TmZPaVAwcXFGRkI3bkY1bS80M00xZWdvR1JzdFBWMFV4WndSVEp6elNSVS8xTmJoUkE4N0Q1Q3BrQlluL2xHalR5OXNPRG5vdFJGV3ZNL1k0OEgrU05UdXQ4UVA0YnM0N1dnb3dJL1EvVEd3UHJGanprSlpPYkY2QWRCQUgzc0xFdGZ0MHlqMDVPazFHemQxZDdKeTRHYXlDK3VIc25LRWJzUVJaMklvR0Q2MVgwamljUE92ZHRiSHNEeGNJVHJoQTZBTXNId0tFVnBXb3FVRmtrOTlvZmhhbm9hd2JKQVV6Y085MTlkKys3YkxUVEdEQjZqbmhKNDFYTzMwYzc3dWZRNzZSNlAwR1JLN2kzM3JBKzY3VUNYN25VWjhKN0VBem1PNnd0T2JRcDd0R1JXY3BHeGNCKzZWRHRlRit0eE9GZGlXaDFCcDhWRFM0SmVRaDNxcG5raVNSdWcyUTNBTUhOR21iTXgxdEdSUUVRaFJWS280dlYvWFJwN1JRVUJmd09CRkdMdTZaOVh3MG9SMmlrYUJVQ05RTnpNaHNOcFl2dlZkci9BblFsVjloRzdoNjJETUJFTGFNMTdiNVlLckFCTFVGL0NTMW1FMHJONjczMksvekJ1M1Foazg1UVM1Vk1hL0pJK21TbzJjM2RTbjc5NStjS1lWdDNBYjUzMjdrdVArbVk0WjB0c3lDZDBEZjdiUGdxdCtJQ2x0SDV0bmpSRzNJSnBzTitaeGh1OWFoUnF6OWlMZlMxMWhXN05ONkZoRDVacWkvYVZ3MUhDOWFhNXEza1Z6UHlmMGZhdEk3MU5lVXdWMitnL1ZpNlhYRmZpbmh6b3BmNUhuK281MDBFZ2hXcFR2T3o4eEdLdXUvS2ozL1FPQ1Q1RW1sSzJ6V0p6MFduNEhvTCtwTU1xbXg4emh4b0ZycU9JVEFkVGRnejlGbTJlcXRJZjV0TUN3L1dGMHpqUzBwak1xbElKZTdsVkF2ZjZrNS90SDArWlBGbjZJMm9NQVErak14ZEYrYUNYcTFYYTBjc2ZHQnh5UzNIYnVjTXpsQWZFK0JXVG56Mnh4bFlUdHdvVnRxeEFveFVBcVlUUlp0Qk1JWlNTbVhNN21vVk9VaGlFMlhtV05MNlpCR2w4UElHb0wydm56N0YrSG9qQXczYk5UUTY1c0psazdWZUI4c2RJSjc2VVFqanppMlJjc080S1gzUzM2TG52Sis5SWh1QUQzSnFtS3JEdUlNOWFGUTVmYXVkMEpXMjFuOHdZYjNVSnJIUHc1djAyVGsyUmFZL3NsZmcvOS9VM01PRWN3aXZmR2NucWowczNiZ1FOczRKR0JmdVk0R0p2WWpLWHVxbDh6OXZ3SVNOMDZzQkk0WDFoSlUzUWhuNXJoTlE5UVozVTlDeXdOU2dGYmVFcXZEVTJzOEFPVWdsMjFScm05SEY3TzJ4ODVhbFZyRUE2VnRVZmN1TWhZdmljQU0vMVNwc3B1L2tUazRXc0JvekVSSVZxL09Ta0lSWUVoR01TVUlpd3FncHk5ZldHL0hPV0NObnlra1U4TXFFUWdieHBxV211QTJ1TUEwYkFtTU04S0ZDNmp5Q2VlcG5QZ04zcGNOSkNvbi9rT0Z0T3FUSUZuSjVBM0FnNHBqSzRMZFRkQzdFODd5UmhvNHpRaFJqNWdiZzhPM1o3UVkyeS96MWVGVmU0NmFoVU1WcTdpYmZsWmh4NnBPNjdWd1lPNHgzUEg5bFdUL05MOVZsTlM4Qno4M2JHWE9sVlpibzNrK0E0Rklxenc3aUExamh2RWo0YTNGc0JVQWdoTTg5M2RzMk0vMXpENWorY1NHeHNvZHprSkIxWXU1cW1ydGJ5TGEreE13V3VVQUE1QzV5dTdTRHVSWDV1c1AxZTk2S1UvanpOMEZhM2pEakxyUXlYdWRNRDNHa3ptZGVIaG53VnYxMjVPU0R4M1VmVTVRTFlVemd0VlFybDFaS2ptdHNuVmp2WXdkV2t1bHFJZFlUWWRVZThiZ0h3VU04RDIyVG0rbkx5M0NvUU0yWkYrYjU5YTN5SFc1Wmxab0p3SVhyWHJhSG02R0FFMENnQWlDTlRKVmpMUiswODlocXkzQ3NEeFlrK0dLZ3NJNU4yeThzTEF0YW5lemdSQ3FhaXhKTjkzZDJZYm1OMFFtRENhUGlsb1hxRGJjYmhzTXczNVJHcHNRTjZJd3VjRHIvTFpOMm4yNjJya21tWFlqMTQzUFZwaUFsUisrandNUkdlTHIxdEl4T0ViY3JHLzNvUlFsREhwcEpoN1VrNXFXVE1CeERnak9nUVUwWTBPVDhnbk5ianhOdTkyUGZNZEVPa2VNUitodEVrN05ORUttL21tYy9tZ0dSRXRwWlQ1bEtQU0JDbkIxK0pDTks5dko4cmpKTkxsTm5ibXcvMGVMbHE1SW1hT21LQlI0SnMvUk1RME9malRqenoxMncvT25ZajJGVklsWW9seFJyaDUzL2o0SGdBQ0hjL1ZCT2tUem5rcU9uY3A5bGU5NzFPRzJlci9renBLWml5N2lidkpncmh4VVNsRWpGTmg0ak51YTF3RnZrdlZHQU9Ja29aN2ZNYzlkRVdpenR1TkQybVhudFVnUW9JSU1GcmZ3eGQ2RDFWS05aMDltNTRBR0RpWklXYWdGN1dJSkNSM0QzaHB2MEJKek9xL3Q4a1RvZjNJeHhJdWtZajVQMkxyWG9NTTJRb2xrL1NJeGpjSW1EZGZncUdkMEIrcjI5U2NPOGpxVUR3VGlyVUJKamVPWUtUMzRyTkF4K1FDaGYvQVZ4cXNSakk0cUFtYkJpWWQ5OWJpVlNwNmJQSE9EQlFSeUtjM2pCNkRvY015TUN3ZjFndmh1SlZ3bXhzcEc2VWxDNzVTQU5Tak1qWGZLS2huNGdvRzRIQnNrbG80RXJJMGJPdnBIOFFyMFh6d3lmWHhORzBPdENxTGNxZUplQndlZ2laTU9mL1Q2eGZzU0VpRUlld3RYTFkycmlkUnJVOU5UUWNoaEsxdzRKZ2JkZTVSQnp2WWw3aFhQVFowR3JKRmFtMmFVaUVjZFJMc0VpSkRIU05YMWc1STNEUjljYzB2K3BibHBVbjgwekg1S0h4OGxvRENyMEk1UnYwL3BoQzhQOHRhUVpQTk50d1I3ai9MTVh0YXd2VU0xQ1VQbnBacDM0WldJeFJGZnFzV1J4TkRjTGZxRGZ1YklZNXZSWmRjV3kvYUJ6Rndla2hJTVJ1RUQ4L1hFWjB2ZzNaNVJScXRpNzF4b3E3VU5NS1g4MHl4OG94dGs1M1VjdXJJcElWbTNaRzQrb2hSeWQ3WGpSZU0xMFpzTHRFd2ZjYkZ2NGZmOVpmSUs0cnBFMHZMdFN0VE9GNHF6YWVjcG9QNmJMK0ZPR2JrSm9GMnJsWDFwNWwzL0pSV1o0SEdmTzV2VE9RTkNvZUt6ci9MdlluNnlHWUI0endObS82U2tUM2VBVDhEdXNYL1RlZmF5bEpNcFdMR0kxMlJFZWw0dkhtOTgzYlVudFFaMGZDdGp6YTZ3QVN4ZEFhdHJFVXUrSldKdk1pTkNZNXZPUWZLMUorb1lGV0RTMXNlVEw2ckhva2p4RWpqcit4Zi9QQy8wL0E0OTN2TEJxWTFlbmVvaVZrUFNjaHNRN1pCN3h4Y01LQURGZjFBWlFpaTkxaXJnWmdseDgwazdkOCtQbjM5cWFhUGxCM3JZZWtiNGNUOVFicnNJc2pVeGxydkFkNDMwYWRkc245b01RZHlCdUhJSENCZkxwbld3STdBTDFwcWVSbFVPV05xbk5CakpnUTFYbVlGdEhVUU8yc2JqK2RWWUcwSTZOelZFdlR1cDJqRVlZTG9nQkhlS3ZWeVhJWjM4ZnB5REVmVEVuVmw5VzhFMzRBUXBHOWlzVDFSR05IYzZVVDBWd29Nb2tlakp6dkJLNGpIK0ZjQmdCU3JsZkpKekdjTU9MQkJZaDJSWkdHMEduRWNwTXVHTERualorMEhUbXhORG9WQW5hN0pWWDdzMjZDUUw2RTk4MFAyS2hNSGhDOXkxOTdQY21KVUJlUFhncWFRdDZMVVlpVDRkOE5jc2dkT2tuZDhHcC9JWDFidEc2L2xIVldNTCtwaEJNTnFWNjdIVUZUUUZZTUFrbHluUVROajgzeHU5NkI1VHh3cVNXOE1jS1BRb3lrWjRKVVZIdXNWRTJlcDFNa3hCVWFlM0h5YkNXb2RlaWtDZXpIa1A2VUYvcDF1NHd1WklOT0JValEyWkUvOGhTS3BVRllRZFlLYmE1MEVvaVcrWFpxSVhvWXFmd3JNS0RuWDhtWTV6eWlWV3dOa2lIb215U2NGU3ovSUNUV0cya2ZTbWdXSk4vb0hjdFhiMkdwQUdLdVM1Y0R1ME9zVzFSRlZKbHZVZ1lEZkhESzNCVDFwcXJNWFhjNjkwUEFHVXB1U2JyWWdlcm5DcndBUlVTMnFQYW9vTWtpL1dIaTVWVHdPaW5QQ3MvSk5pYlZjVDNyTDhOSjBSV25mbjJiTkROWE91S0pkSDhicGFUT09WcDlVbGdTY2I1TWN0Ly9BZ3dVdUlWWWVCKzBzSVh5N3htTktSNUpEcllsVHJoZ051T0JZOWk0OTZ6Wi80VkY5TDZRSVcrM0tjOXdWVi8raUtiSFcrNzBqdkR3VE54cmUxazJtb3dEdU5vc0ttUUpBSFlDZC9aUHhCYnhhOXZrOFdueFpPUCtCa2F0SXl4bTFFdUVwVW5UbnExRWlqUW02aHdVckhGSjZoZi9GOXRITDY3bWdwWVd0dXNyZTc0Q2hSaUUwdjBLWWZTcFI5UlgwSDA4dUtvZzI3VXdBSFEwYitCNFNYaUQ5ZDNveVp3Z3RTNlhKUHNScUhVNTRQY2xMbnJSRU9BUEJpbDVEZVZNU1Z2bUllWEdPUWRqVUxnUzJzWFJmSW9YNThFc0g1cUk3OElqVWNib2FyTVRnUEkxYWZ3dzdvTUh4MHFMWmZseXZzYU5STFVhb3cwY2NtKzlWaDJvMVJmS0RxUzlXdG1VS1hLSjNMMTcveXNzSmd6UCt5NEQ4OW9ZK2psbmJQS2hJb3Vlakoxb1NlS2hvYWJCWHlBSWVmWmQ5ZzFFTGpjcUdlNEN6WjBKSTJaYktSTTJDdG5RQ0Z4RmorY3pUVEw4UHBjeWtGQTFKZ0l3NnB3QVRzbi9lVUJ0K3FHWjJWeXJBZHhRems2SFlDVFEwODVPQkcvbmhmZzlUcU90U2NQRmVkUEJTV3MvNE05bVBkcmVFcjdFZ2M2SCswamNQUEQ0SXJTRE03djhYZTc3RVZWWncyaHJnMm5FUWJtaW9nbGFtUGdPTllpMFltU2UvbmR0T0RMQ01nZjF3TTZuNVNzUkQzZmhORVhYYTRaNllkMC90VmFtYTNvWk9PWWZkcDZRT012K2MxYVlsRzNtT0I0dkY2Uzh2RXE0UEFoNUtWWm44MmlzWXBEZkVnZzBkMG1iQllIa3FXbmhha3FVL0ZNN2tWaVhMdUJ4UjI4a0hwY1EwQWVUVlMwUk0rQ2lleHlnd0lPczErVUJrQWw4dDd0Y3dXb1FVK0trWTJtVkxBRDNrM0xLNXliMHc3bDFmRjZ0alM1Sm9XQlJQMlY0c293b01ZdzQ5QXdsTXNpY3FBZVZtUis3Wmc2NDZ0V0lhNmFwS3NXUDRSeFZnWklRMHpJRUgrYlZlZU9nTzEzSk1KUTVqT2lNMjRReU1aTzNlc2lVZmp1eTF4WXBzbFVpVnZ0cXp1MEVwMXFrMHdpNDZJOUxqTkFxbDgyTlMzMGUrTGhNYzl4SjdzdnBFVzY5MmFHUVRWUyt2Tm5sMHczSG85ckpzbVFPOEUzeGt2c0NIQnE0Mzh1cUo4Q1lWZnJEQm1zRStMbkZzd0NMQkhJTWswWXpGbG9wMW5tNC9SeS91OEJMaTlvd2tVT1BXS3dMUXNLZkpUODBRNEtQYnFvVnhBekpnd21rc1FxVnJiRzVnVmJIQlVlVjdNSDVUdHdsZmtYUlYrZWtmczJuSzhpeS9ISktGaTI4Y2xPZktjYUZLU1ZEQTBnbXl1Sk9zS1VQcHZDUnF2TUREZmRzeUF6dlIrVjIrd21VYlpEWkdpb2x6UlFZVnZNYkt2dnp4OVdTSTRjLzBObEFSdnFOZ0NNQnV2OXJlRDB5amx3RzAwMENwcmpXbXM5bXNtLzhHL2t5Y2NoSkE1enVsdTRjOU5VcXBtU09aOGtVMWJ4Z2pMRzl3OUtBYitRLzJZbkwzdWF0bTNNR1VWNWdnVWNRblVpQ3lGeUtkTjZleHhhdzltU1phTFdnam03ajQvZ0RZUU11UHNpL0VWQWc3M2tTcGxqSEFuL0FBS3hIcWVmb2pHN3orYTRzanlmRVo5a3A1cWdXQmtiek1BRmFXR29ZV3EwL0xqNjRNYU5rYWw1T0MrMXRmbHgvTzJHMFJvaEdqQnJ5NVVYUFdmTEhJc3ZuRXY2MStnWm5JbHN3dURSK2tpaTB2dkZuQS93UEJxbjJ6S0ZPazVmN1dNbjN5VnJROHFlY0huRUIvWUE1bFdZWnpNc3dsUzJzU2M4Z2d2ekNYc3NQOGtHcWozSzhCdmFCNWx1amJNN2hTeVhDbW85WmpHRnczWjJZZGNycGNEUTJVQURMamU0MDI4M0pRQUM1d2o3eXR2Y2QxK2RhcUxncUJhSm01bkpoM280d2lqL1p6cDBnYldjWjZiT1R0RHVyVkJKSmRubjBTQ2tQOW81YVc2ZzNlTlVzNzVzdFJ0aDBwOSttMnhZNE1Kc00wV3BJbmpaZXNzVGFVdU81c1dQaTdpRTVvc3Jzcmt2NHZqdjMvdW9ndVA0VFhsQTZrbE8ybzB2NVQ4MDVCQVVkYjdPVklNaDRrNUVXWklKMFNaTjk0NVJHVU5UeWFaS1FBY21EcDRUK0hNd1RaeXBlN0ZTUmkzTVIwNTJ0azVWRlFuVnUwdXJYalVuTC9kTEJZaHZkMkt5RW12Y0Z6ZUIrWW1SYlJ4ejIwZjNwOTFBUmw0eUJBQjBkZ0hHcjBZRDFNQy9PbWFqWnp5WjEzU01JNFRuK1YxMzZjbWJac25MTXpHNlgwVk1KSjVMdkNxaHNWVkl2eDR0R0pIeklONG5xdk8wUVRGd25xR1FNQnY5UWVqeVFHMy91TUZiOUl4ZVp5Y0Zab0J2SCtHZTFsejRnV1ZSVDNXalRVY2ppOCtYZ3VFY0h2ckx1VFc1YzlPODlEUkxlSitJaElMQmt2dE5TclE3bnpHWVdVWXdMTTNnZlhqSkdRUVRWb2VIc3F3bUJTUEtjaSt5RE9Kc1Q5aEtQMUhWZkFTcHhmVnR4dUlqbFNxZDdFK2x1R2thc3RxeE0zcHRqWmZ6aC9wSCsyRWlQOHlHS0lnbzA3K1RReEgzdHRtTUFWYUV4N0FVT1UwQXp1M2tpS1UveXh2b0Z4NXFUU3lNOWF5OFRscS9FdE5idU1lQ3M4aDFRb05rZW50RXF3YmM5dk42Tld6dUxyeEZENHYzZmluWDFtNTl6bzJOaTZ1cHBnOEpwcjY2UmMvNDlVUlJQUmpNaWZWVXlpaVo2Wkw3RElacVdYYk5pK2RoV20yVTlkY2cwcndRSnZqb3duL1hOaFE0dkNJZGt3aHVOSWpJUUVmVmlwSkNnU3dMc1N0d0RKdUJvTllvUE1ERFozSnIrc3Q1RC9PRmRTYXZnc0pKUlE0QURDdkx6V1FXMkVwOXVGMHBZamh2ckxHcWFYdHh2OTZZQllSWEZqc01ocWFXWk1VZEJUU1p2Y1dYdDQ0UjlFdnZjYThDQ21yME1STUxrbVpwazJRYWRuTjVlSTNOKzRRNE9HODAxSWZJbXFiNzFjZzFYcEtFdXR5Y1prVWJLU1ZNNk96RTBpK3BRTDBtajhGcUdIMHV6RW1oaU9FYXh4TWJlR1poRXdxYVlxdytYeVQvWWg1dThXblFWV3Z0TDRrNDdnb1ZLUTZIUVBvNGM0aWx5ejU0MHBRZCtYb3FwN0NFTHdQTVc3Ny9MUHUxaEYzYWYxaFN2MllIOVZBRDEvdnlISWUvT24yZnMwdDk5R1JUdklka3NxNFF1NzV4LzJsbDY2L2lZaGFNNEFkaE9DdC9QNGIwUHREbDF3dHY4ZzgvVVBsT3dQRm00U0pJc1NOUzVtWUI4RzM1VzZrZ0wrcFM5WGFNVUNVY1VFN1RwU0dwWGZMcnNhQ2xkRy9mUDlYakVCRE51M3dFQnZvQnllVDdhemhzUCtvcW14V2dGWWtIWWtLbUZNNG45TmR5UFV1WDN3VkFtcGcwSmFaczZVeDhxYjg5SjZrRDVzS0tKT245dFExRXBHakpIMVRKTlpTb0dQelhKZExuRUZTR2NTRG5WTnB1eThmUTJnUVFseFBjc2NiajhWbDU1emtIWlllUHdWTjA1WnQ5SkFVcWtYdXZySHN6d01kWjFib002U1MrZGsxd2tvUG1xbTNvUk50WXZTV29STmNhQzBCSzZidENqYmtZSkYvd1UydFZadGQ4NnU2SGRGZ1lrSzAwNHZBMUlkRW0zMTlHMjVkb1Erayt6RFo4WWZNbStyam1IREs2MUh6VFNneDNTNkdrakxZL1lhU1JQbDNjMVVEUjM4Vm9KMUJOd3NJZWEyRGJ1WjRWd1YzNjQvc3d2L0N6dXVFQ3pMMExucnVzOWxmcGZ4VlJ3VDJoQmwwRUdWZVNJREp1YlZEYkIrUHBjY2xqYlFSOHFYemFmdGVlZG5SbUhJSDZqcnpWSVNDdEkzNFJUOEllbUxWRFVFV2prZXBRQmNzVVNRN3lnVHBNS1dzbWNkbVBydjNvak9MZWY2Uit0SHFwVFNvU3VqRFRIZ3EyQ3BZY04wS1ZFUDdIdGFOMjI3Y1hJNHNWUFZRM2JhLzg1YmtRT2Nucm1HQjdMM3VxVjRZeDVyZDdOTUtEcm93TWdMTDZSU1VOYTFiSmsxU2kvMnBRc0dNOXVrMkNTbWZla0xIVGFBWTNJaFUrV2RQUm9QYTlqNS85eUxXdEpBQy9SMVNzUzN5K0EvZXh6UUJCaWhIMUc2Zkwza092TnA0UWJuRzZROFdiL0NHK2NSNTFnREthNVVXbnZTbjc4OUVCVERFQlBMa01BOEd4MVY2UWpjZklESmRSZnlUR3dIMXQ0NXFBRTRJZ085MER0bTdxK3BGUDNvazhiR003MkNtS0ttcVF5emhFdXV5YnZ5NDFiVVUvS3VkYjB3c0RBbm0zQXZlNFJDVUpiK3o0cTJFaVErSzMxdGdMT01SQWpsaEJURzAvYlF4eEJ0M2t1ZnQwSUFabnpTZEZzVU9NcXRmRkROSXZrVDc3ZGlVWnNKallYQlR6MWh2czNxeitCbDFwZUdOckR0SHZsL0grNStHaEdJMUd0OGJlNDhOWkFhSit3b1JXcE9FQllBVmtJK25YRExVUGpTVUkvc2s2VVM4TklmcS9iTlN2SmIxSGRYSHFvSmtDUXptcGc0MHF4dG9ET3RIelVoZG40QzVsVDQrMEZIZ3NUNGlNVUhSOFZFZENwRVNtSHlhSHdCR1pNUjRQYkVYTXVac24yTkEycFZHLzRHYmZMdzg4ZE0wQlhNQm11U0NjM3JpOUdJL3p0MEpqbkRVSDJscDlGSnFzNWVmblBqdk80WEJvRkRiMi9IT0J2R0QwWS93U0VXcno2L2xwbzZzczNRQkc1ckJWYWJnNXdMVzh5WktaYXlwZUxaK3VuR1VZVU9YRDFQWWpENXdVMk55dVM3bFRqd092b0NUOHBFOGZuVFc4VW8wUE5mRFBvU3kwQVJpWmpPVi8zN1BDNitrWG4wbzFtM1RtWUZPV2ZXYzROWUQzc3lvMVlrazU4SSt5S002TFVVRHIycmJwRE9NWElZK1NQR0JMMGVxbWIraVNqYTNwQWhXMG1icll1ZlN5Y0NWdnM1V0VqQlNRQTEvTEY3ampTUmFmQ0tiTkVpOHNyWFgzQ1VSS0lxeUhtSWptb3Mwdk8rY0licUNvTFFjKzlYMUZsZHpXQ0lJVGFZSEtaQ3hBdEV2b01OdWQrZmJzR0kramgySDY5MFNneVlkcWdJQU5HT2dxRXB0Z3V6cDNxUWJrK3paWnRTTjlVU2x1V0hUNzg3QUZEU0dXNzRyZ2NHWGlQcWI4bWdQVjlKaUttVndwKzJaWnhBZm5EbFhPNUpFRDVkYUs2WmxBVnNpVXZzaE05eDdCZ3RzZ1JGUlFVN1hrc2Nadlk3dDFvQ0RJK1NHNEpPUnpRdzZxWWhFMkI0ZXoyT1FaQ1lBMGdGczZLOEU2M1QzQWdveDN4V2k1cmJ0NlBRd2tpZEUzY0s5cjV5YmpHSnVxM01Tb2hOZWVqMlVtNWJHRmkvUW9wSDRKV21Vemk4OEFkUkl4aURLMmp5RisyNlJGZWhLNXZSNEZWbUhrbHhzR3ZURmR0WEFNU085b0tpbzBSYWVWYytaa1pmRmdDelN6dDBxNTNVQ0hPRjljWlVNdTQrckhZc1l1NEZTUDdrbitqYmF5ZzhzS3RMQnloa28wa3Y2cHhJZ2pEN1V0Z3NFT0sxVy9HV1lwbVRKeHRpa3JJbGtLUTRTSjlzbWhxMjZESXNLZjRzWkd4L2ZGMEhReUZ4TG1nb0M2Q2NycGpwZTNPMldZbk83WkZCdll1T3hRUTdkNTYrNkxCc0FtYnZWck1CamxQaWFSMERsclU5MUw2UnYwZUNqUGNtMEp2ZTl0dFVuMUdoTU14Q2VwRXJyZjN6d0gvWWRVV25HRUtCN0l1Um0yZklHVExJRG1KNjcxc2NPbkd3V2RnL3dpUlFIYkdYWkluMk96RmI5TG8rbmxHRFZaYXg4MTM4bW5MaXRHY1l3TnlWR2JzTm50b21FVFI2a1lOWHZ5cEFBaHdjU2FUNkZEWVBCTlcrMXZGRDlLbXloMktGV3A3YVJYcTV3VmhmUEdKZkZNRFo3S2hPOWNtQndwZ2w3SnpHb3Rkb0hwQnY3Z3NESUk0UjE2d3lSQzhURFk0ZTFjN1lMRi9FcWZGZk40RG1aRjAvM0hQcUQ2SnNLY3BDVmEwTUNWSHZ3eGRhUDBKaGdZYVI1RGxDQm5lenFlc0tYVzFHd3VycVQ3a2hmcHJ3NUQxMldqbW9FRklmM255d2o4Nm8yNUw2R1ZlQnQ0QUVBVk15d1k2ajNZME81NG5ISk01RmJoY3NBVXBKUkdUVThKRGIvaU1yVDFWKzg4S2s4NXg1amlTMU5qOUdpaVIzTTdBMzNuNG5VRkl2akpCMURYY3ozZHNwbTNsdXVVWjlsNVNiNGxhT2w2RXpUUElubHBiUWtZVm9UcnJUY1lyVmtpOGRVamV0R2ttYUludVRtRmR4eVQwaFZrNWY5bzRvWS84eGVlNlBEakQvUWhqeGNQQlUrY0ppMWNoZmtCaGNqYkRkQjJmd3AvUVdjVk4wNy9tdFZGWEhyK0tzUVNyVmM0ZFhOOXpSMitOZkZjK2xnTEluTW00VkdyejFvZUlmTFpXZ1VnSVI4TkF6YTVYWlBWNDQvTjNCd2dlSTNtMFBRVURicWxtSFl6ZTA5SVlURG5UVTZmQzVtd0hzRyszNi9SKzdnRkQ0dEo2ZjF0YmF3T1NSUWJQbFl3amVCSnYxVHdvOFdrT0tHODRnRjFrRTloeThraDd0NFNaYlViWkZmTG5jNjYwdGd1NTQyczNseGJaOUt6eUFsc1dPMzhrOVQzNHFrRDlXcEFxYU5KYWRibU96czNJYUFKYUJQYk16a05Gb0RibjQ2NmdUMVllZEdMcStXTy9BVU9UeTlDTmhOaUUrbUp4MkljT29FQmdjTWlkRkh3UjZvY0NGdDdvazlxRXZmSTBSRTdWbjVxRFhxbnFocUkvcXhWOG1KVUtBTVBvM0VEbTB1QnJYaXFsMFF6MWNpbjNJdzU4UVlrVlc2ZEsyUjgyK3J0U3UvT3NZRnNRM2w3ZkpQQVpBWm5yUjRUbGNrNzFzVWo1VXZEMGtJNDNRNFc1bVJURDJna2kyL3FuaElDQWdJRG0rclFBNUxGVVhzNXY2R0lNeTROYzAyZ0lEVlA4TEJKVE03M1lDMk8zUnNETzIxbFg4bzUrZ0tYUlMxU1J6SG1SREVMaG0ra3cvZkw4K3BpVW8yUEhQN2RaU3RQbldSbTBxSG1BSEZSRDZpWlNCRFBIeXQ3K0lZcVBoKzlyWkF0aUhlOVlidEhEdURNcHB1YWMxUkxBa25vYzEwTE1ZVzdlMG9NT045YlVXOVJtQ3NwU1dZckIvSDFBTUFQMExOK2h5ZDB4NDA5andlVlNFNDVMT0U4ZUJ4NnV6eXM5SVVTeDdkRVlLZE5kZWZqbEdicVdidjI5UkxmbnJNUHFyM1NmaURIQXJkTTVScHVnK04raVVpeVQ3VGpoUFV1Y1hsRmFRRE5kcHFCdkNRcXJsNHg2WGhwNzlrVkpYeXNBSGdxdGljNjhhYXFneEl4M3BDWkpVV1NVOGJCQUwyVFlEZ1IvM3BIYllIQXRTaHZGSEtWYXc1U3RTaDdMblhjTWVZZkIyYkVoSHJOckFYWEdxbzk1UGdDdER5UzdaWlo0TVNpeWlPVHdrOHFJTXUzQ1dtMGNpRmxLSisvSXlYZHJ3Q0MzTjBDeUZTVTlBdXBpaUZ6QzdIWUI4dTBUbC9pVFoyZ1pKc0JZNEtrZitiRkhHTVdSWCs5Mzg2UUF6WWdqNmhLVXkrM1FnUFlDZFlHd1QycEE4c0t4cHJyTFJWMmxrQmhZcEgvbUw3bWt4L1dvYStMcHF4enMrbDE5SCs3M0VVeGVwY0pXTUJMRFVlVHFnUzhjTkIrS1hxNzViMDZvb05ldTE0THp4d29hWVhxQzlrTWZVMTBLL01YZWJIeFczUVo3UTFtSnhuazBsamlRUWhGOG92dnZJRGpLU3lGUWVCUHRBNUQrN2pGZUpCTVI4NnM1SkQ5c2swY1RUczZPcjI4Sm5DSXhjNUU4RHQ1d0J6RkprUzBCQWY5RXNxZ3JyMmFPeFhWa01KaW5JVEQ3bjRibFRreWRwdHdFSDZvTTJYcWRjNHMweFB3RVc2eWlaTitSMkZFZ0tQaC9oOE84OS9pSkVxYUZXWFM1ay81ZlIxcUM1b2drSGYxTDQyOVVTS1RsbzFIRDl6bkZ0OXBVSHVsbWw3eE9WLzZFaG5ReU5iWkZLU2JGSXdiOUdTU29IODJYbExXUVlTMG9WNXpuRkN2ZmZteklPQVdhdXdocms5NHIxMDR0UXdxeGx3QzFvMGpLZjJ1NWR6TWpsU3ZYd0FZUEdTNHJSTXJMWms5elVNeWhNcEkvMlJTZW51SlZrWk9XekoySTNralFTTVhqbmdVRE5sRk9xbHBzOTRaT3krTWs3OEFUTWplUjdzeUJqelBuNzFUOHAzMnlrUG5rT0JjeTYrTDBrc2xPOE9VaW5jajI5ckJhRmplVmszVlBGL3I4T3ljc2ZlSXo0YjVEMFFWZnE4Ky94b0ljd2ZFY3pnSEhKcmRVNXUyRndCbE9WRG9JOUxTa3VoWmFyKzhvQ3lpUnp1eFpJZGlETzJTSlV2c2MrS0pkQTZTUnpZaDFxRUFuOTVoYml5NjVQOU5qSndVR21XQlA0aExaUGM4WGZkT0hmK29MQ0VMdWdRNXl0ZEVFZTh3UjZjU2JXT3FuUUVTUTFaeFhYcW56T0pnSzZMU1B2SGxaVVk1Q0dVc3E0dWgvS08rVUJkcFZ6Q01rRUowVGFxRHhDRXp4Y2xiTU5sK0I3WU5kUVlKbjVIZTUzbkZOVUd1dXkyTUNueENSaSsvL0pHdkRVRld4T25hN3I5c1IzYk5HaU9Tei94RE4zSnF3NnEzdlprZ1MwNEY0SVJ5dDFzV3F5eXpWcURmQjYxQlNxaWUwSGVmK0RQMnRhY1ZvOE4vRkRYcHhLR0VKcFNMS2pvU0I4SnVVNWJ2VDYzc3NqY1JSZTF0ZzU1dUtCbGNTUjUrMXEvOXo2NmF4TnlUcTdjeSt0TTFORFBtYWhqRDI5TVJseE83bVN1cERvc1dKQUI2S1I5TFoxNC9CbkUwK250MmMwcTFBMjZPZG0rVU1RblduejM2Q2hwTnJOMmd0UWROeExLMkR2dGJkYmh4aHpsTkkxdGhraldKZ1lIWkhVdjhZL052cTlIY09jQzZpaXV5UXM3SVNVekU4bk5qT3RpdmZXNnE3TTJmK1lXSXAzUFRjbk9RajB6OVVuM0ZGcWhwK0gyRDI1eURYbnR0QXVmMmgxRDVZZ2lRaWw0MDM3a01MYWZGeEk4M1k5RmNoeGlaWjlMTTBhaTc5bjhwZ1EzbGtkYUVuR0xrb2d1N3kyUkVzWCtRck1lUW1nVUl4K2c0YnZONHZjTzAvRUxvZ1dPTThpUU4wWWl4bWJrYk5kTzVjL3k1VGdkVG9YcVdMbm9PRWtxV2R6ZG5penJPOE9FY1Uwa1R0bW5sVDQrY1pNeFNPanI2S2pTNXd0WkdVUGhOZEY0eTRmQzJRWDBLQis4YVZSWG1aZ2VvYmRnU3hjeE5pQXJTWmM0eHB1OGIwRzh2Tm9iSWc3UUlIdjRZa3ZqbVo5ZWk3L3dZcFpvTko1TzJBWFlCVHBKcHlmUElRTUpaanVaQXp3OWp5STBUdWpoTWptV0N6VEJIRGh4NGtmV3daLzFmcVlRbEkrak9NT0lCUUdCYjhITmk4czRQL2JuUzdVTjFld0lycmplN2dtMm12amhHMWxLaUIwbExwZDA4SGlqZWorRG9XZFpZbitWcjZrcU5CbmVEMGZNQUZ5RmRJWndZUE1XUkdXcEFQRnE5RCtFVWgxdloydGM4UzVJazI2ZC9Sems0UlRPa3N3N2pNU2ZDNHJiNHVYa1lwTG94SzVIMllXd3hTL1hsWHowblRGaWFXa2NQcy9kWGF0SzByWGRhNjA4ZWVvVzZrZEE5ZUVyWjR5R25NSFpvbVBVNk1hYmIwVlhCaXl0bGZHT2oxK25NZm5QcXBuRmp0TjdDcnpKMnhNYkFiN0Y5S0VCTHkwaUZ4Y2hiZEZ1QUhaelcrZDJ6bGZ6S0FIL0U2UWF3bFR3ZkpKMFVoRDZuRm5ZejJ5aEtTVTdPL0FCakhZaTNwMGtvZTdGTitFeWN5cVB1aUljSTZOd3N1QlBmaXNRQzRBd3lFWEE0eGNGM3RGdUQ0RzNZZ0R1NzRmWmtqR0FOUzdrRkxGQ0E4dnVPL0FKZ3hjR0pLV3F3NUUwZ0psVDhmQWg2MkhoNzNMRDBkWXVEcVZkdTZsQTA4N082UE9MMzZTcHlDYWVaS0lKWGpvZFF0a2F3b1U0VkxrWGVrU2hKWTV0OE5naWdlSnVWVzNrVUNyMmRoamNreHE5Z0lFR3Bja05pYzhVbEFPWmJoaFhkS0ZjeGo5emxxTVNaK1RHenRnNHJQV3YyUkNjbG9iQkN4R0hGTzRWRzhudTd2eHIyYmwveXRpY3BpREYwTm5MSFJndFRZSkc0Vk00ZStVVlRRbjB2WHBMQ2JSTnlvVWJSU1BRQWZEWUJSWDk4RHp4enZJd0cvR1pXZGNuS2crRmwwV0w0QW4wWjRWNzlFV2ljd2JSQ1pBanVKUkZ4L2ExQnEvUkFFQjhsYzhHNDlnN2NuMFFNRW9ybGwyTFRzY0NaOFRSU3R0WUtST2NJQWdkbUJqTCtXUWJXRWZTVndVbFIyaVZFN2d3TDFiM0ZsbkdpRUtqTWcyTG1rR1Z4UzlzUGNabG1LeC9nNG4rSGhWSDFvRXVxR3JrRmRSSksrcnMySGdvYXJEbWJBR0ZMYVRTaHVrUWc4Z2FPY0F2ZlRBdm5yZ0k5R3RRdVdleTBySUNwdkpBYmVSRjZlMDk0MkdFVVF0MEFoQm9YQlh6cHd3emFJME5IT1IwaU1neGFUaUU2ZUt4ZGQrNXJVU2x0S3FHRTVZckMwTnlHMG9FNHpBT2xtdDY2cE93OHNPMEFsWC9ScU1lTjdzV2ZMTllQZU5FeFM0QVRUNXZjRExiQ2xpL212YlVLTVVDSVY4OVdpcmlUNTUycStBRmJSNUExcVVyczJRYW5zMTlpZ0RsOVNpeERJemF6SjIrV05pdGFNcCsvQTVxR3U0dFdabE9WMEZvZm9OanE4dFlmRnFuM2d5R2dwbGZlRy9GZTArWTlTajBPNjlJVWF2UG9ESkhJc0dEYmpEc2hSY0JRRVB3SkdBTnZSVlh6bFVXSnJqLzNYRnhXcDZQWGxlNjhqVGVPV3hDME5RRmhhTkVqWGhRZlJLVXd3WXVGcHlUYzFzWCtMMnlMOWVmNzFzblNNNjZ2WWNzMUVRTTRYVlNDSlNwSWRQbGJkeG93VjBNeC90emw0NjVFcnpvK21XWU9sUE5kWW1NS2h6VjNJTEhmbWovVGZiMVVDS1ltamxaY2l5OWxZbWVmeWl2alhTdHNPTWh0SDJCVXR5VEh1TDh2SS9XV0QvV2VYMlV3UDJHSjlqTUQ2MHY5V2xFK3NxL3R1RS80YWVmZnFmUDRXdUhoZ2pzSmZxd2pKck0rdEdoYUIvenU3ZEFoRHRoZW5vUWl2MzVJdXVZcXRmUFMybVJBdmthSkJnbmZma2dpZ3d2bG10MTJGWXMzTHpIczBFNkdMcFEzSHVrQWFQMnN5WU5NOVJ0cjhVaTB3UEFTaFE0L1dQZFNweHRiREZJT212Wkc1NlVYMnpvNmhWd0puR1VOMFBIanVIS1RoeS85dDhqRWxoRzV1T2NtWFJNOWRnSG9CRTJKTmo3QmNrOXk2Y2dLUEtPYi9Vdm9MUFhiMkRWczdSL3YxekxoWWJDNGJKWmM1WGZQbzFsQVNrUDV5ZEhXQzRrc3BZckM1c3BhRVFGeXNnSXBnVzU3K2Q1MWoxWGNUYlNybE9XSm5LYVBVUHJhNm9aV3ZkalJPREpjbTh1OTNXQytuOFF1RnptMDhmby9vcWF3WithTlRvZDMzWDlzdHQrYjRYKzk2dFhEaGdySWpobzNGR21udEFNVzVXVTIyck5lYko2SG03OHFkQm40MkhJbDFEQnVZdTllM1JOTkpWaGUwdmFFNGFTSVVFc05WV2ZwMTl0cE4wek5ybFJxaEY2R3pBOVpFUTBrQXMvaU03TEdkaUxIc3hjVElTM2IvSVRKYWp0eVR5VUJYcXVqRVprUjB1UWVsYWpscXhDd1NXaXJDeC9ueWpBK0lNNHZoZXQrUSt0S1hZdTVCSE12WWxLZ2hqRncvRFJJOXluWndqNWk2WTQ2Z1QyNklabVNHcVhleEgxMXlTNkx6QlJDNDJBaVRkUEN6WElnYUhYTDRjVkhEZzl3TlRpd1ZZLzFKQUlGaDdiTmtrdkkvUDlTQUlKNkpKWHBZS1daaTdXQlJzVmt6R0l6NEZQTVA4M1ZRYVQybXVnSjhjc2drM0s1NlUvVE00NmF0U2xvVk03YkE1dW1QTURzTEIySzZBaDF6Qy9RaDlsQUt2b1dBQk4xOEtKTTBWUTY3MjR0eUlNeEFnUGNQREthdHZ4Z1RRSEZpQkpnajk2M1h2MUlGc3lsQzlMT1UrMFNBeERQOUNsLzA0WkRHeW9UWXNQSHREZWpKNWVQaVd4QS9EQkd5VEJad05qQlpXSXFwSTFkRFpJRDdYaXlSZGQ4MU1sLzdkNHpxS2E0SDNxN2orMm9reDUrb201OEtpSTUxM0Fldm5xb201ZWliUFk0dlNVSEN4YnJ0czRDZ2NKNzExS0FkSXRWaVZIUGVEbXE2SU5uaThjYnZaU0RuOG9VSTg2bGx6K2RINDdZeHYvcmZuT2dCUFBtazZLUTUxZ2p3RU9LY1phNUl0VTNWZnJrOGZKYzBMQ2pCV2t5M0hFZ0hLTFlZdk5hWUdxOFJhbVpoRGFRSjVpN2tSS2ZveFIyRHk5S0p4Sm9EMHp5b25Bb2JlMGlVamF6T25LeE9LNzI0M2NqNDFTR3ZHUkV0djIveFF0YTNMcHFFMWNPYkUvNnhlcXh0emJid2x1MGJsK1cwRmJqNmlRUzRnUkNFdFNjVVJwK1YwbVRpelNCaEUrQlZTSTFWY2NLN0lBNjFZME9UbWZoeE9KUEk4Vm9jQXVhNmkvZWtXdE5mb2o1RlNnVlQ3d3g1T1hINWczYnYveEJGamFRQlV3eXI1SmEreW9WelduMmdNNXk5YlBHMW5QWWRVQXo5WHNuMGZLZnNQcXcyaDFQSlMzaEdwbkhoSXBsTks3emNqM1RWVUV2elFCY1FxSFhMQ2dBNDE3empTTVRzVHpzU0JibHpKRU5ISVFiVGwxU1FRelR3NFBsUnQ5MW1RZFVvNjJqdFREZUdFZkNnckVtbEIvSHBEc2ppbkt3aGJsL3lkd3paZ1htaHZmc0UvblN1SEtBcGVYTUtnRDNaSU4raWtuYmtQWmtFcTE5Qk9UMzV2bHRDcjlqK0RDcnFYYTF2a3RCaTFic254MmV6OWh2enZ4eHRvUWQ5OElwTWFJMzVJZlQwQUtYbDZYYkpOVXg5UFhvMGo1MzFDOHFWMjVBa2h6MklEOGdBcnE3YUhZVFkzcTFwd3Z5NWhkREZneS9YTzVwZGhzTnQ5UjNhcEZkOXVqa0t1UHJKQmVxaDMzSEROZW10bzhTdDgvU2Y1VWE5eHdONWRGZFJlMnQ3clNGbnJ2a1RYa1dCVlhNV3A1Qm8zMnhFa0hwRWJYeW1kcW9HVU9GWTNJdE15Qzhydm84SnplMksyQ1A4dXRmTkxaMThVUExMOWgzVXo0TW1PQVIvUENsLzZWemVqclVycnRtb0IvOEtRa1d3Qld1YVRRNWx6Y1FpQ0FwNkYrdENYbk1sdXhocHNBd0hiSXZqcjRDVXltalM5eWNvcHJIZFM5YmpZVmVVTWI2S1V2S3ZQM0hDRXFTSmZrZjh3Z1cydjdQYk9zeVVmUXJNcW53dkFlNENyTVJqY3RLNWxuUmhEK1VXbm4zUlE5V1cySkFhOUxYdWVzOHpITTFVaWJCMkJWM3VRNVMrZ2g2RDdGK3pzVnM3SXVhSDg2UHZTK3lxT0pJZzZOb0VUZGYzY3dFWVlTVWIweXBpTHo0MEpYYjNYQUZVMFNHYnBEQ25xUkRkbjFGVS9ya0k4Q04rOFhsZjJhbklPMW1BOFZTc1FibkJrdjZ0cTRMV0RISXB1dVBxNXJEN0RLYkVrbU1yYkNJa1R6bmEvMWJxN0g1K0tYOEd5dTlERDhneHJHbHBUZUhsSjhoYTJSeDBvY0lXV2tQTlE2UmFVcFVxN2QwM2hrRXJCS0c4R2h3RitmOWpLek80bUIrUG4xUCt2clVkeFp1RENCWGNSMlVIWjcydy9TdExNY2x5SFc2clBVMlp3OWJ3QlM3R0ROOGtvTDRUY2hJVHh5em5FMVRKdGlGWDdSajZJZmEyTFNJY1JBRUVuVkZsL3kyZXlSUGVzcU5OOEZFenRwQW9SSkhhU3F5VTkvRHc3bzM5M3luVGhsYUZQdktEc1YvWmpwOGdOSkNSZlF6bW9VVEFxYi84SHRrS01YVlhLQm83ak0xa2wra28xUlgzYTZiU0kxNnVoNVdOTWdwai9JMzdVam03TTlQdFhCdVNCdGNYa3FhV1FxbUQxS25ab3hwOGQ1Z0F2WDRUMVFHa254TTVFWGRGQU9FMEEzOW41bjVjOUVhTUJyMFRvYWZiNUZCVmx4eVNpTjhxQU95VXAwVUYydWVaTkFLMUZNRmhjRFN2d1dqem9hQnhDeVQ0YU5KVndTM0tWS0xFdEpWN0tRRHU3ODRPby9SaEk5Ly9mQWQ0dGZlUEJ5aTZNajdPYlcxNUkrV0xOK25iWStIRytMdkFvRW4yZmRjRlNJczQvMUg3MUphS1REbGVZMER0STM0d1grcS9OTzJlQ29uMGR1M2pRdDk2NW9HNXpTUVBSN1JZRDZqQUkvQ1ovSnYxWDkxSUlJbDZCOWJpN3Q1RGpzSjZrQ1pWQjA1aisrc1VSc3FrVFJxYWcyWnZFY0JWT2lDMGZVN1BIVys4SEJ3TzlYWFpzVFVpN3JieWErMkZ0cFRuLzM1MWNsZWFVYXI5MWl6RERJRW8vWGkvQlNNbXMvWEJJamRMeHlyV0g5UHJVc0pFc1ZzU0wvTEU2T3R1STQrdXVEMWIvQUtoMWhad2lWTm5xMnk2ZVJYVCt5SEFaVmxpN3dWcjZlSmEweG85Z1NacjhiK0FIOFJJa3Y1WVRTK3hCTzJKN3BWL0VZNUkwK3lnNEsybkdaOVc4enUxT0UvQS9Ea1diWjFHRkg1LzZqa3lwcHNrVzVmaUZyMG1mVnlaMFF4SCs4VXJVYnk4dHNlN3VkT3NoSGdkVHFMbHdyOVA0SGM0MEJCWkdwNmdpYjUyUERYcW1KU2hYa1ZTdDdpMDBEUDMwTnFEUGJkSEdvNDlaUTZmdjVOTVE0YndwTUV6OWFPQWhWaUxTbXdDV0VRUG00TGdUek9BVnQxSzM0dHlwQ054NFBXYjJ2WkNqdXJhNG52N090TVBGdUtFM1E2Mmg4T3VwdzJlTm1sUG9NYTF3ckQ3WUFCL25OUnhjcHZLczVMWHVEYnFSRmtLSmVTdTJMbFc2djh3OVY0a2VVSjMrZkdtRXQ2MGFBT0d6S1kvZm5NL0RsZU0yMmNVRDlpbmI4YUFvUGtZV1NBS0dqUGM2Q0hVQVYyR3E3ZUxYblFIRXp2MW05RktuQWk3eTUyYXFyK09pTFZ5SHI3d01SMjNscUVia0ZTeFkzVkNROEYwb2UzaThlelBDNzNmSnk2a0Y5Zk5OYlZxYmJoWjFuTTRaVmtHMTNCWFlZdVc2emJ5YUNxeU5xaHlHZWozUVlFcitEVkRvNWlUVWZpWXBhTUJQOVowdG9sNHBjNk5OZlAwWkVzbTllRllHWDVNWTFEQWxQRjRWbHpiYzBZN1RzbEx3QmswbUZUd1hSVFBLeTNYeHBMWmc0WklXTXo5dTYrcThmRExXVzMyRFBHNzdzYzJJemMxVzZqaHREdkdTWTh0bkdySWNZSktmVmFQbUxESzVJNEJYNTdpYVJqSmU2cDRQdlNVdzBwTlg1K2d4c0dMMmh3aHJaMWZRYXlDeGlYUS9PdG5FQ1V4TTBxSkQxa2poYVhEYmRTUUhNRTVOZlNpSmNjR2NGOVNBUjg3dHdSRzh0Sm9CQUI2WVFGRFRRVUpnUWZ5cUgycnQwcU4vZUtNQnJ0MDFhNFFJSDBwcjNvRmdlZzgxVndiWlE0NEJPZEhaL3dSVG1zYjFOM2plWGdhQ0dyUlMvSEw0cEpXdmovVzhEQk5FWTU4azdJS0M0SWxld1pPV1BQY3J1RmRYNDNRcERnN21xQ0dYSkZad1ptdnFaaUZ4d01YUFMrSVdtTFl0bGVHSEZWU1laVUIzNEl0TVo5REwrNy9MZGQ0S0ROalNkNTNjM1JDNElxd0xuOEswMXlxdnhab0xqYkNzenowQW1BUWxRbVVIMndnQ2VHUzM0WmpiRG9tUHhzNHNkeUlidFAvTTNXZ2F5L3BWUlNud1NTeWs5bUtvaXFkaGxhNlhPc2hyemMyMVREeTFldVUvMzBPaHlwQkhDUTZyWnZLRVg0cEtWMDkycFV5bkZadldObUNKZjgzWnNZckl4NTVBNlhkWnV6NGNDaFBTd0hlOGNxbVRlWFBWQmVSSTVaTXFHTXVuUktQV2xlbUE5bUQrM3FESHozbm5yVDFSZGFVbmNrVTBBbktnbGowNGIrakJZWUdWNDBLWkorczQvZEsxNytZRDA3N1hBcGpCRnhZMlM0WkRkZm0zOXYwRkJ6NTd3N0NrRVV6eStVRzNqMU9KaE5FL2kya1pqM0ZsQ2U1VU12MkFVSi81c0dKbnoyN3FUakp2d1ZzVU4vMzJnQnB0dUxqeFhTMVVVbFNTajMxYVhCbVQvMjZhMUc2MWRuUm92c1pRUnFlTWlQMVZuZWhKZGlkS3U5c0kyRlBGRktDVElld24yZC9rM3o3OVJ3YURhMDBJVXdyUU5KbmQ2dHZtZk92eENHZ3M4NzYrYWo5QnNlZzNtZ1ZxQ3Vwb3d6cEN0OGJuRmdUTWs0NEpicW8zQVdwams5NlcwcU5sQjMxZCt4YW1oU3B3V041Mk54ZXlySnllVnA4YVlCeG5EVkczZkE5UVNoVjloTW8xRHpwS3JURjQ4VEZtMEN2a2FuYXlISkZ2VThBLzNLalF3cEEzSXloU2hNUStLZVAzN0p2S09Rb2hQcmxhKzBQNi93S3pEUWUwanpEWTBjVVJxQVBlZms0WC9kWXRnb2VtemVrK0xxVEdob1UzRkRkODQydzYySGg1Y3dTMmlOdzV4RUw2UXdVODFwMi8ycTA1RWJJOTliaTd5dHVyYlp1VzJjS0tuUWxqU01tZUMxT0tyR29VdVhTRWQydTZQZHhTTHpWOURjV0dWK0xnd2Z1aFYzTXBySk9mTHFJODhtbGtjZE9MaHowZWdSUW9XYVhvYUZnbFJMWE5JaDdCMDFVYVcveTZ1eDNvN2pEOGpDdG85RFRuZkE4aFdvR3ByTiswYVVqV0F5cG5YVXRJWGRwbUVhanc5MkptQlBYNXliRElxOXBHZ2VBK3VTc0MxQllpQmkwTkZBSnQ4bmF2NTVKMlNVUnJvRytGdHRXYWRuQzJlMWowbzQyQ0pndEYrVnB5SkZ4OGlTRHgwNmM4VFpkSElpYlRLRTBXWXp6ampOSjBNRDRiWmtHbGZKVlN3czhUanp6ZXdmMkNaZXFXT3JxaDNzKzdEWjdCRWl4VlloeDkxWTNGR0dvODJZN09DbU5nYUZ3eU1Wd1Q4WDFtRjZqWTBua0pCWFdaVFN0cEdBMGJJdUZYZnczSmZsSWdKODlJNXFTdHpOTzBPMTV0TUxkZDlXZDlWRW11MFR3WmppNzgxRE95WkN2bG1STmNjcFowN0wxOElnY29lSlNSZ3hZcFlpZDJzNnFhNTBYQSt2K2l1YVVTQ1duZ0syOGlmQU00ekhrOVIrZDRzd2U0QnpCUWs1NkNBaEdRdDRjQjZhVi9mNloxVWtUUm9JTGV3NlhDbFJpY0YxSDJTRnhpaDl2SCs2M0dDcDZySGx5REhDZU40bFY1alNnUC8zblg1cDdXUncrTTk5MzhiWGtyMVNDZ3F1Qitxa2FZQ2wzdHNUdjRQMk93YittcDVSajNpMStmOEhVSVRRVG5MbG9WWHFEZWozRFIrMmw2TU1LNWorWnJ6WkN3SnVTYThxa1NHTlNaWlAwTHJSaEJndkxIdnR3cldVNmZBVDlSRFNuUXh3MXhJVmhTUXVSYlNJb0hHc1RGTTBFekpGZ1FRd0NLU0NPTEtUaHBEam9ZekpHQ1NUTWJsb2tsenk5THhndUxXeGRYTEpjVEJrTWJxSFA4ZzdTeXY4TGxyRzBtbUVjMjUwd1lOUmMrekxNdTIrTUpVREx2dVB6TkF3T1JnN0JDVnlMTnRLTzVXUit6d2RnZVNkU1Bja201VThIelN5eXVDTEluTlhpY1IvK0V6NmtYTGhwemREMVFCK2dBYk9YcGxCc2JKcGVTUExDNjhIeTQ4M00xZkR5Y0c2OXE2QUlHWXlaUUhRandkdE5Zak5aRGZ2RkdaUlRoZnNobFpDaFZ2YTA1Q1hWUWtXVkhjb2lrM1pIMnlhSHJQMkIvREVaUjBXNER1aCticHVqTTZnbEpxbklKVjlNZDZkdGZ2UnpiQWZ1UkF1Y1hiTWVCN0V5UWRYMlVDSkpBbnYwdll1dndnbVpvdE1RK1VORUNlc01adjJDWDNDYWZyTVRveVBiTHhxc01UcFdnc0thWEJhS3N2TmdiemhlUzVpVHBKSXdXNlczTE0vWWpxN25pMXY3cjNMNlgwR1lDWUIvNTZwaUZ5b2ZhRXl4cnd3eTFlREI2MEo2dEhmaWJZQlkvZ0w5azFoZFM2dW5RcndBM0JxTDBJNTJRRCtKRG5QQUh1Mk1hcFVBa2RsS3RJR2JtZlFxQzN4dFMvbS9JamNPVHBjY3g2a3RpeU9lQVJZRzJDRjVKUThlQmtQbVpOdm9BMmtZNmk3bVJYMUVqeVhTWEZqby9xTCtqRDdyem8wY2x6MDljQVNBdUlsNGdPWGxTaGFCbUZoRXNRcTVFcWppaFpxQ09yUitQWXpQRTBWOHVWRmw0TERGYmgrQVVIZmt1bElpRXg5QlZQdUwyTm9ScVhoYWJWNWRQMnBQcThQYUhwUTNzRm5IcS9xWU1hQjF2U1drUGVEbnpwMERhVWxnSXc1OWRiT3FKK1k1L3lNd3UzL1JMNGJpR2k3UHZuK1JNeWd4MytkMXV0VURvRGFKZU1ucW51U0puSVVjNmkxLzZOT1ZOWXAvWFF5eFZWRTZJMlZJbUlnWVJhd1ZMSHJtMmZwSU4zZkg0QUk2QSszKzZ4NmduNkFNTEZlTnNON1V1ZVFHZEJHOE9vemVaNFR2UmdmeFYvMkxJVXU3RzR4OHl6Q1ZVa2dkZ1VPV3poNXZXN1RHeXpBWTE3NzA1VzVtMDBZMWMvZFRMdFBwNW5yVDEyQmo5M0RwM3VuUjBuSmhXaWw3OGpCTWVuMlU4MFA1VCsrOTRxM3ErOVdDZVZYSnc3RXVOZjlDUTcrdzdHMnBJMU9NcWlBSUhwZEJVOVpyQlEzRkM4OWs4OVlMRmxOQkVkSWtMajc3VThOSnh4QWNKR3ZhSXlmVTJRSzJnNk1BTENqQnZuK2poYlM3RmlkRHArbGZiUXdJUENmaVBZU29yZVdnc3dHNEN2R2hTQ0p3NDh0L1JtRFJPU0hsSGE5M0pLMTgwUTkzTCtiZW1KVU51MUpOMkF6RldmNWJENFl0cll4aEJraGE3Rm8wRXRFSkt0N3Fqcm1NbWcrWW52d3FkM0Q0bFdjTzI3eUpkemNXN3Z0eHJVeEJxaFh6cklIdVo1YlhqaU5nTWJFRlZGVmxNaTFpRGo3ZE1WMEdLYkwrQnQ4VXVFSS9kNy9iMW8zUDdPbFo1MEcxZWowYXpEZ3hrV25WM1grNHFueVk1Tld5blhrM21jdTgwMjlkVlMzRFkrOWY0T1lEOUVzTXdSbjc3TkZiMVNSS2NIdEZXeVBYMURYL0FTU05vMlN1N29YYVdCdkI5TC90UmhXdm42WGQ1anAyQ1Q3YkZSdzFpY05jSVdmeWFsbWZVOWY5T1NMNTlsSkhJcm5NSHEyTjVjMU9RcCtOeTBoMmRJSTB2NHhlMEZwZlBIc1VFN0pvZmV1cmxLTG5SWktZZjlUMkcrUDU0YklncTgwbWQ0QkYwdUdZVUE4S2Z2ODdNWG5yZFV6MEora25GUU56RXNNekpCVENuZFhLaUwzbUFMTVg3WHZCZzdUVFNvMnhHeTVoTzF1ZGhINlJLcTRYRC9OcEVlTFlRVkdMRmpoL016bEFaK1BwZ2JzaDJEVXdOSW9GTHhhL1hCUlU5ZG9wUDU3d084QVhsQ2hVTjRUQTRwVXVSRzhRZm43TlNQdWUweGhuVlpPc0V1N0x2ZVpCL0txOWFFUjV1UktzeXMvTlFnOStSR2RabXdEdHlRWE9BRTFaOXZWRkU4Z25lKzNiRGppb2k2bW12RFRqMFpDblUrenhadEovMWlKbU16S1pYYm1SdmUzeW1YdklFdld3RGlMakw3VXdwbGtsczl6TUhRbFJDTFgzYzJxYk16V2J0T3pRNzF3ZlRzWE5hWEhmR1BBRkZCZ200Z2hwZXdjV2pjc2FxL0grZzhGK3ZpaXR4YTlBSjRCR1hrdWJDZlY0dlZoYmk3VmFnWHBSWUVpV3R6aFZKQTlySHVZU1VlMnBIMGNVZ0dhc3BTZDNVNGJDQVlzMkdwb0FXcFcwYzlHQWZ6YW4vandsUVQ4TmpDczExWmhpUndPN3J4SS9QNzJhRlFXd2luY1hJVzB2eG4wSkxCbytCY0c4SC91MWllSnl3ckV1RHU2bXBkMmpUTmU2QWhjelU1ZGE3d2U1T0xSdUdkUnZ2UjV6S0krWERRVU52aFhRN1ZGQ1RkcXoyd09EQ0FRSUlwL29HbFVyd1ZRKzl2ZTIrSDVOK1hNQ0tjcVhHWXVuOEdWWCs1anlIVkQrKzdlK2R5YjdkSUpROTJPM2hGT0dKZGJINzloMERBcWVVcjhJVEtaNkpqNktYVU5ONlN5UHNuNTJPb2c1bEh6dkM5RVBwOS9RKzhrUG02cHFTcHhhUEd0R1lhTDdNMEpBb3BvSFI2QmhoRWlLd1NjRnVMcTY4UDJmZjNzNitabUlXcEdpUUpEdHpJMHYvU0JUNnVMM1pTbXVtSkplVmhvRU1VeVJYS3BUQUhmenY1NS9vQXNEMFhzR212YUdKT0xLa2RzWERiWmZPWXBuR0FHdEYzMWtMUDhPUkdiQmJvOXFhdjNVNXVsbWZhOGliWGRKdmE2NHlmaFNqdG85Y1RPSlRvNUR6L3FZWFBVelJxWDQvZUlkejlHa3p5ZEVPbjBmbTRxNWhWY3pGT2N2Zm1lUUY3TFJtYzdlSDhReENralF4Nk9YdmpNbENRVGdKdXBKejR0WHA4VUZOb0NCYnVVeElOanh5N1h3MWJzVXpJeTNNcUlHWGtFcGlLNmZsa1dpQVRiWWRVb1Q2alU0TFlUcGpXd2FianpwS0dFK2o3TlVDWWFpOTM2c0JrYkJmejVJRFU5VUUzZUdaN040NFNOVUlYeFUrb01WZkUwZHMxSmZWakxtdytpMkR1aDdGYnV2NHJSdmpDSXVqTVFVb3R2TGg3QXZ6WllHR2NucVpWeStwazdZdTlVK0hnbUxyc0Zkdmx3eGcvdU5zS0k5NG1KaHYyOVpHa0xUdXRyWGsyYktoMGkwUnpCSmZyVzR0VXRBSnFkNWo3cnoyc3h1andVek83SjZRTE5oWm8vSGpRdUZoQUgyQnhsUGRJakhaL04rRlBIb2dmN1M4K0xUL1loay9wTERweGhaWUQ3QXJPYUdBdzludDJmWjAzSzlrU0FtQkQxRDF1dHF1SGg0NWtzWWZSK21CL3N1eFJXN2N1bGV4VjhDeUFXblY2VnB2alhNRWF6WGQ2NmUxNk1xZlRpQ3ZSUlVMUHBrbndONXRLU0E4VjZabnlCMGEzdUVEUHNJUXhkYlI2ZG9sdkhPRi9mU2JLQjBVUHV6eHQxbDdTUkRNOWpIbFdaQk1RMGhRQVhCWDBLRlFaczBMRGltMW14K2tnR0Nnc0lwUTh4cGM2VHZ3NHB2YjRFNVE5dklSQ0ZRNUNmbTR2MklHR2NsbzUrb1hubzhJMjZkWW9aTTRtVXU0dlV1blR0bXJNNEZMbW1PejM0dlZGNUpHOFUrVi9zcGM4SUxyUlJtazJDdVIvNEoyTHBUMU5ia2lyUUlCZWgzYWY1NGJRRkJuNVc5Z0pDaFkrTGlJbWdNS1J2dUR2M3crK1kvVE41alFBcWQ5aCtGTHNaejZ5NE1lWm5vaFhiZDBhNW4zMldNb3ZlVkh5WG5KTnZEb3VYZm91ZjJUK1JyMkp1RHQ2TGIxOS8wNEhHc2ZjQUFMODVoY3BqTGRWTmhSYTNXMlNhWjliam84aWFXU2lpYU54MnVnMGFNWnFGeE9RMEczTURweGRSblJmSU4xNG54RmowdUorWmpNRWw4Y28rVTJiVUE1bGxUT1pOa2lXRXV4MmVoTndQUys0ejlFYjhsZEN2YWJMQ2FlcmVOUkJCb1ljaEt6WmZGREtSb2lvNzY1cTV4eWNBbjA4R0pqUk8xeC84ZGFkRyt3dXBBb2tMVTNZd1RDS1pNakNHekpJSUdqOEFoR0NDTURseHhxUXl5azhuZTBFRWxlRkNxK0JYU3BzWHdoODd1MS9ydHNEVXFnV1V1S1NYenJsV3JkOTYzMS9xcVVucjlKaTBkeHNSVWxMY3lrNUJ2ZkIwa2RqRjBra2lNOEFmejF3Z21mTCtNSElndGNPazR1V1JubS9PdzRNSm1lVGtDTFJiSThWVWZWT1EyZDlPZEx0MGdZMXVKSEVNOUlDK2pwR3hERTM0aGYwaHdHbVcvWjR1YjRqNWJBMG9KakpXTklQbCtqMmo2VXBTZVNHbUZiQlorNnV4VWNxYTdKQm5lUmJQTzVSTWdZRWhGTGFzOWdaWkJsbit3VlVUdGJFRU1CVi91dVpZMHVLQ3RkZjNoWFVHeFgveDhZVm5SREQ1N2lqNFlSVTNKbFhWemVFd2J5bm41NXVuRHZ2Y1BzVkw1UXBaMWlZMXQwQmpqTzIzRnFxdy9nNmRVelNMdUc0RndkM216bDdwR0VINGkyNXZaNkI0NjlaeEdRSnNiQzdrTXA3cDlKcWpmNGNWazhBTmFsQ2RvZGFwcDV1L2gvSHZoUXVPQnNLMGZ1am84TnB3cEpvZ1U4dkdtQ0Y2cnNUMUxOSjkrUFNQOElSWTdTMnkxckhweXZlYzhrQnRNTzFyNmozYTVISmF5c0xqL2ZDVzIrVXlVbjBaRTFsUFQvbjBnL1FDSDVmZDQ3cHppYTV4bEUxNzBuek5ydFo0ZjFrbnBsU2c4WXBka2RKbkhxeUhZUlI1VUI4MkhMRFBZN2hUWjB0cDBDN2E4RHRKRm9mb1lRMCszZmhDRlpSWTMwTVRWeG5ZYXRtZ2gra2JyclZkV21adko3QWJOeHF2NWx4ckl0Vm85azZWbllEWHdGbCtTc1J5RWo2OUUwTG1hY2s3emFYVmZrNEVnWTFoTnJCMWYvd0NZbm5RdzZ1anpmVFY5NHVpeDlXUmY1M2Qxc0JFNW9qcWNNSi9xeWZVaGpLMUdiT29wdXJKdmhLNG5kNm1CVEQxTjdVdWgram11MFlobCtndHJsRHl0Q3Zkb0JXamRqbUFzU2x0cWlFanNaQld0OVRHLzJSRzlhQ25xdVB4aHc0WXBxWE5NZm03TlZ5dk82UTR4cjhDd0FuWXR4RnRidGd5TDhxQlJ1TnkrbjBxSXBDdjZidVJDRkxMaHhaT2IxUERHUlB4SXdXeWVENTdkNEtZQzN3eHlsMG5ycS9KcUU0MkdBY3dkTVBpZ0o2VDkwMW1qTVNlYW9QdUZUdjNZWCtNMXBKdnBjU3RWMXpjVVFDQytjVVkrV1FPTkxUNWREZjNMNTgxYmtMVGJKMlJDbFF2TkU5MWlvREhPbkN1dDhiUzZINGdKT0VkeUxpNi9nUUxhdU5POWgzYWpGUk4xVTQ0UlJVc21SSmEwODJMTHd3c3JkU08veTVPY0tCN2JRT3lOcGZLUHNVQlZUVE92dEF4MTVwaE9vRVhHeUNndk51K2lCNnlHeTdZczZWUW1wUGRLRDhjeGY2QmU0aUZtOWNWRmN6MHQwaGtTRVp3ZU96UVVuTFVoQTBqbGtud3hqQVprbGVvWm14VGUyTUgxVkl0U1VacExScnY1YmYydEY1VmNIVHo2UDZsQ2ZsMHM4Q2xZTjdrK2RPVGUxOGhseG1ib1lMNkRaeU43L3hNNGNlenh4Y3V6M1IyblFlRk5wMThVRmVyaEhKTW05N1lqRHEwaWY1N1Yvd2ZxaVZnaWdPTHV4OTZVL2FCNFA1aTE4RytKZldaclFqL1doRTZEa2podzhGdHRINmJKMHorQlNLY05ZYkFTZ1pjcHR4ZFMwMjN6dUZFUk5EcHkyWmZYTm1zVVZZc0FIakFVTWU3U25BcDg4UVUwYkRkaGhkRFZJNHJrWlZGV2ZEVldnZFY3dTI0NnlrVzVUSUJZVlRYWnJ1aEFaRCtWdThNRGhpS0R3Z1JUeGdYTGpjR2pLYjlNRXlmK05CNFY5aWsxSGw4VWNZTjhmbG52dTROM3JHL3U1bVpySnMxdTBoTVVlK1loc2hmTFNlWDN4Y01UZmFOMDBNS2oxMnU4aVRkY0ZlN1NBNDY1ZXo4aGNkYnBkSEx5aWNPaEdLSk4wdUQwVkNzaXVhYWdKa3RKTVFkSHJxeW5QK3g5Wmx5R0dyUVBJeW16ZHk0ZGdrZXplWU9EdWMya3ZYYlIxUUhtZ2VvamZ3Qm1JNUI4STM4cS9JVVU1RXJ1VVdiYmU3TDdmc3ZqQ3RCNkJpTVdTaTc3OHoyYmluSkdZY3FjdWd0aWhvV2JQeTdLSU50K2VWYWZkb0U4cXBIMzBmWkZEcDBRcXhuMWpDUFVLcmlpOGpNdVE4dURVejBieDJOdHVDeHY4ZGl1RFJsWDdWb1VPd0FNbTBROUdmSHBzeTZ5Qy9WSWpNSi91c1E2eGFoRWNTMW4yU3RvOGRrYUV5N05IdFBlS0drN1kyYmFjNEZkcytIUjlCTTU0WVpuZ2RTcWxJYVRIdVFwU3p5ZDRDckVoSkpxSkhhbjV3VGNwZElvZ0IwV2ZxbjJVbWQzRjdpQXJEblJFLzZNWmg1YlAxVVJ1OTJERlRHc1RmRU9YNGNyOFRqb05Tc1dGSkljUTdtOXIzY00rUEV0QjZ5MEUxTVJjK0pjc0d5OEJUSUN6a0REdmRtZ1ZXUTkzNjFrQm1Cd0RyRnRmTzlHSFJ6elR3emFQSzB1YXBnQVpVV2RUdTZwT094MGFPVThSYWh0WHhROFN6UktRUVNuYU1LZVUrTXQzRytDYVh5MzZWb3I0bE05eEVWWm5mTER1aU95RG4zSmZEc0hkWHVvTFlLeTduamNzU1IyZnlTRGNaVU92USt3cWRGODBSV1BneC9VUnZRMDhKSk9hdDNpVXlpS05USXRqaU1SeXNMK2Z4bFJBTzRpc2JaVW1TVkc5T3RPTS85a2FhZTliTDdwTjBiTGYvSkpMamhkemVnN1RSaVNuREd2U2VmSXc1T2tGSy9vTU9uR2lDeDQzcW5rTVJLZ0c4cGI4ZXVFK3dvby9ncWFTc0xVVGErY29RSlB6cUtzOTNvZDZNTzAyNndiWlV2TFhXbHE0QUJQZDBmT2pFUXdrYWZtSTA5Q3o0S2lXNDhBSURhOFpQNDBVUDkzd3JIWWZ5U1VlYTNHSkppWEFJNmdDd3Y4TUhGUUhzeXZLSjJSc29iYVFjK3hWdDJ6L0dxakpXVzFROGUySm9CbVRyd3M1UmJnOHJoT2pIa0R4V2JPamlWb0dDSitaYjlLKy91amhRNGdRWUIzWkxRMmJUK1dJdUJxOHlmVURKeVl0cDZGQkMzUW5nVFdnQU9rNnBtaHFqYVpSeTliTGJiUEw5U1FocjdqYlZEZFR1bGRUU2c5cVhzeHJHL1VwZy9WQ2pXelVuV3d3YXN1THlETnVyT3QzV05ySUY1M1EzT2k2NnJuSFVqcmYyMVE3UGNXOC9RZGc2eWtrVDhwb0VWYTBIZGRUdnQyZVZPZDdaU1BGVWx5VXZyK2NrM3VPTUg0TFdHNWwyRTdVamhtb3BVME5BMXVoT1prN0hubXZ4bHdSbTlNd1dEa2JjU0RBT3ZaaVNIZmcwcFNLY0hLeElGd2lkZ2hFWjVEa1dCOU80d3FsTDNlakZ5TGNNL3FqMitHSzVkK29XaEJGWUdwYXlaQ1dpcW1KbktRQkNBMXJoS2ROc1Fub2lPQVRHR2tQdjk0K2dlc3ZMM2JId2hNM3JJc3JaeXpGd2k1RG95WEYzU0RUSktXRGptR0hzYXFUM2s3dkNzSm4vSGRZZm1yeG14SC9Gc0hSRjBJVG40N3ZtM0Z5V0I3RTVrMXV4MXFibmpMU0x1QTQwOXFQR0kxNnNxSmRBZWdrMU13QklRSHlGb0RFMGlBY0hJRk9tc0grSklkdHE2dWtmUTdza1JCNFBuZHVsQUdIWktTQWF0akloYkZ2R29xeGUyMnhINlNVMWNmZThXY2Vac2RzaFhscTJQbnp2UXBGbExCRUdYdnJSalFOMjR6blRjWnhSQ243elByNjlseFdUUEpRaFNkbDNTNDdBdzJTdmhWbzAwK3hQT3g2MUczNUxmazlBaWdUR01IQzJuV1JtTDdESnpTbmR0cG9NKzZlMkxFUUhrbzBTUzhYTEp4VkVKb2VEWW4wT0htakdLSzNrdGtIRitHclJXQWdmNHZDbE1HQ09OaWpMM1R1ZXExaGptQWR6WlJ6cFlaeVpiODk3NGFRa05DNWI3cVJvRWM0b2puSktCblBaMVl0ODd0ZGJrb1BYUm5XaEcxRWtsWGc4MHl1L2ZNL05TbHlIY2owdzVXQWZvelU4K2NTZHduSFNNUURDQmJqMGRwc2VDUXpzYmFBTXRINWZXelo4YWNVM2xSWDZUUWljUE1uZFczUFRLWHBvTWdJYk83Znl2d2FCU0x1OTVjZkhWQWovdHptSVd2YTJKd1dYK082Sm9Bd2VJeExBZTVxOGJqYnc0eGNkdWdVZzByMFdYamRGWVFra1RQYi9jc0FHZ1p6NHVsS09Pb21vRXhBS2QvVFd1OVI4aFg0VVQ4N2tzb2VDMkFtMVVnSGZqOE00N3JXNUZEY0hMaHFqaUdydTBlOGVuQmpRTWdtOWJaYmFtYVNrRkZDMXBIais3S3ZNcHpNS1QraUV1YUZiQzd5eS9IY0NzL0QvVjRHcHUyT3FMcWtYbTR6aVJWQ3BNTFNoRVpyeklESTlVcHB4RDc5TjY3MkxKWjBURWlUZmJNYnpKRmNWTDhWRnlhVHczOTVKbFV1Y1htaTA3TnF5OVI4RzQ1ZTBwMHA2a1JZYzdJRExxSjM1OWxzcTY4U1l6aDRsbW51N2p0bFJkdCtFdTF1VWZsYVo2by9ydmE2YlRiNTBWT1JqVGtMWStCUThVSENSSEdRUDRvTDNiY3FyeG9vTEdQWFRsY2l3SXA5RXNvd3FxYUM2SHJIWjJCRXY0RGZTZ2pMNnhEZEduQ2pjWDF2eS9hRFFvSThhejYvUmJpWWpsWE9HTDVXaTR3aGwxdk4yYUErUHdqNlBqWFRZSXhyUDZIRnBxYkRob2RhM3dGQWJqOE00ZEVxakRmVzM4ckdhRitkZFN5T2FrKzJxcjdMdWYrWFE2N0taK3pOWVZnUHRUa1BKdElrdGg0ZkNqL2JVWTJqV2UrNmNpbGF1c0JkQXFES2pkMFp6eW1kRG92cjhLUUIySXlYSEQ3WE1JWlI5OW9kRlI3TFpZRWJJejRxanlGTjNRSTNvblB4SlFsa0pxSXdacG9OeStkYkhCQ0tTbWNNVU05eHpjR3kxS3ZWS0M1ditEMmQ1Q2VkRE4wbFZIV2xYM0daNGE1VmJJR1FibHdyM0ZEV3J4RG83MDB5OUNCM3pyUFRQeCs1S0JVNGJVbmJsUWY1dnBBb0ptd0dtck1QN21aeTdMRnFyRUw4c1h6ZmhGOVR0QnY0V2NubjNBN0dJVVE5cHVNRFVWLy8xdFRpRzMzbEF3bmZTVGl6UFRubUFMcEw5VzBia2lWc2d6YlB2TUhabU84d2k3ZnhKM2t3eVhZRzNlTWhUcnROUFpwSG9lUisxMmM5YVRiTVBKd3NBOFRjVms0RnQ3TUZIRDNoWHpDZVFnK20za1p0VzNRUGQza1dndmlzd2lMdmEwak1hOENVUTlqMmRFRUtUOC9MWm9WclFWeXA0N0R1SDE2T1g0MGZiQWVYYW5GTDFTUFpPUEpCS0hkNWFnNlpHM0NjZHROMVZLaDdrSWFUTVNvaDB3QVkzUWMwTU1zazdBdlVEcDgzbjMvWDNOS25nUFRoYVFldGtHRGNPekphMHFiUHNpUXdiaDY5V3RmL0luM0NpVEdSWmwzZndLYW1nOC9aRGRFQk1lUDM2em81ZGc2OWxlSFZ6U2ZLMVpTYi80T1dlanJPYjVMd1NtZXoyUW9UMmNGVHN0VW1yYmthdUY5RVQ2ODUzT0FqRzA5dVJiUzhNU0k2ZVN2d1dtcDVwKzJPbkc4UmsxdlowZnF6QVQ5RjRPdXBlRmF4cGk5bERTa0ptU1VqTkRKOXJmSnRDOXdLV1l4ZVNreEV4eCs0ajllZVpXTkw5d1VqdmdlZHBMaXQ0TndCRFVyMjBFOS9lMm9pVW9VWm5VNzBnNEhNdEFRRHFsRFI2QXN5cjZybm5Ra05odVBoTFlwSC82M1VFaTR3OFRGUHUrQVZabG0rdXFweFJzaXJCTlgzWFRNTE9hL1pVMkRLV2dYbkZaeEl5R3I2SjQ3YU5SRFQwdkR0ZVk3S1lxaFZrdzh2eCs4S2VITUIzcDd5cDkwandXanFnNjJ2NVd3eEg5TUluOGxpbkNhUEU4bTRJS3VDSE1acTUzbFI4RWV6Qmt0VWR0QlhpSTNUTXkvUVZBVjl5UjVvUzQ1MWVEUDRNVERYeWVJRGMxNTlQdUVia2E0aHBOTVRLb3lpRnY4dnhUbWRzdVB0ZUxGdlNYeXd2NXpWL3V0cjNjaGdRSjlnK29SbGpGVjlxdlA1bHRmaElrMngzNk5QNk1yUFg3enkwQ1RKaFdXMHo2RnM4anBXK1RpVGU2cWFHVU9WVC8wNENRc0F3cGtTU0FYNDl6TnROMFlVd016bTl4bUpEZDMvcjBreWdmeUZkakJOTlVla3FQam1HUEhFQ2E0aFdaYnlQTzJPTWp4eDNDN0ZNZC9sT29nKzcwcjI0UGRQSktvZWZrSm1iSWY5Mm11d2JjdktVMDlxOWlzby9lSFJRcGZ1OUlxVndFNkZWVjdCeWJnQVU3ZWpURjRXbGh2K1dBTHh5ZGd0M25xaHNidElZNCtEWTJNdlljN3FveVpqOW5wcS9MUmRod3F0clEyREhFRVBxUmdERTl6cnZYNDRvUTlwYkFsQ0V6SVNEemdXL2ttMXpyYkJpYW9pK3FMUUhKaVF0UTZrZkd4ZWFPclJVREZwcVVWdWtkcXl1WTN6V1lvUDdYeXpGZ2RRUiswV2JnVXhrZGpQMHpwWEdQbEd6dmZtais0L0ZmVjRtNWNtd0M0OXFNeGErbFpYNDJEMjE1TStaVFpzS0JBMjBkQUZIWXVWMVEzUEZ5cTZDM0JWaGhLT0RmTzNEb01mY1dWSTlrN0loZitNanlwSUhpWFk4d0t5ZnJLZCtjM00yU1piNEpEY3BFQkxyQmV4eTlFSVNweHo3STdEWHZvYlBEelNWVVEwSXQrcmRqeEpKSGUxelNSd0xIN09WWk9MZ2FIaWpyTWtlY01ZYzZ2bkhBcTU1eC9MZ2s5NzJVQWtoVnorbFJMT3plbDdodDAwZW5nUVcwanp0Njh5RU11ZGNsK1I4bHczM09taU1XMGlsSUcxRXJJTnNJUW12bjRDREdrNkdOR3k3dFA5K0F3aWVyN3B2VlNGeld6NUZBa0RVQlpOQ1E1eThVaTZKUHZjNGJvR0dMWGhybm5QZHp3SXdrYnlzblJOMnZna29BZWtERXo4UENkRjJTVUoyaGc1ZitBVEk4eWZBRnYzYWlMK0xpU29hRCtnaVVyV3JGVVdVNjRpaDlwamV5aVlIS2hnaWZwVDFSdFRESjR3bjBaSFRJQzM1QVd0eDVLb0krVmtzaVU1RHVudHJKdWtGTlQ3d1M4cDFhY29aemlkYWgyNVQ4SzRKbzN3VXhaMFprWnpYUXpoTmM4bTBhSFJSY0h1Y1B5YnZUQk1pbWZRQ1RIZngra09NVWsyQllaelVXWmkvbUtKWHBIRXB6V2wrVnZNaUZ2TERERC9tT3JqMVBjelI1WER0ZnRoM3h0eTdzbU1nWEQ5aWFVN21CUGpYYlE0aCtjUXdKZi9RUGlzak9iVVoydXlaNi9UU0R2bFJ0LzZ2S0NJQ3R6ZmlCTXFRNmtKK3dxamhuTENvSXdqa3VYdEwzTXg4QnZTSVdXeWVwOFdrZzRUdjltUjhwaE04bkNOWWhnWERiZlJFMGhaSVpZS2F1UGdlMlNNTzd5bVZBOFRoUVBPdDRwM3RqVlI1SjVIOUQxczAvU2xRTCt1ZzdFVUduRkNld0Rhc2o4eXlYbEx3WDNPNSsrcXJDU0s5alRsLzRhTEttdG4zQW9uVkh4QTl2Z25VeElWT2RqWkZNZjF2c2p4SUhKMysvZlBQWVZSVDZ6TS9Bc1lLRll5N3RFZXJ6V1BXOXpOVFVFWW42WHJUM2l0RTlkMEFkY0p4dW5HRkZSOGxGZ0NLYkZBYjlYTnlqcDVCa2xMZkdSQlVwOFYyeW85b3dhcWx3QzJhQmRjVHNJanJXTFVzdmFrOUx0YzFwc3FzOE8rY0s5YVZMcVc0OHc0T21Da0NOdDFxc3NPK0J1bWhlcW1lTW1SL2puVnhjdXF4a3oySWdoRk1uUW1OSmJtTlpuVFdyQmF5YWwzWHp0KzdhWUVHcHgrTFFUVzJkTm1GZDhOUVZYd0QwTWZUbURwYm1Xc2VKWndBMHhHRTFYODRLVzRWcGMzYmFKbkVlR2djditsWHBGZzZSMnFGS0pMQlR1bzdoTEJhUWR0TXNZemxraVU1QkJWN01sTHlMeTE0VndONWdhbW41UnBTWWRud1dGdk5YdGpQQmgyOXR6SXNtZGxZTHpFNDYwTzhCbmxHdmRsYU5uT3BKVUtLTUxTT2JaUjlsRnZFTUxZVXB6WTVnbFc4V3g5V2lYQUR1aFhFbittNVJOcklaRDNBVkF2aWVaWlFJVXhOWGduNVdTQ2ZDbDdXL3poNHRlRFZ1Q2NiREVqQWJZQ2Y4eU8rNGR1VnRrb2hsTk9XNU5JeWZnQzJPZGUrQzFpSXZnY0p2QlRiZ0hPMDF4L2pJejhROFN3alpnQ1hRUDZoMnlHRjRLN1lOWDI3aCt4c2ZUZGc2OTJ4ZENrbnRrcnEvM1VtVlY2RWNXMk1OQWhVZEcyRDhNZVZhNUwyVGVsdFphL3lXN05yQ3JmVGx3VWtDOHE0YjhzSXczeHMxN3FNd2l1aktIT25rRHFNdGhRT2V5RGRWVDNLQk95UTBZUXhLa2pRalcwOUVraFVBb0NMcFNuejBoRGtFVmVQODgxU1pWMGZHMXVKckNXb2ZZSkpvbkIxd0lsUzN0L2VZUGhsTmduQVRrelBWL05sNnRYREpSanRFNGIwckgzQUk3eGVUcHBwaHZuMFVJWmJpTDB2ZWJXVlFrSW5adGxFMHdPdGFmWUkraGMvY0ZwcGF1SjFPVTlFUnM0bTZPNUl5VUdzSEdnRmhyS1gvRGoxYytKZWVwQkxJOEdWYmxjQnVmZ2NQYXh2WW9aWFVMbTkraFQxUXVxaXo3Sk9LUUEvQXZZSk0yYytGQ1ZaN0p2NXhrc2pqMkpOMmRpa1VKNWZJY3hRZm1pNnRzMHdMTGlucFdwZndidkZGRUpjU3B2enBoSmtqQXdreGUva1U4a3FYZ2RieEVDRmdQajhjbGJOdTBUTE0wVHZQN3RTVWYxTTN1cUNUSXdkNjk4c1l5dzlxdFJqaHNyWVV1OVBqdzNHR2FVU0tOOTkwQ2cvaWRYQzhpUTNXWnZlM290ZVIzeGJmTWduMzc3bzVJNGpWNVZCVFVoUmgvUFlMbEcybWU4VTgwZ1AwTno2dWxmN3NIbU0zT1ZWQUE3M0todDBYeFQxTjFEN3hKa3NoWW9jeU9IdVNidVg1Q2xsUmhJMS8xM2NXb3BNNHFsYzlCaXl1V2dRbkszZ3VOcE9tUTRtSHJWTWRyTVJnVDdOc2dRSzhnallDcjdTc0ZKeWpoTEhpM09XejJqSUhhRTFTbUNEaVFycSs0eE13S20xd0tQQ05iVy9vRzJEOFVDSit6SnVBTG9kTHRwRG5oRmRPTWxKRktvVHJKQVNkdUZVUHpUNHVlcFI2ZEp6NjVzeTBKbFZLa3h6QnVwemw5TUdUbGZ3czNqMU5uSDhJYmpzaW5XNjhhdlQ4bXMyMTBmU0E2bGFFZjFDSjNENjR5SFh4a2t2d0swRTNvSmdRZzAxbU1YWjVxbUlNSmYzaE5lajRUUHhjSWhXZUN4Vi9NdFc3bTNNNnB1enFqYjJUT01wbll5WkxEa2lLY2hidFpNMjZVWGFObEV6emVObnZzTzFZUEIvcTZWSVFWbUpMYjUzRUNxRmRncUZWVzNUamxKSzREeTBUZkZOMnlLT1hnNFo1dytmZGN3NldYM1FqN0x5am9BcGlIdHY5Y3c5MzRoNzUzaFhFd1V6TldPNmpFSGF2U3JDMElTejd3c054alA3R1F2aGl1cmZrUHNIaHVqNmtPL0lWdmI2SUlZWnkyYS9DZUZIWnhuUEtndWxqWVNUZmRrU1U5UEdoSDdyVCtZcnJ5V2d6N0gwalE0dW5oSmNzM0VLaTYya0g4RkhpSmlZcG9qSWJtSGJjMnNSMCtPVUtmRFBXSVAra3N3eURGcVBiQXVlSUg2UVpZSy9HbGowc0VmbVIvZXVNN3NycmN4RUU4RFhjeHNDUUk5RmpobDUvOGNRRXljTEduTWI1Rk85bndaT2d2WTRRbWRlYXZVQlBLbFVDUlhWd0RYZjdrWUE3N1lyRFE1djl3N2VoVEdOMmNraWM3MTlqeW1CR1ViR2xjMDE0cHFrUjRoV2dnZmlHWVk3aVMzV0FYcU1wUERJZnkzb016cW9kclh1dEg2U0RiRkQ3NDVJb3lkd2xPcWhYc21Ka2hyRHhNcGI1a1V1N0Y1ZTdEaHZ1cWVaTVRoT1V3SnJKT2ZzMWtGSmg5QXQ1S3Q1d1lKUitaZy9TTFNpeEVWUUdnOTVQVE1kaERsWFdkK3N5eUtpbWJpK0E1SEJRVjh3YmVXOUY0MHFrM29oQmlIMVFUS0ZVaGJidmFTU2M0ckxYRnMwSDlxZ0c2elFSeTJYalhSOVI3TkJPbUxldWdOSU1lVnNkWldTZmVlUlV2bnVIcGd5T0k4TVlrNWZ5b2tlVmY3M29ybThhZngxd3o5S0hGSjc3VG9BTEhoN0VrV2tlWUlWOXF3QVcxQ0wrNWp3VllKR1hRV0xBUFVRSDhlVzdhTE1kckNqUDVUVkMxYkJpaUhLY1k5SWg1MzRWLzVtbm4vVTVET3A4THV4VmdyaWFPSGJ5aC93TGVVSkg4N2VBTElMeFdrWHI4L1ZPb3NFY2g5S3JtbmdUa2k5ZzcxQWtvdkVzdTdQMWJnaHNwdlo1bEJ4S3VIUVJLM0wyNnhaZ2UzaXNTSnJsWmpLbkhQNTNwSDRjcWJsV1dpNXE0SGhkT2YyUzB1MnVkdWhVM3hPeE5PMkhRQ1UrTkdxZlZtRTJUajh1TGJwN2Z5TGcwYzV4TTlGRXVqZnM3UUVkYVJUak5hQjZjZC9NekUwR24xRlpYOVBIdUcweFNUN2hScFhxbzExRGZsNkNrQm1LRWpsYzZNeVJxWXhSeUJuTGhJbHBjUTZMa2RMaENDd2JwNkxId01kUmNJNUo1SGVCME02VVBua0xrNDNLbG1ZZnVXQU9UbXprSy9rWFNGYjhKRC9PaGV1REQ1WlBreHhrOUI0NnNibFJYYk5RS0M0YmR2MlhXSkdrcEJ5VWFoNGhlUjZIVW9TN05wVjlGaCt2bUg4WUZPZFlQbXBTTjFHUE1Pc2xBbHdwMmZXczIxcEw1enFIUXpneHVPbnJrVWpoMXNZTzlyMFlHVUtZZElES3hPS1RUVm9vNnZIMm1oT0h0Z0NFbVhMSHlNaE51S3BTMzRRU2M4c1hwaGw2V3Yvb0h5VW43SVl2akQvYmFvdm5QTlRsV0pOK0tEZ3ByZ2Q4RVc4aVVDS1MzN2pmcERwcjUxUWMreEt5RmxOV2tCU1g4dXgyL28zQWtzWTNHOXl6cEhSVk8rTjIwTGJYRys2ODZSUzF1NDBScXJQZzczZ2JCa0hlZlBNRndmclVLdlVMOW9jMS9ZWHp6d2JVL09UeElyYUtCSkRzUGhodm9lem01dFFKaUJVVlBMUXJpS3pjZEpwQWt1Tkd5VzdBMHBQOUtmT2dId0pLR2xxK1BWZ3kzVEFTUHRUQWpjZ0xWaGRIQ3AycEtuSlpTdGdVWHJNQllZYTM5WnlEMXpIUWtLUUo2Z3dSSElldWxGbjZERW9TUUtiM0JXWnBwV0NncWMxZmNhaENrMEZWWTBrRHViNTgyQkVYUHZKTHd2dzRnbE0zUXNiYkR2SVZvMlRUVWFlZFJ6SHcyVEhpZnZRWUxydm1wZU9UVnNGYzRYcGFYSlh4NmZqOUNTU1lzcWRRNzF5aGRPSGQ0b1pGZllKZndmNHNVMysrWTIrZVdwdGhTeTVaUUxMK1BYQ0dNVGhBMm9BZHdReW8zdDRqVk41YmpuejhqUjUxZ0V0VWJ2UTltazdMSFd6dnRVLzgrZHB0b3NRMmNiV3FTOVBVMGxtV0Eya3RReWg2VmZWdTlXM00zUWdETEtNQXozQStQMkZ1am5MN3N3NjB1dnQ0R0JuV2FGSnpnZlByNXdpbk5NVk13ekQ1UGQwZXE1RTZHbUxHWGNHWEE0SUQvYTdmQUpmU0R6cUxVUktET09scVhWUmNob3VkWktYU0pNb2ZqRDkzYkxUVVdmZTVUcDdkc25DRmlYYkEzbWJ2emx4VkVEUm4wQndDZDBNTXU3WThHa3Jzek5STDR5cVR4RFBoWW14Q3BYRlRxOHhNZDhGY3dPSnZneEprNUc5eTVIM2tlbDY4UUNNY1ljWFhQUnlhTHA4cnFYK1IzZFc0RExSeENpVkF0alFrSVEwODdmenBCZnZQOXBBVS9rNzk5MlJUK3Y5T0NIMWFXYXQ4REdwOGo5SURPVFc4Z0V2SGc4RTRHbkgrY3lDeGFFOC9nTjE1cTQxcktpNzZPM2psRDZQMWpUaGljRW5UK3l0Z1l4OGRqWjA3M1dTYXVLN2t0OFR0TEJNTktvR013QWVxV3lkSHg4aUZVaXhvZFFaZ3VmOWpBMU1WS295L3Q5QUJpZzc4YjhLcFZ3YjdETlVqU3h1T0RMZ0dOalA4Tnl5dzNmeVRiQzI0K0lwNXVmUlQrQ2Znb2hYSVRWNXJzQWhvbndQWUpkZFlhcGVMNVptM3Vodyt6ZnhYTUY0eE1MbDhXcmhWM1YzWitFR3RWRDNOeVZ0SUhCa0ZJcXNBS3ZmUWs1aENDVk9XUDRTT3AzMzl0dVo0bVYyMGJieG8vOXFHRVpYbGN5VWJuOFRoN0JJdnZEaUFjejd2ZDZPOE1vU2NlNjZOdVQ0WHY2cUQ1QnBseWdzY3p6T0l6RkhzdnJkQXNKbTMvSVpKUDRWUXpmcTVMQzByM21QOHQreHVLSmtTNEpES051Z0JrSy9wK3RXbktiVGMwMnkvOFJPRDRsYU5CSElPd2J0a1BDaHdFbFRYM3EvU3RkdWtyMDdVQ0RkVmoyZTVxeGJBQkZESmNoVW1UQzJzcGdmd2I0UDlkVVNTam9vMWdkT0JVM3k3czA2bjhyMXl3WnB5MVVaWXpoYU0vcTVmMlhhU3hidzU3MnhNTmYxTjVvZy84RGpmZGpJODRyTC96SFpCODdoWjhYR2hUVThCL2QvVzVoNjZXRzhmaVlJNndlWGtncTBvWVVWamYvMyt3V0MrRTgycXlnVWwxQTVnZmlKVVdKbldNaktTSmhiY05PcUNoSUhkQlB5K0l5UVNGdWkyclJWalQwYzFGcitxRGhjVW9wQXlGK3hBaEJITVRlSDhwak5XWCt2cDN6eWpmM3dqSFpCNGdXZnNURFpMM2pGN2pubmEwOTVrd203RThUTTQ2Q2JmNDJ2RVZDcUdWKzNieU9GeVpWQ0FiSHpDVjdUSyt3QmVscGx4ai9zNFZycGpNM0VsaTVnV3JnaklTMHhDTEh6QVl3NzNDbDdOK3FYbDhyOEJlbkpXbXprc09YSkRjbGEzeU9TOVZIcVNFTjhGSm9sdC9mMmJLM09QSGt2NEg1VVpEMFRidnloaXE2T1p6bk9XYzUweDZvbVF2WHJqaXg5czdyRXhNcDEvcG1tYmxEbnM3aHAxWi8zRkovbDNmbk4xcFJSUWVrUFB6YnVIQVFDRGp1dXV1eG94R0J6L3BvZUd1R3FhWW1ST1FlQXZwZ2h1ZngzOHBQSzlFV3Y3T3dWVTR6U2ZsQ0JJVGRuWitldS9KNWNNMU9LSWxteE0zanFKTjk1TCtpTEJjcVQ5bkJaaDZUYkdRVk8xTVdzNFNuai9RTGJlY0hHYmpJZUR3WWhRdjB3dEEydmo1UkJ3MTZoK1NBYUlSc3RQVHlqTlFPaEtrc3VXQWNGdjR4eGdocElEVHk5UGJQRXBPZ0FOK1FDK0ZvTEZpR1FPUlk0S21nb2ZiSFNydVluL0FOZ0FmWEgrcjJvdmViWmZicUFZeC96VXhaMGwxczdLY3pldVhRMzR4bnIxdDNBU0lBK0I0SXNqaWcvUGUrd2pGRVlMbWVFWDNUNndYY0RHcVBnVTc5M2sweUx4TnRCRGgyMFNhcUZDNHIrN2taVGhpY3N3QmV6QXAxOGMxYXpNRU5LQWF0QkRsZnJKRkZ4NzN0Y1owUHBSdjNKYUw0ckM0bU00Yi8zK1VtbkpwMTdUTFY3clM0V1ZQSUZRejFDaTQxVDVySzlDYkRIMmdrWUhJSnFtOExkWDhJcmFjNjlLTGpVME41ODBLUWtGdW1DUlIyZURsZWJnNk5ad29VaVh5ZUZzUG1lbVJiUkw0RlMvS3UwVWlxbzNqWjZvdTYvUDNyWUp0STZBVW5BTU1pRE9xRmIwQkFQaGViY3BZRGt3dENvL1BFdWo5Tng5SmZ4MHlteTVpWWlXRW1xb04xdjhDbm9yM0lOWGRIbVk2aVdCYzJGVDYxSzNRTzU3bnNKcnVQU3FsN3lJaUZYVStlYkxaNnJMa25TeFJ5SDZ3TEwrbGd3c0NLbGRhZ2dBVWRRYlREa3BXaXBubytiRDZ3Yy9XcXBGeGU2bUI3RTFabjBDY09NNDlneGh5azlMaVRuQ1Z5SDhKREgrYTJ3VzR5SzhaSHBuaDZ0Nmo1M3ljRFdtU0JTWmtBU280OXZ5UTFVQ2NMY1NBQUk2WTlVY1IyQVJ3b083VkNLNlhkYk9pV3I3REpKV1Y3SVVISTVpeEQ2MVpaVEdqNHFHZVh5S2ltZGIrL0NWY3ZqdlNEUGoyMVV2TmozLzBETm1ieFUyMnJxYnQ2blhUdFV6REZDWWVGMDdVZWUxUmtIQXhGcXFPOThRclFEcE93RFR2b1FWdXZDNnRpN1NEMExQVjIwN3ZxZDdKcnVOYWxKa3ZZMUJxRFRmekJReXNjaVU1U05WYVNucS9aU0UvRHVKaHJkTXpKNE13eG5tWnV6UEZXL3FBRm1zbG42bElZV3FKVHV3c0dZUm1pMStkVHpLMFpVcFh5Z3FrdGpreVM1QWY3M2hzNG9paE8ybG10bjMyeFo2RWxXUmZKOHByZW5EczVvRldMSFdlbTNsV1RtM2FhWE5wNGwzSE9ITi9rUTJWWkdEV3N4UWJ5eGhpeEZqYUE0c2YrclFGL2piOU5CSW5nQTN0QlZDUzZTeVVkVDhjTHNGeHB0VjhJSzFBMERxWEdqOFBuOHdHNkJJSkc1ZHhMRXh1SU84MUw5c1FMVkRzL2hoRmdVeE1BNEd6UTVuZWFXRGg4VW5HeWxoQUNpaWxmUG0zaHdaVUNndnpFVllkeXZ4dGw1cWhZY0VnVlM3WG1PUFFBVmN4ZzV4MHRDaVM5dGtmTVRiaHZxZXRSeVFRQVZQa3FjNGMvRjdCT0ROZU5jYkorZDlrTE5VSFM5cFZoa2xybHJXb3FYT0hZSHgrakErbXRkSU9KM0hEOG53QTdWbENUM2R2SlhFZnBLZE1hTUpuR092OHNxNHVzbmpOektkbmhRV1BycjU0eVdENkl0aUo0c0VrSVkxeHdtVmtkVnFOVWtMZW1YSXNUd0lPMitRZFpOYTJlNkVQL0dxSkhzS3JrMVVnS2tITVJBWllvbVhTTnBUejRsQ2ZpSXd0cUJXYWllaGVnV1I5TE9GaG9CL1FNU3FrS0VUNUxCS0ExYTZwWlRzOTNFT0VIUmNyZE96aGVUTkVSdUFpcUVlTTdXY1BtdnY0cytGRjZobzlwSFdRci9WbDF2TzUwcjhndHIyVnEvbXNxdkRjSXQ0c3o5M1MzaFVtM2R6WjdWSWJudFZadGpva2MvWVdyYi9uNFRoYWhoUHE4djJ2d2srVCs2eUhJUU92R0FpaEN2OGNBNGZuY2hXcjNTNGU0ZVhxb3NuSkNQWGtqYVFEdVZsZnp5dTNvbldpZVhFOUNUV0pWSGM5ckt0RnFNWWl6ekhtY2hMb2s3NlJyUEprRm92bUcvT1ZHZ2NLNmJkWlE0aFl3ZUZvenZ0MllDWXB3YjJCMVg2emh2M1dOMmI3dDhNS0ZGS2dzK2V0UG1MV09NR0hxRUI0dGx1cXVyb3V4dE4wV29pekF0TytOVmw4ZHI3VXlPekVQcVZHaWxjeDNEbWZPUHdkcFVUckplMmxXcmdIempmUmxDR2xNNGpPMHVxb0ttcktUMzdhMm5ob0ltWm9DN2NuVjdyNWVCLzkrL05IdXU4WEdGZE9TcFJFU2VkQm0xUTZweG9hN2E2dEV1Q29tRkJtdEMxQ1dXWExSOVBRcVBBS20rbGxnMXRHTXBYclozbkViTGp0MmF6b2owMWxEMTR2OXpSNEpHQTdtaTc0cCtVSFJEUEpzbEZvT3lDV0pDOVU0ejNGcGdWeUlZREFieEN1djZaQ3Q5a3Z1T0oxYVhVRU1DK1lhMjZlT0JEQTlCd3ZSNVMrUEhaZzFVVFNES3FldURSOUJzdFE5REJISnhFN0x5SHRRL2tzckpicVhhUnVFR2FFTUF5Y1I3UkVOVzAvYzVHMElYSCt2Vkc3T2dyc0hlT0hDZUtycURCaEhUVGQ1RUtoWUNFejZLZjE0WTNQYmJ5SDd5a1JTa1ljVUYxMTFOYWpxaDVQdkFMcnJ6ZW5tVm9pWUgwQzB0cTdHNk1tUU5qOTVOL28rckM1ZDA0eXZkREJYcTI2aERuYW1QOGhTbTRlOWRXUEo3OW9lU2psK1pOM005RGFWREk4dEFRLzk4WjVPeVNFTk1xcUlXdm9zdWYvTThSeG55NmZMQytuTENlOU1FTUlMc24yVzhScUo0RlhCSm1IdGJIWHVkUDk0THdQMHVhSTZhUzBzcnRRQ0EzUUNKeEdFcmk5NWRaZ2ovcjZveUZCbkJtS0RURlI3b1FQZHJyOWpWUEF6TzlzZCtmWmdCYzlidldRajJLRDN6TklNalEyVmhUa1JtRUY2djBqbU1aV1piZER1dVRBWnVPUU82bk43bHc4VHRqMExyVENDTEcrMGx1MGRlY0pNRnlBbHpIM2FBazFXOVVQbEI1eGNlcGV5VEhPakFnbDhtWkJDRlpnVXJTVG1WY0tTQ1lrWXI3SzFyZVVza1d0YXZvdlAzbGdTRTE2SGRHeGl6VzI3cThZLzNjTnRHUG1HK2E1RkJJdG91YnVQeC9yME01cVQyV2trNS92QlMvSTUyRkRHSmJ0RXBmZjN6VytWWkZDZ0VEMW9EZEhrTVVlOVFqVDZBWHEwNWJGbFhLRTlaM3AvZ1pYNlRBZ0FuM29aTDJsMFA1ckQxQmQ0YmR3U2VNQ3NXNFkwK3ZscVFwbi9aNS9XWjdoQWozRDM2RWMyUURnWENTdE1Gem11VHU5WnN5M2EvcC9PbVNFUDA2TG9ESVlNVHBnaTZxQ0hycXV5RnVxM3hOaWczRzZnRlUzZ0srTTlEUk1uWXRWNWh0b1JONTZEekRkVzM5OWUydThOelpBVFA5WjVaSEROOHFrZFY2b2FZWGJXYlZ1b0V6OE1CM01RWmUrSkVRa0JXdUNPUmZsMHlRb2ZCQzd6aHpDQ2VpUUN6d0VJM3JGUU5UYlBManB2MHBySm5QYVJyOG1vRUJMbHRVK2NtTUpxeXRMZGpSaUNKL3c0SWlBL1g5WHJzUDZxK0lrWm1HQVdMN0s0S01UdjJSbzR1bUZhODRaazhlb2IveUN5Qjl1dkdvazAxTW5qUTNLK1JETEFjNkd0Q0JISkl0Wnp1bFJJd0RXd1hOVXh4Vit4RkVrZllYNDVXY0ZuV0xzY3dxVVRlN2lEWitsQzNiRlZHWUxvYllXblZQc0RFNk1USVJtdTBwRHl5R2dkcEc3QmNNbnFBTTdLbEQ4TjdQeDZITFRlRjg4WHpGeEppcGthbHN4Qkl4bWg3OGxWRVRjdlp1TzEzaTNNZTFDVjh5MDZ3b2s2RENCaFpkS3JKREFEZUdtaUgxME9EYml0Q2M2bkxxZjZGYjNBSUhWK2Fvc2hsTnFOdzdubmJmVG4rVmprd0svSURzZlliY1lCd0hFR0pVNnpnWnVTQU11TmEzSTJuRDhuUEVrZ3o3UHgwS1E5d3NFdDNUZzFDbUpINmZLRUFuODhPSk16R1E1dkV3WkhwcHFWOFEycDA2UXBUNXR3eEFBZnZtL2ZxUkp3WjhDRmxta3dQTG9RSWFzdFNEUWZ6cU0wSjNWQ2Y1bWxNUFZyRmR4RDJwVWdDeVdJVVE5UGVuSzRHL29kczJydVl0N3Y1RmFuWUpsc1hLR0s0d3d1UDhqLzJxaGpiT0creW1sTVlLbmxyNmUvV0NrQTQ2SWVTcjZXZ204dE53Q1J6ckZINUZicHFudWE3N3plRU5FSExodGJHdThqUXBJREdrRUdMNlJOQUhvQ3VGcnpCY2REMHBTYmltM0JBUnp5VjBXNHdIRG9kdXZtNERsN3NEVGNnWTNUSjVLZEx2U28wRXBBbG12TDhteDNhK1hRYUhRRUZhaVJKdUlRVHpvZjdLTDU3dTIyQ2RoZ0xkcENzcDF3M2FtVmh1bm1wYndHUTg0ZVVBWXJZdWROK3NlMmV2aGxwZkVITXFTMXRWTWRuQnJCdFUwTjdxM2k0bEFHVkN3WHpUMG5EK0N4YU93bzlIUEwweHEyWVYrc2RoM3RoZE9WTkVyMjBUR081WEtzSDhjK1JDeHBTQ01QNkt3cTI1WklSYmVNZ0tDNDNpOU9kUVVaODdwNEg3d09SL1hhczBUWWp6RVRvNTg0SGoxaURHbDJnVkJJU0RwZHlGaUtrTzllMGw4bjJ4Z0s2N2g0UUVKemwvNDFjWExvQVNOSCtLMEduYVFaeVJhODFRY0ZJWXdTUTZoMkZLZHZxUHMwTE83dStpRjl3UkhaZldOVmVVWG50Qld1Q3JENzg0NUtxKzZYK01YKzFWL2Vic2NONWpYNjdCcWh5OG1lbEovVUJwK09vVG9xUVpxUXVVVlJ1b3pHTlAvT0hNbUhrSHkxK1R0dFhzWVhyWElvR2tSOXFVQk1NV1hjRDMxcmY5MGNNUTVlekRIZkxzM2RHc2JZZ0UweWxMdDdUYU10TmhRYktlUGRWMXl5Z1VHdDF5ZFBvaXZHSm9NSjhPTG9GZnZVWHBicCs4cFZoZEhhdHNZUkhQNWN0ZTJhZFN6RkhITVR4Q0pBejROR0ZjaE5RNGJpbUhDM0R6aVdLbytKbWpPMlIyZ043RTdSdEthWEhveVBLS3FScDhVVWhrMG9xNVM5N3BHWm0ycHRKeDVET29TYXlMTUNOTkZDWTc1UGNOSURWUnFaYlJQRjBvRnVTdm95T0ltZXRvOXRTVkZLQ2QwaCtiZDlSM2VkaUYxZUFiOXdtRXRRb1pYSW1qdlpsaVJ2NElIWGt1aFcvclpIRGRtVmdwMDViQVdMNW5DK2VwOFlldWprTmdac0JteUFVRTVlMFdBTGpVT2VxOXpSVlExeEM3WnJ4Z0c0RkRvWkU3cFhCNlVieUJJZ1BLSUU5dEpVQzlKbTFtQTIveFpkS2M4T3lxcTIxRWJFeEhPbDlYODdiM0IzdVI3Ni85UGtRZ2lpVGNxMFZISTNsWXlTbHNvMFdhcHJlZjllb0dDcFV6MTdGbFJNVkEyekhiUXJLNExjSXhjcjA3Q0ZEYUduMlBOMGFyVmFKck84N3FBSEN5OHhVK0ZhMC9Ld0pYQy9rbm1Sekd0c05nbWN2QWI3dytHL2M2ZTd6YTdKdDd2Q0xOUGVrRGZLNE8yS21hMm1hK3FwWmZ5d1ozcjViSW52WkEralFJNWxUSjNQQjY2SXl6M2VDaG8vM1NPU0pLOUVwOUxpQ202RzRETWF0N1NITFBxV1dPWXdvM3lGNzFETHNnbVhUQWd1SmFIeHV3THVOQll2WW1HTllMODY5clk4WnQyR1FwK291VHdaNVJuaklsWFBYYUVoc0p4b1N0eXgva3U2UERhcXAxbWVxZjNpR21GOFNOSzUwbUFrRk1JTnZYcGdtL2tlbjlJeTRvMVI4d3p1L21xZ0ltUWJOanY5alc2UTRIL0ZCOG9ZVjNkd2c3SGFoZzRqR2dUYzVOTEpSTEFlcWFwV20rcTRUUllaQWlPb3lDWjZ6djRnY1g3SW90MGxaTXBKdTRZamN3a1FEbkVKQ3paQnlXNGY3UElObDQ3SkM3MkZBQXk2RzNJQ3NBRFR6ZVJpZXhEb0R3RDlaYjd2bUdPOHVydWEzYXBldTVoL0ppeEM3akdSS25wUHpqMUdyVkp5QzM2L0dNOXhya3JQTGRVbFlwSFFrM2RveWpjbEthYXd2RGtGbEFCYTFyM1pxL1QxUnZKZGlNbk11V1V0eXdHWi9iMmRacVVySUJUUXJINU9Vd25BYlY1TXA4VUVjWXRYMDNqd3lLS2RMaUNhM1JqVTBMaGVDYW9PTHhES2FScVphMTZKTlBDSHFKZWloYS9jOERmbkxUT2VKVDJmWFdaSnl1dnJ5UUl1YW5tejRrMDd4VHY0eXJXYUtNSXNoaVkvclJ4clo4TTNTT3haay9jN0tWQ3l2SnNhbGszQ3dQd1BBdStWMHVRYk4vNmhqbXFwYThmWjc1RllJTmU3SDNZWnVWdDcwWTNXT20xTS9BM2J6OGlTcExRaFdxZFlRTUdlRkFnbTNNUkVxY1pCZVdLWlpWN3RIcWwwNFoxak12dTJwVkVCRXBkSjUxTXArWjFIYzJ0aklEZnd6YktxMXdQWnRiNjYzUEVKeWVFd1pubHlMT05MM1ZlYTdUTk82aFVpMnE0N3huR3BZUXM2cTAyWUUvenhGOXUxbEVrMzJYcDF0Uk1WTTh5UHFITG5uWDVNaHYyRjdnZmFVK0U5VnlscFlYbUJEYVo1ckhqQzROTVI1ZWE5VlBrTTZHQlJxemNVKzM1ZTlONGJJbG05dzRVYmxDZXhSSVdjdEEzVzNZcU9YU1NwaTMrOXhwNlJIdFBGNW00ZTB3cHIyUklMWlkrZERoalh3Q1Uwek5NM1ZXSVNKa1o3alRBejJyYWxkLzdKZFlnbUdubDk4KzY2UHRka1lOOG53d0FOUW8xbHZRL3JNMEkxUzBrdUJYV1krNjByTlZ5SUx6NGc2MWpZZG1yVTJtMmpEaG5Xa2FBZ3MrVTZ6N2FncEdtZHdBaGQyMHNMb2dLRTE5VythdnZrWm9mVENOYTVyV1RpY3p6WWdmZkdLejZYV2FGelpsRm9JNHVHRFE0bThFemZtaVprbnNVeTI4THpUazBEWDJqUnJ3dFZIdzdsZDQ2UVFNY3Q1RXpDa0JXR1EvOFRJeE1QSmZOOFVkMlRmd25HZjljYzVTa1FySlhxTjRURU5EZ0tmREtTZWVPN1BUWHhZWk5Fa2c0ZmpDWUovdXpmaGZkQ0VRdTdIaU16OG9FNE5mZWtGa09YNFd4cmljSXpIVWxDSmduL0VWY1JTUGxxRmVNSitQVzdSYjQ3SkRTSzJ5a3lnMGtjbFlWQXd5NzZkdW53S2Jrek5PK2hIUGV6dzBPRFFFWHl6eDVQdjZFRTBvWlRLUnEvMm5CeSszQzk5SldlS0M0eitWb3hscExtdm8wdE0yQWdJQ0FnSUNBZ1BQOFBwcTc3ZnNjdCsyN2Y0ZmNEL3YrNnAvWjFSOTl2MldmNy91SDkrM29pdnQ5TW0rMzA4cjZpWG0rMzZZYitIMmt1L2JmVjl2MmU5OW4ybTM3ZXFIdnQrMUd2cyszbDM3ZWsvOUQwOS80ZW94UG5XY1A3Zm9mL3pmckhOK25aLzdmc0Z2MmZZLy9WZExmKzM2MUMrbjlpTHYxYjMvdDlGQytyMFo3NTBiMDhOVXFxTERvMTNwK05RNzlIVm9OM0dxR1FBc1FRR0tMMnhaODFyeHhOUFlDOEhmY1NtTDZTYlFoZDBBd0pQeElqM1RPc0tmbzZQZFBtRkJhakIvTjdkdzRTKzZyd3dGc1lWZ1pvaE5mNVZ2WEdpcDBWKzRvcDN6T3hmYnQ1amFncjBENjFyQllOK01lUkFuNGN1UncxVG5uYkRoWWx4cllDRG9sajloV1NaTGYvSG9zcE5lcW9zY2FqTTFWNG9DVGwxK1pJc3NQb0tneHVKMmZIaVlaSWRnRmllRStyeUxFMmRsbFVZVkV0dWdkcXorTGozTmFpenllZnk5MTcxSHA4QjNDaEMxblhFRS95bE9ObFo5bWpzMXlOY2wrR0lDellBUDJ2cFVhdklrdSt5UjllbTQ1bTlVdXhZcXZTYStjNjFNNHA4N0VONFpDWnVSYkZtd0JUSWsydm5VSkVvQkMxQXFWYTZYVkFyMjRSTFFuVXI4Wllpd2x6aXNZQmg1aTZPK3R2ZEJNby9ROXh6WXcreGx1TDQrWC9pVEVUd3Z5WjVlbXA0cWNIcDlkcWlaaUhHU1lOZ2x0bDg4ZTA3NEIwY0tOcCtvOVM4dVFQNFpydzgzQm9SKy8velN0cHdTLzEyc3RmTDY5SDNZTm1EYTg4a1IweDA4VEFocTR1SFZJNFN1Tmh1Z1FZYkFSUXVkc2VHWnNHRTJyTkxoOFZXV3ZkOENOWTFhNktEejZ3N2pibFBQTmVzYmJXNXZaY0cvSkswMUlzSFdlVVN3Mng3ZkVmdEd0SzlIMEl1dVkvWVlTQnVHSnhCOE1QT21DRmFUUk5KY0d2UlpoVmdLZWJUZTRQY3FyOFIzdWoxUU5URDdtMjROM21FcEJaTHJ5WEM0UjI1WnZPWWk1d2tQVjVUcXJtRTZSSlBkNllEdHFZSmRkQzhYUG5ld2c2elkxbEpLRnpzaHVrditCUFNnRnZrVTdNL2FCZllhL3lHSVg4Y0F5ZEhFYnR3QitDd1FUQzFoajRVdUR5K2REKzZWb1FFVzQwb0FVZUh3S1dHTGxxZ0FQZkh3VGxrVHhuOGJvcWV5dzN3dDZpN2dFYUNSc0xNeTkyYWxBcUs3cm5uR0w2eTM3OFdzNnlFRmc2ZU9RaU5uTHplOHVqM3F1ZkI0MVlWNkU4ZWxaQVJxY1pxNitsNGtXTWlUcEtiaExFclV3L3EwZm9Sa01TQlRIbkhtVFYzbWs5bHFGQUdWQUxZcGY5LzdhbGprc1J6TTVEVDZUSUdEcisvVGRLeDRpVWFPYUF3VXlnMWZER1pXUnh5QVA1L3FENkVOZ1VFS0NXNlZiVnpVSm5OOVNidk4vQWtjNERoTWZnR1Jnb2xucnc1ZUp3SXZKcm1tZ2hKL3dpRG5LNXo3M2JtaHdQcmNmZWw1Vjh4QzUrVldneGYxK003c09kay93clF6d2ZjeDRINnRVV2gxa09BNHVVNS9odGhMYTdFQjUwNTVHZmdkaWhCb2FxUFpFbHBvbFFQaTRDdHlvT0tpVHBDRUJGYUlpbk1qOHpSaWRaZjlCK2hIcXdSTWhoeHA0cUUwRnRDR2hBQmxBSlBtWjZLYThkVXpMdGNlN2J1STAxWmw5bmxENkwyRXErR1crOXZtanpaK3laQWhnZmVPVnkwTk1JZ3RlQ3hsMTBFR1BQZWpWVXU1bHpqSXFPdGd0cFJvSzArWGlMeDZRbVZyOHhlNDdsTndIYk4wZ1JRYTNHR0I1MjllcjlLcHIxVzk3dVY1N1JqbFRvaXZYQ05pUUxWWFpOQXIwbkxoM3QyaDl3ZGpIQlJvU0lGelY2TFNjYmY3MWZOa296eFg1OGU3enE4eTBSa3ZQV0lCTkVOcE5DUjU1dXh5K0FNd2VwSEZJTHFvYks5RW5LWmh3a1k2K2xQeWZrYXVzWk82UTN0RmRqWmZ2QUZMbVhPMnpnNWpESDVaeEFuSXFRaWxaY1RSN3RsT2V4OXBodXJ0RVhyNDZuT0phdFE5NWZOVmVuM1BqOExMSG5ZZ2htL1dFL1BZZlF3WXE0ZEZTYjh6NlR3RTJ1N2o4bW5kZm9PL2ZmMmFzSjVTeFVCRjg1b2NRVkw5MVVVRG9lV0FFNTlXc0JORjZBSjJLNzU3eGdNMXdqWGlVemFiMGFaNzZRbG9PUVpSdWN0Y1QzcnpJbkM0N2J6aVNrN3VLWW5GRllselpSNXMxWThkQjc5U2F6Ui9sUy9raHFVbkY5WTkyL0pYQU9CTWpkZE5ndDZnRGVlNndoMVFFaWtmUUN1bEs0bzQvWWJkbSt3TDYxWUF2M2tzeklrZ0pvNVkvL0xZQU05NzdxSEd4NkI2UGFIWlIxLzZFZ1NjRDdOTmg3eEljcFo1dW1sUTZQOXNrakgxa29GRDhXNEpEZzErSWdCRUlYU1hBRXNkRjBtYWJFdW0xTGVJWlJRdEFibWgraFlCaG1lZ2pmcTBHbnNmWVp3NGxZUTU0b3htUHdZK0xKUHNkU2xBcFVZMG5ZaGRuT0sxSlEwRElha3htK3BmMlk0NFlHT2p6WXVvRFFIV0lWenFXWmhiSkRQd2JMREt3NjFKVllPQm9acFF3Q1VUdE9VbDc3K2p4aVlsNnhIck14WHAwU2dTcy8yNEVJb2FOVTlwVElBRDBhRVQremRGTEtRT1hKNXQxNTdTam5COURBL0tNYlJjWlVVYWRlWC9YZ0cwSEJKYlpuTGVWc0g1T25jencwc3FhNmxTVGg5aWFoYmJ4VkJCQ1YxVG4zNGk0bytsaXhTZWsybWIwc2RzUExiQVVrWlpKTDNZVEZtSE03Q2R3VVZEczlnbHF2dXhvamVKL0R5UkplOWw5MWN3N1BjTVlwK0t4UUhqb3cyWDJRWllKTjBScCt2NDJNOFphaW1Edkl0UktsR3E2RzZXYUZtcmpXRzhNWkh1aTdSVE5vRGNaU2dhWGpFVmJ0TFlxY1J5dkJobnd2a2E5NTdGTW5ucCtlZnBvVVROZU5WMnpFVXhnNmlEMHpRdG5jQ2x3NWlqWUlndE9YYytSVVNCbWxVOWl5ZEYycXROZW50VWFWQ1NrNDNpdzRFMG53bzdKQWtMSkkwVk5TU2NPeE40ZTh6VnVUUjdNZnduZXFMcWQzN0owNktNMGZUM0dYL3Q3T2JrNEVEOTNRdHNDK3A4NHFKelJXelZOVUhIcUh1Z2hZV0JMTXo0RGMvd0w0N3Q2Ukcxb05WWURSNXIxTndQTUdmNExOWm8vL0NSVWpGZVVCVVhUTXZZcTNPYlBkamUzRFFtcGVZOU45UFZFMHpUOStONHcxejNabFE0bnJXWHd1NDNyTU11VllRUkpwMUNZSXRaZFNzWVRiZmZ5UjZqR1VVMFhSZWxyYW81V2UzTTl1TCtzOGdwNS90U3hqR2l2OE5XOE9DSWliMjYwVzZjbjJpYUVCbUk3OXBEOVhtb3FyckM4TGFVeVdlZmYwSzZ2VUFMUFk5YzlXVlRoNVcwVGF3b01aTEVhaS9rTnI4WlBPalhBMEJiNGpUakR5NW1hOFF6OFVPR2F0R0Mxdlg0Q1krS25IS1d2WmFhb056MDNIaGxQL21jbmc4RWp5TjdERDB6YVJOY1lCTnZMOEs2eG9Wdm9jOFo2SG1GcExwR0FrUFlyTm1xTTcxa1dURUNqRG1nSVY2aVRnSWl3cGcyVkhyZEw1RlJ0My9QMGdpTlR4dDdwNzRPTGpYQ0ZjeWF3c1QyUDJCRkVxdkIxZGxUZ3pJVXdFUWpMUVhJT1NZMTEvUlRFcGJ4c3V5SGRDZ2xwZ1pYa3J0V0xKRGVUVnVpSmdpOFRodHNzZjRnc0xIMEV4dmQrbWRiZ0tiWjVyclc1UUo1c1BKNVZ0N25wYktFU09VditLQTFqODhaSjl1VUFsMHgzYndGVFMxekdyTE84c3ZqTFQ1VVZ2bmRrQkZLclFVc3RKbUhyRE1UdUpqdWpmRDhuTmZ0QUZYRWFJaDh3Y2JIQUNwWXdvMmQrdXBSRGtoSGFEcDczVlFxM3d1ZFpZQlNLNERCSUJGMks2ZXJnL2NGcjBXSFBDL0JlcGxldWNNTmloVm9nSWlKckYxd05zRDhVSGNmVzFqZEYxTjhDdXNiNzBDQ2pzYWcwaVZsQWRsYlJqa0wzWDhPWko4b3BxVDlJOFR1bUorL05CNmdVMjlUTS9RcHBMQ0tHNitnNUJIMDlIWE1mNnR3QXVOVUV2a1NrTk96d1k5UjVudjlCcURVa3RNZzErT1hHTjVROWFiQVhXNFJEaFcrdzdZVkxUTFUvT2FNY1Q0K1hwclZTcUx5cWJMNGtuWGlBbWRjdEE4YXIySHhuS01nUmtkUWNGSlAxZWFTWHhZNWhrVGZJSmtqcHJlOXMzazY0enhEU0RuVlRvSkRDTHNoZlZjclZIVE4xYnd2UFhLZTFYdmd5eXdFN0E2QVBGaWRDeDQ5am9QQk9ueXU2SVNycVcyUlhDbnFEWHhsWXJ4VlgrRURRa0xHdkQ0eVJaTVNlT3VvYjZCUStiSm9pTlppMlJ3T0tlNlJadWtCNVZqdm5zMk9nb1M3Rm9ITlp0bkFyOHRLZ0hQOHdHakFpRXJMeUc2U2JDZEd4RXlmbTN1NXhxdUZ1Y2JVRUxhTkZNdURNRmFnUVVqTWpnWTlBcXpLOHdPN21BSExxUm1uVkl3b2JzdU5QVGZCSjdOU3NkL3JRUkF5N3pLSjUvcHg2cHNHdlFWbGdlYkdFQUltOERPcVJaRVJaMnhFYXVhSEt4R1hja3NTN3hmb1g0TGhwZy9uQjZLUXZuOVpnV2VJN1V3N0xqeVNqR2VEYkRaMGtaV050UFdFNENUOUZ3ZEJHcStYL0VHZlRNZ0R4Ujdla3p3Wjl3anVpczFiYjhWSnRFWkMxR3psaU1oZWN1UzZDTm1xeVM1SEthTnU0VTNIa0t1dzgwQWZOMFJZNHR0Z0xpdFFyWGpPaGV0N0lUcTc1Q0VnOWFXNytvNVFxanJCcHdpbWplcU9Dcyt4cTdPWDlCMHRiZWxheTdsd1JJNjBueGovTHRiN3NvWFJvSEJwVGtuZE12R3JlNkphZmVRNk9WV2dhWVI1Y2Erb2pXUDYyOGFrb1FMa1JVejFXamI3akZESUxERzIvMWhVSGxmVkJScUlGaThSMHlqaFJsQW03bStPVW9qSVAxSnl0dlpsNGZCa3JrQ2NyU244MjJUaEZraXN2aHBiK2VFNXNhd3hwdWs5T1ozeWpGNDNKTWJhc3BNemUxeVc3Y1FubHIrTmZHN1FaQi9maVVhTHFPU3I2SFZhMXEvd3ZEQlNGbFVhbjAxc0FsWjdBRXZ1bng1d3RqZ2M3clZ3eXVGdTA5UXNIaG5vcHJuajEyL2tpMEVUSXBkWTNtNWxtQVo4aTVObUJqNnRGNUlXVTBjSENldUlBYXBCem5WNDFTOURzemVldE42VlhEeHdqODR6QUdJNUtSVzBremRCaFhGQmw1QzloNU5JNjAwRTdNTS9sSzl0RmxkQlVqMm8zUDJZd1JsRlhXQ3pyajAwdnFla0tEUEorZUFKYkRYcU9CWmRYMlFrM2VNWklaTVJJaHJOK2UyS2hDYXBaSEdVbW9DNmFnQzNrU3J3WGNTWENOSFF0eHNZb0loZTR0UWF5b3R2UnVYWTlrb3lZbTJCb1BodUVKY1pMZTl3S09BSi9uSjNweTBGczI1dnZldEF3SG04REV0VGxNYkN5cytnM1MrZVZwOEdPY0lGb1NGNGFCUjdzWXVoQVN4RzJPaTFDY0RhazE2Y1RLenI4OUUzZ3FmZ2R0bXk5MCsrTmxvaU1wbFIzd1pVc1lQOHN5N3Zoc1QzYlZZWkFKMzNKaVRUY0NMNzNuSmlzck1TdGc0U251ODZ4OEdIT3lzYjZWM0lCbmZsSW1uQzE0OFpYNGdDUGF0TmswT3BySjJCeldRQTVwS0NORktmcHA5djVuNytIV2FoZzNzV1ltZE5yalJVQmFlYVBZSktxRXhHVFZMSmRBenFDdFNuK0U3N1JXSWprVDN5UjhVNjcxNUpYS1I2cUZRRis4UUppNXhrMGs3Ny9hMkhqcTl5N1ZmN0FqbE9jOEZIb3ZUekJpNDhFcXFsQjYxditqRkZRZFkwNitjNCtoWVEzVDFCSWRRcUltaXZnV0hYWUZhbzRzMXk1cStRTUg3NFZ2N2EzYUg2emxrcmR2QzB6UDJXeUZGN1VsSSs4Y0huRDVIUmZLZ3Fra2hZT2hNNGl0ajJKQU1EZkgrOTBXUElRWHJUOXBpVlFCajlqZXFHQ1ltMVRvSlduNWhmcjJWN0YybVpkNFZqMUhxT3FPTFlsaDUxN25qWWFwRU1PTUYrenFqOE1QRHhqSUw3SDBLcUJNcldxVVhYaGM4SFRuSnp0Y1pua3RkZXV0aFNXZkg5ZkRITlc3RklXTTdodkxpOHY3THZBaWR2K2hmTFRTZGk0TnNzZDZ4RklBZEJ5c1dMQ0xub3R2NmZpYXVUL2lSVk9OU0FSTjlwNlRXR3BKcm9KYWsvamsvVHR4ODdmbmFBSXN2M3hYT3hrUXNmY3RBckk2aUtxSDg4Z28vcEJENEJoSEY5OFJlK1doZ3ZHVUR6OGo1a0ZiTTVaWTFPUktXUktOVWpYdnlkYjVMOWJMcGRaVTVjMzROS1NqeUYySnJCM254MVpCRXM5cnNoZzVsK3pFQkZpRE04MTQ5amY3TnppaDhxTndndkkzcVFiSkZMRDBlQ2tyZUsrV2t6QW5SMG40ZzVUcWhrQ0xTK2dmcjQ4Z1F6cG1sTGhqUzJ6Njd0SktKYTZmK1crSkIyODhyK2YrSFpWRGxzeUNtNkYrS25MOExWa2VvV1k1YXFJanFHeHVzbDIwWGdINHlCczljZFlpNldDNUdxSlFaVFRVZXBndy9MR3h3anE0VEZQMzVucE5TbkdtdVE4YkpyeFJkWjBmbEhMQU93djllK0pvSU1NOW1qWHdFTEtWQTdDZkJoTXJMM1hBYTQ0dkw3RklpS095VkF4SklJelpoOFVRZGtJTlRQSm5iRmFBUTl3cnk1T3pjRUdlQTErNyt0L2E1Q1dsL3FuRGFvMzZwR0FLc3R0aC9NdkNSWXVVUG5BcWlSbG5SalF4NFNnRytwVThEa0xFQldWMHEvdDRpV0d6K3haaTFvQjdPUlluZm4zSjR3bVh4aHdwczVVTnNuYStYb0phek42WDBKOGF5MUpZbFhiVXFmY3ZUcllrWWNULzFIZkZHaitKWlRNdzZwSE5pem1hTEtLN0NXNGltTXphN2xhTktKQkFIUmh0SkxCK1BkZWpXNmc5MnpzRlhJOWZzY0gvQkZuTDdkL3FNM0tzclBPNjQyZ0xpUU8rN3lTT2JNN09uNHU4VDRmWENEMUEvYVZzS2tSOU5SUkRMelpNRitsNTdOb2xnSlIvdEw0dlhLVTlmaVlGaWl6TjhQb3BkYnRNTzAvSTRYMUJqbHlRQUxPTjdCZmxGWlNZOWp6c0lBdE5jN1hNRk1idHNaM3ljeHFEYmdZUDdoamIxSW5vK0p1WTdZb1U1REhxREI2ZjJzbjhNeHFRYytyR3Z0Q3NqelBQd3I0bjN4dTJCd2tHS0MxMkhqc0tUa1NEREQ3TGRobDFzVGFRM3NTMDVINXExYTZJTDFEbjgxblNDTTk3V1NURS9UNkgremUzYXV0eUNIMmZkNVN0U2ZUSmJNV0ZmbjhkcmRhekZUQnUzWDlGeEozRGhrTElWeG1UZ1lpcUJLd3ZuVmRYSXdBSCtJbXBnK203ZEl6YVRYMDlSeVI4OXNhRERBYzkvV2kvYmJpbVMzTG1iaGxtV0pvU291WmhZTUgzZFlMTVNmRTByemtEZktuQXVGUDhMdVhUcWpVTVZYbUx0TzlKdEp6UHdLSDI4bXBTOVRmUy9lVHN5Y2RnRzVKUlBJaG9OMHg1WHJwZFh1cXczUVh2d3FSZTgwaVJET1BBSWxOTWx2MUZDd0dSV2xwaGRhdy9yK0ZzaEc5RE10dGVPRHJ3eHdkaXVZVWxUbldpbVYvQ2FIVEpiblFCYWJKMEJUSUZuY0l0bHppL2E3Qm4reDJmRnZ1bnZWTTUrcXJTbUNvNzRVZnAvTVhOdXVmYytsbHR6TFdOZFhqUlZkdnRwUkN5K2xEdTlZV1JQOXJ4T3I1YXMzekgrd0kxWEtiWXdjckEvODI4R3kvL1BqaUF5Z1JQZjhzTEZmVGV2UUNJN2hJaEhwWW41R1dudWR1VzZMek9DNGQwNk9uMVlVVUZVM0hyOVNOM0tHMTdvaDVNclZ4N2lkQkcwWGZLcXZzc3ZkY0g0UDVZQW52YUluS1lOb0luRTUxK3Jia3NBZDBOUllvcnNYZ1JGQ1ZYT1FiajFKczlhTkxQVXFTOGkwY0ZVUGt5blRZR2Evbk9vRzlCZDB5em82Tnora3NCb3UxMHdKYUlmQUlyN0w4cjROaXpZanRxdWhPcHFMWWlkUlR0c1hBUUNkT2NqK2tCVVFsQWI2Tk90bHd2Y2RmL0JXSmlzRmZmdVNjVFdmbUgwMlF6WXJWNkgvZG9OOFpleHN1YzVYYVJXSnZYZDd2UzluQkl1RWRZbThtQkw2TUpOVnduZE8zV3dPekhOUmlPa2cvbUNOOXVveDFETFo5OTIxeUlPUWZiZTBOYVJidVRnd2ZjcFFPSlpHbnVOSjNuVDVCbzh3MG5CVXBOMGthM1NwcGZDWGNVOWZHT3FvanlqRTVTZWJENVN5UDRQenprTGtkaUxjTGx4eVhKbURtSVN0VGxuZkcrV2lYYzZINThSaFlqckc3V2U4U0lPRGZwSWsrZS9Mbkh3SW5DYjYvUVJkWmJYUmw4eG8yTjFlQVJaekpoVUplMWJYSjY3OXF3SGhpSGJjbmZqU3pLVkRsenVSaDVaZXVyOTBWT1lLcDF0bTZsdlA2QWdyMWtOK1hvSXV4aWdENlVnaTJzL0FDbG96Szc1Vk5ESjNEdDlEUFlqRE1ndnJyaEN2VlFXUXdHUGd3dC82L0pGdHdjbnI4VDJVOWhFVC9HMzFLQThHLzhkeVZ0VlZWNE9JL0hQbVV0aGpPTHM0VktYTldPNTFCUzJSV2VkTEd1cVU4S1lSWmFTaWc1TmpqWWtudE9TcDF0TkhaOU5SV3dJajBjNmtPL0p2ZW9HMXNhUlJ1RWE1Y1ljSUUzQWhsZWNxcElRR3dkWUw4SXVHd1Z1Y0xNUXVqbmMwY0hGUHE3dVRMTmUxRlh3VGhuTUg1VGFRdWpVTXhGYzc2OTdkS1ZFbUJQM1J3QlQ0WHJ3U25vajcrMUdjcWJ4VjU3dkN5cTl3cWNtRlZpdGsrUWtXZDhlSUhoTk5XQnRQeWYvTGdSek8yWjVKYi9uTjBDUEI2aGtHanBXamRQWndNTEFZQ2lQTExzSTIvcFZIRUdJcldqdzdtbGtBY3hhSTZ1VTFCWml2dUQ3a0NKRnJKWkMyWDZaR2RKM0htUk15SmhEN3dkVDVVdHpJVHBmYUFqcmc0ZEtPRnhuVHJMZnRvRFFBUjdjTUEwemdJdDZIVWNXcXZQd0pPbUY5d3FYVkZCcVhtd01pOFE3Tm54NVNIQnZJbFVtOW9WZm1LQTJMNXFEZis3RXYvZWthTEordnhaV1BtcHRZTXMxNWhHUkxlenloRmJXQU9ocENGTXlJYU5LOFBRQkNadjErQnYxVERhWFBmM0tkY1gxell2eXE4eDFhTUo0VXpIZGZZWFZaei95WXR3NG4zeC82MDNvaTAyeWRQMjdPODlRT3ZJWlY4TUJVQ01jczNxVTN5NTY5ZUsyU0djN202M1lIa04rTWxoeXR2ZGVSL0QvdUVxZnIwaGl2Y0NYMXdLaEVJR1NaWTMza1MrMC8yTWxqSnpObDZpeXJKMjEvZmtHdEZyZHZKckYrbm80ekU4U3plTzhXK2VIYzZmK0dmaWhGcU9DYStoekV6eENRbjlDMDZzNnFyMDJ3NCs3ZlkwVzBwVDBHTFVyeDdYZ3FCK2h2SG92dU5adC93U3lyUnRZSlA0S0VMV2ErUkJWTitEWWdaeHJLWEJidm5LV3VlcnFaSHpiRVUyVlNXQXN5N0xCSllCcTN5UElXSGZ0QzNRYnNQZmJqMlhzQ0YrbjMrQ282S0ZvMGJJY3NDaC9RLzRlUlUwb0pJMG1CVys2alR0SWR4STBTUnR6VkxaZEdwaXYyM3JyNTNXQUlhNUpIcFBtMmxLRWx6dTZaVlBuMHc0NHNPeDVBQXZQaWdKZ3AzN085N1RkOEZSY093T3F2WmZ5WG5vd0hKcWpFR3dyU0RVQWVkeVA1ZmFwZGEvb1drVEJJbWVIRFhlUy9DbFpFbzBSZVFYS25FbEdLVlZkTXdxTnlybVY5eFFaczJkZ1FtNlpoOWRwN0tmNWZWTmJUUEViY1lsaFdhVjNFWWE1TkxFbm5nbmdBb1U3eTZxbEszQ2lSZnpCdm0xZmpVQzRhb25XSHFyUDFDbVZTSEg5eUpVK1NQYXc5QVdPTDY2YUd0bkdqbEgyNVVnQjVpQnN3cnZhblROYlFLVU53UUdlQWcxWTZvREh5Mk1VZUJaN3ByY3NKYkZqVHBlQzNrSDVTeTQ4cjRjZk5XNHpNWkxEN0UwWEgwTmNxNGFjLzBCN2hyRFZOTzVvME5iYVd5RFhMVjczQ1hkNG5rRlhhZmtRb2FLWEIrOHVkckpHTkg0SDcyL1YwL29oVnBvb3pnM3lCWGhvRlE1dXA5WXVqWExHdHpZZkw4dWt1bFZERHJrOGVaQzFZRTJha0d6czdzYmNzMEQ4OWFCWXRYYjlPOVJtSW91bDJTajRaWTMrM0FHcVg3ZlpTczdnY0NNVjdnSE9YRGJaMjNFS21Namw1N1VqRmNSQTg4NncxZk1ZMGlBNkI2aWF0U0JmOFl4SlFWaWh4QWFsVDg0ZXhHSVROK1ZLdGUyOFB6VVRVRURPbmZZME5jN1RWWlFpVjlpemdNcHk5bmgzYURET0pFb0VyM08yRXgwRGVhVFMrdW40RW1sdVFVWk9tNTZjbG1ZM0NHeWU1ck43V3pLNXRKZHAxMm80RjMrQU96bCs2VVh4VFZHdjdOenllSmxPRkVrY0ovQTVFSXpWYnJNN3Z1SFk2L0J5WUFjcWpSWk1vcnJLNEcxOXRyQmRUTUczbnNrbWZUUnpGRmRrMCtkbDNEektLU1pyZzhQNXVHdVZJQVp4cVl2YmgwdXpUUm9GVmNVSTFzbVZId0s0VTFwSDAzK01YZWoyNitNZXRTcFQwOUZFYWgrZUJNUXdYbVVSU3l5dHJMN3RGdHFLTmQrTDVBa3cyQUN1NGVDT0Mrb0pseFVWMnlYZEdaZ1N2Qi9VaXJ2azhta1pQejhUTXJHcFBpbG5NRUxDZk9lSmdSUTBXQ2R6enFRbmViMXZwWW56UWxQaHYxa0ZXbUdsKzY1Nkp5MmlackxTVHdCZnI4Zks5eFc3QWRMY0dIS3RIVzh5YWVuc2RSQ3QzNm9vTlNwMFNzUEdLZDZaVDVNaXFkeDczVXpKMFBRNGVMNFQ4UEFZSjdhb1h5WjFxdkJZMk83eENka3VQYjNxdW9nMUNWL21oV3V5bW5Lc05FZmVJelFqeSt2c0psRlQ5STFRRlRZK0pza3dVVDJKaUMyVTN2d1RPSHgxMWN4dDd0akhIcnZydEFaYlVWa0F6eUxybWJOS0ExcjFPM3pGMWlzWWxJTEF4THdkMjZzL1h0ZllVSDMyVjNqNUY5QmR1c0ZtV3RlY0RQU2VUS3AzL1dTRnZXZUN3NU9iZEoydU5IZXJ4NllRYll3Ty9XYTd6WHFHS1Y2VGNnRisxbXhtTDJ5S2FjbTBES1pBaGpyc0dBZ2ErV3BpZGV4aGRzd2hBbys0dDlPKzFGcy9qZ2Q3b0xmUFgyVjQvNWY5MXhWbnVSYWlzaFAvTklUclo1TndTMVdWNGp3OEdmMXRndFhPQVR5VlhtVWxEeUxDRFZlbTRDelZ5SkdwUDNxRE9CY3h0N0lFQTM3ZW9GeUZKSTZqNHBVMGZtQVZ1WTVwaEhUNTJQcVNyQTdoUEZjY00zeHpCdFN2NzUrU0dRMUdBbUh0TFlSZEtIdUJHY3dlWGpXOXlDeU5sWHo1Y01pdWdETnhDN3FrVk51d21JbzN1WUtYUi8rSkhVUkZOVk1YU1BrNHZYWmE3bFZkQWwreDV2VElVenpXQ2FTYjNIWXhLdG8vbzJvM3NDQW83OGZyVDB5KzUxb1NjQmF2NTk3NjdDcVJyaTNZT0Z2U2hMcHJGOGpoMEF0aE1STXl5cUZHVE45amQ3Y21RTUVtSGxwMEtHQzk5OU9ydW1JY2tuL1NWWGFJU0liQlRiZ2pxdUdVZnhWT2hqbTZ5bno4dlI2cHRMdFowMy80TndlYmVreDk4cVhkSWlIL09udEdySXBuK0Evcmw4cEdkSHkxTGtGQitWSlhnYUk4N3hVU29od3lhUUU2b3I2OGhzd3RoMWd6VHo1aVM5d1MwM0NiQ3NwTkViSHpWSmtMeG1ia1U4SHdETUJRSDRKU2NBbTlmamFBbXh2QXpGTThBb1dScStPV1drM2FrNnhGTWlONGluVVl1OTJ3ZU1EaHg4akRZb1didUZoR3lKeHdCUE9QdnNJQWRROHZ1NHVYclB1bUpxcUxRZmtobEtKc3UrTDh4Q0tVQ1NtUFhqZkIzRkpTclRzMzFTdWV6bGFlVXRiNmF4Uy96L1lmTElsRW5UN0lTWVc4Zm9MRmJOVnYxZnVLZkEzQjh4bTM2ZXJUMG5pb3NxWFZ4SG5nUUowZzBhWk4wYkloeEZmUTB2VTN2TjJuRWtXRGsvMVdRZU8vTkI2aFQ2RFpiS3Zybmllak53Vi9xMDRrSlhlNWZjVGpZK3ViMzRuQ2FyYXVPQ1dDMmN0SUt2MFFuV3RKdWt5S1ZvYmtkT1lwMWZpM0NVN2wydHY0bDFZYTVRVlB1a0tPTnhnNVVxbklOT0poZDlsSWJlVktYOVp2TDdWczBRVk9FdXFCZ0ZMNWptNG50QURNRTBxVlBxb25ETm5pVlRMM3RrRC84SE9hM2VMRFJyUW5wNldnaUNNb0RsYU5uTW14dkFJMjJtNFc0TVd1cEljTEJpK3o2eEZWajJqRDJzaGttQS9aZDJsbEdZemg0WGpKck5vQkFHY2psa2lmRXdOQmtCM0lLVXJPbUVaOUk1REZ5SWVkb1RuSHhUK0tqdVNNaXduam5ReFllekRueE9BSStSdEZldU1PYW5VZDdOMDBEbFg3d3BJMnBDYVhyeG9mUHpPZHh1QXNIcjM4aGNObHhwTXk2L1NuL3BvenZiaHA2NXR5YTFTMGNuMXdGWjdmNjFDNE93bi8zb1p0VE8yQnNUTkR4dzY0WUtqbTJNN1pBRkRvbFdpQmRmanlHSnZjaGkxM2RQUmh4Z1haYWthYTNxQjgzYnJDS2hCNit3K0VkKzNFbkxXU0loVG5DT3NwcmVJSWJYYXpJY2NPaUp0U3pzaENGT1EwQ3FhTXJHeUYrQWV6TythbWVSc2g0UDF2OHZrOFBWVjNtcFJVNmJjcE1EMlhvZ2JFSklQamphbUQ0ZTJuZkd6NStvTWYwL2REb0ZIZEZuKzE1SzdjVG5sOXZKOTN6cTVUaG00aG1NakZpMFBmUnJjNjR2SWFOWnlSa0p6VGxMMW5DWlJkUkl0aWcyTVA4Y2hzSnM4dXVDODdXSnZ3SXlSWDZ3TlhJakhhdlBzeDZ5Yk96cTVUblduWHo1akpaK0VYa00waE1ReVdKclROZWcwSFJuQ2wxeldBNkEzZHZvMTBWUWJRMGlQYUpwaU51OVozb0RPMHd5MnVZdURncERmUjQxM0MrbWpZVWJLY2NhakVVQ0NPazZRaisrZ1VSTHRZb0N3MC9mQzJiYVg4bHRWbTF4ZnBVeVF2Y2hHcjhmc1dxYUs4eFdtbC9hbytDaTZuSlJtcGxxaSt1czhVRnhLbzlRbDBrSmdEcWt4RDhxbzFlNVRDQStNcExQV25GUUxESFJpbCsvaVNuTUZBRGVvWE9VdGYzUGFMQVVhT1lOdUdXVUhjQ3FqQU5yWkRyRCtLRHRRQW9uNFpRRFlrUTFBd0VGRk9oWTR5aXcwci92Uk1qRVBlTlMrS3RXay9wdkVRQ1VEc0dIT1Zoc3djdFcxdTU5UTd3bDd0ZHAwa2NNa0RhQ1dkZ0xKWDN0L3JCcG1VTElFeDlPaFRTYkd0Z1E2cjFKRzdoQXVvcGNRdExFRGhJZmxBU2luMklOTUxHUkh6b0xwV01qWFAydXNMdjNMSy9Xb211RFd4RWp6eGgrS1doZmVaVVYwR2ZOY21RZHZrQTc0b0NzQ2ZmQStjbTJuS1V3ME1uWEMxY0ptYlBncFhwbkR2dXRBeERwU0JHV0NCT2NScllsOVNkK25HWWZvSU9zT3Q5dUk3MkFWMG9nNVl2MnJUTVNMUUdXSWFxblMyQTZYWGpSU0tweFkxWDZWU2twVnZ2L1NBWmVIUXVCMTRvREE4Snl6VjVYTU9NUFVxZ0N1Q1lveDVEb2tIL1RUeEJiaGJrSmk2ekNsNmZvb3FETnFoQmNreVNvbWVRVE5OVjlxR2hrOUVVUXd6L1VGODZ4OW1Pd3c1dzhEYnBzeUpremVhVlhKUmRndW1sVFNLbGxwcXJObHZrSGMzZUtpWmVlNXNnMHp2YnA5a0VYUlpLVjExdzZvY0NNVGJlM1RQWExUN1FpSUtXZnZUWTU3Vnp3WC9GMEs4WlUxaW5JcDNodW5WQ3dZdlUzSzBZaERpZC9qS2xRM3BocXR2aTRpUHNERUlsZFNkQTNWSWxiMURCbDZSRW5PNHEzZFhRanRDUm42eUNhL1JjQkxTeXQ3T0gvRXpwZktzTkdsWTNuUGpqN1MyMFdHajFEV3hTRk9oNWJtS2t0ME5oY0Z0SnQ4TFJtS0RJNUhkYlZ6Q2VqYzRDL1hMUk5ZbGlJc3hKZEkvWXkydVE1cDlpa21KcFFhQ2o3bkxnUGFraFlXSEZGYnVyYWVVWlc0Uk4rcHVOM3hJSTZRMjJtdk1SNi9mRG1ReVBYNWh1WGdYYXhJWHdtaTRpbjNzUkEySXZzNlpyQ1QyOEljbDhYcnFHaC9MdjF1OFZsWWpORmxBZnRQbW5MNlNGNFNWSmp5cHpYMkR4SldvVzV5QThrUWVIVFVab3VINXR4aDFRYmV4VWpuaXI4YkJLZGlubkNWZ0VNbEpKaURRc1ZJZ3pIdkhZSG9nc0kvREZJTkc4VWthWFFXMG9nTVdTRkRFQVp2cFBKQVRTSTVXUFAwa0V4R1NwTzVJalVGdEszZEY4dnI5cHRUa3NkVnlHOG11dzd0TWUvM1BvZkFvRmJhMjExMnlyVC9xR0JQcnZaMDhDSU9OMW1DeHU2b3lKQzFucXRlcVcwSlg5c1R1RVl3R1NqQU5PT01XcEl5QmQ1eklDb3FFU2Z6WDk4bE1EUWlzaFlGRXllQ2VkNDIwRmsyVFpWUnhvdXlncWlrTHhPUEdKSHFlL0xjVlc0ZVhVbnJVUnVhN21mU0QzUVBhK0EzWlIwU2lzTEZGdzRObmlPTFBVTkRHSEcrWUk3VGZlc09Pbk5tcDFDd1pkeHpVM2RvYmlOcUl4Ny95VkEyTUJXZTN1VnZ5MXZqL2MrajVpdkxaVU5EQXBKN1RmcUFzT1phVWZOa2FGbGp0dFhvVkxNTWdRYnpJMHUySGUwaE9aUTRXMXFWa0ZWejBxeVRqbXNXUlVwSDBYZnZuODVPSEhWVmZlWmdTRm5PSDVGbit6dlZkYjF2ZzdublM1ZERWZlliWjhybXljUmlHczhzSEFxRzI0Zm1qRGxiMlVSZVdRN0Fna2RaeE5GZ3hUYnRmZ0YzdXkwUVdHSEVuWEtGQ3hsOFRhTEthTHJtYzUxWHFiS291c3lnK2E5dVozL2RPaEdJbFRyS0llSWJWT0l1aUpZd0w4N243MjM4cXh4VWhLTE5NRncxWVBPclZKcGx6YkFDTHdMSkN4RWRjb3hTY25FVjlCWFVCKzYxcHFIaTB6TTc1U1pHNVZ1YlpLWWlVR1RvbkI0SGtnbFA3VFd4aVVWRm1ySnJBalNYaXN4a3BJZUxDaUc3a05ua0ozY0dRR2JudHZ4MVlKZy9VYTZrRkJqQmJlcVdoOGJWMmFSaXBrMWFpditFK2FjMnRxK0t4ZGw1dnU3L3hOWWFwM00yc1dJZk9xRFBjaEF3NzNuSlJORzV2aVZoWExTZE5ZWUJ2UFg2Zm01N3BiUjIxbWtxMWRaMXNLZk5xYnRyT0ZjQjgvaDExSDFNdWFaTzdLR0ljM0xwajRQV2pZQWdLRTVCTHo1SmVvVUtxYVYvcExyUWdPc3lYT1QvTzV1dkMwT1VHcEdROHV3V21FNVZrQndwOFRqclJKL1VCMEd5alhXd1Z4UDcvc3NwYWl5NzA4SnZJQ0dVMFN1M202R0FPU1RxZVJabVptVUI0WjFTdFplR1Z5UzZCN2F2enhKRWhESHBrZVNEb05VNGhBTmcxcE9EUmEwdDB5c3c2TE5nVHUvWjhDU2dna0dpeHlEOW5kMzlRVkdFRHE5bWNQZ2RsMkpSOFlwbDU3ZGR0NWphYnphVHhsUWRNTVdiWUR0cWd4YmV2SStubkp0Um0yLzBPeFplSFptMk1QN3FYL29iOVRKNDA3OXZjQ0RBNUpLblNRQzBlcDdpcG9BUFNCb1dzMWxYRFZ2MkluYnJHbnpJeU5lSmd5OGlVRk1yUjZINnpBMzhMNGYzMytxSjFqb0JHdFRNRlVHcGdXaHI3ejN0Lzc1bDhIbXE1bzdkMGpMNDhyc3dDL2dvaXhhbEdsN1Y2NzZSdG15NUZQeittdy9PRXpIN1FIUkU1K0J3Q3dWVVk5TlZxVEFGcXk0cWlmVFZIdEJGSUliZUtHeDJEMmQwSFlZNmdPb1NrdUE4cmJoLzA1UnVOaXU0Nm9talNwYVZQVUM1VXZPMTBLUGpZL0JxcU91UDRTbVhEVXlkVVFDV3h5KzZyTEFsdUhxWVdaSnIvREY3aEN2Skx2N3JpKytnNzUwdEJXUjZKMEs2YURNd3o4T2g3V2hGNmIrQjlvdHBOME5vQ2h2Mk5lVEpVbXlhbGFqVDRqS3Ayc3V5SXRRMmNORXhJYUk5cGRLMW81aXo4SmFWN09hK1ZyR1FZNzdYdlU2cTdySkJ2ZktNL1p3Q1RvVXJPQ25IL215c1BNYmJ5eHdXTXhscUJuOCtQcmlCMkFZYkpxVmRPV0hHcy9NZURmMHY1VWwvVXhDQy9JRTB1bkllNkk3UklOM05WUmtiUFpGODNrK2oyanRxUkU1M3dQQ21NdFljbzczM01vVWh6UktwV01wYVVPcFIrUXZqRk9hM3M5bDhnZ2pBYTQ3alU1ZnZRbWUrMHNBKzVIN0dOamdpYkNzazZIQVVaTmhIQUZPdkdDaTlPeUNHWHA5R0J2cTRYdENJZDVuQjRwVDZFZlFmY1VIQXRjaENVUkpYcnRXWjdpcWp6ZnkwNWtPbkJMb1ZCbUxGOXJnVXRoWjU0VWcvSTBmaFJCekQ0dUNIczdxOFlmaXlVNjBvOXB4RFdVR0hOZkREcGxydHNhNk5nZlpGMkQ1RWhJb28wcWNJaUJScVFxRUhEdTZjbUE1MFpKcEZuVml3TFVSTUxxQWF6VStua1Zya3BGUUJFYzVIN0NrVVRWMlZOTXFHYlpReEVpOGlDRS93RDhZQUhUelZIRGlhQUJzYlg3YnFZdEFyYTQ4Nmo4bGlKT0Jlc015MnpOdE1MNUZXWWcrei9DVmNUakVKaU9DS0d6cTAzdzRKeXBCY1UxZ1IzNlQ1NUFmUzNic25hdmhIUFVyY29ZRGxFSks0QXkzSGFkYUdwWmlyVHJFYlFiU2krQlczQjhjUE04TWtONmhsQVVXWmp1MkdjNFc2cHpKLzFKK1dReUM3K3JSSkpRRXVLZ3MvUlRlQXZGbjZwbzFFcGN5TDVzUm1SMzRNUlZZL3o2bjZraWxUZlhqeTlwMDR1UDlVMldmVVJTMEg2Tk1wK0Fqa09GdUEvVlhHeGJrUmh1TFdrdjZyUGR5dXg3R0RwMnJ2bHpleFNJTHRIclN3R05LQ1lNc1I2QnV5aithNnd2L0wxQktVZjlsT1VNOXdGY1JsKzg4UUNRaFRTRGhndHBxdlFZaVczbmJlMmhyb1lDaHpGL3Z1Y0JJOHEyMzNuQ085T0FHbUJqclFPZ3VzbmdYY2JycXA2SGp1N2daQjRybzd2UlU2eHdWd29NUk5JWWx2a2UvaWZ6cTFKZlEwa3hLSTdXblJVVjFnejNoZkFORG1oblpDdGRUK3luTHIyRTBwbUtRcllGR0tHU3ZQNExFbkdUY05VbndvaDFOSUgzbXJKN1RRb1kzbHhBZFVNbHhaaEFFR1FIZVRrbE12dTBrd01wM3pjOHRmazVHdXgxN0ZacFZhL2thWlZzTGo1b2JrWHpMWk5Dcmg5YmNKNnhpeEk0cTgzdUgvbDFJaU95YzFhWFFyQlFWWTlmOXdWWk9wTnpqbWNXeVdZRXN3bG9ZNHV1ZmlkOUEvUFppbTBYcFRvY1JibVJLTWlKcjdYb3pjNlZZNjRQMnpOK3JRSndkc0NhRlZHRGpOVVNsenh3WjhlVDU3MVplN2RFZXRGTHR5TXNwM2s2YUZqMFlSYWI4NXlseGVGNUVTQmtqQ3VIRTZJZmo0dlBGSWNOT0phWWZqbkNkSWtMcWNndjN4azJEcmlpMTk4L3pmV1FyakJid0NpZUl6dHFWUFdDRTdsamV5OEFoSVZVN292cnZkakVZNGYwVVVtOWdPSjg5K044VXhJWWZpRXdiZFJLVUlyMXQySENGQ2o1SEZHY1BocXppZnV5U1pjZ2JhWC9ldis3TUpiSS9ZQ1hGUEFubGxSaUJ1U0trWVk2Tk5SQ2t2a282SE04QU41OUl0V0FTckxVSjFVYU9ZM0N1R1pzc0g4WFI3M2xBL0k0dnJISFJab2p4ZlR4ZXFKc1RHMGYxYlpkNUlzbzNyVElQMjlLbmNJYUNPTEduVzJYaXA5Vzl2QktoRm56am1jOTEwdGxUN3YwOXFHZ0kvR3hNMWRwUzJxSkVyS3VUbzV1dXBoeU9jTXpSbVBVVXRKbEI2VTVPRWtOK0dJQmlCeVBJVzQ2ZTNmVjl5T0RRMVZyVmtxRnFaQlpwWXd4eTlKQ0hQWGgrZmhoaE5TV2lZWnQ1YXVUT0FFUHBvanYrc09YS3VQOTF5b3gxT0pRTzBUNmJKTGhVY1pOZWYxUHA4MG10K3c1K0EyVWZvcm9XVGowbWJkaVB0OWFsSGtiT2hENGhOM3BOQ0o4WEFyUlM2S0ZKUzArR1ArNXdVaTBVL0p1WEtybGdhaWFjUklOMFJzaFo3S1U0TS9MZTNZYjRrT1pDdVFkd1hxRGh1emNpVkFDYUpYOUdlSVNubWRySVcyOVN2SHgvdTBML04vWXI1UEI4UkVYZjR4Tk5hUUx4UW0ra2lvWUVYdlZkRis3cW9pNThvcjc5TXZaS01aYmdEMk5NYmUrdXVEVlc5V3BYRTcrVWFlWWlIV2dLdW91QXhSY0ZxMFJZdVJWcGVsVEJxUFJoeCtidnFTZ0syMUFZeTRRcExDR1R2YTRUakhiYVFUUndFS2JFb1lEMjdiUU45MWcvNGl4d3FwZW9YM0F1V2NtbEFFUnBwcDcrU2hxVXRDRUlTbTREdEtNV1NMQUZDcDJmM3A3UlU4MGVrWXhSREhyc01DQlBGQWVyWmJiUnZtdnNkenZpbVF4cFcwc0RENGR2WkZzeXQyREJmbXlpVURRV0Eyam1xaG9pVU52MU15dVQ3T281VG1SaUtJZVl0RGF6c1gwUHBRK0hmYW5FY1B4eURoQ3pqaW44Q0p1dE12cHF2OWl3QVBHUmNaVXVZTHhheFRZVmZ2ZlBlNW9mdDkvNFZSbWM0MnV2RGVZYitrNjg0UXljWG4yMlo5MjBoQmw0SHFyUXA5NWpYaXJoYWxiRk14TVA5WHE5bXd0WndVTVpCdkpGTWZlMnhpUDQrMk5ReGFYcGl2ZWRHMzhSTVdUVHRZWHpFN0c2UlBjNWc0RU52N1VYbnExNjZDdll4L05ZcDBzdTNubDZzQ3ZsRTJXU3V4TVcweXhIMzlaMU5RUlZFNzdEcDI3U1VRRWo1c3FWVGpzeklBTmpROXVDN2VXQ2RGUHErdVZ5YTRjSWdRS2FyNFovRS9NSkhlTU5HR0xpUWNiNk5jdkwyNmZXTVJDZWo3UzN2WllRdk1FTHQxTHhXMytTWHZRZHpXWUE1TVBiNHgyU1EzV0tlRW4zdmxSazFXUEQ3bUltNFhrcjRrbnh5ZURyNGZIY3ZVNnZRZGsvbzIzSnFzcXFlRWRucjhGVFUxMXh2bFZGMFFJOUx1TG1pbVNDWkpvQ0xtaWFVK0YxdmoveUFNOE9ncENCTDZPT2hMa1NlZ1V0Q2ErbXk5Z2wrVnorOVBmd3lZb2diRVdSbEtlVC9QMjN1Qk5sOWxmNTV5MXVVc3JlOEFxQVdCai9KNmtzWnJVeWxWSGVnTndHbXlmbzNJZlBmdTBnQzE4cnptdVUrck9LbWJ4ZXVnYWNRNHIzb2hxdmVQOU9pT1JHQWlmMWVlWjdFeFZ4T0NjU0VWUmRWSW02WnJtY3V6d1l3TWp6dXZlY3VxTWw4UUkxdzJuY0lKcDBSTTZFdDd6N05Dd00walorMWlxdTh4ejdPS2Z5ODV4VzJBWUtOWGFGcUJRRzBEQ25tclBwSlBSM2JiTXlkUHpFZ21DSkpoSG9ScmFMcVM4UnBoYmc0bzE3THczN0VONUE1b2MraUdOeDVFRzBBdmdTM0ovNGVRd0R2Y3hPMkkzaXl1MGtpeUZ6NUk4RVJjZzRIR0wwRU9YaytDN3RkU3N2d21JTkNzZUVaaHRWMlFhSzRHODBvRVF6U09jWGIrZXU1SmZqS2V2YlFOY3U2UzIybW9vOEtWaGR6QVVscTI4dlY5OXJBMWM3N1cvaGhGK3lKdzVXZzg0dXlLS3dpZGtLSVRjYzd1NkxFVXFZQzNVdXlPN1l2Kzg3bnhUb01wSDlqY3FXNTlVU1RjeGRhYjFOK21NbUFIVS9qNG1rWDAzU2dzcUR0Y0lHeXpYY0UyVUhvQ1FLRGNWbDVVM1ZDR2NtdnFLUk43VTE1Q2ZrTVlJSjhwVUZJRXdiZ1h4aHV2YmV6bjRtMCtWVHEyeDNRU1ptekxOc2tMbUIvSzV0ckJCTUR4MmhDeWFlNmtGK0JTamRNOWUrOXhoYmJIRTIwQW5oRlJVZVpXLyt2bDEram5YT0JzcVpvL3BKV0xBSkI4bVVxaEZ0b3pQNVlzbnFCUGZWNnBkZXd6RVRaTHBkeTdWOGNHSXoxNHBtU0RRY2NrWlVqTkVHa2Z0MWlhckwwb3RxWTJBc2c2eDBrem5UcEE4OVNDbzFCMUVJM2M1Y0tLZzN3blJlanJNR0c3ZDh6SFBraWw4WFBIS0F1dHhwdW81UEZKbG1VdVN3RGwrbWtmS1Rva0ZoMXBFRmc3ZHJLLzBkRG9rYVg1RGsrZmJlSzhydGp5cnFmNWl0SDd2Z1NZZmhCcEV6eVhkaWlCY2FGWEpaYlIyWnBMekdlRzBoUWc1MW1kNTMzNVlmVVc0SVJVSklxTmVndGRhamZHMnhKTWRtN3hkbEg1dFI3ZDhnWFVtQjluQmlldmsyNWJ6K1pCcis0QndHUm9iZmtobTl2ckpQRmRPRVJPbVZVdEF1c0c1YVVJMFRyWkNnZCtzb1UyeTVib2lCeG9xVDAyK0szZ3pTcmZXaElGb2ZJVmpMbXRYbDFWc04yalYySlRTa1BQVWVPbFVCSWEvUVByTW5VLzhFeWNxdFNCc1NqN3prcG1jbko1RGNXc1VTS2g1NkorMXlSU3FXenlDclBZZG5QVllSVlZQSThlUkVmTkhqL1JtWFJzUmVoaWZKVi85dzJyTDZmWnVPYjdnNFpUemZJbHluRHBKWk9IdXg1NE5LNnlDTlBGUUZXYlBSUzBWQ3d4WmwrNXozQlNJT3dRVDM4WWluQTZidE00aFkyNjUvQi9zR014dW85K0VjUjlJdDJPL0lzSllYSWNLdU1qK3VKM3dHYzQ2SC8xR0ZqVlJQZU4rTCszS2ZmSjQzTDRkS0NiYjJMdkZxblBvNldNQnlwVWJtV1ltS3hDeFp2S3Eyd3BKQndZZEltUWZIZU51d0RSa0VaMHF0Y09samNqUUNsWGkrMXVKZWRqcGgrYzhXZlpsdUI2Q1doSzdPTU1Fb2V6VHZSZFp3ZTVYa3d4ZStmcmNSaVlRVWtXWFpwQklwcSsrbHBiNGoybXJhVkI1NTliTmUvVmgvYVY5NVJsTmNpVVZzVlN4ZDl6ZzRlT0FYQmxvN2FyaUp3dUo4ZHdJb1lnaWNFZ0FTUEdrYlFyZHNjNUM5UFVHYUs4Snkzc25ldldtd1I3djhxSnRLK3B1bEVyODRoT04zWWs4WjhuVjNFaUJZTVVKZTd1K0QrdTRYb05KOW93TVNqZFJJOUplMXB2cmdWRnBlSCt5U3cwazhOMU5JVEltWVAyaVFRblJ0NTRDci9KSDJFanNUTEUvWlRpUllIT3dUOXVkaHgwUDQ1ZHExV2hRb3IwUDhlTTZKMDNtRVcwSVo0NlVjQmZQVm5IbS9oVmtnL0hoRVZHcVEyVEN1Z003UW1hK3VkQlYyT2l1MkdVQ3VWcnhjc1J2NnRab3VRWjlheUEwR3ZoWUJFQ1NmdlVjUDI1TUttMU5idmU1ZGNzVm5IdUhjTTFHc00wQUVoUitpRUlTZnl0R0JZZGc2b2ZuL2R2ei9NYXBtcTlCSEJqUnB6eWhSSU9vZEVNRFFRL2ZBR09XZllmRFptU0ljVXN5aGdidjhTNFpXQkF0c1RCQnF5Y0l2UFIyNjZ2R3BJa3JIdUUyOXNGZk1pdDkxTWM2YmQrbUFDWjVRdmtOOHhLd2hiUGNOc05DZ3lrTGtneGpTbThQVHhTWEc1YTFwK2RsUmxiMHQ3VUcwTGdldlViNEkreXVJTjZ1bURoTVVtUlZ4clZmL1ZWNlo0UWE2UENLWVdzbHNPcnZneVBpdkhoNFN2cVhvNG9zenRTQlkyUUNscXVIL0RwazlTQVE1WjZMUTdnUmZocFNjaGZDZFVDdWNJNGgxWFJIUDA2NjBLNWt2YUI3N1JTWGNiU3RVWEFvTlVKNUpCWU1XMiswUnJwcGVMejdTdXQ2UHhJbWNRWDlFVGQ2SUhuZmNnMm04QVR1UEVObXRodzdveURvbEl3OTRyS3R6NndxU0JBaklZemFtbGZScnV5ZnI3WGJ0M1lIVTlEZjN0Qm1jczdCUllGYnpqTGt5TVZZTDVsSDAxUGFxaFdZRXl1YUdCMmllZWZxelVYK24wOE5mR0hXaEYxbHprdlNzaENodEpCTWhld1JFWWY3TFpCcjcrN1B4NzZyRDNsSUVEMmVuREhIOWRpY215RERoRGxQZ0FudWQvYVNpL0Q4N3FwNGEwWkFoMlk2REJpQ2xOSUNtZWNlYW1FWFczVy90dU1jNEx4VERYbHBRc3RlUEUrODhKMElCRmlYaVlhMVN4NERDeU5JUUEyai9ibU9LeUN6UzNzKzdCTGxodkVLTE9YNE5oUEp4QWtrdEExMmFJRUtmUUpHZDFDM2w1ZjdDQkFES2VPNUZhWWVxbFpWak93bUFFWGUvNU5SOXkzNmxLVFkrK053cUVTY2xLL1k1V3N1QmRBWHF1R2Z4cHVPT0RHaUNROHU5eS9rRHV6RExQT2wrbFBhTldlZU9uR0NzcVdBOFdiblFETzZDMng5MGZqZTFTMU91eVNKNERsSVpWaDZZY3hXeURsT3d3Nmt4Q1p4WVNBd09oVVU4aFJuRnA3RzdqeXlSQ3RoM3NTRnU4bFA1ZklDNXJnZVpnbkVhc2dneUlaVVRscFI4dC9PbHpOc3RLZVNMenI5SWpXbnN3V1RBL3VrQkZnaVBDZGxxb20veHJmNktGdm54WTlFTmpZYmUxenhodWlZUWd2TUh2U29FR25MRHJrVkNNMTZCeWlkbkZBbFBia01jWGpHdnpXcFBBS3lTVWhZVGQyUXVwZWt2SGFSazR1MllhMlNVcU4xN2FUWjUrMGRiREhFQUV6WmhTZ1J1QW9pZDhyaEZYS2RhM3MxSkdWbWpXclpRMlBwZFNQWnBueHdJL2VJbzExcjdpTkZyRndmQ094em9IVTJlSXFmNE9mZWZDWkZZMHBqMnh0U21XUEpETkRHRnJ3dVpVNC8xNmU4V29OL1llMUJzNnZIblVhdHhDUXM5WDk2dnRHTm5PaEdFKzd5T21tTm9XbEFRbGNwZHRZSHNRNm1TeWdaTnh5b2ZPdjI2SjB0S01MWXFKRUlUNVNlMU90TldSd2NMQTJpMWhIUUU1TTJjalhuYlV5b2xOMUp4clE1MVdOeUdwT1JkRmRmSEl1aTN5NUh1MThva1NVak9heFlKVTNDNG1ac1oybFJyRG95U0VmMTJDeVo3eld3NHpnelJpeUl1dW1nV2tyODlzZXN5SDJFQXR4VnNraHNablVmdnhNb3Z5S2VrOUNZS0hFTFZ5TXVuWUtOUDV5NVFUVjFDaEdIUlVCMFVsZW1LRURMSENZYXorUnpmSmoycEhxT1BWZFB3cDY4YXNac2RrTVJuZjBRckJvOTZ5SStzck55cHU2OG1ZNDRZL3lCSk9SK1RxY1JmbXNxTllYeUlqelFkQXFTZm5HWUNKQzBrWEdlYkVBcFRQY1JxaHo1TDB0M3ZpM2NVclg2NkdxUVlXSU9sUFFPRkZQd0xnVll6Z20yK2VveVpPck1CdkNlYlQ3Z2p2OVJlMXRlYzZhbS93UG4rYUtXL3h0bzQwMDRrR0pZM0JsbXdtM2lGSnl5RWVKN3YrbldZZWtrL3U3OEFqcGdMUFQ1NTFqaC82VG94NjdUQ3ZkTEw1ZGRlOUNBeldzWWZpRmIybHhZUTd2UitSLzVtNWdlcGt0WU11NkVqRTlRbmUwaVVwRCtaWk5aT0duTm5PeVNMWXYyS1FmS2xjbHBmSzhCM2l4WHU3M3NoWllwb21TUVgrMUxhSG1SSUVWcVJIeHc0ZVFjd0wrQjJmclVkVnNrRnFvY2g5dVRRWGViQWdvRExEQ1J1TndIQVNLQUxmR1R3MmdmTmFLWHhPMVMyVkxSdGV0cWgvVEVaeklXZEhLc1hkY0ZoK0F0eGEwMjV5T1NVcUY1dGk1N2I0S04raGY1MW1VS29RSEJlZmI2ZVFrVG8yOGZNbGtDaTQ0bEdxMDF0T1p0czV6YW5yVXVQcllGOFRFRDJBZjk1R0FicTcveW1RQ0JzTytCK1dMTFVyaERsa1EvZXBZZVgrUVdMMGNMdWVPTHR4ekZoNi9TdVhMWTFMSzF1U0pnQmc0emc3a0p5bnk5Yk82YXRpTC9QMjB2eGxhRWYvZjcwY3Bqb1l3L1pwN0VYL3Q5NlNWWjRiL3FVTWNzL1lvZWdGL0hsaHRGM2hUbHhpUWxUbzdoWDRPRkJPQnJIOE1JS0swVjNEOG1NdDdQMElWZGJJd0UrWXBYOHFnVG5hblo2TS9nN2QrOCtxWkxhUDdQdXZkUTlrNkRKU0hENGFnYStFK2xBeHlZVm01NUdSSTl5VUJHc0ZYVGE3Tm5mNTlFendPLzl4dnBUbmpObWp3cThDN203Nmh2L1kzdm9mS1NhMDdvTk55V1liSC90cWlpWnJaYVNzd1phemhYMHh4TC9HRmtYcFFQYnJxb1FOZEk4bHZJWG5MejZxQ3hIakxKRG1tWXlCMEhtc0dPcUpDT1ZFT2dGK1U5SDNyQ2JWcFBWZW4xYk9TUWdGTThKMmcremZHU3NmdDcrMDRlUW1HbTZEd1hZeXkzcTZYbnJuN2o3T21XUjlUQ2s1a3FhQkRuYk9nR3FZNHoyUmVQMW5GNDkyVVR0c2RVaWt3MVJ4TFVvcWhhT3M2NXEzM1lzK2gzY3RsbG9XVmczZ1hmYkdWUHladGVHNUFVbWhVVWgvdU9BYy9FNGhvaXBsa3NuQTRkVUJDaDBzK0Nhd203OHNwWTF6S3ZnRHQ0VTA2SEtteEdqUmRFcWlhZDgzekNyRy9xcHNEcE01KzhldWZEZTNtTWd2YXBUNmtGUnN5VDRGS3FxdHVBRngxVHNZOUxzK2dlTytyQ2RZcFViRklyeVZTdjhVMlFkdjlwUjBjQm5ncDhnb3N5UTd1WlkrckFRQzgvT3lRQW41NmV0S1NMMWR2bmJ3VVc5eG5wcEppeStINTNVRnhESUpCWWRYVFMzRW4rbXFTNTcvd0w5bHZoQmdFY0FQU09tV3Y1Rzk4V3daLzMzSHpqbWU3anZOVjVXZWcvQ2o2QUVMMXR5Z3AvRVN0aW91TWtndytaZ08rdVp1MXFoR0duVUM4WW5CVmVsay9HdkMycTJNZGxTYlBWUTNCWDBWOE9qUnh6ZHR4S3NUMEdsUGNoa3VEWE1IakxlYnlLWmdQdU9wUVByZVRCbU5ud1NVSjUwKytFbXBFSkFSOWZJSlpaMk15MnR1ZU0zM0MzNklNcHVGeFJaaDFuNDlCWTNYVllSaFZsYlJyTUNsTkhtS0RUTDZubktKZDRIVi9GWityYmplNVE2dk1OR0hCK0NQVUlIblFIb0Rlb20vaXNldDBmOWxFbVB4SXVjSVpnZXNaejJad1M2VTZJdi8zL09KN1lpY2VIc3hob0xqeUVXT2RHdkowVkI4YVZmamJJM0pZYWxXbUVRUHZwa1FSdWg3S2kyVEtQUFBic1hSeklvMitBSTNiU3hKVkk0MUtyRHZiS2RMeTlrb0cyeWM2R25nV1NlN20wVjlDVVBnY3doS3lsMGQ2K2Z2cHltbUpPTTZSd0VoS0tyUm5PcUlDUXRrdjArTVpYZTZrbDBUTHJvM1kwMGxwNk5RbXJLcVZGdjlWZXdEVEE3NW1KcldZc1F4TFluZ2ZLQXZzUkI2N3VyaGtvTXF0REJHSzhyQ0Z3blhyeVVZdVd2Q3pWY3JEazNBTEJJaUlCaVpmRzJhSkRBb0lSdW9Sd2RVdnFsZ2lxNStxbDVWZ2VtTERYRFIrUFNTK0Z0cFk3eTlERktLMGdtbkZSN0FoS25FN21oQkV5RjBRQUs0Q2FUMVJ5WWhFcXVjY3N0UnFXbHY0TUNaQVVpeUxpWllOckE4WGtuMGw0OHk1bWhoOGpIMlhRWlVrcG9oQUlkOVo4N2lkS0VJSVEwUkhjeDZnakZ5UE1PQ0p2ZXg4anFPV2J4UU9yRTFtVko4eDNVZ3Y0YUg2ZU5uUDRMamdRWnNhQ1FCLzNUa3prNXRFSUY5OFRUYmlZRmswUUd1S3kxUmR4aGdJQzl0Q3RJb3F0Y3JIaWhhMmdJcjdaMlFXRFZheHpYVXFNMXhzTnVKYVBvakdrK3RvSkJQRXRRTGtMa09mR0ZKNTI3WENwMzIrd0kyOEVXaE1QZ1g2OXdVd0x3ZnRzWWpQSGpwdzUwS082Ujh1Wk90WlB2WDBNenV2eERWUkRKYnhwN2F4UnE3TzBRalNFTnhxOXkweERlaThQcWJKUDVpYzQwVlgrbWg0Vkkzdmlzc1RjWExuRzNZbFY4a2xIQ0IrcEVDbDBRd3FzMEpqUi84MHN6bXhjOVBXaWlhbUhteS96ZDcxTnpaZXRRV3dPT085QkJLVm5VYmdSUnhRVndnc2N2Y0JER0V2WGkzazRGT1hDRXdOQ04wU0lpZnBLWTZUUFV4VmRjdndndWd5TTFVUUlMcEpSL1BLWWdHOVQyaTRJNWhpQnZEbzNvTStZKy9kYTZ4TGJ6dk04b0psdmhUeldKM002SXBxbDRMT3NlSmNKZDdZZUs4ZjFpcWlTMU1VQW50ZTVPckZpQmF5SUpzNUVHeUdoekZtaXJwRVUvNEI0SFRHYlo4R2ZDaDU4TUN6cGFoVHNCZmpjRVZheXdnYzRYUVFkWGJIWlJLVjdhdUx6bDVBOVBoMldZV3BRaVd3blM4U24rcFlUU2lYMXRzSlJheTg1a3RqWFNGVGxuU2dscDltNGZSQXBhYnU5VzlFUFZLWk9zbE9SZnlGYnlqRndoVmZhZVJmakJIWTd5eUNxMW9QNGx1WmhHcWpkcmk0Q0ZxNTRCVmNrQWpoOXJDU2libVNLdi95SXR5YW1Xa3h4ditQOThWNm9wREhxVnhwOVYxTXVlZHhvWm1IWlk5RTQrUkdBYkNLa3F0YnBidys1ZUVMZ2x0MjVzajVZY0czNWExWi91dTdyanlsTXVldWg5Znd2ODJiczE1eVd6dkhSUHpoMjdlTUxGdWp2ZWlGUm4zQUZ0aWFSQ0gwYkZ0N0VGVlBWUzJjRTRkMUdZQjBaZUV5Qm12aGUzREU1TFlycEpBU2ZMV0VwYW9CbGRJaTV4ZFB3YWxsMTJTNW1lbzV1UnVpZ05reVl1U2JEQjh0QTEzL2V6NTNPRGM5RlBGUDZhVVljc0Z3RkFFb050YndaMDNyeHlvMmpHWVc4cFpWeHQxWDV0a1RTRmRrWWhCTjJLVTdXSWpGSWNyUUl5dlliMFQ1U0tDb1REWm9OclI2aUVyWW55YmNxV0ttdE5oenNHS3cxM1l0YjZqL2FUY3RKU2F1NGs5SFBVazUvZmxPT2RNSXltcStWeFpaUmQrTEZlUDZpK3Q1RVlZS2tmYURmKzdPdWs2TzlRZFhqVlo2NThUaFo0VzFic2paZlQzbzFrMG1BOE1WeUpyMmMxN1N2SEFMOG56M3lZbkxVZ3doemZzR09iYUEraEJHSDAwYTc1dG5GbUJKOU1wYTNjYXZlYjdXRkFLSkRnWHlwTzhJZjNVekh3RE83dUpzaU5IajZMRUI0QlNRMUh4RGVKUXFld0s1NGpBUTdjN1dxM3Y0M0grdTdQaURBR0Z6THNMK3NIeW0xODA1cTdLdkJIcHFVU2FxMEZ1U1k5TlFSTEhqUERqOVpaQWpVdTQvdUhlR3kyaGsrdnkyNVkzeVA5c1NiNzRPZzIrMUljSHoyTzNrMkQ3N0pTR0owbUV6V1RBZndJRjdjNUswdzkwQi8vZ01wYnV5SXplL2JzYWtUbUI5VVkwTUwvQXlBWktWQlRZMGNucmtPaTVBSWNkZlV5b0h6SHBsdTRaM2hlZW1qWTRsODNwak80S043T1RkeTZFbjI4M3dibU5aNm1Nd0NHaGc0eHBzTldDa3h0UGxhU3Z2RXVTSXpnVEs0S2kzQ3JuZSs5UlpFd3RUVHpWckVLaGlac3RkSTQ3K3FpNCtad3FQYjR4SWNSYUwyMVoxV0NHOE9NeUJ5amp0MGJLQjJUTVFzcDRtaXFhM09hU2NWVTgzV1BBVmRHbGU2MS9FVlI5d2RoUWJFK0JvWUhQSTE3SHVKQ2JTbEtPYmF4TFR4aWFvRkVLZ0I5TElXUnQvSE9iZkJPWEpwbnk1Y0tGdkpiaDA3alJmOHVuam05aC9zaWtKNHNrZ1VnTHU0enF3ajFTTjZxOHVZNEtKRUluNkZ6RVFnQzhDQ3BFYnVTUndldFVmRzBmR2prNmt1UGUwQzhxVHBLL1E3UmlkdndPY1F5eDF0V3JWaWpya3hNTzhQZnNVdEVsdUQ3VjdUUzUxNExQcDdzYmZaWWdycjY3Vjg5UnN2ZWN1UHdKbUVRZ0tLa2RFQXVSRFlqbUM1WGtmYnI3M0xTNTA5U2FGNWdPeWNtY01vb1hNcnZCQnR0eU1Zd0VVaE9QNUxZd2s0WXZ0QVd4RWp0NUVlYjFLU2JTeGY2WXRBMW1zWG9KVGhFVzBqNW5OMzRwTy95eEhoSHorUEpwNWx2T3FqbnNQaERBWDhwWVk5WUQzYWNOSVFDTHVNOUxVMEViQlB3WHc0UjlHMHF4TkV2MTZDclRHTHkvanp2NVdKVXhTVkZoSUhMaE1xb3AxbDNpZmx1cDkvRTF5dDNBRXJYRU1jRXArNWgvZ0d3a3ZVNmlocHhCc2R3cWNpek1KdSt1cExoQ0RlL2pUREpsaUNKa0dNTjJWbHZvYlV1WDRFM1dsSzJDZnA3N0E0bUJNYWZKTnM4TnRmaHNYckFqMUxGenZHZlJZMGtmSXhFRXNNU0YrNDA0U3NicUlZTUFsRjJBTDJaY25pMzd0b2RkQ1kvMFJxd3hLOHNTRWdwUGROY3pWSFIvbWFycytrekhyWXUzakxraUtWK091MklKc011RlZWZWliSWI0dFFmK3diTTBNRFIxV2JNc1g5a3JDM1VVOE90aGxQQlF3ZEZVM21xT1VBeXpnY0hUa0J0L2djTzNkTzh2UkkwczlnT29nVjl6SzNmdFJpMnRNUGdaNDJPS1FmaFo3c0NYN2s2bnVvaVNTRVFFa1lZSmVnL1V0eDQwbkoyelNSMldkejJ6RzBIQ1N0bmdJZmthSStaQU8vdDRaSldSL0gyUHlkallJVjd2WDlWZ1VoUEZ6bXNlQnhXY3JhelNnaUJQOHZ6VnJWc0R3N2VnMHNOSVBkNFlpK09mUDkyNnE5MzdMMFdEUStYQXVpZ3FrbmpwTS9XT2ZRd2pxQTJaNXdXM1RlWUNCVEl1K1U5YU1HTDdWMlRqQ0p3Z2VXQmlCeGEzZTI4MjZJd3hsQ0VVT0lNa3lVYk83VGovUDhUZmpsVlcxcTJSalJjV3k5bFhCVTVTcnJLK21QbGpVcU45ZjFNUnpLQjZRa2VRL3ZYQkFpdVhpbHpGb2l1TExyV2l0b1hLY2p0c213RVNmWDdjdGVBT3JOT0RuTXliS1pWWFIwbUgreS9uUHZZYm9tOGxWVUlIWldURkFBR1ljR1YwYWRFeVV6bGVMb3BodG1POTRYVW1GdEJwZTFzUmo1Y25BaDBQWndKUCtBRkV1T2U3SjNFZGkxU1dpcXBIdzVMN2hDd242Y2VTQUlLOU4rcWdMdTNOdXB6U0d4ZkE3eUhlWUo5R28wK0IvMnBNUG9zemc3MkRkM0t2VUJQVGdiMi9hMlF2SWd3eWlObzB1T0VVTjdPRGpOWlBSK1hVclBLZXpXZXFIY1lEUHJ2K3d4cGFqeDgrbDFWS1V5Uk1MQ1kzcVZXNy9LeXZEVERRamNTZ3NJdjdSVG0veHRxTnNmK0V0UldkenhxamVKZkhDQjJQWjdveldhcHpWeXhtM3pFbVRZUGhSTmtBWG4rdWV2L0VWaUdFdDB2VGRrYXhpODN1UGdCU2VaQ0h5a2g0VUN6N3V2VVhkVXBvbEVSUTRjVTVseWNLRFAydzBwU1poS1crNEJmRzdXZHUvM3laNkVrZDQ4dWYrN3owYm9ETmF4VmxGR2pJbE84cDhGOFM2cnhJOCtsVmdmZU1wVk1jd1lvZ2F0QXVnaDdQRmxUMXpxaHRZMXVpekM0dG9TbzAvck9lbXN5b09USlNBSFhKcVgyYU9ZcFBSNlFWcDdVQXpRWmV4OXc2TFh1aFJqRld4VnIySmUxUVZpMWZuL1RlUks3aHBscG8xNXhocXAyRXJwQ2FHLzRqQ0hEcU5XdW5xUDdLOHhSeXVZekJSei9OU1pvU2h3NWo5UysxRUI2RVdCSUU4RFRvSytxMEFudk1jZGJnT0c4UFpFWWNlOWVHYWMyWVU4RXlyV0ZpTzF0bmcrZ1lMNHFoZWNvNzNUQ1JCTFl6Yy9yKzBIeHN3R29lem44c2g2c29LWll6ZjAyV0xZeVdoQW9BRGtGL3JQTmgwV1JaUGhyTDJ6VEtNbTJveExIM3ZQTkVWQW5lOHZJWWRQaHU5Rkx5Vi9jQ3lKakxlSXNvMG5SV3hublRMTDBmRFRRVjVBMk9JVkFlWUtqUWYzOTdMWC9IdFc5bnhzTnVzcGhKYlkrY1E4eFZua2pMS1lkRFMzYkxnOHZUTXJEcVNJZnFKeEkrNkpSSjM5MklTektITmlvRHpYQWVDRFhVNFM1YzRkYVlreGtZNkY0VHNLbjJFMjVPNVZBanFTZ2VtMlNvVEdidWQ5bGUyL3RGY0VCb0NteXRjK2dDUjEvWk91eHpPejRtWlFHUjg5WEpPaGE5WXkrNHZXemRPaUU3Z2RNa0JnRExPa1ZHV013UExCbWdvNmJHaUZHRWo0U1hoS1Z5Q1B4OHdzRlNVVm9IUVI2bFVyaE5RaHM4RThYMm9JTUZWRDUwVVEvNG1zODY1emZoejEzQWRBV2RtZGh3OHpUaGl0RlRqcFlBbEZoRWZjREdjdzBVQmpxT1h4Kyt6a0xtdFBTSmVySno2TEZyckNkajByVVl5UWZGS0RkT3JaNEdUMlJ4OG1SUGhVbmlsMTlvclU0Vk1UNklSVVNkUEhLUmVyQy93eFZDTTVSdDVHZ1NPbUxTRmpHNWx2RXdhSXE5VVZLSm50bHNONTQ1K1V4N0ZXcjBoTTVxL2Fyc3NENnNaYzZzZTNzZ0paeHRQUmcxWnJ4dEUzc0RKeEtkSUZlcnVWWnVobGxTeWVLMkFOWFZueXBjK2xESUhlNG92Rlk3VDd0eGI2MWZzL1pUVnFCK3RVelhxK1NjUlhYL1IwekUyNWdQQTducjI2clRYVFUyOVRNRHNBU0h2SDZwZy8vUkhGTlAxZTRMOWlzS2FnSzF2ZjEwNklUQ0xPNjBHSjU3MUcwcTc0WWZUNDM3ZTJaMUpxTlFsRWlzc1hUSFhkU3QvWVhUQTRFanBTS1NVYXZZNlBVNkloWkR1bUZjRWFuMVJXMzFaSDZ6VnRNN051R2w2dnFqSjdTVVh3SHBaV1RlS1hZZDRBazZ1bkUxTDRkckZPOXpJNW5sZkRBVGRYOVRpOWd3ekdWSjAwdG41TTc3OVVTVUtURzhicFQ3bGYrcm05OTk0L2FlN3BXc3NUTmlsN2FzalFmZjIydGFkcXZYcGlPWkxpUzU2R2xycTQ2M1crcFQ0YzY5MTZ0R2EwT2NkL2loamxuak9Jblc2SkUxdVg0ZEdYY1l0bkNFRDROcjVzbzIzcUZUZmFFOG5yK0V2akpNSUNmMERTY09yaGtRWkxPZXhqNWRjSzN2MDErYzB3NHJhRDdpQmZRN2hLY21QUXhIUjE2c1RjSnIzSVdYMFpTV1FPbmlJUS9vcEt6Y3NkaDVhanJEZE8zRXBlMWhiMnFlY3lSYmdCRXNleE1XZzJYZVBoZ1dHdlBCZ2pMS2xGU3BoMGdqSFJLZjZtL0djeFRyRnQ0dmVPUnl6N0xFTkl3Z2lad1FRM2M3cldJKzJ6aEhINm4vc1QxcEp2TXZSZWtNdkFLTW1NRCtUMEt6VHUwa1hIdy80RGtNU2pQTjBIRGhuT3BHUTlkR0ZGTWhtSmJxMTEyeUJWRWQ3WTAwcldrK2RUaHc5SFJmcm1XSFYvOVV4VFBjM04yZ3BONHlseHhCa0czVkJKMXVLUFVpdUtaK1BOTi9xTWp5RXEvQzhqbm1BRUVZMFhuNzc0bmJaMFRzWkgxdjZtMk5uYkFvQ1ptcnY5UmRHelBXbWZndUl3RjErM1psanZXeWk2NVUxM25NbndIekdkbzdEK3VBWVRyUHN2cHhuK3pNSy9wUUNXVnFqSmJ4SFRNTVpkalRQemg1TmdzMSt0cFJjR1k5NWk4Ym5XeE9nYWtWVERBTTRqbEFJM095WlFYUE1tcWNaUVpZWnQ4ZjNBejRtcnJVMVMwTnM1UFZoc0ZWUWF4eFRlY2UrNXBOa0M2dFlKWWJIVk1rWWM0a1FmN1IwazJpc2ErTzJGKzB5L3B3c2pqejFwN1VKeDQ1NDlMMVV4b3ZWU3BnOXYxSGxEK1pUYWJSMS9yMnVQb29LUzRDWHBYTTJlVk5LU0g5VXJpdWZJdVZ1cUhSY1B2RHpNaUEvZmN3Wi9BUEsydXBNczdaWnpHU2cyQTJlQnZudlNhY3NsamE4VkhQa2hQa0VteFFJY0tQSnplNzhGTE13dEFxbDNQSGl0ZjI0M0lRcndOcTd0ZER0dTFONkpFTzJtZ01OZnRZYVdFcWc4N0xXaFNXaWRGTWo4SWQ3M1oxZDdVOU1PTTk3UDBqNEVmSFFPNHlZSVFqczJGRitOaGI1TjAvVlVZZTVKVVRYdlJXZTJwaU5WNE9uV3FYcVpSNFltQ1k5Smxpa3UyUG40RS9vVW5GNlp1SU03NHJzaFVKSXFKQzhWcXVKTHVEZEJSMWMvQVZ0Rk9kZkVhTUJKalNaQ2lMWU9nL29WYkVISE43eWRRQkF2b29FTUQyUU44endWMzV3TnFsQThtTzB3NXZaNktndER3SzMzL1dVVFlVZlNwVTFmRk5HaXdJYmZKeEtlWGV4VFh5RC9WL0c1Z21KS3lpb0p6Z2liSFZRK0hkeEZZQTdNUGZzYWs2SmE0VnRJZ3RJVUZFdUVPdzRTdnQ3Y3o5eDFIeDM4aFozbXNSZERCdkplWWx1OXFrUkxSMEl1bERUUzVzNm8zM29SQUtEai9CK1VxUExOeEM5WGg5SU9QbG5wSnpYSlJpekRrck9Rd3orOW4zaGlmUGJISWJmWnJ6S0VaYk9hRUpCdHpHS2VoUTM5ZDJiNGdaWHpTQmlocnM0ZTVWTXBmTUxpbiswaU1qbTdEb084b2xEUFY0aEpjY3pGZDJqTlByRUNjT0lEVk9RZjAwME92R20zNWYrUktJMlJPS1M5bTZ2WVpPejMwSUVvdjdTRGY1U2EvbGNZZnJIeTYzeWduYUh5SEtqMndwNmlhOWhScldDc0xuV3N4ckxpTmhKZytNaHI1aDdDTHg2R3VKWkM2UXloYWYrVzl2eWlGVGEzRlhvMTV5cjl4NC9LOGpja3FRL0k2NDdyUi9vYnFpVTlvRWdWWkJDc0NIR2tkRnlKVG9qTnRUek5neElTS3NjMVViMExLV2R6M3hldzJzWk1aRUJiNzhmZEJOK3NLNG1STTA1a25xOG5DUnE3Z2ZOcWR0dk1Gc1lEMW9GSm4rZDM2eUhQUkRUV3lVNHMvTTVncG1QMjlpdFliVmtrVTBReXQyK1EvSnBwRnM5UGJ1eEpQVWp4TnVia1oyeGhFVDlsZkc1dXAraWpFVGU2ZUpNVWtvTEhSQmNtc2RtKzRqK1FjbFVXeXFGQUp3TVpVWWNCdktkQ2IvaEYwRWxoMUxzbmRUcFZrd2VhV29vZTVrMEhUam1SVlFZV1VMWmRUZUlBbWxrKzNaQlNMVXdyekpIeEtLN2d0ZGVNdHJxdVJjOTA1YmZhUUlxMDNCMWNRdmRsaUVTRTU5bTYraDlyalZUVmdXZ2pYTmVqRDFNNnVGU0RVVWl2clFwamJIVVZXQkhkdlYxYzg2djVZdmMrcTlDbmVxN1NVY1BhLzkxYlNpUVN3RTVOQ0U0UUlWbjJ2aHZiU3pQOUQydncvcFkwV2hVYjc2a3M2WmhWOXVEaXlSUjVWekYxUDBvMldRN3BWMmRxbEtMTHFZNjgxM0h5T3NFdG1QRHRaQWRIODUxU0Y4QXo2V25HUkVHbTVSQXlNeTNqWkZISXF4R2h6NTdoRHZuQmxVY3hGekJQR0RXcXEyVEZ6M1JSMFBIczRiYTRxckVKdkhFSktyN0J2OUNLbFdrT3dWR2JsU1p2R1d3QldqMDZHOGhWVXFZRlZ1Mnc3N3pmb2I3aThqR2RhdVlYOE9iU3loamk0ckdoTmhMVjY0T3FsOC84cnlHZWhabXNhbTA4b3FZMVN3UXRYWmxIVXVoNTRWQW14ZFpOdWFCUjlFYzMvUGI4WWtXbEUyWjRScFBnajJxaTl5czl3bVBlUm1KamsyZXVJa2VLbUxBQUdZckpYZzNGUy9yQ3lCL1ZYQkJjSFpWUWpySWxPTUExeFNyTzZJMFJBdUd1YlJEbkRUY3FlR05PaGY4VktselRMSHJEYjRTYk9NQzdsM0w0WlMwM3k2Z3ZBb09MZnA0djR0MnhOV0I3YStrMGhKUitYNG4zT014cXRPbFpLVWZRdU8zQmZVRDJBblR0a2lYbllQdFJ1bnNOVFVjTGJZd0dVb2ZzM2tRaW5Xa2VwNERSVGt5Q2dZaUNBSUR4NFUyV2kyWVVyOWFGdG5XWWRTWHF6RHdaeUZCNW53SmdObVk0NFJ2NGdFOHFvTXNuVjlPSklNTzBseFNEalF4enNtRWlHZXRFQU9Uckt0SVE2eTRJRVhoQ25WY1hmYWt0eXdTNTZNdHRjMnpDVlFmOE9XVHRQWWRhMFFOeUNjMklNRGdicnRTM1hwWFdRcCtlRE5DSCtGd3dlemhKL1o3UnhHR0VQRnZOWkx2TjNEcGQ2MXd1NjlwSU5IZFJMU01mUHZGbUhNbU9TZTBaMHRadkNHQ2l5WDRvQk5mNUpkeGJjRURkY2hwNG1MY0FpSXI2ak1iSXNZTjhucWk4aGRFOGkyY1plWTNGMzNtTDdRMkpRbmcvclFwM2cvUHgxKzZpMjI4SUVDZzhxenorVGJSVS9uelJYTFZSYjRoWHcvd3ljdEJNVkRIWFhqdk0yZHlRZXpuSmpWaExTbzBCY1BFbXJ0bWFsTVoxeTNCZjZrWFNIaHVtZ29kZisrSzJGa29KR29sY2VnVVpTLzNHcmdWcmNvd3o0U3BScWM0TXh2alJPenRrUEhFKzBMUFRUbHFITFp3Tlh4YnpGUkU5cG02dWtWdEZaM054ay9qM0JJOElHSmcrSDBjWDBCblE4SVQ2WERZOVRJZW9NVkhVWWc1d1BVaTlZTWZVWXVtSDFNZGxHSUcvSUdOTUliSHUrbGQzQWswNGlDMDZEQndNMnVJcmxBWU9CYnVNUTBNMWtuN3ZRaGxxK2xjZitVVDZyTWtxOWliNTM5WEd1cGs0aUhxRG1KZlVGMFkvb1VzaGxRaU80MzFDaTJKSGkwaWpPdW9TK3piMmNuMWxCdTRudDBPeTRJRTAwNTkraGZ5YTB1VFdJb1I5TU5yT2ZScTVyNGNEUlc5K3l0ZW9zZWhDT3BtaXcxbWtOT2lTeHNISkgzWUNTOGRoV2UvVUUxb1JHSEFFQjlUZ05XcE1jSG9yK290Z0N1SkpSK2JVNzk2S3I5ZTNHWDEwZW5rRFk0eGxJaS9LT3F1LzYzNHVPR2FmZ2Nud1A0ak13U1FpN3JjTWxCMU54RXdVM3hIdmI3NVV6KzNtQTBTM1gyeTBtaStxSmI1cXVpaTk1dWhEMFE3YmpyZktiL3lRbXRtSkJxdjZVVkIyTjk0V3NjUmdJdjhHaFpoRjhTRjY3WHA2a2xWSWxnMW1Fb2N6bE54YmxDeWhWaCtqczl3QkVhb0ExRzlHb0VFYm9EMXRkaHlubnRQZ1RRYVlPbUEvcFRUMFlOaGFtQUtVMlBPRGF4UlFHQ2FrTWhIMUd4bzhxNWxhT0l0d2kzYmY3L2hZR3FYZzcveUsyN1grMGo5ekpDMVNpc0MvYjQ2OFExcEFmNGxDQVNMTGFtaGZaYVA0enBoMkthUFQ4Vjhzd3B3OWdFR0Z0ZWRjamV1YlVaeXVCdXA1MmJ4TnliWlpqb3dyb1IxN3pNZEMxYkhsejBPOWdGZXIrS3M0L2NyVGQ2aFhMMTNDdkhFSnNXaVVsbVNIWUZiSTRlRUQ3c1VRaWgzVlQ2bWxCOHZMVUQvQVFJQndhRVQydUphdW4vcTEvbzhyYlByVjVmb2I0eldIM2VubllSbzd3U0xNN25zNWZ4NWptNGViU3FBTEtaeW1yQTJ4ZWdrZWoycHRtbzFaQjZFbTEvZE1uVFNBeUE1N2VhNEpXY094N2E1QVloNGRHalVISmg1Sm9DZ0krODN4NDZBTUZwRWQ0UWtKNmorVWcyRDFyY1RTSU1rRi9RUnRId2JyZWUwUUdyRC9UOFpwRHpnZnY5bVk1WmNXc0pNVnBpZ1IzbVVRT1JKb3pNSDlnZjQzaSsrSFZCT3VZeUpIVzFlSEFFWXBzRDVlV3ZISG1SWUFtY3paS0NQMW9ra1VpZER4SlQ1UHl6YzRZVlFGam14R2FNUWEyMHRJQzg0TGl0WkZIU3VwUXdGM3UvaWdXbkg3dEQ5R25zUGNpU2E3SE14NFNjL2dtMHE5MGhoUVlyODNmOTJLTG0xakNUUEVVTzQ2MGRSZTEydldDdWV1aDJlVHVUc0V6RVJnRGJUUGJSYzIwRmwwL21XVU1OdUNXdFlwTDgzTXY5OC9Pd0tpNVk4Q2xrQTFhNmVocGlXQzN1cDdVUStuZDh6SXF0ckh1emxHUllEdkdDRDdEVmI5by96Z0hNMW52MmJzb0JkbURSOUhSSEdONzR0QkM5YWg3NWEwTFZQVEFYR1pZUjZDYWI2ZVpzYTd6TWI2UWtmaHhPbTFOT3UzTkVoM29qYzNmRzZaQzhMVk9VUDFnUWRjQWp1ZkhJOXBkWlBTMlpacnJmdVZyVy9ZalRhWFFKbjBiVzRqRmI1OGR3YXNRTVh2L0M2ZkZvWTlQMTNId3E3RElyYmFCc3huQlRFQ2FFNmVFRXI3bmxKNVFRUWhnOTN6ZmREZzQ0a0xrWjFRaTQyY1BiSWluYTJFdm9pdmNETHlZZ2FoWG5LRlA1aFdGaWE5NUJmSFhNNkV6aGdDckc5WCtBbTJucTFzUzBWMnp3Q09QS2tHdWpzbXppbkQwRWNRbzJGei9TTTlQak02ZS9FK1dEQWxHZ2RLRS95RmowckMyU3I0QVFJSjV6WlE1S29LTnh5S050L1liNnRlYVYrM3MxVE1qaFZQRk0wcXdLQ0dVY0FwaWF3ZGV3YTh6MEJxUjZnd3lwUHVwc2RJZDViZ21TMUEvTHBYRENYcGpSRnZIZzdKdHBFLzF4SStZRmY0VFdXd1VBOU50S2dqYU0zWmRkRFVOTDB6clhZT1loeEtXMXVNdnZvTGFmWVZwSWx1Rm1uVGNaWldXZkMvU25NMzNTQ01Cb0d0L0NyUGFhMnhxRXNqaDRnTkFJUTlHaFp2YXZxZkpRVm1vT3B6SDlvUVh0dmtMdDZOWjNsMTV3VHVDN3dwV3Yrdkl1bG9rdmo4N3RUZTdTWW53Zi9OMHVEbUN1Zzl5MTlVQ1hselVzanhBcDltRzMzamQ4RzlxMWx6bW1OKzd2TUUxUmMrNEpBVzJzbUIzL09FT2pYa2luNGVjanprSkFrNnVsT2ZIZEZnKzNqWHdVMEY4NXNQd2pibFJNWGI2MHRITUV4UDJzamFhczhwc0xQOTJjd0NaVE12MmVBWGxYUGE4S1BhaU54YzJQa1dBcmszYys1Y2xoMTVXMndod1B5eCtBVVM5aGxnUDdxeGJuazNUaVBVTG8xdGNoQlZvamFtVFowMnR0dnlVQmtNb3JSaVI5S3NxQmpYR3NrRllaMDdGbEo5cTdsUjVyVGZacXB6Zmt0YXdXKzFmMm1pYWZYODBMdWJidnpSVHRWOGF0QVFvdkk1QURBdmZ3bXluTkI0enVVSnIxOERLS1lDTC94Y1Q0aWd2dURZbkVuRVhZZDhKNzB4b3pRMi9yL3hOR21QaFpnUzRQOFJsaDd1NmIyaWNFenNGc2ZTaDZXc2k5c1loM0VoVVRyR2kxLzFRRTIvRDJOT3QxSldqY2VHZk10eFBaeTlBWjB4WTdxYzI0VUhWOWhrQUh1WUF1K2ZxTUdDNWc4TWprOHo2TytRWU5mYjJ0UVJIOHpZM1VNaWsxWlQybHJSMnhvV1plOHJ4TE9kUXZYRllIV0xGSDdWeW92QmRUaUltbFZOTFNHTHFzTTBlS2hGM2UzNyt4ZXBUd2dNUVpYRU5Ib3UwQlk2c3V4TUdpamR3NkJsVnJjbHZMc2ttMEJjY0lNMi9NQ3RJN0lVVHFuS2Z0cWNOQlhjTG1XbVJVRk41N21vUVYvd3h2cE5UWkovNVpkUUc1eWxFUENRQzExMzRQdXVOTndRNU8yRS9FSXI3cG1uVjRabHkvZUR6NzM3aGt2dUVxZFgyM3FnK21YemoxOTdkWGJ4b2ZlUzNxSE5IU2crZVNsVThIR2ZlNFB0akk2V0RBa0dZZFFJODR4UVBhS0NSTHcvdUduTGMwS3dxanVUdm9pVlpDZjkxWmNubGVyRitMcURDSGttWHM0SW5DNzlzaGd0Y0RmWTRBZngzSCthN2dNNXBadkltK1VJcENPTWM0Q2VlMmNteHpwQ0xIbWJSRHFqMkxTTWQ3NUg1aWNHUmxXcGo2TU9INU1tM3NHTkRqQVBPOFJYZjRoMmRrTXVxbDJYcXFWV1BNVERNbVIyNjV0dXJ3Vjl1WWtVN20zTjY2UFg0RGxkTUlCdXNiemZrdHZPam5xVVNQOStjVWhxdlR0TzRxQUJScFI4Y3VLWmZNTlZuMkQrOWtMMHZldnFieENFMTR1dGp0aEx2M1QrWVpIdHdmSUxOWVVLN2J0dnVSNmxUTHlGK24vaEpjSmJuYjZkTWdJSTdxcDFxZVdLZGN3djJJRUdIckM5U2o3MDJjRDFsRXZLMmU3aEJvMDVjYVkwRFR6aUFZNVBCSnVpOHowUUFKOE9YRk1LaGdJeXdIclBWTGNoK045YWU2b1pUOHhTa0twUWN6NE9VZHhqTXJJUW14bkZaeGxvTnFzc1FUNXZFRGhVTWY4bUpmZTg3c2orSy8wN0NoWHRLM2dDbmhCdWFpamdPYlJocG9mM0Qzc21lVG1YVmpsdGxiTmVCajBhR2N0Rkg5VUowRThGNTBIc0xvZHl5bVlLVWMxT2hIM01GY05qUmpaWWZzT0NGWmJiNDEwNVltZ2tJVDltTyt0bm5OQmY0Sjh0eUhDbUpKYzd6cWk0VlZsdnc5YW92Tjk3R2d1U3IwQzh0aXZiZ1BTZldqZ2Y1cEU5QXJmM2tEb0pDdCtSQnJ4amU5OGt2bVQxSGxkY3cxMCtkZHFJNTRRVjhURnhaYndSU1cyQlRjYll0S0EvNjZmcHhKMmNKejBYUXcrUWVGVnpmUlcxQXV0NXhxQURHcWd5MEZuZmZiOUtzcllpODJJZFg0Nm9USTBjVUdPb2NURlpaenROZG1DcHoycWs2QlVVSmpwb09UUHd4ZDNsdGxvVHVVSmtsaFZ6ckpzbGZWb3RkUFBaNUFHQnA2RGx1bE1QQ1MrUmNhdlNES1dTaVpDaGtLREtOMkVJMkFwV2hTSFpGUkV4a0VGeU1QeWhyV1Y2dGVxOUZFV01qSzNYVGVFaFhpbHlaN3BxMVYza0ZrRlJ5STNBYVlUN3RCeVdwc1NrWnVjM1hJczFVM0k3THRPbGluWVhqbGdIVzZGaVk0bWRmQmZDRWZoTXpPYmVrU29iNkFLTk1SVFh0YlpOQlZiKzN2aC9VejAzdFBwVWhCaXJqcFVxNGlKL2VjTmRHZ0dzTzZqUXF0QldsMFV4R0xNTjJ0NnRab1pjeUNZVTZEbVNIL1Bsa2V5VGJGeGJac1lrblN4WXJPcER1MWtoZU9XOHQ0OVhkY1AzQ25HbkZpb3BUODY2dkFVODJ0eEUzc2N3RU5oQ2pFeHlYTExXMUtaMFZMV1o5RHVMK0c5bDAwQnZ6TDl0UFA0Z252cmlnRnBjc0dEMC94eWtmQksrUXMrdE51b3dudzRBQU83SUlld29CVXh6L0tLbVMvV0Z4RzQ1YmQzZzEybkRsZXY4eEdGSVF5K1hpNFFRanIrVU04NE1rRkRLa3pXUmc2aTZUYXFmTk9waUowWitGUnU1N001dGE5eXBEcE03Y1dUVnA4eTVEeDUzSWg3dG9XRjJDbXVKckRKczd4K2RsUDNHbDk5MDlFU0RrNlJnaGxWUkdVeGl6RElyNHphdWI5cTVQdDZuV0t5VXVmdDFtZEJZNnEzVlZoUE96OXdGS1dmek4rMndKd1B1SlN0bWl2QTI2MzZYV013VFl4REJIYWprVUVVY1FrNDd4c2UydThZWm9vaDY0eS9iN3dPZGV2RFVqbVkwcXYxZVdJOVhnYVFPdHM3ZGRKa25VeG9yanRnakFUNHMwVTlKYnR0U0ZJTFFlLzFZdDNxVnZZQVZucExBYW5DQ1ZWYks4OFVuMitmdE1YVGUvVTJRT2pyRHNLWDRyT1l6RE9PQXJTb3hLVmJEVmxoOHgwd2F3Z0lXR1RsU1BDbExGN25oM24vOUZ1THpGdUxWay8zdFBsalB2bCtxeGpMOEp0UEpQUmgrakMrZ0twNUdSdWVOMzJhRklXRXBta2sxbll2aW0wbVQzQ1ExRDVtUHowNUZueUQ1a3Bzb0dYdjkrQU5FbDZZWGFSUGdiYW04TDh6VW9ySElaeVBnb2lUUFZhQmpqR2xQS2ZFditWQ2ZFeElXbGZ3aWNSZ2ZwM3VscUQwZlFNTkdqL2syRGxyZUFWZ3pFRTl4TmNjMVdzVCt3dzYxNytPa3k0MDFDMCtNUHd3TWduclVtY2JxcnBlYkY3VTRST2MyWkFtbkZqVWI2M0IvUnRuQ2Y5VFU4WXBqNVg5dTlsajcvWlc2SjkveWJVMkhmeSsxd3QyOXJOMEZja0VJREorKzJpb0dheHlGc0hEWTdWZTVEajlEMTh5Zmo4L1NXYS84c3gwbVJMMnlaRHZ4VDI2elo0cG0vTUFzcmJLdktDajBYYkRFRDRiNmcydzd1Zzl2QW9udjc5ZXhIdUFZRHlEMU5mcytDaXlpNWMwRVgzcnEreE1VckpGem5hc0NpelRCcDA4U0svMGtsd25aVDZsaDhKVmZmYWpRdDR0MUlTc0pLaG5jWjlrVzc0S2x1SVRERXNXbHRUdGNlTVVxV3NxNUM4amFERUFOZlRkWXBxWlZKdlZNdDBNNmVzNzRDdkQwWFBKQ0E1SG82WlVkeFJVVGF2RzNPc0lncFNidEZZN2NlVEtVNWVqNlgyQ1gyRlNXM1RCY2FRTkVsMFhnQ0RVMUtvWFdROEoyeTdKcGxLa2crWjhhTUx1b3p0K2NoZDBEMkZNY2IwdWtFY3NPcjhHRzRxaGJYV01CQ0FET1dNSHpzNHFpRzhUWE52Y3FJbmtocXZvc0pjZm9sb2FlSTdPR1RiOThoN3lRQWFCNlVwUE94YWpJTTRLZGtNZUF3S3dzTDNxNE16MDNwWGk1czRiSE9GOGlRVXhwZ2ErUFYzN1h0R05ja2VyN0RUMWZVODlGR3lZa3N1eGlhTG9pZUhTS01hRDhXVEFuUmFxWjVDQ3VuM0l0dnhQY2UrZExMWUp4Rkp0WHVoYU5tY2ducEY1VmxVRUhkUXRTRVBicFlJb3EwQzBETlF2aFRHRXpoV0gycEQ1VWlZR2NGSnFMYWRrK2FIbk54czlwZWlnWFkwSEVGUU9aODNuZ3g5Y2lzdUxwUFhyNVNhd0c5TE1OL1BrSFZRdDUwdHIvaWI3aVl3VEFyY3BBV1hPTmF2S2ZueUg2QWg1T2lRa0NKeVJyaFIvWXFTYW9rcDVITnVZb3FBeXE2aCtQeHhzYmxsZUx5ZVZTdE1WSEJxb1NPbkFSS0g2c2hSMERBbmIvTWpsRTVLTi9LbEI0eXR3bmtTMkVsOExRUEhKZythejBwTVJ6ZlY2WXdnUHdSejlGRzFTRWRTZHUwQTJxSUdUUm9keXJiVk8wNFBPM0YvZjBuTmxaV3QwMFQzSkJtVDZha0VUMWxZWVduUnZlZGlxdFl3RWFaajc0WXpISUtjM1RiUG1ETUQvdXRpR1BuUkxLOFVaNllDVmkwL216d0V5QmhNQjBOb3VjUjAxYWNnOENLa0pGNVFWTFpnVEp1ci84QmhIYTBWckZEc3NndDUzc0FJdVc4RHJhR0VySkcxN3BpRFc2YzBwRVBYd2VZWDVWcVUyY2xsQStRdGNUU1I2RVorek9SV2FUTjJoTXh6SjlMR1hnb3pKUldlNkxGazRrelA1Q3pmbkZBNkJ4ZkRlZ3Y1MzRoU0d0OG1WQ0Z5Q3kzOW5KQ3hGamtmTy9kd3BsL1R6SnpBdkhhVHFJUTFCNVFaREFNV09qMTFtRUNkS1FqcCtNdEtSU0p1amtmRnh0MXVqUXdzVTZBWTh4YmY4V3JtcFJTQk5UWW1RZERBNGQrbTZGRDYvNzBQcSt3eWNaNXg5Sm9McE0zaGRvcjBsa1QzQmJhZE5VblVGMGtwNUhFMFh4L2h1Q1l6SnBrU0trcW1FbHpZdWZyUlRLQ0szWUhDamZhZW94Uk5PcnhtUXdJb2hLUzJmc3ZXMjFYOGc5eWo1RHFlRHhrMjhocFQ4MzQ1S3VNcHNTa3V5aU1pSnhSaXJKMU1jNVJkUnpBS1dzZkxLOTNjaHRyekI5OHB2a09lS2luclNvM3BWblNoRDBoVTVmK1BNcDV2dTRTMEU5Z1VEbDEwbEhITVlkQjhjSnlvQS9qTUFwMG9oam1mVW93WkQ2MERmei9SODlaMzlaTFdEKy9hc0t0VHBnOWNhVHJTbjdsbUlyMDBMZ2VMNUl4MmllMGtzd1loSld4Z2tMSG5BT2IwSHNaQUxEQ1BIYnVIZzVXUXJFbG4vRFMyTmczeko0ekVZdVMySUpaMFAwNlI5VmlqeVQ5Qmgxbysxb0d3Q0hyQ0QzOWo0eUJZZlhteE9WTk5tS3laZmp5N3JiTnJKd0xTbW14d1dEN291NnhaZDV6Q1RlSXI5aXExUVBmVDR3OW5vMWJObVBuM0dNU0RFQk9aRUtaclorc1hodVk5ZFYwanRRMWVVcHhoY0p0ZnpBc29CSHVncWhPNkxuWGNoZG9FeW13Y0hVQnhJV0tzdlBOMDV2ZVdsM3Z0ZVJTOVd3Mlp5NGMzeThZUXVkVDhiR1I4VStsck8xdkVyektuYURUL2pNbWRuRis0a1prZTh6Sy8welorOHdSSmhNNXhjS250dVFaSW4xczdEOHU3ZjlyZlFzTUY1K2ZSc2RsYmR6WXNjL2liY3hsUGRvU1lkWGtyTy9SWk4rUUVNSUJWc01tZEFtbDRpdXp4Q3dkL2F6QnVzM2IyMFVwUi91UlMwUW5aLzQ1N2NsZUV4a2FWa1g5aTFKOWl4WFVraEFWRGJuNk9hOExHSkFvQzMya3R1OVZGdEhZbEV6L0xtTmhVTTNVbW5NVzZSS1c0ZFJhTHkzNXhJSU9jb1JmNWdQYjd2amJ6UUcyalVDQVJUcnp0ZVpQanNjbmp5ZGJITWdWMmJpc2FrNDNXcFBuTkhtYk84VEViTmdBUkxXZTVrSG5kbEtCZkwzWDVETS9WVnl2WkJyMUhxZGhVcjVCOXZMMHdyRHd5WExFWUwzR0tXd0NMWFJDa0NGZmFuNUl1TXg1NTY5QzFrTVEyb0ZqaGl1QTlRa2J2dVB5OXlkY0c1elo2UVVkVmcxR3liaFFaNHk3QWhpRGZLZGNnbWlNdWFaR01QUEZKcDUwS3JnanFIQVhLSGl5QVgzZUVDS004TkNIQ0tyKzdLa1liMHdMWDNUczc2Q2I4bWkwN2F3Nkc0Z293UEdIaUVCV2lvaFlxa1VnRWM4dkN4VDFhMmFaZHc2cXIrTGs0dnJ6OE9XOE1OcDJuZ21pQWVqVkdST0FIN1g3cWl3UFlJVmw2cXJnc0p0MnQ0MVJnS3A2V0YxWFp6eDZlcTdhUTQ1c3FsQzZ5TWhUZWtQREhMS1d1cUxiUzczMGZCQ1hnVGRsNmxPckUxN204VEhzaldxS3NuNzR0S2o3NVpWSHdWMUg1NUJWaCttWDZuRTgzV3d1VDg5S3djemsyYVNXcHNDNHdnNDlYVlVaR09BQ0RKN1FUelpXaUJYSDBlRnZ2aVIrUUxMRHZJU2NjS0t6MXA0dGtnamJ2YnNiVXc3MlV4Ymc0b2lwdXFhUHZXR25oQ1gwa21lR0ZtdjNycWtQaXptTno2WTVWK1psblp5ZFBQWWtPYlFQZkZEVll2WUM2SVRhNS9FWStBbzBscEV0STQ2ZEk0ZWdRRWNiTWtwZ0daeFRLSURLZ2p1d2lqL3RPNnNGbnZtUUFhRmZuNGhkZXZTcWpwOTN5c3d3VVdoekZxSUtoZ04zWktZUFZrZHVZWkJ0cmdOQlpvdjJvV2J5UFF3aHVjcWRPTDBPOG5WRlN3Z3ArYWFSdjlQL1d1cXoxQUtHQ09HSTgxMWhiWHFpbmJ0M1R5eVd2QlQzTGNmZUtvMnN3Tjh6UVViUFFTa09UYkJDb3FxWTZoZXVEVk9tQ1pBSDBMU1VSeXVSUjUwTDZmZTVCMTgwdS9mRm9MNzhIMnNYUk55UFo0cnE1L0RJK1BrTUdKNEhkM2tLdGVKRzd5NjFJZmZuZnN4UlZFSituc0ZCY3RuUHNqckdaRmdIZHkzU0RxMWcxbmNOWXQzcHBaLzJsNnl3WElTT0gzRVJrMU5LcnZTd2FWV096Tk1BQlB4SVZLR25yeVFIY1AyQXRKNkJIb25xWDB6eiswTmxPdTMreUFSajdrQzFURjd4TkpHMHlzNCtVMTFDK0ZweXJkVjg2cHJ4blEwQnMxU01Oc3lnMmhjcDVYZkl6RzNRRmxmalhHQzY2UDUydk5oMm9aRFhQNU5oVEw2QW1IUjIyR2dhbjNLYVl5RTE0L3NPU04vUVdjbjRuN0krWUl5TkJTVitoTHh0VTdBZmxLTVhGa3ErcW5BNVRuUHkyVE11eWZia3kycEdsZDNjUzJONDNKUVZRSExSMjNwTWRTZmo4NTQyNFdLcmlOWW1LU3g5Y3gwS1dvWkZzTGZ5elpLMGZmU0h4MDNlUkU4eUVzZVFGTGRGWWxFdmZ1dXR1clpZR2J2YlhEVWdqRmFXQm5aSEI3NHVKRERySFVpNEZFRkEzeWM3VEFOeVZub2Qvd2prNWdIcWExc00rQjVzNnRJem5sUzlxb3VYMmlxMUZNakpWdlp1Y1JnZjVvZ2ZOUlpZREQwS2IzNmJzd3VrTzYrVzUrYXIvdFFUSjAwdzNDdU1DTmwxUnQ2b0RqdkNaejJRakR3NVFvMHZBNnVRSlR0TnVKNkhVRm5ubjcvRVZqNm5na3lJQk9Eb0hEbXVuWnlDd1BCNFBrWkFUUDFqWXVRanRBcnJVcWc4dmxuOVh2TTlVM3RoSG82UE02UlpPSFVSMG5iSGNQQUtJaXArMmN6K0VOOUJXTzBqbGJuK2NsbkJBdDlZRXh3cXN4NmYzeWppVmoxU2VITE1XbUNKOXpVL2FEOVc5alZRTEZ3c2ZISXphQ0s0Vy9FSnd6Rll3REVjcHh1RjBpSEpsUUNubXgrTHdvY1BrWjdteHorelYySlJ5QnU4VDc3aU1nNGJDUWw5T0U2aTg5SktRMlMyNWxiNVNyT3FibkFTTWhDaHphc1JiRkN1cnBUbXlSWUN1TVpTSGZScnpHd1BkTnpYTDAvdE5VNmRPTXRqQm1zR3JIQ2w0L0xwN0VrV09zeDUyQ0hkRWgwRll4c3NDOTNQdGJZRVRZR3EzeWlZd0hPTi9DMEtpTkNHR1pqbENVb0lXSURLbzBLVlFWZEhZTmduMC9LYmdJcmgxaURGRUFwQmdZODNTRVZDZGtGK3JPcGYwSE5GTmtxa0NLb0Erb1plSWxaeUkvd0Q2dldIbXlUbW45Z3ZZK0V1UTNEUkJ6MU8vaWZGNVQ4SkpiVlE1bm5RNENFMDNaeUJ0QjRMcU5JRzlDT3gremN3Mm1IbTk1T1M4RGlJUFg0ODZ0UnUvaG5KRHVUemxaRGUycjdXZ0xNbTFQTHFRbzlSa21CdFFiaWY1QlpvY2JIS3VVVlRyK0ZTSTZpTndBTTVzNjdGbHNPQ3Vmd3BuMWxRa1Z1YThjRk9obnFPZktqYThNd1FHeTROTDBGMUNTWS8yTUFPMk1DSmF4YnpMc2h5TmtXY3Z2YlhWSVp6OCtabncxdCtKc0Q4YWlFWitmMS91Y3pNemt0VGo1OTY3cGdkczd6VUkxSTYvaXQwVVRzT0lnNnNGM3lINUNQSjRnZ0RpQzM0dDJxQUZZQWdRVExBMzhHUnpQOEV0SEcxSS9pOXc1MVc5TXU2NlNMbHV4M0t5M0tYMFJzQW5NVkdITEhpeDZGYnlRajBDVWdYcWpvYnVFUUh6UzJlYnN5OVNWUkorQVJxQUFSVnM3YmZXYjcvQnV3cEtJYm8wQ2V0SXJiYTlhV1h6dUhpeGRSQUlzM0xXSVd3SUtZSWcrcS9OMHdRMXpBaUxRZjJST1VYQnNBWE15ZHJpc3RTdlhHaUgxdWVTODB0dHFkcGlMYyswaFN0L0ZNalNpbStaM3VFZG9aL2VIbXplTGxzVk0vUzZqRncxMU5PSlptZzQvSHpPclRPVjE5NlBMK1h0YWNCNkhYb1c0T1NBaW83REZyMzVuSnNrWDBrQVB2WG1idTRTSVc0THBsR2NkdXhhTlJGMUx6ZHljcTVRaTR6a2RjTGp0UjhVTXZDK01xRGY0ZjloWUFhTXZ5ZExqRytwU2o2VEg1SGlIeDZpTkNYdUliWjVrTmRDSTN6OW1kYTNrNmJIRW80amJtR05aZHQzdVMyci9jRUc3NWlFRHQ5d2NxOHFHdmQxY3dnaWhtZk9DbEdQSW5FNWdtS3VkamtjV1h5ZFhxd0ROd3I1MVUxSkYyV01TVExESHplZ0Qwbm93TlR0V1dpTWZiaG1RVDFiL2lMVWcvZGc4ZTBJZnRMdEF6OTBEbzNFUFlYYkJsUFl4aWZjSE43dzhodUQwaHZ4eGtjNml4Tm1Kajg4RlpMdXY0SFNLMHprVTloNDlvbjd2aktudmJMdk1pa082Uk1xMjJkbjdadnN2SWprOFozZU01OU1BQ3hZdDk5RWRCL0p5eVdobVRVMitxRUN3SS9haU9Jc0pqbEdpNUdCMnVPNDN0MDloY3pLSWVqaFhUbit2UmJxUXI5NmxLeWZ1b1BQZm9Ub1UwSmZsek9sZnN1SW5VZ0t3cHNxdThVbTNRdUllZVd3OTlKNDgxN3dUTEcyVzIxcmh4MWlSRURTd1VnVVUyU1lGSy9KM05PaHp0SFc0bEFvREhCejJKU2hoMW51QjVrQ3hFUVpLYUhJSzZ6VHRhRFllRFFyRVczYVk0UjBkR2ZzRlppVGY5VDlPemtaR1kvSCs2NXp6S1c3ZzRadGVJVkFGT1Q4bnZyWTNuNVJTRHBZazZob3FJUWJoZEhwTVNzTXBxb3hVMVh5STd3OVgzSmZkTUtwdkdSU1JmNnphbkNuL0NUNXRxZy8xVVA0Z01FM1IrMG1VUC9nbGdqdXB2ZzdnRmRHbUtVdUZKK3Q0VkxXZ3BFWVZnNUlFUTNrNVhDRlRvSVRRYmJQaVVGL3p2bDZrK1Buby9XMktqK1Q2czJGRDhuY0I0THlXKzJGeGhuMnpmaUxIVjFTNmxaZFhaS0tPaWpncHdNQWh5Q0RPVU1jNGFZRm5oOHNjYTdKbjVKVkQwTXNlS3lRcEJwTWh5VkpzSWZrSWNUVXBCd21rakxMbm1zZlUrcy8xdFExZm1YNHlUeHpyeGZYUFZZNnJJelkzWWRhMDFGVzBqNk5GMmZneVhZQ29WUUxlUHZUMUJPVStiVmpBUldmNlZEYTdGaVVWZGs2ZDdFajJ1dTIyMlNVc3V3NE4xSnc4cU9VeWVKaVBmUmx3Q2hEeDJQOGViemhtUkZaREJwa3V3alRHMHN2eXpKdjFxbGtKWWxoajN2cEEyb1BaMW1NZVdHeVBuRnU2dWhkRTBLQjNqdEE1eHJjOUNrc3kzeUJmVFFuTVNLVmkxaEZUM1o3Y1dhWGtVNTc2elRNNUJXVmNJaGJxalBVMU54R0crSzVXNm9Ea0VSMHRsMU4yRFl1UmxqUjA1c1RVYVdjZGpKTUdjaFZwRUN5UE55VVR1dDJ6cGtlRHk5NENOVHFhczBOUXkyaDBvNzVPcHNyWmpGTXBnUlczZ09vKy9QdWg1M2Jacm1rVjlWQmpaK0NNZVlXK0p3NGdXQWJYaU9hOEVSRHBSRnZWMTRMU1JCUXg1bCtEVXJBTWE5Q1FKV3dnWC9RbGNHZ2d2aVBDRjFCa01ESG1lbGU1NklWWlZaYzdYcURRTDZoU0JUTE5WTG5lWmxjcmlhb2lDWDVBTjBhS21Xbkh4bXJtbjh5TU9yaHhVSUgvMmZmVzUxczlzbk4yaHRwT1FlY3BNSnAvYWhJMVNHdGlMUEZYMnhpcVBiWVhTdHNpZHpGZVUrUTZmaCtIaWo1YklLRGxYbklKa0lQTW1pQWVkL3N3cXZCL1cwQ0lsczdNV2F4aDMrTnVwcURNSVp2V3BobUs4cHlucHlKNHB4VS8xRUxtOGtLUVFGMXF6VWJ2MWV1K292aUV1VjBQM0R3RCs2YVJrTERtOXJqSEFqaDVWbndVM0t0TmN4MVVSd1B1b2ZsQ2M5RmtVaWFwdHFXUyt1MGsrZDN6MEdlcWpOYUZCdjArMUVxaDEyU2lkYzhKOFY1ek5qZThHTjFLZUFGWm5udmdXdFRUSndmVVpUMWNPVWs2eGEwRzAxZGlQRURFK2RBZ3NDcUFZOVRUMFNnc0U3Wk02ZSs5Z1JidENSY2ozRW5WODhNVVRBSnR0QmFpQk5mK1MxVGlDcEsxMnkwY0VibVB5bDZzSEh5OFJKUDlXUlBpc2YvaTlqcXRXd09HeGdwaGFUN1UrTFJiaWR6ZC9qOGRJcjE1MkFtZGNiKy85VER5Q0YvMGExTmdNOVRvbVBVam5ISk54ZStDYU1mbG5NNjJ6ZEUvWHhvaGZ0UWp5Y09WcG9Hd3RNYzY1ZUJYU1VkRVN2a2VoaVBZbDhXODdYRFlVeit4Si9jS3ViVEFrZXZoODZaRGNtOHJVbkNRTVQ5UHgvRnZYRE9LUUhRc0YzWlRaZ0FGVEtzVWJya2tsNXAwZXFRSXRoSWFUdzc4cXd1RlYvRXlZRGQ3UTRZQVhnR0N4MWxMSlVSL0IyY3UrcGN5OVZJQTRRaERWdHF1ZzZJb1A0dDk1V05PZHg0ZkhIZUJ2OU1WRGQrVWM1QkpEWTB0NU1QdEQ2U1N6RGcxeEkrdm1zQVdlZS9ucU44M1JGZDVVOVVJTHMwMitXL2ZuRkJnWkxPUGJWc0JqUXI4MVdtZEpvdjBoTE1jM1NxMlNZOHRNdzhrZ0xHcXU2bmRGVTM3SytIVzNETTVuNmtvRDk1dlp2QVJJYmVyajZFNUllL3hUQTk0c1JqSVFLQWRyeUdpNDZnV244YS91UUgyN2l1YzRCMEdOb1BEWXJvTjVjcUJJWG0wVVNFNms0R1BpU0hMeG50ZHFDVFY5Z01oQi83WnNTeTZ1UGJsQWNnS2VwK0l4bDIvY2RNUzdzeVVkOURHSEtSaFpRMkkyQVpWaVFoeFZSa1YxSUZKK3pvdExYL1NaVDMyOGhVa3J6RUxvNlpLOGlRTUFBWTBCVm9ES0o3NGFoSTFXRFVVUXUvWVF0d3BsTXdadmlwQTZEZlM2S3YwQS9CZGVMS0xDSTduRXd3RFVlRXNUSnpHSzlOa2xUZGpUd1FqR3lSdzBRQXN3SmhSbW0vYVVWOFJYTDltczROWU5seDd3ZmgrZks2Z09OY0FZdXBtQzZFRVhrd2FnbkZaSGJkeDBtclRUNzFyaXFHZHBhODMvK24vZ1JlU3puWTJVL1c3a2FXN2RXQTBtRm9pdVBBZzFDUVl1Tyt0WkR1YXE0RHRyQUgyclQ0ZG1YSHZYTnVvdTNMV1RiMW9rcXI0VG0wZWJCTGplQkx6cXNlY3F5RjZ1VmJJVzJSZEJkeGRrei9WTnUvTHFDM3NzS0FHU0RGVjB6dnVjVW5DbE80VmdXS1RHZk4wc2RaWmsyeDVyS2pVM2NYZ2NCMFp5UVBKVTFyWitxcDB2NWpUYTRmWDcySUNuamRhWDVPVFBxek9aYzVFdHBsN1c1N2lCVDR0Ry9FOTQ1aFJjS1pSMlBjd1Z3ZzQyK2o0R1pjcEVzT1VRRTkyeVJVTjBuTmg5NWRzdlI3UXdRWWpFY0F3TmRBTjljdFYwbUlwOG01b3E5a3J4aGJsYmtiaU5ZT0Q2M1dQb1ZpMEMzU3NncTE0VENRRVRTci9CTmJkcFdTZjhzSEcyOXcxcTdyb041aG1JVEEydXpKZVR0d0d0N1BDUXVtbVFlSEVjVmtjR0JQbGN1WlRxWEZsNFdKMlRWQ1FVVnEwWFFydWdUakk2MDhtN1Bhd2d1MXZLS1pEQkRtZnlnMDM2OFNvaGZCUEVnNnBBcHZnZDhXenF4Vy9tZ0xNVmRlNmIxbTRaYXBnSFI4TEVQeVV1MytYWU44dVdHam5XVThXa2N4WFIrYjdCTWxBalowUjF2dXo5d3VnWlNyRmtSdDNETUtqZ2JtcjJxMXB2YkRwQ0tHbW5wQ2ZkWThkb01Hd3hYN0dkU0lyWlNRMGt0eFlFaWE1Q1lxbnBsSzlmaXcwM1Jld0s3MUFqT1F5KzdDdkhNWWFGVjFlYlJyRTVReVlxVG5iZTgvS0RLUjJWVGI5aDY0RFJQQXBuM3hsWGRHVXlYQU1NdFVweW12cWUyS3lrTEpmd2NHcllXMVdudFdXMGVSQ2hOckhlR1B4UnJ1VmVsak4vMFVZUWNvbHFKd0p4emJuMWdMZW5MVWZMVVhpSVM1dElCalpqNGNqMlFDY09ZRkkwNlU1NkNlWGlLVDZuazZ2ZTZBR1Y1Yk1SSEJORURjZm83aG1ZMEphZ2tqMmxsTU1Wb3djU28zV3JzMmk4RTJGL3VmL1RQVnRiK3RnN3hEcHJEUFVWbWJkZE5vY2w1VU5aYlRZMFJ4dzRtbVlJSDg2QWJzUHhMdkFUNVVIS3FtVzBvbFBYckNhQmF6MHNYSEdXZzJmWVpTUmlqcFY5VDhLejl2OUtqVUtQSXdTSHZlaHpYb00xeU40am0ya2RudVV3Nyt2OC9VU2FkRko3UXdkK3JvNTQ0ejNNRWJ4OHVLaGEvL0p3NDNWbzdKWm9GNUVBSmNNYmFWczVvWlNaajVpbUdTTld6S1N1MmtIOVhyZzFOVENaMEx1VjMzTU12SEQrYWYyanlncVltMnhkUEJuZ3NQeUtod21DN1Rab1Q3ZXR0eDh5L1RvcjNZWHFZNFBQSnBMZ0Y2TXNEVUFjc01zbXhYZU94Y0FqcitEVTcveU9UQ2ZLekNMN0p6VnZuTmFycmh5MUpWWkt4NVFRUlhLWndIWTVlOXNVQmlRdTBnU1pBNmcyR29DaVV4Nm0vTkN1RUsyb204WDk1UnBxeUZmYWxPQm5wK2h2dTRPbGtxZXdrV2l0RGR4OXRTOWxLRDdvQkN4T0xpck5YVDRuT3RvZUFYN2RnYkE0SmtzdnRGM01pTE9SOVFNQXM4ZEdoQU4rcFJWOTZYR1hCUk8yUTZLb1VwTVJ2QVF1WndVbEVzVTBpT3BtVXdQTnErS0ZvMEVsc2t4NXYzalE0aXV0c2tMb2JUVjVFaGFCUkxUVkxFMHBERDdaUlB3T2JxUEFjaDNHMGErSGhlbWNhcW82Z0kvYm90UWU5S1BoaVpORXBIM2NTTHFkZ0hwLzlTWU4zWERVeWJEWXN0OS9SV01OL1BkMm1QN05CNUdTS2hRZzJtdFl5SHRETmcxMUpwYy9PZ2dHNWdRdFg2N3JTQlNtM2pKYnREUnpiaTQ0S0pQM1d2eFJVcElFVUJCbkRqZTRHbnR3UGRCOTFGSC9jbm9CSkZUVnBOSHFyU0o3WkFUZS9PY05ka0Q4T2pQTjhsNS9KakFqeWkwNWRVamVnNHVhZDU2blROM1JwYWRNT3NhaWprQStxalRHbE9Wa1N4RWtpblRyMnhNOE1ycGJRN2xLdzJKbmkwR3hzck50MXY4TkpBamUzYnZCOHFyWW1lQVc2VUpCUFZnN3RFNGdwTk1nTnFYTnBaR0FtTVpKQkNMTS9rVGNJZGN0Zk0xYnVDYzBZcFJUbjROYzNKSWdMcWgrdHlSNE9sSGp1RTZLSmVaOEkrWlJsekxmOFlvM2dldGUxakFOb0tFRU13Z2QyVDF2aldsdEZQOVBlUjNuMW9jM3ZmclNPbks0USsrODJoWWdlMFdMc2xtMGc0eFJUa1liUEFIUHp2R1VwVTd0LzhQOUR2UHk4ZDZwUUJ2d25qeU9oWGE2TVdkUFZpSS8yR2R4d2RodkVJUFoyMFI1UEhmSjE3MmNWUDJ2NDdaOThWVGVGcTNqZmtwc25jWndZbHI4dVlzeEpLdzRZME9UL0pMa1dQTTNFN0kramVBTlp4d2d4RzdoQm9iL2NMVzVHbTZlUEI4dTVJUjNwMEtHUjZKSE4rcDlVSjlNZmtSMnRFaTdodGU2OFk3UE9ieWZjQ2FjVEpENzZWZlh1TEsvWWhVMm5tSVF1SDVNem51YmhRbEhWQm1RZkFTZW1XM2R6b1FkbHdjZURmUnMrSjFkOGJ2ZFlpdUVObEtFYmZpZElHeDBZZjUzUmx3NVRxRVNydzY4b1gyNmxwTzNxQWpheE5sdSt6OEN3QS9mdzFXZ21QZEFsMTdCcndWNzJtbHpieGJxaG4wYWE3MmRMSTMyZXBrcFRHZnRmY0IvT1ZSNE5IMnpHSklud0ZVSnVtQkFsdElxSkV5TEYxL3g3UmQvVGhSOTRCL3U2RWZ5Ym14WXdyZjl1S0ZBOEkvRzlsaUtQeTdZU3Brd3ZjM3NOSjh6YjRZcXdtNUMxSUhIMmhPT2RKRDMrTjdDWUs5MUF1c2lJSXJhcGVPK1JST2NDWVVSbi9iWkZRVEloRDFBRnkzM0FrRnpSejY1aUF1UXdVbmw3WWt1UGlmVkZ3bm9zU0d6NXRLS1B2emFVT24rb3Baek1EUExFZElhNkxuRklOQWRzc0xxKzJvbXJpUHJzejlBUjVueVFoVStORTNzWVUwZW9tUEFpOUs0VnNLUzBvMVB2Ukw2RHl1RlZKOGp5YjNGdjhFUStXbERLZk5vTHMrUUxlelR0ejI5OVljemYxejFiWmdHd1UwbzlyK0tjdGlPLzZZRDFPQXk2b09zS0RaU2tGVHJtU1pWbjQyN2hhQ1VIWUZpZ2FIUEIvUW9aRzBvTU42UW9Za05QTXhNbUhXMU53bEhUUkRNaDRsOC9BS0ErWE5ZVTkvS0tpUmFtQy95V0syNE1YYWZlTmF4OWNVT1M2YXkxNWc2Z0xQVTdNYlVvZ3dyNUxtdU1hcCs4c0c2cmYzV1lFZ1ovR1RLTGZqTER2Q1VHa2d5eDFMbGovUHBwWVprdVc4QkY3R2ZzcWxvZW5LaUZjWjFKY3FnMGdOU2pRQnowUW9UQ2J2YlJyNU9aNVpyVjJxWmVwSExOT2d5d0pScmtCNUJXcWlqN3RBNVJ5QWZtQ05wNUlVelVZbjY1S2dIcUFXbktva2M4RkdvWnh3OFhtOTJzKzBHb2pLRERTVFNaYk1uUHd2OUMyamxMZ0hxdUEyWnR6Z0NNOG1nTTNVY1BHalZFNndaSG5jSTFhcGx1VzFqdWJubEo0dWRiSDhWSXRzUENxWHQ2MURtTVNiR3VLZkxjYTBKUXV6V014V0dHdzNMWllGUXBHZ3F5Q3A0OWxuTFZHcG5rQmJoTGNGbzYrd0Y1ZlVKU1RieWZmTVJCOGxRemlKRGxLUWhuYS93ZmJKU1BENzZMOGFqS1d6NEJhWndiQUV1ZVhmbUFNV2Y0M3E2aGdtZUZaY1dQUk1qckwzbUs0QmlZZTQ3R3k5M21MeWZFZlM5S3ZjSnZTbFV4Ny9MQVY0Mk4rbUI5cW16ZGJwVWRVUWtvZlhwTzMyTjYvM3oyZFQ4bXFsWlZhOVlrMUFhNHpMbElZeklkczU4TFduNy9Ca1RlNG16YXB1TjJ3MWY4SkpvTnhEd0cyVVJxZlVma1ROZklBdHFPRlJUUzZ5UUJPclJMSzVSV3BBRzVkU2R6cHdxVXdjelkzRDhPZ3BTNndDOFFDNVRNVHZzeG9ycGpuZWp2UzIza2dBekxlMDJnN0p5akh6YUIrSjRxZmNVdHB5TWVRY2xadXJocXpobHg1cTNtNXgzMkJDdWNFUlJ4cHNHSEI3OXZnTENUd282aHV1MmcxVW8zWG9kUk5Fd1p0RjhmazNOeGlMWDVkZTVBUkZIMExmckFsRGxJd3AzUmNEMGxkM1hoYU9Id0sxYnp5SWdUZFJVSUxDV3RMbEh6Qnk0K09tRW9wbTVLM0dNeVJFV0RQVmxzNkV6OXllcVhNSS9NVXYxcmJwTWVGalAvSjU3emlJbi9KemlxaEZsM0NNeWJJY2ZTRFdCNG15ellVbDFycGswcjI0b2xEcXpYbUJPZ3BQMUtHcTd3eTJiYlBoZ3Vvd0hnWm0xaUdTbjF6b05NK0h1c04wbmZtaUtla1hHTGMyNmk2bU9tc0Uxa0ttTHNMZjhORnRiRnlIMUx0TythMUVZcE9NaXlDNWZoKzNOd3VYWUh3R3VZZnVJVkFlSEZ5N3hyQUFrRWF4RERXbHU3c3RSclNkMnp2a0o1V0s1NzRNdE1qU1czS2RNd1RSVFFGaEs2dTJpaldpcGx3Si9jU3FOdWZqQ0NuWG1PNDZ3U2t5MmtibnNRU0RGT3d4ZzA3NmR6WWxNTDZUbkN2bGNHcTV6SjMwT0g1VldGYVI1RHFuUUlKck9WbzBvMUh2dHpwdHoxbHlXZlVNbW1FS2pRdnMrajBaa09scDFWL0ZsVEl5NHNucmlhWUFpcis0NFIzSnkwaExoN0tabC80NzRyZVMwNFhuc001VEl6VDEzdUdFWVB1NHN3eVRUNXNRTFpHWC90eitRTkRiRWVXTzNtbTZhSU5vQkw5c3UyWWh3VG8rdFBCTndjMFNqZjJ1MzI0N1FHSzBnL1VhakVKZkZzQjlSTWs1QjhMK1ptOWZKVjJCdjhDbitBWEF2bXZrNXg1R085aVlUcVpqbHZhY1ZUZEdMVFdPMmZ5UW9XK3BST2dybzFzMFB0TGFwazVaS0xub1g2ZjdGMVl2SEI4SUpvNjhUMnRBVXdpaHhiT3crMHh1QlpEUVlkaHdiNzhDQnhEQi9vYnVWME1hY0JEenVFbUVXMVdqMk9vK2J0VkE2cjVKczEzZU03WUVCNHVGZmRiZHMxVk9sWDVkZ0dYcUtCV2dNRlVNdzZCTlNGS2dQY3EvVVdmQksxT3NXcHIzOThubDVwZU9yK0YwZGNZV0w3RXovTUVtckpkS2tsS1VSUVFiakc2bHF2L0l0ajNwU1JoWVpkT05xMmJDSVI0Z0lxU2k2VSsybHEvaHpZazZFMTZGTzI0TmZMY1Y0SUhGcjlscXhoTDRzNlA0eVFCc0JlOCtjRTdUOVRsOTJia0JzN3VNdUZ1dGVtelBBZzR1YnBGVlRCYmlzMEZFM3VRMis5bUJ3M0o4RG5ZYzNtL3FWV2llcmpBM28zcHJ1dFhZTENhQTFSYnJJUjFkMGFtYlVGWGV2ZCtPWUZNV0FQblFPMTB2UGVtMVZHKzFDYytmWWRMWkpmNUY0MnU4U1BOa3NTNnZuMUhyMmhVeFluMThSSFNBUERLcFFZOVk3NUhRT2VxcjVFd0hDQ09JODVneFVlclAwM0hzbndRV0ZUWEt1OUFsdHJNYzNaanJjOFMvaEtrSXVIT2ZDdnBNdTdhQkdpWUpOQkNzaEVONXVxS1FpcGE4WWFzblZML1FrM2NXSGtuN2JYckQ3THQrNFhUa0RMSktzZkxFZzJlbk9JQUJRbGZkMlpMbEVmektvZTdZOHJ2M09Na2duSThlSEJ1SDAvT1B5SEU4ajVBTTJCcUJDZXRPNkdaZ1k4aGg5QmVZWUtZeldoMnh5bkVvMkptTWNlS2hBeTkvTjJoQm5GUDczempKL1RXS2VKMlpBUzdIVTRBY0tzNWtWTDNNODFKMnNSTEVrenRUM3RkK2ZBalhWc0prQWFocGJFb1F6Zks0QTNQWE5xdzRxUUJwQ25ZWWNzVmt0SlpnVXFndmRrUzRVRldwR2dHaGJmUk5QQThJSkNGRVJDMGdvWk5nbHZ0M1JIN1pwSzVrVmgvU3FvQmRoZjlQMjc3cHovRnVxa0lCUDEwNU9aYWxiTHM1cnFyR05zMjRZLy9pYnM4RXRpZ2k2ZXl4amdsZDl6LzBCZTN0Z2RYejQ5TEJKQ1JQNi9semdaSFlrRm9jOFo0a094MnNhUVBjUmRVZjRTZVgzKzBsbTVSVHZSQ2EreVVWZnJpNUZuOGZSR3BualFkNGZGaGlKUGorOTRONVRyc3hEa3liSDJFZ2M2SFMxOGVoc1ZPYW9zNkM1MDJKcEc2YnJmem9lajQvV3k4YXROeTFwRmJSN0lHckRqc3Z4L1JzWWhlUS9NQWNOcEFBeG1qbGppUjFOZmlZWUc4STYvSXJDNXVjT2JISTgvdTdWVjVpMG5Pb2pQRmtNZmhhSjJwVWFOUlQyQ1Y4dHQxelh0anA0a1hmZUFoYTlvYTRnbU1QUEs4T3RsMllQd2tNc1hQaDQvcW9VSFp4dWZjcmQwUHR0dTEwU3NSVGpOMVQ4M1FNS0VoMXNoOGJybWFzY1lkcTFRbTBSaVVSK29PVkxxb3F0RkxnbmNNQks1djVGaktpWkoxMmhlT1BPcm9QWTg2MGk3UG9lTXRMRlljWmk4OTBYU3A0c0J3OWdHRUVINFRpWXJFMEdHL09JZm4wdXN0cUdYdFhtWXFZZzJ5UDg0eElJKzNRdVJKNUhXQ3V5UUl6blR6T3FFTXFPTmJSYjFNQWdPY3dIOWtwVjdSelo1UGxCZURnM1F5RitUTjIrM2F1bUo1MUZsOU1zQkhxaDNaUWlJVlJyYnlXMDlUaDcvRFJDSzlua2RaZzIwVnJleVZQZDRicDVQZWpSQnhVdEpNZzE3WXNKK3RsMnhpWXczL1dWNGNhbkxESnZMakF3bUVOWE9RTktwczNUUzZlQVhVaGtBNTdEanhtWG9CRFBsdER3VE56TkhnV0FET0NXeGpZaDMwNC9wWDFOMThJLzdSVVhtN2l1bHR1RFZCam81UHBsUmlOOGNOTFFkL0RkeDFyejZWOVRtYkZIRmhJR3hpRC9FNFNaSTlOaW9Ka2VGSmFaK3VZTkM3Uk10UWgxN290QlhzUWJsQThwYW01T1BzNWhmcUl5UFhEcUNTSGdycHhwRnlPQUNxRHVmTlR5cFhYUVFlVFhzTTQ0cGJ0Q21WTklTVk15L1o4S2F3RkZ6d0d0dDdUZDhNMTZsbkVOei9SNEkwTXd4dVdzZk1hSm41RVd4aTNZTXhYYTY2VEJPMENlNzVVWEcwbjBoSTdxQUhJUXV6S1ZnTnp3WjVMQ21Yb2pQVkNPaDVBb3VBQkwwR0l0Q2lmVnI0dVRRa0JqS2JqeG03YWZLdjhOWTZua1dpZ2hKekRHQmpobU9xSjJHNkw3UkpKa3FuSHRGaVZ3Ni8wNXB6aFE4SVQ4aEdJMVN1UDZtdWVlVVNwandJTXd3QWpzRFhSWlhhRjBDRWlqS0tRYzgvSHFpa1V3SysyQlpIb1djUGd6UnorN2M4UjVxSFR4UW1ZRlN0b3Q0U3NDYktBTjZvMDN0UU5teXJCNG8xSjZQdjRsN0htblNwLzUxaWNPUHZlbVVyRC8wdDRsbFBFemNRdWZxeDlWWkpHM25pcDRoV3JZdmE5SFpURVhEeDlMUE9QZVhzVy94MnY2aFJLdlF6SHpZZkpvMTU5TUZvN3VLZVdKdWZsZm5OclNqYUxlZlllZm1QSkk1c3VvMFh0S0U2VlhIQVczSjRpVVAzTTBJZ2RJcm4wNGhaUnhYMGswZjVHTE51T3JJdDhaU3JKUFlyWGs3RlluT3A2UXp1U1Z3WWZ4OHZVSVV2cHRoaWZXcTFuY0FhNkpCZVlaQ2dqMFhWd3VXU3lJUktkTVR4WVcrOUk3bmhheTRaTjJiSExpR3dHYWZjeC9yazNaTE9uL09QM05tak1Wbld5RlZUa1BXNUJTVk1Ub2RYTWxCRUkrSDcwNnAxLzVvM2RQODJYRGFOa3MvSElQV3pCVHZFUURka3FGTEovUkZpNEpiWmF2c2lLdnpaVVdVYUVyVHJhaHFhTm1NRVRwNmxRaUVMQmVhbzFzN2ZKWUhSNmNlMWNIQVYyNFF3OXY3L09qOTBQSWE1amJqajRhVHB2eWgrK2RYeUJ1aUEwaU1WVjU4RUI4TFhhMXpiKzZzVUtSUUYyYnV2ektZeUNnWHE3cE9TeUtyN0dXZWNqbWhsdjZyZUh3SXhuTzcvc0pGa3FCMU14UHh4bDQ4bkFYbEtsbXNET0Z5d0R0VElxdnlMa1FnREZhS0kxektrSkVnMTlvOEdoRStqZVJFc1BsM1RkbEhNTTI4NC9tYVlsaS91NE1xK0YwUE5KUXdQMTZBQXpBRU5vdUdOSEg4amt1cTZ6NjJkSTNQWVlNYzJrSExnYTJ2SkFnK1l3bWVMWU5WYy96UThZdlVGZUNZK0JaYWs1VVUwNnpiTXpNQ25TNE9CaE1CWFFINWUxeFJFbDVhbHB5c2lxM1A3Zlg2N0Q2ZmFDd21PVVRMM2lqYkVOY3pFbzFod1NvL1dXTjFMZVV2aXZsaGx5c3EwSVU2SSt6OGI1bUNXWmpKeVN0Tkx5NE43OFZBSGVyWjFJRmJmajErMW00akQ1dTFGYUN1a3BvWXBJa3VQWmExVjQrdFVFVTVQRjlPU1hLUVZUT3piZHQ0R3BrU2txS3dRTGhQZjV5RlVuY2V3RVRoa2s1NUROdUJXVHoxcW4yK2lZdmdibzB3RTZxYzRCT00xby9ra3Yyc0VUZWtCRlYwVWlpV1dGYzkwcGVhVE1vaWoxOEQyZ25wcThDdnlvSStKYk1RbnJicEhyWjdCQlVhVFNhekZub2g4Y3dsWHpOcU5EcDJvQ2ZpYmNMSlpKZllsWFNIcDdscXV1cDh6WHpialJaNDJQclBwMm9yM0JqL1JnLzVKUW9IRXJPdVE1VGtGYkxqaHFBeGF0N25aNXhUcUdINzFNSDNlUm9OcTYxOWpMSEhEZ2kvOHRXRi91NGVLcXV0a0dCbGRFeTN5ekNUbmE5YTlrb1ZvL3NaTHNvYmlYcmxTcjNTNjNCWGRVZ0RyU0pPSjZvUTVoT2RCbmRSZFZGck1WRzBmUkhTM0xSdm16MWJVVk1wQ0ZJMFg5eDdBaXRibnFiT24zbDZWcyt2b2plVmdZZGU0cGxoZEJMOWZyeDBpeW9vdFUvcHNnZ0JMeGEwS1ZTc0lIS1MvTE9EM3J6MFN3L2FxSjhxVStCdmlwcUF5VFJXVWttcWNtTFdpZEY4WVYveVBEYWVoWUwvT1JtNllXa1Q4OThWTTI5N283aDdjWG8vcjlxTEVQRUt1Zy9GMXpka2VVNWlDaVk5RmJJSmtMUEhNVCtMbVp0eHh0MCtMTE5SdStIdkt4TjVNVXUxdkVpZTJTbVJkdlEwYjMvUlVSNGdqWjRHdWVvUlJucUZ6VVBvRDBJSDhyaVMvTWs3cVdtSDlFNGE3VnAxUVdPekY5WFA0bGNuYmV6TkxpNU5aeUQ1MEVETm8vd0RqRHRFL2IvZFY5WG9wWTZleUpaYVB1R0xuUy9KT3dXWDh1N2hiWW9Kb1FJRVZnNUZoZ2o1QVdBK0NGN1ZJMmFCLzNubEVQVXBzRGdLVUt4dkVWOEFpSjFoazF3S2crdWRpSXlueVRXYUV3eWp5ZWIyczI2bUtINGZxeVpiT0ZWRVNmU1ppemVlREdBSHFaUk9kRlBDSFhLVlVOWmtvMTROQUd2N3VpU1Vsd0s1SURURkxYSTN4N3NUSkJuMnRDNWoxYUloNzhtR3ArUFNzcFpBMmlhalZuRUhvaWkrU2JJMVdIYTliTzlIeU9TcjB3QjZUazN6VFZaM0RkK3hqdU1pVVFaR3ZLQlpMQWVFeWtpd3NUTm1oUUI5cmIzcHdkOXh1ajR3bmh6VE94QW9wUUhrc3FsRGtkWUtFYmluVnFMZ0JRekRNMU1SUkJWdk80Q3pPeVAxOXVHT0hNUGdpWXYvQStjUlNpcHZzeG84WThVS3lIVG44WnFSb1JVVWw5clZvMTVoVWVBeXFpd2N0aXp6ZEpzYkdoNUpuZHgzMlpJbURWQjNUR0lsYTkyS0hLK01WdjhJNElHS3BvNWtLRWhkMDNrUkNqRU05czE5VGZ5Ui9NZGxBYnZiSkI5MGJEK2g5ZXAxSzA3Ry9yL0tybzB5dytBWEpjMmlSWm5uL29Cd3BvQkdxNDFrODBOMGpJVGZMN1JpQnh3MUU5aHN5bkpZa290MTdjeWtsclM3Z3pXQ3pub2pLajM5TGZvaXppQnRHZ0xzSkk3cEZpS1JHajBQTFBFWDRzWkJKSUFMTHlEdVVHMFlkMi9UUUZpYUNyL0xScVlEelFLYTgvd2wyT0FOWjViMGI4dHIyZnVkRkIwUTEzR3ZHM2t6MkU1c3JPN284OUhuRXJKazcxcDRlSERxYTlFbmcvZHNaSUhwVTRYcnNzOVFXaU81R0JPK1lYc0NYemJWb3hUTVAwSGRJZGVVem9tQnRaSXc4OEtyL0F5Z3VJZnFPWUJ4bmNGcHFFbkpVN0JtNmVpQUp6MnJvc1hvc2lIdGlvc0NZSGltMXRiTzgvT2ZEV2FMeUF2MFhtdGg5cFNRN2I5NlJqRXgwTjlOMGw4L1ZwT01LZzVSd2FFMEpOUTkvdDVOL3lRVVlGZC8xSmlQcG5hMy94RmpPUFdheStPZjRlQ2lMVkY5ZUttYS9uTXdrejdmNG90S1FuV3o0ZFFwY3hRbWJ5cGh4aGUvVXpEL1QzWnY3SGg1YmRpMXZqYmVab1B2VDh0L284b0l2eTBqLzJUdm5HNDd1T0Ztbm9ITEpzK3FOYlJIY3M5My9uLzlCcDAwWC9BVU1oSGZraUx4dktLajBsMEhBaXVCbWozRmxxcVJVSVQ1YzdwL3ZDTGJwaUN6YmUzemFicXo5WCtYclhkWEpCZnZpRFBOWkZ5ZkJNNEdtVWZTT2JIYkYyb2EwaDY3VGRybTZudGtjaVZOTmJKck5uTVZONXo5cmU2NTdyQTdzUFFEbExZTHpkQ2FOSkVWM3VhK0l0R2IxVlF0SkdleVZXaWh1M3hacFZ4QWpURDRLbmtLcDlaU0M5MlNjdVFuQ3dYTTl5VUNkT2R5U3hkR2ZmY2VtMkM0TnduV3U1Q3EyNTJiY0tNOUNUSktaVVhGalVGSk5qWFducEorYkhlcDE3aUJlQkFQSWxaM3Roa0VUMmxia2RoMnFEZDdSYmduOTl2d01CZGozSFdJTVNmTkhiN2hEUThGQVREVWhTak1PZkxBV2lkSXVyQ1cyb2ZJTGlwNTFFcDFRck5YN0h3VUtLbVlYMjZmaHVxWGNnTWNkd2RMaUdXY25YWlE4azRhSlpzQlpPOEhWVHFYTGRIdGZLeGRKVmdIZDVRTmNha05hKzVIVDdNdDhNTFZjZE9xYVhUY3R2dlZVaGNvUVJ4VHVSNFQxU1JadWllSnoyajc0Y29UUDZWQUpINGcwNlk3Q1FHd0ZVK3lHWUd3elA5bVg3Nzd0V2dmcmJ6NEptK0FTMjN3T05pamZCRzV3dUxTdnhvQ2lNTlZuR1ZIWlNTcjdBVHZyYnlVNGRnVGJUaDRsWFQwOTdWM3BFVVF2UkJzaGYzK29TSENXVUlFUHNGV0JBSXNuUXRGT0pZVnhoYkxzZCt4SVFrMm1KckFiS1JvZmpoRDJhcnBOWmRPaERnMFZrdDkwbmtRTCt3VlllWHducUVOY21NM3p5TkFjR0RMaG1GaGwxWTU4NVdxWFRqRHN6WVFpUHQ0TzNQUWJXaTI2Q2l2bW5PVmNmNGY0L1FzRzZsd2UvY1JVVDZXa3hwVEs0S28wQzhlR1M0Q2l0SEZNRGpSc05rK0pTMHJVOEE2NmtHTFRWK2xZR3JrNU1nRGp5WTcxUW1jczZ1SGJkUU5ua0Q5dElJanpaUjlTclUzNVMyQjBhbC9mZzZxNnF6TmdqUHdWSDdmdVl1eW5iUjdEQlpkQXFMREJLYjcrUHNWQVMyb3RQU3E2UlJhVE9YdlJLWUgyekRDVDcrSS9uRklaRThQUUVQelFJbGp3cUU0ZnJhbWoxUENFWjR3TjZNb0x3ZEFkTHViRWp1aUpialVwLzloMmNvRStJNGJRZnZtYm96TUY2TUgySzVEcHAwaGxvUWo3c2NKVjNXZVIyK0swT1ZhZEhNL2EydjcyYnY0SGdSUGhrZFR1QklnNHhpNkJJc2R2UjBML2FPV0xxNk9XbWJjbnM2WXR4ZUdxbkNGa0hUakdPUlplSUhBUlVzZkZPVTdqSlUxenJuN3JXaFVHa2ZITlcyN3Z1UEduaU12VFF0S2NHdVVXMENhTDBITG15QlpjcTdEV2J1bVprWFhGT3hCaGlUZmo2UzZqNkpGY2tXaTNpMjJQNlFOT09UaVV6MjFzbmlMaXhlOStGbWZtdGU3d0t2RXowNDQvbXNzSERqc1cwVkF5UEZzNkh2ZU5XK1h1TGNvVU1tWmlqLzkvMko2TEFZMFdPZm1iUExCallSTnZaTU9oYmYrZ2MvdmlJV2ZwOW4xa3M1aFN5dk1FSzlkcmFhRWtYRWh5clZFTmRmemQvclgwL0syejBIMTlwaXBuVkl0SlpDQ0h1ZER3ZnZ1dXNaa0JqL21PeHBJNVBBNFNNRU5WOTMxQ2RaUyttL0ZBSXgzN1ZZOE82YWxwQnRFSS9Ob2RNZmxiN045Yy9DQnJrT0ZYOWYyTEN6dXJRTU5LSlM0VFNJcGQyc1ZsRXZJTjFHTnZTR3pmVzllVi96aUtRcjVQaFJLeFU5RG4zaGF1blorditBelBaV2JlZ3NyS20xNytUNGtrQkk2S3RjalJQcjk3VGhrUlBZVVdGWTVFR2hiZXFGVXcrN0RUZVBRUTcwdlBZTVNjYU9CQXZxWTNETDdlRmI1Y0ZzbHoxYzg2ZXZESlJZU2p1d3loWm5wYXgvYndvVzRKejNEUEYwVE9XS21iSHo5ejBRYjFGaDcxRWlneERLbUFCMFd3SlRMZXExcCtOTVdUM2ptRHNGL2VKOXZubjJkbS80aTRidVNOb1V3bmJneGgwNE5CcU0xdksyK2VlY0NGRng1d0trN0hSMThmVjJrN1BQNCtEd2ZHWnFEL1VrRTBvYllyWjVzWEZGQ1dBZ0ZvKytTaHM1bXJKWHY2dmtqRGlScFVncWFLTlhkZzFVd1NEeGo3NjdCd01vcnowdEsxVUtGRWxFUG5ISXoyQUxraTNyUC9PR3VheUlxenAzc3RYWEE1czFreVpMcmdoRkhzVzlwL2NSZnU4VXptamNYSktaSm5TVTBiZnRzL0NmT1VQNmgwbDQxYThpVjRra1JReVRQd1Q2OTQvWFI0MDFscTVNZkxVZFpHcmRTbElEQkQ1Mk05cFkzd2k0M0FnV3QweGE4SUkybVpJQUYzWXRPQmlOdDJGVGU5OWdyL3ZhTnJWcnBBMkxneWcyT0U1MFhydytSektJWndVa3RIU0VEa1V6OTVSUHhkb0hpR1NoV3RoSXVZem0wVDZzQ2YwWmZRWjI0MTdINzJENE5xbXhodUZtNGQwa1licTFXVmhyNUFTNlgxMEVXdm9SUFpIbHJ1aXZ4Tlk2Ullucm1TbEJMM1orVkxwZHNRTjAwK3BSa2xvRXhBd0NrazZHVTIxM0dEV2lVc1pQd0J4OE5YcFJsbkZqZE4rNlYvb2E3d3pFY3cwZ1ZGQmhOWVdQNTVacUNDTWtNL09XT01OQy9Wbko5K1kxWE1jclBoNmlYYkdnNWdVVU9hWlVZM0dRdk83LzRkVXYyRGNmTk1NY1BTZXN1c1ErRGpRYlhRTmlqM2gvRmQvbitTQ0F3RU9JNTZ0YlpReDB4ZjIrdG9VcTNieHhING41QWowZXhKWHM2d2Y3dXRoRWs0VWdubEIrc2t2cVBqalB1WEp3V0tRWlo5aEZ5RDRtNXVzUHdoUFBaa1Yyclk5QmprbW5Ta3ErT1Vrd2JhbnNjV2dMWG91b0xLM25rSitVUEEzOVVEYWFuZklMVklqeEtldXI5TExaNnFseGdNNytDMm1uZFE3MHozd0Z5ZXV5dGhWcHdHRGZ6azJEck9xSXlYK3ViTUkyaEdpREFUdnkyY0FSbEtlR3hZb2ZWLzBiZURVbC9MQUFiMStxTWVvY3N4N09UcEhKekpGNjNRV1hiVTBWSk1CTE9nQUI5bkZURFZMTFJoMW9vR2VPVkZPcW14dUNUcThsRDNwdEVHTDRQeXVGbTNhaWZPYlkyVGlLT1licStXRDUrRW5jZ1ZEc3FvRnk0dFA0ZlpTQXg0UFpYZllJOGVrbGxoeE15bkVmQndPczA3RUlJWm5pTExJMFJ2Rm5pckswcWYrSVZRYit3SjNJMEVqZ2ZSNk81K2pFRThFT3RZMURLT3cxZm1ubFlna3BBb3NHeXViVC9VY2N6aWRvYjc2ZEpwY2J1d2Nsdys4TFhNQXhZTGNUVW9iSzNPTUNPdzZMYk8zSTlpQVRHNElhc1FOZ1ltcFdkalNkbmxQWHd5aGIvY3VKQVd5cmdiZWhVZHpjRHhvdUx5VVM0blEvMmwwcm5nS1hUVU43ZG8weGZhWFV2eHZERnB3SjROMzJaMm91RGNOWG15L0F4Z3NBcmdxRVJVWkM4RysxUXR0WVJZazFwWDZPVW9Ga3JjMlpRWTZsY2NPeUhiejN4YTlnSVhGa3NSeFU0Nm1ETWpnZ0R0R096b0xlL1NIS1NFNWJFT21rdWNlTlJDVVNLUkVoLytJbGQvQ24vTE84VWRMNWV6QWw3VWN3dE9iN3dtWFVDUk0ybGJMbW9rVlhCK2wwV3FRZHI2Q0NUT1p4SU5xQ1Yrb0czVXpHT3JrY2hrb3oyUlpseDdhSEc3RCs2c2pjWFJZa2hjckNHZk9pano4OTZhRkU1aDEraWl0clF6anlMQ2lBWGd3YnNTVUh4UUp4cTFra2dZZmU2VmgyRlFTbjkwQ3d5ZU9ZTU1vRGdNUGxURGNKTTFVbTlYMll0eGtTRkdXaTgwOEpMS2ZSZkcvbmFlOFA4djBUUEkvSHlzL1pGUHV4aS9OMjA2NjdrbXpCSkNKVC9jaXJCWGVCSXM0SlhrWjlJK21BUFAybTcycHpwQzVscDgzYUJCOTBpb1JDTUowV3RSUk41RFlHYmsxTDk0T2IrNzNSWkhhc3MwOXdkM2IyWm56ZDRIUlU4V1dQYjIyTXk1Mzk3cmxpL2tiRDBQNlRwKzNXRUxHc3hUcEFTRVZldzEwUlJIU05NZTVUWEozVUFJaDlCSms3a085UFArb1VpVWNNQTBla1grS1JaRC9qcVFIWGE4N3V1OGNOc2pkYzUxNUlGb0VvWlBFZHIrdjdGM1A5NGZsc2kxOTBPb0NjNXQ4aFZtaWJRYmlrT3VVOW5rSVpDVDIwUnBMdFIxUVBGeUNGMDE0L2FyVi9IdlNIUmJid3dJWThQaXpCSnRmOXdBaHVhVERMWGZzNnhWYVFoeElUUTQwVlhKcFJFd01GSTlCNmdZYXYrQWw2NUtUM2dDVnRRSUEyRWhhamdWcjZWNFR6ZWhpZzdNVnlGV0ZoZWlaQk1MQzZqdG9LTnFIUTUwMG9wZE9reE1VZGZwM3k2bkhvNGpCS1NwRjB5cWFtUXRSMnJ1SlZ2Z0EyaEtZZjkwemFwTENjVGduSzZDK1FFWFlCOVJ1c1pSakJ2RkhqZWdrTFpMZndLeUNiOW1CTGNkelBMUjZsVHI1aFR5NlJwRnE5WkllbFR4SG5TOGdqWWgyNXpnVWdBeGw5M1prZk0reU1RY3E0aXNhNDFWREY2Z2lpZWh2c2tKMFRRMXEyaFJVbkV0VTlNYjB1RmNCd2NWNUdIeXd1RlM1UzNBVHhrQWQvdFRwN3hnWHMxVHBSQmdrQ1dRdUR0TnQzWnFJaWxvaStjZHlxYUxwTE5XdXh3cTJUU2c2RDhLUjJqSmNxOW9VK0pYUVFub0l5eTU3VDZRUW1VR09sMzdkWHkxYk9oTEo5TVhFZ0tsdjFlMFBCUnRTbVMvSVRPTy85dFVoc3hxajBZMUtOWWNVQlh2RDd6V1VEbEQ2YkpFZlp2bjd1Nkx1clUzcTFqK2QvMDJFcFpYalg1Ym9zTUt4R3dKQmd6QUR4T2pWR3FWVUx0MlgrWE85eUlzMmxoMzlpMjhCRmFZWEVPay9mSmIzOURjT3B2WWwrWThPanlCRVhYOFFsRUZqeDV3dytuTVVOcFVQeEh4dzc0L1NjMzJ5S3BMQW4zY1hRWTJWdG9mZlk1aFQxb0tVZEdFSWZVRTNKWnNORVY4aERaUmtRNFRoR1VTQWw1SzUyRmhmT0JtaUY3Q24zRVAwNEpLSDZ6RXZ5NUpRQzhBN29sWmJ4bzJlZVdUK3M2a1FPV1l1bkJIc0V6WEx0SEJ6WWVpbFNmYlgxWXNMbms2TlQ2OFRYa0h3Sm95NXhjVlNTR21EMDRBcmd5U3luK0ZVdWMvQ3RQcGRiN2ZTeTdsS3c5YmY4cWxFWi9QTWVPTjhDZkk1TFBySUlPOFd0cFAwQ09nb2hWYkIrZGRsTjJ6TXZkZTdqYjhPSFRDbFBhT1d5T2VrTEJVTU5zQXBVSjZvdlpGRlU0ZE4vaGYrQTMxRnlseXp4d1VSeFN4Qkw5M256dGlXbWNGYUpXamtGWXR2Z2MzT1JyNXFKK1VVVUZMQUorcFgvY2MwVmR5ZGVwT2dGQXNqNUhTbUZlVW5WWHd6ZE54Rm5yeS9GMi94Y1l3ZDBNY0c3aVVVUUFqU0VFYVJNamd0NVYzUGQ0OGowb1gyYXk3Szd2bWxvcm5HTnR1a01Kb2xyUXNzVm1LMmhpczYrcHpmYXQrUEljT3VIUndpUDF6ZDVnVis5c3Z4QUJxSnF1SmlyL2RTSEY2RnJPa0dxdFlFZUlwMUhCU0YyZU9rT2pFVGVqQkhhQjFoT2tRdHJRRk1XdnhLSXo2MmNPOUQ0QXVOKyt2VFdnengxNHhFdVBvd2U1a2kvczNSVVdJWXVjWnY2S0hST3F5dzcxVldmbDVpUUwwdHZvcGQxa29obWM3YWc4QW9XL0kzdmJFQmR3OFZkKzlqaVFPaG1IRmROc2ROVGtKTTdUeVFONVl5OXVDSUdTdWNMaGd2QVpQUFhkaFdOaTZmckRBbWFTSXM3SXBGN3VML0ZzczdjRDBnWkRtMjRRUEFlS3NabGVPM2lyZ0FJNGJNbzVseGM3dm1kbkdabEFYKy91c3I4ZU94eEc2LzBzM013WDlKWjNTUnVaVm1yWk0rVksxdVBURmtKWUJTM2ZLSitoMVZnR2V0QnF3ei9SNy9FL3pRcjRvSGRRSDQvNU1Mb1FnTi9NcDIyVUQ2c0tpSWY1eU9jYko3R2wwbVRDcnhYZkZsbDBTbDZoa2hudmMrZnBaZDZJaW96RE9pV0x0bzZMZUNyZEJ4OEFVL0ZrcnV2NnovTC9TY1B2VjdxdFFaUXVMZnBwSFU0ZXZRUHRXdnRnYWxHdzFmWndCSkFzdzM4QTF1eGVaWTVYbWxuTncreklZZWFiSzgyVnpSQnRPcWZDdW5mb2x2aDFyRng5cHM3QWhZaDdFcTNuUnc4WDBtN1BhdHFhRHJHejl3b3hmL0tMcklTQnczUEtCQVk0NmJUdXUyUzFOb3hPTmV0VktUSG9XRUFtUHlxcTJmMmJOUDhoTUw0blhmU09sY0FHUFNhTVJGUzkxRWo2UFh3RWJvdkx5Z09IanlraVZTTS9SQTF2L2NwWSsyUlZhNjMxMGlvaVNvMVpNU1I5MHVGMnRmNlJCUERCTnFHUXJ1bVNzM1poS0YzZjJIVFdkNThWd1IyTjRPNHpPQXFPSkZBUXNTUWRWeXNMRzRMRG0wYkJaLzlSOVJNN1MvU21nVGJTQlJLTVF5WWY2WEl6K0Z5dWp0aEprdlpmWGUrOTd4SSswRnJ4dHFXMC9jcTRjSUpnU1NGSlZHRDFHZm0vV3l2KzhOOXRSNUhCZ1RNQ2YrMDBkM2hhYytxampXRW1ZV3lIeGs5UHFQczhiTDVYUGUrZWtJQVVsSHRPR2JJQ09UMW5tbHFvMmdmNytkakhpUHd6Q3BDUkM3TGVYa3oza1RZWHpTb3F5c1BTNEp1ekhBM2ZxaEFJRzJWTWV3VWQ2TTVKQ3ZFeTNyWkNwdXYwOXB0T2xPb3k4RHYycWg4R2pWMktpdmk2S1RGQzBwVFM3YTNCbGNEY1BjL0Y3U2RJbDR1VUxTMTNWZ2xKc1hXTlRVMExTN1dwQ2l5MG1uSkk5dy8weUdJcXZMMFBlakRmQ2RoSVkwaVM4NkxlN2I3NURrV0JuRFdFV29vUzJmZ3NWQ3J4aHk3Umx3NGV5OHBZQnlaUzAxdndibHNHRW9QdkdPcTVKSmNpRUNZajFFVHN6b1pxcjQvZm5pVFBCc3JYd29tOFlnZXFmR25QUFA3L2YxQm1RaklWcENtak1DczVBaXFxV3dhbmxKVnMvemhBWFlzVTQ4WnFyZGhCVEw2Q1ZHWURSRk9iT3J1WlJqZ1BoakVyMTFyQ2J3L2p2aEt2TG5sZUtqVFRqMXp3N29XZk4xM1BFRXpTRGwvaElhbzFrcDJDTEpBNXhKeW9rN21qZnp6cUJXMEhBNGN2d0VkUkdTUVNoM09kUG9sMDEwZlRKRFE5RzRnL2poRUxreFVJQWpWS0F6bmcySUM2dG9vTVRqSFJaaW5ZajQ5dGM4dHFqU2tlTlA4QWNZK2M4UzM3dGswV09qY1c0eitxMGxxNVE1MzJubGhCRlVKMTNVZHJaKzl3SlVoNjh1ZjBMZDZCWEF4czh6cWozaHIwWUsxZXMyc1lrQytYemszK3FISmF5TXdRNjJYdFhPOHlHaGZoUHZqeTI3clp3Y2ZEVWNmbGoxeDhwb3dSQ0IwZ3VSQ2FoL21aWVpIanRmdmxtM3ZDMUd3R0dxbFNvVGZLeVErRGpnblozeXYrc09YNEtYanBQMlpXM1l5eHJLUnV0Wmlja1ZGQXlVNGlzbkJGSHdiTmdxYmVjWmh3WUZXT2RnQVI1aVp1NXlLa3hKYkF2c0RyWk9DMXRNTDhSNGJvTGYwVnRKcVNNZTNJRUJod0pPaGl1Znp2OVd5UmJZbHNYUTdoOTJHR3gvdEkrL3BGMzN5Sm1GUHNUTk9SRW01WFZDL2dpbVJDZVlyL1hua3dWRFdSTUdRQzE2a01XN0ZSY2FPZDh5bzJQTkMyRU4vOWdWdGtZU3lNZis5ekdXTHk3OE11M3N4cVFUQzIveXpRNXFwUjdIelB5VER0cDlhRFNKK0MySU5ZZE1zcnZVdmZqWG15U0phWU02UXFySEF6UE1hcXk4dnducml2QVVzNnhtSkVDMGtoaTlubTIrdXZ1UHVaTHMyK0F0T0tjbVFxV095TjVJMVVyQWZXQmZFS2U4VldNb0lHTkNkSzN4ajNGUWVCN3Vyc0YyWElTTVBHZzdMYk5mbGRoME5ZL0F0VVBHSVduczlpS3diT1BiQnh6WTAyTk1kK3d6U2c2bWo2eXhQbVNxUUFjanFhSktyY09kamxkbVRORHdQd3YyeGtPcDlva1MrNGpXS1F5MVd1dGt5ZHJXKzlMbVlaUWcydllETUg5U2tPQkY5WW9qUTFWcW00R1JtcmJXSjVKR3hqUUhIanV1cDJuWWVKOFJITGdLRTV0bVpkdTdHbStuVEd3cXN5ZzJkeHBEaDYwYzYrdVZ1UVpQU2o1aThyNXM3aGxnU2JvdXJBdXRUWUhadnlQU0pTQ1JIQkcwK0Y5d1JUZXR3bzk5OFNhNkt0Z3A2Sk8xMnpwMmlwVEY0T3ZiNk4xaWxNNXVKbGpKVHVCL0psUFd1NXZENVdYelVaNFdEMGpNb1VMa0MzbUhtbjM0SFNqVnk5ZEI0S2JDYkhYSTJ4VUlXUDVKZ3oxV0ZQanl2NFpuQ3l0QXdDNlVmRTVZcS9ZWXBrTGxWZTVFdVovSWQ0dGh1a3d0eXUwUlVXREp0NDBtUURWNmpaUyt0Qlc2UGtwQlFuK29oYWhxSmJkT2lMUUpGUlV2RkNEVkpBM2V3TGFYN2FPS2lXMEg1WnVaMDYvVGZ3azI5QnlnL3dYTkN4Wi8xUXptK1ZacjYvN0Q4K29UUXAwem1IcTJBWlFyMzk5OCs2NldacVVsc0hIenFucG1YN2grMnJFb0IySmRNM3BzN2x1MFc1Y01TcUtiNCtsSDlidUovY1pwNWxURjRXVlJsSm5rbHloamhuaFUwWHZkbjdkeUZicnJFYWVIVU5EK2lwMWRkRm5hQzFTeGVSVDBsSmdGeWVNbGM5QkRpWGd5bUlqRUFkZTE0RVJRbVluOEZ0NUtkL29zUm5JZzRTU0E4L1hsNnM4c05HaXdiU3ExYVNLWUJOSVlNTlJhQ1ArUkJBdE5pSXpRVjlmZm4wRExrclhvY0xkZTFvZkV6eFhPa3lDU2NMVEhDajFsRWRwdHFiL0lJbGlNc2YyUnN0VHZmM3N0eXB3eWExd0h0Ny94K0RYakZJbXVHWHFNdVpaZnN1N1VOQVBoT2NoVXdod01LSm9XMGwwaHgyTS9wdVcrb3dXVmZ5cFB5OWpjRCtLcXRjekZzRzlTV2lrNVpQbkdPdzR1QTEwZ1V0NDg4YVJhQmtiSG05WHpPZ0xqVTdiT2x1YVl5UEhMeVUyTTkrV1JxVlVBSnJTNVNIVnJvMWhkbGc2ZGdmWGxGZkFlZjM1cXQxRWwvTkVGWXVGZEtWUGtzbGFPZmdDRnB3Q05yS0RHSGdyL2hMTUMwQ3JLaWZJaTc0QThpUENsdFZvd2VlWi9Ld1cxRTA2RnE0b3V6QTMyRjN2ZDM4MzAxRjJYeG93TmF6ODg5Vkl3WHY1STlBc1dDTE1TYXRNcUVDcno3dXQxUjU1K1ludjRpU2tVR0dENlpBUWZGSTVPaEZIQnZmSzNOVEk5QjlIMzhka0NiVWFTMm5oeFV3Z2huWENsb1VRSHIxVDFaWUVJWklTQkU0SE5KdFJHc014Q3VUOTlMWjl5MUcrQll4MWMyR1JHUElEL2xtWWJ5QVlEbXlCY003RUpEaWd4SlVoYUFBTm1PMFdTRFJaK3haWnQvK3h6UlNJNlU0Njg1L3kxZEF2dlNyL0xxc2ZPSS9zOXVRYk1YQXhSSFZWYVNTY1VaK1N2TXhST1pra1NTa0wyajF4WFhOaW9VUHYvVStvMjIwYkV0amlkV1Q5dFp1VG5EMnRTdk1iN0dibnJNVkNOaUJnK3JiTWJwVURYREZFampudmh6SVhKWmEvcm1VZjVEeXhid1lrNk9wclJxQ28zajFOWFBkOGpjWDVSMk5kWGtkSEhrbm9kb1N5aWlqYTdDOVRWSTdPeDd1dU9rbXQrNEo2OGlEMm1VK2oxdEZ0Z1FySWlaVjYyOFkrZmwzYlpjUDYzMWNGbFVtYUIrRnIzaHdMOWFENXZzdFhZS3c2NmFMbEFBZlVtM2xKeW01TWVxc0ZKV1pOR1Q3RldaczFOMFpTRDRJQWxDdmZHbzZ6QzZ3c3A1M3FiM1lSRUJNK3hzUXVIZ1d0OWY1d1JyUXcrcnF5MFVyM0E5TWVHMUlsNkZOallWK3VUNWt3aENSalYrc3U4UWZCS0I2eVVuS0p5czdMNmtZYjgrOUN2ZHUzazJuSm5lN1BVcnY2ZHhlVlNON0JOUUpEY2d5Zis0QWo3azEzZE54SlY1aWUrZTZlQklhR2hmSDF2M0dRdmZxODZWYXp3NmVMV1pkdCtnZUMxSU1teVJQT2luN2F2aWUzbWVtdSszTjhXZHlQVlg0SkJ3YS9CMG5lWFZEcUxGeGw2Z21BWnVnSlVXTC91RDZCWHFDWGVTZHpKOHA2ejRkb2lDdGxNRjBIZjJiM1hWdm9KQ2tJZUM2dWVCVlRPaWk2MlVCNHd0a00yN0NMZVFNeHNDZTVlcjFjdU1RQTRHQktmeU84RkZsV1RrZnFOenMvT1gxT2ZQUFJVclB3VWF2dVdNeDRDV3RBZEoyYTIyNE5EUlQvSndWWFE0SEg5azVqR0grazFUNDFtaEFQVnlLK1hSYXE3Y3l1eDdpTjQrMmV0VlpwZ0FCMlFNR1JET0k5K3p1MHpHRmsrZDZ0Rk5neW5xM1E3VlI3RjA2MUJuUFY3aVgwSGFzekRxa2ZNTkEzNnA0a2xxUHlsbjhaczdqSXgzakJrRlRtZmpEdFBETkt3KzU4R3J2ZWV3T0w0V0l2U1dFc0t0L2RJZ2tPSGhEVGUzeEtlZmI4RFVqUGdHRnBFOGxsVWZUUFpDNXFpaUxoT0VuRForT282RU5OZXZSUmE1ZzhjcE8rZXNlTENjNWNZa0JwV0UxSWRBeTBXdEpDWU9yT2gzYVhTd1JHSjNQOHRSeFlaV0FZUiszM1pGNkpyUC9RT0I5VFVBV1l2bW54b2NrdHNKR3lwMFlJWnZIYjlXalhOcklkdHBOY3pwUEpGVEV2eUtObmFJY3pldCtoMWQ4c01Ub2VXRDc4cGxCZ0xueEdVYTIzSHA5YmlDK2w0WGw1YXVXcjVQNUgxalN2MVdyaFlwa3BvU2NSRUQ5SzZaSlplVUtZSHRIODBUbWZWc0VRaHlzS21uUGVCZFZ1dmVpOHQrcDZwdzZJcS9hVWVZb2IzN2svUU1Oa1VVQ2pyQ3JpbXZnUWxYVDNZMnkyWkNnYk5EN0l3MHpYUklKdW9IdnpwT2J5akM5UVZkWUFWNnZVTUxybytYZERySHZPTy9LcmQ0MUN6eUVBVkNjUmU4cjNmY1NINFdSWDRjWmVWeUUvUTRVV2RyTU1IdzVDTWhsVXNudDlZWWVoWXN1alVmRkdMOWJ2SjZxL3pkQ1NXbGpna0M3NmpJMmY1WmpFbTU2dG56MnM3dzkvZXdwaHZQc0FUWVZhSUUzODlValFBZjFZajdFWE5FOTNVNDcwNlFET0o1dlVMZXRTckFtNlkycjI1NG8vR1BxdDhhc2tab1NRdUVIU2Q4OGxwWEZZWExrMVJTbXJRWFkzTktDRzFEUk0wd0MzaVpKTExERW84MzgxM0pUNnJXbkMzTUd2Z0JtbDJLejZUU3dkMXY0cUF2SWZXVEhCV2dtaVdyWEJjOGQ4UElZd3p5a2R0Q3pjMUdFUTdhWFNEbmZ4cFdERXZNY1hjb2lPVG5FcjFHNi9idkVhVVdoclByekVFZUdjTllxY1ZiaHl4L1UxRnBVVnpSSVl5QzI3MnRocW1ieDZnQ2lHQWxmNmJoQkdrRnAyOERDbXlIQWQ2a1BDZWNSRWVqTXRIT3pORHB0VThNWDFLZHg5amZKTDJjWHR1eEZoZ0Z1UmNHT0Z0TjJabTNqKzYyaDRLQ1RDMjRmSUlFRGdDZDNzRGd5a29FbTl6SVByU1V5ajlCMU56SGMzMkQwV3A1aEsxMFhHSjRiZGNKWEpSREJHeFQzcFBtNW1aWjk4RkFWNmI1MmZSYWlSQmk3cjhUbng5WEdLTFl1aUptTmRJNkw0VkFNRjVoMTZZZ1R0Zlc2eTJhM1JhV3VST1dmeHFxcEVCZDR4bXIwN2xyWjZQd0lyTXd0T0tXMVFxQ1VyVUJqb3UxMjE5OVZ1L0RzYzg5am9GRVUwZ1JENE1PRDNucmh6VHhUdWFtU3dQWS9hdUtvWTJJVzJzOUt5SlZkNXFHMmppN3VRZkt5TkNIWTBoV1RTWit5K09LV0tLdFYvTGlZSHJlcXJySDg0Ri9PSTNnakZ5eGMrMzVOVmNpeVNBUzFDa24rYnNIWVI2YzZxTVBiR3JxYXY0SXNYM21kZGJ5RFBDUi9oeUdMbzB3VHBIbUFVdVhmVXJ2ME05SDZyRXJBdHkwL0VlQXVKNElRVmpWRFlHTDBaMWR4cHExb2hjWU1iODdEdi9sZjR0ZTIyRnA2NnRvM2RsTGJIY2N0M1VPZVlubGhZYTNLWW11WVVuaGw3VE9RMzgzaklGd3RRWHpXejJuTmJvN3FsZ05PZlprYUcyN0FnY2tIT3Qvck9hOFJMdlpaSWJwb2RuTXZJc2RQcnArMDR3RG1zQXE1YXR0ai9JYjc3TkNuaTNyNmtZM0kzVGhPQ0pXSFBYS1NlemMyZ0JwbjE0a0QzUTRRZlBCOHVpbEFVRWF3U0htR0JvN2JUb2s1WXVxSmhJLzk4ZHRqSW9hb3pRVjNFNmhXdFJCdHdqZGN2RlkwRWFlVXBSZThwdWlER002QjY0bFZSUHE2Q21NeDdaa1g3M25GM1NuTFkxN05XMmpoUUNpdENDanhTc3l1SnRIaS9SMllCVzBNME5QTWx0dzk2aEdaOWRiYXNzenhZWDNDM0k3dlFjNWwzNTNuVDVRdUV3TGJQVEpkeDhvcmdlamY0MVExVzFUSjVyRzhvdEJKZzRqcmEzL1ZsWTN1anJwODVJOThpVWkxQWxZbXY5TEVSRjRrNXNFYk5aaE5uSitVajBPV1lrYWk5eE9lTUlvUk5FOG5pN3lDWHVzcUxzeEE4LzFiSi83NE50Q2RoQnhMWTdVeWkvTWRUU0gwdmZ4UEVaK1FQU3BpQ0hWcE1VTUY5M2dhYm83azU1TkkwN1BOaGlqcmtmVTNzcmc0c2FLZk1QWkFobGdVdWErMTNxdXpBZXhIVmlMTXFJZHNqSTQ3ckRZSElXd2tVUEJJV2Rab3VhQlV5VGx5V2IxZEZBWEFLa1kvMDloYXpESFZkRHVlbStWVnNRQnVyMW5MUWpGejBlK292bTlEallFdjhXY2VMYVhNRFpTMGRWRTIzOEE0djUyazJPVTluaWcvZWp6UUNaNFZPZTRhck8xaGxsS2Z6NHNjY1Z5NjhjUmh5MzlkRWxEZXNwYUhQZndlY2VXWDVKa1QvTko5d2ZWd1praWRFdWhEaGh5NTREMTV3aW1jTGFzaDJhRHVweUVqQnliZk5EOWN1VGtZeGZ6ZmIxbmljZTRLS1Q4ZVJ0VXppVFFzRjJYM3ZSeTEveU9HM2RvcEwvckRleFNYMEhQYUNXS2pVOUpKUXM0dnBsOUJ1Kzg0d3N1VkFTYzlOT3p0OEU5L3JlS0RreVVjd2dYTnNmdTVSbmplZk5KaHY0ckVRMldyNElHdWtyMUxLU3VyR2t0eSs3MVNnNmtsdUJmalp0R2Eva2cxekxNc3VaR093Nlk5V3krUlVDTmRlYTluVVJMbERBanhpTTZIa2h0UHVDOEJRQ3ErNjBHYmJrdGpCcnFpbkN2RUpveDJOSkVHY3I5OXdyNnpuWnRlUGVRZFZtTTNYeHY0ZWY3WGR5dkRNKzBxSC9NTzlIUmJsVzFOTHJRM0c3NHhFVzBuRnFRNThGY1U3VE1KYkVRNjdaZ1dac0lRek8zb3NFYkovc2hjR3hCc3F2bXVCWUsvM3RxVWt3NkNTUDVrS2JtMHFpT1IzYU1uR0ZoK244dGc4bTNYQ0N0bWd5WndnRDhhSVpNY3N5b1YzUi9hb2pDMi92eXphdXBKVUduNWZrdG9HcWFUbEtGNjd1OFZQd2xZb09DMkx0Nm1mcnJJL3k0NG1uKzdtTXB2YWdITTllbEdSUGJTbGtMbnF1eXh4UzIvdHA0M3cza2xwNlBYTUlhVGJWbm5COE9UT1l6cjBoQTFlSUlqZzJ5Tk5rQmplSk1ySHc4dUNUemZGU2tNTmY4WHJtTU9XeWVpSFN6T0VGRWxCSlZ4ZG5UVDc2ZzJyMU40VS90cU9LZ3NTUklDSjArSVBLOVJYZ1JxSFkzdnpnUU5DYmtjaUtITzh1UjhVWW1RNmgwVTNsYkMxL1Q2czJ0UlZhc2EveWdyU1lHdGlRNnJQREFFVEdZeEZ3WWtIUFdKZXhUcktVVEY2d0s4ZEtwcTQrQm9MakpnWGFUMDNIMnMvbHJ2TmdGcGc1MzJ1VSswZExyL1VKaWhrZUlYVHcvQjVUdEN0ZnhGZHdYcklTelNsd3dtTS94MnN4b01TS0JCTjFZenhHR1A3b2M0akYwdUpMNVlVWWM5NGJPMDdhK3JLWW0zclpIcGFxd3dqV3F3MTNpekhZbHExa0poS1dhQzRSbVRBM0U2bHAycW80WEUxNlo1aUhaRWFiSWpiL2FhWFdUQXk1TkNRVVdRSS94ejRFSC9WbWttSVg2QlNmbUpEaE1OMDRIYnJRMzhrcFVrMVBncWZTMmpJNUpMczhKb1BzUXlTcGlqdGZ1K3g5S3UyNW5JS2N2ZlN5eENVdklHM3F6WkRKanA0TzBrNXFiM0N6RFVPaGMzcVVpVXhiY3hjU0dvemFyejNVQUJ0b3hRcXZ4OC9IRVQ0cWFERE54UWRuMXdHa0Fnck5INWtaZTlOa1JxbzNRaGVKVFY0N2lPRWQ0TDdLQmN4aldXTDJYT2YwOVBIRGJXdWw4MDdkSlpTOGVUeFIvc3ZSSWZxcG0zOUJ6QVkwNVdja3VuRFJYUUIzaStSVHVnMTVoYXhzalNwOFoxcHRlWkc4VjY5eUtQTnVROFplYXVjRllBL2ZzTUxwZ2ZBNUxWcEV6QnZCbzZRUkJweWdZUFpHWGN5M2NuMGRpVjRXcmlZNGw4UXlSUFR3YlhwMFVKZXpnOGFiRkU2NmtTbXhyK2ZHRDVSQlgwY0dKYXRuN0Q1cGIvVm9PSXJyTjBWRzE2R3lzdHBzSU5pWW0wV1dCY09NMW43aUE2c3NLWkRQcEJHUXNBenZXVEgwYWtsOVpXV28vQUF0L2xHekF2OWpoQlF3T0hYdG5FR3VNbDFKTTJ0UUVkMVpYRHRjVFhSUE9xS244RVVBM0FmbjJXUXNPbHZDcGpaUkkvK3RhaEg3TW9WSHN0REhtU3FoRERoMitFRXNHQm10NmNaWFluMjUyVGxyZXRJL1JuWVlRNURyTFYyQ0FkOHF2STVLcGMxU3Y1cXFEYWFqOU8wWnJvOGtnR3FzZnhqSk5KUDZzRHlPZnZGQ2hCWmZOaW9DTzJWZmxBVTNoZHNyN05ITWJrQ3d1T2JTQTlqUG1GYTFTOWlRaXlKOVNDS3lua2lIVkFGRFlNaW50TjVEKytlaUtEN3lTbU91ZU9iKzZBQUJPdExheDVHSk1BcEkxUFJCTjVFcUN2OUdLUHZscXc0TWoxaEZIWUJZcjdHY1ZVZGhWa0wrUk9XcFpZYlhIdm4vWkhjMUhnRHk2QmxPQU1sSk9xMEl5bmQxY0FNN0g0clg5Rit4Lys3TzVhc2JjUGVSdll0Z200VUxCZGsyMjBVd09vVWYyYmsraVh1WlNxajNMS2tpUDc2SGh5RmhRNFNRTjlmaE9ScGdFUkkrMzVnTHU1eGtLSjFXOG4xb1AyNnZWdExja0VsVzR3ZTFxTFZVTzBCaWUyM0cvWGlyb0d3a2l0RDJ4cEhYUWRtWS9HdzQrZGNpM3JpSzhaR0M0Y2pwQ1JZUVIzZHkvSDcxYjMrU3llUFl6cEUvcDI5aGZKbjcvd3psc2VxMWc0ckZlMGp2REVSRjRsU1lOR29KeDAxbURRRStGc09FS2x2MXlZbTdxdzU1R0NZTUV1STZmZmJCUzNvLzRrN3o3cHlSVjU5M0MrVTAxVzdoa3FVMkJaUXlUM1JuWGM2NXd2d1hMSHBFRTU3VVJMcTByZEE0aFIyUzczVHBNcFpTbE1aTC9CaUYxMFYyMXZDaVd0TmJFOG13Y09KNlZHczdEbnZXK1ZSYnk5bTlXdTJ0QXAxRTVXWi8zOHQzYWpNQzRIVE55RkRGWjd1blVYek9WZEJRblZGUWxldzJhT0hCL2lad2pLdmtmc05iTUFNOHFLd3NwQkM5bUZSNmJFNEVGMzd4RWdYTkNyMnprT2t6WFVxU2x6a1JtV3FKcW5UU0JyQTNMaGhkVkpuWEZhK2RROUVUb0xRNmdZbnM5MzgySUlCaUdDZUl0Um9PL2gveTFZN1QzL1RXck9BbnlSY3ZuT01tOVpqVHI1bkZPYWs4R1BiU1MzanNrMDlualN2SFM4Q2NJNHcxbnRkdmg2cm5ITmZsK3Nka1VNQS9DQUZscmdEWEhZZWtUZGV4RFZkcmgzajN6SGhuWk84R0dSRnd3TFVEWjFrYjZzQWwxWnBvUzN5NGxmbTlLM0VLcE5tRDJBZHhqMHAvUWtwaGozY0RpRXZSRjdHZWs5UXBjbXZ1bDBLS2hoSEZ6YTNyNFQrY0s3M3ZrakVHYkFUMmlJcVRJV09PUGtSNmdMTzJrTWpWTjdOR3hubXo1aXdRNXgrbmxiQnNvSnFlTlU2UFh6NEJjMXY2Z1BrZkNxemNVZ1A0WkNuMDlsL3pLNXNybmh2ZWIrcm05b09najZqUXZncGczUmxXTlk3UEI5NUFIOTRpbHZyZ25FMWpFeXdmUEFCcVMwK2Z6N1JWcUJsYWJRSm1hUy9NWndrd2pJOUxhOWpSWGo1QlNmVXRVWkhzbXp1MVFPbjhBWmlqVGlVQm92TDcvajRNNmNXY0Z2QkNBV001Q2hybEkycmlqV3VOSUdPc1JuTldvZ3NRNEgvcGtwTG9QM0ZHY2UrSFlTV2hvVWRBekJzRUE2MVA4ZUtPSXlqdTdDL1AwM1p1Q2lXdndDSW1xanMwQXRjelJzV1dnalBmbXNWQTNJemdzaUNHeG9naWpoRXgxeTJpcXM2NitCVzczSGJuaVhGK0tyWi81ZVdROWpZb2RMMXZRQ0RVR0NJU09lZDNIQXNBMlNaYU42eTdVN2k5RC9YNllNRWE2UHdENnpjazdVZCt4SXI0REljeDJkQUpnSTU4d3hxQk90Slk4MnVyV0lnTzQ2cWRyZFFmQVBVbVFtdmUwdERIVFhQaEpUMkMxQllyZExlblJFUFllcDRudXBWUXVqNjZxTkRQaSt6cTZxdnNKanFOcThwZlVpMkVCNG40N050SEpsRDR6bVdyMUpSYmUxRkoxZnVlTmV1aTZRSjRrd1ZBd3NBZGw5UmFQek45eWszY2hudWtiT2RUWm05ZXlxQ0JSUWJJM05LeitiemJrRHNvcVFydDhMSHRTSHN2MmVaQVhIUVhMbUdXWU93MWlaN2xxZDk1MnBhTVFVTXc5YWpSNmhYc3VPZ0U5U1F1VW53Wk13blUvWnA0RmFpNVc2YnRzdFN3bU9HRTJtLzFBSjdyZkZjWDdZTk10ZHRNc1RWeGhSQ3BxekVKZ2tkZE1zSytzdElvTjJHTEh5b3RJTnRYWUwydks1YVQxSzQyN0pxNHY2bXVZU1lmenJ5NEtzaUxTOEx3UmpJRDU3LzEzcTZkMEZmSXlZaWdGMkFPbEIwNStkWHZ1MmROQk1ydnNTZG1WbkdOMjZMaGdHcUI4ZDJwb2hVcnQ3eGI1YTlxSDZGZUtydlNYZ1ZtNmlDakRPdDROVXNyQWwxT2JqVGgzNlQ0alIramJOWFVvdEsxd29zb2JyRTlLeXJhVEw0QVFYZDExT3p6c3E3dTh4WTBaem15MnpERWJnNjgvSUgyZm1ObVNPTmpGWTlHVEU4bVRMK3lKRCs5aTJxbnpBU20zeUsrN3FkY1JOd3g4OU9tNmc4UGpDaW9HcStYM1p1ZU9XYkozL0M5WVA1Y1ZJQkZFeUcwQWV1RW5DRFUyQksyTmJhK21XaVFOcWxJQzN3U1l2N3VzOEFMb1p6bDdHUVI3bkxyamlVTmxQcndGTmJLSTgyWFI5R214WjdYQ25VcWhTSzkwb0FVb3RaM3RQcWxOQ1Y3dTA2eFNYdTdBL2F5WmsxbW5nN1JoUTR5dG5BamQrQmx3Vy9nU1ZxVkJJN2plZ2tlaEw2M1h4d2JpdmN6NEFZSmtWVlRNOVFnZkRYZS9hcDFNNm9jZ0VUdjBKd01RenZ4K25Pd3pmVUNINTdxdDBsR1ErdmU0MzBUN0V2S0JKZ0RiditmQ2JRdE9wQjhUMzkxUHl0TEhYbHlWcjZ0b0JGUk5aK25USXltaWxody9mekJ6Qmt5ZFBXaTZmdWVENzV1ZzdDb0ZocWRML1diZmJHTStJQzc3bTZORmNMUnQ0c1VSSUtwTkZpZlJYRmcydjB5dmtTRXU1RG1DVWIzUEsyVWsvZk1FdFdXUllmU2tXaG05SXJNODdmWFZscjF3SjZ1T3VGZ1U5ZnZSekovMDNIZEFJSm9QNTRCZkVoQUg4UXI3anNyOVl2VkVLRE5BbXNYL3grUTZQVHRGS1RNUnFMeXdxY2dIMEkrNHpKalhEZ01HQkxjWG8zeHNOYjgxRGIvcmNvRjN3OGR3UmlqbGF3ZVovVDBKMGRUQ3NZUXZqM2p3OS9mRkJURmxha0RUbWwvNzlPSW5lTURUSitWWFpRUThDczU5R2hNR25uVnRIMjZqYU0rQlF5M0NHVGFQcnhDTG1IZHpxNkhkblEwQkRpcmdPazlHaDByclg3aHJ2NkxtcGFNTUpjb0xYR1JHQk1WT3FjajhocjlZekw4bnVmVDAwamNuT0w1RGwrWTNueXI1UEszYTJkaS80RUN0bjRYbFJFTDBiQjlIK0RuL3VCM25zT204YmorUmc0b0preEtRWHpEWDlEWWxaSzRpOTBlNGwyT28vZGhrclp0NStyRlFheTRVZzU5NmZaREZ2UnRHZkV3Sm5VYlNrTll2bDd0RzM0cUt3d3FicEZSdmdkZEhZN0JwN0xxOWR3SXVjczEyZDBjUCtWNE0yQW1ONVJ5VXcrVDcxODhwNHE0QUlTZHVWa3Z6REI5dUVNTEJlTGJHbGFHQ3d3NEQwMjYxcm9hL2t6d0laTEpUM1pJYzRHNEErUVVmMmw0cVRXY1I2NlBQbEM0MFhwS0tHZllpMHl4Y2lUaEFKbHJZbmM5b1picFEvNXhUb3hmOTJwK0xaU2hKQng0ZE9pMnQ1ZnNxQ1lPQnQzTVd0RmhLcG9sL2tUR2hZR0VHY0Q3R2wwRTl4WUdGTWt4RWF4d0VpbVFrOVZYcjVnT2tGMk9adWgwTW4yVHU4NTZvL1dYeUNjVUlZWEliOHVHY2N0Tkl0ZWVvSFczRGd6MG5xbUNCbEIwUC9VSWYzUlRxbTNHTlFoVFRZekV5NXVWQVlyTmJYTHoxNVUrUGZ0cTJYb3RaOHR3dUxpUVQ1aUE0UEhYeTZBQnY2R2VhMlRKM2pVSTd5Nmk5VWhobUNocWhieVdla0RldVB3OXcxRDhxaGJNZVRCRDM4QTBSaWxoelVlcXI5QkRZTytvU3VkeUFxTUhEUWg3UmdoQ1Azd2N5SFpVWXY2V092MS81Y0h5WC9YY2RIWlpLQkxrUHBBODYyWDJ0aGJ5c0NlWWhhZlc1VEZoSUIwRXc0MTlnUXpzVHk2VGdlVSt5cHg1ek9iNlNzK0xRUlNwNWEvMXpTQkhvSHpuWWlZbVJhcVljamtCWU90ejdwQ0xNUzBJSEUvdDJGVEtyVm5mU3JPRmtBM2IxeEYveW5sZDZPUldxUUlWK2Uxam9OQWpDVDA5RHlMSzJTaDBlb2ZhTzhiQ3ZjcDZIUGhqRVV6KzBIS1AzS3BsT0FQcS9RdDFNNlZ0TVpzNWFrWkFxMFZiWEdsaFp2dVR2VzFaM1NGWlp0MWtPMnpaNnhHeUxZblNMMUpPdE1KR05tYlczZDRwWUxCZlFjcXQ3R25aUmNSU0F0aTc3aDVQRGs4ejlzV0JEVWFISUdCZmJQR3VndHZtZFF2dVRHZGx0OVdIVkZOVFgrdU1PRks2VGlhNTl4TDRWYUFueHdKdXNJcG9ybGd1WWRMelBRZjY1WUoyOUdEaDkwSHZyb3hRaXpSSjMyallqZUkvdStLaWNxaHZKcUdyQkN2YXlFZzBkWTl3WTh4RzlqT3dOSk5TYm9aeXBDcEpWVUEyYjRKc2tTRVg1dEJlRTFta3dmaUg4dzBEZGU5OEFUQUtPRk9qWWhEUnVzSWtFR1BrNFBYNnFONmpvZy9jWEI2NnBGbDdsd0pCZ0FIcU95SDdPb0tvbGJFYVJmNE5qblRKZ21ZTDhZTmczRXZjMTdiTWpGUnV1aTgzSjJkK2F1QVRqZGo5OGFNeFFyYmgrWS92dno3NkVwdURRWmw1K2NvN1NKY21BeUFJSTBQeG85R2pEWjdDN0lpbVZWL2kwVkVnSVVwMjhuUlBEM1BmZisyYit0VmU1akRYU3dXQ2FMS0NXV3JFTGUzQUhROHQ5dklqZEpqMTU4LzE4b0tvZkZObFMyWFZ5Qm1aN3RtcXZSemVSM25xSTFtUkZrS0ZLSXdvelIrSmpwWWpKVnM0Q29Oa045Tmk5ckF2UjRUcjNaVFk3aVIrNVMrQ3g3NFNhWEI2RElmdkV6akJLamYwOW1jOE9qbmU0ZWtzaUVodTVmZmNNWjZDdjQyUDZ6eTBZM0lTQ0xicWNzRW1WZmtUMUxMMnhmTjFUV0tER21SMEJ5UUpNdkVNVXpmK0EzbXNtdjNSalBXR21Xbm9raytLalNQenN3Z1pUK3BmYy96eGJnSko3dFJ1WjBRelp6WmtMRWhyaEEwZXErd1gzVHY3VmJXWXUrcWNRbnd3d1BhRGV0TnQxTFZLeE42L1B6VU94dVlpYzFkSHNaU1p5N3IzOG1pWWVIV1lpUDlnU1ZTTkp4MXVYcUkybnBqMFAxQWdFZkJiUWcvbTJvdFdQV2lnU0I2WlFrSVdPaFVnNGZoQk55dVd2NU0yOHAreHp6VGViemw4a0U4QXhCRHpLeXYwaldHSStiWExQclVvSVc0VUNRWkQ5N3hwaHdUdktpMHo2bEp2amRTemxOd3NjZVJlbzdFSWJGcTBxNTljTWlxWE9pcXNWQml4QnNVdWU5ZmFpZE1oRENvdGdQcG9xYU4rTnZicXY4UkhKREpmcFErS2w1SWpZcDJuSDZyUHhMY2l1VWx1bEtxWjBZaExyTEVoMHJETWNnNnkwQVp6TXRQbFZjOVFZcE1keVhlOHRtcnFJRThpT2ZjV2Z1UzQ2ZWVwbXFjVGNySG02b3RsMktaZVc4ak80czRTZjM3LzJ4d0pITGo1eWFnSjREUGJNQVNacmFWMzk0aFIwVTJPY2grVGN6QlEwa1dqU3h3UXQxSmY1andiL3JkRDVqWUwycE8wR0JOV0RYbnV0TjdhcnQ5TGtxU3FtRFA0Nm9weHJISzZha081YVQyVUlmeXkxWjgxZE95K1J0c0RCTFdXejd5eFJheWZxcnd0c01PVk1hQmduWjgrVjVGYzROQVZVYUcxYXVzRngrZDIrNFBvN1hLR3V5QVlUWHpIVXVxODB1T1JKTGpSZkdzUWJWeXVXdlpFZUVuT1Mya0VnbTZ3NXIwOUViYmI2djRGUFJxK3RWWTJkN0t6ejFoa0ZIbW1heGNNMXRteXVNaEZBSm43VnYxVEJGMlRHVmh5dkI2elozKzdIT3N5V1lwZUM4WllTT1pGRC9EWFZIOTJaVWEyR015WHpHUU5NNnZkdlBLN1dNSTBWMlJiaTVPUDZCcWx4SldsejZ4K3dza1JDTVFSUzJrb3RjWWZqRnZOQXp3ODFuL0FaQW9FK3Z1ZVpqd2JiZk13R1RiL3dkbFNPOEZEQVRObXFkdlNLUWtjVVZiakhuQW1IVFBmOS9UazZRbWluOGY4QkEvMlpRWXdNVEJuQTZtOG9FclNDMERRYzJPMmtuODV1T0ovTkNXWXppcVVFNE9PNWtURkNTenVsNGlaSXZnYU5IeW4rbmg2MWNNbCtIT2lMQUp5VWozVDh1em9RWUNzUTA5YWJoeFREZkxqRGFCQlNCMkNVNnljM0FUY2dONWEyRmpBRWdtUEppRmVCRlhwTmxTYkczSHVoQktVOEx4VDBBUFBlOWN4VFUwMEhDNmpPcm8vVGg1S3l0SUFpTVF5dWFFa1prOTRWeTcwWjMzK21oYzVGVzRvTjhSOENJQm9ZYnI5RlZuS1pldlVvaVAzRmYrSlV2V2VRMXA5ZFBRYXNjTkI5Q1lrcXhKdlFpb0xXZDkzUW1hR2cvRCtyYmxaanZUdHlPOW5wYkZQOWVpTEFybFgzSUZJOVB0aHp3bklZc0E2aHVjT3oyOG4vTmJ5Q0RKdjFwRks2eHQ5eFpaUDZKZ0tQL0Y4NUJSZlFyY2xpY3hUVmRMSE9hb2xJY1VBT2NRSjB2WHA5YWlOUEc2RmJ2a2tLakdHMUQ4SlE5ZmZoQnRDRzZEVlRReUR2dExVVWhpSFdIandMNDVOak5tTkVxTlFLM0RyV0FZb3RvNUdTMEtCalN4a3JCQXdpd2RYUDExZGU2WU9EWVZWWllQc3ExV0VlSVBHWlJpbFo0OHlHUkZQRkNBN1I1ekZUcjU3TlZZWGVMK21NWFBFb2dVakl0ZlNNTUxlNjczblpBWk91WTl4ak1ZeFhpZXY4di9uQ3NGVjVraC91dkhIR1FmRjEyL2hheXgvcmdNL0pTTHZmVS9FVENvUjZzb29OYjFOanFCZFd6eXpPWTFyQzZGaHh4bENWR2diaU9WK2J3Myt1MExEdkEyNzMzc3lDb21PcFVUZ3JNMjBYVFNJNWhHWDlHdUpER2thdnpqNkd3UVVzQXlJY0tRTHJ1WHRYSzR4VW5BSEQvTHU0RDl1N21CV2NBNjV0UmhXeGE1M1lKZ2ZxbklCalFWWjRqVkgvWDRNYXp3bmQzQWJXRnVQa1B3dW1nbFVaK2dMNFEyR1pHOGNmVEtBZFF6V0pIMkM3SGNXOHErUWFHSzIzeVA3QnRTQVkrWWwxd3lYYmVRYW1IR3dKK1k2Tll4SDVVc1ZnMW9NSXppK0RVcFpHNU5LK1pPZ296RGFJU0NaVHg5SWFlTjdoTERqT0ozUGFhb0dhQnlIcGhQc0R0QjBGR05TQTZOc2p3THBoemhGOXU3eW01d0UzOEwzYS9ZcXE4NHNyZkFuYUx0MGFEeWIyQ3l4aHZab0pXMmpUbVp4ZVJsam9jMExQdWdJNjBlKy9EcHBSK1Nvc1pVMXUvalpmVGpzRHM2NXprQ0F1K1NuL0VSa3ZTYjFvbXYxRnA4RTBsUEkrWG5KL2htTytCU0ZMaHJQUjh2UDBDb3AwRGJhU3JCKyt1ekJOSjE2VmdVRnRkZXZKNmoxTlA1Y0o1a2hJdE5RR3E1SldHemtDUENwSjd1b25VcmdXenVKQjBzS3F2S3hQSmM2VFg4RFpDU2l0M0pwblptOUZmZFYwRUFOaVc2QUJKOTM2MkU1ZGRKZjN5K0UzaTJTZFIzQWliWnJreDJrVW9ZU21pcXdWTERaS2ZvdTJaaktuNE91K3pqaUY4Z0R1Wk55L2NwQUhIRGpoL1UzUGk4TmlWUm95cDY0UXFZOXh4RmNOMEN0NS9Sb0NpMXBrR2JlZVZrSnVsdm9ObUxXT0thbENzRktEUGJrMkRYKzFIODFFZ0JLVk1UQ2pzRHBHRmpiRXREWng1eE9QVEhJaGFHazY4aXFKZlV3Y3BMbXhuVzhrTGUzdjhEL0Y5dm1aNkQyTmdSSkwrMjZUSEdTNndCbTkrdmVwdHdlOEFhYkN3dUUraHFYSXJKNVRrTXU2MHVrb1FWNXZmSDQzaHZnS0RIQmljY2ZkVm1rYzhpa3hFajErTkxLZXVWME1uUUpQdGd5QmFUem1YQUNFc2ZoSTJEUnp4ZFJJWE5SQnNTYzA2OTZ1V1p4c1I5VU5Wb1daV3BBSFhLZmtXRnNPNXlubnlNbUNRWENHL3ROUXJhUXQ4Tk9VU29RYktwZ3paR0c0cktnQ0xCbzhXMXBkSnBIeWphclZmWDU4eVY3S1orVmxLZUloYXJLdit5YkJYZ0FHNHJ3eGxuYkQ1aVdadkg2QWFTa3dhakZsU2NhMmdiSnFSaExnV2RzNU1ySEF2eFhjM3ZyeWovaEhOVEVjUmIzWDdEMWc3bXVqb2R2UXFFTThrQisvNk95ZXU4MmFFWlU2UVF4MFNNcDZMTDlDU0NTdCtGRXhvT1ptTHgvYlh6WjZ1YWpPU1VjMGFVV1pSd2tlTzZmVTU0Q0FLRTdTQXhYaXJzUHd4cTAzeDdjckRyd0M4R0tBaXJOaGZ5dkkxTHBHRWthakRCOE1QL3BxdWoxQThFT1hoc0NjK3BiTDFzamNHUGxtcUdTaFlNZ1pma1FZTmJmTWVDOEJRbTRrUE41VVpJQ1UxN2xJamhvQ0VxNnNSQnV4OTBQNFZDeTZ2V0lqVjBjR0tLZ2lOMVEyeTVhSlZtTWRuR3NQek5rVXQ5VFB1ZDlDc3hiN0UrcmpMVjNFY1NOeDI1RWRIU3U4M0t3cEU5cC8yM3lCQkFSUlNtckxSUUNGdSs2Y0tOdWNQZUpySVV3TU02V0p3eWpTSWxpaU5RTFRLMmxqOE8xRzlrZUJ0TTdtdjZ5NEVyeDk2NUpRQzZFVmdrUnFjWThYNm9CTHNQQmdIZnBUaG5nTUY2SzFIdDRiMVRXNnJEUnhDem9PQjNlY0R3MTBpSTlmMmR4Q2o4cm1uWEhmVzVvVE00U2FNNWt6c1FXbFhzaTlEWXZGaDRrYkhUR1ozdkNiRjVGVTdOT3dVUitaWjlZWWxtdmtsTzdYV21iWUdoSXF0MVlUSGdEa0J0dExxZDE2QTRpQVI1Z3ZWN29ZRmVGY1dUSU55ajU2cFdJbGFSbVNIdmdhQUZ1ZnVyekhmcDkzV2VoMm1meEtGTWgrRExkRUdwUGVGMlhZSVVvUjBWVlgwQWF5Rm9TaCs1b2lQQ29NZFh5cjNaWStDSTNqeGhTMmNWaU5GdUV1ZE9MY2RSMWtaMGZsUDFzZXp4ZmJoMmFkbWpBMDVlNm92ZndobmZIOXEzRWZESThMdjFGbE9BeitZZFZwUGFlNVdZUUZUL2YwYlMzR0N1WkdBZ1ByaXcyK3hwYlNVTjRSRVdBUmtpZ1YrRmZSQkovZWlLVEVTdm41d2RNRUt6cWdlR1paUzl4OVM3OW9YUkhBblRLQUpYN1VXZ0tteUdhS1ZpTTZKRFFISVl1RGMrUk5rZjh5c3pNdXJnN1VPSlNSSlZFYTJ6cTh2SHdrb0tIcWhLSGZCUU45SFNWbFBmRDlha1RQa0RLNlRyK0wxQkJBS1E4akRTNC9waXZBVCs5WFpCd1lSa2RLTEFzcTRwaDRKY0tkZis4aHZ0RERRWGt6MmlFRHhZTWR1V3JiK0Q2OUJCMEJoYng4MW5iR29IajBVQnpQSVRQRVJpR0VQU296eXJKS0xweTk0VS8xR3dXWjBzVVVxWjRYV3I2cG5WUFhVNXRYRWpFQVRNTk9PUmtCOEJrMzJUSGFtUlNoUWxrOGNPQTltTkNrOFhzVzdPcWo3V3hQYXdSTDhNVnk4WkVWU2FuMGRPL05IeGZ6WjNxM21HK1JiN2cvekUxRVpTSFpBRjlvQTN3MmtGbnpXQ1BXVGY4N2RGN29mZVA4MnozUUQyQjdSbjZRcmo4a3FTcTJVK1BYWFpHbWdscitjSjBsY3psM0t2QWcrYThETVNDMkhSRzg2eGpqYTRyOTUva29zZzZLMXNMREZUMW5MTUhhMDhlUW9rd0kxdFVTYkUvV3hBaUhZV2Z4YUFsT2JZUGZaMys2a2hCNndRcVZkQmQzeTZZcDF3aWYxdUZYK3o0dStSdW5wWDl4eWdudGZnYkgwOVgrR0xVR0E4aTlXaDFwVVpsUHJENGhKMnRKMmVnMTZ6bkdJaXhXTklMY0kya0ZpRFhxQm94NWY2eklXdUl5MnVrNFF5MGhWZDNEZWk5UzB3UE13dGRqNDJzNUwvM1EvdlJBK2tTUHBkaFloWlc2MWF3akZiVEZWMXdoNm5aRFoyQ1F1bmNSdlQ1VTNZQlBZOW04MlFtNVVSenVSVDE1UGN2RGd1TjI4OUxHT3BySFArRDF5dkh1NldTYXpkdVhiVnRTTC90dEROU0lzdHQyMVdMbHkwaWZtS2E1RDc3R0h6SzR1TnduTkRLd1A4M2plbVN1Q2xETGZwdjkyREhWd1dTb1pOTjJnMWNSWVBSeXhIRWg0dzlnVzh2T3RVME5EdmlSUVBNMkZZSzVUYTJ2VjczYXA5SkRCcjhTZXNuVlFrL3lUeDRGK3RNV3g1dFI3Ty83dzBST0FvVllvYWlpTk9oaWx0QkhWRk96a3FmcjlkQVNiSGNqQ0prVGIrNDZ0ZjU1SkYyMVFIbDdwNW4zNktMdVVyUkplcE5mUXYxaFZ2SWdVQ1R0Y25BdW5nZUNiRktzVXJKeUdyWVZYZWFNSERZT2ZzS21hWSt4a3dNZnJsbzJCYldJbGd6dm9PaWpKS3Nac29oVWVXTFFoeWJiSXRtT3FSek1ITzdGNWJRVjRycnBqbzUwN0JqMWJ2UHA4VHVSL0xIL3hGWnZqNkoyb0taMVZuc2g2WE4wVmVLbnc4eThlWnZRZUVJQXF1Nm5WRjA5MFJkdVF0WitzVlExNDlwRXZkMlBuNDJWR3dNcmhocEovaEtjUGpueDZWQTFxcU9HcjRiNTR0RUhFZnFpcHNqc3IxRU5DanUzc1NNUWNwQ21neE5yWWpXczZDVEF6cHpxMUdwRjB0Z3BneG05QytoMVZlVVV3QnZjQUZnbzJsa1hmc3Z5MzhjQklkcEtnRHkvQzA2QkhIQnpIbkpuQnhocWkzTEdoMm1XYnBpN0x2QXJVcHJ4cmpKUXhhZWtSRHBZcEE1TWxqWDhETVlVTHpxV0xCak00elBNUzFkVXhJajdwK0cxQ3ppTXhlcXl4bmtTZHNZaEZrV1JLTnV4OEdTWGMrY1Z3aVo4aGV2Yk1lM3pFSG1ETFdndTRxajNRbFI3VnN0OENoNlYxZzBqeXcwR3BDRWpOcHpNWFRjaXRlN0RmeFg5VXM0ZVpGT3BJTGdBeEQ5NVdXMm00dVAwZm1rS3Q5WVpJa2o1M0ozQkNiL1lXR0plaTdXZHl1em1sbWVHTnE3Ukl5RDBrSjk2TklCMGhRQW9uUkN4ejk4UjFTZEFHVHFUUDZVSjJKSyt6R3B6NTlja3U3UU9hbEdlV0pIUE5HbUg4Sjd1Ti9vTThwNFM3YUJVK2d5REd3VWdHSUxlYUpOVERiN1REN0JyMk95UjA3cFBhd0ZuUnhUSjZjWmRMOHA5Vk5zUkw2V0MrOURNL0RuWEFtc3ArZTF4TVIzM29reGJSN1o3em9TQk0vMld2S3NjblJBVTlLVjczVjNjL3lMTVcxejFkY0VhejYwRXdmU1YwU1dMTWdHM084a0FSOFMvOElzSWc2eEFCM050dStvaWI1Z3k5SHdETlZnODJrYkdueXIwbWw5THo3SCt5TDZucjEzSEdOQko0TGVyeHh0K0taVnVTdUlyblZuRitaMjFKNldPdnJydFZVR2FsclJ5aVRoWW1aYWZjaUpQRlNjams0c3BDc0NiOGhwLzY4N3ZWOS9xUkZ3ZDNoYzhXQVdrSHgrajg4dHl3dVUxajQ0ZmtPOVo5dUI5UDg0dG1HU0lMTnNReUpLZlNqbTJueU5LRmo4NjQwaGF5MDlzRXpYNm4zUFVKT1FXSnFPVWxYWVpYbzlDSFNLcWIzL3FpVjF3anQrZlFhMjRtVnZzdWtDZXh3TnVCdlZzcDFoa0tjajBSL3liUGdIeGo1RHdOaXYxVm5sWkVaZ0JWbzRYVERyWXdJYzFnaGRFRzBsekxWMllFUnZiK1hNVENWRHNYazd4QXBPYitRcE50M2k4dEdXVUxhVVk2Y0JvaGRpSG9KSm5TTTQ0Ti9OeS95dzdaTldZQUpNNWNtQXRJenpOSWxMY0lyQ1BnNU91ZGdlUXhoR2k0NFlNOTN2QUNuOWJDY3h0OTMzZ0t1bHdGQnRER3hmcFFTS3E2SldSeUNpUkduWkRubmhIVmhjUXo0L1krbEd5ZEtYb3N6QzcvZDlFSkxxUnNLU1djbVNJa1pMOU9nelhOZ0wwRTJXaXBRc2VKMDFwK0tEWWtlOExudTIzSXozNi9RcjVaM2tJYW41Qm5yWGppM0hXTjVKK3dzYkl4V3M5bmxXamNqaEpHcFhGcnZnMnB5Q2hwNStPb2E5UllrdTBwMG9ucHhRQVpScmw0QlpoYmRRYU5EekZHeXQyTks5d3p3UStGeGhOQ01NazI5R3hHVnlhaldubjB1OVJqQzJBZzhpcFdjMExyajFSaDI0OGFSWVJFbHJRR2dROW9LQ2xqZWowK29Zb0ZrVHBKWTNYemZQOUk1bTVSalNyZ1ZDb1lIcDBZTWdoT2lLQ2xKNGdwanNIYS92VFBYNmNGaXFpOGt1RFNydGZjenNlVXloSE9OR3lXSCt5ZHZ1WDMrMjJhanJYelJITEFZOVBMZlFyblN1VXhCa3UydVlCNm5vV3VjWDVJbFBTcURuc0M5NmlaQm9Gb0w0YlRram5rbTNlSld1NEY0MjgweE9HVExPNWRUeXl3dmJmWDk1eTJhc3FjU0R3UklVbEV0TnFiN0Jqd2RzNUdvWHBEZ2kxV2JIYjk3RjhFY3JzNXhGUWtPTjZSNkUwOFB4SVZYRkI1ay9JeVk1WmQ4TG1BYWVwWGltMytNbExYMDNlQXlsbUNOS0dQaGgwSlJSVUpBSUk5dnR2ay9uY013b0d0a1VCRGRYQWpPdEo5Y2Zuc2hHenVHTnBzQ2d5aU1YcGc3LzBkT1JhaEZWZzFnVml5aTRkMTc1K3grY0xxVG0wZFhxRlN2bVhWNjh4a2xEUWZlNDlVbHZWbGs0RnAxN3ZZNVBMYjdTQ1lzcnZuMnF0VXJxVWYxU3BCYmpVa0FNeElOeTFNTTJyejNFeGFFTGY5TnVXQXFhcXVVV1BEYjl3d2I0dTMzc21rN3U4dFNnQnhPUGN3RDRHRGF1TS9CZSs3RytNUkRoZy9WM0ZkZ2t1dlNwY0NMcE9jd1pjS3FtNHBiZ1RVazdBSUVaY2RVR2VLaXpQNG9UbVpQRjlyM2RhMWNiOXI3S0VldE1oY0ZBZ3diN2NVZFhNbjMvbXZOUkJZOVh0VlUxY1g1YmF3dGFjcGJ6VWlEVTRZSWtBQi9WMkdwSlpYU2RyRU5xOTNjdjVxS25udDhLZ2tJMDFNcXNuTG9DbTlOblROb280cEhJUDFXb29BVGp0RWJva1dhUHMwa014K0JWZmF6WnJuais3ZjZ2WG5xTmlXUHJyWHVxNjRjSGZjQzMwTzQ3aUhyUVNPMFJDTzdXZlZIbUpNRmpnNHBoK2V0UXQ5Qk12UUd5c0NUcWdTckQvcUdnUERCNldSa1B4VzV4ZUl4eWNWK000SkVxQ2xKK3NmSHZIbWIvbXlETVc3SkZMR1MyQTFtQmZ5VENtWERqZmZGS3ppS1p6dlF5eWxMMzdtNTQ0L0Z4eE9UdDlja0cwUVNRSEljQWtQeDFaTDBkYU9lVzRrUUdjR1FDaVVpMzNENzNtbWhUTEdTcU1vOXYwMHFuWlZNLzY2ZmwxUkZncGp0aHpaRW1mRmpXaDJONGoxWk5JandGWGRjRTJDN1VyelBpM2gxODRUTjV2TFFmZExEZEJxZjJBTjZwK1Z1ZG1CSUpONFZMU3hldFgxdnoySnJjS01weGVJTVh6SXplUkRDZng5ei9pbEtsM0l1Zk8rZ21hN1BFTHpmektZSWxET3ErUStpWUhKN2VJNSsxQzFFdSs2Wlh4bjhUWktuOENnWS9MZU9rOVB3eTR1N1RNZFh3VDJyVDVDOGxUMHNoSytxTm1MTXBvbEFPd0FrSVZBYysweHJUZHQvZUFZSTR2UzNNMXNId1N5L2xSQXpqQ1NoNVBBQzlQejM5QkVlS3RweitZNzBUcEJjVnJMWTdmQmkyclpmRmNMUm1tVHpzZWdBVTJWR3dpZ0YrQ1lUNThjaUhPaC9nV1QrTjUrNXhyemxDU2dhYkxDVWVoTENJZi9HQ0lzM2ErMDlOeWo2MzVDQ0M4NzdPTWpKNlhUM0NNdTZQaHk3SjRZeHh4WkFHTlltemFNN09UdDQ1UUJvYXVMb2J6aTQwckJMRjZRbEVSTXVkaHZ3OUgwM3NSMjBTaVRLczlvMXpyKytpZnA5eVBjeUFRLzU0R3JQRkg2SitZcVFLVHBYZTJGT3grSVRBRzJYeURNNUJ2S0hqSm1zWlV3T2o3U3c4bHRYSCtxN2VvWlhoZDNVT043UXlEZVhveUdHWlRMbTJzR2tQeEFyV00vTXl6dHpQZE44SEN6WW1JR1ZZTGZZWE1MU2hJMFh2cTF6bnNkUkIyMWVvNkVtU1lMY1VTNGFDanhkRDRtNDM2b201dWpiam5USXhDV2ZEYllyVWc3M3lsK0ZKdGxhcm9hSlBObFZiMEtYUVlLdW9CZkZEMDNmTmNlL3JHSUo3ZVZLTVFtYUJLK0FVTzdmWitRVzlNWnIyWW9jTVNneGIxT3htNi9Bay9teVFWNWtQQ29CbG03YXRiekFMZktINjZEZUxuakZyeHZCOEpoMExCY2F5WDEvMGc5bVNVaGI2RGpzVXBWMkFPMStWelNBVFNNVmQvOHg0RUtkcE5TV0FkM2cydm96cmJyUUJmQWxValY3WVIwK0wyWnNtQ0FYamY5UjJEMytTdkxmOU15QkdqdkFVNFR0Z1plTDd0UVpldVJOQ1diL3pEdjBzQ0d4SDRjZVVUL04vTzQ2cHM2OGxUVW56QzMzbmwzRHNmYmlPVW5PL3lmV3N3TFVLSVBFc1BKR3BjRndTem8vMkowd3NTcHlqS1psZ0ZOeVQyUE5oZU8wRWZqamVaOHE2Y2o2OFM2UURRU1NNbmpBZEZiMHdWeE9KTHJFUjlrSUpNUjloSW8yOUVnSkxSVXIvNTJjVzlwWmxIVzZ0ZHVwUnB2NHZKbUFISzRDNUlrUUh2aG4zcjVsY3V1UUREUWtHMEFkRml0Sys5Vkt3Qy9FSTRNbCtSbitmc2YrMXhWK0ZKNlBoVmgxNndpRXFOc04vT3Q1MGFlTU9BZmt1L3liYnlIZW4yLzJ6YUlCYmRFeXd5TEhlSVZnUzFWbW05aUhmVklRVDVFdnhocWI2MFRRNitLWVM4UWR6S215WEtDNHBGSlZrNWFkNmpnS05XazRtbGdCbVNJcDlOV294S04za1VXdEtUVGE3S3MxT3pNUnliMmFCT1IwN3JFSm9nRmhzazFwTzRNQVJKQmlDWUI0VWZFWlRXaHFhZVFGcEYxdXg5K1NLWktwcUxhY0VwSEEyU2VpVS9OT1ppNEhiVzRkYUJyc3dGOG1iRnBLaTF4b1ljVVpxVXJSVU4xMy9tcnNaZTZzQ0I2MHFDVWtCVTN0WVlUa0xKaVBHMVpoa2oyQ2RPK3MrMGpTTHRURVVRR3NyZUhvVDJRbG9yVkx6YmFQUlhYM0RiNG5TUENwQnM3cklId2JQOWpTZ3g2bW9uR3R4NmMyYTRSL3hCMVlycnpNdktialVOSlpBdTlVb2gyazRLTWxUcitDQ1pxdElMbUFWUXRUekZQYnN0RlZHdkNDZlJEYmNYRDlYVi9XWC9WRXowMkdqY2Z1NUpJc24vNHRnR0xObTdwSnhxeUptZ1BuUUhJRkl2R3JZMHBVc21ScjdSUkRvRllSZkxVR2xvY2JUdU14Q2pFWTFtM2hEZXI0R05uakNoV3dIQ0thaEo4a2tibjZ2SDVJUWxucmZQaEdWL0g2Q1pvMHBaMXowU0VqcTdFaFJuMjR5dDYxM0U2QzVTdm9qWkxPUi9TeWpYS1Nha0xCUWEyMmUzMzhuOE5Ea1pkdGJIZmZRMHd5V3RlTUs4dnNENjNNMTRJTW8xYXdGZWlteElMNWVUL0ZNVjBpNmdlVmtidXY3R24xSGd1eENESk5YZGpGeStmVnY3NVBPVWlGWWZsME85amdiT1ZCb3ZSejZGU2hBT21qcG5FTXRXSWhiNEEwYlhVa3ZFY1lUY1NOTmJGOUdCUUliTzhtdjhjZmVSL1Fpa0ZtRHZEaGYzVkJZU1FPQ1ppTDdXYkJzS1VIZjFLUWFzYTRMdjlNNHdCVjJ3RnJOdVR2dDNaK0lRRXhGaDlhYWpVaElDNGhNMzhRN2liZTRTcFhBbUUyOXVFTGRvbkZqczc4V01wZy82bTdpZkhVUGJzODlkMkxoK2hJdkpvdkRBd0k5bDhlNlNZbVUzMkZNUjYvakdQMU5xVDBOckdyNk9aTldlT0ZjWWJvdWw2WGE4SytLbmtBbUl4bTlaemtYTVNORHE2TFZLcXBiUmxzcThiWXRLbjc3SDRqZ09EQk5PTUJDWG1ickh2dVY2aUhValVkSlhVZE5Qck51RFdCcUYrNXczRGpocElIRHQrMk1sNVIxREVnRHlka2xIWG5nL2JxT1JXSHpqYmtmS3kvVXFNRWh6ODBHTFg1OVRDQWZJMXhpTi9Tb2txdUQydGNZR3A3aFRPbThaeVpkK2lHU2pIQ0UzNk0zbWhPM3d5OXY4UkVFL3JybVUwRm9iaFlZMXRTM2lsT0xDcFZVTi9MQUQ3d3FLYTB6blVFejFKMnlSTmFGQjdRMmI4dkM4aEhIS3p1MnJxNE5VcVMxV1kvRTZiUllBcWx6VlFqcUlZdGUrd0Q5azhkb2tFcWtERnRoWmEzZnJ3Z1dHZTR4ZGJSVHYxYzIwU1dZV3FVNFIzU1FLRVpsQ3dOcVpvVGZKVDhuQVVQbE9uYURqRnlOdGpiclR1QTFsQ1dCelBFSDhMNURKYmJnYlVYektXTGV5VmtmQThaWVQyVFpTL1Rwa1YwSGdDMkl5MjRTMXZIVzZTNktaV0x5VTk1UkQ4R1gwQllRMkRPaGxDbURoSFRnanl4NmVOdTg2eGVkRnhYVG5LQlpvcGRUUkJ6YWZLdkRIeE43aEdyWVBsMGVyZjh0MFVwUzZpWW9SZmNDaEdJbHI3djFLd0p4QjJIMHBBc2NxTXVGWmNYRE54Rkg2Y0l0TXJDTjZCcVgwMklMeXczOS9jbGRLR083WGhXOWNlZWFVbTE1VEtZbUEzakxwbGF3Rmt0WlB3ejFCaWRNU0d4OUl1VnRNaXdvbXg5ZE04a0VnMmN2bU01QzZYdFZJRnNMNmdDMlJhblBENUlqRldxYUVDWXJlbm1yaFp3dTZxb0pxNkpkZDdYdW42R3JuR2k4U0czNHV1dHlMV0lseERaODNCblV6RXpTbzFkZUhXVTBVUUhUWDQyL2VJakNDSmNuNWZLNzZtaUJyVHkrR1BxWHRwTWwrcXpKM3M2OWUvVVhZT2hSSVZqRlJLNVdqVXd4KzN1V2lrWGVrWmQzU203MUJSQ2tWL0FNZ0VodFQwaWg1dHB3dFVSU3FmMkhiNlNsckhsVUZ2WjRsays5RmcwMUFDWnZ5Y2paNXVySk5GWmUwOUtXejJ5Ym11bm5pRi9QOTBjTnM5Z1U1WmN2NXlVYVIvMVZQd1F1Q3ZhVHhlTFVXKzBxRUlNd1dDNGlPR0w2MWJUT0FQNzREbUEwcVJ1TlRVTEJRaXNkOEFOaGRoOXN5VFpUa2ZCWnJKakRaRmQ5bGF1ZnpkbTdMTmdscDViZGxLRU1GSnBEQkMzazhUZzNkTUNvT3BMdzFHcDA2YjgzSVNJQ1M5ZUN6eE1SZU43WXYzYVR0REZUSWJXSWlXMjBqNmJ5VnlkNEtSdE5rVXQwb2Y1VllueTYyTjlUd0RsOEJkWmwvcGpUVytRVGhYdGdVTnlKZ2hXdno5a3NNOFUxWFlyNWliOEJleVpVTEZTMVBJTnlIMnd2OVk4Ry9CdmIvYk1PYWtCSE0rVnE1aWFMeTNiZW16cEg3Z3lLdFUvbXJ1MldydE5waXpjdll0ZHNtaHpoZDV5QXFGbVhveGxQQnQyaXM4U1dtR1R0NUh3by9XVEJJUEdJR21ySjB3L3M4Q1pRbGxFRFVRV0k5WFMzUE5vbENlMVoyNEp1RUdZYktDQVA2TjBSQkx5TTl2OEhSSXh0SGhVNzd0cjJRWkxjT2Z5amptRkxVZk9Xelk1eWpxSGtRZzBucHQwUm9MSzhrRlgxRXRzQ3JKUUdnbmdmRnV4YWRDeU9jblk3UHkvekk1dmxjYndTR01yYU5vQ1ZXTmE5K1NhUjZtV0RNeUE5UC9mbVp0bGRUTEZ1MlJTVzllY1FLL29PeHRQa2RPSmh0RW5xaGdlTk9jZFhQQ3E5OG91dm9FNDRCdTdDTjR6b3BYR2lpaGpuK0U4OUhNNGJMcDA2SjYwZlpxVnFlNVIyZWVpbWF1UGNXVVA2ajlhbHN5UWw1MTdDK0MzcjNycWhsR2plQkxiVkw4aEhSZThjUUpKUHJJVmE2YTRQODA4TkJTY2xJWGlpeVBGaFFXc3JNRmRLVXE4YUJYSnJRMUNYenBIODN0dm9IRnBvMUcxKzNOT2UySGtpK1N4c3djTEJUVHIwMmwxUGJNRERoOUlraXhrM05tWUZBQ1RUQnl0SFI2Y2tQTU0xQVltTERxZEtEK2E2THd5aHBGSy9QTENHK3VXNkRXWmg1c0JCWEZaZ3BqK2svdTVkTTF2cWEvd3Z5cXVRSTFZMWlzTXBjRUM4RC9LMDYzdCt3YWJnbmpFZ3ZMdW9SalY2N09YeU9nRlJTWkM5NFVsbnR0dmlKYllBaXVTZ01DaWRwbW5BOXp1TzdmTXhZUmFhM25ZRDhFb0VFZTNzNUdXL3M3bmlzS3oxMExpY2g3ZTdJM0lrY0MydHRQYWVUNDBiYVZDaG5tSE5VZFBLRjlsZjY1SjhmcC96YkZRajcrZUFSSVlvcmdYWVc4VjlwMUkrZ0pIU0xkK0pQTVFKZWNjNWlNNHNGeWJUWHMvR2hDeFdYdXpKd3ltK3ZlSFlQc205M1dTZnpiVmpUeFR4ejJpTzRwb0p1cEFNekRZK1Nac08waTRJd2ljQ0g4SXEyVFZmdzNwc05yZDZnOERzLy9XYUNnMnFxeVJyS2REd1p0aU1ObzZla2JrR1B2ZWduYXpUa0JUYWRnc04wVllBOFdpNmhZTkQ0WDVmN1hVL21YdHRFTVF4eExaaHo1SlBDSTJrS2dJRlBZYjYwV2pIMDRaTTZ4Q0dMdVBqRTZVU0tDbGJBYmZIenZFc0xVckx0MDlIWGw3RUZpTmxCSm9ydVZMZmN0bnNDbWdYaTB6dFpHR2lBNHE4MSsya1BlZXV5NDVWRWtrUktMc3JZOEFjYTBtcm1NSllJK0EyVy9EY0tIU2lCQ0ZicWsxOXNqcUNQV2ptTmhlNUZ6NEEwcmM0MGpwUXl6ZzREVzVTUERudzYyYlZKc2ZyNFJyWWZNRXBKcDI0bW9uQWpObG05OWJGS1hkUHdjd0pRdDNJS3lZdGhTbXpGODYzeHJDSTFVaUtxTnFYN2tlOFljVGxVN080c0NNdGhpR0IzL0VzbFRVdUJYQldLNkdjazFobVJwT3VtTVF2Rk1kTmV3UXNNVFkyWDNOOUdOc2I2Y0VucE50ZFVvNjBPNUV6YjFGaTBHTFMyMXRSSVRpRXlvTmRqNWJ4WGt2L0o2amJvS0pMVWw0L2xYRkFuaS9BUEtvYWxBeUlEbTlMeDd1QytBcExVYU53U0RzOThXVTAxNXZnQ1M4aGRsOE9CNEYvV3NqTDZHNlZXOEVtRUw0M21MbDdEVGNOWVFaOE5vSlpJeTcvbTJuQVFod1VjZWYzb2IwS3dmdGdPdU9FcDlFQ1FrMENJSkhDSDd1UGFuMFdLTFVYSittbnZwOHpXL0Y1Tm9NNFYrdVZGMXZpMXAwYUxuUHlaMlZNY2hWcEJ4ZEVET0lPV1Jlb0lMeEpiZk5tSWlvYlpqWGxsWjlxWDNPdEtqb3JZWDB6VTlkUVJ1MmFaa2FNaFR1RzZOaHJQOVJTOXZEeHlBWG9XMlBJUFpGSmNycDR6V2t1dTN4QUJxcWV0UEZ1ZWcrRWp4UEZLVFNRNjdhVHRsY0l6Z1B5S3F1QlRYOFBPU2R3eWVmeWhzdHdNTStkQlhlOXRCK1l0YlB2UE1CV09HU0ZKWDlWek80OFFSVUNERFF3R1lUbGtuV3haeVhvaTRnVVZwUXprSXBybTFOdjh6dGRGYmUzM01PaEZIaU5FaDFwMjhZNzNxeDhLYU5pZ1JtY2RkL1pWckFxZGtVWkNIQlloUVkvOUFWT3BPcEZLYTR1TVZXUmw3aFUxbE8vOThRc2I3Ulk2eHowZlNvMHpzTldaMElxUWt6ZGg2RXYwZHZva3RiVUlPWWFsYm0zN0xVblQxUDBSZG9wamgwZjdBd28vM29aWTNUaUNHTkp3RHlGTEZwZGk3U3h0MzFsUWtoSDBxaGx6SHIySDBQUWp0dEZFaTBXcTlLaW9ET1BKWTFJUjVUSjBkSjU0NDhUUTdOam5Wa043SVhRZzBEU0V1Q21kODNLRUxNQ2hFUTFxSnJXL0NCWkRoTFhJQlJLakNxbkkzVkQ5R0Y3cG41cXNoU3hBWFJhQmMraURwOU1sYlJiUnExa1ZneU8yNzJOMEhpNml1Y1lvMVpGd3NnTlNNYlpQNmZ0SVpTTytEdGx1V2E0b3pYL1AwTVd5TEFzbDVJWmNoT1JNYWtUanUzejhCdWZPL2hTMlFUUExVYi9oSFM5UWVLM0xsS1VMeW1FZEg2cE5BdlU1MitIeHZtU1VYZkFiM2grOTJUeE5VL0hsdFF5NkZuTkJQbi85Sjc1Y1NqbTRROS9VOWppcGtTUTVnMERENGhHZG5HdjI5T3FRUVk3eis0UVN3alJpZnNONUY1c1dHcnVsQnd5N00raHdsQ2xlY0lLTWF1SDl5UGsrUWZQQkV1NUJXNHNpNWdPVTRWc0tRMXV1YytBeUNjazUxQkd6c0RxNmZPbDdoYmJjV2xSOWg1c0U0U0FPZTFiTm8zN0lQa0hnYzFMK1pjTzZ2dCsyYVgxeEIrRjlYUE1OOEdPekMxeHlDb21DRWU2OTJUMklIdVlsU0F4QWpQMVVSeUFMNC9HQzJzTDgrUHAvQm5udTlhaUdWV2p6WFJFR0FwKzZGTjhEQ3hBb3UvTG0xcjRCemcza0c1U2dYcGdKQmU0d1hLM1NuRFdKaE4yV25Nc0NsMEFKc3lMeVgwUmJualA1dk5IdEVuQ2ZJTGRibkhLQTBhQi9GS29FcWV0NlZBWXduRUFRUFV6ZTQwV0k2SWRFcnJoNXRleXZDQnd1R2p3YzYxZzJOTDBnVnpXSG9GU09YSTlhV3lCMFljNmFuYjZUWGF6d2pGeEVrSGdKZVdVQVlLYmhzT1lMMFZ6dDZqYzZOTFIwYW5KYVRueEUrT0Q1WU4rNDJhQUd4WFdVQkx4Wk5uODZiQ1ZjVFF6L0FZWnhsUi9wTGMxbEZvemNGYnk0QTVQVDV4VFg1TlU2WFFNajhlMVIvVGI3YlAya3lXYUVpNy9BRHh6aVU5UW82ZFYzMzRaUW0vekdvcjdmSURFRmFiMEJuNFR1YTI3KzJYdWpUckdxSFBnWlBUaTRZMDdsR1R5UXNFeGk5cXRpUUxhUCtMdmxMSzlKR3ltUjZ0SUNQTE93MGd6SEFieUNTbWJnZjVmTnNhRE50b2c0QjdoM2hjVjhLdHFWN2R3NXczSXFjOTJoQk5FUDBPcVFpZEFWbTdkSWZPSG1zRmpHaWZseUdLUXdLVFhsdXU0YzRBd0RBR2QyTm05SXpGakN5Z0VQREpiaXRPaWpxN0JRUDBVYXRCWVI2b25NMnZZNUw3bzA0Z093MVo2Y3RUVkhrSDZ0N2ZGeGxCZm51d0xMY1llZTZLYWVJZ2dybW4rYzljMGszZ05IckRKV0dmYnpXTXJ2V3l2WnBpNXU3UjB2TVVaeWt2VUh2dEp2NG9TZSt2MXFCMWl6QTRTSHYyQXpHOXM4bFVrYnByZEJyUGpxUnI2QW5mZHpmb2NyK3pLRDYvSERQUTBDaHdzZm1rQzA2WmtKT2VzQzlnWEVLaFRRU3RWWmJiS3ZGcUhjNm9mdzZ4Z0dYWHRocVUycGZiMlRiTWJLb0lPNGp2TUU3TStCN3EreFh2YVg4OHBSN0NQRUx1cE5oTldFa05BaUZlckh5ZkpEcWZBQzRZUG84cFFMeDhhR09jczJRc2ZDSmR0WTN6ZEFjVTA0c0FPb093QWxKcGFxSFVSdFhuNjZwR0VObS9HQ0lTTmFnTWxXdzc3QjRSL1dOLzFCYVFtSUl1K1NyNEYreGFwaHFKMW1pNVcvdERMVVZQZTk2NXdxMEd0TXpOcFI5TTNZK0JjYUhUd0N5Tm5XM3dqUFhLV05Oa0l4dnhxVkVKaW81V25MVmhxV25mRUJnYVFsQXJIUHllQXZ1MnJKS3B2elVBQWp0ZE9CTXpOTHk3K29uZW0yT0pjTEhXOUFsbnVKZVp2R0s5Mlp6R2toQzBENE5Ca0htY0hXKzdFbFZrMHZPN09aNmZubXBFYzBiUjEzMWc4TTc4K2dBYTBaQ3dyLzZpeDJpMTBKV0EyNkFWOGVaODhvT21FYnVsR0ZXaWdHcWhIMkNCS0prR2dhQzV1WW56YTczSFB5UEZQYjNyWXpZTlE4Q3FNWWRyY3NDWXFxRGZTUkkzV0dHUmFXa0E1d2FsbXd0NDNWZ0ZrUVZLallZdVYwangzR0U3OHdXa1EzMElsWGZZUFBwRGlIZ2RVa0lsazJ4aldzbTVTZUZtVmsvRTd4VG5BNFVEVnFacWpZZXlheEdaMUd2dXlXMVJGdTJkdk9xSWQ0ZFpiTUV2QjFnR2txWUtyL2sxemIyTWJkZHl2d05VTWMyeXNReVJ1VzRpQll6UHBsMWQ4ZnJlSWZYRURGY05QYW5DMERrMVZzZWUxakdua0xqRWJFTU1DNDZMRFg4RkFveU9Fb1FKejVnWnV1R0N5cjgxRG5hMlcrN0Z6Zmp5Uy9EWlVubk12ODYrSE1hckc4MU96Ym9EL25uOXRRWmtsbGNVNWVpcytTRGJZRURYYjNRRjFuYlMydmJPdW9zdURQVGRoSVJGQld0SndNSmdGKzlJZ0lTVWg5WE53aWNjOUhHNk9MUFl0NUtNM1RmSHd2SkhneHdtM01EUzlRYjBZeWxYcWtrZ3BGM2d3MUE1ekhBaXVEY0Q1WVVFanJnUzB6N2U5bERWRmkxMUxiVUhZSnp3Q3BXbUVPMERKejJtZjRwd0owVi9nYmVpUk5YQmlDc3JDSWJuSnprVzBkUFk5blJKNXNHUmlDa2h2dHc5eVE2RHVobjhmbUNxZ0hoK3Z2RUhtSW56cGY2REdnVm9yWHlrSE5aTzdJSzBZbUFPWGhMWDV6YnVPTkYwdUh4cC93OGxPa3FpVUV4TkxTa1NYOWVnaDdzODAzbUorNElla3Y4bEpmTUZtcjZLRXFhWjBXYkp6dzdTZU1RdWJSZDFQa3JzKzQvRWU4WjJGdjVvaDlnczEvdE1ocVloMmNYeXVJcDRPWGt3WkZsR0lCaTFoeHV1aFBER0lMOUV0OXZpK0gwbDU4N0ZmVmVkZ1dHK0ZKREZMM1ZPZ25wZWs3WlkrSXVPY2w2dXBwRTZDTHA4MzdsQXh4c1hJOTdENTFsRWhrdjk2YmpBZno0aG9HM0haTFpUNnRjdUNDRVZRL2kzdElqYk1aQ3RIL0NyK0syUytETTlzMWFmS0dsNmFzZ3JzQzZlQVRiMGVuakJYeGVuZWpsbjV1a3h6VDRrOWVlVUhwVDRmd3hhWXRoRS85OHhuMDZCRXZKLzJpRGUveHRiRG85aU1iZzBzei9SSHVRSUd2d2ErblVFUk9yZWpCSmU5V0NIOWZTNm4vYUdWZTIyRjROU2tyZ0xYM1FsYURhcHA2Y3o1TWhJTGs2ZE9EOVdoZHZ2SXpkeWRBY3BHbjE0VUFvdTFBWHlzNXU4TUIvYlYycnFVck54cHVuRXlWNS9Yd3MwYWluYmJjdWE0UGVac25yVk11UDZ5Q0V2TGIyRk9tQ205NnNzUkhnSjZzanVaZG1kdndaMWpBenNiczFCYkFJaSszdld2OVFDdllyVkQ1QWlua1dtUzNpS2xLUVhsQWV0eXdRRm9QUjM2dWdmTXJSZ1dpVnFaNUNObjZsdzB6WFlpUVZCS3NIQjJTWjNJa2YyYjRIOUFGYjdyanBaSStJR0YxMVdGU2MxOUw2dHFEK3dEenpFWERBK0Nma3dLMlVUWUtBZkpaSW9GMGtaQWdvb2ZjMGZqS3loS0NaNTNrZVpxV3kyMUtzNHVvaTBEQlhPREpjNFlkVzl4UGVQQzNCaGVHaGE5L1hXYnk1aVVkaWNTdVZPY0RHdDY5RVBUYytMSFZWcldzRGN6T0ZwalY4TGU5YzlqVTk4bzBCZzZRSW1paStVdzZ4aW9IYXV6MUJmajJRL1A2SFJZTmxZa05MK2F3cGdzd3Y3SjV2MEgvcnY2dUtETDNhTnhVWU1QUFFMSERRaTR6cWs1b0Q0aDg3cHZUV2VGc2dPV2h4bjhxTFVucDg0emUzKzdocDRKWFFsOGtMSzYvQysvaGx2Wk1LV0t0dkl1V3RHTTU0dmxvRXY1TFpLN1JaS1Nod2VyL3ZxQXBxNUUrenkvelRUclc2TDJtdWE3d3FzeVgxUENpNXpEQzZ0TVpCOVFpY2VvYmN3QzZmMzZKT2ExZGk0ZlpGYjhQNmlPRlBXMzM5cUU4bTZxK2RqaVphYXdyWWZZSFM0NmJYL0ZqTGY3SGZaSllySEZiL0ovallVY0xwZnlsWFBoS3lMdUVIMGJPaXVQSzdVT3Y2cDRMNHZGeVpYSExma1c0QzBhdEpjWmJKdlluTGFaTitLS0h5bzE4TWQrZk9HTXJkeE4xdUJNR3VYZ0J4b092bjF3TVUzdElrRFRCUk8zN0sxS0c3bU42VDJOREk1REtUeGNmTGRrNFBPM0d4NHlkcWRjUTFLREZoRis5MFVINzRTYS9IcjhSY1h2cjg2YlR6dGxmN0dhK2YySTN5cFdNSmhhdnEzS1dOWVNGamkyZ1QyU3VXOXZ2d3NOZE5zdmlWczdIajVlS1B0bEc2RUtHMThqbGxXaFhhM0lsZDlxcHd4bzl5N01vcE0wVjFydmxYQUk4ZENLM3d5ZGQ2dDhCaE1pVTdzcFR3NVJZUzF6MmU2QVNLOXJzK1BEMmRIcDViL3Bpdm5nNXFvL014TFpZc09lNElwNkhiM3VtNWRJdkxad0lhSUxadHU0aWMxeThJNlBNSmgzbVMwL1hjMkJ4UnY0TXhBY1ZJNDc4Snp5cytqcTlMNE1LcFM0enZKS3E5R2ZkaS9PUlM5T1hQdHFFdENKSXl6dEY5bG00Snc1aEJMcUhRWUM5NStKZUhHVHRtMVc3eWtGY2poQ0Vuc2pKWTgybm1ONitaYW9vWDRTbkcxMlQ4VWFuV1lpbjVHT0ZOMGJlTnB5NVRLc1F5QWM1UWs4QUlsWUJzR2lMdG16SDc3NWxXTTBBeTZTYXRwV2FONHd5ZlhKeU1ONHM5RDgxc3NwaXIvV3Q5QTZnSU55ay9KaVJTU2FKaEd0SmdOQVdBSGo1d0ZiVUNoT0RiV3pSUlJzNzRmamhCbE9yMDdwNVpjbVBRdXVFVE1GTjJSN3U5azVENk1OQXJ6dFV4QVo2WEpKQkh1RjZWUmplZjc3ZS8zaUZLU2RSRUN5MEs4NjZSbFVERTU5ZnFZUDREdmxCMFFMRE80UEpGYnBJQXFKVjhjMXpPUDAyYkExQ1JYTm9vQTVyeFlFblhpYVZTMVhpbGVydmtORGQzTXd0SU5pck5JNG9WaG5nTWVqZ0JOeTVaUkQrVXRrN3FQSlk0by94YnFWYnVucFNVRmhZM090Q0d4TjF5T3NNRUF2U3lSTEJJVHYxNW5CcDZPNEc4NThoTVNHbTFSVWhWcXpDbmNDTE9ZQ3U3d2EzbUpvWS91R25rWTdzYmdPbktDUS9vTEs5SXA4dCtzclV1VitLblFORTl1VTRFRTY1Nyt3NlR6ak9pSUthQ0FDZ2VOaHllWncxTWlLS2NBTnlvWUpUVUEvSS94dmU0cmU0ME5CeVBCSXhQbFZhaHFWMStXK3VEeWNzQW9WSWw0WXRUQmlDSWxYQlhNOWdpZHVhMjNXN2dFekNCQkRRVkxaWndwWHE0UXJQbHpMbHhUMFV5ZE9hZEI1QzRYU2JpNWVsL3pLY3VYcGEyTlNFeHlId2I0bnArSmxqL0JaSkZNMjVadzQ0U0V1RFlRMDFReitEL1M0L1dyZWVxNlBLQ0l6dEZ2K3BUa09sa3N1aS9ad2RpaUJadzlOS3lLSWZpZjJzM21iVkE0QjJ2c2NmQVE0eUZnNXdmdjUvajhyc2hRaUJSNTd1bGttbm5KOTN2VzE4bmtTMGpyZlhqWmtJVGlFT2lzVVhYU3YwWVRHbzgyL1JpbU9YZFNiOEJTRzhDcndZVTlLZGhrQVdkMGZkTDlzN2pZY3FmTk5CZFBORmREZ1JzeS9RMEFXQXhLWmNtWGhDbGU3b2oxSU5yZjd6THcyNldIVnAxdWxLeGRuOWFWMURHd2JOMzlQZnZQRUtVM1lmZlROMFNSWkJ1V0x0eUJPNVpPUTVmQzdWUWVCUklqUTJac0N5U2FabDBaUVlVeExwZTZac1d2QVdqd2tKempaRFhBOW5XejZBcFFnS0twL2ZobE80cVE1R0J3K2llRUdQMkVEZWtVVURTdTA5WXhjZ0drOWZ1K0RaZUluaVE1VWt6L0xLaFhrL3VCd0ZHZVhMOXVpd2tNVzJsRSt5Mk1kYzFNK1RhdVpRblpjNlpQclhubHZmUTBxVkZpTzNSeUxJTzRZYTJsYWNOUW1BNmlDTXJTV2F4aWdsOEtVZ0x6eWJoTXRtR2x3RUtKM2pNV3NtNldkejBVR0tPOHFLZjFtNEsrLzRQQ3VoQWxSbWJ2Y0xlN2dTamZhT3FZb1FzQUpHVURFUWl3Z1Q3MWUrZ2pmS3ROcElOM1BIcU1BazM4SGszS21yY3FxNS9rL29JeG41Y0k2aWh4RnEzYkZBZEpCMlM0VzJiU2RTeXNCZHhkUXg4VlFVM0xvVzBTbTErdEdKNWtjRU5yTlJzQVVxelUrRWxLNFJxRllpWGhTQnhhUVE4WW9VcmpyalhhNjA0Zy9mdVNuT0NHT2N0MTJqZlhObERIOFdnV3NjZWd0WW5ZS2tTNkxjcWkyWG1MQzNDZ29OWitxV3dkdDFpRGJYdW1zMzM0V3JyZGJBeVF1VDhEQkx1YStCSjhqd0ovZ2NFZXBsRytpNUNrNitGTFlTSGdDYkMveFNHcWtYRTlwQ1VkUGJGUjM1aExDbkNDTlJMYWZBRTl5a2VNN1pOYmo2bmQ0QVNXOU5XUFV2ZlVYelJCbEdObDFESVV0dlJKelIzTzFtZjJqVkJRNmpvNXpBL25OdEtpZklVUS9SOU14Q1JROHpQR1lFb2h4VWZWejh1RHBQcGxLZFpVVERldWJDS21vcGtVbU5saUNOUFpEWisvdjVGR003V2JTMlU5VkJCUkY5WUtHS0sxay8xa2ZZV2ZJTlJpSkZoYlNxOWxMSzhqdDZ3QnRZUi95OVhTWDB3bW5GRytvRzkwNFFmSnBWaEFCaGVWSmhaQzdHbTJza1E3WlJ1U1doajhkM2tuRFZpei9GajRPbzRpM25ZaXlFWTRnUG1ZMmlRN2JPVUlnby9HNERITG51K0NRYTBwdjNJYUxIUlYrZ3FyUjJMbG9XakxUbTBsV0d0Vy92NFk5NndQR0s1V1dEMFpxalJwMDZtbElranVtdmhoZkxIanZPaUl0c2VneXVWcjF4RHFYait6L0JId2hCUnB3RGF4YkkyQTdCdlAxQnIwQWNTbXJhZ1VLWlpPY0c3T2wxUDBFM201a1R3c2ZGSTRac3VVZTFZczUxblJ0cVNPVU9lNFhvU2hmM2hjS25FR3ZDdm14UFRQdGxkNGRaK2RDWDU4MlRoQUJnekpTWEtIYndQTStCU053Y0pTUjREMlJldFl6M2d6Vkh3M0dub3E4MUo1b2g2eUgvaVF5T0ZHQ1lqWHIwR1ZoVytoYmdiNzVwWUI5Wm1XZlY0Z3R2SlFFeEhoMWVuY2t5VUhPUzY5L0lxSlExTmlOKzA4K3BxdGVmdzlNWDd3K05RZ2pMMTBVODhHYVh0OU1uUGIvZWdSckVnY1JRckxFaWxjdldTN09FNjhVSlRFTXBjSXBDaFZTT290eFhDc09CMktaTDVOQ0xRZmk1NUpVYmxPNUZ5dlZuS0NMRklvL0syZkZPcnJMWExodlJkdG5oSHZhUExIRndYNnJ2MWZSd3RuZmxneEZlSVpBMW9jdkU3bm15ckRldE5zVzZRMTFWdXd0Y2U2U3pyRmNGekhRaU1DQWVRUTFIUnFieHhiQmVGUmV5eTF5RmdRWDg3SmZOS0poNXROZWNNYm0zZ3kzSkhKeGlNcHFaZ0crelhVRHJIQ3Z4eDdhcmxOT2FJZzhzZGw3NFdnMnBRclFuZGg2Q3lqR3NZdFNPdGZOMkVJQWlnL2N1MWxSb2pZMGhtSVFiUHJJZ0xLQzN6UUw3ZjBrRWpmeWZwd1cxL0ZBU0t6UlVCVC9uNTloWEhlOWR0cFF4QWtTMzRScHhqUS80K09hVm1IUWZqdG9WcE12S1JoUHBBbk9hdVpZdy9LT2xWcHZtUWVMNHhhcWlSVy8rQjdIK0phQkFEYmwxbmpJRUlZQ0pCL05IdW9hWDR5cUlPek9taXBXWWJwNnNKWVA4bWg3VEFpdXdqTDFYbm9RN3piN1BZQUpTOUNaMm5COWMreTVZQk9xVE9JZjZkMjNoQUhYbmZnYkVwd3ZBdnBUcEdrTFFNUWl3Y1VEQ1R5a3hIZk5uZk1CYWdNL2Q2YTZJSWxGUE1Wc0t5U2NzaHVNOStXeFQxakx6b013a3JvUGFUL2U0TVdsY3dOcTJ1UE1tODFaM1BrNGdjN0h5UFluQURscmd0NVYvcllhY3ZMWmtVQmFSeE0xMnNpQXRVaGo2SHJJei9NR2s5TGZqaXFITzl1dEU3THQwS1J3NVl2T0FiRWVVOFBwdm1YK1hScml1TW9ZdXkrUlBHbEI4dmNLWDlxTUkyMGxqeHBiWW95aFdaeVJ3a3NUNGFGMWVwQkV2MWVDOWtabXB5d2pOdGZ1NWkzNVJIeEcxenhRWElkbS9ZV21EVmF3T2lCMzkrbk5LM2kxQllrMTVkUDRvOTk2eUlzL0N5QXlxYUVGTUErMjBOZWJwNit0Mk9xdU9KY2Fwc1gycU9yTFp2ME15RDhabytmTnBXTTR4c0k4UE9wUDJsVHZUV29CU2VXNytxbWZ1Y1dkeXZsY1NOYU4veVdjUkQwSUdaY2NFNlhuNVNnbTVmaFlzamlpQ2xTYXppQ1dtaXZFNlJRV3hWRzgvQ1R3MXhVc2duN0VTaExIUmRXcmVqdldVVjdUTEh5bFBSUFpSTCtMNVJRSTloTVpHVlVDelBneGRKOGRNK3VzWDQxRkdrNE5SeXkzTnR5dE1oL3V2MzAwQUM4WXNEZG9WaGkrM0tBb3lrS3VweW4yQTR4ejM5dExXS3NjQTRlMUN5QjVnQ2VsSVc2Zm9aak1LZWNJNjNVWk13YjBYc0h1UGlKWmpXeUU0aXQrWmpjVkMyR09ZQ1liVlc3akhXWFVES1ViVTZzazBsS2luckdDYUlyNzI0c2RpZ3dPeWVzS25DNG5hdnFHVllGWU9GM0RGVUhrQXg0UnlrVW50WnF1RS94VXh3L0ttT3ZhN3pHUnR1UG5mbnljcUFQaDdzSGVVTWVraS9zRUFGWTFZaGhMdnV2dHVkbjFSTW56b2NGK3RZSjJaZ2JCb2RGbHkzWi94L0xOaDR0WDlHYWpjZEVPQ05JTnRXTFNXODZoUzRIRE1Bb002ZjlvT0pzdVFEeXhDaVNXcEgxTG83UDlUSkExa21ncHpaRXU4YXhWQTBBVUdXZXp0ZUlFeUFKOFlvQVNFZ0N6TGszaEwvTXpnUDNnZXoxWHZhbWcvakU2aUoyZ1l0T3FxQkxuTlVDeTVYWU5BUHBpejkvd0xsUVZsNXFGU0NDenJydDZJNXFscExrTTZacFQ5WTBvUTRncThEalh3R0pwblk3VzV1bzVJV0tLcitxZ3ltUlg5UjcxNzN6RmUwM3ZERm4vRXJES3pTN1hYSWthWkxmS0d3bGwrNHlGUTFON01VV1BOYnZDYnZhbTZRM2wzemt6MVpQbEtWSGFGVTRHQ1RRaFhOYnBMY0V6T0Q3RnJJbFdzblcvaWJ1eW1qQnBaUU1mTEJsQis2YkRQVFphalJRdUY4cnBid21OM0Jaei9pekdHYy9BVHliSlFCZ2g2UkxUMm1jSGhqY1d1U3pkT2ZieXl2UVJweXdPZzRPMENBdXh4ckRMR0VCZTJ4bHA1WkVBaWxQckV5aUdzZUNORzMwTERlRGdEbkNJNnRIeUVzdkFLMkFtenRhaVlzWTJBUk54Ri9acndYS3FiNVB0bitlSFZycFdLN3JRU1lKc1pseU00SjluTjR4VTVjNy9NcGxUcFpud0VrRWVCTGpNMXZQNS9TTGczOFE5S2lJd3V5dnQ2dzBTcm9IdEJRTnVyS3V0VkFmeUZVZForNU1XSi9YQUIvMEZsZEkyZzRrZ0V2VXRsVVQzOFVReGVxdHVRaHJuNDF6RnBQeDF6bkx4RDNOMHExbElGVkdzbnkveUNFR2M3dWVIZFhZSGZxcU1GQ2dscHlJREFEOURpbHVzeHZpNS9aTnM3L1VnZkV4SEZveHJKeVl3NHZGRVFGdXc0UGJkTXpVWkUxeTZKT2RyZHlwWXdYOXE3QldGb1RWYWhWSno4UTRIN2JJWldTS3JYZERQdzhxVW01NklZNDNUcm53WnU5VmFLWmptTGR4STNmZDBvaHFIY2pid1VxajdEMkQ3ckUzVmUyaU80aWVta3pOQ0l2Tlo5RUdVek9mQk42akowa1J3OXdwdTlDcmVQcDN6a3NacDVEYmR1dUlkRGVUei93cTVXY2R0WDR4VWQ5YmxGUWpyT2c0b1JiRVFxakhBdzJkZ1VXUkgyaTREQXVpU2V1aHAzNE1HVEtoTVRYT0tFSHRFZ3IrQ1NydEJqb3krcUJpZXZzTkxaaVdtQWVVUmEwayt0eVN0NndnTUluV1hiZG4zRXZURDhzaEhZUTYyeWYyLzljdG5qc29UNzA5dVl0QnJOYjFBdVFQZ2JlOTlRK2JrOEI5MWErS09LZFZZQ2p2a21MYzUrYkdmY3FlbDgwNWIvUFlLdWpyTzVYcmN3Vnc3MzZiYXNTcWNzTy9nOGNuNVNBcEs0M0oyeFVtclF4Mlg2L2NMbkdhZUdTMEdDSzJ6V3hhQUJWd0N4Q2xQWVVsVmZZMlQzTHd4c1lSejJscm9wUThDN045SEE5dVZGMFJtbjRIbjZ0RjFBMFAwS0U1a2sxcHpPUUtCcXkrb2pnVGkyQ3cyWUFVaTgva2ZnbGpoeDMyT1gzbFN6TlRTcGJDWXo0VzR3Q1dndThXZll0ZkFudTdvR2I3dW1jYnlnbkJQZ1Z4cCtINU9zQkViYnFuMkZQdTlidnljZXNFWEwzNUZZY0N1a3VoU1plTEpLRFQvaHVCanJveStjRjZQeitSTzU4dUFJV25hUE5YRlhvcm55Ri9LdHFzVkJ3REJibjhIR2tIcVpaZHlsUTNCS1AyUzYxK1VPSUNpclhKNFpxcHZqbnJxbHIvQTN2UGlUUm1OMjRLZG1vd0tyYTZBeCtTUVRyUGNKMzZkeTdDQkR2RmY5b3hhWm91Z0RaRUFWUksrdjFYYjdUbUhtZlFtMVkwZnl3WlBROEoxSEVLYjhIVlZCelZ4dXllMXdzRTErSkxBOGxQekQxNjM1VWdkZGZkMlN6RUhmNWs1VUdIS2JaYjRlS3ZlME5WQVZtV25VR0FzMUZmVFZvOWlOZFMzOUcxd0NHUlN3VjdFY0dQdzJuYlpObGtObWRzdlhqVDlLWTNxeTFJSHViK0JpRysyNkhqdytON2s0RVJGTzhEZEx4TXQ5bG0yTnpNSTVIc1RkYk1zdW1sNDVES1pMOTA1elBQWG1WSWRKUW9UNEcwbUFmanAraGo4MFRqQmlZVUpoSWhWMzVmbFl1azZPdXFNMUpOYmVadkt6dklka2RQblFaYkFRcG9WSkg2VkZOdXBLbFZnWkFXaTExU2R6bXEvVFBVV1dWYlQvYUxNZ0dPRk9KSXI1SWVNb0VjZ0hnTXJOcWVkL01BaU0yZEJTOEFLZndubjNlR2xFaWN5ZnQxL0JmbE9FZEoxQkh6VVJidmZWZVRrWk14Zkh5cW1NT0lqNnBBMVBvOS9TdkdLWnlHMmQvbGRsN0hRZ2xOQTZVd0J0MXFBNGVqL0dTZnZhUnU3RTlYMFllendCSDF5VU5sR3BsWlQzbEZycmZhbDIzdEtOd0NXUmNxYzR2S2RCZTNtbTh4czU2Y2gzbWNWT1pBKzgwZndoaWhmTlcxOGJndGt6cmdVellIRzRBeDlxbmxka1I1NWNSUDN6SkxTTXdWdFNOaTlocUxpelRnZ0dFdGVMY29ucnpmeE4xQk41V0dqNWw3TVFpVFZNdFR6YmFYbkJ6WExTV0RBUnQrSjJ0cEVneGpNZ0lpdXJlSHRZc2RWN2h2bDFqcjZNb1NueVNpRWNSUmd4aStkTHZtYk5LV3BKcnJzZ2N2R2pnS2RPZVptRTJGb3YvRWZuSWVPTTYzM2ZTUUMyYktBemU3THJmSXo0M3E2YTZFTlR5NFNPYWdqbzFGTlVkaHJpMDRtTlhDME10NHlReno2NHNHZFJxSit6SnUrRVUvdmpZWVJlWmtLVHI3bDVqc2ZMR21UNlVWbHpKRTQ0STMrZndpeXBXMG45bmxIc013UTMyeTQvZnFNT1ZNSDlra0xMZVBmSEJQVHFTaGdrczQ5WUtDVnZGSUxaYjlKREZYZVlXTjRIL0ZlOUtuZnNtSlZlNmRMbkdYb3k1VVMzaVhtTzhVeTFlSjhLT29BUGVEejR0b1M3dmFKNmdadWhsREpKRXoyZ2pBQzBoYnpjMHArMlVtMmpFTStrbklSV1pqK01WSlp6R2lxMmxySDRVeUhOaE1oaDd5eFlUYi9jeUd0eVVZQTIxTVF0OU1oMkNwOVVsaXlDMlE5ZlZLUzhZZkthYTQxdHc3WUJXaEhqNXNMT0lRdndNNnZXbVh3ZVNQMUNwMno4b2M3MXc4MTFncHNmMUJzSkl6UnlCR2NmYmVoRVkrTGVNeWFZSzR6Q2pPUG8wcktyM0ljTXkyaG1ldENIUnNGUVNuSTY3R3UrK3hZZDFQYllOT0hRM1FOaWRrK01MQlBGdzFTSW02RnA1di84WURCMEpwMG1UVTNmWTh3Zk9QZnZGTWN3S3Q2b3dBbGFLaGVXQ2xwN2VZRDFYY09wYTJXbE52R0VWL3hxRXMrKzZLOFlYSWdZeUQwb0IwUUxEalEzVkZqWE0rUFRxQ0RWL3ZtanJmbWtsYjgxRk83U1BKSHRWd3UrbWt2Q04vdFdiOU5lL1h1QklUN2VIck9PbjNzK1BnVXFWRDRteWRZb3MzcDdZK2xSSlAzdXJxTHR5WENXUWd0QUloZDBtQ3ZRczdaeHVMK1c3MFFyenZZdGlMWVN4T0JoVWlwNnRWSWJuaE9rUlZKYmlGTFU3UkhJMkExTFFETUhlRkpXbmJhcTdPU2ZPNm1EcTBHZGpnZ1ZUTTNlb0ZGM2sxOUcvWURESHFXc2EyWW5IZzNIdWJ4aDlGM0tJSXBTd0JQalB1NG9mR0lTNUxCSy8yakJjTlA3UHd5YlJucUJZUm9vaHFRUDNMY1JXTkc1bUZaWFVKNDY2djNxOUNzbnlHRlRDQ2hKL0dnWDBvSmZtM1RCUzFWbHhCU0VJTE5uSXZVUCtOVjNPZldFNEZCTkhsUG1sS0FMaU5aU0ZJVndEeUxUeUtjczY1QTVSOGQrQ3kvVkNjaTNIR0xzQndXSmVZM0ppMk1GRWNNWTdUdGcxc3UzRDRBTUhsaU40L0YyOTJwdjVpTEhHRDFXTmFxM0hEdmNjMFU2RjVGSFJockUwb2RmSCtZck9xWFM1RTFvWkFNVmQycmx1RFBIUERZcjNEL1FnMWNnRE4xRUFqb01nUmdob0h4aTdNc0ZueUxUUmpQQjZNVUZWc1liWTJuK0tLbXBBMGJDRW5Fakcwc3g1NnNNdFFPeWtlN0Y2VHV1c21HVFo5VjFncytXY3lVSmxUcGdUbkg5ZktFZnd6TEJPVUZTV3RsT0llTXZxVmJIMTA0MXdPRVhCbzdRUS8xclVNbWFHL1poMi8zdVBiNE9xQWIxcEpNWXp0bXFseWpqakt2Q0Rxd2gvYVYrNUdnMDVXQmJNZzdHbTJFbnFueTJHUjk4blJCbjY4eTFqQU9NUjY0bkQxd2h1TFJvK3BWRXV6TXI0K21TS0RjOVpyNnpjN1ZYU2tiWHhSaXEzeU04ZVplYUFsSXh6cktqd2toWURjY2VCY3dCbUpVUWVuK1h2VlFnSjRJVTd6a3FJN1luRDBMcFk5UWFZcHQwdHlhVW9pUzlkQzRSVmRodnN4ckEzN3dEenB2dDlwdkFXTUpjTmh6OTF5anZvSy9leVJiRzJlSkdBR3FFbTF3bnd6Sk9TMC9OZ2pyeDQ0M0c0Z3NUZnNzYnpUSzlObGJEYzVFdUpPNnBrbzVHK2wvbGZOTjdSTnYyc01qYXRtNE92UjlRT3QrYzUvTTNwQk16L2NoRGJVbVpEb2VkN01hRytrMUhIWkhjNW1yWXN4THdscmtuSW05MlBLMWk5dm56SDg1UnBCVDRmVjJic3FrM0JCSHlaYWtkNFZzTU44aktkL1dhc0RNLzVSb1c0dEhieElzY0RSblh4M0pwWlZTb1h2MXVzOFJ4RW5EdjU0VHpZTzNrR2hRQXBqTXd1WDlzdU9maFlMQk05V2huUUlUUlNnQVV6OFl4aG00d0FKNk5kNTFTSzhGaVJpenFKcFdjYWZmSHF4Uk5QcmEvY1d6QWgrTmVLVEs5eWdnSDQySkdzcmNNTnNiSFZFVmlONlFGQURnL3ZhaHJ3bWtTV1htQ3NKZnh6QldaQXF1a3FmYUtUN25hYkVMem51TmRsNGpUbEY4SFp6cWlQUUl0bm1UOHB5UjVYOWZ1Q3dpUDZ2L0VHVy80SG5sVFJWcUVJU3k5RGMvYzUrZnJQUVRjQVNJSUJaTTNEWFFGd2JWS0cyaEN4Z3RuOFNKSC9lTXZnY0wrNENxSlJrMnJzWlVqTUFZTTJZM2xLZGpZSkdDRVluaEFtY3EyTmN5enFXc05BMUxlTFNZNE50VFg1R09GOVJFL29Pd3FSN3dZT2VmMkdDYUVUSWFzRVpMMStKd3ZmaUh5VUJTQlNlYUZ4ZlN5Y29ZVExJVTRaVlduNGJENFU2ckwxTnpDL2dYZ0VuR3hhMUg4bjhZNld2bGg3TWpGMzd4U1RjNHNZTE02NURJUlA0OUFBMWVVVUhYa1NNRG0yQTdjN04wUW56eEtNdjY3bk1WMU9YNm1kN29UOXZKL0xHUUpNd3pXV2ZHUzFHYXhHZkNhQzU1TTE1S0ZGZ2lNcFlEOGEwRjZjbzhIdytnQU1wMjVYWTRVUG5xRUdrTXdHSDluQlBxT3NnaUFoOVkzTkR0ZE9rWkFVN29CTFM2MzBBdy9vd0NBN1lneGNIYTI1VWdwYjE3YkZYWC8zbkR0S2ExeGl1Vml4OXdTT1Fxd0N0bnVGNTJ2bEdoNTNURENDMm5yRE1pcFBuSmZaUjdKdG93WGZPZUFRc3llUFNNWXdNWkcrd0YxWWtycVdkYnV3b0lKaFlzWVl2QVRpWFc3dktBb0Q0N2lKb1NIQzFIRzVSa3Ewc2NuYVgvMHdtY3Zsbm9kNWRlZHJxSGIwT3RYV2NaS1drWkZqS2YzYWh5d3gyeUhwQU01L3BsdEE1MDQ4bFNEd0JwOXFPZndKL3pCbU94K0RLeHowcmJhd1dtZEZsWW95WkhscXhBTC9LS3NFbmFrWEw4b0dIdEp1RTJGdGM2REFLNlhTV1FuVmZxQXE5QmRsRnFGSFowcFV5TkdUaVY0dEVNUkdwZ2I1c1VGcjNDcUdkblJLNGdYbGxvQWhUZjhBendlYXFBT3M1SzhPOE9TdE9ISzhqbE5ubWIxa2VGU2x0Sk5ONHYzUGNYVTlpS3ZyVzlKV3JBMGhiK1hLY04wS05aQ0ZDdU8wRkE2bXdzRVE2M1NkMTZzSGpRVGRYNVdzSHJiU0FxdVFiUXIzVnFHVm8wbXE4Q29EandHbUs3QjI5OWhMZFdkWGs2N0FLME51ZVNJbnM1cERoY3YyQmFaOTdDNXVDOURUU0NQdVNYTXh1c3lQTTJyTms2bHNIcEJVZlEyYVM2d1k3MDFGcmtsWXN2RnpoSlZVTmpwVHhwM0REeTRzS1R3dUFqOTlXWFB5MUJtOFp6SHpXdk5aNi9LMHVMY2VUcWZZMkVUbmM0YndONWRCWTZRMGxlUUsrT0lVczZLcExRVzJlU0NhelV5S1NnVmZWMHpBdXNNc2tHM3IvRGYralVqN0E4Qk1pb2xNWTM4SzQ1T1N5RnIxVG1QV3ltd1pseFhpcm1HV1ZjWlZzb2JRZGVPSzVKZkRXNGdzQklNYXJvV0RJdWhreGlWenRNUFdnSlljdTdxcHR4REhWZjlod1VNaHloTzZJRWVML2paS2NMdzgvMzZka1hHdmN4dkxIRUFGWmJkZHRlZHJHZ3pBd3l5d3dEWWtyUVFhUE13a0t6SmtFWkYvNkwxcnBnOVNmd01OUDRCUENKMmxoVjBLM2YyRHFJT0k1NG1LcTVxSXNWRlRpMVRTUHV3ZE1PUzVIWHEvelIrYkVEbXIveWk1MGJnNmFFSW5TQTd3MncxNG5jTVlXV2dXZENucjNydUdWdmRpTDdSelRHT3lvOUVpWHl6V1R1RERzSVpVWWFmSCttV0oxMWp1T3pQTXUvNERFN2dnS3pHbmNFN3lFemhGTVllS2JTeDBjU05VSUhZN09aLzhtTGEvTzFzaWtSd2RRUWRpcHptNHlxbTRJTSs2MkdYNmx1aysxK1JidVdFditTMTdMN2paU2loVkdRdm5QZUVnQmVyazR6N2hzUGZUc1Eya2czUCtzaXEzZFFpR1ZuNng1TE1SaDBoRXRhbVdhZFRLcDk2ckFid1dKemhaYjlvSkFWQ09FQTdHejhjdjA4SkRkU01TUnJNY0hjUDdzcjJYUDdzWnQvczl3VjVRQlJDQlc1dUlFTVpJU2xIYTRyaW51L3QvTVR4V1ZzWHVhVUd0M3BMTTl6RG82V2dXTEVuY0tGOGk5bWM0YWpnWlZPNmpoaExzKzlOS0N5VXZvNzBhSWd1MU9IclVQMFpTRU5oMlZrbkZ3SFRmTWg1MTRTdC9mMWxjRTUyNDFLNGYvM3MrTVFBbkpRNks2cGV2NVJ6dklOalRsUnpXSmFyZGdhSVdXTUY0MUg1NEdkZ1p4bGpBT1hkVkt0VGxkVjd2MnFoaUkxem9uNTVWOUMwYk1EbVFvcy83VW9odU0yUUlQR21FT0tIcnd2cnV4UU9Ua3p2bE92VFVGNkFVVkRnUTlYSTRiWUgvS284ZUdDcndEam96WkhVZm1Kemsvc3NTUnNRQkdXK3Ivd1E0b0FubVloQms0QTVKUHNEL1Y1ZDFmTzdiWWpHajg2amtJQzR3RG9vOEl4OC9MTjNzcXAxbE9oYzNQbUs3Z0xoNkNrcjdDTGw3ekFYcXJxZktOTE9tbTBNTWc1bkQ0eHh4K0l6bmdvUjRoaFNSTXdRNHVsRE1TY2ROUFM5OEd1R2pWcC9NYnVNU09NRmJESUxmMHozZFdLbVpUV015d3dxM1ZkUmR5Y2IyVGovbW5UalVVbU5ZQ0VmK2E1czAreXc1Nmc0MzVvaU1EZ1pnTUdmNjRVYTAvUTgwdE9QVUFKSWdlNmd0aHV1UW9DMitSamdiWENJMGFUYS8zekFOeTVkdE5HNHBXTTErT2Q0cGNHZE92cElVVmRsekdNVEhGcmVNblVXaXdRcHN0MEhYS09TTUNQNGlsZDkyaHY0L3IxNk9HR095c2ZXN2dPSzFwVTNuNUI5TnMxL0trYkM3eENIU0MzL2ZsbnkyZmZSVThQa0tleEQ0Q2I3WnAyQTBuMVphbDRYRE1kbTRmMU92RGVzUFBTdmZzUXZpUkVTNWdWeVVhaVV3Z01lUzVWWDVkRFBPSmhvQ3VXMFU5ZmJlaTRLK2ZIUnAwbWcwRjZKMW9XeVptdUtpY3FLWjF0MlZFYzBDbDhYSmVkUnZ3ck9RVWt5ZVkrdSsxNWpqeklSQmR4cmozM3hoSWZnd2pVL3BSZVB2VWViNXBQT0dadXF4REp4dVMxTjc1emJOcnFyL2FVK05lTlZOUU5DZGVxRVJXNjA3Kzl4cVpIMnB1a25YZ3dxNm1UUHJoaTBSMmNTVHJOZjk4c2xsLzE2bTRhUUlSMzJDREFuMDhlSUUyVG1BbHNTSDVhTXRFM0FETEN4YlloTHVSakVuT3V2eXJ0ZWxjeEZGUjdINFlHYTQxZEQrSTJrTXQvWG4xb2xvWjhpL01ZRitqWXNDVlRpb0tudHNYdUhrWHlNOGszWmVrckxZNlVmS0RaUmQvQzV6bEppczNESVplb09xaXBxNHI4cE13VFhDL3k5R3FiS0prOXlrTXptN21BQ09IRzVxWDVLMTdPMkRRRGVpMGMvK2RiUUNLTnVXbnRBRXZRb3oxYTdXNE1rR1Z1V0NhMXVrV2FpRS9pSDdwd3Z4QVlMTFVJQTlHQkxoM0pvRDNGUU5qN3JWOHlOSU9BbTZKaUpYNFloVUJZR2lsaXJzMWI0c0ZzOHAvYkRTR2ZjQXFDWDMyQmZFOFQxclpnRnVQaEdoRXVQVXN6dFFZOEFISG5ZQUp2RWNKMzFjcnhmUkRTNWFEVnJQQ2txUlJyc0lxMFVaNnlraVdlMmluekQ4TEZmVFhET1JHeiszOTJoUDJYRVRkajBPOEZ0NEcxY2hXaW5HWVdKMXQ5NUIvY24vYmhnZjAzL3dqVnptOGVVVFJxdnpDSmN4dVVPQ2crd0Z0VVA2emRRb0NVTDJOek1MYUxBMWt0d0lvTS9mVFlGOWd6NFc0eEpGWCtiaC8yWU9sWjhEU3lsMFVXRG9QU1JKY0d2bms2MjJ4VUE0QnJJK2hmdzhDS2MzU1h3ZUJYTkVXQVhtUHBqaWkvdGRmUlB1MVRSN2tDeHhEL2lrdk1CSFB0S3o3NGwrbFhDMHJqenZGLzBJKzdNaEQrdDZxWGhTVFZndUxmOWJUaG9WRjhaem5SY3RXRG9JU2hCdGlQOUFNdWFoWCtBVnhPU3hBRERXbGJFTFpxNi8vdzJabmx1SjltbVl0Y0RYOWorR2dVZEx5RURId29zSWQrWGVXT1dNWHVBY2pwYWRQY0xEWnhBMHpkUFIvVENXUmFBZk5TN1AvdlJCa3loaThtNEdwaVN3WHUxcC9aWmdhZXlJdjdpRUhyUzlyclZBeXdqYjVuWjhrQktJUUxVMzJmOHliS0gyQVlPcTNOOXQ0b3UyQVFCQ0dMTkl6NFc1Y1JiMkR6ODNQWnRPRjNWOEVWRkZrVE9hMXNJMnNLUnBXUm1GczV6cVhqZUJscnQrSEhka1FzZTJpUGgwa3JRcXpFcTJFVlV0dGl6V1cxbnNZc1RtcFVMWUpmdldDK0ZYaWsrWGsxVm5rbGREWmpoS1RRb203OXhESSt3SWZGaTJ5Uy9tblhJczQwRmhwTndmaE1uZWJoYXdsTXY0azM5QVAybHYyNVNEakpvNGE3QnJqaGQ2MERoUVlicGlhU2lkZ1RMZHBWNmZic21XOFd3ZzVXVFBYQUphUi8wc3NNRU8wbWlOcXZGVDd6K1MvaW44c1BtdlA1cjQ3dk9PMXV4UTBHSFZrSlByeSt0aUs1UFJoWk5XZmNyRyt5N3RaU1ZRRE9XOE9CTVJzaGZlUkEyQ08rT1Z2S3I0ZGZndkR6N013ekJkeVhMa3ZTUmlmUzhwN3dOUXp0L0dwSGlvT0VFUkpDd2w3ZGFNMXdSN2NucWxNbUFtZ1Rnb2dxSVVBL2xGNkg5b3lGODZMdW5LbUUxaUpMa0dISFRHWit3T05hN01LRWRJREJzeHRja0pEZFlIcTBNZ0JydkVCUVVHeTFvOHBEbWVuaXM4TWlzbTMxYXZzV2N0RUEvS1JiZXlUelMrREZORDl5aXloTno3VEMvcGNhOUFwY2lXSDVuaE8wQklmcVhzRGMzbXlmNEdCL0ZtSlorL0I1ZEZXVEFlcDFmVDRwNFBSMGhpRHF6c1lDNXV3REVLVmlZQ1lDUS9nQm51M2p0enpab29jWVpQNXZNOFArL1NGRHZRMG1ZVUptWU14N0xZbkhSNm1abHlTQlJZWW92Rmp2ZjhuMURiakUwbWI2T0UvdDQyOVVFYTNLK2lFcXp3TkV0SEhIMjVzOXpTaUcrSG5PVnpaK1R4VDR0VWxsRVlVZzIxbnhzeDZjbjlLdDkwTzVFc2p3WTVvUFBxODFxVFFyNVJvYUtlT0g4a1dETWwrT1A1azJtVU1RSGMydEtZVFFDNXEyZkRlT2hDUHhFdzdCMnY4cURlMnBNc3B4ajV3d3dQOUNIdER0QWdPMFhKUDV1clZoT09CNTJSeC9kSDZEajluRkdkZDNCWmFKaVQrVHgycDdpUzczNHlNMGxzekdWQ0FtNGxIdEthUHBKWWlyaGNoYnJmWXMyWU1sc1pxeDNPUFJEdmg0Q2JGQ29HeTN4QkRoRkQ4d2RKYkpCMGVYdzFnbVA0cm40L3Q0MUwwZzB2UG1pbTRUNmVEblJ5RWlTT1A5RE9pZGxDdDZtamFseS9uZC9vbXJaM1FKTDRubmw5WFB1VjlXK2Y3Nmw1dWNxcWNxbjc4U0J2U1JodkxqeW5yU3VidjJUa0VkdmdnTlpIeFdMM1BuOVhjYXFET0F0UVNYVmd0VURwRG1lTVRJOE9ERExVM2ZTOGtKbEMxZEFtUVVlWUJhcWZTM3RDWi9DRHZudXExeHc1aHkvU0t0L2FaKzd1NDlQcDFwVXhDMFYybkxaYXRGSm9wZk9BcXVWbnpqTWVSVlUvR21oQWZ1cGtvcWQvMW1SZ0F0WmZmNFo0Y2M2dFdjN0NwRndLSHFvdzJ2WDhJVjB0OC83THprUC9IYVB5UjlFRzNmMDU0anZZS3dwYWczTHM4dU9jNnZKYUpxd3pOSWI5bE9zT0lXZXN3aVJIMlpjUExnZWhUbk02OWRMZE5NVTlvQzRaZFExTW9oVnBncmZqSE1sSm1kN3pDSVc0a1JuSVVGclg2VE9vUnA1L2t2V2tWVytmRUNRckZrRENPUyszS1YzSjJOZzVlV0E1QmJ0TzA1ODhIZDNyQjFLcEdha2tKMDY5aXAwaTFERGFNc3MvM3lEdHE5ZHl5czIxWDRiTlZRQnBTMlZicjkxOHNDUWNZK2FjY3V6ZEYwSFhtc0FIcjc4TGxEUHpKNmQrcHdENEtueG5WUGsvMk9TSUx1RU5FcC9uaUt4L09DeUxLK0RwdDZrbDZPbjd0eGZPdm5Bc3duMS9RS0JZRzBWeVphWXBFaDVlUkJXUDdMbFRFaU5YTkdjcGo3RE56SGlaWlhRNWk4WGRQT1NWRnBTRG5tcGZJMVh6VmJPQklEMGV4YUtjRTJML0RPU3NwL3dOeTl3Sy9lZ3BZa0x3cGI2d2xPVWdqVmxGcUlDQWcreStjMnhnMmZsYzB4bngwRi93UTR0Z3ZLc1ZNalpJYk9qb3N3NmxkR1gvR3RKdmZodkhLWXMvS0g2RG4vQzFkSDB6Y3VOaFdtMHFJZERkU25JaUdBdjByZU5OTTREcUNmQmdyU2FZci9BbUlHZmo5dmhGOUM4WXpPdzhsM09ZNkRuVmVXRlRpZi9aQUFFQUdnQkFBQUU1QUVBQUR3RUlPUUlBQUFBQUFSOEJza0FBQWdBSkFnRUJDZ0lBQXdBWlZHaHBjeUJwY3lCdlppQkdhVzVuWlhJZ0tEZ3A8L0JEQj4KICAgIDwvQklSPgogICAgPEJJUj4KICAgICAgICA8VmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I-MTwvTWlub3I-CiAgICAgICAgPC9WZXJzaW9uPgogICAgICAgIDxDQkVGRlZlcnNpb24-CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvQ0JFRkZWZXJzaW9uPgogICAgICAgIDxCSVJJbmZvPgogICAgICAgICAgICA8SW50ZWdyaXR5PmZhbHNlPC9JbnRlZ3JpdHk-CiAgICAgICAgPC9CSVJJbmZvPgogICAgICAgIDxCREJJbmZvPgogICAgICAgICAgICA8Rm9ybWF0PgogICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5Nb3NpcDwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgPFR5cGU-NzwvVHlwZT4KICAgICAgICAgICAgPC9Gb3JtYXQ-CiAgICAgICAgICAgIDxDcmVhdGlvbkRhdGU-MjAyMC0wMS0wN1QwMjozODo1Mi42NzFaPC9DcmVhdGlvbkRhdGU-CiAgICAgICAgICAgIDxUeXBlPkZpbmdlcjwvVHlwZT4KICAgICAgICAgICAgPFN1YnR5cGU-TGVmdCBJbmRleEZpbmdlcjwvU3VidHlwZT4KICAgICAgICAgICAgPExldmVsPlJhdzwvTGV2ZWw-CiAgICAgICAgICAgIDxQdXJwb3NlPkVucm9sbDwvUHVycG9zZT4KICAgICAgICAgICAgPFF1YWxpdHk-CiAgICAgICAgICAgICAgICA8QWxnb3JpdGhtPgogICAgICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24-SE1BQzwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPlNIQS0yNTY8L1R5cGU-CiAgICAgICAgICAgICAgICA8L0FsZ29yaXRobT4KICAgICAgICAgICAgICAgIDxTY29yZT42MDwvU2NvcmU-CiAgICAgICAgICAgIDwvUXVhbGl0eT4KICAgICAgICA8L0JEQkluZm8-CiAgICAgICAgPEJEQj5Sa2xTQURBeU1BQUFBWUhiQUFFQkFRQUJnY3NINWd3Y0RCNFBBOUFBQUFBQUFBRTVBRUFBRHdJQVFBSUFRQUlIQUFFQjlBSDBBZlFCOUFnRkhRRVlBY0FBQVlGYUFBQUFER3BRSUNBTkNvY0tBQUFBRkdaMGVYQnFjRElnQUFBQUFHcHdNaUFBQUFCSGFuQXlhQUFBQUJacGFHUnlBQUFCd0FBQUFSZ0FBUWNIQUFBQUFBQVBZMjlzY2dFQUFBQUFBQkVBQUFBYWNtVnpJQUFBQUJKeVpYTmptY29BQVpuS0FBRUFBQUFBQUFCcWNESmovMC8vVVFBcEFBQUFBQUVZQUFBQndBQUFBQUFBQUFBQUFBQUJHQUFBQWNBQUFBQUFBQUFBQUFBQkJ3RUIvMlFBSXdBQlEzSmxZWFJ2Y2pvZ1NtRnpVR1Z5SUZabGNuTnBiMjRnTVM0NU1EQXVNZjlrQUJBQUFVVnVZMGxFT2tkU1FsUXdNZjlTQUF3QUFnQUpBQVVFQkFBQi8xd0FFMEJBU0VoUVNFaFFTRWhRU0VoUVNFaFEvNUFBQ2dBQUFBR0FZZ0FCLzVQZkV2QVVPNjhJZE5rMmtDMVduUW5pOS9Ga09aQ1NzTVJBK011MUxYWHAwNVhFSysvaUtaSkpHTXZ4L0k5SktOUkZLWURVQU0zWDdiV2x0a0VuZ09JQXVaRTVhcGs2cnIzTGlPdDhtRTZtR2d0Y1hDcUE4U0FqNkg3UVRLK3ZGWW5yemY4bHJKREh1UG44Q0FBTE5xSTFBSm5pRzRMVWlqQnI2THRubHNOVXBPdCtPWGRIREx3ZWJnLy9BOFpzWndCRGtwcVRJRDI1M3lSaExCeG1KcStvcFNicGxCVFFnTTFiYThia2dOVXBwOTFQcWE4NCs1Q3ZBNmVWbTdtRzlhaDkvYTBoNThhRnVVQzdURThFV3FMQ3V0RXZQY2NkaHFXZjhwNG5xRUNsREx2eFR6ZnlCemRyWC9TZFdVbmUzVG1IeGsxSDdNb1l6ZHhROVpOV2VJR1QzeGNDemhrUzVlZmhjNkdYZmFrd2orUGhZUmUyNWs5b2haenhnTXllbzhVSVdTbDNLcE00czFpM3JxYTZzRXBJS2RQa1ZGTythSWR5eUlzY1JINVM2ZDMxby9nYm5HeXV1MTNhcWhOTmdRTDhabDhacDh5Q0pDeHJsM293TnBwYTdEQllJV2FTcXVmZ0x0WjFJUkFlSmp0M0V2aXNrNnNlL0VUTGpkSlErTmgrZ1ZIRVZRSUZVYVpHSW9oYjZkUzVUekVaQnIzMFgyaElRSW1wcTYwd1JEcXBPWFgvTU9FT1NjNHYzdGJUWXJIbWIwYWpGNlQ3am9jbUpwcXpKOGtpSHNDTXcvdUxRWnlyK3NUK0FrenJ2T0J4VnY4TnRBMWcvMzUzTU5yR3VySmZSZTBzUzdCRWcrZkhqNkNhTnBqUW52WUp6RjRKZW1GOElWNHF6czZUVUM4VjU3bjlodC8wN2N0RHZ6YUthdUNaSVA5NjZwdHFHQzhuVml6NGFPSVg5WFdjTTg2ckYxU2d5MjR2aTA4ZVZyd1JmclhQem1OaXQzRHprajRkR3FqN2lQRjZVV2NVR3E5ZDVaVDJlUnVBOEQ3NVM1dFlWL3JpUkhrNUV3dG0wdkp6cTk1MlcrV2xJQmdUUlB4Z3RjQXpmOVJxaVRURW0xOGtyQmNYcTR4UWFyQ1ZCVEZDV1BVa2l5RG5yZmNvWmsrRDgzR0dPV3A4bGtYTC8yTUVIUnlvdVpjd3UzUmw2L0NvUmxKNDlOc1ZTTGRadkRQWmdjbFNHcVJPU2I4Nm9rY0Q0dGs3V05ISENIZXVsOEtZdmZINUJXeDg0QU9OdzZXWDFwVnllQ1FzN0JhZnNiVXA1cU1GSndTNkZSWXlia2xKRnZ4ZUhONC9ISm84T3VaVGorcTNuTjI4SFJCZkRiNUhHNlUvVklKRml3bWxmcUpMNmRZcFFZa1ZnTmJTeXN5d3pBdDI4cmF5NHZ1emtYb2w1ZndDdlN6TmNjNTFOWFE2M0R3UkFxU3FjdjJ2L3BqTGZWb0RwaGdzbFJoSzA0b0hLeEhmZ1ZDZVJwdWNQdmE2U2s0Tm5IdnpMclJZM3MxaFc0VkFleGlwNDJNR0I4eGxER2VveEtwbFo4dmhYSjJWY29aQW5wTzR0U3dFZlpMcEtiUXJabUR0K1BnclFyTjlpV25HVVFldEVrdEhYMFQ3QUNtZ0JvYWg4ekJUMGs5YU1TZk5yK0U0MWhTRDUyeUQ5MUpvbjYyeTNEQWFXVWZWeXJJeVVsQnJ0ZjNkMm1xNGZaL3dLejNqYkttTnhLRGFXSUJOdTFhcld2Y1BldzBrTHpQZDRHMHlmV1V4NVdCMVlQeW9WOHlOZlFwUVVtN3NPejg1ajdXZ2w2SjdYU1JQNk9IWTZ3cjlKL0luckpab0Uxb0Q2TDQ0Qm9TRllUemJ3R1hFNTNVTEt0MVpUM3pjaStqdVVDbis0NjhJaXNYbEhyUW5CTnk1OExCeHB3YmV3aVJDazNaR2ZWTzh4OG01bnBPOHVhTUhPc1YybmV6cjgwejFyVDlDazBZRkNTWWdpaUVTK0dOc21EUmV6QWtpVUc5bFNQUWJ6V0U1bUU2cmpLM0FWSjFMMnZiVU92T3puSXV0YjNoSWtLU0Z4MUh1TE4zUGV1K24vV2RVVEpUdjA0elVqK0ZpODRkVHFaSjh1OFpDS3ViZmgvZi9LRC9MQVpUeWhtajR2RU9JU29qOTU2WUsvZ0J3UDBJM05XVzA4QU80VjUySDRMdWliQ3g4LzFYTytlWjYvM1hOdGd0ZlRDS0R4SDhMd3BqODFBdHpvbUFuREZKbTYwcDhJeitWUlI1eVBJc1lPaWNHNGx1UVVSU1dUZ1M5aDdHekVpekVranovQ0d4S1RIcGtyM1NneXo4amFlQ0M2aFVuenl6MUtoL0g5Ri9KVGN1RTlsSjgremJySmNQZzNSZGFsWXlHTjJUNUp1Yjl5ODBMMkQ2d0xuVUwxbnFjb2R3OW1kZk1LM2N1NHNnNDlsS0RtZkhrc29rQ01nMUp4Z0RjQ1NzcktzSGpGSnk0cE9QM1dtQTVHdFFrRDNOTzd6VzJ5cWJ6L0ZhSExQZE9WUkJTMzViMzNkbm5OR1NLZ1YveGl4OVJpTTZnRDNWZFZyek9vNWxSVmNXMjFSVHNhQ2p1ZEhFVnhZaFZlR2s1N0g5R0lRQ3d1ZXJZMCtvYXNra081dkJJZDgvbmQzSTRuQjMvUnVEMktub25nV0MxcXRwUjJjUjJ2ZUdpUlJxZSt4eVhFcjJCU1BzVDB0Wk5zbkcvQU1Ka0JheGJxSkdhbktmbWh0aTh0dGVVZmtiUHQzUlVzTW9GTVRNekxsdVhFZFExYndheDhXTTNPd3pKcmVkL0pPNXRsM21wTDNmOXZjQi9tYjdtK0ZUcE91Vm05eDlpVTVjYkJjb240SG1aaWJTY2RROGcvU0hWbnNsL0dNeHhRMXhvdG04UEF6aWlXcWxEdDNtNG5ocis0dXBuRnRWbjBLemJhZ3ZrMEJReU1UMTJIc0RHVGl6UDJMZXI2QnRwVnlacVh3NTMyMVhqU0hjRU11SGE3NmpiRWpUR2lJT01XdUNIZUkvbmJKcE5jQWJKSEJLSEI0OHZVd1BuK2pPV2tTdVBlRDdXS3ROc0Nzcjh5eFZKUk9rUEtWYnI0VUNROXJ1VUlMWjFpSC80TzlWWlZuZkRrWUxCeW9Rc2orRk1XS2ZBakttNGdpV3p4b1dCYUZUWlRVVDJqODlmbkpQdk1xRi9VZEpkeE85alpDWE5YOHNBd0ZvRFNySzV3MzhiL3l0YU9tRVp3dlhteDVRT1MyUHVSNEdLa0IycHdnb0w2Y1BQMnhZT0c1bkJsVFE3Smx5SS9zVDBIcEVLVm0yV2FKTXB4M041ZWF4c3h2YWFpU3VBeTlUbDlEaWNIYUtndWJvcTY3TDdQRUJwZkI1Y3VaSDdhdHFrZU1aNUhHQ3NMSG1WSTQvREpQV3FMd1hTcTBTWDJHeGpvbmFKRWN4bXVraWptT1hCN29NOElFV2dUM0h2ZGs1MGFiNXBmUVhDUEpwTWYxUURWa2JSOTJvRm1LSDY3TmFLd09kWHdnSDVKcFZUdnBkdUkxZmtkTFU5amY4N2lEWnFUK1dMMUduZ3JCTmxIVk1SemJEUG9NTFFRYzlRZ0tGZmdPZFQ1NmZvNDlXNW9EdUc2S2RBTVhrRzQ3YmxXdUZienR0bnRzdHBZTy9aUnBLby8wN3lxY3F4cXZybkhRWkVaREJKYUdKdmJJV0U1UlpMZE0xeVR1YVpnWHN5MGJrSnlTMlNzcExzUUZic2JlYWNtNTdpbDdjQjEyeElKNVZ5Wm1qQVlickRMTWU5UFd4bnpKN0QvajVTc1p4Z2RXemJEaW5jamdEWlFZYk5rbGNsQVBYckEzK2pieHZWZlRXZXpibHRndmJYVkVPUVNDdElZUk0vNVlLTUlGN3VqVmdaN0Jrd29aK2tObk11REVTdXk5SkY1TUtNdmduaXFFM216dmRvRnlhUjRPclhWczdKTXRWWWZBN0JnN1FIOWpHR1FmS1JHSUFsZndrd0dKcjIwWkFLQm5jTUJCTUtGb3dhMDdxSzlVQXNhMGgyQ2xQdlBQZVVXNHNuNnZydkFOVWdoZk9XMFJPZXpoYlNwUkN6RlRSNFlUMjF1OU5vZ2JRaFdQUS83ZnBiZjhaQ3dBMHZ1SzV3K0lmTjZ4Y3JRa3k1YkxHVlRPcnVRNktkUGRLM2N1dlhiRzhDWnBUVWdjL2tqcFZ6Q2xXWndDZUF2eUxyL1NvRVBHSUFKWDduUGFnU0hOYnkzZ0JNcXVOWmRiME9WRGdGdngvUGJKMi8vbkxrbDhSUjNobTFPQjRRSlovRUNiY3BoSVRPeG9XK1lsajlXSDhmREUvYkJvQzcrOTlxdzhvU3p6ekFBY3NEUGQvd29RbVBQOVhDREozQzdIZmdNcCtiK21iK1hvNk9BUFlWb3diT3dzSUsveWJpbmhHcW9Cc1hsR25VUnBjSVNQbkRBTlFSeXpuU3F6VEhNRHNHdFdaWERkVGpBUXIyRU1GUTRPbDZnNjQydDcvK0pRWmtMUmlOTGRJVnVTVjJFNWlqeWo4b2lpMWZDWHJNV1M0WnI2ck1zV2Y4MTQzc0Q0UytJaXhFSklobVVMb1Jpd1RLcGhCa1NtUVFoY1ljN3A4a2ttNExYTGdzVWlxWmtNL1JCMVZid0U1UkhpM3NiOFZXL1ZOQVNBdkRqdFRJWktRbVFaTXVJL2hNUXp2enppSjhnWEdrZ2xhWkJJeHNRS1VubUh2c0ovYk1kb1A1YXQvcHVDd3M3NjNwKy9YOHE4UDd5MlBocHFOellHT0lWU2pTemJlY3VuT1h2WFowMmpJbWw1R2tsYTBYQUJpMVlncitSZVhPWTJxY3BvOGxMSURWbEpianhKVmp6OXVydTZjREtrRk9FK2s2VEF0Q08zaEVVek9NM0ZscEJ0bE1zaFlxMitnUVVyeHZSbHpqK0Vyb1N4NDRNaUppWG5uckhzM2xSemVaaExnZlpBRWtFSTBKc2ZBc093dFprSEdPM0tUaWhyQm5PQTNnL2RIVGZnVWUvTWZrUkVqVW5iUkNUQ1V4UzdEL1NJcTR4QVBvN2lDT0s2QzdFUndnbjV1K240K0syWTRrdGZXRHdEUk9XZnZoTE5kTUZ1UzRTcjhIMzczZElpUE80T3k4bW9WS09POFEvaVA2cGh5dkJocSt5Z2p1ZnRReE5vYXh2clVpbW5UeDh0aVRCdmVtVS9qVFcvOVhRM28wbzhRSis2TVo5c3E2L2FxRExaOXZTNy9RTCtvMG94aWsyS1loK3dwSk9FMTQ1Z2dXbWZGSjYwS0pWVkUwQUh2REpJeHR5RmRJMmdoYUJNcnBHVVgvWEttQXZiZUw3TnNyWmxwejU0bUpWNmswR2pDZGVZRkJIQ2ZRSUpid1ZLa1U2L2VLSW9RWVJoajBwWHJzcm1qdTBlM0FUVWNPZmFKenJDS2FYTHE2WkVpR2ZOcm1CdVZISGgrQzZvYTBXQ1dJa3loclV2aEpKNXJYakN6VDJhV0tRVDZoc2V1aWV2U1pKSUtuUWVwMXlWNWlIZEVpK1N3NmdJQ2RtQVFWZG44VmRuMGNGOFBIMUp5R3AzTGNmTzZBVlN1cWl6b2lhdzhUaXplenZIUUZkN0JtT1U3dG1ETHVYRkZGVjFFa1NiYUZMOEFaMFlNVFJYaCswaEZLU2JSK0NRbmwweU5FQU1lSGpoL2ZIcWhwdGdVREREOWxmT0hqNW1DQ0ZSSWNqWFd6VHpML1ozL082cUx4MEYrTi91TmRNSjI2TFdZK0t0emxpRFVkb2N0ZnpNVG92cVpWVTAxalMyeWNTYzFmZXlrQUd6Z0tybnYrSDN3eU9JMmxGNVZOSVdIcjFtNk1SbjQrOGNJekRZSFA0WXNOWUhMZ3pqZE1rNk9sckZHT1FsTHdFNTVOdVpYanl5ZkhEOTQ5SjlYVTdJUDRqS3RHeTNPVHZ4TWF5eWNUZ2YwSnNEVDRWUUtQWjZwMVV6c3FUYmNuZkFjV3d0NERXRmZTSWNoOWlGcCtreGxERis5UUtFY3J5YXRjZlg3M3JpUUU5NHNuY0MzUGk1M3R1b3p3OWtqbDVPT1h0SHRQa09xRW1XRWdWQ0R4R1o1c2lPQlFhWWNxS3c5N0toV2FBZGYxVVRzL0YySXVKUUJXNndNYUs5SHFMRXRoSnduUHg3dEZjaW5KRkJyTnlnMFIrbzBscVRZSEttSERPQkhPZG9rc2Fnd2lPblRuTFA5QmZNTzJOOC85Q2puMEtRL1d4Y0E0YTB0QzNuR1F4VmgzQWcweTlpT1lZVUpVMzB4YkUxaFBJT0hiRUE5NStMenhwbDZjS0ZBTldmNUtPbmdERTJGWmFhbHNkM0VFeHF1Z2tQbHZCV2JpdTFPcE9VTm1lQnBDRFluRnZEUDVJNlBTV3A3cnlYM29SUFdvS2NudXoyQzdUcGhadUNrcVk0VXB2alRpdzV4NnAwY2F5SkJKL1hCYVBCWng2ZFZGaThtUzAycUlzQjkvRzVWTnE1c3lkNldjOUZ4WUdvbnlvTk9VRTJLeHgzaGQ3QVV1Wm5hY0JDRDY5amM5aEVSSWs1b2lPWE9LMklXdHR5Z3lhT1UwRzFoTEQ3YzdieVdRdUFGMkVESWJDU3dPRTY0VzMyL0FLQjNVRU1DLzFQS1c1YU9rOTk4b1QrRUxjbGE4Z1dhTC95anBxb29FejVuZUU1R251emF1d2NOcjFkTmhOYzRnNkRCVXlXbHVFTGYvTHpVeVRKVFppZHA0dUdnUnNVc3N4QWxIc3NEVUZPUmgyMzgwSnBkL2FZWVlQNEEzSzBrTHBIU3lwOTQ5cGN1RU85QUVXejdna2ZHVUxqc1g5Yzg1QlhsRVdTaEJONHczNU1WWlZhYUlFNWFSTWlPZ3YzSk85QnJ6c3NPeFJSRC9QYzJmVzlieThVaXhmQ0JmMk16Z3dEdHp2YUhTR0hxM3NFVkl6UWRSclVKMXFaeTM2U2luQTlKb25IS2VEaDlZYlNYNkdxMzM1RjBCYXpNbUJnb3FIZ3dQakkzbisyR1pIVVpORkdjUmVSTk9BazVTdk1sZjVlQmVWNTR0SERWSkI3RGRwbXBMNXgrUmRDQzZWQ3Vla1lValU4VDJKOWsybnJVRlAzYVRLNkZYRXgvQTRscURyYVFlM1BkSG9YL25kanVvdit0ODQzUDl5Wmo2Vy81VUdGZURvTHgzQ0pvdWhUeUtLQWhhZHhLME1uUDVSazFIRVJkK2hPa0JNOFBpVmJZWXBnd1JwSUZRTC9SamYvbC9NVlhzT08zeW1HVm5BN3N2S2xMYUx3VEJSZTB4MWtyczhZNklEYU1UOUNmY2pyN3U3NUdsbmtld05Od2NlVzZ3Z3poU3Q1MVJZK09rYUtjbmhQWVJLeGVlOStqMk9oRjBKUHFKUUlzQ2ZoYUYxR0lmRWpQbDlBMHIvWHNnanBDYkl2eFg0OHRaTEEyZStMVTB1bEcxQWlQT0UvYll6MmJDeStZcGdxUmdKejNGd3hob0FaNWlvazd6UWVFYjZUWlFlM2lGNis4QlF6ZGZqQzlPbEZyR2w3ZDB1VEhKQ1ZxbGFhVk5Ea0doZGg1RGowTHc3d2xBOGw5bks5R1AyT0Q1UGMxbWRVQkh3MmFYd1UvekdSVmdnNDJnbHRsOHBvOXcxWGV5WXlhSGFSemhqMisvMndOL1R4bDF2TWtjMFRWdUt5YnZ3ejlYZW0xMCtDRTBLUVBERUh4c0pqZ00xdml2QUV5Y1R5Yy9TLzhOTG5VTzdVcHd0QW0xaVY3Wm5TMWw5Unl3RUV3cVU1dFB2Um5YNjJMVzBRUnBKR09Bb3g1bTRFRkV6N21Id1ZtaEgyZXZVb2VOc2hzV2ttNW52a01kSGVZekxyRjR4N3paVDdid1ZTck9QdXYweWcrdW0yWVQxWXBJa1BTVGhWd0NhaFEyYmxTVnNLZXR2NlQrVlVJSXlFcmZBSStlcDdIN0xaNkl6TlNaZ3hoVUZiOVZldGtxRlRySENnYlZuTzJhTUIrdkdsL1JsNzM5djl3TVlNNTVkcm84RSt1YUtKR1RRRkdzOEtTMUhIZHVXaE1tcEU4cVBwc29KMlQzWjkvVzdVTmd1eWQzclVyVEJPaW1ISnd5Vms1MVozR1NudkFtd3Nra040Q3hlZHQ4SFNNZUt0cmh0L08zYnRPOGhlMksvNFFlZ0JlcndOR01wZGpFb1NlV0lYQnZQZVBKS0lqUUQxQXZuRUFuUStaMGFMQVhSd1pJeVBxbE9kK3BlL2dnNExjRWVMcGNKNjhTR0NTYTlqbFhjdzFOaXg1TXdTT01Md0tEUzhaczIxVmJzbWpMNEJ5czZoVFZkK2c2UDFNcHBTV3hhUUw1SnBsZzlOSVI3YmhLVmtWdUtzTVhJekcwVDhkUEJMYVBvRG13ZjB5cDgvR0FBWEdCWTJncHMyQnB0STJtSVFuRTdpK1F2aU1wbXNzQXFtWmtDR0Rmd0dKVnAyZWEwRnJJaFFBUFVRM3Z0eEQ2Z0ltZXpJY2VjbERVdkc4QitFWmtrN0ExVDluNjBpZWhDN2VFMEltby8zaU02cldtMUJlekJGZlh6d2RyUlBrNlFlb1BucjZGMlNyZDI5N00vcy9pYzRNSDJGVHM4eGF3L0w1cFFkaExiNlNHUFE0cVpLbGpsOWZKOW1ETTlsQXNBMHZRMElIT0RZY0t1SXM0dndycXZiUlhyaWZ1OUhJdUUrR1gyeXlqOVVQSmhValVhOE9ORTJNNmxyamtGcjNBSDdVWng1b2NPSEpVdGVCaWh2a1VPZHREbEdMbDdscVMxRVlPdlZBeC9GWjA3RDI2bkJaY1l6aVZ3RWlqb1FSdHJqNVVOSm1CZVVGZXVHdmltMnFLSklYWllReXJUMzB2ZnNwQStHdTRPa1huRmlCYUMwTnVqK3lteit4Y0U4VDBLYmQ0dGlGcnh2ZmhMdEIxSHI5bDAzTHJIUUxvazdCRFlGQ3hRQnRPUm5UeUFqZGQzT2w2ZXo5YVhtc3FDaGdGeFJuWHBkQWZDV3hRVzM2bmdkWHBjTnM2azMrWGRwOGE3d25Ydi9tcFNrL29kaUN2WEtiUUFFYndNQllUd3Y1b3Y2N2I0UWY0b25vMnRKeDkyRVUwaDlPcnR6YjRQZCt2L2o5R05WSklsL2RUSm13OWRUeUJXdzdOdGRuYzQ3VXhMbVVpbWpCb21jQWp1Y1ZhYjdQRWtzN0JFUktBZ3lmMm1XL2h0endNKzlIN1Bsc1FTZW5QQkYzUW5PV3FRQmZLSWFibEJxN085d040MFREQjJmRytFMnlISDgyMWI0bnIvVEdWSC94aFpSWmErNHYxMGV4dktvYnZieXlnc1FPbmRhSWI4NTUwRXRLdVZiQi9pRFhKcFBLZlc1WmRJb0ZYa3paZDdYZGdnNmRadHpDazgwTitJMHNUQUl0TXo0Y09PQkFNYkF2bDFWaXo4RHBXOCsvNDFHUnFKeXR2L1BXRVg4bEtkZUVFVjhLNTJTZ21ZTDBzenc5L0R0OFpFQ1pXdExmaVhiQzROb0FldFdad2xUQ2IraHVHVml0VlN3LzcyTTdPNnRrdVlGOUtldnFjNHdxRk1UR0pheDhKRWhIUFd6RlNXb2kxQ1JYSEw1WFhRa3U1QkxXT1pralkzZGowbHV1amFiZlo3enJDNW1LUUlraHJEMW9yWmo2M3J6ZUJwK0ovT29vdXZUM25SMVd1T2hucEh6MFg3ZWJLbHNvb2NGalprUWZqRWRzanRQbk1NTkdrYXpzbGFqSEZFSmc1YmM5WXg4dTVlMXhUWEF3M1ZLWU5MWG9MZldSSUVxeThjUEdOallYTkFxS2xCTWhmMTBtVWtJb1dsVXJMWmh1SU8yN3FJYXBMUVN5eWxwOTFPUEtpOW9IckhOQm5BemN1bTdzZ3lsZmN1RlZrVU5kN2g0V2N1STVhVkdBRlVFS3ZSSU12cUdTNlpadlJkQTMwa3pCRjM1bThHKzdWNWhBRjlrN3ZKb2hDTE1FVXVSSXBiaFN6SHU4V0FWNlQ4M3M3S2pBTWVtZUh1am1CZUtLWXZzcGxDdC9JUTQyZzlQbjFZUGROaTNQVFNYTGRRZXFSdU5UVVFwUHhXcjN0YnhZMW91NGNUZzltV0FHNHp0Wkp1YlR5dVZ3a01FTm8vd1FVUmZ6QWdaS3lrMHJyeEhEZjQrK0lLVGRDMDJMN0dmWkYyYUJ5Vkd4Tm5MczZoODNhdFMrRjJUZHJzd0lBZkRkeGZEQTFBWWtubGF5M0tEOWhhZ3RMTFg3d2tuZnFSR1NSbm42cTZVNWhrV2FXK0U5ME5vQVJ6NUtzMEJvM1FVaFc2MjVpVzBOQ2NmVUtIcWI3TFVSSnRYZlRRTUtheG1mK0VDWDZBdDM2NnREYTJHR3NCUy9nc1BuVkE4RkVSeExQQTN6aXI3R3NkcVRkUXVudzhncUZhdWhoUWhRa2RpVmd2MUNGN25QQnVFSTQySWRpa2tFSFNvU28rRENoODNJZXhOMVlyZGhXQWVBTWNZWFZyRlJmRjBLSHh1ZzQ2RFU4Vno5Wmw5K3dOc0dVenkxbk9XcHhUUmZTTlF3ZXRKY3AwV1FUbTR5WXpjVkdZbTZLdGhtYVMxNWQ2Ym9LcWQ3WEs3WGt1YVFsOVQzbHg4Y3pMMWFQRG9RSnlkVXhNRDRNSGhsb1YxWm5UT21WMW5zZTE0WFZiayt3Mnl1VUZxeldmZndNeXFwbTJOVm1BV0ZMakRHN3AvdU5lakQ5L1k4SEZIdW1nN0dEUUg5NUZYTzB5amFSTGlvVlBDNEViYTNHR0dqOGl4b3dmWGg5RWhxS1cvZWgrb0s0UWJWblhjYU5JdHRZZWZWRlZnVFJTV3Evend4YjQ3VlpWdXc2cDVoSHBqMUJSMlIyYnk5U3pyaVBWeXZjbytqNUdmOEc3bjNibGhXN3FjM0l0Si9Dc1dHTkpqbHdlZ0ZLbWlwdVh2bTBDYjVmYW9qYUVUUXBqcVkxTlpGVnJ0Nm4xVnFuOTJ4ZlppTVlmeWNSYWVPbk55c0FxRTI2L1NYcHhaY2FTRDlhdVVYcExBNS9MRXlzanFzSXZZSlRjV2FLbHFGSyswd0RQVjJabnJid2VwZGhRMWdCTVI1dGI4NXA1OXE0OVNYRXIzTWxvMzVWU3lBendKYkhlMEJvU3RRTUIyRW1jZnRUUTE3N1ZoK3Y0Tk1Qd0taVWU0N3JTSlNTTFhPdGwwTnd0azN1dTVGdGM1UWNxRkZTdWFIRUNLOFRWb2JlWHRiK04rcWpMM1dib3BKRDAzZHhZeWo0RVNtcVVlS3dKVXN6KzVrQ3p5RHNBM3lFYkpLdTg2bW5DZ0JYbFFrQ2o2M1RHMEdkVjgzSS9aL3lZS3VERUlabXVZQ2dkM01tMkh4WmFMYmNmRmg3YlNNZzZ3alJzWG1qYnVJdmlMWWdsVGhJQm85SjAwQkhrUlZ5M1Jmb25YUWYzSjFWbWc4Y3NWaUljdWdrbUtuUFVLMVhZN1hyUkpHYVByRGxwY2hDaTFxTGpZUERlMmtTb2VQOUcvTkFLT2ZpamtVUjRPUC9iTjFmVUx6a3QzdEFleHE1YVBpbitPSG1HcjJJMFpUQ1Q0TnNJcXVmTFl0TTZuWTZQNnpRTWVDYm1INDRnVzNaazBnYm5MbXpqY3k2WlUzZmswaUlXRTJnNnV6UHNhbEtUdHp5QzZtK2tNVHJQZHpqV0ovUTJibkdSQ1pVaVA3WmdVMU5rUStpU0phYitkRG9FWVFieFFwL1pzU0ltM3YwbHhLWTg2MytpNzV2Y0dDZ0lqRUJxSGNvRFF6UGd1bzhMTWNHVEUzY2YzZDRvaXF1dzI2S1lpc1VmV3hOZFY2dDEwdFNMcXdteFgrMXJXK1U3azExdkhrbFBJNE5jTWgrSkxXNGFZdUp3QWhIMXYxMmtkSVU3c1hERm5mTEZJMVU2dTlGYjNMaG43VHY0Mm1Mc0t1V3BXRXQwd3hCeW1qek9WSlZXUmx1OWtHZzlxWjkydGNLbWluTFkvUTJiTUVOR0tTTDhCbEk2bHBDV2x3QzBPS3h2VFE2eTVpdHlIL21iZXg5Yk5Bb29KMkJvaURnQzF3WllaQ2NleTNPYytiYVViR1Y3eTdIRU9NTFQwNitReDVWVFIwNUhXSkZpRm5DSTlEQ3U4MGtTL243UW1RbVhNNTBVZDJhVy9uVUdjU2svd295OWNvU2lEQzhDSUxIVGQ3NWNudGcxbjduTXM2UW12WjVvUEszYlpPbEVkd1RqQWZaRE1aWDMvZjFMR0kzR1dEMmhoNVQzZXJicEhoc2FBbzErWUlsUjQyR3lGb2NVZWV1TURjWk9lVkRMNW4vWTZTb2xDcFo1N2lMUHV3U1liQm1pWWcwcVJCOXVUREU0SG0rYUVxc3NBVGlBZExqaFdaYVpPa09pdHpDbmJvMUg5SVhhMlYyR2UyZ1NNMmpicExsWkVEK0JFaHg0MGVEQzZ4RUJ0YWtSRzcwM3gyNGxxVEozc1g3dVFtd0NLTDhVNGNlaFJ0ckRoYlduTkFXTzE0a2lsRlg4TVkxV1Jzdk1ENWtXU2ZidlZMak1YOXFKelUyelZVMnFHNk9xMGdKeG1PeEFlZ3E2YVZjdHhrUWp4MVd2RnFFOGdoWk9iZmZ4MVFtMTMrRmMrYWdFaFoxQ0hpbytRbmozbnZ6MzBXUUhmSHhzaVVNUlBNWC91N3owM014WlNLcnZCVGxJZ1M0OFJpdkJqR1Y2TnlaUVd3Qmt3aVhRV3dTYU9vOFV3U1BTSDkybDloeFJSZEJ0bnNZSWRLc2lXOVVsakZxZ1IrVjN6elZiTnIyR1JFbWkzWlBmT1FtbWFla1o5ejhLS2EwM0dXbjdZQzJ4Q3N3TWhybmtvMmJUUnBMMlA2U2h1TFhQU2poMDduNzBXbDJscXF6RWN2YmpwNGQxSUN1b2xnS2I1SWs1eEF0TmJRbFFJSVlxbm9FMnR5MmIraHhNRnB1RGN6RFhkZG9uamxaKzJjTkhhS1F4cGJOT094WjhaZC9BRjVlOTMvdDZFdzNMd0hWd1ljWGJzS2NmdlVMUUtidmYxOEVlWG55SlA1eEcwNHA4UzNiSkdSQ0tNRUNmeXIvU3c3WnhWUkVSMFRPSkRuTGkyWTVzTysvTHRBL0VlMk5nMkFLazgrUHVDWmxyZkFJbmgzVkI4ZjBaR2UxVVBrbWZHY2NsbmE5M2hqazhUWDZ3R21idTI0YTRFb2FsaHdiYUNDZEdHQWhGaGF2eHBsb0sxeG9sMWdKbDdpbktURzByeHF1dzVFbU1nTFZIdGpmRzFaZXRuOXJUc1R4Z2tzZXYrb1U2OXF3dEJ6RUVNd2EybVZsZmtOOExQOGx6clowMWl3Zks5OUxVb0JQazJQcFZqdGhmMGF4ZVVML2JSY1lReGdhOGZqaVRBZVJEcU9HK1NMUlFaNVJ5MXZRaEFKTGNBUncyei9DYXdJdjljQjI0SitUSWRDWVZMVE96WTYvb3RzOHFQN24xRlJyY2dPOFlnUjRQUkd3Mm5SQWZCaWhxTUt1Q29aN0tWcE05VnRMRVBubnVaK3dvREdTd1dZdG82Rnowc3JqVTc0WTRRN2MvUU9xdkpNWElybGd3TXN3UGFuNVlmc0pzakRNVnhvWm85UlI3SDJqRmF6RjVHeXdqVDJ5NHMwSnRObEFyZGJZTXFZZ1VLcHpPT0dBZ0lDQTV2cGtBT0RranhQWkV2WGlZUXZqREhxTDVqRVEraTBicTh6KzRRQjk5YnZDTFFUUmpuTjNJQ0gvYW9CVld1ZVpZSU5vZ3F1MGc2UmxjcUJTR0tleWJ5OVN2Ny94cUhIcEc4c2NlRjdrcEI0dlJKdzY4b3N0Um15aVZiL0NscExPYm1OVUVMd3htdUpQRlEraXh5eTFqelFtNmxnQWFBUWxwdkNZeG13RmxsVUIxU2t3a2FLRmZybWg5TUJ2cVFwd3FoYWdwb3pwZitWMlhvSGR5WnU0WjU5bjI5cEFKSHRDWEdZV1RLQjNDRDgrMkEvY1NKbmdMeDRRYUI1NklHVHVzakhiQ0pvSkMwNW1STXB6eEZ3OTJZSitBMkplMEV1ZlFwSmhOYjZVQmNNTUhwYXZiTHFackVNZHhkVURaWjVuSEJQTUVoSGdXSTFXWHVXeENGRGxHc0pHMEVSYkFBb1l2T2hFNk8vUEZZbnBRQVlPd1kwMWNwUk83RC81RVdpbEIyNlJrK3hrSWZraGM3V3V0OGM1dWdvV0lkWXZDaUJ6czhndmJLT3RWbURYVDc1Qkw1MnAxSVd4bzNDTVFnZFhwQkpmSDFybVhOUEJNVEg2bjRNcEhXeVNMc2J0ZXZLMTdxQUxpQTg0ZjZmSGM0UEhNVDYydzVBVzFadGNlcXlGRlpNSVhyMGRwdkJGRlp2ZDU1amN1alBoeXlSWEFlTDQ5bkMrNkNpcTNMZFJtOGRLeHhnSmVhTzZCbWNQZDdjQ1dTbzlBSkpYejBnazE4SkpwMEd0R0FWNGJXQmRKNnoxdVRITVVua3U1Uy9CU2tIVmZUeGZlc3RoN3VsL1Jwa28wNENobktPNnNySU12MlFqcHFUM0ZVZERTYVVkZE5wM1NCRnQveFJIeGZPdmlMczBRSCtkUFJ3UWxST09lRDFmNjFjT3E3OXIzWE1KeS9JK1JDNjBIZmVlajA3a1dIb1lxZHN0N0Q2Sk4wT2MvcDRsWVYwT3NsOTB5T25OblpjWGFjR3p4djluNjl6RXN3VjV1SFFJQXUxdlFvMUN5TnVXaUF0SkJTZmxaV2crcTlMNTZzeHpEbHlkdURaNkdsaVZVVC9FMk9IU3Fld0FwNldQajZyVTlYQnUxQjhMUWlja1Q3T2ZEMWhPRnA0Mm4wcGVjcG0vczZXTGlZV0ZQamxSWjl1ZDFNUVE1QnU4RlF4QnpocTF5ZW1rN0hQeTFKT2ZhODJabm96NVpsWDJrSTVvYk9hZk5KdzBpVUoxQXNnZWMwVHlEbkNvQ2t0Smk2YktkQjBMSWhyRWhCaGc0Lzl0SmxMcXNsWEt5KzFnVXVabUFnaDFxZ3loVkJycWkvQWYzaVBNeFlXeURPRTdqckV1b3BHNVBPR1QvcFNvdGxCZjh1dlczRlF4V3E5eVVEWG5PWUZjMzhjRTFqS0xsU1Ryc205TlJiUWtQQUNNd3RCbzhKc3pOOGJDVDc1bjBadytPbmpOMnJ4MHRwWkpNYitjT1JhQXdvM0NVTWtqWGxuOW9SaFFFYzZwL3duU05wc3Y5cktpbHNBVzkxYjVjZnplZ2tvL3NVMVpzSnZmQ21QbnBqWDVBY0I1dG9kNC9RUFNvdmMvcVBublZyU1k1Ukc2ZTIvTEVUZEx6cWVOR3FNMjJPZDdYclJRU1BCRm1CNWZGdHoralJ0ZDVEd2RXY0pUYk9TQUc2aFBNSjVYd3A3Z0l3czd4L00zMzA4dmpGaFFFRWViM1E2c2ZWR1BTTzkyeE4xYkpPcUlVNGcyZHhIdHVsaFl4ZzRpS0VORWNpZEI4bzUvUFpPTVI0ZElUU3prb3pRemN3MHRXTG9ha3A5eDhVUGVuN1duTzZYTUltdG1CM3IxZnFhdnhTOFBpVmN0NlhlMUl3aXlCUXpRUi9DUTdJNnVjallVU2N2c3FGdUd5aHlCNWhJdGNvbHh5NU9oZy85anJzODcyNHVGU04rV3BzYUFsL0p0RGdJVXlqYWtTTWhaYXhSUVN5a3RUeHgwOXhkVjJkOW1rVUlnb0xTRnNnWVV5bnNxa2ZWMmxEL0FzSDFPdnhxQnhTbTZmamxFaVQwMFg4VjVoS2FEdHk2Z2RvWTVZSHYycE9qWUdXMm9VbThvanpuQytFYTdVMkdzRVNXbTA5OEtvbFFLUElrTHEyajlaRnRIM1BPcHhub0paQWExTndzUHYyOFAveDBmVURlVTBSQnZGOWJ4VjJLWDRjclZwaEV1dklESlhYVVBZekRqL2pUODNWWDB0YkEyZUdabGRGaEQ5ZExMWS9QV2JucmZXK2FBbzhlZVdObTJZRE1DalpxUnllYzlxV3FtQkx3UWpYeXZsVnROa1BsR3NROUtWelJDQnlIMWxrTEhxak03M3lVR3Y4bDZCSUprVG5KRW5KU3N4a1RMbTlSdVMzMDZ0OG5iakozNE5MQkJmTHltekNZUXBoYTdkeVFuZ0RRcUV1QmF6b1AxVVBsbHB3N3pUYXNzUWJGV2h2SFI0WGN3cGdlenkwVGJUYmFTVUJNOXc3K1pqV1V5Tyt6cmN2b01RWGFPdDN4MnVGd3hJTmVlRGFiYzFqbDNwQTlONm1kSHFkNUdxUVV3dTZNNUd6UGNTb29tUzBFVGV2ellaUkEyOTRTZmF5dktNbWllTTR3SE44aWJPWWZJT2lKcjlFdUFQS1Q0clFFQ1JsKy9CZ1B1OWc0QjBQUmdQeUhVNHlsUlg3aGd6eXZaOUhlbjh3d2djK3dwczlqVUFEV2tGcGg3MUdNT2tTMG1zcFdIcUxnbzk5YnhDd2pCNVdqdG4zbUxvQjhwS1pQanZyMzh6MEhCV2hVQWRsa2ppdEcycmVEd3kwTUZib0xLc0I1cHhEUGpXSkFDMFZOMkZzV1IxNnhHREJsQk03WE91aGJZOUI1aWhwU1dyNit6VWk1bFkyZjVhWEdvdVZ0eEtlWkcwejBtZGlvN0NzbFhiZ3JqOUlsV242N0Izc3c1NVptR0RGZmZWaXZKOWEveWF0WlhzL0I2MVB3ZDFFVUM2bnYxN2ZXNlNLWmkwdndJZ2UzNloxbWx0M3JXNEZKRGYxZlk0V1g4WU9BeFRrczNjZEFmK0E3dDVRLzE0MkpKazRWaEh4aWJKZUg5czVUQTVIbmUyM20zTlltWHh6NUI3RHB2eFA2QTRoV1pRQ0NqYXVuMDRxM3ZmMGYrcVJneTdRVVZURUs1NUJjaElaYUxiS2ZZWEE5azI0enNTT2tHNjc4d0EyK3p1VjF3ZE9rckJZMEdVSEt5OXdXb3JpM1NlcjJZSlo3RlFYcm9HTzl4amJjMXk4dE5zemg5ZzZGR29ieW9ObmU3SnU0QlNkbFVzNTY2MWtTakc3MHF0dG42SmcyeEpTdXJjeDBPVXhSdU1uVTBLQysvSUM2OVgvcElxaFQ3VENPQW04TUt4dDJpaUZjVThNTHlXeGJaMHBRaEJlZlpvM2JUVEJPVENhOUFpWE40L3dnM21HTWp2Z2hacVl3TERQS1djcitCRHRhZXgxTE5zR0EvWDNWbzlOdGhNdjVGMHZTYXVUVnNkVlBjM2JQWnpkZWU3YjNFZTRGcTVrUW9ET3JaNlpGT1RpRy9DSFl1UjJlMnJLYTM4YTM4K0t2eGEvcmgzamNNaHVya1JCdFk1RVl1NWVnUS93dUpWSVRrNXpGQkxsYnJJR21ZTXRmMWltV2ZxUGpmSHMyY1ptK2Z1bEJZeUV4ME5pWEtBTktvc1lKUUI3L3ZzQ1pvdVhyTHZqaHdwc0duZXVqeGw1OGowMkJnWlRpZ256U2ZqcGJHWUNiS0J6c0pnN05jaEp5bHpyMS94VEhmcmlOajJvd0NEWGlLN0dWMzVYM3YxMlhTRHNIakxWZ2g5b29hT1RNR21iajN5RFlHVk1ZT1plNWpRMU9URkovNElhK2k1R1N5RS92bXFGZEZCV3JyQU92bVdSSEQvWndyZG5PMnpFY0JYL0dFbXBMQzRiV1ZoTUUxZmZSME94WkNXM3FPQTJIK3hTb1Noc2Z5QlFqU0phREFsUVErbzRZVHBrK2dPM29Ia1RwN2VpUWRKdW8wTlFVOXh6THJwdzJ5RDJyZVdGVUtPRWhUd2RNQmpReDdpL3RLcytMU2lkTElBYXZDclF5VVI4SWdUK0gzZ29QZldZY2wycmxKQWIzYmhnRG44bnF2a25vOVZsdHpTKzZkbVJkRmxCZUF2c3BhaXpLWDg4RlhjOVkxcld6Y2ptUWJnUmZ3S2dEM0xPcHR0MEg5ejZUajlsOXZmV01jZHNaanhEQ0FXSURFTHJwRFREMjA0d0lEWXFyR0lCb1gzcTFmbXZmVU5rME96UWU4K2wyWkppOWwvZDEzNm5Qc2ZSS0JSMmoxVzlzdy93QklRYk9OcEFIR2xqZG9HVHZ6VGRUMFNjTGlYM1JzY0dOSzZ2MWpnU09EOVo2MzVmalBiVFJQN2MxMnhaVHduVktzSjVVdGwrR09WMytaMkZBYURjMWpOQ1dtenQyRkZucloyUHYwYVZTVHRvVmx5S0h2b2RUL1h6WHdmcVc4RUxXYjJTcWJpSVFJZ1Azc0VvN1hWU0JoWnNZZXd1cUxxZ3VVNEFOR1MzTnFmZFZoMzFxY3VVTmJVRTdGcGI4RnVZSkFvSjQ1TDZJL2tpWDR1OTFJK0N1VW5PWFdhK3ViY3cvVC9hZkVadGpudHBCV1gvc0xmWG9oeWpDZ1dkOXEwMzVQUFN1dGV6WGNjaGMya1cybTUraW1FU1NnbVl5ZWNUVmJEdTNCZVIxNkNjRjdNL2ZaRTNpc1ExckJkK2pEV2RQaUVML3NRdzM5Zmx0RTFQMk1KZnJhUDFxRS9yYVAyTUQvVm5SOWllVDZpKysyMHV2dnZ2N2RYUGZmZlFERzB5Q2k5MmNmMXh4cGZweHNYL0RSTU5lNlhVU2wrcS9waG9HQVh3cXgwNVhmNS9ieHMzTUlBMVlmMzRFOTIwWXYreXNySUZmblpWNGsyQndFc0tNbXFpNDBvSVdxQnljeTlLNzJyZmtDOGtlTkkrTTFnakIzdkxKc0lKN0NkUEpuem40YTVzbmtGdXExbkZoLzdhbEp1cG1HVFlSSjVWaDdBVHVFQUFsNzhNd25DMVkzQngvSk9ReHMzcVpGVGdMQkxmQXBkOUdNaVNQZElRckxzZzZBRVZJTHVlcDNQS2tGd0p6QXFmRk9oczRvdVBvQ3hwdnhGbUgvQjF1K1hiV0FpRHNNdXhLZnlIdkxGNE8xUng0aHg2dVlyTDFRbUNPSjRFNW5IVU1UNVRqUWdqSks4eFhLait1elVTV0NlaDRXY3k2YkVBYnVHRWRqbmNZNDQ4ZU5EYWE0OThEeHhGTWRlN1pzOThvb1BUa0ZJSDY2MzFUR0VPc2VHQXkyZzNIMlBkNWJvWTEzUHI5akZHS2FPUE9QQjlnWXRPaHpCV01kWm9HUk9RWE0yMVphL3N6VzNLRDVIOHZJUlE1RHlCUTFTeEFUSHlGa0FYMjZLbnovRWhiUzY3ZFVoN0tnRi94NVp0V3paVkJubnpoSURNVWZYcSs3UWhYaDZabFJrR3pRdnRaMFRFeHVNSjdGK2NlTkZOaUMvYnVXbzkzOU1LdC8wd2pGOFh5Um9RREt1TXcxemkwVy9PbHNpaktyeGY4OUFiY3dZMkdQQk5XNXNKbU52TEhpTGRUTGlnV3dRdVBxRDhWeEJOeitlT0xzTWFldUJkZ3k4VzJLbDBLRmZQUXV0S0Fob1JwUkFqMStldkRTWVBLTU0zazRvTkFmajJCcGozc1VEdVNhdmdHNjNEMDkydDl5c05zaVFxZXMzUTYzc0IzR0VzTlZUTXdpUUhMaE9ZVmZwM1dwVGo3bi9zZWg3NlpTeXNXbkRLMmxuOGN1dm13TjUvNXFOQ0U1ZDN0ZUgzNjZOdmd4NllSNHVJei9HRHIraC8ycFBZaVRSMHZBejB6K0FCSEMzRVhVTSs4dVRuZ3hEWkVsWVNUeFJrYjNNY2dPbVlnZU5wTjhSN1NvNWlDczl2dDFxRnZYaW9ZSjV3ZzRTbk5aMDNtS0NSWXRIaTZHa250K09iZE92dGRNRDVWZ28xbWtiUmNNdjhLWHBDOG56d2U0ZGJZdklYU1FaSjIrTERDc200L3VpQ011NktoODhiMzlvZ1lkdmY2V3I5Ung3MjFBTm1KTTFyZVcxOVg2M2g3ckp1d2J0cWk0dCtnRHpIUk1CQXRSN0g5V3VEaGIyUGpQNkE5QUFvd3Z4cmY4NjJiaGhzSS9Yc2wyOGRrVGU4cCsvWXNNMnZvSGh1NlJUWUFGNzYyb0lWSkI5M3E4UXUrK0NEMGw2SkRIVnp6ZDl1YkIyTG1tV1B6WWNEYUI3UnVJT3MreUdMSWZQQnV1MElZV3Fna2lhQ1U3U29hclZLeUppSmZZQjd4K053Ym1Uc25RV0FZQVZpRU5LVnFRU1M2TWxLSTlmRmUyN3pKR3grL2pEV0dIYitrVFpzWDNXSWluRmUxV0E0TlNkeTZRZWs5Q2p3UFY5ZEFDVkdWQ25wQjBtNThwY0FZK0RoNVJmOGliUHZqdkgwSEwyZExMS2hsTTFxV2greTRlUlpRSWVhbmZTVFIwbVV3bXVkcTl5NzFScTlLTWxaajVMa3NyUWgzV2FmRitpSFllcHZ6dUsrRFVxckRvb0ZXWUFvaDJVa0NxOExkWjlNdi9VNElHa0R2Y1JVcUtYVG1lYWtLYnU4SjgyOExUQUJJbmZ0aWtNeTNJSW5yOXNJQWUxWFY0ZDBPWC9BYmt3RXZRUVlFOUIyYmVvWVp4Q2lWTHR4cHU3cFN5Tk1GTVNkdDQvUm8vb2NYTTJRRm9WL1BxVjBUL0JXaFdXNFN1b1NTd3Jkcy9JbklObHlKbFJoZ1RQemk1c3ZJNGhFNnpSNlh2UjhXSEpIT0wvaHg1VTNFVXJiNC9ZZy9LUzdxLzA5QnBNQ1NvTit2WmZiWUpzZHMrVkRJVjBRajczUFlaMzAxWGVRdGN4MVdpcHdPOHo5Uk5vaGhjdU9PbCtWcTRHOHg1L2VlU1FRYWpvSkVHNmE2OG54dUdjOExWdFFLTHJGRTVZeGthZXB2S1hvWm9iaW8xRk9zM3Q5Vk1Wdy9maXZZbmdkL2toSE9hZytsSElrcEkxaS9tMGJraUZNSWN6ZWVsaXhUd05MYzlSZ3U5aDdIZFMxa1BrdWFnUWF1cnlmOFppSkhMcERMQVhqZWRNamMzWHJsMEYreHJIRW0rU09TWDR3WnZpTEEva3Avd0U5UXFXOWxTOWVhZVBDczlMdytEWklpeTdVRjM0cTAxRDQ1OFA1L1ZrZXl3anJtZmltVWNrNXNlRjJLSkFMMFlvemU1UVdkUCtiUWNjSzZCd2JzS3FwSjZpVUZBQk9DU3RQMXliOUk3cGp4TDAyeExhclFPbzQrYVFjTVJ2alNOMDFaRURiRkFHMUhrUlppK2RUbDliUUhyb2w2UlFUbk1IM2xoUEE0NzZuUnAzZjd0Umc4OFZJQ0dpWXpzeThPOUplZUJPeHhTS0VYNE43T0V4ZFlkd0JMOUNoZnRlL0J1dHVnZ3ZCR2dxV1E2SnA2UmEyYTFBbXp0QjM3bDlpYm1DWUUwa1VwSU1OT29OcVJMS3pvUkV4MlhnMUhjd1NUZUpPaUEveFMraWVCK2gySVMranphV0kzWnZqQXNYbzEzR2JRRHBpN1Yvd2ZKQ3dJL1czOGNOdEVTdWFFV2MvaUh2UHBnY055RnBUN1hmQXlhM3FOY2RHRlorZm5TWitpNk5rSWhlV2FmcHFiMnBpSi83eXBSRWxBdnBta0x2dkpEcXRQSzRLa3ZqZFR6LzF1UHIwSTN0TlBYcFVlK2V1SWZ4M2V4TFQxSklpN3Z0dzdQbHJlT1hwRk1hNkhKN2ZpbWpDeUlqcisyYkw0M0J5ZVNjTHVhY2FMbnJSWkFIc2Y4emd6bWxnWUVVRHU5bmlFdzFpUDRtWjZyWW84UGxuVVBIWUcvRTg4K3ZvbDY1TUtkR1BOMHVVREdkMWtHN2F0M3lncDV0N2Noa1Y5TVhYV1pLVDBUZ2JyL0ZJdW9HNVZVV0RHb05tWnBQd3V5eFRpeERKK3o1Q3dwNnNKS1VUeXJ1RlFUbEZVOUJBcnBaL29BcjNTd3lEWWF5bFp4citnazdDSG1BNml3RmQ4dXVNS3pIeFFrZkh0dk5RSElZZEtLVnBmU2QwcGk4cUo1eUdlbVJVVm1YdkxUZzErZHZsYjdCeE0rSDlIb0tVcmlSZUxVSXdsZ0hiVHJ2dE9yeXNXdXZIMmNsK0ZaV1drV1ZDRzhseWEweWRoMklsK2Q3eGRqcDVXMy9VVlNValV1bDhnNXMzS2NvS3dzMjd4bTBnUElEY01ERXBSM1dNUmFKR0ZRbzZDaXgxT3JJcnUzM241dzZ2ek9jdUpFUm11MHEvVWFrRzE4L2x5bXlNQXAyT0lPMHZIVWYvcVdUTEdMNy9yRGIyMW1Sd2VPNjlDc0xzTVdhNzlaMFFBeUduaU9laVJXajFlcHV0Qmg5U05sTlZwblhUb0lWWHJHc0FMQ1ZITGw1NmJmd2Y2K0xMbUlQdW41YXBLR1BPTXgxS0h2eURiYVdaSkQ4bmMwWm1UQkNzd0xCYjVwQWY0VS9pZWJucnZVekp6TjZtSnJxTk9PNTJGRUVyUGsya2hHQm0wQXYwSWhrRjZFa21Ndit2bmRFSlo4dnhKWDNBUmtKazR1MXhPWXlmOHRRb3NJa0pOWXhTZlhxM29iOWFZOXYwb3dOR0FNdHBXejBmdzl5Y0c3Yk1GL0JBV1JIWlZyWGdDY01FWFZ2TU1reVVmQW51R2NZVmE2VVlYbHdlekdsTHJSaVZwK3J2aXlhZUNHMjU0eUR6WnEveStkZThXOU9PSEh0c1Y4Y0dpNmR4Mjd3QldEUmtvRU41TFFjWnMxelBEalNQcDRCdmJKcFVvMUdSVGNUZVhYTGs0NUliV3lwMWZlL2tVRlliemhDRWNKQXNkbXJVS3JpRE9xOEJHMTkza1pQa0ZmVHBxM0dRckxzU0JwTGJVT1FEbVUrMG1lakh5MXg5K29FNC8rRWQyRXdtb3FBSkd1RE9yMGJWTERUc0IvQ3gwdW5OSFhObGRIeG5obThOa2Y0MDJCQ3ZFekU2MWpiRHpOSFR3UmViMUkyajRJMUFrcTA4ZGNEN0xyY2d2NEIva09udmxJWWNWcHUzMU1jb2dwRmNqMnBXUjB4SlI3MzM4cnZKQ0lvdVZIUHNta0U5ZWxxbFlRdytKRng1THZMMEN5UU5KZFA3bmV5N3g1cERqVXp3dmtWVFFNZCtIM1Zub1V0Q0s0Yk0zZXlSdmw5bUNxNUxZUGV0QUNBcWhqNUxyQlNtNzQvZmtoUmx1NkFneDJJOEFBTldpSXBkY3dsT2hiOXRkeTlYSldBM1pUVDNOSkowcXBGVVZwVEx0K00zTE9GaUlha1loWks2bnlUVWhyM1pJajA0ME9ickptNWo0UzRCRFlRbmpxWFBxbEc1bGFyeE10WVAyWXVaQmRoQmhlWWRsNk1WS01WeXlZd3FNK0h5VGQxVjlscjFGTjVVWklzWWI3djJXenFRQXR4L2tYUTlzUzgzQmZYRHdkMWQyM29XWmRud3A1YmlKZGt6a25GNXNUOUhtQkh3WlRjR1F4d1N0aURxOGEycExkOGRHeUkvTEMrTDBSMnB5WEV1THRDZURxc3gyejRJZXhjYzVpOGJYRWo5OGdWMnFxVXVWWmRuZWtmK1M0dXV1eEFoMHNORy9QWUJMeGZZMmRUcHg1VldJWjVuTkZOTitvWHppSFBzWmJ2d05ndnJySWxCZWtHQmpjWWF6VEh5U0k4VVNudE5RZm1tbm9jWTRPdjh6QmQvSkQrcDk3NENHQWRmSnFzaHlSZ2RkMWh3WlhIaFp3RWdNK1NhK3BJcExDdEg0bkhuOTJLbW1CakhTclgwRjdOdmRvTVRxdmZGZ1FxeFNyVDBzWTVHWEFrNm1YaGZIUnZFdTlMblNzeWt5RlFadmpyVFVBdGVTSzFnYXNLVS9ZNmozeTRrWDFVS2ZoSzdDcTN6MW8ySUREcnVLYnZmUFl6WWVBN3JKQmZwTGVvOVdFNG4vNFV5MGdUR2F4UXAxSjZiWG9vS0Iwc1lqdWRCRWJlNWlqNkFERG9lcm9pNkxkZ29TRyt5OG5mQUJuYnR6ZzBRZnhSa2x0YXhSNDlOK0ROeW9ndjQ0YTZEMmNRZGhLbElRUUZhcEtENml4THRYb2ZGZmw1M2tFZjgrNW5VOU04R1ErQWlqS0dpN0NYY1BhTG1GbENuMlB4MVFOUTE1a29LUm9CL0E1Q3lyM3VJMFdQQWUwQ1dwaTRVQXBkZGJCbDVaTUtzUk5HVFAxQXY4SjZkOXpnRkQySjk4eFJpUHFJWk1IakpqZVMzTEpsMFlGNTRXSE9PYStUeitqTEwxTHRaRmR2c2MrRDZSaS80S3F4VklHQUI2TWJZRFRVbGpnU2J1d2pxVHFBN3Q5ZUhDbzROTlgzVWdBNkYzN1JobjdOSHZ6VjBMZzhXbGZ6bHFlc0ZvekpMd0ZRWVF5eUY0SjNuWndON2t2S1dEVGYvcndWSmJlWFpJNCt4MUErZWRKRUJQZTVHTldsbFZOb2dZL2lDMzJhQU1malI2S2gxQytFSlQzZWJRajZpdGYvQVpvR3NrZk5SdlZLTGQrZk5uYjRYb2FzNzhRbTRGTktKUWtPNi95UDc5Z3FDRjVoaEV3OSs4eE5idUdWbmNrSlNpbWJNdGZiaWNTWUJVRkdudytNQmNWazFvbTdLc2dEaDZLT01LT1hFNSt0OHNYLzNPMEZnbEcxbXBjOHIrQjdsUS9Nemg1Uisrc1prSXRGNmtqUFQrZHdtczhjU2hkV2xGeU5rRWlzZUdScmlIbEM4ekRsekNIblNEZm1Gbk5MaWVnR2t1anVTWm9iN0pvWTd4K3F3Yi9hUkRnZVNEQVcxWVpveFcxTEUvZWoyTm9ReG1UNXpUSElGY1ZyeVlHOW05azR5QXh4NUsvYlgyS3Jzak01V3BZdjBCSTI0RnJsWVprR2xUbHpYYU5QVTlmY3ZrOWNFTVRSWEptSCs1THRMaFk4UUllNmFGY3NvalZGZ25DdEdJRk5rNEZkVzFzd1VieE5vUUlWQ3cxU056OTUydysyVk1qb3kwRzVJUHF2TmlSNHlQL2Y0Q1JkYkt3OEtISDRManJBejlZT0tpVDloa3BFR2xRUXVmM2o3SjcyS2VSYTQrZ1c3T1RKTEJIQnhwSVZGWkYyK0lCZUhjKzNwWlA5VHBmYUY4QzVheHpDNVVaLzFlR2xDZTMrTTdrc01hdVFiekNvRUtDcXNpKzFnSjhoMng1VHAzNFVVV1hNdGVEbnJtTHVJaVVnV2xjZmZVUVA5K3E0c04reGxZajZicE1RcXE4Q1hoYzVZU2twdDIyTm02Y1UxbldsaEFPS0JraTVOTm9sN1JZNkNTVXRuV281UjRjNlpLU0NPbXVqZkVIemxWUytTVXFwWkVDK1FiNGoybUVwaTJ0V0ZDSXZnaWtmaDM1eXNmNlRYYjZDNlZqR2oxTExVZDdyRW5MYjZES2ZsM2NEbjJXalRHNGpDVWdDQnJMR1BKWEJjWTUrMGl5SHE3YUJ6TFVUODdEbXFuMFgyQW1Nak9Nby83cksvekhrNWRieUhZZ2EwRXNlRUl0WWdXa053Q09JOUIzZi9VcmFBVDFDVXhwMjBQNmk0TmNCQUNLcFdPUGNOeGVXOUNDc1BvZU1UTWxhS1IxTEJ0YzltZW04bUpNL3N4OEVrU3YrdGdFUDlkcy9ta2VIdTAzQzlKKzJyNmlySGhrV0JBaHQ2WmF5SU1GVXV6MDgraTVWRENZeVZoTVNVcGp4SFZZQUo2YUFGTVpjWU93eU14djNNZy9hVS9TbXo0cWx3S3A1YWxndmJDTkJqYmxDS0tuY0JLL1BDUHNlTDVsbjVFb3R5SnFZbUJHakR4cEp5TStGbE92M0RiWDJyY2NIeG9PZVhRVlZQTWJIb2E3SXB4M1ZpcW1nWUhMT2lFZ2h1UW13bjZ3bHA2bVU2bWRWdjE2cTRDYTB5R1dIL0pGTFhWSzJRWW0yNThzdUppRk9LWHIzVDI1eVU4dVpNSjVtbWh1QkN3MExjUFZBM1p4ODB4Vmc5OHJXeFlQT1dLRWlXL0NWY2dHbVB0VEExeTAxeGszcGxNTU9HOXdWT2xJNm1LempDYVFDVGxaMjFlWnZmUlpCcVVFNGRFb1JuRmxEaFZiWjNjZmdybE5MV0VVSVFFUjg0Szl2YlpqM2NPWi95L01YSXRnTVpIV0R0NjVYSmhFb29PNTFQeUt6WmEvaEIrSlJ1NFNEM3FlbDVZdEg4QXp3RVNDaW9nUFlQbXRDVU9naWs3VWNWVmd2YXd0cStaTW00M2hXS3F6KzRRUExQOHFVVG1oZjJRNmtmODA0c0VoZ1BXakdOc2lBMzFaY1hKNEhPT29tTC9hRmNZMnJYeFY0WDJHMWxNL1RNYmJwSGNNTTF3QkxpVzNhOG5rOWh1bFRDYW1KS3JzeXVTRzE3MWRNT3JNK2JPRlRZd1FDY2hsdFBRR3E4ZjUwOEtwanE2R3JRdENrbjg5QldHOHBtZlBBRW1xQkZtRTVkM2U4b3BJSGo5OXBYamFxdlNKd1QyT3d4ZHR2MG1FdmFSYlkwUGcvdEk1Q3lRL0xQSTE1SmUyczVkNHpYYi9kNkpXT2VCVVJ0V2tBck1FVDBWLzdhR3lnaWVBbkx5WUora2l1aVZVUzhxNFdHS1lGRWRzL2N0TkdTZDdKS3lRL1FZd0ZGQ01sejlYL05OdWs0WnRYSUpsR29RWVQwc0ZWQTRNTy9odjhwV1pQb0I5MG5LVnRQS0plMGxUd0ZVVWE2RzY3WkRMU3NNeGJMa1NMQkl4dEk0ZExKZVZPbVVGdEU1MjZGWG4zU0c5ejNmNkN4ZEFUU1NITGRiY1lkaE85SGhoMXU1alo5QkJwYlZlMFQ4ZzBDNzNnaWxacHU0YkkvMk1waU9wSzMraUdWckZIRnYxVm1xaDJoZlBTTGpyQWhaZ2dMR3lDWUtJTXdKejNkWUNQWWpDZVJIaW84Mll3UmZtNUZuT3IzTUdJWjlwUmwvekl1dHNuZEZ0YWs0bkNQdHlFbXNjaFdLQy9sbDFGbjBaRWxhb3dWcVJBQi9WMXJYUkM4Tk9kU0UrTGlnSWJSSnI0L0xZU21ET01hYmtOY0EwZGVCbjBJY0Q0aEN6UzZ3bGtFbm9tSnNBSk9pZjZhUUh4RDJRaXNBbGEvNDB5UFlDVHNkRVV0SEtWTG8vSW9lcUVtWHVBSldpMmU2U2Nlb1c5SHlGV3g3c1RYYWk4WW9yNU84QTVzcGgwWGxtZml3K0dpeFErV28ydkJiZWVNSlpsYVVpOVRzSHdESEx1YmpaL0FOcS9yTE9aMlhVSnpQTkEwZjkwb0R2TVBqaEFRNGxvZGpMNW5VR0FHZ3QyUmlWTkp0VVZQSVFJT0FWNG1sd0M1V0lxeWZMYUFQOWR4b3krVUM1bEhMbHlUKy9SRW54WXlBYm5aa1hwazh2dkQ5UUQrRkZiRDQ2TFZpdE1xb2pRVmFTYUp1SDNKVitEb3BQeWZGVWRBMXZXblIydGdhY0VGRjNMaVZHL1hWeHU3Y3hLaXcvTFFJRHlJSWNkeWdhS01MYUNpdXVUYkFJclNLSE9kYzZXZ1piSTNOaVJPRnJucjUydDdTcElsSEFvcHBmSVQyREl2RHZKVUpHeTZWRTIyWHlSVzlVSGVwRUk3b1dpeWs5N2FBMytlMkdFT2svUVRxRUxsNUZyRndBbHVqeWZMbVNGeU9BZHpNTlM5MC85NWh3VFJ6RWgxbHhUL3h4ZUpQb3c5WkI1MGo0QjN6aUhzSmlJRGFvVThLZjQ0YlRTc0p2bGdyS1FaQnJIMlB3MHNWNkV2UHdWR3JCZzMzTmZKZ2h1aWplSGo4VVZuMEFnZjJQVEpsMDczbW5TNGtXYjVDKy9zQ2Rxd0V6dFZYaDVIbHFkVUdwbDhmSWNhb2RnRHM5N2ZDZ0R0bFBoMGxIRzZSSmdCaVdSV0Z1RnFHZTBBa2NjZDRDem10d1Ztemh1a1dwdEZ5clBvRTJEVmRHdVJLbWlGY2VOVVhOMTI0UzhxS2lHSDFiSkJvcUlJOFQxYUpVbnNDbWdnamFkOHlhZkYrMHBHUmV6VUgwY202OFBlK011NHVzVnNEbG5GYmF1VE5rWEl6MkhDdDcyaWpqWUpmRmh6emo3ZFV0aEFnTEUva2RKMU5uK1diUEdOajZBMnN1UFg3SW1iRnBKVWVoQzNDek5tSlpNbWYvV1J6blV4cTI1bmNxRzFJejQrcmhndkhUcU1ydzJZN201TVc0UnpHdGZpODI2UlowOWRGMU9NaUdlb0ZxRjNjZFpMd2NsR0dTV0lUL0dsb01JRnJKOTMvSzVJRC9Xc3NBNFFoa3FoQnV1dk1sV3ljRXhwNU0rRkNBSThzZTFaQ3h2RW5WZm8ySFMxYndQS1lNM3F2T2JWUnBSd3Jta29rNUR3RXhsUWFRRWR6dEp6ZTVCZDhwNVcwaVhLTWc4WWZwZ0FNSFMxYzZSVXJndWt3MEg1SnJKRFF3Y1VOMWhuOTN0cmdzb2hKdTEwdTNnYXNkUkdSTHNTU20rdWNtalNNdGhTT2FSTEh2MWd2dTJXOGVpVTFwOUZGaUpLckovdk1SOEthYlVWZmg0MUF4RlpEVWd4ZGs5cGhPbkNvVE4wZ3hPQTNLOFN0VUprLzBTL3Mwc0VldHVkQlBDdzBlTkNLbkdLcHBhTlVYejUzWHk5K3VqNi9QZkNlREpucWVUUVRrV2VBNjEvaEE1M1g1akVZZmtBMHpSMm1Cb1ZvUWlMQmR6aXpaOTdHTVdrNnhrdWZsWVBUTUdiSngyd1NtbFllTXRsU0NIc2JvT1ltcXpHTHlPMTlnZFJ3NVBXREZrZ2QyQjlkS1ZiMitPWFBpaXlhRDRVV2hIdWM1SVh4OUFKTWkxWklZMnozZnEvYmZLbVo4ZlFwWmNqRk11MkdtWjVaUXhWM1UwWS92RHF2UjhmYVVOdElGUTFGYVFlRGRpSzlMM3hNWTROa2xvNnRpekUxMURFNXhvRnZnMUlnVUpBRUptSDZMb0ROZ210MS8wQURXYmYydlovSDBjaEtzWTBzZlRwMGdpcHRPK3lTMnlDcHFLd0xGVy85MUQ0Wi9uNUZqNHFVSUJpNmxvMko1UlU3YkpwaWZpSFlocm1JLzZDQ1RHSW9ZZGdGVk1rRVJOZHloNFVTM2Q4Ni9LV0NHMDNDemYvcFE3UU9adnNqWUdwSE52L1VwRm95bHJjV1paREtlZDdsbWpndkpQNlZUYWZ3NVZ0a1JsN1JEcEwyTFhCZ3BtOGs1QTB2Nk9VanJqYWVHcFJmd0FnM29NKzJWdVh6VnJxbkFXYUUyUjBQZ3QwZXpzQWlLU2FDditLL2VhVzhkaXJCRmZSSnJzb2JKN1VYNGoyOURtdzVQdDMrMTFsckVuNkYrcDA5RWxpY01tSkt1WmtXdzJyZzBZeGJOQklqWUQyV3BvZ0R1Y1FTM1p1VW1NUmd6QkRSbFF2SE1WdkllRitaMHFWRXVTTldNYjJrbllZcjRJa3lIRm9ielpTUGQyZFhyaGdoa05DUGxCYTcyMUl0cGlNaGZBd04rR25SdnBzZ1YwSmdWUkYrNVhNTHA2eThxZzVpL3h2TW94MFlodlVWODdWTXl4QmtZc3NRUXRPdTNCOWg3UGM2ZzRnN1lnZjV3OEx4T2Q2Z1h4dlM4enBXbkZwbXY0VERLbXVCS2l3ZzFzM2FzNzcxWStIb09mdzZrb1FTVWVSYkVWdklPWHNQeFllNS9nR2JSeHkxcXp2clFBOHhVU0lUVGxhNCtlWkUyaGZLTjNHK0Q0Z28zaVQzMVh0ZGxmbHJKUkxnVjdyaURXQU5UU1p2eSsvQXE2bkVsZUFrVXNUMU5Idzh6T2o5VGNNdzFodVRIU3diNm1IV3ppOE0vZ0VtQ3Q4alZmL1NSelZXSEQzQmJLQWp5VGJRTGpNSllGbmRkVzBYMEFrTGhUVTRMWmxWUktYZHRmd0xFVEVxaC9KS1BySW4xMk44N3dVMzNjVUFGTUh5UHN3cVVrMDBlZStNNUQ5cjVkQTY4YzNIZE1OZmY3OExtbTJLenB4WVFJSi9XKzBqVmREak4yZHV2dlEwR1AySkZmMUtYby9wS3dqS29zSWw2NzUrY2dlVjMxOVRtWUVhTW9NQmsxZUk3bjBHd1Y2c3NXWkI2SEhrM3V1WkxyN243VUFlbWFjNlAwZzFmQmxleHlDdkg0SytReUx0SUpVK0xsandXR0JqT1BvaElybmJTUlpGZWphRTViTWhMczI5OGxSZGdOaHh3cTZod29qbXVFakFoYUQzb1NrdERWQW9PS1k1ZDkrYVBxNVVwL0pmTEtGY0xTeXNDY05HMlJMd29naHNTeFc2aUhHc2dObVlIY0VRTFl4THJSZU14WU0rbVRQZk4yazhEU2RSSUxSM3ZCWFBGNHFZZEczTGFlLzh0b0VPbVhKd0ZGQjBNTDAwcHNWanlUdlYvOHk1Q051WFZlQnJRNjNhelprT2lQMkY1dFloWVZPZUU4QzVvcGJNdHAxSzlXVE4zbUF3RUgyaWF1NlZnQTR0R3Q5R2JyaElpSHZwbGlIeEd2aXJESWhKV0MrdUlOWnFORlMxNVA0dGVib01KcS9LMmJNa09IUWROU0hoaG95YjlUbHdldDJVeXRWbkd0eWtnNDdOR2NwMEpNSWx3Si9GRnFGOEpCYkdDcG9VdFVsMTZSOVEyem1WMWZUVWMwOCtKd3dtNm9zTFovemNXRnVuWlNRaDNEcTZSZ2RqUWlnSHFYQ2pldnNyVThRWjljWTJGWmtsK1g4R0VTRGUvTktDVE02MXhpZU9rVytxZitMbktUTk16NWxGK1E5bHdGMUw0VXFibFBacnRtaWs5cTlVZHpTa2M4R1hRRnRaUjd6UzBDd2tYbTU5S0wwcG1lVTNWQjdjbENvM01VbWN1OGpKUkZxcU4vZGZ2YnZQRnpFVk1WZUNIdDl5c0ttSGRvalprbVFhV1JuSWluYmorYUs5ZFR5TUFSNEg5Nno1MTRPdXd1bHJWUGJuS0F2TzdLRDU0ZXJkUUpEekluU0tZMjhwVTZNdTVJNC8zbk1VSU9wcURONjBDN3JHb2xzeU1zQlFlMEtDMmh6U1pGSHJLN05VdVlvVUZ1Z1JoWkxaSThDWG02cm1OSk10S1FqZHZkOHNDVU9QT1pVY0MyTVk3OVNqTGNxT2F6NFY3eWg1TnpFeEFvRDBZZUZQdmlZWXVCNjIzdEZWYVN0MkJ0WTRaalhpamNKMGFuZlYrQVpMeXM1ckEyM216Q1ZDTmN5V2hiQ1BxVU93bzJGcW5ZUlhtWEJZZG9zSEtLZGRrckZYL0dqMG1SSHBCNWpkR2pmeSszdVRScW9TTnZTbXh1cEVLUDltMTkwNVFUcWJUNmxxQkRwS3k4WTdzTFY4eDB3SEVpQUJsTTVYR2VOeUlWc0xlcW9RZU9ZOUFheG1mdnQ5Sm1NVFR4MlBpSGVzemdSc0VwOTNqR0VRYjFhMjZscUlxOFA4SkIwUmd2MmpYdFd1aGFyVmlRaE1CQ1Z3ZFJPZ3NpTTVLQ21GbFRIT1RZaVU5eVp0Y01SbGdESVQ3eFlpaU4zYkFUSDVyMkpZdjNpWlpGNG9aN3duSEtIdm1ZV1hTU3VhS1NDTExFaGNybk96OXZpaHZVRFFrUVUzNEtULzQvMFczSFZzRCtHNG1tbkZrejFwL2QvZy9oTUlXSzhzWWowR3Fma0F5MXNFUUY2enFNV3ljV2RQVkN4aWxsbS8rSWFQTmhMOGtSbTFLL2xkTnRtVHh1Q0EwcUIzS0VKQ1dEU0lBeit2UHhqMUZITzZmNTQyTUlodWxWRUdoSEhVSEd6UGd5VjBHMzBxdjNGZUlxVU1FTGR5eXd6UURqV2F0cXFEbzQzRmJwai9JNmJLVk9QeHQxQ0p5VEF5MVB1WFdMNzdLeXVLWlFjYU9nTWhEYWFTL212T1gyVi9peEZDUWFLcmUrM0Q1RVN6VFFaRWZIbzFXZjhZR3lQYU5KVW1jOWt2bmtpOFAzMFUwdzlWOVVMOThzUHR0T0x2TkFaaTkwNy8yTW1yc2ZVZDZtZUJhMm15U0VaQUYrQ1FMTk96ZEFUc09vdDBDdWpnSTFkZWVzRGpwa0Y5RnRrMmhRZ1JxYnVkeEZPdWZsUWtteC9rRHRJbDk3dUo0bXJ1bkhLR1lxQXNSWnRSY3JjTWxxNVVQbnZwcjVHTmUwQmlCVTg5M2JqSXFUQzdXUWtBcWZiSmM5WTFrcHRPZkZ4ZjVVcUhUSjJBUVpqazRQaU95a2JYcmltbm1KN0dqbHl1OE1vN0pScVh0SG1kTTVva0c3bDlUbmY1UGN6UlYrNUprODl0azhQenp0SUMwbHVqdEhHZS9FOEtPbEZpTkQzR1Z3djg5RWJvQ2hZR2hRdFMxYmoxYWdiRjdpUXRPZHpUbHRRRWcvbklMbHhYZUlFeVN6SGNsek5DeUM5b3M1LzZQMWJsOXBDT2hlSVhZbGNoZW5IWVY1L0ZFN3M4TWVpcUw4a0JySkI5M05BMXNGS3BBaDNzTjhzaWlxNlF5Tk0zTzBoU0RzRUxOS0tjeUN4TXVydWMrcStBSXhhc1p1WVg4SnBYNTluTXJxNDczUlhxdFN0VGptR1E1VWhmekRzNWJTSzVVNTdYWXRxYW5sV3ZmZmhCT0h1ZVJwNXVVOWh0M2FEN0twM1VwWEk1SnB3OXJBRFlMeEhBbitRS2htOCtIZVp3UFQwMm14ZnFiQUUyNktZMlk5OVI2M2pET3lzU1BPSjZHOGlXMDR6VHYxcVJHKzBiREdpZnRQOTlMaHhod2xLVE80Z3Z4NmViTXplanhFT1NpdlVERTNpdzBiQkJYaTNiMi9JZkd2cjhmYlZjSGcvWUZUTUU2SUF1RnJmaytvRHN1QVRTM2UvQ2JDSk1ZeTBpOXEzdTVOTmViUVpUYi9LKzV6VTZkZGtCWnpNWHozMVR6bUsyNC8wbktsMklxd2tFWFF2eXlwbmpoQzEwRVlCTENNYjZyeUVUdEV0aDhjZEVLVW91cjYyRnhKbE1xZGtFWGplZnRiYUlBSVJrSUtldXRQSmtuUHk1NnlRRGxjc3c3dTFmNzdRNUVIeEtGU3FIUW1TSTF5bmhpc1pqWXFTZTNMdzBtTVRpbUYzbWo1VDdhRkp1dUtuQVRVTm1oT1J0VktZUmIraXpTem5ZV1JrR1JGWEg3bnZ2YmZKUFc3b25UMzlxQmx5bFpkTmcySmtPYXc1cGs2OXQ2a1JxV1lYVzlnMHY1WVExTnRxY0VnMlZKRVd6NzE1ajZ4eERaMCtvN1RtWENWRllnUmhqL0tBSE1kejBhZGxBTW9VZzluaUcxWlEzMWx1SkRrRGxuSXdwYzNnSWxjQllQR3o3K1E2ZGc0WVBJc3Bzd3hDRG0vRjBhY3JMSDcrTTlUMlhub0RCWG9zNmdsakZSZnlGVVV1Y05tNzNiUjNEays4TTd3NEhsYndBRzZmNGdyVE5keGs4NlQzMXJWNVpabVJLZy9yWnJBTSttc3cydnVXYzNrQnhzaGVOdXlzNU9xaS9ENmJkeWpWWmYzeHY2VGRybVpKYmtnY05yRnZWZXJQbXZkMVlvbzRLVDdIdHhOSUhzbVpHWkxZdGJweGdTZ0dISnk2THk5a3lvQW9MR1hvRm1Iejl1Yi96eDRyK0dsRDBPRE9RaXBreGRhMDlrc0NmYzkreDF3U001Y01zNmZJdzVHMGZiUjFiRlJLMS9iU3FxN0dOSjJKdHFzMkIydjA0emd1U3VsSTlFbytnMHNQZFpLeHVoWlhZN3QrWU16b2tYZ3NhWlJEUFZ6SXAwNndiSllYL29lRVdUTXhlY084ZmxKdWl6Nm5LbnQ5SzZ6THgzT2dlYUhud3JLekZ4UHlhbEo5ZUFJSDRFM0ZYbGFtVHdrbDR2a1ZjZ3AvNGV3dHpRUlo4N2ZuWlp0MlozT2lROStQZlRIVEpvS0QrZmRETzByUTgrOGFVTy9ES1pmN1B5SENnbnNLbFVlRHN5SFVadFNMVTU5bXU5cXdhMjY5OFd3NWRRMkFvZStVb2cyYWFVL3VwV0lIUnJyZnNCSmRzS0U3cWZLTDA5V2tpaFAvQ1hRWmMyNHJTNndJUE5wcGhwTkp0MmhoU1UrTlV4aWRvNDlZWGh0ZHkyYkUxTW9vWHFCVzFiRzBTODlnNGx1eXlSRVB2YXMrZmJEMlZicTlrVVRKTlhSZkx2OEpKdDJRUzVqaS8vRVd2SDhmZXFvMVMrY0ZmTE1zZ01TNHpabWhoQVI1NmNZMGFJQ2dZQzluNGNsbXJOQytVSjA1eHBZN0M2NUlkclBaMWhSaWFXMzA0YkZnT05VNTJtS1R4QnhmWk5mVWRsRGxYVU5yaVdMekh5anEwWlBydW90aTMxQ2toMTNvby9vSy9RdUY0a0IrUDNpMmZxSVdybHJWb3Y0QkpoRDBxK0x0OUR2TkgyNDJJeHBQRlhST283VGxubWNlTFdDd2paQVBFUUlDMExCM0w5UklFT29oVVMzN3JWdFhhZjN3a2YwV3lHU1l5QnFmNEpMNTJqbHhQQmlDUjJSWjJuaU1aTDFRckhoVVpHQW5vTHhVREsxbFBNMEd5MFpJdUc4bVpia3ZOUUJQNnNzL0xUUzY3cFBIR2lOTU9hVGo0eFZadEVTQUx5OGN2ZUg5VnRWbjY2d3ZQQmpwU1hpMWdCa3pzM2lJVkxrSnRFU2JGVGhKNU4zOVhRc0dORG1DQWh3bFk2QzVjWXRhVnRaYWEyak9mZDFnRFVYdWJkWlpIbTFkMmxUOVl1ZWxqZ1JLSXphK1VJQ3FLMXl1c2hsT0kwMEpyVmhBdUJtWVJLSXVFMVYvNmRlYTY2WlVHR1Zad25pcVl6K2VEUitzRHl3VnFBYmtYTGhBempEalFGN0ROS3ZFd1MrWXN4TldDRy9ldklCaGVQaVpISHJDV1FPdzg4eE9DS092RzgzTExsUktySnR5S1l0ZkZmRGpMVnFVM0VyeU5lWEQwTlJncjNzS3lJM0liNTBLVko3SExHSEJsVVNzVU9NY3I0RG5ZbS9NcS9sTG1iUjR6WFVQTDNleDAwZWQ3cDAySjJNOGVFZXEvY21wNGJ3M1NIcUlnQWl1WE54QldnMzYzbkpXd3dkOHFRUmNqTW1aSlQvY2J0OVhqQWxYTTlhYlBhUlh6Z3NzKzdqeTdkKzk0UUpPNTlHRVVWYUxIMnNrSFVhNzRsd1RMNnliRGRVRlpBMDYxalBpeDFMUTI4c1RNK2NROFBZZWkzMGZIMisvRVFyL0k0U1VQU0pMSkZRazFrekJqSDUxNWtacFVFVXJ0bTRZdjd2Vit1MTkrVDhaS1NpWDdFdUttVis1OU96ZnpLMG0wSHNOcmZpM0ZhOWFVdkxFUG53M29zSzN4OWxJUEE1aVZoam9ISXI1LzNIQ0dUWGdzbDlrL0FoT241enJpd3RldURjdlhwZ0IyZElha0ZGT3MyTHIzUjlzc093cTY3dUx6cmd0SFNwWnFwWk85UTJEOFRSWU9ZN0huY1k4TDVXdFNNc1crTnhpZGRMSUpRdDExYnhKRThrZ1hCVGd3ajB0VTdLRzJhYVJUOTY4YTJvcmJMM2hXTXh2OFhtaFB5ZlZUSDE4cnV1QjlwcTUvOEpBczZ1WXBYUW9iYUIxOGhCZnJvODhsS3lpUVJ1ckRKcDZ2UGpjMzZjMUhVNERCMDdNZW5GZlpLazNCUDRPdGM5VU5wYlNvNzRNcnZ6MmlXakJuaDZEa0F0TFlKNjh4OEVUbURVZFBha3F4cnN1Q3RablR3KzhqZzhNTWx5Q0F1QlloeFRqZ1VNV2daYSsvaEI4MHRhZm5DMGFsQWFhNVNCci90bGlML0FweWxGbE10d0duMFdHSDczN3U0R1MrK09zS2dpZTB5TU50M0FwZmxRcDBJVDIyM2crTnZxOTl4NXhTVTZWR1lkUWk5WlFUYy9yVERkNEZNZW1CUDAvVXFnMG1wUGtteDBNejZOajhETjFUUmF0ejgrbmxORzZwZEJjMlVBUDhMU2x3bFBwNlBLYVo5Y0pkaWFQSDFLbno5MmdOd2hUekkxempkd2Y5cU5rMndtaDFPMVJ3RTQ5ZVZuVGFYZFJ4bmZhd1haU0tNcHdLM04zeVkzZ3hZamRleUhLQnJYUTk2bWRRUGFYbVN1WmtXRDFLckY2V3pTT3JYL1lTMm9JblpXZWcwVEJ4ZW5kS28xWDkvSHJUR0pUQWE1RnF1L05UTklUYXhRU2ZmVmNEaC8wTWdWR1dzZFhWRTNBV1lzYlVjQWQrWjJ3MkdhL1N5ZzM1bVA1aG9NZDFjb0s0Rm4rRS9qd3ZidEUzalUwSGdqUytnZFZhRXhPN05JdzFUdm5QNE8vay9TSWwxbm1RdWlpdEMvMkYvaytzMG5ib3dYcWljbmpsMHBvK0puSTQyM1RpdDFHQjVnZUhnTDVqU1g1eEEyKzhnQzV1QkdYY2Q4eEQxT3VwVlVFNmNsZmtLQXR4QWRMRDN6c1Nxazgwb3VhbzR5VTR2TkovbXZNbGVWOWllSThMYVBPcEltcFRJVUZ0UE14YmJuOHV6cnRKTW41RFNNcVJJSDJodi9yMkdhb3pwL3N3RXZrZVJlT3ZQTVJnayt4SG5mK1FXMXNMUWFCL1V3ZkpPbVV3MEVmN0pUcURvUUc3M0VoYTlBVVFXbHdHVG92Y2xXVE5FdVc1Y3psK2o1RTIzVTJtYUxUNmF0bjF3dEZtdW5RWnR6eGpyZnlCLzl4TE8xSUQ0UGlUWm0rc1R3UWhtbGtrbmJqN3k4K2hmSm5ZUm84b2VpL01HKzNyWVEwdlZsMW41VGo1VWpMMlZjeWtVazNsK1J0UW5RcjlYellEcHNiMmUyMlJGV3lJNWRURTR0VkRJK0RCbExCWDFhTjdUSVR4dTFFY001VlRzeGFSb3BDREg2WWRkbFFVTzlkZ0JVRTlvVjNySGJlYzNOWjlxN0VPeVBqZ1FwSWFGWlRzV09TZlFucmZwakdQanpGK3JxWlBQbzJFN3JUU1Z0UUhFWUcwWk9HdUd5OFZta0d5WDdka2hSZ0VUNytsL2Z2Ynh4KzVtQUYxSmtqSHN3b3pkcUtmczlqd2xMYWlCdnRBUmJpa2szbDhFTi8yYUJ2UEdEa3RyTnZvalYrTkgwQmQ0WUNqMTJ4alZGcEZva25uaTF2UlpzcDlSNG5PU2haZmRnb29nc2R0S0VVYVB0ak5pcFdMeEEwa21SUjd0V1VOeTJKYW9ORjRWcS95Q2hzNW8yTk1UYUVSUjZ0bElaVmticlY4Q0xtdm52b3VsNm5kVGlEdEdScEdveDBqOFJOYVByR3B6VmIwSVc0d29xb1JmdE5TMXNNOXI4aVc0WjRjVG16aEZkZXUyblcyRHJJS2F2Z0ZkR2xCUTNqdjVYdER3SWhCWkhXMUk4SjlyaXhoeld1SEtNMXJmRXY1TkExNTMvZUJIdWYyZ0QzNm5sMzFtRjk2WVA3dW9LNnFhQUFYODVFbzJURmgzOXFpK3FYcGxERVB6bG9VWDNvMkdyNDk1VjN5K2orTnFFa0JhOWx0bWxRd2piSWZ4ZnVwOXlyelEzUWg4bjEzbHU0WHZSa0VRNENFNWdQOVljbklsNS9VRUtQTS9KSk5YbDRUMjcxZXA3ZW1BSlI0WkdWajM1L0xEU0tLRWt5VnR3aVhXQmZsVlhWckxLeTBQVi9nNlVoanFmOElqU2U4OHJXYU1lSHhkOTBUQk1yV1VZWWhTVFNaVENhcTVxZHJsNHJFdHZTRCszMDMxOFlBTXhBeW5NcEdJQTlmQ1JDZXR3NzN4ZnhlRmd3cVRqaHJFRFNZdmdtc0lwb0JPRHMxZnQ0R2h1b3BDSURKckh2dnlZczZCRThXdDMxZDFGTHM0b3RHL3BwT2hubzk4eHNFY0FsUGkxT3ZCWFJPVEtud3krb0x5dFVHK2dFSG5NZEQ4blVSL1FIMC9kZUlUdFBQeGlMU0U1azI5OVJQMXhWdEsrdVJtZ1grUHFXV3pNbFRLZ3pEY2hVeHRnRDVNWk4yQUpkenpaTzAvVkhIUlV6eEZ2bEgvRVJTUzdwQ0tydjhGMzJnbzQ3N1dDc0hWY0ZKWlRIYWJrcDFqekhibWNIL202NURQMnFrUFJxM2lSOWdRZFB2ZWNuaDdlaDNxak4wei92Nk4yb0RRbzI1ckYyTHY0dUk0WER1clBaYWFBZFRqUUdoUnczdnhvK3dCcGJUc1l3eVkvQXVoTEFzcUxQZ3kzM0J6a1RNWW9zOWJPcjIveGJ6ekFlS1pnT2lHWkRBbVlYQkxKQ1h4eTdHK3JhQjg0dlFJTmJPdDJlSFF3M1F3bS9oOFNkaVcvMXI5eXJVcWROemZ1dDdER05JczlSN2Y1QWRmQUh4UGkwRTZxdE1wRE5lclhuSVFXZHY4RkFUT2dxM29SZ0VPWW5tV3FiWG5POFhuZ1lFeklDSVFpZGJRVmwxUnBBQlltc2t3OUd0M1gvUTVpMXJyS21XQ2VPZE94bVMrK0x5ZzYzc0gyQlJwYVlwSVpocnh0K3Qrd05Zc2p4bHZtdjhrUHdqQlNvTmdQSEtwaWJXUG5rR2ZYMytsM0g4WS9Ma0toVnVjZkpFWEk1UVdQbmJsalJKN3ZIM2dWTmZVb3p0S2xIU1F4NGJqSHJWbFRaa3lTc1pJNUFvRHhRVzF0SFByclA4TTlVZjJPcC8wcVRDVVFIUWJTQkRFRjlzcjBibVI0MzNFYzV2Nzl1TnBPeDdtV1Fwa2lxZFJlTTllbnpXWnQra25iRmFuSWk5cWcvaVlXTit5bjFwY3pUMThGUDQrUkt4Y1ZncjdMWnlrN01ZY3ZkUzJSZUZWdCtOZHFkelRDSGVSbXlIdXBvZVBzbXBNQkpqUS9OY1lUdExJZnVMR1FxTkFCTDRwWFVBVUVQZTMxU25XY0E4cjZKOGIrK0xUQ0U5eTY1bktQeDRDdzB3SElVemFGdEhLYlNlUVE0NzFqRlFRVmZJRmZUamNIei8yLzErSWx0ak5yTjhGVWRGaWIwNE8rcno3Y05FdHp4aTkvZkQxR2tOZ01pZUtabmxSOG1yaFdlRlBDQzJJM2pKR1VjeGVZdGxuSWo5anVBUFp0SVdzaFR1SGRjdCt4RG9qTGxpY2JIbTBsb2xURjYxREJSaTlnWmxIMHc5Qk4yRHY3bERLc3BHeGN5UzFGWlVIY3ZzMld5T1dsNlNTRWN6bVI4aFVSVnYzZmpFTUc1cE5aVUVVVXMrcko5Tksvb1FPczFwZHZ6ZFFnSUw3dEtibXlhMHdBRmZOck83MTdQUFAzbVpWMklYaDk5ZjV2ZVNVeTZxVml3bXdaUW00TExBQkR4b3hrcVFWYnAwakZDK0hRdTB3aTB0QWRpbTJ1akFnTXNoeWFMR2taaldaLzFDVTEyeEZ6NUJmcjNjcUhTeks3UGdUUmFnbnpleWFzTmcvVm9pRTAxMEt2WEUxSE80RGtaT1BEc1N0ekp5RWRXaVVGUUxvZWxzZlJJbkVTWXFZa0lHRnEzRS8zMXc4RGpQeksxNEtVbUhqYVVYS1FEWTkvM3JIQ0JZK2JtNG9vaFU4d0pPRnVwU2lORTlVVEN4aDhmdnoyTDlpN0xpRm41eFB6dTJCeVlzTVhPa25reWU0TjNUQ2FwYWxrUnd6Vzduc3dVL1YvZ05GZXdXZ211ZStIYjdJYmh0VHVHUDNPN05zbUNUUkhVaWE0WUE1cnMwWm4zaHF1d1pIWnJaTjYwcU9BNEJobUJNMW5PVTJkWUFsQ0VZQVpzVWNaRVZpcXJ5YTYvYlJnY2xuS0tBLzMvTkl5WUhERFUzWWhkZEhRSndaQ05WZ3A1OEU3N3F2bzVtOW52eXFRMWE4bHJNb2pHRW56SkoxVmtCK09nbWdmK214ek5kaXk1QUZqR0llY3IraHRNZkR5UmpUVjhwcFJzTkthZlFSTk1aNDIvSzh5OXRqMU83NFd4NXYxQWFnQ0FSWVVVTC9iRzdrTVJSeUFrZlpZMHFTMENCYUtjbjhZRjcxNnIzZHU5QitZdkNWbWhBelJhWGJVd2Z3NGtGRllDUVdqQWlPcC9HdnEzU3EvdkZiVDN6K2hNZzZqN0lPekY3L0JYa3IxSm5heXRWWUVvK2hjaGtEa1ZObVk2Qm9BT2JwZmFSUUNqRGJnTzNDaUdJQzNqMS9RT3RhNjFwRGk4WHBEQ0grVWtueDNzVXIyRGRkcHV3c294bHFuUjlmMUxWdWJoQzFQSW81dUFIc1M2MmY4VDlDNzA2NVBCbWNzaEpaZkpjVEZockVPRFQ2MWNEQlc3Y0poc21iRVhBbzhYanBaQjVBUEoyUDBtVVF1OGM1N2sybXgvU2gySmVaY3I5WXBNWVBRN0QvQXFla0luOGd2ejg5WlNDNm9LZGx4cUhGQVBUWDY0eEVFOU1Ja0tZU1VObHMvV3VZTGxyVStTbXNISkhGMnZWRnVCYUNoVTJUT2lQUnk0bW41UWlCQWVBWWdFVkhUZUdHd2Z4V2lBTTFoNnFHOEplcU43M21WYjkybG5LVitENm4xUStiek1hZmhDZ2NqMXAyN1pTb3BJN3BVajhrUkxSU0pwb0VmYVpGTDdmeTBNYWtQM1BHbTRNdWxqZGVjZHpsMTZEc3lsMDVTNjJwYkxoR2RXZUVWVHNlYngrR3FsaHdBbHdhK0NTRnZEelhtZk84SmZOTXhPOStIWnJsc25VU2w5VFgrYmpQRUpOQkpNSVpTcE9iNFhXa3ZmV0ZCWThNMlVxdlZHclpxTER3OUthd3hCOFhubmFjVEZOMzZCUUIxWFM3QjliUXNqeEtDSzF2a21UbFlIYUppYmRCU0x6d0dJYnFWaThONUc5cFZVOG03a28xMzZUMS9RZjhibTluU0NSMm1Obldya2s0QmF5VlMwQjE0VG95OU1TcTVVQWFTVytNcCtUZEpsQ0c1ZlBUbG1QZWx1cUVwRU5hRjJRaWZDTkhwb2hxVERPK1N4NHZYTWVVY0FyVG5wUjJzcUs4dlhKVnllbUhDT0FGSWI3MHdZaDNQZk5YY1c4cUxRMUs1MEExTzYzUjVPcEUwaUVPbW9ndVpwQUFVQmgvenpkSURPTnNBWGt1WXlZbjdISTlQeFQyMnE5WjFoam4xTlkyVUMzdFp0NGNONXZ2UlNDcjNBMUkzaWo4ZGZ3Mi9JUVJxaFN6Q0l2NXV6dGlMa1hDdm4rZk9idFROY29yOXA3V2FDeGZnUlNTZDZXVUlER2lLeVZOeTJWbmRrZElFTDNxODhGcmZrSlN0SUFlNHRJSlRSUnNSVHNPYlVGSUwvMmNhL2RGeS9CQzJBWEMzR0xuZVZaSlJGZnZ0Nk1XMGV3Z1ZlYTF6Q2ZHaUYrWmxUeE1pQ2JCVStZc3Q0YmRsTWVsdlc4WWNnWDRUcjhtQStiRzJQZHIzQjE1bWJtbmlRb3pjbWhoc2toa1BCT2t2OXdhSEp4OXpXUUdQQmtReVg2QWlGTVpCbVl1Z1kreU9ZcXA1anZ2c2tPVXpYQ0tCS2NwU0c0MUdIRCtieGxYRDJxY21EdWRsOXNqQlBZa0dFY0QwR0s0NEdSQ2oyUHJ5czliWUhDdnBQY04wVjNSMzVWQXp6NzU2S2ZVakdZMnJYOENzRktvdEt6anJUZkJVQkZ5dERBdzUrTWtuM0lQNEprcnl2ZUZ1QVR5ZmN1NUE2Yzl4TW5iYjlQTHM1OUpRS0YrZVN5NzRwY3pKa2NPS1BVNHlmOEhQaEdnVVc1MTErYVBxZWtnZW1FOWo2dnNrc3ZQR3BDVG5CTzJWdjhESnJXSnQrNnZqNjVrSlhhS2RFODVtYitzU20wcmc1dGtrR1prK1FRWDN0MHZKTm1hRzB4bURhR1JNV2dxaEUzbGczY0xFMVNtNjZMOEJIMUxMZUMzV1pjeXNCd2hDNGRsc044akpGYlZyb1M5VDZtSENRcTBhREd3dTFtQUE2emFxV0pnSHkzak42UFYxeHBLemRaTFY3cHZNQ2JFTTMwQ0U0L3kyQzFBN1ZzVFJ6ZGdDU00rN3Y0L2pJdzFPaVVad2xrMU9vWEY4MUxFVElWL2plLy9mNmptUG5BNGJWVjU5eU9mRnJuYUkwdFFrclNqYi9MUG0zZ3VZN3kxNEt1VE9USnVBZmlPeUplVnplSjJDNUY1STVYRW5BZE9YTFdoM3U0aVFENFBqWVVYYmJjMHduMG5QS2ZtRktFTkdYVW9HMGxKSy8xNThJUTZOWEFUd0EvaG05R0tnSjlrWjZwbGZrRXVZWnhDWW1tdW1DK1NVWXlhd3YzNWxJMjNzOU40QmNpbTRjQTJXYnJQNi82N0dWTGNuZXdFUU9JNklxM2RhNWpnWHphQ3A5bDFNRkI2UHNIWHBZNlM5ZzNpV25CNGZRK0pIaHJvS1RQamdMMWRHWUtKL25WU0xxNWx6QTFiWk1vVVdEZ1dtOXQrVUNEajlNSXZjQVI0N05hMmprbUpVNTVnNDljOFVvSmhxOHV6bUdvZHlIdWFWL1ROMEd1RDNkVU0rNnd4MEpyTnBTNitIUFp5VHNvaDBCYTJielZteWVMbWw0RXA0V1VCNmszTmVjUGtFc2lud1dYdnpobm44YTh0aG40SFRLU0tjTnpuVFBOM0VmeXIzVFdzSm9rZ2x2TnFLNDgxK3ZDTEFZWDZ1VXlGV0FKUTVvKytacUxvOTZPd24yTmZPUGFXNG9BQ3g3ZUs5d3RpS0tEL1AwY210anFnSlZybG5oYTZvVVBYbHdhQUpqZExTRTlqVUtlWDFDNlk2RS9vYnZrTm9iM2pzWU1aaEUwRFQ3dlVtTUVrdGNzVmRjSXFUb3pFUkFud0h2bUlhd1BVbE8vMmpNYk5rZjlPOGhSSjdFbEwxQTg4amVsa1c0SDM1NktQTkREaS8yaC9HRlZGQUEyWFdsWHkzLzN6TWxWUitwaWl5WVVpVWVEVGVHUCsvSFZmZklCaVh0dHphZ2RCa1lSWGNBZ1RPWXMyeFo5Ty9tQnhlWGZmMXREREE5WDJqQnFPbmRET1FEZzJBeld5NHpFUHVQOWhWTTQ0cEJzUnIyTTFuYUJ5UWdGODZCeTN5NjdvakVKTHpjRlY5RzN0WEFKc2VDU0xJLzZSbnpoalBtd2J5b0V2aWhXb3F6MjIraWhBeldsUXdWU2Z4dXN2WE1rajl4MFFHeG1wUTRHZEFINlRzZGtsbW16a3dhT3BIcFRuV0hVMVhSbUxIVG1kdGFUV1B5VUc2L0tSVDRjWXQ1YTI1aHpud05KdzgwYUJIcUl5dXNnai8wYWpOY3k3L3lZY0daUDlLWE1DVDlQMGkwMDAwUjZtSWxLQVpvbG4wVzM4Y3dJZzZ1NVpOT0N1U3FsZGlURlRhbG5JZHFWUU5XNEFvZkFqbnVwelFxRC9kRTJpdmJzalpqZ1R0NnZIUWc3WWZTZFltT3N1THl3SjFPclF2T2doQnJ3UTBRK1QzT2I5NjhtSmtXcjJ1OSs2a3FsTFgwL2ZDLzJZTnhwT0QwSmlkaEpmRUI2ZVV4L3gya2hzNUhvaml3SjBCTkh4OGlUUWZDQVZzc1YrWkd1S3g5eXZBUGJTUFpTbE5NWVFYR3J0Z0pTcUFJcGxaZ0NoR0s2MUFIR0F6WldpdzVWZ2xORXdZOUpUeU1TQUN5Y1g5alg1NlVzQU5nWks3L2VidlhpYVdHV2dWVU1sV0JLcUg0SnlJOE40TjZxUWNiR01LcFZOVmpxN0J4c2oycjZHOUU3QW1kZVkwWVJZK0FCMGk2ekVBQm1OWmRwUUVCNzlPRzR6U0toNFVSUGl4ZXVla0ZCb0dwc0YrQkpXbjd1ems4REowT3cydHJQRDNXL3VHVU90aldsSUx4OGtBc3VqZTVzenRtK1RxQnZHWDl0VzBPZ3FHVGwyMzVXNHNuL3Y4UEU0UXBUQzhPZ1lBOG8rcEMwM3BuUVVOdEFVZmdaRVlkdHExUnFBdHZSVjlXdldHNjdFNUIyVlJMMjdSc2ZFTWEvT0pVaWdwU1RrcmNrRG9USzJYZ0FWUkFtSXlYODRzaWVYSDB2Mnk1U0loUWlUbDVhN0gzclRQZHlBYnFwZGluOG9sbThSa21GS2NnajJzZk1mM3JOcWpSeUlnYWYwNUVHSjgzNExoWEdIWVVTeCt0NGtDdjV0bkZYU2JIcnZ3Z3RNMVRCS1p5czlVamFsSW9yeG41cHRjQlBOU0xqR2l0MEZ0cFd1eXdrdDdDWCtMclQ2ems4bjM4NDBJWjIzTVkxYTFiVkczVWZUaWhyMlljMC96UDdSVVpmSEFzOXU4anhza044LzZEOEl4eUhIT2c1cVJWQjVGbUJhdHJJRGY0NnVadG9FSWxRTGJpWnpZajh6YUplZmpqQnFSdkR3aW9TY1REY2FsUlhRNEhJS1diR21WREU4ZXcwbktSR1Z2MzlweGlQbk94anJBZU5HUU9wZTVLL3p2TEpSVmphNUExanRad0M0citZVUR3Vll2Q3R6endEeUFrYU9PWGtWb2ZGamQ4cW1yQjBrblZHekNoMEJMb3BtQ0RHQTNhS2pyWndtQ0VZYlJTcHIzd1MrV0tJbFc1Ymh1ZE9jTUZqS0laN1RqWU5ZNURFRzBoUWEyQWhnRG43RlRkeEh1YW43amNYdzNYem5lVkxlTTdEcW5VRnIvUURnbWJiU2NiSDRXZ2ppTGFkTXBhSE50V1p5d2h6OC94NDRBdk40blFkdGNaWTJZZk5ldkNCbmQzTDl6T2NiTkZQVW9Zc2Y4YXU3cHBvT0NGMzRNcHc5OEg2aXF3UVpOeXBGYWxPMU5DTC9QTXZCMzdhU1RNSHd4MHFLMTUyZjcyV1VGVjBRaXJrUy9qOU43UG1PSHEwcHdvZG1aUTFGc3o3TDlFUnBRVUlEdFd5VE1zSHQ5a1pNTXVjbXhPK0JURU5hRVdyUWZyMDhiVUF1WXNzWFFWK0M5QnFneC9pT0l2NnI5VFFiV25ac1dhbmRHYXNHS0dvWTNFZVFGNVU1aU9ZT1hDdmhNcFRONHJJNVpjbHVFVUNWcU02anRoUGJ2SGdQNWZEUXRmZHJOSGl4ZUR4RDEwdkVjNmJUZXFKUmxCcDlUdjIwRnJheWNtL2FzZHhHbWlnUGJ3MGljd05VY08vZWo4NFp4Z0xYY2ZoL3JRY3A3L1plWGtjNWhIMUc2K1loWHZVaHcyRjZ1dm1nNzVRSDgzenord2NTUmVGemtub2pzRGZ3VHdEZ2E5ZEgrK3hBRWdpWHpRL1lZQ1dGbVZpODkxZUxkNGd1MlJEbXlFWmZsV2pBWDkxY0d1QnlTT010VVNIa3ZoUC9aVFRhYzY1M05qalR5dy84dzZlelYwamU1M3g3ZEVuZnZrT3dPR3pSOWtuUEFFeGM3ajAxVW1LcWp1dEt5cm1RdEhtSjl0WEZWMXZQWndERkdjZlJHQ0tsUHdmT3pGQllzdk9zOUsxanV2bmU1ZjRMV04vRTBGMkM0RzQvU3k5K0g0eUFtS3pmbUVEdEdEOHlpQTh3K0VIVjVVTENNMlljOHQ0NlQxVXBDNThiK2xFN3EyQnpEUVc4U0ZWQnJzbkNPWEpZR1RjWHNxaSt2ZlN5M0liZW5nUlZwOWliQStsbWl6WnhEU2R4RHlYYjFpSUdaZm1vOGN5MkVwRWMwbHh3d1JVZEFoak96MjhSZ1packdHQ0ZXeXd1Q2JJVlNRUzJVMnhFUGJ1YjZtOHlzc3dPbHR0K2o3cDF6Mjk4M3JyUmU2VndFTGpWMkNrSUkxRCszVU5EZHdpZzkvUXdFZ1FtdmI4UTM5Vmp1MllrbTYrdkdwNXh4TUg3K3MwV0RSZTByMGpGTk04YUExNEx0L053WWtkM1BuNWJNaGRzODBUZ1B3T1o1R0RWUmZ0WDVRM0NkdzB5ZUJ5aFJHT2ZFOEFQL2pKY1BuOS9YM3p4Z2g4eFFjdnFUUktZdDZvSnRzNnVZblo4bTRGa1BMdlJjc3JIaVNPMFlCOWJna2VOSHlZTTUrWE12ejc3bllFYVEyc241NEY2MWhuamNTSGVWOUFDZTl6ZjZGQnR4dTkrVHR0djZrYldNMi9HMmtFRkc5Wkg1dTJzR0JpeTVEOVhPMlUxM3p5SGQvMzY4Uzl0OXd1djRUOUNtN29iSFlYUTF4dUpXTzRYb0Rwc0tEcFBFb0taeFBCamtxU05hUTl4aDVKOEIvUUo3MHJpbFlCSXZKWVZrN0pOTnJJMWtXU3hGakdFTjBvTmhQcTd6R0JzWUxEUThZOGU3MTNGcEhXNUhSZ1d4bXU5U0ZoblIyZ2JOYnNJQVpFRkN5dEQrNjhzQmlGVVo0WVVCVGRtQU1VRDNaQUZQQWJacERobmpNS3puUlZnWXlSK29yT2VqYXo2L1A5TWZkYjBmd1BnSHc3Y3VORHNSNVI4Zjg4OFZ0N3pQTDhybjY0eGZ0cnA3b3RTaXk1Q1pxSE8wSHpGUGNDdENiRHF3SW1SRzRibnJNVytqTzNoOWhyakdGTnJwMnllbjFyQjVDcEF1NjM5UERqUnpyMHNOc2p4Ny9OUmpJbTNlZ2ZvOUdlOUFmYXpVMmNQbTZITkpYVTJoWXJUOG0rYWJ2SWdtcjBDR1ZUb25INSt6dEFxR0ZIZjRoNUE1d2t5NDVrNmF4MWRoU2Y4emc3RVpSWUdKdnR3MEt6NmxqQUJ3NFdCTUxIcWhtNGcveVVRVHJoU1grRXVPeW5WNGVMaVJBRVkxUDl2RUdBbjcrdUl5TExwVXBTTlpXWTcraHNCUGJKR2RqZFZKMzRLZDJmaGFjQWlhbnVPVWlXY2pXN3FNRWpwK2xvTW9Yb0IyMkY5RXcweVBoSlBDS0RtNUtSMUcrV0ViZngzMVM1S2Z5dVBPRHhZSWNrQmM4a01CUHU5T2k3Mm9JZVBDOUI2NUMxMFVnR2t5dkJyYU1oUFpCQkxRMTlRNlNvYm9Ba08vUUU0a2NlelNhakFUNWZLUUlYSW5OWmoydnpDVTg4Y3F6TUY3MWl2L3RwS0VCN0hyOUVLb2ZmNWJQM2pmVDN1cktKMk0wQVY1TktGQjVEN2h3dy9HWU15OG9xR1UzVStFZHk4Z0hoNWp5VGJIZm1qdmt2dEdvWXpDMXUxVTEwZW13VGZocUVDYzZsaFZoL1FISTFhMytCK2dnd1pMTnBFMEZvWFV3S0ZxdGVCQ2pRZ1ptVVBwOWw2Yyt3a2hnSHVka2c5L3hPc0gxb3Q3SHdCUmY3RnpqWlExLzZYWW9EdmxRV0JtRnRTZjhreUViYkJRMk1VQmNMY1ozYWlNclJoakg3R2NTR0w1VlBmbGdWekx3OGNHbDZYRzdIaUh1NWI2WGxnMS92YkQzdEFPeGV1S3BLb1BZbW9MaTRmRUlmYWFOMGJBc3QvMVkyYlR4NmJGdmJkZjFnYlBSSFBSa1pON0RheDFhUXRSRUR6UC8xSjZhYWhJVnVHMFRZbmpjRDRzWVIvMjlKcThwbW84Z1F2YkdKWGo5L2RLZ29UR3RNWDY2QnRnbDJabmVRbTIxWTcvVm1zdC93RGl4OFlLdTROT25UZDIvWG9yUmFyUit2NXp2M0VpVTZTNFZYZDN6VlBiVEM4MDNwMW9MaTlFUmRKZkQzdDVlbTV2WVBUVWIzUXJocEdTQk4ycEp3Qi9Tem9aQWU1WjhtdUZwK0N6U0grVll1Q0R6bXZyK2wyUlBueHFRNnJtMTczdEtvOTVNb24xcmcyZUNJY0o2S0g1ODhjRzF1RWhDRGdLSmdRQml0WnFtd0Z5NzZNY1lyOUtleE1xTG1Nd2k0L0w3aHRaTWpXOUlMUDZreXVKN2hwdlZBK3RldTNUUUhtTEFFUTV2a3hWSDI5eVJabTBlaURwUjdjRFl5ZnJ0UFIvTFpqbWp3UGUyR0ZnbEREOUxTUUcwaGx0QVM5c0dGSlB3OW5DSStXRmJEYjlROEFuNnR3TDVGU1k0SFRuRWtWVnNCaHV0MlcxOXZvMFdjM2NNTHo2TXJWTjVaK2hKR0o1N1lqNDVBSUoxdWxHaHMybHJEN2d2SEpsYWZNZVdzN3ZCdStGVm5zWEZ6K1NHcDRYYjFlbmJBNndRZjNha0dDVVJCcDhSV1RSekUzZ3Z6TmV2dnVxTnBxWmVIbCtCeEk5Z0tiSUlJODRNMW9vOHF1YnlhWEJSQVdGY2xJeE9kNkNaVnQxVnA4WktCUWZ3OTR1T1IxT0lsNTBKZmFYYStNN1Q3c2I3YkVWWDdrYnA0clV2OGhYcGhnY1FkakZqUGVLRGN4OE9MVUtQbUN5QU0zZnBKR2ZqUEtzNno3a3oxM2hrOGdvdGVNUjZuL0NtL1FWNFpURmR4RGhYL2cyK2JJQ0NsaHNMRTJrdDc5ZmtGUDFJTzVha0M1ZnBwaUVoQkVDaEZJeEJmaW9EeDh6VlpLSWpHWjlhY3R0bm44YzNSOXpaelJNdzl6WnJpWThaUXZTWXF1dFJZSzMyTThHSHlnUllyR0I3U3NING1PNVVzeExndWRURGlDY3ArT20vZUQ5WnFwVW41K0xPTDlYUDI3RnJieE11VndoTlZzSDVTL1pCUUhPZkhweEd0eE43dDdWOTJwNDZsQVVIQTN4MWN3bGN1MkpnMFI0ZWVKUXgyOXdTNHpjS2UrL3oxV3I3L2MySHdZdld0dE4zVk5pbFhyQWVyWHh1QXdzQy9zeXRLOXFBbjRySE5GUVVzbkRnOFRudUVKaUl1eU45ZDcrcEV0cHFXTWlKbHhHa1Y2RTkxSkpiOTlINWF0Tno3Z0pZKzFHMk1nT0JEUUhTK2VrRlU4OFpIM0dkRm1ncy9BL1o5NUdSTE02SFcxYzl1ZjNGTmZmeFRaNkJhOGZPMEhCRkpuMjdaOGFGdFlMYUZZVEsxSUJMekh3VHdDYjlaaG1pZ0VTQ3M1bzBjQXJBVHRXNUNoV2RtSm85UlJPTmx5TmlBRncyZDVaNWpSclFRVzk2MWh6cmovZllQZjhUbThOYVorVWtsd3k4a2Rzem5mcXVZZFNSeW9ueE5aR2M0cVZGdndWNElKOXdLN3A5Nm5tWUM0UXdrbzlpdVRETUhzZ3ZKS3VaMnkyUjBOdFFmamJKWVB4TytkeGFDMzRSVUk1eW8yS1R6VGUxMWtEaytxN08zMXJxVnRiaERRaFVPbTBkb0hPUEFKM0hIQVVDWFpFQ1laMURwVE9mN3dESWlqRWVRTW45R2FTZjRWN3FjSVVkM2xJR3lWU2FpdUx3WGh0M0VOT1ZXd2tXRm9XWnd3NkxIU3IxaTJPdE9jUklPemN4QUg3R2VsWmY4RG9FcGo3OGtDOEZCOHhnL2oyU3B1SjJzNENTcDgzZFBKenNkNXVsMW1yOUZHRjhFZm9DWUVscVJ1anRGSWJCb1Z4MTV6Q3ptc2p4ODVKSlFQYW4vUkcwYzZKWVdzcVlsVGIwNTZOYjJid2hwRU83UWFEb1J6UVBTYVZ0QXlKVG1LaGphN05mTmlSdURVemROTnJQWGc3ejU5UVlXY0JkbU9XcElWSGdWM0xpbCtGSUtiMTdmaGhERkczclBUKzR5SVlkNWhMK0tDd2R2QnhNRHBKdGc5K1JtK1dxejBNeEFYaG4xeXlJcFdjb0l4YXZRZHNmbVJycXNZTW82MHpDS2dJZW9oQ1dZMmp1eUJUN0NjUmpVa3kvR1k0Vy82RWhsWkQxVjZRemtqQVRRMElZZzdFc3BoS3Y4TVBuY0pBK0hTbDNmaE1MQlpMRWFoOVBrK0NCU0tzQlZ1am96M3lrZlpoN0YwS1JxaW8ySVNUN3I5eWdOSjZjZjFhb1F2WWV0SnhPeDlLZzBLRWdRamFEVEhrcWZGRE9XQW5YdjFsMk5XcWIzb1BzZnRqZkZneVdFdnZFS251U2QzRU9XZUhaQjJTNzhlRWFYOEZpalZON2tjSzhQYXpTT0w4Y0Ixb0g2ekpXYmhXYnRhRFdEaVpYYUxwV2lGcWVvWmJ2TzlWdWdvcy9XZ0JKQnA5c3F5c1J4S0E5R1JuNlVQWUZFM0VJK05meTJ0QkFHck8zSWVqaytrWjRtYU9FY3RtUzNFM2syVTIxNkxXbVh4ZFd2Qks1ajNYazFvSlRzZnlpcGlhbWUxdFR0c0hDSXpOeE9kZmJ1bXBKck13MXlYZUJPQzFDVCtiemFOZlR2QURRZnN6ZkhrTmdzRDF0S1BpUzRvalJJNUNBS1RvNmR1N0liMENSSEdkRisyRXF3djgyZGtLTnF2eFFhR0tYUjMwOERIV0txenZrdFFzblZvS1pxblUzTmR0U05XNUZJYmNvYnpPVnlqSlBZOXZudnFhM01XZWRtNmdNS0x6eGp4REpPbmd0WGVRRHoyekovOUZUa3ZoNlkvbTJZcVUzMENWMllONW02SlVKeTNlR21MMUI4MFovY2N2NWlIZUxWeEVybEFuWDBxa3g2S1hpaFVNRHoyc2hNcWNLQTZvVDFyOWxGbjVoeDE1TUcrYmtyYnN0dzJyeGdrbVB2cEtKbmFydHRObGVKaDhWVjYydjVTWWNpbE1qeXZzSVhITGFZQU5jU2p5NlU0bmlEbDRDZ2hNMitWSmt5YWEvRFZTVDdVNGVweHV0ZlFNY1RsUDBYR1JIVjdYYklMSm96ck5MRDFLeGh0WWpEbzJSajNiVDZqdUVGNnJySmxyRmpqMmhsMDh5SEdCcmdwOVl1eldLbGZ2WG9JNGJITHZhQmJYdkV1QU1wMWdRUjYyOE9hN0ErSGxxNEV4dG9MMTB5L3NIRTR4Vlh0amUwRkhOZDhlemx5UDJqVXhxQWJHOVBlR3NOMnE1YnNTek84Tk4wSkdJU0RsblhGaVQzWDVLR09GMUZiaW9hZVo3emh2eC93TjZCYWR6aWgvcEZ0NXkrYXVoOENvWUZodzBhajU0VnltQUJnS2dXNzVHYVp3cjZHWTdjR05SdEhwSmMrZDNTRXluUE5yZ2RpTjRnVWxjQktvT2xlZkFjalpBYkNlZmhTUm5UU2lZSlMxMVdpaG1rcmlOM3dTNEw3bDJ2MlpyVUJzVmhyOWYwNUx5V0h5WVA0ZUlMK0VqNkJ2N2haQWtnS3hrdUlMZGdvVjR1U2ZNd1l6ekxmT0trS1VJWUZZNS9hM2x3ejQzczM2S09NeTlFRmN5WjlzUmlHU1hHelJMK002VWdUMWIwWFRweU5VZ1NRVWlXR04wN2FRSnZPZStGVjNSdnQ2dkpzU3NZOGlWUXhnQVJNN0NZbkF6V0ZGclRTaGtSOW5ESU8vSFZheC9idms1OUExRU1pR2liTi9FNWRnc1BnVllRQlhOeGlCNlZ4ZWppcjl4R2lZNXRUZ0N3UG9vTTAzWUpRSmlKRnZEKzVHNko0d1VtNjcxeXRRSGVYaHg1T1dzR1pZOTB0ZkhEdjI4UFJzeUJheWE2dUFHR1prQzFYZEJGWkJ0Zm85T2tCY0tEbDJ1cnNZZWlURXNIeXIzNWlJM3V2ZkRDUWEyZ1J1bTVQTEZqTEZ5K3BPYllhVW9qY2lRYzBFZVNldmNoTndjRlNkWTJWNFZNU0RsK056Zk1td1Nic05HSjZhSnNiYVBPbnpoMkxRQU9VRzhuTjN0L202SWNPS2FsUjdRRUdxZGIvYS81UXVQME9mWXBTeER6NE5GU2FHY0dJaTVTRUtuMFZLdXBCMVdRMlBMdDBVbVgyZHlYelZBQlRwUENGRjduOFdrMzArc3BiaEZqWFBrZlFSZm5zaXBkVFpPdStiQmYwdEZXVExLTENyUStjM0VQUVNPT1Q5d2ZNUkd1clJmbVNtZWxXaWxhS2YvWEtOeEFpVFRVbHhERGpNcFVaWVlkbFhPNTc5V2NTZjN6RGlFQW5OOUgrb3JHTGxJSW1DdXlja0ZaUkNyNW8xTW5OMFNuc0xqcEhKQnluU0lwcGk1dUJZRmZMN1JEWElJQUN3c25Tbm5pYTQ3d2tMZ1puaHdJS29IOEpFTzVZN0V4bDNOdSszcDdNYVJ6aUY2SWl6cnh4R29BVVVFb0NQbmNsVTI3K0MwQmRCWHhRd2VjYSthQytXcFVSMmhGbFNqNCtUdGQwSkJnU0E1K0FnSUNBZ0lDQTRuenNiNndBa29xcjJMSktnVTlyVForaWhoQ3ZQYnUxbWFNSTZlYk1GR0dtVUFSS0Vnek0reHNqZzN2MTRyREZVL2tyT2RZQTRsajdJeHdHNkRFQ05yQmxkUFcvS2ZEL0tGTU0vakRIUUovSTFreDh1NXJTSkErMG1nSmszWU9IeUVUYnhKeHdLVzI1aVhlb0Nja1h3eVRWeHUyOE9SRWltUkFhNGFBZHBUOVkzMi9UQVgyL1R6YStxeWZzMit2Ny91VFAyZEVIM2UwdS9mODIxLzM5UGw5dnEzL3Y5ck9mVlJmUDhQcDhQNGZXaWI5dHJYMmZaby92KzNoL2IwUWY4UHNyZjMvY1c3OXZVbC9EMW83N1BjZS9iVFBEK3o2Smo5djBxbS9WWFA3UHNSUDJmWTIvcTNoLzIvWEMvcyt3UzM2ZlJiKzMwNzc2ZnNGL3FvYlhQZ2sxcnM5bG5hTmZ3am1iU29MOWNQU3NxOWtHRjBzaU10aEREdlpZb2x5MDFXd2JZVDZkRnB4U1JMMUJVdTVGdVBLRUZoR0lkaCtrTFJBUmxXMkRjTGh1M1Axd01yZ00wWk1XaGxuYWw1bWFjSE5ZWFNld1p4cUYydjQ0NzFyVXZ1OU1nbm5tWUF3bVNCcmszOENIaTB1bU02ajVHaGRrSG94eCtZMHFFT1AyL052SGdFOXVuSGFYazRjd2ZJT2UranQ2aEpsWUZ0anRwcDcyYzczNzdLNHU5Yk5RcE90aGRsVmhhVXpNQnBTYWFuQng0aFlOZ1k4SWd5NEhETm1mbzhNeXRkZS9lb25NUnA3RytkYjFYaFh6OTllU3pIcE00aWVXRzhUQ0dLWmZ0eVA0eG0rblZ6MVhkSUFvUURPYWNpb2JzR2NVTlpPMDZPZGtDWGpab09Zd2ZSY2Fxb0k0MnowTGlyVFhSODlQQjRpQlBjQkFmVTUzTDE4bkFsSkRjT2VveXRtZkRCaGVkWlcvc3pqaHNkTnNSbmNuWHJZZmlQOHN4MVRTMnZVZFFFQzFKYTY2b2NObGNwUXZDRnV1aHRXYWJLSVJoUXRVL2kyOEJUZlMyVUViSEhxWFVKWWRDdTQ3TUZIbDEvbnljUXF6Ukc2U0c5V250bm1yWlZpOUg3S1JrTVdTdlpPdTFXM1M4MDU4VEJKT1F3Z2lyZk9CVzFaekQ4dkZKQy92QzdUVVpTc3gyMzlwek9xWDF3eDQ2RGY0YmNvS0h6SnJSMStDdG0xZ0wzNEpZN0VhVTJMd29IR1UxdDhNNC9ubkJnbk04Zmg3U1Fldm1rejhVT290Vi83NXZ1MGpqWFNiUkdDSy9lMnRMY2t1LzB6MWZkelhjc0R0N2htSU9IZ3JnTlMyczZudGtKM1RucHBvbVIxaG42R0lSR2FVQnc5eHA5aFBTU3pTbEFKM09GOUhMd3Ixc0RicU5OdGh3OEgrUDhNWnhXd1VwNWZzdHpxZUpQNlZuMTQvSWt6bTBFUzZjZFdJMVRQY3kya1l0U0NxdCtoZlF4UXRGU0JEeTJaeHdQTVVjSTBTMi9LNUZlVWd6Wnh5NEVqeFU0bjdyUEtBZVhFSTM2Y3dHOGFqOG9iODByMTBhb3F3SmtuOW92b0JLd011dlZOK0tmOWh3Smx4VDNjMThqVDhCU0YrcGxJWkhXbVdlUGpQNkpMdjdvRmtqbTJZU2xlSjh6T0pvVTNNSTNEWWhXTmxWaFFUYVc4S1NwVE1WMmdEVmJheUZENVF0Ri91ZWpxbU1HbHZKZ1p5U1Qzc1pLdjJ4ZXprRDdzUDQxakpTcHNuL3IvL2Uzd2w0bnBRTzV5Q3Jsa1lsNTFQcDlDbWE5S21sdU40OWdMeUJ6bGpYTm5iRjIzTWVRM0FaVzRPdm5QbERtNlBoOU5pamUvYVFPRnNUZDlibUZpWm1ERDBKaWVGN3pFbUZERjJqVHkyeWMyRCs4NVhDMksyZlVMems1OS8xRjUwTTVsMmhLR04zWEkra2g0Q2NDSGFTTGdqayt4QXVzNU5PcERTNEVpK0NKUzhzTURWc0Z2WC9Eb0RkK1BkaG1IeEU4Y1RQdmNQUU44QnZ4ZFFnU2NBYWtET1ZzcHM5QTdDbXhJQWRSUEc3MU9LWUhBUHZpTG9Hd3BPN2dSTkNPS0dQZ0hpbHIxaVNpWTBlS25HZHBoUldhdjNyejViNXV2aXEwSlVJdVdqc1pldDByWldtTEh1TVp6bDJycTk5VzlXVTNLRGRlek5ycnh4MTJUeWQrYlUrRXdsbjVCVjdEK3h4NVdnRWwyMTV2eWsxTDVLSEh3YzVBZklnd2FFVzNrM3JOaXhqNWtXUk5XU2I1azVqeE54NkNBdlZvMmF1b3BhK1cyU3BoTHVhMzNOaDBLZERNR1RMNkZoaGFVUnZsWHhQcTV2UkF6MURJUUNJQ2twWkZQWXQzTUEwR3RMZURqRUkxenAxZXk2bnIyQXVxZkFzbkVleVVFK0dkSHFLM29vSUJQUHJESzVmak5ueHpsc1VQdkQxS3h0ZlhBd1A4VUdtWVM0WUk4MW9BVE9kbWx6TTh0T0pzejhOYUhOMi90MGI2aFhEVDhVK0VQdEQrSWVqdCthS3RXSVNTeVBxdEN1OXJlQTlYMjRvR0laZ0pGajh1cUxlQzBHQ1Z2ZW5HTHVKMHNjQ2pwRUJkekxHTHJLb0FmZ1pRbm1Zb2UvVjBVZjZNM09QUTlNd0xGcWZzMVR2Q010d2psbHQ0OFp3WnRrSmFrcjRqU0duMUdoaGJzVmVCenMzc1dvcldrcytWUndCS0JFeVFvM21jcG5zNzF4L2ZLcXdXQjBjS0ptL2wxck1jcFZnMHZ2NXJEOU5xbjM0eXJsZ3VyZ295KzZqL0VJamQyazdoQUhDckd1TEVrV1hlOVVIVWNiYmZ6MlZnLzdJMGRKMWFOZkpqNGJPc0Z2Mis4VmQ4Nml1WlIrQ1RmMlpyTXN3U1RURS9SZ2pXQ28vdFlscFdJL1VVaERlcUtCVXFpeGt3YTB4Qy9lMVpOL3B4Z0NwYlVpRTNQdDJLTXpwd3ZTcG9RMEdKaVRoYTBlS083UldGVDlzSkxWYWZMWGZTbUdyTG05R01KV1JWR2pNRDNaY2VPRGtDdDZDM043VW9oODBVRS9sU0lUUk91ck4rbGwyWDd2VWhMaHZSSUNIb1Bmbko2Zk5DNDJOV3lYbTVadk45cUh0S1pVT0Z3RzBNOTVWbDdORlV0VkpDWGxmSHZpd1NGNkFlSXZKaEtoRnJzUzJYbXMyTGVGN2Nya1hUZ05qbVpxdU9lNE00STAydnI5bG12Q1NxTlE1Nmc0YStEOEhaK0xwcStKdUpOYkRTSlNEWjhQNENrdzRaRFpQU1NNdExWdG5qdWxtOGRCMzVNZ1kvSUVnOXluS0l6aWFCL2xBeXhkZDh5cWc2TE9uOUxISnVNYUkzb3MvMWpuWFdldmtOQlR4UTJTNUtLUFh3VkdyU3Y4dDFFTmREUnp4c0ppRjB0aklhMHlXZEtMSFhOWTUwUFUyOFRLd3RNelhNK1lTYWJJYlpMTlBlSVlRV1dMOUZ3QjE1aFBBZkg2dVZjRWk4U3M3dzJsUE5rMFd3Z3A4M3RjSWtTZitJZGl3VEN2ME1zR1hUN0pNRzFYMVFiaGN5Z2FDZlhjQ3pyTWQ5TStDU212MzRhY285Z3FaY3VRdEhORVdzVkZjK09vTmVFZWdBYklEaVA3NEVWL05Cbi9mWmRTUHZ0MnA2SXVoSXR1dk9aVk9PUmVRZUJuSmJTYUVCbGJOK3oxUTJjQXMzWUEwN3d5M0NOdStiNVhCQktUMGIvWk9LL0VQQ2kwcUZHdHNkMzRXM3IwTnZRc2lyaFRLbVlRSDVYbVQ2NUpVZzlWWkt0R29HN1BNTW5iL3VZMzBucW9ZUUd3TVZQY0FlN0k0WWdOdHVSQUdSR01uUW9qWTBjaXd3Um5EYXdhUWZiUGF6SlFHWitTU2dpMGx2WElGbkZsc0kyQ1dIWVlxZUV0bHdCeWxCME1iREl4K0w0MUY5bmkrMFJXRmNnYUpaUUMvVzF1ak80UU1teWNXQU5rcXFNSWw3M2lXcE1yL29EdjkxYUNxTmtkeUo3S3B3bjlXWmxQT3lBZlZkdk9NdTVHVzFDS2kwdUVNWE11ZTd0QlJhaUpFdXpTQWprWkt3WGVQVlFXWnpwTU91SzVIaG5VaUc2enpzVURyS3ZnZGdJNTBjZ3R2UW5aTkpwYzNuQnlXTlRIb1dyY2YwNThpbUJrcGpwL3A5YUtaUVYvSFNqRkJSV3k5UjJZVkdLR1NUblNqUXFwUGZkWGFzU2RRc29SeEN5dWc2L0F6eGhCSjJRVzR0Nk4yTG9RbncxaENLWVg0M09wRUJ2cmpuU1NLNW1LTHRFdDZoWTgvUEpWK1EvMkU4dzE2NTRrU0FldFFnMms0VnJrUjYzcVBCaTNIK3I4aGxuUTY5ZFRFM1BQc2xwU2IrVGIwRHlGVXY5T1FFWDI5ZUI2NEhOa0NPQVk3SFVJVUVFZVF4ZjV1eWZvVlg3cEs0SUtDSTdXSCtibGh3TVQ0TVYvckFCa2VUWUtzNUErS1k2SnRUdmkyUDZkTHY3TEJadTVqcWlVMjU3SWhEVGU1L3hSZ0dsV3JMSS9CbEhmUStIa0dtSE5PU0pzWXVqbUJEZjdTeGI5UW1PeHlYNGxjbzNqbVpZbXJMZDFSMDdyQkxIZ2R2VUd4Z0g0VmdiTDg3R0dMUXZNa1U5K0lRUTdZYVFJd3J4V1FneHh3SXRDTlFXc29TejNmdmFPM0hiNWx2NnhNZnRSOW43VDJSWTVnNEFPYmp0ZmRiWnV5aVU3MUJJalBvWVFNcVI5VndzOHFYSzdUOXhjZHhZRGdvaFB2dGs5c0VTeUc0Y0RiaEdsZ0p5TVNjTU1seE1ZekVIdll0L3RhZ2dWVGcxY2NkUDJBUHpwZ1Q3KysvVDBhYk0xb0lwSERIQWlXSzdqYy9YWFlIajhVL3J2VEE4MExSZDJITlczSjdPUld6NzZYZFpsZk9DcmlaQ0tSb0JsallpbGtVYVU5K3FtYnRuaDNxQVFUaWtTSFBycWpXRmVuRnpCVGlwMTZrd0pqeUdCQVJmcys3eXdlL2w5MWFHaTNZdVdVZWNaSTNpN1pLNzJzSmdlNWNLbDNvYW4yZU1LVGhXUC96d291clNwWGc0Uzl4L3VNQ1F0Wm1EdGJyb0JYamVaUkFxWEh6dmJUOVdMMU51VDhPVTF4blJrZTFvZ0kyMkVTNFVVbnhQUUtIcEZtR2JnVnNwUi9JQVNna282REIrTU5oQmNTYXVvWDU2VVBsM0plRFBjVFU2UlB1aW01ejhBdFNKMEpQRm5YK0hxUDlnYjBkbzFMSlcrR1p2RXBDS3VuZnkvbDJpZDF3a1c2YU8vMzdvRlJPcGw4ZGphNk9IeVB4WnEwdmpWNVQ4NGVBcVlqL3ZpeERqSnN1RDV0TU14bFo3TTNFZnNucjNJZkxuemxzTFdxWFV1MWJyMlVqTWprNFpJQWFvN2gvQmY1ZTZrb2hkME1pdU55c08zZW9yKzhqL2hVbi9DYUFUTHJnK2xhREdrMXFwRXhibFFERlRCZW90TUtOcVd5RFZlQVNVUFlOSEdycjE5WENOYWdpMDg0WW1IMVVqQ3huSEpjb1U3TlhGYTduNmJtVDVzVFZERjhHZ21pLzhzVno2anNBQTdvbGpidDJGY3BSSW1jREtmeTNMWnlYMVh3cXVxdjliNHJUUkE1Mm45cWVCNDdSeFoxWURiRC9abEdCaldFUElqSVBTbkRDL0F0SElaMnRXM0c2TDNwWUZlcVNTTmk1Z3FrSS9qZDNTTGM0ZW9nZ3ROMWRBT1pmeEhOb2tWMHRmR3ZDQWdTVXdMVzZIaVpxdW5nVTFwOExZTFpDdGpPaVRkZ09LK2VBK1FYZk43aXJsUm44Y1k3VTQzQnNCYTlQMVJPOTBVb2lBUk1zWTRic20xK3BFTjRrOGF5VEZicEFUMzBtaDl3YVFYNmdEV3dsU1JSdXdXTUFielJONXQvWklaNDNaRlJNUllJcWRGRUxuWUpSWEtWb0dhQ0wwNnRrQmpzNGNubE5hSVZFcXF4andRQ1dVUUw5aW01NUYreEx0U1Rld2VkdGxSKzhVd1ZzYTRCTGg3ZEhVczJtc3R2a0Y1Q0UrbUVhTkpRYTNtZmJNejJmTlhGZXBMeTIzN2hpWTRCaUtRNDR0MWhxbzh6UUwxZlpRZ21tcGNLUWF1MTM3cDhScFdkVEY4aWlCL2czYU5IcmdMc2FDYXVOMGRZT01lRHdNOERHeGNpUUl0VGtsSVZwYkRkWG1EZWdpVElGQWZVODVNT2h0RHdLV2JuSGR2NWgvQWNOQy9ZZUVvd3NPdllteXNYU2R2SW1yREtsank1L0tSalMxMWY4OS9aVDFibUFYdUgxendmUlJxNHJJOFNPSTBlUEZqQWs5L2VDdC94WHZrZTRvVGkwcnFkUll0MzhmbTdzeXdrbEdmdWErMlp6c0ptTHhsREs5b3RwRU9OcWNZS1dxYVAydEZMTnVHN3hEUVUvYzFIbUZCZTBIQmZ2WTFsTXVDa3pBODNhMUljbS9veGMxWTd0emhiRTltS3lzZXg0dFUrV1ZkMDlnWmkyRlVnRVUxSWJzN1FzVWR5ZXd6REVvcUpDNjU3b0dna0JiNzJLWE1IU1hrYWVXRkZ3cTRZVWJ4WVVDMjlSbFZ1dXNXeTZoL24rTVo1anFqOThaWEsrdmF3SExHM25Oa3ZzdlFQRHRkUzhuTkRsNDBrSWNKOUNaZGcrODJzU0FOWmsvSUdXaW42c3FBNHhsRXRBYmFsQkFYc01xN2tEdDA2ekppY1QvSFNoNGZhUWtRTEJLY1JJNnVJVUFGbDA1SGpLNDVwSlk1aUxXREVUd0FLZzlnckNsVnkxMXQ4QTgycEwyczRKZDVjYmdMeHdvMTV0MWpOeUM4UXJFb0NYWnZRYVZ0cDVxaUhmNzRsZkhxaXltdjJ3QjRkbUFJRXJPaGtxQzh2VzRVSmRIUjAzQ1FQSUphSjAzSzZ3L25kTW8xQzZsSGZabmJJaHNXei9tVUVWOFpKNGl0VVc3dG1kLzRlWjlYQXFzUCsrQTRHQjUwdHJSM2FtZ0FGVFNpN2F4UWJDM3g2RWpwdzlQTlB1K2dOQ2Evajl2S1U1SEt2NStRMVdwWHQ1dFFHK0dSNmg1cVFpL1JQNGY4QnpuYlAxSDdNZHBGTVI2Q3BGTUN6U3JoMDFPQm9ra3krS1BkNXlKZ1E2RnFxUEV4aWtxbVlIaDFONVpueWpmZE81Uk92ZWZnTmwweXh5eTljZmI1UDV1LzBBdDFzbTllQzNHeUJuY1JnNm41cVVtb3R5eFlseld1UTN6cGljMHZEOFpqa0lTeFN0ZVNaemFMZlc5SFFKdjZsbm9oVnpVV0Uvd1NzWlE0eS9qZ1NQM0dyQTBsTnJqRWpFYUNoTzEwTno5TUcyQzhsL0Y0UDhuUnlJaUVremZZVEVnMk5zZXBqaVQxU0J6SlJFNXRIeXlzOXlqUitDUiszenNVcjlueVhLdXQ2Y1VKaytzYTJCMmwzcUpWVkUwWmtUb0VjZ0pjWGhBcTlvSG1ramczQmc0VTlMaWRDZjBUMHVVcTBPNFgzdWJwYzR5MzZSWlVLOEZEd0tMeUhudElwL2lJai9sWUZWZk9wZXdmTDZRaFlVdnhiYnZTaTFQc1VVbm9FcVNEcThlR1BJUE9QTUhQSnJoMEJKRHVDMWlVVWZlbDdzcDNpZmxFbVFmek1qNmYxTitTSWhuU00rZUJ5NFJGaU1KWW9SMkJZM0NPR2ZlZk42MmlkTnFtOTB3MXlOSUY4aERxRk1GUmVvMUJYdk9BYVdwd2FzdUdEcWJ2NllpTzRrTnpteGJlWm5kZDlEOURReW5sZFRQQWFLTFc5VDFrcHBsOE1PMWNPcGNlZ3RaWlpjM0pvcFA0dURSU1hNb2pQbmpqempWOFdtVUFmeWtCTFdJeEl3ZkUxOHYrOTlwK0E4cGxOdzFVamQ3Tnh5MHhCK0RHRGkvYm5nQmtzVmJGbEd1QUcvaCtHNVZNYkhVSkIwY0F0TnBUT2JRSHZKY2VOczIxTmFMZ1FsbU10K2NEQVJSb2YreXVOTzU0NS84bkpFQlRrczR5T3J0TXhoeEdlYk54R01VK2FlN2NIZXZ2dkRYT21Pd2pVKzBXWlZqQ0hPUzNFM0hjYk5yQmhva2hNU1NxSWhiU0lFaTFWRnJVUWVJS3JvQ1daeHZmaU43T2xCNVJueTgwRCswSnVxa1liQ2pWeEpuS3plVXFGalNuWWRmVXVaU1o0YjFsVDBOamFwWGE1Y3dIZkZXZlhQbUk5WWNBMUZhcDRLQUZUOExyaGt1MUg1YnM3V3ZGdXlaVFpSSUNyUzJNRHp0bnN2eHNXNm9sa0REUVA1ei9GUGtNTlN3WXlTN0g2NVdrMStsWWVJd2xSMjdtZk5zQThyS3oyMm5iUkJXQWNWc3p1UkJOWlo1Tk91RnEvWGNuYVdJbmdJS1VGdW1QbXJsUEJFSHNWODUzRlBOKzU3cFpMdFJ0VW5DMU1RUDg4QWtidlAwUHNYQ0xxd1FxRzFsZ2oxK0hJSlpKdk5CaDU3RmhYbGNXVmgwMTNibmkvamtmZFFSWTlFZEo0YkRxVzk0WXlQcTM3emdCb1F2ZGVYSmVvWklIckZyTWxUYWxpV01EbGowTWVGeDJHRzgxM3ZJU1JHRytXbi9nY003NHRXMXk5NjNaK28zOVZ6Uzh6R1dvWXpjbjRLdXNEa1B5bXJ0Szd5SkQwUUEzNkNuZHArcGZtMmM3b3Bmbzg1clZ0bHp6NWN3LzNDSjBIbi9GUGE3enNxbU5MMWF4cEVZb1RHU3pCYU8rYU9aSVc0Zi9EanhjN0ZZd2VLTW41V21teUc3dDg1VTNSQjc1Z2g2SnM3WGs4aC84SkdtY0Z6eHNPRHRNNG50dHEzMEpZTE1zbHFjZEpzaVBQRytRVHRCbEJqTVVoeW9Gb1BQUVBkNHpuUUR0VXhISE9oSmFFNCtUODN3TU8xTUdzaGxqL2oxNHpiT3ZhRlJ4VWN2NWZBZnhVL2dKeFVySkRtVzQ4Q2pNaVNKQkw0QmU3YnBtMnVZU3JEME04d01rdXhTY3NPWmNVZDR0TXBnUFRyTTJaNlFoNytETmE4eDgvalVuYmwydDIvQXl5WmxSeGx4NmI4SlJjSnRId2RORjNNV2JBTDBnZmkxL3E1L04wUVpJZ2wwYkRuSmYwckE3NUNUNGc5UlBUbCsxYnZtSzVTdEE3dFpDRHQ5ZUszQ3hXS0VBSzVWQlBuOWdMckMxeTNheG0yZVNRQlRjYTYxUUZHemg4V1hnQmxUOEQrNlBhVjcwbUZjZithb0xpbW12TXNFUnpjR2U5d2hYbEhyUXB6NUhhOXJ4UUtNOVR0bUpGZWJTNlNzQnRaSzBvcFQ2WlhkT0gyZ2pjQ1hjSHNnZ2w5c3Z4bFhUR1ZuWGdQdGZKK1RDVnpaRFZUbVkwUzYvZ2lYQVBGaktjSjZzY3FlKzM1ZjJ3dXdUQnQ2c2JjSzVSb1hRV3Y0NU5qRDBibXdtcDVhS3lXMVAybmdpNy9wY3pXREM1UDJQNWtwNVZnbFlSMklGekJINXpSajVsY0x5K0JPNC9YTkJ6Vk85ZmVMTittb2lXY1M0QlNzODZDS3BqQTFCVnMwYXNkOUNleE5zdE0yWVFGREt5c1FITmY2Ry8wN0tyY1Y4MU5NQXdqVGRSNFhhOFNFWVdBdXRHM09wSkhzMmhqMUpYTFV5OE5vRlByTUI2UFJMY2FuWitZRUZsTUhhYVZUMHl2R1FYamVxQUVIMUV2RmsvSU11WGp0U1BuQ2g5MW4zQ2tBQndHSzZib2UvQ2dDaGRBVXF5S2xLV2NsSncvZ1hiREo1VkEzcWNzMlJEUEsyb0YxdThJRWZKdWhnUDk4V0tUaXBRWGs1dHo4WEdBa0lPLzhiYml4aVFmd05SSjJyeng3aE1JVytUZm1zUU5NQ1VJcytEbTkvTlJ0R0xNa2dFU2VxSG5BY2hxOXpVR1dvQnY1TFNCV3V3QVF6MmlTc1ZaaFcrTHNRM3BIanZPNUVCVHV3MHpyTlBHa1pmb284eTF5M2xPdXZkb0RNZzg4RVVpSUFWd25NSUFVbCtOUFFMcUNFWUtsb2I1REpTRmFvWDdDL0cybTJrUmNWSTBIZG9hZFdtS0hGZlRsWU11UEhoUUp1cThLb0JpcTlPUk9rNTMrc3dEQ1NERnU3RmoyWXFoNVJEUVJpWjk4aENZcUxPWkVxUFhYM0RsSGVaR3VKN0ozc0FVcDBucmc3YU9DYWhlZkx1QkdhWENrMjR4N3hCWlZLVDd4NGZ4ZUI5OGNoWEkxKy9Ta3RHdDh1Q0x1TDVFaENZNTh6Z1hTZkszZEFUSUZEY2NGNnU5eG1HV1BtRk5wNGVSOGZ4NEdPQmhpOWdUUklWWm9wdFdUVGpIdEpFNHB2M2lhU2FOek5NcUxLWXFuei9hYjNxUG1IZVUwY3YwV1hxNWR1cUg0UHRoc3EzM2pSVjlQRjRrQ3RGMFJPUU9CYnczcGFTZjhRMjhmRUhRbTVnN2JEbjJCV2Y1TjhPQjFBNnl0REZqL2JTSFJDVVBKOUV3S2hRM1ZPcGtBeDN1aXRuOXgrZnpLYWhMZVY0VEp0NFdvTG83dytUenliL1lMT1BreFN2VE5QMkh6MEl5SnJiNDF3cHV0U0JQbTRqMWE3WnhlRDZNWS9GTVhFYTV4SDJoRVdFREdKbmdyU0EyZE5jdnlNNDlKaWVVYWpUNHlLYVl2ektmeVNLbDBHdHh2d1pTYWMzSFFRYWZKbld5c3NKUXJHYTVudGRsRFE0TGVaczlZTUpGVkt4enhBKzBzSW5BL0VqTWdlR1Bvak9VdCtYeUcwcHZ5NG80eXNweWVVN2V6SmVVT09QSmk1dk83RGRTRmJxNkU3R0NrVC9heHVmRVR0eDdKTlAwUkc1TDl2T0plL2UrL0VnUWoweG01bnNZYVljZXFtN09YbHBkcGN2MThOaHYyNUt0UFNRYkFzbHhCRWNvcEpxV20vbkhKMTkvbnFSU0V3S1dsVjlvaDFBelhXdit1VDVCTG00OHlGdW9ZNjRUczJQUkxhRFVEK1NzRXdWUTBLOHRGRTVPaVRFS0NLeVo2UFFtQ1FPNE92L2FCMFNRYWl2Y2g3OXlhU0UvM21KT0l6YkEyR1dPZEw1b0dzTkxzQ0dzR09HNnBjNFVQUCtydXkwUEhPNm9HSlFDWnNmdlh2NklEaUNBMG8yQ1JZQVVnbzYxU1dBRk0vdVRydTF2c2FxVmxTOG5VVmkrRkpJVCtmR1g3aHhJYzRkb3gvTE1nVmFPdEZBUlBRVjJqTC9hZGtBMmwzblFyYU9teVR1d1BLZkU4eXhOQ0VYeStrUHBQN1VoWlllYlJNZC92bmJBZHpoOGdsUlNyMFhpcVJKYm1STStTNWs5WllobDltUm5lTDZxaHFSMy9DK2w5NU1DZkQvaUlmTXQrU0pkOTRGLzkwUWh4ejlpZGJpNDhGcjc2MlNMNnNlQ3V1bllVaCtPRXRta0FNREpBU3RxR2tIcFVyN3phS09Tc1gzWW1ERlAzNHJEQnR3dUoxTnhBZzZoZVR4MkV3d3gwYlBsSmx0SHpVdm9wL0c1QlNuVkt2OHUwdk9sOGF5U09BQ3BBS0VteFUrUkdNVDNxY1BYc29LZCsya2szN21tMlpqN2JFUzVuQ29PT0hNNE93VmxIWHVWWFEyYUNlczNWcXV5dUhreUNrZ0FFcFU0K2VKQjM4WXJLNE9OaG4xY1pjeEVpalVLVURITE1iQkRLc09rV3FPTFd1WXVUM0REakpQRlN0NytVemZ5Y0hPS1lTbmsxZ0VWYS9wbXY5L2hpWlFuS1hVUFhJWm9zci9WSklLUEtWNmROOVpReGgxNEtDaUROQnhGc1Rma09CbnlyWHdTTXlOVTBwMHlrWVc1RUU0OVNoOC85VlhJUGJrMmU3TlBWQ1FwbXBVK1VyK3JBNm1BMXlpK2ZrNklPUlNRcVZHZ3RpTUZsbkRsS05IU0FrNDlSd284ejZUNHVrVEd0WFp2R1dUT2h6dGgrMzVRbG5DdUp3ZUxNdnJJMGQxY2drblBITWE0OUw1OUFJT3JhSU9FRWFyRGFheGFxRDFPeGdISVNoSTJPZjBmeDFoVWdkSUdNMUZmSWFwT3hNdS9jdXprZzR4aERzY2ZMbTlZSThhN2JDYmhlbHRZNzFIZ05DYy9DbEdVVFNMVE9GTlNMbFdjUzhZd0dETG1sSGFhTFNKaWdZak5TT2JFakVJWFdTNjAzMHl6N3pFalUxQldTUk1SbW1GSHZLRW4vT29WdzI0TWxKT1ZHSkpVcTBPV1JMbkhRL1BiTGNnTzNqS3h1NXVLUlFuSWJsQTFaZjI4YVRYbnFzNGtyODA1YnlXZ082U25Ed05pVWlHMWh6cDFaNmFxc2tjUFIvdjliSTNDdlZ2S3ZuNFdRZGovMFRwZHRpNWZLYTdPeFJmMUdQMTQ0SHl6Nmlpa1hvWlkwcEkwTCt3ZG4vTVhuY1FrUFlhdVoxZVZHVkZ5TmJpajBJWnByQ2UzcTBLeWxVSERXN3BDOWRYR0pEQkhtajQ5NXhWMGhHWFl6czhWUlJlRWpPbURNRzAvMGpXSGhYSThvZ2J5SnNDeTFJQjNTYm9XN0NweW02ZXo0aTNIMHlxWE9ISnVUWVdnaE9EY0JlWU52TVBISGQ3R3FTQ2UvSUd3M3JuVkN6T3RBcjJEYmhHY3llU0w5OCsrdDZTYm5VazZsTFN3ZS9DL3FucjJDWWVxR0h4RFRjU2c3TUhZZ3ZRcmJxUkJvQ3ZBZWxCTUVXNHl0c1cwVVRyd2M3U2VKc2VPNndoVituYzFGV3NtNC81aUdDZXlnNHA3NE9haEdtTDhKbjZ5ZUhTLzJKWGlLT2N5OTB3aTBtTzNUUEZhOXpLUXJVbFMrRlAzUlBRYlloYWZQVHFOekZxbG04Rzd3d1VvWE5ja1o5RE42NWtVWlVvMWxsdjNvL1ZMVThHR2FJSW1ONTRCa3FCM2ZNZ2dsMXNTU3Z0YlhkelBmVkxNNCs0M0NVa1RUc0RWUDNwUFVCa2R1L3doeE5UUG52VStLdmp3V1o4aG5Tc3BFTitFc2FwVHhwYjJnODBXTm5la1QzMmFwZnphRzZ5Q2g3RmFiSFVQK0NjOWd1SzYyelVuQUpBaEVZaU5KWlB3Njc3a1RhQjMyakhDVzBUVEgzczRwWGlNVEdPR0M1M00zYUM2U29FL25SZ0FJMjJvRHIyZWhiMWJueVVNd05TNXM3cjduUVdobXpERDBoQTkwT0ZPazVGbkVaaXRJVkY1L2RrR2FTb1JMSWl5OGdhTVZtbUFnRk1aNXgreFBEVmxMQlN2cmtYdHJFT2t5N3dKTXNkVWhOVG81NStwS3hlWXVOYVNNL1AzMjFGK3hEdWc0NC95cmE4R0k0ZWNDbVZldE9UUHlDYzZjTFphdjk2M3JGbXpDTnVaMC9jWUNzYXliN2pHOWNDenhTT0o3djk3K1pla3BmOGVxcW5ZWEJsdkgxYjBVaWMzR2lXcXBsamlkYTZNWkttdElvN2o5cDBPQzBuZnEvZFhNUUR6dVltMkVRdWpXSy8zMzZscXBhM00rbThtVFUvWVVzZzExSDlnWXpVZC9vWDJjb2RiY2RXRkpxeGVpSnNVcWRNb284NGVLSUUwSWRucG1GMmk4R1NiaCtLNHF3MmVxdTRCWSs0dkpSY0FRcGF3WEhTMG5uTmcyRGU5NzczZHdhSEtjL0s4a0hqSVYwdDdiclg2K3VScjFOZUUrRUJ6T0pvMUFwVkRscjlJdUtyTThuT1plVFNXaXQvVGVhMFhDTU5uODlsWEpXc0piNWxMNnViZEZpN2o3SzNXNW0yTFBaVC9QUXcrUCtJRXJuM1JYRkZkTmRhcWc0QmpzeGY0YTcxTWlrUWNoVDF1L1I3NHVuVXNpNzQ3WXB4U1E2bGN0QU5KbndPWno3Q1c5S3NadS9PcFJ6aTVLZFAxMElub3BwcUNuaW9xRW9KM2pOaCtRbmt5aVdYbWNUcy92ZFRveGcvNEFWc21VUFRZcWVSSXJhVGowM2hRdllQZ1kzdEhadEtsSG5WWVZrZFFnV0NhTTdXRjFLVGZmclR4bU83TVVmaGcwZEpLbmx0cDF2VlcyZ2dDSnlkSTI3WWNycGtGRi9zVDVoTGxJeGExeVBuVVN0YzhUdlROazY3a05ZVEhYcjVnV2x2VU5YTDBEWE91TEJlUFRSUEh6T0RLL1hsdEZPRWlSYmtQTGFxWUlPQVI3MUxTVDEzQWRmME45elNmRll1cmg0b2s2NlNpS2tab21NMnZpU2VzTzVWbm04TkM4aytHSS8xanlUYndpcUV2R0xuQkFOaGR5RGtWbm9QR2d0UlRKaVk3cUlZWjVNeXRqdFUxa0djRUJKTWRkcnJveFZEdExvcGlWRlNEdm1tU0hwdHlYZEFGUWpxZEZoRnFPNkovWmJscEpBRGpHQnI2VENDc3R5bEc5VDZhekViajArNGhMUlpwY0hiYUxrQWlzV2xOejM1THhOL3BmSmR4bDMzTVFwelNHVHp1RlBHWkp3T2Y4dHBsbzZ3M2VtOTFYSXZ6N2JHMFFGMnFqRXBOQ3hxbXY3RXFUR3lPZmdUZktUNmVsL0wwTUdOVjRtY3N5bHpVMFdTNWU5emRSaWhPTFM2b2Vnc0c0eGx0ZHlHMUtFb1M0VWJLRHduR21pc2hoM3JxeGxlQUx0Tkx2emQySXFiQnBETUU1T0Vkd1p3aTBvcHB5NzNXcTdSTmFFM1NIRkVTQURJTG9BZSsreE42bkV6VVdseHBFeDRTd1BZMTk5eWswSTdKUm15NHByWTBJUEJxVjEveDBVUUZPOEtCc0ZxbEhrczZmbEFNOWl3eTZvd1IyVzBncE9WSGdXeThycXBUcGsySEU5SkVpTTFpcFMyVkdRQnVXT2pmcnYzMmd4MkVJWkxGT2ZOdW9IcFNXbnVWTTRSMStEVXEzUGVHdFFDaVo0MkJqTGNtT3dHNzB3TVdRR2swR0tUWHJlMXdoK3hkTERoNUNSN1hxaitINlpSdkpFN1dWK29xVElvSVZJQjd3V2I0cUlDL0xxMDlLRWZ0eUFxTEZMOUlVT0hkMjFrVDV1ckc1Y2JDMWg5c1dnVFgzNGtDRXN5ZnpuNVl6aS9KVDhmaHUrdGE5Qy9wQ2JqdVVNM0l0RjNFeHFmZExRTm94WGRZd2xIY2cxV2E1cWlkd1lsS0p1YloxRnY0dWJHWlBpZzcxV04xRllzNy9hNm5rVTFqUEtKRjZoU3Y4alJFL0d2bzFMTUlnNEgwSzBwaFVhV3JpeUlJK2t6SU1JWlo1eGJVaC96Zm5EczNkU0xPQ2tXN2VKTTZ4TzZhQUR3cU9DRndkR1ZEQk41bXBmekR2OUt3ZEM1UHM4a01lZTB1MmE1b05jTXZWcjNxYWdtdzlrWVdRQnJGRGozcFk1UlJ4R2IrbklsSWtqZVlud3ZMbEFsRVZjaTA5bmpocGVoWEtJa2hsbmZwbHo5Q0FmUTdNTEU4TVZGYVpDR1B4VHoxWmpGR2JZNVRzNmJVcS9mVlhrUzZwb093Nzd0aDNOTGJsRW1XTzJMcWFBYTdlYWJsNE9PQUg2YkNEOGw4YWVJbkVLdjNnL2VzY1d3NmRPV2cwMTByQ1dpWjVYdEpyUEY1c0lvY2s5NkIzanBLRlFETGhQV2taMUpyamVZZ3dFODFPTlI1Z1pETDdRdVliMXpabXRoSGNNL09xakRXOXZzZmlNMTJOcm1PRXBlbXovVjBudWJ5clA0cDNhYTVHUmViOXQrcEYraU9RVkx1MmtQYWg3TnRMQjk1aFU4Nnd5Uk93a2h1eko1aWJDMDE4TXM0ZkcxaWFRR1g4aUUyckhkTEVLTWR0ZnpOV1RPQnVtdGlvSFRFcFpsY1pPbGdJdFNBaWl6d1RBdGpMZWdzdmRrdEtGTkQwckNIR21CQkFyQ1B0VEZoYlp6dTFUTTVIUFRoVnpEVmdvVEl4WGxITlFnejJENWNQbm5IMFY3Yk9idjlnZG1DTmhnVnp2V0laSjdlT1JwVE13eFB1WlZSeHlrYXJISEd2U3hSNCtzZE10QkhBakpJNWNHQlI1RmxhQ2QydjdNMFVEZ0JJQnUvaUN1SG5NVWRER3NuWEJYMTBFalB1ZHNseGcyc0lMSWJUVElVenNTdnlHa0tzOGV0TEVjVWlVWnNkN2hSY2ZvUThQNVltZENvMjJ6Tzl0VGtZOCtoNlB5ZTlNZXBmZTl5R2wzTS9kT2hoTGVERlkwMFJXTFEvYVNhZ1ZRL0RNWldnekRFOTc5T0ZiRXQ0MnhXTkdJSS9FQWNBeUVWR1J0YS9PR2RkNkJrcktIbVpjNyt2T1FDQ1N2bHA0YVhrN3FnVWFLVUoyWXE3TGl4cHV6blFXTXl6QzJtL0RkSWc3L01xNXRJejRjVFNadE9CU0FKWnBHZk41THB2VjVQUXhSWGVoS3EweHRsU0VFOGlMUmtMU1ZZRGMyME5jNkg0ZnV2SDdudkpTdzdBOEMwYVcyZHRDbHpnM2F3Ym9GdVdMd1FLNzRnQTdpblBINmh1Z1lFcUhFcUt0S2lwb3dOb1BRTU0zZzMrRk5aTjhoM0w1enJzb2hUSHpIWlhvVlZsLzMzeGhsQ0FMMHB4dzFab3JabEp5Z2JaTC9DWHFrL1ZwcnZ3WmlJeHlzV09PSXkzU2liT1B2S1JUellhTGlyblBKa0RWQ3cvamZ2YW5CdDAycWp0dEVnYzdqK3BvUEFpTDFxTWZqL1hjb2pCMnFySUMyNjFKU3FhSnA4TDZiQUptTUtMVGhQcXkreWNHZVhqWlAyeHZrUDFwTk1CMFpKYVNudHpRREt3MUcwNkRYSHdRT3A5d0Q0UlVtaGpDUm9xT2FtRVc1Y0ZiTDZUM29pdTVtMHowWk9hZFJOU3hWd3VRcmxZYlRzckN1TUdBRVY5VnVsZHh6ZEFuMzlCMkppb1U1Tkc0eElZRTNzYzRvYzFmZ1VQRFFEb3d6WU56RzgvNkFNdFVtQzh6T2F4RENRKyswdjJwZG9ZbFppRDFvbFhDWnlRUHkvM2RnUkhhbnBaUWxLdFl1djVRbTNyR2dFUEhBM2xUekVxbUlCT0lybEZRM0tkVEg1djlMY0V5QURhSzRTL28yMWk0N2gyMHJKdXI0djVUanh2djVTMlZzMkNZTlcxUEh3UnpERjZKT0l4YlFXU3UyWGJ3bS9sU09DTHpHUVkzNWJxWmk1MmtUdThvbVNKRGF1ZDZEcjh5MUFIUks5KzJYblY5bWJoSGJZek9VYWt2ZGgvR0FIZmxtYTZRZVZkc25kNVJkWTRtMlhaRkpCbmgzdWIydXJYOGkydC9TM1NBRUJ1UXhzdHJmcnFqV2lWMGs3cTR1TEZEWG9tb3FvcDd3NUVpV1d6N1BmcFUyQzJDRGhvWmVsTHZqMXBsZGorL0VxbDdJNVE3U1B0Rmw0akRzbCtaRnNvcHI0NUw3TXZDKzRNMmZWMkc3RXAwNzJORGk2SjNsRDdobTdvL29DM1p5a3pXelBDcml2OVcxeWlDRUdlN3N6akRMQlZCM1l4dXI3U2lURXdBSTB6YkthQllhQnRlT0t2WXlsanQ5MFNBUGt1aUhNYVNsMTRmU3ZOc1Zzbnd0bEhSb25BUm5Wc28vTGVVVFFaR1FzTFJHOXZnUmo0bE9Zd0xnaHd0VmZpWWZVMkp3c1gyZzVCK2xpTkM3WGRiUTVoc201OFdsQnBHejhyRDFlaFUwSXVTM1ZjMU42YThRdmF1M0xzcDY0TE5UZWVBOHZXWDE2YTcvQ2VNV0grUkJOdGdiQTZ3ZGxKTlc0RTE1Slhoekw3WFJ6Ym1HM0s5YzYwaWhuZTVnSlRTMm9xcGx1dXRoN3VuTjl6NFlydUN2MmE3NC9IZjFxcHFDalVCTVZjbG0wM0RUTWVVNnBWYzd3WFJRdlBNTEVIU3gyYThsSk1TbW1aNjJNdDNHNVFuTzVMT1U0TUFNZkd3TUIvTjZlbmFRMGM0Y1dVWUJFNEp5bTduWlp1bVhPQWdBM1NUeDZlRGdVblhXWXlIU1Q3L013VFRHKzFrZlpIVVBVWGpnRmJURWdBVTVLbEVKSDhBVlZZbG9wVDhRKzVPd0RyUWlFRGlHZDM1bEpJV3NteS9sSHBzeUxaTG5pcjByekdVdnBpdUt2Q1htRjNnZUtZSXdsK3haajVIalNmcklvUDFjaXhEQm4veGQ0OXN1MHBsb3M1L2pUR1NNaS9Jekk4VG5JTmFIbTR4K0gvdFYrRHdUUVEvckhCcnVyV3dRdW9oOXo3RmNIMVc3UU1YejB3UUNBRTlHYi9POC9Ld2U3VTIySzJOc3dVWnRCQmNaVzVLeTlsM01qZ3ZHYVBuYkJGM3dOcXBuOEtqck1CM3pSNVdSTkVCc0c0MVJQZXBjVE96UCs3S2pQMWNDVm1ZcXJmOTk1UlBOS1RMRnhyaTBuTE1wRFlxSXBENG1Ha1lzbnJWckh2NElkd0diRFp0Wnk4amJuSGxkdjljRTJCTlhQV29tM1kyemhtdmtuWjZ2RnU3K0taSGFOS2VuYVg0cDBRdlpQUk9XdjhJWDVOZmwzcmZpa0NVYjViS1FjbWxtWjkxenhQQWg2bjViaDJFdUZWaTFjandybXVXUnlmRmgzZm9zM1RFUnh2MEdUSjhxMUxKSThYRmU1dDJ1MGUrZnc1VTBFb1lESlpRcUVKcDBlU0E3UWR5NE5CRG1wUTBFUDNGSi9NSzR2WEIyRUFnT0tMYWt5Vnh1bXFxSVdSSDNVY1lYek1KYVVKc2hJdzZEdCtmMHlkWU1acFRPRGxXeGsyTWdSZU9SeU90N1dsYXlhc2FwaVdhckJPMjBPdFJ5eE9EOTg4RG9DaXJzYjFGUk11dTFwcFpnQzh0N0syb0VQTjVPYVJrTzBXaUNQRnh1Szl3eHdZQ2kzNGdJWnQ0Rk9kaUtwUFlZVWhIMkxUSldrdlRMaVZ0UE1iVjJ3Y2NSU3RIRmkyRVk5TTgzaG00ODQydWd3K3lLTDlIdEh0YzBLL3hST3RBcnlKTHJtVVdnUTB4S1dZeTBJQStjaG41YS9jUUR6cmVPVUpJQTdiR1F6b3RaclZ6bTcvdGorUnNVU3NVVWluWUZPZDVPWkhCeHZiWmc2UWdjcGdwdFU4TUhzazRLekNBOVRpM0lhOC9JQzR0RmFwZGNLeTNqZ0U3U2thWWovOHBRamRTaSsvdHkxcGZsb3U4TEI2YjlHb1FKa0hjbWtkczFCTUN2a2twSURSbU85MnNQVXVnUFpsWjczM01JQ29xcmZIakNNTmpmQ21UWi9VNG9keTRvK2pLT01SeXdXYXRwTVNzY0xXeXVGTjBLV0lVc1BiMlZsTENFOVZBbFVWaTBuOXRDYmsrSkZBcHVUd2tpRW9KQ3VqVzV2TndiTkN3dUZOMURvakF6dnkyVjNTeTZHaklOTnJBYmRTYlF1N2FYeG5LUjA1RDdHZVZXVDZRaytxQ0pWV01Mam80Zzl4T21TbGhiWnFDT21oem5pUVA3S1J4YTFBUjArK2kwdStEWjVxbjYwUTBXTkNlc3k5K1ZPeHJNM1phTkc0UE1oVWdaenhRYmZpMno1Z0txYnhLVFFkaXZRTVF2UUUrNzhkMTRobW5IRzRTRFFjS1k1bFpHeTFLbTJWeU8wU0RockVvZjdYaEJnU1ZjZDdqdDd4TXJvSzg1VHVBS3lneGhvUE1VZUM5aDB3Q2F2S2FTTnRRU3BoVUJGWmtqZUVpNGcyWkwyaXR2WG9RSnUwMFZseFE1VmVVcmVXS2dTM09jSTE0bDJ6VG1ZZ1BvaTh6VGNPRlYreHAzYnRqNHlidmoyTS9pdDJtN29sdjFsQlZBYTJWVXBoY2xXN1RGUVFjQ0Njbmg3ZkZNVko2Z2JzbG5VNEFydEtFcG1Jb00yd01oYjUwVlFnYThnU3k0M2E5UTZNSGFZdXMxTjJObGZNMWd2TzBWOHBpbGdmVlNnUVpZTkJ6T0dRUVlxVXMrL0ZmZkwwUFNlN1FUaVB5UDBwUnVsN0N1MFFYU2ZmQWhpRWI2elN3UlBoRnhMR3crOHFSdWFhZVNJVUJtTEkycC9yeHR6a0tJaC9qTkkxL09wbmxSa3Q4NERZSWhXZ3JwUTdKdHdhd2JWMDNiRkJpTXYxbytWQi93MEQwWjM5dVovOG0wYkxFK0h4dDZCZ0pXNk5TQzA1ZTVsUGFGcWUwdnQ3d3p0QWVQays1YVdYaWFoZUtIbFl3Nkt6WS9sejRjbEpnNEJHVEhVczJveWN6dGRWWTN3c3hzdC9YWjB5M0J0ME56bXhycVBmZTNvOG9ZUXN2Qm0zNTZjR3ZMN1JKcGcyakdrTHBxVGluRmVBMGc0ZE1ObDhYMjJVSDhyTWJBZXJzZDRMVFZ2bXhMaFVTNnZSbGI4bVJXeWIvUnFybDZPUnhCQ1dZUnRtU096cFJwY0I2ZjlXbyt0Ny9DR1UxTVNkczNnMXF5VXlzQlRpK2t0K2s5N2dTc3FnSGJzRitYYzVBOVpubGdtMFNtUmIxWEl5MDhBSDFsUkgwekt0N0d1RCtoRnZOaVRveTA4WncxUEpsdEZRaEJIemNpQ0dCVjJaZ0YvMlVZVlhYL1hBVVM4YURaZVRET2UzdkdMVmYrcGlsUEF2aXlrM3liK1pNR0JGUndGUWx5eTUzcytFWVd0UGFxaTAra09oMXdWWWgwYmh3UmE4Zm90L3N4UzRreTZJL1VmYS9sUENKS0pUSFFLY3hCM3Vnc3FnZDZQR1BoTytIUzd4cCtJRDZIcmpJUmx0b2dnOHU3N2ZpVnNlQ2xMTytCcUN3RmxVODJ5YmxxL0lGOEdxWVEzVWthQS9vVGhDVTZoTTJ4UWdvRXlTd0xLMUgrUzRKcGVMZjZqZkNLMnNFU0lxN3A1ZVBlVVA5dzNJL0gzaU41bXpJUlpvb0gycTVTbEF2MC9BdlUrc0R0bmJTOEhkYVFEMFI1NjZlc3ZmWGhxRUloTUplTWlBNjkwdFlkc1dCa2xvc3E0ckNyVXoxWHhWQlcreFdUTWI0bXpCaWppcTZwMG9lelg2ZkJUK0o0QVBwOThnYnNJQ1NqbXJkaUtvYVZZaFVnWG9xTkdHdXVkUDlqL1FmU1pPVGxLSDBCbGhnQzViWWZ5RzMvaVhQUWIvd2hqcXJva1dXRjNLeDY0Y1hUcHVGVGtyTnlhRlhxelArRmd3SVV0Y3VhTzJMMks1K3Zta3BONzFUd2VSbHlwZ01VQ2x6aFZtM3RKa3ZOQ1k4TXhDUGszN1BPWXF3N1NCZmVObVRNRHdYUTl6NW0zTmZ1MERiU0MzRGQ0aTBGVU1TbVNuMHNsYnNKZ3g2NG9LQ2NvU0lRbGhEWHNSR1hPTXZPSlFZREhHNEYrMXk1RGd2bUUyNkpmcWxOak9oWUEzdnkvRktwNHE2aVJpeXJvVXUyeFo3WkpxNWxES055TEFJa1M1RlRuSUt6NXJyUFRYVlkyalh5TWVwNUQvWGN3MGV1WEY4My9rZkJRdmZsK3Z4YWoybnlLV0xuTlI3NHhYeFMwd1QyK2F3OUhjLy8xcE1WRk1oUzI0aWF4dEY2Q3F2VitYNkxSbTBrbjU5VGVYR25qZy9JRDNTSHVONFFpdFFtK0xzTjUzdTdvcUxPYXdoS2xQaDcyc0E0bVVOR0VHdmtvTFhBeUYveFd6UTJyUjA3SHBJaTlUd3JTRkxQbHRzK2pSTHA0WjVibkxnRUhBc1huVStsQ1ZUNVFOQnhYKzdiQjZBWnNiR2NtbEhQVzUyajVFaW80N1VCOTZVOHdqQWNRcWtNakV3QXpEV3RqNEdGSmVEOTdrMEZ3NUVzTENvRFE3TXRpL1pkZ0hjRlVWejZoWTlNQ21laTlNUFZXMjFDbW1Ja0c0SFF3YkFHaXRVRURld2dTR0tRek9lWmpEQ1kxbDllblFyNGlqV0tIb010WmJkbHV0WkZnbnI4TTFCRkkzWXlqNytxVzBHcFJxM3FHVHg2QzhqSVdmSGEyKy9UWGd0SktLbXNvQTdlT1ZFNXROWExwVXhjUkQraDhvWXZjZmVOUmlySXFNalF4MTlzVENVQXpDWGFPTFRPd3FrRThKMi9DNmpDTEhoM2QwbVp6MS9mWkNMMk0wTzF0RjhTbUJBNnJwZVUxNERsYWxRZEpDd2E1QlZGWnJRREJkeXVYWlhjQ0p2S3ZMc0tKUEttcTFIUlBuMi9kR0xsK2w0cU9MdFVMZzVnZnQwQ0VnZ2NOWnAwWEFjSDl1MWhLNEZrRFkxUTNBZEZSN2V5c1J4cFVSNUNoMGJTMEtkN1NQNHpDZUZub1ZYSHJreHVGazhib0hlakVYQ0NobzYrK3BzTTM4bnVuNExUTGpTQ2dkS0lpSlBsWTV1dkZZNFUrM3JwOE95UzI3WVF4M083U2ZxT0pOMWxHN01OQktLV3NhTjJDc2MyRzN5YmJkeFhNQ3doRzFmV203TzN5MlJHYkZ4SktNK2hpaUIvM3BYVUZ1TDZIS1I0TEJDem5sVTRaQ2ZyTkZsdVNzdUcvcVNLRG0vRlN2Z1g2d1ZuWFpvOUN3ZVhXcmNrdXl6d2tVcFZEbXBlWHVlSTFIWDZWbWtrOHRSN3lZanVVK0llbWNmQVR0ekVVQVdzSWtUdUNHOStFeDZhVUlrZjA4c3pEckowNDVsQzdWZ0YwWG54ZDJFREk0ektpbGRoVTBGaEd0MkVUWlRBdmJvYXZKNVMyMXNPQ0FrV2tLSlFFTndXOHNIZDIwSDMySnRJM014K3hSK1hvSjh3d3JmMlZ1MXVTZ1IyWVdYM1ZhUmlmdkNBMUZHRGdUdWtoT2tDcU12cDNJWWE3WmJBaW1vL25zOGduTWJpVkVjZVM2VUU3dzRsWjJiR0hCTUZ3ZjNBQ3psbjNha2hRd24zTSttdXdROEQvVXFqbERaMm5nVDN5cHVFWCt4NlUvQnlieFlDSWMwWUdlUFZNYmtoYUpwWUM4cFJieTVySGdaM3hrc0VlNmpHd3FtOEhmWkptU2FWdUpDKzZLaHdvT3NJTGhNM2w1bE1lT2UxQnpUTmwxUENUN25UMk50aFVETmEyamtEa3RXZ3JFU2JESWwvWTNMNjFkdjdUR0lWVEhYWEpVS0swa21HbE5HZ1ZUODNFMkQrZ3ZvV1NjMUFudkVkWEJQMWpnLzc4emd6cW1lc2M4SjVyS0lIYUdmK2lTSjBRQjBNUkpKMjVJR3U3OU9tME5YQjFod0ZuZXRLUGVPZDdvUGllWTdmMnF2Q0kyQkJrV1V4SFR0OGx0a2syeThLQ0o2UE0rYW9qSm1lakJYcmlxdzMzOFNSTVlibVd3UjVtTUpqcFpuWW4rNFJzb1hsTExDL3g3TllQTnZ2QWZNSFFXVXdHakVJUDFHc3gzc1VVY2x4YjQ0Yy95SFk1Y3V4UVEvY0p3eTNuTG42SEJhK0NYZ2JaTnk0SThZRWJxSlUzWnpmV21RamNqZnFtcXRBT1dNdDU1WTZqSjNFSTIxbS91TnVUTmJMeTV0MDJSMkQ0U0VOY2VsYlN4TENCRGRxTWZjVHkxNW9ROGdWcHJsaFg4OVhSdnBKSFNIK1dkcGpMNmQxcTR3V2ttaEtvdnpYdWcxK1ZoemRHR2JjZ09xd3RpeTd3MzV0eWRDQmcyZlNENkx2YzMzSC8wbWc4emlqT2NISzNWSnpLZFlnYmRXWlpzOWdjSktLZkR5ZFRuUDROc1h6Ym9XK0JJaTVRWHJUaHdFMThIdGlhVHZXdUhXeUdOUGVGWjZEOCtMaE05a2dmOXdpZmNsUjl1YzI2S050YzlzekZIeC9McTNvY0oyc1RzRGliT3NqMDBUSzY2dHZ3U1NoeTZpcWcwb3hBOGh5NGlYZGMxeHpUcUR6V0g2UHByMWt4UmU4N2ticFdCQzRIS0QwTm5ESEZhMWRmOGtuclNPVXpLbS9lZUYyY2wreFJLbW1kWHFwSHVqMmlNd0c1d2VVTU44UXRHUEhWKzNrR1JjVCt6VGI1MHdDN0ZzU3FFNm9jTjdBQ1VJc0Q5UmJLZSthTE5mcXVoT0xWWkIvRy9wOENLVUFNNmxaKzNZUGRRVFc0TDBhbXhkUndSczM5OS9LT0FrRjhWOGpaTzQyQm1pdzREbGs0Q3RWZTNVNVZPRXU5dXIwYjZpaitKRWU1YWZERUhaS0d0SFVWdDQwVGs1ZWJTRjVZWUNPTm91SFdvM3paNFNQdmMvb2FhZzE1a1loMVMrUXMwcnNGMU5VMlZYc0dDRnJ0WjUrcUw2Y01FYU0wTjlEZ1BUdG42Vjg2NXJ5N2FrWGFFSjlwKyswdE41S1UxOHlrVEZhNCtmT0E3VTU3OXZjVitBcXMrcXltb3daS3dudzVIOVo1YTIzVUw0elA5MmhtUjBWRHlSaGMrdFkyWmkxS0l6czdPMVNWTEJOc0dDdVlUYjNZbUFKSjkrQU9CMTB0MnlnWDZOOEhJQjZUa0RSNnh2cjJCdmYrZVl3djlUelcxVytpQXV0TGoyZldlZGRDTko2anJWZ0V5YjBrcVVJbXVlRHRYbXpPUFBibkIwTHpNdzlEQmt5WGkxYkh5QmJhckJrWnBaSUhSWUxab3NiTnJPdzNyRWhmOExGU3FobEkvejNhR1o5NkdjOWRQVlBkSXpMZFJBeXMyZks5SmZ4aEJKTmljL0lkV216d1k1WEQzKzBvMFhHQVZhZkZZVkdrcXBQTVdjOXBnNStaU2NzamxLV3Y1UjNzQ0lyMzlVSHZTRGNBeEtHdGxxdHRiamNscDRQSU8wUkxwOUtkaDRYckxqQ1FoNEYzZlREU21mb0hyQ1FMTllyOVFHaVFHU0hLeEI4RWE0MG9keVFxZHJmTkJiaURDT1p0VUx0Qng2a2M5MmhNVjVyUWlCOUp6WlI0YXMyWlA4OE1yb3M4QkpnNis1MmEwS2hxb2dLUExjZlZJQWordVJnTXdQTmtia3pDMjREYW9ZYVNzUmtZS2g4Sms3a1RwMEszcmcvcURKcStFL2xxY0NodU1FRjZQTnpVWE5ZNEdrUUxXYUZGSDZVVzIza29DOFJaM1RRWkV5cnpiVGRTYkI3cnZiNlEvOGNLR05kYlJwUnA3dHVHanhncHFDMS9EOCtGYnJPWUlVWm9yNFlsNUdjR00xYTZQYWc2Qk9YUDhzV25IN1JDWEl0TnN5eFVQcGdrcmphVUQ5ckIyQmp6WE1UYUZqWTBVNEIzT3dzcEdhMDMzQndxaHdaYjlNQnNzMFdPOXoyN3JKTjNUQVpxdUVwazJ1YThVMDBvcUFkR204VWJNcGhtKzBGenl4emVXU1hudU50cUxVUnNKWHJBdEd1Z3pZZkM2d212Ylk1S3l1RGhSOWZvY2YrZW02dVI4dVZGcHJ0bFRJVDdYaUJ6Z2lybHUxZ2pmRkhEcWs3WEhvS2g4VlJtQkxteGZ1UkJxU0ZvY0FZRzN5R0lXcFAwK2hGa2tyV2RCb21CRWNsV3JUVkJHUzFic0QzN1RYSnFadE54RGFzTU1NdTMyWndzLzdvd1dIb1VFWmErTkUxaFd1bVRoU290V0VmTUtjd05qcGw1eVozMDR4WVQrdDFPenZXMnV2ODVaZFFtRHhSWlpPUWl3VEdCNGYvcmZCcjlsclZ2bGp0NFowWUxJVkI0T2dPc3NxUlkrYktYZ3ZaMHVFaUZVc0JmWktuL1ZtVkx0b3dKS0RNMXBZdjN0ZUloK2JDWnZWTk9MZ0gvMkNWd0VKM1lJYmNPMFdJRUlDdVJqa3VoQXpMUmlBdzFCcGE0TGJCMXpWdzllV1ZmdDFwSmRCWnUxaXdIYlhDNy9oQ3FFeW5IK3grZElFNGNONWI5M2d5UTBjckR2QzI0cDJwS2YwWU9OSklkNFRLNzNhWW9mT3dLTWxoOXBoL1puKy9mbVIwWkM0ampkZEZValhXUmxMRUY0ellSS0c1RVFpTmN6Zlh0Z2tmdmttaUdYZGN5akRqM1RGNzdoWGMvTXNBclZVY1ljbU1SWXJxR084aXFGdy9wUndONnplSXJZMERyRHZlWE41TkZUbXlxM0NXcU9SL3lJY1ZkcUs0V2FsNW41bWFTTGx3L2Rva1ZFRkxWK3FLVXRPem1PMzZ1b2xoei83aUNBdXpoVDV3Mi9zd0IzaithYVpCY2tHcloxdkh4T0hGNTZIYnEyL0tOdFRJTjBzV3Q5MGZkdlJJcVdjcWNRb0VXZ2lFcTJZb3NXZ0hYSmM3UEJuUXRWQ2E3OENtM3F6Y0ZmNUhScmF3UVdvaHVBTTdKWHhXUFo2dVl6T0cvOTYxSEhPenJFbkcvNDRxVzNyZEExUnJSTytHOUV6YlhEb3VYSHdoekFJYjM2VndnZTAwRExCeDFaTkJ5SXl5NUNIZzdwcC9CYVpmSVBwNlNYb2Fzd3g5S1ZxdUw4a0l6RjJ2TTI5RTdaQXBoTUpraGtkVkR2Sm1RbndtQ2NIL3pDSFBtYWx6NFU1QTVIOThJb0NscmRVRkMwRFJiNmsxREc0YVVtaUVPMDJRMHlDNldnN2dFTTdwcDZjV29GM3lrT3YxZmpDZFRpaSszOE9KVFRjL1pYc09qRUNITlNDNGVnOXN5MURuVG9WMFNKd0VvNmJNeTNQc1pkSlJSMm0rQ3hueG1vMzFIOU5xc09qaWp2RWtFSjFTUXppMklHbnBDcmk1Y0diUTFVSXlteXdMOEZzV3QyaEdUeVdJSjA0RlZuM3l2akJVWE9JQXBxdklVd3ozQ2hxdjF3UklZd1Bjc3NaR1l6VzNid25XVG9ZT1pCbFUzVXVKbXYzMURxTWl4cU41aWpKTC9FSGJiMEtNczVHYmFUS0VtVnVtQ0pSNUpuUTN5MW1VOXRJQW9VaDdmUE9EQk1QMHQ0cVp0cUQveXpHSDNlYUVVOUJXUjFCT3BSVzVsc2JXZGNUcCs0TXVPdVh4Vkd1ZGt1V05SU1BVRFpPVUlnTzIrTTRDUmJOWFBTakhtQnRhVGZmS2xIcGluVXhqQUVybndjcWtXMTBncGljZmttM3YyNXpNeWxwSDkvbWF5UmZWbmtqNFF6NXpqaHdqTXoxZ1piSmtMenVFMk5Oa0g2MWlCZkloR1NLL21LWE1relBkYzVQaUcxbFZkL3R6NWZPK2Nma21qcUZzQzdYYVpUVmh3a2hhRXFDMk5LNHBsTURQV1RBTldvZnBwOC9sVTNrbFlUcStXNzdyNU9NRDlBOG45VitnbEJCYzhnN2ZTRkF4U29wN2lIWllheWdQdkVVTXhZclVTZG5jK0IyV3pRMXpmRzI5cUZnQVYyQThoOVZVaWxSUU1yWXY5bzR2YUZObEpQKy9NNmdqaFllWDNsQU1veFA2M1Y5K0NDb3g4MEk1WVJ6VDMxbmw0empQYkNzVklZMHVWMnprbFh5bGhiSkVUMGl6TGthS1JkRmYyS1BpTHdYaHJhcG9vd2p1S1ZjSzNtQ2hyK1A3U1NpUHh3TTBCc0srV2g3eVRpNmIzc2kzQTd1bVRWZ1hYOFJaNHQ5Z0dlODJWS1Vlc1Mvb2pnZHhkMnljMVl0T0s1TXBKdUh6NVlhcnZ3amF1UHlkRzAyTHJneXQ3My9aYzFJWVMxTkh1eDluMzBNRDdLMVhROTYwY29lU253WUo0ck5RbXhyNlVWNkt1SzVPK2hzOTFOKytza3VzdlRhaE9kZnlxWFFjUlVRMjZDeWpDeE1HQ0g3VnJwRmVtZzN0bkR6RlRVSE1WSW9uVUdzU3JGTUoxdzFwSGtqY25SRTYranV0eWRWbW0zUW8wSFh1WVkyazlWdGJkRGhBNXRhZXp4MDk5b0ZqKzAya0Y0V3NSTENKeThxSThzUHBzMFpkRzRDOUp4SlFRd3ArVGVxbk84NHA5Q3FpYldsUmFwOGMxMGpJUEJvSmxMWFBBOHY1cVdmcHlnek9VOFpGU2RBY2VBUFREcDMwK3MySmVhMkcxR3ZrVDh0THNNalFLUjRmWm5ybVdPTWlmc1RnOEtxYnBFMytpWDdLNzJ1Z05pdlBaTEx2RHZ3OUVoU3N1enpyM0ZMZFBFemNQZmVtdUZyQUNZcUY4LzQvMWMwd1RaUDc3a3pPcHR2amU3WkZwU3M0NThtOG1XSzB5cW1xeXBKSGFRV2NHNjBOWDhleE5VVHNQbU5ZTjB5TTRUdDQzMWRoalRVQUI4Zk5VbWVCSkxiZERGdEw3V1M1cFhBS09DTEN4bUM5elRQWE4zTlBibzIzb3NTUE5LK3pSaDdzcTZjRW85UW9ranNRaEZBRWYxT25tdFMwb3Z3YXQ2RGdwazZJT3N6U2JsbUlCczQzN1gxbGhpQWZMWGN5WUNTMG1NYWNQOEJPOHZSRXBQY3Bmb2tzRG5pWTZ4a1FKTWdLVWNlOWcyc2xSc24wcThkcCszN2I5SU5Mck84bys4NVZqelZtRjVoN25vRWhzSnpEbjltUFdjVzZlZFozMWMzSytXZHV1SzNUQWV0ZTJ5OHdqdHlxNzJKcTVyMFMwYzJETllIdDR3UjY4M2lmZmFHdmx0eTJ1ejBnVXpFWWtxVU9NY1RjMVNuOXBaTGVrQlFJdWlEUWJIeTg1Uk9pSWJsNGFFMG1MdkJ5RFdVK3ozQ0t1RHEvbVlWM2lST2ZKSjdpRlgwYzZyQlBNbFFLZ2ZHbXdYMEFyazlZaG5Ib0p1TU9LaWI1Um9PdnNiTEw2a1YzUUcvOXR4Q1MzR0loTE45dVZmTmZ2Wm1iM2Y0UEIxQ2pwSmhkWFUyL3VvYzdWc0ZuNkJWR3I2NEFhcGdoK2JCTC9GR0tFM0lLSzdONEE1U1hQZVBkUWxJY3hyUHJ2UXhheHJZWmFDSXkyb3RMbjV6QUk1TlBNV2RKTWd3elZLUVV5V0ZFUmtQWnBQL0daRUw1b2FkNit0a1h2NURzQ09rdmNBN0I2ZHRmcUNTZGJOVy9LemFTdVhiK2ZkZnJUcUkxbm5kUDVJZXo0emE3WDdFZnpubUVmVG5qUExDU0xsTTlHWnEzUmo5Zm5zNnhqNFR4VmF2dnljaW1GbjgxTWtlcHVXMWxTV2ZnV01iYm56TGczZnMydjRiVGxHdG9sWUJ3RVBOZm9UVzN1UDdnTE1FeHhBWW9KREhrcHZJU01rYU8rTHQrS1NNVnEyOXhUQTJJczF1YjB5ZDJCb3RsVzJLQmh5VWI5S0IzUUl2dFZwWjhUQ2ZPZks1TkkwSW5HaGJ2Y1lodUMzSXo2U3h5VDZqeEp5eWhaWHFuTzJGZnY5RjhaRkRtVVNKSXpKT3FIUWZHRGNPcHZJc3h6bE00cGNPMk9yTmtYQS9ieW9GbXdEZEg0UmVad0x0WkNtZ0VFLzdjc29IU3c4blFWbnYzS0EzakQwZnlPek5PTGY4aXJwbVByMnR6RFJ6bVRBVFcyanlxZG5nSm10aW5FM2ZYdW0yODVRc2ZrdXN1c2VFRHd0WjJpQ0RaNFd5U2k5amswdHZyeWhKbW1TT0lxMXlGdUFPYUxOVGUxNU05SWFPNDAzdDJmeHVPWUY5VHB6dVRsdndINU1uc1JrZ1ZEa2hvVWd6N1dZMG9hZC9nUFg4RFNwTWxKdlJDenAvak43Szd3ZFNhT1hkY3h0NlBDK2tNaVJoeVlJei96ck5zK3Uva3FOTWVSSGYzK1lqSTNTUlZYT050N3loK0tIUCtXdHhqdmg1d1hXcTg1TmF4Y3hyQzYrMHRYN1QvZGlva3U0ODlHSzJodXFUUWpxaHRTVmZyZ1J3K1ZNUHRVWVRBMEMvQ3Q0cW5wQ0NvMDZreUl5OGt2ZllCajRNYUdsV0hzbXllNERqenpKQk1BRnVNNmFLdDBzVVYzdURpWCtGOWdOU3NDd0w4dTFFWVl0S1BkOTNPaDBhcjcwYnVTbTBBZ3JxSDlsUmpWaXl6aVc2L3pjR3pERXQzT214azZpdnR0aG5DdUkxaExvaVVTRy92bTBvVDlGcUxWMXFaTFFUM09FeGwwd2VvdENtYVA3VUhIUTIrRnQvdnc4TU5kZENWalhVelZiVm96WmFXdGEzbUFBTW1BZGR5TzQ0VURLWEJBQklPQWNEalBVVm5uc05BMWNTSnBNWW5uQitlelFLdjdSdGt5MGtqM1dVQ3gzTmZPcmM5emFEVUhlMWNSOFhEZmFCZW9Ga25JWGVFZzY5eHNmNlBJWU56OXh4QlVmSUNldjhhNjJRTFJESVhQdmN5UzdWSHlOMWE0M0RPU0lSdTQ5OUpJbk1wdmFQM0kyYlNwT1ZTNEhkNDlYSENMTnhqVnh2WTV2NU0xMCtkcVM5aENidUdEVnpsT3ZWUXdYbHdubG0zR2I1K28zS0xxN3JSdVo3enVVblY0RXZxMkJDQ09lOFhiVXk3eXJIY0doVythQzduZ0llMThsQ1JuRHVydXBIVnE0V245bzRkendiV09KUnBGUzdxMDE1UDZzRlBVMTdEYzh3WmEwczdZQjJ5UUp1K1o4TFpHUkFpYTl0TS92bHBvTkRQYWJsQXFNMWNkN3pIUHJJaUdHSXFYckRQcjduQ0QvVXE5Y0ZoTFNLK0NXMUd0YTZNK3dPbUp4Vks2NHBBTXlnZ2RuU2hUbUhrTjV3TlIvT3V1andUSXdzUE9mT2VhNDlWRXZacFNQSTBsc3lSdmNRanc5S2VKcVQzR3R4eFBPN3E0YTRjREczTE1QS1NObEVicytVbVd6ZVFaeG5ldEQzemk5K1BtNTI3dlc2QXAxMkFUdWJQSzJvZ0gyalpuaGhzT0d1VW44UkxUVG51MUw0S2YrQlYvODlmNFA4Q2Y4bU5mOW1hYXpMRWZsY0tFczJsMUxVU1lHL1dwS250TXlEbHZJZHBqaklaZTVoejFVekhDS2RWckYxcGVpQUd6aGJWM0hpRFlMeEY3NllqMTE5cWh1T2tNS0hWUldBbE40Ly9yYW9kZmVtQnpnRHJXdE5DYXR4ZmJuVndLRHJQL0tZeTkzcEZoU2FYWmQ1SlVESEFwWThjR1hwSWJ6Z08wVnVNcVRRUmR3KzJxbHF2Vlk3eXZ1NEE1elF4UTNuRVM3TmdRM1laRXdxNURlbEpEZnFuVGlMb0NQR0dPOFJxM2JxMUhYOHkvVkdpRGpwOFo1bDJja29iaW9Fem43OGh1L3ViU0JQekRyajhGSlVaNjNYakRsSEkwVHBuQklDUEVYeXppMGZZRFJvUDRSVGp5MTk0ZUNjc1R6bWc0VTBZNG5oSTZkb1Q3cjQwUmV0SFBTSEF2TTFod1VXMlhvaFNvbk54QndlRzVWTXJ4Y0Fqa1hyUUNLM2p6M3VtdDFRSy9XZ0tNcmVTZjVPbGF4QU9kK0hGNTJZdWJBL0xkU3ZwNmhLbFlhVzUyY2VmMXovZC9zbk10bGNEQUpiU2tHWEZXZkQwaVBWNE1tS0tEbEc5cEtDUXdmSUNOZG1FM0VQK1FBMjMvMG9LRWxHQnRtYU1VanJ2dEFEQm5oVXptbUV1U011dHVVaEkwS2lVT3pBMnBmcmdkb2g1ZHc4NXNlQXM0Zzk5T0JaVy9VdGtQVVIyNUcxTFpyQmtxMzJxdnQxWlEwZVFNdjF6YWtBTmRrQStTRGtIQmVveWJWdVdDbDFwTDZNeWw2Y1dBSE9uNzNIbTk1QWMxVUMyMjlTOWJ3bDZteGgyWGNaYldLMHc4NmJVaFNaSCtJajRQY0JvTUJldE9kWUVFZnhiVktoN3M3bS9vWmZ5SGdNbXpkbURCa3F6cldsZXFBZ1Bhb21hbU13T0hnSkRTRHlZRjlOSWhEblRDVWhlK2E0bEFua2NhQlQxMFJWT0poZGsvdy84QTVtOGkwWjY2Q3VOWkNjbUlLUEpOUUdVTUREUkgycFM0QVk2dkdzM25KUXp1MTVrU3Y1UkVxeGRuNWpiM1NubFk0aUdlWXpIbnVjVjhmYVRVYVg4Z0RyV001VUI1YmZBSHEwTjNZNndrMENoeFRQN1RhdjNPY2JsemFYTjhDL3RCT1ZRMDl3eGFKUGZqcWEyMVFxQmtsM3ZEejd5YVdiUWJYU0szY29uNEdjTUlmRkJacDlFQS9RYXROVFFqREgrRSswV0JIRmQ2ZFRUY2o3elBQQ2NKWkJWbGE0WHA0K0U2ZndINmQxY3NFM0NoUEdEZWtyc2gwUzVxb1d5Y2xMbGVqWXQxV1Byd21uYUJJUDFaT2wrL2Y5ZEZXbEtpZHJqUDJWS0RzOUUvUWw1SkpIWFZnNXd5amJLd0k0amFjNE55a25LZmdkZlA4SndpU29MZFNWa29SUlZvMnlxZmJFL05BL0ZJSDRVMnA3dGRHMVcyRGxkRGMwU1lZS0JWTng0bnpjbFJaV09GY0cvZGQ4Ymw0WWxka0k2ZTNaZy9ISVR2VGc0alRRNzZBS0xSYVdKVTlJOVozMFZEM25BSW9RQy90RExEMGxtcFpTS2ZsNXZzbTdreGsrL1lLR1lFR2FRUURrdVpCSUI1NGVBNVBWSUR0bVYyU20rTnZ2TVNVTnJaUGhUQmlibnF0N29TcWR3aG9TbTZEWVBMSVNyK2RBOTAya0RnUjJPM2ZDdkowa0ZxVWM0eUhkSTN0RVJvcFpkY3RYMUozVWhlZE14a00vd042TzRueUp5eUNDYzVwbU5MSGR3QUg0Q2lZVkovSDZXbnhVTkUvdVpoVDlzaW0xWEVKdWVlcllkWW5iTjhOaTlmN01udlRFbFJHQVBRUDQ1UDNjUG8vV3k4eC9aM2luOFNHWGo4NXlyK0pHb0dHWkFIQTQ0YlgrdzMxN21rbEhwMUdVSzk2ZlMrbEF2TDhjUEhrdVZONVFhNnpKRzB0RHJHUVdQdjIzV1FlaVZhQmFYSGJBNTJ1aWIrdlpNcjRKZUtweHVBV2dGeUwvZnh0WFhtYjg4MWdJTS9RMDdZTUJXQUtpVEthalZ2YUZmYlo0Ym5UelNsTXplZDZRSEJLWGNuZ2h2dUlXZXhOcWZkUEFlY3pMYno0bGlOT2ZkRHNrM0RJeDJVRE45aGZyTDB3TU5UaFAzV3c4bFRycXFVSVIvZDh6UHFTUXhkQnZRYk1neHlXNmdnM00waVNXYWdScnQzbmRxRUt3eGM0L1BIdi9WWU9ITUtwanAvY2RBTEtqdXlFMGVpK2hGbk9raDhkZGtWSEdtNTBod0Y3QWl6YS80V1hBekhJL3hPRi85S2pDY0poVTdpS3JLZHhiNXZqZHJzWlJVNm1SMytPaEpTVUV4bW5pSkRPQjRCbkJ5czlxTUNkNUdHdDhpb1NwOGJBUVRuMVZCZ1M0M2t3WDc2RmVoRWx1a3ZNWlRTNDZpRUlUTkl0OFl2Zyt2YmlZMDgrZENYamhtUDltbks4Mks5MlVLS3RhUis2OFBZNlJxQTRsb0FUZStmVlVlZkc5M1V1L2g2bTFKNHBvY2xGN3NOWHI4VWVjb1JyZUNzQ2o0U0w3a0pvWG1NUGZFZWprNlppeFBWMG43c0d5Z2IzZTFoU3A5L0NMdHlPU2l0T0d0WkVCTENrMXJPUVFGK0VvRmNma05hbnYrajQ1SDd2c0hoRkZZM21EMW1iM0xibjA5ZFpFWjNLeUJvWWVwOG5MQTBWTTl3VlB6akpHdWM4MkhuNmVxeG5MMmRJUmxoZkx0RENWN3ZEeHlRanZvVmFXWUxXOU42dHdXYW45ditDKzRPYjk3Ni80cWFYTkVhVUFmb2YxcXh4MEV2NVVjOTd5SWpFZlk3YXA1WVB6bUU2SXZaSkhES3JNQWNHNS9QWHJiRHJFNHQwUXBuLzhpSDZWSWp3bkY2aVFDRkQ2dGg1djZkVEFWZmFLZGErTnpEWWU4L0RUQzc4NWtoMUZsN1JqNmViU3VFMkJCZXFlWFNIdlNmSms5bUxlNlpya1hRcExsK0N3ckRRRUJLQjZ3MmlWdjljTFJTSjlnT0RnMlV6cWRWdWhMOUhReWlXSVZwVDBLYnBYbmJtemlPdjlEOS9ldjhGM3NkUDE2UmlTbWxFaklzWWJ5VkxvNXpoNDVtU0h4MytWcHRrSTRwMjZtY3FtdTF2azZKUTJQUlBqQXlnT2xmM2lhN0FUWXdLb1BGQnFYd2wxWVBKaDVnakdTMXRIbklKNUk1Y1BoRTQwanJSQWloeFdQblNzb21DNjJ3OEtxYXJNUE9VL2xFWU9GY1F2dFZSRWliREdzd2JuY3o4Q0sySld3OGhjWFdoZWxRKzF6OGl2cWFGVVZBQkxlKzBlWjl2VTBaNVBSbm45OWRzSlVUbUEzRHVadEZuMTBibllDWHQvZ2xSTy94MGJJVjA2ejVQTmhxZ2FhcE5YbzFGei9HWUR3V3ZLUTdtcTg0bitMd2ZMZUlTMWJtelF2MFpSSDNlT2JVWVkrRjdrRXp0MUk0MnZvaEtLb1k0WHFzekdYTWZZSzF4TWhTYWs5S0J5VXlPckdBdlVXVUJmb1pUTzJ0RVlsb0RJZCtaUnlYSlNyWjJ0R0Y5RVdPSDFQdnRLcVhrQmJkYWdOR0VyN0FlMUs3aloza01BcklqUFRnS0FqdnBRdWp2UEkxbEV2ZStJa2phd0FwU3ZNc0ZJY0tNOTg2NERyTFBVdUg1SUNOZkFPSXpFb3k4dHRvWnRJUHlnVkhnMXN3OXBXeElINFoyL0h5eVd3WVN5ZG0wNW8zVDBNcE54OFRvQ3IzZ0lTU0htenJsNW54Y1RZSk1WSDQxbTBDS1V5bTFsVjdudi9mZ1J3K3ZZTGRuQVBJWDhkZ2JFcmFEa21peWNTWUFCL2Z2UGZlWUY4YnkxWXVKNFlmOTdEU1AvZ3hwdGtVdENHTUhRbmFLOFZhOXk4c1d5aTZQTnYxbm5IMHNqOEtsY0FXMlpNZWlBSXFtK2orUGc3dFEvTWVzNUxaZEhMM3drYUdMQldLbVk2dzZ6NklQMzZUUFppTHRGd09MSnFaRUlpZVpGYWkvdkdKM3VFVFdqOGZ4MUl4Q2g3RHRrWmRaYmZHNDZDOENjQzRkbTR5VjBqd0JZd2xBU3dlVVhNd0RlNEtmRTZ4R2xoSitYSGI0ajlzQ29PclRHNzRNRGFxK1lEMSt0QTdqblFVNWQzc293MHpsd0RiT1Y0NHZkbXpiMStDeXNLeGd4cjVrK1ZUQTVoekM2bG1IQmxXd2xPRmVwSXBwdm5nODkxc0JNR0VHVE55TFFFSnNSZ3M1NkhIUDRVbXczUTJmRW1kVjhld1lVZGRpSDZTZzRpQi9pS00rYUdWL0NkRDQ4VFhERlUvaU1EanAxc08wakVFSTFpVFZwNnJ5Z3lvNUlvSDRibUpoNTFUYzJEdVE3UnptLzErWkwvcjdGR2ZYdlpLZTNvcWd1UHZRQjBCSTk3d2RPT2E4QVEvT1E5b2dCL0FKNC9icEd6OTVMRHlUWW5tM3NybURrbTdpVmRUSnhhKzhDemZSRGVGdWRvOHc0bEMyQnVHdGVOM0lIaHMvYmh4MmtJc21LbGtBRm5KRHV5aTZwbHlkaWl0ME4rVkczN0JXS214aWlmNkhtYmZnODVqdVBZb3JJUUxsRlU2WmdZekMwQ0VZaHNBbGV2S0JPVVRHdW0zYktqTStUNUdXanU0eEh6enkyN3lXd1k0cW40WTRCQkJ5NEQ3bFBlaFdOK1czU29raWhRMXNRcVNjVGZFNjM3elhYeCtHdlVnQlFzN1IrdEUwSHN4dXdBUGg0eXBNZlo0dG5STWtwWWJkeVZYR2trNXZyQ3AxU3ZkRFQwTGtGdHVxcGRQT2NRbnJTQUtxeFpNSHF4NDFqTTZVWWVHS05tNUxRM3J6dkFPbTZ6YTRUdlJRNE5KakhOeHl0WUxldGVobnZObmZIZWFOb0Y2WEkvMVVIYXV6dzBqR3NGdTdEWTdjTmVPVVJlTmJVTHB4cnhLZEpBQ1NBb1FJVkxvMzB1dzNmbHBZOVlWVzIzNGRQL05CTFk3clBDWWswa1RXSjU5ZEYvRWRqYUVMa3NyaFh6T1lxTVdvdnI2d3MzbE9TTndsUmxDYktFUHJwOCtKQU14ZlFsa1Nxa3BmeWVqVWdxRnBsWWMybkZ6eEcxN2NFVzI2MEkwMEw5bGZHU2lwVmsya2lFL0VFZ3d5d3lFUnZlSzBGVW01SWhOVDNDVzkvejZQbVc0WUZ2QkxkRVowMEM3OEJ4K2pjR2pQeWdZRnlBenlYNldKMXRjSWptQUxHa0M4anlmNzBVRU41OXluYklpN0FmOHdLNkREc2JsaHZ5ZjlHeUltUmhZL0tON0w4elg4OGVNclp6eXc1YlhKdTFkcGpuYnNvcWhFd2xIdTVSSEVNZDZsaG10R1BzMFlFNENCVDRaQVJHYWV3Z01KOUw1RS9laFQ1UE1adjZKQnhXWjdUNWRicEdSSG5LTUVYSElaTGRDazh3eWRtUGZ5d0N4V3lPVklzQWxPSi9tRzdRR0l0clZMSzdhQzgwOTBodDdDQ2tyelY2TVNCa1IyMlBkSks5SGt1bGgzOEZPbHZTMVgwSnd3bjR2UlNmU3FKM3VITG96SzZ5b29FNEN1Y2JYdEhXdTJmcDdDaXJtSU5vcmlGblRkenc5OVZXSXYyY2xDQTlnWUFWTVkrakJFdTVCaWhuMkZKR0VXK3dHcGI4MjJZZEdYcFdhcVU5QmVxdG5XUEU3ejR4MWhtbVE2RG9sVHRZUElzaVdPRldYZlpyaFQwSGZGK1VJdTh5elh1NDlYWEFNV3FST3NlOVBEMGV3MzVETVJQU2JzdTUxSjBWOUVrMEpMK3RqWndtY2poTWJQbE1jaExqYTJRdEIxaEliVk44ZWxoWTFPcEY1SFBwZ0xkZk5ITTNEV3laRGtJMEo2U2Q3Q1NtY2JEWUpPRE9IY3FibmJLQWtrTzJaOXVSTGN4cm42UzBlRGF0ZGVaNkJ4SnArRlRxR2ZWMi92K1BrWDhjZUM1R3N3VFZ4eWx3aHpBN1hEOG1iay9nb0FjWEkzT3ZGQTdxUHRwOFBMZHdEbk1mSTdrYmNKQ1hFS0xwYis5RDNoRmNub3IrWnpHRlhzZFp5bklPZUxReE1aQnc4T1JHc1BDV1ByNTllOHg2UzRGa1AxS0l3MVp1akozajJ3WEwvQnZrVm43L2Q1bGhBc3VBY1lSZm5zTnMySlV3MVBrSTVMWit4S3JNSlEzRXJzZnluQW5NMllMV0RyUEkyOFFMRTJFb0IxMW5tSWlwQzNEb1Q3eE95cU1VYklja1d5dXVQeWxKZGVGVHRCRWtWYml1d1JVQkJXL043RlNHbGUxMG1zUXUzZXI3ejRGd09SeDNQdFVDL2FKOVAxNHk2d0NIcGVTVDhtNmJVbWxvaXdaNGpLV1lIRW9HUzJSYWRZSXdnQVgxUlNLWWtUSGpiNC9PTmxpR25EWDlIWEFUR3NKcHp5YUFyM25vNmR4RVVMQlB2NjFsY21QeWprSno5WUFsaXFBMEh4NHprSTd3TDB0Tkp0RDlnTmppMGk1azdWajlIUUc0NmdrSi9HT0J4WDVoR2hNcE5EQjBsbUZ3VEpCeFpoQnJWQ2FWUTcyNlo3bDhPbEJ3QlBjd3RHL3BEelZoVXcvcWswaStRREZmVXZ2WnE5YXNETG9lVXBJbEx3OFMydFFWa1FZZWc3ZGpOaFhwVldqQVRyS3ZmOUZTeWtIMnpqTmYwS0d0anQ2RWNpSXQ5djJPYWVVa0xHUkVZZjJRY2dRZkZ0Q2YyNDlrTDMzM0Q0elh1TklPUmVtb0tTSkRxbmFIb0ovVm8rUC96MVdrUnlGRVZtTHhPVU5WTHA1U0ZZdlpoSXRzUGNOVGpyeVFnTnBjaXM4U0hSV3J6c3lOaUhqWU82WGtSemlyb0JDVi9UMVk2a3VWRXBUYkpqM2VUZFVFOHUxcytqQ0lLcENneEoydStRYWIzVk4yT0xjblpmRy9XSURZRGRWRi9LU0N6MlgvRkd2dG1PQTdPTUR2SEphWkh5L1pwSlUvajhsUnF3bHc0TVlPcDRBamNINUJnbElxL3RLRU1WSk1nWldsc21BQVl5RDBnS044dVN5RVVMUW5BWjA2dDkrZmNGME5jRHBaamVqWDV3djZReW96SDgzTnVTYmxNRmJjYmtYTUNuc2l4VUc3ZmJzaFdqakpvQlk0UlliRy81NllrUHltYVhQeU8rMUdJcXpIdnlFVm1BQ1FjY0xFNVJIendBb21GRkNJVWpuM292MFZFZ2x5T2xzWGEzQXJJY29Rbk40UWxYSXRxd1AwVnN4TTZ4Z3ZHR29IWDVlazNMTFVSZWExMUZZTlhyeUROSUNuY3BMTGhTc2E3ek41RWNWanNpdzBpc1d1Wk1BVU5aUmYvbGJJbUxmNEpnTE1yZmF4UWdaSlREMVh1bnBRVFM5U3VpN0crS2p4bmdIMlhxWmRRM0pjcVhzaDhQZzFIM2ZqdDVhTVk2bVV3eXQwN29xM0tscE5zbW1ZMFZZMWZiZHpaMVVCRytleGxLZWx2VytaejNuRHd6cXBTUkswQWJHQ3g3RE82ek5TMUlOVllHVEJoSklScXora0N4T0F3b3R3bXJBMXJIVDY0aVMwamtseURYRkxCQUpLeG5XYVFnMUp3Uk9jT2Q1eEYwdmhWQ0ZqVjEyVXRua04wNUZ4R3ZZUUJPRHZ2eGZ4cGxuN05VUXlQUVc2V2xITWxNZzlXUmIxMnB0TkN1YUVEZGZWTTV1NC9kdlJiaXhTaUk1eUJyS1lPUXg2OVVZNkU5d0NkK3pnQ3JuYi9zQzF3dkppVUp4cExRc1JYbkNJa0xZOTZNNlhIQXEvQldWdEo5MUFVL202Mit4QUNVSkZkdFV6VVlaSVJzSVBld3c3M2ZPbmRIellaVVNIcW1KeFhJUSs2YUpWSG9mT0RjTnlZdjVVaVMvdU5LK2lJWHVtcUkyQTNncUtxMm5IRjd2QlBvcEVOM052bmYvTkhEQTBjREZ0U2RTYmdxSlBZQVJKYXlsZ1dqQlBCNlA2NzlKVWtpVjNYU3E3UEZWNXdtWmJwR2hFWkRJcDgwaW5hT0t1am5XN1A5MHlpUU5xYlByTTdDNVN3Ums1eXp6SG9MWDlWSEVDUExMKytCVG0zYTdKdlVlM1BqcEpxNVdMOUtDcG9BRWZ1OWhiaE9wdlFnRk0rdWJvMkczd0p6aExPTlhjSkl2TzBoTEYwYmRxQ2c5ZUZqWTd3YWdGY05TdlN1WnZKaUEwU0I0dEd2bHZrNkt5RDZTTnpLT1c5Z0JaM1pGZ3E1V2liL2tXamtPSGV1K0lhVjVsSWxBeTZidmdrdi9lOE5LWXJEMnFESlFBbXlkbkUzUzlVZno1VDRiMXVJNWsrWjRwM05mc3ZuSElVZnp3U05TOGhoSVdVRFpqdXQ3VVllcWxiRXhTVWhPSTZSR08reWZWVFFUZjNiRWQ0d0poQ0czckJNM3FsSzQvUWU4ZzByV1VhdHRDa0xXT1pTWnpNelhGclJ1eGJGMEVpSWJCdWdORTBzS0pVa3RqVWtQbUk3bUdLUVUzam1yUytabWFkQUdORkxZMStVcnVONjVnV0E1RFV4TEluckxPRHMzS09uM0gwMjk5eTQ1MGhvY05kUG13ZWF2RXRCZmRKa3hXNlhxSlkzWi9oWGdQZE5sRmpwd2tDR2VyNXk1L3hnVEIwR1FTalptdUJpTWhIa3VrTm14UldoM3gxMlVHZ1F0UllQeVRuZ1BQZVErZ3djNWRjd3hsZy8xc05UdGp6eDV1ZUN1SmlJTFErZW8zMFc2cnFyaGlYR0psWGhRV3p5dHZPZ3NEa0xaY1BERE9uOWtTTk9KWVJOZUhPdHl0TmV2MG5ZRmV0NGpIc0dRN24zL0N4b2cwNEFqNFd3MDAzVnNKNk9xTmY2dkEwTmtNVVRrMkQwTzIrOHAwMkYrNGlndDVOK3dQaFQ4VXdCU1RiYVpmOFNjMEZxekYwOVQ1YkFUY3o4c0FUcTNuVmlyT0R4SzJHUDZWUjYwMlNkVkNncWRYRkl6R2lHUUEvdlFHZlZFbFE0cVd4S0M1RTQvOFlBQ2pkZ0pxZW85WE9uVjJqOGdXZ3Z6WnA5akxkQWIrMDlsUkhsMjd1WW1CNzZoWE4xNXRVUElHd0VuY1FrY0xydWFUeGFnb3o2RkM2cU0rZko1UnlGN3VuQy9Ic0xrQmYwRXRZZ1EzNHhLSVpoM0hQSUtTTzRzRTZJcXp5MGtXa0IyUmJpNEczVElpUGg1NS8wbEFpNG91K3ByMkFYaWt0TkNSOHErS1hFWlhrZnZVZFU3K2ZVb0pvcmg0UGFMV09WZHJTS3ovWGdUZ21XbWs3NzNJMERNUWdMYTZ5dlVHQkM2WDRGL0dvSXZ3S3hxbndFZEF6QnVmYjZQUHBjY0o4bExGV2I0NmMxRWpOWXpJakUwTTVxM0RQRjYweXQ2VmUwS3V6YkFtYldiWGdlZDluNUZRZ3laNXNicDc0dngxamVBVTJlbmJCOGRQSG1FSVdPNDM0T0VjVnE3Q2FaT3E5OCtBanM4ZVhUODF6UzRaTFJ0MWM4N0J2UHNJb1Zvd3h3OVhidDdnVElEbFNzRkMySEZ1OHFoQVY3SUpqMG9nZy9tQStDejRJdnFXdmVsNnRCTi9pWXVwcmo2bzViUGFQSStEUHlUdWJnTEVoYzV4d3dJZTVCL1AxV0N1UWptVlR1Vm9NWTU2RzIxRjBYVU53UkVjKy9MUlcrVHliZHBOVTA2aE50WDBVRFU3bDJ1Y2JYVjl1eEM2d29ZSmVPNnpqc0NoN21WN09teVB5TlJjVGRtK21DOU8zRE5rT04reFhuUllrZFVRVXFMZ1FpNEpSMUFMMXE4RVdsWUYzY3gzRisrOTIyQUtsb1lCOTlOQUhvQ21zVXNxanFOVVBGb2pkZk4zL2VFZjdURWJsNjgzYTB0NDZqVXhIYi9LMFhVamFzSXNQcEJKenY0bDExbmxDay9xUVBxM0lVa2RFcmxlSHZsc2lrc21pZDgyWGtZUzA2WWFGL1d0MFJBT0FLdkFwZmxnN2UzOW54REgvTFdzSWx2VGkwWWtEbGVXUnlVSVFHeHdUUWNsc0Fvc2h6M05UbTBGM0tLeWkvOFFRYjFSOEkxd1VPanA4d29ONnFlOTlNNis0cFVKRWpCZ0huUVR2Q09wQmgwNXlwbEIyckw5TXJEdnNOa2dhZHJmY0ZubWVqbkt2YllBdGZoU3Azb2JtWm40cjBKOUxLbzJ0L0FFZFVORHpmSVZkMXY2SURjeERsdFI3bnlJeCtQSk1sUWpJNGh3aGdFalI2SFNWYnM0MlFXbU91RllkWDFsbkhySHVValllbWV6ZzhQOGp0eHhid0RaOVc4Wnd6cXBiZHVaUktIT3dPQzNZYUNLVVlXOEhscDdCNXVTTVEzM3F2eDY1T3FHMVRHdVRYQ21USVRPcmFYSHVRVWFEMHBBRnFZTENzOVZrOWsvQ1M5elhyT1pLZVFmTVB2Wm1CNGFXWEdjTTZ4bUxLckloNmVSYXpBOVkrdGZSV2tvd2VCMldZSHIvc3k1OSsrd29jVkoxNEczUURiUzNWM2VsaysvY2xGQ090aURaMGJiQ1psd0t0aWYxcWJ4dnRUTnRBNEhvY1VuOWcrRllzUHlkcDk4czRUL1VBL1hsajBtOXNlcTJuSzJpbWdGeE80cnNIWHNQaStzUloyeXRiTGlnWVZrMEZmcnovTnBHenRjSDIydTM4U1BMdFE2WkViZ1JKeFFRMGxVbHF4czFOTjk4ODRxV2liemNZcnBTV2FFeDRmNXljRkQ4N09wUWc1RWtQL0VnZTA0REk3SFgyYzRud0R4WThNUENyWFpEZHdNRXZLS0RDQTNXVnVnSWYxN2l3Ym1VRFJFak9IekEvRUhFayt3YVBSZ08xT1kreDNqaTg5Z0lwMUlLR0xoMlhYYU9YMWg2dWlWOUlGT1NCQXJYc3VVbjJYcmEvcGlQOUtmRHBEeFhmcFlTTGhkcHhnQUZTWlQyOGc0Rm82U0Z1TTNlT0c0Sm9CTTZWZUVyRnFBWjRldXRoWjVUQnZ0MC9sSlRRSUY5RFRDN1lTNjVQcnhpRXR1UHVXTUhHcXlPb2ozK1M1YnIwVzZKcFd5bE1mNFNsdUVlZkl2MUM0VE9DdmJtZGVqay8rZStmUTY4dC9MM2pBdzZQSFVBaXhGQ2JhY2lPZjBUQzhtY2xmSEdtUEhQOWNLeHV1ckh4Yyt5QmlETUl6R2JiYzhnUzFBQnNtMmlkRml0S1grRFc1YmIwWE5YL29BT3VIM2hBeUc5OWsvRkVaME53WWpzYytJenV3SjJIZkNsRitUNEUyWXVaYXkyNkVsc1J2b1BMeXp1dFdmYnUzOWJpQWJXV0dvSmxWSUNmeW1NQWxUNWdaQkNoeGM4dWpsZEVIUGZBQ2xVQzNRU3NUMm02SEhGYnI2VUsvbk5wM2VsZHFIL1JOUW5mMk9IQkJZU01HNXdyYjR4RVdKb2hpcC93TVpNWXd0a1lIdHo1VDdRZzJESTVpN1gwQ2h0elBvZDdycURNV3J6OWhRdkZvZExQT1FSR28ydjc3VUgrcXNiWmJOQ2w1RUdZS2xON2p6NWZxd2wxOU05ck9kNU9jU2hZSHNZNzVCaWVoZENzWC9pZTJiR0EvRG9PcUx2MndrS21TRzh1NXhMUDJPOVEybkdDZmxVbkJrdWNPWjltWFk0ekJjcEpOU3pJTWlsUU9yMmlrWnpHQ0RxS1pDNmRwVklMSDJKd1ZSWTdjZnhTekkvZmpxSzNubmNwd3JydFZsb3V0QXVMVnZCMWJJK3JyRFRZZDExVVNISjE1cXdSOVJVa2Y5RVVIbURjemQwK1ZFVjYvc29ZbVhyMENBalZibEd4VlZjVzV3OVl0a24xRTFOYXFQWkc2ZUxRcVFJNTdOY1FNdzh0Q0krQUUvZWRVUHFmRmxHZ0hSK3libEdPS0dubUtBdGhza2hKWlRvaEQrZG9KSTdFcU5TRFo4RVk3M2YyMFd1eGVzUExvVjJOdzFqWDBRcGlDZTdBM0xIR1NxS0E1MXdMdzhuSHU4M2ZqTkNUWUhXM0hsZnVkdUNmYjVXKzdtVFdScmN5aEs2b3V5UnBxTUVyUFJDclJIZ3F4VEpWWEV5Q0xmc01zaGY5Ynp0eVJxenJzcG5CemJtcHZoTE1qNll5WDQ1b2pVQ2hkUTRlblVNbFpxVmNJdWpZQWpVQ2h0NTdHNDRJUTBGUTBoOVB5Z0pmb1IreWhSQVNxTnY2VUZuUlExSmYvTjBSNWFyRlZNQ2c3THE4WXN3Nk9uZ1lYYW5Sd0VJelpkQTJ3UEZPcVJGL3NXSjVVaTAyRnNLMzFxbTlhRElXWDFKc3BsNEJpMjFudjdhTzd0NlVqUlBqWEdaYldRS1BVYmZlVlppdTdLcVo1YmNXUEh0OUNRVlZtQmZlWjc3VHgrc2Jvalo4OWxVdld2RlNYZ085ZXZURDl4UGVrL1piTHdrb3Q3WTZUQ3JYUXpKV3F0aElaUi92MklrUWRERjFUQ041RmxWMFlNZS8vY0g0a0dLejlyM2tTRzR1VE83Q2RSTGRFMTBQNTh1UTVBWHk1cmlIbmU3aDF6WDVDUksyRjlSNEt2b3FHaE03UWErMDNsbHFFQXBadytxN3A1L0NMNHVIS0cwUEhrZGxLMit0VzRSelBqSXBXVnI4ZWhQY08reWNnU2ZDMWx1bEhuTDlac25nVlMzcE1JaXFFbE4vN25qeklrdGtZTll1dzF2NTdPTVdTRmFGR29oVEcvU09DTEcwUEFTTGR6WUZGa05WeVhTa21iQkNTbURlZ1FCSXZLZUpWSG50TUgzTU94VDR4VEJWWk9BNzVzdkJrTHlxTnJuUmdnYjNHVGdMVGNDYlZYRDRxUWxib2FmWkNBamUxR3pRMzlrb3MxVitwQWV6Nk9maHVseFVteWlweG03VTNZc2NEbXB3MjdES1V1TG1HU05Kc2lLT01qWEpvRE5ESVhkVVVPQnBlNTczbUxxV1VpN0QxMW5ZQmx2SVlidU1KZFB5UXZTMFFzeGhtK2JYd1NsdVFTajNXL2dDdzRhMTRkMVBvQktZWVgvY0E3NkRoM3FUa3Z2aHZyemRIc1luUmYxby91RU5NQmhZQWkrb09KeTkzYklrbkZURGtoOHRKMWVvZENJSTBkemxmMS9JTUNYZDVLRkdjSTUrYW9DZHFTK1lhQlRxcU9IK2o0aUhoZE1xcFBDeC85UThobHkxWnNZWm13VU8vek8yRzM2MTRRK09IM1V2KzZ2TVZ6SzFuSnRUZVJSNWhNeFFZTkgxYjF2eURmR3E1T3Z1N0E0SmlXZXBFUW1kNElWaHhQcGpxRzVsT1VyS2Iya0EraFVIR1g0MGpFbVQrbXc3SmdOOUVyc3BRdmxyTGpJT0crVUpVdDVsclBlTk9tWjFNajlmcXh4SHpDQmx1N3FqNnpPTFNCaEQvUFFXd2NzejUvSk1VNGdsS2M3YnFWU21QMVZlMnVRaVNXeHJOWVcvTXJsVlhkOERROExYMDMzcmFlanhIUW5zOFJoNDZ4eUx6aGlMS2trekZrOGV1ZjZ1UE9jYWdHQTZrMnJrdExPNCtGdUkzOHl6dW85TUM4djh6TE50b1ZXKzZCbWFXYUpSZlVIOHVYSWZ0citMQ1JDSzZBN2oyQ1VLSDZqR0dyZzFvaEh6bC9aUWwzREErT1UvMTJpNWtIdUdrN1hkVWRVejBGVU5vcTF6aTRRMGUyU3p4K0RsRmxVL1ZmdDVaUjArYkVYTldjM0g0VHBiUGQrdFM1K3ZFcFpqMExNRUYvM3YyVkFTQmhTdG9walltUEhaMzllaU40UjZCM1p3WlBDVDdYa3krQzlPMVRnck10T01aK0V5K0lnZEkwOEVaT1UrbDR5Z2E5V3dUVmxvMzJiZHU3OWdQeHFyMG54RnNnUTlwSkdRS3BjMWVIVCt1dFU2b2VJZG5zYjF1dWVSVVc0WFI3blczZ2tyc09rcGVhbDQrQy9tbVJBaTdUTkJNbTQwZWppeCt1S3JtTE5sTXRET3hQWnZocVJSYmY3cnVKM1c2RzdmT1lEbFE0eXlJQ1NaKzBxZzl0aTZPdFJvNmFBdWJDS3UwcHQ4a3J2b3pBUUR0bHJvSXpLaEEva245RzhJdmh5U2RsNldGTGhtVzVYOURXNlVLbk43S1BPZExkaXFUUlFiTGJqTWlrZFJQR25tNzYwR1V5VEliMjVjcU5qU0lqZTBIOWIzNTVkQ1ZrNzNQK0xtNFRrYVF0dU02M2xkUkRHNjQ1ZDJSWjVBYTRTN2MwRFlWQ1I4V0N6a2dtNFhjaEtvN1BZUlhLUis4dHNqVVp3SlpSbzNFUmNGVy9sQndzOEt6RWcwdlFpSjk2aTBLbDMwL3dwcnhIbnV6cDc4MEora2VneGhPQmN3enpJeU1IVG9EalFvS1BlQ0V4czdEOWRmdVI1bjBHdXU1VU55Z290dDl3TnJTWUkyZ3pIbGN6U0xNRnhtKy8yd3JxdFkrWFYrSWNXRHZ3WDQvazB3ZjJTckt2ejBRVC9NSE12aG5OS2xQQ20wdFpsWXV4QVd5dzBxdnNkMHRPdXBDMUtiUUF5MTdmbjBFaW1PYlU5QmZTSUZlbldIQjJyVlNuT0F6OVZzc3FKeTJsWkdvYk9EenhyeXh6NGhSTHJ5akRuOEZSSTNjQWxUM2cxVktwK3dPZGRqMEcvdENpNkxiT1A2ZlBvRDVKNXpRNjZBUHF1aHdudHJTc2NqdFpjd21LSEJENGR3VTZTUURKQXBOMmNUdCt1aDRDVzAvUEdLRDdSdFhhZWU2MEh1WlozYnRRK1YwYlBEVjl1R2gyTXliNFp5WXhIZ2ZLbFZNMnZYZ0VkQzBiZ3QzQ2pTdTR4RDdZbnEyZFI1V25HbXpGZXVsakdwWVNsK2RoazdjTzhjTGM5azNjbWxsanpkZ1M3YU41TWtqUkRDUnlGampaenFlTk5lbDY3Z1Fybk9jc29BdkZrQ2ZRZVpTRW5wZ0h3QXNNeEFxV1IvdDhVdHJ2MW5WZlo3eDEyS2l0MU5VaTM2VXJycGg5WW5YVVk0c0x2RVZCNUtQZ2JDN0Vwb1FERVlrTVV5T1BKQXJLeGthUERDeG1ONUEwZGtXbzBuVU0zbTBGRU10aEJEQmMrcHJ0TWN4UDd3eFVURXFDRktCWmozcmFkcnZOWEZNR3l6bllWZE5qb0NUamhPMlEybmxRbmJvbTFmYnp0dUt0eWJEblBPcGswRFZPTjNBTmFXVHZraUgyMzEyTUlFREQzRm8xSDdkOFRHSXhFMlZGQkNsUWpCZDFkOUROcDZFYS9nOExqL0pJZ3ZUOXJSYlh2TzZsOVByOHNaeXZ5K1N0QjB4bWFvNnBaQjdXcE5XVTYzNXk2RWxwVGZLNDF2ellWbFZlWVlFYVVpU0graFlOMjd3WDVrUWpTaWttODhBM2FsQzFFYjMyTFd4SHJRbnk4WmVXdmQzeFZzcVIvU2d4YUR3QXlJZjR0RWthMVdKdWZBR0lYcVV5VnozZXo1UnlLdER2RFpoVmhNSXFWK2xRSUpwZWdmSTc2SkI3VkZLbWYwL2xyUTdzUnhRUVN5Tk8yOGtRc0tiRUhpeTR1TXArdjlvQ0o5ckJDbU80UDRsRzhidzNEdnF1Z0oxUHZHbHgxT2NTQnlBWEEzT29MT2N5N2paNGFidXlya2p0ZEVDUjBaRllrUFpTY1p5RjVlQmgrTUQrSUZIQnlxSktZZmxENnhJdW5RYUVGKzFMS3hBUFRHZDRic3hGdDhMdGZlbDhKYlZEdEd3cnJsdnlVTE1xN1dyTkV1WlE4MUlEcnQ0bXNqZkx4TEZXYjBxeXZLTThra1JZYjlMWjBBUUpLd2pWRk5hN0ttM1E1V3lHMnpka2tnRVY5MWduNmlpRXJvZVpsaHJCZ0d4WVIwdWNrZWVnd25MUUxRdGQ5SHBhRFIzYUZCMEhmZWo3Yy9HaFp2dmxzbkcrUHJDR01pdm1xL0oxOUJNT2g0SXlnQkJ4MzRXNEZleUJhL1dGMWNBcjUySHk1aEE3aFQxd0F5VjRvbGVSUGpRcENjaGM2TGJFY21UQWordjR3Q2d4bGlaYkJVMkpvQnNwc0x0R2p1VFZaa2FuZlgrRFhSQ1Z2SHlOcmJZM0FrellOajNWbzhvSDBWM3l1RzA5RW5ibjcxeTVtNzdlK04xaFhla3ZUM2dqNzNhQ01zMWErTGNYdVd4d0xMSkZrK3FGOHpvdTV2WFJJQ1dwS0FISVpvUHBsMlBvMFJyMmEvYWhVQk5EeHk0NjdValR2bElnejdNdUlsOXZYNDJpdWFCS3FneVdVenBlN3FicHlFM2lvQkpSUHcvYWl5STBWbXJWM0d4enZDQVVXUWtaTGRqT05JUmZEK2NLbDBCdk90dVFjdFRhcnYwOUlzbDF2MU5RRzgvRWErbm9WRmx3OXBwOStYTUNoWmE5QUM3ejQ2SWJIR3d1NjZUdVM3eXptaFJvZTQvMVY4RFJ6M0VycjdZN2FqbnpEdUt1WVFoRll3aWNyZi9HNHBFY09TK3JjZUR4bDhaRzhkZkZwT0dvL1lhQjIxUTFmSDdoM0JtbHpjaXNOdUlxQUFVNXJwdldVdW9ZcGM5cGVMa1hMSUhUZjF0bjFiQy9ic2Z3WW50TnNOc2ovSW9odGVPMktrTHQyNDg3cWUrSmJCZWNRQ2JjSkIxVURGK1FpdE5NUlhyY3M1NEY2UFV5Mys3YllEc1Ewd2krVXJGaHkvS1kxSEdqV2I4bmt5RFZrN2pBRjRxQzVOcGJyVzdvMTdwWERkRkkwNGR3R0FBS2d1NldYdlVhUiswTElOWlVMLzhhWFZ4RjhzeEZOTGZIV2lVRjM2cVlWd1dabmpZanNPYkYxUTF6THB5Y3lQRFg5SDlnczBxSWc1K2dzVmNjdVhocGJLRExNbGFrSHVGMUZKV3Axd3N5djFnYmlnV0lvOHRwNmNMTkduK2dDTzlCWlVHUm1XUGEwaUwwbXhodDdScnRsTUhiU1gzSzJSUHdTSzRHZDFtclFEWEVjMTE2aUFoMjB3ZGFoN0lYRmhPZS9DOUdlLzYydDRVaTRVemJYTGIyckY5K1lEYkx0U2o0OGR5Rlkwck9WaW1IQ3NUTWk3ajhKaHN0ZkpEVndhTDlDU01ndjl4bmZXeGg5ZVdHditKT3I2SXF6TTArZTNEaU1QdkZzSHRQT0pYS3NIYzZ3RmU4QTNYMEsyK3FLYjhYL214YVlBQkloRkwreVJIbnpZV2xrQVI5MHVHVDNpMHZzTi85M1JoMGlmeDZ3T1VMNGNNci9PS0dEL3Z3TUdGUll0NFB6NEh0THkxTkNlbFhkb29hYVRvejdZWkZsdWl4VmdLemZjL2w4TFEyVmJ3RWFwQmd4eWMwVnRjSGE3Z2xpOUcyNTQ2R0FNUXd0R25qYk9DZ3ZVSlN3UWdWc3NvSnVoZjZFSEx6QjhNWmNBa0RKbGZsV2NnUHVPV2YzTFJzQ1BBTk03V0thRlJWczhzRXpBV3FCWWJxWWRjM0xONVBKaGpTOUJYbVpkR3h3RElOYXF4eDJBYWZOWXVNU2xrbllkMVpFa2lwL1cvU3VQM0NYSHFCd1A4bDhyZFJUUWFFTFZ5VVBIUjh3UWxXd3JueVQxaVltREUrT0ZkMW1ZVG53ZGlIbUMxL2xMQTU5MFBkUnhyUjFFbUpNZUhJMVJtZmVPOXpKYkd2WkpDc2R0emVOYmVHV3JBOW9FQ2VlalZuUEdyNWhUMER6WE5kVjh2YkhGaXNYWksxV3k3ZUxxUkxjWkliMlZNVEFnQkFvL2g1S29mMmlaUmVTelJWN0w3TU9Ta1g0ZVp5Y1JWY2llQUdnTWdNZWg4dUdIVjhhb2l5R25IZnlSTkJaUk1uNlhMdjRsUjNNMjVBV21zWEQ5YXVyc29mbFR3aUtLaFdTY0VwaHZUdVBSSlhJdUFvU1J0ZGZ0SmJvcitncmJOaEFoY2VseVpYVExZQm1idDlzWWZERW8yYnMxWkk4c00zQTZhZjZFQzB5UVQ0K3FhM0J3VDhIM0x5Q1dwMXpldEFRMjhxK3JFcFdLZG14VkVtM1h0QWErWUlyazQyREY4ZWZnNEtTSVFZTVlxWVlNdnl0N3V5SUgxWk1lL1hKWVk4SjhGbHdCQUdQMVNROTR5VUxWNE5acndLWFFBYUJsZkVlZWV6TjhzeTBBNmFrbS9rMzJmcDl5T01aT0dPbGxUOUNVR3krcWlPUDZZSnFTMi9SbkhneHljOWhEbXR3LzN1Tmk0dGh1dThsZTFLQ1ZDaU1mY3pDTGxXeHl2c01YVlpscWM0VEt0M3liTFdta1ZxaDErZXBzS0FTL3o2MU1YaVZwem9QRkZ2cWQzdGh2aENpNk82dExNd2ZRYlFvMHdjeWtNcGN2Z2pNaGNrNWMvWVV6QUNkdXdhWUp1NFVKMVhtKzdPVy9Yd01kLzhGb1grOFN5SWNkTjQ3bDJFeGdRbHp4dVBTOVFPOHJuc2lRT1ZlaFlRdFpvTjhxOXBvdTZqenVIREtJekk3cTRISHNhNkFQUUxoalBWRUx3NzZkQjQ4cFdNaVB1bzE0eGVvd0JhSjc2czljZlE3ajh6STJNZzZpRjJmRC9BY0RJdWcrU1k1ZFBTVXBxOFFLYVI3R3E2V3dmVzREUVhoTHN3cnlveFl4eVdkdWU4VFFKZUNsR0JRR051K0d1NFV4SDFwL21LK3FCK2c2VnZkbHdyZGR4bUt2amZVTXUySlBWR0FYMEJJd3dFNXdyTDRBOHdCelVxYU4xaktNRjFOemlEdjA4TGhZc0MreUtGanRDQnhIKzJvVDA3OWMrL3FDZVFWWEtscFZaU0IrZkU4cDFpbGo4TUlWbTEwV3NWQzRlY0ZBQVhoVWRCeTEyREdvY0RuZVB1ZC95bGZsRkxPcXFMSStRaFhzZkhjKzNRN0pOM0pXN3lLVmtCalpwWG5Za3hrQURnVWhaNm9MaS9qNnhNT0VKTWgxaHl2NXlWUHlnb1dOZE9uME4wMGI2K1gyV29Sb1lNT3A1dnVPQzl3Sm1BZTFDekxlQjlpZUk5YS84Y3hzSjhHZy8yVUtZQ1lHbE84RDY4MWpWeW42elhiSCt6MGVCSVhBMmFaWlJHcDE2ZEZEcmJsSjNzWis3ekc0bk45YzFubVBuUUZCL2FMNEE0bTV6Z3VUaDRiZTFPNHc1czMvMENoRHZQVkZmMGdpeUlxUThYQ3U4NmhnOW5DelVYMExZS2pvZXp6YStzVnFXTGVXZWtNWVY5ZDdTT2xRQ3FuL1dqRk9ER09TcXVrZVBzWTMxVW1pa2I4ZTdzbWZRdDE4QWx3OG5oMEh0eUExbWZmbmZIemxkYXFreGFhZVhxNm1yUURPME1zbHVkVHppVFhUdSthUCtVdlVIeWhqQUZrK2xvM3BtVXRWalVLaGN1WHdFQjgzQy9JckpMVDFPYTM2dGdaNmhtWFJFbzVxMy9NT2RzT2VOSlpKZXpCbXJRakFDS1FHVWxxUXRvM3pIVmtxOWpvMlZXUUZybmFWMk55VGRCVytzeHJKSXRzd2RsK3NCZEp2M1loaElhdkJ3a0lDUWpGd25mcnN5bmh0U1prbWJRQTVYaXBWb3V6bVpsS29IV3paU3BkNnkyL0oxcGs4M0EvVlVHcVBTM0N0UXFiT1RzcUhjRWkwc0tCK0pidEdCTXVPMkhpVko4a3JSMnRoUlZZQ1NkamhrbHRoK1BIRzVJODB1aHFUNmZRMXJvUjh3UjF2WkpUT0xsb094VjA0bFhnZTZGMWtVaHd5K2VIWllBOElpRFZCR3g1SDVsYTRJbW12VkFVNnU5RllRZVM4R0JUQk05Mlk1a1cwelRoRTBxNHdsb1NaM1lPTThyYkRJK0Q2dkg4VUFUSVJQd0lIdklTSGYwazB5N2FWVUtiSVJNbU9SOUEyY01mUCtqdk5UeVh2M1JPQ3hEeExJZ2hOdEpDb2pzaUExaW5ZSStXazB1b2thOHIwaXRYWW53QVJ5VmpINEhOVFNXWG8vZE9PWFhKOG9CbHhRY2J3UjFGTnZGbEI4VDgzbzlQOENlR3JyeEx1cHdad1VuS3l5dWJoWFc5Vldoa3NnMHZwUkUrbFdtekhSQ0x5SmUybjJwdTRpYno2a044eU9ITDQvUk9TWjJqZk9ETndWc3JZRk0zbkROYVZHamJVbGhFSVRFYzdBVXMwK3dYUksvWkxubE9COXZrLy9XcjVENEk3a2paQWErWkhHQVlEUS8zODdVZ0Y3SXlXUDN2QkY4eUVJVnB1WEN6Z3QyZmpyejNvVnc1VlVEZWFmMEptNm5DRE5FaElSSmk4MHllNzBtMmZJVTVwY215OU1Ia05tSXpLVjBUNkk5cEdUS3NlV3hTTytzWHJkLzBqcXMzTXd5aU8reUdhd3dhb0xaWEZxQXpRRTV6Z3NtZXdMYXdzRWhYNVZQMFlHT00rUlpjNFIrY3RQeUZxL2RGOTR5VnpKbFJRcldMTFpLTFhKMzVHUjZhN2RuQys1cWZJeitEM0lFMkUzN1hkcFJrV3VqNThNNkNsT2doazd6clhMaWpXTkQ1ZXhEc0l4TjlNVGR1UFN5NEljVm4zQ1g3R2wzNlZpNUhNSTZ0alVRVVkxT0lLNWhGSUZ0ZThGYmdSVDgvd2ZIZjhIVUxrUVRCbFc1UVNsc2NjR1I4Uy9hQmRRQ1VueTJEZDB5TWtzN1gvOCtKWWhscXdoa0NmOHQ5L213WDc5MUlUdHAvUWZ1ZTdIbUFEMmUwZGxKSnQ2SlR3aDVlclFtMEhpN1BCU2piWHJZWXVXZWtHR09EejMxMUZ0WUJYdEM2eFZ5OTVZaU1uRlFXWkVyKy9YY1FiRmZoWnRYSmZ3R1BneVBGVXM0NFcyVEtmSktJRmJVMGdYTDJzWTJIWWJhYU5jMU5RY3VYUE96dnZDb3h5cVNUU2hPazVabXNYWWVvbzRmd05qVWR1UndlVktGcE5tYWVPRE5PNjlzcXlXQ3lsUkYzTVhPdFVYNkh1c2Z1amt5ekRINys3Vy95V0MvMy9LeTRpanE2TDhsdEI1a28rMmcwaVVLSjZMWUVhVlZQZGpQUnREMFlnb2M3NUJwbm8vT3JzYlJyZFJaazA5K0lIQk5mRnZUVDFoTWMyNUU3T09zMlJPTnVscTc1NEJ3Z2Z6WWM5dHk0OE5ETWZJd0ZOSlAvTFN4enp2bzg4ZHBFTHhqZ01KQUpPa1JxRDcrT0FnMGN6QUJmM0l1RUh0YTFvVkMrTHdZNmZyR1pqdmJEaTB3UzlMSmI4eXovWkluNVF5cFRPTXJNMVh0NVdmVHhIckw1VEczdnJMZ0J2SktsUjdyaG9GMlp4dWc0U2V3ZzBtNWVBSTdKU1h6ZmE5aUZkYkNRaVU5OUxCQUE3QmRLUXg5NFRqWjZtcHlCcUhOMmNBWDdyODQ0MjR1Zlk1eEJ0KzMxQTNWc0VRWlAxZ1RUUjhDUTJPMitNUEVWSVRsSnpQNm9WUm9VdVArWkxtUUtjRG1UNVF6VkNXK1dqdzFHQnJaOUxmWHZ6RFJYdlJMY05lMXFmUzNuUDFDL3JWdUtXL2pBVGpGMlNuV1RLOEY0T2FlbXBGbnlBWnBCWDE3SlVjMmIzeE14Wmo5ZGI0QmorcFZYWlFCdEd5cisydHVCSEdVTzdmblFzR1RtRnBKT2ExTURKSFF5Qlp4aFNUd3kzQ1FwRGZmNmw4aWJkNmJWdDlXZ085TmFTOWNZSzIrQS83YWtXMmxybDNSMDY4ZVJYZ3FiWGd6VzFpMythdUZJN1ZUWVR0a2gxTlFiVW4xUzliOEM2M1k1WG4xS1dHUUJwRDJESnlmWEZVbXV1WDJaNHZIQXFuOGZMazcrVzBpNFFBMjlUbGxhOHlsMkY4N1piT1gwTjFmRWl1aDRQQUN3TjZUdUxUYnpuTW1YSWR1Z3pPWTU0RFcwSUcrQitYODhtRzhwdE9nVkFxMlkxVGF6QUNpK3hmU1FML05hK0R2M1hoQi9vdHRJMlVsYUVubEp3clkzVUV4ZWJNbGthak9TZ1VWZlZoeGl2SmNhamZIakdtZHh6Mm9URWM2SU0yaWx5MDZMUWtLT0R6SVdIQ0RVdTczUmw0RXBBaGRXQ3dCbktOb1Zkb0lQQnU2Mk54ZDd2TWVwekFuQjdUZmJBR3I0Rlh5ZHVDQlpXc0RqMzJhWlA1WmV6cHFpV2ZWV3Vybkh2dWxxM2hRTEFxM3lmanhFUkJkQzVoaHkyMWo2ZzNKMjBQencxTVE1ZTk4d3RZUlY5U1FZWEFyeGRKY0l2dVppb0kxaGFIemNTRWwrZGx1bHFacjNhQ3pzMTl0QjZJMnRIN1prQ0ZZNDNrVUwzL1hGZUMxK2k4RXlpdlRPRFlCeVV6RU9zbUNUVHdNRmhzSHpCcExqVkhSUlI3L1NPbkJ0bW5QL0hobkF6UGhRYXJhdHhBVjNxdmF1TEI4K0YyazhhTkRQclhodEFyaXBoQjdFbTBiRUxIeTZsQ2x0czExRnNzODhMNitHMWdYbnZtM2Zia0V6d2tSdjlmOVdFQVlUL0JBcHdCK0M2d3Joa1ZpNXdRdzZISFFJOFhQOXNiTGlGY01sN2QyUUlOT213dWNsSUY2c1hUWXRwUlJwUTIzN0dycWJrWTBWZit3WFRpWVZ0b3NNMkRidklOU1Jjejkzb3dVc2pnMURCNVhvYmNIRTBPbGZXVGtyZUg4VXAwcWxpL3E0V0ptUEpMLzNkS3krR2dLeGVMSDQ4MkxkRVdxdFAvZHY4NjBVNUYveFRKMWx0RU0vcC9YRWRHWGMrbDduWDByaTM0TlhiWEhORU83bmpwMWJiS2Y3K3RWNW4rYVBEUFU5VDEzaStqbkg3cWxSZlBGOTZsMTJzSnJwVGRkLzhoVG5Ici9TZk1zRGRtVXNMcjdxL3hwbWNUSzlBd01JeDZ1NzloYXd1MnptN1loK1RSbDZUU2hOSmdhaDlIQ0RkL0pNWE9zWU9MMWRKVTVnMS9LS3AxYk5uc0puck1rdEVYTXhxaVc0cVM4R250S1hpdXRJYWorUE4zS3diNVV1dzRpc2htRjFOZTVkbWE3QWl1YW9NMDhSLzZBL05qZ2txaEp4TlZqMVlNTTBRSzZMTDhvdUFFYWRNRWZQdEpoWWRkWlg5VnhnczVIM2RyQ2dlbDBuUXhDV0FNclpZWWNhR01tbEIyMHhBNGpRRlhBQkM3aWVRN3VhUTUya0VGUjBxVHJ3cW1ocERMQlNCOEZ3cGxtaEpOM2Z1dlROclhsRWU1MjVvVEhQQ0todVFlR2tVRzJEWW4zUGlOQTZnTWhuVHhIZy85TzJqRm90SzR3aTdGN0hUbTA2OXdqVnFJTTUrZUNyMW90dFlEcXArN1VQT05qSTU3eFR3Y3d3S0VocGY0SHM4NDdodDB0QkZEV3o2bE16d1NtU0xURHhIMkQ2UGdweVNLemJDOXdIUzJ0bUF1WXFJdWFrWktMb2VFZC9KN28weW45OTVxM0RzQ3lVY2FLSUlBUjdveDJqdUdNTE1MZkQwT1FQSnp3NmMraHVWekxPWWJsQ0xlVlIxRDdQWktvbGtVVmFFdjN1Um9WeHdHaE5SMnEzcFhSei9RK2tId1hLTFFYbXBGczZpOU9zYS9veStmdkhQbk1IL3BmYzZveFExUDVoNHBCSGhHQlY2U0tWaUE5VlJGcmp0VTRXZ2UyZXYvVng2cDBUTElZcE5BR2NTcU9NbDdITCszL0g0dXI1NFYzWWVZb3RnRkh2ZWZ6ZEFBN2F4dXMwaFJPWkVJMXlYMkN2ZDRvWHU1bzRYaW54Yk9QNTBJR3JHdG1xZGxQaUhUTVdqTDlJK0JuOVdrTUtaWUUyQmlOSDFqQzNPNEFFTGR5QVc2YTA0WXRqNll2elc5TGhHNGplcGNRWnFScytDOHFhK05BK3hUUWxxWStyTHNXQnFua2paV3JQMjhUYzJ1VEN1VFBaRytwazZ5UjJxRlVSMExpY1JTclI1LzN1dGVXR3JPcC90ME9zYXU0VTVJYzAvcGxWY05seFY5WXpXZHJNRjJ0TUVGK1dBeXU0Z0xrRGZQeUUwUVpiUnV4V2V2QlNvTHRWQ29GRDNqczBVWFN4L2c5NzdpQTNXM3doVUwzQ1dtSTljcFZCOGVqWllyVkhRaWdiUnFsTDFMVm5LZTA2YVJ0VnphZDNFU1dMRTNCc3F0T3V1WnBOM1JsRUVZTlNzYnJsSGNoSjNKUE9EcG45Rk9Hb2V2M3NETXVGbzRxUkJIcjhPVW5UVXAxL3M1T0RlYlg3V1BaSW1qU2NKamVnVllnV2NyTnZDblFIN2lLUlRHR21lMVhudjd4Nk13aUJnZE9TV0Rrdld3Ti9wQkNxMDdVR2lwSWxQNkp4ZU9Pc2JLbzJ6cUtOVUd4MElWN2F6VVltYWRWbXloOHJZeDc3ZjN5bGtRY2JiTXlveld2Ni9zRTY4ejYvUU5XWnVzbGlGYmRIbXNGaDFXVGhKeGlSRjA2d1lDMHQ0OUpMcnV2akJoRFduWHJrNGVDTnRIMmwvY1BNMm82SXkyWU9FNzRzRkhqVEZtRDVYRFFzNTJZWkNVSFdJLzVWZHZXWWZzNzE4ZHpDUFhRZFRVMzgwUGdJcXpmSGJ2Q3hZNHp2OEVDc2djd3NqMy9zZHFUbSthNUNoUkZHT0tlcFVZdlhBNjZkQTJFS2dYTldVZXpuYmtNYzFEdWVwZDdQeHBhSGg4cHcxNkxGNXNhcmVZamFHclI2YnJ6UHdwd3BXancrOThkd3FsV09BbDRZV0prZHJkSGIzeCtabEh5UjErclF6N2NMaXZCOCtmRmkrU2dDU1hvZlRsSnl0dGJvOEVrbUdvai9Rb2dkclkwM3NMK2hEWWN3a0dVKy9CditjRUNQWjFucmpVR2I2d2dxZlVSaXF3Q3hyem4vYUY0cXB1U3dqbXI2ai9TaEVDaDc4V0laWksrVnlBTDRKa1FkM3FWWnQ3dmZGRCtWdG9YMGFxdGxwRVhJb3VQL2hta3VyZkhZZ1U4OW5zM2dueXdnZjdUTDJtUkl3OXJuQkpZMU5aRmlpU1VhOW1hOXd0VEQyV09Zck55Q0NMR1IzV3RTVklSY1NmK244QjBRMzA2bnBRdk5nOVVjSWs5WXJUMEdGVVFJV1pualNwcFZreEw4N09aMTFseU9pa3l6RFdlcDREcnlWTnlyZDE4MUx0OHJ2UU1tamRlVGdvQkgramdTWWFrcWdPVDBCcmhTNE1JMUMzQVBYVnpsazhaTUVnRGg3WEVFOEg4U2Q0RGhBTlcvUFFpVDB3ODcvMzMxdlA3R0ZwZVljZWhxMmYyNEdMc2hxYkFTekVMVjQ0UVNNOEJNcVNmWWsyV2FWY2VKM1lRSllNc1FNcEt6Yks2Q2ZQcGZveWpVdmtsNG05SWZxanZBOGtmOTJWSW5DTTIwMjFvcXNLVHNDa0xmcnlBd2hERnRIK3hyUE1ibjBneHdVUGRKYVNhZEFSOWFzbHlsOEZ6WGxwbmFhRysyZFE4SXlpcWM2WGFoUncxMHJra3diUEowcFFXTk5LaHM0amFqNjN5QXB1cDkxcjR6K3pTSHNwTFBMektwdTNkUDZDd2VEWUVyRjdpUDRObTNZT1RuNFBhcU5aVEoyUzVnNk1zelhGTEZXQTVxSUs0Z2dQenExUHVQdGl0dVU0d3BHMVRoOFFpVEFPeDhXNmZVUEFERlN3V3ZwSTBJSFhSYnVtSldsRWFJd1BPV1E2T1huNHpVZThzeFMvL0VpcExxbDlMVEZRc3Jyak9wWXQ3ZXZ0ditqd01XVnNHQVZ5aEFKOUlmbFBOUU9OK1I4STZWa25FcFk1ZFh6NzRnTW00eVhiRHNwZlpNM1NwNUU0WHV4RzBBREJGZFVxdVNBaS94eG9lSXoybDJmanJpOVRST05TYWVXN3Q2R0RsYzBwRDl0NkJhaG5EMmtINmdLWW8yVzlnMVN1SjRXNXRVNWtnNXF0N055ZEpzVk56WVNhcmdSMHQ2NG5sbW9nVDRab2duN2h6MkEvSHFMUUp0cnlDT0FEeGplOXFQaWxaSWErcDJGNHplMnFpanpHTFFCbWFvNzVIV0JDZmowQzV4ZXlISHlacUdmcjlXc0hXN01wSDVMWllSNmlia1VOSGxHejF3NVVlQndadU00bHp2YTlWTElaNTNsek1XWWdMbVRocmppWXZOcVUrTStWNDFjMVFYczVjcmp0NitrbzZRMCtudlFyWDRhS1R6UVF5Y0hkMEdRWS9ieGRCZkVGZ3Y3UFB3OUVGcFY2QUppeWxTTkRsNWpLWithY1JhWDhCUElJbG1LSVVoMlBTUUdESjE5NFgxdWVNWmk0bmJiL0dKY0tEYWlnNisvNHlNUFl4MWQ5K0dHMk5LY0VwNTF1WEkxSTA3S25LZlorT05IdzIyMW03OWdaaGl1ZVBYSkxvT3A3RkN5UTdqK1cwTjBMV05TbmRhUlB6anUwVFdiUjczY2d1WGQvZ205cmdrOGVyU0F5VHVsMEQvYk0venhlZmFjWTBYM2g3eCtsZ0ZpVXNzWkd6enN1YkJ3K0J1eXlMKzQyVDZRbkV2U0ExeDhDUDhmNUoxemRtUjREcWgyTisvclc3THVtL0pvRmtpK0w1SER6eXBsY1g3aGN3QXFBS2orTlNka2NpdWhsaWw4WUkwWHNoNlRmb3JpTVdZQnJQMDZhZzhKTzlvanBxekJpbk1oUGdhbHFyV1pneXNObWNyeVJpOE1zRHJIK2tKNTJwWS9pcEFoeXgrUlI2SWc5RXJhVnVuc2t2ckhKMzNHYklqT0dRb1ExYkxnMUF1SlFEUmU0OTBRbGlLejZjZ0o3TkkreWxyREdOcm1CWFhzd2tHbFErRmROOEcybnJwNElDK3FnWSttZGJjOGI3b29ndDNWbVFJQzJpUTZhV0k3ODB1K1RpbHdpaldsRG1MbEZ3Qk5jbDdlTlptQjFQOW1UOEwxbDRTUFF0YVlSMWJ1MHFUMTEzVmsvSFYySCszaTVuRUx1OEVlUUFtbHBUcWlYZDlzU3pNUU5hVzZyOEFlNGNBamVuckpjc3Q0TUxXZXpLdVBqUmoxODg5WUQzTlp1Y2NMQUdlQ3ZGRHlJMDZteUUzeUNRUUMrVHpyNGhucnlZczNRVHRmOVA5VkoxRHhlVHBJbnh5MEsvdDVQeVZ0UDM4M2tZclMzRTJadXdIRlVMYzkyUXRTSHlBZzNNTTF2c1Q4V3NaTTJYRkpNcHEyQ2ZrUHhKWmZJcEdIVXVkTG43Yld0Tlh4VlNPOVBoWFZ0SjRJRU5NeEZoTEpvaU80THZ5a3c0RlZ3WmJsY2pDK0lxeGNZcGV5NlRvMTFEQVBDYUwxVzBjQ0xNYVlQTnphbFMzT2VJcGxPNHJnOW1QNHhSMFk0UTNqcjNseUJOUkl2SGcvajcvOUErajZsV2tkMFV3TG1JWE0weUVjMXZPVjN4VGRVWXQwSDVrNzMvcFlNNmszK0liSFRva3B0MWpYc3ZXSVVJN1cyUVZlMm9KS1duL2JYQW9keFFTVnUvZUl5bzVRZFVuZGJ1Q2hjeE5waHJuaVcxSXk5WGY3aTYzdFVPSXRYUllGU1lITThSdHpTdVNUdG1PNjVpWXlnK2dxNHVxN0VsYzBGeHQrckdqa1NVakVrRWlXVEpXZzMvVmtPVjU4NWZZK24zOVd1d3JtS3MzRDhIVFFGK2tZenFlVWZCV2ZjbFZXdEhxMjZZdEpLdnBVdDBreDcyTnNPVUNHSThBTnU5Q1BPZmR0SW1HYks0UEJLNkp4bFpwdXBKMlY1Z1FyUTBtVXRseTVWN0srOVlZT1YrU04zeThIWUFpS3pTdWNJZ0lQOHB3M2luTlU3cndVVHBUdzZMMlN2d2U0VXJFRS9YUWtSQ1NnTEw2bmRSSVpxLzJ6aGREajZZcDFTbkVYR2tBSEMwMUREdnE2ZVhPV2VMK2dCZjBrdzhLVjI1eGhiK0FZT0Y2Ky90Rlc1aHRhdE94aEI2UGZoNVNKMkU3UnZkT2xWT1ZlaHk2dktsK3JrZGZTVmx0WngrZnhMTkVQRUtGdFpPTjliME45ZnlBZDVwbmlmaWc0TDJjWkpMMTQ0UVYxZmw3Tlo2ZnVTN0ZHTHNvLzN1eDV6UUw4NDE1OWFJT2t3UUJwRm80bjJYK0ZxRXQrN2YzekxZSThSdXROWTNYSDJuRkNENnR4TXBIeVFEWGdMVmhKdkRKbFM3Wk1mUzFpenZ5NUQ1TW5UMzlvbWlDNUYxc016VEFhOVJTVkRnbzJaZGhzZkZ1cmNPekRqcE5mSk9nUEZvLzg1OGZHWGZMMjR4bXh1ZENMSy9UQzg3TDJWTlRUT0p1QlBZcHNMM2xPL0JkWXBWYkszb3pDZGxvTVVobEphNVdWcGJSTFRvQ29mNGUwTUMveng4QjB6Z0NQWWNaWHZ2ZFQ3V0hKMUxveHZWUGwzWEJJNDBybjR3bTR1Y2pBUGJDUmdPdWZ5Nkt0YU9nTmhtS21CK2V3QU1ETi9yTmdEd25EcmJRcnY1NFpaL1M0WHlMdnJSUDhQN1pQbzJDY1liVzVIdG81elRxbEZQSXR1K1hxVFBiTmhqcXF6VlZXL2FjTWtiTmFYeXBJRnl6Yy9WaGRGTnI4L0MvNzZsRFBHMVlsZ295ZUZCUkpxQVlXNDIwVmpaRlZVV2gzbDAvUUFvT29xLzJ6YitiNVNMckliYUFwOXVVV09XTkc4QzZZSnBqRFlDelZHZXZUem14UkNVb3kyOExjc0crN2RoWC9vSnplc216Vzg4bzJRTlJCSlhtZmxuUkdjYmcrSElmMTBlSzg0ZS9vSktVMkNLR01NTmlHSVFTM3REdVRKT2tRRTB6QlFTejM3RXZkcmhGWnFJNTVQc0VJdHkvRW5Id1RJR2Y1WU41Qm05ZEViUXg2KzIrUHd4a2cxa3pHQ1hUQVZMWDhuU0JUdUJsNEZsUHN0ODZzcDRtd0dPYzU4UGltMkg0R083VFNaaC92bDNWOTVNeHFnT1RnYTRRSTJNQ2cwelZLSHVaM0lIaWNDU2hvbXVqRE9vYlZDeDFVS053dGZhYnB3NGdhY1NYckROTGpzakNOa1ljL0VST2trTnJ3YnVDYW4wZEQzNUdNWHVIUUZsMCs0SDBONC9QanNhMzlyTkNOcHAzU29kSHhMa1ZoZ3VyYnFqVStEVThSTGxkcFRaRmJDQ0dla0RUUytrUnpReDhjZEQ1Qllzcm82K01pV3pvQkRxTjFGZDV1WnZxWXRlQ3VYS1RsNTNTdVV3UmlscmIzNkNtd3pYOWhvUHN6RGRVUVRxOEpNVEo5QlRmQzZ2U1VZWmx3QXlpUEhZanpHVmMwK0RCMTVaK3E2Vk9nMk5UV0VRUGkvN0JLWEtFNy9GMU1yYlE5cmxRdjQrZWkxcEt0NjZ0Q05oYVFUT0srZzVLajdsSGFjRVdYMmNZMkNLWSs0MmQycGZxNThaQUdHL3UvNW1EVE5xcDNldzdpY2FHQit2dHFyUG1CR0ZiMnF5Z09tbElMdDhoMGZGVlFhWFRhZW9TMUhoZ3Zuc2NCWHpaZ2Z1VWpQbkRyS1oyV1AyRS83TDY5bHVCYkxEaWVPcEJRanZOMkVUVWtnYm9oeUttUVA5dkVwalRUZXJXM2g5SWFOMklxd0J6MDFNbWtEVFowNkc0UWVPbXNwU2J6c0wraXVPTWluT1AzTWRMam9lV0ZiUXp4NVM2YzFWemZVaGdYNU9QTlN4ZkkrUS9ld1FnaW5lYUdBVG90QVZaczlwSkxGRnI5RHNMRHFYdUlWZWg4cXgrQnd1T1hQUU9oeDlHSVA5OHJSSVJqV3pOdzNSRXRpRURQMEV0Sy9ZMVRvSlp5bk5UdFdmZDZGT3l5ekJsY3FCNWNHSnhtbVdrV0hRbWhpWENTVmwyTnVMVVdlVEtWeDRxaUxhV0VDU0NxOHQ1ZCtEWWc3anhrUUo5VDJ3NWE2eHR2bGlHMUszbmhRVUhaVkJGNC9HbHMvUjdXa3dXdm9QYjFtdU5GM1cwY3lrcUs1a2J5YTcyQ1ZaeEJERDVjeTYyazNmZ3RHZXpvS3hnazU5N1ZobjEvclJ1Q2pNOVNpK2tSVkNxNnExTEptWXlJSjNpRGxuR2VSWHp4MHdZQlJibnF3TnRBTG5HSUt3a2NiTlgrczd3MjIrQVdGeVdndkJpMml2VTNndXJxS3pHVVhrZ3E5enlnN0MvMGtJQ3UxK2NadnAzMUFlcnlzUVRsSzhEd0VvL0g1K0x3bnN3MUxoVlJTT0dnZDRYOTRvenNQbXVOQ0xwNjhDaWtKdm5hajQ5bHRMcitNb1JLVjRnV0RPdDRQd0phMktnZXdnY3JEVEJPV1ZUVDhmTVRERlpDdXY0eXRLdCtMdU12cUFLLzBjS1dBb25hNjg0R04rdmd2WEluYm1vbnQxQWw3b1dnNmU0UFVqcEJwbktnWFRPNWQ0TFJ5c0xLWkp0cTQ5VDdHb2hFa0k0ZVBjTnNXcG5iSjc2YjFIZnFTNW1ESHVKTGJXd3dqN2oycEdXeGlmdUoyVEJnb3h3Ulh0ZERzWDFudUdlbk9DZFlBenhuZk9uRlRVaE9SNVVSalFyMDlibTRGbDhxaTd0ZkZEQTVnbkppVzBmME5VL1dtc2xnUXM1eTB0Ym10VUxHaUFQWHFUVUJPN3QwMHhNYXFmV1JUWEJ0UWc3NjA1Y2h1V211U2U3WEpONzc2OTg0dTMrcUxCNEI0YjRVYzcva2pNRWsrVWhsUnlFQTRWcmxuVkg5Zk9oeXVlMVlWdExiWC96NFpETkhyR3VpdVAvTU14Vkh4aE5HUUpZN2YxWjRETktqNitlNE1GVC9zQWtxcGZzQnRWd0ZsOElLVDJJUWF5OTNVakRjaFhWNG1tMytIRkMwbTUyUzFraVhJWkFGRUlQOE1MTUF5VXJxYlNxTWRvZU5VZ212YTFLU0Y2djJtV0p0YVhnQTJkcm03azhhcE1yL1ZMUkNSRUF6RGJIUjVRQ1JTZHdLcFp6L3hsNVRINHNZSXQyOTZ5L3ZwYUovTjU3RUw0LzRwRmY0YWtzbTFvRDgvL2pneUV3R3lYUDNmNkNzT3h5WTB6MXhrNXpVdXZzb2UvQndqV2dnZG9WR0ErYmNVSnZxRkZMZ2xIclQvUDFTc0lETkN1ZWQ2Y0R1Z0xyRFFzVXVWcmlVWExMcnlGc21YMWFCeE9VdndDd3UrOFNVWlpzQk1GNENnNk9RM0M4ZGdVR3RXbURpMURldjFXRDhNL3pmeFJyd2MycmY5MzhZeEhsRS9FdnBPZkQ5QUgyRjZQNVREamNsV2lOTjFCb2tyMG1MSE40aHdvcVkzbG5Kek9hNGxDcVArNnVudWQ4VUIzbk5hOW52RTZwYjZReWdMU3RMZ2dhRk1JWEkwcmdGdFpkbzdRZnQvTVF0Rm9ud2QyKy91ZEFwaThuQ0pubDdsMEVYTHkwWlBUOGl2Mm4yN1hnc1JJQTE4WTFSUFFKU2FtN2hadnByemNudHdkekRsNDB2RDNDazBQeDY1QlFUYTZUUElOaUljVGMyenpwTGVCWStXWTJmYTZmb3BIVGw4YUF5UUM1VWhEMWptTk04TW85R1JQVzZSM3hibDJiZWRiWjZIUnVhc3VwU0tnRVM1NGdvdmY3Y0FrSlBqbVA2YWxpKzhDS0hJY1BoWCt3QkU3YXRpejdRSDFxRUxrU2VueFpoR0JpUTZHWXE1WllVbU0ra2kyOENGaG4wV2xPa2swdWRkdnFiZlZDZWowYk44T1duWnJiYS90bndhZEJKMVhFM0FVM3FVRTZXSzVTQ0doRDFDSUVMckdLclRjYU5sWUI0NjFjZUE1Wk84Rzl3dFlIOU5ub0pDejFlckdWWVNVYWJ2MUh5RFBxd2NhZ1RHMmRneStOV1VtY0czYllkNFVWSUlRQlNhc2pudncyblNteUhxUGY0TEdwUjRpQ0tZRnVIdEk5Yk1aUW82VDFReW5yakRHZHRlNFhabHNmSmNDNThKelJtUnplYm4wQjVrZmV1WVErQmY1dHdDc1pNNjhVNzJWOG1GMzJ4WG1uSi8zTzRHcGZmckZWWlJZSUhtb1M3Q0U5VXFoR09lUXByQ3B6WHVXNmZ1OW83aFlzblpRb0JsUFJVbVp5NzlsKzN5Qi9ZT1ZmZkJ1MnVsbTM4cjVmeGo0NW96UGhXZVJneGZJZW05VUcycEVnUU5BSS85RWNxdDNxc0R6TytvcTR6MGxENkF2UVlBN1JZN1Q5V2UrQXhFZllrQnk2MnkxTW1iMzdlMFlWNTRlRk1lM3hLQm9UOG5SQjhXdHJQbDZpTVhxUE5EZkkrTUt1V01CTXNGdG5JSnQ5clBoRWtiUEowYXBBQUpkb3h0akh5NnF4c1pSSC8vYnJCTGlYYkpDbTJTelVZeitGNERta1NNcE1icEdpbTVLd1VRbE83QzROeE9GS3ZQOXJqK1FSRFpPNGl1T1A3ZFBNY1M3cndaY2tEWWlJTHN0aHRuRE1pRkErZ1dHRnBJM0wwWmpOZjFEVWd1OGZlQWFZMTVCcmo4NE10Wmk1d2RJalNsNHZPcDRXZmgzVXZSVm8xNXk5UWsrQkRhRW5qWDQ4SlFwMTZaRVcvR2RpZGtQMXMxbzFaWmp4OHZWNElSNVZocnhMU3dQOEs4a1IzNHNYcUtqZzR4NENxajUrbW9kYnJQMCtrNlpNRDVUMDArZVV1Q2luSFF1Yjd6TW9FWmtIUUxQd2R6blJWUVBuZ1ZoaE5KSnFScVJSRmhLWkNzclJqWVRsMGJJZm83U0JjOHJDVGhSM3NqWnNDQzJPNC9abTJKcXlCWjRoV21ucDJrSTVvdllYYXY5ekZVbWxOMnBwbHVHR3RNWE14NDFhMkhKcThxeVZtdDZxZm8zcVlTcG0wN0xSNk5GNXF4bSt1VHZmUzNZVndnb2M3eXdVQ3l6SW1zNTlaYlpNUE9idXUrNGpKcldQY2dXNHoyeVdlMlB5UHByZkJhR0lPaVlyUWRyZDBUT2piRCttOHM5TWJnNm9NdjEwTEs1SGFUTFRMbDVUR3BpekpNa3FnWm82VUJxRlhDSGJ0Q29mVTM1VkIrcGZqeEErNzhIRURYeHFPTnBWUGlOOHZBTmUxTldtY2JwNUpVZkt3VkpyeG9DTjlxS2toWjFTb0VkdTBPeHRjQUtPUUVpU0dmRFFlNnFQeFNYZ1JDVTZuU3hzL29hLzF4SHI4Sml5ZnlkUzRJTTlKa0tOODM1dk1QZGZyaUtIRDRoNHBuanVBMDFsQk11Mms0eVpxd1QvemVKTnlndWpwMlpMRjN4TVUvaVh5UjJmVzg3K3ArNi9wZjRtRU8rMVhuZlhDR2hyeUFmUTNYeEJEd2NoQTJZQ0lNVDRQM0ZoaGZJdW54RFJKUDl6ZDR1ZVpDbjh5YzdqVjdONi9nVUZwRjRsTHZkQXJtS3ZIK2RyL09DRE8vbEdmTGVtQ1dnTmxMOStieGxXMVBNTGJKMTBEclpJM21ocW4wZkFyekZqNmNTei92aDI5ZWh5WDFNczEzRk5OcENzODVlODNHaHArTWRpdmF4UUtQMHpmeGt6SWNmaUJ5azJSUXhSRGw1VGFWcUhRQXVRaTZ6MmFDbkczV25YN1JIWnRvc2FiRXhYaWtJd01qY0dHWGlORXFFRjFwWGxJZFRhQXgzdFlkMjArR0Q3U2JoQUEvQkpOUTlGdXFCdW1nOEo2Y1psRzBLUGtBMzlEaDNxcjVESHdGaHlkbVg5cEUzVWlTWERnN3hoZWFXZXpyQkYwOWFzOWREbGQvdDdEZkVFSWtsVjVpVytyWFJ0QXNCSmJySFpsUDVuSTdFd1B2aG1QT1RYRW5uWElwb1ViZEVoYTR4dmJRMWZWenQrOFZkRDd5SWptVmI3VmpOL2dtdEdTeUF2ejcyeXZHSDRyT1RobHBldjZkbzZjQVRMejNYVWRLWGVsRjg2ZW5GcEhMZUlmZ1FqdUxuSlE3ZGFaeHZiZFArRTkwUmIrRTI2aENyUE11MlFHOTZuT21NMEtzdXBWZ3NFZFZnMlFoYkZxZ1R1TUp3TGxCd3JBcG5VYmVLNmR1K3ZNZzVpbkNGNHpWa0dWTml3QjJKbXdHdnJQWThZTVU1U3Q5alVnR0hwUkplZmMxUFRYQjh1c3dtOU53bC9pTG1JVFJ4VFpFd2ppZnphYnFSNkR2Unk3eVZSU2tkbTB2OUxrUFpKelpSV0hEcVU4eXBqMU1pM1dybVVpeG42ejREYVFLMHJVMkw4M1NLYi83aXE1aG0rZ0Y3WXZTQjhaN3dCbXZ3VEEwK1pVYzZsckJIUE5jSkorNE5renRvcmtvVUg1OHB1UTJSUTgvNldYS2VnRUltdHZzS3ZVYkdWTFJjeDVmVTNqUXJoUUs3N0s1R0F6Z056MUFHeHI3czRyWldscjlWNkJYbkw1MU52MTFaeEg1S2RIZlgyU1RpWXFaWm1FK09SYzkyTld2TVVWVWovVU9KY1h6b0ZQSXRCdnAyZGxMUDd4VHBkMnRHWm1iSUtPTEV3bU1nRjFTZmZBV2Zacnk3a2xmbjFqMTRDcGtRRjhTQ2x5ZForV2NsaE9wN2R6K0FRbmkwNWVvVU90ZmJOVGZxYUtqekU1Q2V5TnN1eWFkbGc1bDZHcHQzWDVpNUpDQjZWbjhWb3JOaCtoQU1KS1dsUE1YYmQxVDVnWFE5bXFha1VlaUQrbGExUUxRaHlXV0paMVhUb2ZNTnRjRDQ0UHYxaFZkZEljaktCb044ZThleGRBc3A3ZE9kUlQ4NU40dlVubENmY0cyaml4TTR3TUU0dS9keHFaRWlyWWxKNFkyWlcyQ3pSV2VjazMzWDZPNDQ2eW4yTnhwVzNRbnc5NG95QTZ0TGhuWWk3OHNEVFpPRDJTanVxVnRpY05LVnRKWGQ5b0lmRkJBcEhWUE5Kd2swZ3Q4aXFrTGlNcytIcE9TdzlsWmVNZzQ2YkZrdWZRbFB1R3hGejNFejVWTkZsN3pJWkZ3ckZtd2h0NkxaQUl1QkZqaTc3dDRXbFNrQ0xDSDRzN3Q0RkZrb3d1cTk5SXVzSWM4TkpSUy9oRGx5ZFJ2czM3NjNBR0VXNEFKZDFwZzR6S2xDdnJ6RU13TTJoUW5wUzlvVGc5VllldTVFUHQ3QTVhVk1EK3dvTERYR0hFVWZTN2hoZ3JXMDV1YTZlRFZBeEJva1VOWDhQR0RCby9UVVBwWG9nM2FiNjhNS0MwQUhLd01DOEVsNm1ENW5RT2F1ODBpbjFHMVhnNWpqVmhFcWRDeHM4T2wwSnEwYkZoNE5IZ1RiWTBzc3ZpZTJHMnFQLzhvNTlJWGR1QlQxMVROYlhpdE0wRkZNN1dUTzFpUTRUa1VaMml3M0FrV0lieW1BZFhQUm5CT1pwci9heVN6U0JlN2lVa2dpNU5pODRlS0EyaHp4WXRYUVRUZFU4WWpGZnRiRmdCaXNVcEJuOEFHRThqM0hxM2t0V2hJYktzeFNHaEZsQ1g4ZlA1a3lBd0ljd3lzQWhGbytwSU92d05TYjhXaVNTeWRzWGdaVEUvZ215VVg0Vzg2eXU3N0hFcXJHWmMxYUdveDFGVndiNXlybEgwSG5GM0RLVkJMS09BdklYR3pGWnQ5VTNYMWR6S1VzYUU0UjlrUjR3eGdoeGNiT0c5NDVxalNKVXZSNXVtc1VHTmVCK3JUNFc4V2laNGUxeEl5MzVma0VBRWZtQnNla3NEdTBENG1yaVJ0WUVpVmgrczVveDB2aW1nSm5WQ0hlZ1ZUdEcrMWJBUE5tbnd0Q2pPVU9tMzg4MmM1M204dU5Ma29RWXVvY3dNanJLRkx6amp3bnEzeVpZdjlvMFlTTzdWTU10Slh2OVFDOFFUc3N1VHUvMm1MbWVUMzYvVXJmSVMyVURIRnBQN0dwVUhtZHBWZ2N6QjIzUld1MTZjS0ZJUG1DMyt2K3BsVjAySmJvZmRENStOc3dvZW1OTTNzU3E3c1pOZlVSQWlJZzRvb3lLajYrSHVmd0tVZzRXUXF3MG1vL2lDd09udWFKM0RyZUZtdnVPalBqZnVUY0dyRjZKNDZ3M1VpWGVlVFhMV1BPYTJYaloxTCtPdzNXMXBhOXdHUGovZE52WWJtaG5kbkJ5ZXhXS2lRbDZuRFMvQUkyaFpmOURMSnhIRU5wMmEwZmVZejJRVkFlS1NDK1gzd3VRa0UxMUh0OXhoWGpNMUI5aERjRHd2SUNGT1pJMCs0SGppTUhRUXoySm9GRVhCR1NvRzhqelZyQlRkdGdQaVkybTRjd3RkY3p5VW14d09QM29saHFEdzRwSjFKdmRVMEdCM0JRWnVrU0VBWHAyZlQ0djdPbUt0OUFHZ0V0SFFVT1VWSHlpT1JEZ0pvRTd0KytLd2VodHoxNXE1SWxqdkdtbkVDVzlkampXMEpxbjFLVFhHc0FQMFN2eFg0ekthTVRtY1dPYmR6T0JtTUY5VGFNcGJUOUdMV2l3SHNJU2c0eEVXUlFtUXlKWXlGTGZveEFUSFRUQUNvRVgyRGRGeHI0NGZDc2JtRG1idTI4YWhkd1BZcHVUWkdBRGoyd25iYTI5QUI0aXRibCtHNTdwdWIxc1F6cW5ucVJDK2NRb1lmOGZwY3NONDdyeENWYmhEV0dGd2FmS1RydkVqRGF4RUNWYXVHenY0SWlzT3lqR3d6N3ErNTBtbmJLMHhXY1Y2UHE0TjNaSGF1Z0NYTmpUcDZBSjI2WmdjaHdrL2R6SWdLbkZIb1B1QStQemhIT2FwQ3JzV2dKL2pSOUpYVS9NeWczcndwNG15bHpjOTJqaFRnWVM0RmZHVmFXcDQ4VHdwZVhFNzgzbEZ3RHRXdVJ6YTMrOC9TeFVZWHNGRGRTb2FwTmp2M1J1Sk42WnJ5RFF5d3ltbDR0anc4UXZPVStVK000cHY4MWRhOTFESHZLZDIxa1c2UmZCOEF5SmxsdHlqWG0xTXhDRUsxWjJwMzAyVVN4aUkwQUg1NGp5OUFFSkM0aXMzcHJWZ25vMzZtK3E1dUpFRjhub0o0cTBFdVM5MGZ5L0p6aWp6THk0U1RsT0RpYjd2UnRXSkRTMUUzNU5BRFpuUkR2RmdjZWdaY2lCTG53M1pmMWZyN3AyUC9IWnpyM1o1VHJWOXNHTHU5VmRPd1prdzc2anlOeGwzZVpQSk9neittN0M2aTNaQ3ViVU84N1JhN2R1Z2w4N1R0TE5LZFdnQm9IY1BSRjFqOGRjU2ltbm85dVFsd1ZDNS9vN2VhbzVzZnhibEtUMjdOSUxUS1UxeDVQM1dLeFUwRjJ3WlI1YW95UU5oRUk0T1NMTGQ0U0RxeXoxeWtYZng1bXYxMSsyVmF2Mk0xenZXTW1rdVdTU21mU2hPNXppbjVTOVMxRmN0eDdOMEZoSkdiczdVa1FKaURKa1dMNWxmcGFzQ05aMGtiSjRGY0RxT1JmQkcyYWR5THdyVnp3L0VneFFIT1hxTFBSSnBTMnorSkk3OS9ZVzBOZHRybmFvSDFFNjd5MnZhZGJsY2tjUmsrYTFCSU4xeG5qeUNUNEs5VC9xUUU3U1VvRFFSNnhqT0hFMWpVQUtFK2Y0SGlzSEwyTiswSUJGYlNsYWszKzlBQ21NY2JneDdsaS9ENk50UDh0K1Z5QmNWMkh5U0xTN01CT3piS3BwZjRqOVY0QlRFM1FBUmhSeEVCVkMyTy9SWGs4ZWttUzBkUHRTS3dtc0ZLdjhMVWJLaUx6cDRtU0YzWURFNHNtQUsxK0U4c2hrS2tqanJhTU1FaXJLUXFERVF3V2JVMDJGSW5TTEI0eW02M01VUW03Z1d0bFIzeHYxOTBkeTMvYW41MXVwZGp0eXJkWXppclhjK1NadG1Nbmhaa21PQnFwQ1lSbmZzcSsvVlpWU3I5ZTVQQitqZ3lkUzU5NTdEbXQyWDZLaG8zMklLa0tPb0o3UTVrWS9ZTHVyYms1LzNNc0Y2Wm1lNGhLRit6YVNHeE1nUkJoNFFEZEFVMlg5V1Z4eUVORXVyK2RWcWErdTFxdGQ0UFFXdVk1MGhleXRNbHZBUzJHOUpQdGo5cFBMQTZHSllscTMyOG8wMWtlaFJXWU1RbVdPV0svcGpoZmJRaVdrMno3d1RsazR4bjNPVjFCZm0xbE81c1VSZFlyaThzNWNOOGVnZ2VENG55eUJ1czM3cU9JcVRJbWZqTUI3VWcrQjc5V1JDSVdPMk9kaDVoYXM5K0pDcVR3ZmZ1c20xbnlhT1lhbkp2WVhTY3NsbHdSNHFId0E3ZXB1YWF3NHRISHhXSkFXa0lIQm9mdjk5UjFCRGNSb3gvRi92anBrQ1hmOGdHTm9paDJ6dklsUDh0TzJNdGxsYUZDT1FNaXpKUENsN0pmZG9mSVpxM1hmZG5pSHBTRjlHaC9CeDJteVRjUmpuZU4ydldub1VFZU03c2IzQTUwaGVCTWxXNStXQ1B0VUd1aVJjR3hBc0NXMHk3eEY4eWVCeWNKZ205c3NCeWxuV1ZLZlVjN2dVOExTb1dXaTFqd0tVdGhjL2JLSVlsUlc2U21PZ1hyWjVNM3dFZERjY3dNS3pDZkxTcnY0MkJGcTc0Z1p5N2J6aStZajEzaEV0QWJoQlFJUDNwc0NBV2F0ckhLTXpXTzJ3NWt0cEViUjZYSzZsNEdpUjRNYzk1NnBpUUViTmY0ZlNsc045dzlFQXBGSGFQd3V5eHNMUUhrd05BdkMycnNkVGVZV0h1NEQrYkk3ZHhRY2VjcC9iQVpsMHhQd1VsYVVjUU5OaFZOMXhOMkZmeWZWdUFNTjRBSVMzTXZ5b3o2dmc2MVYvYnF1alVlVlVhbTZBNko4dTZGU2FXMUY2YVFvNWdlZlZwZTNRbzUyM1NDbG1ObVViQms5QWlObmtUdm8rWXczMDh2WmlXN2t5ZDdDcFErQ1U5RnBhQ3BzOW9XMG1abGdXTUFrN3VSS3ZQNlo1NFFZeEs5YmkrUno0SCtrZkZvOC9Dc2M3TGdkSWNSUjdiSUZ3U2xueUZFazE2MEdoNC9nZVdtcEt5RXVKbjVNNCtkVzJ2ZUdhZFBIWUxKZWhOdmF1R0I0Z1RLWmRPUWFERU95WjVjOVRjTTAzT1UvOVAxdVV5SnBrVWpMaDNpMGxabE1aemRVVlNaQjFQOVkyUUl4UU1yNGowMHRjdEJxMHliWSswSEg1YmtQSTRQYS9BcXZDa1hkY1RtSTg3VkhFTW1xRWoxQXhhNytiSVRRbnZQVnNSVWE3VkgvZnhDcUZ6RlNDVFVKVUZmb1dqOVYyajdxTzN4YUl5N2Y4OGQ3QTRPSlJBTEU5ZWcwYy8vTTdBNVgvNStwNEZZU0NFRFhtV25oWVZzZjVhRWFPcHBrNnhUZXR2WmM3aElQTlN0R05HbXdHSjRVNUluVjBWcTRzK3VoeDJYTlBPaHk0ZXJQRXBqNWYvUmJpMS9ISnpsREJDaW9aLzZNays2dUNFaUxoQkd5QjFpbWoyYm5oVGRrQUZ5K3FDRnlDTmpJcXBOa3RFeUQrVXkyZENveG1za0Z2dGozZmVpNmpLamNqa0JleVBGWUlmM0dFMitQOG9PempyVGwvbkcxaXcvMmZneDhEVVpEcllHbWpmZTlwaXZ1TWxGWmhYdlZJOHBxc1UxU0hiUWhJeEd0WlJubG5YOE0zUEhSSnVQZUJkWFV2MFo2eGwxOHBhbzM5R3h2OWhwZU90bWZ6OE9VVWZsWDRyOVprVG1sYVhQMnlVUHJ0dTdiY3d4SVIxNnNieUVVSm80eXlNZncwYnJsWXpoTkRLNiszNXY0V2cwa0dEdGRkL2tzOWVZRmlXcEpXeXByR1ltYnp6ZHlUbVkyMEtXWEU0WVMwUWUwZ0Y0NG1pYVNOeWNDZWhZdGFjbzkzR1FvTEJjMGl6SitqV0tIU1hEZXR0SWVFWXljd05WVEJhaE14NjE1MWRvRm9id1FndmlneG5CdmpkZXZTV2NHR2k3ajVPWW12NFFVRURSRG5jbDlMM2lIb0hPbzc2RU5WYmRxaW1BcXZRWHpvcHdHUnc1TGZ0MDlOT3dFYmFSMUZRbytnNllwWnJ3djF1RElKc0M2VjZGZTZhWnZ6ME1jZGhZQ0Q4c3h5US94b3JjNnljbUYrVHBvQVFVa0lwaXpOR1Y0eWl6QXZNdktiTFlBeVpDMmt0M29SQkVkdzYrSDIwalpiK01iU1lsMUtaK0o1M2FWU3lqUE1CNkZCTUNwRUNnTlFXb3dWSkVaZ1k3LzkvNUpzQ3JXS3VMZnlxWU0rOXhZa2poL1NyRCsrUWh2azFOejIzZGNiNmFVLzd4cTZxYWNyRjZwQmsvYk5vSXRqYlJud1RWdGFkaHhRc3YzdWJPQmtnZTFweTM4VzNvMGRZaTlJNDFxMnppazJTbkliTlA3alJZSklMUVZTdVMwMXdPSUVzM0Jralo1VExHeFZwR3Raa0Q5UGFMZDdiajlrbFNXVlByQ01DSDRQR1RtR210N3kxS0oyV2RxQkdhdmVRRVhFNjZ2T0N0QXlXZVZtRkUzcU9DdzdITnhhNDg0VERhZDJ1Vzd2eWVsWWc4cDVjMmRTVzdzMHBpYVVVMThGalA2Q2NsUHdWM28rSEcva3htMUJJbUU2T2loQVdVVFZHRXBGVzZuL1FiSDRBN1J4Qlk0RGxKN1MraHBMakpnQjV2NkVvMzlnMFhWenJzcU9Oc1RhcThEU21kRVg3cHhidzhIVStkdk9mUERvbDdKU3ZkM0hPK3ZpT1B6QjZZM2tBeDBTQXVWOGJOeGFSS1ErNHBESjdubzhOS0I5VCtINmk5UWpPUEZtY081ZmZGS2hRUXR4SDIyekxXTHFWa01mbXZLL2RzblNOc3RqMnltbXplZ1NvWWpWdWJZSW9SSHFidmxHelNac0VIRnFkbm1HYkwvQy92dEduM3E0TzNYOVhEL25FWXBjeUEyNHNocTFrQzRzWDh5ZW55dEE0aWlmRHRwN2Y0a0Vzem8xay9KTDNDS3BnQWhwSGVNVVNibmU0YnlkTHhBZGx6UTZ1bmRLYmtTSjEwR3BEdHdXV1NvQndWOEVUdERSaS93a3BGSzRyMW5pNHFXREEyUkE5UlVUbDhqbkFrTnZqTy9WaTYwd2NxcTUyRkUxdlFtWFVOd2VpMVpITWZNdUw4TjFacGZDY09wQ0d5M3M1b20vSGVsMmo5bGlyV0tHRmg2bEZXdVBCeVNzS1lEdHZVeENkOGE1QVk2T0NRaFB1cTNDV2k3SmR3dDBvdC9WWFR5WE54QnEwS092ZG12dm5SWWVzS2w1a2hYQ3RlUDlBRkxaNndKT0tydjVsKzJ3SUpPcVBGY2hFekFVUlcyNUg4a1dmU3RKanpFV09XTlJDVGUwRXpNMHBxSUZkbW15UmpRSHR4YUVvQzZtb2twQ0t6Q3pQRDlBazRkbVZNQmt0TS9hUENrcmJpNDJJVjZHUVRSWWtIOUNxblFKbWtSVkJnNEF6NWdCR0JEOUIwNGJKSmtjL3JsRDdMVTVjbXpsVXpnTDh0Uk5vZUlPZ1k0T2NZTEp0TUlzZ3E3b0pDR1JRT0hSOTk5RWVLYldXZVJ4cXcwNGdLS0laNU40Nmt4NFlUc2xaZnVsdXN6TGZURkVoM2pEZS9xeHhPazdvcjJTYTlqVEV1aEpZZ1IyVkdOWmNnMjR2RjhyRFVxZEgyWGZyWGdrbENoVG1VekdBQVdRU1BOZjJHUE1SQ3dNMUZGeDJQRHFHT1A5K0NISkQ5dEIxM0NUTXlRNU5CYUlybXVVREFaRVo4RER2ZDhGbyttTUlObFZDeFViMXRKRVRrcGl5R25hTmpwZ2FjREZ2RjZVSjhjaXljT3BrSnZoRVA2b1dRUU1qYmVab3daa25jenBrL3hCOW9kTXdsdVdRNEdxSjN1NEdPeUJvMnA4M0xrYTBQMFliOXVHUFEwQlU3RVlGRzNoRFlQVThEc2xydkI3SUt6VERmN3ZtSUpJbWYwdWtIRURGeVovSXZUVmkrZXIxWnFCUXZxSDh1ZnEzTUNnaVQ1dWVsaTdzeDRqdVBtZzFiNHJITlQ1dk9td1BlL0pTbXRkZVNEWm5kK0ttT3BNSWxNTHl0OFlTemQ0UW1nQTJNZTVYRVJWeTVBNFRsazVZcFpLeHp0OTRxRDFRTGRMakNzL1B4RU5ZUWtPSFFCNVkvanVSc05rR25rQ0pUTDRtYmM1Nk5VUE42ZUhrR003STc3eW9GMndKSnR0UTNmdXZZdmliUHVDbGJuQnBJUGVYNmJHQldSd1JWWHdvWTFwMXU1TEk5cE1kSDNsZUZMeEFzZzlVTWNkdEJjVm15ZTlNT014Q2c5Wk5aRGFaTTQ2dVZFK2d3VU9WZXhuRm9VcG9Ya01JNklJaXpWTUZ0RmRJaDY5Q090MlZ4SnpBejZHcFZvYkowWVFSbkZVTlpOcHRtdnZoVXVuNFVrV0VYWkxzSjdFZFV3WVdGMHpHL3dQWkkzSHppaXhqODZkbTBnV2I2ZGdwaWpLaFozT0xTY0lSNmRvYS9Pbm03b0NQUHlpejE5UzFLNkthSlNGNjBLbTlTcm9aelJkNmh5ZzN3M0xlZUp2V1VBS0Jmd1IxZnZIUlVyZW1laU42b3lSbVo2WGxPZSt0YVQ5cS9JSlNhQnZhRGFMaS91RWFXaUxWNHJGTzJlMi9TSlJpTlM0SWx1ZFdZTVBsd0lpVytWZ082R1Y4TXFacjZKZC9NdHYzdnpYa1VSWFZVakRFdkhoa1JMSGIyYlJFWWU2SWJveWVXcVJ2Ui9mMitsa2k0ZExRR1pWTVhobEc4c3grNTN6N2t6U1ZaUmxtditIalMrNEswZ3JWcnBKOENGTkNGWnVlYVV6RnJoSElKWUZxMVpLeFQwekwxZjAyMmZxTW80azlweEk2ZFk5U1BlcUhYZnd4SEZRL1lKaTYySE9Rd1hlVmE0ejdUUVdFeHVIREhtYlErNEdid2kzaUZwVUpweEVYUmdqSkhwM3J3UmliWDhtaEY3QVFMVmJCZ2ZaVFNkY3FxMlJDSUpZWFZnTEJxRFI1bnJkajliMmt3WlRSaDdtRHdKZklOT1JPTGo1bFpJQVFxajRNdVlQanJJRTRxazdVQmNBbkNXWHRuTEI4bnVaZTNDenpwMG1HYThxOHBuMXhGOHdHcXJNYmxwb3lnM21NMGdRZFo0TlM3d0cyMVNMU3NoK0hGNHpTS3dXTjNHVFZHR0ZEUVZBdVZ1OFpMVmgzZnNNcnBNcy9aMXR6T3VPMUphNm1XNWxpNGxBSjFFT0hqNzZYa1dzSWFvTHFuQk16V093R05tMzdaVHZZRjQzeVYrNm5MOHdtMjNGclNNNjhsQWFSS1RDa1VnUDd4RmVQb3NGYy95dnZ6Nldra2JUU3EycXZ0WCt0MmJ2dGhnQ0JwR0J1NndmUWZCc0Q2QXA1MDRnTDRPcnJLNGM5RDRML09sanQrV2trZ1UrWFdldHZsbmt5eFBnL21UVkZtck1CbUtmUERKTGZuMXRBaG1RMzYzNGNocUNtajJWUDZ3cmdWaWVpRnVUNGhHS2Q4MldKTHFJVk9zMjdLNFJsWk5URnNvdFZseEVrQVhNbnpzcE1LZloraFgvSnBoZy9icE4xemsrNFMzQWVXUkJoanVMR1gydzA2OGdJdDMveVorRmQxYlJaM2M1VjVlS29PdlpZNFlXaGRRaEhoNXhydDk5VWJiM2ZRWm5MUkpuVCtSSGNGSW1mZTA5VlVCSDBQT21BelFYK1NFUzUrVWxxM1BGVVI2WlVJUkM2MFp6enByQlRZQmZNVVNzQWtDK2hPNWhxVllZQ0VMeWpnZUhDbWRIWXh1azhHbmIxT0dGSHBFMWtuVWVWNjlUOUExd1RnZ3h0OWVWOWZVcER5WmlQaVJNcjNERXAxZFhjVDJsVlJRWlFUMEJMUVJPUUkvVnNOaXZqcUlDdytKM21aaW5MYUlieXNvcUpCM1RZTE9FbHlrNWN3emJLQnZqYU1aTUdBYnIvTUdEeEg5N1NjNTZTbnZtUDlHZ1BVRjdMQTVZWXc1SUVVT1I1SmM5ZTdMTURsMjRTcGNwUURXcjhDdGRTbS9KRFJLNk5OcmhVV0FxRzFMQkF0SXlnOVdxRWZOTW55RG9aOWpWR05ZWjFmK3VBMVV2WDA5MU8xMW1ha256YitvNDR1cCtER2JiVFhoczlqczlzT2JwNEc5bE9rWHZ2bEZBS1lzNTF4MTFFbHhVVVNZS2ovek42eXZMY2JXS3JpTW9LMUs1eUVYTVJqN3hJQXYwY1B0eGJSL2RJVnRnRWhEcDY0K1VER2pseWZlYzFpTzhVNUhyaTQyNU5kc2RaaXZkRjhzdDJBMVRJMDFJQ201ZmtFZW1oZmRZemR0QTNqclIreGt0ZGFxbTZ5a2FsVU5oMVQ4U3ZUVURDRWFOUk1uV3FzK3licXlsYVVEcWxrSFJnOFVyNmsyRlJSV05LZWcvVmpyR3dLbzVKQnBNb0Y4cmF4aFU3U1hSSHFaTVRyTFdVR2RoNGdQaVZtQ2xxdGhhaUxKb05tbTdnM25wOThhZm0vTFpMNFFkL3JxL0orbkt3OFM5d20zREN0cERxd2szVlRWajVHdEs0MU5QWFRWVTJ2UHNhelVQdUVlU1M5UkVRbWh5Ny93MEI3d1lwRGNmZkt1QnFIc1I0dlhncUE1RUxTM2drTEIyNnBPY3hweHpEQkZONTVDZHp1WUwrS2tCQUY4NjQ4M0kvaWQ1RWJUYjdWUzlkaHVTRi9MOUY0Nm5GVVNzUlgrcnZMMnBqZXFXc1JrODhuZVVpSmlzL015MloxYnZmRkliOWVUeWVONEU0L1FUNnp5c2xVWUpPYmU0U2lRaWV1ZHpFNVlGa2EvWkJmMysyUnlpQXlYN3UwUVJDdytYNSt5OFZlWGxuZ2lnSUN6ZEE4L3d0KzBTK0kvaUVVTG9wNXlPeitJNnlPQzdjUEVoR0NSZ0s2RHhQbEUrYkl4aEFJcGVCV3RMRTFLZElHaEQ1ckxRQ3diQ0x4UVYrbFozc0hSVkpQcmF5SURQRGVXZzgzUURmaE5uMmgxMkpCL0dWS1NpY2xCd0dqa1J2S2ZvYXRraVZyQzFMN2xEdFZ5WjJFYnhsdGlmTytXV0E1SCt0T3RQeHQ0dll1ajZUVEtZL05pZ3QvTk5kaG9nbmtOcm84SGxaYjJtRmF4MllSNmYyNUxES2svY3pQdldTaXN3em1jV0hjU3A2enJsN0pXTzNwUVE4VEVhUUN0bUpVTWNiN3hjMmU3dVgrNlFUUmVOaUo0a21ISzgxNDdMMUFFNktraUk0aHBaNWVZclJoWjJxeGxqUXIzWW1nNFEvODhOdUEyNVpqM0h5MXFBeWxaSDgzVzcyMUZPbnhUZXhmTWcvdUN0VXozZ0c3ak1Fc0xCZ3N2MG1yK0hCSXVqSVpPalhpaTRkN1BKcDJhYUdsSm10eU1GQlg2dGpoWHA0SEFjWXArUUFrM0o2MEQreTFBNk9ZUXFkMElibTdlL3FZNG5pYUZmeUdrSjNyMmJ5WjRwRzRDK0ZLS3lKTmVhREJ4clJsSlBUSlFhQm1HcGt6MXJUbXQ0cmNvSCtHckoycG14Z1JrKytvOWxvQ2hFTVdTaHc5MXNvNmNRRmw2RHJZbUNjUFVNZml3Um9IblhpaUNmWDduSEZML29vL2FkSFgrNnp4dHBhMFQ5UVVpYktEeUdPRmlyaEFtc0ZDWnNNbXY5blhrRlZlOU0xVFk2NmMybE1CWW9EUFVTaGIxcTU4Q0ZVZ3FDZW10VDJFbmdBS3Q5MHVqUDlYQms4T3ZPbSttYndQSWNyTXVxWEhpUGxKNmNoRWFCTXFUaEJnN3ArS21pQzE0dFVzNUIybmlwVzMxTE1JbTVkTFN0ZVQwdW1RSHczNytuSmxRWnFvSWJUTnZpNVpoSk9HSjVOU3Y4YXBjeVBjTDlML3I0TU5DeFlHQnArUlNOalpnR0pkWWR2OTFNY1VIUTFLRUdBNFdmTEtKN2l4MUhObXJ6VkhINkEvMFFXcTQwSGZjYm5BZm1NWVIrcGxuZ2Vnb0wrOXNkdk54VnRzMEZjditaRkViWmdDM1VXdWV1blVPb2d6NHBPQURjeXZIN3dPK0hrQzErVTRVK2gyekd3T3N6QXl6OXFKb2wxZUx5UEVRVFFFdUo0alIxUWltWEV0ek12Y3RKUzB2ZWtMU0xtTFBpcDJkZTRiOHZrQUhlYUFjaFFSbVVia24rRTFjdGI0cm13cVlkZ3p1RDZHRVZocXY4eExBNXB6UTIzQVJSMlZoUzEvdFBzQ3VXdnVCQ1BWMVJrdngyR0FkN0ZuT3hLcW9VaXBJRC9CcjJtVmdqQStTU1FISjFVQyt5UVFwQzdrRkpoeDFwbW51YU9UN3JBU1NVdGE4MDZFOEl2a3ZjWlMzemFRMDRqRG5nWEg2S1M1MmtObFo3OW9PNElKVEdUbkE5aVZjODQ2VVJtYXN5SytNcWVYVGowZHFsaHhyQTRyREZjTHVtM05HZUZsNTN2am9ZOGxzb0Z6ZC82aTl2S1ZDU3hJSS9QTmhqYWU1NXBHMW15RlNqVXF0enhSMEdIbVBlRGZuRFFON25ERlpUQStPeks1V2dkakd4akVCWjAvTktlTG1CNW1WNklFOU9neGprWSswODRKZVRTYVU0Wkh1akZRRTdNWFI5L1IvY0dIMHozajBNMTVHQWw0YWNSMHpuZmd6VEFtOGNlL3N0eUd3b0dXOGpob1lYMzVndEYybEpjdk44b2Z0eHlsK2pXV2JlSHNxRjBrL1JNU3RhNEl5aWp3MWJFZk0xNVNtQ2ZPTGxsN1pLTVNhTExtTWVXSGpjZzlkcDRPVVd3bDVmclB3ek43OW52TEVsTXgveitYTWRtWVVyeUhRWU94WFBpZTJ0VU9CSjN1SWtFMlNaOCt1R2Y1YXd6c1hjSWdXaHkxWTN5cFlVWUV3OExPcXB0T2ltcE1mb3REeHBYMHNhWFMyVjBFVWc5WEl3RGJ5VnQ1ejZsdDR6MzE5ZHRIbTJybjRrWEhjQXhqZUFaMHE2aEpDbm5nNkIya21KdE5LNlRSampuYnNCK2x6cy9iV0dxV1F4a0RJeTBaYm5zSnd2cFVoSUVlbmpVbmxZUURVZncyUmpGRVBYNEtGSXRZaGRCa0ZSc3JIYnBMcGtFb0k3eC9LbktzcjVqQlpQMk9qQjNBbDh3RE1vUU5XV09OR01jRE5wNFNXNWpQUkxoMnNFUlE3cGZzb05xNm0zaW1ZMHVkVVNuWWdIWGlkdWVpRlM3NGdsVytGNkJMV0hOZFZaZUN1OGJvM0RocDhrYXVwOXJZV1d2WkNyTEV6aUlydmgzOXE4VTFhQjBEUWdNWTBQZlNSUHZsS0I3eFptVzFWTkhpWk5ZWDFxSGFvR0M4ZGtPcGFRQXo1RnkyVVRXQU1Uc20vemxZNlljTEU1eC9WbWI5bGdCMEFleGwxL1hNZm1meXRPL1ZGNjAyc1U2NmEyelNuRUtrK3JObk10ZzhYeVFzaFAreFJKNk8vQWJmNnNZUUVUbWRmODlwRG1ZM0VmdUhUVnBHKzAvMkw4dWhkVzg4bXFIZmovQW9TY1pqa1NRRHQzSnZTMWlIQjBzNGZrNWl0RnIxbDFKQXlEZ1Q1ZHNxQ0x6MFh6MDhBRitSTno4aTJhNVQyZzQ4cWdna3I2bkt3bDhhREZOeEhiQndMRW9RZDgxcFlSRDlqYmJnMk5KVU8vc2ZqdTR1Tk9pc0JJTWdLTHpXeDNHejVDY3JHNjZuN0FLWXErKzF5WmhHQkc0V1d6NER2dHdYaU95QVFkKys0VVgzRS8zVEEyazkweVpsdG1ZdFV6ZjZ4YmRoWGtEeTRZR3VZV0Y1VjV5VlkzNWhmMUlhcmt4OTYvdGZqN0RETytlYlVZYzIyUzFNYjNBWTNDTFdSeURyaUdjQXpIWllPaWxFVkszQit2VXBicnVqUEJCWmhBS1JXWXhTdWFFRklpeG1HVnZ0WE42WWtnRkNCRVRMUnVlL2s0SDk1OEN4aU9NZnd4UTBlV2FIQUx4bUNUa1BwcUlBNzJDK2RZM0gwVkZGVW9FaW02M2c1blJ1bldGdDREMGNka054VWZubzdmbDNlQW5SY0hIQk5NVm52UWFibUFkYldxemptaUlBY2YxRzR2d2RGTUtHUXNQOVhVUFVrbUJBTGxZSmc5SC9IMlNGdVZFMjlDZmVWazA3OG41bXhvMGJkZmFyOG5vRWx2YlA3SzBnSjdGNzNMOUVDQmxCTUZIaG5haUJFd3h6M1lqWUtkODhQYWwzQVRoZVRRVG1aUCtnQmxtNmJGVE5TaHZtY1VwK283SXNmZElWYXYzc1RudjYydmZpWHpqSUJuUkJSanJsZzRsVlVWbTdNdlJDVXFvQmFtUjFtUEVFemdXd2hkVnNhNlFUWDdpek5xL3BUMytkeVpWR21BUEdQbDlJNStwVGZOQUo5eDRicFErNEdDZWpFZERNMTd3WURqQlAwWUxxckpSejltU2x6Y3poQm1wS0xMUE1JenpLQ0tPMFFWQ0JXSUcxRGVpTldhc1RFUTFDYlRVTk1IWUhVZ0Zzc0JFdEh3clVoSjNEaCtqT3V2UTFLV3c0QlJ0ZlY4cmM4SEJMak0zMXRMU3RNYlhNL21TRDNsbmQ3RDhSaFBQbFRQOUtWVXQ2d0piM3VUWkJKckZ0ZFBJd1VRd3hhSlFDUGdqcEpHRXc2RW9sWmY3eW0yRk5NdEZFMnR0UE84RzF0cUdabnpZL0RoZC9GQUNrT1M3N3VUOThlQ0VFMGEvTFN1aTZMd29WdUNtSFlHc3BLTXNEeURwOTZuTnVERU1GbTJXU2hrbEp4dnEweDZVa0VPcTFPZGErRzlJSXJYKzY5VEtaajlkTmxVWHM4OElsS0xCRWlmeTdreU5kRXRxSUpqOHZ1dEJpN0hKNFpNdDdraW1qWHpZeGpMSkd3ay9YVTUvTHd2Tk8wYlNQNmtFSTVXL0JvU2NJSWp2cForZ3k5MTJDUlRVdmJpSTlsc1dpVHoweFAyc05VelV3MjNPc1Y0WEFJVnBQNXRxdnY5Uk1vRWdZUDhKYVNLeDRPa1d3UkpSd3dYbEpTVXRBYWhycmtGelZTTGlPUmh0emMvZEpUVE5pUk8zMjIyLzVKdkFHeS9sbzAwZlBXeVBNOVFyQ2VnbXhwVVRyWFlmWE9LY1FTajM1TzRUajdYaHVQMy9hOHQ3Skg3OXZXK3JyWnJtN01ndGlKQXkyQ2p6cU1XZ3VTalNVVythdDhMRzZPTzBIZ20xL3hmZ0VBOHk0SS9wS0FGSFh0bXlwYkZpVkFIdDlSeW8rZFJ0ZnJjaWc1cUg4OGxzcllBRGJOeW51N3ZwMzQ0dTdITGx6bWROVGdaVkJ5SVhwdFJIS1pmcjVEblhEcFV3NkNOYmpMRXBrc0o5dWs3R2ZtVi9PUmxiRitvUGw2dDdXSjA0ZnZNZHFCUkFqaEdHZmNoeXJZdW9TYUdiTXZacjE1aWFTNGxSdndrekJtcUZ5Sk13REF1WDVzUmZyRWt3MmFNbGlGdUJUYjFhR1lqeHM3aWhHajdZbGgwdngxY2J1ckg0NXBrWFQyaWxDM1JKekovMkhQYTlldWtNQ3dkSjhpckxJbzhlQVRjWXlwVEI5S1dpVGF5VmcveVROcDBia0JOSmhBS3RsWWFSTFlBWGNZbEJoMEFVNHUxMjJua0JSTkUrSU9pTThqR3V0N3doUFpKclF1NmNwYTV0eW5LN3JPVFRJNldzRUJVaHFMOVJ1cHJBbEdhQm1aTmtBRGliUkRhUjZaazR4YzA0b3RNdmYvNnc3cnc2eDRaUDNiVHVSQW1kZm4yN0VlemI3S2Z0SnRlQkNWRi9xcGRHS1BHNGpkYS9CNnJaMlZBZjlPSFR5QXBEb3UzcFM5VWNiZXVkZjFUc1diZFlzaGhsa2pOSWVHekxXK1RxR2hmaEtNSWdmSjNqdDk4VE5UbUFaTDFrZ01tbWx5RWdXUDZ0SFJNOHBXMFd3Q3FMNnErSklFalVZckdJbDFBbVEwL1NjV2NiM0pOVU9nci9JYU9waW5RaHJTMVU3N3pkL3RiWXErYVRsTkZSVFhNNEduQURqbkVLUmhaSEFEZ3FRR3BubTh3NjJjb0o1bENCSmZlQ01mZjJodXh5UGtPN0NRVnZSVmJYWTNoZ0s0QlpxVVV4V0RNMmNYRXdONjhQc1hGSFArNktpb0lieHBudzR0ZWkwMktqb3VpdVVYc2c2T0lNRXlkTzVndlpoSitUV3RhUFpnOXJhUFgvQnBCMEhjVVMxa2E5YUd5MXVSK0Y2Qmc5VkJDS0RUcmJLMFcwenNCWlZkSmVKNUhQYUtzdTI5ZGpkSGtqNkZzTnpsSVM2UUF1Tjk4dTI3UnlEMm1EYkg2dmo0V1VlZ3U0SjJZREkyNWVvK09DNUJ5VHB4dytHeVJvSHFnNnpjTzlsZUNUK2pWeHdnV1lBS3hQSG56OFRUK2FiU1IwaDlETTZWbFJPUllZSWNVSXZuMnRTdkR0c0NNb1Y5a0Z4akl4RmRvdVNHMjVBQ3NLMUxZMElVYldiSlFCWjRUR2lnV2FjUnlEWTk4WHdRSjUxL2tUVDZvRnJzK2RYZ3pXRTRkWjl1NGM4d0pXRm12dFg5NzFnRkNtZGlWQ2ZUUDlYRDREb1ZsR09FTittcXUyV0l0Z1J3emFLUU42Q1ZqelI1RUxPZGhNTkxBaUFKV1NtbTFCTGlUakpqRUNyN0RHaEQ3cFN3Rko4NFlTelZwWnh6ZUxWOXd0bUh3ZDhBUzF2M1Z4bEtIVU1lWm1jQ2s5VWtIMXFQSS94ZS85cW4yd2R3ekZyY0QraWlGRFVHMGhyQkV2bVRYOWxldXhienZ1NHFEb3dCaFcyUG9QZks3L2ZIcUlzSWY4M3Nya1Jqbk1wVWxReHhaZzNXelkyZUFaTWdrRmMrZmZxbXFLVnpES0VGb09rNXNqN240Y3JUOFJaTzJWQnVnTm5DQml6L1JsZndGTTZJcG1lcDk3S1BOalFqSnYveDNpZDhlNkMrL3QvcUwrTzd5algyQUVjRlF1MVZpRmY3cXltWkh4TGJNdTJTSDFIZ0VtNm9jaE1NSWZERWdBcEd1OVVNUm1EdWxINCs4TXZwblpTS1VBc3Z3OWhHKytuSEVMMCs4RjRjZ3NnL1RqbkxJdXVWRnhxOGJVek42eDNvQitmUzRnd2hva21uM2lJdEFhdFBiRlU2dTBBQjhNVmV0SjV0QkxaaHRQL0szemlnWlJEY0ZsTXNVVFIxUlFZZExhQXBvazl4VmtZTUorQ05Kak5IMW1wdktUT2s3eXNjbTJxcmIvUlJ1bkx2OHl6TGRWRFRQbTY5ZEdJZmlWSFZFSWZGaTJLMGJkRnZkeTF6R3BsN1VNM0Y3a2RoY0tZUFNjRVZXSG95Wk54c2N4V1cydHB2am0vekgwTmhtYS9MZFRSY1hMVWpTTk5DWFRaNnNSbldwZjVaKzBibi9aeEVaS1hhUzEyeithb0d4anI2N3J1SmpjWXkrZ3E3Nk1PUHBVM2xlWXB6Rmo1b0ZCWXFaSjErZjJPbGNDS3JyZjJja0duZGF2dml0QnZFTmQ5YllqN2NuUmRlOVpiSTNWWk5oN2RVOTMxVWlDYUtTVmd4dndrcWpoMUtqSnBDYkJWc2tMSU5qdEVNQ3ZubkRVNmlsdjlleC9TRTFTOERHOWl4azNPbVJXaXhmUUpVdDRteDRhdjlpYlVUMGFnZklPNUZ2ZTNhNXVMNU9helZsc3NGZUdXRWJmdTVLSEVLRXpJQ3M2Nk4yRzBHU29pSStIV0NQeEFUcWZ0VVd2aG1hM1VMVHAzMDI4SmsrbFdqYXpXbEJOUmJXSTJmVU9sY3g1eFg2M2JxaEpZd3J4ZjZKN2lhQlo5L3E5WXBINEl1VVgybXExeE10dy9lN251Z3QyZ1JCd2dlR0JHSjVDWHRSTDRlcDNFTkw5MnpvRWZuVC9NVnRuZUtyMGRza3JnbXNuQThLZEUvMUJVNlpOeVVhdUJJMUs1QlhTUjh4L1BXWWRhMWFBSGdwMXJveDF2OE5wSkRldlBKVXJHRGtqQmt6STVpaHJPVUg3Uk1YeG1qbGR5SW5YcmhDS284TXdwdHE0NFhUVnhzdC9aRHVWYlc1eCtFdVdLeVA5aFhkRmNZVkk1eHZuUk1OeG5UTG12Y3hpNkxaVTM1VC9Rd3pmaVZWd0tJOVVreUswZWpHYVkzcjFiR2ZiNG8xUW1XMUp4Wk4xL29VeXh6SkRDQUJxVy9maFVxMG1XNWIyc2JJZFBQVy94K0hRTVNzN3FLYlZkc3FZYUJkRjVFTzUvUXYrR2VTZ1J5ZGlLOVZwdStGV3VCaDcrNnZqdWFMQnozdUhFSDlwOEpKZkVMYVAzNWRXdHNlTVBCejk2RW5hM2lQcXQvaDdpQnJsY1BmZDV2bHZIYVErYXVNdmcxYmhrd0R2YU9nZEcxdGxpMUFBTmM4cUZGTFVpdXpTeDZrc2pvUkdqWkhiQkN4b1RoK2l3RHRsNkt5QzFDMFU3Vm11cnJicHdMT0JrbnhUQmFiVWdQRUwvZkRNbmZYMDBDekxobUtjMjEwR2p1NUthaVdKcnZuSnBpbk44VUlZUmVkN00vZW5Pb3U0Q1Uvb2J4a0llOStWWHM5SjI0bCs5NGQ0VGJNUzFaNmY3NlFBZ1hKL2QzQkIrR1BMSThZeXh5enVGTEdYbGowWGRqZkd4dzdQa2NWaHlzenVwR01TMkkzaGRmMGpCTTAzMzFkYTJTSGtZeUZsTFE2N2VqU0F6N3NCMXhHQ21RZ0tod1lhSXEvckZiUThKWm9nR2tIZHN3bTR0dTM3UEFtT2ovRjI0WDZTalZBK0ZDM3BLa05Tczc0cG4xNUMyWFh3MHBmNThrSVNrOHR2azhIMytiYmtoNXZyWnE2NWlPUG8yS3lKYmg2VGNucjR2MFBrY2pqYzUxeklaTTFOVmRHd3oyUlc5M3VKdXc0M1RDMlhxOXJCTU1NdUhVSlVFNENFNHFjWXdlcTJUWXdCU1ZOVHNzMnhOdHlHTVAyVXpGcHZVY0xQSUM3ZCt3OGR1MDFPcTVKNjEzem9nSEFWSlB5Y3ZPR0lqYnNraUh4RDJoL2FBNUhoQis0M3lFM3pZbm16SDY5ZEJldi9FLzVMRUQ4dWVCcFpsVmVtZmo2Q0NWZU1qT1lpUUVyVE1DSkZqRzdYSXZTaHRhdDV5czVFV0wzTjlsQlFyOTlKd3B0R0JLUzc0Q3Zubng5ODFrMHBDY2ZkdHNYL05xek11SThZZ0QwcmIzanhwa3JsRU5OTEc0bGNNeDdYSGVzSm4vTURhQXA2MG5jd0V3Tlp1a1AraUlJRjJxVjZXaHo5THA0RkE3RkkxOVhPZzk2Qjh5WTFGZFo5OVRRcndTUUF6V2RRY3dzcTE4ZzRhWVBJaVludEdyVWR0Y3ZZL3QzVzdPQnRNUUVYaWVnU0pFQVJsN0FZUnpPSTBrSEJrUzZLOGdyOVNhVHA0Y0ZOZllGM24vTEVYWVhUYno5QkZjTlFBMUdFTHdmQkQvUDFCOHVoWHNpVDNDellBN0xwNndwTFRtRHpXVmMycHZrdHJPUlZLTE4zYnlMYkR4MmlzVXQ1a3VoaDhwWFhDK2I3OWZkZitBcEI2VHZ4ZC9JRWw0TVY5WnRNSCtPNjNHTVpPLzg0eVY3WERDS3ZLdjZCZkRjRmZZQ2pFWS9mRlR4ems2a3JrazYwVXVZam5IZmNnK2Q1Z3VjeHVpY0NNODhyOVpOa0Y3NTU5TG5SejBzZ2NCRVVtcnh2ZHliaHRYbHJMb1VSN29pa2hPT0NoZHVHOUxaeG1rU01TR2paa2h2MXh6Q3c0ZVRmWXF1cWgzRUl4ZlF3VmZSN0JrK09WM3pLMVYvSXgwZW5SVUtJYVBHZkpPNWVKRUpxM1VsZ0kvUi9QdVFoaCs0MzlOcmM5bHZrWDJuWWtFRytleTdTTTdhNFA0MjJhVkdyVWo5Yk9YVWkvUG5QMitxNGgyL2ZYR1c2M3MraVk2a3BzTjJWVXZKbjVKU1g1OU9FdHFmNlNpd29nLzhTbjVHd2hWTllLQWM1dEJneStSQkcrREt4TExZcHIyV0RFQnl5NG1DTjlZSWpYM3JEV3JXWDZFSU1NS1FFS09wdUpneDc5K2d0cjhkZjRtV3ArTFFtRVVXeUQ2aTdHNVJtT001Q3ZJdFcwT2h0K0JGQzBhVjhDR3ZCVjgwczd6MDF6cTlDMlordU1VeGlub2JDSnVpSUNQYVdtbWhqdGs2QUNlNVBkL3BxYloxVmRGU0hVNXFPV3QxSnJESFBvRjZTcG9leXdUTUg4UmQxSGxNamFLV1FwZkJnS0pBeFJ2TlpUanFTckMrbll4azVBME1FdXppVDROMTZFQ0Q2Qjdqd3FkQ3M2SkNva25YZVA1dzBUOXg2dml3a0JuK0lsQXUwNGg2dnl6NmhxOFNsWHNHWUdXT1o4aUtnOGh4Y2hzWmJFWUtHbDZZUlNWT1NFVE40TGg2Nm43Zmhka25pNkFmcmx4ZFVzMUIzOU9HMElDZ3BZdjljRUxGQkpFUVlzd0NxVzZ1TytNNGdrWk56SkJSdmltT1hQNnBNbVdCVTErMTJKc0cvdmUxOExxRjkvVmlrTCsrSzhnWlQ0U0gyQnZQL2JWc2ZCVzkrKzEyeERnNHhZdXJTYmlXQW1GMGVwTWZpZm1qNjNORW5tNE5CMVdzMTVXRWtyRjdOVCtTc2JZaWtkWGJKeXhmbmxRL1g4cnJKYlA5MEIxZlI1bVY1ZmdzMDNIN1BYZW9pQ0FuSXhkTFNxSU9TUUlZTW1zS3ZDazJ2eTBNSVVncXZvZDh2bHQ3M2I5TlMwcjdNT0FaS0p1MmpBNjdqQlZKVGljYlJGZTlVOHVKU05jaENKSU1MMm10SzgyM1RwSEh6MmdWQlJBWWRkN1oyNE9vWGdaWXRmcHF3ZG9TcVIwMWFYYlltMnY0cllCRmx1L2lEczg4cDBkdllUMHUyRWI2ZmhYTm1FL0xCcmtKcllFVFFTSTR4MlIyWXlRUWVzNWU0L2x4b0FFbEFpQmpETjFNU0NUeEtkVWg3b3lCaWdWZG1jdmtNTG1xa3B2NEFQZ3Y2TWZYWkR4dEZlWE9Bb1JhZ1NsR1dubnhPWDlqWUI2RE9LK0J2U0pSL3p0MTkyLzFmc0k4akY4dVhaTC9kOFVVam0zVkpnMzNlVDZ3dENTUE15Nm9LbWY2T0NuR2VmYityRzZqZ25ickIxVk5EbWNsMFF4R2xwVVBoTXZlMU4zY242NDVpMGUrRUtma3Y1blI0Vk11L0tYV3luSVVaS05GWDUzR2VyWmtsRXlURStLY3ZWdXpnVFhnNUNTdXY5UFBONFRTRXhNYWRaaU40alVTNTFsUlFxM25lcm52UzkzYnJ2YmtUTjliOUdEeFpSYVd6VUlFR2E3RkU1ZUM0U1F2c0lxMjcwTGQxY0oxT2VBa1I2UGZURWpqM0JPL0dzei91WXowdGF4YXdzbjlCcVROaHNLZDlZOU1JMHM1RVFmdDVESzlaY1N3TkNGYnlzaEs0UVRvN1hPTk9CeHhDem9DVFVEakRjNS9JSklDaVN4enVtQXdkOXBxeHVsRnJpL0tHZm9DT3lUb3NVT3YrclVPNXIvOU95aUd3Q2h5OENpMzVsNVNBS3UrS1h4ZXVQR0F5b0lrQ2tJVGpDZ292K2F5cS8yL3JZK3N4M0RzdGs1cXMwVGRHY2FUaWZOQWZEWUMxTnpkaGluekpLYW03RG51V28vYS82d0RXODhEM2V5NjV5N1BBaWQxLy9wbkJtaUZ5MFR2WCtTTUlsV01vTUVTUUV1ZmZtRGswNGFKWGJZYmNsWW9BZzFlNStUYXNEc2pzYS9EQTZaZlNyWExWQTc5NkIrOXF0aGVlMi9xbmdDQ3BYTS9yMC9KK3E1WFMvR3QwRmVEbzk3V1VsazE2YWFuK0gzQnY0WFY2RHk5cG9JLzFMT3hNUmFOVktNbzdNZ3p3UzgzVjlkT216M3I3N0JhZzVDOUR1bk8wUUd0dmlxNVE5WGc4amZ4TlJWYkl4RFRCNTcyT1dlRGErT1VTeFBoTTQ2ODJ3azFoaEM0TzRsODI4aUIxbmNWUzJaeHlVRXdYK2w0YnI3ZmtWVERoTVVrTVFubVVJdm9QQ3FRSU5xaVJPV3I4TEZsdUlLMjVaODBXeVVXaVRKblFTZHFNOFRIMCtHb2JoM2lLaDlMVXpJR3hWcmRQb1RkY09UVUJPSXpvS0dWRnptVHVsTjJ2aEw0WDY4YUZjSlFheU5jR0ZQaDY2WW5ncjRSNDRmd20yRUlVYzBzUTVjb05VaHBibWN0Sy9Vb2ZFWXdxL2lvMFhUdnkwSmd0dzYwYTJiUWRjZlVMUjhqZ1p2bWlmZEpkYTZYamhndFJ4aDFzUVM2SGwrNVRFWkt3M2NHV2luWHgyUG5rV2VhUHErSWRickR6dElzVmxQUlZSd2p6Q0taZ2J4cGdjY3pRbnFSTWlnc3ZoRlFtVW52ZG9mT1M3UThubzd6SFExV1RDNjVDQkFEUVE5VW41aTlkVUtwNjF6Qlc4OThuSUZPbG9MMXZ5UWxzU1NOTVpKM3Z3dUdmYU5jd2Z2cmI2ZTF5N3k0alNFSWhOajRTK2N2eXlvMTYya0JhY3FiTWVOQ1RydllxNWhwbml6eXkvR0tORGZHL1VBZWpHNVcvcVhMeDA5eDJsZE9HL3p0NllrVGtNay9iSGFXUmVIdTJzUTlCMm1ZbXhxeGhQOVZXK1NLZXIwU3BHSDFVazZQenQ2SXV4SGJTcWxra3A3ckI4dHduM21SWnkrc3lMLzhtcWpRWW5lMU5xN0ZrL251TStLRmhscDdKNk1nT2ticWVrQXl3YkxoK1F3bkNIa3REMWtIdUxRMXBMcDd5Qm50ZnBTU2Q4S1BPK0E3aUJhVWszV0JzV2UydmlCOHJ3NzlvdjdBTHkyR1YraUNWVE1SeGs2WklSTk1aTzBVZmx2SkdMdmhWcHViUGNXY29PTWF2bmxFM2s3SlNsYVpOMEZCak1Yb0xQaGtpNXF0ZU9xamxuWEFmOEt1VXhpMysvYnlkQ1JSNzIrZDUwQjFPYjd6eGZvcmx6aHdJVWsySjg3VlFPM2ExRk96YjJMSEFCR2JQb0ZaNTdzZS9CRTR1UmhGYUhMc0Y4Uy85L1ZNRUN3eGF1REdxR2NFcXBtcEx3NUdDbjE0bUUrUkRQRUk2V0lyYlNMcHcycmxRODFqeHJicVp0TXVoZk43VEhiZHAzSmt2dGplNTl6MXFKcFlHeG5CcDJiZGgweGwxc0FKUWt6RVRJRGh2TEsxN2UvNU9ySVVUV2htN3pYV3lHKzNGM2pYWkN2TElQWm5pamtQYkI0aXkzNVpuUHpvUHZ3aU1WcUMzWkFxcjNoWkYrMFl4TVJ0RDVzOXRqWXlvck40ZCt0Ylh0RGNvNnlKUEo4eTk2VVBmUk1wblpYTmwyVW11cHBiVU82cHhmRk55UnhhQ05VSGJFbVZUZ20vZkhLdlNMTW85cnhVdUYwTHJoU3pqbnAvQmVWS2FvZlpjNHB4MVJvamxYUDRyU0lBWURFQWZmalFZMkxGVkpwRzZHQkhrOUpzZUhZbXpOMTJWcFVEdEN3ZHZGVnRnUkxRWVNRZmdRV1hzWUtwNG5sMG1URTFTSHhvTzA4YTV2dGxlNXc1bjNzdTVtbGs0cU9WcU9TTk9NSGZETTh0dnVoREZETHMrOVcrZ1B3dGZXSmpCUWxwL3ZBblFDazBRcTBPLy9mVXZBY29YNUpDLzJFTS80VFZweTRLSUMzN2VIdDkvbkZVKzdpbExGdm5mQjYzNE94M3k5dnRmd0lPSERIRlFHSnpodUJwcVAwVENEZW42ZEo2MmFVSUJ4enhzOUtlckU1SWUxVVFQUEl4OThMMTFNRERoK3VNYzJhWWlvSjdEOGFiQzFSOE9HVTVYREhmd0QxNVlZamM3OE9Wc3IyVlZLUTlNTlRlVDZacGFsb3hXc3MvVHh0RnE1WDNhbkZ5dlRaa0NWL3RqbE1LdkYrQW9Lc21NWHV2aWY2MkFZbGxBUUpNbGdLMnVjd0d2SWNMUFBWcmxtaExtY1pOSmVQRmhHb0RGRGQ1Y0wwczhxall5dDFKZE1PRyt4dS8ybmdoaGlNWjlyUnpPN2trSyswWUdLQ0ZDRFkwNHVKN29lOWxvSE9RajAyNUk5N2dpQjMvTld1WElyRk81S09SMndsbWFIalpBREo4Zk9mdERGRUtiSmFPZFlyQ1Z4eCt3TjBmUU9qYTAzOEVzV2dIOW96d1VTUHRKZ1MvQXVNVmxvOGpCYmJaaFk0aUtScmxPL0Q1QzRoY0hMdk9CUExNK0tEQUxsUGQ3akZ3aDEyWWhBUi9OMWFVYXhTZkVOYUIzeXVWbG5BN1ZvbUpTZVBaUWtHS2syMW56TEFIdDFjTDFZQURFVG5hZm95ZllnL1YzOEhGWG10bFBKSFpjZ0Rkdi9tZ2pzM0l6N2w5cHBSQU10RUtXK3lsQmpSZmExMDV6U2d2aHZPVUdYOVozakxOcnF1WFhRTERGWG1CU2VUVCt6QVdRL2FsRVBMTldPU3ZWTDJPOE9FRm0ydTdxTGpRZ2ZLZE5ua1F1ejF3SVBxdit5MkRHVFB5eFpxOTlodUNaSGUzKzUySUYwVzJrU1E1bGtpZSs5MnlvandiVjBUVmZKczNIL1cyQ05OczJvaG81REVlUy93eFhiaTZiajBMYVVNa0w1SW4wZVFSUWkvVXkwYmE4WURqOW94SjI0N2RIOG9rN0ZqMHZvSE0ydVUxeHVoR1MyaHd2K21ycnJYNHJPa1VhcmFoWU5teHlleHNGc0xCenNPUktEM0phOElIdkxlTk1pdXl5SkVOUHVBSlVQWDZDeEIxQ0V6Vjl3Q2hwUVBINFpZaWZDRmhMRjFJUXQ4NlpQeDYyZkdpMUVkMHI3dDBuZnNWeUMxKzJ3bGVtUE0vYUlrNGdoamx0VEtPRkhmVkkybmNiU2RBUWVDMVRPOXZxNnBUUDZvSjR6WEJkS2picTRzczkzbzVRaXNQTDBaeTVDVnN4b3lNaUIzV0lRb29UUk1xckZRSTFoaXlIb3RzMkZ6eXk4NFk3V3dZTFg5ek1JVHJZbjdLTWpwQWk5QkNGYThkZFZhOE1WQnNtOEcxOVlBZmtlQ0o1RC9OUkNFOEFsRVhITWtNZWk5TVdEVTdZSWp0UnQ0Q0ZTYy9hTnhjRmpsYmh2K1pRaEZ0S2p6ZG9LK3ZDRjgybEM2NnNoeHBFK3R1VkoxWkhtUDUwN1pta01sQ0NhaUlQcU1DcWNJWlVXUnhnVkxxVi9CUktLdEc2Mnk0Y2tqdnBNNkRIWWF5eS9RNGJUbUpFOGFpQ0RCa3NHaXJ4QmJRSjJQZXRYR1ZTWTBaSnozWW5GWmhiYndDaW01eVMvdXJGcnFEYm51d0pDRWF1Yk13Zk8vWWc1VDNYYythN3d3S2RuZURjTEc3UWFTK0hCWlZ5ZExUN0pVY2JQUnF1ZnBQR2xKTER2czUrY1lzVVBDVDdBWUlaa21NTXNyYVB1aVFoMVBJVHlJd0JDNTVXQU5ZREI3anRxa2huWFVTWDUvc3Q4UU1pK3NJZmxEZkVtYjFpQWhXZ1RlNE8xckFQZ01CNFJtR1VtR3plVWhRVlVxZEl3RWRCdVUvekVSbWEyWk9KVmhQNWFjd3RvMUtwY0VweWdyOTFOeTgrOXhtUytHSElmWHEzWnBFQUwvdWtkUnYrS2YxSWdNcXdETzhpdXRHSnNvRXFNSHFOUXJHNThkeGlyRmRXN0h4dWcrL1BNVkpRb3NVbmh3YWdYVVJKZC84aTRFYk1xcDluWFBoZGJyZ1NOeUdycVErKzlpbXBzMXUvTGdqcDRSUVJlRXZacWFGWnczLzJJVkxuSW11V2x3azhWci9RKzNaaTdrbnJrMnZNaXg2Tk9CNjR1Y215QzJTTU51b0NmZmdUWXpTaGovRWNBVW1BTVRmaGxNS1phOVdMeC90MmNNWGdROTA2dlNKcGFqb2tqSGc0cE4veU8ramhlZHh1WGZ6eS91bHdaMHdOcm1vcGt3SGlHUWFyZTJ5MmhCTkNpQjZVYmR5dlNOaUZLcXkybXZmZk5OSEFLTmcwd3ZaOUhMbGZZd1p3TUJQWlUycHUvM050cE9pbUYvaVg5cEQ3MUxSTlV1ZFVCY2c1ZDFTRnpHdUJWMVNsZVozRHc5UE01WngwUUdIak5xd0VTdTVBVm9jTzVYaitsRWxBQUtaajhaSEdGZ3VSSXhMVkhzZXlweVpRMC85NFAvRGtvTHloWGhkb2puOHYrMTBMNkNwQVViRkpvd1N6ZGRCWVRQZ1YvT1VyTWQxT0VHVmxIdlV2d0RGU2M1Uk9iSmlvTU01dkhEYWlhbDdaUlZTT3c2R1cwb2ZiYjJTTUNFZEkyOHRYM0lNUnZveGp4UVhKRndzcGRTL291STdxakdUZjVnVGtaTHVNaTJRSXYzZHdXSXlwQ05LMEFPS0p2WXNZYkVYaDl6Tm04aEhLWTlqTUR5VzNFclRONFhiRGFpKzYxbFZTdmNDM3EwYnM2NXF1NXE3TXJuU0toaEg2VUdOVW1yTitJTWtwYlltZjlGWWpVcytKSjM4Q2t0dnJiT1BPbjRpMUIvU1lvcElsdk8wMjRSU0NkTFdlakpZMm1NZTFBbGlNNFlvcGphY3FyOUZhb3hQL0tzT205N01ScUdaSGJYenlSZEhXS3Y5ZWgwK2ZDcS9UcDAyR3FwS2Y5MklFK25UQjhFYVA4anFRdlVSWjdDcWI4a2Vtd2VIcnI5WEhxWEJ3ODVITXl5K2dxd1VocXUyUzNJOHVMM1l3cVpneXRxc1F1YVlvOURPeXhaK29XLzZXQmlwVHM3eHhpTnExL0NIYzVGOXFBOXp5QWtNSWl0bGdUelg1dVBjZ01PWlpiZ01pa0w0Nm83aEVTWEIvMkdkZmROV3hWUzF2MXQxU2gyWUlVSTJPOHBaakJIVDAxclBrTDdTeE5UYUxBcTVzdXhtV0xlc3JOZXBtb1crcWUvUmJHU1BOQmtobG5CcExpTHN5emJLVER5UkZRUEtLM0xIN0RZVmJhZlJQRXFqL1ExakFYMG1TQk95cEFhUXZ2VXNyYjNoWXNUaFhEQWtKQnJ6dHBmM2tTaVAyeXVFVVB1dDNybkc1M3pUTGR4SW9IeC93ZFZlMlNpOE04VjZUcGl6WG0rNmVRUHdBcjFvbitGZkVuZ0hkVldFMUJybEhqZ0dFeUlsaVFGSlB4YUVSTzkyMzd0eEc3WDZJNWZsVUlubnR6WWRxenJ4bEhrZ0ZMeWQ2QWh3amp0bGd0TEJGKzNlM1V3YlRDNjlvMExvU0RTdWhsK0VWQ213M2ZlZnBqckFrcU1RNTc2bFRvMWZ2WWlnUUdjVDUzd3NueFVNck5VWDA1eGtONG5FSU81TFB2TDdWS0k5NzBiRFlRQVZjMDdNUTdQc0ZqS2VmKzVkR2toUGdsWnd3MGVHalQyYnU5YTluY2x0TDIrZkRlNUhpWTNiTHhuUTNmS1d2UDhFUzdiS2pEOXJuNTZsRUFGbG5VTHNPQndlOEtSZndLb2Q5UFhKYW5FOEtMM2V4RXFYNFU2WlZQVi9URzY5ck9hUEVBV1NxKzlJcnNLdXJEenlqZ01LTmI3L0VGV2o3N3RVK1dkTkFJQnJQSHYxNW9LWHphNTk5M0VBUmtEcnZCcTUzdnV1Rk9HelhjS2lEb0tLK3JRMHVZNFBza0ZkTzJBMUtFZGg1RUFrU0duaUYraDNjMkVTRElDbDZUNGZ4ckROM3JWVnBjUVFsb1NraDBES2t5QjRNODVXWVFPelp1ZzZYOUUwN2ZidkwwZVJBcHNoc1Q3U0FtSm5XU1FtZHZ5a3kreEdzNXU2eFQrQWwza2tSbS94VWtCQVNJZmh2Rkk2VmxwRkw2YzA0ZlByYzdpOG9FS3VxVlF0Y2h3U1B6SmFzRnBWWXY0L2l6Z2JFQjNBV3VmMmlGcGMrQng1Uk9takt2Q3UyblZkdUJPMmR3QmlXWTBVMXd1T05PQVNaaTZ3OW1INGVGL2NRVlBGeDlIM21meUJQdnZhd2xuenorSHpHbXU1eTNwU01MdDU0M1FYbnFhQkFoeHJUUExXcFgwUGwvSEU2czQyTzVNdFluYVlOd1pFTEJCREkzSUZ6cEwzaUNORldlWGcyMlgrSnFnSTdMcWVlQThvSWpBMjJ4cnBJQkhJZnlSMjRLTnNVNjhtU0hYQUFZS0xvb2pQYnFtMHk5VjBsN3l0Z3QvQUVMdDRjYmk0a2Y0d25pY1dscDVVN1NmSkdYdGVXRDJKWVVRNEdzVXdtbFVWTEVhN2tnendrcnJBSjA0M0dJOWQ0RmFwUTdZb1grNDA3RWlYaDh2RUdhWHZjUk9vbjI5ZXZPanZITHNjY1A0bDdvdkppRVRRYnhhNHg4SUZ2YTMxV3FNelZYa3VuVHl6MUpiTHZDcE1Zd3N4VHlXemQ2bnFkbjJ1Y000aitRYzBtQ0FUZTVuL2ZFM3ZNVko4emdvdEUrclZzeW9nQlJWOGRWTisvU2s5ZCswYWcvWGxOcW5Fd3lWa1h0NHRSRExqa0psZmVmajBzWnBpMnVENHFoeVRxOUVXQ1JrTytYeW9lQ1RBZXZ5MkxuR2EzcW9sN1dHZC9yVXVDbDByeFVSK25jeUp5S2VVc3VZY0p1MmJkYzQwV05XNG91M0VwSitBOXg0U3NQMWk2WWpUY2NYRFhQL0I0OTdyaXJaY0pQVzlvV1pLald3aC9QUERTenI1ajNCSGx6TUFnRVhxbTcyTE9sbjR6VStBY3RCTDh6bUhhcnVCbWhiTWFSWHdlSTR6dWFBYXpENmFUclNJeGl4RmdZYUVaU2VZNG9NT3RCejMzRFprZ1pGZnl3OVZFUGFTdzRtNWs0SEw3Tzg4RXNtSWRGdW1ZMVJCWUNsZk9jOTRwTHY0VjFSSjVZTTNaVmZXUE5qYUVFL2x4ODZQSlBCU0JCQytKMGdZNmFseFZYOXpRWkRnZWd0TG13T0IwcUJhNkl1L3V4TisvRW9FTFFTL1Z6OVBqU1dDbTJ1WENqYzg5SWI0eHRDcjlBcG5wZ2lzVlZCRS96K0Z0N2JuZjRFNno3b0xuRXRWWW9Qa25YclUvb1FBM21HOTFwZW5ranA0clZmMlpGRWp1WDIyN2U3VEh3TzFNL1Rhc2pvQml5YkdZUkJ4Ym5IdXZxZ3NoVTJwTDA2b3ZZYVlicVc2OWYxMUU3Vi9kcVQ4QmQrcExpaytId3VNK3NmYldvSGxMUTlCMlNMR0pNUUNLSjJPYjVTcENEN3RWMjRNUTFBc0tlQ29DZGQ3c2xCRENTajF0bGp2Sk92eXAxUGV2bk5DcFpoUWxtQWVXT3B1a1l6bnVQbVpPOWgwS3dMd3p6QVJSL0FWRzJNaXRRQlFIR1N4bFFCVGlKdHkrSTZXL2pYY25jNHZaeVJ0SElpWTJmTElseXJDRldCOFlha2xjNm8vNDFYZkdQb0tJRDJIOEdSaXdVMEpxY0JXYUthanE3bGNwUFl6c2pqVUhLZnVDbkI0NlZURnZLdUd6OXRNTmxOekFJckdTNnFDNGJLUkF4LzZPMHNDYkJsS1BtbDZiZnhVZHZ3TEVsRlV4c0hYV1ppQ1pEKzgxOGtPb04wbDZkSjB1ZTJTQzNPRyt4K3ZuVXJ5RzZVMTRlWmdlaE84Y1dadk1FMThXREs2YjdDVSt0QnBzYUZ6VGcrSUpFWFYxVVZHMmhMUjVYWFFzMXlZVmZDdUpPVmpZYUsxb1dNcWlJNmhDZTkxVFNaaE9Od1ZSbVR1WmpLZ1RpUWVZSEYwRkNLcnQrUmMxM09BVU5DelhvSlpkOGVWaG1FdVA1TWYyUm9oVUIreXlaaCttWXRrSkh3MTBoR3gvNi9Dc3dTTEk1MUNtSE14bnhicU5XdjhGdzVadUNOc2MwY1ZmTUxMYmR3Y09VSE1kR1cxZGk0YTk5b3M4ZmZsV1cwcUYvVWhtcElob0NBNDU4VGxVWnBWWU1Mb1VPcmNqWmhYOVIwMFlUWk11eEFFbThReEJPVk9iZkNaVVNtN3RnQ1pYbVhkb2ROWXB3TnFVZHd1Lys1T3dETmZqNzN0bXJXcnVQZHBvVjVkN21Od2s0RkRzM3RidHZpOTYrSnhSTW1xTXFJQ0kveUczR0pnMEd0KzMwM1NadndManpXa0JpcVFrSVdTYmhQYmhhcUVSOHd1V3FyWGI3Umo4RWliVTVkbjArZFpHSDBhak55bkltU0FhTnlReDF2a0JZMW9Id3k3WkY5RGd2clphdFJtOXRBSXNrSG9EMkN1em1odllpVEpyQlczL0RPUkJYeWpkaXQ1THZObWxuU2VZRTU2VjIwQ3VkVXhRaDFpbkg2TWZsbGdwbHlKZDJYb0dFakp3cy8waHpnWERmZ21YQ3AyUU5MdlhNdDEzM1lOL0JVTlovY0pYNUZUdjNRRytld2Q4cmVhQjZOc3puZDNzVEhlL0d0d1YzaVRFcjZRc3o2N3FPMnl3V3ZrOHNDL3Baa0FyZkZBZGRDaUFaay9mTTlEYkYzV2hRd0NQQVV5R1NuMVhxWHZ4Q1lndEp1VlNFOG9kSlJjZE92UXlXTkFtWGE3NXpkVHJFcXp6dUZpVXpQdGZXRTlZMGtmMUdGcXlydXFpYm9OTHl0TjJ0Uld4QXV4clU4aURuQThNMmNJYVRsekdvWUlBalpZN1lVcHlSZHk5Y3pZM1BPaWVmbm9OdDlXMkg1L3BTMUs2K3RVQzZyUmYyby9vNjZmdmRZbHp0a2JsbEFyVUtxRmNNOUpEQjQza1ErL2xvS3pINDVTU3g3aHptcDZ6NjAyUjF0d0YvMWN4Z04vNDFXeXp3aDVYenVFWlJ4UEtlaHN6L2NuZW85Ym52RU5UcXRXUnlRbWlKa2RaVGgxTHJ3OEZkSnpKZHB5R1NleEpLa0EwSVJJL3lQOFFVWndqQXp2ODRGNnUyaGtrS251NGcxbktmam5vUkVsR3VRR2pDU05DdXVENVQvSTNtWC9SNXF1T3M2RHJUam9PUnBFWkN3NzRIK0JnclQ1Mlp2aWNaeXRreldsdVFGQ2c1aGdBcEVzRFJLeitna3F5TTR3ZXlVamJrSkdoTnNLb2ZBcmhoaWIxb0lTUklBU0N1QmFTRDFPN0VEWFZrTFNxc2VjdzRuYkVzRG5ZdGZEYTZDbzBOTlJxNk9xQktMVEU5S2RFdWhUbU5tMWp3WDFLVU5sanRVMW5vM09vd3dMMXRpNGkvR2pHK0xQUjc4b0g3VjRqeFpJK3cyd1oxelVQNjFER2g2QkJKMS9FT21QcXVoaFNDY1lXY0dBTjZSWHZGVzg0UzNqS0pjVHFoT3lwV0Q5c0dBZjhNK0NZVUllVkxBQnpwblczeXhPNXpQOWxsSk1DanBlTS9SK1RRei93MmNJY0R1bHIveG4rMHNKQnJraG8wZm9Xam9CdVhwYll3NFVNT2l3dTlZRkYyd0lPVlVGdHY5ZlE4M1pYV0gyNmVsNnBaaElsNDc3T2VFbWsza1U1NGpMQ0QxZG81dDduYjZEOFVFc21Sd3pNc3NicHIzcjE2TFNjY0RNTzJ4TFB3THlWaXg1bHNpclBobnBvSldFeUpkUEJNTzdpSU1wRjJFa3A1QXNGVjJwMjJ6TGk5bU9jeVdMSG90YzAvdHEwdFlRS3dKVHQzUy9qblkwd3F4c1hab1NFT1R0Qnd2ODQvM1RDMXdIaElKSmlnV0RrRUNQOHdzOXlqcXp2eVlRSU82R2o0QXZDdmU4VjdSbDBVOG5FZm1uRUNRc3VjSmpyQzNURDhpektJUGdPZkZ5bHdWdllWWU8wcTBoeGJ2eEl2OWx1YnVraWo1Y294RitsOXFjNlkxbk5WcUpQL0NQblpmeEtaZEc0MURUT2s1d2hOVHl3KzdmZzhZV0VXUFcvUlBWdXRZdUNDNGVoYzJlNmVwM3VVbnU3Yi9tY1VuMk1uK2JmZ0lVTmVIdEJ2ZDZNQXBPT00xak1tUWs5U2N1eDh5d2sycldPR1NtazBNZ0creDBvUjRPTEwvNzc2SjAxRWxGeU5WZWQvdkZqazVvM3REbUU2cS9zWFZGVDJmaWNXUUZxWjAyQjBpenlzZHgySVBRRFBtUjMyb2JOeUdxRWFhQzJjd3BwSm90QmRoLzE2VTBVd1pzWlpLWnJjSzhmTTJZN3lFbDM3TzEzcUsyc0lzak1WdFpiOW5lZE1leW9wSlBHVlB1QkFwSWN0MDZpYnhDeml5MFA2QURwYVdPVFVhaE53QU1KWGhPRUkxNkowQ2xYc1N1aTV0dnV3UlJKVmFHQytmZlZTeEZHUDN1WVYyZG12eG8yWXZnTEc3TWJsU1NNNC9telUrUWRjcEU3a3U0V0JoUlRpczZhYjdtYUg3dFVIS3hCak5YYitIOEgvMk01VUtGSnJHeU54ZDhUaUtRT3VMakxNTk5kU0hEYnYxdGRHWmVwTTA0UVExb2V5TjBaU0ZzWnZxTFRiNTBxR1ZLQ1J4OTk4cEFFb1M4akxRMkV2aFhKVDN2RmFwVnNjSW84cFR6bGsrQVRUOXAxVnBBZzFpUk4zVkdkQlB2TWcvVlBxRlFHcWpkNjNvZnVmY1VsbEd2Qk11QzRKMjZUd0lKUmdSY2xCU2FwZFdGSThSbzVVYjVPT2tIRmtHZ1FPYTBZdWVKZ2J6QXd5M2Z0U3Vlc3FHSG4zQURtQkEzOHVHY2tCYkNQK3hjbnMyRW5sUU5zdWkrVkhJNHpPU3R4UkRINnNjc3pzeVpha2M0aUp3aGJOYWQ5dndSNi8zQ0p0dDZPRmpDMEVSQlFZMGVjTy9MR0tYR1dJYzFHRVBNM2xCVlhoNXlyVzRpSTBTMitwWWQ3bDBLaUErVEZENTl3M1psVnNnell2UEs1Rm5vdmw3M1hkaWxRbE9KQUQ4VWpUTTdsV3UxOEd6a0xMeTZMUG4zYjZZdEs3b2dnV0RhSkVOOVBPS1lkK2tZSU1DRSszVnhEbnB5RndMQ3pHRjRPRWJVRVFSSUg1dTRqNDI2alV4WFJSaUNjOHVwWkdRNi96bFdsd1IwaEVEdUFDWm8xMW1WanMyaGt6b1gvVjRsZWlYcU1Jczd4OW1jd2dpcjJwdVY2UzByc0NuYTk2MTltcnpBN2JtMXU3azdzTXg3Z0ZuTEppV0RoZTBtTGx3c2N0YWFYcWxsdFg3SVM4S2J6N1JTenpzdGx4SExrMWEwN25kaHlFMk55SlJqSVRWdDE1dUJ4U0dSNjNqdFppQnFrTUFnUm0wbzhTclhaNTRDeDJTNHd0eGVQS3RCTUVPT2dXUXdjL2pjNkNXZFRKbHkranorNXRRUlZTVDJJSXBTenVDcFd0aXZJTVlwc1lxUDZEVW5QdHd4VHczdXhCTW9CTUE3ODZRbUJrSFdNQzlBMVFreTBuM1I3RlhOUmxlVkNCRjdtUlBtbS91bzZqYlU3Sk5XZVNpMWdYa050dHBqVkd1cW05T3lRY1ErZS9PaGJZcjZNQzRyYjdyVnczK1EzQUNnSW5PaEtub05FblJvaVV5cCsvMGU5YmNIVHgwdVVEZTAyZENBdTlCSUYya3NqVXRzR1AvZXYxZE1BblNPcXAwa2x2NWJOalE0WjE1VGhTNy9yMkozQkluNVEzOEs5bTBPNjV6SG1FZG5YeHpOTGtoQXVTWDU1dVB1RzFZczRiQ2ZEa3FhQUs3QUtEbm9qTHVsYTE5OFRzYjhCSE9UK0lEaFJoaDdtTm1lcWtMTlcweldjR3BVeldZeUNiSmF3ZmhSUXV2Q29qOXpFelhSd1NMUGNXSG5KQzYyUjJTQXhzd3VEdjlPLzZKOVhQYVREU0hiUkRlZUpJSVg0ejczY0R3NUQ3UnJ4K0diMEpjTmVQVjRaZFZZM2dSd0tzM3JUbjdMczJkdEVJWkw2UXNsZUs5WEM1TkRrbGpIQjNLRzJGOW12MFNGMllVUEdSeHY4eWovRi9kM00rRHVrL3VWaHJQRDF0dWNnVGFobFRXWlNYSmlST0V2WTVyaXY4c1BsWHdaQ29tMERZNGhwNDNSeTczcCtIMFhBdnRRYjdTVG8yRVhQWjJicERjb25OTWdxR21DN2JRYlY1dysrZUhleUZXd0NjWU5Ga1BVWGFUWTFxYlBJc1MxQzJML1ZjOENrUkJYb3VYNGVZbDVwWFNOengvMVkzZG9JWlUrbUd6SGhmR3NlNVd0a3E4K3BMM2F2bHJoMXBVTEpWendrVVlvZitOSlBDbXFNMnllREgvR2cvWXdGaWFTWjBQeUpMYm0vOFB0dXJ6ZGZVV2h6Tkk3VExCL1FFTUUyM1AzcENMMTJkSUd0SW5iUERmalkxbUZzMTk3ODVLMFdxdkZER0NJOTF6YXl3YllEVDRaWmNRYzJ3dGloYUdRTThIRnpOMGZiaGRtNXlNZit3TStNbnhhbUxPQ2tlTkJXbEZvUmw0cXY2T1NPUEp1cXlBQ01TQXprSi9BZllGK3hYZjV6RFpid3l1K0EzSXN2S2JPZlJldnViZGN1UWRNRTBpTVAxUVhaUFJrRnRzZEJvcXRrUHNYajR1dUZzamZJbVlCbDhTUFVzTlFyZVBFOThKTS8vR0F6WDJyNnYxS0JhNFVQTy93UGhUQlFPSXNZdnpzRWxkV0I1STVFdWs4R21EempHSm9iN2hOVnd6N1FMZnBiSUtKTStzTUpJMWh3bzljODVDTnVpeGFVRlZzRWVHNDBVVUhJQXFuZ29qamxocXlhKzdvMmd0dHVVaGhYOU5oRkFSLzJnakRhNkd2WkhMYURxbnJDWkx1bldOL25mQW9vazlUSkZ2N3JHMjZRc1h3bndJejJ3cTV2dFcyT0MwTDU4NUcwd2Q0VVo5bEliSlRya0VFVi90d2dpd2tpOCtlY1VNK0x0VHlZQndiWlM0ZDlLUFdZRnY4ZTA5WUZkV2VYTXh3TEVZaGdnTXRwcG9RbEtzVWR3YWE5V3VZcmgyS2dLUUtIK2VPSWE5UzJPVmtCcC94SDRKeURLZkVLRW9TUmZOZDZwa1Bvd0hsTGx2ZDRoRjhFbzZNTGhrVnZ4cFlvSVNwUWkzN3Flc3d3QlhjNEFMd0NUMVp5QjQ0b1dZeTNxREYyRFhWdzhKY2RYdXNqd0FnZHRyZ3ljU2YxYktIU1htdm1JVzc2TVp6RXg3azBFTGVPRHBML01tVnRZMFRTMG1pczREcTNyOFllZ0x2TE9JS2oxMU16SDMwTkE3djB1eUQrMGJ4WXFOcW9SQmtwQTdIbWx1bnNtSE1NN1ZwU2JmWXN5eEV0MGsraytOMDlSck1IRWJoVFU1cjlqaHhiYVNNMFltZVJhK2pmQTRSQkY4RWVLS3BtTUllUUQrT2JHZHAxNlFtTDNFZmxHWnlsbnVZd3BqVjc4YTM1SlJVK1RkUyt3K09lOTQvMCtJQ0IvaThQdml2bW80TklFODhtNHFQWE1MR3FaQnhTVFBvbjVMTk91M3Npbkwvdk5JL3FMVndUTWFaUm5EbmZYQmViVDB4UXlxQ040NE4vTkZWbHRVL3d5UUwremtocGlZRWZMMk8rUWZ3N01vSWpGbjlyMWFUaTdWZ0ZBd3lKSXdHUFVybUNOL0tQZVFxQXRpQ3cxSllSdVRLcVk2M0dGbEk4SU5wWlVKM2toSmZLeE5yTFcwajB1bjV4VUVmOUdLcXE1NzhoTURjcExMSStKL3Jzck0xSFJJdHdIVjFwM2gySDkwaUFhb3FNMHhHWjd0NW1QaUpCV1VUeVA1UzdYYlhqL1dHNHlIT24za2tHZkorYkRhTW1jYVE3QWRmaUoxN2dXTUYxRHFaUVA3RE1TN3NjYVdFWnhSZC9CTm9Ua085SUhDcC9ZZWFsSUFlWFV1bUpMWjZ0OXNrQjVRR2FUWXJXV0NzazRvdnB0VHZXSUhacWY5dUM5NWFPaXdiN0NJcmgyVUVUcXRnUlk3VkN4UGFURUN3U3JuVWN0ZXpwY2IvbGg5NWMzNnhCNW9IS0V5TmNxSEU2N0Q0cU9EVkpiZ2d0ZHhtUi9Wd3FoV3JTZ00rNWFFbjFuaXVicjRldXdqMXFTWEtHVWhWVjdtQ0pGUkxaY0UvTjhXOXI4ZkcvNjNxRUZTa3IrZ2pQdzJUWkxGNVM1N1RYZ3RyQWwvdDZncXdVR3lKTmc1SVZNa3c1UDlBQUxrWDBLaXFFdk4vTDJRcWFMSUJCeXlUd0NMYXRQV24wOUMrZTdFL0JIMTJacUJHZ3hKc3g2SE50WFVoSUxWUzNqaVBkQjlSZm1GQ0IrWEZ2bTAxMDhua1YycTAyUUFZaW01R0YxOEVhK1FpVEpqQXhPb0VFRVdLb1VIYTRKdk4zMlNlTWJGemhjdVFwQ0tpUXl3MlIybnRTbld2SFhqd2hPa0t0SWtuTENPTG9pT0tabHlRb1RJRWZVMDRzMnRjTEhLTTJoQnJacTJpSG55cXNnL0RCV2UyT2Q3Mldia2JVd0p1TGwvV2N1ZzZyTDlzVFlzV1Z6em9zR0tkakhVaWFpaEpTcVNGTjV0aHJNWkNNMW1LbU9qMG80Q09MbkRSekpQa20xdFlmajh0LyszbUZOcmxRQkNBZnozTTJONWJKSU9IR3QwaUhTbCt6bVFwNS9KdUdPRFJCSUZuSU9VVVRyVytURmVlcko4S3REUTdYQjBxYmlMNllOWmJ0MFRxbW83TnZ0VFVDMGMvT1FsbGZEK2F4am05TEVkUzA4ZWxDankvUmtWYVRLRFpWZDVNaXBwd09YOVc4OWNubHBCUnpFTm9rcjA1NGRsSTNDTmtOWkFwdURtZDJVMkUyajBncFZqbDlWdmRnbytpK3lDSkJham5CU2VLUHhudUFaTUdkUkh6aTBHYWUvdzN1YzdEcWtXTDFhVng4dUFWZWhTbEF5MWxSQnZZR0orUDhQbndXUUZUSWVoazErT01KaWRabjZkYVg0K3I5Q2RjMi94QUdJSDh2cFV1d082blZZU3pBWVFyWWhwQUEydjhjVG45Qi9ha1lhTDhrcjhTZTVySmZsRy9SVjk3MXVibklnTmp3NWZ4aUYwR1NrU2VwVHpNQnlWZ00vc29jVmZ0RmU5SmNvaG1KV0ttNkQrS2dvQVQ3TG1lRnBhYnNQbTVtYytWRjN5dk4ydUdIc3VjTW8zNFFTRHpNb2F4U0IyUGJCUk9tREE5UVE1a3B2QUZCMTJxOUYydG5VMzMrRFFBcVBjOXIrdHVTM1NhOTBVTjUzUFhTbndTbnNScFdOMG9kS3k2ZFFOSnNRYXRkVXFiUmlsbnllS0dWN1RDNC95NXlORDZiNnp5d2xicTcybEhZTFc0V1BYUEtzWFU1eFZDU2JtV0E1NmtJaVhIYlUrMmVQVG5CZVBrSXF2amF4QXpnTHlnN0JwQVUrUnNzcGxCK3lEdFVNM3d3cnU5UjZQbDI5U29aWnZrZFlXNUtQdzIzR2FHM2ppZkJaenNTOE56dTZqRUZLeitzK0xkN3lmQzRsL2RtNDZsTkVmYTVDdklxMWVtOVJRR0VYQlA3Uk1McXV1UVlNZDJJeC9kVjVRMEp6T2VRc2toVXFqQjBNNXc1dTZzK2RQWG9lSTNOaE1qOVYxQ2tHZ2E5Y0diOEVMZWRSQTlhMmpWKzY0QWl6Ni96M3REV1NRSXRiVHVMcnFXNjdUVzhscWpBaE1od0g3dFVaeGRPZmtNb2JabzFyL0NuMXdQOE5ISFhQSFRPendPY0g1Y3lYYmNnVnplcmtkRzFkZmZ3QUxrWWxpNW0yOHpSRzAvd3ZJOVpWU3ZZTFkyajFDYUxtM05BQTU2L0MvcDZsQlk1UGM5Ni9Ld1pqS0VOVkRFUDV0Y1lUYWJsZDQwWjlZbFhCamNaTFQ0UU5tdE5rZ1ZGMkNZTEc3WlBQMzMzRk9FZHlMc1NyVzhES25JK3Q1WFZoSUliOVBRbk9wT2lncVNNaU93eE5vZUZiNEFLRWIrRkZYK0NaTGpkTHQxTitkUHVrcGkvQUxVWWFnbEZFTXR3blV3TXIzLzdJaXNqOHpGSG9nendlY2N3TDNOYVVCMUtrOUM0TklnY3Z5dGdaK2duekJLdHNrSVBHdFNGTmR1VDRrUFZTaFZSYjViNUo3alRvUHRuMk5FUlhOUW5VM0ttQ3hvUzA3WDhMdk5SM0d1cUJpelEwdUZxVGNZUTVsV1Q3VmZYd3NNaWRJcEJWV3FoaDBmeUZvVVlkOFhLRlJNcE54YnEvUFVOT3NuaHU0dTRBdTFLVi9PaGxqSkViSDhzVHg4ZXRMdEVGMnhKNXlkZE9qN3ZKSWh0T3I1Z0tYdWs4RTBzTFdNcmtWa2gzM0VGSURnWVM0SlZ0aW9FYUEvNWJZM2VxMy9rbC9TRkh5Sm1Ic0lqNGxLbWhORjk0ZWp1MVBSZXQ1YWI5ZENROUFUeCtXWWVBRVUzR1pKemQwMmlMUFZ0bW5mMGJhVnU3ZjVEaUp2bUc2aDlEN05ScFBKQnRQaWtPRkdFdktSUTZpRkk2QkhIdHZzcjBpZ3c3MzJOV0J4TEpmOXFKVmVmWXk2bUZmdEhKejZMREY4NVJIdXZlQVJhL1paMENaWFdjMlcycEd0TFRXMWV3STVzN1puMTFPWjdNR3kzUGk4Q0hzUldtZTcwWVBlUnlpbFFnSnhkbjNudk0reFJBbWc0aTNIQzVoYjkrRitCR1NYUFplSXpzZEJtN0xTc3QzUWxiVWVRdTUrY3R5ZUtSVEJ0U1B4eUtud1F1Q0VwQmlwcE5rcTlUWmwzOCtZdWk5amVoZTgwVGVSYmZKaUFsemZubEk5cWxYTjlxOSs0WUlUbzg2aExUeHBLRkdZM0RqVm5YcDVoTTZYaDlpaUdGU09IOEhPZ1R6VjRpTEljd2VBelMxZEY4ZUFYWXR5Z3pHWC9DN3dmbjlUYThGQ1FHWWFVcXFoSEp1cmlCRWt6K3piVFo2Y3BJSGE4NlZHN2V5L3pHSGYvRTRBSkhmcVBXaEpydklKV0swbmNaWnY5NmJNbDVJWVpFSi9XN3BMT2tkT2dvbnpLMVFsWk1qQ0dzWnZRWGZZTmt5VFQ0NzBHWEQxdTFaeDVxRkQ2NG1RR1pCLzM0UGl3TkZybVVIZGNxUklGcHdsaml1c01VaFFtWklnTTZ5Q01lZlM0ZGNjbVBEUFhYS0cyUzZmSVAvdC9aRnI5MmRuc1cxUGtNTUpjc3cwS1BlSGwvelZlV1RDeHc2WFZHc3IwNUdKNk5BOFpVL0RLdUZKcEdNay82bmNGSWFneDh5bE8xRGtUNkcrUmFsZXovMVZET1A4Q0tIZlkzOWNJWmowVWZpTEMwOHBUK01NbG5WTHVCMEF4b0JYTURPMnVPMzAwZDd2QytwaHNjMnBNNlRaaXpwOTMzeUlrN2FrbmQ5cmNVU1poMVJ4cTRIRWFzNlBDU2FMakdLWG1TQmRvVmttWVVEenllUFVjaGFyaDltRXBkT3dNd1lVMHZiS1JFMHdJb1dNS2hnczI0QkVKTStvU0luWktSdVhUR2paeElSQU9SSVNYYjl1WGJ1WWp6MytVdTJGRWhRbVhhTThrVk5XVTd5NmxKRGxDLzFKUUFhSHFMRUlGdE9hRk4yNFh3a2lycFN4ZlcvTDdMZWFYNldjSk5pOTZqUVVHWVcyS0M1QXBsMm8vV25CUkx1YzFPeXp5YUg3eW5ZUnJ6UEsyUE5QOVRuOGlHU0dKeGJXeEJlYWZVdjQveXhuMy80RmNpRHhpemlxbzJvZDR1Y1c4Nml5NlhIb0UwRGdOdkNLYXVBdHR2N1lVRml1bGRDcnhIZTNtUkgzL0phZURBdWtDUFRPQlE5VXBlV3loWnpUN2E1SXRCajFxR0FMUngxckRxL3g2MHdNd1NyQUYzd1NSS2FlRlJPTDZCcU05N3RoNnpKYytpRVZwRDZIM2gvRGk2aUN5bnFmZ3Q3dy9ZWnNiWSsxb002QWpwNEMyWTl0TjBkRENjNUFHUlgwdDFZVWRRQ1hqWHA0MlZwM1pneHBRR2tBUXhrUU51MjU2QnZQRDU3ZzhVSzhXQWxxMFZHZ3c5OGlvbGdXRDIvNG5SSUJFVzU5Y3NhNHRxWmRpV0dKMC9yb2lzbGhwRlRuNVZTekFZYTVwU3lTWU9kZnV5TmQ3WjhSUXRSNkxtcDkxQW9QdlQzeUFCQ3Q4UzVHQm5SSGcvcFIwd3NRTW5XV3NBS1B1RCtVWC9IcUx2d0xQRFI5bkRMTzYyUDVKMjU2VmQxYlZCakdtaWVhcmsya2RtVmZtUDVjNXIrblBSeWltd0tRVllhWURNMGZUS2N5c1NwdHlyUkJqN2NibnhLNDBlby9FMW8vZzVWbkNTL2YxbkN0ZEh0UllTT1AxYU94aVZvaXNJNlhFc1gySjhvWHFEQUorNGh5czRxRzVMZ01QM0cydUY2Uk5SbEZXYjIvOXo2UWxzdG1YTUhwekdlQkVjMmxTT3B1N0M1L2tPWmxuK1J2OXQrVmdqTkFtaXhxTytjRllhSWw1TXBxcC93cHhaTW8xbndNTVdTWW80a09FRldaaFBWL0tMVDVRU2svU09qQ3dIei9jTm9nekd2d3VPK0JjY25QVzcycUF4azE1UUVqbStpNlh6QkxKZlpUcmFmdW1mYXowVnk3RzJocjJpeVdCdnh2SktxZE5nRC83M2xlbUJoNDBXd0NJellESFh6M0ptZHlTRnpBUnFOZmd4MzB6Vk9sVlpOaUJLTkVkTE5hVmZYYTZzaGxiUDVyNFZ6aDBuT1c4SmJsbVpXV0JOQVJsRVE2YzlvOW12TFhYcHJQUDlYbklDT3NOREhFVGZVMzhxSGxvRlVDc1pCWnVLTWJkaXQ4Zk91KzVSTkN1bEZjRkQvOHUva3IrQ3IzQmNROGY2M2tHVmQ1eVdyaTBFV1Bjam8vN012ejFnL3g0bCswNGJzMGVMZVp0QnkyUFhBYTNYY1ordXQwS3hybkFhbEVtQVFsRmlYKzNneld0UGVjY0xreUsyM0YzMG9xYlJLOTkwSWlsVlN6RW9CNmFPMmVEOW5Ha3A0MXdqTytPSEU5Q2hxT3dtZWlSVUZFNnBBQk1hcDJmbjFuTmdnQ21PazRLd2tldW9nTU54SUJwdUQ1T21reVJTYUI2Mk1oSk84ZTU2ejJUWWo1TC92V2hhS3g0Y1VVbDVQQ1k2dXQ2SVR5Qytkek9oQk5PNWlGdlVlWCthTURQZi9LT204bWZyTTRROGF6THJvTnQ4NFV6ZHlDdG9PYlVGNXhZbStGOUxBTXFzeXEzcE9wb3ljMTl4UUxROGE3bTBTb3RxWDE3SGdsOEk0byt0UmJINE82R2JrQlV3ZGtkQytPQm5sR21GMWphMlFOUThRRUt0OG1tZkt2Z05HQTBiek5MRE5GV3orRjBnZmVQbUM0Q05sdzlXalhVVTh5SERXakVjbjdxeXlUSm0xSzh1TUttbWVPeHZPdTR2MkR0YkcrWkcrYWY0WDk5Ull2TWh0THMyb2QyaHVLSzc1czVRbk4xMzMzR3RibktmR0FmUnNQL0REUHJtMWw4M0tTdHJ4RDZrNWZOQWxicXB2WnA4U0pZNFg5MmpWMU9FSWRON2pGL01lQTNrRWdHNXJ4SjE1d0g5OWtBMUFRY1RCVDNmOEU1TTRZNjNJMSs1TktGK1hhUGp5dWVzYTlFU0xSY2RnNytWT1pYK01FMnlDdFVaQ1lsdkpmWjlHRjlwV2Y2SXVlT0JtTFVJdEFwSXhYbHJTM00zd0ZzTitpWE1NV3dycUpyWVVzN1B4NEFOWVlSNmZJVmRZVDlBNlYzZjFrYjFaREpyV2FxRWZFaEpQT2o4c0ZwWEUyT1gyR2ZlQVJ4dG9uZU1MNzhtQVk4ZVBYc0lzMTR4aFdzMGNuK2JlWGpCdVV1SWkzVDRnelpZMWVDamZkZXBFZFp4YmFUdFNrRzJBQlh6WDEzaTJBNnZMZ3BCU3dLNU5kSkZIVlgzcnJUcWVCQlB1dWx2WjU5VEtMSDRmbG4zK0lNZW1pY0tZUmJwKzVyOFMxKzliK3ZTK1piNHM0dkFSUTJWVGdHWWNYSDQ3Z3lWT0FMZ2JIK3BwUWhPYnJzTVNTb3A3dnVBVnljYVZwbHN1c0N0YWthQ283Z1VVYzJGK0gvRUsxTmRZVlUvZTIyUE9xNmhGZXlvaFZETUJyZFJvaXdiUm9RWDV1WEMvRkRodXp6ZjhhNnBJWXpHMklTWFhiNE81Qkc1Q2ZEYjZmV2xzSkRaa1g0NDJzc2xNd2F6WVo3MzYwaVpqajZlMFNrOGFuRGhUYlo4dzJoN1dFSjVTWWR2UEVmdi9MeEFvR2pMa2NCcjdwaVpTNTRRRnl2d1l6N0tJQWkvZXljbEplWDRsRGVZZ3FLR2YwVGVDVHRaM291cG5HSVkzRWdRRDRYMWNES0g1dDVwZVhYZFZ1d3FDekIvemMzejVIYWQvc0I4NnVQRm8xZlpsWmNpeXlCTWdzaDRGUkNBekdYNjhmbXlueVVka2xSdjUvZWlHbGZNN2dLcFlBSy9VYjdHUnRsdmRESlJ3blVwc2w3bmRjNHlOQ2ZYUHpuYnlaRjZWYTFuTkJmY2lrYzlrZEVESENYckppaEVnYmdwOTZtY2FOS1loVVozanp1N05hQWpjMytUdVQxRWk3cEhJNDRqY1dGdUg2alJobmppZFRXeEMxcG16N3RKMEhtSWhiWThXcUhROWxZays2d2pVamZEZEt3c1E3VzUvOGd3cVRZR2FJVXRQaXVCQ1NjSEs3MTNpazRFRFBSa2w2YThYMHFPYzZ4YnFybjV3OTdzOS9ma0xpSUpGdXo3QWliYnNUMTFjVllnTXVaZnpyMmhKVG5LUy9QWElzSWJEYlhVcCtlNzgzWk1mYVMzV0NJdzZDVXlNUTdWOUdzYlZQK2EyR3RlWmJUWmw0cDdoZ0NCTFEvSTh0cjFybmJYWjRibkxTcDFVUHVBUlVwb242dXduM3plRmtFN21mNHRTdDhrSTRscVl6VVBveXpPZWNpYmIzTFB5KzViSUEzdHppd3NwelJqSG9DaXBUaGx5RXcwelArWkl6bERtK0ZBWTVpVmJReTY0NUhxYkFXajJYZTlGUlZDQkUxZmd1TDBYbDY3NzRPQ09sVDJDdHZwL2pqZE8yRVhXRml1dkhKRHhhai91djcvQkpFdUtBbGNhNC9OamhBdEtvNlFjbG4vYUh4dEswLy9QVTg5dk12OVlUdFNZVnBDS0pteXRYSjJYOXZGODBMV2NCMUMzM3I4UFpxeDhxRXV4WXQyTXJOc3VPcHE3a2FIdTVTQnBRdldoZHBkTDhOS0M0NlIybzA5aEJqRWNab2N6Z3paY1l5RHZtT2hPeVdrZVQwM2VrZWlBdjdtenZDMkVCbFYxMW8wQVhoMXpVNTJGcWFQaVIxWTU1M25VenhEUURNMmhxZFNnVTk3NkVuUmxCbUUrbmVpNmcwT3NjMjlGYmphQjVGRkc2QlVpbEQ1RGhyK2JnU3lJNzZsNE9rN0x2cjk5SytnbzJIQkFZVTBtMHE0ekY5c1hBaExjR1VDUlFRZEJqNEt1MXN6Z2p0azE0VUFPdDdGaFlYY01PZ1BKVWl2K2Q0VERJZm1GOXVBWHpYUmNabklLYm81ejkyRlY3V2d3OXB2OVE5TDZrY0R4NkZsZXh5N0drWm1CM2RXbkJrS0pEbXFEZGZZdVE4MkhiUTNzdnJJbmlETjFqSkNsSEFKa0R6ZUQxcmFOWTVkQXhFcTBSeWRiY3kwMFA3NlZmZUpkOHJtSjhqUkhKWjhFenNLdTBqdDFESTVmMWJYWkVtSUlRaWVkbi9TdXNaaHBBRHMxd2NCaHdUYTc5M1FYMEJ1UFd0R29hcmx0Q05KU1NnOVhMV3VEZ1pHVGp3UnM1cDVPemN1WEU2bUxPSlA5ZzJFWmc4RXE2ekt6U0JXU3pENEhONnZwMFR2b0E1TlBETWp0b1Vlb3k5eGdFV2owYUtzL0NCaEFrc3YxV0ZsU0hGUERINVNrWW5GdExoY3BXTnFpSzByVE5QU2dhRnZPUEgyK28rbEIraHRJd2lVd000NFpYblo5djNWbXBJYjVVT0Rjak01Y0dNR2hrNThNWDdDeHZiNHRHaHByQVZBS0l2OGlvUUlTQlI1enFZOW9rSnlxSWZPZGNya0NPbTRXUytWeStPMWFlQnEzZ3hsMFNFWlp6MEtIczBwMktJQUlTbkNiSUNWeUo3QnBCWEo2Z21RM3UxQ29odTdQdWRhRXFGc09icUhLaG1KaHVTaGxZbTRwM3NEYXNpZmJ0ZTBJQTUyK3ltNVRSbElCTEx1OTBDaEswbStGYUgzcEg0NWVKZVJmTHIzTzcvVmpFeDJRQjNIVFBuQjRXdEVEeHlEL242ak4xMUhqcURNTUlkR2NKemVJcEwxcDB1Z3grbDB6ZG9HRVNmZmZNbzUwZkZHQjFxb3grdTdQbUVzR3pGTHJKbGdLMXJySE5PdEp1ckt0K01ZNEt5a3l6NlhkY09SQWpxYXZ5ZEV1T3RZWEwvRG5vbXU0WXgwMkMyd2NXRHByeVFrUG9hellVZk9rby9GeFZEeWlpK1VnTFpYOVF2bENDaXpEU24veXprUkcxUDE1R3RZOUZJRjhqaVd0Vk1jeTRhYlozZVRGaTB4S3BpSzB5TkJZRy90cVJWMVl4ODU2bFp2NnFGam1TdWRBMmMwUThJb1FxT1RSM3lQUThJL2Raa2Uzbzk2Yjl5VEhHc2RLTFc5OW5sNDRRNFM1UU0rV0dwdmRsOTFMQXROWm9DWWVtbG9mZEwvVWlmVW1WSENwb3ZmQlhRa1BIZWNRUVBrcnFTV0VjMHlKbDVuMk1HSDJybkdqZG9GREVRb3RWL05nc3BXaSs3bkw1MEtKMkNaSmY0TWZWeXMxdFZZRkEwbms5aDZNSHB2L0M0Y2VNL1lsTzM4bFp3T2RhbUJDalZDMlFzUExtb1I4Qnl5YzN6amNKbGpXMkdzc1lRQ1UvclNrMzNnN0pCSzluczNZdERJMkJHMzZ5bFVxa1I5S1hqbGFKaHA1aUxqVHJMeGpCMTNBYThSemRUVWVGMmVWcXlON1ZyZWc4MzBpdU5UMS9hMUo1ZDVZL0VNa3lselJCSy9ac1B3MzVTZ2hFNkpTZ3I1bnFaODVVeUdPdzVvNlZCYjBENUtjaFpsOGJJWFlyL2FCRjg1bFpKaC92TDhEN3hXUGcvRUJ1MTFKZXdyRldFQ29aRzM5VlpMbEx3N1BlSG5qNEZ2K1ZScXBjKy9qcHRGOGVZb0FINzYvWHVTdGRZY1pQaEFPWDFWbEZwRVNhZXdRek9qWkpabVVNc3NwZ1Arb1hGRVNadUl3c0piTmRhVDdCTWNqWWpqYkludnlQSmllYW5DeTJBU0poaHlRcjJZZjlZaE5zWkk4WE1yZGJWTHVzUmY0QXI5WElOcGZ4dTZoeDNIeVNRYTFjSU81aWJSVk0zanNTbVJiV1pHcXlvTGNiaFJOaWxLSUE5NVVUM0ZPeTJvaWtQaEpUZ2ZZdHNoeUI5c1dsSW1nOTVlSTk5WmFxb0hvR2wxeU9aaVcxZ3N3cW42blF5ZUZmcUNMWVFSVUJBQWV2REVydnZncTRucWZmY3ZIeTFYaGpwRGxWQk13WmdKa01LQlBwejR6SWNOemV4ZlI2YzYzZisyeEIrRlIxNEZBekFBVlowREV1b0J4STY5REl5cG16YkxPRDBCUHJnRkw2MlNIWjhFQVd2eDFDR2YyQkE4MTZuY1N5ei9HdkRpZzcyVmxZU3R5UVJNUWlySlR3dXdNMklEL2lqbC85bDU2OS9FRytmNmhnUXFTMVJFb1YyNzZzYlhmUUZ5Zno2dXhkL0p3VzRpSDloY2FyZDFiK0tOajdQWEY0SmZ6MWZ1NFNCbm8yQi9EVE1YTjIzQzJvdXptaHBTcmEwRmdvS1NIZDVwcWtaaGxKd21HMFpTY211QS92Q243cmtRM1Jwc1U3Ukl6aTRmU3ZSZlpvcmhkWHZ1UERVclNvRW9JT3YrRVpmczllSzAxeGpBZ0VUU1dXaDNERVREYnR5eGljYU02WXdlMEtMZXcrZDRXNFMxOU9RWld1Qkk2V2Z6US80RDd2S0dYdVVEMGZzMHNPayt6Y3ZUa1ByaUpsOWpjeUVKN1pJbVZobmJVaG1Ocy92WG9ITUNyNmUxU0lFblNaTFRaZE1aekgyc25iMmpRZDFXd202aWR2aXJaejFhYW9ZdHRFWVdRaG9EUFl1Y1JDUjdsZ2owajl1MUMwWDM2ZFpyVmo5ZDRxbDdaQ3NvUTVZUmprRG9PbGY2WjJCRkk4cnd1eHdOMk5hcE5MN0VPM3lNTk9ET3BMaWV2bGI0RFdDTCs1dDRJNEprbEc3eURyRzQ2aHNsRDhrSmZkOXJhRS91WUxmazFSeUc0UFh5cGEvdVFQWHVPRC9GWGtFWjA4RmFpS2xTL2VaSnVxMytVdEtKM054WmdBZGluNEFFQ3FaaDV3M3hNZUU2ZHlWeTEzOGw2aE1JSkZmU1NIVzZJbW5IZVY2Yno4OWdoSWg4ckxIb2xvYXJBeHdKaEtpaFJ6TkZnRWw5MzBabnRnZEg4SlRPM3RPZ2lYeFZkOXQ2eHdqMGtKMzR1QU5td2p2RGVjZWhrOFRHR1hxSXVPdDVhWXp0Ync3Q0drMlhKa3VnK3I1eVNtTzYycG5JY0lOWWRYV1ZJRW5oN3p0ckoxbGJybnVUYSsyVlBxWnorVjJLaVNBY2dxRFAyV1ZwVDBJMlo0QXZWNGsySVJMMnVvSHVleCtyc1NKQzFaQ3dIcmRSQUF1b09uSGM0N1paYnNQUHdHWXFZZG82MkVSWEt4aFEvRTZIYmdlMlpUMENBdWV2MHpjclR0b3F3TEFnekZ3Y25NMkEvUk5weEpORmQ3RWQyMUp4RW15azQwOWExOEErOWRBTS84SUhXVU9oa25qdENrOC9wZ0VYVDNWNUc5ZWhaMnd3ajlLcGxzM1o4MFZLNHFjdEkwY0ZWUDVxNkcrVDBsa0Q4VjRVTkd3WWxtenA2M0pEdUxoMWRaY2Q4WVFMWDdvMXl5ZjhtdzBabEdPbnJ6UFRpdUVvMWo0THpGTFQ5a1BnV0JXOUg3a0xtZkZDb1kvZmxXeU93K3p3VzZEaWtZbk9nQi9Pc2ZmMXY0Tm9vN1QxYzhFcTFxZWJEMW9BbTVidE90UTlsWDJERE9jY2lZNHd2YTdXWTN3UTMvWjFydzBSZVl3WExBNFV5YXlrUHQvMzZ4WVRBUk9Vak5wc2IraTZpdll3OGw5cm5IeUdFdlQ4dG9jb0h0QmgwTUdhWnRTNC9KSWdIUmloY1liU2ZDaHdSemZGd1R2RkFSbWl4YTFMRkxva3JrTldiMCs3Yk1ZNzk3NGVFMEhEMGgrd2NSSnJlWGMwdzYyMTJiUW9Zamc0Q1lyQjFnQk5KbXpKanFuQkZINDVBSTIzMzU3TlU4OFRqMVZXWnFpdE50VHBTMCtZNEttZkxoV0Nqb3VGQWdzcG1FZ2ZnMENoK2pScUpHN3FscHBiQXRTSGpVaXlmMmN2Y2RrYWNLQnVlK00xNndZVi9uSnRzcGlubjVRZFFPdzkyZWpjdGJzN1ZWcTM3ckdkYkhkTWxyQVVSRlFtanpTSEFoMDlZYXltWGE4amQxSElYTG03bnVaT0p0KyttSVl4dmw0blVHbDZMRzdua2JZbzRWUGwwOUJicFFtN3piTUdybVVoTUV6NE5pT29jQ0JNWC9sa3FOQkhvcGx6SlNETFNSZVQ2dHJDUkpxV3R3Zy9oTDArcXB5bCs2OTE1MW0zY1BiNWR1bTkxMms4Q25JMUV3WHdqQXFwL283NHJRTDhWVm5uNmN3YWtqcTVuN3dkelZRRThOZVp2ditOTXRBSVRSR0YxR3BRb0l4UCtvalp3aXB4WXJCQmFQR0pRVnlzUy9BRmF2ZUYyaGxUdERpVUV6Y3RxcXdjWE9TcUgrUEYyaGFUQ3JEM1A2OFB1bitrMVVWL25CN01YN29VT0tINSs1UXBicnFXZStBZThOWGZNQVlyck1SM3F1THNVYklBV3dOT1JEdmFkRW9hVWlieUNYc2tDUnAvZnlEOXJDRnNlOWsxOEVaZHNqdzNza1VTODl1WFA2aVMzTkY0T3hWNE0wekhTUDBPK2tLSHV4cXlzUDlmMXZFb0tMSExndUlRRWowZmtDYlBVYlE2QWR0NnNGL3JRd056dGkzdm5qY0tIelloQVdCM2ZrZDZsR3ZJaU5zWlAwRmpzK2crVCtQaGx6MnVJMkNkcVZmT3RFbENTM0k3bzRiWlpMMFg1bTJSMVh6S2U4VlpOODh2dFJPcWhrQWdEWmFmRWJwTDdLTmJEbTd6b0NaMHc0Vy8zYzUrODBnRXNTUDdXT0lMd0c5Q1hxQ2xEQXlBU281ZDFlT0grcXJBa1lyQ1pwRlBpTlN1UjBlS2daeDByN1Z3Mms3SG1LOW4yRHA3NWdydUFWK3VlSzlNcHo0ZGM2RFFTRUJaQy9lNkdzS2ZjV0NVczlOVE50RkcxWlZBUkVYRXhoRTdzNGFTbWJZZW1kYzVaV1ArcU9rNFdRKyt0ZVhCcDljTnE3TllkOGVjR1hJN0V6NUxCNmlTUzBuZnZDNFdzV2d2RWhmMnU5RTRXWjByd3FCTEVjNEwvbWhSaDREcEF6OGovTmJzYVlaYkVzQ2NyaTMwdU9SRWU4bTUraWhseDlmZXAwVTl6MU1FZFJHaFFKMUcwendGNlhCMy9lRFExN1Bnb3FDcnFCSjNsczhLM2p3VTdsSnB4VmsrZnFKVVAxY3JLNSthMkxEQ244dUpjc3M3YytKNWM4Wmo5VWlUL0Z3RG1YcC93RWtoN1JaRTVsREtZQWh0L0ZKMWh1QXZJUXR3Y3lIKzRINVlNQzhvYkxheDY1VExUYnNiMGJjRzc4bUljbkxDOEJKZjZ4YVRwOFVmeVNXQ01pdkhNNTB2TFVvaTZOako4elE0MW1ORnA2RWN2ZUorcnJFMU83eDI3QVEzV1hZNTBqdkEwcmc1OUpaRjgvUGhDR2xFbG5mYUl3SnlvTHFUWFQzSWhyVHo0SW1hZ09CejRxeElZaDRvWVdDdHR6RE90SXZNRkxZdW0vTHNUR0Fhc1Q4V3FEVXFSWkkvVFNYSG5hbmNnMHJOS0UvV2QrL0JMVFdpOXd4djFMZzVlUUxueGNMT1hIcklOWVc4eWtLZDZVdi9SZUZoQkFkdHVyVzlwV1ZqVFFHb1BGNDNEcWdyMWxjanJjMWFNRWt2YzU4VGZjdVk4UDZzc1BzbUNrZG11WFNJUzA3V1B2dXRQVUE2L1ZaTDN1NGUrRW1tc09ucmN5UlUxTUtkSlRXTnI3RG5GQmZJaVJWS2VZTk9Db2RtRXI5b3dtRmRRK1psNU1uU2JSOVNMeFpPUUg5VmQvUHJhSEJMaDRNUDFaK05kckN0ZTlHWHNQOHBEWWgyT0FNWUwzcUpTaGtCS1Z5dU02WUptay9mMyt6MmtVOHhWM295Q2tEU1JmMk9zZmkrQ1ByeFpQV3ZIaVFkREJRNEVTUWs0c3M1WHFBQzVtZ0xacjZaNWVWbGtXaHVjVVgrNVNzQzFYL0FVMGliTStGUGQ1RlM5VGV3N3lHZE4yVldCS2xUcmlhSXdJWHJ2ellkVWpmbjJiUGROOTk0K0tZNWl3dFRpKzNiV01ERVEvZXZZQzBUazljTm1neHNMZ1VSRGJOWkx3OEVpMVBBa21GSGIzMTJqZXkwSXBMTTc1dElTNU5MQ1VSZ2xUcnRvZWRSSDQ0b24vWHlpMExiU0dUTU5ybXRRTE1FRmRSdDVMbEt2bGZiTGUrOElac21QS1NHQmFNODhGcUIwdWliNy9WOTNjYXNOeHdZR1IxR2lQNEh0b1YxUkRGbmhYOVlJVEpNSVRXbC9CZ1doeXpIUHlZeEp6UjNmT2wyRXB5Umg4blFDZkVPWVNRTS9pRjZzblptTHprVmlPZUtRa25OQVRPODl3T0NrNjBCQWJjYnY2VmVPVVNaWGxJbzBGM1hlc2FPcFZPV1lBVmNpL0JuTWd1ZGNjOEl2cU10QlFadHovQlN4R1ROc1hNVDJlMHFYdTQ3VExBdzNOVXZYM2QzS05ucGRYR25WSWVOZXk3ZERFU2lWb1NvcUZlam1BdjR3NTcrSEJaZnlLQlgwK1o1WE4rTWthNi9FN3YrYTlzNmxPUUVHelo5TFRydzFrOXc3RWlqc3dZMWFYcGtDcU00Y1FaclFicVBtNWNXQTdKZDVESkZocDZERmd6b0JaN0hnN2E3VkVleGxxZHNqYk9VL0t4dGR4dnlHUWlPSFliQ1hmaWxiY1U4M1JncG5UVHJKRll0cnMrV1hnOXBEVjVjempGNFhRMGdPNktVUDlzaHFPL0ZoOUtKdmJYcWFZSDNWZ1pYVjlrSXY4NGZaVXpLTEhUMUVmZ3NRM2tRTnl1NW1hREgwUEJYdURmSndYR0N5SnhtVi9ZMUZFWUtub2psbi93WVRnZzBWM0NUWWZ4cnVBSW1kV3l5NkdIR1NGek93ak1xK2RVTXBLRThTSHp2cS9ocG9nK0xPc3dLblEvcVRoSlVxcWxkemhUcEttTm1nRTZLRjNJaXFJbWt4UlRLSTNCbE83cTlrRE1nd05KZ09VTHV0RlprdVNmTjR1OUQrZ2l1WURieklUWmZIV2VXK09rRkJnNUltdzliMW5rSWU4M2l4MmxKbU1mUWsxVFNWUjJzSWRNYnpUWjZ1ZHJSaGhDZHdFbXBVb1FWQXROa3RkTk42RFduVmRIZ0dzUUR2ZE9ULzIrRERzSXFhSHVBUGc1aDFJRkhLRlFpNG9OZzJBNU9XaTh6K2xiak05U2kvUzNLTi95RzJ3L1Y3cGRsdjYxeG5GWGVZUlVXVWdvbkJCMUVYV3JwQytYZldVTzc2dllxTE9Jdm9nQ0lWQzA5elNZVHF0V3dGQk1XemVCT29hUjM2K1JSbUY3bVN6OEh6ekhLdThTWTN6b080SDdyZSt1Y3Y2QWNlQitlalpYbFQ4ZE44SXJaYlJ4ZHU0OXhuRmtQUkZZRHpTU1FsUGkxc0o1b1djSndQZ2xzQkdiWklBeXYxK01wUEFtbDQ5R0hydjhGMDI1NjFoRHFySDVGaVIwTnhmWTMyMWlMUmJ4bHdVVW5pcjU1RzdpTkNqaDRTa1VRd05LanQ0VktFUzRwMWZTK0lITFhiMktZaFlETWxpb3B1SXhxb1dlRFRmQ0lmS2lIRFIrOXB2Q01mSzErblNzb1VKK3RPQjg1K2RXVk5GUVJUMHovdVNablR6UXlMeVA2VllnbC92dHJjeXVXYndBdEtTeFovcXJOZmRRVXZGWjIwQStveWNhUGFOTGtYR3lOVDNjMSs1MVFwZVRlalYrYXV6ZVpwNk5XRzZDaFA4Z2NNb0FxTkJ3QnlzNXoxL0JJZytNYXd0bUVTK05qQVJnUHZtTWtCd1JSTndMaDUycGQ1MFZjWTdIWGdYWGQ3WjY1UE9ESmNyajJMMCtKUDhhbHhSNjNuU2tnQUdnZHpjSFVvbHFBT09rR29WNDkvZis2OW83L3FnQVRZM0x4L3hvZkY0eGR4dUtmVWlqWSt3elM4d204bndQWW1oNUhFdTQzeG80dE43aEk0NHRvZnQ0NjQ3L2MvYkYxSVVnUUdLVUZpYTcxdndEVk5XT1YyVW1pM0FzMVpYeTFMeWFpS0cvNE1MamI3YXRmRGwvTElzM3dSd0l3Z2RheGxjWVBPZTFEd0VMZitpQTZKNGowWW12OVRzVDhrZGZGOHQvTGJ5ZUtwaDRuQTlBSzBkYnBVTkc3bnJZYTFBYzhsVEY3MDBWNVJhcjdlaC82dnBCRVM5djA2clIydlJPUHRZSkdxWUdRYkxWLzNBd2U4VUNETHhDVkNBazNiU29KbDVXMjRaOHBXV01ubDhVbG1GbnpXV3VOSHEzVUhnQkd5emR1L01NLzJrTHNHVHpQUXJ5TTB0UXZiTEd5d2ZyUGtLdFlSd004NTNFdisvNGNseTN1dXdtZXJkeVhTREtqeit6RzdHdnhmays0MmwyOVFaazNBZDRHSndlejBKaHk2dU94c0FFbDlXc2JXdE9ZdGgwUFZEWUNCS0orbXJoTTJNZWhHNTE4MFpvNlNjTmJsUEdjZWJiYTExNjQ2K1REcS91RU1rWE9JZTNFNVlDRzVON1lpTmJ4WGQ3MzljUS9vQzFlQzQvcURwNTVmSWp5aU1EdEpDdWJIMVA4SlYwV21TVkluOFYwRFdPY2pkYldycUxJNWFEWTFqYk1xaFpQNy9lMldJcGxubjdqNEJQcnJTZXdSMkxoa3gwMjBmNG1Zd1VneC9DYkxnVjY2RmN3eWpzRHlrdWEvbHVNZXNSWVl6dlAwN2lUc3hCSkp2d1VVQS9ZVmdRZFhxcHcvQ3RCZnU0Q3Y5ZmVmZVQvTHpCcFJ5UGZ1M011alpoUnMrSjFWZzBTc21sWmpZOGZZSEh5MzJ0YVlwMUdLMFpaWDdBeldpQm9TVXg0TjlRa1BPbEhrTjFOV3p2d2luQmdrMmdvUEN2MVZLNU41cDA1QnQxYUFFZzFPRGtJQitwakxXaURlQnMvMDU5NGI5ZE9aK3JnZzUvR3ZBNjJiMCtSOGN1UzhTQnZSeWlOa0Zqb2VsZjRGam1ORnUyYWZoVnBnWkEyQ2ZNek5LT29wck5TZVhxRkNjQjQwb28rQkpvZGFnU0p6Ym1Jb0dkMnNvdTY2ODlqSlRiWEY3MXIzUUI0SUZqSkxiMjN0N3AwWkY2S0xxSnh0VEdNRFRwY280UjZ5QmZ3TU96ZTJ0NGszdWI4TTRJS01PakVYdDdJZGxieDBNYjVxREFib2o0bVpMKzhjVHh4YTl4RjF1V3hidjNjUFBwSk5YR3UxTDY5VnNBdzY0WFZ3OWRiYnhFeXYwa1hUTTBXUFVoMmwrd3lJNVFIY1MyckgrajZYVnBDdmgrbVdCdWtTTTRMbEljWC80SUk1SHJWTnRHczgySHlDUjdOQUloOGpZUWwyMHJFNXN5OWMxQ0ZTbzNkdytaQmJsc0QrSGxmNXdNdTFCYXFWeDMxb2NySnR3OFlMNzJIbXFNYUR0WHg2NndoQm03Ymp3WjRESjVTcXh5S0Yza3BOVEM2aVpNWFVCUWtvRStKcFBnRXpYYkpjWjkzWVhaTlUxTlBQOUJoVzFMdkFzYkpYVTdDbXRHNVZ4L3B2c3BESzNucnZ5OWhSZ2RkYy9CQnRVazJBRlpHV1RzTkhMR0Y4SWpDYTVtRlNXa1F0SnJ2ZEpaSHVuSVFjdXc0Umt6dVF0bFVtRmZtc0J1QXI2aElwVDVaSm93dHJjajIvdmIvdG1hbHRJSkg3NXc2aDBvRUlWeG83RUJWRHcrLzFMdWtHbGkzcldESndKeDlVZk9mRENXMkdaWFEvWVlqNjBwRmpqRkNzSkRXSnRhc2ZzQWR5WnhMVm1VUmhSYTRGNXJseTJoWlVrNkdQUDZOai9JM2FrRGhSS0FBMUlxK1pjcHpuM3F5a1RrL3Z3Qlo4b3FpUUt1eXpoY1B2QXl6eitIckxlZDR2UnRUVE9zODNtVUwydzh2L3A0VjhTOWJVVkRYU0RmdS80eDhYNitDYU5WSXkzdXVGdmtRL3BEMWZGSmlvWERPay94b0pvTlhJWkVONGlFSFJ2OWFQY2dNWk9UN1pueTQvSXlhaUxJZTRoWG1iYytVbll2bHFmNGpBd2M2cXFOOHMxU2dMVDNyQmxKYkw3dmxiOGZvQXRFbSs4UkVlVHNIYXFyZmtDb1ZVWWN0RHhoUGxMYmZwK2VNNVpibmdWMHJwbCs5a3pacmJnK0REWmo4ckFrNnJKbUN5UHBxYXNVTDJGbzZVWUJBZWFBaE5IVytiVG5oWEkxS2x2SUpHRWpBOVZzTXNWbXEvWDlxTTJTdjJmUGUwRWEwUDhBaDdtd0VtNXBlbU5ER1hLU0Q5anJkY1A0ZlZpV1AzV1QySHFQM3ozZUVQWDF4R2grUVFWSWZTd0RoU2pnanBJcjIxbkZtcWVNaFF2azhNdWJWN0Fuam1SSWlNTVZwbEovMnk1SWtGblVPclphL0I0UzhpL0Y5Z05IWVNFMmVDL0dmazUwSGl1TWZOZ0tTdlpKS0Q5QTd3SHFOV3dtWStiVE5sdXk2MVNMSGRVS0JqejJ4V1Vqd1IvYnZXNFUvVGI1UzMwNW4wQXhSY1J0LzFnWmdzcVZobzZ3U1oyZ21aK01COHIzcm8xNGZRUEFqUlZzbVNPTUNUbEZucTVmclBrbGZFQzR0WFNWcm5pYnpRUHRPVnBTcjh1T1c0TXdTY0hEdTJCNE5yRDcyaEh2cnVpZFFIZlA0SkFNOGcwY1dHcURNekZXSlpuc3A3QlFmQmIrTmcwQ2dheGUvV3BiM0UvSGFCNWQzMGprUnNkeU9ySEdwWWFtVmN4SnFoTjBsbllRcG1udXFxcFZQWGpNc2VodktHZUpJQ04vNHllUStYY1JKYUx0R3h3Z3FueENqQlRRcUt1Z05VSytVckVqcUJZSUFuSzcva3ByeVBtekhxNUxSampzZ2ZadGhCK0MyV2xGVDhQdnJVa2p3ajFrVUVYK2VnTVdnVmo4bnk4Z0pyR09KV3ZyUkVHbzhkQlAvemFjVkt6bmNhQ3NZdjgzZldiR2pBT3FEVEUzQ3ZpM0JLak4vYlRXK0FxRWorbDJMSWpYMDRLMXc4UjRuU2xXMEx3RHVJYjlmaW9id1BEZEpGdSt2MTVzRHFSdEcwRmN5b1hqQ3Y0L3pYRE5aeVl1WVpsQjJEQkZZS3lCcW9mUjNQem83WjlQUU9NT2ZHbjA1aElNcHF2Q3J0OWpObXJIWHhBQlIwQTFZamdWNkRoUy9PbkJvMGZrREh1ZUxlR2pPUnNyUW5jK2tJZG1JYmd6ampIRjlsYmt5VWpxNHNpVWFyWUNuWU52dkdMYkRmRk1ZeUlPcUJNYmN1eEJvSStUc2RiNlJqa0hvRDVzWkovRXdKckViRWs1WnkrbDR0Z3BGalFjS0VqS0V3U0ovb01jejNDbEtMZGtDWjZnZGlLRWQ0cjN4QVBLVjNLZnROY1BjQkI0Z0F3a2F6cnFXdkVoZ0FGcGpNNVlHU05CV0dXUUQxVndIQ1RYVkJiYjcwcm42a1V5aEpENEtmNklQZm9RN1EyTk9jNW16dU53VGdDb01xWkp4OVBNOUVHcGdTUEY5MFBEWDZSOFl4NWUyRFVCb0xPakNXNU40cmpMOC90a2ZwM0ZWQ0JCQnlhdWdzQTNseFdhMHV2WmsySWJVWWIvTUVGdGFEbElZMTdvZTdOWlBweUJjV25aL3hwWCs2VFBub0hPRXdHcmdSVGVHc0N1S3MvZVdpVm1zRkZSd2x0WHU4SXhHcmVubTRxRmtLaEJqYlFrY254MlBUZDArQkF6VjZzS01kRWRCN0lDcVBLeU5iaS94M3ozazduT0dHc29xb01oaUcwMkFBemU1bzVSb0Y4UWZVamFaRk96ZEYwWklzUUE0c01IdkVoUmlWckE0N2gyY0o1V1pucGJtSDA2TGxzT1kvRmcrVU1ES0ZtTURDQ3BSTkk4d3RkajczNWtFUzBBbkRDVll5ZmRNeURQRTBVSWlxeHZzL25kdkt6ZFBza2tOd2k2WE1laGs2MWVsKy9ZRlM4TENaTWR0WkNUSlQvNWFkWTR6eE9PZ1phWE44Q0xNdkhuWVdoYW9vNThEYnl1TCtQU0ZBTUw1Nm5NbTl0Nmg0UUNYTjFsTXRyVkxheng3b3dyaWkySmVKUVI5UDdHaWlORnNDVGsrdTg1RU80N0dPd2xzMmNoQmRRaXVzekNoTmtjZXJ6RW1pUEhnQUM2OUkyNFhRcGdseGJ2dFhCZW45VHpVVWI3THc2b1BwWUx1bTJYcGtOWlczYStpUDFEUEVER3pSRFRyVndLaW5uV3FwYkpsdjJZMWZ4ZFV5WGcrZmVEeEt4Vm9JSXprNUFtL2h3ZnlUTlVybEVCUGNncWNCNzdXUkwrNlN0VVdqM20rRmt5VmxnUFo5QkZIRTBBNEd0cmtlVUlsM0t6VnJhQXdwVmxHb0psMlUvT0RqNVJIZUNKUnhzZmtjcm15UDZFY3BLQjVneDB1SWNRQU56NXF0cXB6ek9jVHRiUGE4SjJjTnRKVnFIbmFYbWZtMTE2WEc1aHpjalUxZGw0eVBVTVRickIvcDJZNXpHODVPRDB1cEFLckFrcitVanJ5Z1Y3WXVRUUQ0bUxTb1NXZVdFaGxodk5pcDI3ZURvSTVITW92eWtqL1hXeHVxV2E4U1F5RlJkYkJkeis4T2hidjNEMXk3Ty9SYkJRcEU4YXlRMFJnS040aUpYVFVmdFk1YUppaFN1N1VtTk1vVkxmemhFOFBzRDZlK3BmUWd6TGM5TnIwNGFhUXlmYitheHNhMWY2LzBXUzN3eWt0UVZHM1lpRGUwam9uYjBETU4zVnNYZEZjQ29GaGlsNVAyZEJ5eHZJL0ZBL3IzS3I2OVhwTmhvT2JIWWk0OTdqWFJvWVN1ZEJZTzBWUDhyQjRIb2tiS0NHR0hxOVQ5Zkk0VDdiNTU0emtkTFVUZjhsb21ubUNzUXlYT3F4Q3pVQ0JOT3VDb0lBNE1PRnMwZ2VlK0dhV09sQmNzUWwrcCtZN2x4NGtQa2kxUVB6NjVVMTFBTlhvR2Rsa2l3SGgwUEhHUEhQZXhSRWhlNlp2TzRQTkJGQkFqZW5HL3NBcFhKbVhYSmIyNHZoWkd1V2QyRTdVU0IwODk1Yk4yZlNsVzQxSkdNYTEvS2lWMGpNUmVuK0xhRnNrTElrNFhNczJibEc1ZXBQVkhobXVsWi9zVER4SUZuYjFlQUoyNTBmKy9zVWtiNndyWDh5MGxWOTAwV3Z6SEZJTlRqeGIwN3ZPZVppdlFmQWdUM2djZGJOaTA3ZFNDNjl0aW1TYWlMTm5GZWZacWZqUE9CdUVBWE5qU3pHaGtwaEV4UDMrVWtjbWE0eEx3UHFvVi9IMVZtUlR0eXl3SDZzNjkrVmtybllQYUtqMXNMQWhIbmhtb3duRnF4ZGZhLzV1MmxERkNEMno4WFgwdFY0NmhZeDBSMndBZUdrTVV6QVpLclRhaGloSkVsT2dSYVY4Rm4weEgyZWlGT3locGFSYUtMMDExVE9LNXZuaEFyY0txM2lZaVZLREwrai9lbmYxcEdma3U0N01hODhHUUF2Mk5KQlc3SytTWlAzNkYvLzJRQUJBQm9BUUFBQk9RQkFBQThCQnprQ0FBQUFBQUVZQWNCQUFBSUFDUUlCQVFvQ0FBTUFHVlJvYVhNZ2FYTWdiMllnUm1sdVoyVnlJQ2czS1E9PTwvQkRCPgogICAgPC9CSVI-CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24-CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I-MTwvTWlub3I-CiAgICAgICAgPC9DQkVGRlZlcnNpb24-CiAgICAgICAgPEJJUkluZm8-CiAgICAgICAgICAgIDxJbnRlZ3JpdHk-ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8-CiAgICAgICAgPEJEQkluZm8-CiAgICAgICAgICAgIDxGb3JtYXQ-CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24-CiAgICAgICAgICAgICAgICA8VHlwZT43PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MVo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU-RmluZ2VyPC9UeXBlPgogICAgICAgICAgICA8U3VidHlwZT5MZWZ0IExpdHRsZUZpbmdlcjwvU3VidHlwZT4KICAgICAgICAgICAgPExldmVsPlJhdzwvTGV2ZWw-CiAgICAgICAgICAgIDxQdXJwb3NlPkVucm9sbDwvUHVycG9zZT4KICAgICAgICAgICAgPFF1YWxpdHk-CiAgICAgICAgICAgICAgICA8QWxnb3JpdGhtPgogICAgICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24-SE1BQzwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPlNIQS0yNTY8L1R5cGU-CiAgICAgICAgICAgICAgICA8L0FsZ29yaXRobT4KICAgICAgICAgICAgICAgIDxTY29yZT42ODwvU2NvcmU-CiAgICAgICAgICAgIDwvUXVhbGl0eT4KICAgICAgICA8L0JEQkluZm8-CiAgICAgICAgPEJEQj5Sa2xTQURBeU1BQUFBVWZwQUFFQkFRQUJSOWtINWd3Y0RCNFFBZ1FBQUFBQUFBRTdBRUFBRHdJQVFBSUFRQUlLQUFFQjlBSDBBZlFCOUFnRkhRRURBYmtBQVVkbkFBQUFER3BRSUNBTkNvY0tBQUFBRkdaMGVYQnFjRElnQUFBQUFHcHdNaUFBQUFCSGFuQXlhQUFBQUJacGFHUnlBQUFCdVFBQUFRTUFBUWNIQUFBQUFBQVBZMjlzY2dFQUFBQUFBQkVBQUFBYWNtVnpJQUFBQUJKeVpYTmptY29BQVpuS0FBRUFBQUFBQUFCcWNESmovMC8vVVFBcEFBQUFBQUVEQUFBQnVRQUFBQUFBQUFBQUFBQUJBd0FBQWJrQUFBQUFBQUFBQUFBQkJ3RUIvMlFBSXdBQlEzSmxZWFJ2Y2pvZ1NtRnpVR1Z5SUZabGNuTnBiMjRnTVM0NU1EQXVNZjlrQUJBQUFVVnVZMGxFT2tkU1FsUXdNZjlTQUF3QUFnQUpBQVVFQkFBQi8xd0FFMEJBU0VoUVNFaFFTRWhRU0VoUVNFaFEvNUFBQ2dBQUFBRkdid0FCLzVQZkczQVVONHo5RTlsc0hEbXZXMGJGemNhbmVoV3dQVUp6aDNSeExodVBBejJsckpVRnRZeHNmNnlmOHJtT2RSOWFsSTVieXY0aDFaYTlnSUNBOHBneWJJdlJsUTdjS0VGcTZkbDNVWndhdkxKZWdQRVE1VmdHeDJZQ1I0SlhhSE9vUXRVWDYrdUEvQWhBeUtMVEljblovMjZ3OC9oMjFYZHhQT3dNSmNWaGJYOTlEQlVyM1pBWnl2emZ4MVFBT2VlbmVUUE9BOFBURXFxZjFQbU9GMkpuRi91QW9WMEs4QnBUQUxhUmVQOGhJS0g2MWJvMElrWGxZeHZnenViUVV1NWtwSnhnMTgrVUVpb0laZGRBK21nQkh5U2c2T1VwanVPTkdKQ0c3M3hlcmdjUWt1STdNREorL2Q4NzZwSGpzb0RFNGp4SW9zT0cxKytaNDJ3NVdaeHhtZWQ1ZmgzUHoxT1dDRDdtU3JMWko3VzVpeTRLajVjVWdGUmw0bEVBend3QnV3S1NQWSszOGk3K2xjaU1hOU9jRFl3cHFlU3lkQ1VZZ0FQOFpaOFp0OHlBQXh1MncyYXlnWjgxeXFKRzRKaTk0TmxZWGp3ektRRktTaWxuK3FjOFB5ak5xS2o0SWFnQ2xPMGFWdU9MeEdCQTNPQlg2a3VCLzRmSUlrNmhNYzNXUmNlb1ZFNUpIMlZSYmJERzNCYTFkaVQreWNOYmZ5VkRaaE04RG43QUpmZmVzSk41WkVHL1BRRTVURTlkY29oRkw2RVBZZTVwYTlkeENWdTlVZFBxOWNPQjFSVTJRSEFJeGtibmcwOHR2em1MT1BQcFhGUFZycXVBZ2ZjM0JaaTk1VmgveVZPMUlKMlZPVkVWVGVabmhnZlI0NFBHNkxINWZyekdFVzFOcS9ZTFhRWEw5UEJqR2kvb2Z6Q1RCUUZLVGNsMjFXeUE4cnhib0g3N1ovRWFJR1hiZmVzR0VmUjJFTEtDVjZkRDlTbUFPZUFZd0FScnNwSGpneS9DWU1vUTZqWXZoaVNxQkVVb0dCci9HR1RhU3BLMmR3YUllb1FMUk8rRFJzZVpvSE9lNkdCMThmODRSSE5OR0tWQnpDck0wV2xwZzFWNTdkS2FaMkNqV0ttbGE4bVhDYlhOWUVnTkUwRmlQakZnTmM4UGg2UUkrbU1JVkRmSUI1YnA1ZTNqZDdNS0VNNFp4SGp0V2U0aThscEZVSklITVp4dzRUd3Bpd0RIc0tMZUloL1NiMkdCbVdqV2N6eVdFMVZtYnNxNEorWGpMcVNFR1JkTWd6NTBqUDhwMTF0T0NRWWpBeFRSTC81U0dXTG5TZ0piV2FVSHJYOWR6T1lWY1BOTGZTZ1UxUldJK2JpanZESmxNU21Dd0JCWTJWNVNvUXNLZVRkN1FGbnA1ak1sWjZ0OWU3U0ZYNDI0MFAxNEdiZ1pSNjJlaGVpclphaEVpQVdqay9jaUM4Q3Z6alVJYTZiNStuZmp2em0xQndiVFM5cFRlTTVVd25HamNhOXAyZ0pvUVJuQ1pRY0loWFN4b1o2aiszemdRZnIrZmVGdzZkYmRZUUZYV1EyZElDcCt4N3V4UlY5Mk9rOVRUcU5Rc2h1QXhHSWNNeEtVbXViTGEyODBqTXdkRGtkaStYTDN5QjVLUmZDQjB3YkZCRm9BUWlsMlV1cEVkY2k3YjlQSDhoNFZtc0VCRmNJeHV3bnREM2MrRDAvbWFhYmdkOThUQ05qUHVnbjQ2aVFSdEJjMTlrbnJsQ000VlB6bmw4NkEvUWg0dzlZS0VCanZYS3JQTkp5ODRwRDhOeWxob21jUGFDdGd4WTJPeFo3M3lDbGdMckgrSTk4MWRMTkkxSk5UM3pDbys4QnlYeU9OUmxROU5hRnpiMEV6MlBpUFNCMi9vN2FoQk1QdUxMWTUwS2dWdG5YR0xRN2RXUVI4ZG1MaE0rS2tEUVBLdE5tNGdOd2FPVHFWOTBXOEFJTzdabGlSaDF3bTVZK09WbDR2SDQ0M0ZaYmJyckNyWlEzVGdYWDdIUnVtTGdJbnE0QVVYcmtnTWdYd3h0QnZmMldHNXMzSHE3R1R5bUtobnNXSmlMRHk5NFBWYXZzYWo2QTFQd01xQmNYczJsZGVYOFRTM25XOHJrbDV4TXVvR3RXbmppeUtOQVB5K1RrUFhBT1pBUEM3ZS9yQUUwbFRDOHo1dlZIQU5lZWZFcitSRWd2OGpka1FHdWs0cncrREs2c1VNL2lRbDh1bmtubDUrbHIrQzdVeXV4NFJ2a2VwM1lFOHBJY2lVeE1vb3pzTFJzd01UUitMOE5zU0x0cHJBVzZ4T0ZlaDhyVVdneXFiaFQ1UE5QcUR6YTB3TVJuaGJRdHU0bTNqbHJPTnhOMmp5ZEY5VjQya2ExUXZjaFRPRDRUUXVxY2d4Uko0My8ybE1Td0xQbzFPZ1JkZEZXNndXajgyalBtVUFOMzBleDlDaThBUHNRY0RmMjBSQU1OVWNQaFI4VFpHMHdrMzNJMGgvd3l2Wko2ZXphU2JtOWtRWUFwYi9NbFdLeHVGT3hDTTJpUEtYMHVSdXpWeWc1TjZFcHJ2Z3laN2JCNjIxZDZqZk5YVGNvaU8yc28yZEVmMVQ2UHlBSURuNUhRQ1lUTGZyQkdOSTB6c1FoNXZ5aVl4SkxMWlQ3cHZUcGswOG5xdG5CY1M3eEt5aXpFdG9LSFYweHZETGl6eERtVWgxcGJhb29mOVBQWlhPMnRQemlodDZRTzhyV3dtUzBJTTgySFRDR2k2b0d1bDVWeXlMSGxSQ0IzRENWdXA5dGpiQkJjR1pJRGxjUXVjeVVTdHZtWTlTOWJOdG5KQk5UVnlmcW1ScG9yamVrZU5IbjdIVjk5MVdOMDBSVVVDQTZ2ZDgwL3hpYytKZUJXNDZKcHhuZkFFcks3amZ6Z0hmemlxOW96WC9GQkhIYzZ3TEo1WUJDKzFzSVFNUU15Ukt0T2M2M01SS1cwajRDdTVwSHN3cXdFdEg1V1BOVXhHaUtNT0R5ejFOVytRQzArcjN4Qy9QR0NSVW9YSzJ0dng1NTltbDlua2VLWDRjNTlRdmxwS3lOSUVzTlF2U0E1TW5ZU0pHUVU2NC91bE03WFRJdTZKRXF3b1p0N0N6UWR1a21pNzJKK3NzSHdVS1Jnd2d1eGlpcmRveTlmM1RBREhjRld6MnB6ejU1bnlNNzVsQ2NVcVU1dmk1RW1QOXRTVXBGZjgzYW5qM2tjTWREYzN0MTM5Wjdpdkc3U0dqbjVGZlpVencxUk9TbE9lR3ZRNncwbURaczcxcDFXRlZTaFFHUmxpSGgvTHd3bjIxOFhTeXM4a0NvUHlwcVpzNjlSUVNYUlRYSVQwa0dmd2tMazdyWEo1VDhWY25pRGxpVUh0YUZ4eUQ1RFU2c2xUd2VVdWs4NUc3aXR3MSthd1JvdCtqMldqc3ZZRDNRd2RXZHE4QmxKd0c5cVNxWGdKOG9CNm14WGpXS2dKS1dQdDBiMHNjZ3Rid2hud0ova09hWlF6SlV5YUVBaGVhYWVERzM3SGtpSHlqT3VBRWxPWlNXaHhmVWNMdUEvSCt3d3VPeHptcmo5djFGVzFYNXZqOElTZTUvSmlzWEw3aWdYelhIVjF4Rm9NTGVlMWFtYjJ5NHBQaGtuSUprZVQwSkhyNmVlZWFnMzJzdVRiSUVqR1RYRWc3eVJUZ05Xa1hsZWg3SkY2NVQ5RTNmd005TTZ5aDRiUExIRm1JVjRDa1BMU3hIWG9NbXVzeVlGTnMxemxzQ09ERHMxMWtjMnVjbkxSL3hBSGorc1dFVEFLVi9kZ25PdDFqZVhNWERoLzdab2RPeVNDTXBXVnBhM2dZbDc0clMxelBIQ3laTWtMa0FkTXhJQ252R3k1ZmxBcFV5MmVWc3lJYjgvdnEydTd1RnU3dy9KbDdyd21LbERLTlN0YmdDdmlFamFMeFZJR2JOdmhwMGJtSGlTS08xWGJ3eDVodEdmdSt0Tmg0NkZITXR4b1gxOTVLbHIxd3ExUEYxdHFTS2ppVS8ydm1kZEpzd3pST2s4YlpwN3R2bVBiYVBIZTR5ejVnZ2hURWY3WXp5eWZxcHptbDBkZnlxS3RXSHYzOFMraUtNRkladHNNWG1RdkJEaXVJYjFXdS9YRjBUd3JNemVZSmR1NDR5TnBpdGh4NXRMV0lZSDM2ajIzcVRkQmo3ajJtQ2N3TVZsS1B6L2FTanVmMmd6T0ZUeE01YU1odm01ckNzbENPdFNicU9ndlc5cERZZExreXNSZEdLNWplZDYveEFuWnRKd0R4T3Z3ZVZ2bVhWTFZYQSsrUGZnWVZnUEVDdzJWaGNTTGptNnBnSWI1OTRYTTZFYUpXbmJoSFFBd3pCMlFYbTRzbkI5S0hKa3VmRUhOM3RqTFZwOWEwSGpVa3RQZ0l2bE9xYXI2OGNRWDBZK01IN1R6VU9WcTRuelo0cFp3bmg1TlZKU3U1VE9pZWhZS0l6eG1MTk50TnNYMWhOUkMzUndTVndpSzhxek0zaGxRNkk4TC9CNFpsM2tjbVJ5Qm45NVRINkY5aUpsTkIzS1cxclNCRlJDT0owaDZHcjhKYjlTejkxckRSTThjNFRGYlF5M0psSHM2U094OTI4c1JLM2ptRFZzMXRvSDR3L1BOciszRGJ0bzZKK2ZwQzI5UC9ienlEWlh4d2Npem9zMmNyaTRkRzB2aG1uTWV0djNCOERDZmZ5RHkxbHFuUURVZlpxanNUTkZxcDJHRFZmT1VEbXhRajBVUFJZRkxmekZ1TmEyZWZiRHorcGFvVW9nNzdydCs1WUh0ekE1d2tQR0VaTks0dTI1TEZnM0lWTWNpRm1PSlowd3ZjVE8yTUtLS1d0dGdmNDNtTzVaeDBXVnRaM0VyTC9WQzdRMHJGdy9rbGNSNnl4QVZWbHNkR01OOUxsT2hEQ2FERCtmcnVycTZ5eVNqN1BhcVZ3ZGdsbnp5RUZZUEZsR0I0bjRkTVgyZUgyWi9SUVdVWW9vTmxucUVGNHRpL080dzRIdHRWeXBXVEVEVmdSaVM1SDl0Y1ZkcDMyOXlpYVdkM2JCRXkvdTR6WEd1czBmaG5PTXZSSTJtVGx0TDJlM1daUXBNbzZSeGJsTVBiSEZZNFZoS2xvLytSMGhHUzJsU2txeFNSSUtsaTBVbkUvMG53WmdManlTc0NDK0ZUYWkwY25FNDExY25aK01HVVpuYlQ2REwvTlA1Q2JKbm5BRWlTYjFDbzl0RGg3MnZ2YXIvYXlFb2tMWFQ3Q09kUFVnZHVFY2hWRk1JTUxSblhzaVgyV3gyaExVWmdPVWQ4bWY2SGhPakZOeXJ3dUZEQ3JJNC9WOXYyNGJBRlpobUxpSlRuNURpMVhoRmkyemt0RnM3cXR4ZTJNbjN1MjRlVmlBc3M2S0djc1dka3hsd2Vkb2pWcFhlTjN4anV0WnBpSTAzdmFzTStVSzJvUUxNa3RKNFBKZ2VPc2FxT2xhOVBTakhjWkpuRkNOVWpFb3JlZFMwNTVHT3R1bm9EUU42bVhuV1ppcHp0NXBKb243bTU1eWVTekxuOVoyQTl6UnR6UERENUdMaGZnZVMvR2Y0Z0NldHI3OXdQY3FlWVlNRlJURkJiVDA3WUNFRDl6L3VTWjR5dG4raUpjY2ZBWXJJQVB1anpYS0RUTmxYSFlzUUZMS09scTlDS0oyZlFrMXhVcjQ3ZXFseEhlSEFFU3RueXUxOW5ybVVTZDhpQTYyU1BZVE53dXBKUCtjVzJPczYreWRLMVlxeUJ2VkRUR1E0SklidGNUM2JIZVB1VmtYai9Dc0xVVXgrMzFUTzNxaWs3d2F5K2hwbkRPZmVqUFM2RGE0cUI2OHJrNzM3NWRrcjUrbklwdE9LVHhVc2svMG83ZlNrMzlaTklBRVJnMTVWbkxoN1NhMGtLcEZ4TGx2WEtaVTFvWDZTd29mTmxnK1A4SEJDQ09nYU1DWDFQbjBKblYwLzZtWlpzZ1prazc5a0JVamdVUG40bnQ5MzdKbFRkeEVYc0dNUnk5VlBFdjFFUHJ5QWRSYnJEbmY5MUg1OE1ZQWtKSUpTNjBibEJDb2FxTThQRWNtTjVMQ1hWK3pGWDVVcFJxdzdianFEWG9YT0hqNUc5WTFyRDRIUWl3Mlg5ckNkK2wwbzBvTzhtOGU1b2xqQ1d1WTM5TlArWXMrTExlejhTV0xJdFhsYzArTk5rNngyME5jZzk4VWxFM00rQ3RQQXk1OUV6bk1YWkNnOHpWKzRlWno1Q3hwaWlVMVJRRnN0OG1ialpscnJEbExjWTNxVjlKa3lWenZNV1N6eGZ5SFNmTEVhS2pzRmM3a0dORWppWk9Lcy96MVV4Y0hQN3Rodm0vZUQwT040UlB2QnpnNGhRR05VT3huYUZjRjUvSkVLUXJiNUxFcFpGaHZnNlBxRXRMUTFCOGc5eHNDc1d3UWc5d1ROYWFBbXBKZnM3RGFpajIrSjNKSi80TVJWNlR5UFlVUjVYT0dPeFV3UHhiUHJnb254QmZBMDlWd200ZHh1Qkk1OHVhNk5OUkxkNmxabThSSnY4ekpRZkZCdExGZ3ZmaXg0MzVIUE1XdmYzU016VnNyeEMyNW5hVjEyc0hxNmx5UVpBNTlTd255SDB3RGtQWXdOM3dLM2lDQmVSVzhSYjFDNTJQb1ZObElROStGWmI5Z0RLVmx6aFN1RkU3NU9DRVV5VmRPTGg2bkE3S3QyTXlIQ2Z5UFU1Q2xHblFRMVBJQW00VHBTczBaR29YU0RlQkxtd1FrZitOeDcxNEJYY29rRUZXZ3ZoVTZEN05VSzdwR2FrT3pncTZyck80VFN0dVJUbDIydDJwQnUvMmxpUmMwRkNQODk0MDVRTWtMR1hYMjNEVzN6eVplak90bVJiVnh1Nmo0ZmZlZ0xhcVhINXFLT2xacUt4SXNCZm50RU5GRkwxazRuQjdjdU1taE1UUXNtMWpsZy9RdUZtby9YQW52RjV6dUlINkhURUpjUnlBNXBZN2pDREVhWHU1WU9zejE5Qm1hUVVpRDFmVm01eWdRWTA2dnQ3d0dQV2VDUyt1Rll4cnVJeTNJYXpNSURWY2NJdzk0V2t6eDlUS0IvbUtQc0xtaGxhend5NVhXMExjVU1FT20ydks0SXlCN2N6TUNQOGtVM1JVSEExbGtibFBGV2tpOXVkUWRaYnljVGZvMGFoZHFYQjUwYzdES01TZU9ZRWFOMXNrdlJScW1DT1dQemRmam9BUlF1UHZoVlhYVXFHVCs5dFNBT05QTlVXNE9MWW9Vd1hKdlJWanI2YXlLUEkvbU4yZ0hPNGlRRFdkLzlsSkhDRVRLLzhXd1g2ZzJIOS9PZnBDU2tJVWl1cndsTTlsNmFqOUZ1OTN5d0thVm1RM2Z0NUxJVjB1Z0hiZ1RwMWEwVU5iOTRtakNWUFl6UmRPcGhGbE1uakdJSmIzM0xMcGloTDhVQlgxbUx5OTZBbW96RzRSZVpsMlhrZUdXVStVbmxkVzhMRm8vWmptUjhQNzFucWVHK0xrQmcwd08wMllNdjh2K0NiOVhZWXh0U1NhRmNqKzYwYUpwN25xSGJ0dTliNmFlV3NoL3JCQzhpWllmdEhSMUVzb3JjK05KV2tsRlRwTUZJc2JGMm5iMkZoVDdOTFppTEhQOUVZZ0V5Vk1Eby94dkhzVkt2TkdhZU1Ec043OXdza0hkZTBlL2lzeUlPQjFiUTJMVG1XMHZnalFTMHpKN0czRWVjSWlYUkFRZTJzWWtpM0VjNGdrNit1OU9MdCtTTzM4WEphRzltNTFnMlNEMWNGakZKSUltWjQra01OTzRMc200QlN5QlJLSy9jK0Z6S29mb3dNeGNNQzc0aXdyaEdJSkRRbW16RWx6bXo3T3VvdEo2S3JUeWhFWk8reG9wRGFUZ1I2c1VkQVltN0ZscmZPRFlSZ0dtdkRDOWtNcE90N29SbzloamlxU05kUHFaa0NoQmRiOS82VmtGK2FvdFlEZ2I0b2ZHRW1WVTVMdnVXVkdYaHNDOXlPejBuRVBFQmtIYWZPNERwei80YkZsM2VSR1hzRmJaSXRyUks0NkRnUUkwb2ZOZm83ZjNCeG1hcEsxdmdsQSt2ZlhlV1FBL1VkRGJvcVR0U0hmTlkvTE9panU3RGRna3pSU1Qxc2dXdE5xelc2Sys3SUtLZkxwNzFFMUpYUDh6VWw4VHQxN2JYVmEvOGJLbU9xcTdYLzRFeXBaVm5CbVNSNm5tbkM3SzU5TVNma0ZIK3k1eUpJRzRTYjAxdnpmbjJKMU9mdWVud3F5VjVKK2JOcU1IWHlLWTRObU9MSFhOc0pqRHFzLzhxZXRwQXZpdk0xVCtMdms2VjV4Q0M0SVc2Zk93UnA1MC84QUwrT1F2R3ZJdHJQSEQ2SnZvZGVRNStjaTBHdHRTblAxTnRCYko2a2Rhb2RSZmZWVEE1UDgzZmgzQ3U2MkZuMDhLQkFmc1lpaTM5WDl4QitXdGsvTzNVZmtPcE5aTjRjdXhQbitmNlhOcnBYQVNDZDlRM2lwWWFwSHBzekNWVUhSaWtkTGQ1QWNNdHRyaXJiWEFubzMxbk5rK25ReHpJRld0MlFKbkExc3VSOWpreFo3eHV1TXlTZFEyNHEwV3ZXZFpHS2NZanhQRTcxd0NjcGt1VjVJTE50S2RWRWdXaVAreCszM1lKVVczQjFsc0VncFBEQXZjZklObzcrMVJOcGk5TjBXRG9nR0lLOTlFOUt0UmdDOE9ReWFXdDVBS2xBODJzVFByNXl1R25wV1FaQm81T3FVblhlbVJmSXNqQzFUSmx0ZkVxVTcvVXhaUnNYMU5EVWFNZDRaMDJNZHI5WXEzd3d6NzNWbzJlNWp2bmNnY09aa3NrQ3NLLzV4VWpBcmRSa2xXL09idXgxRVBpQXU5Wi95Y25paFVQWnN1SGU1WlJTYVZlNUNVZTlaVk5JTldiZ3VXRUNGeFlCcHFyMjhOdGhDQjFYMVROMDlUS1M2c2ExOHhSSkVFZXdjam1lQWl0SGlBdUZyZUEwak1jdHFtSUc4YzRrdlhNWlFJc2NUcWliUitpc2JVQ01SdGRFMmpDZiszZ01MdUFnV1ZVY1dVOFV3U0pDV2VFcGNzT2xRS2tNcDBrdzMxYkJOWHEwUE9RY2lEQ1VTWS9aakMvbklQRmcrcGw3REFYUk9lektxTVYvUWRLdzVWTjRPajJ4V2xRV2NtTHVLeUFEVUh1bHhSem01SVFZQzZuVnczRDIvR3djbFRJVjgrSlExSVBWQjJmTnphdExrREgvTzlRRGlQSmhBYXg3YzNibHhzcG5TdldUTWowUnByOTVsVzhValZzODEyc1FBLy9YcFpqUGVXZWRZSlRIcUZ1Z3FzT1l5WXJJY0dBaWs0VU0wNGtGQWttRWFMQ1ZFWHl4TzVxRldXN3pIRmYyeXhHa3RsM3lFOS9PV3ZGdU9RSnI4UlFqWE92bHN4ejVDTDJuOUFUWUpkZlFjejlLdjlNazR4dm9vNFJrUEtQV3dIeHVVb0pEK2JVamk1VGM3a0FwczIyQ1ZuWEtEamxQZ3dBV2swbXFLUmxsTEhkalp3QU1lTlpYOW8yZnAydTFlWCs0V053aTVyUXZQajR3cGF0aXRFOExBb1BMb09POEt1Y3pqMnlsb2dDMlVqS3ZmcGx5U2lGbnVsKzZmam1IRGhlVWpic2ZDL3lTam1CQkpVNVM5ME5vU0pZdzZUQ2ZBZUxXU1ZjZnhLeU9nMmVOUGI1RlJOVUp2UTR2MEgraTdmdEc4S0xZaG55akU4cWd5aGpqcmVCMnR3Wnc0aHB5ZTNIbVp5OHBzNUlrT00wV01qS2NpamdnNjZFMTgrWE9wdjd0U2crcDFsTi94RG9qYmtia0JPaVg4OGVMQjZFUjRoMWZkNXVlWElQQWFCWDRPNlEzQ3drM1BSMlBBU1F1d2p1ZGNaUkdaS2k0cDNnQ2F6dHNVZnpqLzdKREpFbGhWR0NRTlVZbm1aQXVDNnUxTEpqRmRGL0ljRmpxcXJRK2h1cFVwUW9FamQrczRKU3ByNE1sTnoyMTlad0gwVE0yN2RzN2xCcjVMejR4V3I1aXc3aGNReFJDMnNkZFRjZStCSC9ia2svTEtWRUNuSkhKcVlzc2FoRnJ2emM2L2FRNS92NG9YOG8ybmxuNCtpRG1tQXYrOXRDellIc1FwUkhaVTg3N1JFK0hzQU9RbGlLWnFDVHJyTENkRjArN3NhRVVlcE5ubTdFajRCM2lOQ1g4OWNOL1BUZGcwS3dPQzBjQWtndTFubU5jY0xhRUxJbFRtRzJFVW0xdmtjUDVubk1iVGlYdHM1eVhNWTFHRWJiaHJZR3VPYzBFM1dIeENMMFQ5NlVSM2MyZ0xNRG80Y3Y3Q2t1MW4xdFNPNEQ3dWV3aHhZTjZuUVRieFUzNXNqVjNKU0NqODgvck9ZMXRBYi9mNnRMR2NyS2hBRXBBeE5PVlZyYkNBQ3krakhXUG54OGNkVUgzd2trdFJOYkJNYzNJK3MvVG4rRFVSVkQyYm1uelcrT29WZE9kdzlTUFE4dGx3Y2JFMkE1bDFqVndjL1NDbGduY1hYTGhCNS82cnh1ZTAyb2cvYlZ0YWdzeGt4QURnOHdYcEJReEVadjMreGN3dmw0L3lMSGtmN1VhNlpDYlRaQS9aRzN2V094VlpFcElDZzd6SkZIdjR6bHV1RmlXZXNNdDRmVHFwZDhtTzhWaXVPU0pqcVRNOThOaVpXT3pKY0dSNTAxc0dxTllqQnZuS0pOemt0bzdDTURJWDVOeDFoVGJJZDl6UVNuTDZlZDlGY096WnZyZXZMNlBGMkZ3UHJWeGZnTWpETjM1MjNZWlBOT2VpNlppalcvL1JqeC9zWFVOZ0I1OTh1Z3BwY0ozVVVQQnZReVZRUGxHYmJXQVp5OFh2eDNubndDM2RBbXMrazJSMTVGNWs1UmprTWFwRHNNSXZhaHRwZGRLRDBoL3lvZGg3V3RlOWQ4N0RsTHYxZjdGMmI2MTVOMnA2d0VzUjB1ME5NdTVKR2t6NUdoRGU2M0lOVVB3M1V6dU9xcjNqY245c3NmMG5qbUQya3BNb2FlMUdVaHc5ZktZNk4vWVQ5MzY0OWROaTNodVZXTllwK3hGbW5weXdIbmZPWnptRzBuVkF1U2Y5MTV5VHY2bGt1WG02OFB3aGVlOUN0REhOLzRUaWZTQVhtQmRxMXdzYjdYcXIzNmVYL1J5bXlQS0tXMlpNVmJPTUs2TkFVZ3lLVTFzRHhLL0xTMDU5SjFQcENRcy91SFZiZEkvMDBreXRXcDc1Ny9kcGhDVGlQenRCcFNlbWkrT1lBQmdtT1NUVTg5TTR3b2EwYzM5b2NhZUdEV3pGd3dPeTlMb0xTR2QxZDhGRnJVRU5rOEYya3ZqMExUQnltbXlCSk5YMUZBYjJJMmowQVlxVWtKem9BNnFvMVhkajVWdURRb1J4b21PeWJpYThLdjNmakk4RDlyb3Z0WG9jMkJqRm1FWTZvN0dreVZPek5md0llVTdhRDZvbWhzSk03ZXhsaTdtdERkU3ZuY3FQdHFqZUNPZC9rSWhhcWVFVnIxQk9taWQ4d2lRVmh4UmV4SmdQMmFrQWtNSm0yMXRnTk0vSzJyREpDVWR1R0FqN016Nkx4QTNlTjU1NVJrWFlmRGtVY1JQdDlQMTNJK2ZRMmkyTXFlQ0p5SXFvVVlrVm43S3FEOWNKdlZ0WWtZRHh2MEk2cVhVV1dhd0VPUjErMWg5cmlmdmVSQlkvb3JNS2xvQTVFWVhXN0hHYm5raTJualh4a2YydTdmTXpPVU11NGR6Nm8vckNZS09GVDgzVDU1bWxlQjFaS08zSFlhK1Z3d2x2TldaTUdRdThtOHJyMEF5bjc4eGh0Q1IxWXR0UUNxdy9OU2o1ZHM4ZjJrang0MForVDNzZ2trU2N2UEt2Vml4MkFWVm0wbEJlbWh1SnNpQUZyYjYxVVF1UE9OWHlHa0ZWUFVWbFB2dmF0WE1YbVBIR3l4Tkd1NldZd0NBM2pMRWFPMTBiT2lpd2Z4aXZscDRDZEVOUy81RXEvSXN3UkpKRlFjZGltMlJKbzh0OUZyMHRaZXRwcEJYNHVEWXh3UGJGK3V0RXV5QUxHd2VYRXR0M0VmY2dUSHN1OTNuOUdQVEs4TitGaHh0TWM0Y1ptbGhSMW5NMi9sMUFoR1A0Q0FnSURtOVdidlFKdjBWK0Y2NDZZVnJlb3ZFdVR6Mlp6bDFqOFcwbGZHTVlUUW5BWTBpS25semVKUXp0cWJHMXpyTjExcGpVNEtzK080c2tTMEx5UmNTTCtWSWxPcmkyeGxvNjFOTzMraHZNdjVxeVhiSm1WdCtIKyt6SXJpUnRaamhRSVNhTlZ1Y3ZVMHo5S3dZK21MYmNGQ0dxc1J1NVdRWFdyTkZHdlA1L3MyR2x5bEdVc3o5TGM1d3RiUW9aLzJOUHYxbWpLa3p0d050dVVZemV5ZzFScHdVcERSU1hTS0xVZTlxamFsZzlta01xeWVnT1lUeVdPSXFkVFhINkdPOXlrYjI2ZFhMd2UyYWZrUWora01hSGMzVjJRZlBreFJJaEhZTlc5MllrZ1ZHNmoxa0wvektYWGVTalRXVGFhT0tRaG1aY3BTSDFOZzZaK0tscnNMNTRQRmlkVlprUEVBa0JvRUxEdGNyNWRNVFUybnZSb1JLRnBsUmpPYzZyV2x2SUtMV0NMbWxOaHRFMzZmYnpJZFBpb0xjRlo2ajYzdjN1UXd0ZnQxODQ5djJNUU9KT3l0aGtZVTZROE1IYTIxUzgxNTJSYWIzanZhcUZibG90aUpMU3lrSXNYQVRyUVJPeWtUTjRGS1FKb0crczJDeTZuWlBjNnRWT2FIckREY08wcXRGN005YzFwNTFETGRRbjUxWW5Yc1BvR1JOU3ZMWnkxaWhtdnp3U29SU1A0MHlmR1Qxd1plYUR1VnFlK2l3RmdTSldTNnhDNk9rK1hCMjdwazhIcEw3dzNKWUxhaHJwQjhzd0tEc2ppN2pjNDBsSTJhZEZZaG41SUpCZU5CcFZWUHQ0UFQzV1plUjF2a3hMY1U1NVNiMmpIMWU5cENhTjVETkN4dDBaWEdlaGg0R216ZUxHbEdubVpHa2c5MzEvemhjWlBPV3BqWGhLTUdDL1pLcWc3K3o2Y3AxZGwvV3Vpa0QxTVFITGlBU1JsWHVPUFRsTUd2Rjl1cm1pMG5EaTArc0hBUC8wUHJrTk5aU1N1bjZTQThBREpzYXM3VjVkcWNFU1NYYmJWTXZmOHJ2UTNlNnRDN1VoZC8zVmhCNVV2SW5tK1Y4SzFhTEg0dGh3WVpFekJrakVSeC9SSmhCVDRSYjdUbFJ6RmhUSDh0cmN4T2dPK3RMTU80eFhxa0hFbDBTTE8wN3AyRy96cG9XbTVPc1dNdllwV2xuMks2cHdOT3pmOWdYZDFXL0U5d1k0amh3a0dSajhoKzJSdHh5aEtSMDJqK2tweHo2VTRkdHNnMysrTng0Q0w0UncyT3dDMlBtVGM5YjZmVmY4eW1nVFhOWEJHZi9LNVhHVFdYQ3NjZW1odDFaUTAzaGttTVJFNjl6U0xZOWVwTlE4YzBSZnREVHNtMW8wTStIZjhLaS9wMENBWS9CMUtKM0pZcnJkc1lyanlsdGM3bmxhL3U5cXNwZjhXU0E4TzAycjRmV2lxUXg0eVNqVjRJTzB6YUhmMHVqZ0E5NlZ5Wk1WRjUybGNGVU9IcFVmREthQVVkcE1ZaUN1bm9mcGxxR1JqR1JnTHphcTBVempwSFRhTjljZXE2OVVxeU5DTU5Wa0xwUDRBY1o5K1NvNDAvUHZHWnQ5eHp2Z2o0L0U0bFNxNWNvUTZGWEd5QU9scXJ2R1N4dWJDalNGUHRPZy9qREVDR2FOajFackltczhuU3J4NzNqMmZ5VEwvOVJ5QUNDTVpXQklNanVjd0VUeWJYaXZLUm0ySUFFTkh6dGlWenFiN09MSnBlQzlsaHpPL28wMWQ3c0lrRVJYZThPaVR3QmZTZjZNc0FyMzcwd0JvaUVybVltMWZJY0Y0UDJmRnF6dFpyc3BUckN3OGIvbjNVUWZnUFM0N28wc2twcjNNM2tMSTV0VkhjZXZpK3plWGl0bjRjaUFrU1ViMjNrOEFqMllBMnNYb3lmZk5QZndrMVYyeHA5VEsva1ZRbTg4TjV4U2VDdnkxVmtZNFoySUtzS29WeFZTYlMxWUs4ZUFlT1k2WUZVdTY2Rmxua0lRU2Y1eWNkRW9kSjlBZHpkWWQyTVBnL256TTFFZm1FTlg0MjdhSzgwT0pMT0l3QllJWG9QWTBGUWZpbkJya2pvblY2aU5MSVZzYmVrU29NbllzS1YrSVM2S1lhaXptYmg3azhOTnhLTEJ5ODdzQ0NES1p3Z0lEbjhoNW4xQUlnamUvbkNTSjNlZm4wYmhYWXo5Wmp2bkRWdHQ3akh1bFhFSytoVnVSZVdaZmh6TmgwM3oxVm5LMGt6TDgvSktVSnd5MC90ZmFXQjVFSnZZQy9mODFSQ0hnNVU4Y2JwVWlURjdhSDlrMjZ2NGFWK0htNUcxMUZ6TzhZMVhtTXhmYy9aRnlab1RLZmlWZEZCU3lkZUtpSE81OHlDZnVWWXArc2RPc0FTUjlpdUF6ckVTd2dnRlZlL0I0Y3h0N3pmelhjYVlkWXRhN01qLzhyNlppcjVGRXJ0ZTdGZVBncXJUam1ZU1N3QmUxeWFzSEcxdFdoM3dNQkJsMzlQR2RiYXZ1ZXBhYnF1NmpiZ1JzNUlmQURCRm9kRnNFc3Awa1dkYkR0T2RpNTB3cG1JbXZWZDcxNDJZYlBVYmVlMk41Qzc0YU5sU0ZMT0VGZlVVVUpQRk5Gank5RUxNeCtlVXRUejJCZDJrQzhEM0pTR2VrTHBBZUYvMWR3TnhHdDN4dnY1OWM1RmQwbXI5aDF2T29qdTYrNHVBRUJJUDJ1N0s1V0VoZlZ2VCtWVXhqZHdKTHFMbG9ZV3piMGNYMER5NHFmNzBWRzhEcjliMG9UZWZyS0FXK1JSOUp3WEFCKzNDc05SVWVUTFZPdWIxdXduektaSFRzdmJPRmh4T0hPQ1RXS2JNOWttbmFscUREYmxWUWU3SFpISzkrU0tXZHpIL2ZoM0FhUEFEekdCRm0wRnRWdnE1bVZzTXNZT25xN1VWTUpuSWd1NDVBVm1VZ3lOWVA0T3d6cFY3SHU5bUVSSk5Zb0NvZWxhUVZ2Y0tTVExPaE02VUU2RXFDL1IwQ1dFdlJ1M2l6SXRjelhUK25CVUI3TmZtZEJYUElaMjJ2WUpuT3RwUWxmNmlwcmN0SVBlN2xrR29uWitIZWxMVU11UXE0TFp6RzJCZXB6aWRqVGIzME5WTHMzNHpPYXBmVTVRQU1Jbnh5RFhSUDl1LzlHcjBsTHlxNER2QzhwYTd1Rkk1U2thMGZxczlSdnVWZ1EySjUzM2M5RjNOdnY2TmtJVmpCTzVvdU4xNVpPeUk0TG1RcVloMWZ2ZVl4V2cxN2Y3eEExRHl1VXJ2cDNiVythOHBPTjM2aXQ0STFXNjJIQzVidmVSQzZGVGdWeEVDd1hqMTRHSEJLTGNBYVJsejEzMG94anZGeVdXazBvOVg0eHJzRkVxMGF5VHRNWW9NeHpwY1NzdFFiZzU0WlN3REtycDR5Zm1wQVZmTWFXZWFRV1J2dkwwY09mM1l4RmY2TnJwTUhHNlU1TTVaZzl2d04yeklPbzRrRW41SjNzZDZNTWxJM1R3V2Fla1lhZWtXdUpnTTNVZHUxZk16MFhrNmYxQmZodXgyVVFpRHBqc1FleUU0NEgvMjBrVmt2MTJBS2tQZllFS2NwdlRwaXg2OGRtMmxaRU43ZmZaaGxBOCs5U2lrSnNjWThhMFVFSDA3TitadVZGS21vRlBHK0x6dnF1ekE2ZlFzOEtINkM3cklSaGl3ZWN6OWVUR2lWT0gxRkRqMmI1UUVOMUszcjBvTkJybVMrM3NwYmQxSWw0cStNeGl1MmN5SU1UaCtrcEhPVU1OWW5BVjMvT3NtYnJpaDFlckxzUEQ1VEY0NzVqTlFXbnpMZ1dyYThrVkt4eUZIREhOaCtDRU96bVRqaHl4L2RhTnBKZ3RKdjJVZzZKU1RYZDhXZ1FRL3VSODBFSm1KcmVSN3cwdkphWHZ1NDlOSUxjMGpTakkyQ2JkaEljdU5VNXFuL3ZYTHBnUTY4TmVudytjQlN2RDZGbGg1Wnl2am9odVNYb0xBVGdsU25seUJNM3cwclpoQ3F4ajU4TEZraHNWYUluKzAraUdLN0NodXpDMHUyV21zTWc0ZTRqbjBlSEtXc05pMFp0RS83b2NLRTZ0cXVlKy9qOE1QejFJNUxRVWFnelFhOS9IM2g1WXhsQ01kWHFjTjcwMk1TTzV1TEVneFU1cVlBckhEVjBudDZDZzBteWVBRzAxL3A5bmFFSnJZUDJrRFJjd2QzMnA3TldOMW05bnRURVdraTJjYitpU3dxQWNvSUlaR1NJNnEyYk1mVzZ2bXJjanExVGtTK0wyOUFJbkN4NnlLRWpHSnRKRm02SVE1dkc2d1YxeEg0VjdNT0ZzNGZneHpnSmkxTFNGelNyWDVKYTllRkJ2bGlkL2hVRnRQdWRwN3o4YWZ1M2lzOWRWNElZUnQrMnE0NjU0RkdLNlhmY1ZYRHZocC9oL09FTDFLZGVZQjRUNm1uaGJTZjFUbEdoSUk3M1FpdElyMlZwcWdJd1pSU2pPcmRuVTcwYzd5dWgxbzVNS0F6V2t3eWQzNU9lUW0rTC9XVm0vZVAvTFBJUU9pZldWM3o2aWI3S0hXRDRTZnYyK045cEovRDZaQ0Q0UkdJb3ZraWd0RXE5V01aOG9NcldBUjFyWEhKcW9td3NlQjRVRmVoVGVnQkkxTE5kd0JrMUs2MWYvSmZIclVjSit3akR3dVpqVnpkMTZqanN1NjBNRUhyeWx6YUpSMGFZOFM0eDROQjVRUTdhNDU4MnlUMU4rZjFDRk5lSCtpeFNhdnl1VnBlWDcrVmU0TkpMTjZYZGthSmdveTgrRW56MnBBZWdGcEZUVFFUOTU1akxIMi9qUGRiS2JtTFVQekVHcUt0eUZoTEw4WjRvd3gyZFhIcXBhcC9TYXhCQkNyS0VrMkczTWdyMEpDZFdIbVJZRVd3R1V2SWFJRmx2bHdEd01qR29oSjNlelhvazdaZ0N5aS9VQ1hiUklVN0oxbWw5TGo5NHFKbllZK08ra0xBZXl4OTYvTE12OXVpVVY4cWJhS0h4K0VKT2s4T0lBb2lickxiY01zNXZ2T1ZINGRzTnMycWpYYi9LamUrVHk0TEtDZ09rdHVyS2ZqZ00yT1NVREd3RUhueGd0MzlEd0NxNm5RRnR4KythQXJzeTVaZ2VhU1Z0T0UyYklxaVpGY1oyRkdUbUdEc3Z0bm1UTzJpR0Y2d24vM1NrRTFPQUpnVUI3aUthTFNGOThiTURtQ2pZOTVWNGcya0NhVVF3QTJ3WlowNzBkOXBTNlpheHd4QXcrUzJOd0dNejJvYXBFdnhWR3RUb1FHWnF5ek8rUmdvMld6L1l2a3pDMkNTbnZlaEVjU2ZXa1hDZDBGOUxTTHRSQ1lqanB4VHdOcld4Y3Jya3pQZEVCNUoyZnE1Z0VISWNROFhZV2FFWjlaNUtmOTRXaDk2SVpvR251enhKRSs3WitkY3JzR09mOUxWbTRjSlh6ZEdnOU83ZnQ0VlBKTkVXOGpzanFWOHFNbERiUEljSHVMMnhjR25pc2lhUTRwbWsxUUs0b1BnSEYzRkNnRnB3Ui9sUGtwR1pKMzJkSE1BMGVha2pmRm1PaWxyd0tTVjU0ellzMC9GUDI0RXlSUDlUY09aNHQrVVdRNmNtTG8rY0xqSjZNSnBlMjg3YzM0VEpXaXA1RVFtWFBZQUFQamF4TE9sYml4bmUrRHpQSWlTY2IxWllVUnBFbU41Unh6VU50N1pFMzlEWHhTZTBXanJEbHBkNkZKWmRNZjVnZUVnSXJ5NWtEcDBzUHd4Mmx6ZWpZWkgzSk5acTFLS3V6VjQ1SmpsUktncVJoV294Kyt4citKODdycFA4OElPdHJhSW5MeWU4R0pSSk1aSldnUmVGTE5XS2FJQlVRVGpCMUI4Z25NZ0JqNkx0WEwvTVdCN0FzdngyQ2R5VHBCcU5oTlpqWDlMdG82c2FHL0ZPMHdLZytRelhlb3NxTmQxRGIvOWFIMkxHMkZiVzJZK1doRDgzVitPZ3hPUVpVUFphKy84OFZGaVpBVHljODVicVhpVGhIMmRtdDFsT1Vkc2FmSnNoMU1HbUpmT1RHRCtWekg0OUNNK0RVeWF4bDVLWEdWbG1SOXJYcStuamtTRlRnbG1qL2VDRGpSVzN4U2t0NDVmQ2ZUYmMrcnRvWC9DUmNuWkhDRTlVbVEyajdDWTZEM1B1dFhGd3JSSGQrTVdxalFBVjl3N1RwNXpjZktPSDVpeFp6NG9pbFBIY0gzMVdIdHYwelJiL2ZRNW1zSGcxMEZxTzdpbEV0UkNiUGFVN3liZ1krdmxtMGdsWXVWY1JNc040cVVjdGpFa0c1bjFFQi9BL2w1dWF0Y2tIRUJNbUVKWUJWMDBZVDZBRzVtWHphL1RMYTRrWExYWU9IaTRSSThOc3NwQW4xZElraFAxbGVtRW05d21laDBlNUFmNGpUUGYyQm1lalQ0Q3ZvdVdVbE15UlRrRGRoN1NSTm5sKzJMaEJ6bUQ4dE1PNThTVjZKYWhXdVhqNGgrNlUwc0s0RG1WYnhrTFBzamxIRGhRQkc0d1hRQkxjRGpGa21PY1BuUHliTitDQXQzejBGcVlmWGg2SWpDSFVraU9hMTgrcmxyRkt3c0RpOWtacXpRejYzQXB6VU40RHRlQ0R3ZExIcFFZcDVOSDF6T0sxSlZaZDZmbW5kSmQzcThNT3FVWWRsQkpRZUlsSlBRL1hLR2ZIUGdSa0FheUJhN054djRienZHQUJwcXlSZWdiYXVDUGJEdXhYdGQ2STQ4bzh6OHpHYVVIVUFTTmdYdjFhOWZWOGZ4SzR2SGFWcDJZUHlXZFduSW9CejE5TWIwUC9VU0llbFZPL3Fjb1paSmFTVXAya1crZU52Y084bDBnTEdtVjZONlEvRDQzV0h4RjhuMzI2VWZnTjcvN1RRR1A0ZFcvNjB6UnJwaTVGYVFXanhNL0wvTHFPUjJmT0NPWUlrSTdWMjMzY2JOZzdhSHVCbGcyYkVJbGdub3NhckNBQ3RCMVdzODRST3Q2RWxnSCtZN1dJNHNLcCs2WVRGL0t3U3RlRU8waCs3bEtNbWRuRlJoUUtvZGxLRVljNlY3NlRucDdDK0Rjb2E1Y2VFdlM0a2VyY2xvSVczSmlSaEZOeXdKbVZNeCtqZzB0ajhmRHREUWNrL0E0S2ZPcUQrNUVLVU1paVBpQUQzeUpjZDJvZXZDVmNvd0J1TER5K0d1blY4OE1tZUtqSWt4d3JIMTREVzlzMTY1USsxN0ZmZzdXdnRMcVdMU09YS2c4amNIdlM5Q28wZHJ2UjdIWUZGUHk5REI2Q3VwRitYRkdRUERQc0IyMEMwK2t6dEdJVDViYkJ6R0RhMGJTUXNTNE1KNmc3eDVrZlZ6eTNZYWhGa3RyRmtKdUpyRHltNGlkOUNLcDNQWndkM08wdXRndXdmbDVqWXlYZHlxWFdTSW5heWJjamIrNXNaTW9uSmRiV1F0eGJ6eUVTWncwMXQxVXdjZnkrQ2VJa2hzY0tCck1EbElBeVJod3EwVVVTNmdoc2ZhNmE0UHowYU9DNVp1MkNodVNGbDk1RzVsMS9WYTZrN0lIT1FnVUNxYjNpMzR0M2FhZE5WMmhYSlJyWWR6NFh2ajVxQTdtTlJkR3Z2M1pJc3dzU0M1MUt0SE1SdEEyLzh5SkxEMTRiZHlKQWFlZnkwaWpYTUltK1pvTzR6Q3cyUkorZUd4S3IxUmRiMHBob2ZZaFlnWS9CNTZPeXpwcTExbHB6M2orRUs2VGlsNURPR3VKVGxUNEtML0oyMEZKUnlDdmpPZXhWMWUyV0NBQmR6M3NMS1FxWVBaeGJDeE14UjhnckRDajMyZ0ExTVd5S1h3V2RwUVV0OUwvNnh3NGsvTXFacUxSeHEvVkxtN0VEWXY0bjIvSDVUdGJ3YlJ3bldWbjBkd2lpVnB2L0w1bjlHMS9va21yeU9USVpSSmZ4bCtLbHB6blZYTHdhYWF6V2ZYa3FueEwxWVZqRytHR3U5LzZBK201dWdyRVBQQ21CejBaZHdRRVN4WEJKOFNNc3BvQWYyRXdjQ0xYaThZNyszNnVxcG15bUJqQmtabkVKUFB2U1RwWGIwRlhUU21pNzZ2bTBnQ1lPQnNCdS80Uk9YVnNZbWNiR1RTVkxuL1NaOE1BM0hHNkNodkk3Zml2WitSWVlYOUFMVEkvUUYwaXJrVDBFL3pqWVJEekp0S3l1a3RWcjg4ZmUxSmZ6cXFjLzF2V3VubFJFUk9aV2ZvZGZHcDVybXcxOWZ3WWY2OEIwNEMyWG0rd2xiU09oWXV0Y24xK2Jmdy8xbzJsamM2WVgyU1RaSXZEcGhqenZxTzZHZGlQU05YdG5sK090Y2lPUCs0WW5RK3Q3ckEweWhhNm04V2FhWG1BVFVkdmgrSFkvRldjdHBuMlpON010REdyYmlLa09vTGpadFFPdXZhd3l6Lzg5Nm9xY0pNWmZpempabEkyVTJMRityTC9yWHFvYVBIc3lJR1duN0hZRGc4RHBOQVlUWG1kYUdZZk1XTlh1L3JWUkljUWp2eUdnZ2JxL2kreTBPOVdUYnM4c2dzV3Fvc3Nod3lpWkxSeXJQZ3F0cUVvV0drRjVoMktzYm9wUDR2YWZXOXdIaGg4RkpDaGFybVFxL3JxOXhEV0FvcW02Y0VUc3puejBwY21Sai84dUJWeFI5U25HM1I2YW5yYkZteVA3OXlEdnF5eHVHTUMyT0x4RHEybEoyUVdwK1NwN1hWMDBKZUZ6T0JteWZMQkkrWUw2S0VOaElwVFFiZFh4OFFFTUlpVzZMbk5wMWt6VllMWDFNamlEc2tMTm14WnJXWlFxQ1F0UTEyNGUwbVV5WEttRCtQdmo1ZktkQTZvc0gwUThEN3dWdCt6aXU2ZTNFZHlNWTI2dTA0dTVkaVpGT2g5c2pUUy9IYUt1cGNubmdSQ3Z4dEpHL3luVS9hUG5xNnlOSFZjK3VWLzRiTzRGU2xoemhpcnpLRUZqNFVDLytwMzlGNXlmNldTZFI1a2hEdHRYbG9QamZCZjNMd0ZmWVJrL0lQOGdzU0gzb3BmRzczL2RnS1h2cHpCU3lvWktvd3RjcVpFZEdlclJxTnZJYW9FLzZnK2IweS9xbXA5WkhwRCtma1c3ZkRKWm1UVTZKejBzMmY1VzR3bjdPYVpEVGlHU01qTEx2Sk1hZTZqVGUyU0ZhcUNSL3p3TFRVNUtkc2h2TnpiWGxMQ0hGOWsyMVhidTJYMmxCYThqK2VHeFNGMU5qSFJyUEE0bTJIQ2ZSbVo5bzJjd295UmFvM2E3T0lpK3BDRDBsREsyYzkvTkxJZlZYbVVGNlh6eG1hTjVsa0V5emJaOHgzcGZ4MXJWSHZldTBXL21zK09LMEV4VFFEYW94YkwvRFhsVHNnSDBzU2owRDdxL0Z2eTNRYXcrdGxLdzVXV0FYTkNRTEMyRWhvNmM2b3pVY2FXRk02R3JFTzZVd2ZhZmpIaFluK3ZJb2FIS05LVWRDOWRZZnVON1F5b1JMT3JoY1JvajhGZ1NNazJtOXBqL2VYS2tYeWZkTnhiUmdTYVFtSDJXVTBSdW80akVUSEZ2YndRTkdjajFQRHdEM1VrdUYxdnZUMk1ycmEyNUVPSGJZemhQZ1pZRkQrNUlabU81Tk1PeVozZlYvTSt3WVVibmU5SzViNDRJR3FCclJjTHNRb1FLaGRrdTV3SEFpenFOeGhLNnpJZk82d0srNzAyYmlPajM4VFBzOHNpMm5kcG4wOHo0S0xmS0xMTHdtNm9GN01BUi9iS0NGamc2QUdjc3hGVjJ1amtKMlZ1RXVZUkRiYXAvUmtRTnIvZkpqb3BUcCtEVEVYV2pNMHAvVHIvN2ZmRFBUTmkzNFRLS25HUmN4QU1rbWtRSmxvRHNMRktzN1ZmVjJjTGNXZ0xZYllSQmxZZDB4c3BWaWwvbUhzSGhPWGZuMWVnRHRITkI2T2g4aGV6c0FqU0VLU0VyeUExTlFjenJDYm1hU3M5U0pmWVczU2tHelF6NHJSSkxoMkRDYUNrc3g4YmIxc2JtbzlFN1h2aFc3aHJ3S2RWbmJCd0JNS284NzFFNWZ0d1htcE1xNGRpVmRaSEEyekZJa3AxdkJZMEZ0TjVOWENoUWlkY1Bja0ZYWGhtdmhWdyt5N3V6M3lQNExNUU1xREkzejltajBiS3ZJdFFKVVpvM0RzaUIrdTVxSnpHNTd3c3pIR3JpR0ltV2VINVc0bThmNFgwSDZCMEtZbWFNeWx1ZnpjTUMvbUtzRDhjV2xKb1RISXd4elpONFRhUDU5dHNaSHRGZ2F0TjhYdDVpZUV3M2NDUnpJZHdwcUpUT0lMejYxRlNaL1A5S2RyWnFyWi9vRVppU3dKMXdBMUJ1eE4yRWZvOVI4M3ZjU2Y1czhnbzRZTGpWbXBqWVlKaDhJc1Z2UWQrb2VGcHoyenhLN3I5aGpTVUhhcXFEazhkcEZqaUxubHBsQzl3VWtIUTI0clN2VGtpOS9HUDNkcUx2YkFVUjNhclVHUzBaTU1iZ3ErSFlUSUJKTnVZd3NzUi9EN1gvRzcwNDc2TStqQlNONC80Z2lvcnhWUUtJaVBVNVlyMkE5UUxqYkwzNnpJSDlUcGdHM25NMDFiMUxxZEY0RXU4WTREZVpTUDBXTk5YTGpreGw1dmZVNklNVmNseXFiby9zdFF4aVRnNkQ2QktjUFA2VFdpek5lWFk0UG1Ia0MzL2xpT3ozWHA1RmtLNzdSOVFhNk1yUkJpSHNSdzN5TGkzQVBZdlAyZ0JVeW9iRmFkOGtzK0doOFF6MngyK2dybk4yK0JzMEJTR2J5V3A1TEdQOTRiQjZVQm5EUENsTmY1WG0xUmNLeENxTzVZYjJVNkRpTXhkRHU0OUsyQXFGTkpCTDNTR096a3UzeERVT0d0bXpxMTNrbmd1YVk0RVBudXFhcXd6ZUt1a0lBSldlYlBMNUI0cTNtdFJTa1pzUk1hQXFUaEpUY3N2c3hyMTE2ZFJ6L1U4Zyt2SmxSN0x5ZEthNldEdVNNOXJoNWEzV3M2bXRaZ3NXdjB0SlQweENscE5idnpNV2FHZlJLUFRUamZOU1FTdnQ4dHFBa29raWRYUDJrblkvbHh2Q3Q2R2Zkenp0OUUvUGxqVCtRVm5ETW96ZnhNL0tTU2dlMDdwZnErU1pBR0JBUjFoWUJ5Qk11R2N2RHp4VDA3NXBoUS83cXRVaWZlVE9HTXBXVitBZE5xczZ1REt1YnRkUytTL1puODZsM1JXVXdmUlhZWFZ5NWsvcUhHOWF5WUtWbEVEckw3SzVUeEl3L3p6bUE5elNJbENyVG9tK0puMlJpUzNIdTFneXl5SUMzMVU2UlFBWDI0cG5keDdFaU0zaTJVRWxKVFpUenMwWS9uekp0R2ViM3ZvaUN6d0ZxTlZXUWhTa0NQT2ZDNXd5ZC9xY3BoajJkK0dodkxBTGVmQmNnMGdKVVFrbVc0WGVBVlZlcDhqTWxmSFB2WVU0ZS9VNjhxNmpiZnJKL0NVNk5heHp4R0tnemovWWpWbHM3VmhWVm1hQVluVjIrb1FPQ1JFUHJLaktLdURWZ2NLdStKK08wa25rMkZnTytrbHA2VVdnTEIzaWl4UU1ZTVVUa0l3Uld2amZMNUpkVWc2V0V0cGlPVEl2MGVIYm1tcEtab0RrLzFDNmMwa3JITTZTcmdzZklLUXZaNXdsUGszV3dwRTBWMzAraEhLRkQ5WUYvSjFYVTdHRlpCYlNiTFZiekxTT1NxaVoxTXlSWTdiaUQ1QUtFbEU2c3dIa3dHOEV3R2JSTWhqQnZ5RjJKcHM2TFd0cm1vQUJDbGE0U3hUMSs1ZVBxQ0h1bUc2andpMEIwMHNlOE5ZWjc1c2RTWXlIZ01BWVB0SGRUUDRiMFltNzNFQzgyajNPZm81NEZOU3kyTzFWYWRNN2JxYzZJeTFUWFJRdU5WNm1VcWl5djZ3S3N4ZDVSaCtlQVJpRWpkNUFvUkNEY1dvZkpOVGlZQnZUMnFITnBNd0IzZ2l1UTlUdHRvUVVaL0ttS2JrR2VETFJKL1RrdDNqMTJIUnNzK3Q3WUxXTC95NHh1RElzRmwvcllMcFhKREFQQUpZc1c5UTZidXNiWDQvS1gzSldvcGtXbFV5a2VDQmZIeHBmeVZ3d3oxU054czRDT2hEbFRLNmgxSUJoVVJFZ2IwZkxPbHJ4dDg0bkF5Z3p5ZmZqR0JuU0JUWmZiWE42RU5OalUrb2xDbmRtOEx2S2Via0lhMUc4R3dKQWdBSHcrUS8zUVIxazZPSXpRUzdzcUN1SVU4K2wwWGFLQjcvS2dGc2lDT3JzMnpXektyaGtGemhubUs5SVprSzE3eEcxdHJWZnpPcjlZak9CZTgzd1R3SndRT2RET0orMW1KaHQ1S2k3STRaRnVUd01qYjlxMFRvcW0xMzBtTWlkUnY4YjNYbFBWV1Z1SXBaQVNvdjAzVFNxL2M2UkxtUk0wdk5YZWcrQkdQSUtabWxvTDRTdlRXUUVtSGFwNHB3bmRuKy9XOWd4c1R5MXRzeVY1NE9wazNTU2JIQ3VXckdpbytHaElNRTFHVjdRR1hCZEhJR2dxOTRoSlpJWTJpS2tsUzRoU25pSzJ2WnlOcEFGbHJqU0JXZnE5ZzA3ZUtYdWtUOVp5U01pdS9rRHVCQ2poV0RTSEp4QjFJSjN6N05vbmo3Nmd6Y3lXbVM4YXNRZTZLellPZUxESkM1QVVhKytvUUhnK2lCV0tCb0pWRFd6WnFGSnJ4Z2FHSjI5a2tOd2VJWVFVTWhoUGFwdU5HSkpWNDN4dEFaY3l5ejV2ZEpCL3BDVFhJMklkS1pjM1FWdG9KRUZ0SkpMK3NmQTJTWk0yL0lNTkRKZ0ZhamtTWXNmbkFiTlFJeHMrODl1QXRKUVNKV1dFMDNVVkxoN2hLUWhiRHBqMlRUQngwK3k4RXVJZjFrSThqamhkSWw0MFpqMVVSWTUzMjhlTk91UFRoNEtKWlV0ZU5oYjhVem9CZ29PWGNNN0dJOWJNNDdtMU9yVnNuOTY5SVRnTUlMQWZodW9iZFdTY242eGR6RDFPSGZob0JKMlozNHlTWS9peXZIVlFaS0VqenR4YVlVdHFJaEh5Z29BODh5Vy9EOVpHaXZsMDJrZWN6OU4xSC90NndvOENtQ2UwVXg3TVl2NW5ScmlsdHNhcnZoWFA5aXdaL2lSaDk1QXRPajRZNjl4ZXJGWE5aTjlVdUU4VEQvUnBaRllXc0t3cXk4cHp1Z3NyaWVFQlpXTmh3RDB3RFE2TUhyT3N0M1Yxd2phbjkyZzJSUVJjdHY0SXlsbkhZSC9hRnJZNk9iZTdvY0dtMjFIYmYyQVhjSnZrRE0rU2k1bkZxM3BZbXpzcXI4Q2N2cDU2NHB0ajhRTkg3cGl0S1Q3NTgrMzhpakQwOGtCeCtnVHZnK1plU2o3dm0xUGZsZTJ3TURKZlBWYVE4M1JQWWI0SXhrWmRrMWZSazVKaXEwVmcrZzNydHJJR2pxcS9YWVFCZU54Wks3WE1PK2NPYjVjSVRudWkzWHV6OUEwdUtWTkkzODJTekVUdmRMeEo2MVJLVVQ0aWxZemRWUitGaGZGak9hS0lVUERpNjBsbWVCcGJ3Rk8zbHBMbFIyZTFWY1JNemNiOElWK1BsNVV1ZlhBaFcrSW82eTM3SExKQVBFb2d4cHZ0MEFWc1FpYkZ3VHE3QTJJN2pzMXZMVmRrS2Rtd0JrMjVGem9zYk1KYk1LcFUzTHJ2eFJMZmpWM2gvRkc3VFRFTXNReW5JcVJRdEJsdHBsSERVUTNkbTVLNHdoK3BxZ0pGV3FsNWZzOStSZ1VFS0duMFZhMU9GVzFvWjhmMGhXRmVkNzkyVGJUdDViZWp4amc5ejRoeGgrVkwvRVpYdHZ3QXl2a1htTld3dzNMNXhHV3BTTHlaT2c1OEJmY0RDUld1cG1KUE4vckFZSE5yNDhqdzZDUFp0TlJ4aDhBTTB2Mzg4ajBZUVdVcURpb2tuYnRNdG9wV1pVeWNpOXl0a1c2cUdwaXhkeDVEU2p4QUptdk1HSnJxM080K2hNOHRra1cxSXZoME1yWkFWSTUwT2NVQUx0b0JKa1FvVGtNeHFyZlAzNVRGMVJsNG96NS9sN0dKOWY1cHhOVlZXdVJLaUdTVkpTdGRKa3lxN1VEbkJwUytiK3czekdBVTNCRWlheDdLMVpLRVY3MHV3d0xKeThWQTlPUTZ1dGxaclJ3WEdJcGZSZTN5VmVJSEJjVmtIVmVwQnhIL3BaTHRUeHRhbUM5TThZUFQ4cng1Tkc2MURlVTBCdzdmam15VDYzUjVrdHQ2STR6Tk1MWmdPSHZsWVk5UTdhOS9Cekc5QktOWTJUV1g2M1ZEd0lZTGIvVFQrMDB2N1VVZEpiMHlYQi8vVXVSeElTQ3FYWklsV0l1RUxFZzdpck5PcWRUUGJETUtYS21nbDBXOHUwL3FqQTBMaWJ5UlJhNm4zM1VBaTBYYTRueHJuUElZd2dJN2FadWF0UkhqOGtxMXF0WW00ZnVXV1hDWHlOekNGamtITlpNRzBPNmdjM2R4S3RCK01SRDdRelJvT2pKOUtOckxzN0d4SUVydDBKQ05kbHlBVWkzYlQzZ2RudWFJdzM1eU5DUWd3YXNqdGlwWk0xWkNXbEliOE1lMVFTaTJ6T1hockh2OXVCREh5S3VEV3NpRGV3OU9ONEMwTlJJQ2NCR1NYK0hid2srUW8yOW9sS2VIN3gzYWpCT3pGSWZ5L1Y2M2x3S3RxNkQxUElrc1pMK0orak9HaGZCTlJlQmdnVlcvRkRLYkpxUXhVazdQaHExL3k4Zk9zV3J3amY1eTdoSmtYbzRMQW41bWlTOTBsOU1rbDZCbklBUHNIOU5wVUg1UThxVVFvdTB0OWdQaUZqVHlxNTd6aTY0TlBKR1ZiLzRCTk9laVFZaFNxWWpJNXd0S2xSUHhQM3NkYkpWNHNucUJCc3lmUEJDd21uUHp2amtacWc5UkNFUmFCdk9GbzFjTmF4T0FTV2wxajFGb25VWTk2N0o3em5GMGtTL1I3RUVNdng2c1JGajBnbkNUQWFRNkFpVm1pWFV0VXNBcUVkM2tnejRzUFI2SWpVZnJOMnl3bWlEN0tMaHN2Mkp4Mm1nQmRvZHJCVXBMZjg5ZklnMXBaN1p0T0VpbGJsUVRmQVg2aTlpbk5tMlQwRzQ4UEJUOEJjVzRzK2lrTHArTUJ4NC9BcXpXNFRrbzNPdWdhRmsrVGpxWDBwanRxR3JVRUUvdHZsdFRWVlVDUlppejllZS9FNWgrdkdHMTZJSFVFRUI0UWhnYU41aHJ2THVSK2F5a3ZzQnQrOEg1d0hrd0dsVXJab2YxMWdpdm5kWUFFYVNlV1NoNXU1Nnp6U0dLU295RnNjV2hYcHNDcDcvSDF0U2pOakZHWWNXS3Npdm50QTFqMzFyTEliSlFxcGRqWUwwNloxU3ZpeWRJKzhhZHpidlVnR2krMVlOcnB5NXRKN0NzOEFiNEdWcndsdHFQNXpPS0tHZldJNUhXTnRZRnN4R1RaQzNnNlJnZHIrSmVlRDJnNmc4eGFkQ2RQOHkvSHoyTlJXY1NrRnlWZ1BRMWpkRDJJLzlhYk5OanowRmlWQkUwTncvTCsxb0FlWnVYSG1xR3dlU1QwdXpCUXplb0N3VmREWTVRR011QlRjQXJENWx5VlZ1UWZqZGhLL3draksyYTI2U1BMeWI4Q1pMZVA1ejVYaWNxQ0ZyeUQzbktiMG91MTQyWTFQeTBBVVQ2WEF3V1VscWFuZ0lpRytQZW41T1FNNWdaVG00ZERCbDY3ejBJR093WXlXcHdXV3E2ZVNsMGFvZzQ4Y2g1Mk85QmliT2dwbmVWTU93Z0pYQUZOSEJLbWF2aFJzeWM4b3EzWThXZGNIUHQ2OGZSWW1aNHpoWjZHbGhtTFdLSXArNGY2SWVrL3VCSWRCYkhxSWJLa3NIcFFtL25MTVo4SE85bmdyN0VaTThEWjZnaUFKSjcxVGY3RGtEQkxDYkxXSGpYdWRoZGF1bTJ5ZlJVU2RFeHpJUWU4UUNjamZRRkFjOHF3OTFUSFhacVp2eUluNngzWmRmdkkydUZDcDJiUVRCSVZ1MDdsdTJZU0FLb0FyY0F4R1A3RU5DaDZscndSbmRqKzN1b3pMOVQ3VjdOZDRWSTJINmpVMHh3cEtoNlgrYWdOelRpbHdPWEtEZDBIeVlJQTV3dkliNUxPek9jayt3cmZ6WU5FQmwxYWQrUmJaa1hVMWp2ejNKVHEwSVJ1dEtRMTdmNEswMEQzZWppNHdpTlVwcjFrMmh2YVdhQkFkMnB6VGJLckkrN1BTN3hyK1o3UGd6cDJ5QnM5anJtOE0rL29hbGxrdkViNldXWEJVSjFlZTZGS044Z1B3bG9LaWc0T3lVenFxYmpOWEdyamFSR2ZtZmk3ZEdNeWY5NkVCYXRaY1greVE4bmpwOVJZemo5bmVlTEN1QjVJbWJ0bi9FZDBnbXhFVzg1elMvN1RrdENoNWwwQXl3U1pJS084VlpER1JFUU9TNng1WDdnbUlIWllNWmEwSnF5c05WV0E1WGo4SlBzYzV5MEgrd3RYNjZUdnluY3pzZGV2dVZERmsrdFBvcHI4Szd6NmNkd1JiOU9Ldmc0Q3BFaXRNR0FWU3d2TTVhbWdsaEpnZTdRdmVHRzNTZmgzMHpBcWhXV1F1bkNXcDVnZURGZGE2RUdtdUFIZG5LNThxZ2ZWcUJMWURrY2srNU5TMUpKQ3BocDhZMEdjUUVPbGh2WU4vTHo1R0ZBS1lPQ3NlRmNzbng2anQ2OUIwSXpKblVBWDVIZzR1RTZsWHpydXB1Y2xGWG1HRnVIWTBDZnRJTVAzQ1VMa3lkTG04bDF2M0oxVUNFdlIwMThhSklHZys0L3hHM1ZtWW1ERWtjTFdvQ0NCTUdZZDNaVmlpQUZJK0wveDdiRjBnWGdLeUkycm9DTnVpM3pZcFd1ZUIwb01rRkE4TmFZWmxpTnpXMzcrZE9qUnlGVHJsQUQyYnplTm5FNzFnRS94YkQycC9zZVlES0ZnTE1Ea2FKOTZUM2NCQ0dWeVovcXlmNVIxenpHZ2FTU0YxSU1NU2JVR01jK3pNUVBWa0V4MFJIeVVHMlltSDJzd1RNZmJtbmZ2dkZjMnhoRTA3eWtPQ3RrV2hpQm5GSVBpVVVCNW8wdjVCVEQ5M3dtTS8zVGEwYUtKcThEbitFQ0FUekgyekhma25aKzN6ck9hWG9XM2hqaVpVWUM2UXA4ak9rNUptM2JNUmIzUTcwWG96S0VmRGVmUGV3ZzhSVUN6TFZmTXhoZFppUkdvSlcxRU1GcHhORzMvYTcwQmUvTGgxL3dlb3RxNDN0bEYvZjRqUmpsb1E1SkpmWHFSWDhheWRyZmtoZzE1ZWdrQmxaeU00cmNaSkxjMmNibnhUeXdJTkNqa0hjVkZ2YTV5eHhJbVptcXBqSy9FKzVpbFBZaitvZk5Oazd2Tk95ai9uU1BtQVVPbHk4dGF1RGJ5dEFXUXNNU3VRNGxtNGpJUUlmTmh4b0VHTFlLd01UMFgycWk4a2drZUZxUG5YTHhoRlFvb250Q3hleU9zRVR2cFNJNE9MeGtselY5VzhhNEpuMnZ1Ni82ZzVTNHoycXRTNzRaL1ExOHVpdW42YzFLTGtwb2hyV1dYWnNqd1hnWFhHcFVJdkZNWnowQlNoOVZKRHRyNkVHSkdJSStsOVYrMzVEUXpTdElRbVVsdFZybGtHRnFKNC8vcDJFdWxFU1VnVlpDK0lpbmdTT1JaZGs1U1ZJemE3a2hMbEIxWUpNaGFaMUY1THFxMEYzZmhPOFZ6SzFYWXN6bUVkSjhZNlJXalExMDBFZlZ3U0JIRmtKUzlnM3JSdm5BajJiMjlyU09LM0k0eWNOSGVuQWowbXFLVDczRkExN1EybDB6ZFpJd2daQ0ErNDVqc2E2ZzdUemZGSE1Zc0hKdThkaDdkemd4cHpCUis3YlhWZGsyOUFZL0lQVVJGZXlPTkQweFpaTWx0VllOR1p4Yk9CZXNFUHB2ZmVUN3Jna3R3KzVnamp0Zkp4TlRsN2lKaWZXVTRwVENiZ2dmY0M0cW9oV0FYOUNleFgwWU4zbUFVK1NJdDJPa2NLREkzSGpSbnVPTWdaTWg2eDIyUEdvQmtIaVgzaGtvaUFkNlg4aTV6WVRDTGFXdndWMWhsNjM3TFJkdnRqSHVYKyt3Mkx3UDlUekRORFBYRFpmOHdWOTBLUjA5VUY3b2FZN2dzaGY5MzdkSnVPMnI0UENRL3h0S3BjL1NyKzVHNDIwcEFzQW83T0RkQmRDOWhIWGhWRWU5U3lHTWVwb2lqUE5hRlRrQTdPaUV6RzJOb09xNUE3WHpyb0FHbXhUait0N25qOElKdERoT2h2dmFiSHVQd1Q3aythL1pleFVMZTFlRWRPNzFjeldDRTROS2RpUVVjTm5NSjVEdDhtNit1MzV1UmRKcDJZUDF2UlZZT0JVcGpBUVFDa2tHc0xYUmFQNTdHNlNmY1dtSEVpREZjS0RuOXpvZlVvdHB2SDVtU2E0Z1B0akhneTNhakd3WGwyS0t3b0xIbTRCTFJJL0VtcEl6ankvYW4yZkticHJHb1BhMi84dytHMFBWZ1BXdjNraVN4UTB0NHBMMEpnZU05anU3bzRoZnMzRC8wc243TkQrU3kzdUdvQm9adGlZWlBmdFBPRGZabTJwQ2pLQ3ZhaEtTTWxJOUdtMTltQ3NNQVpNdCtOaFVZZWhxYWRGUkY4OUhvV0tHeXNqcmNjV3oyMFZvdWFJdGpsOFdEK3o3ZTNReEx5SVhwM2NiNFFBa1k1WkdtZk94d3FiL1RaN0VrNnFxQVRpb1l2cjkvaGpTd3djcjZtNmgyOXYrenloK2ZCTEhqLzhDOVJJalBIK3pBdDJWc2pabW41bTJjYlZPQlJTTUVUVldLbkRhN0IzaGNKWDF5dXRLTUJrTk9GN3dMVFZVTitxd3NjS20rVlY4U25xWG1LTDM3OW81Y1hRT0Y5NzFWSUp2OVRlR29tL2xWcXpQNk4xVWVJK0dyUm1XL3RaOEJUeDlZOWVML0JTdk1CUlJoNXVJdk5UTFNUTTg1aHBzZ0dkNEM3Tm5lNVlQLzYxbXJpOTdOVnZLMWUvVXFUdXJNdlVRemZZZ09GcGJ3TGFqdDBYMkdGN2dJNTRySUYraVBOdHlqQlcyRDlQQ2ZUSEJSN3E0L0tpVysrNHpjZDBJSUR3SFhCaHpKVE1tcnNPQ29qVGNVcVRZVWxuZGV5YVdVbUt1bFdRb2Z5Qk1HRko5SzZUbUpkZTkvK0FUSG90MVZ4U2hVcDRuRmtOK3NBMnZ0NjhheEpNa1BYbk9JM0lUeGhGT2RQaVFLUGpCaEg1d0R5bkxnN2N2dVRaMHJyUG9NTkZHcGg5VHlhakpWQ29nZ3RadjJXN3F5MjhSMEFhemhYaHJmbGh2aVBzeEdqV2ZYU0xBU1hzbDNVNkZmbTA0NGVKc0wwZDFROG50ZzZKNWpkWFB2RFpxMG9jZEo5L1VOM0FpeHNjcnVidzMyRkFMV0pZUDNudE5BR09tZGxmdlc0YmZ0cWl3aUJtRXJsT09wS09VQXNJTndBNGMzZERuRldKQzhXNkJYdmtBV3JXb0JITW1yU1o3V1FZVDU5cW5BcE12Sm9lYm96ZUJ5L1ZVRVgwcmg4MlFYNHgydEU1R0UrTkE4WHh3UFdnNHE3SjFzZnl0Zk92S0l5ZXd0UzZiVitrNXNvMGdTV0paaTV1WjZ1bUs3NWtLOFJJUTVJU0c5SzlYKzJxZVQvam5QenpyczNjWUtnOG4ySUl6MHplRndWSU9PcFVaUDl5cEFqTEZFbTVOQ3lUSXczckphQlNISC8yU0dRbTZsOStoRlp1b2JHTnpGYStzV2NLdG1jL1ZhN3Z2WFVUdnhYeDJ1a0pVMm1mRWRlWCtzVHdCdWZGWmRxQ0w5K0Y1QW83a1h4cWI2Ymsya3cyLzFjUlFaVlhJaDJ4d3hEam5iUm1Ua05FQ2NMTEtrd09vaEM4UEd5eE91ZGlRZkVwR3lhNG1aeG5NWi9JZTZmc0dKeHk4RDI3OFVYSE9ab2RDSzNpbUd1eExUWXZJODB1eXNmNGJhcnBiR1BqU3lDeGxscFZWdzdlYmpoNmk1MFp3SlJFM3lnZ01zL1hiV1Z3ZVdybXMxcXlyNURJSTVkTWk4WnF6ZHRtTzJEamQ4UFEvV0ErNDBXWDNoQ1hYeG1ZdUlUWTZESmVaL28wNjRWZEc2dTRtRkdxSGpsZzgvRFFKZm0xbkF3a2NCMWxZS1ZpZUFkRWNTdVJYd1NDQ29IODhvOGdUTndOL0ZQUnF4bXhUOTgyaU5BNWJvZmlnbmdoTHZlbDBGMDBjZFVEUGZBSGtKNEVBU2JvV0FYMkN4VnRkWlJya0JVNWdqcGkySmtWbjdzUE5kYk1FRkdzd0N5T3VXWTYxS3hiMEVQaVpLdmg1bmY0QzlKSHNlOHJjbndYeGNkQVBPb0E2OER3UmZCVUJ6bHd0N0dyUXg5RUhWMGNrcnhmVDc5bTBoVkJxZXRjNVluRGg1VzRGOHA1RkYvMHI1eEpOajBudXFEcU5EWjBCRDFmMGp1MEFsMkdjMGJxQzlqZTBTZ25rek9kQ0d3cUpWV0FhS2Zrc0NXZDFIT3pJVU9xTDNKSGN4a1hyeDdoRVR3cXJUSCsvZ3JLdCtwaHhJN2lESTJCdFRiU2ViekJpRmoxV1hXTEZWMHJkendEbzlvVEZrVmtpN3FpU2ttK3RrL0M4YWNXazkwd1BWSEJLVTdkRHc4WXVCQ0JBL2JpYUx4UDE1VkEvcncxSTZ0aEZ1eTJDeU50TkpzYTNWWklrdC9sb3NIVmM3dmN1bWxDSTBScUJEYStVSXRPa01oaWVVMTcvM1RSOFJBYjhXWStuNmRkZlhjazFraldtZmpDVkJYblpXQzMrZDUvSERyWE05c29mZFhQSzNXWDd3WXp0bVNWMnNTa2lvYmtyNndWVUhMdU9OSys2VEpFWFZVYzJaanpuQlYxZTJjTHNHMWxsalYxdFRRMGMvWS9JSGc2a2t5VDZOdEswSC9qTTh1bW1WcE04bU1IUmtIYzJabnBLNlhFWk1ldnpXTnE0T25RUEkydmNDRFlEQVRZdFVNam1OWGw5cjIvN0NiQzhUanZBSlVacTQwcm5zQnFRdDNzMDErVVhlajdEUm5qbCt4bjFFOGt5NU5Za0V5OUNLdWg4VDNmQ2JqUFduUHJ2ZEFJU1N2OG5DdjNHcWRWMmNhTkpCL21XYlJRNTVIbG83TDlyaWQ2UDU0VEpMUFN5K3dydUdpVmJHZURCbE0wSDg5OHhQYW9GNkdjVjRGWUpjeGw1Q0RrUUhuMVlveW4xYkZhTGRjNnhwUUpaS2tZZy9oTCtIcy9pbFFFYXU3V2lCRXkzaGNuZWJGckJjZHA3UnVEWlZEUHFLZzFFamkvL0hkT0tsYW0rV0ZWMmVhZXdiTkI2WVpvWjlPdDA1eVFGK0xXTU0wMVFGTVUvQ3dINVJjT2hWR2d4OXl2dkpiWllKTU9HN3dhV1RFdklqTWpQcXFZeVM5T1lWbUoweEJ5T2VaUCt5TFhPN1ZhOHNwSTR1TW0zTm1CdytIVXovWDYxQVFBZmxyMkhabkJSblcwVFZRaHdZSDdRcVZ6d0tya0JNWm02d25DRy9idU4xb2dJendROW0rSXQvNDBmekp5aVlSazNJSWU5SVYzWVpqV0wrc29vb0svVWNycUR0dDhtdEUydzFoaGJpTjNqWHQzV0RVMExCQTBqUWZSTE96WlpnTDVYaWlPanhRdHpjT1VQVkpxNzlZZDhMVmFEdmNySjIvZkozSmRSa2NRWDhUZjI5bUpVZjV2ZEJOYUVCWFZTcUtTYmlZWjN3aytIbzUyMmdvNFg5TjdEMkN6WGlxSElLK1BMYXgxODdjQUtGeDk5S3VjNlJEMjFkQ2hFbW42WXlvblUvOVROU2tzV2hmYVJZTm5keWVhL2VYcnR0bjhvbjRrY0VJNGFnbnhiY1ZYNEZkS0VlTzZ2cUdFZDVmdWIyMkdjcHpuaHYxWm1CRjJoZ3d0UFRObEFEY3AxcEhyQlB5ZXhVY3hIYUQvZGUvZTEvSVNpc1RYRCtNK0xGcE5kYktSUlBuSlhqSmp3REQ2N2FmOThmTTlGZGEyZlI2c2ZQRWtrM3RQZ1UzVEZ3eGpsRmZPc3JUckhSVFlGVktyMW1kOHlmUlg2dmJjc0RSYmRjRDM1YUVFSlMydzlabGdXb212TmdwakpKWWFqZmZ2MHpCcXAycGVsT1NIQUIreDE0cTR6Z2IwMFZ1Y21kRXRyQUp6TC82LzlRbWtIa1JSMVY5dzVQbjFsZFVOUGFyejcrV0lMYkdBRkpuc3JESUI5bThrbzNlVDNTaEFtZjVMd2RjZjB2TTI2bGpnT0JtTnA5Y09IRVM3VGViZEtodU5KWTh4eEw4b2tWSzF0Umt6NFE2WmNjYWx1eUJ2cnhHUHQrSTdEU0o1amorK3I1eVlvSHNYeFpxMC9wZkJjMlYzNngrQlphTGRLQ0VrY2hFVDdXL2VJWDFTbG1jbkUrYXB0NUxFYTRhR1BnbzlsQXJEZTl0Q29TcG9sVDBBWHJRVTRXZFNRdm8vNmlycm9TbWlkek1qWkF4Qnk0dG16YkVTM01zSTVZNmUrdGlzK1A4Y2wzQVcxWi81NEVSY2ZkSFRwZnY1c1k2L1MxR1pTZVZseGh3YllJQ01KbUdRWENjbWw4aXRvdTQ5VnlRYjE5b2MvRE8raFFUNWVnODZuL3FlczVMVkhtMDhtdUpTQ291azEwT1JJRDdET2dmZ3FERDNXNVllcjhXMmkvcDdpMnlOUG5vekk0S3hQU1lkamhXSFB3VUxMeFZXWHlqS2h1WXVrR0IweEpkc1VVcVh4YkEvQnB5b0hmckpxaytpN0JzVWl3T0pwODBUMmlUeDdBM293T2JlNXE2dWhRWFFnc3RzVkpCME5tMlh0K2JQTlowdGdYaDc3aW1nMkxTQTZnbTZQMjlGeFVuRWxLQjNaTGwreElWTTVTNUJFZDh2WlRVZWlKSjIvMHgyc0c5V2Rrc0V5TDVaaEc2N1ZvcUdKd3hxOW1nOTNVMFNNWGtmakkxVk1qeXM3dXR2UEt2d1dCVlI2MXhQUnNUb3hMNVNKdjlRN1BoMnlvSzVwcEoxWHpwcUNwZmEwbVREZ0g4QjNTNzR4MVg3ZzdqNlRwRTZ1RU82cjIwTXJsZ2ZEdVFpVG5DaEgrSHlQYkkyM0dHVkMvQ202eEo3bVFLZ0MxWW9vVnVGYmtJdi9MZW9GbHMwT3ZLbDE1bi9EL0JBaEtPT0JSWElJaENrOEpOV21iUVIyQmVJcGF5SkhhRGw2UHcyZ3Z0YnV4YitjdDRJanVSMFhWUXZ0L3gxV1h2YjJrcDVQcHV0bVJ0WmsyaERBOHRsQ3oyZTJqNHNOR2paUjlaT1lZY2FuOWtyWEZaZHlZcTVHTE03WnF3WHo3UlBZRTdsU2JiKzZBUkVIdFZIR3pFWHo0eDFaam5laXdKVHBLSHhwQ1Q4NWVEN0xSLzFjZlpwTEhHWStZaUcxQzk2amc0N3NxZ21rc3lPZHE3NFpDOGZGVjhNSkFhbnc4UHlUOUJoUW5YWU5IMmVlbVB5am52M3FWRWxncnFsUTdNWFppdlpIQlhiNnloWHRkdkJsVzd1bGtNS0VMbFAxTzFtdjFvL09MYkJUN01kQTBYMk51cmE3amNGU2EwOG5WVEprK3ZudXpsdmdsVklzYWRTMHlLUVdaNGZNZTRYSnpxWnVoTnQrNHltQVZBbkl0Uk81U3dMck5XYzdZSjFmdVA1b1hRUGpSVmxGQkhMRHYwbU9zZDVKektqMTlBQW9UcnpxR3JNSmlBdkVtL3BQdkt0WlNyc1k0dXI0bkU1eDJuNGxlUnl1Y1VrbmVvQmp1YnYzVHBBY0RrS0NSTDR5YTRJdStwWFgxRjRZOVB6aTU2NzRjQmZ5UkRCZU1IQ3BOWVRsUldPb2FBWElGcE5HQlBDcnY3QnpVSWRadDB6UGdYWmFVeFhMTTdQQXBKVXcyUW9aa2JtNWtTcDBYY2JCMUZUK2JkL1lRUUdDUVdCZUtQMkpwcThDb1lheUpFVytWd3FKczZyanl4OWdIWW5YYlVKeG9INVIzU0E2SUpnZVAzSng2MVhoWGxiUFY5NnVHbWZkaDBLQnl5QkZ0MkNEMTJMRURIWWo4L2xpZzV0Zk1IaENBamNNYWNob0pqaXVhRFkySVZsblFXZHVDbmxyMmpmcnQzSVl1TGNtRTNQRHFBRndpVHoxQmt6d05RbDd3WFRQdWI3aWtqc3JxdVFmOUg4OUJIUHFmOUdFSk5Kc0FpVEZZajRTMllYUjlQVW13MDFwQ1pOWE42OXdQZitUa3R5RmhKQm80YjBQVm94THpURnJvdFQxR3pVN3l4M2pEOVpSSng2TTVBY3JXVnFWWkJJUHYwWUFxRG5kb2daRmtGTGdLV3lkM1BRMkJEU2ttUk81am9KK2svVFlBTy93OVh1VFllNmJYSW1vbGllZkxDQk9SenB4eXlvV3lZd1Uwby9aLzdPbWgySEV4SVFyRGtXc2htL1VPTDlnK2hmelRSc2JwNTlIbDNPaExraEdqNW5FRnRFSFhXcUJHNVdhVzc1MmRGQno4UWw2WFZJUFZLY29MYUxNTXIwV0dQb21yVStPRE1sU24xOE9ubE9keWZhUmZtV2tlTEJwZEZhcGpHVFZ5M2U3azNGMkdiM1dSdVlTbWVMeGRYM2g5ai9jcWJlS1c5bHpma3RLVHBXdDZqbFlCZ1M5YnBCWGg3cWNBSU9vVmhwbjFEYS9QdnkvYXVjM0NGMEZ1MEluM0VDdlRCelRZMmwyUnZaWWs4cGw2VnFaclV0R2djRDhVL2xtTytsVDgxcDB4V20vS0dOeWI2THVpK2RHZDFaaVZkNGtQdHJoUkNZckpkUGVGVnVaMDR3TFFsVlhrMTZzTHNyK1ZnL29DckdZLytCVFR0bkJvRURKNXV2WWZ0SGw5VnBhZGwvem9UamlUdmYvUVpUcnV4TGlxNnhqVmpnTzZuSFJxemttSGhBYktZRlc3SGtxY3A3WVZQM2d6ckNySi9PQWt2K1FuRTBVYmpwZFFxcUd1bHJiM2dhT2JXM1RxZWJFNVNKTEVESHczanNDbVdOdFNQQVhXVDhtZGlIWjdyOXF1NE5VL0ZRTnFUTEoxOW9LdGVsL3kxM2RkMGRZakQyRms0YTlmVE1KZVhhazlwYk8wSXVwV1NGSG83U0c1SVV2VmVBWnRPR2RvNXMrVTIzWWJSKzRZOUI0d3NSSzIraDJjRTg0QmducnZQMDh4RkgreDdlVUtFS0paZHhDcjdNckVwZ2xHTUE0eU8wWU95NGo1RjFjS1RpM2I2eTFQU3hqanB2OWkrVDBlakhuR3FlbFFMMW51ZU50MnlmdmFYc3NTbVprNEpvZkd3WStNTEcxejQvTHhyejBMMGd6MlNrd21hUm8wVS96RWVzdkxneU5nWUhCMUdaUU92RW5McXVUb0xYT0FVV3ZqaUxLMGp0TnZTMzkzdmNSY3J0OEowUjZ3UEE0bFFrMzBZVmZQQnZSOWZQeWFIanpmRGgvbS9YbS93dTZMWEdDSk16QThZN0E1VmVXakk3c2N5d0M4MGJSREpPSnpMMTVaaU02Q1QrK3BzNWhucFI5bXc0cFBmWEtwVFJQNTc0a2wyU2M0OThHaUo5c2w4dmdBL1owK2ZiODlOYlhBbkhOZS9KbmZGUVZOaUlSREY1ODFJc2RjMTYvWFRDOFhvV0pmOGRUMU1vV0M4OGh0OWhzZ0h6dnM3K0Y2Z0tvOGU3ZUlwS1VoUmZUUlJnUml5VzhzSk54cG1YVTYyWnJGdjJ4YjJWdVNaSU9nVFJVbmEya21xcFZRZGREbS9DS3poV0MrMWF0V1Q0RjNRSWxQT0hvR0padDR3UzJIUUpjK3ZJbVZRKzE3allGNE0xdmhNOFNUdTd1Z3hmUFFjYWRMUDhrQmtKNUhFeEpWeGtad1NUUDdobm1ldFBQbktlaVJ5RGRudi9IZGM2QUpWZXFFc2pZNFJxT1p6S0FLajJqY2E5YjB4b3locEtwRXE1emhEaUM5bTRJSitFQk14dHdrVXk3cmR3RzhBUFFZWFpmVFgyR3F4R2s0cEJ0Zm1IaGNTMXAva3E5cUZuWXA3MlpWMk1LSW5Mekp3MmlRVTJXWkQ2dVF5ZzlXREROVTFLc1pkMHFhTyt3djh3U0VHSGhWUnVrWldXZnN2diszNEFlbkRzWldLYmQvWWdRMEVFTGhFV2MycUNiWm4wTGhlLys0UUNYL1FEMU5sdERUZXhuc1UySXpnMEsxQjFWSmpmQVpzYnJFWjJZQnMvdGdNcjlyaUZMd2h4NTQvK0xWNHpDODhZYWF6eEh6WTZQalY4RDBZdzArV0xwUEJXYmFMbWVnYXoxRWVIZ3ViYkhpNDAvWGdiakR0dUhBSFpmaG9nQU43OWpTd1RZNnNITytBcE92cUtDT2c2TGd0NXJmTloyOGptUmJJVTJxbTNod0pIai9WaEdOL3FWMFNVbTRFeEN3ZkVLSWgzTGttelBDVmxiMmJFRnBnc3NPdG9EUVU5cU1CWnFrdmFtN2JVS3hmL2RSak0yZ0xUeVhPK2w2OXYvenBLUXQrT25GK1BLU0NwcUNWZi9xMzBPRkJVOTJWZEI1a2JwcVpwalpZS0E4Q1NLY2JXWVRxNE1xaGh0YVNJMCt3Q0ZoWUVJbklWRWV4RHhQTnk5TFdJMEExZVBlSy9oSm1IblVtS3JIV05WVmFRWkJWTlg3c3h3VnNEL2VZNEM0Mm5TWi9rRW1qNE5XT1lJZzJVMVRXZHMrYXZ2VG5Tb011WkpRbU4vM1Y3MzRxdVdvWTZtVXIrOVlNWWdNK0gxNmhlMEtQSWpObU83TDBwT0VjTWRXWm9jSnRNMUc3SXNWa1BGMCtkZjFkak1yZnd5MXVINENEUXZpTkFKWmE2UVo4U1YrYzhnV0xNME1VZFRXZ2hRYzhNckRsOE5ZV2lGQ3VxNzEyMWF3OGJaWmdGdldTZXpmeFQ5aHhpc25KblFzWHVKQm1TRnNsL0VZb0N2ZG11K3NkSHNhSHVnNy9CWFpHWG1wRXNuUUtnUTFtd2h0bHM3TUZIRllMOUhkWVluS1RocStyeCtpRFl6NFNSeU5RVWVZYkdNbENKS0ljdDByaGhWaEJJNW1DaVBzd0N4Zjk3YXkydWI2TzlCMVJzbVh3U1FYK1JCMUZ4d1NONXp2YWRWQUVESnhzSnVZZWh2dXJUSzIva0YweHQra0ZJbVh2UHQvNlFMaFdUNDUwSGxGemV3VjFJVEdDQlkwMVIvRW0vWGFpclBrR2dVZnBtdFpwWWZDdldxbzhrSDd2Ym5tQTdsTVdUZTZjaXA4VE9HQzFWVVpFNGtwdWtDbm1EU05JYlRnbkdSS0M1VVNXNlJMM0NQV25sRFd5cTJuRlNrUFkzTGJGKzU2dzlWMGV2TkRiZkRYRjIvMkoyT2crdGU5MDlIQ3JJUzdreHFPWVc5S2VDWmptZWdsMFBqVnE0Z044UjZpYnI3L3Vqdnd5M0RCSlZMVVFyeitxZWFucHZDRTNJNFdOc3pzSFl4WlZjZDdZc1hQTUc1RjY4b0pjSU0wcWo1S0o4TXZjVGU4bG53UVpiVTlOdkxpTlh4b3JKbGxaQXBxaVFCeHYyKzFvVEZwOWtMUEFOMGNTZ0lLREJCZmd1L3hiY21FUTR3S1d6QU9qMi9Zb1JtYzhTVVppLzR0WG03ZW1OMWpINGV2bGVmLzVpcFRMU0w1Y0M2Yk9qRk8zeXBMSGNqaStBOEVjTDhSZ1ExMk9aMjlEWElHM2htcDNWcjF4QlB3WUZPdGY2NWpVelcycjFSc0pMTzV1ME9ubVNKVXhnajhxZ1drUndXNWI3enNsWGJoazllWE1Kb3VyT1BRU04xZ3hTaTJGSFBkcDViS1FoWDJkVmZUaGxkaExOSjdWUEJIUDJpUityeHljZXN4cGZpcFo4WDFWNmJUSEZVSzUyNHJ2YjJXQ2xhK2p3WDlEYjFHM0NsNWFYZXpSNTFqSUwzYU9QVGFPZFZmOS9SVjhPMHcxS3JLSElIVDIyM2IwK2JxcGFWNHpJSVJiS3pUOWpzOGo1ZnB3ejRaZlh0bGFYUjFGODBFdTUwT3hZcU1ocW9rOFQvanJWZ0tveTVrMWhqakwza3Z6aHpCZThBVk11NHgyVm9kQm9sYzFZVzlETzgySURXNUlHSkJLd2tQQTZmMDBLQldBS2I5UGlwZDltYkV2aFZvVy80b0JFWGlEYTNKTkkzOTgwSDFvaVgxbXEyclFIUXJCYmZaWVMvTVdiNk53cGhuTHo5Qld1TEpBVFhiV3ZDeEtXZmRrVDVWYUFPOHVWRVZtQkYxQlJJYmRBTk5wN2Flc2Z6UnpuT2J1RkJGYUsxRWlzNTM0TlFhRDI2WlExZ05jNmI4K3ZlaXpGWTMxckNyTGRacWxwZHA5bWFKRUN0UnlrU3ZZRlM1SHZLT1RzNkFLQjBsRGtTeDhwMkd2M1kvWlhHUzJaZEtqTkp1S3VnajRQYlNNdXJBMDBYVG50Zk1yRG5Lc2dJNGpyZnd3aGdnMEpZeG10bkFFUjFoUFR6U1pUVUkzMmQ0MGw4T0d6c3FRaVpFcDNNL3hydXNQRkNzMHFUdzZMSmdyRXU1cW9mbUhSTTFBNk9WWkZ6MmdNYVBFekdIZ3NSV0I5NkJ1ZEQ4TGhrK1FuemI5UzhoMGZyQWkzN3NRaWtEcm0wWjBpSWJmalpNQmkvaDF5YlZhMjJOYklZSzA1SW5pU1BCU2hmWi9KMUZyYU8xMy9YU3BhSXFrNTBYZWY4YTBHWHZxQ2tjbW1VcTVmUm9LSzRudXh1dzEzTktRZUFnWlNtQjh6VWNSWGRTa1FHYllJWmtkTzVhNUVBeGtwV0FnRTFHQzkxWHdlTk8yRVdYS0tUSGpkY0JJV092d2paMnZQU2FVVkF5V2tpaUdab0xvQUR2b3ozbjRXTm1FaVdEMkw3SktmSXZIRDB6NWtJZ2JhalhHYm0xeXpzQmY3WWwvNEV2MnpuZ3VGcUZTWjIrbmtsTXN3Wnk3bVB0aklXN1pJSENtQVVqRTNhUkRzNVgvRnFJZ1laRjFZZXBaVmtBc0VweElNR1JLZURZSWV6VWZCQWx1ZkNMWFdsZ3c4eThQZi93SzRZL2dmdC9sODJsZUtad2ZOMUZQTlVpUlJPSVFuYWpJZVlmcFFSSjhUL3ROZTJucUVjaEY1aVhLdjZHcTB3RFRpeUhZSTZBRUZGa0dnMldOaWRjUXlNUHBNdVZYSzEzcENwWDZ0WXYxQXZOcmtmVjRwMXhhNTNQQ2prbVpkU29GeUdUYU1jbnRCVmtHS2hrNURjODBuWVlERWRUbHlUZnRxK2Z3b3FIZ1FhRXlaUFE3M0VGay8wWmF2c0NOTU4wM25PU1VlZng1bzI2SGtTYnllM29EQ2JIdm9Va3NISUI3U3VjWnVGWktjclNTeDNKV2VBckF5Mkk4K3ZUMFBMdVNMVTdiYm82RmtneHd4WjlyTFZoYmkrb1ZQVTZPdU56cm1ITGI5TkkxUnd5VVVhcmhPalBjeFF5SkthQ3piV2dHdlZGR05KN0RicDhkMGo2Y1paZURqQjM0SDVtSjI4bVA3U0FKeEozYXQwR3NRRVJCZUMvMTZjTGg1VWhpc2lZU1NiVmp5ZFNtTUFtNFlZbjdVSktzL0tLeFVTMDVIV2pkemt0RG5nbzN0ZkRSRFh3bEwyZmorbXhwbi9CbnlxcGdYZTE3NkNTWDVhbS9uT0FyVWQ0aXpEQlRVaURuU2Q1d0N4R1dLU1htVjU3T2x6dWROeTkvSWc3L3Q4TXUvTGh2ZWdoSE42TisxblB4bUcxUmpHOFRIVUF3a0lHTmZNNW1XT0tsWCtON1BLall3bHVkTGdmeGxMTThWYnp4STBDWko4aWU2TFY4ZEZMT244OE8vVDkxN25JN2d6U3ZVNzVkQUo4Z0RkOXVoMTlDWG1BR2d5L2RoTGlKTktXS1F1ZllLek91UmVvZmxuU1R6aXh1eGxHdGlXRmQ2NCt1NGxkNk9VV2o2d1FyY3BncFBCVDVJUi9qVTJja1RBOHBQYXBiYWVHZVZsVUxjV3dOMWpDaDVucHFONFdJR3dabWYzRGZzOFVCNHFPMnhsV3FlWUl1OGEyUUoyZDNXdzdKYldaOWNta2xMUUxiQVdETEkrcjVIZjlSQk5IT2h0NFplSkkrVUl1MDl4UnR2NmJJT0I5L2pIUkdOVHlhcDdXZVBBOE1zMVRTem9Dck8wUW43ZzBxQ3IwRWI4M1lrR3lxK0pJTkg4TjZnZzgyamZqUDNJdnpTUHltbHpXSEl1RVVMMU13d3VsRmowakw3NHZOK1hxbkY2OWllUHBFS2dUQVE1MUh6RVRoNHZvUWxMc3hvYXhpSXhRMGFQWlJVbDJGNFNMNFd3eFNhc296RjhpSENaNkx5TjBZNklNU01IckYvaEk2QXdRdG50NnJwTDJJLzRHeXJNVkRvMzRiNnZ0OHdjc0l1eUUvVFFTbnVOd0U1UWNjbEtYNmR3SjlFNldIanFGUWVwZzl5U1NhanZEUTh1WHRFb0haUktRMGMwNWNuL3Z4bzRjUFZ4eDJaOUExeW9GM0lRZDRFeUtpTXFmSUtzZGdPbmlTVjlvOEwzOGF6MG5qMFVRZ05aS2lScTZtT2tEeXVxMW1OQ3EzQ2x5K1BYdnU4WGhJUksxb3VMR2IyZGRwTEUxanVUL3Azb1VMRWNDZklUb01oTHBxRVhOY0x6VytCK1V2aDIwUUhhV0g5ajIxM3RiTzFBQXA1WU9vcFpUVUFvaVNvU2hFSkIzVnNWTHRHaUd3OVludmcxQ3N5NnZoRytuWllma3FRdEVTYWN1ZmUvdk56aVNnd3hwSjRjQWZ5VzhrcGJBVkltRGdqY1kvSkx0dXorbysxbW5iTkRxeStTY2xzWlNOUEZmSEJKRkl2eGtvTFVaMDlUckRqZExzb0lTTCtxbjUzL1J1bnNTOXM4aHo4UG91SWozcExlRXFlRC8wcWZsSWt0Ny9VcW53ZEd5dGhFVmhzeGVyVFZHWkNyWjBDa3VGdERHYTBkUDZMWFlGYTdNbEVZVUlMdUdLUWYycmN0b0laMHN0RkpHUkluQWZVUjJOMW9PeDBZaVZ0NXdibldObHJHU1o5QmJEUHZOUm5iUFFqTExyMDYwcStMOHg2VDlUZSsyUFZWc1JMZHc0cjM0TkVHYVVGRGFCRFpFL3BNUnBBMXQyODNQZ2JOdWJTMC84SjdpTEl5VmRYVVhMYm05NDNVMWtwUFpOREhLN0tPc0RGd0xTVkx6S01FSUE0N3ZlejNDdFZneldNaVNhN2RlTUY0aXgwaHpjaklGbVI0UHRLR2IxeGlhN0lCSTFFMFliQVVkU2NMTmtDQWx0NGxueVptQ2NzbG1BdkdqMVJ3ejBQMjdtekFnb25lR2Jvb2h1RkRqRlVHNFZGTFNxYk1zeFE1bzFmRGhmdnl4WHloYWlwZUFsU1paT1JicElZWE4xczZ0ZXFKY2kwZnU3aTlZUGJMOG1zcFEyaXZ0eUNyYTkrelZENWVPc1VCaEc2S0FyTHpzdjk1bEtPYWhadks2bkVuQ1NhTFNxSG12WkJNUzgvc3crWWRMQVVWbkZZRVFBSmxXR3JmcDF3QlQwYytINlZmZnlUNW5sQndkUDZSQ0ptaVVMdUNLNVFnakhXdWorZWx2V1R3QUcra2VqM3RmVnRuSWlOMUViQW1lTGpJOUppK203Ui9hYWhsenJndVJkNGJ6bHdXTklqZHFTb3NUaTR3Wk80ViswZGNOUVVyM0sxMG5IOXdqMURBci9qVnpYKzVjUGF5OG56cDFMOVl2bjZMb1Jpd2hFVUY1eXBsYi9HR3QyR3prYWJ2VmhBZlVuZHk0bUc3VXlkaExQU252MnVlK2xvcUZHeW12dE5vYTVCd1ZVdk9hMUVkaTJZZCtGYkRmQWhqOVJhSUNITjcrTEplR0Q0YXJ1dUJiT3lYM3pSSjg3RkJsOU9HeXB3VDlaRzBYQkpjbTJBYjY4ekJacTJnR0xkenM4QjNDY3BVcW41QllyTlZHMU5nOE5lL2ovVEs0bDhabW51MWdWRjljbHBCdnpzN3hNbXBYY3hIcmJwSHNEcTFzRGl2VFQrZXJpNndmR2RLMkpoQkpwL1JaRmxSWGlBNVRGUGtpSDI4SERmK0kreHNwbkJUa3NiSDhLdWhHV1ByYmlOSXhUbkFtQ05XWXNjdG8rM1dsNzQxdzY1TWZrTnByOHpoZGY3NjVrUHZSMWx6UUxJVXZCQkxsWmM2TXRXQkphTE1ESDh1NWxZYm9RWkVxTzZPVG5oT3NVeUJydU1MY2pkR2lxL3VLQ3ZWSGlRbVNuQ0l0MFZKSzZueVFHRmhBTkduamc5dWdUZ3NhVXVGSUw3V0RVbk1qaC9IcHc0eklDQWdJQ0FnSUNBOHYyL1JVZnQrbTIxOVFWKzM3Yzc5bjNOWDdTci9oOW54ZmI5ampnZWkzMjlnTjl2Y1E1ZnQrbEkvYjlXRG42Zy8yMzdaUDh6N1VyOVNoMzJmWlQzMi9ZZDRIcGY4TzBDKzN1cGNOOVgwQUY5WDBmR3ZuRDMxZlh6ZnMrd3EvVVRmN2ZyUjc2dnEwMTlYVjNmVjJRQTlBQldvZGVMRFc2OHdURUlYMnhZVjc2dWtsbUdnUWJOK3JTOGlKL0xwWmhoZVBaTFk2dVZHWG12VlZiRmg3dzdPNVU2bi9FWVZuMlRQRUxTQ1hPSkxuN2l4dllxdGtZRUZMT3NkNnVab1Mwd09mbDNnZFJCTFc1MUo5SFUwaGVMb3AzZ3hudGtmRXB0bmdpVnVneWkrMUkrdXVRTyt4aUV3NDloZjdOekxaOEJaUDc4NWxMY090d2FvWk5IOC92eDhjL09qampOZXBUU1lqT3o3TTIvbFVoTlJhQlVsUFp5VWJFVllVd0FiTFVMMGt6N2s2bVJVVzkxQWVvMjkybU02SVNHM0N1S3V0ckhhSDVCZXAxWExSZks2NURjVVdPRVVYVUtIdVVSOUlobDRTRUdzVFFDdlRjV0dETzNpajRaeHo1NW1mMGJNTW5lWWxNaFRqeGtPQWpydzNVdVk1M1Q3bzNXcWFQNnpWd20vWGdXaVZQTzJDc2ljWm1TSXc0eWRoVTFmeTNsdDVTRWVwWDhMVHBLSzhNWEs2ZzU3VUxQeXlyUHFCcTRQUUpYa21LdHJZRVE4WXF5bCtqUXBTN2IyV0l3S2J0ci8weG94SHBvZ1k3RnpKOGVGWjhwYm1IaUdBVENZMGliSkxwaC8zdStuN3FyVkdwU3FOclFSdmlUbWEySVpMUDg2YlZUeTdHazBsRzlGQWJKc29xeHJ2OGpLZmNjSXpBTlAwMGx3TTZ4aFJveWJ6R200b1I1T3JIbDVtdlc5MjVvdEJZbnFLVVhhWHZmYXdvSmRYeXo4NS9TT3JFb09WNlhpMm5ETXYwSk45eTFkUUtaczRYdm5sbHV5TVFHbnVTN0d4T2g0djhFRUZlVnltWmM4c3J5dXdISVc1SHhnaFU4bStxSENHN3pmdWRwd21ZVjlZMFErZDlham85T1JNQklybzl4blV3eXAzbHlrQnZwZ3pNWGpBVkhORGlCYS9wTGJKUlM0dCtpUDlGVWI1a241QWFNTG01dnAxODFDR0J0ZjR0VTN0RWtpSWl4WmlDT0l6WTBacW9nSzRDYXhuVGYvZmNoOC9UYmtYTHNUNnVhMnQ4MUR4L1ZSUzdYcHJrWUZMRGpzKzRHdUwvSGE5SzZ0cG1qcDExemhDSGttTFRSempIZStMMnlQM1U1MWhDelladi9mSUNHT0RFdWlOTk9jY2lXRTlnZjBIV0VZTDR1UUhuM2E4V2FzVUF4MDVFS2hmN1BnTjA4Q2FCLzNCZHlsZzF0VW1LNWpIWnRDTnlPeTBiSFRNT1NTaGJnSWJKTUFJL2s2aXRTUmxKeUJZMUhsQ1VnUzQ3QmlyZHd6MlpnQnRYaEY2NzlIcUc1V21MNnZtMEVpd3ZWNkwzbXVVdi9Xdm9WMTljRnQwb3RObDhTSU5KbjJBTmRFWVdMRVlzUzdQajdXc1BqdEhqR2RUbmNEWUt2T0dWS0xuV1NoUTNOV3hJVFJlNEVqYXNFMytPS3BpZHQ5eUdVYzF6Qzc0LzFYdjhBNHlMMFJ6cmRBSmFOSFZFbk9BOWZ1dEdGOHdTcGpjMHdpVm1GdHFxd3Y3SG81Y2VGRjRJTllrUmpSTEpobDNJc3UrMDlCSkhja3dEbmlsaHZNdFZ0bWJxTklsamhHazhUZGwrNVZNSEFIaVcyZTBPNnN6eE1tSm5wMGROOW4weWxRVG52Q3VXbit6RFAybmdwUTJxMk55elJxZHF3UFFET09VdDUxZDdnUGc3dGQ1bHNJSEIvK2puVnppbC84Z0hFcnRTclhJTVZBK1UzTHk3V01nN0YzajNLa2FCWCthREdNY2x2V0h5cUpNNlVVK0t4Wi9KTWpNT2k4T3JXdTBMVENiMTJ3S3hLajZPZm1RU21TZFFwRmp1YzdPY3AyblBkUDFwaWVEdTRUMWRKZTh2Z0F5M1BFSHlHY0N3TXg0UUtBWnF6SkovZDFHVXo5TnVtV0RBN2o5UHBWSit6Wk5VbXJxWTF2K05VdHRrdFlFZ1RUZGJadnRzRHB0OG4zdmtnMDBMRkpMa0Z2Ukx0c3RoR2RJMGw3SXFaRFZNM1dZa1VPVG05cDFabVhtQTdrY0ZmanJtb1dVcm9QL01NejErbmw3K1JjWWRnMC9XNWdQY2w0bzN1cGx5aGNhQ1ZrTFZBTnVzazZWM3hLek1WY1dOclI1WHBjODZBMTBodU5zZldmdzBLRlZxQUZwalFzVUI3RFlySE9jY1RWWldKRmZhbENRTVloQzBaU0tEZ2ZFVis5U0RGN0NlTTJtTE5xZ1NpdlZ3cEIzbmdjVGlnS1IrZ2paT05OejRRdEhOSCtMRlBhRU1TQzQ4c0lYSVRKV2p5SVVlMkNCRnFMZjcrQm9ROWo3Qjg1RkEvZHhvTlR4b1l1dWJEQ0pxckdNTmdLMnpmc2NzVUExT3MwVjUzd01HVCtOUnZ2NHBsQjQvc3FOd0FYcWdTQlBWZGNqZURudWw1a3hUYVhDOWJiVDMvVXE3RlBVVUJCdGh4SkdPcVFMaWFGUlBhaHZPc1NFcEtMVUhsSWxQT1ZQbWZxZExaUXhjNkl6VzlwdTVEWFRpQzhZQkVUTU1XR1JLK0J5cXkrdlU0QTJkU0VhaUVXd2RqREZ3ZnhUOURwZWxGaUw4M0hNNUFNRG1LRkQ1Y2VjWVFjTmIzdzdSNVczOWhETlNqU21JamJqUVBpVHdaQUZRNmIvRGhoNXc3bUl3MlkrNTVkbjRMU2JhZkZxZFQ2Mlp0RjBDNHVIdlRlcHpQUnRqNFVpSmNWcnNMam1ndzJRYk03NXNvSW9SNFpOcktlZkw4R0ZKQVcyb3pWeDM4K1JJMzdsVmdNNldjTEgvbkhqODQwVVgyU3VEUEZrVEh0N2p3cjJheFUvMDFWblpseFdvRGU4KzVEMEE4UndLc2RQNGY1NEUyM2taK0xGMWNrT2UyNTFJZWFVYTF5b2tvOGVWUlp4MG1rSUVZejJzNWVoQjQwSG9oSEE4emlDNGNVZmJwMkJYVEpCTkRLYVBpVmk2OXNHZkQxcktuQ1c5clR6cUFQVGJFekF3Yll6SjRmMU1rNm1MMDBJQnZoSmFCMUZJQXFpazBNMnFqY2RydGNHeUdLSnhtUkdSRzJNR0RLamZqTEZnWVA0ZVgwN0FtK21PNFVUMXo4MSt0aFJBd3ArMmM4QTFFaW1uOTdQWUVRa1dUL09VV3BwWnpNQ2JHL2MxRmZhMHZhczZYUzdiRDI3SWNRd2lMVldROVZHdFNxWmRUTVlFSDlINVBRZnEvRVJ6Qlo3YVhaOUpuN0pjMTBJOEtzdVg5RTRMUTFkaWpsNG83eXNMTWFMOUtqYVRnWnZWM1daNVFzTkZxUzZIb3c0NDlVMDRmZWZuVWxWREFUTmI3eGtLcFJZUC9SYnUyNzFsTWEyRzErNHhjUkh5WTMrRDZidGxSMThmVEZiOWJvd1djYS9hbWlmVEJlWEJiQ2NDL3pDUUpVLzZ5Ym9peGhGcTZBUWlhTEJxN1E2NEJ3KzFOczZDU0FJRWp0U3lRN1EyK2FnOE1CeDFJMVhuUENDamxTRWYvUExIOXFNYmlGVi9JWDRKY3RLK3dIMVhpcStUdDFnR3o0U01kUnRoMVpzRnBQdFF2UjlJT1F5bWJ3c0hJN3pramNtZDA2QWNrNldITzRmc3RjRW9vQUNQT0JEc2RKVlpLYzhGM3QzbUhRUlZ3RldLRnBmcjZuVmNQNDNsRzA2ZUh3QTlpSENnTFNSRGo2SmE0QWFzOXpScDF0Tm1VcmVQakFzcmpXRkRmcGEwOU14UzJYS1BqK1lZWFlOTkNXVm1RaDdCUk9FdldscU1ObHArTXVONEM2YkZZYklXR2FGMjRxWXJ2ZURnVEp2dGluaVJtQ0N6WFV4WFlwYXZJTzQxUXIrekJsdys4MjhWaTV4L3BsYmhWeEZ2a3ZVNmswS2RtN2h3WVJzRlZ0S3BlNFlXVTlKMUVicTZZdVhwQlRnNUdaV2taWk5TeWxiQy9PMG42SjEyR3V4Tkwyc3A4N24zdWZHVnVQVThBTkhlUWFhSzFjKzkyZ00xWTc4MW9oZjBCaThvS3RpNS9CWFBqbWlES3d1U0RxclVxVU5mUkRtRU1NblczY0YwN2FrbWVzNHQ0V1QvaGFSQ0tRWnFqV3BXM0R1Ly9PV2tBQ3pHUHhydkRpZlp5YjEzcUFHS0ZvVWNVT3hYWHlEcUNZN1JSN1pZZjZrRVAwdnlRZmxQdDhoYTJKa2N5Rzl1QnVOWkd2d3A3ckRpeTg3S0pKR0RGdjRldHFhbGlDV3lKeHVUN0sySG4vQUlucjdwb3hUU0JCY1c5SlE5dHp2WlRvZXg5bUs4dVhaOTU2TmZRNG5iZjNkRHZUNCtydUpaMjFKUjNmdmUyMWRSQUt0aEEweGhkMnRmdVYxY1Q4QWs4Z3hRUmFEZE5XVCsxaUw2WTcyaGYzU3dWd241UXhIK01ja0h0RkkvcWtYSGxIYzJrbm1KeEZ0bkt0Tms3NmF2a1hyckJzMEw3d28wdE9ON2dQVGRMZU9pSnJ2UGx2RWllV2thRk1VVzNsa21veW1RVC9saG1NeURnYndHYU0xaVJyZGxHM1E2dTRaVnM0ak93NXB3QmZSdXZZRnJlTkEvYm43cFU5Q3p4SE5YZkFzejU2MnBLUlNHekNiOGlVN3JZa2NOQUtUSXNHWnRveTlVRHJNWFhRZ2RRSEt6VG9nUUdYT1BYamovd2szSXhFK0lGdkFnYU5JcENqT3R0ZVJlOUhsVkJMcUhWT0R0cm13N2lWRlFhK2t4Tnl4dVE5T3dPTW1IU2VKc1d5OW05RFh4MmNvejB3MG9iMkp2WEtnTkd2UzRnd3pvQVNJbTBsMWtFQ0c0Y25GUU1LQkxBYmtwaXhWV21DQzBSYkEzYzg3ZTllWnZxTzVxOUlTYitXclF3TW42VEZmdkVlejl4aTdNazBIQ2QxS2dkT3pmVWZzd1krcDJlRnZaajZIZzVJVzE1SWN5Y3RLTzNkaW9VOUlQeG94ZUJuWXZ4cVNlUi9NZytNVGh6U09qeUJObmxaV0s2RmZHWFRMWEZCbjVUenltMXlVWmdkdjY3NEU5a09zWEc1a3BQWHc2a2RMVVMvTmNtcm1idHJoZWVzTmh5Y0h1M0FJYVVsUUtNOENHQm1ZVE8zci9lNG9iVXZTUUxFM09Ha0YySEFtbnB5QkZNbFp2WVFxbFA4ZVRyOVMrU0pSVHcxOGZHdVp5V0hSNmJkOWF4T1hraWkwYXNnREk3WDZWMWlZWmZaWVJjcW9wM2tHditxL0tSWW9ScXVKdjRkbkVPUkNqbTRtTWRGMlR2MHNUZkRIS2xoSldEbjFEaEhSWkw0dTlrMDdxSFpJaWxrOWZ3ZDhqcGdyT1MwRVhDcFdEVXFDR0NQV2o4MUxObXFkcTh4QTRCZEpIbkxoaElXV3ZueUZ4VFFNOVNSY0c4TlNVeFlWcnNBQmxUM1I4a1V2azBSYlpxSUFTYU1lakt4WEREUkZBMFhpZTBBWVRJak15bU9LYVMxNGxvaTZpdkNoVHBqNVVjYlRTdW85MFJnc3MxTCtGK1B1TVllVU1MLzFtS3ZoOEZJcGxlalkvRTRkaFlROEZtMDhMSXRIZzJxZmVKVU5SRVpaM0ZCTW53WmRKMmpDeWQ2b2U3V0pTNzh4cm9CK2RkUG5aNUcxd1I5VGhpWG5zRm9uK3pqTUdCTlJYTnEvb2grVTZnbTBxbG9TVXc5Z3pqa09NN3dHdTlJUithWEpOZHZxRks1WFFpQWwxTWpEckpBcWF6R2VYTnJNYmRtMWtZZUVaRVNMb3M3aGRTQ0NNZmdWM1cxYjcxbitCTjZkNlNMaTNnVEQwa2ZwOXdVbmZqTExUMG5Jd3E1ZTJlWVdMdGZoVEZDYklzb2ZoUURZczFSTkVwQzdReGw5NDhwazF3bjdTRGF6VEJuVjFnS3c5VGtvNnYzR1pwMEJ1TURtMmN2VEw0NFZRSUZXUUpmR0g2V0tsM1FrNDVWWW1tMkN0WWY1V0RXaGdzdC9kajA4VnRldnlad2JLVkZNOXltUnN4RXB5WXVoTk5wMm0yRTJ5TTJrT01ldGsydVlINTJRb0xIMEZ3bHFJM3A0T1ljUGk0NE5KZ0d4ZTV2L01zRGRkMGVOSHN1UURCQ2RHK2hsQ0FRSXVibWgzSUtRajJUV2J5SlNkdjF5cWJ0bnFiWGxHcmxUNnQ0bXUrZWxMRGNrMlAwUDg5TUg4VDhnQ0JteUVFN0xBc1FMaUtSTzE4T2NTR3ptQWhQU3ROODNHVGp1TnRseEVSNkk4MytTUlBDVFlsckZHTzBJaW9BRGtrS1h1UlFxcmluMENhR0dUdUpWbzNHSXM3RU5Uc082V0VPbjIxNDd2eThjUEZoZGZYSzNnaVY1NksxR3RTQVRwbWdQRU9ZaXkyL3QwT1JvNWVaYkl6TVJ6THJ6WEpHdDVoQ0NET0pyQjVROWhQZGtCU3pWc0VSOU1LbWZjODQybWtoL3djcXZRbmJtbDBvYVZ1NHJjTUQ0S04vaS80TXYyVHMvbmxMMkljSlF5UHpRNEs1NTNybXc2enhpMGVmenl0WTduSm4xSkp1UW82UW5WYmk4ZFpYcGEzL1g2RDNVR0dLK1lPWDR2YlQ5aS92NjlGbldHMHkvSXIrdUROMnM5QzJBMFh5SHF3R3ljdmZVRDRRM29UdkVuUmFzQWthUXhUYlNVL0FGZ1JtWkpsa1Iyd1FaOWtGNE9MVzNkRFBJNHJaOHBuTlJYTFFFVmZmVUVCSlFqb0hVZG5vTk1kbTV2Y09xYUZtNmpRR3RxRzVQcEsvWnpXQXVwVk56bzYxSmtiZFhrR3QrNyt0aFBHYVRmbkhmRjVsSnlWdm9xdW9vWHJZZlZvcWhSQi9WK0VOcEswTDU2WUplRWNOR0lQOHpybmJ6Si81bTRFaWZ0aytwNlRLMHoweEUyeU1wMyt4ditFM05RQlFQeFAzT3oreklrTHFYaWhsemwwZ1FmYXdRRVhISjg1TTcvYlVUZUpOYkVWZE9pYW50Q2ZpcEZ3U3FEWnNrQ3owa3VSUnlmK3BWQko1TEFnZmFSd0dGcjdPRDBQUzFReFJnRVl1VEVnaGtCci9HSUMxTzVZeTlVcnVMdGRlSEMycy9jSkFXaDBnSFFKWlUrVWVIVWl6TWxJNkxER3FRSkJ0ckNzR0t0YURUTFh4bkZweWk4RFpvbU1HQnJRY3pkS1pkMXJhT0dmRmFvczhONjF2a0pvUlJWQ0xDTmw2SXdlQWtCdDZQOFh3ZTZGRW1sVXppRWZNSmNaVUowNG41bWdJWC9Mb1FSTHNtNm5zd0duNzR1S00vUlE4R2Z5VmJERUFCZUJzV2xoZ1draUhodzkvYlNUU2lOcTEyYmM2VjBTRTl2L0I5UlJuVnRjd1ltdHdXOXh0MWJNcEVWOUJNMDc2ZFpkakRhNGYxOW1TdXdBRDBxeUVaTy92dXpQSURoV3lRRUswS2VhZXZhUnlnMVpwRFlSb0U3aVpBN2lja3JsbkJabWh3WHZvZXNLVDBid1NRWGZMdnhuNU9yL2V5SWNoQ3BIS2YyQWNZbHJjOG1QZ2FnOVM2ajQxaUlhQmtMS2lOeTVtSUJ5NzJYWkFmQTduOU1qc1lybTBSYnEwMHg2aEJabm4rQ1ZYbHZsNmNORHZwOTd1dTkyUzArRXZFcXBRc3RaV0Y4T1E5YnpBT3pXQnV0eDdHbWg2OTMyaUpDdlh5SXV6QjJPZUZlL0VXR0V1OHR4cTU0YTY0MmxwZ0VoUGtuSlZSNTFXOUFMRkpuWjBlQklqZEg1WjF1UXhqMEtUS3RJNi9nQlBNdytYdk1aMFlMTjFLTjYySTh5bG9oUDJZVzd0UGxPL3k1SVQ5TVQrcXlLb3hGdFNkejFjcjB5UWNielpyRWZDSy9Yc2JqUVNsb0tnWXJJK29DZlVWc3U0S0VzdnRzQTF1VDZIODI4REJPSW44R29MK2ZqNkNjY2pyVHE4RUR1UXNJUVdMQm5zR1FWUDFNTXpBbXBOK1FoamRRaC9xM3YvcWNqbndWaHhHOHp3LzhRVkpna3hHUFNROEFKdEFoQWJlMDlZZk5ycTliWnRsanA3dTFqM001aURWaXBrOXdHUk5FVVZxNEc5Z2hycWx3Y2RXd3VyVi8zUDJzZnVETTlRRmcvb0ZWVytodlRaMGNvaTZOMGxkVW0wRmhibjh6TUl3K0JsSExHcHEzWFZwd3hZTWQ5d1FBNGJYOUlpeEhzam5ZU2syd1VMOWVTbEtYaFdUaXFWM2wwWENBSjhTbEtWOWFoRmNmbTlUZE1mekp1RUdyeWc5NnpXbDk5OHdpV1E4NW1LZmZxeXE5SGFHYnVzcTZTVzdNWkJuVEFtYThWS1ZNMGliY1lycXBvSHBPb2dmWlA5THE0cFliTnZFdE5SS3VnKzJlS0lEY05LbjJDQ05wWG12bGszR3FZSmVQN21CZkxNZ2FjRzFtU1lCenh2bUJzSm92b0ZGb1Z1Y3J0V0ZnbFJGTllPUzRVM1BNMWJrVElweVJEa1hQcDJwNE4xOXNtUnhIOUJkZ3JBYnpIYU5tRktyZEptNHhuVFdPeGtRVnZDK0U0OHQrZzBFbkd2UWVQSnluYWFBWlk1S2F5dEFlcmJzMWRBTldnQm9PcmVkNVhRZWQrbEFzdW0rV01BZXgrK1EzSUlnd0NxUUxMK3V3cVF4bEFaR3VqYVN2eUI2ZFNldlNEeklRblhnRDBSVk5aZEdlTzhlM0RZVTBsamo2SzNZRTltK1EvVkwxeHUyTGRwWTQ0MFF5V281N3Z6REwyS2VkdlRPLzBPT29zWENHcVh6QnRDaUNhQVpZc0Z1cStMSDJuL3pnd0FIMjdXWmt2ZXFyWEVaRnhuZDA1dUI4V3JFdk1KTEJwbkdiVC96MTJSRlJnTG5sd3lXczhpaVNsNm1oTE9zQ1JKS25QU2JIVDhJTU84WmN1b1JvQXNRVGxCaWlzOFVQZFZ3Rm9JYUxZV09idC9sQkxaeW5SRWo3cEhvSllWNldTMktacVFKSnRFL3BsYTB4L3czUnhJQyt1YVRUVkl5YjhacnlvOVZMMEtiR3NvNzc2cVlINWVvMmpUWi9tQWdHVW1TUTJQMjFiZjNoQzZTVXk4VytpTlpwZ0VFajN1dFJKVUNKWXRPcXBjY25MVzhPWEdzWm04MWVOS2owMzdOTjVhNTlvYm1iUzN5RUFhS0VlRFhPbis1Vkxwek1adjJ1L214WEhoQ3hXZVRmY2ZtOVJDRlhrVWR6Wm92NXJ1OUtlMWFCR2pnNkVuZzd3ajI3NnBaQkZJOXAvZXpoZkNicXMxNm82RWRYekRrdGhhN29TdlRtZXhobldJbktjYmNKTUs5T2tZeWptS3dPM0l6enVkM0I0WHh3T0Z5eHlSbFhHS1hiVU9La0liZXdEYU8yWEliUnNVaU12OGJ3MEcwL3M2ZGRpai9rbmVzS0lHblJEdExRWit6a0lQZU1ubysxUnV0U2o2aXVSOHQwTEtwN0hMTERaNXU3U2Yrb09UVmFJVGJ3bjEwYU1ueWtJU3JPWnVWZkc4dEVCRTNHaHpoSGtsWXNMcDR1QUpTY1Bsc1oycTYrM2c2Y2FOTFBwK0dIVlpqUWNZU04zSkZlVkphTFlHTlNRTWNydmpidnZYOEZ6TDU5cDNWdXF1cHZwdC82V3JwWmNBWHcrNjNnbEY2Yi9NQjc3ZjFhMUJ4TFdCb1lYRXhHckZOdU1SdWFxRU9QbGhYcTJWTWRzWU41Tk9tS0kvTEVYYmxLM2FIazU1L1poN1M0Z2ZWYkxFWDBnckpzMkE4aEhaZVFhTWFlY0JibGFKRENiT0lUVll3cXppRkNuNTlXeDQzU2g2ZmtGcDJLMC8xMG4rSHI0SUNiMk82ejVoRTgzV3ZhaEl6RWdVNnB1OFF0c2Nwc0FsMzYzTG0zemIwOUdJaFhHd1lySnpnUUtrWWVJT0FlbHpCdFU2bUtPMHVRTEg3TENxNFEwOCtZNWVsdzBadWljbUUxTTVLQ3g2dzBDQVRwR1ZFZVg4dE8vRHVvOFJBVTZOY1F2M1dacUhNa1gwWTJVOHZvL2JJdjVqYmJDK2QwbXh3RnlmTlZIMWdSdTl5Y3hLZjgxNXBEcUd1WWs0RmQyTTd2RmtDNU5XN09ydHM1UUhsMmdab1hqYUFOOUlJMTBESW5vUDdqcE03T2tjNElGditMeEVwNVZRZDMrTXhGWXRSekI0eitVWWhTMzdia3lJVXUxVjh4Zlp3SWxFSTFCT3dTTzZiWHhZRjlYUlpnbFhTV0dUUTNvelFtNmRaaWZlUWJjRnd0MlhER3VXbUQ5RlRvbmttQ1NIeXBaOFRaNlVIK1JHNm5FQ0VaNVRBU2ZhUUNCblBhZmcwWk40bzFNdllROUpva2UySDloWnR3TXRhNS9Zb21EQUxZZ3hEOFhFeDRZSlIwRy91bWN3VFUydXVvZ3JxdkkrbDB3K1JPTk9UZWlzUnZNZTFnWVRWKzRtSkNhdzdsN2NtV3VVRFAxaFpEcmdEdmM2SW5vaFdjVUQrWmE3c01WVVJLVVUyclBEckwyazVSbHIrb09PMndKN092TUt3cVNsRkVOYmxaeEdiMGJEWDFVRTBEV1RzeWdGTGtyd0hOQjQ4MHpXanJYVVQvcWMwTnd4M0tIOWlldldwODFXcFNPWE5SdjJTODN4aC9XMFVOd3hzcHl1aEZuZXZEZ3pXb3UyelpmRkNCOGd4cDlwdmE2RkVtd2VReENwcXVYV0tmNXVIbXBhUzRpa0lKQjA1bERVUmQ0c0RNMTBDQ2NrUVRKM1gxNzVLeFE1RXFDQVBvZFYrOHpaaXVUQ1YvNk5mR3F5ZWZqZkhqeW1RWGszUkdvelZ5L3REeXJpa2V5cFhoS0tDOG94eVBGRDVLUnB3Sm1oTTNVUktVY1Q2R3YwK0lpKzZKY2tOblJMRWo5QlQ5c3J4VnpFSDZyNTcxQkd6UENTWC80M3JYQ3Fldk5JM2NiL2UySkFDRW9SVDFibVdsWlJyL2hXdHNmZXZzVFdFTG5nNnVKTzRETk1OcitlRzJIR1lOM1g1dURwSEdjb3FUcXlZbWtMZ3dObTRtakkzKzFYZW94dHdJak9XSGdxZ1ArNnRXeEJ2N1krREVxcWRTalJqVXBrT0FjcG8zNTRBVFZmRjlFVjBDRUUrbUQ5dS9Bb0RtcGQwMzhOVm9xQ25sMEpjVmJjMHRrZ0h5OE0yZzFpNDdFMTBpQ1VhWnE3S2QzMU5xcXNqaUFwc25weEkzUGU5cEtUNVJGMHMxV1pkb0hsWlFTcHZ2NEJQdnAvdXo2bnVLNms3TTNTU2gyMUJZNUkvOGdMRCtDRFFCMFhUYlBTMmFnNElnTE55eXpac0NXY1VjbC9aMmFyRGV0N0ZFTXlIQWprd25WSFdySmVLd0hTQU5kQjY0L2x4VGJQS24vQWg1Zm9ZaFgvRkhZemo4L1VJV0pBR3FBOTRReWsxbVVuNmdZelN0UkJKd0RKS2E0dnhTZVZ0U2grUkdPdVJseGUrZ256MlpTRGU4VWc1TmdOckI4c3lSS0dCQndYclJJNERxLzg5T1ROTkhGVkVqYzdZZ2U1VlFnTmJ6ZnJ6TU14dFRUcVV4dHlsaFNyTjdWbXg2TVk0YmVVcEtzVlQwRitIZzgwelkvRUpjalVrWldFSm4zOGczd21lcVVlZm9UT05Da1FPYklsUGlPTjhFVlJUWHJ5VGdPZzg5NTI5N0w4WlQyaHJzZjI5N0R1TXBweng1T2YzSzVOR2FyUlNYa0FNR3NnOWY1NlhYN0NlcjFpbzUzY0g3Rll0OHpsSlJmUEQ0M3FQNzZpNmcwRnJUWGlqUjZRMnY0ZjZoV0RoYXFsRGZjQW9hZzdkeEIvTzVtYm1xUWlCVmRXUFdaUSt5SHZ0aVVzYkplZm96cUJLN1BsNTBvZWRxUndlS2dqYVBRUmh5ZmRJakpRZlVPcENuL1BGT21TVlF5dE5YYXFGS0FFUlVnZ2FjQm5GSnR4YUxiUzFIdlY4RG04U3lzRGNwVnIwaTF3UklLeVFKUTlpVHZHYThRR0R6eGQ5N3JlZk93UDc1bjYrdXNuMDNEYXpDaHBzU0VHKzZRQjRRUGpqZ3pHL2NQeFB3ZUgwMVA1bDZ0OFkxc0xBSGhVTTM5dzhMWm53ZTNCQWlmdmFXSXdIVTlEY0tSRkN5SmdzeEFTTTVvMWY5M3FzN1Q1RUVDMkV2ckdZdk9jbWEvQjF4czZFSEQxM3VlbTgyRW9UT0h4L0hrcW1LdjlCSUxyZXByRHVoUlY1VjIwWGJiK1dRaStsMllVdk1kb2RTRzV6bUNoRGNtTWtGY29mNXZlUVZJZXVyaTE1OTYzTkxkS0M0Q29hMUNWWUo5MmVjNkVXUTd5VlVNblhKaWwvS0o0a3NySU1WZWh4ci9mM2lKMC9DMkpvTXQ2aWJRanQvVVRvWWJSTXNtd0QwMDk1VnB4eWV5QmVDM1NabkhGelZZbWZWaGFkanVvZ1FEOUJ2cUZTY21tVlJIYkI4QytTK3UzTngzZmVUMXhPWDF3NXZuVVJHT1kvVEo4QXd4RHVTS1hXZVJkdThxRzNjRWVTWDhOU1RTTU96NGhNSFlCcWxRb3c3N2hTL0gwdHgwNGF0VmdmZkFKK05QeHBVa25jZWh3SnAxcTBLaytXQmwxak53eG8vTDBHOThqRVgyTlNnZE9WWEZlNWVxNDNjbUx0bmZRY3gzV2JKRTJZNjdra2xxWG9PZEhlKzBoU3BWRmFIdC8zOXRxUXRLZDVVN2Ztb0ZKNEhEQzNZUEJNbGhhdnliVnVwMURQUW1pdnV6b3RUSis3VklGOWNIK2ZMN2tTVDRTVXdtWnZ2emxkL1o4a3RDdmFQOE9odDNuWkt2UGgwZXYwbkxwd1RsZkRaOFRONEcrMjdrNlNtRk9Fb0lCVE45TUJDSU1hQm1EV3VqM1NIMmtLa0R0ZGVZeS9mb0NOWXZSNmNaL0hGWHU2cFZZVTJYbnpVVC9xbmlMdFVOTW5hWXM1eXp1cVYzbHFkME9mWXNlZC9jYklKOTlNKytRWi9zZjV2eHZ6TXVaQVp3cjJxT0FwWnlnR1lmaXBJdWg2OWFRSlFFTUJnVjFHdFpFUFd4c3pzaU1ESXVlaVNCUXhjTkJrUGlaRkovbzhVSStuem9uY0F2MzJpNEIxT09xaGFmMXhoZlh2Szg4R1c4aUt6VkZlRzIrdzNIb2FwNzcwMHRCM3E3TkdZSll5VGVjQjg1bnlvRzRkblFDSThNZThEZ1hIMVhZTDN2cnUxQXZsSHlwamtYV1ZJZXFkMzRlTHVRUFZIa3lUQjRobldrNy8zalhXbjQ1ZlloRGVuREdzeXc4VmhhSVlDZGlTRWdJVU4rclI0cWtzbjVZMTNFZkFzbExvaGFLZWFHbFA4Y0YrWUU5NjZDVGZ1QmFDenJCZ0NtWnNuWEdlYmpNVVdwSmd3UCtVV2w0OXFhNFNJN3dvQTlyNVhvZWFaTC9GMTU3MHNkaUxNUFdGQnVWSEJONUt0Zzd2emRwZDFPS3ZrQmY2N0tIQlphVFpmcTRZbXZ3SU9KeExaM2FzcktaeUxiSU1OZnA4TkIwOEdHQ2xmaE9yOXF6RnMzQ3dLZ2QxSGY0cmVEVExZRzFvUkVpc29tQ3lnV2k4TzgwY0NvSEI0VUdFNjcyTnpscjFlbGxUd3kxT3N5WFRGR0xwZjN0OTd1bzBDMmgrbkNudWoxaUJJVXhtVnZYNFlsNVFWUXlqR2ErdmZwbk9wTzJsd0ZuaHhhUVh5SUVqaDNvUE8zOWQ1bGJEMmQweHRlWWV6VzI5R29QcGtFMmJnemR3MzRzTHhNTXdUUjEvVitvb3Q0djhhNVN2OCtPRXZ2K2hxUWQ1OXBvYzB2L3puR09xN053MDc2bGwxZDNKT0hadGVmdlVBQlZmVDJidzMwenhBUzltYURGSHNuZVlxd2lKeXJoZ0NwK0NoK0g3SDVWcGcrUDB4Q1FkVExEczdlakU1OHFFN1d6VldoT3UxZFlNNjdxbi90b29haWtLWTBSTW9HY0hhemhibUNldThBbEJUQm93QkxZWHVITDFna24ybzBCeXdKNnl0dFNsamRDcFNJbS9ZZWhaL01ZVmdTekFOdzI0MWFoYzB0QXpYU01BUHlhRkFSMUxLamRuc28zdE9QcFh1SVl0UmR1WGFOejh3VjhRS2N6ampQTlhYRHcxYnlpT1pYc3haS2pPZWdTQkkvLzN0cVZKalZsWDF1b2FhYzZzNzN2NU5PanVPblBGK2dZRk1VS1FWOXBaWnpnT2F1b3VrQVd0ckRMaXBsWUhINytEK3N4K2V1ejNpRFR3RGFMZUFzZ0R3SkdMZ1ZMNENETFo1eENZYTdySVUySEF2bytTRHMvaEVVUTQ4YXBuQll6bHVjMkI3SzZETHVWNEpnYTN6dDRmMFFsTjBLaE4vQ3FHNEhlOXYyY2duVmwyc3NwWHpFMTF6aVBsOFpqbmNvWXlzMzRiQ016SFB2Y0FzTm5jSEtuVFlOSlBPaW9TcHZLNkhxWFV4NGVQVUsxQmErZ3QzRnZoK00wV0lHaEhZdWt1SHo3cFFsaDV1RTJidUE4SkcyM2Q5eGZENzRxS3FVS01sOUZCK0c4SjJRT1lxLzJYR0NPd01RbFd2NXBaa1RDTThwWUs0TTFxZldwYXhRTjZYQzlVdTFEUDRMcU0zaDNnRzJob2VZYThlUitQM3RiMERTd1lKcXF6ZzBZM2VqUi9qU3N0azVaWFhyMFdPTWNySE8rRElBUllMUE45ckU3Q0F3Q1FtaFlCYlJwZzBwaFU5bnpuYU81Qld5enZpUmdkRnZWazJNWWxrQVhwb2EzbFRoL1lZVkRSU1J0b2hMWnVBbUpCMmlMOEsvZkhEMCtpeHFNbTBpNVhRdGNLbEorUFNkZDBkQUtVcFhlM3o4L3pYcDZrZnJQWkpHS3grMnZ0b2x5MFljb05mQ3k2ZEJteFVTcElxL3BTS2FVQklQVjB0bFE1RkVJb3ZMMUhER1NKc21NNTRodGtudDdpZnBiamJjUTV3U1ZPaU4raS9FaTlLbmRvSER4NGxYcjZDbUc2Skord1NhTDM2SlFBc3V4Wnk4SDlXZUdVb2U4Y245UVp5YWMxdlRMcktEMGtaZG5pdFRxd1dzdmU0MXFaMnpwT0xFd3FNMEFJU2NXQzhZeWdyT3dSYkJlOGFGQ0ZhS21RZmRvcWJuVHQ0cVpoeTFOczRxUEtLV1FrVDNjRHA2bDZQWmg4SlRmV2p4ZkVTYnFQMW5zMlAyQmlOT1B4OUd2VVRvSXM0ek9VYUVRR2xDa2o0TWZiVmxESk4xMXQvTjZXeUttMzFTVjhJUkV3TlRtZVBjQXphUTBJUml2Y21ycUxiR29XajdTbDNoWnJ1NytmYXBwaWpyV3Y2aGlXNFlaVTB6ZFBoTlpvbVplNSt5bmEvMGVQdXNYdkIrLzA1bXhSaEJWR0tMZWVzbk9hVGxMd1Z5ZmlHYnBlU2dzQnAwRHNWMmw4TTVxS2tsUHo4RzNDNGRRK0UxV201WkNVUVA1RldDblNNQmFaeUQzRUwzc0p6eGx1L3BGVVpYSHVPck00azhzMUhCeHo5eXVKR1I0M2J5ODZTNzBoNnpKMi9oNUVjTVAwcjgrM2srdWJnU0NUcDM4cmpCSGozdHA2K056UjVERFVlMjVOVEFiQXRzaGZBeGpHRDlFTHkyV1VJMFEvVTl4S2VxbGFXZXd1L29XNnhhR3JlVzNDUGJkYjc3RUhKTzBrcnJKeGJlRzVBTnpGa2NWVGR4bzhOZTVNMjI3UGF4c2xBRlJ4eDZVVk1CdHhvbURmVldmNUpqWTlwRnVTd3FPVlBWdlNwbWVNcGYwYVFGNlRDSWdUanBUVlNLZVU2TWxKU1NlTkNhYTNYeWVMZE1rMzZjVTNvS3dERG9GWVdWMzNlTlQzMGNMa3FTQmZCZFArT1JZWXdBKzVvcnlvbWZsbzNjY0FqdXltRXU3a1JPMk5LWThZWnlHZXR5YTFPSkJlVUhIeTRHaFZ4Q2d1eTczZFp3UDVkR29lTzB6UUZCT0QwNGlFR1JmNisxdFo2RDJWUVc0cXl0M3ViRllNeGEyNytnNVhvWi9wa2hUNU13NWR4aTVpMmxRNlhydFRmRmd1blVvVitnMmovNXdDa1JyY3VzSkNXbGcxUHhMMDVsTGNGNU93OEhEL0JZU2xoNlVESkpPSjk0M0NOUlR4MjBWaHdiQVlydkJhbEg4UW12WmphOUh2a1M3cUsrU1JWK3NiNVF1L05TdTB3RldjM2pTblFTK29iQXlJTkc4SGd2TnhuWTFjSCtSekl4ZlFrbXhzMkVaN0cwNVBOc2dsVUJuWXBUMkZYL1U4bzdvRE1vSUVzdVBIenBVRituRmt0aGdmNUw4bVo5QUlHT3o1MkRNbmpmK2lQQ3FZY1RYQ0xOWTM2VmtYRHFCMWR2aW51cnFTZEJzbjlobWJxdzNIa0hQMU54MGhqTnpyMWYwSmYzcUVDRUgzMWxDdGlsNjJRSHl6WTFMTnJjTW5GbFZ0RTZsa3NnblhUL1pYMzAxZlBFVHRrbzBOd1YxU3hpV2hpL0liRVNSRTRIWWJDbTh6VStuNzlqb2loa3BGekFwTktrYjdtaWMvb3htM1MyZ05GYm1XclhsU1FoL0o3NTFGbEUwWDk5SW1mSUlsSjFrUjZPa202dkZOaDllRkJZL2g2WmJZYkovZWlXdGJmbTdJU295MzdCTWhua0tRL3B3WmNNaHdxTGIyTTV5WWtKZnNvaCtnU0pmMlNkUjhGMGpxSTVyK0ZaQWlCVG5CdHZTMFFhY1dkK0o4cmZzYVUrdlNESUNIbS9xVk5RSi9BRWVHNnUxYnQ3WEYzemoyRk5hQ1p3dUR2MDVLYTJkUTJ1b1FCUndXb2dmZ0hFdkQyU0I1aWdYL1NlQmV4cW5YUnR0SGNudVpYNElHYTFrS0EzZGpDM0NTcVJDYjExbkpLWjRRRERSQzd5OGRWeUViU2FRTmVQWUlYV01JR2Z5STZxUFIxOWF2dXlRSno4ZGdhd2h6WFpwdU1VVU1RdDlQNTZkWU5RaVhQMG9TZHQyN2ZTWThpcHBJTzB0VURGWmtLK3FGdk0zcWgyTGpnb3R6T0daYUp3Tkc4V2E2a1luZkUzL3NaTis5YlNRMUVwRzc5cVVUQ24rc2J6RXNsUngrYWFaWkhiZ0x5NU5RUDl0UTJtNHFaZnZmZ05xaDJ4Ykc1Z01QdlVZQUtCaWZ5SXE2OGhHeVVYU3RQblA5Slo5UWNFTlJTU3l1cFJrOW5RZnBKdWdZbXB2bTU1MVFVbTRXWjh1bDRKRWtkRjVDU3g4RGY1eU43RjBLSkl0alJxRXdOd0F6enhrRlE3cEVHY3VXTjB2Vzc4MUdTbERYK2E2NSt4YnJGdTU5Nm9jOUxzRCtDYWJFVEI1SkNNVjdLcklBZHprcGFOYU96QzJhODU3WFRwZys4OEhWYjZpNStxb1dTR2dOZFM5RlVRcjRRTysyU2JHTlpERDcxVHpvR0o1NlZ4emN2UGJOUWRBSDRmUVBHbkUzMUE5QWxjNWk3TStwTHVJUDNyVkJ1Z2lMRnNMNHlKMkJzQVZ3ZHE4aGVEMVl5T1NmYVB2alpCRThOb0luc2JPa0Q3WUJDWXhhZEJkS0NicFpSaEZYK3dpUjhQNlhHSTZQdjdTWWpxMSt3U1p5SlQ0QzdDNzN1eHl1WEVrNW54VllUM0IrdUxQQmFoOFpFS1h1NVFvdVc2bGd0a2NhTC9Ockh2c0c3T3JaYWZYTEdSeE9YWE9jRDYwTkFQczdKeUc1R0VTRXFJYUU4YjduNjJmU0lxWEVEVnJTUVVRUTJqejZkb2xsbDMzZlhvaHRlNDBrTktIaFF3VnZnWkQwUGU5YVJmV2VzOENnWmVLbFZPbndBMWh3WFRxZllRbGR3Qmd6UFV0S3J6RmhIMzAyeUFQQkdVeVdWdndzWVNYU2l6RHZEVzZybjBJdGIydHVOZnl4WWMvZXE2THdEbVVYWkY0UkJhRU92YWVUYmpuNUh6bFhqTUcwNnIzckNEUkRFbzA4aWwxNVpuS2g4TXFBVVVjUWZQL1lQOUpBNTQ3Y3BaeS82UjNsRC9NOG96UjdMdnRYelZjdm1rbHhHNXVteWYwS1JibzlOc0VrdmNwaHE5U1FMcFBaam5oUFRrbGlZQUdjcmk1cDQya2M3b0lrbGc2YVNoQXQ2bUNSeG5XNm5aS1hIV2F0WWFQdklnYmFDUHhGV0RvcnlGZWNvbndQRFVkRFkxbXdKRGl0MUNHeEJnL3lIa25maXQrYWlCMjVpZlA1UXdpSkpVelVJL2hLNEJYSnRRN3FSUVdhRVh2WmFhREVXQU1hQ2xIS1p0Zm55SkFuaWk0NkR4UHlqZFhHZmg0WHVQblRVMGw0QWF2dDk1Tm1OZmVVeXZseXNiVm9hY2VFNnlSL1RZWDUycStDczFqTDlKaDNiNXhwMkt3OHppVUZQVlpOVXkwMEZtalY1ZFpudkU5RVkwL0UrbGhUMGp4Y3FPb3BLL2g5bUxhTWFGOGsxbWM2dkE0dnQwS0YxRUNVcE1jdTZyZGdrMi9SdFl1VjJvblZuWlg1TG1Ha3o1ZzRYeUR2dm05UW9iMFRhMFNzdWo3bERrWEFSdmg5NzN5eFFRTEJ6eVVZKzBML3RON3NucWt6MXF0TUZROThpRlJzUlc0QStyNndidTZjSFJlUWNlVTZxZTRySFRQbG5HaEg1blBkWWpraUFERVl6a0xReWhCN2hxK2dCTHFYODV4SkxFWHA3Vlh3RmdhNmNNa0E2cEphRUduOG1FOWVIYmRNYWg4YXVWenJsUXVzdnZEcHpTVHpQV1BwYk1CamNuYXczTTY3OUNVcGd0RUo3REFOYkVPNFV3RkM3RmZrb3FiUzh2U1ZiWGJVaUJja056R2JLQnZJWlRxelVsdEp3cXo0RGhVZ0l6RTYyYzlGNTlsNU9mT2ZmWlNqdU1mdVRnQWxwRnYybEFiZ1cyLzFyendrSldkL2lZbUQrU0VuOGVnT1BITmtIYnlmNDRWQ20yZ29sTmo2blRXWVB1ZDZZTWlteml0akNrUW55L3FXNlNiTnVCaSs5cW96dlpCZW9ES2I3SlNEN2dTaHpaaWxwTlhvOVgrSm4xZHFqVlBpYXZvM0lnaGNTaTU1dXQ3YWlraDZncUFkSk5OUXdCRXV5WDFIaWZSczVralRzL2h6WGpLN1p3ZDZubmVBUjFtNFpJWlA3andNQ1NIQVpTU3QwamxQSGE1Vy9URS9BSVFMTWlZcUppSHpjam1NTlRoWkxqSDVlaTFxNzVBaTZPYVpWQ0N1OUlBanFRWW1xS2ExL2FxdjhvZzRmS2k3ZVBKZW1UWGRyc29WQStFa2o0VktjNGFiMko2dzZJMkZxWWo3VW0rek9BQWE3NW1zbnRwN3JzTnhLZDVuUmhMZ29ORFdFcm9lWi9SQWhiWjFieDZqUTRoU2tPTXU2dVd1b3pGYnRaanU3cTNTVmM3U0NTWE9YelkvRGpISUxTNm9ydFhqU0ZsZnVnSWJBM3RqWEJ0cklsb0czdUNDVGUva2hiUGRJbWl2MEdXN2VxdGF4Y2Q1cTR6dWdhS2l3TmJnaW4wVFViU0huR2tBNHJ3UG1PRWMySGxmMlNQaHY0SUJNaVZaOWg3bVNqclUyOHc0aFVtOUJiMktjbnVIUlNGdEthek1TVGN3RmtTVEZ3ekVJRG5iSWJBSWlCR3VNclQ1TmJDREhGUWRDVVI0WlFLQW11eHN3eHBXY1NJdW5seS9rTUJPL0lON3JrUnR4STJXaTlVWW1kdEcwczAvU2VXbHRpT1pOUnpROXFZa2gxQndIWnlVY1BHZmpwbUhyYTRyU2JvM0JSdlFKTjFIRFRXN0I1YjcxdnpMbDN3N2gyN3NTQ0lMdG56K3JZUTFUeDVHeEtLYVBBd291Wm5Pd3NDVTduQU5LL2gxR0FrUnR6Um9SVWFUSzhmcUxMWjhYa0lMaHBmVm1WMitJRXhPN0xDaDN5ZzdrMXhqQzNaTUJudjRVZTg5UDRoclYrNjVNY1BwVXFGc0FVdTY3K082SXdkcjlaYnVtRENOaFRvWFZMelBMRCtCb0tud1V0SkQ1b1ZOUjc0QXpxU0I2M0tCWkZHcHgzYVUwM0JpN1lYblpxdEhkMU1QUTNMd0w0RmptWkJhYTlNdWI3ZWZyeTZWMWdLK0tHTVkyNG9pd2JDbTNqdlV6SzJIV0FwUHo5ME5od05qRW04MTNRRW5UdkIrNm9kWHFrdkR5dGNDWEpMb1l6TnBTaHBveXl2clJ6RW01aThheU55SUJqVk52UnFvTWd2ZlAvVzB4eGFKbVJ0NEh3Ukl2ZkJTbHFtd2NzUWQxRkl6Njd2SVVrOTFvWXVCeWlXNUMxUW9KQ0VhNTNyc3J2NG5FR2txb3BHVGIydnBVQXZxY0VVZVRsdDVPQTJwalhxQ3F6c05aWXFEVnNQSmJEci80eEx5d0k4cHo5aG54M3gvTHBsRVZsUW10NzNHYVpianowWks3dHNaL2F0T1ZTWTFzUE53TkZzc1N4eXJnQjRJOUk4K1J0TVRNTWxCNUNHN2lZUndNa0ZVK210anM5UDZrdmgrckdCeCtUd3NoMHRUWlVVRjFUNjRoSXdqRC9BcU5aRzZkL09QbUcxc1V4K25JRXR0V09JSklXbTBZMVl4N0pqVWZqRkp0K01SZ2xNc3VIWk5kenN6ZzhaU3QvYkI2RzVyUFhHN3QvNHE3ZUFPaEYyNzhKNHpGc2ZMTGFKSkFicGprMFpNaHBySzZoVHhwR1Jqb3h2U1o4c05USW12bkwvQXNOSU8yaURkdmVYTXFUTi90UmIzb2c2VG1zb05HWFZuZUk5d09wUmErRUtwVFBWMkh4YUoyV2RNMCtaTjlRZDA0SUNoQ3N6ZEZFSitWN0hkLzRQalRWQ1pwVHhBSFhsUUtvSXU1bXFhYjRKRmZ2UHZWV1RjN2J3a2lEVHhRcVNTazhZQzN4Zmt6Q3lOMU4walpwVW5oV0FaY1pxSE9qOEFHd2Ezcmo0SG1hbk9xTmlvY29CTEMxRGZNRmxTWTBRVkZHZEx6Z0pCYmNra3hadXY1TE1VZkpJRlBXSURhZTBsdDJYZDBFMzZiMy93ZEh2NzdpZnJOekhVUjVuQ0pRM2k4UExTMWNaNTRVbDhqa2RoKzlLRkxFekZkRkRHZFl3QWFCelBnY0NCeFprSVRMTjAya0JUL280Tk9NMnhSMU5lREFNeFNOWDlVMHUyYVNwZVY1TTdIK01YZU9ocXZaYjhQQ0NVbUI4d2krZXZLQ2poOTNUUGRDSlQ1NXRjNVlTOVZmUXVqbGVaQTV6U3IwUzNUS3BkSEo5VEhybVBqdXZXUVZNUzY4OWlMNDVVSUJxTmdsb3FnT1pRN2MzUlN4VHVuV1FpNm52RHA4YUwwSktndjhBNkdqVUdKUDdoYWhKeGp2dHRPQ3ZZN0oxdUlId2txTTBwbkVVYU84bTd2VVorWDg2Y21sM3hHa25jZzVxSVhXc1VPMUI2YlhKQmplRVJ6RWR3N1c0aW81bnRvbmVWbVVodThVdW5xR3J5a0tHdnpHcW5qVkUvOVczRHNGM2RHMzBKbHVqYkgvWDRBTGE1WGZrVy9OT2xoNzBRSlhvQWllb3RRL2xvZmo2dkF0S0RUMFV3UXMycko4MXJrNmo0bTFGSDdUMm92ZmhFb0t3NU9paGlNMncxTk9MTE1URWduWjlyVkRTZnc4NU52RHluQjlQTHR2eFp3UUNPbTk0dnl3QmVzVThzaUpSTlBHazcxNzE0cDBla1FvT3FoU0tndnlxMmI2cUJzS2w3c2R5V2Vyb3RjQUxUWmI4T3I5a2FVOUNFbUszRmJnZElldU5CbHdEa1QvWWNHVUFvcW8zUjR6YVEveEJ2Wk9xNmR1M01wMGttZXpRNkY1QlErUHBGOEgzcVFZTE5oTVVzY21BTkNpbHJhaTZlcGRvMmY1MWpDOG96dDNGUnB4YkVKUmg4dzltZjNRWmxIczF1RGJnS0ZtYU12SS9LSE5HTGNiQUpvZndvS0Z2THFNbjArMm1CbUJrdHBWczdOTW5Lck1ldGtHU2h1TkQzMWdwOXN5THBiRmM5RVE0N0dpek1tcGdCTUlZdUZkR2ZOWXZ6M2wyQ0Z2cmN4Ync3UGtDNlg0L3hKa0dKUjZ6WnNBb0k1QkprdTFMSGFnY0s1bUMyVUwveHJzSEhueVJEbTMzbTBvNFJ6T01QbUdSTnRPUjRDQ1RvMmc3YUpuZlRLeERnU0hKcUw3aWp5VExwWGZVL2VEU1V4WEc3V0R2RUtoZjZFUjBJbHZQeE0vMEpTaGtCZFA5L1o3OHRBYnVRb0lMVFd4bFRSQkd1QjRERC9QNUlrKzNpQm56TUl2K0RXdDlzK1pJcXlJQW9nKzRqK1l6SjNwZ1VycFdTQU5aNEhjbHVYMzVhVXJrdFJOMHdsdkwwcm9STTZKYnVsYWJqSmxDMkFndVBQN2FSYlM4bXhNbWxRWmhGMVNsWTd0Nk1UaXVkRXNpYjlxN2VBZFR2cnFQNGhsTVp1WVhDSUhPamlFMnVSZGczd2txVEd1ZGVxbkxGNmxqZ3FYWDNXMGhKZ1U2bUVibjlxejRPZXBZMENham5WUlpzL1A4eFdQZE5hTDc1UXRnSWhRRytJQ0NZcWZxakpEMkp2T2JLekhsQWtjamppVnVEdWxjU1FtejAraTdnRFVtZkxSRXZMUk9wVU5MS2VRazNlajFmbjRBcGxVcjFydlFJOEZ1bWZyMDBOek50Z21zZ09TZ01OV2dlcTJmZmdoRFpHc2xSeWl6K3daUmIxazR0cEVlaTFtb25icVFwaVc3QzQ4bGRMeEJtdkZVSWRUdVVtQk02REJZREhlZ1IrVFp6NG9yb3BpNVZqYWpIUm5LL1hnSDlqM0ZGSCs5WnZIMHJidGZxVVgrYTAxVEtzNW8wT2F3WTlpMFFXL3dKK2V6ZWJVSzZjc2plYWk4OXF0YmU5RGpTY1E1d2IzaWMzL1BET2IrNC9mNThHOXVSQjNsLzMyYjZHSXVTOUZjSVdHQWtkTEVhQ293Q2FPR1psUFZWVVMvbnAvZU5KMnFUOWlydXVVdWpaOTdONHJWYUowRUpnU2lkYktaTGs4bDYzQXV2M0tvZjFHb2pzbFkvUG16c1dGVE55Z2JRNkdvMGplVDFiRUM4bmEwSTRyZnc2cHVGY2ZLSEkxclJKd2RLUEVHa2drbVFrNE44aURoTzFiZHdyYzZTVHkyRTh5MUJ4M2RrVVgrS0xldENyUEkzRlF5bkNjWUdQMEtnUEhydXN4Z3B1djBwam45aWFFK1ZXejRuN1FzRmUyOGhOM2hQR1BSU3REUmp5L3p5eklYclkvd1RjS0hYOXEvbkVTRTBBM0pYUmdyUVdLTzN3bFJHSmVQWXRXRENCS0dlL3BUd0s2R2F1NG44TnRqTU9TSFpIdXBCeWEyVHRQN0pJdUlVUTROY2FCVFJqU0hnRFlGVC9ZK210TXFxclVPZkFhRzd1aElsNU1wVHZNaFkzSWxJYkhmNytPSFVWbjl4cjhtUitmRCs2MnhZdWhHOXM2cHlXUDBSblQ1VXpiY2o0NWp3dUxtb0VSNVQvbktBQ0RDK2FxRnExbGo5SXlpZ2FZbDUxVGlVa0NKb0g2Vk4yTVFzWldWbm5ERnR3RDB0ZDZBK1htQktpOGo2OHBLRDFCd2xCWXRrY3Q4UThqZ3RPWGxFdDVJcUdjdFQwSmEvOHliSi9VMlZYV3pNM1hPS3d1Kzh1N3NJZjlWcVNnSWx4bHNKcFp0N0JsZDFUT3lOT25WYTduOUZYVVpjWXRwSlppcGFJMFNXeFRWMHNiclkwaythMFV3eERzUEJUbWtIMU4xVDJSYklReVBPdlF6aHMwT0xtbHFjdXJEV2pKVUNTWW5TSWdHOXRhRFcvVzI2UnZVK0cxZyt1Q3orWjdtcnRWTUlUYk9LeFVnd0Y4d3laQ2tsdE5sbnAwNWpIT2NNUTA1Ti81UldGSW54ZWZnd3FtbzlYNVB1WUZnbTJwSjQvSjhkTFlwdmkvQU9NUlZvMU54VlZnTWZoS1ppRUpKbVFJVGNXUE1IUHZXOWlaejM5QXFQbmF1cFF0Y3NZMUdqWnhjVjBKb1V0dXZJeDZyNUdBMmw4dWJaQ2gvWHlvdERwUE16cFFNYXpTQlN6NXRmMUxlOWVrTmJEVXhMQnJQOTJqMFRBRXc1VW9HWkFYRGlKbEhYeDJKOFQ2VzZaM1ROaW1tMHdZWXBvM2s1S0JNWm4rZGIwMS94TXZJOUkzY1ZWOVZqVlBmMnQ3alE2SkpVcEhUSFdaRXU1SkRhZ0Y0N096bWl0SFBYYkhJeDAyTnI2Z1RmeC84VWYyR1pPTG1aNVBpOFlBUmlSVkxNTThQb25pa3JYa1JQaW8vM1I1bHkycjAxY1VVVDdVdG1vRXRnRjlKd2pQMWZsaUlPaitENkk1VjlrLzZqeDZBcjVyNStsS3lIdkovMElmSzBiWk9saDNFL2U2d05BaVI4Q1ZpNTFEL3hnR3krS2VLNHhkV1g0dXpjMTJ1dXM0WFgvVVZRVEI2K1MvR2EvWlZ1dzdnUzRucEhuWDE0M1p3NTM3OFhRUm0zNTNhbTRVdldFcHRTMDZPVTBnZDFEWUFTaWFEWWsxbTMwWjdIZStPWEZKcjMxUDVFeXQwaVBkd2UxaHY0bkl2WFF6NnhZN1c0dndudE9PMkZkMUIzbTU0UFh5Nk1WWVVjVjdhSHZERm1laU5uRGgrekhxanZCK3Nza24wa0ZTNlFrZkVSSVFxQ2RyWW5QUUZudjZHamdSTjlnM2hLZ1YzeW9nL3pJei93ZjRsWjhZUUxCWUZpdEh0YU1RMmZRQ044cDhFdUgyeURpK21ZWjlJVnc1cTdjL1lHd0N4SHp1Q1RUKzJrSUVLMUdvbTNWNWZMbmdqUDJqNmk4bnYxemNHZk5rTUdPYmErcmQvRDlMZ29NK0NFVGZXMmhHbkZFS3daKzZPL3B5alBrWU5Teko0QlQ1V1MrTTYyTjE0a0lybGs4b1oxTWprTE9LVWRuc1kzT01VcDRjVy9Ua2c5Q0E2QVlObUZaWmsvb2xXS093OFRDbDU0NHZFeVlOQTNweHRRcU44WUxjL3Y0T0NrdStlNUc1a3JGdFFtSDJQWkFpN2NnTkhNZUhGK2t4bnlMQ1VMTWR1NXNwajV4cmw3c1BocElzODRLZ1VzYmdaTk9HSVd0WHdMUVNxaTc2Z0NBKzBEdHpSeTBBakpEREV4MUxhdE83OEtlSEtvZGVOWU1ScU5HcmlOL0tKMjJ4cFEyQ2g5ZFBnbklKb3VSMEh4a1ZFa2l3UVFrTXk0OThJb09LNEwzOXdKaWRVNkhlWnhVRi9xN04yNFlvaFZNS0dTRnZzajArYURIK3JSMjdUc3ZKcjZwK3JvczJCZmFjdmN3em1vajk4bHY1d3hRWTJEOTZVaTVaYVdmcHR2NmxNRi9vZGpYNTdCeUV5UmRBbU9tMHFyaHZuWEtyMnFPWlc0Z2p5QnZLeWN2ODluT0FJdGZSUGpBVXVFODdlc2JqNUZZL0t4b1JDVmRzUnk2YkpVRFZjbVJMZ3VMd2pmd0JzVnNodEN0T3NHUnpmeDk4a2lRbFhQSWFsTWVWVWx1cE1IQ09yWXd4M25WTDBwRUtHTldJMDAzMlZLN0hrWWdDR0ZUNzhtdTY3RUlDdFdHaDdPajlVM0RuSGY4Q0kwd3ZVVzJaVi9hbFQ5VWlzaXpQSjVsWlR4Y3ROSTJBZ0hkSUljYURBUHJ3ZzgzeVBNeENxbldseUk5ZTlKdms0Y0prWHNSUzRpOVFxbjE1T2Vja0ltbTZ5c2h4S29jUXBwNk43QjgyZWtNczh5NVdZeFhBQk50SzBqNW1RTXhnR3VTNWlnckx5T0IrWStXZjg5RlBHSG9kYkRQVUJjbVRtUEZySWNMRUZuY2Fmb0NtWnVZRGdtajV1Umo5NU45c3hvYldWUmRDSVFtR1BDUEVoUk9hTitzY1ZmcldrbXV3OUEvamF3Y0VWd1NzbXhNdzNiQlV6SGowOFhUdGNZcno3dHc0QWRRYXkxNW5CVG5ueXJNWlVVSVpERjhsMHo0dGk5WktvdnRmUG5Pb011M0ZYS0dmTTNYRC8yclJXajRtd3l2NEx4SUVKd2NNN0luOFJKNjN0dVhqSDZ1S1p3OFNhY3NPUUlCRHRRQ1FPblh1QzR3a1MvNk1ZK1BTTzdzd25NUHhZbWltN2pHcHJxZHBJY1NETmhTOFdpcEM2enUrRHRCbzBHdGhJMkRRKzIrdzlqSmp3Z1hDUmdCc2hCRWZ0OXNadTVEWFBSUXFLZFlMUklmMklXRkhxbFh2dVRuVWlFTjNoVmRpUEljN3hYN1p4K1lXdjhiN0svOUZqYkljRDJpTERqWkZhbnd4UUkzYlVuYzY3R0ZlYk5SUnRwUUh0dnRIWEhkaXRLVm83RmtWSzlmVWNwMEZKaExjMkVPNDIzOS9ndmFYVFN4YVE3M1F5SHlzTzlhSUNuSkZmRTVodTFZeStBblpXTGlGbEJYODBldWZBU3RLaE96RGNEQWMva1JPM1c4OWZobnhmbFB6eGtzbUxOejYzMGNMNTJzc0d2Wko4QVlmdXJFU0J2SktpMWJXM010bVROUnIvdFJwcktnUmREU3ZQS1BJV29FMFBqa3NWTE9paFl5Wkc1VkZ2dUhDeDNJck80LzYzTWdJY2hIUXBPVTE3cXVWVXVLY3FteHJ5WGFCUTRFMS9JUWVma0ZqbTBpdjJwcnZJVGpwZ1ZGS1NrTzUvVE5qbGZvMjVQZzh3T0FvanRpZm9PMnBPaWkxRFd2dm5UeVBCeXV0bmRSeTZiSzFxRUJCV3U0M0FFTHE0dE5KaHhrc3k2R3ZPbmNkTDN1aWtYMW93aTZsUWxGMWZLYzRsWmJUOGlXcHN4aDRiWGk2Q2dzcUk4eEFWa2NuZmtrMlREQVZDS3ZTZng3M252QWFOZE93RXFDd0xzYUhaMTM2VVh2N2JZV2U0OGtRcjExRGc3VUlvc1lCNGNIb1djMUREanlqWE9uckxRZk9pM1hFSmZpUDl6cTFDQ2d2ajNiMEpLcWRoMmxmZS8yWFVYbGNMNEJKQ1FLTTRjWkhPV1AyK2tjanFVU2lTWEIwT05nRU13QjVTbHdGUlBhR0lPUjZHdkFyQkpjWDZYOTFTODFBcmhrQWhtZFpNU1B4NnJhdVVrVEozVHBvemw0MEpMWE81R2tOY1E1YTZQWVBiYnBuRTV4bXFBVHAyeTlhQ3hKQnZ1cWJneEc2UU9RZHptNERIZ3c4clhpVENVMHVBWUh5bmhndkhIZkMveWdvTHRtSVYyNTBKalcvQUMzTFJiakErU3lZRU9RK1lJcXNKYmtmYWpqbHlzNlh1bDFLYXJJcHJlZGdVOFZoRjNLSlNhMU1iNzJ6TnlIUDNMeFE3ajN3dWJOMkFOdXNSSlRlL1JCMTc2dkJSOU5mZ2VuN0FWTm5OQ0trVXAreE1ZblQ3ZlIzWllDeG5VMnNwdTFmZTZZc0lHUG5aeEc0OFlRRVVuYlhRU0NOZzdONmtNWWxsay8vTUJFTWFYZDdLM0g3VzhtUEpHdXNob3NnM3F6MnI2c2dZT3liaG1Fak1BTnRUVUtkUzN3bFpLRitBZEtySENYZHBZUkFQV2x2amt6VVFtNDZLN2xCNUtUelAzVnR4RUc5MThrbStNbVJxajVJdExNQ0ZKT01GQlp6QjFpOW9nVGNDbkJyeU51T25yTEVKZzQ4MVhIdEpRd1doajBmdTZPak1wWmVaZFJlVG9CTDZoRGUwdHhWOWc5OHdVamFCY3phaDR3WFRta0N2N2VQVzg1RXNZY00zQXltTUhtbE1RMUZKMFhld2x1ZlozM0Jmc0EyREF3VmUrRjhpQ3JTbjR3K0VBTjB3eFg0THNiQ2RsbXRvSks1TEREczJuaWw2K3VTOGxia3hDbWdyTkR0NVM2T1BrS1FPak4vcWtPOHdsMzBTYTNxZ1RSSk9TTlRTUG94aDFWdEhjWnh0aTBFVkpjNEFEeUxKUWdxTXFqbzFoemoyTURZTWJZSXU0N1BHQUttME5xU2ZTYTlETkwzTjNDWGVzbFFsWnZvUU9XODlOTUJsZnpZZTg4Q1hQRnYrMDk4NFYrTTFyQWhRNGpVSkVUamgvS2I3T2pjTG53TkdieHRXWlVqYVBqOHkxSW9KN1poNTE1cGZ3dXJzL1VWNTVNbHRONHpwcjZIeHZYR3VPbnBXMlVDQnFnMkNiYXNIVmg4Rm13aGpjQ000RldGWThyL09UUGhtY0JVbVhqN1lkc2RHNXp0S0lPKzFtVEZqVXNhREhpUjBHaFdLV2U2NERmMWVZM1N1SS9KdUJ6bFEvVnJBVmY5ajBvN0JrN1E3NHVEb2QxS0VoWEJrK0hzZzRMYXFTNHdGL1RUSGY4dWNIWHBkQmQzZThSVXREYlRiR2orT2U0S1BQaXNoS25yVHJQeUR2MXRVVzNiZUNyL0VOV2kzVkFYZlFsb3h3alhDSTAweVZPRy9Zb0dadU1SRjRTaU9MWkJQWEkwdHVVQWZwR1Y0VWVVSlVpSWNGVWVOcDR4Y2lGYTZURCtmcnhEOHFvY0o0TjJJTDM2T3BMNTlPM1RTeXV0aDgzU1k4Wkw1azBBd3RsWXFnK2pjRUdRQ0h3UjlscTh0cFlmT3ZOUVpaOVZwcktYeGlDVDR0YmdjR09sZFlWa20wYisrZWtYbjJjRk9lOHM1RnlwL0JoQjJONGxiSFoyUkRXZUpnQ080VDZnSjNlbk5sOXUrZWpxeGw0ZUhNaHk4NXlTeFcrTjBrUHNDN0MxTGppaFBrVzE4bkRnTUpWNEZFWVcvYTY0T3RSZ2Q3cW9RTzloSE9sRFBtd0s0blQrcnJFTitYbUdTREw1UzRQSjMveUNCMWxYYzBWbHE3WnVmM1VSQ2kyRjZQOEJjRmtRMy9wei9pUHhGNHk1THFEOTgweFhtMGNqUHVNS2FaMm9rMHhvckpoSlpGNGlRUW12bnJGUTd3TU9aaEtiM05zSGpDVUZtVTEyQ3oyTXYwdFAxQ1IyR2d0OFUyTkdZenp5MWIvckRiZm91aDJwYmV3QlpSV1pkVDAycHhTc0Q0RHdET2VndXgwU1BMSkxxU0pjU1p4dG9QQzNuYzJMZ0cwa3dXS0s1NGVlL0U4UkFMNEpqYWoyZmNoeUpmakkycmxpTW02QWlTeWxZMUNNVnRFRVRWRXFIS1RaM1BUMFVVeWFOVmpuakY0eDRZUEF0aVdwK0pNT1BSQzJiM0JYN2M4NWVDcFNJVzlkMzBhb2VtSlpaaGY5SDRkOVZPTHVsQ2V2ZGc2NHVYR3RqNzNHY2N5NXBEcVVFSitWZ2tHZXpNTk1oaHFMbXRBVUxpZlA5eFJmT3JMZG14Rm5JTUo3TktTNmpkelF2R1lWeGxpbHAyNGsyNlROTk40bUVFeFJOdjRtck5LeUc1SlJyMmY5SXpjdXRyZDlGQU1uaUlEc0MwVnU4VzBqbGdOUnhmRTk0eURMZE8wV2JCNnd2RTVabnd1akxIN1duMEpjSmM2UHNCRFZVZmYreFJZcjgyR0xsclZzYytFaFcwTU82ZFR2bWgydll1SDhnVnlFbE1qMmoxbFpnV1ZFZThKNXZUZTVYZTZzQUpsb20vQkQrVUMwR3Z1OVJ4eUVBNWtCb1k0R0JEQlNRZGN2VmlGVE5CU3BQUXo0QXMyMWdvQWJYWmxnYWg0bGtlSkpuMzVKZmJuQWowT29WaHNtRC9qZTk0QnI1QVFkaWQ2MUpaekVaRllZbmJST3Nla0s1RTYreUxiQXdaVkdxRTcrMHlKSjM2WVhKZEloSkgxZnBFdjRwL0FiVEV6R2txK29mcW9YcGExOGhuaDVHL1NManBRMmFOR2xTVDlOZzFGMEpFK1lTd3RCbnhXMGhOSkhkemIwbXFhSFdZRjBWZGhUdDZ5cmplRlJvRUlyaHljSmUxWkEvcFlZeDQvbFVHSW1LNnFIaGlCVUY4WXg4SDNwdnErcE5vN3lDTXN3cUdTbWVPYXFiMlh1dWZmdjhVbnRpcDRLWnNYZ0VtUFF3NWdReGlKLzlMeG1IaDNHMFpYSUJxYkVJZXg1OG51MzRXbTZnTnRjaFMvbXNHUW1wSk8rUFlVUHFDNjF5N1laZmdFb3AvQzFCb3BTZzBkQytKRVJtZ29mV2hqMSt3ckN4Kzd2WDZBUWpvSjJQWDdWOTQwVUNjeHNkUTBYbVZkdDFsdjJDU0E0OU9KR1piM2ZHeEtJQ3Rkdk5MUXdaZXJaZmhNVDlXc2w2NlNCdXNJNjRKbkJtaXpQcjN6V0RYNXZPM3g0MHowQWxpbVdwQ0ZQMTZKY2dPRmRvWmZUYTZGbk5tb054eUdZMzZiV1JSeEQ3aTh5bVI3NFJCQTZ4K2FGdlhaSTExdy9DWjRKVWdsZU04aDBiNHpMTnRvOHoyOGZuTnFWYUtxK1NrUGM2cUp2RHNTYUVJZ2xDTzdTZ1B6MHpZakFrZE92bTdhVGFMLzAyQmdxYm54TmJTODZidUcvVlkzamt6UnJ5TWtMWlFralhUcnF3NlVOak94WksvOWh6dGFUb3NhK25Xa3dDVjduV1FXNXJXWGtyRUdWcjYreG5Da3hxTkk1QmtZS2Y5U2kyY2dxTGRZM1ZOLzltcldmcUUxQWxubDdmcis1SmxFNUU1UWdnM1JRTmY0UDZVVUp1ZnRtbkpXdU9ST21paDFISHBQdVE1VjFuN05ud3NyM2VxL29YM2Joa292eExta21xVXcrM2s4N3BLNUlpakZ2ZXV4Tm5CODIxQVdkYkdnRWR1TXJCTXNuczc2MjVvZ05jUGs2QUx0SnVBUG5NMFNJTWdyZ0RidEkyNDB2VkgxT1JmMGk3Umh0YW1ZUmt0NVpNaTdXbGgxb2ZoWCtXT2JmbG1xOFRiT2M1dElDYnVYSDdIakF0YkNzYy83cXA3YmYwdURURFB5b2JNZFQvZFovc0tQQlU2OG5aeXQ0RnYyam1sNGNlcFpOTnIybnA1aGhaRU4reXlvWkhNaEwvck9ZSTNpM1dTR3dRNFZsdkYxOW0veW8zc3F0OU95N0dOdEErWHhMOWc4U0cxN01IbGZRNTdrV294Wkx1bmM0TGpaNW9WRjZDeXUwZXNxa3M1TjF1RzRTVFNNcHJGZS9wbFMyN3ExNTFHMVJjbENtNndzdHd0U2ZMTGQ3WEFPSDJVV2N5eW9UYkZoUVRUa1llaWRIaWIrekFEckdyM05PRE05VTdrbmZQZmZjY3IwNlFRTmgwOVFGb3NTM1JrT3lqUjRUSmppQWxVK1gwQjIyNm5vMFdqS1RidGxwUlBYSi9LMU9qTTN1RTF0M1RlbnV1b2pwRDEvVGh5ZEJnN3MwbjQreTlJZXhpdy95V2Jvdk1ZZFkzV0NjQVYvQ1cxb3pyNk9pc0xTd2pzU2pNN2UvMDJSZkkvdEl0QTNWZndRNUtDM3N6UW5Zam1PQWc4TnozYTQrUnVxWlNweFM0SGhabXcxUWRCZysrMFdhNW80QmJwVTBVUFpSbk5PdVNuM3ZjbkZodys0UFBVYzFKY2prNXdIN0xjRzYzaTVxQ2hkcU9Bc0lqczgxc2NEaWJnMHoyR3hpRVRBY1dJbzRPZWVZOWdYSW9MblBKUEdwVGFhZGVlcmZ5Q3gzY2JMeWdRajNQL1RnUk1UMTRHdC90c292SFhFVEtueWhhQXdCdkQ4OElpSU5GZVo0MjlzSGxiaEN3cU02U0srSHlGOU5rQnlkQVJxWjRJbmlQS2JUZ3U2K3lZeGthU1o4ZW9jTXlsTUNZYTF3aCtoclpmRXJsU3ZwR1BvejV6QVVNa3BGQjRDT3BtVkdsRC9sRlYxelB0cWNKTFVFc0N4OThCVHl0bVFzeGxNMzJqNjl1VU43QzJZbzdZUmpzUU1CY0Myb3Z4S3RIeGFoKzhXSXQ0MTdqc2tLalBKR2paZE1NbHJyeXlGZUhvRUx5V0pabWVtUFR1NUdOUTF6RVltck11QVNsWGFPY3pSM0xVR3o2YUdkbXBTcVdzdngyWEhCcG83T2M3YktwWFo5dmVsd05FdEpwNHpRMTYwWTMxL3dhWVVCa1BJa0pjV1BEeldxVERiL0NWeGNxZExTRVkvMFBlZllGRGFTNjNyRFQwdUhXTXQ2bjd2c3hnV1dpQjBORWMyRGs1emEzai9STXhha3FVSjFSQjc0M3hhSWM2dVMzRkttWklVZ3hRcFdFZTZKd3VSZllhZW5xblFNdTNKTkt0dE14UlovSERSc3hkSkZpMU1OVFNvSExaVVBPVmFZQ2RSMk1oNGozZVNENW5MTE9neXJQNlUyemYzNXg3amoxNU5PNGFXZm5wOTkxbjdzNlJqck5SZzZxN1hwTHFqN3Q3ajBSa3pMb0tYb1AyTnd1ZFh2SHVyMmRrWXRHTWEyWndCbFZSUHZFOWNwMnlvWStOUnJRVjV5NFdCbXZsSnNNcHdaMU1GZmwyMkVFdVEza3g2TWZySnVhSmFBTFl3Uk8wc1FZdXZsTkRveUN3SytLek9hb09NbDRCWjZyMzVWZ0hxTUhTM2tsWkhpVmhjT1EyMS9WenV2TEVFdGtyK2o1NzFqOUVSMlJOdG1aNDArcXRXSHQ0YytNTVU0TXA5dFFscUxwUVNnZUtTV2x6YVdxOXdGSDlaUE52YWk1RndUbEVmUlBkL2ZvMUN3WUdhajI5SGRHdTVrNHorc1hjTmlJS2d4L1BDUDMraGI3VTRzeWJGOHRNODNIeFlrTnN2d2ZMSzFxbWN6aldDa2x2c0dvUEovZ3VzZTNReThyOFZ1SzY5UVdMSFlQNlRYWlpOUC9kaER5OE9MM3hsZ2VqZk4rQ2xYMHZBZndMZGx5dGR5K3lQNjhCbXVjNm45V2lWSFdRb3ZQdExOZUEyUk1SQnJITWpQd1hIUElNd25QeXpPdFplT1FxbDVFNzVZMGM4SC9XVW5wK3F2NE1MVjhnTTVGQkJ1aXJGUVYraDNmemhYV1VtL24yeUdWNFdRa25wQVNydUd1SStQSlYrL2ZyY1lBbXFWSEVKQUFqYUExUm14NUxjTXcxYmQ4aWFBd2VMdng2c1NSdXNTWkpCQllrYlkrZU5vcHZBTk1Qc05DbnV0c1diOGVSeFE0NTZEMjA3M0luQXFLSWNqWXRqdmk4V0oxTlJGTEIwQlkvcllDMUMzcm5nNVpQWUVNS1ZPTk9GbkNXZnAzNHppZW90YzUyVVhDcktKQ1psZFJsLzdna0xSS2s4Rk9zKzZ2Wld6cXV2UWh2OXNqV1VtUFhSSXBOdE9BQ2pQMEFoL29LOXFhK1J4Z3JWekMwbnpkVEtwOEpPVm1JejRTZEJGMHNjeERGUXJOVzRLcS9jTFh6aU9RbXMxSTF2TnlWTUlhVnFIbVI4Qk0rNTlZMVNqWjVKTm1Ba2Y5aUd5T2ZpZ3dGNEc2V1B6MWd6Q3FvWEtEVlVSNUorNmQ2RVc1N1BlK3BCTjdjUHlzOFZJcGRjWWVjcmRSOTVzTEFSK3Y4RVhVZHNKV084Q21uNlVoNkw2T01WL3lmSm0xampDUm44NzFRdjlDb3B5UUZNeVdwcktaSTYrRXlrU3J0TldETEVZSExYTTRsZlhoYm0yMmpVVWVSa2xoYmdPTEcrN1B5bWV3VElaTU9CVWF6dXByT1drZ0FmZkdjcURWMTlzcUd3M2dMMnl1VWF2WHgySmNLMVpoeGZWZHZyUjRWeFlWaHVnV0I1dEdjQjQ1ZUE5SWRIbmpteFhYb0t4S2Z3dTNMQi81RU9uaFlHbmxrWnhmNkZBVEp4ZHduRXlIVzBnd284YU5TOENjcHRuVGRKWVdJNnFhYzFCdG95b3VNNFJJK2tCdUI5Vms5SUdvVFRxdE9jc2dxZXRnZ3FCaXlJMVNscGgvY095OVB0NVdLNkpwTkdKczVrK1FaQlJQWVlpakxXYld3U3Z2THQvaDdsZm4zNEtrS3hUMFJQZWtSRVFqRlY1Rmp6KzhKY3RZNUovakRhQmRlcjhXQVZLS3A0bHAvVEpQeCsxWHk5K3YxSExlUW1NZ0lNaTk2WGFOTWRiZi9xbHhUZFB3YlA4N1lXOTFsaFFVU0J1WEJiZ0lpaVpBV0NlSFExYlFvWTQwaE5naXZLVlBybDhWNG9Vb2o5cXFNVWRabWM0SG9YaXk5WFZFeUFSTGNKemZodVpYNFEzdkJBdjRoZ0l2ZXZSaEdCZERQcENoejRKbEg0Wngyam5oMHdqY3ZkOHVmYXY1eWpyKy9XMFdiaFVVaXlrcVM1bm1XdlM0QkI1VjJnd2hWaDFJYjZhaWZNMFhndzF0YWh2SkJZcjAwdllZdFhuVGJKdS9LQnJTbXVIQU9KS05FcEh0RW5mdmhKZ3NvV1hhK2dhNUxRQndvbk1MSU9mNWtsN25vUnRQUldTN2puZWt4S3J2L09sNXB1UHpKSU9ZUUtUdHh4QjFXaDVNN3VuRkdrQkh2eVF2K3Y2TWxTZ1RkblBORThYZWROREgrREVYc3YwZG02MEhCdWd4ZEowbHJaeXdQQUVwWTlPZEtDMTRJMnNFcTlweklTUi93TEJrZkgrbjZVTHJaVlJSRHVaOHpEQVNVcHF1TmtBcjNpTDYyUDhZbDE1ZTdrdDNqVWkzR1BwUEFadCtiQVlqbklBc1Q0YTJqTTBCUkxNbGxmWll3cUVoNzFWT1VoNTA3ZEIrTTVhdUw4RDJYRk5iN0NEZk5xQktTV0tLTjhSNkJ5YjJ2bkYvcUNsdVA5VEZTbnVhQkVsODBIZUU2MHM0ejR0d1dqeDF3SGFGMklpTk01QTVMaXhsSUxPMWo3Q3VWYkI1TEJXRTBCb0ZCMFc5cDZDN01RRE5CdnE4V3hONTVxT08vajArZnRsZDBQTXFqaVlsUzJMcTYxUGJNWnVUV1lpdXE2RkVXc3IvQk0raUZ1L1ZNc2o4M1JWZ0VvREJ4bXU0L3greEpHaStLZTVVM2YxYXp2RjlNQTJVOXFzRTBrSG12VnZtRlhrK21FemhxRHplM1U2ZHZiR0hDTVVmQWdiaUI2dGxGNmc0NjEwVXN2bDd5QStwanNPSCtFNTB4NnlRdFJuSFd0UkFFaEdNUERCREUvV3BRbzMyOFc4dlMrQ3h3Z2t6ZDkvS25iSUFacFUrMmg3dVZVaEVkRXdqTDlPUzZ6alJTWkExZkZwZ3hYamE4YlJvQkVEYTRqT3VheWZBOE51bWdsN09JNGlYc0VXbkN1UnM3UlRrb0JZOHVoeTNvL0xwS3lRWEIycytPZnRYWlJoYmtkbFFrdWFnTGFMM1FPT1hIRDMvMXdlZ3VwS3RsUmZoSGxyV3ZuMzdmb1lnL01zVjZ2WXB2RDBVUjZJZFhNQlVWVzhJcDhJdThNeFlFWHBuK0ZlakJwc1JrNElrckVwcUUxZXAvQTNzc1JyZWlkNEtudnUwcjlYa0RKbHZlLy9KdTlTMmRYNUR3amhjc281SSs3U3o5dmdlazlwWExrdmNzK3lTZEtOSG9ySGtmZlRyV0g4QWJ4Ymo0RnJTZjVzQXJKbjF3OElOeUtYdVh1OGo3OFNFTW5PWUtzQWpKanJxOGZLcXRRUWZDMmQ1SU45ZUJWOUxxdlNmWERrZmxqWGhDY00wS28zQ3pMS01makcwUmdGTm9PTkMrZGxKUTgrQzl0NmxFVkR3UXZpa01pQzNDcXdMcDQzdk1tNmliRkdLVE16R0dERk50ZUVBWHo2SWhGMDJmNW1ORmhjV2xVVXNNQjlLT290WWE2TTdrck1NWEpBYjBpcmMzN3dIYVFWYjhhUzJkS1M4bURtQ081UlByT3Jha0VJSElqcENITUtSRmxUMHd6T0dXZU55emtwOHJHZnBpNzdUaEZsTUtOQ05kWUNQeXJYbXlGRVZTck5MVW53bk1PaVpvUEUzTTZQcElnRHNNamxHbkFDUFJ1UkVQOG8wN2wvOEJNcnYyL2JOc3lVZk83Y1dlUnVaOGl6aHNCRytqbVU1UzY0clBzTFdnTXN2eUdTa21tV0VzeDQxR3pUNERpaUc4SVlsbWVLWWt3SWZFemYxQzM4Vzd6a0RhRlJmbTdWc0RmclE4NWNhS3k0dGJZbXl5WlJ6NjV2OGYzRDhjcjVSSWJSWnJRNTYwaUtzNVJDSm12U08wQnh0SnMwUmZ5cDRYQk5mYkl0dVBsdG5xaHV4aEFlenkzeElieXRDVkJjeG4wVmVkdWtQRURhNnBoTGpibEhuS05aRDNkMFpRSHZJWjNVS2MraHE1R2c4TDVqN0N1TU9FUFc2OFRub2o5LzEzRkxwUllXdzhPWWJ0K3BzVGJ1UVBlbVNnblFHNFM4N2FtcWpEdjFCSUNkSURYMkJyUXRpaGNwNDJQTmhlREhSM09yM1dONFRCNnZ4RHh3QURrZkUyR1hnUEgrQkoySFZPb2RTK3ZDcFFXdG5xTHltbHFHb1BUZTB1b0dmck5xeVRPcnllbDhWTW9DVmo2T3NZcmE2QUF6Z213WDlrYTVlaTJvZkd6Y2ZKczJEajU5dmRMM2IzRzd2NlczbW9zM1hMSVNXOGxGOXVWYXNpS01oTGJzV0VtYnNjTGJLaW5ZNi9QdHA5WXozeVNIYnlTS0JiSnQ4bWpaTzhCcnRBYzFqZWI4ckJKM0tlUEJlSmJqNjF6UjRWa2F4LzQwTnJEUm1LVHdxTU5TWVhZazJnWnJwRlp0TlcrZ0krZEJWbVVObWU5S2RuKzdMUVNOaWVGOG1rYW9IUlV1eFIwZWRFUmdqSUFiQWoxdHhkTzh1ajlVcWRwbUVHa2JyQXJzdnJIbWloRE1GNXpjRzFOM0FiUzJ2QWdmUmloTjh4OFhIUUVEbDRMTXVVY3NId2RrVXRzYklDQ0dBa3l6bVdocVV3OXU1czliREIyZUhkSVV5TnpidzhFSHViekcvVlpQVktaRnNKelV6d2NNZ0ltQ3FzY0lLTGIwV21OWU1Dc1RYRVJxLzFrNG5YMGFVcS9rMEdrR1BHaGxuZ3RLSldETTg3TW1YMi9XVnE3NzZ4WGZHcGZXYzNqSElkZUcyM1U0SEN6ZFZCWXlzdWVJVTY2ZnRWZFRJQTd3RUF5V1BsUFk2TUwxQmxKU1dtbWVFVFdJZzdsdXFIVFM4bU85ZFVITldJbnludEZNOW9tUEFjR3hqOXpsNUc5NHp2ZkIxMkN4c2swSlMrcm9DUnJyREI4SE5mbkRZSWZWTXd6Q2RVYjJNN3ErTXpTYTJuRnhxMExNNWNXaXlocFZwclZNU1RGN1BYcUpjaGFCajM4MGpDVWViK3lMdGFWZnVOTUJ3dUhmYVpoYzdLcExXUEErNW9UWm1rWW92cmlJTWhRcG1rOWpFcmpsNEJpSVp3NXFnelpVdTNqcjFpVlBDc0hDcTJSbGNnTnNoMGFwMUI0Y0VZNTU5bFRSU3hmd3JLdUtLWTVTUHpud3lkZXdHakVxUDR5MTdaenVOWTllMjFQUXRlT2ZmUDBTajIwSnpMRUdKWUhYZEJlR1NVTy9PWVhyZXBZSks5VVdWYnQ1bkJROEs3NzlxN1h6d3dUK1JubjhlZy9LTXdGUDNjTGNlOTdEZ05xOExyV1hwVGJmNnI2bjBlN0N3K3NuSU42STUxUWhHSGNhbnAxZFE0aHNjNjdjUDdmbkszSTRKTXpsTFllMXJUdzNFdzd6VEdEdU16WE1NZy9xWjFsSWFTcEY2SVR6Yy9jRjgrQjdBaE9waG9YYnhRSGFiZkRkS084UWJxTTRsT1BnUU5tc1JoQUlUNHJ4WExvWmFNK1V3aTd2bEdScWdxa0V0bHZMTGxHUHpTSGFadEg1VEZJV3FIdGtobnlybGRGZ2JnbjYxamZyZHRPa2pUcUpXOUVSTDdwWVdLU2NRSTRNSW43VHBIUTBDYW4wd252a2hjOXNxMUI0T0M0bWtIcFM1TkN1eURkUHNBQ0k0aCtTNXVIMWk4eCtRc3NuaWJUY3FWc0JzY2JhYURuenhQd0NYcTZiVHpBNEdRSU91RXpJR3JFL2xCemprcE1ybnAxclJUcVJGNWJQV3ZiTUNoWXY0TUpIeDhTeHhuc0ZxUjJGNXpDQkVERk5kNTE4bVpzcHhsSlZZY1dyNTZ4TGFVRXlndE9md0FiQVhHcFRDRjRUR2lNOGNJUDVGSmdzVGJBaUhMRzFIZjZzQlNsY2dYa21FK0Vub1FyZEFlOTRzV3dxTUJSRVRRUTdrTVAvVGVwVHpra2RuakkrNWkrWnNpaFFwRitkVXBLZTMrK3ZMVy82cTY3cXdRWWI2b2grTHFneHZqUERQZDFyS1p5ZjZCZk9rT3ZLVjRaenhxeTJPTVl3RWhVZXEyMkxkTVYxeHZhNVJyNG1Wd1NpdzE0enEveFRlMTJlZnE5TDhtM3dvTVNLZG5pRDlWbkQzVXozRUNVQldURnN4eTBha3RwYzRNdmdIU0ZGTXJjNjJVbyswdXVCY0E0Z1NJQVZqRXZxUnhnd0ZxZ2lKZnpMeEdVbTdWYmhRWWd0VDMrbnRUV1JRZ3JpclVtQWtrK0lQMm1oYzZwbmhZbUVjdVNBN3BZMUNTQ0dzTklRR3YyQ1luUUpKVDNWeVFFMXhoNTZnMkNtS0FCMWRxTnM5YlJDdHRIQ0h3a0pjcm9ZbG5sNGF2VEJuK1llWDN3aFBTTTdZQmNDaEpxUmlCZzdHZ0hEU01iOUpOZ2o2ay9lM0VWQUQ2OFZKZ2JsZzNuZ204YTFGS2lZL2ZVTGFBTHZYWUlTOWdkOXlCVGtqTzhKWmttSDVQaVVUWW1zWEptWEFQVzRYMWRRM0Q2cFlXc3lnZSt4c0hPYmoyR2VBMEkvd3R4dnUrYWc2TzN6cGk5WGpzRnhOaUtrWDZhL1FBaFZQYURDM3dZNmJpV3JmTW56M0lZYXNuSkZzVHFuUnBLd0JvWUVlVG9kbmxEN0dXb2M4N1VzOXNFT1lLbkRrYytRdzgxbXZqQVArZExlSmhOek0vbDY5akVEbjQySjB2SExlNVVwZDU4cjB1UFI2b2Q2b2tVcFdpTGtuclZBdjQ1L0RhSTB5RUFZMHRFTndpOWpqVVhaU3MxSTIxN1huc1VNdzM1VG1ReEVJODZFQVNncHZUQ296bjBSSm1yeVBDazRlTWRNMlJpL0RBVkxkaG5IcTZmTEltOVZPMmhaV0tDRVhvc0RsUmhCQld1R2c1ZmlXVVNvZFJ0Y1dBZWh0VG1ER3dCOHpEY2hEQ0V5YXNPVVJucktxNG5uaHdVencxdUJBY3l5ODlvQnF1YUxwbjhCWnR1Ymh2QXpVVGl4YmtvWlJrQStweDFqWFRpQUtDZHFlUmFwMlFENXJtaEJhVnlqUy9hWmtFMklzaERnc09IblYvSDBWdXYrajIwS0RSQko5VHRGRldvZ2VqMFFuMWdiT1V2SWIyeEdkaWlQVjFNY2JoVjhETGNiY3FndHlUbUNCVk1CVlhuMkNxMmQwalRlQW83MVE4OEJMY3hESGFRZkRyR1RLOE9sMWZrejNvUGozcytobnVnVUVDL3ZHb2J3OEZRdGtFMkZaNzMrVTBBcHB0aERoTU1RMi9mVEI5c0lYQ0RqeDJnVjJOL2hsWG9naS9VZVozSGJhbUw3aU5ZUzEydEdWTnFDSWY4dkdBNDA2cWdlQXF5cnFzdkRIRUI2dWI3dUNqU0V1K3k1Vlc4ejhvQXE1M1NWVmFJbWlVbFN1ei96Mlc5YWxmZEtnZzdtMi9hUG53Z0F3Y2RteG1XL1VXclRXYWxTN0EvY2lSdFlDRElYeVhJQTA3bEhZdHhPTHJRcmlVWEFUcU80T2xqdjZWeXpSQ2xzZzlOZFdTa0pEeUtkOWIyWkI1S1BLVis0Tys1NzFCNkZROXFmWDd4dFVZY0hJemZGMTFUbUpoL0JWSUk0NjRSU01ZWFhjOXdjNFhiaUMyUHpjSFk1Z00xcUtSSU5kUkVJTFYvUlVqdnRvbThzemlPYTVGMkJiamJUMjNGRDJJbDZMOVFKVmZ2aXJVL1VBL3V2cm9VTU01S25NbDcyTW5MYjN6alV1THZPMFh4elVKeHRuZy81ekJ6WnowSmg0ODg0WFlmM3FFYldyQTBYNzY0UjdSbFdWT0drZnBxZkJyOWZiVk5wVHNrN3B2dHQzTC95VDZDTWhIcFdiMDkwVUV6VnZ0Qk5zZmpqYUpGMnRqVUdjUkpHaWUrbkV5ODNoamk2L0I2SC95aVBTdHlZNVlXSEJuMFlYbFdXdEZvQ2JtcXJKOUQ0V2wvaHdiZmtBcTQ0L3Jhdi96MHRRZWYzbC9Sc05iVEpzV2ZUd0dXbWp0ZE1Rc0l2OFkrbG5Bb3k2YkRScml4RHNleW1BMnpsd1k4REppSzJqWWtBRFlNT3V4dHFpczdPMWcvSCtDUDcxcTI4ZlIwTU11RXRBd1RodnM0Z1NJVmQ3SlZ4enR5U1VSNFpVUlBXaWN1RmpJaFBES1ZCMmdzMFpuZVFxdkVOOW12YmpEd2FxdjF2UitWMVByUEMrZlNPUDZ6bWd6d0xqL01uV0R2UTdKUHBVcU1HOGlialk4VGlib0RtLzJiQmlhdUN5ZTMzNjlPNWROQ1Z5b1BveW8xa1hhN2RuRFZTU0JDV2xZSlc3OWpwNE5hNEhqWjB4M0VOaWFrY29rYUlrbUZNQURXWTlqL2lwK2J2MmpEcmRiVE4vSUVGVzdNTEY5NGROVmtkaUZFQ1VkK1pmU2pWeis1MHFDenFOYjYrSktwcTdqWU1Eelhmdjh0cjdXZmdiSE0wcWNWck9xbWpVYUwyK3JwVW1DK3BlSEVsVXJNRXFBV3oycWRnaWIrZzBxZWFmVXRVaWVEaWlNWGl1UDlyMFp6enJxdlk5YXRoN1EzZjB1eUFVZlZFRFFRTEllQ3RkV1hVWjBXTVpCLzVDa08yd1dlQmZWK3JiQjdyV3hQaHVGZDJDcHB2cktKem00NHgxd3pHNjg0VWxsSHREcm1tV3VXU3NhWVJZd20zdHBTZGJpbldaZUU0S0JENnZxU2hJZ0lCeDNzOG01Z3h6OW5YaFFRTDNRZXo4K0orZklyam8xTGJyRWEyL0hnNi9wZ2l5azZOdUpTNFJMQm9xQlNaR2FOQjBFVVdoWWFyQXJOUDNVZTkvQ1VtdjRFdFJDWVV1Q0EyR0FNL3ZPMERGNDVQbHEwT0hiNHBtdDNSU2VUQ1VlaDB3bGZCVzV5OVU1SG85Zk1FQWUxZkUzSS84dHFzZUh6YmNOZEp5WFIyZVQySUE5NE1iVU56a2ZBSVJqRmo0Y0ZjanVQeE12eENOZ05uRXJ1V2RTUC9jakVpSDZLVGdXSXRRcGM4T29ubXl3aDB6QUVCSHZuT2NMWWM2SThGYWF1dXl4MEh3YUZUWUxkSVBMOG1PUGM5V2RtaWtPWHNLK25udlZVRlltbXhNRDhobzQyV1hLRmVOanp4Y1duWEpkbGFJeVpoaVhteFlJY0E2SS9WOU5pMXI2ZitKL0VtVWxBOW1RemE2a2l5eUI1QjhaRGFZSmxWQ240SlZDOFoyV0Z1eE5tZ1ZQV0hFblR5aGpucEhUWGFab2MzQzdSajlENGI4YVZiNlFFcThJQi96NkhZSVZXNGRQVzNuU2dxam5SMjhGWWpMT3MraUVtRXNKZ2tsMmVOQ1BhcTdrbzNnTUNFeEwxeitqVDZUU3FhZW1HRXpUQStha1hPakNhWHdXMjQwOXJyaUlza3lCcUExN3d6Q2phRFVlSkNtdHYrSVJKdG9ITGJzbHhreGJzUWo1NElNeVZyTjh6Tm9NZHB4eC9ydjl6RStkeUNLTkY5cmhpbmlzNWFscE13MDN5aWpXcGRsa0hCQXczUlp3b0lqUWNJYkJMdFRzTW1ya1VpL3ZGV1JGK2NEVjhzTkN6K09WS052b0lzUkNzN1NERm9NSDM1UlFlU25QMTUrWHp3eFJOZ1BUQ1h1WnVyQWNyc1diK2hpVnEwd3ZGcGx2RmI2dlFwRHN3eU81eTRoa1ZWRlBTSkFzMGJ6Y2ZKMEJUS1oxNDFqVjd1Q3ZCM0svWFFoUzRVZEpXL0xYS2J0aCtZcVczdlVJRHlnU1N1L3FId1pQZit1dENTSDl3YTJOSTJMZnZ0a2RRLzVOalBCRXkyeUdtK3ZXdlRDMUpxVURtaWJENUh4TjdZZml3U0txdE1lMlo3YnFPWmMvWFArOUVqMnBBaTErVmpoZlVBb0NKWCs4cnRxdVpVZlRQbjF2ZWFkSGx3M3FXZ1VOVlhLeVo4S1lFKzhyNU45WTl6S1JTcE9Ua0VmVmJlTG9FS1lUSGk0NzBIZ2pIb2hjTzhOUE03ZlZHT0xkZy9XWUhyeVpTNHpKRUxVbWkyN2xKY1FaSGRzOUVqZmNLL0szU1VtZTZXcGhMUTZEUmdSSUZTdTI0WU1YS1JnaTJrR3M0YlBFSVkxZENNTjRvQ0hYSVQwMEZoYXdjaGVhd1VQQlJEVFpSNGhlVHgzRTJQZDZWQ2FyOWIrbE9oZ2NqRVN4U0d2cVZta3Ftei9TUXVTRWc4dTRqbEMrb0FGSzdzUHpVYU81WGlGUHRrdEZLUDZDZ0JGeVdIUXdwTlFBMFo5VDhoQ3VVbDFxSmZKSzA1WW9DcGxGSFc0REpiVmR2RHZyNHQxT2tLSUxyNFI5c0hlSzE0TW5rMjZQR0svdTB6ZUtNVm4vai9JcGhobXBxVzVDR2trZXo2dVZrN1h3YkQyQnRGSjJKUmJXK2ZNZzBUOENibHFNQTJDYUhGL0J6OUNRaFd4QlR2OUtPVjd0T2NveThURHZteGZTcGFyOVUyVU9RbFJZQzNFZUlFOEVwWHM0NDVuZzdUd0NvZW92R1N6b1VMeFJRaWhWUW9LS1hROWpWMlM2Wk9HQWI4d0s5c2hFb28vd240eCt6N3o0cXNFalpkT1ZHbEFxanphM2VINWY1S3pETUFTSThDSzhKekFsRGRJeTNrR0Q0d3VqNHVQMHhwK203WDREcXkwbHBiZmNIcm5VelYrT0I0ZitYaTJPVk90S0tpejBxaUxjTXlSbjdCcFJYM2RKYlhSN1FvWm9ieHNiZVJsS09TSDhWQnNHQUc5YzRJT0hxQ05McHJzV01qYllYanF6ZmcxU0IzV29LUVdIZmZ1WW1QOG1JQnEzUGpPYjNnMnFXVEpDeWROWnM1S2NCWC9TV2Rna3hnZ2EyMUY5bmRPS01LdGRucnc5T3BXdGdvUUZIL2UwVktveTlTa01wcWNnYUpmdnptYmJraVRBMUt3UjlFSDdTMXRrNmNRZ2RreVZycXZJQzR5bWN0TnFFcWZxeGlHOFh4VkxxUm5SazJKb0hIODNEczR2U3lhSG5BblJCK210VXEzM1dMRkdFL0tZWWZQbE03djRWS1FlNFB1UmxWTjk4UGsvYy96cU1BcmVYNERRYmtrRDdmOUhEZS9NNm4vWUJiOFQ1aWM4Q3J1YnMyWTljMDMrU1gzak5tS2JUT0VuTDFpT3pSVXhXNzZVZGxXZElHcFpjVjhvdzdwVzEvL1c5Q2pteG9XT3lxaWxSaTZIKzhsNS95d1I0RzlCbnpzbC8zWDBMc2VZdXZldWJNRUFBaEpFTmxFSDB3SGFQYmhOZzhtc0tyV2VKMXE5T2NZMXA5eFZuQWdKcVo2QjZUZWY3U2diVUdpTHRHNmwydGdiYk8wRW1PVG9uL0c5RHVCR1AxcXdnZ3psMzUyL0oweHcyM2gvZ2ZqUllndmN0M0I2bDlJcXdEMVFlV2hVSXh0blZ6N3FWTGlTclY2N0xrbGVwQkJHTWFFNHlzd3p1VktzNndxd3M1TjNhVHIwbjErdVA4UCtpOGpHOExxbFBCdmR4cXdNOCtScG1ZZk1Hc0cyNlgxTEF2eG9razVGUjhaZVlJM1NtM0dyem0vVFM0anhCcU1WUWhxNnFNRXljdHBLc09nN0ZMY3FJRU9pamdjQjU2VCtZWS9vcUxtRDVsaGlBUFhpWlFRc1IyNWhIU2JPcDR6TFdqWm1kYmRDa1BETThiY2JJcFZlbnJyUE5vZit1UDB2ZWdQSEQ4Zjd0OUdBRVNScTQvNllOOHNnMlNnVU1VbXFFaWpXN3BFY08yTWg0NERoMG5hWG81U1dZNkY4eHBVN1VFYVNTWWI5Q1JDNGpUWGJ5VFJVUlZ1WGp1N0lXMnBFSnBjMldkb1hCSGJ4SjJldW5iWDdWUDdVcE5FcDd4ZUViQUthaXFjYWJQRFE0N3Nnd0ZxaHlNMVZwdW1FZVRzYjVDMXFSKzhNNDRNMHExZmlPQUJCOGVTZHZ2UWg0U2hoK0FLWCt5aTJOS0tDREs0Ny9XdzBpQkIzQTZvWXZxWWNQY1Z3d055bzA4NTd3QWIzbGdZa09HYVcrTTh5cjVtbTB5cjAxTkxIZFplWHlYZnBhaTRUY2RiZG0xSW1MVzlNbDdtSzI0NVlSUi9CR2xKbjliMWlPeCtWejU1ZjR0eFJ1c3RhWXF6c3dzTnYwQkxyREhyNzIyQm11TXVHZ0xwVXRyS050WVN5aGFsWlNuRVliRWppRVhjMlRRMWFpRFVHcjVLTmVsdER3ekdERUUzQ3hpU3JjTTB6T0hKUWlhb2o0b1FSd0ZGVjVBOFJwR2VGTXZqc0x1QXJLNnIvQ1NnNDAzcmZoR0NjV0pLdk00ekFqN1dpelVhNy8xYkc3bVRuVit4ODhyVW1OcVlCN3h3SHUvbEJoSGJ1RHAzTGdjZVI0dG1kRW1jMzFycmRVSGJMWXZoVnFyYjFSdWVNYUljOCtTRUt6emFOTzVHeVVaRGRrMWdwVkxhTWRNQlZGem10UDB4dTR2NlVCNkdZQS83d1IyWTNnSjRBZ2VCa2RPWGVxYlFKNEQyYXJqWE04ampBV3RZQ0FuQ01sU29BelNBK0ZnY01pOVhSTVQyMitDUUcrU2doRHBSTEhQV0hWWjAyRDZEczltUFYxaWllUDZJRncyalpiYlVIei9MeXJKWFhNaWZDYktobm5BY01haEZTb3dwMmRCZzBkR0lMZWtiTUJDSEVBSGg3RnVVYXowRUp2c1h1RW5INllIZXY4eTl6bE9kRmtGQXB5U1NPbnRwRVNaZmVGRUlIcmRjcU9wemxvYW9nT0w4QzNBeEZuMWdDTVJVOGFoM1hJZk41M0JNTmp6M3hUWXZ2UGdpWE5oeWM3WVFOWHZZSW5XakR2b0pRb1FyY1NkQUtZcFdqeWdmYU9OaWpBQVJmb0wzVW1JVE9zTUFzZTdyakFyY3FGZTJaMUpEdGVPcGIrcGMzdU51YjdGWkRodUozTWlKUjRUUklLanJWbWdKa3hQdUdXMVoyL1VNNnNaaDF0WGc2MmVsNkJiRUxYQzFOblZ5bUFoK0hhQlhnOWxmVVZNalRxeWNEb1BESHlFM2xtZFJkU2lEUWNxVnMvRUI5d29kTTZ2V1AwZ3Uwei9jUUZVek5DZjhabTlZZDZLOHdRcXRuWDVIbDgyRitVVlRSUnBrWHpFcVdHNG9RZUFJdXFNSVMrNlBCMTN2OWFvMzlqU0Zvb0ZORzd0NnY1Mk05QXFaQWJEUGlRVnYxLzdYV3VBcGhIdjFjSHJhTGJoQ2liNUxReVlpbENvbTZjK1F0UHpOWE9Pd0wyRS9pblNyMFFacnlSQXJrTHZXU0VBaExLNHVEQ2dQSVRKcFczRkZnZnVwWkFxU2Jna1JLUDJnSklaVSszdUpPUmljdm5IZkthdGQ5dmd6Zmd0ZWRIVkVvRmg4ZkhXaFIxQUJ0SS9xcWUvcEJNRExJd1dFT0FhTmdQTTZRdmlaWjBPa2NEUHR3eTlkcHhtZUxHc1Voemg2UjRMWkI2WTkvOE43bkJlMFJGTUFqTk9LQ0NZRE5nTmFrWDVnQTYyeTdWcXo3VkRjQUx4bWI1ekJoN2NweHV1ai9wN1o0TERmdVRDOFN2aUsvY1ludzV0SDNaanBvRFg4bVdUZEFlbU1PNjFZN2k1ZDNtRkdlOHQ5a1B4a1FFQnVGMWVxbjJxbEc3aEVyRDZlYVJwS1VUYk02czlXbmxyZUtWS1UveWZsSEUwTEVhdDZiZko2K1pBY1FWRWtIMkxUbHRKSTBXb25WTTIxcFpETzBaaW9zSHJNeXcvSnBqS2wvcE9BTERuYTZKWFZzU0NCcndoZHJWZEFFTFV4NStEaXBSVE9wRDlTcGVkaDNsZWM4SStHcWZhcUFiZmhIWnBsWjFIRTRBODAwTGdYN2JXblhTbHVIOXRROVVJWk9rNGZBdTlqdlE2OS9Rc1FTY1dQRUV5TGNGejAzeDVEUHZaeVlHR2pOZHBISytIcnE3cWpwNE5ONW1CcHovTEpOTUtxMXNWSStBTEZNbGc5cG55aEdSRmZLSjdGS05aRjhYOUJDRzVCNnVLUkRFSXNRRGRkTDU4YXhjSGdjVnhxa0hBNk1iN3V5RHJiMnB1bFRaeVRLOTA5ME9MUXJndXhJYW9qNzYweER2dkhicDNhZEU2T2dNWGlqY3R1UFM2UmNCSm1FT1hMMWNMY0NockVCaFRSMnpCZXNaaTdtNFc0UFYvZm8rMUM3dFZuVmY4WVNxUHJONGVrRWZVRzZuNVRUcVgwVlFRalMxVkFYamZWek1DS1gremRpYktJWFoxbXhQdUVxcG53RlNxVmd6b0pQdFNrNjZYdTdjUkZoMnJOcTFFbDJreGFxQ0oweWdlQjQ5SDcxN1kvcDg5eUY4Wjk3RisrdExwT3M1cU1ORWhRS3d2cUtZM0F1Q1NmNGEzMnNHanFvMkwyaFA5VHN2WUVteHJQa21iZTgvQ24za1FBTENjRzdPaVUvc0F2SjR6Q1lvTmJpRW9hTFFQVGtTSG1IWlh0ay8xYW9GYmF4S2R1WmwyalIwdExNWm00T2dpZythVE9PaVB0UGNoMk9OYlVLSURxZHdlcWJOZENySzZwc1kxOVZ1aVM5d1p1aUtZYkEzL1dvT2tuOEhXTzQ3dUtIeGhhWEc1TjVNaExpNHcrTVlyNTl4NVFLTXhuODNBQUJCWWorMFRHR3laRG9tOTlFVGlyamRVTDZuUFJ4aHVDenlMeUZucHJWN3ZINjR1aW9uUkJyRDdtYnVFMG9tVXJkY2JzWFZ6cUtiei9TRHB1NXJTY3pEc2dLeVFmWEdsK1Z1M040ekNDR1NBNzE4MnFpVjBmcnNnL2hYdmNUaHVRNGxIcTNLZGVGcnBJNUpOTWR4ZHMyYWx3ckNqdUN0Uk9YM1pvWGxVbG9QcTZSbHlWRjEwUjd5TytNemxGL3V0T0NJK2lzQkpiOUZwdjVWZEFLWG9Gd3M4Sm1NQmxJeVFvV0FpNTFyeU9PaHBjTGJLUFZrNWU5OW14NUxoNi9NejhpVlYveURGMEt1Q3dwZVJ6RTQ5MDh6K2U0Qy8zcmVudUVEOVlUM1A5S1FmbGVMUHNNQXVSUHRUcHBqSXJwYTdpV2xJSy9JY2RpOG5iekczbFJMT0hFS0xPV0ppVlFNdGJFei9FbGdsMEZWMjRKUHE0Ym5Fa0Z6dk1LaHRQdTFkWTg4c2xPbGoyUUJ1cDhnKzc1ZmowK1JlbmZUek8vWmI3V2VSbHZNTjVOMzdyNmJ1T0dsOGJmSGpZMDhyNS82TCtoUENZRE9yWkFVaFJSNTd0N1lOamlZa252Q2l2RVkxVVh0TTN3Mmk0Rks5RjQxczAxaHBTSzRmNlNjTWl3N3lEVzJoNC91RkJpNW1nTVFxWmY4SmdjdG55UEo4UU4rUWNEdnRaZmFaTzJIWDAydXlPcjRXdXdNb0hocWFRMTFFTUJla2Z6RDJFd3VxbVRiMnpBNnVzdVJyZFZ2bU1jLy9GUmpzNWZCdzl2Z2JDYUozMGw4UUY5Tnk0R3FQN1hIS3VhbXdIQjV2MXVWQ2w0VkphQkdLbkczRjRyUDJLc1Q5eDFiZHJiL0RDNDM0UmxhWWU3RERCa3kvQWdSL205VWZuTGhoYmM3R3dzaWVlR0MxaC9ISG96VnZKbk1XWU1lc3VkTTR6VkVqMmcyLzh2bnFLdm1OVzIvMG5NWGhYMjZLTTZPeDhJeTVGMnBSRURWZDVxZlhWOEpwSGkvVzIzUkoyekI4UlFEN093ajBLeG9OSUoycDFjY3FsRnJsbzRFNk5aNU1pbnlERWlqSjJ6RktBZjg0NDBjdlNLSGZLY2lIRTlVS1pCWUdBTGVzY0tuNDJqVjVqS2MvNk5OWnNJYWFRQkRpVXpkUUYxZmdVUHhNcEhVWExDaWtES3FtWmFnRlZKUFZjQmFUMEhtaG1vaURNWnNXU0srYmhJZDNvejRqOWg1SGZvSUNnckliZzVwTjh6aERodWVsSUUxalJGTjBONVRNY3dRVEhMM25neENuYWFvOVNhUXNYRnl6QjRmN2dMQzBydTlsaTg1ck9PdGxQcEt3bzZvUVFiR3MrWWo0YWR2TEoyaG9zQ2lpN2ltYS96VElQeTYweEtHZUhOWkQ5M0daRkM4UGowYmIydUpZMFJiT0pxc1VIWjNRakcvV1ZiQk4ydjhLVzNTaG1oOWRYZUt4VVFuQWx0Z1IzUDR0YnQzbDdqc1VFc3pwUU50aWRuRE53VkN6ekVUYVdON1pPQ1VsbEpSK0ovaVZOVytDNDF1Smx6MndEQ1BvUTFWZEczRmdXNENKdG9tNnZCaUF5U01vSmhvYU1NMThxSmE0TStpU0gya0gxVlgwd2pkclZWKzQwUTVodmFwaEt0M2phMVdMc0NkU21MaEk0Vm4rZkVEdzZnSG5BMVNhUWJlc0czdG5tb2RUeXRZeW5iVzRTa21Kd21KU2JTYXp5cUo0WTAzbEN0d0dXa1hTODkrR2kyUmRXaUpXdkl2MmxVMDNteEVGVTZXU21LUUZydTkyLzBaRlRxQ21oQUxMNzZ0dGZjQVpPZ2g3Y3JOYXVnajhtSnBHV3E0L29aai9OTk1uVzNpa0pXNHlTN2E5eU9rNDA0ZDFWd3RRTXFrQXo1aEY5d0ZvYUY5Z0Q0OENKWlYxZzg0UERDdGNJVzlwQWZPd3R3NGVMcStEeHBkN1ZHaE4yWjlzSlhHdmlhOFF6RjF2UnphanZySFRmN0N4Qm1JdFhjaHlUK0pqZFgzb3BubTFhR3c0ZmxyWkl1REFsRlhLSU5HUko5Tm9XRFk3YUdyQUhlNWZ3ckVxbVV2VFRNYWJZeFpDNHFWcnIwMm9QM1hrZElaNm5uclZrZEZuZnhsS1FXNFVxNktKOGs4ckdwM0dCMXUvZkU2UHdSaVFDT04xNTk2ck9meDg1K0s5Y2p5K2h2MEtkbTdJWVgveG9EeXp5NzJ4T1A2MmJUcldsY3dJb0oxMHN4RXpIeFBqSkVpMldwOSs0OU5BYnplRTVqb3Jzd2NZczQxNCtFSytwT2ZBeHR1R0lkaU5OUXozR01Gcm1xdlgvZzVCUHZaYmlOK0c5SFFuWko2cEN6UGxldGZqdmlRWFcwUDVBTzh6c1h6ajBlMVlFek9mQWxEYUNnc001bkdYWW9xVi9RSkoyUGxFTitpc0FnSUE0eVkwcFc3SnZzekx3WGxGd2kvTmtnVnllVVJjVnFPS24yY2NWelljYmtFYXoyTWNLOWw2MUVaSjc2V2tuZDIzVmxzeExMVFEza0NUWXI5S1lBMWhTdldsK0JUMk8vZStuY3JwKzZDQUFEeXlsYWs0UktqcTRLRExHVm80eTUxU1pwMW92djRWQzdnZXVmOWtsUGZoMjFmVEl5Q1dSaHRidDV2RUFaYk9NbjV1bnhITTZGZ0FSeVRCRGlMSkhNNGh2NXB1eUdHZmJkSkEvV0FXemlieXkrNTRXNTJUVlFib2VFdFk3bUsxM3V5Y0JWM0dFWURIZmZZcHc0VzJIT2hROGZmZVo0WldlV0pvUTdMVis1VVl1U0g4NVJtN3JwVTQ2aysyT0RvVjR3a2hoVmRNTDA4ZDArV1hqUzRlNzVITU5zV0NQNnVLUnVSWmxNMytuQytTTU92Qk0wM3oxWG56c1U2RVk4MjJnakNSQm9Bay9oSFN1UUNnZ200Qkd1Y01XamJzRE9YYlB2VzYvRnQ0Um5oQVdIbjFFQjZHRzJET1IyYUE2UmdLeFk2NnE3WlAzY2ZzY0xwTDhJWXBIdjY0ZitEM2g1MGlDNVBoMklhUmZrYmVOUVova21xaVAwQTBzSmQrNHJkU2lMclJXVitEdW5jbGhWb3paWnRTWnlFVElvK2FKazQrRTYyM1d3UGE1VXo2eVIyeHlTM1RjbFlha1lBVnBVTzdMODg1cXZsa0ZQeTJ1aG4xY3k1dThZSDRkTWhDbUltSlJpdjhGeUdzb2swSWJvc1Z4K2RXSFJOc091dkVjbWZJSnFIckYwaXZEMEVyUktwdkNNWVh6bE0zUjZ6U1ZoMFZuRmo0UUxJS3pNVElYR3BjUDRLSkdrcFpGTTJMOURncGRabW41WUU4OStFa21ZZFA0TCs5N0V3d3YrM1RsNmI4NnEwbGkrSFB6eTZpcEtFV0pqdS8vcVcxZ3ZpSTJKaWc4WGg5MkZlMlY4SW8wM2tQTFpITkMyQ1EyK1A1M3BScW5zK1Bmc0tvdzRvd2dnVXJNWlBHY1g3TlRTUms5dXBYRVNGLzNGdENkOEFMbnZZSlhURnQ4bVJkWjZ0OWJJNXNLQ0l1RVFRL3FFNzhkSjZsWUhrNEswQ1lWS0pxVGJma0JTa2ZRN2x4dVVZY0RYK0JJSk51MWtPOEhNbjBrTW1wNm5ZNjIyZlNwUkd4M0RRY2xCMnphdDV0czJEb3JFelVmV3h3NjNJL29qczVYQ0ttNWp2MzJLQWFxVWEvTU9DY0FuMU1qMCs1TmhoQ2hsWC9DUWlUblZyWDF3RmZmcEI4SElmbTBjWDUxaGJQdXNvb1gxVjdnYTZ6RzRYdW9ZdnMrMHhIQVFqeDdEWVJENW0vUzJFNXVqUDlrNkRPTFZYemp3Unpvazl6bjBlWWVFeXBDUEFqTWdXM20yeUFGMTA3VmNBcWNEaWFBRDFWU05oQ0tMdjA0TWN2cWxCa05Gck5QWCtjZkhidzB6QTZwbE0yR08xcTRpY05GbGlHM3UwZ09mNFV0ek5xZ3VzUUtHK1BTZ3NjZFRUb0dyZXpOcVA1dFpxRnVhZzNKSXJyOFVPZ01VajZVOS8vWWUwK2YzL2hBUXVqRVUrT0pNUDFCMmNsMHNvM1pxZVNjckNoMkg1VFlKOVdVQklSOUtram9STGFQMm1JdGJiSy80QVNsMVB5UElPbStEczVXSUlnL3p0ekVQbDVHMG1FdW5tQXNKdUZmR1dQRENhNEpZeXpoU0NaNFcxTVNJT0JvQUF4RHRiRUdKTlVVN0FQSndzUDlseFUrUlRzZUlpTWI5OWxVQkRWdG5DdGFkNDBrSGdDOTAyY2JaSU5NY1BEUWg5NzhBZnZFY2VBcU1OTm5VZFl1cmFkeDBWRzZTWDRZMStmQ29PMlhTVkhmMU9uRDdMOXhPSm85MTJOdlBscENYUkcxTWovVHJDZ0FKRUNobFhDQ0w2ZjNrRHBlQ3dqVUZtaE5JVkhPQ1pZV2MwOWNENG81WGhOT09GdGpRb0N3M201aTJkbWJ3cXVaaDd5aWxZU2E2Q2lSblFkQzhYSXZQMm81MFVpbnlsZHR4Z0VxUXk5dHRKUlZjbE5aTlNSTzBWU2lFQnlXb3F3WUxjUDVxSzYycDFNc1ZUbkErNG5vZnBWdmRzc0RmSitMZ2c5aHZINUwyUEtEL3RmZWZUdURGUllqdVlpMWpMZVZKaElHUjRUOW51MEMzY2JJUUt3cEN6dCtEZU5FNlEyakFQclRmUG1ONmsremdVS2JEY3VadGlyaHF4Y1I1T0NGdzI5d01xYTJtVXFINlhvOCtpYnYxT0R0L1lKYUN0UVMzVWhMN09DNGYyTDIyTFVaR2JZKzl0NnZnUVUyY0dHUU5uaFZLSG9GWkd1QmJGZ09uSi80RDVISjlzdG9EaytuQTA5QUxsSk9LOWJlVDF1V2FmS2ZOOEtHbXJUdFJNMG56NnJTb3pBUjJOTmhmN3RoQkZvYTlrcTMwQ0g0YnlibFl5YUxJN2N0TURrQlk4dmRFdGxXb3Zwa0ZYVmthemF5d1BXUTJVVnZ1aW51Q0FiL1I4bWwvUzRydzJJTlJrVG9oZTVqTkVsaXo5UDUyWDF3dEFTbkFrZ1lXK3Q3WjlYL3lMcVhnU2RiWHdHdFVnbmtWczlzNmIrSlpGU1cyRm9KazFQOHdoQ1BLLzFzVG4zVkxJMWNtQjlleXZCaXBZMjNNYjUrbWViY0c0UzRQTUtScTQvaUNrUXZ4UDM0UDhlUFk5R3lrczNFRHpkZGx0MWNaT3M1cHp3ODNnNDd1YUFjeTBhYUNoMnY3NkVQWDZSRTdBUTJuRTFOeldiVEQyZk1vUHRhdU5GOGc0TDR5b2tGdjRpQzlUSmlkM09tNjZtdXpTYjc2Z3ZEYVZVOU1VQVFyYjh0QjZLaVJNUUNLZ21ULzc5SUlmSFgvTGpLeWU4bVk3ajZzSGg5R0VIMnlEY3N6RVlTczBFczUyWGxGR2ptM0hIMUJpSm0zVk40Z3RjNnBWSXRJT0V0aXhMNkw2N0RGYkdkbnU0WHdRMWJwN3YwRHpuTk9JSEZiV2o0djlBOFpQdXZCS1pOUnNBVzlVMkVBN0pHWE1ZcTRVc0kwUi9OZmZnSzF4N0tDZ2ppQSsrOXd4OUdSQ0RYY1NkWDZ2R0ZlbGRhR2lyOGt2WTc5ODk0dDc5YlE3aVJzaWhXVVduT1p1M0JxN2xtN2xDdHJoWnB0SzZoRUFZekFKK1FpSjJRT0FockhNNzlKb2JKV2lXZ2VmN0RnT0lZUmhQL25rTUE1cmdJeTVsdG1SWEZYdGtpejZRdzBPWVVkV0F0NXplLzFEUllaVDd1cllSYVUxeE9XUUFkSjhXYzRpSzV4aUpMM244aGNReW5XZFM0UFBUUm9JbE92OGRkdWE1elZaanJMcm1wNGlYVlh2WUY1bmxuTVhXUVdMYmY0aHV5Z2hqZC85RExQc1Zlb2JwcE5kZEp2WHFMYUh4eEpnNEpjSTFCTFYzcEtrWWpWYzRNeU50Q0t6UjlHa1JIbHE5QTQvZVg1NVhsNjUwS1cxaEJsOTBnbXRQN3RLdE03ZUpLbUo5VEpidjBuNkQ3bEg1U0UyVWpRNkhvK0ZvQjE1TzZQQ0RQYXlycXAzYkJ6aHgrVFV6QXY4MVNuamtDNEg3MjIwakg1SWFRSG5nbGJMRGRxd3Z2WUtFbHhPWVoxL1VoeElFOGF1VVBQblFiaHIxeDRlNnhsSGNrb2RIOGc2QU1LeGw3YnoyYkVJMGxXMTRDcTlGb3dBazFQYVJta3dvNmlITFF5SWxmNTNFeW9TRFVyQmV4UmRYL3ZMYTFDdGtZQTdKcnZwT3VrS0x2U2Q2TERUT1pCQlNqYnhkQkd1QktuQ0l2cVplV2VXNWpsWUVYbjAvR0syaHRjTTNpNjV4VGIySWFCVlFlYTZVTTVRdkxMWVhvc1QwdmZ6N2UreTVRZWxFbisyT3lCTnVxSTJKSUZKbUFjK29Dazk5SU1tZXlXb0I2WUZFSzFPSW9sZ1ZJNE9qSHlZNVhkbkdFSmZGY3gydk9EaEFWU2d2T1ZEZUROT1hxb0hweWlSSjZOYjdPZnNZTEh4YTFib25EaG9acW84dTZGWjNiVCtMb28zaWFpZmN1VytMeTdsaytkQTd5bXZoaGt5SmZRdXRKcmcrb0xZUFRNcmpHY2s1VVZSWjg2UkszMlhrVnFNcW9aRk9nakw0YmoxeEM5d0pCdGowMndFMlpsNFVSR3E3WmRtUlBZNmRKS3NLNGtnQTEyY1FqUDlBbjhlRXZvamxJN29qOWFPakhXZjVTNUt3Q0pPM1E1RThzcXRmNWJ0a3JLQU1hakk2eGw0NmNXWWdNYmZzWU5yNXJibVhNUHZQQmV6bkN2OW80VmFOR3NDd2tjWlIvbW9NNWJMZEpiRHYwbVUzdmUwcWpwbzhRVElZamgyVmQ2ajJCWHp4SytCMlZTZXQyZXlmRTR3bDNjRHBsM3FxbjJWRDVJaGw1S2FISlJGdzlBWEMzNTVFWVFLQk1GZERyOGdWWnRPak1GK05PeWhOZGlVaXRBcGJqdUU0eDFTc3FUM3lFL3dyVmRINXcvV1lvUUtleFc2UUpBRWJUSEVhSEluNjFmR0hJMkcxZW96cmhibWZHRUZuMS84TDhIZVNJRmQxWG5JME5wbEhhZkFZR1E3WlF6dVdQUUMzbTIxcTRSVmNtb1pwRGlxR3N6c2J2SmVkUjN1Y3JMMnJ2bFVTcFhqYXVoMFJtelkrTnlkNmZJMHBmdUN0RzNZNmdUN0dZVTZjcDRZcmExYUNXQzZIOEwzZStMOTI5VUhFd3NlZTFEVDdtdjZqd2FGakxXTURDMURFdmdTcFBVTjNoMldDYlJVQU1GR2YxVFNYYmxaOWxmOUFydk1SbUNyaWhBdktPRnVkZ1NCQXYyYjZXS05YQ2tieUZ4ZUJ2RjZHOC9KWUpqM0l4M0pMSkZuU1lXVHkzZVZDbk1ZYjdKcm5neFc1d2NPYjE4bDk2dUVmMThkaUxPaGhUUlZIZG0rMWFWanBGMXdyZFgxb2pnNHh4RmxBQkhqL2VTc3pkdkNUbGd0Zk1zR3FHbmJTV2FVNkVwTDd1YmVKRUlvTUhQMnpPVnA2V3NMRUNrcUpEWWN5ZllyVG1wSy96VXp4VTc1VHZIUXFUc0hxVlR4NXkxNmp4STd5cit6dkk3WVN1WHdhZ0IzVVdOUm0vSTB5aDBpWW9RVDRLaXVQb2FnTEpRcVZtM0lMUnB0ZFFoRXhOSVpLZDl3aCt0V09rbGhkZERDRlFJeDU1VWcvUGdsSkNOVXROMWxNVWI2U21kNkd2L2g1Y0xGdlpqMDUwei9jMU9MaWJzaDVoK1phSDFONjI5dnBmS1d0eDNFVld3SE5rMEZ0RUJyV09PNTdmZW03VTlzWHB3TG5qcFpJSEhRdE50azhVV09WbGVMQmlCOEZ2eDQ0VFRIcXdEUTBuYWpLMDZxYkkyUHMwZS9nSmhvRTJUbE94czV3VGZncFRLT29zL2dsTFp4dGJkUjFMU3prUnMvUmRqOFdMNUNRbnpUblRLQUZFT3ZIWWpnVWZQRFo1SmhZTEI1aTlJQkNObVY2cXRqZUE0M294RVlHTXROUVNyUXFPSllTUUVZYlZWQVVYR2hLT25URFAycm8zSTV4Y0VkbGtHZ0JYQ1NUN24rUVVINTNhbGpydXR5bm5uMzV0UUJIZ3JJTW44VUdMeWZvS29TZGJFelNMeFMyUUgyRXZwQUZ6YTlNNWJ4RVJQY1N5bHpVNVJWL3R5TWFZYjRnRmRQdkRPQTFRSTBMSzRSVUxRVzlzTGgwemtJdjBrNjR1TWc4aTFFRy8zWGxQd0dYeG8yTVc2bjJTdFVkeGxXR1VDbzZreWhzb2ZaY3RGbk5NRk5UQjJHSXNralVBOXlhVEJzNXYwanZrRnIyTlBtMi9JVmJlZ01CNmQvOGNWNGtObVhlT1hpK0RGL3U2Q2NMbzltUitFQWJyRjhZeHZNcDBaVHRIVWJJVUkxb0ltMFhOTExRejIwUnNmbnFoZnRDYzVFZzQ0NktBaW4xTFRPS0c3ME5MNDlyT09QK2hqNjhrZEw1QTJIajBNT2RSN1BSRzBiY0xIWHZWekJvVWJzUm4xcWN2R3IxaWMzVit5eGc0V3picFp3U0JiTjNrQmIyY21TUGlFdjZOcUduZzRpd0RLSjEvaWpKNWxLc1ZBUVhORHV4aFp0Tkc5MFBIQjBFaFJQTlZjeTZ5a3lUT0tZSzBXYjlLRXFheW5RcnRrYzVTdkd5eGNOdkZFZ3VKNmNnSk9RZDY3L2gyaFY1YW44M1M0WDcrTWNaYkdDMG0wbkZUSUswSDFBNXNHMkxiL3JWVnZPVW9vdHBWUmp3T0I1OWZ0WDVieXdYeldBQzVUR1JIdVhCRy9UM21FNXJHSE84eVBhYitUN09tR3A4ejI5MjE4Z0FTTXpzZ0tzUEFlYzF3TzJvVWt4MGQyZU5ZUWZJNHN3eDlIREpCSHRwL2trbDZ2MFR4S3krdEk5b0wwaHZ1ZC9kVElvU3pPczdqNXI2eU5neUVTVGpVYVovSFUzMjhyNWxRVmdxYTRodytUVGtVdWNxVEp0QU01M1RMdHgxcjhlTWU0cHBUWEZFdThuZmVmOG1xNlU1L0V5dWJzdXBhY3BrNUtoTjdCUEdjd0pIYU5HTXBWSnI3VTVDcXNiaFFhcTB5UnB6WWI2dmhLQ1pKQnkwUUFneTgwRDhOQkpWbUc1SUh3L2JQWUFSMncxaGsvMHhsVHI5SnN3bklYQjk1dGU2bGk5RXYvakx5YlU5KzFPcEFCSC9CeGJmckV0MVJWN3dGT3I1cUsveHZ4MkFtT0ZwMEVidjcvdVNoYjIrSkJLMUUyakx6RzRQRHZzK3NEZXdudEtYc3IvUHByUFdlQTRPRWtyek04eXI5K0YvSjlMSTZRNysxVnErUkJ2WkFWanYrV2ZqWFIwNU9pcVVnZHlxbFdoN1VSN1RKUDB0aDZoUHZFblpZVFhCRFBDUUdndTRtaHRBVFBRSDJkSWN4MW5xc3h0M2QwT0x5L0xIY0g2NmJuVC9nUGNBZXVEaDhuUHNUemFGQ1FoNmg2WXZFM09SYkRMcHJQK0QyNlRjWmxuRnRCSGk0MGNzZGJjY0JVeDBYVWEzOHdQdW96cmp6RTR1Z0lXMTBhQlRxS0c5Zk5mNHhBSGR2azVUYkhCb291WjBHY1V5Sjk1MytNTVZ4NjFmTy8xSVlwV2g4djlYN0kxUzlTNE5URXY5VDErV0h6N2NTaTdMamJNWnJ3LzhpTVR2L1ZzekQyWm9aT3FpYnBidnpjQSttTXBSMmZIWmJOV055YU9peno3MEMySVJIT1pvTUYzS3lkSEdPU0dMbHdqcWR1a2NSOVRGV1VsVHFYcUxibjBjZ3RSZmNmSnF0WEZEWGV5dFp2aHBkUi9pOHJvb1Z4RW1UVC9tTzFUbVNKVS9HM2lVNE1COVRlZDQ3UXNQTHlYcll3TUlxQ2tWaGY1STZDdExQQ3llRXlpWmtudkJrdzlSR3gxbFI5c3Q5VXp5NExVSVFKeVoyZFZvTFNMNjAzTkM1M3h6bWgzaUJSNnl4WWZTS213ZmkxREdIQUxUZlRvblNCbTRWeHZpNHpwalpKaXRLTHJpYytpY2ZXMGx6Qjh2NnpaVnpvUHUyNWNHTzlacjlKSTFOamNnanZPalcyNEduWlNQeTAweVZvcnRSeXZZK2p6aitRZldldmx4Yjg3bUFna1pRT0YrZ25vRXNPak0wVFpSRjlOeFNVaXc1bHJEdjN2UlVQZ2xyem96TE4wZDVTaXRkbUlIS0lGL0VPWGxXdGhLcUVHNllCQVhweldCZUFMUWx6SE1VSFkxdWdERFNzeS9FRmMwTVErVXJkZkloOWNQMDVEYjJHOTVVUm8rSlhHNEpsOU1UU2dkUDR6WVBJMkRhWkhQbG1ZWHprakFHODJhaE1uMXdRRVhVaXcydE1LMVJQVk5RVStsV3V0aklYWDhDcU1aMHhVRWsrREw5MGNmQWpuN1pLU1Q5S0hOZWFCaWJoaCtUcjByNTBCRUthdkd0K01aVHRQZnpTWWFRa3VHZGQwR2Rienh6T0dvVGMrTVdZOVF6VlBFMHovQllidGJOYUVMdXdXdmhjZFlUZnlNWVkvelBHU09WTGp3d2oyUHZKQzU2M1hrdTBFWW03bk5oUVUxTGtyNnNCODNHNEdXL3FRKzZ6VDNsbmR0bCtYUkVETGVKVGpsUWdnNXQ1MXAwM3YvTkZPeWNjV0s3b2MyZHB1c3dER0w5bkhqbkdrSXBKOU5zcllZbXU5RnhlcGZBRnRML2NKbW0yRk1kUjdLSEJDNDhvVkFWNXVOWXFYdWJMaG1QRW9vQkhNRmMrWWtmazBCYlhlTmlObmRCdERXb082NHcvVGUrV0l5T1JVNzJUSFNPNEw1QklHdjZ5WU9wcitpR3g3bjNOVDF0czk3VElOVTUyWFJMRktxVDBzTDhXcjNKVktLa3NXQWRTanZidWlWT2l6VU1QM3VCYXhZNGFnYXBzYjd0eUloOVUvVHpwMzJ4Rzg0U1gwNG5iSlpZNGo5ck03TG1iNDJOK093Q3A1ZUNsN2xNbTFDdlM4ZjhQdm9hdkJ0VFNKcnAxKzcrSFN5bWdQS1Jid2RvcCtGSDlFV0k2bSswWDMvS0xTVVhYVEg0N1RtbHlsTExKQ2FFUVpMSXBuL2dPTzNKK1BhcEpMNWtYKzdjakxWTW5lR202WmJvVGtRQUZDU3JBUVdWNFMrU1ZFaE5Kbk1tVVk3UWZ1eFNLYmpyVVlMWVFYeE9HVld2bUh0dlM5ZEtJZ2drY3BLR0hLZWZJd2NpUTMwOHZSRWhuRDVnU0YwZkhYOC9UMWFkK2QySjdpK3VnbE41dFJleVFZOTJOVzFsU1BaNnhqNE01WHk4UGg5NXI0UHVQb1ZsbW5GMjhVaTVqblFqU0twWlFLMi9nK2kybDR6MGNML0VUV1lnTFZXQW1Idk5iUVR5dFoyQkh2ZGNDTnBZQzdiZWIyOUpFS1JDTzJ6OFd4Z2JDWWpoZGZNUUU0R0dFVkliNDE2eElDbmNCT25QeWxyVE91QkM5ZHNrdmRIeUU3TDFxandKalZhMkQ5enhZTmRZZXlreDR1am9oYW4rd1VCcGZNVkhOZmk2UmdPbEVFSjl2a25hWDVhZlMrY0FlL21wWkpHd0NwQjdWWGZhUnVIKzZPcEdrYjZNYk96b2FIMlRoOC9LUWxwS3czS0NPb3NHUW4xMEZ2aHZ1QVJFOVBXd1A5Wjlqa21LUWZCbUFwMnlOYTM3NERPVzd4RTB3SUkzdmNTNmJkNGUwVE13emltVE1iVDZUVUVZamc3YWpobC9tV0FlUXovZEs4VW1xSURxZTYvOUgrUFlpbFY2ZTJVeUJqeHJVYkFxalJyU3R5eWFYd0xRdDBPbmxtMzNmZ2Q0Ull2VTNndjlOejF5cDd0QWNYSXAxR2lPUStOOTA0Vkp3L1k4a2hFeEZYVjdEWXlIV1pkRGExUmY3dmZzTFBLekRjZXF6bEZLMVdINFd2aSsvWXFaZjV3Nmg4KzRINWM4VnY2bXV1K1pUYlUwdzF4SnJUSmtoSkc4RmxoTFJmajJjbGFUMnhPdG5xTnNadkx2N3l1WS84Q1hzQU9yYjRwbUhxSHNqZ0lyS3RxRlI1eTY2aW5pOHNlOHRuNHJSc2ZxNW1ORDVPVmhyYnJwbmlweFR6bjV3K0hsU2RMU0hhWGpZTnRnVlNOMFBmWm5tc2t5TURUVnU5TE1ZMmtxTEl3c2doZ3cxMThTc1dNSFpVWVZiUmlWRjFDNkQ2a1kxbXkzeDdteGRocFlQM3FKbVFqU3ZTZkU3ak5QZnVLRGI4MnhBM25DNXk4SVdQbzQ3QkJFdmtCOHlwcDBWY1pSdElaUjc2b0RaUzdxRFcxUFlpa01wM3hYaWZSYzloWVNzeitaTk5lT2NhWTU1eUdtSDAxbVN6V3YwbmNTWkVranRhTHF6ak1yd0NtZlhHa1EyK0hpTGVPTWhkSGZ3R3BxRnJhM3lkdVVyU2dWMmhWZ25nSjhGaU0wQiszWGpVTm41Q1BFSThZcitkYU5DS1h0c3FzaXF4MUw2UjRZc2txM1NiN2M3amVXU1gxSFhkeHZ4dlZDVGxrTm5UTnBqK0ZhSktoMGJPR3dqaktWMXBCOE1CYzEvc1owUnFzTHFKdDVsN1drSXh0MWtEeGVWQU9tYjFUcTFXa2hIbUVPUDdZQVIreW5ZYzlpaXdYdGZseDJBU2FhZUx1SU0xOEd3SWNrVk5ob0RJa3VnNlhEVGJvY0VhZkZDbkl2TkRKbFY4SksvS0p1anowV3IyWXNEN3ZybHVxSytGN3UyTU42QXgyeTZsWU5TVzNnblpwYVFNZkFOaVlmRk1xSjM1WUQxTGswSVBSRThFTmtsMUlrMEFuVk1mQ0tjNmYraXMxc0t1RVN1d2luUmdhU3JmR2RLRGQxVDFkelg3N1E2K3FyY1d2Z0NjY3d3NytiaURHZFdZcmtvNGw4MDBjZ1pvQy9VaHM2T0huYXB2WGM1QTNRcTF3eVgvMUE4WWRzK2d1eXR0SitGcHU0S01vdFhJYzVjYzNSK2doSDJNMXNydzJZQmRlUzNCMXFYemFseTRNa0wwblFlclJyYWNyOW5LYTdtQUd2QWxiU3Fsc1lvWXh5dkF6cVRVN2YxODNWbVV5a3B1UGVvdVA4S2RhSS9nTGd5bUVJV2JDV2IycDhKQ3NwMHdTeE5iUVBFMk1xM2c1VG41ZlQyZnpaTzlUbE03NHNPQXl2N0NNVjU4aXIyaVpyYlFPRXJ6djJSRUJMa1dhWWdtRytuOUpRaFlaVEhSL0puN1Z2R3RwbkF3MDhuUkowd0Y5SXRNUGZVVVZMeXFORWJJYjhKdTFiVE05cXVPL1k3enEzamRMT1BHTGVqdmMwWkRVeGxuTFpvU1dsWWJEbW5xMXlSREhLb2d5NGJpeTJCaFVDSDQ1Z0Y1aUxwd3pxdEtZYUZzSHp2SjkxSlVaWElNL2dGS3VXRkFqL3pzMlF1bjZYTGNRbXdaSzhIWnlUYzhrTnZ1Wmh1ZFpsYy8zMU9zWVBBT2hMbUY0dVEzeTFXTXZYVXZ4V2lPN3AzSDZWQlVRcUplb1FCSDZ2UzRoZjYraElnMElDbVFIMm5nVmxobG1YbU5OZXQ2dHRMcW5PTFgxVnBnaXZLVnh2aGtoalMyNVNrOXhVNk9NblVZU3VpSWhudFJydXBEamdRWnl3M21yaHRKclJuNXB6TENob3pSOEpUMnEreDVTenVaUllnLzJoUDlCNEs2MFVPVHFvY1d4NWllOWJhZE41WnlzVkZsUXVVUzNXMVpEV1B6RC9ZcS8yRENhRnBKQ29jOE9wMExZTHFodXNMMzQrVk5ZS0tVbGJRek13R3pRUFRta0txaGRxMmlLUG53OHV1Q2l5NDZ5Z0NTOGlWVWEwT293UEVodzNKczJuR0R1NWZHdGJSWkRvU1ZESjlXclZwV0gxZHVUS3U5VmNwK2lzbkw2V2dzTWkwaHV5dUJ1eDBoOEc5d2tDUTFwTzVZK2VKS3Z4dmVKU1B5SXlZSHNuMlhOcTVtRlBuVVFHZDQxakVyczhvQ0x0TFFpVEtuTkE3RW5wSlFNSmN3S3FieWV5Z0NqWjFFOWc2enZ1eTV1Q25SSTVOcG5acjdGTExhOTZYdUdmTzE3SHNoTHlCSjVkOWlSaHl5YVplckJFYldzZ1lYcUd1c1czUVVlc1Q2UXM4UVJSTk40bHB0MHZucDNJckk5anM0Y0NsKzQrZ3lMY2s0cktnSXBCMENMNTcxTnI1emI3VERSYmNkWjZnMExtY2RrWTN3bXBrNGVCeW04LzFOWHdZL1p3dVhKS3RBb3Nid2lMTWt1TGJzSnNVMEx5YWo3a2J0bU5TNlc3aWM0ZFdMK2l4UllWbGtQTzFQMTdrTDRNQU56SzZYb0Z1a1JnRStDK0tnUExxcnFBZmdIV2JsM2twYWZ3eXIzMm1GbkI3VkhVNHlmUkRQZHVoMXUzQVV6WmtkbkZvWlFYS3Fla00ybHI4eW9Lb3VUNXBxdmgyQ256MHFMSFJxVkdRYkMwazdRZDJBSlJSZ3pveUZkTWErQU5KUHFJOUlBY3Z5ejhLWU85ZTgrWEg2MUdONTN5enFuOWdiUDFMQTErVjhBZUpLa2tRbS9LeXZzUzFJbE96VW9nWXdTeTVaWTJPYmdPS3FRc043dGJ4NU5ad1hhdTZLN1BvL0R2M0J6dzV3T2VsNkFSZEpjQ1ZhUzJYRVMwOHUycHBxVVFPSlh2Y3RnTk94YXB4eU5pM2NPWUtRREYrR0hBeE1rL3dRMWpwTEhseldJUndSR1hkUjVnUzVKYm1ZSHQ0dWc5T0tkUk1iYXFjMFBrdVhYME9UODRUbGs5R3FzY3dsSkJwUERiWm9GQlRyaXB2d2hJNmVKZnZZWnk1LzJqUmFKc1JmNzl4cHM1UG9uNHFJNHR4RFplQWxxYzFHT0dhSC9ZN21sc0ZKTHl0WG4yTmZ5QUtIRUxNY08vaDh5SjAxOXJGT2Urbng3ZGtQNnBuQ2ZJbGhzS2cyQWdqd25EWXB2bE1lVDlIa3duMmY3SGkyQUsyYlFKdkhqMUJ2QXUraWYwblQ3K2ROdFpJM1k5T1NuRHZoSVNFMHkxWDAyMm96SVNIQkdyVmI1elBuN0NiUHFtOGsvcEFlTnBqMjdKL2d3MkRUdHJOTXM4a3BlTEpHVlRHNm92bUI2VFNHL1ZVMFdiUnY2QXQ1V3h2WXpKdE9PYVFzdEVDNXBBSVF2M2RPVHRmQU5HMXFBZUMxRjlyYjVuWCtQejNyQnAzYy9DZkZjclNnWjJQSGFjSE9NOWtueks4U09xcWxQRkNvSmN1S3IyWkRMbDBCQzhqL3NCYVVuMTdZbWRPRCtHVUR5NGt1ZDRiVTIvTXNRY0l2eE5uQVM0aW1pTmNpd2w5TzhlQ1RlUlpHWi9WRTg0WHh4ZkQxQkMrNDMrQWYxK2xuUk1xVjBtOWhkeDY4TnFOWU9udyt0R3pvK3ZQdW9hMTRPN2tqY2UxZWFFd2ZsdVhOaGEzMUdIR0Njbk9DbVllZDdwSWQ4ZDdSRSszQ3R0cGk0UkJWcFo3b0F4T1lsS1lCUGJKUFp1NWVEdHFSMThqN1B4ZHVBK3l6ZWhrSXdCTzFpWVJVQXE3VnhrWC9ITUJDd3crMmdzM25URm14V1NQM2RaazZGRU1vRzZpSDRSM0tGL1V0QWk2RVVqRVVGTjhIYjRaalh5RmY2L056VktibkVtd0thbXJ6OGRjdjlPenI5ckZnMG82QjRHalBTRGZTVEpxdHBPa1NNYWtYNE5JeHo1c2Q0dFZKdzBvSis3cXBUdHE4T2ZyLzFUa0wvTlBrQmJLTkdzbEpSd252U0ZNbDFpeFBDMm9QZzFVRGtzaHMxTTVCSlpNbDJqUlp3bU9WNEpMV3ZFaUJBL2NuMDJJUHpLNGw1ZUJKWGF0MDZDcHMrcFhMdW5YcTlLbzVIRFRkK1BVM2dJc3Q2KzJxUXVZQTdVODYyc0h5NEp4ZnR0NWRFTDh6ZlpLam9YMVVtQ2k2UFRBYjhNZG83UHcvaE5QbDVqWnYyTEc5Nm5HeUltRkpTaForMWM0c1Q2TTdNaldqRHpnVHlyMnRjakFMODhrQzJFTlRDSnVNUjl5ZUlXOUt3RExTUlRYYmdoY2N5N2NVTkl3SHlHZEo0U1pmQ2wxbFJKZ1J1dnVuc1FOUjRSUzVUMkVodmp6TW5xZTNrVWtsY0F2N0xCNXByai9IZXBoSm94OEtNa1JRbXNlU2wzQjZZUENyU1puaHNwM215OVN3U1F0MEgzS1hPdEpLU0dkdDFlQ2VoZUg4UkczWTIveTRKaXhJb2VDcWN4RUcvNDVob29oUG1FOFVoR1l1UmJIRWxLbXA2cEs5eHNqZk9GNGdabDRKSmJ6YzNnSUNxdGpEMEY3dy9TSGJwVndIYTgxMWxDKzUyYVZxalJ3UVRYVEF2eHc0STNSbEtQUlplUnp3VGhJajd0Nkh1S2ZEbTdVaTczeWxQWFVZNitMak5GM2JRckxFMmttMlZLUXc4NFByUmlRN0k3WEh5cXNUWW5NdG5ZSDQzYVJFMDJrbXI1b3RFR05vb1luV01aUVRISWNiME9ZTU9qY1JUMzI3TDNwNlhwc1h6NmVTdzlmOXU3N256Qk12L09raFcvZ0F0VTFBTjZ3WmgyVkY4R09UZ3hCbW1qVjZoSzE1T0l4QTZ2ZkZXRzBLSGxLdmpBQW5VRXd0ZDFwV1lXRGM5K3RrTTlHMjJEQzd5emZsVXFKVFNJVWNhSjNtcTZ1ZXEydHUzSmJ3ZXo0eEI0ZWRRdlFGZ1J1K2w1VTk2Y2RtM1Jhb0dyQTZZVk5lK3VEaGJ0cUk1bklXRS8zay9HUGdPTmpoVjlZZW9wYkEzWEl5T0VtZXRwVU9ZQkdDcUR4VDZzdWhtWXJRcjVwTlFnV2VMNXJvNi9qQyt1alJJWDRaZENSTlpvWHV2OGtVVDRYNW5QVU1DamVYb2pzYVBzaEdMVWxXZWtuTm9pWkhXZGtOZ2lFVm50TkZSek5sOXJlQ3llUlVZWTRDQTZhTC9ZVEE0MEs4eDd3aXhFK0FLcGlmSHRqQU1uN2pCL0xyMGFxZ1pzV1lYajk4SVFLUFo4cUhKRTd1RGFNRTJGWFVRRFp1K0czbkdlMFJBaUdlT0hlbXZaRktQTzFUcVNiSmUvRjVsbkE4Y1RETE0xSFVyTGJHc2loSUtEUFRPeTM4cE9EcmdNVFNaKzJra2lmcjQ4dFZBeFNWbmFUT2dwYmloS0czOUppMmxLNThJUFY1LzBpNXRRQzZQbi9rVXlXVnJwTEluVW5IbkJucWhvMGhRaWc0TTFJdHJzSXpmcDZGenhTWHRDYXBDY1BCMTBJN3hRSldVb3BZR3haUnF5bzhFRXFmcWZJZWpFbDUxcTh5SE9saU1uUEZwOC9ZSkVMVG5ILzJ6c2FkNTA0TFoyTEcwTkljR3p1Qm01anlYTWJqMFdubEZtaytGQkVMN0Q3QmhLWHVlVWdBN0NBWEt0YXp1ekF2QXpSQlNCRmVvUE9GbWovOFE1bmErWFUwY0NsVTlOMi81ekhsWmlkN2wyMG9uc05ETnRNQXlBanBEZnpxMG9iYm9INy9pZ1RIMDBBdHRuYnJYTHpSSjVhS2xnL3QzUllPNUZjWEpPNVpIOERXVWYvOFByTFF4TkVqQ1ZnelRUMURNVFV1aGV6bXJIVkQ3L1dYaVlQR2E2SGZWZ0p2WlM3S1A5d2JaR1lFZS95RC9MYWZNTlZ5akRaOURZNmdFS2lYWVhjNUxaUXBJMU5XWVY0cElJa2xOVDRtZHdFNG8yNHNmaHBEeFNMekIySnVPU203dk51a1RhSzRVM3ZiVGNNMys3c2RVckRPUklNZ253TUVGVVFmelNadXFFUVFBTm5teGZCYmJrVHdXM0h1YmJ5SnZSUEJtNkNtb0w1R1ZsOERzSFhvV29raWIzcVNUSE9rOEljWlVnVjhkZEQ2aS9URVJGSzlnalRHMThMOGRqdSs0eDgxVkdpY05Kb0tGcXY5ekNSTUdVRU9WVkNaa0FwdTBrOEovVG82Sm5BbzI4UXoxclpCd2s3R0xuRUVEcEZEQS94ckx4NEVjS1pGN29ZSlhCTGN3NFpJRVAxNW5icVBnZm9ueHE2ZGZsZm5OQktrZkJMZWNoa1d3cWZFK3dVZnltbW1WS1BLRVV2c3NyZU5QdVdGUXZxODh3Y1ROQnlCdGM0M0ViZWFOYi9OUlpya2Z0elRBbHgxc05QdllsaU1qNWowTDk3VkVHNitVZTF4YUtWYVZLblV6NzkzVTBocFpmRVFBWVpKS1hlb0dSbkxNWWtvMDNWVGtnRU5zVkoyWkw5WHlpd0dUS2JYSkZieEJqdGVmcFVSUE9WSkU4bi9wNnBQZmhqeTdWWjFDSU1CYjFtald4RUIyWVgreVB4L29qQWY0Sk4xcS9rZ1h0R2xRbWtDZW9STm1oUlFEWmlGcUJsZDUzMkEzaDdWUGUybURaa0tXSmxlV2d1WEg1bDgzNFZJcXkyRXJTUElkZ1Zva1B0aEdxalJZejRnYzlPVVp1cjR2NWk4NFViRUREVU9vRm5lVW53Y1dld1RMVDU4VUJIZ1dPY1NLK2pKZWhpYWc2aHJTSXZxdG1OVjduUm5TL2lOcWl4Sk1JdWtpR01VVTFyMkhFYlVFSVBpdDhFM1VlVVdxRE1OY0hSYjBDWE9PdGRZUFhNYmtZZHY2d2IwWUx0clU3dDR2R1dMUFcyWVhobWR0YkhtQWw0S3dRYUZaaGxsdnc2OHovVG5VN25DRzFUdGtDQzdna0FCVVBCRTZJODBmbkRrM3kyLzk4c2oxc3dqTUR1Z1VjR2NFeVVxeTdBZ1JLcythcEpiNHE4MXNySFNGd0JXZElYdlhDVTZtNkVub0JvSFM3NjBIT1dsTlNnbXNpSzl0OGJsMVpWdlRQM3RZSkhXNW9ndk90eFk2aCtkRFlPajQ1WkFNYXY1RFd2WWlIMEZwblhRR3dZUGt4ZU9KSERLdG03OGhXMTFrMDVKbDBtK242RGoyT3BjWEQ3aExBOHVZMEk4MjVIOVJ0Qnk4NEVCMVplZExab0hVQVF3elBLakw5NiswbU5ncmJCcW16VDVqOXdCTDJPWlhiNlFGRFcxSHZReGRxTno1ZG9HZ0ZuRGFJdys1VGV4REFGWWxSdG1Qc3BaampSWXhCWFVNRUFReEZpcFpTRVYwMEE5TUZRaGJJdTNxNS9ITmxNUVpWOUZHaTltcS9hZm9UMldLY25TWEZ6aEpmbmlZWmI1Snpkc3cxSnFEWTVoNTZpSnoya2VhaEQvUTdTZVVDclJCUHB6a1BMTU93L3hMOGdvNWdoWTlkampGa0ROZEJiSjNMN1p4Q2JyenNZS2UzMXM3Z1QvNW1Iay9sSU9hejR1ZEFZY0U5Rkk5TjF0d1JUSjlXTWdXMlMyZkNzZUxqbTNlZGxEeWdFR1UxTi92QTJscG1sbWFON0J6d0toYjRmQncwNW9RUkY1Y3h3RjAweXRMMEdpblJQTjFJcXBBVkdoa1BpZ2J0VEJpeTh6RWJwcXQ1N2V6cUZtZFVXTEh2aVJ0NDlOdnc2OFNQalZTL3pjY2dvcHZUU05Ca1JKOUJiaHRFZGpDNUd3cGkxOVVBV2RjUEl3SjVqSGpNZnR1VWVHMFV5bFVBV3hFdy9HK21uMTREUmZCUTRZNG9PQkhvVndFdkN3TmpPVnZVRXJUOStZaElsaUIvRWxKMi9iZjlBcEcreVFMUUMyTE4wME1FeE5Xa3JtWjBYSjVPODFoSHdkMDJkTGhTNGx6QUtCdWJDMS9kYitaTXpyUDNXL3IxN3VWd2lpL2UrS01Kb2JublN3OTA0WDYvWGt4VURuNVVieFRVZ3hWYTI5Q0ZlaFhiNitpT2RxWnJQd21UbW94WkQrSGMwN3BCblBJczhRMjd0MUFrSWlORTNSSndhY2MrbkNkak1PZWNxL0tGZHYzSTVNbDBtUGhQUUZyU1d5SW1kTXhSclZWSlZhQlJ4Vlc2Slk1M244eXdJZmVhRk40RVo1UWpTN1p3bStzSThKY3NGSm9BbTFCb0kzUDg0Z1F4ZGhiU3ZHT3cydjNCMWMzUE55U0srVFR5VW5BUGpKdHpZTjBtcFBZUmRQT0lEZHp4MVN3VSsvUTZnUUpaTTA0aU1wS25ncThEUGd2U3FicWQxRm9hdnRoWXVUYUk5d2tqSE5MRUlQdWhtdjdBcjhyaCszdkxOSFlUWmtWRmRuY2luSHhoaUZWYzdzQ1BZNko0TGFLRmJxOEw0OWY5M1pRd3BwSWh2NnF6SUl0MG94a0pkTzZ1bThCYk1DVXpRcDUvY0g0c3pGRDRUUjMyOEtXR1RkR1Ayd3N3MVNuSXNiMHErUUtreWdEOGI5bVlwZmZQRzUxUjd1NGZha1BjUjNLZyt6Z1ZOc2hoTW16VUVDL3gvNCs1L1lZdXBzR2owMnFtVVo2MnlsUkJ6am00eFpBZnU3UUxBR3hheHpZdzVwNW94bks3Z2lKREcydC9VTWsyemg3Sk55a3lOTGc0NGZrYUlJd21waFZzM3hBUG02cVNOL2RtZlN5S0krVWVqUDlBZVQ1RisrandKL0EvaHJsc0hSK3pNbGdyemRMQ1NRSjVYSFdHZkhNTzVWckdXc2pWQzhVRk5nazRmZ2tvSXpxU3gxS3oxOFRkd3Z5WXhTZStUZWw0LzZsK1JYTFp5bVB0eVlWbUxmaUFKOU52djR5QkhSN1VKU2FZREQxaUNUWFUvdHBvcWlMTXRqTVltQk5tc29hTlc0RWtxaGMzVlp3MnVuemJhVjZjRmdscVVDcU9IMDZ0bWZ2RW1hbG4weDJVUzlTU1M1UENDemhyelkxMXFWdml0T1YrSkhld1NlM21LbDN1SjJ0eGc2emt6V1hrU1lSWFZJelNCMU81TXBWZmpQZFFsOExWdVZ5R3ViZUI0dXZ2TFhCUi9zYVkzWFlmNDFnUUtrVkQzQTVsZldVNldYZTlMUVVLUEFnNVYxZExDWGZYSE5ZNWlaNE1tM3JDdHVkMXR4eHdPNHV6Q0pVb2VGTHRNaDlFQSsrZUVaQ0N3OVNEem9DakhpWlllOGZzc0dLRWc5MVFuZkd4aFdGN3FaVWdTZDN6N3lDVUJWa1BYL0V3aGNYRGFPN0VUbDV2eEliUXBaRm1yQUJxOVYvMWxNT0tlZC9MRWtsc3VRR0xKZ004c2F5VzQvRytrYkQ1SzczYi9Ka0thREVRcE4zZVRIaVBZaHJiNHYxNEdSUE11N3F1WW1ReE1JSEpEeHNvbzV6b0x0WHdrQnM5TFhqK2IrZWZ5a1JVc2ZuMCtVYitKQUlEeW9pM0cvbXhCSHZUOGhrN0h4RUlyU1I1UzBFUm5rR3RGYnJTWHlkVjlIbjNXdUxDcHhQVFpCeCtRVVU0QW9CdnJsakt2ek5vQXRzNGNvYXhQMDhsNEljbEpjZW94ejkxQit1dDliRHBBUUoyNDI2K1dzOUplb0U4ZmY3QzkxbndRbHpaa0w3a0REQlBBTEJRMlEwZ2pNSXhsS1ArT2JFOU9rNW0zZE1mWnZ3ZmRhZ1VTV1RSNitGazNhMlZ3Q2RCRXhhTEpWNk1Sa1BPNnBhTVJDUUQ2UEhaRHdLMXVnZHhBTGFlNzJHb0VMT3paamR2akd2YjZnMVU3dHhxK2E2Nk1iaTBsWWE3RmlIQXNSRjM0WmFGL0lNYTE2TGZpaUNhODhSbnhNZEtiNTZobzNwSXk4c0hUalZDRGlYMlh6WGJ1NnN4MWZsb0c0cGt4dk1YVGZwMXNCQ3psQ1g0ampLZndNaHJqV3crTXBCU2YxaFpVMTBIZU1JbHBZeHRNclJNY0NzSTMxd0RvcmpIMitTY0JNeXU0Vi9oRUMwZEg3SmpESCtxSmZMd3NzbHpkMjdBVEFrNE0yYnkyc3hJU3NxZk9mT2hUMUJSdzdCUDhNS3RoMW13bzZFUDFTMFJWMXNFY2JaeThlVDE4RWExVVRLb2hlQ0VIZVp4bE1uR0dUYmlKaXJ4OEw3c3EybXk1cTlDMGtTdEcycHA5a2ZZQmxFRGpDMzBNbUFTUHR0N0pPL0MzejlxSHRWck5KZVVRYlR6S3ZyVzVPb2VReEZ0WXYzeXRBNW9JN0VnWmNWa0RpYW54cGt3TStRSlBRTHBpTlprRUpUWnYyZ3JqZVVHWC9iRTlUaXpEaXJ3dUpKbFdLVGk1aGo5Z0g2YmlxakQ5S0w0TWFuN3M5alRjNDIyekNaMnZTTGwrNG4xNGIzMy9oMUdNOTBHMlRPU0kwVXJKSFZRaHBPYVZhMHNUNnZITkplQ3ZvV1duVlBwdXVZYndqbEY2U2I3c0JLYUVERTkxbXdsMlAyV1ZOWjN5V2Z4MDZZZk1XaC92SHJrYmlpcmRibGFnU0N0dUxMMHlvVUs1QTFsNUlpQVBtaG5hTnZ0RG10VlJieXlOWExIVXJsZzlUZnl6ZmxiZFJzeXZFM29OVTJ3c1l3dDAxbnJ5VHVlbTBQQzgrUGlXemVFNXJnRFVuV29mVS9mWWVTVHB2czViMXdSL1dvWjlwOWx5NlNlSkZwUUM3TVMxSFhuQmgrQ0pYOXdaK0d2UnU4Zzh3dFU2R29peTRITEdIaTUvUmJEK3BaQzBhZmdlTHk0Qll5L3R1RWZ3UUpWRHlVWGFhLzl6a1pKR2NhcnFtSTQ5TFptZFlVNlpwUU9jeGxlbzl6VjQ0SkV0anFUOEducHBIM240SmRmOVRGRStjeXBkL01QRk9LUzZ6TkFiZUwwNlo2TEdrOU9KL3dtSFRPVS85QVVYMlA1aHlqdHVsV2FreTlsOHJ5N0ZJZWxyMFVSV082RDFXTnBQcm5Nd3g5T25lak9IUC9LK0R1aXNWZkZMRG1JTjJIQmtZV2lOWFVoYzZEcW5wSHFhZGtaVE1WV3RpTUk4aDJRZzByZkZQamdjdHBYV3FVeVNFVmcrTC9hL2NWS0ZyTjREbHphTkdrdElQRE1JcWdibFF2dTU2NDhmOWFyWTcya3dUOGo5di9XVWMweU50ZUU0a2t4akdMLzFiYkcvRVlaaEluNU9keGpUR2NpcmViNC8xcVROLzVZVGRTQkkzRks4ZHRIUk9hL0g5eHhDdnRQWHB0a29BUFlYVWNGZ1pEcmdkQUFtajZqZHFiVy9kQzh0ZmZmbGtUWlVoQmNGWm84MnRVQ04rZnN6a1lFNFRDTXp2UFFTN21RNUI3YjF6U2FSRWw2M2dHZXZ3L1hyVnU4eFlYT3J3dTRXdi9PQ2N0Y2R2ZUM4ME1jOGxMMU9yUHE0RmdKVWgrRmJIejdoNkVjTVExaFg2Z1liajY1dno2cGk5Z3Iya3pYM1MrUklZOXNrNFlXYURxZHJqdE52b2JCbnhhZ0NObW1uRDRYeDRsTklJbmlDUU01dUJjK0xwWnc1aEZ5N3EwaG5DdmgyeVpwQ3Y1a0NPSDdWaXFySkY0ZDluY3Uvb1hzRUhZU1BCQTg3MlRWRWpveFJ1VWVqcHZGQXNjMGhCVEpjejNITmdLNnVKOTljSFFyRDJPV2xZTERranBFemM0d1NjdFRJZ2RnMUVoUVFlc1g0MmhJQm9yL0RtRHNMU29WZ1E4cDI2YUovWUMvMittNWt0QXpUTWg5bFo5cDJ5RytpcGpQNmJZSGFQNEd2OUtpSXcvaXc0SlF1NGZJcGZkSG91WHhZYzNJaUhCWmZOWnlQaEJHdWtHOU1hNVhKVHlwTGg4eGg3RFVkd09kaURjeEx3a1FVN3FXSnFqTDFRVTZkWnZTM1ZXQ3NDNkpRNGVmY2xmdkNGTi8ySWhQQUdTcDlFczNoNWRISDNYRmFnMEZHUzEzRTU0SC9wOExwRDgxcXRPUSsxbkVPRGs3Y2RsalQ2aStHSFV6bnFuZnI0dS9TYStGRkhueUZndTB6TGFYQ1NnVTZMOXMvOXZzM0RNR2Q4bE1Dc0ViTW1uOXhMOTdRNGNhNXZ6emIreEFwaXpWVTdGcENudnRZMkduVFNGUDYwa1l2Rk1meCtJSlJ3V1k3eVNWM3MrSHY1R3NYQmhMNkhoVHJKZXFVdGJmR25mT1UyV2VUemtSbG1aNW8yYVg2TkZHN09EUkd4dmxlSm5GUjErWFJ6Smt1bDlaLzh6UTdNdURzMUZkSFVPd3FQcXhjNVo1ajZIM2NYNHZIdTV1d0VpSWgwUW9wUmVjNmFEVjUyN0Y1ekJzRUE5MEcxM3piWGdOMkNnK2d1SythYnMycjhxbFVpRXhPUVVGQ3ZGZ3hjWWNLTXg3VEdaZWJDZGhvL3VwRDgyNU94TTBOK2p6N1pQSmVMZnJIL0U4R1Q2UkRVWVduK1hNUURlczZQVlpqN3Q2dmpQUWNiRWhTSVBFZHVlSFI0bG14WFFQME8zWTloYmV5STcyQ0V6L0xQT084a1krWGh4V0VRZmRLRkI3R0k2c1RvVzRxTHFGTHJaTklOMCtUUitJYWoxZkxLM3d1b2RLOUphRi93MFczekkxczR0aElKUzBIRm1kVFFzNC81K0ZlMzVvTDhBSWlsSVdwSGJrMk9reE5KQUpkRU5weGlFOVlwaHVNblkwYjNaWHlkZnhhc1ZRbjhXL0Q2aWFUN1ZiTlBkR0FnL2taNUJlaS93ZGE2N1FLY01ISEpXams2TVBpN2Eyb0NWUmtBV2xzci9KdjVvZWwyTnM1R3Nhc0pJZU8zT1d1dFlMM3lWYnowdzFiTE1IUjRUK1gzbXNOL2ZreWNEb1p3WWZRVkRJYXJIVTZ1dGV6U29tZERjZEhSbUxxN1BnSDIremtPVVdWaVFQcVJUbFhqODF5cnVvL2ljSDFnNnFWdDlEc1c3TS93RUZDSWZCQjJQNGZ2VWU3YWNwS3ZwaHJ1MmJhT1poaWNqOW5CWUtRUTl1VGx6Z01CdmJXUnFUdUQ3bGZKK0FJYnNKNEF5cjh6OG14dE9EMjc0bVg3aE9qUDdmRTJta2x0ZHhzME1uUitjMzdPUXdmcHJuRmZGb2duZi8xTzcvUTFpM0s4VXdWbHBzUDhVbXYzcVhBZTZFRnRNSG1wUEtDVWVWWEhveVVZMEd6cnZXTkpqUk9CZVpXNUFFdjUyQjlWdlpSOGtFaGhrVXhTRkRkTGlVRGhrcVZPcU5acGdWdXFEREhnbSt5aE1hMjl0dFlIaktUZ0hNY2ttd0x0ZzU0UkR2LzhHQTNIOVBKZk8rRVBFYkt2M3BsTEZQNlY2UUFNMjVRcWIvMFdVTVY5TFR6VmVoUlduOG4xZUpQMEFkcUpEYXJTM0RjUmd6bGErRnkrVncvTlhNZjlUTmdSS0pyUVJxdVl1cWVGY084WmhLT05oQmtwdW9Nd2lOaC9BSzJSQkNObzJmMjFWbmdhUHFEQk02NGVMWGtGemhLREdyZ0VLSDA0V1Y1Y3R1aHp4S29WRTdqQnZOQU0zQ1N2dnZ3My9SK3FScys2VkpGcE93OGZXRXE1aTg1MWo3b0tLWGtFcURHQnU2ZENLVUd5QTUvQVd6QTdjbWMvV0dMV2NSUzNiS2ZsdFY5MmhNc1EvWkJTRlZadk1mT2dZNndmU3hVa3FOcG9ML2kvdWJrdERUejljOVQ2bmQ0aEdzQnp3dkxPRXJMWnB1OWtqT3JPcFVlK01GRzJsTCtBcmliWFd6bmpxZzBYRjQwUHlQZTBwaFk0d0ZHVW9YNy9GN3N3a1QwL0tHc2N4cHp6d0hJR3F6Skh1a1VKeWlzOEpuRU5FbllLNDBldE5QTU5MbkprakZSWmlCNG10aEIxNnJiYS9oTTdBYWwxalkvTXZNdnVTbFNIVFNkRVRiYU9kTWRXdzhkd2FhQ3J1cmg0cVFaNzNYN0VzL3gxMWJ0YVBuMFdNa2dZWmdYQTA5M1U4VUhUMk5qU2xJQStOcXl6UmpjZk9rUGJlWm8ybi8wNXBPTjVWNGlJWGNXTUgwSmNFUmZDTURHejRaa2tWVHZROHpZTnhqMEZneXIzbHVURllkMEd3NThQRllKYWl5cm5ONnBrWVhvVURzQy94WHJ1MWhYanlsdW1kWnM3b1ZPWTBEZWhXeWdua0p3UHFZcFdLQ3RZTnp5eEZySEtYRXFXOWdqZ3p2cnkwdHg0eEtteHJrYWF1NE1iUnRqN29GRkp5SWNRMWVjZ3I4ZHNtWEZZZlNGcks1OTYrOExaZWc5L2pWT0hBVGZyZDF5N3puRU5QNUNGWTdXVEd6RUdFUWxUL2crS3dYaHVKa3dWMWsyZ2M5eGdxay9SRldmek55TzhHbVlVQ1BTNXZwOTRrcGpTY05rM3hrYjExQlFVL2V6V0pyOUVHdEpDdHMvdkpqUHBWR0UxaGVERWlBZnE1elVVL3k3eHdRcXk3cXEvdjFjVFJ6eFF0SnhaeW13ZVBDUVIwMHAwUGI5NmZyK05XTS93aHFzMGkwZGZOSVd6S2NnUS80WjlCWTVIbTFUK3RvZUI5dWdtdDh6OFd2TGRSZXFZcHJ0dWs0T2hoTUo1aFVteThIN3FHa0ZkeER4clgwcDUzKzBieTBlSjFCTUlzMDExNG1NYkUzdGNxc0NTWVlwNUVDQ0IzY0tMemZoaU1qa1RWMlBDenV0czVsVE9INkt5ZzNibnF1cVB4ZEgyWnFaNHk3UUtuOUlYbjE3eFZpTHR4RTZ3TWZYMFVQQUlIQ3c3M0huTnRuY1M3UFZxdzRkOEdnY21rTExhL0JRVDdQazU2OGhQZ0l0dGF0RTI4MmU0ZmwxT2tyNmdGVW9kR21yNTltcHJRbEp6TGhJTlladURZa2RpbFZqdW53SnVPVFR1WWFaalU2NGF3dHRiMDlLZmVxdGJjREsrdGdQUmJSQUNsaUwxWm5DemcrUlh6Z1hsenZFbTlWWXNPMWxGYVdsbjJXWXUyNFBJZzZhVk1ZTGdtSnNmbHp4NTB1Yll4dXBWSmtqWDl4SExESks5QmZkT29vYnYxMk1RMUhsOGpodndBU0xzRGVGS2JDY2UyTDZnbzJVeUcyM3pWeXRNeDAyVUhBeXdMdXVreGZCRk9PdWlxQS8zV093TkZGY3gvdDhPZVlnM2FOTGgrWXpvV25sZ2haRkZ5RHZKWEo5U040Qy9TVnQycThPZUhJelFVUm02ZUNVTC9TUVl1blVLV1E3MDZhRkxONVlNMGIwRVA4YXE5Nm45ZjRNYWhFblh5b0FzeTZvYVl3bW9zVVUrT2RaYWgvWnRXR2pNblBpelZWVmV4Y3p0QVB4VC9GTjFVRmUvSVZNaGYrR1NiTGdQTnRUbWxmUlZKNVR6SjZPRGQrZ21EQ0ZaYTlEYXRqS0YxTmlDOEtxTFNvZ2VKNkRyMG9YSWN0V3FXK1BsemFVaFA5c05MbDFSNkROOTcrN3NFSzJ0S3g5VENqS0Y4Q2ZlRHpma0tnejY0eCs0em1DQnIxbW1YK1VwZFZSSVVLVGRnbUk4Q2J2TW1oVncyVWJYaFQvS2NMQkxFRE1vK0ZTVDcyOTQ5NUJlNEdVaVpzUGdlTU5WekcrRXlPZEd6ZE5iRU4vcUlRbmt0ZGQySWY1QzJtc2NndmxvcHFrcGtBUnVRNWwybStFbFk5QkttSGU4TmFCMVdlUTAzSlZnMTdSa0o3TW5peUlJcUYwc3c3Mmd4YzJsL3JVTDFuUlEzZW10NVBNZkx3cHJiMld2ZXlUckxVeHp5OXBLMnZZN1FKVXQxRHp0TDRVUkpFeTl2VFBUYlpjTlNLc3lEekx1R2FJYTlJSFBtZjdiU244MHVyS3F1S0F3UWgrMVcwWTUwczFraUFhOVZyRzB2VFVoWWh3R0FnV3paU2hVd1FFWGdJSWxKS1BPbVZWeEdoNzdmRTdxemFsKzB5dzFWaGpUd2x6eDAzZ2kvZm50c2pEbHo1Qm5yRWFBdUc5cGxRa0RlYjJYbmwyT0k4eTg5d2prcGgxZDN3a2hZZVpsOVhGMHU4UmNkYVMrUHJRekkyUmt5Zjg2ZSswZDZLK1d0RXpRZ2ZnL3BHOXA0Tm00akw2RjZwZzZzUW54S3E3MDZBVHp4N2ZRUnNIekRwSzN4MnAwWXBJNTVMeUt3OWF3UzNhSG8rOU1yMmRMNkpNL3YzclRpTDJjRkRuQlduMnVxVnczN3BEMEtmNElkdmlqYWt2RmxDdzBYaUJFdEZvZHhFSGF4ZzBSS1Y0TmxUNVBzenJ4aXZYR2UrSC9PV010eEtwVExpWWIwV0o1N2RPOGtOdlBRbE1uRmtsTzJiRFlmQWppZUFKbW45MVN1aU1weXVueVpCanl4cDFoOElvdmVpTWkxbVBPWW93MHFGQjFPb3RNRzIrejZibmg2V0p5cXdhSXR0TnpaMFQreTYzRWovdTIzczlRRnpNdTRHS0RtV3dFelAxZE92Slc3S0RwaGVVNXZMZkpjaEU3THNJdEF6TTF4QWZGVVRRZFVMeXQxSWtrcGs4U25KZ0dxbkJuM0J1TXljeFRNMW5vbFZmN2NWbnNwUnBNTEtEMXFzR204ZUp4RFJPZjVkWSt5QjlKQ29zc3Q4dUVxcVhIaHYzTWdHN291UDJuNDBBeXBHYWdpNzZTRXhVclpoOEtvU2pqRVFEc2VuMTNrd3hKNzNaMG9ob2xXSnIzMEszTlhnalVYMUxZUHM3N2Y3WU9jNXNwZUZ2cko5dHRLYnJQSFhxVmRkYTM3WUNsTEt0NVA0VVZDTzRsdmtQUUpFcHdvOG5FQWh2OHAzN0R4MUxucThtclV0NjN4YlJ5Y2g4dlZzYU52SERFUHYvNFBhd1JvZEZkMjgzTlNYdTFROVh6WVNlb3JpcENCdnp1UG5WOUFOTVlrZUd6Z3JodnNDY29jL3l0ZU1uWFJCcWJYczY5ejVzcUFMUEVodkpXUFhKNUcvMGM3Y1B5alVVS2ZBeVVHR1diZFk4TzZFais4OGp1WTZhR2RWeW41VTRYbW0xZjZMWVhtcHRBNDFtQjdhajhISEExSEo5OWR6YW95S01nR01tbkg1OUEyUlg1WjhvQWF4YVR5Q2ZkbmR3U3pEV2NVOFdvRjFZMDJ2bmVjSFA4YXY3VVVNUUFkRXZuTjVxNVBmcUU4K21GT1JBMkdibmpFNWE1NHphZEhFUXF0cGxscXB6dy91WHBKdGVKV0FRUzJJU2JBV2tScHViM1EzUVZEYkRYNkVBaDRVTi80cGF0RnRtRDhTTnRrNTU2bVR5a0tKMjI1YnhpbmcxNEZkN3JnNk42MGVLbGZOMVhhZUcvU0dLR0o5NERVR3d2b2txcDFiQ1NpNC9Zd0dxRDRMc05UOFVvTGdpWXlQQzN2OG9PQnBocHlaMDJRNlIvZ2dJRCtVb3JKcjMyUE1ZYVpTZjJuQkZDMFBhdEkrRFM0UXBXTHgwcElMOU9JYzdJM3VJVm00RE00UGR4RHJtOWc2UWd0MG02LzJlZGQ1cWJ1aEREOU5vakM4cmpocWFqWlY0dFlhSDhKZWdCb08zRjZDRHlkWEh2c0JmSEoyV2oyUkZlcnlaQ0g3eVBobFdHejhqVEVHd21RR1MwTGRyOFdtRmVHYU5Dc21zN0t0T0szdmprL0xscmJPV0hlMkRTNjBETHpIZkZVYm5JUmNwRUF6VGJ0RGxiZzhlMlpQSDlMTTJ2V29iWmVPZkwyc3hGYThJSjJyR1dBR2FVUXkyTVBJcUJsdm5PbS94N2xqODZoQjU5LzI2WHIwRUswamZ0SHMvcy9QR3g0akVxaUU3cGoxY0FwYVdzR3piMjFOZ2ZkSkVvd1FUSWh5OU9qNVdEV3pvNWNIZUNoSkF2WHluMlhDOGtjc0RUTWJIWUJuNmltU3Z5c3YvWFdpZkc4eC80L1hOcTlJdUxkQ1M0MVIvcVJlaTYvRkZDUTdqL0V2YUFsNFBtVXFEdVUvMTVDd3BiUDFtYlNpTUltdkkyZERBdis2TnQ0dXFzR2R6Y2J1MVJtemlucWZvdE82RXVIalZPeENrQVh0MkZrMWlHZmJRS0llVGsrKzFia1hNRlRwOFdrQWt0dXB2OGJvNXdRZmpxVWtJYjYwL2JvQ0k0WndIZzlid0dieVpLTEFRR0o5N0V1L0t3aGdTbFNidTQwUzJUUnpyNUVzV1pUN2lpR0VIQlpsVzZPUVpqcGVSVUJYTS95RTkxcGlDMnQrSXBZT2pDSVZEaFUrOGlzcXpKZDR5ZXhXNzBXQUc4RzZTMFBvVlBiMHZzWVF3K0NkR1lRb2g3b001c3VsSlZ4aDBEcGx6M3pDY0tkZUZodEU0Mk9zN1FaQkpjbExNOGRUOFdnUVZYbGh2NzRKTlBXUnZrNlpNbW8zREhQakpnSTBMcnlSaDlkREdkcDhwOHRvSk0zbUZBZ2xqRnN3dExHNk1kY3pOMm83bnJQRWo3bHkzczZLaUs5d3cvbmRGVHFVQmNLbTROdE0rZEhRMzZlT0ZFcWMvRm51UExPbUF3emtwYVBQZzJ2QUsxZURyNzRnajJJZm9ZWndkclJVdFErbVFqUjI2dFdiVnBIbC9La25vTXNRSDdQNXhTcTNlVkxnYTNDSFZjck5kWlRhN2lrL2V1bFhVazNDUi9WZ1RxRDZZaFBhZTN5S1N1ZktxL1dxN3F5Z04yUC96WW0rdXNQTklzaGFVWTRvRnBHVW96bUdDY25mUjRQNVBzeFFEZ1dBVGpHN1g1Vm5PMHNWUVVCUGZDTEM2UGgvMmRDRGhKbkM1YWxKbllaOTN5SHVzTDBRR0piRUFLcGFQVnQ2WVNIYW9MWE4rZllyY3lzbjN2V0MzQ3VZRENheC9qTVRHMTA3WUZ6Zlk2b0tMUVdIUERqWktXeEZrbGJQSlhkT2VwVE12V3R0aEEwNSs3RTFHUk5lN0lxRithSTVtTzVnQ0VCWXgyYktyR2RWbmlzcmJ0N0lwZTlRbGpvWjIyQmRoY0oyL3RTUVJhYjZ0dG5YekU2VVVrVTVYKzM3NTVYbVVzcVcxWUFNMnZXR1A3dVNhbThFZDd4SVZkVFVCTlJwMDAyNUdkcytoWGZKamRQZzRsejZGb0hNZTdoQTgxWjlSTVZ1T2pJU25ZVWtlcWwwaUUvbEIvR1VuK0Y0aHNaRlJmbjVXQjdHZzU2TFBiVzZMdDBRMWdkRzBVbHNWekxJQXg1RkwzNFVESUd6MHRQQVptL2lxVVkrY3g3UHM0b1d4QVYyTTRYQkdWc0RsZjVTNU5pL3pURUQ4MGp4cm1Ia1hjbXU4ZC9vdjgvaW9qWEdWdjNFYVlKcjNIOFFobkdLeHZSa1pIT2dHYThuUzc4NkJVb2pYMzJaNDRDcmg4OVhTZlRGc2FDRXhRd29NRFlzVUo1dFhxdlNDR05ISlFyVDdUMmVCbDIrb1hxdTl6M1N3NmVIcC9ONGVSZVdmQURxZVlwc0F1cmRxaWxiOW13NDRGbXpmdG9YYUtybXhhUms2ZWhpZVZNU2lDamhhTEszNzYwWm5CR3NrS3ZjNGU1b3dGNTdQU29BTGU4YTQ3NW9HZFNZK2hoaXIwTlJRaEJoTXZEWFUxM1NBMEVESmo0Y2xFZ0hWc0ZsT2lCNThUWU9GbFVUeDVQK04yUVZQNHB6dXF2TDdxRjNJbmF1U284dXBSLzl3M2hDWml5MlptLzJzUGVRK1p2YVBJa2FJajF6dUhSVDI0WnRTbDdSTm9yVHdkbHM1ZUlYRjg3bXpkdzJ0Q3RCOExoNnE1RzdNci9laGpadlNuZ1oxd2VmVU95SmpHanEyWFYyQXozelh5eWx3WG8wcjhuYUNWTkNTd3Q0TEtGN1N0NUlJMGV0N1ZHTVo0ajY1WWsvS3A4KzdkZVQ0eld4VHZiV2VhKzNUcllmYkZ1UVg1ZXVKRjE5TThBN09pT0hwWFBNY2txbmJDMXdJNVQvWkY1YmhrYkFhWDlsaThTZk9IVTBSS1hNVnRoQXRBUzZMTFhXcEQ3TzN0Q005ZlFNUjYraVA5VDkrNFJGZWNSWjVqMHlHNjBWQkhXYzJCSVBzZEdlTjMvSk9aUUpubnlVbzI0UVBxOGlRaHlsL3RUdjhsLzZKNDVDWmlwY1R6ZGFWS0Rlem56Y3JjekJuTDljTzBiV2hmc01sSFFoQi9maUFHazNnVm5VQ2JwT2cwZ2VKZ3FrdUFaa0FReU5CTUE3MjdveVhqSFdkaEZLRzB2Wnp5SGhQdVFXUjBHRkVDUU1zNHpRQmt3dWdWVTc5cmNzOVZaYkZGNXB3T01vRTFPR0JRZEM4ZFdZNktQYTM0LzRCaFpIRzVmUndRM3QxamJUMlNEa091Szh1djFrZmt3akNNTGxPUE1wdWsyS2cyVkZFSC9YMWEvbXpQRGdZZ01KNWJGS0sxYW13SXdzT21PUTdBTXRyMWFLRGVzSWJkekZlOHZrQ2ZYamNvRSt6NUNOQzhyZXhtZXl1ME12Rms0ODFtT3kzazU4czRTOVBCc3lWc0duRGpKbGZZSHpPbVIxM2t1TTVZbnJRMWtVMHdrZWF4VzlTRG0xdEw0TWU3OGIrR3IxUzJVeExqZDdCQ1AvdkpJK290bmxHM0tIUGxDaEFYU2xsMElaVWJudXFUd1FaVWRWZE5yVEcvZUFVcU9mNENoVCs1dWMwb2xTVzhRazNHY0lRRXhwVHZmaTJmUXR3bU8reUg2ZVR3V1JEa3BSVXNxTzFLTm5XRzNMU2hqa3RMZkZDRktpMk9laTdicU9PeHdELzdwcCs2SjNLMGJXL2M1OXd0Wnd6WllrdldDeDh5ZUpmNVNxcVJMUFNRZFVRbWF0d2VNSTVXN1RkV1ovT1JpVE5LVUtaVGtneE9iNzdudGJtcEVIbzRjYVc1Q25BekFCeGdDNVBRdWxhNXJNZXE0aVg4Uk9DZ2RsNFlYSW4yZWltelRNdlBPcEtZTlJTRTM5bjI4UGxERDcrSlArUUt0Z0NzdCtmbzQ4Vm9XcU84QmUxQ25PbStRaFMwUEZNenh5dHpXNFdjMG1rbmt2cmdCcnJWOXBUS1BBTDBZLzFNUHVYMDYvRHlhbXdVTzVNQnE4SS9XRldKTXhpWXdxREhSUzJSaXhDTjh3U2Z1WUxiR3EyajFmYUY3Y0xVajBDUU9aWHVTT0t6aGFYc2YvUWVmQTBSaUNDQ25XWG5iSWpQcVozUWlZckpMSkFZY1NtTDNEaHJMZm5uZU5FTWt4MnlrajJIaFhpanQxRzBIWW8zajFJMk9Qdk1RMDBsZzRNTktNMzl6YnVvdStFUjNuMWxUU2QrUVNWTUJ1c3NyTnhvQ0RMTE1oVUxlM3VBUmdSaUlqMk12THRBajdJek4zRDI5ZCtJZUNNM1NQT09NOEw1cTdzSC9McTk5OXh6V0MvZjRFMi9zREs4eTJIY1g5SDQvMU1OQTVXRE56c1QzYUNuYlZrMDZFUFJWUFc1WnN0SFdZamhGUjRKRjVuMGhvZVJpZ3pUdU1jZUFRNE5EeVpTVy8xLzJWU0ZSL2ZiUVlxaFNHMlNaUHV3c2VCZmNYUHhUSGxmYWhlckk5SU8rV3RQVzcrZk5BTmxEbDE2RnJyeFhFNmhmNjV6QVlGMkVBTmViWmY2ZWpjcE1SWUkrck5qMk00dFlnaDVSZ2NVSE45OWNLMWxibno4eUJ5eE96VnVzZG9lL0tDakkweXVLZGcrOTVYd2FTbDJkZWFoeVVlUDhlelZJYTNGYm0vY2tMeEwrN0JoRkRrTjNvR0FNeDd6VElad2VrRFZZb1p0d0taeFE1Zmdpek45MHRMc01FUERWZmVjUlVCM2hGRW96OFFVQVhGeVFjdEVOc09hTXNYYkNLVWpNVmNvS3QvZm9sR0xlaVoyL2RhMUxHOGllQ0drb0p2NVYzdUV0ZkV6ZkJWZWlidElxcEZWYXlKdm1JK0ZQb1dYVjJPc0hWVVlxN0NaY1RVL2lMZ3RNQVh2WllDWmFKWXVodEZsWDJGWGFqUEhIN1F5bDg2VHlRZWZzSmdibWd6Z3RnSUQ4S2lpdi9pQkJ3MXRhTkZkSGxpQ2xlNThKUTlDZ3cwTEk2TDNtNVF0dkgzSFNaSGU4bnFmYTlXSS9xZHJsRXoreUVPRXhiR3BNVTZZSE1wNDlYMjcwV3VsQXlBamZQVzArK2U4d2VGSTVpU0l4K3ZWcmU0alFJVmtNdkYwNmZMemlUUFBzQzNEYk93R2dIMzVrT0E0eWZkMUhMZS8vRnN0aVJob09CUlY3S0d6K0tRK1pIK1A2SlBaeXBDOThVUFI5dmNub2tSL3NIamh6V1pXWTJZM0ZBbjF1R3h5aGMydUkxTUhuWTJNci9mT3dWTjhoL0RMMTRqUktRa2xXdHl1Wjc5eXV6Zmpndmxrb0dLeDJNOUlocmVHZjlRVUNRME5VRi9aSmlnR25ucHcwdE0rTzdmZHd2eVU0emR5dHFmdTRjdG9DcGVUVTFoYVRXaWVsRjFsTWtBTXFlZDVYSG1CRlo3WVgvUTdZdU94TmM2UjlJLzhYZmwwbkF5VTI1QmVkMXJtV2lwSkVnMHV2Ri9SVTZQaFcxR01LNTEwQi9VWGJFUEdTL2xleU42eVduR0xDQUtiN2d6cXJkaHlwUTlHVXI0RE9BKzRETE9WNkNYVzgvQjhmSCttVW9OT0JLNlQ5ay9WSVRmSkNudDVaNXEwRTdja0l1bEpIWG1IU1pEeXFiemJ2SW1TOUJuV1JkRE0rVkg2dElwdTRqeTN0K0JLUXdSRFdBU3pUVTZsb2t3S1lWbHhyWjRhRGxmVEZub2lROFU5eGtUbkozY0QvS01GbXFWWmJQRXByLzFrUGxVZUh6eTFIS244VDVxRVVMb2ZQbkY3a3E0UjZwWXpIMnoyYnZMZlRSTHZZWEthWG12OEp3WDdXL1lqb2NrNmZTeGtyemRXbUF5b0RIdXJBb0pBcnQ5Q0dvQmpHYTFVdGUxeDNLdGpKVy9BdHI1NUs4M2FXYythUkE1RjFqL2VpVmMvbFlzbTN1SXNVUUhLQmhBcEphQ0JpMkszL0thWUo1UVRUUy93ZjdOQVhKTVEvMUdYcU1keXZaODRtcU5JRXNoVkJwWjE3dzAxbWdDZ3JnWXNQWTBORlM0WGpzTmF3OExnOGJtMW1sS1gzZ2NTdEZDWUdTcHgzdGtqZFdGZWFQdGVlaE9GVXlya3hnZ2lBd0hwWkdYVmNIVW9rRVNsSmQ0dmhINTY2eS9veGx4bGEwWktOZTdoN1gxa0dCTWc3RC9FYTM1d3ZKdEtzYTFTUzU1b1VWUGZLQjdNSEl4alB4NDRic2xoZ2VGRzJDSHkyam1QanRIMUcyZEpGbmxjS3FYRnk2Z2FzSlhJSGJhZFhIc1NsUU5ycHZwRVBpYUkyTGxKNy93b0lDSUdBeXZCMWx1NlZNUGVCTWsvdWFuRFJFaERPYksvVnEwUFZDYys2TldQbGU3R1pGT1I4R0Q1eC9FbjlaS2RUWUJTU0RPTUVLemsxdWVseEJ2V3JHQ0xnWUN0QzNwVGwycDJkMnJ6b0x6U1JSMlc2cWZmaXpqTUF6NkJqWkgxOTJaWEhwWFE2MGVHUGVJSVI3QjFKeVU5akorem5CRDY1NWFDSGIzcmFVd3hzYlN2VEdPNEswSHFtM1d0ckJpbGNGZ3B2SzhaY29Md09ESnFXNFp3b0Q2V1VPdUtEOE4rT1dZbDg2UVdLbE5xbC9xOVlwbWhUcDNhOUM5M1I3clhucFplNnFhc1AvcnNWcHRMSzUwUWJKVW5RZWFtZ0htLzBiR0c4aCszUzZvVFF3SXVlYVJjSGwrK2hBOWI2TGNkdTJqaDdCUEtKWE9QMElqaTY1SnNXby82aENVc3R1YXo5OStuL1NrdTJDbTdCcEpWVTZoK3p2OXNjTGJDcVVPdTg2U2NHcnRpeERLSDBuL2NucVFSU3hIdythaURGYk9CdVBLZXBzRU9xK09NYWZpU0I0aEJMbkNCc2hvU1g4VkJpMzNwcHZyQ1VYdVpSZjZTM2oyWFpmRHpIeVBZWXNTU2FBUE5pTFNaUkdLaURVaXFlQUNKSzJSQ2J5TzUyQld1ZzJLZExTbzJKOUJpejV0bW5QaWNmR2hsSmt3UkJwUHVDMU1XWGIxanZhMkxTK24yb0dFZnpaR0xNaU4zaHdURUMyU2dzQXFzOXZMSFVnMHJWbnhPdmNsaEpJMjdxQ20rSFZTTE5nS1dDWEROL2hoenpJS3BmTWgyL1V1VlZhdFFSeWRKc3lRbWJoaTdUTG4zdHFqZVpjc1kvaEJYRlpHNmp4SUNxOUs5R0dDeFFLUDh3OVd2R0ZVTyt2K2xoRHl5SUVveGJTZWRmR05kMDJqelB5WUJUeFdvZjVrVklLSDl1Qi85YlIxZEJnR3puZmJ5bm1TS0lsSWVIZTBnTEg1YnlvMkFLaVhPaFNBZFFFSDdyYmc2V20xNUFBK0ZJK2RXbkVEZFB0MVU5QWcxaHhCTGFCUXJLcEdlNDdCRjg3OWpadzdHY1I3TE8zaDBDMVRoV21pcUZsTW1kK0RwdVhRbWFSWGpNSjlqTHZramdESGpvVTNNYmlwU2I5VkM0SkpBWUJMcE82NkhzWVpXN3NjOVhsMWozdWJXRTgxSkd6NUt5emYzK1BxemthbmFZSGNUTzVxS0hnWmx0d2NHTWM3RkJJQ3NucTBQY3ZyOTU4K2UxZFR6V0twZmFoeUlzWlVJVXFoZ3NXQ1lqRGJYVlFHYWxybTJCSFZ6OXJrKzlvRTNUNkozcWJwaHVBQ0luRk5JSjNNY1EvTmJmYjhkQ3ZMVnY0WmFrVmN6d1ExZzhLbFBzc0dhMGp6VHVxSk15ejJYWnRoWUJQalV6VmRvVlpPYVc1VUFXMDN1Z3hxcnc5Yll2djZoR203ZFBHRlFjREhyUjV3bEZEbmlDUG5hT1lxQldLSUNPWkEwT0w5Y0JkL2lPOVkwQVZZemFqYzlxT21YR1ZjVmd5cUVOZ0JIZENka0Y4bU80TGFUaEdWa3NSdkpNLzJ4Nnp2cWRreWNrU0ZnWkg4bXRVZWZwRHZWcU11UnY1VmJtc044VjZNeTRXKzNBWGp4cGZjSlNJYlR3Njc0TVNZdWRRbDY5d1REL0p1TUhMWkhmQm9nQmYvSndoZmh1dS9GNC9jRmRSNUJGT0J3V3ZCNXZQcFNEZU1XYWhTdHlGa1BXay9UNitPc0Z6a3djejY4bHlKKzVXTkpFbHowdjRJUk15aGFmZkhTcEl1YjI5dFY1aUtJSmFDME1yYXVobll6eWUwVTJwYkppYUE3NllqVzJGZHBkcXVyQlRxcXdLL2RENStMYzdaV0lqN0dGS3JFMytBdVpNVGh2K1VQUUp5dTcxZ3JjNzNKQS9wbHU0NkIreTJKb1dIRVpwRC93aUNJS1Y2bHJGVXBEQzUvUWRrODRyNzMvY3BWOUxZMmsxcUxvNmhqemNtMnQ4djhkWGhoUlpIN2NoNFBSZ2FKWGxpbEVZUlFrczNUZ1JmQjMzckYxNG0wcllrUTlTLzVqZlo4SDI1SzR4Ukt0OWc1NlgrNFJpTGVQRm9mRHhMOStrZFRFcG94VjQ4MlV5S2FkMzd6Wjl4MmE3OHkwUWtQWlFsTXFXdjBWc0g5eGwvOFU4NFJOdTNxdmtxM2xmT0g2VFNhY2IvSzM5UzRZK291Wm56bFFZRUxheXFjQlB3THlSejg4OFMydWpXVEUya3VVVHU1a0NGSmczWDRFSWo0NGI2SFF1b01KV0l3YkxacEUrTUFUbVQrenRlRkNUT0I5WUI1ZWFKYWh4am1DWEI1VDZBMnhjbGZ2UE5abkgzdUVtOU5vNHZvbFhBQXJ6dUlzOHdEeDE2Nm80MktGZW5NbC9lU29yaHpBYU1qQWprU1ZKbVFmd2lhdXhXS2JNV3dFVDJiQXl0KzhxcmxJVEtxZGsyQ3hEYTVsdmhBRmYyZHY5alZ5UnAxQU85cmVmKzZHaEtHYkpYa2NndXRsRVMrMWdld010blE5bHNzV1dlNzcvMGlza1I0djJPTVVwUEhDbzRheXNOSS8xdHRwaXFxY3MvdHM2TVN5d3V6REhILzdaeWVlMlVteUg3dDhqMWhScVVVY3M5MmQ3YXRBVE5rS20wY29oamRCaDl4ZWpvVTh6THk1RnZlWlNXeHZ1U3pqQ0dOODRkVDJZQitWUFZBNzcwSnVqeERZeElnR3ZKZkVnVXkzZDEvdjZ4UXpLSmtEOWtXSi9HZjRuU3p2ei96eG5TdHM2ZlpCL1JJYlVCbkZ4MDRYcUZoRE5PTWwyb2hRUDJTTG96TlZyZTQ0RVZ1Ris4ZGxTQmJIaU8ybkNCRnRkTVFNeDVMRU5oYjJhSUx2dmlNbTZ3ZTBaZTU2bXRhUGlPbTQ0VTVPYWpQbytLQ1IydFNrVFhzWHZpKzh1TGJSMllydVlIaG1xSVZiK2dGeWJ0ckFqTHdoTCtpejRLNGtkM3Y1aGxjLzkrbWpaazNFQXFTdElmQjJDdTYxc0dLejFqazFRQXZ6NUhqbDlwQUQwZDl3dUhtN3FMcUllQlQxUzJiZlN4STZyNVlpS3I1azJwQ2VoZHFoSUx4RVd4QjlZcktneG93cC9OODBNWmg2L3dWTUppd2NxY2d0ZDVDL1Vuam1CNVpjVkp0bGVQa0EzRGlLVm5UVElMZ2VCaFlkVE9jVU1DSmVnZHhIVEQvVnU5RnlkNEhFb2JLTVlDZi9aR1FQdmV0aEhCQU5xUUV0UzN1a3hZRXJjM3IxVGtRWUp6bUFzdkN3VlFmK2lvYVdaUGhRWHM2eVVocENtUDA5Y1k3cVkza09GaUp6TTlHeCsxMFNIVEpUUXNYOThNQS9UTDNxaDVtOXVhK25rdGxGL2hNK3VNNThWalBSaitaYzRTNjgrVEZ0RjhiclZuQTJWc3BVM2d1LzJuK2tMeDZ2UktkY1JVcEorMnBOd2dFUDdPdHJUaTNRRXI3U3J5SFpFcGFKRzJlYjNsRmJDVVE2ekIvWTE5MUt3djh2QTQvU1o5ZUhvOExDdGIzRGY4T0htUTJnbEtTOUJSbkU2a2FGVFpmdUw1Q3VLV1NXZDhEMWZlRG1rTWdMMzV1TEx0NEIvS25Bd3hOakRRYWlGMnBkUlRNNFVsekVJcWJGYk5NREFHNFRLSzkrOWQxZG1TY0lWWXVNRnRkczJuL2IxdDNaYUdNL2k2aUJueHdqeG1mNDB3SjdoNDlFWEJSQnA4bmVSNmFhQStqY0djc2hudVpnUUZwSzEvRDZOb0xPT3RwaUl2MW9yWUtUK0phQnpWUTNFa2hoUHQ1cG1DTVJ1TFoweVNMTjN3dThacXpDR1ozV3JXNGpleWFUeXVuREhJc0twbmxMM1dKcnJJeVFzemtpRVlEckVhQzlVNVI1ZDV4Zk96dm9PNG54ckRSbUdpT0YvSEpGM29tN2FJYXdUWExTNDRwemVVT1JCd3I1RlRURHpKeVdZRnVwQ0pqSWo2ckVRMlllR2FSNVIwSzlkT1NrREsrUnBod1cxckEwODhUWUNNL2FzTkplVTgvTE9DWG0wZWZiV3dYUHNhRGc4WTFtWW45RVVYQVY4RkhpY2R5cVFNNXp1aUZtR09IQ29pZkNaQ1NHM2FybmprSCtxUUxjbUh1WGl4U1dtWXNHZi9GZjhxdmZtL081cnRjUU55WGJpZGtPM1FSUGpPOEl2NXZ4QWR6UU5PQWNwbHcwQzd0TWJYd3pKS1N2Sk5RcWpJWGc0YU9XaTBjbzNpYkRoMjByc2c0dEZpTjQ2RlVHTFgrdlIrUW10N2p3VHpLdlc1bUd6SytGaXQxTUtDeG1jNWZSUVpQV0JjMC9jbXJ5UWhmZTJJMWdDR3ZUL1BLU2FiZ2F4ZjREMERrTkNKbS9WT3NOUkMxUlNyUlBCY0dmb0RmcVlsWWg1REQxQWhuWTI0LzBwQUNzVUFiUlpBeEVBVzFXTlh6SXNrMGNyTzVQUDRYN0JHWGdtOFQrWHZmN1lHMDRWakE0Y1pHc2JsY1VkSUJBaE0wWFdidFBaemJRK3llMmtyb3pIZFE2bDVLVFdHSUwrblpNRWR0WkJlWmgvRUFId2hKU0JzUlRCY0g3WURrRlcrbEw5M01JM0tpZFFVQmdhRVF2V0pqNitDU0NvMlV6MGRVVW9KZVhNdk1vSzlDc1dyY0FGMklhaVEyUm83OHNZMTQ2VE1Pa21SS1RUcXU5Yk1SS1d0RE52OFVRaVMxa2pXcHZCcm5UemVnaEJKUTl2NWl4OUJmekJ4ZkpHQ3h5Sy85am5aZTN1RVNZalVhTUFEL05ONlVxcUJLSFg4VE1VUGJKL3pDRFpyOUtZbjlDbGE1RlJGdHY5RFlEV25nSG9kTVQ5ZGN5TXMxbG1FZkdacTNhekM4SnhIdXU0Q0NRYlZqZ0pybDZtTzlxdG9Rd2NsQTh5Uk1YUnhzODdPditCSWFpSjJ3M0pFTEFVRGJRb3FxN0JXNnpIWm5seHBZSWtDOG45QW5iNldOOEtIbkhUOXgyVG4zNjcrc1NLSjFxU3JKSUl5b3o0MFdSQ1g2WGVQaG82Q29wVlZYMExkdlZiZDRwTG5FL3BzZ2l1ajJOMWVENHFDYlU3SkRoaHZVYkRKcFhLU0o5M3gzdENBT09xeHpVRHYrQzREejU0bzMrV3hoZ2I3dE1qUnphbDduUE5DQmlCSXVhNGprb096Q09TRVZCTWxIcGxsdVJSR1ZPK0dGQ2p5NlFDejh0K0dVQ3hKajdpQUt0ZG03SHFyc2EwSXorekVsamNNNys5WXU5WmNyN1dGM09TQmVXeFFwMXJvVzM0YmNlbUw3dlgxb25ZRjFjeVNyVSt4d0FqaE1zNEtJTTZzczhreHo2WlpIYTBFbEQyaHFYY05HNEd0UWQyZUNWZkErUEdVaXp6TFA4WlE1MDZ2dG14NmMrM3FuRVpaWFozYjM2QzVzamVrTWx5WVNFVTZWVDFmNzljU0ZNUG5aQ01FNk1zWmd4YWNoTEZpckZuWFZIMEsrYmtNcy91NzU4bWJPSjZwZTJvWTBIQ2RLbEphbXZUcTJjWHgrUndLTXorZFIvbFlQMjNhRUkxbi9iZWpJM20vekd4eTN4SzJ1RVdWMCtmc3oyWDJYaWlmTDNWWkJMSmk1STNLVkRrT0I5ZGE3b0M4Q1M3QnZyYzlSbVlXUWc3bDZ4VHp6WXVvK2QxTkhlNXNMdUVWSTh6V29ONDh5U0JDSFdaTi8zelFkdUdxWW9EVEN3Rit1bE9GK3MzMW8wbU4zL0ZBVkU1a3dvOTc4M2tMNW5ZT0hqWWFVd1VGZ3BqdEhxdGRXa1hNck9DTktkS1dERnp6djV2ZVd2NkEvYXBuUER5WUhMOVZTZjlEYVVRejNCaUs3elVVUWcwOVRJVWdLQ1RVNTAxVkMwbjlicFJmbS91ZlhMYTc1T2F4L0lGUWRIalV0WEFvUXAzaFJOcHBGOHFsc1JNWEc4a3A4QWNOUk5WMGNsb3lsTi9MRWhLc1JtNGs5TG9xcDRlYnE2WnFQT0NpNkNRZEdKTHJsZmhFVjNTc1FCdE9Cdk5FZ1pWTGtyT29XS0prcUVndDFMOFNDaDJ5STlqTFNxM1JSTUNqbzhsVTJxdGovcUpqenJpQWI5VGRIa2NoMTBPV1dIVy8xYWdreHVRV0dNcldHYURqcURvYjd3bGdFMlo1c2tlK3VTeHQ1NDRyUlIvcEVjT2tRWHNLaklSN1U1Z3kxT1FteVZGNGlxelhnczBSNUhXK1RPTGRyVTlrREFGdFR6MDBGYVlMWHhNakV5dW9IcE90T2d4elYza25NQnhoaGpFeVdKRy9DOTJia3VscFZJd0FjODBxRUt0OEkwa2ZvZUVlMEdOcHJtREUwRGtGTWI1cDE3Y0tQcmNmUE9qRW4zMTZnMzZ2Zy9WK0RpMWNlWEZXcTJubFpwQ1NvVUNDaElqNHFuSWo0Zlo1elJuS1BGUHN0K3VaUTJDQmI3cEJ3MHNHR0FVT2w0YkxLWjJuVUhSbHk4SktsVzlvZkRDM2pyMkZjaHNlQWdRTDkveVJxSEVyMHR4OGkwR2hQZXU1UXdGbjlEV25wbU1uZGliS3RxS3hVdkprWEdRVW9sd3hra0JyNUNPVzlROWx1UGx2c2hrWFdKSGRKcnk1R3Z6VUQ2TXU1dk92d1NDOENDODdpSTlZK1hQNHVvSWtJWWdvYXA1WXhQRm1xS1dSUFN1N05vRk8vV2Y0Q2lYM0RjUXNjTDJYVXZWQmZjNUJFS2ozSG14K2VOUVloTGNpK05wSUJIMU9nSXhuaGthdlRYWWlQNkwrOGh4Zkt0Zi9LWFZqM3lobWtYYVpkc3ptZDh4bzBqSUE0RWtRN3pycUhLY0VyRjRMQ0t4S0Y0YXBFZjVYanJ0S0prcU1ZWUlSRGdldWRkZURjL0ErSzFtQ3RpSy9zdjQ4VVpYWGdlVEVaYmJrS3k4UkFtcUowZTZheDRsb2J0c3BqYVJqYkpmQ1RVZ0xVbi9WNkxhdDBKUHdzR3lsWDJrcmxEMUxZbERLREkybnROQUZxL25kNzZyb3N3TVoycHVvME16RmlETEZ3aHhIc2F5UXRGckpkZjhkWDZXemI0V20yZHFyVDFaMG1rOXJiT1lGb01IY3F2SExuYWVUckMwNktaWURzQlNrcEhNeFdVS2JxOUY4OVNpT2NwaE9YWFQ3bUtTSkJUdXl5ZVp0ekJTRU5nbk45SURnYWZXQ2E1QkREL0FaUVdSVUlXRUVwZElsUjBBTzNhbUZvQnF6RkZtNU1FOE5IZTdSSXZldEg2S1ZBWlZTcXdOYnplaTlMSkU1eFJkaE0vRVBXN3pTVDMzeTExV3VSN01xTXJNNTh5eEUxOWhqQ2syUmlueXpPNzgrR0FLWGhtV0FBVDl0djU1aWNhUDRBYlVJTHlGQVJuQWppNjViVnNqdkkyb3RVTzBOcVRNeG8zbUtXczNXdGFTR2daK0JGR2pKMDlmMFlZOG04Y2Z5TFZSOExrQnRpeEF5L3FXQUdSS3lBeFREU3JDV0ZTY0ZvUUUwNDd3RXdGVndiblprTFdDdnc5ZkNTQ1B5Z2tYU3I1blVZYVBDaDl6cHkvZllGR2dNWVFZNHNTS3JOVGQzU1BSQmZmaW1kV2dnejlyeDBmRitNRTVBMTJmK3VOSE81SWRVUDNrOFZrWGNjczcxbGpqVHdQS2lnQzA3QWxJT3hOb3VGakZiTWd4VU8yTmNiYkxiMlMvQ2ZGemZDeHBTenZvY0J2OFdJVHllWG9WZGlpcEtnRVZkcTZKelVDZVhqRHlqcDkxWjVpVVhRaC9wY2ZQQWJVQkl4SGlOek9oaW5HQ21UajY5ZDNnRmFEZXVmTHpuY1dEQXF5bHd2TkV4Y0hqdFVuUlo0T0tyaVRVSnh0bzlLNWF3ZTlWSmQwYU1hamgrUktRS1liZkQvVmtoVHg5ell3K2RTN0VXdk0vMW5hV0g4eVZHUTlGZlZvWTN6TWxJSkFOeEFwZjVYZXJMRHp4TDNhSU13NE15WlpXWEtzL2NpaTFBUnVsS2hIVFMvZE15MURPMVhGcWVqcU11U0k2QzFvZ0ozOEFGTEwrd2JkRzgvd0Y3Ry83cHFYREhoZDVkV21tSmQxeFNKVVYrSGV3Ni9XRklCK3JPSHFpdG0zZjJwWDVWc0FlUUUvMWRTLzhoK0JEOTBYRWVQR1dDUnVSYXU2UUp1YWZiYk1WQkN6Y1BWdkExT3YwL0hLZXFUMitobUNEWTBtT2YwR1ZNMmh4bnNNZU9kZEx4eDl4V01oRFRGUDZoakNDbDVxbEVGUndieVpxRVp6dktGS0xzKzdybURod1BIbjYwRkxPVjBrVHczZXVNUGdTN0pjakxMcFRNVENIbllBMW5FVkFuZThSY0ZpQ1FzSGxVVjZBdlBxQ21RMzJjNnVsWGh6R3FleVk3dEdtV0ZCYWdkUjFhTlA3aGtBWWp0UDMxeXRwd3gxZVozOXp2YVNpeWRRSEJWdWxjY2tuN1ZXTXAvSFRjWWRReHBKaUNZRFZxbXhOYkR0b05RL04wWXBVdVpjRSszL042eElXM20vRGRock4zSUFYZkxZUVg1T2VrQlpjc2VmUENNSWtNWWNKalZxU0VlR3ZHRUVWMi9HWDdFMitCa2c1ZE1iQ3luRDdXaVFHSE9LUVJHZm1MOTZyanlBYWxMMFpVbDBVbUVWU1QxanNWYzFrd1VseS9nUSsyMkFIeENtU1BCOXFqNkJjZzFIWTY0bC9kaFVMQ1krVlRoaGt0bVFINkpQY1RJeUtiRHp6TFUybU9PS2Y4U3ZwZHJIMGRQZmwvdk5ITVpjMmFqZVNwVkhXWk16SWljVkR6Q2I2eHlQV25USFFxNTd2T3Z4RUMrM3ZzTmJjYVNUS1ZNMzhONFVNSm50TmNtdkRUSWVMZTZQSWNGNGE4NmQwYktrM3Q1d0xwMXRmWHM3SjBDU0VkNEdDbEtDSVorRis1aVg1RG9iT2hYcWJTN3JyYmdLSTF6d3JPVmZqSGw2dEhHNkNMQWNmN2ljUHVrMDRTWTFtUXJvNnJoQ1RIVW1jV0YxUzdDWTBUNHp0b2ZHVFRQVVFPUVJPODRsVkRlb2ovNEhKTXY4U1NaVFIxYVVMZTZwM2sxSGd6UmExSndwWVl6RUk4dVc2N1lnYitsZ3Y5bHRqWFlXcjRWRUNUTTlNZXg5eFJWT3AvNkxHU3luR1BFcFFqbFVrNWh4Nk5icjB0SmRQY2VmWkhheFRDUG05Y0NIZFVldiswYllDRHQrdzdnVVlxZmRVV3AvbERFRk1WRU1JbWRLRlIxN054by9Bak5jcTdGNzJhSTRGRWEwWllDbDJrWEtBS2xvaGdIQzRVbWV5Rlc5bFZqTUVWY3RjK2pyNFByeU9WZkIyWmdmQ3hIQXo2QlpueUVHV1YrUU51Mk9nYUlYTUdyV2JmQmlYcWhqLzBUMyt3THRqeGxMd3FmMXhsa1BLZDFTVUdpMXFGQ0FXZGpCZWVTSDB4WXNZaGwzTDE2WSszd2llVWMyUGEzNUVHZXM1YksyNUxUMDVnL1NKUHIwNnFkU0k2ek5FWU9XSGp4L0J0UkxUZ1NGVHN4QzloSlpDeDBWVzAwU2h4eittbDllUXZTMzRNZE84YkpLWmlzbGFKakM0KzFpWmFqbVhRVlU1QTBSeTF3bytXbldrZ0dsNHRwSmZOSGdwdzFsaTlwR1lSckorOWNDK1ZrYWhCQXU1UStiY0dHRlQvS3BrV3dsVFVMZy9naG5VQ09ISVgyaFdvZnpMTkdFZHZqY1F2MnprZ1ptUldlc1oyak4xYjVrcDFCN1c1MlM4bDZHY2dOckNxUUdHOFJlQXBxVlIxN2pjTTU1U1hTYVk4TjRiUnpFZSttSG5TNGtxWHdCdXJ0RlpyYXBnUUNzajZxSTExZTlqbUJTZkpmMzAxek91VFhqM0NyMDlTYjFZZ1A5ODNPNzh1NHhVSXhnMmNTdFJZWlRzN2VvYTlUVXJGVkhwQWZBL25BNC95NGJLQ2RyTlhLMXhKZFBOMXVqVE1TQVBmVCtTQW9PTkIxNGtFMGp5cjNPQlpESWdTMFNtRHpuR2k2cW01Y01CVnRab3RPYm5RNWtmalJ4dkh5V1lLbUQ1MzZYQVNWUGRtTzd5a0c4YkI5amRnV0RSTVZwaTRob1NJUUtLTVkzajlJbmQxc3ZDTHNITmZwM08wTW5JeHF1RXlWa3Q0UTNremtZWERyUWtTdE5kNEgwYTNOYXRHUGdheUx5NXVrM3AvYVhnWkRnaVUwaFRiUnd5OFBBR1EreGR5d0ZRc0tTYURvMythS1d0MkhhSkFEbm9XWnRIdkZFdnB5T2o0QmFkUXZUVkhnMkdESjlSMTlmVzdJZW9scHpCQlgyaEJ4RzY5a0w5dXF3R1FMSFV2M2E4WUVNVkptdFVOS1YydUJ5eGI4a0FSMG8zVVVlc1BtZUU0aEsxM1RqeHNvOUdremVtelo2VkVOWHhDTlZoazBIOUlCaXp6elJYNm9vOHZTOGc1SW9odzJmUkIxKzFHUzUrdmUwOUhIZjF5QXM3bFpJSkpKVXdmRG5lZzFvZWVWaGQzWndzMUlqa3N4c1dVTk51dmpyOHFHNXllT054UG55QnJJQXFWZGloNnlwWVd2UTljZzVPZjVxVmYzWUhWRjhxa3Y1c09JNGVmbnlGVGRXY0FlM1ZzdVMxM2xxNE5qSjBxanNnUmMrVGQxT3BnZFdSK095NUpLMC8xRUt4QnJweUxqQnlrZzg0NVI0WU1PcER0SzJ0WXlXNTloTmlzazNoQ2ZQS0E3MjRuakhaelMxWlUxYXhxK0JWdzVtdmhiYVB5ZlZtMmpTMkduTWo2SEQveFQ4dkFqUmRWMDRydTUyVlVmRFdRRFVmbXlNM1Mzd21BTHVDNVpIT0NkZW1vODU5VUFBNnQzUzlWRy9Fa3RhbXZPK3BaTUNCRU5WUjh0eDVxWWJCbkVVaUxDWmZkZHlGMXFNaE1VekFlZFk2ZVNKanVTRm56ZldHNUdpU2hQOUpuaGpOc0pTR1BiM1pQZlpBYkJFUks4YTc4TUxESXFiR0tyVDBiWDN1TW1uSW16ZWlKa2NNNVo2NXUvNGVHZTEzcVVmbjFNM1JSd2dGNWRoaks1SHZxZGxEelZIaEdpdXVkeTNpS0w1YUpoN2MvdmplSWJ2SFZ3Qmpyd2F0dGxvMGF4ZUowb1lNcUFKL1lzYlV4R3dBUk85aVpDUC9MMWM5eWJZdUpiOU5sSEVyczNWcVZPY2dKdmVqckJPbmRTbXVFcG83V3lMTVNNVG5nNEphbHlyU2pQRVh1bURFTyttb2VmWlZ1eXMwbEZBQmllOC96RWJMRGh3UlQzdG5CYU5mbFUwYzQ2WDQza3REbUxxZzZkcGNTTG9iTGIwME53czNFWHR1K2p0U095d2tXVk9WUERXTkgyd20vVXVwSm1JUFFMSktoQ1pmL0pUbWtlOVUzNlIyeVp4SFowU29iMHZNZ0NSV2UvbjNiVFZPNENmQUVZN05Ba3Fzemd0RnVqTS9vT0Jab1k1N2RUZFBHRmkwSXZWcE9PZFhQQWd2ODNORnFsU25XYS8zUkxUOFBVR2I4b1dvWkJGdXVmd0pBTE5RdXZPVHdlMHVUU2IzYmJwNFFQeERycGFGVzNUbFRoajBtekNWN0tJWG1oVy9JYkdZOGgxaENoRm0xeEo1U1BIcVZ0U3VLcmRXOVUzTVE2MVh1Y1ovR3Uzc2cvNEQ5WnZJUHBYZnJCbzVjZWxhcEs0NUtteXNwb2htS3M0WEI5YzE2TFgzaUp0RG00c1ppY2Urc2hGL3l5WUdaVm5teW4yTDlBSno5blVLQW9BMnZJZ1dSSXh1bTUwQ0pGUnVzS0tVajloSkw0V05YV3U3VVJUSEVyR0JYTmhRK2c1c0x0YUk0TDVKM0dhYmtHU21RdEZSdExnQTc2YTR5eU1hamZUV20xako5S3FYeWpWcEs2eWF2N2p0Z29tVlhpdTZPUm1TMVNFWXBVNmJnZGtiOHBlczhPcDhWaFJaekxMTjd2aEt6ZnFuUllVUWZOVFBKVDMzTTdOc1pZUFZZMUR2RU9aK0o1TU1CemFhbHZ1SGNma2cwWStHaFNnWWh6d0xUQUpqd043K2N6aElZb3VyaUloUEJUMW0rbU1nSGdVNHBoWUVDcHhrT0NueE1TLzIrSHpreGY0MFNuQ3RjT2pOaVFpUDR1TktEMEM5SW9DM0dCRUtkWFlBQmZxdThLVkFqWDIxZEVJblBIYXNhWjFrZnhacndTMWg2TnRhVnV0czB3Mmphcy9CVHFtQjZQN0x2eXZ6c09LWFRydlhEdVJIdzZvSDk3K1hPRG9NV0RpVk0zM3BXRkxrZ1k4dXpaL3FoSXc3ZGFSMXJiSHREcTdvSnZ2OU0waEh3WGtuRWVPM1crQmEyUS95SVJIa2wvdFJQTTJjNm9UUmpwN1RaT3RiU3JJTXBqQjdFNVpOL1JzRktJMVBha2VZWmpqcTZ3c3lWQWJLZXVUQ2t6T0RIRS9wYVIvNzlmWkZhMDN2aDdMUzlVMi95Nkk1cGl0eW55ai9MRnVIZjZrdnZPTnpwWUd4UEs1QklsRUtoejVQZ2w0NEJQMElxeDV4TmZKdkM1aTYyZ2FNWk50aVo4emVJRWx2SVFpZ0hoRWtWOWVCbzVjU3dUdldKd25IQ0Z3Uitrbi9meWdaK1U4QWprSGZiQm1CbTJIZ3U0VTJaYWFZQzZ2YTFiQXAxcHE3SllJUURYS1lwQ0U2d2JYTE9pajVqdWVOVG9WUE5ESUJsMXY1RmNPanJOalpkemIyMGZuN0FEVFZ3VE9uRzI2UDlJRjVmWUJidFM5TllBZ3lSdUd0emhySjF0SWhocTVYamlWU25CTnY3eDVxSHh4c043U0JsMklIZ3RFa1BxMWJDY3dzN0IxUktCLzEreVVzY1lRMHc1M2JoUW1ZSk5DaTBTeXFjdHo2SmZIZ3hqS3FudENuZWVJNXp6ZDhZZmJLUVFZY2NoOHNTWWNtVTB4SHl2RTF6d3QrMGJtQVBmYjE2b2x2RiswQy94UmpzWjZHaFZRU0JMNEsvdk9hOWE0MWZSS2x3eHZqYkxxS2hUSXpxN3ZwaWNDcUdxSmxhK1lrQnlmUG9vaW1tMjRYR2NOeW9rSzlsMDN1dUJjZzFoclZzTUJZK0RxYXBTaUVhRFR2M3paWFhoZ2I3RDVUUzZFbXViRURabVJ6MEgzKzA3RnM2UmZ5QXd5RHVSVmlzNGFUU0dXWEgzR0QyMjMrQWZWbW1EMCs2RUxHdXMvekpZdTdhNnpCWlN4SUhLSVFUdk53SzlqTXpPRjgweERML3hIVUhnOVY1YUQ1NnJGVDlWSUhGY0FqNjhSZ1R4cTFlc2FTMERIcUppbFNrbnBwRlIycmoxSnM3UXVjQzVzNzErNko4NVBlUUxFdFFGRXg2MlJraWs3NWFpYWZkVG9HTkF1L1o5bnFPaWd0NHowMFh1S0V1bGwwMUU0VUlBWWtoZm5BNmE4RmsxZGxocmNvL2grckl2VFh3OUN3cm1Yc1RqRHRDeGFGVzI2TjR2L1pQK0k4YkNENjdWQ092VGNmMjBvOGtMU3hsOFNNVDcxUFVGTHR4SWNtSitsQUxBRE5mSjFMa0hMR1ZlbldCY1ExcExmRWpwZUFPSjVXekh5WEZydGhpRFdmcnEvUldOb3NWWHVjY1E1TmJIRUc3WkFnRGs2dE5oS0NZcHo5L2hDTG9ScmVKRFNNN09wbU1jTDhhNC9MR2FUaENITnlPSmFDSk9NbFdOUGFGTzhDb2wrMDJvSW5wdUFmZENRWFlQS0tWREZFVU53eVM0VHAySWtoQzVHaVFtcWdMUUYvb3V0Y01xbmxWT2k5WWNNQXdqdlpiRklDNVpnTktkOWxiRkhlNE1lVXgrRzg2WkpqczNOUDRsNlRYZE8wUVFsakFRamNZTnZRN3djMU5LTVE0SS9XNlpEdGNaQjZ0ZSsrRUVaZTFucG1nd010azNhOGF0alUzdmR5am96N00vSkhYbDlrdlQ4SUxyYndhSVkySjV4SXZDb3VnTGl2ZzZjSXA4bzVUTWI0Q2tNdmpxSThDR0UvVlZYM2xQbWk4MkptQlRhc2FOVFl3UE5tNVdMOTZHT3dIendqZ3dBOUs5ZFhSOGhmN01zbDVUUWxBdmtmSlFrcnZVbjhVZzlUa3RGOUl0aW5UaTJsb3htdW1TemV5LzFFOVEzK1VyWHd5OHIzQTFHRC9pVkRBVS9Jck1iZGRYNTN2c04xaElQVWRiN3FEVkZHSGtNUkd3b25Ba1pocGxnOGZNUHF2b0EwTXYrQWxLcU1POVJidnBFeWpzV2hqNnh6NTZmWDlnbDhGN0ZMM0VRU3pBcmhaRDdDM25EcEFldktUUTBQR3IwQkFNS2l0cys0UUQwdVI3ZlRmV1hHSGY4NkFENldZSGEwUUtQMGM0M1NqdnhzVXRGUTdxQUJvbjF6QTdFQlBaS2ROeFd6UkdUYmFWQ1BqeXhsNXJISVc4bG9qNWo2NFZxUzE4dEp2emhBMDhJSDZ0UENKTlJBTlpaV1BYOEE0RFRueFBDb29tay9uRWJ6aExKWWRQb2prQmhrN1JNNXBOVzdLSUdhdERodzRzRUpxYy9DNGE0QmQ2YTRzcGZ1NWVtajBOUE4rNlBKTTFydllIT2R6WFpubjcyQTNTcjRGbjVhN21xdDZOQW1uSEpEcDMvY0k4cHl1YkJXZExNV2ZYSHFvRkZoSnBlTjJkdlBXYnd1ejVIU0UzMWNHOEVTRjljVzgxRVdTMU1xMlFSTkRBdEpIV1hRNFdtSWJldDBYU3FNTjdYY1RUSmZzNnVJenpvOXFGRWY5TlpZK1MwdHhjVXdMQUthZFpMMktONE9UYjJiT3AwZE1EOExPQVphU1FGZ1BlOUdyb2kwZllUSEdOVndrSXZqUlRWZG5hTkdSeWY3K3hRQ3g2VnRGMGx5Z0g3SnNXdGY2YWtocFRYbFVZb1l6d2Z3STVSRDhjV1RkUjd2V001WWVrVmZEdktCRXZqOVhYcmVhT2hNalE1dXZDZVc1Y3VzMmNNOUFGZTRkaEZqc0dodFZiSTAyYnZuYkh6V1JOcDcybjNKMjM5elNYcnU0cWxOTDVjVndZSDZ6K0hueTAwUlRVblc3Y2tDZjZzUEl1cjB4SXZpQWI3dWQ5ZElKOGRtTEVrdmRMaTdqSlA3TEZaNXJBcXFpNUZrNW5nZERqMW1pTVpHWG8vWWdZdEphKytiZElzNjZsYUNCQlFJY3d2MTV2Nzlna3RUN1lmK1NoSDZveWFocEVGZDM0cVpPVy9sYmdmKzZ6Sm8xY3lOdFRQOTNhUkdhamxGUzhodzRDanc5VnV4UldnbytKT2F0TERIanlmSlhlZjVsMXNzaU8yUWp0UDhzL0xFNWZuTm1TcHJxWXlqdDFzQUNiQWk0NE9PZDllanV1bGdJY2lPcGFERjZDdURsSDFsaUJFbXlOUVlVZm9Wb0t1c0RaZGw0Y2lBYlBtcytSdnd1TmZxZHYyNjQ3ZHphc3RyRVdHMjZWMHloY1FQbXJXM0g1QmRJU3NlRjh5YUJEQi9Fc0tTR0RCcDM4SHhpYWpSOHJOUEZNYy9pbUpBdmRCRjJBZEJmenowK05sZUlZaElPN3VqckpwT2w5MXFnTitSNjM5enpUTDJ2SzJ6K2RSV1ZGTFVaTWVvWVJZYkE4YUUzYUtkV3JodWxsNS9xUHRyKzNGdm4zK1FEYzRoVDZWbkNwSHBzaUwrdDA5QXUyeFBzbWEydklDazlRTis3c3hGTHMrS2ZmUWdWTEdHRG1RcDA1UVJLSllKNXkraVBPUVZENG1tZkVSNWtwZE1UbS9tNEgydFBrajRZUDJyZGVvV3FZZ2gxZHcrNFQ0U2t5YUdISTNrWFM5M3dlc1QrWFppbFJqQVBTYlo0cTNFNmVXUVJ4U0dabi9TYlFwai9wVmJMc28zbGZmVTFwSmwxYUFTZEZudnlLdS94cGZDYUQwWHVDaHRSVVpzb2ppN3hFV0JTZ1FQR2N3U3pLdTRidHM0LzVhYmhyY3p1YWJSRld3V0VJVjM5b0lqVkNhYUgvMTUzN2kySi8xallDMHg5c1NGWlRDVVMxYW01V29WRmZmaklvSDFGSk5Lc3RMK3F2OGRFdDNXVDhubzh3VFBJWFVlVCt3elRXZXQwSjB1akNLSVgybTEyc2FXdHM5MmtlUkF5TGxDVFpKcXczTmZlWlp4QlpjM3lMQ252OHhvZ3JkWWN6dWRkRXNad1loS1J0ZE0vcGtremljUzVaeGF5T3VIakYvcGhLeVA4dkxUdGsrYk45LzFNNm50L2wrdTR1aGlvV3NGbGZWa0xpblBkZm54NFB3a1FWWnBUVjVNL2JqMVhQdFczckJVamRIOUd3dDlya0w3SE1vUWowU0Y4YUNsVTU4dG11TUFtc05BRTZRcTViS3gyQk4vMjhob3ZaemJXL2lNYTQzenRtakFuVVg0bm5OaFIxU3RDeWN0OFRwZ29INzNFZHQ1dlZDVnhnb1VXenF0Sk1USkFPZEF3YzU5N3hJTWYxR3FLNmprMTFtajhXWFY5TW5IUWIya1J0dUk5eTd0dUNLZEZTcmp6SkttUFJBNnZBeDFJU2RwSGNDU0RldjF6SXRVOHBNcXFodVQ5b3J5ME9PbnUxU0RZUDhsVWlQNnBQU1JMcHp4S1ZROVB2NEJZbnB5ZHVOTHZXRkVXbkdFVVpPNEg4RzFuQUpUT3djRVJObC9TeFY3R0kxWGkxVU5Tc0hlaExPV2RER3dCK1lEbk9xQXFJY1FtK2pITFRWbGw1b1ZZbkxTU29NWktvTUJxbmxibHp0QmN4YURMVlMxczhCbStLcHhrcllLMlhqM05xTmpibXVXRG5YWXY4T0FCYktNVTRBWG5qV3kyeEd4TEVnOXNxU1dtY1JRM0ZTTndFeitEZVNtOEE5cjA5aE8rdnNJeWFCRjliUWJHRDBKWTZSRkJFMS95WjI2OCtJNW42ZGxRQ2F2eHR0ejBsaCt1ZUFlazFaWTlsK0xGVVoxYlU0ODRhVWdaamFrNndtcHl5Nm5zRy9yNWt0d3JCaDk3eW81WnFXWVZjRUIreUR4SHoxd3c2cW9lbFRXbU8wdmxDZVB2N2V1Q2RHZE9uVHZPczJjQ0xubyszTWNaZEtGU1lleHJGc0l3Q05Rd3VTVkZaQWpiRlRxMURlaXJFZHJlSFM1cGZRY096c0sweUhmQjlIRVZCdXErb1Erd1ZsdjZDYzd1bG43cTZDck5lRnNiLzlkNkF0TFpZb1dqeFVXZE1QVUtyd0t0SW14cVVGWkNyaHcxSkticUZaeExmMnI4aHZubnpzZU9HR1dKdTE1eW1LMTEvT3NWRXNaTWExaGsyTHdzV2FtZXhvWUdPa3VIbU02RDlvS3hCd3BCRGQ5d05XY0VETEJneU5LbmdFb0FrSEM0Rm5CY0xnQkxKQVM2QUtqVUlKYmxha3Z3Tlp6ZUl6MUNiTW9EcVBicHk1U3QvL0IvMHpYOFNLZmlac21TemQveTNoZzRVOGlQNlJYVmVGdm1vUS9PS2g1OVNVRnR0aVVOSWllanBNNjA5NnlsRFlQbXlnVDdkaEgxbTlpLzdTWHZSUHdqZ3FoNE43QVBWc2RKLys2YStmQjRYa1ZSK3Q5V0V3N1J2VkxkRW5mRlIxZERZSHJDdHlRYWlhMGxjR0xHVGEvejlxTGdTVjY3QVZJTVdJTC9KTm9rRGc5Wkg0WS9oV3RQeTFUTURRbkN5TXcvbTY0cytYQnl2SDAxZktUdk1aczdiMUNKcUE2djA3cThiUFh3UDR0cUIrRmhxU29yYy9TcEpjRUp6bFloQWtUbmdkU01scDB1aHBZVnJ2MFc1LzA4emcrYWhKWTkwOGlFMGdaVWNVT28wWGpKcEg3N3hhSmJzdEV6dFZlQk1oN0ozU1ZtK3hUcFUxQWE3YUQ3YnVabGpMQ3V1T2w2SWpyVW5vRlprbXBXbTRWWWRyT1B4Nk1BVGRxZEpQNzZMNG42NnhSZG1XSWNMR0N1b2ptZWs5cXBoMGYrbHJlRDJxTjluYXgyenpGTDF6S29wR1p1dTMyZGkzZ3hsYzNaUmd3aGJMZkxoWS9qREh1a2V1RExITUR4NWVUYlVkeXd1bXQ0Rm9raE4rOGFwVTJSRGk3d1YvMEFkejRKNjluMmRtdUs0Y3owZjJNSVN3T1orN2IwN00vQ2taL1ZWa2Z4amFvRUl1Q3hDT3V5SXJFbEV1YWxuUkw3OFRLZys2Z3kyOEJ3QTZMUDZPSGRyMVdZRzEyK2RWWWtFU0JHdEdoQjVoNFl2bm5nWENycUdnU0FYM2pvNXZwUFdONGl0WlQ3aFp2NGRSQ1BVdkkxNmtPMXVhNnFCb1VGWFBIMzQrRlk3Uk52R2NMSFNPSWtMWkh6UXZCd0JLNG40cnkzR1pNWWFCVlRtNExLVi81dzJzbFI5bDQxNzNCbHBtK0xEbkFON0ZXZWcxWEgyNS94NEt3ajYrTFA4T0ppZEFtMGQrVXdIRWI1czBocGZzcERVaVYwaTBDcU1MaFFLT2RrNnNrSDI1YjdnYlBkME5Ham5DMGliZGRzSXVMN2k3cTdDbFVkVWpFNnNJdlczaStEcXBRTlRZVEVycS9vdkVwbWhsRHFMVjdhUlMrd2dNUzVvc3hrbm0wenljRVRwYkRxVWNqKzVzeERzMTVJbkYxQ2FYTFp1ZXJaNy9hRUMzblJkRHgzenVvWnJNbzIxZTBmOVlMK1FyV3pCUmlKK0U0aURrQWJObzlpdy9oZlFlczhtN1Q2WWxvTWE4em5QQ0toMVI4WTh5NnV3UDFvc1A5aWZwSjZZcWZSMTRtTWtsR0k5RzdUUjU2MEk2djY5R1lGL29NTC95WXcxc285anhBeU9EZzFDZmhEaDZBNmt5OHdJb2FBV3JsSkZzSk5GQUp0ZHRDcjVJbWRVOVNpY1N0VzBXZWVFT2dwaEpCUUhweUFvZVhaQ1F4Q3RySWlXQlU1WTFJRjhyeXpVZy95WWZOdmlPM0YxNkk5dCtVUndybWx4Lys2OGprVjVHanU3cWxJd0tKODdZRzZVK0NpbEs4ajZ5TldidGRpZkplNnF1Z0RMRXVuM3BteHFnbzNaNGdQWGVpS2UwU3FIRy9GWnNQN0NlUGtUemhkZ3NlM1AvUm1zcm8vSnpYMm4yS044ZmdSYzZlSHgwQXU2ZkNOUjBsc0FWWEoyOG4rbXkwVVpPRTNweWptTWN6OXUzeHJJVHZnQ0p5VnJwRVptMDBhNmxQRFo3bFNna3J1bmUzcFhFdk1SbTdIdEFqK0FHNngzZVlBbllMWUlnSkxHMHROb094RjM4ZXIxYUgySjBERnBMS2hNaTNZamhyQlJGUTdmcFZxZDZ6TThOMVFXNUFxeXhkQUcrR2pZV2ZWeTJudlFwaWh0Y0dzeEV4ck8wNTlQNDlsb0s0WW9IM2lPRi9zS0RlYitEVEtUd0hmdTVGcXEyTDdLZnhpVmJzK043ZVlNOVNVZ29rdnkrZmRQOVR3N3ppSGxFQ0Z2SWpUZE1YTFdXaUM3UlBwNnFlUTJwbmxyREoxdlQ1dVFTWFc2TE9VZHE3bm1pTDVjUHErdHZ4YUt4bG5MWEY0UTkreUZ2eHB2dG9sVG1qeU5xcFpnRDNTWGFsQTg0REZPQ2h3N20wcE14a3UydHNvSzB4TjdPNU1sVUIzejBxeVRqYXF0KzRKOUgwbWNPVzhqSmdEWGhVaUthcVNpQzRCazNNZ0RLNVNTWVNQVGM4V2cvdDJKOFdHU2UyS1N1K3hKTDBiZGZQR2J1UUo2YWxoVnYxQUZTTHkzb0VnZ0lzL3Y1U0hzVmNub2NacDNFRDUrK00zL0pTd0ZvUk81M0VJYkZqVDc3VFBqb0RyNWlRLzFzQ2o4dUpSdjVmbHFGZUo5ekEvbzE5QlhKTGh4T0kvNmw5aXlZb0J4UzM5Y0tpUGlsVjN6c0xPdkh3VGJEdnVYMmkrODBXbG90RnhXVU9QZjIxMEFXeUxkYnhGUHlBb0hNY1ZIYVRqVHFyUTkxamhtNDBZZW4rSTJ0OWNwY25OZ1RTU0dlN2ZtY0dlS3pNcjlERkZ5RFJSdFVzWTRLUHNpUVdRbU1GaUdQYW45a05USnR0WkpBWnYzNHBuZUVCNVBnbUVCVkVEaklTN01mMzFNWWFkTml3QWZwSTZxZ0pSUlRrc09xWDFvSDNtR1Z3SDhrT2x0TDNXYWJObWRUam43UDNWQVBzQ2pJVUxmdXB4dEhQV2YvMlFBQkFCb0FRQUFCT3dCQUFBOEJDanNDQUFBQUFBRURBYmxBQUFJQUNRSUJBUW9DQUFNQUdsUm9hWE1nYVhNZ2IyWWdSbWx1WjJWeUlDZ3hNQ2s9PC9CREI-CiAgICA8L0JJUj4KICAgIDxCSVI-CiAgICAgICAgPFZlcnNpb24-CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvVmVyc2lvbj4KICAgICAgICA8Q0JFRkZWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L0NCRUZGVmVyc2lvbj4KICAgICAgICA8QklSSW5mbz4KICAgICAgICAgICAgPEludGVncml0eT5mYWxzZTwvSW50ZWdyaXR5PgogICAgICAgIDwvQklSSW5mbz4KICAgICAgICA8QkRCSW5mbz4KICAgICAgICAgICAgPEZvcm1hdD4KICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24-TW9zaXA8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgIDxUeXBlPjc8L1R5cGU-CiAgICAgICAgICAgIDwvRm9ybWF0PgogICAgICAgICAgICA8Q3JlYXRpb25EYXRlPjIwMjAtMDEtMDdUMDI6Mzg6NTIuNjcxWjwvQ3JlYXRpb25EYXRlPgogICAgICAgICAgICA8VHlwZT5GaW5nZXI8L1R5cGU-CiAgICAgICAgICAgIDxTdWJ0eXBlPlJpZ2h0IEluZGV4RmluZ2VyPC9TdWJ0eXBlPgogICAgICAgICAgICA8TGV2ZWw-UmF3PC9MZXZlbD4KICAgICAgICAgICAgPFB1cnBvc2U-RW5yb2xsPC9QdXJwb3NlPgogICAgICAgICAgICA8UXVhbGl0eT4KICAgICAgICAgICAgICAgIDxBbGdvcml0aG0-CiAgICAgICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5ITUFDPC9Pcmdhbml6YXRpb24-CiAgICAgICAgICAgICAgICAgICAgPFR5cGU-U0hBLTI1NjwvVHlwZT4KICAgICAgICAgICAgICAgIDwvQWxnb3JpdGhtPgogICAgICAgICAgICAgICAgPFNjb3JlPjcyPC9TY29yZT4KICAgICAgICAgICAgPC9RdWFsaXR5PgogICAgICAgIDwvQkRCSW5mbz4KICAgICAgICA8QkRCPlJrbFNBREF5TUFBQUFXN1dBQUVCQVFBQmJzWUg1Z3djRENBcEFVY0FBQUFBQUFFM0FFQUFEd0lBUUFJQVFBSUNBQUVCOUFIMEFmUUI5QWdGSFFFMEFaMEFBVzVWQUFBQURHcFFJQ0FOQ29jS0FBQUFGR1owZVhCcWNESWdBQUFBQUdwd01pQUFBQUJIYW5BeWFBQUFBQlpwYUdSeUFBQUJuUUFBQVRRQUFRY0hBQUFBQUFBUFkyOXNjZ0VBQUFBQUFCRUFBQUFhY21WeklBQUFBQkp5WlhOam1jb0FBWm5LQUFFQUFBQUFBQUJxY0RKai8wLy9VUUFwQUFBQUFBRTBBQUFCblFBQUFBQUFBQUFBQUFBQk5BQUFBWjBBQUFBQUFBQUFBQUFCQndFQi8yUUFJd0FCUTNKbFlYUnZjam9nU21GelVHVnlJRlpsY25OcGIyNGdNUzQ1TURBdU1mOWtBQkFBQVVWdVkwbEVPa2RTUWxRd01mOVNBQXdBQWdBSkFBVUVCQUFCLzF3QUUwQkFTRWhRU0VoUVNFaFFTRWhRU0VoUS81QUFDZ0FBQUFGdFhRQUIvNVBmRzZBVHppTEU4bkJvL1o3cURGOEpubUVua3ZsTVpzK280N3RLK29hdG5OdDdQSjBWQWMranNkSU5jQnRHbjgvT3BFNWtlUkFUMHc0MVF0OExnSUNBOHBCd05EanN1bzhZRGROV2VoVXJpVnlkN3k2QThTRFpLWlBYOUZyalJVbmMxalp6OGlOdDJodUEvQWhBT0Y5NUpHNW9Samtnd0tHM2lTbGtIemVwMHBGRGFjTExCSGEzRjFueWRYRi96cWNUQUhMU05zZjJmYkYwQU1pbUJFMlNYYjk3MHNFblhBbFlTbi8xTGpvVlFKK2U1TU92MC8yZ2NEQmUya3JGdGoyR0Z1UnhkM2JpUXkzK3RyV25pME9tRzcyNXhEZ3ZXSW5tTzZZQTdJdmdwWlk1bkV4L3RUbDR5V2JtU2FCWm5SRHVjektpb1VvVzhkbEFQdnZZczFrTTVKU2ZKN2FsRnhOcW1LUnV3SkhWNERHTWxRQ280RFJYN0JLbklZS09lalBxNkJzY3RWaGd0dHVKdmxvWG5wekxsTFlTaUg0SkxmczI3K2ROdTJlTkF2R0R6TUpBMVJoUFZrNXdQOWlUL2xHK3JkS3EvRzMrTTErUWVuOG8vUklsZUdIWUU5cnlucXdOb1BvSzVXVXB1c0lUcW01MlpLRUZWeVowYjFmenZjNkM1M3VRMXdaeGsvOFhhaWpnT2c4M2I1K2J0c2Yyc2djUzNwZUY3YVZIdXdPS0FKN3dYZ3RDekVQei9EWG5ydFVxdEJwaFFXRTJHMU9KeHM4QmRUcWxtcXByYTdvNkgwbk96Zjc5REZlSU1QajI5OS9QSk1ZMVdNWmNGNWhXY1RpcEhzenpjNXRzczZudW9hZVJHU3pEMjkrcGxuYzdSWFpWZjRPZTNGVjk3c1BxSXArQXpxaWRwTWhsMDc3cFlxMHVvclpQWXpPdHZ4elVSRW03anFGeHkrQy9yZjV2K0FXeXRRd1kvQ29qa05INHZhSEQ0QTNzUXl0T2tSei9YZWFScDFtdWdHQ0RmeWdIZllUWWx1Y0d3RitjYXNmVUVuNktsMnorajUxbE9yN0hIWkJZTHNuVkJ4c0I2c0hxcDdsVVFqMmtlNkZWVzJldFE5cjgya0lBTXdsQllhcXVKMnhETDd2bzBXSkYvUGdTMWNZNUo1TnRBWHVrZGNIazg1V2Q3QndwVnBEYm5naGs1Smx0aTJsVUVjQlZDRzZCVy9WUHY2UjR0Tmh3aEMwNDVXUmc5eUppdjNFdGJNTWhXK1RwTUkranRrNEpDNWpuYms1eU56YUpNY20xR1J0SGoyMUhPUmFKbUtQaDNXdXo2clVUQnhLZC9OS2ZlV2R2TkY2ZElPek1EQlgvZGQxSlAyeVZhRmJuZUs3MFh0MnVoSVR4VitGU2ErWXY0UHI4ZXMzb0tiZDlRTElrck56dEtjYVZVbUxmN01udmNmenZZL0tUeW1ZVXBnZkwvTmtyTnFZcVkzTitOSTNmY1Z4N0E2NnZ3ejNoSjhETHBUODNCU0xzTm45NEcvVEtNY0c0NTZTVXRIazRpN005T2I3eVBzT2ZvRzI1R3hLV1ZMdmJ5UFNjVVNDV1NJa1dMdjI0UWlyaG1hdmwyVEF4bnpSQ3k4MDZFZ2Era2paRzV6RDhnemFaVXZiZHdaN0dlZ0R5eVlld3JZejBleVRZU1N4bm81cVRqTjBua1VWSUpLblYySjdmQXRBdGp3TjVmUWRENUF6THlxdm5pSHdpa2lSU0hsRGhaZjZmeDREOHlJZktrWDBxZ05RbkY5aG5ON01keU1aa1dmcFNCN2FrOTF6eStoNldhOHBucUdBVWdPZEVaOWw4VTd5TE1wSEo4OTZqdXVyNDB0N0VjUFJYZldYNStlckVWYVd4T3kvalBaZ2xDakRPL0Jadk01K3ViWDFZYlV2Q0g4WUJ5ZjBLenY1Q2hMejJJNjA0WWVnS2FJRWtBZXg3aG5XZ2pSdExnZVpOcDFvZzZ0QW5xOEN1T210dUFPTVNUN1dEQWxvdnNPWXZiblhDdzNydEtmQ3ROWUZDdlI1c3IrOVVFM0x2RWVXVjJOY0w3Q01QRDc2ZDd1YmZxTXdnRHNob0VqUlgyL29VSk9kQ2ZHTC9XSCswMkRYUHVmeFdwdkhXdDlUckcvSnFoZmhnUERSNDFTTm5tblc2aThuM1FMTUNHbEZ5VDQwTGdQeDc2WUFNVDd5NTZPRDM5aldOSXZsZkNiM2tzc3JCcng4bFM1dVdyVEJwK1VpVjV0NHdxWlU3ejZhWUJMY0NudlFmb3A2QjdJT3VucFZtQ3FSNmJSNk8zN1lVVXpuWlcvdWhhQ2VKaE55TjNHMURSdHRmUE1oNkxpWWd1TlRwUVpzT3BiL2JDaTlCKzRHLy9tVlpUMEpVdGdGcDlQeS9tcGhYMnZLWUhmd2daUUhRVnZwV2JweHRRWEw2UHA3R285a0NKZ3NFSlhJQmZoQWFWSDVCMGQxWXVvSWFKOWFEQ1RkRW5MNXk5MCs1MFlDaXB1cU1KVTEwV0lKK1ZWUHB1S0VseC9STUtLSkdvWm5JS2FsMGlGWUlGRXljYkg1TUNYd1RXWkNxNjhLb2VoNTBLcWpQdjA5RGRIejNUM1hyZWhKVmJnb242SzBDOUhpbmdtVFd3QVpyV3pwVVVFQUFGWWJKSzVQek1SeXoyUElSd3FkN2R4d3JMYWk2SGhkaVhCc3JRQlAwaGJPUkhMQ2lpT2Y2d3p1MnBRcXBsUGJPamNaa3p2OWhLd0NNWWNuajA3K0J3REI0bm9wRjYxQ2t6UEhvMU9XWkhKT2lKVHA2RFFjSUZlS3NaMUd6ZXJWbmZIaWd6SjF2L2ZaeXg5aG90N2dyMGl3TDgxcFprRVd0a241aGNwRy9icVk3NXBkcGoyZjgyUHhQblNjZDFRbytqUlBYOU4rcHQzV2RDQzNjZTEyT2M2eTdsVXJ3NnVYSVF0VnozVmdkVDI5TzBDbGgydS9Sc2xaVHNTWmh5KzNFell5eFlySm1DQWNxRHM3bVRzamZJcFNtUitCeTE0UEEyM2lJK2dGa1AvQkVtWlo0REdGU1RrUTZYN0ZISnorTjFQN0dBNjVIejBLVUMwaFNYRzRrZTBiQTdXcW5vRENVQUZjMTJJV281NDhnUU56MUV0MU5nbkdNanJIaXM2QW12L1ZiQTllamhSNHVMbkczZmlndDFkU0ExbnJVRjNNVGQ5NnFQUm9hS2w3ODEvT2pmWjZmWjg1anEyc1RoYnJQMEVGQU9iaVlWSTBFSDNHS1BrNG80VWprTzVKaktyelNVUDlsUHpoa2FGZHhOSUZZQjYvSjI5RDZJc0pmS3QyUElVQW5JMW51dW5uZXlGQlhlZnl1NjhDZjdISk8wSFVNbDVIMFFqaEVOTmFhc24zSlNDOTBKS3Bqc2FVTXVVS2FyMmRUOVlwajVyMjlQRmdWQnVXYnBTNVdRd0VkU21lRFVKMFp3M1lyMU1NUEFUcndWRi9KS3h4clk5WGFRWUJiZTlrdlNQMHlwemgrSUdyZ2w2UEp5N2dBZTBJVWVjR1FyRk8rZlY5aDFmNnZiZjMzTEdydUlmTHFJcGlRV3JoQTRNdWI5c2I3UTN1bTdkMXJzTjFZMkRwYUlXNXk2WFRkMTB5MXpQZStIMCtIQktFMWVPeGRzcndUajg0MjB0MVNXcEVhSEVtcnFhTXhyc1Jjb3hMa1NPTktoK1lJSUUrWlFiNlZUUm1FYmg1Yks2dVQ1bjZUUmYyRWd0UVV2VjhqSEpsdllqbmRKR0lWYWZzV2NkcjFva2VvZ2c0aElJZVNzSG4ydU5DSm0vcFBoL2JVUFhRTnNBQXdzYi9WSWQ3eTBFMjNKNzFqSHZXckxKQXRYUDlWS3VwTjExZ2F2VnNROU5IOUxaYXcyVDJ1U2RRMnVKSHJ3QUN2YllMUGZpR2VDTjNFZDZneE1menBsZ2dBdWtjMVlkUGh3ekFmMk1aazhZTSs4N2drWDVMTC9sd2hocnUydXBjWHkyMUNtRm1PN1lSbTdRZlFtUkMxYit0ekFaNzBXcktTOFlHYkVWYWozSWRFckIwUU8zU01SL1QrYmRDbjlqZ3JBZEN6YlJxR2VEUVZ5OUJkejg0RUpaL0wyQjN2Rkl3bm95YU1FU3gxV0ZyallXb3V0NjRsQlpxOW5kazFMVTFuWVMrNi9qUkxJOThVczFsWUtuUzBGamNER2x4UEZXRkpGS3BkSjR5VkowSjRQSVMzMWdDdUF3eDh5RzA2QjFQUVFxbHVxT3BHRzBRZCt3bXZzb1pST3JwTElKSjBaZ1JybkMrVk11WVBZYlNxRHJBQVROOG5hNHJEQTJJRlR5Y3BiZDBhTG5sYk5aYTI0WE5PT24ramVGVE82ZGkzV0liYWhJNzdDNzRONzU5bjdhRStpUTRsQXlkNHc4Wi90OHpQeTNFT0RNTmkva3VNdTRYSHdFZ3JtNzFSdHFjSW9hZi9TQ0VkL2FGQ3NFc09NUHRxMmdOQ2lveTB3RlFkUzJGZUczMDA5WlBiTTEzV3BxTzk0MUEwRExqNlMvbU90RmF6TllXVnd5OXNBNmRjbWpseE84VTZ3R1IyZmRkVENsVDQwT3RlUm1iVlpVaGFQSmxUMEtYRlJVRzNSOUF5MUkrWERSYWpneWN2SnNmNnRvRVhha3FTNEhwYzd0T1AyRnhZNU55K2JqRVpyTTU4aUtXYlNoNmtKbmExbmZpT2ZzZFJwTC9tek5mRXNyVisyUU5NQ2o4Yk1Ia2FXK1J4d2pjSk9HTjBNaWlzWVdLK2Q2S1d4T1M4MWw3VG1QZnc1RlFWT1hBWGRHYjNlRnRNTFZyMEpVcEtsbzN4UFFOdU1RaEs2Y1ZPaE5FRmpWbi9MS0xHNFNER3E1bGFXS1RJVC85bG5HenF4QTd3M3RCMk44Y00yY0laU3NlUlVjYjBjQkp4Z25Ma0MydUxSL2RxQ2hJdzdIdGc1MXpSNFh6Z1NRS3YwVzcrL1A2ZGRJd1Y4eXZrQlBLWkdFbUFPTmVRd210WnVjNW5xbHRtakxGZGpSQVZLS2FqUnZzOUNubXpUQlllU2Q4ZGUwYmtVU1VPMmFpSGtCQXBQVy9SVDA0U1lEa3FmMmtScGRGYXZwK005YU5DWmxhSFFJTDhYWlZPbTlGV1p4ZTkvdGZaYnIrUExybWcxcnZuQ1A4cWJrOVJ3M0MzSnRkYU1tSW4wNnRPOWJSbURuY2NEVHYrczVyOGd2T0NsUU10QzhIcHBIMVBCdTh6WGtVTUFGd2poRkNFaFBib2VHTkNWek5LUHQ0b2ZSUkdURFpjRW1BNFFMOHdUcWZtcFFyMGo1QUFqMnpEZVdDUEM5eTNRa3ArKzhmVVFzeS9SeFBKMm8xU055d1lWY3E4WTExdTYwNDZ3d3dVZlF3WjR4a2dmN0FRaXBKT1h2MDlYK0ZMRFRoVmpMUjlyQ0wxN2pYY2Q0Q2M4WGJGbG5ia3E2Z2ZCY3JVRE9PSmwzUXY4aUNHNVF0c1JBS2pOU3NVREQ1L1kvMEdpNzhjSmhYOUNBSUZTd2xHeHN4bGpmMllRMDlSVzloSWlhcWpuU1BXc1N6ZHZXNzIvc0hZdnQzNEI5bjZBZHBKczEyK0dwL3ZzYmx6aTFFOUdScURxeFV6cHV4ZkoyOEYvZk9uSFNuRGZoTDZtWDF1RW1MeWRxdEFJN2dvWXN2b09QZktvZU1kcXA0LzR0TXVUTkZzYTJNTmJybHl2Wk5nbWVrTnpjWDM5UnVDdWhReFpsOFU2OGVMZGJmNy9vUzJXa3dEZzdiNXlteklBNmNRaFZrSlp4bG5xOHVFVEJlWXZibzZzeWNzVkloc1ZnSVFxVVAyTldwSlg1dWFPcXhsalEyeC9wdHZSYnNQK0QxQUx2QlZSSmhzWS85RXVTbzd4Zm1hVEVSVkEvMlN1RTVvcmdORTRjd0tXeG44M2tYN2ZRQWkrek5Gc2cvM09aNys2MjNTT0wyN2gxRDVWQmNvU2ViMjN5bHNCT1hVSE40UHM4MmttTk90Rmpmd1FoYXlYS1orRUNlME9yT21YR3lUcnVuTS8yelR3cDg3a3BvWnZqODg4T29sRHVST20yQVRyRUlIR3NhcGZhNzh2M0NLZU1XNTYwdVhpMVA1YmR4NjdGRkhtK1Rjbm1JRkFvckluSWhHYVFMTDdubUpldjQ1eHpMQkN5QVdqaXJhNVZPckxTaURDYXo5WTFOeFdiOTExbm12RnYwcVAvU3FIOVpZUUtkUUkxN1padS9LSmFKeUlXMzVNdmdrcW83REh3QUw0MXNOZWF2d2IvcHk4T0lBY2JjU3lRN3dPR1NyYmcvNnBJcWpTUVU5YVdiZjBIRHFBbFMvQTV5VW9FSEJzK1hBVElaMGZQOEc0bndhNy80QWUxSlpPaGxFMU1XUmIrc3VEaGxqSGNyVXdMekRXUGdwb0pPYVN3QlhwS1lUU2JUZkJTQm00b1RrZ1JTcnpyeW0xak9MeUlvdUU5bTZIcXl3MUJ2KzRlckFMbC9IQ25POWhVYXJ5TXdaZkc4KzJRMnlZYUVoRTVoaVNwWW93ZlFEOFZqbmxIT1RyQkUwTTZnT1MxcW9KSGtaT1ZZYTJZZURmOXBiaEpUdFp4UTZJZTJlR1g1dEVPN0R5OXZEd3VJZHR2YnZMUVZMREd1K3htZVVNaVh2ZTRCaUptbURKN1BUdGZGMDNIeW5vclNoWHpLc0NFd1VGUWFldEUzM2Z0a3Y5THdobERPb2JRSnNCMVBrbm5GU2thM0RxaTJuTDFhcERZS3lhNmdQaU9RTUdVdU82eFJxWmNTbkNuem0wRUhYME0vOUtCMTBPSmZtcCtnR1FZSlErUGVHTEE1UW9JRVUxMUhqNUtSeURaREJEVzdSUldnemVsRlF0aDBoS3dTcjQrT0syNHk5ZGpjZUNRaWhGa1JUWlMybk91VG5ybXRlOXo1NHRQMm1CTjdLVlhQUUQ0V2YyWCtvaWVqeHhqL2lwQm1Paml2Mkl4NVBVa1d6MEpBSXlvN1dJbUdIbmpkTUtSZG5lampmZjRnVUxtOEZnUzBqKzlZaUlnQXFTbFpkTEMySWxkWXIyL1ZMSkh3bW9FMnF6a3hWS0tSdzJNQ1RXcElLMUprb2pLc1RmZ281bTladElzR1o3bHlDSHEreXErOFdMSURnUmp5R3NWa0ZXbmpuTDMrNmNWeWVWVzg4WmZhUjdMcTB0ZlpYVndLMTRqcjZrajFDUnB3T0s2TUhVb1VFVW42N1pyeUU4QnFTU2dKLzZvL2hmOXc5YmRQSHF2cjF3MStFdFFVYVJnNHJzSTk5R09UZmNJN0FtNWhTemlXeXdQcEhxSDBhbldRNlRaUytHWm9tdzJ5aDZCdHkxd3RPNGxyL2QyNm9ZNDY3d2V0Q2syNWZ6ZHZReU5TZllCOTRiZTJ5c3F1eHZ6cTRaU1NGMGliL0tiaXk2cTU5aUtPaWg3VnlUcXN3UkQvdHBGU0JEdElvbk1ZVFM1SExGbnJMLzJHejBRd0ZWZ2w5WVdBVzcxZ25zR0dFQlJvN0dzQ2RXK083Y3oxWENrd0J2L0o5VXNmWis2bkZpWHovTjlkNjhmWTJjZS90dkN2UnBXdnZrRGZkZ0tMRmxoaFhDa0JYZ1JLOXEyeDZqaXlXTXJFY1N0UTVKeElpbnVqbTJ2Vm04VnNOYzNFUUVOMERtcE42WnMyN3VVZjFnL2NRR2NoYjQ3ZmZmNnBHTWJLME9mclJlbjlpbWtBK25XNkFQL282UXUvNFBRVXlzUmNIakROcVNRSENpbDMyc3lQQUF2YklsRzNQdngvVWVxQ2RRVXljZ1N2UDVCWlFJMGZlRUJWaS9JTlIrZ0doWlRTaDY4dHU1ZGdlZXRhYkhzSVhVSlpRbmNXUVV5Y09lcTNtcms1REJPc0hVblBPckNhbmIzdDd6QkNUR2NTZzJwamJYVFllK2FSUnRlVkhxWklOZm9hUFhBRlFHNXdRc2VKL1dHVXcvam85bHdVd1VydHlzSjVFeWRIaDRyUXlxVjd5NDJGTDNRcDBWSzhrcjNncDZ0YmtCZW5KQXZFZHU1bit1T2htY3ZPcE1rR3F1bWdXQmhOSWJqcVpKUHZ1aWUxdVVJY0cwU1RTYzlVZEMvdlN2SkNnTnd2V1h1UWtmR2NqU1hmQTJlMUlyNWJlaW8yVElPcFhjVXVaMmRSSXhDNDg2MUk5R3BrMUE4MnpOWXBrSDV0SjM4LzNlY0lhUXRtTnNjSzBUemZEOHJYQkwvSjhTbU9JUEFQcjZ3V0FGbzFTcTF3K3doa21qUFMvdXNiQ2xsVXZHcGYwQXlWdU1Ldys4eENNM3BBemhDRkxmR1BISlRTWEJOaWFkcmdpNDV2L2Q5SHRkbFlwT1pKdkhkd0dmKzZ4N0VFUm13d3BiL1ZsR3hLM3BsdU1INDUrUFpZYm80ZmppenRRcUoxVFVPQ3FWZXVBUEgyM1NWaFkvd0MxcEJoSjJYeWhTOCtHZnI1bGZHVnM3bUk5Z3NZTVdzNVpJYWlCSis4S0NERVJCSnYxQkpRWEJUNGhNL1R1M0Q0aEpndUVHYktTTW1WYzJ0R3Z3bm5RY25KQ2FqM3Y1MWY0YzFKcHk4SEp1eEQ4VjlEL0cvbW1sQ3ZOS3I0U2ZtSmtNYlJkK1Z0VEI3ZDRnZnlRUXgwV0VjcXRqS1dVcFhLWDBwcnNFQ0x4Ri9QdS9aQ2NYMEpjbFRVZVdtc0xMd20wd2UzOUl5YklmakFqNnRMMHBIL3pyNytSK1JPZEdHd21DTEN3angxQnkrU0czNVU1RGdmNU40ZnhBUW1UMFIwTUlFaldFWHVhY0lVWjJzNDRkTDR3Vk9KYlNqVE4zNm5mNXlkdEVzMytYbUErVmJMREhYaXVzZGZrTFozTnVCaTBSZm92a3I2QUhBa1dFYmFEcStteG40SWExTU5MM3JDWTM1OTJXTW5yZFQ5T01sRHc3b21TZ0VHRjZoSjR6WHZHVVNlU2FEdVo2TEMvY0pVWTFUNDRsYUtNd2hUZWR5UGkwaEtnT0k1V0lhdkZMenQ0RkcvenJRMms1OUxVTllQRmliWG0rdFI0OU56SWlYZzJJejdhUnhzRW1zWHVXd2srYjloam1YMU9MZ2o5NzJPbDZPTVlIRXFyWTdZcmU1Y2Q5bnV1N09kNFlSNUJMR2JuL2sxYTBvZ29ZUDZqakUwOUlJYU5zdm1nd3lmM201TTd5RElEdmx5MmkrYXl5Y1VQYm9tYmtWRnJ0WkxkLzBCazJRMThLSzU3eno5SWNNandQODZIbmszT2lFbDJLdm43ZFJwWGVHbzlEZFRZanVoR3JHMTFydHFEREREaHJLUkJVUDRXbVhwQWZPczJ3bUcvdU45Ni9SajZOK1UzRi9Cdmk5cEVHM3JaSzZTRCsza1NQMURrMVFGM2FTVjZOTGNOVnhGTlB6d3cyUGppSGsyYWJ4RTB3VHlIaVZkV1NOZnd1ZFVJMTJoV1B2NEFYMktoNjBnVFB6ZTFQWlBJNUlNaDFYVzMrT2J6WHNIV3NyZjFCM2FoZlA4bWRzRC9ONzlOZ1lUdDNBMzFDN0Nua0NsWTgvOFlXUllYUStQM3kzUlp4N2llWXBtbGlnSUhMb1hGL3lRNlBqR2U3cjRIK29sSDgyK25IOWtRMG9DUVhVTURuUHczSm5BMXFXZFh5ZHphR2lVUDI1V0VxN3lYNkd6N2N1Vld6QW1lWWJreDF0REdmMnJmajRacVdlbW02SzE5N3QrMXl0RWJvNzcvYWErTGVRRC9TUzMrQ1RHZzk1c3JSTytIVkZWTHZzY0hSVDQ4RVo2T25XSFZMbC91bFJXdVVxVjloVFpMQm8vNDE0SVl0d1Y1cHd4NFFMU2xYd0NwR0IxVyt0MXFTc3JiVzE5SzM0VHE2dU1CbHhhVTk5Vm5KNWRxSWNFc1lHd0JKb2dJL1V2amdHalZDSFArVGtLNzlNWStnZmk4SWJndGJVN3dtNnFUY3NDQ214dVZPWEQzcGxvcDhISHkzQVIxeW9aZWh0Y2RIdEhqZDJVT3JHQWZ4N2VOSytmN3V0eHFPdHFCTU1PZTYvVDNtSU0xRDQzak5QODVSY3lLLzE2cjk1ZXR1NUlBNzVORVlialUwbXJ6VU9VQTkxNlJRUTB3bk5GS3RhUUo2TmN6SFRycEpYTW82cWduendzaGJpY3VCM2lsZTltUXRyZ0FWS20rb1BlRTY2QUNSK1VidUlaWUFiVkc3YmRWR1RhVTh1bE5KVy91ZWZPanRQUVBuQWlmRFY0bGpaZmNBTEhPaEo2L2FyTWNIemVuRWVYYkl1RzdwL3dsU2ZsUEs4emREZENnbC9MTC9HWjAzeUVKOGFkek8rSG1sa1lLMC9sMzFXeUhOQ25KUUwzNngzbXZDRXRWMHVvbVk5Yi9PYVZPNURVYUM3SFBkWi9HUnV5M2R4c1lKZlVxMElsTExwMW1uNnVoc0ZGS1l1Vm8wNkpPblNxV1RMbXQ5L2cvK3Y1Q1JlNWNDR0R2eXNxZmlYdzlkb0ZsVVNpemljaFZNZjhTcjNkWUl1L2JOTWtsT3Fzb1g1UzFlS0YzQlM1OFMvUnZvK3kyTWk4YnV0bWJFdXVHSEhoVVVNaTJ0S3JsRHlBUExVTE5rcmxid1FwKzJRMWZmcENBNTEwQ25kWkhGRUNDR1JualBjQmFsVjYzbkI4Ull6YWkyb2RPeS9XcFE1YlZuYVZsTk1NUGdRR0tCN1FYVnFGeDkyMUN6UDVwckwvR2NubzlxT28xb0VSVU1xOXRMSkt4TDdnQWVBSUZVSy9lUUtDZURIVVFGUVdHM0J1WGVxQWVsTXM5NytnQmFib1RwamRyelJBRlh1NWlpcVduVjYwUHBnc1hxNFBtWnhVL3ZBSUtUSEdoa3FLMXRXS0hzVXM5TG9aVWFmYjQ4ekp6VFJFUkFVYTNsTWEzb3YyQjMrbWd5bithb0lZTEZYYkcrS3Z3bG9RTThFZ05wN3RFclA4ZWRGT29XcnVpTkxxcEdwdUVmWlNwb3NML1YwU2lHWk16eE9QT2NFNGlvNHp4aWlxbGhXOEFwSnp3M1hiT3JsTjVyUFlUeUNseVZoakQ1ZE1aUVNiT0l0TStCclArMkl0OGlteW85aW15ZzZWYy9ZSUt3bFZZNFg5Yy9IbXhoWUxmWDY3MTBYcHNUVFhGa1Z2bDN2cGZxMDFSNVRYcnpjaUZjRGF1ZWJ5VE9DSXBTazhmYTRjVmpWOUxldlpWQlFvbmx1WTRqTVlwNFNReW80SDRXS3YrRWFhMEpuYzU2eEFQV2tuUmFtb0RUSWVVdGo1V2srL2xyNUJGNC8wZTdkK21iRzZyOGV1RVVaZnZicmFSZXlUSTRoZHduY0w1SVF5M3c0ZnhhRkVjUXZhV3BYcXVIZG1haGFiVUF2OXBDbDhMVjBaVzVoeEROVHphYVpJZlhIMzlleUZYT0N5ekplK0FJeUdMeWQwK2d3bXh5MU80aVphQjhRZ3lEbVRKSXJzMm14S0xnMFgwNVN3WW9GY2tYeHJHMkMyYVFpb1pWc2kzbDF6MlcrY1pZZjhtWXBtOGVUTHhaSjhvUXg5b0ltdHdUV3NtWm5uMURWWHQ4UjVjTGhabHhoQzN0VEFkWWxNNGp5Y1BaVHpJeU5PcE9pQ1BRU0RUTzhzQXVHSFI2ZWhQbWdlSmhNN05NQTYvMHU1Q2RhTTBUMUhxK015Q2Y2WGpjMlMvK0VUU3lDOXVXUFdza3hJc0llaW0zZ2VGZzViYXgwNEptenU4VGt1QlRkT2NubFZkT3FIVE5QOHdPN3NsNFk5NVZJWXdCOTRhRGthL3FGanZ2aXFJSDdUM3BaU2h3YUx6bDgyNE1Wc2I0UmRkYUJKdlZZK0FHa2RLZmdlcWhRZjdic01SeEd0TjR5WGZLTzZPZEJlNFlsR01USnladkF6VnJqNWhObndKYnQ5bzV3cEVGMDhWM2JNeC8xTmtBb0RmdEFvQmpDUnRIN2FXYitTL056TWxOZkhqSFA2K0hPNE8wUGJJSVg0a2RZWGpWaGdseUxhczA3ckZCc3M5M0JCYTIyK3E2ekF1VGtVMXM4UTg4dTN6WDhwbVJSK2UyUEZ5NTJXZ1BUNDl3VlhwU0tYNjBHa2N1RW8vdFYyZXhHa2dYb1hFN3gzU0I2SjNnNGRRTlRzQWlmN2J1T2FCRWRPaTJabGdxMXByc2dNNi9DbWpkbXZPRWVSdXlDdVpQN0Y0T1F6aWpCSHg3Y3ZmYnNpcEsvOHBnbWdaMHdJbmZvU2JabGx3Tno5RGlIWWRjSm1xY2RjSmpGUUI3U01OZmFqRGtsYnl6dURJc1lLUDI4YmNwcW9zVVBzTWsrWDVDWTlheTYzdzdOcFlhdDBOT3J1M2R0SVNkMC9tN3prTXlPWjArckhoYWg0RE5Lb1VlaGVlVGRDN1ZOOEVYa1ZvcDUvVU9YVitZeldOYjhLWlFENzhHV3d3SVRNanBOVG5iM01YeGhLb2NxYTNVS25uOHltRFFROFBkbUNpN0FWK3FvNW01MDcvSVYvbmJzVnFoWkxiek0rTWhlanZqejdENU04eDcvNnplc1BRa0ZlbHVqYjV5OFJmQU41V3EzeVROemxBRllXYk1RY0pwd2xVMkUzOTBYUVJ6aXhKbkNPalZRT0I1QjFEZDBGUGFKWTVIN0J4cnpaSC9VbElFRVpGOVhtenppKzRRbTN6YXUzUjVSL2lkcHpna3VJb2dWZW4vUjNVTUZWaTFUNlYwT250T2JWNHJyTnRRaVgzdGdmMUUvUUNKNXA1czB1Y1JQaU9KZFlzZFV2MytBYWJIUzhFS3NwUmFmSi9VRnVnOWxDUUNNRXZCcXgrNXZaWHdFQmZuL2JuS0RaN1ZWMlpYeUlPb1l6eTRoUzhuOFlqREJNYkdvWEsyVGhFY1BOaDNwcGtvemN3bjRoNUcvYWdScFZPdG85WnJXVGgyMEdXZkR1V0hNdnBPWWNHWEFmU3lVU1BNYzYrbTYzSG93aEk0bmoxNFdsR1Y2WDFDT29wTmxrQlNSQVRBb1NrT0hQUmZXL0d5NkQzejJuNHlkaVdEcmxWZ3dzRzJoMGZDeTBvMzRYRnNOTXRkTzZ4YjZqVkFPdlNGWkZXYTRoQXhVVDIwaFMzMUhkZERhNHBkdW5lNDl4amVlQnVDZDRUZ3ZudEo0NmF4cEx0ekx3N2tXcysxUnBBNnVsVklwQWY4eGxNTU1BWHlObDNnV05pR3V6RUFLWUxzM01OcENrZmMzaUhRMnIweU1KdnR2aFpkSERiWWlHYjNONnJvWm1YcjdSNW9YbFhyb3RmbjRkYWJ2bzVpMStqZVNodDdtV0h3bk1kYVltTFMyT1ZDV1Y4d3p4dXJTSUxLL2ZPSnQ2aVFQOGRUTU15bkhnWGJON1ViR1BzYzNRZjAyWjQ5OHZFZmpjUjI0YzArOTNwWFBwL2dJQ0FnT2IwZmJyYU9iMzhBTnRJd2ZoMlhpOTExL3pXNlZWRGtldlFDTEEzZmU1UlROdzF4L2JaYmdpeDNHRVNqUjEycUt5TW1ZU2g2TEZjaEc5SzAwVWZjZXhrOUhwVXdqSEI1VDJhT3grZnBrYm1zdVVyS1BNY3pSNlNSVW9DVGFWcGtIZEV3dC91OElCQW9vZmk2WEl3U0dPdW9mV0xqRFY3UXMxZVVwZzJwcE1LNHVXQXJBZ0tQUStuZHo4Ykx1WFdHVkdFWE1XZXNteTI5ODVhOXB5Y0ZZSysrc2tHMllzd0xhL1NKUjhyZml4Z3FHOUlQMnZjaCt2QTBpN2J0Ty8vUjdXVFNBUnlzd0hrazJPMWJqMW9TWUdpcUsyekw3R3Z5ZW5hMFRFSmt1NmZQVWlMOEE3WFlTMko2N3N1clp5aXZTSGEzZmlMZWJwcnQ0K053d0hrVzI0ekRBQVVOWWdZb0lFTkRTZE1aSDBrY2Rla0F2NDRMUjJYYTRHOTBQWEdUeEVaamtVUnRvUEEzaGtveVh0Uk1zZkV6cW51eStadjJVamdNellZTHZ6M3FRSHk1UHFSR0haRjhaenNVQUVDM2V2UHFTd01wTEs4NmNzWDMwUGh0eklVZkM4TS90bWh2cHgxYXhjRzQwaEUwN1pEQmlOUXl5SXhHWUdOcEVJbzNSemIybFY1N0V2Wm14TFRsZ2cwbGJpejNGWEpYeEdDZGhtV2dFY2p1a0NMUEFsVElGV3h5dVJRc2ZORUJ0SGtjY2FCay9oSnhWcFNzUVlkNDdOWXJtMlMzckZzalFHMTRuWUhQckJyL3JLdmlWZjN1RG5uRStYQUpKaVpHVWV5aWZqU3h4VkNKMVVBaUtldm9Yc05LR3U5RHF0VHQ4TWFqOTJMSGRGNE9RMEUvem01aDVMd2I4T0VkTzdOWGhPMFhwTUQxTHZuRDUzMk5Pak1sRUU3MXd4U1I4STROZ3pQU1dVQVdXZk5aUnF3S09GMldSWGd6dXVpU1dUbTl5Ly9MVnlkTDFCaitSV1EzM2ZlOE9RdDdod1F4eElPSUQzajlhV2RXczNaQ1I3Rkl6MGFwaUFjbGhZcWZEOWhNTmUzS2h6WHZFbFFQdGI3MjM2L2plbkEvVTFXZmc5TUZsK2R1RWRJUmpBdUM1Z2NUTVRhZTJrSkFWektXOTFSZTFHY2xaMm5IV1ltVTVibStVa3NNUXAyYWVuMW5JeEM4RDc5dFBvL0xubnlSMWFoTktSdkhrYmxrVDRVQk5QbUp4bHMxbEZPa3VjL3c3c0JraEdzei82ZUFFZUxuSm5vS2NGU1ZveU9na2hJbHkrMUxISG1seklBRGhEK3dadnAwTVRFeE9nUlRXTCtkcDJlcjhuM3JncHRnMUw5OFpldFNLSHducEJVSjdOTUEvY1FhNkRqM041aWxQWUV4NXlvZ1RPQk9mSjIraUpnb2xUN1c0UzFDOVpyK3Nuc1hMUy9OdG1DaHJwQ1dsSGFOWGgxL1ZibmhJOUVRVy9KMnh3cXR0dnJ1SnZoeGZhRC9tblVIUndtdUF4R3AxMWZqZ0tUMFYrdElWRExGeVZzVktoWTg0OVZ4VVlweXdxdTJLSll4RWlFSmpaNjRSRGxscEtWYm1sK084bWo3TWJnODdvT213bzBzdXp0NjhlVnR0dWl3ekphbnp0dS9RdXhuaWdadHhoeVVxSGdhK2RQV1ZrUmsyeUhFSS81eHQ1TWQwZXdNanNkZmhXZFZ2OTdYUlVwcEN5M3lYRStBWkNJZlEzQmNwcll1WXNnV2hCRk5UVy8zbmkybmVDdll1UkcvRGh2L2s4aGlJOUU2QXl0eDFhM1RBeE9TemNJV3lJeTI4S0dZRzNIcW5rY3NIaGE0b1NuNWd4ZE00RnZpam1IRkhWdzFFT1RHcTBiNHRwdDlJN3RpakhXejVyRlFobGRBcTlvR3lMc29pQWVNNFMvZUlrcVN5a2FRMjRTZjZhcTRDR29mL2haMGNwckdiKzVTUE9zSGN2VGpHSXhTa0tBMHNLakN4SHNodDg3MXlHbEUwb3pwWXJuWkEzSHY1cklWNVhLTWpZRDRXWHltRUFUM0U1TzRTbDRmU1c4VHFWS0hEU0RnNGhBaWlXRjlOR2RrZkNRNENIVkt4K016WGRKSXQ5azIxQVVMZm5XRDJ3dUV6TUs0OFJ4VWVORnA0cSsyUDRFZ1M4Q0JnNy9UQllwblVQOVdQbXZjcy9EQlI5bGl1Mi9PeGJhM0xFK2MrcGc0VVlkS1RpWEVnSzFLbnZRTEtQOVl5OE5UK29XS2xWRjZoTHhZZWx1YUsxSE5XNkRUaHdKQkdhaXFuNFRXU29CdE9WYzVxWFZNMkFlRjRuS3kzQk5yTG1LZG1yS3BMaUJhSElVRDdKUzFUUTlGWnJFMXF3SFpDSmtrRHdMU2dJZDA5bXhjdDlKR2RPbDNJNVI3VUJSc08yTHRDK3R1dGpKNytnOW90M01FKzFEa3Bid0JIUlBraTQ0UVZPdFB5YmlreHhoVXZacndXWkhvVWNqeWpDZC9CWDNqRU1zYXpKYzEwWVR5QjluQmptN0tPZWRCeVh0c2pSUFlPRTFFdmZ1N25saTJVd2RhaUhNN0dCYmZ4THltd1NOdVdWS0dXZk0wcXo4MG9LLzFrMmdrNkpSdVdQYkJCSXVHUnNZUUhPNGdUU0pPL1kvMnRVQlQ3dDd2Tk9nbiswdjNkZG4yQmxmendLMUFEYVd4eWFRZWM3TXV0VW1pZjFORWlGci9rVk5CaURoZGZxUGwyZTE3NGRrZjAyRm9DV0pvbUJlL1UwRGN1OHByQmZxMVVzV0tGaWZiNXRRZERqdHdrNmZGdW13eHBjeE42czQ2THJmZ2RXaStFejdOOWhVVDMxcDFQQVJjWFhRUTFCZzVta0FsSVE4VVlreTNock1rZERpdGVObW96UVRtZDN3QnZNUmhOODI2dUk1bXM5SFZDbE14djNzTXZkSTYvc0QxY3BxVDlHTlhWTzYyT2FJdzY2aVJ0dThIK3JjdUtocG9yRVRyV0I2ZnBMRFBFQnJZakl2am1RYURGZjArbnArcmxodk9ZQ1BTeCsvQjlOMDdtY21UL09PT3orREJ0YVYzY1o2aTJTc1NRU3NTaWNvaWNtZzIxUHN1bUcvU3NQUG9xWVE2YXVyUFVMTCsvNEhsVjIxSUdUOHlrSzByWE4zRHBHUCsrR3A3OGF1UXpRN0tqNXBzeVFRM1BnT1o2bWgybno2d2lNV0F6UzdYTjU5Rk53aE1ZMzBnQXQ3c0JRRGk2bUJUdHlLejBOU2VacVp5YXBBZytmUVhoZys4cUJZaEJPME5qd3d5LzJCNUlpTkQ0UENlT3BybjZERkM1VzNOdGRhOEpUMkdoSU1UNndUZk9OTEFnbUQvMGxtTTFpblgxaWh6RENwR2hGMUJyT1F2MzQ2ZHJMNGQ1M2l2M3pTOWlEM21Hb0djOEJmR3ZuOHdpZ2JnWFAvT0RMa0htT290dWVZZ21PMWZsZXRVMzJxWGRhWlRsZHY0NDI5K2xLMFl4UFpJZ3UrQWQ3aFFZamo4MFpKeE9DMERDR2lXU1BVbGJtRklrUEowcytmd3hYZk96V3ZzVkkvTU9JaFFiWDFkT2d6L2NlbnM2dnhZbGpJVFdrNXk2VlpvanovZFM5NmlCOVZlUkMrb3VWcFR0M2JYdmdTUFNkY21Ib0JUZ283RnF0VURwTThTdWNoV1JQUCtld240RjdPdFkyRmxtdjNMMmN6TGUxcGdtbEViMXcySjlSQUwwWmdsckpvaGwvQWJxWCtIUkxlT09IUkZ5UVpQbVgyUFQvMExSRWxHeVhwZTFnaWhTTGk4blB5RUJpUk5uUkU1cXFSYjdwUmppTnQyd2E2aGFIdmVDVHV6VkNFaXhsQk5aUFRpaHM3VW1yTGxOdVc2aWZqWS9UMFY4LzVLbCt2RFhjeWxSN2NxSGVESHlDK3UvZW1jT2RER0Q5UENIUnZTTUZ3ejZJcmhBMW10WHhmaVc3UXJMY0RDeVZnWnJ3R0Z3QitPdENuKzlSajRSUkFiR3VydUlvZE5SOWMrc3UvMDRORmNDblBTOGNKaXJub1VtaExGVkd0cC84enplenZnOXlZZ1BrN1pjR2NXNW5WUDFCcE02b2ZBMVEySGkyY0ErYmV0WEpGRWVoN2ZId3dmdlYyclM0dDFwNzBEeGZFUUtFQWY1TnBqRWpSeGZ0d25mQWhUbEpEajlCamRDakFRUDVCV1BNZlVRUk14WWtNNlVXcmV6LzV3TXJ6dm9wTWJVeS9CVDhCaURJZWFoMU1XZTZGZjRwV0lOelU5aGtHRndkYmZMVnpzOE83ZjFua2RFSUZXZUZ6US9RclYrb3pNNkx3QlRIMjc2M0V2N3lmelNablNHaTFKYkIwT2xXWWVoTkJTVDJGOHZhVGxaNzNJVks2dEhEQ1hnajdzOG03UVJTNWhOUlFqY0VJRUh5M013ZzRVTjQ2c2ptdHZsNkYzbkZTNExGUmw0MjNmeUpOcHB1VGE5V1dTR2F3d0ZXQ2doMFJ0WVg0aWg0ZGZXUFpZeEVpaEpWTFpUSGQxWGJ3L1dWYy9XZTc3S0hyNno2K3RZTjllanY3TkJuOWVobjIyb24zYWR2dTBmSDc5SGhRbmp5QnpFYWMvRTlxZkFJRldpR3UxQ0RwNldreVdvRHlFRWlZNzRhVis1d1BZVm9lR2hWY05STUlKOStrWkxNdTQ2bCtEbnFnT085Qjk2Unh3Zng1UlVQRzVUbjNnb002Vng4YXF6SzRGVjdHSklsaEhPSDkrbWlTbEZBODFxNzl0SVhjVXM5Yk9scXdlWUV1R0owMkt6NVUwTTlRbXlvRDZDM3AxZGFIKzlQWXNUODhIZ3JnSTFvVGIvNmtJTk1MZzMxV3VMS0gvcHhmVlJ6YzdtRmdyYU9HM0lNNk9ScVhIMVJhdGlHZU5oK0ZYNWNhbElzdnJQQjdQNS92K0NTcHdDc011RjVsUkpLcVpkSXQwdHFzZHVKcHlOMDBFV2gyN3dwT3BEUDdWOWZYNlkrODI2VVZPY1BSdi9SQlRCZnYzWFQ2a3FGMlQ3ODVhempjYitlMUVMV2ZuVlZiYkNwQnJSYkJseXo2dFJibTVCaVNkYkhYZ3JPUW1kei9RbXJ2cVNGTGN5N2RZTkpSQ3FxWnBnQXkzNnMvbVBReFZIN05WVEJ0eVZIcDloeTdmMEh4ZCtMc2ZYeHE5S1AwcmR3RU9xVVR3YjNzSUhYdlBHQnNBbzI3aEFKWFZYR0ZiTmZqRzVEY0JwV051NDFZVy9wb21CWkQzdUY0UzVoeXNoWEN5bkhjK29sL3FoL3ZxNFYvMXpFdnV5UjUrc2JoUXliczRMZkl3V24zb1hESWMzUHVlbHZhQ2Y1a1lyMklkMVJiQU9zMmM5aEozSHNsNjArS3pZaVNDcVgzLzFwNHJGMmhVT1dNbXl0ZHpPNHdOZ2hrV1lsdFlDU0sxL29YOXgyS3ZMSmZOeVVGZjQ5dXhPOWl0ekFJTTR2ZzlBS3ovejlWemk4dFlCRnNiY0grUitRcHRCMlQzOC9OTWVhTHB0UG5uOFU3VVZnYWRmc056MnJpa09IT2ltZWFkNndpUm9KV2dIY3pPQ29tbC9DeTRaci9NTmdQR290MVpuSGJNWi82QjFEeE5ULzU2dWpoNjZHLzFnT0lrT0FVcGsvYTRvNUpDckpXNm9UWE53L1VwR1BaV0ZtRy96dVVXck9IUEEwczJVNkJDNE9rWlo5TFhqUEJic045S1ozNml6S1VBVXVhOUdESU9aeXN6eStYV2JJZCtrZmtWeDVLdk5lNjFBN1dtVWdJQVZwVUoxeElPc1M5aVUyeWRnQUdMeDNCcCtaMXlFNldsOVBlQ2QzdDRmSnJmVXhlNElKRzFJNHN0a0JVd2loZGZibk0wMyt3NmMrbTZaTFF4VEFhakYzQXZsSTZLdGNnR1RrclVYSXBXNkpKdXVrTHQxM2tZekE2L21IWUN1UGNaU2ZLcC96YW0vZDNsaUc2YVFkWFJUdUJjSjFQQTc2ZHpTaHdyeno4aTBmdEk0cjRDSkZBOXZGcHNWeWN0Ulh4ODNZalh2VlNiRnpQb2VTSFA0aUdZYnhuQVlXM0lQb3ptb3M4U2h6N3h2QXZTaXdVNjArYWl0WXp3MHVTV1Zaem15YWNhM3R0VlZLSkFsWXMxUjJEMUY1NnlHZ1AvVnJ2M3p0UGQzcjZSRWhNalNvZzZSbWFrTmZsTUpFbmw2ODlzZUMwbE5NcVFkRlZaNXlNdFc5TjlBTThmcWJJL0U2cm4yMGw3L21NaXFiZG9uMXpOK1o1WEh0blhmWnIrRDF2d2NWS3ROaUVsRjI2Z1c0RXovb0tTTVdjWGI2dlcrekp0aUpkZXdKVStnRHJybXRVYjYvSTNZQ0l0czEvbE9rTG1icWpiS1g0Ynd1MVdkMVlZb1hiMWV5M0poVDNOUUYzRm4zNW5rOVkvQnQ4Z3MwajdYVGIxZ3NHVStUT2dEK1ZWcGRCWlJSak1iN3BjT290S2dYdXFMenZZc0NIUkNPN21oc0o4YkZnd21TY1R4MGY1eHEyVEdYZStTTFhvbmZXdkxGOTRjMFhWaEpNUFhLdWZEaEZtWVFkbHU0WWJqYWpaMG1HTTJ0QlhGbU1VcGpLL1pQUS96MmVlZ3l0REFtd1NpSXpaY1FnYm16Mk9hTnJrem10QzB0ZlA2NFA1aTgrdHZtcmRyVVdiVmx3ZHhUMm9qL3E4YXk4YStKcjJsN0RuYmw2TnROUHV2WDFuS1JyNzR4bG1PeWdhVE8rWERMMHlHdVF2T280aTZhdHR2aE03QjdadmN4WEhzKzhWMk1QQ205S3NVRHZjamgyQUR3TG9LQTRYSkpsZWp4cGIvOU8vM1F1dmZTSzhraTRrVVplSGduVFNOTzlmejVocG4vMzAxU0JndzVGc2NNWmhuQkE3SzRTRENuQ2N4WGlNM09XbWJkWVJRWWR1YndCUStRVTVtTmM0UTlMNXZ6SmhBQ25sa055R2k5Q1cxcm9veFhtZS9WRXpFYWxmM3R4NnJpVjlHdy9iVWtoc1VLeDFEMnBNNTNwS1RKYVdzYWRicUhTVHhVc2R0UFBIQVpyUXpKckdNdjVrZEJVeGd1RlpZV0Y3V3NWaXVvaXc1U3duQW9sanRpL0xQRmxoYk1pd1ZxTXFtaG5aMXBzeXNUQUw1SjdvTk1JdlpsUnFULzIvVndreDAxR3loTGFBWUs2eFhsb1E5eHQ1MnRmYy95UWZyYnFkK1BOZHBGQlFOYlFvclA0VXltRVg4VndCWC82U0hVVC9lemhkQUZYQ0RZSEhNazVpY0ZYcjFCL21nZ3NtQzJlTjlVTEhXNFYyWHlFb0pRUmc5c1Fyb1RxcnE5TE0vV3IvVHMvUVR6VmdaTU9YYU4zSFhkcTZzcCs1VndCd0s4RHhLZ0YraHRBQWJyYzltOWxRQTNtbXdhbldMY1ovVzdsV0h1WkxiUkFlQlNGekdJSTBORWNhSVpWU3lCU3JZOGVLbUxkY2d4L0lwMUk1UStRb01LejcwRWM4UENWQ1FzVUhLUVh2UHVFSkNxeG04VGQ2RGFaUW82TnFObzNiSURlVlFtREJPOXJKQjBQWkFXV2ZTb21SZXVyanJ6dUx2ZjdOTm5vZWgwd21wQktFT0lXeUVQNzBNb3V2MVRpMDhOUk10Q2ZEQ2xpSWpDOUVhMWR5L2ZFZEJwQVhGQ0FxNnl5U0hTUUcwenRFd3NpZjZsdFJiNkgyKzRyWTdyUjhkT01EWWRsdFdDdWd4aHdGQVJLb211RlZzSVQyUW10aytmYWhpU05tZTl5S0NOeVhwdkUvUDZ4ZWVKRm5nU3FuVDhQd3B4eVNqTXorWU5kTFA5b09rM3ZHWkxzUjg3NEpaNEU4dzN2QW1pZTZsczFaL1FqY3NISnZIWlU4Tjg4ZEJBdSs1NnpRZ0hKcDhmT2Z3U0l4dkpGVEFhdkxLeHZHMkE1WEJJdlZsWUtIUlhINm9UYXhtZ1NXM2xOZUdHMmlaanJOM0R5NXlSNFd3UGJTYXJ0ZzBLam9ZZmF1RFVYQlZuVHJRNDdPUjB5ejRjMVh2MEVkcFVBa3phZE9Tc3NnT3ZacERwSXZ5Q3ZyN1hZeWJYTDV3eW42MXRxVitKamt6UmVHR3g4VS9LYWtHcWo1Wi9MdVk2SXpPTUNSbmlwSXdiU1drSXZPNnc0NExURDkxeHlRQnRIbGkzaXo0QUxSR1BhbXVzUWtxdHZTVkdaNjZwNUNxRTNtcERwb1d0YlNyZTB2eUFjVmhBbkt4T3FrdWxJSzJianBrakxYUFdlMUJrck5kVzVVMmFoODJYRWtaWjB3VTA4ZCtuZEt4aGM2U1lEenB0MTU0ZlFJRjBsUm1zRE9tZzF4bjVKMHVYRVliTmw0cHBHemtycUZ4OVNDTElDSUZ4SFFxdHFiekdwNGNmUktnOW1kMEVrRjVTVDVRK3Fld0IyN1JjZkpFWXVKckJZSVhObFNsd3VZemFneHYwVGxHUVlVTy9LSWVXc1dZRUxIMExha0EzRFRESjh4MDNpdnk1NEJRNTIzR0FUMndrWUVUMWhOVzdVU2RLT2NOckc5dWRxL0NvVjRNZEF5R2tRRmpsVW1wdUs4ZThwaEoybGtrNFkwNGg3dHN4OHJGYjVKOU1PU0RwZGF3WVZ0UGtKOWphQ1hDbUJMaEdKYll2NGFxVkRpVlNRR08rVDN2QUlVL0VxSWxEa1VrVzhkenM0T2xvbWh3cVZ3WUJJN29XWnhpYzBOcUgxSWMrckJEYm9yWnA5S0hZZHQrcjU5cWpwU2JvTnNET21RTzZRYzNYVXNwYXBYTWJHWHh3M2hzY0hTYzFDbmV5Rm5xekpKaXRwWkZReFFTNVFPdGg0YVU5QmE5cXRYM2t2UkVySEFhamRMSUV4emF2bTJJM2t2MDJTb1U4VTBLV1hBUkJWVWtKa0xrT2djelI1QjR5ams0SGZpN2RZY1djNUd5N0JDeHpJOXBjaDNUcExYUmRuVEVDUWphMG1lUnZjSFYzdVN5MDFsR2U5a1E3d0dGdDdyZjVpNHIzWldrS2NBOE1xMmZac3JnODRqYjBQWXhDdVh2aGx2Ky9wcUFiTzdNT3l5R21nSk5WYWppMkh0czR0OFBxb0Z3OHhNd1llRS84MHRrcmdQWTJndWdTemYrVVZxYVZlMzg0bVBPRFk0TE9PL1hwalNXWGF5MHNsK055WjV4M1oxVHdudU5pL3VOb1oxVkVpUVNyM3BzZCtSdDZmTjRFaXQwb3Jkc0E5UlpPbnpSUm4vTks1aEZ2ODFBZzBGN2J3ZnBuYUEwT1N1bTJuVy9PMmVyMGFMSDlpcmRzWGU1QU5lVmp4Q1llZzdyUE9MUm4yYStveDg2YmdRQ0dOVkZtRmxIbWxrNkcyUnhYYmU3eUFhNUd4eE1VK3lBUEJURmtEcEdyS3ZuanlRVy9vZVZTMHlZZUtlVHNubmRQc3ptUE5RamliNFJxbWlHbXZ0R3hLbW9DUmM4MTZpRnlJRVA5Q2ZUUTcwdjdJUEM2d1dnTk9LVG82a1gzTk92ZXpON0ZwdjhzTk1OR3JMZTAvZDR5bW83WjVjSy9QMlh5M1BIcFVqREp4NGZMdnU0S214bmNEeVdwL3pUTFhJRzF3ZnY5bXFMZ0JHYUJ2SVpxM29Jd0VMRjJZMDgyMkdjRmwwcDVzb1NvbElYcGFPUUlWSGRWcS9aKzNhbmdjTnprQW85bzBGVVRtRnp2WktidFU3bkZSbklSUWM3SUlLUWZ3S3oxL3psekNKbHhSSEVOS011Q1JmNjZyQWVpRzBYNmpXSG5kTVFzWEtFb1o2YkdpWGpsS3Z4OXdQSWk5eU1MNklNZ0ZGcDdDZHQwTjRiUi84NUg2dXdCME9wYzFZaS9PemZ3a05GRUN6QlpaaHJUNWFnaVJ3cUFkeTMzcUovdnFuNGtxaEJja3FHSU1KcDQwUGVIM1E1RUxjN3ZuK3BTTzQrd2RnWmE4U0F4ZHdqMnBaOHZTeUQ2bE0wUXZKNng1dFoxcGE0SCtlT0tTUUF3T3BnRHRhWld2WkVzQnYrTmlkRm5jOFFJQlZkcGtqVS9Md1BkMHBlQmkvRDJYeStrUHJqUEJpa2FBQm5LRzhKNHdMR21YWjdSTHpJL3MvVmgySkVwQmwxTnBzb3cvelIzTEpzWW8xRXgvNHBuc0hnSHVCSEp4YzVyZmNGdWhWaTZwZXFKTEtWMG1YZkdYRnZOTENSSERYRDVXM29XT1F2dys5YjFkMGdjNnova1NyZlV6dG5uSTNTV0ZnRFFyU0tzMVdGR1ViQ245NmVYQmlpS3pqTjhGdmFqbXgvcDAzNjZrY0lYczZ4a205Q3I0VklnQTdHTXNsK3NhVHo4L3kyWUhxNTRha0d1TllWakZlY2dUUE16WG10aXlkUm1QY3hZOWpiWmVORFFJTitjUkJRb1pqR09UZ2hZMDlSRGZ0elo3bklmbkU5UTZ5RzJ1TXRkU3FLNVZySEdMZk9PZDJpSFFIRGxLR3N2UnVuc1c4S3hZd2FiZjlSdVkxZE1FQWdXUmp5OFVheC9pV3ZFaU9waWtXRnIrTGZZZ1IwbXBXRFpocndTeU1EVlNWQ0w1NGpNSjVXTFVieXVOandublU2U0p2VGJjYUpVR21ReSthT05lbG9pcmkrUHVoaG1GTUFaU1VZaHE3L1o1alIxZDdUZ2hvdTRDbHhuTStRQUZ1Y2ZvMnBBRFlDVU4zSXhGZ0k4a1BDTVdacFNKYVRiSTQ5Z3pDTTJ1Q3p4cHBjcUxkVzkzOEFKNlNuWWR0UUFkUGVST1YzaUtBRFpKTTl6NmF2cGhJNUZCZlhFNFVpcDZuelVyMkpXaFp5cXEvUE8zNWFxclNob0MzUGVIQzJpZnVNQlFBU0pqdjRnVzhjRS9udnRVdGVRSjg4ek5IMGtNNllpeDhHdUZ3RXA5ZmdZRE9vK01RREJRVGFKSTlNei9XRnZmOFlGLzVHNEgvQnhqQmxFOUZGRXNQTHVodyswbUFLREJPV2ZqZFJPWVN4OEJLMzdRWDZJVCtCTEZJTnJCaDhrcHJBTktXTDBUMEJpWjRYcHRILzA0S1E4U0xiRXY3THJFZm0vWjVvaks3VE1wU3FKeG5xeWcvclkwRERhbjhBbXFZWTVqcmphcjRvWG5MWUZ5V2p3bkZORk5PTjFuOEpXQk00emk0L2ptTy9zZ2dKWmJmRlVSV3lOQXU1ZGExWEdPZ1NIV0pROWIxek5vR25TNlN3b3dOcVl3NC9Kc3Y4RmMrK3A4eHR4VitvSzVVd1VPWkFFa3ZCZ0tXallhTlBxckQ1Tzc2cnlCZ0c5aXFxT25HWTJwL3ErM1pEN1ovQi9ZbFY2VFY0dmtTN04yRTI3WndNQkF4cFZFZllMNy8wclBhbEdCRFd0Qk1YbFFJMWtuWHNvSEtFOGQycmg0U0N4RXI5MTJVT1V1bGRnbXNxVnh6R3JHOW4ranhGcER0c2JOSXNoQmEvalZhaTk2eG1nRWZ6QTRHMkk1OUZHRUl0N2pUTmZXOElaRWRydlhFenBEQ2FkQ0lMSzdERGFGb0pOdytVNlo4VjMvVk1rUklzUWZXcU9qR2I5U0J0L1BFcy9qQTYvVmhGM2xPQjlUbG5raGl0K0l4UXd6TitBOTkraHF6eHFPK01NOFhZU21VR1ljdDBCbGozcmRZTnNmRE01THp5cnFCeWlyU0hpSHl2U2FpamhQQjVWTVovS0cyeWVkR01OUExLbVk1UThVV29wdjZXZ1NFNm5VT1JJeFZMMDJPZUo5Q1RVcDVybWtwVWJVbHJ5elBrZlY1WnZTV25WOGh0MU1ERnFWR3lNU1R3WjNTWWY5YXdEWXBGVHpOOUlYMUhCUFJRM04xV3lXK0tNNlhsMDB5aWxNWGVCUUxDVU83RHdUc2NiNXNyM2xRYWtudXg3YUhkbEhWQVVxd0dYVVRLdXJuTGdVSk40aDlPSVdOcEVCYy9CVHVqS3FtUWpsMTl5R0hpZXl1eWdhYXJ1TDlJaUM5QUlOeXVRempDK0VESkJ6RVA0ODAzTzZ3WjMrUm0vbWY1V1crNWw2RWVvL0huY24xSG5hUzRQY2t0aTkwSjdyVGVSSldPbWxZVnNwdjhUVnlEMkRzai9IZ1crWkFhaFRGQVNLanBZS3NjQVBMd21BUmNMVWQvUExnR0FRRFl5YkVac1IxdDE5QnprTGJZV3pRUkEzNDUxaUoyWnE5TG9pZkRBdHFQazc0SzdCdGhDVDJyZzFMWS85Yzh0SjZaRmt5UnQwNWdmdFkxWU1KVks2Mjh4RUxxR2k1TWFYcHJnMVFGTHlSaWpSUnF2cEJtSk5GSkpEWEpmU2pmVHYrNmhzTGcvN0RZM3gzM1RxNFUvMXBMS2NpdEx5eWdlakh1THo5eTZ3YkdKNUkxMFk4REF6WDNtYzBXYStsLzdtNUtTaXZaZzI0eDEzQndRS0JIdFU5NnFoeDg5TjBSSjdScWkzT0g3MnVqc01qUXB5Qi91Q3dmVGk0TlNUNFdzS3NrVHI1TVhvZXZRcXM4NGdIdm9aUDdUVmdxN0EzVG1BVVdaSWVrVGNPWHpYdXEwb2NQaGs4Y3FsZWZRV1dkS01KZkZ3K1Y3bmxtVm1LbVI4aEExR2o5bWFSVFdPTkVyZyt1b0tONVRzUUR6WkdkSGg3cXIzNEFUenlBbzZtNHZieUdMTks4WGtFZkdKY09ScVNwZ1R4WHloTGxKQVNHZ2EzNzVLVFZEVnBWekQxUm9OazZEaGZwbFNtZlZob3M3aEJVYVQ1MjZEaW1odjNhLzVzRzBJUExNRDNTVTYzTzNFT0xEa1BrQWtoWk94VFFxQUt2bS9NVDA2ZzIzQTBnRTlpT1o1bzlMUkRrUmkrSkJIMzdhVmFoTFNBajdWVVA4NjNLaTJsVC9xbVE5bzF6K0JRRjZNWEg2em96QW1UU0QwYkJVYktoNWxEaThJR3dBd1RDUWluVm9ZOTlxOEdTcG5oUnI4QkFZaElwRkk2MjhrMHRGV28zMGREZVBFZjR0bERqelg1TVhHNyt4blJ6ZGRYU3hMd3JXRmErYlplZnozUEE4RzNJUFFMdDl5RXNNMjRkNktwdVk1WWFUSDBuU2JrZnVjZjdTeDBzMzBuKzlxK2hKK0ZqM2NWRDRWOWRGNDM5UW1wR3lXTVhrTi90YlY0ckdIelZpKzF2Q0NuK0h6dzcxbGM3ZUZFWTdSbDhMMVVZRDdmTVg4MGFlYUwyakl2L1pnaUNGMW5NRmMzRm9IbzlEQTFkOW9jY0txazdHZUtRbnhMMHgrSU5HandnUlgwSlA5R1IxbG1oaUV4RDhqdXZoREVtU3EyRFBlVXliMnkySXhpWWQxZWhIV0hCQlczWUpXQ0lwbXFNYXExQlFoQktBRmkwaFExY2YwSnRaRWp6amFyY0lwL0hYb0NaM3BVaGg4ejI1czhWVkNaT3N5RmpZemJycFpHMkdrb1Z4R1NuTVYvSXhIb1ZFV2xST2xHNll4VTArVy8zYTdyMFlpOHVtbGVJZXBITXR4VDA3b1RlS01GUEZsM0hSUWUyN2I1YmhYWElNN2I5ZkJWQXVYRGQ5WTdDVHlPV2hJYm5kSGtBU0FUOVBlRWU5aVZoYTl1MzFKOXFsU245Yit4MDlUNWk5a3JoOGluWWROdHFUcmQ5KzJ6MG9nNis3c204dTUvQmpLSTVob2hpeVhWMyttTFNuTWl4RmhmaE9abXBSaGVMVG1zeDl1U0RXV252QW56ZUtLR1BXeUJYb2tZVzd6ZU9CUjZneHZhcVN6akNpVC9VOUN6RTE0WjhrczZQWW5ocVVyQ1RhS0FtbEVlMEkvZ2o0cHUwY2d6dE9sZmRubGZ1WXlsWUJHaVlUK2dKc0ZQUWQ2ZUcwSGFYY1lyNVFlU0tjNGhoRmNEMzI0WXkrdDVoQjg4UVROREFSb1NNck5pUGJVRmpsclVPMllXTkpaYTJvR2FSczdYUVpQK0xkaDhmVVQ0cVNKQmVtR1lpVEdHck1vS2lUaXNheFJ3a0VyMmxaTlE0QXdrdFF6bXI0c1NhTWk2KzJZUXN1T21tY1EvdnlOQXlaOUxLQ1NjYXBUUkcwRzRiZGlobXF6N09vdm9xc0FGRFFJSTgzL0JwVHhsWWprRmNZZHhSWTBtdVI2NFMzQTZDandrRC8xeUU0Y21nZG5vNDV2dnR3Q2ROeC9OeG1jZmNWYmkvNTVCTVRzS3VLejExT1UrZ0RQL25yZWx2b0tMT0IzZGZxOWNSdFhSdXlVbmZpcEhNbVJQbi9KOVIvSlQvSDlhS3NuMzhWMmFzVmlaaEExS3VHNzg5N1I4bElhVGtLait4eGhrL0I3eTZ1dGFWS3EzNFA3ZnlidHFQWkhRbkVjUzFldnJkbXlUREp5Qmc1YXZ0dksvdjNHN3NSMUR5Um44VERTTTREUVIwdGpFbW5OWmxtVUFvSkNrbDBXd1h1azVzcnlBZ3Rxb1B2TFZTdkIwUFh0WVA0aHRmbUtSQWpjZU43T1NScXYzR0Uxa3VTdkN2TzJVdmQyWW0rZVBVQm9LY0Mva3psdlVNNHQreFd1NW5kVHIzWUZFb1NkeENjdFhZR1BMQUgvR3dZNFJ4U3QvUDhsb0UwRkJyZG5tOGlaZ1lzOTJLRGptbmd5SjNwd1RtR1pqaEhXVGVOWTNZNlhzaUhxMm4xSFZuN0RVdFRxQ3U0dDdlOXRXSGl2K0V4ZmVDZmtHRDFvZ1NTKzRiL25Lek9uVWtmNkorbkhGUENFT1V1OWxndWZzUjJNQjZvN1orUlZ4bjI3Wjc3cE9uQzVXdkJ1eWZNUFhNQlVSSnBPakg5cjZRR0VqaEhkTWg5OXNuSk1WdzRkc2ZQN3FybVFSRGVOQ1BVS3dNZkFRa1RJdFhveGR2MWt1TGJCVW1QalR6NTByQjFrYVJLRkR6R1Y5TE5sdjNRVzZNUE9GbnlKSkNGQkpVVDhTNE9rQlE4SGVjdkgycjB2YXpSclJKanBjcVZCRnZ5enFkRVRTVFVGZkRuWHorZWVIY3pSTzg0dmdTQVNTa2h4NDN5Tm84bDAyWXZzdkhjNFZjSzZERmE4dmNpVWVTUzcxa1dzR2tVYm5Vd3VnT1c4QzdpVXJOR2tiZldDK0RKdVJLY2QwQkZGVzVMblNzYmU1TERZOW5oclhtMlEwbHQ5WWgzaVpqbkUyVHRYU0p4S3BtQVAvVXZOcXNwSXErUmYwaFduTHBFZXVqczkyWStlVlFrNC90ZlY4WlprYzdESGdONTRYWkZDaXl4OGNUYlZib2p0UU9kRE5kZUVKeUhkM3hZa0laZmhCU0dVczgwYm1nWUV2NW9uL3pDc01WMnp2WUFWLzJlWkk2V2FmUkRoWEJrNWVjdlNBVVB6alhxRGRmMWJrWjRxblpaNUpWVGFIRGZEa0tOM3FWb3R5YnNIdFZIQXo5aUVvSUlCQUVaeEJtZmEzOFpLaWliL1Z3aTNJSjdpckxpWXV0bllNNnQrazBFU09CbWR4ZldPOW1DNHNVT0huK1FmTnlvTXRIeTBaYW02NkFOR3NsU1JoNGsrbzkyWjF1WUxwM0U0UjVRK3ZtbWtjYjhvb08vS1NaaWVTZUZIYXZ6UmVHa3h1K2hwNm5LZ0hCZnc2T0ljVkJvM0ZSUzdYSmlGQVY3dTR1WURWY2VSYzVsb1Z0c0lBRDNIalBJd3p5QVcwMjVBemhWSXlOUlRPamJxQ3VsTWZkOWRSR1I4TDd6NXpLSVdtYVhlZlNjTjNlWEpBZ1JmWnR6MmcwTTVaQVBZVllEYTBPVDEwK09HK0pPZHRsWDNjMFVvNVBGUkNhcytOTTYzUTVubzFFS3JLRlcvN0FyUWRSRW9zUGRrVjQwK21XZkRFZytWUnlxSzVSV3NMalZIWm9OTmJ4dEFOR2RDSzJ3MVR5YXcwMTF4eWhFc2o5SHZRaE8zYTRWNEdiMkZoaHYybkhCd0FiVmRVV1cyNWhNS2kzUXdRdFpUNFVZWG1aYlhWN2tJN0VkRnIvM3V4YnExZ1BvV3J3S095eTBEVUh5djUyeVhHdzRlc0dqQ2RBY2ZuM1kwTVgyTHoxaklzUlJZZ21SRlVHSXdUa2Yrd1lsamRFeDBqSlIwUStVV092Nkp6bGFxdEZyeG9xOEVJZE1lT29neWpCdmphckhOYWtkQnZtUUZwY2xRdjM1ZTI4OE42anV3WitEalNOeWFid2tqcncyVlNRN3lod3ppL3FtSjh0dkMvem4yY0Z2a29WU2huY0pZUkJlczNnNnB2NndUSnNZY25BTGYyNFkvN0FjSHNmMUFrcEM4c3VxRG5hbC9oeEFJR1hXTWNUMnFpZUdmNm4ybnd6MG1hd283OXNUSDRyUjFKaVdBblpWVyt2Q0pxcDIwYy9Fc25Hd2hlSWZJRUJqNjN0U1dQWWNsTE5RSEZpM213RFZMSWlYWVdXSTVJQU1aRHVVNmpTaURtQUwzTTFmeWh3R0QxMzhQZktoOUw5R2xmSlZlV3pzbGxWS0c0MUpUWktCb0d6UnpCV2t6NTVUcnZFcUNURzFVR3pvY1hKV1VteDg2MGlXVE1tZjR2Wjd4VHBrZFdpT25DOWU3Rm9uYkVFTTZDSDV2THZSV1lpdFcwWWRRdG1NM3hvZEpnUlY5QU5vbzN6azEvMHlzUlFTVGtvMHFEWWZuUTNIS1NvekIwQUtXTVQ3SU5wUW1OZytqbUw1Z0R3c1J4cGxvdkRjYzFxcjVJdSt1QWFTdTh3VktHYTlpOTZhZGNsellpN2ZibzJhbzFwd0pDK3V2UXFyNnRUcExNdS9hcEp0VmpDOTljRjAzckl1Umd3VmMvemhjK0hFcHlqZUtMME5wbEVVbkJud0NPbkRZMUVGVWVlNk5YamtIb1FsN0FLT1oyT1ZqVkd5TlpwOHJxVG9Cb3J0b2tobmgyZDF2M1g4OUNyR1J2TXdsUkVDTWxqeTR0Skh6V25jN0pkYWVxaHJqOE9oQUduRVJYLzhGc0Q5YWZXRjdHSDV4M3hMSkZTUHdlU2NVYTVPdFBWY1B2WDdoN1NGZG5QTGpUMnNpRURMa2ZzaXlvZVZsQWJEdFdEcS80VnVES0RZNWVHSmsxQ1NRcDUyRXRSeDcrM3VaZHF5ak9yQ1dzZzVYMXFEb3hTUE9vK2tkYTRxZHVnZlFUcWZtWWErQ3U0TUxpL013LzBPYkZvWTFpN0NwU1IwSWVXcEFvWldUUDAxK1dJQzVNSHN6ZHBnNGRsOU9nbHNkWWsyemlRTTVqc1FSY2c1dk5NOFZGUW9FMFBMMWNSeU9IQ1NlTThzT2g1UEx1d0wxTzkwMFhGNi9LdjFNMDM0RTdIZ0hQZWdpSmdLMHMzTFo2bVE0bU05a0lhTWloK0lWZWs5RUo0L3gzaGoyWnp1U0E1Y2w4M1JwQ3F0SXpnK281T1FnUVpORFNRVFBUeVZDS0UwVnA1ckt2UFhtTENYajBpbFFhWklBcVhXY2c5YldhclExVk9XUDBpRnZqTkZqeUJVQm5penVnTVhWMUIxbmtHOWhhUWg0enhXMlVOU1did2p4cXIvUnVyMlBTd3QvcWlycXlXZTNxbTM2VGJVTjhYZUl0MUUrWFRHc3NmZ2laZm9FT3BydFo3dlZsTG45dVJiTGNuNklWT2dLc1BSSGNicGMvejRGcG9sVUlsNURGaXVsVXFWSkFLNkw2K0sweVBIUzZxbkNrcWRQZ0ZON2VJSDdaUmdWaDljcmZlczBBTUNPOGJsZ0FwbEV6SkVXNXgwbXlMbFQ4c3ZXNW5VYVVsM1NFVU5iZytndmN5ZTNXSEQrcGtReHRJOS9HQVdRYk16a1pWeStCTis1UkNtRld3QjBNRDZEdHNZVHRXVVN1UjNFMmJvSCs3blkyY1RsZlNYTUFZVE5OWjFIVEZIRmNwbkJsSHo4K09CNkl2amhDcERPUlhDUHpoNVZoUEtmQytEa0NVcFVtY2sycWRlVjNrR3lGaVR5dmhNbjFmdVd3cDNEVW4yZXlDZll2MDVTYUhSRXk5MmpNWVc0Ylo5MDZjWlFHVkFCMU1sNGErZGdEMTFXWThUWElaUkhEaHl5OFhSdUJhUDNzY2hSL3hxR3hEbFZWbHlIbmhsdnRJd0h3aUpNZ0MwZVVudy9ZbStFdVpSbUZvNGFiUGdkVEswR1QycXlodmlHT3RxbHF2NlJCRUE1dnJDYkRBbFBHNkxpWHNhUmQwQWlqMmt5VUM5UjI3YkVsZCtweHFVVUd5NlZUSEVzeE85QzU0blhtSHM5Z0xKbkxINWpIdTZ6a0NRVnppcGF5NVpzbHVTbWR6K0xWdnJQemUwOFp6Rmw1UWZEZ0xQVHdtMWFWQTVhWkdVQnJBMzVkaG9UZUtxZlpraU14elBaa1FXQ0piSFdIQ09ZNGF3NmJNdC90UUdSOWxnVUhVVThVbUt2aTlUYkVobEY3WTY0K0J6ZGFkV3M1ZVFJTlNxMFRyNC9GWkt6bzhVb1Qydk5oYUdhV3J2bGpmQ2NjZVR4MXZIVkw4NER6ZE8zc0poRnp5c0ZuY0V0SHo0cmY3RVNaUThyWGZIVUJyWmcxcjcybDJ4VU1QUTJsWkJTU0lWVTg2ZG9DNUpFYVNNeXNrSi9BK3B5VUlHQW9FYks2M0lHTHlpUlFvS3crUzFhZzA2K3Y1V2VJbUNlTzZPdlFvMFpwbHpRMFlUdVhqN29NQUxyaGRxV1NQRXI2bUg1WlVuZWszYWJMWXN2S3BleDMrcTExTHJHSjBSQWltQkRJZEVEdHprWGJnUEY0bktOazlnQXhGcXlqa0hsc0w2YkpNbUpudXpMY29BN3hOQVppUjRra2VpdjkvRkpZNG9HUG1acGtZaW1jSld4cmpIQmxhTXQ0TkxaQU10NEI2N0l2bnJ3bWM3akRqcFhHbzQwWnZ5eHVZTUV4ZHQralBqcFhpbWUydGE4YkNTaTFvUHpsZlloZmFHbjR5TkFwUENVc1NnMkxZaldHblUza0V1cS9TUURobWVDQWxlNHZiT24rY0RVU1lJdFVnSmVNamxrMm1YcmF3WDd1Y1VUYlBzOUlrbU9YZGVUWFNGU21EZ0REMnFoTmdGUFFlNldYUTZaYjJwYTlJdzVpQ0g2V2grMDhNVW0yb3RmSVlidVpGUHVzZkdTMzg4UVhOUTJGL3JCdlM3Sm4zYk1uUlprVWFFc01PL1VFMWRqbHNFMmFnaXJ0dDJaSXZBeHJkakpOMlYza3BML05Bb3NDOG1zdDVxUmtCaHdVN0xXWU9EQzh3aStMNm1uUThpOG50c2RpY21Ya2NVTWI0TUR4SjFQMGtVRGdUVGFWeldsR1NzYk9YenBNbWJ4SVhlZjNyVjI4dHprU28xTUVLY0ZqN25BNXQvWjhvK2tWRFV0L2ZqRTVjNjNhUi9RZWNva0IzVkFWeUdpWndKTGFCVjdhTngrYjZ5bmVtL2NjK05IMG1wejExQThGbUcrRld2VUhQdktFdSt5a0RlcEZtM3ZrSE16OS9UR2dNcVlwNWgzV21wUGF6MzdqV281RFkzbUZUckM3SzU5QnJHYm4yWnBaTi9kLzBnMGR3UmgvMkp5R0Z2K3JjZldEOTVCd0J4NFlnN0hma0dXZHo4bUZVdDZ2K25tWUJoZVRyY3VKZVI4dVh6NTJQVWh2YVlOSi9BekU4cUdWeThoK2lWY0ZTc0hReE9Zb040VzlpT09mdkIxdmR1RWg3MnJoK3o0d3BEN2xleWl6RWVWS3JKMnRYdXA1aktvUnRZMzEzVndpaWZ1WEsyL2hYNnBsTjBKM2tuUm1Ic3AxRmpKZGoraURKTlQ5K0lORHN4ZjJpdjdoN1JJUGYxdWFBMWl5SFo1OGkxSmdSamQwWm1vRUI1L0RkaGtVSjU0dGJCejlDS3E2Uis0QytoNzgrdmlRcDhta1NnVU1zdWlVVnVqU3NpeGR6UkIzVXE2WlVUT1NmTmtaZElUWUFvNlZDWDFTeDg3aGxNdURJWWcvVVpqYWI5RGFGa1pIeVNsMzMwN2RXeTVPSWdMdmI1cm1pWWs4cTF3d0N0SWRGY1dza0VpNE1DT2dCam5mZFhwOXFvTjBvSktQQlVETHJrYjZ1bFVidm9xVXlNWmRnZVRhYUpMbXhiMllFNFZnMTdvYzVuZE54LzBpV0l2MS9RMElVa3UrZGtGRUh0b0c0YkpxWVhKNG95SjR2SnMrOUkwQm42SDlLdEpGSGFHWVdOZFRsdDRMcG1UcWs4RzhtS1BsaERUeE91cmkxcHNrZzZ6SjhDZVdFNmNjMVFWMlRTODBsMHBUWXNEVlU3U0t4MUdPb0dqdE1WYldiZ0RSWmd6Q1VOMkdja3lnZzFIZGUrb3MrNXJrOUN1dVJqU1BVMFYrbkZ0UG5wQ2MyeGRDVis3NEhOZHlpdnJTektDSTVqeDNPQ1E5dnpsSjVQOFBTWTlibk8zWUtPdFlNbGRMTmpUaUxHU0ljWElKckNZL0Z3T3B6VlRWeFFTbjBybllkYUExNkMvOXlYVXYvOEdoZmtMbVZmOVpITWF3WEVYeTNFTWdKUEsxUnhJYThLeUdIdzJwenI1c0ZwUzFDNm9hM3BnQ1F6WVcxbE5lNXJLWWhLSnBSdVk3TVA4OVV3WEFBK25TNWF2ZEFZTkREK2x6RkFIb2lOV0g1aDNrNnpaK29NVWZsenlTYk93UkNOUkRKVzVrNnp5V0pUU0RVK0NHQ3hBa3ZpMjJnZjFSc0NmbEM4cWVoWHV5MEpqZGRhRjRrYktoRzhxdnEvZ09HYXhJUUpYbnJ1QTNSVXNZU05sM09XWktRVzEycHkwbDNMNmdmdjZQbDNHWUp6ZUNMVSt4bkh1RlNIaU9LNThFVmJoMlJXNXhhdzgxVXgyUXM4N2ozQTc5VDdDb09vUDkvNWZUZmgzUTluVzRvNmtMeG13L1ovYnRuTlBPYTZkOG14RUN2YnVhVWIwWWw1SEJUYkw2RWF5akJLd2JkQnlFaGNRL0hWZ0YvQ1NSb2NGZnpKTStHUVJKcnp2T3ZXaHpWak0rYzdIV1lZb2l3ZmZxbHJJS2c2aituL05weWVhbEZSZTFLeWQ5Zk9hbmlqSjhvZDdNRzZYVm9CR1RDbnQvYTVNaU00NmE3M0tqTlN5L1VOT0hRaDltWWlDUFVPZXI2UjVieXZQYncwUXJRUzRSR2wxOXNQd0EvWlR4U0puMGcydW8zY1ZuVkV4VUxPNHJiK0s4a1pOViszaGJkbG1jYVJuajlEcU1xeFovRUN5N0NsOG9OQitSQUpkOU0zM0ZOMGxTMGN3K1piRUIySzRENzJqbDZESlo1UjdTWlNzZU13YUhsbG51cTRQQWZTclEwclRGTTd5SW00VkZWcW9wMjZGZGh6Q0dzMmp4YkNsN1hoOWIzN0ZSY2VmTWY4YVdRVHlNTU1aVzVCOU54NGF3bFZKTGJkVllIUFhmYUdQL2VjMXVjTloyazl1RHlrUzN0cU9TOWdVaEl2MTM5UlVQaEovQ0NHZ2J4V25lYlZwVzZjL2htNlNVS2RkTEszdnBhQThjNUJMU2wrREEyOExHNHNldzVtOHRSVFExczRMNVlWWlRYd2hqK0NXK25yUnMvaENrWnMrN3hISkNWeVBYY3VTTGZwdHBNSUtDNHVGMVJQVzA5eEJxZ0xtQUZ3aDA2bkR4ZVhrcmFwZUhzMVFiRk5IQTd0WXV6L1pxN3pwUWc3N3ZYMjZMaURLYi9SUjN6UEJyd0pVV0ZEb3E5S3BURlZFQWd3WjhFUkgzSjMxd1ZFZ2l2YlRwV3ExZWtHeUtNOS9zTlJGL3l2c1JXR3ZIdkUvalozczM0N0ttRUR4RWVUTVFZUzZMRzhXWkRrdGRPQVRHWEovRTNxUWhXQWlENTJVc215eEtDSVhTOFhPdEVrWWp0S3R0RWhkYWU2cmVuaXNxbi9pMC9LZTNQeG9ZK1YvcWVsL1hrOW9qMmFKdDBnN3JEblloN2kzWVZobE10UHUycjlOUFR2Qmg2VWoyN2ZYa0FjODdmZzNzSzZwWjZpN1RreUl5SWgvY3ZPNVFNSENOZmVWWHI0d1JaS0sxNTk5aXF2K1NZMDNWSkRpdEg5Ui9PWW1JNlMweUtQZlJpSXZTVDVJN2lvTEZOTnZFLzJaaU4zWDZ4MUtiblkxN3BOemV1R2NUb2dLeTRFdGIzNm1KTXNZeHZqY0FFNmlIaHN5Z3BWclVkVnlxWkUzOS93MEdiSWZ3bkxIQ2dzbUZCbE14VGtEUzRkaGEzM0NDbUtNcDB1em1xZGxBdkVqeWdNcGRMYkxsVFZTNTFrVXNoczRpWWozREdtTThnaHc5NXNSdWJFa3ZETXdPQjVFYzB5blJ1Skl0dm05UzVPODBXclVTTmJHSTBVRFZ5SlNORS9GWlJKMnJXcWFDUmJ5OW00a1FjRUNTL3l4UUQxTithaXZFR1BuNTJzK1dhdnFXdHI1TDJYMnFQN0xQS0VJb21TOVYxdW91ZDZGT3lHa01HY0hiZk5WcHJaTDk3RGVvMVJ0R3NrYWFSSzFoenQ3MC8wNXRVM2dFTXltRjVXQXlzdGtmM09HZ0ZGcUtKek1CMHB5eWRQQVZsR0M4dzJoYnJiRTlVSGxjM1dCV2lXMnUwblJzY3l1bzcrVytWR2ZHd28xUmlPUGJ4bzBQMG1oUm9oU29PNlpvbzJRUTZvUnRPRmFLMzJqMnZhV0Z5eEhBallCeFJXa003YndjcEJpbjdiZHk3aTRxUXZTZVJUZUowSjdIOEoyWVBXdEFhVHBFVEE5RlY5blVxbVp1UW51M004bDdIR3ZKV3N3WGdJbWFnZjRTWUdRNXI2SXVXUE0xTkNjTk9DSmJRRFR2OGdUNTNWRTNRSVdHRGZ0VlVhRnNjaTBwa29LSXE5N2JlVXBZeHhHK1RjZjc1azBFUENQbi92My9YeVh1SG1ENlYwOGsyZG1aWDRhbW9UL0dyWGJnd2hBVUh5elUwbEtkbi9HcGZMUFczcHhDb29yenlSUVFKdUxUQ2dSWWRlYmhBY3RaMHUzV0sweUJETE1EMm92aVhWb2xHYlFGZ0FvM3dseUVtaWJjakpxQTl3cmJReWVRa2ptVXk1VFh1T2RxaklSV3hGSDFraS8rZmNxZ0tPaFllZFdVRFNKanFxVDYxTnhmWldsNURqUXlhOGlOMGZWVnl1cldCRmp0cGV5MGw3dHIycnhVQXgxRGlaNjIwUEtDOHRnNjFCVG1Cd0R5YWhFT2h3UDR6Y0tkVGRoVDlGQVNla2dDMEorcUlwMnpLeTZ1bGd3bHpCVzBSMVdTcmZQNFNmc0J2ZGt2Z09YVUd3SEo5MUMwd2dpRldrZW5Fd1pobFcySVB2Z3RjRGY0Y3MrSnBSSjJXQzVGQ2NyRjZVUUYyMVFEbWFhciszaktkMmlVWnZjc0Z4L2c5UDFSRHNVU3E2ZTYwZlphMHFSOGdqTmhZTm1CQTlCNUhLMG9YdU5tM1h5dTNaNE1qc1BucTFKT1pwR2czUVZWSnpYTnBSRzBaYU5BUEZJMUNmdTNNQ0Z4TVdTVGFQSS9FK3JFZ211WHNmU0pzek9HbEdIelBqR3pGU1FEdCtzbHMxNU9PR1hvZG1xcy9VSEo3ZE1CU2dKZFgyZW1MbWJSNG9KTjBHT3IzeG9zdVBvZE56bUt1eFBoV2FxNDc3MUZsSGcrbHRQU0RVL3RETTBTcHBrSEh1UG91NkZNZFFYNW40U0RQVVpaV2VIWHN6bGx6QWNrM0YwY2I1ajhHak83WmZGL3ExL01oNytBcHNvNnlJNXArVkFqUEFURjJESmNkYjV0Kzd5N1NQTk80U0pDUG5DQmcxNFRrUVhVVE5Lcnk3THhNQ1RiZUY5SFY1OThVNDJ0OGRraU1keHJncXl3UmZ5U01zdWpFZ0dOWm9yWjRUQ2V5Y0ZBKzZkNVF4WHpiOHliU3UyY01CekFXRUlPTUsvNC83a2FXeHBoNTk4eGY5MmpjK2FsQnBnbDhTaXFqS0JxZXdxd0VaRS9ucThucmh5QllSaGRJUnFrZTFOOVI1bDc3NGY5S01YZjBaam0xNEZDdkVQTmFqU0NPaDhnL2ZjbHFhZHFKY1dJb3Zya1VKN1hMQjQ2d0IzcVIreXNPK1k0M21lMjJGNDRHd2FoQnZTYWppWlBEWE93ZGl4N3MyN085RlovMzNEcng2S0ZsZUIxcWhPMUVXNThzSXc3NFB1RVd4NTFuZ2ZYeUNHQ1NIU0duNlVhWHduOGdabGNOc2xjQUdHZW5hQUpvSHg1OWtMeG5jNDdaUnVNQTRJTitVeUVjMXlUN1FPY3hxKzZOSXNmblRzLzFXTEswWUpIYVdzUzdheFBVRndYVCs2MCtwMGJDWlVJYUJBV2h5RVRjTWthQkNDMStHK3dvTHRJSXRJZmtSK2M0bmRyeEc5WUJ6SFpIQTFJWitxMmRhdDFGa1dHOFdrMXR2bTRMV09PY21XZWloS1d2MW94N1pRaHFnWTUwN21uY1JrNEo4NGd2RkViTEhoZFFFbVNYNlA1RmZjVU9JeEVDYllWNFh3dVJPVG5zMDdwdFZ4SXI3UkpQcTRrUTB3OG1OekZ4b1BTOGZlKzVabUhaamhIdkVxYk9XN3VTdG0vQmdGVFRSUXgvN3NkWEJUWWdlclpFVzRRejhLdWZLV0tmRnlUR1h1cU5pT0UwN2hJYUhNWXhvelJsR2lvZEpnVS94ZjUraHpVcGV5eE1BRkEraFZKUTU3ak5LdE5VZ1NJemduV0xPaFNLRVBic2F0YTBoUDBQYktKeXRmWU5GMHBocWx4d0owaThnb1lmR3BnNlRzeGRHR0t2WVBJMVhtTXkwYkRjQTVuTkxMeEQxc0VHbENMNDZ0SWZWajh2MkpNWkwyc0F3VklRUXprWEkxTDBsaHdyTlppeVdHNVBGWU5jVnJtN1h4aXhBWnVha1kwMUpQYjhLMmZLWnlrUnNQU05icTNDK0FIdVpJWElENXkycUpySnVkcVdqQWVYekZnRUtrZnA4Yy9uOUJ2VWxJKzBEVWxqM0FiYm5ROHpJdU9SMzRhK2Foam1QTVZTdXhIMEdMeXRjUkNodkErNkJKR05HV29WNFVtTVNqUTdZcWNlbkJKWFZUdTQ2T0ZrYlJaOTIrMEhSY1RjZSthS0VBSkkwSy9ycDFXczNvWCtpRTdKdm1ZTEZIRVRyQ2NTNGM2M3JkUXlUaHV0V3FEWGsvNFBnT05iSW1NWkRvL3ErM0JoK2RZb3czaU5PZFM5NXQ4V05IOWtXVlBtSytyR0xBVVUzZnNUR050OHgwOXM2ZURpNzQ4Mjc1RWN1ZzBKaTJXa2ZtMHdvdy9zNW4zOHd3eitvQ0tmRzBWc1ErOGp2VnNYQ2JiNll5aXhGK0UyaG9BZ005NUNoWk5FSU9mcnBrY2t1aFpTYThZTU1NMTd0aWlGVHJYQVJYMjFSb3g4aUNqSTFUaU5xaHYySEVRelpqY05jWEV3MEcvaHFmS2FsTGJxU0ZCY0NBakhocW1IUTFmclRVZkMwNExFbjNLZlRjdjRobUFuTzBLT0dMaWlqdjhNQWJISlMwK1loU1REM05KWllOc1dhTjBmTVJtZUIyQWU4NlFPc2hITFVDTldzN000eUdzUDl4MlptQmVxeGxoaWMvSk83V2liS2Y4TjhmYTN6dkZqQm9JNEZuUTl5QytLSHhCNTQzNndpNS9EcTlFbkM4M2ZwU0FBMndET0R1RUxZTDR1a1RsNGkvWUcyWXl1eU02aDB1cllTVUtGcDV4djJSRXFCWFp1ZmtIZFhGMytWejY0anZhUHdtekhoczlRZURoSWl4b21idHpQZTI2NUp2SGVWcmFTNFk5cUZVQndDbGtqNU9FbWxhek5yKzhUa1lPczFKUTJYTnZxNzg2MUt6T3Y5R1ByeGQwWEt5R1JvdTJ4K2l3NzJYcTBzUmhhY2RtaEhpbWNoQXhDTjc5Rmo3dHdmNWt4OGxKUkJKeDFZbU5vbHV0ckcrY0EvcVlPT1BwbDJVaFdiWnIzZUh3SW1qbVJHejdQeXFibkZCVUVCcE45UXptWVh3U3Q2WFhZQkx2TGJsVmZ5U3EzdnVuNmJqdkJyVUxONVMvT2N5Wk9NTlp2ZTMvMC9lZ3JLN0pVYVZmcHZHWlRqcEhOMFc0NWpmVzdoVEpCbmt1Mk5YRzhlRGxvSlBHVVdmS2dxWitpV0xQVi9YKytEcnJJSytVTDRUQ3c2c1NJNXV5cDBSY0JXWVdjQUlJREFwTHFkeUdET20wcFR3bWd0bmZnYlpZaUJ3T0lTUmNjTlRGVGVEM0t3bDNXOWRYTCt3UFNaOUdrU0FvWUJNQ1lpTlRGWVdVdFFtZVVIYXEwNzdSbkJCeU56endXTWNic0QwSnZMREt5c2FSR2IzNXRCUXpFQ2FMZG45bkR4U3MwZ3NXc1VTWDhLUUFYbGE5c1ZEb0x0QXp3VllWcDgwb3UrdTFObHc5Vk9Hc2ZvQ09Zb3c1azNHbkVtRVU0Tk11RjJVV09YK05mOTVYcUUxRmlVRTZBZTMreHBVU0FWbjJCRHAxRUdJV09XaS9QTjNhcmNsY1JZUkdZZkYrUzBiQ2c0N2tncWs3enpvM0hPL2ZNNjlEbXZ3WEZhMmlKNTNrcTFwUU5LYmlVdCtpbFV2ZXFPK1JHZ3RGM2xKK0V5S1FZMG1qKzRZRHRDWWo0empGMGwrNHFNZHgxVVVieVR3SE5SaEhSeThnd2xqNXJ1RGRKNkcvc0thMTY1Zk1ZbW1NTXhNR0xJTVRleGsvaC8rV2ZhdHJMV3Zrc1lQWVN4bytPclZMdGQzVFBwcEJHd0hFb1J6ME4rRXpNWmtDZkdmV2NRKzdlWis5ZFJLeFAza0ZkZDlxbGNaRlZHbDVFNFIvVThFZzQxMEFoSlNLVCtZSWpQWFFYN0liV2FMcmdPRVZoNzlOYmd1MWsyNEkrMWNVemFsL1F4SXVMQmd3czU0YVNJN3ltc2pkVTdxcUVjalVMMmM0aDUwWlZreDBOdGtIVURTVVltMkZjcFJZM2pjSEx6bk5QTHFvY0pQbWV3NkQ5blRnWGs4NG9ReXR5SDhFcCtHNVZ1b25hZStnVTB5ZjRzSDI2bk9hN1RhVlZKZlpjcmFsODE5MkpaOWxMVndkRjlHNVlhZUM4WVBubjFCM3V0QWZuK0M5WmY0Mnh5dVF2VFc3RTZiSTBYSGRvQ3JBWlJRTDd2aUdsYXdIMnU4T00vbXVwa3owV3pXQWw2clVrZWhwczAxZGJmVVdybnJWTHRNVTFIWWlGRWJHUDFNejhXMDBwQUxUZlhtSDZzakljRlJzaVJLM3FVRmxONGlpUUlrVktvUk5WcXVEbXpQNzl5N1d0L2llK015WWttWEpsdUg0Z3FOK2ZNR2lLdDI5WjJQVG04K0lRQnBRd2k1bk9JZXV1blE0dDJoaHN0YUwrcUduc1NEMjdGVmtMTTY2YmkvMzgreWFLOTRaMmhUUStaRWhuazFld1A0WTNrYzFJUUJVbXNZSXZvUzJ5UzZUWU42bkFJWmloL3FUb0l1ekF0OGpFVE0xY3QrM2hEWm5KU1ZUanhySnI4dFVranNaUzkzTzlFL0xYMmViTm5oeXdXMVVKdHhTYnhFNUFrQVhMQ0VYVkgzbU5KYnp4K2VmTkxYWi9YNXMxVjdpTWhlQUlVamp2YXlOT21nckt0aHpEU0xYdTlVTUhQRDlOcUNlVUpJYy9FVm5qR05QeTBrOWlxZXc5cDRwVFVhU1dHcTdaK0FtQlZhMnFkM2dwZTNrMU9PRXI5TEw3TlNkNGExemNXMC8wdmdEZ0JhLzFGdU9EK21JMmY1MFdLWWdtZ2F6L3ltNG1KTVVxNDVMMnQ5dCtQS1ZhQ0Y1UXBWeFBlV2J3elB6YS9ibzVGU0xuYkhqU0FMUDl3U1g4OGg1WmNERTRaSG5jRUE5bmRxSTdWemNNM2ExcTA5UHBORmVvQjludUlaUGV1Z25IeVVWT0M3MnBiR3pzYVI0TjRBeUhjZGxUYk5ZRzIrZWxtWUNKcW81YlltYW9wT3RDb2tPYzg3MU5va2RwcWp1ZzZDY2g2dzhEZEVjN3FjV0Z6M3ZCNkxIMDNpbEdnSHI4Z3RpazR4Mk1PZ0Z5L3ozYi85dndEdjNlZGxremR5NE1oWWdGazlZcGZTQ21YSzdFY0szTmZ0bFBYRzg1YWZNT25BUDc3UGZXdVBXRlpqM055VVFuK1UrTVVnWElKb1U3OVVWMkdQYzRiTWNxaTdKWk90QmdQbXJ5SCtJUDJCL3ZERVpvNkJCNk8rYjBtUzQxdHVWOGluYURwRmY4bjh5OVovTFpBSWtWN2tNc3pJN1AzbFhvUG5wVFRmK0NVaUxMNld5d1N1TmN6VUxYdlZIV0NYb2J4SU9wdEtXTkgxZXlCZ0hNd2VCTTlhWnl3RGp5aHp0YWJuZlIreHgvSExuVkd4cnhTSVdQYTFjZ1RpWHFPZDhyOUNkUnJFaGdrKytxZVlnVitkQzVveDdkaXBKVFNKQXlBSWsrUXloMVo1QURuSklubDY0QjREVUtKSFVHL2loODNPTFkvbk8yVTI1YUhXZzBiMCtOTDREb0VKMjRNd0o1Q0JQd2g4bEQvUXVQelA0TG1QdEJwRWVJenFoZWpUdDFBamZLRmpvQ1JkbWhpQzNINCtBbE1RMkhkUVZyVEJqREJGcmQvWFd2czZHL2J3V1B6aWVOeGpOWktwS1ZkZUpKQUVWL25hNHBYNXlEK0dzRHp3RG1QK1VmWlRDb0tkZlJhN0R3V25FNDdSbXdiejdmUFl6aGZYU05vTndRd0RVN0NrRDZiNjh2OHJpYUE3cEdSUWYwTFFsOTlpRWVKUzRENk5Eb1d4QUJQQ3lrdEtNMlozeW1od3NWYURlWWt2d1pMeHNMeXdBQkYvKzJuK3Z0VnFRYXVuNEl1MUtHSGVmR2xnT1BSRlZ1bS80QVFzL2FwT0FnMFZMZFhacDJydzR4SE1teDlNeXZTWEhtMURRWXg4WWcrRnVQOE1lNFloTTR5SzlicGFUTWZwV3MzNjBVdHVscHhIT2dTL3grR3RIWkdnTWJqSXQ5Z0tPWnNkZjk2Y2s2N3VWYjVleWZHamd2SU9VdDgwanNhSFdERnJFQXpsQXdXa2NsYWNkRklLZUxHR1JGdUlKV1lxNGFwYWQvb2RFb1k4TVpRSEdycitLT3o2K01hMUI5b3lWNW0zaDNua3BvVDI0UkM3ZUlVSHBITzBpR2h1bzFPYzhNcUloYkVEOEFJbVNoL3p6NjFPMHU3U1ZXbmxXbXdnaEJ4N2J2eVBRZGl4L2txWDBlTGdvZnorTnJCbVZoVk0yZFpLN2VUQWx1T0xxZWt2cU5UZ0VMUi9wTnJNL3hhb2xMaWZ3MGFQRkRZMDBaZThyaDVYaldmTFhGZGFvNkdEbEoybjVsRmxpb3JrQUo4U0cvM1FubCt6Y0JlOTBDWnFlMUFIMVIxNDIxbEt4YVNHZW8yTUo4WDgrZWlxRWsxNDUwemk5UnlnWlAxSi9rV3NGZGtNRS9FTzBUV2JyODlSZ3BrbVlzRDd0ZWV5NXczSjlTeDZtOVdmdWN3V1Q1M0w0NVJUWnpQS3QrOS9SZ0FLM1dLeHZhV1p5RXU5M1g0ZXF1aUtCYm11dGY3KzQydVRYdGE4dUdMN1FvbVV4WXFRMDVxcTg1YnY1S2xJbS9WNTB4SzI0THlFaEptR2o0M2VTNWdSb1lrQWZFbXp3eDkvMGpUT0ZCT3VvZHJxUnNMT1U3TURPcER6Z29CdHU2QzRVZ2tYM2pHMzIvS3RGdkpka091RlNqZGdhSVNYVXNNUU8zbnZ3ODhwdzUyMTh3dUFqWThOdE44MmxYUTF1Qjh3YWtQZlhnN2VJdDJVSjhmK2JZOUY2a2FxZmVUL2Y5YWprTDZTU1dDWFAvQjFKNUpNQkQzNDJNOFhjTG1SeXloNHU4dGppZVJidC9QSkhVMEZqSngwbzJySnBOKzJGdWJERGFrL01RV2w3MTVWRHNuc0txanNTTStob0VIZHJlR0ExK2hCZ1lrMmsyUFZYRzhwSFVDejQzcHhaR3VjaTMzaU9HMng4NzFwQ252SGI3TGpwbUZRQkN2V1h5Y0xaREJJMTB5S2s2b09iL2pqUXkwT3ptM3RWVDlwNGJFc3VEV3JCN2VQQkhYUjVJa0VtenJrRjR6RlhuTENXOXVDMW85ZmxsczJ6QlJsTDNwMmlzNDU5Nk5YdjdKdWtxN3o3WDBleTdOSjlpRGtXaXNSWFpZUUtDOG15SmtzZFU0N01EVE5MT0I4VE9EMHlvZzR5eFFkMkN1clhsVUE2ajRQREtIZ29wZVgyWHppTXp5aVQxT1Nib2lKWmZQUFA0RlhxOTg1TXFyZElOajVQZzY4TmlWRENVcmpzRitBQ29yNk5rNTRGYzcxcDEvL0FOT3F5R1Y2cVlGS0I4Nk1BbE9ITk9zUnRMZGt2dll5aE5XZGQrcGY2ejVReWVESDZXR2Y2d3Jka2dNaWlLRG54cjFFRDM3ajdqL0RuNlZIaUxVTythY3psSUp1MWpYaU05QnY2Q0IzenZQUFdqbGtVZDlBNnplUXBlNVlHMUh5R252WnE4Sy9UWGcwN1RNOUhxbEU0TjR6emRxdHdhZHl3dlJMeGlua2ZseEJkZFBvQjlDazhwdENKN3pzUjhhZEliR3JJWjZpM1ZOUklIaG81cm1maGdXVVMrVzg5S2pPNEROWHZNM2FxTU1nU3JxOHBKUDByUEgvSk85SDQyMEtCZ3lBMGNkSWJkTU5yWWt2bTZiVnJJUzY4d1AxTGN6NWx2U3A5djhHUVc3eExOQnh4eVovRzZBRVVrdVc3VDFuZG1kMXB0V2RQejZteTdIVlZIR0YvMlZOcVpTbWRUcXpyTkRxMkVIYnUwZ2VEdytJM0xzdkFHeWJxUzBkY0pzZENnMit4TXk1UGtreGJCL01Zd3Vldk9sUFRNOFQ0RGpQWm5DZmk0SEdCbTNiSDJjWUhRZHR2RzBmNWpXMERmREcrWkVJZDdVRC9vTCs1eUowKytib3hES2JMN1RNbm9la0crV0FkS0lWWUxrQjNaK3JUeUJmYnBscjJycnBxTW1kM0RvdkpMeGJMSnEvL1BCZERMeDZaOFVDSG44S1RLWTY2dkRvenlvd3JzZldEZWh3SE1qOTFmSmdJSGJYMFhKNHgwa2QvV0pjd2djQXdCZ29GMjRYbzJBc01NL0U3VEhQVTh3TU1BaWNwQVJvamd3WGxiU2M2UzAxVlVCUjU4L2NQQmVSUXFoUGhqczFkMi9MU0RqT1ltTm9PVEMybWJONk9YTWNxVmRXdUFiTWs5enVveVl1QmNkM3pmZFcwbzNtYWNUTnJoT0JSR3ErRjJPenB0L1lMWERCaUl1OTVzVHhOK3p3UVl4YmtIVk1kdDhuekh2OTViMW4vSHdRTEVMd2psWU5NSkF0WkQ0Q0JKYmpsMFpvTk5nZW5LUmZ3Y1dxM3hvRUxUMGVSYUpJWTYzdW9CZFE5SW8zUER0ODl3ekdvNVUvYjlOQy9ya1BpSFdaMysxRXVmb2tybWRSU2xXTHpJaVEwV2cwbktGcTZEb1VaSEI1dG9NLytPcldvODFqMzdnczk3V0l4WGdzQkV4cXVFZ0ZkMk5MWEJIZ1h0eDExT1ZWejVGRGFpVExnMkxtVDcvS2ZWVHdVNVV5S0lKc09vaHl4U0ZnSXVXMkxVR0xudElJQmdoWmo1WWRjckluS201SFVsbDBUbFpKbTVNZjBrd0hUR3Fyenpub1FMeVV6bnpGTk1GREdHQnpNbmxaWVdmb1FsRjhRcmMrWXFYSlhQMjJaNEgxYWExL2ErVlpMSUVZWEdDaVlYTit4eUFmWHFJZzZBREx1aUE2Z2FncFVMOWdQdEtLVnBqb2E1cmIvY3RvTUVUb3BIME5maHU5L29zbHZPUkkybCtmWFBNSUVwenFDajhieUhFN0VKYTBaYlNwekdSSVEraXJidzUyMTgwbnRZWnFpOS9ZcVBMMisyU0VrcFhqRitnaHZNVXlCOVV4d1p2dzRWcDJWTWhiUFA5eWRESFZ5Q0VsWjdTNTJPSDlxN0lWYVBYZkprUk1aQmxjT3N5NlNVUDg5TVBNTlRJVlFZN0ROM01KYmN4OUV1TER2TEZqZTdheHZsL1lMc3g3dWRlcXNYTk1HWFcveTNXc1doTzR0TWNCL2Y4dThRT3VUcXIrVEZxY2FoYXU2NnUzR1JDak5na3EyNUVQQ3ByZWxjaWFtQUV1Ulg5MFNuc0dUUCtGN0MyUG5YWHZrcTdxTG1ycmZpay94MERKL3hxenVZUktxbWpTZm5TRk9GSDJrU1BNQ3ZZOERyeXlYTW1pcnMxMy91V0I1WHhxYXh6dHV3eURjMy9aTitKRzRYNFR2b2tla1lZaVY5NGs5K3NYWUtHWFBjZ05jVEp1Y3R2WE9Eam45dUdNOVZKa0hNSUxLeEFqbzAxZ1RUbXNEWmxlWmpMb1h2SjIxTHEzbGx3ZWJUbWxaWjh5YUNxNG1RY3RUaVFwazRJcmxaSXBvQ3FmdWF2TkZ0dWN0TWNZcGlybUpicHlrOWZOdWdkK2RHT2lNVnRQVHpLM0FCKzQ5RUNDcDg0M2ZkNkxIei8wOUp4cVlJZHlmVVlXMENPZGF5M2ZaKzVxMVpabzIxQXp2N1AvTDdyTHljZGpvMW0wd3plbkpNN21sYUp0NUJldFRVb3Jya3E4U242aFhwa1c0YVEvWjkycWMxTG5MRE02RHB2eVk5aVJudWNMcDhZZUJmWTNDMzFmb2lIbGRkRzVDL093c3dKMU9HcWxxbWFpWFUxclVNdU5NcTliVS91dFIxSXVyTlVQWExUdHQzWXU0VXFxb1NOQXZGY3MxQUdjYlMraUtpOHo1UTYyVk9QdUs2L1VPVWlvK2tlbEowcFUwbVczSm4rWWZWaEJTQ0x2S2RtMjZqZC80eGk3SWdMTXM2b0NaRmJWWGxwTzBvdDYxK3lrWEhZeHpsVnlxYWFlRnlDVzlNdXZJY2oyOFFjRm1GbG9yb0drWHBSQTVab1oxM01PbUdKNktIT3NNUWduT1BkZGc2c29JNnlJekZ0eXlQS3NON2drOGlKQmVWZ0hkcXd2ZWVzWlh0a05FSkN3Rk5vcThSQy9kRFJpM0hqaEdubEJtSjdKMkw5bmYxTEp2eHBSWXRJdHZSREFQd2ovV0R5eGdKT2o4aWxweTVYZ0NpRHhqWUFjYlEyYkphckdTVldjUDFhbmE5c3F1dWZtYzhaTGZMZ08rbWorKytYclJKaytscU5xS1FmYThuMzQvVEpEZFd3ck1iMExFN084c1BYZTB1WDYvMkc5VjMrY1VBTi9aK0hnUjJjckVxVnh6Z3Y0dWY5ZTF5T3dLTW12azdKUzBCUmNjdHpmQVp3Z2Ivek9JbHl4akZHME5DK29lMG9YWnN3dWkyRVoxVXdnQ3VHK1dYVFdHZUNYdVJIdVVoRERYRE1Falp2RWJRdHREU0NwS1k1TzQ5NDYvYXRlc0xGS1pIenh2ODZ2dHdIaURnZTBHZ1pLRHNORmtrd2pITnRBQlBGRzN6bm55UlduMnlrUjkvNGs2NWxORWR4SFYxT1NRQXkrV2FyL0NsZXQ0Y0FEc0FGTHMvOEJxTWtpRmM1ZGhJcThFUzd2aVA4bEZGVFNVcHhHMzhTZXV1dEFmVk54R3FDTEVHRzNjOHdub1JCdFRybGUzV3hiUW1LSnljMitGY3l6SzFjbC9PanhCcndqU0o2YS80RUF2cHZCYnVsQ0xTalVETUJNaU1haEZXWmw0OVl4b25OSThrcWpxTWJiN1VtSEcwRDJsQjd5TGVlWmZZUVpSMFNXSXlUeldkazdRNEloaU1lN1VLazd6QWN6cTcyOEx6OGhyc2VhS25sVmxvanlxK3R2cHQ5UmwwMzcyU1hUYko0RWpCWXRWOUJDa2NGRVRqeHNORE5zQzNGcHFra1RQVEttNmtKay9zOFBJOG9wQmRZRlcwNUpFOE9MNEthaEFtR25hMGQyNkNwdENCeFFBdm8vVE9HUE4zbEdGMjZGOXBHVzlidEtsZTZ1S0hJRVFLNG5LYk94ZWRkcUk2RVRBbmJEUTl0K1RPZ1RJQ0Q0UGZDMUpwRnppSVBQM0Nta3BnK2xUWTlURkdXbld0Zm1UcnVYTDFBamdVN3dvQ09pMHVKRjc2blNmQjVEb0lLMnNJVkF5cG14d3dsSkswWTZQdkRkYUlaU29LdWZWOTgydGk0NnEzZkFnMkZZZXRtN2NWRW9ROXJtMmpHUE03cGVJRUlNaVZKeXlWUFpmK1RWbjRDa3lBNUVDZE1RRG5vay9OSGY0dGZCMzZnd0ZOMGYxRXAyYmNNYWplbUN6SzlvN254dWdTZGJEMWtKVFhodWYzNUJHZW1pWFg0WjlxblJscHA0K3JOUzFJQ1lzZlpaRWpXODg4aWF6aWVjSGFpcEw4T0taazJVbWI0djgwU1hyQkZWNjY2REgya2NEb1l4ZWZKZE1oVXp1MTdXWUZmZ2swRllaWi9jSkxCOS93bTRjazhSVExhS09ReUNsMWpsOXNmOUpPUzNTQ1l5VytOYUZSZXFVMzJQaFNvRXpRZmpPcmYyTURJb2RLcDhwM1dFeW1UQVB1Mnd6YU05Rk5zcjROYUJmU3pBcDY3RWNjSU4vdnh2RnhoakVGUkJkbUNkaldKM2xQNjluOUlJRVhoVStHNjR1bFlZUlEyL0lDUFAzb1RQdERsRy91SFRKZUxmcU5XTzRFVWpGQmhna3p1SVFnM2JKanROakZ6SGF6bUQ2Sk42Q2ZLWitubjRIMStRRVhIeDllQ2F6anM4ZWFndEtPRnpYejBEbGZid3p5NWJMNjNMTjRQZjRCUE45ZjRVWXJ2cUJPWXMzbVNrVklPejlFbk9uSnFnT1cvQUdwS2ZWejY1WHphL210TUFHTUt6b01PbXZPcktCemNxelJSS3VOcGFnbE1IQ216bTdZbFo3RWlOWXlFT1RMYTkrUi9GWldDeUhYQ1o1U012V0JJcHhkTHErS0x5dEV4elo5OE16NTBpSjVQZHRVaUZIUFIrQmZjYTlEN2czZ1lXQW9ZaE11VnRQK0grTFZqT0hzL3dWVkhTbjR0SVNyeW9hU0J6MnBDcUN6MU11S0R3R1dSTFVnUEtldUtOeXV4Z09zMTY0TGpZYUxnRWlCY3lPL0wzV1ZQeElGSlNXeFlyMnBRTDVOeFlTVi9TZytvVTFrUU5lMzBNMlFLZE8wMldvTlYvT1F4ZDRwVlMwTWdLZTkreXNROTVueDdobkVGV2x2b3dYcFZTTzRsL1ZjTXhHSjI4MDU5aUtKdW96YXJEYU1EUFhnTnZoMzh0cjhoY2c2dEVia0FHUDdDK0crbnI5YlJKNS85ajRrRjJJYjFJdGhQWEZra21vT21zb2w5SGFON3I1WTV3eUJxZXlseUpIcVVZK1UwL0JSa3pMMmdpNUxka3pjTW1waGJoVmZ2YjdlTmNnS3ZqcW5KbjBId3UreFFiVHNIUWxPNFpOclhKZUtHRTM0MTdNdGptb25QR1BlL3JNTVh6RW9HRE0rSVJGODArY2Robm8yY0dMdXdLUUJSTk95VXU3MW1sbU5Jd3M2ZHdUTDZ2eDlvd2pKZmFGcEVhL3p5aSsxNFNhU2JVUXRnOUdIYXJRN0NabU91VjFwNklraU8yYUM5VVUzMVpMdkRxSE5DVjI3UkgyYVNURVlSZ3pUclE2WkVla0plaDk2NkVXR01IUWczcTlEbjQvT2JjUDJ0Q28yU01HTmJqcy9MdGhSNEpJTXhzTjJkNmxaRVpkUTlIdFJkcU9EWFp5SE03a3RXd0hUZHNVR2w2dGpNK1RNVmJMVlVoYnUrbFhsZTVHUTQvakN2WWxRN0hYNGx2bGZ1RVEwMDdIVjhkZ09KWU9CLzhjUkoxc2YxbSt3RFdqZTdFZXVCWlh5aDQvcE1KaVQxVWNQMHQySXBob1dpVjc5SnNCaWFkejNna2ZkVDFLR1BwNktRUTZJU2NzelRMTlJHdk9KWFQ5S1lIOStPNVUyODZSWVF5Y2FhTFZhRXhjbzJEWTRRTkJKbWJDa1c1djk0UFRSc3ZpVW9yd1Y3eTFtQjd3WG5qVGNTSVNSV3VETUQ4WU81dlNzUzJNK1BkRnVOY3FlZ0FpMDg1SkVoazFOSjIyQlRJVG41M3N5bUt6cFE3T2F0bVA4TTNDNDViblFMcVBMb0pvRnprTU8vNjBNRnR4c2t3WlN6dzlMRkFQbHJmT0RPeGJJR2N6aE1CRzVLd2tONTM0dDlranlTa3J6d0FLN2t5Tm16Z2VhMHh4ZlFQenVzNUswVGRoc291cTVCeUxJZHJKK2dnUDRub3Q2dGV3L0tDNmFlRmJuM1JtQ1h1dXpHRlY2QWVuOFBLZkp2Yzd5S2wrVU9UWGVpajZmM0VsMVpGNVd5M2dpSkt2UXhoaGVoUWlUREZNWjNtYnExb1Uzd1EvVUMwV1dzcXMvOTdkZ3VBZ0lDQWdJQ0E0VDc2UGdDbEpONFJBNHBxN1d3Y0pxcTR1OXF1eG9jd1dxazdsSVk4VG10UGM2MlEwZjFIcDE0Uit0QVc4QXdGRjdjZTM5ZWxsaVNSV2wydlVtaEZmRnEzMFZkV3B1czVaTXBUY25wTmNya0pwODNrNEY4alV2akdaZXlRQjJ6Z3pPWDZ0WEtWdEFIKzdqbTB6Ulg0UVN5ZGRLNHFjWUg5M3pyK0hpejgvTHQyVHZDUW55N2VhRlJmUnh1QnYzZVBFaUo3S0cyYnJDaDNiMUdObVFtcXJIdXB6cmh4Kzltdk04dXZQS0JyR2luaVIyQUJXKzU1bVYyQ0xYdkwrZU9uTXJRL2wwN2F5MkVLY3AzSldSbUJJWnZWbGVxWm5yVzZCRUJoazZwbHl4SFUzQ2Y3VXQ0NVREMTl1Sk9NVjc4N0Q1bkV5TjZ5OGNxRGN0dHVObnNGbEFhUitBK2ZSSytoTUpUL1dEclBtTHdzNlpud0JLNmdBenBnME9xMVZJVGNlVkJick45dnRUWDIvWWlmOE9zbSszN1JINjdWZitIcUVkOXYySS83L3R1UCtIYjVmYjBuMzJkZk1mT2c1L2g3c1g4UHRaTiszcksvaDlsamZaOWp4KzMwbzkrMzdNcjluMmhHL1oyNC90NkdmMmRaZjdDdmgvWjY5bjdmclFkK3JxSC9OK3RTL1o5ZzMrcjBVZStyNnVqOW4xM1cvVjEvWDFiMVgwK212OUo4NTFWQ2RXYmVjc1Y2RThyaUE3ZGVBbzZlcXFNTnozVDRIRjJ6SktuRXk5RmxJN1RCTkt1SXZlYVV1T2E5TDVaLzZNVEc5QS9sVlFXeHI2VXZWYkljekhISXNMei9SREZBbnVva3BpUjE0aENDK0t4M2hEWTRRdXM0bVVuNVRzU2xSRVdGNVo5aTFTejcwdThnbC9XYXBaU0gzc3dRajFsS1JUTjRkRCtXUEZWd1I4c0xucGw3bTBQaUgzNUViVTh6cytDVzd6TnI0ZUd3U25mNUtpVTdqUmt4anZkUmFyc3h3bU9pQzc1N01nMzVNTXM5aUhQNmZRUkptNFV3Q01YWEtIUGI2VHJIcUVBM2w3RG1LUHZLUmRROHM1N210VVorZ09YT28vUncvRFNkS0tsdFFJK3BxS0poNC9BdktzWHJveXVuRHAyd0RmRDB0M0tySGVza05wZEg0ak93UnRMYnBTbU1ESTIwZDB2MXRxc3EvbEdNRTRaRE5xcUcxY1pIVTU4dHBNOTZ0bkxOMWtTeFJxQmVJYm85WGlWa1c1N2R0Y2haRHplZzgyYi9XbGZZajI2S1lmdVg0dXFBckVDb1Q4Y1kvZ1kzQzNuT1E2YVUwTVpiZkVhb2V6c2NRWjlSajlVZ0REVHluOEJiOHdOL1hqcG9iaDVoOFBLRmdEQmFSZlJRZXBHMkFsYzJjNTNtaGJHNE9USDV3SkEwVDZZeEl2V3JONXlxaTliZXduTDRWdjRKYmpSRGFNck5FMzZIN3J0N0VUOFkvU1IvdEJRam1Td0lEcHRiaXV5V0I5ZHVTVTFiREVDOHRycUJ1ZWVQTDEzZ29kbEdHdmlYNmZQWlZXRzlaZjhpNVdKTFdBWHIwZHBwNkJMVDBBQ29JdDhPWUVJMGROWTg3YUEveklDaWFTVVlTMmozM3pDRmhtaTh5TkI2eXgrZU5TVHMvMW9HVU1WaHNsRUlCSytQV0U1dmxjd1d4bzJNMERWMDZ0NEdVcEhTaFF6UHhHanVpZGkxYW5nQUpUSVJnVVpsODlacUxzd2JxRjE1SjhtM2dVZW5OR00xNGNxMGd5eFQzV29PU3dYMDFQOVdXZys3cnhwNStCN1dKcG9mdWFKaXpoNUNmUGhzU1I3UTlzRHlJSDliZmxqemp4L3pTa0g5a2YzOGtvcTBsTmNGdkdpZzBFckFNNkY2VzYyZzg0RklScTJhVndtaFFzNlc0cEYyL21DeDBTZ2EzUzVLc2VXa1FTNjNxTFhYWkhyak9CRXBpWVFBeGtuYWV6a2hSeW5FMU0zcEtDUzVDWk5YblQzVnlZMWxZN3Z4aHpEcXRCSTFBVVNhVnNUa25kNU84VndyNmtzMERsdmJwNDE2YXlUVzlzU09TbXBSOE0xREo3QjJuZ2hlZWJWb2RodlN2QVdvM1Ruc1VwejNueEQvUTNwU1BXU0xMd1Z3MUt6czNVM0hJMkhsbENyajUvMWc5R0pJV1lkUWZCaUdlZ1pCVEZFc3FISy9NSjBGbzduOVJna0tXcmZXcW81VXA2UzdCTFVHc0E1WS9SZEdVRGJWT2tZRW5GZGJuL1ZTSnpJa3g1WHpKZkUxdTVyWmFWc3FiZ2FJYzNaVEg2OGVHdnpidmc2ZDdhbGdreWJiQVdzQ0ttTDc1UU4wS3NBK29ZTy9wMEpFbThxVFBVNWdZQ0xSZmhrcGlHaEtUUW1TdGExQm4vS29sNmpYb25wcUsvTmZzcXdlRFJEVmdFM2FlOFA0YkZ1TkJTWU9UUHBOdkxhUnpQMjNob2RPVEowZkhubDV3bVd6RXdzYk53SGc5UGcxZXdXM0FydDJEb3dZKzB2cThjSzlWR0NHcjZ2ajJlTXp1RHNWRTlyTmR1dEMrQUxrSzhLNks4cFN0MXVjazVUc3NjZFRzTW9YMEdtSjZIc2xHUUozV1NLZlJwNVFRV1MzT3BYNXNhSzZaR2pmRVkvczd2bENHSWgxK2Uzd01XRXluNUticGlVYXBOMi9hR1U2WEJOVmVoeFBUcytqRUhaL01QOFZqZTlFdldSNXhPNlBxR2ZmZU0rMVE4cE9KclNBTkNpbWw2VVFacHRRZFQ3ZFN0a1JUY0pZU2FwMWZkNFg5OGdZd0V1ekZ4WUlVcjhoSkJtTjR4d0xkeDJJaFJjbU9uTDg4RDQ3cUFkRzlsSTRIN1J0Skx4eElDSUgrVnk2blRyYTExL1dxSHJMWXVQRVdLZ0JiWjMyZkpzYVhQVDRreTF6d3ordkNCTy8ySUp4SkZ6YTB6ZnRtRzNQcnQ1Vm5IRXNINXVRWjJmWERNV09GdjkvVk5ZR25sYVpDM04wQXEyZi8zNDJFdzhSUEp6UHMzZVRoRGpneUVvMURpd0JXdENBMEFQRDZiRjlhS2xZZkZmcVNvUURQVkNqYjRWeno3ZHdyWVNObjBYbVBvSjZ1em80SHNwY0RFSVlwN245OU45RVpnVmtjR0docXNQOGJsTEdaR25pL1MzSVlUVUNrK1NQZmd4eS9IQ1lPalovR1RJZExLclJUVmNXZUxMc2FEdlB6dDZiU0tzQmZzaEZlSXlKalVVRzRObVAySDNUSFRHejk2aHBxaVlrZDIxdWFLZGZ5SGt3cFRRTGxxYUZFVFhRc1RaYnZYeHZSL1dqelk5b0t1S1NyQUd2YllCNEtPaHhqM1YzSkh0TjRJencxWDFnOEsrbms1bXpiUTRrOG83bDZtbkE1R0pheEFYcnVndTQ1VFF4T2lzRkU0bWFUUloyb09oR3Z3bjg2SGt3NENIditxZCtWc0NnRE43MEJ6d1Q2TXhSazZOaGtoS0xvYzNESVE2QUxURmFVRXNzL3pZamVZL2VnYmhzd01GSFB2V1ZsaFNpZVBtb2kySm8xWXJzL3lsYjNMNEdyVnliTWlMTmptZVZjemFUamVMR2kyNFV6cSs1SFV0SFBZM2RvYmFWbGpxT204elAyaitkQ3h2NFdNanV1TnZzbjNvY0lUV3VKUnNJTXdtYUUvY2dva2cxMTlMS3c5cVpBZDlod29IeUk4N3FhanIxRGI2ZnhFTWYwVWtwK2VDUkllWWswcjBHVTdQcW1rcldNSVk5N1VCRDlBSG0wbWNuZEFJejQvY3V6NFBCK3lmTXlEaWtiaS9mZ3NuYjAzTy9oclorMmRySHkrK2FyV1hUT1dWcDRvanY1ZkFGREh2Q2JaVFVETFZMLzBVZUVPcTZ3UUlhZVdNdnVrVXlXM0YyK3dHd1lPa2Y5NkFjRnNOOUovZG9TMnc1Y1NHODQ4S0JBMDcwbDJMcDJpSVZZeFkzN1ZHcHdhU2x3NnpmUlFKRnpYcGhoWkJ3OE9PZnJXQnRDajQ1VXdSSjNTTUoySWEvTldiQzU5TXFyM0pTam5jdytsUS9sN3g4a1R5Skx4dkQxU1k2RU9HMjFsVXNVUWlraVR4V3AxamRsS0l6SS9ZZElFUlQvcTlJamxuUU1uUXNpZFNtS0QzYWRDaFdUM21UeWFhQ1dyZjJmUmRvSkZuY3JnZHU5UnhMbkphTWVNcDJZVkVzWGZkbTlQQkRzaDdKT1RSOVdsOEFKemNQeSs0RnlZczI2VjdSWnkwRFYzNHFlTUhab1J4dktuT1VlMkNLUEs1enFFd0lzZVltS1FVVjJaRkVrT3dPN1hFT1FyVDZXaU5VMVU5U1JYM3M0a0drUGExaTRVSEpMT3BqYU1xZGVKYnhIZm9aY3gwSzlTL0NMUDZiV1hOYlQ3VEZ5MC96UzV0S0xpRlk0YTFOVHhNQXc0dnFRM0lWWVQzRkJGaU16Qi9UcVVKNElpVWFOQmtCb3JDd1ZQRWt6Zktyd0pvc2lwYnpweXo3RVJ3dXRtYXJWTGpoSkM3Z3AySW9uTGdSdHNqbFFZZUNLV3dqazBhNlBJRGUzVTZxQTZNV1RRZ2kxV3RscEIyaWJ5UmExRlYySE44TkhPTW9LMk5SQ0N4cGdpQncyUk5mNTF6YWhnaFk5UDlQT3d3SksyVGFwSU9FS1gySWVNck1DRFIwZW94M2o1S0thekVyMTFRNFBMMUpMYkNNektMOVIzKzZiMU56L3hqekREdTBTVENiUVpBTDE5NjZvb29Pd2lXeVR3bUtjNmpoRGYzVjJJN3ZVRnFvbTl4ZExQcmpNWGRrVW1zdDY4WDRuNVFIbmxmS1dwRFFlVlF6eFJvVFFxUWpIdTd1WG1xYkNmRXRzc0FvSVBjTXdzMmxMckk4ZUF1dUUyTWh4ZU1mUXlTazQ2dFJPTnUwM2Z1VTJjVTJTbTZ2NDBPUnhtanZGbG5WaDV0blBwV01vcDd4UWNWWGNWZjJ2Ynd4ZWovWTlZbytmbHNtZm5BWm1CTjk4UTQ3cDdpTmJnc3dhQ2FhQzBYYXdRSE5DZVpQUVFjTWZHdlkxRlJVaXh6TmliTExQU2Y1ZmZsWllNaGZrWW53UGIxbTVEenBEeVVtclF3bEpvZzR1aTBjdk45dU1JdzNNQVVSei9DVWUwc3QvMjZ3TlhRaVJaNEloSUVGd3I0ZkZKamFqa0RvQXJLd3c5NG1RN3FnL3lpbHFQQWVTeERnd3hhYnZOK2pqYUU4S0VJSFlTMGQ1dkI3VEg5OFpIK1N1L05mV3BGYjFtTENIZHdPdlhBQ29FV2poK0hodTVPd1E4Vi8zRDF5cnZLc2lqMG5QTnZvSGlRYTFNK1c4NzdBTTRBRnAyL2lMVXpHWjlVMmk2MUJWYXhCK2dhekhIeXpnb0xnall4M0lWTk8rNVhpM2owVGFyS0NvVTVENGE1UDdOWVBKZm9Udm4xQ3ppemZMdGNuOFJneGd6ZHErYS9QWVlQT3lCZjY0RjlNeG9nSFlEdUxJT2xSa2lZTTFSdityN0ZLekxrZGtTeURHbDRRd2ZmMkh3a08zbkh3ejNnOEhVQ3FqcVVqdkg4eTg0MisxNExKZW0xSmhhVVl3M0I1R2Q2d0NnNWZJbTl0VCtzMGZ6WmJYeGM2ajZSUUx6TW13RXJiNUtKb0hWczJodjNMNDREWmxMeVhLQlhXRmZ0M3paZUVKcGdMVmxTMzJ6dnYvcnFJNE1NMEhNMkNFTnV6SmZuSE9nK0xpWFJmQlM3MkYrUVYxREFFTkRaSFpXQmk4RndUY0JXSDN0MkdVaHY1NTVlcHlEZm4rWmxDK2dVbTB1dWQ0dzdmekZ5T3dKOEdKNno0RTdtSGNVNlhYZlJibkJTRjVmSGJUeGxnWnFhQk85Y0ZleDBndmNsNE9lb21ETldGNG5GaWZZbzJJUzBBaHpONmhNWWVmOXRMUzRhRUFNSmFVRFl4ZjRUdlZIc2s4V2ZhRGZwOW81blJ1OTl6WFkyalZ5UytPS1h4cUNEVVVuZDR1cVNCMTZqYXY2elUzTWJ1NUpna1czNFRLMHFhYXk1V1d5QWk1aU83WHVva0F3T1prV3g2WjJqd0xUeXZmVCtibnRiSnVqV3RvZGk4S1VVcTlNdys4MUN6SEIzMldqYks1UG5PK3JOVTNrNWgzSzZEVlJSeDFPWmRNVDhwOWZHSUl1MDU3eHUrT0cvaDY1RlBRa1hSTnBrbGRUaUVXMjhLSEJ6UitEeGlUYjczY0FYcEluQUZwZU1qaVZQam0xRW5yQzlnQm9OdWtzWmlBRWQwdGxTeDZHOHR2ZTNieDFUZFVRQlo5VXlzbVZIak14bkl0UlJkNy84S2hrbnpoWUNpU3pxZ0FtR204MGdUaXl4RVE3OHpmcUdxYTFnWjIrNkF1MFJqM200SWhsVlZ6MlU0TytjaTd4M2Z4NmZ5TjkrK0VtcFdZQTYxOUJ3NitJWC9aaVRYL0xYWDg1NVhwME5lTWVYdGYzdlJYVlMwd0FHUkt2M3pGWnZRa0wrak4rc2IyQ2FiZHlDeGI2TGIzUVZ3ZjZER3UwUkxUNSt4bkhOMzFpVjMyZUFEa1A0V3RtY1dDdWVhWW9Fc3BLS055MkxMN3E1R3ZXcGtFK2JicGxHQUJielp2bVdzNCtqNWxVWFF2SGVTZEFZWHZUeUI3NkhuTnFxZU53cGVGZW04NUxuYUFkalJUK1NINFhiYmRjL0ZnbVpVOTlVQUgrUzJtclREUU42cnI2WEZXN3g4bGdFU1pkWWt3dFd1WUhUQ1JWSGFSNFZpL3dQUUVYbkd5YnVhMng3S3Y5VGs5TG9PZTI3NWlUWHkyT2NpV3dzSXZQTS8zZkpFVVcvT0ZKU2orcG1saUxnQ0FURUJONEtESjVOTjN1UW50YzJuYlRIMXN4RUFkcTh1aW94b01yTDF3ZFdVdWF0L0FwS0JXdmR1dnJ6THV4YzRVZGhXbmhMZGdLSmpnWW5LbWs2T3lKWGVmNGwyaDFyektMSHk2cDJqY1c4dDhWWE8zR2RtU2YwUGdKbWVsa1NDQ1UxbzBtUlpSVm5zWWVZODRCb29wZnhiaEozaTB3Y0pRS0dlTEtVTzVhbjhSVEZRS3dESlVoL1p5aDlCRDQ2Y0M4dnZpQ2FIWmVuelpPTUxDY3pxelhOMW5ITGpUbUtSYzR2aUtYeWp4UGhpWGFyeTNMakk4MWwwUTRSTTQ3TVcrU3pvYVBuZldJKzY1aWsyUUlhNmRLbWFETUlkSVdHaU02TlllbktlYU5NMXNhbzZhYTQyK2JKRmcyeWFEL3owd1puL2JSczVUdWlvUWJBS25LdlVmUXB4cERCRGk5TkhrS3dQQk1WMHVmZkVralhjWXV3KzBFOWJ5dGhGNzFsOURrYnloOW1aOFhLclN3ckRyYlR6Ylltbk1ZeEZrQWxmK2Nva2hGZmhtc3JuSGx5c3VueHJxMlNOU01ad1B1UkVrVjYyWFhvNEF0RnVMVE5BTEphcnJ1SVNDdC9nMEk0ekNvemxtTjBIMEJDMDAySE5WRFh1ZStlMFoyeUJJdTdleUVtc2UyMVZiN3JkODJENkx3WlFGdVBDemE2Z3VSQ0NxRWp1cVVoK09xNjlGUHNmQXRCeDM1S1A4V2FnRzUrd0twbGtQTzB2S0MrdGZuOHlpdVlXVHEycllVUlZOQ1RhbDRtMFJQbkJMUnFncy84Z3kwZXlVUHR0V05NUkQ5Z2lTUmYvUkU5TUthcm14UmREZUdnNWcyTFdBQ29nVnFQZExyV3NUQ3NjVGQ3YnhCU24xeHBPZnVDQnl5QnRjTzhRUWEwTmcwU210QWh1Tk85cHpkRXBKb0pJWmxjWTc3UEtjL203WURONzVrNTl1aXhGbmtDa21wSEpDaUc3NnVwU0ZPaVB6WmpReE9LTWwxTUIxTzN1SEJBb3o1OXFKTkwwSFdNM2U0VWpIalNTVVhIVWZicFdPSTlaVjNBaHNITEk2a3dLRk5aZ2xzSzNnS1VRYWVFcW5XUE5ISUJvK1d6RXdOckZIQ0hHS0lONVBVbm12Y0k3YnFPaExncVlxSjlRUmRwNmlERENmY3QrNmQ2V3I2VVN3Vko0bW5Xb09Kd29rYU9vaHRTN3AzWXJ3YWswM2dDakhOazdPdEJOUTh4amNxYTNkQ2lOc0dhU2dkMlBrSXFrR2cxazd6bHd3czVDU0srVmovbmVCWWIrR2tYN084TkNwWHJ3b0FtRzFQODV5VjRIeHpCS0wyTHFyc3lBRUM1bVA2UTZ2QWh3QXlLQmZxbjhaME9KV2crdUNZMW9WZmV1NlRiSmd0SnBYU1BMRkxrOVhtTEtSL29SQ1YwT0NxZmwwSWtUSlRSS1RrejdVeWNMdndHcVFTcVBPWnM0RlpmV1F0N0Zhbjk3VloxSE9STTIyTGFQbUFoa1hVaUt0QUIzMDlxTk9jTEFUUTZCOTlaS2tlaktWYTd2UXVBTnNPSzZzWGgxTENVbEYwam53NG91NnZiT1NTZ2lrYkk3eGg5TlpFbXNROFROajRoQ255UnpwZnVlT2JVQlVOeHBNamowRVEzd2l5M29DSk1DMzJkdnZwMlpxdklBcklhVUUzRWxhUEtBbDB6U1lIdGdGa3ltQTZPcmJWazRIL21ZeWh1MlcyZldIVWQ4V0Z3SVdHQmdxNGlYaEpHUUJWZ1hFbU9ubkU5cmFDS3gzQkZMdWxtY1k5K0hHQVdISDMrRk9ndzk3VkFGMXZSTUZYZGpMTWl0d1NacnNHdlZvZVhkYS93dFFpNUgzQU1YYm9US2l6ZzNGd25UZ3FOYXBqZC9KRTZ1NFJYZHV6OTk5SFhraG50VUF5VHlXZURyMzBjV1NXSkMranN5Y2ZaSThHblE0aGI1M2w0TTZSMyt3VTcvWXpYaHlLU3lXaGFCOWwzUmJnMXozaXFqamhWRHBDaEg3cFIrMTFlV1k4QzhhZkJhOG9Sd1dubnk5SFFVVlZFalY5VC9ENDFLL1kyS1ZNZmZGWEdhNVdmRnJpTUtUTHduaVAzUlI0a1pKOVN1SVVFZFdIOUdxUnhLTXN6OFFXNkpiWFRTSU5KcVRVN1M2VnFyMUpORlFwSHdLVGZ5eFFEanM2RWVQSExrM29hUWpFZk5iMVFPN05uK3lyS1U2aEpOb0Z0QTgzd2hOaXJicXBWbm9WUjFkY1hETFNxTEVoSEFYVXRXRkNjYUFMRk44UlpLVlozOEpmbmJOOGttODZIYlo5R1AzdWVzNlpNZGhSOTRzZldjcGFFRU41a2VianB0SGZXdVB5dk9meVFXMmFqaG1MOEl6WXoyWEVsYUtlWHBoMEM5SW1kRTdiMUNRNjlmQ3RTZk1jb1RCdElwNFlxWmJEUk9OK05rVnZxWCtxbzFEQ1hhbkt0dm83YmVsWDhSMWpjdzlvcVBSdCtqWmorQVlwUnRGSmRGVm96V3ptZzJkaDJnN2lNYVF4blJKUGROQW1sN0hSWG5yTkZ0UHlGRGNQY0dZOEVzcnFVdVh5MUZxM2pVZWk4MmZBdTMvMEZUeHJEMGlnVk5CcTlYR2kzcC9BeVplUjZUT2ZOTzQrenJGUVROVThuTFlyYjFhcEZvcmk3WUNMcUhSNUpoNCtQVE1aYUl6bHJkczZKK3phSGxwdHhmOXN0dm1TSVVjWEs3VlAzTzhZT3ZrMXl2R2s5ZStjN1NGNURZR2F2Y1VMdmpwVjdCTlFyVmU0WFNUK0ljUzVyalBCSEZSK29MYWpjN2ZaYkoxS3NlazFLQUpRbzJLc1VjaWY5TkVRcEQ1YUtsdUZ0dmg2NW5MQTI4S1pzeWZXZFZjVjZ1dFFCS2luYS83aHFOdWg3L1ppbUN0YzFSYm1CYXk0Y0o2V3lLWE9ycUU2bEpnY3QvOUVCaVhXWStNblMzeWE4cVpmajlxSERXS3dJbmZNbWlDU2lMcFFWSG1sTHNPbGtuMGtuK2MyUitxdDFnVktENWhXZjdlejNHbGlYZ2NZM1lCS1ZyekVBNEFpUTdhbEtaZ3RCOXdFam9vaHJhTW9UYU8xWVhwck5RZTA1THZIZGNUY1pOekk5bG9sZWdKbFNGSzlLSmF1azBVd1JyWW5zUnJmNUVJZ0U1bC9WazcxV0p1UVNMTVF4RWRBckVhMVpQajVCS21IMkRpT2hoZVczTUpGSkFWQkloNjMrRlQ2SjFydkRPcGU2Rzl6M1c5NEt0d3p3OGIwZUcwVm1Hc3hDdEp4aVpZeGZxcStTd000YVQ0OHNrcUloQjhLWHFTWFJJV2N3SnozYVJRMEJZVHIxanBPTm9DWEJEYjF1YmJocFl6WDJYQzYxUUhRa0M1K3pKMUhmSzkvTEo2TlE0Y1pwVUJNWjhkVm52cGNnc0hrOFJGcnF0ODB5dERJblVsWm9odXpPUG5lTklybEx5L0QvTUV1NGxGRFBLWmJkdG5oZWdxRUJveFhOMU5pTjQyaHU5WHJ1OUNpQTVwQ0VGTFAxL3RHbzU2cGY5Sll3OGEwbEVQNDF4KzErc2JSV25IZy9tT2lrVkJDdEYwTktWL3VnMkFvTHZrQ0M5eVdqOTN6bXgybHNiMU9MbzhjSmlYOEFFb0V3NTVlK1ovaXhNY1FhdGg2cW9hY2xGT01BRDNrbFR0cG00R0tCQ2ltTnUxd0RaTHBBdFVCclUvRlh1emI5a3dHNXF2SWswV09NSi9CSWwwc0pNaWw5TzByb1J5cXBFRWl0eU9CcFpmOXk0UTg3MEZzZEgwVnlqQXZrZG45MkZ1TUVuZGhNVlRUeXBWTC8wbHV4S0d0eGxMUTQ4U3lGRXRsaXh5T3AyNUxqU2NYMTlHN3Q3bDI2SkxrMGFsUXN2ZHAzcmVGbnphaHZSaFJFbjlaNDVTQ0drVllMZzR6cVd5cDZjVjAxc2pSRUx6Q3JTeG5OSFh4aGxpL3c5enBReEc5WnVPMW04OTM3ZkZvUHBQcXNraXdCZUZ6ZTNVSUJBNjEzT1dKS0RYWDNIYWVZcDNEbURuazBKSlllVXlPb0NmM2NSZDR5RW5BY0NBeWYxNVNlUTc2dWRHOWdNSFA0WFdQR01NVnZBNjdaM1NTUEE3V1VhVzRoSlI2QmlPbnMwU0hEWTFnVzZqMytBQUc0YTNESEJSZXU2d2o5U0VYWDE1N1J4RVcxUEQ4OHFrUGsya2xmcmRWaHZ4Q2VWU1NjVVlnWEhSMEl3WTY3WjhOaTFxRDRTQXR3d094L0dTSlIvQTY1S3ZTZ0Q3RHR5cnVpenBDcGpYcmE4c2hMa2JXVGo3NjZtU3JZQkVCd3hndG54SHF1VmVNcWVBNmsxcCtrVnBZMUJWNTBXQ3NwaEs1eXM2enVLZzMya2YxK0MrWVNOVXFjZWZ5QTVuZUNTYlVRVDNtYnFHMTVNVkVPbDQ1a2l3UWtuRVU1YVh1aVY1alBrb3c3YkhBdkdKdDhiNDg3QVJ3QU9VRC9GV2NSQnQ1VlhLODRpby9aUEc1S2IvT21DdVZsODVpNU1lOWJ3RnQ5WmxsdHpRZHVhU0NmODhVcXFIUlp3SjIrL0YzcnZzOUVuQ2kweERPMkNUTUVBSXVzWEZscllBN1hhZzBEUUpybU1sUVg2aG5ibXZUVmZNNDZud3VIUHpYZEJPZmFzUVdseDJRcnduSkdoOVp0cWJyaDJTdFl3cHR2dHdLcjk5elVlVkd4SzZUd2phZWZ5Umg0ZjhCbUtVbHVVZ0gyQXJDc2FKazZWVlFJL1pjMEpUWThDLzNpNDNIYlVHaHhiMCtkWCtyN0JNVnZvRHJVbXZ4ZDBTemVhejQ0WWsyNHc0L3pSWnRSYUxUVVBpWkFOc0JHZTNCL2hIY1NHeUNsZ1pXZ0RyMEMvcEJDaGppOXhoTnRCTDJiQUFaWUY2WVQ0Z1NhVHZIcVJQeThXdmhzWXJVNUZ0cGRTWVZwemVMOEdkSGpqL0tKRlR2UlZkKzUwUjNVZmg3VFFBYTBaY2RucjR4ellPSUwxQkdheTE2MnQ0U3pUWVlxcTRTemxGVXk2RzhxQXpVWlozUTJUYlE2L0xvTVY5cGJnUXVqeHp2RmVGYTFYbVI0VWFpTUs1Vm55cDNYNTEzcmJmcHNPUkhaSGJzVkNsZUo2b3dVWXNaMVErdysxd0JVRzRSTGhQZXV4Q0lhL2lxMEZtZXdDek5zREdxM2s3d2UxVWlyb0syb2VrY0lESFpBTDB5Z3kweDlhYjBNVnJ2SkpCYjBWZVpmblh3eVNGTmFUbERaQkY0ZmFhbUEvODZVcktmeTdGMklub0ZpWGE1VXdKNURUSEFGUU1CZkU5YlZMVjd0Rm9YOExOWHVhdW92QTZHVTBveG1VdDkrbGtObTk5NGpJSjZBNXBBN3hWQzl6M0hDN1dKbmtxZHdVQ3VaVXVCNWpScTN6dndiVEliNHIya2t0TXVjTndIb3hGeGZKOWtyZWo1N05icFMvUkdENlpKTEJuWms1cmdOTUdnV0ZnSU9EZ014aWM2WTkvcFNYejVrTHFzZEhBZEpHYVRpQWVGNXg1dDNqeHZyRVZ5YjZQNEh5cGFqaEtsTGtBdCtlOXJ5OUZELzh3RFZ5Q2tIdHcwbklMY004UkFDOUJjT3hHV29sR1Yvczk3SDE3b0xuUjJJY2VpK256UnVLTE9iU2ExM0NlL2oyak0xS1BJVG5Dc2ZqRDN3MTlqekV6WFk2c0tTVjhlKzV3MzdGaFR4L3VUZmVnODhJeVYxbEpScDVCeWJLVnE5TWFhVjg5VGQzMi9IN1Z0dDdKRFd3VDNPZCtGTitneGFLN2hqMmhzWlhwa0tWWmtTbjlIb2lTNnZDV0VOSklrNHN0ZjBreTBURkc3RDBJbDNibGVYZGNMVGxuLzZjSHhkazU4eEpPYUtuZHlTbklXWGsxU3krOENlUFQ2SUN0eEVjZXZ4d2NMMXFsbjVDQWVzdzllOWk0dTZKVk5YdTdTR1gvZW5LN3o1REFiYS9ZTjJ6a1ViTXM0ZldsK0p6VVhXS0dTOGk4QzFDYk45V1BmZW5LUGMxUDQ4WmxWMjRnN1NoWWJHUU9oWWRmZzcvQ1laVklVVVFCK0g3OG92Vll5VkMxQkFYWllWQ1R5Z290NUREUXZxZ21SdkliV2UzcWZrdnRPaU5JSEpRU0t1SSs0TFpmU1lYQ0lzR3dFb1VKWGl5NXF5U3Bua2NTaE5QeUhqZ0IvYmZDQzdaQWI0VmI5ZTdMVEtYd3M5b1F0alFoRGsxNDJtdnNITVFhN1c4M25MdWhUanhBLzAyZ2VzMWZkOGFIV1AyQ2tTeE5rQnA4amJ6Q3ZDMnZFNXNGYUhvZFRZSE1tN2c5UXcrU0hzVVgyWWsyRDFCUnNpK1NHcmQyRzE1SjFPMzc2ZFZvZWdYSEhZUjdZNnlkZHpwVklkSVVBcmlTL3ZHMmJlMzhxUXlNbWdWRDNlTlRPQUJiZ1A3d0VPZFpaVUpieXZ2dXZYU0ZmYm40SThwQXF1MVFIeFhKZUtIUmYxTFJiNTJXa2RYV0M0STk4NEZrK0JzbnY5TnF6amg0S05CS3UvcjBCMFY2SnUvVnFISWdWSzcxZVkvYmxsR2JVMVh3K3NYTE1VTWFlZUJRN205NkRsV2JIY3RjZ3RGZ2ZPV2dCb3M4N0RZUytFV25hNnh3NUFUMHlnUVh5d3lSK3FqTFFZelFIczZtdlRINnpFR0s4OVF5aEVsMFNxU3J0V2hOYlJpTmNxcytEY2x4UFFsd3M1cHpjVjRVM1ZHV042eUhHMnd6bFpJTmR6NG1IR3ArQm9sUUdSemV6NE0rUnhHUysvS2FkSUxUN0syMmR4OUxhTFdmRFdBUjZGbjFiT3BEcm9rZUU2N1htVHRTdnh6VTZRSXdVZXlsMUoyUjVYSk9WNkZDQ3B1cXdTcG4wYnRDNmNrMjYyVHR0WFRxNVh1MC9xaEZNdmh3eU81N0c4ejJGS2dPekhCQmZ6Y2FNR3J6R0FnbDAzMWxLU0xiWjFkQ0xMNzdhVlBFbm1aWi9MNGJCZVZWRFg2djlpVUl0RTkzT1JtbUN3WnB2NDdzR0lmMlI1QjFmbWVQdjB0R1p6RTRuQWUrazJmWFh2elpLdVBZWGZjNXdnbkpySFlLdDFaL2l6U1JKZldtWDhhMVRkMDlDMW55MGh5QWgrWk5NTllVeGIwNFp0UWhYQjI1cnRXTFlVYThwelREcFhSNGFFZWFYZE44RzJHYllndmJUTThuWGNQU1pON3FFdlFGdlc3TlRHb0hnK3BPcTRPRXQ2MWNzOUlvam1rdXIwNTRQZ2lGRElMZktMRDczQjVaOUdWQ1FuTjlOVUpsSnY1cU9iMStiVXkxNGVBekViUmJrR3lLRmNFRDB1Y2RhaEcrck5RWWc2N05rMEEvM0pMbFJoUFByaDdaSnZ3NHE5YXdiRVhHK0t3T0QwWExuQlc3M0dwNFdSYUp6enkvMS9QQVhqdmZ1NmNOT3piUDRNQ2lZaTZ0djZKWkdWalUvM3FnQWJOWFkyUHBTRm9PR0ZQMjZZK0VhRTdiamR3L3U1M29LM1BKTDlKbGx3QnFFR2QxZ3dVWlhCN00zZkpYSTlibDFxdVVZQU9mM1JtWEh4c2doQVNMZGRhQncvckNhaUMxNXV5UFBFRlZEZVNuWVdOK1lkbzkvYkFuYitZeUcweDVqd2RXWHFJbkNrSldsZFBBZld3bS9zQzRRaytSY2tLUDc4RVRmTlgybEZpaGxta1ZsMzlKWmM5YUpkSGNvT2FhY2VDci91TGJNU2NYdjl4czJRek5YS2lzcEs2ZGpIVDVVakhGWjZqQW1QVXdWNWRncXZLSjZmTVpUNmhQT3dBa1NleVZvSUI0SVBLWlphc2hocFk0VXJBamY5U1p6ZWgwcEFXc1JPcXcxNmtLRWJpWVQ5bzV3ek9HNnpwTmI5dGoxUzJ2R2FNNTBoMC94TEM5TUlOb0xIczZFbWF5aDk3bmRrc1dTdkVaWTJReXUwRnorZW9nY0Fpbmpaa3NqbCs1elVCSHBQRFdVSmJhSnY0dzl4R3ROT3U1bWdRZUExcG9Ha2xYTWNpVkFaL1Uyd1dEd09taWRjUkV0dVU1SkJzVUFOMTBQaER1Y0VlcHl1Yjc5aTY3VllXU1ZKUTMrTTNGbi9DN3dScTIyZzFYRFlXR0grdW5zT29zVjV4N05xSnkyeEZLRWtRSStNQUMwRzlZRmN1N2JZellIRjc2NHV2WUt6VUl3T3Y5alI4K1A2ZWx6TE5OUlFQWkZ6SWlxRm5JNnRibFY2VDZJdHNEak9OSWd5VkNqNXFkZlh1Z2s4UzhVeDBKTDZjc2x5TzdTL1pvVnhYZXFDRko4eGJpS3h6dE4wNnBjSEpBNEFWN01mcVdJcmc4dlRuT3V0Y1NwMWJqYUYxakcrNUNRMW1YMVJWWTBsZERubkh4RlhjczNBRnlESE81SS9raEhFS0ZrQ0R1c3JLS3hXSzdiYm4xb21zY2ZuTjBMUjhnVmpOTnVEMW5MbUoyM3Z3aUd1QU94Y1UrTCtVN1dKU0d3NE16UDhUdWh1eDhhamFVaGxyZHl6RWplQlNZMFZUbXNXNHhNNWc1R0V6M2E0elg2R1pwUDl0aGthUndFbEZsdHBRdjNZR3BvYnF0Q3Nxem1VM0dqNXpDcDc2c0xRNm1oTVpXQ0l5SlI0TTY5b0RlczlzcHZKZXZTdktJTS9BL1NETExTU09MVjhKSytLOFp5bW05cHlvZDhCQm50SkxaVmUwMHNQay9EQjdBNDFJSk9oT0NDcEgrZXp2dmErWmFVb3VaSkhxTS9IZE83VXlybGZLaVJpUG5Hc2IxZVhjQVZkRGI0WWVYNDlMRTNLZDZRZGtwNVRMdnBZQVFHT25rTnFIOUxUSTdiMXNmZTZCbit6VC9KdDdjSC9lTlJSTjJxZzA5TklmSTZwZW1wTE16V0RhTUtEaEdGbUh6LzRxbEl3VU5VUy9xSFNhREErNzNwVUNCMUhsM01STm04TkNOOFN0Q0RYR2tsZTBZdUJrdDVjYlljd0krcXd5TUlkajBGUVIvdDFTa2N4U2ZqMHlsWjZzZjFkWTBsRTZXS20rRWF5UHdqY09QUDZsakNNbUlnNWlZZFo2eGVTcHhzelhNWUF4cTZtbTlNcm9Nb21HbzVSZTZJVmIrZHdPVjhkUHo2UktESFhRS3B6NmVMaGpSTEdUai9LTy9DZllHTUU3LzJOLzZpejJmQW5Yb3kxaHlCMmhjYmsvRFdraHVMaDIwN1dmQ051TWtwcXB5TFI5c0hMQ0hWcWwxRGxYcEVQSTNLS0UyWmlTc3Y4Zk9IbjA3a0pKWjVyRzV0VTVEd3lLWTVZU3VaM1NST2psanBxclg3NnltcGp1eDdScmhYT0hoNk91U3Z4VjZ1aERoSERGM21OSlVKbG1JaGZqTlZ5NE1zM1hRbzlqbVdNcXJzNWtmNXZBR2s2MWFoa21FNCt0SnZRbE5obUFVcTluSTlLa3lNdklWZ2d3RXJGZ0Fqd0J5VGh5N2QyUzJ3RFBLYnNqR29nZnQwMTdhV1dLU3N5eTUxbDhRUWloZ3Vtb0FHdlFhb1FraWtjQnkzUWw1alFrVDJwd1ZnUndManJQZDlSOUNJY1BTUDVwZ3BVNmpzSVlRM25NYzExMjc2K2xhOGpHd3ZVb1BWMDA3OThjQ29MdDFxSWhUcURGTGFNZEY0WmpSczhpamFpdEpNZGNjMWZGREdtanJzbVNFUDlVWEtJQUlFTXlKVHhVSm9nNUhIZThadmI2WXdJWGR3aHNIbnMrMkdNK3FqVFBGU3c1NEtaY3l6NTdQdFlSZWphRVRtUmU3alRBWTJ4Z1dDeUpJZy9mMnNicEQzSkNRYVlZbTVsZW11b1QyVkNnclpTY1pLclBrTVZlUlFQejYzVWxPbCt5eGsyY1BKT1ZKL05VTnRYWU5XVVNmaC9xVktXRmxIWWtTY2ptNXQrbndPKytlcjJxNUZtM1g0enBRcmsySTBOZmh0c2VMa29PNnBPSHVhYm5iRlE1UTlxQWZ0cXNPLzdOYnhRMVVzdWJIVEZjblh4aE44UERXSTdyRzFpSlhpa3dBeUkrWjNoY1g0Q0RqdlQ3a0FYTytZVEIxdU55U09lY3Z3MUVvZjJxSkFWQXV5OHhEc1RWSkxMaVdvcUdkVm9GcDRHR3JWTFhGd0tHYk9EY29ZaHkvYlVPcGNsZ2ZCUXRKZnVxd241TDJ4NENDQkRwdUt5alhSVGNmc1QwTGlySUVhTmMvMGxITlllN0I3SFlQUlVpaXl5R1QzMTMyZ0R2dDRTRmEyVkEvd044blN1UUNDNjRZVjkybDMyS0ZkMjRZRWxDTk1CamR6SmN6M3FSR2lqSlV2WXZxTm93UkJQYXdidHJxUlY2S0dRSHM3VjQ2aHByQ2lSTGFYY2VLb0Uwci9qYnJVMy9VbEpmWlRuQSsydmpZQjkrZHJsVy9tRWoycVora0lwQmNwSXRvRis1SGhTOGoweGVHa3hUTllqU3B6U1EvU3FkSENoblVRa2NWMWRGTnpmNHNNWW9Pa1RZN1I1MnpYZ2ZWQ2NUYk04K3hBU2U4VVlFcTJyRGtiNjg0QlJ4OHlTY1RBbFBYdTU4NnRhOUtjanRmczFNR3JtcW92Rm1wRjdQV2lnditTcXZqQ29IbkVtWGhEa2lHVTFpb3NiOXd4WFhPMVpxendWUjVBWmFVU2F3dG52bVozMWJLOVBlN1RzUm1RUmtwSC80cHRlemlxT0NQeTdWcmRFWUtkVHdTTEZnT0h2RExqZ2x3SkhXcUxpV3J4ZmxFRW9Ccm5QQzhFKzhQZ2k0Ri9TQlBaek1wMm04ZnRiaVJkb3AyMjlMNnVlTDNiZDUyUFV6N1Yrc05lU045NmtnMWw5U3k5Mnd5LzhmWTNPdGxsU3k1T1Z5ZFhJdGUyNHBnUldabVA4U0RCekFUM205WjVCZzRQV01CUFNKSkF4UE9JR0UyQ2c4ZGE3UUtjdXpVNEZnd2ppdi9nWXVML1BpQzZVT2NDMUt2TTVUYW9tb0RyYU1Dd3dGWGlPalZlTGtHdlIzNm9Id2FmUDdDKzRJSmxnU1plMmlyTmU4VVROeTU4ZHRqS3lMQnNabjNzc1NySVJqbVIzbm52NmQ1MVViL3FuUzYzQnJsYm9vV2JXOWVhTG85d25Wa1dXcklPREtRdEJMaDJmTmFqWENEYktRR05YYmpNcVJadHRiQ3pTaWxzTzFPdElsdGFlWitMZmZla2RTMUhZL1p2ZE42Z245REF4djQzM3piNTVDUVFEZkluQU1rRVZwazRMR3V2Q0NuNVpVREpZUThySEhEZjNIV3hKUGdOTmUxN2QwelJTR3VOME9ENURMSTYrQlFzVkN2WGZjMWVEZ0ZDTG5oVWltWDdLeHAvOENncTZMRzNBNTc1ekd6ZFFSU29GVHljb2hlaHhEU09NVWVPWUt0SWlIRVJOaVJuNkVDMnR5NldIWFRBTXN6cE5LdWx2TGRwaDZrVXJsRzFtWHI1YUNSQlZXNnZQaElOdTJialFuTjBnZzZhME1xTEh1UW5YbEV5eE9PWHpzdWEzZ2I2V2s5VXc4VThGQjN2OVFNeHpOdkRUMGpPY2lncHZPS0d4aG1XcXpZdWQ0TDdYd2xDVVFTYlhMY3BZbGNRQ2d0TWEyanVreVhaWlJnTHQ1NnRnK0pTSmNFcldqN1hCaGtIRENyalB2TUhmK3Ivcjh5TXpzWXMvam5kTnMrR1lIUnJPV1NkOVF0bzdBK0VpZFc1eDF4d1VQYWZudzd4ZnNuY3RydkF6UFptNWdHUmxRMTJBOWpuemFPaVNPU09ISElZTVBWYjloTnppaUo4ZmFtWXJ5cnB3TkFHcElZM2RmUTdMWHA5bTRqdllCMjZFbXo2aEZzQWdtMWp3R05xbk1ySUZlcm5hNUh6eE9EN0hYVE9uWW5mMUs0NzFDUTJWUU82N2FFN29vMlk5blFITmhSMUVMRTd2UloxTStiTnNCd0JoL2JyMTZPc3plVFJOVVNpVjFOUHgxbU1vSnFVMFJhR0NNTEE5NkhVVXFoQ3ViaUdOd3NvOWUvZFN6YWI3VjNHY0htQUpIMXFxd0Fmd3dNRE5ScVRZOWJ1cTU2RU5rdHNWODM1c1M3aTNaeU1OaGtWSlV5ZC8zMitPZG1SNy9MQmNsZTN2VkkxS2w3OEtIa2xOem5Cbk10VmZUUXdYT2FWTFBVQVdJakZ0STBHd2xtb003Q0RDWFVHNkU0Um5UTG5tRkF3N0pobnZwb24vTXYzTXJldW10UWIvdmlJVjF1Q3IzNldQR1ZydGVRa2p4SGRBeUJ1NkZpSnZxK0lheWlRcUdBQlZwVHJobk1vYUFmWjVoMUVFSnE0akNINkJHMldrU05LdTFiZXR1cC9KM3dqVlN6R0J1aEk4NTg2dE5OMGtzd2hRSkxmTjRuZU9saSsvRnNrbjF2Z1ZkOTg1WlpiRmQ2a1BiWFc3TWFSRU5pNnJiVSt4aVpkZXFPMlBBeGQ0eHNoSUJmak9IYnI5L2g1RVFtcm16ekFzQWhHa3A5S21WTkQ5dklJRlNjY2J5UXBxbnpwWnlvT1VOckpiQ2NqZUJ2enM1eHlySXZwUHF4dFlKcFpCQXlqWVU4UHRTUlB0QkUwT0lhT3lSbjJ0czFRdmJFd3lzNmw5aCtQQ010czZBd3ZJMmwyeG5EQ1lLZkpIaXFLUzRXTzVFTzk3QWtlRVVvNWxVRUZjV2pJU0YrNS9xRGNFUXVPdkt5T0ljdVJaNUF5V1ZYRjRBYSs1NXRoT0RoaGF5Q0dDdnlSV25PSm5OYVNGeGdsR2p5MlZFZXgyeW5TcXh4eDRDc2xtazFFNk1QVFdlcUpZWEc1QnlmVklFWkxLMjdXQzU5b2I1Unl1cS9mand2UHlFdk1WTlp5QVNFNDhjUWs3Yzl6dXdsNlFXcWVYMEx1c2VDMThiOXo1UXdSQlpDcWJMMFdoTE5JOGVGdDg4K1R3a1pvcS94bnRla091V3N5TzY5V21uNjRVQkVadGJZTXJwVHI5cmN6QVVXbm5TOHZvRm9GWkdMbDJnOSt6L2hmc1kyVVQzQUlUaWtxRTE1NjlkUjM0VzNmNTNXRTB3VWdJUnVaVVpVVTFGMzZ4aWlURThzdzhNOXZVMEdhcDZMK0VnY3drbjZsRTlXMUg2K1BySzBTNTlPc3lUN05KWG43cFVoRjRtQnNIMmlicExLVXRFWkQwbERJU2s1ZWwxV2F4QXlScEhaUml0elpzcjR1VE5WUWZXNVBQazFkd0RjcnRmZW14ZFllazdaKzBYakVZbldzajRRZ21lNy9ybmlvT1NNRHVUVmRrMTRCVy9MTStIQ1dOaTA5YzlJNEJ0bmRvMldqa2NWY3krclA3aWhYME5sd1Y1UHBLNTNBMlZGRTE1OWtLWkh0ZUhjOGpYYVoxVFhqWHd2VitEeHp6YzA4cWhqQkt3RW5rcVZ4U1JoOCtYeUw0S3pWNCtnUHc3RmdaMEs5ckRsYndGSi8yeXBwUVVkUkhGRGp1RnJ2clRrTUN4ME10MFhob1oweHFWdDY1bzhOYUhsdHgyQTVIRjZKNWxKdHR3QWVEZ2llemxySXJnSERVTjNoSkYyMFRrSzlJSU9xMTd3eVFNZC9VZFF5QnBsSVNrU0R0ZlVZQk55cU9IMFVXZjJ6anphOFI4aG5hN3lzSWdQZXNGdlRrOFFEVW16V1BSckl4YktwVGw0Y2RudWlOb3Nla2VnZGNYbEFOakh5RHo0MmJYa1N0V2dkSjJMSzU1eXArYVlabnN1bDJGd3UrbEhFOUVxNUxCNEJJNzhqYU1nR2x3SDZFR1NWZzBKOXIyb1RxLy9PNWtwRzdtTHVpVUFENEYxUFljVFpWTHI3VjJVRFo4ZGZVS1B2TUlNamRBeUdaRkhWbllJWVlEY2d1ZnU1dmdFbURySHBISEZ1ankrWTFWamZrWUVSRmZiaSt1RWdjVkUra2ZESEZGZjRqekJPc1pTdmh6RGFONks1N0l3SWZORlZZRGxyTE9wSEhGek5HVnRsL1dUU2JYZW5ic2o3MG9YdTVtYS9sMlc5WU9wRHpOSERnYStqbi9YMXAyNU5Iem5iQ3pVWUdBTTE5ZzJ0T1hWMWlpanhPaHcvWWQ0emhRZ2QydDdLUVBNNTBSbVE0bGNTSDFHbFNIanRrVnBLdm84V2lFM0RPYUYzcHl0N0EwK1A1Nkk1UmhaZXVROEtaWHNUaTlJeWRhUXZsZXN2WTcrT0o1Q1RXcXpIdEFNME5DSUl4WGxxREhpQlZzbHRZWG5mUm9ybHdQRm5ZbjhpZlllOVNYRmRlUGc2bU9NRlBVdUxsaVFmTnFkeU1FUGp0bGNPMndOYkhzTWF1L094UDN2WEMvQ2tudFZoc0FzaUd2NUhnR0p1bitON1V5ZktvUUZkelFKa1g0cHNweWthQ0FWM2RtME9CWG9WQXNHOG9xUlBKMFVmUzhjMTBUOFB6a3VoQ2JWbCtuSnZ3eGFMMGUycXdVR1ZFM0xGaElvRnBCcXQ0dkx3ZmNSMjRDczhuV1oybDRiNndjK09UUDVIWmp4c3diMW9ReHJMd1FpNmRpUkJhQ2ZXMVBZWVZ2QkVJQUVYV20rczRMTmRpaHRFWnRlZWVsVEZFN0xvWXllVEVza1dvT1ViOHVnZkx1VklrRVFnWms0QVZJTThQKytSaUZyUklEM3JXRm56S1lUVXgwZWR6bFVaSjI3cEtmbEliNmxjd0hSOWRSK1ZHL3gxS1ErZk13b2x1cnk1dTA1MmoyV1h6V04xWmQ0ZGRtSzNvQ1I5MzNTY0V5clJKZnNteHBDdjY4cndrSFJEdHprZ1NYbDc1YVU0ZXAza0wxMzBFSjlLVnVWZXg4djFiUUtINFZ6Vnl0eFpvWnFmR3B4eWk1Qmp6RFZIQUFWNUVUdjNSMnRGSmk1VmQwV1NXSnZQWGtBQmYrTXB6MjBGVDhwa29UbytQZkN3dlhTWVU4b1NweDgrUFVBVHNITWVqbDdETlEwVThCME16KzVxV0RrdmNwM0ZrWElWSXRySEJBcHRRcnFuWHR4RWhtL1BDd2ZDUjlrNEx1NlZ0ekxaTmU1UnA2MlF3WUNGc29HcGxNQUpoajJwd0JzMXh0cTZmUG4yU2UvQ3RDRU00MW9xOU5Qd2Yzc3dLK1ZxTmQybWtLekNQZWhrQTliVE1hOFJCK0VmaDhaMWR6QXU1cnVDOHJpZDZ0T09XTjJqSTlNV0E4RHIxckJ1Y0FkY0l6ekdsV08vbGxPRmdEWXFxMEg0KzJ2dk03bmZ5ZHhObkhLazMwU3hxQkNzemxYUmtIYnhyQS9zcS92SkU1VisxUHZNeExMT3BYZmV6L1hXekhIVHluWi9aMjJJN0d2ckhQcmhBWTJweDhzN3RkOUI3SHJmS0pCQ09YQk9FU05Ec1hXc04zOGJtcmlzNWhpL05ZcWg5bUdiTytzSmIrYzhFZnh6RjI2YmxrS2F6ZDJHOFFjL3dSQ3dhbnFJQnJRYnJvd0liWjBwWTZWQlVERmJ4cW4rS3lKWlRKYnRaNXhUajhvK0RmYnBKY1VBMjZIeFFCcTV6anVtUXFhK0Q1d2NLVlJrcC9zNXF6R011TVIrUDJqUTFQNGg4REJSaTJ0S3RNc2dsL2RHVXBjdytDcHJuS2R3cWRxcFMvWXdLeU5XSTVtVGZxQTd4d3R6Z1hpYmxKRVI0b09ZTHBpSi9mTzYzUjFzMzZEcHZMRmcwbmNpSUd5MjU5STV1dzM0b2FNbzlQcG1RdkRvY2Q0STVkNzB5OHdJVFJxT0FHTWdoTkZWWUJwdUlUWXg4ODRWMGdUTGxJbVFqK1JnWkdhNm42Q1JURnEzZS8rOVhFakJXTmFZVUExVnZwNzdGeXdYVHZBTkRteXpYNHBPcHAyU21CMUhXbFU1V0R4THNlRUlJdFNKTmNiNDNNUjVENytoby94aHNaalU5K0hDYm9oVE9MWS9abEV2TFFjM2s4R0JMRFY1M2Vtb25sZXNNNGxwZU5OQ1VranBrTjdFY3JTejBXcDMxY1ZreE5CQU1aUm9aMzcvOVcwaEJRRnhxemtIKzgwcnIrdzRyM0tKdEdQQzlkS0lMMk1tblZPVUk1V2Jac2VRdlA0RVR6OVcwSmtSaU5qSDRvSEdVek9lQjc1ZVo1UjQ0SFlCRFVDalZMenpiaEw1clV1Mk1MS09iM0hPcUFtcUtXbS9udmtweWphNUFVOGFIQWJGMjgyWnJVN1hHN3F3RDE5bWg0S2RlMlRRY1F6NWk4VCs3Y2dEQ0t5dVN2NzZ5NncyMTAybkRSTyt3UWVDUk1CR1EzUkNqWUE3b2VlT3FwUUdDMlBUYmxjSndyVU9tVmxBb3psSEdrSDNwUFhQZ1lKajhUSUxRSUtYUEdOVFdkQXMzbWh1aEw5S2dDcUhhOWhuTlFmejFGQnZzMCtia1ZZSCszZVNkMThRY0lEQlVyN3hmTXdEejlCOUxDbVBReEpSRVl2UFVlQ3MvUk9LSDQ2OFJRdEpxSFR6NlVUR2lXNXdnekxkT2VwVzJTMkVCd1h3ekVxRGpIUzE4Q2ZtS3M1cjU1R21lMkVRN1R4eVJLOXdyRFdSdUNwVUhaZmxyVDJLdFRzWWh1ejB0OHM5dEFHclhxZjQvOW45a2xqMzlHUUhDUEkzOTRHelY3WnZSeXNhVW0zbTlMR3BiNHVDZGM0NndCdmpVUW5wZnE5eDEyZEFHUmJYOVBGSkgyUGo2L2FFdmU0eVVaVmcrSHA4UXR0eVBnOVRPdFY5TlBiUjRFdzc5angzNlduTUJWalFjRG40SW9CRmJINHRNN3RNZHAzTlROWmtscUt5ZVFxc2FGZGU4RzgxWEZNRWNwT3lRczFYQWJ2Ny9wcktQdWFyUi8rSEtnREtteWxiZ3Y5NTNZUWh2Z2pXQTBsWW9BcHFLZTkvTWxKbGY2S1RxeWROSWRCSkhOVzl5dzk0WWs5MUZLWHIyRlZ2eWNHam9QS3hiNzlKM0ZMMVVycnkrTFpkTXBhK2ZOWjRsSytMMmZTOXFZNm9BMEEzU0dmcWtvb2ZYZ2FXYkZoNzZSQm1NdnNPd2pWS1Bja2F4eTBmWFo4VWpWUDV1RDdPN2JFWWcxS0dwTEYxNnpQRGpNeWpSTlR5Y3Nma3ZDWElJNHBSa2pFOEVsNTZzd0FqbU9Ob0hBdmdTajZFWlh4NDNlMTRJSlh6S3pSM3FpU0N1eWx6VitDSVM4WnNtVkdDWUtrVmlXYTZyMU5aTUVOS1BzaGlmU2RCQlZ4WktkeG9MUzRYZXFPZ2hyZjZoTlRNWDhsK0doVk9OUGdhY2dRRnlQcWpjZHlHRmZWTDJzT1ZVS0R6Z1h2Yzc1MGluWDFOaDBRaEJMS3lyMGliUXBHZHpoTXNoRklTZ3RIQ1p4Mmp2Nm1ZRnRzV2xRVXp6ZVJLOFp5WTk4WThhdW4rVzdETWdKM2pnSUo2dnFRdUZSY2pqVWlzWVgxcEkrNGppWi9jTnk2Y1BZTzJBb0l3UjVUcXBkbDh3MEhJQVZ6V0lLWTBTcTFsay90YWlveDdPZzBhNVRJOWNUVkJQaHhrd1hkdlN6OE5VNjlTRmxWYWlVYWN0Q091eXh0bFV1RmVDc1NGWFJuMW44MmxVR2J4dk4yWmM3ZnJ0cnNQclg3S0UzTzdTSStZdS9zTnlFWmFnMDJGVU9rR2NBaHRsaXhDK20yOUdCSWNlWHdJMThpTGFTTGtsOEpQa2dYdTAxQWR5V0ZlTWN5a21iSzhkKzJoTTErQWZjY0RuK3Y2VDFxdnRiL0FoZzdYM2FkMUE1RS9SNlBaMjNDSEhTUkw5S1NjQ1VHWEYva0RIdFB3eWFkWU12dWhVSXFKU2pNeHpNZ1ZqUStxdGh2eXFRdzNQOFpPWDRkNUpkdjB1ek1LcUVkeHdGMUkwRThLUWdSQ1BVQ2YydGlzZUhjbW9zbVFhWURKWFZpRE85Q1lGYW9Ma2h5ZWdlRW1lYldvRlpZTXUzOVNLY0NITUw2dHNuakhBNmpvQlVqTjIyb3dXa2RjcVlwZTlqYytCMVNjb1JCM3A0VS9PK25pMVNtZkpSSmpnN1NZQ01oaW9tdnJVaXovVUcvek9Va0tKZVdUWUFPck1Pa1Z0MzgweVJaSlQvaFJ1UFg1UnhNOFpjR2V0YVhvLzc5cFNFUmFNeUdIcWRvWEYwanc4MXJxVG83UkV3UGtnNTNUOGNhQXdzeEk0N1NKQ3hSYXdDMmJSSzBmWFMxOUdLc04yRU1uamJtVTJuaGRKNW91Q0NOM0N6bHQ4M0U5SHJIZ0tNVDhIR2k0L2dMbmwxYm81RWttblAvMW1MaGY3SjRTRXc2WXBvNU02V2hyNmJpc3gwTGlFTTFHYVJWRU9SSG9pNC9zUnBGRHdDRUtUMUw3MmxzODNUUkF1RWRVeUdYWmU0RlQyajJYdDR5R01GK2lSYmFaZFBMNzV6eEZIYUlPVjAxYjlPRDJCb3duOVQ5YWVZdkhhNnNsOWdzN1ZDbU4vYlk3WEkwL3JnMm9lKzNLdUVYRTRGeWxjaVlISndwOG0vcnlWS2JNU0hlMmhDOTkrb3R5QlJOR2pJZktCMzdzOFdwaVA3WmZFK0FNZUo3TEJKMFIvanE0c1QvMVM3VzhKakhtcGJubVFrMFRKZzNaVTBFaU1jZTRRcThWNHovYldhV09NNmJnVUg5aEMxNlh4YUh3R1FvaEhkNVhRa3FZL0pqR1dZUGlNblVFTEFjV0oyL25oUHJGbEs4R2hFVjdFYlBjVDQwbi82OXNwVFFmN1lGalpkWVZ3TXlBTXBtT2pUc3R0VUlBSjFHVTQ5b3psS2JRelNxU3Jsb2hJWUZPWHNUenhQdzFOWVdFcVdWeFBLcVNpSS9EYy83SFdpMHd2ZGtkZURSUnBOZG1RYlF5UllKZWlaQWM4M2x6aWQ4bFZka3R0dVRweHI5Nk9YYTU1RUZGWG9XMTZET2RIT29YNE9IZGxsTVlRRUNkK2JwaFJXdkFwbjdmTnJTbWRKZFpBRENxVzRFYURmbi8yQ0g3R1V0RXZ2aFY3OFNXclVpa3ZKTFBUTkZaUTJ6eWhPSWttKzFTTEV3UldIQUpxdFFLTUJUcTN6Rms3M3pWVXR5L1VwOUZhK3dpQmY3Tm5VWDE3UmJDWUJiTnp4TDdYY2xRZkFlUVNLYklTWlFyT0hvcFc1b25QR256Q2dRVmZROVZEQ2R1UjJ6RkYxU3MwTS9OSk1TMFh1ZDhvSm4xQVB0U2Z1eXhOWXlBRnBKazV0OEpCeVhOWGMvTU1jaFBQRzh2U3Q2VzJSYmJhYjhIR0tOUFQxbUhPaUs5M2ZVRXJTMXRaSXMzYjV2K0VJVDdwbFRjZDEzVVBTakI2czlha0JCdHp1bXgreEJaMnhlSnl1RDh6SjhCV2pHVGhqbjVzNHlMMmJrSWpFRGM4OU1uVnZHRlBBTEhlcGRMQ25jdWdGR1grOHdMZ2FVNVhhejhwVGxLTFhHSjU3c2ZlbG0zV3B1L0Nlc1luVkpmNzc4MVZGdXlwbTNaampRT0k0VCtVN0k2SHVOMFErTVJ2NXZteDV2LzEwV213ME1pM2Z6ZWRLeVVpS0pKdVVFdkJ3dllLTWV0dVUrc055UndBN0d4MUNTSmZDNlF1OHRBMGdEcUE0dExmbUN0aWhOV3dtNC9ZemZDdTZqQU50QlFSN1duRmJoSGp4QXJzKy9ZVVhZbEhFUUx6NEUxeTVsbUxhblpiRkE0cEtMa3FIVndTV3BsYmhRbmpQZTM3ZytxeWFCUks1Q1QrL01VVG0xRmR0YmN2alE4V29xSk1jdGtNeEljd1V1bmxkRXhIUXo2eTVzcytxRHVJSU53dTJnU3ZTM2RJRFVUUmpxY05Md2JIZUxMbFgyS04wbkZHaTlvVXlNelpZMVZ3QUd1NG4xLzhHRExEWHJTS1JFR1drajZxd2srUGl3dDBaWUQrQjI5M0o4bnBuQTZ0V2NRSmt3YjZ1UVM4cHRXNTdJeFNFRG9ycmZyNmFqWjVtUVg4OUdoNDhBelNzNkVpZjFnOTQ4VXpNczc2OVltZ25EZm05WFUwZVlBNTVJcnJ3SFVZODJSWnp5VzdUeCtvYVUwOTNrSkNQMEF1eThPTTUrRE02REZyRFhaR1JRL0RQVW9rVzc5bkpHVmhWTU91Q2plaEMwWGlhci9BYUhUQ3M4ZlBRSWFhQThsdmo0Q0MveFVvR2Z4UnRFNkhmd1ZXMmptUHNiL1A5ajVYWnROaytSQkdTaUJCQm9XYnVTVTNSKzZjUXY1bkZRc2F1cE5yQUV1Sm9YNXhvMzRNWitpL3JLUktwb3BVT25wZmUvZHZxcytLSmFNNTQrSktMZ3F2Vkl1aVlCNVBFREtRZEFUbTFoeWxpWE5jaXBDb1FHaElncDFHcE84SU0yMVB0aCswVzZ1c2ZDYmY1NjMvcDV2UXpVU2k4MDV2Vy9qTUF2ekZrMnpBSGRCcTVUb1RPdEV0REFrZnpwbldRR1kvZEpsdEM2cGd0VHo3NDNwRitiMWZTdmx0T1Q5d0ZnK3BmcHVkOFE5WDZSc3dSb0xoaWJRTlB2d2FXei94RWVjQ05RQ3d4OVQ1SkQ1Ylk4VFhRYisvb0dGd3BVZ1VaV2JKaFBlYURBNmhudmkvRWovTjU0L2MrQmVaRmwvOXRlQ1FRM0hFZ2NNTkdMeHRPMVRsY0swM3FpOENOWllXUUxhSG1FS1ltNk9EaEJmSEt4R0NtRTBwQ2o3UTdTMW42ZCtHZkkvNlNFalYwa0FqdUtOMUlYdC8vS2VWNnJ5dWdmVUhGT2RINWQvSGl1L005SER6TUN4SzRWQTBPbHBQWGVjRUlQUlh5V0dBSmtMRFFXc3lwcCtSb1VZeGl3Z0xjS084NEdlRzdtcVdJcmI4dDJQdE8yYjNpeFFYQTZ4WkpYU2hhSG9CdFFSd3plcFVlTXBYSS9RT1ZJUzQvN2srYVFEVW5pQkJaMGM0WVo5VENVb3cwNjFHTTRFUkZZbVNNSW83YmZqUHViZUFSMWtRdWJCZlVIL2k5RWN1dFkxN2VibW5KSkFiRWREcGFRQTJ3RFZTMGwrdXloN3AvdHlFMExiNS85T01CemFFOWZ1dWhVV05hZEFBdkQyanlpRjlBNU1IWU9JcU1TUUwrSHRoS3FlSUVqN0lDNTZhM0dYUlRtYk9pNmIvZW5zd0xmampndkpKTTJuaWQyMG1MeWtWeUxGdUFpWWJ6MU1PQXNabmZMK08waTNJUWcwUlErQ1U1M3NtblNrZG9IWGFzU2t4REJMbS9TWEdWNzBNN21HdWRjY25RRWVuM09SRjU5c3oxd0JXNG1WbkliWVhhYm5UTVJhV1ovV282bmhPOG43NTZpeUVuR1NuKzMzOGE1c1g5U2dPSVBDay9VWVpOSXVxQUJ6RmY2OWlTdG5iOGVrdVVzQjhPNDlFK2xGQ2Z5cDhlNE1pRDUrcGFkKzU0dDFYNk1Rb1NxNit4MDFMY2ZTVkNVZlZ5eEVXY0sxckFZNDI3MU5nZmoyOXFlZm1NMXpBb0I2NGdveFpIamNaWnlkbWxVWVBiMjFYU2kxYW5wQzdEWFRDTmpvbUttUk0wNWZOUkFlRlkzSERhemZUSlhXdE8xVVExdUYrNjY0ZDhEcmFCQyswc0N2a2J1N3p5ekR4VGIzMHBxb05qVEI0ODZXRjZzL2tPN2FiUWNENVByN3JXajRoZ2RkUGxGRGowZDFpNFltQ3NBREpMdU5nZVdDbEdxNnkzSVFNcHhUUE1uWFFZV0lYc3YrSXkyOCsvYkJqQXF6VE9DUmNjck4zaEZla3prV3ZzbDFmbytZK05MNWFBTC9BeXJJRnBVZXZmaktrOTVXVXZ0ZFp6d3JudDVqRTR5MWRHUHZQUzdKSEREMGZ2TS9jdW5qT21vSVp0NXJ6NVdleThQRSt4Q2IvUW1jUlZJRjJkQlBUVU8vSWtTVmVxalJEQTgxZU84MFFmcDNiWS9hdGE2cXZRV1Uzd3Q1OG13bXVZZm5jYVBYamptNk15dWNzOWlkc3VzaitpZVBta2FlL1pqRFQrbzhtNjZndy9wbW15RUxEWHpST0ZJUkx5TEtueHpjcE4rRGRyWDRkN3pRSk5xYmUzclU4aUFMbUFrUUJ0ZUZVdHlkRkNzY1F1cUJuUXZrT0xXbjlocXRxZkdzRWhWd05XVHl4UVpOUGVlVUNDam96cWkxRURKK1VTTml3aXI0TXVHakdUb25BZ3JZcDdldFJoRHVmM3RUL3FTSHo3UGdweEU1RzdybnIyOHJGUFBER1kxeHpSd081NGthaEF5UnlGMkRJWEdQWWo4d2I2UCtxNUxoZXNBellpYkFuUGpFUXYvVDJ3RFVOL3VtbVFoemV6RnJNRXpBRG1UYjlmbys2aU9BOTd4b2FzblM4YXh4aFE5QzU0TnJDb0Q4SVpxaGtyWDhMTGl0alY5TmtZL2xYMm9DWmJrQVRpeDJLMXB1UlRCNGVzNDJhK0swU05SQkYwZFhKMkV3UUJlelVpMEhLRng1eG9yQUZPNDlFOS8xeUJRc3pFelQzdVRVSTQrOHhXdVFOWVpUeXFycmNKUmhHaGt2Vjd2VXFMWHZvOStSb1JORlM4QnVWY0lxME5kWDF6dmJYY3ZKVGZtMEYrRjVlODZUdnpsNml4bzdCVThLZWREQmZxczZLVlVFMmhQeW16TVQ4SVpycmxDMnoxbG9sb1UzejNyZy96NTBHVENFM1B4bU1YY1A5LzB2VDJOZjQ2ajVTQytBR00vWDdab2xwWEpqYkRLOTZGQ3BFT2hOR2FMOUduYWI3UXNGenBLWjZzU2M3dXhTOVlGZ1FEcUFuZTgvbmlyNkUxM3FVZStBUnc2Mzloem9ZRjAyeXh5M0hLSWpSdG55dzE3RHUxcERMRHB3OU42bXFGV0NXS04rWGx0MWpaelFFdjJTbEhacVI0bWxKekc2N055Z3h6THBVUlRTWURPWmppZU5wdmNERFlpRnR2M0xWTFBpMUVMdWxGVHVmaFBJZHF1dkx4aStaR1NET090OHhMZTdML0NxQ29HZmRRN0xXOFJ2SEZuZnhSOWlHV2pWQVROVTYwZHZtendjMWxvQ3VEZUsvTWM4cnY4QzFnVTJOdGk2TmFuSC9WRTRoc3gwQVRUMFJwSExyS00yZ3M1S1FmT0taYVhwQjJOR3N6YnBjME9xU0lvbng0bXRPRTg0cEJ6T2VQSC92VnNYcnpVM3lFVGRER2t0S3VmQjU5T0hkb3hSL3ZUYnRUQVQ4YTBTaXkxY3E1aXUxNHhzaURsZjFhWEdZc05JdUVNdmtJWjFRMTBEcHdRRDdzLzNJMy8xMW5rczFXcmlTOXVxVEg0cmI0dHNIWktDQ1B1Y0p5NnFzOTNsazdkNHdNZzBBT2JrUnpmTjJvQVVrNVJkQUJXTHE2eXBDb2hlWHNZWVk2M2NEQnFIM0JJZFVsSmx0NzI4eElBeXFmbmQ3dkNXUHY2RWJsOStvRGFlZ1lmKzdlTVE5Rm41dHNHMGkyb2ZGb0U3R3hNcFJLUFVIcE05djB6NnQyME1aUnN1ckg0Q1NJNmlPeTNmOE1DVE8zcEcxVVI2R000NFpYaWxtVlhuU2JSOFAzc2d1bmdIczNWRjNQVnN4WXMyRFpWUnZsKzk0cmR6QWlneEJybWR2d0N1K0FpMWhTRUpQV05raU9BT3BVd1FpWGVpa0VsWG1rYTZBemVzMXAyczV3NUY3QUN5bGhpS1VjU2RKK1IvWVlzcUtZZlhOaGJPTGxqL0EvKzZMRjl5RFhDdzZSVmFoL2dhRi9NNlRhUTd3U2hOQmgxTUg4YWV6cGdpb3hwcm5mbVNWRDdWZU5USlZXSU9tRzVCT0JLK1dDanEzOWF1YzZ1TjdZK2trQkp2dnVQdk9KMFFqU0lyWm93akt6aVdQaE1yY3BYLytBdXpib0hVdmxJQjZDeExJVzdFYnh2ZEljbHhQSjhNTUdzdDc1VTFTRm5lSG4wOXBucmF2c1hzT3FDS1BSMnE2bk5UZlh0aXJoQmhudjlyUVM1SXNXWVZBNm5pZmNLaitGWUtCcXk0bC8vT2NwZzdzMEtyUGVaU0w4TkRHZG15QmVvdGRKLzBFNTdiUXZiVi8wU2lEeVFKQUhOZUoyMXhTckxzdTBPOHlMbWE0dWE0ckhPTjEyc3NNM2JjSHJyRjRTKzVtdVQwTzRYWUhobUMxemlmb3lzNS9SQnJjZW5WcVV3d3ZESHpTcDN1TWlqdElCZHE2RHJQY0l1TjBKR0FLTFZEZGNQKzF5UUxiRC9PWk9zTENkU0pjQitnWTZXTlFkSDBoYUVESk5DSjg4dUN5b052NStPOEMrSStNblZpNXB1T294dGl5VEN1QW1PTk5zRFlXakpBWGlYQ2lTVXhXVHI3VE5hZ3poZGpuaVltYjV0cVNpc2RKNnZVTlhGYStJcnhUOU1PYWg4eC9hZzc5ci9abUF5cDNjWUVtcWhxeFZEcUQ1M2l5S1pyanB3N3pUVFdMUXlITlR1RGozOFUvSC9JaXZTN1FEbURKVHBLaFdnOVZVL1Z2Wno0a0ljdW1QSTNvd0s3STRMNmdsNGh3V0Nobk9SZDhsKytEWDFwRDR3Y3Q2a28wWW9hTGJiK25mK0IwOTZHZkJHcUMzZDlxYlBxU3dXWncyT09qdzI4K2ZIbTkyVnBuOFBOdXFsb25xVThVT2p6UHh0cERlRS94dW85TzRHT3Y2VzRBV2grV2thZWF3M1A1MVpyeEczeXJBNno4cGY2VitnVEErWDl3YS9kRlAyL0pOWXkvcmRJQ2VMSXRZc2pZZFpBQSs0SWxPbTFMYUUrTEFpak5NWGliQk5jbm5Sc3djQ3FISjRVbUVOQlBhNDNIM3Qwa2JmVkF4dGI2RU8wRmV3dGhPWnhpSmo5TDk5RkZvT0VxK3ZJY2x1NmR0YWlOdVlYbUl4NkxUNERzaGlONWVLQ3ZYSCtEK0MxOXVmSHk2QlFZRWFFbEQzZnk3eGg5MmgrdEVBVjd5VHdhZTJJZHVVaTh6dm1GMUFYR1dhNHZGeGl5N0NHRXNHaVJobjlIemlYV0ExS3NUK3JadGJaUE5ydmZiWEZTb3RzUXJ6SlMxcWhKaVpGL0REalVxSVBGTWlDMmxpSkFQYWxBVzRwdVoyYmlBbW5iZjIzNDg3VUc2eUUzT2dBZjh5N01WbHBoOWRKYjhMQTZ3ZW9ZZzhneWpuc2h1empNMzJtUWUxT2Z0azRabDVCZFNqTC9LRDEzeWZtc0NVQzA4Z3ppODkrNkFTeE8xVS9FeW1RSThzdnorWDB0RGpsOEdxR0RFRjdaMkVheGJObnpCeU1BemxlUkgvd1lTbFE4YzNkQ01UbE5SWWk2NTNibTUwd2d3Sm9wUml3WEh3N212U1VLdVRDaW9waTl5U0Vwakc0YmpPNjhNbG90eEx1MjI4Z0ZtY1VBRVZzTHIxTXk0bVhpTTVDc0FXOGFXOUM3UW5IRUs0aGFNY2F1K1ROY0Vtb3pxcUVHei9pdEFmQkI4M2Q0VnQzVkhCRkZnV0JpYmhVMGlsRm01OEZ5ajllRnR0Vnd6S0Ixb010QzA0UWdhK016aU9jbFY1aWxSVFphb2w1dzExSXFPeWpLNEo0TFNodUdNRGJYQnlXNmR0c2JCZ3hwelgrYStuM2V3L3FPUVZJZnFROVQ1bHNhVFhwTFlRWXZoLzFtVUszVGRuTlVSMTBNVTVVd1g4UFFQUnBlU3Q2dTAyQ0NxekFLUWdYTzNXMWRxNXdtWWI3YnFCSG1lNU93LzZRdmVZelVlcFdWdlYySyt0bTVHYlIyTjJqT1FXbUpPQk1KS0xGYzBCVEpjYXRxa3dCU3ZkY2ZuN2dtY0xZd3ZqejNxV0g5ZW9wcmMvR2lZVnZBVjYvYlpjR2JQajdpcWI1ZDJKRE5aTk4yWTc5bjJ1QmtZdVl2MDU1TUFoRmIxYTdaSHYxbzFBaGZoR0ljV2hkbWlZeFMxdy9ReWJYd3RCVnRPKzgvcVVXcmdKbEUyODJXVGFtMmU1SzZDZzBZbmIxMGwzb1ZubTgvdmx0SHVMMUM5Q3hreUl0akYzUGE3ODhYYlFTVGNTUEh3Qi9HSXMyK05aTGlnaUtoVTdxUzZXQW53b0o0WVVuNVlEZ01kSnhqbksyemFncXE5QUpzdndTb1htN2NXYll1b3FRSVdKWS9rZmtybmM2OXNJWG44dlJ2ZDlLTkl1NGdONVphUXlFaTBSMmR4algxdlJacUFXc1JqWUhlQXdNWGhINjdWQjk4ZkgrOW85eTZXUDM4c000WDdjZ3AzS1REZ0d6M202QjBWTEF3Q2NneEM2eFZsdUpwMW01dVFxYmppT3c5cEhJSncwK2duQ1lVZHJQVC9kWUI3dHpxV1gya2J4Y2VaU2FPaGdJTGZSQ1QxNFM3OThjQktmeTRoNEVra05BaGZVTURhYUdtbHpUTkpIRFVwWGVRUEc5T1dzdGZMdElqOXJUZ0ZhemxrSm1pUGNEK0Z1ME5yR0hyaDBjNERUVkhMQ3pCVHQxeDNGbllkcnBVRTlZZWJhdjZmbXFpcFg3RWFlM3U4ZTdLbEdjV3Q0czk4alR0aHpZYUhCaXJnWk0xUG9YNjJXK00yaXUwR0ZWbkVlbnh2dzFBVU03eDhXYnJhTW1pM2V0dWNEVThubWVHcVBlTjgxZk1QR0d0K256aUtKZ1ZNcFVCdmN3TmtpaVhNOWZYU3Nwa3hBclVWZlAzN0lxWmRkZ0trTkJza21FSFZDb05va3BhbjREUDhES3lUMS84Uno4VjljTjZTb2lhbU5TS2tWcGs4Z1B3N2dKSllscllpQTlreWswWVZwQVFNNzJKelduTUYrQ0ZLaXdqb0xYcTlKQkpIZVRmdHE0QXM3YnhpaW1uL0hKbVYwQzA0NnZtS2I5VWl1Y2VJYU5Ddm53SHlvSHR2QVEzNFBRbTBnNDhLVkJzaDhMbHpFSG4zMDJLVkxVMFpaQWhFaWZXQy9uSnNSMDZ2NDltU05Na3hIdXU5L0RqYmVYWC9iQW5CK3NORFZ5UFNwOHRheUtKaWtkcHpMaDY4WGpNcnlNdkM5Y1JVUHF2cGozclhrekk5U3RBSVdKRmxLNWdiMXBITDBrQW9mcFJidmx4L0s0TjczRkJwL1R1RkdFTlNydko1NXBMZEtrZE9FZVkvd0lzZGV3N2hRbHk0cFFwNTh3TGpBR1FFaGs2Vko1NGVHcG5lSDhLV0F4SHFDNHdXNktwbkdJMjR6emdWOUhwenNkc0h5VVNwODVZRFYyWldBSzVqY1ZGdXhpeWJLRmlvaC82QWtTYXNyTmVLVVhDQ01xY1hWWE1vOWdjVUh6NEt4eDhaM3FxaVZxQWMzVy9MODB2Qi9JaXJ3UzIzQ1JqVzhwNGo5eXhJWFNuVlVLZUNGaDVOaGlaeTJqZkNwaGptTXRRd2V2ejJrRkJJRnp1MFd5Q2ZWaENmMkpIaDJoSEU1d3ZoYzdnbHFhWHpPd3J4WlZtSmpVMUViWXNpWFF2VW5DeElKcXVVU1R5UFpPR2toMHVrbDVxZUhLZUpDUDhwN3ZjeFN6VXI0ZW5vT0hoRlFFRk9WaUN2dVBGaXMydUg0Ri9VcHE0Q1NpWFZ0TVVZdGpwbS8zcUJVbFYwaXFLMmR5K3FFZVhTV2Z6c2JHdmVBU3RaSG8yek4vdFpTZDlHTkNMTXluNW1VQkNabEtZei9XVlJVOFA3T1B2dGZBRjI2dTlHMVpkd2ZYNzkrV1EvNTBROUFnTzVkSG5lamdhNXRPck9DQm5XOUFuYVpFVFpJdnAvbUpPMGJaQi9yalNGaWgwSE9aeDljdXBqd1h0TndCbVBadVQzR1pjSjFFYmdWN2R0YUtjc24xWXAxT1JyNnNhZUdSM3NCcFhRVmZlVkJDVG50K2prOHFuNFRKK2FBS3c4UmlUSFlxc0E2Q25nM3BwSzJaODQ3VmNkOEdrKzAyVk80QlV0aDYxOFpkMGVMVW90VTM0enVCOGZQOVc3amZmTEorM0pGNWtzNFNDNVZGbGVUKzJGNmppQmVqajh4KzhSbFN5OVVSejVqWmJUSDBDbHB6OVMwWGU5OGg4NUJ1ZjBTN1RaQTltZUNtYzFhZ0pSSFp0QVQydWJuUjFJRmRmaEZ0MVpMaU9lSVMzMk1jTk5YelV2YVBWMHlRRDUzVVVLL295eG9HdW4rbkRSVm5nVVM1WnJvc2tyZ3RkSElnOWtFdkVLcWI5TldTSWcrazdLc3BzZUNUVXh6a2h2WmhuNDUvakdJV3hQaWZLOENoYXliUml1NmN6ZndLR2kvSktBTVhUbm9ZTVA3eWNIL1BSdE50djFRYzdKa25McG40czVMVEd5RTkyNUpGY0NzMGlRWllhUEFoaWdCRDI3K016czBKVkk0ZnJSMEpLekJLQXNYY0grd21vaWxtRVgwL1lBdmlsRDBOYlJ0L0dnN0ZHMFdlMHZXdUxtSlcwRnJDanVxNGozNVQvMUh1czlxRFlWdDVRQVF0R0g0WG94cUNabldBY2I4ZEVud0JhZXAxaHA4NUp1eTdvVjRYL1RZNXYzN01wWXJyc0NtejJaZ0VJYWFqTnFhMlZRYytqNDc5T05XNEJNUkJOL3l4L2V6QkcvNWUvL1ZOeU9vNG5oL1Y3c2NENHltNEtmVEh1RjNTZ1ZmUy9ZaVpWbWc4dkRKY2Z1NDRlYWVyV0hJYnl1Z0FRcTluamh0ODRwZnFoc0M2YlJLRVBqOEdieTB6Ly9Hck1uck1nZlBGU2ZQTTl0U2JFWVNGU1I1Yk9ibXZkako4OTg0bjJ4cjI3OXZlVnVvRzQza0RxcU5tU3ZuTlFwTnVzUk4wSjVYdTFwOSswb0JqdCtYemVycVA4RExOeGNIbGdVa0NtTFRPRWQ4ZmwyMjZWZzd6bFRQN0Nqc3VldkYvZmh2UmtTcHk4dlFSbVQwSGswOHdCeUEyTkR4d2ZoZHAvSnQxNDN1NFdqSzNkZi93cHZTRVVZSWZZZFMwcHM1QWxERXAwaVRBQVdpNVhFeHdWOS9RS3RLb0FZTVZ6MDhHYlZJbWZ3amxjeFZnSDlESisvQjMxSzB1RjdNdDBVWHBmOGNNTHg3RWVzTjZyTVZJSHVtWXRGK2pqZ0tmOHBydFRGdnp5c1plejkrK0dsMnk3TEJGV2J0V0NwdDNMK09nNWxJZ3ZRWTAwQWZoV2pEbGhDV1VoM3lZandoeDdaaHBETmVBSnJhbGpwOW9aRjUwZGl0bHVYeFpsNGh6SndiN0dZdlNtbFhhMmZKS2JVby91c0xiNkxSdEdiY2RrbXpud0cvdHJHcEZSVStPTGplUUFSVWpOeGhwTG5SckZWSG1tZFdFb0F1K0NLR3BKSEFmellYQWh4bHdWSzlNV29nU1hiMHJDQVBBMVl4ak1Rekd4VUZaNllUbkVrSzF5SDAxY1NGVHhNVHdKZERDWGhQYzJsTjIybVpZcllVZ1pjSGcwYzRjYWU2WXlSdlZ1UHlpOTVVcllDOTFnN3lYZjZvMXFpMnVqaHNHTkpMU3FzSTNlUHA0a08rMDZJWXorWktlN29rRUhjNUdlQW55Ty80OXRKdlNIa2drQ094V1VQY08vUUpaRHlKSnlsRmhIVUlmSEFMYmVFMnhXdnBTRDhDelNwSEpiSVRwZGZ6RnI1QWNxNWhJamkxeGhkSDFSZnl5MzFXeE5CR28xcWVQZHl2Q2VNaisvOFBtSHNaQ3cwVTBrRnk1TThWRS9vVUpYWjB4aGw2MVE4N0dEajhmM2MyeHkzcjFzWnkvWkJ2TG5NcUN0OXZvekhxVW9CcDZCTnUvbGR2V3p3MWwzdTV2YXBiNWlTNmFnU0RqcmFxOXhyTEp6Wjc1WW83SUJBdU8zb2huRFlwWlJjOXVPMnh4bnRqZE5rTktFbzZVWFRKa05paUxIeHZmMWdMcXllZ3VTZWd1ZXYrQXQyc1RydjJ0N0lTQWFKaTRwUXlONkFOT1ZTUVRRajNNaEpTWVF6a0tiNFRMTlBVTE9CaFgyVWpmMFgyU2JPcHpGOHFyU2dqbVFnY3lEeitpNnRrT056bXZRL1NUNnh2SkdHMHdYZGlDMFU1WHV5WnZHT2d3aE8rMlQ2SW9hYWNKOHF1MzhUWE9pTHZ1b284SlNIUnROTGRueWFXNmFZSTNObHg4WU9XVGdTcllLb2VXTTdRUGtObFVIbTZtM2hvRXV4UkN5WVlWdEoyQlBmWlE0UEp1OUJxTnFmRGVTQVZobEhBSGFucmttZlFUN0d0SHpENHFRRFRZcThFWnEzWnVHclVaRG5nQTRKbEQzYWNUUExNcFdkSm13Y1dBcHVON1RHb0tHQ0dRNnZWZUxTVzVFZEZLUExHTnpscUtoenk2Tk1GTlJ5ejRkQlVyRHh0MEduWDc5V1VBZEhlUllqUC9GTmFydGlodVpQVU1zcnhmd3NFWERvMjc1WFF4V0ljSm0vWHlFUEV4VFkxeGhVNXZUUnlQSmFXVHBPSXVzY2x4UlhMM25GaHpiTzJYYXRIM3hTT0xPdWFlWkZ4SVBidi9tYXFPaGlxK1hmRVVMYTlNVmZjUW1xTGxQSFdBRHFnR052YnJtaDZYaS90NFVIdlZKY3pKNGFOQXA1RXVpNERQcElRUU5sZEFIL0VEZHBvbC9kRUFsb3NQZHdnTG1GallSdWJwaTRYbEdYZFJraG1oL052ODV3WHR0U1BaYW9SemxnY3EyTlhPOU9nY05DMXJtbjZLajRrdWE3Zlg4elhIbjN0SE84VjhGaTdySG5udWpHZmk5aGUvWXdONUpuUjJhUlZUaUl3Rmk4KzZpQ1pKUEl1SWUzbkZzSXRzY0hSNmZiNyt3bzZsMTFyNG1Mdi9aeDdPalBRMWRTM3lGUzVKQkYyMkZxVWxUNjc5VkEzQktFSER1dWExQVVlN290RlZxd21adng0a0dJZkNhc2dUVVVDOFlqQWhhY1o0NWp4Z3Z0UEw3MVFpTmdJeVlsY3VIbzhoZzArK1UyamJwb1pWbUQwVlFqcDcweDJpVGtWT0ZnaTkrT2gwWFFjWFlJalU0N1BMR0dNdGpKRGxFK2phbzhRcTVDTVdGbmo1dDhheHMxZmlOTmZJMlhlbTN1SG1BK25EVHduZWNmN09ONExGM3ZDL2NldmtWRmZEeVprRldnZDk5VW1BcFBvSWJpd1lIeTVHTGpndS9jRmp0Y2hyYTZxaXVGdFY0bDVOcDdnZXJpTmw5MTA2SCtYQ1pqM3lVa1ArNHdMVUNnd3AzeVFaR3NHOGVZWkZaT25KTjJyZ0dvV25hNDNUZEFPUUtjbE5iUi92M1RMVUFzNkgxTEtscjVYYi9TQUQyK05mVEc1cDNGZlBjdjNHdFpybHJmd3VkWURkL1A0Q1NGK0pyWlBVRHMya05BMzhrb0NiUGlFYjg1WUlkbHZYcFlLNUUrVmpvNy95OWRNWWkwYWh2VjVMb3FLY1JsRW4rWk1RYnl5dkF4U2VJeGRDUUtMcENQbWg2dklENWpsT293ZS9HMXliNm5RU29STUt6cFhtV0lNOTZLek40eFRhMmF2MWsxeVVoT3BUc0wyYzczRkhtQnQ0U3RJb0xqNitkeUF5MDIvM3dWY1ljQWZDdm1aSWE0enFmZzk4L3FwTjd4aDcyTkNaZ2VnUTBsa1NQSjlXbTlqK2dQbE81T1RJTFZJMzFqaHVCTmNHdWtWMSsrbWtOMUpIcWhRZDcrUitlN0M4dHd6WnNKNEMwZEdsMnc4aTN1aUtlVjR3WUZVcUU2bFlWZDVTWCtzcURVV0t3Wk1YVzVQS20wQlNUMXpENW1rNzdtRnhSM0FqQzFuNUpPVm1VUEMwZTFYL3FaM2RIZ1Bta0NaRXA0eDFBeE1ueHBZT09iQWxZZVk3aWJHOWxSNVdhL1ZXNzJNcHhVYUlxaFRiaHY0U1Y3S1lwUDVpaXIxL2dUWUIxUVJqcXg3MkNCZGZpMTlxd3J2T0FpZ0ZKVTRwZXowcm1KYlJZN01NSUpndUlxekErcE9JS0VQOXlXdnB2aGlsUkVzYm5DcFRCZFRxZ2ZIRmk2RVp0NVJidXNrelFyaEp2cUJITGwzYWdxL1J0akljMmlyOGlkbVpaMTM0VDVtNEdZVFYrdmxlbStvRkVsMTJoNHJvMUxpTDFPNjdQcTVvVkRZdFFRUWJQcGVLWi9xV2I5aEJDSkNrdUlzQkQ5MDBtTUNqT3dXVUROVzZjUlJ3T1JaRC9XRjV3NjV4OEhUS3hPUXAycDU1SEhkMDViMkxjbjlBejlDL0pRNTl2RUtYWWM3OGhUUkhUcUFscER3eitNZGEzdStqRktOUUNNZDNuV05UcUxRVk1vNFVTT1BkdFM3UGR3dlNnTTJuc1ZXNDZlMDFzNTNBL29YRTJ2ajlIcmZxRE52SWlSRDUrTjZZcVpQNHJpZ056bi9OaXI2WllZRU5zSUxweFhFYmpZTml6RXBEcytWWERldWd4R2l5aC9iR3p1SDlNbWx6d25mZEdmbFR4bE96eVFnMGpTZURoVzQzdUluSVZkenpNT3M0Z2NXRDJQWldCcDIyOWRVTm9WTFJwU0laVjBITzRLbnBKQkF6UXBXblBBb2ZOZUxPOXVXTVdIYVlpQ1ZVTlZyU3luT2swS2RmUURJSlBIWnNWSEJhZXFDb0k4YWt2RWF4bTBNUmxsSjBPVnhOVUNDbUpqZ3BQd3BwVVdyVmVURHdkRXpQOU1GMkZPZmVrTTA4ZllidzNXTTkzZkxVMkdxaGVoV1FSQjhJOXVDbjdIYWFlOUhrTVpBZURENDNyMjdRcjZ2M1RSVVRBd1FkekUxRFlHUmNRa1RYUEVOcHZwOFYwY2FnYUY5dWk0QngzdEM2VFJ0RUFpN0h1b0RabXdlK1UrTVQzdFdqT1VxS1V3YUFtRWNTZG41RHdGVlViUnNqUjVidVlXYkdiMGxmb1BpVUM4WEVjaml1cmpJaTdMZDc5RS9tRDAydDRldE9BMHUxdGU5MXR4SVBXY2M5Uk5HQkNTbXJDYlFBT241andzUnRoSHBqNjlOVm9rM3NPcTFKT2hqdVNlSjFRNHE0L1pmNkpKS3QrTWkxL1hLdlBzZFlHVkRGWmtlRnJZcVl0bDVGZ0VsU09MYnBlbzBzMmo0RkRwQTlmZDhwNnI1NHBMOWpad3E5ZzhEWnNmeVdTMHI0em1KVm1zU1NKVyttQkZQRHJkeXhyeFNXUTEzaGh0RXNzbTV0QTViRjB6MVdrSUJ3L2ZzL3h2NE03d3NLOFpxVG42RDIvbzdjWkNqUFEzOGltTE9BbkVSMC9qZlBwRzE2TU9sdytkOWw0cXp6aExBeHFHZWFPTTlITTlhaGg4RTdyanBTYTBaVlk1TUl2dEg4SllDLzl5aXp6NE92U29Ob1FlWVJSZEcvQlJhTUFpeVdxL3lqb2tSRXVMWnZjcnhyUWN3SXFYYmVMMDhMTXBlYjlabmYrSGJpTnZ6OTB1UWN3ZElWaVdrNnN4dzNGY3BaUWUrandQNWVsRGVHL3h3NUxzWFU4Ykk3QTQxb2hpSFIyY1RYOUpUTnZvR3hMRDlGejM4UGZqQ1Q1TVAvVTFzL1dTaUEwektLTU8vVlB4RlB3Z1RsN1g4SEFrdnpibmxlS2lrbGY3VEt3TzY3by85RS83TVFsNGMyWldXVkRDY01kekN2OVJEcUFHcjIxaUlSQllsTGxPYVRndERzVE95dTdKR2EvcUJmSGFDalhVMjZDWHVRNHkwQ1IzZS84ZkNYVG40VU5KYUI0RnUyR3pFUFdZMFJGN3F0MkNLb1poNWtrSWpnU1FCcGxBcGp3S3UwUnNBRjBMZ3hZMm5VZU5ZOVdzQ1ljZWRrWkxlQXA3NS81d1B4NUZibVA2aWVEUFY1eVBoMzJZdzMyMDRoc0RuZUU5VTlNRmhsMTM0alVWRVIreHE5L0FZemNBMVlEK0Nmb010TUpCTExJclN0dkU4K2dpK0M5TlFUOSsxYUJ0S1pWMk1UWndVU21NcXl4Q0gvaXhsck5qZDJzM2NkOGFLcUNZa2Y2b2k5cTBGUU9lUDVpMnROT3pLendVS1dUYkVsUXdqVzB2QldDUnZvOUYrSlU4ZUpmMzZUUE8zeTdzZ0FKVGFQVloxUjJZcUMrWlAySG4zamFobzdRdHJYZEo0WmtqcTdFenVVN094OTZCamQ1L0JIUy9ZQmM1bFFHUTlHdCtxZEtvRGtkVDdrRDcrU014WituWnkvUjI0aUEvTlVzTUtXQnpvR1R3YjJFdlZIV1BLVUZiekdjMjNmN3pLR1M2emlnQVp0QTRuclRmSHF0WnFXZlU5NGUwaVA5dGhoS1lrazhIWlhnL3RNbjZzMmFPOExxSVdxaGpJUm5kMHNyZXppSWVjUnhpb3NsQ2FBdENtcVc2SUFtaGc1bnc3TE9MTHlRK2V1MjY4ZVJiVGJNaVdteEtZOU1FNWZEVUh5NytWVXZ0OElKRkYzRFEwOUo1aFN2Vk81ZU9pTFM4RjhRNU9jTnFHYWJCUTN3SXlwL3p6T1FZVEx2allqK3hJU3p4SlN3a0FHRERHUnFvWmJDcnBoMVgyMFhEZ0d0c21oN1lHbStKVHd3MzJrSjlxRk1zNUU0ZGRiTGlLUGtFbXNXbnIxbFdRSnhWR2h2Ujg0R2JwN1BqUnd1NGFGb2JhZm43UUpPa2J2eVp3UDd6ZUErYXVuUisxZjlZUGdBeFRXSE5KbzRidG1GemVlTzYzNmx3bGhGeWxiVktLcWY5RFJWUzAyZVEvTVFBMnBUc1F6TnZxZU56NHcxL1RaUW9VV3dnNk8xcnkzc1FsRGxRaFVrczgwYy8rZ3NGR21RVGFoUXRrU1doL2VEWmhXWUZVYVBkdDFFUTBNK1UwSkRicTVaelk1dFJsdzI5d0xUYjJvQlRTeG4rS3dMZDVTTklSRnlua01BVzl6Rko1ck5GZjY1MDhmOGR1N09QTitsNDY2dVFRWUthd1VzOXpwM0Y3TWpjc3puN3lITTRnbWVwSXRVZHl6V3dmdVZhcnFYL0lBZ3I5d2VyNWRKdW85blg3ckZKU2hyejZDNzN4V2diYzFlbGlJYzBqb2o1RjBYV09VQnlWS2lJWjhTRm1XbFpyR3ZZZmZBTC9QdXhNaVpXYjN1bHFwcDVEb3AvbXE5STFGdU9HVTBuNElEc250VTczME0wRVRWcXAvcEdHQlNza2p5bDFRK3Vta3ltNWNyVDVSckhCWDdIa3hGeEZQQm4xN2t5VDFKK253TXpQNFZ2YXpsNkYwcUptbThWOVRlaXFzMzhMb2Rjdyt4cWYxeld2b3BjZ0RsUmN3by9mS0FPTytWSFkxbXJtYy81SnlWMG1SRVRRWms0aVZjTk1ETTBhaGJWVVRnQ2RnczBtMmxZOFh6bkNPMmFGSzRoWEhPRVcyVHNFWlpvUDA0Q0ZNVzNjRUpUbnR0cFlHK1NHWDFQTXpqUjZxMmVaZzVaenp1b2xJOGdvMU9CVnhZNHJHSngvemE1MnR3ZndhVkdVODZUVC9Obll4RlFMYkR5N3BJcVhpTXkwMnhTdVVUb09vTGxEbmR2L0haQXR5TFg2R21IVUpxREFNTldVeTUzUGZFRmFVeFJMLzE5a0E0YXBUQ3cwSUlmRjRMN3diRDZSaEZ0TzRhK2VYNHF3TXNucVRPTTJBY3FETFVycml0YlpBbUZ3VTZoZU96OUNzWjZyNnhjVytCdzV4bkx4ZFkvN0JQSndpTXB4bExYaHAwN096QVRiSDduVzVZNU1sUmVwSzBOY1hBTnZIbkhlQldRWUduRkdYeGlTVGJROHdWK1JBb2tuL2h3RkZBZHdZZkxoVnZLOW5xa1cvRVR3Vll0Y1h3NXM0QXp1YTMwaHRNTGdobThWSmFZQkNacUhNZmJnZUxQbFhqN3NoUVpNbzBEeHdjcGVnaFF1dGV2MGIxUmp4ckhvWU9QY1NPL1JHRlBrMHlGSXhESmRJaHR0ZjN2QzFYRFpXaFdnb3BBR2xrbW90NUIrV3BnR0MrMzlzWGI4S2FvOXJ2V01FQUQwOTNGb0FsQmpyTGhVWWhOdEFYbm5ueGZqY1greURzcE1XRHE1ck5mejNSOEppbDIwZFZnRXBkUGdYOWVkYWRYL1lyYnVscXMxT1FxN1NTcUlBVTNSMXlSZVlISVhLbXVQUFd5SThpd2V5eFY3TG9kY2Qrd3Y1V2dVeG1jZXhYZmJYSTVLT1BtYmN1ZlJPM2FIMG1uMSt0NEoxc1NnMlMwOFBDanNkNXd2bCtGL0NnUmRZcyt3dVUvR2VXZEdXYnNMcktKSmlEc1BpWGxTeSsraXBtS2graDJJbFRMck9vbkR6MW11MDZBWndvZHRLWXQ3NngrUzdsbjBQS01yb1Z3M1RCQUYvUDNibkoyQkJUSnppcCtPOVFpQmxpd05vcWJWT0N1aDh1dHdDdm9FVjRqZDUwQk9XdlFUOWFGNmFHVWh0L3JHRVI4aGJCQ2ZxU1I4VzRWL3lzcXFhdTBmcDBVUmhLKzU1TWZDd0V5WVp4SDJKSVZMSndPNGN1Vm9IeWRZSE5qOUNrVUd0SHpKWGZsZ3ZmRE1wRTVBUm8wbExaRWtDSUpyNWlMVjRGMnRHMS9HRmJKalMyOWdFYXd1RFJPV3ZyMEp2a0drdkpJZmtmcWtEU1pyME04dXNLTS9zRHZGSSt3dEpFOUNORnBMekZ2ZTJKTm1PTVEyMVl1YjduMzRkYUQ4YzNHTmhQbW9xT0dLc2pZdW5pZm5RcTRTZCt0MkI4Q1VuSWZuTXZLWEFqYUwvYnU3ZzRRbGxWci9OWVVXeTdOSTh4NStLQUIxRFo4ZXFEQUh2dytkdHBudjNvY3V0RE1nYlM2N3B5VjY0cWQra0N5R0w4T0FhRmtKdUgxVzdLNE1qbVdWVWRSQmNod3dYQ2JBK0dWRmlnZmVZdm5mN2c0Z0k5dWVJZmcwMXVRVy9ZemlIU1ZYVEY2ZXEyc2RES2wrZmplcWtabTgvdnJCM0F4YnNrL3hRa25ieWhLWGtkRGsxQ3czLzM3VTRmRmM0Uy95RVBndHJIdmZMckpnRFVBeWEwWlJpNkJlZTdsektUOUlvQlVINlFqakc1LzBKRk05eVp2S1M2Slpsd01sazV4R1BDeUM1UFA3MTQwaGg5eFpobGkvSmVhR1VJeUg3RkZFV2ppNVdWMjBsM1RVZWovVEx3eFhVS1RNMlVVeDgyVHAzcTk2ZGpXeHVyQnp6ckVzSlVoRVJFY3lFbVljalNKQXRzbjUyd3RzeGo5T1J4QjI4cXFXdFg3S1ZlZk01WVgyRnRQT3lDUXBQcWxqRlVObXp0QzhkWVJGV01qTm1OZ2I5TTdHaGxkWWgvOWYwSmFYeDEyaE1ScDlBTFNJSWl4TDQ0bkVnK244UmtFOFE5MHpYczBoRmFVdGpQai90elZrV3pUWUdtNUF0aGphWDYvNlZVSlZTZ2J2a2NtdHNrSjlFdFZQOFY5YytKTFFEZHRtVWZNRnZQc1FLdlZmZW82ZktqeElwVXJ0eURodjZ5ZGFjdWkxV3lLM0pnRzVTUlB0U1pjd21mVFllL0c1ZkttbWJ6amx5d2RTRGJTRGlFNmVpRkRYK3gvTHhiTGI2S1NqMVNFY0dWWlFvSzh3RTZMZi9Na2RmamFZWVR5eW9VUkorTmhBa1U5TGtnbHNBWWVBekVIeWVWK29YeDUvMWNNQkZQczE4QWNLL3pPZGorRVp3TWdtQzNHVWFOeVFKN3A4ZS9lcE9VNU5USjBwNHByZDk1U3ZJUmlaVGtjQTNrbU5RVUxEaGpQTTRReEdUcjNlL2M1by9BNFJ3MnlRYStYRzVCaVZjMGFoOUo1SEtSUlZHaXhPNVNhT21JZFJ5QS9oUXlULzAzYWFxT2FSOVZIQjhnbE9LQ2FqOVF6RjY0VEhFVWxVOTJmZVdxTkJzVCtkODNaSjJZSnUxU3UxRU5rbm5qU2lXcTNGa3BaUjE0bGlKYnN4eGlydVlJemNpVEQxWElqUEh0MG9FS2N0ejgvd2sybVJrc1hpczJCSXBmMUYxSGtwR2dhMXcwWENPS2txSk9nUWF6aWZjdmpqYW1DenhpS2hpSEFmWDBxaitSTkc3YzVjMG94bXlKTm9pMDFCVDJRRDNJOTFHdE1ZVzZocnZzVi96VTl3QXBtS2NxaDE1R1dXczJKV0xqK3VUTTV5N011NlNFTGlCajhtSEIwMFFwNlYyeUtub1VKK25RelhNNEd6RjBnYjNMS1UzR1dhT05tdVp1MlB6M2pUUmNNMVdhcTgwTHM5dlY2OWhNalpjbjE2eitVRDhLeW5rVzN5ZTlON3ZMajZialNTRFZEVGlHQ3duQkVlWlJjQVphSVRiUVJibHBMSUd6TG1SWklPb0J1dnNoWGM0YnFwTVc4NnZocG9KVnh6Z3h0VWpPWXBLbVBoOXJZd0ZrdEtaWWNTdURKYXJYc2JlcnpUaUhHd0tDVkJZT0RyM0VNRVlreTFRL2owc2F1R2l6NzRPVXYwbC84Q3hBMWVLNmxjRkJNVzJYT21wTndMbGYwSndDa1hkT010Vk8zN29QVHYyVWJnU0taMElGNDdhRi9JVmhmRmdoNFhqd08rTnlxaXFwSG9saHAyL0RFNTY0N0ppazVTRkx2b1NnTUZXdkFqcXVrdWtud2xDZ04rUEl2aXd4UzdxbnlDTzgzSHp3K1hEcG5vOGx5RWhlc2xtdHdhcXl1aHdhL2RqWnM0OG1sdFJScFNkUEViaGMxTWlvbktFOFFjWWpYWTFCdk1paTRaMk45Sy9kNHpoVTUrTnVIWFF0YmZNR0ZiMGU3d3VzNXZkaVBLZGo3clJyYTRnZ2t3UHdLQW9za1dBeGZRN2I3bllRUmJMTmR4VWhZSHBKQ1BsdHJFWTgxYUR1cFhjZkZHYWJDemVPNllQS3ZXN0dFVFZQVkJRM2hDYlZ0RkdDUGE0cWwwSTlveHpCVXUwSHFXellFYVRLZjIrZTNNMHJEMFVsYU5oNmljSEhXbUJzbkZaS3hnd3hSZTgxemZ1aTFkVk8yYXZJcGd5M1NzV0kvT3BhTkNCaEU1TytWVHdkZVdRakYwcitiQWtMeTliUkFJaGQzK3VHdGJQaGJFb05peHo2OXNsam8zcFlvemo3R0UzNW51c2cyRVkrODJ3d2ZCVERXWThCSklLbTA4NU1MMHBsd3paNkFtRjk2L3FRWkgzWkZHQ2ZQV3B5eGx6WlFqRTlTa2dqVG1rbDV1My9ya2FwSkV0Z3Jkdm9FRnJHcVp5RXRiM2RoYU9rZDNielBmekR3ZUFsdE40emhZRm80RTJMSXlSS1VaKzhRUnlrY05pM20zdHFab2paUXZxRU5VUGl5dEdnTE9jdGt1MzBUQ2hENlpKc3dmZEJaa1JqS2tkSDBIK1FuckJVbDZrRERIa2RDa3ZIbld0c3kzL2ZPdkljWVVsb3diQWJkM05IcDRPRmRUb01KTk1wN3NSYmFvOVlJUVQ0ZWFORWd4bVd0TjdtblNEQThuQ0FldnNnOVA3eWRkVDNUWUhYYTdub24zRm5CYjc5eXA0bUFmbmJid243QzVKSGE4Rm0wL2xmQjJDR0dxSW95SytrRDBTdnZ0b0FYNDU4aFEzSTNyNDJ0K3RqRzkwZU9DUGk5anNIdEh1aWhTWXY4WUhmMTdnQ2pXY3lodk9aL09UVE1abUovNEc2dkdkTnZSTDhCOWdveFF5a1YvVXdNNWxoSmhrR0pxWGFYcWZ1OXBvbTFKR0w1N09HbkRxR2d3YVhPTE0wR1BoYnBMSmZsM1lPRUVMSGVzbW8vZXBwaXNsU21SdCtqMmphMWlpWURQWkQ1L0pYUisrcVlCM2pPODJ5NXF5Z1dhZjhxQjRYZWVlRzk5c3FiQ0d6WkpOTmo5WHB5dUpMVjMyMDVFQmR0dzRXSWNRSzlIVjlJSzhBY1pZVE5oSmJRVmJrRk5mTHNqZUwyTFRDR0cvb1RQTTBWbzJVa25CK3UzNnJjRUorMUhJL2hCUWJUVXcvRHF4ZVJ6YkxEcG8yQ05maTc3YnByNjRCbm5rVUdQdFZOaW9aWGRsaWFYUGhrY2h2MVVXQzFQb3NCRmhML0FoOW4vMGwzSVZpNm40cEcrRjh4bVpOTW00VC9jc1RJR1JSTDBCL3Z1LzdJL0NIcjJKWEZydmdKWGdPNTFJMXBXc0tCVjJIaU1SRXhYSlNHMnlnSmhMYWkzM3lON2VoL2VPanVveEt6cTBocUh0bmxzUEQzU0pFVE5QdDFZczljVU5MREZTdjVOeTMxVFFlSmN0Zm82bitmYVBBTUtEM25OTm03eVpYd3doZ2xPbW9Say9xWGI1R2tnSlA1Z1o1NVRZRmZwek9ETVpCZW9hMDB3MDB1WU4raDJUb0ZCOC9DK08rZTZVWGs2QTM5ZnJ3WjJUb281ekpjdW51ZGZWQ3lzclpCVjhzYnVrd2ozR2ZKWUtoT1gvRk9BRFdocGJScm9wUy81MFdkWGE3RUZjV25iMm5uTVFpdlpJRmIyUWNYWjNIOFJON2tsdWR6QzR0QW5mam1BdEFOOVpUVDRDdVJSK1NsamhtakxMcVFyKzdvNU9pbUxSTDZreFlrQWJYekQ4anBzRG1oU3F2MGQ1M2VtODRXOXBheWYrQjdBWDBvVUZnMHVxb0M2SHhReTN6RE5WdWhubGt2NEZRbDMwcTFsYmdITjNPSTZTV1pCUlNnY2k2YkEvZDJmcUVMN1dHaGJmMFhZeFFCUXJIMjdoUWtTa1hrbkNHVXNhS1RTYWl3TFhWNVl4TENyaVNCNHdrSXdBYTluZVl5MkZpWXp4T3lZcmhqbk8yWEh4M1Rid2ZpUVUzdUIrdGZXV3JPWkxsWmFabGdrZkRaSGUvL1V4MHJiKzZxNU5DQ2F3Y0JZcEYyTnhmVlZiV21SUGxWck1MRlZHbE9XdFNYTUtyTUUzUVU1WHRSSER3Ri9FODlINUJHYXJLa0NzVEs5RFNxSkdheDgxVjIxTUxkVGwzdmpzVGlqak10SG95aW8rMHlGVGV2aHBFSHVScWJseFJ3bi9taC8xZ1lzRFBXN09UZENWT0dmang2aTRLclNRZ0czSjFtSy9qQStwYmtMbUc2WkJZWWltNUJLSHNENnhQTUdyUmJLd0JQNHRna0lNR3JZY2RIK3ZGbi9wSWVjV2pPVWtjeHJ0NUxucXhqU3kxN1pOR2NvdkkxQVNEa0dQWXdwYXV2UkFodmp0ejB6cGJzeDJvRUVVS2lRRVZkRDQrSlVUV1Q1SHVyZFF0NTIyV0VrT3JVRDFBRGcrYmM0cU5sZmxMRTlnZnFROEhxT09lK1hlZFR0UlZvN2F5REtLbittN2VSTUtIWXFSL21aaXhmekxVNjhMQ3BPT3VMaTY4ZzYvUVNzdElUdms2VFpTQUdCVldrMVFMN09QOUV3SVJucW55ZFlWMEhqS3VMMHcrWDB2Vllkc3FwaURLcmNPdWEwRkZXQ2RvalpIaWRabnZzNGducXRsZ09XSUY2d0pYN2xkc05SbUZ6SXErNXZjQi84U0hCTkp0RFQvNjA5bFhZYk5wRTFPVDlCMTFRbjdBUUxtNWNKZzJhTHZZUjlqZVllTDFseW54WkhWSmlOVG9hdWV1azBZT3dCVjhub3F4aGVld1I3dWIybzdTTWpyU01hR2ZZVVpiUG5LSko0eFREelF5ZkdYTnNPTFhkSGU4Q1ZaK281ekxETmxUL2IwdUl4b0t3aDl2VmRLR3huNHF4ZDlpdTRTRlBvSHdLZjlnOHVDK3NCOEFiT1Y3NnE2cWJ5OVdwYmNyMFJvaVZaQ094Y2pZZ082VlhvbTZrRkIrbW13YVAvY29xenhFRnM2VGh4a0pSR1F5bFVBWWJRRXZ4L253TWN5b3psZVdIR004aHV4blBaMEwxc3puNmpOblJ5WlpRYU11THZBck9GRGNJdVBaY1Nub2hycWw5K3p3cDZhakxJTWR4bkJDcU1Rc0JPbnhOZ2Z6dmFCZ3djZkwxNFJ2aUEzTVFqRXUzUXA4M0ZyM3ZDRHZqODRJRHYzYUxDaFgxTWUxZE8raGhsODNkeWVaZFNJMEZma24wSkttNkxtL3ozcG1ndU1vNFoyUVFYTjJRaGtyaGVFRG1mcWZ6Wm51OEk0bjlPQUlNSGc1UTNzaDRtaFdUM0xGT0hRN0c4UlhtT1VCeko0SFN6L1VwWlZTeVp6Rko0bWlpbDBadkQ4S0J6RHBBemN0R2kvZW93Nk9RNDJqTzhGTGtzNWlhTjkzTE94bHdsczY0MXN5WGdTS2RheXFDU3dVWlNSVEdISmVwbjg0dGpZYm1ZL3I5Q0o2QlR0aDBOMGVGS3VFOVN6Mlc1YjYzWkRaNEUrUnh5WWlWd09TUGxuSnlpajJVZ2wxYWt3MzZFZjk0LzFKaXFLd1dUUG15c2grVDU5ZUFyc1FGN2x1UVdqRnBPb1FXbHcvVWl6MEgrT2ZPZGRiWFBDM3FHN05wV1d5eUpUaTYvaVhwTlBheHNJQWxPMG9tckUyQWRvSEFvL1JCMDVXMlNkUHVYdHJUR3hOelNwaWQ0Q2NGRXhER1ZFL1ZkSFp1S1J4VU4zZWtaYzRYS1d1VkVNSGZSNExqSC9LY3R3TVV3UDgvVTZiMWloV3lmMWgweVBvdXgwSVBaRjBVUFdrWVlMc2wxSlU1cFdpa0d5NUlJekw2OHpBOWpZYlhNTDY3czJ6TG9FN3Z2U2U3UXdYRzB3TlVreVRBV0hqa2Urek44NlRQR1pkZ3haRm9VZ3BYaVNBeHdHRTZaTGFNQWVwb1hEVE9zNU53WjR2QWpRZWtRT2I1NGpxOXcrRXl3Ymd3a0VpaVBxM1Zmb1MwWkNnQXJmc3BCbWtpYTlxSkJzdlRzS0lWcndSakx3N0xLWVhmNEE4VXF5dHFCQlROL0dZelBGVnZ3clE4Zk1qSWZhRFo4ek00a1NsakFIL3FrVUgxak1vU3F1cjczd1ZoSSsrZlYreER2alg0cmFhNEhpMzd1bGxTT2dnZUhJMXFweUxCNENuMFd2OFpnT1NiUkxSRXM0L0E0V0FqN3F5M053cUdSZ05ocGRUOHVZbStKRVgwSmY1ejFpTkhaVVMySGZmeXRQMjQ4VGdKeDRML1Q4U1lKL3ZuR2FZNVRRRkN2TDhKWjdmMzhWeEFhcFR6dVQvaW8xQnM4N1ZZZ2pZU1FldDRZbFpZY1NKSHVaWFJKVlhQalJNYmtRSXJpZFN6N1pKQjFEWGR3VVN6Q1RRNG1SSForV0pMVkV1R1Q0NHZDdWtPUmJFRngxKytPdUpLOEQyek0xMG42Sk9FMlJmVGtFSkw3Q2djU3AxTmIzeXExUEdRL2U5WnFFem4ySko2bjFZLzVCQkZRQzBHbW04WWF1bnkzQlVsblNQcjFLbTVEN2ZnTW5vWUwvdzZjQ2VHUFNHUklxUVhmS2x3Y2JhbGJVT2lZRVhxb2JOQkpoZm9WNGkvNXRGWEcwZm5ycWdUMm5SQ0tGcFgxNi9rYUFpeXZBYVJaSVcveVZBaXJxdU1FLzFtc2phS2pkTFc3WjNqRHRROVZBZTJOSDkxVmtwSUllNUxaa2x6NE1qeUV2Mk1vWGJmSER1VTUwZUMwc0xVeVRhWVMvY2NDS01DSlJJckVOSEE2THpmeG1pVTNBbTVmZ1YzY0F5bGdtNEh2bHdseWw2dDBHMmVpak1OajVYOW1MdW9XRUFpQXQreE1UM2k5MXhvazJnS3RoQ2N6dUdTWDBhbnRXMkc1SVNtZEMvNGxkc1NpZ2U1NUxBNDBON2ZwWHFxQy83ZzFiRi9PMFhCMVN6b0NPV1I4RzE1NXhaQnBaWG5EZkJVelVmYzBpZVlTbFQ2NTJ1VkNDd0U3cmNMSUlEc21Ed1JzMW5uOFk3cTljbDdmemMvdEh3M1NHeGFSbk5HWFlZOGxEWFB4SHYxN05ydFc4bDZzTkJjK0lCOTFIYXVkY3hQTEkrNks3RW9YTDM5ZUhMbzk5akREbTEySjhGa0JrU3NjTzVrSUh5Ni92bHFqd0YzemFFUHo1T1NENDdKZTZCMVY3NnJ1QUdSeXMvVS9mVmxPNTRETUlRaWJzV1l0UEJxUnd4OVVaeWlZb0ZEdDNxaFg1YTJERkY4eUZPdnJRcEcwb004bWViUnBCWHFVMnVVS2lvT1B5akFGbjZWSUJqVmtnTHdpd21aMjBMNmxzWHR2aldHSzdvNDhNRTkyY3VheVloR25sa2QxS2gwWTVDKzhJUDFVc2FNaE0xNURuM0NQNDZ2cWZYaWFsSjNScXp2d3dXS1d5QzJvam9KL2ZiMHFRbDdsK3VuOW1vK3V2WmFrcjVBdi9WVzZQdUhucXNCYzZRSWtVYjJpUjZ3V1N4azBZTWhtWDBQejRmWTdsME0vQkRMdXdnWFE0NVJTTCtLMnFsaHNsc0tRNWFJdlBud2ZORTBPWHgvNXUwWUF6dzZOSE1TMER2YVBFbXJ6UmNEZTZMT09SQU9WMjFrLzBXQjZCNzJzZXlVaHFGOXBvWEo4bElycW5ibS9CQzR3SDNZUC9iazhyU1U4eTVIM1pRTGFCQVpaRlBJTjhORFYzNG9RNDQvb2FsaWJUNUdiSGEwT2pjWFBtSmNxcktyU1I0YjNUb3JjN3hlNjlndzc3d0grejQ0UEMvc2RlRTN4Mm1XdGYwOTJveDd2dnc2R2pyTnA1Tkp6TXdDbWIyZisyc3ZLTjdwYTVUNHlJaTlxWkY3Y1JWS1BXU0hvODdaMU9JRCs0NnFoODZuTmJBVWMwcEFFYnNPNmNFRTR2UDBrRkZWYXIxSmR5ZU9WRmZ6KzZmSFRGODlZNTVxdTJ6eldtZ2xFalp2RVpHUk5Bc3paR3dYZW9CM3Flb1NjNHhtM3Z1aFJYUElkVjI3akViSTh0dlVZRW1yUGpLOS9zbDJJaDZRZ2o3NXE2RjJ2UDlyZEg3ZzFNU3JCdDVYZWlXSURCUE94M2tUNlVlYTlDWEs1MFFPYm5lMnNDMitoNVF0cEwxWGhaS25IVFJjaWRjNVRMZEU0N0NOdk9kK3c2OTZxcThnYmxrNUVjeXgxRU5yOWVadTQ0VTh4SDBBSDNLckJPb20vMlBpRW9xLzBQRXlzVzNoRHhsZVNTaDM5aGJUWDNIRkljSnFNSnU3cHNZWWkzMzBEZXFvYXZvaVRvOXdvOGJKR25obDR2amdaMkIvWU0zcjdYZzdiZVY1emJpb2x3ZWxLb3BXcEliVXlmMmx1UElxNDhKOGJSei9EYy9YY2xYZ2MxcGJFRjA4S1Q4d0tUSzc1cGNsbTZEWHZ4UHBJcld5VEh1RU4zaUdCSWRsMWtPcVMwbzJ2WFhBaHVYK1RFSk1CT09YUFE0RTZxVlFaNnl1cXRVZVRRZW1PdmUxeFAzQVFKeTJQL2NsL1EzZ2hpR0ZNaDJwdGsrZnJLSU56TG96SVpISC9YVXFVYmZaTkRWd1psZEx4Y21zOERzWUxDa1Q1YlRJUWw4dlZzUFpKUmpHdU1jQ2ZFV1JoWWM3dks5Syt1MWZYVGd4REZwbWhBWDBoaU1hSU0yZzlNYm90bUhxK0IwRzdjOFFieW1TZzA3SjlEYXpydTJFZGFsZmpGZTh6UG15K0FtcUFCVEc1TEhZZWthV0krdHBCWVl4ZWJWUGgwU3luZU55ODB2TWZVSHNtbjd2ZEdmQVVvOGN5MVpkcnJ3OFZCaThYS1F5a1R6aUVmTjMxRUl1MUkwcWFoN0ZKL0NhRUVPMWc2WkVGMmNPM281MFp6TjdaNDM5OEUybHM2RlQ3bjdwRkQvK2RwYlZvcm5lNmJrdTY5SkIyb2ErbDNXNDVvOWJUSDU4U1BValdqcXc5bmhlWE5paVRCVFdEaFpNMFdjYWhUc2llMERiWmhyOUE2eXZlUTFLeUY4MUdVektFK2VKUGdhdkovdU5tdlhwUXFxcWpwYXdqR2wzaU81V04yUytHR1Ricm81Zk9mT042NHA4K09DZ09mUmRNRWltYWVFVHZ4Q3NkeDkyNTVNSVcvUjdZcjlESWFlODdxeFhac3Z1N0VCc3lQWUdYaGQxbk81TXJxVk84NjE2cDlTbk5POFlGcS96UGJhYXA3bmZuSXNVZGUwWE85dGJ6cTFpUHhncXRoRm44WWxOQU4xbmRXYXl6enlCeHhPU3BlYWFYVE9JNUZlakFnU1lHaXNPUTVxYjFtVXg2RmdHWU81Z3R6QXloQkNMZ0VOaGczZm55MEpScTZoSWw2djFvQzJuUFNGR1Yvb3lmbXFQU3ZLOC9RQjJNeUFaMmhjdmc2aVZHZUoxWjMvVnFtNWpFdno0M3pnR3ZUQmFRc1dhQmdRNjBMNVBRUUJvSHFjZTdBdTJISEhtU3BDTWtDWHNIM2h1UHBnaWdpVlV0Ulhub3ZiUks2VDJRaWx6R0toelNFUlh0dXorMlJoUFFoZ1M5VS8yWTc5NlJiUkZKcGhvMUZ1VGdBMTFqYy9NYVlVc3hZa2Z0RllpTW5Yb3hMcC9rZmxObE9RVW04ZUVyK1BpUjZQUWJoV084QnEvQUtYdEE3VCtHNmpqZ1lTUm1mbEJhVU8xUHBwYlZJZXdVZTR5cUpUUlZjUXFaZVVFUnVwcmgranBvVmg2TkdNWnMzRVFqNWZLTTNmUkpSYU5QeDk5OTdpbEozN0F2M2FEdE45amdYejYvZ3kxcStLM1NFa3FxTlE4SldmeER0VG9vdWRXRDV5elNKRVI1L1FRbS9HOTZ1VDA1cFZ3ZVlUaWJpL0M1aUlucFc4T21WZlZCRlV3OWpUR2FmSVZ0SldEakdUZEZrL0JIdHQxbEdUN3lPeUY4Sk5tckRZdktCMGtGNlRVRXdqSE11TXE4a2FOU1E2Wi9rWndtVCtyUXlBTUpBeE1UZ2dJbE0xNENQUVlCbkVoa3M4TzdWbEpSZGZtakdqS01lOE1HRXlDaHZCYVlwcUlhWjZBU0tUMFlyUGNReFgyS1ZoNTRrWHpIcFg4NXFlRXhSeXROV1hiZmh6MWovMXVGVzV1WEowOElEdnhyZ3E0cnl6a2k0WUx3Q0xVMVloVVl0bTBMRlNuWHNEYmdKWm1wazZpSENjRWVuVksrM3JmWnFQYTQxeVZRdTJuRWlLTWhBdll4Z2VhczhsVTJHV25NL2tRSGx5OGFPWmRBenN4VEVwVVl3ZHRHUDd5YWlDYXZOcld3a2lMQTNyd1lBR2Z5eFJ2ZitKNzJ6d1dROTkzT2tUbTdKeW5NTE8zS3ZDbEcxOTZvN0R3RzNuQTNmMWhxTVZzQ3JvWTdSNGdyQVVmbCthSlNLcVN1cXdqcGNSNkVFdUF1d1lHS2w3UGZ3LzJGanlyZUVGeXE0MDV0T3ZlSEtsbksrc2ROY0tObHFOMm5GTXdQTklvMDB6V2ZFU2kyam5RQzdGSFVEVEtBa1pFOTZKL1NCTVFhTFc2WEFDMlY1WXRqSjFxSFFhV2NBOXphcXBLa29VVldreks2L0F0eWRJRE5hRGZlNmVPa3VNY1lKTC9OM2R6UHF1bDN3QXFIY3FCNC9XajZiYnpIL2p3ZDRuL1ZrbmJCY3FIZkVVcHdSVGJ1ZjNudWhGRVFybkt5OHFZbUxkckViN1JnWlo0d1l1Rm1MdllrRVVFUG9wSHk5WmpiUnJJU0JYOWtzdTBTeHI1Zm9UaEJYODVPaTVmVjlLSWpvSTFqVERnOXZrNHBodXFUUGpvY0JBcUZOaXdLNTZ1K2tudDZmQjdzZXZVc2d1V0lQajdaSjh2WnZNajVZbGlPZUV5SVVDSWw1QjdoZjJrUzRzU1A3dGNaS0NPU0VCaHpvTElOK3ZaZ1pCQ3ozcGJWVnJjM1VjSkUySEFScHlvelpOS1hseHJnbnU4VjJWYWNodTZWYU5pUnd2MWdXdjRIT1BCYTZDcUFMUks2RHRiQVI5UlZVazRZb0dOckx2Q2JKeGJqMHp2bDR4cXE0ZUJFaDlzRUlJUHVyVlFXZHJjcW45Qm8rYmk0MzMyUkpFWmhqRmxZSXM4NGxlblo1eWlHWU9Mejd6VU1RWkFpak5tb040WUp2MTRXZ2hxTXRuVmgvaGZnT3FGM3lVUkhRdDZyY3VrbHpFR2NwUFNWamdpM29ha1o0MnFyc2Q4MlZXTmJoVDk0OWdlZnExK1J1MWJkUmtXeDBaTDZSUWVDYTRKUmJQNUtSTVVSSGMxdXhFQnFnaS9GSGxUbXlnaXY5Mnk4ejEyTlVyanR4VUtGeTlGL0VIOXhUWmZPZVVtZmdWT3NmU1R1WGpmT3Fkb1EwSkJZd0F4MElJUGRSMS8xU0NzWk95bWFjcTNGOHJLY2R3SXZnSFJ1aE80cGxuc0Zud0pqTzU4eDJ2VldrQzJ4YlBYTUQxRmZyalBtSTdYVk5uL0c4dUdhcWVjT0ZKTkhhaDJaLzZiTW42M2NheTBsejhiYWFjUU9md3Fjb1V1YVpWeFBHM21XZkNMMmFvWk54ckJmSDU4TkllaGxiUk9lcUJJdTJEV0hPU3ZoUUxXVnhDL0VTNmpVdXlIL3dWcTY0ckNJaXF2OU13VldpUVVnOCs1V2ZYTHEvaHRkSlJwalFZRm9DaklhR1FCTDZkQU9jNTg0bVp6ZHA2d0h1ZG1EZFFSSzdnYU1iWTU4UWxaQlhzejRwWDZFakFvU2g0UkpCbjEvbk9SUGQ2ODdUNExGdzZyaXhqYjBGVXUvZXZ6N0hoaFlGNE9uOHRZWmZvUUVoTTIvQXJJL3U0TEk5UWE1b1pwMk1NUkkwYXZTY20va0V1Vmxzcm9adlI1VjFIaEozVVg0cXNLMmRXdUNtT0dlUEVsNFRpZjY2dlBRUUhyNXRvVHNTVjV5QkprV0RwZXEzRlIrK1NBc3RxYjA0RUU4dy9FNGNjOWV4YjVlUWVQUzJGeVdSZ242anJ6ZFo2d2FEMS9lNG92NVRUbmlDTUN4RUM0cXlwUmRIeG9wWnRvM0FOam1UbnBtTTZwQzJpeEZ1MWtmUjBTYW1qU25FaHhyUDlLS0hXeWdETDVCK0lyREt0dzBsc0N1anU1cEdLaGxaMnQybEZZcmdCZkVmcmZoZE0vMFlMVlhWamk3SThDL3U5czdBbnY1N0hSYy95ZWJNMldhYm16MG1TdWFWK2Y3ZW50M2hhNHc0a3RpWDFWZGpCejJLem9CZDA5VXBEbkNYVGJnSEE0VmFHSHpRalVYcEYxR050SVZINndxckFSa290SXcyY2IrdUNqdHA1cHNRb2VraDFkYS9mbWt3RDdLd2VyOS9wNmRRRE9vaU83V3g1d2cvc2Rva1BxZDBncEcxSlV2VVV5KzF4Vlc1NHFmVkVNZ1U1QXI1ci9iNWNzMUpPdkJPTENMaVRiZDExYXFnS0dCYUFWVE5QUVd5bzJhTUtNS0doVFIzQm05T1VjQ0FxNFZSOVZheGRCM1MyZEZCY1MyMUZubis4OUkzZjBXbytkVCtrRnFmdHBpc0RXRGxKL09TbHE3UEVuNUI0ZTBHSVlhT1JFcVZ3QmZ5SUJKMCtmMUNhOGkwVENLR0lTY2NrbWlXTWlVNXNuYndnUGRhQjhyanI0ck4xa3RydVhsWmpQMEpYdlRUcXlodFYwcnhBM2RQdFhENTRMbllGeXkzVG5reFZHTTRDN0NIZlQ4SENQMEpFWmVFaGpzSGZNbFdnVmg0TU5XQkd0SjhGNk0vUG9kQzBTT1ZnYkxpd25qNVg2dkNtUFhiVDFEeVorVTBtY1c4dkRDK3ZuYzhiRlQwOG1CVDJOWkl1cGxzZkVoYjc2SzVVMWp0cVF4MXFWTE55QXRFa2ZpbHBQMHRmQ0hKenRGbmF5ZFZQWVNjNCtVV25GaEY5UkE4VmNGNEJyRHJ0Vk14Qk4ybkRxZ1I5UG04RjJnWHM1ejNjMDF3blJaam9GUmo3TWlXQUlSeUN0L0tOaHJmcldPR1Vwd3JCeFJGMFI5Zll4Q2Y5bThzdktvbGVvUXhITU0vaTlGR0pQRFFHQUlQMGJ6anV3K2RnK1k2aXpjbHRIUlQ3Tm0yWkdlOVU1ZlZTOXBMNnFiUDkvRHdGbUFGaHo3MncwejlZcWMreitiM25OejhFV21KaEZyejRQb1ZSekhxakFRMkczRk9Jem13ZnQzYUFuOWptVnJmRmZKOFZIMlk4dXMzeFhxdlhsVzBZZm1oMnlCd0srcEUzdlp1cWhtT09qZXM3Z290Y2t3ek1UZVYrZnZPMVV5YlhUTlF3K1h2RENNVzg4L0xTWlNsZmNCeWIvT2xGbitXbW96UnZEd3VyVlJOcU9DZzRTWk9nZTdnNTRsM3NpUkx5Wkl6bVVTNjBlbTFiOHBYOTAyV21zQjBUTlgxY3MwOFMxWDZWWkladGFwRy9IdDlGUEdWdC9COFFETjVTSTlaSjY1YmtMbk9KSmFyamIyeXc3YklrOWo5V2VTZExGOWcxTGpwMHlxamtpdEJZc0wxL202Y2tIbzZiekI4UWRUVGQ3OXhHNVRuMU93MzRNQlJQVEJMRVd2b2hhSmFnUlFYMjJ2NjVEc2tHZ0J2SVVOQ3FzNWthOXpvaEVua2ZZS3RoMzJ6SXFicWlUbVg1bXE2bForeUVNNE80M2c0WjNiTWN4NThudG5iNW9lQUkvUkIyWjZZaTJYTmN3eFJDejIyNDNGMDhKVDhmRVNnNGkrQnJTY3VEZEFjUkdpNGVIRE9OV2FaT1huZjZrdk5hK2U1eTQxUWVpakY0VFp5L1B5VjhCNXVNeDlvM09uRURKbWlhb1AzbG0xNkszU3lYM1Q4ODYyUXZSdmtFRkFIbnpHNFh5OGNnalZ2d1RhR04zamtLaHJVZGNsemRTZkZUZ2E0MHlMSzdwb0JRcVZlQUVEdEtZNFZIWG1qbXNtekQzLzFQc1FPS3ZScUNIR1U4SGVuTmdJOVdpUlFpbTF0RktoQllUUEFZL3NYdGU0eEs4N2hmNDFDREltTGtqbmZBbDRiTTh5SVJpc015MVNpZDdlVnZnYmNtOWJ1SnJWZE1IU3pLc2tFTjl1S2xEYU9SVWdwNDB2em1QRnhRZllIVUpnRUVnNzMyd1VTbzdmWDR5c3dRY3RXYWhUTkR2Zm9INkRIcmpjdDhmMWhuSmJzRVBsZXBZVTRNOGJpVlZuV3NwS2tETzJvUlFFejU0L2pXcktiRlF4eEFXdUVMNUZIMXQ1TTBWTSswSFZ2RVVnZ3JQN2M4bHNLdVdWbnBzVXJFY0NUSzNkajZKamRCUDg5WHdxakNhbGdvaERVSFA3ZjgyUGtyRHQ2Qk5mcFFENHNHT3pWN3V1RTFMTEJGTCtIWVd4U3dQNkg2L1ZuZEJpbVhyaU9nN2pFOEpINnRhWXRWZ3NjcEc0NHpWdUhsSk9acjBVVGl3a1E4SDVzZ0JweTlobmxvYVRUWU9RQUxZU3IyU2ozVElJZGJMWUZLa0NsNFg1c0MrRW85VS9vVVJkSWp4TzY1Q1VXRmdEMTQ0S3hxSnBZTHNKekxLMnZidnVuL0ttTEorZEJ3UDZzZWp6R05wdWcxSEprK0FQTHk5WVA5SEwzOVRJQ0dDNUJBS1ZUVUhHcDUySkpXNDFRcHBKMjRTOFdBOTc2S0RXWEM3TC9rS3oxUHduenhJMUt4ZGlkVi9EZ0lRT01Ld2pLVDA5U25vcERDN0ZuWEFuNW9DMm5oTjhYZlVvNzEveFY4eDZMSW4rbTFiQnNDK09BRWhVQTJ2b0svOXdjUTRBK3Y5SjFaaGU1OXZmaDRsdEttaEFTZklnN0YxZDRHZzByOTN1RkR3K0xWUGMzTkFwL0lpZFZ6RzFYTzlZaUtubW5QQTJBVHl1UVkvZ3JYQjEyZTRMUVpUZHI3eUYzN3EvZUJrWjBSVEYzeTdCUHdrQ2U4bFBMUVNjM01ydFpmTjIrMzBDOXR0REtmdTczK2FFTUVXUUh3blFPUW1QTUNXazdBRmpmTUVYV0Q0Q0U1WVVqVFZQSmlWV2pWakkzcC9wTWkvTG9YWDJyYVAzNjVqdTV6YjlDV3BROUFTVU5Ob0JuL3A5dGdhc3VBMFc3V3Z6WE5VTmZaRmdrajdjS2Nta3BISndxWGEyeTFsdWxNSjIwV2hENmJyRXdPVVhCZW5YRHAzNy9oLzRJRnpHYzJuL0d6d2V4K3hmZUQrRTc0SmNUd0ZGaTUza2pvd3l3eFFuZHNkN3d6K21EOStVb05rM3ZhUStycm16Z2VicjdMdlovdUdCb0d3dDZ1OGdNUStqMm1KaW81SlUzVVM0bU9OTzJKbThyZThSdm50aTYvTzJQOFlQV3lCT01QdENEWTAzdC9NSGNqUHZkakRjSlBzcGNLbkhRZjZZdkRPWEJsRnJXckRVcWJtcHFTcnVRNTM4dEkxQmhzaHdNNWNaK3RuZDh6b2E0bXM2OUVyL2hpMS8xNXdHbWxrZ2pMRTQ4OUthYkY3MkhUemZQVU5SdzBNeHZFbjFoMkE3OWNNeEMzUDZwamxhVm9wc2JTYXpYWnovMUhJcEc2ZDF2SFR6UzVNYXJEbWZhYm5lMHAzWGQ3Rm1WSSthNnJFUkV5YzQ4cDNwU2V3YU9NSWdPaDE0UVRxWUFSb3VtN3c5Tm9XL0RhVDlaMWdsbzY2V1NSV2REYkhCaDUwTTdpcUdCMm9NbHJOMytkbzFhM2J4dzRhYzJFOEgzY0RuTWpGWjdRVVhVOXU2RWM0RCs5a01YSU9wRjJjYytoOFM1TkFReXJZTkFLbXRxV0E2My9oeUM2cFdoSk16NWV6YldML1dKUnJ3QUQ1RTF6VU1LQ1FEbjZVdXRjTGRCVERUbk1MUktMdE93NUxUN2lDUHNoNWl5dWF1Zzl3d1hSRGRtWW9aZVZ4K0owNTEyYkpLWUMrMmg2R3Mxa0hJOGxiOCt6aUorbGNuem8rOEhOcWg5NnkxMklNQkkzNEpYbTFTVlFLL1hlQktjcTZHeW1wQUhhY0lsOExjNnEydUdtSG9WZ09NTlJWdUFDalhhaTE2RmprRGU0QlBmOWhMSUJleFBLamduVC9HNDVnY0hRVkRVZFQ1UzNRNnBXNkd3NHFpaWNSSHNTdWVuQjc0cE9vVDJBVXRKZFpsRWloYnJ3ajd4QWtKRkFDemdxb1JyRnhlMkNRVlkzVmZCRzlzdDV4UDltV2FOVE42MCtKV0V5d0NDbzhrWUZyTXUyQzY0azI3VDdVME1ReDJTdWZ4MEtXOHowVi8yT1VwMHllNzNBMUlYZHJ2dFBVbWlBWXNoeFhaaFZyQkJIR0dlTjZLMUZMWlk0QnNLSnUxTkVXaDJtOFBMUFcrVER2eGVHSVdBUFovaDZzUStYTlAyNjFIT3FUTFc2Q1ZwMUcxSnZGZkJ5NlErQ0JnSGw4SzFRRXRReEVUejQwT01HeWZHR1BVM0oyNVYxb2h6bjNyMHBCZkFiYURHRGF0c2RGc0NzSGZCd2VSaDlpMk55T2s2N21NV0xrUWhmVSsxOXdhdXNHMVBkTThvODRjTzl6Q0tMV0s1SVUvYWpIdHdJUTVlZHFTQy9JSUtxWHlHRDlFRkJ3N1RGTi9FZDJDRGNmUHFyNE9BbWNBZklYYUE2VkpsS3B1cXlvT2F3TjNweUN1N0sveEIvWTJqZkdRZ0RoSUg5bkhrR3R2dDJuUXV1QVJYV1Q2OXB2SkNzc2FreHRsZ253R3o3bDRzL01waS9zamRaa29nRTFIUEJYTlM4TE1MUlh2R0lOM3M1WFUzWjNDMDJIbmwySHgzbzFubi82ZFQ3WU1qMlYxVVlSSUZNajlFUTZ3RTNaejViYlY4ZjNYSGJ6M2RwRHdLaTVlaXNyU1FoTHFHMGl0MkoxcytrU0dtNGFvQ2M1WURLQ0YvUHJlMThQN3JaTDNqSlo0dDdnMVE0ZjdhdTR0V3J5OTlIdnIyN0twSkFEeWJjMHBsb0cwQzBJZjhPRTV1OW9vSWJ1T1JkMUlVbGh0QmltcVNUbXBZTVM2UjR0dDRQYmo4S0V1L1lEOG1rNUtlMWdjNnBURjNRQ1ZRSUswVFZZeG1EVUVGamxsL0lodDNIRTJlUzQ1WE9rQlUyRU5USkd5UytVRUwwWlhzTlhGSDlyaklKWmYvNmc2cTF3L1ppdS9sOTRqZEdUaXgvV1FFVGxvVTFlM0E1TlRnYmFqbkkrOXJXMWRLOHVzTmVzaWVSdjArTHZINWlQU0tyNFc4RmxFd3ovZjRRVDRJaWhlOFlGVjZQRDcyRGt5ZnR1cjBxWjhVOVE0L2tmUHR1SnBRNWRjTjNlOStZVDN6RmM1bFdqYXBMMW1uTVJ2SWZ0anptYzFGZ3piWEtndmRqeXhyaWdaVG52MVM5L1drVCtaL1JwdDJWMURxTXlxTEx4a3czY0pMK3JGbjdwc0Z1bzhIczIzTjRTQjZlL1l0MVIrTHlsN3RsRFJ0Qzh1K1hTSUI1b0VHQzFLSHFGc1JZVHVpUnlEd21tZWNsakwzOFhaUE5ZUlprMi9jdE9LRzAyOWRSQlVEc0tXRjN0NzZ5SzVxY2JlamlSTVVPUlo2dGlmOXFZSWxxK3MzWGdTdGY1SHJyVTBTY05QMXM1U2FFMWhHcjc2K1RZSXZXSkVRMjBDZzY1VGVuKzJGZmdiOXRudGJYOU5PZUVROVcwSFdLbVFNMWM5VW45Z1JJc2hPOGxHNE5tcmVVbkVkWlYxNWxCTFRHSlRFd3RQYmliUXVuOVQ5ME9ZMDVwb0FxVnV2SFg4WmEvUWVmS2JqaW9WOU5DRGk5c29CT0pNVGUvZjZIZjM1SXpIVXJ5em01cHI5MXNReDEzamUyYS9wV1M4SFNxemZpeG5jOTN5RVU1dC9OTDhETWVGb01nQTByamE2clZjL1ZWWDgvbjl5S2VDdzFzNTBiZlNqYXJLNVZXcGNleXlYYkpDZzZIK3VrbHBPdHY3QVVob2g1YVNBWE1mRVRZZHY1clAzcXNJc2REc0NNMFJkOGpPSnlJcHJOZGpWdXpSeDFxS1g4VDZtS0VXTGRKQjBxRGJnRklYY2JhaEljdElKZ29tc05HYVlOU0UvSCtSbTFpNkIzdUt4NldyK00yVERjelZvZis4b0dKdmVqT244SlYvUXFsMjBTYjYyUnhuYUJhTGErQ1REK29HSFFBZDNxbFpHbEIrTmRRejZlZEFEaXcyd2hjNTJjYzFwWWpkaUxNZkxFZkNOS3J5N2srUU5DQndSbmxyWkppdkUrSmVvS2FoVWJZY2toWTlINjMzWkM5bjA5Q3NXUEcwOHUyMzhXY2xHM2lhM0NNUnNTZm1lTE4rd3hONFA4MHJ3Yk03cmVPM0Zha1o1NGtMQm54V09vY2pFTnJsWG43cmNjSjBYTlhUcWZiOXVWTGtLY2crbUROZzVmeXZPZk9QcjcvSm0xSSt3REsxd2ZqYmtyOWl3MzZtdGxJbTU5NFFCYlAzRHBoRkNDOHhqelA1RVFuL00xRnNyVUUzN0VsU0NTVnhSbWpIRGo3L2kxaE5TczJmbWlndWJaSmJpV0FoVEd1OE9QV1czTDJjdlIzWGFHNmRDZTdtMXhCMDZnWTJTQkY2ZTVwOFdyNVMzMXpieWNObElrYTloZWxNaWczUTF5V2p1Yit3VTFrY25UTzFhU0lNMUdXVjNIQjJCbDNRWEtqUXhDQUVBUlpvL1BvQWh4dWV5ZnJLd3hWQ0dZdUQ5MFJ6U3VScEE2TGJxUEl3ZHJESnpiRkUxd3p6enV2UEQrUjRlc2ZZSjMyRnJ2SlpOK25DcHhyM2NKRFlSbUYzeTRuR2p2YXVUSVZlQWxvWmwrcTVNUHlEbjRib0kvVllIUnpJbzhDNlI3Q0FQV3U1Smt6cXNEb0EvQlloWSsrbHJja1YzL1FNbURYd2FxZ0lJT3hVbVJLYUlHR0M5QVU2UHFCMG1RS293N3VjVTNkRUlzZTF3UDBqOFM0bmJGTk5vbFhUWjZtaVBuY1p3ZlQyRURRK1NrMy9DNGRaTlVzYjFFWm9oU25sOFRpdzdoOXQ0YUZrUjVySGsydDJnUEVvUnlKeEhUR01TamxDTGhUNys3S2RERFluemQyQldaeDFBVkYyUmJwY2Fqc2NlUEFVOGx1TUdFNEN0NUJ6NURma0xmWlZBZ0I1VmZVZHF2QVlNamNsL2NXMzJMSjZlcE5oWHFaQmhsZlFBdmZFWTlDWEtzYXNqanhwaVNDY0tFclJ0Q3ZVdERvRFd4WlYvS1UwVDdwbW51S3MxWWhWb2NTZXRRZHNERHRHRFhMNnZxSGIzOEovMWJOdWt5WnVtQWtWbHcycFFGc3Z4R2lKdEpZTzdzL0lqbjRhNXVscGFMblcxdVR6SXk4enllNVZiSThUMTlvbEZnN2Y4M2Q0cHNMQjRwYlBxU2ZCejdGUmQzb1hpUjU4U2VoSDI0T2E5N3phaVZ3eldYc0ovSmVvVlZJcHpDWmE3T3lxN1E3TmhxTU1nUFp3VVM0bmdZNSt3RUUyMG9ZWmR4aER5YWJQK1dpWExhQTQ5QzNXbDI2aG5za3BoY2ZJTWR1bGZnQ2JIbW5KdTN2Z2c0b09nVmd1cXVtcGdzTFdyVGlEcU5JUlpsV0ZGek1QVlNQOVVIYytGdzB4TXZRLzFGY0ZmWWJnOXcyTldqSzJoM1BVb0VwZ2dKR1kvZloxaGYvTW9kR3krN1Uzb09ZT0JHSkxXemw2K2NrTzEyeW16czF4cCtqUE9SYjhDRVNZdUd2bW96K010WVZOTkhZM1hjd2kyZndkSVNYaGFyVjZCOXJjQ1d4bmRDeEJQSmZXRDhDY21wYlBCaVlQZk1nYlJZL0ZIUUE5Vk5uS1ZKNlVBVms1TnhlZ3NpVEJENUpPaGdKN2QrYzBaRDNGUXZlN1FWWjhvWThMNkpRczR4N3RtK3V4M0RzYjI2Q0xrWEtocWF0bUh2bG9zSkpMVlRRSnhVYnFZVk93dVhGSGx1b0NmTzRocGF3LzFzQmlTTHUvY2EzZjJzMWlMNDBFMXFBSmZOSTRGWFpCZ0JDOFNvdklaUCtNeXdWTVJQT2dLNk5TS3B5RjhxTFRvc1FnUmt0c0lxS2tjY2tDRkhaUndKMkhENDJjdnpQSjQwZHIwR1FtRjhBZmVweWFjdDIybnBYN0g4OExXMVgrZHpFYUJqUUhubzRocjRpOW1vMmpUUjRERVZVSjFtT2ZUL3NQSitXYjE1eFJQTE9zeGlVSVNsaS95Yjg5OUJpdVU1VlhRbmZNZmJBWmZSbEpwNnI4Y2pQVG1aWDBLRTVMdEUyMnFZeURvMk5Rem0wNDdoMitpMUJPUFBVWmg1cWFVMnJWV2xEekFUanBCV2NnRFk5bnFEWTgvdlhnOG9pSzVzZW55UTJCYk5GR1J3eitMR1ExZjdKMFFpMFlrRTFLU1VnTmN1MC9lM0ZFR29OR1lmYTlvTk1XYnJVMVFiZEl4K3lXcStIVWZ5Nnpzd1UzUitZQjFUUGdxZ2tXbjFPZU9RaWJHRmJmTUtWMEFrRnE1SnFrVnlwUHVJMjdUdnlVOUtkTjc1c2V5ZUVBdU5GV0I2c1Z4VHhDRm9CaVlyZ3pUckgrVW1sdCtLbi9DeHFCUHphZHR4QXA0NURVU1NWajhDWjV5amN3dVRidEFhd3RLSzVVRy84Y2lIb3A4K01ITWRVaURrajNIQVZPNWxYQXN5TEpQMTRnNTVSNndIRUJwZ3I0ZGZ1eHU3VEE0blE3QkFhenZ6MEVoSkIxUkhSMHEzalJnZktQWkQ2T2YwaTFZWVZFQUc1K2VKZTFpVDUwemo5VFpzYUFDNXVvWWs0UHJvc0ZrcFFUbmJJLzJ6OVkyVERlc1VKMEVXbDR5UXlseU80RWJVWE9yK0xrZ01Vc1NpWjkrV1hCVGpnVk8wT0c1MnczcEdWU01qejY5WkNGRFlXNHZQOGpyRVplVHRvYlVBUithMGxURFhoMERETlZCdGFYbWVnenRBUWRRSVJhOVpkUVlxS3BXVXZqRkNqYzFybUlQNVBqckhrMTlHSjYvZTk1RXNGRk82aVhCMytET1ZaeVZSQm44NkhIWVlmUWNaUTc4NTVkL0ZSVWU2TU83R3F0T0pxUnQxS21NODByQ0dwdnFtYmNJcWt3QWlJYUVKT0h5NUU0dTVoT2JFN1FMUUpuYUtCVnVtbENhcld5UHlSbXRIVW05VWM5bzhaVWJ2eG9CaEJpRmF6OXhkT2tidFJrT3dGZFg0UndRTEJVWUhod05lQ05ycXNWbFo4WUI0YytQWFlJVUk2VldrL0dDYWpyUlduNFM1T0ZaYUZlQkxaVUpObzUvQm8zQUxkdi95MEFPRzhUdys5dGVrdjB1WjdGbE1zeVRkTjI5Y3hkRWNPd3dUelA0UzM3TjRnWEFnSWpINWpMcDZBN29PV3JubXVXV1VHeDBlVFJ2UzNnUlJDTytrOGZ1Z0U5dG5TMC9sYWlNNUNOMVY2T2NZdUh3NEV3TE9UUHlSbHBjZ2ZBcmVWYjR6YXMyN3lEa1VaN3NHZGYxL2ZJR0lDeG9BQTh2TGR0WUZBLzNwR29yOEJhMXZPNlNGbXBkbWIrRjVpTGU1UkMrY3pDTVM2bmdIV1R4bmNJT2dBNVA0L3JzVHJaZXg5eFoyVnJuSlFibTlwWFR0U0REdDVFamhoSnJoTGRrajBDTktpc2RQU090RnFJK3JleUNNK2ZrSlJkVHlFSXJsOUtZR0F2Nm5VRlVNTGtwY0FYK1h6TTd1WEdvL1lXYmYweUsyczVmVzZiL1JuRG91NFRPRHZOOHA2d095N3MzSlRCSmtFYWd2VHNLZlFndnZCVEkyYkNtV1d6d2M1RlNtT1VkTkx0OU9MUEhhb0ExZ3JhQ2dpUzVuSkZ2OWE5OVRzcmdjWVpFblhBVDBuRGJMajZxOTRuVldtS3pLSVVQY2czUGNJejR2WXJKQmFVOHcrdm03TE9BLzIvUGRHdCs0andxWmVwa1JmaGJPNlhwaXRMZ3NRWUlhNGYrT0lveWh3R1ZVd2l2Y3J0NGt6d3RPaTlYZ0RObkwzckR0ZDUwTWRvaElIaEpBWFpaUGUzc0NEMmltcFZMcmVpdXhYS3I1b2lZT1ErYWxUNkRuRnNOeGJtREF2b05wNi93RWlpZEJTTVozaUZCODdnaHh0LzArU1V6TWFmMDFGWFlGU2xVYkZPbWtvdjExSktQcHRCR1JQU09ublRpUWRieVY3YUZ1Z1dpcW9VSE80bFI5QjdJRW1oL3NvQ3E3dmpHYTJEdENZQklQNlh6YmppUUJKOEVmK0x0cTlWUDkrRDlpYzVtQSs5VjcvSTZrVFVaNndEZ3R3N2wxRW5jekIwc3Y5TlpSbEJGbEtRd3R0TVhmMkJmOTlveHphVjYzYVhvYTJibDYwbGtSU2loOVBkUEd2MUdLcXB5ckhrYWhkamt0b3NBVnd6dGxwcXU3WTRsOVh3OEdvTElpT3pvaVVYdlpJS01nZmNrajBmeE1pS0JFL2gydzErSm1GR0lKWkUzZlBZbXVCdVF3TzVDakZtaHhKbFRKZFBFY2srYURBODNjWEd4YXZYa3NoZ3FobWZsQjBjL3pudGRROVlMU3h3WkhsSmhQVzhNZ1hZNzFTUmNRV2tTK1ZZSEY1UG5TcGswa3FxWUt3UnVJU0xLdGJjNGFtMmVqa0ZncXJkSEJ3ZSs2N3drREZjQmxBbmg5aXFBZHJJZHJIRFljRnViNWkvaElqSXNvVGc2VnFTSU5oYUxpb24rcEZPZFYwTWVJT3ZremdyZHc2YXlFSFdQYkRtdXZxWG4zdzJGYW1nYWVDZjkrcnY4YkVLNG9qUkV4eE8vT2FubTlZZkVWQnBZZTV6TXA2d084d2hSYjltM3J6MGRoSWJrK21saEhGc1kvUnJwNDBYdGtZNVZvN1FJWnNZSGJWZXBFL0tvcGtOMFYrazVSMmJnWFM2RTdkME5ZM0NEUlEzeW9QSUVwY1pPLzMvMlFybUlZek5RcHI2L3NZSWNlRElEOGVWc1ZGZHRGakdMdWdMRGxOR2VlUVdQSTQ3bEZiN3NuVnZNWDQyN05ESGZHb0FhbnVjbUhFSWVxenQzcjdFR2Y0UDBYT09DWEN1cGFONjZ0bHJuSE9oMmRkaDhTM1lscFdURkI2ME44bFBXZTFaK2UwUnl3OHV1bE5VMDl1OUp2R2t3SzJldnZBdlpweXA3OEp0djVHMUpPdUtnWmJsV0VQT3VJL1NSWEt6QlZjUDB1OFBvOFFORHVjQ25TUGt2eWlvV2xGQUZiSmNoWnZBTVphQko2aFMxMnE3NWxSbXY4MW82MENoNlJVZFZjQTlwREIyTlEyNVJnVXowMStiaEZMdnNSN01sYVdSbnVLSVYvbzZaUXZHb2N1UFhaMkV3VXJ5SUxpc1FtQWFydWFCOS9XVkY5T21OaGhPTU90dzdmZlk5Sng5YmxpUnh1KzkrNmMyWFJiSVpQTzZ3V1dTUGVEUld5TzgvK0ozZHY4UmQ3S1JWQVZDdGtUOVNhUW41NzdDUVpmKzFMNEVCbW5IZTNFMzI1M0JNa1hDVXJLam9ZN0JBRmgySmZEd1lMQnVTNXNKQTVNc204QUJuWmxURFBGV0pWRGFXamJZUlovaUhueCt6L1RzNThiaE1OYmI1L0VXYWxValZWWGV2NS8weWlYcHk1bnJNMUZsM2tOTm9PS0l5NHlYS290cmVCc21mVFB0MG9YRkFIakpNbDFDNlo5dnF6cDR4RUJCNzhlcStnbTF6WCs3OXRpdHpzM2RMMThSZjlaQkFQWkpMWDhHd2pKbVpHWVp6cHRCenNnTDBZT1BDN3pJWEJuaXpPdXRWWXQ5ejJ6YnRpVUNoWVpDTXpNd0Z5aWhKRGVGQzlZMkNzVm1MR1gwWXhGRzliRzN3WnRGN0lQWUZPVjJ4TnFZTEVLVy9UZWVtYVQyb0tGNVdkbjZ0U0VIZHVlV1lyS3U1V1ZxR3Z2NHF1VFgrK2xkcjFsbFBSaytNSW5GVFNXYk9LTXowWCsvMUFPeDZWMmJ4TWRCaUExVGtCbVFWVVFCOEFXZTdVcVhWQ01CajNFNFliZVZBMElBendESDcyOWRKTXZYK0M5UTBpUXVKR1Z2VTh0N2FwdkUyY1ZLUmJjbHNVOXBKQXpkOXZXV3A0dVdIdm1IT083c2d1OUZHb1V0RHRma3dYWWk3bEZrazNkWVRqWVo4dUh5d0xuZFRwdStmb0VTQm5WV3ZhbFlidURNbjBVM2k5NWtBemJjdzlmWCtIeTlEZFpTNlNCL3lTa21hNU5xWUM4VDZPaE5uYW0wTlNDUm5wZ2h4eStQVUpQUUg3Nk5Dc0pTOVdaYTc3eGRaWlpPQnNMRExBTGduWm5mbHNvUXpYYnZOSCtGdVZXZnRTNmxCM1BKd2ViSGV1QTRyRjdXNS84dDhqdVJneG82TjBIbloydm4rU1JaY0xaWE9MNUtkNFBMRGZ0RHFGeVlSRXpVbnMwTEM2SnJxSkw3UWxsZzRuanpiRG8rQmlrRUg3NG9iT3p6TGN5cVdmL2dERXhaajhTTTNocDBZN2dyL2F3UExNV3pGNVFCa3ExQXEvbno2TnlEc1BKNnBGbmlVNmFRK3JLU1Jpb2RyNTFXZ1g1Q0xkTHpBa2dZaDcxOS9kS29kejVYL3pDazA5ZTNUbWhLUWQwV3dweW5EK3NnY2hSeEV5SElRVUVRVEg0UHpJdWZoZ0F0MzFLaDdKbUZzWTlzL2tGRGdHL3ZRV1E3RUU2cDlTdkpsNWtNU0JrZVpCbUQ3Vkt1QjNWSTh6b1JTbHQvMHJRa0llSFlIWnM1ODZENUtDU2k1REkxMUVDNFZPQmtiSzJOQ2lUM1dTd1R0bWg1cXNJTWxQZ0RvU2k5czZkNVZzSjRQTHUwRkVaU3ZEaHJZMVhjbWxDRHVvYTlpSkk4M09WYUdsV0YwSkRTeFlCYWlqbFFYaU52ZjJRWWN1NEV1VzdUMUZEN2VaYW1pN3BzdnNnZkhKZnZ5L3l2VlNId0laWlI3SVU2ZzgzOWltQnd0MmhubWlFdnMydFZUQ1I2TmhSN0phdk9EUThwc3M2MGpiRUEveERWejYreTB3RnV5YnAveGlnYnBpblV0bDhuVWlmN0pnaHV6Wkd1aUIyREFxYWpKTFhXWk5oL2tab1BnMnR5bDZrY1pjd2k2dnAveFlQSWFEUjY3Qjdqd0YxU3BVcG5DRXdOS00rKy84Y3NzSU5kRWRGUGxybVpzbmg2NE1TZFVrWk5LZkNPS3lJUS9HbGpYaDJRVmRINmM1bFNYT05ZQzJoQmQ4OWlyTml5OElGZTNrMmVnNlFreEhEZ201Mm5PcXVnT3EyNlRYMDk5K2UyWWdmbnVCcDBhbCtIMVhQQVlITzRQNWI1TWhPSlNZV2puaFJnU3paOWN3bmIzQWtPTTdNT1g1Q1MwYld6UTFQVTF0YTFRVlljUGR4R0x1UDN2akprNVVZcjZsL0lObzZmcys1OUZOR09Gek9PcHNCeTBsRG9tVkJTVi9qZmhsa2xSY3ZyNEI2ZUNPWDd3VFVkNkxDZml4clBOVnVSRzlOVG9MNlVBaE5xMnZJdzhsK2o0Ky91OFhOSlh0a1JNQ0tmR3pyeitDWmF4YmF1MXd4clJpVVZ3Q3VQeWpMdnprdHFsOXdjZjdVSzJhb2hhT0hteG1aQW1tekM3TllUYXJ0aGpobzJFR3Z0cmdqN0tmQSttTHlueVN5UHA3OHhZN1U3UzA2Y2t1UUNwMlgrOGxWOFBFSkpmTG5rNERQUGlYUm1nU2dWTlpoUnFLUFgraVp0N1hkcUs0N280QzlLeDhOTU1NUHJ4UUUwN21TKzB5WjNVdFFkSGpSQ1lrVVl6MlhsR2RORzVkMVd0Z2dKOGFBTDZySUVVaGYrQVcrT1JZcUppVi9lWDNEc2d3a3BDazhvZ1N5YUJ2SUd0TXFQSFZwNHhBWkJQZkorSVN0M2ptZVUyL1ZOeFBEaHVuUnBkUEhmZHdlTm5pSDJpZzAwOG9JSXpyeGpodGJQdUhwK1V1ZExPdDEvSEsxMm05QktKZzNRdElPRU1IYU9GUzdLVHZWVGNmeVZETXdYNmpYekZiTzBKcGJpWFhuVk1SaURhSHlsTit2NlNBRmFIOEpkajNOa2Fla1IxczRCVDI3K01ML1JYOEtqeDRNZzRucWRlSmllSHNjd0pGZ0F2QkVUWXBLVWFHUHRFem9WOHpmMjdyMW91NzRZRjJUQncwK3dWWHlvbCsrUFllbUViaTB6Ry96eTJ3UlBGYmZWdmpkWVRKRUVKRzhyMzdIeWFxbTQvUHlHZlN3UmRveFBnc2ZwMDhRajVhUXdJNXhXOE1lajNhRUJoayt6V1hYVmpZUDdRTkdUbm03S281MmEvaWZlZ2xQb1hQY0xwaVdZYU9qU0R4S1VidnJqemN1U1pYZ3JJNU50WElZNm45eU4xWWpUajRobkIxMEFZTHFiakdmQVptVVVQMjBlRXNiODd5b2Uxb1c4ZVYyZk5xaTZDWUsvck1HdDFNU1FVRUM2cTVOWllWUXE1WmNGUTF1d2twQ1dpVTV5MXNxcUorYlRsREFjUzBFamhkcTNSTGhXdU1CaUhBb3Jqa2ZIK28wMU84a1VWeFBLalV0RHNwcTArcVFXOG8rTzRMYzREME5wc21hbUpkUHc5S09sUldabTA3ODRIRHRPY0JBN3BFY1hVSkpqWjNGT0hoZXJEQTUreEQreVFMR0F4eWNtYmlvem9KcStaZ29JeFVtMzVveW5XUjNYMjdYM3NMZnZjNjdlem1aVE5nOTB0NkJBeG9hdFZ1NzR2bUxYWEtnU3BjUDdkS2NmMkRvaFgwZml4a2dSalR5OVRIaC9PN0NCbVZZSGRDdHNHQ2J2NXJoK1pmancvSnhTL2IwSmcvZXI1WWdDMTNRZEtUNlhBWTNFYmhLTThwVFMrUjFnUWVQeTBNYm1XTjVyc3JFdHpYbmRMeGtlcTNEdXhaRE9ObUF4OFdSRVJsb1lpZ2tXYjA2cDFPNWgrTS93ZklOSW1TRWhoSkV1S0ZibWxZVTBReFVvY0VvMTQxbk9ZTmh6UWViSjRORUZBVGhHTWI2ZDl1QWRyTmRoaWk5cVF5Qk9qMWdCY2NyQTJxcGdKZVAvWXI0N0hONEtoMDRQK2VZV0pIZ3U3ckVqM0tHWDVRV3ZUNEk1SW03WVYzRitod1Urdm5YWS81dE9KNTdLc1pSTCtqWHpDeXRhdXEvekZ3M2RrZHhNNU81NjY1bFhPUnl5M0VaNnRYejhza3I4NUpkbE4xWmJvRU4rNThJbU42ekl4NDY0L3dzVlhCeHFxejIzUnUvZlBLT3JIQjRPWFAvRlVRdUFpOXYwcGdlYjhQOSs3TTlmZjN1WXpmdjdJQTBwcmlyWHJzWm1Kc0JoS3pwbCtubFNncmExZ1ZKdjZRRTBGUktIaDNRU013TlNVRXlKU3FyczFsa0lwcnVrRDhnK0g5T28zbGRvY3pSOXZsOUhlOUlsbGxOMEY4dU9MdzFsQ0ljNmRadWovWUpXcC8yYUV4VFJvazZxM1QxUnQyMUlscXBVNTNUbU5OckJHbndjUDJBYzVKMnFKMEFsQTFYR2V0b0JwcXV4dXh0WXRkUC9DMmk5ZDlWdk1ZbkxBZlpyNzZENzFwSW1mdUNEVjArdUVJaHFkcEV1YUFHUDZ3ai9WRitPSmhucjFkQjFGbE9NbXlWZDNSamxOMGF1M2pZM1VWejB4cW5ZNDN2UUc3L2YrV2NNSThzU3VPL3A3ajR5aW13TXRnOUR4QTRmMENWZVNtQWRZKzNLc3dSV1NwaElFSGZvNFBhc29jU2RWdFd6c2dRZ2VZeGRIekZKM2FjRkZXK2VlUFBGeUxKVS9ZVjlBWXE5YWlCeFR1RndSa0NiYmw1TUdJRGxYdVRPU2taem1id0gxZWU4TlBBcnd4TC9wZ2ExN3JsZ2JGQ3grWlBpOHdMa2NFSGozN25ibUZVVHNMOEpyMFAyQjBhRlB4YnNIUTFsa3ROOU16cW5ZV2RnT2t5WGRqVjZkZVFVS0pPUmJrR3hCdHpQckxPdFc1T3BBU2tYT0lPR3RmRzV6UmIxbzV0cXFuRmxvR3ZvbU1mZVIySWRtQ1lWTmM2VXY0SjRISzc1dmRwN2xPSmNlRHptK3RoSHI1RC9mSWp4RStva25TU2NBYXJlZ3QrUWNwL1ZrVGQ2OEJMRkF4MG9JZmlZbTg3aWEwTTBMdGc1OEUxck54Q09PT0drUjd6SzY4Z2g5V3BMQ0l5YS9MZEtlNm1yVjBYbzVwSTJnOUplaDFEUHlhUWdwTXFTT1VPSGM2WlV0aDdmNnN6TldEUEE3TzU1WkNuSFdWT3IyNFIzWlh1WHROeDRna2lmWW1VMHo0QU05TnNiTzNsWFFyb2RseEFKNy9vdXpOV1BPK2xuM0F6QU14b2pxKzdpOWNVTTF4NW4zT2hIRm1WTVdiQ3hadjk2Qnpza1JSV2wzYnVaQ0M3eGhDbVJDL0U5NUNzNVlJcE5ITzl6a2gxa3EydTF1akZ3cklzK0hLZDd3eUlIeGVaVzFTVTNneHc1QTFGY3NtbUppR3RTdDhBWGh6K2R6dFJRbDV4NUxUQzVnWG84YnZTNGpiUTR6d2JJQlE0YzdEcTBOTmo5RzhHV3dqck1FMEhocWhFaHE1cXRJYmYyaTJDVkxWc09xMHIxQ1MzSThlemc3Tk1MMkFReDJicjFveEZKK2o4bGNKL0FNYkFwK2lhREZTVm0yTFUxOWZvNUFLSTk2TmlROWdqSitZTTQxZFd1UnprY3krdkIrQVZJcmxMTkp2cXBTdXdDdHZ1MXVrOXpVTTlES3VZaXRQeVFnYW9IVm04b2xsTk9RcWg2c3IzVjU2Z2dzL1lSZnRmaThId2lyYjRhc3ZqR2tiV2dveTZrS2xUekc2YU9ROFlmSGN2ZDBBZlk2emExNEZFRzBMTmQwRnkrYStSUXpQK08yVzdiV1dOc21oZTRKSlNQY08zdkZxZjUrbGRqbUxCc1ltWmpmNE1CNU9VVmhXVDlnWmNTemFxUVJqbUFiNk1VMEp1VHpsY3NUbXd4N1Azc2RpemIxYzErV3ZqM045eGUrL0M4dzlDa01MSDhQODRyUlBZN0RleUhsZlVndW1ZRi8xYmluNFQvelQraGVkazFTY0gyRDUwQ3N0aXRESXJ6c0pWY0ZpVGhxZi9WU1ZmSHRKSkJPOHphdHpUbU1EM0RwTGNmYjU0WjdhVFFpY0VqeW5oU2NJd3JDbWRVeXRZZG90czNkeHBRZnFDbHFzY3lRMXJCUU5iRW1lSkJ5RDh0S1VKM2RoalJsVHZvQm1tWUc4SVhSWERHZllMZjhtdHp5Y1dqOVAvTm5hSHgxemRudmxSc0t2Z0M2dVhXWHJuQmR0VGlsYlprWHhXL254NHg1ZkNvb1JMNlkzYmIydWJSY1pPZ2VlRmRVZS9WdjBmNkVTaUNacVpudnRDdFBmME1mR1phT1k5NTRYdmNmN0lNK1hwandpMmdna2FLeE1SMXhiMXpiWG5iTFh1Rm56bUQ0Z3lOVk14dk0rTnloM0lyN3VXV0kxRk5JSjJBdHprb0hQNzA1VUJTQlVrTDRJNGJNc1dTV2VuZTNIbGtWRjlxSXAzUVphQTEyeTFtbjFwbWRhQnFPbHU4NG5WbzIvVnpVY1ZCaDFsSDhhMWoxSGFOTDVFTGFnZE1CMy9LbFhHYks1MDJzTlRkcWZabjY4STJpZm56UzI3Y0xzcWxBMW0vMXo3Q2JiUk10Mldkb3N3c3JMSFBDd0JUVVZYVHB2THdOMlhndW42OG10ZmFDMWpiR0hUb0NQRkpaRlNaUy9ENkpWYjVCSkkvcnZhMUNsVzVhU1hla0M1Z21sSEQzaisrTHFST2lrNlRRSHFyd2s1enpWNk1OV3VsajNta24vMGJCRXZyekhKTjRsVlVDT3ljZTVNRlNnT0pUanIxb21ScURlYzJpYzJ0UWd6VEduUkl2SWQ0V0RtK1pWaU5OeHdTRjh2NDRaN2xwb2pvUnZSb0tNcnVISnorMFNkUXRhK1JPTGF3MkFPbEEzV0xQOXNyamtqbCtsSDZqL09IYWw1R3k1M2RDeEE5azVyTEJ0cG85U3U3MHZuUEYwQ0IrRWdXbEdKQlErQm9EMXJVZ0ZxekNpdFdhT1dWTnhUd0RBQWJ3M0x5dTVkWWZwNStnRFc2OGVJNng1MHdiUW4vdHNKZldvem1EeE55VUgxejJXZUpBVHdxSm5yRmI2OUFaT0R5K1pQOGtuQjFNYnJaUFRvUTF4TEpNdFIyUnNOTGlwSm9pNlA0Z0QrRG1FTC8wZXBVS05xcHUyY2tuUmtBWmh1V0RjYjlTTm1jdXFQME11UjBOQ1FhbjJpQ0FNV0tOVEQrdGR6eE9PZ3dhZHlYWVNESlhjajE4RlE4UXE3Rm5yazZ3dmFLTkd6Z1FvY2VBREczR0dCRFFIRTJycFU4dm9lOTE3T3lteVhJcXNOcnZSN2EzWEo4aGhtbnR2NzNRTlp0T1hTVmdXbGNZYUg3enoySTJLazFCNk10T3JNZzdZOW5lMlFGYllQWU5oZGxnSGtyczlOZGQyKzFOaWJkL2wvV25ZSmdoRVowV2VublAyaEh4RWFPcWg3STd4WWdONXdMVWpLTWtTSGc0dkJILzhiZ1dkR0VqTVovU0F2Tm1Oa1FZU1M1cUIxZDB1VVo4TXllZS9HSHFYclpjVjBlU2RaamxaZzExclFycmNkZkpLaUQyTi9HaVMxWUtLQUdjbzVNdjZLSHpYMEpUWEl3WkNLN3JyMzB2NnlpaERyeXoyZVZVVnZXTnhPQW53dWxNbVozMWFuOGN3YllkTEc4RDhlMWd4NUtGU2FqdUVpK2Iyc2tDZVZtaC9yR1Joc3lNWFNQWWtLemFDSzBkSGV4L1o5aUhScjFLYU9XL3EyeWdaUENaQnVHa3dmZ3FWQ2VrOGlzTmNTMFZsT0I1QitIdjJtUnoveDZNbWU4RDBwUTBINkJXZFFHcTVoOEdicWhQRHVaMzlYU01sTklKaXlEQzdVM3M2OGkxd204VFQzb25HY2cwZXNkY0xHVldjL2tuRFM1eHh0SzNJblFsNU1RNzBSbFVKdW1wN2FvZFQzNnB5Zk1EZjJxV2VWZTlRcWtycTRzNzRPV0VJN1BSMVhpTTBoeXhuUmRhSHFaQzkrcVl4cmVtc280eEF1aU04bHBhSXBxQURPRU1zOWdYOVVIU0tRQkMzQUdJaVhIMHd3NXQwellnNkx1amZ6WjhnczJBM20yRWpGcnV3dFdiSzNCdkowL240THpVTDhlTWNJTWp0ZGVUVnM4Nkx5Y2YxUlUyV0Zmd0daZTFOdmNEMlZlTjVIQmQ5ZExtRzY2L1Uvd2tKMVJQclIrU29peDBLaVJWTlJYRW1UVnRYUDQwcGFvUDdXTHJYYWhOYldlb1ZZeXg2dTc3cTZsQ3pmVWlBVVRUNnJHdUh3OTN4T3hkRDRTSzVSWGdrSmt4RUlVWldNdlNNWVZXdEFBSXNoT1NsUVJDcFVmWHpaeVpkL0RjNWdBTnBCdnpISTM4aytYeTJVWlV4aUdqcXFDS2FaT01nK3RnMUxJUE5NSlI1SU0yYWxWYjh2YVpZUGVObC8veWlzRVJrVUt6MWxURlZMUkNSUDQyTWVXL0hCb0Q0SnlLUWdzYndoZXVTK2pmVG5aMmJzQUJyVDN0U09EUkpxNVhhNk5ZUEIwMENYVldSNlc3NFR3dlRyaE5JQ29DYm44bkpwWVp2dlNBeWkydWdneUJEbVVBeTQ5SW9YZ096SkM1RU5HNS9Md2RNeDVqcVpUVlIrZmJGWlFNdVJMcXQ3Y1JuWkFBNnE1MU8rR2hTaDRGM0o4bW50bkpHK3ZRNjVNem5jM25lbmNYRGtNeWFLZml4ZjJSSjBWK2hwSHMrTGVLSkJ6a2dPMENEWHhydXdRU0lGblp6UmxiZTZBVUVvcVNBT3djVUFadjJFeWtCclNFSjFTbU44aWZNa2NPMEZuSTNheDBoaTZhem9rRHFjL0NWMkRMUC9RSkE3Y2V5MmJQMDg5ZjBRaGRxdjRWRTJZNmRMRDRRd1ZiNCtuZGVwY3puNEZNbE9OOG9QL3hKQlZDa2JSdHQ4d1h2bnVRZXdIamVvVFI2QVRYRzdEUDlPQ1dOVklDM3JkcUM2TE84czdpK1NBRnRZc2tiUHd5RWtoQ0NwODBiWmk0WmdBdjFXV0hITUdqa1o5bzRlU3lMOEtXb1Y0Z0cxelVRMUk1MmhBSG9YZy9lbWFhY0Z2bk1DdHI4aEdsQi9ZTmhqcExTdmRjSmcwOENJN0RoUUZPeFhEb2h6TjNNMElQdVZLMGdhR3VGSmtuVDRjQjB0Qk9oc0g0NDBhRzVqZ2oxbC9Vd0c1VHNaOEh6cXJxUGFoNC9lanJCcisra2FjWk5xR1pkakZ6OTBBUXFNUzVCY201SWtkWDdMK0F4YkpLRnZDQ05sK3F0Zmhna05pa2VhZXdCNVRpVXdHR1F4OE40aElBejZBaGFOU1JJZzlUcElsTWVLcUJ3TlViQTd3dmR2bGoyWEpHY0hSRnJCeUUrZjVKWk5wYzFQZkJYQS9KSnJ3YVdSWXAvYnF0bHozdk1VYjI3UHFXNlFyVElneHY0dkFnWUpQR2Q0TmRZYTlLRzJPc0JQU29kWmZCZ01ad205VlJyTW43U1VPMk96c0lyaU5iY01lSmtQTi9IUGxIMGNKdEJGZ3NPUkVzeHIvVUxEaEhCbEZkWjdKNzRFMkk5RWlrQUF1SGJWZ29KSWtKVDMzUUhIbjNpcFcwYy9UNnJ0OU5pOFdCK0xLL05zdW1TbEJqUTJLUDJnaDJpK1BwZTNna0FqdXdSeGtEUUlQQ05hUWFQalZ2bS85QXJ0L3J6amg1MGR6VytSV0VyOVluVkh0bkFhL1ZtZEhXaXV6UVMrQ0JSMXdudENvNEl5SFhxbnFWYkhTekYvNjNKc2U0QWR2eG1ZeUpKTUxRUlpYcXpOY2laYVN6SzFUNzAyZit4VG1nQzNvKzNFTHJRZVE3OEhzUkg1VU9hWHJGdDc4N3l2aEFCQktBTHptSm9yNFl1cGpLVzlxay9xQkZqSFlwZGdjaXhWTlFmZFVneWpFY3RiUzVZRVJkQ2hRMm5waVZoclF6Y3JSOEZ6cStTUG0remJoZktCRnlDRHErQTg0b21jOHR0VHFZRk1CODRMa0lxcUtGUmtibG9pd1hvdjJOUDdmNDRCYlVZQ0VuVmxmdjZlQ3E1bXcyTEF6bXE0eEc3Zzh3WE9UdG1HbW55NDdHcGh0VzV6QmVUU3JOWUJ5aW9qZmNmdmtmSkRESlZueC9YTWhneGhCcXhEUmtFVWg2WjI5UWc0d1pCUGkvMDdtTEdoTldnanJ4YWxNZEtsRFRFSTQvMnZFek5vZVMrUDNCQnkvV2R4Q1hQcSsxZEY2M0huYTlJL1Q1K2ZoTjB0Sm44bzkvSTBBZ0Y4NFVDTXJPVG5uQU5vS05nVkNLeHVHU1BPUFdwcGl0VVlab0swaWY4clFlK2RYZ214cmcvK3JJUFFLSWF5RVBCeHQ5YkN4NjlyZ09CaE0wMTR0c3VxUmczZEJhaHc1dkxid3B6WW9oSzI0WHAvSHdEbWQ0ZGh3UEhUT2xvTS94YlhkTGhYVDFJaFVNcjhoMWhnRFByQU13R3U0RGxZOWJmN0E2djBQb1BvSkhuWTJibXlkSUFJbGFxbTNQNXVHVk45V0pJdC9Nbkd4NzZuc0piSm1YbDMvWFJBNUVEaWVhVktnMHZMZlpKbVh3L1AxVUMzVFlaNHRreWU5bThNR1NaY0VjT1MwN0dWOVA0Vnc3QW5VNHo2dFFXTWp6L1JQWDdCVkhiU3c5N1IwOTlZbzVqVzcrZEZ0T3hTbVNTeW5jOEpwSjl3dXZUS1FhYXpHMFM0MkNjenFkRmtDdk9BMzBUcldFcEVhZ0Z6aHhiNW5KMTMwclkrcjhmWGhxZWkxRzdRc1R3ek1UUXJKNjA4ZFplUWkvYjhYTmc5RmlzQk9Lc2JDWGpsSE9kVDFySFlua09wUngvWW1vN1R5bGtzN3AvSjJ6VDJucHVtNXBIRE1ja29lQ040S1ZhaDk0RTJhajlvRkNvUDA1OFk1OUxDTWRicS9ETTRFb1FwaHlhMHhuTGhDVit3OVdBY2N1MUxiNGlVN1BMOFJXQTcxMTVYd3B3Q1NHbHN0eGFRckFidDF2Q3ZzY25ZTXhmZkJjVytLT1F3WlZlcThLZFAyMWY4aEhiUkJCK1JNaFdYaDNQem56ejVWOGs5aXJwZ3lrbVVEL3p4OUwrUklYZ1QwcS8vVVRaY2R0MDhBTERLVHI0bnhTeTNVZHFZR29tRXM0bHJoWURqazJjcmdVaVMwREM0eElhZ1JDeUYzLzlNdWtoZzVMaUhuelZVbjFMRmdWdmxkeWNVYXVqMU9yNVJ0VFhPQldsczg3SXd6ZGppYlhuQTlzd2VLQmRRR0tsQ3JjKzlTdnVXQ2h4SUhmUUhNVWN5WEx3UFR6T09maTAvanBDTDV3NTZremsyeFVNRkhLRzU0WGhGbE1GdDNvS0NFUVpHSjhnZ0VGVlBpZEV3ZUVoczVqMWFPZFdCNnZwazRvUmhvalJnUzVCR0xEa1JOYktRNnNlQXFVN0JkVUdqL0sxNlducjNiM082b2JRTW1DcGZNcmhWeklvWUR5VTZHSlprMjNWNjZpNUJZTHlSSlo4S2Y5cXRLRVgvZkVrY2VCYjlOa2FKWjdSbzZ4cGRuTGVYWkhyWHZJNjUrSWlESXFhSDh1TjZaSUUySUVlQUFJelN4MWV2OEx4VVJPRVFJWnBUU1ZJYWFud2k4c202V3lHaU1rblVtS1ZLZmhDaDR2OEdmQW90a0FidVVVKytXM1pxa0F0MVlvb0RMQ3VlcGJzV2oyNndCY0FUVFBaSERMNWMveG5DbEluVzhjdlNYcmYrOThndXpTWWovZEtLZTlvbXR6bkFVOWt2VCtkYUdIbEhxdzVYUXgxZm9BcjdvVG5ISmczTkdhUEVURU93TEk2Q3lFMlQrRDlkUVJHSHgxZldUT2MvZGZpQmNCQWNtUXVDWGNNMi8zT0V6UmpQcXVOa0VlaXNFVnBRREtUOHJRREh2Q01mK3pJNUk3M3FNc0hpMDNCcnJVYVI5dWRxQkxBVFBtc2xBTWlrcHQwMzR2SFpnRHMxTm01TDl1SjcyT0tDYWtsRHl1NFMydGxYQXI5aFJFVHlLSS9JcG4ybGZ4bjZ3cjdVSGFid0FZUDM5VjR3dnVYbXhGQ1Z1bGI5MVhVdnoyVmxLZzNjUnBua2pLOVpJbW11UWUzZXdsZkdXZWFOa2NFOVVxUWsxS3ZxVksvZmMvM045WnY0bStOd3pVWG1DUEV1bUpkeUtVU2VaOGNMUmlNa241T0lvMkhjWkVYY3FVM1I2TVJZb3d1WGg2QjNXYUl2Ty9uWVM5S1NEb2paMUQxNVVTK3ppdlRaRHc3UFErc3JOckVyalZxMXVLMDZzZENIVzFuNmFuZjZSVk5YbTRaQ2FxT0FsbmtHU1NpdVB5b0t1WUlTVGFSOWF5K2RSNlJvM0tiNHlWRklJbmc0VnczWDk5ZjFRRDJWRG1kR2dZR2Yya1N0YjlMZy9Dd3pYdW1RSzlIa0Zac1hTVUgvTVUxSzJ2QjFRSlFiZDN2aVJ5aytTT3pRT3FZRGZ3cDRnemlGeW1tVFMvcTArUFViRTZONzBEVkk2U0s0QmgwdVBKZlZ3bkhMdWJ5K0lwdTBqdFdJZ0lsaUJGOU0rcnBncS9QQnZPN1BXRHFjNVlVWm5YcG5IZEp5N3Z5SDRlSFBBOFdoUTgwUjdyd3lBNHZlUm5ZTkhCcU9nWWdDbE9QQnBHSEVvZU4yWUs3MHh5VkdVaEh4dUJRc1EvZHpZQzFzVjZQSlo1a0ozS2orQ2kzVk55aWFZZlVLNU1ML05tbjh0NXZndEg0R2V6Q29PNEJXcVVLeFFZOVI0eHAxMXpTK1hoQTdRZkpVR1BGVFNaWVhJQWxYQjNzcGlQbk9yMFc0UGRIRzNzNmtvOXE1RW9rbXc0aStUcU92TUQ1SmJWR1dtS2hyNjNKYXM5SW5ZaHUvRlh4b0hXQ3AzdGlmKzl5cEtNZXUvMHhreTYzTHBCNnN1SW8vMVg2T3JwYWE1VHRMUGQ1d0dWcEN6bnR5S0FVdzBjeEV3aVQ5aXVwMHFhOFFMOVlNZFpZdm82WG9wRHVNMm9LSjlRVGlIRU9uRFhWdEplT0RPNi90aEtyclJwL2RDWDdEQzE0RVNHZW0xOTk5Vnp5ZjRqWlUwOW0rejVLVSt2N2tQTklkSjI4U1o0dWZtMnZxVXduZlpBZ0FVTWJxRFU2QklNeTcrN240ZlBKaVBZbE5tYWRSYVh1YjgvclBQK05mTWFGbXpmemFRbWdmb2pCR0tIa3NsY0M0b3dBTkxJU1R4N210dnRpOG9Tc1h2NWthUy9pSkREbEZ3SGtGUEZGRllrY1ErdytYWUlZQUk2WXdURjg0My9OWUNoVy85RDZkTkRHaE4ybTN6eDJjVm9jMllLZFhvU1NQRWUvOFU3ZG1wZ3hZMDhqQkgwMlBuN1REYkw4MGNXQnlxSWhxUXRzcWt4bDRuOGlyWWIydVJxNlRPU0FVOWVzMldLNmoyRGYxTVI3clJRM21DTW5xSG95VVcwaWxJek9mT3pOY0tjYU5pUUF0Qy9BZXZqMUxQK0Z6M29KdWQ3V0w3UjB4di9hYWVGR0J5V0E2K1N6bWZCVklSam1sdGJzYVlibUFEcE5VVVNTQ254RUtjVFB3OHRybThjY2ZIWmd0MzlzYUV1WjYzb3JwUjhXQjA4QUdpcjJyVE9BM3ZWV3R2Ry9wOWRXYUdpUVZqUWtGQ2o5WmJJYUhOOUF4NnlHT3pkdEova3A4RUE3Zm9LK3lmbFhGdS9PTmZCZHBmVUJMa3JiUU5hQjljanlBMXNRdXd4SUZtaVp0TGV0aTVQUW16b0Z2ekZObVg3TTZIQVoyalBkVGIrbnV3YkYvQUZCL25OUHRZOEFqOFJYM1MwdC9xM0piRVNNT0ZBU05RcUlqcFNUSGdLUEdPalRYcis2bGxqQkFBbVQwVnBwWVZHQTkvMFNGYlFYRlRQQ2dScmpMczhFU0VWbWpDRkd1SjQ3dzMwUzdFT3YxenpaM0tSWUdtWUw0Q3VsU1M1cVlBSUJGNlJjU25VUDJnNlpMRVAySmZkQStCZUtZdU5TNEJiNHAvc0dlVWFhZjIrZ1JTSUkwamo3dGhuMXdjVU9LV1cvREVtYWlueGRzenV5NEw3M0p2WnhUM0lqaEJSVW5OVXdiL3BTaGJqVTV6ckxDUk5LeWtVK0JCYWt3SzE4UWttVjk3VzlGck83OGpFVDJ4aUhjZFNDV0pTc1NFU0N5OUN0SVZJSHNJZHlOYUZ4WVJkckp0akxxR3JpL3gwdTdXZ0tyQWxHUXhqWGoyR0x5ZGM5YW5CRllTZm0waEJXbHBDelJ4dElmNURocE5OWmEyQlZsNE1tK1ErZzlVQ1FZV296S0NCWDNsU2VQWTlEZzRTZEdzR01GWUZ1Z2J5a3ArR0pGSXB4TjdZKys1a2RvMXZpeUdGR0NpZVk2Z25GTFN5eVZ6YWZsamF5S2NjTHRQY1dTaE9NaC9iQWh2MmQwKzJ4djl4QkhKSkM2SXBVVEJ0aTVJTUJGc0lkS2dHL2M1ZTh2ZFdUbEx2WDRDdHVNOE9nd0Y4VjByak5nSzJONVdZd3c3SmNSZmpPRmNlVFZ1R2dTNUNLU1dQU051RHRvUTJZMVdQSzNIVlYwdXRUeWllVlQyVUVhRmhqajJSa2w0aWV5dkVLWm1QQ1N2UDUwK1JmRFRFdW1xY3hnM081cDRZcEJTVFhTaTQ4NC9uUzhsbE9obWFSaFdFZGx6VDBnYS9wZG5ITFBhUlFKckc0RW1KNnFSN3g4TFAzN1pFUmlqRlU1N1llMWxXMnRHZlhRVG5UbjZPM0Z1cXYzQkU2K3hlM3BNVW4rdTFMb2prN0VZUlI1TVFzdWRkZUk4cTRxaDNpTlF6RlV6NVhRMmo1T1NQTzB1UjRNL0FUdUp0R2JVb3I3UjRhSzNuSXIrRHpzVjQ4R2RxaUsvbjQvUGxHd3lZMzJUTmR5QTFjMnM3UER1eld3YlozZ2tQc013TytTT0NIYVZHaGUrbVdNelpoS2FQcUp0a25zY1lVeGo0bkhhalJzVXRxc0VuQkZDQlhrckxJN1NwQmpiNk1pbXpSVUJLNkdhYk1FQTFybnl3emp1VENPbEV0dGpsZWlvSDd6dXNXcFdTK292NjFQMFhWRUJqeWNSdlUyRUtXYnpLNUo3UWhPRm16TFg3NW1Ga0toSzJ1S2dvMmE0WUVaZ3F4ZG9CeTFtcElPV1VpR043cWE4dFc5RnlhU256K3dHMHp6bDliTjR1Ym42aytlY01aeEJyaFhQOHRKbWp2RXNrZmVsWWZFOGxPaGhTaDlZbzQvaE9kTEtIRzlrS1lEQlY5QzdmSU9UTE43QklGNDI2YVZ4OVZnSjNlbUNzSFNNY0NzUzRHRUpPTGFnSEhzbVp4MXFpWEdmRDlUNk1SVCtqUFdGNTRTeW1kZjVlK016Q3ZQRGV3YW1uUjVCakczN1pPNG5oazdBL0cyNjNiWWxxdXBSMURxMW4ySUNvRUtzeE43cVlnd3hTRkMwa09iMWxNYmV5Mjc3ZzRoamEyMWlTaTc0ZHljUkxGMkZnb0twWlA4Wkh4elowYnFwa0xYMHk1cXNEMHFLeUlDSjhQNkJ4bGxuQkJNTmRuVUhhUUJKYlAyMEd5anpIbytwS1ZrNHF2TU14TldiMXZFK1UydCs3ajk2V3czUWtKMjlXK2VNMnFDNEZydTc3YjdNbEloaTdpQnUyOCtRVEFWTnhsMFdscHFqTktLNVBsTkZaSmRyQ2lEWTJ1SjgxQ0YzMjJkdFp0Wkh1R05Gd3Y4VVg4K3N3ZTByQytMeTdhSDFmTGFXNlZjd0ZwZmZUVlo4aFIzR2MvMDhWTWZUUkJkVk5BM2J2VnhYLzkvQVF5eU9kRGV5MjJWZDlPczcrelhuaGlKL0xib1Z6SFF4NVJUS2pvSDlxRk9ubE9ZNStXL0RPSFdiUDRocUc5VWJrQ2Y4YjhOeUxHMGoxVWhzRDh6OWNjN0p4WldoSXJicmY4Z212Y2pyLzhrbDVuTHhjMmZHR2l3SnQxSDJ5WW12Q2tjaG9IR240WnVDNTNDNlh1cGpsOVk0bEpaRi9oaHp0VFY4Q0pIRGUzQS9qUjlOamZBRlAzVlZ5Q0NLdmN6YmpWTFpZc0ZsTVl3SVZLVVIyWlhwYVZoQmNncURqOFZWcnFmZ2xDV1FQdnpyRmtKcG91alBzSDhCVU83K2hCVi8xMlFVaHJ5ZjlGYlZhbXN3V3FsSlNnamM4Z3E1TC8rZVN4NS9kam1iR0hSMmZ5b1FHR2Nnc1hXSVdrYjBmWThyWmlWOWE1dmpmUG1CRlFESE4zZFZEa1p2bnU4dG9JMlhwR0MrdmpyTGVhaHgzZ1FxME5BMGNBVHBWNGkvbUFUL3cvYjUxWHZGVEN0N2p4TGwvOFBwSnVwaVQxN2Q1RVdWWEIwRyt3Z3A4QWFNcHZKSnM4N1RmR1dzRWdGYVExRFZMTGRib09mb0l0U2EzUWEzOUFvTy8xVVdJb0lYU2dOUTEwQWFpcm9QL094bE9vd0hGeHkvRU5NOG5EZ3dpUk9RQUdhQ0p1L3ZtSWFNc1lVUCs1V28xd1dES0UzdE1OcW02aUFqYURuZzdCOEw3SmpDNStKRmI5MnBtd0lpamJ4WEdkQTNVMkFEdkE1a3BQZnhsWloyc3FIbkdqZTQ3MStzTDhlU0RvVHJ0eG1RNVlHZEoxMEQ5WXhRblJHSlUzVjFQbmx6RHpkU29ORkZUYm9XQzl5NGg1Uk5OKytlb2M5RWZab0FWR09OVzZOeVBuMTRmSzF5VFpDbkVOY1MwbXpkTmF6ek5ydkVsWTRYYWk1VWMzcDF4TXhCR0RIT0Q3ZmVEdVU4UlNUcTk4Y1pKSjVXdnVpWXpUNCs0UzNzdWM0bFpGUGhiN04zYVR4TkJkaWRKYnJtdU1EWG80OFcxS2dybllSNnV5dUxWR2J5dmZoR1ZGcVVzdDJ6d0l4REw3U1pQcll1NEZOS25jbmVVMGdiVlNIcldOR2xOMHNialVlVHdPNjU5eGo1dnVpR0N0UVFLMFJpemg2eXRTN0RYOFBmQ2Q4anJwT2Uxd0R2OEF0cmkwNVdaS01HNDlyaWR3OWo3bzJWdkw1UGxIZkk1a0w0SnZybkxZS3dPaktBM1p0cm1jMXg3TU1hRmNMT1lFcmRNTXUzSzJEYk1rRDFjbTk4UEdqVlJGVDQxRDZpUjc4ckQwaUNudHNVd21jSGthR21FOG9nT0xqUzFkeStqUHRCd0dubFZva1B4U1ZrbVJJbEw3NVVOM3hkYmtMQTdjcWVxeHVBa3h3cUN0L3B3Z2I1cEdQYy8rQWdZVzc2NmdjeFFCRVBhTHZtTm5zYmwxbTg1TkVLblIwd09vZGw5V1N2NWJQTmVINWZqT2NwN1RQYktxSlVwdy9uOHY3Q1JERDdYVGVGYzJqeTdpWHVjN0dnc1JFYjYwNWtXSEhPc3V3UGx4alpaYVY5VFJSOXRtR3plbm0xQzBPQjBqL0FoK3Z3MU1VNm96SnNJZ2FwekVrNHlQeEpFZHM3Y2JFOURiaklvUldLY3pseWIwcElhWFBNT1lXVk9sSHNlQUVUS3NOYmg2ekZCV05sVDE1eHpwc1g5aGpwb0Vmb3dKNjZRV1NIRndJcEsxb1FpajExZk9HbGRKWWJIUG9GKzhmY0FjSXpiTUZicUZ2NzB5SFVqNW5wQUEyWUQ1WWViMWk1SGkwRGxzTHZMc3ZBZ1Q5NmJVZlBpcXB4YlI0YzV4cERxc01TNkNhZm9qRjlUMUFVenUvc3U2cTI1ZWVHbU50UmdPdXZrTEl4QmJZaldvNEJ1N0M2OXU4aytvNUJBNkhoMFQxTkpzdHVzS2MwWmdyaGQzaG05NERxSnpONXV5VHVjcCtERUVwVFFrVm9KMzA4UThvUytrc2N4a2hEUHJjZi9IV0JKSVhYb3UvSXV4QVoyL3djNGNUcGVhazJPNklhSFZrK051UzZJUmI5ZjcxYnl5TGVMY0o2bk9xbEZrWDhjRnFTRUhZVzBpTDFLRWN0T0tNR0hPMzJlbUErOElneG1CQmhZNVRpM0UxR3RBZUpiakwvZ0F1VjM1MFFhVlhud0poQ2N2QXA2QnNIV1grd3ZHL3hmaUo2WHptUHJRaGNuRnJtN2Q2KzE5bElTMWxwd2F6WUh5dUgrTXNpQzFOUHFFa09UTlh6WmtJSW9QUDk2dllEWU1MeDNIbUVVY1hwSFczRG1YWmZ3ZmpzV1JoQzRkbnllak15dFVaME1iZ2FmRUtQdGlzT1ZnUFdyRGJjRlJTVklocmN0QTlZTGpmcnhKMGhiTWpVcXp2TU02Y0dwY0prQWFUNGdMT2s2NWZPbU43Qm4yS1NEcWFFZ0ZJb3IzVndrYmtpREhNTk5UTVVQVkc1Qm9aWno4UzFFbXFzSWNURG93cjA2bmNUUTBLTHdsSmRkWDIreHA4c1lCRzJBZGsxcTc3S1JjaVIxeVVrd01kelkyK0F3QURPN0hhMlVDY2toNzJQcHArbUtGWmd2OUFERXYvRGlJbEJ5VFdycnZGQ0NPVUxab0JMLzd6TjBLSDdGRmNWR3llcERqNERMcS9SMWVqbnl1MXV4QXNGcUJydVM4SXB4emRONyt1M3RVWlA1QmUzSUZtUnM0ZjkvTGRJMVIrMGdPSWJzdERSRm1WSlJKSi9qZ3g3dFJYa3FGTEdNK1VnUndsRWZjVjVua1dzMGJaeWJQazZYUkdpYjZ6MmlEa0tUeVIzRjhZTnd2L1ZJSXB6aEhpOW5zWUFTNVhzRnB0OWczSjJOalZMSkhSMUJ2YjFlVFJVMFJUbDVQcXdnZDR5dmo1UTVmR1dtaTNhYU9ZaTNLRFM0anNZQzZWb0lsaVh2NGI4VjFTZU8xVjFRRW9HNlNtNzlyZjJGNndNczhSZHF0aktDWmd5MTdXeE4zV1FrM0NaYndpMFA2ZXVZcEVxRkVtTG5iNG9xTENmM0VqeVR5eVhKdkpadXdFZmhGZC95VCtFN0RnUVkvcCtTUXFaU2lSY1p5d3BkK1dRRTNpVWVnOUo0VmxGSEYxclR2OGdpbTQrTWJ6MzBQYnVtd1N5RVRWcFYwSXQ0WDcrZHdkOXN2dE5SejBRbzhUajJidnFMdXBaWXUrcktYM0JRbXhwdFFuUkVObTI1MDJWcS9yYi9UNHJXN0pxdE0vYVZmR09Vbkt2VitaWjVwaEY1NEN1RjFjOGx4UFczSXFVMldlS0psVXMxZ2l4OWpEd0JKM0JlbXVCUFVRR3pBanpFMmdhOTZGYVJNc2VCTzdTSWFKcit0SnN3cnBtczBRdGdPZHZPU0tMK013U3dNbm5BV0pzb3VLcTlmeDBDUXowRThrTTFRa0RidFNtWjZlMTZhUFhRMEFCb0dkZUp0VXIydnhneDFmbTZEY1F0UzUvMlBxY29NUWVXVWcrbmRwY0R2QmdQM2ZGcHp1MkFPQThONG9zVC91TmJuYU02bnZmbXI2aEpadjRkc1QycHprdU9sbmdma0IzZ2RlUm02enkzby9YcUppcWJzUXk4WVkvU1l3YmVRSXI2aVI3eXQ0TFRyeHJCWG55R0Rib1dCd3VnNVppUXlncWtRMWp3cGZPYnRteG45VVF2YW1NeitZbXQ0cFJob0VGZUlKeWRWTUpCc2NYOVZiM21MWUwzMDlwWGV0UlRjdlc4TEorYmZUckhhZ1Q5SDlTM1hsVlpoZmRydER6Y2xUMlFEQm5Gb2p5RlEzM3BuRnJaZE80L2RkMmgvZVRvWFIrK29CdkFIOEpDTzhlSVhtMWJHcVppczBBc2JIYjByTDVCeWNPNUNCbC9ncHFGOE9YWHdkQ2lEeGE3dWIwRW9TYStDMVI1U3k2Z3FkS3c4QUZLaFhHb3VFVFc3TUNTZUZhR1FRdzU0SFFTZjZpT3drdzVBRkNsMEpXN3VuQk5IelRjNzkyMDhsNW1obFNMam1wT1VyRTlESFl2ZVgySnBxN3JvcURUVVZUWCtxZUwyLzh2NS92SXRJQ1dyMW1sN0YwNGs4VXlSMXp3d0s3UTBLSFZRYXJjbUdGaTVCVm5mTWIvRVZpQkZGcXQxWlQyZVYrK2U1TlBjeVNJa2dQM09OckxYeFJ4c3FybTlaWUM5V1Y3Z1liL0FUd2tzM281SmJzbW50czVvNWJkS21PeFRpaWRCdG5GUWdXN3VTcHVSZE51TllYYW1ZdlIrRTh4WGgyUXFRQXVRNWZsZTEzSHVDM2JXcHErZDVtNWVpQ1BSTFZmZVpVQlpud1RFTHRaajFNNlQ5ZUJsaWcvVTNDWXRocUpMd1NUZUhzekNBMThXNlgwbVh3V1M5YkozdWZtN3g2Sm5LUDVJV2l6SnlCRDRKRWpCbjlyQjZTVVpMTnRQdDB0ZmtaWEI0YThERUpzcmRncjJBc3AvNzBJUnlDekZoOG9XcTd5NWdSUlFIVDRHcmt4Z1F5bXdiRjMxK3hpYVJTYlVwalQ1QTZZUkFycnlKQUZLWGRaY1RFMk5sUHhIRjQ2c2pKdmU0Sm1icVgxTE44K1RBdDR5NlFna1pqOXMvL3daeGU3MWFEaVRsc3Y5OVJrK1B2NkxRcnF0cHNBR2tMR1dsTVh4Tzc1MytPRU50d1lwd3hUNlh1eEpuQVBoZ0I4QTVOdy9tTWxXOS94RTF3dnViWmZTYU9jRGJHdC9uYUlLY3VkaEVqNWxMZ0hjMjJNZkRobTQ4Y2paS24vWVllNDdsL2RST0JrWHd6TElRUHVQbTl0M2U3MmZZVmVjalM3d3NzTWR6VkNzSXNULzVPOTdST1YxL3JkQmVVNGFxZG10TzR3b0NPZThZbkJaTjdYVUQ5TTZsaTE3MU9PcGRYcHp2RC93ZG5pemdyekY1MFBrbU82eFJEUkxzYlBacEdyUk11T0lCaWlHMWtNaUp4US9Rc1JJTXpqVFVvR2xvL09yRlU5TmFwYXhwNEFrckpDVUtqV245QVIyQzFJVnhXRjB3VVNYQTVEZWVCb0UyREF0WHhoK3FnNVA4S1VCSitjT1VWLzlsUDl3bCsycFN4M0ZwWWZwdkxvTmdUSFFBSGdsNU5XbzRtb2ZIVzBTRmkrM0ZDL2R0L21HVlhiSS9UQ0MxbHR0bWhYMm9oV2pHRWkzNC9MV3FXWE1zWDh4aGpicThDWmFodzdZMitZVzVGdmcwU2NHRDBCT3hvNzdGRDF3MWxwQ0RYNE9MYk1aQzRJNldOdUhLblFZNnZIN2plRzJOcnBWcEFZWUJyajVvYzd2cEw4TXB3U2pGYmY3Rm1uOFpwSjBwTWRyN2ozMmF1bXloS1YvM0lLRDI4RUhjV2Nrank1K3R3Y0ZjNkRtZUtMZVpoS0pVNE5JVzVNNHlhc2VHL05QWDNPcTdQbm5USFFiWlRMaDEzS09ReUx1SURWMk0rOXVRa0RtTG1nWithem4zODZkYXB4bUZ2RGZMWXhxbDh1WmUvblJuWU9HMk1PaHBGblRybU45UDVob0IybC9FZmxlT2FUT0JWNms0ekZrR2c3ZkhtczN2OEpIb21DU1QyalNudTg3SnAzTnhldmpRRys3YWxvdEpqcDZvemczU2lPdWw3SDIrRDJwUWJ6RVFlNVpwdG5ZdHNBSTBiaWtybTFURGRYRWZ0TXlhU0RENVRWZklLNENBOTJMeHpCRzlsa2ttSGVuMzUzV29sb3FCeVNGdUcrZHFWZkZENzJlVHVJZWVaWStoK2p3ZVBrK3ExT0RDWlVyZk9FNE94ajBZWmx5MzZVZlFndy93VnVEeVRjQ0ZRM280V0VJODVMeHpxcTUwUEtlb1EyN0s5aEpnR1dsbDNjSDFEbWJaY205U0wzSlV0bXVONCtCMk5HV2VWQzdhRHhrZVlkb2FZcmdlQ0F0RW5XRHFScFFMaW9TK3Z1YmpkczBQV1RvbnhXTHB0b2EzQUpoamQ1TWl1QnBxaFpLQU1qNjl6cmY0WkVqQW0zbHM4ajBrdERDTHF6MXJEd2VOeDF0OHRlazY3ZFRhVXRhQlhQSldEN0VUYmE3Y1NGU1hLd0pTUklzQXkzSmdFR3dQc1FIN0ZnaVplRDMybVpEME9POW1mTXkxRU5ja0NaQTRVQUM5TEVVdEllYzJtQ2QySGcvL1MyQ05XYVhBcVVtY3N1UHdIeDBNdzFmeUt4N29MWk9YVzZXTDY1QjBXci9GVTZ0ZWo2YlBHMnkzRklHQlI2S1NhWkRmOUtmbm0vT3B3d1BRektaZVQvMm9qcnNpT1lXOUR4djR3VTA5ZUtBSTdBMG4velZ5dUxpekpnL2JNdnRsbTRiUFYxZzZBRVpIRGQ4RWkyNm1uRDBmRG80eDMrd1N1Um44c1UwaUdsK2RGaDZubHpmNDMwZlVwdmFaMisrQTdiaGFwZGNTV3h2cWZtWERHRzNuK1VjZDBBZ2l1TmhEcCttNk40dlB5V0txV0ova1VuQ0VrTmR4V3A1bEVSVk03d1MyNllpWHptNG1JWkZ3S0pvNDVFaGhOakZJc2JodTdiRFUyaXd5RklZUG84Z09SMS9OUDhFRFpJelpSUWpIYTJuRFVtL2kxWHVqNzFPb2x6cW0wcWVGY3VaNmZVbFcra0k4VnJEdFU2aHRoQXNKOHVGL2Z1TmRkbGJ0aytBMk9pK0pIaG52QVJIUnRUUFRicHNsYlczY0NuNFAvb2djWkxlaEhXV2FqSW1jU1RpR3JmdEdmekh4OHhkMnBpWjJUQWFSVFVlNWV2RC9FejVYL0NUejhSbU5mZEZiRzAvOXJrUEp2SmJXc1hlK0pMQlBRdTBMQWx6QTVBMWV2aXVwVzNOQ1RyNUVKMU5uQ1BOeEhDTXl0UmN6Z2RxWXNxOXZuVWtqVWltdDNEaVdkNUxOdXg4RXVpMkc2SWYwRFdiNG1uSUZDcW4yU0dBZWUxZEIzR0NFTHBNUllHQisyK0RoT2xkb2xOSHdYVXkvNzNYOHJRWm0vU2wweUdZS05paHh1em4yUlYwbXQvQmh1NWJCc1M0aE5iVGRXV3h3WE15U25ja3p2dDhRbnFhalpBMVdQeEYzbmhRN1JLS01VQTY1Q2dGT0NZKzdoWXdrK2lQbEZIckNjTkd3QVBLanU1YjdkVEN6eWdXeUpzMmpVNTFwbWRCa014T3puYlRNRjlSQzBqNnVFNVB4OGlPcjVxR0dmZXhNTXg1eVNMejdOOUFzOHFlTmFvN3RraFg0QVlmZHZnY0ZleFExYUdxOTMvSGVDcTFIOVRkdENRVDBQbkN5Umx4eUZoTGRIbzFmVXJzVTBXRFBBbldSUHR2MnhhY0FmVVdYV2NZN3ZGYjlUWW9XZVU0dWJzeUhtRUh2Vk81Szg0ZUJ0UWtHa3BpTW5nV3lSclNnREJ6c3FYK0JNajBhMC9sYjBlNExneENqZ3Z6YlUvem9Zc3FoS1VhSGtVMjFLV3dLK2ZDUUIrTXB3bjdkcThYaVh6RlBLRUFPQXVsSDY2bXR1eCtoZ2s0b0ZsRURPWWs5b3FWTUtLYmx0Q25yU1NnbUx2aDhFVC9VaEZTR0ViUE55MlRub0NDeHZld2t1VUVscERjZWdpbCtKK2ZnWGRyYVBZVGVCemMvSmRaZkNwM2JDdTFmVVdSMUQyQjh0RmtvdTdmckI3RUgrWDA2eFYvakxTNEJwQUpjY1ErVTFvSk1GRXRNYjlSdlZNY0ZBWVQ0bjJTYjRPVEg0UityRGRocVBMTk5xTkNsQzUzdDhiYnE4TSs3RkJxUUlnSHNwMTVWNE43WCtxS3pVRlRSUlZhOHBKSEZuWHh6NnNRVnBBZ3pvNnh2WGw1eWhTbndWNDRJbDg5QXBFMHdUcHl0RktjaVZaamFHQTdDb2VZakNIL2xWdGpjckM2WUhpRXlVZmFqVGpEMTJ6aDhnaHJWSjBSRjFqZE01SGp0ZUlhMTh4RzFkQ1ZXZ082NXBZSlVuQ214NW4xaXlLaTVnajU5NVYyRnN3eXVpMis0QmdBMUU5TnhaRk1EeXFFckt5b0JUZ2p1OGpiWThCbDBHT0dRcHdBVnpSNXYzN2JjS2FvN0gveHFiaDVYOGpsaExGK3lIbkQycmVOL3QySDlEVHMzT0Y4TFN2VU4ydG9iL01kcWhpeHMydjBremNlQW9UL1U4MXZtbWg2ZjNMKzhKZDdZZlVncmF5M2U2b0ZGSnBNMysxVWVkY0dkQzh6ZWJOSXd5U0RnZzVMb250blZhRk0xS2FyZG1wa3luc2t4eEtrQmx2VDJjdmk5SW53L0llZDBzUEIvSjkzOGxxczlqRGV0MDVpWi9DMS9pbTBON0lscmVkaXZsVnQ2a0hxemdBbEVTSXV4MTFRRmEyNFZvZW52ZHF0NVhFZndkV1JkYTJUZTBjTnNvOVN1ajBabnZvaXNyZENoOSt6bVJNWnNBK1FuZzNzYVJFRWRZdHpseVdYSHpYTERrVDFEeURjdXJoRzFyRGs1b0F6dFpZWE5QenFWY1BCenV3RlU2akNpTHd5NlFKN25YQ29hSEhNRmN0TFZpQWRtaWpDcXBhdzdFOFRiYlU0NjBnTkZmVTdtTTgxWU10OXlhR1ZFeUlXUWtUeWNxMUpiQTNrUVpMK1ZONnhuc0lKdHVGSjR2RnNJM2xDN1dMZWZ6U0h3cFpPb01PRHFqQ0JOMXRjNEUySHExbC90MW5NS0xSRXZLZnR6aGpnWmRyNHgvTFliRGJxL0ZvUStmUDNTQTZjZGJKTmhDcWl3K2JYS1VBMFBxODhHdkNnSUJ3aXNxbkJuZ2JtNDVtcEVROG1UdzhXeHJtL0pacTgzektaTERQQnovanlaUUtkSG9tTXhnRGJua2pGTlE5UnVUSHlzVklDcVFuYkh4MHpLRFpUSVNFNTQxRkRZOHFYbksyc0NIWEtvd0lWMEFqSHAzdThsTWlqcFl0b0FTZHMxem05MmdxQjVqeWVjMzczUmlnRittVFRnMmdzbkpOcUZya2t3YzBoazlIWFFGdVprdlFjNWhSNWNpMVNKM1VCTW9Zbzl6N0lLWlhycmFKaHJhUGhvWW5mRlR6bU5RV25FQTJYY2N4NEdUMTE2WTFPcFpvTnNnQnRTVlVqSmxDR3V3WWZ5NEFVMXRuWlhFd21SSGprWDhmS1ROSWRkMUhnQkw1Y2hPNVpYdFVTam92cnFGdFhxeHJUUmhMQW9QZVVlRnYwYTE3eVdjTVU1Yy9XL0wrelBlclRJZUJjQ0dkRC9UY3ZNVFBkV1ZKeFdLQ05CaVNUOHgyY1NkUS9pdGZUL1hINDBIRVBkRUF3TE5GMTNOT1NKb1BkMHFvbkhRMjlLVnEwdFQvakFER3BTbkVWbFo2ckhjYVd6ZVEwL0RqOENlbEdRL0lweDNjcSs4dEhaQW8xU2w1SXN5d0hwTnJacW56bWF4dktCOUlsbGFtaHVpWDZKbi9ETnIyQ3k5cE1oNnYxVXdlMi9FUk9ldGxSNUcxakRud3g3TkR4S0xxOGprdTNZUkVFZzQ5YWxiT0JVclB3cU53WEwveUNuZE1oSlJoRnlwQ0ZJdGN1eFFHMmN6eGszRGVydS9JWHBrYWNNWHhnNnBpd3l3OHdiYlg1cnNEanA0QTlIMno2NVo3U0ZQWUgrWXJYOHJ2bVk1WkVNMGQ0Q0tOSHV6WGdzTURqWTdUR2hjNlM1WVFVbWt1QmMvbTI5ZUM0VUdic0R4LzdFWUFkZTV1anNQSnRoSzF4ZkVwb3haaXJHUC9aU1p5TVVGZXU0N3pzWTVnTGhkR0FVSXdXckM5NFo5R3J6dnhqcmxzTWhBRWc5dHNLUElPcjY3N0VWY0NLaHRocndmWDhMMUtpSVI5Ny9VbEZpWTltTEVxV1Baa012WjdvTHB0NFNsVU1aMEJHVVN3cjhwZmVURWVnRVI0K0dWdjkyQ2JvUXN4ZjVLSEFpNXkzcG15NVdaU2JmNjVidFcxVVFyZ1FwbENNaEdkNW9uNEp0dUFkRjhBNkE5RFc5V3RmbEpobGdDdWZzU2xZeWduRXVxQ3prNENPSk13QzlyT1FLbXRYbTJzSEVoZ0ovRklFM3d0MW5RWmtreG9UZzkrZUlUQkVsZjVDUk52a2d2L2JldGdrWWxWZlBJSE91aFBnRGdLKytpemduSExTY2M5YnpTRGpzTWF3OXdKTkxVNWcycUI1LzBqS204elY4NU4xRW1lRFhjUkdQWStnL3E3dDRYa2VObk1GTHZSVjEwU3RYdS9aL000NVg2d0t2SUNEMGhLZ1hld3BsRGtPWDIvTFkxZW5jaWN1VUFScktMNlp1WlY5ZlRCNXI1MldLdTZMZTBqMjgzT2xHRFRZbGpxbHM1T0FnNyt4SUw1SkdwRFJnOEZnMi90Q0duV0FzZlZZTHB4bFBsMGxyMlVwV2xSbUJOYWFRT1hQWng1ejVZVE94V1NiZTVZbktTWHAzaGdVcC9kN2l4aUFXRkkyUjFZZ3JqU0N3VURXWTNGbXZOZHg3SGdQMm1ILzNUSHJDdGxUNVpEYXZSNzNEZzlFUGxKSU9aNzJLTThaSEVOU0xkK3VsNW9QVi9LNlpxaCsxaHBsZFU1SVJLOG9oZ3pWa1hJMk9zWTIveC9va2NhKzZxckVVam1nV2luREZVV2V5Qng1eEQxWGJ5Sjc0ZHhpOHdHRmxGYnMyb3VIRXRPVkcrMG01WVpOWDQxbWlMWkRYWFdiN0ROT1drY3lGcjhXVm53cVZpcGg3VC9xYUNYOUV6Z0lvN2lZMlVqTVdSQTA1TWMxMVFyeDhTK3ArUjJuWWVvOEJhVmx0Z2xDWkhaelRzZ0duUnF5K29aY0NsaHR3WWU1dms3c2gxWk5aZW03ZnpnUUtwZ3M1OWlpaWFJZ1dsNDlma2VYTjFpUDFDb05NY09ldEtwU2ZVNFdZZ083aHVzY2dJdjlGV09sU1g4WTdwWllSZWxHZnFSVGFXd3FpTGNidlRlcmFjR3oreUlsR1Rydy9yd1ZBaG1CdkIrUmpDVE1QR2tpOHhEcnZHMDlIUmJDNGZ4eVRBZWQ3OE0wYjNYMzJ3dm9XY05YQVNSNkxOUzJOUGVhUXhwN3dyamt6QzVUSVdmWlpuNDlBeDROandyRGVLdjhWdzI2OElER0h5Mjl2S3owMmk1WEMycE9rRFRnS3U1YTZaOHQ0K0NuN2ZWV2h6cGt1WDBqNExIaFJiNVJxZG1zbENMK1hWcWRyc2xma3VOaHBYZ0NCcTdoWjJYS0RPeFBSVlhlNys4MzI5b3dwcEtZREo5NXRHLzV5UjU3WGVKTjNvQTkxTzJXMHNRT0I1Q09KZE9DVGlCMEdtKzhBSFZmY25qTHozbFJlK3ZYSWF6dVpwYnk0ck1ZYURiSWJBQ1pQVndwdllEMjl4ZHlGTzBJUDlqVlZvaXpzdHhZTkZON0dUZEdyZlF2OW11Q2RZcGROenVOeGtCejdtRHRvWStLa2R3Qm53WUhJQ3ZwK3hPbytmYlBqeE9lZkNTZG1ORG9GQ0M2anVmN21hcHYvaFYzWWlFUmxtRUpsZFhpZ0hCUTBzNWNJcjJXQ0xMNzF6Rkh1ZmRHejFYRjZLc2toK1R6VXBCUVR4YXNpYWZjNHZRVWJ6U2plSjI5ZE5jbjQ2MFVId1ZMc1hwM2NROTYwVlNXei9PRjVaMVpRdFdlQU1ST1dMTjlvUXliTFJRM244RitrY1RkZTk5dnpKbEVCTHEwQ296VXRtU0NxTEdGSUc0MWphS1pGYlVVajlpekJPS0ZNSzlMeU0zeXcyNkd4NE15RWlpRkUxRlhodGF4NzRVNENKa2FPYlJ4UFQ2VHhOOG9STUxrTTJOVVJpcElsUWhXSENvbHBqT1pXeitKQnE2dkV3a2h1QzhOb1ZqNVJpYmN2YlpTM0FnYkd0ZkVydTV3YngzeUpKRXlzeXVrK1BNSUl5RkV5WGpnQ1BVT2tiS2JPUUhhbi9mZEF2dVp3TGlUdXRQUTJYaVRBdnRNWGlFeEpDdDVlMVZRdmpvbVVoL0hrQUNERjU5dXZtUXRBZlZSYXltTE9kdy96Q243cm1ibnhWb2Zoc0EvRTgzZ2psR3RYelRDVVlLejRtY0JMWG9jOU9JWG5XOCs0Z1NDYlpnTERHM3duU3lSRmZFOHNNOFVZenZVb2VDeTFFY1NPRGpOVURSVFNUU0hiaWlHa3ZtTm94bVM1SFBOV3JZSTRUZUhFTmhFWmFlUjM0eHFudFUydmF0a0JHSDI4SWsxSnA1KzE4SkVES0tDR2w4RVJLdHVtR1BsdXE1RkpDT3NKaTE2QVVBZWtoY3Roa1pKQ3lsRXNnZmVlNmlTUjNMam1Va1ErMzJhZHQxbk1nZCtxOHRwM25ORnZ6Q05LUW9XWCtibTV3QjFxUzZGd1dOSHZMZ05BWnlYTEE5K1JOVElVTzFydE4rNjMxN2FGU0xwMStsTHRreWNVSk5SSTFUUVdsMGMwbXBVSGZvNDVrcWt1elBIdENwdzZmc1hCYkI1dCtXVFNEMWZubXRrOFRjV0hqRm0vcnZGbzJrc2JJVEdiVGhlbXNReDZibWxKL1c5K3c3U3ZoVHgrQ3JZL2lXcldtSW5ZdVc2RlEvRjFOUkV5ZzVRaGUzaEhOTlk4MEttNXFCSlVFeUxEZ0dHTlZ2UVpULzhaVGg3NDdQNlpiUWFGWHJ0MURSTWR2ejFrVWpsSXhKbFJNY3M1Skliemx3UzBxclpGb1VuYkVpUHRpMHFHaHZ3YWhZUjRvY1JTbWo4SUZLalFtaTlvUDNpTENkQjVsOHRBR2orTkZyZUNoTHhWMUovbW9qOExRTjNYUFREaU50TitiZUFpakhzMUp5ei9EKytlaUgvSEdsQkpZREo2QWZRYXJqVGphcll3KzlFM0I1bXI1NnV4c2ZkV09KZmZiSW8yeXp6VVQ5OWxWcDFsVmpSWFN1YlR1ZThlL3pBbzFLdTVoQ2VnZDVlQW5XcW5xUVR3U21FRjk4TlU4Z0JrUTlqWXI0UTZkMXRNNXEzYUQ4elJibjBndDZRcFRZZTc1Mi9qb1IvZmFVaE5PZ0E0RTlZdWNLQit0TkdpNC8yMmFScTh4TjVwL3JXWlBzMW1JcU5xRnFSb1RmYXZBSDc0dVlIQnlGWHdzMiswS09hcmNidzdwZ05nR25JM0dZR1Q5ejV0dzRuM2JISlRTMDdmd3IxUU9KQU5KV2R6UWhWUFVpRHQ4M21WODJ6NnJPLzA0YjRRZElkV3MyUDllMkZNRjIzVS96WW9zZGRoaEpDOE5KeHMzN2JPOE1SQXdnYlNVK3J1MHJ5VHNIUGpMdjQ4UWpmSjN4L1dLcXFzdC9YSWoyNFYraEJ6TXZXL2F5d1haVk1keVl4ZUpET1doS2d2TTljL09MLzM5S1lPazZmdjVaWmJPcGs2NXU1M2YvbmZIUDdtclBUU0IrY2FrbmxVUWx4ckJSSW02bytmWE9uRVlyNWdrQUc5d29hOE5tTmcwTStHd2NGOGVuM2NHRm5LQjFkN29QY3F5V21pR252YkErMDVWUWpyU0FSbThHZ1dCZGc2YzBzSHRLOEUrL1A3N0t2SHFuZ3hnYjRWTVRhL3JNK3lhS3FkTHJUcUN4U3ZYcWZuU1J0OGxsM0FNRkQ3Q3huYVpJMFovVHFnYkFjcDVqUzA3SlJhcjlWdDljbGNYZnRBOFhGQktsdnd0RDZEeXdtdFVNc2kzYUthWmt6MWhkSkp1ME8zTzdTV2pZSmxZNTBjVSs5MXZRM3NRdG5SZXZXWlc0QjdKUkM3WVZ0bThVelErdXNodWtkRlNkQjFZU0E3bkNZdjlOUkhPY3FNdDU4cGx3a1ZaK3JhMDNFa2JUaXkxREJnanJiL01uOUo0UzljZFFMcXVRcnNyWTdoNFZFMzVvbEJBaUIvN3BTend3c0hyajAzZExQQWdrYm1pVllJeE85VCt5eGViaUN3VzhkZlJDWU5zcCtMMS90M2RscVZONzlMWmdGZWtFeXZyMFJpVWpKcUVNcUxtNDJYWlFtSXJ4R1VFZDl1NG5yNGRrWnJsOVVvQzhkbFg5VUF2SmpreHNiTFlkdjVZNzU4enZ1aTNHUmhnQnplZEhvVnFaYkVHQnFKOWJGUUhsdlBLUzdFY1FOa2hWT2hOL1orRkw2OUVYUDJQZTZUbldzZi93MEV1aUk5RXhReXIzTGgxWlJPQ2lVLzZrQndKODhWTmdhZlRLcHhVN1kvbXIydUZ1NDFxREhHcExMZUtCa1NkeUlEUm5MclRldkx4dC82d09yVS9IOEY1TGN1dU5tL3ZRNzBlMkpZWUFXN1pyWEJOME5STExDcnV3VzlXbEQ2SDBTbUhZMmRRUXNPc0FmNHEzV0dPV3VYVkN1WjBtdlRIN0JNNjE1VnptU3ZNTDlOeGF1NnBnSHJFOHNUOWdXcnRiTm5XeWRhYTZxN01uQm45dDdPd0Vtc0VUa0NOU3VTbDlFbGE3VmVsNUFuZjh5NkhyUzlVclR1VTU1VlQ3WnFFU2EvRHhScHFqT0F1VFN4bFJMVDN2MTNVdW5hYm5GMUMvWUIyRjZCSXpEazFJejk4OENsc3o3c2tTWUNYL3lkam43SG4xNFYxYjJoZWVaYjQxc1NXR2pNbDZmdnhJV2ExZWtjdngxK2Q4anNPUjN3S1VwcHdzR29oT0RTRGdZc1k4dWhFVnYzMGlqM0ptV0ZvT1ZnS2xmbTVvZ1QzTlZ4OEdPVkpPWXRVTHV1a0V3djVLMExBM2N0UWFPWmw2NlpwQnFkSXFabkZVOTB3QkIvdC95b3ZucTJXV3oyUlJEVlJ0MnFEQlByOXRuQ0tUL29RcWR4bzZ5ckFEajBMVzAxZnZSSG8zQlVOSlBLSXZCU2xiOUY1eHN3MkoraFhvWlByUWp0MGdSWGRBTENVVzFtMnhQTlhmclZXZnNNbkVTaEZXS1QxNWd2ZjJjZlpucmo5QXo2N1BCM010MGx4UW5GTUFlRFk2dHAvUlpGOFpMOWdOeU9JUXhQaVVGZUlJUWFtMGJpU2hmOFppdFhhZFhzRnhmOFIyQlpaWkhLaXAwWVgxb0ZSTFg1aTE1UFV5c1VkbmFyVTJqS0hEb0FLTzltUEdHWU1PUDhCRmo2b0Z4UngrTVVHaVlham1tYy9WVG5hSXpNTHpuTjQ4RFVSK016b3RlbDJFUk5TQ1pNU2h6V0lITUREREFzbnd1bXNaajlaSEFnNndnK2J6QXdsWGtwZjNNZDNONGt5WEFRNUFqQ09IeXdnVG9XTWJScjhJeTJMS0JraHRKNkZZc0c3THljdHhMd0Q2dUdaLzJBeWNTdVBIcjJxeUpBdWY3KzNWenVOdmpEa0h2UWYwYnl1S3F4MCtSSElxLzg2WDJ0eExUU0dNbG4xNFJqcWZXS1g4YjhiZG53S1dabXFsOHk2T2pQRXlzazU1bytBZnpkNDNEbTRyaWZRTGc2RzhiSDcreE9FT3V4eS9wblQ2VEVZUGpCZlhhNDJVOVVTV3M4bzc2R0xKM3RhbmY5ZlNJd0FYWXlzWTZaNnZ6RjVXZ1hMZUs3SndJRGhvY2NReGhIdXVtM2dmRzdodXFNWDZlejlwSDlBbTJTc1NOaFhzMkdMSERpQnVuUG01K3phSGFLSXRiUmVYN09GNEZpL3V1MUM1ZnArZm9Sd2dmQmNpSytWYlpOKzM5aE1lTWhOYVZqRkswVnpyL0Ria0NOdjE4amVsdWx0NlhHZm12RHlNUzVkUXZpL1ZyTUU5N21iM2RXZGdtaVB1YnFKR0lmTWRKRUZQdnVyMWpESVhyWnRWMkpJN2FuM0FBWk9QSWNQODVqRFpDZXMyWUhYYmFtM2hsdSt6dUpMdHdsa1UvT3BxTmNFRWNKWXRBRGhEVks3NWZtNzMrQVhQT1hyTjNIRWljaWNIWVhZeko2MWYxZ3BDZUFMTWJDMmM2amlmQzlTZ1FXNnEzL1ZRNWxUOUVtOGNRV3AyQ1lxcGtLTFpBaHlmSU1hS01FTTFpNUs2ZFFLd21wQ2xORmdpVTdEelZ2UTE4cnRpRmFTOWUwVElTZHM4a1IwazJRZk1XQUo0NHd5SlBHQStZaUhHY25TbUE2SjYzL2ZnM3hLNTlrSjlsOU5vTFUxM2o4eEtNL2N5QU9YQ3pJY1B1ZzFWOEtOaFRaZmg0WnJOSlJRdU85enR4ejBDZERkMWUweDVVbWZKYjJ3angzdXRUWll2TjZLdlVvTU9nUlJhTmRWTVJiY0pZTjVJS1R2V2ZtZ2JaOExSSW1PU1hGWkwzZzcwU0RlRUdIeE4xVmtNandUeWhIeHBGUUJGV0Zjb2hMNEt0Y2QwQlRlb3RSN3h5dWFWbjhzUU1uMC9ZR1AxWmdNV1ZiWXordHRJUEpsOVBjZG5BNWkrQm5OdXBQams2MFpjSEFqRUhzYjRRMm9VMXBkMmVrN0w4QTFxald4bFNneHpwZVdGUHYrSjByS0lDcUk3RUNBaU4rQ3lMSmRCL1FOdnFUYm5kenhPQ05LQUJCcW5mNThmY2dqS3lkM0JUbVQrT1RYWnZPOUVDS202VlNwN1JvSnVPOTN1Q2s1UDlBblltbnNodk1samtST3NHc1pEK1duMm5BVk5JTlBaUjBON3FYM2lHeFZybDlTaFlRYlc5K29KK1NnOXdjeDlwcDNPcFErbjhWSVF0RmdlZGFHekdsc3RJcEg1Ry9RYjNEQ1VjOTJQWWhCYUYyUkh5M2hpSGdrUlV1NStXb2hlYXFLdTlaK1d0NURJTEp1UWpTVVlSY1hyRExTY0t3VDdJdFlKM3dtM0l0WEJFeEVUZW84MWtLOWRZYzV2bllVUlBra2V3WXowOGNqVHFxd24yMy9OcnJZMlR5bldWcUREa1hqTldrMm5FKzZIdkZGTElQNUJ5aU9IKzVCVHdSL1F2MEV2Z0pRUGdFREt5d0dFLyswM0Q3NnF1N0VLNVoydTV0WTI0WU5UOTVnUDJMK0d4OWJmdytYWUF4aHlPVmhCM2krZk9LcEtKVzY2YmlVRlduemhxemNtMXpjRy84S1NmdzAzdGs0N3dwaG5IMHQzc292MWUrQ2IxWEJRaFg2Q3FWM3Y5OHBrajJpZHBmTm53eE1sZ0RTMTdwS1c4K0ZOVWNBWFc2aGVhbmNHTXlMVmM2RFJ3WTZ6dHBHWHpCRFFRTlQxb25QVzRHcnhYb1V2T0JyQ000TTNvNENpbEQ2aEJKMkVPQVNHbUEzR2FqUHA4ZnFrOElFOXZZcWt5VUt3bVJZd1JzbHpya2FsemFtNDhQbkFlVDBleUV5UmtKNTg0UW90Mk1yODN4aG1LWVVNMTUxdjdZYXV0dVlYWFh4eUttWk5IeDVaOTNld0hiZUVEZjU3bW9LYm54Y0V0OVJaWlgyZkZoeTRwekxaM3pDblFtV1VUSERQV2x0QitjYTN6b1hFM3EvcXNGRGU5VXF3ZE9ZUkZ4Sm5NMHNFTXpqcFIyS0RwQWRwZkVQSkRSbVVBV3Vkc2JDZTY5SktBMmFuc2Z2eW5Md0ZhNzd1L2YxemU4T0FVSGRNb3k3a0QyUmRDYUROSHVmbWt4OWI3MXpqYldUejRQL3o1WWRWTmgzM2hZUHFyL1dPVU02a1dEQWl1OWVBeHJkKzhiT3B2UGIxcVA0a0d1NmZ0RW51Q3JwUlFHcTVhaXE1MDJQZDl4bHhiVXo5ZkVIQTRVS1hROEhQRmV3VmZ2WEtIQlRwbndkc1AyMFd0UXdGRTRydEhucHYwamxHeXZpNmh2OGVFY2Z4NFhUVUtHYmtkbVBWOG80cGd3RnE0cnpWUVptSFRjSU81SHkxdHRJR3E1OStGbVRhTXduQ01CU2NCSU9BNWxYRk4rdnlmdG5HUXhLZm45eXRsNFdSMzgvb2Y4TExFc1JYM1g2L0laSldaNHhMMEFNSUZSK1JpSEx4NVRHeVo3TDh2S05QazNIY1dYVVAzTXVlVXpOaTNmY1VYYkNEck9uYm1WVGJubGhuay9Hek1GU2RLMGFMUVpLaDZlQlhTcGY0R0x2ejBheGZHbWVvWXNhMHdETDhPNWkyYmUrVC90aTJMY05jeFhwWjVvbVlvOTJpWnFkWG9qK25yZnlTVlZVa3o5T1cwRC8wcFRuRjBnZktnekNmY3M0RGplaHRpVjNKbGxoaGtVNjRLTTJGQ2RWU29iZk5qY3k3NTFLcTh2QmJKWThYSG5GSnZjVVFDSVkvekY3bEJPbmlxY1Rnem1iVjZTZlMwb2tjMkh4TE55WU1YMlkrdnlLL3VWWER6bDJVUjdjVllzdHNjd2F2RXhiSkIwdWhkT2VyRmlHZ1BjWlc2YWhFaGg4b0hsRUMyWnNCTmNvT3ZTSG5xa3Z1UU5xMnovR2dScHdCT2N0Yk0vSnJIKzZXL2ttMkd6dUFTNEI5bS8vVDkrME9lNUNwbERJZkRyd3o5NXFJVXVaYnk0aVo3d24rOGk0dDJSNDdQN2R1aU9jdXFkN1NaTDVCNXIrZ1pocVNWNXA1VjA3SFlWTmZmaldiM1ArY0x5S2Q3UmMvazdOeFdOam5mVnNEamxKYXpUWVZrVE1KN1ZFdnIwUDJiSnpXSy9zcENWTGhRZ1oxdDdnRmI3MVJzNy8zQi9EcEtxcnhielRvanNJRDhqTWRVZTJ5d0tCMytRY0g3VHM1bXhSLzlYZFhhSm1JT083OTZvNFNYZUhqUk5pSjlib0o5NlI1K2NSNGY2ODJ6TDhXb1hNbExkd1pEa0FLN3pqcTRXL3ZER09yQm9xcjhYYWxpenFyVkErM0U4dDR1MHlicm1oNmNGUjF5ZkNjdnNnUllteHpnVXBGSE5rYUJDQXRmMno2MkxZeWxTN1NQdGxPdEtRM0xlRktFOUJRaHNjZ3Q0ZXBZNklRdDhDK2NWYTZUS21OZHk0dCtaWFgrK2hnMyt4dEQvV2tHenVKUWZvMFJ4akd5aUpYR3JFTk95SGo0dEZSY3dEbU43a1VRVWprWDltamhIZ1FjQVIxUDAvdllUaDZhYWRZdWUwanA0WkxPSDFBbDZYYWJ0OXFWZWlONFdpYVlkeUZzdHpERVlvVjZ3TkpQRWNUbFFPY3VYb2VzYjJxUGkxYmxSMDVSandPcFgvdzNoRjBIUk8yT3FsdzU4WmJDODdiVUdRSjZRMG9EZ3I0eFJYZHJ6dTJ0TEVBKzEwTHRLWDY3QUtuamhyR3RFSzdqMnBxSHJBcjZ1ZXR3Q1RVdHAvRnlna0FLcmErb0E5VkRnV2x6Z1V6NXhQejBSdzgvR3luSXQ0MTJxbGNqVUNON2IzL2hqOGloeURuRnVtUlpiUnQrZThRa0tDVjVlcW91dHo4QjM1UWZLQzFsNFA3eGdYYUdZWCtxb00rWGk5NHo1S1FNZGtsL3pVWHFwcWtSMmpnYVJpWFdmTGFyb01VK1NrV2ppZFVWdHl6TVZYeDlEbGtaWXBLRklYK3pURHJuR1A0dnJpcmk1UmpJQ0RNMkdzSVkyQXR6N0pDTFZ0RU0za21JdFVBKzZ2NzluTnNxQXk0OHhaM0pyaWxjdWYvNHVrSzYwSUZKZWt5MUh1cVl3aEgvYS9PdlE0YmxlS29LZWU0citmMnNsRkJ3czlxYzZmb25GZG9aNzRlSVNYNFRaQ1BrUG9LNElQb3BHYi9HVzdXM1ZQYmgyb3B6QUpjcElWdjRrc1ljZkhZOXhuRXlBamV1YmJiMlNNTFhSR2V3Y2N4aFl5MUFNK2h4dkRmQTJFWFhNbFBmckgwRU4xN1BQbFN0K0xyU2NLTlNKRHY5eW5EMmllTUczQ3ZVM2ZuRytwTDk2djJUVVNoOER1SnpMY1o3MFZQMzB4VzlGM0RGWW9waXExTjVSa2ZObzZOL2lWYlVVY2VwUkV4SVpMS3hXdFVTVVJWSE5HMXRsUGZGVWxaQ2RXcGZKdHUvYm85d2QyanpxTjdQeGRPbkFtK1VzZWxHYUhqNUlKZ0xLM3hZL0VjaTBjSGRVN0oxRmZFbzFvVjlPTEJEK25hUjA5V2c1eGRnN1l6TmJabGd4emdaclhiT3ZXeGk5SDVSSTVwWi9xOU1xOC85bWZYd2VUeEo3dlBTdUE0WDV0aG1ZaEpZNzJIUjMva2NPZUpZZVpRT1ZJbVk3N1RKODloNU1RZlVSeTNCRGJQdGN2b1ROQjg5SG8wdDk3UGo1Nk9MSTJ5WjRFVk9mb241L1VNM1NzbDFqd3ZqWjRITzlSZnN3OWlhamN3WFhpb3RvMFNHR3paSUZodHNrVmo3dFJ0N2FDa25nYWcrVUVzRmRFd2I2ejFLWGZscjUvai9LQTVISm9Vb1dGY0JYd3ZWZGNMS1RWdEg0QW9lbm1NUmFISTBCMjRWT1BJNTJKczB2RjBsUERMT0lnQ0IvVmN3SWppbzZ0UzlmVUJVczVOaWFqWks2VnBuWTFWN1J6VnErY3ZKS1FGSGZpalFncHZjNWxNM0RjKzVUd2E2Q3ZwM090Ylc5aDVZTVhXVExwa2pqaFduYzFUZmwwWGgvVEx6WEV4UU0xc2cwTXJoMGxudGxpSVhqMGZkVEJJMzk2QUNydXhPU2dsSlRVOGVtRjAvcytmZXJPMWNhKzFiVU1BNDNKVXR3WWRRQzEzMjc2bzJxSkdFTE8zTHR4V0lET2FDeXpHc0M2aHlKTnplVTI4L0JXVld6NDU0VVY5ZXhkaUpjbG5YUFpSdWdhY0FuN1lQUG85LzhOTkdaN1pZcXNiNmxEMEZBN3krTExSN1pxem9Pby9pYmxROExDVmczcWkxcThScmFwVmhXc205YTlxUTc0MGtoSFM1ZmxRUlNMVzVRMW1yRXU0MjY5U0xHWjdKL0UwQ1BJTFQwM1k4MDdSazhORkdpY0VFdE12Zis2SlByMnlhVUFvaUk5QjhnckEycGgzYUMvV3d2d2xqemxjaGZoWEo1WFZPc3M5UkZ5QUNGUEx5UVB2N29FZ0dZRGs5ODdzaUd5eDlBRU4xUmJZRVJJNkpPS1RrN2FyTWpxdWIzeEJGV3ArTE1XdzZuZ2tNWkJmbzl0RUFEaVhJOWY2d2hyb1oweXJSM0dhR1JiakR4Vm9ZTCt5dlZIczkxSXkvZGtvZGJVT0tpRjRpcWRYc0pxZUpLUHBZYldLWUQ2NHEra1ZlblhhUVNGanRtOStLMFBVeCtiQjBrMzBFbHYzalBpUjBFZ2o5WGI1RC9PL2dOeFljODdEcmJRUDZRZmFkRGZZL0JySHM1QlFPY0JNSGZ1eXE3U1ZYY3lSdTROZmJCeGV6RDhaczlwamNZMVpHRm1CODMyNlQrWUxvaW9xcUlmRVVXNlgrS3JsUFdzSXd3UjZscUR6U0EwQnFKdVA1S2Z5VE16UG52bWs3Tld1bldtWlZFNloraXI4d3hDN2g3c0RlRFlLRGRvTm4yeGxXSkVvL3hldXVsQ3N3Z0N4OUt0SjEzdG13YlBJZjVxSjR1NDBrQUVRZFFxS2prOFYwQlEvWEcrNjJJTldMOVpDNGx4Q2U5TlE3UGwzb1RhYm5DU2V1UWMreHU1OXZHMVNIWHduaWE0akFRZ2J4QWwvUlgxcEtYUk4xKy9PQjRxd3c4cHlrdDJhUDUwTTBWTjBqMm5Lc2lROHJac3gyaUV0aWVoQjYyQjE0dEVLZjA4VFNwTVhKNHlhUUhMV21pUXBrN0xmRktnOUEwZDNaam44R1NqWEczN3BtYzQ2VnNPM1MrYWJySFRGVk9WblRLV2pMWmdTOVp0c3l4cm9DKzl4VXJSdWdhUWN3TzNYRjBpNEpzN0tlcVNVSHFaRGV3RU5rSXoyYjJtbk5KdVl2OGhGbVliWWdUS3lRbTQzRm12MDhBbUtGWGN3WWFWNy9uN1JmNTArdUh4RzZlS05YcDVsY2R2OWFYTmc5eDhib1p0KzdvMlZ1ZUEybytrQmtiVmhSNElnRlZuUS9uT0NhbG9sanUya2tiMzFHSHJ0N3ZtQk5HekdGQWZlbHNCSjd3VHlMOGpjNWpEUHFubWJyQnJGYVUxWXlGc0Yyck42MnhuU3JJT2NQTHArbDgzaWd4T3MzOUpuOTBUb1U5a1ZqK2dUVlpwRG1tNTV0QWgwSXdWSGFxNlpkbjgzMHhENVlVQjN6TUxiY0dhNDgvRVdJK1hHWmtsTU45eFhxNjFrUWJmM2syKzJMK2cvdVBhZENiVTZHTExuNTRiRUNPbWd2QUt5RVRDK0FPNTh4TEg3L1hJbWNkRVFTRElTU0V2alNrUE1MbEJzRk82NmI2Zm15REpNakNreUVCWjE4Z29wbU9ibWpCeUNxU0hiSy9yVmJNTE9ZTzV4V2pkU3RSZXpnUUxad043c2lvYk9vQ2NtQUMrblI2eUVtV01vOFJqMmVoNWVjUk5ORnVQeVI1SzhlRm1mc05aSWdqeXprQkEzbGJZQWc4ci81R3FCMnVlN3lYZU5Eb3dMREpUS3AyK3lYcjdPeTZLaUZ2Zko0bTFKM1BIMFY5SFBNckdqd3gxS2Ura04vMFN1QUQ4VHpxR0ZtcHp0UUdVWnZkczE3Um5EMzU5cTl5RnoxS1VSR1d2d3VjY2lxSUluZnZySnVER3pJb05Tb1IrUytFeGtLdFAvU3g2SEROYy9oL3V2TEJqdjlZazRZQkhyamdSMWdwbmlkTGU1NnFianAxbURvbXQ5bmtTMUdkOTl6NEhLMkZoYkVqMmpwWUhCcTRSMFVJLzA4cTdZOE40dWFDTllUMktVeHdmaEh1VjU4MG5qVmtEclZlNndIVHpmQk9JbTlqNkd1SnN6eURWTUd3Uk1mOE03aytFSG5MYWJhM2NEcndlaTgxTGw4RDRQTVhVUjZhc01YWGZXdDdmS1hpUnVaSGd2YTQxNU9aaDN3TnFYQnIxMzg5WEdZTno4NThDNEh3UTR6S1paOHRXRDRNQjgyeFJkQnQ3RkZkQ2JVZlhDbGpFbWNWWkhVSUROUlVnWGYvQTN4TGhDaW5XYnFDSENjSEYxVlFwRVFnb2JNb0UvbGdHZUV5UytvaW1scm9oNWZ0MVc1VWNJRWRDWlB0Rk1HZzBCcGNaUXh0bkRMZVFFUG9WUnRuemE2K1ZFLzBuVnZ6azdJekRFUllRRUZTUS9wc2N1THZVMlFidzlPSS9RbWJDUDRsZkFQVHRndW1aOXVjZ21tZ1VYbUdzRE1oQjZERkRKSnVIUmc0UzVYTk94RzVQNlBVbjJBSThQbDZya094VWxwakJLWVRsb1AxdktSSEZxVFZoUjUwdmhuUTRNajRnWHcwalZ6Slk5bmY3dUlIcHNoU1daRGFrNkY4QjF5VktkdGVxbVFBV1ZacUFhQXlGdFJlazhZaWtjMlUwNG5EbVNMUGNmei9JdGZ4dk9qMktUR3A2akdsT1Vlc2praW42MVdpVFVyc1ZDdDlwS3VUeFBvclN4amF3MWVESFJPd3ROK3E2UzJWSTRONlBkdWFRMllxV2RwNDJTejh2cmNPUHJHNTVVb2lOb28zVUJTcVFYdGEwdy85SnNZeHozeVZ4U3p4Y0hXYXZhNVR6Y3BvN29MUkpjMFdHYzRaR0RKWlpSa0wwY09MaUFhUHhVN05TRjFPakxSSGxZQ0ZJemEvZTdlMk5RaStnL2dVeUQwdFRaSi9nbzF1amEyVG5EaWRnUlhGR2c0emltR3M0WXV2bXVuVDBlRThaV3dhVUt6bjhJVmJ3MldxUkgrb3lMc3dEdVFEanlFMjZINnBQTW5EanQ4cng1WURPc25hWlFXL1kvcDRKUVo3eVpNVmhjbnJvZWwxQXdITU5YUGorclZpUWlYKzhuRzdBSmcyb1lxcGp5b0I1a0VxOVRzcHZFeVQ4K3NMZnQ4SDc0SzFDbDBwaWdMdG9vYm9XemRocmJiczI2RVgwZmp3V01LcHN5NUdITlhwcWpnWi9SeE5vZzE3U202aFUrczdNTjBEZGMwR3pNOENJLzRlUzlYeGs4d3cxblhJNm1hNk9IbCtCTTAzRmIydHpyaHNZODJvVkZQNENCeFBCUDhhOHdwNmVDVzcweFRRNXZzcGdpemdZbldTSTNQMzR6OUZpbStRZHEvUmovaGJZRUxTNEN5Nk9aSDRDbEhpMjlyUkVBbFQ0LzdnZmhsRFBhWktNWHNDUXREa1E0citzb1Y2NTk1K05LeENVTFROMEtOYVNxVEIzUnIvY2toZTJUNHJudkZNZ0M2cHZhbFh5T3BxVUhNdXd5UDcvMDNIS0JFZndvb0hrdnU5S2JCd1V4b3ZSMkxBc1F2RmM1SXFienZlZ1lWdUlSMGZ3cXV2czRwclkvRnlYK0ZyazB6eEY5SG54MjFVbUcxSjh6WDJlbEZSdjJjSDgwdzlPZlhsc3RFczY0OTRNMmhhOEg5MnpyRzBKNXhKYWVMcGZDc1dNb28vdW9HWEgyK2JpaDVOSVo4QWZEVVdIa2JPeGxuQjdad0ZSVjV3RmpPKzduaUs1K2tFUFpobFdUcDN1eU5UQW5PT3FzQmxMK0lwMFFJbEtRMjJjUWVSem5FMVI1ckR2emd1QmlNckoyZFZTeG5TZHZyQUVOY2YyVmlZNldyZXkyTmpSdGlwdWg1L3NKOGxxMG5lVkdqRmk4VnlVZTE1UUlsY2s2b1ZrNi9XUGk3ZUwyaFVYdWkvSnZyVE8zYW9ZTFVLb3VVb2ttc3dsQjR6VStTU0c4b1Z5TjVGNzBxa0V3UGVNTk0rT3NaaDZtNXR0d0xjSmR1UldONHJPbzF1amxTK1ovREVQVU1ZRWZpOW50QWtUNDdUakhtY1hTeFpWR3dqVjgvUGg5KzF3dC9wdHdGU3FZS0NVMk5YRHF1Qk1iSHplL0VVRjRvNGFtME9jYUdianlnS3d2NGVPWW0vTXVLdG1yMlpDcEt1QUUrZDFYaEcySk14K2RBckZkTXFKVkFMc3VWRk8vc3FUbW4rRU9ZVnR0aWVyV0h5ellXRXAweEJ3ak03UU9SeTk0NnBZcGt3Rk8zRjRneFlHYzFQbDgvRGxxOVRrMEJCSjVoeFRSaVVsQjZ1K1Jtc0FxRTlFdmxCYzVIamRYTjhxcVYxUG9kcE1GUi9uK0V1WVVZdEV6VjJGM3VkY2p4TWlCTXhJOFhRa0dGWDlDYnk1dkttQTY4TWYxeGRQbUk0c3QxL1M3aTZqYUw2N2RubFQwMGZxUktpMFpHWE9HaEErK3JjS2I0dXh1OG1RcUNLYmM2K2lpRVcrMHFtMmNlMklsVDRLaVNDUkNYVTlyWEFxTEZrWEZDbDl0ZjVFY2NHcy9odFpDTW16UExnWVdYQ2RyZS8wdjRwM25WSzVqYU9LV2VHZmpxZzJINWdCT1VsV0VBM3Q1eWFsWW8rdE5oUFJtOW1LeUNmR1VJK3F2eC9uQUZEZ2JJVkxOL3V0NWtmN055MHU3eEpLL2lybW9qbVBmdzVRU1RCYXMxdGtxK0lTQ3pwaVF0b2I5QWkxYkh3SUExRzdpTHFXbDIwNE9kVHRONnkrNUN6T3RRcW9GMnZyRXJ6NUVsSEUvSno1V0lHSEJhbXhUNXB6RkxIYUFRaUtrMUwrNFlZMUpYNXZqa0txSkk2TmUwY2R0cW9lYndhSDBpeGUvRXpmRTlEWnZteWNVcHVoWlg0Nk84RldiRWRKNzhWWXcrNzV1Y2NsVUoxa0JqaVloVlk4eEo3YXJvUGtvcUFzeXJRV3JJL3RycG9YSjJ5SlpmaGRvemg0ZHVVTEJqVmNaUXRqMGJNakRjOXdRU0g2cWtWMHJ5SkgvYm04cWNod25zWFlpNDlnMjBoY0hHRkZFYUJ1MjRiM29xM2NkZWlwZGV0QUd3bnFPSjFwU3FybWRnOHJQUTBOYWRlZHpXR2xOVE9TYzJNc29lVzU4TGwyUjQ2SWZONk9NRm9HZW9HRjcycHpKVDlGRDQwWXRXbHFGdVBHTDBtenBRMklzaitWOGRqdjBCWnhld0gzRXB5VDhWbzBuVjFrUmFZaFEvTk5BUDRodmhlZ1ZkQzBKa2hKTE5FR3BSSzdCTEN0aldDaG5ybEFGNjZoQ3d0TlIrREc1SmVKMEZOdVNGcEo1TmI4dUR0Mk9ZYmFqaG9Qclpteis5a0lHNWVJd0J3VzQ0V1ZQWTl3WFFyNXJobXZOWVhDcC9nc2I1MUkraFlqbjRWc1pLOXU4ZElSdjZEc2hraEpyVUVIL0JUS1JRbW5WSlFJbWJvTzdqZUJySFpwOGx6Q0VldnlFMzFTYnhrcU5DUTZ2NjI3S1FySFBLZ2tta1N4aGo4YWRuTzEzcU5XNG13bEp0K0lOdDZBT2NlWmZOYnJYNnpNK0p4ZUtTZDVaMlQzS0M2VE9MMnJCNFBuclFHWG5FYjh6VTByUlNzNURRWFRVUWM0QzE4Yy9OeFVnbzRNVWZHY0N4VmM5WU9FdVBHMEZ4MUxsNURnb2dncjFOZ2N2ZEttT0E1Q1hJU1JCZU9taXFnM3BPK204bVZLUEg0eTRUekkrS2hFQW5OL0x1ZDkvNUNUbjVUbDdDNGpaNGQzS3U1OTlESUZ4NTZGbGUyR1h6RXczQ3U3YUFsck5yenZhMXorb0JGZDRkaFN5algvM1lDVlZkRTdoUWhqdGlMeG4rMlpyM0FRRGNLcDkzM2FhT25HRDVzd1RscW9SajB3YU1BNE1CK1RYTTVRSlJNZzU5d1ZzUVFJa1hKRGh6WlRjTDRkQmUvM2t1WkV3NlpRaFNtR0FEWTRaVzBZQjIrS1NubjlybEdoUHI3a0tJak1leDh2aHhnd3FXQ044RGxSeTZWVVNtR3J2ekNnaC9Oam9sMDZiNjJ6M2hGYlZUZ1ZnWjlBb05jb293OFlCT09nZFRJZktUbWxKTXRTekVqTXp6amRGakgvb1RENWVza0IxTnZhUGZEVy9hbVdWVTB0emJwRmMvSFo2emlJVE1JWkI2d05xZW82S2NweFh5blBwbjVWTU5lMjY1SkZjQzk3U0VVNXpDd3ErUmlDY0xZQnhZd0hFN3YwUlBqRm9wMnFheitzdVFoWWpPd3kzQzlJWmJBVlFLTE84ZW1LeHN5QXM3V25aY1VVTjJNdXRTZzg3Q2F2VS8vT004ZFh4ek84L2pmVzZmdUhYdGhqTGZSaVZNZnhtMWJVZ0hmT1Y3bTJTeGlGbVpFUFRvNE9iV1czdk9JVFhnZmJ5MkRmQmFLbE9vSVRXUmtGQmdJNW1CY2c5RE5La1FGTG9RMFVjMUZEK1JYM0dLU1k3MzJMcjZUditpU3dZZnUvaUI2ZnRlTzlqdVVxODd6eFZBWVlNZlYrWmdPbHF3R3dTNDZXZ1BCa1ZBcVM4RmQyRjJYL3o4Z09yd3VxdXkrT1FXL3BPTUlLTjI1MFQ3OEVsS2pqRDNlVmZMcWxYbGJBYTZudDdDL3BGcFNqYXJTWENGSjRMQndnSVUrdm00cWVYN21aQTdhQUNYL1FoZGJaRGZYZDJCYlZ4VmhFbitCT1c3QXBvcWlOa3Z4d2tvUnl1NStNbHlyaVpRVWZza3FLVm92MzhRNmtpY0tUZ0Q2blFjY05JcVdCMDFsUW1idGdlbERVZkhGTndrcGxGUmRYcGdIa3BqNkhjZHdDT3lrMFh5b05qUDRlcUwzaks0S0VoRGpQNzdzRHl3b2crNENLWGU1bTdiZjhaRjEwcHRPSXM4d21hWDY5Y29qeXdVVGZrUlJQN1RydXRwblgzSXVZOUdsZDkrWDd6YVpjekFudEhqL0hzRVBCblVGdm5XYk5wbWxVOUNQbTFPV1E4Nk43TXBsWjRCOElzWVZiTDNub0wvbGk0czl5OExIaXZSQUtTclNrTjN4QU9SWlhmSHhZYUFEaGpiV2l4bTlycGNmMmR4dlIyY3hzSHE5TlFNQVBNTnpOVjh0WXRQMC9jS28xdjlkNWgwa1VLQ3IxeGpzN05EVGhzdkpESUFMU0VlY09MOTlDSUdmZklKS0xvYi9EVTY1SmJBUGdYb1hTWG54ZjJZSVQzVDZyakI2cXpJdU40OE5tTjUzbVgya0JlTmJTQ25uTlVpV3VjTVYyQzQrUUE4bzBJdjNkOTQrRFNaUDZ2THFkU2lGdDljSjFsYkQzaHo5K0ZSSkdaV0JpVUsxV0owRFRLc2NDcUhWV002M3FmSFZxUndCMGR6Zm5hRUVPUlBwekYyRUJYL0hzNFpuYmZWN2FNVS91YVFMa1UxL010SEZGamNuY01ET1F5ZzZ4R3Q2ZXVDWE1uVGVpZ01RdnFtSFVrZjNLYWVPWk5MakFneDR4dTJNT1dwRzJYVTgrZWh5dk9vNEYrTWdHMVJWZWRHOENRbzlWVXlHS3dCVTZ4cFVHTHh2Z2s3ZitjRUJ4Y0tZY2NINWJ2cnNkNmNhaEQ5cUlYRzUzK3ZDWDlFaUljUXVkd1prdis0ZUVLc0NtTHhHWDlLamc0eGdzc0l0Nm4yMGUxMEQ3WENLaUpVK3ZLcm1RMkROUDRSTmRmVmYzQ1QxZi9XTTh6dXVWaGZiV3gxWHQ5eTdrUS9Pc09JNkppcGh4RTBQRWJyMWlDcklIWVhRRVRieWIzOEVnVlU2TFNzMW1aT3g3VFAwOGcwQXhlUmN5UjA3dHRMdHNzZEl3cmU3dmRlQ1grMTJBY245Y211UXNEVkE4dTd1TUJBV28xY0x4V29nQWd3eDZRdlNwYm1yRUFkWkhNNVJtS0U2NUpJQmdLZ2pjaU0vaUhPOEU1eitGRDFXQmFuamUyVU1WNkRtcDdpdUxqZ0l3emRFVmlzOGJPSFNyVnBESmx3a3pXbnpJOE1EWUlVODkvTlE4V2NqNk9QeUtCY0VFQWgxeUl6cjZ2cml0UndUV2pOeFJaWi9KTXlyR1NyMHZNbnU4Y1JkOEo5RmlVc1FZNjhWN3lPRXY0M1NreUl5MWRWRmNLOEdZaERYUGt3SDV3b0JaTUl3VlF0RUJKZ1M0Mms2aHdtTlhGSlMvVDM5MVMvWGdiUWVVOTNqdkFVS3FTOHk3bG93alpqMHMvUmpLUzh3aDgrazVQeXZEVGVLVGw5dCs0NTg0b3Y4YnpKa3daZDVhZVl4Y1R1WDd1bFBHWmVuYUFHekhtT3Zkd0JyOGxWR2h4dEdtNzI4ZEFjUTh1TGZ6YlVjdjFRcktGOUYwQzBDTURqb0VXYVI0TWg4V1Rld29RdTNkSEdlelZMYUV2UDNWRm1kbEJLQ0oxQVNyVkZaUXFQYTdXVGRkaU5YUVVqb2NiN2syQzJuR1llUWFQNnlzSUFPSkdYTmJFQU1STER0dHJXcFg5WjkzNFowUTNjNW1zaEtDZ0ZpM0xvUnpNT2N5V1FBdlBkaldVd0FkcHZPOGpvSkhDc2hxT2F6Zk1zU1hOVldaZ2JjSEdaNjVqZFZ2WnFkSEhreFoxWFBzWnllb1g5WGtGZlJQd2UvbW1VSFducmJ4Z1RQU2pxNmEybkFhUnVKVXIzUmR5Y3B1aDF0ZHRYUk9mNzFkUDJCb2VJa2JJMk5KaTZKbDQyVkFmaU56ZU5wRUlYV2RPTVB2OVowVlBGK1diSVFicEJ4ZzhMM3JuNFd0bFVuRXlYTkJ0a0lNVzlNWjhRck1iTVNCamhyek03UlZWQVg3MXhaMWd3QmxLWWtaemFNRjkwVzl0aU90OWtmRkFpZkVxbmxHVXZHYzJLeFR1SGdvbXZDaTc1NmViT3pSdXhxVy9kY0diVnN0Qm5uVU5MS2pRd2JnVW1sZ0dZK1VYVWM2cnpvQWt0Rkk2OEtWSUhHbG1CTVlOQWlLRVUxUzMwY2ZZa2FiVXhkL0hwWWFEc011ZURuWktVVytoN09OVVEzbFZzR3JxbnNqb1FpQjRxemhqM1d0NU85WlBBWUc2NXZLOHh5T2FRT0JTKzhFWHJvMlltbWpxbGdUMjJKNHZKZEJvMitQMEM1SFNYTnVMWHV5dHMwL1NGM1ZFZDBJTU1HM0hVOWFpemxLZndjb0xBalJ0S3lwVUpxdXB1Q0Q5RWJkekloaHVxRnhhMzd5bWdWNDlYNHlqVUE1WmcveENHVUROUkV2WHJoUUduRFppTGxNdndnNUZvOHgyVjhiSFA0a2xQZGJoRUhFZVN6T29OR2djNTdQVEJPVE9UL1JxN3YzeXFUWlZZcmRJQ0NCcWNkMWFGNjF5LytORU8veXRkakNDU09weHR2T1hBWFhVZEhXZVNTSDlzSEFZbHpWY2FpcEJleVVhTkRRanRLY0xFczh3L3VGOThJVzQ3bmticWk1bGZYcXdlNml5TW5DTTQ4aE9XemYxdzBqVjYwbnZJd1YwU0FrWURtYTZUOEhNSktaYkljUHZsQnZyTUw4WldtRXI1TzFkWURFVUkyMS9saHFPSlBZYmNyZmd0REl5UDN1MEs1Yi9tTUVIa1REUUkxQ1UxRUhXR0s2U0U4OXBNYWtiVnhGWHlsUWJUaFdQbnZCNDZLVG0yOTVLRWhyTW9kZ1NmZ2YwRVVkQnUzNWdMQkVNdzJETUxTaUU5OGd1bnBsd0FaNDVJYlBhdW5ZblJrY2RvblRTQmRkTHRmaDBZREgza2tKQ1BOMUE3U21SMG9QNWFIajJKSW9NaVRLVGgvOTM2d0NVaXFmb2dlcnlML1lhN3JzKytkakRBTmNqcnZIL2lYZGRjeldTUXZvYmE4d3VQcEd1dGRLRmpTZHZzYmk3NUhZZzJ4VkEyMlN5Rk1YVUlIS0dBcDh6dzd3L0thOU83Z1JieFpyeFlnaWg4NXdOY2NZbjNZb0FIVldnSy9QbmZhaEdscjlwOUwzUlp6b0JsaFR4WUxiK1V5TUNCQWRDMk5PcUllOVpPb1JzbTlXalNLNE9vOXYvVHVtRUJTK0FnaksvVzhJMlNLbXhJOFRwbEVWcE5JV0JqU3VjNWJJSE0rQ0E2c1FzbDVxRW9pcVBZOW43WEEvSW1UWUxaVlZQYzNsb3ZRcUhWOXV5eVNWRktFZERVbTduYzl4b1RMWHRzNGZNV2RWbHI3SkVNZXZwOW9ad01oYzBWbWNKV09HL0tVUjBXWE9qWWVNS0RWSEljZnhmQjNncXNWeWhCTkg5WjJud21McmhQdU9uK1FvaHljc09PY0RuUjIzbVFLNXRBQUlYcTA3WVpHNzJ2VUkyTEUzN2NXRXM5Q2xEZm55d1Y4TXc4anBOZDNZVEJldEYwdC9PcWpLeXFNSXh5eCtkSGcyRTh0TXJyZXRVVlJ1WmM5Q2VNOS9KVDhNZG1SUFJJM2grMThTNXdRcGNIUFlVYVI5QjNNRGh0Zkh2b2xVazFpVy9ydVhvQ1ErT08ySHJTNnRVVFc2bUd6alZIbkY5YWw5UUs4U2hOQU1nNTBwRlA0NlJWcDVPdUM2WGhGYzB6QW83TXpsNjBZS1pVaFp0bjlsbVo5MEwxemliRkdSQUhaRG9ud2kvWHl4aVV5RUwydHdOeUZ4Uy9qTEhLOS9JN0xPTlVZbHNiZmdjanpFM0JYYU4zcDZGMlBYdFZrK3FrR05MM3RBbWdMdXUxeks4TSs4Z1RWWTVwZ1g0SE81bUphSUtzMGRGZ2I0aXR1dG03N1NYd1JPekZlcXYxSENpd2t4NDMxUnovcVYrVlo5QmU0NDFrNkMreDkwcktaZ093S1BoTTNVdTlONTNhY0hZamdvYnlKdFFtUk5oVXBNNjhacjF1UzNHV3UwKzhVVHE1RTBZelN2RjZGcklVOW1xTkpJZm0xMVUzVy9Rd0dyZGtKV3h4NnpibWJHTGdyb1BHWFpsZHpVUndzNEJjZGZJdFBJMWtBYkxReE43cjNlTlF2a3dTdE1kaFFnOHpQb240cS9jQ0JKMFl1c2l3M3NLTmFtSTg1SkQ1NlRRQTBtWXJkRjNxV1g0SnNOUnBCMnBER1VReDhIZlZscEwrcWFDalFXWThKMWo0NGs2cWhpK21LMkFMWHMzSktqZldoa0VlOVc5d3ozdTkyU3dUVjFTZjZkWStBWEs4Vi9CM1VBWEtwSUMrV3l5M0o0MVZmVlRVaXRNN3hWR05pUVExcUNGR0pPMlIrSUxDb1UwdU5pZVgvQ2lTQmdSL0IycWYzTFR3Q3VtVTVUZWdaeTZGT1hvZjc2RXZiZG95T3IyS2E1ZEg5aHpaQmQ0OW55N0xJdWc5eVBHUmFvQTRtRVQ5TExDSzFCSnFzNHptNFcwdzFYd3JrOWgxdHo1UmN4bElrWXV4VzIzRHR1bGM0TGtQdGUzbVEwT1BRTE83b05ieDdRVEtxTHBRa1QrUHJtNk5temNpcWlvZ0dZV21lbXJxV1BSZVpDL3pvSyt5anVvRDl4MjB0VDc3VU9RRmhLQTI1ZUhrWUp4TnE0ck5SQ1NXcldkb0NXSXZXUE9MbDRkSEJSQTRROEliVUlpTmowV3VKRmNMU1BSNW1adlJrN3RxaE5zaEp6S0oyc0V0bUlWN3Uzd29aU25hek9LTVpTVGkwTUxRSXMwZEpBSjJwckZnYkV4eWdYQ3VVUjlLZXJIdytXNVlGUUIvOHIwRjBVMUhYeUk5enNRQ3l3bi8vMlFBQkFCb0FRQUFCTndCQUFBOEJBamNDQUFBQUFBRTBBWjFBQUFJQUNRSUJBUW9DQUFNQUdWUm9hWE1nYVhNZ2IyWWdSbWx1WjJWeUlDZ3lLUT09PC9CREI-CiAgICA8L0JJUj4KICAgIDxCSVI-CiAgICAgICAgPFZlcnNpb24-CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvVmVyc2lvbj4KICAgICAgICA8Q0JFRkZWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L0NCRUZGVmVyc2lvbj4KICAgICAgICA8QklSSW5mbz4KICAgICAgICAgICAgPEludGVncml0eT5mYWxzZTwvSW50ZWdyaXR5PgogICAgICAgIDwvQklSSW5mbz4KICAgICAgICA8QkRCSW5mbz4KICAgICAgICAgICAgPEZvcm1hdD4KICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24-TW9zaXA8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgIDxUeXBlPjc8L1R5cGU-CiAgICAgICAgICAgIDwvRm9ybWF0PgogICAgICAgICAgICA8Q3JlYXRpb25EYXRlPjIwMjAtMDEtMDdUMDI6Mzg6NTIuNjcxWjwvQ3JlYXRpb25EYXRlPgogICAgICAgICAgICA8VHlwZT5GaW5nZXI8L1R5cGU-CiAgICAgICAgICAgIDxTdWJ0eXBlPlJpZ2h0IFJpbmdGaW5nZXI8L1N1YnR5cGU-CiAgICAgICAgICAgIDxMZXZlbD5SYXc8L0xldmVsPgogICAgICAgICAgICA8UHVycG9zZT5FbnJvbGw8L1B1cnBvc2U-CiAgICAgICAgICAgIDxRdWFsaXR5PgogICAgICAgICAgICAgICAgPEFsZ29yaXRobT4KICAgICAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPkhNQUM8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5TSEEtMjU2PC9UeXBlPgogICAgICAgICAgICAgICAgPC9BbGdvcml0aG0-CiAgICAgICAgICAgICAgICA8U2NvcmU-NjQ8L1Njb3JlPgogICAgICAgICAgICA8L1F1YWxpdHk-CiAgICAgICAgPC9CREJJbmZvPgogICAgICAgIDxCREI-UmtsU0FEQXlNQUFBQVlqZUFBRUJBUUFCaU00SDVnd2NEQ0FyQTdjQUFBQUFBQUVqQUVBQUR3SUFRQUlBUUFJRUFBRUI5QUgwQWZRQjlBZ0ZIUUVSQWZnQUFZaGRBQUFBREdwUUlDQU5Db2NLQUFBQUZHWjBlWEJxY0RJZ0FBQUFBR3B3TWlBQUFBQkhhbkF5YUFBQUFCWnBhR1J5QUFBQitBQUFBUkVBQVFjSEFBQUFBQUFQWTI5c2NnRUFBQUFBQUJFQUFBQWFjbVZ6SUFBQUFCSnlaWE5qbWNvQUFabktBQUVBQUFBQUFBQnFjREpqLzAvL1VRQXBBQUFBQUFFUkFBQUIrQUFBQUFBQUFBQUFBQUFCRVFBQUFmZ0FBQUFBQUFBQUFBQUJCd0VCLzJRQUl3QUJRM0psWVhSdmNqb2dTbUZ6VUdWeUlGWmxjbk5wYjI0Z01TNDVNREF1TWY5a0FCQUFBVVZ1WTBsRU9rZFNRbFF3TWY5U0FBd0FBZ0FKQUFVRUJBQUIvMXdBRTBCQVNFaFFTRWhRU0VoUVNFaFFTRWhRLzVBQUNnQUFBQUdIWlFBQi81UGZFeUFVTFBjTUJlVWZGTWhxbU56VHNad3NDdVpoNVN3bEN1T0xpdlN3LzBHR2RmVFk2NlNScHdCTHd6aHFqQXZabG01Q0lOYUFlZGtQOHIzdytza0pzMDc0Rm9DQThVQVJFaG1sbit0YU9GQkwyMkdDaWFFb0lWaHBCb0R4VUNlcGg3dU9LMXBXbnQrZ1g5VVdlNGc0M3FkcGZZRDhDUUJFTk5iQTU2R0oyOVFhRVUzYzhUU29Rd3p5eEM5eGVSS1VZSGRlYlFZN0tycnBYREhIVjRrQUpCcnEwcjJiOEpBSVdaNy9EN1VMdGxpR1NCQWVzZXlDa2k5enVPaFdnRkVGZTd6R24zd0d5TlFqZWpaRUhsN1AvWElqdjF0NzIrY0hONnRBUnNwVXNsenhyYk0waVhaVUxOYXFRTFBZOFhtNml2bVcyYVluNnVFc2RFVWZkMnNUY2pvUTFrVnN0S1JuRDRUaU9LOEpnRDhEOW5ueGJ2cFVNWlk0S1RTRzZWRWgwZmF6MjVaV1NNTEdPVzVxSTlCL25lY3NlQUdvbzJFWnU5S2wySkc0WDgwQVV4NXlleGRWdGR4bFFCOVpoOGlQRHJDclhjeVlKRys1alBLL1ZqRDZPS2RCZzdNWTFPcUEvR2NmR2UvTVRGMXJJN21CSUlhVWY2aFh2MEtBOForcXhRRjMvai9JRnhEWEtJOERZUVhQSERUdnZQS3RUUEhpdTRoc0EraVFtclJHOFkvL0dnSi92ZFhIaG5tcHd4dzBkdkpmV2cyd0hVVlZjMlM0YjJOZWwzNTY2eGlEUFRucjJtUGw1SGw4SmZGUmVueDlLdWJnZWVneVZsWmh0ZUZhTGl4OGo3dVoyc3pUaGJ5ZElmVWdLeXl4N1RCTEVyUWNQSkJXT0wxNHNUMmtucm10bmNIMHJ1OTc3TjFDZW4rUm1DTGlURWYyS2hBMGZQTEVOQjg0bzlsLzFtWnVZK1Jkd0xpSVM5SEhWck9tYUx4MjB4c0dFeEFlQ3M1SjF3dTJqaTJRcVB5Nk1HUjluYmZ1dUU0a3RvQ1d4TmNkYkZaWHRTSDJic3poZ2xBc3JwbU9UY1VsR1lXZzZNNGsyVXdyam13WHVSWE5RajRTYld0R3ZDQ3BnTWQyRGxENDRDT1prMDdNUU92cEpVNlZ0YVJBZ3ZHbXoxVVV6SzFUVXlFRXRFTkwzTDBzRHhmOHJjWHBjaXFXLzFqSm5BU2ZXZHZuNjlwRk1Ka3NmaG84VnNpajhkMUZic3JraGZTN3hrVUh3SnZXRDBEMW15blhIRkZJUk9keE5GbUJleDJwenZFK1UvMFlJZjlsdWlGQ29VMFdpaENWS1dZUFpManJ0cWg2MUpFdmQ5RzNVMTdQUXZSWS96djlzc0JwLzJKNFVJMWk5QXNPVi9Pc0VXMlVZMlJ6bkJZaGtTcnZEZ3FYSVd4UFRvNi9GOTBBUVkzbGt3S1Q2ZUV2bEw3UU5FT1BvU3VTNEg5bW1IMWN2SFNoOXk2Z2hqN1I1SkdKcnF1L0JEYTUxNERYRTNyZ00waml2Tlk0UXMxSzk3SzFpVllqNUhGV0FTRmI3SzRUNnVUUlhHOE5qY1JuakRZUVdHdVZDZno2SCtwUURFUU5sZE1zUENpK2krSVhCeFhwVEZCODc5MnVJKzNldFdhUGJnM09QSEtlcFoyNTZWSDJxZnhYY1kwTXJxN0ZWSC9MN1d4WXN5b0h2NkRKQnJDQzZ6b0xxdnhRQnJSL3BMaFMyZnFIeXBkdkx5aEhuRDc4SXNqcmF5Wkx5djlVcHVKT2M5M3UwTW5kTjNBOUlPNmV6ZndTVGU4cjF4Vng4bkxFSXJoRW9mQ3hzb1RkdXhDOHU1R3hMNjhvQi9vTXMzZTMyd1dLTTZDUG10ZmdDQXRtVnhkVW9CLzc1YUwwcFo1ZFJnK3hsRERDaVFCU2txRG9OU2dBMTkrbi9LbXpMK1FYbjBXckYrVEFLSWsvYVRuN2hMeWwyc2JBSUY2SjErd2JvMHpmSjgvOHlTZk1sUHpwb05mREtVQVhoSzdIa0Y0VEZSbXhsQWQwRjhrdE5ubVVqMGpJbWthK3lCT041ckVoUFEyZDhMYS9QbzFHSFVCZDc1aUhmQ0E5NFE1dkIraldFUy9IQUg0OWdrc1VZejM1UFRxUVR4UFFIcklVZ2hlWm43ZHZlNHlFMlhSMThyVDhmRVpnY3B4NTlic2JWRFhwUlNKSUFGTDcyNkxRMnlDVlByRFdLREFLdmZyMXhWMkdiWDNJR3RmdDJ3Tnkzam9Jd1A4YmZYZ2hucld5bzFlSTBTeFFDM2FWakFQNGw3dE40Nlg0RW1od3Y2OFk1bTRpVXpha2VxUEMrUDhaZFc0U0pCMGJxRHlEM05xb3NDK2ZZOUlCeWNYUFJLSHJJMk55MWZSaGNPd0Z1WXNML3VUZ2xLK1RTTWFvRGZCdFlHSUp0YjFyQ2wvNmwxVFE5bkVoR1pwQy9KTlNJd2lPTVpLV3ZwOS9BR1k2b3pOSFo1V0pZQ1JtVHYxeExJWTZBRXpiNHpGbzJCOEhFZmV3NGFJOTRHU09mNWhaWmhrVWlySklMMmdpc0FCMmIyOWRWeGhQQTBxTHU0NlNWcVVSTk9obUZJMnZvM2dtUFlURlNtSGNTUndYdVl5dTV3QWkzZDduS1o2Y1FUNjQ2SElKa1BJM09zWkRmYWQ3WkFLZDcyZ3N0TVVxRUY4OWNGM0NCdzEvVGgwbGhUdEZxdG56eFlzRmpaQjdKT2tSbkJNZTFNUUQwVDUxc2RIOEhSMVYxbVRuVVRxejlYaGlRV0Izd0xtWnc5UUFlOVhlbUNFSllnMGI4NE5wOTRseUdEQzBJRzdPcVVHdGFseE1HL214WHZqbjZoVVRyVjVvWGdvdk9rOUZUa0tEZEVPZnlHemJ1dHcwNVRBUlVKbmduTmNYZDZQNkVnNHB3NkNsNDNiKzNMaFpLWnhSZno2Q2drSnBhQlYrSldBTTAvWHZDZzBzdE80UitmYm90NGUvL0NGU1o1UUxXVVBWR2o5YTN2Y21SQk1LcnhEdnBxUWRmNStPN3RTbTdIODl5OWtHenduUzBxVWQ2aDNTM3hiZDIyckpGWXpNS1QyQmVCQXBabCtQR3dxcVVTN012Vk0waEdwbHdqT2JLaHhmeXhDaGNrcGVqd3lMank1cy9HTGJUdGJDRjJxdm1PZVRZcXRsYmdpWVpZbkZzaFlsb2kyUWx3YVk3ZWlXTjRxUzF5ZVN2SlVldWgwNzBuNUFZbUdlYVRtOG1EQ3g1T2lLd1ByQzBMN2pEcVN6UHpSeXVjS1Q3cjJTNDRVNld1bEdnWlF2OG9ERDljTlFWMDI0aUR3ZElSdHp1UlZlNUdrSGdFNGRRdUxVenlaVXh6SEZJdHNBOGtYbEZVTTJNREhjYTRIekNycVdwaHo3U2F5TFR6Uk43L2dhQnV6ako0UmhMRzEva2NUOU1tY0lMQ21CZUZNeEtMek5qTDhlQTZEL2NtN1dGSlZpK1V5ZlpqVTF5M1lVcXhUMUsvZVBVK0UxTFZWbHU3VnAzZWxEVWViamI5TDhXSDJXQk1BSVNCT0RMOXVUZWRFWVlzVGVYMGViRS92QklSUXQ3OHZYd0pSZ1JlbytUYzl6YkYzL2RveFV2VUpJNXBPb3ZablY2bkZ0OXBYeEtrZmxEWndGSUllSTlBUEJyNlE1c2QvdElBcFh1cXRpQ1dVNWZXdUtFdjROS2puRnRSZ285akFMUDRwR0YzUUkrVXV1TkE0RUloQzJGSWV1eDkrNjRnTTZwZW9nVU45Mmw5R0FBK1F6dWo2TE55MmhjdmtmSTFMa1lOTk5MaFdUS01xTU9qRENIR0QwYlNycE9JbzhVeE1kYzdvd2l3YkE0bVF0M0NtSy8xd1cvdUFiRG8rWkxSSEliaktYUmk4bEIrU3htMUNteTNrSXEvUlJ3WmJIaVZkNzM2aldldjdMT2VSaGNnOHQyYWRrc2xnUWp4YXN4by9WNUNoa2hzVXJJby9vcVBIYmN5TjZEb2ZWWUg2NmlXdHRVZ1F1OFNWL2lkSzlHelV4N1l0Mk5OSHoyc1lsNDUxcjVZUzZKekZzTnFHcmduaUs4U1ViZVNwaG9XeFJCVDJiV2tlSDZaZ2pKUElncWRxRnFJWkluUytjc05pR1dXVEhXYTBYQko3cW0vRVRROFNpbFZ0V3gxNWFLTFg2TzNVWUNVdzg0Q2I3S0lLYi9QSThxaUlTR2MyRTFlRFpGZ2k1VlhlUkxxdURESEkzZWpCWnZrRGhDZHVJWGhaSzY5ckhMaTA1ZXhXZEhwRjByRzNjKzZpSTA4b2tuZGNpTzhHSnRZRFlZbkRZaVpHbjBDOUo5a0thVzVsV0FMSDBNMDNmRXM0TVluL1VmWWVNQVRrSkVkSmhWb2RaY0dJRmRFSFJKU05uak84VC9yV05EOHFUUHFpQWJ6QnR6R2ZjRHdxR3hQeThnK3JVaTMzT1hjVlBzdXQ2NkRWWlRHM2VkVGYwU0ordmF1RFpVNzAycjlwNXBnZms3cFYwVnlXZFJWSFh0V3ZYYUlkdmIwV1NZdzFmS0lWT3lKM3FjUWxVMXoyS3dsRENCZ3VDTlh0RDFsT0NIaEVaOHpYQlMwL0EzT1M5eVZyZ3F0RVR5QU5hM3N6WS92Y3pYcE9XaFpTajh5SU1MbE9hRzQ4eXcyV0NSVkdXc3hYYTJwYis4QXZHcDBWYjdGQlN5UWp3ZlE3SHJnTkdvdXM2WG5BZWJmcVpkd3JwUnZuM2IvYWJObXYvWkNNMnVDZlhyemxMUVpYQ3NaM3N5anVXSklQeUN4UGJma3k2eEJiNVZoYWUzSGkxcDUvbVc0NGlQdmxIMzIvTDFib2ZNQ1VkNlFCY3ZWeVphdmtZRFJXd1RLbldoUnlscU0yb2p1S0p1TnV3UjlVbFhkZXdKSHpubmhHb2NtbXlCNDhkTEN0Wm9COFd4bCtDV3BWMmIvbGMxQjQ0cnNleWdzMnpyclVBVnhSOWsyLzdkejFTRUhia3Y0SlFvNHVwMlJzNnl1d3pDemFwNTZHVkZCZFV2VE5MS0M2eUdIQVhnV29vTC9vR1o5eGJvUTJDWGFsaUdoNHYrR3pDa3U5RU8xVjJ6a1JMT1h2a3lENUw1SEhjVm4zc0JIVHREN0Z3UjBrbXczdlZTVVRBWldxazlWdzhYUFN4WU05N1g5SzBNNlhBSUlrZk9hdzZvbXM1eldsZ2FMOXRBdDhqb0JTR3BRMWdzWGp5YWlPdjJ2YUl2bjdRbXFyajRJRm5GSWlmOURxUXZlNnZHOHNhdWRNUWcyYnJISVVnSWhXaU5ZSHlrVkJLbnh0T0lMelJKN2ZPMmI2OHExK0FCalp4alpVdU1QbVgvcFRZa211Nmc3TUhiSWdiRUZNN3NYMHdsZG1lYmlSMWVpRHVuODNtRGNDdjY5N005R3BQOUh6RlVvR2pqRDZUSWFKMGRTdHJmOTVpVFZjNVlrOGRtS29RMUlPbkI1eXExTVlwaVZmMDNjb2d5amtKUHhWMjZYOHJiWlplVS96Wm1hVGM5NGwwVWo0dUd1dDZJUzQyZHcwUm0wSi9uV2c0aFo4VUxVWXdFNkQ1SE9YSEdtQWRZVjYwQWpHdlI0RnNML2Rsckg2bWhyZFRPQWEzR2hibHFIV2RpcXhsVzVGakhlbjc4Rmsyb043S0ZDRk9jdWM2L25BWTM3eVFUKzZQN3FIazNobk1PaVFOemNzQVN0ZWovcEZTcVd6ZDFTYk9JNGg1Wjl5YzRhOEwrT29Gb2ptQXpiTE9Vb2tFVUkxQmp3UVVsQm5vR29wQU8vYWpXMiszdEZoUEUwbmRsSDJWYjVJUENzaXlWdU4yNWhrbkQzWldzaEFscTJGUE1vY2IxSkU3YmFlTEd0K1VtTDBHeUVXY2dnT2pPclpVeno2dnlwTUJ3YUFzQ2pVMXZlNTUvblNoRXhtdlFZblVrcG9ybEF0WWIxSFZqQ3c2TXRISGR3a3Ryd1VzZ2U1MXZERGkwNmxLUWRIMFZ4bVdacjVKS2lmSUlEUEJJcjdML0d1SGc0MFpjMHBqbFhFSmN6WFA2NnpodUxKZkF4anNPQ0VhYTRRdGZmV2FqSXRiTFcwaUxEMThhOFFEMWRHdmNyTlQ5ck9VR3c1amRGbTgvdXNid203K055SFhEOTB2ZVVZVWNTVU9wdjJVWXRwc0U3SlIwMm9iajg2TWhGd0lvL3ZoaDMyNDFFK1V0cUpjbGd3YTlJcERxYmUyV0FLMTNraXVHQWdQMzlmSHMwWGd0M2cycDQxdGRQaXJweXJrSnliQk9RTFZzMytFSExmN1RJNEp4S1NPUFJZZnlja3JXeUNmbS9icERGemxTN2E4WEFjMHd6OVpqWDQ1Tjd5U0VnSVdLUkJYQXEwMWUvWUd0MC85WW9yTGVlempKQnRTQ3Brd2xqOWVCRzNuZnc3b0IxN3RPUFFpaUhLaExSMS80UmVnRTZJdWtFMkJTelY3cEw3MVRvV2JqTS9PeG1nT3VXclY3NzAzcE04VDNiNkRZQ3Frd0VSbTFxaWwzVGxDY1BjTFhSeU81ai95Nmkvc1Q2OURHdTN2M1FyekR4WDRDd0c2TzNoNjI2MTNJSTVDeFNuemFQOHFCZkxwNEhwaHgyTDVDbituKzdTeDBVLy9idUZIeEFJQkE1QlBSRGVtV3J6d0lnYzJQSjQvUlk5UC8zMnN2eGtCbzF4RVNGS1liV3FkRzFxc3EySVhVZFAzTnBNQXp1bzN0ZWZncEVvL2FXaXhyL2J6Tk5HdFJQSDdteTJsZTE1alJLTDErRG8wVXNQTEg1ZWRnTVcwNUJOOHpNYXMzeW9UaTBOVm96VzE3WStCVGRFMC9VZEVEZDIvM055Y3dnTWwzKzA3WGJ1MXNSOFZtS1JqcWpHMUxsNzRLUW9HVVlQa0ZvQ2tWSDlaTDFlVnZldjhvWnQvMkZ6eXZaOFFmOW94bkRLc0MvSVhtelBTS0lycTc4eGcxbFcvUFhPU2IwdzhkRytOa2VBcXl1TWdEKzlGUi9OU2RPVVN4UEtVUG1LZ1VPVXlrTkI2TXlJVFQyeHVXOEVDZG80WmMyVjc0WGJkcDFsZGUxYmpHellrSGJhZ1lxTUpCYnZQZzhhc2x1Z2Q4RnNxblV4cTdveDNGK0lRcXY1VkpSTno2RVBqS1RIQUlhc01YZnN6U2pySzE5cWxGcnNpaFFRQUl6bzJPS0p1Z0hRTTN2ejlOWWdJdWFNeFZNbFNaR0xhcGk5YzkvS0tuclg5Q1hIMEp4ZldXMkJSdEdHcndsSEdTd29keW8vTmMzMEFDdFV0L05jakNIMThCREo1eStCTmdNdGREZnhoYlF2cFBseS9NbW02RE1mdnRleDBySjJpZHlaM2NZRy9YMG1zaUtmWVhaOW9ENldwQTkvZmV0cDcwYkw3K1hrUVVVQXRBYjNHMlFFeWc1NW9TaUVYdVdsWnNUdEF5LzdYUTJGQ3JETDhTWjUwbC95WkxaUjJDMGFMVHJNRmYxSU5pZ1NsTy9GRVkrU3BaYkN3N3hDQjBHTWxBVGFCOXRldmhKS3hRWTc3eVRjbW50VU91eFlWRzhQT24xcXgyWHBxZi9SNitRNEJ3NTE4anFlVExkWTNpb1dOZHR1MTlSbW5mRGc4eFkyWDhZOXcwdEIyQ0JWaVgwb2ZSbXljbXlDVmRScXhEQ08yNTlhYUFQRjBUTGk1L3dQYldjMXZscm94WWRUdUVrSG9YVEEwVWdLNy9wTFZPLzZsUGMydGxpTnpwS3UxY2czZTF3MkJCVXk4TTdjVUk1M0V2cHVEdER0U3dKVVhaaTVya0pzYmk5cTZseEVqSjdVSXNQcTVlWU0rNXJCU2VOM3gzVWI5RDFkZjU3a3F0SFdaa1lNeWVadzlDSGdMVSt5WXhEc01vZENLOG1qN1F1S1ltS0hQNTZCMEE2cjcxZGl5a3Irb0grcWY4bnhTUXFYNEZTKzV2QjJvR056V0NhZjhSVkZNcnd5OVIyMTgwdTRqUHJqSVdIRHVoQzhyZlllZG1nNzNyV3A4OXI0VEdoeVUvM0NPUUhVamdtdGMvM1FJVklTK3ZzQ3FmU2c2WEJLOElBQnpVUG85RXk4R1c1a3lwcDd4NnR4dTB3SzdNdXBoMWlLV3N4YmNTZFVkNjRMT3U0ZzhMNXF1R1lPQU94MWVtWGVEcExMM09JYnZ5WmVhMEhtTmI0Sy9ldUtEUzNzODVEQnJ5cE53M0tpZkVidE1tTUh5QlRhU0RlajRqNExYU0xRVG1KZ2tDcTAvSFMweHFLMGJlY3Q2aGtzQjMvV2NUbzhZMngvcmprSEE2dXgyOTQxTHBpMnRicXZQdEwyYW5UY0wyc2ZPL1NEOWdFMjY2Z0xyajBlTmpxZzFWdng0OUZVdHBRc3ptRm5RbVdOU0syVWpXZ3JhTjYyK1E0WENsMmpadTQ4UXQ5VnZaN1RDUytGM2RTcEVBekdndVVWRGw4T0hNTmNuckc5cHJUZ1ZiMWRKZDh6YmlXZlltdEdpMHhvYmFmZ1VVVm9WUnBvdDdURXduam5RN3dGNGhzL21pOTBaVktrWnNsbTJPbzJ6U1NoaFpwZDE3N1lsdGJQK0J2Q0RZdmFqTG1iV1h5UnhQaFBDQi95WGwySWJyeCsrekllMkw0bDU5OStFcmF1cjVtckFIZTNUWFYzY1BickYxZnVUSURIdzRvelZOR09RS3JvNUlGU05WaS9HQnhyWDZpYThBNXpuMjJkVU1QNklhY3k4ZG85K1VCckoxMzRoK0t2ZTBhd2NydE1VWVlkbURORGMrcEpveTBSNk1MTnI1VTJYS2k0dG1IU3lsZFhtcUpKa21xdllyZ0tqUEkvVW16d1B0Ry91cEFocnBJUFhzRDZmNUdaNXB2SXZFSUJaclRZMjVNcWlaOGVlNEtTWjhDV2lXdDQwMm9jdmlRc3JaMFhOUWU5MEFCM2FNdExmZ004c0o5NmI5WmREQ2ttd0ErVjF0VDhhUTFYWkFhVVFtUWw4ODI1VjJqTUwwQWZSVkNjTXZSTFZpK2x1MjEwd2lwQ2VLcUJDaEpQYVVpS2xZeEtSNytXTWRqSHp1eGNoVEtoZWpxN29rMTU0c2JlM21yVGsreEFEY3NoTDZJNnF5dFdqYVJ0d2RpaG5PS3ptVFZ6enVJNUhtemN0dURpVitvQkprbUZlMEtQVWtmQXVWOVlBVHdDK3RscU1BY2J1OCtxZFRzeHpYTisrYlhvNHY5WkdZQ2FQeUc4Nm01S3pkek0xdHRIcUxUOTd5b0xicEhlUTd5a3Y3ZWVaRGhoVkhiSGdqY2hMS085em43eU5rUWlPdkZ1OXdTSWg0TVQ1RU5rU0VjZUw0cEJPOWxnKzhnRnQ0VnVKWTh3QXd1SkhXUms1SnpDbFNQWmxXTzlBWjRndVYzSm01Zkl2YWtTdkhUV3hldGtWbldLSm1PT295YTZpVXVYNXhtYWFoVkJSTEQ1R3o5eWRhaGFoandsbVJnSnl1OXRKZWdWUHFvbThRWUF0aDJLK2Q0U0h3TWtubitvNlY5eDhWblFDMk9QejdGOURENHpKMmRNQjVUeTdwRVNEMDM1UVdPNnZZTmkzS251eis4VDBvNHJKUDFJakZmbGFucTFTY0dhWERrRjRKTjREbC83Z1JiZW1oRGlDSnY4MUNDSzVhSG9GUWY2OG9pRGZhaklvQ3R1b0RhU0huL25HUlUxM29XNE1xZDkvamJ1OVhJOEJoYmJzdE5mT1hiQmxzb0RjSmNGZTFPMDRSZnZQeHVmZlpMZ1JMZE9OTU1jZlF2R25BbjJGMzZGNm5ISmI5NXV0Z2NnRStzaDlNVEJnRUhvZDRkSVB3VlZ0OWpUeC9xMmlOWVdyNmpGNWlKYWlhdHJZb1FycmNybnVyODJ6SGo5UUpmdS9Fb053MWdqRWNld1djSU5JcUpqZzlieXRNZC9wVnhHNUNuMnJSUnJEVHRCSTBTWHphQW1EZUxHMlZ1RFRzejE4NldiSGRVR2xXNG9meUErbkUwNmlsQ2VYTFJHbllraFRHOUpLcjZPZ1AvYmFwWWNtallnT2FFZnJGSHJRYjFORlUrOUF2RlNOeXdTSUNvVzRHQyttTHY1UU4xbFA0MjhONVk1bVFKUXFhaUo3UmU2SThPU01WU283MUExVXhqaitvdjhnZ1VtS2RQNnZFeDNkRk1NdVl5cHhXMUFZQno1SGVId2hOaVFmMHR0SUhLS2ZOSkxpckN4dkRqdzNEWnRGTW5pWVJ6T0o5NUw4MWhBc0VaREdNZ1RZQ1d0eXRKZ3JMZHJIZ0JzY3ovQ0NmVk16eG9VU1F2ekRQb000SDVTdWVSVjBoUGI4ZWU4bzJobjA0VVBLTE9Oc0pHdEpHTW1jcldPRXZkTzBtQVFVREdIYkNndWVZTXFQWHFIN25iRFA3c3hoMHcrU0V2RVVNT0c1MDVGSzdLUmVSNWhlaE9BSEFsUnBtR3ZVd1MyUGk4T21yaUNIN3hJTTNkMjQwOUdGemxYRmtpaDB3M2RqUW1QT0Vma3J4ajBJMFZzZWd2bllYek9sc200UHJyeW14SUJZSWFvbVI5NS9pRGZQWGt0NXhxeHFOeTZSL1dVRTFKV2NIN21OOWJ2V3pkeWp4OC9QODZsbkIzbm5kRFljaGlZVC9wWmhaQmJRL1lLTTM1T1UzUkdJNVFDNmY1MFZkMFVOSTBybjkzRkhJRTROdU5FY3k3bFZzcVk5dlk5WTdyaDBhOXZOZjNGaFNpWWlGQ0ZaMlVqVlFUZFd1ckRmSkwwL1oxUjFvbEJXcVJEOU1IZEJ5VXdjWE8zdHUxSENwWU1XQmd4U2tmRXM0Wk1SSmg5T3lNeVdCVHRWVHlYaERpbm9qWU5nenpTc2xBQkhQWmJIQ0JEcEVFaWxuMHJveEppR1E5NVphelp3alNBZEdVL3lSQU1kdS9zL2dZSFlGcVdEbmRES1IrUUVhaGFDUVRvaEt1NTNWN0hwMmtmdkhSU3NQam5QTkFBWlREWVlOSnRISXBNaUVqWjVoN3hhL0ZvL1o2dWNnSnVOc0tSdEQwUXBQRE5abGNyL1huZGMvZ21qcFN3Vi9NR2o4VkJFTVpYb0NLSllnTDQxd2JGM2FKN0VHK2hmUGowaUlyeXpSZDFlVjhRMmsybFRWeUYwY2hGWkV3YnptWHNtMHViWi9RRjkrU1JKZlkxQmt0clRGKzl5dmtmS3pESE9vcFNsNFZVM2ZWbzZsbVZudXNQdGRyRmNnN3NWa3hIeWMvU3NMbzJxUElCZm5HWnpnWHMvSTRwV0YraWVNWmFIVUhFZUJwd2xiZEl1cXorNHFDWU1aR2N3OHFWeXRFbzFmT1RQZ1hWelc1NHJoeWd5RVl2WWhMbVlIU1lxNi9QRFhpZGtDQy9TRHRCbHVvYzR1dEh0R3YxSmFaYnhjVTlKejZSMUUrRzg3UnNhTUZreFhJUFg3L01CbTF0YW10c2FxVG9zMnBMOWttT2pIQXV3L0pIL1Fqc0pmRmRWWDJnYnV2WFdkbEZWclRpUGswSkVlQWtHYnlHTm1YMm5YMm4rZ0Zvb1hhL2FhVnNTQmxmL0paZlptdXVPemRrbGxBSDVpYisrNXcyWnQ0cVNWRHMveWRoa1lVOEVmVGl4aFNqaFJyVVhjcHB0bVROMFBkbWJmQTE4RG11cTBkS2l3enM4TG1wL3k2WGNicnJqZTY4eHFybFBuRTJaRW5jMndsRS9MUUErc1EwcDlVZXhQN2lrSUF0SmtYRHJyTjE3dnljbnQrZEFSY053VWQvenFTVXZtWmpnMDBLQjQzNEJCS1J4NVE2anpTTnBobG9ja2p3bDJyUDNCYlhRZWxRcmljUFpOd3d5Zno5L1dIN1M5dzAxQllIckk3Ym16M1VPUGVjWUpyeXRTT2R2RTJjYlo4aTJ2VjROYjIzT2c0eVZMTGM4VHVGSXhaeGJ5MWpGK2E1NnJzdVpIRlFxUGs1Smw2bWlyWXU5ZVM3YXdJayt3TG53YW4raWI1dzFzUFFaL3FQSFdSdk16bk0wUHVoa3ZuK3laWW4yc3dZaVJRMGJMcUtUUlBZRGVVdzEyMjRPOFg3MEJHTkJMVGhxN043Tjk2cVp1SXBTa2F1UjJTRmJPNitEZ2t3N2hhZXI2QW93bzdhYkFDMUlmeUhBZ1hNMFJtdW9QREw5S0QrSlZab00vbUQyQnZ0SlptelEyOGI0eThmejdYV2ZrRXZMa2gxb3JCMVM0ZWQ4ZXhpVjFPenErc1JJcUhCRml3MEdqZ2tiaTV0OUY3d3BEZmZ4VWVHRGt1VnVaaXBXTGh6Z3A1L09yejlCNmpKYXJiQU1sa0lZZnduWWdnWXdOSldpMjNoWFJ5ZzZlRUs1VjhqZFFIR2VzaE5TRkg1azJMQ1FlQ2pwRm5kQWc4YVBwdkVKaW1lMDR0SElIamdCaVlITnhPZXFQRlMvWDFLSnJqOTc0aWhHM21Ec0V3RitVbnFKdHFsTStLTHF1bjZabmVjU2ExeEJ5dUJHRlBOUllFTHhpdlRvbzdEVkY4cTBTYnFUMXlFaFhMd1JqLzZuNTliOXdBYjJzWEh4ZWhsR003Vk1QZUhmcGZVUjgvU2NJSk10OCt6NmRPWjBaamtOOW9YN0c3amNnaGlEV28veGIweWNZUnFNOTMzQXBYYVVkbUxQcWIzeURBbktFMCtQRngyTjJoYk9KTTNNc0hZRXlkUEVXZ2tjLzF5ZCt0NHZjQW5TNjgyZXJId2Y2RUEveGUvSW1KZFNSVjZaZVNRK0RoemtiRDlEdU80K0VaNDByK1RLZHFldVRzMENhd1A3NmhybDBiYWk5bm5WcWs3UU9ZZmJ3Y1RlVHIvWXUwVjZrQkUzbEhyRnM0K2ZGeG0rT2VFNURtbStTcXBIdFVxZEEyU3hIbjlYWVBJS2hNYW00L21ZcGIyc3VUTHVvTWtGcXBKb3R4TjZlME5xYlQyNGZKRnVLeVVpUkU0eWFzMHpJcFVrUGtNUUVpbVhZeFRIUCtZYUxGcGo3b2J2TFpMVnBUNlFaY1NsUkgyNEtDUUg3Y3dPcWU1SVBCa2tzZjhQL1RLdjQyZm9YMS9NcHN0SUZjMGI5MkpOZytPNVZ3ZTB0QlBpd0YwV0hweWcwdk1HWnVpcjBvckV3b1VHUWkxaG5PU3ltYm1hZ1hDSjlOMlB0UDYwWWdsbXMrZmFORlhacnlkMGdWRDlNeUtlSklDejB6TXY1RmhhUXIyTjdzcFN0ZDRyS1F3cEdscCtkLzMxT1crMXdzb3h6ZEZHMlFwK3M5OHlUbTF5ZTlmS2xjdmVwWjVTaDlmR1JsS2NVamdwY0VDZlZzTmxNZTJBUmZGU0JQVWg4SkZ5c2xJUmF2bmdaa3FkV2F1SHRnOHZIcFdybTAzSjBYcVhZeUx3MTQzRmJkcDdNSENmSUE5SGMrUU11SXZaeFRUNmFrWW5wRUJSeGZIdHZFZXZkZUI4QldJL3pZK0Z2TDRRSnFGNjBIVW45ZkxXQSthb203R1JoVHR5VHByd1A4c0xBNTZ4dktyaXRGajdUYVlpSCtzelVwcW1PcmxkYVo2REZaVStWZzREUDcxRjAvSEI1bVMvdytuMDhEY1V0ejI4eUJZbTJFNXZKbUtkbXgzRU1DcE50UVlvMnJzczIyV1lZdEFhd016eDBjRFZ1Z20vdFUxSmx4SC9ia0lUMTl6TTR2bEhra1FwcXlESUUxWHZCK1B6ZjlyV3VoQ2J0TnVkNUpmcm5RNUFzQjNGSlNON3BmaUxjWitidnQ1eUxJaTQxZUN4L2hIMGVWSkwrTTdXMC9hT0JBbHBpY3JsQytSNS9aYlBhdTdWKzBSbmlXSEJrU2V4N3pDWkFvbktoZ1RMbVhsUmZpNmdPMUZFZG9mVE9oVG5qNUFqMXN6SExFdjRIU1RwS2VoWGpmRWRGZ2kzRXorNjg5bDF5TWdIV3lGaGgvQkxWaFVsdzJHZ2tRRlNsQ05LbVBmOW9NMUhEZjRjajdKWFFCdVRTaVIrQjBBUTgzTFJPVGs2aThRRWRkL2JBVXFDREJzOHJqZ1hsNnlOOEtQN0JQaG9HVUNhVDl1UnhLNU5xZGVoQk0xaFJ6VEt5MHlCeHZ6czNDRWZHK2srWHVJNHNXeGREalZBVDNIV1FybExwTGZiNDFlZmdESEswNmxQWDVmOFJIc0tqMzRhdlZ5K0JjV2swNVJxWGJXS240Q0FnSURubjFRQTBkcDhiZ1VoeGxTeUFHNHBMb3JNOHRPSlQ3K0l6OVNsQXhFSGFRWk1mMElWVFNhOGNKanJvb0tuUDFZc2tsbVNjcmdVdEpwc1ZwUTVTV2FvV080bnFvV1lFK2ZzWFJzaEJpQ1dPT0JrODJrSm1hSzBHTVozUDNiRTJQVFAxQzIvRDNJNCsxcVBOT2hNTnExOFFxc3FDcy9hZHp0emZwdzNGd1NBSzhjMHdXRHhUbE84Mld1NThUdmpYc2lpdjJmVXVhQjNJcUJ0akVvcjZqRTNqZDlGUGtHdmR3WmN0Tm5ISGozK0RBSkRoOERFemJFUGh3YUV2VVdrYUNaTXlvaW5tVWN5Wkd2WG55U09rSHBURUZpK2lzY0tHQ0dRdmd0djdTMDVEWXlVbVBPVFVZWGxVVnRNUFE4QVBLekxDMGdPdllIbzlFdDROUGZiYXo3MDJkazNZWno5YnNwVkVqbXkyOVRvTDRLSHJ1Zm0zZElKK2NlWkNpL2ZLSEZWdC84R1crQUZPekJ0YVdYQTJHYiszWlFJRTd1QzNIYUp2b3AvNE9PcWk5a2xxcEpCRXR4enVCU1k1eUxCVEJYelB2MXpobm5vQnUxQWhVNGU1ZmtBbWgwQk9jNFppa3dSTkZMeEhsZTNjdUZEc0NJUXpxcWVnWCtYcXpFTzlXNUVadytjREUvZ05rM3FGclpnY0h4dCt4RzFwdmdRZThlejQzWEV3MkZkWlkxVlpRaGMyS2owSm1TUU5KY1Y5WDV0Z1BnQXY0cFVQdW40NkhFQUJXT2p3ZTFJRGRoYjExN2NoUHg4MEhVYnBWTTRHUlFqOGY5S3JENGNVM2xjZGFTSzRubzR5a1pNRnp1eVFqWHRLTTdVWk01d2tJRkZxU1hWTSsxMVFoa2x0eWJXOEdDQTVONFRrNVg5U3RuWmhNMjN2ZWF2aHpYTXdGeWtkNzlYanBEeGNNeE9sVjA0SEdNUktQNUJCUDRzczVrTHorNUJZM2ZISkxlOEl5VnJOQ1pXc21HZUgwMy9YVFpPU1M0Sno5cURpS3ArRHpWd2VGQ3JkTURLVkZWOGZ0UWptQnBBUFY4UnovSmZoOHBVYnMvTFBoeGpxNU5aMXFkVXpVMmdvVHkxZDFlc3pFSjBZWlZPR1BzeXFHZW4rY2hvWnpsbVNWWTNJMXpuMDd6VFk1UXZFdWVYNEx0QXVaS1F1cFBzaExoWFlxeHRyMDhSbEpDT0Z1ZHg0MWcxMEVJOThsRmw3Vy8xU1UrMmhRWGZLOGl0STZnSGxTb0tRVGpoZ1E3Njh1WHVVMmhJYXhsUmg0ZHNxVzBrK01Ld0t5SU8zbDZWMTJRaGpEVXhKWmh1S0N2cVVYMFgyNTBYdm05N0p6L3lrYkNzYjFIVkpTQnk0a3pPZzZYOGRMKzYwQ29odXlPMFlqazBweFdBbFh6RE5QRS9jYlBQb2NIeU83SjJiaFYrTUpTYjVmb1doczcxZ3pRbHRxKzF1cW9FVTZYRE1MMllXRk8yS0VEN1laZGorTDlNREt5LzZGYnFlcVZjcmtBNGZpL0hQaW5FR0d1TTBER1EwamR1QzloYURZSHN0d2ljSzhocHozdXFvSFZXUDVvZzdMVzU3VGxnYWtvUDZJeVNqV011a3hmK3Z6M2NWczJiVnR2dGFTVXplRjNmSFhxMHNSYVNNTWp4VHNLdVNJT044VUtsMjBzYzB4RnJrNW56NlYwbENSTmVSNnBPV3lvcS9ZQUdDbUpsc21hZUZWaFhjR2dwaG1xblY1UFRCMVBkSGVUcHNuYnNtZkNqcVlIOFlvU3dod2ZNbGVTVUhXZzJYTWpIV2JaS281R003L0MrVEpzU2FscVNGd2FEZ0hGVjZlUlh1ZDBzM1hOS3ZOUFp0QzVPQi9GczBIOUVZMlpEZ29BZUFnWlZVTGdpTktJYzNFenRYNWVmSTliUTVEV0hPMDBkVmxFaE1IWFVRcDJKSmhGaGc3ZDl2M2UwUlRoRENpUU11Q1pUY1pGQWZHSGdZaGRyd0UxRnEzNk5wOTIwVU5NTkZmU1dNUzVBQUpoRFlDU2dRWUxhVzFzM2RiZHNJWXd6dWU5SFJnb0M1dzYxcVVUdE9tb3VrYlc3K2VFbDdzSDdWR0dhOTNoOUg5Tjk0ZlVZTS9FT2p3cHlyZUhBRlFoS1pISFAzc3FoSDIvVXlDMm8vZnhsYndPelR3K2JrMTIrYysrSVZObFBldjZmZHdjV2dxZllQWWdWMEFySTR6MW96Q29HWTloMVVHT2wvNEpLeXg4Qy9tV3laK1JMUmQ2UGZMTEMwcmNMbE02RkFWcUVlM1g0ZFdkcm9xaHBNQWdYZWlaSVoxTzBESUk0WjZmVDdKb1haVkNCbUxRbGhUWW1abE9JMnliSDRhRGptbGVKZEJmMGgwM252aVFWcWUydExyaTNuTlEyZnIrY1VDZnNYL3lNaU90dHFCSk0wWTRpWEV6MjZxKzJoTVh4MDRpbDBDVmw3TFpZWVp3Nk5TWlp5clVJVGtscTA3MGdBSnNjV204VFZrWW04VXZLSmEvenRCVTl2ZXgvNjlkK094WTAxaGcxbExjaHF3NVRqbEdyRUJxV3NHbjVRdVVPTDFSZDVYR2RZSnJ4NmRVV3NwVDB0L3RtYnkxZ3pwaE81TkdrdzBDcjBNeDVzVm5wK2toVDlBUW52MWkrSXp0bkxzS2x6eUZjYWpha0FnbkhncFlocXhlSGFodXorSEpKQnlsNVRYd2l4czdpSGxJbDk2aVlYbVhlakFONlB4SmpicWczZU11b0RVakkyT3IxV1N5RmRqWk9Ta1VoREJHSUZ6M1k1ZzZvYnJiY0N3Yk5OcmhuNzFzakZOWHdWYjFZMnk4ZWVsRzZFTFIvT3RSZ0d6OFNLeTg5N0l1dEVOTksvbXFtWWNPWW10WU5ZUHE0NzVZa0xIK1ZNSjl4VmlCMTJ2VnoyVVBkU0QrYW9qenBTM0tLZjhpYS9JMTdVTFY2OTVIcUdZZjFFRFlrSHJXQnh6S3R5SFluMGlaNDRVTUd5cm9GYzQ1RWNKUnRNQkY4M0duTlkxc0tXc1JOUm9NaTk4cnI5em9sK0ViTThtNWNodGpFMTBrd1RJallZbUdsTTZ3LzlWS3JqWnhlcERKcXNrTmJXMURtRnI1ek9pNkdHR0s0V1pKYzdnNkZ4MmZGTFh4WTFBMllkZGNnZWFoYjMxdWVOUDNNT2M0eGRFMjFOMmw0WHg1YmVhb2E5ZnJrK2VHWnh0OXNWZWluL0JUQ0s2M0cwZTRzaUJhUXZkcDNpNk9kNWVjQTJadnZnWHJ3MmdpejA2N2xqd3N1ajhmeWRTcmxiZTFlZzZDTkxsdG1IUTBnQlJpYTVUQnRpdXlEb1RzS2plV0x0UmY5eDBvNVJDeWJ6ZU9RK0FmdHB4WUEvMXpTL1JGVnZpeVJaY2ttbTNRaVpVSE4xR0xqaW5Jb0FWMlg2TWlnMGVkR1h5YjRWRU1VUG1rSTBsVjZDNy9BWk5EbEVrUGJCblBzTE9zR09pblhFT3VqN2hhQ3BLeUNHRHR2cURtWXB0a1YzNGVmeCtKakx2OTBRa0t2bzZrM1lCSmNBUFNMd1YzOWc5WGhld2JDVXZ5eEtIMGFNbGo1SHprSjl4UEZxTmV3TWRCVWVJc21FSkhQMzc1ZzREVkFOR2JTMjcvdVl1ODR1VWFsdC8wLzA2RUlnOUs2eWR3cCtDeGpWUWtRNU00c21Oai9LcE5TclVGdjZzN2p3YmVUcmdSdTU3ZXhsNHpCUFJFajdmY1lWYkZQamU1Yk5IT3J1Ym9IRXZxZDJ1aU1ocm0zaW12aGVnT1FaWE53K0FwWXBIUUMrN1hoNjdGZmRUZ043NVRlZ1Y3YXV0bmpxQTZLSjlxM0I4NFBtUjZjNkE5cTBpNFlCc0RPU0NjbjNLa0g0UlFOWTQ2UU5pbzdlQW5lSHVHQTd2NElKSjlhOWNvN3RDMno1dkxEblA5SlN0QkFqQXFMZGpzR3JSMTJhSGdpR0xkQmhJTHp3dmhUaEhoNDZUM1FBOFMyOGdlSXhZb1JQdGNDeEF0ZGRKeGpTbHhRMzJWdDVvMVV3NHlTYXFBTjJ5WTIwRWFwb0FVQ3BHd0lDWWNuY3pCb04zaVowN2g3WUx3dm1xTU1JRWNwU1EweDg5Mk4xeDJoQnE2bXgySTFIN1VhckRZSExGREMxLzlrYUwyalFnNDllU1RPVTNyUlpTTE5tSWNLWWlRd25FL0NzQ0Zra0tnazU5MTV6b0VkQnlreHA1NzFsakFEVThnNVhMYy8vcEdFblNPY0Rpb2F2bWlXdHJIRXJJdHJuc216Y0FqdEMrZ3RydXUzT20vL0plcTQ5Y2poWG5UaCt0T0dLc09ldWNTUkFVZ2UwRUdqK2ZxWEh1dlQ5K3AxWVZqMGd6aEpTNzZCbmhZcktpeHhuemVOaVpvdWtPalY2NUZ5L3dHZmFyb2ZUTHNnRmQxMWh5VGdpOTIybUl5RUxvS2syNXhDanNLU3hadWRpMVNJV3hhVlBuVGF1RVBLbUsvT3JFQkpYM25oSXhkR3BLTEw5WkdsaS85eUJKY1gxc2tkQ0M1TEl4UEk0NmpUY1NhM0ZqbERJMjNlbTY0cGs5dFhKM0hRcnNwMlhGbnpxeGJpaThPS2FwTVZWZTZqRkN4U0M4Zmc2NUpBeVBvMXlBUDhiVWpZKzNiL0NUWEIrd2FsUkVqR29jMHk4UXV6cDJ5VW9MdlJOUnJDcjBwcmF5YkJXTWJScmJSWXd0ekoxYm5vRGIzN0pkNmVNRUFsMlJjbGQzZmdKc3Q5MWpNbVJoS0ZOR1pkTXNWcloxMlZkVlN0aDRBTHA0d3p4ZCtFMnV6U0k1RC9BT29GS3lHUWdvSGdPVmh5YitoVGJ0aFRvS2V2c05QWE1KZ004VjcraGIrbXoxLzFsRjVyRTlnRHgyZ2dCU3ViRWtESDgrVGlyelNEN3dPMm9hTk5CV2NwQmo4OE5reVRoNzUxUFNKNWZLbDBhaXhjcXEzMmdNZDlEVnlkRDJOM1FxNXhWMnpRZ2dXTEFpdkcrNmIzbmlXZWdpa0swRi8rUkpMcGRGa0w1VmpsYXV3RHdEYXoyR2NlZlhFa085bjU1N1ZwbXl3V3AxeXVqamdrL0hOa3M0NzllRVhveFBGQVBaYVRncDRJdmRaWDBtQ2NpRVZUbFpUNFJzREJIb3VkT3I3bnAvbTVtNFdYc2tGeFRuZG9NbmFWNUkzOVpTbEh6b2ZzMlUvOEZyNnlxRyswMCtzc08rdGsrMjArbjFGSDM3ZEsrMWRBbVhvaXdCbUZBbHNNb1JsVmh2VktaV2tibUdXR0gwSW9uYVJoSDFFTjY2aEpZUEdPbTFKNzRRUTBYbmRnMXBoNGdMYXdtR2Y1VjNJUmNyM3hvWHFRelVwNC96KzlJT0Y3YnJGUzZOS0pKb3RlVzBXNjRGT0l5YWpCaWNxNEd2VUpxcTlXT1JwRkhRSnlaY3o3cUhHd0hzMEExK2JoVWZvcHBoaU1EVllldkpJY2dHZytGM2o0dVZPc2JaNnJiaER5Sm5hRE95K0p3dURTRXRQL0h5bGRmZzg0VmNjZVE2R0NMWkl6bmhPUGJVTEtnWStXOW1IbU10TTNFMHpyVVEweC9ySjBGK2JVMUl3UzZ3MXBFSWlEc05jNm9VY1UxUjB6S3JHZThYNisvbkxJejltcklhR1IxclA4eE1HOXVuazgyMVJWZUtPWkgzUmRGVGpUVlpiY0NKUnFsc3Qrb3ZOOFQwRU0vajM2d1dJM2U1TGNTWmRaU1haM1QyenFWSERGc2JXV2lBOTdwWHhhZGViZ3lkQVdGTHcrdkZTaldhN1VibTFaeFZpUzZkSlNFR1JOVkRiMWhZL0tCMFgrbnVYUmNveEZwOENucGtYUzFOdzNGb2FRM29adVpWdHo1ZXV4Y29Kei9TWmMvZHJLT0Q2Y1YzajZuY0doRkppTVJzMlQ1S3p2dE5RbzIwZTdkL2VuSm1IZ1FCNlkydmtIbEIxRFYvcWVZTFpJQzBJTDYvc0dLZG52bnZ1VFdIaVEyRUN6VkJaQkZ3VGU3UGs5VGhlZ3hZNFlNQ0w1SFFpei95T3hHTUU3TkR6S2xadlo3dW5rWDVnMVlwNTB5emQvVTJmWlF0T21vV0dFaklVSUhqRGlSaFo1bVpqYUQ3VGc5cDhYd2x4V3cyR3ZJT1N6YS95anFtWFpQUmFtbWIzZzZRWC9XeUpTV2FlWjVwQmlIZ04wTXdDeXlsMjVFY3hGZ1hsKzRHeUs3RGNrNVgwUW5yelhwYU9zb1JNb2JhNWNvQ2JneVdyaDE1RjZIcU5vSTJmNmxNYUM4OCtrZWw2cDdTd08zMTFwelRoaytrZ0xYQjBMbkliUUd5VUxIZG05dys0VmNvRXhWTlIvRm5QaFljdHQ2N0c5ck1oNnVORUV3ZVNNSlgxeFg4Wi9DK1JXdlZ6cHVDekc1SkJ1ZTlOaWs2Sjdyd3hLZVFPdTl6c2JDZVY2d2MwOTN2eWtOMHZHUzRmL0xSeGduMjhIYmJWMzRSenFyVGVHYnA5dzIwVmo0bnlaSkRIWkJpa21IZFhjalEvYW5OQXlCWkVLVUZ1VFpyZWZScTlZMXJpTXZDZkQ2OE01L0RKZlpoM1ZRRlFGbzdLSTArQlRSUnJKV0VuMm9jV2p4ZE5MMlFGdVZnK2NEdm9vWS9DdndTK0lBMEtxRDdsOHRldDRKcjZoOHFDODlncDNvdHRnaWhQUzJlVUtYWWhRU090dVREaEJNbjZVWWZMYXlZY1BPZ2FDL2sxSlRrMW5OeXhpWkRLNTBjeXI4V3AxTDVvU0ZCVllpVFFTM2ZiS3hwL1VvemNzWHBlWWxHWHRMVGdhcVcveHBZeDIyQWxnMnlGeVQzZFhjaitOMVZwVnRoM2Q5OUFxajkwaWpWS2dacWFXUE9vVmZyeUFnQjNWcGhvRUZESjVFejZoeG5veXdpMjhMZWhKeWVtY2JLVHcvTXdCN0xPUmwwMUhHN3ZKNG9YVXQyZExVejdab2wvWXhZbHl1UzlWMWt4bFpRL2lZbDdNNHJpTkRRSXc1NVRyV0IxZjZ0dGsxdGw1bkFTVjlsdHgrU2RkRVRPMVJYMndzL0ljaG94VldyYTdjRW1WNW9la3N3Z1IrOVdWNjM5VTNqZlJiMnlTWTJPNy9vTC9PbFk5N3hLbURHSVpNZWhLczNqbjFLV08vWjMyVHZXWmJPUjRHanRneGh4bUV3WENsTGloS3hKaEVSdzJVMFFVcmZyR2drcGhwbkdGWFU3czhCVUJnZXlhbHVyUlBhTEVxQjZIdHk2SWxYaGZ1ZXZmMzM1bVo4YnFTTVRLNzg2SkU3d05KS3o2aXhRWWgzQzczWEh6ME53ZE5xTFhoNGVuZE5UeUtCLzhnQ1VBL3JJbTZUVnhpUE9ySURtZXIvaGVEdFBrbUpxOFI3N0V1NGN4aCsxWkFoVmQrVG1NTVQ1WDFkTXpaQTFMOTBhWWtTRUNxWUZOR2ZrMlo1Zlp3Wk82VlJPUmRMUHNNOUtlNUxKRDhEaTBscFdpUkxuY2RsSzFUY1FkUklIVjFLYzhhZHBGZktLam5PZVMvRWIxWHdIdXJVU2RDRWg2bzl2UU9rS0hqSEFEN0NUbHRBVm05STZTczZlYVBsbjgvQ29KdjVNTGNtMUk2YTFPbm8wbHRoNFVDWVdGeXpWVEZBZGxTV1l2N1pRMVF1aFBmSlM1cE1EY1hkc05sWVRvVi95MVZKc2hmaThnNEpDWlNXbXFEZnYyKzZEQWlmWXhiZytvNEFTSUlvcGUyVGVqT2ZxaG5vNk1wbTZLZEUvQTVsbytRalNURjJkSExwaVhmbFNWRlJia0FpWDdOdUxRa1pEYnVtb3crTnA5aE82OEx6Z0RoRm91SlQ2elcrb0pRNXdsTlhqMCthYnpreE9VMHZibVZjTVd3VDk3eFlOSHdRSFFLM1F5SGJBdEh2ZzZYQzFPemlONkNaNStwQXZRNC84d3R0K0tPOW9xMjRPckpLY0xYSkpzRGRyVEczQ29HZ1FTaFNEY0NTWUh4eE9ETFFiRFJObEpsaUNwNnRKZVFGNUlvSHF3WWZubmoyUTYrNk1sUHRneDdTSWs5RmFCYUZodmkyTXplbnN1N2RsanhxUDhKbnZMRzVMSWJVclVDUHJYa0VhMTJXRS9VYXh1SHlqSDBMeHJCVkR5ZWN2UWVncmtjSnR2S01XWUhOZWl6NTZ4ZWdQZ3J3OGhJNFEyVjQ2SGt3eVV4d3pqNm41N0VGMUMvVEFzY3g1RjhhVnovaWl6eFZMYXYzU3hnS3U3dEdmTEF6b3FKbFNKQmRvZGZma1plTElYeWpEZXBZL2MzQ0dwNVFCRlN0NS9pVUhxbnl0ckJPS2hFYmdPci9kRFEzNUZRcDlKNnBuWXpGSWgrdDcyaFZHSElJeXRIazg4V2xDOEhnMmcveUZvdFFvcVpMMjB6U0JRQit6TkgvaWVDc3FJVHQ1amdTUTlNaVlJaGRHRXdjMjRHQzIyWDRVQkJ3VW5sbldNa0xUY3ZIUVRIVGZmT2wwRHRZSzN2QUFjSVFEYStYeG85MUxkMGtPVy96Rlppa054bFRFSVRVN1djL0tybHo5VHRMOExScHY5Y3IzOUhqTTBtLzh5MVF2TXAxVnVybkxnY3lsais5em11Wm13ZUNQdk55OFNlMDFFd0ZNdTc1bkFLNjIrZ2VScEVxZHAvTlRSTDQ3V2pQVHRoenNwZVJtT0R0U00zZDdiZ1RxTGpLUWM1WGsvNUdIdWRTUmlaM2VPL3habE10VXNrWDdpbmZEOEQrQ25ZVzJOU09FQTlsMVFVcjFUbWJXZGh1b0FXVEpvTjZkUFpNTU9xZ292ZDZFdG1pZ2VDV1lLY0c3bnFXbmtLWTZoZlRNYjZPTWFFakRyR1Z3T2FvZXJBV1NwZ0N0Z3JxUXpHYXpmaGhXd3JKYTdtTGNIZHUwYUZ0dDVLNjdHUVJqdEJxS0JveG1BeVNBZ3kxN2Z6ZFFqYzhXdFRRNkQyOHU1RWVOdzlDYXlJMTFxN3daaWI1eFdyZHF2SEpNcGV0d1NyRS8yWkh6YXJBQ2JPWTF2eUtjalJjb3RtZ0pNU0x0eTdWZzM4Q3VkOFJQV3loK01sdlAvQWl0b0YrOFR2S0wxZnM2K0pSVTJkQVhWaThUR1FtUWpaS1J4cFVBc2M1cEhNOEppWm16VkNNbkkxRUZMclZUK1ZCQ01idkF1RkRNckk2cUV1WStwSWVqVXFhN2tNQmMweHVWZzBwVnU5YnUxQ1Q0RWhVWVlWMk9MNGZ0M1BXejlpT0RadkNOQk11YjZHNzhVVDlJajRtZXhNVzR1dW5DNHZqZnprMVdyQ2d0NkpXL3RuajV4cE9BSWJMUThhVS84Mjd3ak5zSmZaMU5aRzFGUUpGdXpxTG02aDNUek1relZsNXFGVUhEMkFWSTlSNWxuV2hxcVVZWXlTRm5XNGN2c3NhUnFkWmNsK0hFMjEvUDJ0UkhqTFhtUjdndHhUSXpGcHRUMUkxVjF3Ky9DZ1NlM0xOSGpTNnFZTlVWbEx6M0RNRU42OUt6aW5GK3J3RVpzMGxLTUdOdThXRlZQb1FDMDNLUzNWS3dTN2pQdXpraU0vZGp2L01XRzl6QjBpWnlXNk1PdXF4SXliZ1dTNjdsazVyZUtjRnNLTk9jOGZudkgxQkU0bVR1Vk9uRWlMd1p6ZEpYK3JGYlFpRGpwUWN2SlN1aXRwQnNRTER2T1cvejdqdDQ4RC8xdHROc09NbTlEdmRiV203bHh0aHgycC9iMGd1UHkzOEJoVjhoZ3p0YXY3eFFmOGVPVHJJbWJaQ0ltQnB1bWxGallsRlkrTkYyK3lza1djdG5XT2h0TTBUcHAyMy9JNlpWZGxINmM2L1RLN3dhaGZxRW51dnZYRWdZaVlBK3FnVjJnT09rQ0dNTGJiYlpraDZSNEpyK1lXZ0JYWE9yTFAyRENsbmdPRUN4UHVjNXpCRTN3alBYQ3pGd2YrVzRrQlg5ckduQlFrd0VtOWtITEUrcnorcU9SdnR2RXF5RW1PZjF5RUFseU9nVUU5R2pSdFlXbUw0VU5QSUV0aFUva0kxMGk4WHRZM1NSSWFGQjVtWWR3ZTF6WDZQOUdrKzJ3T2R3NUpVZ1Arako0UlNSZmI3clhzYk1RbW5lZXdIKzZBWGZHQ3BMeVYwamF5dm9FdW5aOEkzTEdiZjlSUVZ2Slo0ZkN2eWwvL20vRDJ1RWxuWlgvUUVLV0VsTDlDWWU5dnhpeERuOHZaUkk1bUVMOUs3YkJ0UVdVWjg3a0N4QVpISmNveEFnbC9oWDhyeUF0ZFM2ejZ5VFdkcTFrZG5lUmlKNWpCdGxJalorcnV2TTFEN29OQ1NWTzFGWFVtVmNSQVlHUmEzSEY0Y1lTMThIMy9rMjFzN3VNRnByOVlsNktianpiZHo1cUJrcjZXRkJtTWVTN2c4WS93RU5IWUVqUFVvK2JYZlpXRHZzcVBZbEZXc1kxbEVncVREWkNpRExnSHFaOHhEV1FoTW5ib2RMZDhud3h3dU10VmNTVlp3V1REdEFWazY1ZkJLaWJoMWpvUHBWZkJnM1Z0cE9wZThjT0VqMlBhRHRFaEl2ZVdXREs0cWxmaWlTOEIrSXlHajJzdEdMVDVBSXlrQm5aVmYwZTJyVGpuM2FHVWdlV1ZFVUZMUnRiUjd3MitqYWtBUHUzblRSeGVWWlVxbTJwU0NiYVhtWEtHc1FOZm51OTZ0QytxNDcxMEdlQUhOQmF4cWFkTkIzRC9XMVlnUjRiQVp0WWJUWHFwVCtwRHViK3c2VzdPdStSeEZWSm83bjlJcjUrM1pIbDRuM1RSWGRid1Bkc091NGlnempyNExqcXBPTXd4MnVpYlgxTDRUWUxObkN0bEZUSU05Z2NHZEU5RERCQ2FjUXJBTXFWWXp4SHpFaSs2VnE3UnNMYS96SU1xcWkwa1ZQZkJsekJRZlNKR2wwOGd4UmxQeU80dW13empTd3lmNTVFR2QyenZZWm1wd2RKd2tMM2pEVUpwaWFMZCtiakJ5NG85WHRTTlh6WXpTWkJ0RzRsNXpvUWVLUFNhL2tBemVoSmdNN0tOOVNoSnhKQW1BRmhzZGNrUkdiYWVESWZpb2VoRUlFK3MrMFBoQmtyejFZV1JaYWtBYzdMMjZoTGNMTjkyaC82aXI1UDE0bG5FWHhGUDMxakVkektlaHNkK2pMbEI2N25RVlhNd21nM3M4TE05L2xsejBoRzJ2WjlDbFFHbFBFOWRMTjR3d0VmRS80Q3YxRUVBalhiQnRqUzRldklCQW8rQ1JmWEdubnNrWGtPQjdLR1pYZHV0WVd0eElla2pqeHFsQkd4aTFnMm8wZktNVFVrSmxJc015dUZ3cWJnSk84eVc1M2x4THF3alIzTElib3FZVG8rR0cxUFpGTDd2NDlNKzFhdzkyR2RhMG9nQmdtVGpwTENGcTBJODQzRXF1TzdRNzdUbVJsQWhrdktmUTNZaXhNcDd0UW1oVGZKenduODBsQ2pDalY2QkdrNFZBNkFleXhrWlF5aFhsbjd6eTdpTXFoRW9ZckRPOUhVQmZDRG1ZbUNUOUZzSEFMZE5SczhvQ0FCcy9HNzBoZk1WWEIyYXpHeFdkOXdwZzhLczdsY3Mxa2xCVHhFbzliVVZUMUhDek5aOG5WV1pIbGpzQVZXbEJlRThLdWo4T25rMVVKNkFzZ1o3bmlTUWdkMmtNMmJFK1BuaS94UTdKUUtKMDNnNm1jOGtadnUxbkpuSzVKRFdIRlc0QnNKb3dBTi95cys1K2ZQWi9pUnBVdmJNZEFqekYrL1p1U2REQlpsTFFVWEFKM1dENFJjYUozbG04enpVdjk4VENjRGdsU1NQd3AvZkVpRjZSbjRPL1FKVFEydVkzTWVBRWs3b1FRSzBDRnhXQ1dibDFRK2FRaUQzQzNoQysyenJyL3gxUnN4ejd6cHRWYm5aK3NzTHMxUEpya2ZRNXFmWVpEWWFkK3RrZlFTRDh5WVVyRDVSQ1JPNW9VUUZVRXlXWEV5Ny9PN0k1MU4xRUkwb2xrZ3YvTk5JMFZnUzVpeG9kd3J3SEVraUhZRmphS0Z3ejRTblFnTDJlVEdPeldMS2RqdDJxd2UwcWdCRExNWU5FQm56aXp0TUFhby9IUEZjdE9OMGdwQnEwa3JwRE1vVEM2d1QzT0t1amtXUWhEVDRuSDJRM3I0VzZhS1ZXNkR1cHI2N1ZkTWd5WVU0eXFWbklrN1NjamVxV2twVEhpa1ZMOFdTaXY2cG90bk1qMExiTDhGb09MQ0dldTBBdGVJSEJtckh3cjkxRnB3dTI1SW1vTXpBdmdYNDF0VFhwL3pFSDc2Rnp6NnF2TVZNTWFmVXBPdFVXZEpvTGRadnE3Rk1mYnpHZDQ3RTR6Zk15ZFNoRE41Uk5GVlF0ZWY3bndYSWRzWVpYdFVhWGdNSm1vaHd6aW5UWnpZZHh4WUtZK1dyVW9ISTFFRDdKUlJSbStEM3paU0l0UUZDWkxVWTVmVXYvUm5oVUhTb1hRa2t6YlVpTDU4UExSbnVrZmZpWXJhRE1vTU1NSFlLc2hiU1lNd0Q0bkZCVkpNbFFBOHI5czFSUTBDQWs1Rkw0YW5QV2ZBRittVkw0bFNMdzlwdC9ZODE2cEtOVENGOFlueU9heWZEVHRtVktpOGxrVFFKeVhZOHVoa2lHVHhXZ2YzdGhRbVAwWkt6ekxvTDJGa3paeC9iT1E4d2JpSHJaWHoyWVIrSkM3eHJiRDloS0NuRUt5SCtWTnBBUnFCQk4wYmZzWE5LNEFjQnJIaFMvTnlnM1czL1dIRXNZeVFZd3Zvd0F0ZHd1SFNkS1paOU9jRDRHS09icWFRNGhCNnFjUmdNTmk4REtST0VwZ1o0bmFSRVpuWWtTY1dLTitlRHBwWHJleXJPZDVKc1F6VzlOYVpqZWZjKzI1cHVsRGZMMUZDbW1CVC9NcUtLckl0NzRTcGNOT0Q2RTdvQUplYlkzRDZPU1ZCUVhVQ0oyZlJyV1k4N3NBQW1MYnhMd01SZ283djgwb3pUTVorOWdpMWFuVXJNRStZRzJFY3RaVE9PMU1lQmh5TFN3V0Vjc3NvejVhaFdRRjBtdTJvSFBXOTFSa0R3MVREVjNrS0N1R2lMaUdDV3BrZXhJVTRsNG40cjFkcW5DY3hlY1pVbE9ObW82eXlXdGloUDBTRmRibnFlRDcyc2ViRUh0M01CdFhQOTJqSngzVWk4ZmpybmV2TXBNNFBicmI1dGVLK1J3R0lxU0NrWFhaaUp1SkpBWlgvRFJwVlN0akpESytGaVYzUStMNGk0ZE0xR0VjWUxNeE00ZERORWpGeStFK0FXaEdPb0tiaXByaU1XQ2l4QWZWRHYzdkN6SmVYMXN0OEhwdjlkWWVCaGJXUmdSa0k5OGlvU1psakgzOXF6MUpEbXFRNzhCbHAzRHNPOFZwR0VHb2ZydWE2OGRwY2czV3ZpcjUwT1dlNFBXVGVHaFo1bjJlMGNZYU15YTgvTDJwQ1pma2ZkbEFKUVFUTlZIWkdha3pCMTB6QUxOY0RwUlFjdzZjaGhDNlMzaWx5ekQ2d2VIK01MbFJlMlhpMXBBTzYxWDZncEUxV2NjeUdzZjhlUC9RUmZlUlNBcVRXL3RrZHpXckQ3NXB0TmpBTDR3TEs0SkJ6cENTYXE2NnRzNVlpelhaVkZRZHVjUlIyNUxOc1g5bEsvcXJtcHNiSENBNmwydUE1bDFqUkp3SXZmbWU4WC9RbWcxOHAwYnAzQ3ptQ285cS9PMGVDak5JV2ljdXFQMy9LaFlYTStBRWJTcWI1UDdGL3VaVGhFOVZHR3k3REs3NS93c2oyMXRHMHFkS3ZwOHdPT3MxaUF1QjR5dGNlTXdHZUV5MlU0VWl4ZUJSZE4rWHJ1Nk9IeFpIdytQS2dIVGkzMkdLWExZekhjT0VYejdadFh5Y3RNcG5VWVd5RE5rcHpIWEM5enIrK3FpMUZqc2p4dHAxU1B5a2lqQlhta1dyUVhqVkowUmJFMjY1Wk1pMkpiQ2ZnVmtQa0RLendwZEFhNk81eUE5YU9oY1U2c2J6MDFRcU1zNVpkZmhuZkEwblRMUDJuV0tVU0tHQms3RGRrYnRVancvbUQ2c1FxMllBSTBESjR6L0Y0YXBwZHZ1RFJTNjU3REU4Vy9qdzB0T3ZaM0poYzJWUSs4b0E5L2V3aTRuc0FHNTNoZnZXZG5GSnVmbjIvU2M0bHZkWjVhR01CY3pzR1B6OGxIdDNJK0VMemlqK2hmOUd5WHVvQnJXQlVIYTAyQmx5VmsxcEMwSnJybFBya3JIa0wzeWxXbUtwVkx2NnpXMDlNaU1VaWJ5bHpmd3pYTGZaamh6dlBYdEZDeDhsUkc1eU85d0ZoZWl0cFhacnhGRTBGaE5rMmxMZEp0dStTN1JjWlpMTGlBQkxNWG84Zm92VWNNTDhjQjkwSG5CSDkrSnhrWGZIR2N6WVBZa3ZJNlB6VXU5SmlrT044dlRBWnlBNWM5YjYvZkhFT240WDhyZURnYWIyR0c1WGFCVVFlcnphci9teERUb09xVzdEZ0x2TE1xYXNnYnJaYktXY3I2SHh0NnJrY2Npb2I1V25ERWR0UkJaWklyT29xZ290L1k3UXdVZDV1ODAzSHplOWVSQ3IxNHY0V2twZHBpYXdqOFkvaVBuQXZaVVpZS1lFcXgySHcvWE9aQy9RL0M5MklBcysyMjlhTytuWVhsZEZIQmlCbG5pN0hWbjB1Nk5SVVVEOVlRSG5yMnlTV3huSnYwRWNDckNZWVByYnN4SWZZNU83S3B0bk50TTZIZWs5SFRROUpnaUpCODFXTGtnWEhCT1hJcTAxMmNkNTBmN2VTenRFajRnZ21tTlB1K0g5YmhqUk55MXphbUJLQU85UmJrQTdyanNFTkFrOVhpeWtCU1VLc0JmRUl0ZnpnSjBDcXVNb2JuM0ZtZjF1V2VQZW4xYk1Md0hydDB0RDMzcDMwcEkyTGp2R3Z5Q1RsMldzcGdBbFFyTExtS0lNYlFsQjFiZWhoZzJ2c0VDNkNpSE9kekxmazBwNEJjRmU0ZzBDUG4ySkZ6K3J3emZvM3RaWEZNclRjc05xaGx1ZUl0QU1kbkVLeEdDOERrTmJEZjl5NERtWVBYNnJqZENEaVdETFJrTlNtam93R2wzNFZEeVVJU1gxYkhVT3pTNlZpN1NxdktzaVJVQVBuKzN0c2dsTlJuRm94Qm8rQUNJbnNwR0xyd0hNdUpOVkJhMDR5WHlvdk4wV1cvZndsZXNFQmZwT1BsWXgva3JpMXN0S2d1QXNONTloQnJZaWtsZzJWNFREbE1GTXlWczJXUkRCNmUrZG9CS1M5V3FFeU5wbm1tUStWcmU3UmNjK0l1OFdoWUJTMTNDTEZGTEl1SnVDWHR3cHZub3pqa2ZtSkI1K0pwbncyRDVxV3drUUdOUitYSVdkaFA5V2R4RlVvK3hzM3hlcHM3OU9DVFhKdmFxdGtUdm43Si82N3hRNmROd0NXZURIaUp6eFBtSTJsNEVyYXRHRk95eDQ3Z2Y5ZU1xTUxiWXdnNE1xOEIrM282ZlV4T1grSGxHYkp6RXJObUNFdjg1Q0NFbmlaRHd3b3pCaUhwS2o2Q1VXLzBIemJnYmR1OXZYbFJUZVNqTWdwd3lYaXdZTXdiN2tzZnJBNkQ1ZVlWQlE0cWVNbElHbDhJOTROdk9ZNSs0MzBOR001UzY0VzhyT3RrT2NjRmFvSWhvenVJTkY3RHJZdWhqcWhrMXB0N1VuMDgvTXBFaE1Kc2tmdTcyOVlRRk1MMGxTOE1FSGpreHpJYlB3cW52c3Vid09qbVFRUmdMaDNRc3dtRWdBUzBaOWR6ajFrYnAzeExnbmx6TEZqZitiL0RNUGJyby9JNHl6NlJkZU1xakk4NlRqK1gvcEtlQml5ZTdHQzJjZzJVYVhPeEpJSGxnY2pZRTI2M1lJanZ4YjkxM1JVYXhaYUR2MEYydjd5aGdDMkRVcmd1bExNcGY5ZG1JZzBtdmFnd0NEc3k3aXBKZkVLa29HcWN2N3pUelVKQnMxZ2FwTng3akZURU5oanJjZzVnQkJId3NlRzAvTHlkb0JTdTAwTENlczlXZmtxbzdaN3owZFRuZ2Q3OFJoMUZmZGZXS2JaQ0Ixc1M1WE9XR0xZQXZWYTBIbGYwZFMvaFBPUmRNbFdaZjdtZnB2MzZuUVRCUmdDQ1RKT1N1UmQzQVNQTEdXWkVaZW5YMWhTMGRPa3YzTFZERnlnYXU3OXM1a3l5cE5lOFltRVRoQzVlSVRoVnJSckE4b0t5M3VWZlA1ZitxOGVUd1k5clRFcnlwUGZCb3I4MC91SWExeExxQ0RxdXNRMFNuTWlKdXI4dStOTWhMV3k1MXdRdUt5R3BIVUlrNzR6bW1FZ0V1YVh1WUphMkt4K1dxbzdVMG55T2pXdmdJdUJZRGVHYlRvRVAwSnBmN2ROUml2MFpXbkZ3dXhUTHB6UWVBK3FMbnNxcjhEazQrdU84anBGUmc2dWl5T2tiVitaUGtqN1I5b1lqMnI0U2dINUNDU3RWcFlFZEZiL1hBWWNkMHg0eEJJYTVLTVAzdzRQSW4yaW16b3FNQTBncnZBOC9kSE4xWWlQT3Y3ZVRSeHo3Z3BET25oM042NFJtNERoYjFNc24yZktqaEZiWjV2N3h6SlphVDl6RlV4WEpXVDFkVU4wOFRlUmJJWnI2Z1JPV2NvWURqUGU3TkJEZkhWWWtrZ0JlUXJpcUEzVkx4Y2R6d3pLTEtaL1U2Q1BiSCthRllrZzJoZ1QwRnk1cVlVSHJGMHphVlU3c1VMU29PSEk0bnJMVjlHTFRlZy9rTjFDMzhrUGtBaGRBaERCSUpqeVMrajJKVHNqZ05GakhoSHIrSkRFbExPMVNHdlQ4NWloWS9zeng3OFkzNVQ5dlgxQ2huVUlEcmhTUVFJZjdONU9WVDhWVHVaQW4wMklrYXZnWXJBSVlvS3YvYkVzc09rY1BMV2Y0WnpwUmJZT1dPVFZWank0dE9PVHJLb3Znb1hwVnB6SzdnRkhYWm1vTld2K2svOFNGRzB1UVg5djNwKzkzWHNKWTB2OG1yTFJPMWhDcWdjSmhuMGE4WGZNRXhNNGYvb2NrbDdlTThjaERGMXFjTTRISzVuMGxVT0JFa2t2Sk5OUnh0eFV4TVZPeTJ5K0hyd21ZR0VQVWxwazRlRERvOTZ6dVA0NEl0bmFYdkV4Q2lOYVlhNEdlOEZNSlFza0FmTy9ZTkMvMWxHRVVqNmJYa3hjd21uakxZUWppTDVhVlBwS2VkQ0pnMzJKYnpxaTB3OU0ya0RZaUdlQ1c3cXo2R0ZnYS9JYmNWOGxhU1NxbEpOMDE0cDVjNGJsYk05cDlFOWpEbk5Hakp2dWFVRGpBcVNhcUYzUFZQbnk4am00aUV3WE5zdDVVVkZKMDF3Tjl0QUViNFAvWE8xQXN6MHhTZnVwd0M5ZldjN0M2c0VTRk9CQW9ReHZZVlV5YTRTbkljMDIxb0xNMHprZEszM0lQenVkNHp0S1hlbEErcG0wajY2MVR4d01yYVVsREM1N0twZFdUUVNHVTc3eWpiNGFUaTYxNUJpcjBSVDJDSkZWaS9aUXRHVDVnVzNiSnM5d25uRDFDVDFySUdIZDE2YzBxS1MvOTQreG1wM3E3VTVpWUxCVnhJQzFqRWw4UWlxMXQwSEo3TkppbzlydUlEOGZsUHJOWlVvZDFDZHFPaEtXd2xhWUNPWXc0Wnp5ZGFlR0R6VmM1NkczOXV2cUtuNG5RdVlXQ3ZkOTBhSVJOdUFtVnpLTWtrZENnU3lJTy9UendMOXpmWVVYVlNiay9lRWhjaGZsOTJZYUVXS2JiWTc1VXg5ZFV5T1NBa1psZm9CREtMZUZVM3ZWV1F4UVBLdDFIVDhCNHNHOXNtOUo1WmFVMGF3TnN2OFcvZG9tRHR5Mzd0RmtqR3JKRklmRmZ5NDlkRVFaUmhHdDc1T0xYQmRCQmN0RmZCM09PR3lubjg4ZEpPZmk4aUZLaVNnNDRERm5EaVNMdXNNMThkRkNObk9nYnl4MUIrSUZRbmR5bndONWd4WDU0bFlxYmkzRDk0eG90bUxuWksvOFFyVGVoMlp4elE1VUZWL21lck5sME9GcmR1MnE3SGVETEpNWDh5ckdqWG9aeXRmS3dmeGxlM1U5U2JFTW5pa29YM3lIaElqMmsvd1BTenNRcGI5VlRkYXhYM1UwcnQ0U2Q4N3hGYjBUQUZFanI0ek9oWnpmUURQZHN1bmhoTzVJZnlLSDNoVzgvMHpDYkRwRzRRQ1NnT3RGMi8rR3RKd2RRT20vQVh4WGI4MGVhVXBxeHlaNzgxcEx6cnAwL1NwV2lJWWNSNktCU2ttcFNPTHFBcmhpdDNlanRxSWJ2YTQ3QVU2dlNqOXVldU04Rk4wQVM4UWxha1VtTk85K2xKdWNPa3p1M2NwSTc3MzNtbHNtTVdVbnVmNUNaWXN3cmhTQ0x5TWJPUnlKaFErVkhld2l3bDh0MDY1bzlDNldjWGZhWmZmdXVLTkRkYnY5K1RHVCtueFVqazRKYTRMeWZEYU94OXRQZU9lSzQ2Z01OMzBJY2M0TVJFWXdpRkRRelJVdDlJVzg3eHBwWkNwRncveGVKU3o5L1RsR0E2MUw3MWxNZW15UElKNHR6emFEWWx1RXZJWHlsMEpURC9MakMvZHJiemdvb25KRkkvOXpHSnIydktITGNtVUFCbXlPNmQvUitYL0NLWVh0cUl0TkpMV050dW1zWjVKdmJab0hFdDI1TGgrcXcwa082eUhkdXFaNUx6cWpNSWV6bVRCYUZoZEJkNXkyT2F0TE9GQ2xoSVJHMHFhNDNIYUFqMnFSK3l0RzRwanVBTDByNWZXTEVZV20zYUpTQ1JWTkZvQXJnb0NpWkVGRXpCS0VhV1dLZndDWHhSQjFsM3VsbEJIcVJrbFBzb3dxSUx5TlVMek5rTlNYd3FYNzhLa3Rsc1Z0STZFZEVyTFVHNDdhckkrZmk1bzcyRnlETkJvNVBEMkthditCWjgyYTlMdG1ybU5YbXFHMTA3VFBkRHAyQkVCbmUzdTVLbzlQdjNLcVBLYkVPT0NOU1VBN05kb1dXQ1ZwY0lHYitqdTVQaXNvT0w4YXJzYzBJSWRjMmtydmoyTlpQVGtHbTJDUmRVUWNQTTVhR0FvaE9nYlRXZ3ZPenZCU0ZFeHk2VGlXSU45ZlJVbnFKdzMwdElIWFFaa3lEVHh5M1ltSzc3U1dVMzdyODhQUE9oWVBNUjA0cXNSQmsrQUJ0WHB2QStuNGM5YU1oWEQvT1M3NDVUaUhwa1gyUmUyNGhPa2ZYTTBrMHVjLzhJdXR0RGVHNm1SVGY4QlBIcmRhenRTT3FSL1pudk02QWxFZDBjaUtUY3dHSWx5d2tmd0ZUSG5ITFB4ZUVndkZ5QmFHelRBMHRCU0Iva3RsNE5kb0lnQWlDRjhaV1Y1T0FkalRCM1E1ZXJQaDNjTlVld3lhcFAycU9LOGdOTmQrZzRlRWt1WW9IaCtNaE5zdkVEQ3duZFFuTWZpenowMi9mVDQyaldQaThydnZFeGNkMmRBbkphNUQxL2lneHZQOGR6TDUrdGNxSytTS2U0VE9EK3ZTUWdBZFhQcDhMYWJrd29BendVc0s3SDVMWGd3Q1Q4S3FCZVQxcUpxc21yS21ERURnN1REYXBNZ1hVNTBCVEFtZlBnSlNaSjAxKzRtZlo0c1ZGVDFXVnJqeXcvZ0VGZFNLMnovRjhJc05DcHAxN3d0WlllVEtQdlZZUm1KS0lNbDI5T0lBcHNqZGNwWW95eGYrbmdDMDRibFBhTUlnU3ZmRVNBMjJUcHJoY3VmNWdnMy9PRXMvdEhzUWNBQzBuMWdqVzR2L0xsbUJ3VmM3K3Q2bXNsVVFHcncrS0xtRHcyVy9lQjUxUXZyU3pwVUdkK0o3Wm1ES00yaVROc1hRVE15TUNWRWh0VGJLZmZLb3Y1UGxBYmRVQXdxdGZIR3U1R3ZiblNuYmlNMGx6azdTSjhZWTFQMzRKL3NsbWVJdkM0MVhlSjVZMko2YTY1V2NCdFV3RzZibmJaZktSdlF3SnpVYkdFQ1liZHN0VFNPYmRKaE5FaExDZEFKbi8yVjJ4ZkxxMTBMRHJGR2hMQi9PVk0wQ2UzMm44VnRoVS90dVArWkNhYWh4UEtLNVJiZHltVE4vOWQzVDgrS1NSdy9qRS9BWXl6UjZpUTE5dm1OZXB5ZWJKQWtjU3N3WFhjWFhkc1Q0RHhtTHQrZ1Q1UWpOd3ZvekpPa1Q1eTBFbC9VVkpITkFzTnpVYnFoRDJNck9FZ0tlY2RjMktPMnJ0amdDa2ZzQnl2NVlVS25PZFZmdVk5MmhWR1AvTUhrcklxRXc0UGdoT2NvYkhzZ2I3OHFhejhSN2M5eUdrakxVVWR1SHUvYXAxM0ZrY3NKOHlkQ1FEZUw5U0YxY1FCVjMxUDBUZHlaNXdNWHd2R0x3TEdRNVlndGNLQWlmZkVFOEtJRW5QeWNhdFJLcldnOVEySEY1RlBOeE1wbDZBNGxvbXR4SmFaUGpyV0hVdTVmMTljcVBIQWxNbjdiK24wSllTd1gzUzc5V3lwQ2pybUQ4Y0FYWm9SR3dHSWFEK1hrV3hXV0NyQ3U3dDkvRHpMMWRLRHpZZlMvZTlsdGdyRkk1eDNhcnphTHVoVlAvWGs1SWJ6S3ZDN1dHU1hPYndiUEJ6VW0rWEQzUll4TzhQQXZBZUxyQkRHd0FRS3VIZnF3ZFowZVlYSkNUZG85Nzl5SHVVM3pVNFhhZExNUE1IMEcvS0czaU1mR3ZUQ1FENmxJVGovdFcvQWMvcFRKRFpBOEk1TEdCYlIvNWRFMnVPMVl5a0E5QmRVQTIzZjFvQ1FoQ0tIYWlERlVLdG55R0p1T1V2dTdaR3NYVDNoQVM0M2ZFcTJqU1hhaVpjNTl2SFlDSmRrMDdaUnZLRlFFTjYwR2JXQnhabjNpYWRaQWRwaUxRWHUrRmJtQlRBdENlVUJYTzI1bGQyWlB0NjVma1c5anZBYURhRklTMS9NR0NGSFBHT0Z2eGt1c3hpNWhGalpWUW1jd3dnTkJrdnh1UUl0am9vV1dJT1Q2MnlLUFRJLzhGNERwTDlNL0sxTy9RTVAwaFhHSCtjRmc5RmoydHNXUkRSVGNDZVE1MGdrc1FlU0d5R3prZ1BFTGVpMWtJQVBLUVlkUHM2KzJvaHcxaVJUNmNOZ0dRaWZjWDJKbVV4SW5iaWRzQnZEQXJoa2tlSVJ2dTl3ZjNSODJ0bzBWQ2ZvNUxnS040UmtqaUtOQ01lTkozd1BEWEwyR0UyRDMvTnZsbTVoRkdQTzFRSm5iUWtpcmdMMy85QzJuT0lsTlUwWTI1RVJaNlFqZDh4bTVTK3g1N1lwSDdJeG9tR1hBVnN6UDZKRW5EUkRRRmxOS0Vqei9lVnBJQ0pDcC9PQUJqeVRPeVpaU2FaZlpoSngvQmJUbEdyakNBTzJjOStPeEwyb0NRamhlWW92bnp1eCtIUXBrWWxnUFJselRzRHg5eVhhSXFpekwxNi9UUjNQNlNNRjdyQXpkQ0NXTXRRTWNqSXM0ME9nbTNveVpIOG9NUHU2NEw1VmdMU3UrQ1BMZ2t5UUFqSGVjaEhsUTNCcmwwUkx2MHdjSjZ2SFlCQkxBWExHMFczT3NDNy9ZcVB1b0kySElGZkhrUlNtMmM3bDVQRGRROGRNYUV4ZmMwSzA1N0F4eGdEM05MZUxmM290OUZCeFlnYWdjQ1BwWTluU2tQQnNDNXJxMWJaVHc1dk4vV0wxZDR3RWJlZ1dHTTAwbTQzQnlUZUNJVlZnRmNtVVpNZ3ltNzlsdXp0dFQ3VkxFVzFiTjZJNjRmRU1IdjRXcG9qQ2t2TmRmckV0ZGE2bkxjbzVOWk5WK21GRjlDYnhwTDJpUXpGNWxuVWVmUWNRT2ZXc3gzSkRkMFZhM3VRTHFkUmVKeCt2V1Z6SHJab0o4MGtsVzczb0FHZG9Cdld2MSt4ZGw0WEU0RWNCYWMwZUZ0QUw4c0l1R1A2eGhWWTJkVExyZzFJR3BUY0hNb0I5TG1NTkh0VGY5UEpWMnhIeUpUUDl5TzV1eVl3bjdSSDFxdFVxczlGSXVGOTBEZDZYaTkrenEwNUhVcC9qNVlZalllRWkwaTJramFOS0FkSlExeVpReEpKaC90WnAxdEd0NnZaQTVIRVQ4d3ZhVFpiSU8zN0NYNW8vYW5hdkpkaDVBSkQ3TFloLzVqUUZLbG9XQ3JEMnUzYis0ZDdkd2ZaU0ppZFY4WDdOTmIrcm5hQlpMTnJtN29xUUVPSGFLdlFheENaTDlnRUloUE9OVmZEenAvWnIwMVZzQnFiN1BDblRvTzlGeWI2aEdPRFhIeVpNTnJONkpaUURxMVdqK2dlQXhEejJDekhVV203dzkwUnB3b2JsWUVPMkdWbGRIR29rS040S1loeTZWMTE0UFRPdFRkbEJFWFVkVllTZnkzbEVKSWVzVk52NHg1cFY3RG9BOXAyNlc3MzVqcktMNzNxbjA5dTYvNDllaVFMc1M1dXcxMlBhZSs1SE1rdjJRRGpRY1l5NzNpeGFwakQ5ZGVJTlk4TXpFOE5iTlFKaU5PcnBkQTdaaWc0UldaY2t5T0NjQk5rNjlwWWpacUpwSFI0b2E0OU1wRExHUGtqZ1JlSm9YOWV0UXBqTzBuU2ZwNGpFbmxqVnlSMTlrdFRMWEV5WXpubERwTjBScGJXMlJ2SUhCR3JVUHpZTU9maHVqeklualkwT0hwSGpUQmF5YmJOeUFiWHJBeWxVcU9Cd3pCaG9KTFlOWXBtalBrdkt4OVRqY0l5QVo0alBHQkJSNnJBNGxCN09oTlE1dkJpZ0xCbVRWdmxXVmt3YVRmNHJKeXlDd0pRUVAzazZYeU9qZnVCZjE4clk4U0ZMMmxHMEg3LzFCb2R0dGNIbHZTYmRqU0pBd2tTWXFTQVUzMU1tQk92Q0NpQS9TMWt0NFptMXlWanZOOFJQOWdKK0pLcnY5NEtpMDh3RXNpV1kxOVNXN1cvQ3QvUTJCbFNOaFZvV0pJU0xuVHZmMmpGN2p0MVNhVlZuaXNRRldjazRIa0M4U2tDanRxSlpvZ3VnNXVkbm92bHJ2cW4xRFhrN0gra2tSc2lycXN2KytmYXlia3hiQUVONFVQZnYySWpMRXRwOXFxZDZnbTRlSnR0RGRrdmJEMzkwUmE2cFFlNXNVZnd0anF1SmxaanpxaDhjRHkvQmRhTEtNa1YwcEFyWDltK3U0MFIvOEJjcHJxVUQ0Y2NaZ2ZOc2hLUUY2UTFwbWw4UjRUS01xWEk4WTBENGpKcTZERmgwQ3dxVjNpWU54VmpFUDJuLzIyRnJSQlNNRVYvMlpMY3BVdkUwMFBaTWtHNUEzNDNsU0JkMzFwT0I4enJxdzRBZjQ2bGpBRzZXUzRYelNCN1pKWXIwZXZ2bVNKbFMyK3ZmcmI0bWdFN1lFazFobEdKYXZLcVQ1WnFNdDhFODNubzhWTU94cm95ODF2azl0Z2g2VS9KVkhlZjhnMExHWXQyYXpCbGxXZ00vNWJjQitrRUhNT0tlQ3I2OWd1aW9qS2hKbEo0N28xQmVlWHgvTWUrY2trdDdxRXR6aVlZcGxZSXJYbGVxL0lnOTY4ZEpnTk5Jb1g3aU1aM2tYaDNhVzVTbUlXZ29QTDhENmx6U3g0ejFLMG95b3dQOGlWUmtPZkNpck13UXFvV2ZvWjNJd3hIYzlaNTBxa0pHT05ySjduQWx3cnRTZWF2dGh2cEV5NGdDS2ZIeXZyNGlQOS9PYmtheGptWDkrdGowekZNTDdzWWZNRWpjQno0bmRhcEptSm1xV1prMXg3M0c1MVpiWlZtOWVDMVQvYjVlbEt2RFZrN2NYY1ZrVjlBWmZHSFZBV3BsNnBub3NtcTIwbmNCTWk5Mk01SCtxZ3g4dEVNcDhWVDZ3aDJmMWFDbXA5NzlYVE1Tdkt5aFB4bytzNGdVaHMxKzJwTnhEL1JoWG04emNJdjNaZTQwSkZjSDB0M2NHRWJUSTRGc3ZJRU82dCtQOFFmeW9TUHNjU2lHRkNVMjEvelM4b3UyYkZSOWlidXRuV094M3VoNS92N3FzSGZ5TkxsODk3d2kzRW1Nc2pHZjhBbm42L0s4U3VJaENFT3FQZ1ByY09xc3p1RFJmZjdjc3VLWVJzNDVsT2dVeWVOeWVnR0licHNRT2VUNDk1bjVzUEFhQ2RLQURuK0tsRDZRWXJLNVRKQjB2NEFhM3o3WDJkRlpVNjNab3VTUGhvN0h1dVk2UlZ6QktPQy9mSFpUUERTeW43a1FzT2IwMUNrWGUrUlM1ZzhYQ3NqbS82aGtEaDdCRnFCczRkRys0alpNN0EzWFVLbk5VL25KMHlRV1BSdnZVNkhuT0dNYkRJT3ZaOEg5S1R4THJkRitaaXhra1BySHJSaTAwMVBnQzFJbzNLWW1lL21hcUN1TEs1aytWMWR6TXhaWU9UN3dIbDdzVVRwTzFhdW9mNkhqMlllNGVDQVMyQ0xDR0VHVkRFdnVtU3hQNnlIYTJpdkFyYStMeVpPLzg1cVJ4cUhNNm05Zld1T3V1bEgxUVM0QUwvQ2V0bnFENWFNYlhJWlgwZXEvQkx2R2d5NVFTd0hOa0JTT3NqRXVkZXhXTTB2MW5GbG1hRlBHaFNpRWZTUUtjVmpGUTIwOW12NVRqREVGNkJFWlJsSjlNVktTdWxMVFBOTllseEN6NVcyR1AyNFRHZDNRa1V2N2M0VGZYR3UxWWFLSlVWMUhpa01vb0gxNnFwVXN5aUlwK0JxWndhbW9kakwxSGJGNjk2QmJqUDJUNndlYlNEUzZJWmVsR09KY096ZmJwZ2NQblNkYUZJa0xHVnBvRjFaeWtRcGRQdnFIUnVmTm9QQjZzYi9OVGRaUGswUXJhdDZ0aWg2bjc4UXhWZUYybXRFYUdsK1lBdkFOZ0ZiNjVsRStjSHJYMUgxbEdXWHp1SnRjT1hiN21EMHk5OGp3OWJiOEVzQ05PcExvWGVKNFBoaWJ1bkVVUmZVVjN5WWNKN0tqMGZlRjMvS2pISVJKa2JvdXFRK2FEM1YxR3dTenpZWTNFTE1VQ0haTENVREU4R2hoaWx1Uy8zd2g2VEg4M08rTVRYUGZJSG85M2lBUkQxRVMwNGJUOExYQmdRN1V1VzNjckJxb2twc2haSzdNMXRoTjVkeHFNeUl1bURvQ2Q5V1YrbS8xTy9HQ2RuWHhOYURyVGhIeG90VURSaVo4dlpndk5pVjBLbVQ4TEY3LzFJM2VSWXoyVFd6SzJQekxOcUVXZitnTmp6aDd5UlpMR1VKcTNEVldHbFBqcm80cGZ5d3BJL2pFZ3F6UGxDMHFuaUxjRHlkSWJmQ3d1NUVsTUpnb0hDWnAwZkI3OE9xdUdXNnNmRkgzZmNEV082WlJyamYrMGF0bkNXcG1SN3VOYkIzQnZMSldxMExFNGdzdTdROXNzQjZRWkl5VUxDWDZnbEdFZVpXNVJtNzhma3pMSlRCeENBVTBhV1IzaDhNcVJXRUtLR2Q4SCszSGJ0L0V6VUFvM1RRdHdDSWw0ZE0zNDUvVGxCWDFzN0pScC9RSUNDRG5UdHAyNGxUbzdmQS9vREc3dkxETjlsK2ZjdkFhSGllcGtUT20yeUdyZTBxcUdlYzhaMjlqeDgyTzIyWDhrSXA4a3l1c29zSk9RUEx1cEd0aU11aTdTZnpXSndxYThBMFNLZllQbWl0VUdoWFA1VFRjYVVDRXp2eXB6VWVNY1pUUFdJZnd6RGd6NExIQ0Z6T00weFNZQnZwVkNvVHRPRXIrYy8vSDhRT1BEMW1CL1d6TkczbkVlQTNZN1J4UHc4c3JsTGMzL1B0UmUxTXNvSk1XZmpkbnFndTd3RkFOZXB5YkFneEpzUVkzVHNmQnRZNmdvRTlmMmNMQnI4T1dOTFpJU0hGMVM1TGRJeFpMUFlKaHprN2QwazljTW0xdWxURm5icmpyMmtpa2VQVDVSRlV6VHpGRlpVcmh4eVNQaklWMkhqbVZkZVRtdDgvMVQ5ZTZ6Mm5tSFd6Zng5RC85MzNkSDNUd2J0bHk1K2oxQ1RnblIyTldQMHZJVjdCYzFVN0J1Z0x1a1diVzg4TEFQSzFhUzBLL0R5WSsreHlLZFIzUlV1Qml4MXNsTzFmUlNBdGxua00rM0tHMFNqR3lDV21rVkxCcDEwWnR5OUhMQ1o3aFcvdXU5QkM0KzV1RUE3RVFaeE5zbDQ5WWE1U2xjWVQwcHBDZUN5enZzTTlLKzFITmE4bFdVSERDSG1xM0FtbXFvN1gwZElWbGkzUTg5Qi9uSnVVKytWb3U4dnZ4bTI0bS9jM1k5UHNPWW1OL0Qyc2xpd2hLanhLcS8xUjRGK2V1cmovM1ovTFlESHdFZ09ucTZIRGllSlNnVy95bWNHYU50dlB6MmtTU1VHQ1IwclRGZVdhRkFYQXhtSHNLcFdxbmVKVllyckpGRjc5N2lWendVeHVhQTVVejBiYUxURk9qYUlhNEZMNHJlbHl1VWMxb21EVW1oc1lkemdHbVQwUnlLNE5KWHQxRTVtZ09laWJUd2RiQ0lsRE5DSW5uRzJQWk5ZSUU0bktFd3l0aWVabHhZYnBBbVpyaHhUZ2ZTallnU3NoWE1BSmVFdnltMm1wTjNlTzlyL0xsOVpRRTJPS1lmeHM3c0UxK213aDFPaFJaeEF5VnhOZHV3NEIwZW1KT0dLV0RBVnlTdUZBcGUvZERlWlVKNjE4bHBISDBqam1vazJHTXRiN09wNlU5MnFDUll2Y0pkUUttdENDK2VkeUwvYzQ5QzVaWU92dWIyclYySGlxL0xNNlBtV2dkdUxHbVJJTmZWVHo4dVExcFJLNHptVkc2cmI1V0t4ZlM0bnAwSHJ5Qmg3V092YlF3d0lGcGs0Ty9HdjlDejhwb1dRRmZLVE04STVKWkdFdnJGdkdIOTA0RGJUcVI2UVJ5dGZNV2hwdk5abjlGVnNqNTQvSUdBYVdCVExkMDdjTExSNVpqam5LaFZEd0tTMnZMcXV1Q24vU21rdm1QNnJ2TGV4TytCSE5EV0NaNElsdXhuVjErc0lPN1VDcG0rcVNpakN4Y2RDYTFYRUZFR0pKbzI1QzhMTk5zU3R3OGg1RFo5bXY3aWNGT3ZvZGVMR0dPR095RGJNUDF5cFE4TWtqVXZGUktZV0NhandSeFZsaG13dHpLeDdxam1PdDBTMVJqaFJzUWp2R2pZa3dlQTIxS0Y3c3NtMUZnYktKeHJKV2lVczlqM20ySHcyd0d4OUMyVGNDbE8vUnZRTm9iTDVudSt0bFRvaUluaXh5WGdWMlMydDFtamRSSjhVNjVxMWNBbUFkblJZZVhkVHZJcXhESnhzMGczRTlXeGpMNmlkSytsMmQ4YzJodlpUSkxLTFpOYzVyNWZnUGZlbUxhUER5bkFGMTlHMnRPWFlOdWJPeFN6R0l2b0hQTHM3elFlamh1ZngvSDRKMVA0RVlLNE9HOHhQRkVrdkcvbEM0UHRBV1U2S2hRSlROaWI1ZTNHTktZTWY2d2orNGNITjJuQjRiYThENnlpamp3T1NTRWlGYlh6YmFGZzRxbDljYkdUMmFGOXN5Yjhaa1hpRkxYTzRqMjN4YVhnT0JyeFBxSDlsVGpldVpnNEppNGc0Vm1rTGZsdHgzK1Q1SCs1SlJXMmRSU1FuQm91M2ZibUFzU1JWN0lubUliTXN2SVlLczFTZUllOUNRZWVwdit2a0FTWUZvV2s5N29NRWxESzRLbUVteHpCRzBJanJFS2VzWVB6czROWHBqQnh0M08ra0F5Tlgvd2tzSlZSMlhTdHlYUTRDM0VQWnV0Z2FjL0NML1RNQWhhWDVnQXhTVmNYcm1mZXZvSFNLTVRKdE9mSHgrcHRXdmlKWjhXYUFjMFNTa29QdFRTMjlzTFJ0Z1U4RVYrcW5EWlFibk5iTmFrTjVRaG1nS0h1SitEbkwzK3RZbHhiTVo1OEpGVVZyVVVtRDFMc0lPV2lHOGwrVDM4L0xHb1ZsZXBCSUVTckpldjd0c1V2TWFTSWJnRWZPVlh3TEI5WjRQQXQyMzZwMDBaV0w4d2JScklJU3MraUFiSnF0a0NzMi95aWIxUnNTZy9sY1BTUnphdjlXMXJLeUgwbzVrdFdyYUtiaUxiU1NUZmc3TTRDb0xDRGszejBXc1U2MkhUd2NHOFdqTXk5RWUrZEJiR1FkRXJ1WTlCZkN1Tm9kM3JWUm93bXZubDlhazQxTlMvVGhLRk44UEpSSzNWTUlrK05HZlBLazRnaDBvc0xNb3pPVlhNeEM1R0NLdXRBWHBobms4SnVpWjdDUDBBSHpDTjBtUlNMeVdLMkQvcXBWb01sUU1qSFZOWHR2NTRjZEpKQzA4Si9JemRwcUVob2ZXaE56U3hIQWdLOWpyYm5Bby85d3g4QUhzRmMwWk1YL1lET3RCamRDV0VmYWc5ZWZyVDZtd2xFckw4TjhuVmNuclJMWjB3SlVvbEtzWmhIR1ZlZ1VBa29DUTNvQ2RuMCtYSGRSK1FvSURNL1hmdGIyRDJsTm9nTFJkb0lHUUkyMk5CcVhxR2o0bm1heGU2Q2lrWmlwVWlCODNNMFhJaFFhVm9PeFhoRTdwS3Y1b0VtQTJYY3g5NFlKYnFMSG1Wc3BjRjRQQW54cEJsZTBKV3N4OVViUUp3NFRWb0pwdWtkL1RwdlM4MnVHWEFOWUJKc3BRL2FPMjNCc24yaktFMmU0N3kyT0I5ZG9QeVlWWndnaVZTdmZKMm42Zmw0RlpveGpzQTRlb1pyRGdQb2FQSUdwb0lJWnBtcnFkS3BONUVKZFhWeUYvTjhkZitKTkJrdGdNSUthRXdnN0xhRlJkMHdJbGV6VE9lRTUyclFRQ01jTlh0NTZtNUxYeDVJUWZqa0MrMVFuNmdmOUVqbW9MUEtCQWdsQkFLKzNwbmxTMnRQbnBJOGpSL2hxNm8rM01vcjhDaXlaWGJ0c05kaGVpZkR4L3JuS0dpb0JZRmdZbXFnRWNIRmZyTXR4elN3Z2VFRFozd0VuMHFEMnF4R0RXK3BLbEZnV3IrMVpoT2s5c1VxTDBHWGVMeXI1anpjL2ZEVlZmVnVGUkYzS2pycjdLUGJGMTRYNU4zWU5XZHRVWXE5eE9CcFhhemlSNnZrZGZoSFZ5SWdPaXg5QWpnTW1GN2V3RkJHZmhjMzhsVDBrZGpVcUsyQm5qdERqZUNheXl0bFdTVXFFTWVZTUl3Mk5xM0FKbENEVUZDNmdVSktsN045MGpqQ2FiQnp4dGdxMzZnT0hUemVmek10eHpHckRXV05sS2Jvc1R5UHcxK2pmUFQxTndPUSs0bjA1K3lmdUU2OU8vRWJmNXkvVEFBbFNPSGZmYXpUeTZteFJ5K2RJZHRxc1ZJa3ZWV1poYkRzSnlpbjEwZzN0bWlKaDRqMUlaaElUWlNRQk0zQmF0YmJuMGR5SDA1YlpOdnJxQVAxNEFpTndSZ3VjbzZKbmpqY1l3OWxZc1NaS3dEcVVzOWxPRFlvNC9TZ2FzYUNEVmVqYm1aK3UxNGVEZ05pb1BwaXg2Qkt4NC91eG5yOVJkdnBNQTdZUDdpOHZxVzhNaDFEdXJtN1hMdjJtNnRTY2hONXZZOHdsNDVNUms1NnE2Qk1hdjQ1d05EWlMvMi9rRFVpWVkya0Q4b2g3eVpVU2tobTY0ODZoYWJXUXVPWC9ZNVVxaXRQckt4RDJDMm53WnlCY2ZsS25aNkxOL210RUprUjRpSHppQ1JtekJieTFva2ZmNDdOZk9yR21pbG9xQzVzRmRlQnRMaGJqOHBIT1k1MUtrTlFvY0JjcElHR2NERVFMOUtxbERrOHlPVkVIUUdWb2E4K2xYMTJQTjk0R0gyRnRBMVBFZFB3SFVGZ3U4a1U3S2lCcEtCdUFlYUJPN2lWSHFBckEweXEwaDZ6MU5MK24vdmVzVW85U3V2TmorcmoyaVJ3TFdUV2NBaE1YZFBSU0htUnA1Zmk1VXlnelpvMkFCTjdYQ3JGWVJieXllK2FpbWJXcmJ3YSszeENiUEZMNmZFS1dGbHV4VTlzOUE0eS9ZcVBnL1JuMFlKQU9PQXlkSDhoRDI0aWxkLzR2c28wVzFINng3U0l4YUNBUUZVRVVmSWdTRGpvK0lVdkNVcWRvSlU5eFhJdG9TS0pxanJ1WWJ6L0hRc1BjdVRpVk9uNjFsNWhDbjBxTUVuSjhVSG5JSFNyT0txY1d2Nzh1S2t3TjN4S25qL3ovUUlJMmRVdlMxY3NKQjVXMnlsRnh3cTRoa0Q2eVAraGJVckJrSTlXekdBVUFEMVdKWkZtbWZwK0RIUU5QZU56VEdmWC9IYnBrTHVZRG1QS2FsTUZ2eFFMeUZTK29oalh5ZmFkbklzbm5ZNS95NzJkQUZHa0hvYnFjU0ZxcDJGRDZibVFOSEN2dUNrZXJLSUY3VFJnUi9pb0VJUTczRDB0azJpOXB4M0djMEVCb0dxamRPbXN4cFpSNXdMSnZvU1RSTzUzUnB6NEdaVGREbGRoSTFlZWpRTStlQzlYQnBkS1JHZ2tCMElja1VDcDhVYTFqK1ZGV0VEMW1IUkdnUjIrcVRmWnF4b3g1bm5ncE1mMVJMSTBIWFpRRXJkZEhPRFk1bS9RQ3VCT0ttU3Yza05CZWRRYURXMWRMVFZVVnNweHV0NXJhdzRXaXh6WS9VMFZwVUY1Q0UzblVVbmI1d1VqRUNqNTdQajIzY21GdUVBaHZYQXhHQjVRc0ZhWEhzQStROTFSNlpzRUZVVlJpdWh5YlVjNWlJcHp5UHVCZ0U3WExtUGdkbzBYc3BTQ2FJLzlJV1VnUzMvbml2MjZDYlJ5UWw2RExQOTM1QjZrblh5dFI0bk92cTVjTnM1bFdJMXJib29SVC9TWTZKK3ZWeUlDRS9QWUlmdVZqamFrSnk4ZFZXUHhXUEtRZGJTS1pxTmtjMUhqcE1DL2xYMXNWNlZWMDE1SGk0S1hLMWJ4Z2VaQ3daSkpFLzM2cFo0WVgvRWxwVTNjU1E0a1QxTGlDSjNvRUpJY1VyaXl2YUJpdE52a1hpUTdLNWxpeDdnL0dITCtTNzRIOEhwbVZVeWJVcElPbit2amdIWG9Eemhtckw4Z0JLZ3Z4c05pVjE3aUtpdzZTUSt4aWRpZlRaMDJYK2toaVZhMGd1RVVYa0pFTDU0QW1FYVhXcTI4amFIeC9taWVzNXR0UFB3YllDeHRRdjNpOTY3cjNiT2dUOUFEUDUxTTlMc2NMQS9NZGd0SW40TzZtODl5Ri9pSGJvLzFKMlBHZDdiRVVZZ0hhSk9EcEpLYjlYWEE4bXJKeFRhZ0tIR1hzU0FxMlloYlV2QmpGdmcvcGhHR1JuRVllTlA4V2RCdzU2MDRvaXVnYk5tVGllYWhVYkV6NUVUcHFLUk1QVW5iTmYwOVA4b2h6dFBSRnkzZllpUHBob0IvYmdsRk5oZmNwV09ocUl3Nm1BcjRyVU1IL0FyRFRIL3FleHpqQVJ4dDdveHY4ak42bHM4NEdha1lVMjhnSVBjWjZaRVNFWFQwQUNWckVSb1YwT00vbU1SU3NnRGpwL1BTb2ptM1U0bXE5d0pJVWlPYnRhcUZGaUJHbm1GQXJnRVhvajVnUmZaVG91M0dJMUlpU1B1SldYeHhnVnBXMkw1ODZwejl5aC85UnhlTWJKVkc4cW1CMWlkSXFYRnVKdHhMMHBwcVNDKzYxVXZKNjRpeHFLN29BYm1DTndubWZVVUxFNDV6Z2VvbWQ5RU5jVTZRUTBDRU1OQldMQ1U5cW16NmpsRCtydzQwRVVZczVqUENoMW9icllZdTVCTW1ydktYclU4VjgrcDkrdEo2VGtuTjdFcVRhMjdrckY5VS9jTjNPSzFYTmY1eUxQblF1OUFZQlJITUplWnRhV0xzajdCYzdTR0xDcnJ2L2Q1ZEluUkZpWXE4RnB3MHh5dG9mU1M3SW1KTVBFOFh6MWVHY2pONVBtU2EwUlcvOTZNWnluUjh2WG5rN0dubTJlSWVYYWlEWS9NOEFiZWlZUnZxY1FyN3dYQStIbDNtMXBhbjFla3JmNFJ4WE5oUU15OUZrWVVpY3FSRUl0eW53bkU1ak8xMXBxMll6TkZFalNpOVlycCttRFREejA1ZnBLZXg1dEMrV3g1L21xdzFqcWs5TFhsMS9maEpyQjJhSmtIc09iRGptcEQ3d3ZLd2ZieWxkRWtvRlpUQUdQRVl2Y3pjb0l1aTZuU3NNVW5scDRwSWpPYXViaCsyMm9GQk43RkxNb2N2OEtBZjZlVUxGelBKc0xVMHpCUEVTemJDNmY4U1Q2cFMzSmo0SExsTHo5OEJnTVhUelRjejBKSjJOZmI5UXVna2pLRUR0ODF0RnZqRVhRQnR6VWt4bmZUeVE0c0o4Y3RqQzhTcnZDNDNURDl5Tms4U3hOSlJDeHpUNDdBTkxJZWkrVFFVVFJybXZocjdWR3g5bXJvMWVCUnBDbXd5cWNOTG93Z2NBVStFMUdpTklpNE1YcENkSlJGQnV5cFhXRlh1OEZTYUZSLzVtYURUTlJwSWZVcjlQcjFhTzhOZFlud3VLOU9sZVBYRTNkcW8yWVdKWmtBZkcrM21aMFRYaUhUMzBXcGpWc1hGWWJhSm0rZ2V5ZnNhVWNsOWdLVVRlRGhnby9mVDNObXUyK0VsVEVrelUyaGhvU2RnN0EyaUM1UWN6ZkROM1NCK1Uza002Y2YxeEZqeDlsSnhETitwN1haNFZ5K2djRGV6czNXWnYrZzJVa1ZjbTMxd0ovdjhpYnNRRkVCNDR5M1NFVzVoaThIa2tlU2Y3akZmUG5zdnlubXV1WktDbzRBZGZQOGZHZ0RxU0hsWityR09sdXNEcDlTS1JhemdGQmJxOHgwL2hLQWozZ2ZMTmZEOE11Y2lmZjNpNVE3UVcwYmtKNG1LRHUyN0tCNWJDRWdYSVVpU09rR05lT0k1aHF5MDFJRUxOUjA4NHAwSkV4UjgxSTkybDNnY243VUZiN3M4bWF4ckFuaDhWWnI1RjltVnhSTm1zNER0MStJaS8rMlEwMDFoeHBHR1hrOXJnM2lSaEs1N2UveUx1cVpyNEZtZTFEaDJaUjRxZ3RVMklyTzlKN0J4c2F0czlBT0xkS21uQXMwWnJSbGgvVFlaK3FyS2tCV01ia2VDZUp4N1JqR1loYWY1WVdiS0taVGJwK09BbVM3b2FEWlNuYVFSTmd0bkgvQTFtcVo4SDBWUHc0aURna3RxWjRrMlBDWS9pMmNONkRINmhXSHVrWFdIL0tZd3QxVXYwdFVPbVhQZGdodUJyM3FpWDZXUGwvRmRXdTNqdm9DSTR4WGNDTUVRNkYxbkh5bXlVSE5JSzJ1akNHdDhlYUJQd0lCNEtqZjlUOWF1ZHdxQ2VBalpndjdhQVBOTTZpUW1RVU85WDBTc2E4L011VTZVN08va0pxTlZMSmUzY0Z2anpRSVBUY0VTTWpYOFNyeUdPQzJnL1BGbTJ6clBLMzJHTXBZaTZLVmJXQkF2Vk00RlpEbFB4OENON0lsTk9KTVFHR3V2VFhGUVkxc2dkdUMveE9YR3dLWkUwNmxqR0ZMbS9zbnR4UmxrVlNpUVpwcnVkdlMxalZVeWpXTkNTalloYVFVSjEyTm1IWWVLSHJTWXlsekpadEFyZTNOam1kOVJsRjgxeGErc2VRLzhoMkxLNFFPODFEQXlVQ3I3cGRQeFFWWDdYbnU1S1VOQXJwVWxtd2J6QU9GSS9od2tKb3BYMDgrWGVOcG16eVNORE1VWjA0QkVBSSttYmFjZFFhbWR0RXJTZFJnaGwrUzNSNGgrSzU5T3Z6OXVMNlljRlBXL3hlLzlIZkxPZmc5Zk96a3VZVDRITGVHQi9mdzd4dVJCZVg0djMyT1dlV1ZKSjhTdUNFTHJhcC9ma3lkTWNLUHhqcExKcG1uNFlzNlYrN0owUlUzd3FHSVhSNU1McGxCUE9mMXQ2NHdUeUVES0Z2VEl1dk42ZThHc3VJcG5RaHowUmFKcFdaaTgycmNvRGNHdU5RWXc3dlRySkdiK0dGK0wrZ2IvcFhOTGh1YkZGR2NJV2dHUWJobENwTGsxVU9kYU1GZnJ2ZVZjbjJaMXg0Tk5YN1dSZFhTZ2xsMzN0ekdRUm8rREFldEV0aHZ6L1IwbnFOcjJ4Mjh4d2tsRTNXYlpBZk9oUktwVHJCeXE2SDBCc0phcGtIZytMdFN1bkVuNlBaajRicnVvYVB5bUlYVTBKSmpVenVHNWRsRlQxV0pFOUNpQlI4QzlpYjVYbHhrTGtERWd0WFREL1lvcnE4aUtqRUk4WkNDVXo4MVF4N3FaSktKU2swcFhCVjROeGdDZDY0a2EyVEFJazFTMzhuWll5bnFsRVpVeFQrNCtaUjlFQ3RMc0RkTFVHVjdrdHR5cndURkE2MFZudm5idDBYWE9kK2F6Q051VTZtU1VBdStWMWI3ZGF6MDJkQTdJd3dqZVJ3TSt6eURYK2FUT093M0hlWSs1NWFKR3RZaUNPUUNUTHlkcWVTSHp0aDFucjNqN244L2pFbCtQeG1GcVA5bGpNWUp6QTZPTGtkZ1BvKzJwUk9WKzlHVEhqTkgwSEJud0M2VFkvZWtkbGs3cFNteUZTVEI1ZmZnV2hjWWNtVVlPQWhqVWgwUmUrbG0vSEszT0xiNCtPYnh3cXhXSEFMSkVKRGdaVDM3NElkenU5bHBwdXB1djBOWkc3cHNLT0U5ekZHU1VxTWdmN0JyckZ5b1AyRExlZG9CRjhtWlpmRStwRHNDdHRoR2wvdzdseVljUnVndVJ4RTVoZUNjOVdPMlBXVkczc0YwcjluVmtDRVQycDZYQzQybEsrVldqOTdkNXdjYVJBZ1cyNlhTRnByZ2NNUTUyVVkrR2w5UTJXTXo0Zzg5YWVKdGo2TnIrOCt6ajMwUEhwYkZYZDZRWmh4UnE5YlJZV3ZySUEyMGsxL1k0cisxSWNnVUl6UHFNcHgvUC9BSUprNWhwcEN1UnB2cHplTEY0R1dFSUIvMHd0WGNpSU04c1FLamZ6TDRHcWh5RXZjTXVid3FFZzRnRURIblp4NlNVVkt1YUhGUThtK3k4YWlxenVjZ3BNZGFzeGhYUGdjSHZaRWhDRHUyUllXZUI0NHhEcjl0TlVCMjdybHRpRHdjUnZ6ZERhZWZwaDJpMnowMWIzbVprUENBRlRWVk5GdkFUSVFualZpR0YzeFVETGZFclVSRVh2UkYwU2hrRllMVDVYanJBditINDNVRkg5U1dCUDZaVEt1UVUzRWdjVXN0VGE5elBWUlVyeWIveGtnYlhOL21XS0ZoMlNqL3V1RDRIcC93cHFyNVNCVnRBenQvY21pWEQwd2VjcCtUaFJENkR4R1VoeXp1cGM5TDQ3cSsxVFhiNG9Rb1lwb0JNRTR2OWlmTVlwc3JXaTFCdVRGVGtDamRUWFZ5U0U0SVZ2N3FkRjI1MkFTZGcrS0hyb2pqWENwRzJ3NmxPSWRYWlRLL05PdHBZc0JkRW9FdHAveWxURGI4MFBPT2xhOUhPbWQvdEkyaW54UGRPUDU5OFZNTjZSbzIrOStQNTI3NjhPU1FhSlJqa1FtVlNZVExNTWV2WEI2TGpLd3BOcWFOT1VHLzIxZjN3cXpqNW1HNzBJajBkNUg5TzUxWExBVmdxRDhsQnVwbkV0ZDZZREpTK1FxUHBwL3NWb0lZSm9IdmlGd01LSHpLNUxZWUNjK1V3RitjRTdFalFROE1LbXE2RFVkeXRrVnFmOXZxbU9PRStMb3RKRGNmR1JJYXh1ZmVSeUpvYzVWMTI3RWZpZTNpem4ydlN1eFF6OWlpVXRFczBsRHRGRVd5ZDBmbHNsSEkrWjQwOEpWOUtuUWZYNTY1eFVxRitNdHpLb3dqc1NwaFlOYmFWVENJYWhweVN5SW1MdzVudzN0NVBCOFdTZXNKVmZKVW5nRnVQdytGMloxMm94L2NYUmNLQUQvRFg5QVdvR2lNL3FrbUo3OUhKNHVDTWJ1dEN1bU5XMmVlYzRpcU9DUEVOOXpIOElvKzZLeUQ1SkFrR2JTYldaRGR2TEk3NWZ3RnlCZUNXb2sxVnVnUlNsdHErcnl0ZXQveHI1azJjTnlZcHhhTVpYL000c3VtRFA0bUdMUVJCMGhlQTF1Q2dFWjJtb2tXSmpnY1p4SHdrNmVWZlQ4QzFVN0l2RUJLRWoxVjAwQnBBa2N4MlgvQ3MvZTdUTEFQeUdJRk5vV3lvVXo5Yis3ZTZZUzM1YmZtRm9TOXBBNDRCVzJJeCtMT2kyTzA5ZHVDOVpmSVl2Zkg5UUgzU2xTanZYcFlKWWRzRzJ4ekp5WkZ1TGNHNWNodk1udGNSUlhEV3lHNlN3QmpzVkdMVFR2QTcrK216T3RmNnlXY3pkT2I5cDRQUWF6YVo2SGNQbG5JMm9sczcrMTcvbTB3ZDFyUDVFMFduOEhtNW5mb3kwdXJNei8zaDRBRFdxTk9hN0YxNXVOZVhUSmdiaXVXbk5YVHg0YnkxRE1PZkhOZEtRNHhubHUwYkIrM0FINis0dmQ3dmhyVWU3WnJOSXAzcUM1TDhOdkMvSGlrdWJ0R2s5N3JuZVBDc0Fvd3dJdjVhK0N6c1NZRWpqdTdMSEFVNUp6U1dQQUJWb2JwOUtOa2NYdytxT3ZENzd0YjUvcTZNdHlLYXVtYVpVcm5paGh2SHh5STZOU2dqTHBpQXM1MEZDUHJvVW9yVWdRaUs0SFNDb0pxYUFsMXg2QVE0TWFSSGhVNzJzRFN4djNhRGwwZy9NSElIM3Ixc0cvVU1aMkFmb1FWQTRYdWxoOTZxcGxFdk03UnlzdDEwVVJ3YWdEcytsZ0xmTUJ3TDBLUjNkSlRzQ0RCSXY5UzlaNEdNa2g2OG9SbGovYmgvSSt5RGx5ZXlCdVhtbXNreG9CNzl2S2pPU085MFVKTkV1ZzVyVWlpSldvbHVMeHVKM0piT2MrWEZYeEJ5WGx6KzFxWHZFZEl6c0V6QVl1RVErbDFCQ0FmY0tOZWt3dTNkVys1YzJWRDRhT3p4eHRCQ3dPTUtQZnIyT2lXYTJXd0VXMXJBRXgzaFJtbHhpSndwTlJ2U0JZTHdIYlZkNWpYeEppbk1PT204L0ZNQmdrUVV0NFNTaGV2a0JXTCtMVFVmZERtZGw1dlpxcE4xcVZ3TlRaSjdWbWVwRitKREVSNHlXYk5jT3gyaFVpMVUzaUhTa05yZ1psZzJIaDhHcTZiL1RiRkIrSllZQTl3N3Fta0pYeHdTcVdya21TYkcvYnJNRmJxU1k2V2xub2JnanpWSGZ2RkN5NHJOUTllVzJmSDh4UDhmYVRsZENjSXhEYnUvMmFMV0R2bnkyYjdNcHNYbWh0SGdGcUIxUXBOM3JhRGovVlhTbkMyZWE3bHlIc1dKVzF2WmxScll0THl3QWIyQjYyRHF6djU5SG9hMlZJZzErOEZqbFdObHFqcFMvSWdwVXptNktOcUgyb1l1SGkvZDFBcTd3eXBNdU54cGdLZ2g5WnZNNFR0aWdtWkt2aVlseW4rWVhtNVBjYURkdVJPU1pzL0h6VDlKSE5icmxQRU1YZ3paalBlSHpVUEg0YnBvTkMyMjNsWW1oRysyckFaYnJXWkJ1SW1HeW5xeC9lZDlPdnNHU1FnTU9idlBnSDJ4VWdVeUw2b1VkTHVJUnVVcFBxUUkzVjlSNXJmVzR1RlJWeDd6Zmtzb2ZKMU4rT3ZFQUg1dlRjaERqQTlOa3AvVDAvZTlwUDJCYVBjK2p2amZUdzdrVU5TbE1RdklZMG9BMDVlOU9WdUk0cnR1ZElVY1NKWFhwQkNmQ2pDeVpIRHdYMm9McWFZQzd4d0EzOXI4bUYxOXZFcHd4WmxNUUdqS0lDbzM2ODNxVkhHTW8rRUE2ZndYcGcxU1doQ2xjdW5qMjJCd1NHdnBBV2pPZFordktqSEkvdEpBUE9QN3J2Z3I0Wk4vWlg1WHR2NUJPc2hWbDRBUHNENTNxMWQwbExtWWl6cXlxMkpyQXBpZEg4enk0MFdrYXBSdnY0TStuRlNIUUxMaWpHVVNQNkRTRnZ5YlJLS2Q4WjFqMCt0eGRmY0NsZGRqTzcrem5LS0VVZkd2UW8wVDJOeHR6OVNyZXQvMmNmS1BlMXlUY2xYWCtUeUlHZklEYm5GYkRlbjM0Q2szRldORTQ3dm5OWUVwMDBWYkNhQUUrYnpINlI1YkZtR0JXSTR0bTBCUDBEK3MrMnB2REprbmRIa2Z3UGhZc0RSOVhSZmNJbWExM3B1eEhUMWFhWlNEdEFIWlFCcDJsNDZGK05TWXZHeFJhQjU1VUFYdlZqc1JZUkpuSEJEaXZsblliYzBnWVdEd1FOcG1oTmI5MlRIdVQzUnloSFR2a255d0N1WStTUGIyNTNvRmRYL1RYNldzMzJSSzhFaVZ1YXI5ZmdJQ0FnSUNBZ0lEemZiOVlKL0Q2TkRGOGhQOC83a3UrMzdITDg2M2Z0K3pKL2I5V0JyNmk3OXYxMGY3ZnNKdjIzRHovQjlWcmZiOUlYajg1ZSt6N1hxKzM3RzM4N0x2dCt6a3Z0K3RoMGZJdy9oOWNSZmI5aUgrMjcrSDl2MDhYN2Zmd3lmQ24rejdGajl2MWQzNTFYKzM2MDYrbjlORnI1MVg3ZnFNYjZ2cXBQMVdPeURZejlFbzFKRElOQ0pVOXdLS3FGUlZxQlN4NWVkdEJoYzhMZTV3ajNhOSsvR2xOR3VIdWFFVGkyeEh5MHdmdUF4NVE5N2tBdHFKRU5Dd0ZQb3ZLWTZWUS9ibnN2RjFvdzVsRUg0QWlSeTc4bGsvdmJGWFRjT1J4WVVHbXBIejhnbDR6OTNGTXdLaEx3UFZ3WndhOFpyVlU5dk5WQ0lEcjRRSDB2YjZNamRvb0IrWUY1djBkOE5qbWtCaU1rV0dZR3ZSaUZtRGZEeENNOWV0NURjeWgxWnM2V0NjNDNRRUxMeFNxRExRUGgzcHUrQWxYOUFlYnVDbjZld3BBOGJma2Npek53d3Y4Ui9tTGFrbUwyd3JVelRBbU9aQ242TU4ySDc5MnM5eDlXMk1yUUlkSFJOUnpYVk5yTHl5bmtDZXZVZkVuckI2S1RZd0hCa003U2JUMmREdGY3K3NhVjlSMkh3OHZuUDhzL3RvSkJFaEVmYkFkSzVBTWJMUnB6NzM1bzhDQVpaUzROU3h0b09zWUZFQnFoZ2RpTTVmdk9JTTdQMTQ0bEpxRGtQd0RxYWlBUmlITmJVR3J5K21qVi9mYnZCU05CL2RscUpGbXUrRDltR2Y3L3Z2dFpmam5UaDkwY0I5MzhKelhNcjMyS0RhS29XRjZacUl1RzBPVzBkcy9xZDhKWDh0SDlCQ3VPa1BPN0RwRDFlU1cxaFovVmlITjNQQ3pJMGROTGRLVzc3ckl5c1BsK08xNWl6V0JIRXlaL2t5d2pVWUV3WVhnc2dDMDVCNTQ2MHpLUVh2dUZ1aExzSVd6Rmd5bldiVHE5VWJPWWU3QjlxVy9IVzYyZGc4RFZ1ODRsaFZ1c25SVXlWMVlsRGU4SVJIZGxSenBTdGRMN0tZdjV5dk8zamNMdEhhK0NzSDJHUkg3Mk9EaEgzbHA1Qm5qaHFYbk5jb09ZU2Z3N3Bsa0lMT2dmeHYwN3RuOVEzdGVGWURYb3crRUZvd3NqbnBGYmdSSnpFQmdnVlF6dlA3R2F1QUxBcVBSOGdjKzhVYXJYejMyL2t0YllGbjlWUEJhenlvaUpjeHQ2NEZUbTUwL3N3NkZ2OXJqQkYvVFdNcDUxaEkvL2tUbWJmRndLcVZHV1hENzdtbFVSWU9TN1N6R2MxQTB0OTJzc1VhRGptdThlQVRXZEhPcCs1Y2tmWXdWOWJEV01UVjlnWHQvN2d6THlqRDkrdS9HUElIWVdhVVBSRlBYc1p2UW41WmJjd2cwbEdwVE5YS0pKMkRLcGJneWFsZWRGUXhxRHVtbml2eUw5akgvRGlBZnpZRXdqVThyN1JkeDJleEdVYnllZ2JPaVg4T2diUUlUV2FCbTNNbjcwQTVzSy9wNzZ0MEF4bDJwb1A2dDY5a3htSkRmb2Y4azM3ZnJUbTRoS1JwZ1NCaGx2TkRLTVlOWmFUZzdmOGlKYnVxaWNQcHRMaWRGQUo3cC9qTm5abVBsL3JLUU0wL2hFTTFrbTFQWVRvWUtyc3Q0OVNDYWc3K1dzckMwd1I1TEg0WEk0TVh1YUw2cXBuRUNuQU83MTBNUzVoWEdkeG4rNDB4VmV4MUVhOVNNc3NONXFIY240MG54aDdoaTJHbFYrVG82dUdKaUkyTnh6R1Q3VWpUY3JuWllxOVNjS1ZiNWcreEdJazhNU0daSGZSeTQvVlowZGI1YXZPaGROM2F4dnNyNXJmZ0U1TnJDVVE4WUFqUDJGYU92SFFTQmZIaVN4M29wMWZPT1g4UEpjSDlaZFFoT3BjeFF2V2ZzV3V0SThrTEl3RWx0UzViaDNJN1Y0alBJYVM5Uk5qb0o4bVBGWWtpdGIzMEhYeGN2OUVjZ0NaVXBkdXdORzFzOW1qbnJyL3F1UHp2ZGxYWkZTZHJRdmQ3SFZtTG5VbUVsR0RrVk1FWjBBSmwxZlR3ZENqaTIyUW16Y0l4T3AzQzhBaVhOOTdkR2JzclBYWWY0cW1BUU9melJ3dllqT1lKN0FGcmIxY2FiNE16cEd6VlIvUzgvM3J3TkRjZFZrUWszcDJGWEpDWUZEcEJxUXBoVGJ3TWt0NzRuUkxoL2hUSHJuOFZxN3lRUEdLYlZoOEROZi9xdjRpQ29yenNXS2JQT2d4bTFpRDIvTFlvTVl5dDdIc3RSREwvOWlpT1FzbjJrSkFvbU9OWXhIYjZ3VkF6N09CVmw2UzRZUUZTVC9rT24zcnl1QUdkT2lJakhoS2ExMkR4YlRHQ3I4TVdaRW5MdklyVndOeFkzbC9ybFJGam4vblVPdkoyRU5sTFprYzU1OHVEM2gvYXc2L2x4YnYxTUhkOEVLQ0pZS0J4Q2R5TTBoSks4dnF6SC9OdlFKMnVkem5NSW1saWNILzZFb01NeklxTGNZMUZuSm9CY3hKc0d5d3JMeW1BblN4OGI3UEVzYVVBdXdXa0hsdVV1aTdVRFIwK05RMnk1NGdoS1lYRHA1TXFYQ1BYUGVLblRqK2NjMldiNW1zdVM5RHdkOTJ4b3F5bi9KYW02NEsrT3NXY2RPbU1TWWhNSjNXUlpSdnFtcFFHcFhVMy9NbVg5cFcxcmVzY1lObFJuTGNsaTZWNjlXeUZKVy83Zkh0SU9sYmZGY3BHMW5sUE5kZkdYZnkrSS9mNFppSHBmOGFBdXdKbXVYVXdFRDR6ZXZKMlNZVitucnZpS3RDTE44MzY3cEFQd093VkE2MmFsVjdHWDFjNFI0WHBjbUNydlhlM3N2VGg5L0FNcVdwUGdpMVpUbzlyZ2RmYnFOeVZkWWs0UzUraVNYbkxPZjNjUGFwVTkrNHBQdjBrekIrcHdDTkpKekErMUorZDd3NWt2d2szY3dSbHh1YXlpK3oyWlF5QUt3RUZ2T3prZllreVo1OXFOTFdyMEw5RmZoVmxQNnFDOGM5WHY5OU14N0k4SDB0Mkh5TDJJdU5KYUNaaWQvUk0vbmZpVGhpaCs0ZnFQbnBXcElDYk5VK2dMa1Q0R1lFK3oyc2hGMFBQa2JuOW1RTndqNk1TTkhkcEkyWkhOOTNhcE9JdEZuMTVYdzk0ZlMzeGpkNTY0bFZvZkpIOFJKMzVjOW5RK01aS3Y2K2VSR2pvUmo2NGc1TVRrUEpoNHFPL2RMZjFIdzVSYmRIQUh6MU9TQXRialdaOHJYaXdmT1UxU1c0RnROTHlyVjd4N29tZytwd3R6b2d6S0hnZFplTVI1anpHcTEvQ3JTQ3hDVFJaa1F5TU5MeHAwU0VSdnBCd2FUbldVTEJPeVltSW85dFZKNG5KUlFFUkFPelNGMTdGWTBHUVVLVDZacllvNFJSdzhqYk9KWklpV3AyZVl0VGxoRjZaczU0WTVONmhMM05FbmNTTFJNcTlOa2lBK1pQRHJqL05qL25ESVZLNm9kNzVwYThNTjYyNFl3UzI2Zjk3NHhBUU1BWWpTbkowUFNGMDJTMmpyU1dlYzAyWUN4aGJkV0tVRkp5b3Jzd1VlT2lRc0MxQUpqQ240SHVnQUYxbDhEQ0VHWDE4OHo4a2JGTWYvZ3B0RVo1TTRnbkZrR2xoTkhUQ0JhNGlSQlZ0WjhQek4veGVEcEtBSHcyWXFGaEdSM3IvczdocGwxaHllSnlYQkpmb0lTWE1JNGpFNVFNcE5xR3pQZ3dBaHcyMFJwSHk4OUxtZE9SODlXbGNQRmRPZEwreFgwc0NhS3duanBUREJWZTdzOXd0cHRJNStaTjlRVHdaNW9zVjhmdHArMURMR0dQK0dYT2dpMkRUUFdCSVpLbC9mNi9FUEprZVNyOTdyNUUyeEpFeXNGNUhtWjJlMGIxRXRUM1hTWVlxZ29LNVhFY1F2OHlvajBrZzZOckRxMWt2ZHBOL05MQS9WVGdadjB1L2dSbmJLcXA5dHZjcUJDcVJPYU5xMkxDaUIvS2ZLVVJ4ZEE2ZGdBU05ES3c5RTNUVnVIa1pvSjBCeXJVZk5TUXBnalpIcTFSU09jcHplWWlQTVFIbXd0MVJnaU50c2VncGJaUE5wb3FVWmxxdjZvQ2J5VE9VZEpqL21MYnNNZ0Y3Rysxbmsvdys1SzZ5c1c1VXBiWVd5UDEwZldRMkV5YklnUWZpTC8waTFhV2VBV2V3V3Y0VDhUYjNvN2N0MnFtRFFXVDZKVHF1MEVQOFNEcktFMXNEbXV2U2IvRDdUYW9LYXF6eVBLQ1o1bkVqNHN4Tlh0OUtKUnRHT1d6QXNkOWJMTUxRZWF2RTJ1UVk2eGpFQ3ppellzakdodndkMHBXelo2Q1dhYmxxT01VWUxKV2JHbkFrYXQ1dGZoaHYxR3JYQVZNSHROVzNaWjFRenQ0M1hXVG8zR2p6YTFFSXJZVVFNcDBSOWJzTUgwVjIrN2pYOEdjYlZUSXNZL0k4Tnd5NWhlZURLTnFaNTQvbkpDaDFwYkIvVUkvR01ycmVTS3pnUG15MnBsWkJTUjgrL24wOE0zK3AvdEp0eDBqUUVvU0xDanordTkyTGEvUDh4MW5ERGZpb2c2OFVqZnNQYXVOaGh1a0FGNTM5eE1WVk9IVDNMTEhWNUs0bzFySW5xMTM3c0tNN3ZDZ2NRdmY5bjNydVZPSm9NNjIwRUhNWkxEdUlKQ0RCc1IrYTZXd0NzVWN3MjJTdnlUMExWZlV6bmFLb0tIbmZXbTVjTjArUC9FY3JwYkZ2Z2NWb3RKQ1R4cDlsc0ovVkVUZFZOWFhYcHZuYTlraTJEUFNaTHVHN04zcE9uOTA4V1pKcWhTaGQzSS9NQUVTenF1YmJUZi9CTStCRjNNTjVzazM4UHVHSDF6SFdTbWkyZjNwOWNBY0w2cDRNK1NhYU5yeUpkdm9oWm9ZK2JpczdDbWJuYjV5aXIxR2JxRjBPelFaQ0NGYUIxdEtveHRDKzRxVTU2NFJ6YU84QTdIMVhuaGl5VUtwOGhUTUY2UlRpQ0diN0lUVTY3b2lCcDBJZGxJeVZQTi9heEV0VmV3dDZ0QTE0Q0tBejl4TVc2emZ6MTJvYXR4RWVPUGZRbitHZU9acGlrRHI0TVVKOHZUeDk5UC9nMHVibEp4aWZMZkM2NENmMCtOY3AzWmNlNTB5QzE3UG1jaG01c2dsNUFBb2lUZTJFeHppdE80cTZFQWEwWXpPUkxyaWZkQS9xMzNWVGp5WWkvVStXdFNDZGt3Ym1XR0NZMTA4TDhyQ1ZaVTlZTmdYbzN5MkxtL1VIbkZIVlI1QXVpQ1V2MVdWbmMyalNoNVpxV0hldlFwTGlBSXNqaTJwTVhmZnExWFZqWXNLY1VQUHFPRFk3YVJteHFuRkZWUjM5M1pvSi9jbmdYWm9oa1ZxZUhkRW5yN3F4THV2N3FGaU5aYXh3YjBzMkpXSlU2YXRzYlpRQmlrYUprS1pqSzR6Um9xUzY3dTE1Wnp1TEpNYmNOamZsNDIvdk4wVklQNlBQVUJzTzA2TlRKTVNPMzQ2MjN3M3ZHSlVONzluK2pRUTM0N3k3NVgvcXNpSWtWQnRVbEp4czF3RnprM0ZOMVdMaXlhUlplN0JrL0hValhpdHhPWGE4QzRjTUUzMlpNUk5XZEhrMFNmR0JXUElrZmlDS0lka2ZVRmJwemNrU2xSMUhtUUl2L0N5cFdBSEFjT3ppMWVCQXBvVGdGQ0pRZzAyZ2cwRlZScU9RekN5U3BxSmdLcEVBSHBOdnVEc2hGcVNWY3I0RkRzdjlyL3Zob2NIMExFbVlnSWlzYm4vT3NOZktGQUFDZ2NtYlRwZCtobDdFdlVta1VpSTBDcGRkY0xQZjlEdEl5ZE5CRjg2UlVILzBmSkJmMUE3UUhOVDJZUDI4dmtpckxDNi9oK0hlS1U5WXgxckU4WVhGRUYrbGFjbFFIVTBVUXR2d01XOVJEZUxkT1BaTVlmaDlPRHk0eG5DdkdicjY1bjN1VE1IeEZycThhSWNMeDNvdXl5aGwzTFpJSGRHNk8xRTR6amxra0FzT1NBKzdNUGhyN3ZVV1VhYkpLRlZqZXJZT05DUUREK1NWNjNOa1FUOWV4S1M2STdOWEFWYkVBSDNnUHRWTExFRFRPZHllNnRyekdBbFdIM05wRjZnTDRySm1sUWpmWmxXTGZLeThReURBRHBmOFppT1k5WjBnTDF4N1NZSDkxcUFPZ1ZuQysvT3YrMWNNQmF4dFRHbzFmVDFuVzJaYWdHdEJoTE9HVmlSMkJmdWw3cmJNNzdwNkE3MlZOZHBSeW1yYVA5aDJHUHhSRVlyTHVtcmVBeEo5QlVoMjNNcjNKMGFWQk9EZUpSY1UxYXQ4NldyS0RMeVFSWjdaZ3hMTDNwMW5zTE9vWXZDemRvQmhHbFJiWHdKUVZDUHlxTVhxK0hhOCtSVUw2WWJEdFVwQmJERHdVcUVZSTFrcy9kZFY5MTBBN29GRktKdXZZM0JLWEVBLzFRV2ljR0grQjJKZjhoS2NDTm5mVDJ6OExDZkgxRHZFZzdqNFlKV29LV00vakZqUHdWeDRUMHQzaEdPYXhBcXpLL2M0MlF2bURXVlVRTHA1WTBZY2drWWc1TFg1cDV4R1lkbGlXM21KL3UyUDVxbys4aTlpa0xMSmsycGdieFRMMEF1d25XRE1rKzZLWlowb0xXNlZzdld1RWlmYnJLaFcvRm5BRmlYSXl6djk2bkU5cXlxelZvUkl3SDgxREFEaG85MXNwRnVuQzFrMzludHdidTM3NkgxUzZWampXcEdid3RYMllFTkp6ZEJNRno1VXZEUGFsajBzZDhVMWxSNzRDL3VMeEdkY1F0NEs5RlQ1TGxnZ2ZuaVg2V0tnMG5QTER2UzhRMFdnTnRzRHZRdFMrS2lEMjI2UTg4TmZETHk1aHhNeDRwSWZWd252bjVoVjZDS1AzYkN6YXBRLzE1R0pPRXBCR3MvdWF0dzZXTDcyamJhaFQ4dFhocTJvK29yMWdTZnpFdlRyODIxaTBNdDBUYXBuRlpxM0l0YURTUUxEMC8yMlRkbVNUcm1QVkRRK3lyMnBLZkxLRFFZd2lidDE3eFBPZ29aR0V6N29jTTVZZGQ5Q0hwZ0h3SDM5UnQ4NnU1bm96OTEyWDdhaGt5VGM2bUVBVzIxUGVLcWtVNTlIVmVBMHNYM0ZFQmJoSnlJd0oySkpmUUs1aDQycFVuUzhNaVBFSk9yUUJLbnZ5OEhhRjRDaGpXOUlXRXpORDI4RHJEUmR2eHN4YmNUc1lCSnNVbXpmVmY2eC9uWWhIUGZiVlFJUi9ZcWFPSTVLaG1UM0cwUmFpSllxek8vOEs3S21MVVBlWFZJLytVUDdPUGVhNk9YajNNdXQvR1JreUZkM0Y5TzBBTDc3SHl5SWJpWW9nZENvd2lIdm1pYmRKWVhUZWFXZ0F0SDVZZ29wQzZHYklMTGovVE5UVnNDbjhvandoS0o0SnBGVDJyN0VNTmI1N1FReWhNS1VZK29Oa2Zuc0FxRURFN1NFdEsvcXljenZYK1p5aGtPelJ6ZUtXMHk1YVB6MDE2UjMwVTB1WXl3V292QkZ6SzE2Sk5NcU1HVzdEbXF6a0V2ME9hNS9wU3BJZzhRTUFYeDZscC9pd0Z2Mm9HVEUySmk4V2VEQTRLTzNvL0FOd0V4Nm04dG9lTGVONmFnSHEvZXV5a2tZeVI4b3UwclJXZjhpb00wZXU2MFUxcU02U2t3aFBUcll4VjNESisrWWY5TXIraDdaWmV1alRNWU1oYXl2bFNRSU9aMkJFU2JDTWtvMUM0a0FXZjdZRElRRzBvUE9MTXRjU1NsYkZLUlVQYzYva2t0ZjJheStyRGVkZE9ZbnBCanQrczBjMjlLNDZERXozVlFCRk1TektaaHBEalV4MTdZVFN0MExSNk1UcnlCUzkyMXVFc0hYeFc0YmYvVzhrQjZmUkYvcThTc2psZ2NLWE5tQzQyNHhnRjVPMUVxL0J6aG5EZFdHOTd6R0VRVDh0T3VoTHMrWEN0Q0lJV05Jd1VPeWtzdk4yOXRlaVpsVjVrZCtDR3BUTzFhM2FydHVCamluQWlEeFgxaVEwbDB0dE0vV2J1aFdHc2RrQ3FMZGxkamt6SVJVL3c2cndHdGNEblYwQy9DNTQvTFdyekYwQTNRTXFNYzBuR1kwVWQzQlA3REdRakY2T1hXeFZWREF5YU1HRFdrRTNNcXNZWHZZd1NHVDRWMmhXOHQ2aVR0UFU5OXlEdEdvOXVYd0dXVmpUazg3SkVuaDFDNGJkZ2JVTUxtd2VGQjJobGRvNTFFSU5zK3Nia25GTHFOMW9RcFJsSk52VlNJTzdIWm1GWEdXdVZTelpMQTNXUDIyWWhlVTNDMGlsaUozUE5oaWN6dndFTWNUKzRzUmhNQzc2c0VzL1RZSDVWcFVwRVVpUnZmWWZraWFaWGp0d2dYV3F6VDZtYnIxNFJ6UEd1RTdTc2svazJyTUNkaGozRGxBNDFaM2pCMFF0M1lyTlZJdWgwN2g0NHZvWDNUWG9Tb1NjWEZYTXhqRFZwMnFmZmxzR2Jib3Y2WXNldnZWY25BcnhYQTFqcHdMZzMxeGtXbmhMT0xKejlsR1M2WUpzaGx5SHhSOTNINlNWRDFiYng1TGlOZDVwMnppL2diWmN5bFhKcitOM1Y5UU8xU0krVjkvaFJHUWczZFl2a0ZCU1gzR1dha0YxTGViRzFvMXRra05nemhIQTU0SVNmWU9LeVhGTkFLcldxZXFEWjNSem91ZnJjK1FQbXh5NGwyMzBaemhoM3Vnd3dxVThueXowMlJVdW9wVjkzYzlxWXlIZU1DeGUyaWlVdWozaHUyd2I5cW9icnRkSUZzUm01aXBSc2RZS0d3d1htZUg3KzZPSEJ4V3FKVHFDR3lyOXQ4VWNURXNmOW5pdGs2eUtiY242aUpqWldyTnlzYktrRkFCM3FObWFiY0ZXb05sTEV3WUxFUm5Hd0oxMk1PaG5VbjVYTjlBODBEU2MzTlZNWjRKbkhFTkgyR0owZE1JVVpDQng3aGhLUjlUS1ljaDAvc1NPUGJsNHYyd1kxajJrUG1xOXRoMmVNNUxYZzVzaE0zWmkzQWJZY3UycHd4NHlwZ1daYyttNXgzNmlBUlhDcnczbWo3aHNMTDJub3ZjcWJZS1pjaG12S1dsd1dZN3JIMHUrWURMb2JPYkZFLzBqTGVXbythMitzTWVrNDFBcVZXT0I1MHhqelJsVG9SMFh0YnJMMHp1SHhYelNwc0FWb0tNeEpJVHM1MDY1Q3JJUERIeW4rRG5zM1NkN2tKUGRJL2dmV1NmMWFEZUVGUm1WUVhCRDNYQ3VFQ3Y0Ny9WQ3MzZUhxeE1ob3Q0QUhlTUpTTVFUOHNxRmprb3J3bEczY21aU1FVYnhCazJJUVFHWHpNSkxjNHMvRWJ5TlZLWFBCb2VEVERnbjFlVVVKVEE1T3E4K2NoZjBqZExuTHh4SGRtSTRJa3lQUDVwQ1UzN2htUk5reG0zNHJ0K1BZdExFMCtScHhiamxtM1FQQndNa1k4NHJzWVhWZGdISFR5QVh4cm1aWHhiN0JERXF3S1pCOVBLQld1MWlqZExDa3ZwNWozSHFOelRjMmd5Q01uV1ZSOUc1ZlNXNEJtdjNuSG1TYmdEZFgwS3Zlc0hIRlVveWJUTys5NTdOZEJwakJvem5DUUJKOUxLeFp0ak9rMUpJTGNtMkxXUE4vYlpqUzRCYjdpSVgveExHOWtIaWlpcEtQRWY0Nzd0YW1FdVVpblpNeGZGV013SjExeDBRMzBUUVcvZEZlU2Q4cmpmRWFQYytldTRZSFRwcUlwMmMzSG9HT29YT1NlYWQzc1c1K2oySXNjYXNhSXJhaGN5TjBHbjBDUzVHK1NsdjFKN1hpVkNmcE1jcUd1ZXExS252b0lSYWgzNlIxdmxpVDRDdjNNSDI3SXFqZi9MRDU5b1JBRGxGZ1dRM21tSlEzVGtvcktPaEROZUh3V0hiQTR4VkVaRThWT2p4OXI3YXJ0czluc3lIZEdlWTlQa3Z5bExHVjV2Y2Z4TEkyMDZnT1hCTGs5em9pUGRwQ0c5aHIrQ1NLeDl2ZE5FbGxIR05GNVRGUlZTL1JBQzIvMDVuaUdUM0FZN1JCRUw5Mzk1Y1lWaGtXckZyRVVwazRkdWNoanNjZE1KU2FvUjhvNmMxWHNUaVV0NGNodmRrdlYyWGlteTNlSzhQL0wyOFJycCs3NnphekdTQmRiZzRBUmlIQUpyVVpCNkNTWVJYQllOMVMvRTJneFVLSlJkSzJTTUE4N1VBc1FaSnEwd0VpRThzeGlnaWtzNSt3QjZLUlRBYnZjTktIQllCWSt3UTJmYkI5dmtsMXZYNHBEamFpRkVGQUlBSngreGsyNUx3N1I3cjNyWHJZR0lXZGluYitVSnNlMFZ2b3AxazJhd0NtbXFsa25RUWpUMUxmS0VsZURwenZsRDZteDFBaHp6NStMa1VHb3BBb2h1WTJOcUVTbitEdTFQWHJ4VDEvWXVMb2ZmN2hLdExuZmhEZ2hjQ0RhOGE3RktUUmhrVXhxZFBuS28vMXRzRm9EUWJIclJtMS9ya2d3cnk2ekFZaVdqZmdCRnRFaXVsL3hKbjA1SDBPWC9yN0NGTXZ0bFg0ZGYzdFNnM2xLazRlY09RVzI0RDRhVTRFa090NXBPTDFXaDcwQU5JZVA0ZnpvOWhFK0RkYVpYVG9MZEhQSVdCY1VNSVJOQU9HbzdIN2FEUzJGNjh2NVNBdk8vcEY1ZGNPdytoQTVzL3RJdS9IQm9Wb0JlWERzNGxjQ1VucVgrY2NlTGpOdUkrS3VXLzJXYUEyZ0pzZEtpRnNqVHN4K0kxMEE5ZFJ4ekwwaCtCSGFxY3lMZjdFUkdTNFJvTVM1cEJyeW15TEFZWXVkKytOUDAxTytHZUxFVXFiSmcvd25OYnVROEJrVERDc01tNllYVzluYnIzSEV3eHc3NjcvMXpTK3M2RUZVYVVnWGJwM2RTTVRpOTVqRS9GSDd3SC9RMXp3cTlyeWRMN21Ed01LUE9SSjF3c1Bwa09TK2FJWHB1OU1VcERsSUY5UmVxekRuazk3N05YUXphdUNKV05QQ3FtbXYzZTRlTnBjTlM0dmtOUkhoM2VGN3pReHlXRE1xM0JmaFo1WEVjeDMwRjVmKzFCKzh2SVN4MFkxWFRGSEZwbXFqYXo0dlgrTisrZHAzY3BWdkFQMi9RdHBtaWhHTGtWK1JaTXZQeFBkbktORkJqWHlxSnJtV0xyN1Qwd09kS1l3bEtTVTVlbUNRcWdTSmVRSW41UTh6T3hCWFJhanhYZTdlOUxEUTVlOGpqUGl2S1AzV1NYRVNlNXlSNDZNT0o2bWZGdmI2NktSZEU1T3pjcmZUOWZLWXhLOWZWdzhhMkFXUklFK2I1WnZ4QlpIRVlVS3owdWlTdndFTHVicDE1L0NyRzZtZlJEek1NZUx6ZDhxNVZpWmFlTXNCRmNUTzdUMmg5OTI0TXZPdng4anVOZWJVNjZEeVhnUzdmWkY0UDg2cEVaY2VWRGt6YXhURmJmRjQ0TmhSQWhWdytSaG1KMUErejEwSGxpN09vS0RweWNaWVY4M0hDNDBuVUZPZGFJcHBtRTJxM2NobkEweHVjY1pCd0hxQkQvV2I1ZlR1N005SWtvMTRtajhvZDVSUmE2Q2o1TWxRSXR2K0poVlZxRHFORGo4b3JRM1lVYjVTUzhIMWgvRStwM3kxY0I1TGhIQjRSL2Y1TDR3UDMydUtzVW1uUVRnb0J2ZysrSTRqV3NPdWx5dnhjRjFuRDNaSWUzbTM2c1ZMMnZNS2JOL2J5WEo0TmdZZGJwdjZYVmxYbDE4VmdLdUVVa2tuRUFkbWROOUNQUzlOMjBlU09mS0N6NkpIN3JVa0pya1JjdEZ2aWpReGtoejdkNHpWV1hwTVlrTEllM3hsK2Y3emtKbGJqczBPVE1iR0JJdllMdkg1eUlKczhscEJpWEtkb2VHZmRBQVJ4SVNtWFRwbXFXYm5GT2RBd1ZSQ0U0TDFhNFFWZk1ERElXVjhXK1AzMi9rSkJhWVNvNXl1WXBEOUExMnpsV25UL1lzanBDSVJ6bTZFWUd5Smo3WWVJTThpQm1YMmJqZFBmeVlnRFFsOWhtVWFjM0VQeGp2WlQ3VFRFRHJWWloyZ3pkaWwvVDVzbkJjY2tiQktCRWIzYWdkdzI5TGwvVVdaMEN4WmRMWlNaNnRMall6WERZeWczOEM3T2d5MHhtVElKTlp0ak8xTmQ2UWJMSnF2dUhkaUFGem03L1FiaG5oUUJrTnJnRXZRTVVkYnNvKzlaakpKSTUxQUh4cUk3UGhQN3BMZE1QeHFOaHpwdEZOZmx1RW1rcEFaL2FINGFLTjBzeUEvOEI3Z2FwOUtzZ3llVzJnNHFMUThmQmRyU0ZzVUxOdXJJdmNoSWtkTnZuMHFlZGJNb0JuaTlxRXdjT053dzYrV3BOd0NhQUhOR09nSkRINkxmZWlpcW5zdjVGQXZzbWRUU29uWSt0TWtHNEo2M2JaVXoxSEE2Q1BOSDFrUEhHNXN2elBoRnZIN0NJS1ZydW9ZakVUTFZuWDJkRU4yVzBkUGIvZm0wcEtSQk5hTS9tN2IzRUpVRVJkMTBWMm5MS3NGeWZUME9WWlNPNDlSNzltRVRWaEVUalJ6Y1FkSVdSdVRtTmk0TmpOYjV2QmhkZTJmWXNMb0V2OXhrTjFsTDNsY1FaR2hFOWN4d0VDc2MzNU1SeEhuWDU2a2ZiR2ZoTHlCQWJrL1JaSW9QSHFmTU5Ya1dENXJPSHN0V1RxM2NZUm9yeUZaL2FEbFhVcjJJeHA4aEJYSGRXdUZ5NzQ1NjV1K0YvRGxzaVpxTmR5NE81SnpEZFdJdGY3VDZCNGFzaXZ2OHllR2lQdGpuYnY5dVVlMUUyTDRjY0Z0VTF0dmRyeE1MSkVaOFhKNmlVV0hDYnhmUXc5dDNTS1dIb1diV1l1bGZWQ0NKeUhhSGplSGR4QWdkUC9GZm42OW5BbThZRFp4K3JQWWVrU3VPZWxJMTVWWFJ3NWhvQ0kyb2VpYjhiQjlwWDZYL1BqOWRKTWJudldTTGtRdDhEREdwaHhrcyt3YjNOeG8yT3NHTVJ1Tjc3QThHMm52K0FNVnU2ODlTMy9FdTRDbmUzN0d2WWN6WDE3VmEzdndxSlRJcWNzdzZYVGtRZnp0Sms5ZnpjRy9DZE1id2tXdmVESTI5c2tJelByVFFDVmQ3T2RGbm0zYkxYd20vSnNscCt1Tkp4b09NQjJhak4zQVJhNHQvYW1aeXk1RytNL1o0a0FCSE1XSmQ5T1ZHLy95bStQWWxFbTN6Q0FyaGovZHgzeEpoMXlRck5WUTErY0dCbzh4WkVKQTlRSkZraERwOXFXMmwyNnBDMDBrc0t2bnVpd3BOTmdnVjVxNzBtREp4MmltMUFXUGVrU1ZNci90MHNsdmxHQTN3Z2o1b1JWS0NIeHNySTFmcWtKd0lmczhJUy9tUFM5NHNVcTRmNURoSWZBRVR3cDhqb2JLRm9rRkJNUXhjZndwVzh4c1VzM1M3ZStkMHJVV1oyQ3h5aHlkeVo0MU9IVGJjcHIvMEx3L0ZXRUZKTG5zQVduUFcrMXFCT0tUaEt0SFhXNzZGYXZnYnJQcTM1WUtrUjVyRm5lcG4zN0NqZStnb1NBcVdOMmh5aElNNVNqb2tSblRXTVJYN1hFc2FtbE5UU1laTEJ0THlBYnpBVFd0WExicFB4NVJFZEc2amxOSk1tZE5DRFJTR0tvMVVCdjY5V2pzdEVPUktKMWZGWVhSaVlNM1NwZWxzN3JROHRDdEsxQ2FTblhxQzR5SG8zeTZJNm1wZW84QjJXcGtRNVpmcVR1YmdnYmg4WVdRcmp6eG4rUGoyRkRDNVFIa2tGbHc2ZGVzZk5xZGZ5VEJ0R0VFTlkyWTUvZjFPMXk1T0wyWU9QWFpNU24zTExBc2lObTR6RU1oR1MzOEp0aUhKZ25vNW1TeUhtNEJJa29oMU9vREF3ZlVMTktsZFd2cnJlMjc4ZmREM2U0R3lHWlRycXBFblFreEEzSmFqNWVrR2wwWGlmVVdCRnVsNFFJY2p3YlpIM1g5ZlJqdHFKYVFpNmJCTHhBUXRVa2l4M21waDBsSEZxTXhlN0xaNlZZd0hFTDFIaVhGOFJQdEY5SXZ3dlNmWnJ4NFpDQkZENXRMV1Q0WWh0ZGhNc3pjSzVWZXVkSjN3RldrMnd2MktNdHFVaEE3N0VOcGtiRWhnWUt5SXVWTDRadlR6N2lCSVBoRGdwVzIwYUlSVGpDc0ROSWlacDB0VWc2QVVqUkVYMUdZNU0zVlFaNUhTUnV2ZDJzL0pPSmZ3bjdmSW05VXZMV2hNR2RBWWFsbUxBSWd4cW03My9IY1piV0NacS9kN0YxdGk3WmVxenNya2tWK3JnajV2Mm5MODc3UE5RVVp3bTN4dDhKMW1pWWlxSEpJVzRRdE5JcTA0TVdPOUZWOWZyNEhFMFF6ZTd2U0NiajdZNHozb3ZqNHBabkQyUlVFY2FpWU55ZXhZUXcyd0taMG54c2t5OTNZNTlZTElERWJDV2R6eXFjcVdaVjRic0luV1pjU1RuTTEra2tUb1dCYk1ndzNoU2kvbHFYeVpVQktkb1cyMkdTSjFCNWo1QU5SdGkya0pNNlliVWxBbU9wdkdoTXNNT0VwUitLcWhEWWpPQzhUV01tOS9PT1VEYnZidzBmTDdGRHN1NzRTVzhlYXFad0QxMHJKZnV3Y0JmWEd6WUZOUUZaY0hmYnFoeDM0enltM3ZKYVRTdTFuZEc3dVRYMHdUNXVBTWtXRDN3Zlhsb0FROXo4anpWa1ZiaFVGS1BXc3NnWGVyQndUNDRjMUlmWmQ2N2h2N0g1ckYwaTNSU0RkcENMRldPSHZTOStuQTIzalQ2c0dBMkFnTTFJQVd3NkVzWXlEbVladHpuOXJXK3l3aXViMW53bFB5RlA1M3Z5SjhsSXdFdS8wSWcxb1BFeGdxblU1OUwzTEpOSmRoNnl2TGF3NU5UU3NQN0dVeFJPMkc5ejhOZlJEdlB2VXM2clRSVisrNDVpK1l4aUlHWUpVOGNpeEl4ZVF3SjBOQ1J3cGEveXAwdytwekcwZ2ZGbnZwRzduY2JwRWJPNi9NOEJsaCt2cjJUSHROek5zMnBBNjBDUTZxaHZoTDBxZTNWS0VmVFpNODNsd2JpWE9mMGptcEpYcU5YNDZ6VFZvRTJGbTdjUEgrdDFqV2ttTDJSWEIzTWtkdWtVeks3Y09na1p6OE1xZVQwSVN3K3RjNno5UHRibzV3VXVYbGJwZ3hxaHFaV0pjNHF6YWI4bmpVRzFDNUNiZ1dWRCtobHNVVlpRaVVEWjlRWHlKbUE5SmlMZzNWMEtuNGY2WVdESGZEWE5EdnlSbVB4UXgvZ21qU2pHc2RNb0VSMFM1OENxS01FTExyandnNHhHTzVGU2Q4ck04ank1RDlpWDJnYWZoOG1yNDVIRGJZc2xHZEY2d3UxMS9oRTJLRDBDbzRmbTdCMis5Q3dtc1daMXg2UlFmT21LYzZzOG5CQ1dxeWRPb2VIRFU0cCtRWERBVDVwTVBVOU1JRFJlVlVxT0JGS2o0WHRpRGJYQ0VGc05rV0NUc0FDbFRjTUQra0crUWkra3h3Mnl3bEplOGVQZ1NpdS8wdVZqaENJUElSNGFwbGR6bDJ1dENJT1BiYjREUUd6NndBZHVQa0FzbC9pSjJmUXlFZ2lFR05CYm5FWk9tZHVDVkppeHNEWlRtZkQ4bnVjTUpkNGg5b3VoaEtBZlFYMks2TCtWVTdsQktCYkE4TjF5dTZ3WlJuZm50VWw0aE9jc0NGOTlCUllWdG9NTjY3dFRUWVg0ZkpNUTFNbVhnbmI4NXB4ZnlwMHRrRGJRQTZDdUc5N0ZlZXkzWWRMRlBhUDFBNzJXWEE5bitVLzQzZnZoaDRXNWlkM29iSUppaFNBMUFvUFA2Wk9Qd3B4RGQzSUhlL2c4ZzUwSWxXOWsyZ3ByTjQ0VCtjREp2bkJENlhQNEx2SEJ3NEhPNlVHcnc5U3R3dmFYdVVmTkdTNk9nemZ1NTRjVVhNazZRQitBKzRrbFBTVS8wQ1dWYmNxWm9xc0FWQ0hOeFlRQ0d5c2tTY3hGRTNUbTNqT3pGWVNueWlZSTBza1oyb1E3bHEvZ3YyV09MZ0VVNzY0dzlCMXR4aDJnSTdhSDQ2Und4S1E2c0pBVzI2aERnZzF4YjRMenNqeENYMXVrdGZDeVVSdmMwTEw4UnE4OG5RZ21FNnc0YzU5Z1V0c1ROWkRQWGZiUHZqdU4zTi9FOTNrbWUzSEp1Rm9GNFRRWmdwNjMzOUdxbTNtdkN1aXdUb2hTM0NBOUxtUW1vS1RKdzVDQ1E4Zit6Tm5pYlRvZmQ4dDhHZGJzNEwxL3kwNHdadTJ6SGNCQWN0dzBYU0lsaU1BOVJiTm82b25ocDllM2gwZEN5NlJQOSt1WFhtYXROck9qN0kvVGZMVldnaG5lcmJYdVN0UjlndU1ReWttUWJnRkF1ZmJhZjFiUVhjWkFEckQxOWpOZFVJMTREWms3MGx1TDVvWkxPajFTQ1NtTEt0S3AzUGM1VThiVXlQNUswNTRaaEFSbjhPQ1ZmQzJsSjBYWHZQS1hESXhZZUlMbzU5SVJ6aXRwMjY0K2lnOE1VN2NqVmFZVWYyN05oRG55SlhpYWNDQzJrSUphYSt4Q2p1dFpUeXRwMGVob2FYbGhpTDFEUHpLWmgzSS90UmZ5aDVtQkw3dzd5NzdReXN4SFlyL0Q5N1o2UlRUQ29EZ0hZR2RVM3dLYmI0VERVcUY1Nis4NzA1eEVGSldxcGNjUzZ3R05yVVJnSHVDanlvVjFXMmtHK2psbGZMZXllZFFsbDM3UmFsQkg0Mzc4VWd3eDZYUmRldTMxa1hsSFQ0VXB5R0ovMjRrVVNHT011S1IyUTNlOUdmOHNySXEwN2lZSEg0VTlZUFh0a0Z5YnkrTi9IQXJXdHpYeFZwc1I2VVc2TW5GNHJSdnJaSTBXbUtjRlBxRUdWaW8yNG9QVitnS1UyY2hTSnAyRUlvdkZXRTUxM2haVTIvaU1vaFlCbEhqRDFnRCtyeDlvbjNYSlUyVnBMYTJmK3pTUjhnbW5VM2xTblFIUElXMWFnVnEyTENPdnlRNlI0TkpGWERoL3hEWWpnVjlsL1BxODczc3NRVXQrOUJSWWtXYmpJYmJuWE5qVTl2eW1TVVZzeVQvRHk2NmVVcjlBRDBTb0RZVkpVVzJLYzJadml5WlhVWm5YV1BHSXNmbnNoK3JYaDUyYnp2M0NFNjlDTkJDSW52T01zQzhjUmZ6eU90M1EyQ2d0Qm93R2d3QmVFYXJwUXRPTWo3SE9qRkMzeXo2Sk1TUHJDaUFwaDlNVXdCWXdrbDNGemx1V3hQaUxyd1ZYUVFmUm9vVWEzWkM1cjZpSXpOWWxlZnN3SkRHaUlNMW01ejJNdmJYRVdieWE2RXRBVi9ET2dKa21ZNk9QbFJsbVZOUENBeFJnRnRFelVoTGQydS8waEM1eGh6WVZ0WFV2ZTNFbU95NE1WOElXR09sRXgwS1luMjY5NmtuUVg4K2ZJV3VUUlZmaVQvQ3RXZDEyUW1USE5Cd0svdzVkdlIrWmV5WjZTWHBRbGlQaTkrRFFJQlM4Ry9iK1YwYVlZZW5tRytQNEhEN2hOZ3lZOEZ0WmZLb3ppeU5CazhjbnJzNDdXNWNBRnhheUZrMlZzcEJwV1lSVSthRWljTWJDNE1hcVNleG9YT2RBd2x4dGZqWVNkTVFxbndZS000L0tlbWFDVHBSWkgyWGdCNFpBOFVLb1d6bE9icEVoQUMySlpldjBRRUxKc2NkWGZSbndBcVNPYW8vSEYzVXNGam1XTlJqa05XemQ2dU9ETGRxTzYxeTJYSTFndVI1QjhoeWNBc3JhWVlBdWkySWdHQUNoaVp2U094NmtLekNNSXhTUXdFb0YvRXYrSEpOMXF3NXdpMzZ3bW1lWVhUeVF2MHduODBzMFdNYlp2K0ZFNnhyTHRUbmpaNHhVMnJGdUlzOS9SRlhFUTZXYWJiZk1Qak9MZ1c3UlFTdDI3WTY3dHJBRHFVREJyM2ZzZnJKa2N6bWZmdVJPcTkxd0JLVXVQTThoc0FNeGZxUVZkN0pNaDlpZGx0VFRtdGlXOGhNMGtyZ1JDdnhPdjN4UW9xa2IvaEF0ekNOdDVnM1ZHdGVqSmNuYlZHeUJjdm1tVEQyV1RKT3F5b1NLQjl5VGl2Y2Q5ck1aOXRsWWhjcWpzOXBrUnFPTUx3L1dLWklUWCtHeTZWVGo5WTVhL1NpUndaSEM5ellVdjBmWWpzZDkvb3FaWlF3T05FeUtzMTc5clUyM3pNZmcrVEtQem9jMlZuNDVOSndyMlFHUUpabm5QbUJIdUFSZjBlTXR0UmNFbkhkT0VpMW9YM3BFdFUrMGhhMmliRW9tSzJyN0h5UnVmY0w0MmRLbURUaDY2cjlwbWs5ME1idEpjVkx3NlI4WHR0cHFhMzl3SCtER3hET28va1hpNTlZQzVMMGdtQ3Bja1FGMUFNV2R0Y0VRZHp0am5tQmhPMUFUc3ZPTVoyNzIyN25OK3VnSFk1ejE0ZnQ3NXoxdFlrdXJJc1FqbXh2VjJIdHpiekVJSmxXdTZOdG9QUUZMRmhtZE5lRDc5UUtaMGE1ekNFcDA0WEMzZ0VPR25XMEQveGpoaFYwV0NiaE95MTNhRlpmampjQ3ZFaWtBbEJGV1oyWE9yM3NNRkZESEZtbEUvbVFNN2k4VTFrb242TThNOTBRMGZYdlEwRE9KejZkTkQ2WXBtWVJ0N0NXUlNWSmFoK1ovaTJvaUN1L21vSTkzZVBxT1c2dzZsUCtBakMvUW15TTA2WFFuZU9QbVFTdFFjOEdxTWJSd21PeUlLSk5NNmZzbnNCd0FjOU0xNlNVTFNWRnR2SzJkdGVTaDVEbmtSaXdKRDlaNjJBMG5WN21kUDNhT1BURkhWQWMwajl6YXJxUkpFRnpKRDdoK1ZmaUs0RCs4cnRkUGNrcHlWbWJiTFQ5YWNuVitHOFdsNXhtNkUwTmtWeTZJTHhhUzRKbUx5ank1TFpZSk42c1dYODF2Z3hnYUZqOHdrZzU2RHRyM0JlaC9IZnpSVGZBczU4eWp4dkVIYWNNTjMvODZ0SWpCMHROZWVadDFxN1krT2xGbFV4bC9NZi9PSHVuL1lMSnQzeUMwNzlZYW5EUnlGWWdsdnVQK3VCQ3Q1OHlPNnU0WldRaDhzcUpFMEhjaUZIdFR1Qzk2anA4TzR0YTR1bU55dUJMamcwTkF3QVpjZ3lqbEVUc0NZemU0Q0JMbTFzdVJObkY5eURFQkNkdXZJdEE2RzZEemI2R2hzZmliZ0x0WXAvemwvcVhtUXJmQUh2NnB4ZzNHOHZtYXFkQ0pSdDRnY1JrVmF5UGpJSmtQS2d3Uzh6enlLQUd4WHNORm1vRUxWd0xjQ3I2YUpIdkVZNTJqaVlvWis4azl6YlVqRGVFQ3o0ZkMvdkhIQXRBeWFMTVlzN0lHbDZqQll0ZDZUbGs3eTdscitwTi93OWRsVE5OdFJmWjc0OUJqd2dBUmd1bk0yN3BZUDlUS0k5VlZWc3dISVRaWTVNc0VLYmNIdGNqSW5PNng0djZETG53Mmh2eGFjRFExRldBUnJUMG9qcjVNR0VvYUt6MFA4SXd4WkdIQzdWZHZZTDBHVnF1c3FLcFdET2E2cUZjaVl2cHNnMVk3VG96YVNmZmYvWVdxK1R2b3ZKRFJXWWMxek1WcHlZbjM5QWZzNTcvS0xWcTVsVHFESVRvKzRoNElKSkhyRWExeUxmaHF2dzNNYWdNaWZoOWU0SVRldnc2OWNxM0Q2UE9MelN0MHU5cmZaL0tjMlRiMjYvZzFOMzhjcFVWUU1aZEhvL1FLalJtZk1ZNC9ucTBNRlQrU0g1VUdzOHpMUHVrT21UaHZnMVZQTHcyWFNFV0dMUVpyT2RIYlZzZWVwcm1VZEtTL3pLS0hOejB5Y3Yxa0dWUzNneEN1a1p2OVRVUlJQS0RXSGpLNGFxYlM5REVUc2w0UFA4bkMrUDZRY2thUENGME1qNld0TnpRdDM1WGIvalRIRVN2ano3c0RHWGY2V01YZExRRUxNdC9Rd2xUOUc1dGZoWjk2SldPK2Judk5OUTFER29LZjZwRllOWGZDRGR5cnIzS2NyQ1pRVWlGK0lWNS9PYi9PSGxMdjBjZmhldG9BeVBtOHlGeklGUFcyQXpkbDE4ZlV6VzVrZCttYUZKWURKSEpTd0ZRZWw3aERpcHlxMjg0YmE3eWw0Nk55NWI5ZDVDOGRmQ1pnYjhxNVgxNUhyWTFOOStvQ2JUdXhEdkJnelo4UU9kNmU5QWpvSExWdHdTUDRmOVExaVNCY3FtWXJJM083S293ekcwK0g1ZXVsSXE3djNuU0hoMWVwYzBVMFVBOWw1b3k1RGFoWDdCYlJZUURtUTY1aC9VUUszUGROTUN0ejI3MytwZGt3bmEwTXgvd3R4OW9hSjFQR29NeEluSGRYR3lCMlVrMytLdjVsMWdaYWY0OWVRc1BENGFIME5WYU11eDd0RmNFcVR2bUFBdExqdERlTVJvdzdJd3RsWUZXSUtENUdvNmdKamF0bWRTRVlwV0oxRHE5ekJoRHNZMTFmVW93Umw4QzZMdm0zeDNCWm53TlBTSUhQUy9Jb2xtdGNnaFU1VmRDZWQ0Wjd5dVFrQ25KcWJCQXVJd01oV1J0L1pNa0JtWDVDVk9naWtiT2FBbWFnZWxscUJVdVp3VzVNQWFyclFqTHRTQWRSVGwxam9zL09iV2VVL0ZwZWQvOWd2Z1pobmlzcWt3YnpsZ1hGY2RBV1lBeCtiS1dvbWo5SEkzUFROZTExYzYvRWp6cU1VWHpPTVlxWHlRZWxWdWRjMzhpeUtOa09wTFZMM1lTcTMrNy9scHgzaTdqVVRYZ1JDWEhjTXM0dk56dFBzSTlzRG5xSWpaS1pIM25hM0tEU084Qm0yUk9JNXZ6aGJnZUlhVDlrZE5ndjdTME5TQTZab2xmcUg5NjF5LzB0L3p4OHZxMGIySHJ2T3JsWXFjajdPRFk0cnNLUVVya1MrUXRXYTJRSmhkcFdlWDA0dWlUWW1OYStJaHU4T1plMkdVL3Vsa0E0eks3enc5MmdKU3kwMjZMSVpvcUpaVWZTVGV5Y3lqelpOMjFtNCtZTnNub3BmNlVCNnc3Rk1xUkxoa0VQdC9zaDFrQ21OK3VnU1psd3dvUmRFMitwVnFOZ0RMdi9lay9GMDg4TGpWQ0xzc3duT1E2U0JPdDU4aHlVakdwbHVlRTNNMUVsZU9CWUU0ZlRxcm5UVnA1aVBGeGxEU3RWMjJtaDJoSVk5RmlSSWxvZFl2M2E3VERqZ2VGYlAxVlZ1dlg5SE1RdkRJNVU4ZWVOUWkzNGlNd1VmOHUvMHdnYVQ3b1pyY3ZIbXVsQ05ybTFkRWVHUXhwVjFPMUhZTko2VGFMN0JpS1BUblBtNW5NekxiV3RBZmVvWm8xRXlhZU5lM1BsY24zb0xlclJlUExWbzFKaDQvVFpYM3hESWhPdjIzQTgwcVpVMDlLTS96K00vNzI4TzdsT3NtR3IwSlF1Ky9zYlBnM1pLcXl5dWlWam5qaE5uWFBDcW0xVUZkbjE2WUF0S252UllxVlFLSk1DdlRPWXFNeWdmVW53TlVzaXN5STJiNGRCUWd1cjZ4WG1HbTRrQ2VodlhqeWlvc2lBUmVVdnZEQ0pkc01UeTVjaytXa24ydVRhcGRsWU1CQVVlRkd6c0ZkejJoSjJiZVEvZzAwZWsrdFRsV2JHM0N5R2VDL1p2RlBXdjkzRGNMbmtSL3pvc0xvb2lkR3EwcmhBd1ZwbThnbTNoZmh6VURFNzRSVzRWa1dsMlUzRyszUU5lMEdySlRFVnlFVEhuRmhJMitRRzF4UDdqOHFkdW5FS1YzcFJGZVZZVnlHNFUwd2w1di9YMUVPbGpLOEtWcVpQQTFIWmkwbWdqYlpJUlFUdHY5OGdhdSs4TGplNisvRi9zcHorTTMzTWdDLzhnK3UrQkxuSmZQUGhSNk9RWkN6bytJSEd1STNURmx6REpMMUpHcmU4SmlTWW9lemczaXhiZFRHSkUrWk03UkJYVkNSd253UmE4LzN1b3dVSnk2RlhBdkxqK0UzYWQ4RWc3ZjJaeXd3RG9VbkJ6UExhNUVOMHEvemtLdjRwUVoremhtZG9TSTlTQTFNdVNaL0J1eHpmcWhaL3Y2TjlkelptdzMzRHczVWgxd08zNC9aNWs2WHE1NWNibEZWVFlNdm1xQWYyU0hpNXFmZDdGZmtEczY0RWFJQmU5TlduOU1aZGY3RmdLY3lRYzNKSGtuRnFEUjd6QlRPMnBIbFRzMzJ5WFQyOUZiZWFQWjJSRGovRUNTZXdwTmJUYWVuQUhyMS93dWRVSzFKM1lDMXZxVzY4ZE54cU4weDEzZmthVXE3THkvUVRLRkZoa1g2cm5VSzdEOTBQa2xwYmZFWTlRTjVBNTVRYk1jaXlvTFpmbUlBSnNkY2hTVjkrSXEzU2ZVdytaRmJkd2VOUGYyRUVPcXErcmNSSklxZ3FtbjY3WTNLWlF5MWZvRHhLQkpsbFhWWGpucE5tWFlqQy9sMktYTm9yQ1AxSEU2U1hlZzFIYVpYRHFOZ00zQWp6dVJPSDNTM05xRVFzREdDVHV2Vlk1akpSZ2wwVWJIaEx5eE9pVFNFaTY1OEplakxlTGZ5QWU2WTZCK3NUTk5ZQ1ZKT01mbVBxR2cyTitOc2RxTHJPTERraVBobEpvbkY3Y1Nxa1BQRTVhK3RXQS9CdmdmYjlJdGxva2xRWTdKTVZWd25IUTBjUFNoZlk4R3o4bHpqMkZnazZ3bFBLVzg1Vjk2R2FqcGx4bkovckQwTlVFZk8rL0lmNkZCcXNBZnhNT1hGWm1acCtwS3lvV1Y5RjZKMTQ4V1Y2U2pXR1g2Vnh4WVFxK0VRc0xQbDJWMGNGdkorK2QyRmE3WG5VaVFPeGlJT3A5aGVQOGVOUytFWlgzS1JPU0p4blJ3bGd4VGRIMWYxNHlPYUF6RDFPUVIrYnJqTC9vMEQ1bU9KQndmTnlRNVpTMzlvV0RhcytBUzhacmtrSVlnWVpHUHlMMGF4T0RENnVYZHhWTTlJWUhQc2lpaTZ6SFJhYTk5NWdqdXBKeEgvSGE4M01ob01UWTdScFpaVEN3NGxDQklCQnJKWW9GNnRWVzROL1dETVlOak54QXA5SVJaR0FKUUZ6Z0NRcnhVckFQSnBwZWxnT05hSUVhN29WVU5JQmtlYmE1NWtEaUJXbWJZR21QaE45cithZjRsbGZ2RGxmNVh3dDZOOHJLTmg5YjViRkRuczhGc203N05zbEI2dCt4RzVkQjVzeFE4RW9JKzVxZ1FqM1lwaTRqMG0vSmwvQklqaDEzRlN1enM0YmY4M0hDdUVyalp0VWxiWENCZlVaV21OQTFhQ0hscmRsSGN3WHUwOCthTjhwcUlGelVScUpycDVySktmak1WYTI0RVoyNnYxSjNOa1V6VHM5TFh0dm9pUzhSTk0vdDh6UHRSRmd3YkpDMWJLWmRtWkNCL1k1U1dFaFpMUGZMZFkxVHlrM2NkeENLZWRkUHZxZGc5MDZWb3NkT2gvMFowcGVSL3JMa3hTL2FSaGpZMTc5b3Ywa2s3a0UvQVAvQ0pYc1cyWnpES2NoM1dEck8vS29kU0t2STFFeFZhblBualR0aThqZDRyeW8xSEZVczJLN2pNT2dUVDEvTU9XWm8vbVBCeFQyVnpoaSt1d0RRUGsyd0tuK0tZQTRCSFhFU1VRQXpraVQxV0tIVW1RMTdENHIrYndZWVVOcWVZNk1xVFlXYWhoNlA4V3FKaThyOStUQTdIMWF2VUNHSHoyM3o5SnEvYThZOHVwK0FHNUkzckIwN0l0dTdKUjYvZ0R6dStaTDBlV0p3QjJuZUhBRG8wb2JWQ3BRNkZ0N09TWSt6UzltK1YrVDM3bW1CdVFSTExSVGZlNFIvQlVKbWdxa2dvWmdOK3BFV3R2QmdncHBUN1IyTVJYMEN1OUszb0JXNDFDalAzMzhmWlJvaEFLY2JubmJJWEVBVmNpbzBGdmlySENKc1ZLNTZNU0UrSHJ3Uk1PcG5ndzMxS2ErZHowdFR0OVQxaFRjRytVdFIrV2NZWWVadW5uSi9WSVUzUUdRM1hnQlY4dEliaE9LQXFZZForVlg2U0Z0cHNsUG10YjhaMW12NHRJS3JPYm5zcFVJajQ1SWtxQ3V0U0doL2lJcC9LbkVZeWE4S1NrN29BZ25pZFV6SmJHVi9qOGtRRWNxWWNwWGZXWm1IVEpMZ2g5R3orWm1NR0owQ3B2VkJBY1lXbmlqcit2WXdZUCt3MXYrKzJZOFA1SjV3YXFoMDBIV3JRbHdQRlRKVnFhd1FlZEFObUxRZjd0azkxTDVielZxNjRvMXhqdjVPcnF6MWlIVHhpQWUvRVo3RFNaVHRldmdYSWFXcHZCS0tSeWNQM0hTeS9jUjdHcjhrbTlRaXllNkMrYlZDcTM4Qis1ekxPYjZpOGdNK3JYWkdDRnc0MkVNTTZLRnRicFZnV29uRGVxclpaeU9aeTZXYWZaUyswSy9rZXdWN3BpV3hudzN5MEhTbVFtOFA3enEwVnM3cUpjT0J4Lzg4VWdUTnJwbE9QeWZaUXJFd3EwaFZ4L25UdUU1eUd2ZTc4SFd0aFhrRWlSeHhKQ1hDS1gvcXZvV3p4eVNYZEVQMWl5WWJHa2JtbmJibE8rWDl6N0poNFZPOWJJSlVUcHJWOTJab2Qrdi9Uc2hsQmZhREpncEVyVm16N2RKVXlhVTNuK0pXNmxpS2RWWGlOVG1iMWZkdDZYQ3liZTYyWi9MNkxVQlhPcURQR01SVk15bkw4YzVWT0tOOFhzQkFqQTI2MHAyeEhQOHJzSlU0QlQxc3RVL0VTTVlYdUZxdXFpYWtUT3Vab2ZqSytUbWlMekdMZFVCcUZaOEZIYzJGZldqc1BNR2NTbWFWNzhYK3pKNG9yTDB1MnhFdkZIUGxzWjVhbFpjaW9KTGZyWjA5SlMvUTExZFpjdkVTbUVxd2FnMDRVOGc5clRodjlCUUNER1BhQmVDR1NPd0c5RWN6SGVocmVPZUdHWVE1bG9iL3lqV3JPWS9uT2wyMUg3cnBkd05FZzQ2Y1hpc0pVbGdkSlpBWEhlcEZMSUw4bnpLRTNGY3grQTh0ODdFZzNzVzdVcmFlalRTOWtjQW05YVliL2xlTUJqNE5nQXRXK1pEbzMzS29mdGRUcEpuUWtUaXpBKzRPNHBPMUJYVjNpZENXRHg3YkdvaGhMV3Y0OWovenNtQXVVWmdiOWN5VkozV0M5UDEyVURsaVJtSEJwaEtZM1Zoa1VLK0htWE0xMitLdEY4NytPWDc3VFBXdU5RTFZYWkNvWWtnUGlKVEZnRE95ZmY4ejVGNUtFVUdkMXdEMHYxZkhEK3lYWWxvU0tCellHUGNQS3NTQ2hiakFQN1RTa2ZmMzlOSStWalZzaWZGQkVvQ1ZIT2lBQ0c2REZOOGIyRlFkMUd6V1phdUJnRTgxRHVFYjExamtTbHFnQlVZMGhuekxTQjh2VmxUQTRmZjQ1U0NtUXNtU0JlUUNVY0ZCaVhpWmV6bGdINjVzNzhFbHY1S2g2cHY5S3ljTUNacFlESS9yZXQwN0N6ekxuWS9GODRmT1puVzJGVWNkSG1PcWhxR1pVczZrWUxObjFKaTVmU3hoWjRpSG93RjJjTDgzZFk1R3BGWG5ySS9GUDF5M0NxL2QwdU56MWRJZ1FFczBxdEZrWjk2Wk9XWWZzNTE2UExzVjcwYk5nYWVOSVB6ZytsQkMvemVMTFFZWWFsWVZJQ1piUmxSQTlqZk5IQUZqekVDZkVRTXlYNVh2NWMzSWx1MmhvaHNZQjJMbHlSa3czVURMcHZuUnpRckUyZFVmRW9DcVFpcUV2c0M5UjdYaUhNaVRMM0tOanNNRjlCY1dJVlNnL2ZKS0x4UTg2RTdCbnBHVm4rY1ZNRXpMZ0xHZjg2cms4Y0RhdVNkR3N0c0F1ei9WcG41U2Zqdi84UUZqK2FqaU9icXZpZkRkUTNPZUdYa1JBTGhOZTRRSkdMa1V1SmNOeDF0S2Erb1hXem1TaUVOaUJoQUs3TFBlYnMwaExvSGdmUXdKdUloazJmb2tVQUE2eHdVaCtIT3JGdDd2Y3JFUElmNEJtaXNkNzhTdkRRWTN1T0lqamxLNlh5TUdxN3V6K2lqQTB4YWNWeDZHTFczZnJKSVZRQWZvWExnUDJ5bTllSXZDci9hVG5SQ3BqTW1LNGQ3VkhDMHV6K0dBc1l1SElLaVY2ME05d0hla2VGMFVhRk1HZ3BzNlNrUkg4UURJallyMmljN1o1c1lvUkRiQUpmZDROaEd4ZzZzbTc3Mk1sZlQrdEh5eEtMTjB6SjAyb0cwSEh6UjF6WnJkaVEvMFVjNUlkeWlvbURwZjA5M0IrUmRSdzBUdHNOenRyT2p3d2hHeTEzNDFvblVQa2x0TFRPQXlYTEt0L3IyVFJtYnVraHRGWFBCM0NiazBZUlhlWWUycW10UTBpQ1N0OFZ3RkdwQ3FwbUNyTlVXaWh0WGdncWtKMnVDNmQwOFdmUzR2UWxaSDRySnBOb3Y4NE8rWStSTnZJbFFkSjBCTk14b1dUdGt0S1EvbS80bUwyNFQ2STZSWnVPTTBYTTY1RmhSaXdDdXRVeUhZbVU4bkVmSFM3a1JkSk5tUENBU0d6UUd1WTlVbm1ZWVpqV3cySVFnY2FmQ3RITytiOHZzNjNiVDNKWlQ3SXVaVmJJMG5aTUo0QlFmVVVyY3V5eVU4eWw1TUVTOUdwQ2RTdXk3Y09XUnIzelpRTzQweVl1WFdEeWVJRkI1SnlJWVlBNjdQM2NLQ28rcVF6VVhuby83eklNTU1vdzdrZW1GYm5aM2xEWlk4bEZ6OGlPUEkySGVkUElPNVRlV24rSmwvN1RHN2dwOTR2bElMUmNMUkI3QTIyWTM0dWZKM2NOZzgyZ0dzOUYwTXMxMlVvZmlNcG9nanZ2d0F2bjRoQ0RyN1Q3OUlaemlxMGtZRitkUHRQVnRVZ3dFU3dBSFIwY2JJMER1M1VzUFBYeTFGdzNIMHBDNU40U2U0ZU5KYkhzVTFJMEFrazJnM29WZm4rUkZZemVPSWpYMEh3aU5SQmpDSThGUWtZZ0ZJUC9aWjdDMDdjU1VFVjBOajhicFJrL1Z4VGVzRTcrR0JwNmQwRy81WHU0R3hNa3FtSU9UcnRNVmlLSmFnOTdpZEVoUldzS1BJL0k2UVVQb0dnQWZRZXVVVkkwQXlaTGpEL2xkc0t2NUNVQmc5UlJQc2RLNk1Nb1l3aFNHaWJndTljdWhZK2FKcXB1MEtMc0YzSWFRWlE5NG4wczY0VmRtVWQ3dmRYSHB3cG0zY0dueVhGeWFaaHE1QUw2QmRiRmp1UzIvMkJGOEVNVXd6aW5wOW83aFdOdE1mNHlCNmZudjlqSnQ0d3hZS0p1REc1WnN1Rk03SXlvSDgvVTNhWm5uNWUrbVdKM2dqTk1Rdk92V0lmWVMwcXJSQlZVNWx1YUMwZFc5NFlRVlNuYVZHVU5VY2VJckRpUURQSUlRRGxzcFk3YnVBcXdaWk5iTnNDMnhFQjVrM0dlZEhzczZqekNnT1dlajFIbmdoQ1JlV1dvYzZpYkpyV010TW1FMDVuL1pHNzgwU0NsYjZIZWd3aVBSSmJMYlpaMCswMXFJOHhFS0E3VU1nZE96Q3I0eTArZVk4aEJmRmhZWUphOWJxWVMyd2RoZkVFVjZDWlV2Vyt3SGIwc05CYlQybFBRY1BPQ3hWUHFFKzg2d3RRNElTOXZybmdadzdiYkExLzZmVEVpMFQ5elI4NkhWcDkwd3F1d2p0cmJZOWRxZ1MwSFkyM0l1dFJLUFB2RG9leWtZSlNMQ29wVVpoWlJhRExMajhoTlV6bHFUMkcvWnNxWDN5ZEZDQ3lxbG1heVBWWjRlWGx3RHdPVFUvT3JJN0lsSWFSaFRPZDJTVGhDRTQwRGs5RDVrdlcvMnB0MHYwWXhLYlF3cUJMc1JxeW8xelpjemNaV2phNUNxYWNjUUZ6N3F1eERuTGFZL1owSEJwVngxSnlVYlJFUkljK0tvYzRxanAycUNuWTRGWUhoaUVPTHZZUVBtT1QrZGJ1QzJDcG5Wd2JDQ3ZLVWh1RjB4MWZRbm44ek5yek1GM09rY2xickd1OGRwYUZpRzdhTUk1bmVPUWdmTnZVOFIyYllDaVpJci83VURId3ZkQys2VXFPWDRha3pIaWpYekVWNFFWZVgrTEJJcnhKZzBqOG8xZnFjRFgzQTF6Qkp5U1llRjR3VWlJSWFhNDNXVy9HbnM5cVNMRENVYmxyZG9RVjNNOXJlSzlBV3dYbjhlK3B5OEVXYVFoTUxUaVFieXY5SDhLd0ZsU2FSRVhNdjlmcXVMUDk1OUtDME5TTkhiOVQ3djA1V3RxMUtNZWhaZWdpcGR1eHU5eGtpYkVQOUtsK3hVbUlpWXlyTlVyWTVqbHlKdFBTMWR3VDc5MEhydjgvblM4bDVWWjZxVnRHMnJCLzBxdHVRWjd6OHFlV2NLelhDRjRObXBnNEN1K1dzSU1ZYy9pYkVkK0NHbUVHQklpZ0k4Z1V5L3JxWFY0dkVnaEJQaTI1eUZWb1ZTdFVLdFcybFZFZFNUaDROSS85R2czM2NWRFBxWmxqZUdtYWtRU1RNMXBqdFFValZYdXZCUmFjRitVMEpyemtodzR4QjlzaWZZUWNXeG0wOXViWXc3SVVwVEk0aDNHZmhtNkRoc2w0YmFyUlUxRm5oQUtDZjNpSkIrWFFPZTR4YVVnVTRGT1VaU0JUTzVsb29zeUdQOTNQdlNaTVAraEhZUTh0aTNSdkhmWVVqVDFNZDM5NDJvZTRIdXNpTDcxRE03dG84dWVSRjFJci9CQXpIRkJNOHc5VzJTeVFUemQyc1JwTml1ZlFIeGhycW5aMGxPWTl2NnZBd00zWW5jUUd5V3ZJTkRmOXBEQVpqUFZuNThOU0Q0NVVBUU1MVmNHc3NaNDllQU1YelpaZGwwY0xVeW5MdXJqQ0F0TlpEWWRpbHU4TS9OQVFkSjJXZmllTFY2S3k5Z3NUaXQ3bGNRS0RFeUhFOGlXNnkxbjYzaUlhODFucXJwM2dhc1ViOEFJZDJma1hHWkNUWUg2MGo0ZFVaRnFia1ZFMmd0azZoOWkyc2NvOEpJUkhJNVc1a3lxaEVqUmZuZEg2ZEJRU2F3MzYxQTJ0VGd4VG00WjhOdy9wVldVdHU1VHh4VkZPZ21UZWJLQmZkZEFKY0JXelkrZEd2NXhRSlRtVUUwc2xIQUpQRXVaRGM5QnpSVXh2bjRiR3gzblN0TW9BSTUyWVdzQ3hCRzFjS1FiaGtQWWtTSFN3ODdHcTRwbktOZFRwUGZqKzhHbkNPVUtnd3JGSXMzS2NqM1RWTmtKbnhFVFg2a0xoaDNpcmJtdnZZeWJwdHdRM0ZxMUZ1cXRiZWFlZ2Q0ZGFESWo4NHhlVUg5R1NsRXV4S1pvWm10eDhMT3N0YjFZMDZFdG41SDNFRTJZR1BKV1gyQXRMcVFjNWJHenJnV1lwQ3BNd1U1K2d4azBYZk5TWDVTbWwyTmxlQWZjQ3AwZGwyZytFVnA4dGhIbHZXbVA4dFBqSjJIY2xhME9CcW01dTlIcUgwcDhNem5vODRsNzBlZW01QThxUzRVYTRjWmxiMFk1TFBLd1RCb3Z5VmUrUWo3MFdmTlF1SXVBMjhFSzJQZ0JJbjVURzlFUTk4WTFscXY5OHpMVFUwNEsvQ3NHdVVmVk1tajZibmhEVTVuby9Od2crbmRKSngwc0ZMS1NEL05QU1FvaStodW1MRnVqYUIreEVJWTlDa2ZXMDAvZWROSHQ3WklvNUd3c2dOMjVKMUhPTVYvaDBzbzZ6UVM5VjFVSFVPdzkvZmlLWE5Wd3VoUmhxRlZHeUx0RDh6NFdDVHhjbHJ3U1lNMU96b2p6cTA3SGs1eVcrc3IyRUgyRDYyWW4zeHloWXVNTHIyTjlEOTJQdUkyb29jMzhkSVZtTnBybkNTb1c2VitpZTNZbTY4bTB0UUdoblNnbW03T1ZZN09Fc1RWSGx0WmFJWm83cHdRV2t0cWJvUGxuYUR3Z3Z1R0ZCb0pWMmVZb1hQOHRiQWswT1FKNFFLRzFVZE5NcHI2ZHhRbTErQmdGTnZQdGIxSm9keUFkdjRITU9TbGRYRW81dS9OTmllNWlZYjFWQlFibEE1QTFWN2xoZUQ3bXBuZVdxOTB2cFRydHBDYUU2MFE1NFEzcFZPTFRVU0FrR2hOYzVDVlpFREZwWjNVSG5NNTB1U0QyWDErdklJQ3YyU2N5ZUx4c1RTNTZkVGJBcmxHdk5heWhCL2tpNXc1WGtaWXBaTWdDWDY1NmVpL2Rhb01hV0wyTmVaUDNCWk1vMUlYVWxPNVAzb1RSOEMraDNSTmN1WnR4SVVKVW9lT3J3aXdtZlZKWGtFeEFBaWRFNU8rNUF1MHJyQ250R2pFY0hZYmovT01ETDFRYnUrV2FYVWZKbUsrTzhxRWZMb0NQZ1pFaXoxTDNDQk1sZWZ6Q2VPYmVTbGkzN3E2ZWsrQXZYcWZseElOWWVmOHV3M25UUjZDRXI2SCtsTGU1N2JsZXNxK2p6M0FkbGVvNlBCcVVQNU5LRVp0RjJKTkY4cUZxcHlXWVhacWtuaHlIVVJTOW5PMEE0c0FGTjVhWThOYXRMMWZDS01OMEdjZ2JxRnpuNW5uWnlZT1psdmZ5RFVGUmplandEaytVQUhPTEdTZDRXWk03d3FHN2RwTmxVbE1kQ2RMN2xYWi9MSGVuWitMN29WbUhWRGJ2eTEyZW02VkhsWTFvZHNDRlRDeExMTlhGR01HS3oyYWxlV1A2UlUyZkVnYnJRM0RKSEZHNjZQQnRuQkhmQ2o3M3ZJOHQ4OFJNV1E0YTJhU1JoS00rZng5WGRsRHpXQXRNbmY5SGNpVkpleGdiTFNUK24zR0dFVnQ3V0FNdGRrN3hUOGNFUGRxRDl0SjdGYkgyNDZEeEl2V2VCVjRVeU94T2FuSUwybmNPano1cVNTcnQ2NGJUdE1sVEtHMjJHU3duT2VKNVpNMlJDeXA3dmY2QUhzU3VHc0NrL3pINUhGUWlnNW9CS1dKajY2N0dPdW4yVy9RRGpyeUoyRmZnaVJNOEFpTFJ0TlE3WkJZbHM0UXROUjFyTXFBZENGc2M0TG5MTk9xRlcxZGVwRU5GZ2xDZW5nTVI2MlFpUStMQ3ZaQXcwUUNQcERwcS80UGVQc0llMUhkc25sbzBKcTlITEcwbFRMT0M5SE1pOUhiNGRmdkRlSVZiUmpUVUFKa3dTeFNtUEJqKzRYMW9GczRqRUpKdnQ1RHptbG1JajVWSW9velFuK0RpZGpkaURiR2dZRjZIUitPSkdKWTJ6Q1JmQ3YxTlBjU3EvQXRpSUZkd0hQRWp1ZDV6aGYvVUJCU3VTZmp4OEZxYTdQT2FkWlpjR3RXMW9SRUtYUzFseXVZSGVWRWt5MkQydjdkcmNTK1ZDbHZjdnNNNnZVRUxJUjNaKzhRNTVCdFA1UCtuWlNnL1EyMENWRVJrZFkzQStHbktZNWtBWEFaZm1ML0ZxSzNKUGNBdGZ5QkswVGE0MDlXRlRlZGFBdHI1OTZ5cC9oK3o3NDVCVHp2dlRhWUl2eVlTd1pMbHVwa2pCMU0wUEdKRUp0RkdrNklYOFNpY2tMZmlYQ2I0QkRvakhlVktzakE5dTB5bzk3d3hzek5zWkNaNFd3eTBLeFAvU3ZycFNwSTc3NTV4OVMvREpOY05NLzJsY1Z3QUhOQUNZR0lHM1MrWlpWSm84Ym9QRVZ3eUVsSVV0QXhuODdGV29nUDhObGNzTGFLbThsaERLb2RlMndjQ083dW5LS0o1TVBRZWpKNUplaUdkTmswM3RrL21DeS9USXRpMi9jb1QrN0piY2hwL05udU5ucG9NOEdzZkxydlBBbk1JU2g3aVRnamVybm00dE9EdkgvRDBrdkdXWWRWUWFuRG1vMkFhaXF2bHg0ZlphU1ZXVkwxODZxRUdqdXIvekdENkpLQlUrWVRXelA3Vmh3eUJlbVpZTTM3Qy9IVnY3WktML29MNjRLd2JzY2hqWjlvblJENHBXK0RjN3BHaTRNSWc5VVN2azB1Z282bEltOTY1Ukdnako1bCs1SGV5OWpMSlJSdXBKS1ZtdUxMVWZub1lTR3crbFV2RU1ReCtkVDF3emc4Q2VzVEw4NjF4YmVNcS9NeE1qUGJIS1hOdXdEb2V3OWEreVg0dUJSdlc3bEhGcmkxaFFKUW5Ra0lXeElBZHRjbmtyRGV3WmliTldLbW9mclFiTmV6d09PRkpmQjh4ZTA5amRUNitlQnNpV1Y0MytCZTVYL01raDdDR0lJUXQva3Z6K0VwSGhWS2IzcDQ4c2pic1ZBcFZBbWtiLzZTN0V0NVRmZTdoN25wZkxaR24rM1M5T0JhWnhYWjhvMXY5SW1TK1NWQy9jWnh0R0RPMVN4OHhXazVJOUpiS24yZEZqY1JkNkhGc21wRnZpMnd1bit0c0NWSStGMUg3OEdYQW9ScDlVU3dIL1hXU0w1S1dXNnJxWENGMmVHZEFPMXM0d05FYTR3RHh3T3IwRDNGWlQzZytoU2p1eWZjZU9WYUgzZUV3S1czendvZE82TjU0Sk1GaXp2ekhxN2FMM1RZY1BoQ2dsZG0vQThCU2RyNjFRd0Vtc0swZnBINGtDb29VYmZsZUh2ZGZMTFkzbmVxYWFsWVBoajdOMmRad1FyZTVBT1g5dHMrMk1JN0I1YVZ2SXBiTFRKOEEyVTVMWjFqcHFWbkhQeFRVbkJ5QVF6SzRzYWthOWxZQmRlNlFGTnFmM01qcWR0SHlWQjBKbUwvUWVjeFA5SkZKYXZocHNhbHNSc1NJVWVFanlVNUQ3aW5lUXFGY2FKclUrdmZnamJ5L0x5R0tzdFFRNUdpTWlSZXZUUDNHd2xmUi9xU3NaWVJzMkFzOEdrVkYyUk1kQzRNbzRLeGxDczEvYklTTWRWQUEzTm1hUFdUOU40eTFuMkJGK0dMcHYya0Q1bVc5SUpFQkp0dFJXRlR2Tktabmg0VWlVNEZkenl1K3p5MUFGY29HYnE0QTNzQk5qODNnTGhEV2hZTVNxRHZTdXBFeUdJR3VvU210WVA4b05GKzZtOEJHdDByaWttckUwTGdBc2tTMFFYQlJWbDhpUnRPVDRnZ1lmaFR0SjBVMmRSME44UG1INm51NUJ1STVPNCtjRnBRVFBOZlhKWGZJSU1lR0paT3JNa3N1R0N2bVBEWDhhckUvYi9Dc2NRTUhLTnNBc2Fxdjk1RGNBbWhRZERJYVM4TVd6cG5RSG56bG84MFphTmhRb1ZxY3ZmbmFkVEFxNW9pK0RGQmJadmxZbm9QMENhcVYwRDNvdUg1V1hsSHpKMVpSRUg3TUpJQjA4LzEvc1FPOXRMRUhDUnN0Z3pMd2JQcXRYN05adlNRME9sMUxFdkdsVFZhUHZUL0VMT3lNdVp3SXdqd01Cd2o5Qi9JZmNkaWNZN0NxQ3Q0YjNrNXpubDVGTUsvUFF5MktIN2xudGRWVWQxNmRZcDBDNkgzMkx2d0NFRXhzcFgxWmh6dnpPSExzRDZ4cXg3ZEx3S2d2ODd3b1BEeHVKL3kyUlJCSTJ2TXdsNklTcnQ3VFBwTVFJeGMwbjBHQ21RUTJacjBobXRFdEljczB5S3FmNCtXM3llU1hFOStPcXYvM0FmTllHS0VVOHVCVVpLM0toa1hCSk9kNVRFbXY3OXBkS3JhTFV1TURtWTNIS2R4eHhEb01YRHFzY1JkLzRFd0NSY3BrREZuRTEwdGpmbS9pZE84Sm9HSmVkU2JWRC9LNVViM1Q1c2hubXhFdjgxZStTaDhGMHhoK1dDS2RrUithRUxxa1dnTGMvR081ZEpkcU10YzRGT21lZnE5RGR4MTVSN3VrcC9FOGxweDdzczgzR0VBa05MR0NTOC9hSEVnbkt4T2ZGZUQzKzliV0NqbDV2Rm5uWmlGSDQrQ1JpY2tJTDZVTEM5UFpnVzlVWm5RLzNRR2Q5czF6UndTQVBPTlpQQytCU0YxNjY0RU5QM3VRTlBpakF6UER4cm5iMFd6bm9tR1hITVdiL21DVUFybTY2Um8xUVV4T21iR1RHMXBWZjhGQ2p0Tm1WY1pvZS9hOXhIMm9rQkozOGhJdTNhcVJhakRSNzl1dnBwRTl6OG5MTURKbWlGUVBnRUhVT0taZzljcWltUk9zQjVaeENFNkxrcTdmaWFKaW9naVhWM1ZybWVuNkFuMVlnUEc3QVp0bUtDai9zT0FYNVViVWZqbTY0ajArS0pWM0I3QkV3dDUyYVBSQmJUc2g4ODJQOTFLemNyWWlJOU5ZejJFSlpQbXJDYzFScUxGVnRoNDhkTVZ6eENHb0pYOHkwd21ycDJDTGlmR1JQUnBCYmtsdGx0WHFOUnlOVTl2TEJLZFpkQXkvU2hvQkViRHJMRkN4eFpPczc5SGgwZWhYYW9HMUNIWFBlYVVTK1V1RG9WVGtLTEozcU9KdnJFWEFxQlE1cEx3TEliQ2w3MnVnYWVkYWNmM2ZibjJJWXFFclRwTnlzOUR1UU9jUXlFZVQzeExRMURrYmRkRnUrWUQ3enREejBVb2UvVERreFllQmRibWdrdEpKVXphblNHbHhZT3JpVWFhb0g5aDRzcXhjZHB0cER1c3VnRVVJMEN5UjFacmk5ZUhnYmxONHdkZW5XRWllMThCQTd4Tko0aGwwalhlWEJLQ3I2YkFVbWlFNk5BT2FlZG5ndng3MElmdjB3Wlh2UmVRWHZsdEJUNW8zZ3dWMVYxWEp4ZlZnd21KNXJ0WDUwVkc3RWEyMkFaWGpZdjMwR1FKanhyNXVueVdIWkdKVlU5TVNRbm5FNVB6SkFXS1hSU0EwaHdQZFgrWmxiNU0vWmpiV2xkemdvZ3lvRnFya09zQ1piZDgvNTYzNjJDdGJFNTJLem42MUJxMFpacTJoZXNSdWgwK1NRNE5mT2ZwTTYxOEpWTW5hNHlzaTdPa3JuVkYxWitnc0RReVZ1ZVEyRGVXRVdnYXl1ZzYzd21NVkxiWmxsU0JrSTJIZjJocUJLRVRKc3RNSDNnVGJyV1N5MHM2V3kxdW9PTVlDQ3dSUXJCQXhoWGRROEVuSVhSbHlCeHVZbTkxZzVSRkRLS1FOMzVLWmxZSXNKVmVOcFNHVmtUNWNWV2IzL2pjaEs1bmUvUHhwSVhPNlNzRjRjaFBleEZZakdjQmp0QU5VbHdONll1bDRDc2VnMnhoNkFGWXhpekN3RHRSa2xGTWlRekhoTEtUUkp1T212UFY3Y3MxMWhZakxXUDR3WHdCQjhXYnQ4eStHSVVueHRPeUJXT3daM1BoSXUzNzdPbU8vSjJKSXBZM0JnaHFYQm1zdkdscHFoZ2lTL1ByZHpBYTM5QnJDZThiamxyb0FqT2JETVJGQ0piaUdXRUZ5QmhDK3BuUUo5V0RraU5YMGpiL1U4ZTgzREdRYnFNLzNHZ1l5NjJOWlM1VnQzeDE4OUNJOUFUYzFXbUU3cHphUmlqL3Z0Mm13cENmN0RNTko2OEl4NFFVRUd4dXFvelZDc2FBZyt5TjJPTk1UdWNuMkFKR2lVdnBjRVo0RnlPZ01XNk4yTkgvQlpueFA5WHE3VnFWaU5WWkFKcjBoclFRTTU0SXRTY3RrWFJ3c2JQRkVzb25RcmhmVVIwdGwwRWlMU0N6YVRVWldZUnFOSktRbmpwWlg5UWRZV28wS3dNdmhpbEprRllIZmxDenFWNmErV25jdFN6YkZubG5IbzE2SklhOHc2cjRFcDNITm1zTHF1QlU0NVgrRUZCS0hJQXUwZjBpY29kTW5GeFUvOTJHZFNERDhyU2FoR216NnV1TkJCdWFUems0cFFSM1hEcjhvd2ljNG52Z1VtM1FxaFc1MjZHTjgvYTFDL2g3M1BQZERMSytlKzU0TngxU1g3RGVTZzhjcUlHVmJaWE1EMWhOdXBBU3RwSWJGWDkwL0V6bDUvSHlBYnBRV1lMQTRqTkNyRXc0YzBIQlp1MUVGQmNrZGwwZ1VtUHU1LzU0L1FBa2J5N0VkUFNzK2IvTXIrWUE0U1drT3lsTzBONHlLeUtPbGFnZVB2SThhOTJQSkNQb2RLdGRSRklpY0c0R1Q2N2c4UGh1VEpmK3JzME44QzNlWXJwK3daaVJzbURza0RWVkFPdU5kakFIWDB2UU0weTBIVmlWSjQxZU9neVRTTzhzaEdWVENuY3FtQkZScm5pZWxTemNtSnpUQkxQZHNJOWpNU3hyangwS2dWd2hrZE05V2U3NmxLQk53TW1CeDlXU2x5L1VtYXM3NjJuTG8rcUtXSWFHZUFCUEFXTHNkODc4dEN5OTVuOGgzNVdRWEpCbkZaQ3dQbkRUZzJmNjRkaFkwSGVHOWtXbjkxU3NYNEswVkRBbEJTR2JleWd2VXRvVlVVZDFSQ2JwVnZXTkhTaDYzTmp3TzJQdGdveUdqMTFvVmJPR01HMVVITEhPSFMwZDE5RmtuYlU2MEg4UWRtNFhONFJycVV3aXM1Q3U5NXZQM2RIbEthRWVHK2xBQkpJTWxnMGdIY0l6Z3FUQmJjeFRKd3hGdDJ1d2dmdWx0Z09UQ3o5bHBuRllYMG1hdDJoUVlUbXg2T0NyK25KZ3R2ZGpzMURsOGJBUEdtUjE0OG44Rkg5SEhCN2d1bjcxbll5VmlYanZBeXhKMGJaY29HOEpubi9YVnlyVnh6V1dQazVwU0hUWERYamNoLythY050SEpxSFFlKzBlajl4dXBJY3pRNVovZUpkRVM3eGlKS0gxL0hocHJCMFNGY21aeThoT3pxR0R0NjczSnVzNHNDOXRQQ1N2Ri9ja0p0MnZFTml1bFcwUCtwdEF1MVN2NkRZdWk4c21VZFlvdjNjZzBTZmRDSXNRZUpZdk92OUNxcGNueElSYVdiWjhEZzVBcWxzUzY5MFQ0cW5nMDhkNlhrOWliMC9OR0hrR1Z3VU5CSnU2K0dmbmMwdnFkTXdQRVhVeHp0em5NUjNjb3VQYUFyREVIeUpRVEU1YjZJbTRXaExqSmFWMUpBUWYrNFhna09YK2hYT0doRTExY1FtdE5TNHJNZk84a2NDU3IxUDNCL1VCcUlhUWp0elRsWlVNazRXZTloZGRGMXlhNGVocUZ1RzFVdXl1a0l3U0RwWk0vS3dyRE5KcmNra0xYYkl2Nm4yMmZ3NXdUSWhtd2VKTVdXak9vWUFTZ2xOSitPK3hJdU4wVE9mQXc2Y2dSNW5zSytVd3dSbUtTOGxNZmdOSmMwZG53bk03K3ZzUVpaeFYxQ3VYMnl5YW1ERGlySnArSFRjdElIOHBaZ3BrZkpTV0FuSHZ3U3ZLU0hrYkxLaGtOOFVVZGN2dWgyblgwWE16UVFac1NkSFFVYy93N0YvZ2xGRUdXSHdGM0ZYeHc3MFc5Z29pVWdoM050L2lGSGYyOWJRNSt1Sm82S3FxQ1AwWTdRTjg1NDA3cGs3blg5bC9YUEFQaXVOc3J4TmVtcGt3THFxUEp3MXpYYVpYcDF5ejVMbDlZeE50Qjg4MCt0RjNaekMvRmp3WjRSWTdEOCtoQlcyQWxWSGpBeWFGVkpueFBWOU42c3hXa3BXYUp6a3JXb1Bjd25hdTNrc3pTcHk0MDR6cHFLeldYTzBOdEFSc2FzcDA0T2Z0UTRtaDA3S2cvWS8zVmJiNUwyN05WaXI2Z0lUdkU5dk9CYmZFSzNBcFBVWFRsbjRlTUFrMmNsR2xJY1JLdUE1YjBJZkdPUC9SM0xTWVhvZ1ExZlQ4bnphRUdSNDgvOGlka1Q5NG1wK1oxT2VyRkdqQ1dWMUxQYXZHMHlQaXhEK0F5cDlSUWlmMTNxcTZobGFNS3pZMlRzOWpiNkhDQlVhWmJMVzdXcHVqNWhHemU1c2k3OGc0Uk12SVlPdVRaczZ0VEE1TDI3V3p6Ym5wL25ucHlOVzBic2J5N2l6UE5WaTFqUnZWZEQxVXZkbjhUbXdXU1lud3B6ZkloLzdhUEVrcjBrcURSSnJTWXNKM2I2M1B3a2xWekowT2RlWEdCTEkvcHQyajI2Y3VVZG5DZTZpR0hlLzZad3Z0MU8vRWxmUDJ1VWlDMS9XbnhtdTRoME16RStXNDFWMW1rMDFaQmc2R3UzNWpwRndWS3JJZ1Z3L1lJR0hsNUJscHRlNWEvYnVmN3VaZjRpcmNTNVMvdm1zTE9pRkJuM1V6eGMrVElrUVNPUDlOY0U4RzNuTHVLZHRWUlFZYUJLWnJoQTNCT1dPZnc5eS94RjRXMUJxRnhZQjl6Z1ZVeW51d3hkRHMrT2NkQlI0VjEwdTNEdUc4L2g4SzFBTTM5V1NnRTdoSWp4NktrSTAwbE9NanZMN1RFT2ZzSUhESWlJZGtTaUVsMWdkRVNweWs4bEVLbStxSmVCYWEwNHU1VU13RG5uYWVYVktQRzFXbVlPanBKeWRad1Q2QVIvUFRUT2M3eE5kTXJiSlNjbHdiWXN6RklxK3Z1bmRXVWNoa1N6VzdqcCtNbERMRDNrMjlsSFh6N3RHWVFvMEtLc1ZOVGVzdllyd3NqT09FeklVVEpJdmlPMjhja29OaDNJdjcxa3Y1dGUxRUViNjFiS3lsMzYrUjZVZlVHT3ZLY1BnOS9QeGdlaWljbC9zdWZCeHlQVkVTbUN6RnhDUmtlRFoxL0Nhem55WEhmOXE0TWVudURrcW1BNU1RaUZteTVyalFKazJrcExleEhhTEl0c0ZReE16NXZURU0xQVR2aUFrbkdFSmltV0JHL0U2cUlTVEE4cUNwK05zQUw3SUZpSWtVNXJRNEVlVC8yWFdjQzFCdnZJUHFydFZWN3lNaDN1cXhvVi9ZamEwSk1SQnVRR2E5S1o4cHhaRG1qa1pubmlDZkc5QjNybE9ISXMxcEFGaWxyRWcweDZTM1dpREZZODFDcHZJMTI3NDBVWW9wYXZtWmg3NDN3MUFGenRWN2pzU0prRExEVTdGTk8zeHhaWjBSTjZ3ODhxMmlsdlJjOW11ODdtOU8vOUlhS0VVN1d2UXFBUXArTkU0T0hPZGxmU2grUVZKQm4rY1crUW1HOWlodkFnYlo5b2xCcXhqSWUycWwvTFhySVJOdTRua25tdW1FTExaTUd0aG9QSmFSNkhLdmUrL0lQSlNDc2V6eEQwcHNvbzJjT1BsNmxVNUhsby9oeWxyazFnU1QwR0JSbitqb0FLSTFhaVErTzFaRHphN21aK1R6ZnAvZUtBQWcrRW16UnZCM083TGJPZ0hEbDQ3cHZoTVJJblQ4NEJ6VTJhVFpFV2pMWDQ3UlVmUldPdEU4Y1pwN05hd1lRUVRKT05WVEt6Y3ZJWVU2RTRubkVML09IMmlBejA3RkZWRmkxYnlCQkpveG1GcERkOHZxZDJueVk0NXhMWEN5UmZQZU00akl5c3N2cUovdDV0ZlJyV0VKZEphQUtHd0F0N1BYdUxqdkFWTHY2VUpLTnAzOHhrd24wdys0bW1BQW51Ly9NMm5NMFRweU51TnE5c20xNDRCa1lOKzlvTkpHMXRjOGVTNFg4Q2c3V2IxK0tzaWlidXNSemM1azFXUlU5Q2R2YTFldEhiYVYyOS9IMDEzQUw0MngyOUVvR1U2NWZoeWNLR3FOUGk1VGNTTzJNWEF1QmVwdWZRZTRIVHZqWVhpYXdPK093cDFWSXpIcHpuTk9HRytyQ3RvVFNjajNiTExib0UrTEdQZWs4U1ZuVVdWSmdyaXhiVHpTYm0rQXlIT1BHMHdiV29QU1A4N0d2ZWlIK3ZJK2NOdnU2clZFa2srSjJqSHd2VTJUSTRUb204SzFRRUFpUkEyZFFOZkZ5QlZpMGNhY0FEUUIxQmVveGVVUjRNd1hqYnQyRjBKQ1g4R2ptYnRQeDBFOXhHK21ZNlVHZGRZSzFzTnIzUHJuOTUwUTNFU2w0aldqcU5YbG54VWVTS0szQm9kdEZacTE5TDBDQXlkVVVXMDl5SzdNSW1RK3RSU0lWM3lkNUxJY0pZTWRvYjhvTTFQY0Q4TStwSXgvZmM3QXVQcG5mbnZkMWtRai81dUthYmJjTFNVcUdubXNNT3pqeW5Ga0JaekhoSEVSNnNKV0FjTGRWRWdSSGMwanErUHNFaENQdDJ2VXdkeVA0OVZnTENJc2p2RzF5TkF1cVdTeHk2R0kvOGVXOGxCVXB5UGNIUlFJcXlZcjZzcmdVQ0RqeS9LdHpZRlA4MEFNRkZXb1dTVzBITUJuZ0ZSeFByNmFkSUVEUWxHc0wvK2F3ODQ1cnQ3WFovTGlxWFZYUWt2VHQ3dVY1VEJPMUJ3clpXWEJobEU4ZEpnaXh1NW1VMERYWSt6clhyMlladzVZVm9NTGlFM05XblNHMTJlM214OU8vUUg2NUdIUmY3VHp6WW52dHgxeU0xU1cvdVQ4bmo4RUZKanN1NnloSlR6SEkzb21CclFqcjhQemxpR1dDQXVhVzJvTWpHZnp2bDhJbDdaTEFqTkwzZ3hiWUVoSy9uc2VZTWcyZ2QwMmR3ejA2R0YrN1JCSlJWM1VCUjJvN2tsWDJqaTA4eXNrNkNueUZqNEt6MWgrSWxJS3lDN0JmV25FUmQyUDAyY0YyZE5KNmJFTEhyeHRVb3Q3TVRkNFJZSVhnNGNXUmlUMzk1Ym5nYnpZZnY4WnpkZWR3MExLYXRtL2oyQkkrL3k3TzRaS1NDSkt0dFplZndmbTM1MERWd0w1QUJtcnFWdjh2enp1T3VmSWpSNXlURm9nV1Y4OHRVdytsYzBsdlpSRnBGTnBuekd3UFMwZ052eG8xVE9Kd1ZRei9PVzYyV2Y4ajhUbFRjdzRqR1Y3c0R2d2V5MjdNWDFobzRmdGkzME00dENQT0IrV1NsT3FoVHhDd1dtT2xVazZvQVpVQVBsc2tEeHh4Z3YyZUhFR3g0b05sTWZSd2VRdlVRRDJtejY3aVFIeE9oVUd4QjZ4SFpFb2RqSERldHM2UnhoSThJaEYxS3dSajFnTzNBZms5S0FmcHN1ajE4M1YwenRrSEQxekgvU1dLYzcvM2daZStyTEZOMmdoaGxoL2IvUEtiK21abGswM0tjUHB6Y1FxWWlONTlYSFlaUE14Q2RTWDVoV0loRHZIbUd4UlhBcDhNQ0t5bDZxd1Q4bEQ1eWdSbzkveEM0bkh4eFJtK3pEc3lEdG1pK0djaGR3NWNSQWY2NjlUMGJmVHYxMU85ZkVkUWhBRzB0RGJvT1VXUjRxdVhEdGZDVGxhNXZ6Z0RrRnAybFdEMWlJNnRzUW5FbnNFcExhaXFtcEh0eWVqTnB0ajRqUWJHNXBaZ2tnUkNFcGozaEZiS0h4UGVubWl2MzFVdmlEbklGcjdOTjhoeWpkQyt3TzZXbGkxcGpkdXY2TFc4M3paSkZBdXVtY0s3TlVtTVNRUDNlWlZ5Q1V0SHJFdDlkNUlCSmY0eWpGaUE3ZTZtdnB5UnBSbCtMYW5BY0hLTWp0RXl2Q1BBVEh2UmtxcllmRnNra3RVYmVtUzd2aE5TOXBxZy9yMEpxMUNSZ1hialRmV3ltdXJNSHZldEhNbjFYWm9EclZQNGRWYllVNXdGSExXMmhGM2JzQi9GTFg1V2NnTXZzZnpDRmZVaVhoN2d0YVJ0TlpaV01iNTkyeTVCMXpsRmY4STlWVVNCSWpFcDZCejBFTmpxSWMyN0lKdmtOZklLR25yaGR1VTFOcVdHd1JLUDNTR3djMWRYTlRRekZpOHRzSnRLTnNvR2pNVXFzM3Ewb29hZ2RtdUlIVFdBNjVPbWxMQWRFK0E3TjhLN3FsVlB0eE1tWmIzVE4xc0hQSU1DS1hndy9iTnhOZzFCTGxzditHT3BFKzhzUlFaaWE4czdqZmR0SkpubU1aNlFweGlqSTdsM2I0QUhFaGJiRTBRWDBpVXhIYWZuNDUwVUlxT0xFYTd4eTd1M3o2VG5XaEUrYUhWZXRRVS9nMG1OKzMzZTlqdi9DUnpBUEczbVVGOWJ0a0Q2aHB1KzQxdVd4YkYvcGNSajR0NXgxdjVvbkUyeVJHc1JGWFhZZko5MVo5dlg0Ly9SWk9lcEtydWN0NlY4MVJUa1B4eS8zNGFLcXBsVVAzT1Y5UnFzYXpUYW9hZGNtZ0RvaDFEZUt5dEdPanlwSGhNS0Y2SGt5NDNUdVR1cGdMUXR0VnFtRU1Pd2VhR3ZxcEdCalBWS00rQXJndDNWN1RWU3VhY1JRbnh0ZHdmQm9tMjBkeFVwcnJHZml5Uk5ZZEIrTFVRSXQxNmgxQ0l2NzdUaFBudkpwQzhDQUlaV3ZveEZ0aGJIWkRFVEV2YUlEcEQ2b0JpaUtjT29ZU0RwbmJhemY3c1NZcGQ2MlVJaHYzazh1VVAycW8xOFhLdXBKdCtDNXdQMXM0MU4yVFRmOXVyWDFZVGFOSjFJNWRNellKNEJlUnQwY2xkQnV0MTM1dkVxWlFHZ1ZxdU1OQWdUU1RtUlJlM1puZ1k4ZWJXN25PcFg2emJtaUtXK1dIQWhLVTZxYXVnZFQ3a295VEJvWjRLZlpHSnZONnhabUtmbE9XakVOZ2ZWRU9iU1JMeldWUUpjQTF2QlZnaEM0c254K2l2NGNzdzRPSmlKYWhOME9YU1VrUUUwYzd5Z0dXU2dqWVNDTW5EUHJiMTk2R0dTd0M5c0Z5dXRMMDIwc1F4c0trSnM4Z2JoMlNXcVZqWnY0V0FtdEZ1b0JNQ2Q2eGNaMFZaT1RDRlNXVnZWRmVkR3I4cUtCR3JRT1lIWXhlVDc5bUE3YlRNdTZ2SWZNYVloYkJCWWF6RkhSWERsODBiVjVvc2d2ejhTVitpMHpNODJ2RUhJcE9BaUY1Q3VNZ2ZyWnhUTm9iLzRCc3lCZVZKSG1LREVqcFFaNkZBNFdiRFhVUUFzTzg3bjAvNGg5ajVPSzRlUXNBMlFac09BZjhnd3d5blRPUWN1RGxieVREb21WdEVnL3VuQTQ4WCt6ZW8wVmpzQnl1ZjBTWnRDUksxcDVRYjAyRUROek5QZFFndVp3elk3Nm5yVE9TdnEvbUY1V2dIcG9jZmpOMU9DdmdRYXVJeDJ0THI2Z1NQOG02N054cjFJR2ZGNTUvK0tDM0lCL2drSmQxbTVqUFh5SWIxWjB1aGtNUjhkeXFReWg5VXN1SjF6OFhTeE1EbWVkZytXdFhCR0pWMitwZGdlbDkwTWdIWXlLTnh5aHFBbkQvUjdialZEVHZ4K3prQ29BdENqYlR5ZEpGallnellmU1BFUVNhVzVkRnpZbkYvU0NSRXk0VlhOVEJZVWZGNTJyZW1wMjZqYVZkZ2lwWk5KVEdKOE91WUlNOXZlc2VraUoxQnMxV1lBMUgxSDZva1puMkN0UjJ1bWdoMzFiakF1N0hvTmY4MDNTWW1ILzZPRVFMMG9tb0tRb0xPeHJIZ0VoMjRNY0h4Y0p4eFI3eUJoZXRnNHBSTEJ1OGQrYVdNQkUxQ1RoeFkvTmwydUx5SFdxQ3QwWEE2dzczWDVUeUV2OWdKOE4yZysyOVNITmZlaEI2T1lPcWx1YW5wd2thYWFOR0xmbDZQb0ZKWGhWOUxLVG02Q2syZ1RrZ0gzZ0M1Y0duRGVtNFhFR2t6STl0YzlQenlPalJTRG1mZ0d4N1B1ZldCeEJ0dlc4MkJ1ZmwrMHNwTDRnelRKU3ZrcGNUOU12Q3FjbGdleW9CVm43L0xZYkNGRExKWDZ3U01LdXZObWNPRE9MVkxzUXE2akZPbkQ1a1Q3Rlo5TlpOOGJySXZibHMzU1A1QXN6Zko3cHdnSjZpL2dBSm1zcmY3ZGxLWmNFKzBOby9pMDVwQ2R2Qk9QWFVzNzJubTNyaFI5Z2xNRlFoMitqU2pnQm9tWGNLWWdlMnpzYzc4bS9aM2dWRWFWdUM5YnpvbTRzLzZQdUFwaG5sYy9wanZkeDh5aTJERUh5UWVORlVVRXVjTlFpNmV5dkVnVlFyeXI0V1FDeWNzQnhGYlg0V000N2pGVHJBRGpnL0MxWHY2VzBGTjhHNE5ORVFYNEVJSEd5aWR1UDBDSm1wVFliMzlUbGx2SnptSTFFelVScFVheUNNM1VhNEdqeDBqbnd4QzBaSDkyalZHd203YmNHRm5LbjNiQ1BkSUY0TzdKeHp5dWwxV2ZXMHZlNXQxb1JPRE1DS2dxTlY3empyUy9QZzRHMTNEN1M1T2xhQkJoNXhrRElEcDRSVG9yRmxiUnAvSXBmS3hGRE95WXp0czgvdmN2RCtnc2M5RUFCSlJGK0tRWTJOd1FrZS9KMEdRREtMVDVaOVc4UHprY3d0cnN3dmRESlR1c01DTVZWbzNjcDltemNydFJtZmFiZjhVNEplTituNDdEelA1a1hYL2sxYXNkKzJJR0gxWURPa0FQR3Qzb3ZaRjBKYnJWK1RPeUE3VGVHeE90ekp0K1FXSXNFdS93Qk16YzFKTzAvNitiZXVUTnRBVU5PVlNpWSsvb2ZlK2RIZlIrS2RxTTROZmJodFF3clNteWtYUXg4KytrSCs3amoyMWZXSC9XUW83bFlSbTNQYzR2T1RSU216TExkVEJxTU1NY21UbmdiZFhTZSszelU2L3hNa2ZQUnNkTHk0WUFzalZ1WDhOdWhPWjJKS29pRzR4VjZqbkdLT3BGbXhnUjI2ZEhleTdyeUR2Skk1Zy9Td3NvVElVRkdOTDY4TkcxVkVSYXF5OEU4d0pBc0t0dkp1ekM0dW1RNkdYblVBaGEzdXNjeEV2cndpSmdOejRIeFpJQnRFNTJBRVpCR0J0YitPY1FoMkRLVDZMWTk3dVJuVEVPOEpiczJzaGMxQ3djQXZ0bFZQY2lNSWF6SSsxanExbHQ2Y2lmdUVldFVpbmJhL05YZ3daR1ZzLzFmb0g3ckZvS0R3eU1RRGdxT0ZEMk9pUHZGR0QrYXh0Nzgvc09sNE5TWTdqZnlQTkU1VDd3ZFhWSEZHZFBDa0hUbTNKNlVjcFZST293M3lLbjFDZDRUWUFGR3pFaU5pTW5OS2t0VG9VM3cvcXpud3FtaTVVaEkxS1FLQzBGZlQwN096RlVkbkF6cnhkcVdOZUs0dlZIVXptU09zUXV2NjFsaTArWjhlcEFXc3VaL1NaU1hVVWR5dnZaT3hqamowVkduWFZsQ3E4MFNlbkxPTTh5dU81OXNZd080d2laWW91aVRlZ0lZbTdiTis4Y3NISW4ycVJmZTFQODNVNjExTTUzK2VSbEEyeFVQOTJaaG0vMmEzV1JVV1ppRU5GSHNjVnluNEppNnVPWEpFcE9EaU9MekVoVFd2dy9rN2NwYkxIUFlXbDV1Wi9ibGUreExFVk82bDdBUlVDSDY1cDJnOVNha3NHM3RRTTAzWHAzdG9LSFFlUTk4NWh6ZVJWTG9Wck0vTThhOHNuazkzMmloeWY2UWhzV0RhOXhzRFpyajdObHNwSWp1U1VzbFZWcjFDN01kMFFTaitXTW5ML3lnOTV4Wmd5SFFhbGZEK2ltSlhybHVEUDY4V1ZkRnA0Q0ROTDdWZk9WRG1NNEMyL0hoTDQwV1gvRTBvNDZDQ200cHU3c2VKblJadGlBTU9Ma1hJTUQ1L2pxT2pSY2I2WFZCRHQ1U1dVK1lvUXdKYTR2czk4UTdUbWxQRC9WYVR4UVhQTlBKdSttMnNob2ZDTzVIYlZxZEVOUGkxRXlRQ1kxcktZSjlSZ3VGM1VWbjdlYXNDNFoyenlsdkVaR0pVSHVTenNMdU9GL3JYUExXUFd0QjR5cGFCNkx5VU5pZHV1Ujc5MTBhQWhxdDAzUitJWkJzMUhHUEtIUzlLeEhMQ0R2cDY4L0NjQzdXVXZzYmpwUXpwL2hBODhuMENhSTJJektlWnl1RHZOcm9hU2ErZmtISS9XN2N4elF4dFV3STU5YU11MnhQeW9mOWoxRnp4clJnZ0lBWTZRbTB5NWFXU1FGNDBVUG55Z2R3ajQvU3dyZGtqcVBoL3VEbk03dDZlRU9SbkRkbi9DVTBUQ0U4RFZKbTV0K1RzaUEwTmhuZVJjTmM1WDFoTW1HS25pdlh3bUlXQVdNZk1FczZVa28xTDBiV3loWUoxNHlycmpvbGRSVlh5TG5VVFBpeHdrUzFTVmxNV0hvd2tVTnFrUFU4Ymh6VzN0VDQvY3d3YVk5dEkwdHZORVhXMitTWkdHeGRZd0Y3TjN1ZElQcFhjczBWclp2R2lUaS83UlBVd2hGcmRRdm5rZ3JtQytUUkhoN2k5eVpXOTl3aDlSZ1FuOEF3NEY4UmJNNWtvd0J0VW5NaGYxYkpjQ2hTNjFrR1BDZUZOU2FGSG9SSVBFUlJ3c0NxTmlpQ1lGOW1DbW9sQzg2THVVN3VOc09tR1k1OFozaU5OajN5UzRydGlCMU92dVNrMC92VDViTmsyYnhWVytMMHBZWldaMUM2L1NhZ0RFNWJnSnFEVlJhYmNtMEVHaTVqRlV3TmNRNlREQ1pKVDc3L3BudFMwb0JEczkrd3EwbUJTeENYOVgrQzhNdDcvZXgzd1RxMlBHUjAzdXlqdmMvNmV6a0lYR0gwMUlhRDR2V2JRci9iQzhhd3VMQTdRVG5VcXBjaWFOWVRvdnhDOGZYdCtsWFdlVllkR2JiVlcvNEtmSFpHK2dJL3Z3aDJ4bmNwN2Rxby96aVBVekVNT3VoeXBZOUNwMElSNkpMalVETW9KdHdKZTBGa1ZHV3hiM010NFdPL1pDQXZSc21HdDk5a0tJdVB0cnUzTU9abmQzQVUzcVJTb3JoVlV0Y05nL0s1MVVxSWgyZjI4QTk1d05Tb05lRUZIZ20zNXZ1Vjg1UStUejEzR0JRbm9sUVU2dDFubHRxMHU1S085YWR4TnA1Lzg1Z1NMZ2FBLzdnS1BnckRCdjNvK2k1a1U5RmU0MGdLWGlycEozZ1NkMHBjTm5MTUp2ZmQzdXlqUmtRQjNWUGJ5SmtyWVpaVU81OG9EVGZuU1g2VDJBVE9pam9JTWNyMXRMdjh1NmVEcFhNbGhoM2FwQVE1QmF2RjZGRmw3bnBXRDZVQkRCemYyYXhxZnRRTGdHWS8ycWk3aDdFUmZjWm5CZkxZU3phL2JjZXVPcmt0b0tONTFhODYxa2VZQlRvczJUY1hHdVdWNEtoMEtYUW1HVG4ydWp3ajlwSXRYWjg2RUp0c1N0aWNGenh5MXRKY244cDUwQTZHYVNSYW9ZTklOdEJ4Z0kwdE00TFpNc2RiWi9xb3h3YXJIbVhQai8wb1loTU5ESEltQ2VHL1QycEQ2MUJVbENXYVdmYjc4aW93eVAxYVdaNlZXbWtlb1B0VEdtb1I0MW1WNGJnT01oU2JVRlkrZkdDbUFYVEVuSzRic0FEUXN6N2Y2TDZ5SUNmYjFDUUJra0pKd21LTnJ2bkdTblpJRUUwNTRhTEo2OXN4dElEL24xZlFkQWg3SUJKZmlvWWZCUjlER21sc0dCYktTaDNTQ2g2WUVvb3lmOTlYWUNDTW9oeDlwanRTWXMzSkI2S3hLSWlvUTgxWm4ybXFjQ1puc25YamJjR0ZPdWRXcC9KOUMzZ0l5TjVmbW5zMWNsemhUUlU1MHhGdVVnbzdUeVc4UDRFb2l2OXhlL1gwZFRGZE52WDJHL0JXbUo2NnE2WkV2YnJKR1ZyWkkxcnAyNHh3Q3R0Ri9MbHZ3VkJkdUtTV0ZDSzNJUUMrL2ZRU3pzd2FITURuRjRvcllmVFpBM1BUZTRtTG8wVWluN0lFV0JoODYwRE5kKzVtR2M2WXNGbllaaG5iT25TV2VYUEZDbEVvUzFBTVc1K0ZKTWdSbmt5d2padkhWVmlUWDhuaHdpanVZd0R5bjdQeW5kVUVDUWFpL0FjY3cvb2w5OC9zeHA4bGZQQ291MkdGS2JpVVFQZVRhUVA4bU1kTHdjYXVlaGJ1Tng3RlJPRkRQNVp4NmlGWmZ4bkIvUDZNMTFBYkMxNDdEeHhGL3JmbFQ5Ylk3eFp3VWE3MVVNNXgxSnZ3ZTFkT3BMU25pUTRZSjNrSW5VUXNwQ0hVQm84bGNXdThNbTRMZU1lMk44OFZNU1B2Qy9PYk1oaFpwUjdIMnBqM280UTZGUGVPbEdWelpJelFSYzNNaDBOM3Rkdy9rdXhRQjBGRG5OZUlIQTZ3czFmVVIxZU9LWmR5QXh3MENxTFNIb0YrejJjbFU1UlJ1OFYzMUdOdEhGQWNmdUZ0YUF3TFdYeWVlZHQ3UmE5ZnVST05hMFZ2Y1NRSUc3bi9QMDNxWitUMDUwelUyazBLQnY4SXBJRndTWHg0Q2tVbU53TmZ3QlBIbmJMckkrNzVWQTR3WDZYcFBiVTFjQWcrUGUvNTE2VHRwZnI1Y3hlOWlmZkFVaG90bjdWQTNPcVhpdGk2TXJXVE54ZWNPNlhVUWRBa29sWEpBSlNBTnhYMnNiUDgwZVZsa0lIZERESmxVdGg2KzhKdVhuTXJsM2ZnZnhOWUdnU1diMDkxYk1NUDRwMVN6WHBNaEVpVy9mZTdQS0JvMEpaczJNUHlBdzRkU1dFYWVzQ2lMd2MyWG9FNS9CdG5MMmpFUXJuTDhzNXBrdmk0K3V6QlJEcXZDNG1ZSmgyeDI5b2FQRzlobDREbThqVlBsaWtuOUNPMzI0TU90ME1aUTNlWjZpcC85SHJFWFNxL0MvZmNJT1U0Y2ROUFhHdWVxbVJzS2pkdjFzM2JkTzFZWFFqcmcxUjZDb3k1V2tlM2Fuc1o5bWlBRHU1Y214MWU4TWliTHorOTBBOW8xbSt1ZUpTNGpnQWd6blRBQkpqOTlaZGRJb2F2Z002UkYxblJxZC9CVVNMWFVVK0c5UGc3SUJ3ZzBVbmxXdDZOZHlJNmdqVHgrYWlNM3p1UHFvVll5cEs5SjcwYmdhL3Z3NmNCUURoekFnaVFNOVV1RU1wN3Mzd0xCRWlPeFAxVFgyUWNtNklYNXBudHAyZmF1MEtvcWVPY1VsSG8vWXRtMEZNcFlJSURGL29jOHptUjE5NVg4Mk1IWEtCMnoxWEEzUzVCZGVpQWdJNG5UODBkQk0yTnVwY3B5OUhOT2Z5LzdDUTlDanF1ZE1yUjZmcW4rbklld2EydTNWWnZqbUF2cUJkVlJOT3RabUk2bGpBMmljd2F1SXhBZWlFNDJDYjdSTWpXdE1RR0JUUDN4dE8yamdyT0RpU1E3aDZQMFpZTmJvSlhnbFo4Y2hWK3oveTkybUJOQkNycGxqUVYzVGhwZjJ2RDJLQk5UamgweGgrWnoxSFdYZnNEdU1GaEJ6RHBrS21IZ2hGemVPb1JBRk4vbDFJR0V2SExPYW5RUE8rd29yV2R5NFVYRGtUelpOdGtpOUtmblNoNjhqZWJHTHZlTzl1K3pQK0wxUDd1djk5OVlzUXFKbEZYTWFsY0pmdzROeE9YT0FRdk9jYjFjcHBEMVFhOHM1T3AxMHdUbjZsdmpWY1YveW9XT3B3c3BqVDZ0UmxtbTRsUDFjbzErcURXV09kRU5QekpnMFhmaXZrUUhybG9TQ1I0MmY4TzdSWTRRa01oNmJBaktvVFEraVVBRmtxb3Zvc0JkRDJrZmF5QzJ3TWZPSGNJWnM5WWNKSE9Ib2E4T1RwZlgrZUFpUE9EZFZ4QjZKRFRHUFNyaXZmT1JjdUt2M3dUNzdBZDNxeTl2bytabGpvcWVKNTE4NHZ5cFR6SVE2dXRZTCtvRm1wWnRpN3VZMVM2Q1VLMmVyOHN3ME9DYWF0TE5FVXBzREQyZy8xSmUrZlNOdHl0eWhsVndweWpGVTByVFNVZ0Y5a2ZuL0NQNnVFclNvQTR5SGxaVlpIeWJPQS9QYmw0Vkt0SGpVcW95aGxyQmMzbWhBNHVSandJT0RHLzlFZnVFTzd0OXRUb1VnT0hZODEzVEI2b0F2NDVQaUhlbWU5L0FUOVIxelAxN3g5VVpzZEpxNlBKQnQrYVpXNnpnc1IvNVpWNXRQL1dWK3ZJZzBOTTIxZ0dnb01URlFYZGFJQmJ6MmZJNkxsY0gvdjBGUzZGODBNM1Q2Y2dQQ2NON0RTcFhWMjM1Z1Q0Z0tTNHdwdFU3S0dWVzFRRnZDQ2pZZWcxYVBrSzFwa0c1SnpSb3V1WWR1aWtRZzFzUWxlSDVsVkdoMVQ2bytWWVZVVDRIcm05RTFNYUxYajlweHYxZEdHaEs4OTRMUk1aVm9vdzBTeEdDdVNNaGhvN1RST3puUmNGT2FBRFQ5RzNwTE1oc1JGeml6c20vQkxHTnkxbHRoeklEbmRSTFY2TmZTajRKYlZLc2RkZDM4L1ZDL0hQVkpaTklBcUM1SGh0U1V0Q2pWSnlISno4elBBTnVkWDNWU2FQcmp4ZjhuU0VVNHJISm9TVjZuTlBaSDFvZ2MwTVBGbmVreVFlVmhic2FicGw3c0VqR2FUdWZyUHM4UEVGVzFQc2N1OVJGR1NzaE1JR1pjRXdRMVlMcENCUVByN1hUME9vZE1ZTFZZek5XdmtFd3RHM0UzbmZncDFRNG1zS0src2I5aHc5UUJPUGNGYnhEUWpzUGRVRitFVnpaUUpiRWxYeGZudGNMaklSSllKMkl2WFNMZWdVWXRnNmtETVBqRkpzalZzUERibVlzL3hkSUcra1BmNWU3Tk83QjNoaUZObXhoSkh3KzAyMUE4U0x5aEoxTEtXSWlTVjM1L0s2VGxRUStyT2MwcDgxcXpjTCt2ZUw5WmZsYVNLeW1yMW5IeEZoZTFHaHA4Q2FVNFg3dTEzS2UzdC9yK1UxQmM5NzlETFIrRjNROS91SGM2VHZ1bld3UXNXZUtEMkt2QXMzVW82ZUpVcndOSTFBUXhBVy82L3lFNHRXT1gwMW5hcm1iSXFjSGU3YzY2dGh0TWloV3Z6a1djNytGUThIVjdHNGw3K1RGbXVQSHRCYTVBQmt3QW5ac1p0S2Y3NEtPUnpvSEgzWlFnZjJqSGVPaXQxMUNzbTJOUzBVMlZjbUlVSmJJaEJZdGQ2S3Y4ZDdOeDRUeUNvakwrcWFIWGpId3JIeU9MeDErdFA0RWxXbDRLdzQraXBiRzdUVk1rd2RJQnVhSldiYVVNNDZWQ2Y5ZzBvNVFiMVhwVWFTbFhyRUxnRVQwQU5mMFVJeEF3b1JhQVdTS1pidklKdkxkQjlaOGxRanh3UjEzcUorOEpDeWpSV1orS3JzTU5UT0pnN0E2QWY0clQ1akJTK0hnSE9zdW1ydENJcko1Q0I1K1JKMlMwMUtZVjNkdmFLc21UZ0hvQkdoMERpTkZIUkhmZll5bGVqN3lPTDdXdThyR1A2WW9ac2FNU2R1V043UHJzdUpQSGdUSitRclNwNXEzMTVZMHBDUVlsNGRlOWJ0VkxjQTBESWMySytuWDEvZWg0d1ZnZHlkWU9JZVE3eVRlbUtENVpRTmhySHUrbFlNNDZDTmhSVWw3Slllb2lFKzRsRWRPOG1HcEwxVEdjR3pKMThMWG8wbzJJb2hGS0wrUHlKbFJkNC9hSXgzUGtSUDYwVDVLVUoxdXlVMXZXbzR4aGRZWFZhcEFMbEJJWWt1WUpEaU1yS1d5eWJRZHFKMTl5YkR5MitlZS9mVzBPYTRZYkdLT3Exa0NFODVCYm5VVmluNlAydGw3VHgxSHBRbW9iNi91Ymw4aFE1dVYxK3gyeGpHeVB4b0ErSnMxWGhJS0M5SFZTRTAwMTlmU0xRUzV1Zmo5OFJVWVlxQUN2Y0N2azRyZVNObTdYNWwxTW55ZVNEdG4vSFhHdWU1Nnhta3A5SXo2U295RDI1Zm5pR0xEL0ZZa1dCa1JvZkc2dU41dHFWbHpRWjgwR29Qck5JODJLT0s0aXoya3hQR2kyM2pvZUxqVUdnVGZlenFkRWttS1hFY3pjaURBYmRtUGVxTnNaenZxbWZJZlhiUWxTK1h5Qk1rR0N2TWU5WWNHNG1LRnlSQnlXNUYvbHF1cDNyMGZob3dXSzZYR3p2YmlDUzJNYW1wZmpJdjV2SmpTK3dHd2FaMDExeFpxZE5sbFVMUGd4QmtCT085Q0Q2b1M0NVJmcFV1cmp4UnhINzhsSHBvTk5ZLytUMVZlQlNvMDZuSHJ1WENPUktJdE1YNkg1YkpaYlhXWjl5T0VWYkc1V0hXK2d5SGtwdEk0QlRsTThmYk94SkRYTGxRTm4wd1lReEJvbThHcGlXS0NWNVU0VmNMWitFb0c3YjJzRFd5dG1vQnFIT0NEWVNKd2svWWR0cDBYd2liUVVOMXpTeTRZWGdmRHRwN0JIcFNXb1I1THpDY1pabzlLVlFFTTlvTEFvR0krU3EwaHZhMGJ5V0xWWmpBOWdpa1pHa0gwMjVOZkw1Z1c3N0RiWTZpSGRvMk8vZzlCSVk4L296bVZyeHJMSnVaSnBvNnlIUzJreVlMY1o5WG5hcnpNcE8zWkFZelFBanlEdTFUeis0czJaR1VWekJaRjZTQm1RSnhaNjRMdTJibUZNMnNlNlE5eklScDBLNG1iNUJLWXFKZHFlSEhhYWhRMFRyWnFyNXpiTVR3T2VvbUZRTWg2R2VhQlF6bjVFck1PUEpYL1B0WDhvVWhGQXZQNU9abHdab3d4b296U2d4OGp3NFZSbFJSWkRISjBTdUdVeEFGZlI0cjdZekM1emdwaVUra2E3UFd6L1JyRmEyWi9zWGRRZTBZZWVVMFgvTVNBVHo3dlJ6MEtGaDNLdG5HM1JKaDUrbFpsTldBSlNWOGo5SExQc053RzZrdUNVTjNwUCtISThQWVFKWjArVWVoV2dzeTI2S3UrTVBuV0tZRjF6YWd1dTM3SE50SWFEd1RSUUowdnNLcTNPRVRNSTluWmZSUUptbjBKcDhBWEE4d0IwOHhuV3FxMFgwKytFdjBiWlRPZjBXVFZ2aFJpZERkbEVzclM1V2ZxakF6TUd0U2h6VWd3c3NPQ0E0L0RsNUlPM2VlczNnTU1aUHgxZU9aVWpNQWJXZ3NGRHR5amNlVk9mL0VyNE9iWkpjNWsxRDNaUmMrS3lJZFp2bCtVOWx4OHpBMmlYTUZjWExMaTlYdVVuY1h3MHRVNU85RStUMHlxaWtHcEp3RlRUTW1qUUJuc3pJL1BMSHNhM3FPSWVCSExzWUJlZVkxTlNuZmI4cTd3cVFNUFF3NDBmdHJEV3pnUTZpV1lPRjMrU0k3L1pmUFRXOEdXVDlxWTl0V2R5aVRkMDRnRmJQemtwWDdQN0VSdU9Vczdpb1FRZ3lpTDcyeXBlb0E2MWZvN1R6c1FDd1E4eHVWT1o1bXFtWnIvYjBhbVNEVkdNTmFZK0gvTjZ2dWF0SnhCbXNOVkFKaTVDMm9OMTNoTWE1MFlNVlg4ZnFoajlKRTZUcFp4SGF1U0p0ZU16aHVmbXNlU0tzbDJ5cjlOZVJGRFJXcDlPRnhkalkrRU5jSUtNTXorTWViMnF2RFJYbmxtS3NFcHdFUDZmdUdnV0ZxWWhwbVp5LzRvbXdPQU5kQktabWVkN09HRTZvUGE1UG8xZVhyWmZ5UFpjWVpna1dsZW51UnJpamp5U0d4bjl3bGRrRnJRcFphWjdOejc0S25SQ2pETm5yTGo2ZEdvL1dtUE5KeFVwcFBDV3FrNFBIejFmN0JLMUlxZlZPRGFPWEdvT2xkbmFlV2NwSEczYkRvaDlDbVY3c1NOclRaN2gvaEN4bVBObmRpT3hhWTdVSDRqYUl4ckM1R3dQQ0ZRZnpEcVE2dnVkbTN0TDQ0Q1dhTGt4QjJtMTl1bnRLTzEyZHBISkxtc0FicEZNZ0I1L0xSYUN2ODh6SlI1WktCZXZZRXQzSjZiOHprZVVUdWRpRGtUOUpnK3hZMk1PWnE4ajBZVGthbWQxMmpMWktYYkYydkIrUHVCZVJCOWlJeFQ0NDcwRENpQTlSUzExeENxNDF0eVQ5aFAxZUw3aGE4MXU5TzgveS9Fai9KeThrU3phN205R1dVREVDbmxCejJhcy9MNGxnYWQvWlZvTEtVdUpWTURjY2piUlZKVHliM3BhWHRKN0cxYjRKd0liZUhqOERPRnlvekRjL0h0RVp1eDJWWmhYbzVXOW93TXl4UFpsSFFOOE9DZGVBRXdOQ3VGOURUWE9CVzhnVzU5elNZcU1uZnFPcEpwcHVMeWNQRzVTSE9aTEIrOVpwRlVnMk9YVjRnNVZUaUlqT25BakFpSHM4UzEzS1RJUFNHMS9NOFZkRDBhME5zR0hGYmhGKzNoVUtHL1EwN1VOM3p5WWdlM2FWU0Z0U21nODBWeW5pRldSUXhqSXBDUWtta1MrNUIzT3dheldaRTJoYTdmVldZNEtkb3RLMXVjNTZ5RlFnVG5BdTc0dC9qMkxjdW9ZeW9JblBOaElZdVNEV1B4aVg1ZjE1ZmlJYVhQL2hEUGxpUlhhSGJ6QmhFT3V1eVpmV0M4OTNseSttaTYyc2h0aEUzQjZJUWhTbFZiS2tsUDMvNzJycXRRY2dZcEZoZHpnK1NsbVZCVjBObExiclQ2WXo1bzczeGtkdkg4K283eURac0R2TkJyWWhxblAyOVIzNnhQLzEway80VFFBcEZDOHppOFhFS21LQ2RnNjlSR2lpeEhIVEFJYmh1bmpXYmVPdTlPUTZIQk43dXVZSGV0WWhJRFhRK1hqZnUrd1lraENmUllaOUVoQ0hoVTAyU05yL2h0MEI0OW9VZFkzR0RsTG5pQzJxR2N2K3VYQmZRMEhDbnI1Mi8ydk0vSWJCR3hCVWVzMTBLc2VtRnFiRnRhR2JUa01hUzE3Q0k2ZEhHVkU1dm9XMUNSQjB0L1p0eEFxNUtwZCswVGRLTTdhYWE2WE80S0VhM0pwbVE5R1RyZmpjZXd5K09XbkR5NlBqM2lTMndUYVlNeWJEQlYrMVVCR2J2bzJRU0R0blVkdjN1ZHc4WENpNjVmT3lORGswZWtGQkxZTlZScXhwbjBRNEsrVE9oUGZCQ3J1ZjhZUVZoRm5yNmZ4NnBJYmJkNUFuNDc2NEVGNEpINWF3VmIyK1V3TWJDSXNKRUt5MGExQm53eXRpdC80TmpXQ2Q5MDAyQXpFeG5na3ZmMWJVWXZFcFFabG5taFNoQzBuZmpWd0Vuai9TRmF0ZG5qK2JXZDRjM05PdWhkRk4wR0E5STYrVXJJakhTZFcwUUF1MnREV0tmQVhIZk9qaFUyWkxaTGlQZFUwb3htR0l2ckdrQ0NOTjk4bEhQeXpRYjJZK2syQjFOTGp1VGlpOGIrajhhYy93K0grMVNHN2Q3b3EzRG9QYXViSVFZSFczQTI0K3dRM1hjdmt0WERadXIrUGRoUDlYUE5zdFlLTkJLMHRxdVZPNTdjcnBzUmNTNTFSRUVkYVpDSTRwLzFLdk1pcXgxNTdGMVNGNlpNeDJsUldmOURHTUk0TzByamdWMzVoeFlxNk1vVXd4TEsrenBhMnhLMnZuYjNrcVNtVXIrdGdsSENOL1dTNHpKMUxwc2Z0dGttMWIyR1RFbDl6ZGtTYjJJeXNsVGVFQ21EYVA0MGozV2pvNmszZVNjNUVXWmZkOWN5MzgvR3p1WVovTmtISFJndFIzLzhSWnp6N1lkYktUNzJoOW1icVpaNVE3aXQxVDdya2haNkRlN3JiS2pPaUQzMUZqUmhPRENPTE0xN0RVQ3ErWm5QS1p2RzNYZ0ZCUjZXV3ZpRVlxd3pOVWtwMnhIN2hyRzBCU0FXZWM2SW9MOTBxRS9jQ2Ryd0syWlZoT3crMFR6VFFSZkpoVzh2bjRCK2poN0NGZk5mVHEzSGk5RmhWZ3VKcjJkeGlya3U2QWZpbWlWM1ovRFdpMnJXb08zek82WnNRU3pja1gwZ1JWZ2F2eUlhdFpmeHg4OEk3WmVtRDBtNllkUmo4YitqQkV6N1RNb1c4Y291NWRVbStjeTNNYVowSC9WRXR6SHExTCtQdHdIRjhvOG1RQmFnMGwzSzhJWmtXSS84NlgwU0ZBcmdnTlRUV0x3RTFZL0d3Q3I4dzM0VFZpL2VPRUJhVGlVR3pUVldCUkVnNHV3OVRCMENHZkhvRXg0Mk9PdFJ3WW1oMVdDU210V1pkNWV3TW9FMWxjcVJqRERLNlBaeFQ5Y1FCRGI1WlFPeUFhQ3ZXNUV3NGxnS25uZFJmWnJ5MGFtVzE4RzJkaVJYZHZJdUhEbk1ScSt0VTNjQXZBa0E2cVBrUDZGbXZneGgyVEhTWDdhdlFtRDVZYnJ2VnRCOEcrWEVWSjNrWVpXbU81YXRBSzRmdWVVUEZLalZRdjlkNnlaeXk5cVVIS1JhOWVRUE1tZWJIeDVkOTNWMGZYZ0xZQm1uTWdoVEJYOTd3MXZFSnQwTjUzQW1Sd2tCWXgzS21raTFoeExhY2NnckhWd0RtdEcrQ3Z6MnVCTDkrMnp4UDRtTDhPQ1YxWDRDYnhUQmVKSk54Wm9tbXdYQkM4NEFQYVJ4SEFxZ0MyU0dqQVdaSXdHLzVlbHUvemF2a2xhVEJqcXptZk1JNSt3VkZ1b2U2UDBORFFrQmVWQVM4MVJRQXlMS0luTmI4ZlozMWZ2V09WN3VaNm5SWHdJVnRuL1JISFRHbDhSNlFld0tCKzd0RXliTUY1Vmg4bzlidDdKSmpOSFkzbXI3ZGhzd1VNNllxL0I2Q2NHdHYrdU1MY0UwelJlSHlYaURiZ3VoelFOajIydlN4SzU5OEMwVjBQcjJrdUhjVFJ3U1FMQk0xRXFqcmNVdGM0ZXRUa0UvMllsa3hLZlFSUmhYRHRDMFQ4L0diNzdoWUdRbzRNa0phbndJbXZoNVlTb1hZYWZCeWFrQ1JhN0RvM25HR3NteSs5T0tkcldDZWZXdzF5eXBXQ0FieW9KQUhZOFpNTXh5ZEtOaG5DV2E1NStDSW1UcHErRzAydXlMa1hueEpGNlRLUE4wYUFOUEE1ZXZMaFZFQ09la3UvME9PK3NER0FKcXZFbzFvQlh4endqbytTNGJHTzRLZU5LQVFlV1oxaml1aGY4YmMxank1aFJzWFU1LzNxdzd3OXdMcjV6L09GMWxhcDMvSGtWckRYOXJVZWxnem95WGloeVZOVVJqeHNyNkYrZXBNaGpUb3RHRHo3ZjlHck9nckxSSWEzL0Iyd1Y1blZFQW1PMDlRQ2g5emxzWXB4Zm5LQUc3NGJwVm1jSklLNXcrbk1kTUpLSnFaM0RLa25EUGVBcWVnV2NaclBzTW1EdHEzQ3QzUmptK2hqNk5TVDVyKzZ5Y3pmaXBkMVBlZVBSbXlqVEdISE81VVRWcmV5MGk2NWpKbnphNzFBelBod292aEFUV21vUWVROTRuM3ZGNDBRYVJVdS96YnM1YnJ0L3R5RURBeUlJQlFkTG5Mbzl4S1BJT1VvMzNqajlZV1lqNE5INjA4RHhjQUpsbVYwUzMrRmo2b0hYeldPWFlYWXJuaGVtQjB6WkJUaUw2UExhSW9UYnRwNzVEa3dWK1M2QmZ3dHFEM3JVR2dYekZoNTNudVpqRlQ2S2xRT3dhRVlBQ0M5bTNzNGU3MGtSdk1aQWRud2FVYVcxT1RQcnliTWpOaWhrSUlGVk5TdHRPdmlaaDlHS01PWFRVdWJjMnJXSzVQOUFGM2FkUEJ4RGhRTXZad3NSakZTV3cwYzIvaHVKRTdxOGNUcEFkaDRrZEtaZDhVbHljT0J6TWd2bUpEMmFpUXZUenBCbSs1MnNuMUNMQXRGYVZEWk9vWGl0eHk0Szg4b0hKWFBqUmZNemRCdUliT2kyUThrTkN0TjlGenFCM283WjgzVGUwemFrcFpxQVpmNEhTdXJJVDVyL2tjS1hhNXhCK1FPd3NBeFkwbkJyTGY5dG9xRnBFR2c0OTJxUXNUaktwRGFTUTJPS2J6YjRHYUJqVjFWcC9oaVNsdGFqNFFCcitTVGlqV01YdzJaellrd0RFOEFqa1JIb2hpV2tPV1c4dTczNzlFYmlpUGJkSnBqMGdZZkRNOWJSZ0dyTlkrY2JZMDE0eEY3Nlc2WEU2am00Q2NuVVNWQVdqSUxCUEJmV2xVekV3NU9qSG9DdXdkbGZVWUc0dEx4WGVhMzVYakdBUFVHSzNhYjNDYnBFcmIzMStidkwySDJaWUp2R0c3OWdJazlobUhKSWRaS1JjTkdJanJVSzY4YkxGSXAvaHQ3N2dia2pZZ2JBRTFEQlI1VWpvSnB5QjQ3RjBwTXBCb3BHN0hEcnQvRzVLSHZncGo5c2gzbk9za0JZMDNqbDJHWTBqRXc4WDRPUUd0N3Vld2kvWGRka3BudlV6WmJ1MDVMVGNjWTI1VGRRMEhuSEkzamhVOWh5aVg1UXJWT0hnaEJ0dTVSYVhvb0VFTnlCSVNZakZYcWtMd1lVaVdqMWFMMTY2M1VqVnNXTldMbXdHVDg2cmZDQzJ2L2RqbjRGYk54OVhiK21JNEU3cFF4OE1YVzA4WUUzeVpWS3VWVDk1S0t2L0pRQWREc2dud0FSekxTNFVvUTFxTkVWU2ppdDIvS3gvbzNqVmpRRkVKcUFINUNwZC9zZU9wbTFHT0g0QWJhenVGam94MlY2S2YrQXRlditCTkZuZ3VNVS8rUjdaNFhpaUxWT0NOQVBXaEV5L0l0VWVZQmZqOU9GRXRlZ0QzQVVmR0x3Yk1HN0VTSWlrZlpXOUZrTEtMaWpaVlIyMmFONGZzVHQvckUwQitXYlVzSlhleCs1V2ZrMm5EakhqYSszMHltczAvdDNUZG14WTlGMmIyS3JFWU05a2oyVkZzUEloeWVSaUd1K2thalhzMCtYVlhVT2M1aFdlYmRLT3hFdFdaM1E3Yk9ER1gxT1NocUZTUEtOYTZHU0F2ZXJVS2NMUXYvVUMrb0JtNDJhNkVaRnYzZ2lpU2JiVThkS3YwMkk4cnpDcmxGa0ozQlFXdENZN25icWFOSWFpcXNVWU5ScWo3NElwK0VxZXdvelB6K2NjMFdvZDlPU29aOWFpa2VjdlAvMjFOY0NOeUhTM3NBN21yT0Q1dlhuVm1EU1dOVU9lMGFhbTNrWGFaOW1yVGovSlQ1WGtEdXM0Q2FZb3F0QUxETkl4SHZYZEpicWxodkhLZnpBczNEbGsxVUlTN0l6bGFjYitFazJWd01WSnR5dlNFQnpxS0phSjRnTlpOS3ZyL2xhWWVlcVNZbStKNXhUTEhBa1lyVUU4NGFPRnlZUGkyNUdzWGNsOUwrVndvYlQvZ25GNktHOTFsVmJReEE1MXBzVVllRmpvYnRabzF3dElPcUxPdjFpNGpqT3FHbzlHbUpudW0zNnljZzNOMlVBWnlRdUE1dG9tRENxVVI4K2FnOU1PRVBIcDlOR3M3bE1pcGZXa3grVENJZFBFcHBYRElZMk5VelBDL2hMY3I5ZkJ0WENMQnN0aWVuaTNWVnVNZnZmTXdXaUNUVld3TTg3R0lhRjhWV2kxc0E2Mk1nem1OWWl2NDgxb05SV2xOdGdacU8rejZsQ2l4cG5tWVhTMGREMk05Y0ZseHFZa2lDb0lpV21qY1JLclpyVnA4OXI3THJHaWVrSUdDS216T2VzOEpPV1pmRDl0Y0xSSGJyQzBEeGZReTA1Um5SNjFOV0dpOWZVdlcvaHFhM1VlbE00Rml2OXZ3RFVvb2UyN1JUcUs1cDd2dmFSYTcyWGhTTzhEU1FieHVXVyszbGJWMWdXVWpZUWRvMDNpeVl4RytENVFZWWVFL0JmaVh2UHozZytQcmFaMU5pSko0VnlIZEFUbFRXQ2lJems5OWh5QkVmM1VOeVF2OGV4L2k2OXRkMmNaeDdlL0g0ZEhmYWpuVHEvRThFek9vQTUyUit2ODVuY0pzTUcwV1NPblZ6azdGZ2tqdlFPM093d244Q1IwS3RqbUVpcCtwNzBQQWhnWGRySmVYdnhwdHNrOUlPaGp1aE9ZREIzL0lNTzV6enlraVVESUszYURIZzNMMUtma3NkM3ROd0tWVkhCUDNuZStEMnFWNWdzbTBCUUY5QzlBSnlOSkRBbERlU21MSEI1eFVXbVdkaThydC9TUENJNlZ0UUZMNGZod201YnRkS0l3a3cveEk2Wit3SmNQRUx5NXk1bU9zQjh3WTJURG0zd1Rvcm0rZXZ0WHJEQ21uWTMvUmlwZkxJeG9wditCU1RlcUlsQ3pzaTJtYWdibndGQmN1dXJ6ZTFpL3ViS0g4SlBBVldjSU55QjNna3RnZS9mb3ZIMC81U3oyd2h0THo2U0lIQkNHa2xmeGxwZkcyZ1RPdnY0d2hVcEVlUlkzdVpzSVNxcVlYTXZXWWI2b05LQXNIYlJ3dUgxWFByOFdiMDA3YVhtUVBqOVZYKzJ3YnVDQ21hcDMwVDBTMys0Z1B3OFRNOFR1SUs4N3lFRTZ6S2twVllQZDZtbkUwMEFPbm0rVnZtNVNneUJXdlZIL01yRHZMMGFVMmoxanRyY3R0R1lDWFNVbHhyTnVSZU9pVlowTWxrOVpvd2ZhamV3WlRtWGVFanFGZWFnTzhzSi9tZXM1eUI5QndZUkF2MHVYZ2VTTXdDb3dycjczVmcxME5kV3RIdlZMNlNyVm1XVjhiRFhmam5iT0VjYzB4c1Mrd0V5SGdkRDdwdTlHT3Vod1UvM043RVZxekxwM1Z5V0d2aXJOTGsvTS9VTEVESnFCLzB2SllaZzkxMWhYcGppWGZVZWNoTEl0R1dMdkYrK0ViYUtEZ255Y1pZUGpaekJ4M1hGYXRRYjNGSDhjbGtwQmtSNTdQUWQweFhrQjRNd3grNEQxamhWd1Bhc2FYTGxhNlRyZUt1UmVXa1R1bnU1TlZtUktzV2t5RXEwSS94QVdFMWcyWWI4ekNSNmI3clJUSUt6alVzVndaTXZ5WnFZMXNpWG1FOEh1S0V4bjNLMWdqK1hLaVplN0VadEJOTVJwTEhadGFvUTgzaFlGZVJBZFd4U1RERGlBdWEwcm8wakdXUUZHUkhmcnNqZkFSbkNGb3lyT1VTUGVSNzc3YTk4RXVQdm8wSDhMcXc0UEtRWHlNZzNEdDRTendaYjd1K2wrOFkwOEZ5Y3krcTFyWGRsbndkN2I3QVVINGtPV2xBNEhFYk5uZUhabFJBNWdxcHpCMllKcGFFbUdnTE1rZ2xVdDkxN3M2Rzl4MVlheGZ1WHpzSlUxWmpnRWJSRVB0U3RTbTA1aDdhVDJBQ2J5NVpmUUdEVGRqekRWZ2FNelpZcFJFdVE5aGd5OU4ycVFMMmVoSWljT0hsMTl6b1NoYzVlOUFKR3BQRFpCOGRhdzJkWlBQd2pDcjdaalN3Q2pSTWQ0bWlNYU9iZXQrTGFLSDdYWXJrNXc3RVJBdmJSZjM0eXBoTlFFYURCNnpqVWdadlFya05DRldoWHZiS3pNRFJzN2dHVzJEN0J4Z3o0enNiTUp2cVlLNmg1ayttR20rWHV1L24vZTBBSDdweUFVdzN6bmh1alVWVlFjNFFkNWc0bk1xVVhUV2RkTWRjL3JrUitQN0lzZ3FWZnVWd1Q0d1VGR0hGL3ZMQngyL0Y0RUdFZGlJWGxSd1Z4TFNxWExCUEhGakFxbzlmOUtkMXBQYUI5QldoN2FDQ3loTWpBVmtsenBmWVNzQTdkQ3I1T2dwbUJROW9MdWtaSVlFc3NXN3o2TFpaWHN5OFRsdXFSWXFpVGhDdnRSZEZlczNYbFlWTjJEN2Y4cEVnclVESlVpa0d3dzBhUVJtaldhZ1pPNU1Hbm1CaE81WGJQRjhtWURBN2pTSU5QSXZWNUd6WlRTL0R0VkJndDhhckR0UHdMQ25ZZnJxRldLS1lnZmMwbVBPUVF1WmkrUWl4TVZIQTlmS3UyTm9WNCt2Q3Yrck9SVnhSNzVpQmw3YXcrRkJWZ0RGNHdpTERrNCttMFVNSUlqbkZiMm8vZ3lFSVdUcWdlMUc2TTlsMGZHUGxnM1ZvOUV5NSsvZ0JOV3cvRGtoL1lYNTBYSGRJU1BGQklETEpENCs0KzJLejJ3R2JCaExmRm15N2tjRmtpTjJGZm1VTGVDTHkvVllZazRvOGFOT1dXSGVSd1c2dWFoUkpNSUtnRW1wWEVJdk13ZllJWDlidEdwTS9kM1pJU1hqMEhJL3EwT3pSc2FWRnZTU09CVG0yR01MZStUbVNSTHFLbVF5UEpBRXZzQ2ttZFBteE8wNi9aK2hnZFZsWFBXVlhCNUlwYWtaUHFxbnAzcHV4aEJjTCsxblJzeVBOZHFvdnlLNUZVU1VTeHVVY1JJOExSQ0xqbGZPcFdCRkpjS3JoVTRnSnRjMkV1bmpYWWhtTkt0eFlvbktSQ1l3cWdJdXNHSWN3V3NyZ2ZwdjA4VTBjeGE5Uyt2N1NERlJTMm9zUGdLaEVKQ3RBQ2hjZHhQRGo0bk5ycUpzMHl3L2swN0oyL01xR0JsOXBCc1FhcnVKU3VFbzd2NURiT09taVNzTmlWRVh2bVd5d1hzSytaYXhzRFpuUVArbTlGejlpdVBXV1JnQmluYTdqSUNVNmhWZnJqNVVhOFN0R0hUV1N3OFJkZDJrcUE2MlE1U2NmaEVtbnZHT1Z1amJOenJMcmdBY0lzZlNQa2kzU2xGS1p3bjBEdFZWVmZkKy9KSVZYdUVYNVJOZFJBQjhXekpna3ZkSG5scjRpWnBQQ1R2SS9HaFpXQTN1ek5XVFNkSzdtWTBscCt0alRnemhQc2tRbEpQWEtnMHFtNGdsQWxyT3BrWmhCNjhFS3F3UnBkQ1hET2dtemxGYjNqeGhRcU5tN2ZzZkN6NXhSQkdtL0cxWDFDdkZKWTBJQXp1eVVWcjhxdXZrYkx2T2FISHdlRzdPWFZJTHhBS1dYZXVvVEd1VDhvQTMwWS9jQ3RHNjR6aytnbHJRTXV5SWFWcWtvNXRkVjRBZ3JJak94a09vbEFjQkZGRU9MdHh5M3pHMjdPUXB0VXFPaVRHSXl5NXQ3Y0JkdmxoWS84OTBESHllMWd5VDAxbXErbUEvYW1XZmxBOFg4bmlFSmV3NStNSWNMbGFiejJ6NWQ3MC9uMFZzdXdGc3U4SGhwV1d3cVpwRG9ucWl4ZGxiVUpONUljL01UdzhnNlh0ZzUyRGV6UUFQa0JMNFp3cHJkMzJLYlhrc1JCY2NHS0pPNzYxRTRqUnpEN0l6UWZKb0NBT3RzUmVDRWIxS3JmN0NqSDVqVWViWDJNNytzcXVZWG1WMWQwc0o2OXNMQUNzRUFKZ0JObHB2SW9qVWtXeHdvTEhjWEVmdUY5Y3I1MWNpNFJlVnUvWm43aGdnbXJSTXlRM2E2azRyN0xqL1lTQ2dham9RTHI4VldxRjE5TTlLVVREcWZqa3kzMWFsUERxMDV0R2JRbk9SbmYwdnJJVXp1alVFR3lPamU0aWhGOThEcGNjdWRlN1YvNDlxQzJJR3NWb0M0WVpXeHBlRVpJclEzNVVvZEE1WlNyM00vQ2dXQ1BKdUt0WmdFQmZMbDhmWjhlWGo0ZEkzZGg1bjBETnAxV3NLQ1FXdkVZeDdSdEYyVnJXamxWMC9pcDVNRDFndzM0TExycnFZaVA5d0ZlaEpzSGtPZFVnZlNJd1RjekdvaU1OMzBaZ0l3WW5iQjlOZFJhbWUxOWZtcktnYVNxTjFHR25ZWFEwb2pwMWdNQjY2VXJuSzEwM1B0VUJPMkphUWg3dWdGS0w1RFZ0Y3pHRUVYSE5pQ1JEWGd1OXJjdE1DYmxzeWo4YzdENTF5ckR6dklzaHdMeHY2RnlNcXZVQXBzekFvaGtjWTh2UTMxOVM1VDZHa2dWcWlKQ2ZwNmZFTVFsR0JaZGgxN29wU0ZtSjh0aHBaaE1sUFNmMlFOQUxqRFFKbFh3ay9ZYzQ3dUMwVHpLOEMyd2lTTjRJblJjK2RpV0lqMTNucUxoS281QW1KM1dZZTd3ZTUzcUg3ZlRsL0FXY0ViZFUzUGYxZmp0NXFBQmFoYUp2b1dLWGNwUlFtZGhQYXEydFNGVnBKSFZoSklURG0xMEsrZW02clMyempHdDcvRTlhUE8vd0pUL3VoRU5BYTZqNHdPaS8ySm5JYjhYeHA4bHlXL25Tb3hqT24xZG4xeWhRNmRpTWVKV1JmN08xVDJTV1VqTmRBUlZUV2htSEdpMFBaak90OXo0dUZzdytUNVRrWWFrK1pJTFpCam1vamRMQ0RHT0NCVnZJcXRhMTZqaVNJdE4yM2g5TFVQc0dkZnJSNW1tTFpWR29DZFUvcm9WV2tkRHl0blNGZzhtbkwwbnEyM0ZRY1pTTjJ5Ym9KWE4xT3o3dmFRWkRUNHAreEtWSm1LZFJicGx2MHdCK0E0SmNYaUV4c3BNTlhONUpsV0JMQzNwTmR3L2RNNU1lVGRaU0FpdlJIUVlUVm1XL0JWWCtpUDdaYnNjNUFDL3ZnR29PaVYrTkQzTVozc094aktUU3ZEdmpQRVNSWUFnUkM0SXRFSTFQRmliV01tcERnenBtdFRkR1dOMmNSNFJKeXJyRG85bmJxRGsyOXR2cHR3QmhkS2RoRTN2eHo3U05WT2x6SXJtaWdVbTlRdC9IZkNNb2JBdU9waWNzbGE2UFk1T2JjV3o0cVZuVHd2V2hKcUErQmUxUkFGVG8zV3FTazdnem5ZWFlhQ2dzdE1aTVducHlKajA1cmUyaHovcVdPOEZacS9XbWVMQmpSRmVKT2hFRDhHWXpiazFKSHVvaFQ3UlN5ZXdSeUc0MkNTMG9rRDdDUTlwdmxUZzJxWDU3OG95VXR2aVFUQWpYZVFiaFVaa0JPZWw2L0EwdzZyR1A1clA3R3ZRZ2JJZ0c1a0tLYjNnMjc0QjdpWHRqVkRzcE9CVHdCTnBNYStOeXBtYXdsSGdmY0Q4K0hVTjlBSGlKeWpGYkVkOGVlcUFXWjlmZmRibkVoczBFUnB3Uk8zUUlRL2hEejJweDVJdXBTUStlSEVIRUI4bVJRb2tFaERXL0N3R3doTmhuNE5FMmhXNDFLbjMrQmM5NE5XaDJ5ZE9HYjFZQzNpRDJiQkxJNzVxSHMzMDZQZnNEamtqTXpaU3lXQzNDdzY0QkhPUWtYNVlLTmN6ZHc3MVN3ZzM0VFB5RzBVSm80TWdkcGk4cGE5dVVVajJHOXp2VDhvNDJLNC9vVUZ5N3NjOUpFdWNYNlY3Z1dmWGMzY1pLenFJZURpdC9EOVI5UnZTUklvQWVvVXM4UjRZcER5K3JRR1lHR01YSkNmU0JlbllINm0wVDhGNnQ4TWpOTmxoV0c5Zi9aUGZZdVd2WE8vQVM5eXh2eExUYUxUdC9OSnU1OUcyNGhZWk5uUThYWllGWGFvOGROcTNrTVdwanBTYmVnTzU1VXplVXVNcUxXRzNtc0prSWR5SS9lNXNMVWt0K0VJeVBnVm02SVQ2MEhPb1ZhL0Fsb1Q3THQ5VW1SZTVoenp1ZHdrVjZVelQwSURnOCtpSExybkQ3bDcrYmFSRVlZZVVVRWZKek0yQWQ5aXBTNnRaVVlkZGN1bGE5MGRGYWRMTGZTdVdOSE9EL1BkbE8zRWVKcGdPblBjRE9wY3hPSndBZ1YySTB6YmRIRzFCVVRzbkdvRFNnQW16N25SeGJ4SU5Gb0VNOU1ETU1qem1NRmNzMjNXdmpBRUhydW5zckVobFJlRDFEaVpCcDJPMHJPeVhIZlFSRzU4VWhRemU1TUp1bVpLQ3F4djk3aVQwL2FJUElrTU1CeDA1UWlZSlpLRnQ1WkdEY2RSMjBia1pZMmVTRm02M2NtZGZWZmdyVEVRTFpnZk5tUnRJZllVeEFNT003MUlRRHNsaXZSdklqYWg0RnJiYWZrM1FwWEJCaDY2ZEhZODVDeXNWZzV4ZURwdXVybmRjVU9QSUhDaTl0S1lMaktCYjArSkZsQXBIT1M1NVJBb0tWdVV5ZXNwdEp5QU1SeWNMOWUxNTgrSVZXaUZPWWF3OENtQ2tWTzlHdTVBMm01bEdjRE9Bd0E5M091Z01KTzlNcHhVNG5rTlBrNG91UEM1WkV6czdrMmZYNms3dVhrNGxOTWZmbUl2ZC9GZ3dNUzRkVFRoZW1DOExhbDlzeXRhUG1YanQ3TWFENzYrUEM0VzlDTXFwTytZL1kzOWZyRXJjM2JFdVNPYmY3eWdaUm5aWnBCMlJPSnJpaStzSEk0ZFlqSitSWU9GZ3ozQ01YSnlFWll2ckZMdzd4emI4V1VqNDVRTC8yVTJ0YmlVbUo0Y2ZRdXd0N1ZJK05tWXd5bEQ2aFJOOXZuYWFwTFhXSUQxOEFNZlg0OVZJZ3p6Lzd3a3dDMUkwbXZheG5PMEtpVDRYdXgzaVNTZjhabGdCMURBTXprd1hYYVVZam8vNWVqY3F1Y3U2clJQQ2tKNlppTmU0QTZrb1hIaGh5ckVhOEMzUTlJT0NldzVadmNWUmxLWkNienh5VS8yRWhBYmRvUThuQWxQZjhNMGMzMDJ4THhsSXVuODlMQ0JyTHI4bUtaS01JbGw1SzZhMFMyRkhGVDJKblI2WWFacFFTL2hYWG5vU3JqclZZY3JYbkI0N3F0Q3NUVzk5bkpLK3MvQ1AwM3h0N09XQVA3NXJ1WE1MUy8wSzk1TnNMUFVTckpKRktDUmFybUJHMktTQjV1Q3FheHkzcHJoMWVDTEZyT2NpUWZNdk04V0trVm5aT1krSytwVC9PZUdGRHIwZ3pla0hGdER1TUxsQ2VWbHVJMTR4YyswZWVXalNNd1M3RzdIMzVqRUJacW8xSy8wTVErbUx1RHdVOUZMbXgrZ2lLdmUrd2JYVE1jMUJ6SUJqOXNhZXo3WU8zMnlTby9uRTdWM3Y4YUh5NDVRRGJHVVI3dG82Uld6MWRPR2VSb29QNVUrRFlDWnB3ekd0UTlDWkVWMmxaSWZSS1pncDRYME1QL0F0RHBhRDdHS2ZGYzFlc1ZSV0RqbFlROW8wMitwT05lZDQxRVhvdjVYNEtlNmJ5UEdXV3BXNXAyQnk3ODBYRHd6ekc5ODJvM25mN0ZEclVHMjZZWklaajNxWExKQ2pFcWliekxXMDRtcFFZZi9oUGpiOFpFdGZNeXdvaEdWYzlxT3R4RHVtcEtnaVYvUEkxRWgzaVRaOXNzWlNINmFLckpGbEpLalBVNkY5Y3dYYnlTOFFydjNFdTgzYmJhTm9GZGI5Ym82VllSL3FUL1ZaUjRpZjVSVUxBM0RJcWc4RDNUZGY3Q0hvTHBNUmVUSy9vcVZ1N0QyalY5NUphMi9zRVlUbHpsdVMwWkRpdHdZaU96VE02N2Mxa0Q3ZURqMndnUVh0Wmh2aUVJNGlqb290UGVEbXhwcERCZCtVemQ5UXdSczhDUHdhbUxvaWo3UndCR09GT2JJUmdZdUhhcFNoZDR5eWtibXRIemJDRjB6emx5UU5JblZkOGV0aFdmd3JQSEJRYXBhYy9STmQxbUYyaEpQQU9FNVZxNytUS3gxYnBmRmpMcFY1OXEyenE2eE5nUVdyTWFwclN1VHF1MUdxWmFhSWdNOS9jOGZjUi9RZ3R4dUQ1TnliWjNUWjJoR0UwV3I0M3ZqV0U0aXlPaGt0OUJTQXc2QzBpbnl6cVY1UEs3RVIwMlNSb1c1MDNBNUt2ZXVVSTJPaE1OVHFWL1lMNWhUNndCZVNaOHlJTkhRYm1sR2dmaFMyK1ZRNDZMSjRJOTdQUjNSeVZ0Z3dtZUVZTGlqZmM5RkQ1UE56YTBDL0VtbTZTVEVWc3NjNUNkQis5dHptWFBQWXltRE1HaktBQURpT1Juc0pDcHBkZzRsYUJjcS9GMVc4Yy8zckkxK1VaVG9CQ2U0M3NObWZQOVBnY2NaOGdwRytVYkJ6ZVRVUlhjSXB4emc5alJia056REkyTXV3aitmSm82dUNUL0xhNEd5eVNveUFxK1BjYTJ1ZFRXZ1R5QzJnbW1wY3B6Qi9qR1dyWlhXOFN0M1pRY3VXN0lYcVFCcE5hTDV4TXlETytuUzNyMEVuZmM5MzFYUjBHdTRGaG5tQlVMV0djK21MZ2tCQnlEelpvQXhSa3FRQ3VQZ1pQUDg1Q3BHZm1lclFRby81U3luZnEyZHExZ21xb2o3U2w2bGsvNTd3UG5PWXJrZjR3Q1NVN0tsdzVlQkZrMFBOaGNGRXBkRjVXblRNME9vMHZOVnF5UHhMOTU3eUdHZmxlM0h4d3E1YXZxcHB1d2tLZDBCc3EzUjdhdlZPVTBJZENkSC9HVVBRVXJiWFVwM3BkTXhnMmROeXhmMlRXWlJaVlBEeG9BTDZhL0hDOWxUVXNJRzlFQ0Y5TXRnRDlybnFGU0hBdE5wbXJMczZTdU8zTXdjZWFHeWM2YTdJbGVNOXBPM2ZOdjJXTU9Cb0h6WHdZbU5KRzdRMUdXUFlGaFdPdkV2QjFUNmF1RGxVNU50NGFiTkRWeG5nYURQZzRyWDlYMUtIYWk4ZkpreVdZQlI2WXRGNmxsM2J3SEtsWnRBMklNT1hLV2krc3JkajJTWFdRclhqRWRRclFRd1FONlBQSk5OSWUrK1B3TGpaaVlzb01mQmpLTVlvelR3dS9xMDVXMVRncE9UU24wWTFIbEpzOG1JeUdBSUdSZUgzT0x2bWd0SFRtQTBsVkF5WVpwRlRRZFVDWlNzRHJaaTd4TkFmbGhLa3RhdGlxdXUyMkFZTkFRWjRGSExXb1N6Q0NRdHBWenM4cFBWb0wvT0ZkZk5pQzdsUitVMVpMUTg3dGpJUStaZ1NHbEhvcmtENEk3dGdPL3RFRWVYOWlTNzNJenJkNjJ2eGFsYnBGcWZoZW9mYlNVa3dscDNvbDVsOUVGaE1DY2pXSTgwa1YzMG83MERXRjZoVUp6SXRkZkJackUvZEF2L3ZmS2VvOGlQazdxR0hLSVIvNUJkUU1EZnpPZkdZTGVteGVqUGx6Qk1GWExyQ2JUSTBTRkJTWDFZKyszWW9xZEtxL25tSXpXZjhnY0VGd1hpMzM5L01mcWFZVFhNNDQyMlBzbGQxd0NMY1ArV29LbTdQYlY3cGRHVjZhQ3llUW1wWG1ocGg0SEN1MFArWVVCWWZ3bW9udmRoQmRjWHd0M1YwSnRrSlFPbXNnNU9zNGVOb2IxL2FJZzdxcXh4UmQyMHRiUG9ZdWQvUWdnUUFmRmN1d014U0ExeGh0Q2ZLUXNmUjJ6UFlicFRuaUtyMmF3SG5yZHhJZUZrbjJnbnBLTHA5VVVMRzlNWHRXMEtVWW1FeGJCazJ2MUZVNHRBeExkR1R6Rk5aQmYrRkl1amFuZEZyZXdZcGMzWHhDbUFQNkxESi9jRTNwNUYwWW91YXU5NnJGclgrcStUYWp5Z001NGNnVlc1aXlTMitZcXdvWk00QkVlNE01TXJBejdUYzdlMExpUldJOTZFeFRpQXh3QnY5cnBlVWMvekl3NTNlMmFyUE1Ob054WkpOQ0ZueVJwbmN2a3RtU2loUHRCdGVEZ2JSM0UxYzUyUElWd3kzZlJRT241ODBCT1ZJRndzb3NEaWNPaXQxK0h3bjNzVWlFTi81UVRyVlg2Wlh6bmUrb05IOVhrOXQwNnJhREp0Nklmd0RmcGZOOVRHQzNWcENNRXltTE9FcEdaTnZtS2hLWGMzbXpCamYxTW9tWGJFQWNFUS9kSXJUWFFaYVQzZGdFdXp0TmNzcU5paGlZUnc3ZVpDVnVGc3lKUGRpaFZ0NGpqOWg0NE5JbSt2bEhZRjdCRExyb1NsYkRqQWM3a1hWS05WaGFpSmw4TUtFTDdIbkoyM0E3SE9PelUrQ2ZFcEx4QkdYQ2c4Qi9aWUZ0U0NrRVp1NnNTNzk3WUNnbHVHT3dzSTlSamViQTFqTFpiVHBVWnNrZUJERXA5aHZzNGtCSTRQWGV3eHZSblJNZVl5WkthVkIzQjBEd2x3OHhLOCtiWGRQV0Zha2Q1WVZxYVhDRTdTeVRUS3lDcVllaEhlTkxPQmw5Z3lxNXFZRkJXcWd3WVErWGt3Z010Wit3eXFjRWdjclJvcUpOcVpoejFsdzRGZWN6cG43dngxNUNtTEpXY0NsM0liT2xzOHppZDdIQ0UyVVJZUWMvNTlEWHBWQ1hLWEI1NjgzZGQza1QrNVAxbjdzdytOT0hjOXlRN01POFR0TzNMYzJEdjN6UWtDalRza1dJa1RIbGNwdDBWMEpmSVZQWitPWXFwK0FQUWpQNlVCOGFGUFhiUXUyd0toZnlKWkozcklwMUZkTmVzYk1oMGlYZktvME1ZeDZBeUlYQjhRWng4K3Z3U1RZOEtKOE5hNythTTJxZEc5VlA1TWp6STRkU2huWUx5enhxeWp2dFh3SVpXUnFYakd1MXVCc2pzNHVmSldiaWhhUGdEQVlTYnNZeGtTMWpzUWtHbHp5YjZZc0JhSy91emRMaWEvRXJNL3dXN29qZFlpSFU3amVlbWx4ZFIyNGtzcFdEN2NodlhQVTgvM1RCZzM5NUMrVjV3SjdqVlVSV1poTE1ySzNidUJGN2hWb2lyZ0lFemNJRkxNQ1B1TVNNSXZuaTIwU0FjNmdFWU1KN2dUTndhN0svSlJPNU9zNWpIRnAvd2N0ZHVUSmF1WE16M3craDd4S2lhSmM2Yi9LNXU4bkh4S3NvSDNDK0c4M1NnTVdSUW0zSGk1TXd6Vk9HTnpQSGo1YUVLTENRdTY3SXNlRnBMd1hMT2Qwa1JnMmZNNkozNjRWL0lWT2drYXpzWnI1V05NSmhaQVE1L0U2T0ZPOVpneW5FaG5PbnhhbzB3OEhXZkcvcTFQYWhkeEZ3bGZuMHVDT0RzYjFueENlMUpidWtFVUl1aXQ0RXRyZ3JzUE84dXdaMkRtWGZlUUhSZUE0QzRhb3puYm1YWmZqTVZxMklqdE1MV3VhbTJEWGk3cnhZamJhU2xpbWhGaVVMc1RKUkpxZE5IdW55aHVpSDdHZktnS0FQaXZVVkcvamVmZVQ5cVN3Wko1d1Z3eDlRWVJkc1dLR2lMUlVjWFNZSHJHYUZ1Q0dHb2FVOStsTGYyQ0RjV3dlcTZmSURhU0RMbUU4VVcyMkh3L2QrYmxoVlBvdTF4bTZUMVZmaXhHQWR5Tkp3cVBqY2ZWV2xOSitVUnNjR0pHMngwcGI2dG4vQ2Y2K0RLNjlzakw4Wm9DSlJYay9xUTc1WmtLSjZvTmVxZzVnZWxyNG5vRFpVZE02MnlnampkSFlSd0FiKzdmY3BxK1pHa0VDcWh1VWVUNjJUUXIxYUhGM2NjdDF5T3pDc1BMUlBpbi80VEtrOTVkVCtGa2xPbDdqdERnNS84dk52OUFjcEpKWkF0SDY2ZmE4MzA0S0p5ZlpKaU5Nd1NTOHp2R0hFcGZjVjRibmhGSmFvRjRmNHJ4aXJGNUY4M3JvODV0UWl0MDhudDhvMjYxeG9wdG1qbjA5d0h0OHB3aHovU1R5cXZHU1hkYmxYNlgwVVh5UUI0WXVLaUhPNUZhbUNDYjhibWhKWFFQMWxqaW5QcURqNUZ5NHovcE9Ed3VEcjZzNW0zTk5PcEJQYjJLZkZVUE9MNitRVTNkYThwUGhqY1ArQ3F1NGhZVG1ySyt2ellkbU5tbWt0OHVzZitZbElHYWlYZ0o5OTJ2VGczbFE4WmVJdnNLUEhRWUVvVHJmTHNNNm43N1BmdFBPeUF3YmhvOTV4ejRNcEhtVFJyWkZxaC9VSDhsNk5yTDNTNXNzcTl6ZGc1STN6RllFYVMrclBtVm84ZEZiZnljVW02UEtpMjhOTG5IdWNEbVZ0QjlSOFpSbVFSTE1jc1YzcW9KbUora21mbVpmU2k2S3lqS2FoblA4eWYrMEpIYU1tSzJIcnJROU85WE5vU2phdWxSUmFKRktiZFJlbkZjM0xzRm9ZaUhTYTZHUEtUTTZHQ1RCbjN1VkpCRXNzQTdRTTJBcDE1K3dxUFNRdUV5OGNROG9YMzIyZzUwL1orTkgxRGwycXd4K05hK3BOYUhQNU1yb3ZqS0NvK0FZeFpYbnpDemVnblZ0STVpU0VkZnVYR0lMNzhGQ1ZaNmp3eWRrcGpSRVUvWVVCNzQvY0lSa0tmYVlhUzYzV21QSTRqSFNucjJuT2FVNUNobDIzQXdhRGpMT1NOYTdBN0FIa3FnYkZpbk9teCtYaTZBeGtXY3YrZjVyT1dHUGVjYnJBL2xDdHI2R3lXOWRuMTVOYmFKMUtLNnNSZ1RTMk93aGFzU21CSEJTNVhrUjBDang1NnBEUXVNSSsxem81Qjhkc283eGtKMDEvVUM1dWRQTnBkZmdaaU1vYUlqTmhzMFVuNGpRTDhTaXlWbzZMd3J3WkRPbHRCeXJmQStUczdFaytMbmJqQWJGeFlrQ2QwbkdSWDdTTWlKTUpER1hGUzFlSkZFd3BPSFdub2ZDM2J6SERobmFpb3llYXpxbTdaOE5OeFNnUWlUWTRPaENkK0VDMWZmMHcwSW5mMWlSUjRmaGNoV1gvUHllbVh3bW90Rlc0OHhHd3ZVREo5Vit4dWU5TytEa1luVFc0Qkc1TmxISTlUYjZnTDNNRUJ1UlRCREZ2bDBxbGVzVHlpWHlGZHN4bmdkaUZ5LzRveGZwZXdlNWZmalRUaTVFQUR0eXM4bEVsT0lrTUhrem15WG5SRll4T0FsZWt3V3B3VStBT01FOFlacWRZcFdvYlNqWkt2ODNRTk4xbGVHajYyNmw1YmI2RWxXcGRsUlcrcVdwQXpuaFJYcEt0a1hKaUdHUTVJWVRwSkYxN3l5Sk9SeEgxejRmei93a3pScUxVTFljV0lwd0RMNkVqU2gvblZYQ0VqWDJ3bk1DcE93dksyRGhDRy9kL0hNTTVjYk43OGxocDZzWG5pV3FoT2Zrc3YxRzRsTmRrVDRUcnpmSHpXMStHVDFYNjhRUjVZNFJPZnVzcFZlak9Ick9vSG5WUkRQVmROeUNOa005UER5eHhUOHZGTXV5SVB5Q0MvbDRQR0RxL3FKKzVlS0JlZFREUzlJRlVYVDVHdTVka01GYi9WR1RkcEYwTmZQZ2VCN3JLRC9yU3J4QmlCUnBUeXFzM0hucGl1M0xUS0cySzA1VEwrUTd6S3BkSUc3NGNreFp6NEwwNWdXdlMzOCtiSFk3bGFzMllVZ1pEeXpSbkhDRVZ2QW5hL1QrelNlYys4aWVlU1dpVU1SZjNNSTltM2xpMm1jUjRWaUtqYllMSDNpdkhsQUYyUUtITEo0a1RMeEVGVTZiU2ZnZGJveFBjc2tBUmZWbml3aGk0N0h2Um1RcjNOTGtsdzBpaHU0WGc3ZENCb2kzcStjSFVRS3dhbjUrUkV1SFhiZFovSzdBKzltYU9wR3Z2bU45Unpad3I2eERhQU1sYTNlSlBNd3c1and5cHA3SHhndWpOb2hvNnRsZ1RoQjJRSUVPV0hyYTJKck1sNHpOV3B4S3dIb203RE5wNElZVFpyQnh0dHpCTG1udjJ5RzBHYWI4UGhFTWFBZzk4dDZBelhveWpqL1QzMnRUZTAzSDFIWHlWMlVOUk1KWjhya2UxQ3JKM1hsRTJUQVBUaXVsZi9lMFpkMWRiQ0xhd3dsbXZDd2NmajU1Vi9jQk45NzBpMERHdFordXExbjZjbFVzMTZFR1Y5RG5nUDgrQm4vcVdZa2M4SXhyNDdwR2VtSTVLWFRCMWZ6RFphTWhWV1RsZVFnalV4ek56YTFrQVBCcHQremZ5Wi8wa3p6c09jMTY3SUV6STV1SUNRVk1rMmZ1dEVNUTFWSDBjQk1SNDBtUjdjRzR2SmdWY1N3Z0V4U3RySHpXYjlacDlxTWVoMWJBWkhTRnB6WjliY3ZBNmdKV215cVREVXdocTA4d0pvZkZsc0dNK3ZjazNNaDRGeU1JczNHbFg3aWtjdVNNWmhWdGdWSW5LdHRpWVlteHFSeXd4U0pNdklaamwwelZMdUhRMzN3VHZldU5LZ3l3NU9BUHdNMnljK2FzaDJ6UzFjdG1hSDNmaU1ZMVExT2wrdXgzcVpFMmQya3BvU1NLTjNlWGNCUzhTZGhKUjgzSmlIOGVTNmpZdjUyV0FURXEyeUFVNFF1WVovTjVSd3E2dnIrUmtoSytHY0lYaXNtb2pRdlAzY3pnbUNWUGkzSVZ2YU5kcHBOY3hHNk9LV3RvM1ArTDh0ZE5wMWU5VjIrT2YvRDM5b0NuNWFBUG1iQWdOd05jL0tCZkxPa2NZaHI2MVRNR1htS2FMRVpEN2ZJdUxsNC9NOGxBYk44dzNvWVg2NHk3Yy9lSVl1NlAzUzVUbURIU0lnRDQzbURNWmMrR3dqc0ZwS2U3Tm5OdCtFMldGTkxlRzhWYlFTSHBKZWNvcTZLbkcvMzdMOENINHUxU1ZQcXRQcjZOVkhuTzFGR0o5ZnZaMnpSZm9YQ1kwUWpRejhDVitjUzJxczJPcnZ6amdaZEtpbUdYMEdVL1psUFVzQ2MrTWxjb3lTRzBmNnk0NktiT0Y1NGNobW15RXFwbWF4TXdYaW9LSVd0YVdRYTFnMVhHVURuU3JiLzE4SjVJZFhOaHAzdHA0VzBBYmRuTjNqQXpWcThFTWRLSjh6YWUwQlBDV3Rpemllc1RwWWg5dlhrUXFKcW44TDBlZFlKengxSkY2UzVla0FsTld1OFZCQUJrYVNlbDdNRVo3T1ZRSmZZQkVXaEZZMnhPc3NiK2x0TXdManhPMmt3M0VDcWJITDJDNXNwQUhLb04xQTJZdy9abDJDRHRzN3FGTGd1dW9LMEtheG5BS21lMUJYdSthcWFjZlpHN2VPZ1pKRW5rT2VRWWR5QWpRcDV2UnpTSnh2MzhPRmZwWm83bk1Rak1uOUdjNC96L21YamliTE5KL2lTVDE4VDdZblJrUy8zMXQwUmh6SjZnMWwyNnNicVBQVVgyTlBCb1J3VFR5Ym1hVll6RnRWOWdod29jWGxwVVdacEUzZ1dkcEFsU0h0d3BjVXpuL1JLbSsrNVpYbm1qaVY3Z2dqbWV2UzR2alYzRlF0MU5EejJsNWFNVTRnMzhKa2dVbUZicnppQ0wyblJndGl2NUxpbG1mS3NsRTdZdXNDc0VVeUN2QzdYZGVJUlc1WG9vbEh4YWprTGZmaS9tVTlWQVhNbDJocFVneC9ObEU4OHQ1UWo0dUNTcE5SRk5rZDY3R3FiZzFWaWE4S2tQc2pRcnJCc1prRzI1MXF5U0dpSlJsOHlla1ppSEU2Mjd0S2FDUFVNbzRlOHN6d3FzNnBnYmJBa2YvTU1wNUw0eVJvMUlFUC9OZ0FuTlUrNWpQOGtMWDFtdEFQYjBiSW42eTRyckV1a0h0NmVmd2RSMnZlSW8rMDRpdGN3RWRGZDJxamM0TXdjcTB4Z1MzR2tPazhScHdrbnFubkdLQnN4YUk0M2pkYUlMb3haempBMU02a3Q0cWNoK1d3VXExd0pWT0RxVzNRNVdDYitkWVVoYXB1YnZDNndqSGt2eHF4cU5Bd1NrbExSVXpINXZzeHQwN09CdUVkSHFzVVYyZ0RPb1V5YWMwVVdld3RDNDhPaGlvTW55Q1ZKOWlUVkFpbzF3UUU2VXRvYVZaUHhzcVVFd01Hbjg5WXlIQ2VPMHR3cHRYeUNyVTQ4UkNPUlgxWGs5M05RUmRoVTZRWm1DSnZjK1pzd0NOcDlXVG4xUG9nYzAvNDRWSm9qaiszYXZmZGZuUnhsZlhLaHZkaFo2T3pRYVJ0aFR2UlkyM3VFWEhja01HWTNVUmpjS2pzMFRNeFloR2d5NjdWSWliMWRoYXNkbGRVU0cwZmxiaThKMUdDTElxOWFNeEZMK09zMjYreGsrWnJyVURyYUZXN2kzREZvN1N5d2VsSDMrcjhUNExPbGM4anh3K1FLYnN5dFY2ZVRWTEFUaFE1cFZUa01mQVVnZ1F3YTBLQVNaVlVhekdTZEcraUJaQTNwOHFhM0tIS3I5aklma3BuVE9HN2lXNmw5OVJZek1MdSsvVE5WcU1iSVA0NHVqTGJDUXRXb0h0RUV4b3ZBY0RHdFBmODI2Y2wwdHFFMldERUZqazZuS09YcjRoYkdXR3YwY1lYVjc1b0hocXhwb2dwMzg5dnZaVEZCUGpBT0U5aWx6TnhPNWZyV0tTMW1zTlJDUDhjcXhia29rZjFIVlNHeDlKM1VOdE1ZV1IxUTNZMWtZeXdmMllLRWpaN1lISGtWYm1Yc3RGdWNKblZRUys2eURDNU1hTjh3ZUVNWjVyNEdPclNBd2pWZ3FJMnU1eVdvWk5scHM2TXJSRFJUbElOTFZpRjJOazlKcUptbTJtb00xdVZHb1pMZ2gxcEFNZ0dBS1YxaFliWTAyUzhPWTlhcnpPOVVuS0sxa2VJdnZKQkxJNHpyd1pBZkxjM2IyQjFJcHNxS25hMkFTSnl3a3QybFhJTUh0MnNCL0lmVGZDWHVIenhBYitkOURsQWRPOHkwUHdnRlFtbUFVRGhJWTFkL3h0Qmh4bVpDdlNmYkxrcExNaElSeDRlYWRBN3dtV2k0MkdDTDFRclpDQUdJRmxmUjRpRk5ZUE5QRUtvMy9xK0U5SFhhb0dJSnFQOGpLUDZXVFJtdzB2b0poMHlJTTdCSENXSHpEUGwra3FnUHRRY2pObDdCenJQQVRJSTRBTTJ5RGxHWDJueW5XYzRWanFnbHVOT0pWanpVSmc3SVhzV3NUckJ6aU1zanYwc3Nrb3RDWks1MVlmV2daNU9jeEhTM2hEUi9uejFvdCsxMGxzeEhsVldtTFNsYWVoR1Q5cGg5LzZzeHdiQWp3bE96ZjlVRXhEYklBOWg2UmhzSFIwZVp0Qk5lWHpWTCs5ZTlYY21EV0lSNDhhbHJJY0daN0gwNW5JdFNMMHpxcjIyWWZmdVA5VnJXeC9NQlZFOUpSOW0rV1lxNDNvNUkyNGhrUkViTzNtSWhpa1Ayd3BBR00wRmNGKzRiekRLNUh4dUxXS0w1bDY3QzBUYUp3LzZPRVRtL0VyK2RMQjJQM0FqMVJudkVMalJPaGI2K25ZUHlzbXppZ0NwcHJqMTE2TW9UbHlwMGRNUWZPclNsSXgzOGtTTzMyRFFHbTNkdVQxSC8zMDM1YzFlOEh0a3BOUHJFZSt0UjJ1ZXdLc0M4T0NwUFJEZGZuR3B0RkhCYk56QU5SWFBsT2FhdHFuSUtRMVJ3cytKWXFkQVducjhkUkdQcjEyMUY4aEJKQmo2Z0pIVnZ0TTZxV0QxbDczTStkYTEyam1CQWpVMHhaU2RqNGRVNXFFR1hsMTYrTFFOOGQ1K0VTSFVXNWgySmE1azdsU3p3OG55WjZrWkN5Z1RKVWFoR1dQdyt1Y29sSm9xclZCbDZpdnZmYlVaams2aUZNY1k5RExtSFh6NTNlNDhvWWdTOTNuelQvL0RGRUVwcUUyOHhHM2xISWY5OHpBa0huRWxNRmNiQ2F0WEhKdGNDTDA3UE5mNElON0RGekxJWGRDb1poUWxReEovVU5jNlczVEVVbGpqelNwWldZclZWQnR2OFpRNnZyV2FkZW5TT3ZGdkJNL1RHUktZeUdoWmNaUXkxSGtjQ3BVLzBIWEh3aCtuNzBzbUpCclNGeVU0UU9OWmV3SmJla29VM1VETTV5MWZ6QVg0bGlZeDBRSG5FOCtta2hLaUpmb2UwV3c3bjBhbU96RDRxZWJkRlVOcXp1cWlPMWdCcDhNdHBFbWVzZ0VCa1huZEgyRlRmNmJYWm5OU2IxWWlKWDFjUFBoWU9NbmNpK3VSQlNKYUVZMnplTWI3dnhyemVmdGlYVTRTZjZlMWtzNENVeitkNFBtTzNuMWZVakxtbm1hUXZJaE9jRnZlSEdSZi9NZUk4K05yMWxnL3JPQkJvVEtmdnVSZElpT29pRmJwMlM4c3hZVmRiSzVMbzA2WnB1Z0dGMThwY1psM2MwZGFpTHdCR1hSbk5VbGs0QUpBNitlY0JaNWxQTW1MU1lDRTNmMUZaS1loOERneFN5akRQSmZGb3lBTjJuTFF0UDZJSkFJK3hpakN2MTBFQXRONXlLTkFTSlg1Yk95WTNIL1BxL3ZoSEk4VzRvNjNiVFZ5SVdZRTd5RlVnTkVBcHFWVVNyT1ZpUllXbkc2c0hUMDFsaElKQnZvOTJJZHlVSXhPcGo4UTU4TFVOby8xT1VKUEQvSTIzTGZCV2QxdVBMUGtBNGJFNUpEeXY5a3VIRWYxYlBDeWFDeC93TitidzVxb0hhZU5IeldhbVo2NUJzcnd0bkxTMGNPemZvYkUrUEZHdHlLSTIwODBnMjRjcERrUDJ4c0xRT2tIMHVVNzBPdkN4VGsvbVAyWGFDV3RtVXhzZG0zcXkyenoxckxUS1VSbXZFME4yRUZUbnFkU3hxbHh5K1JPUXkwOUhVUG8xWnlGeERTSDZFR3dzdUJFU0hVN3IwbmhoMjNwalp3UGN5aDY4Mmp5SnZIaGE0S1R2RWp5ZDdUYkRUcWdqYnplT1MvVmtHTzQ0Z091K3Qzd2N3YUZsTWRYMkRtMEppcEQ0dHE2K0FyS0xROFlsY2V0OC9zaEZVVlZCWlIyVHFPeHVQYlBlT2hrNVBZMnhsdDVvK0doZnVNNm42UmdmSGxqQXlyUTl5RGFVWkpVRGM0TDJ0VEZEMTJzaTU4UW13Q2NUd1c5K04yTmwzVENlaTk3VmVTdW9IY3lCY2w4ekJWOEQybGhpa3JwY3lURUpuYVV3dmtWdDhVTG13aUx0RWtJU1d0Mk5qTlNuSTV5c01QYm5Ha2pmenJ1Y1VnMjlDbDJtTHRPaTc5OXl0M3dpaE14cGFRNDUzY2JZMlR4cWpidjQ4eUFiSWtqRmRqekNBSHl0bGtyWFVEcWlaZnFGRTdsUVZjdm1SNWd5bzdiQUVlWUdRNWVSNWRDMUROQXNqL1lPQlMrSmd6VTg4VzB5QWhCME05UEhLRVcyU085c2RWZklKTklBaHZ1SWE1VWxuQmxDVnZPSWhaSkxaWXVFaHJCK1htNnlkd29DME54OGlGcERLeEY5dnlQeUx5V1BFcXJHY0FidjlzSUMzWWs3cWI2YnlCVC9xYU1mSHJDOCtvNFExb2FUY1J1QmNsUTdtbXROVnQ0V1loSk1OLzFnNGpOR3d6UDdQR3NKUU83MFNwdGhkNHIzbm5aaDhKeXRBLzlyc2RPUDMreHF4cFJMRDUvR096MkhZanMyMWRJUUlHZzMvbUhqakF4aDQ2RVp2bXR0SW9jUUlaUzB0V2JUaTM0SCtqQ1IvV0hBOHRkUWk1WDZuVXd5K01TYkVFbEVBK29qOEtIVmU5ejRiSlQ5a0xBVUExaWhXZmNoeURzUlBOOXp4Y1QzaFRaNWVaY3E3QTRwUW94ZzFOUHE2a3NDcFZ1bDVldnZJZjNnMVIrVVZlNndGSHdUUURWMzVWM2p0Yyt0dW9sb1JFb284MmNrU0h3WDVkN053blBaOHVlSzBKdHRKOUx3cTJsdDNKT3U4OUQ5ZFFFWTF5UGFsWXl3VGZQdFRIakJwMGZSdUlwcDR0V2VQRkNrcDBZNjgzK3dVVE9yNHAxd2g5RGlPTDNFRnNFWXRKS3BTalpGdklST3JnYVFCMHUxZW03Qzlmd2xTd3pLZVZJTzR3SlBTZXk5T2lpeWFyUittc0laL0pjTWVlL1FVZTh0bmNNOEtnT3NjQTZ2TzMxMStBSmVqcHI4bkRNZnArcWprc1R0WXhqUkhhRWc0RkwwbHJ3TnlrM3FUTjdUa0JKNytFWXVhRm5BWU95N0xib2VhcVV2UzNRRGcwU09aM0Q0Y2JjV0FTb0JMV05MVyswaVFTdFREL2JwMHVRdU1rbzltaHQ4OWR6dWRUNG9HN093b1Roa0s1TkFiM1Z1K2NUS0YwYUgvc0xmbm45ODlFK3NmRVp2RVRTV3Q1a3UwRk5RWGFOY1pJOXVwbWp2YURDNWdUNGlaVlh0UzF4SzFRRWc2U08vTmVMeWNpeXhVR1M2ZTBrM2FzMTJNdFFtdk9mSFFGSGdCenZMY1FGNEVxTkxadTZwU3V0cWsvMGFtaXJSMjdyNlliZmEwcTJTamRybi9GZU05NXVEb2ZyYWZQUWY3c3V5WURmNzh4bzNycVNudHhPUW5nWFRCNFpDbW9RVlltdnR3OUZqaFlSRkhzSGl3TVdydlB2Sm9MUWNzamlTRzNMK1h2bWg4MVdRNnZENEhjRGtzcWV4Y0FmeXRxYTRZcVFSbFVCZ2JTaDZVWm1QaXdMdlVRMENqTGtRSjBnVXlyVVNwQ3Uya1RxczE3ZFZJeTFIL2JXQWRDRUpkems1dnd3cmNkNndDeTAyQTNDZWpDdnd4R09LZDFWZ3RHd1phK1RkQTJTSGVmbjQvb3YwaU1aRm16TnRJWFJFQTNmdnlocEZrS2gvNmJuUlZsQzB3eTlTUkhXMm1pRWs2YXY0eFFaMzNMWUZTNDJWbzM4QkxGTHJEUWZUcWtpTzJ4STdUbmt4cmUwd0hMMXNjeEpQSEhpQ1NVRzBhSEVVNXlxbEp5cEZTR0VOb0puSm9SNTZBMHBxWjJuVjVidml5NEkvSmZWTmw2WVZ3UFVXcS9sMmZ5QTY1ZUNkVW5LL1JJUEdjNDRpeGdqdHN6djZZZFdpYy9kcFZlc1FFVlkzM3orUzJ2S1UzL04xUmVGdG1GRE4vWGtnakpWV1pwTzVpeFpBK2ZHT2h2R0ZkUVUrb0R5aEJzRXljS1RmcU8wanZMVzMvMmk2RGk5MFErQXB6VjJ4WGVUUW1veDR1RndsQnh2N1NocFJSWlYwZFVpYUVxdkI5ckRCa2d6OGIzMmh2bk50UnY1dUY4SUhDNVBSdDVtUzRBK29Mc3d1K0Z6WUtNT0MwdnFtMmt1dG1UYkZSY1Z0Wm4vbUN2Z3U3WEJSQlJSeWV6aUZnbnloYmJpNmE2WDRmYWdWYjV3Q0FqQWFOeDZZVEdMdEFpMnBURnZSOERVYmtHV240Z0l0MWxIb0VFZ21jMU9uaFkxU0lxZ2g0QUZXMHB4NmxvazBMSnUvdUI1VllmeHVuRWVsamltcHJoUkFqSGp6Z0pWQkRpdzV2d0x1VVY5OTZPRmw2OC93QmVyREhDWkU1VnY5MXovVEtqc0I4M1N1am5TalhXTWFnbERFMzNNK0lYQ2thWmJ1S2p0L2xvWUl3YzdrWnQ1N0xQSTd4Um9sbm0wWHJUOHlOdlBqRlhXQkRKV2tYc3E3R0FSbFMwcVRIdFk1VFZvQVkyZCs4Uk85YlFzb2hnRFZ1dHI3QmFPcTMrMVcwNzFNem05RVBPM1FjTUNEWjNhQzJkaXppSytIQTEwdjQyYkxGT0daNnd6WDE1TWN4UjFtM3FrdFA2SDJnZDBmcVBSNWkxYnRhMC9uaWhsTEh1alFNSGdxWWlYSVBzd2ZVemRuRFVPYVFwRURPeUxpdGN6bFVUOHpnNmp6dUx2RzlhUzExZGxmc1NCZmp3M1MxMTRGb1EwbENuYkh3QWx3Sm95MmY0ZXpsY3Y4eVJqMWdqSVk4ZEx4cEVNTDBiYWFkd1R5TEJwOXkrNHAySDY5a1JNcy9LQnZyU3ZYZ0RPMWFldGIvVm1ldXF4cXpjVVB1OXk4RXhobXpqWTNBejBiMTMrRU82QVpDNnFpbTZhK0J0TXk0cmwwN1NyUzlrazlza3hociswTEttamVrRlc1VmRkZW1mZ1Rpcno3MnIxSFRRdnY4NnhtSmpVU3NVa0NVdk92Z3dkQ2JBRFVIQVMxbzR6UllNK2EzblU3Vit4VzVHTEpQRlg0c05Eak14czdlODlOMzBSS3RiaitWQ0NCekY2dDJSOFlHei9CcldwSDN0VkxGbkpXSmRsdnpGQUlOa0dDc0Fhb1R2SlVjVWxJZlZaaCtQbWQ1OWNnbmkxbHhEY0xLb1Nva2NienBEY1hLclk4SURMcWZxYkNrSnRxRmkwdmxobTVtc2dLSVZSQWJrOXQ1T3BURXk5QTR3dHc3MWtUTE0wdW0ybXM4dVJHL3VuRitvRnFXUk9NTU5IVGtnVVdUNTdpNnpvcjFWSEtYZFFaemNSWFQrMjY4NDFFRzZ3bkMzOEE2SVZDS1FWdjNpelJlSlpKdVNGR3Y4TnhXYVlOYmFNaUc2QzJWRXZSMmEzTjlUR1YwK0puQ1E5dmxtLzNvVHhaQ0J4ME9Yc09vOElxM1J0bXFFYWxFL2RmRWt3dVIzT2JqRU1ySmtuaWtZbGsxeWlJeU1LVERNS2U0WXc4N29FMnpqcmo2RndqNjhseG5MN1laaEZFMktUK0JlZWxnRWg0SmNzWXVqOGpEb0ZhZEw2c3ZQb3E3NktVcVIrQlZVaEdia2ExK2cxd0JFdFM3R29KN0Z1d2tuS2luZnB3UVQ2UWJCL3VSNlgvQmN6QkhudmFwaWdMQ1h4N0hCZDE0Y2szNTN5RTdBaFlXZ1dHQjBINGRZYW9NVVFFNGRXU3ZxYWE4d3hRZkdsMVRVdlBYKzN1TFJQcVRNODJLV04zWVRXNzc0QTlUaGY2Nzk4MGc1YlZnRE1EdG9SOGs0V1JvaGsrR1dCZGdmZ1hoaCtjR2xXUlpPK3ZnNGp3SVNKcGZmNWNvY1N6U1p3N0xkTDQrRE90SXJBUjA1R1o4SkF1YjRjUjdvNDE1dzk4ajJvVDc5eVFIM2RPdDdiOUdhQTFyMnpiRlRWSWJSL3N6K3JHaHd5WmxlTjRyMlltTE9iYVExcDl0N1NxUkpuR1plWFZFRVQ3Z0ZpdlNsMU55RnA5ZUJEc2xlSFVmMis5eXNZeTVPWDdiMW5ta3FpejZpdzFWOHFjbnVabS9CaVA4SDVTYm9taVArazJMdGc5aHpFTEY2N1JUNDdtT0ZxZnFaazNNanovTTBBOWx3dVNVZlN3Qlh3M1d4aFVUK3dPaTF1TFIwZTBzejV5dmordWFDOXRHemR0a2ozTVlVZE1kZkdUTG0va2lSb2w0NkRSelpydGVna1lSOVB6TWxIUjBNOFdQMndudnpNYXV6alpNRmxybm5hd1REaVVQN2FSa0svWno3NW5NQkt1T0FWMlpBY2JpaGtQZnNTU2FHRDNabmE0U2orUVFRUTdPZzNzK3Vpenp1L2lnY1lUclJmaS9nWHRBZWdRbjlXaFBtVFA1aFo4MzBiWmxLTk5RUXZPbzhOcFZHbnJZTFJteUhuWmFCMytvOHNWeDF4bER5dzBZbTBQOXJmOUhJdGtDTEl1bEs4UzJCUmRnTDRVOFhHaVJCSFFlK1h6QmdtTDVOcFB0TGkxZWdFaDdacjVRNlg3Z3dXUUNsOW85ajFFRzFWUHpEekd2djh0QmVLOGx1ZXJScjRzUHU1aG91NitBei9EVjNJRkFtSDlTeDk5K2hZYjJtTmhnZlFYdGsvQjF6NU5PTk00bnBmWXdHR09ReTRpVUVSNW9MMlFSMGJSRmJXQ2lpVVhnWWxLOGM5SnAxZ0g5RmltNVlRQmFCVmFyVnYwdmduRHNqbnh1Y2pVMmRhVWtFQlBjZHkyc2NBTDNFb3cxSENMeW5BQzYwQUlmdCtkMGpvMEV2ZTUzSms4dnY1Q3dWZ2ZVSmlBcHBIMzN2aUpVNFVURGNaU0ozcnNlVkpENk9pd3VtVFZ6aThiTElNRGpLZ2hxTlpDN2F2MjVYQkh0R0VPNUFOcWUyR0JGeGNLYzlUZ0NKajF4T2pic210Zk8vcE5VLzFpNWZZZitFT1dQSk1sZmRHVjkrelZwL3hiN1haMEtxWld4L25DRUJPZkQ3VnlYSGxvVnUrRFNTcVVtNFFKbFkrMk9oSG1tUlI5cytHMEhPd2IwSTRVZkRCZGFtb0NiM2pGTlVtdHgyajhISktESWNJV3pBWGo5ODczbWpjeHI0eHZVcnVoYUZXZFpiS0QvL2dEVjNFd29aenkzVUNucUEwTVhsaXpEU0V1NG82bzVUU3hJQjIwQjhPdnA4L25KUCtnNjBhbCtoU2RpMnFMaE12aUNpNFhhWjRCUGZJMkd3ZGRwdnFUc1lIcTRVbDJPZDlMUllheUo3M2ZKend6ODlDMWhqVGkzaGdSTTFwNmNJTHNWQ3RMS3U5N1lRL29MYklJRGVrTm4vWXhPUUx6QjBnZU1hYWR0aER4dm9kazFkWDdrd1hKVHd0Z1VxQ081c0FjTERGQjlBSjNycldpMmZ4ZDBJL0NKK2RXM0ovY01GN3ZsSTJURkQwaGtuUUVnOEJ5dW02bGgvaEJBd3VlaEc1bDZ2c0M2YTlrQVVIanQyUEhOMjgzK3c1YkZyZDd0VGFtaVNHbk1KaFBVT21lYzhtK0pvaHBzK1RQbzdEQXRETGxiN1JRL2FNVVBEeHlqUmVTVlBEaUovbU1USWxHbk5icUZHYVZZT0hQRnl1bWh1Y3A3dVpkS2hIL2NJM1MzdGh0T2ljTGlYaWNhdkFZY3h6blZTTDhvYkt4ZEMwcFJKNUFEdENUNnBGNG9LRnU4TSs2Q1ByZHpZYnl2WGtsb2h1NWxpaUNpY2NvbzFNN0lKSGsvczZlZVJrRWhMYW9lbTJLL1VUdWF6eEpXR3JJZGpVN3dLcStZZGd1dlpkRDZDQ0JzMnE4TG5vbmxzRTFEOUpnZzJ4SmtGTUxCRFFpR0QrVXh5VE0wamZORkhBWWljaGtXSCtKL3hMQjgrR0R0dm00cTdtNFBDLzFKMDJJMVU4TWhoVU9xcXg0NFNBald3SWhWUVNKMjI5dG4xNkJuUTFFM2owakI0aFhVczFmV1Ivc3MwTDh1QzdBSlBqU1ZCcWJsRFJLV2pMZDJhK1VKdisvODUxTkpUZldUT1FuT0xIdmR1aTBWdGFGb1ZNbXpGOGt5ekFESHBnRHA4aU01MEpFbm95RU1VTFJTdFp3QTdiTk1KUkxJelRBWTZqamVXNEM1Mi9ieWVOOTVTdWtLSGtaTVh2OTFCYlhZQWliTm9IQmFaaFRFeTVibkRrdm1VSk1UUS91WW5YMUtDWkhZUTdyMjdRWDNCNVovNjFzVThDVTVTeGFzQ2pib0ltV3IreXFjZ3RidnlKRFQ3VjU0QzNWMUJmbTQ3TmIxRC9zZEpxamJ2cmtrSjgxNUs2TEZhdmlmSklwbDBFaXp6UzNEV21UUVFDVkdTSU5ncWMwdHlGKzg3SkxvS3lrYk9Od0pybGEyYk5RRDN1ajI1Y2NBVHQ3S1Nra0Q2QXRxd3Q3OTBmOFlLdW9rWlNqYmdhTGF2N1FCWnJiSkhveE9CUSt0d3pTRVp1akVYcHZhUThNbWI3dXQwTEMyckp2dmpiSW1LZmNHaTNEazJCWWgxaXUrWFJ3SGV1aHJacEhVOUlzVGtlUmZlcFdmS29ORUx4T0loR1Q4cldDNDNVZ0hMOXJGMllpcENSR0tqamFTSTlBc3BtZlc5SDY5UHAxTEswSHJRVDBwQ2RsQmwyZHByV3hyaE12Y2gwTUFCd0pocGRKelBWc1NCVXgvTFJaTVZhSmtzMGhReFZMOFVFdUZDcmx3NkdRajhHNnpjMjJLV1RST3J4S3FDV3o5dVAzSHZiQ280QTA2NFJpY1NVdEduelpOYjN4L0xzdCs2Wk5ja3FEMWJwb2xnMXp4TkhzcW4rK3dmWnd3Q2VzZDA3aS8xYkRNSzUxRnJrSFJXelJTQi9aS3B1T1dMREc2TTdwRVdoaFRrYXNGYXRoZFpFU1Nnck1xVExoWTArUmlkT0FzZHNLcmp2MHhVZkNPdUJYRFUrd0lVeDREUTFITHdoaTllRkhFNUJ6UGlyVVVYUDV1ZTc2VGlCUHBMbWRvQm1qb2g0STd5MkpnZWRxVERTSDBQbFo1ZzdWZzdsR3o4RHVybkl5bXFsVkQyRndPNFRNQVlGU0pJZDI2WExUNUpqUFpsZHNjWktKY0JaVWp5VXRQZTkrVlVKQTNzVGo0K3Fwa0srTkUweThmSEM2Y2o5SEpIOVhCRDROMXdmTzE2MEtQR2cvQ0hGNElvNFlaVEdXMUdhVll3WEJJR2kzaHR1Y1h0VzBEUlhRWFM4d3l1Q1pFMitVZi9XTVl0ckt6Z0kvZEtVRzBtMXZ4cVQ3ZTAxc09mTGdvODlmRVljUDZRR1hkb21OWHF5SHJqdzA5RjRUUk9KY0J5ZUx3dnF4TlZISml1dUMrV09mSURTTENVY3JLc1ZuSi91NnpSdHFHNjVPcy9obkNwVDBWYno0cGRMQllIMlVJby8yalhJYnFjM0dnOWhlaHV4VjF2ZGNtTlBJeUVxWVYxT0kxVjRrQTRhYjRUbWdWNUtPR3N1Uy9mNXh4dHl4NVQwQzQ1Q3AydGJXbkRENEZ3cDU4YjRTR1o1UEVuMHNFemlKYi9CT3VjNzFaQ3cveExzWjU1VGlRWDFRRmNjK0lBSFlwempWaDBNZzA1NFRLVzgwaHEveGZIVENPaFRGTTBhYUJibWRnTTB4OWU0bVk5UXR0Nk5aaVQxRGVIaXEzT09lbGJsc3BSY3JPSnl6Z3pEajlPbjZ1WXNWZTVpUndxZW16RjdTYmJodHpEbzlieG5iQUVueHJobERzSUJXZ3BQbUF1WU5wY1Q4bDNneGRtQ3IrRnNQVWZJZVVZZHV2MlBYcWZxNE5FdU9iZEVWMytQeEpFWTQxNWdSMHYyYXhOSWlqZjl2OTJ4Q0FWV2tPcjdGZDUvWW04b3ptZ2pSblJ3RVF0bkVYY2EzdnRnWlQybXI3MzI2bU5EYlkyZS9vaVlvOFp2dU8zOHIxMjFra3laVWwzbWxsNVVGOXhKN1hhNmNrWFJoK0tyYUZUZ0svN0crVnZvSHA0cE9lcUhFSG56dnpTN3ZkcnBWSHNuY1ptQVlINU5CYzlCT2JJRis2QW1aY2hZUjN4NHRndW5RRzMveTFrc24wOXIyaU9idGJqSjdWTGhWTUIrdEV4WlRmRE9IbFhKVHNDYVJhbnUwUzhvQ3Y4ZUFqeFcxeE80K21ndDVMajBWSHp1QTBqazJrM0hmVFpud1dnSEFQbVYweFlaK2p6K2ZqTWtJbFBHOWFmMkxqdm1OOVJFZjlLNWRwZ2V2S3ZpNUJRWUpIS2JWaWZRYTBjRHVRaDRML1N5QTZjTU9rNGZleUhNYktBeFdsb2ZxTEU0aVpCTW5HL3h4RWVnVFppRUw2Zm9zMkVNQTliSkFYT25WdWRLaHR0RWxsNlkzb0x1Y0V4eVpZQ3VyVXVqQ3VmL2crSUxiQWlpdkkwVWVSbTZvSDJUcnVBRm1paXFOMVV1Wml5KzhmTUd5Mi9vRi9vYVJSOGtiK01ORWZ6UVFVbmZTWG9JQkh0Ylh6UXRXR1BVZzFPTCtXVVY2UTBTN0RSK1pkdXBTYUNkQVowWG52Y1ErYWM1alBKYWE2UzI5d244U2M4TmwrakJJTHQwRk5hSG41MHROL2lDRFpxcVgxVk5lWjViVjdySDR0WEtNN2FHTjJScThvaXJiVTdvMzdNTmpDdlQxenlRZXpRU1ZDTlFGOXo1a08wdXZNd3lCaWJTVGVMVHlVeEVJdFJmamI5dll3eHJIZ3ZrK0gyWnhDN0F5dVFYMlJ1TllqWXVtYjJLbTM2TUpCaXFOTGxkZTNGMDNYMjQ5anovdHE0UlJEazNIbmh6dkpOUHNJMitPSDgrbnVuMjRBQ3lQTWVEN2c4UzBUbmIrbVdPK2xHaC9wR3ZiTmI1aWdxcVA0Z1Z2SGdKSFRFSGpSZzM5QmxPS3AyTGthUlpLaHhmUU1WRkY5Q1pTNTM2aVhicFRibCtFOFdzZFlQZ1ZkQjdkZkw3cGwycEhucVFHd1hxeCtQZzllYU1hcFBKMncxcFA0c3NlRHE5RjFPVHZ1QnN6Smdya0RFUHRQQytjUGloYVNGRnVSUDBKaENIQkoxeEZrZHVaSHZGd2x4NC9ndllPa3djSU13NjliL0FZRDZlRnhkN1F4NDRTVUJVOVVnT0JCTUV1d2ZKcG9kS1NsU2JoOGNCQVBKZ0R6RWYyYjBqcldVd3B5cW1ubWg2UVZXM05TOUI2WE9QdldLUXhRc09ZMll1cHNwdjI2ekwvRE4vM3JxNzJ6Wjl1VVhHSGlwMHM5ZnlqN2VZSm8zZ0htSGs1OTQ0Q25WaEJuWHRIWFYreUttQ1RYQmxJQlZqUWVaelhzTlRwQnFsQlMwMTI3a2YyTHFlT2VTYmxyaHJLMHExUzRBNHFEWlgvMXNrR0tkWDNiRCtsamtNUGt1SVUwNVVobTlyaHRQSGdtTmdFeGtocmlIOHd2UkFzOGFzOGFlQWdESU1VM2dYWGxnemFJeXNLamRJbXFOTUFUdUIrZWNsWUdqam5DWCtLTmVrK2V5VUpvallUN0p4ZVVoMDUxMjh0Q1IyQnVRK0h5bThVaW5SZ3A4V2hBSDZsaEVJTm9FUjFpbStIeUIza3dPMkdnNklwRXZ2RHBhL24rRCtuM1M0SXdURUIzdFNxWXVWUmNadFdiY1ZpbytHakxjNnVIb1hTRTEvbDBSekFlUnplOWNlZml3c1BWSUUwV2RvUjExSnltWERudlFqM0R0QVNrQ2E1QjQ1RklrUUQ3NHBHRjJGMU9HOUxValdTS2I1ZG10cE1uNU5CWE9jMDVKSSthS1dLMHpHTHBsVXVJR0hlQUJUellFMC9VQmFyV1pPWjJJTWs0OVM0aUkrZmtjQW1zTE5DVXMvQ2RRSWxvblIvdmlKYkRqM2oyQUJRR3ZURk10YzF5MytNa096RUtJNy9vTG93MHp6VTV1Y3ppVnoxOVdvMVpETXBRUjNFM0tXQmpGZUlpWUFyQk00V1hXWVpPOEUrc3U0NXBKUXdRc3NjcFlNdjBRenk3U1FVeHdFdzlhcHZyMTV4RXFwem5PbTFRY3FHcXB0dVdBRUFodDhzRnZQL04yblVNM0tpSC9VMFJ4OHhPaTA2a0ZMbURLcnppN3pOVndyOEtaUEQ4K2lsVlZ1Zm5OL3NWUzdsVkVJeUNJOTBxL0xEVmNOZHpCdU4xNitDRnB2blBjNllCTk45KzdWcWREd3ZWZ2dFWnk2ZmZSU2t1VWZhcUhYZ3FJWWVYQUNTZHVKWmJMRkRrSDRoNi9iL1NNUDJmaTFIM2h5eXYwVk1jWHBzcXRDanVlQy9qcTlGTmdyYmJLSXFIK255c3NwclJwNkRlaDdnRktGOXVodUFveWdqVWg0ZkhMQnBndTJvMjl2SWZIUTV1OEV0YWRWTVVveWMrNGFia1hiTmNwaFBOY05SeWk2RVZqMjZYUStEZmY3OFI0Nm1QREpubWFRSVk5UVZyQVZqS0xaR21RVDRHR3RGY1MvMnhqS05ocGU4Qmg5QVpBdHV3d1dTTnJIUEZhdHFHLzV5K3JkWXFvekhzcVo5enFkbTJXN0tIaDV0eUpneE1waEI4MDd5MXEveWNyZVhDSVNieGdLbEphbkxGUVc4UzlqLzdUS3pRekRLR21uVHpuYUFYMDFGdW9GMGhjVGZ1YTRsRnIrTDlQQkdneVVFNGdSblF3M3RJeTcwQUVoRHpkVndWSWR0d082RUN6ZXBySlIrcmlZeEg2VTdOY3h5OThzMFJWRWdpanl4T1oveDJhVTlxaE0yMENHWUtTK25rbXkvUVV3Wng2bjFwMVJ6L2pnRzZ2WTlsTk5rMGlGR212RTB6MU56NVI0amRZVUhrT3dEdHhHMEMvQWNnL085aUVkci9qQXJjMTc0UUhqdHFYeVp6YkR5bjlQVnlDbENWYWNtVjdISitUdzdiL0s3cDdHcGxHR28xbnFzNEhzQjN6TndKTW53NUhFRkUyV2lwczdiVFVCQ1R0TGJvVjZZL0xUS0ZrY3dZNU0xeDEvR0lFbU5SS2pVQVVnVTRZYStzeUxQN2RpL0ExcUpCSFMwNlZRMVQ2aW82dzVyQWY3VVVZWFBzWjFOQ3VMdGxLazlqR1ZCNXhpRTlCNGwrL0g5dDRVVG1YWHNlQ1BxRVoveXZ1dVhYYnBndjM0MWZndUxVTDVCeXdwUytrMkVyaVVZenUzb0NZNUV2WXNXZDhqMVlrVXNNWXF3TGs4eDZMbG1VRGxiWnN1Q1d5NWhmbkE1TmhWNDFRMnRNdlk4d1ExNHZDV2VoaEVNaDlzYWxWWUsrVjZwQUlzdUF3Nmd2YTRKdll1N3hMdFFFaTB3OGpnMDAvREVMZVFWeDV1T2p6cGhFWUE3S1BNV3Bjak5VU0lBUWVJWWpEY29MNTFndFVOZFJtNlVIMWNTOFVKSmZhVmZwOSttVE9GTUVyeldQWFZNdC85MVpwSzM3U1JneXdMc3VoeUtMbk5YendGb1llemZMc3BnQmwyZ3A1L0dZNWRLenN5U2VvNzRzQVNXbDlMS2RyT2M5UExGUmMyaklNTXJtR3gzNjFvV2ZYYW9jdnkxajVWQ25OR2o1dDkrZDBPd3E0SVB4dHhpVlE2U1k3Slg1dUhvVUdodzRLZGR5WGt6dU1hbCtlZHk3V1hmN2w2TGtubis2cDZ6MCtic0pkM3ZzcHNjV3dXUEZpVGMvcU45Z2U1U1FVdDBKeVBLdjErS2NDbHQ4dEozU243MytpcmRNT2lhaGM0UUN4Y3ZDN0ZFZGlQVU1LWGFWVzdJNStLNmI4eGtFL2l0bk1GSDBzZ0loSzRQYXZ2dmFtbDFkTlNMTUNndTZ5R0lNVG5wNW9vNkQwS3I2Z3BVMlUwenA0ODVzWCtrK0Y4QklrMy9wczZCUFJ0YW9ZVGVUQVR2ZlR5RXRsOGxGbGFXUTNzdm5vY2l3MElBVzhQV2FjT0lUejRuUmhucDBhSlI0V1duNVR0MitwaXZXMUZ5OE5sNWNSTElSalFMNWtVOW1ha056Wk9BYjJRUDl0UVRZaWpvMzBid1VDczdXWWo3NXdLUmVFY1BYWW90YjY5QjBUQWtSVEt3bloyazZ2UWRiKzJmZzJHZVJqMjBvU203eXllNy8vRVp1YTVodDRjc3Q0UG8xMUxtb1MxYm5RaVM1VU96Q2NoSDJYandMcklIbHI3YldBeTcwMW1qcE1xZ1JZOXVzcURSUGJSZjF5WVB1RkFHOCtDSzlmUjUzTkNIUVRpMWt4OFhHL1JXSGdxRVZXOGUyQ2ZGY3ViRngySWRHM2FVejgxK1U3dHM3VGpVVUhESWx1TW1HNkxhb1FaN1ZhYlFGUlkwVXFDK0ZINVpmWjNYM1AyM2lSUHFMdnYwTDhxUmMrM0JRVE52eXlXRmh0c2FQazMvTlJzQkFaZjRLS1pwbGZKc2c4R3FKdlMzemw5VStDVXo1QVY5ejdNNzhvemF1dFlTcGlFS0dlMlJ4SEV3b1pGS1lrRkVsak1OMHQ3NWxpNFFqYUg5Nk53T2NEa25rVjduU0kwaGxhNEpDK1dLL2ZmcjY1ait2UmdQSkxRbWxQTytrSzBxVHR0cVNCUTM5L2V0TzhNckhPTFlCeGgxT1JPdmZobzhOMVFYNllnOUtkVERVQlFkSldmcmhNMGYzdjhhaGQ5NDFCdWlZT2tuZVdTN0Jici9CZktXSXlZdnBKaEk0VXJnNVhHaVR5Y0VJZzMvbWNCSUt0RDlxbEx1Uko4UGlSQnYzN1I5ZnJOREt1bkR5YXpLVnhaUW9JMmZxeElCRFg2Zk4vVG01T2FyeElnY1NFWGpVVFZjU3dqNWs2MThLQ2dYM3R3Und2eUtFK05ucW1TRnZTNHZVdC9Vemlnc2Z4QkhxQVovenAyZ1hTUllyRDMwTTYxTUdLeklWM1YxZDgxN0h2YVlyVEVCb21TTVoybHp3M2llWlVyZVVmSmsxdG9iZENEK3pubG9ZNFJJaVJ5Z1dVQUVKbkJGMVdVRm5QbnJEYzY1eUV1K0R3cUZpS2ovSk8zZXBMUWd0ZzZzVFpKamgxclMwRGN6TllYcy91Mks0aDVCdkN3eDJ4OEZWbEtjcEF6SXFKSzVUR2d1R2Q5TVFIZlBIWGdhVDYvY2xVZ29JN2JiNHJLUFA5NERKL0tPK01oaS9ySlQ3SnhNMTZGNWRobzBwTHZadkxHUkdaSGtRRVB2OU4yWTVxTVdtYkR0UW1YYmFlMFVqd1ozT2Riak0yakZadTdnRHpISTVPaGxSd1lTT2VZZXpLUXdrd3IzTEhpN2xVQlhUMlp4VUN4ZmxNN3NxSzVPTjZQSGdFTnZLNVNLbkE1K0U1WktEVDBXUlpFMjA0RmJXTnBYYnNTMGNublJMV0ZsRmZkek5BTk1VQzVrSDJSRWRTaHhEMWpXTTI0ODRJS2RoVndIUFV2a2QxT1QyTGlKQldYaFpmUVRSZHlaM1BmUEZmRWxlK21sU3VpUTRFZVQ3SElEdzhTNmxhSm0yZTcwc2psMjNhYUlobk9NbU1OemJubVpyRzNMVXpsWUtlbHpySUtVN3l2QW9xbTFuYzVuSStyR0NsejVRakF0aFhucmtqbEN5NGkxZnR4SFVQMjU1bE1lbFF5Yk8vZEhtam94USs5YTNaZGpSQzI4ZGxNOGZDTmpLVmJCOHU0dlRwTy82ektqb2tVYTNCdkxwdktTMStNN2dnU3R3YURHZXRGcG9LUnRPMDhnYVBkQTZXME54K1RIaUhCT2FPbzd6V0E2c1d5d1YreVRTbi9PUU5ReGM5N1p4a2RDanYyTDJTVjUzYmlEMnhPZDhoU0FDQ0o0ZUlWZnJkK2k5d2JLcGcxNHJZdFZHcFZmdW9SdDBGek84QmdBQkZ3QnRlRVl1ZUJRQWF2OUJFaFJzLzJ3aGhQSG5kWGxxSzRlOFp3emFnY3pNdzRVUVVXb3o5MklxaFQwbjhCalBQTWFrMExjS2lYUjV5Vkw4SUZtVi95Rkx2SHlvSlBSZjdlSmJEV1FEc3oxMVdxQ25ZdkJEUUhIRmQ4WUlITmFXeWhtbzl3UkFGNjRRWHpxdkwvZzM0cGxnZlpqOUZkYWI4YW5UMkdicEZSVmtuUnljVzZFMFdQVlpoL2MyZS9hRjVrSzUyVzgrWlQ2UWNOWGtFTnBNcDJzYTJ3a1lDYzF0dDhpSFhEMldnOXF1RTRHcTZucmlId0ZFeE5STlVXREtiamc5N29lSk9RNHVXcmwvN3ZPaGNTOXRIQS9RMEljaXZjTTBrNXBSaWxaUG5JWkRld1JsNzRTZ1NMc3dkMDFUQWU5bFhnVFBncGFOWjdpampKdkg4c3ljVEYxQngrOVVmZ1k3Z2hPS0svSnplMDU0NFppalorZ3BmSGNtUkJBdE5hZW9jNXNFT1ZNeHV4SWI5WGx5bUVwQXVQNXdZZjFkV21oRG9SblpyRUNEaSs5U3ArR0R6cHFxYVkzMGgrZUVSRWNjY1Z4SFVSWXRhcUs3MHFtQktNbUEzVDRDVUF6WndvMXJaeGZHekprdXlkNXAzV09yTndHVnA4bE1rUVVpQWQ4R1hhTTRpbGRKa1J4VVB0TVQrSU5mWXJjL2c5WWV4S21IY09Ic0FTQ1RIUE8rcGVMbnc1N0Y0WVd3TjZVZ1FaMWhNVnlmY0FwL3pnUVBiSEJrY0hoV3AweVhtNEhNdTJmYkJ5VmQzak9HMUgvZU41QVdNYjFacDA5ZjI3aHZINTU3Uy9YdnF4eWdWWnF3RGRKMlV0Ymk4TFYwMXZKRHVnWGt6OUQva2FYWmtYeEtxOVBDa3ZlWkZlOThVVjJPeGNxUmYva1VMbkpLODMrMEpOSlVBTkZWck9Wb3k5QTl6VjEzVXErbjNSTWtFZ2VhWEUreC9MRDB4WXZvVUQ5VVpuM1dIbFhjaWJwVkdzZWdtdVZyRzZvOUd2cjlNNDE3WG5tYWxaTFExWVpZL1JiV1h1OHhjRlRNR3ZDNktRVk1peXhLVDF2Q1ZDRHlqL1JCSTBMS0xEVjM0Y3gxamRiUTRkMFZYcjhJLzVRaUhUakVlNE82ZDVCZkV3MHVLQzVTQ2tDRmtoM2xyQjI4ako3K3VUT2N6ZUZXblR0MjJVSGYrcEhBS2xicm1YaUhEUTBCa1pLYUZlWDkwVXhnVFRFVU1FMFVNbTNxSzBCUDdjZENTVUtIUTl4bWdoZG1xamlIcDFlZFV3K0hrYjJueVpCL1dNUzdTaW8xUFNzZ21HaWU2S2Y5M2V4ZDhtdnhTckJEOWl4ektZK0tiTUNVRFFQMVMvdXdhT0pubWYxZGNESkFESDlrVGE1WHhpa2JZY1hvcUpEbGYyUE1CUG1ub0ZXaEcwa2VpbmVkMkxiNHNnbFBtZEF4eE9tS2pqUDVVTkN2T0xiQWVMLzFKYk0xMlpZeTF0OGxCZGNMSlZSeWIxeW5yQUlDSTdnNGFYTHQ3QWR2Z1MzOG8wMmg2d3p6WnV2Ylg4d0ZYY210UnRQa3VGNTdQR2F1QmlaOUgyUEJxUjI4eEJSamF3aWsyQkYwU1dEdUhodDFRMVJoZXFRNnJHM3FvMkIwN0lFaEdMQ3NmeFR2Y01VbStNRFlkOE5BK1ZJOUc0M0VuZlh5Vi8yUE03R0JtZU9FYWMwN3dhN1p4WHRuTWdzOU9MTXNhWUk0Qzd6ZTBCUzFucXRRSWZRS2VYbE11dUpJNVdJRGxDaVJuZGNjSktpVkhISWJEWVlocTJOdHZJQUJLV0hJVCtPL2YrRGNkaklMREh3bW1mM3lIUmJsR0pscThVNUNWald3ZWkrMWJCbm91M3NQVWU2R25XOW52ZVpoaWRFVE1BT1ZwTllMYlUwZWMrOHpKdnNFUWdoTDlvMmVhaEtacmc3amJSaExvMnFQeWUxaklUZUZEVGUxQUgvQlZMYlliY0I3a3BUbVh1bmdEclRIVHI2djluNXdyZk5OSjlmOEZHWmJsYVZKRG5XTExxSklRTnZzRzRSL3M3WTd4bk9ZOVg0UXpkUmRzZ1JhS3JBVHY3TnZYZWFIYnJKS1FGUFRHUHBzcU8rTTZvU3R5WUFWWVNEemhkczd2dElyckJGNTh6V1o0WmVQR20xTTcxT3ZVeFdBR011OXVqaG1jdmNXa1FtbFhqZmVBQW90TmwvOGdYNUdQT2h5SmN6dlMvc0J5QU9MaWJRTlVObHpjNExraCtoN3NYck9WWm12bGlaU2hEMFF6UGNKU0NDRmN5M29scklqQWU0QkRadHlrM1hLOWlPelFxYzk3bmNqYzB4SXJkYzUrN2tKZElDd0wwcThRNnNveFpScDhaOTREbEEwTkFBdS9waCtJT3dkYUg0WVlmUFJSYVBTN2V0QTRxdjBhSGNTWUtRVkpsZExrRDBmRS8yV0ZpZUd3T0pPcHNwNWRZRGlGZE5oQ0pnMERUdC9Bc1p2NkZTNlUyTGN0SWJmTnBCU0xhanJ0c0JpUTFtUEhlYnplTlg1TjEwTEVSTnJSd2VSOU5FQk55aWlTckJ3QjBvaVRFM3QrZ1MrcHZ4a0FwczI5M3pYTmNpSGJMWlRhcFRldURXdldmcUhzYlVGL21wQVl5WlVhV3NkdFhQbk53Zy84aFJIL2ZkNTN4WDV6Z2pWK3ZwbVpQYk5pSjJJYWk2dU1jRlMxQXhTLzFBd2h5cW5TWUVKZVFrV1JGb0FUNEJENHN6WU1VS1lCU04xbDlZVjYxcVoyVXlvQlJHemtBa3o0aDdIWHZQdm0zNTdoNDRUTEpnY2toM2ZTVGc5S25PUExNSm5XV1diQUoxODREcThKRTQzQlNndmp6NElJVFlmQ1U2Rmg4QytVVGlzbFhLVXdHUE5CcDgzSzVzZmRRZEpEMXAwbUp1SVBIUnBwQm9TZTNJcm9acUhBbWxFREdOSVBFTm55NjFQV01HZUs2U2dQL2tHbUtXcWE4RzI0eEx2VG52eFZTeEhtQmFXWDVNUzZSMTc5ZTFiN1dLMm13VTNEcGZMMzgwNGZ5amNxT1FhVXBReUFjS0xqTUwyaDlWeHJxVG5LdUp6WXdNRlU5YXJqNlZyV1ZjSHVQV0VUUTlkaEg1bU0yMFkzMUM1N29kQVhuNm4raHo5NUw3V2cvd3dzNzE2OUpXZDJ3QzNlSHdPeGtTamI5b3hMQ2swMHBTTCtLOVF4V0tuQkkzazZJN2g0VGpEN1dTb1JDQzc4R2pTdmQ3aXZTbTQ0bkhjMXpDMFp4MFpjSEc3ekQvNGFxQ21KaW5aa3liRTlvNlVHRFR4VlF3cGRTcWtEL1F6SW5lVlV5dXB5c1JLNWVKRVdBdGFtOXY5MUg4NDk0bFIwT0hNU2xOSE5QcUpoTGs2ZEVuMVhUWjJYRU1PaUdEZng3eVpLN1hBZ3Ntelg2K1JBSFFuMUxKQUsrYkQ4NVlCdVI1Q1ZpdWYzRml3Z3RoZ0RyMTZ1ME5ZUFRGNVN5dkVXY2p3Rlp1c2ltNEc2TllERVhUd2ZQQjRrL1RFdkpBWTN5M2l1d0djOXk0VjJOdExRbUlSVC9qNk01WDlYWkc3M3ErM2t3ZHVoazVlK3ZGc1NReUsvcVRobDVkVk9DWi95em55TEpUQUt3RWhRdWdVTWVCc1NBVmNEbU04aG1JRkoraFEvdVdRc0gvZEJIT3hHVGlRcWpYZytSNEwwdmZYYkRuR0JLZFM2UlU0Ly9KMjM4dFR4NTBxa0grU08wMmtRUUs1T3ZhcUNzNTBXVy80WjdrSEtTVERMYU9xeXVEaGVPL2FBWm5JZktUQ1M4VzhFVWpDUUc3OW1INFhzY0JzRlNsbWl2ZExwalVFaEhxWC9CSHRNK2FXdzhwbEZGRE9wdmtSU1BWaUREVlZleDV6aXJnakRIRUt6ZDZjb3JHdmhBQTl3VjFkVEcwRlE5NFJheFZNZFJiSm1LeGlpRy95cnd6THdYWkVVZlkwVWJiWkovaU1jeW5ucFRZNWpkSUsyeVpscWtOaWhtS2N3L0w2MkJvWHFYbHFQUFdmVHJTd0lRaHE0Wmk4eVM0bGxDM1NjSGorQVhxSzZEeVBQQzlRR1ROOTlFSXp4dGdpSkNOZkt1NUppQkVWMnoyYkhMQTFVVVlabkVaRzhKYjFEZjlUclFOaEV2aUIzUlVRcmVFYXJmazJUdFNBZ1RGVU5pL2NNRjQyVzMraUU5ZVQ3Z3o4Wnpmbk9IMjJLSlBxUjFuOHFCb1dFQThUT0dweGFZOGFvcmV1Z2YxcHhNL2hVNURuMnNlZzNCLzZTTGx2RUlUMnJocy9kbmJhdElYdC9ibmwvSWRTVUZFeWd4MUV1bnJGZ01XcWQrRS9BT1A5VUc4VEQ3N092UnRMUHVMaWthaGFZVFJ1djhUb2dKaGlBa204N2pILzA5VnFUS2lsSW1RVHFub2NTZUVMV1pLSkZEbEt5UHFzNXJMY1pOTmZhRjJQS0hpTWIvUGx0Zi95V3UySUJtbUUzUUdsVXhTU1NTQkdWdkt2Q0EyNGFmNUcwemE2Ump3RTdaOEVqWk85OUQ2TEkwKzBBYnlxMjFsdktrYVh6b3RCUnVtdURDUUU2WWlNUXprVmwxakE0c2F5eldGQWJ3aWNiY0lMM0RmRzU5NHo2eUViQjBXcFZZZ0xlbGJ1QWIrOWRGNlRpT1h2enp2RnZoOEZVSlR0azI4QWtzZlIwaGZuMlp6Vm5KT0xHbUdOejAwZHV6Z25wR1RXeFZDQ2JwS3JaeC9RcHJzS1NMOGRMVlhnT3RsK0lXWDlmR3V0NVlnR1diSWc2Nlpyc2pDS3dHVEhreE44QVdiaUpjblIzNTRuOWlqRjJkMUF2cGVpeUM0R0NRRlA5S0VYWHlPVng5bVV3VHY3dTY5RWVsa0pzQ21wNGVXWmg3cVZZeU1OaDlKVnlYWEtWMjJUdnNqbkx3NkFJcGd3eC9kZEFONUM3L1dpTCtZRkhkMHR6TFhNbHF2MlRiSXIxU0k3VFVROURTdHI5M2dHWDZVSWpzalN6L29jY2Q5QXluamxmVUk3TzZTNTFsd2xaV3hVcGlqZ1FER1ZzRktYK2VIZWYvUDR2VE5NY1oxQXkvQnVRRmpzY3hhVjNYQkhTbkdhQ2VLaGlpcDh0UnFBcUpGYytYYkZCWmozSnQvN1NYcDVkd3FyaXg5U2QyVVZKL0FvT2ZwY3djY1g1WGVZcm5oVlRQbFBZZUxIS2ovRlVUOXplTzZGSUthaHdJdFNRS2RXRmhMU2NLWVBxbERnaDhUcHpERkxGWVg0cFo2dFpUVU96TjFTWXI4MDB0ZEZLTDVKU2pJOEtueGhSTjRsLzM5SGNPdHhYc3ErV2EyQ0w4eS9Xb1gzUSsxSStldjZxWEsrYnZmaGhUVzFmM1hIcWE2ejBGWDBJRTRTK0FWa1BYSlYxWVg2VFpuVlppa0JGMFZTVWJGTEhVbUxtYTBOZmxqU1lWUW9PUkw0NHdDV0hKY0YzNHN6Tkp1RnZvc013bGMva01hQmtaU3EyWkJzWHhERFExcndsbmJUTFliaWZiaVpUOVcwcHJ5ckNrRFovSWFqS2JhUVlHZkpqZjdiSk91WWR1VW9aeEZOVE80Qk5pdFlkRzJPREc0bEduWWROVmFPV1lCWjJMek5McTEvOUN6MFVXYlFpYlRXcE9JUGcyZkQzREVwMFN3ZEkveWdBUy9SZGltYWgxbG5tZ0ZKRzcybnova0ErQkdHeVJrRzN3aS9HL2NFcHQyMGNYZ3NXaTBPMmVIMDdmWlc4eThHU09rZkJ6QTJaRTJENTE5VmZYOVJQYzRYNTA3cm03VUlaNG9xa2FUTVd0U21WVXJja3VuMC8yc1JCMUVFbk5DckdqU2d2K2tvei8waUFTWVRMcmxvdGpJbmlkSTk0amUvS0lsY1lpMUMrQlZOWjUvUXVwNjNnQ1JFWFBSZzd2UGxhV2Z2WDl0TklvWFVSY1Erb1lzbmdOdVEybWRpZXQwUmp5enloVWtuNUlSYWZHU0hNelE1NmEyMUNYZ1BmYzByT21pOC8zNnFGbC9uaUlmV0NPR3N5YSt4UHRtL0FQTFo2UG1qVkduOFBibzRFQVNmSGFtM3BjM1FsSDZXMDQ2WE9jSGFDNUJSb09ONEhyWkx6UENkKzFrNEx5T0FyZy9LY3paWG1yMGFQWldkU3U5WklRQit6RXREZVFFSHc1eVVzd3lsVmRYenZsdEJWYlJ6M3FTWU9sWUxYUUV1cWwwdTVUZzZjMXo0WTVhenZvdzcvWm9TTjYydDRvU21wcXpodXRPMU1rN1ZuZjRGbHBiMWNEbzZOQWhPeUVUNmxZVjFkUVNVVW1QbHRCakJZYStadFFRLzBYOERUNmY1cC9CME0rK0RrY3dBbmo2VVFiZjhyVCtrWG1nR1M0RHlwbDFyQy94UU1JRDRBZWl1enYxREZUMHVUTTNpbXpHSEhTS1JRRWRDekR3aWNYR3lZR3hvQ1ZHVUk4cDU4K0JLbXhCWE55QWdwdG42cGxVc1lSQkV1SnZROUYyeVhQUkt1VXRxQk8zU1Qvek5zSGp2Q0tVQ0VrMHdHT2NIVnpFMGJvd3pxVzNoNHBxTTl2OUZrV0lpRFdMSklsSVNvbmpOcFhkbTIvZmFjd0F3TzNMTjBKc0QwN0NwWFFTSVNqVlkxTitUNHE2dExuSXNxMlVwVkpkZWFST3oyZDRNczU2MDUwZGlHTDRIL2ZwMFMzR3cyaHVTb05NN2lHYmFCbStzRFFiWDIzd0JSN1hIaGlNVWpJbFJyaHRHUzFJRi9wNFgvR0xSZXVQRFVGTklDeVRUOGwyb2FoenNQMWVoaFNsaWlpRG1YeHpWZnkyNkt2ci9kWHFqc0JYamZBWmZCSlVxOEp0dkFJcFcyQlppVlZLVzJWbkVpYXZBc3BBZ0cwcmdYQmNVK0Fjdkt1TmJ4REhQa1IrVWUrQTNhRkh4UGpyUEl0b3pvaFFNbW5vN3NXTCt0aHhQdFEyUDlXYWlYS0dKRHlUUG9LWmwrS0JWam5uNi83d3NBSmVIUWdQUVpQNmtXU3hUNWRxaFJXcDB4aHJvQStoendUdENFZzNaZFdFZi9oU01wc2xMM2VjdzJQQWJDM1J3RGg4bklqdnVUOWNDbXhEcEQvWG14OWhrN3o4eHE4Z1lQWHl3YjRwMDI0M0pISXdVcWs2Z3RZbXozSzRoejNkK0xXdlhYK0tqSWE4VkpXR1g3Q2pvc1dCcGNUdE5kQlJCeFhoMUhRRDdESXljbnI5NjM4NzlzUEhaMTR1WHAvM0VSWnMzZlltVTlqakEwWG9MeGpkOHhCRGJjaDUyek93bGdSTDN2YUtWZ1ZpY3lyMTNSenZWZUtaZ0Jqb1JGRmtOL05RcDFsQ09VTU9EOG1VRUVuQjBWcEx5N3ZlRCsrcDZKU3F5SzMzNHQyeVFJWEhhSHI4MlErZTdiSEh1NUFPVCtNMkd3UWRaUVpVVTZsa0w5d09RYlhPSnUzdEpPeXRLUFh4UWR2ZFB0Nml5bUw1SFkrTDMwNWtESlBYNG51ZUtsa3lLQXZwM201RVRaaklTV1NSdytoTHhHdFRBT0E3VjVGbE9zMnE2MXMrMmZkN2lHTUU5RGhpK1Z3aGFIU0hTZ1hzMXJjOGppQm5udzVkdFlzL0pobENFSy9pbk53cFF5c3M5NEJFQ2pqM09lQkJCblZnYVJUaGI1MHR4YjVDbFJFaDFDU2ZNWVFKMTk2NnlETzhDMkZsQzc4dm5Gb3g0d0hndktEZ3Q4MnhsUVpHbERYRTVsSDZKMVpRVVl2UjAwNUEvNGtWSFh1c3ZoRDNsQ0txUHZEZjJtUWZiUHprR0xRTXh4bVdLOUptNlU3WXpMdzUxY3RFaloxdCs5Q3dVQUsxa3BXZEZxRXZaa0Z2MVpXbm1XVnVMN09FazRDZHFvNm5lemZtN2M5R3VRUms0Ri91aExMSE5jQXhHaFplUVZ5b1VndUxKeElJUzFlVHRSWG1QNTRaV3FrV2JZMWw5RTc2NFRHbGxUK1BTempjTUh4Y3d0Y2JGWHZvYlFhZjNhTnZ2NHd2V0RGMG41U0ZwT1NxZVhRMjNBV3hNRDlSRDU4RUFFak10dzZVOFFLNkcvWG5aZkI5UDBoQWdlQTQ0VXU4QTJlMnNuMmtoSHozUUxmVk9iQXF1UkMrREkzekg2SlNZK2Y4Y3lCbk93ZnZOd2FDTVBaaUhGUTVWR1VvS01hRHk0MU16TWpZdzk1aG1NOEd1M1VVVEFFTXZZNUxxQmtNTkdUa0xHZWhQYTdKcExGMVJMaWd6ZzkwQ0NybGNDMGwwZ0NWd3dSaWU3ZEpaeUhVUXdGak1zUk9aR0xMUVo3eDU1OEJYeFJaUlVyUGNnbUgvcThwVHNWU2dDWU50TUxrMmpWV0p4RVZCNDRMUG41dVZkQ0ExQTlYaWdCSlZrR3BBQk9sd0swbkZGNWZxbUltN1NsSmpFejIrbktEa3pmMlhjVlUvTGlQVEJvZXZ2Q0EzcXV2ZVVDV0NBd1UwQTNYZHY0YVVRQ2oxVVJUaEc0TnNSWGVvNHZYL0sreTZ4RzIwMFJNeUk4VW5GZCt5bEwrY0RtU0xyTHRyL1BKaXN4ZEs2RDFQYXB1d1R0TEJScmdiMkEwZDdHTmhKYkZ5K28xTjcxNVN2Z0hGV0ZNa3U2ZC9oWG41V0RMRzBRZW0zMGVncnhjUGQ0aEJDRXlNYjZaSzh6dDBXRlVZaDNVSnpyaklXWEtoTlJCRTBpZk1MQXhjZE1QQUlIUmlrYlkyeFZ5YnFuNVh2TEp6V1k1N3N0UVA4TzVGOGNET2Z6cjd4NFBoaThjVnp5c1V1b0RmbUs5YWxqYUFUaTg2R0tIb08wZXpFSWt0MWR1V2c4M1p2dzVvV0xmWXIzanFNZms5U2F0bFl6MTIrTnE4WGdYWTRMelVBWWJPNWdkdHdraHdmWnQ2WDU5dTVhSzFZRWVRM1Z4K1ArQU1aNUJtTHFNc2pqQnZZTHVnQVJpTUhCdnI2Y3hnYkdQa3B2OExBVkhDZDVVY0sySE5jSTYvaXprTXVoY2dmR3pDeFNIKzNpZ3dpOHlGMnBoOTJzN2pWYi8ycFc3bFVjTVZyeXEvRkU4bHlUYWxCV0xIWmYrOERNc1hpdVc1cGtYSXRWTzBDTVZnT3g5NldraTBGK0k4M2JXMGJnRDhoR0dBMXRyYVRPcEJnY1g4eGxCVG91QWUzNzVPMStiVDlvTWFURTFZQnB4dHgvQm5EZEk3bTJ4ekI0V1B6Nm54VFZZRmZ0YWM2WE94QllyTFFNNTRNMXVEMU9QRzBpK3lpU0tENkE1cldMcjYwTWtYSGdBQ1Y2WlduMU9FQVF2N1dxRzB3WGl2NzBEMUQrMTk3c01MUS9MNGxUY3dGaTBBRG45NlVnY2ZVR0xGQjVKemlBblZjeEJ2am52OUpGT2pIQVMrbVBxQXBIdGFvblZjcjlqZktGaHlGNkVlYWFIbFVGWU9IVGIyRnpVZjhtN0dwYm1admN0SWRCazQreG9KaUY2NmNhTDdhb2kxNWc4RWlaUXNReG12T3k0V1JXU1NoK3c0djVtS2w1T3BkaXhKNUU3QjJsMnZ1UlY1bHYwVWJ2U0Zkdk12c20xUUJ5WS9pZEI0R29tS3VDVnBFM2VWZXFUT3Z2UE4wWWVPcjhzT0RNQVJvdmhvYng5a2tpdElLdVhWZmpWQXkrdkI4c2xvcWFCanJSMWhnUzdXU1dFZDU3N0lpTThlM2J6bDNmL3hNYnBjZkx3cEpBZ1VQRlZZMTBKMWRSMjZkeHFXRS8yMDNpQm1KSHFtS29tcmhNYzh4Y2kvSFY2NjI3bzlmcG1XcTJTc2F4YmZiTy9MZUs4bWF2enpYaHN3TEh3TnlXMDhhVCsrc3VIcWhRbTI2VVA5WGE3YkVaVktvb0NJS3BsWDY4RUdLOHFhUUZYSFhuMDhzQ3VSMyt4OHE0bjc3RS9yL1FTZ2I0dGJXKy85c2lGWitIQmtQZ29MMkVwaVdpV1Z1UmsxbTUyelQ4R00wS1JHU2JQOXJqODhnd2xlQmRHTG4vV2JOSDVBTUxma2lIczlmYmY1RTZQVDJJcTZXY1hEem1oV2VRNkpNdTlNMG94OHVxMWZtaDVvSTVnSlhuQUtjaFIxclY5dDUxUVNHQjJFcHlJemkydFFwTGhpclRqSVFCSG9ycGExMlBRZHBZdDhGVDM5QTF2eWFOSjN4a2VrM3BEV3g5ZWF0QnFWRDZBZzVscWhXdERBS2N1L09JbU9CRVZHb0laZVlEQmQxSGtsSGFDOG05VWpqbFdDZlFMbXlnTVhkbUVJRjhCZ3ZRbXBkTGd3NlRmelBGOVpWc3ZSaVpzUWhqZG8rRzhqeERnTzF4Ymk5SUg0ZEVWTVhWVG50dzhZQ1J0ZDk1cEduL2RrS0h6NnowZG1PTmJnQzhXdW4yVzlMN3BSeVJMTWc1M2RwU1NNTC9aR0tXMVgwNmJPUFR4SHBOYVVIQWNmK0hSUW1KTHJocUI3QTZ4U25ucHBLNlowQnlEM2QyVzMxWUVPbWtQN3lKVVUrRmczTGpkMlNFbjZKQ3Nmbk1qZzV4Vk0yL0NkcC9Wamc4RWJTa1orNGhqT0Z3dkR0U3pRNzMrU2oyZDR1VDk0cWQ0ME1uRzVDNTI1RnBnd2dlNDBiTGtlY3RmU0t6ZVk1Z1JESEFFWkVzRkVkWkpDYTM3WWJqZnJxSW5wWXNJYzVRNXRvK2NRL2Q0a040OGNrVTExQzBUYjN4MzhtNk5sbE1pUHJjWnhnTE1acmZJMCsyQ0ZiYXMyajUrY0NQS1BEMHZabDVld2RTMnVIUFkyM24xRFg2QzltZDlsaWFmVkh0eWp0Z3JsQVpYcTNnZ3BIY1AxZCs2NDZZSFpJQWJSSGdqNzVwYXNUYzVaY1pPWEliQkdiWit0T1VlL3EyU0svYmx2aVdjaEVjbG9kU2RYZUVsQmt3a1B2MFdTbHVMM3hwTGhXVFFuZ1VyVGVMUTRqNTRDMm41cytPQ05MN2JTNVNKbVNoZzFIUzFqenZXSEtRaTVqMnlndVI5QlE2RTRMSzd1eGNyZnF2RSthT3J3S0gyMWhNTkJCWFlXdXhMbElsSDhLU3QwbEd0akowQ0IrUForcko2UklDa3RDeU5YcVREME82UkhyOWFiclBwS285K0Qzbk1tTk03aXYvQmoySkdsbGNtcVZGQmZraDFudzlNUTZRS2l3dkdYWnl5YTZ6WVNMczZxelc4VGVnc0lMcTNTYUUzNmxBdXdzR29CamFmdFg1Q1Y0QTNJVVdGdGwvTTE1STVLK3lpMVJUYS9jaHBMVUdDMExtSk1sZ2pCK3BQaGhLbS9GblRtaTRMOS84NERnL1RsRGFvMitIeE1SSzF2K3pCaDdhdnk4STFXN1ZmdmczM01FNThwOHZTeE9nRER2RmY5cHl6NFRueUUyNkcvdEU2RDlDTWZKSmRKMDhleDQyajBTbHlNMXdQbWRxWG4wOUZvVmxSdmpOZFRIMUFDSjg5ZEw5NFhxRXN3d1lZZE54Z0pKREEwV3BjblNkNTFpSWY3SlA0bFNOeU1PVEx6dlYwZWtyek5XdE1WbWVJS3JTZlBSMVUwVnBzSVdMV3RPK0NhM2hmaXBmUGxJcTRka0tTcll2clFmV3VJTzFUdVdCNWRRRDRTeFhHam91SDFNRVA2dGwxNEpMWDloUFpYOTROWXp3OEE1TzZrTkpiUEZCOGVQbkpSbW1tSXYyeUhkc2x1MFdTOFh4emVqZlVQbEVjVkFTNFRSSys5QWlRTUkrVHFSYmhsNno5MHZtK2FmVzNPbWhjdFlVQldCQW95SzB3eVF4THVNdjZZRnJIRW5ZeWZLZk9UVVowZnFEOTQxcHphMGxoc1kvVE11RndoRWtzU095SitYK0J6VWpLZDFNRWExSVA5RnRYaGtEckJmRHlGMDhvaFR3VjBUQmYzR2RrUWQ0Um10OWwxY3NMU2hpOWdwQ29BRTZDcGVPbUtIV0loNlllNm5qYlBUaC9STGFEYituL2RmQllkUDJsRzlaVVhQeUpQK1dUMCthVzFQYVJ6MXpZQWNWUExtaitnU0VZaFNvQldhNy9heE41RDg5bldRWXN6d1VXenljSzdld1FEK0FoSEJQZEtOeVExRFFZdlVNaWVwRDcwcFBMY1R5NlYrSnBLai9xcWxSenVlRS84b09EMjhQNmRZR3pkTkthYXBweWRNTzBSNURyY1RFVFBHQ0M2aERCTk1kZ3FzeDd0Y0hzRUhlc0QwblA0WDFIajJhaWkzb0l1R01oemxNVWNQQ1Z3RVB2ZDNWL3hjalYxRnM0aW13Z3l5RVUwcE94SWthSDd0UmFnQWJNSjZyNkxRWUYxcS9tQnZyWFhoVEczUytYdk1PVnl2elhXWittRXdNZ1RZRDJRbWhpYjF3MktmNnpuVEV5UFg5dTF6dHFsMDBWNGp3ZjhNaEIwdHc3b3BoQldWWTJBcTlnNGFyYXlFNXJLQWY3cE1QMFdkYkZSWDA1UXorNjN6SUIzMldQRDVXRVBCR2k1TVNjbWZIUjZlTFd1RTFMQ2ZnR1I0Zi9YZGFBcmZ0cXcxSWFGWkFEdy9tWkwxU29zbWFZNFYxZDdtdmhCdE1RZCtuMVducnJRQzZxdW81SXhuY3pGRVZlbTJCckdTemlGV3ZhNmhtOEg1QjUwaWpraEdBUVNBTmN3cms4VHZWWWhJZmhueExyenIzNGlMVmxodFFnVENyekZzeFhUUzBrY2JseWNqM1Znd0djVHpwYUZUOTNGY3ljelI4MmZiZi9pRERSQzZxL3JqZDNDbmkxemRmbE8ya29OelNlQXA3aHlZczR3R1pkc0d4cUhmdEtPSkQ5SHRJQlphS2ZnMkp2TmxOcjNZTE5Kalh2WHMwMG12ejVzRkF2OUZjT2xlcGdEa0xSdlZCKy96cnp0WGJybFJuV1oxcUF2YUY1QmVPUUJBeEk5Z3RzWmVhUDFSc0doQVJXMkNGWnpzeG4yLy9rTGdvVG91cEFRRUFWZFpBUjdRTVpKUGVEcGVLazNFOW5TOFVORHZlc3N6S3BoNVhlUHFHK3UxQUZwS2FVMEo3RWZPR1I4TWNGYmQ3aHdZaVlJZnViS0JDaGx4QmhiUUlHenhvdDNWUDV4a3ZHMm9nVDB3amlRWUpmNVYxZDJWa2JGQzJhVlZQUmM0WGt0bG9xVG8yeG5leGlwQmZCK2FhZkFaZjZxNUErZ3U1MGZ6Ti8wdmZrckpGZUp0T1NEeG9wUDRpK29XUGY4ODI0TEo4ZHZNZitBTytxMmVxMjhGS3V5YWFobjBoRHRXUTJ2eXdyUWh6SStiSnZHR1RyRFZWbXMvTmw5akc5ci9KL2tBS3BYbnBkSTBxMEUwVk02RDYreHB3VFUyakVQaUx6OTNUNW1RQ1AyWnhtc0FnY0pFb1Jzd01YVkV5SGJxaFlPUTErRUc2OW5KRzJZOVhQVFJQL1YzYjZTV0o0dTg4cTJIUm5PZUw3QnE1Z0hwQ1NZOXZleHhXckl3YkNEWXpMT3J2Y3M5b1pMQnZZamtYMCtTY3kyT043aGVXUFR4dVVYS0lZdVhkRDE4MlFXSEM1Y1g5SjRsL1h0RTZ2YUNmU0ZEWW5hTUlrZGhoUGpic3E5dVFYWjZQYm5RYzJkdWlwbWlBQytzcWJnU3JNdEhUd05JVmx4T2FvYXdaenk5aURCVHNFTy9PWjcraWEvSkFtSGpXL1hjREJGTUhmZFJvakxXTi9CTU1yc3ljRXZOdWNCRGo4QWlVbWIxZjhobHJSVjczeEt0OW5ESkNwbXNGalpibDk5ZTZYd2RNejhPMEFiU2xseTNKL2h2alk2Sk1ORGk3SC9YaTZjUTg1TzlnTWNCTDlsRkNmcStNZUZUeEl5a3plTnhGcktjeUQ2MUs4V0Z5M0tONDB1K3VsTnNzTTZEWmRRWW1Ba09LeVh3Ym1sYzBHbXpCSVFqNnhtRVcxOXhuTnJXN2dGU05LZWowSmtxZWFXcW5hZ0E5T2s4QUd3SGR6emNZanBFQ1M3aWtwVnRteXN4VzNpVURVNXFzUEFsMWxaVld6U2ZaWVpMUEcwSFJKemoyYkRrQjh1YVIycFF4VXIrUFpRcHZYaHBzREFQT0xWT0dKYk9HbTlHWU9VYjJKNkNOSi8vTnlKM0ZQZ0xGa0ZWeEVWZGFqWE42eTNpc3JkbXhKWjRxNlNNY1BFdW5HNUkwM3RMRktpZFF2Ymt4NVBEYmNMeERBQTZ5M0JUMFpWL0lVdkorUy9sUXc5bDQ3djhzeFNSSG0yQnJxNURQa1B5L1hmYWRheis1V0pwalFVbXhIeXljUEpjUHBUdkVFY3ZrNXFIMjJSdHQ2aEdVSE9XcVlLY3B3OTFINDZsWFJIUkI2WUlxQjhhM3R2ZzhsUHdzaHY1S1hYZ1kzQ2poVjNvNjduL0dOSVAvMFZScHVYMytGTzBVNU9ZcjRXd1BQYStTZHhjdFlIN05RQjR0SjJDU2Zuck9ZM2piSHU1NlYwZDBKcVcvc0YwMlh3S3dXRlZudmxmbmNKVnJxSThzVUVyenhWcC9pMjVGRE5GSlYyOWtHMCtkcEFEQnpCdENKcGtsVDFLaExIZ0F3dXdMRXowRlRTaXc0M0RZSGpWMllQN3hzOWQxR0RTU0JLK0VDaTZtU2FPWnZiUDlVenhQN1hKY1F6WXFzei9nNm9nK0RDVDlybUJmbW5MUmJNUWFxdTRsY0lQZ0hPZTNUMVYwcmJZUG5zd2xvOTNsa2tlZSsybkswdEJ4c3NYTk1sbzRQVE0wbnJVRlo4eXowZ3hyT2hqVWgrc0hMVFdXT1pvRlVTVWdCYVJqMWJFRnJEbDVROEYwRGQyWDlDZnpVVFl3YUc4WWFPVU1OSWlBVXVyeFFKMGRGbit2ejhPTzdEYzRHT0VtcVo4cHFiT0dLT0RiSURJR2Z6MEIxdExKemFLNEY4eVEyRmFnUmF6a2ZrVmtkZXI2N2QycHladnhJekE0TjdFMVRyQUh6RmdUQndqdUY1SGVCbnBrTEhtbkczVEhsS1B5K1V2eVpZRVA4U3NLZy9pTS96cjB6UnFaT29WWWFIb2lZalAxbEZ5VTB3K3dpRk1UeXFKNmtvQWMwY0lVbnhpL1lkRW5icGwvNE1qQ3BGTENXRXJRdTlCODhlZktQSkhhZHo2OWlrODZQbDFzL0NqTDQ2TVYyL3orb1psMGlIZC9OVXpLRW85MklKbUZvQkpxWnA4aTJoanVVYmZIM204Qi9TWnRvOUY4QkNwb1Z5WDNtZ0MrdGlDRGRUTFN6TEJXUE5BUEU1TjRkYlBlKy95LzBOaDN2ZGRXVjd6U2lzTlBiSHE4dVoxR3hicXAveldMNGsxTDdsTU5pUFJuODdrbUJhOHV3cU90bFp5dVYxTldSdTVIa2RpWHRIanUyajR5SzJ1MkZINnJRT3EzaG5tZ0dFNkQzTzluK0xhNVVTNTRDZklUZDdnSDFVZlBtU3c3T3l6V0NzTlpqYlo1Z05yTVludE5BYVpHZWdBNVFxY3A4M1F1ZE9oT1hqdHFiUUFKclRUMFUrN2FRNk1WY08vZE03T3pUSTJzN1ErWHpnZnVHdUhwd3ZVWEhXT1kwYVNSclB4NVdMaHVSV05tenVmUHJuekU5SlIxMXFtOGMwWUhuRkRReThJZ3Y5MHN4U2czOHFJWnB6aE41VHhuQ0c4S2JZRUxENEMvTU1Va292TGc4b1ZqZnhZUURFVm9YcER6clhUNkdNczJrUnBnWVh1a1pBeStzNlN5TmZwQm5jQ3JCVW5BU2lRR2t4NmlVcWQzd2FPNmNXNGFNUjc0L3grSnROcjNaQmJXL3k3cUQxME01dXQ3YmYrcThyZW95blZ0UDhFdDN6Smp1em5hMW9lZWMzTnRsWWk4MlN6TnppdmxQWGR2YnlrcFZDMFJDS2VmSkVzTHlKTDZmOG5Ja1pqb3ErSUJFTHlQazdEK2NmZnFmbG1STS9aRDhEdmsraXpMWkFkVFZGbDljSzJQNE1PVXhKNkF2VHRkZHhHNmNhVlpSWE5SWkRiNUZPOWlNZXhTTmRKeiswMVN4eXF4WUh4bzNLc0Z4WHVwYUdLaWdZQ0M0MHowam50WGUrVVhRNUZtSlluZHE1ZHhTUTZueXRYQjhPU2Q4VjVCOGNPSFh6bFZDanozQ2ZnSEpJdUJ6cmlPRFhqMURhRnM1TGNSSkhFenBVRmpKR1BwOUFLVkhVcGJPRDV3dkFRbmNUdE1mdzlXTDk0azh6T0RTNDFqK3lSRlhpZlVWY0hzY1NwdmhJNzVKSGE3bUg2Y2tRZTJ6bEN3UUJtZDBjMnJLQkN2ZUcrWDJqUXN3WWtSUmFVREZjL25KYU8zZlYrWlYrRFBxYnh1bDA3OE1JRFdvVk5HUXh1R1I1VnhVOERwd1pnUTVaV1lHSUd5ZEpZOHJKTHRZdlBmTDJSQXB3cGUzNC9KbUJKZlN2RlBjUUYwaXVrYnl6eklud2Jwb3FSUDN6RDlvU2lvWWRPVGdsVmppczJtQmt6YUxmWDFtSmRlbzVFd0hYMmR6dEtoRzZTOC9vYkdUVzhlN2tETm9Hd0Z5UWVKNnpaNzQrcHNadG5nZHhxRE9ITm5acDd1UDVvZ05BajBheGc5NkN1MEhYallCNHBRTzB4MHNqaE50c0NLMUdOUU41ZTJCN2F2dlhqOUNBZ3NaOG9HZ0UrWFFwa0RZK2J0QzhzR08xeUFuazRNWmVSTHNOblV2NmlrMEszTnR4TVJ1UlpnYSs2YTdINExoaStwdUh4bUYxd0w0UVJ4UE12UnZCbEwxNlFEU3BHVzRuSWJyeW5acmkyZjAxTDRwV0NlNkpHRjc2SnQ1aFBBcnlvSVNzQjczTkkxT1huSXdaL1Q1VG16MEF6T1d2ZHNzZzlVUFNQUWR2aGUvOHBGYmVyb3RURnV2enRuM2ZYaVM5ZWpKNVRqWmFiVHdQRUVBeWNiU0xYdWRNUXRtcTYwV0Y1blI1YjR5bVRSRjQ1NlplM0RVRlBoRzRuN1NqbWFrVk9VczRLSjg0YzkxSTd2Y0NYT3ZVZ2NVMDJIaG9NOFpRd2ROQzIrYThnUEV3dm5XZ1ptcWsyMXhzalRoMDdlNmhPZloyck5iZHM1VHIxdWZmN0cwTVdaRlFic2M3VktKUmk1NTlzZFI3R2ZTVDRuWWZaWExmaDE1UnVyRGRlZUVNWURmUVg5OS9oUWh5Z2JrU0lFampoNW1jc2dzbW41eTJnNXkwU25md0ZrM0Y1eE5PQ1BzWk9sM0NVbTcwRGROKzdER1VGbFpVMEgyYTJWMm0rbG16YysyOEJkcFNZcGxGeDdzR3BXNllOYkFZMFBvVTlFMnFhS0hrdVZjM0NUTndxSUlRNnJWengxdFU5UFdUVnRMVGZWZG5kN0pwa0xONkppMHhIU1FkM1NrbjZFYlh0T3JQT3pjWHdoSnNnOE5qQkl4MTVqVjVZMCs1MEdDU1JoZUpZbnpWdXhReUJQcVJtb1RSekN2S0V4aW5ybDVaeWF0VjlpTHpySXE1NXplN1FJOUdTVktmZVJoV1RiRk03dk5MOGJYRGdSQWVSNm5sRW9KUkd0Z1NzK0Z0Z3VHRUpIS0lzdGIySllHN0RQei8renFCT0hJZ05Ubm12MkZra1o5b3VxSlNhUG5ZSnNWVkZVdjJmS2pJcmRITS9oQ0dsQ1R2U3BoSkI4d0RncjdzRVJ2VkFTZFM4SVoxZzhDYm45V00xdHdnOE9DR0ZUUHkyaS9kNWVYYzhIOFVOQndheHg0MmlUdzhORGg2Q2VpNkZSNCtjSHRXVS9zS2d0TzJJTmdWU1RrQjJscHFsak12OFBXUzEyTE9ZcE85QnRiaVRwRFBLckhmRFFtYWkrREZLREgvSlJNU2xJdktuSmJXOGU0TCtlQTB4SVFmVDREMzJERER6aUZ5M0FDT0ptTGtEbGF3dUxZanQrdmJPaDl4UXhxMWJ2TXdmQ0xHREhwaVVJT1Z3VHJIUk5nZE1nazZKN2JHM3FlamlSVGlEa3dTeEx3Tnp6ZTNJZFlhQXlSWE1OL3hZeHc5YlNDSTRpOVc3b1oxcHJGOHQwN3FtSDhTZGpMVm84OXBlTWFIZnZlTEUzcitLdDVTeDlYTnBXeFhPeHJleTI2eDRWZmhMcys4WnJvQ2VTMHZwR24vaXM0ZEZsbVhzS3VJWm9qcmI3enJpQVZDMnd2QUJYbDJmK050NHl5RkVzSnNCNjQ5MU11NERyakJtWTRUSlYyN0VVMWFMYUF5Y3VYZCt6dmZDQnEvNGs1bnNLZXlRNCtFLzh4bmJ0MlZFcDJScmNHVi8rMmU4QTVjOUlGblY3bHltelYrejU2TThnNE1NOFpCVVoxY2EvRkM1S2d5djVic3hwWk1XRlNLTDNhYnNxaUZ0YVVCckVLRCtNcGUwWnc0LytscDNnYjN4MVlYaGt5bHhYTTl0b2dtdGFQUUlQeEt5RDFGTHBiL3FzSVFHclRpTDdyNkZsWk9xdGRES1NKM1V6TVRZK2Y4cmJEMDV4VHkvaURyeW1aV1NlWnpFVmMzOGJ0cHQ5K3Q1NVVOWFZuOHNpSEVxV0dndS9nL21QcHJJcWc3NGtlZ2JwVklGTDdDdnBvMitVRExqTlFMVlJQT3dvNDRvNjRWeU8zaGRqOGFBNEQvMnRiSWswMHJBOGpsQW5BdzRoYnlwWWdveElhVUQ0RU1GNnJTZit5dVBpRExJVEtyS281VVg4OWpJUys0bFBTVUJJK0lxdEk4MWlxL1RSc0FpMWNXWndqQlBIWFRqZG1YUFVESDZ5djlyY0RaM0pBR202aGlYUmZQMXBRMDg5R01qVzQ1ZTFaL2VmeW1WbGhIVm9ZY0hRamxLUWtwM1kyNU92d1pVMGVKM2VybFdMQXQ1WmFlcEZCMmZKOFlaMzZFL2NDaFh5N0IrTTBzYzV1V2R3U1kzZHdad01qWmgvMS9iaDdydGNvbFIvRmNpTCtXOEtiLzhFRTVHR3grOTJvdVkxeU03eHo0bzhrOHNlTzhUNGVGQk5KNDh6SVRHb3M4OFVpalFYL0NyQnk4T3JKbVR6Ykx0QmNBUDZqY1R0UVBkcURLYWcvaHppbFY2Ykl6cThvOGErN3dLMjFlMU16ckhsVk5RNlYxVVJkZGZDUWx1clV5MVlkeVlRUmcwVTZ4b2k1TU10SVc1cHQ2bnpjMTdKdTBrNEJkblNVNVdwc0MrK2oyQjBIUUFFZ1F0OGRtaTdpaW82TzY3NGtza29wdTVCSGNqU3dOcUY5NTU0aTBhVGZ5MnVkOHozZU9TaGlZdmdGNTN2ZGwweHB5cUNBcU9tN3FZN1JHZVF4YUdSaW4vVjVtUnJJNXZmbC9ZWHN0T2lmWi9PZWQ5anY4bnhuRXhOWnNxTUVzUStnamdxdWhhZGR5ZUdlNGhzcTJGSmtUdy9pT2w1elU1NnRMWDlZMmRkQWJwd1FBL0xESzNaTVJrZC83WUQvOVd3ajJqTUMxWEhNczV6RTN0a3l5OFdqK0hHQ1JXTURXdjdvaXpad1BHSDRSSDFBNFdqVXQ4ZCtMK2hWT1p4NFN0NENMeEZ1ajZmWVBpeUxLVGMyelljSW1GeDdwWExBekxCSndiOGoxUVp4NkZZSGpJUWFtVDFEVlN0OWNyUlU2T2wybm8reExUNndwdGhxQ3o5cVNUWTlBNWRocFRqL3c3aW1BNDEyWmRzbStLcXlNTXNmZ0w4eFFJcDZ5SVdNQkNTMFN2T2l4RTIrZUpwalBnNm9wNTV2UzZKeGd0SmpPKzhJb1EzaE9pVmtlV2h2SUI4c1djTU5zNmpjSmJuQ2tOVE85V3BIdzZpWEhDdTBwTGhRQ0NQY1JwZTZzM1gzd3FTL3I3cUhLWW12OGFwQ1VRTDI3Skd6VEhoYXJnallBSDRDM1luZnlLTkZzc3dtVmxxZzE3VUR6TGJrRlFsRGJVNmdaRFcxTXdNeDRwQ29wcGswbUIyMTgveW44RkN6TTJ5VjlXenByTS9DdmpCRXBUdTBwd25VaDJ4b1kzZnJjcGtyUDl0VFVUdjdzM1JSU01Jdk0zaGI2c05EUzZHcjVFSDhmK3VmUjB5dkFUMVA4blczVER5Y2xlby9OSXFuU280TkN3Nnh3ZFFXK0NHemRuYzZSeENpcVJrTjEvUXl2aER4d1NhV1gwQm54M1pmZlNBdGNpaThhRlNoSThsU3ZuU0tOcHlHK0EySTJXbzNJVVJwdFlKUnQ3ZmhFdmI5cGdCQ21ob3JsWUlWcmNOVVJZTHg3RFAxRVM0cTdKRE1JQmQ1cjNGWEJ2cXNIWXJJWHhaa0JsWkxEV0xKRUlITWFuaFF3N0ZEUThIZHNrdkFOQXNwM29OamFYdVB3NWcyY1djNFF1M3c2WWhuTEhyeUJ1SmRvc29XVjMzNGVqckRMV3NSLzFrMmRqMnJ3aDIwYWc2N0xvNkcxSkRsYythS25FUmlVaHRLWG93TVFNWkJZOTF2ckZ4c2xGWjVOaWhrV0dnKzN0dzYyd1pYUE9FaFlxNVpEdmZZRHhOeFBIb0ZOc2E1U2UvME42SUFJR0gyN0IzTktGWFV4d2xsdEtwK1FUMUlUSEFYdnpQbVFnY0FNWWw4bkpENlh4SWlFbVpNejhEYVlISG5ZVXNJTzZ0eHcyWUxzWGVJM3NqWUgyR0FxSGVRUHNzNG1OUlZlckxEQTdZRytDYzU3MmtHdEJCdWtxek5EMVRxa29IcHRsVGozdjZ6Q2dQZ0V2MjNWQVZmSVVVOWViTGpIMVlsSkFkVnRGellEVkpETTdPT2NiOEdNU2pycDNTSkVsaDFHeHY2bU1iM0VKT0VYUlZmckphaE1CS1QyMkhWdTV0NFZsL2JEN1N0NDNkK3NnNXo2dUNyb2RxVTVnV2txWmxVQXRTdXptbzN5MFp1QXVlQjdubXVZb3Z5bllpQ2xiWmQ3L1NUVE5neks2U1BXZ1pRWGdYK21jMktiY3Q2QUZZdTE5bWxUdGUza0Q2T1JUZ1JtYUVVZUxPanFlWHdRa0U3aFNneFRIdFgrejUrODJRQWZKSEVwOFY3bFkzbnUwMjFURHlBMllmc21NaFM3ckdHRTl2b05ERi9GbldTSWZFQXloVVF5RUlORDR4K3AzWTFhMCsyN29sZHgvUXZBUmZhSUh6UHQyRXRvdGZITWJ2b29jWE83SDRRMHhPZ3VJTVJJbGVFRU93MFVJQ0pSVUllakJmR2tYaE80MllscVNKRUxVOVEvUDFBblY2YS9nUnRLRUxmN2g3VVNqK3VvNENIVGtOSHZWR1U3dUtYT2FEQXZ1TjQ3OFFDaVFnaVQrU2NlVzFEZ2w4d0w5cTNOUFg2TjgxdDNHaGVTSWh0QjlVSjIwclNtTWtqUFlNTG4xem5PcTRkbFd3bUFFNG13NGs4QlZzVmxJNXNrbTczNlhKZlhyUE9aS3lRcjFGMjRhV1ZXOGhuclpveHlpd1JYNmZGU1RDalhuYmU4MkY3cEZzaW9HNXE5Z1pSNmt6ZzROSDNsMlFlZXBXS1dsb1ZPM3BpdUdVa1dqaUZsVzRUcUVDMytseTV5NEtTcitQcStrUmQrd0VncHkwMkdLL001ZlJ3eHU2TjdPbmV0NUQ4UzNMbTlrc1VUNm5TZ1duWTBEcFZpRjF3Q3lpTC93cDExOEJTcHArdHNpRFoyWDVwbU93aTBJckMrZzYvSHdrTCs1OXdJZjJLTmlsTk5rSHRpd1hCcm51cXhVZmlHdGVFZWVkZExBbTJvdkxaVDZTZEY0SFVKYTZId2s3M1hJcFBVR3I0alliaWwwNmZhTFRHK3dERXQrUGdzTnhrZGU5WWFSRWZRT2ErdjluWUNaQTh0NFF0WU4xaDNWMXEwbENZSFBraHY1Q2hUUG43d0EvQ0lNc3dlQ3VXYmZjejNpK3JFSzVOZlJrTWs0aEVCbE9LcEZkZys2VTRadkFzMGIySTNGakIwSittZFNWOWxIVzZ6dEgwZ1I2eGZoMEFkSDBnZi9WOVlXRTNkSGlaaGk0SzNaMkdoTU5WVFQvVGFmQTl4cEhHSEN3M2laUG9XNzhqT3F1WWVjU0R6Z0NXeXppdjVNNThEdEQ1eXVCYWIzWkdIcWU1MkpIYUlDS2pIejg5TmxCcDBjVUVMN3YwMUNIMENsYUkra1R5dWZmcWtQWmNTYjJRTlRTamVqWUYvOUJFZi9jUkY4ajNlTHBTV2RVRW1hZTZ1d3hWVGU1clExbDBCRDZlWjgrOERqdGVYVVRDSW9BdjBUdVYvUEs2NTJoUG9SL2pjOHV2dFdVUnVFK2FsaGdMbnR4T3V3V3pPSVhWV2Z4N2hDQ3BZUHR3TVpMZjBaQmRQVE9FZjd4QzFBbnVxejJtWUkxTEt2b2V4dG9kWHhkaThWM3BCVjJoN2JnTEFhYlRiY3hpZ3ltVVk0Y3M4NmJYTXE0ZW9RWG1rMTlOVllOUFpBTjBXbG02bXp4SGQ2UHhPNS9GcEl6NFpjL0s5eWFreTcrQkh6T0FVeHlJL2ptYjJGUXRGN3VqK2F3d3A2ME9MaUJ2ZTBhaFlvRGJzdWVsNDN3SmZhWHN6cC9ubDJKQlNQbDlkSmFWckpTOEw2L1A4MWxlSGVqbjZpTU5vWDlhK2c5K0pSWGRpeTVNeCtZTzR6NkVzdy9lRkdkRzNLQTZUazBBdmRHSFNpdG9oSVZZSnRxNTZ3R014bnduNWRBWVBoT2xqL0xheFVwMGpqRkx2NERkVkhzSEZqc0VWcDNpVFY4RTdqUHAvQ3FlZFFuMENwOVQrUjhOdG83OEg2cmw2bDFJV0R0bktSUlpBeGdvQXYrZjRjQ0RneDdLNlE0ZkR4MHRyTEN1ZFVSaGVWZW5UT0pKbTJvcWRSK0RmSGhpeWphUm1udmZma1NXWncxQnhaUlhFaFI0NUF5QkpJSDhkaXpBUHpkRS9kdkUxSWc0SDN3NmFHdm03K1VOOFZ1dStUNDdwU0ZJUm51dFRHRnp1MllMd3h4VkhjQUV6b2d1OGxzVmpWcnU3VGE5OHdUdFpTWHR6RGVIZUNMMlp4WlgyM0Y2NW5CZzg3d0NSejNxdnYzMk1WajF3Zk80VytYRVlmZ1VKTGZvbGpuNzBZMWZINHpZTnBCLzBldHgwdXdVaEJBb3FJUm1DSDlCb015RDdDZVFBOEx5TzVpQlNmNW5hMkxBaTR6dlVwVzBxVUgxUWM5SE5XU1BVS1cwdGVLVXBINWV1Mk0xMlJSM0hhYlBKZnBUV1l6WnJHNEFneVQ4OC9mNVE2R1NSSFQ2U3lSUUg4OStxaGl1OGhYNGh2bXhacTNaRWIwRVY4NkwwRUxYV1Y1VUU1NE1wdXJhY3R4TStEbEVmV3NjTUZoaHN4ZnMwZzdmcWtDbko2UVdrRHhqa3hBa3h5RERhL0xUVUQwcDB1eFFWSXkwRzBRdG1VbUpIbklXRVFjSkZoM1hXcmMxaXgyclphY2lxbXhXOHRLTEUvRXBmY29wdzViTE52am5rd1lETVJ4Nk8xcnVIZFdSd0l3TVE4Vmk2SGkrajJaa3lCUjBIWWpTR0pRdktKb2JNTU90c2hRSElvc1pQcWgyV01oaGpUVUZjYitzejVwK09FWGhFZGVHdXB1eVRmRGdieE9JZWVNUWZKRVE1S2dLdzdHZUU5SmMzdVJ1a0d3MEZwRk1qNmFnaExBKy9hMStFU1pEZWlYdGQxVGlVaGNvU2dTR0I2SlZPUjd6QUpMczUrT0JWdVZvcWVQSEoyQ1lKUmpKeGN4V0EvYUdJak8zMGNEekQ5WHJubmlqQjF0TjN5UEgwWGtjNCtSS1ptQlBTWTE1dVMvVjdVVVd1N2dsSjI4NEFIbVJxTTVTSFJ3VkdCaHJUTjIvVGlnM0tVTVNqRE5JVkY1SXVhUHFaRVFpNTlEY0dlenlEd3pBenM5QjFFQi9pRG43R2d0cVZscmxZbU90Q2xheG1DSStwazJQaXh6WU1yWkhleEVxUndZMVNYb3FBTFhOemthVFRac2JXb1gxV1JjVHN1bFhpaC9JWEZwUFl2eEVhNkFGWmZ4NHhsTk16Zk9JdVVSY2J1KzZxdmhhU2hmaCtYdTZTa3ErVmFER05hb3VLcHhZT2I2QitBKzFUZUlJRzdMM01SKzVIdFVURFIwZ2JjTTB1S1o1NFBia3hBRzViaHNINm5IbVErMUc3RWZwZG8xbDVjSjdJSWNIaDNuR0pXc1lsM1F2dlhaYWhKdlB4NVU2Sm1MUXZvUURKY0ViclFaNTIrQzNSRnIxMXBaZC9NVVVSdjN0UWgxMi90UEIraHdyMXNtTm9CVWY5bE1TYjhBQmh1MDZ5dU5mdWIrUzdNN0RiSUhyQlJtL2ZFQmZNZWZtVllVbmdnSnAzeXVZYnFIZ2xRYjZDUVZtSHNlanFhWjlNVHowYXJDRXJBdXF5R2srVWYycmo4UUFSWmk1cUN3bnRDUDBmajBLM1FveEpsZ2ZwYnRrWkdIRlRTdENBR0JLS1kzOG5sK0pLOU9RRkZ6UUxnU0toUExORG1ySGkvWnNIR2JJZ2RTendDL1pXOXU2aW5vN3NuNElVUnUyQUNUOGlGVjhDanBHNnQ5dHlDdk5TNTFjdTlTY1FzaW45K1ZSa2pLZlcwQ09pblhOVWpuNXQ5eG8zOFhRZURjcnZqampMUEFrRUlhU1RRazkrSUVIN2NSRXdFNkhsYi9qdjlTT2ZkaWtmclFsSlpxQTkxeDJEWDNjWjU5cnhZbUJiUGVHS3NaTkZJT3ExU3psSnJCU1Jid3BHYm5UT0lxM2pZemhwNERjSklibDVremRqcFprQ0lIVDh2VnhYZ1lFYnBwYUVjSmJzY1BucVZGWUNNd20xUDRzbGI1MkxTN2JUN1I4REFDVUptYi81bG9xUVBUVVZwWkNrQ2lOalVCcEpNeE50NFpxZDQ0eWwvMWxibllDcnpZR1JPc0RmZS9OcnU5QTJ6TjN0eXhCZmhvZDNRNzlTcytMOG5MWnFaZ3MwSzBxNUh0dUZqQVUyWVArdkFMRmt3RytpYXV1bndBTjR6cjI3U1owakE3dm4xclIwM28vVHU2Y1FvTDFPWHFwVld5dHFtN08wMEZrNFhvYi9zdzZtQ0lYUzRNMHBTc2NaWWw1MDFOR0ZibDJtM1VGZlhzUHdncVRiWkhGNlhCMEdqdVJUMElmTDFWZ2I0ZWVLOENnM3JPVnNtd3JoUnYzVlp4c3lHaVp0eFlYRFZxYWY0VGZEb1JSR1RnZkk3eFIxUGQ3aG0wYmRUdXlVUWZ1Y2hlbHlLdlpIY1ZHS2NMVDUvNW56NVVIMlh4L0ppdU5KOE5SMUxUZ1FxWXlnaDFsMTVEUVE3eStDcG1BZ0EzWGVIS29Tc1Z0R1J3YWh4SEJ1VVAvd0FrNHVHYVhYRGI2SzMyUk50K3BJbVV1S0ZVWVlyQkMySXc0eXFHTm9JZDJxQmdTWGpXWko0TVhOVFI0dk85NUlWbkMvYWdLRkNVdjlvMGFmbno4WlFuQ2ZscUlRa1VBcFRNb0VBOElwVnBUNHlhbS9aRy9rWHJ2VGNxMWt4TTFGUHZ2VVEzaFdLYzQ1TzQwUVozRlpXZ2NzVzFUdi9BK0cvTDZqZ2FmWGVCcVIyaEFoZ1RpbE9kWUx0VFB3ZWtvaWNwTFo3aWZjZ1FpL2ZjZEFmN1kxQjEvaE1lSXM4UG9YTi9zNS9zVkJUc1U4QmNiVzgwemg1MkpTOVA5LzVCNnAyaCsybm5qWU9zNlZVeUpPSlFwRmN3Q2wwVFVsUEo1bzJmNEZjRHpQQXFqYkF3Y3AxakUxR21uZVkxSW5VbnFBWEJjOTZsQUZqSFB0a0hSeW1HeWdsakZoMjFZblMzY0V0MFlEOUtzdFhVYm1kTGZGSk5ZUHM0VS80cVlueHRIUzR3ajJRWSsvSzVXbzN6Uzh3bEU4Ky93bXduT3lMdk5ISS96aXJxK0l6RitSK1A5RmtPSmFEZk9qVDhzTlFBeGhVbVZsS0R2SU5KMTMvRk13OERzci9NOFB2cFFQemRRNldvWkxyVDJyRE9UcFY3b3dtYUladEg2UGtJTXZZa3lXV1hObzFMc0hCaEh0dzVjaUthSXFZYXlKcUY3ZTdPRDB2N2pvaW52bTYvcHoxdVI0ZFNKcCtXeDZzZk5sNk1TcTk4VmlBek9oTFpNY2RBOWNldmlRTWNkMDdnT1IrSDVYVmZaZjZyYWU1dGRBaVUvVkN3MXYvWUs1amF4VHdpa2o2OTlZa1BzZXpSMVdtNUM1c3NmNmhXSktUTDBiWW1yM3BHZ1Z4SnBLd0IycUIrcTVxd2VaRVB5K2J5YW9JWkVKNDBocXdlYkZObkRMS3M5bzk1dkpwL3F0TU5aSFdiaHVhWTVjdEREd3ZZZjVVNVptY3UvaFdmS1AvQ3UxbkIrelRLRHhWVUNRWGZ5b3g0R0YvQmVvVDlaWXNncU5tVzBkQmtyUTUrVXYyTEozc09Pd1pmV0xuclB5Q0l0OUszOGE3V05QclRpcnFwbkRIeUYxWmE4RmRUN1lJc0FQU3U4YVl1VU1vOWszY05xWWRPRVh0djlHc1pacVhKZTBJK2Z3UmpjL1FVTVp0N3lhOW9DTzdFcmVMUjdDWEhRemdqOUlGWEFJZDNNeTJjL3pLUWdDUDhkSTZubnNGN3NNYkI3Z09BT295bDFVSUR6VGFXZHp2aHIxU2Nma09JZEpSQTRzdU9Vc1k5N1B4NW1sdEdxcEsrSEN2UDQwVjJPRGxMUWFrU240MFByZVVmaUFDa1loQUlXaXBqZGZxUGJpOFRUL0VxNEtkRUo5RkNKMnRxRTR5dENWMXFmZVdUVzZEbERFbUNaY1FtUVJiclBGUlVaYzRTakhKYmw5N3hKait0dUI1Y1FhbEdNTWpBT3BQeFozdjMyK1pCZEN5UVQxMXpYWDg1aTZYQk9kY1d6UDZoWWVRazhTQWI3U1dqUVFMbVVXeG9nQytHOFNNTHZKTjNJUWdlUFkxY2R5dG03Q1Rib05hWGxZL1N3NTRKeE1rTDZhVzZIQkduYTd3UGJyN2xRVEl3cmNURDg0NzdsR0Uya2l6Z2hEOVo3bVlySk1DdDFWckRXK3JKdDlvMEJkd3EwNTJ2L3BqT3J0b3NwR3poVGl4aTY0RFRqd0FRdjZjYnROKzF6NENDekVBSjdJdHlMVWRtL2pPbi9BaWVtTTVqRWdHRCtzbjF6M0JEUTZnbmxsSldNYVhnT3oxSmFNTHIwUHk4a0E3T0FNK3k4L3ZOdWRFcm1xcStCenNqalRRNzlud0VXSGVtQVZsSmx2c1p3a09IZnlWZExDbU1MUFN4elBXZWs3amNvWWVINnhvY2N5Wm9yNThTUjRZVlo0ZG45ZEdqeWw0VkhPT0xHcFhjRFRxbGlWcnptQWY4RWJnUThNL0tZem16MFFhOU1uWjJ1TWtoNU1JQksrNWFqMmlPd090TjZvc3FiUGlTVkxudkNONG9wUjRWR3VTTjRPMEFxY1J6RCtqaWVveGlyOHE4YXhTbUhOU1JDVjJnZEoxRzJRU2ZkWDJ6dE9uQ0p3L3BXZkFLWGVzN2JSVk5ZNmt0MnpmUzA0cjFXU2FDSkhvRjd3YThwODd0YnJySjdGdGx6dFVodGlWYUNCTlc2SDl3Y2hCNnE5M1dHZlpqdU1zRWhlV09MMHdUM1pEOXpmM1YrWGVyYmJOdCtLVHdqRU5MUW1sUVlWNnpiK2dBM3NtczdxWEtidS9IWjZwVW5ManNHNmkyQy9LQklQNWsxblpoWCs3cXlra2tPTkRSKzFXRFZmcW52OWZLNjFaaGYxRElnQ2ZON0o1S2JLUGJkLytVK3kyQkpHQWZIZEZ3NEg3aXA1eUJncDVsU0xTMWlQU1RFamdMMURTNEE2eHliMU9jYXhCRWxJOHJBb1NvVlNEWW04QTUzQWE0K1JZK1lIU1NaaEtLdFJNOCtXTVNYa2RyZHVFbjhGT0pZVFQ0bXFpYlJWdjZnVVhXV3VleXdQWXdzbnEweWJUY1lwbmdxaGJ1RDFuVWNzSEUxT2s2alEzeWswSHdjbmJNMVFwT0lIbkkxQkxKc2ZpdERkNEdIcDZJdTMwZW8rbVM0MGZQc0wvZHo1SnliZ1dRaFoyT2pzUUdJRklFSVNXcCtXZXBuVEl2clBqdzYxeDdHcVp0V3hvYWI2MUw5OHVxUGFUalBzTGxmSFNXaFBUQ2dkUnFWVE1va2MxYVJCdXkvYml6L3kyVFRXUWlwOUZMd1NxOVRYcXBseDhPbFBPRkU0aDJSbDNYSjdRRVY5Q2dSWDAwSjlzcXVVNUJqckRSckQvVzV1eFNpanFTQ0tlVzlzdmxjbnM1VEdJLzJJVWhXU21oWkxGN3M1TmpxWTJHYlYrYzltSFZ2UXAxWWl4dENCLzl1R0x2cThFYW5xbnJQTlo0SmVJSmNTZC94eVlBSDl5VTU3VTlZdFNOeUF2RnU1ejhZckZiZVdJVE1LSi9kK3M2UkxrTXRkR0I3MHF1R0t6TkpGKzlCOXZMcmRHMHE0NGNnYlBsdmhQWXZTVHlMMEl5a1IyUloySEpyVXlybldic1F2VDdHLzBmM0xCUzgzcyt0R3ZPM2VJQlNRQ3crMTQ2YnF3eE5PT21OejY5bzFQTk55bThzRDZWaHl2RlJNcjBHQXJWUDJZZEo1eDlyWnhPOURJcnR3SlJ6RmNraFgxY3RiUno1MEh2UllPdkppQXpoUHRFaGhlTlJXOUREakRPTUVuaWJtVENtVmwwVUo5UUFxendpUTM1eWVUTk9VenpJakNsZ1NKUDBaTDFwODBJVFVkSUdXVDI0WkVrc2JqR2hiL1BPT3J6a1QvTHp1cG4rSE5ydnFSZXFaUUt1V0I1eXMzcTVieGFSMDIxODlTeEMveEpkR3U3djl5OXdpdzV3T3ZJVHpEbE9NQ1hxOGk5N3A4SktEQjVCejFYTTFZU3U2WWlxcEtqRURMZndCSHZUM3o3NjYwanJDazV1dnlJNW5GV05McjA4ZDhSYzIxOWdXMDdsZ254VlFHSVhHTXFjZGdmMEM4cHRZTXcxMEVBblJ6ME9IVzh2Z1lveHBBVFd3L29CT085Nm5yYUpNS040R01adStiNlM5c2QvZ0d5S0Y0aUtRS0oweGxRdy9idDVId296dW45V0FXeHZUNU0xS01GMXViY1R2N1JvelZHMWhabFNtblAvVzluRDFNRlpwSi9xdDFrMlNLT1ZWRFVLbi9UeWhCaFBseFJERmVDYWhJSjRXaEUwYmFFMzJxN1dPZTZTYVpYU20rbXpZbzY0K3Y0WWtuU1MrMXN2aXhaUGVlRWxDODQ4bzZpOU5PYlNZVlpaZUxKTG1rRmNGWDdCTWJGSzMvSGhMb2FBY1Z0UzZwZ2xVVU5YMjRrSE9hcHg0RURFYjd6eXlJQjBQWUtjU3liWDY3VDBEdnc3VnJ2WlZNM0RtcnZhd3Z2OU1ROVJka2xGRytTR1dIRm45c0pjN1Rpb0UzZnVrVFVyaUtWM2RaSTljazRiNW5MU0VhY1ZSQ2dMeU9xdlRjckJDeHdBcjBISXJ5aVl1NTVjT2tZckI4LzJFSFpGRHRhQUxxYUloWkh0NXQvQVVpQnM5QkZld2hmc1lTU2lkUHJXbHZRbmdKSlVrVnNQNnJCcTFRM2ovU3ZjMjVmTTkxLzBFbzgrME42c2VlVTFjZmE2Qk0yWDJBWHdIQmtkS1paRFpSK1lDaElYZHJtKzdLazVLTGtUUGtTcjArOTZTZS92SmtHdVFTWjNlN01pZWFOYXdueGF0VGRlSXZhWHZkcy9GSzRsNWhuckZCdWVEYm53TVpCV2loY0tHdGcwQVlHSUx1czNrUU8xWDJoemxpSFl4ZUFlT1Uzc0FuUWdkeDYwVnZmL0I2ZnFLcW4rUEZqYXVPVnNXWGNyWFVaT1JYTjNFSVJLOEs4M1BEVC9IaHdnS0RESjRmYVYxSkorclhxTmZJQ2FvQW9FbHBqdzhHbFpHK2phS2xIb24vZHUrSmRhcC9pQmRhbisyZ3BwSFJDSE1qK1dhQ1p0dlYyQVVjZjZsUTVVVGNvQ1djb2lLN0VrT2ZHdHFOR1Y4emhlaGM1L3dEQitmZDgydWVZNHJjc01id2phWTR0YnhoaHlSRlFsd2VhU1BjNUZQam9kTzNTcUloa0w2OUw4RVBNWHMyS1ZocmRsRktFZlRSRlk0eHBJcS9PVURsYm9kZDUrT1VVcTRjbElkV21YYklHSktIN0RUdHF5T1JSRXByUStyWDVSZjU3WWFrcURobS9sdy9xZ0ZNaDk5dWMvNDFlMEpldklvalJBSy9uMUYwOHpCOTlkYjFjaXpYQU5tdnFseGxsV2xsMGFJTmFGN2VzVUlZVlZCQTJiSFo2MG14OEtCYTVrNERkNXpxRUdSaVNoN2VDZlRtQTYrNHArV1BtZlBOZWNZQnFSZHRabExDSEc5WVpEWjQ3dDhGUlJlOEQ5STM5S3hRVjlUMU5rZGtaeFhROWp1U0hiR25vdC9IVHpPcitzYkZVRFN5TjBmT1FDS2pBOTZUOThJUHVHdXNMRHZsM1V1TUhRK2tPdjh1YSsvKzBMYWJsbkRKcTF3SGpOa0ZnTUlSblJQUzJScU15TklRZ2NKTlk2S1lzS2dobkVTVjFMQzRSQkJNb2xBY1dYODU3QzMxb2FUUHhxczVDTkIrZktiK2NnTUJTRXNEYVJjUjFsRURDRVZ3RFBSUlJpeVhMcUN6MW1vT0VncjRhVzlhd2VCOU1mSW03dms3WTd3NjJSTkYzY1QxTDF2TEZKSFlnQmtKb092QzA3NGI0OGpncUJqMmtqVGd0bDN3c05LOGlpUXFzYUM2MUV0M2JwazRBOEozcFcxT054TTd0d0kydnFya1lQcTdXZ0M1RGU1d251aVVTTDkyT1ZkbTZ3R2RsVDRIMjdGZytISjZuK00yNkhuQlF4S2FOOXdFSG9yYmdZd0hxcUxzM3g2SjBRbEhGWk9CR1hyRE1kUHJURTlxdVA3ZzRhRHRvTmltWllUMkpQM2pyRzJXZHhRdWNGWThpckpkR3ZRRW95MjJKdmtqeGpLZkJYamRQOUFuZkkrNTNWb1ZKWjNZb1FEZ0pVQk15RjM1dHZqZW1qWkhIWEhkV3RSMWU1allHakZsNDQ2WDZVWC9JL2FidFRjNVp4emhSeXRlRzVkYkQ2dmcyc0FWeTZ1YkN0NWxKc2NNM0o3WnJsVUx4QkdnMG01NW16bFhHRE5iOStocWN4Mm1xb0FQRlpjK3Z5Z0dFeTI4UjRiYnJBTzFvNjNqTHVxMjJESjcxZ0RRbnV6TUNhQi9xbjhFZW1tUU55L2ZXTTRGdWpqMzI5S2FzQmozamFyY0gxeTJCaGFIeFg5L0RwcHZQKzVrRGJ4dmVCamV0WmZ1MmRVMW9DSnIwbGppVy9QUGNCbkR3YkdSZVFxUGRQTjE3TlJaRXVMd0ZwcFJkZWNhUkEvQ1VkRlRCVnV4M04vSERLRWdRaEozVUxnSUtQNHFkVjNLZVlsY0tJV0l0WXpYNExqYnBJcnQ2RWtFSjJVODl0K3lQa0c2eEdKT3BwWS8vRC9DRDNWTHVHT3RGdFZYZnVQeURjV2NtOFpmbDFkcmoydHh3TUdJelJPMjBWK05COVQ3dVN6WVRuWWFvSUhLV3MwY0dRckJaY2ZWWXBmWVVIQ1hJRm4rUXF4eWZnd24yRldxVWkxWm5JaDlNN1NkRE5pREl1bnFZcmEycE5LdGh2WjBBSUpJdFFzR2cyRmZRU1BnUTdtNU1mbmtyM0NTeEZOVHFQQzdnWlhTUEVjN0ZVLzhsdzh1UGNIRFRjSW05Zm9jeVpzMEFlak1LNnVWRm45ZUYwaXZNbS83NWNDbjdJQ0JnVE1ITC9oWFV2RTh6ejNXOGo0ektOdHJ1Ni9BaEFqbktxaDdWRjVZLzlrQUFRQWFBRUFBQVNNQVFBQVBBUVFqQWdBQUFBQUJFUUg0UUFBQ0FBa0NBUUVLQWdBREFCbFVhR2x6SUdseklHOW1JRVpwYm1kbGNpQW9OQ2s9PC9CREI-CiAgICA8L0JJUj4KICAgIDxCSVI-CiAgICAgICAgPFZlcnNpb24-CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvVmVyc2lvbj4KICAgICAgICA8Q0JFRkZWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L0NCRUZGVmVyc2lvbj4KICAgICAgICA8QklSSW5mbz4KICAgICAgICAgICAgPEludGVncml0eT5mYWxzZTwvSW50ZWdyaXR5PgogICAgICAgIDwvQklSSW5mbz4KICAgICAgICA8QkRCSW5mbz4KICAgICAgICAgICAgPEZvcm1hdD4KICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24-TW9zaXA8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgIDxUeXBlPjc8L1R5cGU-CiAgICAgICAgICAgIDwvRm9ybWF0PgogICAgICAgICAgICA8Q3JlYXRpb25EYXRlPjIwMjAtMDEtMDdUMDI6Mzg6NTIuNjcxWjwvQ3JlYXRpb25EYXRlPgogICAgICAgICAgICA8VHlwZT5GaW5nZXI8L1R5cGU-CiAgICAgICAgICAgIDxTdWJ0eXBlPlJpZ2h0IE1pZGRsZUZpbmdlcjwvU3VidHlwZT4KICAgICAgICAgICAgPExldmVsPlJhdzwvTGV2ZWw-CiAgICAgICAgICAgIDxQdXJwb3NlPkVucm9sbDwvUHVycG9zZT4KICAgICAgICAgICAgPFF1YWxpdHk-CiAgICAgICAgICAgICAgICA8QWxnb3JpdGhtPgogICAgICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24-SE1BQzwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPlNIQS0yNTY8L1R5cGU-CiAgICAgICAgICAgICAgICA8L0FsZ29yaXRobT4KICAgICAgICAgICAgICAgIDxTY29yZT43ODwvU2NvcmU-CiAgICAgICAgICAgIDwvUXVhbGl0eT4KICAgICAgICA8L0JEQkluZm8-CiAgICAgICAgPEJEQj5Sa2xTQURBeU1BQUFBUG5GQUFFQkFRQUErYlVINWd3Y0RDQXNBQ1FBQUFBQUFBRXdBRUFBRHdJQVFBSUFRQUlEQUFFQjlBSDBBZlFCOUFnRkhRRHVBV1VBQVBsRUFBQUFER3BRSUNBTkNvY0tBQUFBRkdaMGVYQnFjRElnQUFBQUFHcHdNaUFBQUFCSGFuQXlhQUFBQUJacGFHUnlBQUFCWlFBQUFPNEFBUWNIQUFBQUFBQVBZMjlzY2dFQUFBQUFBQkVBQUFBYWNtVnpJQUFBQUJKeVpYTmptY29BQVpuS0FBRUFBQUFBQUFCcWNESmovMC8vVVFBcEFBQUFBQUR1QUFBQlpRQUFBQUFBQUFBQUFBQUE3Z0FBQVdVQUFBQUFBQUFBQUFBQkJ3RUIvMlFBSXdBQlEzSmxZWFJ2Y2pvZ1NtRnpVR1Z5SUZabGNuTnBiMjRnTVM0NU1EQXVNZjlrQUJBQUFVVnVZMGxFT2tkU1FsUXdNZjlTQUF3QUFnQUpBQVVFQkFBQi8xd0FFMEJBU0VoUVNFaFFTRWhRU0VoUVNFaFEvNUFBQ2dBQUFBRDRUQUFCLzVQZkd4QUpWT2QzeHpjWWp1MXc2NVZGaEtwbnZQRGYwMVYxVmdOWitSUG1ZOEYzSS9wT3hrbjlLK0dyTXF6VWRCUGZKb0JvZ0lDQThZQkhIK1FEdzhHRWI3UmJQeXFBOGFCcnpZSlpSN01hS3lIZ3djNU1nUHdKZ0QyckgwaWU4c0lpVlFOSFZoMDFTdFI2MUUraFVpaysxUkVFM1lrRVdKRExUa1ZYbVA5MVNhT3lnWGFBdzFDT1FiQ0lvRm12bUs1VWFSWlJBRVcraUc5S2pBdytYMjN3N0U4ZVZJVXJPcHlRTVVEOFNxL1pKdVM5dU9VNGNhNnVNYXErbEZwcGFLNlFoa0cxT3c3emJFdWpBSEhrSXFZYTM4U0lrQlZzWThzYVZGMnhNb0Q5c0J2NTRFeDV1QzNUK3BQMUJ2eGt2d25mbVVDK1JqbG9SdDJ6Z1Znbmx1Sy9mUFdlZUI1S2JUV0JQQXdWQjNzTFMrRUZ3RlYxakU3UHNBSmUvYmwxTFBiSUhPc3hBSHgySnl2S2dsZGdJc3djczNUL1JqLzZpMkQreXBFMTJISWZyaTJ1Sk9DdVBLNlRVc1I4eHRLdllJUGh2RzFDQUxUYlFiQURYRTZQa1dnQVNMQklyNWVUYnI3TjFpK0VwV3ZPVklERm96elVpSC9zOENsL1BMaS95LzI5V2lxRitML2RyN1Fwb3pscDFMYW9oZmYvRGxIbi94ZmplamlwcnVqak1SeEtMdGlubjFESmtNam8vSDVXaFBqeDB2RXV0WXFBL0VXTkFMa1RuU2dCakxKdlMxQ2prYjZjb3B4blZ3RG0vVTVVQWVDN090WEdUSzhyZUhGemV1V2dSUFRjczFHQ2NiNExyS28wRllERmR5NG1qR1lWMldSVGQrS2tFRzhJdFBYNWlQM1RqZGdwaEcwRWdOUTJwcVFIV2lSVkRBVVhIVTFUclY5MXA1dUhXQjF2aW1DQzVhZUpiZ1BCWXYzY1VrMXdpV1NHL01DTHVieGFTTUpQbjN0YzNHWWpnNVNpdlB1RUtWdnNROVZMTVlOMUFTT09JTEFJMW10a25uYk5jaDBIYlBOSzI3UDd0OXJCdjF2MEdoc1EzYlB5ejN2N2VqMnplZWVvbytFOEc0TkFVM2Q2MEtlUGdmR3p3eVNsVXk0NjBMaWtjQzV6Y0NneG9JV0RBRWkrdlgzbTBCOHFscS9iamNUQ1RBZ2FveEhROEErcGlCZ0h4MzFwV2RGbnB5ZWFmOXBhTmtZV29ZcVRpMzV6Sko2Qno2c1J6d1RnWnlFOFVIcllYeXBRa201RWo5QTJmNG44cGZmSVRYem1NTGRjb2ViMFo3UzJ5NnRmNllsaTMxSnpnMFN4MWpSRkVSdkNJT0ZWTnROY21EaWFqTGczTG1TcndXOHJXMUxsOEp6WXkwbHlsSzg5a0swQWluVGtxaG5ud2Fyb0lyZzVpY2Z2VWQzQmFtZVJ6ZjRRWDhNaHM1bW56d2xnc0xlWVZjbjRUWTJDNzgyVHRpanZySXVoT1NXK1FlcXpkQUJTdjQwZGVXZ3FFQmVJTk0vaHJhZ2RXM1VteXc4dmNsVkZDOGlkWnZaSGM5VDluNFBLdDJOTURBamxFZldRS1pTbENZNWRTN242VkgxdExUc0hZRGFQUW5PUzVhclRJOUo1czk3WDdWaFhSeWZwY3hHOUc5ODZiTVdrcHdkVTdSN1N4YVI2YnJ0eHliMmdsSk1qNkNHeWo1S3R5dTRyVGdoQzB1UlRwQ0NreGY1RkZSNVdQa1VTbHB2aTVJZ0pKaUFrQllZYk1DZkJhWW51VENmM0k5SExZNUtVV1I4cTlHeTY4dTJVMzZVdW4zaUczNzRMU3ZvNlR6Q2UyMmp5aTV2Rm1HRVN2ajFsNDFhc3lra2NTaVNjcTdqZ1FMSjdlK0ZtekFoL05ENnpiSzdKd3UrSEVGZVE1aGxyUnBxUVEzLzhwN0Jhc2tFeG5Dc28reWI0SitwMnVmdVJVVlRjdE84cVhjc1o4ZUdFblZjVE11TmpCOHh3aFlGQ0h4aTlWcjdxL29vdndOdDRmVlZLYVk0VExkbUl2UXRHbXZqMlB4SXdRc2c3bElvdlMzRnpqMVl4bERQNmhOcXBBSUE3b3VmME1kc0ppR2l3UzJ3Qk9xRTAxT2VDS3lGSHVpS1gva3l2RFlsNVVjQXM0N2xsT0ZHRXBZNm9iWlN2QVQ5WnNTRCtRS20zekEwUVhqdUU0S3liWVhUVmZYQUVRdEF2Uk1pQ2dJRStZaWtFVEh1U2NDZUYrREpQeTdZQW9od2JIcDc1eEFBU3lkVTE5YmtqbW56bG9DTGgxZzI1Rk9lTSt2VW5Jb3ZyNWwwS1Y1UDdRQ3M1cGJ6ZmFBek9TaXlFRUEvNTVMRFY3VHpBMmRLOE5EVXFQd1BGSVBxTVNTblAvdUJRY04zRTF4K3JqemtyaTNxVTIxYThhQ0o3SWdCaFpaZkFWaEZhdDBoMWZ5cVZHbE9lMGhpUlYrakRPLzlnWnZqVmxzUWUvejZuT3RDYVpVMXZ0OFdpWWtoMDNLYjZ5cVdwemhvOStMb2E3NXJTY3JuN0Q2SDNnR2hBbGhxb2xDWkRpSThjVFl4ajB3MTlUVWd5ekJWeEJQS25VcFQyQ2daU3Yxc1RDZlRvNHpNYmp2MVFzeC9nRUJuTUE1ajVDWDFiRktPcWtJODJZSjIvelF4cEVSL1NaRVN5V3pJUHhOYlo2VnhDSmN3UjBMV29WbVEzWmhQcmNHMUY2bkM1MEV1WVVaeHVZWHQvbEdzOW1tbkxSU2EyWVhXaXJNeGVUV3JsTDhUTVJiNUJlME13azNZVGd0SE5rN3FBSGo5aHFQdkNJMHRtYXlsQndlYThtWGo1bE5vd3VMMXdBVkQvQVlhblVhN0k4cHFPTWNBdFJjaUpPMGxlczcrRER2Y0RNMDFZdGxkU2VOdnVaM1lYbnZlOExObWdlR2J1WUhIQWlWTlBEZFVwY3JVTWp2YXhYWU1BR2d4TkV5bjFidkVqMTFld0U2WnYxQSttblZsR1hBclh3Rk4rTndpT0ZJdERvYm5tTVYvZGNxUzJCTlBYMmUrYW9OalFLeisyR1ZXOEorNGtqRGZob2RFTEMwNHdGelVGbWY4MXlybnZ4bE53cEVuVlllZ2ZMcjBZVHkyb2RkRGJnQ2dsVnRBZmg1S1BnRy9PVmRQNmVVT1FpMVA5c1VOSzllK1MvZ3FUSnRBOUZVbFEwb0hGTXdPWW84dW5YcWlqRDRvTXR4TlBqNmRBVzdVZkI4Wk93d2wwNEhXbEl5c0lWUmlQYk1iTWh4Y3dNUiswbGNzcWwvanR3eUF2NkVjWUpGU2pXZHIvY2JqaktFNTdXbldQSi9yV2V5emFtWnhIeGpsSFgxTHQxSFNnOWQzTEhWbWpMWnlRVFBWNnNHZzF2blJSeHc4ejMwdzJEOFFpOVJodndhUTY2d0E3ekNlZ1RnYmJzeTVqYWhmWDI2LzJaZTF1Qm53L3FLUFFaZm9qV0hYN3RtWnU3Nm1TMU93VUl5dms0QmJzOTVtR25qdFNUZVlMUkU1d3pkODQwRkRzUExNR0o2all2ZTcydEROUmQzU2JBb3U2akI5ZEwzVDhXdEkzTHdhUXdSVUppS01scm81eldsSWJ4RjRFVCtZM3BnUlJ0VHN6YUtmZUxpeUtOOW5USWNLSXk0cmFNVXhRNnNGZFNjRk9LenlweW1FdEI4TDNQRFpsMzgvQzdUM2F4a3JZVzBxKzdTVkVZenlIMFFDdHNCNHN6aFowbm9DeFlNdG9QdFhXc2ZZeWliRWV4TkgvTkNWb0RYSkU0YllmVkdDK3VMbVRwQnhCejZYaE8rU284djlaeS9VRTFnN3Q4cmJjL3pROFY1WlIyR3dKRUlHMFQxMXlFUlRkZVFEWnJnWkxkeUdHaW0vS2RYQ3ppdlAxZDZkQU5Mcnh3eGd4TW5SSmkxSWIxQlhmWFA5Mk1ud3paVmVPakF3Qk4zQytQQytrR0hkeDRqQlhxcVg3bkRnNTd3b3p2K1hBSEJkbk4vbks5alBNTlVMbGJlNk1vMy9Ra3hZdWVKV0J4akRPV0NLOXI1bk40alBMK1JRdStyM3lKcENSTUY4RVlqQW5NUmxIU3ZQR3kwSGFtNm5DRXMvZHVteUErb3ZzT0tBTkp6eGcySEVoenU2VEQxY2N3cVk5MFdhbmp5V2hQSmtTRGtRRkFqeFh2Qm14YVJrYWFqOUtLZDRXcGNTU3YrT3M4RTE0Vko3UmlvM3NnZGxjOVh1TFoxckd6Sk53UGFTRFFsZSt1K0pZUFc5eG5Pb2Q3RzlzSkFZY3l5dHc0dVJDNFVLVWo0TkN2dDJpek5HS0VqVXp6Q3NoSURxTjN6WVlaZXJNd3ZiNjBGNWFKQ1dsMVdCQ2QrUVovekFTdE80SFRqNlRkRWJyY0dhMmFrMzhIQ0d3OHNLbTJvZjZXM1d1ZCtXOWI2VThHTUlReitZT3Y1YUZZdEZQbU9MU2VvMk1HcHZZaU1pUjBsZS92dE5rdmlxLzZZNERFWHF4MDNnM0RpbWlrSU83NnJBd0VYWENGeTJ2RUJaTVE3Z0x6cGdUSmxvMy9JUkcrQlZScHhXRWhvSXJ6cTl0V2JtOUNNZVpaQkc3VjIvVXd6TzRCNXNFakxHaC9Rd3Y2R0kvV09vQS9QblBiWFhwRXZlakROYkx3UnVtdUJ5aGZ6WU1JQ0RISHdVN0EzejFSQW5FT0trTjBvcFFTa3FZVGVGOTFtMXpWWEdFTC8zYmdhU2I2QWp1L3ZpekhwV3c1QytUTWdNQzBXaERqREV1ZkY5RVVnYVNMd3VpdW9kYVlEZHdGMWNMNVNFSTh3WVBQNXJxMHR3NDN0bmtkelNwTnlCNWJIWElPODNIc2prYXp4UDc5NWpqbHU0MjF4TkpJNUlXUTJIcnBhN09URXlheDdqcDNySVRoRHQ2YTRBNCtiTWp2NXFGeGZRSFJRYzF6NzM5WjdyblRnT2tSVVlJQ3JYdlNtWG8rQmsyQU54UnUvVENOaVU0dzBrQm9qSS9MYTQ1SnRwQzBxcTBoc3JpRmkvNmtUZ2ZBVVFlK05pbXlPeW1PWWIwTnhxdzhYQ3J3aTU2dG52OFZBSDVxUEw1RlRSVlB6eldnWk9hYUdmNDhJT0kxR0R5OGJ6dUFnazBNaGhyL0hSTW9HemNzZ3czU2dsNUpuYzBLV2V2NDBFWUF2a2g4RHlRb3hlZ3EvUFVYdktMZVlmN0dPN2FUMStRRGVtREQ1ZSsybFMzdVVwT0kwTisyaXVjaHlIdFRUL2NBWEcxRWlxQkRwc2lpb1RmQThkRkpHK2xkRitFUUkwQnVXMVB5Um42STlBUHhsRU4wcmFTdWRxaUQzWXphakNLOEp2UGNpTkFyQmt2VVFWS0wvbTRRbXpzeGlza0R6bjZxT1NrTjg1NjB6UFh4OFh5NzNHMS90WFplRjIyamhrTm00U0ZQT0QxU3p0ZFFBelVqK3Q3Wlo2cFMvRUtJNURUSm95UFN5KzdQdHNwWnNxZFRmb0d4eGFucXNRY3JkYnlnSE1OcCtpenV5Tlc3L2ptMUdVOHZ1VVNxcWlxVVhOazJyQ1IzaFArRmw5UGw5a2RNV2pEZ2pvK3VUYnFEbCtiS2NYdVh2OHZ6MkdnUFhRVFZiVUFnNDlka2FqQ3YzUVJ2d3EyNW9zZ04rby9ETUN5M0R5dnYxVEo2c0FheGVrTGVhd1RPMk52SnFmMFBpNHg1dFlMZWtRck92eTVYTy9tcUVyQWIzVmtlMlVkRUtJZENpMjdZRXVITHcyMjlUR3VaRmdQWVQvTkxMR2ZVUmJZeG43TWVRVXQ1eFplVjBYOUtIVm8zaFB2dHBOeEorelZWUU5FdG5EREVGNk0rUUtGTElHS1dMUFJHZmh6ZEFhTlduQ0JIcmtqTlV6djlETzJwUUhXdFRoTERmWVIwU0Nid2l2STZUUHRlOGdUWFlseUxWL25CcG5wWi8yZHhiem80VFVqNUZtZngrQUtmRnJjZDMvNUVxYjJudmlwVHdlVW1EVFBTYjZwQ0VvZHNHaVE3cW1mQStDOFJjNEpGT09veUNISXJycEE4QXpDWFFMSGJ1Qm9wdTNud1dUTFJhRGwzREdoNG50ZHJTcmtpMnRWZEtlNmR3UkQwN2RWUUkxdnNEZytXQWdXY2RQQVg0bFllNXA3L21wRjlzaldnc0VQLzBHeE1rYzc0SVpOcXV3ci9tUmV3dllQWVE0K3NOVXVxRGxORmU2T2paM3BGQ2RNdFRSamdmcE8wMExnVm5RWHI4SWZFbHQzL0dXdVRwMW8wMVVxMjQ2Zi9pQ01ienZmL3ZRdktSNEZKQWg2VVJpbngxMDJoeEhDYndtRVN4WkVhcWkySDJPZWJwdlI3WWxrSlRvbkJSZC9lOFFTNk9ORldiUnZTa080TlF1OGI0VEE0NzVwZmJHQlg1dHArOEptb2FJRnFHTUExdjFra1JzK042bzUweGxiUFhoRldPOEdGSUE5bStTazdWeVBJOThqODBOZ0xJenhQNEY1bVlOMHdlUHRJY3VzeTk5SmNMZzVCbkFNY2RaN05VaS9jYTRqbUdMM2JXb1YvcGIrcmJhRVlRa24zeE1Yb2JZTnB4ak9oc25GS3VSbng5cnJuczEwNTh0cVZhQWZkOEdZSVFNdXpLdzdhSnpld3crOVJxNGEwUzlhUE9hZWtYbzRzR2s4cU5qWWswSTI0T0xQdmRoazRqWTQ3SDRJZUl6WEFFSnlxWWRsZkY3SmxibnlxUVVlUSsvWWdUSEpMemlrc2dNV1ZjL0FPQWtTMHFiNlRlR2pSTVhZUGxMUGFHQ01NNldJeU12UEt5cXRKMFNTWXdtOHQ1RkZDUzNmZXNROFhKSmtIWkZkZkVIM1plTXdMQUdDWjNZVDBzWHRhbjFtSGtZWDBHN1gwdFlJVzdYdzQzcm0vay9uWDlBZThFelNlcHVaQlJzYm44VG1rVUNiZ28xWHNjYjJsRXgvaDVDamVrSTRXOG8xbExaNysyMmFsQm1WOCtHcjNVditramVkUWNWMG5KU1duNmNkS2pqRys0YnhjcGtGR0NzRzR1dE5FQ0hwWnVjMVhNWE02Q2JnN1pDN2RVLzFPU2UyelNRUWdTNTVQVzFqMnRUR3hLTXNZZGpHbENpSU1GNndleWszZ055cG5ZUUlQWTZ4V3IyRXVNRlcvcGhzajA0ak9VRElReEc1OWkvMHBVVTVyUk9JekxWNzFDeEh0V2RENnRvNldxVFUzMERKZzNtNTNscWZlS3BOaEdTRVNOb29SSTQ1UlkvRDdvbmM1VEFOR2hNeVRoZElRenVLeDQyMUUyeXhnWGlRU05LQjRsSXFHVlMyL2FPMDNjZ2NsOWEzSUJhT3dNazYxYzdIcStnMXRFWUI5Q3ErK1ZmTlJvOXplVm5FZjVPdnpjbGJPeVlDM1drbXRHS0o5UDVtVldzb3dWVTZ1SE9hSWl4Y1dtQkFnMU5GQms3U09KaUsxdENFK0JZMmlhV1AyOEJzWXhZSWpxc1hyR0hFdzRwV2J1YzFSQ2lHcnJzM3BySTBqOWhGeUxna0t6SWpHT0dlc1o5dCtpQzVQaGFORDlmdFAwY1ViM1BQT3ZXWkpZTTRXRlAvYko4OVFhajdWU1NKdFg3UEkwby9heklBTS9CQWNVdzlFYnNkcVFkUDRqSFBUY2FrVEF5WTEzazRKTlloVURFc3dhdVdwcm5LYlIwUjErVEpidXA4d2VyWG10M21nSHFpcFU5SjZubVg1bEVuRjlwSFJQTWd5RmcyaWU2TVpWK09uQ0FJVHRVRE54cXJoc0dtSEdRTlF6OE1JSUlYeGFXNWVjYVBkTGlFVWZVbktKUzdzZjlRR291Z1dTcS8wd2F0RXdkN28vai9PU1Q0U29aUWV3ZFlFc3IzcWZLVGxVOTdTSzNDcmIxN21zYVdRc2p3Ynd0a2lHWjVLSkp0Rk8rbmxoVS9jMUtSZ0VOUFgxZnR5M1VtNkZidnhBWXlsc2JUdXJ3eVRHb2I1a0p2NWw2OEx0blhIUmNtRTVJZGhkZThCYmxZMDB0R2Z2QmU2RmJNaWtuZzltS01lRjl6N2d6T1hkSzVMTmNiTkEvOXNrNXl3SzZIbW04MTRwbU5qTzlWbVBocmU1VDJiTFR5ZWZFYmRQNVhUbXBNek5MSk4yMXNvdmtaR3AydUVFNUpyTjJDVWNGWDE5eHdXaldic3oxWWdZRXdCK2tOYk0vdTlzNWcyNjQyMzFKeDhaQms2b0cwSmpzQVIrVVVnMC9kNzZJeU1kTkxxb0FIeXFwWklwMS9TRXdPelQ3Rko4ODdPMU9qNDFRcE0zVDZJTURad2NteE4rRk5JN0tqYXloaHJNL1NFaGFycm0wcllobFNrQWpnZk9sNU9kei9ab3ZXN0FyNitTdlE2bVV0T2pMWlo0S2d6eWRYZnFLRVZmTktjeEJGQm9uMEF5bTZGZ1hVeHE5VEhqSE1lTDVvU1VuOEpWMXNCSTVraEZQZE1YeU55cmpMZzNQM2N6TFBCWDhzcU1hb044akErOTlDTlI5amFRVkFXOXE2L2JlYmxtd1VrOTJjTy91UmhvZXliRmd5TmM5Y0dlenFBc2l6VHNJYWRWWnZ0cU03azBVNStLdkt0L1lpOWFwcFhhSnlTb3R4THI3WXBLOUVBcnU4YWl0U2NCZlVUbXU0WStlak9IemZTWHBvd1diTGdVbHdzNktuemV1NEpHVTd6TEQwaEtpQld2emNBTGVycmhKS2ZPOEF3bDN4UkhpK1BsMXgrU1FLakJrTzBqRnpSY20wd0lrRWpGQWlsOGs2WmlQNWp2NkoyMzJTYzgvdXVjUVVhN0tKUjVQZ1Rwa3cvVW16NW5oSDVxYjZ0dVFaaklKS0pGRVRHcm8vZnRyRVNYWnRkMmdWZDdZN09HeVNDS211WVRzMG5IamxaSy9qUTJxVjZmcHV3Yk5rRTZPRWx0ZFRmNUxOV0tqT2crUDRPSGVpZjFIaGM3TDF6MUczSjN4TmRDZkQwY1Z2VGdZVjd4cFU1MnRpYjJOQitxUnVDU0Jyc085M01HNDdTKy9EWDRDQWdJRG5uc29BNVdKOE1zNGpZMlByVlRYQzQzR2luUStNbzZWSElxdTFmSlR6d0x1SEk2YkNNQ1ZVM2N3ZlJXK1FPa3F6U2VPTlZScFpCdEMveCtkeHpiZnQ2SEdubFA0eVdGS2l3dHNWN3EyeVBFRkY3MHU4WERXdU41bVAreWt5VkhkZk9FTzE1TGdPVS9Kd0hpOStpNnBjSVFrK1ltU2xIdFVvc0JHeTRkdGE4T1JaK1hUUTRYYzhyd1luZnBRaVhFczB1eG1jQ0VzZ0p2T3pnOXBZaU1XL2U1SW9sV3F2MzluTW5Fd09lUDFJUEtjRldEb1FiaXE2MUdLMDViRnN4VjRyQy8yNEcwZ0RlTnd4eXRDQ2dwbTFnSkhseXpLK3hmb0sweEQwQnhuZFRoSm51NHV2TkkzV2I3b3ZPam52UmdCTzNNZ203NHU3ZzlaOHJFWEJJSFJHSWxjU0lhWG1pRTUzY2g3cHBwUEZtTEJSNklDOHA1S2UvMGVGdUozNStGM1pYM29FMmRwWVhFNVU0U0JsenMrWElneGY3c0Y0UG9NTW1JT0cwZjVCcktMRjB2bEU0aEt2MDZUQnZpSTBoaEkxakxDNnV2TmZSNkdxcUZvZFJXcDdrQWtHd05lMUQvWUNNT01Vb1lkYXE4ZzA2U0dObEF1YUloT3RHNFR0bzNOZHExOGh0b3BYS0orSy9jNGN5MlR5WFcyZlBIK2huOE9rTis2OGI1MzlwL2diZk9CWkJYNkRFTWRtZDJ5WFBhQy9qWGZ3ZWdUbSt1N3ljaUVudVhoeWVjQTlNbTZMMWptYnFsSTZpem9QNEltKzN6S09CSTJlZGUyUWE4alBaL25Ic1ZSNFU5V2xwT3pWRUN3TzRkcncyZjJQekZVZkFDcjB3OEVsY1U2ME8vS2dTQk5yRmhxamFVVGtWREtrVXFOV3FPTUkyQTJWNC9MdU9waTZGdGVGL3hWNS9BUm02VDkxZEZGbTFYaFVpeWVNaG9WV01yRHhUbHdGZ1FJU3FWMXcwTzRTaUhyem11TVAxdWVTT0VZVTRuSk04MGdPZVd1QlV2VmFFRnF3MmViclpHNXhYM1pmTW5JN01KcENJSmtzZTJZOEJtTHlYbHE4bzRiSU9BNTd1MWUrV21nRzNHWURVTzFwTCtPcXBIekdIc2NESlVseUNyVG9XYlpJV3ZiTnpDbnRTcVRTLzJlMEFUd2sxZGFCN01DVGRGM2RYa21mZ3cwREhsT1VhN2ZvZ2FsZ29KVCtJb1B1VnFkaHpqUWdEY0cra3ladjQrQVA4SkkzQjRQbC9YazdzNmhZdlZBM2NBU2d5L0huejA1UndUWUgzaEk3MThSeUg1VFZuYnZlZ1VSa1hVcEZ6bDU4MFBtR0pyUWhoRnJudkNFRTYvVlZobTNvMFc5UkJvNHRUL2g1eVZaRUZ5NWtqS0U4V1RQbnhubW1wVmRjcDg3VEEzMktuY1pVVlA5WUl1WTBoVkdtdmJpRzg5cGp0R3NKQXdpNVgvWnpyekNpQ3NVbXRXeFdUSWVIbDFidVUyMUp4MDcyQ2dZeG91YVRrNkpHRDV2Q01obEhldDJtdEUyODFBYk1IWXFxM2UyRkpZVWdsVVl0TDFwb1R1VTJDaVhreHhSM0t6TkVyY3RVaG56MEtrSEhETlU0dEpZM1RrQ0Nud2xqZEhsVVlpSnVJeTB1ZExsQ3VVS2ZKZXo0aCtqbVpCNnJ0Ty9qbjh5a2JyazJ5eDQ3Zll5ZzFNdTh4UXBtd0t1ck4zUFh3LzJ3ajZJU2lZWVlqRTFHVm0xSysxbWREejFsMm5GZWxwSW1mTG5NRnVjRjJmVFZMRmNUSUFxemFsOU5yVFFoc3REd0x2OXhXQVJNQ0JCcllodDBNMmdQNyt3NVNuVVN1RXFXamxIaklnSzl2OVk1NXcycWoxVW9uNVk4OTh6ZDZXNS9MQ1Jrc0xUMWVOdTBGRmF0bTFxTWl6bDRZaVlxMFQwSWpXcC9LOHFIZUR2dVM2OXFWUXhHUUx6WW94aW85WXl2MW9RdlcxTTZoYUN1bVkxU2htdjk4bERzeU5VMGVJTHhKb2Rwd0o4K1QxSWplQ0pUVlJic0hybFpUcTFlb0VzWTd4S0Q0NTRTcXVRc3hsbTROYndqZHltcGgzMy9PS2ZvL0xmcFVJa0ZCSTg1QzN6bDREcVNoTkxucm45YmJyaHh3Y2xnRjZTQmpTZG1vZTc0eFp2VnpleXI1WHRjdDBlZXh6akJVM0l6Q0dJUkFocnBYV3JyTTQvTHZseTJkbGkyY1ZWdXFpNnFMRk1WUjAwSTNIcjVJOS9mdTNnYXZvVUd5cjRYK0dIMEg1cXdSUUhxT1VEaXk1VnBuWDlxcDk2MnlsaTVLL2lSbEtINVFBVnk1UUVCd2hUdHhva1BiQWZoZXZtb3VQNThNbDhhdk5CSGhwTG1xY2czV2pKV3RxN0tEbHYydUVOc0pSRlljZnhIY3lBM2dyRlAwbVNyMitWVGVrV0VwblBPMTg4b1cvdTR5YzV4WHJOUk5RYnI5b1FxNTJTV2Q3bWRNaE1aM29uMTNzRXFWaW01U3FweitvNWdGcmUzN2YxazlYMTZhZjJMZnZySVRmZnN6ZjMrb21ESWtldlpQd0c5c2VFbUtYZnhGRXE5RkFSU2k0MjZLYmVzb3c5a0MxTDhUWTdSNWJNNFRUWFYrZHhIWEtXVlgzNGNBV2twQmlmVU96akFScmtEbmlVOGpXQ2VKd2VxV2VleC9mSU1ua2pORjNmSTBqTUc2b0JsdGcrK3dJbmNHWUhJalk2cS9HdWJqZzZEWjRCb2lYck1Bald4N0VsYm82bW0xSnVvL1BxMmRHSjRSUFhoUXRIdUFHdDY0c3lkeURkQ3c4bVNBS0Zpb3Vmdk8zZHF0ekUwWWJFRGtKK1VPRjYxZEttaFphZmgwbXhSekdWdnJsU2RuUnBMb1Y1TTluUVBKekg0djZqZ1RMcnJqaGJSVUpMZTBzQlgrb2FwY1RlYXl1ZVA0YnZHZTNTZHdvY3dTREExSWp2cEl5bUdaa2Urb3NMdmhqLy9JZjlKS2ZxSmxJRXNJRnE4MmlmRjE3ZjR4bk5MNjlKanpxcU4yaFZYeXlxVFRCeG95a2R5eGdmSDJsbkU2RXd6bkJiVHNZcWw2dmJrSEJuN0tCWU9IWWdzZVBydkozZHovMWVKd2JweVJ3bEdZcS84RFJKdEYvcTBlOHdCcVJOVkxvRzVWSi9ZMXE5bjB0anRwU053N0hqZkp3OCtNakdxd3N4OXlidlY3b1FRV0NZNk45Q0RpMjVNOHZENUZucjJpUjZGNTNMMi8wTVc5WWtZOUIxbENxaU1Dd2diSW8xZTZRVW5UZXlpRjlFTG1JZWRCUDdoK28xRFRxNjVNYXJqQVBkeTJKYnBKNjNTc2ozT3gzcjYvVmVBMk1nNnBmRDdXcG1VUzQzenl0YXc5cEJ1Z3dTZ3hyK203QXVkVElwZ2N1d2FLUFZKN1NEMFlpbHBpK0NZS0oxdVBKemZNN1ZRcXFYbmpKU2VNTmRQVVB6NWdCcC9pT0M0Kzl6WklaNmhMZUNWN1ZGS0Fjc0hrWk82NFh4Tm5LOFRPVTFJZStYRGtNK3JtVHNRcE9wYWMzY0ljL3pYSWYyRjRsQkZaTlB4dWUwMnQrSDMyZGIrVXkxblFJb00yU2E1TU1hM3pXdGNqZmRVakZHR3BoQ2U4ekxTS2RlU1l5Z1RUMkxrdmsxRHE0Y3FLeFFZekpIOUtVbUJJSzduaDY4YXJrZWVoYzBRRytZUlF1REo5UGQ2eWl5NDVpRTQyaFZvdjE2eU5rWThzUmQ0MHgxU1RvblhFV0MrRk9oR1NqVTlGRVNablRLeVdmU3doNEpTb3VodWVPMEV2enBRZFdFZGRTOUcwVFlyb09rUzMzTG53NHl3UG40Z200Y0RSTnJ3UmU0RWJRYTFwNUo3MFJNSnljWEY0V2Fwb0NCa3hESVdQcXJCbU9zRHZyUFN0QVdSREw4RjhuSXNUWjlPbUhwSmdPd1ZHTzRPclgyQ3Nla292dEpUSjN6RjlXSlV4dkVLZVlRQmhqZVdwdllrY3AxVUJVNVBEWTRrN3prYUdDT3VlT3VibDhucm03VGRkejF4ckZqRno5MmVqb0VDSStZMkpXSWxrdkNrVUROQ1BPVUJQODdWNCtrbzdIWi9ZTnFZZ1NoNWYwUEpkZEk4eGJrMDliSFFJbU5uR0oyZDJGSWQ1bTdaeno3dXJYSFpWbHdMSWMveFF2bHhQOFIzRDNWZnk1RGdUZXFSYXFrcnBvUlU0dkdldFNPWlhhaXl1N2RmYjMyVWJrcGJHVHRoMFA0S3ZXeVc2Znp2OG5ocEZUQ2NNaktlbUxrUmllMGxqNDMzYmxmbDhOK0RxY2lBNEVIT25hTS90Y0RQNEVSVlZ1WWhjOHlMQmV2cDdCR0tuU01pV0xZc0RacU8rUEMzT1ZFNndnSjFXWDBudW1OOERXOWwvQ3lPSEdhL3F0UlFVNTJYdW9ucWVlL1RSM2hkdXczSUNMVmRQdEtRNmlZV0dhUVNwSHY3N2podFNMa25QaGFxU2F0ank2MkJtUDhTclpQY2wxaVh5dmNONUtFd1pid1g4clhZeGtJY0ZlSDVVK0JHaVRzR3g1OWhOY0R0a3JaREg0eEo4Qk5RR210MXZZR05rbmY3ZU5MS0xWWXBlaWExMSszUXpQVzJxSjZOQ3Y0d1FCdEExWFdQa1RwQVVWbjhoK3dwUExlcnh2OWVmN08rNFBveW9JRk9BN1RCUkNRTzViYU9TdXN2eTlOaVlVOVA1ajhLZzNWLytnUlpzT2pxMVRzbUYwdUxNSjhKai9EdUFiN2tBVmxZeUZXTit1cjVicE5RVG5ZV1dLL1dpMWNSdFRDU0ZRNm9vOElDYnFDYmZhSDZVTkU3WlFYYzFrUUJTVTRycmNUTHRFc0NIcUZRT0NEME5LbC9GdXE4OXF0SDBWMTJvM2ZJT0RYUWppR2Vrck9VdXpkVURra0ZVRkwxUCszeVc1N0tzQ2FMaVFQQW5JdnVENi9CVm40elVyRFdSSDJJbEM3YXdSUlJBQ2M1Y21rL3lienRkZm84aWVpTXdYWUhHZC9ZSlpBZEJ4dWlJNnhlTWxjTzhhYWJEb2FwWFFIc3Rsc3VlY1FyV1o3c3IvT2JRMEJ3OG5keTlya0d1VlIxWXlxR1J0MGk0Q2RZZ2xMdzNwalhEWDZLUXpKUCtwcUJwemhNK09MdTBaOEMvR0xpQzZkSWJ1MDZnQlhIcFlueFVZbnFMd2liR25rVkJ1L2puVWFNckNtd0c1RmlDM2t0UHJOTXRSOVZmWXpkV01IYktoMDhQUjRYYUhCRG9Qd0N0eUsxQ1cxQkR3YVZjTlpYTmo5Y0VhTGhXbVZ6WVFmZ245TVNSWGRNVHY1YUErcEQwUGF4cGkzQkZuKzAwQUpOZ2hKYXI5QUJwd3J1MC9HeG9JWjRMVW1oWWJzZUNWOUdwL1FIKzV5c25NTHNFeEFWYjM4aUF0T2NjcU5td09yOTFCblFET3NJdFZqSmhyYkZLSjcrRm56Q2h1NGlKOEtNeks0TlliRGJMaVBpMG8rc2dpdzlMNzNYM0RCSVN3MGNqaXRuRWNCdDlEdjZZcFVmNkRvQThtangxU05MTDN6d2pBbitJTVhQWFFqRTkrcVFLNkpyUEJpTk1qNnZXYUdjakNGRzJMV09XdFFrZDR2dkhoNUhpZVVqVGtxZ2FlS1J5eDhURzNtd3pSMnN2ZytMK0pVaUFXRVJyTWFlOGJ3dmtkYzd3RFdBS3VZNFBRRkNaVmhSOTNGOUtjQzc2RkVZaWZyN1F6YW4rMk0vT1Q1dEVpLzFPZE82cUxKVGhMNmh2YWt0eGNJTk16OTYwdFdjZGdxNGZRK3hmQmdxOHJDRjFBY0ZZSDZCbFowWjlpK0J0K3ROQktFWWhnb1ZQV1ZuajFLaWJCZHdmZkkydjBuRGRmaFg3dW45SXFyUG5ueDE0MzZneWQ3UHE2QU5VWHoxL0NybFdrNmdOeHB4ckZZMzJPT25VSk5UMDJOSWRFVmpHbmNtbFlvYzE2bE9oczZKdkVvT3RlQVNYaVNmQkgvUWxMZExITUF4eWdNcHp6SndPKzkvS1hHSXp3TGdGSThTdlhBZXF5Rk5kZ2VxWmhnZmFiL3cxbDVwRERMY1E5dkFlUEZOeG9YRDNNU2ZWUy9IWURQa2JFV1VNTmsxTjZWOXVnc3kya3MwNjRxcS8zaFAxSzVnYkZyR25rM25RT3R4Qnc3MWtsTWhJcmNXdXdHbWwyVElUdWJpNDBFVERWNDBiRDZsVWpYTjJLU0k3Y2ZNS0hNWEtYWUtWT2dJZU1SYVRHTHg5RHM4cXQ0dVhucVNwYy9RS204cUY1VjF1TDFNNFBBWjZvVW42TVdKTUpZUEhPaUdieWtJbnptY2dLUkUrSWp0OWJ3cHpmQnh6MkdGVzF6RW4zM3NFT3BQV1RCNHdadm9kT0pwYStmekxoR01aYUZJNTNZR2hweGpTajZIMDZ2cExCbHU3U2ErSVp5U2NuYU1RWHF4bENrdUxYODdIbldnd3RkTDF4R3d3RG9BRE9NRUFPZU5oc0VlTzFFaCttcUVMVVNDbUdMWkFOUjJwNCswdTM4bUszaTNwTmVLVzhlMUdqbUhDMmpOODU1cElXQ2FIcGo0N1JBWjV0SUgzZ3NrUTJ2VmlCeTdYampMRmRKU1N1VEFmVG51aXJ2RnJrNWpWVXA5RUl4RjZrNXo0TWdwWEZYY0NxY0Rubm9IdHpnckRBS0pTeGoyMVppSFVxRHBWTmV5eFAwNFUwRUV5VFV1Ym5IR3hGejVsUndCL0JzeVpDMTN0eSs4MW9HYlBtNlc4c0RUVG91azBUUG9yTWVqYTZDaUVLNUlCaDllUEpvbzVLY2tua2p3ZUI1dStOa3pja1A2cHczWXI4eC9xc0QzQTNicXYxa05qSkdGeVJOL0JwWmNtK0VOclZyZEIrb21hYjdKZndmOXpBUFhWRTZ0UnIrSUhrcmRCUXVienlab3dzVTR3ZGFlTnpDb05BYzBvQ092bEdUOEN3UzNoaU9rNkJNekVMVUk0bFNIanE5VEhQSDB6WERHdmdJdGlrdXo5WHQyR3FxVWtoelNRQ1JOaitGREllbVlOYnZDcklJSW5KYWVoQktSWXcrdFQ4WiswejhJNjhCNHdXMnNvb0VSVTNYWlVndFJBa0pUS2tHb2NKUytuOENYVFVFNng4WFdmVGZLS1R1NEFwTHRtM2N6cDNZdlVZRGc4VjAxWHhiUTRxNzZudFRiR2VoSEIzcnZEdzYxcXVzVVV2T1dIbmZ3Wkl3aUtaQkpxb05jdXdSY29LTG5rTmxGcXhCYkJtdGZtbVpVcjdvZW8vM2RuZDZNd1hIUWswYkdhN0FjUEJrR1lnbkhQMlVaWkd6QVh5eE1uMS9FeTMzbjEyTGlXbVg0SXRWMU0yU1Y0QlRERkpieCs1eG5mN0VvdFpoWW80U1hTNFJHN00wemFsbzh0QzFMMTVEenFheCtxOGtoQWQwQk1ldnZhUWIxQStTWXE3ZXREZ0R6bXgyekdOVHJGMzVkVy9kNVFsTGZnV3kwQmZwMnppdVp5OVJ4dnRBamhMSkFKUEZOWXQ2ZVBZRmVvbEpiUW1pdWpCZmNRUDdLSHNZWHFFdVBRU00vU2I0UEJBRUh4Z0xlaXE1SE50T3RFNCs4dFdaSFJ5aFFtbEFrb2ErQkxKbW9FSFZRSUc4TGF2ZC92NVEvQWViVktrZFo5WnpGb21tbXoxMVNaY3VVc2FPakxDVEhwTWp4NytRazVMZitkeUVkN2tNOGprclJ0SjZkdDBvL3ZrQ2hCNm9EclZTeUNWdk9vaDZJeDRLVEphbUM4K3BuaUtSdzZab0prWWNhZlFmdndlaTA5UHJ3YWlBSGRLeUQ0czdGY1RTdjh2MWFlQjRMc3VJRXo4RnpBaEZLRC9FbzZBOTZSTFowRHgwbmF5ME5Lam5pSVVtUEpGaFhFVE1yaGtPaFVDZGFsMWkzRnM2dDhQcy9lcVhNN3Z1V01zYlowM2s2Ny9tVzhZR0czTmZ3ekxLMHB5UVR3SUdiV1VwU2FYQWh2UDdEa1JueE5JVDVTSUhSNCtvOVVsNkxPV2tiUDJXVlJGcDZ2L0pvZmttU0hiN2F2ZjJJSWNzMTIvQjl4Ym0rd3FOUFlubEorWURJT2JVbXo3NjluaWtYMVorSThSSVdiYXRoMnhVTGg3aHp5YmJnNzRJTDQvbGdNVmxQVUdCcW1UMmExS2JpVjM3dk1BN1R6SXNYZ2NDVVJaSThlazhHbXpCYTgyRDVTVmRZeEI5dDNmT0I5bld2MGo0bGE4YjhORXQxdFhCM3Z1R2hQaVgzWGFsU3BpcEh6YUs5ZUtEUFFxc0o5Q3FoMmhtS1k3QmprVTVScG94cHpQZHNCbU5ab243bVZPWkJhN2srVzRwaUhQUjUyTFJKME0rOTdoMGkza2xnZnVjZWRvOXNicUFabzB4Qmh6bFZlR1QrenlCRkhLTk5PZXJFVzlEYUczbmdLdFNvdTJGKzJZa0xNNWloZ2tyUTJPc3BZa0tZNUdnb1BVZGtwdFkxMGVhMjZyVlR0Z1pZYUJFYVRDZDZneDNQclFGOTd3TG5tWFRCWGxGL2pTVWlwWkt2NU9CWTdNLzZsUXJyVURKTWh5QmtlcytYend4bGJLbDIrVktpZDZLZUo4Rm8yUlFlUVlUbkRkc0JWRVY1RmdKRjlrZWtaS1k2djZ0bjg4UTNiektjOHp2MUlwOXpzSnZMN2FPdXViNER2dU1uSXpNM2NjNFlhV0MrNzlPdUdTdS9NNzRYTXowM1laOTdiT3BsYWZXQ1V6cXBEWXlxV0s1ei8zYW5NcHhlNWc0NWlCbWhYWFkvUkJKV3ExaHpwL2dGdDYxSW9neUhLeUhWWlJqekZhZjgxQ09wZlp3bmtvdktFRE91MzlRSGhXOVoveVF5SHlTY1JRYUpkbHZZcUFsNXRUdXRYSGZZK1QwcnlCWUZBdU9rMGNobFhEVHBFZ0ZjbDlCUFdaUFBleGNxdHlKSW9ybHhhT0Y5a1FQanJDU08xODU2eVJ5Y0NETzhSTGl2a0dVQjRZYVBCZ2Q4R1ZyL0RoUXZxcjZtTDBYODNKODZldjdDUHkzS2hnR2JjQlV3VDczald3Wk1qalE0MmZpcWM3QXFON0NETDRzMU4zUHhzRDNyUklQbVdvUFdqODFtQlJHYmtlekRrNS9aUzk2bGpvbm9MN1E3WFF5OHY5d1VsSWkyaGhNNW5jVElJN1NMQTRmZ0IrMlNmWDlsdkI2cXdvY0JxMGx2OTZITFJhWERIN1IxYzYvOW1RdU84K0FIYU9rWk9QcHRtbC8zZGMyOThTSHNhSVBFd1dYRTVOU202K29TajdwYzF1eVRXRVhsZGlqYVZsSTA2dys0cWVnbmJybE9iOFZyMm5Cdkl1RXU0djYwbEZ3bUd2YzQ1WHlycHNuV2xGL1JrcWdaK05rMGZGZE42RHp3Qk1uM1h1S294ejROWFJhamwxbHhSNHpuVkd3MU1WdkxGa01XU0FIL2FWWFN5dmZ4VEw2YjJTR0pvc2JrUHRsdzhOVWpzdXJVNEFraXErWGNxaHJoOXY0STR4emh6RG1KWkVxN1NhWUJ5NmlIeFNBYmZXZ2FkRmtXS3ZIWG5ZaGxzMmFxTEZMVkRNNWRyTWZsM093MW5NYjFGN2VqTmdTY2pxdFNTZVExSlk3cDJoMlR3YXFBNmEvMEVIckIvUGxkZ1ZZZ2ZIeTFpNldYMUVSV080RmpFOVFLcUpVeG8ydHFXekZoT01MNnh2OVpFOVFFaUU0dURWUVdrWi9KcVVnRWsva0YwV3hLTExVUkFWOFcxekJXSTd2VlYvdThzd0J0UU8rZENTejhObytQVXNERklhTFlrSEhQd3A4TlZxd25DQTFPcWxaYTR5Y1ZwbkF1MXNUV2lMNWxNNnZiM3VkQmVqaHQ3SGkwZ0I2UGhqdDJyb2huYUdYcWRpQndmK2dCMW5PeU1rRStSbWZhYzY4T2lGemdyeG5DZ09SUVpCRkVIdFN6d0VVWW5lMDJyZ2wweCt3VndaZUcvRGE0WC9SZWJBSzBCU21jOG1ZWUxIN2lUYzAxWjh2ZjQvRFc5MUs4c3EzTkNlNG9SSHVuUHZJcUwwSGE5NllrNVkrS3VhT1hMek5GLzNJcXFsTWFxSG9MOWh1Y2R6Q2JDZC9lUnJFZDhycGZ6S0N3cml4dytKd3FndzJKNURoK1MvNVBzU0RHekl1WkZBbURSbW00S2ZjVXVxQTlpUVF0M2dxZ2pwTFd3OGRxS0xOTjZoR244cmN6N2NHTndrd2U3UmdYUmtKQWhZWHI4ZVlkSnJsSVpLWExFWTVXMGMzc0E2ekpxWENrbW5GcTAyVk1yRVkzZVhkcFdHLzJVQndtVUVYNlh5SjVtWnVOM0lmZ0o1eEZRN2FneXBmYkRDNHhrUlpqK1ROS3N3Z29LSURsN1l1NFE2VWc5aGVBS1NiclZLMzU4QXlKTnloZDlGN2M3YTBKL1RzRnNobXdoai9hekkrV3FXM1FmeG5Gd3BQWjg1clVPM1JpeXBkNjl4RDdHbHhrUVVzdWRLZ3MrQkExVmtxYlY4WW5NbkJnUkRtT2w3eWN4U1dSTWdvT28wYmV3RG1pM1ZMaS8xZG14TkxURnB1cTF2ZHNvRys5aHhSUTdvQVk4bDlkaktYN2VsRjZHdGRZSUdya2tvUGlaRkpPTFlRb29EaEk3dk1PTllyT2tIOWZqd0VXY1RKaWg4QjJqUVk5YXFIRm4vNWx5aVpPektNaFZaWFFtZ1U2VFV2bzVWa1Zac2NzMTlLcmEwR1JhalVkVlgxOCtOZjlpVVZqNXpxUmFENjhKZW5ESndMb1l3MHVtRXBRdTd1NWppV2x2enFZZ0F6WWx3elhXZXZONUIxZEJEUDZkY0NGeWRlUGNvNjdxYmhqTU9NdDdrSWdlZlIxMVROZHFNaFJyT3dXYkZISGZEVVNXNmE2KytZamdMWjlGWGVBMzZTWFNPaGhoNjcycGg0VWFNQzZXZlpJcHRHTkxzR1F6Z0dDVXp5N3JZSXU1T2JqcjMrcUhQTHFxTGsxb0hHZFJZbVdMdjF2RmNpTXY5Tnc0VjdIZHJwaitRK1QvaEpvd1VLTXFHK2U3c3JSOXRRMXZ1QThPUm9GZ3BrV0I4N0J0NHlxVmh5NU9GQ2gyNXlGRFVxZVVnY01XaE1BYXZVcWFuRWFNdW83VjNwUnY5L0pPNjBMS3U3M05LUllEZ3E5Qm1iTkh1dEZqRUtiNDVBdmV2Z1FTazNHUXpIdUVWSW1rZEt3Uk0yMFhuc1dKQVgrdzNtakN6RVk5eHl1NTlzVHNWc00zMTZoVU40ZE5FNVNUWjF1d21neFVWazI5TkFQZzc5Z1FrWXVSSGt1M3hJWGFBVTZSVDROYnFIYy9rQ3BGTjhYQk9YazAzdkc3S2plZ2ozYnNTb2RZZTVMbHZPem42d2phSFBYdmNaNFNxaW5rcGN6dHV0a1lHSnlESmpKZVZDYUcrZzhRZWkrb0MzTWt6cm5VU1R2RTBzcGtlQVlnbnI4UkJLdDIvaDh5a2dQODFiOHY2Nko3elFPRzFIUHFkVHJjaHJTNEtlakhjYVVFMzBFQWt5eTVlSkMvMGp6N0Vkc1pseHJNSWhDNURDSE95MmRrdHRGakNIaEJ6cytqNmhDRFlhMnNWVjBUMFhFUEw3K1JWRjJDOVFEalFLZElBV1J2bjRhcjNYQUNuU1JZYVkzL0Urd3duTHNKWlo4ZENWaTBUOFVZdEpvTTBDK0pvVld0TmljdVNJWEZOeWxoREVYY05oSC9MOFJBOWN4TXBRa2lzbHIwT3ZEWVMrQmlYMWRXM21TcjVHNjhTN25aa05MR1Y5RElWNHhYZ0lkMFFybUxRLzJxeWhtVXFlQkZOek9TK0VWR0lOeVFzU3lYVmUvSWd3L016NFdvTkdxS0IrQ3FyOTA0UWRROU0yVHZDVVBmaFRQTmF0bHczVkFGWnBjcU0xaVJkTDJRMXkvSlRDMTJOUlpkVE9ncWsvTG9aUUljaldZT1RzQTltdG1udGlqQ3dld3NTUFJzVWJuUzVYdUJpT1FSeGZaQWdXY0ZnQ0VLWit0Y2dnK1B4NXpkMlFra3ZxWnVobmZjRHVHSWFqdEN3RlVscHY1cDJjUmtKQXRMUGtTR09VWnl4OG1BU2I5YnREdDExMFF0WStFMXJNZzFMeVpya2g1YWdzMjNFVWVHU0ZSd1huK3dpTHFxcTU3aHk3NUtsMVhQS0hMNWprU0s1S2JBbTIvSWloSnd0dW5lSVZ5TkxDRE1MQzArM2tmZi9LSlVNcTV1eFFjdXIzbC91eWJuOGwveVc5YXB0OHk4WjJRcTBNVlBPMW40NW5BTk4wL0RjUDBUQm5UdFhjVEJxQlUwTGIwOWQ1WngzR3A4MmdmbW5tWHpwRVpQRWdNZDJTcEY2WFlsNXp2S0pGNU5qVi9XbTBjY1JCellaMWtDdjRVSjZpeW93dDA5UG13RnhKcG45QS82aWdiaTJzcDNYQ2dCajJ2aTVEeU51YnhIMk1Yb0VkU2JQN2xKSmxFNlBUd3F2VnBrT3d3c1c3a1VnVUtYVUx4NjJISFE3N0RxOXJmOFlzN0FUSnNVcWZZYXFRam9xaU5BdlhCSnJ1ekx6S0RTbU9wanV3aDVDQjZOWU1FenJiUkFWZTl0cksvSXdlOTJ6MmgzQXhsSFJRWVZ2RTRJT2cvbVBDaEMzNDVnTDVsb2JmaVpiVmxraFozcDdVMnZJaFpKMm9NRGJxbzBzT1U2cjI4bjNkdFZ3ZTlUZEFrZ1VISWNuNEFZejEwdXZZZGh4NGZZVS90UmpmNjc3NzVDZ0t2dDdwVnE5aGl0cXFKYmc4NEUzdWJBemd2OTVXZHUydUd3eEJRT3RpLzdaVTVqajlZNHlldnVWWitKWWRGUWYzZHREdlNSam5kYjduSUt4NlU2K1FacGZFU1QyUWhOVXhPakIrekYvSENLeS93dVFLNTgvdHRsbjVGNmVsSGRGU3p1clNWL2VqWUxZNWFjenJZNkc0cXVnT3dTOWlTVHFab0M3WFhVUTFtWWQrT2d0bmdaTmtGQUsxNUhYR1oyckJNNTBHdy8ySkN4dUt6cTdNK0FCNFdaM0plQy9vMy9SWlNsUzZOQU9VektQVmhkQmhJMjgwS09Xb0VpNU83dUZWb04vSEJhVk02dlNWQTgyTDJPWmpNOTdTZC9RVllIUmFMRkVkUnZkU005dEV2MS8rRWtMRnA5UjRKU1Uvb1d1SVF3YUFlRytGelMyd0N3dU9vSVZKamFhUU1aUGtuWmFGVDBoYWVVSWgxS3B1WXZ5YjVUaE92YWpSWG5pS2dRS2cxWXRHcE4vQWVRSGo5UTc3NXdFd2NDR0ZrUkFMT1Nta2hnMjBtV0JLZTZjZUJHRFh0TmlaakE5NmZ3WVkxQ3k5WEJGOXRoMHdoQldzaGNiYUZaY0xsdmlGZjA4Mkx1TVVud0hxZHdJUGtBS2NkWVdYdEpzMjFmQWFKOTBjaWgvQ3JwaXpUdkMxQlZJWkdKbzNDWjY4UEpTSWpIL1FrWW4vUklIYzhkL3NTMVNvbzVKVCtkb3ZqdXV1ZzFiSWpKTzh0N1lidUVBanowVFl1V1FZelRPV2VhZmZJSHYxc1JySGNBSENWYkQ1bjl5a0dGTHEyZnFCQ3RIckl0cHBmaGUzNFVrLy9BRFZ0Y0ZTSU1jMlh4amQzUnVCTzdTc0xTYnpZeXFwOEFNTzc5RFZZWnlEOHZhQ0tOdEYwcWZYdGhyNWp4NFZ1aEt1VGI0YlhKNUR3K3BCajBmV2l6ejlvUlhZYnp5bjc2VElaaEtBSmFtOGVsWE5qWnY5UU5hMXdydlM1cWZZQXZjQ3pEbEdMZFp0ODhrZXRiUnlWcmxpRWJoU1BvNGZDUkNmNUxONGQ2Y09vZGM2a3Q1L3JORElZV0Q4eE5FQnhOQ2wzbU9hZ3FKYU1TY3lrOXIyTTN1ZWdHRjJwU3htSWRtcEtYb0NZdE81NjdBc3ViTkEvYS80dklzQWJOSFIvRWxwTDUxMFJDbVp6N0RaV3ZhWnZTYUpreGdjRXcyb2tIcWV5NU9Xanh3RG0yd1cxNW80NGFpeTJEaUpUbjJETmpkdUx6Q3lHNHI0bXF0SXAwZ1E2L2lrYndMVnVMUHlzTzFUYjYxekRyNTlnQUovK2R0am9oMFhsUDNtQkNvZHAycGlJWTVpWUQzWEZLV3Q3T0YvS3VnYWVhdDAzYTltYlg3TitNZjRxZEV2Rlg3Tlg3UkpMcWp5SFltWHA5cll3Y1dkdUVLQyt2M3prS1pnWGFqVkFqZXVEenFMSTNFOHdSMmZIczByZ01ydkkxUWR3M0dvWjRlN0l4SUZxdWVGSDFSTWVuMStEYlpsZzgyR3puWnMwL21zZnVQYm9KSVRJZUhnbWduUkZOOStWdjFRRUdRdURhbEpab0xXWlFMVytlbTBvNXdWN0Z1N0g3a0ladktmVUxkeXVvUDh3RktEejE2QnZOWkEvZG9oa2xXNHBRRlFHRlhSTkJXWUZtb0NyVGNKS3lkUkYwYVVPSWRVelBuUS9HanlEbEZ3cGNvOTc5TEdYdWU3NTBENWxhaDl6OTU3K04rcVdlZjgzUGRhSGZ1aTFZTXg2OXN6N2J4bFdDVmc3VjU1SVovbUdrV0hkWmhsNU9MMmZBVHRLMGpaamZyQVNKTUlKb1ZBdTlVeWJQZWtmNXg4ZXdrMW93azVXVGJhbkR2V044Q1FnVnFFRjZXblZ2dURMaThEazIwdkhCeXFGQ0VZeHNpZHo2Uk9EKzBPdVFVaDJHbjNNbWoreGhuZTcydGpFU1FvNitzcGFhTitydTRQWkp6V09WbG5wNXRYSnM4dmpzVUdETzFaL1lUZzkvcTFLaDlaSkphUEM2REdEbE9rbEo3RjdGWUhDOWpUTFpMSGthMUtRTms5TmpxZlBablZOUG56cDlyYkM5TTFFNEFzTW9CYldEWGw0bS9aN095bmFkWW9HWTNibGVpNFpWWm56RWZVcThEMWY5TUpZRVRtV3AxWFp1YmZjTFV0L2Y0VUh6dDMrMFFOaVFSTnk1Vmw1bEVoQXpZVWJBSGkzMFZXOER2S3g3dlU1ejJmRTBKSU9UdjZlZXJHek1vK3Z6WnFaUjlXMG5jbytEMmJ2RWxoMVVSbmt3cjVMbFp3T0JqMUQ3RncvRlRwNFFyR0ErdHFMYmcwY0JVeHlPSS9tYWQ0ZkpqT0R4Ni8xV3hVR1JZQUtYcENBSFlDZTBvaEFWREIrQm11QlRoSEF6eFdqZ3JGS1pCb1l3Yk9udUkzY1BrMXZ1RHRYQlVZV3BjMmFtMmwyVEVvcTlva0lXekMyM1NZZzA4YkN5ZG5iZ0NWcWMrdTVPTU1NTjZWVGJiYkFRNnBIclpJMExCeVNpNmFrVmVCUUE0NFZpSXpFOFFwNzk2OUlDR1hUdUs4SmNPN2F2RGlCMmJtRGFJa2tvRWJUbk9vOEYwcUN5dlZ4bUN3UGxpR2Z1WHlqYjUrM0VXY0xJWDZiR1RodjRKZ0lMSHhOVmEzQWozTDVLY0FYcWpubHVVSDBhZlprbXJPbHlyN3NWTktINWxFUkNjVmFWSERRQXFyQVRuUjBmR1dRTDRsSk9scWJMc0lTY2hoK3liNEFlclVvT08zYnYxR213eHIxc01qTFdzVWtNNXdLTklZRE4yUVdBcDRlT05SZUhqMzhuL1VvZEF5V0hjR0JnQms5WkdJdkd0VmlRN0tHZ0Z1ZWFVWW5MT2JsMFZUbEt5NUM5OVRZNlM0VFI3U2NCdkpxYmhRdW1EQXQwRGRZRUJKY1RpUnpGTXlLQ1hEeHgwTEgyRnFpRE1uSk9VT3NmeDZqWG9iUWhSZFZPLzR5aWx1MWx2c1ducEUvdnpNWXRmcS90RVFlR1Rsb2w0b1puVnJQQ2VROVdiUXVoOHZTeDB6L1FJdktJakVuMElNYmhWcDlldDFWd2h0amNmZ0NxOGs2RzNmY2JVMzhmalpFS09hNlRUam82dXNpc3RCUktJRHkxODg4Um1ld3VMNTJWZUQxSWFjRWIzbnJmSGloYjJJYlpITHNjamZ4Zjl4UVg1LzlZY3llRFA3Q0dQTWlCemViN2FwV3hYUnJsbWNNQjdmcWUxY3lUTTRaSmJYeXlmRVNkcm5zUjM1cXM0aGtoZGJUZk9KM2s1bm93cDF3VFEyZUxobDFWNUdGK1BUVHN4K0ZJUWo2NlJ4UVV3TXJ0VzcvY1VNcEwxVm5zUDJ5SXhiWkR1ejAyc1VNQjRBYlBkZHR4NnlLL3pYR1ZPeE5iVDZsS3BFaHFacSt3Y2hvaU1ZbDBGZDFFSUZhVm0zTmdXUURQRVh5clA0ZWQ1dzRqMy82OUtGYjEvQTh1YnhHci8wVzdEZzRjMjN5MkozSXIrOVVmeithRU5SUit3NGkwTnNzMy9rZGtHOUFBZkJxMW1GcnBBUjlsL1pQQmk3VWhxYlBkUEJNODE1WmYvaDNZUWlrdE81US8yRWw1Q3ViSkorMjZhSzltblhFMEJydlNHcEtwVW1pNWhEN0R5YXRwbnphZ09uc0orbXBSMUN4L29SZnpyNTJvbUFZN05MT1U5ZGlVTTN2T2FUb1lQVWp1UjJxb0Ezd1c4ZkRSVjVndTdtNUtrd2phUEJ3OUJvejY4TlpwZ213TzkyQk5GcGR0em82YkZJSlR0cWt2SkczblBHV2NEMklMQ2dCeDllYmkyemJGcUhJR3RWK1RqUEwydDZpLzNBSWJ4Y2Q3b2g1aW1vNjA5eVBRMTczK2g5dzJ3Q3poYll3R3ZqVDJwQTBSVzRrQXk1TmVHeTFZNllnNHgrMjdndU9oNXMzM2poMHBwcHBtYVowRXhvYSsyNWM5S3JZc29oaTYzSHdmVFhaNHVaMG1BazRqOHhJQ1RJeVcyR09QMXNrVzlWSU0wdkZoK3pmSVV3QmtONVdOQjh3dlozczJOZHFpb2VZbFlNc05keXYyaHQ4ZVZUZHhJZWFzYTM4ejlpOFhHZW1vTjloSXR1WTU0WU5BQW51R3B3T3VyLzBHeXBlUm9VcDlKVHNJNXpEaTQvaHZYenlkaUpRYjRxMlRmWW5ZWUI0YWFrZFVqZ1EwQjhtVFN6eVh5UEo5UEl6MENSOFBjZjF3V3ZmeEMxM2NNQU5sU0lUU0s3TzFOMHNHbUNqUWJseWRpVVVqZmZuNzlRZDBnQXdJZ0dQUkFLaFJURG5zOXQ4ZVVBa2hPWXpLQXhaSkYxSTF6TXFFRUJyZEhKZEhlUm5uQWVCODRha2RsTTU3K0NFU3ZDczB0aVlKL0FSdmZGdUJwc3UyZEJyTTBabXhvaS9RU1BjbThxVy9YT3RsVFYyUjFxV3MwVkZROU5aOEdtMy9Yc2ViK2YyZkF5ZTZNeDFVTzIxTEdRWFhLMWYxZFpFUTlCcnUrcDMrb0tPUzMvemFhZjE2U28yd0hNczdOeVI0UUhJYVVFdVhXN2EyM0c4Y3RZdjJRL0prb2sxdFNZK2NVbDgrT29ZZkg2WDNmNmFQb2NJcGw3VHE5MWFnd1o5T0RORkV2WU5sWTJGU2tzTW8yb1oxNnNPSXQ5aDNaRUorQ3o4dXJmWi9lQUlkQ2RLUnl6M1BxWXk0d3UreXR3QU1qWk9wRndMSklwR3FEcTRvQTVhYUVsWmVhclVhRVprVnZGa3VzK1lxYnB4L0lJajBIelRRM1owaWZlcXRCeDE3Z0pSbEtsbTZKWU85YlJ3NUdPTG5ISkY1VkQybFpPZFRGOHplM3d2L01wRXdpb1BrczNtcUo1ZnRuaCt2aktVWXlOSVIyaGdHdFBHV1JkaUxMRzFTbUJJUjZFbkZxMGVBU1FPeUhXbmp4YjFoRWowS05HUTcreWNnK3Y4VkxZdUpCU2Rsc1JsN25wcW1HcEd4SmRQVjFzZ2pYb0pIOEUyakU0NlFqTVNwL2l4ZklEN3NtZGhPRjVQUUNnTDdJdnREZmN0RUtqalY4UzlPV0U2VXVnMWE2aXlOTnZvbENFYWtOL1pBWHVNWUR0eDlDSWJDNkJtbmwzUVd1VDd6ZUJabDVKa1dGS1NhNDg1d082elpMN2hBRDYrc2lPYTAvWjNqMldiZ2dETjFsT3lRQjkvZVVsRmFvcEpvYXNudXBUdE1QOGdKUWNOZENWVXliMVJxbUpSRE1sM0lHZE0xdk1sam42eU5mODJ4cWhzdHRFQUhGSE5XNk1Eci9CYTllbDFOZDE2WXVQU3FDcXhjMWdyUGp4SUxLdTVxMkM4TWJRdzF2cFd1eDBFMlJiNThLOGVYVGxUUjEyaVJPNkI1cUFLTDlvUVRsQXE0UksyVXFpRmtGU1V0azhlUGovZVpYczF5ZkxSbUpzMUl0akZRbnAvQ2NzQzRVY0I5NGg5MVBIeFdXTEVCbHFZNXkyZ0N1YzFDK1dDQ0M2ZDc0RXFEUzc3TDlpdnRDc0hRY1JENVI1bVlJTWhXWTdqS3dUS3FFTTh5UXJseGo0VFhSODVCN1Z5REpRTm9DdkFNQ3BaTW9jUzZOODV5c3Q1OEdtS2N0ZG5qOUhlSTRHOFZvTm1oZXEzc3U1aTluRFd6VTVnVkhmdjlScjFIQWVVUU9sTGgxYzljOUh1c2pDaUtUcS9aUkNkd2V0K0VHWFl1eVJMYmdsYWxmUEQ1aVpTc1dCbE81WFJvNXZabGpWdHNOdGsva01pem1hRHAwa3ZReEwyN3BFcHNjTUY0RERoRFk3cmtZSTRVMk0vMmZFTjlCdmZxY1ZZZlc5aWR6cDZ3NzI4RkFWYXVLTHM0VGV1NWdLNExLbjE1Sk51OTlRN2pMWE9rT3hKdS9uc0ZEei9Nd2NpYUJhb3FHK3l0bnVPbUxDRFlwNFdYRTc1Z2FHQTkwZzBBQjRtNGh6OEJDeGU3NjljblR4bTkzVlkxWWZaSVFNeGJiZElCeXp2ay9mSVE1QThuenl0aEpka2ZINXNMM01GRnVUUUlzMjlObkdreVFHei9IVDh4NXR0WFBnRDJmbFVXR2IyaXVxaC8zajBydjVrTkpxRVJVZXArMmZUTWVScTZGMWFWSmgyZ2c5d2xTYmhhUUNXVGVvQmhVRFhQeVVtTmVmTTVQQk1sMXAwUFFWL3JEcEpxeThnNWEyaDJvb0xBaW9iN1V4OEpKU25nTTlibE9uWW41cTRjQ09OZTM2a2tUTklZSGNjaWdVdnplVTU3TXcrMHprM2R1QmFNRzBMZzMxM2UweE4wVFVoN2NaamM5TnhkemgwRm9uWUF5UUgva2YrNWNGY1I0SGdGd0Z1azVYQm5mNVVKRHI2dW1STVF2NVZvUnVDNHJ5SVYyay9xdkRHbkVrc2NVLzFudUE5aWdpZEJWSDZWZkhzMXJmN0h5TTFPc1NYSzZIemNLQlNPK3NWSHU4R1UvSEJnaStLTmp4L0I2UkxtdWZZTExvcHB3d05kT25TZGh5MmpONDhIcjFLd3hla2N3Z0wxUzB6RzRIS25tMGFadHBEKzVXQi9QTzIvVnUvNk90SzcwclkySCtUTElXV1BreTF4MVdGOVN5T1lzeWJ4a2FBeFNiZFZLcEZrQ3UwYWtIUllYR1pHQTJHSTNyamp4cEdCc0tWVEw4Zmt1ZWVkWjBHWTVyaFp3VXVhYWU3MHhDQ3FmN1k3YWxFSFhEeSs0Qnp1R2hTbHR6eGFpZFBXUnd3VjJNM3hxMWtKWlRmWFZEbHJnZkQ1eERhZSsrZmNiL0F0YVdHdURhT1pIR3JnQy93Y0tlUHJLSUZPeE9rSmhyVXN1aEVWNEpNK082RHkzc1dFcFdhRWdieS9IK2lsQzdtbmdtakxpd2JhZ1I0Y2tIYzltWFN6a21rajJVcm1jMUxuU01zTkNOem9aYTdHVEQyRC85SmJNMVdmQ0VXcTZrdDZTaGhwcmhpZnovTHhZcHE1VWRBa3I4cnRNZnlRWVFrcVF2MTlBZmJMdUliY3hna0lweHU4aG02ZC90T2RDSFpmb3pRRU14d0kyczkrS2VIS29rNEJoaHdMa0VwdU5uUGQwNmdiMUc5RjVuVUo5MStuYnRkczVVbENEQjF0RWU0TGU1VmpqTXdIS05waHQ1UHlEQ1VqNnB6YTY5ZzRKcjBBaURwanFkR3NpbFNiOE1FMll2bGdNZEwwV1BPZGcybGlVZTQ2YWQzR3BYVEIxTFVmQnYxU0llMklOOVNLQ1I3MTZVMzN1T3NPNDE0bGxVVGViK0xKQUthSUVFNUcxc2RPN0tJeHRIUEZUZ0VBL1BvUnAzSjRZUHRQSWhQaUpqOG1SVHB1a2czb2JSQ1gzbnFyRlo3bTBBcFhSTmZhZjY0ZVhQb29KblZCemlrYVVlMkttM1FWYVVmd0NMczVYWDl2Uk9yZVQrQ2hBTm9lQ1NnM0haaFN4TUFZTmVraFl5UGhlWW03c3J2NTlxR0Q2NVdoV25yZXpQb0VvUUQ4WnAzZ1U0UExEcGJ2MHVHek5aZDl4ZFB4VVYvbEc1Q05YYXN2MExZYUhFZTQvajI1c0YxS29oQVFHeTllTjBORTUvMXFmWW5ZeHRCVVRPcmMrMHNQcml3VzZiNnY1dFpSK3R2V3phTTJPQ0tvMkF5TnZ4bkNneGMxWUFvTlFRRDZrTUFuSG03Vm9qb3dTeEw1b0hzVXY1QURVbjRtOE1ZS3lsZzAwRlRWdHlGbFV5VFF1dmRXWk9VNHhiVyttWHdVRTVQTzRXYld2SHFaRFNZazI1Tm40eDhqYy9mOS9KbE52cjJkUzdiVlpTOFlvQXZYcjVWTmZSTXFDSUU4ZFRIc3RaVjBxQUYrdEZUUUZ4VjFGQjhuWTRNK3BubkR4MUZqNGZQSGl3M3cvR3VmanRDQ0x3THZqZ1podVVKeGpsT0tOR1pRVGl3ZVFqNDBuM0JHSUdTdHp6TFhUdUpQQWpJdTJQMmRBblFrRUYrL1U1OTA2QldqeWVHTHJYVG9WSzVVSjlEUU0wUnBqdVVjZEdSZ2F5TDl0Yjdza3hoWFJjekpXYUFyNTVNZEE4clQwSUh5R0lLWmhJTXg4NTd3SHc3aG1xdy92eTM1VTVLek9IZFk0SWozdVFtSnhQcFpyYi9TdEhoUkQyYSt0b0ZZUnJpSExJMzF1bmpwN3R5TjBMSzdDK2h3VVg0KzBTMHZyR2szTTRVQU9SajVLU050OWtRUnNPWEhlUUJHVTd6Nng3UWdUTUFEYWMwY0tHVnpuR2pFQ0ZWSEVGNzNJUWNQZktHempiak81U1FuUlpMRm1KWlNjQVRpUjZYRnBZWHRSb3UwVzBJVEVaRXFzTi9yTm5sM1QrcWpiR1I2MGttdlhHaGdjMEFMRW1hTThGMXh2VXJQd2xjVk5xZ0djWWZXbktnUUhuTjBwdUlzZS8rQnhVemVlQlhmcWJrUGpMYytYenVpNjYzMEQyMlZMaE9EM21YY0NJdTMwcmdBVG5LSlo0bXZ6MHZvT1FtWjFGTWJUOCsvMFowWnV6UTUwU3JNUW45Znc1T1lIai9EQU0zRFIvd2wzOEZNcXkxY2FGc1hwdm14cTVsUnZRU0ZSWno3U1NpMG1TSUZCb294VEVaV2tWZ2k0dlRIQnBpY3B1WWF0U0tYYTZTckJCbTBacXkvTCs4R01GQkhlZTJadGNiZGl1WmxEYXRQTW4wM0J3UzhyQ1hXb3Vqem5tNUZWQUpuOW5DM2ZqdU1jYWNMZDE3NVlvaDVkM3c0SXFkU0lhQnVsbEdyTjZuYjRBQXRGdHFDa3JyZGR2b1IyUjZpT3ZoR2ZkWWxxbDgyTzluVXJ2MWJiSTMxMHNCZU9TV3czdE5vSXRjQ0szaDJZNjdQVEZndzROZmRTSmpLTHg5T21zcXNDRk42cXRBM3FjUjRwUXJqOVh5b3hPNTliVU04amZWdmVMUFJLSDAya3RrKzNYR2dKcjJOMlFGM0N5V3BtcStvN01nSVFoVzFPMHFwZTRsVCtmdit0N01HN09Id00vcHpmemhTK0lPRG8zdTZsempFd0h6bnlFZkFWWlNzaTF1Uml6VXRNS1BTMTk4M3A3cFI1TlNadXNvRHRobmFIVjc0OUZFMDFjdElQOCs3Zkk2c0JOUFgrYWdGYUtHNWg1VGUyQVBlbGlCODVEMjY1RUJWV3duWnBTZ1ZmSXFsUExSYlJ2bTBXcW5ZdUNUdDRBcFcxUVpBMHRIKzc2cC9jd09NOXYyR2V2V0pvMGxOMTJLQXBWN0FXTGpqUlhHSmhSR2VualJpK3JtcjVtVUJmajZqK0VHWVIybVNJTHlEN25rL3hsYXdweFFZMzEyeG5BWEJKRjUyQ0k2RHQyVWo0N3cyQWVkU0h3aFUxRjdJbHNpSW9seklmOFRzZ0dNbjhZdXR1T3UvdG5oVGlMY2JnT2k2bHJFY3JwSFFueW1xaEdWOU5GcVN2OXZVSEQ4R0prUWNmbVp0MW1YVnJVTXlFZzNlL0pyVVNTNHI1c2FCTkVPWXE2dmwxbjljbEZVZ1U3OGYyYkp0RGhGc3lGSEhvSXZjM1dEWlNNUHBLRzkrUlE4cDZSMzB3ZjQyVjJTYW1lOEpuWnM4Sm54UXVCanVmd1lyRFRPTlJ2WDdWeXVCODdkdFh3Vmw1R1JOMWg4L0ttSnYxWDZQNms4bnJwdTBlbitkSzNGbFEzdkRyT3JRQ0hTOW9DSTZDNzAyYzAxTFdFTkVNVzE1SEVzeUN5eVF6RlBmRTdIMkt2cXUxdWc4WU9jY1g1RjBjem4venRnTjZ3ZG9lb05BVWc1T2JPbjFJNit5YnM5V0ljc1ZUL2xUOEMzLzJvMTJkUmdrL25YUHlwOThya3Q0VVhVVm1UalVpUG9oQnY1MkZzM1RCVjNFVm1yZStsZ1MvdERGektYcUxmaVhkNzBXaTBkU1libDJnMkxudFAydDFBeHErTm5WOXU5WUlYTVBDbFJReDVmQ1JqMFFyYWt3VmhLMnoraCt6S2k0Z2lGZlhNNEw4NHFUaXJpNzVmOUZzb0V3K0ZPMFZFQXNTM2dlZzFXM1VwTUVwcWFsWmtSbW54UEhSZWwxOHJDY1RiQXpQdWRRTE5OK1p4d0VLSGhvakVEeDVjSDNyK2s5WDNzYnBTdkQ5RC9aZWhVVFhwU0NMQjc2MVVYWENSU1hxa2JBZHhlOFJOUGZvWjRsMFhnQlZ6NzcrcHI1TUZ5Zy93a20yVnFKTmFpUERjdUFYVXpwMTVRQlQ1Wk1jRys4eXJ1Y3RiSVM2K2xFb0NaSElFRjc0aGxMWGtremY5Uyt5VEwxMVZXZlFVc1lrK0xHQS9SWExiVzZBR012YmJiYmExU0luTS8yWTd3WG96cnRzM1FRMEI3WXJqYkVZR3M1YzR2cFhjQ0RsaCttMFk2S3VVVEhFb29ad1VNa1RzeENFbjV1SjJFUFppZHN6d1htMlVBNzlXNklMNHFuL09JNDNYakZGYS80akcyYmFnaTk4K2NLSGtLbTFHK0YyTHJxNjlXTWtPZ0hRQ0ZPY0NPQmFoY3h0RnN4ck5wQzNMTzZqZENrWWtOd21OZjhKOTFTQTZvSm1Pam9RTzhvVC90TTV5YVpkTCt4QjBTdXpRUmorZklLZzdoOWVCRlBmbWtjYkpza0FSdHFrYW40dWd1K2Roa0lUTXQzdzJyQnBVWjVwdXpzM2grWkpERVhqenBnVDRXYnpZMzAxdHBmNjI3ZHBjdWkveUMzRmVGVUczY3p4Wk9wazExWEdjWTFPcWZiUnh3NHR5OVYzS3psaVNiNTdaRFBjZEdxNGJkS1BMaEVicGNCSmlqUm4rUWVmVXl5ZHlEdnVYMXlMb210cWNRa1lZMDZyS0s2Ky9BMzRXMFpHZjk2ZGF5V2RJSTI4Y2J2QksxYlVmN1FjUjgwSVRSbFJKOHM4N2xPUUxxM1I3UEprTmxyRkFYMDhQeDBrU2xiRk13OWx0SEFhWG45SXNIR1Z4VWc1OWFTN2JJajgyMWJrWGp0KzMrT2RwK3JadnhVVXk4dE1INUFySnJZSW1zM0FQOWZaNHFwaWlPczE2OUdGa3FyVmRIM2V1WFpIWkdyZWh0NzJkMDNlZ1JpU21ZcE5iUHI2VzJGR0NFSmZMVzFPdjRuRjhTUDYzNGZQNzlUbXZHWldrQlhiMEpVcXJhaUdrVVREZmdLaDRXMVlNcXFqNnJqc3VDZFVkcWNlQUUwUTFXbmlLb0MxR3lsTnlsM2VwcFYra3c1TncxaUlMWVVBV0ZVbHpHa1BsT2FjTzAvZllac1FDSVZoQ0JDbVlBZnR5R2JzZENZVll5YXcvT1RzMUcyWCs4UG9yUEdPVHc4a0hqeFVUUnlPNTRBZUFlQUM4Q2xSdWNEWndodXl5VmRqQnZNb2NqNVpqd1I3ZTI3WFNqWjdJVlJ3djEzRWtXTU4vbno3UjZMNENBZ0lDQWdJQ0E4ZjIvU0IvdCtpcy9aOXViK3o2OTcvYjlNSCt6M0IrYjdmcE4vMFBvM3I3ZnRHcjdQcnE5KzM2YUQ5dnUrY1A3UG9aLzIrLzUrMzdDWDl2MU9mZlY5RWYrMzJZdzZiNExxaCtwcGw1cUVzRmcxZ0xwR3NTRWxWMkNTMVZpR1pjUEVlVUtDdjlaaE9TRE9KUDZUaWJEeUlvcmdMNW4wcU1Yb0NWQ1VvU3AraUZOeEphSUphaVZLZE1vUWRRWEIxblFUT2lMcHZMTmltTjVoTVd4SklVWDdkeGc4T25Ib2dnOU1zYVQ2TFU1bXhaWWxGZElVZHJUZmRzQjhjTVYxK1pWWGg0TUN6a2x0d3F5VWhUZjJjZjd3dERPQU1Kc2IxUHFkMkNESWhxNzByZmpqb2lCcE91YjAwNWFEZzRuZGV2Q2pQbCtvK2JPU3QvY2xhTHg1RWVCYW1SME15b3NBTDdUY08wUUZFY2RaR1N3RXNUN0lmZk5zUnZMYncyOEFsV2tGSEZ3VXRWejVQSktDQ2tKQzhtL2JMS3c3YTRrM2plZ2JQVVRUa1FzazF0VUZCdDZYVGtINElNajdpSlBGYkh0aXhzb1Z5NC9TM2RMVkMzSHFXM0I5TnVXWWJ1ckVZV2lSOUFpUWZieGVEZEZ3R0xHNW5QQm1FcnpveDZJc3FMNm4zUExNZDhxZ2pFM1Jxc2ZVTlpPUWdsYXNVNmZta2t2U2pmOEUzTS9UWlRFVTQ1cENEK056TEJlY3pPWG9rdExtQXd2L0Rqa0lDMUVOWHBEcHNhbkhaQ1BYbU1vTFNheENXRCtpNFpjcWhIZmttaXZ0UXEvdks5a3RVdFIxSDlyd25tM1hPNyt4a0pHNkpob1AzbzVHS05pemkrVXFmTXJEN05BeXQwNzVOUWdOU1l1c2RYcjloZDVmQ0o2QVV4QWx1bU1tczk0eG5LMnFjUWoxTFkyUUNmeHpLRnhrd1FsN2Y4WVpIQzZ1RVI0b1ZOTDR4aUZIUWc1OGpSdlVnVzVjTnpkeVFsRVZ6RU9RTGRtVnhvaGNhZnJCMURoU0RkcFpWMW9UM3hUTjlBYWloRFBBcVNwWmpZUkZCbXl2SDluM0xwZGdEQVg1ZzRsckFsYzlOeUk1d0JiQlpYSzBjOCtCWksza3BpV2kwZ2VBNmg4cDYvUUVXaUs4QVhXRzFSUlR0d1dXZmxSczdxOFRCWGlwKzRRc21uL1NPekt4MlI4SWdERlRhdWloQW9Wak9GUy8xR05jaWhKd1UvVlk1NHd0akw1aEtJMDFuWndHYXhGemd1WXVsa2hvUUlrYVlIa0tNZTJDR3dWREFlTFZwNVhOWlpLNFFzcStrSHRJcHRoRGhhd3pRcm4xYnVyeTI4ZkJUcmhNWWZNWWhBS1BQaUJhaDJYc3NvbTczaVBTVzRZQTRKaDBYNkY3S1pLRHZ5YkpzdHJzNGl4eGJkQS9WRlRKRzlRVzFRK2JVdEJGclF3anNmaUoycU1lT3NpVjl6NFk5WCt2ckE1SHQzZzdCUDlBcVMxclFGZFJYMzNRVElvdTJ6SzBtR3BXWG5zVUl0aDZkS3BCZGNUQUZoS1NsQWEraTdnbE9xRUJxTDV3cHJwZys4MnBvVEpPR0FwYUlrNDFqbVJ3VC9XdERiYzVMM2xsTVcyMk5jSTZTWHVhWm1tY2VYWWkxZHVpdVUxRUJPZVJWQTR2MXZaQTNBbDdXMVB4QUlwSW1hLzZQMW51aUp3UklkbnJ3bGFuUjJGNnNXWGVhMmdOK0gyTWk3SC9PUDZ0Y2RBSitFeTY2dXJNenhKQWplNTVNRTQ0UURDeTUvaUxZUHZhMmd6eHRZRkc3Tmt2SFNydHduWDBpaEZyaUhJR2FvUGdzblg4NWM4SU5Cd0ZTSzlyWUQxWmZOeEdiR2hIc2kvaDZUcnJrL0lNS09wNGlCM2ZKQmRBUUt5cG0wNytVbWkwdVNsMmlCOGJ2U29zcXBNajAyMVR5N0NkNVJnTW1YOWNGcFBqY3VHQTZwQXBqOVdSQTRsSXF3R1AxRjZFdEJ4dnFHOFFYQzE2TU1IUk5IZE54N0pHbkFqa3BENklkT01mWHdEay9wbm93Sm5DRFBsbGExQURES2FMeURxSk1JNmFEOWtkQmdEN2JhNWNBbVpFeEtsMVE1SzhicnhQaW9xK2VyaUh0WGt1WCthQ3JxZjFIUU92MDdqcThFd0RLblBOQThVOGhPaHN3K3hoYzR6OVRMVHJLclNGUzBOc1RidGQ0Rlc2NFpxa2prMmtraEZ4a0kwN1hCV2NEUWs0RUtLYmFzOE1WcVgrTGV5ME9JSWpocmhpOWdtSVBwUnhOVEJGZE9FOWxkQkptL014Z3FtYXFRRWs1SG5hMFhuREw5ODJQa2xkSnFwMWVXQ2lLcnAvVUtpV1EzUC8xSExmUU5vRmxzZkd6Z1BUd0JKSEoxMVpxbWNuRk9FRThGaVByL3BUb3lwa3lTaTdad1pwY1Ztakg1K0s4cXJWMmR3UEFKWEphN3BpbHhEQVMvY21PS2EvM0pkWXJsdG43TVZ2MVRpRGoyZWhCSXRGbytZaTRBMS9aUkxkOEkrMHJqQ2U2SVY2Mk1rRlYrMXNKdWI1ZUQ3R2VnTTJFRVZRTzFHUzRCSW9MeCtjYldxS2xaRlVwUTNOV3dRNFhOUy8xdzQrdFB1THpVbVdLTVFoS25rN244cVVzcFc3VEZNZGxLbWF2RzRpWDZqcDc1d2xoamE1c2lYSERVajZ6VWR2U2ZSM2JGcFVoZzRIVDBZd0drWUExZ21nRHVGYWdvWitYazFHQmQ1UmhhZURrSEtiOHdLU0NXR3RtQlFLWlhnY3F0Zk1lQ2JOZ3VBZGpTcUpZbG9aalVnTFVVQlRQWWVobUVkaDdBV3NQdzlRbWtxNzdBbUNucXdGV3BTZmJMWHN3NzREVzRoZGtKTHhYTFVFQ0VveXhHZDdBR0UzZWhhMFhKZ0FLeDFXOEJBS3NTYlVad1hPMU00eGZzWFZ1TVM0OW9JY2habnQ1R3BoZUZ4UGxJcXZIZEFUQnJVam5uR3RJQUFKWG53Yzd4VGhMdGdDTEdnT054d3QvdFBaWDNWamZMaldYSWNDUmk1SXI1cXZtRjdyOUdlb2owdktsVllBUXFxZlB3RE1sVVNIc05EcDdERW01amw1c0pqakRBTWJYWFhqclByRzcrYkFxRHFyR3c3dEJiMVZGeHdCcDU2YUwwaFp6L2xudHd3T3p2NVk2Rm9Cc2p1Vm00UXcxOUY3SEcxdUI3V04zTzBvV0tsMGdSNFJPTHdSaVk4TlJZdEpxbkdJN2NpS2ZrYXJFTU1GRnpqOXpiR2xuSktpK2wrclluZGRqUmw1WUlsWGN2Vk5MSnVJWkw5Nkphb3dNdmwzanpVa1JQUUtuNE90TTFibUpnKzB2TTZ4QWxJNFZKZnkzRjBFSFZvaHQ4WXJVc3o1QTNLZDFLOXZXN2FqNW1nV0pQdGJtOEtncjc0NjFOcjhkbXBNQ0ZmYlJDbVNCOTlLZ3BEQUQ0SjdLd2FicnRMQk5hM2Z4NDFuT0FtallHMG81SitkMGRvMEJpYlpaR1Mrd0t2MGVlQlBQdkxEYjNXZmIrOUtSK01GdlNJd0NqN2RRT3lZSUJ5L1JsWGp2dVJhVkN6cG1XcVNZaFRXN21DTmZJZEJtZTRXdUpaUW1ISWNCTEVoN1RHTXdYb2ExMXRad1ZOYnptTmlpc3BacGlTa3gvWWtsYmhCTWg1czBTdmJBS0tKMHp3U2ZyRFZqZ0o4Qks2WGZuemZTTXRXRzRldTRxOXAwSlUzSUp4YURrYTk2MC9YMWJGTmRzazlVZ1pDUjEwYit3NXB4cS8xZG93ekhLOFlGbU5qZmxoOUtwb3RFcVZ0dkdkdE43VUorTUd6QXhxUkxjaTFjQ3VUUDZON3QrKzR2a2tjS0hQZkVORGN2MzNCRFlQNWJQc0RNOHRMUWUzTFF2RHpyNmUvY3YvZkQ5Y1pkR1c5RUh6SmZMeHZHS2NtRmM1U3R2dDAvaURRY3RCaUQwQ3NmSVc0dXZIRUt0WjdJV1pBRjJLaDlLWEVFVCt0dlZGZld2MnBwQ1RPd2dlQnJJQ2hKL1gySm1wb0RuNFZ1WTJHKzc2SHdudThFbC9QSjB3Kzhpb2lzS2hINFVjTFMyWnppbHdYeW5sOTJrL0RZa01JblFwM05LcmFnZkh5ZGJtcHJtZk1ONlNaTmplSzQxTnp5MnJjSHo3WXgwSVJOczVROS9HczVybjZuZ1dBVGN1cC8ySTFxQzBIK2RSWlJKRzhxQVorVll0ZWxHRlhmMXd3dlRVWUtVdG95VE90NFBWWkw3d3RNT2RDWE9mNjdkOTRUdEJhU0d3azdMTW1sTDlhOWVFTVhHb2FkcmpSZVI4NTc5NmlFcUQ2bHlQWmpvbkRWdklyWlI5ZkQ0R0swUmlHRWNNR0ZwbTlzOE1pWHNaMGx2dUpCQVA1QjBKeWZvc09XU0NGS1FzVXY2amNxV01oRG9QVy9IMmpPOE9RT0txYzZRME5FNVN4c3JMT2ViT1F4eUlyU2JUTVZoamZWa0p3L1BvMWFLUU9XMEw4TExicmM3aHBJajkwMlNHYlBBTk5xaE5td1EyZEsyaEZQekJjYjdvZVdsUkV2ay9JQjMrR2FqYjdGVEJYQnJSVDdCV2NVMDNIYjdrTk51TmFzVDd4Ni9zVHdKWHV0emxadEkyZWxkbWNGVTBGaEFxdytyQlVCa1BmR243dVovZ1d1TDRFWmxEN2dhQzRELzNiUnJpNTFrUnBEdnh0ZlBtTUxMVDFTci9LUjZNM0xxU3F2MWQvclJSWXJ0bFhNSi9TTzNQM01udUhtUVlNWGJBbW5sTnkwZ0xXTEFxRzNKTlV3OHlURkFPSzNqVk1PVUdtWUlHMG5JM3V3ZDhWQTBtTzh3VXliZWJTS2dYajlFZ2VsMk5RVjY2bnVROEZ3N2E2UkIzT0xndUl0N25qbHZVSTZ1ODFVTGNqTitVVkZBZEFiQ2xqbjR3Zk0wRWtvLzFOVW4xckdvZ2pVTGFZbDFzV1dTR2g5T1Rhc1ZKTHRISDc1SzZMNk5YVCtqcnlVZFIzZnMxK2VtZzZtS2pBRStzb1hMcGVrMkZIUjRIemdqQzBsazhTTTR2b1BWUlNVcWRKanpzM3ZkdGZhRmtLa2FYc3dFQTI0bm1FVkNwQzRPbUtNd2lJZWtwV1BPTjNPYUk1ei9CTnlrMm5aYVFUSkhzeDcydkx1aW9NRDVrQityKy9Qc1RsUHNRWm0zSjgrNjhsL3hDVm95MGJwWG8zMWVvS2Y5N01ldHBreVpaeTdVWEdVdXc0ZDhtRWxPY0hyTFVBcENjMHJPWWl5WkUyUUMyd1FvYmo0cFNXcXF1Z0VGNFBjWmlBd3dBY1lON0xVNmN6bngvUktaRE1XSVRhT3dVNm8wV2VhenVjcHBpckJsU3RraStzeGp6cjFzcVNtSUUvU3p1RHBwd1VacUJJd2VaV0NNSmk2dTFHYW0rVForRVlMMit4ZDA5dzZIMUM2L3NxbmEzeVYwV24yRWxPek1xYjRaVFp2OE1VR0NrQ3dzUHprVjI3REdxc2NDV2QwSVNFR3F1M1lRSGI4eDBxZWRFYXZpMDBJWWErV0JlNjE4Y0hOdXk1eThoWjE2ZExGSlZpd1hrUGZ6cFFyQUNHaEJ0QVhiMmhoTVd5UnRHZ0NYaUFrUUpQSGJoYlM0aVF6VG1kL0pLaXpBWnB1aXMvMWdMakw0QjZhVnhQd1BmMDJkVDhtd2NpalMzNlI0Yzd6a3Fxbnk3bHZYWFp3MTZTQ21ZU2ltcmdza29Wckd4MlQzSGlWTWU3WWlGOGp1NTJUWjhlR2VTcmVoTUlMS1FBK1ZscXpwRGxNT1l1VDZxcXFKZVJBcWRUUmtSb2FOQStGS0xuTUw2Wkh1V21GTUM5cExicDRCdmZvY3oxNVpKSDQ1UWtiM2E2c05FSUxCUWxwbHdwd2c5MDVnUkxoYUxNK0x0MDVsVWgrVkFKZjBla0FiNXVWaURoU3lpZGs3Ni9EdmEzODJQaWhMSEovcUMrN1FWVVFSaU5EQW1kRjhYTVBGUVZmbHdWMEdUdnVHUlozNTdiakVya2dPVTYya1orWWVXT1ZScFFNY0hRN1hsQWpFeENDZHFYVUNtbnBuTjc4dE9RemdRdjVQVjFPZGJHbjlNV2tqTmpaZHhWdTdCek5iZFRhOHBmK3gwczg1SVFLWmNyUEhxTFcyMGVNZ0hEZFRPSnl2YTR3RnRmR1A5Yzl1cE40ZGFMd3dtUEN0dHRXR1NZR05WSGN1b0JPWVhxRFdKc3NSRTVQMWJ0b3hqNTdjNjREZnQvMDNxb3BzNmY4SWhOMTlOazZJNnZRTmhlakpaK0hWMmJJLyttcFdVdmJXazgyVXIwa2lnTFd5cm1QQVU3blU3dzJBSG5zcFVRdGxJTXBSNHZPb2twSElNVmZBN2s5VUd0dkZKWHdlb2c0VzJ1YkU2bGpueDVEVDJ4TmlidHlUNllZK3QwOFl3OFpTd3UzczRzTWhDVFdVaU1heDNJcWRtczZoM2gwc0xEc2wvVjZ3V2pRZ1BkRTgwWkFoRU4zdnRjZkZHV2dNbW9xbGp2eGxxNUVib1oxYjlPWjV0bVRub1dvQTlHOFV4NGJRbnE0NFc0aFEzT1RmNlJ3emZCMnM4REhmQUhYY1M2bmgrcTF2OWlYWFpxZ1FWU0paZFJCeWJqK2xVK0g5RUNQU21ZUlNYRk5hVUJrS25Qa0ZNZGxGSzZnWC9ENm5zK0hHWVhHNktvWmRLRllGSzU1QzdLRHM3djNDdFBXMTdxUWkycTlHVzdLZEpqd2UyK1VpNUk3ZC9XODJFSHR3ZGJSV01jZFVLZGdhMzlzdW8vRTR1ZnQ3NS9qRTVKQzZzRWJPYWIzZ0ZpWmpESnR1UGNtdDBTMHNPSUNRdzNhekJ1Z0tFWDNteXcrRmxkZjlJUGx1a2JETFVEbWg4QjdqeWVxVEczWnhuR1QxVTNFeHh0Uk9Ca2dDOFdUbWMzb2VSNEFvY2ZLTGdzMkJzaUpFWDVoa0grNkVzWk40MGF6ZXpUaFBOTWZEOVcxYnBrUFNyQnB2cStEa3V5QXJENlUwdldRTXE3MzNnOE5RdXFoN0FOY2xZRGRSVjkrSTNjajBYSElBc2R1d0w4cWNXY09aTG1ySUtUb1IyMFpMQmo2NlpRa2krUGRXVWMxTUpvYU9OM0lnNm56MVRWZTV3UnNPQzhhVWlUSnc4elNqZUZJbVNmS0E5UW5SM2pmWHlnaUlEN044QWpxeTVVNm5GUU1uQkN6MU9jMVpNcTFmaGNKdzBLQm9oendlUkxpcVkyLzRaNUlnZE5ia2NhS3lCRmFQaHd6ajJMb1EveXR6SHZISlEvcWdwcTNvWkFiU056RERPSkN1cUpxZmkvTzJvY2tFcGYrcktJQlBGMXduQVRKdU9lczBORzhVdGpQVDM4R3hEckpxelo3QnQ0eS9keXI2dXB6Vzdic0dUdVpTWkgwcTVMUThpMHVXOVloQ3lncXQyMkkyMGxDNFVoQ2d1Z3NGclRibTZWYXJrdGZRSWJ0dTBlWDhQc1ovcVZiV3ZNQzZldHppV3hKMWkvbTVNdXdqSkRyS0JzZkNIVVJJQTB3UzR4aHFjdEI1ZytZWWhVcUxuRGpQSUx2VWEwYjVtQ0FEMXFPSi9LdjU1SUF4R1pMOGd1Z0xyK2Naek1sZlFJMGdrTmtuRGE0cXZmS2lPQnNsMHYxTEh2Z2NoU1FiNG5sdFc3b3FYNFJZdzN0MllCczdlVzlMOE5TK3hhT0VGMG1CNmxBZUIwZ1Q5alJEWmplRzBWU2RGdFRNMUdpS3JKZ3VKY0xnQmlxRDFnVlRvbDRFbFkrTlFtLzdHQUo5NDYzY054VUZQeW5LYlVrUnpDM1Ntek1nVFdadURCWWlWRnlqclZWZXZma1hFMXpBaEtwKytwRllNTUVpRWt0bW5UWFJuL2VpV1FOOFBiTWFnZHhZUFN5U1dMWDFla2RnNDBCKzNvRHRxbnVxMjIwV29peFZ2RTB0UWlMbVM1Nm5IOXAveUZCMWd4c0kxRDM4WUp6dzI2elJ6NEJGVnlGRUhhZ2toWmZjL05oSUx3VEFMb0FBVStjaHZrQUsxcEQ2Y0JzZ2o0VlZML21DT2VOaTNHNHR3SE5ITis3OE5XS2pFY0VVcSt2ZEcyN0w5OGpCcXJkeG5iR1Jkc2FuNVJDcHBsL3hyeEtpeFJyWDhibElob2FkQ3QxcFZMZDduaS9rR0FjTDNGMFFtSXFucWV3RDM5dXoxK0h3c3NlTTkramd1c0I5UTFuZCtHNHlIVXBzTzNtKy9kSEk0RFc2RnhDUUIvbmlHbHZhL0MvaDB5bUpkOWdTR0VsM2dkNU9LK3lKa3F1QnlNSlNFQURvaG1weGVGWmQ0ci93TWZMNlFBc1dQUExmZHI4S0ZuUS9JZkNzMHBiMUg4QmkwM0pGdEpXTGhQc1BuZkVVL1JPKzMvelZzeVZESkg2SVNLc3kwM21WOWpyRFQ1YjYxS0dkRE4zZFM2bG1rZjM4K2RFbGUvSURvVzZOSW42YVJFalpsdjdsZUJ0S0xsN2NPelpGN3hWOEd0cGg1MWZWU3hRR1ovUFBTL1NYcnBsUzM3dnowYmI3eHRSY2pUeE42T0ZvWlZwTlN4MEJvSmlOcVAyWW1JUkY1L3lsK21FcWFUaWorSUxWTHBYcU5seHdlZS83eFlaQzhqa1FzR1NFZEw3aHJVaGNzejN5clpwb1d3ODhGSzJOem9YTUd4elBwSjNzUVVJOXlmK0hEU3lQMzhzU3dnemJ3eWhZc3RYMU8rWEV5MmhNemMxVUZvNTJNUDhMZVJHdy9EeXRNbUhSNml3V1Y1dVRKNE9SWGE1bEU4MysxY0JpWFVFTEU4bmlPY08xSlBJZFNnRmdPYzdodExuVHFGYW93UXBGeFhrU1ozUGExUytlR1NyMEhxWkszVEhaUU5EaE9zaHNXTFQ1aE1WVlZkOUdwcWIwUUlqalpiemhoc2lQWW9RNVpGQWpLcDBqU29PN1VmTW91Q2orVWJNdFR6c1VYcXc2bmRNMFpjL3VHNURJZm1HdHpvaW5kQ3EzNHIrOFpFcGNiMC9CUU9UUnJIeUVhMkJMdk9odGs4ZTg1OUVlcmxpYzRybjJRTEUxRVNwQ21QeUhNZU5adHBtTWQxeHNyc1VhTFFFekxweU1XdlJkNDVLRnZqN21jdWJ5Q0x5cWZ2MlExemdmdXNpclROREQ4Yld1ME9reFhuZTk3ZVU5Vmt6U2IwM0RCUWZEYWluUldGZWtUenMzQXJGdEduYVFabUdvQ2FWMUtYdFUrVUhjQzBMcTgwLzhtNWtpQlE4N3RnL1R2VitLbDNxSmk3R2swUmtydFZRRkV3b3l4TW5iSzhKNW11RjBQY1lkdWsvYmFSS0VjenY5TklFL2NwOUlSR0NiNlpVdXJab0FjeG1Hbkt0YTdIN1ZXbE5WalBDV2ZocEZoRHFJRzI4TFdpRlR4RjFxcHlrekgvM29JbHhhWUdUaHVIYWx0ZFVBVEN1N2w3NHhnWmdWbDlJQk1RRDFuWFhHNkpUbUk3V29Ec3NyY2VwblcvZjVRM0htSDVUcHF6RzgybktYazBnMjBzdFRacG80cWlkVDRvaW0zSUF5eWFTazVock9HNEZFS2pvcm5kcWNWbUdjUUR6OERSdXpNdWMvdzZMYUlvVGdtUElENGJsbU84bHFvRS9aZW5mNmxoMkJFMXZQL0d2c3VYWDVwZlRJeFUvdmRlSzdBTVI1Zjl2RkJQTU1iWnRWUis4NWJEQmpnY3JHQ3ZFMEg5eUs2bGUvZ2UvMHphRUpjTlNmZUw5VGlFTVJlNlFQQ2ZnKzNEaFhNdEVQOE1rUUVaZEV3RkZkK3BRSmFDMHhaWFFHRlUzcjl1dEpMYmpCTGp6ZDVlK0Z2S1BNZXFaYXNTd0J0anBEcU4yY0VCNEwxdm5QMTdIQWphY3FiNnp3SFVIL2NxbHYyQWg1MXZ2SkFpeWpSNGR4ZUE1Y2NaVis0VDFNbGIrSjVBWVQxY3VNaFl5QlFQanJxTm9TMXpSUmhzU04vc0l3dGVDUXNmZEZtaFZkSTZ3WjhJVk9CUDRiV2FkdTFETHdCU0wwL0ZacTU3NDBNUlM5eXB1UFdmbE40aHBqWjhzK05ZR0RwVk5Yd1BPSXpPdVd0cmlLaTF0akU4Z29rNEVQNFBoVkIydldMTldDWmZSQ1RPaGtoMXhuSGY0S0M1QWNXMm51cnpqazlhbWRkYndGZ1FiT2FEamZpc1pSQ3Q3a0NHTTdBYXpXSjFIOGJYYkNKTmhVc3VMQVF4Tmx2OEsyT2ZrUkxUb2dQdDMzdTM3cUVxNHROc25nWENwMUVlR0ZRMFE2LzFPWXg5Zk1aWWI3d0pJS2pKSGRYTXIzR3JVNEFPbHhpTFNuTVBjWTdyc0JWZWY4a2hsQ2hYN0FPbXMvTm5Wb2xid2MxNHdMZDQ2SzZENG9FN2JVcjlhUldPeXNQcDZZbTlPeElEb01UelUrc1pnd3E0RUEwbUpvTm54MWJuOE1rb1lqSmlJKy9hNmtmN1dzVkN5TGhiTWwrYjVCb3VETVBCM09WV1JDRjJKdVd5bVorVU40SjdqcXB0NG9mOXJmWGtmdUpuMk42cThnbmFQQXgvUW53WGlya0lza2xVZTEwTmZiWWdZaU5PVW9iK0F6QmZTcHRURDYwckMrRmllSGFuMTBPK3hQYzBNNTJUZ1BiS0VEelRNWEl5U1d3MkJqTldSWjMyL3BLdW1FK09vM2VCMHJQNGRDV1lEWWZlMVJCQzlnZzE1ZENDTDJjOThVQllXbGJYN1I5ZmtLWit2aEVabXc5Q24xcVpuZmFoUzdEcWRyNDlUa2Q0cXlmNjNUMnhNTVRvVGR1UitLYjdBY2Z0dzVqOC9LanJhMXAwM29OaTZLRVlnZVNoY0lxeTBrN1p5bkRvK1kxSzd2clh6UmRmUWN3YlFTUHU0ajJBMU93S3ZjblRSdFVrbEhvRGpSelM0Y1VpRXk1a2Z3NS9GWGRWVXRWdG8ycjhVQlRoNEREdnFHekVmMzlWUE9NOHl6WFJOU3dtL0hsWDdlZ1JvYnhJWS91UlVvZm04am14YjF3ZktpRnNWUDhsVGduSlM0TkQzYlZkV0Voc25Ud3U0eUZEUGFGQmJrVFBIR3FBVVBteU92WjVsRkxvQTRYSHZYQlRWdUVDaHRDMnVkT1hvbEMvazRYWDZQMk1vUTV6K2cvVDZWZEJ4TWQ1TlNIaUpTVnRubHd5YVAwd1lPaWtMUlJCM3dFRHRZZ2tGYU0wbHlvaU9QZ2FrSWV0a0tQWmMyQXd2cUlxZFY5ZjNHSUNOeG9vd3lvbVlDWXZUSXErNWdJbXdvbm9JLzhRelhsMU0wa1Q3dmxHZjlhL0RQU2FhajJKSy9lb2lEZFpOeE1WZklKNHlGY1JiN3dnMUZ2a1VVaEpISHNQVWdFUEg0RExZWnhJaUlUSWRCczB0SEQyelFvT2crekRrQTl0OGF6WFlQS24wOG91TVQ1b0QzVG54b2V1NUxKRWJtbTVYYzJ5NUM4UXp0S1hVOUVxck1CNitRWUNJZ0lrMjF2L1FLdkdVeXovallpYlVXTFMxMmJlNWpVdzFEdFZXSUZOQmNBbFNOUjZtNlpzOEp3Z0pzSnJHUEFEL0h5M2tTSEFJRnRhR21ldDU3bC9QbnRqa2NEbis4SzFDWjRhWlBmU09lQk4vMitVSzRCM29MbzlNcXlqRTA0WmJ2aXJoNE5zdW4rOURsUklNS3RxSUJ2VW9lQUFlZi9TNUNuQnlvWld2czZueGVGUi9adGFWbFFleFhDM2pRNHNrK3krREsxZVFpbVBDbmRycmJpZmluVGxOTkRBc3lCbVRBRHNpT3lia2pycU5ZbTJ4emFMZnNXVWJVZzFkUytqaStIdnhaQnVqN3c5ZHVsMTlxU2JLQmRjakVJMUFzbk1vYndxQ05lM21DcktROS9UTkdzd3A5Z0xaYkNlend5emtLSFN0VnRLdENTNzc1b04yZU5SQVhnWkJaYVdaNkVaUWw0c1NGc3dWbUJBd0Q4OWZQZkxVUE1RY2kxbVFRN0dZQ21XelVKSTVYQmpJUHB6TzJpUCtXWVRGUTFjb3g0NG5PSUpyMmR1WTBXVHp6Z1RBQnFZOG9EZm5GaU1BbC8zNXg3a05SdmF3SXNGYU85L0J6cDFYdmJZc2Voc2hXVkFpcFhERFV1RUFvMGdteUNzSW9aZFFWZ3BaWEwwL3EyekpyUmFVNGtpQVNWMHN6TzNXcEFwQzFhZnBoLzNCY29KNGJhbE1Dd3pKaWR2ZjltZnhZYmZJTWFmQitSNmtLVEdIeTFTVFNZaTFmRVAvUDdYQ0x3VEdtVEdBckNhUVg1eHQ1R3MxdnRjcy9QcUlFeEdwVGdCblVLMDRLaVBvUTRhWXdBaU9kMlJjSlZ4a1FLeXNYcjBrY0g5TWxzR013L1NnWmVVWG9tcnNhZ3RhR2xkcjdWOEkvbkVwUWV1M2xYL09OWnlWdDEzaFRkR2dBdWpHNWx6NVhVb05NcHZqM2hXdkJkbEtmY1h2aDZHWXF3dTJoeEdFV1dSdGc2b1h2SnlRSWtWR2FFaHd3dTFjM3JuOEE0eW42emRVTDhHVmdtU0JBVE5DZWhjMGRRTXlKcktrT0tYQmhaMWprcHkrN2g2UW4zbEpTbWlzSjJrRmh1Q1NIbFhQVlBwalB6ZWg0TGRrTlBjNktZdHNGeTRhMFlIUWtXVXR6b0Y1V1NiSndsTnlMdGJJM0RVd1NLM2xSNlRaSXg2NlBaS2ZlRi9QdWxXS0RVUVErMEJhYWNqV1dienQ4OFJCanRJRWhGY1lzKzgvZWdxTjFrTFE4TTBmakdQZ3dqQzVEWFA4RWRiQ3FFYXRjb3ViZ0s3R21GVFowUDdZWHU2RS9MZCs5Um1ZaDJCMkpZWG5EV2g4WEtTdTdrWlJhdjJPTFJ1TnJHM0E3MEFwWGJsVXprNDZSd0R3em1LSnlZUDdVU2tQNjFsZ25rdmRKQ3JqcVdXWnNwRjRJVzBFQURmaUJKL0dJSkhVNWprY1ZrUjIvcTh1ekVLSlRHRHNyYklIcjBoVG1RZzFveHR2QmlieHhBMGxQMUJrWXYxc0xFZTFhZWFQeFhEQ2lRbXozaGIxaUwwTVloNE1WNmRBcHJ1TnFXTFdUY241ZGp4d3A1bU1nQldhMDVsWWFERWd0alRlU0F1TmJ6dXlNZGFlcW1SVUFKVmtDYVI3MWNxU25FYnc0aWNVaTFDS3c3VWN4K2x2Vkp2aHlZRXJzZW1OV1crS1RWMy9GWkNHV1FsdXcwaVZUM0liU1Y3aExvaDNqcXVnTEtCR1NQWkhIS0tyMWRCTUZhSkVpUk9pVmVZTGxTVjNVOTFxMGlVQ3hIYmNTVFZ4VG5GU3krWlhtTXV2OFQvZksrdnV5cmo1R2cyQWU1NVVySG9tY1BVQzdNNmgydmwxeWx1bHhYQWo1WCtlVW4yN3BtTDRJWERCVjNtcmJGd1Z4enRwZmdQNHpobkNhMGxFUzd0ck55VmJjcUlrb0crUEtwdDdVcnk5VllqQ2NtTjFiYVFnaFF4L1RrSXA2a3pDZzBsVlplMFppUlpvWW95UlFtWFdZbjBrbHloOU1QOHMzOW5OaGxsdmZqMnJTMkc5UDJVSjhkM0V1TldmWHliQlVGVnBIa3BtQ0diOFVYRjc4RndBS1BFM2dHRm8wbFJTYTkrTjF1cXJDZkRpOFd5SktxSFhXd09CdWRDRGdmRVhTSStBeFArZTZ6aEVhVzhaeXdQTHdHR3dndXdpN29QSWg4clBlcHlQb0twTUdGN1JmUE1vSE9ib1FpcnE1RjNmNUFsTWllc0lhZ2Qra3RKMWpmM2xuMDdlOWtRdTFZK0tOOFJudXBiRUs3NndiWU9BUDVNWlhOTklZMWFRdlFuNDhHUEtVckFtaHFXNnExWVNZWGNrMDN5c2VReTdxR05VSHByTjlyZ1l4azhLYnZOcDJNV0wrM0dVaWJCcVYvL2NWZFdGaEtMQm5PUDBQZ1RRTFBIbHJISUF4bStuY016TTFKRGF1V0w4RWJrNFVZcjZGK1gweE9oYjRncVBNQ1FyV2JTNG5TeVFWZU9wbkQzSXZlUHc3eWJFRXRNVTJTUm9waENOaXI3ZUIwS2ZJNEZrMU4yd082OXBrNnVJQXg5Q2pFcXZ2WVVOa3ROeFRZU3gzWVpHdWM1elBhZVVGa1o1YkVNWk1TOXlSOWMrUmtlNTgvdk9PMG1rMHJYa3JlNFpTaVRwNWhwejNVU0JFUzRPUDFHQll2eitndWhTaUJSaXNrRUo4MGNzSUM1UkU2cXgyRThVQnc5SEJqOWRSV2FlN0JzTHVqdllzK1pqUlVuMU53bVkrV3k5VVhBSUVLN2NXb01GNDBJcDdKMFlkaGRPU29sakNLVlJLam10ZEhtaWQ5SERWV2l0eHpVakxJUU5UM1lIRWpoQ3o4Y3FtdEUweXFtT09MakZaUjlGYmpFTWpzSmlFZFFKUkEwOUs3UnMzWjBpNkZOTnlrUmpYeVRzYXgxVE1yZEwvaURjUFRoNlBtNnJiVDlJTVBRbThyeE50Q1FMc3A5QkEwQ1dkR0xzQjFwQkFibjdqblJzZEoyYmNjblI4V3Yzc002RHZuSkR4Z1JUUDhKV3JFR0xJNkJucklsbnZoL0MyT2EzOTJDemEzaU1SVXJ6K2FIOHd3czRHUlpxQzlMbFZYWWJaUW40Ly9WODdjckF5YXNsMWoxZHAxVUYvSkVQa0tTQ2MrWlRJQzM0VWdZdm80bVowaGl0RCtaUkx2SUdqd01QM2JBMmZNZzN3d0h0QTR1SW81cXliYXVtVURCTUlWV0N3V1FtVlNZa3RIMnM4eTl5dWdRMW5lWDVLdDRNbGZvODNvZmhxcG9Nb3AyeEdTdi9XNHZtRTF1TVA5T1ZLMlVJRjJCS3pSZllBUnNBanoxa09lUVUvT1B6bC9hS2cwdWVoR0Z4WTM1VHpMOEdNVGgxMXZWODBpVG1MOG1UbGZHYmwyMGIzZEUzTkJMYzRYbS85dnJpUnlQMW4yTC8wM0hvb1plcXlERjRPYmw0blZLU1FqYWdhSkwyWkpLdDd1UEFLV2tyM3kxRnZFT1RnaVN4bit2T0k2NkVVS2FGSmhFN25acmV1WVlId1RRaityU3VCTFppRnpxWkR4Slc4WnN3K0hIcmVLbldlVjlKeU9KNVJENnpBUlF3RHpNRjZlTmdDOUtFRjMrSzIzWHlZU1NaTEI1S3FXRGJKYmM5cWt1SnQyTDhHZllkOFo5dmdPVzBZbzd6TGIvV0dJZ3hFOWFQMHpaU0tyU0lpTDlYZG85NllPVjExV1BMVGJKWGJ2NzZocEJyZ3BxZ1pReTJqK0ZDc2IrRUFONW9BNThtb042d0k3aFFYUURvRWZrNVgwbS9kNE1TOXc4NkpoVnFnbDY0Rkt2eWgzSkk5SW0wY2QyK0hXbFNQL1czR25xRzJ3eS9IL1ZBYzdpVFpSbXlLc0pNd3d5aXJIY1UyNEJ1eVF0b0xzV0VIdmIzYURuNDFXQUJON2l2Y0NDTUFqdFdMbWFkSTlyOGlpcCs5NHpBMm96b0JBeFBFSUZhUnc3b0tqbXkrbUYzUTRJZlN6VTZaODZVWFlOd0lJbUJrcVI1aG0vcW9hWTlVT2h2WDNEV2YxM0VsWUtCNWxFemlkRXUySjdDVERiaUliSkE5eVNZbjlkaXg0U0diaWFWNk16SFlKa0RCcjNNN25NVk5PTXlZWFlWQVQ5ZHZxdlpLN2hjTU1UdXBsbitQS21GdGhNR1EzRmZURnA3OWRyaEkxcUJDQ2F1WnM0RG1MVy9nTjNnNjlTbytYTDN2cjhuSkIxVk1GNXp5SmRCb1JHZkdmS1FDUGV6SVE3aHJ1d2JwOC9NV09leSt2bWVzbTVRdFJWNm1YMjBPbEtiYkp6cFlMb3kzRHhBR3Nyb3NkK1dlQ2VobE5ockFvZEFSQ2JIeUlieXpFTzdmdlhpMm9qdTVNb3FPTGFiU2VkOEN4MEFMNG1aUnRPR0ZkcVBINTRlL2NtUEVCMHFpSUxJZG90enN2OGFKL1k0RTM1ZjJ6Y1hUb1hPbnNSWTEvVm11dWNPcnB5UnpNWkJLMWFVdWlIVU15cEVBVXRzdWVaZXJ0WlhNaE5KOE5FNllkZXFESDV5WE9CMittbytVUGx3TFRBbWlwMWRQS0pRTGdWRzZnbm13N2ErdTlaeHdYWERYZVlIYzk4NUhBVkVmb0RqNHJza1ZxUGova1hqUDlISHYvYkNkZW42M05sWjVram91V0FzN2VrNE9mQkUvN0hZdzFTaFYwYVFyOFM1b2JwUVA0SWk4UDltclA4MXBpOUVSSTF0RTZwV09LY3NhRzZEM3BWcC91b0ZiREV1Ym9GR05CUm9FWXp1QzloWm5hR292dXYwVHRIR0xFRVNWdHQ5NVNnbFVrTHNCK21uVmZRMG5IZkxxRnZ6UWM5a05iZzl6Ym8rSlIwU0lGSkk1bndRSUh5NEdQalhnQVJZR0p5eDJRTm81Sm9GWWpZcHRHZDRnMy9SQ3RQSXZiTUZINVJFSlQwYkhLMUZYOGpxVjIwTjljMW8zRkxoWjJuZjNFSEc5YUptSzdSOWNjNzJhbVlyMnZnYkp5SitwTUNQWmRhQkJLbDNRWkVwQWtjQTZXNElhV1dSNWVPTGoyeXUxdTc4cGNjcnNnOXRwZEh2aURHUHZTS09tM2lkZmdMQVRZOHNyTXZmdWx1cmpzd05KK1lOV3prVjhFb3NLMG1BMzU1aVJmaUUrZmplK1hqVUYzZDk0UlNnV1pqT3c0TjJJc3hjeDNQeWozL0JaR2VNL1NtQkJXMmFVTExlTEgrelFjaTRMREsvRkloTWltWWp5RWJYNHhnTjg2Y3FqZnBqZEl6WG9oZWl5M094cmpkS1RMSTRDc0pNanNGclRCcTdHWnNta3VDQXBLRG1OVDFzK0Z3TUdhMDdBM0MvRm4ybkRUNjY1Zm9ZT3JRMEFKWVJiVC9ZVFNMdHJrMVBXWDZjdHdHWFAxWmROaDVObFNIcGFUQmlVNTBVck1vVHB0NmJReDR3U3hSemI2SElQUFZIR3RGMjJwSDEvMTJhSFdWeFhLOW9hbVBoamVFek5NdHNQRk1qMnBxSmEwYWV3d3ZyRXpTdTQ2eDhPNFNrZ3ZYUW5YUnVndWxNVzc3aGdZQzJjejBrdUgwMTJaUy9LOTZFeTlYUzV6QXlGV0V1YkRjK29aMmhnb1lFTDZlWkNPVzZJRFFsR05Wak5KeTFGQkFPV3RuNksrbTNUVDRWZ0dwdTJkL2FQTmY4RjFmcUhDNGlWVTc5K2lhYkw3T2NKK0ptWlp2a1YrSVFQWi9ndFRHRW1IRUxuOVR1MW5NVkhKR0tHOEN3ekkrQUZFbDE3bnhQTmVmTWFsMUs5WkkwdllKRVVmcDYzbXEyMGVIcXVldmd4Qm9mcG9hc01NMVY4Z0FKMzRPaWFpRU9seGFUV1VuTVM1TFNma1ZrY2w0UnRrOEhTSlc4ZWk4dE1ENlUwOFBLNnlLRWpIWFhab3JmdWh3cDc5SndpWlhkZFMwc3R0VlNrZzRQOVlidE9VVm9qT04yNGdRN1JoYVNMZzZ2QVNaR010QmtEdkhlZ2FXRTRRZTJhNE9IOXZNamVlN3hxU293N3hhZmNTQUV6SnJkNVFYRnBPUzYxV25UUlVmUHhXVHlRYmpXMzZRQkNDUnBsSnhxci9LeUg3NjNEalYxTXQxN2JXTWpjWWZicVFFV0VwZzNVc3lzMWJQL1cyYUs3OWdVNG5VN0ZaYjMvV1p1SHlXV2tqWXhYYzFUY2crOWxUZ08wMGpWcHQxcXJSVjRTamlBTmxjeDF3Sks0RTdLTVpLd1ZzbXpFRWtmY3pXdHhxOTk0aXE2a3dMNUFXdDVKZ0NRK01jdEJadllPajdKMGJvaW1WUVJNS0tYLzRHR1ZFUVUwemJCQ1FyQkFSb05wYmVMVmZtRnR4RThmaHc5eUZVdUh0QVJEdVVodmViV2RXM3gzazFwdlQzdXpnd1BsY1JoYjlrdkNua3UrclJhOFlxaGUxRUZlZzVGVG1ubTZNV1FFcUpYbjZ0ME9jWlZNZ3VrWFMvelp0dGVVOG91dTEyYWhyMFMrTDNRMjVaVzJNeklVZWZZZGZxY3dqTHJxd1kvbk8xdWdHemFFeG5ENW5tNXZqREd1R3FqWWNobW9XSElzWXpFS2JhWEZlZGl2bUR2OGU4WGxicWRoM3o1eWdKRDlYL29qeTh1NHFYMVgwdHNRdGNSRVF6VW55Q2NXOWhLUWVkR1ZkUTZ1UkFiekRNL0g3MUowRzd2T2RucmMvMTdOOVAxNnJXQXBvTDY4OUhSOEh5Tm5kZ3FnckE3UTNhaDNHcGpBbkZkQm4vWjFLRUZoSzRTVXRjSW8vQXdoRmlIQ1ZuNkFxNFUwZFlhTkRMUDZ4ZUdjVzcxQzdyWXJIdERYc3dDOGxwNW15RG53VGdCRW8ybTUzMXlSOU1pWkpDYmI1M1lVK0gzL1lHbG1WOVlpWmJ5SXJWOC9JbEppRGk1bjFWaVFURFJxaWFTdFF4QllkQk9sQUxGNEk1V1N5UWwvZ1lHT2FZYW16empiWU10N09OaW03UStpNWhHS3VRNFpoOFVndW9yR3pMWnNnRzI0TU1EQXpJYVhHVjJ3MG9QQnJmWWwyT29NR3ROQm04NG9GVW0xam9RR3FvcXNWOG5ieDBabGsyUzU0OHk1ODJrNThCVnd3T3ZvMEJ3NGNKSXJ3UlpTTFFjS2hWM1RoV1dLS04ySUhoMjgwbS9hYVJ2WEdWWHNrV2dEcmY0a3hJaDB0ZktnWkJZUmpYS0tZY2xydGRWd1pENHVNR2tCWHVXR241c29VVG9xa2ZvQ2hVbnlUdXcwemNKR1orUENPaW9yMGp6c2x4MktvaG9UM2F5RnVtdmswazdtcXF3YldNUEFWVlFQU0dYNk4vdzZEYSsvVE50RUg1SkpueXFnUUdTLzI1QzdtYTJXbXB1aHNQRDh5YUZNTWZMNnB1N3JPVERjYjFNeTdVcUk5bHNnRndEU0owTHRjR0ZnK3ZDRUNjRG5mOHRydTRzYk8zTEFUTFcwZ2xLOWFVWVV6U2Z6Qjl1VWxDNERMMENjQWV6akpnb3NQaGd6VDZtamJQaUZlaHgzMzJzcGVJd3NDVjN0UGdMaVlkMW54WklWbGthalNvWlZZVXpXVWJzRUxGYU5jWWxMZ1ZJTnZkMzcxVjd2clRQSzNremdWcHltT1Rqa2lqQ3ZaMS9CVDYzeTBJNVZ6S29aSS9sK3gxaDVUTG4rT3RobXU2aE9aVldIaEErRkE3S0wvYmRveWE1UlkrK0I1ZWwxU0NkNjZoQ0duYWpXbnhJbHZHRThraE14Y241ck5DWnZybktqRVNPTTdQYzU3bzExVTlRZFl4ZFJ6eFFSczhPZTRrb1dYZUk3TU9tQ0l3S2FxY0cyWVY4YVEyZVZsMXFMUzIrQmdkRzBPU3lnNG1SR2ZlaGxFUEZxRHc4OEM1YUhzVkpsbTRreFJ1WEJOTmRTNnBkeG1wOURWYzlTNkxiSVFqVTFxWGh5bCsxeHR5Y01Wd3daQzkwdS9ZYVg3TWowc2lYczBtZlZ2TmJBdGdHbWVwb3VYRGYzRC96MldPbVRiR09mbzU0cHhSYU9tb3pDNWhsSDRaeEJFVHVRTHpiSnpYelduRkdnV1Q5d2Z6UmhNRzRHNDBSaVZvTmQyL1liYlVRYXR1eHIwV0ZUUzNuWmFOamlWaW5rUTgxUnhOeURoUzdBR0lOOWVmSm5aQWMwRTNZS3pNMUF0a3FzeUJDSlhZZGRJNkJoKzUzRkpKbUNNcVlEdjBwK2NTUGtuU1ZzekEvRzljVFRNd0RrWXlTUEZXOWNNY1NXL09Vc0RMSUNxUGprd285b1E4ZFBsK3ZJc2hlQUdmQU0wb2duay9HT3JxRXBxZkwvZGhvVnNxUGV6TkZGbkRXUlArNFF4bDZaUXFRSkJBa3BWRmtlUHh1SE9PV3hXSDYySFVJMlZESUR0YzNydDJUU1JDNGVZb3I2TnFhYjVhbUZSYnl5ZCtIQzhsOGZVd2VJT3pqYmpIRFJUYW9DR2ZBVzlHMm51Z3QwVTMvbDJpbURCdW42dDRhZCtTdUk4bmFiaUpBeENhbFA4QnMwdWgzTnFtSFpPY2VnbDQxTFpCQytkTTEzRUFRWTNKMW9CRjBSZTBZc3haVUlBMldOV3dMTnZIQnpOLzEwdjB1eVhyRzUyVjBvZ2dCYVRDQTNsWnhTZHJEM0xaL3c1L25zMTB6NmMycTRRb0FvWkZzb0Z5SGtFaFJHTGd0T1YyRFUyZHRSRTNFb0tEMWo4WDRxUkVyWWRjaFU0aXhJd0NsS2QyZGY5cTRob1BaNEFaRG9RM3VMT2h6NkJFTG5yZ0RLQ2JFbVVUbVZMNll3aXBYMmlEN2ttTEFLeW14b0tabUZNdm81a1hpdnR0TDVzOE4rYTRoWWZXMUJiUUVRc2FkT0FEYzYrZTB0Qkh3L09jM2w1aEJBcEo3UDMvVnlpSjlmdHpqd0J0OXcyTTRvMTN6UGdubVI4eDJkNHUwdHMxelVHREF5Z3h6MFUvVzA0MG04dE9Ldktpdnk0UkwvdHZ2ODRXSlpJUVZEWlhBemJ0ZlJOMzNpdnk5eGRYakRmT1RYQUo1NC9XMGlCL3RNbzNZakFLYktKWHlIMTNiK3BIdWE1ZzZpMXlyZVJHZjgwMytXMVZYS1hQaWNHTytwLy93V1BQbTZHc0NLWW45d293bFJKK0FzVXkwWjdRdmxSaVJWcnh1cTNNa1hyYi92NDA5NDdpKyszNjRPY0loTkdEeU5XRk9pSGhlUGdVZ09yQVdyTzdCWmc3SUc3TnRhVU5TUWFkV003bGI3R05Ic1JxTTB2MHBRZG1PdHc3OTBydmNqaGRhWWVua2M4V21CVXFYSHl0UFRmTTR0QWhCL3VpMndBMXVVVHU1YW5EWVJYTUI2bHFEVWdlaWR4U2FxZC96UnBqYVhDMER6UU1RTWtwYkZrU29XMmRhR1lzSGdHd2tiSkRCUGI5UWV1cFhzVjY4OGNadkR1eG83SmtwQXZMa0dqYVhJNW5XV2VZZjBSS0M2WkVDSVAxZHpsOVo2WHl2WWxiVGJPK2h0dnQ3WWtDNzJTaC8zcVZIQnlzQmZzYVdEeVVzN2lFTHpwWmlEVmdKRUgzaHhVRVJQeDA2U2FkVWh1aHFXTE5Ec2Qxamp0Wkx2NXVTOUhKTnVCWEhSRDJrRU5MclJYWWVoMGVSY1VHVmsxQVFSd2FVSXRISzRBY2tVUkM5dDVmcW9sT1lHV3RvZmx3ckVJcnhRdkdsNnEveVZKY0N5Z3hCb1BTYnFMVnl1bjJzV1Y5cUFua1h5cnhJRGtxQmpxSFUvUnNTOWl5cmJ4M3N3eG9GYk9leHl4a1pWMnJINWtsTGJYTU56R3ptMlFuVkxCZFRqaWZRMUlJWkRrb3hESEJkbE1OYUdvTkthbysvWlVBeVZOMkgrcVc5di9WS3hCa3VXeWJObTBJSnBnTUEyVVcrY0cxYmNpQ2FVK0VYVjNmMWM1Vko5RXZmODllajdsVElCS2lKbDFJWDJoWHNuWndibDlOYjAwekE2RndtTFBWbjVmZEZLMEg4RG5JVXFCczJjTW53ZmQ2b3o2TU9mWklER3JLY0ZqUWhHSDl1c3hiTkdVVUNYb24zdXk2YVZHZU1BTFBhSUt0dy9kcmpTUmlIUlNxZXFUZkNGUVhwQnlNSlVxbFBCWlJiaFlzdEI1am1IbHBTN05ab0F3R2VoNDZPOE1EeTBQYzNyRW01L21ta1VJZXdtTjNwbGRqS2FqL3pKeXg0NW5oa2FrUmFZZmpSYjNsQm5vUDk1dW1TdldLVFhrazl2RHp0TkRpZnFKYnNET0VqajV6MHl2UWZMK3N4NngzV2JNYk1IaWd4WjFDL0FpaEhvRkN6Z00vUzZRQUpkMHNFV3UydUxkWmM1Z1NTU1hYdEhrNjlFYTc3d0pRbldMSlIwUUI3dS94YUlXaGdFRWp3WTMvak5rZ3A4MmU0U2U2NERaeU1yb3dzWFpGOVJtVGFlWFFTZFBrQ1Rmd2dsU3UzWHF1TW9UOGoxdkdYMUhtYUVzR2sxNURIUkd3VE9aaVRBZVBIdDRUTUovWk9DaXNVRUpaVnBteXk3S3E5RHdSWmtJcExBelhhbDc4ckFWWjlDQzdLd1ZDVjNnS3NvbGVaTmJ3RTVjMk00YzVVV2lpV21jNWE1YWNqOFYwWnViTHovSm9ldmZaSXE2cVJRNmtsSTFPN0NRd3lrRGZEdjRYZ3VVald5WjhtNGdFeDVhY1hkVzZFd0hxQ0xkazlIaHlwb3Y0ZHNQdjhuZlJWSy92cDJZYTZQOWNYY3VqZWh2MjBramZnQ1poQnpyd0dXck0ycEYyOFRHaEdHMXRZanN4bzIrdGl3aHNXeWg2ckpMU3ZCeko2ZEpObUZvd0hhS3YxbFZtNkxZdzZNVGxOSnhmazc5WDRXTVY0ZmkyeXVKSEVoVzRQejArL3dEODIySGNHeUE1R20xVTRZby9CYU5iNy9waThjMmV0VTNXTTR0b1VpQWNIU2N4T0c4aXhYdnBtWi9Ka1BLWGxiTEs2YUtrcld1ZitwckxsYXBDWHF2aDgxczMxWmphZU1xVmNKdG53Mi9rVi85NkZVRnlCbHg2YVFkNUE0cXFlQUdZdFlvUkxJVDE4RFRUaEdTa09uZVVpODNaeVBZbFB3d2c4SG90dXFQY2lQWlJuYkZoOWtOTlZ3c1V4anhCMzM1VWI2amZXcHF1czZXOXFMMDQyTGswL3B3WEtHL0djc0hZdWk5QWdCUzdKSnIrSzVlRUlvK2RBNllHWFlNdDM5YkFIclVJKy9ibVNwTitzS1dVREFoR3MwdkJjU0N4NEZzcWR0VTJ4djdjZkQrUFpsR3JZKzNNeTF0Q1lvTDU4ei9BYzRCREptWFo3U0l4SGRIZytGNnNNZ0ZoV095WEVockd2R3NDT0lNUFpnaURHMU1CZzFVOVVsSUpKNFVoWkZBaUJibXN0YmZhRlpQbzVpN1B2VFNaUXZFN3Y5Mnl6L2kwWFRycG54VVZyNVNHam5UOW1leWd0OVFKWDllTUhOempiR3J6U3dTczdZUFZyakZNSHhpTTNLZDJoVzZlRTlUcGNNRTAxTTdKT21HT05HR2xMRHkxTW9vUmFselYyKzU4Q25oSktjR3h3Kzk3SFpxZHduU3gxcHNYK2lFVVRVd2wwY1hiRkdWUko3YXlJWmZ5TXl6RFpuZlJqT2MxM0lXZTdTYXFFdWlNenAvaUR0d25PaTFoL25mY0VvbXAxMFc4N2tMenNaS0JyNldsQWwvWjV6Ui9Wc3ZSZkhVaFJjYmg3bDR1NUdCWnBCM2drNzl2WjI0b3dlSFNzeExhWEl1N25JRldKMWJtZGhuTnNRNUFWVzZncDY2Wm5PWjVOcHN6NkR1MlM5Yms4K2lSMDRtYzIyVjNPbiswbThNUVQrSmNkaUhTYlBZZldOTEM2d1JHdFF5RVYxczVHYlBBc2lHNDQzTDRROE93LzhQaHJnZWF0UVRJOTNvcGoyZk5uaGlkdkxMTlVWOEJWWm4wQnNEbWZTUHhuTncrMUx6bkNpZnJvTEN1ajR0aWN5amg1WmxXckNzdGh2NVF4ZDdBN1h4MHgxWUpWVUgwTDNZZkRQVU5nTVkrTEsrWTkvUEl2anZObC84b0pxRVdWS3VvRU1sUmhaK1o0Y1UvUXlGdklUTFJSdVZQZXlabHV5K3h3empSMnJsenhZWFdncVhkZ3BKMU9LbjRselR5RkZxZHl1T0FnOFJwbzFldlVSNk9iY0kvdVQrNzNoNmVLK3MwV3BHZitSUUJCWklFNWRvbmFiNVhYdGhDMHNISENNS0MrdFM1Q3lNcnJhVUZHQTFPYTBIUWFXY2pEeGN2NHQvbFFDOFhTU3dYQVZhWFVuZ2lHTXlzNDVsTEUvMU5kK3hhQjN5cXdWZmFpcHd5TnBOdEN3bmZtd3ExWTZ1a3BhcmZ2ZzBaMUt1S0JWNmE1V2tGWlRNVDdjekFyc0xOdFdFQkQrNXJHVmU2RWxiM05CaEZaTlRrWjlEc1BuY3kvdnhBWmsxOXlrYW40SlMvZE1jNU1WRkZpZW9mUDk2cTZkbStzeTFUclRtUFdxSm5ZbXdVRDNzZzU3czIrbnkxNEEzbzlzSGgzbnplczFOcFVLempiL1QrcUVya3NtMWg1ckJpK1J1TTJuaUZvZHh1M0tRWGZoZXRORUhqQWE5SFk1WTVjQ0ZDaVBJZ3dacmdnbWpKSlFvM1J3K2RId1ZiVjdSUWR6WjNpN1c4UEl2YVErZFVJUGxhU1NJUnBkNG9jdTM0VWgzdDNmR3NKTUI0cEdWTTFQNnlGOVJuYzJEQ3hsaWx2SCsrQTdyR1hlUzdoaXZEWWVjbFNWWFh3Yk0rSnRuSnBCRXRocm9BZHl1SDdWNVRObU1hUERMYmoxZFdtdnZGd2hvNG5scVhUa0dNTnRrbFJINjlleVMvUTVtZmhqc1RVRUFNcEFFMW5CVUJtMXRXbGZrVUFkWFFMQlZ5a3pqNWQyM2N6aUxFbG85TE8vYWdXSkg0RWFtaFZXTC9CRjBGQVRha0lOUWt4UnR5M1ZGL3VtbDJXQTBVT0VHMjM4MUhYeHZFNXViYTQ5eTlKdUgyMENqRkxjc2YzWXoxN1o4Tm9GNStLeVZ0R2lLK3owcXppek5uUjJvZkd2M0czMTNYSUFRNHUyY1JKSVhaY2tRcmVqb291Nlc0T2Fnb3paNlhyQXkyTllJOEZ6bGpCaFBwS3NwUWRMQTU2d3dSbkxkWDdYc3hyZjVTdXlwTkVNVWQyQVA3NnJvT1R0bGRJOXkwa3RtMWp5Y05sak8xNFRNbVZ1S3ZYZ3ZUTXdNaVJ0WDNFU3YxazJqQVpsbHREMUN6UkU1Qmp6b0QvQ2UrSW1Xc0ZRVXU1TUV5VHNBU3g3dTk5akZUYlVSc0FvZndRYnIrSk9EMFU3MHF1dzhpMWpUVjVIZlQ5cGNqbFQvSnV4SFJ2NDRJaGZlY3dKeHhVOGh2bUFaSFhTaE50eUkyZGVwdllId0ZCNG9sRkdYU1VyTmswdExrV1NaaGVrZzI2TElyZkF5ZVRnaTV1L2VYMEFBM3dmaU5qUmZtMkRyQktMZkRHUHZudFRtUkE4VUhsVnJiUGV1NGNpcmgxV2NGTGo3M3MrNUF3Wi81VUxKMUdQc25EcFhkTkZGSHhNdWdkTDNpWHdUYlpadFd5em5GY1Q4U2pLL3dUZHU1RVk0OEgrVHltL0RtUHRkdmVzc2d3bks5Rmx0NFZ2YWtaQk1ES3FSSmswcjFzcGV0KzIzdER5RjhhcmtCTTBoamVRL2dwUWtBcGhEdTQ4eVZTZUhtZFRtQk81L25kRFQzcFl0RGxCKzJFNDIvTlNTK0lmN2FsY3dGL29PSmhDd3VGcnRUUE1FUEdqWitwOEN0ZlNRc1pkbitWWCtiM0FxWGhCMkhiVC9PTmtzaHlDRE83dEdDcDFmRHdIMHFvc1hNYmNuN0xzOCtId0lRaWwyWUVMOHF3cDFwSU5lRzZ2ZGpDbmNMb3hBUFAyVVNuZVROVmVDMFBsRm0vTXJsbDI3MTZpU0hoWkthb3k3OUlPQmFab0k2Z0FnblhZZlhQamZMN2czdmkxS0Q4WTVqMWdCZUQ3aUMxZkF6NnlLK0hiQm9RZ2l3Y0lOVUFFeEV6VWYxT04xK1BzRGpobUJuV0h0YlM2elJtd016QW43TVd6OGdzcUtoMUcxNEI4K001SWp1Um1ieitNcjFFNC9wZDBBdFJGZisvV2h3cDBZc1g1UU43QWcxQnRpdkY5NDRrZGkrdVEwWmNKLzBsdlhwZ0ZZRldmemxUT29JelNKckx3aGRWQ3VLSWcvSUpZaktMb1NMSGxSbDhjT1hUK25TNjgrTXBXb2lQOVNrRHMzTnJlSkdwQ0dlZE13ZDRXQS9IMXE5aDE0MExpR1oxM3NrTU9hZDV1endnK1FiSlhoKytRdHN1VUhoc1RqRDhjckJBR2huWGk2ZzhrZUI1cGQrbVlxcHRKYmowOTlkbjRLd2d6bDduUmtjR2Z4WHhkTFUvQXJmVm5TUFRpUmFsMGNDQTdCTFRTeHZlQ2txUmZHcFYxR01sb3N3N05yVmp5SEpLOEl1b21VeXpGbEpFY3pQOXAzTGFCRmZtV0J3WitMRUVZR2krYXlHVUJ0dFNoWVZFaHVidHh4QXJNNjlDUTlLNDZzMloxbHBlanVYbkZ6RFZjQ3pwUWhqcjY2T000TWVVbWM0cW5FTnQxYnczUldMS3Y5RkJKNGZVL3Y5UE16TExZT1drb2JmY1BXM0VoNG4wWjRGZ2JWT1hmMkQ2QkV3WVNGVmJua3puVkMyMFBRMkxZcTdBNFJyWVo1VnBuTGliV0VLM1JEUjZUcWRSR2tGWU5tcXJHYkJNQ3d3bjBBbnEyRVljSy9MdzNIaHJ1eEZZUVE4R2Z4MkJQSkpDTWUvM3V1azBOY0UxZzR3SU01NEpodkszTE9QeG5aY09BZnFZQm1WYm13SGJ6Sm82Rkl0aTBUbVV5ZTljazRHbythZ0x4SFU5bittTzZ1bUdkeE9aN1BOT1psS0syWE1SRFhGbXBaVndXOHk4Z3UrckErUUh0Rnk4cmFQZEZGV0RVTHVocXJFZ0VodUhZMW1PRTJ3bGcwS2JmRGxaOHV5ZXBsSDNQVjZJYncvU3FLTFlyYjN5U0R0cEFTREVja3dPRDZWK2FPdERsZzZPU3JTVWwvaUJiTElIYlhMOWpDbG9ZQ0pEWGZjdXhvNkNhTTU5bVVJVGt0ZGltNmc3d1Y0cndxWmkyUk1ua0UvMDBTeDV6UkRyWE5ZckExY3hpWnVvZzBSZnZ4bjByWGJ1NWZqb2dUd0MvV3FZTzNiQlJjNzRia0xCVEJJTFgrcHRGTWlBVzVod3gxY0JOTnkrTG1Jdmt2V0pmNEk0c3hWZUtNUjVkbjdyM2tGY25NV2RDd2xqcHY1eDZVc1huc1Z4NHhEc3ExUUZ1YmZndXMvTEx2SkxXV0lrRFlQSUZjTG9IN1ZVL3daYUtLNURGYlA5ejdDV0UwZXNSTW42dEg4OWlsQ3hlYjdXTWNsTTZ1Rlh3S1ZsWnB4V3pYREZDQm9IVUtmOTQxelc3S2ZjUnVJUUhhcmdVTWtLNU15elB1aWZMNTZQSXgwTFBtZGFkVFUyV0ZsMzRxZm1sNHN1UFhIVDczUkNJM1VXQmxlWWd0TEwySi9MS2VIR3JVR2dXL2ZvUDIvMCsvWEMvTzM3d0pwbXVLWWlyalhpUEpPRnRRU25CWE5yUllIR0VxOHdsQlNacllQOU1zYnFVZTNlbkhabmVkYjdEYSs5UzZSUmFUZmE2WWRRYURFZTBreGQ2KzJtLzIzSkc1TGEra3gvTXpRdVBoUE1xYXRaejBtVm96djBIU2dBbHV2OVJHN3N4OWdjTVlBZ0U2TDZ1YzZ1MlRPak02WkFueUlkTjc5VWtJaHowVkpuakNUQzFYdW5mb3ZwUjg1Y01zU2RLMUp5ZWtxTmdDcHo2YnpJbUhvWkdLRGgrWG5yVnBldVpQVysvS3gxY1RZYi9MLzNRTnJvaGNMRmlUMUl5K2NZK0xuSEtYZ0I3cDdCM21qT3JGRVI0Q1JhUkpFRDlkYlREUWswdGRpaGljTno5US8xNjB6Z2ZGN0pTNHdxaUJ2R3NjWDVGL3VkTXNPVUhsSmY4VTg4VE1QNnNhM2VDYjRNZndMd04ycnBOdXpwbmJGRDR5RndLSVh0RExlZjg3RUM1WC9vbnJWL2MzL09wdCsrTER2NkpRNm9XeEE5SEZqcE1qVlU2ZDFXUWxsYXVJN2xrbkZIRGczL0RXNDhXVm1xK3ZTQXJsenIvOGs5WEJLR1hTWEdnUlVUeW1ESHV0MGxGMS9teGpzd05qMk5GK3MvekVkV2k2MFJSWHhtc21TRnFxODkySEdVckRMbG94b0dWWHVUM3N5VWVPZ3NRQ3RQc2lVU0hxWHBycXBuVXZkaEZyakN1N2NHMkw2WVVscmxqL0Irc3pKWFJXamczZEZvWERFMzhKdGpEaDJJTzdLR1FkL0FKT3p6WDI3TnlKcjJMclpTaDMrWVZmNkdsUWdManhTbXNLNDNrMHRNN3pKSzBDL1QvYzBNNTJSY2NXVlpJeG1OZGlXNWUzWEhWelRGSEl6YThRVlV6eCtXZ29ZUTZXVTVhVTlaSzhXL015ZHlkc1BTaHBBREhEL002K3NwMnNCUHBLckgxcS9IdU1GWHJBdG40bkJoZzM0NDFjdnd1bzdCdTFTTlpRU2FySG9pVnFNRVhEQ2JJZi8zakxCWjZNS3k2M2VtejhHaWFJbnlCSGZYSU1sdU1XNlpTSnBvVnc2RzRYZHdEZ1o2TEVLZ0Fqbm91dzRLeVJ6SXNhYTJqMFJJSVFFVm1mNWplR2ZYS1NUL1VJMElQMy9Vc2E1WE1pVEpOQVMxYTJuUXd1RXM4T0dvTFREMFRSN1Z6ZG5UbGkzRnNGNTNaOCsrSHhuL0JSeWg4VUNLL0hYREFNQXB6djJFbHlxNlhyN2o1SXlMQ1g5aVhwOXZBbTZlcTQ0WlZRRUpaUUdaQU45ekNYSDNOWnJNL2FySXBtNW9TaE5PdzRMNnhBK2NtWkdHVWRpOGRodDI1Y05iRmRQSnp0TlNiV21FMEVKLzZHM1BiWEpVMEtzdEdLbXJXRmxSSDVjRDRGd1lwWmV2WFBjc3UzUk9nSC9KRDRpVDgzb3FTK09ocUFBOC8vT0poYnFuYytlRXlCaU43TFdtREJqVGRqbHA0bTFHcUtzOFNTYVVLL2JIdzJGVVFxcEdac2JLQ24xTHJGWXl0MTM1SjZjdjhZdDg5S1dhVGdDa1hVWm1JeEdhcVdEay9aQ0V5bU9LdUpaM3BZandGY290T2owb1pBMVJvR2FDaSs4MHlGaUtBNHpVK21kQ2ZDaGxjK3g1YWRET1FTZlM1SnBCdFpnTW1mTlhrYmJYb3hlR1hpRjV0SjRXSXNCRDRWUXorM2VSUjdvanJ0aXFwNzdsbjRzeFRqQTdwazVSajg4bVhSSE9mb1J0NFBmSktiOWNkM1REYnpjcjd4U1JNUmQ3YVlsbld1WUF1TTFlbVptdGd2VUdjZ1JtNUdNck5XOTdXTENhd1VvcnZ6UEgxeGxET1pKWDBZV0VzUURhZFJOYUs0dERrRnhVZWo0aHpTMW8xc3M1VkJNUm45TElyWkVjcDRIaVdOU0JGUFhudEVPaWNRK3M0ck5RLzVmYUI4bTgwOU13TzZiVkhrRm9va2xzbmZzY2ZxRGtPTHplamFGNkQwSjdQOHV1aVc5Ry9vU2ZJeStudVZVdkpFMFRuVExSWnMvQ28rWTcrckphOSt5SUgzMDloV3NvMmFmRjc2Z3cya1cwTjlkeXJDcHdoV2syaWJUZzVrZDVpcjNZeUhUcGpicWNPM2xIL2gzRDdSL25qamkraHNPTE84bm1kbmNRTEdhWWFUUUo4dmdNU3h4M1FaMHhkZUZYemQwREFucVNvNE1jcWp3bW5mMWp5a0hvMXNDWU03OWlMRFNCbEZjcG0yOFlKb1RQaFFtYmp0c2lVaTI2c25DYVU5NnNFbVpaLzYzaEN4cmJiUlc5U0duZzhLZUxwSDRJWCtqVTdxODBMSUpvRHVpWWpzUy9ObC9nMVdwK3hVemtISkV0TTRaRDlOTG9ISTdNVEIxTVFianJOd3B5VndNMXcxOUx0a2FNUUtzUWNZOWZmdWdzZTBHMkk4c014MW9QbmpFY2FMTFVDbWZnZTRFRGNlWU9PSEQ4Wm50UU5rSUpoaHp5L1dEa205K2VHNVlneDBtK2hnSCtEY3pNNDM5Yld0RE1ObC9mWnRnNXhRRis1WjBPZlRBd1NDOEFwMHpWSExOMHpYbTVjbnpZOUZaUG5XY0pCNGNvNk5BWUFIM0lpZk1HU2gyWnFkNCtWVk4wSjcxNmpQRVpId0FKbCtCdDZDdXhjRERlTkExVEo5N2J0ZUFFMGdOS1REN05pQWhtZlFkK2w1MzJPcTkrWnBhbWNmR1NWVVhVNnlQbUNGaTY0Y1loVDhyanN5blZNMGNWR25MYWlvV0NTZHBqSFVrQ0hNMHk5bEkzczEyZ3lEdC9xcmthUkIrYkhLWlo3TFRicXpLWGJ5Rm1KUlRybU10MVZpZE5iQk5Da3A3ejdqY1BWY2s2dDZoK210aHBEc0MwcG1GS1k5cWxZLzMzbGNTQ3pEbXo2Ny9raWt1UTkzRThoT0xMeW5ObVlRT3FWYUdmZ0V4UW5tYmxVOHh4aExUMDRqVk1UYjMvcVB5RE8yTW9RYXE4dUNTdWdRVW1IeHQyUFRLN08vQ1ZTbWh6UHNOb1pqYmgwdmFKdjBoVDVXbEYyMlZjSzl3K1g2a290YVpUNVpsQkJuckJGM0hvQld0M09mYUtxQUkyZ29vbG1ZczFpanFIK0NvalpQOFBNcWNlOHNvcWVVenBnQWQwdXNUMlRXRTJTRitOQjNuZUMxRWZzQUQ4cDE5Q2k4aVFmOEliQkQ1eUN6NmFkdXlHc3lkRWVQMUdQeGpQTUtickdRbnJQb1dBSUZxMSt0VTM4Y3l1clh2cWJTYlJUMndlM1lmcGE4UFlpMTJ0R3g5S2daSFVJcFZDNnJyZ2VyTnd3RzBBVkQzSlNjTk02VnZ3Z2s1OGozRzlhNmJaNk15V3lKRkwzRGd4V1ZzQkRVUXRWdnB2RWtxZnlPWDFRL1dMOFo0VFNDOEpjWFIxSkRpWkVodkU2by9XWUlmcTlFMy8wKzRLY2d5UkljS0UxbUd0a243ZnE4cjROSndKOGh2dU5rTXJ0YVIrU3JyaWt4SU5LQ0Q4RE53YUo4dS9QVThabHozWFB6RlFpYmF5dTlrdFBXeUpqNDY0aE54Z2FiYThzOXRXbGgrNEQzZVgrdm16eXlnNnFUTTkyRml4L2VsckFuQmV3N0dvSkFVcGx4STMyMlQ3RUVBck9QRlF6QmJSR3V3eHo5NnI2TUtBaEF5VG5LNUhabDVUeVp3elU4NURJZHk0ZEQ4MFVTQUVscTBaQUc5eDlMR2JKQXBSVFJiNEZ6d3l2b0h2UXhVdEl6N21QTC9Ta1R4WndreEVCN3FkcjQ4RkpqYXJyVWloOGVIUVVKUHZUYzhuUVlZOHJSdXBxQ1ByT213NkIrTUtWWVdvMk52ZUdIN3poci9mT1dPbVZJNmdEMkdxVi9pTklVZ2dlNll2OEd4bzYvR0o5SHhQTzNMKzFNNmI0V3BNVHNDZnlCemg5OG9HcXByY2Jhai9ybjNUakNwRWYyMmRCcHpwZ01lK1JJMFRSa2ZJbWtPaXUvVVRKMU9tZXZ5UUdDRUQ5QjRVNkJzSE1GdVo4Y3lIMUIyWmFSbWlRdkZ4VklzeHJEQ2xTVkdCMDlBbXlzQUdXVzlIenZ1YlBTL1RMN1daVTl0UVR5Y0VhdVRZRE5PTVB5NXhWTFRicTNFYm54TGJ5RGpDQkl2UWR3WWY4dzRaMmhzcCtCRnUwck5tVDA5TlA4SmpwaXlXaWpncHQxWHpreVZyZ1NsbWUyWTg1TkVCVWc4MzRwaXl4YmYwNmNEdWs5L2RFVlJvRXJuTUxTZW5pZFFETUhuemQxRzZMclJDNmxTaFkwSkNLNVlrRm1mK040MmcySVlSN0dkWUQvQm9OVHFEZHFySGRka200eTlqRC9DVHF1cFRFQzlENXc2eXQvdlY0QWpLNGtsTU9TRHBCUjhzVlBHS3hxdm9SWUZGRlM5b1ZDUXhuWU16NmZFSFlRMTJhUHVmdEFwSlc5azg1cURKZHE2eU5tNm9STEhXNDhKNEQ2aERoWDJUWEdOUml6ZFpKMm9vSXVoNjFvMnpyVGd4T2NpbWdMejljSlNzMHREMnMrcEc1bUV5UVJrSEowL3dFT3p4TytBYjFSaWhEM0ZQT3lKSHV4TTRjY2ZiZUwyaFVIeEU3NUJOQmt3WlNwYWlNM3plaEgwTVF6MjBnSmNOYlhTNGl0QnZXeUhJV1BrRzdVT0xJRjJTVnZEVkZUQ1YzVzRUT0w2R1pUUXdhSEt0RVdxSmRwKy9xWTNFWkJtb1Y3K2Z0dG4ybHYzWG9GeFphZy9iazNjaXNUUmpmRC91b1JveVIzcjFTNzVKUnh5TXRCMWI3L0ZwaHVDOWp5N2JyYi9sYm9sZEhrSUxSK3d3L0tCWGJjOVpyMlVxWkJDQ3lQbHFreWtBM2FGdjhucWQ4TEM2WXZxZ1NJaGdDNHdLaFlCMTdOd2NBS2pXSndyRTVYWGc5TnFZVDErWDBUVktHTEJEQmhBVHA0cVJWU3RibTUreHhDcnhTUEtMODNwVEMzNXV6ZEZwa0lUaUFnZ0pIM3ZOQVdYaFE1Tk5UKzVhSm8xdjluVTRpUEpzQ3ZuRDhZN2tOMU9nRXg0MDFwanQ1Nkk0OFUvbmszSmV5dHRSKzE2NDNQYWt1ZlZBWXFqbmxkRmF3WjVMUVRmbFIxZEdSNURMb2szdGhhaGdyczVMd29oZDRRVkZ5d25IMENValJFYU1RQjZZOTR4S3pKRmJqL1dXUVFKY0hkMDRydVRqVlEvZEdaQ1llRjhSV2JEQXV5R2RhZkdEMHY1ejJHRGJiWXk0M3dtWlNlSERweXBnWGt4OFhIOHVOR3BMZ2F6K2ZSckREOTVSU1FtUGk1WUE2eHN3OHdYdlBybG5SSi80TEt5Q2NkVlNjQWpPK0NhNGE1RGtLMFdxQW4rcTJENTZ4VmVwZ08vRFJ3U0Fyck1STGlNZWxWenZxVGJoaWkxVHVCNkZJK01vVFE5YnpzMGxiTE9QeERTOWxxbnhPUDNjaUtXd2h0OUE3YWdiampxdVlrNGxCaE1MbmdON2J2Rmp6Y0ZOcHBaVytGZUFvQXVwWFhJaVUzVXFVTTY3aG1hVGNPWXhydzRGc0NGeEg4T0gzM0ZRVGdUaDBmS0xJeXpobFpLaFZnbTZwdldnNWlUM2V1VmFxcmw0bEw1eDNjOTZKVXUzeEh0blcwdnJGVUF6c29RWFI0cjZId1M4Vk1FRGZXOXJYU1FnUkNFbThZMWN1TGxGVUZ2MHY5Q3FUeFZmMDVWazA1eG5XRlpaeW4rZ0tSZVF6czV1d2JubC9OM0V3VmJRckFZeTVpdGJWQVdFeG4rNDNsd3BxT2taazJMUjAwWFpKTDBuT0lScUJvMTltWlBhd25ldlgyeC82VlNYajU4MGM4Y0tGWXNjVDl2RUZmZnRTZDBpUVBOSEhucjlEaWhiRVlHVWFJdksyWnFlWWFacEhWcDdsOGxHTVBldlUzMnJjS2w3ejA2SUk4SGNBSkEzYkJlSVJ6a0g3SXdURG5GWTNIVXhxN2FWOVlQRXA4MnQ0RXIrSGpUNWk1alBIQSs4QVUvRFNueTF5Qzc1RjlZaTlseXYyV3hKMlIvWGY1dlJyZGhDeVY5QVRVcGRWQTEwTTBHV3YyZ0FVZzhJS1hZVUk5eFlQc0hXMWxHUXR1NUF4cHpsUkswaUxYVmV2OGVHRE02VTZhWDQxQlJZTDZIOEtTNmtncWJNdlVtTk5IK3grWnMxTGlpdUxTN01jQ043Ui94ZnFxNGUzbWNCdGNqTXd3OThHTEVsZXV5dDdwa2R5bEV2aXJvY1NDcmlQSnJBK0NBc1l0Y0N2UGtLWU5uNmVENkRZaVNpZGlyWVJ2dW5qejUrWUk4RFU4ODlaZS9rZ0s2N0NjZW1valVHOXdpVkw3S0xqQmgrcjFCQ1RSaDUwOVVsTVJKNDIzVm9CeGVSczRGVnJOS0hnWm9DZG9ZV25IYUc3Z3FuRldEVlUvQWFvWFhRblJiQXl1SXNCMWkzSlhvbDFvSHREdnFnL0pFWEQ4aFRYcjJnOG1TSjM3SUgzY0x5b3hmR0lPOFdHMEJXZTQxMlBhcy80OE1SY205Z0N6R1NmcVVLNnNXZ1A0Nk9FTjU4eDBUb1NOVW83S2hLT2FITjRvbTNpQU9lRGx2MmhyVnBGM01qalNJMWhiRTZpUjlnejd5YTU0N0NvZkFjL2JJYnoycHNmbisvSXdONC9RTmtNMGNOL0lxL3UyZVlVQXJtN0N0WnBXZmxtUTlKdlZaeTJiUWg1MkVrNzIremRHREV6c1JJaFdHZUt5SStmeDFtdS9jYnhyWGY4YUNyVDd0OWNwYVpCVXdqZkE2ZnpWVWtpZXVML3ZIR0FFdkhEckxPemdNYTB1T3FiY01McUNMQzJZdkRJcU1uS0w5ZDJKbitwYkYxbGR4T0pqOG1nejNsSkE4d2pHMDN4TVZxU1VkaEFEOCsySWFqVy94K1p1b2dzc3E4M2RQQXREa1VLYWpwTFZ0TTI0cko1bUNLVVBHeVhRc2RuOGdOVDJFRG9qckhQdXF1aGJISmZteTVzTnhuYy9iK2VCY01zcTV0N0tsWWpZQXgrUzd6UkJUOHFodDk3UEQ3Tm15QzA2bi9sblU4aHJzK0VSdHRmYXdaZ3VqcFhzdHB1SUhOV1p2c29RajJTZGVja2d4aXZHTUNpaVg0cEVmaXRmNFZLWVdlaHd5NnVzdFF0am5ZN2FDaGh6a24ycitSSFBrb0lBNGhsSTFmcE9yRUtlYVJ3ckNNYjBiR29JYWxPWFZvOXZPWTZRbWNnTTR6NmlvdzNyL2x5SWtOdnE4RWhKWi9QVlJtVmxDVXBRSTc5VHYyV0tLVFV6alRaRmduWEJZaUt0cEhPcURxTjBLRUxwUXNZSTlhMkFPZ0tyVlBPS2VJREFLU0hWTlFnYlNBVjdNREtTTlZ5ZGtNUjNId2c0TWFrMDJVK3J2RFJ0UUJQbUx3OUJEdTEvVUpPaERQVkhmU09nemY2Y0x6U3lkSjRJRk1DM0w4VDBiZ1h0SE9jSXBkWXBwaksxbEViZDFMZHJ5RU9PL3cxRTBxY3BldkNBUHJyQ1NTdEFwTDE4bzBmd2tobUwxckNRVThPbE4wUVA4eGw4YWxQRGw2WmRETVBvZGZwUkp1ZXlsaVRKSDY1TnlOT0ZyeXorQXBqYXRXNmRJTzVFakh2K2V4TnBOY1I5d2JlTFJwQWJaSWVvRGVxRk55RWYzVldaOHA4SWNiaGF0U0xlMlpGRlJNeUd1RlhBMzFIWHhGbDdraGRVRkdnK0VGWmVPVnpLZWFpSVdPOGtib05SenZsTGp1WnpqT0JidEdmcm42cnQ5b1EzR0wyL2o1N3dKZXArYXVxLzlFV1F5QVRRL2N0WmhWdUlyWUtZVFQvZVlRTURwZkpIUjJ0OVV5UVFLVFNjSVcwazJhNDF2cVNjaTE4L1FFakx1dVhvQVNmZlRVdTg0L2MzMkh5elhhUEhYL0crUnBrUS9VNEcvVUpNVUJEWkRhdE00QXNmT2dXbkpNTStHTDAvMUp2OXl1aEVaZGpoY0hVeG10OHhzSGVhT1RZdEVyNTU0OUZ6WVM2aE1obW84em9ZL2QrbkVFWjdLNVpXY1Q0VFYzelNxdUhjaG5rNFZuOFMvcWh2OVl1L2NZMS9xbFRvTDJ1ZHFockhsNkhyVFJ3cnFJcXVjODJFaXJISEhzRGdiZGlNWVlTQnJNdldwNGlaRW5UZmQvNTJpeVdzYVVFWkJxazRoeS9VRXV6VnpTV0dXNllTc0FmU0pFOUNPLzBKMGhuRTBWVXBBSTBxNXladU9UdU5vR0RQQTAwejRHZUp2akw4RDJ3MmFIRlRvY1lKTWJhZHd1UFpud3pEQUEwdm85SWQvRVAwQmQ1WlNlazZaZFkyeFQxUURkSHd4YmphT3RxUXZ6Ly9mdlM0eEpDREZybkYzbzdaQXF3cWFUcCttS1I2M2NSZWxzWklJOGRLbjJQL2drOVV2SEU4bEt1cHJZckpOeWpZRFgwdm9za0gxYURyL3RMOHhpbkV2Uk5ycXp4ZVFyN2IrcTNjRENkbjRmVnFtN2oyV3VEZ3Z0aGcwbko0ckl3ajNOZDdSY2FYbXE4Y2dXc2FmWFJkNXl2d3JaODBSOStUWW9adndwcS9WVFRZUHdHVGNnUnRtWlFBSmRnbUNTakVCQ2diTDA1cFZHOVNtM2JUYlN6dkdpaVZ1VDlzTmZEM2xrb05TMHgrbW0zUTlRaWNJRHFMVEp1VVhsaUNTdGRkOWRuK0l0emVFRkVTZWJTL21idW5EQ08zUkNua0ErbjFxL3dVTkJNOXBOL1JCVncrWkxWbDF2SUVKWkZCeWxhOE54TkxaSlBGT1pTS3JPNU51WTErWnMvUXhTaWE0bWhSSHEzNkplTXljVHpFL1dSbzgydjF0UktvK0lIYTRrUzlvQ0c0V1Fab29vM215L0hzTU9UVHUvQTloZnc4ZG5yVjV2TkRNQzRBck5hYWNTbTJVd005ZE5pKzNyTnFtaEczcDVMTHlwc0p4Qm1VbldldW8xeVVNb2JqVEcwOXhGTVNlNkMzZlZIYTJ4dnRvMDltTU1IUzZoTkIrTllpaHlhTWRQcW9jT3grTEpLVkRrakxCSk9tQjVlbDZ3SHpVNzJyb0xvaW94bUFram5Ia1k1cnk4MkxiYlVTUjJLOHpzTE1VYkxnNTFIRitzNmxwNDdJNmdrb2wvQy9BY2lidVV2RXRKTHJCRXEvak85TzlWb2pOdGJsMjhkZi8wVWJzZ1RDeXpHcitJZzRQd0JtdFBVKzVXRVM4Q2pxRFZMUHhxc1c0UVNzaHpESk1TOG4wVTYxVXNhd2MvVGIvVm13SktuZXJONFY1a0RTT3JndmpzdS8rWTZLSWFVM01zN05DRWpBcUxHNU4wNEZPbktjaDRKeXpOZGlZK0t3L3dwdmRMUHhCVkJ3RGNZZmJtRUVlTEtUa2x6dTNyajk5aUFKakdWTUFmRE5TclhVSlRVNnI0VnhGU1lvY3ptQThwWE96QlNvanZaOVNwVlZiTmxEZzJTYm10SzNJNy9vZ3VUb1Q0cGVCYXBMQ0JtM3haTXpMODdidG5TVWwzMG1NNlRGSW4zYmdYaWxjQ051aDBLcHNyOEhTYmN1RUpOa3Njc2dPeC9VZEdySWxpRmtYMUlRYmxmQ05RVlZKbm9SM095SDJkK21SNVZhOFJGKzFYTXBIbG93QkR6anNBY0dtL2dXSXVwd2VZY3Z1V0QyNDRreFVoUXRQaVJmOUtjd0lSSmdzRXNaSVUvV1VFa1lnUTkwMEtaWnp2REl2emJZNHFtcWIzU250ZldrblZaMXJXdVBLTzY1ZTlmNHlYZTZCL3ZvbUw1RDVyQ0xiZ1V6SEhVVXlKQ2xiVXpON0VGRC9XVW9vMXRKY1VqdHdKVkwxZmYvR2pvb1p1RWd3Ylo2eEozdFlJQ2hsUHRDb1doNUFSekI5ZUN1dTEzOEkrd0hDMWY3TnBVMjZLYzRlb0k1YzBuL1k3WlRTdlBGSVNxZ1FxUVhGL3I4WEtuV3BlUThFQ21nOGFFakZOenFvSkVtZ0JWRE5Gc3BPN1FsOFAxcHFGVGt4empzSEFaMURraHVlQUNzTUJCTmg5R2VPMXJNMjR3aGw1Tld5OENHRU44M2d6WE1rU3VDeFZ5Y3JTNW5tUjM2WlYzcEY5aGswOG91MDV3b1VyWnVLeFVTMzMvUVEyaHpBRmtlT3VMN1RMSUQ4K2FnVjFVdmlmQlIwTEwwWEtzUzdaRXFJU3BwWjlTWjFJY3R1MllKSThEVzJMWmdCSHM0U3ZSd2k4dXI3YVdmWVM5RnVQSW9LZXd6UWxSbnpKT2RqTlZoRWt6dS8wOXk2cUVCZ09VcmRkRmlVL005dW1RM1lFR0xodnpWeU1kMUlWWk9lSk5BdE1MdVFsY2E5ZHJFVTlpRFRwdXYxUkNXRkZITEJkZ3NVck9PRVU2Z09vakFvZEJOc3hmSWVKSWNrdGtNS280S282Y3F3NTkwYVJVL0VOclMrbXVLRmg1Zms2c0wzbXNTZ3ZwYTcwdmxsZ1NIU1BZRzBnZUVBVW91c1V3MFRKaWpsVmhidlpSVkRtK0cxMDlIaTFFamJaM2RaSWNDSnk1OFFIUWNnQU5xRXUvRWlIN0RYTEtOcnVXNklqeDJac0c0RkxxNWVXSVlNTmdSR3hpZUZvdWtWZHMwUklNRGVGUjFSamgxR2ppOHdINHYvYWtGTnVBaVlOaENqSE9wblBtRjc5a2N5dzMxVjErQnM2TnQwWFdQT2tCS1gwWUdtR3lmTzFKYWE0SXRJU3RiTXJZZi9OZlJsb3RhUlBUcnI2R3FaLzByT0NjMjRPaDA1NGNHei9BU1pyV0grdTZhcTBXWllQbTNma2FjTUtJVlRVL3pNdW1KMmJqcytyZ0o4OWVDcFRxUzdURFk4MnA1d29EbmZKcEJ2ZGxnZE9LTksrQkcydDl5cEszM1dzVWVIRC9DSlc1M2lueG83bEVJNUV1ZEVLMUR0bXl2RUk3N2pOUWZ2Z0RRMWd2Y2NoamtVWGpPY0taeVpEbFhXVzdiWEQvMkdCam9tNTNOWk9vWkRFZFdBT3Q2QzMzMmIzU2tUMWpvMjRMRjVHZWZLY1d4a3FZcjByUFpyaTJ4NlJtUEFQc0RIVlNXSS92ZkZYV2ovZndJYkNxQ21qQ3JXajlIeXlvaFdmMVFCTWV5dGhkVlVZUythNFlQUy94NExzeFRlK2tmVUNvdlhhMG4rT1ZicDh1MktOTDM1dmFmbHg1QUF0L1NFV2lqYmU1QklLM0UyeGZKVDNhL0IyMWF3R1VSYjlzSUZ0Si9ydUg1L0U3b2hCUk9BL3Y4MHloeUtQSmtDYlVRRzZaNTE1TnplMmZ5OCtYampSdFZEYW94dWRXeHQ0N2hyY3lzODFOZkhRTWxoaU9HYzVjaXBHMTZMUW04amJNN09jY1YvVEpGdmN5UTg2R1JPM1lEalZiUS8xOXVrWVBEcUE4YzYwZnZVMDBBWUJJWk94UWZuODlmbE1vb2hIbDlhdW0xaXJ1MmlYbFh6aGVqWC9KR3B2aldpOXRJY0VzVVhVVWdJU3N4WTQ4ei9Hd3pNRUZMT1B1cmtzTEU4bEFaVS8yRmJYekt1cWZoTHVYK1Irc2hOWS9qQUhPajFjaHg4SFd4dENQeXBpVllDOFhNdmtGMmI3MXZzSjhRZXBTbzArclR0bG1vcmY2dVVYR3FiRW8xeEpKMTlZYmtBYjAwaE9uYkFjRkJaMmdweUdDYVN1OFJabEpMNVZQcFN4UEgvbTVSK243STlTV3c4WGowYU9kYWMyTncwOW5YaHNMWjI1K2V6R29CL1VaYWNYdDV2cll4cUZGbnhqdXBRMTlJcU16Qnl6RktweVN6aFVkSjI4VU9NZTFGbk1hZzNka3V6TG5Yc1REQXdsM3FmcjdyQWdlMnBnZkhhOTdlRnIrOHRrOHBOSU9ocVlFZzZtNEl0N2dHRml6NDJQa2dJYWFMaHJQS0YvRFNUT29VTkJld1QyUFdyOWFqL043MUU1eXZJUmszQ2pNMXhaT0NRbGk4cU9nVUgvczgwQytTditYNlp2aHJhaGhuK2VSTndGNjJNQ0oyUmd3Z1pzSzdsVVlpK3FlZk51YjdZMzlGVVdOY3NwczVMeHRWZTNLYjZBOGZDeVVyQkpEZi9TaVNsZEsyS0pKL0ZlQkMrYzkvUi9MTytNdGl3dWt4NEtmcHoxb1IxR3FkVU1tOWVaTzJqS0hvb2lUYzBoKzMzcFB1aGppUEZGUGhlWmhXMGlpdkE2NDROZ2gwa04vZzBjR0J0VHpORHdhdGY2R0p4ZTVPdUxJQnJhS083UjcxUE5sRzJUTUtmRDB4QWdPR0xaTjRLcHIweGRsMnBTVjF1TjVsbmFFWW9hemFIMnVTUmRZcWNjV3VodDVxOEJVYlVPemt4KzJib2pjVDZTR0h4eFo3b0dVZlZoYmNkenVEOUoyUGlPbkdQK1Y3bklMamhBb2VtLzhVOWRzeGx1RjFtVWxaS0p5Z2x1dWVNS2h2ZHIxcEllQ0ZEYlJSbzB5Y3NIZjl0Nm5hbWN0QysvSzhMcnlEaDFScUhMYXVCNHNrOU1oWEl4Si8xUjQxdExVcXVoZm1SRjRENngyQU91VjBBUE8yWVRjMTYrSjJCLzhmdDVQK0pRSWhhN1R0bUNTUlR5OVhWRGs5NHdOZS9QcTVQQ0RrRk9kdzROM1hBdUNhbEtKSFlDQWs2b1FUYVYzVmR3dmxlWkFqTkpNdkc5czI4TlpyTDZmK3FxRmt2Qjg0RldEREFldjNoc1FZU0FaRytIbUhWVDA3a29oMjB4R3NyQUtGMU9kVEF5MFVESnRKekpnejcyaXVudWNPS1FUY2lnTExoUG4weXY3WmVXeDl0dVFlWWtiUGJkS3ZydlNJV0d5UDNod3BHN1RlOVFBSWpXM0s0YnZkZGdBdm1zVzhTbGo1KzN6WHFTcHJ3R0wvUDdwVzR0dmtvM3hvR3RXVDNPWjR1dkR3QzcwWTc0ZHhlUDh1bHE5Tkx2SFBuVFZiVW5ORW5HTS9NMm5JeEtBOENWMi9NeG9vNmE3VGJ1UXIyc1EzNUtKMlV3MFZFVU1JVHlDRmdOVjF2NTczZkQ0SWk0bUpLdXdvY0k5a0tPR2dBelRqQ2VVakp4N0dtR1BSR1UzVkR3WWFBNzdYdEtvZ080VmRTd2x0Y3djVHN1QTlsVXhac3RSMDVqd3Z4VXRHbjUrMHN5TmhUK2ZhZFJpUUNoVFEvMWt1VzVzcDNoVnI0RW56NlJSS3l6SnhYWXJCZ0pWMEluaVJVU0E0NUhjZTJiMFpZV0FlV1dsZTdpVWY3KzFzMC9EdXQyeklEZFVVZFZLVitLZm4xalZFbjRNWTA3ellPTE9JU3gzUEMzbi9CUEo5eFRwMC9RbEZzUS9jQmQ2dE45QTV3K1RTVTZvaXNaQUhGRWc1eUZiKzJrN0hzUjJkTThPVkxQOTYrZzFaTVBhTDZvYzFkTXdLZFl5STR4bVUvaE5EdWRGVEhCS3dnanU5dW9CK052WnZrLzV2eXZoZkNGYnB3TlVJS1YwSUxnQ0YzV2dxWjB0Q01yaUNnODJ1UlA4dFBaY3hybjlpUERmaDZMcHhLNm5DR0J0QmUxVXI3c2VpU2lXaDluTUo3aElrZTJOQWRndXZxRUE1VVFTZE90MUhRdkRYM0pjdkFIQWRGSEVKd1RobFAyUVhGSkpLSXpBcHQ4ZUVnbTFsblVoeWJzMlN3MlBKYTJMdmJaei9kN0F1TEUySUdiMDB1bDVHZjBubHdGM3dlS0UxZEhHclpIRFRSdGVpQzhTNkhSWllaWTRwSHBVKzJOMUlyM1dIS0pqOFZOUXhCZDgvYXNJYlQ5TFMwK3BxdURUanVmNTBCRTI3TzJRcURLL0tJVW10aUs1Znk0aWhVTEdVdjYyTDJnemlFZUkyODF6QVc3OWo1Rnhwd0VYZ0hxTnJkNFdjR2N5NkJSUGFhVUVKL0NJbnZQTWk1Z0Z4WXBJYWFMQmtQL3BzOVFuQWhQNFptTXNYVVV6aklaY291Wis3bHRuUDd1OHY1aGpDNzVRU1FnWHVBeHV2ekRiblRPYVhRWDFrL204a2RXVzRWUFFYL1R5Y29nZjh2VG9kQzBPUnBCZU1YUDc3UHVZRFNsWDJVcGF2R0NMTmc3d0kvM25ZU3FCaGFOaGt6UHNwV2w1Q0JBSjhIY01rT2NXdEdPTGthOFVUWXRiV2JZbzFtZkh5VmhNV2h2TlpEOTB2amR4SjVKdVhCZ3lmMjZwNm5IcmlsbTBJaHBFeFdrb1BmaFZHSUoyN1FuYmkvTGszaWpKWHlKRnZXLzhzcGh1dmpQMmZzVXQxY0piWVdleCtSZkNNektRcE5TTE93ZzIyME9mY3Z6Y05VRGNvaWRROXpXUkk3cnZtY1JNbW0yMFR5MEpxQzd1U09Rd0Z3L0k1L0QwejBsYm9wK2x4STJFR3ZpL2VVWE82SGg4UEdEMzgxRVdobUVmOGEvaWZEYmNSamZuY0pLTGVKdmZNeVRIT1AyNGZnM2xGVEl4SENDL0RwN3Jic2VrUGJEQUl5b2Y4L1FmQTVjZGJic1FlV2ljZkRPSEJZWmRjVTdNWHlVRG1sRWtTdmYzdlYvUWV1R1MrbkVKcFdZWGtLRUN4MGFaNjE1T0ZYTFJET2FFYXNsL1dXdnl3NWUvTW1PeTIwKzdZSmFtdFJCSzBFZkxVQk5saHlDRzFZUTAvd2hjd05Kb01WZ0dlTFhjMFY3ckdXakx0OFNMS2hJVEw3RHJLNU1mcDNzM0tKenNrL1hCNmtOZEE2OVB2NzRPYUJiclpLaVVGMlloNkt2OFhKcTB0d255Qkk2RlNRMUlZNGxKZkptQXNibDl3bWJhUWg5dHpXWUtEaDJWT0lkQmFNQm1RMHBya3dQNUFiREdpbWJrTU8vZDVaQ3Y5SHNSdGdTb0JMUENLSGhKbnVLZzgrUDllR2VKVVdkMzg2NmxOZ3NjWXo2b2R0MlFxdjVWcENWNitEaVhLM2J3QzE5Zy9DVW1FOElLN251WThkd0FIc3BNQjBnZExaOWFnWG5YQ29kOXZVSDZJRjZmSVU5d0w2SWhTdVNnaHFveEtycWxwbSs5M2FMME1YNEp6d3k5amNyK0lWY1ZnRU5OM1VGS0UvbElESjJCZHB5NG41cTJVOU4zdlk2dlYrSkdpd1ZrOG9VelZkQVZDeDhTYVVwcUNVL2oybXpvRnZMQTc1MGFLL0I0elhka1hRN0tJRDlZbFZHSm4vWmcwcmVrM0pKcHNJQk5vM01yUXM0bXZCYmhmbUJjb2M5dDRpNCtlRFFnV2ZvbGsrazNiUVJ5YWFXTG9oWm9MYWN4ZTY1ZVJZOWMwOWZnaGZyeVdxcnZzR3FyOVBUWUV2NERjN1BNQTU1aVN0WnNyc0wxeE5nOVNFM1MrZzg0VzZjQWJuU0hobnhnaHNMN0NEVU5nM2x6MWJPL0h5OHcxL3BTNUp6bkhaR3hOQ1NiNW9lR3RaN3dCSEdHU3dXNjFhOXVLZHhETE1hZGNkcUlEV21EejFXZ0dJR1VWRG1MTTlXSUd0MTgzUmJHUHQ2V3IxVUxJRXV5YnBUTEZaVVJYZnJnRERCdXZESUJNTW5TOWxZNVRnREVNZFIxZWZSaHRFazZoWVhHY0ZUdURpUnFnMmI1Vm9jcm5YTlpOTWxidmdWNWpXeEhFT1Q3S3VkQXhRY0JDMWVKbUxaS3lFazc1Z0Zva0k5OWtnZVlLTzN4Sk5GeUEycXhvaVhFQWpnOTJGUzVQNEU3QTdtLzNwVmIyQThTUHZxUFVHbzJZK2poZ0lWNnptQjBvT0QvWFoyM3BjQU9RVjN3M3h3Tmo1bVgyUEllTmlkRFRSZXhDc3UvVGVFT2VKZXJvNVpVL1lwQmQ0S0M3Tm0yMDdIZW1wU1dpTTFEUy9nSWZXWXJuWWZ6RFZnWjhSb015WWVMdXN1eUNyd2hCOXhSUCtiM0VFbTBDNXBNZXc2WVZ3NjdaWTIwYy9TL2l2MDdqSGc2Qzd5Ujh4eS9wT0lZeERscFNmR09QVXVrK05tMmtkNTBLeTBBRkM1WC9jbTZMVHVOQmM4ZmkwSDJ4TGhlMjl3Rm5wTHZtZ210UlkveFNRcnNrcG1JK0s5dnltWlBmMSttRDByT1o2ZGIyM3BOb0dRaW5tM2hjNFhxS3NnS2hrTVU0cDVqM1I1YnNYclduNFNndjM5SllmWmZTWjBGOG5OenlROFJXNnJycm9idUpDT2piZHJJVi9pUU5uVTFlemdqQlVlTllpU0pKVDBKMDNPSCtNVTd5LzE0TFcreUhYZFBEK3pLMDdieFN3TEVGWnRncEM5L2toekp3dUIrMzdKK2tSakQzRlQ5Y291VmJFV080bDg3QllXcWJPKzZwVXl2WlFlM1kyZVlSY0hwc3pzRnY4QXlhVGtNQzhzOVo1M3dmeGRZa0JWZ1RKOFhjNFFhK0tEV2psWjBGK240T25DR3M0cmFnT2E4ODhDcE5tRFBDR2F0dEFJUVhBWk1ybFJ0emZZWmt5aDFSQmY4TjBVZEg4cXNCaU9GQ0JzcVlieEFRWk9LM29uK1lhQXA2OVpQRmxlTE9EVDVNZjVpZm5ZWUJSZHVEbUlkVTlIMVdOekZHVFZzcDNKOXNiZzB3M0I4R3djczRtM1h4T2QyNWxXMkRBckNDY0VOK2ZRV3VYUE0rMUU2cFdDbmhSVGRwVWE3ajFWZ1MyT3pDWkoyZjdPR1A4MzZielZkK2Q4bTIyOUVEYWZEWHRkUFBQd2FEQVUrTmR4RnY2aHhZS2FsdEJJVElhZXdPYmpzYVE1cGlxN3p2UnYrQTZ1anF1dW9vUEltWStESG1jVy9venVua2xXOEo3NGFWKytCUGxoa1VTR3VKRFRCYnZ0NHlWcy9ITmYyaVhGTVdGRGJlL1hwRW1OaExobDl6OHRKeFR2TDJnZXU1Q3ZMR0FQQklyN3RMS3VIcnlqc3NVcnZOSUplVXMrWFNiMDIyZnJ4WHN5ZmZsbkdQaTNIS2pRZU1icFJyeDFwaEEzcWEveERRa1VOODdjYjJ5R0I4RHh3NzdOMXNqZndpdGtYbHJpMGVVMHBVWXVHWDNCZlphNCt5TmtnOUV4UDI0OTVCcndHVjZQUDRiUDJ4Zys1dHpnWEs2c21XcW1uY3p6Tm5kSm5OK0JVa0IzOVg2WVZVWDF2dm9MUVl0WUJXaTduRDJ5SWY4TlVHM1Vidmg2amFpN2lGWXlPak5RU3RIZHdoNnVXR05FVFZJNjJSTXgwTUJzNnN1WGxuTUZYTlc1NUVsYS9CZUM4d0plZmhpd2JSNnpZMkdZMzZaVHhRRXFlNGd1czFNc2x4azEzQnFpNHNHUEJoekM4Zml2TEJvcmtkY3V2bXErMGdSVDdyYnhKZnpudFRmc1VseWoyZUY0Vlo3TC8rcE91RlZzUUdRZm1nU0RLZXRtY0ovNE16SjJjV1YrNGFoYUVxY2cvSER2emdjcGxINDJIc2EyUitNZ2treXRSNGhTWFRuZ0xMVXVFallHUEs3b0ZBRGhYRHJhT0xFYmJNSDJXV0dhRHgvMWk3NXJBeFBGYjBkbEg0OVNZNjVGZmIxU2JUT3dSSkd6Nmc2SmN0bTJCTXRQVlJvMlh6WlUxM1dxeVRBYnBkd3JiWXIyTjRVZ2RSdzV6ZGc1b3JybS9qVlBHbGpwZzNWM2N5eUU0QTRrQnZGaDZvK0IrVm9vRk9nWjVyMld5WkVkR3RtbENpdXFIQWlJdnhMVDBSZ1JxeDh5M1hxWVNRTVFwK1VkbCsrTkZ0OG5ZR2tTclBmcVFaS3JiNzJlRy8rUUNuVkJZSnRnV2g3Wjc0c3c1dm02RXNxR1FmZFZIdXRDMW1FN2NCUUUxZXFCb1N1U2tLSDlQS2VuQStId3hrWDl0dnFQMWdyOENRZWMvN0NjQmxCeWV1T2k0c1BTRDIza1A1dlZaZ1dVMDgxTk4rUEJ5bWVmSjB5VlM3bjNKNkt3UmUvQWJzNGVWTHo2dkFZbUdVSmRCYmRwTDB4UDlRTkVQZk5oWldTSzVVcjF0ZXo5cklUcWJtcWF3bVJjMWxzTXMxaHY4NUpwdUVrcEJuSXVERndKWjM5OFgreU82YnBsM1l0YlV0QXRJSmthbnhGZjJ2ckhkWDJWUFZoWmN1N2h5V01sK2RmOEczaDZOeDBmR3NuQTBwL1BQMXA3WlhCL0w5MS85ZkF4ZzhhaE9aQU9NTytTemwwT0xkdVhvazFLYitnd041NEMvOUluMSsxSk5Xb3JZQllPSEZ3OTVGaXhTbFM2dWwvVkRxWUZXc1ExQXpSZEdXRkthOTUrbTdTVGNZblQyeFhyaXAxckN3cDcrRyt0MXZna1NDekxRUjFNVDUxTHdJRnYxb3hvSGt2UGJXUmU1TkNjRURvaGg3R1FSSVhTOHM0L3pycGtoSHhzcmNHaVB1dm9DYWdJck14dlZyeG44aEMwdFpSbnVtYjljNGV1azM5YytqdFJpa3BmemQyb1gxWDlSaURHOWY5UkoyMGZ1d1BPRVFsVjk2aC9TVGNmVEVPRzRrQ0ZxczRMTmpDR3hPOERzbzIwLy9NL0FOWENaNHZGeVViSXFYTC8wZkI4cTkrdmxnaDB2Z3VXcUxNNWo3Tks2Yy91Z0pYUHpoZEM1am4wOTJmYnZuQXU1eTNlTUhDeHRhUmhITHVWODdnbWtaQURma2RIWlIxWnhLampLUUhFS3VWOHFRR0ViVUswVW1DbnltTW81cnFnR2tKOUc4em1oQXhyYWtVN0hURTRiWnFnbjRDRThXZjhaTS9NOTZ0MUMvTTZXN1I4UWRmMGUyOFA4WHdDT1B4Mm1wYWIzZmNlK0hWRFZZNDI0SDBaVndCMGwrYWFIVGdnMVBGWmMzNVlsYlpkWXpOT0hUMnlpMzZBUVZsS3c0Nkdad2hLQVFsWDhRY3lRT21vMm45NTdOVEdwa1BWb1ZVMWkvNC9jdnY5bUJTZmtxbXdtTGVRS0EzMnNxb21vNTVrcXRnNCs3R0FZd3NDOXA1UE9FYmZZYkZMbTBNOEQvVTk2UjJiYndjMnJWQmZJQytMZ3JRMW44QlhuM3FkUlZ2U3Jqb0gwZ2l0NlR0em5TNHpuUUNTd0dNa25BUWVjY1NoK1VEcjNwYkRTQi9yT2FpN1lRWGMyRGVuOEt0VjQwbGgzMysyMDh0Nmw4TkhSYUNLdzdQYjNEMFQwdzhaWnEvSjc0MjBtempQYXpEWktaT0VZSDB3ZjZsWHBnUWxDdExDVGh2QWZpa2xxc0UzYms5aHRFbUtMN0hpMGsyUmhCdHRLbXphUUxaUGZGVjFCWE00ME5QZ3FxVkQwSU8xWURlUkJrV3AyMjhlZC8yYmJJOEVjWER3KzFpUGdWZW1WTGh0aXpKRHpIamdOaXA1RTlTYnlRUFJ6d3V2amg5R2x2ZVNrS2FLZk12L2MzZ3luakZSck1vZHdTcUlSZGs5R2xjRldZZWlUdDQ4VzNMaGkzQWp3MnpvMVFvODZQVEZRdTViT1ZxTWpiTUg1QXU3T29tSkd1amExdE9CWTNFZ1A5QzU4VjN6ZFlUN2NiWUZBdmE0Kzk4RFkrUDBIRThSSStwT2VkYUswdEdsVXR3NDNjWk1zTTRFb0pzRTBRby84YVUxS1p4YlJKV3gzeXk2bUhod0NqUDFyOUxiOFlzamVGRTB3SmdQR3lldjFBUW5HMG9HSGRLQVl6RjV5ZEdjWDVnQUR0ZDNBYjVadkdvZ3NOWHNiZXVLQU1oSEtlZmRmSkxZMndQRlViUjk0cDgzVThhN3J5TWp1Z1hCaE5hRVp2WWNrQkR3TWYvVCtaaGFVNEpJSGFOeXN5a1F0amhjUU9DMG0zV1Q5RFNVby9TN0NmelVnMUFhdUhYeVUrWlhjTnQ1QlBlRXZGSDBKOWpqR2luNFhoa3VNSUx1RjNhZHB5VHc1WjZrd2FsLzZWZVB1STBaNy9Qemg0ekU4a0lzTGhlYU4rU2t1U1NwWVBzcHMxYjhGc01TeEFWTWhIY0V4RytlTXVOZU83bSs5WW5qckx5U05wclcwNDRBZ0FQRURMeFJEYkdZVDRFTUdHWGZlMitiR0ZCaE1PazhpQk0reldIWTBwTUhoeDRXOXhFWm5aOW1vb3VnQnphdCtMQUJnUWhzZmZPbmcrMjM3WHB6Y3RlRWJsT1JzSFBHdk9UYlJiZFl0TzdUTUVlY3kxRXFEUWtPZzZVU21PRkxpV09rbEdSam9MTnA3MW9lRkc1YjBjN0RubDlsTWI3NXpNSGRXZlJtYnhMUWVMbkJGaWFMVGlHUXBjN3l2UVR1WXEwUmNQeTVIditPNGhRSXV3MElFZnUyUU9pdTA1cTNjUCtlMHEvTTBQZ21UR1JCWlJlWTFSdnMrdm1LMW1RZngrbUo4czZodklnUGNReTd0LytocVJUaFBMT1EwcUtmOXFqWFNpRVA4ZVN1TFFZYWgxUVpsOEhuVTBhNlJleFlNZW1vR1QzdmhOVHdTT3ljNzRhdjhQdE91R1dzYkMraTZQZjR2VVo1c3Z1ZjhkVUpDY0V6V2ExVXJDL1RaL29HU3l6bXhyYnpwNzF1aFdhRWg0VTZlMjZkendYNFhhODJnWnAwdDlvekhlUmVDZEZhbUM4Rkg2ak1kSXhFcy92THc1QlZBd1BCTFQ0MVFTL0ZiaXZ3YXpGV1BCY25VZE0rWVNNZS9JTVFCR2trRFBTWUtSNXgzOXRuMnRlWE1KdGMzZ2tKOXZEa3IzeVBxdXplNXNsZTFOUVF0bldNS1JrOTM0UTZ5Zm41dVdzbEF1aW1JMXhlckx1d3JzMS83bXZYUDMwcnJkemxJNU5iWm1uUUhReFNLVTgrTFFuYzlTd2U5eTZpM1dkQ2pvbUFRdExKdHRrcS9kLzF6Sjd4L0VoZk1Yb3hVUkJaa1AzNkpjMnhVV0pCbXJqS2pNRGNCei9Bc1l2endUeEFzT2tVT2YxWTNXbXFYSG9NbG9BcDNVSkY4QzdtcCtvaVB6dURoNUwxQTlDMlhGeE5PblVsTVhhOFBWTWVPazlIYU1YMHEySTV4UTBGeFJCaFJ0NWZrMWF6ZFh3WFcrdWJJWGMxdDgxb2lNQUY4N2FzbHNPakJVRDJHZFBHREF4MkhENVRjTjc2TElzR0dmL2lNeHNoSHpvdFhUQmJnYSt2YW5aazlYc21nZGt4NFZMeGs4UmoyMUlKR2dIQUdDUEJOOFZtczgwUk9iUWpXWUh5RXRGVVpVaUZFZGw4eGJ5djhIQW1SM2ZjV2dqK3JwTW9LdlFhd1Y2SXcxNllRYjdweHJWWmFzYnJBSWg0V3hPa1dDWm81dVpGZ1JvMmg3R1hSSklocWdKVkxpK0ZjbnZIRmtYR0lvcXR2QVB2dGpiVldYMXhmdVNTVFRGSitJTElQVVJOM3U2QkJZVURvdW54R3NEMys5VHE1QVpMTytZV3N4elJoUVVHSERsZnByV2c1VUM0QldmTlpsWHZYTkpSaU8xSWZBemg2VkpmQWppYUNSMmhvUnpwSkN3dlVVSWtKUkt0Q0hvb1NuSnBvWXEzTFZRMm1DTlZMKytlck1EZzQ5N0d4K0ptK2lUR3VpWmx5bDNSdnV1bUw2SndUWXI1OGRncy8rWWhtWXNkYVFOU0FmRUVHQXdPMmN0SmRaeUJ4Ly96RHgvSDlBWGRyNm1sQ2lSWlJVNFQraWlqdE1PWFdIbzVKTDRDRW5ocVFVZExKOEZka2RtRlR1SVJaREg2c2Z5eEFEenNLUW1hamV3VWloOHpUOE9pSW41OFQvSjFTdmhGZ3lYOXBBQU5RY2VIU0dQKzd2YTFmSFY3NzVvL1lZeW9kWEZvT21CUWZ2ZE1YZkF4aEI0Nm9xK1g0bmJzVzNtOVUyZ3ZlVXV3TEVLblE5L1QxY3RaQzAyVFJVa1l0SkpSYmIzY3l1S3lWcUtDLytmYXBDeFR4WkMxcjVXcGY4ZVltRVhKSC9LRmdGSm4rUjJIUnA5YktKZHR3SkViL1JXZktKR1FKSlQ5U1dnY3NrTTJsaUJkeXN5SngrTm9mUHFNVXVRNTRldHM4R0xmZk53TEIvM2ZFSzE0N1FpSEh3TlJCdURORVdPaEpFaFJvN29BVytCd1JUSlo3dUs4MEtuWVhPL1hTbjA5akltUW1yWDZVSVhDODFNdGxvclprMkNSRXJxZkxrMTZiSU0vSlBqcmhaeGFtZTBZNDMrNDZCS1l3ZWdNT1RJQWh3YWVQSWExRlRMbVBocWoweHFQbFpEVGpQcHZ6R3JQUkZ0UmwxYU93ckpXcFJ2L3VvN0pRWmZlTlZCSVErZUdwaW0xVlhOUnpTVTh0dmo3SVNGL1FmZE1paExxNm9NU1pFYkJXMWtERmoyeURSRjR1NzFKQ1NuY2N3M3BZNXlzNE9rZXF4VzgxTWxMamcrczFXNC8wR1c5Ym5vZ09vaU1ZM1J6cGtDaUVMSG1BaUczeXJVb2VLL1VER3hNc0ZTY1VkT3ZJMENGTTU0Q2J6Um9TRityMU0reFM5dnVMWTQvQ0pybDB1Q2YyRlNERUZQaDNMbzlrUUZMdTE2aEF2L1l2L0FzSTV4VHUrYWtxTVZWdDVkT1BhOEZCOHVEcHpSeEJlVFBSb2VFMmsrb2tSbnhYSnhxLy9WSHBldEtuU0JZSWlWWnhtUHQ4bFFMa25jaUl1WUNQMFhFc2FIdTJDcXQ4SGVDMlprREJyQ0RvRnZMU3g0SmNHNVlSQkhCU2NwNTFEeVN1c29HL01tMGE3SUpEczljYlIwakR0SXM2MHFsRTk2bnNrbHdsa2pCSXc5bTdJOUVIMmlacjBsRWt2S051NTNaUlZDaVdsUDZjVmFZb2RUclRSVllWL29rdDY3SmNJZGUyUURjWHlDWTllUHliZHNUWnRadWpLRklqUFM5RU5nTG5EekJmSmdpOWJWU3JaYjZzOUNlUjd4dytWdG0wQ0dEUkVlSkw2UzQyZGtydHU2TGlYbXI1UDE1MGFSOWVPK3RPNnh0MzhTeGViU2lEUS9wRWJweWVwTnhKalFYOEpPbFh5QmRtakJnSnltWjE0dDliaXBxTll6dUZKUE8wcUJLOVFodHNDbzFsaWM3WDhMS3BCbjUxeTdBVDF0bnZ2QTh4VFd3MnpQcEFKSC9sOGVaV3paaWtReFlZMUdxSzNUMjkwOWRWci94dkp2SDNVSXgxSlZWNEdNOGFnYjkwUDRmVzV3M3dRY1ZvSlJLMnBsQlV0OUdTbkEweGlJWVQ3V0tmend2MU1SVnFpbmh1cEFYRVFleE9COHlZSzFYVDRacVRDaFIwSEVLQnljN3daRXFxd2hoMUtHN0FSdUszWUpCQnZ3NGwyakhCWWdLVFJEOVpmUCtIWVI3NVBTUkY5Nzd5SzNWaitDYkF0TkhFdWZ6M1AvQUhCK2ZYdTdmN1VsZVIwdXNSRjROWGYrS3JZK1VKeVo2L3ljZmt5TmNmeXhqOUVBYU5CVHlIQ1kyMkxFajNwanp1bHVhVFVzLzVibnJXZnlaWUhlMXprSWhCamEvVGdKK0F0WmcyTWRmM0NhbU5xd2xiV0I4QnNkM3V2SmtHanpxT2hVcTIrdkd5NG9pd0pNUUJEL1pBVnd1UlhFTGpjRVhpb2RyVng0MmVZd3ZHYXJCUHNBbGZCU1B0SVJ0MlZGcGdBMTVlVW5oeGJYdjc5ZW1SVXVUZVlKSXhQYzc3Z1lDTDZQTEtoQzZzWklycmZpbEp3KzRGSnUrbXlMWWtPNnJLR2x2VUsvV1N0d1ZVc3F0UVNLbHZRajhWV3BuOEpORVZJNHRjNzJIRXRTYjZERzdOM0JiemV0bEpKeGptTEEwc2dHU01OWnZiTEszNFVYWDZFSllpNEJ3ZzFwNzNxNmY3cHNldDdQWXJ4bnZnZVhidm5qTkc3UUErYnAzeldxL3dRQkRLbDFCeVEzM3NsWTdwSlVwVHJvd1dFVnlscG9sRURzb2pmWitxYzFuRGE2VmxwVVVrZ0U4Y1U5djkvejQ5TVVleTdMRFQwYlJIY2IwZzlsajh1TmltR0lpb09oMm10SzEzNEhFTmZSU0Q2RVpPQUpwc2tXcEhXZEllQVkvZzhYUHc1RDByVndkeUN2RnAxQlNQbGx1TUt1RlBKOGZ1a2xaL0RJc1NqbW0zczl2dTJaM0x3UVlDeWdQdG15T2ZqN1NKVVpZS1dKTGMxcXo2NEJ4R1Y0RmdvcGtDV2RDTVA4WEZoWXhYcjR5eitJOGhYcW8xbnVrZzJSWFdqVytGR2w5Y1lQUlhBS01JVi95WGRiczRPSVlGQ3B6d0NIZHFuQWhKRWpUcUJUV3hXWitQQWRkQ29LSnFXc3VtVmc1R2QyYk10OVNKNnk2KzVFRHY2RzNhbzNKSkRoTk9zR09LbU9HTFV3bXhxUjM0b3lEQjE5L1FuTDNvcGVxZ1k2eWZFUUx4L3U3cG1ZSmd3U24xejJMRlhKOEQ5M1pFdEw5RDBPWGIwNFZSYlpxUlJjN3lkN3ZsK1JjUnZPM1QyYjREaTI2ck1ZK1Jzcm1rYnBxNVNYZ1lrdU15MGFrVlMwMzIrK1kxa1kxdHc4eFhTRFEyS21LZ2RMVVRhSU9TVXRLVnBlL01DdkE1UTlQcmpLa1ZnMkZXYllpRWVGaHBZOGF0QmtxSnp0LzhQSi9UL0k5OUlMbUNYQWtlOEJxUkNaZTdOdndMUXBaaUhJSHJjVzA1VmQ3OXRTQ0FqRlgwYVBPdnpoV1BsK2xWVTFEZSszQ2RCcmR4dlFHS2d6bFh0QzdFL1NvZG9oeTRaWVJkUVlUOEdoaWE3ekY4SUlJa1Z6NnN5YWhtUUltRlc1cFl1OTZFRGhLVzZ4dTk3REIybXpNTnpmT3JFZkZTcENtRXBZV2JncUZMdWJXZCs5R0RYOWtYRXdvTEhuTDBudURUZmJGSGZGZGx1UXZBd1lYUzRwdmN4MzBQUXl1MmxkNkM0NmZhOTR0OHdJdTVSWVVzTDllUkl5YmdLbktXdHR2Y3BtZGhSRFB2S25XMGo4TE5YNVJTVGR4SFNyQ0crajBoT1VjTitwOUZXaXhteEdSVXNnSHp2MzFSNW1JRHVYUkZpMVZWTXFmRTFCWkU4ZkpMZXFqNUQ1MUpORGNRKzZVVU1XUllDOU1ScG9MOG1OelRaTERrc2J3cGlpZVNPMWpUTkMvVUdIdmdjS1ZPQUhZcXE3WnRFSStmc1RhaU9JQmdGYnA0UVJLOEZUbys4K0ViaGNZai9STGtqNjkyV0h0NmM4NGcvMTNlamtycGhrT0FsdDJnN1RSSE1JYVlXSEgxc05nUTVzVHJodUVEeGhSOTRUN1U0MkZLK3ErYzFxRzdTODJ1SGN1b203Ymd1c2ZCS3RLa2JIMWloanAwdWxMZC9GK1VRcXNoY3lFa0xuVDBPT1ZqMnhjSVFPaEJRUjh2SllVeE9NZFhkaXY5cmczZjk3YlAxSVNDZGtSZXRmRVBJcEZoQ2RMOUUyMzU2NGpwc01uUjhPQ2ZENGNsNzFQcGlsYStqR0Z3VCtERlZ3OURZazZiMFNiRmtyVjJlaWpYUEtFcURKd0NOa0lDc1FFQ0I5QnJqR1ZidVJBT003R1BxcjMyNWFxZmQ5TXU3VmxGZUxoazJKMmVPT0xabWV3MFR6MjFPazBybEtnNlNUVEFENEJJVzUvSFJkUUtWV0N1YUxMZUpXRlF1dEE1QXZvVERrZnN6SlVMeDNFV1A0QVR6UGxUV3JUT3ROYVFuWjFFY3lDVGVsendoV1cwVUVFZk5wQllGTHlISjBzSVN6Q0pWVzZZSVdWa0dYdVNzN2RnZWlUQldEN2FZU2ZvWXo0RC9BTHovUHhVTFEvTHdEMnYzNCt6dGxVaHd1SUk0bWNQQzhHRVZYWlNpa1JjVHFQb2lHRzVZYll1NHJYNXM0T1NDbUFyejRWdTI5VXR2TCtXWFNCNXQvaWVIVHBQWmROS0ZTRFJmMjJEWFBGMENtcFJmQnZjeWFJRU96WXBKYmRDZzAvOWRNeVlHWS9IZUdocU82SGs5Nm9QNmVEQ2tvbk1tQkRFcXlQZGIzalJiQlhhdkF0VnIvQmRyVmJPYmhoOFVZWWRET0g3WnNGTXlzRW5RSnU5U3RwQmZvMU55L0VoaHpRVGhkREFRb0YzS05JcE8weDlPc1ZyaFlxL0VONWRBbVB5VjgvQnlqbWI1UG9xQ3FsQjdkNVNseHY0TkRVM01adjFtY3l6c1dSMjA4L2VTdmEyQXlGVlYyZTNGR3lkd2xkSHo0cUhRMllReGZPcHdxRGZxZG02bGtTcG9NMGNmb1RQOUVCTGw2U3d0MS9oOGx3bDF4eUFsR2ZlMmorVHhTcWsvRHFSdlZVTm05c3EwN1ZqQ3N0bGpnSzFNcFRnL3lhN1JIZ1lnVnlJQklYVy9YTnN4cUhIU2dtSHhEMWtlNm5tbTM2V2xpVmE5TmNqdGJ4ckFSb2Vqd3RqZHVlYjRzbU5qbkU2MnFsOHJFb1NzQVJUM2QwcmtvSTRxTCtrREdiN2dYQ2Nkb0NyeVhZd2kxNURvQWtHVC8wL3lhNGkrdDF0L0xGY0hsc0kyMUpSTXpCNHZyT3J4TmZReVJpVFJiYkhlVHY0WWpVMVJ4dFpPNTNhQ0IxTVZjMzZiOFQ2NHBiTkVoeUtQUFdpMmdvYjZHSzlKdVRQczlXWUdCRFE0a1o5MWFISFI4QUhVOTlzcm1TdkNVUVd6TGpWYVdmdHF5VXBsMWF6dUljRGxqNHpycExKMllSZ1Rza2JpckdpRVRpK3JxUzIrUnlSWkRIY2dSL1pIU0VFWnV0UFRKVUIrVEx2aEdWODdTRm9VSHNIWmZtVTBhMFNHK3oxbWZwZFFwWUZDZUUvOWY4aUdHYnliZUZSYlduaW50Q0NyTmFvRG1XdXdMeUxvS3hVdzVTSWovdTVLemc4bzBaWXFMbFA3RGQ0bnpTWUZYT0RVTTh2blhiYldUWU5zNnJrQ0NHTHVzekUvWWtydlkrY0MycXl4SkRkSFdpOWlyUVBNem5ySVFjU0ZuUmFGZDJPaldRcXBna2FManJKZkZqeEVNTTZ1YXNiU1NSNjR0V0pjam1ncmUrWVo1WlJtMEt3dVNVVGlWVGxTb0NWQlRKcUMveG00d3RESkFxZXk0T0hGYTMyVmhuMlQzWnJVUnFIRC95QUhPQzh6NXlRUkN2ZnRCbUNnRmkvRFMvUFhvUk9KTDhGQnpSa1FTbENKd1dvK3BRR2xxVEViWmQxQnl4QWpVYmNGUWUwTkV1TUVvbktraDdUbG1INFNxV1BVTFJVUm9lRGNyS0tBSjF0VWFkb1gwdmxTKzJxbm9tOUM1VHNpRjJpZ1U0THRvMFEwZWsySVhuUElFZjJ2SUdWbkoycGxNQ0ZyQzA2MnR4WGpUUG5YeFNab0MySHI1dktBYlJzRXFjNGlqQm9kM1lzVkVsV0luTDhHUk5wekFQeW5rbzRyS0QvWWFIdDQ4MFFrcUtycEJ3ZU1hTXVxYUtzR0lVaysxc3FOaWtQaWZxWjczaS9KODB6RTJPRVl1KzZpV0NaVEdFWHB1cnUyTkJTWlFORUpMREpicWNxaXcxMnVaU010M1EyQ1ZSY1lGNGRzR3lPSWh2Vk1vbUVPeGNMeVphcnFSNVJUck1sdTZSck9xeCtIOURSWHZsck44OTVZbm1xT3RHT202dDZoUEc2RDJVQWRNUUxDM25PWktISkJ4ZmZTZ1pZQmk1akVza2p0b2dmbDBTY0xpamtqZTFnTno0SmJ2ZXhObTRiTXg1Y0VFbGNNNFdURGo3TU8veUtTR1hiRnBpbytNTE1PZ2laNmpxbG5YMUN6Q3RNOWxVRWZiMldHa2VBc2pYQ3pzK1EyTkdvd0JJK2hpdjhQUVY2QU1QV3IrU05QV251LzNHZG1qTDJGVnp4OE9sbE5VbytqcHdIcEYxUWpydXF4eE5kZzhlRC9SVDZ5YmJQVS9OMHpEcm1QN0lqOVlIbVViZGNhaHYzUEYrcWF4TEZjanNNS1E1SUFmTG94dUo3enJ2RmgzNXF1UHpxZGdwNXdDMWp0dkNjalJBbEIzdXF3cFpZOFYrSThRUExQWHM5UkFqZy9keWFmMzNlM2lxRVlrN2pURzB4Qm1JWUI4SEFmbFBXbEhIVjVwM1IxTnJIbUFycTVNYzErMEEycWZsNFVkWkZwUDlOYm00MW01LzkrWlMzU3ZrZE5ua3VsOHFVaGRCUkhZRkwrQ051WXNhSWh5bmd4a2VDRE1jVVZmbWxnSUI0SUYxbmo3em9HTWhPSHAvUFZLZU13bVU0aU9tc2lUYjhrYXArblFRUERmajczc0pzZEQxQmFlWmFhc0hWN3pNcmlVQTFlTEpRcFlMU08wUzZXbnR5QkRzOUFKTTg3REprUDZYUy94R2UrcWU5QU1sZ0g1S3lVay9tSjNIVjJKZHBFa1BpUGRBOUVmVkMrMk5JN1g5TW4yL2hENlorUThuODZ0Ui9CazhMVlYwSjMzekF3V3NGUCtxUnBUaEVyYjdTQVY1K0Zya2h3Z0phVTkzdVJwc3Y1cE4zYkRQUG9USGNhMFB3d1NLaTFlZ1FwYzBXMzVlS0tRVWhFVGJFa0hLSFlyZGx1LzJsTEVPT3FVZVoyUjNnd1RVTjNPREdVeTcza2ZPdklZVWh6dEdQL0lNbFNWT0x1djFqNnNDd3NoT01DalZjeWR1S3FGY2x2RHNmQmFyRytReUVxQXhKdTdJTWpETnZaSTJVdE44MGdVTjlUN1NiVnRyQjlibWNFU1VDV01VZ3JJNzFKc3kyclR4TCtKdE9IQVZQamN5bTdybURxelJlVDcxS3o5OFI0aFg5WnVsbjM0STMyTkxCRmpaUlN4bENVZ1NSaTgyMzZTZ3ovQm1WZFhMN2ZaYVdYcXFpV3BwZ1hIbGNvckVQaEVmMFlSYTJEN0Zxb0h5RTRWclBVTDNoK2ZCVVA0WmtTOEdFYzdzMzljMWtBNUtyMzl0MlRXaFI2OERhbEc0UVc1OTNtNjdWTzgxbmNXZk00Wngyak5iRDBlY1BudUVWWGMrR3grYXVwb2tqT2padTBtRVlCeHl4ZGo4L2hRT0kxRVVoSkJGQit2aHFEVFhESkRRbWlVdXdnMWdtRG5wSnk4enB1UDNJNjNNcGVReW5CRk01TFVmUDdYN0lybWJJWU5MdWdXU3hLL25jQ1UzTHdIQlpySkFvVStrcC9lVUlnT0RnN243VXpnOXY0Q0ZOUEFHM1ptRU1jSmQ1M1VhUUg1Nk9hRVBkUTRrZ1ZYcEZZSWtVeEh2WE1aYUZxaUMxRldPcWozSjc2THFKRjRhaGg5S08xdTViNjRuV044MXlXcUpKcmVqZ1RlMDJjS0hhcjBlcFMvU0ZJbldYODJNUmMxT3VOTDJlV2xZaTI0alJYNGtiOFpaZjB0ZkhOcHY5SXAreTN3Mm9vM1JQakVVNFJBaUJab0x0R2taZS9Na0VQa1Nvb2ZjSUVoYU93NGJXdXRHR1JxRlhGYUhvRjhxb3l0VVAxeFZiT051RkpwSDBrK2k5MzUzQXljaXMwQ3lXL0RxUkUwazVqc3RMNmlZTzE5dXFHMlpQc3c3Um40TXExMUxrMWN0dm8velZMaEVGNUZ0dWJobm82RzlOTUk4YlVCb3d2SmZsUWxUN2cxcURueUU5T0JJbk1kdGVqQ3hEWkVSRTM4L25HM1NLd1VvTTZEakZYMk5INUtxeUZmbVlrZHJQQkFJejVuV2FOODN5REJzMWFPM2gvbGRZYTV1ODg1VXQwZWdmZCtKVTJkazdxMzg3UUpPTldKRkovWjFaaEtSK1FzeGdBdmYwYkdCZUZVdVp2NGk5ZjZqQUhpYnhteXBlZTl0cG5zVGhWZ1hLaGp0aERyanJHeUdtRXJmVmMvd25xK3ZkZTNza1lsVDNTNHJoNUZrRnRSRE83SjlrRWpjenh2dDN3VFo5OThDbWhzeGNKbFM1Zkg4TkVJUDNxM0JmVnduNDNOM3h0aFV3Nkw5Zk50TUFEbWJTVkJHMTk0VEFQRFRleXk1YWtWeGJrVU1CR0hMMHpwS2dULzFWb3JrSWVOSHZIc2szeCtrNE9pYjR4Y1k5akJ4d1NlSjJwc0dzT2tZSStTQmFrSlBPUWo4OG5INUx5Mmx0aHAzeVZSc2ZIQlZNU3FUZzVMaVZSd3BhZ3NKWStKUG1wVFlFbkR3VjhMY3RnU0hQdDRCUk9WS2g5RURVQ0VRUmNGalZJY0gwZ0dRNGh6c0xKdE5SWGllcEhDRmxvcm04MGV6RXAyVzZCcFgzL1VCa0ppK0k4TERjOFN3eVVPV01jak5FbDA3VDkwUmdvaVhOM1Z1SjRFRHJ3cEVsRS9IakNmZnlDcHUyQ0xDTTc4VU1jMWdGaHVKYnEwa08wY2J3RURYVERGS0IzRUxlek9tQzF0S0FBTk1Pcnk1bUM2QlFOOVVUUGwzRW8rUmxmNEtJNFFsMFRkc2ZLVG5OZ3o2MVhoTkszWVdCZmdNZVE2UWtEeC84NjJSTkI4eWo3TUZLUkQ5aDlHYm5tL1R1OE4wbU1kQk9XV1VnVUR4VGM4Rmx1VmphT3BHcGMzaWFRenB0QlNPaUs3R1d4aWpQbmdxUWczcmVFZEorcWJjSHlxUGF3YlFsNmUvRm0wYTI5V0lsUVhWZTRmYWxNc2dsUDBPSjMrREVvbDJWKzdUL3pMYUVPeXFHbHBHL2VBTVpsNWt6TWs2SnJqbmJ4TDBXcGpuWDIwS0ROVUh5citaYzRqZzlqNnA0UUR2UmZEaXllOXJRSURBTzlPanlhbmRyQlZIS2RkRzVKU1ZmNEU1M29Rc3lyc1RLcjdzUE83d1huZlBDVnVOczBub2RySUpadlFHZlNuVUV3WXFYMnBiU3RlckJEU3RPUkhEcXFDaERjcWVZYTdJVUVsRjJQeWlHRnR1czhLaWZmQ3JRbUVkMFhWZ3d1cy84czBFSG5BOEhOUzlwdjJmNWYzNUl6K3dJc1d0TC9ZQk9UdTRFZzdLWmJITlRDNnE4SVlKaVNnRDI3WDFLL0FYNVU0YVhaQVZZQWZxZFphbG5TYWFFVHFGUGRCODQ0K1N0cGFiRkk1WWRyQXZwUG41b1dMSXdiUThham04aitGWmRsMHl2NmJNbjBpTWovRXhJektYVlNTZkZQdy85Wk1LVUl0UFJ4aVE4cjE3VHZUWVhQR1JNRGVZT05BUjY2YWJGT1JFMXJZMnlZbWRRRjNjakZrdVdzUHQ1UXVaUmNxMDN1L1RySER4ZnBnRi9BaGpOTUdGNDl2cUhZcHlCdzFaVXJReUdKWDVFSUZUU2hDYkUyWmRUS1MyNzJuSW5GL3dMbm5od0lFOWtnZUVEcUIra3AvVzZSMkl2clBwOXA1bW4wVDhyTHB3SCtlRSsyVkQrbkVGOHRtK0E0WDVXRE9OK2p5NnNDa3Z4NEdlMU5TOUQ5MUJkSG9BYkZYcWh3N3pVaDRRWW52WWl3UUNZNDdaTm1vWDM0elAxMFFtNVNET0RSY0xNd0FZbXhQR3dCcy9ZUFNnMUVSOVNDeTRCTkl6UVEvd1J5N3Jzc1NkS0kxWVlSVmlIM1ozUVRJaG82bFpqbEJlM1ppb2NucGQ1UVFjSzJkWGQ4cHo1eCtEUGl6YmZoNUhKVS9CUjQzbGRSUkFvdE9RS2hDTlUwc2xFc3huNXFZUnl6NmR6amo0OTNRVU9yUGl0SmNicDF5SVRUcCtxeWhpa0w2T0Z4Ri9jSkZsN0JoRHdRZ01DcDgxVzk2YkMxczhTSDdCUkIzS3NCUXhLWWNnZVlYVGpUMmFsSDVILzFLeHVYVk4rK2hRL0FZb04xMWorN3diWEhPZ2ltdmdyT3liUHVyakpWR0xucHE0d3NTcWFBRDZlaU1CK2IzUVhZRGsxTEQybHJQZHVjQ3dFTGgvTGZaRk5iTzdsUDBKSTBTb2ZQUWdjTkhzdkpPakl3M3hZVkVSRDZTZjFPa3NnSlVhT3EwOXZzdHZpanV5YmxsNUxzSjFlYml0Z3N5VWFZZ2hreDAzVkRnM2R3bVhiTXhuRCtjK1JQcnBMbCs2ZDQwcHB3UHEwUUZvbWVTbU1DcmtYQVkyWnJZcm9XYU5GY25QeXp1Q0FMOHJldVRoSzl4TndnSHpvWGl5T3VTRUN5QUtlMkR0Wi85YVVwODlTaU9OaEF5YkErcjd0YngyQlpLdUhyUDNCSENFM2hJVHR3RGFrc0ZqenJhSlZKR3djL3VaTW55MWtiSHNwZDlFOHBxWDgybmdOeUh3UWJ6T1V1VmVTeElHTm9oS0NkTWMybkFDRStGbEJwTnVzelNKTHlUaTFqTVZlcTkwTDJVVTFPemRpSjZKUWx5b0hrc0JJVFFRZENOMHZDZStFRGZIb0pLNkZKWXhvUHlKYkV0bGdDQmlvTFkySWxqTVlPYzdpQ3FMZGY1SDgyV0UrWGhJcUYzK1h4bnM3ZWRGbE9aRno3MkhDYUtSWTlWaEFvOEJKdU9SZGZwM1h0WnJsWFkzTDlYRUJjckdIM0tjeStadjdsaUg1REE5Nyt4dHlKVnd3cGVmTWdzZEpMQ0JlNWprQ0JFS3k4Mjl3TXdxSkdBdllPTHlveXVxcXpraUtmOXNtbXdWdGJIbWhFU09EZEk4T0pjRUFrZURqNGtCQ3p6QUNJSExKQ0VDNjFoSG5rWUxtN1piM2JQei9QdGZlQmwwQmhDZTJ3a2NQTUdXOThhZDU3dXpUa2ZPY2dxcnc5Z3BqVW1NcDRTTklEOGhpSVNMTytucjQwaGptbzd3ZTlidVE5VTNyS29CVHBhZVdDNUxLK1ZKQXBMekpWR3lOWExaeXRjSG9rMWhoY01Wd3VvakhMU1F6NkYzeFlVcnJtRUJ6ajJBRkE3Mkt2UmU4WVp6TlROQVpBYjgwaDNzU1A1aVg0eHQ3L1dzd0tlczBNR2tZSnJhZWNhN2U5OFpoUHpOMExYQjJsK3ltOUdXTEI2dTYzdnEya0NmbzVBbzRXdXRsVWhrbXVzeEpTbHUrVVIrbXpGVGJZRjZwcW0xaVBxSHZ6Z1RrM1dsU01DRW1Pa2w1UGEwVy9YcjlqZDA3MXhZM0xEMFp4RzYwcnJ4VTJNT05SbUlBN0Q4dTdGeklUR3Q4QTE0ODU4MmJ4cTVyRVF4cDZVZW8vbGZHWTJjUGxZSmJxMTZlTEwrVG5Md050SzlsVTlXaUdUMXRjZVZSL1lhdFptaHJtUDk0cFdsQ0E1YmIvRWhCcTVyeFVRUXV5ZzIycHpRaWNHbHR5RXVVelBrQjlZbzV5OUpvdlRrRTA1NGoya3VlK2NEYUUrOXg0K1RMN3ZTU3QyNkxlTVdRd2FCZThTa1lUVTZhR2R4ZmFZZDROaUx1ZmY5Z29lYkRUd096bXBCSU9LTTYxK2RSa2toY0tZR1hPRFI2TWlXSlp0bTU4SlpHb2E5OGt5NS8rYWI0ZWNkSWhRQnVuVlhJdW4wNW5PZnZ1bTJMVS9Oc290c3RwOVVjNEZucjZFVVdoSmNXeDJyUjVxaS9WY2NBWjZJS0RrR3pucGMvR3hQSlMwcEQ2bmxoc253Y0prZDl6b043bUhPRTdmcUExUDNIWFVLYUNSc3JmVXdqS1A0ckI0Q215WlRCOW0vUTlVYVFlNTdjWnNqd3JKLzlhVVVyd2kxTWd1c1QySDNTd2E0NmxvM2ZoVXlyTHk0WW92TnNtbHhIZkR4ZkcrMWIzc0JKOFpKYU5Db0dVb0NTMjBRd2RHMU9KeHhDZVhSL3pnQktwK3lYZnpFZk42SU9zUXdFenE1dXNqOUpPZitYUit4dmNHNVBneEE5KyttOTh1Tm5oTnErdnhUajVQTDA3Wlo4bTVmNzdwVWNhYlpubURwa0VhU3gzMlFnOERDZVFTWmRzSXVpTmMwcGROZU1laFpSL01yb3lBNzZwRVIxdFhSMjYyU2I4c0VhY1VrRng1aUphWGtEbVB5Mkk0UkpNQzRuMlFWU2JXMjJhamFQeTNrTjE0K3dwbm5pbHNtZ1dwdElkamhCWGRNa21CQktuNVdLRjN5OEdsaTZwS1hxRWxvcEpGOUtMekVwc29UcEZDRy9oUGVETHBCd056V3pwb1lzdGEzYkxCdEpLQ1RCbHZ1NUhHMVlCTjM0TXhGTkYrMTZyNWJ3L052NytnL2NyNzB2N2N4a3dVZ01zWS9HT3M3Z2JQN3diUjZNVTBQemFCSnZNOFcrall3eDE2Y1paRVduTGQvNDhNOWswRzUxUmI5WE5mcVB5eWNuZ2xaaUNaTlBYb3VjdVYzWDM4bittcFpzUHdIbkFVUEZlNGpSQm9TNWdscTgrZmg2am42aXpHR1hSWWFHeGpzMWx4OEpQcjIyYnhadzdrL2dGdTk1V2V6MVpjVXdueitYWlJzNG1icjU0a2xTMnQ4bEVKdmhiMEgwVnkvV2xTT3dHekl6M0JXRXlkKzFuZTZZRGxabGdUVTdZNjFxUWJEMmVDOGdHK1NFL0U1bittaUdTUkJ3L08yTlFnaXVORmM0cmh2YVYrRXdTd1pINXR6a0JNMGF6SVFOb0N2eVR2Y2RRVHowd2pwQmZ4dDlxWGhRaXBQa1M5L1FrbHB1RWt6eDBPMmFUblJuMnZIazFzTEl2R1FsRXVOWXA3V0hMbzVjaUdUSXFZcitkcC92TUlTSzZITERyRnhrUlVmWFlTRUx2WElwT29XcVB5c1g3L1VMQS9tYWxBdlVHRDhDaXMybVM2a052amFtODdUYUJZSFhuRk93TU9uSFlybTJxYURiaFFYTk1YY1RaWWc0S2xhY0dGdTlIWUVjbW41d1ZyeGRTWjczZkN3Uzg1SVlXRklLaUVpZVNHSk5ydittaTZmNHdjbVpmZ3lzaEZUWnB2VlRJR3pOUDFIV1VaM2EzTHo5T2FlT25aeXQ1ZzFWei9RT0d5ai9QbWtseDY0SC9CSHBYeGlrZStjV3FSRTBGd1F4QjVubGRZclpyWVVobDZhSUJKOEVmbWZjV0ZRRGpBanFySjhqU3RaMVVlc2xJRnNzaWx0a3VtTHc3K3ZiVkpsV0VsNVh4a1M1d1FZdDFwZzZobHd1cjdJS1pseThhRGQyK2lKTW5vVmhGcHd4MzM4L1FFUEZtVldzSUhpb0IzSGw2a3Y5UmJzYnQ1T0RkVjVwSDRjbXhDZ1l4UTNtLzAzUVdxNGZCMWtSQXAyZ3F1OUI2ZVZ1SU5TNjFmUVo1WUhyQ21XOVh2aXo4R2tLcEhhRHhwNHYvUndUelJhMklDU1gzWFRhTFJwbHFxaFE1MzdWQmVwb1VsbmRNRlVrWUNSeVBHTjNuVVF4eEJHaE8zdGRrRGZxanVFdXpDNGtDam0wbmN4cEM1STFQRTNVZVlUT3RqTHp5S1dtMElWWFBtUyszOE1KbnRVMy9CK3ZRcEdta0lRMkErc3hoU3RTdkpaaE91S0IzR3ZMVDNOYlk2QkhNeGhYbVk4RFZhT1J1MHVMeUtOb1lDc2RUUVl0WW0zRGJqeEFQWXpsMlR6NzNUSm5odUlBQlQ1SGZ4N013QmxabnpVaS8xRmRvWnd3TC95VTAwRGNKd2lvZENTT1F6L0tqTE9WU3pVeVk3Qyt3c0ZsRVQ3NzFUeGdCNkc0NFNIamRRaitnVDNKeFJkUkpaUUc3T1JReWFjS1FpRkZRZmtBTFBHSDAyRFZROGNIZGY5S0M0aDUyN1FuTDVUbFFxTzJHTU50WEdTcDdXR2NSY3FQa3VSSmRWT0x6QThnajF6dzgvMnAxdEhheVRVVkwvWkJCYXhham9vRS9qc0ptTnFxajVZVUM3R3Y3cVRRVDFiYU5rekt2YTZLeGxLcFZnaXdJaUJGMUVRUmxZbk5hb0k3QzZ1cUlieDl5cXRHT2h3UmxVRFY5dHlNVURiRjhOZ1hnRmQ4UTgycnhPeFVCeGk2aVV3RWdyellzOGlxMzFlS2NzMlhHZkF6WUc0eVdoNWF4NFVCeGVvNlN1M2VWb2daTlVwekxmTEhaS211RFRqTWxRU29tcFhkbVc4RDQvbjZpcHJ2YVlKcTZhZ3RRUDdIcENvd0xkUERzeU5NdnZ0bkpaOFNsc2pTdno3cmFrbHRIZFJmZFMvNkM4dGoyOGNEOVBqNFBkalloZzZMUVBnbkJLblZ3YTRuSFYyODlsUXlLbk1QenlYaW05bjRjM2NvOW1mOWNsdnB3amNrT1dqekhSZjNwWjhUWDBNSE1NSzNRNGpvT05Sai9XaytYeGZEWlE3SWpXcEQ5SUVKVVV0ME04UkMvZUQ5VlFqRVNKN0xyV285R2VKSUFnU2VYWHVDK0hQb213UHFWTEZhM0duT1E0akNpYWx1MndsY2t3MUZmWkFRWWJqMEpvVTJKK1N4c1g0ZVNRU2V4eCt1MGRoRjNaR0QxZnZ6bk5wSVNSMitTTlRWVjcrWmRvV1BydnZ5dWlHV0laVlBXRHljSldjK1FuUnI4eEtZQkxYZGxwR1FGUUF5bkplK2pDc2xrbzhnZEo0UWl2L2lsR1NVOE9wNXJDNm5VN1djckc0UHZxb05NQ0JHdnNBWnYreDViZURvVCtPTTgzMFpndHBpZjNQUUU5UmVSOVlxOEcrdDhoanVGWWJQUTJUckZFS3JzZGhCVjNOSFREMSs3b1dLZVdTL1lrL05qaC8zaTNkTTdCaEFFWFBQMkRIN2JvWFo3TlgyNWZKQVZYVzh5aWMvVi9wRFcrb2QyWEYvSXZ1R1ZIWisyeHVZMitFbXQwbnNVVlhKSVZLSnhGN2xNY2dsQlFHSk9LZzZMS010OUZkbzQrdVpjVGlCblJTR0RFWS9MemJwUFlnVkpZVTJmejJTN0xGUDVEcTlvWHE3QkdsaXB0cWhwZ25mMmxnTktybTZKSGplSE92SXZKOWI1a29DbC92SlJ3elRSNWJwM0hRNTBkcFU5QmdMZ3NmUjlCMm5aUDYwZmhFaWVGQlBHaGVYaEZGZWRXOHR2eldIdGJXME9tQm5vQlkyWXNzYjZqN2JTSFRoU1ltdVdKaEduVkNDbXVySkNhMmpUQXAxdjZwTHBHZytjSDdmQ3Q4eWovblBjMkVjemdFQUZJdGpOYTlnNzMwMVhCRHJhNnBhVVduZW5NMzRZZnFyYWdxOW5seCtpSlluZFZ3VEVHbkR2OVJrU2JGdkxyejdKOU1tYXJmT2ZBT0lmcitEQlUzSXpiQXU2K1dmVHZTTGFYdjcrSmplNWZobzFvdkNNZXBoaWdURjQxODM4Qmwvd1FOQ3pvRm1VSjJPc2FZMUJsSjdPT0RCTTA1eUpGdHJHdjFQUDNZWkhicHlIclloMjFNQ0tBUmw3c0daWllmcEdBbU9Ga3BjODRJWkk1UmxnR05KM3U0N0loclh5Qkh1b3FneTRMaWJTaHEvOXJzVkh6SnpCQ2dMZTZPWC9SZFo5WlJNbzZFb3hPVHlIK2hJUWgvUDJ6NDAvS2dZOURuS0pKV1dDM0ZsTUFkeE1JWGhjTEYzYWtYVDVzaUxxbEhTaTdVN1BnUkdsQkZ6dlM0RjVaYWZwNkNNajhXWWw4ZmlKVThjMU45TytyS0VqQWpjY1JCZ3V6amszY000djJLZ3JQcENaNk9Xa1JMM0tUc2I5cDNMQk85TjI4RlJsWjlCNzZ2aXlFbVBHcEEyQkNrUWtVckdwRzQ3RWtHV252SjVJSHBvWjYyV0toRVpRQmh0MXhMdHV2S09FdE11RG9CL1pQM0MvbU14TWcvNUIzWE5ETjl1aUZERmkxZ3hiWE9QaVIxU0xyZXVjb2N2b3dFTDAwV2F3dzE5eG5NcWg3SG1jZVFPck9jdHhyYXJrQ0NhcHlOUkRUbTc3dTJLaW1DRWlGUHI1MDB1VHdCdzZmdVExZUs4U1dySFJMdnMxVVVaMVpyZDJFT3VscFJXOWZocER6R2RiaHNZNk9JUTVvVnl6TFNRaXByWFEyUlltVlQzK0dWS0ZDOWhob0tPNXNrczlERngyc0VNeFY4ekdPYzlXa3JHbVJLRnlwZTY4SkxLR1BreDdRZ1YrTFUvQ3R0OWl1enZ0YzE4WlJHSWgxT1VtNTNCdlM1bWczZm9hRXNFeTl3K1MxZ0NqVThLSE15akZwSmYxSnBNam5EbzhYc2J5bjNGSjFuWHlpVGhONTVUa0pMWmpaby90WEdGRWU3TWtqTnNsa1JMUVl6SVYxZWlTOWJIMDVMRENZU0hYOXZiNzN2ZVIzcVVLWTBkalJEUFhmbG1RRlQ5dzVSWU5oYzZ6S2dOUlFWeDY1emJTbHd4dzhUTEUzK3dZZTBVb2tldlNvZ3YyeFRBN25EbXVqS3d5ZWhBV2RXK2owWUltVUl3SGt1enY4Z29KRjNhUStQdzR4eFVYakYyM1RHZndHSzZha09xZEhFOEdBcEFISTN3WFpGQThxQ01LZ09uK0lZS2xzSmNIK0JrZWVGekdZb3JLelFwZEdKS1JqbGcrSGd1VHZMVmVHSXoxVUtpUXNlNEVnTFIyRU53YUh6bzBPdFIxalRvdVJvVXRLaUlCRUhuUTdxTWF2RjZob0RFejBEUDdKbnFXK0dSY3VqN2VpTFBZck5sVnV3dXdmdEdJenUvOWt3SWNmcmhaREFXUEZ6d0FMUTRNVFpSOUk5VmhQSFJ1bWlzTlgxS00wdzdCZ2IydWtUT09hUW9qbUJoS28rRStmYzkvVWZJWG5nWHhZK1hIbW45OVIvYmI1cUM2MXQrV1BGbU1KNnQwY083SkZSVDVURWZJV1E1c2w5U1hNMnJ0MGxpT3g5UVFkNEozZzZzMEN0eW5PMmMvTzZ0bXBiakhaL080R3VhZXB5SmZlWlBKL3JLSnY1Zis1VXNVb1FUS01YNVM5MGExdlhxNkFUM3llSlcxRTJLbXU1eHdEaWx0bWEvMWM2b1JtRDlWenBLVVVRazBDcFc5bFVvQ1BXRk9uSzU1RnBxLzJZaVR0RGd4V3c4cFlNb29pOXJyTWsvZ1ZhOXhxVForQVpWV3lFV1FjSmFKRUVtN2dBSjdIcFBOU25EVXpqRTZrUGNEVlNvWDExTUdBY2pLU0YwUVcwTU9pbDMrRGJuV1k2d1BNbGxUL0JybDZBMmhYakVuWW42OWtiV2ZZY0lIam0yOVl5T2V1VW5VR3ArTVprb2JacXlOWGdJVTdxMEY0VDVtb1JYcUp6QWVnN3RkVDN6QXgveGsweDhTWmtoSnM4Q0k2cmpvVDEzYW1SV3F6NEJTMXNjM3I4Z21pUUFIT1dyQU1iZmZQV3FwZ0NJWHhrUXRMTHFXMFZ2S20vMVl2M1BCYXJXUHd4U2kzZ2xjUytISGNzVkFtazIrT0NFVEhYaUsvcERqMmZ6L0RPcjhGUm1nT0wraVBlRkhEL2RrSkgvM3hxV29kRU4zd3YyNjhYZEhWaDlDYitEUlBrd1pUeTREVGpJKzRKQ1dMYTNPQ2lOTGNmOFc1aTVQM2ltWWdDVHJURU5URmFvY095MHR2ckN2TmhidzhiVHkveWJjY0RsZW5xU3JMdHhUTWtMcC9FUFJHS2g5QlFkSnRtYUNhbDBuZFUvenFQZUNGQ1FiS3ZObGJFQ0hmRjFJd0FlcmRxL0J6Uk5SYUQzaXFLdTByTVd4ZkgrcGEydEZoeU1RY0NOOVVweStIWVFUbHBOZ2dkZEpYQTNrK0p3Q3VCS0lWS3ppOFNvODQ3STVRVDVuektIMm9naGd2QUErQkVsQm1qUkxyeHk1QjVHMkllSXJadTJSbmZKOVFNZHBBb0ZxaVpwQ3p5aWZZaGFuRjdiRVllOXhmZGxmSTR1VE9SeXd1cVRiTGgrM2VNTFdycmRmeDdaUlBRMVhINjFCTE5vZ21hNlpra01OME1hK3JLUDlrM0NEcnBkcVFOako0TCt1UXQ3eXM1ZEFabDBkekoySEM3R0RQUWhsUzEwOFVmNDJpRDJ5WVBzVXY2Z2dPQ0pVMFNURkNkdVlvMGVHeDJ1cjZCT3Q4c0V6ZlBqMFZGUHF4RG1Sci9pMWRzYTlIeUVQbEkzb1dRRUc3ZDNkbVRTWUZtMW43aXNGbDhqOHhzMWRrQTQ4ZlFGekR0cDQ5TzJUWWVBcDI1UGZoUDRFQkM0STVHdFFiSkluWThDYzRyQ1RvT1hvL0RZazQ2R0prbkE0eG14WGFWSk5KRnhpd0JGdUJ6aHFVaDVMWkc3S0oxa0sxZCtHSGRXcnlDL0h4Y01SQkdKdGtjL2tWVFZrLzBZb0s3a0lydUlLekxxZ1R3NTVoT2NoNlpTOGpHdzlUOWtKbWVZbC9ITHowYkQ4TVBtbk0zT1pQTytUdmhYazM3NjJFL0JUTFZQaERQN0VIbmFIVU9MclJHZHdsVVhkV0VwMHNKdWRud1RzeVIvTnE3SHUrUTlST3B1V29UZWI5OGtWR1hSdVRwU0FNb29saWF1dENZYlhFeGM5ejM4NmNJNGVvVVlTWDY1TC94Znpjemt4dFJvM1VYRi9PS1czMjRORzExd2lDWFRxcjRtdmlVNDh0TlhFWTNsSGx6YnBSckN0TzhqYmwxMDJwSmFTY3l2ZFRGSEhCZGIxSXMzVVdIU3lqUVRoSXp5YlkrVGlUdmNXaDg5ZGxUV2dDZTNYR056UCtrb2ZJb0Y2Qk1qT0dJL3g0dWswMUhhaDZJdE41OUhJTUFNclN0MWY0ektuTEw3YzBVYURDNEwzaDJ0WnJhMXEvTmVZRUdXbE1QU3F4K1ZSMHB4RlN0THlZdlhtMDhzM3dadzFWaitScC9pL2FYZUVTU3ZzZjBOVDg2cnV4d1g2a2h4TTcvVnhxR1EzbFJPL1VETDJwUVM0V1RUdG9Cd05ralowTFJ4WmhndkpRcnFEVFlRS0pZU0NMZmpVY0RvRGRyRlIvS0o1RG0rdWE2a2RsRkVCMTg3a0dYMnVFTVRVU3MyWWV2YUdkQkdaNU1DRWZBQXUxc1Q3bjBCNDRLWmFXWDlDWEE0blZnOHRqSlZuNktzZGFtMFM2NjJTSnIzTmhZdk11aDdyK3lwWVhUaGFQa1FROHR3MW5EWTNJVWJkMHFoSWE1UFEvU1R0M3AxVlBaZCs1NFlPZUhOcVFIR0plM0pPbmM3Tnp3dms3NzN1YkRHWS9oWlNTRUIxQzFkUHZJZTB6RjlFR2p2STA5VGhZcVZ5SG5BNTNqVitNcnNQVWhnU0tLVnlPSWluYldVaElwTU1Felh2MlFqUFAyZ1lQd0dkWDBvRXVvN0JmazBxSmNlcU04MGpGY1dFNEhScmtJNmk3d3pQMVBaVERMK295dEVUaTNVV25WMG5HOU1SakFVcGlRaFJuY21xUzBYeDhWL0VGaE5mdGxJRmNaRkZVZVBJeXZLa2lzNS81QTRSWUdod1RrWGtrd3VtMi9aVjRneFRUTEJHdVBPdkE2ZTJYNzVwZGR4RVZsaW03c0V3M3oxY0EwZEk0aDhYTUhlTTZsUXZkeHpsOEtSTVFmUEo2bHRXUjlLSlViWkpjcWR6NzFxL0pXVUVoVytMWm9lMFQ2bTcyWjZTd0g2Nkl4SDJ0YUZ1YjBNTzFqYlYyZFlCaUphbERIcTVVYjdJZXJPOW04Nm5laldwK2ppSFJNb256ZmFiekppRmRJbU9sNXE1WHk3d1FVeDA3ZkFpQkJMZEdzanBYZlFKcDdpYWxGek5kYzdDUDJYWFd5WnVxUWpvbzh4RU9wUlUydGdwRzJwbUJqVkhzZFIwVEpuYlhmTFFHSk1VSi9idDYweCs0cG5VbnYwTnRqMVRaZWl5V1JoaTVmWmxBUXRLemRFUjBDNWVTcXNTTHd3YkplS3N2KzVTNzRnS1dRVlFmU2YvSnk2Z0p2bDJmQStYeDlwNGJjM3d1Y0dYVG83ZXIvODkzeGF6QUpFKzJZMUJlS1VlQzMwMFNzZXd4RXgzTlR4YW9CaG95UGJuR1ozai8zWjNnNUpiYmdsYk5ZR1J1elFQWGV4L2tlYjB5d2ZBYzFYY3UzNS9pNVV6NXB4S0lJZW1yK0R6SHVKREdBT0VOdUlVUENtSmR5S2xhb3BCQUxPemxZMjJlbEk2UEZQM3hiaGdhRzd2enFFb2tHbVppVnB6QTVjdjhINkRwdExNaTc0Slg5emZFRm5tRFA5MTRSaFJ5ckx6cTlocEM4WWVkSEVmdWs3VUNLVG8wZWdpUGFuMFMzcjNZRkJhdDRBM0RaKzZtdzRsc2RzR3FpWWhGTHVNaSswTFlRY3E5YlhRcVlpL1RzRk1HaWJoS3BkZVpMWW1VNVFpR1M1QzVWSU4wUVNwMGtuNS9nYWpBSjRxWUZKNnNRTENWVUd2ZlJCUmFyRVMwVFlxQU1xNlI1ZXFZKzYyRi9icXpab1BIdmZzRGEzQ1ZmZFhVcmlzZ3JsbEY3cGZzZC9EVTB1NThienFjR3EweWRGaGZZaWhHZ3ZCaUlmRHJzSEdkekU5UkJGSWplQ0l0d291TU1GclF2NVZNNlpIKzMrMm5tNno2dGRCZUtzTmh0YUpqU1hpbi9IUUoyOVJaSk1uOWNqWEo3YU83N0k1UUZTOEZOeHI5RmNIV0lhR0hsdDRaQmJtcDRSRGpyVFcvejRaRkx4OEp5S2lsU3RxTVNsMG5TMUhSVldKaU5ITVh3eDRVVkhuWk1IOTRHQXVEaHc5emV6UFhUQ05FRnhJSE0xSlJyTE0xWHlvaWxSN1YwS1JxcGNJZWgyaDVOaGpka0RObzl3bkVBclVTSTJVeXpsRHlVN3RWVGRkVHk1TnhuV2UzeEtuQ3NyNUhkRzI1a3NLVTBvRUFWeHNaVVNCS29TRU5TbUs5K011UC9zdXFtSUkrVkxoNmRWTERtNSsveWMwR00wcSs4eWZJTmFXRlNtRHpFZ3JmV2RZNzFMYjFjbXlUZ2UxUHAvL0hlMmFmdWlSbHhrSGd1MWp0aEp5bHBUeFJlQkxBYkI1VldLbnZnMmVZN3libXhRYW8vV094bWpqTGhWb2F2SlgvUWErbEl6K0pSQVVVbkJqTTJ1UFRyNlRCeWZvcCt6T1dKWWJQSmRYUkQxUHhhNzVCRnhDRDhPSDliS2JYT0I3SXBqVnVMSHhQd1NOVkFzR2JtanZJT1I0N3ZWblZpTllhdnFsTzNJSHFSUnFSaGYvSWdWUi9ISlVNRW01UTkyekZ5YVlvcFE0alpNSFBvK2QyTjdLdENTcHBXelVWRk5OVXZiL0x0azNVbVBreGt0OGRJSkZyNGJWclpVTGRDNTYvQWJLSUNRQ3FLUGhDVy9GSXRWUCtYTk1RdU1wbXpDc2ZTdzUrdVZNVVpFQTUxNWVSWHhtN1dFZVNxNnZDOTc4clpwM0lZVGtmREVKR0dYY3g4b3h4MWJwVTJPbTRYYk5qYysrZFA3bm1TcFdobEhZbzJvT3pQRmVlT0w0cTAveHEvWVBaU2pFK0grRzZMUUZlaDdVMTllR2ZzWUxWN0JkUjY2RktTeVBIRW5rZCt6TmwzcXBnZmxRMHd6N0o0UmNkVTNZcDQ5NDVCL0JlU3dPaTZlK0kvWDM2aUs2bTVGUjdIMDUwRDN3a0RGNCt2SldJVnhYbmw5RW9wYzhETEdyZHMydDI0Mm5ySkJ5Y3VJSjBCcGFmVUgyYjZOMlBHZGJMdzFYVkZzUk5jbkZISXQybzdjdWc2enduZlI2UUFKekFFaFcrbnd2VmhhNk1zSHl2ZVBhMmQ2dkljdU04eFZ2WisvVzl0aUN2NzZtY3dnZTJhRkx3TnBIVnp4ZlpyN3ZHVlc3ZGFZMUt1SHZ4MExDeGVwK0laNi95MnpkcFo5c0RVL0dHbWRYSDdTNU9xckFlOFdpczRNYjFMMkpsaU03YTVqSnF6MlUvc1RiMHl5eGl4aHZVUlRtZnhETWNHcFNsTS95blNVcXNWZ0JSM0xRUFVhNUZBZG5YdDVIZkJTdUJxSUp5Ti9Nb0JxMnM5dFdaYllHMzdXR0xKODBMczRWVm44VVIrQTh2c1ZtMmwvazRZbXZHdHYvRllqYkNHMmMvcStlZ0JTcUhNUTBuV2JCZmliWTlRK1VsQU1YYTMvZVBJSE5jMFk0SUt2RDRJNnR4b1p0dXFra0cvOHBvMUFIZC9aVlVydFcwOUZGVEs4Wk1MdXdKSXZTZDZkalRXYzhEZ3dkb241THM0b2E3c3ZOTWFNZVhQRURUYU1Ba0s0dnNERHlxbmEzMzF5QTJoTVhUdTRaVG9PNHpYdkdyYSt1VXR1cHhmM1lJNGtHV29sKytkRnhmeEJvRjN3cU5HNERkVlM1NnRYbGxOcVlxeXZJVUxaQWFwVkFHMHFSd1B3blcrdmxhQlJqNkRLWHN2eVh3bDNuRklZYjNDMnBCeDRyNllJdWNlSUs3RzgrdXI1dlh6QlFpcTBmblRFMDRDT0pDREN0THc5UkFtdVdhZDU5dUN0QkFFWXVRZ3hndy91TXpFNS80WmVvTDdvOVIrcTkxbEpadVNmRTY0bUVzQTllNzg4WCt3ODdhZDlCWm1tZitTWFd5UVVjRHZYT2g0QW1GTkRPcWdEeEIxY0VUMXJXU0xOQUwwbHVXa0l2NC9jUDcycVpWVFZySUhlK1VSUVJsZk05cXFrbTA2cy9QcmlKZmU3dUdDUS83MkpWazdWSkVaRWlLdnp6SDdDZSthaFdVc3ZJb0FVUzZpUVBGdDJTTWE4cE1kT2MzU2FpeTI3akNOUDRCQVVLaTMvU1h1V3RocjhQMURGbFJQN09HM0FvU1ZEcXlITVZGNGtOVUhTbGJaU3N5KzAzR1BDTTZNMmZ5bUZqZk1sR3pjRXowdW00Sjk4M3dtVktzRE1DbS9EVWl1SkFybmdobVRrbjB1dThmTno0a0JWbFAyRTJCdStpRi9VNUpsdVBSN2hFaHp2Wk4xMzNhUmhMaHZtbnJUcUxUcGljYWR6eHlsUzltM09uWjRTSk1pcFR6SmY0bmJIK0RkdWoxTHA0eEswMEcvTW9iUjBDUm45Vmx0U3d6L0dXaWNwTGdmMWNBbmE0b09kSkR0WHlwbFFxWURkRGhBcWVLNlBwTmhlT2FjYmdPblA4QUl3QzBIVVdpK1ZVUDFOSGt2azdFdWtmNVV0d2FBZGVYWG9CV3I1MVUrU3VQWHNIYVhrNzlFN3ZhK2psbXUrSDV6SHRDNW1vRFB4Tm9HMWFuQVpHRFNWVm95ZGJFSXZGcEJwMTBhUnU3SFlzTTVnY1RRcng3eUtrL1FnNUlWZmgxcXl6NFJPMnlJR2FONStoTDFsTkplcmhKOVRQTmlsR0FRVTBYM2hjdFlFenExaXlsbFArOEZDbXRSaEdqQngvWlZ2V0t2NDdLcVVCUGNYQ1pFU0dObWN5VHBrWlB3SWdrTWVFdmVGN29hUFFPbVZ3OVFObW1mYTN0U0tsZ3JVQkRQcFVDTUNWYVA4amRlQ0ZhWFhiSTd2RWJJUnZhc2ZVTjNFY1RsV3k5c3d4eEdMM25vZjUvRjgzbWN4L3I5OXM5SUV3VEF5bjNGMWdJY1pyeHFSYkY4MVRTQ1NQT1ZPaTRPTjF5Z1RucG1lRVllQ1p6amZyUkN5WWNNVUF1V3haV3FQcVNRbVlEYndXY1NIUzFpM3ZQNHN6dGMyNS95aUIwMGdlSmtUcno5Um9jTW5IQzRYVmNhN0l2ZDF2WW9VaTBwS2Z3a1c5RUhmaFpYb3JUb2hYQnhPUitSMjh3VnRDL2J3Q2VMa21jQTNHbmlpRXRSL1lZaUpoVTdEZDMxOEJTdW8rdXdFSGd3dnIxOHRyN0c5SVlwbjRlREpsOG1CelpuQm1zTzNJR1NVZjJUWG5ET1o1MWdqT24vcTZmS2tTdCtmbTk2TVZIaDlmZENCUXloOG42dVMrdGFXdlpsMnBodWxHSUg3M01WamhVejE5YWM3Rllkd2RKVDJOeTFBQVIzb1U1U04yVnJ6Snl2bjh2c1FkVGx6RHFBK0JFQzcxTEpSQk04Y0NvR3JoY1lOR21tN2FNRlMzYU1SdlgrTDFZaHNqRDhBYTFtalJzUFM5VTlvei94a3BtakNLL3k2QTFBcDZTcFdiZVpnTlBzcWxtcG1KNzMzd1RzSTJaR0NmeEVicjFNcS9vRWRPbWhTVC9oTFdCb1NsVkUrbmhyWUhMV0syWEMxQ3hnd25tbDF6b3EwekU0d1ZPZnRiejl5R0VZZDRvWHFzcmZxQzU4MU5JdGZuNVNzRnJUNjJ0ZDlLMktLbGpQb0JpUXJlSFgweTM2dU1IdU12N3U4Vk9uaUFOMXBpS1E2STZYcGgxUHFqTC96aE0rWm1BMC9HNTZmR2RqS1ZKQ25JaC9Nalh5Nys2bE9hZEp4cDRLcGxhNnRURU1WemU3SnV3Mk1GeExwTk1XSk1KV3BZaCtqQldVSUp4MkRTZUpFaDBjTWtiY1FvRE83UndTbXg0MjBIOE5DSmxUSG53NmVIUkdZakg1RExaMlJPK1JyUFoxYzV3MGIzbTN6V3RDSU1wR0cvNEIzVUV4QVplZlVHN0tVYThxWW1OL2hDRWN2ZDd3dTBOM1dZMG1WWGI2blVYUWIvSytrOWVLSFFSR2YwSnR2VXorL2g0dUVaRUJyYzFHeExqemg2YklhcFpGaTFVbklkYnZ3eGxESEtiS2czcGVVcE9TWmpjdWFZWlB5cG9QOGkvdTJyWFhrVEs5dVdwd3FmRlBaTXA0Tm13ZDhrT01aMTd5MUZvN0FQcVZFbU9KNGMxUm1jcGF4cjd1QnU4a1BYdVpOVkM4Y0Y3TjR4MWVhZlZNVE5sdjU0a084dkk2dis3NHRvdTUxbjNtR1NZWFBvZnRZczc3OXVTZlgvY0pxRFRaUk9tMWFFV0Q0V2IxY1ZCa3hhN0g1TGx5Z3Rhc0dXS2pKR29WWHJsVHRiM085RGJERFFrblcyQVZNSWgrWXVvbFhNcHlxSit4dVJOVWRXZ2lVNERzeW10d1dOaFIxVXB6Yy9WQ29wc0NvcHRJV0hYcSthdkl5NHh1T2R2ck1hc2t1dEVCRytlMmVYTW1TU1p1OWZwYjlDT2RkRTdXK3M2bTh3b0ZwaGNUT0JqYmxQZ3BZSjVycFAycFc2V1ZNa1pCRXhXaVpibWRxcmlkenMzdkFObWxxTGVQUGRqRnJvMm9QaWRCODVsa1pxK1Evc0FIWVBkVmszQnM2bjFHTFozRkFKYjdnL0s0T2EvVjhYRTlwTVRway9JVmFyS2dPYlJkWWZseU95TS95a0dCYWRubjUyUG90MTVqSlJIUm9WYkhPZEloK2dacUJXN2QrYXBNcUJTZXl3RGlraWsxZFBSaEhqTnRPb21vTHdxSGM0d2tRNlFDeUJiSkh1L0YvcXc0a0Q1NHZ4SUZBM1NyWWZMZkJoTEVrMzdFTDczQTVjeU9kdDhDQ2dZeG5RL3hBSXYvR2FEcnIza2xoUzNVWDRQNGxaOVNWeGNGWW1VVGpRaWh1QUxLc3lhcytKSTlkdW9rNFNGWDZPekxKc21HbDZBMU4zek40aEFsZXk4cVlNSGFCZHpLb1BZeFFPSGI1NHNnZGs4c2pTRzdzblA4a0NVTm1sNjFPdVE2ZkJUTmFOOTlkMVM0Z0prRVdpWEFoTWxTRUNtWnV5MzJGVWxrRmNwNDhCZTdQK2pZbTRkUmNwU25YdG9sUEQ4NWRvUTZNL2t4MGJzREUwRTdkWTJLdmhWZjZDM2NiMXloZWlMeHN4SG1RV1d3Uk10T0xwNkNZS2M5a0szenE5c1hyMG16SExxSnBFczRobEpqcXFrS0kwczA2dCtIaTV3K1RtMmY5b200bDJ0NGlESGNXci9tcVRZVjc5VEJndGcxMUFBaUloVHYwZGdraHA3SHZMaUl6M3U3MDZBOC9xdjhNV3NXMEFwcjVKMnBtK1VvcEFzUm5Ga1dtK0dWUWRRSHp2dXJuYTBRbnNmbEgvVXo2dUxWV2Fmb01IRkUwT21BQ2I5QStvWStaMWdsQWFHZHR2TDFDUzNUL2xoZnZPSWNvdGEwTy8wZlB2TFVYbVNMVUdzKzNZa3gyb1FZUTdQSmFyZUFFeVhOUUYzVm1XV01pdTZ3VFNBanNtclR2NWxTdDRLSlpabFlUamlVNWZRazB6aGpYUHV2Q0Z6UlA4SDBMMm9CRlh0MkJFYVc1TDE1RW4yTWFmaGxodjFPaEthQzJERk1yaDNiLzFVMVlQL3RuWUtRWG1hNVllcDlGQ3BJT2p3emsxOTh6Wk1TK2RIT0lMdHA0RVo0ekkyL0czelUxUHhkbHhlTTlaL0tMT0U5SEZRaFQxUkQ4aVc3dXZySUVRSzlyMVhmc2hvL1JTY0k0cGxKWnZPSEhDdXc4dFB0ODJPZjViTU83Q0VkbEcvTjVQM0RyOU44VHBCa0R5dEJOcEg3NTZlSDB0QVprblhuL280QW43c3lQQk1ITngydURKSHBFanlhVnVHMUlIdmNiRkdPS0F2UzNyVXdpUmtpMFZSZU1aOEhyVFlQQ3pyRW9HejlpUGp0T1J1Nm5tRVJQeExmZkovUW4waU14MkNlb2V3VnZnRC9kaUtXZ3RaUVdYakFPRGplaFVpWExmaHphZ2c5Vko1VnNLNDIrNVZiRXYwcTN3RUluZlZ3bWl3ZWVRelpTUUwrallGQ0ladTBSUlJ6SFBJcUdQdEliODg0WHJzRUttdWJoNFFzL1dzamhDbDNkUDRGdzk2U01TRVZBanBtMnUrK2lhcmdvZm1LNVB2aTV1Y1llWHpwN1p0cUFaVW4wVHkrZmsyY2hwb2lsaEdtMWRKYkcrdVNYVVZJSTRRQytIb3RCNFRaWHdKSzVpVklnV0ZBOVFYRFdTRDIrSDdGd2I5NWFnSzJ1ZW1vMEtxaEV6SllWdjhnYkRsSC93MURCYkZ1Z2Zod24vZ2RnMnZBUndRUUNUMDFPcThPWlpHeG0rWWhiMHFJQVczUWJ6UUVENThPRVZNeXE0NmRJQ1FxVm8vejNiK1NnKzQzaEdUZnBIWUJhWHY3YU01dWZvenowL2N3WEEzdTRnRWV3bVAzdGhZU2ppVytoQy9lR1Bia0dSdEdRVkhydE1JN2dkbXlCR2J3UVppbXN2R2R6VUpuekdtNTk1SW5DaXhiMWtvRnRUeDhDeXZ2V0dhY211MjBUYUVDbXV2a2FTRXRPUytwTFdDRjh2Sk55Wk9TOGV5SDA2S0hlazhzUTRXQW1rTGNCTFBaTUVteHJ5OWFlRmRSaVgySjRpbEYrOExRUGhPdTc5S2I0QWlNT0dlQ1EwR2Q3aGM4RHdNV004SkNuZm1wSzZuNEJSTnJOM21IUC9aNGVJbUlsK1B4QVErUm5YWERNeExiUm1TcDVXcHUxSURBQlBDWnhmMVorTHhQOHBkQ2swQTJZM3lWbVYyNWlyMDFwcWNhNXVEVlpiUTdKNHdSMVdLOHo0UmFPeVg5UHBnQkNmdGVPSjkxZS9TK3VzaDFtbFdXL09XNmhIUEFXZVg4elc4THkzdTN3bW1ubGg5MExPZUM1MCtlQ0NPU1JjMTk5T3NWblpMQ3RIVWpYOGFyNWdlRDdYcWJMVXVNWGM4c0ZlYk9GOXR4WUxPQytVMVMwUlEyd21JdStJL0VNc0ZSOGdjNi9tQXNVMDR3SU00dFgrM1A0NUpFZE1ib2J6c0dXK2lWNlZNeklaTUZ0OGcxNzlUcGkrSU94RzZoSTBKV2pUOFRvMjRBOTlCMHZudzVnNStqM1EyWmx1TXFqMzNVd1hONnFOZW1zbEFlajhKUTJnaWEyM3FxaGcrSDduNU90ZjcycCtKYXJmdk9YaWtaMXJxN0E0SzlJRTBNcFNOVmE4WmlpNkxWL1VrOGVHYzdYQUtEcmNNRVhTOEhuZjlvZzJFNWprOUcrQ1ZtN09oc2tEQWN4OE1Uakt2bDZMeUEwYzV1VVNORDZNUlJTOE91dmcxSzZsZmVuL2VBYlVlQ2ZtTnJNbUtjc2hURG9QK1ZadTVwc3VKUTR2eE5xMmRnSnFtSlZHVHA0Mjh2NVRYYlZRcGw2TEJycThvbXh5cmg3RGRxdlkzZEtSNWxMSnY0c2plU1FCQUMrTkMzVUZDVnNQZFJwZThIT0JIajNVaGFaZXRscndYU0o4ODBpZW1OazRaVVlCNU95NzkveXlQRFlVdVpuTm5mNmtBS0V3bTFvUkZXZzdWTkdabTJTcXg2V2kvek9NbHVudFprT2x1ZTRtMjlYd3FoM2N3UVFMQnByTEw4VjNPTGpOaVVRcFpGcWw2aUxPQ2JEOGxyNUxhMVBVL0Z0Tkl3clZHaUJETnB2bGFVekl1UnhsWG5GNEJTVG1DUUVqNG8yelRwVTlkUnJ5cFR3cmxITlRxRUhMU0RqdEdadmlHWklPV2RqS1pGUTJTMGpRcjB5RjcxKzA2cmJKT1UwYldrV29Ub0F4MGxqS0dNc3VzNUY0RWx3OUV0TnRZNXZPVzN2TUFyamUvdWlaTDRobkFYT3JabHVsVHBTYmtDdUpMZ0VXUUV0dHNTYlNLRTVsaHZmK1ZoczZML3FRZ0xzTFpNNVIxa1ZacTdaZFFqYkhwUEFWNFV1emdkVExteHlPdnFvVHlDeFJvNUM2VWVsbTRxWXJ4anZtS1hyamFmeEdyZjdFbFNLelBBcmJuM2I2L0pha3dPdXAwT3hQdWZMRm44NkJxODkwUE5Sb0xZb25WVDVIZGd0YzMxTFZiQjRtak5DcTQvMWpETE9Ib0pjdHl5a2N5R3YrMEtzbmRTZ1pkVW15cVV6REJMbCs2Z0MwUU43UTI0c01PSnk5SU9DV2g3Yi9WazA4MWFhc1dVS1RRaVNqYzdpUTBETTJId3pyOUVKc0VYUC9hbDVZT0hIbjBIYlBUaU9JcFh3TnoyVCtNMldGdkc0UEpGTC9YWjN3SDJLdUs4a01zRnRvSzFxYkpBaFRZbmJibllZRFZUdGl3d1Q5RHZXWG4vMEtPcit4aTZwOCtVTFh4aUJWWGx6TGpOL3lkcHRoamRNUmpxd21ZdnV6UWFKTWs1TXJqY2tCQnpvdHcySmEvTnNUYml5L0JON21UZE40c0gzaWptRzZ4Y2dxRHNNdDZNSVpjVDJrU0NYVnlxUWZiUkVKYnFjSzV4dUJ6Ykw3QzFqUUUxRDZKbklYaGt0SzJ1ajlaSXRNUDFhRlR3YktrclZ2eGhxUkp5TVRwOHQyT21DTDRLTmY0R08zajFYV1l3RHdHNFpzb0wwMmpNOGU2RVBRaVZ3U0UrSkpRcXJDaHZLUzZGbEVzYi9QUVo0SnFnOWE3TmczUVB0eTZjVFllbm90RGV4KzJ6cG1ON0g5VDhSYnMzeTF0MllOVXhqZWwrOVIzRVVlUk4yMG5XeGx1MkJYOTgvSWhoSEhZa3grMUJFOUVncWJHYXZlb3BKUjRGQUdEWitaY2wvUC85a0FBUUFhQUVBQUFUQUFRQUFQQVFNd0FnQUFBQUFBN2dGbFFBQUNBQWtDQVFFS0FnQURBQmxVYUdseklHbHpJRzltSUVacGJtZGxjaUFvTXlrPTwvQkRCPgogICAgPC9CSVI-CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24-CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I-MTwvTWlub3I-CiAgICAgICAgPC9DQkVGRlZlcnNpb24-CiAgICAgICAgPEJJUkluZm8-CiAgICAgICAgICAgIDxJbnRlZ3JpdHk-ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8-CiAgICAgICAgPEJEQkluZm8-CiAgICAgICAgICAgIDxGb3JtYXQ-CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24-CiAgICAgICAgICAgICAgICA8VHlwZT43PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MVo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU-RmluZ2VyPC9UeXBlPgogICAgICAgICAgICA8U3VidHlwZT5SaWdodCBMaXR0bGVGaW5nZXI8L1N1YnR5cGU-CiAgICAgICAgICAgIDxMZXZlbD5SYXc8L0xldmVsPgogICAgICAgICAgICA8UHVycG9zZT5FbnJvbGw8L1B1cnBvc2U-CiAgICAgICAgICAgIDxRdWFsaXR5PgogICAgICAgICAgICAgICAgPEFsZ29yaXRobT4KICAgICAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPkhNQUM8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5TSEEtMjU2PC9UeXBlPgogICAgICAgICAgICAgICAgPC9BbGdvcml0aG0-CiAgICAgICAgICAgICAgICA8U2NvcmU-NDc8L1Njb3JlPgogICAgICAgICAgICA8L1F1YWxpdHk-CiAgICAgICAgPC9CREJJbmZvPgogICAgICAgIDxCREI-UmtsU0FEQXlNQUFBQVQvY0FBRUJBUUFCUDh3SDVnd2NEQ0FyQXo4QUFBQUFBQUVpQUVBQUR3SUFRQUlBUUFJRkFBRUI5QUgwQWZRQjlBZ0ZIUUVSQVk4QUFUOWJBQUFBREdwUUlDQU5Db2NLQUFBQUZHWjBlWEJxY0RJZ0FBQUFBR3B3TWlBQUFBQkhhbkF5YUFBQUFCWnBhR1J5QUFBQmp3QUFBUkVBQVFjSEFBQUFBQUFQWTI5c2NnRUFBQUFBQUJFQUFBQWFjbVZ6SUFBQUFCSnlaWE5qbWNvQUFabktBQUVBQUFBQUFBQnFjREpqLzAvL1VRQXBBQUFBQUFFUkFBQUJqd0FBQUFBQUFBQUFBQUFCRVFBQUFZOEFBQUFBQUFBQUFBQUJCd0VCLzJRQUl3QUJRM0psWVhSdmNqb2dTbUZ6VUdWeUlGWmxjbk5wYjI0Z01TNDVNREF1TWY5a0FCQUFBVVZ1WTBsRU9rZFNRbFF3TWY5U0FBd0FBZ0FKQUFVRUJBQUIvMXdBRTBCQVNFaFFTRWhRU0VoUVNFaFFTRWhRLzVBQUNnQUFBQUUrWXdBQi81UGZHMkFVTFBjTHM0eXpxMENpVU93aGRLWXU3QTBvN1dZcnhjc2NVc1dwNkpLYWh2Z2JraUlveFN3MHpZbzlGZllFTFpmaEJNNnJwZk9BZ0lEeWlJZHhOaUo5Y2FSZTlCS21jSzRkbWZ6QWdJRHhBR2JyS3B5bWFZUUwrUzRBbzZqSjdNajhCNEQ5WWhCZE5UMXBLSG53QzRRQ0xBeE5UUk54MVFEM2cyNUIrU2lOQXQvSFdBQVlyWGh4eDQxL3FpVFZrS3VtTjhMTnFEVjlsSFR3U1crQW85UVI1Z0FxZ25CUGJ4UlYrRmg5YkNHVEZMMnVMQWFLYTYxcS9LVEF1ZCttcW84TDkyZ2lSaGdDT3dtWml3cW5wRnE5ZFN3WlFtQmpZYkxLb3RZQXN1a0Y0OUZCc2kzQURBWnZ4SEhncmxuc2tuMXFFQ1dNTFlGVDJmdHovdkZBeGVMaWdMcks4ZjFHc0RReEx1Rzk2NWc5eDRHNGRNQUFjSVJxemh2c1lVb0U0MU9jRzVJMGN0Ny9QOGdBM0VDL2U2ZkVVdmo4WmY4TXMrWnd2Y0VuMHQvcEw1c2wzZ0ZHczB5N0IwaTRIUElmU1plTlFYUlBjbHQrR3I4aS9PNHBaMlpxbEFObnhCRHduejl5QmlDczYxTEt4Yk9aN0ZxMElDZzJRRjJrMVBGbE8zRlpQcDM4NUpLTlFCUkN6RGlFT3BMcjBFZHFINTY0UjZlM0w3WHRBZUtIZ3VwUkxPZDlZRGtIRFdFb2IyYWUzQktMc29jRFFENUJuNUY3bklOU1ZlUXVKUHRPOEVzWWRHYWJwM0I3eVVDTzVHMGErS2RvcDFuQlV4SjVPSGlKbloxblpQNGFROHpNeFNBU0xySlFIakV6aU5temNSM2EycEk2dFFiRyt0ZnYwWFJ1NkZLK2gyTFoyKzZaQTBVOTBJYUQxUExRRlN5QW02TmpCWi9RYnlXTnhGdjZXZFNxSG1yd0xOa0pWbHl0UHpYZ2ozRjY2c2Q1VjZ5eE5UV1dTcXBGNWx0em9IaFVhN0JDenRIQlZGamxpemcvZjFOUXNPay82SnJRbXgrRVNEeVEzdlNWSVd0SkpVa1RBUFhvbzdLcG53UnRhME1vMitMKzZDOENCNlJxS1g2dGcwY0FLeFh5OXdxQWhvS1ArRFFNaEx3K1BpeHZFRE9vOXpLRXk4ZEFvNlBvTzljdS9QVDRud0FJbnBreWU1bGZjckJMWHh4bEVhQjJzTGQ3QU1lai96WXJTakNFUXhBSUZ0YnhTS2lXVW5HTHUrTTJmM1J5MUtvbXZvRG5VdHJJMDV0YjRyb0Q2bGQyWnUzOG10S0VUeHdVNW8zMUl5N0VGQ0xvamtORzV6U2RhcUV6SktaN1JwcXc0bVRLeitUSXFvMjhRUWZ1N3BVQTFFY1JFbVRrWVBsbFZjY2V1KytOVFFzU2VrMy9BRTBsRHRROHJjWGExdU1vVGE3TjBjWHBNVmxmRWhtWFNkbks3ZllhbGcwM3JUN2VIa0Jya2tsZStIY0taR2N0NktBSjJFa25nOFllK3lMSjdnMjZLRDE3TG5uNGdFUzdaRS9Ib25oQWR4UkcvSG9tZlFuT0NiVmVYcmFsOFdoWkRIWWFnSHd1RE9lWlBOUGhFdmo2MUJ2ODdxK1k5L29SNE9VZEoxNUV4WlFYYXVQSU5heHdlWFE1dUJPOVg2ZmJxeVpzVmhQeU1uUnVsVXRVbUtQa1N5R2VMaGdRWEdpZmlpTDdubWcxUE9DNFV5cXpndllidmJDL2M2VDhJVm82TDUwNGhQdXJ3UDRhRHBXODRHRTRhMVJVN1h5WXhjaEtRYTRBbzJSM09QOFNFWEIyaVBNZ3Ruei9OWHBJYW85bUMvdU44WW9SY1QyRUYyZXFPYkZyMFFDdDZFcVVkMVkxNGFoQ0JHaUpCTWF3bmtVS0VOa3djQ3BsRWtqMytuWFMvZ2Vuam5DS2I5WDhuTlBuTGVQU0NObERISjZjUm0rQjdkVEdLQ2lkVWU3QUV5bkZUQm5VekVzVUxpb0YvcTRSRTlVcWtqdlh4SEM1SUFTU0VRamFjN0ZINzZ0R3RiMlVpS0NVMTUrbEpBejVLeGJYRzFzUlBJZnZER3U2NnBEbkZNYitGcjlPcnkvOURvU2FTT0VwakhQTmlxS1hKVHJTQ3JTRFRMTm9acTN1L29mdmdCZ28xak1OMmRuc1RTcHBNMmJhN0Z1Z2hnU3pJWm1DU2pCNDBjRnFkT2RabSsrUVRuSnhESTlmK0hLS3JEakNoMVVBYUN6Qm1HdFVUQnFDMkhCbG1PdFBDMnd4NXg4WXlOT05ZUGhQa2t2TUlDd1VnbnBmc0JaUCtDb1BkbEJ1dnRQTHIwWkthV1ljK1JZYXNmSC9hL3Vjc0RTR1Bna3Vpbk5UWHRBSWpEVDlESUVJOFlkMVIxb2t2OHltOEVjckh4a21HL0hIQTNjZFlMTzg2MStVOGRLTEhHbVlPZE9PdlhtdTJwUGhFMjlKOFhhQjRqK0RlYkk5ZEs1Rmx3OXN5RVQrd0Y2VlBnc1h1L0VKNG0yVHFMWjlOOVBNK0t5UE5rR1Z0N281MDFBMWJCU0JHdmNGSGZ0RGhORnhDWmltWVY5RjhvYW9jMnRQVlJYeFZvOHJic2w3MHhycWhXN055MDhEU054VmxXeGltTXFSbFZzQTlPS3F2UU1LWjZHWUl6bDNKQithYzJFM2RaeHVsTWc1YlZjVzJHTlQ0RjVBbUpYWFplVTgxY04vVXBjWjh4bk1UWEtpK0E2YzBqOCtUMVRzaXhOU05QWlNOajRLVTZobHBmbjc4cFluUDlwdXJwY3ljZ1REZ1BFNW1kcHlYTEVhcjNJQk51MTBqMWVDK2wrcGZBSEtOaDBGRVNFcmJRdlc4eWg1R3BraHJ2Y2lIbWNGWU9DbTg0YzBOemNFY3ZjLzBzWFlpMURFL20yVTkzbVlybXJobnNhdFdUbVorYVpmUENQa0Z4ZCsydW5uMkgwNStzUUNreWtJTUJ3UHJ1Z0FtbFVBeXJaTzlPc085TTJMdTRUVlliaE1odFpUcWhYN3h0Q2lSc25zUi9pMUs3TXVIMlRtY05VdmFCdnhZdStmcWpjbTdvQmNzQm1XbFIrYko0RG5lZDNWUU1ZUUFhQ3ZkcVhvTnBtbDArM1drSThKd0QwaXlJVTlXYVdaa3JsUWo5TU1RdWtBT0R4TEJyYS85MXFjSWRyUUhrZVZwekR1dVQyakUxd2U3RVhKVTNiRlFsTGxLOVo1Ykx6WVQvT0NNNzBLb1FPU1p2dnJPS04rTTFIdjRzd2NaSnU3ajdVQmh1TTlXN0Ztc3l0ZDhjUFZmZk9iRGJVWSt6dEpoQ0FsZ0hMUVNOM3RGbU9BMjlkNXFVUFVWOXhsOU5yNHk5UEsxN1E1Yzd4OGczT2tXcmxmUFdiUkpOckRBNjVTcVhDN2VSdFhMTUZDaVZpRjRNbSt1cHFUV3VTMWttMUFmcVBKSjRBeFhEU284VjhROEg4UllUSXBIYjZTZnlJL0MyQk9xN1k0SlpidDI5aXEyUmJBU0xiVnBCeFFLTnlGRzVlR2ZCc1NWVHd5L09vWC93cWVWMGFoSFFnR3RiSWMxcGtwQU5DZ0pMU3pEaTQvUlYybnV6SzVGVlJRb21KWld2TlNTVUxyaUlGMUg1akJIS2g1ZUFFUGFXalNoS213bWRWTHc1c0RreHQrem9KaEVHbmEyek52Q0s3VkdxT3FvQ0l1YWhKNGJRQkNYTXkyZlQ2U2dud0I0RlQxN0MvQ3lqb0NWTnFyUVoydXIvY3d1L0xMMGtwUkdwbHBuTjREd2JzU0xCUllFOGVFNTJVeUpxajVxSTQyOERLZ2FpeFFBZVlISGdCU2FkUXFsMzl6VkRvakhqRnBINUsxcXZZWHo2WjdmUjNUQXhMbkgyMnlUZ3czZWlIYUl2Z1poNisyK2xaZFJsQ2k2b1RoamVWTm5uSWZRTkV0bkpxdXJrblUrTTl3YzZRNFBQQk5CeDB5MzFENHJZZXA1eURHNXhhV2VIMzV1c3Q3TnN0Yk55OUpwdXIzclhyRjVTUEc4bi9Sd1Buby9WUEE2c05lRGtQclJzd0JFY1ArRU1xWWV6V0tHY0Y1VGFselR6TW1OdUdIeGZ1S2V5MEJ0OXI0VU14a0tDUDRSR1ZHYVBXV2grWlhpUWFPWnNQd21LN3VxSEowQWs3VWcwbVQ0dTdBRzcxY2taMXEzbHVQOTZWdGhaNWR2WTZMOU5zR0lUdGptQ2xLUWNWdEJ5MGU0ZmVJVEpBUGpsUVBLOWJPb2RNZW1pY2ppRkJnVWF6dTV1NndiZjlad2Y1UTRSMjhnODZUT0ZVa1RreGlKWnB4b1F3bVBmTmZ0Q1BHQ3duYlQ1VVYrWkdNQXQ2ZnRRWFRVRnU1clR3VVdmRy9VeGhNQmtMRFZYNCtlQVlFYzZ5NGJLZVF3ait0d01scnI3MzVZbWRIcWhKeUloR2RMd3lSUDJlZkE1ZXBpVVFVZ2hSd1N3Uk1YU2lMc3JxemNRWS9wRTFROHh2M3V0VFZWYmM4dnpKelFRWkFUWEFMeXpKc0xxc216VWFMNlZWWmNtbjNXQ2xQNjA3U3drSGR6SGtCejE3OEZNcWdJTWk5c1dGQ2Z1Y1ZJTWdMcndQd01PY21CUEExMFQxOVJldE5qWkNuc0FHSGg1YytZRE1WUk1NWnNzYUNWcFNtNHpXVUQ0K0xuS0VhU1dvbGpUM3ZqMkY0bTZaeUM1RnM2RXhZbEtqT3B2Z3lYNnorRUtiOGEvU2VnNm5CN212R1R5N2FvRVJ5NzkwQllKcjZMQ0UyUllPa3hsaTB3MEZ2UUpmV0c5aExXTlZTdmdldkxVTjV2Zkw4MGpKbGNjL25IYWZkZVRIUS9uTXNCSTlKVHpKVklsR0hkcE9FdDFZSEpCcTFrd2ZNS0JKRlREYUZhV1ZHZlRGY0gwYis0N0pZNVpOOWszUk1scTdoazZvOGh5anhVUmluZlBFK1YyVnlhbHFUbFI1Mmt6c0pnMU91VTJuY0U1bHZONTd3V0VVSDNqejRaYnErQkNjV3ZFOWRMeWpSblRVMDRNbkxlczhqbE4vREg3YzNPUklpY0pqR3oyajhNNTdXS0VvYWpXOVBmOHpFQjRTc3NuclZ5TUZadjZlQi8ySHBpekM5WDZ6N1JYSUZibk5qWFNxdXRZdVM2b1B4VjdpV09KQzZrUThvZ001WVM1TGdOQ2lOYmtLT1FxUWNhcUt3WW9rcVR2QllnRnY1cGlHQlIwVE5nbW5wRXlvNVo3akZPbWQzNGNYTnZDckRoR3VURG5KNDE5Tk1pSjd5MmRrTFBmTnZYSW1kZGV1OExiRlBKVEZWTStXcG9jM0V5OVJMR1VZWTlvUEhYdXZmOGdkSkpQSWh5VHU3ZU5yMUtqSk1qSjZzTVQvbDlDTU1lbEhZS3ZkY0dtR3J6ZkZ1WkFEb3pYb01XYVpwUEl5ZWZDWVdLaExTNXVXcnE0OFFyU0dNZlA3M0YrRDRGb2FHV0loNWIvYjN2Q3BQM25MMHZlUkY0TW1XTDVxY0xCbUt2OVBqbVVzOWRuZEVjazRsNDRRK1NtWExPZFNkdkFYbk9NdjFFcDZYTVdzWDhveTkxWWQvU0NEa3p2dm96dTZRdzJTeFRhditjQmlXS1JXakY0OVUrZ3FTZWw2dEhVOTdwdCtReHNaK1Y5L09La1lnSFhlV0hKZ201REdmTVRVcGg0Nmt4ZFZ5MERHRGxoMmRxNHNtb0plQUN1aERsNlc1Y2prK29Jdk45OWVvbFBBVTEzNk9vYjhwc2VpOWpNV21aSEkzMUt0eTdQMFBpK2xIcjZpVXdNRjFMNmt4SEt2d0JrRDRWMjlIeTd1MlBTaFBhTm1HYURxM1haZ3BLbTBxeTJ5eXhjcjMxKzdDbTZQQmx2ZkFHOE14Szk2NUx0eHpCUlc2RjZsRE9UbXJ3dTVnMmVuREtrTlVSRjQyMGNxWVJzakNrL29KN1I4REFyaHdOY0NITExsZkIrWExkbFhhSU14WllvbldSbWhReFdPREtmajYxR0I0V1lYZkhPUkxwdUU1bFN2R3JJdEt2eHJhYmR6Qi96RHoyWThpUWRXVWFlNXlPMThrNE1xSkdhc1h2UWRaK1g2dCswbDQ1elpXY1czNlU1WE42NldMMEMxWVVMeW1ZSjQzbS9OZkNVZmkzN0VlWCs3VG04dTBTcFk4N3BhS1VZdm5OWVA1anZadTB6anZBZlVjRGJJZEpUMldjOGV5U0g2NUp4anRPWDIwaVNmR2p0QkQ1blc3dmplNE5NbzBvSC9ieVRHUUxLdTVyRGtrcmxDS01wSjFjTXphQWo1TnVRVzlidjY2RWNVTHdNeXV5aU9Ta214dWtHZEVURm9VSktLZ29zbmNGOVVOU045NnNLek16S1NkZWh5OEdCUC9mWlRlTjVZa1J6OTIySkxLdW5iNmxqZVV2ZXpFZmc1a1hSYU5xbVNsZzFCa0hlSFNnMGVFMTAvbW9UeHYyVDlwZURkSUVCZHRKK1ArSkptcWtIeTlZc1hGREU4bzdTSmUySjhDR0I0UG0vZWRwTlVjOXZVMmRUdHJXYUlOWk1jNHNkNlRJVjltblhJSEJGM2xtd00xdjFVUmY5WVN5WmNKL0dOeEVVek9qc28raXNDdW5tVUliUk5UZFFUVlZ6MDdwOHVaSlE1bFFHR0FPelFlRGtFeHNQc1ZwbjN1dFh1dktqZTQ1MDdsNTlXZks3MVIzU1FROFJHeEtoOCswZEUybnF4V1ZiYTF0SzJHSjZidGVPK3hlYVVoUFM0Z2NaWFljSFhpRWlTMHptMGk0Y3FzaGszZG15a21TTEdhcy9BYUFwTDV2TS9WblBIc3hjME9DUlRmM05FZWgrWHpZd2NheU5tdlBYcm9VN2d4VkIwSEo4bG54bUUvTnc3TFFWcStWQmYyV0JyT0dxbVBseURNOXMxM1k2R01sMUtWcU94SUhhT2wxbnlsbTJxYnI3cGx5bFptRGpOVHQ5ZnRXekU2UjBFZVc4QnV4WWZISGxlMUJlNGhQRVkySDZybTRZdS9zRzAzR1VYRGJCeVVPQ2tnUHJiRVJQVS9kUE9MbnZ4eWFHOVZpbEppL3lhc0FCZ2lIVHU0SlBNUE1pdmxRUGw1QUNoRlVSclBsZlVIK0RHQnQ1MnNaNDlHcFp6TWpzMHFiZ1NnL09vdDNjcFpiZGh4NDQxQVo3bG8yVWNhcVlxM01JV0RrRzVtejNuNzdNZU1JVWtocUNlL3BZVU8zR3djNEYrUGJHVXMvalBWL2RMS1pqcnZFRmVWUmg0SlZMSmN5endDeERMcDRHL2NFMXpzeVRHR25tYkhuK0hFVTd5eWN3amw2NkU0eFdSWjhIRHN3QVlmcnRONXFWVWpoandCNE1Lb0hoZ0NFenpmeGp1TDJqWjdEdytTZE5nSVIxRUcraFcyMkdvdHVZemx1RU9ocVR3alExeXVCTENIeHVJcldNM0YrTmMyN2cwYmd4WTNGQjFwUzBBc1QyZEhyUEQ3dHdpM0g4TVJvRThwTjhWdmJEdjBwNVpiRGkrRUhFc3VrZEp3Q2pIQjkvMkxvejdXWHFMSmp4d0xjNGdyeG1ZZmk1Kyt1RUlJek9BU2krMUpwRFpsZ09sbWNZZG5PS0JlYkU3TEU4QWtrRU9yMVJja3FvZ0htZFJ5ckl1OGJmRGt5eTBqekxLanNkVEh4MnNrdGZtZjZBYWtOMXpQUGlvVXprbVpJSVRIaHJFZEpzY2xYU0NlamZKcWdMMDNRMVlPaTNZSHc5L1F2R3o5MGhFUktsRDBCTk5pK0dRejIwTU5iNHFMdVA5MVQyZitNbnZoTWJJOUYxVDF3NHI0SkdxcTdnc1JtVEtOYUJabkxham95cXdXbnp0bjcrVnBkRjArV2oyM0tUa0xmTmFnQ09OenVad0gwa2hXSldUbDBuVmNtNG56cG1qcVpCOVlKcWlDSE5Eb2xjRDMzYVFhUkl0RTlqQ05mdXovUlFYTHZuTzlqL0kwbS9mVVRpWTNvUjhmSjYvU1ZQdVRBUjErK2YxMlAyU1J5aXJvZXlpaStWUGMyWllRM3NCR1F0Wk9SSzQ0Tzc0M0hzVUwyWDN1bU9nT3pFcjFFei9XdVNHUGNTME9Odkp3Y3V3VndhVXJ5cFZZTDU3VENoOTB6ekg3K2RHdDlwNTVHb2Z1bUdYWHpmWFM3eGp5T0tHbGFsZzU2TVVwdmNsWTRvSlczOUxzc0JsZ3dkUkoyRnBlWWdRUU5QbmtFUFdrNjl3WXM5YitxUUdPYXA5dDBWcjBKcStLdmJaOXZtS2FOc01kaEpOL3pPM0NaRWIvUDBrUTF3anloaFovSHBvcTBVTjUrN3lpSDVQSHFKTHRIcTNrTHZoZGJoZUpjZWEwUVlzQUhxTjdSUHJoSnlJNUk5VlhJT1BOVDJiNDlBTDJUTXpzT3Zid01zeWUwQ0swdlZLWFdoS0dsVzd2WGQvMzlPRXBVN3FzMjNKYzVBRWZic1FoMUdwU2dsUlNIazlGTzBkM3JjRndtTVRzNXExZkZ5UUk2RXFKS1J3cGdHcDJzdGI3ejF6UzFibUFrSHJZbTF3NlRVOWJ4R2hiaWJMRkhNZ052UTkzdm5lZFpTWng3YTJBODMybk5NeS9KMFdnMEg4V3FXc3d1WEZZOVd1ZnVwbk85dGhzK1d2OU5UQm1qMytFV3cvOFBNc2NSQ0w5NE1vUDNLMS8vbmM3ZXZCa2hnWkFLMThTUUhHZ3RTNnFNdXFxUDMzR3hOOFlOM0tlTElINkNhcnV3ZUU5NWU4SmFrNGtiS25UcndwUWlZbjk4Z0RDeTRQSFpaMGloYjEyb0lpeklESkdMSjRmWkdHbWdOeVRhUVI0c2xqcndGdTBsUDU3NWdqb1RkNWZPRkFjWUpsdmNBVzZkdTJuZHZCQ0hXMDd5ZGpQbUNJWXpBdVFFVHF1azNhZDhNaXlJei9nZFYxQzUvT3o5clE4TTdTZjlHZWRlRWNPYkZSTXJpQzNnNG9ZWnBnNWs1NDlMZFNmQmRJTGo0S0ZlclhmYk90MUs3UFRtc25UNkJhTVRVRkU1bm9LS2hCUHBwd0Rka1BzeFBGa0F3b0ZKZnRlZ0lQNHhiK25mTGxsNWQ5TmpFcng2UHk2ZDdJZWtJUStwQThob3dzd00wSjF4KzI0SFA5YytTMFBGMy9YN1NpNzdxb3pleG53WHdvZFBaMEFJVkFPaHlsMnZudlZRNUNiOHFBbmh3VUFqRFJhOVBoTXowV3JWOUNaaEJtTTFpUWxQTW1vbTg0Y3hUeHZ4bVlmS2UweTQzN3FxSzIvS3N4SzA3WlljdFdSdXRsUEpjNGROUHlIRHN5T3BWdXQzY0ZQRzVobVBZQWNYa2NzeElJeUloeHE0L21rNXU1aHNWR1I5WExhaDFRSWE4dE5EYU5UTTl2M0V1OWM1SXJUUmtGNUpCT053ODVuaEdYQmZOUHd6YS9ia250WmwyWEtEYVVoSTdrem5JVnVobTd1RDZSQVlKVzRRTGJrOGNLNkVXQUZOWStKL0FrZHZaRXFyWHJaSE5vMk9EeEE0M3hHOTB0SHdIZmE3bk5vUjNYMHErcUF3RXFqd0JYdkxadUtIZWNtOVF4ODJSL29IZUJycm5Oa0ZCNk93TS81UUhacVNFakZXZndrSEZOazAzLzlqTHJxYUtyRGF4bHFVUnJ0ZWxaTko0VXlQVU4yNURkNFd1ankzVzRvRkhZbUZnUG0yVE1oTkIwSitheHVlVk50Y0tCeVZRRHZyN3E4cHVPSVdYeE44V3pLNW1JMmlLUGNIcEFwd2pSaUdESlpQS0ZEdjBQUEg1M0lTVUpPSUN5cyszZ0kzWU5CaDRnM2J1RHU2WUJxamtQaTgrenloTVd4anBVQnRGVitUcHFYcUpNNUhUOXloS0kyYVVWVkppZ0VOaG8vZVFFSXpoeFNlOU9EQ0hSVVRBTkpJZFU5NGdIdnVCeWowNytTR0x0NzlGaUhGVFhvMFVnRGNLeHYvenFIMk5BZjA4RGs0Qmt5VW40STFCbXBwZzBPNkVjVEN5a2JnZnpBMG1Db1FoV2RlZHJPQytncmpXaUt1UEllUjhQZHhZQlBEL3JxZ0h0aCtmMEcwbWRTRTZvenNEZzJ1c2NtTmRpVDhBV1A1cnlCd1ZNci9QR0RjbFFIMCszdUpBZ1hLS1VCb2ZpRGp3YU5PUDFMYzhHODZIVVdBQjhlZ1dNdnpPbGlFam5qblBhRzVhd1kreUpSaStNekJyZW5CZ1Jmek5KSTlmY2xiOS9YbTdOcDRiSTg5Ynl4Rm1OWmJQRjVkaVdVVENJT3VVcCs1K3lZb3BlWUsrUzVtY0tGand5LzNReVNEY1NDREtjL2tTL1VQYndzMDZGRmtuYXNsV1ZzUjdtNjVRNE5mZ2owalNyMy9zVk1qMnBzL3hSOWpFdE0yOG9Zem1CQlNVOVErN1hGMVlHSVVNdXU2ZXBMbmY2SzUrL0FwZjBqT0YwNXhHdEUybU9XZzBwM2FxL1pNOUZBVlpSbDk2MVFYZlg2Unk1NlhaeENVLzdrekNEVndtQmhOcllvUEN1TTIxOW9pK2NxK21wWndGS1czQmExalppTEJPaHYwZEd1Z053WjFIOC9OY3ZBZml1ZFdiNWsvMWhkUW4zOGhhZ3g5UmdYNmxDZFIzeHBJZ0Y4RWRYMU1oOTB0S0ZRSko1aTZYamNOY1VjeTM3M3YrNlAwTVF2YmdjVmtYK0h5Y245VDRlWHZQOFhoaUNIQncwaC91aGMrbzRZNUE5UDRCZ2Z4NUUybUFhVFZhWmZRRURESE1ZVzdKbW1xZmxUQ3JVVTRVOGFqQXFzY1RUZGtoTXhrVWRHMWExUHlEMUlUclZGZm5NMWxiTFphMjRRTFI5MWFta1kvQkJnWExZYU9PcWJsdndibTBpU0NPV3lKVVhQejFQVjltK2Y4NldxbmZuM1dHSmROQTBjbFRkQkE2K09vaWdQTnAwV1ZITlE3QitsN1V5UEV1U2VrTWVVOU5kTEViUi8ydHNCZjR5N3MyV25uOFZoeGxiazlUZ2FQaXQ5MDlVMU5NamVrNGxKU2pobWhQS3c5WG5MQldXYkM5ZUtPYnMxLzFqWjhobWgvbEZOSFovb2JFM0ViTWpxWjErcUNmYVVMTjltaDZmZmpDN2dCbHlkZnV6eHpHc3RVaTBHNldRck13MDVMbXVuMXdHRllJT2hPV1oxeVNUOXJuMEltT2thVzFkekUrYWhFQnA2TTYyM3V6VTlONGhHWUoyanFTZk90VC9RTzRJREl3N0UzTElnWkd2U215cEVJcUpzd3FHU0ZWbkdFRmI1eVIrblVZYUtWeUJyNis0TmtMV2hiMzdsemJ1UUVRMk91TnZYZXJoeUwrQk9EZTZ0aE5lcG9CWTYxSllXYUFDbHdQc3M4UFl0elBYNTVZYTRnYVlzSWtwcC9GZmpPNVR2RXNWWDJPcFNvTmdPY01scDlFSXdvcUl0SlVYNnM5RmNHM3U0U0dHWC91TDl4NDgyZEZyUWxrakF4TTdBMC9JdVZxOTk1QVRGaW8vUzZFMUlzT3hLdmRhNVdWVmZNOTMyL3RjT1BsQ2QxV250UVdrZDB2UTd1VW82WU9lVktGdTM5eTJwSjRJU1RFOGxIQ0E1dDNFeG1EQkwvVWFlbFI3S1FYeEUvT2VManZPYVlNUFd3L3RMcGtsMVg0Q0FnSURtK21nQXdNYTB5SG9pNk1HZVkxQ2NraTFZSzJsNllsVnlnV0pvblFJVXRVNHNOM3RaNk4rNmRrZXdqMU1PQzhaYU5SUVhQRnpUTFZmOTZVZkJNelp0VkZXQW9GT2pxUllOeVdSclRHdHJwWEo5RnJDVzlaZEUxU2hwUXJkalpieXA0U2RaajNrUlQxVWYwU0NLdS93UnBWTkhHeXY1ZG1QbzBnSS9zbXhiTDdBajFPaVdJVkFUd2FqRStHYjRrNHFNRXhzOGN2RG0xRnVlVUt3Zk11UG9aNTZ2QVBsaldoZFVMbnk1aWJXMW1hQ05nMFVieUEvRHg1QlJ6c3cwQzBEbXQ1bWROenZrK3J5bU1MVFZkU0FkaTFOWEFaVDJXL3g1SzhxdHg2WDNaZnpLWTRmUldCbDMxbWh1SmJSK3V6QU5paTVzZmw3ZzhRbXJQczJjUTJabExWYXpoc2pKVzBzSWdrZ1RBZGdyZ0loTndrOEd6ZGRuV094MEZQOWFkSlVZeFZxZno1WEowdkV6NS9oY0UzMXpWbTJWWUZTZEdheTZ6eUQzYnA5eFdvYWRwVUJUOHVPYkFML1dCOGdsZ0sxWjFSWk9QZmliUHJPSUtWQmsxUUY0SEs4bjFTcFdFYytGZmVjQWxzbitWVytYclFLNnRHRys0aTdRSUVzMVhYbEJVWk5aMGZ3dGtsRzZOR292UnVQYnFsd3pMd0tCQWR3Q0k2YjFadzdBQzlJZG9WVnNvV3hGVndMOFZmVHhKbHpmSkc0eFp6YU4zd3NLU2k5Vyt6OUJFL05PeFBJYWswZXI1eDBRck9VQnhFbld1YXM0Q2VOQ1ZIVWZCWmN2R0ViRHNCWmpaQ1JpU0V2aXVrM3IzOXRXdDkrMlpCYWpUb0IxQU9rMFJucnQ0Z2xCRzFnMTlIQ1BoU1ZISlV4eXk4aWduUGh4VzAxK1pMcXdkMHE5L0xBdk9PaFE0b1piOEx6Z29nVlVKSDVPRkdlNWVCa0YxK1dVdWRyeGNQTUxiOW43c2o2Q3hPVXZzVXN4QmRqanl0ZTlicXgzdmVmcVlEY1NGWW5sUnpHSENXQjl2NUFjVlRZWURRR3VUUjZkVmFlSm1JVjBIQkFTWmkxeVUrMjB1UHNSa3dOeURPd2xTMC81SmUxSzlZdFN1dGUwOENRclkzSE9TV2llZG0vdWRpTEpZQVBJeGRXa3k5VDBaRGhwcXlCUFRBOHhkR25nVFoyZlo1VkdqMjVBOHN5TXZHMUQ1M2ZqcFhtN3M5T2oxR2ZGOUJsMnRCbDFyakVBeFg3bkt1UDRpLzF4M2RBN3ZtNG9xcXRtSHArWkUvREhFcXIrUjVZUjkrN0hES3AyUVJXeDFVdmdWMUdDcjJuenJtMHRYdnNvU1J4VS9iVFJZSkhkai9FNzhCQUo0a3NWeG5oYW1WK3hkZTJCOEVDQW9UNGprcW1RdnBtU3JaSzg0Q2pLMnJlVXAxamtNaWU4a2lFaVMxdU4wNzJXeWtQU2F5N3dseWpPQkR5VWg5VU51TjhEVXYwRFNIak5rRmRyUTZkdGdSbGVMVzhRYjJBSlRlSDAxbjRHeSsvUlY3K09mcGpwUC9DT24zRFM2N1dCd0gwa0Z4TmY1dTU4RU5nMWF4eGdwUm9rUE9vb3Y0MmhyNVpXQkgrTGRURC9HMHJsdnVGM2FobFlYSHJNWGtESUNMaWNyTmxqdVdiR04vOW1tQU1Zc0FSb2tTdC9WaFNSUFcvMUQxa2llYi80dFRKUVhsYVdUay9JMVVVQ2hXWXJndEtGZGxMZnZQQ0tFVkU3L0owaklyaEtudDB0L0xJSGJRbSthek9TYUZ4WUlHc3lpc1g0L001UjVWeld4bE0vTE14ampSQXVCOEhrWTRHNjBXR3RBTTFXem1TREdwMld3eEM2a3BqYXQ1WDRKdjNXRWFnQSs3QXNpNjZUS1pDVklCdTlGelROY0FHQlhBZ0ltZWVlbHhtaDMwVktqTjBWL0wySU8rOWY4K2VHdktGYmU0Q2R2ZTh1NGxMd0VXTmRvTEhjV0kvYXRTVjhQaEUrMXBrVlh4NTVDSm9wNWNscXhVOFlXdVZ6bWxRTjkvV3dIMEp5N2dWRzhUa01NYk5CQ0VRdEYxaXFiZGd2aVZzY2o3T2o1UmhDaW41TXZJekEzTmtZdEVlSlRNMUNGWDlFZ3BZU0xoVG52UjNtbE9zbkNVc2FKQW85dVFDUWs5YWV3TUxsK0k5ek5WWnVqQ2hLRlVSc3BaRmNZS0J6aFlucWpBUUxITEVST3JNTm9GQlpheVg5dEIweG1TZzB3WXhtcWlMblB4Tk5BZ1laRVlaUHk4cnNmQTdZSlJHSW9NWWljeWljTGxVTXdQUTFLelNQSHlqYkJBaGdVa1FtSGFFQzV0TmxsUVE2VmdVMjRJazVlcHJ3d3p1YWZVNmM5NVU4RmtVVVByZVVzMUdGWDI1ZTlqTjJJWC83SVlJZHhpeUJ1SGgxdUlEREpBUU9sSTFlL3RUVncrYVZlK2F0elZtUFBhb0FwckQvVlI1V2pPYk1NdEwybWZQa05HRjh4WTU0cUZuK2VNWjFuTExTa3lKN1lFaXZ3SmhWSWJUWnJnNHpqYkFZcnJUOUI0cTFuZFZuUnhyVHF6ZG9ZY3ZZZVBQdVVFdDFUWFNiUFI0U3lmRXRJeGpmY2tHRUc4aFVxZnNKbTlPdVVkNlZNRlZFY2JiaE5QazNnMEE5NnFSU0FDM1gxUHBjNkZwanNvcDFqSFpFcnhaV2wzeVhJVzBsa2VNR3V2bXcrNmNwTU5SN0VJTCs3Z0lUenVhQkFkUmlELzFmOVRsRk5jd2N4NGZCTlNsYlJ2Zy9XK0pCU29lSDRVOFR0QXVib2xRWXU0SXN2bEtWbkZITHFyMnVib252TXRXOUl1QnR4OHR2a25ybnJYOWhncGJMRDVPdUNxUUlpdlUvb2ZWTnBYU2lsMjF3b0RHSjBxNXY5cmRVRExLQ1ZPcTRKbFB0QlhsaVRHN25NSnZJekRTTUNQNVZMaFB5Sjc3aUttNzh1SGpaNkJjQXM0SGFOdFhzZ1o1SFIxb0svZHBtdVJyUk41Rks0T2ZHR2ZZQjhGNk1HS1lVV0lrOXh6UURWOGg2L1EySm40ZzZ2Q1RiaGZlVVJhcWF3MERKT0xDcnA3ZWFOOEN5QkV4RUFObVUwcHQxMGw1ZXQ2RDlPNTlheWY3eEM2cXpHQXlXZTl2eThScFhDOTRBWk1uMHhkZis5ZWs0d0tjd1RsUnBMeCtCVy9yakErdXhvVTRYK016L0ZGazBldnA0TjFLZ2V1V2VCSTdiMlg3K1NpaVlRZFBjb3lnY1paMi9Pd3hka2RBWnRhRTVRNzdpNmJkWDNIVnFER2hGMEcwTWQ5alN6dmg5WDM4NklGRkF3bmpzRVpiSy9qeWNvbTh0N0hVV0g1K25GYW9oMFpTUGoydDVTMGNFNFhRUnhVNHl0S3NpZW11L2I0d1FVVmZWUk1sa2F6YjZrZmtQM0pUL0ZSQ0RoVUYraXVDbUVyYW9GK2NrMVB4dE5mb0tMSU5BVWxMdk4rRkx6UUtOMlJvZmttOWdBa2RuVTZKdmFoQURLL1htMmNTWTZTM2hFMm9STHlQQjFiSHZHZHU5VGd2NGUxVlBIb242SEJNMm9Edmd3Sy9XejU3ZjJWN2VTUm5kV3NYMkdtcGM1VnNmTk5ua3lXWjVScU85VW5jQ0UrakFMRWE5aGRFQmpwRCtiZnAzUjRDck10RThTZ0g4aTRxWk1rcEIvendTTStNL2FISzI1TFNPSVNHQmIrUmlOME9hVVBJKzJxVjQySURvakNJMzhTN1orQ2JlZk1DMGdQUHZrMjRQKy9PWGpRM1o4YW9ua0FWNENzUmsvdVBNMmZ5Z1Jyc2I1Q25lcUYwbXd4TEVFUUFJTEVLN2l1Y1BhT3RlYXV4S0FzaWNsc053WnQwbFdteW5uZHNpVzluWStnMHlUUnJlOVF2NXFtdU9wY216cE5VRnhGeTAzdG5uNFpwWXJqRUsxRWNRNjRNaEIreTVkL0xNZkJCaHE2RndxenBNZDIwVXdYYTdMYjhkS252TWlhMm42dmx1L3FNbE5tYjlaV1I5Ymo5bHl6NnkvMnhpYjlkSC9XWkQrbzBmYmEwWDIwYi9COUFGKzl2QXhaUWthL2Vaa1JlaWo3QTZsVEVueWRxZnBBdVB4enlRNTN1UTlvVFIxOW5ESUdrYXU1UUhKSWhnWDZuV0hPamtxMVlMUTZ6ZjBIZFl3SW12Q1B3aDJqQlpxdklYanRudzN0SlRHTHFwNFhyRzlUV3ZMMXFqT3pXWllxdzRvQlF5UVdUNnBNNlcrbWJJN05IM0t2VkR2Y0JCL2swUmlOYTlpakNGZzMrTm14OGszekhHd1BUYmp3UFFWb3Zpb1NyUm80MGVJVUl5WDhIcVhyWC9PSzJhQmNPN2FYa0c1NTJFeG9hVVExUGNDSjJTcnZwN3VFL1ZiS3J2dmk1c3B0WExwVldiNkZZa0l4dk01ekxPSnVRNnJWNVg5R1FwV01VZDRXWjJUWkR0aWNyeHg0c1U5R2NCenhJaGJ2SnNIellWMmxoVlNsMDJLdnhwMThGWEN6QzR4U0V6dXdiNUFzT016YStxUnQ4dlRWaVNQbEtUbFAyMFJsOThQU3FjR1FkMlY2aGtuQ09CamM5enpBanVnb210UU5IRHJXbGlTc3djdmFIRDZPT0RBNDBYR2RQUzhIdEg3SUhaSXIwSmtPQURsRjFtbGxMK0R3Q3h4SGkwM3l5R2cxN3FnQWd5MkFKU1JYVHA3eDJtZUczdXFnajBDOEtCeUpoT2tSaENFaFV1OTFYUGdLdFRub1FRVFZtTTVvSGsxM0c0bTJJVTJ0SGl3OGtxT3A0UXRIZVpRaThIN29LTjRPVXVSa1hOZ0xONFNsdDd1QUkzdGNDRm54U2hKSlhHa3h4TnBxQmd6eGd3dHZZZEdOQ1JpZGtQMnpURm5BTzFtZUJrYjlTTVlveFg2MzhyTUlieC8zMzBuMGpsdXVzZDY4OExEdHZ4Y01MR1B0MmRLdGpMb2JZM0I2R0RFVFFkMlEwZ2tRMmdHb0tnMnJEK3diZkxTa2NSditZb3dTMXBrbVdkWi9EZXhkWVhnUWtZY2RudEFKM25hdElwUzk5emJpZFJsbVYyL3FKemtVLzVzQXdHV2FCMEVLbkU1TkIrb1Zibm1CbVQyaEx6QTBjejFxU2JnWXdGRTREZEsyRzZ3ZWlEc1VsNXVsVGlRTTVmdmRuRmVXdkcyZmZIRmIrTkVrZnFJV083VllQVkJXQ3JxdDFZUWNIMUZMZjRhOUVJY1JONG9VV3Z2aTQrMWJjMVRMQ0V6cDVHUzRXcFJjTWdSSHhGYVNZdllDRXVPU2xnS1dpS0ROR3dRdW0zTGlCNEJKdGlTNVhwVEpaM3JtY2JBL1BjUGRoU3FqbElHWWRKaGJWeDIrZVNNRUxqaC9hREROK3g0cU8yVWlXMkVZVm1aUTljdm84c0xDSlBjVGhsamxBWUFPT0JRQzJYU2FlQ25mOWFOZzF1SDZMVlZFSUtxSEgzNVlLRzg2OUpmd2R2SkdzK3RoMUkyT2Q5K1BnZTlDS1lybXpzWnJ6RksxamFSaUYwYStJTFZLWkFUekJoOFhEeCtrbkxuNHdKb2NWMk9RNG5SZ0tLanZXQzNaRWpZOWY5YVBLLzV6WDIvRUNDQTlqb0ZlampaOUc4NW1VanJ0cEZCUnpEcDVOMTBWU21sRHYrUkhXdzlkWGZ3QldJcjdNNmdsdWVkT09SOGVGL3RUbEt3R25qWk5NZjRHRmNOS0JueEFLRlNtQ292eStQTnc5TTVWcDZ1YlQrWThTTmM5ZFB4SVoxNEd4TjJ5cVc3bXY5SHFVcHRFRWVoYXdnWFBLTXFubzdlQm4vWTd5RGdRYWZpQkpyczB4eFUrZ05KL24yQnlRb2N3VjFneDRPR2NRd3RvaGNxRmhFaEF6bFdhbU0xTncrT3RhVjJQek1PeCtOTU9ZcFdqSjR1bEZHaXBWRG9JWFVYNkxwNjdSL3FVdDdYdjV0azhpck4yUTFBVVdsVEVKcGhON1dOQ3ArTEljd09yZHNOQ0xsb1hBZjVtNmY1K2h1NUlicElvVlljOXNZblhuK1N3aURZYmpwN1dmc3EyK0kxQUhnNXJwc1BRK0h5L2hqdmMzVHcrbFp5WmlTcGtMN1pNVitsY3hBUlNwc210bmN1L01zVmtEckdraG56TFVwcGpweERxY2VtZDc0ZmtiaEd2dFd6OUdMeUhYNitnQ3JaZ2tZOVhvSXNNc1FQRXlMVEdxZXBOWHNVdmU1MWszS3RyTU5kZHQ4UU8xWlhvL29pb2xHbzhQMTgwcjl1MFBvT1RreXA2QVE4V1ZPYzVobTR0aTlrMU9ZQnQzc0h5RnVRanZtd0V3ZFRtd0IzVFlCcUJJajdma1NSZVRvMUhVYjJMNGFDa21EMWZ3RzVCamZNNGI4dXdTNWphOEYzT25idmU0akx3aUZiOWNYR1d3bDEyZUdoL0pOdDczeDdPeFEyZGtIM0F1b2VUNXlRdG1wVGFnaGxhWUZiU3ZEUkdVd3VkUzh4aVlsd1VicEpzOXlGUjFjVmRiMXlBVE9SNVlON1BHV0pMNDBUKzhCTGlnODhHYmZTZzFTZFp1aXkveFJvdlBwN1E1TDJ2Zk9NSFRzOTBnbXUwb2NBbUhqenQySzVzY3JoSGJSQkV6VVYzOWExL3FPWk5yNlhlMFdSbVNzZlI2cHRaRXRKbW5tWkVjOWF2WmI3bWlsTTFQTmZPMitNRUJ3VW1KN2FuNGdwNVFvMUFEaXA0VGVJakRZR3hzaWxzMWhuaDgxR3pJY1hjVlpUek90SnY0bzg0ajd2a0Y4ZVpkT01pWkJsWFBDd3dxbVlHdVZzeDRJMmt2YUQyMUczVWQ4aVJaZmk0Z2M0VjZDUWVmZGZXdWhheDdac21HeitNMSt6aGFGd2xSei93UG9UWWlrUXN3Z2hYR2Z6Ni9CVzZZZkRyWjNmWG1RWFBrVTc3c3BrZVM4dzlmT1VFTWdFeXdzVWliQXBVWUJQa1EvOWw0OS9UODNtNnZkdVVReSsyYTZSbm1ZbElFSXlOMkxXRktBTkZrWFExREJBYWgveEVoSHpRNCtGKyt0dUU0MjVvRFRCaXRiWklDMlpPbXdLZEVsZ3FaWmtDYllyOVdOd1hONklTaDUvZWF1M0IrQ3BCd1lKdUpLVCtNOHhGQUdQc2R3ckRnd1lVWHVzVzFXcWQvcEViVER5T0ZidjQ1OWYxU2pHMzRncHBVQS9YOFBZbS96NVpvUDN4R3hhTUJnK2FvR3JTYXVyMHV5eDA4Mm1iMHBYbFpneXgvTEF4ZUZxUlcrVml2YmM2Z2VJcG5mbjQ2aUlKRzdnUXpjc0lRRzQ1MnFvMWpDVnBzYlgxaXoyVWU1MW91YlVnaGtpaUhReDgxbVNJR2hkU1hlN1NORWlpQVoyUFlKblIrZ05mWlJaT0g3b05rVEg2b1Q5ZkxEeG5LUTBsemY5aHZmbUNWQmlLcXJTUWxKcGsrdUNReFIzWHRFcUpjYWlRa0tqM0dzUHJSWnFVMnd4U0o1RGRycUc5bnFMdkQwb1d3MDM3OEdtaXR6M3FId01BVDk5dnpnSXhWVUlqLy9NRkNxR0pxSzBLOU0zZGJGTUF0UGVjMWlQRzJxUGEvd2F2a0NEVEV4c1RoSVVqQktycTJwN1k5NVFRejkvWjNWcG9kaU1xZkxPVGIrcDFjblRkNmxXZDlPSS82aXpqeGJjVG05cVJrY2NWenZERFZNQk83SDY1ak55Zko0RUp6cHQ5aDlNWEtvZy93dHJneUJGa2w4WlBqV2pWbXl0Y09iZ01MV1I3KzNhZkx2MDYzMVhLVFMrUHJ0SWJDdGw3RHhtWS9WSTlFN2ZlT2NMZ0oyeXRuN1Q3WjYxUE5xUnRGLzJrR0I0NHhyYlQxL1FoSTMxeVVDcWY3RUtkcjgxaCtoTDd2a3BGZFdOZ0tvRDJmWHlMOFJ2MER1RGZvREtkZkpkV2oyZzE0RW44WUVhS0lNQld0OVhqVEZnai9kMENVUDFJK3lkRlk1OWpHMGMxZzEzek5ZZ1FQWU9ldUFmT0Y1ZGw2ZVdLTm14ajN6UU8vWmNsVGJmQ2hmSUdsSVhjQW4zSHhTZWFUbWVJdnBTZWNnZ25LS0RCbTFDTkRtRmVKeVhQTmlyYnE1MHM5Z0l5bzlVWEttM1lVaEpDZC82a1hjMGMyR1o4QXFmaFkzTGVSUGVIQ3F4d1N0NWFwRDM5TUFqbmxkczh2SG9UdjM1Y004ZUU5U0ZucUI4eUM3TmlJalRWTzY5SkxoQWdKaHhocnc0cTlWSDZNM204c2tRRVRJYUhpckhzQk8zcVRJQ2RsaklIZ0FhR0pxQ2UvYlhpWDJFYmZtUFpFMmlOcm1PVisycUlsdlZMbXI0ZlpLdnljVkhoOEJwK3IyZXdGbnRYeks3ZTFvU0RVejVRZEpxQkI1QnpxZlBrUFJYQ2lsSmdSVFZoaW5mK2lKSEhWTS9hNFZkTUkxbFBQSEViejVBeTlKRlkxeFhjQjRTMWhBd2dXUGhRRzVXc0dOSzRtMjJqQVNRMmhRMnRkbmNvUHYrNDE4RGNiSU5abVl2a0FHZURvQ2lzbXUwK2w4NEtMaXdzaFJEdjBqYUE0eGo3NEhGZC82dXBPY0xKMEpUaHFRcTRBd2FGKys5bVhVck9OS3FvbUdBcVFPR1ZiK0FMUFo4ZHdIU2w0MWhMZlJQQ1FDajFSWGY5amRhV0dIb0VjMStmVDRuYjd6MDhVU2dnVkZDZWZNUlo3Tlh0aGcvWHg0NDA0eURsNDFsd0E4Z1F2RlE3SFk2ZTAyZFhPbDFURDg2NUliN21nNnJ3dzh0WDgra3ZKU2F4MWoxM1QxNEI3U1pDY1RpcGl3NzFCdFh0TjRseExkQWQyQk5hWk5VOVVFWDl2TDhjZ2RkQlJ1RW5PL0Y0MVZHZC8wQkZET2ZLWW9IbEhndTRyZ3pRVHFzYmZyaGo4UEhKNWxEZWpuSWlKc3owM0p2eFlud3NCOTh1bGtVZElQTGhuc1I3VUVEb0NXYVd0N0IwNUk3cU9tZ3VOSllpa0tISHA2dmVMcVgzNXR5bzhCemFXVk9hTWdScE1CSFFkU3BGc0owWVU5cUlNK3FkdjVXWEQwVkw0MW51YURtNXRnUStIWWFOUmVwTHlVdWZTNGZIMGl1dCt4ZkYrcDZoZmh3eTdGZ3BXSkZqOCtKemZ6NzVBb0NibDRuUmZ4T1YybENmRDA4VXVDREZoSHpJTlU0VXZlSGRqNWRNTkNnelFwRmptVDRaNjZSMUlGWk1UaEhhMzV1dWEvclVCUG90Ums0VG5RSGtuVVRVTzJ1U3BySEZRdEZHL24zVHV0eFBYeDgwZjhucmszSE1vU2hWWDc2d2QwMEc2Qlo1U1RrQkYxTWJxdGgyNUNvakpyaDA3Zko0NE9JNlVyT092dGZaVFFYYVlMNmI3K1hVTmNaWGRjS0Yyd0NJOXRuQjJ3WStQOTRuOVlMdWtIVUZNZEVnbmx5QUJ1QWlKcGNhNzEwR0RnUFN1R0lpdktUWFhITk1IQ0kzUGM5ZS9tZGNaSGZ3SHJ6cEZUek5FWFB6NHVyMmdiN0tVQ0N6bW1BRnpTSjdsSm5xcnhJZHAzSXg0TjM3QlYrZVZRbnBoT2l2eDNGSDkveTlDNHhtTmFkYjBmK2Z4RjlucFg0N0dNRVNSck1Vd3NkM2pLb0xDZEw5TElDSUpJeUFoK21tU3o2V3JSYm5mWkRnanpKMk54bENHc21oR0hNUkJNVkk2QVREeXZycy93QzBtZFowZVpYSEs0bWxtWVMrZHRXOWtya3p1dEhTZTgrNlV0REpYcS8zVkxydmVDNGxKWG1TbTVGc1JmK25Db0ZDNWdtc2JVMDYzcVNEUktyY0xaVjFDODJiM2x0TEcyUE5oSVJ1cnFIUzdZQkgxNGQwaXJIdFNVeUl3R2NmUEIvMVdZZkpYb3FHam5kMW1tZXJGOGN0ZWYyNHRvRTdpRml5RlRuTVFyZmhONFlTcHpkQ3VBZEZicnpiWUs0U01DNXNmMGl3TzFsS1NyK1FhZVFneEFQS0czaUVnck1GeTZIQlRQLzJRbUVKbzFyYTc5cWoxTnMzeGFaTUp4RlYveU9pOFNwNFlKWURJOHVGWWQrMFFqNnF2YjRxSHVSZytHMnlNUGpnZGJwdVdUQmg2NEVTYlppMEUvZkNaMDQ5K2xINEJOallmc014ZWVRUlZucXhqY3EvbmxxUHZjZTJ0MlVDb2xwUjFaOFRpdk55SmN6WkF5ZjVVUjRlUkkzN0lsV2xzcWtXdW9HZVFWekhzZlNKQU16TWVFOVFMT2ljRVpreWV2RHhDM1NEc3JlZ2xFR05ZMGhPcCs5VW0yQjlWQVVYRWt1UkpDSnduR2I1Nk9KSWYrQ05kZHpmSFhrZWptTy9SbVhxSXNrVk5hVlA4NWpVa0NPOHF1Sm5Cc3JRSFRmTTNzc1hPUmErYnFjK0hiYnRZMnhlSTRpYm1JQVd0QTBFNEZCQm1SbDNvOXp1ekZqT1c5VmFVeE1mT0VUWnZ2SW5yM2dUSnBPNHhSNTBnTWdNUmY4dmtZTHpvaW03MHRUZnFwaFJhV2Z4bjhNcVNGQ1czcGRscU1sS0FLd3dRT2NYOVhzNXdPSTlvTWtJUlFEelNjd1pBTUd0TTgydytTTDF6WkZKUWkxUHN3c0ZWVzVvbTVZY1dxNzEzUGIyR0RZd3cxT2FGNU5CSmwwd3JESnp6OFp6U1VIVjhzRE45K0s5Y3FZenVYSGpjNHM3YnV6UlNOWlhUZXNaL2U0MldLNysvT1VUby9taWMvc2JqdDlBTzNYNmhrWHUxOXFYZFJHNVFjQ2lHaG00dmtXMFN4MGhIWjJVbE5jeEtrZmdFcU5DQitoaW9rVVJwbnA5U3Q3NWtmbnY4RVkyNTlSVUw3UnNqMGJTMkN0MVFqVFRFWHRacHhkN2JGVUxsRXRWeU1HMGxoR3hpM3hyVXNFUVhVQ283eDIrR3pyVmtFSS9yNG0yRElEcVVnUTR6dWxjQ1Bldjczc0VPOVV2UGhPTU5wN2FmQzlkN25lc0o5RVBYempPWFlsWHo1TXNuMmhGZnp2S0NLQUJSc085WDUvT1JOSk9EM00wM3Z6NkxxbkRKMCtiVXMyVDBycklHOHFEeCszdlR3b0R3QThBWW1DMlVzdUtrUGVhS0hqSVIrOFhrMHE3cXNRNXZkekdEN0g2U3JUMUg1dHkzL0VPQVl2cTJVMnlhbWJ0R0xCdm1OaVNERG8vUldwbS84UFlSbEJhNTdwOHBtajdUV2ZjMk1HdE96aGtrZHk4Tk9PemhROFVBN2RqQmh3TUJMa2I1T05BeTBZWGd6dmowWElqLzFpcmR0SkhRc29HNHloaSt3cEJrUWlEdkdmZEJsY1FldTBoRzVDcUFVdmtNSTlsYm5sVktYTXJ5U1NTUHNsd2xnKysySmlzZnNuV3prc1hvbDVDKzZTUHZRVXdrTjRqTTV0NVZwT3FMa1VLNFZUOUl6V2x5ZHBMOUpBNUQrRTI0cC9JQklsaXEvV2ZNR2tuUzBZM1VhMFAyZS9aU2VwVDJ6LzFYQllmZk4rUUY0QzZCRTNuZFlnVGRMWU1ibDBVbmluSml2RkgxZmpXSFhQdk44N1VmV3hjOVBPcSsydTQ1UHYxS2NMeVp3aGd3d2JiYllMR1RRbE5WNVdFemJtWGI2bXlXd1pZRkk1WExZTEEwSTdyRFdLbVAvZDJNNFJzcm9pYkFqQmZ4ZHVwMGdUS0pjTWEvMFY2MUIyLzhyckFCeWVkb0piZFVPdTZUT0UrWklja0pzU2w1UkJ6R1Zxa3FDU25Fc0JibGpSZklDb0ZtaGFwMWo3dUZPYkxXdkxWQmxZK0dYdWxjNUw3TGRvUFRIMVRoeFZ1QTRVb01BaHkzbWxodmlyRzd3ZGhsVkVGYnRJK3dpcFNNdUhyTFh0RkFxdSsyVjdUVFd5RXdtaUNJRzlha1ExbzJ6QmsyV2R4MytVcmlXM1o5UTVRaDJJUjd2cWEySUw2TUVpbXBrYW5XYVpWZHNadWRZTXJRSGRielVjRU9CRDFDRTBYN0FnVWRYckEwazVQeGduSjFES0h0MTBxVGZSeVdwNjBMSGJmZ09IWUx4ZGkvMFgySG5QbkdnbEZoeFNFZ1BGRkRvckNrTTdSSFpISUdWNnJJMFNWU3lZN2t5WDZNc2Nac0s5ei9NV29BR3lkMU0wYnd5ME5GQkV5d3B1aW5MdjFBZ0hjK2wvYml5VTV6YkV2MVh5Vy9lREloTmZFb1Z6YXVvUjA4TXI1MnZ2VzdzeGh0MllURk03RUZJSzZNODhaeEc4UU40dEVIVmJOQ1dFV1ZKYXFWeTF3UmZhQmNNRW1vNGFoQ3A0dXA0bnhOdndXbElQOWZneW81WDNJWThQTElzcVIwV1hucytobFhPVmNQSVRSN0lBcUZ1dmthc3hQRVRPR21kdHpCZ0U1dWdSWTVjdmwzTUpNell3MnFoYVN5eTdlYmNJVTNmbjAxRmZSSGx0NGtad0d2Y2FrQmJZQmw3WFJqRGZJSjNodjRXMmkzTTJNbDd4VDhUQXpORGJ3Snd3dUM3bERFcm1NWHF5VmlkRC96SDVlWkdwQ0VpWm13SmNxNC9xY0dGMHg1cUxQVU9NTko5dUlJUms1eFFVU2RRaVdFNXgwdFZRa24weEw3aVp1WHhPU21INkdzaDVWaUJUcG42WjhoQUpkZlA2cC91YkhTSGhqOHNnODBUTXFSOGJ5b01XcWJPclR3QXlHTkhjV2dTUnBvSlhCUnRrQzVza3BaejFDeHhUckNUalRsYUtFaEgrc2M5ZTdUZ1M5SDFEY3RCMGJDTmVUVUpYMVN4bGU0bGcrNmxIVTJRQWlKdTVCd2xTZFNCT0JXa2IyL0pzZWRxUnNXYzdQOG9YZWkrZjg2eHVHcFd4aUVCenV2aGp0MlUrek5FTmR4WW5YSnB5dS9BTlN2MDIydm9EdkJ1V0QxNkZ3bGhZcWoxeHFxNFN0NlNOQWxXVWY5c3lBamdVcDNta0J4RllPZ3Nvd3duOTJSdGgzeUZkZVIwR1NKVHd0QldGMkltNXZrSWw2VjZrTVgzd3hBZ1lMeVZ0M2QrYW9Halhhd1JCNFQwbDNPcFAyOTBaSW1QbEVFa290aGpnTnVFSFQvZ3BlajR6Ui9hODhLei9wUnFuZnpsbzkrWE93TnMrbE5pVm9iek81Mkd2eDJ3QURJQk5Kc3cyb1krVXV0SjNmZFZnMEVsdnE5bitjY1B2TENmLzNJdEtFd1RlMFhoWXRySFNEVjRnalduVjUyaGViUnF0LzlxckQ2TXgwZG53bGdqYUZvcVlYcnNMNnd3R0RTOTNpMEJ3M3JhK3JJYUpTSG40UDVYMUo4QnNtYUxCR2U0NHJ4UHBYM21QZkhmakFNRVUvWW1EOWZxU2FWWEJXaFNOTkRyMnk4UHNOUXRKaFlzT3Y1ZWFQclU5VWNvUzhJL2pHcDdhdEFxeGxtVVJQNmRYNlRISVBDbVJqSWdUOGJFemlaY1lkNy9XL0lKNjZNenJnV2RFclYxa1JFTm9abzAxQUh5bUV0SFpiay81NmtLZ2V5cTZaVDVVQVlPaUFqWkhudEdhaFR5OXI5b2NvZnNadkUxNDQ2WWFRME5oeFdQNFIxM1RHM0JITzhJaWNDb3lrcE1nNHEyR1BmSVc3K1F0YUhMYTNlWGxoWEx5Uk1NYVd6aG5WOVV3dU5uUkZvV3ZQNEYyZy9PQ1RDY003WUtpMHZoaFhVbEdzUWtTSy9yaTRyNGw2UmxGZ21sRTdkc2pnb2F4QVVBVC9XOWNHTkJoM1BwNkRmUE1WS2xxQXNBQ2k1dDFSMGx1b0puaFFuM2l1enVvTytHWkhRbDVwTFpHMTFlenl0V0NZV3pYSVJVb0ZxaThZVmFLa041ZTRuVzR2M0VKbnJEcVRCYkpYMi90MU1aOElpelVkU0xKRitlUUdJTlRJdkxxRXdvM1pMTEl1cWp4eWV1b0hPREw1eGVZTFoyZWtGam9DUkxqRXNDbzR6bFl5Y3EwMC9WRW5XRFE5MTdkOFdFbkZOT1ZWUWs5ZlZSUTQveVhmeEYxNkdtUHhqYm1jZVh0ZU5oWE9kVlMzdHdvSERBVWJ1SDM1L1dEY3BVdDJsRytqS25DMVdOQ21uc0lzR2ZZZzJubEN3R0JGc214MTN2bjN3TnVycDNGR2g5T1hWYzVHSGJZcldXZG5Nem9xSWxDY2pSYTBERmFqYWd5bTRTZm93NFpjc0wveGhMTTlGbkJmMlYzWWxrOTlod1lRdzhTdXRIZ0lLOGFQUi9ZZU9oRERCMnVDUjkyWkY0ZmxLNXJnYjhTbS92SGVLZGhkT1lOYVB2STBGQndjYnZvd25USm9qc2NUeVdBL2tua2hsdy9QdUsrRXdDVWxWV1FKUW9Wem9rY0c3T1RjUk1hS1pkYm1zMmNmYnlrTXptRzI1bzE2cjVKNmpQdlBiWjZhUHc1MmF6OUFma3BGUGxYQUhJa3BNN3Fra1BiMGRWTEdxSVZMNHcydm5vOTZVSUZjWEFNdkhuUXBkUjB6Y2tVNEhoYi9kVjEwUEZqNTEyQ2g2QVEyZlc5dkRkK2syY1JXaXVIaGpvYXNLdmRKdEhoMEI1V0VSYTFab0FmdjZCM0Q0SGVDQktOcnQrZnBiNzZEMDFqMUM0MXRzRDFlWVlPcHlwUlc5aXhtenJZdXBFcnhrVUpTTEFUTnN5VXBVV01Pak5vZjBDc3o4MzB4bktyUlUyMkRXNFlXK2tGcyt3WU8xdTBwSmpWbDR1d3gxSUtYWkgxYmtkcjZzZ2hZelV6M2NFeXVXcTV3bHlET3ZSbmh3MXMwZ3I4ZXpoTTc0eVpKcThPK1ZETE1Ua3lobW5UcEQ3RTZMWC96MWQ4TDk0c2g0QVlyV1craG5PTG9meEl5VzNscnEzK1JlUnRGeXFLR3Zya25PdC93ZElaQmFYZWgyK2dmNXZJaUQzTFJYMnNkbnRZZ2xFN0pRMDlEK2RVSTY2TDhCakpzVGMzbjhQb2hvb3dLMUdLVThDdUpRQmhIWnhBSTBCOW5tNTIvcm1PME9DQTJtenI2ZEFPbUVyckRVa2QveFpiaUQwV081aXd0SnRidnI1T3lmOGZraUN5cm5ScUJNZ21SNnNaK1BIYm4zUzRHMjkvS2xiWXR6bC93NWVQN0U1ejNhUXN0YkdHbFJLQXpVRUtnWSt1T2Y2RlpiL0ZUREhqSmd5eFBLZnN2V281TE1zbmNjQWlNMCs0R0J6eHEvMVpUbTBRLzNYenpLMStDNGpPZFY1WXp5Sy9nTmZaNWYrZkFISWM5KzBxSDRSMUNKZEhhVWtlZ2sreTlJd09TUVNqazFsNDhCL1pTaEJlL2lJQThobDJabVRlc0NYY0NWYWladSt3MjhDdHVBV28rNWZHT3Z0VWlNUkwweFJBb3M5RUkvZzlJRENxcndrMmlCamJzbnFWNkRKWVZCaW9FS0F0K1NzV1Roa2lqVytyMUtGQ21sN3FzTkZxSlY1V0M4My9FV3JONWZrMWR2Qitqb0psMzdZUmZqY0xkbEpYa1RrQWM0ZVQwVHNseVhHNWFRamhkWHAvdk9yejZyUzdHOVRvb1NYQ3hJeWwrOS9OTmxnSVNNSExET1p3VFNHQnk4YzI5OHdmVnNuWW5YVjByQXN0bGxvajBOQThYcXFGYXpvdUtnSEl0eCtNQVh2ZmszRFdHNmFXQnVpR1FwS04vNWo2SHVhU1ZLSTF3QXVpeGtRSFJDaXQ2bzZtbE5nanJiWW9ySDN5RC9DSkpXZFlHd2RuU2FUTVFWY2NpVDNxZ2FXeC9UaTU1U1I3MjV0RFpXcm96NVZaRHUvZ0h3ZUZKb0ZPY0FzMDFCclNiTDNodHkwTDQ1KzZOaWI4NmJBL0ZVUUZZQlBlYVBLTURTMWJCdzRxOTllMnl3UUJkc2dVKzM4bnNGdDY4aVVkdWh6cEYwU0dNSVcvUGNkUDkyZC9kNzVsSXg1amR4Q2xYUEVwdkw2dlZUYnpQaDVleGpScGNIeHZ3MDdFamFQanRIQSt4ZVg2RmVpb25IUzNSUWN4NWd3SGcvVWFuUjRsTnJ4M2lheFNERi9ISTZzQ1hudStlSm5oc3lZK21CZmhpS2xvaG15U29POG40UVU2VFRSTXFxcW5mcmFDdWxqOWgzejQwaklRT2lHNm9Nb2lHN3Z4UHg0RlppbkRxWHpWbWlsaTc2OWNabVV5bHZXMTB6Qm5hSFpOYkdjQW5xVlkzK0wyOWRFcmFVOU0yVmFOUDJsUGJCUnQ2U2NLNHhLdmZZTmVOQzZWY1dlSHRpcjhyQi9FSytZV0lveWJZVDZZMTNKZmxKYTJCcUY3OGxoRjNoUWxlaFhjSXpvVkNieXZLSFkyUVpaUWwyditTTHdoZ2hJNThtL2dQNFhXNUhOay85NGVPZ21ncEtyQm9sbjFlRWg2Ym10R0FoTkFya09aTFdEWXZoTFdTWjArZjdsT3llZm5GMm01dVlQaEhtTkRWMFBKZ3BFOFRHTHB3L0FrUmZuSXhjd3V5WkN6ZEhseWY2aERaQWVRalZKSUdGTWpXenBKM1Y0R0dqQWZ2c3VzLzFoaE9BOE5VRkR0WFhjOTIzZlhiY2NaZHNMb2N4RDV0YW5Daml3cjlqREpIYmVmZEtJUUplc2JGZkxZNGJJYnk0Q0d1SWV3aVZQNzdtWkNoQ3ZMMy9LRU1LbUcvTXB2Yk5oVWRuRmdJVkZVMmRsSmRTdVZwMS91VzhnTFJ2aWJ2bGtZTHAvQmtLSjFQeDVpNVR3cjAxeDc1M3NMdTB1c2x5dnZ5eEJneVBocmd1N3NERW9uTHlZVjJtWk12TVFhQ0gyN25wYmo1ZU9jTW1WVmo0T2pnSmNFZ3JKMVN2NURQY0hrODdNZWFSRlNQZDdBejQ0SC8zZS9QT09Qbjk1bU9UVnZGd09kd2NOZStWUjZ5cmZLRkcyZ2ExV3VTSXYxcTZtdWs3aCtFb2p1dk41VVhzZEQzN3E4UXNxTG1rQ0hUNlduaUJNeUcvM28yTmZQVkkwTmh2ZVk3cFpKTnIrVnU3SGtvNHFKa2VEbmhVTDNhTnNTUTBpRVAxM1E4UHlUQnZ3VHJkbDQvSTVYSUY1cW5qRnVTeHBaNkZFc1BoMFJ5NFJFMVJxbE5GMS9IVTQxbWJkU1AzVnpyKzNhMzg2cmFOUzgzUFpGN3hObGdZMzBYNTlwZ1JVRVVhcEVYdlpaYkZqL1orYXcvQmJlNm9qaCtJNWhZU0VwQnVGM3BRclB4QXEraUFsQldEQm1mVUx6MG1VT0tSNHpPRm1QK3BKNzFicjB4anFyL0hKckVsNWE0Z2FKUE5MQVV0S0loU09rbk9GT2U4M0hHOE5oTmw5cXphVzZQSnVmYzcwanlXR25FSnRQeVBla3o2RG5zTHRtcnl1Tm1lK21ock5WZ2hBa0tvK1ZseHFDcUlTSnVBdDVrRGxmZUQwSGUyOVlIL1RiUGcvL2hNanVTODlNV01IVHFYZC9oZk1Ubkp5ZUhwcWh5TmU0VzBUQW43TjhUQVd1UnpWdUNzaGNjMlpZYXFZMXgxdkFHc1BHZDdYN3R0S3U3WmpLTnQ1a051YXdsT0kzVnFJN1VkTkhnczZqVzl1Z1U5VjhYN2dLYnBTN2NvTWMwaGZneXhGUHZpT0FSbVJrMzBrVUFCclZ0MWdhbXZWUFJzRUZUWWRBaGQva0dnQWl3RndzcjJma0hZNlUzRTg5aDdtT1M0c3c1eVRTSmF2eWRmQ0pnTGJjdlg1dDI0eEd0R2FzNnNLZkFaMjhpZUUxT25ZTXp3OU5CaVZOZjF2aGZ4b0NjWDRnOGgyTkRYMWhqREx4WnNRK29wazd2c2U2ZVNPbDhLalM1Vy9GbzBtNi9OMkcvZHBhQXRpUVBHTGFNcGlYZFVoZENQSmxXREk3aFptM2JYUW8zek1udnd0djlGNkViVTBvaXdudVQ1MFF3aFB5VWpGOXFnUzBUSU9hL2pRYWNZSFNzdWlETisvSFdXRmFaUGVHUTJvR2FpaHZSRnBOWU5WdU50OUxYeWhOWTBmMFFwaExXeDZXSzZWRUh2cytMRkRIYkk5ck9VQXBjM0ZEU3prSmVPVEgrZlA1bGlOM09zcTM1cU4vY0l0NVJ6UTJoVTNaNy9odHp6Q2hPM2RucU1wOVZDRGw4cmN6OTFhbXpJZVpkR3BDdUxKZ0UvVWZqTVp4NnBxSi9hL1dkM1BMRkpwd3RUUWFuV2VoUlJRUFoyZzhvNWVJN1U0VVFQeGFKY1ZOa3NvSDlHL09hcGRxOWwvTHNsQjJqQ0xWODU2bloxbVlNR2xBSmtVK2dac2RxWU1LbjRpdHBIWWlVb25JdUVIdWRRYitVY2xITDgzSXk0d3creVFSazFic0szSFVlK0h0NmJOOXZtQmhrWXRnTmVUYlJobE9kRHRNYmQ5bitodzFoVXdnNFFLbldjWXFmbWhCeGp0YnFSRmVvQUJMVnpwV2E0dkRzd3pEK1krMXVtQVVKN29vZ1VvU0x6WlAxdWhGYThnVkROUXJWYVZ4aHM3TTUzNGpzR2VkaEhkK3gwdzNqY3poWTd6NVVvRjZBVGgxZjl6NmxiSWd1c3VVWCt1ZXp5Mlh6N0VHR0tYM2szRzY2S3Y4MEJ4L0c2bUJxZXI5QVBjbFk0aU1ieFVJUVFjSXZrL0plc1libFJlMWFKTGhUZTF5OGZ5QXZBQ2VvYXowdlk1YjdQaEFuZ0ZGSHFRQ3F4MWNpbHJRM0FWTDAydUF0VG02QXdmZTl3UlM2VXVzTVpycjFBU0NudjBYMUc1b3B5WkYrVWpLTXVqcWNSZkptaFFpb0VVTzdZay9uVlFwNkdyZTduWDhOT0tTVlNJeE8ydmFJcHU3cXFHNlJ3TDJycXVxalU0czJUTGU1ZzByOTJIZENyaDlEeG5sUkNvdmJQc2lsOFRDN2xKQkpBcThYLzBLVkJFck5CSFVNMDZsRFFaaXJ4enVPb0hWMDVINDMvakNOR1lWd2srNGI5MTZqeFM2Zk9pemNGM1NYd1RrdUwzQisxSWE0a2ExM1NEQlcranBGeDl4UlFvYmt4NnM1aGhwSm5TZ2lPVnhKSEJtNHhTb2MyVjNtUHpIL1M0S3hUdzdxVENESE8zdm9COHBvOWFXSUp6VjQ5S0o1VlVwaG9sLzJMNEVZdlNxOU1EczlnZWVPQ2VBZThhbHJWbSsvOUFTT0ZOMFBwRmJBRkFaY3ZUOUl5eGRUSXRPMzNkME4yNVJ4VHJ0dWl5b1JjNWh4dnVHbXhBRCtQaE1sVXRBOXp0V1JDazVGTCs5Z1NQUy9MOWkwUHRHbUxCOXBaTEg1TGtWT3UwcFpObEtYZzhGNHB4dk5wU1lEQUMwNllBd1hvUDMzQ1g1aW5abC9oRWlEdVl3V3Q2Rk5EN2wyK0g2SUZmSHJta3VmZTRPdWZnZFI3a2lud1B0Yjlyd2NMREt6YTBMN2tDbFh5K0lzK0pBK29oNEQ2T2lnR2E4eWRxKy92MWZDb2hOUy91STFHMEhKN0V2aFdhVGw5Y2wzY3hwS1NLUS9NUWJ6cWJUN21SWmhpZlVhU0ZhT1BhOEFLaE1xUlFVMHgzTGZmVy9EV0hFUUJheENkV3RGSTNqYlBxRUtncTFsZGFuM0VKdUFTK2pMUWlVR2ppdTlXTElvMVo0ZlYzTHd3TzdjMlpnRW9YenlXcVNJZDI4ZXlsV1FLWG1pN1J0S1FzSEszbFhqOGppZ015VEExOFVvaG1aMStzd3Q0YU1uRS80S0Jyam5HSTZTdkFoTEw0WGFjT3cvcVBrSmFXS2xXZVdsREszRVlMS0ZaMVN5NkI3czVwcWJuNlpWK3h4ZU84VlgrV1UybjJOQldMeDg0R1FYTUVGbnJrOTlWRE5sb0paZFhLRC90Vm83Zko2SU11SExxNGgraVVTb09rc2ZuMjNZSkZybWZTbFNZbnFOaGI5MmNyYW5nMHY4N2p2R3ZWT2l1UWN3WlQ3TXBtU2N3TDdnVDRwdjZRLzJmMXFwMGRaSzFJNFNrNFVvM1VpVjh5R3VIZ1ZFS1JCRFZ2V3NQbVNUWnFRRFFCejYxaVlGU05TR0FvYnU3Uys3SWVJcWNaTWhMVkg4eldHL25LL3FDVFNlRU4ydU03YUVzbEpuUTQzMWJPVDRGdGc2ZXFUWExRSnNuMmJhcXAzYlc4SFlSMzhHVGJidW9ia0NQcUFWWU5OZ3R6Ymk1dDZLL3laM0dXcHd1cWpxTGNtbWE2NTNBbWJEMlM1dmhTSVZ1TlI2NFZzSXFrWEI2a3JmcVdRYW9GeFVIdkJzdytZUDJmb2RNZVl6Zmc0SEtOMVNaTFBMeEV1VWZNV2I4SmVqcXJxWjNIVkgzZVFLUFFaYTE2SXQ0V3hHVTNhSTc0VDErQmVTQlp2TFQxd2tDN2Z5eCs4RFVRVXArNFBEaEdjYU1lVExHMWNhbGJ3b3Mxd2JybmVSUUh0MEljc1BRL0tZL3IwRkJCYnBHbU9KaFM2cGVWTG44bmZDNDEyc0d4RTFtOVFHTmt6TDdRamZKbkc0NDNyZG9FYm9yRzZaNmc5dzVoNTRBVUhSemJGNmVLSWxvYmFDSzhORFJKMFZxbXVRc0I0eE9mM2pHaUtrZ0w0YUxNeE1lM0dnR1lQQi8wVDZWQmtuUlNDUThBaENzUlFBbG9PR25MNnRyOFR6UEVwemZhZ294aUYxZFB5NGpUVExpeU9WZ2NXUHNTNWIvK0Z4ZC9rVVkxWkxveGwzOERodUJyanhGRVBYZnFXUk5XQ1VvMm5kWlBRalBRYmRaMHZVZ1IzbFBFaWJERHdzb2NWaWU3a1lKcXVWbWl4UzQ2UzhHSFgvWkI0bWlYZGM4TGROdFliY3BDWm1mZkdtOEZjT2FheDd2RXY0cS84cEpIclNXVWgrK1NHV3hBMWF3TVhIYkNVL3dyY1p2Sll4d1QwZXAwMXJZR256R05iT3RHYjRhMjJYMGpmVk1jbmM0TGU1OXpENWFoWXVvdGRUWk5MQTFkMk9yRFpRUy9pWEpsY3J6cTRFT0FMcS9yQ2E0d0JHL2ZtK1FzMGxyVnAvbEVUWEVWenJjZmwxUUUwYWcxZVFQY25mYUd4c2pnb2hSUElqSDErc0c5c1YvQTkwN0tDMGw4NFg2bG9JNjF1WTNPekJxMDRwb2J6ZHV1TWtwUTlDVnEzb1J4aHdQR1h2UUgzV0tEU0NoNVZpajRrRTlpWFlleTRkSzlKZTVMTExaVUFrYUNEOERwWkJiWE8vY2hpZkMrK1JSZ2xPQ1NhMGIxUnJKNzNzbys2UDlMQmxmdzNnaW1pUitqNHhZaC9QeUZLNC91dzU0UndwMVAyaHpKMjB3MDlwNGVEV0wvV0c5UENYbHh6YjNWNGErUE11ZGVUNTEwRGRySWY0VmdXbGlzQTVlSDBhcmswbWpXWmZpU1l6NVpGVnNvNEFRUXEveTNmWFg4UjExQnhKcm8rK1FjSkJuQ05maWZSRW8xeWRlb01sdnI0SVJ5VjZIU045S3AxazJkamlwL1h1QU1zQkJNTXh6bWkxSHFrcGJYdU1TN2swMFpMNWdMb2ljemhZc1RjRCtOZmFFTTFka3FLNHBDa3ltRldCNEJEN2lVeXJRWURNam9mL2wvcFVhZG1FWVdKS1FMaG1pZlE3RnAvQkFlSzJtQWJVRHBYQzFMWUFIb016RWxCenFYZjR5czVna2QvQnNraHRSN3JST1FDQ3UzWFNXaU1qRGM0bWVZVGN6c0w5UEk5WlpLR3dVWTRVVTR6c2E4aVNrWDFHdXQwSVZvOFRGU3BZS2haTlNnQTVmT3MxY2VzV09UNjZRRzJWbGthOXY3R0d3T2hKaWlkcmdXZHM2a1NMZHpwSnlseFQvVkVMVTZRUUhVeEl1K01lN0RBVnVTQ3YweFhKV3ZHeUNCekI2ektzVHJYV0xwVWkvRzJjZGRDQUoraC9Gb08vZlYxT3ErYnI4ZnhUTEhrUHBPcVc4U3BzTmp5eEo5MzFNV3VpYkdhSmhJWVorWjcyQ1Vmd0l0ajJKdmxmWDJMT0tDR1pEYXY0b3VTQ1d0VWl2VE1ZeFR2ZWZhY0N1NzYrcjdPVmdIdi85YXh6eUlWRFNwSnpiVjlySkYzRmhUUU56a3lOQWpzamJSMGdXQ3pSNkNNN1czeUpWUHpiLzM4SmJQcEg3elVDMW9oNWJjRW0zdUptMkt1d251VmI3eGl4R1ZqeW1SY0drQ3htWk5LTElJaTMzZDlIRzllZDIwbFIxWHB2ZEd2cWN5RkRwME51TTBodG9vMHplRkx0ZnRkd0lpLzJmS3k1SnlwbW1FV1c1RUI1Slg1K3lOQXRMSHdkTWhOQ0FDSUlFNGoxSUlRRGJaMXp6VDdUNnUycWJOQ01SalRucnZpaWlmN0tCMDJuSFVLdUJFcWNsWHlIcXhqNDZYbkhIQ3hYaTRHWENaeEQ3MTFuM2JGaUJyMm1uQXVyVHovdFBsSUxvbVpTYWF6bEZTbmRrOWJ1aFRBOVRnZzR5TnF0YVpwdVVVWnBTV09iRE1HejZDRjNqY3dQdkY0TEUvN2I3MXpWU255bElLUVpkQXJEc3ZjenAxSFZrSW1IMGk2aTdJRk5PdENMTE5lTWdrbnFMTitJR2hmQnpzRmxEVHljTE5TSG83NEI0YlFwTXNUamxVRUI5UW5WRnJXYkJYYzNnZW9BOGRrK2RRajFISDRraFM2c28rd3FuSkUxT0I1WmhpWGoyRkphZXJTY3BmNG5oWERIcW8zSDVzVkQ0ZHp2OFcwV203TTRGeDNKaXNQU01URGs3eG1iMjlhQVBpdU9mc2xHUTBPdzlJZTlKTFcyWTR2clhoS3JuY1JBakZRNXhjd2pib3cweGpJVXJYVkFIRXFST1lEVGZGekZjL01DTktWK3hidnpQU0dtYmdQdEdSVmdtaVpjdlNiZXVRUUduWkV5RGltZWZLRWViMjhZZG5NMldKSVBGRytJQWpkYmJydjM3SUdPMjd4OUdvMFJVVlQyZTh0SXpSR1QxejBvdmlLWnJhNHhaRDRJSDArUWpXMVBkbCtrZkpUYVVhaUgxSmtnMFlQRVpsY0V1OStxOWx2R2hkK2VMK0xRam1RRVR4T0tpdGd4M2V2WWVtMGU2bk54ZkQrM3VvTEdRS1hEb2JCMUsrMlpGODluMVg3SWhjUkJsbXRCRDRObEFOZFVDOVVHNkM0SVZWa2dpbmVsMzMyYnFQSlV4cjJiRjljNTF0a2E2S2dCRVpPNWkxSkJ0Z2dTczRpZ1JJOE01WnpjbWRwbWt6ZnN4N0U5UWlWRnpud1F2S1M1UzM3QWpzK1FOc0hoaVgzdG1jdXhWYndESE9KRDdoT1NGdTA5Qk5HMUFTaEhrK2xacmhqRWJhS1JQNUZiOW5WZkE4UjFYbjJ3SzRaSUt5UGRaRnRvbmxxVTd3dlVIcWtlY2ZNK01TYlphRnVOT0FWRzJKK2xOanZuaGFLUG1jdHk3M09yWGFxTFR1WXM0a3VHeHJIeTBueDFtVVhEemNSd0N2T3JjLzlUdDJwOGloYzk1UTFyQzFmOE44cWNBVmo3RGVSam8xUXEzaHJ4Ulk2RFNXWm9ZYTZ4OWsyaTUyaU0wMVFZcFhTdUlYSEtYYWtOR3FhVkFYUmpvNjVuRC9DbWsyaExhUHZKSFc5dXZGM1RRbm92MzloYlIzbXVJVzF0bVcxU2hkS3l0blQzS0JaM3pySTJpWjZwNUlFbzhBeStpNFhQYjIwWE9HdU1QMnBKbWlhblVoLzMvSGFoQm1IdmZiVzlUb3h2cjhKNlVCUVhDZUoxaXVLVVppejZobzNmVDJ6VG5yNmE3S3BHNmFtcGJlQlJFSzBJKzl0OHR1SmwzV1VXWkJYbWdhc1U3ak5yS2ZuTXcrK1BEcmxDbXFGYWU0Rm1FS1ZtVCs2TjVMQUx0Rk1zMGIxWVFKMGMweUI0UDhIQkJLNlBGNFRTL1ZrSjgwZWF6NzgraDB6NFZQeHZGMksxeEdNcDR3WXRUdDY3MGtVdFVMcjMzam9LanB4V1V3cTN6K0ZjT3ZWWVNTdE01RUQvb3JuYTBSMDdJL21UbldsaDZQMHR0RkN2c2FWMjBKVWVNRDMzeHl0Y3QrdGJWaWpTWWZ5TUFBU29ZTzYzTTNZY1NPRHgxMmtxOWtpVjY3a053Z1l2dW9GZzgydUF0bUNNVFhCNDIxcDlOaDZGYjQvR0luaVh0R0hLc2ZyRlFDajlpdkpveEZERkdPejBRNk1hZjhBNTRqVlpwME1zSktNM0l4VUxCVHJIcGdtT2JLWnc1R3Q2U1Y0MlI5RUdTZFMrTzRlYTY5OFJFMFppYXN3R1JBV1I0d1IveldYc3c3UTFXUFgvRmg2MEVERHFtYlQ4VmVWQkhFQUdzNzZSUlQyNE42b09RcG0zaExkc29iNU4xTTBJa0lYRDZGbGhhREE5aUMrN1dORE9JQnBrL0tSRHBKeDR0Tjc4VVFrTW9lc1owczBuaTdKR1I4eWozY2poWDZreWllMEN4VWtLSUE5U2FLd3cxWUV6ODNvUG1zRk5ka29DQlRkK0VEc05jem02UmI5bi9FRXF1MTBYWGY3Z1NSNzZaemVEUlNWWHdzUERmOUtveDZVVjhFWEpMc3lZRTdCSWw0R3pZcmkzVnN4clU4UER2U3UyWHVWVGVUMXNCSHNpSmJzTjZwSEIyM0hvNFRLSnJOMkxRV21nMGFLeDdZdzc0VjZodHVEbTJ5WHJDWllUL24zcmRYU2xQalJrdW42b2hYM0l3Y3NIRHpIaStQdHdKaXZabzl6R0NaUktDZFdiMHRtaWt2WDZmZFhLMDB6WHlUazRVaGRlRkJ1YUxkU3pwbzUrMGN6WEZrVjZtV3l5UWhXOWdMbTVjUWs1RjdzZldHSVc3N3FvZ3VrMzFUZ3o2c29JbCtCSjVEMnhmNmwrYmtIWERUL3lLOGZPYmhMT1dPSHpyTHE2dXlCTXByMGZsYW5sRkxuRTZ5R3lyUGR5UVZLcjdRcmJZRE42US9YMFhZMFgzUEZQeHZrWHRxSnFIS05LT01nejZReUNoMHlDdk9NdHlpVDRXZUhhSG4vaHozNjJrM1I3dFlIaFZaeTlpTVoyMTVaOXdvTjQxNXYyOEJwVjZORVJteEpRVyswYmFRZXVXbmVybm5wbkJET3JETUpMYVVLY3dFbytPNFR0ckI0MmJxelNHdWNaQnU2OVhka1JPRFFZVnQrOERWNDJpMVA5WjZpMVR4R25xcWFmRlFzaWhKeHNRN0Frd3d1dDkwREtneDgrUDNoV0Y4NlYzYncxRFlaSk00M2xxNkZIbE5ldWNCbkFhR25jbHV3Smc0UVNpYmdNeFRlTGl4SElsNS9VaEFXdzZ0TEZPSWpKZjUzSTRrdXl4NmsrK2p5bDdmc3RTWm1MZWxySVJIZ243RmtpRjZ3YjdERnBNQVBlN2lxTzRzcis3elRsb1R0SzY0K0xqN21jMHpsZjlRZGJTZ0M0V1E2aDhtVnNmVXoyb3AzdmlQYmphZ0pSbVJDNCt6UGRZeEhwSUloWGdtdnpTR3RUU0JXbEZxdWZucTVXbklIdVpXTUY2aDlIWjZVbXRmMnhHT0xiVCtKOFBWSXhTbHNDVm9JVUhnZ1EvOExsdkgxY0d4SkZHc1FmaXV1Vit4VzM0U2xRcFloWXdmckhWdWdqMHdtQjFnSlVPVmdPb1FYNEQxNlBRWlpLc01CekNoR2JYWFlDTW9GeVNIU1loRzA2UzJaaU5IcTBSVFlBN1ZSU0U3aWtyYjQwdUFlNjRNNmlsL2Y0aWdXQXVnaHV6aGxuY2JPbHNvK29ER1Vub3lSOCtlNEtPZFlqY1c0VkV2VXR0S0h2TDhtWmdzWTFqZGdpNjZncmFzamE1aE51TEpDb2ZScHlXUDB5cTV2enlOY1lVTWNCeW85OVc2aWlHa3MxdUJWTWRlK0NHVVVabUNPVm4xdzhhMnBRcnBjWkJWNTEzNFVhVDhyazU0K040M2pQeEU0blpOT3dwRlc3NVZkUXZCcnFFZUd3amMxNTdsNmtXQkNQWTB1L3M4c1pDZWJJT0UzOUQzemFQUlV5SlFweXJNMGNZcUM1bC9EQWdQV3RiYmovbElxQVJoMXhiZXZWWlhjZ2JTNGsrVk1rUTJQN01RWUVpek9XTmFDYWpBanB6M1ZGUEJTUllBVzc1UVRlOE4vRzR3YmpwQjltcG5HZmpiTlNGdGxvbUxmQWp4RzQ4S1IzdlVpOVMvbXdiR3dyR1cxVE8zNkJHRk5rMW5DbHhMTk54b0V3bTBnR2tNeWdmeWkrU3hCV1NFZkVjb3ZKcm5yaWJ6d3QwcjNibERUWXVFdU9xaE5yZmZCdHhyMVhMSUVxcW1CaDVITy9WMlRWYlljUUU0TVpCNkRPUFlibm5ibWl5eEdMcFV3TGRYRE5JNHVUYVpubllUNXR4VHNDc1EyVVo0clYzNEY4RE9UUk9aRVFMeHM0MHlGMXczSUsyNlpoT29JNGtnVUJSc3pWQ2c2NTZRTXZ0T0lVdysxeU1wYWM0VmpCTFBxb0FnQXNiOUdrR1oyRDZhRUkxRWRBZ010TU05dkVDeXV6RHJnTlNFeUdBcS9wbEZXWFIxbGdGVkdFcGZRZkU5WWNIK0pWRTFwRnNjVFNBSE1LL0ZOSDFHZnhPbkJDZ21MNE5TSERaa3JFbWc0eG41MXB3TzZWSkUzWkNCb293MXJBZHliN0ZjdS9Dd3U1dkF6SnBEZXBWcUlacHloTjl0eXJ3cHNzL05UYjhaNkp2V0NJNmQ1UnZuMlBJV1dOMkFmb3BWTXJDeWRGbjZUUHdaZ2ZWUytQQzNRY2dYSTVWeUlRUEpEaE5QQVhsWWR5YzFIY28vTU1rT0R5ZTVacUdlbll3c091RDZoMVF1NWtvOU9LU1RKK3FOOEgvaE56S0NCVUc3RFFwMVdCWng1bkppTmU4bWdKZDNiblhYak5qcDEvenBKNTZVbFlvRXdSTzdENjU1S283OXdDYlVHWlBacWdZcU8xK2lkSEN3ZVgrNjVtVkYrNE5uRzc0NjVIQXcwcWFjZjU0dUJHa2tZcEpHRTI3WHhMVE8vcHBNVFU0ZnFvUUdUTVZLcFkxbGtucmhmREFTdUxNS2ppTjA1RTE0bVhvOCtlZHBVeDlPUUh5Ni9ycUxmK0Y5WGlRWEFHMjJ2cnBsM0k0b1M0UmQwckd2WGxuWmJTODltellMeUtITXZweGRpMFFpUm5aaHhOV0lPbUxDVk9sbU5jbGY3eEhnbmd5cVV6eXI0dCt6cmJEQ2NmS3Q5bWY5VVdVOE5pVHN4MTFtbG5OS0ZscWlIa3BIZEJnR3BTQ0RsZFdHVHNuTzBvWVNvZ1NteTIvOXNzVlorR0lUbDF1aHR3MGFvV1RHMHo4SkVSZ2JRRHU0WnNWNkRDTXBJb1k1YXJPUEMvdlRrVjlDUUxBUEhlVWNvYUdNcHF1dnU5NkRUZ2ZlYmFiN3RNbFN1WjFucXdCRy8xcGp4NkthSnVWUDAvbUVsRmt6eDdxQ3lTaEpGRVZHMUZvWm9nd0E4cmgvM1hkd0w1VXplS3VqYmRmNDJ4MFI2bzRSOUlZU3pnUjh1bk9xWWhiK1UzK2MyUG5xUG8rSVBVNDNwelZNOEgzOHZUaWxDVVpycUtBZ3NVMTR2ekp2ZWlKalBWREI1MHFub2ZnVjVCNUtuQXV5MjRhVW1UV0xqaVlibFVobHdvT0RvR1NTOUljTlcyYno1d21wQUF1K3ZWa0NSMFUxaHhuYjVRRHNSZTM5cVpaZVp0VjZRdEE0NVVUTk1nZE5hckRQajlLYjNkdEd4Um1kc1VzZlc4ZFJwdkRld1hnRkZnU052bUQ0RkU4S0lpMVFndnhSYUJMNVlRcHNtSXhTNXNadE91VE4yYkxsdWZ4ODFqQ0Q0SlhjNGpJVEozaDZYaEludnhQUy92bkM0NGlrdjVMVzVKKzd3T3l5bHVCZGwxQ013N1VVMG9sWXhnbUkzVEpwWUpidVA4dmxWdktmS2dZaGtIRVVxaDE4Zlp1N0thRHFxWTBuLzJCeTJjUTBtQ0cwV3BKaVFwYmozVkNHTlhZdUo0QVBMbHVJYXFmbTJLOGg3YkNDWE1FamhWV25yQmNaWXFVRUtYUXBYYmlsd0JZK01Ha1FnQVQyeTJWUjNtSVVtT2loVUxwckY0T2o0NFIxUEhLekxTcGdqL0w2aFV4bW1kYlJ6M3lyNDY0aXZhRjRBOTJKczZEWEhCZk9GR1JPbzZPcHlsVi82ajd5VVRmVWlBbjBCdXhHbTR2bnQycC9zYk5iTjBZQXl5YjMxTzFISFcyOWEzNWhVVWpCWSs0bEpwWnIwVk5PV0pLYkx2QnMySzJiSVZKVFMyL3JKdk83akhCbEQ0TFNmSWo5R25yaGxFbURqcFRGT2Zvdzk2WWV3aDYwc2FmOHdpeTBvY0hMYy92QWNSUzM4dWJqK08yN09tNzVBMmRRKy9uaU9JTkhjQmhaUG1ZSXAxdk0rQWx1U1RVc3RFWUNXcHRIZWdpTk1lQ0dJR1hERmdlZVViMXovcGFHYU8zWkdzMnlzL3RCL3FPNmxNM25zenNDOGFjRzB2N2NLbStGZDNiYkNhUVB4eVcxZFJEZHNKY0UxSldmbkM5OUxaRUNGYnhVbTg5ZmJaMCsvU09ObXhjSXRta2kyL0VJMjd1ZXU5S2l3cE5kR3pQZjZic2pzak9Fc2FjeE9BVUZCdjd5ZHMyN1JVYmJpeGdkQWI4L2FQZVhyK1lKWlEyaFNDUk0yVGkzcmw2a2VRVjFtUlM5WlhyakVpTHB4aWc2bDdvN0hlTlU2cEVDU0FKdDcyOVh6Zmx4ZlBBZ2Rlb0NoSzdvbW15eUdNUTRqZVVZRndzYmcvQkhaY2FLUEZGV29DZkp6eTRVZXV6TCszb2lJcUVXaFVkZ3RGM1JTS1pMVDI2K2RKVDBQMnp2RXhDbzQ3MU91bUhqWXdnV3lpUll3R3NmQ0ZxbE5WU1RIaHQ1NFEzNjUwYWFNb0l0d1NHWlpTOFJwRUVybmFiOXN1bnZlRFJreWdST2toMWIxdWt4ekdkY1Q4OFdVUTZ2NnRycmc2WXBmcFJZSHVNK2tlV3QzNnRMQXJadGdBZkpSNzFxVVpIWjVISTFENHBURktUdlhlNmlWb1Q4SFI0YVhhWE92bEN1YXAxQ3N1NkZrNXI2bm5iYkVaUXlXYUZoeEVISFF0QnJXUEhTcjZVQWE1SzUzM1FLa1hDMlNmbnNnZUUzM2V6Vmp2T28wM2daYkRMR2ZkeGxldUh2RlRwV0V3dWpDMHI1d1dpYlgzZUZWOHIxS0NMRG45eU5QRmU0ZWkvQVNNUjJ4TG5JbUkxSzhRRUcxR2RNc2RyZm9UU3plZFJlOGIxTWpSN1Vzc1BSQXFnTG5OS3VpcW5FUG5kVm9FTGwwaGVqVmtLUE9xYUlseEFleFZrOWMvU0huQTFtQTVXbnJxUFBvTFAzdng3QUprYlhyS3N1UmZCeW1tZ0NFZ0VsejgxRU9mRTViMnU3ek9Hdk5sakN6YytBWFJ4Q1Yzc0dTU0dpb0VTeEM1UExaazN0T2F5Z0ZJaUh4MkU5TnpVbVdtSlR6VWIwQ20wUkk1dW9hVzlOUWJhNTkwdWdoNTFQenBydmNoMGRXQ1lJcTBBT3Q0WHQ0ZkRJektmRkdzQUFxeEtyMUY4OEhuWWc4M0s2bEZ0WjBZaEdaR3lXNnRYdUluWmlOcTYycWV0SW9mdWU4Z0JSdXZQdnRDYkFrQWFpbkJ2VTZkaUtiTm9DeHNzTUcwWEJtNXgvdGpJd1RGWkNNayttcmZUc3NDbXk5emV3MHlicDhTNWFkalh4d3NDNzdOU1VHUHVoVjJ5VXJFRVlyZUYyMHJTVjFwVUNnVmE0Wkp0bE5MQm1BeEJvWVNBejh4UzJXaDRZZDUxVUFOWGQ0SEJOdjJ3Nk1ZTkFnMzlWSUJBRTNudzN3dTgrTStDOXR0YVBEUFgwT2lBSFg4cEhwbEpIY0g1ZzFFa3FTbUx4NStCM3BQanVpY1JBcGRiZHVZV0tVbnNjV1NWRVNNeHNpVmNVRlYvQTRiRXFkVituNnEzWUQ5anFLTkxFc0I2bHI4VCtWUU94UW9pbEUzRVN4ZWpVWkFQa296QlpxWFkyRWN3aEVVc2dTYjVpSzVQUEF3YjlPOC9HRm5xbGN2MnU4emFDN1J6SmhqeTJQcG94TGtFVURMNU1XSUtBaDRYeVpKb1gwT2kzd3RxQms0NVRiZWJvT2NlT1VHM3k4R1JoNGQ5TDZoSGdjWTZRWjV6ZWxDVlRmNnlOUEplYTBOT0xvY29yeENUcEtUNEJlcDVGUTlTS0Q1RG12NDZsNk5qelk2OW1XZTNBWm1NUm5iam9pajQwZkFXZkViNUFHakdqYnpzRm9iNFNWNm1rMGpOQ2FyWGd4M0dSQnY5cTZHR3V4emVrZ2twZUtIclJ2Q3hiNkNiRi9SRE4yM0luTFM3ZGRZQk1ZUHRjRjhkSGk2bHRkTWtnVHZUa1pNbStCUS9zVzVad0hhZUJLOXFjWGhjdXMwTk12RlVTZWhtcm1aK3JXSGkrTEFyVEtRM3JBTU44N2M3RzUvWmZVVmYwTFg1UnlmT1JmL0dFVnRLalVZbWZPRDY0U3ZSWTE1dDYyc1VCVi91UE90WUNHR0cxMk9ycjVwVkZTS3drak9SV3RXMndCRnVtL01HRlhwYkdmYjIzYUVIM1ZtRVNJL013ZDNheVR1WlhTc1lYc3JtalU3K2tPc29aL1AyT2hmZ0pHaDNQVVBnSXpYOVluYnVnSFNaeTYxMXh2MEVYclVUVG5nZkNnUkVpaWpHSHVNL291WHVHQ3B5RFdmUmdqWUJwM25URUludGdXU0M2RWsrUVJySlNBclJzWmJDNXh1QkZXWitlSjQxc1c2azN2ZWxCQTQ5U3ZidkI2VkprRWZldzJITTBRVGt0N3JsQzhpcWdZSnU0eGFVNWJxMWRCL0xXRDJmRVVnbUFSZS9JNzdoUXFrSU1qOU1YNzRiL1MzSDlwSS85aWVsWnRSTGlrOVZEbXdwYnFyZklJQ1pFNnl3NTZaOGN5Nk9GcXdHTGMrTkhlOXZudE41OWVpai9SclZEU29QSy9zaWpESjRpSENpbkJ3clNDU3RyNjlxblgvdmNRaVFkNU04S25wQWE3dkJGVDgwcHAwcW1DaEZDN01mWEh1RFdjSHpwdzByMW0vQmlwSnBOeHlRd20va2h4aWh4TFJsY281ay9yYjJ4NkZ0YlJQclJoYS9TYUk4ZUtrNFdRZEszMDUrNlpOQ2docFh3bjh4YzM2dEN2MWMxQzIzaU9FSzVHRGpUVUE5bHNlRTBTQk04QXpmUW1EeGhqNSs1aEpNWUtiQUEyRmNUQ3pQTEsxWWFZRUJ0aGU5Vmd1UFZtOTlyajVqN0VXejJncGhZMmRBWWFyKy9HYk5uRkRxTUh3eGxpRW4wTW9UUEZSTjVnUjdkQjNZOEZKTThveGhqcmV6dDFuc2lCSFpYV0NRK3RrOEFnSUNBZ0lDQWdPSjdSQURCOU5FaGFPeGVTQm5aR2t1cnJuMm1ROVR6UVhUaWNqWWlXQno0R3NHMEUxWmMzMi9XRjMyL1JmNmZPays3dUY3N1B1RFAyYThiOXYxY1g3UHRVZCszVWI5dWlmN05iblA4UHJLNzdmcGw5UG5WL3dmWnEzMmZhWi90MkgzN2ZxM3YyZmE4Nzl1dUg3YnEvWnFHNGYyL1VFL3M5L3pYenBQMi9ZTGZzK3dQL1QxTDM2dnBsZjAvcnFkK3JTTDlWdGZwNk5EYlhjZVh0SENUWlI3VWZnOXBMU3dXc3E4WVBLY2xnd0JRdHhSMHYvNUROY0RYalA5S1lLV2MrdVNKYWNNOTlCUDhObllkVENnSDU0U01DSTVJM0ZjSUtCemdVV3pWZXZMcVBHTzFEMWFseXo0VStGcElaVnFDLzIrQzY5QlBERGhCdFpvbVNrZnBXZXdyVFFZSmYwNlEwNStsQ0UzWWFUMTlLQnBadzB5cHN2SHBOL21HNW1PblRyTzBaM2J0SDRaQzB1R05rZVRLQTA1RHl0WTJSb1ZxVm9xYmZIcEU5b2RHYUJsWEw1dmNMeWlIUlpNNFNGZVRhN3hZcm1BVllhZkVVd2Vtc2JxbWx0bnN0Q0JyQ0gwZ3BvWGRjN3BHcjNtNFVkc2ZlNzJYeis2MS91dmZFVGxIVEVvR2JzY2J4TktPdmsvTUowV1ArSFZBNDdGM0JVL0tVWHo4eWJJSDh2MHYvM1c3a1NTaWRBdC94Wm1IU0ZXS1JRNWpwT2R4SmVIVDZzVVI4R1k0c3dZUzVENDEvTjZhaXM0aG9ITkxsN2VETHJFenMweHgwdGpaL3dmTHZkazBZR21BSXpQOFdMNlpFOXQvanRKeWxVVGROVksvbUFIdE5RN09xTEsxNXI1NXhPV1pFYWwrOXFJTzZaSDBRSHNQWXdBd2JwaHozUzBoTDU4L2E0TnZ6Wmk2OFBxdmNlNFFETWFtdmQwc2R2WFNXMVpZOUpMN3ZzaGkzWW1SWEdKais2dnNGMGRicWcrTXFsTEhPRmU4TXNzc0sxMkpqWkVIaytaalBUekFnWGY0UUs0cUY3T044T2xIRGw3eXpFVzdMc1BhRWVnYmZkM0NadEJnbHVQN053YXROQWs1eFM5NnJObFlRQzlYd1dkRmQ5K1hBdk9RUFVzQnBPanFTanpINDR6RjFUWkovdTdIL0Z3OHdiTWo1ZWdoN2dXckFoTWJPN0l2L1BDRjJYN3pnWjJxOVVsZldMMW81cTdJdVVHR2VrbHd6WTM5bDdqUXhmRUlSem9KcnVkaDhlVVpaaDR4TURZdmt5RnRlVUZjZkhibkNNZExSRFdOQVB4aXBqS0tqZ21TZWFmL1pOMFFDaXFoVFBKRSt4UVB1aDIwcmJzR2xJYWUrak9RY1p2dXlvc2wxajduRXNJVXhaQnRHZU9QM0pqb3k0NVFEWnFhRG8vK2VHeWt5MU1lZE1tUnNpZEkydE5xWHAwZVFpbU5aM1hpV2ZUSk9XTW9WRmJScWhSbTJwVUdKcUQ4UjJObElPTml6MExsdVBhWW5lTWc3S1VUVkFFVXdDV1psck5hcC9ZSlRlUUFsT2dtalpOTlFLSC9TckE0ODY1M1d1SURGbEpvVkZtZXRRSDFOMTBmM2pKSkR5VzN6d2hoNHUrSHNnd2thdDdRWm5EVGxMTFM1eHZYR0ZpcTlidys3c1ZDbkl0OGk3UThrUy9WWm1jRmRIem9WZFo0Qmw2S1pObUV5UGNNMlF0d2RLUDNESmpBUGhGZTNJODBjZTBtM2Q2aVBXbUQ0VEJjUDI1bk9VcEJOTHRuNmcyTndxM2tyd0RIRnc4KzU5SEE5Yk93cStrQm9UbjZORCtoYjE3NThidDBUbVZyMlhSYmppUFJTaHZnbG9RT3owMk1haSswYUl3VXZJOThvWHVIRGRpVlZCQ1g4OXp0ZjRabEduWUJMVUU4SlZHUmV3SXdNbVpjTGZTQlZPV1BzV0ZiQzZ6SGFBNUFHSXdrckpWclpGODJjT0NDYTluUjhvc0hUUU16NjdRcVVJMVZNVnJZZ1VoTHZUOWErWVVQR1ZEaWQrMjVpaU9SUS9CdUVpY2VGWUhzSTVqSEIxbzhnWDdGd0VZaXluRXZ2ZFZUcVVlbUIyQ3FjS1lIU3FPbUwvRzhjVU1mdHBmNTNJWk5tUUZuSld6aWdiK3doaThjTXFoSVVxWHZ1SHY0dEJkb1h4ZW9MbWpsUHVWMmdhdHBkdENTNkFIVSs4S1VlT2dKbXdaRlhoT1RsTzEyNzQ0WGpwZ0h0TnV4ZlNjNWtuUHJBb3NuVGY3ZFhXcTdTVDFtRXVkRXJ1TFdhQkN0aFZNV1g0c3RUOFRaVlNHMSswZ1lUaHp4VjY0WTBIMG9ibng0TkVtY3pxenJHSFpISUw0V0lIL1c4emlBdmxkaE91SHlHUHBVcG1VUFZndG9ZcDZUR0J6d0ZOQ2ZNLzY4L2tuR2xQZWNtcmpMcXpZNTlJNE5lVytpdXdPR1RQZ3l6cTBya0hHcktmeFFTQ1M5eUl1eld5dUhCM0E2dW85U3VvZXNqWTcwZlJabXNZZFBPVHk4RWJPUVJCRXRlTEJXZktJeHBGekFjaGs3QzJSb2NGbVRNTDVidHUxVmhoN0lsS0pka2FmTE00R2IzY1E2QnpCVkpaRW12dyt5bm1pZGkxV2RNaTdVS3RkZHFZTVJGalA2TGhrZUJPaDZtUWg1aS82dWFWYjBqWmIzRmRJSU53MEJIKzZhdHdrVDIvT1NybXRSREV3UVFmS1VoMjVzaEpEUFdCSVdxV0JiKzR0MG5Mb2FYRUN3VUFhL2xSelhyWUE4N1BQTWNYdy9paUVLUkszWW9DMUJvYkRENUZVTTQybUlTVGJCUnZqK1dTQ3ZaaldYNVpvTGRIMDB1TFQ1QkY0bFVEakRYZ3dMR2xTSnM2NFR0OXBQWnJpRS9YSDNuUUR5T2pWNjEyNmFDV1ZEQUR1dDh6UjVYR0VMMXVhRnNxUENnajk4c05hbFpkSWxFbGIrQnpwbit2YlNXWS9KdnFxbWIxZTljaWhOZFpmMDlqS3h3ZmVmSm1saEhJa25oYWd0ZTAyMjlrY0ltcXBoMFZMTFE1akNGR1JiTTNvT3RYR1ZSV21aQzBQamtJY1NESTJ4NHdJOTZ4SktwUHU3NHpDcEZmWFJsNzZTNjBoU0ZXWGF1NkJPNkxWTTcyODhEa0JWVFE0dzB0UWo0Y0ptcUYybnN0ZGpmeURJaGE4eENvOGdHWDBYTWVMT1d6Y01OUDQ0TmJKbkFIT3FYMWpOeGNhRG1UMnFiZ0Rrck1JQTFpNlJmN2JKMGFEVTgxempZeWdEOGVaQnlCaGhHcHBPS01oc3pHaURrRTdabFdyWHpFTGV2UTZTMHlCcTVaWEQ1SFNyWGI2OWQ5TkEvM3kvQlUvVWRsUWxxTzBoM256Qzc5d1UzNFJSWnR6NUhtTGhnM2ZiREdpMnVJQnlDMmdyTUtWeHFNaHRsS3NqdWhuM2g4WHQ2dlliei9lb1B5eFVNTzM4ancwOEVDS3JWVkN5S21lZklFdVQxbzlFMngvdjFBd2Vvb2lVKzZ4dHROeHozbHFaUHBrM1BmRnlEMVR3RCs1aFZycE9wWUFrK3NUbkU3bG9uMjJoNmo1bTFoK0tNNUsxNFhpMm1WaCtlMGdvWFpEeTBoV0ZPZnh2OTIrS09oZEF1b210L3VBNkJpR1daVFAwY2RjUE5WREhyQWFkVmNteTdlYlo1NWZLOUhCWFRZOWlDWWVodVI0SUhmSko5bTU3TTIzdkJxRVI0dGNxZUhCL1UvUUFUVUs1T3JmY29oM01LZ2R4aTlTVkJWMjd4b295RzFJMFQzN3pzUVlFVm9PRTZ5KzBlcEQ1QUNNNHhTblNDZlVRc3JWRiswaGN2Z05EYmRaSld3OVVXVkFrS01XOGtiT2xEYjU2Snkxam14eGF3OSs2Q2wzaWRHNjJtUnJsUmZ6NlozRlBYSkNyRlhqYy9iMHdvMXBQMitjbDVTWGpnWWxWOFRuUTVFTVNKelgzSFdhRnF0bmpBM3h0cU5CZnRtMXlSbStQWjVFbHFVZ1g2Nys0djI4ZXIzMGRrWjBsTkVxWHBwL2FjM0ZkQUNDZUVSMG9LdmhRSXdyQU11UTIyZ296MS9ORHFPQi9semxUSlRHSWN0TUNlR3hxNkloMTdMemZJZ25CNjRuWVBwbVltTUVpamFwSlFvcy8zK0VBL1J4NUREeG55clB0UXY2d2FRWkw3Q0hvQkFOanN2TkNraTRHd0tEZkNHclZNcDJBdmFqUFg1Qmp5M0dITHIyLzJCMkRCODJjMXczTXgrUU04akdlYi90WnJncjM1TklXZnBXbG9zSkFLOHN6VjVHb3JuRjdPWXJFTGVPeGJuL3FwejgraWVoOFhPNFRmcWMzdDVGczhaZ05oMjdUUCtLNVRQOGNFaksxVHBwS2E2Q091NCtCQ1NYVlJXd0dTVDliV2RlRG1CdGNyVjdlSFVwdnhWUXp1NzdUemVUajRMd2toOElJRDFoamE1Z0drUmhnb2NUTVE2MllsYW9KS0srN25xYVpubWIza1pVTjBMb1gvUXFmRTkyaWZBWUtRbzkvd1AzSHh3VFN6dWNxMTIzSSthSFpYZ280UlljdlVvcW5xOUVsMzRNdTh2M3FmejdlbXVxVkNqL1Z2dy9QSWY5QlFLNEtRaVd6WlUwbENKOTNLUXZvVEpHak43M0hFaXNkVTJvOXVJTFl4QlEva3pCdEM1TVJudUFrNkZwR1F0WllyTUtVWXJKZ3ljc0RrTVg3SlNhVFdvbmFaRE1CenRFWElueC9hSXZNaGVVZU5WOE5wdUl5ZkVjYmxvemZSTjRST0pCcmFLbk05WEljeWZVN1BGeXJiTTdwNXFnRHBtNUtyRG1XQS83NjNYK1Q5UDR4Qk9jQi9hTW1OdmdpM3ZxOFJwU0Z4c1hybXpUUEZQNjdId3dEd1FWRWF0Z3dwNVRRb0s4WkhuUEM3OVhhWW9nc0QzVzlraW1aOVdVcFBkTzhDV01zNDNpZ1ZZNk1rcTRGcmt3NXBsWmh0NFF0cjBoNlNoMll6eUVIemZqMFVZZEd0dkNxdndDOThsUVNnSkF1dGt4a0RVZ05MaTJ0dGhiaGxoUk1TazNyM2NCekZnNGFKV1Ztbm5lSmhVV1V0UmF0cWJCL0dQbnZiR2drS1JzNHpZL09Pd3ZNWitYME5nc05tckpPV2xlZ29neUYzM2NIUWNaZnpNb2VldHFWaTJBZ1VnUFlUeTZkMGFWYXE5a013V3NPd3hxeks4QWVPVjJWNGhOWWF2OGNIS3VPVW4rbUlrakpXekNjM1A5d3AzekFCbmF3WjhKK1Rob1FCV2dOU2tsK25UQ2pRVHdTcVlCL0svRzJLS0xhY05ZSlFVTXZhWkREUjJyM05oT1l6cktZYVkybEdVZi9PVjJidFdQbERMYnhORnlUYmE5Z0VCc1M0d3ZNdzh3cWxZK0ViM082VUFNbG0zR1ZjdUhjN3drMjgvd0lvdW1hR0JpWjcvR3hSOUJ4Z2ZjQnhjbXlKR3kyaXRralJMSnh6NHdOeURIczVQMUFpSWRFSHJ6ZWZ5Y1Nqc1QzVUxDS1N6M3M5d2RzT05hNlVvRmZtNHpYajZrdCtORmFoNU1ocXM0VGwxY09vNFhMdi93UFkxbUIva21XYThjODI4UVgrbFpEODNHcis0S2lZVWFiaE5KaE9UeHRnNXRwVllxdHQzQkZxeEF6Wkd1Qjh1REdzNTkya25ydjN0UG81RzNkTjJuS1hETTM5TllQcXMrVHQrUGNqM3N1aGU4anl3b3dVUDh0M0pLYUZpYjZnNUxaclg5UGx1ZGgzZUlYVlAzQzlIeVNGRjhTZmJOL25KSk1Hd0dCNnlFaUVkalJUd2E5MC9oUCs1TGtuRGYzRW1Tejh1ZUh0bXc3L2VpZW45VitCTllHZFNjZWlsVU1rVzRRaVZrNUc1TGhZd2xEVHpKZkdtWk16cFQvRXRUWXZiUU1KSTU5ZTMzSU5xcDhISUdZMkFrdWZFQUJHK2k4V3BvSVJmOGFYMG9FVTMrUWpYQjZCRVZEMHcvcWNySzkwMHQxQmxEbldGWFprU0pERXFDYjIrSFZRZGxoZkh5VUg4RTBXNVBGdnUxM1NQenFLSHY2R2d2S1ZLS1F6b0ZJVENLZUdFa1RzbkFIa3FKaEx2QUk5UHFVdXdkeS96eGw0L25TVTloY2YxM2k4OHkvK05rZXh0cVc5WmR0ZHBNbmZVQy9rNnhscUt5em81MC8rQzYyNXNqUXhyL2RBSS93YzFURzF6SkNHd25WMjBkNU9FVytyRkJiQlRndFROZWdGOXlCTUZwOFdGaFVCd0NLZ2Q3NHJDWUVuUndUTkYrY1dvWW5qdUpoQ0Q5U1d6Rlc5UngzRlhtU0dWUlNUQkdBSEZKZTAyd1JMQzRNL1hRUWlzWmFodjFxWWt2NHlUK3o3Q0hWSzJwNU96SnhsbnRQNnJmTkFqcDZtNHNGWkR3dzBXNTdGSUxLL3hucVIra0t1S1lPSXNWNktuSG5mNjdiUVFrSFR1THpCYzFOOUlIRXd0UXFBY1hGN3BOVGIzUTNXMk53YkZhVEttSmNmV1BvZlEvbHZ0VXYzbjM5cVdWbEtFZExyd1luc1pUdW4xT3pEUzFTciswRXFDTTZrTklndDlla0dOMWtEVEhQL1pBRjZYVmJqd2FRdzFTcnF5U0ExK1ppRExnYVRva0JuM0ovbnVKSXJFbjhSKzFVWjF3YXUzaGcybVBuWUV1cHd5Y1R2N2VqSVk4Y2ZVTmljaXh2cWpwUlNBVlR5RXNNZ0xRWHczb1JuOVIvZ1NHcENQTnMvR0ZBNlg5Zmw2Nk5PWHFtWEY1b0Rib3l1MTA3T1VMR3R2bCtyL205RC9TNytCOW13aVRLOEpVQ1V3WEttK2V5aTdpVUtKb3BMODFWMHRja09ocEQ2cjZxc1JoR3VRV2JzZzVKTFZ3WDZiU2xyUFlHcmRMN1ExS21mSEFYaXVuTjZZMkpUTSt2MERBMVJoaUw5Qm9jRVJoM0NnVEdZM2VWdmhmK0dONnN5emtkMDc2bGZEdTMyQld0dHpPVDkwRG9tTWVGR2JTUzJBNnV0K2t6dWdIc1VuSU5YSXdVZ095eFhjNHFKNEcwUnFWMWNjNlZ0ZXJTck15Z3gzTXBsT1FXbW5OUnduWG02TG1JRkZnZUVUVEhyNmE5NUpRWXREekdFdDVCVWxNdEx1bytNelNjcFhhUmNkWG0zTEVJRnJoeDlVTzd5SGtHUU1ZNXB0VUhDMU42WXJkRW54Z081Ykc4YWRXVnhsRDVYN0czaGNuKzBSWC9RRTZodW9YZ1BQaTFXT2xmcStvRnZtWjBwZ3QxM1lKb2FtNlF6ZXpyRTNmTk5yc3JyN0hHTUtSejlCRjg2ZHhkVEpDd1FUeVN4ZU83S0ZleDRLL2dzL2MwblEwNlp4di9SYjRkeGJZMXNQUUJqY2wrV29tZXdrSTFQSkFKYTl2YmhNV0QybUZ5dnRGUG5XZ2podUh5ZXBxcS9xNFZZV09hek0vQnl3amRQNEZUYW13UHR2VXpxT1AzOHNtVHF3NW1ubVovTUt4T25LMDhEQUJWd3lyRFNRUDM0bExEZmdmMjQvb0JOM3NnNjBEMVVBb0E2LzFIMytUOGlxOW4rUjRaQmNzVlhmcWJCai8xUW43bjdqdUVtSjF3UEQ4V0lZOVllUFRTdVNGL0dBZVhuM0dGa2V0Y2VOblBBdXE3L0h5dzlGZ2lvMndzS1hmRXRaRzRxSVh3bDFhNVBIVFhMZUkyendiNExMSlJuMU9mZjNiSXdFRU1XSkhFQmdnaVJLQTV6eDBTa3I1aElWU2h4L2doQmprVkMzbnpXcHNwZURpbVBHWE1OZWl2SGI4SkM3MlhLOUxRNDU4VUFCdGp2TTJmeHppUVp4SFZvLytFZ1JVM1g3RWlGazhMdS9Ud0JrTVo3em1Sb1N3ay9tV2dacGVueis0UlFRS2NoZ2V6QjdhbnN4QVZxaFJyS0VSQ3NFQm96aXEvOWpzRFlkY2VxcUxvMzNKczdBcUtMb0lJR2xXWWkyNThpcTI0VThCZjkrSGVlbGc1RDNSM1pwc09UaTBKZnlpcU53ZVljdGZTdEU0Yzk1emhkdGJNZ2VtcVdLOG94WVZHcU5QRW5aRHpFQmVSUU9WZzlGRjJJTWpZVjVLZWYzaGNDUFVnclY1L0Z0MnVWcVo0U3ZnazBsSWY5ZTdVcFA0QTg1K2NnQlByUHBKUEpWK3YwWHZ3SWhEejJEWmpnbG1xOGZWNkwzWXdpUjBRbXBiQlRMZVZjSVdEUEJzenNUa3kxcy81cW5tbnl2N3NhNzV4cVhOcE95dEtSc2hJY2g0RkpOeUx1S1h5b09lWlRMemdzZE0wc2pnUnVETyt3bmMrMWQ5U2JYc3lsZWZUcithOXkyTlFmdUR2Y003cmJDRXBSRnQ3UGVhYk1xRGxVcU44YVo2OGJ4dHJnaXdzaERIMWFOaUlXQ0VSbHpYVjNXNXpkeEdvWDVTNm15ZEpQNmRLMjE4TkZlc1lVc3lXVkNKMW8wY2pjNDFLM2V3dFFaQ080Q2Rxd1lBSFpnUmtvMFdha3ljNDhNUlY4N0Ivc2ptOU5HQ0h2UEVHUTBRUDJGMXRoY2JrOS9raFNmdEljQzZoNnErTEVyai9hanYvSW5kblpoMm5EbzY4bTcvbkUrSW54Ky9VVWxMY1ptQkFBYjk0SjJvNmhQa1B6NXZmT2RObm5jM3RoSDhnMVFOUE4xZlJXb2E5cWs3RmdjMEEwcEM5ZEJZQjBuNzFZUkw4b2pUL0NUODNXWStwc1c3RVZmQUNyRVlHOVhqWnpJdS8rRXRFQlI0L1llZHpXT0FpNXcrMDJaS0Vhd042WURwM0RFRWlYNTluVWFONllTNEcwbEpVYW8rOEw3N0xYbHdtaGw0Q2oxREkxWFlzWDJyRGlXdjR1a1JZZnA5SXZ4QUdZbzBOMFRqUWNwZW5NeTZMaFdKaUJqSE5hdE5kVmxJUFQxVmFIb2hBQjRPQnRiVk95VHJreG1JdVpMdW1XUkdhQ29YYTFSOThlNkJLNzk1cld4QWFJQ3Iyb2hYdlVLVVJCWUJYL0dISjFFZS9wMEYxeXc1RTJqaWVCd3crL3hRTDBZMTdpUXBtK285QWNXMGlKRFQ5ZkxVRzVZUTltYnJlZU1vcFQ2ZzRUS1UvbEtpWE00M3J3aTRoL1hzblFJcmE2WWNaRTBaczA4WDBTaUx4YmhjNGs3NGhJOFk2MnJwNE4yODFrdCtneXAzMzRhL3RyS2hCQ1BmSTljUGViNDVRVWtDZDJyWEY3WVhQcE5UdkFvMVY2bjI4MXRPVjhkVVdmL0tSekZuN1Y5YzhISzh0Umk5YkJxSVhzZEJNUFloQmhnZk01TDJpWXM4YzFEK25PaFA2d3ljcWNwZGE5T1Q5U0NKVFhmOXEwZEVENWtwdkhKdHQxU3dxYVlUS3Y4MHdCeWxYVm4velFzQzNlZGJlcWxCVWFGZVV4aEpVbFhRbzUvTTNYUFdYdUYyenVORlZyWUhiOVcwUzBDR0YyM1h6QmRGYnNIb0pLWUNkNzE5ZVQrRWVKSERIUi9SQm1NRDBRZmphTkU3VlMvMnYzUXFNTWRrMnJyWVIyN3dWcmlJcnVpbXZHSzl4NjliVmE0T1dsR3o5aWlWMjNUQWsxd3lDZy9UT0d3RWFXcWM5T3F5OTVrUmFlM1M2ZkQ1S2R0b1VIYXp4UUtkTGI5WjErMldLRDhTNGR6Z1NiaytIR0d6ME5YNHFRUmJmTzNCcVVXdjVBTVpDVU5icVVkWk5pRFN5NzdNWUdaakJWWlZnNjQzNlN1dUpCVFk4anMzQ2ZlNDlUWkg1RWRORXhMUm1ST0pwU0liUCtJelJuckR0RWtoelJBMS82bk1IMnoyS0VQN3FUS1VibXAyRWZRSE5MbTNkeEhUK1JMTitLeDV6Qk5XckdpclJkclBtKzJUTEUxK0J2MU91bWcyc2ZwRzBpZ01oKzVmdjh1RG9pQ2U3eVZoRGRJOFVaVFhqVExZQ0RLcGRURjV1RlhIU25FTUl1aGREQk5ISjJueVpsMCtVdldtUi9YY2RZNC9oQ2JEbGtOMzhXd2IzZTVyTTBTN2s4NXh4a1c2WWNsa3UxUmQwdjVoanprUEdSbmt6WlZlbTRPM1Y0Um4yMVB3bW1VUUw1eVVQUSt6bnJLZlJieFBCb2pqbFlBRENsN2xxVEpqQlAvVWdaT2ZBZ3lHaU5wS05QOWxBWlVjckN2UE1rUGNhUXIxcHFCQlp0WXNreVZQNis2T3N3VjNtZDZjcDNOaFZuU0hFVldJc2tsRUVpeU1PWWcxcGp4NjE5ZGtlT1VZTHBoL003VUlvWEk3SVNYelFyRmRuTkVybWVyM2tDWU5OTUtFOUlMQk5yU1dkRXUyaEYvRHpFQWdveDJXSFE5MXkrSHMwbDFURU54bFNpVk9BTmZJRjdZWjcwRGVLOGtrNDZudElnc2RQK0JSMDdscUcveXFuLzJKdmpLNURhUm8rZk9nb3hjQmlxOWVmZ05DdXVnRGRubjJIR0k1NG9Gd1o1Q2NYN0h5SURncVdZQWNrL2dhRGNhVFZrNzhjU2k1dnRuaXlRc3NjcThFUVowZ3VIS1NLOFJQZFBTcjNuM3hHWXI5WDVYWjhwZkpkVFhOYlI3TFU3WThjYWRKMmVwSlFkRXZScStZc0d6ZmNnTVQrV0V3d2o5Mm1TY2tzbkY5MGE0UEUwZm5CT0puTHdYVWtvd1JIVHlESDA0UlpwVGxQcjhPenVLQk1UT0hldHNtdkJ2OVR5dmszelZITjlBZ0N5bHBaVmd3RW9lMmJEVzFxNk9DYU92T3lnSHVKU29uVTNxZmZidkxyK2V0SGlkMnNZOUZuVjFJUEJqTTRPSVYrNDNRdmk1TXY1d3dTL2VuNU4wQm5SNmlydG1tRm9zMXEvZ0x5TnB6T3ExT2JtOThGOUhGTXNkTjRQOW9ZTERhcE5YVkhWY1hwL3pWMXdSbGJSL1cxR3MwWWZOeTk2eUVzZnFLcFMyZ0tPN2Z2UVFoN24zUkRIQUx2Ukg3akJWeWQzbjJjMFRtbkZQeUtMSVRDc2JJVFZUT3FjM1FRTVl5cXVIYUpFUTBYanczTG45YWpjeGVSbk0wZUNvRGZFbGVxbFNIcGJnM1dDR1MvRUJNNGhOQ1lNVXFHVmJob2FiSVY4dGI2OUNwUVk4SUEyVHBKUzdlanRUZUZlSGRiZzJtZVF0bVBIb2FjT3k2VUxGbkp5T0cyR1c1VFQzL3V5NnpFVmJRbExMRmhSS3VtVWV5TDVVZXQwZXFTeTFnQTdDS2ZmVG8yNXJ6Mm1iQ2lyNzhHa3pTTERudkVIZTlaWTFhY3hWQjBHdWZpc3RVaXJRK1pEL2JJdFpLakw3Uit1OVJiMzNGQmlWTmpLR1B0ZlRsYnlacE1iUnB4Vmo2M0hIZnhVN1V2WTFGTjBQNFZOckVRWXZhVkhjUU9rZnpONmYwQy9rdjJabHh5NElJQjdIM3YzRkJVNlBBTGI5Wmh5Q1MxUVVaOHNzcUdlTFdzQWp6WVkxTHk4Wjd1dVJFUDNpcEk3M2JDdm5oS1ozNjVhQVFKaXJ2THBGRUhydUZYbkswQW02Z053ZUxmUWRaMFBmRFArNnJRUVQvSDJrc2RLMHQvcDR5TXVhd1FnZzM1bjNNRVBqWjlYaERJSlFER2dyb2lhb1IxY0svb3gvTm5OSk5WZmR4OG9Wc09uZ1VVMEUvWGlPZ1M3dGsyWnR2VVkyN1FDQkNUQVBkdS9JKzN1NTZIbVdZdFdINnhlMDdFK0YzS013ZVNJREVpM3hxcTByV1FqZkZQMkdVOTliNXk1eU5KWGpXMTNqbncwRURvY1NEQU5sT0RucnRad3oxL2pCVHBSN3NoRHU5VGVFcVhNSFR1bzRPQ3VIM2hPVkdmaE5Uc0UxUGVFQjcwVUwwZTJUUTNlN1RzdnpNZjUvRm11Q2VMdWo3aEJCS3FobXdnWklXV3c0aUpHTkVUem9IanJtL2xpWHJ6N3ozQ1NELzRZb3p3dFM3YjBjR1Y3em5SZjhDSGh2dDVQcGRsU3JIS2huMlJ5aTc4YTcrY1c2c1dlTUZFNDJzdDBkcW1teU5JVVAwQzdvRVNjWVNXelJoelcrbVpBWExmNmF2NERlYVdudkNkRVdHdkpPeGNITVMxcXdjdHFaVm82emxibDNYZWVyM01xRjMxTXlmSlFtV05IaGtVWmlZMU5kWDc5ZGlYWFoyMnArOU1CSFFFM09GT3JveGNMR1AxaTN2bEt6MGJLYmovZm5NTWkrMk5LYXJFaEkzQURQM0sxSUdNS3FuZHRCalVKT3dCWm1jK0dhU1g0YVV2ZWdDbE1VWElUV0JtT3hvUEFUMmhHTFVIbzRKWFBTZitJMm1LME5FbXhSUXhZdGJ4SXF1V0tnZ0FvVmVGcG9zbEFvMmxuNnZGSEliaDVOYi9SNmpRTVZXN1hTQ3VtSDNsU3BkcTh2ZXpVS0VTRHN4NE4xNFp0emxXSkY0aVRQeUxBZGw1RkpLT2o2Z3U0K24vZWxQQTdidXZPcU92anB3Wi8yd3VLNTFPVkk3RDliSTJvRCsxbUNycEhua3plUHV4NU5NT1RBNkxIY0FZM0F3MUdWbmJ2eWRoZUFaN3FuSjdSQm1pT1BIR2FKcGpPSlF6ajY2TEM2Mlc5a0ZSaWk0VnErN3BYYmpGSnZkUyswVjc5UGlGaTN3b1AyNTcwS2owL21tRVhQdVRxZzNVZUR3RWtiTVFJb21hYk9yT1FCVURnNHhBK0I4cjdtNzlUL2pPZG92ME53SDR6dy9iUE5PQlBESmpoWldFNHllb25xODdaVDgvaVA0N0NYVHVIUnQwWFY3Ym9QTlJ2ayt3NU45NG1aRXIvYlZEVVVpVy9yRDdGQ0xDYytnL3dzN016TEhuejhkS1I1M25pMEJOUWNGOCt3aWMySUlUY3VmZnJ0NnIvZTBSUFdXZm9RVkxjS1FZUU1VZ0taMHdMNmE3dlpVNHQ5TWNTU1BOc1h0RmpqYXl4c2I0a1NJNm5TM3A0Q1JHZzdVQnk0N3YxQml6NkI2TEh1UnhwdkNHVytpS2NiRGJ0dFowK29QdUpUZnFzR0lyRWRLdUR1aVZPOHNpYS9HZ1VCcGZsb2V0bW42b0F4dHdsQ09wZExUSG8veWM2WnE3dFJmT2RYcFlDbTdXU1p4MG8xU3ZvMlorSCt1TGFuWE9TUmIzbXJOckVoaUhJSWVPZ2pJdzdLL0lDUktwUHhYc2hFenBjWTd5b3Zaa2FVNW5FbEtSR1ViTEtOSUQ4Vk5jODdCLzJBemNxVE9uaHpXQ01HMXhWT0FyZEo3bGtKMkY4MVpWdzFidWlYcHY4TGdGUWxHVGZtTTJ2Q3Mrem1PRmhUbVNCMkVKNk1lZUU3Y1pjSjQrZ20vUkFtejB3QmZwL1UwTVFhdmZxZGNJSFQ0ZTJOMUd3MEFMa0lmaFlKSVA1YzlFeE5oL1pOYmtSR2hPTmFwdkJyOER2dGp3bHJNVmJ4V1JiNm5veHNrQU5WSkNvVlo5YmQzTjJsWkxXb05LZDhySU10NlB4K0phNllZOUVNeVloa245QnpVcHJvSzkyeHBnOTlzVXhoY2RuSnZzL2JYcEdacW50VTdkV0U4VElEUlZ2dWdOZi9MbUptUUxPTFFmTXZFYjFYcVBHWWR4N2NqcDBHRU0yWmlqSFVyTUdHdDlPOUVZb2pPYkE0UTVidkFoYnUwSS94Sk9LeVBJK3d4SkFqd3UyV2w3c0FCYXBBYVFZaW9yWEdYRjhORndWL2dpOUg5Tmx0aW9teFhJQTNpTkJsMmJZNDN2eG5MZDhmZHY4K0FCbXgyUWt2SEdPOVNZS3BhL3dUSUtrNVJ2dUptMXlzM3lzVThGUFZaZklLY3hIUzhwTDIwQ3RrVTUvcmlEMmYxT254QUQwczZiL2s0MHZibTdScm1ZRjRxb3gxdEpESURtMHFNbVoxREVUaEFRSUdiR3Z3YlhpdWo3aHo1TEpHMW1sUWlCajB3NXViZmlzUXFJK04rY2pZN09iQXJQSk9PU1Q5WVlRN28yS1JPMlFTZXZxWjVEbS9zQTY0V1RyRFQvVkNpVVREZDlpbU5sUnNRSG1aRlpOTTJmUnJOb1REenpzekpJWldtVGlhNFp6OVpKVWJwbitYZXpPL3ZKaXBsdjJRWEw0bWU3MGIySFNqSmRiZkZDWHNMUkc5elZkWVlWYmQ5RVhDd3h5ZW1RZjRQZUxoOHJJZzljK0dZU2F5dm9VenJEYk1TL0ZmaDdQZTNvNDlDd3lNUWJ2UlhrL3ZmRndqbVV5L3BUOE9YZVZwNVk5VTNjSzYwbm9WWmhPWVV5NlFZaE43UlBxRDVmWFFpUitlMmNKeE5PaGVEL2ZPTEFZZ0dmcUNLbXpvUlF3YTFqdXFteHJCL2RoQ0Z5c1Jhem1HM3N2dmp3aGJGMGZVVFloc1UxS2FLK3hwb2Z1YzFhSU1ndGNDUlVqQmMwYU1sR3V3Z2dGd2xtUXB0a1RLY3FxS3pHU0ZkUnhtNzJ0NzNRNmpUdmZTUmo5Y01yUHFyTEhYTHFKMGdpMGsyYVVPeVYxMlpOcU9LN2FFZ0ZyUllTVS9KQmpVYmFIY2pjNDJJR2ovZmlOYUprck83ckFNZ3lvekZDdlUzVVoyU0twL3dSZHVCWEt4eWZRdFAwcHNUWDJiMnQwY0lNbmEzNjJqSVBlOEJ2TXo4ZGFiU25wOFFGakpxTUhJaEFlSjJ2M24xaXovNlk3SHI4a1ZNamJNMHNUVmxsRFdiRmZSRUNZTkVRVldlTUZYUVlKU3YvVEFFUkkzeElNY3MwN0M5T2E4TnVqK1ZxQ1NoQk5ZWWhGcUtPQ0FFTGZZb1pYd3Z6OWUvaGI1VVRLS212a3RSK0lncHdjd1BXT0o0Y1FKVW9zeTEweUUvSmVIaFYrUHF5YS9RMEtoRmpMS3poVm10bEIyYWg4eEVLdStjc1Y2N2RyVHVSUWJzSU1pZEdhT0owbG9mdHMva01GbkVCNkhKeWcxV3VFOGVzTUZsckZNa3g3UEtLdzRyakpwTkIxTG1ZOUtWWnk4STNkK0o0NWQrNWVhZVRFTmVJTE1peVdibEdvL0FJWGt3QTVwRGtsQ3B2R0JBWWttNWpMdmF5UFhGU0plZVZTVFY5N2tGNHZDMDJCcGZwanRCM0cyY1Q4SjBKQVlCTW9uV3RBekFvWTZKNXU1anZWaENpcVhGQzJLdzE2cmdLZTQyZ1VJMG8vdURFN0UrNU0vZ0psQ0FtY2cxa003ZUJ2emRxVWFTdVE5d1hpZlJaYVA3cEVPRlBmSi9UdGNXVHdLVGZOdWUrWXFsVWFYSjBkWllaVjJUdXpKaDZueTFrMFNGb2oyUG0yaU9mZ1dnTWEwUkNjK25wd0tmeU9jL0tPaU9MaEFUM1ZzbksrdWNqaW42bDVWOWE3L2c2WXpEdmphWW55ZmV1VFFkbUtsK1BUSE93eVhpQm9vbzZGamF4OGVQV1lHaWEwbmV0SXNIYnB1ZHVpSHJDRTQwMDkzeG03dFFXc2NFcUVWL2dxWHQvZDVFMm9Cay9TVzhVdTJKbi8wNjdTLzVoWG5RM1pZaituaExtZjcyN1N0MHZKdjduak1nV1dxQU5ZL29ZQUo0VGdJak41TDgrVnZaS1kyYkhwYzlpMW90ZUYzK1B0UU5aMmdCU3FkVEVwMHZqYnlJVFZ5QnRFM0ZpYjVoWUlHOWpjVjJmNkprRDc2d0I3ZldyREtiZWM0MlBRelIvRU5RQjFoVmZuRFIvSlBBdUlWam4rNS9yV1h5TTFoL1JDOThaWXhFWWU2YjY5R3lCK0JsMXJSUExmNitxYzFHdy9hZnE2blc2ZCtmN2NTdFYvWVZQclNEN1JHemdKY1lFQk9EQkZ1REcwd1VrS0pnTmpLRzQ0WXZ5dnRLOVk3aUNkMzU3QzZLYlJFTzE1a1NuOHdsTHc2RmwxRnVhRUtJRzZMa3V2K0plVEtsaTdPMm43L1FxYXc0VHVSeDJDWjM2WElLaEJFYlo5YmxQVlYvTHkvS2hWWEE1MElub3FJaHQ4a1RNQmtKa2JjZkRveE5PODJoRzNJRXVXRjh2OVdNaCtBOHlMUnlRelVCZ096bndicU80M0hVT29GRFFXUmZiSFZiemhKUkpLbUttd0RpaDJBMmxoSmFIUlE1MHh2bUtqY0FrTjZGTkp0RUVZRG9HVEhTbzhhMklBTjQrQ2lrRXhNOXVITWpWNEVPMVowREl2L0pDcGpJbW1tbHlvRnhZMTZUb3JpL2hUZ3puN0FiSG14Z3Zud01jSkxrOWhjNUhjME1IZVpUNlhBbFVQZEtvYlRxSE5UTFdVVjdYRHgzR3dxOHo2TU5zRG9SakE3dzlKRk9reUhRMkFEbHNCUkRhSkRqUjF3UGk3aUdqK1lCUyttVncyeFZ3SU5jaWMzVnVQdk41eTF4RnRtemVlV2RPRGF6K0t1Z2hYbVZROEhHemw4QXNNZWVDc0FqTGtDcFFGL2pTS3hheG1OYXZDOUoxNVViQjRFWlBhRkNlbVJQWEZFMTI1eTl3MVc1TmMzKzZoSzhnTjl5aEhHOWRDWHEzRzVSQUpPVXVVVE1mZUJiTmgzWGd0TWFadnhBenl5WGFZYnU4aXRWcWpwTGFJMVhyaUNGYWJJZ0h2M3B5S3c0MU5abFhkN1pxNjNCUWNHMUNNb25pODJ1UjJwTzFINGV1UG12L0xRak1NMUk0d2ZpVHN5MjhaOTQ4aXFmSFMxejEwSTFWRWNod0t4K3pxTzdBQ0w3OXE5SHFmMGdpd0ZnRzA5ejlIRHhUY0M2SnhPUmlzcDU3ZTVkSFU4cklrSlBWMXNucm9sWXByalFuQmZ1bEFOc3paU1N3QUxra0haOFowUUZhQzRNbCtmMDEzM3NqbXZqeStQMTRyYmFwU21JZTl4S2cxcHdKWmZqcW9ETVVuTVVxK2lORkQ3N0NzMWgxOW5MS2FhTEZIMHFWWXFlalVoRDJVcUxnTHVVOXRnVkRhb201eFI2RFpGTmpTaTNNWmpnZTNuZlJFYW1EZXBUaE1ZYit0V3VodFpteEV4R1BNdVpJclJDYnhxS3F1SlhnNlUzZVFiZmFLeVJHOE1jdHNVdHl2RWxYVm4yNUZFNy9ZRnFyaWFoQzF1SGVwTkhablZMenJpaWxyWmlhQWhhQm54M0NLNXZCWWRnVUtGY0FJdnhoUVlhOEZhMjI0TE00aWxXNnh5V3hmcHd4dmM5ZUxwRlN4VStlOTVaTmVhOWZIOUhUUUU0NHMwbFpsR3diTHdnSjlpSDlsdllDMWtscDRDeE15dFJTbExjOVpJdng3ZDZVK3RvQWt1T1ZXYnhObFlUS1hqbDM3UnhsczRobUxJYzUrdEZKQWQwZFVtVjMxakRnZHUyNmlHR0pxYzBhb2dBTUtkTGNEY3lyR2loTXI4MVFZYkgyQXFjaFpBZnBKOG5jL2tjVkxEaEZpaVpOS045S3BBdlZhcDVBQWJEWTVabnYwS1A5WC8wUlJJcW8wOEhmR1dHNDZjUEI2VlN2RUZvdUQzdi9ZUEF3eEI1SDl5Mk5XeCtLZ1ZMS25xM2oydlhBUkRmbHc4RDBBQVA4YVhRM1dZK1B1VnE0blhXYnBkSGVCWnR1S1l4VGtUaWRwOG5GL0IwaDQ2MmpxZHlJczJndHhEbkdhTUg1T1IvYUhaNW9CbTV2RUxjbUg2YUw2RFBhTk1wMXBHQU84em85N3loamZKVGpzU0RPVzdXaXpsSVZDVG9xMlhIQVhpalBnVzBxNThoRkZFUEFVUDNJNy9KejcwM3dZR0ZVU3VzS2VRWnh5TVJOYkc0Y2dDSnBYeWJ2aEtPTHRkcWZtbjQxK0kxa2dUUGt3SjVJRStoKy8xeTJRdFdLdnVua1FmdnpDMy82MU9WeGwxN3N5WVkxRmVCNUZpRDhRREdmWmpEWloya1psWlgvZmVIN2kwL08wNHNmeFVFNDZjRlBrZUwvSU5GV1JiOXlDVlRzOWhWSExiK2k2a0M3ZWxLc3FtaThBOTRrYnQwK3hIVjZxc2k2RzNwL0pJTGl1ZTA4UVBwRVU3dHE4OHNuSVNxZ2tRKzlzY2V6c1VzOHkrd0JScUN4aVZSRHFnd3RsVmlTbFVmcE8zKzZoTDF6ckhlMGgxaUhRZmhnaVlDNE5XNWdWb1NGYURGV0lpS25aMWlxK0s0VHM0Y1pPcnlDMWhMZmMvcGl4d24rc0tkeXpaTFEzWCtjWDN4MmhFdFlBdHZncXhneksvbzdUSVBLSW1rNlA2eHVvRUsvYk50VVQ2ZTdSOXFEOUJWenNQQzhtNlhKSkZOcmkwSnhOVm9vQ2ZjMXRPQmhvVnA5YmRHMzljdGpmYkpQRVNLT200UWlUWmFrYXlzQkFqZ3ExbHBKM1Q3bVJJYnd3bnBuWXhsRVZYdFdTQ3ZqenZmYmRYcXd0SVUxc1FzdG9NaHVFQ0pHRUtKYlN2OUZBZDVqRjV2Y2ZGTHZMd05icnp0WnBqNEEwRE9EUC9NWno4UXgzU0ZSUDk0Z3lSOFV5SU43ZFdYVFV2dEw3b05wNG1hZDdWbFcyZlRJRkpkRkxPM2YrMXR3aDJ6emtxYWlZSGY0UFp5SVdrUFh6UVJIYlptZ09RcXpxa01ReGM4WE5KeVNic2ZDdzhFNzNXMUtvVndPbW1SbGdTTnJlc2VkU3NwMmRHOG80UnphcC9QTHdmRThteDd5azV6YVl2N2k4c2pRWlBFdVB1SWU1NFpxRXdlS2tWNE16dXRGcS93NFlzc256U2gvQjNPL1JOMWlGcWFPc01KMFVYRDFjSjBaYm8rdWFHVXVRcWY0SnhTZTVQdjdzelRvdWFNUlhsR2JoYnR6YWp4ekg2dWJiR2JpbXlZanRJVk5BZzNxNlJ4TS9BQjEvNEpoamt1d2ZPM0xEeW0zZWMxeklCRWlYTTM0bTc3Vm1EYjg1bDRWTkgzdUJ2T1R3MXZFZGRBVjVjelhxOHEzMHh4Qk1DKzdPNnIxWjZPZGtYUVZEWk1JY052Uk5ucENLN01MWHJBQzMwTlpKU0N6V21qaXgza2lEMVcwa2hyTERGd3dwVnNzWmdzZ1dKc1lBYXFOY25MNE16WWUvc1lCczk1NG82ZmlUTmZmTmp4dll4aThVRHBRY1BLd2RQTi8zSFVTZ2J3cXhhajhTMjhsUk5lS0hORGl3c0hqUmFHQ3htai9mSm04RVlhS09Oc3grY3lSbVJIUmhuWE9YT0lJOXRSa3FLRTdTUHAxU3lqY0R4VFlXZzlXVmF3eGFjc0FkWnJVK25NdzY1WjdVcll4VmprT295VzYzdWorbDJ0N1FvWFVCZ1pycjVlM1dFNDNyWjdJRE5FMlcxS1Fya1YvdFB1UWtDVXYwcDhXS1N1VUROQnBWZ1VMa1pTMzhGUkZMdy9vOWpZL3N3OHAxZFZmMkxtNGVqNHlqZ1JjcVY3aGo0NTBBeVpLNGZwMzRQOU43UzREaXBOTncxa2JiK3h2ekVhRGdFc1hGU29MYVdibXJ3RkIvMHpBaXRqejlxZDhYWUxURlVZUG93dGs3cFdhQWsxalRsTG9GSDE5NEhCS25yR2RTK3JNa3licHZVWDcycUwzblI4RWp3a05vK0oyYU1yVUhKNU4zUDZJbTVReFdDdkhISllyZTAwMVIvbFVVQ2FRazdYQmJESGNnQ3VnVTFra08zQUl1Q3RVN3p0NDYwQm5YVGRKNXNUdmhPZUFkN3NxR2crbW1RdnJmYlIySFE1N3V1ZnNiNURPL250YnBLbTJGZGcrMzA4SlFUWWFON1U2Q0FvNzYvWmNwVXRibFdBUlFheDRrRDhIUnVYSTF6NDIxWHgzcHpLQXJIdVNwR3FBYlZnaFd0anRXUUUrYzgyZE5xRFR1MHA5cGNEWGRCMEFPR1dGZHhNYVNncnI5ZDFoTUdUY2dLdnNMZjhidkJDN2lSMEEvbDJ1aXNEYktvR3F6OVQyaHFWMUh4L25JanJhTHZMaE84eWVPRmlvRC8xb3MxSjdNQ1EzVVRJQTVabHZucVZxdEZJRkkweERXNUZnWHZUam10cDl3WnMxbFZoYWljbWFsNWwrUURQZk0ydy95K0FRUUlCQUhjRnpMVVVFenU5Wkl3ZnpMK25tZHEzVWsvQkdNdVd3ckpHQ3F5MGEvRk1abEhDeXlYRFFMSThHd1M2emNIaDBLVU5IaEF3K3Flb1FPOGpFU09kVVNlRzBDQWtrVmtHSVhraWRsT1RyaGNXY2dMZmF5SStGN1V0K0JKdGFwS2xQZUR0RTRFOTVITnpnS0hEK2E1TG5BVXRFMGc0ZDdEdElobTJvKzZac3RmaVRHd2YwUU1CcGQrRFhkT1Y1dUd2MGdzdnBzL0x5Z2dzOUtqdkJFUW1xWFlnRENXd0Z5U1FUaGlxMDNOYmcrYVdIcGxqQTl4aUZnbGlmZENuNEdQQ1VkMXRRb2Qwek1RL0VuWmZQNUcrSVorLzduMUJlYWZac1ZhejNubDh6eTY3aG9ueUxaM0N4dkxpSzE2eXZ1ZzBOUG10ZG1CVFdTVStPUHV5b0d0OWRtcUtlNlF3NVlCaHVVMFJNU2VzKzJpVGFCcXFQcDZlaGdDeHBnUmExY3djcmJwcHhPL0I5MDdCUGkxbW9RaGtwU1c3dEdjbi9XVWl5QkJsQUFHU0FReHBNQkFqUllhM0hzQlptUU16c0VScHZQS2N6dlQwbHB3Mkp2bDZDQ3BvcWRocjl1ekNseXZXSGtmbXp4V1pNNEh0WlVFUWR0bHR5UjV2eXRmaFl4WjFlZGtGSFVJUlV5dElMVUFSd1pDU1ZRaG9lNE0wWGxKSTNNTGljMFY1eE12VDN3RUhnSS9lMFc4VlBGYlduZlg1QVEyOWJ4UXdDVmdUK3VKbjdYWml5MEVPY3M3bFVxTzVTeHZ6alJtV3U3YTdEdklIeGxTNjV5U1dHdGRFaTErR1lRSGJ3bW4rbjNJN1g1NUZpY2R1TlBTMUVBWVB4ODZ6MWZiREh2Z0FlUER1VnRnYWpsWFg2NklnODF2eWRIRkN5UHNjbGh5TCtkb0pJc0JuYTVDNkVhdEp2alF3Z1B5S1E3VzFhZHR3ZjdLSTM2VFFPUUNOMUZKclVGTkNKQTMzc3NnQmVBaWppalR3WVIyTzd2QnBnekZ5OU4zT3RSOU1nTjBSNEk0aVF1QUpDZDVYM1dVTzhOYStyQ0xjWkpBSElNVTg0VUZ1cXlDQXRSNko1Wm1tNk1iTFdDWjQzVzlmS2RxTUF3bk1YMDVodXFiUW5OV0owYU9Obmt2UmJqdEErUytGTllDek5YcXlML0VyODlnYlJ3dy94UU9Jc2hpOE11N0FNUm5VME5hVlRSbCswa1A2NTNUZi9haVY2SlhiZEdqY2pOUU9MQ3R6NVBkblBQZW1zQzBMeGpUNXNKcUJ0SC9kUXoxbEJpYTNVUmxFWlArS3VlS21mWHh2bXp0V2RBOGdtK2ZnSEk2VFBPTURCOS9NMGFNMGg1emdCcDFxRkZ0WllaeVlTWjdMY0M0dWtBd1czZDFJbjZ1TTIzODdBSVp6dHVhNWw1N1hRQ3ZvSnJ1N1V4WFcyYy91VG0ya3lSQTVXRG0zdDBjajFxV05UaHpUWlhxc01KWldFTUtLeUFzUWJaZVJIQ1hWcHpTQjlZQnlTaEhwNU13cUtEZlJjNkRVcFM2T1BYSi9sSWxSZXMwc0FWcloxUWFMOHlmc1RaOFRSQm11R2FDeDFRdXcvenc4cFNuNG9oMG0wdmZoRWdLZm1DdUoxYXpQc0tFN2JoQU9pNFI5ZlBvTmtYamhjQXJSejRTdzcvenhOSVFGSHZUeks2OERDbEdOYmRnTTZRcVlKcmdtN3RNUVFiZHJYNHUxRUYrem5UUGxLQkdDSk5sUDFpOEJNWU5EQ2xhaVVlVFMvQm8vUG40eE9ma29vL3prNTdVNjdzdkJnY0tBb01PVVVKRHp2MndEOUttL1UvbWdPeS9meVhaa3l0OHl2RnREdVdOSHltbnFqa2FZWmh3UTNPUEU4MWVsdjlET3lzZjEvNCswWUJNa0ZZQnExV2VvOHN5MHpNdmpnZmxTWDNIS1JvWGFZRTVQN1duTHB5Nm1BUVRSSkw3MkU4bjVZWE11RTRuRElZRHEwUW40bEpjOTAxUElwK0s5S0Jkd3MrdXIzNW9tZEhHVGpObnZRRHFSUFpIRk5nTjErcGt4SkNrdEhXNTg1c3dwRklqL0dQMUlGUXFMWkJHM1VZYjBvbGErQWRoYXZqNkRxK1BTWmdPWnV2UjE0TEdFcmhsTDJIb2NES0lXUUxkNFprQ3hkYmpxbjU5MlAxdHM4bUtBWThMajE0MDlMU3ArQ2lhendVemxVLzM3OG01andLM09ENXhTazFWWkVSbFNORHE0Y25MLzh5OEx5eTBtSmtYQ2s4WVlOU05wZ0ZDd1dHYVdMOWg5MzVMRXVnb1R3azFWcjhDOVJISDgrcGxYMk9yUmZ4eWFFZSsra0RuZUM0U3I1TTBXUFJYSkdwQW1ucERWTG1VRUt4K29qem16OS9iMjlSMGRoM2hJRHBUU3hpd09sNFFVSHFzWk5Mc001OE45cjQ5VVdZUXRTOHJrTVg0SHJ3a1NTZnVZM084bjVpaFBUbDNRSEdudHpGTjdyQ2RmUkt3aDFXbFJTS0NaMzA1cDMxZUdQbzhkdUZ6V3NFRC9DT0FkK1JrVXQxY3NPK3JsdjdVMU8zTzd6Uk5EUmo0Y2krWG5TSUFFY1p4RVI3aXVzTDhUVDhFQm4rbUo3aTl1WCtad2RqaU94MmFUVUQxTmdxcWNMS0ZYWGI3OVVXZ2lEUUFHWnozZm9mdGFTTWlCdXcvanJtbVYyOXlKdWZOWWI3ZC9sOURxRkJzTjF3eUZaUEVWSlZ1WEo0L3FKSWNkdVo3ajVORGdNbjl1dEo3aFJMQW9DbFJsMU1idDgvUTV0bE1NTDA1T08rR1puaDJ1REN4Q25FQkpLdVdMWjVxSnBwbHo5STZtVHpON0hIQUhWdlZuOHExU1VEVHE1akowQnZsdHFyOHowTjRvVHA4ZGRDSERJZzZwS0R0VFI3ZDl0SHhEMHF1MnBiM3ZDZXZLdG5WL0NoMUV4ZjJteDB5Z2lNZCt0YStHSWw5Y2M2SHBzSk5MczVWUlNBWEd1V0RLbnFjSnA0Z3NFZkk3YUgxbEJoSXRrY2NYYlN4WklNTTVNK3Q4RmV5dUkwbHAyK2pqQkhXVDRWbituT2ZkRVd2K0M4YWRFaUdhdWtoVFJzVi9KNU9uZjdWWFV1L1I4UUxwZkZBYWFhNnpkOHFVNVBkeXFSR3lmaDhVdWI2cUVBWHdxaEFiZkZHdEZsZGdTZ2pZTW1UUDFnL0RrUWVqRitXK3hPVGszT3hXclhzbnE2VkJnRXhkM3l1UHZlcUpsOEVPUDZqMWhwODJuTXBmREw4UExDaEt5OTJEUE4yVUJuTzh6dlRYU3BURGFoRVk2UFZ6M1dmblRPUXA4U1RJdWt2bkZoa1o5Y25QaTRKSXBreHNWT0U3QlZtV0tvbWpHRTUxOXk0RVMzbnJJN3lyTSs3L00vdE9xa3IvZmJSdmRkNmdtaklBREJSYzhjRTMvSmQ2QnR1Y2FnaGtzNE1iQmJDSzBCYWFWanRKdGQyOCtNeGM3bWRIbUV1Tmw2bmZ1L2Z5U20welluTFlXWUMzelI0OG8zNTdiNDhHSWlkU3JpT1dMazJIcUJzRHYyRUJFY3B2SWptRWM5cmhxekxPVE0vd3VIZ2FVWHF1RlVrOTV4eTNVR2NSZlFCL0lDM0hVY0Q5cTYvaDIyUkdtVFlnb0ZjQ1E3R1ZlajhEeUgvQkJJUENPam9WT1NHVHUvSEdoalpBWDBja0xtVXV5UG1LQUJzMHk4OXViL2ZOT1RaTXNpTXhMMlFvbVZPdndkYmhXR0R4N2VmQVFsclArUzNVY1pldWhpRW4vUzBxZ3ZUZGJ1MWRaS3huU0F0cFhiM3U2QmJ0STZQdU1EKy9SQTVvcXNqRWYyRVFFenQ2a1pUOWdyMDJVeWRncTY5MG9rWkkwMG9xd3JxOWNXWERZVjE2TjJRelBiWUlGNWR0RHFWUlgrQ3VEdllRUmZBMVFmRVRaSW8xSkJxSnNHT1RtMjVkcTY4bFB6bXBaQ2lmTmVEb3R1UThQY2kyREtFVkJ6VkdSOE9RNHRjYW1xRVI3bWx4dnR1a0Z5RlVLbFVwNW9LcUlkN2REcUtmSlBHWFNaMXY4RlhuU2FSdCtsajA2WHd0bEl4Q0lldXF3bGE0dHNlWlR0R3pST1haeWpTdTFjMEJoZlNzSnl4UU8va3UxQnNKU1dZays5ZW01SUNsRHRaQ2cvU3VxWWdrTWxpbEhidzY3R2JrOUpJUHhGVDgxdytub2hGbHRTL0R1QnVqQnRNdDFUMCszMy9GRjdReVFJTmZHaGg4OG5LbHRlOTc1N3NTaFYxMklhRWY3Y1FlYWRWOSswTWJHU2VtSlhUczdOVkh1aTJKc3haNlBMVnpQNitJWXZ5T3NmcENZeDE2dU9ra3lvTU5GK2lUL0wwSysrMUs5NEtDdE9KU3lJWTZ6TTQyWWFNOVpDZXhVb0lPNVFXVTA1RTZFU3crYkJpS2prenVkWUdiQlNvNGZSa1VXZWN5QkpjZHo2Tnp6ckNsaWpSZDBtcG1pbUZqOXo2TlBSRUY2UHhqRzllNUdkRW5XYWtDTzVyWUY2RUJtMHR2SDczMk5NU3RLc1JDN3pLV1FCVWNlSHFrRERMUjd5ZjhlbmRQV1A5aFRBSG44Uy9uN1E3UGxrMFY5N0h0YXJUampES2lDR1V5a0gwbWVYK1ZVK0JkVWNkcnlpQ1FXZFh4Z3E5SXZZYW9qaDZpU0Noa0VsUU9hYmwyR2xIMTdCWmIrd2tSYW85T0pkYStEOFA0Zkp5UjluMndTajg1Sk9lelhMem5MYjl6b0t5RGQvTVZJaEhpZHY0amNFaW5tdExNamg3Rm5NeFFNNkRUdmFZdlduaG1reSsyall3R1VCbFIweFBnZWNyUGJHTjM4NkdnSGR3bi9CcE9raFE1MjFwcEordFlVK09QM2UvOVVSdnI2SS9MRHhPbDVscG5MQ0U0MzZFUS9CdTIwY2poSlRpSXNiZnN5VHU4RUdZM3UxQnZlYTFYbTZjanZZTVFOOFpTVG1ONVUxU0ZhbjE4YzIyMkVnblZHNitGVWUySHlBNk1kZ1dnSi9Tb090MHBHTnVpVXBSdXlnWjQ0TGlDVWs5L1FQNVhqU09lbG1Hc1VScGJ1RWZZOXEzWldhelNoZExjVEtIYit3cldKNTl6MGxGMEZ4bmxlVjlEWjJSNWlWNUo3OEpEaDFXWWRCY29lZTVvMTMrbmpjV3JvUnVzQmdqQ1FZMHFIRUJoSnphZkQ3c05OTVU4OTVNbDdlSGQ4djZuN2VnbVhQNVg1UysxN3ZWeGFrTzVET09XdEpXMXpPcC90Nkg3WU1QbWZNUWNOTENUSThKTkwveTNyWnBCZjF2aS90ZW5jVjVOWUZReEZwUXI1c1p0YXloMVU4NkVpSm96Y09pNFk4MFJQL0NjMXZDUjhxOTNuZ2dRWWNBRVBCVytjNnhMa2FySmgyQ2N4N2h4c3E4c09NZ0JYdHREL1hQcis4NUFHeHZZOElzUzlReVNxVDczZExab0F0dlFhYU5TS0hFUEdxL2ZNYXd2RkM3OVVHNVpiUGJaOVhNRnl0bklwS3ptOEdMdVNXNHVNQkh2aHVmSy9LWkpnYW1idVBteGQwa3ExUmxQUXBnUStPTDkvZ3Rad0c4bTk4VEhmamUvcHcrZ1JveCtHU2h0L2RxdFFxMjFybE5kOG10QTlqb3dmWGlXTG5idmV1VHQ4M3RrOElhRzNVNGZrOWRyTGJ0Z0tvVUZseklxb0JQZWpUaWVhdmdFcWdtOHBwaFFISytEYW9rQXNNcTNSSGMzZGFoa0pPSCtlWjZaTHlUMVJlQStta3FUeXBuVE80VWU5VmoyMHBWYlRQOXpVdVhlNTBDa1Z2dWhoYTM5dFcwY2hXbXVFNGZXc3F2NkZoa2R0aG1YU1lxYXFMaHlXNlJwc1E1aGZKUmNGaTFwVXhZcGJ6cVljM3BKbE9SR1F1RTdjZ2hLUzZRdEt3SG5kZlhjNk1yU0Z4anluaXZHTWhtcWswSmNkOWtVZlFvMEErZTBiMnBlN0hOZ252Tm1Ob3Zad3dPVUJkbEJ0bWpvelZHOE9UUTJZWWF5YnRPK242ZlRiUTVUWWxja0hyUmYycnAvb1ZiSEJhbHUxTGdIb1FrMXBMNWhGSWhYaVhnbEJ5NXRPczR1MExHWkhFcFNUUEllUWZPNWI5OHNJNWlHa1VKSEJXbTB1alRBVi9IRE92b1IwdTRXVERvVUx5OFk1WG9yb3ZaQlVaMTVLTnpoa2VjL2R2VllkUFc3Y1ZoNVRmV0N6ZkZvU0ZLNk52SS9aSUZLVHg2bzFTWlc4ZFUwZHFsbmVKTVVMcU5tSkxjVkVQTjBPL3AzMmhKV1E1TVFqaVFTalJZN1lLRytYdFFRNzNHMmF4ZmxmZWpZdFhGMFh4L2d2YjVpRnRIdmdpczRUQXBEQkdmM2ZzdDQ2TURiRUVYYUR6VnNOenFGaDVZZExsdXpUVk85U2Q1S0s1VU1vYm9ubi9uL2VPVzI2Tnc5VUJJVGR4TkE5NDF1Y21vYXhwb1QxRkhpOE9IODBpK2gwS2tSNFVqSTZpdjlvR0xNMTIzaVIwNW8xb2JhSXlVU3g5K3R5OVpWbm5jdVdmWWgrc2gyU25NeGZWaEVJZEd5OXo2b0FYSlBLOFlHVS9UU3BEb2dtSk9mZi9QSnFJQWtwNmlqZC9Xc2NnRW9vZXNPbmFMOVZXUUxOZklJN1Y5L1BLSG1GMXdwN0RRMGJFSk1qaVRGZ1lBZy9QZUNNQWxwZlVNeGZzRFNQdkYxRk9tZjkwTnRvczBlcmRVTWdnMHUwV2dVK1NvUkM3Q2dIcE5iRVluM2hqWE1SQmJMVXJ0d1huQzBOQk9CdncxQzdmSCtVV1NGT0oyamNhUGVHVEFJeE96WFFjcDFuNTFsT1JuTTlLUm9hbm5hWUpFcXFnYmtBdGNZdUZCbTd4OWZRL3VycHJMbHZ2b0Q2Q01ES2toVkN3TlRRbTNFdXdaY2RGV2ZXQ0o2djQ1RUVaTWZ5MFpUTHpxcVU5cUc3TnBLM1JPbGtmRUVxOG1wYWh5S0VLdVBrUEJTaExsMndac0d2WklHYWU5ampneFZZdnU4SUt1bWo0N29kRWNVUFpJeldTa2V6UWF4b2huSGNoWVpCczNpQlRXOWZQZE1wTHQxSmhzOFVpbkRzWjRqL1BIVUdGZE9NejJMaGExdENqRG9QTzV6b3htR3dIbVZiaTdnWCt0Q3hJYU5CU0xBelNpNHpPVXlTeE9lY09qc1pUT1pSM3RvU1FQZ1A5WUpsT2xiWlZCc0NFaEJJb1QzR1J2OGh3bHNYbDVqWG0xQmlIK3IvTDZwcFNTOElMeFZVTEdFU3lGKzVEQ2tvdmhld3N0cjQ3dDRQR25BS0tRVTJMK25DbTQ4cUdybGhaVXdJcmNXUWZsemZkREZaamhZclFBVzJiWmc0WWhoQ3hnUjBNY2d2a2dqQU5ZTjZQWjdNdnVRRm5aNElZWm5IZkF4Y09CODFCUmJoUDhaTVZibXA1QkE5NUx6enRwWTlMTjFUTkNGV2pFK1lUU1hhV25UU0pjUHorZm1wUGVGU004VFNUQ3lYRzl2dDl5K0l4eUVjUW9QWmpnZFpOY0hKN05RY3o4UmE1SWgvV1NhblhKYTZxOXYxRkwyVVJIRXZwUVJvVElwQlNPelMwSzRwTlNUaFg0THU1SzJXZjVJcUtjSkEyRGkzVnNVdmVwK0M0VWxsckFpZlZHOXdSUWZ6STg1aTZyYnBQbFQ0M0lIZFFiWFNJcmZvQ0JBenkrL0w1Y1JSa2ZDTWpRWW9NSnZBbU1TK0tMNzJTdDl1LzNZZWdDZUZnOWpPVFJHeDN6ODFGcUxhTWlqSHVOeWxwaUN0aWZNaXFHcm8vQUdQWFhueU9NRnZqSkFCTHRTK01sUkJtRWtISUtUeEV0Q0RPL2MvTDBRbmNxOGtlMzlCUXlBeU5XSUpzbW14cGliaURXL0dKOHdRQndIRTN3UTZVVkcvY2VXVUNELzVoWEcyMHN4SW5oN2pzK3d1K2xwMW5VekM5bm0raTVCMVNhdzg3TDAyUTM5c09iRE80dHlKVTlNTHQ4U2tDU3RQMGNZVmtIT1JaSUxOWW1GWVlNcFdxUEFETVg0WTRHODlFdFN2VW9mN0ZmOEVxUExYMThHYlNpVmJiUmhGQkZPMWNTWGxYSk82c0NyVHppYndCRG1OK05YQ1VDVFp0bE9XYmpmcUQ2SmNnM0M4aXhHTjluR3prcDAzbHhuWGI4anFtcVRTYTJRMnYvbkkzNE1JWkhsVmhyaEcrNmd1QVNZN0twZTJPMGdGVzhZNzVTVFB1OE12Y1RNM2xBSHV0WVFMdG5vN2FyOFlNZFJHeTVzd1l2cklHNmtxbjBudmdEdmM4QkFXclVaTzVOOTYwQlMxUFBmeUprZHRxUDNiemNyOUpNaUpoYk1Uc25OYUZZUXluQk5mNDNhMlRwTjh1bVdEaVZwbU1TdzhXRkl6NHBFTXJSbFhaTEFPU3ZldzBQemd0STJjVDV6dFA4NUViUFNvOUF1cGZyUUF6REFLVWJhWUNlTEQ4aG4yWWhQcGJXaXE2ZTBuR2pheVl0SDRROUNkNUZRY2oyRXRRcUxEMU5HTDZtN0tnS2hJOHNMZjU3T1QxQkV0c3gyK0NLMmlZY3FyNkJXYUVNMTkzTWE5V3JrNS9JUkhORExFK0E4MDJqTE8wQUZMUmVBU1ZZV0d5aytuYldoSlEvRFJpdWtUWXFCdllZdzEzUWxuOWtYUVgyczBxWllwU09xTm1ZNy9WaVRPbnluRXZ4NFhLYkMxbTllQk5GejliamdtSTVyNlhac3hoWHFxSk1JTzhhUEJNNzd2MERUVUFyQzBjalVINnBIc29kczlENlhFZ203OW9VY1ZPbEdMclppR3pRbXhEcUQzeTVMVW9Ec1NyOFlxV2V3ZmZpOWxFVDZsWDBhSFRWRGZXbjNnSThLeUJWRW5TU0x3SHQ2WWp5Z0twM3F4blBmNGZjb2hoR1dBL0FPcFJudEJidWJhcWxodjJ5SE5QdEE3OUdlR05INHBKYmtxc1VFeWdhdTd3Yk93UjBPTFV4TlZiZmdYOXVDV2xVa0EvY1ZQcmxVOHR0TTBzaDBuVFFvMENaR2FwcDZXQlErcjh4d1N3VkdHVTRXQVJoSE5pZWg5K25WUjNWL0tKS2lsQ3p0aGUrd0dzNjR5dDMxS3ZTK0pyd2JBbEt0VVM4WG94M09jeVJUZGI2MXM3a0ppYjJZVzI5MEJUelk5cCtxQmZFUk1iU2drT2JHS3BkTUduUmVmMWsrMCswNENpcVgrbGNIZlYvZEU2a09EUXZGL1JyQXpnVzVPUWJmTTB1WDZFdUc3YzFvT2M1UDJFMlUyOTJvN1cwb3FQTUpjTWE2S296cFdDZWxjVE9NM0dnVkF1NDNpVGpOS1RTNkRtOHdIbGJwdjRNY1gvckJsdFltVVprNlhNanRnYWpRQXcvMWgrZjRYazYwQ2N5c29ZaW5ZQ3M0c0xjT1p0VlFwRUY1RWdHeXVvZk8rN2locmR3YWVDR2FjTmpid2NNQzAyTm5lVDhNOW05cVd0WWhjKzNReEY1RThGbm8zcGJ5WHg5UmF0MmZ5eFpWaWM2aTZEczdXVGFIYnZ2VWZ0bW5oR0lIam1IUnRMYk9wYlo2TDM1cVlucU9STGhFbEg5Rk5JL1VOcVZqeUJsNWltSmQ0WXpvcW5PNzFkaGQvaWJKRy8wQTBRK3cyNTVyNitXeW1rVDByb3ZkeVhvTTF3ckRnVVR4NVZYSGVGK3MvcjNiY29SK3k5d3pOOUxQZ3VCa2dvV3d5S2FXcXJaVit1MVNLcEliVDFoWkRlcEU0SmZrbWFrMHBYVVhURnpwWjRZYzh0VGFXMlhVcXZraFFzQktYYTBBZmlJTHlCQ0c0ZGo2ZHNOdEw0RmtxQy9YZ3pBNTRESlFhelNlNE9UTnpCNGhJWVhwcS9KMVJsSjFmSW1yY3JLMWNUMWR6azFldVVoOU80ZVFEU1BIZWtzRkpkRGYzRUpDeEpzSmZIYUdOMWZTU2VOcEpvQlFra05GODVBRUs5WlJaWDFqUVBOeENyWFgyZW41aklhVlRpekY3bEJwSk1oQUVvTHZRbllnNXNPdFVtbzVUZm1wTkdXaUFDdmFwWmJ2c1ZDaWFWWTlWaWM4OGpPMzd1c1dCeTRaRnRwQzVrWnlac2l5QWxkRi9QL0J2bWtMdmRITWZHYksxMHpHZ2Fna2lJUWxlQ0lvVXhDYm9tbGZkU3ZTMERCRU81N0NvcVlhc3Bzam5xT0tFbmNOc2VjdzRtRU92WkpJOU5VbitRblVJVWxGcUFBNml1UlVxSEc1eEpZdlF6M3liT0w1eGxRTFdBYU9hV0N1YjE2TVRDUlBhOW5KcGxtbnhiVmxEMGpRMGozSFc2dmFGQ3Y4RmhaOERKd3E4MTZFckJ4THBaVDZIZ25PSWl5ZTlwU3NsbmpZbXdhdVlVdDlrNGRMZ1ZLSjhqRE8vSGMxcE1lMW1ocFZMeUNPZ2FwZ01oRzN1ZkcveXZoM0RYbVkzWU5sK3VmUHNmZkdXUVB5a0d4alNNcGJXaGQ0dXh4d095RWcvOE53bzVwMzlZWjUva3lXV0NPNFJ0Z21IdVg4bGlaRjcvR2FJK0VqWW9OOEpjRjJYSjI5Ym9nem52ZDU5aERpRmx5OHhJZUFEVG5DTkdkajBydUxKcGVuQ1d5R0hwY0E3SEhET0dHUFZ1bXVQSEEyVzg2VHhVYWtmdWtDYmxiUUpzUjl0OFduZzBmK0ExTzc1VWp4TitGSjZ3K1FndEdBd05zK3NhVzdKemNwdit2ckhSY3NYRUVHUDZkMEoyZ1FhS0g2T2hEcGU3QVF6bHJUUkxMWTZ2eEs4S0FXR21EL0VDNktYd3Jod0M5Szg5am9pZVJkTFduN2xaTUcxbm5oQTNtWWMveEt0eThqdytzdk1sMTFNdkdQaFd6T0lldEFuanV2aE00OTlOKzZxcWIyUUJBVWtUbjluZ1loUVE4cjhtS3dya0VBb3l5eXk4N1VYcHpKalZJUFVkelhkM0lUQ1BKOXU4c1RWajgvcDNhQXlNaEVXL3lsU1c5R2tOREdMc1JPQ2lOT3FvUjUwaEVncWtpbTl4Y3V5ZmNDRUpMak1mRkV1QkJCcGs3bW1IRXVHbW9mWXBaOFdSRVRNNXkvOWRsM1VTdjdKWDVYNWdXLzNJTmkrYmRReW1jWWtNVkN1SGU3QzBUeU0wdTVPcmRFeC8zQjF4cHEzVXk1NTBoVGJsMHl3cnI5RmVDTllTUnlMemZxR2pBNUpmQmh3dENTMnpOWnltS2ZURHpQcktPRk5aREJTVXo0bWpYNlVIWE5Weit4UitKMEw2Q1hnVFpTYjBwcUNDL2RXd2IwUVIrSU4rSUJOV0I1TjBML3JLZzZTU3JJR21zalI3TEozU3N1cmsvUFlDSmo2U0ZjZ0RmYm1hRW1Ld2tITE9wRU5VQ2x3aVpNSzdsUXZYWTdsNmpnNWFNNVhoR0FwWWZ0ZWFkUHhVMW50cmtpQmdTS1ZaTUJqTjArdWpVUisvWVZ0YTlsUWdINktPMm9YaUREb241THhjNHIyMGZTWk1wVmExekJETlJpNTFmZm5GTEhidXBWLy94Y0hUZjlrRHhLd2o3VUM0OXRPUFdHSlB4NEtsRGdNdFduSGpsWm95L1JMVGVNWXp5L0IySnJUWDBOb1pTZDJoenFGQVlzZzFRV1dDcERoQVo0UXhXS1JxdUdLRVdlby9NUGduQnA3UmxIVm1ZOXBiU2dkNlBTR3o5Vml1dkc2K3dSYTVDUllCWEdBVWoxVHAyOHBrSTl1QXhmZmszTVVUYkx4TW9TSk4xeUI1dFZuUkZwVzd2TVU4OUFTTFU1SWJVaVVjczhNOE1sOGVaTG5QdE1qSTRSWW1ZWmlYN1duN0hmWGN6aDF1RnNrbTdZTmpjOFExcGRMTGtoSThjSVpzUnZTVUtEeFVvMHhieDdoOXBMRlVvSkFqY3dsQllpNFBxNmVYb2ZTOE5sS21LbkNqNk0wbktVaElBTks5MUVoUWdJNUppRVhtcUl4aDdvaENjWEIveGp1OTZESEdrV3JiRHd1US9WeG80L3hZb0JoVjc0U1ZaMUFhblZFTEJIYkc3ZEZoNDBGSGJ4Ym9BUS9wYU5sb0tSWHcydUVhQWhKYktFWlVNSzR0b240a2ZkMWpWTVlHYklEc0ZtS1ZhQ2VwM3IzZUlXdXhiMG1ncHJtUVZNT1c4WE51eUE4Qk5pbEhKTGNjTnZDcmtocGVSU2t1dDA1NWlIcmhUSkV3RXMxbndtRG84K054MG9FK21UQlBHaVJuUlJiazhqNHZJQTNUWGs0cXJ6QTg3M3BoMHR3bk5UUU5ha1k1bWhFVkVuSEdiT3FtZm9qRm9JSEZNdHA4eUxROE5US2N5MDNWRU42c1h5aFh1TTlsTExMSTNreklJRmpmU2N2UW5TeldqOS9yZFB4ZnY2Z3ptblFTalJJNCtxYnBieE53c1lSMFFTRFFZc3liMUp1ZUt5MEFEQVBkRG5MWWQxbzFWcDBrVGFGWFFBZ1RYd0YxMnlhdjBwRjNBTmQ0YVFCL21KNE9FWWdMQ1ZiZC9EM1paT285U050TkNBa3gydzFWTWJCL09PbllzRmJsWnlBNUtqZ3I0eUtITVhaS1VmOGttZjNBK1l4NGxERDh0OWxnYmh4bUFWZ2xvbFFkTzFPWldqTEJWYko3alRIVFVpY2hFYTc1SHlhWXRjNDJqQlZiWTNwSW41akxPMTBEWGoyUUJwRWJkK1dDVjNGVmtuTFVpSUVMZVFGV1hoQWJNMHVUL2srZGt6bS93REkra05xVlZPVDAyd3dUT0lURnhLTWNUMDA2em5WOEdlTTViNndaQnVwcldXQm9yQ0gwRU96eEdYN0dRczc4NDNJRm0ySjJ6amZOZVZoNkhKVk5vZmM5TTdCeTRMUXBncVdSUE92d2h5dkNob21lSmZYNU5PdURqVkJjVWRTQ3AzMFJVVU1oTjZUeTVWRmloYkEzU1V1ZzBmVDVkNnM2TVdLMjZyMVVYeHl0T0tUV2oxNDdxeU0yOVNmT21HNEtDWHlVdWdFMU5Hd0tJNEtib09mRVJHTm5TUnkyNDVEdS84Y2xTVTBvbG1vMjFhT3NLWjg3L1kvK2MxUDR4bnQ5TWVQSUpIZUFkTU1PblhkNnNST1FXZmpyZE9NaXRPVzdMdkxjK1hYNXA5VDVYQm9DQ1o5Zlp5aFZUcHUrbmZaakpNbHlrY0Nid2N6N1g3ZklpL2l3K044SVl6TjJvUXFvdFdXek5mWGNaclZYV0paRTlXT2Nqc0t2YW9ReFg1cDdZY0t4dGpVVDVXdnJ1K0pkenJYbVBYZWppcDhTd2svVDVnS0RkSDBNMlJ1YnZ5MHZDWFFLLzQ5WDI4US9KTHZobGwrQURzUFNzUWVXMHVXamNHUXFzZXd5TXBZbnVKQ2lsSkFtL2NySGN1c1JKa3Urak1DU3dxeUJHQk9aL1BBQmk4R0FlbEVUK1VpMG4vaXc0aTF2WWFrNzR5SDc1eVVGUWNXci85MGFVK0tiMWZyY3o4Z1pjRjFlUkhwaWRkdlAwTDlkNVowc25BVVdMZHcyckRqT2VEMHM4MGxrN1h6Rm5WeG42UEh1Y0lwcWphQTdSa2h3cXFMUTVYajRaWUxHYzRLWGZEU2w5WVdRRHZOb0pXWHcxS2VNUlZsbHJ5dWJSbUdqcHVHSm5ncU0zdGYvVHluczdoUVpkSkIwMlZmNUJibTRqMHVzUHVSZVp2azFwNDJsSGVHQ1RJUmxVWnBEV08xanBEb2lRRWtteDkxT2VXNCt4M2t5VjcweTVhTTE1Wmp1RS9FbmRyVnZnZmtML3cvbVBlU2JVQ3B0UnpuQWhRdFVVRWtYaG8xMjNNbmNyalA2OEk1aXF6STFqQkNmNWZjZ1diUVpISktKZnQ1Q01DQlpCbFNFZDc1SVl4bktGRG9HWW92a2tLZFlHQ0Jlc3VmNkQ5NlhJRXd2cTFlR3BjMVRWRTAvaWp4UDdTZUlWemhTSUdVcXUrbWFkb0pJd0FKMmFydEQzR2FEN0Y4aGY5YzVxOFljWVpER3g5aXBGMnJTRXE2WTltbVdYRlRsRm14cVAyT0xmbk5odkdjQVlJUDk5WTlwVVRjeUp5cTRvdU91akVtS2hZWHQ2SnE0WlFRRk9meWU4YWlTUUhIMDJPMkRJanVzQ2RTRG1uM1JWUVVFNndPeDJRaFdSK25ycW45d2NRUm1seXM2YUtBKy85cFQxU2l0QlRXVkROUmNRdEkxM1ZQUmNvZVYySWVYWFhSZkVmTjdFay9HT0VYblAyMVV3MjNNWEQ5ZmkyVDVydXl0UnloNGVRc1V4T051MVc0dkVydnJ0ckRZQXREVzhpRmxOMGxVZllTdU51dmk3RktscGVOR2tlTTBpOFprQTRITnhUVGlZRHFPTEFhaGhMYTh1MVk5STEyUCtmNjBYWWhpaVZBcFJwNDMvOWpRN0FlcWNBd1lHY0x5cFBMcGYyOXE2SjR1REVEOHI3V2JvTkgxOGtkVGZiemtDa3loK1I0U3VrajRvb3k2eUdLN0Ztckg3NXNzQlI4STNzeDFkZUpXUnQvT25jSmFmOHBpK3lBZXVFdXQwVUN6VXk2YWZQM2pmemUzbUJDMDIzdDA1NFI2NG54S1ZYTXVLd01UUTNld2RXUGdtRU9SWHFmRVNVWFZwcnJFK0pMOWZQdStSMlBFamtBL2ZEbDRSOGI2enpZc3h3ZU5nQThmd3JEaS80YTNCQis2UnFCWkFYM0MzMXJYWnQ2cExESjROODI1bkg3dUI2VUJQZHQ0TzhwbEhYanorN1liR2tJSHBaUjRRZi9FR3ZMVVBjVHR5TDYyUnJwdkRaTEpsZmllWXJMM25pTFZTOTFUWCs2bHZ0VHlaR2ZJN0gzaGtCNlBzaldNeEZhcGk2NXFxYzJMVW5DemN2WFJCOXhjZTV0em5qZGRhM0hXTHA4bEFyblpucWl3bUp4Y0VXSytqd3Ywc2VLcWRCWXpvZVcvYmMzOW9LQkwydXB3MTYveTNEUjRZak5Td2s5MkRQU1Yxcmo1Y0RMcjRRb1dlNG1OVXRIbW5WdXFwOC9JcE52RjVYbk5DSGFFZndHOEE3OXJnMlJNdnhpYXRzMDJ5Vi90S21hTEVIclhMcFc4WnFTUGU3S0tNQ01OUmFHSmVqS0lERG5jOWFkNWlmRDc2N0czTWRXQVBCVzhxb2lPd2d0NVRiUlVLQnhmMUhVcTFtekdLc0V1Mk1NNGV3WmI4MzZvRU5yaHozRnlRWEJvYzJxc0tveDhERDBweFdVZHh0RHk5QVV3dE1ETDBSWDRtdnVDVlMvV2NUQmJ6Y3Fxd1orMjlWV3ZmaGRvVXFXWUpSSVNGQ3RJSG9aV0RKczFrYTV5dnZBVUJiRE4wdVVySkdUdmlvVkJxbjFVWkxDSFBKa1l0RkxQVklIU1lxcDQ4OGo5RC9JU1pDUzRRM241VXpaYXk2S3NKNjIvZ3I1WDhIcHcwSkFYd3lsclZkVGVvM0ZQUmd0eWtnWlpucGIyNGlMSkRndkxhQ1BMYXhXdXBPeHVqT0htNnhQSlhiL1hvazRqeWZtL05aekErRXJwK3FXVjlFRmdkSWdOVFp1S0NqVUd6UGc1Q0pmVmtvbDZjSkRoU200QUhidlVkVmtkRmcxVm5WNUJ3TlRmY1NhZEJxZVBMZlVUcXRoOEpRRmtoWTZ5VDh0ekZoTU12eUJWRndsYmlXQTJ5V21mTjlCanhYTHBTRmQ4Szg2THdUR1Eyd3JUUW1jUDRzRGZncHM5ZHNRUXh5ekpPWVk3UmV0SW5VZjExM3NkcktpZlBMY2xSRGZvY3RKUVpPMGZBWm1JME5tVm1SQjJYT0ZKU1pFQzhETC9GbXR6SHhXdis1dWpIcDBlVlovbGpGZHBobkxEOWpDWUFzVjZINWQyeVhVd2hsNkE5QzhhRWZGaDJmTC9kKzEwQ2RCWUNBSVNTZlloc0FrdU5GaHJwZ3p2cktFK0ZDVlRyVldSVGR2akdoeGd5RnhuUllNbnc0S2pPUGJUTlhJQmZ5aGNoWFRVR0xqc0dtY1QyY3dVSHdjVGNyVkR2WElLeG5oRFVSUHU4S2cveXE1d2x4ZHBjODVBR2tRWHJqazREZHozYlpkZG1DY2NNckJvUm83c3ZybmpiS0h2UnNLM2REVDhtSTNDTEJsL3h2YzFWcU5BTFBhbEVNN2htWmJIRXdMUDNGMXpKbUh3WkpYdXdWKzdxdXNzSGkxcUxHNXZ4VGgwQ3R5ZEh1aU1HaThIcldOK05hWWplM0ZaVDhZUjFuQ0pXL1BQMkgwTGt2THZvZjdqeU1kUllxUFNOQmp1WG5GZkRvZWJlRFFlL2NkckdiY1ZXZHFFd20rQ3Z0NzUvME53eTRSMDhYZnhFUkNpMS80ckUrZExnZkgzM0lvOFlIQjVKMXJXVlhmdkV3TFhzUXJCMm5NTGllYkc1Kzd1Y3VyZkZoR1UrSGpOUW10UmF1ejZXYTMzbGptRVQ3aW01VXJFeGxtVkxuNUZJdE9TNmttcGJiZDBZN3hWUXFqNnhkRFNYN2dEVjkxMEV1cXY0Z1Z4L1k0cDNZY0lJTjFIdkNmbTJYY3hMeGVLTnZ0NDVBc0tWRjZSTFdIT3lnNyttbVVzalVtZUlweHFySGdOcG9QblZ2bGFIcHlWU2k4VGR2M1Y2KzQ1SmZjanJUanFDUC9DcnJBMXdkMXdBNVhFYlc5cElRVGt3SjJQMWlSdHJYTlFyMG5hUHZhM20yZTlNdGpXOHpmdHllMkUrbWRxOTV1VU1QOHJreGQ4SkNlRVVzVjRCak5mVFcwaFRrRG01OE5RV3duUm41U0lTcEErOGZMK2JWcWNYWm8yaEhQbEdPREpGQ2dYZGhFUXJRL0pZTkI2MS84NFdTYWo5djIyYjJXTzBvK1pwMU51eWpHbUZoUklxTzJteXJFdUdLUGZJOVpYRDJ5SVc1Q283WWVYYXZycnFaTXRvaERSMjNLME1QWFNLaGZaNnFMY1FqM25yUm15VUt2aWZIcTFWdSs0RnI1TllYTXdHMjhQc3ZVMEpyamxMNE11ZmQ2MUpQQXVEOU9WQjBza3lzSGpHeE1sZ0pmaUtPcjdBYWNEOVc1a1NrU0g1cGZJcjYvTVNXb2V0MFY1b0FGNG4yWjdrMWlHU3ZsalBKTHJPV2FiVWx5ckJKZmhkSXNtNmFUUlA3dWE1eEpKS1NScWdUSTQzaE9yN1BmanY0dElpWUU3VTlxSVA3bzNhK25KaEZyOHhEUXpkeSt0OVg1Z3J1MkdGYldnb0Y5Qk0zZG5hRTdQSFhjVVBwTGNpZU9NVStvT21GbExubHZ6Vzd2Q2Z5NTlvYVRCcTJMN2w2Y29RT29mUXA3ZCs2L1JYWmowUXpDaUFhb1ZlVnV6NUdVdWUzaG52U1Bhblozd2NhUVJCejdSdjJJMVRMVjRKeWVoWHlWSEZoMFM5YVF5My9XUHpFblp4dm1mM1BqNm9uTHJuRDVuL3lmdGpCZ24raXJBSVQxY1o1MTdweXFaRzVrNUpXMzMwaXJpMzlGYUN5TGdMZ2FBanVacGdsYU9CN0wvUitoN3pyWWt6OUZRSVRzRXY4d0s5TkswMm9IZlpiRTF1cmxwbEl3VSs3QmkrRkRaMmVnbWp3anNNZ05VQUlQVU9xeTFISGozTkovWWVybldDd3lkVGJjWFFQdWtBWTFMaXhUV3BaNmNzdVBMajR2ajNHU2p5c3VLNHQxRUlvQ3NjRUE5bjlzYkp6UXhlcSttR0tyT05LQ3UzcE9Ta2VUK2l4TTd2bUxjR0JaQTYyZVd0T0xRWVNpa3lpcVJKcXVJK3RrWEc3eHdPbVJIN0FzQzF3ZW00K3B6anFGaDd4bzZpK0hiWDlDN0xWa0kvQmJNby93M2ZnamtVbmJIaWVjOW9MNk9lSHVEbHhaQ1ZPTVpOYzdBOG1SeFVnLytjWGpMdkVzeTBtVEpmNnczeEhFUlRVL0EvdnN3a3ZCTlIyQ29XK09Va3h3eUtRZUV3RzFhMkRjWXVnU0VRck5hUFRMSjZSMmF3b1NBNkZmTjh3OTcwQVVBMTZxOGZkemVqaWZqYXlqeWx4TjFHTWZvcUNvVzBvK0tEaXpZRStnVUF4a2dEWVNvaktreThneUtUNVF2ZzlsYjNtS3I2V1p2b1ZhSTNxY1NlamhXWjAyVXF3UlJKNGVNZXY1KzR2dk9VQ1Bqb3NTM1pRTE50VW9EWjlrd2xuODJDMkdqTjJwSS8xblcwSXcrd2pLbytvUnRRSFFiZlhmTExCQURLcUFnbXZUL3ZRN1FtZmFLYWpyL3ppZ3NXV0NWSE1WS3kxMVcrVkdyNlUzM3IwNFBGSktaUVJxMUhjUW8yZk9uTndNdks4eW5kSVJBTFdyMDFPa0p6Y05ic1lVamlvcjlUbzAyV2d0aktKQWxsQzk3UHRaN0ZleTFoS0l4MnZNZmJ1ZU1zTDQ3N0NaVzVzSzFVUlc5a1J0VjEwL1FNTzY3SEJQWDJ6bXJxcEVjc1o1eGE4SE9WcXprblFYSlJ5ZHFMNXIycmYrS00raGlldVNCeHVObW9OZE5ocWV4TStOK25xOE9PL3pQVWFPd1RaNURXNDhyY2s2M1pEQkNUZ0dtcUJDSGsvelZKYVl2YVp1Ukd0czU0U0ZlU2Q5cEppRCtCQXUyVUpYOURESFlUTXBsTkxuVmQzVXZvU2JBN0xLVWRPUVU1OGV5WVF1N0ZsNkJwK1dkV0VvNUtjU2RNQU14Y24xbi9MUTdPc2lEdjRUZzU5OEdmVGx1Z3JtRUdsQVRoTEpteEFlcVFQVnl5ajVRVE12L1JkWXc4RWJTTW83WXhUYkYwamI5WEg1S2FZclVUNkNodFQ2dytpSG02dDNnS2NGQXM3czRIYmhVQXZjb3lxWk5jRGpDWDNsRmFHc3ZGeFFZY3N0eEFhaldLNjlzTzFIYXNRYnNXV3NMTmxWUEM2S0tUM2k5bU00T1ZRNVpwWFQ3SWdnSTlGakZwbENoNHZNUzJMUmcxV24vRFRsMFBIUVExeXFxSTZkSWVmR2x0TGhoeGVFRnFlM1RFV3FZSW9wdWJTVUdnMXZxOVljWngvSDBmMUE0aTZjcXBJUmZTYWxBSzE4bE1VQ2pickR2aC9lWFFVZ0hoa2dOZTc5SjA4c0lkTENsSElkOFhQalpEL1ZkcXdlRVByZDhvcWc3dGtkZElROVBMN3pMNlVKOUlIRDU4NHZHY2ZDWU1HSHZPekp1MW01NWYweDFCL01FVHFDdnNIQnMvTy9rRXhPQVgzRHBMMGhYQm80YW8yQVNuNURtbXlSQ3VWR01QUEFjZEx0SldwdTc5MkVlTjJqcTZPSlB5K0g1MVFKZjgxd0REcjBQQ1BTeG5sam5qNld5NTVNUGR3MWdLc1E1S0VUZXI4NzBzV0htY1BwSUVmYUJlNUgrdzhrbGZTUVFwYmZjRFVObDI0c295bmRZaVpZRUMwK1hTVmJvNExoK0FCelpzSGVSNXpuN3FRM2pEZlpGQkJxTjNwTDMreFlPV3AxZEN5QkgyUEh0MXNBMzZWSnVvTC9oa1lLRm5qaG5UdjBlY2lyK3hrK2pTelg2REtLVmNxT01ZN1VrZ3Y0NjVmNWcvT0RlOFlkT1djaW5qUVBJMkJMRk1DblJQNWxpVGRvUGxZODlueUh0Vi8wQnhjZS9OWEJ6dVB6M2UyRUs1TDJmNHh4a2ZsSmticzdjTHMzS2xicy9MbGRGYkxQeWVnM2NmRE01eWhKSHA5c052VVIxWVRaUjJLaFJFV042MElQdEQ0a3Jid3B1QXVTYkxwZlpJdEZmK25ndGRrNzRhR0F1Z2Z4eU9uK0dubWF1bXZnTCtNYXZCSXBmYllHUUJuTnlGV3lUV1E4dFU2ektTZ1F6cTViUDN3bXFvMmFkendabUxiMEFtSEMySHpycmwrZGFEbDFsNTlCSE5iSUNRRm8rQmVVQ1ZrYllOcTg0Y3diZGZUdktPTCs5YU4yMW5qYUUyekY4YXlqb0ZRVkd5YXh2RmJ1dUdRUXJnUGI0bUZPZGVsUjdON3FIQmRnUjV1MTJ1eHJ6TDJrUTdJdU1tT0pjL2U4Y29kdXoyWmJzMTBTQXVLSC9ad3pRdGR2eitvYkJ4b0tmbDgrTGtHcFJscmczL2tFTkpKcXZIMnF1eFo1TGtDMnE2aDBqZ2R5RE1NMktxQVV2dnQ0ZE45a09sTVFvRUdPV3d4MG1JOWtOL21mRCtwY0JORTJWUGM3ejI1Y2dMMGl1OENhUldTMkQycmppWm10eGlhc0d0bC9HbnQxK0cvNlNvcFhSRWExL0FUbVRVTVVGTEI0TGhKMTl5bFRJZFhCaHhacFdFVjdqVHRMSEk3Q003K0VUTUc0cXc1NUZOSlJuWHVyZzJOeFlWTDFteFVBUkpCMnpobHl4UWg2Q1RLZU9wdVkxWkVVUjFSKzl3TWRFWFowZjk1UU9QOXZkZDVkb1JFa3NKODJNTUdaSTFRWnNjRjhCSFBqYkFGVmRQcDhQZmFjRUM4aTYrcUZDa2dVS1pNWTJRenpvbU11MnlzVFJENmhmUXFTNzBtWDd1Z1BBUnNIRjc2UVczR0kveDhnUGcycFQvVk9UN1hXbjZEdlpMS21qK2k1OW0wam4wUjRBcGluTlp6ZEMzRnhvME9lTWJXNE1kRXdLY1pqYVRUaEVuOTFyRmpZVllnUk1OV3JUQ0dLTkNyWWkxNEZvcDJBbU55Wk1xT3lqM2ZnMGZEdStEa3B4STl4Q3BPdjlmUnRaUFRCeEN2WEJkZnp5S0wxY3IrOEc0eGNtOW9tYitBSnRLeDFXaXZacnVTNERWdU8rb0ZVaE1Xbklxank0RlhyNTJnV2ZIMFNWVytoK2JHNW5FQkJxRFc0V0tTVWVFWVladmtEb1FJM0I2ZEplYWlqampEUlBROWIxNzBTSGlYVzMwa1pLN0dja1JTa0h5KzB3WHpudkN5QmF1TFNzVzNOTGk5UnJYMUtoUFVLVXBuSEUxelBCbmNiNDJzN016VUxiZlpSMmtOSFRMM0R3cTNWT3J4andWUStsNnYzOHVjR2tOT09UNjZYaFdhNHFrblBoUnFNc1k2M1dNanJYMG9xOVdKV0Z5NVNlRk8yOWU0RjVsMkc4amkzVkwvak8vOWpXNEQ3QmtTK2tTa0p5RWRkaE9wZm1hNXpiZGtUSTlYZTRkYTRucGQvSlZQZXVPZTlsSHpjdnVFZFQ1cU5ISTZabmZSbURYK1MvbWFWV3BaYW5OR2lrRC9Wb0Z6dW1xRFJZcXhRMXRMYWxLVHZoa25vT1U0d1RLOThQNXc4bUZGOXNJekVTMjBMR2NuWVFSSDJsY0picHpISGtZeVRFUFo2dlFqTXloeUg0TmVhQU9Sem9kSkV5QkdNS0VUWnhXemFZYlR4TW9GSElCQ25sa3N5RmtnYmZJNjB0anRuZXRHc3NKQWlDRUFYL1pwd1ZGOFFnZjZNMzRjSHdLYTRFWUd4ZCtJazdRbWtRdXkxd3VkRXMyMW81QXBveGRwbVJVQ253RFl1OHBOaWZBMExvV0o5ek1FWVRzU0JBdDQzWVFtOGRPVkNzazc3cEFSN2pCeVZiVmFvS3NRZnlpbHIyS2hIRFNvaS9aRUlyRXlEMDllRml3eEVDYzFieEpNdnlHaXh1d2l4azQ3SGxTK3d6Zk5tQnA1UGVrUHNXWmltUXRzVVR1RGZHYy93eUt3ODYyMEg1L1c5SzZ6SFFtRU1xd0U4REMvejFpOENPcmZDM2tyMUFJTFh1eHM5bGZSa2piUDZMOGZNMEVpbk1uOWw3aHYwek1lNFBiVSttcFpocGdFU1ZRc2xxZmg2NTE1c2MwQkUwOFhxS0pQeTJYc2MyZW1FdENENzczcmw4SVhrWm1QcklsWThiZ0ZqeXNxMXZ2OUtGUUZ2a1VXUmdFc1NzNVBDdTBsRWZvR1lNTGNyU0h1MitCdE52cmQ2YmpSVm9uTURJWXpVTVhOT3RmYjdMRWMwWk5PWStVY0JCeVBjQllYMHZjaDlIV3RCMWdTYzNvQjNIYXY0OE5sY2Q2ZlpBa01YVjVhWnd1WWwweERLeElhL3ZzSzM5RS9OQzFydGVML0VselAyaDNpZTJ2alFsV1psUGJSZEVnLzl0VjdFNVB0OXlYOHVqaHNJTzJSam9MNUh4OFF6cE40cEdXczY4cUMwR1VoaElrQUx6QzlLN3JNa3I0enFYUDlCdG90Y1RzWDM2emtWNlNUbG1NQ3cxeThOYks5a1MwY0lYcjZEREVDU2RFMXBFOElqSG1McTFVUno1bGZ4WEVSejhzSzBzeGo4SURFMnBpUmR3MlFVWWhSS2JybEhMT29TM2ZMbVFhVkhsUFl4eDZQaUNaQTBjWDBKa3dCZWcxMGpiNFc1VW80ZzlpdERiVmpjZis3dWtKbW93ejM0Z1lrMEszbjB2YmI2amg1dHdtVWl0bWVlVElXM3N4RjZyYktqcTVrVVR6NVpESHB5dzZzM3dKcGtscmJCVkRPOTVmV0lWWWRiWVRtMEVuUGV1N1ZacmtiS05kKzVsTklhUStsaHZKd0xCdWdIMldCSjY1dld0bTBOM242cGZVUkt0T2s2OGlmSlZCT3Zod0ZxWGNIRjVid25HeC95bzBBSlIvMzMvYWFEY3NzMGdwWVRUazEyd0JLT2wzV2VVZDc2dFJ3UlJQRGx6KytJcjVzTm5BUm5DUnJXQmpLVEx1c1N0Ny9ITDZXNGtJNmxHaFJjSzFqTGtPUXlVR2U5VnhVeFlwVkdTWDlCTVkyUnIrTWUwR3JpTXFxVXlsbUxUTmViY1dVZ0lhWXJsQmpHa05vUkJYUmQyNk5MV1BiYTk4NlFYaHFyVmNreTRPcm1IcW9DTjgzMlhnSnYrb1JTakc3bHYreHA0aE1hU3AxL0loaUgreU5Cb3pQaW1wVHlUMGJwcW9Oc2wyMy9MU215bTZINDloMzlHM0wyeWFoUDduMGl2dDhpN096Qnhhd09jV2lmcVVmWVdjZG4zUkdNV1kweWsvcmNBdFhQUWZYMEVlbHk1bitrNEFkMnBiWGFESldubENTQkZwaXIxVUt4V2RhbVlsdjQxR3RTZUF0Qk8rdGRmSzFNOUtpWHFEWVorVnVYU3RSaG1QeDV0dU4wQTZDYllkQlhyM2puL3ZXbUVWT1VPTitzU1hJVWVoMXZiWUwzWlQwNlZiQ2drdGQ0K1ZMMkZFV1g4RnhoZkVzZmpKRjk4enhhNW9GaEc3RUF5OWF1ZDJabEU0bU5vc1c4UlIycjhHam9ZVnFxdnZIOUxBeWJwQndodEJDRXRrTDFKd2o0SzRwbEo4bkhHcm12MzVXZVRRTU4rNXJsYTVvNGtBRVpDeXRoL2NBaThWMlk5WTJKWWpVVTNnbXV5bUdlcUFnUk4wbzJDMDFCME9YeDlRUm5lSk8wNG1VM2x0TDU5aFIwTzB6aHhxeUgrNkhnb3picXhwZGtZRFAyUXFtVGNncXNWQ0FsSXI2K0w3THZ5MEVkdW1hdDR3L045YmQzTi8wOVNyY1hMajVjWEpOMFRrT2JpVXp3QzJwYkZORFc2aVJSVnFkRndmb2xVWi9OdGo1NWR2Mld6VXlOQ2RqQTQ4M0NNdEtzMFNFNnZ4MndIRU9LZnVRNmt2aEFBU1E5S0ZqcTBnTHc3WCtkV0tGUXhmUlIvcnlSQnhpUmJrRzVndGNuUnpnRFF0bDBkb1JGOHFObzVHS3FXMnZhcFFMWmRkaGZxUHFEQkFUSlJwejVINnRvbHNzVEpuM0gvUHUxWEdIY1JQZEVuSUpZK2c2VjN2SmZKb0VkYW8zWWp2b0t4MUptWGNJWm9FZCtEM2dqUTJGTDN5VjgxeXIwQzA1Mms4ZGtNT1ZaOVF1RXI4Y1lNSm5YSmZCSDhpUmVYZFphRlhzRERVVmdsUkNYRk15bTVWVkRMQjZTOUdIMDRlTHhsOExqeFpkZkdNSjkyZy9KM0Raa1p6akRaS3ROK0lRUk4ycW1TcllLdlV0MDQ4L3RmU3NqR2ZYZ3N3OExjUXhqSzNjSHBsUExHT0xpTXJxRTQ5b0xJMTU4b29rWG0vVWh3c1VqaUZWQVNVRG9PUkpnWnUwc25lYXU5Z2I3bWJteFA5bE9LaVp2RkxFSVV2bjNraW5YbjJrOUxIVmdqNnBiRnlLYm1CbWZLRkViZlhUMDBRcG9YbzYxcHJEcUkrVEFuYVIzQjc1YnU5S3c4cyt6RDg3Q0JsY0Y3Nk90WXBvMU5mNWR3UzNXMlAxQyswdGlwaENnU0dwaWFSTVFZenk3OUpYL1k5SnY4bkhCNEt1SEs3MHN3MThNL00rVE5UQlhKbUNGL012ZlBIN05jS0hKSU5ER2krZ1cwSnMzOGc3TEJDSW1QUEpJTnFlMkVpak5IN2VsV05FZFRjMVIwanFVQVV4Tm5GakhDQ2hrTVFPalNtRGZJNWZieVpWcjlPeW1CeHp0RTlmazVBL1lSZ0VMaHhEa3E2WU56aVlLVnEvY1dSaGUyd2ZKY25HZjdQeEVMOXJyVkhiRXhBMnhjTmx1RDJheElqbng4TWR6c0poeUZTbXBtdDA4SGJZV2tTa0hWaWxiY0hqa3VQNnZLUlY4VDJJTG1iRVQ5KzdrZ3ltMUV0Q1B4T1ZSNWt4dmlJcHJJaTAxYlZLRStBSVU2dkFpKzcvbVZWOGhZWC8wRWdLdjQ3RWJzVHFBT0w1M3I3S2xoWlBLMzBlNndBLzFmOFowVlFDODJlWExnczVRdlJxMWRNMHJyS3lIczdiVGw0QmV2UkY3OURyMVBhUjI2dURxelk4Z0xBaGZjcUY5VHliek8wV2NSbHg2d01qY0MxekFld0MyZHliRHpWN1E4SE1DV3g1Y3l4MEdBWXEyWVM4Z3ZPRFdaajFrWkZPdGxNT1VGMXA4UWVqcERaUjFHL2pHNXB5cHltNXpoaDhYWDRKbjlEK0dKaUhWMk1sWUJNL1Z3Q0NoZGpVQ1g0a0NtNS9TeWpFWHJyRFVPWnVEMGo2eVNEb0ZUa1FscG1KNXpOL0lQQkFCekZseXJMWmxpdG5WQTJNd2NzaVUyVzNzOHRPb3hTZ1grcjdGL0srbXEvalgzMndwbTE1eFlEeXpyUG9wTWx2QXVJWk1hbk1QTlUwWFhmamRrUjlYeDVsUkFJWDF3eVpzTno4bGpEVm1YUExOeEJUaU9hMXB2MWJiSXl6OXB6c3QyVnB1cjY1NHZ3MCtRSVFxRDFPWjdjSWpmdVBON3ZSd3MvN3hXcUVNMmVibE9sNGVHK2Jnci9nVTE1NVJrdUgzNjZpdE5Zd0laV2QrYVhzR2VXamszRng3U0IyWXROa09NbjBMNGNtNkVGTFlDQUVEWm5SSFFCdWhxUGxKdXh1cXI5UkYydERRTjg1NGpEMERvdWN0MTlCSVMzWi9lc2pOWE9mY0d0MzhkaGNjcU1Ccmt5WDZNbmJiS1RzdDhYajhjbTQ5OTRnSzNzOU1HVWErNlk4VzhzSWRkOVk2MVRXTklXbTNIZFM3dmEwTG1TZWFLRDFMNGMxZWJGNklzVzZlSHVNekdEM2diYW41Um9NaCtkSHZ1bVpySFdCeVVuVXdNTmZPV0pOaGk1bnJHclpFalEvSjFReFZoUTNsdE9DME9rTm1tZnN4d3lidXRRdjVlMTBMa2poN1RTZEw3TlJBZ0VqSWJOV2xaYklIVk5CTk4wSzlEOVpnbzc5T21HMzlOUlQ4NVhpSCt5eGlCOWcwcHBlVkRIblVtVFV6WEk0SjU2L3BIN0VqWW1jUGJzNmxqTmVHQ3crc3JTRWgrWER6RHhIb3dRUUtncjFVeWlnaGhWYitqWHZCMGlDNDJPalJDOEJpRzdSdE9CZWp2RjFUWDJEaE93RktLWDFZMy9iZ3JiVWpaeXBBeFcvRFBuRmNGODdWMzB4TlgxbkREWjc4VlRrOTFQTFIzMnM3TU50dVY2YWl3U05WYTdqWDNxNlgyNnFpejhBbUlteVVJK0xMeURod0JlS3IvelYzMUROb3FEVDMxaVllV05WOWVmMDUvcHNOK2xiUEpZd1FjWlRxWHFueG5Nd3didjN4Z0tZVnJJcGdkRlY2MVVhZ2psWjJicjFtMFpKOWpFaW9paDhHZkovRDBjZFRqd1ZhVmhmUnhVMnkxK2duMmZPajNMQmVUdGw4SXpldnpWRGdGNUNJeGdidThVWlREa3VDdjk2aVZQUzdRNm10NysycWo5ekhzOE5YR2plVXZlS25KWHg2VEd1VjVycmM3SEdOZ2dGYVVDNUFUT3NrOU5xaE1zMzNiU2xTWE9YOWRDMm1ZRlRCMkkxQnJRYk5mUityQzM0cDVQSjZjc204RVZCcmptMThUTkpvbmw3aEVGdUhnM2JDMG1XZlRIZmlwaTh5aWJiajdIdEdaR01ZVmpFWlJQazNOZkc0S2R1ZDlEalIxRjRlUWsxL0NFci9oU0tTcyt4TE13SndVZGRKRjI3d1p1cnBvcmpkQmpvaUxBTzl5NzVZdWxZSFIvNU5mb2REV01RVnNPeUwrZU5JNUtvYys1dFMvUDlWcEpLbStpMm5saVg2NEpYQWVrM0thanM2R2hKdmdpdENNaHc5cmw5NVNjU2g4WDJ2cXZPMWlwUmx3RlgyM2laUTRnZjY0ZGEvQnY2NTI2MmVNdVU1MmVHMnQvdXlsREFKd3RzN2pCWHUxWjhCb0w1SHlTNHgyQlBMNHptSDJpelBuWTMwQ3RSbi9BSFY4alJScFAwbXBKdkJvNmg3Uy9sWWJoZDBESGh3a09wQVVmUFlFOWlPK1lra1R6Tk5UZGVYQ1Y4TW9Zdmc1bkpIQnNPS0tiVFJucDVnUk5DeGp0YXQ0UGRvcHlUeDJwbDdCU0V0d0pkWXUzUlFjc0p2L2phUngySEEzKzBCbDJxK1lKSkkyRlVwWU9kcFNHNExYalpsejUzSkh3WVJVUHhFY3hFdmRNaUh0THBuYyt2VFFIek5pdkFNNWhlSS9ueE9MejZJTWcxUVU3d3Riajk3U1M3QWZxdmlKL2MvZEpMRmVPa2tFQ1BLZmdZWWFmelhtTHQwdXBlVGVwZUVsNkFXcDAvOHlidXFXVXdUVlV4bHNaNGZ1Ym94MjJpOS9KbXhMQndEa1ZlVE9wOThNdG9sbm1HMXhYNjE0UFRZYTRtVlozbEZ3bWRaeDU1MjNJeXZmdldiQlFjbzR4NVIvVmozcHpGeDMrcGJHWEl3MmsrUC9jYk5qNTg5VjI4am9ISlVxZ2hyemYxbUQvVmtuTFBNSGFnbzM2TXZldXlzdFUzMkIzZGkwcFRGTEYzK2Z6V1FvQ3gycFFsbWVSSmVNSy9aalVCOEFHQnFYOEcrRWt3MnM4dFQxUFNSVWoybVJnYnd4QUNNc0Fkd2JHTjRyWVVqMTNXVDlmdEgxbkhxT2NUTitZTHZibVZaSTZhTUhtNWVyQjNpMXpISDU4ZDRPLzZhaU9sUFUvVGRaVSswc0I4K3E5d1lZTm5nRThwQW9xYXhmZ3B4TUxJZWovY1QyODFqbzlXMlcrd25LT1N6Mkhsa205TTFoR1Nyck81MXo2TnJnNHYrank5b0UxeDZLWURuU3RmeWZnUXo1cFdud1I1bDdIRlM0Y3VaSkplLzBMVklnNFVkdGt2dEtuUmhsaWVVYmw4eGVYRlJwWmlQK0RNK3NrNFFmem9oaVJ2RVhqS1VwQzVjVCtPV2tRYmlQbVk4UkkxV3RHaDdJYjFTRWsxNk5SOTdVU0tSQ21sd1JHcUdWazRFWFVXMVRmWkl2VkVacG5EZUdYUm1YQVp3Y2p2OTdzaU9QNHlvMnd6bTZGdXhpb3pZRGV5NTdPT0pvK0xQOTdzenpyaTlaK3ZibnhENEczbWpDNEdwcWVET1d5WXJDd0NVVzhod2M3RDAwOStqNXYyR3BQR244UytoUjZqL2ROK1h3SzBKR1hJMmtlcmdEdzJBSU9STURBOXpCTVRtbFQrd1oxVWNLZFNsR0l6anJiY3dFZEI3eDQ2QkdPbUg5ejJOKyttL1hka2JHV2hVS2xFUUgwa1R4OEpKei9hNWpBMjlZZjJwS0l5a09EVVBEekUrRUViTkdkNitLTndsM3B5cTVjWFRhZTR1cHc5Q1ljMzNCckVjVSs0YUVrczVWdEowbEJCQTcrZTVEMzdHeHdoVkR6UnliaXpwYW5wVWIyeDdLQ3A1SnhESnZzSjZ5RGdlT2Q5dzlVVHY3WnJ2Sm9GdTBOMlA3VUhvZlRBb2NCNVJaSnU0MXA2NzUrSWl6S3ZoeDdVMStaUHZ2dmtJS3ZFVjBGa3JzQ3RLZnJpa0ZkZzdYK3JKYWlFN2I3ZXBpb1JneGZtY3lDcktnNytRckxJdFRyckRvMlM3bUpKRVZUdGVsSkVQWUJyUmVCVytSdlRmWEF2WGVUWmlwY3NuNjJTUlJITStrTXN3MWhFbktVdkNyZ0tRSWN6VU9qYzI3UGZMc1R4amNVTTVFS2NzYzRkYnZpSWM5dnMrWUk1V00yN1hIa0ZZODZXYWluR1BCcGJrMjlnaEdlKy9vRlNGNk1FWTVXTXlFemtGMWJSb1RyTFBHcFpyc3EwZkI1MDlEeGMveFA4QkpVSDZkZXROOTVhQVFjSXh3RW9aTmRyRmNTV1ZmSWk1R0dTU245RHR2V3ozVlZGaVVBUFZYMU1TcnNpUXBMK3lpWWtFZlRFMDFNYk9Hb3RSVUhuYUxhQzZxdnAxTXBtNzhMalJmTmQyN1ZreFY5cVIxdkdTSGZ2RFNUVE5QVEhOb2p5Z09ZOVdUUUJIbEZ6ZUxWZEIwZ3B3THMwU0dyMEU1Wm1zbWZqMHVxR1U1T0xLMDYyT2JSR1I5anFzY0Rjd2x2TEVRVFE5a0tBOFJuSU5Ocm9RRkQxbS9Da3FoZWo5cXc1T0lkOUY5QVlzamRYWXdPWTJQV0trYS85OWk5YUJQVlZZdHM2aUxzajhkUWVSUDVxY3BXRmF4WFN2ZDJBRGtyMFVHRkxzTzBJaTltaytkQ2ozdExoRWJ2WTNqelM4emsrL1ppSjVha3IwTlFsVTB5UFprdUFlOXZtYUlTRkd2VmhyTU5mdFIyUnAzK3VEQkdqZHVDMXE3OGJXMGU5VWZ4aUk4TVRwWWdlbnBIdFJsOXBFTEg2WnFwM0xDQmg2Q29hcmlpbHJSblNuY1Fld1QzbFgwa2l4QzJlNDN3dlV5YVA0c0hqV2VHS0NTekxKNlgveEduOTIwT294MTh5RTY1NERTRDl1TFVoQUltaU9CZVNxaWpKQXhBZ0I2UXRZRndqVGxCV1hVUG9xbXVyNjd6aEdKZm1Pb3pyWC9YVnpvaXBtZHRFQzlPMXVRRGdFRFFnZ0VPNkppanhXWXI2NHpyV05yV1VGUHBVeXVIRThKSFpMS2JBL0h5VGdaOU0xdG9zS3BQczRndjhpeDgxT2RUV2hCRGRiWUZFbnREd0pGZnNxbUtDU3lnd2JpSDNEdlVlYm9WOW16dTh4WDdQa3ZOb1psTEJWWlRLcnR0bVUzQjF1aVE5V3VuMnMrUU1lRDV6TkdMVmRQZDV6RGVUSjVEekZabkQ5Q0ozVXpiRklSMDg4Y2d4OEF3b0FMdTh2UHRMRmNaOE5WNk41WktLRFlKaEhHMlV4ODQyK203VzZnTWp0QzludXBsODRHTnZueVlHWVNzdG1YNkduSGJyNVRjakx0N2swaVRSeUJRRWwyNkRhdzY2TmZVYTFxbmJqVVdUNkthRUkyUzlrcG52dVBDLzBpYUxqWTJqY1NyQTF1RjU1WjFaTWpyRE80dHBMdjh2VHo2WHRlWmpSUzlLbXhKMjdpdEFMOGZOb0dSdmI0N0FjdnByV0Z5MllkTnNPdVl3eUU5V25hSHJ4Q3NvVlFoUGFCY1pCcHpiL2dpdSs3UUdBcy9BdUkvTFVpY2Z1cjFkRFVlUFBTdHJTb09ybFVFcXRqM1c4QnZaZDNBZ29iTTl3d1ZTY3BXRCt2UFdZaFgrMTFLYjhtYTRZQ3BOMjVJc2Y0a3hoaVZMYVNqTVlQYjlxRHgvczFZbU9JMjJNc0tlVlo2T2N0cTd4TFdwWmoweDhsK2V3MFRPeHd2bml2czk3L0VBR1VKTmZRUytFVFU2a05VMkwzVURwZENDT0JCWGdnMkZyL2t6TUZ6TytBbmw5L1VGUkRzb3Jyc3hxS0JQUWR0WGVZNUpCbnlMaWFBekVKTUpiVTZGd0dJR0ZuUkVtRFAxZVgyand4dTdQS0pJbXBRMWF1ZFFCTnVPNXhkYlhuK0xDV3ExSXV4Ui8rc05rRXJFTEE3ajkvQ0pYZVE4ZEljRVVPL1ZVTC9TOGdYeDdnS0pwQlRnZVFTcW8waGJxM01Wc1cxVFhrRzFiWC9wRjk3d3B6SjBrUytibUhKYWlRcDZyQzg2S0Npa2RtdWlPRDdGU1l1NUdPS0p1YmY4VXltNEpMK0QrY0FJRjduWk81OG5hQ0VUL1hqdk5PRkdWdk9VUjZaZlVvbjlaUzczdDVPRFlsVGRNRnRkWkVDNmd6UlJkRTc4UTZXWGFCQktNOTFoOEx6blU2S0tnWk9hc2tuR1NFc0F2ZjFpUy9YMGcxZ1dOcndPMm1tRTJnRkN0cHAvVnZxYm1WdTFzdVhSR1UwUXhKN3p5WlZtQ1cyNnIxY01XeFk3SXJISzlUZVl2WTg5ek1iY1hUVzNVbEFtajlkRTBPVytuMDhvMklPdTlKNmYzYXFIdlBzRHpSSmhIekdPWFdUS0RZOWpwS3pOVDd4aHhDODdoU2I3MnNJT2s0bGVERTIyY0lUQUlMMGlMMnhDUENaRlgzbitCSEwrZHoxWnhkekF0N1Jkby9Ea2JnaUxiVnM4WnhiczlTdEpReUIxUG45ZHA4aE9rVGxXeG02cTlGUHZmSkthTk9zbHVFSGdTbjZLcnhEbnNsUmVyRmNkWFRzQmdwSFpUTjJ3anBIbzAzNk1wRVFkbUQ4N3drc1B4dVBqN3VKR1VKM1N0WVNOUk1FdERpOElITkp4aVRucGlSb0Z1Slh5d2c2WW1Ga2VsMTNIOGcvVTFBS2VGYTBoV3hPUFhhWi85WTBBN3JhaUdSWTd2dXFlaWhVTkZmbDB2OCsxODBtLzdvS09uM2VSZm1kdVlwVnlpL3FkUkJKZzI4Y2RpWlBrZFMyQmRtRUl4QWtGWUdWdVlpUUJhcDl5c2ZjZ3JsbUFrRTVHVzg5VDJ0d0hzM3ZVdjljNW8vMHk5NTJCZnlDa2hKeERLeSt6Z01wMjN6UHkrUE1yamlFZ2U4UTFGcmtBbm1naEUraFJ2UDRZSm1XbjRqdCt3MUdicklWQzNFYUxHaHhZOVVVWEh5elplUC9QTkdzYzV0WHBhelpSaVdWM0NoV0hxVEp3akU2bmxBYXkzTkRSRG5PcWQ5Z2RVRWtiQWcwREtoTWVMS21BSWhWM3A3M3F2S2pxWGlUdFVBZFpBVEpEOHNNeDJuN0xNTGY2WFc3VVl4WXA4ZEJPMG9BYXM5d1NJVW5SMEJnWmp3bWVxa1dhQ0I0Z2FYRkxCZEwvbGo1Wk0yQ3dja29xRUo4c1RwRlVTVkEyVm9rYklMeE1tMFVxc0lpUzNKNmEzWEM1OHdSajVnZWF3bS9Ka3Q0UTl6T2ViSlRMdmFsYjJJNFY0NUhxbVZnK2txMVhGTjltMEl5TFk1eVV1NG1TbjBhUlFXKzZ3YTJ5eCtacjVpN1VhMG9UNXZRR0NsODQrcXFHamFCZW5ZMUhTNi9ROGtGWmdjMEJ6NUhzVkVjM1ZHRm4wVDM3ZHBOWFNmaFg0MjkxRDhnZ2NxWkdDaEJkYURCZW94cDBqTFE2bHB4ZVpJY1psaXF6VmJZc0NVaDEzMGdmL09EblJsYnJDbFZKb1FNeklqcVA3SnliQXVQV091QU1KNXVpVmM2ektDdHk4WGZVbW5DMklNUkJsM3p0Rjg2cGRGWm02SGF4QzRNMjFrVXR2NDVNRHA3TFhMOXZHMkZlZ0VGUGtzSXJ2SjJ3dVJxTG1BVFYxTWdlOFdEY0NrRS85Wjl2L2Fna3prSzJBMGtLRHN3bFhqUDdUbWJwUndHS0lGY0o3MFVEMm0reTgwQXJiY1Nyd0NjaHJjeDVXcUFSTUU2UGJvS0pmSXBhOUdjaE9kWWJMbVp6MGdUZHVQbUFKemYxYVJsdUVRU3RzemFyQU0rdTN1Z1duQW1zVWtkdnZVY2dHZWNXZ3JqNUE0T3Q5bFl1Ymp2M2pFc0RBTi9Qb3lvc1V6cm9xYitPT3UyWlF6YzlvRHMvZVlDdGF1aldjZFV4SzU0L3JBQmd3cExBTnZmOG52bzFTUTRUZGhnZ3BvYUJMUE96WENaREl0c2cxSkQwWmR1cjdzRFJmeWJKdkVGWlFUa1ZsK0t3SWZtMk5wOHJMOEdMM2t6ekw0KzdENjBZUVYyZ2c5Y0sydklDaGQxRzMrSDB2TXZpRUZBbDc2b0pzd0FkektzbzFmWTNWV3JScEM4STF1djNBUjRjQWhMZUUxcUYwTEszUXpWOE95RFlBK0ZjMHRKTHRIdFFmb25NMHFnYzJ0UzN2aCtIb0w1TXpwSVRiMGVuSlhKdS9rMkhxaGZJbzlKOWQvak95MHcwWUFRTUtYQ3FRNGNscnhEWlFuRi9sMWlzZkhTT3F2VjRCc1JVTGpmZElxUElONFJPZTZZT2JYekdiSTZEUzZVbmVSM0s5c09xSHJaM21VVCtTUWhFN1o3UFBYbUNkemY4d0pDMUhZY0YwUlY0T1JJUThSODFDSjIyRm1Oc25WdkVpQjBDSVEycEVaeVZnZ25BaC9VOWZEaTNRTXZqSmJLbzZqT0QxTnI3NVZsREViK1RkRVdNdUlhNElydUt0V2ZZV05ka25McS9zVFZQSjgyOWNVcXlvNjNBWDhESkdEdFZmNjNKL3hsZHFXZ0dmRnNKd1F0NDJFWTQwdkhqd3JIdHlrajZFc1RzVkkzWGREVkhnSDlFRXJQa0VmakszMnNsZ1dETXV1dnR0OGhDWHYyUDBLczhqdnFHbGNJUTlwOVlnYU5CdzlmQXYydkkrNFBwTmRVZkgyTm9YdDhTaUozazBnb0IwQ3QyelNsSldnZkEvcjJJa1JXdWFlQlJXWnljaGVvemJpckdFQllFZGYvODVxbE1tMG45S3hYY1hqaVpWM1RpZmo0VkFRdjBXc3kvTkpKUzloeGZ6bmJHVFVCenB2c0s2QmlYRUR0Tmdsc2c3Z0ZwcTNObCtRVlZheVdjVG04Qm9xMWtUcGdmS0MyWHhRUDBIaTdlNkp6Z2d1WE1KaS9LajB6QXU5OFlVQW5mNXhTd0Z4Y1d0OUc0bnE2YjFUZE01UVNGc1pneVVJaEtlR3ZXTCtQVFFjYXlNcllFZ1VCWXFtdEp5a0pIc1ZUNWN4b3BIMk9kSEMraE9pY2pvYXJBYkxXckhyWXF3emhuNHpEMlo1TDlzdWZxblhoKzJtZUd4RmlGSkE4ZFkzN2NlSS81dnlMMWNwSHRhWTdzZzZPb3d4MTFNVWcvM3NBdDFPR05WMzhYbHdSWlR5Uk9YcURxZC9TK0NHN1Bqdnd5VnRsRGNZUzYxT29MdGJEUjJZWkpjZXZtanNzVFNLcDErclhUbE5XRWJWZHRvblorYStqOVlnVWxLMTgvWmh5dWZxb2U1Qk9QZnM4d3J2bnN0QWpoNmx4QkpYMUc4a09lM2RNcjVZdmNORC9EYkpWVXVzYk9JM1FsK3RibGdnL2RHNmdYdjROSEV1L0h1MUJoREpYUWNWV2RoYjlpNzNFMzhQcjNCVHdsYXJVbzBOaGhZWTJsVjl6WEFsSGVGRGtBOFZuMkhHNGZCSk9lQ2NZNDExVzJnSUFYTlFnbHBUNnEvZ0Q4akVlVndicTRTWVZEaGpKUTR1azJVeW1vUHBNUmg4L1cwRzhqaWxiaHhoN1h6L1dmVnoxU3Mycm5sWWdkcVpwTFJ5Q0Z1UVQ3eXhod1kvR0JhQWZjR3h4Y1MzVlRuZWJBcENJVFIvM2NTNnIxS0Y2VUhXdU92NEZIbHYwNks1eFl6U2xSU2hxN3l5KzhGYU0wMHBGWFhCbUxQU05RTTNvVmNLQjBYVEl4cmdkM3BSYU5yM2xkUStqVUVaYzE1dFozV2srajduOFRXV0pRK0VNaE9WNHppSmxyK1Vhc1AvZUV6amt6RThqTVl0bW04dWV1b0ZLNDZKYk5wd1VuVXVqaEhwSEgwd1VkeERCdEhwYTVOUTNJODh5cDJNc0pmUjI5UFR0ME9YdG1zUE5mUE1XYUJXV0V6ZjlpNjJqTmNRRkQ1RUttRitORURmM256bmlTT2dtZTFZOXlVN0tQVnFOTmpxQmg1VlNhdG8wdnY0MVY4TSt6ZE5kaERKcjJsdjVSMGJwNkhnSElwaDR4UWhjcm1FekREZWsxTWVST1hDOEY4bGQ1TFNSb0dtVW5RdG9scEtMMmtoc3dERDY3SzMvRzJ4WWIrTklaWVd5YWhrd1JGVXQwYnFJZ1pIbFcyNXFsOVVxMDg0Mk9JRVNGWFJvNkQxcjBlRkQvY21ZNi9MVlQ0UUxpVFJQYi9NRjIxaVJiVldHM3pTNmpXclhQMjllV0h6OHVERXRPRGNvd1ovdmJ4ZUUxdHlqVEZ5MUYzRlMrWXhSRk9aREhMZEVNajBuNGNSOENLUWdsMFVGaVV2YXdJTWUrbW94UCt5VXpnZUdMNGNjYUVhQVpHRnV2dHk2L0V4bEhacXV1ZFJLUzF1K1BHZWhqSXFZWTcrMllscVdYcTRTME9YczJhTXIzWDlqQ2Z0SUl0Q3p2ZEtrVHBWZk9GeWV5RC9VOHp0Sm5xcGFlS0Nzd3QwbWdwNWp2b294dll1a3J2dWozcStMbEtnT2FQY3RMM1dMYzB1U1l2cC80bElCQXNWbEhlWC82WjBuamlCT1NXRUR2WmM4cWVPS3pOa2d4V2c3bXhvWEpINmN2NS9VMjhBUWZtZFFjayt1MUJkTGZJSkN1TVJBcHZlODNGUHhGSWdmZEJmVVdMU0VWRDkrMmdvcmFjWllLS1NRWHJvY3gzNG1rWXhNMWFob0lPWEN1b1ZZck9tYnFGYkJ4R05relFQc1BHblBmTk0zMFJPQytXSk9zemM5cWsvR0NzY3FYUGIrSE1iR29WRERaMmdLTDNNcFIzZnQ1MTFNeFR2dWUyczVzU3lmWDk2VGRWUHFQOHA0VkdRV1FjOFdDWjYrNFlMWUdGdVJ3QmRYQStzS2g3dlZ4RWNzVU1UM2FXNS8wMXM4d3QrZXl4cFB0a0RFSTJITnNXemRCOGc5bGIrOWNTNHZpbGRIQ2JiSkhheVJmVm9QMTMxV3JOVDNnZkJ1U0lKaFFJU0h0VGVWeldrbDlLT0hEYjBXRUJHYU1veFFnWEJTYTZtaFhHYnhxcHFFSDlYOUJQbUlMTk04YmRqUTNoczdvYm1PTmdrVVEwT1dsUWc4U0lJMXFlTjJ1K24vamJwQ2dEV2JFYTVJbEZES1dmTGZZL1hIRVloME5Dc2owcFRidi9HRTlJN2xsMjFTL01LN0xoa0g5UGJlRlBJZTVrempFeGtodnhhaGNYRjFFRWhCbzhlU0N4c0tNQ3pvWHg5MzFCb1pPNW9HOU84T293TVJoTzZ0ZXM4ZjFpVDRiYzF2NGF0UUF5SXRGVFNYYkJiY0l4OGhQODVPVitLZGpONXBLUlJBZTlRcW9kcG82WDdhRSt0WEM5V1hTMll0SzZoLzdDSE9TQjJxOUVLeStwVHBBdlJ1Lyt5dHJOeEdvQ001Y2ZXaEhwVnRDWnQ1ZUNKSkJRMFRrdWkzeVl2ZGF1L1ovS09VWXpSTWhlWVZ1UFNPc2l3MWl5VERDRUgrWWplTW5udlFmRFUveU11QnlsN3VLNXp6K0xrV1JYMDdvZUR3dmFwMDFCNUFMZW1Jei9TNm1RSzFIY2pJc2lURERybTRqOWlKQzZPa2tGbHVGcGduRDIveDIzSFhVMGNHbE9pNk0xaHBMK1JDSmtxeVVpclcrT3hLVENyTUpjM3gvRERoZ3hXaFBoRzFpNjd0NWo3Uy81akprcWUzbVNyNVBJMGZBYnJvQkJTWk1Ca1BWN3VCendCazBBZy92WDJOWTNmcDJrVDJkMHIyRGFYREZia2pTMTVBak1JaXhaRkppT0prVGlZdU1Qbno1d2FRd0d3N2xwKzl1OUZDUFlMdU4xNTdoRnlvbi9JOUZZeFhUVTVrZnNKajVIbHdDbEtpOUUyMjBhVDNKbUNYQkxKQXM0dEFvNzFVOGpST05Ma1JBTDFKS1czcm5rVGVOOVJ6anRSdHdDd25wd29UeTRsZHZNbTlOM0RBNHhlNS9ZdUFQTmZoaHl1akhYdVFVOG94dTVoVkJHZUdNZXA3b3V5d2VkRDhqWk44R1lqYnJHK2dROW0zZVZXTHZXdktoNEJuMXZ1RnVxVDRIWlpaS0VGeVF2U1F6NmlmS1FhNmFmd2ZxUXlIKzFOZDhCajRveU0xSGJsanRPbEhQdmIyOWMxYjZ5MkNUOVJsaE9IdlRqK1ZpSXJVN0FlWHBzSWdqR1ZKT2JrY09BYWNWQktoMnpWTkVYTkRzL2ZCbVZsUEwwL1RLeGNUcXZySS82S3FCYUQ3dGp3bkdud2FuUU5wY1UxQ1JjbTZWelF4NHRvSSswNjVHL0Z6WXA4YXpUSE9GK01VUGVqcVp0YUwyekd6ODNDcHQ3S3Nuc1FENUFHa05LcXRMa2RxcFZWM2xhM2Q5VzBGU2JObVpqYW9RK0NzNHpLRWhDcHI5czVEWGhkZW9na0RER1ZsT1RiUjhkTkN0YUpieHhTMUtyaGxIdUFOcXhUTUtqV3NUTmowRzNCSEk0Rnl2T3ZtY3hDYUdZQ2txSTNSMUcyWkcvNWRRMStOcGlZTFByamIxRlhqWCtkdGxiQlB5RzZHRTJJdzMyd2hoeDFtK2lQV3JqNVFOcU1NWmxYZjk1enBBbmFxSXRPR2hCN2U4RThURWkrREt6b1lZWmNNMUFMUGJ1M2hNdXhCUnRCYThMZUpNRUZGaXBjOVc3cjlmSGZSbkZlZy9EOWdFS2xtdkNNMEJDd3lROHdJeEphN0RZTEtTY2YyWHk4ZkY3cEVOLzdpKzZXcDFLUzN6VC9xVWI2eDlGNHZBTWpLaDNkbm45TSs2VXQzazNKNDNNekdLMzhDODRlVUluY2g0VWFWdFErK0tQb0g5SFE2S1VraEg4alk5Z0NseWI1Zy9ZTnk5R29HZ2lRd24ybXJydURXS2NvU1YycTNNWURhdWtQYXhJM3hwOWtRdHM3c1prcmlwNGIwU1gvMktEOGZZN2ZpZ1NMR0g4U0lQNkwvbHdFaFlXbW0rOWRJbmNQYnhJdENlYUxCU2h6SVpJOHFGcU1MK29SaThpKzZaUnFpbzc0ZUI1cDFtV3hONWVMYlV6K2ttUDBIbDBwZG45Y0ZWeUcvckJMakRUYjF0dUFma3JENlRXRWFhSDFFcWtiWXZwTzdWR0JoMUlSRVZMclZleXc3T25UcisrVk1ENUM5bmVndTdlUWdwMkhRUVZ4Z3h1ckRLeDcrVnV0cFlDMEsrRGNFRVpQWllJWmVVemRneHRRMVVpdjRRd1A2b09qT3VFOXV3RCtpWGdWMGI0NDZ0TnczTHRMWGVlNWhRZkd3ZjQyT01uSTNndjFSS0tvMEhsWTNPNTdiejlDbWZnRmFsNFY4ZENEOUZkNlE3VWx2RWhlUzJZVlBmN2E2aG5OY0tQRU5oNEs5dzFHVjcwazIySmt5ZGhRV0pXNE9LU0VCNUdrTEtDWnpoSEJuLzllNWdjTGZHZlJDVGwvamhmMlFqUFdkNkh5QTcwd0w4bW1NL0RVelBFTTI2bG5oWXhjSm1mZXV5SmVWZEhOditBVHdBZXJFNjRTcXMydVZTK0RvMEhWVWlTT2dWSjMyV0ZwallJMlFyeExsL3JKR2JtNkd1dFZDU0YvaGxVUkhZK2p0NGUyT0VCY0ZTYnlyZ3JITWJZZ3ZMdXdUKzR6U1NrcTAwZHhNdFFUVlJJTnJDOXFFcmlxMFlQT3pKUzVtWU0rVnBsaWRrYjlwWDFJOGw1bVJYVkc3YXd5V1FZVWcyQW1BV1AzSUpTcENCYTZmTW45bmxxdHJ0NjZLd0sxQkdXTE93c0VnZ0hYZ1EyeFdvOXNlMWxkekI3MlJQakhJYnBXbzlsNWsvcjlIdEpyQk45YVM4cGVlU0piRUhGS1R2RHdNR3NhZ3lTdVVBNnppWTMzUk8wY2dSdVIzR3BMakNueXZOU2sxU2UyaGdISVhORWZlUXI2UDdHd3dqcm14RS9nQ2kvV1MvVVJqenNTakxmWkRRVnQ1QnZNbFVScng4enFKWUJSbElKdkN2WXI4NkxxeWxveFp6aWQ4YUUxNDdZVWdma1F6YjNvVk9sSlJLNjhHT050SXk0TFgvcEhOUmUrKzZOR3IzSTRjdHdIeXg3R3l5OXdGT0k3MmUvU3B0K1dUUFZibE9YVmJ3OFZ5cUpGRWpXMnA0OEVWTEtPQ05BNW14NTZta21xNVUveDdIQmJoalQ1WDVBNllKekNpdjAzTlI5clk5RGFyUWpKLzlNTm1WbmhhVWlQTTNxQktsQWdwYk5McGJPTktYeUo5K2Y5Nmo0S1JUY0NKSVRuYzE2SHpFWXliMTM5L1UwNjB5RFVINnJNZVNrNzJWdmc4NkFJQTJRWVFtUXpleldxVWlDaUZTUmROQU45cWlEcTFHNkFWNnNDM01RRU9WV0lGVGxLeDBlNkhrSXJ2UHF6alNCbm5uR1ZoVzUyOHFpVVk4SG0yVmdDaXZFRWlBcnpmNXVVRFBUWEFGSDFKYWszM3h2NlVyeUUwdi9LOEJKMHp6ZElzZXhWeE1jL2lBNTJqUDVzQ2RFb0xxemtQb2FadmkxTmpVSFNHbGZ3OGs1UTIxY3dCeGJ5MDN6YU9DMkNaaUt6aXR2alZ6TnlSbmxnbnM5bjJQbWpLUWgva0JoOHlGUThlRm5UelBCbTlQR3pCN3p4NWYyVVZieFJ5anpJUGdwMnppSkdYSFFNZmhtMmtoMVpKd0FwY3doSkJ1VEhrSjNLenp4bHVPOG5NZStNUVArYytrOXljSFZ4cEhkTXBnbjVJVVAwSHNCV3BtTnNJdHcrLzFrZlR1eEg5WU1hWXpNOGUyZHp4TlkrK3IzZ0tHb29sZ09pWlVLSk15MzNMOGJXYXpLZkRDa2dYKzVWc2dTNzdpcVhNVFNhL3licFlHSmdCdjFJWFcyOVRiOTlSVjdPcjFlVjJhcEFHZlAvc1Z1Mks1dVQ1aGZvSnNEVi9COVlRTnhuM2FCTncrRVozSlBrbEE5WGRGU2pVdzlGb1pyait1Um80MXVKNXdJbVVOaUcybUdGSDJZdVA4WVFJY2hKYytlUHBRS01YVWNoUHZhdHlETTdaNWpCOFRybGM5UzlMZEIveG9mTk9MTmxLdXZkVGt6djBzcVkvOFpZQy9jR3Z2dVNydWVXTnB4UmlkKzNDZnlKUEZNc0k1Y09hdnJGMnRTSlJGOFJUZC9WM2RtaU96RW84V1ZRRDV0TEpKUVZ2RjdnenZlL0oyVXNBLzNuUlhvdTRWNjdOV21vMVRjbEtEMWowNThsMXRvOGxsT1F6a1B2SXRvc2RwazdQN2cxSXp0OTBwOHhVM2RqVGtra05QZGRKaVhCT1FoanI4cVF2NXNJSmlhbTVtV3B0QzBDejd3Wm1QckRIVy9kOVAwbG0wb2xNRHhOc08yUHdUaGp1R3ZKSTY1Z2FwVUIyZThKTlNrTFFqSXlsRUEvYzFld21tUWRnZXJ0RHJhQjBFZU9mK0QyeHFwVTFydTdoa09FQmF2YlFneVZpQUtwMUdXdEk5UXgreXdQVHZlN3Z4aTlrenhhU2cveFZPV0hyVitYbS9lK093NFJIY1VzeWgybTQ1T25jNHRwa3FWYWhsVm96NmtLV3F4SWRPdlBqVmJDQThkRUx0OW9kdkNUN3g0Y0lSaGlOVHZ3eDJ2cVQwRU9jRmRLeHpFN3RWWGt5SVNpd2kweXBhaFRYb3pDM0Jac0FuNThvSWMwSTJzUVNpSVFpNVhhYkg5OGVickpITmhmQjBVeU5vSzczd0lMelhyUytJK1cxM2oySy9EdEc1eVZudXY0Mnh4R0JUTGhUczBoWDFqSytHUWtOU1NZcytmSE5ybE1oUW91MDlzYVpIWUh4V2tjQ0xEUGxza3YvemcwazFKeVBwZ2ZuQ2Q4R0ZUSjRMc1FmeEFYcm5meFdaMTQrbHBoV2phRDZGbCtJN3JBWVg1d1pCS0FibjhXSFNPc3cxVFI1ckFwSUR1cHo0OEI4UFpCNloyMVMzMkg3RHJGY1IvWXMzNW1JY1didEFJcjI1cDhLK041ZWFtcnlES3ZDZmNRQUJ0bUhwaVlzZ1RtSWlOanBoVW9McUNOOGdQamgza1ZQOG1yem1vZEFkZ3pUUm41ZWlES0xDaW9SUitubFNhWXhGeXNMY3VaODBhb21ZejA3dzNTbzJDWjk1bHFFQmIwSDB3OFNnUjZPUzVtelBrY2k0eWp4V1E5eXhJM3ZNbmpYYjV0ZmxiQngxWUJNYXo3cXVjdUdGMnpKa3BWQWhhRGcyb1lxbkNHUW40emRmWFcyRS9DbWdOQTRQOUxyQms2NFVvdnlhU3VpVkxxN1BMc3ZOZmd6U0hXNTE4Uld4TWtjbzYxdlFQb1djMHlTZHJWd3diemMvT1krWlBXVFdXa2p5NEF2Y1lqa0Q5by9CSDA3RjhJY1JjalRKKzlqYml2STRIYnRNN25veEFPYms4VzB2SDg2MVF1RVJUNnJkWVBrQ01mY2JrRTJxSlFhcGVFT01zbmF0RXFZOHlCTlVpc3UxTzZLQU84RlQ2WG9sM3NOeXMrY3ZSeEozT2d4cEFtY0Z4Nzl3RFh6UXEyc3F2Nkx5cVZsQithWi9tTjAxSnVhL3pQZmpDOURhZ1ZDQ0Y2dFF5NkFpWWJjS2FhY1VYU1dZRVFLMFhhV1hyU2NHVnBveENLTzVEMzUyYXlrMXd6ay9Mdmk5eEt0amwrM3JUbXdxbno3NWtGaVc4TmlsQzNnVHNGYU5KZStpMXppUlIxNkFyeEo5OUV0elVUUys0MDVvZktndFdtR1Q0RGtYeTNpMEZWRWI3SzB0K0ZkL1NvNDh0K1RCODNCZXdBbTFMSEsxbTBoZzFFcHZML2J3OFlsQ1BrNTJZTDh3ak1HYjdPc1pxdXpMWVBSQlhlZXRMWGFha0xJcDllVm54VmY0enp1Vlo0MEIzd09XQm1zY0k5aWdjeXF1dEN6a1ZrS2xNdC9VQXFXSm1OUGpYOVNjaTJwdldpSWhHc2M5TXBBM1VLOFExbzcxaE9aNlpBRVlmVmMxMi92Z3NEbzd6YUZXZ1hMVGg0VFJvUFVHRWdPYm9uY0pocTFDdmZXa2xEU1JsU2FrZW9tcitUMi81Tm5RdTRKYjFTZGRWN3daUU9GT0ZyU0dqcnJER0lIT0hTbE4zSmRNdjMvMFBVUXhXcFJXVWpwTjhudWh5eHhuSzkvOGpLd3psME1xeS9zekZ4ZnBibG4xSkJpa1YwcENIV1Ixd3d1REV3TEIxSkpRNndxRmhWMXBPMXVSb3BHcjgvSmpWL3RWcyt1ZURNTHcvQkNNblJ4enF4M3QyeUlIckxoWmhGclNWNnQwK0hXekdTWmZ6bWQyN3ZzVWhHbjJGbU8wTkRVQWJCSUF0a1RROUpxYXkvd2tremNOM2tROUFTQzY4VG40VTlNRDBDWTFJR3BNU0F1dXQvQlpscXhLaHZSZU9GVUUrbm9YMU1OMlNDNC9ZcGpmMk9oa0R5a2xMT04rTDQreXFWYkpVOGRodmM0UW8zYzF5MzFidU9rT3F0a25INEFseEZJK2RvcnJjcmpTYVRvd1ZNNlF1SXZNNEpyZGtxK0pDNFlxMWFZSWM0ZGlLRHFnSVVHa0QxVEMrOU5jN0pJa0g2S1VVZVlicjREWkpHTzVQSFcyL0M0c2VFTGRGNHp0R0U2SGIrSWV4TE8wb2Z4S1ZUL0xPRitXMldvN09MSFFPMkZ0MCt5MWlNYXRjZ1k0ZHMzVm5vNDg3cFUzb3BCU3czWVg4aE9BWUp6YjM4cEs2M2pNVmlkZVJnV2NtbmZ4RWZ4eWl2NmxzcmNoQXAxaHR4a2dqMUFyUkNidGRNeEtneWhLRVYyYWFaSURhWEE5ZkMxdGdFamJJbnJIdE94aGk2dHNGWVhOelhGR2tkS2VUMWdDYkRPTXF2S1VKc3UrWGlnTWEwdHFOMXVlZW5RaTdXZXBLV2tSUUcwcFUvb3JxTFZVTDFHWUlITERzYmRWZUtnTmNqdEpUZGljZkY4RlM1WW81SVRzNkV2MUtyeEJSc3lvUDZZUGo1MDFUN01CMHJNQS8vS0hxcjlNaWpEcXhOZjRzYTI5UGprVlhWQXU3eW02SS9KRWErb1lOYmRiM0lLS2ROSi9tVWdPVGxrV0EreS9xSVd2Z3JvOUZCdDZKc3RReS9VMkt0N1daQTFlMGRJckttRkVJdzNTN2ZmZ2JJZHRvT29GUlhkdFFncmpiYU1BNE9jR2xlRVl1QkZpOUloZHo1Z3NQYm4waGsyYlhmRnBBS1F1U2pJNGo0VjcrRE5YdXVUV1pnV0VDV0c5b2VyTEdSbXozNW1zS3dRdC9idVlNd0dRNEZac0tDZHNkaG53Q091QzNmcnVHRHI4eHJLcUxDRHFDYmdvVHNZWHJQdjNRVGZQZU5uMTByb0NQWnRYU2RFQVJFQ2xyRldQdVlKUWdXcUdYVzM0Y2FxTVQxVk1tcEY1MXFWeFNISi9wZ1kydkhoVlRPa3g2Q3lNTHl1VXIwaHJMNmdOMG9XeXJYdlp5S0JJb2NQZ25obXNXaEgrVitITFp4dHM2czRNWDBXOG1odkpLWjR2ZGtrSXpTZVE3bTUxaVpjdzlUMzFhQ0hJYU93dWxPd1h5QWVwZ0Z3VGw0MzFSb3c5UHFnR2tPREJDdk9SaFhMSlM2T3VLMVlJRXRQampSMVNEVzFGWjVzNGJvUFlWWnRIUWdEYWlSN09BeSt0N29YUTZPaFg5OGVRTWk0akpLSUVIcXdTbWxaVDdiU3I3QXBWZEhkcExRNEx3dXFKQjBSMTdrRmR5OFJMVktvdjJuUGhEYU1nMGxBNDRpYVJjZHpSbEJOTXVBei9RMjVtMTdNM0pyQzNRRmRvcGdBTC9CR1k0cndOb1duRDBvZFEycU11amdEQVdieHFZQitUTU80d2QzVjl3SWpyYkhSdGZQRVVwOVkvUGtyc0JydjF3Mjh0YWtOUlF0OWszMTV5SVZJTDBZNEpmVkx2SE5Dek55ZHdHbGNvcytSVjZwVlFPZU9LSWlnUG9STU5ER2NEZHVJK2Nnay9pN21McUtNdmcxS3hzNUtoRjRaS3ZBVDdZTklFZHZxY3BNS0ltbVdFZXg4YUIyV2I2cGxKbmVFd3N5ek5jWnBqS2VDdS83RGxUSmRNZHB1SGRNZ3V5cFg5dERqTXR5bGhEcEZnSnRRSk0wM3VSV29DMCtIb08yWWZzdGZQeUw5a1FhMFp4TVVRREdCSEJQK3NhQ1FlblR2cS9MRXBycFBRaUJIMVV3ZGt2OXZ5R3FndW9aMUx3Z2J1WlBBRmlOaDJpSm5lcVZsS21JcVIxYmhsaFlsYmVuSVRJVWEvMmZxNXN4T05CN0JLZ0ZQQW9ldHo0SVdDREYxVjN2ZWRIVUUvWkN5V25SNEdZK0RPWkhCQkxwa3JlUTc0QkNjeWVkRlROQ1ptdkZmUUV4R2pvR3F1cUsvTVFaNUpZSGlQdHA2MTNLN2hJcWhnQ3c5TGx1dzlXYXBHS2pwYW12YksvdVU2RFZzVTUrUTNKWTRUSCtDbW1hOWdLWjNnNVlmUWVnZmYxQUlaZHFNQXZEbWlqeElNY2daL3F2NmU1NDRJd2pZS2NkUitlUXRiWFdCQXZxdzhIQjJnR0VsZyt6L2MzVmNCY3pBd1pQSG4vUXh2SFBOVXUrN0xKdE9VYmwvcXFINWViTVVuK2pWVHVJbFMxc2IvR0xXOEpzOUt4ODM5WmxRc09lMkgwNEZUNEptUVNMOFcxSzByNXpiblpHVEJ1MXdmVzhOVUUzWmpLa1NoelpPSmgyNDJJYUhudmp2T3ZrWUZYL0duZ0FSZjlJUzk1WWhaamkyeWk4TkVRdDNxTjg0YzVqL0VXemJUYktobE1XRDFXQndKUGNCalB5aWFzUG9uQXpGTmhGT0V5MC9PQ2Fzb1orek1nR0ZBc1JPWVpBSDVmM3lZRytNa0dUWThSOFRNcnlaRjNyYWJNOUE5QlkxOUNnMDg2SFIxa1BTaVlJSkZXWTRkVHBxTGhKM0RLemNDQUw4d2xxYldHcVRoOUFkZ3VyTFhLOUxHR2U5Uk40YXYvRW5TRjVjeWg0aENZYXh1dWNMK3NaSGhPVXIydGRjMk1yWEhoWW1pbEJQZjhiWW9iTXpZRUVZZTJJSDJlcWVubUY0Q3puMnpTZEU1WG9Cbis1TGIxZEFkQXpRaTFWMTdwTzF3NmI3WHVrZnN0N2o3REJoUnp3eDNmZkRYUzUzc21nMU9kbjJhN016cHErbVJxUkhJR2lvVTNCWHR0akJ0M0VDT29hdzh5NE5oSnEvVDhUTVR2SklGRThWemFhVzdoQ3dJV05UV1JKY0R3dFNpalFlV3dXb2EzU1pqQkxkbVRTbmh5RVJJTE5KcXFlQ0FTMGsrQzBqUHk0U0lBYnRwMEFJNU05YlZZczd0d3NIejdCQ2hLdUZTVVFlaVdZK3JiRWxrQzZ0ZzYrWWJLN1h1bnU5K1BRRkVLMUdSMUtTeU43ZmFjbWtJbTBMZ2RLSXhpc2J3MDRjS2x5QWNJZ0swTldTTG1WdU1iSEVSd2V4anRWYkJvemJRcnhNanBCVjV0ZlZDcjBnREZobSt0bUhXbkwrbElsVjZXajJ3TWFSaXBjZ3ZCdDBmekNsS1hSc2V6TkxPL3RYVFJnWEVxVnFNRmdYWHAzVnczaFlVSEoyTThhejdMblYrSDVIdm5sdVpUbW40dDdmcmJoZDNYMjBUbU1YYm9vSGFRdUE5dDQyQmJiZ2xaRDVwcndGSEdRZlZJbGQ2WkxvSCtrWmltWFlsRStRWTdCdVVkejRkTW1IZGJ1Q09RejdXb3d4L3ZQRC9tRFMwcGFkalNjTmpIVjBRUXpIbUtEa0t6VzJiVDRLamo5NkErOFhpcm5CRmJDWU1vMWhuSzBqK2JaVngzWk9qdEs5ejBJeTFwcUZvYXBBZlE5WHFIS0VJZDd3NjVwbVBPSENKaHJaNW5odWh3OHZCWjBrb0FIVE9xcXRIcElmOXBneTE4NnVUdldTQU83aUg1U2ZiMnFzMmExUk1rSkg5Mll0NGdRaTI0WXZ6S0g2Z1ZITVlqbEQzSGh3dC9BNnZpUVlaSjhOMi9zTFRkZ3o2QVd6QkpVbGl1UmdScWxaU042WVFraThsMUl0ejRqTFZTMlBPMW92TlltbzJZNGE5UzlVRmFCTVkzNUdBZDIxN014L252a3Y1c1NiamhRcVJ0TlI0a0Z2UWo0MWo5cy85WlQ2dzdjZWJ6cEljTDFpbk4rc01aWW91cy9tSXBMSEhQVmVEREJHTVl3bmJXa0lSSEw0enhQT0Q5bUxENGhMN0dmSWxOUEpQRFcvcnp2YSs4M29rSXBYTjZxN1JuQkdra0taR1hHQkZTbDAydTN1cFVwRzkzOG5hMm1Ub3JEWldibWt1ZXRUK0l1WXJTVWdWWEdMaG5LcDk2clVWRXplNE53RFFDQmJVbVRwTlFiMHJQQkVDS1J4bGprZ3doQ1NjcVl6MmUzZ2dRMnF1VnRwZzhHVDlmdDJqMnRXNTNzcmlDR1ZoSkdnOXNrS2lxTFlUY085YUVNVzJTT240SVlmelhJNVlRdGJ5Q2l0RXRZemNydzBMeW9GaUhsbDRJVzc2VUJ0Q001U3IzSnN0RmRjNlUrVGtYT3hEU2V1Mno2dmZoS0F0OStJR0dLREdnOTlBWm9TNXFyRm5LdThRK2JpeFVtdjNjKzFJZjk3cDJzOWN5TG9Ob2l3eGVabU8zUmFNUUM3RmxRSXJENzJteHhrVFZ4NldDNVlhRW1sQWNrSm1jd2EvWko1bStWZ0RGSjFod3RFejF3YzArZjdONEtlRng3eEl1N3BLc2NVRVUwSWQ1SmdpelhWTUF4eUFHbmtNUnRSVFNmcjFpMlo3L1k0RlV3M3l0Zy91ZFF5UTR5ZTQ5Z200YWU0OTB2YXNjSWtwQ014WUVzdWIvV0NhOHZqTkh2OHlyOG96Q1BxNDU3cmpIOEl3NVFSUlVzNGZialBSVk56TTFRU3RRamo2bmtZaDgwRm5XcHVaR2VETzl0Ym5kbEhhYXlJZExlT1ZyM2tFSFQxYW1vZkh2SUdLUSs1cmdiTlR4K01xenpaRHRMTkYvWU5vUkp1bm5YUUhkc2gvbDI3WTdIcnFzR1Z1S0lCK1Jnek5VYnVaM0dnMUlpU0dXcDhlUGtqeFJGWElMdlRwVnBkRGtlWlpjVFc4T2FwQjY0L211Rjd3Z0Y5NWRXOXhJRWtURlY4bFlxK3JpcFhFc1N6bFRqNkxIdTdVaG5WZ2pEbkFmMTN5bm5UM0FsK0NWUHpDYVpMNEVFZmc1Tm9lSkdxM3doaDRnbSs0Z3FLVVplVjBDOU9tbFh5YWVJU2JIeHRiN0RoR2t4Rm5KN0Q5SUo5RWF1cUFvdXg4T3B1cGlyY0dpOFF2TDFocTBRSURaR1NtcmFyaWJjNlNVbFJ2VkRhMU43Vzl1cVIybUNKT0tlN1NOdmRaaHUwakxrY25jajhOWkIxV2RqQ1dxeFZBQWJOcmo3VGFsWFZISjl4WldoNVhrRjBET29qNW1HVlhhZmd0c01mV015cnlwT0VKVXYwa2Q4UzRaT1ErNHd0aXdNYUswc0ZaVk1zbjlmYXd4WDFuVTFGYTJyMENqcDBrN1FXK282OUZpZ3VqM2t3UmNjeVNKdVV6dFRZcGpad0U1ZVNMc1g2VS94S1BNMWlyMjY1S1g0QVRjY1AwVXJEY241RXhBL25wYndvTzRVb05jWWZaTHg3UkR3N0FvT1VpcDFUdjh4TzFFY0lIOStiWGhwdEdWbGJ4bTNsUTl2cWdpRnhaYkJWbThyd0RUNXl6MU9Ka21EbGthTkRUL0Z4bnQxMU1QdlRpK1B3eWVXWFVtNjVNTEtndk1JUHBsYzZaNWJaNFlIQ05YNEpiRzlVQjNJY0MwTEE0YTljT0doNzN4MEIwdU54MWRORkVTeVI5M2NuUDNtbVNJaWdpV0hUSm03ZERVWUJXVVJ2Z2JWSCtpTS81ekI5ZDQxNXlQSyswSU9QMU4rejZ4d3g5SU95Y3pwMVYza1lRbUxNY0t5VVJYZzNwSjVDRG5leDgvWUlYWWNsamR3T1VzbUNLcCtRdDRtcGFRNitJQUdHb1haQmc3b0VhdFU5RHhqRmxBSlJWSmdWZm9WTlZaM1o3Y0VNSnE2ZG1MT2ZOclJuTTVzbGJWYnpaRVFtczZTdGpDQmM2RUl3QU96aDZVdHdHbHFQRUZNU0tTU2VsMXRTUzFqc3lNUWFhQkRpWjdhR2JMbVRHeDBMeFhnUEV1dWNXTVZ3eS8wVERMdW9FcGo5Rkk3dG5RM1BnbW9FcHBqMzhXUFZ3a3hpU01WREdkcFFXWFhsajhQVXNaanJNOFJuWmpuaVM5NE9TZ0w3akx1SDE0dGFCVWR4TjJSMjBrb1pjSFRFWDFGSjJETFBnZ2V5NkVTUTltUmhsMGpzSVpOOGYvV3JoY2tseXFOUitFRUdyeVNjcFE3M3dTNGp4SlpaRFVKZ1R6NFJ5NmV2VGFkaXRGaU10WXpXSUQ5VCt0K2UvbzVacFdLeWhNd3c3T0NOV1BsbkprbHM1NG5qcm1aa20vZTl1SWVuNGlhSjBLSEdtNXNVd09vUnk5ZG94ZWhtN1BEamhTODhKNHIvb0g3ZTF2MWFTMklPaDdJNm5ZcmNGL3JhTGxNSEtETTVmV1pGNm80czZodiswSUdOTi9BRmdWd3lMZm9WUWkzNWcyMWxDRGJnZ3RhY29CTTJIM0w5T0FJaU9ZdTc4c3d5aSt1YWlTbktPdmhPOTFSS2lyNmlJZ0t1TzMwVFpUV3R6cVJYVTVxcEtRRXRGT011Zko0QzdScGFXck9MRmpVUDNPdGhPN21GUVl2NnJ2L2sxUFcxT0g2TFNsU1hraHlvU3NseW8vaWNLckdrWFlkWFkwV0RGaGVmaGFVZVpEc21ib3hudEsyaFdaenl4YnlNNDRDdU1taVZtSWtyQldiQ21GTEgwbzUxbGZpM3d5Y3VvRHNQViszWkEvNkFhb3VqZmdEZk5vQ3ZyTlZnS3VQVnNkdTNjNG9TaHZaVnNCMUxPN1FadUJOeUFpYWhLMHJVQXhFQ0NwOUVnRUFmeTZRUXRRb251amI2allrcWg1UUYrVlBkTTJxSHRDaGdwK1lpRVpMbVYxQmFYeDZ2SVBJSGZtR2dSZFVoYW5GbGNLQXQ1ZFRDQzk2VFE0N0lRc0lwYUgvdVhFQVNwWU9ZTHh2dTNMTHRRcVlDbDBhd3RQbE5ZcGJESEpFQ0dtOVpnc0ZMTGxDR3Q4TUgrSytJVVdoUDdEMUNtZ2IraDJnSVZURXdKdmt1VjVGY281aXhYS2VQNDl3bktReUwwc0ZBWTdLZC9ISVJqbXhPTG5tMDIzQTdmcUdZejBuZ2hhNWloK0xyZ3ZLdWh1d3lGcnR1bzZodmx2NnJ0Q2I0TXYyTitJRUlvZ2ZxMitPVGRVb1BCY0M4d0hIRVcxWG5BNm1aK3l1SW1wSjlrN1ZWOTh5YzZoZWlxMzd5MHNaQmJBaExGdi9LYkJ2Z3JUMy92TzAxd2MzZ09mRkRuZkZrbWQ5eUZGcXFodEU1bU5PY0RFdVdUcUlmTWxjQU1Xc1BPTSt6Zzh1c0dPOTgxZ1I3Y3A4aGJ3RC9OWGVaZVh3aW5rVmRSdDdDaXJ0UzlTVkNXK0RnNGZyTjNDU1E1cGpOSjVmdWFybDRkMXFpeTdML2x0S2s0alU5a001UU5YKzYwbjRTckw0UGM5L2JtdHRXbi9ScmpTenh3ZFl6SjlnWjc3ZytsVmk0R2RnN0R5MStSK2V2enBnSFRkSDNITm1tWmtlaTBsd3N5bXVCK3pxWkluMFcxRHhLSGs4Zy9CUSttS1ppcWlLQ2R0TDVzbXJxd21vYXJHZEdhSkREaDBnZGYzdkJEVGdKbUMwaHM2OUJ1Rlg4M1d3Zy92NlJvS0hiTEM1SkhQVnRCakx4d2VHR0dENFRzOEpFN1N1MldKcXk4TGgwM3BGRFBRRDZCdGwzMmpsVzVza3FOVjMySThweTJNYWFEMjFqYi9SUVRDR1BlNWxxRFVtMytGaEQzNlZQTERZWjZYNmxwcCsvZitjMHRPWGZiRk9jUThOUmFHZTB2VUZ5MzRVTjlTR3Qzck9LcmkrNzRzUE9mVGtEYzNEVHhMWStGS2NNYnkzYWh6blhnYVB2eDlpOTVtNnlwSWQ0VDkwUnA5TWpOTEptWU5tV1BsYmNxSHZ6WUQrbk5kS2NxUTNuMnZBTkZTNXExZnh6a1NoUUdVazV5T1ArNUlHWDJHRXMwNXZseHkwSG5SZnFISHJzVEQ5eC9LdnpNQ1NuYWZEaXFXYW5Gc0k1ZmpPeFpsVmFzZGdoeWtTRUh2b2EvMEJzYTJVV3BBNnIyMTZzYVBlWTlGWWYyb3o5bjRWa2lrRXYwUFZldkZkYk5melRteXcra0xpN1RPSEoxbmhmZGdISXVxWUxHSjRsaEh2QjRUcmVLM3cyelF0ell3OTRFNTNvMEw0Si9iTWRtMzVaUHdUVkJOeGp2b2pKakFOYTJxemFoMWxjdFVEc0t3RnhjYlBsTTJmbTlRL3lTY2xqRDlpL0N2Nllab0pmUEQ2ZWdoeHp3bkpjOW5GUlRXelVMcDkyeTRBNVJlRk16bzZtSnBqVk51ekVlb1FIZjFCVG1WZnJkTVVjbk1pNGlXZTZrbGF1MWhtZFhFVDdla05EOEE3ckFReSsxc2IxMHE1eklsbGxsYWdIa3JIRDBzZVp5L0FiYzJvN05pS1FhdlBFbEhjY3FuRzlLS0I3a0NhTTN2VWJvNWpzRk9tOTJRWU51UmZLWjBOdVZ2dHZrMWVldUhlN2JKT3hPT2ZIMkFncFpla2QrRCt5Si84VHgwTjFiWGplcGhpaHlSSFZ1QXdJcHMveDNJMlVwU0hYejlBOEdPQ1VPU1d4cnJlUEVoT0grczc4Q2RidmlaWHhYOEJtK1lwQkNPQmpVaFhycFBnNUYxU0ptRDNqUk55TU8rQmtyNk5sSUVidng3cDRieGZ2bWJQQ1NCaUNYQm5DTFhCcTdNd1I1Q2ZQNlhoNnl0NWQvSUlHbHlsaDVXT1JTckNJVGwydnB5cTR0c3ZFNm1Ec2Q4TWFsaFdUWVJlRVdRNHVHWGdPdkJtbkU1U2t4M2NZbEJWMzdrRVVDdlRPb05pVHFDMGF4R2JMS3dzVUxncnJhOGxGcS83WGlpM1lhc1BpaUswZElqNjN1NkNISG1NdWhSWUorUUt1SHJmMUFjTGd2U1ovNGo4U3ROaFNFbTZrYzRMMWN4Umk0QmhmYjh5bnA2SVRIUlZtUG5wUnBKNld3NGRSWGRxeC9DRjFDQ2UwYkxLOWFXaWxpWTdWbUVRdzBqNS85cTJ5RnBZVlg1VnBjcUtOZkJRVlR0ZTh5U1VrMlZhZGd1eStBYXBmUHBtVndTaWV0UGliWjVWNkliSmpvMUlmbWl6eVhpY2poN2FDdzVGT21XZFpCdUhIVlVFdkMrV3Z1a0UxRXZiUFJTcTNZVHdGOUFROUZQTVJsUk5zbDFjQWt0TmV5NExMbWIwNjBhQjdjZ3lzRnQzOEJqZEZIVkFQbGZRVjhnYWlEQ3hvY2lRdXBoalBzdDNzdzRYVURVbllKN296VWVQWThyMG9UQ3dRVVdpS3QwVkZ6bkhQSWd2WjZ6MEpwQTY3YytZeDV4VUFnRWZxRWFNSmdHYzVvaXE3WWhaZUhWNjh3N3VVb3plTWJRSlZmZTBlWStOLzZxWmlPK2RDc2Q2WGNQSEVNOUxtbWVScklzR0pHK1IzQUQwQzRzRHBGbmZ5OS9VZ2htc21acER0dXcwbmxJWDU0czJBTEVlQlFMV3JPU3FaTk1vM2k4QW9TWVRtKzJQbGNFOStSQnRSZWlHaGhBc0RLY0VzUkl5YjViOVo5bjQ3bHJYZ3FlV0IrTXlTNnVpVGN5QnhUWE44OEJiUy9VL2dLQ0pwZUhkdVVSMHc2c1h0cFE1dm1WVStSbnh1VVdOWGliUi9DT0NPeWlHSU56QkRIYlpTWkpMNVF4U0M0ZkQzVDY5T3ZlYlhlcTJOdTBZcnAyOUFSVFRhUmNVYVc5d2xhRDluZ1FwVWlvRFM1KzdmZk9aa3JSa0MraHBoTERna3BteE94RmtmSWtTQU5tYUl3R2x2aUVxaEFSR2JRRHRYaTZFckhtV2h5VjExWTd4MUtCaU1CR0R3QllpaVpBMFVyOHM0cnFIMXM0a2xpRGVKaEZqd3dBUXBPSjNUaWhNeDBnUGRzWGFvTGlVY3Rid1hEV3ZsR0RWMWRtU0tuZUZ2TndmZzlMbkhqeG5tcUlJVDhDNnNEdlFyclZVNmhvY2pxeTVlVzMyWC84cHVLMkdwdEVEakpVWG8rcVRkdVp2SnBoeTBEWG41YUwwUUdFMnJEazI3MXpDaTVkNTVEck52MS9HY1NKVU1ScStsKzVRL2FVMnlJcUdZOGNNR29qdUFxc0c4bk5ORDdnUW04b2FNWGtaM3JTck9udnlMc3lGK2FYRGpOc0xRNVk3L0N4TTdZUVk1NDB2amxVajJ5QzJRbkFIRGtZNEVFaForTjAzMG1jWXdMU2xIMVZMTTc4Q3VXNjNuMUVJbGpmVVlaT2J2VW1XcWlIVEpDQVZzOGlCK1lRYU1XaEIwZmlyLzQvVndNOU8xNDVLYkdEeExVS3RwYnQ0ZDllVzcxUDBGSjNoV1ZHSlRudHY3dnlOcytJQlh5WU43RlJ6VkhQbkh3b3JuOWV5c1BpSmg0d0NSOGV4ZXR1c0U4ZnRjU20vMnpIN053cFoyTnBiU2lDblRrK1VzVHFUa1gwd1UyRXF5UW0vMGNwK0tPVk85MkJFRjlkSnBNNmpaWWlpMUsvUm9yMHpsZXlsYjdRa0pWUVJCTlpOblg3emVSMVNCcVlZbUtZWWtNYmgzeHJwK2dSa3gydm1Pa1RoUGxoVFNOcFMzbmN4c1h5UWhGdW8yUjZUZEtRRzJaOXd1bTFHMnc3MktXQk9UbnZBc2dwc2pCSlc4ZU9VSzA1WEtoR3g0dzFGV29DdEtneVk3Vk1PUjRRWW9oNDRHc05kMC96Z1U3dWRZVFdISHFjZnhWNGxEWjV0ZGdYSi9JenppSUxweEZ5Nnk3ZkpUSTRzanV0MDlRWG5kbElCK1IyWFUrU1paVjBmWVJMQWg0UVdiTlBmMGQxQ0FBYnJIMG5McHEwdm0raXRHYWpMbmVMZTRMc2NWYWM5MWRlb3RvbTd4MXdBZFI0QU0xR202Z29mTURHMFhYb0xFTHpNQjNOVWpzYitnK1RGMmQxVHJLeWlRTUZnUGU4bVNTUXN1a3EyOXYyUGZRV3liU2xIdlJsb3B4OUdTUnNzdjU1TTZ4NGF0RFJWdzhLUldYYXNvWk5LY2ljWTZxcXJsaHhROXJwQ1J0WUhQTFpuMlpMVjlIUG9oS0crT25ySDl4SGJKZ3c2eGd0VmFvNEpOejFIWDRIZnJGRFJhZnU1T3plMnY3OVNUVWxwK2h2OFJtdlpvWWxQMFk3OWErcXVwOHJkVDdPeXdrN200c3luMUM1QkdKUEZLMDczTEhuRnNiWVJ2V0JNTE5mQ1lDa1hJVG1qN2dySXdCNkFpOVpZbEExVXNueHF3Y3VQOEYyV1FGRzJYSHFzaDkxdmlRUWVhTTZGVzNOT1R0UkIxeXFkV0RVakRjWU5hSHhnNmJnVzM2QmFGMm14NFlkbFc4clFZSTExeWNlQmNuVDNhdGNsZHkxU0VNU1NaVS9vTm9VeEd4U0xzNm1NY0lVVVV4bERyeHpOcXo0WjR6NlhuZm9qUURXZUdZTkJrOU1oaDkvNmN5VFRLNXZLOUFPaVJleUc0L2JUcnNwaC9YU1lyeDRGQmRVSUpzK3M5Q3FqUW9kY0NsR3prRzR5SDIwNUc0NkFPSE41dFdDa1RHVThVMU15endQMnRrcmFhajE0bkZpNUcyS21BdFB4dE0xSUhQeUN6OStNTlBHRTBkalQ4RkFmUDZyUGllVG5iaWpQK0dLVEJ1NmhHL0l6dHhZWFU0Y3ZHT2VEVnB4dDNTN3hleDZVczZSMTRwK1FuaXdyK2x5RWc4cmFwWE5OOHNqUGpKeUhlTW9QS3RoTUNJS0pJR0NGRm5RR1BlcTgwQWFnZlY1MG8yWlh3MmNkNitaZy9oN29uc3BIS0Vzd3ZMR1pCd0tCRmRySzc1WWV3c0xQUTNmUlJ5ay8zTk9IY0tuMWZzVkorRmJYZjRVWlRYbWZVQkxWS0h2UVR2d01LejhBVVJsVGQrNmxxWmxpd3pQMkFaUlpTeGZIY0hDRzVXN0N2MVVtQTZ5dUc5T1RWL2VqcVV6bmJKZHkvbXdXd1ZkdXozZkp1SmY2b1RsRyszNWZORWRLY2poVzc5ZXNPOW9wcEVVSm1TODJPQWt4azNaZ2lWbVBKZWVIbHlsNUhGcGpLdStVVXhwRjNHT3IrOW1uMmxlU0dMOG45Smt5cEdRazRVUlQ1bS9Yc281bFBUR0l2MGs1NENQeFJVaEhsVllVRlR3OWtxbjR5SENOK1pIYkNKT0dnUVZua25XaldGamw1S3M4Y2FGTk12dGthNGFuVm43bFRrT0ZKcllFT1hjWFJNRnJQOEZjbjZiaGlRVGd5ZVlXY2V3NVUrVnZGckxDQmkxN3A0TjBodWpGRzlSQU12OU1XWEhCZXlhM1U1WWlmU1cyczNraVBmaEVEcG9zcEZlSWFLSm5rV3RkeUtDZC9RbitiQlRPOVA0QTNTTmZucDBKMTVETVFHMVhRV0ZidGM1Q1M1R1VqWGg4cU9xNjVQeHpEMUdHNEF2cm1GYUZQRW9WbEZWQmxpc1BUTmdNK3ByK1BMTXcwd0Y1SXB3emhlc2V6cXhmSDQrVkNLYWlKazRJeDNSQjNtc2t0VWZ1cEZBVi9VeWhsRWlQaUczT0R5Q2tKbUJuODN2Rks2OWhDNDJMZFFURzEvSlpiZW9QSzdOM3NKOEwvNmp6TVlsUTBPT1J3bUpSQVZGVUdwTE1QZmVGbTVuTVUvRk9LUHRHVzJoOFRlNXVzbGFta3NKMU8rNWk2MEF2ZjlIZ2lZSXdIbVpQTnBJcFRsOS9TT2dwZXY5cEs1ckVWeWx0SGJDTFdla0dEaU53b1RLRFZMN3NGSThGd2VzS29kRk4veExYb0xFRmNyTFM4cTlVZUJVMmlZSzdQeEQ2QWw5MjYxY0lUT25pR1JmQmdkby9pVWlBcCtvRmZJc2wrb1NDbStOSU5DY0xwdldGYXIrV0ZBTHZpa2RuVUV4MzNiSHh6cWxGUFMyWmNPTHhmV3poZGFYWEpsL3NTUzNXYlY1OWtLV0NKcTBtQmt3dGt4YkZkSS9TU2JIdkJGcmtNcGIwTWRzYWNaL0ZGRWdRd0UzYUdOREF4STJIaFJkYS90Z0FxNjV0c0VjQWxYR1ZJb1l4dS83cFJvVXdZeG5reE1ocEpwVFYwSVVCZDhNSVNENnhkRGphTE95M0VNWWF4VURFamY3NndJS0l2S0dpUzVMQUxJTCtCRSt3S0FnSWo5TVM2cGdnUVdLcXpjWDJSWW51SUJzaUt0Zm0wMVJaTDlnUHFBT0xrMkg2QklQbTFqWm9vSUhtVERzZmlPZFJPa3pDNXVkenN2NHh5b0hTYXRuOHdUZXB6Z0VqaGlwaTFhQzkvaUw3Vi82aG51OUhFOFBMOVgxYTNkaFY3Q1htOW5vRjhjZ2ZJOUUvMTJndTE0cGUxakNhR0wrYkt4eERIRHdncXBYbU1oNzB5QS9taVd4WWV4cExTdGR3Nm9UQXBzZWVkNWtsRXhzRHBvOGEzS2NvdThDcGd5QURNdTByUTg1Vm1ScGpudGxXTnBYQUhOYnp2aVpWRGQ0OXZvU1FMbG53cVgxdEhOZlNPaUJxVEFobDRVZFRHMTJIU3NPUWRDU0psOWF3UzVDYWhXUU5uejVWeC8vVi9DWDFYWWhNNWxuWGdRMkxxRUN3UlV3YmNTbmZMaTJ2cS9rZ1pGYi9wSVBTL0VaeFlUQ2Jwa0VHRkc3VXZyREd0M0FrTENEQ2VURlhmS2htSUoxNXBZSkNzZnVWeS8rZnNQVnlTekhnMTRXeXFXR09ZSS9WQS84ZmozSGttcFc3Z2JZb3ZwaW5jR2dPSlpNY0VrcDY0UXF1UnlTVkhUR2pDUm10MDJwVUh4NS9BS2pMbEFCcWFLZ2hKZXpXYWxlektSekhFS0VnV3UvNTNmZVQ2NWdQMFQyUlR5d2J5ZFd2WkRDK0Rzc1VsYWRPSkVSekY2ZFlMbDBwRUFDVEtVNGFWN3FPV0ZLN3BrTFVBSXRXTXNHcnFTRnVoaGF3U0IvOUk3UlhmdUYwNzBxRzJnV3F5b2JpMy9iYy83RHQwNEtBR2xlSlpCRjk4WVRrbEJkY3RzeUFwelM4b1pIcXBKSXFPTWhtcDZYMTlYaEVqb3F0TS9mN0hHSkV3NUZUSFRJQm9IVXR5RXBhYjJNMTNHdDBaRkQ0SEJSQXdsRmlNQzR1U1h2L05LWjJLdjVsaWhYZnZwVGU4clpzcERkQTJRRmRMUElLWWRpZXhjYm40UUFtZWRmZlpTRmhDRGxlMmZ5My84aU5VeUdaSWkyYUo4L1dmYk9rVXhRb0ZlYzdQa210eERvYkMvbmt6VlRjZXV5Y3RNdzZ1d1pjTzZCWUE0Q2ZYZlBpZ0VLR2lROXZBOUgvdTJoUmRySzdPMnNENUR0Uko2OFZYaGFWR2ZnVGdKY2V1OHlielBnRTZHVmpIRjkxaUIwK1NiRHRPMzkzTWk0MTR5UHlFRTNTMmUxMlVhakVqNHpaMVo4K3FrQmQ1ZkZwVGR4Tmc2MEIxSXM3VVpDRFlQa3dETVVuVmp2V2VKVThrSTd5SWQ5clVzbTNCWmJLaHl6bU5zWHl4RlJ4VzVzRzhHdG5FSGNlODFsNEE3YVhheENjem82c2F2VTA1NE0yTzZ4cUpTL2JBUWo3aGVvdFRRbWoxVG1LVWJQTVFjNldSVXlIVTVna0pvK3p0NjlsNTd3bVVubW5waVZhNlkzME1CWnJ0VE11MmRNa2hOWEkyVm5hRklra2JaKzZMekRBQ2hpV3ZENnc0bVMzUUVSK3lzajNncnVEMnJQODVHZVRqZG5TbUNhVG1NODVjbnZPY0gxVEp6Tng2OFhFd0tSRHF3MHFzZGdkK2hkaVk0OHY0dUpoMjUzR0tMUEpyRVFpUVZaVEFOb01lSEt1RUl2aFZVQjJBWkY2RG84RkJPUUE4cE5zN0dySFcxcWsvQmZ1aDZtampQV3hVT0tWVURYek5sTUNtVHBVTmloZzhXSWllSFp0ejJibjRtaUpLLzQ5UEs1Z3RMcjBYMGJ0d1Aya2UwamZCSlJreWJuaXBieTI2WEFSN2hGSWM2a1paTGtreHJ0dmRRWDNWaWFCZWg4QWxVTEFwY0QvcW1oUEJmQ2NiL0JCOGRYcCtuUkRuM2xPLzkrd3Y5RDRya2NpM2I5M3kyNk1TT09SbVQ5ODNZM1Z0b09jaXlVbVJWaThoTkloa2lPOGZ3djczYmFxUEFScUJDZGNnZ0lFMks5YVh5S09GdWg5N3lFbzQ4a09aYVJMTkhQM2NDYi9PZ2sydmNQQkRFdE1DTFRNck1JNEZxelV0cEl5eUVFRjdKTnVYOTBNNnkyZjhXcEtFdHpwM21ObTg3K0lGUkttSmhYbjFaVmZWd0VVREFmVlY0RTRvZXMrdmlEdGZPVGVaczIvdk1jSTZYbVJ5QitZMzFSUGk1R0hHeDJVZUhzRDdvblJpVnZIdUZRSXdKN1NtQllCd3JhU05Hdyt3ZC9rcERFazh5WFowVFNoUUZlNldaVEhSTy9jQWdOK2hiQWdNYVc5QWxmZk10VzBUWjBjU3k2RjdtbWpxYmRSNFpyWTNucjZjWllFaUsyRFdVWFI1L201K0pQQUlwdTRvSjFVV3YzVnl4QllZcWtJWnFxbUluUVY2ejAwWWVOV3Q0NHVVdWpmUjN4eEV5TU1EdUp1aVlHTlZwc25QS2sybC82b3pKUGJ0SVEzR2w4NmRFTEZjNnQ5VE4yT2IyYUZGbTBLb3BnR1Y5YTFrdXdWZ1dETE9ldVY3YklYM1pUT1lScXl0NmM3dlpmQjR3bGU2ZXc2Tko4UHpUL2dVZnhYd3g5RFpMcGo4cWlGSDBxNTI5Snh3VE93Q2g1cFBqclh6ZUp2VFpwbUVsSzgyYVJ0QmFJNFB4MGc3b2srbi96djIrYjE4UzQ4WjRtM3gzWmVnSzJsMHNDZTR0SWhPZXJXM3BHUk5qWUVRd2E1dUhVdVJGMnR1NkJrclhZSEYzcDMzSXNFOVN6c2VBcVBCWjNsc2NMSHk3dDJ6NUEzSGs1UCtuQmFzNUJTVjZBVjdJQ1l4WU95LzE4YTU1NEgrQ1d3MGxGdHpwL3FlSnZGL0NEL0VjblVKQUhmaHdOUkRFM1k3cFJXcUFxMURDajF1cGhMQzZkOFBucHgrcE00TWxJUHBQV1dFMkJHeEZVT0xaZEpJVlFsTlZQOWRBNUFCd0Ivc09nZlQwT1NFNkhVK1NyZDFscnpVUGdNVGF0bmFQQjlmTWhEWWVPWFRabVp2SDlET1pKcmNWZm5zNGM3eFliT3IweW8xYlN0YmhsN3VRYU5JRDQ2T1kzQUhraW9mbHhRM3ZNME5vR3V5dmpkd0VCdjVLNm1PR0hhaGRHdWtTWTJ3TmZmUDJtcjcxU0U3RVJaSlpVZFZNWERaTUZaWGx2SDFURWI2b3AwN0pURDNOc3pPaEtNYW1FWlhSem9BVWV3RUpGYjhEb3U0VEt1bTBjYVZvTzR4bHE0Y1c2aDZjQW5pRUtYNDNKM0RqRE1VUUxOQUlmaGplVUFWNUw3eDE4em5tc2NhTHdzY2p5aXp1WW1hSVdpV1J3OUtYVm52VWJyMEJ5dXRCcUZNdDgrcStLTndxV2s3ZmdIbm53eTQ2UXFKalp1dU5NdFliWkNWRkduTGRSZkt6UFcvRXQzVEFlMDVjV0dxY0krZ1JSeU5IR1k2Z2dQRC8vWFVUUktNL1NUWUhNUWlEVW9tYmxDNDNWV2w1VVFIMnZrMUEvSHFWRk9zakhQeUthOFpWVzJlS2xSOVVFcGJYVWQ0eGc0bDFrTmFNUDlTT0ZTcVZKaWcvTjVhcTRqQ3krQ1R1TTNxMVNpOHlraTBoa0RJR1hKOE9YSkVFdndyY0VBUFovS0dYRXB0VThBQnFlYmNRbDE3bzFITnVBQ1dTcFRBd2w5MU5XWHV6RVFrOUt2bHMrdG5JWC9WK2ZiYllKWHk5M2VwNWZSQXdtMTBhbnk5K1hhSDE3VTBVNEs3MnZMSTJIVDhnSGx1VTd2S0c1ZGtSdHF5amxZWVh0bU5PRURWUitnRUZLcTFZbVkxUEdYRjl4ckVNcm55OTYvcGdiWTlaQ2lSdkkyTG04ZHpYUDhrMEV0djB2d0xNZVVtalY3ckxHKy9yZWRLUWg3T3ZuSGgzOXU2NCtEVzk1akdJTXlXUXVuRmM4TWcxSTJRMEwra1BPemN5R2VCS3FVSmhrWG16SHFNaXFGaXRpNS9TTmNQNVRrWm5xcWdqeVBTV1ZOM2hnTXhNNVFtNnJVMkhLeVJqYjJiRm9mcFNLWEg4ZW13QW1mbFFMS2Ivbkl1WXVqZW5DbHdDTEk0L2JKL0loTkVPQ096SG5SZkJNNFpTeXgrZmVsTzliVkU4TXZmTEtKeHRQVkUxRysweDYrRjcxeEF0Q1BYcGlpZW9la0ZnelZjc2RjMENqTkFuUS9aTnIzM1ZtcVVBdmFTUEJuUGxvaEs3NmwwWmx0OVJUODFONk01UWVnTE03WnJRczZMaE1TQ3pDcmJvZ0FRaTVIb24yMENOUzZ5RUptQnhySTR4Mlh4a1VUOXA0czZob3V3YkozcVNDVkFWTmUvbGFRa0FjaEszdjUvOTlRK3RiNVJEbGRrMlpGazdVOU4yai9DTWZXY3NJa2tPZm9MRUhLdUNUMDUrNXQybEdSMmpOV0JZVXpxQ2xiZnIyU2Y5WkpvbE9nbGlSQjBqY3B5WmkvcDZqT2lKM01JU3drNGRCVFRBN210emhzdjloZzMvekgwdzN0ZEptU0M0RjZxTzNCbFhjVit6TVF3OWF2bnZvaFJaRitDM2FxWTZXcWZ5MzcrQkc0aVFIb2p1VTMxNzVJWWI3NUR3ZC9ucVdtWVc1aDlXSG90aXR6MXBBS2U0K3BhSHp0bnZwRHVqVWRHdnFvalhZdm1ENERyQ3dRVGNPZzJVWUxZMDAvbk5kZGRTK040YWYwYVpCYUo0aHR5Y1RxZloyWHNXV2E2L2lhSkwvWFB4WTMrYm5CVjI2YmtndFBubldwY1VhSk1UNGVNNFRzSTRkRkJwb2YvYW92eDQ5RjlPcEJWSEEraktUYTBWSmZrMEl4WlZ2T3ViaXNBeW1SVXE2bk40QjlFK0NJcFZHVGd2U3BJK2pRWFUxck1ZbE5UeXBsUmtJRGQvS1dMZWZhcVFmUlRwSERDa0Mwbi9KU0k1VTFlVmxZNkdhVG9Nc0pyS3lkV0crNHRlUmJELzU5ZGRvNDdxd0hXaDZMN1hFRzV1dVg1N3BkM0xWSU5tRjg2Wko4QzFPRWZSK2MyUG9WM2NMWXFpbkJKQkZhVUlGZUtIU3FveWl4RkNzMnlhRGRQb3N1T0EwQzkyL3ZJNXFKZUZPWHJ3QVY3NG9FaVRab3Y1cWMzRWhTd2xEdFpoR3pPQXh2REpKdnMrUndmMkFHRzJuWVpPdnB6ekhHY21ReFBROUtMTi9RTENDZzljRzdnSEVSZlJKdXU3U3RiYnFTWWlkTkhBcEVoTDUyWW9LRlo4K0tDSjlWTExnbzIxanJraG1kME9CZEFUVC8zSXplTWhVZWYyenkrNXNnbVk2Qmw1bjBoOHR0bkR1VkpyQjZNTkQ5UEtmTFBKeGVwU0Q5ZHpEZ2NxN1hKcVhqTktNcFd2MXBCTjkwQnJkVmNNamdjVC9QUm5TR1BIbTdrUFFDbkRaVHR0aEpVM1FQamdlUW15SXVGeThoODhvU2IxMDlNSG5UOGVQNVpTZUwzSzNrTzlKK1VNOW5RWjVwRG0wVVdRelVvQUdSUGh1N0tlWkFpYjFmcTJuNkY2TDk4SjZLZVVsVWJWRWJSQml2N1hVZWtweENjdkdEZXNRYlJIdXlkV2xxdER5NVk5OFZvWTZOTmlvbHA3WHk0bUtzSVg5andvLzZRc3gxNjVTYzN2QnJHREtnbUZPL09yRE5GM1ZjR1hhU25qWE5OblA4b2JEY091eTZKNVEwUGdPZ0hrampCSVNPMk5oNXVQdHpTYlc0VWYrb2lianNFOTZCSHNjcXlNOWdReGludzN1eTJQakxSQzYzRjRPYlB3N1J3NDBwN21lNlRVekZ0bGFVRUUrWE9TT21nNDNXbDBWNmlFVkJqRWhpVWhWeENiUWFWRW1VV1pPR3FUREVSdmJGbUhwWDZjeDJZcUIySFhnNGdadWVrc0ZaRmlLck0wclVmaTQrQUZpRmV0SHMyb3FDZXVlTFJ0aGU3aWdrOGxqSEpaZnU4bWJvNk01RysxNU9tSnQzVHJLaHo1enFnMk1RTnE0VWcyTW8yZEJYRVcrRWVQNHcwS1NzOWdsS295Z1BFVnl6aUJaMmwzNHQyY3c1aVVJQWhaSEdCcENuK05DaWYwSFBKMmh0eGhSTVhyS3c0WkI5VXEvVkQ5aVE4M2JYYU1uTmhYUmdyWnFGdHpzWTkwM0x2WGppSWhlc2pCTXV1ZWh6aGJ4cE1EMjdqWEk3dGhyVXBwemhXQllMWlZ0L1dNRmlISmFxTXZrcXZieFFBSXEyeldDUGF3SGQ2U0pKVWZ5SDVhSjhaUHRGbmNkNnROSEhTOHFmenkzQkJwTGtNMUxRdWVMQXZRSVlvd1lsOUtWNXBRWEF2eUlZa3JlU1ZYMEUyTnpTdDNhTllFT0p1Sm9vb2xUcjBsbGZLMmgxZU8rQjhoVW1mbEVzRFhlaG0vYVFvd2JPZnA5TEtvd0lZZUJsZGhtakR3V0tZL2t2UDVwd2VlTFNEaG51VWgyWmIzbjJxMSs3RWk4ejI3L1ZHTW5rY2d1alBnVVp3dzVMNmZPaUhWaGVPZnRhWFFiTnZsMXplbWduSDlrSkNzeWZkZkY1UlR6eEI2dzlyS3k2VlhEM3p6enRaU2VqMjVQYkpTelpSV2lYQksrMlVvQzVaUXFtR2R3aEViL1FFcHk0ZWdqNW5lTXB2UFpXNTF1c3R3Y2VvMEtyOWlMUlczMFdVdFpqamcyQXNkMlpHclB6TzBqY3Mwa2t3Wmlyb002aU1mOXovRTNlaXFBaERMeWJDNlBEd2pCc3AvalV5N0tpZHN0bGtIbkloN05ucmkwdk5XdnR5RmtEVnd5S0FFT2grRHFteFc5dHJDUi93c1o1cjd3eUwrVWdNcEZRWlZORkNTYUtoaFVoU28wWUxpbjB1SXBSNkRqaEdJZEFLQVlTc0pBb3VPd3k5S3FRYVRHeU9JcDhySkxBNXVjaTlydzZmVktzNFJhN2dZVDljakJnQWs4ZXozV0czRUlvbkFVeThRVkNtS0FlT0N6eDA1MXZVNm9XQ1VIU094VUUxVW0zc2lFWkVvSmNnWXl5eDlMcXpsZVV5YnY1Wk0xWnJFUHZXaXNtUWFiaS96T0pTR1lTa2lodHFqSkxEekRqNDhOdVFoeXprM0owZVZsTEg4bzJsTzd0RU1nNmMwZTRJWHdscjRBaW45UEx1VDFpODM0UWQ0dXdwT2dJQ00ySXFOZ3B2TjBRaHNocVJYVWkxRXBGcFJWUzlCNHVsTXdrSSt0cllteGxpVGp1Z1Ntc2RNVEpiRVpSQXNBNzFWWTd3NGtacUZIYWwyTlhJajQ1c1dyd1M1YlBJdEdJcFVBWlpwUkhrallGOVNXMTdNTUppcVV1NW9Dc3h3VUNmTlc2SFJEK1BreSsyTE5rTW9SYzdtajkwczlGNWhTMUF2UjErdndIUkwwblVLOFVEN3NLUTNxaThNSVVVRm1MUXIrWEFVRDNralZtZ1FWbk50ZDY3UVR2TkFxR3V6VnpXVFlsL0FSa3RiamR2ZTUxTHErRWlFYmFIYzJVdWY3V1dJclZKTG56aUpkMVNLYm1JeFlKS0JXN1AzTG1QSm9LcGpxYnF5R0xXOWcyQU4vTnlESWp1cVNUN2RUazBveVk4WkhaaXJDYmM0YXZrWnp6TENldFBHK1c2UTJZdkdPSWk2V2JBbm9FUFA2eVJxbjNvSUo4MitvUU1hUnlYOEtXMGVHQjNzMGZNelBIckltRGRCaTFDWWxSL3hKNVlyQmpGQ1l5YTlOSngrU0IzbXExaGtIN2NUYUg1S2I0VGpRQW1RVmJDR0d2NEtvekZ2WnZBN0Yra2JxOE9mNzRhMHhZUW5PbVExbWRkWlJXSkMzWGtKZ0hOWGl2czB6Z3Vhc0RVQURMRVlBc2V0Q09wczIzVGg2cXdIQ0R2V0dRdDRpNFFvTnRJbTBIVzNJalZKdFR2UHdhWndRcXdrYXZzdFBwNzd5YWdmaDcrMW1STERmRXJHWlpwM0NsUi9mQmpOL1c4V21YelZQM2NBYlg2OGsrOC9EWUlGUWFZaFpYZGh5UXVoVzZHTVFkMTFEZHdtZUpjNE1wV2FZczk5V1lrNUYwQ1VWWUhrZWdhbTE4dXpibldNK05CSEVuTnRGZ05kRzFSNmc4aGtVVldKU1FjSjlDK1BHb0ZwRHVQU1Q4R3RpMGpWbkpkL3ZXbFpJTXhWVXhwWExtRXJKNkxrbGU1TlI2SGJjRTB1ZHk3ci9TdGY2QzBLR294OHJMazJ1RDBIYUdxSVo5S0V6bGx3bEZMNlc2U2tJKzVScEk2bzNHQjNSc3pEQldoR3YrMW0xaHVQeUdINGdjMmJxeFZiSXdsRGx0b3BCUSs1MUhjTmFhTWRqLzB5T2dhQkVlc3Q4TmpIeFRXUUZBWldVWDBOK0JIS0JFUGgwTk1Wc205aVNsUkVLS2tGbTEwc0NpM2YrM05qY1g3Zmp1cU5YVlVIdTloOTF4MHczUERzb1dIdHFHVmV4M3ZQajNRcGR3dWd4TE56SDJFVHphUGxsRlRnbXc3QUFweXZ6Z2lKbFpGS2pFZ2dIUVZCUnN5Q0JBL082RXJ2MW5EM05YUkNLaForMjZyRjVORElIOUlrNnM0Z2pBU05wMjNZSVR5UHd3ZzZDQ1hsaG9QQ3RRTVo4Wk5Bb09JZ3JmaUQvVTJSdExEUzVlVTBRa0krWDd1aGRwdDdtMitjNkhNcU9uVXZjQU9mRzBQTjZhTVBKZmdRcVJxbU5WZXR6c1IrdEpoZ3YvWkZjaGtlU2Vkemp5a25ScFZLek5VbGRVQVdMbFBLTHBKRnNOWmVxYkJPemFmWVZ5QnVLYmFtQkhybi9DbUFiZkw2QVJkRHIrTUJiTjR2THgwaDYrNEI5eG1vUFpMSUpSOTl6SFE1b1FaSnljU3RLeTQ1TkgrQzdLdE1sanhVSTlIM3UrTHFhNVhsTTA1VmlmeEpnUGhUancwLytoM0c0dHI2UG9BWGN6Rm5pTFNKWjV4ano4T1FPKzFjcWoyUml4QTdVRzgveXd3aDdwamJXM21KNXlpOFFpV1gzODg5UW1iRndKV0NUU1pYdSt2ZmxWcXJXblJTMmtyY0tKYkdna1lhamMxUzlvVy9IeTFSb2tvNGpqMzIrL0VXSlQySDRqZFVrZGs0M0QwdFVIdk5vWnhJS0dvZlpQOFJPVFZtbnN5S3huUTg1OWxTUFVlVTJKenAwbnM5eWM0c3g2MlM3U1VDMCtaazlPdnp4RGJNZW45WWVYbkNNL2pHYmw3K3NmbTE3aGx4VFcxZmJiY2lVdDhLeXJSSFZHSXFZQThMZmV4a0pwTHN0TDRDWVVxNFdidll6RUlnQnFEU0hmdnJEbGRDWGJZM0w3ZUhCOHZ5UE16alVLT0x4Yy9xNWF1OUxyYmx5RWlkOHkwOUV1dU85KzN3YkswQ2R5RWh3d2FRa3lFbU5zNU0raERrVjBZcWRJTUZiZWxoTkFnREN0VjF5Q2djUmF2NUVhOUpUbHBnZDM0c3NxZXRnaEpLY011MFp2YStXWWhtaUtXNVoxNXFpMDRoT1ZqK2JuNGFUR3dzUlFhc0t1T1ZaSWVHZnpmVzc2eSt5d1pFKytadGFFbVdGT3RvYWo4SUhTOHJtVzRUNXZwSjllMnRsSFkzM1R6aG9MRG9YVk0xWklaZ0d5dHFqM0EvelR1Z1BCUnZlNEJ1dnJETndub2FrUjg5c1UyckF4Y2JOTnlpMmpRb0JDZzhhSENnRmd2Sk9aNkpWQzZXMFptcHZkaGdpKzcvOE1pRVNFTXVwUkZ3NWlnQmdCT1Ara0JKK29IenpqZ1FZYUx5S1VVV25xMTVZMzUxU1o1cUxuZEtKNUloWE8reko0Nkh1MW9oU3NVRUV0Y3VVQjRUYXAvZDhPWjBVKzhOZFlaWUJrUlhXR0tnV3NEdzNuN2F5VjVqQXVmWU43clIrSDNySVRtazVkN1FZVkJuNC94QkY2ZnR2Zkk3bkI1S3Y4a1VYMmQ2TDVOdG1WZVQxSDNpUlI3akZOeWhKb3pJYUNYQ2wySEhTWk5zNWtXNEFrV3pQU1padTAvYnQ3Ui9vNE9hSDNSTG93MG5uY1IrcGREckdTQ3NvTU9zc2NwbG1SaldCZ09vMjdXajdDK0xnTTJWaUtReDFBWEFsNFdoQnNiOTJaUFJXcEJpdDBZS1R2b24vZWtCYXJ1c0hsdXlmeE9JUHNhK1VkYWpSRmxWRWRvL001dXUwZ1FwRm9zbGp2YmxQVXBxSzNYaVl1cnIyNWx5SW4xREVUdUlsUlgxUEx5VzhwVy9FT3hNdkVlOWVuRVA4bk1BMWJkZ3gzc052RkZOTzNBZDZoYnYzMlBMc0V6eWJUSjdjWVBncm1YMktEUE9Kazl3aDlQZUdUakdiRFBteXlVQWdLbTFMWHJ3RWQ1L2x1NkFjeEVqbWVVNElZUWdpZUlJa1JkVDBteENyWDQ3QmYrSGJlYXZMNHZPWVRlTGdBTmlSclo4eXhYWmNOVlIxNFMxOEE3NXRLMnRUTndFMGRBVXM1ajlZRXZROVA5eExxbUlTR3RnS0d5M2I1WkhTTllBSWdNRFRoc3lGWjFaa3FJeTc4RTFUV2xudkNvTHQ4TEpmWlcvOEFrOURINE1FSXpRY2dnSEs1MmF4NXdyNkVQQWtJcDVqNy9HVmYwZlJOT1hSMEJ6aXVYZHhaV3dHVE83OXNSVnBxMzJtUnNwS1ZWRXRiZ29LVnJKc2JRc3dQd0E1eG9CbE53U0FrenQ4eGRSOW4wOVZoSVV6cGNGMjBockUveERTODdONHdrRHZpU1VuanFiclJqbU9KR1M1Y0dMbjNjU283Y1ZsaHQxQ243L1VudGh3dFVRNUlQbmFwRE95bXBFTUhXYVdUTTQ3L1RXaWx2UUVIeW5iZXdqR3kxblRQZ0EwV0dmYVc5aGVOcXdWakR6TC9Eb3l0SHVLTHNkUkdITUNybU54K2dGcVJKNjFmMis2bkdLMy9xeExScUtVbCtWL3A5dStmMk8wWmJ4d0wzWk1XdDA4dXZvMXlWTzJaM0ZLaTA4N3BTYjlIWFRZQXQ1MmwxZSsveXJNRit4N0FBOHRudGFvS0ltbll5dW9HMVk2NmJ6WTZzczlQRWVteWZBc3VXdmlGM2hQWm9sTWxzTitiOThNT2pMNXU4V1AwMVNVRThiZjhyeCtSR09mZTZmaUVMODNLcUhkRU9kN2NKRDhZSm45Nk8yK05kS3MxUnZ3NURiM3A1aGxiTjNJZDNNV25QUDhML05Tb1J4d0tSQVh0WTVSSW5CQ3hKWTdzakN2c2MyY01TeENPZ1ROa2hJUnlsVFpaa05PS1dTOVdaK1RrS0FaS3RWNjhvdXdHck90Qm5PR2s4SzhHNW9RbGxEUXhUNHZObDJBSzNPT3cwVitFMFE5SHFhc3IxclAzTEMyZmpsV2ZVYXNrZzhVSWZ0cTRHNm5iSEtkUjNlNWM5a0JqRkc0aXRlY3dkWUlnMFppNmo4dkdoYkY3R2lZbWV6aWlyMXptRFhJOVV6Q0hKRmc4RVByUXA0Y3l3QU85c3FkaVJ5R3Q4RVJ5WGY3ampFaEUyU0NZVTJUSzYyeS93UjFEcG1yek00dVF1TXhwNS9CbkVWQnNCUHVTVWIza0k3T1BZWHE2c25hSys3ZUNEeTFzUjBERmsxSWdIbWlmeUorZ3VLT3lVWFNhcDJjRmRyVnRHOENvTDdzaENnckMxRUh1RzR6TWh4aUgrdmErb3pyWGdvMktLcTBqLzhwcXgrdWQ0L1o5S1lsdm1hR2l1OURSSnZ5UTBhNlNNZUl6cHcvTGllWG1NVnNlbmd0bkdZRnFCYUt3YnU1cmFPZGgyeVEzTDM3TUcrYm1CbVpvZmlJL1A1bnIrY0FEdzdrcmdSUHVrdHVka3QrUitJWHl5b29OUkhFcGFyR1J5STBXZ29uWWlSV2dqSkNzVzZjL1d3VDRhNVM1aHdYY0JremRLT3RUTHVxOXBhOUdFcDdieVBJckVaUEsyZi9TcENxcDhMQVcxRTRMNU5CYXNCWkhnWFhWemRQQUYwR0E1YW9LUjVER2xTUTA1L1hDWHZPc2p6SjVSUm9qQ1Q3dmJIVFA0YWIrcUE4VE5ZbEIyZThkZnR2OEtETzV0WFEwL2UyZlJEUGJ3YStaUGtYc0p1SnltQzh2Mno2cElkZUVIaU9pWmJEbzN3cUtxQ29ZZm5ZR2xpVFR6UGZwL3h1dCtzSllQaGdrN3p5ZVhsV1Vsb3A4WnhET3VMUC9DYWZaU1NJRU05M0E4OFJDc0V4OVk2WTlaRkdKUzFvbVlMN2taOWpNR2VmR0pBTmJqbTlGV1dCaFN4UG5QNUhVSHZDV2ZGb3RwWklBajl6aXVFL255ckRVTmg1RCtXcEc2VkJhaUdPanVzU1N4a1p3QkFnZU0rdUNZamU0dGdOcys3RHRwZjZTZGIxS2ZuMER3S0ZkZDN1K3hlU2lkcUlDT0lJUlRRaEpISENQK3VrSjJ2b0hrbWZ3WXZGWG54VjllRGczMGRTT0VSdVNhb29WMWc5UDc1aVdWVUtFc0s2dHAwSDRzWG1WUEJPeUQ0VkQvTGtZTE8xYTdLUXdnMTZEMUNnVmdrZ0E0ZjNsYng5SmZaOHhvU0NzSVdxT2w4ei9MTHN0MGE2UUlpZDY3Q2tPdmlBeVlvOW5rRFV1WHZlZGRuVWwwcDlTMG5uaEg3M1RudTBGU1ZtT0ozcCtBdHRYOGRFSWZxMG9TMUFLQUMydFZBa2RqUkc1Nm1jc09xa2J4VzVJNEhhdnZtK1BORW9CcmExMFZBRnFkOHRCZEFXbnpGa0Y3TFZpY2svOVFOMlRacVlXVi9OaDR6ai9MZ3VRbzFIczVITVVld0Nzc3h3cTNiNlJsRUNNN1RpaWM0WnN0YWp4UFBqSHRmSEZzcHJKZWhwaEJudnRwMlpVQitJTWZsRnY5Ry9GdHIwMU5XNnZsN3J3RmptUDVNMVdHQ3J5U05MTVZZR0lndW1mdm1EOFQ4Yjg4dkpsY0FsOW9ZV3Yrd1B3NnhCckhCTmx1ZExiZEVWRU5jQzRzYVBMK3huaitWQXJOL1hoOEZ6N3RnL0NaSFlFV05ZT2ZPS0FPTndCNngxQU9IUHF6Z3JDZFQ0emFlWjlzTGhDdlh2M2NUQ241Z2J4bDhWc1RBOExhLythdmJadWdJMVRYazFVK2wvY2s1UERrd2lkQ3FJa1N0c3B0bFNaUStsY3JsclI2SmVOZkNiL0JncjlLTURaL01Na3FFejI5VXZ6RHJ4VHBmUlZqMm02TGVnODdIcm5UaHAxZE4rYXR6N1RhNkpiUkxxUUFHZUdrRWJpQWtGbmlaTlFud2xOc0ovbUlxRzU1SXVBY3ZDazJRWkN4N1IxRzNQOVErMDZVV25Rd29TMklObmtGOW9oL1Z5Z25UVGVHalFYTlhHaWVNZk5QenFmb3F6eTlJaU9YVHM2MmF5VEllMDVKNDNvWUR0SkFJVDNvRS9EVjF5NWVPcTBKaHZZSlR5MW5BZGxKOEJId0g5dVRCelBYZ0hpNVB3dUNuZ3duRjljbzB5N0FMbHF0U3RSWExTeHlTSVVhUjZ1dnI4M1BSd01XMXFBZUZ6bE5VMFB3T3NETkNoWTI3VnQ2cmdodUk3bU9sU1VxR3hrRSszMXBVWGNKcjlYd0VBbHJJaDNYNW1FTHdJTVMxZGdUNXEwUGl6ZVlXdmtmTWwvVkVJeGtKbGlLOXk4UUVMQXFTVkl1M01ocmdqK2dqa3BuRlE0QUlwOFJHN2NEOFprRW1pbFhrMDE4TTZ4TjB2WW0vVVZyU3ZWK3I3QlNBVnhVY2ZqUVhnSDdsMlJCQ0pmcHRNUmRGMUZrYkwxUjc2OXhueUt2VVdvZlhVZ2VXaGxidy9pTHNjRTZFL2V3MEl5T0RHVlVFcXdUK0ZXM0o0YW55b2pVUnBwTnZIczZWL2xMN29qbUVrYlpnOU5uVnJSd0MvR1JZMjd5QUl0WUx6MHRUa0ppSU9ZbjdxeEF3QXBuckRjWGlHZ0g5eEdpbkIzWGhYZU03T3A4aWdNZ1pwOXFZY0lRTzhLWHpnNVpTOGVtUVJvZUcyU3g2Z3I2Z2d5SUhqRll3YTlEMzJNd0E0SnhJRkRiYmVaZUhkd1JLaFovaWFHVzZ0RjQvZE96bzd0dTFaQ0I3T1EzVVlQZnhaMFh0bjU5ZkZBR1h6d0pWUkZ5ZnlTV3I0ZUR4WVR2emJFdkNTaXhjcUlteE0yZ0lNaDB2b2ZET1owamNsNmdtUmFYZVVWQkdZbHZwRmJFV2lDRklmTjFoRk04MDRmdHN5UUtPQUJITVBjVWNxSVhRa0FmTkNlSjRIc0IyMHZ1YjBZeVg5TUdnK1FpTkpVckU3Y3dXa3I2SlY2eTlCbms1MS9xemJLNU41SXgxZ2xKTThvN1VsN3daOHR6THhsMmRxTm4zV3MwYll1dC9NTlA0anI5RjJtRE9Za2dmZ2NWcWJsN0FRRW5STlBxOS9MR1V1WUpaL1FQejZXZGthY3VjKzFNMlhHNFpvZEp1VDJLTFExZ2VsNXErU1E0bFFMTHpraHBkcVptVk16ZlhyOThhVjMrNWZ6YkpKSTBQN2trQzU5MWJjSzJSZkNlcHNXTloxM3p2Z2M3NTV1ZUVOd0VJNk0wWGk4cEJaZCtrOVF4K2JnTXI4RmpWcEoyN0srTkd4ZHlkb0o2cXB6VEZzQTZVckEvaW9mdHBqc0ZsZ0ZCdmtnWkZLNGIzVXE3VUJVSkY4LzJTeldTNnYzUXVsOGFTZGdFVk1reC8rQzE1QUNseHY2YmJEM0d3b1FwZFNFRWxiNlRoeWgyQjVuV2I3bzBSOEJiZGRqbWlhVk81N3BXZXpXa25TRm9wZzVEdGMwSjVYU2tuOG9OWE9LbDZoYUwvR2psVVBRUmxpY1FYUi9vb2pXeGtWZkVCR0FVVDJDZmNEQUFyNGhhQWJBOGxlRGdmUkhBMnNJMEkrOXV1SUVxN1dVZ1lmRG0rbDlmbmZBVE9oWndQOER6TXNwVlN5cnJsanhERjE5NUc3Y3NnaEZwWUZRODBCRWpaajNvdTJ5TVJHbjlLN2NyQU5uUUZGQ2IxemxZSFpobmRNMUVRTnpCaXV3U1ExV3JuemZiZE1jSzFhNHNaV1IrWGtab1JQaEZVZzdSN1d0WFFYckJwbTJCRjAwMDVJREpTS3J3ODRCZVFUc01BR1lVYkVVREJtNGg1L1F3MklXU0IzTW1tSWYyamI4SENHYjFhS3EwalVrTHhNcmx5akJGbjJ6aWpMYjkyeVFtUGt4TVpnei9QakJicnFYNTZQdG5pMGFVVjk0b2FCRU9ZVngwLzVyY1NXNHBSeDJ6QU1ZNjJPTTdXRVZ0WE1tU1JsUkhRRWhlNzY4V3BRTjJGTnhMV0FUK0c0UFhmTG5qMjNhd3I3OEtxUTFwSVQ0OENKcHVOZStESnFyeCs4WjhQM1hVdTIrem9XZHBoa0x6eUhia3Z2RkN0dmowbVNIUFhscWlIT3BLSTc2bVpMRWNoMWVSc1JucEk1N3NDeDA0Uk5hOFpiZm13bVhvR3RkdEJQUDFQcUM1azNvT0tlYWExenR2OThiM0wxZnZLMm0zMW5oUTA1WlF0MStxK1grMDF0Vk9CYlVUbjQvaTZTcEZxbURDKy9NU1dzeHRJRzRSZEVHYytCemdoUVo0ZjBZWXhQVmlRWEtqZ0Zvd2dXSWMvcWUwajJIMy9YTWJRR0ZRSFNSalp2d0lqTmxSVkRUNVluQXc3dWhnWnN1NXZXUi95NUkwQnBScXV0U0pvUWZOdDhuSTQ2ZkhhV2Q5S0JXZE40aEZRK3RrMUFlU1RkdU13cEIwUmZXTDlQOWZoZlQ1c1RYdXJwMVJjOW5WZ3N6RFQ5bE1yM1MydVYvSlh3RU95MWxBemJOQUk2eXB3Y2tCQVJ4UFZJTXN4MFNXSmZISmowMldhRnhNRDZBMjByNFNCcFpWelNxbDZRU1FiaXp1MG5rT0RlZ09RYjNnVGZTQXZCbW9uUkJSMjNqeGlIbzNabUVYQmhhZG5QWDNiaVltWkZ5NHdIMnRvRWpiZ1Rmckswd1ZkNGdQUHVhTllMLzNWS2FjUzJYWmpuZExyYlRoZkVVaEVPa2paNHlsZUgrVWlQMkhoZlFsVUlBZXp6dGdXT0g2b0ZLMGkyTTZUeko2NkZaeGs4STU2cHpKNVcxV3pBbG83SDNLNkJrVGZHSTVuNGlibTB0Wm9BdzJnY3VLSUE1RTFQdDZkc2tiTTI5TkFXODROUlVmUFlGWlNNT0VnbGtBTGkvMTVtNGFSZXpuQUJPTk16SWhGbTlSUG5VMlRva2cwL3QxcHh0dm12dXBMQlFWL0FMeWNsNUhQK2tQaTg2OVJIWFUrR2RBRnBUczZ1VVpBUTRIbmF1RGZmSTdrOUY4OThsQVExWUVmcER2aENMM1VkaHlBZWtENW5ST2UwaEJpazFuV2MyQW1Pb3BNaG1HVkpVR1BtUjZNU0FtRFZTaERQRzlSRHg1MGRrODhTdFIxN0lUTUJZTDA3NUpnUUVRdHNEZGJYSW5yTGZEYXBrUEpGcFRWd2d3NVFxMVFMOUV3dFhLZEZINS9hdTlQRld6cmt4SURwQTJzb1NjODhxTDBPci85QnF3YVJjZUhERVBwOS9iVU5NWmpuQVVKbjA2eTg0VWpUU3gzbmNUanJDWnFHbXRPTDRid2w2U0RydnZkMHF6aDlzUHBmNlZzRnVSd0tCZFU3ZDVybXVCYW01ZjllU0RVQkRQZk1YYW1lSzNBdUdOVkFCTUptVDlremU4NEdUTU5sNk1tby8wWnRlU2xSWk5OT1NpYVdhZldZeUI1NXZmQmVKQm5uRVl6dTZ5VDdOVmQ4cmRwMnBpNk5JWFl3aldZRzhwVDMrdmxVRlorMmJPZE5GeE9tSHlwSzQ5WkNtMjN5dzhZbVo5QVM5eXFObkdPaEVObTByR0JZUWlKYWlHWDYwY1FOMjA2UUtaU3Q5SFBmcHRTUERTU0dYMnNCR2NZaGVrb1NENVpsTHhBdjhmaDRBK0xXZmlINFhndWtVbzVoaE1ja01rMStSYS8zQWlnSTNBQkNsZHpoWFh6cXlGcmViOWZZaFd5UUpibTVvejNNazU3SjdxeUErL20zdnMwYjZnRzJrMmtINSszOUtpMlFuaVBKcDkwcjVHeXZWSnUxclFqL1ZLNjdDMm43VmJYQkN1YzJ6OVBJWTVwNlBUUWtTbVZ6TGdKNjhRR2psTVZnRmNJcHg1MEZoSGZ0SnZCYkttU2pKdFppNVExVytaWnpOa0dnays5Mzh0NW15VGZTR3laUkhmZ1VmZ2pqYVZyVnhoQ21NaGFsYWExUXlDZWczNWZuZjBrVDV0OHEvdzlSdEdoUHh2eENqelE5TDVRSnVncDZYME04QUxGOTZzNzBQYksybnFTRnJnQWQ2eWlqbmZLTzBxNFJrcGM5RWFxRUpNUTZlUlpDSHllc1QwaDZrNnhlNVdQYjE1Q2lpY28rRWwvNUFLS1UwU1lMTWZwWmdKaVFpK1hHaUhSZDBTUVVkREdPR0hrUUtoeTJTT0o3OEdGMzJESzZCQ0wraElFRDJOQ1pyMk1oa0VDVDhSa3JGaVc4WVQxVHJheGEyTUQxQ3dITHVmOWdwbVhSY0xDRzQ1L0tpeXNOVVExRGd2SUNBUUROK0NNWkZZRktIa24rUnZzTnpZZHFHbU5zOE1rcThLeXI1SnEyd3ZFVy9SakJqK01tdmw4L2Zmb0VRTDFITUJZZlZaNHpqY3BoaWZjeDR2dzl6QkcrSjhkcjM1blVKRzZlWmI4Rmk0Q1lFNi8vUzNsWmFqSjc5MXZGL2FMSHRtUllCT3llaWwyMmVjeGJpNkJ0elFOZFhtcjNmS2dUS2dVRWpzbTdZMzNhd3RMK0FjcUxOTW5xRDEwbnFPS2J0Y0RHK3N4MFp3RmkxSTRuazRjTDVWbFZ1NktFQzdBaXVxMGJPbmcrM1Mrek9IelNLNVp6R3drOWdhdEhiaW5IVDd2NEdlc1U1UUJzcTg4V1RzWTA5YVFQZWpzYkhWWXV5b1R6M04xeUs4eldmbVorcVB1VU9JMUVyeFJoOUxHamxFdC9heFBuY3JaNDN2RC9FTC9BbGYzeG01c29tU2NXRjF0blEyUm9COGUrWEVRaGIycTJvbkRDeEtmZWlEclcrQXgxckJROFNESm4vek1jQko1VWtuWUxFNW9SdXNoS1pNQm5aTEdib2V2ZUMrZk9nOWtnMzJuYS9nQmcxMndSSXUyeXlXelpNMElvUUZXVHYxV3pKdWgwNUZmc0Y5bmIxQmNHc0Fuc2VmdEFzajRYQkdlcStjdTJONmsyNkt2NCt5Wm5xR3EvamhOQi9VYnZOTnVHM0dXMmh5M1NUVk80YjJCSmVONjJTK0FndjVvM2t5ZG5keWwxbFhueExVSEhDdHpSeld0UTh0Tm1hRFpRWG9WUjh4NjNXVEh4aEJ2M3JHZTJtcjY1K1pMR3hQeDB0Z2k1UmhoVzhrN1lNaHpBWE5QMHFxMkN1bWVacW9JZ2RYekNaQ1VFU3k3VWRDbjJmYVpjQ2pPYklRMEJudjBaTnlpUXBlUFFvbzg3T1FMMjdjK3Jhbkx5MnlRNEhDM1JuQUpzSk43aVN2U3B6UnZzQ0pCZm1SUVVWUW1YeEQrZ0NNWmxnSlhiZTZGbnF0NVFOb3h1d2lXU0hhTlJzODVMWHFBb2p3NGI5TTVSVk9OZDZNa1lsREw2bXR1K2FBZUZ1VmtuK1A4MFY0RS80ZGx3L1VZN0hDOTZ3QXUzMnZlaWQ2Sk9TKzBaUkp6WXV1dW9HWjBpczEyNm9UQ2hmbjgyUlRlckdXUENNUlFmMEFUUTdtdExZclpFNEhNWEpyRWdrR0VTSmx6ejlha2xHRXVSWlo5Wi9CbmtWRWFDS2hSR2h3b0gyUmdSOWlBdW9kK3owczBRdWNUaUltN0xyc2VRWEF6RzFiQ2M3anZCVCtCMExzY0ZLeTJIRnRRcXltcStwMWdpK04wdVA2MVdLcGY0MUNZaXRQRGxnNDZWWDJYSEZRaUtSaUpKYTQ0eENNZ2pvdFljamtzSkE2MXExR0krNjJKa2VwNVB3OHhickRzaW5uL2pYYlU3NnF2cXY4Mm5hcTczR2NiMU1yd1hadUhiNzR6ZTN4d2I2NFczMWZhQ3RuWEZaaXlwT3ViUnJZdmlreFhHci9NVHZaNmRoZ0JLZTBUcWhONU04S1VKM2JVYkkrZXZhVTVwTDg4Z1V6VmFVN0gwK1l5a3ZHNDVYQ21vdFg3RU5obC9wSHkzOUE0d0JscFZyZDlOQVA2dDU5SkQrZWNWb1VVY3RKNTlQejRzZVJYMlMxb0IzNFlIakdhbTZ4UGwvVThmM2czSzQwUU1YejhaV3pkRzBKOUV0L2g2dE13SmFzcStaVTlORjJ2cjVMNVNKTzJ2cGRRQkRvOGdoaXk2K1pHQk1NOTR5aGNlN0hBWW8wamFjL3U2QjNKdXYwcWIxYklTYlpibUFrS0QvMElqOXpUQUtCd0U0a0ZoNHZkVUd1U3huRnV4b0dmMVMwVEJMc0FaK3Z4bW0raW1oV2ZXK2k2cHJKNmM2bkZtL1hjN0FGVzFmZ3hlVlBaNkxrdVhtNnFPeDR3S3YvT0FNL2RnRFlQSVV1ang3eCtrUU10QlpLNmkxeXc5UVQvTE5sQXR3bnVLdWo4WVRvVG9zY2N1RnZxd3dQS2VxTmVmQitsR2pMdHlXTVR3M0RMeVQySWo0YmhmS2dSVllRV2tOQkJWUXJCYU1YaHc4V3A4d2ZiVXIxZGNGd054TDJHZ3dXVEljK3BIQ0dxbjQyZ2ZtOUpVTncvbjhiMFpVSG1ucEpOdjJDTkI1MjB1Zy8zUlpIL2NmbHpjTENjVU9vU0tQL3NSRC92SXNxRS9JQWJzTWdRRlpVWlVjOThadERQQmo3WFBHTHdvckFib0dycWdONnlDb0hKYTFRMEFZeWZ4dHl3eE9Tek5idWg2Q29zZHl6SlFudERsSDNkQWFFVXNBSWFXR2RkNllDeWlVR2FwSysxbU1XSEFCaU5LSkxodDRkbFlKOTZ5bTdxRnR1NUNWWnVUSnpNZzlaQ0hMb1IrVHJJaTJPUTl2TUFuWFhsck5XWXdDUEhPcFpXN1VoQ28yMFJIUHFWQmU1UDRMOUE0UDI4amV6UEgzRlFJb1VoWjFOUUxFdDRoM3BpV0Y3a05mbUdlSzZRR05ZK1NFOW9UYTFNdnc3cFk4NjNFbUhNNlFaSkU5Q3FMdGY5aUlJdHZXSXRYb1VFZEg0ZHVtWUJFZFloa3J4ZTVIcW9RUkladXpUNmxyNkhieVFGblRjaGdDUk9EeTVMTGhLNktycUhGd0g2RXVDY1JaUTczc2hDVkFOM0k5ZnMrWVoycXVtdW1oak5jMXJ3cWkyekt3UDV0MzljV0p5UGJyeW8vQTNoaDhaQ3oxS29pZVlGNTB2Vi9nRUFqcnVrK2dDeG9uYnNtRnA1QTBtNVZWRTllNC9UT0ZWR3JBcG1TL012a1N2UzIxejhFdXgwK3F6d29VdFBGaWRhR1BHVHY5REU2d0NFRWxOTUNZY3BHYXFBNFlzZTBDNzI2d1g1OXFtQ3I3dTcrbUtLSUxnWU1zTzdMQmJKSW1FRDhyNDh3ZGtZUVBBdnlqdm04YWtaS1FsM3AyYzRrb3VYTTVFeVJjS25BNTAwUDFIOHM0QzdUVThQMmN3QVlrYTBhK1VRTm9DUkxzZ1Q0L1dwT0pWUUQwV1g4a2h3cEJlMFJURHprUWFlVGNyZ2JzTUhiZWpzY0x1Rm5UYVF3U2tKNUZHajNJaFZrWXYrQUkrNHVyVTAybjhPdlNQMFZsZmxvYm44VkZQb1JlZG9tcXB4L3dRbWFFZXZaQUtjMGR6MjVUcEFYTDZkV1BwZ0ZMamQzWTdaNXd0eFU4aFJYZ3ZvZEsrUnVQRmZib0x3KzhZL205SFNWSGdmdXF4M3lQUDlCVWlBcHFLWDI4bVdrSWtuczN5Zis3SnBxYzB3MG4xclZISzgwNVlLTHk5cWlMZDQ1djZUVVNhTXR3VzlKOEVuN1U1Zlhnc0x6c0tqUEpvWFd5NmJnUVlyMGxXMU8vMW1XOEwxeENYbXVxb2ZEYXFmNkFzdGhWYll5ZmNRNjVYdXV1YS9HZnFqci8xS3lMTFJHMUI2RVBJeENkS2RSeTN0R1c4bS8wT0psMlU0aElvVHFIOVJ2VEs5ZkVMRnM4R0pCWm16M0J4d2Vobm15b0FhTXVzL0tDdFUwUzJXSVpXbzdrbnVuMitTTWJzTWNES0E5dUVqUkRxVUUrNVkxZG9UQzQ2Zy9vM3p0aGVkVFZWK1pubno5T05vVlU5cUhqRXBrR2Q5SGxad3lML2NFSng2ODJibEdlem9ISGtUVUMwRkt2MjhEVUNTQ0ViQlBIb0dsTVhFUkU0SXQzd0hTaExBblB4VHBMQWF1R1ZsU2t0KzRwSS9UMnE1YzJoeXZCeGVOVHR5eDRsWGRhK3hyS0lNcDkxakZpSUZ0WHFIb2luQTZyVmtnZGZsQ2F4aUlESWx0YjIyMGN0bjM1ZzVVZVFHa2FJbUJyZS9Vd1NGeHVOcS9ZQUFQQmV1ekZ5a00zQlY5NVNpVDdrL2cza0p3VjVRREdSRFp3eFFsTTZ1WExvUlZuT2R6STFGODRiQ3l4MVlaY090em8zWDR6REFKRVdib085TmdCbWVGQVpuMEhVRTRuTVU3YnR1TytVaGovYjhZQU52UVBZRG9EelRBZzUvZG42VDZwRGJBRW5rLzBrNDNkOFNiTHpQamRibDM0VlMwVTBzTlpNUGpuZlk5ejRwY2FOQU51aTRnaDRINU4rTTloeWRVUWNleUU2V2ZGT1ZpbkdVdWFJSlJ2ZGpqQ3YwYlJLVkpjQ3hHbE1CeTI1cUExK2lYOEpmQ25pNEY4TG1SV1dKYkdUaG9xZGRqeHJiS255SWc4aklxYXY2SlVSVndON1B4c2tlTWRqcVZVcng5bnlhMWV1Q2puSDA1ZlR5dXhMakdIOUJuSWR3RXpOVmtQWW5BMTBMMjFnTHEyQVBMeEVKVHNvY2FiZC8yNDRQVS9ockhPTjZBZm5VL3IzNUE1U1o4c0dFZytCUTgrd0RXT0JPcnVZZ3ZtQVZkdXZxRzlnQmZSWHlpcURFclVXeWxVWTBkRElyTGp6WjR1cXpQOXNzL1FMQ0k2emNvajQ0N3FwK2gweHlMbGlHRUNMTDNXdnlnM1l3WTZTZVZITnREOUtqMll3S3pFY3o4ZWxJdmx6azJnNkZtOVNhcFlBNWxjY3k3UXlrQ0E0eVB3MWZwa2JJYlVxemd1cVQzV2VmUTFOdFR4TldSSmlnQTMyYURnRlh0NDIzVjRFQ3FDc1ZJZkdlMW5YVzM4WGpGcEN5TU5BR29ZQWhVS0gyc1dQdDlva21KMVc5alhXWnBHZmgwcWhVTjZhMGw2SjZYalhRR3h6N0xuMEQ2Z2o2eUlnZ3RNRFJtN2hSTHRKYW1hQndwUWg0cFh1NFY4ZDNxdkJseXFjblJHNkpTdGlwTGZ2M0YyQmo3NjkxeHMwYVp1SVgzWXNjc21tVHBOZWVUNmEzelZMZmVuY1pOSXRMbnRWditSUlhnaVBKT0EyVFV2MXVjb1VYanlnM25aN2dza3lEZ3BUTHZJSm1WRVdWVXdSVWNZa2paemQzNU9RcVhkai9aSjRxc0VuTzlta1piOWZ4bFB0VDM0cFpZQnRKclhjb0g3cm9mWWxkb2VXZkUrOVloN2tsNFkyOHRJU3Z6bkIrYnZYUTlpWnZ0NE9uL0tLcHF0UTM0ajBSZVc5b3NEeTNpK0IwNGpmbEE1YklNYnhEZnpCS2RreittL2hQOVFsOUNyN3poVWFjK0l6Z2pqVlpxa0ZlTjBTRzM4dTloZktRRC90bHh5Njh3T25DRzJNbzZFdFRZcWFhNGRCeXVmSWt0cENyTFpzQ3c5UitzV2NEbzlQRForVGkrdjZOM3hHVDVFL0x0K1E2c0lCcDU5RjZEYTZuOVFRUkxYWEMweVA5VGxQRVAvTm5POVlUNGEyQnZENkl1Z1JpMmR1RTlhSnkwM29Nam1CMWVHZW9QcjR3cU13dGNGdVE4Y090bE9KZVNvSHU1dy93VjhpNS84TE01d1dTWWF5d1c0OStpUm16Y2JzMUNTSDJtUDFVdWtVZW9pM0hFQncxVEV1S1FMWW8rdDlhczZjTmZHZndtUjFabjFJK05WTVRLSXZoOE5mT2pKTm01VSt3R3N3MGJQRDRKUW8wZWNUcDNOc3VBenhBMTg3cjdsTUp6c3VEdXNtVzAza0p1QmZIT2xhY1h5cHhyRW1PNG13alVtMlhxUEZTTVdpellBUy92d0JlSEhFSm1vczU1by9uMjlQaDE2b1k1dHRUSTRkdk9tRXdDVmdZYnptZGc0M2xGdVlpaWhHazRveXZpWmE3clZWUmF5ZU92aHpqMnhHTUZUMFo2akUvUXgxUjZTUlRXL3oyZGl4QUQzcjdZSE9ROUg2TnBvc3U5dHM5bUN4Y2pETXI2c205cG1lYkpTcXB4SEYvbTNqMi9OUVRLdVU3TFIvdFQwdnhWbHl0VXkxdGh4VXdKSC9OZ0NFSlNkM084OUhGaUI3eTZHMjNFQ2IrTll3VzRDYm9WS2dlZ3lic3BZSkZMem1uNllaWUNjVWhFTWJnZG9XYllNaTVkenRZa0RTY1BiL3FLZWVuc1BPNFdVNDRENWxZR2d2c1Y2VjltYm5PNFhpREEySW1VeTFtTEdhWVh6TTdqcHg1TG9Ya3R2RG9OdlRwUWp3MFBRWDdOcmY4aDJIWU5vK1h0MzdSVTMzUStZQWNRMCswMUNyc0NjTlVTUUxnQUwzNXhsbjR3dHg0SlVsNFRZamF3dEZpcDB3ZklCZzRLbjJSRmlUYWVvUDhkdWNKbGVyYmpKVHVtVWdiemxjQnVySW5rMnNMMEZvVGYxV1RkMERLNkxZanFyNWtMaVlaTFFsU0xYY3d1aldiNU5FcXlVcmdMbVM0WXZNTDlVdDJmS043QktsQnB2SHI0czdQbzZPQm8wd1Z5aEpTRGF6aXJLbWs4Tlh2YnhpVDZyUjJLMXVHclFiOUwrSEM0THVkc05HVW1FZWxZTzFKdDZGdkNLRXVJRCtwc0FGbHFteHlwcC9lYmQ0OFJibnozdnk2UkV4QWRIbi9xaFd5MzRpbUVVaTZ4OVpYNFVYKzJxWkNQWWhMdS93SjNlSHM2SkF1SWdtdWs5R1Zid0R0cE85OVN0M1BtelFvRDNLZk5rWVBvUG1VNUd3eHlkOVFLamRONk11TWYxMVp5bkFUSUZzSDcyMUJVRjdtSCtkRWdxVE55T04wL0RoTlp4M0ZYMndiWDFLWElmQ2NnbzlydXNtcTV4d3RUbXB0NWlNbE5HQ291bkR0SEtORHdHWnorSnZPY3NPTE01QlE0TjF4VEU3Q2lTRlhUSVk4RlFMVWNERUVqazlmRi9ObGp3aENsTEhWYXNlbEF4L2ZrYndJcGRnWDZqT3dnaHZaa1hHSWRLNWxuSnphekhuMzMraWY5NlZlQkwwc0Z3WW03a3lURk13L1Q2VEdTMElVNm1vRkhkdnlhWWVNcFEwc2ozNDFzSlhYN29jeHcxK1RDYjFsTjh2SjE2NEI0MWJETnpXSnh6aWZwNVlBZ00wUXFqUU5iYmVjYk83aEFFbDkrVGMyU0Q0clp4d2tzZ09Gc3dOSkphdG5aQUF3dGF4emtLNyt3eXAzSzBMd25ocVc4bEsreE9NSXNRT0ZsTTZOYUdxUkl4WDJDcEZDeVZUZUtvRTJmZHRHd09Memd3dHhVUXMyeVpNRHdQMlRhSlhETmVEZHJjY2l2NlVKbE5IUG03ZGs5K0VRbllkYjdEa3JBTk56NXQzS2krb21SVkYxaDA2U25ON3dybFFScWJZQVl4aWxDNnp1eGc1QTVndm9uWEY0ZnBNbzFNVkNPUHJmQ0VHT1N5ZEs1eXlxVG52b0dLM3BQa3JsUTIrSVZQam5rOHZpWHFYcURhaU9JREF1NS9IQWlMVFBrT1dDZU1iSWNxeUtIWHM4SDlrRTFQU21sVkNoRkgvVGp3VXVEUi9tMkFOb28wN20wamY2TVNtVlZhUUtPa05QekY5bG85a0pwdlVHR1J2d2lINE1TaVpHTUYvQysrUG9MbFZkS2tvVkRpSXUwUVByVHlSOE1PZkxhVUZkOFozM0Y1MFA2dHVwZWZSd2I4WkE4UGp6S0ROWE1PYVYxU1ZHR0p5TzZrZGQ1SWs0SWQzL2wvRHhiOWg1RGt4MFlzY05WdURtOG5Qdi9UK0J1K0QzOTJoNHJ3Tm5RcWNvQkxTMlQxc0lha1J3YnIvWUkwNHRTVUlYNVFxaTlNS3YrNWhmUFFBQVZ3RjRKdWthbTFJdWVqckwyU01jcUdWY1hMMGRMU3N2ckp2VExkRUhHR2JUVDVrYXZ1eld3OTlFZHp0TGgyZ05xKy9JUXFIbzFWSmV4cFA5Ly85a0FBUUFhQUVBQUFTSUFRQUFQQVFVaUFnQUFBQUFCRVFHUFFBQUNBQWtDQVFFS0FnQURBQmxVYUdseklHbHpJRzltSUVacGJtZGxjaUFvTlNrPTwvQkRCPgogICAgPC9CSVI-CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24-CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I-MTwvTWlub3I-CiAgICAgICAgPC9DQkVGRlZlcnNpb24-CiAgICAgICAgPEJJUkluZm8-CiAgICAgICAgICAgIDxJbnRlZ3JpdHk-ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8-CiAgICAgICAgPEJEQkluZm8-CiAgICAgICAgICAgIDxGb3JtYXQ-CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24-CiAgICAgICAgICAgICAgICA8VHlwZT43PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MVo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU-RmluZ2VyPC9UeXBlPgogICAgICAgICAgICA8U3VidHlwZT5MZWZ0IFRodW1iPC9TdWJ0eXBlPgogICAgICAgICAgICA8TGV2ZWw-UmF3PC9MZXZlbD4KICAgICAgICAgICAgPFB1cnBvc2U-RW5yb2xsPC9QdXJwb3NlPgogICAgICAgICAgICA8UXVhbGl0eT4KICAgICAgICAgICAgICAgIDxBbGdvcml0aG0-CiAgICAgICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5ITUFDPC9Pcmdhbml6YXRpb24-CiAgICAgICAgICAgICAgICAgICAgPFR5cGU-U0hBLTI1NjwvVHlwZT4KICAgICAgICAgICAgICAgIDwvQWxnb3JpdGhtPgogICAgICAgICAgICAgICAgPFNjb3JlPjc5PC9TY29yZT4KICAgICAgICAgICAgPC9RdWFsaXR5PgogICAgICAgIDwvQkRCSW5mbz4KICAgICAgICA8QkRCPlJrbFNBREF5TUFBQUFhK25BQUVCQVFBQnI1Y0g1Z3djREI4VUFJSUFBQUFBQUFGUEFFQUFEd0lBUUFJQVFBSUdBQUVCOUFIMEFmUUI5QWdGSFFGZUFhc0FBYThtQUFBQURHcFFJQ0FOQ29jS0FBQUFGR1owZVhCcWNESWdBQUFBQUdwd01pQUFBQUJIYW5BeWFBQUFBQlpwYUdSeUFBQUJxd0FBQVY0QUFRY0hBQUFBQUFBUFkyOXNjZ0VBQUFBQUFCRUFBQUFhY21WeklBQUFBQkp5WlhOam1jb0FBWm5LQUFFQUFBQUFBQUJxY0RKai8wLy9VUUFwQUFBQUFBRmVBQUFCcXdBQUFBQUFBQUFBQUFBQlhnQUFBYXNBQUFBQUFBQUFBQUFCQndFQi8yUUFJd0FCUTNKbFlYUnZjam9nU21GelVHVnlJRlpsY25OcGIyNGdNUzQ1TURBdU1mOWtBQkFBQVVWdVkwbEVPa2RTUWxRd01mOVNBQXdBQWdBSkFBVUVCQUFCLzF3QUUwQkFTRWhRU0VoUVNFaFFTRWhRU0VoUS81QUFDZ0FBQUFHdUxnQUIvNVBmRXpBWkx5T3RIQ2pYR0ZmenZ6WlorZjF4dkU5cXc1Z01zVWtnSTc5WDB1LzByVFVDY2RNYXZwZ2xtdDExMUlXd2V2VUpYOUNBZ05lQVUyK21XRFVBMkNXK2FHUS85S0F0Z1BGdzk0UGFiTUlzZldNdU8xTkNrcVpyNXc1SFBwNUJZeUtBOFZDdWVTQmkzNEkzT0hHQjMxNVZaQ0UzNXhlL0xlNzhDZ0FCVCtsWmFIMjh4RXN2d3BRWVc4ajdhWGxYWFJ2UitpdzVzSis3SVVBM0U1bXZmSTFjWFNOSHhVaFlIM3dZVzdZSHlldnc4R1g0NnowNVJrOTBZQlMyUHVwdVFhRnJSMWtlc1lqWlBheDNra3VwNENKYmhkT2ZxZGFxY2UvK2ZCVlNXbFNBSitwdzRRM1RjZzY3clAzSzRiSHBvaGI2aEphQWZxaFpSVkJPeW9XZElxTXU1TFNhMjlUazRRQzVrTHdRYllJRnFYZXJKOGpwU1ZvK0dSZTZDV1RkSEp1NTA0dXFMamdKV2ZSK3Vua2RpSitMdHEvQ2NJWWFrSjFMN2pxMUNmNHM5K1hKeno2Y25hTDhpTkNacEl3YU5NQ2VaZjV1SElhTzRjREpqMTZIMUZaS1lXWXdpdHErMmNURVJRQ0Q1cEtxc2t1SjFYbjZxSjVtbnlTWjUvUHd2dllBR3VsanpKcjhZNytNZGZNVEFQWmdvcU0rODhSWFQrcE9WVTZjMHVKUlV2WmdKMEhLQjRzR0QxWVUwRkQvY3BoZm01TEx2ZVRQcHVNYUN0ZmtUeUpyZDRja0orZnhsdXdJZ0N6cFRPVTdaYlJwQjJXS0hFWjRFQWtIMHh6QzF6aElDYzhCYkRlTDhIZG00Y24vQ3IvQ1RRdm90dStYSjJTZSswYWphUExMU3ZDZG4vMHVXQnR5b3M2emNSd3FFYnBCcWsyR2JVcHlsMFFMT2Z0RE1aMERqUEs5MHR6TURXQmd5VWNvTjhrc2hkU1RjSVZOSm04ZWE3TCtHK0Rzc2xNSGZsOXlnU0Rxd2lvOElOM0FEbitsWk5UQXRoWXdrZVRzTWFiaDVmMlpoY01LY3BFVEk5OThVNFVKNHdvdXlFOWIzS1pxWUdTbm11STd2ajlWUE5ZbjZzeHZRS0ZxQjVhM0F5UVBSeGpaTkFpbm5BODU4OW8xckJDWC9pVVlHaFQ3QU5vSjArYkd6SjFBaU1WUi9XVThPTUE3RVphQTRnRGM2L3FuVDU4VmRTa0NrbE9yOUpEclpRZzkzRGtlYXZ1aDY5enJZS2NlekY0Q2MyT2daQ3NtRTBhaE0yY3M2ZVkybDkwaHZnN2hiL05LNVZ1VXdMcGJTZVpGU0pGWEF5aFVWbm9XQ213QjI4bkJWdXN3bWs3b1ZNdDVWWG4vYjA3ZzBrdlViRGl4cW54NDVJZ3FQWG1rR0F2M3V3MCtSVnloM1VtOFJiM2pPNDNKa0UvRThoWXdiR1l4VXREZzIzb0RYVmVhNGkzOXhmVnlReGd6YmczSUJqckd5SlZoYjU4Y2NEdzZzVXBCbXZRMmx0UXk4S2IzY2Q5ZldHNkpQcFk5Z0tPZ3B2M1pwaWgrZG1jTDRrTkEzNUVxOWpBc0NnUkM3TGVtaExYTERzL0hyb2R6dC84dldXUXIyR3JaUk9YR05rWCtGN0lyQkk3eWg1OG1weGU3NEFvenNIdjhNdWJEM2lBcU5qc1FsL2NDemlUZ2pEdW0yK1hYWmU5dExHZW5mR2xGOGhaVjUvSkNrN0JVT0RCMEduOUtpampQcEFweUlXdGtvT3QrZ3RNWi93WVpOa21paE45b2docEt2UDQrOENPbUV1clN0cHNLWUU5ejVuYmtlQ29wMTM3L1NzOW00TTRBTXVMSVpkRGhvNWdNM1BkQkd1YUpUQTVkTDNCVEsxeXJ0MHo3RTlnNVNtNWxOM0VqQVI1SVF5eTNqZGJBN2lzN0gxVVNjVkwvR2I0NkE1bmRnY1N2MmNBYkYyWlpreXN0TzFjYXRIZEdCV043Sk9mUmZmODB1VVd1ZzFNdFNtbW8vdjZhcGRHakI3b2NlTWREd3Q1MDZJeVo0WWpjV0FQeFFENHhobk1GUHZGdlhrR29wY2hXVi9VSE1tQWN2VVY3bjBwbGZlMU5FQVhjMSszZEMzak1xa0NML3hWVG5yVjFhWTltNERwQitvbVZMcXdvb3JzbnhXT3lPSm96ekd6OHFhL01uWDBzS0tKaUxVcHRDS05IMjg3RmRBdjhkY1lxcENMTmo4Y0VJWUZFUjFNdU1NbnlRaEx3MXhYNnZKdStTcjcwSUE5citrcnBDeUdYL3FRMUI4bkhhdE5Jd21vaXhWaitOc2dhQkpxV045a1AxUEdVYis5ODVpNU5JdVRIdm1wckVuSGRQQnFQeEd6c3FFcDNaUWc4STR3UmtQRmxMN0drc1Bkcy9IUE0zUTlUT2FQVi9VenFvUEdvZi94bVNoRlZVRFgyc3FBYXIybFU1bkdpcnN2MWMzR3lseXFvd1UwRVVLeGw3emxMSTY1UUUvU3VsVkxhTlEwSWY5UGgzZWtaZnltVTFwbWIyZURqZFliUmMwTGkzbVhsdjgrTnFWUWdlZVozaUowcFJpbm5XVGN2VkNjMFI3cHhTUFFMdGRTZEVEYjZZeDlMT2NXR2lZSnF6V21sMzRZdE5XYThnK1UyKzBsTTJ1dFdMT0ExNnFSc1RKTGpGZGYxWUhteTVTMCs5SnV6eHhGRjZXYnZmaTE3QkRFK2ZDU0dqU1lLaGtwSGtubUVGUjRJM0pFbzlMWWtDYWY2SUtUTjFGWHdxYW9URHNuN0JCbE4zSGZsc0pZUDVGY0pQYkk0UUVvVnhONzBtU0xvU3hsVEZ2Wjk1ZUpEQ1VzbHRDQXQza0FEblM4dXZCSDZ3UHJCQ2lYUEN4V3o4SnpVVkpFeTZtanhweFFjZlA2Ym10dDRQSTVJaXVGeUwvRDJndVFyVEdBbTZScWRTUUdjd3Z5WUdPUWVDVnBURStDd0FiVmx3ZUpXTEVpOG0zMUlhejA0OW1wSmVTUFFMQzhEMktlS3d3a0t1Wmkwa0FzVjVZeFlCazRaN1JlUkllaGhRangxWXNvQ0lLOGExQmsrS3BoQ1lGWjNXdUZFMXBVU2NWaVJIdEZXWHdWVlR2dUZPM29rR3ovMnk3RW1kRlZEOEs2RDZpTnpYTFRMZ2lPMFkxamJEdGN6SlVWV3hUVkhHS3I1eTh3MVNXNjFTdDhIWUUzSkl5OCs1ZGUydkdsMGJTMit3b3ZhOXJ1aitaaHJoSDNvRHhLS0dzdFEwR0ZldS9zVTZHMUt0ZkVqZXpLLzJwOGZHM3drRzVHazVKZlFSenoyaFRGVGVEdjQ0b3lHMGlpcmVlRmRkTnk5RnFmeTRHSnpUWUxFczAxdFhNa2FtZ2UzL1liUlhyMEZmOGpVS01kU21HUDkvamV2NldVMWQ3aklSS3lkZmNrTWM3WnFnU1FPZWtTWDV1SUs3a3VSRGxiTTE5U1ZzRzBOOExEVEJmZTRLY2x4T0EvWnhrdFRmcWNqV3dvRU5ZUTVKK1BpcHdXV2h3UE5pRXlhbkVaVW5tNVFReGgzMVFocDBoZkVTcWorN1BsZW1YS1htQ2lvUHgvMnRQdlJqaCtrUUp3SUVOdmswVkdacDJ2Q2ZYS2N5NnhTdEpDWENMejRpL1VKQ1dTTkxOSnZJQkVJNFJSc2hIOGpjQjM3T3JFVjhaNWFEZUZTT3NXSkdCMFNORG5ycEp1aFFoMnZHUk10bEh0VGM4ZHBnNVNucFJwa1kxSUpJUTlEUnQ4bWhTY0FHSzFBSmpZOW5iMHY3N2ZmZm8wRHBHR24zbmF3c0Q5Z3ozNWFuQ2F1VXR4alVuRVJpVWJtOXAxeHJRY1Y3Wkc5N0xqUEpPRU1XK25vL2tFbzlsbDVIa2ovUUZJY2doNlFldTNqRjlmbWVrY3p0NGhqN0JrZjZSb29VcER2cTNwZFhrM2svRWVOYUhuV2pWRDhiT05CK1VCREdyL2JmM09pQU5vVWhpQWttMndiaUN1VGE5bEY4c0ZZbHJzM1pwTEZMdWl3M0NjWUpRQ1N0MCtYVUdQNzZSdTUzTlR0RUxremxPT2VUc1ZhZjdGaUxkWXhua3pYamFhVjNta2hjNVV6elZ1U3d1ZTZkU2ZjV3lYSkZpMzFyb2g0Tk1GZ1VOTEdkb3B4d2g1bXlWYzNZa3ZCNC9XM2VHYjV3WDlWeTRIZ0lkN2YxRXI2ZHJEWGQ4UlU2NkNQZkRsei9mMUVPL25DUno4bm4xcVNMSHBCMkNPOE4yc09UcFIxQXJsVEpEcjViYkorQmlhTUNtYmVieDFOS0owY25sKzYyT3dqa2RtRlBzL2ZQbGpBR2dEcm1kWnJKUkhZVjVIMmFYd3pzdGkrUS9FNkZ4bzhia2R5OTdndXIzNXRSclFDdElUc2Naa3dKUlpVTFpPVDFIWWVWcXRrdTVEdWlJT29ZVGtyNFFVQTNCR2VaTnFseUlRbkw4UDhoZEVrVy9qN3lWc1JTYUlzcG90OThrS0ltZmpLNmVhU2RneGNUditBQkRUNWl0RUVpNkQ2UzhIZkhNOHRMeHh0ZWN3ekdHNWtidEFqMFA4QTA0Y0pGdjdpNGR3Smt1NDBjb1cybmxlZkdHWWFhS0ZyeGZhbFBldnN3cE4yeTFjemVQMFdVZ1UxQnpEY3JwSENSR3Rncm1pamlmT0tlcUJ3UTFBeFhQajZBVW5OSHhlbTZMZ0FkcVhzNVFLd3o4M2FGWllBVkpqY0JrZUxDVWxPSzFZb2pZYWZNYUc1YmFOYTh6eWMxQWZiN1NlVHpqTUEyeDg5Y05CV3VXenhtYVdXSDFZVzkzRG00blk5eUJwczhGR3ovdk1Mdmt6UjlCV3ZhMTFpbVV3a3c2SVJzMmhJeG10ZjFjUk14bTNIcGNPQlE0TlBDeUlUdmgvMFpSbkFyaHVjNFZGMHMwdVRTU2FTTXViUXJGWFFsQm1sc2VvcXp4WFNab2QrNWUzWkVxNEJpTVFUeWNtc09DNHVKU21ZVGJxdG9lcGFJMWErVXQyUG0wRDRrczk4Y0F0U01PcVFwQ3JjUTcrS1pTMmxONXFBMjdhazZFSU9JM2EwaXJ2V1EzbEZJUndGbVRCcFpGcnY5U2JwQnpZWFVnM0NIbEU2N0JraXVpVzlMUTVqd3hqb2hkT0lZUFYyVkx1NmFaY1E4c3MxZ1ZtaVJNNEJFaGpFVk9mcjFIYkxJeklTcGxmdUo1dXE2R0Rzc3hhNGtYUHNBYldnYmRVdllXNVBaU29ydVc4cE9rZDd1am9MQ2NUQTlSZVY4Z1gwTlNub0RZLzh0NDlVZkxYWkF5VmRCbzlld1RDZkw5aEluYWxZd05peHFNdXZoWTdiU1RTcEtIWEVDOEdDU290ODUrUFJPaytlRllXUCtYR1JHVS9oelVrS0hUR0RkcWlQMHEzdTNsaEk5d0dTUDVJT01nNU0vMzBOM2hjTzkxY2k4UVdWNS9hald2b1hjWm9La1psMFhUSGFONjk2ZnpXVk1jOUp6bGtZZTBRemtveGRiTVcvSEdUS2RuRGZSYTRIaGpxV1dyYUVETEtIZ3JXMlVZYmZEcTZkenRNcGlZWWRKZXd5S1VnclBTeDQzaG11SXR3SGZvTVVwbWVzR3l2ZFhtYnBwMEdMankwUHpkZVdLNURseTdVOVNWTXVmNzg1VHUyNXkrdk5mamVxbURMaklaNmw0UUNaT0dTbGFrWUpRdWdUNTZadUI3OERnc0ZlVnZ1NEFTNlFmVjRnWU1URkRBMFNjUjlJSGlLdUtrVUYrdVZ4KzJ0T0J5SStCTFFseVlpc2w1ZUc3T1V0YkpCbGFHekJBYVBXVmc4dTIyMmhZZ1BwZlNPc0k1VkNHUUNQSkxodVQySCtwN2dTdlEwbElNVHdMYzFMMkZwbWtCQjgvRWNyN2NZSHgrQjUzYXU4ZXZtTGJZUFh3Ulp5UlJab3BIUXBjR3dIcmw0cDNBb3gxZkJwUGcvckZFRTVIcEtHTWM4R2IvelBXYzBINGxMZExDbzUrTkFMeTRPYzZNc0pqOHBZSjQrTCtOY1pQQ3pFTzZsMDZDWlRTOFF0Uzk3d1FDa1BoNWxUYm5WeEFNMHBsS0ltUFFtYWNlWFQyNk9OSjYxT1RQUEticEM2c0cvME52WXlEQ3BoT1RyMjE1TzZVL04vQnhIQit4bEpONTV6TTJBZnQ5ZXpFbWFYb0czUXN4QnEwd3k5Ny9IVXhYaVJJWGdVaWFEOGNqUXFYcmJOZWlkeFV4N2tDeVBrazlxUkM2dGRvWnVNZGpwOGMvMXA1YVU5RWpUdW9hcFZSa1hPSHMwUjRLRkZmZjJEYnJibXNtLzVIUklqbDZZdzljZzRyUWhFY20vRnhsSUYwWWc1RE5wQ2pYcTQ5ZEF5Tk54UllRc2xBOW5NWHlnN0FVajgwbFA3YjBHRTBvenBPSUUvOGRRMlFRVGpCZng1RXJHMUdOK21QZVRKa3hNcFdlaGtDdlVieEdxZnZRNWRaQXVHREU4RTFoei9jNVI5aGZWUkU1SVRNbm5Edi9wb2lla0lVMU9uWDBqMjNvNXcwWVVVblBmazdyMW1DamVRd3dCZ1hSK0U4WkkxK2Z2Sk9NdkU2R3JYNGlLVkVUdEs4ZS9PTURkRTJ2V2xVdjhGZUxiTGdFN2U1bG0yNXpBc09NVFlkcEVZTU9nL3p0OXFpMG9zWHdrVGlyQ2cveDFnRmg5QWZKc3BGUmZESFZ1RWtPdkFRM203MXZLU0FZVWVKTHVodHUyOS9iVDlOUmhyeHhSZTZIUjlMQ2FjcUY0U3BaOEZpTzV2VHVaeGFBVFYwalRaaHpRSXVYSDB6VEJKUEk5V01XZzRTSDJtWitwTXMzb29FU3IwTnd3eGl6bU9PeVV2bXZraU94K054NnppaXNlVjVwV3VJMCtJK3lnaUVTZHYyM2ViZXFuNVBPU3l1UzdMSEE0NlRPbnJxcWllbjB3UW9MUG5YeWR0TVV6Y1BlbGdJaEZWL3B6QTNKSGNQRWpjSGQrbHBITDhZMTVBazRnczZzV293MjdZQTd3b1N4YTFIaUlQZDdZQnJzbVZtNmJwYlNxTVl5UnRzVlpsOTRIYlgrTE05OFZUa1BDMThmT0VZOThOTTBHdDVwWHZUUllhSHB1b0RMNTNXYnFSRGhSZlVya1ZuSTlRT2VnOHFDOTJabFNYdnAvRnRDZEx2ZElRRmVVZHRwZkFQR3A1U1VhZ3NQSld1clpGNGU4T29OVkZXMi9VTzBzMU5hK3dJb2w3THVLZXFQd0RkL2lLVnBlUTdHZnNYMjJUNWg2MWw4emRuQllJRGhvWlpDeUt0U0ZJQzFodVdkTm1lam96WWtDT0plUUpzc01MRHJUZFZhamZzcmovREF6V2NqVE55VjlnZm1ySG1NWHdwbVFscXV4enNpV0pDcks5N1Zjb2phM1RhRE5ZTmFBdmZmbUFWbEJYWm5ubmsrWVhFSmZ1ZHNxc2dzRm9WeC85WjRzc29uZmVDTEpmQkhNR1o4Vm11OEd5dWRsK01SRjA3emV3WjZqZjhwUFlaUHZRR2MvbVd0NnY5ZE5nelZvTUpDTUF4bnZ2TXNpQXp5ZzRSYWZCTExTeExubFBhbkU0UFRQQ2F3T096L3hQQ0pnRGNDVHFxTERndXBud3Rja2E2YUU3cGYwcmovU3QxOWh0b1BYMGpLNUxQdGNvNFpnUWZVZ05ZSTRiTmlORk0vSjJwUHpXWmZEWUZWOFNzbk5wVGhBbDh3RWpWS2FnMFlpeGljS0RXalAyOE83VlhFMDFudG0zdzR0eW82WHVvb2dHWjhnZW80SWVrYVNFejZWUE1rR05UeUtXMzJyS000czRLMUF3UVNUSUUwWTV6eWVYWno4Vml6My9mN1VxUTdveHlBQ0xabEZRWXB1VGkxQTQwZjhrVjBMSTNRSkI3WnNnenIwZFlxL0RzREt1TXdNT3JUNmFrRE50TmhCQWJXT0k0OHZhZk44SHg3Rmw0ZjlMNFNEdzljQzJ4clZsdTdmd3ZkL05nMmtoN2x2eGp2M1RDYUU3YjRwcms5YzRYalNUTFBCSFY3WkNSSWxJZmpES0JTeG9KVnhEdk55SG5HT2hCZlJZQUZReXRMeHowVjIzUmJNWEk5Nm9raGN0b3Z5SVRzRVA4WlhnWHRiVkpnaVo5Um5YQndpOTlOaDFtMmgvSVMrUS9lWWpURWpyZUxtaUIrNW8yTnFTMWJQUy9JV2NpdGtzUzg1aUpmd1dxUk42SUJFc2hsT2twRjd0L3BZaW0zQXR3Wko1Yk5NcW8vREkvdy9BcUNDcmRjdDdhalRtSDlZV3lwTC9aY0VHU25qNEJPK0dvb00ybVpaajJCT2FSa1FDTUtQU0QwV0NVMUQ1MFVkM1lBWkEvdGNzQkxOSVp3ZnMyUFV3OEtaRTB5WWxwd2FJaUx0UHpwK0pVbkpHTVhtT0NTK1I4SnNNZ2R2K09zTmZRSXB0WmxNUWhLKzZYRzM3Uk5yeEd6MGdvcWxRS29ma3FHS1dGUXJSRjlFL0VpaGtFRlMzS0ZueFBNTkRRNDUrL0hFUWFBOVJ4UlNJcVpoVUVyRmFYMmFyVHJXS2h3QldEWUlVa1N5SnlaRVZ3TWhoNVp3Z1FtV3BvTVYrVmpQd2NuS2V1ZmJSemhSUmplMElRYStsTDRFbm5HQXF1ZmlyTWtzbkdDeURHTVNzYUJIelVXVWVvN0JGa1Z0QTlwNGk0eXJqTG04THQ4Qk9RQ0hHYzhsd3IxVTZCb1BCRFhrV1hJUFVkRVFLenZUc3p6L1d6a3J4bnBxNjl0SiswUU5wOHRTYU1MTUoxTVl6M09iZ3YyOFQxRUFOUVFaL2Z1bFd2dGJsTW04S2x3MExHQXlpcHByb0Z6T016c0Y4aG9rdTg2akpseTJRMGZwOEhYSVQ2UHRoRmwvZXVRNTZoSEpUUU9lV0h2ZjFIdWNTTTRYVmhLQ21GTmQvK1BESDdrL1V3TmZYcDB1LzYzcDlXRDFQVmlvM0VlVElKY0NUeEdCM2RKa3g4Wmh5YldZcjhtZE5NQ0docktoNDdscWNlOUdFcm4yU1E4YmNMK2lTL1V6bFVEKzhlR2FQMzNJanlUVzBWRVVySi9ZMFQyRFFTNlQ4N3Btc0R5UWNaUTFMRHJCS0NmWWlFZndHSk5NdldLQ3k4b2Y5OGd6dUFNNldkY0srbFN4alJrc1ZuQlIwZVQ5SzUzbVlReU8vRm03ekRmYnlSNjVZTWZkVkRiUnRjdTdVRm5aWWdrTU9yQVNCVnFZUzRnUWNjOUt3bENGTkRvdytpMkZFSTcvTjdicXFwcVdUclMyeHJWNGFpNmpwM0hKMWhmSEJlSnQ3MXgzNjIxempBUVlsVVFPMGpZdkhaSGYvRmhuUUtsa2o5dHlRVGRLMW90TEVNTTZVWVB3Y2c1cjRacnBuNmp0Z3RyQWhPdmN4N3lvM3MwVzk4eCt1R21RS3RiYWxXSEZUVnJJMlY1NXVyb1dFMURHVkozc1o5MDVDUEFPWVpVYXhQRUZUOElRVC95NUozSm9samxuL1JiVEZSK0l1VnY2NE9WOVZoaE5weG12YmF2bStZbHI0TDJHY0dvYTVSWTBYTlpjUlZmdkZaZVhIa1VTNWVUU2x4N216UEUrVjlZeFp3TEQ1Q2NWTjdwMGlzbU1LWmpVVjR2YmQyYzJNbkNGTExnQmp0Ui92VHRlQUlrTWxZb3MxWldrUjhXbXFmR0RsbHRPVityOFltbzNXQkNsL3lmTmpjTkFSOWJTTGs3eStsZWhBOERzVURWVTJ2c0Y2cmNaMzVzZFR4b2ovZi85YmFIVVRNK29MOStHZXJ2ODdQQjhIeGZvUEkxTHpTYkZ3Qk5CcWtRb2RyOS9UNHFTWG5ubE9KODFzOXVhanNYOVRIWHVuNUFWZFFaeVF3Q3o5cFVlYTNlcDF1SzRFeHloRVo3T1JpWXMyYmo0USs5aDhKM3ZQY2RrL1ZDTG9hMkJGVVk2eHlwZFZsR25wOGNWQ3Jac1phS01IMnY3clBuSlZualNlaTZHSzVSNUFNc3dSWnltSFp0QXJOb0xSODBIL0VyR0M2T2lTYS9aZFMrb1QzRDd0Z2U3ODJRZ2MxeFEzNlEreXZLSHFGNDI0SW9oRHc2SnJVNDlzYXQ0ZkkyM1I4UjJVTzNPV3U4aGdtOUZjemxTVHNqWU5vbW8wd21TWTlpZVlGNURzcEsvZ2JyZ3l2Y08zTXc3Z29maFJROUxMWkF0dHdCcU1VZDU2dFZCQ1k2aWpnQlVBVklVK1VwU1RsY2RBNVVqUmYzaWZsMjZHM1l3Y3M1dFpNQjROV2ttWitiWWVLS1JNZTZOUG1BM0VhS3N6WEVJUWpVam94cm5pS2YybHk4WlN2QSs3MkFTdmlZSnBWR29WbDVhb2g3bnA3RHI4UnduS0lidkFQY1FEWTBGOGR1VzlVMnd0VUY3bmJGVGhFZGdkSTBvb0pkSWxtbG9mMGV1UURYMFBXWW5uWjk5RXRrSVdQemZQM1E1S1lVZjN0M081aWJPc2VFbGQ1NHBEU1lOY3RsSm5HV1d3Mk53UWQ1eXA5SHRyUmNOOFlpOENGamJPY2JRMUlyMCtuamVsOExJY3RnWHRrSENXSXZkRDBWU2k1ZGpkdG14UzdOYk4zTUdZZTdUZ0MrQWlyMFdhay9UcTJjaUxnTk1yaGxYVFdVOEVzVnlBM3NzK1F4REdTNVhqWUNlRkdLOWpSWVE4QU5PdVpOZHFJMmg1WlVTa0ttcm95UDAwRlF1V0szRVU0NE5uWjRjVmZyNVBiUEkvWDlDVG0wRkZBd2NnWVo1ZUE0OGlhYm5PZzN4eWFCUEgzU25LaE53ZTQ4Sm1CSWFHYnpWdVBXNkxWNjgyQWxBY3BlKyt0UnE2Vk80eWdTUVRRU2I3Q1BLWHdFMVdCKzI2ZnNuejVnR1huQ0dDZXR0NDlKMHhwYlI3R0J2Z1F2TFN6TndBckF1elZJbWxKNm1rTXY2Mm1yOWZad2dTVVdnQ0pHTkZRSDFPakxlcFdSNUFkSUlRak1zNjJXank5WXdsdDVWNDE0R0l3c2lGL2JuWmFzeGc2eHpiZ2lKdmxjTzJwS1plUDZHRnRMcXE0cGFPM0NEYVdsZTRwUjEwOU84UjN6Q3BOUTdLbi9YMUtqY1BjTEU1Tm94NXNqT1c4Zm5FVXlpZTVwK3dPZzJVR1RCL3kzZ05QVnBMQkxRMGhuejdHdUp3L0NjK1VJTlBnb256UGFVazBmY2VRQzZkMFZrdFV1SVozYzVnS2Nmb1VFUXk5MjZSN0NjUVlndTA1bnhZT3BZanhjUzB4MkFDb0sxcG9hcCtIQkdzOWxRWEN0aC8zZTg0SzZma0gzeS9zSXVvQ1IyMFRySGN1TmxMaGlnV0o2K1Y4LzNUMnlaYkxHbFhFRnQyN2tDVnV3YXBvb3plYTRuNGgvY1JrZUxFZ1RhWnB5cW44UmtaODQwN29xM3VPZ1p4enFTRGRVYXgrd29QbnA2dk42VmxXckI3b0hEQWU2VWlldnduRnR6WFJia1pveml5dFZSajFrVTI2U1p3RHZzQ3NmdndFbUNuK0tFL2toNklBUDg0UVhab0pXcUN6RldyRG40YkxFMzRRUDVHREtseWRsT1NaTUtsb2FCS0JkR2pvZUZPNTFocEVWVnluMlVNMXMvQ1BoRUJmVGRSN0wzVk1PNGtlYlEyeXo3a2NvRTN0bGRsSnNBdG84U3h1dnlrWjBYRXg4RDBSWmZyUGprc0hMZG03anZDVjRDd2tqZVhQamd1SnI3NG9KaEo1ZGh0dTF6QU9nb2lVN1pFTmZLQkVDOHNoaXJaOUtDMHRBNEsrSWFVd2E2ZHNuamh5WGQwbW42YjZhU0FyR2liZmZvL1lTa1lHalNPd0w1M1poNWliTGhtTjlHTHhNQnRISmZwVWZSdzdiRUpERnJCK2pJVXpESituRFp2RnE1aS9KcVRwS0tjazJuL0g5RHNXVGZ4REJFbmZROGtQZHN1NzF4ZDFRRy9Ua1AyM0lIOXZlMUFoRFRHRkhFbElkTWxBbmtkZU15S2t6MTRyYUQ2dzdlc0RMT1BSd1JhQmlXS3ZFTXVxNkovbGtKSGxhQ2dPZFU3WEg2eEYvYXlKaTBJWUh6bllVYVU5eVF0UzExMU01eHVKMkt5VjRuUDdScUw0VUVYWWZMVHRhRE1yUUdpbzVMRDR2Zk02c0p6aWFJV1hqVENzS2dkRlF5V3F2dTc2YkhJSldDcEZnOHVIUjFWZU82MHhYKzI1QU8xSnZwT0tzdkhWMDdCV0syRDlONnpMNHM4ZW1QZks2Z2FweGVYeWtVMng4d29QeWNGcElZNkFkMUpZVGx0UzJmNHltWk5pNFV0Ull3Y1FobEVZQ0VBbzR2bEF2Y1VBS1ZjQXAzVFdzUU9mYzN1UkM5L0h5NjI4dUFHWTljY1h4OUdHampBU0hYSEk2cWk5RlZGSEpxQ240WFhubjFDNW4yalpGNWkxbjV3c09SaXVnSDZINTJVeHUxOTZhSTFNOExrNkNvckZPZXB3TGVkeG4wQ0l0KzEzWk9INTVsOWVqeHVCYjU3Z0FkbHhEZ0xUV04yR2pFcFRMdlNHMjNVQk8ydjZiS1hYRy9UQTJBWitKZm5HYWtEck1Zb09ud3lVSGNLeHA4VGhJYlYwVkQvQ3ZXZ0xiMkRpQUxEOHpSSm05ZFVqLzVyUVV0b24zekI2ajcxTk9YT1BlRjhSNitZZ3g1ZkZtVG94bExjbzdUamxyckd4OUVjRXAva2pYTE9qellRUUkrZ3hMK0FPUHRseGRjM3c3OGYzTU54eU5EWVI4QnZLQzE3bjNLN2hOajFzTllUd0dBUkgySExMT2NUMXlDMnhQb0hRT2U2ajB4L3BCN0sxTmRWSS9yaTVtVlpMUmE0a0tGMzh5YVNTSXBzdkhvTWlZQm9aZytqTUJmVjBsYnoveWVSMmgvMXVmTFpJNERONXFHT3REcUVNNUZzdC94Y3BOYnFNSmNDOXk1RXRqSk1kOTRmSXVRMTRYT0UxcWN0d0JKSFVORzJiVzhMRWhIMXJ2bjhlM1lzM2lseDI1ZlRQRTd5OWN1T1VKOXVXRkhvUEZoYWl2Ujhoa1RWek5YUi92dnNDVEJaelZZY3lTZ3dXeGw4Rk45K2pTR3ptUDlKcEdnVXNFaThXTytwQ0JDNzhMTm5KMmdVZWVSVGhJL1cxd1pNN1Q2Sm9Ea0FYT2lDZnJIa1U4QWxHZUJoTEZTQ3JsYjRMSWc2dDRDclh1cTZ4NHdlU3dhTXpzMjRKRE1UUjUyTi9xNndGNHNRcEgvU1B1NGFKcUZRRU91OFMxMUYrY2ZVaEt2TnplTjNjQy9VVll6RWZDMndueEdHV3BnZmhBTVVuUHVDcituUlBMZ3NTekZFUnNWQVRZOXFyMHkyckt2U1ljVW9PVEdrTk9Fb3hLWmZiSnZzd2FYclZNYlNjZVMxNS9ZWnVJNnhTM0gwZUw1QS90YTFycS93bUxPL0wwK0VTSTVoVENkVGx6a3kxNk4wbEZSdVJjVTBPUzBJYWNLcWFTazVnV2ZaeFRzcEE0Z2NiTkRLY01zTTQyNFpSN1hNT1JTdGc1UVV5c2JXUGh0alZ5Zk1tM0QxMG01LytyYjVicko0ejNYRVVoTXFpUElmUEtTZjJKdVEzQ2lPWjVJcFpVK2t4eEJoMmZQL0ZORDlnSlk5T2J0SFUyQjZUaG1tU1MzVXI0YjRpYU82NXhEekVlYUJKTW5iMlpBOXdHTDZlNGtyQlVQRzFuaEFmWEJEZnFpVkdDejc4cjdQL1JDd2JFVU5QaEFFZEFzWmsrd0RkcDNWUmtYNzNBNXhsNGxkQ3pFeGhXOTRpYldTYUdRNEh5Y2Rhb0hpVEV3Rk93K0JzaWJjU0wraXAxMG9vYUlPb2cxQ3VnWGNNREFXVXV3ZkJ4RFV6bG1IWTQ2bHpaWlhYUkhoQzB5OTU3anUwWGNlRG85QnFsTWZqYlhBUHE5cXJBTFk2eGxDOFJOcUt4VkQvWUFGSWhXNXQ5WVU4cE81dHFMWnE4T1JQRHhUN2hSZHJvZm9JZ2pQNDdsQmVsSkY5WVhBS0I4VXRsTDIvQW5OS1p2bVlmOXZvWW4wOTB6Z0Urck9SRGtMSnN6ZUwrWXVxZE5lY0loeEx2Uldic2s0TFBTLzN1VmF3WnY2dHM3ZmpjcnMvZVRlalpHdE9LbWJRQXZIMThrSlpZL3I5cHYzOVg3UEVyV3JpSVV1YU1scVhzNTNJbTVjR243dnBwMFlJQ3huSHVkUW9IWTdpbk1SM0Q5YlBuL2NwNU9oa1ZsamtjMHhsTW9NcW5mUjVEYXpuNXE1VmwrVlVoajAzN1VOZm02clYxZDJDNnlKQ2ZkeHBUS3JJSFVGTi9hd2J1bGZzK09seUpIdHByY1htVHU0d0FNVnplZUxGUFZSaU9sSUN5WmRaVDVpZVJwTzlacXdCa0JpZzhkdlRIZFp4NC8wRGxKaGJKcURGUXNBRlgyOGlyOGtWNHVFU09kOE5WVGJRcE0xUTdrKzJnL1gweDdRUURPRUJVQVovQlVha3kxNGhZV0xCaHVNZk1nc0t1aGdzNlpqMVRDSUZsSU9GeldIYXh1L0RmbjhVdkhCZjBvcDRyRXV4NHpDOXlKUmdTY24zdS9ncmxGWHpSY2tiOHlhVTNaYkZsRWlYY3hIMGlFWkxqNDBvRVlCSTJtZDJQU3g5dG5wb2FFdmRjRnpPb2g1dytURzhyOUVMUGI5RHRuUEdCUmJKbTBieDJsNkVjZ3Z6QTh2YzJ1enBYWDlOMk0xd05EOFpSdXJmUitUVFR3STFKU25iNG9idlMxSlVDRnNkcGF1NHpFRDZvT1IyUlIzRlZxalBicTVKRjZlVTYrYlRBNDNDekhzaUw2UW9UdXpKRExiSGZIRVdlRENzTitibHdPWXRCWUZ4S1VIRFc1VUdlRWMyT0RJL2p5ZmFhQ2VGeXBzVDZxWW41QmQ0Vll0bTBxc082eGl4MkkwTy8yMWZSdnhyWkk1MFNXMGdlZTRDdVFqWW1TNDVMMXRGK2NqM1NyeUFQcWxDZ3VNSWR3OFhPalBiTFlyUUVJZ0dEak5jWW56NzkxdUtTaWp3bkxWVjNSaGt3WmtJdEZyVVNFelNQcGFKWWJBb1ZscVJueGpFanVZUHNVL3hNemFxUWx6YnBoYkVwelhYVVJ4VXEyaVZDMjdWS1VkT0h0Z29OdU9JNlgrQWJsZ2VJY0dQTU0zam1VOTQrZFlKazNIZzk0NmRWNUpJUFB3RHppSEo1endBMS9hREdJQUx6ZEF5Y2xsQXh0TDlIMkw1eGxXYnlHUU1kUFladHBaQmpVMFhDcnJFM2FqVHhOUVJKcGY1MVV0ZU9EUHBTZU15c05uWmVtTmR5SnE3OUV6Mm1FRko5djF5WkRXL2w2bUJmRlQwYTFvMjFKc3djcFZoZ2F4WWZJZUY2WlVsRWg1TzVabmJ6TVJmbUs5TEljSnlNcmtIRW95ZlBuTnJvOExBY3ladUt3ci9HOUhpOXBUUyt3bXlsS2lmdDc3LzBtZm1sNFdwY2wwMmZiWkxRZ0ZlbGczYTN6WHlPTklUMDlmbG9NbjUwdlVHQTB3M1ZqcU5pRFMyaGY4RlQ1VW96RnFkY2V0OXc1UTBlZVNTMi9pbVluVDVrY21YalNDbElObysxanhScHZwTUlEWWM2UStiSHM5QkthOThGSkp0ZkMzZGhjNlVmRE5ZRFlBdFkvVWhsSWZ2WmpWZW44dnhEVTRxa1BrZjIzTTR3WFFuTmo4VUVHbml2aVlUZEFPU0xTR2l2M0J4cUtjWTdpWTZpR1RoOTBoUHpOYzlWais2NXpqMHg0aUF2NmwyRjZwbnRaaGUwSjRCQ1VvUTVFdmJIZzhvSjVRSmFza3FCNTB5bStQdjlMT0tFemJoeWg0TGNnZHhNVU92SXIxY2hOMFpuNE53a2l4dms2cUorcE9qWGdnSm0rQWdJQ0FnT2VmWVRkTVozMXNBSmdJUnJvVWh6VjI4cUdxRU1ROUFnVSttRnBTUEl1Mzk3ODU4cXpNR1hnTkFlaEtLa2lvekFNdUh1N0Q0eFVNYk5obFI4YjlHa2MrcE5vUmZvd0M3UDFJaTVtT0VZRmtYby93Zlp0VW9MUThqTTU1QVI0Kzd3eDZPWEpOOEQyb3REaisxYXo3Z09KdkNxMXJOMWtQbmM0NGwxdWozVk0zWnJEZ0s2YWRuKzNhL3RwSUpLWUthVUpLbTVtYlZTRjZWYUxjY0RURW5Tc1JWWGFJWEZoWU9iVVRSWERrVStwVUFRUVl2RFhmeWtkVGh0M2NYQ0RwOU1kRi8wdGFnYkxQTFZlVTltdWo3NXhGTk9qOGVnL3hDeHJkclh2QlQrdEFiTW5jSG5VempUQm1nc3pqN3ZlSElUZ1NqTE9UL0ZHQllLa0pOL1dCczc4ekFuVEVPS2pxSFF5Rm5YclpSemVMQlVUMXFFYVRZTGVEbTNkZXpYMGNlT3dpYmpGbEpvY3pVWXEvK0FUNUtqQXI0cGU2VmhvbnJmU2lUWWgyRFVodk9aeWZaNVh4K0hCbXg3dHlFZngvOXU1TVRsSWNIUld4ZnpORzlwMHk3WVNaRERrdmVqbUpZUDlEVVRjSnJraXNudU96THZ0eFpJT1ZZZHdaSkZ6L05LbTFZV3RzRVoyd2g4TEJjUFcyRm1HMEFKbVQ0SmRqRHordGNkN1Qya2VEOUJ3L0tPajRSSFJjdWFNNDZzNWdzcEd2aUpSOVlOQk1iS1lHWjU4VzJZaWpsMGxuSXdjbXBnQW5lOEVXKzdiMWNNSWpCNUN4SG5nQkp2M0haNXJNZm1mMHc3MXRVLzRMRzI2bWthWjZMdTNDT29nVWkxREdUS2o4bkVpNEt2d0xtWlFNMThnakZ0YWVCd2dXei8xWm5YZ3lNRDZCa2drTGJMNElCQUJVamNnTlZxU0svbVB5c2NnTGhXYkNsR2xWbGdqazkzcUpZYSt6cVJlaFZYSE4ySGo2eGZuOVVnckpnY3ljc2dMSitpdEExdkZTM1dXVUd5OU96VWc3U2xnbE1xc0VWeEhDei9lYmloK2hxbSt1T3h5QUQzWSt6TjlYSGRPZDgwU0NtUE04bGZqM3lrOFJSMktCdFBsVXd5alZTK3pKODc5NTNrZXNSYjZJUHN6QVdCRWdYeW4vQWl6aEUyL0ttTU1PUDNQR3Q0WGRkekNIaDcyT0dSWU41d0dFc2d0eFphNEJwV0EvMXlNcldxem9wMkxZYndlRTJRUjFkNi9RN0lPY0M2YWdqSFBkeFBwa2MzUGVjVTVUQjBKSzFZUWUwek5CU0lUNFlabFZUOFkyMnFndUVDK3M5TzlHbXdiUFVmWlord0t0UFBhZGNOWnE5am1DeVdHNXFlTE1ybEMrZGQ3WVl1dmVndTNmdlNCZ3BMYWRETHNaR2FtRzZ1N0lsTkFIc1JaanFjbnJEZFpJS0Mxdzg3Q1YrR3JmdTBCUXlyZzJqWFBSaGZBVmVIYVJzVFY5WEpsWTR4VmZhSHdNM1ZQSmpLMjBYTy9TS2JSMWJYbU5QTkxXK0trbUw1ZFZvbk5QdDVFWk1iR3JqcDdzNE8yM29KckFsZ25nSjBFWHZZMENSY0l3bkN4QTZtbjc5TVFxZ3EvRHlrUFQ3bHVLKy9qYWtvclc0NVkweFZJTVdobGQ1QU02VjRhTDZCYVd4N2Y2dTMrdDFFMDhkOVVlc2h3cENTdWQxZm5mNkVFcjJGcFp3UTI4cHZtVTVBYi9QdmhuUzBpUnNLY0RhWFpoZUJnbmRLRVBpNnBJRFBPSExHcjRhNlA2Tk12b3hLa25GbkZES1RkTXY5djRza3MvaDZESlMrbDZhSHlHdFVvc0Q1bWR5WXBvbU9IWHVpT0RyUy9sMUxadFhDUXJSZmtFckhqL0NJMnZkcmt5V3JvOGZpYzlCekVGdWVZVEF1WFg2WlMxTThhYW1LMVNSOUNuaFM2TlJtb3U1cGJiVjgvOEwzWWxuSy92Nks0SE5SNUZQUGdIaFFzcnNaVHUxTy9kZVJ4Zk1uc1VLZTdlYVdaN2I2NXBvL0FNZTNJcnk5KzV6cTEwNmxITUtLL05JVUdWdFg2UDh0Yi9lcVVNaUVheDcyY3o5b05yTTV6VW1BaE9DNkxRWkVxbGJnSFJNWk1XUk9HZzZuczJTalM5OTdoSDBhT0FkdUZONXJUMnN4S1gyUEh2LzA2azZnRlZySkIzTElINzZ3b0pwa2lMTC93alFhd0dJM1dsUG02UEZLS3B0blVLNDVEL09udzRpeEpoU05jQ1NoZjhvVDZuVG5ITUhWRjVlN0lDTnBJWUxLVmhIZjYvTGRRNWRJcWZzZ3JLTEZYVmkvTnoxb0RBR2FPK2FEVFVuUkZ3a0VLQ2lVbXhuTHBoVi9Ga3ZsMzRJYTNpenN5WE9kbmRYUjBIbTdFM2VuK3FxbnAyYTlQNHlOaFl0L3BTc3J0cWF4U0dDWHZKY0tmdTZ6RHVORExpdUU0Q0NWeWkyZVBPbGhqUG1zNmhLMkZVTHg1THB6emNlbjVTSTdpa3Rra24veGtrVW5BZW9SbFoyR1N6cGU5d1IyMUVwYmFPOVZWUWsva3I2L0pIN2JUbEtqNnI4d2dWR1p0NmVUSWY5VXBYV1htSzFTVmtoQXBhUExTY3RXVjBocXU3L1JvWTZzcGVtZEpreFhMN3FNbkpNT0tKOERGTThLNkRPcnJFajloNW9XbkE0YUpRYVo4cEwva0hnbjRSeTB0cTM3T241TVg3OC9EZG5FalU0RGk5VVZlam9XY0dzMkVrUmMrQjA3T3phdCtaZEhXRG9HWjJzaUJzbVRrOE9VVW43dVFrbk8yVmlQM0lBUjVNM2NpU3ZPV0pkU05uT1pSUjdYNEJFSUVOd29hbzZtenJqeG9yWWN5czdXVHViTU9EVGJVUDduN1FzNHQ2eHhtNzgzalJxQ2xocVBUc1h4TFIzcG9KZGZwenc0eUJCa2N4TnhpMk5PcVU0bmN5dW1YZStmcWc2R1BsYXl3ZVZ1dVpyelBEWjRjZ0F2b3R4THNNZ01VMEs2NDdOTERpUC83NHAxVElWRnZRd0ZkdHhMMXJ3UjN2Y1dQR2JWZXFnWVhXZGliYlErVGFFL3M0YnFSRGdJK1JTMXVMeFRLMFVXMU9UdFd5aCtZeE5WUTFaTlYyWmJSdXFGVWR0dE1lZTNnQVo2N3BxTFYwb2RLa1g4Y0Vla0dMSVZCS1VXQnJUbXdyZjc1TVl6TjBYL0FVYzJNbzVwTmZTSnRGOW45aG16a3BTMnZ4bDVDZVdXMGdLb1lPKzk1dUN4N3BhOFRNazhiTmY3bjJzeUNkTU41UVJ5NTlJS3Ryc0JxZUhDaWtmUUVrd1RPZmIwZkdEbmVxcExKVTUxSlIxcFpXL1B4VkUra3hncHMwczliUzJ0NENXZ085YnV2NFo5NE5DODRZVXJUc2pXbWhGUHk0YzdhalNLVjN6WEJSV25CWFZSb29WU2owV0VDdmsyZUFKTFhZaFgwU29oTXF0c3JDNVhwVzFzQ0YwWUVoTVZFZXFBZ1FvdnhtSjRvdklqcnZSWkJVVXVmL2h6ODlsNmphWmNQN0RCdERlN3oxcFdsMzNDSWV1RjE2NTh2c0t0UFJzVEt4emM4d1VTbndhMkZoRmpRVGE5L3oya3VXUnhQWXV1STdteFVsUms4SUl4K3RBMm9qbUVMK0ZwMC8wdmZHUjlESU5PQS9UUXpWbXMzbkxQRWNlRExYVVlFZ2VvTXFRNU9ST0lQNnBKVlU4bEllV0FiRGt5aWY3THpPUUliU1NTUlNOQ0twSVNIdUxocHJzdFYwWDdtUy9la1hTbmV0eWpRdFBod1RuYUxMRVdQeW1LUmhSdnZkWlFyZEpJMUU4cEI5czVLR0dXT2cweTd4RS81QjlCMDhWTDVCNTUwa01ROC8zb2pjdUtoNjhzMjhMSjhJZE1sWHNBZVZHdndtci96bGJZYUsreE9Icmp6cmFTcHdaT1Q2SzdqZmZ3cG5PYURxcUZlNDdaMjJjUi9zR3lrcU1HL1Jzb3J2NEJRYzZHYTlpRlJKRGVYQmJ1QlFNUVczZW1OVWpVRFlrZWNpamhXNnAvS0xxMFNYbDBpWTZWblpySUpJdGVvcXh2MVgybWxKZlNJRzlZZEN4cWx1U2dtNzZ2eXQraEdySk9zenBsWjFKc1BaMU1HcCt5cVUrZExCY1hyMmd4bndNY1VzV3UzNG02b1RQVE9oZm5ZQ2F4ZEkyOEphNFdaRk8za2xpakY1ZTJkbzZFSG51UkY5NXJFUTd1ajd0U2p1cDFyYXJ1RVY5NGkvUFBPN0s2NSt3K3FmTkp3WVhmc2dGQVhRSEY4cG9tbWovaUpNNzV5YStCZWVpUmRKbUpBdE1CQW5CNXNwUEFEM2Z2OEI3T1kxbGpnSTVBVFhCMHRpRFZMMU1rUWowZHR4RlY5WkNCUk5lWXY3UGNZdkQ4ZytWTGxrRmpNNEdjZ3hITG5ySHFYOTVQZCtJLzlMdll6aGo0OC93bTdrU2doaUJqN2o4eEhhQmJaSkFnS1NXaldrU2RDcjdaZkxEekt3UlRtNFUzZ0JMRmpjQWdGbS9GVEZwc1JCZzNIdWFDR3MxMnBDdGxLRk55d0hPOHk4RVVjdmphQytTU0ZhZFlkbElnWFVqNFBja3dhbWNHU1VFdGtwdXBoNFVCOW9YeDhRL2hNTmp0M1pydnZsUlhSWU9pSkZZd0lqT2ZGaXlhQ2hrM3Z6R0xGdWZxRFkrZFFxNU5QYTJBMG1XQlE5TVhRT1ljQWxkeXh6cXhBK2xjaFZWWmFhY0NTL01QWUdVSHNGZkVWY2pwWXJBQmt6dEsxVXcxOXdkNDZXNDEwMnovSDV2QU9XUDlWVVNNL1Bud1ZvYm1jT0RQNWltM25JMVRiYXlIWjdRU3JBSnBCRXFzZm5acWpreVhlRnBDY2NrOVRyZmJldnh0UnE4dHlJbTB2NnozYVFoUnRRL2ZhdVRzekpDem1zQ21xbDZYcHFnL0FZSXMwSTBhaGk3TGhOYzVtWUxNU2h1TnBhckpGN2hjQk9DNDEyaVVPTGllcWhod1ZzaW5ncTVJWmxBYXh4STNMS0IvWVRSTlFOU1dmMmVabjQ1eWZHVnhVZWMzYWZXYTA4R0l3QVEySkZtSHZTcTNWOHh4M1psRlhGMHpOODFpeE45YVJSVFo0NUl4Qno3aXBIMXNGR1pQRUkyM2s3YlBPcENRQlJ0bGQxM3ovR1E3dEU5YnNlSEM0aVBMd2RPRDlwZjhvaURtSS9qTjhxQjNrdkVkbHhZdE11dVRadW9keVB6WENZTVNOdFdibWgrbGJVMGgzN1BOSmVwTFFHamJHY2FpbnRZdFZZdXR4Zit3Z3BabklTVEd5Qkp6d3pZdklkODZpd3JuTktJNk1udCtOK2dSTTdnWU5QZFZwcXY2OHRHbmNpaFFPY3FvNkVaMXVnd01iU0RGNGNJV0N5MnkxOUFKYXFiTkw3SEdWVXZzc09uRktjeURIQlpRU0l2VmJGeDZZNVJLRnhHd0kxQndxd1ZPWmFzQmwxcjZ0V2xaNnhmaGhFc1JnTTJXcWhkV0tlYUtoREJWKzFXN1kxck5iek9RQ0RkMXZJZE8vSVd6MEdFc1F0SjgrbEFDL1VJODBlV3JDRUE4ZFdBN0ZCZnIzVEw4VU1IZ1BpUFpGcWhwUGJMWWZmQkMwV0FEcmpOdlliNXM5c3FubGdBK1BjeGYxbEQzMWxlL1drcSt4am4xbE1YMk5aK3Vreit4bjMyMmNuOE85ZjkvMUNuOE82QU9nTlM0cktVQ1NQMXlHVGxyNktqTUtyZWhUT2NkU3ZMUDJ2ZkVianZvY0xIUVQ4djhEMzJDSnJvdWdpKzZTOHJoclIzbVZ0bTBUNTVKc3IxNVh2akFFWXJWdnB2TWhkVUF0VHNoclFMbjYvL205WHdKV0hSamF1eVp2L09FTG5xWnhSbWIybE1qN2pmVDlEZnlic0VrWUJVRStPdy9Cb0E2K014L2VaZ2dqTnNXYkVzWDRTV0NYNitZN3hTUmpoRzZDM1B5YmMrN01PU3BpQzdLNkdHdFBmT3BXOGlFcm02SHNkWkhEaFBBMGFIdEYvRi9NWFNFS0Y5TFRJZTE0TzBlVm1qL1RuTU5qYVlXYzFXcVpPZGRuS294cVFaT2dvLzJZcFlsYVplMTRjZDlLRUg3MzZJL3VQeUFER2ZKU3R6N0lwaEJwaWtPZjlvdURNVytYc1hqM3BqSHBKUjNCMGNhQWw4cnY1T0xSR3doWG5paG1uTGF3T1ZEZXFZWjlCNXJ0a3FVb1g0a2MyU2JhSDhjaWZQakFpQjF5Q0xYMzA4TE96aWI3MTd6TXA5N1N2em5LVVl5YytFT2dDVzV2Z3dld2JESzA3VG1US1BPYnVyeGFONFZYcDdkaEZiSTFyQ1hCOG5OWW9rSHR0ZVBaZUtwY0tpS3RzT252dnh4ajNManJ5MXVGK2VuUVJ2TElmS0hkekl5ODcweG56YUhBdUkxR0JRWjF5d1JESUh4WVFxM2xlTTZyV2pId01EdVNReHpMZTVYeVN5K0dLUWQwcENiWHJqK1F5VmU1YThxQTJ6Z0VTRkpkZm1ubkU3L0FHdE9pUzZsek1nVmRId2F3c0t5SmJWell2Z0JnWFhYSFFvN3Q3Z2VYcnBsdzNHc3pOUDZQOGgyR1NhT1dRN3hBQnZXTDVtQmdxd0pXeFNuNk1HMzcyMFR1d0R3OXRhZUZzS0ljMFBJNWdKaG4zZ1U1Y2RJYVJuYW12Q1hXejdJRi9oRXhWQktZbGFWK1JxRGdvcXMvUDJJa2FHSjdPMGxkQVFnT2hKL0pSb0RYVHhNVnlpZ0RzWE9BYzhBV25PcVJCMzMvSUhucXZrblpyNWdZNmZoRTZCSWJpL3BDWHVmV3p6TysvcXFPVXFsYmQ3UmFmOG1seUZLdEsyQ3hueU4yN1BETDhrNVpwV2NqQXJKcGU5YkxCQkQzWDJ4aGtXMTRIdVR4QXFhK3hubURSTTRvZTdjVDVRZXk2M2tRUnhlb0lPdFA0TEFwcTd2Z0xmRTVtYUM3Tm1sQkNnT3N6czM4L3d6bTZ2SzJvYnlQRFE3cUpDK3dUZ0RmL1pHb0l3MTdoUG4rSnZ4dlJQSGlUOTZUMXl1VzZhT0lqNVdUck56cEYzN1pXYTdVczZrWVJWTDhKUEd6Ti93L2FkNjV1VUJlLzFPOHdNcWpjTEJQdVpHRXp6cXBvdSswb2NYRVRiOU5jU09vcWxWNXdDZjdzMWF3blpwRzNnQWVPSFpTMXNCZWRHRWQrK1hlbVNuck8wUHhwZTNTMjUzV3V0eGZ3QWRHZkl1V2R5R0liNEl2ODBjUGl4NWtxLzB4eTlucVdCRG1HeDlVOGFGTGdOWkFUbHJ2MmJTcGxXWHJDaVQ4N0grbVZzemM3M3d0QXN6VWdMTUFXT3JoRGZYL1FFYWdZd3V3M28xaFJSMXV0d090bHVQTjZaMVVtMzBjbFBrNU05RFlQb0l3Zm1LWDhqK2FOVzhtZUp5Mm82T2NFdEJMelgxbk43M0tJWWFqSkNBWnRrL1pQSCtUQTN1UUZuZGIvR3dVaXlMUzdBVWR1L2pBMkcwcSt1NjRvSmVvczdxRWEwT1h4eXAvOHJCL0JrTWxBYS85WFJrWGFWQnd4cnBlQkxqaVJrUmc4NzZoc3lSLzdUdjZWeEx1Z3ZJSVFqUlYxSjFCTHlkMzNjVzN4M2JVYWU3VjVXOHJYRlRjR0RaTmFNWUtDRS9PNnFSVzRsQXZnNVg4cEU1ZDdSVkpId1kyekZnWlVkbkRUcFJjZkdjMHJraVR0c250R0tkZWF4V0tqaDJZMGl5dlBtQklsejUvZHBNV0MwTXVpRndGeFA4V0xwK2s0NnJYa09qZ1NrazJHbDNJeWtnK0hqUGNLTDZxZGNqc0Z4eGh1dUtvMldPUWdMckRxZG1reEt1bXBvMzA3VVdkcExoVmE3ZWpzcml4dmdIS2Y3THh2WnoxZnB3TnViL1UwdVY2VlRNYXVrS2RCY3B3M1I0L0Y2Y2ZPOHN5VnF0MXQ1RGszdmNXNlZ6c3RId3BGT0ZnMkhtNUNuTkUrZzNZMkxaT05hZWFoRmtsT2RwZEhGQ0RaVitUbnBTMVZzUFpZY0wwdEE0SVljWVJyM0FRajYxWFJTSEFPUlY5eTJXZ09iZm1rOXk0V29lWkdGQ0R0MkNkOG1oTFpoR1pOWjZqRkVULzEyYlZqUFR0UjY0NWEvZTVSWVQ1NkxBc1pHakxIdnhpS2hmUHV2Y1F1Skk5RmcxamN4aUk5TTdSZzZGcDg3eFA2T2NzYjJjZjBlOXlwSmZNMnpVRjEvZHhZRkpsSnh3WFBBRUM2bHh0YU5qMDlxUXFXbUNBZ1dKRDE3aVkxNXpQZC93aE94K0M4a0JEaC9DTjl6b3NFYVRnTzF5Q2xHSkw0TVdnSlNKcFRBcGpqYnBMeUpJWWoxK2NyVDhWU3JlMUFzRGZYL2RxVXZkV3VHd1l4K3lEeEFDVnZxZk9DdXloSEdSaFRycjdvRkpQZm5GYmkxS25NdmFMZVlFUGlESVlqa3c2OStvdEVNLzlndmJPRktmWjVCNndJRlNiaHVvbFlzb0JFNTB6MDRQeUVpeFNNWm94eVVwa1ZxVmJvMW5jK3hGdUNHa1hBQVlSNVpxbHNJenRLQjBic0w1cUcxdE1hanpaaGk1QlhUZUxKaTRZc0Z0K1hPOGJvdEU2MHl3WDd6cUhJSkwrRVFaWmVtT3JUZ05ZUmFIR0kvZWJFTllYTjdPbnUweUVuWHFBcW9jdmxnUy81VVE5aWpDNS9xQmdPcmJPUWd4a1FPR3YydkNJU1A0ME9iYjNWVi91d21rTVk4eEE2Q3VkQ015SFR5c0FPK1BpZlpFSXZuWmVFN0xtdlRlRzY5UlQ0alNocVlNa25lZk93KzFCeURMUlpTNGJ0VUtHdVBBUG9rVXZWZkRoOUxNMGhNM0FUWEJLNHNKSDRmd0g2NWlTbmVYYkI3VWlkUVg2Uko0NTZjZXA2aWV6U3g1MExsMEZKS3pxM083S1JvS20rUDJKd284c01uVkRyaGhLMG81dVJBTU01STFTcXU2amZrbFB0OGUvNkhtVktISGtvTmdwVFliTmpwTG9LZGlVdERVN0JiZ0xYQ0MwSXl5ak1VTHk1NlhqYjZXZitVaTl5K00wY0MxZ1hxeTZ2elJld3hPUkx1b1dEdFlWNUNHSktxeW56dmNPNlhjVDR2OFpHU0dleElmZE5xUTRsSFFRMzhBOE1SQUdzazhWd2gyVFJrc2dVbENVaWJleitYRmV5YjVJRGYyWE1IaHpuUUxMaXhLMHl4eVBVVld1SGlOTkZFbGp2N2ZydDgzbElZcHpPQUp0UWVXRkdOTW1aMnJRVG5XYmszQndUbVJ0M3BLU1NDdjRJc1U4VGVSNDl2djZ0Wm92NGd6U3JIVStaVVFvQ2xZSXY4ZUtraWlSNUlNeXgvYzJiSnMzZ05QMFBpV0ErWmVnMjI2azFMY1htRUVkWkxZY3ZuaE5lb1h2YzlOckdsVjFDOFgyQkU2N29DTlpOaEFFTUVVcVhFdGlZWG92N3lwRHlVU2xaaE80N0JYQlZ1Z3FEUzRIVjhrSHZzblQ2QnQydTcweVlValc3SGk5TDB4VnVOS0NGMlAwNUlOZ3FVL3I0MmFuaG5ZMmllSG9lTUdGWW5KdlNaRUVFYStNVklyWlZETFprMzFzZG9SWjllVTBpQlZ0Mk4vemlJZU5STWJJRlRBem1HQ1ZNRkFDNDQrV0RxUXFxakZIKy9wV1creFhJQy8yV0NmT0JiKzczNzZScXR0QTk4VWFicmNBdmFWUlp1NWVubTdLMlpaWEV6dVo5WFY2ZmFxN0hkQUNnNlRqZlFsdG5UZ3BBK09aS1pHQnQ5aWRHNjBUUTdNbHBHaGhDSnAvVEQ4Sm1LOTZXSUdQMGVrazdXWllSM3MyZFpNZDQ5bWNYdFcvN1RJckNRVDdTZmk5TTBuVGV5K3MwS2FUdUk3L3hibmk1QVJlV3lheHdHMW9MN1NobEJ3cW8rSTlFd3dqUjdUcjZuOTRWaUJRQVUyVnZFM1JvalkwQllzaHhiemNaejBjUnppZXhGNm83Q1VRdHpPNE5LN29aQ3pKWVptZm9ZblVwYm85c3h1NmlLTk0xaEhsbHZ5Y2g1ZzJwckFERThvWVlHc0gyZkRrRHJWMk5OQzNodHdsQi9OTDVRdjdHL3U3b0M4Y3RwSUNwbDNKNUpYY3RwYyttNnAwaVA3M2J4U1lIK3Ywb3A0Nkhuajl2UTNFU08xZXJLK0x3RFVZNWorKzQ0ckQ5dE1jR2pnTlBwYzE0Z3FDS0ZnUmpEWE54cVBtRmRacWNEQm5tOWo2YzNqWE5XM1lWUFpIRmFpdUx1TU4zeGxxd1VKRERkQnNscTJ2a2ZNdDRlZkdmUk5EN1dJQkJKOWFaZjRsbTJSMGhDMXRqUDk3Mll4eWhPSCtRdU9BQzdLWjhZZHNnVWQxS08vSWNWKzB3Z29MSFpNdlJOcSt4dXpqUHlkM1ZWWWlmQU9QeVowREdCUDNIRzJtQkNxQzRLQzJDaXR5dmpWeU1zbjF5NktLR0NXV3dueTdMc2RYcFQ5T2VHdm90Qmk3Q0Q4cG1XbHlQVlM2dWdxczcrOEdPdXBvK3BDSFp4QmhjdWlwZ3YxU2RIc0tCZURpOXIxSFowa0xEa01meXBuM0d3MXNlYUwxbGVXb2p2K0dYeWcxS0VrV0NIeGMzU1R6T2pwVmF3WHpuZW5IMXlPZ1NpRGZDSEZNeU5YdnkyK0FmcmxjMXNoekJ1WjMzSFp0Qm03SXRzbENtZzlqc0syTHBpaHVmYUdoMmxqcms4OXJLT3lHWElMbzl0V3NMcXZJUTBKbzhhOWtUWDkyblZuNHZQZHppNGlrN1BKQ1pVOTd2SUdXOXdhM3JUNnNpRzZGK1NRbWVOVnpwQXZBZ0NqLy9QZU9KVVNzbHlUZEZxK29EYkQ5MVQyL2ZJNkhVNkt5cmtYQnR6Ky9ERU4zY01QUHZTeTN1M2xaaklDU3JkdFFvOFl3b1B3V3RMRHZ3RExRZ2lxM3h4UkJTR2dTbHZBSHB2bnFXSUNEWHYyQ0lPSFphZU11UWNKY0xvQnVRNU8yMUhvZmxzTGFtbnlPcXNlcDkzc3ZURElNYlFkSzdhQjhqNFdCRlFNa1VkRUt3ekdlWnEza29IcFoyajRxazdxUlB0eHhsYXZUN2xYYUF1U2p2ZnJScHp2Y3UrMkV2YmJQRmdYU1BlWHNrZU1QWWRQWUpEZ2tmKzhIMXdQSmtBSGV6NGNVaG4rZHd5b29qcVp0T1BOZ2I3YkIvNVdCSjcyVUFIMUVvU0Rqc3NjZFYxYWFqYS9FanhNRFFTWElIOFZzZ3VyZjUxbFl2MGZTUFpURGt0ek5jVjZreU4rVk5UbWFaQTZQWnFKbUViUWlWL25FemVnVnlZcUNNbGtqNHVhdmdaUnlhOXFyTjNUNjJLaHFMN24vTmZKUXVscDZ4UUlQc0o3MFlrMSsxRVZDSVVCTDM2ZEZETDZmSm5TSHQ4eHNVTjRlczQwbGpxUms0TzhBek5xOTdmd1o0dzR4c2VrYi9NcUgvSy93YlE5czF0NmJEbHdneExOeDhmY2U2b25wOFdjdTJnMXl5NDZISVF3ZU5vY0JKWEtXZW50OTROLzE3L3hjM0JqS2JuMTdSMlJWMytzYzBjSVRaQUtkTS9yNHc5N0NpMkRYWW1oeFV4K05VMG9DNk4zbjgxcDJPd29jTyt0NHk1UE1NOUFBa0R6VVNFNFBHSC9ZY3ZUN0xIaC9tR2FIWkdiYWtHTFR5K0dBN1FaUmZMbVc1OXRYdnRzcGlQS1cvK2N4ZjhxNWEvREpIMUlTL0NQQmhTeWQ5d1JvZVlzWEcwckVRejN4T3RjekRJVUkvMXcvSEFOK3g4eVFsMzlEcVg2R3N0R2tlU3VZaUtpNHRXRFdmRk9uTDZrNm9ZSldXK3prRWtuRkY0TzRzc0I4Y2ZZNmtwdXJQOU93cy9UR2UrREhUS0d0MXMyUlVKaVVFb3d0aW1wWlZLMGRISGlmS2hyL0YyQ2tvbU1TTkhQT28yQWpUdlVNTXBKK1h0ZkJ3S0xkT0x5cVNYVjRQZWNNZUE2aW9nWlR0R05tMVp2d1JJaUorTnBDdWxFcEd2eFNzNWdXVHRCR0ZNRDd2K1B5WjQrdGEvRzVQN0w0MkZvSndwRWJhV2M0eEpDQ1M5dytJREtYb1IxZ3EwRFFCTmFNRlJUdEgvSFRPWjVaOVJrWVl1em9UbFJ3bjIzeDd1V2k5WlFybGwvenczMEpzU3VHdVFqVVcyVjhjS0ttbUVlRVdvVXNJbEdrK0hpNktka2ZWNHZodURiQXJZbjBPSWlRZC9IVXdvYVl2Qm1VNFpoT0lnMHVvQ2VEcjNKWndCUHdTeEk0V09YRFZaSE1VSGs2SlF0YmlWcnRaOTZDSW9lb2MyR01JOXFxb3ZkRVpFZzRGc3l6cmdGK2JETmtzMzQ4OVlIN2R2Q1c0eHp5NUtFamROVHpKWDRTdzgza1l3TDJ0ckJwVUYzYk1oeE82Q0l5aFg2dWNtazJUQ1QxRStYRmtyaGszZ0dCUllsOE5tUlNEckhVRFh5N1lxMGRKSlpyblQ5Mm5rQkt5RHpQM2pXMWl4VURZTnN0NUNsSno0K3hHbW9HbHBKV3VjMGNQbXFNK01sZzF4SXRFOFRqZWZyZk1sRGFTWis2RzljZWlsUmxjeWJmWlBDR2VTdXRua21oQU1SRUgrWTljeUI5ZkhOVVZJSzkvT1lTRjVDQzFzUXlhbDVoOWtETVBzL3FxTlZvckVCWWk4MlJCQ0JWeDVaTGdHM3F1MDBFakxFWXFSUFZ0R05rMHBFazR3WnU2enliUStlTmZQQU10a2Y0WHZIbDVMSmZhVmh2STJCYXdRQS8yQ3o0NkFOYnhIa3RRc1pNZXNVSFRPZVkwK1RiT3czSlp0YlY0ZzdiUXlIMnRqbFlreG81WVdzVTMzOEhzQzlQbDY0YXJGcUUvK2xtL0dOOHp6ZHFYRzB0eDVYMUZKZTVYU3V2SlRRbXNuTVV4eFlPbmxnMGxpOHBHcTUwS3dScUN5cUp0VDRuTmJrUEN4dTBEU1Rud0ZFaVVEUU16OEZ5UWRESXdTNkk4NUR2V2xPOXdGNFlKNytvSXVvN1BKR3VHL1N5bFY4MEFmNVp6S3VQTXRKVnFFRE5Vd1pJZXJ2TUR5dFIwdnl2MzBGcmsyblVuOC9RcnNzeElJNDhaOVVTZWQvSUpxODd6bi9nZHMrYUhad1h1TjluMTRVS0Y5RUlzYlBNU0tkbkRWVi9UU3NNeE1jL0lwWHFYOWtOdjIrcm5Ndks4R3VZTHNqQXJHeFUyRXJMNFpNU3hiaDZLNFVUSTl5REJGTHBrOW4zVG90WmRhc1BVVFV3Zytud0xDdWIxQlh2WWtWay9BOGFBV29RSUk1NzhPa0pGSTF5OW1lWUdxbnFUZU01Nk9nOEdVQm1WZkMxaVNTamFWbUtRTFNHQi9xZmRZNFZMTU96NUVSZ0Q3Y0YrVFlaNjlma3NRaGFUczBDWnVnbnBhTU0raGNFemNLak5JZndZRlQxY0Z2SWZjM05FUFc3UGc2VTJoMi9OU1d4bVhhS2Q4OWVlQlNIL1U2RDc0MjJSMkFrQkV6akhzR2FOY2hxNDl1Y0lBSUdjS3AvQm5ubXRTZ0Exd3JIaDlnYlRvaHUyUndROFdSQ3g5ZjRTQ0htcXFBT2RBV2t4N0tDWEVqc1p0QkFJOERaRDBJSGM3ak1HZ2ZLcXZ6cnhXeVE5UjJTUnNWNUQ2R0xwLzNXRFY1NWdKa1U3cDZPVkF5ZFpJMG5NNUtQTVNKMGhob25ZbzY1MVVnNk9FcDFjWUZVRVMvSlVNWFVFMXA3NFRENy9mOUg1VnE4RDMxeUlWaUczcEtQdVJMby96K2ZseXlSdFIwZmRBbFlqRnI0QnlnTkpiRlA2WFJQYVdxZXJ1dVkwM3M0T0lhMlpDdGI4dk0yanNqUnZLR3hvTWt5UndGMmZJYjJvZW92SEFuMWUyUVI4TkxMdnBhNCtLMWVsZ2ZLTUE4S2VCcG1MelZwUkdKVlFaY1ZTci9NUWRhUTlYYzE0M1FrNGEycWtlQXZWYWxZWmoxTDN1YnRMN2RoR1M4c3IzcnVlRGU5aEI5N2ZxaDBoK3Z1LzlaRGh3R2FwT3BpcWtQSVI1dE5xanRzYVR5enRvMnRhcWVSUzZOTEtaTWFCZ0YxeERRQ00wWFJpdnZLd2lpOC9zYXFJNnNiWnJaTU1sRi9iaXlIcGUvQzQ4SUxMWlc1QkdqYzd5dk1EbkxLTDR1bEJFYmc4NzR2TG9KV0xqRVhQZWtIS1hrUXUrc3hHOHhBSU5qa2s0b290Y2JwWUtQMDNSZFVQblBVYVBsN3ZMb3pRVTJqdWFLMUdXWTN5UWFMd3l3eWJTRTRLbnFnbDVVV0JpRmJWMm9iNWkzN2FEbnpKRXdraVlCNURDQWNVQld1TVgzNkxVUGtWczFaejJ2TGlpeUhZeXNLYjUyVHFrNjdEaEdZK3dzaEJoZ1RNSStvRTVZeXhQNXl5YlgwVlpwbkpENmpQWDh4Y1R2SzduSEdlcmd0TUMwVEg5anVhRHhzNFRHU2tnQW90bTN3QVM5M2NObGpUNHlvaGtLZ21TazBrNXQ3Vm5yRHdDakNQbEE3ZzVJb0tPYVdRdEhtSk1rbldlOTBSTFI2d3d2cEJBUmh5cjl2d1Z4N3d3bWJLYThnWWZiY09Ldmp4VWRNT2NmYW5ORDBNcGw3U3luZkVJYll4SXdoM1AxeUd0WjJnYXQ3c0d3d283aXJHcWd6N1dsWGY5ajN6bXRwYmhpZHo2ZXFZYzNGRFZoVWpQY3kvREhzbitDMjFvZENJQVNGR3VOdW0zQUFOdzVKckVaMGdqcWxMeWNSNm0wVG5HOFpIdkFXR0M2OE1ZOW1rYVhKdERSTnZmaDhSWWtySy94cFZpQ0ZQeVM0czdFenBlYkJud0xmblpsdC9aUlBrZGt0QngwQUR3SmplV3g2NHo4OUpvTlVhUFZYR3ZYcjlzWXNqcWhLdm1GbmJ6V2ZjUUdOUzA2dVhNSlgzeUtSbWVVQmZwQkNBaDBVa2pZLzZNK3NOcmQ0MnFZR0lHeHlUdlRKeFJaU1RraUtsM0RacEErREVoM2trTXpXcUZSOHZoblNnR2cwUUtuUUpCQmVYLzNjbU5KOGpZWW1Sb21aUS8zaHdwaDhPdGNUU1pRSExzTmFwOWtJb2k4ZFhqOVh2alZlcjdmaVM0d1NoTVNMcmljbFJIWHdlSFhsWE9sczNubi8xbWtSWkFKS1FlQkIxN1hxbzVUa3RIZDVidUJvcUNselNoc0pMdlR0a1I5U2ZSY0UyZktEeEJBM2YrMnozNm9jdGVsQjNJcXZMVFErUk1WdWdJd2pDYTExQmpxWkFPeWNRSWkxeU1qUlU4M3F3WVo4UFF5T0syTVpzSUk2cmdhaThyZWxUZkRDT0VlekZlMVRvNkNvTUl4YmtwMnV2SEhSUlhlS3ozS2Exb0lBRVFqdVpPM29GbXJUTXdLOXpIM01TNVBjWlRKMzFPSEpldFdDSG1GWGZrbFpRcXY4Tk9qVklUaThRREN2bXZKR0lDYUhxRTE0UlRaQk1MYkxlQ0dLYzgwVEp3c2xlaC9iRW8wY3lEVjdDN1pNMFlNbXVFcEJrU1V2T3Z4SWV4NVFiMVNMZGM5WXBIM1FWc3hjUGlqdi9mdlJocnUvL2NNdm5xMlpRdEc4N09TdThoZy8xTzhoZGliV3cxSjdFM1lhR21kWGE3bVVlUmFjaWdjRGxZYVlPUWJDOGVqSCs5ZkdIdGxNWEhPeW9kbEhsblV5OHpZS295SDdYZmluWXJZUjcweFBTNFZBWUppZWhtUU5pUzhCN1NNRzhMcnpFazhTUnUrU0ZVY2ViRzJ0S3lrSXltUUE0RjRCYjh1S0VxY3FacGcwNXRUM0o0S3RtMU1sL1l6blQxOElpY1IxaTNnWEIzMjlKTEpycFZIWFljTk9GM1BKcHp0bEZFUmVwUzZPdmF5ZnlCNHFuVDREdDkzMGxmVXRPVEtZR1VGdnhmMlFqRlF2T0tpY3RPS3dhOHJlMGg5YU9nY0t1SDM2YlJqRUVGQVNYMC9GcDUyWm9MZEpmaS9PNVNGL0NRTkZ4QUwvOUtTTmRVeWpYaGxhNjMrMVlUZGIxNGxOZkVIUnQvS1pQUlV5WGlFM2NxWC9VcWtna2dSOEJnclNvQldESE5rYlZKZjluTEVPVlJQNjBrSDlMYkNIY3ZXNjB5RUVoNUY3L0tJeGRQaFY5K1dhY2RvR0l3ODVTYUhrWnMyc3hLQjhSYkk1L1RPZng3RzMwN29YbDAvVDhicEhiazRwblExeWNjWDlWMEtkSGFwbGZZMmlqZHd4RWNCZWRPaTdmVytPbVRyNmtaQmRRVk54azNBL2NKU1NFMmVqb1p3eGZ0NjNmQXd5UWNRQkd3WjJMY1VRbDJ4K3B6a2p6OGxmSTJ6VFc1SHZWVzdwVDQrYmxjUTVTY2NoZStqOTNoZzlFRThURmxxOGhxSW1FRmcyWlF1MVFOT3lCSW10WFpodFIyWDVkditaUTdvd01jV3pFVVFBekxBVVIveFlkZjg1SE9abDdaUGR6a2VSSXVkcHptVlp5Z0hWZnZvV3UzVHpOQVI5czVQNWtGMHhKMmdtNXJvcDNYOEtQTlNtK3NCNll2dER1QXFHcGtqQTQ0aVdZSXRsNW50b1dYcHpWRkh4THlkNmxPVGVKV2tpMlpybDZOOHUzcUsrY3pGajFRSG12Q0V5cFZsdnlmZmZkNFIrU3l5eklnMnhZUFNKaFlVWVVhTGN0cXAwUDgyWFk0enBSRzZma210b2VBZnZPa3p5US9jWVJIVlZPUmhPem94SUtrd3Ayckg2cE8zaDlzai8xUVJtTld3Q1JRWmZxeXY3NTIwQlVKMGJtd01YZG1CcFJraThMWEVqRm90UFg0RnFicHZkWEVLakp6aDZsMW5sKzIvUGZ5MDhkVEh3OFI4OEs0NG9rVlBLRFl0NU5GUnptVVExOTNiaFU3dUlIQXBVN1BoODIwR05OU1llVXVlR1pkYTltNDY2dFltK1FKOTJQWkhjbFh0WnZiYTlKM2VjVDdqUXFJZ3VDWFh3K3pSbFVhbzNidnZFMUVqV3NuRktYQ0VBdi9GeGx6bzVFNU5kdXlmaDIzWWZSK2NhaTJiSGtBd1ZPNGRBZmtiR3pjYXExa01xYzNXYm1hSU9NV21VUm15Z054OE1nTXVQYk9uckgveXplWHpSZFBYZUhXL3ZTYzF6SFNiWEZ4R2xoeHlhSVB0emVEVSt3WG5NeWc4RitDSzNwUG5FVU8xaVdkemlsUTYzZk96RzhrYmtFNHBlaTc0blM3WEZhVTVoL1VQRHpJeXRzMWlscDZWVDJtQi9zeFVqa3MzS1N6SEpNaUVsY0ZjVFZwdEJoYXpwUDM0c0M5NEFZSzdnQW5aeHVjT0FuZkNsR0RKdTIvdXI3bUZDR3ZTMUkvaHBxc0NDRDRUNVMzcXYxSVdsRllTNWE1cDJCU25KM3k5anpLcTUyODNtekFncUlxZkJMZ3FaTy9rWUVubk0rTnVXUU1xZzQxMDVFb2JSaGo4T0VCRUJHd3B2L0pzNkloc0REUEFld3RJZ0RVK24vS0ZHL3VreC9XWlZWaTQ2RDZ4Rm9pZHZhdGVyYzBXOW9lY1lXOTk3aDg2Wk5DSDBsY3NHRUl6YnBVbkdDdHl1ekZhR2JHS3NhYXJKRVB5M0RGOEF6UldxNllTdWRFbHdZVDBtZml0MGd4Y0h2OFhJWGJuWlN5R1lYZmROejNkTExiNHZBZU9IY1VoQkw5MUx6MWNCUU1ML0JYWENKY1pYb1hyS2h6N3Q2bUR6ODlaVkxubXJqbWNuL0ZPTjZiVURrSmFHVDZJbGRWcmVsUktvNmtRaUVqZ20zY1RpWFk4dEJNS01rSWhNMERxOUNyQllkNjZtZXZ1SjFjRUl5Qk05L2VXK0g3N2xaL243ZEZuUzNMWFFZd0pkUUZBZFRWSEdFNkNRNlFpOWFHWWRaSVJFVHV2OVVYZ29JUEM0VFVCQ0dPVzBUR1JhdUErZ28rOHVWVFpLMzM1Y1FGYXY2N0ZIaEVRUEZsWG5pMlFtUFl1VHJrT2NVcmRCWTEwa1BPekRkNjFidThEbWdZWUhpVVBEaTNQSTZnQ2NIYXUxdk55UW5aR3BWdEQ5VG1JUXZQelpxWkxLaVI5TGcrY1pqclV2Y2xTbmcxdEdrcjJleHliQlBXb1lVdVpDVnJJT2FtaWZReGRLVDlNKyttL0FLMXQ2VE9OYzFEdTBReUdMUysvdzJZUU9rNExrUUIxTHovMWhkbWhvYXd0UXYwLzdVZ1pvbFZvVjVkaXFqUzBVY25iQitmUUpXd2t0NC9DckFldmZiNERHMmU1SEt6VlFrQVU1cE9pd0o2TWV6b1k4cHJlb29zbGZrUS9zY2pjN3ZBUWJuM1JkMjM1NnZEQVl4UnRpWEp6aSswZ01CWW1QSk5SbWlzK0pUYUltdFpBMWpPZk1sVmd3VXRmNllYUUdKZ0ZPVktXSWhnUTN3cWxMeDR4TnBlU0tpSTd0S1dhQm1CYVhjRkxrM3YwbVA0WEdudUhCK3M0NUYxTnAxYWtueG9wTGEvVzgwT2lNbS9OZ3ZkdFJCK1JINS9odHBJTjJnQS9pajI3NVNzSG5DOHZZN2k1dHJueDR1Qm9qMndSdFVQVERTK0xQNzJPZ3VyUDN1aEtmbHVZYnI4N25VUTA5TnFyNjQ0UVV5ZlpieU54cUlYc21OTy9WeUs3ajgvZUpLWjVMTVhzdDN4OFhyT250dkRPbE5ZTUc4YldhWlowYzkzbEFnMG9PMCt6VkZHRmNQcEVLVUZnMjZ5VkhvZ0tWRDdZZnVxTEJPeVozc1doYXlxeVdIank5WlorL2tVbC9HN1Q1S1YvWFJ2Tkw0ZzBvNWJkdGVseE9saHZIemhxL284aFVzbWhMTVcweUlZbnVHaWduYmI4TGYveUd4M29VV2hjbStod2JydXVsazRPc1JKNytQZ041TytGeWJJMXhnRnZRUU12UXVET0xRWUh5Ui9XT21RN205cmQ2MmpKQWJFdkJTelErYnJmZW03Rnhvamh2aWs3SzlvM0tKcmloWjhhTXNkeEpuTWcyTDFhSmszNEpTN3F0ajBaUE5sT01NMUtiTHhQVEJvM2MweUdTRFF5UytMWk55cWpRNTY3d3VMSmxUakhvUTMzTkhqSlVUV0pVdk5STDc5ekNSdUNnNnJTcXpUZGZPRmVOZ0V3ODMvQjJaaFR5aDFUajNjNFVESEtrZkQrTE16ODdLSTd2UmlJSnNRWmFxcmFCY2RZZm1uUkhNdERSSzlIaVFHOEsvUUlPRExObWt4aVYrcXQwbjhYMWpQQU5UWUNQUDhGRmJQbmRsbzlLVXhsQWIrWkhFYVNkbHF3cFdxczA4K0gyZFI5Y3FDMzVkakZWUFhibmhGdUx3Q3NJckpUcndiK1hTSnNzdXNwUk9LUXBhckk0Y1dtU0JRalpwalltb1lYamdWYWV0QUNFd2lTMDVTOGUzSVhQa05DUWlacG5tdzF0a0hKS3RWSkg4NWVUbW1mdkxJL0V5V2RScm9ZeWZ4cE55Rm1BT2t0RTJnWUpBNzBGSVN6QytqMEZZSTBxTFg5RGRjbTBERy8zZVZnUmFBVnp4RkFmMkhYRk5pZEwvSzRieVltR3BHOEZUY3gzWGRrdHhoSU9pakVHOHdLKzZ0TVBjbVJqK0FEZkpxZFpJYkdkQmRIZ0JTMlpMd1lIbGQ3OFJpc1JYTkNpZ0FYemFtanFuRmt1NWgzb3VQN3JadkwxTlJYcmNBejdkVnYzcWd1YUxxSUpEVjNrR3RQMy9lcXFhWE14L1p4blNubGdpeUxTcjlvWHVUblZZK2ppQmhhSGoxSXVLTHg3bVFrOVphdStKNm8wb1pUSFViS1ZBNHFtQzJhWHlPVDlUUG5LZ3kzQXgvbUoxQTRDcGxIWS80c01pdThMcW1vKzdXTUtyYU4yWUdlYmFCNzgwMWNaWjd6aUsrcmtHSzlTU0w0Yzd3bGVmNnJVMGpodkw3aXRkUDMrUUltbVB1NG83OXNZclNQWG5YN0s5TWtGTXp5V3Jpb2ZXVDBNVmhKMHlDemlZbUhrcG90N291NCtFUmdZWFdSaGUyWmxySjhWdWJlNDExZmJGR2hVTE9hR0xMTjdXOGlvanJCblpXU0RGMmhSWnNGcHliMWUrMklUMS96NXlZUjJtYW5OdFp1MEEyUlJiWmthTkxMd3JGR0ZaZk1iSC95WGlSUk5WbytGdGhPT3BRMlJmaExxV3lCMVc5R0pQcU1BMzJXZnJsY1Z2eWdKeFBuSTJxUDR4ZFJWajBXV3IwR2hxZUlweHJ6ZWNnTzhxU3FLSjBNd3c3c2Z3a3NGSGV5MEMzdlpqQldFTUpsbnozeXV1bmZoS1FMVDJZV3paTVZWQk51TmVFa0JjZDUvQllxcHcyZTFZNjNaU2NVK1E4WXpndWw3ZVREVGxyQlBaeHVxemIwRUYxNG1pR2dEbGovUzlGZktVM1NiODRNUTNmNm40TGUzN0tEK0VmZXR6c0oyR0hCMlNId21CRUxQSlM0Nzd2Y1A0U3BCVFMvS1c3RHRHRTlYZk5TWEhlMUJ3c2NIWTM0ZTJ1UzlZRHFUVVVaMEJvdGdmUFhLelMvcmM5bWhDWFNBUmhOZ0ZJV3F3T1FrUUtYc3NqNGFtclFFN3lTK2xsRWdXV3hoZ2lNQk9KU0NDeXhzSXUwSGpJc2pVc2dXbFJBQlRTSitXemw1WWlMek9aVDArdzFqL1lNSmgwd2l5eHYxbmtrU3I2RDVtNEhSYXhrV2ZRS2E0TEl1Z3hEU1NIdWM0aTE4djlSTitJamgwaVNsWW5FRjNzOVloVkdnVnNvVEQ0NFNlNVJwNTFwUGFqM1J5b1dFVnZlVGxkS0RXQklRTEFNRDQyUE9TZmFvbHhjWGpuanl6R3ovQ2ZLc3hVWTUyY1J3bnlUa25PbTlPbStpTXBnU3Yra2JkYTlTTUJoWnVKaFMyU1lKODd3SEpUVDNVZDFnRFo3L1pROERMQ3ljalRzSWtqbWo0eWU4ZlZ0cVdER2VOZjNLYXhibjV2YkhXTm5tVWY2ZzBaczJRcm43RDNwSHp1bklnOHcxS1VYV0Fxd0pIYWpXTW84aVJmVVNoNE9ReUJGY2JWZlpsY3NHbnBpZk51R0FtY1Fvc202NVhNS0x5SS8xaS9JY3ZDZWd1eGRMZVlHR0kvUWtzWTZnRGdackRSMnBuNkFNbTQrdHNDdkV1WEQrMTZXMnh0azBHVUplV0w5ZTZvck5QY2pWRXdyUHRhTFZNWlA1Snl6VzJzeTVoZXdUa2tFRkVjaWNPa09kb0xRZFNCZjBYYU5rZlJscmtwWWIyYWhWbEVBTS9sQVlyQnlGRENTR3N4WitRUnRzWE40SE4yTld0M1A3REd6UG96MGExOHozdmtsNkE2NDV2eW9EcVBPSlBnMEgvZk95UUtmUW83WnBIOThFb2xpL1ZjWmpxTEUvaVhCOExpOGY1OVZkdTJqdkJERFduRy9IR0piWitSNVBUMWJDUzQ1UmF5azYwU2tLcHZhTWVWbmhOWUdvY0JTREFvcldjR1hpdnZpaGtVQXUybGs0QU9OWTIrUG0rRms0SFU4SUYrUDVwOHBtcFFUcG8yeUFjU1lON0U2ck1ZL1I0ZmkwL0MrdUZDaVp6UTVJS2ZlZkl6TFNIc2krN0pEcmk3OU42VWJFQTI0M20veEErTkRpT2N2Qk80UmpWRG1vaTd1bEJrYXNaMFBJOWk5a0VBRjdWdm0wY2FuNFQxcWFCVlk2S0FSK2xHWXFJWmgwTjllU3V3UVduV2ZNZmJacGE5YmY2cEtFcWVqZ0tDRlRHTzVUQ29kdFZLVG5DODJNSzNUemNDZXJ2TjBvRERaTTJYK1QraE02UUhEV2ZxdDQ2RlYzSHMxcE43M2F4QVNqU0hjUGF4a3dvNE9tbktHdUw5L2JEd1NDVy9VUUloTWdWcTRHOVNMUWZxZnc3L2pFK1NSNXJVWWtOMjRCYWsraHJrdFVjdUJESGRJT3d3ZGd2UUlXdVNDZnNtZGloT0p0T0ZYaXJsdXV2QzNMV2NSc291SmlTNjZ2RzQ3dlQxdXc2Y0Jja1QwRmJqZnRXSDF0NkZ5eEtBZjBFRDVFbHBiRHVzdU43OVFQM0NZeTVkQlRDNFFYNys2cVJnRTFnZi9kcnh0MU55L2JtTGFrclEyVUZtYjJTcDQ4TnZodjJtelppdmxHTEtuOURXOFZqWmljMXJKaGxlbGt0SHFnTmpqYTQrYzZLUVp3Nm1YL3EzRDN1UWJaR0NXQ1dLSHF5M3JYZUJMR0wvMk1Ca3E1U2lhVUhYN0FVWWtrcC9wMVJ5Q2ZYV25xVzNEWkI4ejNqQVFMSTJ4L1B3eXNvUU5nYVF1UWtuUGw4cnhrQzVjVVVwSmV3Vm5Dd2V1R1BkOUtETHZCNUozemVRUFhaVytjYURHWkVqNUcxdjR6UVJpK2hZMnhaNzZkT0pleWJCZHU4L0JQdS8wT3lHTWNVK2ovT1FLRnduQjBZM1h4RkcwNDMxNzdKazJDOTFVbEcrZnhHL3ptYmd6WDZDUEhzeGFWL1pmNm9ESHp2OCsvYkE4eENuL3I1SlI4SXMyanNOUkJ4ZzdrRlYyM2JlWEtVNHl2MjFHN0tpQkJWN3A1cmgrY2ZzV1NsaGNEUkJMdXJNYkx4WUNKTTlQOGN2ZzJwQlJpZXhSRllmeWthVzhwV2VsVEFIVkZ4VUZubWtJZ0xMV2ZDRTg1OGVhcmZXNUswaGZxY1EvZmxOSzB4Y21XdXNwMnN5NDducXNvbDhZMHBoU1hwMkhSWHZVSGNlY25veFhiYlY0ZkNaQWFpdUE0a2h2NzB4MGlpRXQvZVJHZUR0K0srZ2FZMHoydU1RaUJPbko5Q0N3bW9TeEtXQmlHQndJU2V3MVpXWmpDdjJCdDFVc1ZudmFRaDU0bzQ0bEpRZFJRZmhVSEdUY0ZTTE5IeENFUitiaE9vUk1jNTE2b2NYRkxzL0NsSUZyeXhkd0tYbWtYTC9Cd2tzTyt0czBaQzE3M0JSVThBcldxSnJ5ZVIvM0VEUTkyVGdrWUpjQi80dUw0ZFlCMGJDZkxRYkcvUWRXaC81cVZWTGZiUGdPSkNIN3hHbzNjSGpNeE5WOWh0M3I5cWd4ZzNDb096WDYycGE4T1lTZDJaMTZ3QWNiYkRoNnBBOXZaMmx6VXBOVitDSW01TVNkbGgwZ2ZNWnpxd1FwMkh3YVd3SWJaOVJjKzFLekZTSnAvS3RGNE12d3lmdGVMU1J4R29nbmJhelhUMWVXc0tmdXNWT2ZOY1lNUTlEaEhIZmhUT1VSVmZFVHE2WDhQZjhFUlExa21JMVRLbDZZWE5ueElLQ3p1aTVZUXFJd2sxV09LcWlZZnBVNlNwQVZTa2s1RFBMMkNSUS9EaW02RDJkamJMNWlTRXlhTDRyVXVDeFVIckJQWEpPNm55VkpjS0dFa2h4MTlxdnk1QmdhZ0hXam9tT3RlbEtPaXcyeFZnM284VWxueEIzOVNrNGw3YVhtbENuTzhHeFJSZ09DRk5iUTlZWDFUOHFpc0ZVUXNQRUttalJ5N0diN0o5RnZzRnBtNHU4MlpDN0o0RE16S3czR1BTS3lTcFluSURMNFVwUEhFWkdVazl6N3Q0M2xFY1NzeCtFalVSeFNjSS92c1paeGJvb3JjR1d2NGRsZ1UvQ2Y4R21rRUtHZDRLUmZEOWFndTZUQ2s3YjljcUdlbVdoVjNtWUVqL0NrWFFtRzY2MXNlcjlUTThRaitjODZIVE4rT3MyeWxORFVrUWRrZEhCeUdNOUYwS0lZZldPSGNmeXRmdUpUSWVqV2VEQnBCcWU1OVZMUFVmRy84TjhYVDhCTEJ1NldZYjZPclp3bWdnSkd0Q2I1Wmh5QW9oMDZRQW11dzd5SVkzVFNRYjlUQyt5WnZFNmFMOVJIdlhlTGhXaVhzZmF6VlhHS3pKQStMV1VndGV3MkV0ZTk5d3dpWUc5UTQ5cWhnNkc1VWhyVkxNTk84aThqYTAzOUxzNlhEWDFPNU5ISEFUOWFVNStXaW9VT0k0aFRJSWMyS2FCS3ZCZXpyUm1yaXdPY1V4RjFxWE9aNVVoWmRuNzUxUWUybHNCWHBjYzd5SWplQ2JkOFhlUnE3cHhOTUx4VFVWYzZoajFuc1hGa0UvV3NWYjVJNmFNZDc5ZC9LWVZWQVdGZXNWRStPVHo5dkQ2QVp6QWY5TnFXS2l3WUorSGlqQUlZYlhmL1c4UXFFeUdhNkVKM1NiL1V3ckVFdDVUeXBMbkdaM3BZdXYvbldyY3RGMldveFh2V2J0NTU1aU5yTTZoakYvK3d2TDZFYW92ZzRHMHErWHB4a3k0dFJ1NnN2aTZvaExYZ3FYWDYvVzV1NHBNdWtPaFM3VDRvd1lVM3VTNytaYTUrdC9GaSs4WFpiVXdDOFdGakpkQW1BVXpGRlFvdGRnWWFsWlg2NXpRcnB6aWpETDlnSXlmcUZzK3U5azNyaVA0Rk5QZE5wZ3NRMEhmQTBieXQzaytoRmRRV0JnK3dUemNmOUUxdTFZRTNkNWtHTmpwVU9oVXQxa1IzQ21sTWZEUHBUejdsVnp6MVFRUzNrY2YzZ1czQndHTzhEdnJrZFU0OEQwYVJyS0RaNVdscG9ZU2tkZk84L2xpK2lYOVlieEQ5VHJENUdKK2hZdWJvUlV6YkdEMkV5NS9tblZnZlVhREs3dG5uVVMwcGhBa3Z5bmc5c1FkdEpkMERub3h0UHJEUVBWdkhGY1VyMTRMajhOYmh6YXlZbXFTejl1aWl3NnVOc2pBTUFNVURCTFNFYWlldllYTmY5TG9hQzY5ZW1uNk52ei9STm12WnFGOXVyZEhKcTI5bDl4Z2JhWGJxdkYyQnZtY1V0VHphako3cmt4UEdLQlpBVTdPcnpLdlloSFZwWVJRN1BaWlQ1OWxRSHVUdzhwSGk3aExodnBFVFMrRWlHZmRheWREcEZIYWxrUzIrdENCOXFGcFFnRXZMM2QzeWZNZGNJYzYzMHNGNjV1YmREMzF3UUZVS21EeG40K2FFVHoyRDcyaTFWWStBUERCdjlvbXhIQVBoMWUzbk1vcXN2STRWM21yT0Z1a3ZzUVprbGdkcjRNOENocnhMdlpIVDJFa25ib0hEY0xzRjNIVTV5MUcwbXdCZE84SkIyZU5DK0YxUloyNHpjQjl6UU43YTg1NnRUa2RiWnI3cEsxNEE2bWtEUkdqdE9UQlZMdlRVa3Z2NDVGcGtMS1pWMWJhSlM3VTUzL0ZOaXU5ZzZRdDNFeGY2ZjZRQitUU2gveExXSERuRjAzN2FwZU5KK3l2cldmTXVlMCtNSjF2dnB5a2I2QXlTSmM2d25jOTVGR2syaFZlM29jTTU1T250bzJwdDl5RzRDU091Ym85bzF6akdZUFE4MnF6bVNwY1NXMitVcTJxeFhYREpaeFJoSyt4dUxtS2ZNU2Vyd3owbkF0Yk9KQTdVZWl1UENTVTBZakdRTzFJWHJwd044RXRkRjdpWFNVdHdEcUgrQTFTdXRmSGdoaVVFTVJqclkyNFlxTWFPZzRXTm1sU2pQN25NYTRVU2lsdmpYQUVXOEJwbTRPMkY4Z1VIU1haaTh0VHJveHgzYW44SFBoYmhhTmdUZHc4RFBBbVZPMWxyOFJDSWd2QjFIelZrbnhQOXU5WnZnRVBhdkkya2tVL2R5YTFzUWZnWm52M3BPVXV3dmJTNTZkVFA4Qi9xOWNsbmZHdjZhL0pWOXQ2TTVPQ3dBRE95YmtzdGNYaGk5TEp6Mmd5UWQ2TWx1NHhOSlpGOXVMRnVFbmtibnNyYnFjU2kza25seHBMck9tR3lidVlmNzVvT3ZRY21aaTlVbHdPUnJxWFVUQmsyNDdvZmhZK1R5OWd0S3hiK3NZWlQvNmVoak10Q3A3aHI5SlMwTmlGNUZHNm9pQkF0ajhxVXkwSnhERFZrSGwyUlFoeE5OMGQyTTV0SmNsM1BpN1JXcEFZUXErQ29XSGY4WlJuSTB4SVRIemxnOEc3VUtGb1Y5SzV6VFBPSmppN0crQ1ZoZ0luNVhpY29Qakk2NForenhLUjlmajVQUnEwd1NBVWVXN0ltcVpDcXRvY21adzljQWV3cTJXVVBGTVVSTnBHWFB2ak5BNXU0Ui9oa0QrcjRzalpHKzIxdkw1em5sOS90V3VvUFdDOEFjcjFOZXR2ZC9rL3FSV2kzWHp0dElud290VC9Wand1cVV6MkVRSXFzWFFGbXp3bVRnOTgzTS9VbXlEYXRxMXgyVFhwZ1FYN2tqOUxxZEtDemUvVEpIczl3YW9SS01wMERnbmtJN2F0Skw2cm5MckFRcjVsazlYYnV2UnMrTXI0aUQvZ01GVG9yREVHQlR5Tm85TDlhTW5hdTMrNGtLQVM4aEpOUm1WeVhGWS9qL3dXOWp5a1RmdmNKblFqVXhOU0tLUjFFNWR3citFdjBQaVY0SkYxd2xUVFpWdGlTQS9SWnlBKzFFQlVjQkM2dU5jMzhiWXFMemJEeUE3V3k1Sk91Q3BWREpEcjZYblowa2Fmd01oMytpNmpmcVJ2bWJJcm9SMUVaTmtEYm4wdUNvM1dXMy9EMnVjZ2UvWjUvNGJNSE01TDBCMUNFdnBZRXl6bmhQQnhjdjk2M2lUcVZ0M1VKR1FOc3hJYTFESkpyNUtuN0ltRGZlZ3FSTVJ5bk9yNjFGYjhNYUdBeVg0bWhWOFhEM2JkbmF6cDFJY3BqQUpwS3VCR0FHNkdvUXcyWGs4MFVzS2dRM0hxS00yWmZnakxmaDhjQm01Smtzd2thSzVEWlU1cmtVQkJiR3RhM1BqZ1V6cHlkK016eTB0a0Nwd0VvNkxRN09URFlJWkhmeDRyQmFFWS9BMjBMRzNrenYyZndwV0ZML2VrL1A2ejU5Y29UemRLbTdpS2dFOEhkaUc5VXZ3RDFucnNNZ2pXUkhoNzRDWGNpeExXbk1EckJMRlV5MHZrY21WanIzVFBkUm9HekYvZE4wcDR3dnNZWktCWC9hQkhxSTlyOUVwVldYS1NKWEpJclR0V05sRFdCZTlPbXFnbmtwY1YrSGZuWmVGUlpSMEtzOXZsQ3JSNVNOOHkwNDllQzlyTklvT1hSS0JQSUcyQlliMk90ZldvNFJ2OFp1NXU4YXVvbmVZb1BucEpQYlJjLzh6c3NYUnZteTRDSUNVSTREeGtoVkdWelRIZ3FNaWxud0lWbzlDZm5aZGgrbHFPd3JhNTM2bUdScEJuS055Uko1RTFjQUhxdzA4Qkx6Q24xUmNJSUt0S3VzV3VRR1pudS9GK2JtWW9BZlhCZldQaU5wWk1rNDlwblozeTNieDJYYXIrSXpoT1d3b0pCb2xyTWZyNVVlZU1GSDc3ZmxnTzQzL1VTdHZRVEQyQWxBOUUrVDJsRU1pQ3p1MzRmTFd4ZmI0TWZ5eVh5ZlVIUUhCZ3ZZLzV2aklCb2RWYmFweDlCM2ZXN3JRek42ei9ONUxwQWZ4NTB1UTN6aWd4ZG4rS0YvaFh5NkRQbXBJZGRvSW1TUTlBRnFKcU1jVHA3Mi94amlpNVdKY0VUZnNUNFlDeXpoUDU4U01OcUFHSFpHaE1EYnIrc0VpT2pYTTJqKzc3ZCtYNUlJMG5xUUFwUkdQWG5sQjFvWG13RGVhYk9TZytZbnBwM3djenBGQjZqaUFiNEZucDk4d0cydlJiNDIrTmVPbEN6aXJFTHlrT1FTUEVramh1a0ZHVW05aEY5K2lPUUpUTE1IUmVWakpodW5EUGdtZTRBUStQN3l3Qy9TVXZHRHlOd2pwWXRoL3Z6Vyt1K1UvVUFNZkliMGF3M0FYOXA1NzJ1aHRIVUR0T215OUlYbGlYcDdTK1J5cC8xNHpkcHdEM21vWUU3c0xFZWFaVGJhRTBsMFRYYmJkQ0JYNnVDRnJGU2E3eVpSSTd6dEdNbHZGby95MU9xaHMydGQ5eXdvdmU1a1pPV0VHdG1JRUIzRDBjcHBJL0wwMHgzS043MUJGcHIwQ2QyVXI0bmdLendoKzE3Sm80b09DYk14d3pacjhVR3FyL2U3V1V1UW9rajJIVXVRUHhEZlRZaks0WkVpRVhsa1MwVjlTbHhhejEzRWpVOC9yZld6dGZ6YmlhTUhxRmRITGF4VDFYYVM2NFZqNTUxMEdRbVg2UHhzcTN5WlVGaU5pSzNLczBROThjakJuaFc2dzhCNXkza0NaN2p4MEJZUVFOUE1jejQ5NVYwMi9oMmxvTS9FdW9JQ0NZd1V6VWpQd1VVRE1EcFJvb0Y3K3I2VlVieVcvNk5JYkgyWEJlTXNRNHI5aEM0R1V3UkdOSUdORTVPbGJzWS9rTko4Z3U3MG1BRWswT3MwQ3lmSm1Kb2p6S3lndVUzL1VTOFJNMDlvQWxFRE5aSm9aNXc5ajRaVDloVXNKV2p1QU5NOXhQZWxSWFB5TkZtRXZZVnoyak9PaVFPVXlMdjdLMkF3UUhRdVRPSkVQNUE0MS9sREJEQ0ZscklzTnBGL3F6N25rNVEvd1g1YW5nOFlhbzZwdkdOY1NpODFvNzYyUVpMbk0rSk9RbVZNbmxPMzZYUkZZZmhseU5sZVk2NXQraGNRa1h2cktiSkw5M011bzJFb09JeDczQWpJVHdmdFV2WlY3VUFleVQxeW9rdGZ4L1lpWnM2OWJ5L1RHeWNYWTBuZFFjeUxrNzZ5K0dXLytBZS9maTZ5OXpqVGFtMXdpZ29maWdyOUlzRlZjK1ZmZHMyUkJxcCt3VXZjeWdmanVldUJJeWZEbHFhUUt0dTBMbzZ6cmNXeGhlK1JieEwzSjZrV0E5TmQzTktBcUViQ2gyOU4xTm5GcUZKU2Z1eXd0dVRUN3cwUDZRT2RQNHNVSWlIRjdLR0dQT2JvOG9xSG9zNlFBV3N4YWNrVzJYQUJ3bXhJUytseDlVSnNoc1RNL3lTT2lhZURoUllQUi9oNWx2RU5vZ0pFTUxTWk1yOXVpckg1b2VKNTcvdWdsbWhQZUZ4Z01paTJOMi9tWTcyaGltWjRyV2xoTVlYTEYwWlhWVWZFaUVubW1XZXhKcFQ1eTd0NXY4dHowVnd3UmVMNzlScUduOU8zUDlEb3dyZU5XRFpYZXZJSzQzbTh0aXJ5dElaSlkxRzZtZCsvQnRPcGJrNmlQbElFUTM2cTNqaHZyekMrcGNCWDNqdDBTZVFvNjNjazkwWVJzakZrNmMwN1lLOFRHY1gwVVNna0xXQzNzTW8xUGN1NFBJTjhmWFVZRENQOVYveVZJOU1EZ0JYQ0h3MkdLUFdVMFA4djJBUWltQUxUYnJ2V0tjbStnRHRObGlPSjMxZEVwMTZNSjNNOXE5Tksyd1JCUmdkZjlBTEs5RHR1R1RQSTdIcHZqYTVFQVUzT280ZytSNlJmSzV4N1Y5WlY2Z1daSWFFWldyZFJKM2NkaTROR092Q011ak9hVkVtUCtvVjlqSFM2c3ZtZEl6OFplcEhidENldlZ4N3RDbWNUcmtyeitDb3UzUTZjWXdHSEJuZUpESjd5RXk5K0g5cWduSlo2ckNzbERjNmhKYkp2N2QwQ1BzVWMxdzYyUjg0OG1BR3dDU1paMUdEbEpJcnNST2FUZkZCVHpVVUJmYTNZdGh0UTdkNWhCKzMwU2NySzdYVlVOSTJaRUpBRk0xZFFHNWF0bCtvZ0t5N3ZRMWJlRjN1cmI1MTRqd1BlMmFhaTBteEVQNHQwL0N1WVpvaEQxTzcwZVZWRFBNNjhDT1pzaUhyT08zajR6M1krSm45UFVaWlNFRmkwV2ZSQmpCaVZaT3lybXpGVzU1WWpXNlJ3RktLMVZEVG91M1REUXc4MEhFSzRTZWJEaFh2UWNBMlorMjZHRWQzWU8wQldpMXR1RFhSQ2hjL1oxWnN3RGRrckVlNkNicDVqS24vWkdNQTdGUGRTUmJCSDcyd0xhQXJYQm9OYjBWZG9HblBWaTB4NUNXTXJnYVl1OVpvdmtUdFU5cDZMR2N0YjJIQzlrWndoeHJYRnpLN0VTK1BXYXdQNUxuOXMrQVQvYWNrdG9lOEVqaFRBMExiakJKVlBnSnIyZWZIUERzZFNidGtVQVFNVkxQZFlidHpsQXVPcEJzZks1YjBjNUtYWlgyZy9kaFkvaHUwRUNvUjZlSnVveXJ4c1NKKzlZNUYybEpDVUpaUGlubnU5K2lyUTV4c1BpUGFzeDRIaEhlMWdlZ3VjUm1QMHVXb1F0VkhOZHdqaXV1VVJFOS9WS3ZKazE3QXVlRFY0TGNrZm56VUNDMWdtU1dJZ25WWWh6L0FkMllPNFFCYVN3S3JNb2xlODI3ODV2NUpsaHJLQU10azJ6OCttWEtzZG9BMG0zVVBwMmEvVTA1eTRjbThRUFpQenFTK2lZM0N2UEdqWVRHc1U2NlZncnNMa3JqckEwVDNCMGdFNFRTUnR1aE9wOVB2b0lUWGp2L1lMK0pOZ0c1N1hEYThXNThsb3NiTTA0M0NvZ0RBcE5tNjRML3cxRWRDMi9GMHFPZVhtblpuQlBrQ1NWY3BhUVpPZExFMkU1cXp6R2xZYWZWZmJDMlhLUGg2cURUOHJ3R2JQY1NUWlpKaERWWTdZUTFZOWdtOXJ3N0ZPNDJVbHhrYVU0bGpQR3ZaamNrUmh3dVRLbndoYWZDbXNBYyt3Rm1YVldqVWpIYmd1Qi9vdVBKaVhwWEFJOTJHelNtb21VbFFpU1JhOGpoWGV4Tzk4MUM5bVVib0ZhSFJNK2gyallnZ20rMmZEVHRkczA1d1NoM3lmRHUrc0tXSFRhSk1QaXBLYi9UeHhyR1ZjMTY0WmpUUW1MSVFrMVFZa1VnSTBuVnVGZXp0aCtrQTZOdlZyRjFGZmJjVmFxZGVIWTdNZ2F2clpWYmU5clhaS1g5K0g2SHJidmVjWW03VGhDWk9RWUxpU0JZb3ZQMXNuZmhKbTBzSWYvZC9kRFdVYjV0ZWVXdnFvTHRPaDF1ZDF2WDhwQ2cwM3YxWEcxRTdlWUpJdStITXRyQjZGcDBGZEpvazV3SUN4TzVIa3dRNEFML2t2RTVBOGlkcUdRRThTVWtLRVBnNDAzNjdXNE0xWjQ4RnoxZkc0aHA4RE5Yd2lzc1k1d2ZSaWdMNmdLZ0hPYmhEQjBDTTNKeEliaXZQUVQxTTU2Yk5ZeURTYUJNRk1kUUVXa3ozUVloaUtCdWVuakYvYmpramM3ZzF4L0pNSmlsUE1xVjEyczZldEltajlNeXo0cXlWRnJsUUMvYzNKYW1WdzVKcHBRZkk2SVlmanRmVWlON1B3N1lIVFppUkgvVSttenJBSHFzdWRqOUd0L1RCaExzM2dPWm53UXI5UDZEaUlrM1p6WDFMR3RHQWpGSUh1eVUxdEJyTGdDYWZBcHEraXNTQ1FqWDhyaC8zNGRvdFR1ZjZsTTVMQ2NwT0pwTFhMb1JBSS8rZG9BMXF6bDh5d1B4NGVXOWwvejV6TVM2b2tyeU92d3A4ZEIxM01WNlRIMmxLWFpQM0ZxU1VXTVdnN2dPR1cxejlyN3ZyOTdIOHA4bjl6SGtRdnE5YnVTZHp0ZEJTcEpMcFlobThLdytMRkgyK3FhQmJOSXZnMjh1MVlKcU9peFRyd1o4cm1IOGdPcm1xM1plSXZnUXVPeVpWNnAyc1pXWlM0MVh3d2ZGMHdwQmZrOEhaL3dEWmUrVnFObmZuMGNXNy9pSERGQTRVL3M2bE5mcm5CbGR6TzhsdXp1TWsyZ0lWQVRGTkQzZ3lrWG1oZmZwS0hiRWFNQnNxbGhhR2M5b1l0c0U2UlpmeWMxQmpCMFFYazNwTEpXZ3FpNjcvOVUvMlpVT0NkNUxzeXRTVm9ZZWNZbVhRaHRSQ2dib2txZEU4dE5BdmtFU3FWM2tHV0lSNFlBdVNPZUQ4UUQ5RlNZa2J2clppTDZubGVyR1UwZDlZZWdMNFdLemZLQTg5clEwQWR5c2FzUTh2ZU1SMEZRMDRrUGNodVNjdlJ1Z0hOSStxTFVxMU5tdHN1WnpoVlFHUDB5V0lWTWsxZ1hzYktjZjl5c0RzVEltdGZWaCtmdXFUNTh2eE5BSHJRdkVrNFpMc3M3Y1lWWjJmOCt3NENEZTNHYkhkNnMwTXJxSHh4Z2wzNklCMUtBa1BjRm5tV2hHTXNrU1BRa0RBaVJ4WW1maGVoanltMWthWW9TcmRsL1ZXV1RtYlNCYkNEamZIbEFpVE5BU09YdEFUdmpYNkJ1VkZYMzJKZE45Y0tQQWJ0MkdMOHNIZlhhNHYydCtkbHZFcWhic1NXT21tTzZBb2R5K25INytVbnBJWHBrSU9XeDY2VnA1ZUJYdHB2dEZwNk1NcTdMdWRiM1BmT3IrQUppTTA3SGw4SEtLbW9OcThvK21rK2JQblFHNGQxRElNTW1OaEQ4SzBhc2RieWgrWFdXYXIyeXpsWE5XL3IyQXRQQ3RkMzY2bXoxbVFYNU1KVGR3eEs5QU05Nm5BbEIwM2gvQ1RleWtQTXl6cndtdmhmTDFnVlJZZzE3dzVwOStDc1ZFOWRGZk0veVA1bDNvWGNrWGhkcjBjYXhza05WSGpxWkNTaXI4ZHZUb095MmlTNWgyN1lLRWtXU2lLRCtGYVh5WkNxZDBoY1JTbEwxWmZ4Z05SVjI2Q0FCbnJzZUt6UURvQXE5bGpaUHI0ZmQ1NFlwTjAzdHJZMFprUkRDcXZOdk4zY2tOYVg5UWc5Y01HTEQrTmppdzl2UjNWT1hhTy9mKytEbmlEeWhSaG13OS9JM2RTdmluZGthYzA1dlFCSjJFUm5GWUhoRDd1Q1NRVzQ3dEd0VU8rcUNneVhzQzcwUTlhTUJQZ3NScmFWR0tzeDZIRGtYUm1wM2REVlk5bzh3M21pTVdObHgyU0wzb1ppS0g4WmI0Zkl1ZzZjblVnQmI0THErWCtSNE5mMFpMR0o1cmpJcXVYY2VUQ0dkVk5PMmh0ckZkSUtnM2JIRXpRZHdWd2Z2SGJ5MkljY0doMnpRSW95endVTHdWc21kMy9pbFRDNkdPVlFlYkpEK01pZnJKRDVHbDEvMktrVGFVODlFMXhwRkJqZkdPUUQ5OW52eWl2OVhUOVBYODJZS0pxUFdpQ2hwL1EyRUtMd3pUdkNsdFpKSTR1L3F6aGx5cWZRUnNyUWJNVnluaWw5Tk1Id3lQSmdYMDkvYUtRbnRmMGVVM0FROTRmUEk5MG9uUHAyYWdyK2FKbG42VnV3MWFBSWN3VXAvZEVSdTBSalFlaDdPSUcwYmYzcC9XcEVUbDFFa2RDSDN4c2VjY3MrT1V6RjB0SCtsTjI4SjFrNU9Uc2tJd3QxT0xGUDVGdVJzZEdTWmZSQnRob1QybFc5UEV2RXA2WHdnUlcva0FZeEVoSVIvL0NvNDh2RXdrNHZjQ3NmZTZha1dJQ2UyQ1h2ZE5WWDhoU0IxVFZCK0ZvR2FRWllZZ0ZVZi9DenZ4a2tFbVpFbXQ2aUxhVHJsdDdaZmxzcjRvdnpwVFFwdldTK0dGRHNuanlCc0tna3IyOE9PanNUT1JpWkdReXdPTkJ4a3M4ZjVxcmNDOWl3M20raVgrR3lTUWpyc2lpdDQyeGlVNjh0MGdQR3BEWGRna1NDVVpMV0U1djZjcmk5QysrTXNzTGt0eHc0UWFtbnQ3NlppZUplUVdtYWt0N0dLTFJFUW11R1l4bmNOR01rTG8wVTVNWGFlMklpZ2ozRkxhUTBpZXZhT3ExTEZsZUpIUElGc1hYOG1ITDlFNjVCNmI1bWljN3dMdjdCZVRRY3M0QWNRdzh6bllkWmw2cTZRbk9VSmxlblRXRWhOOTFob2czY1JIREc5NzQvQVNDMTVHYUhJa0dyZjhKRGxDZGt2bElWTnRRUTFnajgwTjVQUkN2SUdLMkZsZlZKejV1V1JLTUg3S3N1WldkQ3BUWXVMSnhXMDcxd2R2ZmYwUk85eEovc0QzZmgrVW1wYzBGY1JPOURzSUdSUlRjeVkxSnp1RVNEcWlteDhjMzgzTEJvTkxDbUd0U3RtTjlRQm1NMGJHUDZ4dVp5am1oRktFYVA4YjJybmVmbmJyZDA0bGJ5enQ5amwzenhWRUU5Tk9LYk5kMVlaNG91S1dGT3U3OVg2ejR6bGgyY2RvWWFMYTVIRzg5ZGZabzNqTC9RWlpGVU9PeXcxUi9IdTZtUkdicGxFZDlBdXFETUZMKyttVlBYSU9mV1A3akhDdTN5cm5CbEFnMmt6ZXgyZVZIS1hyNE52OUFOZVc2M05hR0pUcDNoeisvd2FETmZJVFR0SUhzQ212SllXL0JVSHZTOS9lcVlrcWJSaGJ3MFZoeGo2ZVJQcmg3MGsxMTBDb25ISnRVdEFFLzF4MURTV0RWa1k4cWoyMjF5anZ3TEFEZDl6bUtFQm5nUy9EdWlMbnBSYS9yMzFQbm9kcFRRMVNkem9EUGdlTVdwNzBEOGpGNkZkRzJJZkNVcWZmUUJtMXMweC9WOXNPa2EwcFV1eWxjd0RZYW1MaFcwM0VSWXkveW9YL1FBNW9hR1A1djh3MXFMUXM4SXh2YWJ4UUt6bXpVcnRDNStUc3lwZXBwOGxYUVNZblpmeHU3NGJnRXpsZGZ3UFp5ZTlpWU1HZm1oTVhuTGIrNDUrVm4rVEhGUXp6YzZpM0dOZUsvR05OKytJTVBEeUF4Vkt6Zm5Iamw1TnBBaUdMVTgzdzdVWGw4VTl5NDg4eTZEN1RuMExQMEw1QTF2dmZEODNkNW9SaHZRaUxIVWZlVm0xZHFhb3g5TU5kME9OeTZ3dE1LWmZmS2FOZWZQMUNqZ2h4ekhRdmo2N2JtU0tjWTNZQ3dVOUlEUW5CUWlXYWlRenRvS2tYQVlodWF3VjYxd3ZrUWxSS3JKcnlsRWhvY0owdGMvMDMzRUFKZVRzaGMzdUJFQi9WYnFDTDUvTXZndUNIb0JmMlNDRDRZTlhHQ1YyWlQxVHpCNkNyZjlETTZEajAxQnY5ZkRBZWk0T25CS2hkUHNFTHRzVi9HZWZHNXliYUhmaU1JQk9iS2RoN1ZvQ092bERHbXhGUCtOaDhSOGFHdE1jT0dIVGVpTEE4M3pSNEp2MDlsT2FybEphMUhPQXJ1VmF1TzJpS25odnJIT2E1cWszYWNWRnlSNnVqa2MwNmZRVE42K2lUM09Wb1U4alIzWERjRFVzOVNwSEZ0cUprRHU5SmUzMXkxa1cyMXVUSUlXNUN1SG9vY2RnU1RJSWx0VUpSa3F3L21Ld0xMbXFORUZvaFBvOEFtL08xZ3c2b1dtMHJ4R2NOcmJ0RUtSTDNtMURIc3NuQytvMGx4LzVhNlVTSk1idDA5R2E4eXBIV2tqbXZDUjNqYWsxVERXbXlYSmE4YzhQL1czaFo0SlZQbFhTTUxtQkNhbmIycnp6WHJVUkovTDh3NnhJa1FWQ3FocVNqRUhKT1VQNm15am9MSzdPMzBldzZqcTlFbGM0VXRXdUc1cW9aNThUbUNrSHdCODFSNjhJZjU3U0VuQnYycTkwa2hQNjMwZEs1REg5NXdQdkJPb09jZEdBVzRxb0o5eUVLWHIrR1FCa2pxKzZZMW1wVlJxRUZZRkZOaHhhZFgwK3VvVWtUYWdRd080R1NHVm0zYWJ6MHU4YWJmRVhQaUVlNUc5VTR3V3dweit3L01LdXBrR0duMFlFWlk2SUtuWldjaFZuaGY3NFRNa0l1a0dHalhPVkRyNG5ubmNSUExGWWltY054N0JlM2NlWnRuUDNwOStkazFuaDZpc3k2L3FDWjRzUG8veXRwMHI4dU1jL0NYNXJFNFNjVEhpaTBVTGhvRFRaMzJabGExL3VOcWZWdHczQTNVSW9yc1d3czZPTHVBTmpBMVVqM1RyOTFYOGRSNlliR2xuWXUyNHV1N1FIaHlnNW91RC9mUTg3ZnhXTUVwdG8wV3MrVFFaZXRXZzJubHFYOWJUaEt4bEM5UUk4VjVGMUM1MC8wZGthWUkzWEVZM0VXLzRZc2Q4ZnNEbHNUT01VMXI5Q1hNelJ3MXU5WWVGdHFTeVY2QWs0UjNNcnB6SXBvNjN1Vm1pTmplTGREYVM1bGtKZ1dBZFJtNUdFQlVMT2p1TWRUYUFJS1JrMFUxb1JjWTRlZjZmbWFnNjZkVXJLM0dwRnFmUS82SkFjaE5ESm9LTjhpcGUzaUxEMkIyRlNicUJhT3gwSmJweGlDUWdUU0F1VU5TUmswZ05DU2toWlVacmNLbHNQcGpsbmljM1VkMFJVMzg2YUFYN2hwTmZZckZvbmF5aU5ld0lydmdNbWI2a09nWTQ3RVAyVUljZUs3cFdLTDBxQU91NFJycmltd1ZML2ZaYXdRZzVYaU1hZWtXaU02d01ML0Y4UWdsM01hNFJNVGVMcjVaZWV2UTZwaEQvbVNXM3o0ZFFsQnliazZocE1KRUE2YlRGaUV2akpsQStSaGlTTjA1TWN1OUZ5V05FejU3MCtERXBML2tvcVVORU0rTjBVcGlVZWJINTBuRzcxb2lJTGM0YmFIenVZZHBWWVpyUW5TMkNnajRlbXhBQ1I3VnVTMWJZTGgraWY4clY2eEFPcFpRK3R2K1RRVTNPbSsyd01pMnp5Y3I0SlZhS1N0bXpBWi9hdlhsbXdqM080cUdZS3RTeEpWSFAvQWF1cElOWDlBRzFPZWNUWkI5eVpaR2VUcjh3ZDZzcTN5OWgrQ2JKdGxnVnZteDh4L1pMNjNSNDFEUUM3RUE0blB0YjByZUdpLzRCUktCaVgxalU2QXVFVmxaMFB6YTI4L3pXWnlub01KNUhKL1pla0pRSlRyeUlYVVgzRWhibDR2aTJZMy9NaWtMcjZRVHBWV1NIZVBsWTVLMGxYR1BhZTFpWlI1OW8vWmVzWW56NjhqM2dVUjBydUxScjQwTVFKbzZkQzRuS3I1c0xIWmlXZXNLbWNDTThTTUZoWWY3YnhsNkxMcWcvS1hPcFRwV2pkUHlXZkNiODhNWW5IMEZSbXZ6ZXlFUE1Xa2dDR1hMdU9uMks2MHNZeWVlN24zczZOK2Q5YjhlaTQ0bFFIbHdOVHhMZ044WUg5RXErM0dqcUt5NDE0Zzd4WlN1dkdLdmh4c2NiZm5sWmVuaEUvOTNQN291ZUxXM2ZOQWY4dE9vcHlMTGt0SWxqYm5JRVl4cUtsOUJLWDc5UVAwOVZrbW1FM1Q0dzlzTE9uVnZFVklPSVBXNFFNQWZDSlh4bVlIVm93ODcrR0VKWGZEMk95VlpyOW40MGdlaURuZkdUcnhES2pZbDc2ZjhJUkJ3azYrMVphbmh1MzVzNEdweUR1Nk5hTUp4WHBrd3BUQVFqcWhreFJxNys5UlJFZk82V2JiUVQ0YWIzaWoxNkgwZWR1MCtvZHNOL2F5TUxiV2k0WHhhYnZvY0tIclB5RlhrNkw5QVBiT3Q2SXlhZTBWN0JSQ3Zzbll3Q3MrOVk1Y09TUjJDVVo2amNDZVZCcElta1JkT3RHQXVWcEdWQTRsQkY5bHhOWTJuVlU4NmVqWVhQMm9XS2ZTKzZFeURZMS9ya3RUZk9HcStsUXZNWm9HM2g4Wk84TWV3eTNpUGNZODZFMTZycUJMMWQ0Y1FEdlpOSWJsaEllaXlnSFQrSzY5YmhrMDdndlhxQnczMlJYQlVLbGN4cUFEQUl6Rm0ydW5iNE44YjBlZ1VoQXdHYkM3emgzRVpZVitEM3YxL3ZBRWxRWFV5QXF2QVVMSVhGQVJkK3RHdFRaU2o2N3FFczNDWVJWYTk1Wk9PZXp1SVNQOUN5NG5mUHVWU2IyNG5uRzZQeW1DV3F6TlJKMHFDUkE1aUtxTGNMcE92NHdWY2QzNXppMUdJbmJJUVVNQ2h3bHdxUXc5TS8yYXhYcEpOR2dNMngrZjIvdlFwbGlrdDF4U0lVeThxRDNjTGdrSjJGMzJ0S2xoYW9jbFNPVVpYNmNFY1hCb0dvRjU2cEprSmdFTDM2QjJrdWNzTVNXTmgvZHFoOHpLZ0lSZ2dLN1Z5ZUJ2NHNJZzNJczVvTG90UUJhT2dPeG9JaW9BYnJPN25qZzN6T2UxT3A1RnpIRjJOYWltVUc5c3NWeUpWTXBEMUpzTTVpSlEvRngvdGRONFlpMzNRWTVPTUo3WitVM2FvdDBOM2xUbGxJYmhXUlplT0o1Ym1leWlvN1FtbHlYZ0N0SmJ6STVwY2R6QSttZlgrTHFXZ1pJUjFYNFJyZUFFQ2tRd1V5MzhMZ29oVE1HUVJSSG5XRDI1dGFRcVRkK0htNURxK3FuN0RmU0UyZVpoMmxDRnk2Sk1iWFBybDFaUStDZloyYmxkbWF5NlRvNDVZK3ljOVFMamFmT1F3K2F3YSt1bkNETUd1Tk5JYUVFWTdjK0daWHVtNWQrTGFBWlJmQ1VaRWsxaUNnZ1FBQ21pWmwxcFE1RVJ0WmtKYlQ0UkpRbmd2V0kybDFudldiTUpNT1A2MFlpNHpad2FLcGE4UFZ0SmVpRjNWUXY4MSsrWTBSbjg2T25QK0VRVC9WM0xPZWxqUFAxR0hQS3VBamU2cS9DdGNieWhOTThEdy9zSmdXc2czNndhT3RVOWN4cnBTQ1N2QTg4aTd5TURpTXVzUTN2K3BLbllBZGdubFlrRUFYYjJUOTR2blE2TXNrKzd0T1ErdXhxS0c5WDN6MXc1bURTNWdNS2xGVnhTM0tBdGR4NEpoeERPT0JwZWV6QlI5ZG5QZG8vUDhGeTJ3STZNaDVKZ3JHdlN6NzY1WnVpTjM5dkNoc3B6ZDRMR0NzQkZvOEloM1IwUytQcUdrNXljWk5lRjVyeHl3OGZtMVNyUjZBSTZCeW02VmN1UjByRExLTHRBSGc4VWRndUxmOEJQWTZ3dFoxVVliblRFYk5qY3JOTmVqUDNMb29EN0wyL0lpMjFqM05hUG9PVm00LzZueVFMVUZ6MW5IL2VQVW9Sb0NVV09HUndvVVVrUFlUS0RuaEpDVkFFRFFYazZaSlluNFVObllLYllYbDVXV1REakRhOG1GWEY4T1A4OGRTa3ZrZkVMZk5qTGoybjg4djdGWndzc1M1bXl3WS9NMVZELzJoaU10ODZMYnRVRG5HYU1mQmtSdlArMFdNUjFwcUx6dzh3U2xoVFJjeC96WUJBdkRtRG8wTjRNVjhoU3RXTDBsVGRLQ001MlNtNUN0Sk5CQWliRWFXWGYvbE9zbXl5SVVSUUVZcHJDU0x5OFRreVRRYUlJaUtRVCtJc3l6MzN1cHJDcUJsaFBVaVhXVVFKT3ViSVhWdG9ZNHJPOUpOUmVHU2hVVzdlV2lML1JBcGU1b2VuQXF1RHJON21xV016dUo0TXRNb20wTnNlYVJLYTkwdUxYRlpTemtnUmpqYzAxTk1kTWtUL1JQNjc5cXBWL2JMSk5HcTJHU0t6RkRacndxbUg5SVhZMVNuMlVKY1pFTEd0QlRkMUhTaU4xSnNVQzBDMUxmYjdEQ0F3ODFyRlpIc1ozb1J6UGdSb2Rxa2x5WHBTbHpFTWExOTVKUnFuc0hxVVJSdlBKeWxQWUtmSzNQSSthWlRidXJHV2kxV1dHMWhtRmVTcTBuR3hxb1lLNXJwdWdOSjJrSkRSV1NEWERHNC9oL2pJeFdEcG4zZGxTTHQ5QVJxUE91bG1TU29XUVBjMk9yYkxZV1h5dER5V2J5dy9OclRKQ294WW4rcFVhWnUreGtxM3pGdW5rcHU2Q2ZsNHEvcWtNa1NVaG4wUXc5T2l4bi91Z2NxWlJYaEVvT05DTU1ZaTVGSVpUQnZ1NWwxNWcxdHJqcjZuOUVGQ2VWREh3SjNLYzVyRnNxVFRLN09yUEJmR3NDUFYxREhnMk5XRUpPaXMrVXRndG9iU21rbEplYXFiYmJwWnZ4SFBCNDZjR0JFRCtpZUZRZ2pNSTVacWFuUUliOTkwWjhzQmVBTkFESllWd0FsRjF0MHV1T2c1aWo5QVhML3JVYVpxaTgvek8xcEVFWmNkbCt5MGJrR2ZieThTTVZmcklsRmd1VjNCUU54akVmaEtDSTZKemtHdHJyWXRsVDNybmZ4cWJMUmNESXZPS3k0bUFHZW1JbU9vZm9xNDd4QXRuK0lYQnZ6T2owYnErekV3Z1lRZmxYSk9KQ3BTaG5UbkdVNjcxR0w2RzJRR2t0KzhrekpvSmhyNDJDS2Irb2daWDJ2SGRFelgyNkprRXhPenVxRXlnWHU3aWFxS3lidXgvS1d4YVp5bWErbUtWckVLdGlvZ1VrWUZ4K1MyWjFTY0VtWWNXaFNzL1RTdzU1QXI2Z3dUMmFNUmhJOU5yenRHblBzNWFIWDhvb2hvV0JZN1FpVStqUzViUjlsME9YUDhiU2hQQkp0YUt0bmxKNThZTlc0TzQwVGtEOFRrZkd0STdtZEt4QU9CL3BQemU4cFl3SlA4Sy9SbXk2dFZXRjIwd1pjWTcyRysrcUtJRkh6SEJZbDVxNFdoYk14ZEM5eHZpZjAxY0wrNlZBM1h6cWlzcnZTOWhSb2lhMVorbDlSYU1IcXdjSHVUNzllMkg1Zk43RDEvVENNcEFyS2xsMWZuejhtWVZoNXdSZ25SNVpQcnViRi9RaTZ1K0IvcThud1c5MzNjRlFEU2tJQWpqRDFUcEpqT3JMcGZya2FBWkZNeGNoNFRpMnp6dnEzeTFUT0dHS1d5ZjlUOGpXRzF6SVNZNFRkZFFJb0FZeHhyZ203Z1Jaek92TTBFUHAvaHljb2oyS0pYeXI2VjJJNWRDbHF2Rjl5UXU1WDdIellZK0tDKzhpdkVjV0diUTQ5U08rNU0wTTdtQlFHQ0FyeDZlVTh2dkVWZGptY1dwbXdYc2dzU1lTcWVQeUwyK2lQam5LY08wN3FiTG5WdGt2YWVFdVM2ZHZTUjgxZ0NjN2lSUWVieWVWT1Fybko3VktXd0FyUmFMYWp4bTgwUmJiUkEyVXR6NVBNL3Y1QXk5RXJWdjBTT01ReVFueWg1VU1JcDNxdW03S3RrQXdyTkpVMGZQVk4yK0w1U3VwSmVFTFpvdTVOR1NpcWlZaXVOb1EwTWVqeWRsSXE3ZlZrNjlRd296bEU3czlhTlRJVlZPU3pBL01LU0w0bXJXWUtVRmhoNkhUR2VxVUExNi9QU3ZWQVhCaVhxMlFQSEhmVjMrQWpGRERtRXpVUTlGSjNZQ2MzalAxQS9hd3VBclR2RDZ4eFpRWjhSZkZrUStQblJpTXgwb21mSHlCdHIvWGxPbytWOU5DZ2NWMURFRW9hYTZmTjhpYkw1bXRSZ1N3bW1SekZBYUp0VzJubkRSZ3dheHZpMlBodTZrME1TL3pkNUxUYW8vYlpGUytWU24zTmh6YWYvS3lVOWFTM2tIY2FOUSt6aUg0dlRGWmlqbmorYm9XVk1relRnZmlwOEFScnprVXBadlorMlRPWDhCT3l1eWthNjVUUkd2NURmQWRPZEhiUkQ0SjhkMitsMUVraEZ0MDBzYkllWmNCcHUwaDRyenVXZytZZCtJYXM1WTJ6cWhKeHVuaGhTdUFSNEFIei9HSGR3Qmw4Z1dSUnJScWMwRDJEV3hoOFYvdEV4VzUvR3EyODB1U0RKaWx5RURxQmMyZldNdXE5V0kxdmVBakpPTGNydU9tUTdTUmR3a2NtK0huSjgwb2Q3NWZDSHhubTE3N3l0ZS9kUkZrajFpY0U3NE9tcU44VTJzM09sSzZLemFZLzJSTWhlaERvOXdGdjF3Y1M2Yy9Za3hNN0laK1VKTFhIUVcyZEpkMENDYkNPY3c2c3dlR0tnT1MzVGk3Unp0Vk1uTG0vZEN4S3NIUFY5V0hhdTBqZktnK1hJcE9qVksrQlNEZ0t1eCs0UU1yN1RtVU5ZWWhRQzRsZTdKbzA4K3YwRXFqTld0RXRZbGVmZm5oQWMyWE9ZZ1dNeDVLWEs3WkJmTm9LRjB0WWNrTUcrV3gyVWZBakZXZng4Y2VEaG96TzJOYXNYUkloRHhTQnh3Q2pObE0zK1FlYVhlY2Yza1FMVjl4Nm4zdm9lQ0pmdTV2SDZJcW5TZlhGQ1B2OGlZZWZ4ZEdhOGttdm9DVm1aazJuUHJOUFFIVG5lT2RYNGc5eGhMbDFJcHZhL3cvSFA5QjF4N3VkUTEweXFxdmtwb0JYbXJsSHBOSG9pU01FQVlMempJeVRhVWlnODlWQ0JHYmJxdENocFpjRVhEaDlQNVMzaE1adXNHdVJhR0ErT1N5M0IwT0RnWXdPcWhob0RkZkRUcmh4WEQxU2hCajdUWS9EUzJHaVprc3BGSkM1aFl6QUxFYlpxdGFRUlpKNHZRbStuT1Zha0l0WXRvOWZDZ1BnT1k5di9TQ0w1eUhIL0gvOXZ3TDBDVjlNb0dUU2RSODRqRVVVL0poSEZKeXdkNFl5Y09XVEZ0RVNSRkcxcThnMGlCTlRKNmQ1ZjVrNmNMLzA5enMyYmRPNFV5cjR3ODBWRVVIUUdvWmhMMzdGTHpBck9GcXJZM0Q5M0lKTEVBbFZOTXNocU5VYngyaWRobGEyUDNHZGZleXJRRG0zYmxXTDJtVEordGV6UTRBRk1pVHJBdXlDb3BhMWVLTi9LN2FKcGpNTU1RY0I3RUdYMWdGZEZDNTZGUlE4bGVHN0pTeEh0VXZ0Z2VWT2xEbWxYYk9VaUE0TE1qTkluQkJkaGNQYUlCWnRtM21CWklYSDEyOE4vZ0lDQWdJQ0FnSUR4L2I3R1A3ZnJndjgzcmQvWjl0VCt6N2hUOXYwdFArMzdHYjluMnBYKzM2WXo5dmROK3owUi96ZW4vbSszMlUvNGZhcDc5dlpIZlo5a3YrLzdaYjluMGt1L2I5b1grejdVei9oOU1iZlYyOGZzOUJ5KzNxWTRmMit1MyszNnpUL1oxYmZzK3V2L00rd1kvYjlERi90K3NJdnAvWEVmN2ZvZzc2dXpPK24zSVgxZEhZRG5WdUNEUUpXV3Q0b1VCS1NJd3pqYy94MnJEdGs4eGVZNEFNVlBGbjRMRHpEWThLVG94dFluaWRLV2crQ1VSbmluZ2tod28xNG5vaVFkVUdUQkk1WDJaRTJhVkFTVzZuZjJ0dFFVSk1MQWNjdDlidmRBeThKd2MwRUgyTU84Wm9kQVZsOXJZUzJwa3pJb2ptVXJPL0lQVjZhOTM2Y0RKTGlFT0ViVXZJTm4wQytlUEl0dnJmVWZ6MlBjVzIxMkVuM29qTGdNV2ZLbVhjcWZtY29LalpZMHdURC9KeDA5SWdVYkhabUpmMy9ZMG1USjFBOFN6dnpxZHIxc3VFNlZaaTNVVnJxTmJOUUhpYjFTaytpc0NRYmNYcGV0eWpUVHo2b2lBYnRsMU83VExBaStTRzVTZm1JWDZOM0J6KzlQYVFSOVVnbzc1L3FrcmlheVlDbVpmNktoWmcvRU5XRmJVWVhtYUJVL1QxRWJiZDRLa3NYQ0ZXd1BmMHE1WjBJb291VENZaUhwcTVVOFVUVXVWejd6YkkzdDFiYWd3ZlFubUI3WEhXRU92N0kwM2pPTzJhWk56cVdhQ2U2emNIRWFLc2x2OTFyZ1JZYlp3YTJaWkt4YlFJUjE2eXkzWnYxWW55ZHhOdjlRZDhrSW93enkwZmlodUdqSEJ4bzVLbndGeEJEOEtQcUlkOUYwWlVJUlFoaXBSODNseUdZc0pTM3h2cDFNTThxSWpRb3IxRk1YdTQrekpsQ2ZsRmM0dEFmZEEzMjZkc0hIRy9IeTRvSmdhY2ttNlFaZzZ1dHFWVkprL1hUL09BWGpKNzJRRmZRNDZjVGNFRU1pOXdVYnBNTVhZK003dVdyZWdLV00vamR1K2xhT1JjZS9CRTNnZEVIUDRJcmhFQVFiK3ptcHduL2VudENjUXZCVWJnMnVvVWw1b0ZtOVpmbGFkMm1OME93NHVQcXIrN015TWljSXJzakpORHVBV0swVGF3QXk2RDVuekZFblhraUhteFZZSUU3NmhxV0ZCTHZKMHNKUTdCc2JQTkJJMjJySlBPNnkrdFo0Nks5MFEyMStZM0tvektWUTFNTm54RmdSN1Qwc0gxOTNEajBDa25TWEZhaHVmalp2WEl2aEhjY05UTHJwMTlQdTBiOGNFVk5xZU9ka3JwSlR2THJ1T1U2R0Fxbk42V0ZlYnI0dk40VGllVVp5K3YyYzhrSVhrTGYwYUd5ZXVyRktORVBINnFiZGNybldYeFAxNkJ0N2pnWURHSkdFSUZiSyt3aEtJcXltcGttWjlFQ0htWjJBNk81amdFcEpDQzkvYjJ6Mms5VUNXWktPYlpsZWYwN0ZrRUM0MlFMUEdkd2h4bnBRc0VDMk5BL2U1R1VtdTF0eGN4L1FwVndKNklpSEF1TUdzUkNxSDl4VllSa0RsakVnSXBqMTYrQk9aN3VEZmFvOUlTajUxUWN4UjZUZ0dveGR3QlVHV21Ld3lOTnVnd1Z1bVBVd3J3MUh1TzVjRkdVTnE5cTE0TWM2a3FZZ0ZBVG1reEpJNWZ3STZkOW1lMnc3cVNxblJTUXE3TTIxemEybEszZWs1MTZQeldPcWpUWlFkRHRSYmNnbkRGMUQzL0FPcEZ2bG1mbENNS1NMSUE0cGFkRzRFczdQRU13Nno4RGRLZm1KMU5tczhlZE9LMmVHWUp4NXY2dlNhdEd6UXZXL3Qrb3RjV0JKK0dLdjFnU2doVWNVUldhbERRNFhiNERvUmFjK3dFM0phNTdja3kyaW1TMzVpNXNZV0J1RFBiMTRSWDhUM01SNDBqKzRYbnVZZXNHUU1KNnhFSjRudmZ5S2xBeEFJeVRmWS82VE8zM3VFNm5pQnVyYnFzMzYyNHQzVEVxbHFIak5GWkZlUEM5U2hZdlk2ODBlc01VeDJpUk9UQlAwWnRzcGhVaWtMd2ExbFJYbUNrS0VWcVdXcm1sT1RpZWtUcllpb29iT09jOURwKzU5STJ3N2pOd3Rpc0tpcTVrTnRHM1JtSjNqbG5mQmEraTZ3bnNvandiYkRCa2xUUFpISU51M094aExyTDRkR3g5QU5OUWNkVjlSaWo0N3EvdGZtZVhCS01IYlp6S0hJUUF2YjlhaUJiTDl0ZG81NCtZY3BWNUF6V0l0cnNkTnhTN0k5eU1abmVzTENSTDZ5dVBNRHBsZjlVVGhqNkJXUXVWdERGTnFHMG1VNGp0YW5nSm9EeDBSNzMvRUNSbFlnbXk3T2U4elZwSlhNbU9yUmVCTy9MMFdoUUt4b3l4QWYxNDZGdFFDcWRNbWYwY21oSGJ5Uk9hb3NvVUpmY1lNekV2Y0xjY1hveUh4SWZORWt2aE9lcngvVWszL1pOaWoyWFNRM01rajArRlMrYkgxbThOR1FDSTZvejNJcTRsUHlNZ1dyL2t2bS9hRkNCWm80MFNOaTJOUEdMTE5OTHVwZEpnNVJvWDR2QU8wZlNmUm56UHEyMkNpbGtRekZIV0ZySXlXWkxuOEIxQ284ZGUyMTRSZUJqVTV3eXFoQ0w5WnFlSlFISzEwbkRzWlpYdWNXYkhleExzS3RqcE0wY1pBKzlOSmEycTAzRUo1cmJZTkxRRE1jMC9leW9MeFFWTnpWcndicVRwT3gvQi9yWUpwV1psa1lqSlpKQzJySzdHWVh3ekt1eGhTZ2JKdFlsbWtTajFPdGM0YldFaFZ5anVkekhFUTZkUXZ0NFhodFVpL1drREh6OXIybTBJUXo2L0lGc0hxRmlPYlFqaVltYkt1NHM1cEliUFgxc01Ta0FjN0cwUXJiZ2lNYWVMRDBqUG50UUh5L1pEUnorZDdFanRtU2tGTXBHR1pjRTBMNnNzSEdSdHF6SCtuSmNsQk1kcTVOa0wvZXJ0bUFZb3FCOUlMNXZFL0Y5SnczakRVamV2akVZK0puTlhXQjVtMXp2Ry9tdk9lOVpRekJublREM0sxTjJUNHNBaU5LMUdVQ3hOcFRLaHJDVXlUYTJzRStUSHhoem5FVjRCajhSZFhpM0pqUFJ1SS9jVDNVbmFVT1p1UHRNbEUzYlJpcWdzNHdmRG93eVgzb0tZeXNiUmowYzVCOGVHYXBCNlRFNFFZR2lUT2NweFZaM2MxVTZnNnhrMmxDV1NhcWplNmhCWEZJWXNqSWl4M1pHZTFwN2hvaFhNYTllNStObXBobmk3TGVWdFhESk45OE45a1FiekV3M0RpK2RTZHBLS0ovd1NUOFZPTldtVVdPVzcyWE5vN3UrTlZHUDgwbmQ3RVhtbHI0bzVjbmErQU1mOUs2Skd1bEpyTEdwWUVIODA3dDdiNC9PeDBMaHlGcjhJYTI3eFRxTGN4QXViL2dVMzBmbjlWV205bW1EbHR2ZXdlREMyanJ5OWZvOWtGZmJvbEdIZGxiQzJnaDV1dnVkRjNFWW4rTEI4dUIvdm50ODV6SGtHMFFsdW84Q0hLaThVeGxiS2dqWVlqellWWGJrbW55YXVVeEhRcGtxYTFjZ1pWQXRwbXl1a21FdUJjekg1TnpJSjRiMjZDdGVPRTFWaGQwUXJ0cUdFWEZpT3NFKzd5STR5bG1JdDY3ZG81SXphRGttYWtXZ3cwTGVCNVd6YXhkb0pmV3RLNGZocFF6c2FueUZqTjVzWmIrTVN2aUJRQ1Q5ck56TzJ3UGg5T1ljZkx0YWhGd25mYTFPREdvc1IvNUlCbHZlY0E5dzR1SHgzTk9vRG1sU1lDRkdHWjIzbEd1SHpONVl1eWNHcXczSEFrQUVpR0JsS2ZwNjJYeTNJSFZKM3BOWW5uMzMxTnhuNHdJMmZubmxaRWVpVFVCVGxxSFdINHh2R1pleW5QTEZEK0NXdmJYZXd5RHBBWHJja1Y4a0hKRkJCc3JuY242U2JZejZFMTNFOHFzcUtJditVVjVFU3hZVEpWNVN5SEhTT1RLNWkwWDNQMDVJMTFZM05iOVhVU214UXBEZjVIcUQyMkJaejIvS3JHVzR0NWROS0RSb2V3K2g1KzBSYnhvOElCSk5lMkJ6SW5sSXpyaVc0Y1pEU2s1Vkdiait2V0xYWEluclY4aE9ZNzZYd1lWUFh1MC92eThWUzJqVnUrNHNqUEJxMUlwMERuZlBIem56SlgvMVdJdndXLzh1bmdBQTcxcWRySFV0NmFHZThCL2ZwanZmZC9PWUtpaHRuR3UwbXRUQkpnZEZnWE9KdzJidWF0UDBXekc4bk5CeE9VUHdZMGRQd0J4VTQ2OHlBQjhKS3k1Y25zeW84YUFvTXk5T2duQjdLUmpJQWovblVuSWloMVVGY2NQTWVucG9pWXZsZU04WGI4RnJWMlBPRXVKN0lKYW1sVVN6eDhkcmR2Ri9QbjU3alNNQk52dW1kMFhaLzR4alE2K2RkYnVFa0xkVUdSc1N4SEFIQlpiVjQycUdvMTJvMFE0em9Cekc4WmhJTHpDVEg0ZnIzejBTeTJpM1V4N2NqUEx0THZJbU9xR01WVzIvTm5wQWpCODBRZnIrOFdkZUNmMVJKaEFvWTlpWVNVemNxNTdiczd2RFFxQm1PMC95aWNIRkYrV1M5T1FNQzJVR3N6aERPQ1ljU1lxcXNTd3NwbmhROE10SWNRaXkvRWdHY1BlcTdkandOTjV6dStzc2MyMU92NkZ2bVliQ3dIY1dielNwdk9GRU83SVRoY0NMV1dXSU1RT3orTVFPM3k3WndpempPSVpDK2FHcEkyRUZEWEIrV3BZOWRvdnFTajV6dHpiMEZheFVJS3puMkEzNGNNR2FsQ1NsMklubTNrK3RpQXowNmFVK0drZHJEWFQ5eVRKd1RGODh3QjY2citqVDUyaHZOVFVibFRRYWE0WDZXQmNDbmZNbEE2c2JrWFVQMXRRVDd0THg4SVNha1g3T09GME01YkR6aGtRajlHL3hNUCtQMVgzRG5iK1YwdWtZTy85R2pwdVhrbG4xNjRka2FuTWNSR2VPYyt1NTBnMUxDVVZlV1B1SldKY0FOSUowcVhua2s1NkNydmUwejFSVnhHUVhmQjJGemZFZVAxNjhSQ2JZb3l6c24xd0dVMWxTSE5GT3pIQytCcXByMFpFSDhKMmFDWjNudEdyUUh4U2dQemtIaExsTFZCWkx6NVFtY05PUSsyZ1hEYlBGQzZZWC8vUk5pUzIwQmg2RE5POW9aQk1sRWh5U09kM0ZSazRHS0hXUVZsZXhHVGFUeFpKRlJFVnR6S2g1c0xTWWVHclhLY3RETTIzYTlIZGZ0VnpKaS9UcEFLSm4zRXhTeStHMTFJV2RjejdDcXRzZXpUUng0c0Y0b2YzcFA1YW1DcGVxZVlrWlBONTJUdVhwTEgyZlhsTzBmeUkzd3RGSDlOOHhudTFkSy90b2F5RXljcGY5TTlxanYwU0lLSHA5ck5sOXVpdVJ0NzJBOFFkSnpqOGNJMHNlZDgybkJFVnE3UEpIQytHZ3plbmk3Q2EwalBwS3pVK1F2NTZSaGRrY3R3VUtzQzhNTWpQakpqMDVUQ21wak5YL3YwZUEwZkRkMU5KTjlIVk82RWFkbFVyTllKL3JibjFRV0JXRHFRUU5HUjhNNWsydFRzRjdRdnFKa1IyNU1JYkZJeWJObXpJc2V4Z0I4eFpVaGdVWWlHNlU1ZXlEVmZqOHo2NGFSN0lqMVYxaHBRVkNPZ0YrUVYzM0RUQ0hrUG9RTzI3d0I5UE1RcFpzdFp1Q2RTUkpRelZQaUpneHFrd3pzNnk2NVVpVWlMVDUyZ1lNRDJDTjlqWU1rTXo3VGhLU2diU3ZjVDZGay9NVVh0ZVYwMGFhSi9pbm5kb1VzNjlRTFNaTFBtb0h6ZEhRdHlDZUpwMHgybWgrK3p0QUpxbUFJeEQ0YU9oMFlaa0YvYUpvbnR4T1V3RWVYc1FLM3Q0ejFRdHFqdVdjUENSb0I3bG5VWjhNLzBMRDlSalp6ZEg2YWU1ZUpKUy9TdFVXQktwNWFQTmdMQk5Ta1pWWUJtckgvaUVOTkUwaDhXYzNhWXc2aWlkSkNnWWJrUzd4d0FhNkVuMDZUSitUd0E2R0RwN2VUU1lyUzFidjNtM1Uwanhyb1pRUENwMmFBeGRoNWN2SjY4SlhoZWRsMndvdDhpT0hRZFRWMkZRck1OeHJFTUgyWkU1engyZFo3RWZNbzBNeDNSUHpna1h4VjU3NS92cnA3dTIyV2hMVTkrRXhlN2FZOFNYRnY5T0pndHRENVgxSDJXQmhZSFNodFlSU2dEc3pvT01hdFhRTlUzbHZ1OTYzUXdpRGZMY1FIYmNuOHYzS2pKNDBBMkdoRm1RaHo1UnVhM1NraWJMWWlXOGJPbDl3dlNqbnVBU3UvZzZZV3RYQlBjM3BNK05rU2FJY0lwSU00RFhnNzdLSjJSSm4vcVgyVFpKakJoOWxwZXRNU0dLM3ZsNWFZS0NsQm1EaGMrUm8xK2Z1cjRWa2l5Zm1Gdno5elNVNTdlaVAzTkdwUit6VWRpZ1lNUVJpZEN3KzF2bkVvdEZPb2padGNGTzQ5VU9UbkFuQjN2c3Y1YnY5eU41QjVubHUxVkdjVUsvbmgwcDBSL3llcEpvOGFPQzh5YitEU29IL3p2aDMrdnN5V3h3VFJOMmtoR1JESGNVVW9odmgzUkpFY2VJTk53SUZmeEhPQkZpb3BjeXVONGlPUTBONjJpK2JncVc1dDMyQWZjaCsrNy96TGJVd1JldnpxVjNIUVNpdTNOL3lvV2hSMUFSODdtOEFtcHEyakFyRzN2U0g1SFFLcGduT1BjdmV2RTQrb3FMdUtUUkpvclB5cGx6bmRiSkFXd2Q3ZTI1dDNRVjRTZWZPa3kvc0E5US9CdHpaYkdZeDNydklYRVJGYXJvT2FhYVg5ZTk5Uk5xYmY4ZGtMbHpTQ0hsNFNJeDhFUEUxc2xoQ3JZL1Vsb216SndLNTRRU0hKdG9UN1VZRnlaZzlrTzV6MHQvcENCNHl4QWtFaTZrSlp6b0t3aHdQWmpEUTdxRVdEVzBrVVZZNHE3NGU4VHhmZDhpWHVETHlzVkVjLzBhcEFtTzE4RW1rd1NRWDdQaUJoQ2N3Zkg3eFhZMlljdmNoRzdjMHowaWh6V1FMcjIwaTdRVDI4c2o5dTEzS0JKNXF3NEtDRG5TTkU3WXhRRkJ3U1MrR095MTQ4eUVsM3JHSFpOaHo0bHA4RHdmUXJrUGJWNFZHWDcrOE5sZDBKUHI4OExrMEFsNC8xWEdPNmVBN2Q0MXBxNHVHR2VxbDc3NGRnS1FrcnZHVlJEWUZ4YmRMWGdqMlJsOUNFUlhKRXJkRC9qVlhmcklYa2xPZzNUSFh2WVZhYzIvMXViblQwTmNRMysvbGprMFlVVkVjWWpoTmRqWkNoSS9aMHpndFJxdzlYTXh1L0c3Y3czcmZLdzQ2bmFDaHNIZzNtWUVSayt4SG92NVVLWHRDY0RRNmdiaFdsaGRhMi9vT09IR0IzUDZBZ1IvaDBTUXpONy9MV2lMcndLUjBDUlk0alBZU2E3cktqVVVERlRvenN2YjZuTUMya3RjMmVLcVZieU9rOFd4MGxKVmw3NC80T1NSY2VHU0JyVnVReTNWSzlZMjJmWXh6WXViV0N2bHBBOXNYZmtkZlpkb3VPVDZDdUdKSUhVNldWZC9KSFJhdTVsWldpc0wxam94Y3NuempnNm1Md3BVR3NOZS9IWGZuZkZOUVJ1VTY5VHFPL1pLWmRLK2phdmU1N0FjZkpPRkRKNGhNV2tZbFE0d2FFTEpKZUthUGE4VVRZUkxVOFlqaWhXVlk2d2VhSmlaZS9oK2Y4VW1CQjlWTEhhL2gzdWhLTi8wV2V6Qko4aFVuVGxma3VRcVVoNGJyeEtvL0lBcHJvRVFkQlJNMWJDZGxtRUF2R0c2WlFVYmpjaWJyRlBQc1IySE9XemFWR2pJQURKVlBjNzd0NXJOTTRKNVc0ZXh0SkF2clZ6TWhBajMyaXpSUmIyOHRFSUxGaGZzVG1CT2FneHpsK2JEUHpPcXhtSGdvWFRHM2hGMXJuMFBJMnZKdjVHYTdBSzhIdVVJcS9GNzVOVlRyRWxHelN4V2RlaVJ6T3FQY1lyQ3BzNDA2Nm1iLzZnSHNpSWdnbzgwZVF6OTQrQXpXaXNMdkxwcHd5MThiNkVhMTFRc3FZZndIQUxscUl1UHpPeUF3NFprT0RoNE02RGtLRTA2VFB6Y0Rud1gvaDRpTElJcjdyVzJEK1RzekZ3QURvSUZmT1NYRzZDTUJmaEM1K3JmMC9Hdm9NZFphaHNiUFdVM3orWU14aHFGaVU1di8yQXZhRFVUU2JSTlIzY0c1eEd2RlA2RVRPSmVxQ3hxQ1piK2xZczNIY0ZnL0N5WHVERkdZSTVuSk1wWFltQ0lTMENSL1kyc2dsbHgybUtzaW9VOWYzeHhrb1BVV0J0a2l2L1EyUXd4cWRqaFZ1UWRXZ2N6RlFTOG01S1YzZHpTUGwyVkZWOGpIdTFESzJMYlA0TkZOUkZFaEJrUTdONEh1b1FNWDhiV1Q2RUlEc0tIazVtbjNmTGwxUTdoNEdmK3pidWljZTVOUDErNWw3bnl6MEU3T2MzTWJQK1JXazQ5b1dyR0FvZmZPd0ZING0wSGhQZUVpY2lZdE9BU1BYQ0tsakRWZkloaHNlMkwzV1NycC90WlFrTmtrNkcrMytPTlBTZ3BnNEF0WWU0bXloUHRaai9GSzJOZEVaZmVzRjhKT25iQ2xmdStoK1VKNml0YlkrSVliRnpVckZGQnZ5cnRUdmhhdG45S0V0ZWxxZVBqVG91cWJNTlVnNmNFWGlhbzB5SmVpa3p6V1FWdDQ2cmlwcmRHWitLNkNSbmx1ZVNVd2ZxcG1UMjYrN3VoREJsUkF2NEJjYndBWEMxdkx2RlBHUi90bysxamZCa2FzQ3FwT1lvZjZob0VLZlpETDlRcXdQZUhOMytPTXlVeUVKWXpKUi9HUTYwSGJCY2FQMGtrRGpucjFsNmxvbFNtTk0vd3ZqVWg3NEhoMjA1TFJnenk5UFc4WW5nZDgyZUhnWDEwZk96R05GTHBhc2xSUWtHZ25DdnBOK3l4UTROaTZwZGYrcU9OMVRPdWJJWkpwcS9ScEFyNVlUd25SZ1NCRVd2ZTgvb2N6YmYvMHNySkM1NnUwYmJKNHlZWDlFSk5MRnUxZzhnNXpieGowRTFlVk1FdHh6OTNZaEJhdFhFaHRjK3JsQ2RFNE45QVkyRTNSczhMSkVtd2pIN05xQVJNdTZ0YjF5UWNOWHpCKzVBY3NXTExYamdhNkQ0SmZGeFlLT1QrQStmNUNGL0dUTFNGYW1iQ0ltWlFuR2JING81WmZadEozaW9JZW85dThwTHYxTHg0N2M2L3JrY1d6RnVWU09NT2l1ZDdzLy9KSVYvS3dMR0p2VnpTTEJXY0pRemQydmtHd1AyQW1oVm1BOEwxaUgyYlVFQ0E2elFLTTVJVUYwcGFqbGgxT0o0cXVHRjErVDg4L1oyYW4yK0E3OFlmK20yc3ZoOW9lN0VtNHpUSitrRUl5aG8xaGE0M2liUGd2dVFuTG91SmpHcmk5Q3NpQi9iOG5UaGZSMDNOWjh6eHEyNVFacXVMTGFCVXVJWTAzZlZPRlhoc2FLOHNPNzRVSVd6bUlTdUJvamhyTHJ2Wjc5MHpldW8vaW1pYWM3V3RpNVNyZVkrYVc3WlU2ODc5OHRBM3dVcW5abEJGNlhndndDOFB3WnNHM1VGMC9lSy8zYXZTcC92MTNIRUY4RFNvOUt2YVZBR1ExbUZYVUlKRTRZbzBFUnZKc3VCemthdmxhY25yY1VNRlhKYjR3YVVNTDcvRHdnZWo1cWhDdHVtU1daM2dNRnFaRVFLMHVPdHI3bFhndlZGcThSa3oxMnNGU215Zm9RbmxuZWlicFNLYWNma1ZsWXpMMXRDdXdxdDI0RGNGdmlKV1MwQzlRQ2FzZmNvdkhyaXU1M2YvSGhSUG15bEsrZU1FREg0d0RKdURvakoveHpoUk00bXNBeHpxYjNLVjRlZEpGSnZqcU4zMGVWdGIrQmY5ODRaeXFrV3oyZERUMjdHL3o3Tk5Tc1ZKQVV1aUprWVF6VWFCck1HL0FoTDcyNnFZbUlJLzJlQWVwbTNZdTFQV3pDMVBoZWFjVkVXc3p0VFlMd1hlbkNPRXdCMDhTTGlRSnUxdnY4MkJNTUFFcVpyajBSVExpZ203OVpDZXJWWFhWbHFyMGNRdWJJTm9HY0lySWIwUncrY1kyRTE4TmNPd1pwNWRndTJ4VndiaE5sY3YxaU95TTJmWlFVVEVWQzBmampFNlZDZHlyeTRLVTV0eXVkNnF0cXp6bXViNHNXZUFKMGxoZkd2dUFvMW9yL3NuTjJRbmtveE4zTC9PYlpRU2s5cGhEWVAybFU2KzE1UUQrVkZSekpsbE00N1FHNVRTRGVmYVV1VnBsb2RrQ3hEa0toRy9HSWlCSmYxMUlZL1d5YkloMEptT2ZyVjBaZ3R6ZE92cHowNFBaYUk5Y1JJeEVWNlY4OGUveEhKbzlDdnNjd29aa3VmRHNSOWd3SHdhajg1MGE5SExxMmZvOWRxeHoyZmFtTjRkUVNqMXZuOGdzQWpjdFB2bzVjaE1CQUgzQmE4ejdlMFd3R2xkWmhOcEdlN0ZkVnJDWmtlUzNYMEJoUkNKYlJZaTF5UExEZnB1aWQ1dW5vUWE5blg4Z3R1VXRaVlcxS2NpWmd4Rkw4VWptKzFheHRhdHJaU2R3U01rWFN5ZDhSdjBZaGhxWjQ3US80V1JORVBZbUREV0FCT3JZRVc0SDJzQWR0VXlCdEVxcUdvVFgwODhOQVVlcC9BTUJGUVVpQ2oxV2tLVzluYmtCbURvUHhSQ00zN0lmNUY2djdwc0hBK0l6WVF0Ymp2c3U5NENYaU9XNVZiYmpoT0xDOVgrdWVET1Z3QUlkUlNXK0NTQmJPTjBSK0MvRENhZlIyS3I0QnlrK0VZQXRRZ3p5bW5Sd01sVnpOTGMzYytRUnd6eHlpT0JwZmZlT0tJNlBGNUp5Yi9NaGhXN1h0UGkvODhYMVZCdlFlaWc5ODdOdlRtR3BtRVJmTm5sbTJLUDdVdlUvczZKeTFET1hVZWNyT3d4WkNoTzlCcFBLZXVrbVVHV3BOSnQ1akZNcFprYlVqQU9FU3VxUG00c0F6SklYSmdrNmlLWTN4S1lmWlhkMjRSdjR2Z0lLMWZyaGl6NVl6eVc1bXdOMjlGMlR1a2psbFljZE1ka3BQM0lSbXlqTG9qbGtxMDJwK242TStCMzZvSStOa1JkTUZHZXBZUTVHYmQwWjFjUGc1c0E1Qzh4cjFmOEhkenJRZnhrWHNQZmlJVjVuL3Vmemx3WW9ENTVCSkhSTUYxUS9BcWxDWm4rZWlTRDdpTTMyanp0ZVVSQktRK3pFWnRseHhqbkJ6ajBydVRxVHZXUDJBaTN4TlpqU3ZUMkZzenhEa0Q2Uy9ETXUzSHE3WUF0R3FFS2ZUakR2T1E3VE0xL0xBY1lqYW5qNlMxRHoxQnF6dFlKRkM5SUt3eXJrTUo0VmZUK2o2aWk0WTdDZGY2b3diN25KTVd1TEdsS2U0MCtjbWs1bG1oSjJ3T1JtaDNqQjV1S3krSVhlUXpTUlVrMGZLakNjWGNCMUl5MFVhS3lPK29jU2ZlcytBTFRaNTdKY1NzVDB1bU1RVy9VVUZ2UDBvODFwYzFQTnN4YXVHWFBzN3Y2bHpSRVRNS3Q3WTVmZ1Ryb0NacUc4NFZjUHMwbzgyNDdQVisxOWlTU0FqaEIyWm56aWZOS0hyY0UxQ29VM092UzBJalJtM3lLcFZ3RnRPWVY2V0swMEo0cDMzT0JISmN4V3JiK3o4OGFMRWlVS252b3ZHQ3BXdFNGYzAzUkdZRE15bFlmUXpsK25QMk5pbDMxdHRvekFBOE5YOVBVdEN1ekdDMlhtYmNXam9pMjRDb2liMVJkMG1maFROWm9rWFlKajlnclJRV3lqRXhiejl1eG1nekc0RER3OXNZcVI0MjBaVGR1Y3Y3VGUrcnBEUU1HMFoxODRsTWg5Rjc5RkpKZy9DcTdscVJ4aXp3SXg3b2FEK0dpV3Uyai9aTGU5c3NaWW44eDJMT29MY2pOOGxNWUE5b0lCOVBKOTJ0OFFiZVA4ZWtJRzRvZWgxZXU2SDRBZmRXc0RQUmM2dnhqcEwwUTJIRDFVN1VZTGl6QTNTQmVJOGRMTU1BWXhwRDZQb1k3akFWU1hWdmFOYjRMRkN6eXhUNUczZFkzWjR6QkZpK0NYTm1hZ1BtM2g3d2pRRDZhMVpYSVM4WnpBM0ppU2pzcjdnYkxXd0dlRkNmenh3WGE1OFpXVDM1bmE0S29ldk5kLzZCem5uZzIreGxOc1FOVUJWc3hwdDRkVlJNcFAyaUYxSkM5QjhtMzBHbkZBN3RnbE5BZExUcEt3SjUzemt0N2hJNUxabTRKd0hiL2Z3QlZRZzJ4SXNDclJydW1QZE1mVVpPdkFZYWxIbDVUeW1vUHI0Q3lRTEYzRS8zcEhyOEdSbnNmY21Md3diVDZwTDJoVWlwVHBZZ05RcVhtVkZXV0NyclpjNFJpOHRkeGtnQVBOeVI2c25SRDcvL2VMMlRHNU8zUUoxK09RSzJaVGxrS0xUR05UWDR3b0EzaXpJQnhNcjNVYXNVVkxyZ1AxQVh0Ylc4NzdJZDhrb1pTYnB5UFgzbXJWQkU1YmZ2b29WUW1KVWZLSWdKUHpwVWM1VDFDbk0zelhLajV0UWNLMDF1bmNTK2xTRDB0S2hBYWRwQWlSV2xEMkdGUEhBVElwM1lHdHVybjk0cDNCNlV6VW5mZEVMMEprWFZTVG1vNGNuYTdMTFF3NFY0NFJCbWFlbkRaZ09GYTlGUkNhdktJRFg4U2tuS3hzSkNKMGd0OEFYQ29hK0RYRTVrZmltTkJLRlh0ZSthSHoxM1RBUEV2RzY1N1ZRU3hNUXhKSlhBOWN0enBIemZjWXBQdmRhZWozMUFOTGdZdmsyQVRRWnRLZTBWYjg2UWoxQUduRzViZDZMdFVFZzVOMTFZeVRLZTlDaGwrTmI5WU8zcFdiU2RsRXJLMG9HTUdtTkNQZFg5RXRpcmU2dmNVTEs3VFlnK1NIcHpNcFlaUUdzWUdmVzE4eUQyNDBBa3FLbWYvUGJVVzJxejJJbWN4b0UvNjFuTWVuQ3l5SmZmMGlxdDN3L3NjQ1lUWjM1RTE3TU1xOW42Y2dic0d2VFQ0S3cyNXFqMEwwUE5jd1hQcUQzZ2QvTThNNGpBY1RhUEgwWGpsK1JFQVZxcDdMd0M4ZzVrYTFnWHovQ29KeExveGpQd3ZVR1p6aTl2bmF2MFl0RUpxSjdHMktLanpyTkpDM25vNnJNRVpBT3hjcXJkRVpxSEJNZFNZSGJPM2s4U2h4NlFFRklVWks5ZGM3MllrQ3ZDdEV2TWlhMXlKY3NMMkVacTE2Q2ZvRnREcDBxbXVrZE9uOVI3OGN4R3k3SXhIb25CT1E0T0tuYXV2YXJmeGVpUHpXcm92M2VHRlFmenVTQkUyU3pQbFVlQTJ4dVpxelJ2VS9uNVZ5QUdweE9WcUtIQ2JNS3I0RXM3ZlI3OUhoeFVlYkxUVE1pa3FyL3FHVXZmZ3BjLzluMHpyTTI3bkpvcFhRS2xDa0hpZGY0QnZLaUdsaGVqTDc1SHJLZHhkOXRMU1VzdmczWHk4QlR1bEFkQnU1K0ZxRmlZR1o2UjQ2R3R6ekl4djRES0x2M242MFYyQVN1L3gvaE9tU29IeHFQTC9NOEg3Q1VUYk9jMjdsd1JjSng3eGsrNFFyQURtM0cxUCtjVThmOElOL1dhc05tNXlDNVVUQjBKSE1uMWovK0hkMldBRU9HT1lUL2RWY0tJVmJpdlRMZXFYak5sQjFpSnJheUNvWDZ0TU1oOWRzUWNRQVpieXdWWjArQ3lQalU3NVBFSXAvTnN0NUNyZWhKMTV6U0dwanZqczBvbGxNNytIcUIzTjIzYVJORWtIZXRsdFlkbmhibGNFY2FZUjY1cFd0bTM1b2U3dk1Qd0s4VWZDWk1FRmE4c1hjbUZ1MDU2d0x6eXE0WnhWVGRrSGc0Z3FBS0N3U1pERDZzSEhlcEc5SHAzeTV6aEl5UWxpZkJ0dEpOQnlzL2tmNzltdTRsb01pdzhpUVFCY1hxUDlQbXZTbTVRTDJ0UzMwK2pYNzhPc3Q0RW5XaEN3MWxZTXdBY0VhQW5wM1lMY3lJL09nejVWSDdwd1hFOTRDQlNNaElXYzY0a05GUHZXL2o3WktCUklBTlB2WERaQ2Fpd09hNStsUmprclZNd1ExbGJjYmZWQlFwbE9EQjMrSDB6SkZuVi8yZkJreEFNNWprYm1UV0pkY0JPYTFoanVrQUxzdVlmNDB0NzlheGlUN2hDUm5kaExzUHUrN0VPemt4MlU2WG4zWWFxUE8vclVkdFZMSld5STZOVmVsMU9XNWZVWVRXdTNBa3pVVkZTQ1RoV3N3NGwzaFpUalkyakdVamEreFRuQlNNYXVpWVJvZTJ5YU1LRTNmSTBNTUM4Q015NnFVNHBTUHloaTlhNnl1Z2MvTmdHV0FST0VnSWRJak9MRmhBVEU5aEJPTkVJTDRNVHNEczBsdHN1dVJ0cENzVGRHTVVRbkUyQzhpNWFrNWt4cERKK2llSEVVVGp2Z3RnaXJjMUMxY0x5VVNNMnlTaFYwQThIa2djZVFyUXQ2ZHNNSWs4eWJCRVhsL2hCYjZuZDY4N2dhWXVRNWtlTkpmS0ZkbjdXTUIwQy9aYUl3TkVVRi9IVlBoSTh6bWIybCtPQVJkM09oUWY2Uk5DdWJwY0ZZaWY4MzVpSnA3RUxhTE45ZktHTHdzTk9jWGFWaVQ4Q0V3NUlxbitnK1orc3E2b3BtK3RzNU1jcDE1Z1ZqaHRmTThVS1hLVEt6djQzTUN3clB6djBGWmNzYWdST2dNdlI2YzJqRTlyL2U3anYwVFkydnlTSWZvbUlzVG9wd1NoSTAvTE9jQUs5dk1ReUl2bkNEcGFIblQ2czFOaXcxd2QxM2FJdmszcEpncmpPUjNNSFBpcmJVSjM3akkwMGRhOWkzOERPWVV3S2VXUXZQT2hucHpwL1JUT2RSY1Qrbi84QkxRVU9FNUNKeDNSOVdWVTNpbkxkWCt3U0ozbEczTE5wanNkY0pvSzU3YWpIZE9DYTNnMGNTZGF3V3AwSXlzRHZoVWsrVlZnMW5pRVpqVUZyZjNtWnNtVTJvMmdsMFZORDVHKzNNR1QvV0NZYWZtdW5abldwTEMrcEtxUjRneWpQTTYrNm5XOVNkZ1JvODFEL2JjS0JRUVVGSnZZd1hWb1g4VUttNzRWMTdaNmlEc0M1dVRzZGIwQ1dlUHNkbXAvNEptSWVROHRvSjFrRE5rZEQ0QVNucUVrM2twaG5OZEhaWkJLOGo0WjU4RnRqem1UclZmZ1hxUjlUNnNHSWI3V3BTdkdYK0FJMmJPVzQxMGZRVWNjUnRUcFFOVzl2VU1WblhISXFZT2EwWnBvUlN6T25UM0VlRnZtaWxOanhjb1kva0FMT0F4aEk1QmV0NVRncXkyTHRCUGlVYnQwNHhweXU2MjZ6Q3VhbWlQQngzREljMjlocVZITFVYZHZ1U3hLeERNWjRyd3hIWEkrTlc5TlJabUNvelozenFUK2VBYXRvRGM0ak5WTzZWdmdSYzcwdi9xUVBpU20rZE1kY3VzNzVrSzBKOUt1V2d6aTBtODZycVZHekYvcXpXTU1iVDB3TGVqa1U2U2ZoZ3p3ZTB2d3JaMmNyTXMvRlR5NVFjNFlDbysvdTZmdVVpbWZmQ2d6NlRmNExrYTFJdGhkeDJ2REpxeGJja2dWQnhydnRvM0c3dWsvdVh2ZVVKM2V1OWZGa3ZMQ2xNUkJ5ZEU2Y2NhaVVPc01DaE9EUlFhQnAvMHVDVG80TXZwMFY2YnN2a0hKNGZhS1RUKzhXbXpOL29mMGk0RGlVUi9uSENPODdMR0Q2VmpmdmtIcUx2LzdiV2ZYZHo5OUY4djIrQXFiQkhPNnhwNWhwYXRkZFZVek1DTlRBMHl1VmZQcFNwL0E1S0FlRGh4N3NxdTBQNFVnVVF4bmxGQmlxZWZkS0drNkdza0RsMXk5STc0cUdKYmdMS3VWVGI5L2NyTlVqMDZCMWgzcTlqaDhyU21xcU02a3dTVW00RkEySHAzdldNbzg1RE5TS1NUbDcwY2wreUpsM2NVZS83bDh4Z1lLWmN1eG5paTRDUGc1Y3B3NTdKVFAvRXRCSW9mbG5QVGc5V3ZBdnQ1c2VzSkhYeFlxM0gyQ1owUWw0eFh3WEM1RDJVaXcrR3YyTGtveERCTzVrNlNTNHAvdTFtNWhFZzJpUEo4TFRxb21pVDlUYlpINTJ4eVhFdGpBRVVab3dlQ0VuMTBXZ094Z05nUDAvdUpaM3BWWUxOdWFkMU9jQW12NUtKQTQ0ajFIWDFHQkd0dEYzN1BTRnFPYzc4ejkvYVI1bFJrNUhTdSsvbTVUY3V1VXo2NXRFbkFaeTA0TW5DTjAwd3d3eVFoY2gxcURzYjdJYXpUa01xWDdNa0lPN3gzTGJiQldrOVQzS0JId05xR2pKSTJkU1kxNFhBcFhXMDlTc00zTmhSV3RybWVRR1dOMHJGL0RmWEdVQnpPM1ZQcmlLVEVlb3FUVU15U1doQUhPaEF0SkVWZ1dVR2NpckpPMnl4dkU4UXliMEx3a0ZhMEJlaFp1RHdlMTBUTVlPRHZuckdMcC9uUFhpZ3FzUmQ1QWNlUWVieXF3MXFkQ0ZlcFdSWDhkZDl2dXBueUs5dFo4UDRmQmlldjdyZXFHTG9MZFRwekk1YXJwb1ArREFWalZSWGhiN3NrbENjUStaZUdsQXlBWnFQMEU0bUNkc2NxYitUa1RZVm8wVWZscG9UbmZNNXhHNjgxWXVqMTdlNnBHUU1CTHN6SC9Ub1RLVlAyWEZqOUFvcy83aDZSeUpjcUFjd3FsYWFxSGwyc0VTc1JSQkcrOUhUUVRkRGEyR1lFWkVQSmwrY2NGaUxnQ25aclNMQ095WVBDaTAvRWovVWR0cVVVczZUcFhPYW1nbjBoWjB5SkQ4NHh3RzMrZFJkaEV5NmVuNTlvU0c0SGlKczV6UUd2ZTNRNVNsbEdlNU8zdUFZcmlxdExoV21VZFM5dkEzNU0wNlpTcG5WTGVMeG54aTVpMzY0ay95eTVGc2hLbkxhVGM2TEYwWXowL0xib2NDZWhWSkxOYndiSk1jVEtSOWxlVzF3SHVhdWFkMUp2NHUwOGlUKzFDckY1MGRQNjVVVEVuTWxzYmdvYnpobWEyVFRWazM5SStreWpTWWtzZ1JPM0JCUDdDY3JKTGhmYjEydDE4ZmdRYkY3cVFIYmZSMzZhVHBVQ2NQSkh5OTZ0S1lwM1J3YUhCNk5ma0pseG1tNUk5dEoxb2ZTZU9sK1VLMm9HYnFuODMzR1R6L1FPNVQyRjBmd0JjSjdvWWhoc0VwNHp2OHMzU1BacSsxZFo3OFc4RzRiL0JnRkdMSUVQZWo1UVNDOHBQdEQ2NnR1ZDZxRzVERVhYbmlaY25KRVlWR3B5elVQMDFUdFN4SzVNKzdmaFYzQUtrdmg1Lys0SEtVMXNkQlVsZzAyTVNTdDUvNU1HQ2lucElZMERXendpYVdYOU1wTUQyT3VTdXk3clZYZUh6ZWVmRzNsdWl3Y2ErcTJyM0xFTE43USt6NkVOcTZLMDg3K0hzZm10WEJUcVIyNFBwbEVGTmFPMVh3VW42c2Z3aDU4L2RKbCtnbmkwaVBRS1JwazU3dW8vR2tRUGhLb0hEU09wMm1KUjZOT0Jzc0tIcmxHT05aQVV1cTZzb0p4TjFhSlRsYk5uZkN4SGhlRGI0S29jL1ZXTGhocEJLY1gxMmpTaHlZU1VMMzRSTTVxa1pGWWpBdUViUmluc20rR1VoOFhHM0NRTks1OVVNTEJiNEVhY1Y4bXJSaG1Hb1RFTzV1RWxLVzFMd2tJQUczZ0VPSFdGdXgxTm1YenRxelhuYTZ6K3FtdlhqeWk3N21wL1c5YzQ4ZDYwRlR4UjFKTlRQNjNaSTNDV21zWGZVUTlJdlF3VE1jWkEzbG8rQkJTQkFVeUthYmdxc1Z6amNOd2MyZnNXa1ZlVHFNTVRrTUdDcUF5L1c5bmlkOCt3eTFBd0QxS0Z5UXFuSkJQUWd3OWMzRmZRUkR5d0ZLTjl6bDdaeFhSaDlxVmVuSTNwUkpoSWI0Nm8vVDRubkwxcnE3d2F5U3RDYm9tem8xa0krdFJ3dWZBUTQvdDFJamlidEhaeFlBWWYzcXMxVURBNXR6U3VxRUFWUGx3QlRGckE3WGFyNWhIT3N5dlRXVU0yczI2a2xZeUpEaFZZdTR5Qk15Tkk1ZXZpUVk1VC9EZkpWRkFwMUZHc3l3anhIN2x2VHd6T1o3R0hUbnRyajJXTlNjRnJIV0RFM2M5K3o3WXNTbWwxcEtMS1pBVitQL2ZxdnNGT2IrUEpGVU90S2VVcktUUEFqczdKakVmWlIvK3pxNDNoSi9WdDN4SlBMbHduZXMxUm1MdXpQdXJZSHE4dmlaMzVPbDNEZnIwd0xENTA1RWdZV0hPM3gxenlJcjJmaXU2REVHR3RXTHZoK01jMFhxbTNOQVo1QmczamdlSHNKSTUxV0pzZEhPRUhNc2piYzZneEZXVWdFZGthVzZjMy9Ldk1OdWlPOU4yV3FVYzE2aDRvQVMzRy9YRlJEVC9lY1NFUHplOEVMSkVsQVFvVWMzemtlMFZaMGVyZFExY1NpZFFUUnl5aUdBM1JoTkRyaVVkZXdRU3BiUGIvc2VYUHBnL0E3SGNxTnBSdkxOZ3Q1RnZBVzR5R0pHTzNjZHQxVEtUNXBOQ2VGUno5aWJPQm5yaHFCREpNOXVLTVpGL3hTNEljbUZnR2JTcE51NjhFYnRFeTFqRmJVWCtjS1hxdEcyZ0hkUjkzaEpOcDRXWC9OR0diWWJrM3lXYTFRNURsbC9DUnl5anUyLzJXdEJjTm5yaXQ0K3AwOGlQcFQyckRaSllJT056Q2Zva0dTOUp4bHpic1d3VFJlQVBvaDhjWGV5VGRyRmhNK3Mvb3c4RHJib0lzVjRyektvSW04SXFqbm1pMlcwT2tyaVIwVEhwRDZoZXlMcG9rMzB2ajJRNmdETHA3UVArVDlTM3FUbXVaUWxmRFlaWTU4VUdOaDBGZjVtdk9FbXFta2hpNThMdE1rOEFCWjhDdWsrMVdYNkhOWmJvU0FSellkUktWRWxOT2RIVk1OMm5vS0dTREp2cHJkTEtSMGp4aVBHb2tXV2V1SUtmNko1VXFTWTlVSXNzU0swUFJ0eXBTRjVYeXlsWVQzWGQxQ1FQbUFOOHRoaGNtODUxeFRLbnRVbUx0NXd2WGE5VzlEdzUxVHM0L0tKVSthM3RoUFBrTnkwTjcvUFJDYTcvM1kxWmZyMktBalRXR1pxVXdsQjcxRlZBajdURFlXMjIyL1pKTytKcGVYdWs3TmpKSDJXOUZLWnhrTHhoL3NES2Z0WFRuK2Q3a0tIeDlyMUtoOFk3UUwyMDB1MklKTmJxcnpycE5xS3BCR1NXcW1SZDUzcjlMYlo2ekU4N05oMGlsd2NQaUovbGprdzk2VzdybkNNWTNnWEJveWZJeEYyMzFpRGJweEp2VW13RjhMalR1WFlyVVQ0WjhzTzljaUQ5aXMxVzlaNTRBYkczd1BtWVZ4RkEzcWE3a0ZNQS9TVlB0dDFUMWc2d3BTRmQyRndxc3BoYWxWdlpteFJwVjJsZEpwdTdCTXR3TTMwUGoveU94Mkh3SUg3YVBLUW1jMEZNTWMzYkVxVW1DWWp4d0EzT2MwY0NaZTRlSmE2VDlaaTdtbmhRWUU2QlV5YnYvZnRoZW1makhjcUJUTzlrQUthVlVabjBINnFQNHRZQWhRQVhJRUVMaGwxUlF1ekFaMFVSY3FUMUgzYXl1d05TQkN5clBYWnBneU5EdW9RbVJ6MC9DV1ZTSkxaWnVnOTVZNGRzRC9ucHZuY1B0V05GaWxEZnhXQnJXSHFVbUlCcS9RUTFmUE1qRWpsSDV0UjJORUpmMXdnbXpBZ042Smp3eU5aelJuT0p2aU0reHUyL3p3YVpIdThUazRCaXJmOU9WclRCanVyU1d5WlVJY1J1TTlEM0FuTGdBaFArMXhVRjJMSWhmazZGUkZzd0xOQk5Mb05VQ3ZNbUgrWkF0cVF4Y3VoOWZQQ2pDMXAwdW9HaUdrT0N6d2Z2SE5OaHRsSkh6VGMxZ2hhZkpIVklBMlo3U1YrQVhrUWtEbkpBajBXbXdmRzVINDFNTS9WN2RqTUEydWl6TXlYaUJ4cFFBazhVTFMrbm9CQWdxVkIwVmNRQ3pDWG1FRk1kYWpST0tiOFNHV0p5QnErdWc3RGJKekpZUXRwc1E3Ujd3aEtxaVdBM09YTDJXYTBGWFBHV2Fxa1VTbGRHTlJsMmZiTGdFVlU0V2xRaHRxcG4wVzZ2RDgrdVVkdEpHMCt6cVpYWFpDRnZpcHE3SGlpRHNNYVJzVE1XTTZNc0ZMUnpFSjFqbjZKTzhWWjhYQzJFcFpOSDRDVjYwclRLZlRMOTNuQzYxNFRKZUVBNnNjSkw1TzBZODBweVVHeitWYm50N1VnTVV1WnZJcDRWWnp0RWFIZ3RBYUNyQ0JWalFJY2F5ZzlaZkd4SmpaWUtYekJQTkczVmlWZDlEcjRRZ1NwTnVQOEkzc3J1YWdKT2hkS3RxcXhtSEpiZEZYRCtlUmNwanZCdlZ0UHB2ZEVjOXV3Q0E5V2FWRSt6bHNzR1RiYkYwK2FSZnY5WlA3WW14RGQ1SGZyVHlnbVg3M1FUTnpNeDBIWE1XVGtyZHQ1RDhlUjBhUytMUkdMMEtvQ1FFcit3QlNTUlNYczB1cytYYWtCK0pydkhmVmVORWpxaEw4U2FKMVZXYTM0MWQrUmtYc2FNVE82ZXd3QjVYNVdGR2lRTWlSZjBkVHd1eWpYclhCZ2xKL1FxczBiUjhWMzA0MWN0YWtaeGMyOXNrd2ZUaGhqem1QbjRDaEgyNHRqVjZBbEkyaGcxVm1WMitSUFg4cGVXZkRaNCtRYUlIc1ppT2hKZnNNbHp6QkMwY3lmRXBFa0N3U2xHQVFXUXQrSldLYXJKVmhtcHZnS1Btd0ZTK0hpNzBtRmQ5eFVXSUtrZFoyM1VCWkJIZTVsd1N1Q0NodFI4aVgyV2FHTUFWYitKMERmcUQwZC8zdjROSXg0THQ5N3NvTGZNbkpLTDlqbExCRzlWczBGTEJvREpSU0tWN3hDK1NSOWVvQ29HK0libmVuQ2ZaUllrdlI4bmZTMW5aQmI2VnBUelZVb2pQcmljZUpiUHQ0NHB1RXdTdUsyL3J0MTV0MGZZdG9zVFIvZU5LNTI2RFNKVjFyaFRHR3ZuWDFqTUM5WVNHNi9DblI2elRRK3lyd25sTTBjeE9RRnRUR3VraFRDR2R6MGJTclNCNXFJR2V4Y3hRRGhrMytRcytLQWN5THBIWEMwSGlBSnZSZGlTSjJMd2I3dDdlMDhzREdyQ2I1MFN2UVNQNTBtK3VFeEJVNjF4L3A0bVFFc2JHK0ZDZEt5REtrOU8vYWRLMnZIVXI5WWdxajRuMHh5b1RzNHBJdUtVOHhMYm1uUjQ0M2Vwa212a1ZwaWV2SGdDaWtHSUVHZHU4WGd6NXBmN1F3UzZIeENzRFlwM2xPeGsxYUZUa3J0RzJkUmI2dHhHUVpqUlljT2YrYlQ5VG5ET1drcldhVmM3UnJLMDNHaW5UQlJENGN6ZjRuQkFjbHRNa0JHV2NzanZPa3I3SEZ5VHI1QVhhbVpJMTRtVG5naVhJakdHbTN5T3oyZHZ3aTRrVHg0a2E3Rmw4VVV2SThrU1RNNUJEeDJIMHBrM05BdEMvZk9mdTVia1M1Mkh3ZGlBR0VKM1ErOTV6Q1VLNDJGeTUreXloRDUrek4ySDQ3UDhkdnloU2VHREx5cTI4QWxPbHI2b3lrQmZwTWZVejg3L3JlcGtaV0hWY0xoaTNYQmRSOXJmUlA3WWVRVlBtU2FiMUFyWHhoL2VTbVR5YVZEZkQ1U01VdGlPeVpVTDRCVCtEbmorT2pNL3oxTmFUUjM0eXBNZWo1VUMwaEZ3L2xlTEZFK3pBdVBocGRNQkhSQzFOa1M4V21rbnBYSmptUkV1Q0JtNlppWDdqOVhwSURlZUk0OCtRNHhuZmRqalQ2K2k5Sm1IVUtwOHgxN1JMS0Q4dDAwcHl3d1BRZUplbXYzZk5PZ2Q4K3NxNVVsdFJvMHJxYzliVlVKeUNyUUNOSnJUUXQ0RG9RVXEzbnQ4WXhkaGZyK3VXcDJRbkUxM1lFdnUxa2FVREcwN096WERjVzBkcno2OEt6dVNTeU1sN0ZKWUpCSXY5eW1XS2lpWFNsZFNSazgvZUczaGoyVEVSUkRnSS9aMUxLc0RxSS8yYVR6Sk9HWUFTamxqZUpENXdDeFB4N2IrVmx5dUp0cFN3c2l6eTROZlp5bFZIRkk3R3oyUVZFUC9YVE9TNGx0S1RFZzZuMVMwZUJZY3NWSmVUUEk5WEpMcEZSeFhKNmhhNGNWa1hLOG5taW9WM054V2FJc0wySVJsVTdTRGE5MFhwOEhnam1FZmZHOFo4RFEveW8wbm1JT25kcXRCMk5ZVjBTTXZPSWRyZHdWWjBxS2QyaEZqNHhVWGpYTUduN2RpYVhHVlJ3VUVtRU96dXN4eHZISUtBZzFWRFliRGV5dStlbnBRdGgrU0ZmRXFPVDlnM0Y2Z0NUUHVTUlF3bi9lYmlYc09sK2V4aDF6VllvYlVrMGxBWGxUZDJOK0RTSFdzemxuakNlRE5IV3hqNXY4c250WE1SY3Y1SmxpbHBuUU1ib3hyUnRnWFhlc2tTSTlrN3pvTW9VU0R6TnFrTmMzTUlHU0k2WXRuV0RFby9LeFZlSjJrN05lTmh3K203eGkwTlJxbDdVWWo1TUg3RFgwbkRuTzVtSzlwNGlFRERoamNhRzNqWmxEOWR5VkhTRXA3SnpUNWorV0hONVZwSGovRzBEa0RLUlF0Nm92YVlXTGtxVzhIVzM1T0QwSm5PaUR5Vm9lbWZZcGtBVEdDTEZPWnRKWXhJUWJ5Nnk3OEZ1aFhGQ21nY1BaczZCdUZOOEUrVXVLUnhqK0c0bGlINkhodkhtREEvWXNOeEZsdktvUDhqazdvdFpUbStjckoxK2VsdVpsU3RuQW8vTUN0dE5HMkNZVkZjMHdEQW1MMVVvcjNiQ3dhS2VLbDVFU2R2V1NYTlJUKy9VOUFUeGdEWlBxMjJPQ1Q2emtDYXpyeVAyZnBLcmlaWDMvZHJiNFY3THlQYzRWODVVeFZ4MHhlMTRURDRlMkZkS1h6TW9PeGZwK3FGcituanZqWnVvQ2d6K3BoSXByYlovWXlsNHg5WkwzR0JkMFZmYThhUzg5NU04Z2NOU2hKNTN1N3RMdGRqejBGNGFFUjRFTnBKd1plSEtGYktnZThUSmgzTit2RmE3eWdaaTVCbll6MnIrV0IyUmV6SmUvTzcyRi95TWJmL3RuenN0ZExGNHdtOWFxcm5iNGZkZU1vNUhEVDNtZEhmVnUzK3h5aTZtUmIwUHVYUzUyQU1hSndSZTM5RFNZK3JTYklvcmQ1Nzcrdk5xMEE5VHZJUVMxME1VbjF3ZHl3bVU1QVZpZmIwR0pHdC9ZaUNPZEN4QjBZSE8zUzlHMnkvU2kxcjVha2JmdjRWbjl0b1FvcFh6Z213ZWZMeFE1QXFVazZpRFNtckhsMWN0MWFMQVRPdXIwVXcwQ2pxL1ppRDlhdHVXNFd6Qk9DWGpONHp4eS8zSFNsMzZaTmpla202QzFXWGVtNHlWenI3M3QwM3NIakpTRW9xMG1sUU5VcWRiZ1VXTWtUb1FwVG5HSzh0MFdEK0NCSGc5UmFDc25UcGxsdC9wWHRlMDZYQ3h6M0VZa3UyWlcwUlRpa0t4U1RWLzI4eFY3S1VRYkhEVnR5WWllT0wvcktLTUNkYkRxTStSUHo5V29palEzMUI2aE1vTlJ3bG8reFBudnpRWGdLUmc5bUQ0R2tpamc2RVRIT2Y0c1hDVGk2ZFhsb0phTXJIaW5ld0d4VXM4eEJaT1lMRCtETXBCNXB4MXpyV1huQ3VTS2lPNHhzdS9YSkx3SWtoUEhYcFUraDYwdjFWUnFNZFdtcFNGcEVtb2xWd0xaRHlhV1RUVFVwd0ZBS0Y0WGd6bHpiM3RmOVl3RGRhSjFTZzk0VEZkcVRKem5nT2VjY1JadFlyUkpxai9Yc3ZMN3J6Q0c5aG5nVmJWK2o0MHEvdWZVRVZ6VGtGVjduT1RLWmU0elh5QVE0bFprS0dmTDNTeTR3QTNNTGt2L0xqVkRXWmE5NkxRSmRhZ1FVNFQ0NGtqMnEzaGdsa0RubDBKejRjR3dNejlkQ1hPRzk1cVRNM1VjZDl6ZnVUS094M3VDMlJZYldDcTdQcjMzZ1ltQVNDSW0yelhJQ09UQ1o3Zk1PTGU4Q293aGRIMWRIYnNIMGpveCtJZXpxTnQ4YWUrdGVkdFBqdDR3bWhUSHl0TE12NXc3bW4reWNacmVFS3dGRExyZS9JMWZ4R2UrUm4wbUNiMnFsVnBaaWpyS0dncmswaEd3RzRGOGRvWmFjbWZMSUdlYXlnQnhtQzJpMmlHRDYvNDE0STF0cjB2Nmc4ZWlCa3U2VDhWUHBkTWhEbkhmUWZYU0t3R2dieDlIOC95S3dWUGdpNDJkanpiRi9lUmcwR2NURTlJTWttQUR3OUJFWTN5RXc0cHVGMWJYRFhsVjRQVHpjdndadlBMSTRiRGUrR3B5WXQvcFZ6TDc4S1BxM2g0MVRRSS9kamxid1hEVzF5R0pNeWcxZ1RlMTgrd0Zxei8ydG0xWXY1Tk1TZ2pwTmR1UlozN1J2NFhvSDM5WnBHTk5ML1lTMmp1eE9vdCtDMDF3cTNxb04wWUdXb25CQ3dndmVDOHNjOVhqNkUycnB2WGxORVFoT3hKVU5HY1lTR2s0RnZSZW5wQmZ6UlRBcDZlTDExZHFDenprTFZoQkRxM1pjZXBubGZvMFRWbDJERXhOZFRMTDhrSm5NNHhtUldyQWlWekYyUnFnQmhhMCtwaVViUGhsd2c4VzcwaVhZd3BzbVFlRzEwNVhpam1EaDllVW44b3RzdmpJbDJNQVpUZ2x0bDlDbzRLVnIvM01CYXd4MzI4UU9peGwreE9EWEFiZG9NUVAvY0cxNzBGNWFINjRqZUpSVFQ3Sm9qaEhjV0IrTFRqQVN4aTB6S0pqR1hXNCsvZmVsaEIwZ2syQVVBQ3pjUlpXMVg4b2ZqRURTVEhtUWRWdEx3MDRZMFVSZDdCSUp1WU5ENERCRjAwZ3BWcWJ2cnFwSzNsM3MrWHVOTUNtV2RJMFVJN0RTb3VOT2l2TmF4Y3ppZWExM1RmRDMxZFN3VVpHQU9lZkdTbnFlTE1lSjRORmFkb2dtcDgvZXpBMVRLeHU1ZGF3OVUwd2pHb1o2RTJRdW5ybWsyQXJzNHc0QkExR0FnMUtlSi9qZUh1dWZ2ODdWMUpmQ2JkTzlVQ21MU0hlNjVQMmNuMDN6dE1ycVZ1MG5GbGxiWm50VjB0bXhyaDlQN1NYckRiN1YxYlYxdXR3Tm1rSEFKa2p5Y1lQc0I0K1FJNjB6dkZLMXFSNjZubXVZMHNpYWtXK040ZjRDY3dHNEVaYTZyaG9aS1VvQ29uTmJFWWQ3eEN4cTZ2WTVqNkcxZ2lyZ3J4Y1Zua0U2Z3NRQ2pTemczSG15UHNhUG1KalQ5bnl2dExvMExLcEJwSU5LNU1NbUhMclpwN1M3cDhjK3JiTi9jaEViNTJ4eUpjckI2bFp4Q1BvR0FhSjQxa0t2UVphZE1BZWNtbk9HeTJWNHBodys1NnA2WkdUMVp0NFk1bUF1NXNZUk4vcTZWZ2JqV0MzdUwrRE13ek84dXlTMkJUdVZTNFY1eG9Fb3NLNmVBV0xwcXRCU0Q5OGd5Q3ZjUVJnbU12ZG1vWG5LeXlNYmRESHJVdGFwVjV4M1R4K2t1K3A1bXhXT0dyTWExeG5KVzFhMzlMM0ZBQ0hZRzY3WUtiRkx1bW5GS1NjWEdDVzNYMmNRbVk2L3ZBTEd2YUdlcGR4TG5weDBwZmVVTG42R2NiMnJaMHpkUHdnY1dnb0JXNnNJUEFZSHluTmVPdmIxYUNzTVVLc3A3aVpha3lIQ2ZOenNKWkhHM3VFVmNYWWcvRGVWTUhWRnpxU05QZmx6UjRCU3NoeXdBaGhGaGtxajBhYjhuN1htc1Y0UThkWVBaa015UFZRNFlaQmNMekdBTmtXakFKQ1BmaWZnZHdGUEVvN0RGY3l1b29Fb3QvSmN0Qytla2VGbTVFOVRjZC9oNnY3d0JtMGRaemlkZ2V0MFZvNlZRaGxUSUN2NXJOR3RJcnE2bEd2b0drRlRTU0IrMVBOSlQ3WGFjRFVJM29qK2dOQW40TlRmc2h2VEdQVWpBenorMlpDeDJjSlIzeGxkNGk4eHU3eTlVK3pidkV1RmRVdlV3RHBtamRMWmNoLzdwMFg0amNzVzRpZVZTVU5DeHJscjliZmorNnpVUG1QQWZOYkJTdHRIQ3VGUVhTUTF3dHVoRFhZaEswdEcrbXpmSUlCZXZkcTFLaUlKdU5HdlVtVEJ0ODlXUzJ4TWE1akRodWZwc21RdlJ3dG1WQmNPTU5WRnlpVnJMQWhnRXRSLzJmb29kUGl4bVFzczJUaDlVdEZ3aWFQK3ZnRzBGSnlZY3FwMVplL2N0K1R1U2xDQVd5TFc2dHl3QjM0UEgvcExsbmZ0L3oxV2pxTHluUTdkb3V2TE1PZnlEYW1KQkh0SVpzNFBHU2ZtZURFbDVyR01laU54ZmFqL2IvdzEvQklma3JJajVoZFZFNFhGdG5pSjJPVlBWRjYyQzNLNFdWZUlueUt1blladjMveWtxWjh0V0RQM0svTmhOWnFRcUV2STduVHJVVTEvSmFBMWV4c2RLZDdtODFCY2pIeW8zU3F5T0NUVWZqNXBTQnhLV0h2OHR5aEJmeUpNV1Z3aXd4T0Fjeitmc3FqN1dpS2hnMjBXV05YWFFKSzlsTGtlN0tYcHE4RkNoaFc1SS9PaGVZeXphNFZrTEpTRjA1NmdjTlFCVlY2dmNaMUFNaDdtME5FOCtlNVBON3VDTXVreituTFdhcWgzbkc3U2x4Q0QvZFpmY0tZaGRMc3g4YXZCb1NPOUcyUEtKVVkzalBXVnp5Y0tEVWluRWpmMHNtcDRybmd1MUpkSDBPaGE4QVF1a2RvU0hjVFBiSm5tMFZJVkd3eEkvOE0wL0RmQnkvSXdvTUwxY01SSWlsUFBNR2lmQUNuQ3hTNTZQNHlYcWREYThZRmZMVVloM2cwemF3bXcyY1d4WjhlZmRkVE5FRXp2MGM4Vm9oNEo1RnJaT1Jkdml0NVZYZ0J6SzRJa1BpRlg2Vjl1bnBPMFB3aEFsL2JCbENkL01QN3hwRWVnODhzOC9NOW4zWmhYeFZxaUgvbGNEdEFaSnR1S0V2enlaMmhwVi9mT2dkN3cyRHJzSUFnVDJvcGR2ZDB1dVk3ekpLYkUyMTA0YWNrQ1RvL3dHbW1KWkdPOGR2R0prNWN1amplRW10aExxT1hwdWNhRE9mVXZBWEcwME95VVkrRnZWVnNVa0w4WTdvUmtHK2ticXFhOFRkQkZDa3BkSTl5WTN3WkkvQ3ludER1MmpYUU5sQTJDWmlnckFhMVpQWTFqZTlhYUtMZ2lMdGZjdXZrYTU5bVI2SHlMOGhOY1BhYlJhVENYR3BQZDhDL0NjYzlVRDJCWDhjMHFyRGRDZEQ4N1JCWFRrRmplejRRM25BYVBUQjZXRkF2dDNIc20vRjBJU2krV0pZQU5pSXFvbEd4OW1qRjlKQWpxVm9rMGh5WVUvcGZPblkxU1FMdy9WUGlWS2w3cWlTUk9LWXZESEllbDdvMndRczlqTys2N2cyc2FyYkxUUDlUa2NzRUFsSGxYNU13TGZES2MyY1huZjVjY0c3TTZ6SWJHZk1uTWxPWjJ4Uk5uYy91WnpXYlFHb1B4KzdwQ0oySG5oV09mYTVKaDhvMG9HTFdyM3lXK2tFTnVEM1NiTDhla0hnM3lWY0wveFQ3K3RLcmh6NHk1VnJTQzdOdWNVL3lWeUk3VzhHQTBUdEYxYi9WUnNtYjc2Q1dlTFBNYi9WQi9kYTFsaVJTOThnbFlIdFdwZ1B0QldsdWZNTzhjd2d4ZW1YaThWZFZzeHJTNnM1VUU4T293SVpnSUNwYW9HT01KamttVllrMEFsMFRSd2RrVmxsc2JkVnFkR1RQd2xOUXNZczdSaHhQOHVOdHlzZUQwTE1pUU9xU01IZUhnN2g0VlphaWpGalJXQUJNTVZPYldGNTRGa1JWMlBrUzczNUhXTlJaZmZEclNXNEVzWmpMN3FBVHhFanpTOG5XR1YzUGhJYjdxYkpHT3I1WE56d1Z3QU5uK3Fhc1krdHloNWh5WUpBZ1VQeFA1ajc3c2lXeUFRRzNSd3NuN0Zvd0FpUHR5VVBkWENUUVR6WHIydHU2REtnYkJvWURzNXlObXFrMW1qbnY5ZFFXOTVnNmp0ZHg0QmZjTEx0YTFsTDlJOVAxa1pTNXJvbTgvbExTSFBxTVp2aWJCRi9SWWsxa3dFYlE1WkZBcUxFN0lwVmx2TDVYR3FkL216ZnFOc01DMlZqWmh6cjIwYWNIZ1hYd2ZJN3ZYa1B4YzJvbjhSTXRmSkVCenN0WVNpclFxOVlrK253T0VjK0JPTFJVOTJlYzJCdDNyZUxzNUNlenJiOXFpbHdjRk5YOE1CRit0d1V4b2hVQkxrY3VIWnlLWnFqNkJMeVJzeXBBVXBTQ1VYRXAvRVE2WlVJdDNBOXRld00xbTc1K0NmSUZ6WVI5VDZDMnc3a3BzcVg2ZWJuNThtS2UvVDF4SCtQcE5ERklnRXZzS05UcDJLL21BZFMxTmk0OExYWXd5cC9yREZhMUFtYTBrOTFIRkk4Q3JWVjVOVURzQW1DR3k1cGpoTWpZNGRZdGdwa3VMMXhHRjVjZnNSR1BaM2psakkyTUNrTHF4QU9XWjU5dm8yRmhJK0RINXRDT1I0NmhJeGF3ZmdIamROTXJTMml6aTN2Y2x1WEN5dmR0QUpHVFc1SGVKc09BUHNrVk5yd3UxeHgyM0VnOHJFeHFqZWRzUHR1VzdTRFk4bG1sT3RBQVdpSDUvT1RSdG9TMS9vM3BTc09VQW1rc3VZbnUwL3E4TGtZWXdIWHBIeXdYQXJCU3lqMmNnRTRkNG5Damswc2NhNzZkOUxzekJMZ01jZHh1cHZTV3ZYVm5mL3RvcklqR3Vpb1VmL0gxMFFoaE8wakVKdUJvc05MSmNVOFMzdVUzUmNYN3BTS3BFR05HVkJlV21zOS9lazF5Y3VXVmlpbDdYN1p6emJMWnk3M3pUSzJkdi9xc0s1eWgrSU9zc29Zb1ZzTnhrZTdPRmtQbWRSdXhWNDFFbUM2OGZjYStNaDZZQzZxMjExOTZ3c2J3dFJ5Z24xTXRtK2VvTFEvUlRzUFpPeE5zZjljV2pBL3B2THhsdXd5V05QUFF3UnBRSHowanZvelpoNzhZZDZ3QzNRNEx5ZC8zMDV3Ymtpb1FzUEVQSUtvVy9FQ1VuV0VIMkNPQ094YzRWWThpZ1FkN2NMMUlySHA3OC9uSDMxTjFDeG5BOTV0TmN0WTB5N2NWdFVXMW1JcW1TV09iNC94KzBhcUNuREVaZVZ0TWN4RzBHbGczeWZrejd5aFkvemtwUnZzVXc2cVNkSmdXdTNmV1c2aUpoQmNmSkFXd1FJY29RVXFKTHZzQUlacTRkUWZYWExqUmhTRm9IR1BTek9CWFljVFpmTGxNU3RvT2NXbWdnVjhRNVJ0UFNVdXdPNzdiREZTcTFqNm5OOWl1OEE1N2RjemdOS254NTRRWlhzUFByTkI5RzFaT25WZ1RmRzZTU0pVMXorU1VwQnFvWTFFL1h6WFQ0Y3V4TnB5eVNvWERlMzFmZWFCZTdKRndaa1dHcmcycytOREdMSW9ESjI1UDN6d1puYkpIWERxSmdMNVRsRXovRlhkRUhxK014SWdYa2tLd1dnQTBEK3RzTmJBdUlDdDRFdTN5R0NlWHZIbnF4K3FFR2dsVUtoMEQ2VTdpdnFNYXF4RW1zSjIyYkl3TGY3cEwwVEd0aWQwd2JtV21vamdQRWtVNFFUdnA2a2V1bmF2RldDVnNhMVpHakg2K1J6dDRIbVQ1NUJCdFFCYzRURy9scHpNUTIrdDVsUHA2WFpBMnhJa1JHVWV0L3UycVk2RWtOS2RxVVZZS1pZVVIxSHVPUkord214Y2taK1BvS2ZKcUNZMS9ON0xhdDVJSmhPWFdvTTJZWGVTbGFwekVrNUFXRXZnTjRsS1FvdWZqV0N0eVQrNmtVYkpXcGttUCtmNGw5VGo4NGd4NGV5N3lHMVR0SXNMd3hjVTVwcTdYdGJjQTNqcVB0K2dPaFA5MDlEaU8rbTcwSTZ4Q29wK0VRY0ZLWHBEdCs0bUg4UjZNZWMyN240NDR4Y0YyYlYxTUlKWUNKWVZDNThiOTIyUnFsU1RzM1Jsb3Z1NUxsTU5TMmxrdmZENktPOXp1b1R2NnBKQ2RtdG4rR0F4elJjUHhDTmhIL3hzYWNlK3hPY2tTSHpoS01ycXJMbytzUEtxL1I0Q1RlaEd6UlVVMHVCTjZBeFEvVVdqQ3liMzZwcUN6aVVyZTU1KzRVZkRhQjdiZUoxN0UzOTlGT25UTVRzNnlqOUorbDZZT0d3VXQwRHd4MjNKbnJ2T3V5WllQK0tjQ2tta3VkMnpXZFlzRGFNUXlZUFNHbm94NEhvQ3JseXlndTVyUW1TcWRXRG1UTHd0Z1Z2a21pQ2tZMm5SZjFjZGxYcnVxSXRPV04rdHA4T2c4aHF0NU1xT0t0VkJ3UjR1RXFLcVRwZm80WkFFREE4eXNmR01WbnkwWWtOVUEwMnpHRkZNMWV0ZCs1dmVqUVhodmhBbzhQaHBVUGFjWHZJSFBOTTArRTkxWTlUbXJHZkphc1FyNnpseHc1bDJLaWkzenpRa1dtRyt4SE14Y3dVSFZrRWJRU0JQWlpaMHJHdDJ2M25WOGNteUpEZ0M4V0lOQjNoNFFHcmlPNi8xNC9aclNHUTJCdVpidDJKTVNMZWJlS0FERHRYcVFNZUxWOS9tem5oUHZPZXAxWnRYaVRoR01oLzhReDA4NlNpdVByT1NybFpKalMzNG02MFBMU2VINnJDYWwxTFMzNzRWUWVmZjZrZ1FqaktBWFREM2tBRDYyZi9nMGU0YXZSZjlma09GbUtqT3FpL0Z3QnlNNXdpZVhjaWwxL3c1S0lLUHNWZHFCc1FJNHdLams2ck4zUUFUUk9VNG9wNFcrTVJnMVkxcnZuZGhwZWFleGtXWkF0eXduM0t0b0ZlanNYdzR0dHF3djc2Z1pieVpQWDhFc1V4WXNuYmQ0UXY3SVVuUUlPekJKTk5aVlhENm1JZ1UxeFZkUGU5ZEg4dUs5dndPRnRsTElXSXlOcFdZQVVJSThRNnE2TXhGQ0hTdFcwNGlUQXJwb1dZc05KVUpnQVF0UnF0bjJUdkIzSE0zamNMTTdJMDk4Q1lNenB1SWFsd1JlemRIWUw0ZXBtV0RPVkdzU1FzNitKemhCemJ2YjVmY3RncnhFRlQ0VExLbE0wb3A5YXVVd0F4czgvcVFxSE41Vmk4K2o3YnhNUGs5dVB0b3FJY2c4L3Q4dk1JaG1QbVlmRlVmeVpOOHVPSWMrcDJrdE9Ib0t5T3RjY1VXRGtmbGI4NWZPa2NKcmZIblhKT0hPb0E0eHRnaVZNRG5IT0JOQ0o5bG4wVlZFTWFhY2xmZTcvQXhUWHdTSDBzQk45K2hvdFJYeU9IVWlUbWJpTSs3RGhxNkNOd3h3a3gvY1hUODZKOWZFU0Zxa0xXemlvRHp5VnE1OWsxcXZCamVGS1JQU3BJRDdFQm1rYjczRHBZSWhXUW5rdEpjc2pUZy9tYWs1Y1RSSXc1WHVTMFh6NmdSZXBBWDQ1ckNzM2NaUUQ0THZ2T0hNNkl0UllqU00zMDNyWSs5Yy9UOU0zYXNaeGl4dVZPdWJBS04wM1R4ZEQrcVNEOHQ5ajNLMWxocldoUGgzL3VNRkNxekRDZ0RsOUFNRWRuTS80alRZQlREWFp5UFpNemtpcXN3OG9PN05GOWZLR2JuN2FqZTNKcitmc1lZeW5YSElkc0JkV0NBK3k4RENxY3NnUktjaWZGSXg4OVhodms2Y0xJNWY5UzdOOFVkU2VkSXZuMFhMUksrNjc5T0ZQQzZmbzhzMVpNS1dreVo0em5jdWFSS0V1dEtOc0lEMWszS0xCRncvczdqZklwV2VBQ3FuWkFnZVBUS0dDMW5RZzN6WEtXZTZEV0hkWTlBTUM1dkRZSm9xR0Z2SHBBRTJYUVRMMVloVndnbXVEVHhzNFkwS1dkYSsxV24vT2tORFhoQXdxS282NDhHa2lXRG5nYkpBRU40NlEybHYyZXdQclhMRlRtazlLbFNVQXNKMDZ0MkN2WlFzcnl3dFRRUkZ5QXVYeTNSOG83R2UraVRJTERNNkFOV1BRVUtTWEtZalVKZ0RNbnBuVTd6NnpteXRoL2lIckIvbzZ2T0VVcmxuWkNNc01abXF2VE1GVUFrNmdIM3ZtdlFjUVlsR3lhYld4bGhLbWF1QkdtcG5ZNDJaL3lMTlZLTS90bys4emd5WjNMZDlTU1d1ZW5yeXIreWJ2dGUxdlBsK1l1QmxKMGZrdEtkNTJTNVF2bXhxK0FIRmVUdnBKTTlFS2ZMbkVxUzFEZlU4MFl0cnZPNk5RcS82aHBtNXhUTVcwUW9NRTJKaE5EdmhKa0dHMHdvTDB2czdYOVFKemNlWUxnWmtxRy8xN1NmWHR4VGkxQXVmME5hNGc5dWx6eFNMZGZqdTJPcTdKalMrWGVCWHpTSEtUbGJ6NzdJcEV0UVYwTHA3Z0s3NW02NEVYdUxTbW41M2dXOTNlSngxZm15S0tjdm5nU2NXMXczdytld2hodmJSR2NiNi9SWE50RkFLS0NoVlNrRE4vR1lrQjBObFljYzFYRkR1MTRXVGE4RUppRmVCeVcxV0JhQ3N1RjR5UlZ3RmUybGdYR2NLRmR6RnBINDExVEdyNzZTbVYxSUVBeENNK2lSK1QrMUo2UGFwbXloWDJDVldwaVhFb2FDSENhNnpIaUhQUEFnY1oyUmFOaFZEcFA4Y1hReUhUUHRaNGNEOUVtanJFY1RyRUxyNkttK1ZjYjRoOTQvOWhBNmJMT1k3N1FxNDRSZzJHL3g0WGprcWxsT3lXSG1raytwR2R2ZmljczkxSE1yU0pIQWRrd0ZLZjBYZVFLREJxcFQ2YkduTlZ5RFRmK0NUY2Z5VGNrTjMzRExxcUQ0dU5SczFJV0dUUllxSkxjbjIrMkJrVUhiQ3pueHNtYUNVQVA2MVdvenFyOWs2VDBPdVhFMUZuVUtwS2JPSHBjWTUxZm52Ty96OGdUZ0FWSVpjZXBhS2xKaFl1dGp1NmhrbVA2TEM0a09uSmxvTFlUKytzenFoYVF1Sk1rcHhkcldOcnFzaSswTFQ4bXlhKzRmTXM3N1c3alY2RzEzbEY1aXlzL1VIQTlQTllScS9CMFJBL2lDVU5MNTlZQkxINjhoOXVjSzlJaWlVQkkxZmdzTGJVaTQxUmRmYU9jZnppYWZNRk5FVjBTNE9taXVoZ2RnZjVJU2txK1JEbFRqVURDQ0wyc2V1N1BHcWVYNzQyTjc5NHpqeHBaK1poR1JxUmhvYXJPSWRXMDFTbmR1QVZINzVGcUdXVXBXWEFwa2tQcXNLeXA0Ymh2MUtQWGE5djJxSjdIaHFiRTdCM3NpS0EvVjhKMkRnQUpsZXVmNDhxZDRsTjYrRnJBME5qOGVNdHJKTG81REJYOUVxYVhCTWNQODRBL0xzTkZ6eU9pb0RWN3FTMk5KWlUwekhIakVQZWFOSVp3U3hSdDMyclNCbGNtM1pIdjhHWGdZNUZSVFFua1ppcWd3enI0WUxlQmFEeTNQbHZlR1RnT1gzMUN5OVJYVmZlSEdYN21HTTJxeHBhcGFBN3Q4SXB2NVZMMFJTdThuNUJmQ29ESDlDdUZad2twQnpoaHVMQ2NZUGpCeVdOWUc3bHJUV1cyVmlBemxwcVFMRjFkaHUyUnN4MFFmL2gvZHVaNVZMQ2Qxb2dhM0dNM0ZIRUNiYjIrT3NzYmw5V21aZGJvdTROV2orbG5KRHNHNkg0MGNtdjZxUk56bTI3azVQVElWZ2kxU1VZTWdBbE5CNFViR1FybEJnb0Z1enREV1lYcWNWVVQ1Q3puY0RQcmF0OE1Dd0lsMk1Ec0ZERmJsZzA5NHo0U1VRTXppdVJYMGgwOHpIcmp2TGdmbkd6NHJQTUREYmlUekU2Q3dXQTJLeGEzZEZyMTRXNXNjOWo1OW5UNUdhWUZIeVIzMWtNQlV5TVBCVldhV0NuWEVlZytLOThQM3hiSmpTcVNzM1lsbFJSaFVmOEhmMVVvNTVoQ3E3cmJURWI0ZERzRmI4Sy9pRmFpdXRPclZMZDErOU96R0xvNm4wN1l0NTFPcmo1ZUFldEVGOEtqZGlTRThySk9HRkh0TDgvUEhxeXdRNUtNR0RwRmJvMjNXUDY2WkVISXdabmc0c2F5ME1NelRmcm1ma09IYkRsb1JhVHRZdGdxankxNG4yNGtTaXhYZmtHd2VSWDJiWTV4VFZPWUw0VlV3c05GanhZTVRvZEcvdGdIMU9UQjFTd2szRFNYam9weHRmV0dqei8xZkF2WW9DOU10ZWZqZC9sTDVsdXNVaHJ2MS9WbGpoWTdpMlFPdzdZdVhDd1ExRms1cW4xNERZcG8xYjFUa0l2STBsTGNiVzZKV00rRkxFUGtyaGZVZjlxRkhkS3JtdWRCMFBZNGVpUFYrMk5ka0x1dDdNciswMlBvcVB3SUdTQVpncFlpZXBVWHhzdkhSU0RkZEdveW5hUDFhR2JUZSs3MWt0RTN3d2xkREZ5SWtXQlpFQldCUmhMTzJ4THJTNDZmZG4xTzFBdWd3dGlJMXdGTG1ibVlTb3VxZWkreUo3bmFxREtnNnlFMFpxWEppYUpaaDg0S1ZqZ21yYUE5SERzem9UQndiNGloNFBXeTVyV0o3eUl3a3UvSHJxYTR0cG5BWjVscUdrMW5FSWtkQXJGVGk3TFJnTC9GK2M1VVp4dS9ldm5uNFVSdGtZY2tsVmRaM2ZMS1owekVnVi94SzFCajhYcjB5a1dwdkhOcC9PWHk5RnV3ZHhtb2t4c3Y5ZTkwNHZFeWtQUU1FT0R6T2J0a2tETGx3Y2ZiU0VlcXFmb1crbUZVSElhdG5STFVBSkQvc0NCSTN2ZithWXY1WGpsVWsvUG5qN0ZhY1FSNUNMZFlsc1loL1YyVjUwejBSV3d1SW9nakY4ekxVWk5EOUpRUThXSmtodXpQY005bWEvTUtiUzZvTll2WDBzU0ZIL0llYnN1a1MyaGVaSE14SGlDNkZ0UmlRUy9tYURVUkNMMGpMQjc5WXF4dm5NTGYzcHFIeXpVa3o0Sll6blhOb0w3ZjVRdkFvYjJVbVY3ZTlyMWFmNlgyMndMNmFINkJGT3ZOUFpIUWFBdWVVYzdSdDlWeEIyalcwakI5TmZQakdqR3owSEFCdklpc0t0cThNSllmQWNsSUJLTjVpeDFINGJibGR4NnFodC9Dc2hJdUlGWEZsWnRxZnMwOHduVWRkMzVZbHNoQ3ZUNktBcVRzWEpncEkwdVQ1azFkY0J4a0Z6TWlhbGJVWWFJU28yZzVEWTVPN2tkTUpkWXVQaXVtSzRpR2VsMUMxU0dxeFRtaVNIdGh5bjdJc0o1YVZOMjdZNE44SkRiN0NDVCtVQ0c2RW5iWmswVXh6aWhwaVZiV25KbU9mMnNMVGxIUTM5VWVyekhrKzFheDgyUXYwUUlOKzIza2JxSVdXWXY4SmpGRkprcndaT3IwWGhFWENUM3I2RnNDWUhVOTFwdVZIbkpCNFhBUXZPZlljdU4weXUzREpBODRJUDRqRFh2MnV6RjY3WVF1aHVFYUlvVlYrRWtCaHRHazVzZlZWN0pZNGdQWE8zSkY5c3JSMFdtVTdGMkxoTjQyVG5sRkRkVGNrR29YSlN4RXV2SEdKRkN5QmkzK1YxYWVBQmhQRS9Wbzc2VVpsZ2lhaUd5ampQSTcyM0xYWlc2QkU1NmcvcUFlZ3NESFM2RmlRQjdrdXRVM0FpNVlISElTV0I5QlBiUUUwYXNVZEd3QkJ0MDlXbS9KZEY2dnp6dTJwUlpPbXVIRGczYUZXQXR4TThUN1pLaWlpc1NSdlpSYlR4T0N4TmYwZTdHUEpRU2pQT0RtU3BzYmhSbE5IdjQzNEVHcUc0M1VGSWpabExVUi92TjIrbUk5RVF0K0NRaTgvQ2xBMnZrdzZjUzJPc3FxTlJ5ejB4OHJCOGdrY3ZuOTg4WGIzaENUVGZwSmI5bGFTVzJNby9JOHJTOWJaVTdOa2NZL1htaWkzcFUyb0xuUFdYWmhKa25CMzR0cWtSUS9QeFdTVzdXU21hQWVKN0o2VnBxbmxhdWpyUlZSemRLOXcyL1ZuZGo2M3huZlhFZWIyZ3Nwb3lHWVZaV2wzTTh2OUVCS2ZZUGRuY3BNTlUvd1BMc25yUzE1VWNlRGZ2TzU1bFI4NmNHVUQxZVRhSEZCSXhPYmlNeWU2dmtqd3NISXl6bVovZlBxNldwT2pZZk5Ec0VDeWFsMTk2dWxQUVM5RXMwSmw3b25LSDZRdm1maUhpWkNWZDl5b0xHa3JiODE5SnIzVEhzOUV5UDZhdTZYbXZlRm10SkgvUEwxM0hwNURkTlgwdFJ6aTNZTXJmVzJ2TUVRYnBhYm1WUVdvRkdBeUYxZWdGMFJrRitqNGtzdWNGL0dHQ0JNb2NVTm5ldVdNY1ViYytGWnM3Rm9OUXN4VzNYVDEyMUJoOURtMkNwdHBSU1lmWlF4WWN4MFJIREx2VEhiMWZCU2NVZE03TGJLU0ZUMkpiZVMzZGtPNlBnQ1B4MEJ4RG1EcXZmZTVNbTVjKzlqV2pZOXpSWS8xOW1OUkY2SmRDSFlKd2lNL2UwU1NoZCtQdDhYWVRqZXhRSGVrd1hzcXhKaENxdG9Fand4cWVLRFN0RHAvbjI3VThVeEErQkhZeGRFejE2bEloVXZCeHNYU0JDT0lLLzJqaVFOdHFQcjZTaW4yWitramh1OGo2aW9UaUNGOVdhaWVxMk9WUWM1cHlMRWovRUFCZDdrQWRJWFZzRVdybVhEeEJNOVZTaEYrZ2JiNGh0Nm1lVUJ5d2I3STRMQzNOSFQ0MXZKb1VKRElaSUxRMFdBTTJTaVJ5WDZId3NzZDc2U1V3c0dIMmgzbzdhMUhEWk4xdE1pb2NzTmRtYnVHK1NocUVLWkRYNGcxMzRicEpUYUlaY0l4c1FjQnlvbGdNc3k3TzcwWmZZQU1RQkpicGU2aEJJOHJFcjJLOXp0bm1SeDBVVUNCWmdKdmFVSXgzWFdJL0pNRWlWdXF2UUNlSU5EeFFtN1B5SVQzZzZ6SnJST3ljVWlzUjFxRXgyeVpFNktmNENOaWpRZHNHVis1VjZRclRVWTRLNlNIMmc5VDdqTTlYUW5qU1Z6VDRFdFB4M292N1UvZmg0allOend1VU5zTHBBRnBmMVZlT2lEUTlPQTM1VWh3T0JPdGFtVFpuZHAxWWZXaERzMmxoRk1NUmVXZGU3UFZrU2w4dk1vcnNQcDBOYTJhdEVielV1a0d4bUlVd0FGU0pVUTVFYy9na1pHUG9FQTByV2RMS1NRb0p3OXBneFowd1MrU3AxQ21wOUkzbzU5aWJ3Yzl5amJueGVJenFhV0REU0x4TU9UU2ltbThaR25vcUpiWk80U241ZzZJVEwrbVNidlE4NkxkMUZkZWVvZlhYa29tNlNGcEEycmd1WDdRQVlXNzdITU1WTWtGMGZ0L1hKRVdqNmk1NWw2MDBTNGpjOXdsZmlaTkFCU014NkhtbjdsSU5tZDBvNDhXUWNBcFkxRmNLU21tQ2FHZ3RxN0toRlpSYkJGN1MzVzNsQzRTcEF5blVqUFBnaFY1U0ZjUW9KTGk0NllMRnlud01RckpNVGNmNEVSWFEvMFVTalJ5ZDNQR3RmYzdGNFI1azM0dGxsMUlmM1BNeFA0Yy9zTXN5SVFHZkduWmtOTFJ3ZjBxQzdsV0t0SnpmNzFlWWJ5dHBSaUpaK1BVL1pEdG1ETlZQTy9qeEZEbDZXVm9ZMC9ad2I2NnMwQzF5RHBzODA3dGR4dnZYYnZuYmhxa3VBZkFOa0c4K2RmeHdBNitYV2VaSWZzODdIbHJkM0MycktJN05lRTErQWZldkRQVVhBMERJQjBuZktwWER5WkM3YThSUVNFcUxqZjhvQ3FQUzJpalhBVHEzaUI5OUNGanhVcCs1cUh0ZjJnTUdCanFiN2pLQ1hCT2VVY2N6TlIrUzBPdXVpU3NaYWowS1VUZ2dGdjdLZFRoRUxyWHRZZldGV2lwNTJ6Ly9GazU3dXUrOVRITDBKWmRReEx0alZpaXZESi9hYUIvNnZKZTV5Qzc0NUZoc2xJS0V5MEVBUjdHL2Q2N2F0bU5KWUlHRGVzSXZhNFhFellpazhBL2MyVGVFbTRwQTBsdUdPelpuTjFaL0pzU0x5SDZvYlZobkdjTmVtMUFUVlgwd0V6SytDektlcHlPZkNHcFdDV0FIWkRuRkh3MzZObUFnZGFwYncybTVscFR2MmQ4SWpPVDZYczVNZk5LK3pyajR5NG03TWk5ditiTVo0NUJIRFJubHNKaHRjUlZFVEZRbUhFRmhMdlhOTllhTWs0anZITGowUFNDWUNVTVZpWkEweUJMS2hnVEhxa3F3N2JOWi9DdHErWjlGMDBGbUlacjBmTk5pa1BiSURrZUNEYVRTL2JETXFLWVFnUG9uUWczQm9lSFpyNHNGamZTN1VHSUN0cXVhd3ArMTg0US8rNEJKWkJpTSttVFkwdkNlbFYrOXdrY1NJTnNCMUdDNmlXUWM2Wm5Ra0o4SWlIZDY3UDcvZGY0bVVmeXkvWnNyS1ZSNThlNjZGandmUFViVWRiWjFJaWVsUnhpZGRFYjFHazdhcXVMZEJLNzV0RTRJSzczaWZtbXRsc3RxUElKcmZtcnVvSk5mRndqS2dhOFRqd2liT1V3cjJIUk5uVlZ2S0dpb3Rldnhhc3JZU0QwSVM0NExzWThWK0JCckNYZDM2UkpwQzNGZkpEWjVPNE5Bd0k3U2NtQ0M0ejlJck0vZWN0RTBHdkRsK08vRW1OYU4yOWF1bVJZdXdZQVF3VlFPc1AzemNPMFFpVGFadFROUUJHdjRYQUNaREhMZFJibnZRb0RCdHpOVmhsdlBuSWZ3ek5UMGFXbmJ5Mi9uQ2d0ODZMeGMxR3VaUVZWa2pyWFFKdm4vV3lvTGdjd3hWeXRGNVovSWtjcnEwbXdzRUMvTGxINFpsTlBqVWpuaFMwL0xnNnZzRW4xbWg5azRENnRlN0lFVnY4eVJONWF4bSs3SlJLK1BGRDZrR1prWFdBcEhYN0tFb0t4cHlGOGY0czZxajhnT08raUhpcEExTU9aL2NYblk1VEJCYTYxL09rQXlXNTJYQXd4Tml3ODJub2twVWFGTDlEd241T2JBZW1SQzM5NWVmZlh6NVBjeGdySlVsL29rbE45ZlhIdEd6RFVMRVJta3NhZXNnWW9yazZCbkVpNHlCMW5GTXFGeDlBVnQ3dHhvbnVLNFN1NEVnYTJaZkEvOVZvY2JLL0JLTlJYRjAzdzlXaVpheFJtZ3pXbE5xSWhLNXh6QVcxWFdLdXpzUXVucDYvVitCUzZRQ3pJMjlGN3Y2SDdzWFJyVy9PK2dpcmlHUGdSK01OQldDZFNSVThuUFIzK1hFdjR3dENEVjBmVEdweHVIWjF0N2hKelNKSWdiblNQTzhXWmx6YzlsMXBpRnl2UlI1SFpMek5GOXdzWXRENDJucDF2SlNnakh3U3hTZy9VK1BxR21qSlh3cFM1Y2dGUE5PT253YTl2OUhxbU01V3RwUWphSnVVYkZ3dmVQSnB2WFRtQjIrMW81aWpPd0djLzhWSko5cjZyRVpoNHJzRkxpaGxNY04zOTZuTXphcEZib3padnUvektQK0VzMlVhcmNRVG1EbjNEM2FTS01HWGVXcTBkZU9OMUoxa1d0MWFXRis0R3VFbFduWHV4Y3NOOWI1QmhaWkV0ekVDakVWZ0ZMdm9Hc1hqUnNpTXNxNlBGZVJVY0Y4aWRTOHU5WWRaUnJMSnhLaWRUV21SUVk4NWgxZXNzdS9UYmVxTUQ3anpLL2tzTHNNS3JRRXRBeWthNVB4YlR3RllBb1o1RWRXZVdEN25tVUFveG92VFlweWRYYmZxUWJGM0ExdnRCYkkvelY1VU4vdHRtTjM4dlBIb3ZkdlEwYjl5NzJEWDRiS3VMMHN2TllPbXhraW1mcGdIeEJlRGV6bC84aFMvZEZkcVN1cUdNTGhEYVE5T29Ob3djdWVBVGd2Q0lBRjlRbkNTbWE0UVFEWkRiY2U5TGdMVE40ZW1USmlKOGtEQ3hxQjZrM3k5NHhvUGxmSlJ6SFNCWitVeFhkT3lkbUdZZGV6RytXZGkvUlBVdTJibEN2TUp6ZUs3WFJCcW9JbGVQTmcxeGFkTDJGSWlHSnp4anFJdmtKdGlFbVpwU2tPdWtPZkF2ZUM0WTZQQ0VacmFpSE1WL1RSZ1JsRGMycm5UenZtWEJabC9LZ0NBNFhYN2xBS3NVWVI4bVc4UzNScFB5V3RFSU1QRGZNWjlXU2dkZFA3RUFGME93YUdjZ2ZvSVJ1bEU0OHdKdlhSZkY0Y0dwUHhXcS9hQ25HdmxzeTAzMUpLQTdYb2IyMDNLMmFlVWlrbXFOZUo4QThOUjdhTEtnc2VkSENZQm5CUEFFR0IwQUN1TGtxKzdRUUNvNER0RkRlNVJBeVdoOUcyeW44eEZ5dzk1RXBDcDR6RmMvbStlYUE5QkU3OGVYbzB2UTlhZ0hSbjN0OE1iRmZCUVpXT1RNNWpJdmw2bUZIUHIydEQ3c0Q5OSttTjhoS2NKVGViTlF3eTYvYWRMcnRCREswV01aV2ZZdUp2SmFDOWRLNmRGdWVMV2pjTU1FTWYyV1o1OHZqRU5xRFNLc01wYWVnYWNSVGQ4dHNXc001T1hLUkZIR3NwWXdWTjlKaEpIOFV1bzkrODVGeEZDV01oVGdaTG9KaG8yU2ZZczhlQ3ovemNWRnBKNFNDdUlGZXh2NlBlT29MVjIrdHh6bjNYWDgyR3hzZmovODdMbU9iZmNZOVFKa0tXcisxS3dBZ3diTHMxTmVLNFk0eEVIb3BXS2wrT0VOUFB3czBpdWdwSmNSaHVjZ2pzV25WV2tYQUJhNWZxUHFtT0xMNi9sZVpVSHRNNmx6SGk1TnI2d01pU292S3pkS3l0cFNnWTVHdmFLeDR6UnpUMStqdnZ6SVBiZCtMVW84WUdDR0dHUGhqYXJFdkZONU9GK2taSHEvd2Q5MHl1Z3hOdmdMNFVDK29XdjhOQVRrZW9qem96czVMRHZFWWNuZlhlZ2JmVzNCRUt3NjJmUHhjcGVRZ1MrY3ZLMDdmQ3hDanh2a3VoRXB2SGVkZnFOZ3RpR1hnTFVhandhUmhvbkh2RDdMbDF0TVlqUUdPdGcwdzQ2blJHbVJhRE15bFNTRmdsQ2VZUytZTkV1ejNac0x2dlRNczVNdHNvaFJvNGlscE9GSkh2cTlkY2pYbXZ3c2RPek5ZUlJJVndJcUNVN1AwRnNyaVp0SzF2c1YySWRhSmpNNnRheDFkc0ZUenY1cG5HWk1WNnpLSTg1WVR3K1lYOGVMRWxFSnhRM0k5YVplTmxqdGc0dmpJcmFYOWdEa3RKTXVnY1dkZUl0RXQ3alNRMFl2YUswQVBGSGZvbVhhNWlJRUQvRFpUKzluMzR3RGhTS3J2eUhERFhiVmVLTkdVcEdUb1EyTk1qTmxnZ3BjcDExRWsxWXg2Qzk2MTdyODcvcEpadG5SZzBTTmZZeG9LZU1JWjQxa0pPakFxOXBvWEc5am5WdEJveGY5LzRYSkx0VVR2TEhQdnhHT3Zwc0dkdVZuMEFNQWdVMXg2aTlmWHN1em9CWjRleEozcFd3MktmWU4zcVpqYk80M1ljN1RnN1Nvalh1TWJrYjRabkJIdFZVNjU5YnZDdFVqZ0xPRkFZbWtHTExidnVBZzBJNWo1ZjdyRU1odnZ4cWpkRkhZeUtwdHk5djFyeXpIbklLRjVsUmJsTTRkNjA5RTNNUWJ5Q2tiK2ZiWkxvN3pxYU5lWVBGWW9PT3N1dGhvaEJETEFwRUI5ZmJhZGQxNWgrK0hER2c3aVE5RlFFMGlmRlYxZVNQNUV6TUpVTWlzdndnR3ZMOTVuZUdiTDdxWDd3Uk94VzVtM3djSzNwdE5OZGZHZmpUTHpUN21JQ3RYcHFBMjF5eTAwcm10Yjh3blgvUWhTYk1BeEEra3VqOTFveHNpdU5rV0l1OFJscHk0bDZCSjFYVGlSdndHdms4aUZpRHIxd1l4MDVTQTlES3MzeXB3OXprYi9jOURVUnFvcGN1dTZUMmNTYTVqbEcxQW9iNFQwMi9XQm5uYWRML0JVc2hOTWNBZHhxNGhiWktRRXNEaDV0a3hURldUWkZKYnpYazVkZi85U05lOWsvVkhPQWFEM2E1UmFqcjJ4bkpHUmtoZnBEZW1pRnZ5SDJmRHJPT3J6eUU3T3YzUTZobTRJS3VKcHdVckxuMVF3cWQ3Q0FSdk1ySnA5QldMZHZhSGYvVkN5OTZxUlNhUTkxL3dUQ1ZzNkR5bFpJUXN1NkI0U2RwbGMyTjVUc3NxRGtGa1hONVFkUWZiZTN6R1Z1MnR1Q0h1T1FXeHhhMVpxNTNnWWI5VDJ0ck8zdWFuZEhmUE5oYlN0VlVjUlRwQnNTcXpnTGRrdjJEZUVyTjhBQzRiK1VDSkJmQVB0Sk5GV2M1YXNQMVk3NVZjVXBqcTZoMVlFc0ZhSHZZZGFoQ2Vnd1VYS05VR1NUUmRPb2NhRVhwdDA0b2xJZnRYVG0rYjFsRHU3SENrOWU1clhqVHY0LzA1MWJ5V3NISkxoOE9NcWxoL0QyZzVxUWxLemJIc0wrRmJhUElsczVlLzJLb2pFY1lNb1pDKzA1eHN0cUtjd0hLYlRQOWN4NjJHZTN1VURaT3o2Q0tUYmM0RWJqVU10bkRCUnIvUXVIM3pyb3JWWUdVckN3WnhsMnlDdFE1enpTOEpROTNZUkZCT0FpOXZTaHJpVGJQODlRUS9jRUd2QmtGL1h3ZkNuNitDNnRnRzdWTzJIQmphaDZaVEJaTSs1L2RuUTk1QUZ2NEs2cHN5OVFwMFgwQkF1amkvNjV4bGdWWEZ4QVFxUlNaNjdONlBBVmdpdUJDU2RxamlwVnpRaTVVcmUyZnpEcklMQlYvNDhFOTYvaFNZOWp2UVQxdmxZY0ZvUkQxTUJSRmJJRm55M1M2S3Fic3kyVFZTb29jMEZtT1lOSkU5SzEzNmwxdUYzQnhoamFJOS9paUF0NFdEMWlFZHhDa1Z6cEdlYVp0UmNLNFhmcEdCYldhNkNKRHYxVWp1TmhUTy9TWTlSd25FTTVaK0JyZy8xeVRaOHpMN09Oc1dheGEvbUVpVC9VbkVlNmloQmpBVEZFYmY3Qzl3SjhnSjZSb3F2ektnTFA3MHIyd1FDdUE3cGo4NnhpNTYxTitNekJxN0ZmeDdpUWhHcmJnTXdrbzVROTdCOGl4eVJkbnBiYmY4NW5JWkZTM3dQRzFBU1pPYlhFcmJwWC9uRVNmNjZwZGRhdFhmU0RqMjRCSm8xRmNSazcySjlEK0lnK0dsemNkcEozSytmVkxLUnZLaUgyZnA5ZG5ZU3laQUN3U3RtUzhXNXJJWnptWlJUb29nZkYydUtjbzgyS1pZTjZFUVB0QkY3OXZGR01NT3FOSEhUSjNqSVBEeUpLM2VqVDRXcnF3Y1FoZjVxTEFlanh5cFJNdU96emcrUi8zVWpaTUxsWU5idUZwQW9DWFVvdUJOVlA0bm1RVlpTUkJzN0JyTXNLTXp0cWFaYUVNM1dVSTE5MjRqMG1NN0tzaWNaaVBMVzBmazF4cTFlU0sxbHF3RHpGN3RtT2V1K2VrTVFwTFhiWXlpc29JdHpLSXBybG0zTy94N0JTL01xQXRDZnV4cWJpVlQ5aXdUTFcxUlE4SGFiWFgrTkoraWp5T21pb1Rqb09JbExZZ2U2MFhPM21KNVRibTFTdGRRdFN3Qk1rclpJOHFGeERZRXRGSlAzR05SeDZlK0haOFI4d3QzYm0xYUlIR0xOanFzamtKemZyOW9ObktkWnZxdkRaTWRaZEQwR1dSM2NOeE1oM0pBNzdnQWQ1Vmw5NmhlbXFiTHBiSHNlM1RRenZuOVZRUHdsYldDZGxKdTJacFZxSFl3QTY2TjlEZE1KelBGbE1TdTFQVmxTRVpTT0VST0hRcmgrZWo2U2pCeGpDbW1oL2lEbjdjSFMwekNJK0NDUlhnWURIMkEreHJvNXFWQVZyMW1iRWM1S2d0ci9VcHBXSDVsM0R4cm5NbEhsc2l6SUtZcmg3eWZsL3BZWGU0dCtGQUpLMHNSNzNHUEdseHRNaDRpTUFnTHBFcFVmeDNtZFNVQjRqNjJlTDVUV0E3VUhkOStUck5tQWxNTGI4ZE4wSjN6ZmU4NDY2S0psc05veFBsdDg3MlBRU1hQM1phQUtDcHNpZzRYRXNJdHRkMStrNEY1RW44ZTZBUnVVVU1DUmFFY3pNOThVNmRGeWVvQmZFWnBOY0VTOEJrQ0l6b3FNRDdwL1lpcGFkdXJGaEcxNEh4eG1VbE1rOFJrUlB1TkVwWitMMjZTK1hRd2ZBNEoyVTBweXN3M3htOG5IZDJ4L25JZUNMNTFwakplVDltNUFnMTlESytpOTZXTy9LbXNxMnh1WWV0K01RSmRuN1ZRUm11Qjl4T0Uvcll3Rkp1V3RUUkVnYmJjdnlXVXBXNlo1UlNxZC9PR1o3V1IrbUkyVTV4SlZlSDJKYk84RU9iTnB0UkYyNHRqWVV3eVBpck41OHVQZWZZa2ZUN2ZJWStIZko0anRGNE9Ec2hmTEwxelM2elBSUHdoZzZrNFNLQy9VbmdINXVjWXpjTE8waDNpUlFJNzJjRGRsd0dNckZ3QjhUTk55akpERkVtbmw5WFJkbnVXT2kwYTc1b2dRSUlGN1hleDN0U0tUZWNtR2owVERNaGpXQkJIOUdPazh6UzZ6K3JCUlFRMVh1NlJ6SW5heWdmckI5TlEzd01FdUNsVWFpTi9ralFraVJEeGducEN6a1hpdHVFL2lXVVR5QmJEdUhTdm5JSElybG8wT2NFVVB4UWtON05HMWY3dGFZMEJ0bnpTNy9DaXIzd0ZQUkNPR0NiMzg2bWlqcGsxcG4wRzk5b0N0eFAxUGpsa2RTNnh4NDhJWVRQSm84OXppV2k0VTQxU3lUQlNDTTc3L2RRd0NwdDAwaEVQOFQ1Nmw3aURjK3QzRWRSMndUUFpUdmRCWEpJeXJwbDVCNW0xcm5qRktEeTFQaTdIcEczTndueGRhcWhISlpyK0NweTJlM0tERVJ1ci9lQ0dQdkFYSHZ5QW83Tyt5OHlsYTRZeklleWNaUG9HWG9TeGdQNkZ3dWtGN1NacmUxYlM1VjdnOEt1aWNwRTNzSWZhZ2JZSi9CcmxQMStkNEJJdlZ6N2QxdmErOWRhU1BFY2VvTWpUT01Da09Xd0NISURYUlpXL1dkOEV3cGR6cTk1cG5KaGR6MFpoWnlGcmlaU0VzVUxKUFduV3hQM2NlaGk2RDFnQ1R6RkpvdlBpRHBsbVZ6L2Rna2lEVmlXV1k0WHovRnFLdGNnQ3BtTnp5bStweHRzTWcrSUNvTm9UMjFjWVR2YXROZ2VmZkMvMGhPY1l1SWFyMzRZYUZ5V2lJTG1PSGFIVDNwcHpjTVhHcEp6Y1JNQzkySmZHcHJoSmgxbGM4dXRUNjkrYmtYRDFtc0Z3VDdtRmQvUSsyZ2ZpZldTbGNXTkxlbyt3eVN1cFV4dDZpNHIyTlNEWVdHWDNxVnQ3eStJRXRQWExiblZjTXBhdUZGMW9YTXZ2Qmg1S1NHUUdab3Z0QmRzUGNab3VnZm5VOFBWdi9QSUcwUnRscXZ2TXZQYm9PcXBEZlJZUGZLTjh1S3VOek5UUERkZmdwbVhsaW1NTEpkcUtERDVrOWF1Z2VxUGlld2QxTG40dlE1VmIvWXNsQ2VvSmp5M2VCT2tNSDRHcEhVc2dmTElZTjIycUM1VVlRNjhtanIyK1RBam5FamFUbzhYaTBYMnJnTHlEUFhKNkYrUHhxWDRnUDVUaDYrS1NSa1RqdDNpaUVXUm81YVBocm1EcWJHUis5Z1M4Z3RubHVVeUZZczBZeTUrYmUvbCtoQTZOWm5sY3djWWFDeWxXY21LMTBmQ3lzNEVlN2Z6M3lIelVQYzNzUm1MNVc4MzRTdnI2dUU4aDZZWkljZE5DQTdiY3N3YndFcmpib09abzRoZXByQjkvZ3p1bXZrMTJacVd5VGE4Y05IZVlodVdXNUdSNVFqM25DbFAxMEJNeTFOV214RUhOOC9JTUVOMkhBeHVHOThiOHFmbTNabnBsL0JuZUlaeDdYYUxPTndwMmF3TTNtUUNPdXlQZVArZEdmUWZvcGZmazkvTlZHQ0F2NXBJU3pXZ0hpYVRyNEduVXVTTmR6Y1d5SCtOUE5DYlI0dkcwRDVHNDZxSzhPWEc1dGZiUFVmcElHS0sxRksxK3ZiOXlHWkRmRUl6azNLVlpOWVJPaWEvb0JMT05RREsyNC8wVGZlMHU0dy9sMGw1V2lpTlVyUGxpL2U3SmYwQXhKUjJNQk1YckZNcDg1bnEzRUFnRlo1MzlCWEdVTGtMYTFRc3RjRDc4YnBsQ1NkQm1SeXJEL1N4UVZKTUpxMGJvRjVSbUVCck1GN0RHUmNiTzhacDlMbDNSQmlIeTg4S0VnVDkvdDAyM1c5TzBMNk5NMXBNeFd3VVN3MnN2ZGdjbVUrQW10R1B4S3ZkVnRjeDFHMlIwS2JVaHprbGNIZnZTSXZia1ltcTlYZFFWMVdOT2ZDRVU1Vmx1N0gvTjFxREo4SXRhL3NOSlgvcFNUenhvSWtMMHdIV3VmYUIxZFRUbnNCalFva0JjVlUyT3MwU3NnbW9GVnlJZUlxckpYVWxYL0d0UWIxdHBNVVE5ajVobmJVS0Q4bThCQ2M4akREcS9VM1hpSTk5VFkxMWxFYXErUjJwMit0OFVDRTZTZktkWUZhbjhvd3RndlJzOWtjRkdIbXJXVi9Xd3RxaEQxY3lxTW1DS2hTNmZtT3VCbkNFeS9ZRkI5RUVFcDZuZmpuM3Z3OXNPVTREUEJsRUNSWlNWZkFqV0lUK04wQmNpZ29renNKc21DdVB0MExZUFVwWWRmV3dJcENoU2ZvbFZEYm0yTDVRa1cyMmYxRFYwMklvT3R6cHViTFpHLzBPT0xENmxJT2pwWG1qLzZpV0xTeDFQeWdCNUNFS285aSsvU0lia2F6VGhOeDZaNWQ1b2d2UTFjUlZPZFlIMmI4RXRJM2R2WXpXSEdyM0Zpb3FjdE4rUTVUWkZicDh2TnN4eko1UURUeDVzUXFOMVlOOW9XUjlYV3VXUTRXMk9XaFI0UEtjblVuZkM2NXZtY3h5SmdMRXRXYjZrUXhOK0xYZTZ2SXBxdUVLVVpJR1ZRdVRuSk8ycWxNaXFoZXliN2RZNDduTlBUVzFRUTBTTGVwRnZGN0g4ZlBsSzhYQ21DVFdlQk01ZUREbi9MMXZwVVNhbWRFLzhVRVVhV2lzdHZYZExxSXR3Y3QrS09YY2NyWkZUL0hYZExNWnJBN1gyMmRmOXk3czB3QlpORnBOcEVabEh0VUxnUUV1b05reTh4YkNLT0Y5Z0lSdTRVbGw5RlVmRDduc3lTT2RxYUpQT1U2VGN6SVpTT0NlOHpWSjVwbldGbWk5MVp1b2k3VmRzZXFoOXVaNjZ6b0xuNmdCVUgrYTRXS0dHaVZYZ25CUVRwUHhiWjB1WElxTWtGS2lkTERqcktZMm1HL0NXV1hrT21BUDQ5dWcrYnd4OUtBdjhsTi83NzRUUmlYMWZDUFpzcXZPUVhuaDNxMVFnWmhIbVNBN3AzanpNU2d6ZnhkZDFKTURFRlJyZVh0V1AxeEYvUCtObXl5Tm1oc1hsSE5TMVBWV3RuZzhLam1TazNiWG5yZGthR0tqa3FUMUVSL2FBb05IWjlQb2RxSE5yem5jdkVOK2s0MGtOWnY4WTVjRmo0Q3ArK2NVYzdLQTRYbTZGWmp2RlBTemJDVlNlcDU2M3pwOG9iQ3Y2cklscnp2eEZVNWFXbVZKaER6RnBXUlM1aURoSUhVa1oxL3dRM2JrSnVDR2kzZkF3UHh6UnBXS3dQd2ZneW93VTJyaGFXRE9sSmF2SHZkT0pibUw3L05UbXo2blpzN0tOalNJR1dEQUI5TXUwTExpblYxYmJWRlhBQnJxQmtreU10TVZ3SDRKZHhDdU9lT2ZFL2pZc1RPRzRaRktZNFl4SmdnNjlaeTMzNzNxTm1kQzRORm9PQlJ2OXRMREtKUlZaMFVQNElGb3FaeUxrZ2FaOElUNWk2dzVuSXdVMXJGdmNTaEhlWktLTk9Cc3JIbW1ad0lTUktXV1FzWXFMVytmdkRZVEFEQ0I3N0gvb001a0h0ZVlUTzE4cnY1c21pSkZPZnAyUWhubG9LOXV5RVpuem9TZ0JZZjRNRXRUK1h6VmkwWU9uZ2ovYSt0VzdDU1c4TUhBVCtrTmRxRVJOK1JiWFNENkk2SzI4K1l2TWRmZUJFVFFuMmJwaEZrL0NrMDZUd1QrQ0l2ZjhRa2poTEZaZkZESG1GOTE5U2d2VHdONnhzdDlEUDBMTk9WZFE1VzJLcUxNb296MUNjU0c5d2xVdUoxcWJUTkhZRmtHTGVYQkRQZUIzanNhS2NDMW12Z1RqamcyTTNZNUlObkwrUzMvZE1QSXVmeGhScUVMRTZpVENYZ2xKTVpUdnpaYy96cVpwenZnU3JGUWcvR1Bka1V4c3dpeGk1OTc3bjRyK3dZWlBPeGVDSEI5VENnalk4SkxUbXBXaEx4ZHRmcFdCYTVLOWRTejZjOTJNVVRod0QvQTNpVjd4VW5xTDBlaWF3eEExVzdIZVJGWngzUzZ0V3MyZnFoUEgrdmFEanJzZ285c2Z5WGhLZnpsdmlBb1BoK1lqWFpTbTJKZU0rTUFJVS9VdGcwSitMZHhoZnhTZ2tvSjNKUEI5d2RlN3k3K2hKY2xnN2hKNjVLOVVhdzRPcEVET3lWWkF5OUdXVm1ITi9qVVh1K2ZRU3hhdVpVOGQrN2Zxd0RhTlFHNzZiZzNhVEdVTGI1Nnd6QTIzUllvYjZoNlRGYU5aK0JtVEFtK1RjWk9BMVNVNEgzU1dvMkcwbk10SGtGaXZWYStxdThVUU9FV1o4RDdHQ0t5emNZTG9ueUpTYk5BbWRrK0REN0RXTURYNzA4WE8zQlhsM2Y4R084aVhxd29Mci9Da01MMml1MFpVZUhzQ2hOSWZJUndYRlluRlRGSzU0Z3NZWC9kR2lIbzRsTHVNeGVDdTNZTkdvOFdpYUhOV3l2aFZjaVdvanVxYVowNmg2M1Foam13c3lkZmhFRGxkdWtKOFZnYXA3VmVVdjJBSVI3NjlseVFVQ2hkMnZ3WElreTYvTDArTU5GQWdydml2QlV6TWYyUE9pU01mdHV4TG93dndPLzFBcFo0bGx6c0s5dzRqMmRDWUZWRmkxVzFKMHBUYUJHNDdLK0lGTUZ5TTkremd1dVhHK0JBempVRFBsV29NejlDYTF0blY5RjFRVjVhd1B5ZEluSEdZNDdSbEFzSDlZT1haeEl5Mk5qdUFmZnI4Y2RHWFlkNGFJVFJqSXpSMEFxRjB3TUVxYmNSMDg5bXExSGVMYVhyT3ROREJkYlFFZ3FXTnpoV3JSNkxzRW1UTXlJN3orbkMyTFFFV3l0NzhTbVRsZ1A2VjFEOGYzbUJxcHJOYis0d004S01RV2U1aDV2NnJxS2JFai8wN21nZkhWNnI4NnpoOUYrRmE0aXZ2QllvdFY0STVsZktNTzgwQlJUN2dCb3FRbEU0T3RYOG54dXNyQlUxcGFDZms3SEowc2xlZ2V1UmtoNW0xckduL2FvSmlVelNKU3lzcjY3MFNJUWY0VWdKdEl6L0JOK0pkVWdYODExcTVtTUdRUlM3Wk45M1V4c0dEMUZ4bXJDSFNNYW11bUh6WGROVmViNzh2RU5UazhQN3dSZjV5Q0ZZclNRQ0NVQWZnNGJGMWFIWGJLeWFPdHZ2VDFLdmNBYUtHM0pzVjM4dEFMelYyRlRWOTRFS0c5YmcwU1Z1bGFvcHhFWmxKamN2VjdqK0U0YUxFSUtacVJRMG1CNGs0SVU2b2NhbDd1VVJnMi9oWDRpY2J5U3lVNjU1RUtjdmFubHN5Q3hCSVc0NWczZ2FFaUsxL21wSjdnb0gycC9nUFpMQUlVSVlQMGk0Ym5Rb2h6bUQ5a2VKK04zSExqblU5WDMzQ2d4ZnRhVmtRVjFXNVZHTEtOSVQvUk5rUXlwb0FOUFJvN1NnWjBDdkJraDA5S295MzNxVm1yV0UrWEFHSGtrYzZVNzdnL085bEhKZjJpZ2pjYjVjb3pyYVgvUlMwTlNwaHhWWFh0M0dJdmpvNjhaQmZlYWVuNjFHMDA4Yk9xY1cvZFJKZ0c5S01hMzcwS2JhenA3SDYwTHloMGorVWllVitHbklwQkVPcEJqVVhucDNsK1kvOWN5U3JLYVpOckdtTVR4dVZCSDh5T1ZSZCtXSnFJTWNFWjVXckEvYVB0SFFQaVppanFqWFNMQXF4Y3JDZTFDcFZoZVZGZWdKeGVBK29Yek1iN0IxdHJwS2RDVHpZNTZxNVlIeGRpcWQyVHZqbWZEYzV1dkhtK2gyK1JqeC9lNzhuVEV4YmY4RHhwRGFhMElwQWJmRnlnTjZhSDVvaDZxQ2R4MWpMRWsybEF0WnF4d3dyRk9lUG1La2ZTWGNUdnJyMjhKKys3bkRFd1drVUljTkUzYVVaRHNWbW1Cb1JlYis0WEprcVdFR1NmMThJSDJob1BVazJ5WnA1RUUrUXltV2drTEpBaXJZRlgyTmwrcjd4NEVXMytOTmpybFI5RVlqbEk0d0RTMlA1OXBuZDA4eFdlczBoZlc0NndMN28wdXMxQzlrZ3VqMFM4SklWenoydVlIRnV1cnFaRnd2ZG40dndJanVXUG9YNGMyWHZlRG5qWFp6VkxSZmpGb0xSZjRSYlJEcXRON01yOE1hSUxBOCt0QVZ4UHl2SXVpMnZ4eVJ4UWZXSUprQmhMZWdiWUxtS1IwcUV4dDdVcUVJcldxN0c2Kzk3L0FoYWpHeEdlejlGSkVtSkdJeG5UQTZkcmZkMkg3RHZ1cmg5bWdGdHRXYWN1VW5MWHhGVkhOdVpaMHRoaHV0NDcyRU9hSzFFUm5RYjV3ZUdvNjA1MksrQVJzbkRYOVNUVzRyOWtuY0dlbUxIQ01DNjlPYStsY1JLTm0vMUJhWXFaWFVzaDJTM011dzFMeXlYdU1PVGpnd3hmMHQ5UVM2TEFlRXJJaEpEN2pidXIyeU94Q1NYME9NOHpxOEgvVThEWS9LekhMd3ZxREZMYlBicUNoLzlJd0hJRnlOVk0rRDNnc0p0M1JNbnZleHkrWGp6Y2YyNDc2Mlp1MnJqZnczaE0rRys0ZEdWNVhwbmlpM25iWkZkUTJvUXBIQXpoN0lBOGM2VmF5MXZWY09IOTh1MzV4TlNDRGRoT3JFNFNwS05iOXAwK2NDY0FTaDMxNGtPeFNDQ2FrdHB1SlhETk5Sems1VGZtK1pUeU9yN2lpc2h4c0Q3eVdaRFl5ZTQwRjdsNWV1SU5kY0NhOTRFWnBkVU1jbDBrNlozay9VKzlQOTh4S2VRTVRPeVVVUHZKZjRpcy9WMVE0NDhkZ0tWbTJuM0NJVlF2L2ZYbzBUcUVtTmk4akRtRTdxZ0ZoMzdPaUtLMFpBTFBZaXZNVnJucThLNlVtZGdhb3MrSVJHS1ByMk9Gby84clkvOS8xTVRxdXAzTkF0V2Z2Z1k5S2RZSXlrbXVLTXVUL3RqVFZsVnZERWM2bC9vN2Z1a0VMNVFsOUFmRlBsb2YwWk5oRXBTcUZEZGs1akszRGZnUGpnQXlMVFNvR0lNMm5uajVpb0M2RXV3OXNvSU9iNkVrcTd1ZW51a2dpclFiZ3hZcU1XKzB4L2Rnc1cxamNLQUJvaTRzV2VlbUhOc0ZMcFdvZENTKzJqbE5jbWJTV3pXUzJsK1JhU2RJdS90VmhOenV2R3JzS0RROVRUTzRTSXkveXRjYzhYb25UUk9ZMnNHdzV1Wmp2eitZN0lKL1NoRk9ZVTBYd1MxR2NSMlQrQm9zc3MwN2NUd1ZDUjJLOTNkbVVnTlIybm13NkFNaG1Kc2Q3ZDFaelZmeEsxUEZwamVSTW9sTjdLSC9HaEtHajVpVW54aEREenVuSjlZblovYW9QK2ZBNDR4WWRPYTlzeVZSMGRGQ1IrZ2pFcXBRbDg5c3U4WFJtcS9DYnZaMk5HbzROYUp0U015dnFQY1lQdVNjc0RIZU9nOTZZRGFOMUpqSGtkK0prR1dUamR0WWE2azlYMjdLV1BZWDNnSEJaVFkzWWU5RWFNRWlna1lLZTZ6K2lMSlpOdXNWWlA5VVNBVWpac3JJNDhDUkhjUCs1UUcxZVNzSmowYWtFMnpZMFRkRHJ6MGFxSnZDeGRuTExQUWNUdkJVaU02eXdzMW9GRld0OU9ucjQ5ZDRBZFJpdlJGYnAwVGhIdURzTUlVV0pkQkczTEZpTjFXWE1kQVp0dmluRjNraC8zd1F4TWk3TEtDblVhNjNaM2cxWVRRWTluY0JLRFIyTGxodVNBQWxORHF5d2tQRmZ4OEtTM1Rmem1Tc1VkR0h3T1B6dktRWXp1Qlk4SEdBd2NWNEdLaEVqNWFYS0tTZ0pjZ21WRU1KM1pUbmthbkNXN3VpR2lpd0wrZklEZkpKZEZBYWM5TTJ1Qlk3WnJjbjJkK2k1ZHN3YkZlRFhFN0hOMHQ3TUxLNXNBOG5UNzZHUkZIbnpaY2MxWDlnVGNWdExyUEtlRC82Vk8xbVdhNGhjQ3o1OEMyV2lNQ09zU3pSSlN6S2FJaVVCdmlubG00dXZ4ejNwUmpnUElkNC8yVzQrZ2NuNWtJRC9mYnVETFQ0WG9XTDFXck55bTZjcS94ZjZ0TG41d3poR2xzTGp2UHpieDh5WmJlOW0vM2o2UHB0cDNLbGhoZVNVaEVhNzdRejlCT00ydGovZzJaNktqVSsrWm44WW9WcXNwVnVxcmgvbEx0NmdoSkpZMHI4dkZwbTVzb09uL29vS0pLU1pWcS81ZE9nNGhQSkttSnpiTThNOHhRbENGWVBSTldYdENiVVR5TzBHVmxONkFLQk9FaFVuS1ByempVMU9PbUtxVFpaNXgzTnNoRFI2YkhFNFpSck9ITkkzWDhYOGtOWndVSFR0bnkzMU92dkp5U2pCZ0Q2SXVBdThiejdEcWUyTG5ub1lBMC96dG0za29Wd0ZFZEZ6V0VOMEtSSE1yTkt4SWMweXNRNGgxRDVreTNPSFlCbE5rYWltMHFjbTh4UTdOZE8vdThEK2FSK01aenFyQVhnTUZ1WHJzZTBPSkNnZFJFSTIwY3gwbzZPUXA1WDJsM2pZZG5ybnlYbFQyWkJMR2lCVnB2b0pQMzFkNEhsMXN1NDB3L3R6a0tyZ1RsYXRPcXdXaVA2Wm0wRzgvQnRKWG44WFMvSUs2TUdtQnBhSzdRREpqNG41emlyMFU5aW1lTXNvNi9ZVjk4MldGaHY2a3JGQmpiMzFjR1pSZWRQVUJ0TVZqREdwQ3NveGFEcjZXeGtKcWJCY1BpL0dWTnhPVEhRV3BiNm5VWHR5UzA2emhtZmFDQXc2NUIrNjVlL2lkd0ltWkZJWkYzV0tQRjdzQ240dXoyL0NWVzNHZnVjZWtCVHFWVEJoUmVDSldaMG5SNzNJTkJCZjRsRmFFVEpVYkZFTkVtOS8zUFJESTNLc3E5dks0bk0rMm1HcHUxUk5nWTEzamFhQzJvU2J2SEhJSnN4ekFxcUdBR0dGT21IVUEwTjNaVWJjcCttTUJrZTZqRFZ4NzhDb3dPMngzR2kwWUM2YzdZVVhPYzBwNEhreG1WanBOSmhqUVcvVkpwZElPMjdVYVJkeTZKZG5hRklTT1QyRll4NVYzc3FGaU5YRENQUXRvNGhSV1UrQmVIenVHZVVYd29qZVRCa0lycTMwVHVjcXl4bE15TXhwZlBuYnhNL2IyUnVTK2dxdHMyOXJHWjdCV0FUNGV4bzJza3FKVGlZTEpVckdnVmtoU2JMaXRIK25HVmVwMU1kRlFlNzg2a296andFSTlENTZhUFUyZHJtcnB1d2tWRHhFbm9OL2JZWXA2ejRUeTlJT2VpNEFHSDg0YmIzNXJ3TEtmaWRQQ0kvUTM3aWxabXQwRHI0QkdzTlJiTmRDWDdSU1hEYTdkU0o5UFB0NmZyNFJWaGh5SzJQTU9wbEZtanVzd2lUMWJmMm5ieGFQUU5FTkk2dmVXMW5nNGZKZ3QwcElSc05PUGNQZ0dkQTBML2x4TTRqQldYWTBkc0p2WUdYd0thdDNmOGhraHIzM3NWM0M4dEVxUnVnY0ZrZ1NiR1ZrRlJhWjhIb3p0VUpNNWFqVzk4cHIwU21Eb1ZMTWs0MXhYOUhvbWQ2UGZaTnZhRzBpTE9JYVlrdVJpS2ZSbnFxaUpITllyd2ttUk9IZENnTll3STBXcURQRVl3Tmo5YndRTXhQREpUM21ZQ3o0Nm5FbmNOQ2d1T1JlSWMvWkJLekNKT1h5Y0t6c1c1S3VHbnZnZ2NzcG9jREdLRHRKQTZVYVhHaFZxUnN4Z3NadnRZRlA2bUtiVStTcExaQnN1eWtEVEVYNVNqclBOeGdKN0JUNUVkTUNyWFBqYllEa1ZteE95cWtNSEl5TkJGY1BSYXVjZGV4VDR2QWp0bHpscGlZdmJacmQxMHhlRkVoU0UrQlJOeXN4WFB5Z2wvMkViUjdSaEtxT0N0UWxxQVd3dEJGeml6d2xRdmM3bkgzVjZKdld4NnpDaDB0M0lBeW14R3lXdVovZ3lFeVRxWjVmVE9KRjZVZWtjYnI3SWJseVVYSkhEbFJmT3F1c3haWVgvSzViM0FLRmFBUGRaQ0dJSFBSZGd4TURYMGEzUmt3Z1B1VHFzZFlKOWd4U1E5aVJqSlE4UkFwVnJRSGRFUW9KUWtCYitJUlZ0MVhXRDV6bjlwOG5xc1dVd0RLZ1JIVXJyS2g3MHBVU1M2S0FDNnF5VHRIVEV0aVZwY2dmNU40ZFZnWXZzbDlhWkVVUURjcmNSV0V0bGgzaFI3YXhTM1prd1p5eUl1MWpQNHc4YktzdHdJM3ZuNkI5N0dTOUxHa1M2UWJXdkNRZkhYVFpxZWRhY0VTN1p1S05Va1BxekFRYnA0dzlzSzBTS21vYnQ4S1hFSGJHVVJ5Z3VzajF2eXYyZDFWTk1aWlNhemEyWUhyNi9wdSthclYwSG5pU3FObVRJb1hFd1RSajErclBCUjRVYUZDcVVWUFVHNmdESERsVVY4YWRmbVVVSGdoVE8vOXlnUTE2R3BKZ05ZSWd6UDI1WGJ5UFpLc09KQ2VvRGEwbU1tcjVIVW1kZERnMVJONENzb0hsQTJUby94emRmSXF6eE5obXg5Q1NQNk0veGdiMHJWUTRjSHJZbmFiSFdiWVpNcEF0NDhmN2JubUNnTDBXQmhjOElCRFlHZ3ZUVVM2d1FMYmhSOUY1cStsU3ZZZkQyY2ViMjZZS09HbUtTWTgxOTNNa1AzYTFuT2NqcityZTNBQ1MxekMydzYxNXNUT0Z5ZWhQMDQ0alVBMEt6Y1EwTmZkVTNraFhELzVHQkdyU1NsRmRpcjNteVFBbU1SSnY0V0dUWG1vMWpSbVdTWk9hNUNyRzl5Ynk1Mnptc2czOGJNczhCREx6cE8vOVhIWlh6akpQbFNTYTdlYk95TVZqMDhpK1FzTU5TZ1p3SmtnSGdJQ0VTTmJpRjlTeUdWZ2FCbEIvYlhseXZUSStJVjgxcUVUdDdCQWdPcHA3TFRXRkN3UkVZdlJDS2V5N0NGalMwMjRiRmU4WHp0QnBVMVNXSWVXN3FOa2dDNEZCdHB3ZG1iaE5kVVlMZlpVRy9TWUI5LzBnYTZjTkdTMGJoV3IwWDhOWDdqZTJwK0ZhYmhScVpVQkZnVnY1anI1Sk1WQ202bjhnajY2anVUcXBHcUtGdnFudnhpQ0JOdG1vbVMveUJDOGFUMTJFWW83bjF3cmdvalNnYXlKY1M4eS90MU52dm5BYUtOTXdaZFk1ZUJuc29JRU4xN21JTVJsZXo3YWIzTHdtV3RObmJrbmVPc0E0V3AyMmpHdUF6eFB5dzdSVmd0b0NBQTlDekdNaGNISFRDUXBEa3NjaEthVHRjeWcyUTJoT2VvYmEvODRNTFNnRldIYldHc0MvT202RFRQWTNBRHpiOElJM0xZN3FVYk9Hc0kwaktML2lIckswVzVoN1FzMCtuYnNFbmVXUWorSHVPTEZqSHF1YjJxSG1hMHJoNGU2SWwwZCtCNGNvV1dTNkIzbEpzOFArVVBRWFNrRHVXS3labGw5eEFlODhTY3lwS0FwaVUyRFpWT2VhLzhUd2l1NFNYZmxDOXJVL20wN21mUy95MTN2dzBxQzVUTVpKMzFmTDhWQnBkWUczU0JXR0VBUUNUVGhORkRnTEhSaFNsbzFVWnNSU0VjSG1IU2U3MmZkei8xaGs0UTNISGwwcWppK3FGWGFBLzdTR2w5OHhpbnhQcG5RT2JldUViU3VycjlRczdISU9lL0hiWWhrMGMraE9Cc3cxVk1RMTRzclJnRzVETTRRbWtJS1g2enRhbnlYbEp4aUs2SnJwdWI0d0JwUEZBdDFxWE1UanF5aE5wZjVVK05ocy83K0FUeGhvbTNrWjlxa2JRZzUzMnZ4MmRUUW9sMlZMbTcyL3ZuSC9vRTZLdlZWcWttcjRSYVZkVCtndERsVXdILzNoRkI4dGxzem02RG1Oa1ZsNE1aa3lJZXhZandxbk5wMVQ3WTJpdGUralBXWkJuN1lmaFowT3F4K3pONndENkl5ZVF1b1Nvb3ZreXBIOXNDRlR6REZjSytMWHFGL1MzMGV4NlkrY1pEMXRSWEZNSWplajVDTmR4dEdhL1d2OHRYVU55bWhxemltWmpTQ0N4Uy9NZDExYUJZdDRVblhDSEFSb1NqTFREUXJTTnQvcWpwbkpqVGZkQklsMk1FNzZBT0VQL29zQ0dTMG5RVGRhWTNKTXp0OUo2M3VYbnVMOVRkdHVtNTdvUDhESzRKcW8yQkxxOHIrOWVLeUJVR0dvaHg4NzJicXJ1c2VnSThONjIyTWdSbStyYWlEQ3ZpbTRzait0MG05eW1aaVZwMnI3Tk5xZGdiYmU4ZU1pS29UQVcrajhJbVF0bnV5a0hucThTZDVrV2wvWHExVjRnOXhSR1N5SEJGa1dYU3oxblNsRVJsSGhIbXZTV1hiemhxZm93SVhHU2ljMEI1cUt0aHdKZ3BwUEhuYlZvQVhoNDcyY0FmTXEraXZKMGk4TythNFZZUW1sbSs4dFloUGsxc1pDU3BuayswRDN3aDA4QkZHRFEyUHY5eUZQb0w5bDdKU3VSZjgrTkFGT2lrNmZxMmRTZTFHcGJKWU51YkdTTTJjcVo5T2V5WUUzSDF5VFBrdkRzRzRjNWtqMms4cHM5UmtCRHptUjliMnN4UFpmbzVYVlZ0ZWNtQjdvME9UdzByUDdNNElxN1pXQnZ4YnlEOWJueHY1Z2tFQys2emJWeVlQMGFVUlRyL1lQWmE1KzdEQSt1YUVleWtrQU85dzJMVjFCQ3BhMWcyVEQ1TENkOEl2VmQrOXA0c3VkanVwdE1EZGZvYVBsdTB2Z0xNUkpkYmd3K0ZYNTAwczFKMWFTU0FQQ01QYTJtL3RwUW5xeHNvbk9wSnQyM3I3cXdFcEt2eFJaL3BBa1NMbGZKZUExdFhiSi93a0hFU3R4MWE1NUFpL0NNbHBGZkQrR2NvQWFxSkx2WVU4bStwVThyQ1ZPcjUzNzVlUVN1ZFc0S3NZOEVYdlRWaUdoOE9QL3Q1YThRRmZLelZZaUYwcVUyaDNCTGZTUEd2Wk9HcUpLNzRSSlI1MmRRRXoxdCswNnp0OU9EcVpVNnZKWWFjMW1sdzE5Tms0dDFpZlBnc1B0Ylg2M3FUbzNYMzJublh3cEY2WFFqRHppMUJUOExGSWRvd0ZGVDBsTGdyOGxBZjNzZWtmTi9UQ1dteWJUWHBVcm5CY09SOEhWOENlVDZYdSs5ME9GMDVLYkRDdXAvQVBKL3BMaGl0aEFDeldjckVlL3RENmQxbWtsclI2b2NkK1dBaG9UNm9FV3BkcFJHOVYybGtMSVhPMXdTOVhJWDVPTHVmclY5bFRwWXA4NG15cjc4OFBFeHdCWjZBalNvVTJXaDFTczltUm1ob0N3b0RSYS9hRXFRVDhTTDVaRysxUFk4OU9BR1U3bWxiaGtuejJ1dG5sZ1MwWFM0ek5BRS9kdEtXOHJuRHRWaHRSOGNFSkdnbUJUNTFwcGx4blhnbS8rdzJiTW4vaEsrOWhWS0N0d0Q4SmwxcFdQV3pnSDl6MkQ3ME5iQ2ZEaTVvK0dxaUpzd3VjazdXQXFrY1Vub1FTbmZPNm1WSnIxeFdZOFpzNnE4MFFDSzJoT0JqN2VUeWtnVGcyd1VyOWhaSHE2QW9KZ3NSNFNDYk94ZFlMVi9DcjdKRWtpRGd1ZUIxdjQ5UGJQcU1yUWpKaytzK24wMjA4Ti9LbTFUN1pDbzBTK09kUlY3bDNSb2ZYM3puandyQmFtSkIxUnM1RGxvblp1WDk5aEMxcVNpdnFHV1h3c1oyOEhmTmhVOVdpRk1RajhieExRd1ptRk91UkRmQk5yWnpyUzdZWkttREVoOVVXUjNiWFBmUm5zYnptZlNrQldYWElGMkwwRmZjN1RvdkVQYXJVbEFYZlViaE4vamFZYldzOXNjV3B4MUtPb1Mvd3NBUFRDeHlIbEU0OXQ2YmVhcXBJbHB6Rkdqa1pETFo5SnZtSlJWUnBQbmxHS1VWMm8zZzNDNXJYdFFzRG9iYTVSSit2QTlMZW8rUy9sUG9YTHJBdDBLM0dBRmwxZHJxay91NmdBVUQ2WGRZMVFzeFZUSjJSNjRGRXF1bXJEQVA2Q1kxS3NCd09IRnUxMkZOKzdSMEY5d3gzK202aVNCODdVd1Rwekk1OE5JbzhrRHRkRFRHdWNwTDZGSjZQb0xyMkdvR3lHOFFrbnp0elRJSUFHVjNiL01FLzFDaUZqcXVsbm1ScytRczdLTTE3d3h1YUxNUkJIL1hBV2k3blBuSlNkMjFNNkhyVzE3QmlKME0xMWFlcXRFN1FJYk9jUW1QRUs3MEdYNW5OOWRSRFg2WVF4bzZwUHZKc29IdXc4OUNHY1FMSFUrdHlvQWFpNFpVTFR1Qm5Ic2tWOVo2ZDFPQ3c1Nkg0YjZuMng5enJUTTJLUm9ETlZtY0JNSUY5dVFFQWEvemJtcnJwQUtncU1LS0lxWnpKK2dlendKRmJxaC9jUWg3REk3dG05UG5wRmZqMXMvcEt4VEtKbjVDcU9RbTFsSkhDaDI0bFpONHFOcFFmSUh2aTlmYy9TSXp3d2dUcTVVMnJOa0ViYUVyOG9DMUprQ0hkWWhMYjAwQ2dpamlUYjRKaUdLVVZmQm5HRmRmZFlobzZFdDZiQUpwMWRDQlZLaGpSNVRVMnBBWldoZkk1VkZta05UQm1TN2ZBeGtwSXpYMm5UdDRDS2dHd241T09aVDcrbzAxbGRBREhSQ2xFQUlETGgraS92cUlJa1N4ZGt3eFozRlZRK1NUNkIwRldlaVk0bzhocWRVZW5NdWVKV29ROThvZFVLQmJUSlF3aWxjeDM2L0krUjJrbTRKNDYvZE9GVjkrYXZUdUVIaVRSSVdvZjJJNWdLSDBXVEh4YTNuVFNvMndCclRqeDJpc1NsS0FyYnJFT3p5VlhNL003RkJhemhWalRURlFibkxtbXlUQk1tQVFxTXhaRk9NUnpKOGtyMG9EM0FteGMrRzVmREplVXBMZGtkQnhSVXdPZ29tbmhIcVgxVlNtVU1ZZ0d0dGVDY2RqNk5lTWFGOThHOFIzdVYwRWlWcnBMaEt6SE5jdmJNV2Nmd2pFQWx4WG03ZjZ4RG04ZGZ3RCtZL3JVUVlBN2wyNmxNYzFEVmNSeGtvRXorVHN2SXNORUNzQzZXMTVadGprMEZ0cHpmVW4rNXBMa0JBeDI4N3ZXdzkzV0FiUVNyK1pSeXIyVlJnYlJwMnc5dnNFMGoyWDYxTWZjV1lUSmptVlVhWFVYOEhpR0R3K2VrQWNEcUhucStleXVHUU05RmNPUjl3aHdOVXFEbm00U0s5UHhzYWkxcXVjQk9LUFFSRVJaVTBPbzNFTStqdWlUMVFtakxIUUs3TGdxaGhlQWZrVkovWjhzbldib3g2aE9WWjg4Kyt2Qmo1SVdHWUZKOHZKL0tjdEFmSnRNWmJEdVVZbDkyZHJ0VXUxekZndVdMMms4Y0oxd0x1WVBKSk01Z2pLRXJDcmRxUzFJTmRxSHhqRmhLOVc0NE55Z3QyRG5Zek5IZExZYWlJSzNvQ1JxbThaeXZMcnV6MVFHRGZhT1dSN0IzTWFzcEYwR0ZiNHFncmxBSHZhQ2xNeEpINWR1TE4yUEtPN1RwTnNPTmRsRHNUSkErRGJobUluR2hjQnlzdmtLd3U2ZXA1ME9BWUY3QVZUZE91N0xUaStCc0x5VVdtVlczWjgzY3U5SnJEMlptNHhwTzQyTm41UmRVTzdWcHN0T3h3dWZxUVNRUXRHMktpTVN0bXhpN1JLUnpGald2V3FGNmpXMVFMNEk1Ti9vamI4eENWd0VPc3lzV1NqdUdxVU1oZlZtdVdCNE5iTHBpNFYxYytIQTJBdHBnMXlZcmgxeHUrbGhDQVJnN0hBMFBtczY1T09TUTl2QjdySVZNWlFlZmNSTjhjTk5FM3JyTVl5OVc4VmdKQklPU2hBc3hpQmxReEhkMElHL0t4SzNzeEFsUVpnOHNmNXZKbVU1aFJQZVVFV0dSbkJQM1ZRLzdHWU05NVV5NnlnblJNNlpoVE1IQ29aWW9LTUVlWHFPaVVUQzR6cVZvRFB3OW5qSUZ1aGh3cXpqMXV4TE5LeUc0WEdtMGgxSkhjWnFVM1FSRlR1U0Y4cmR6NDU2NG9WWWRNcmRtNU5HOUg5RFFRUzlEMVVuQWJHWnArT0NEL05IQUdlSzl1ZFF3UVAxSFgveFpsMVpHQkczbTNKY2VMeVUvWjFQS0p0SkdDMzdVazlkblFHNnBaMU5SSWRMV3drK0p3cDZvcm9xVUtUc0EzN0VveWtsWG15QWVJQmFiYTNsc2g5cFROUlEyQUxkZWJiUjJ1bDBLUVk4LzJ3RlhOTXAvZHdhcHd6WFJPSzBGYWJKSTJ2OUhXZXZ5ZmgzNFBaTWYyNEpweUQ1SE1mVUFaOTZlMThmdzlVVnpHV21qdzU0R3V1QmtVOXdncG5DQkpHMDFkbzJlZ2pjYUlhS2JyM2FDV3V6RlF4Q3VZYVR4Rm1oRTlOb1czbkUvRUx1K3NWTVkvS3ZWdG55NnZFUmtUOTRqUkd6TUZHdWpCZXNDeWRrdTBXMmhhQk1tTm90TEJSODhGMllGN1lEaFYzVEpVRTQveW1vbkhhWEhKSnlrU1hMbzk3VHpabm8xRmVOOXkvSWkyT0I0ZS9DVW9tSjE0a0xsa09jeUNOL05temdxL21EdGhlQi9iM256THpqSWd5akZycFpkb2hhYStlcVU2NjAvRjBrOTJNRnRxS0w5c0M1S0hKM1A5ZWhDeUpIUHJJTW8rVGk3cGw1WkZYT1gwcmNoU3NzY3JnR1lkM2ZtaVl0VlVWY205UXR4QkYvRkRFd3drL2lGTFYvRk9odTF6M2NJeFJuSWQ2MHA5RCt1dGthTHJaejBzaTZxQkFwMmFiTmhhSytzVnI2cjIxQ3RLUFgyUk5wcnJGd05nUHROemNmbzBLenlyV05ZQWlkNit2VDVscExxQjdLbmMvOXpid1lJVFZOVkI0TThvRnA5QW9oWWE1UkJpUGcwMENRRWR0UDQ1TlREM0lwR3k1V2JjK3V3Q0grMWE1SFl3b204K1hBU05DZEt3bG4ydkROenduWTNiTmJpL3M0MXp6c0ROZy9sRVVGaVRtOWtnWWpTQXhXaVpEZnBGSzNkUWJZMUF1eTB2V3NOWTZ1cWxJdk9YditXUzh0UXRUS1BPQmZxWTNnTlRmelNiYVZVSDJqRm9rOUdpUzN5Um1pZFdidHRlOHFMaGY4T0pnd2JiS05sbUc4aFhyc04zSFlVK3E1a3RObHl5ZVB2aFlRU1d3Wks4Uk5GZXo3eWJjdTVCUVFXVjNoQVJDT0pGbm1PVFRkY05sMDlqS3dWREhIdmlyRExUK01nMkg1dEZDRGMwTjBNd3VCWDBEU3NMeDl3Y0NjdWZBZzJyUDhrejdPSGVqUGlKSTlJNmw0VW53VFY1VEI4aE9ybmlsY1NEMm1LTGVRMDczWFNvalpUa1ZtcDVMdncvRSt4bDlIMEc0WS8yUmp1Vnd0T0txWjBpeE1OMHQ0UWE4SUF1SG85Z05QV0hDdkpSVnl4Q2tJSkozc1pQZ0cwUWlTb0srQVF4dHI4R1Q5ODFibjRQTnlCN0tjTTR2WFM3bDFOY0ZIUUFrLzBESVplci80Q2FFNUVqU3FlNkdPOHhpdDBBdEVOTWNUd3NocmpRbUNYM1l6SzFEa2NZNk9sclkxa1l0YlEwUGo4cVZYSE9ITVJFVnZ3R3V3SytvbHZ5ZWJqaHMzN3JJTmFwZWRSOEUyS0NyTkNwOWFDbXVaQmUwQSt5cVl2clY4ekVuUTJCVkpvb2lrWFNmN3NONmxEdkxONE5jZHN5NEp6aUZ3K3VLYm1NL2RkYUFEMm10OUpBOVpqM0E1ajBLY0Jpck15SGs0Y2NwWHU0a1ZLTVFiamJMR1U1b3hVdU9ZYkdhTmtIY3Y0NUo4b3R2U1B5MzFhN0Q1RDFYa3B6TURDUUUzREFzNkZHOFBiMVVXZ2JQZ0grS3o5ZVFZM0Ira1dnMW5mOE8rWFRZNkVRQjAxMmhwdnFFWE41TFRGTzdxc0Qrb1IwanU5OWJOczdQc3VwWGRRNzQxbVpPOVZJQ2h3YzNXdDI3QkgvRHNTcXpLY1hTTUhDM0p6QjloeWxyS2oxZFBuZzhOQTlBQ2tsZVlzSXlTYVVvaCtydFp5YmVoSXVLYy9aamFKWEUvTXVUN3ZRcE5VbXU4cm4yc0VpbVZyVGorS1RhY0hmcG1vRUFvaGpIVUx4cEZCWFZUcDRRc1hkZmptM2pKays5V0gyWEt1cU54ckhjc1l3ckE4UTVMd2UvL0R4Rmp4TWx2U2JGcEx5c29TSjlTU1hhcUVLRkZRUXg3SDNrbnNmOWlLSXhhTmNJc0o0T3JRR2NPUWFEVTBpQ0lqLzR0RlpleWRhdEdZbUw4eGMvdUZIMkcwR3cwNHl5T2tvRVQ0NVlLYUlEVVZjTDFubVF0L0VCa0dneThQeGZ1bjQ5ZlgwbytCTE1WamtaaXdGZzNmRVBHUFJzYUt6Q1ZuZkpST3FtQjhRa0UrWE1oVzFuOURGVUxvSW9zVC9peVkvWFhFUi9WVEhBVFVEMFF3eTBXRHlJWWxzcWJCY0VuTlBZUTBIMUM0UE5lVGNZRzFRbHRrd0JTSnMxTEdOSWFLS2RsV2hOc1NsY2FUcWZsWU1yQkc2SHFnUHFkSFA1RUNMNTdYU2YrUUlaai9pVHB0a0tKa1F6Q1hRZEQ2VWFlV1NOWmk4VmlmbXN2elk2OEM4VDRVNUJZa2tGeUdURUtxc29vTDdTeVdESGIxd3ZhZVA4MDFPTy9WTEhXNDREcGpYMmpJSnRPYlp4eDJPT3RXWWh2azVRRDFOTnFkcTBQQUdPZlhnQXhOK205QmpFK29hNWljSkc1K1NnMC93RTBJRHRwNWlRR0tkd0N6aWJDMGx2TDEyUWpXZkJhM04wVkp2dUZKM205dUE5eTRValJYSVJ4UGdGNElzRzkwalRRRUg4VHZzd0lhNzFqRVpGSzdHcjlSblQxN3FNTVQ1aTFDSHg1Vk81Q3ZSWXhIYzloLzExMVVYcnV2R3JwZjlvd3pKaTFRMCt1Ui9uVHRSeTJ0M3crdWVWWG5uTUVvZVpwakFOV2RjZGZDMEhqRzVWTXpxMVJXQXpFTGRGVjNDYk1MTktseW8yNzMzdWxMQmlEejBMbE10aXBVVUNSU1U5YlhiMVlOblA3WDd6aVFnZ09OVXhuRk1pc3g2M1JiUGNLU3U4d1JLRTJ1akZBMXNlR3NjMkhvMDhsTmFRL0ZsUC9IRXN6Nm9JeHBOb3VhNUhmSXhrM0FuZ2Y4MkVIbVphQWpheHZPR0xRMFlDeFdVZ1ZsTVphZ3lFT2Fqck9ucDlieFRocEFxMXl6M21HLzBpaE9yOEpFRDBEeFhHMHNtMEc1SGhyN2VYTDF3YUs3a3gzYkg2L3ZhckJsZmRSVFBKNlJwNVlxL3pqcE9UYmhPVzJwQTlkS1dsZExHMUJOTS9mUHVuemN1VzlncUlxUWtnQWt6RlloSDFmV0Z6MTFJL01nUUtRUklpRTBUODJRU3VmdzlUSVhIZnRwbEkxWFlwUTJ6RitsUm9WanF1VHFycHV3MUlJQ1ZuV0trS0xFMHRoOWdqWTFEZ0JSd1AwdEFpcC9LamNBSmI2UG5lVUpoRUt1OEFFU2REd0dLUmhUbEV1K0wyMDNyZ0dUTlZoYys2Y2ZPeXlMRi9FVTd0b1J5bmdOYnpHOWlSQVBiNXp2d0tGMFhlY2pvTm51OEVsRlhRamc1R2hjb0Y3VVBMcElETzhxdXlGNEtGNG9uOGNHejVreHRhY0l5aWRZNnppbURhRlNLRTJoVFRhT2sxRmU2VDVGWEFmc2JOTGFaaDFodkRheWNBMTdCNjVTellHRC9FZ2w0aFVkWGlGdENla2VYTTBxN1ZROTNlUmIxY1VrVGcrSzZ1dEVRRUdaWnFRWWdKeTduK3ZYWElxbmhPVWNIa05CaFBGMDlXVndXVW83NVEyZ21uc0NobTB5Q1RWZVhpcC93bENzY1JRSE53RlhaWHdUcU1wckZFTnZrYUVoblJRYjJDbkpza3R1TXc0dkJuRFdFcm1UVWlQSm5HZk1EblYvbkdYakRwdnhTbDFSQ2h0VkJCOHA1YjhWUm9vOUtoSUtmZW8xQzFUWmFNd1lKTVhDTndoakRtaldYMkxCSVFpWGlsQVZWVFptdTEydVJtUlZJWm1JTDJib3RXUHJxWDIrbGQxRjVZdlk1OHRJZzBSaUNFUk1LendXOS9wYWlNK1hBamh4cS9WMVJ0dVlYZFNXTng0SzdxcWlvSE8zZGxDdGxkUGduTkpwY2lYSldrdGxHUEl5OXFjeUpCQUptVmRNMVV5aTYrdENKc0xSTUx6RWFuMlhabWxlN1RYT0dManhwb21uWURDYU44UHlLZ2VISVpxdGd3ZFIwMklXYVl3cXUvcVZTZWFXSFRtbXZMMVhodHFCT2FpaUd6b3dpTkhhT1RXR0d2T3g4YzJ1bmYvYlF0MlhRKzk5Zy84N3R3L0Nkc1Z5UFRDa3hEaVFrNkkzTGpJZlpaeGtvczh1cEk0NS93ZVNCTHNMOU45OUdNTHZ6UVZJUDlIQTVkdG9nQzg5M1BEZHB6VFpkSUFYbUtkSnBVUFBSYkFPM2o3WE9meVdwaVV5Qmc4clVLSTJNWjIvRXp0UVF4Qm5rVCtGZVBMREkva1dRcFBqd3B4dVlmMDk2Z0h6QWRvTFZqUE5PZHV0ZE9FSmxMSWdBQ3VlR2V4cThlQU0vK0J1OVFDWUdlU01BU0xLMUpFbVhndzZpOTlzVVJlZEkxUGFadmoxejgrNU5EcUsrejRISkhQNkwxWURScCtoR1crWTY4UHI4dlBzZXI4TkROTGZLcG9mcVl2SnRNVThGNFZURkppK0FocG9MdGQxT3N4aXJYWXQzMVpCbXRtL2UxWVNDVG9SbHE5UHJDV3RaMnI2L1FHcWFiNkNKYnErTThvRi9KK3MwQitIdkpYU1RSUm5YTEZ4c01WZUkyRWl6NFFFbDNaNnc2d2FuRVNUUmtYZ3RHNHhZN01MY0VoRno3Ky8zSnJtd2tNSmZpdHk2QkdIQmZiZ1d3SE1zWGpiaDR4T0ppcURyZ1EwaU5ubUlGcUZkRjd3SGUwSG92SGYwZ1ZPVVFTQWQrcTRxalZ0NzNQK2UrcDZ6bEdSVkpJM3M3MWU5aVpYZTZYc3ovckFGQ2F6L0V4ZHFQZWFhTVpGRHF3RDI1dTRKNmwwNzMzd1lXc3BFWHRpd0hrNjZ1MVZ6enpudFRORStRSDRPd1NhL1dkL0Q5dTh1WDVDanhyN2wvVTZna0haWHRmczVKL01KeXgrQjkxMnY2V05IMEdUeVRtL1VVcFRFVmFzVTdibC82YVRsWVlRQ1NrMm1kS0RIcytHdHpmdnVVcVlEL1BHOXdhSW4zMy9YTlBxWVJJM204eW9OTnhjMzh6enVnZVo3SkM2QVY1aTgzRkZadU1yaXdsYmxIQTZpeW92bjJqZ1VwYk13YVdINkJBenBIMm5UZFVOS2FDZUtLMEZxVG8reEMyWmtSTVdXb1Ntdk5mQjc2eHM0YTJqaW80djY0ZWN0NGUzVmdLdHNrcEV0OVkyNkFMWDQ3UWloN2ZyOWN3ayt2V3VQSFJaTlBxTERxVDZORXVCYzZ5VldjUm5HbTJtMVhtVSs0VUtrdnBvQ0syUlFKVmc1S2J3QVpMUGpSN3lucC9zN0Q2WGI1K1kwLytZS0tpZUtQaWVodlpDVjhFZzQ4TVM1aG1WN3pacEg2bjVJWWtnaGk3akNNUDZ4MlVqTnVCZWNkcDB1WGIvRnhxWDlMVDd3NElaY1l2OUhOZ1YrUVB0UEZyVXlQbUloQWZxZ0k2cHRvOEd5NnNWNnlKN2dBdHJtSlQyV2xMWlZ3a1hLTlo0a21reW1XNnZ4SGdPUFRUd3Jnd1AyME5RTmROVG4yeVFKWi9ibkhEcmNBMHoyREpLNW5LeENWWjF6RE9DcXVYWTZMZTFDTm0yYVJkWFJOZzZscTdJYkFwcmlldVJ6cGI0SzREdnRtZDBtR1R1RXpFcDF2c0p5TFliWDNjZWJaZ2NPNzdXSjB4QWtiT1FxOWVEbGhscWFEZ2pVSDhmRHl4aHUzVEZwa1JlQUtrbGNscEk4emlBalBGejRKTGpHcVF2cktnUDNOSW92SFhUeXAxcVgwZ2lYWTBWVWNFSncrdFB4VUc2UU9WKzhUYUdvRDVtTVJZYjdBQVMycWxPVUpYcFNKa3Z5Rm8rdXB5M2FqYktyaWI0b2xJaDJTZ2pNNVF0QnBwVUxaRGl1NUVsTmxGVktmajJOYVlDZG5aRG9IbStGaXN1Q1VpWE5CWERweXBFNHg0ZUlFMi93ZjdFNHY0N0krelZ3S2t1V0Y2TE81ZWFFWjRsU0dFU2QxbmRTSEh1RHdGcjVMVkkwVmdWbDRnaWRmcytueENqNzRBOXdrTjh3S3lDem03VnJWOHBtcU5WQTRlOVJ4V0VscU1jcTBGejM4YVpSdWtnbDZhOFY3dWZHT1FFbXZnMmp2YVhsSStqRkNjYzNUOTdxM21yYUwybUNJWFY0LzAxL1hpbStuNkl5YW9kd3lNbXZ5b1NUTGZrRGliOGpMT3krbE5oZk05amoxUnVLd1pUWVJMa2Y0bXJlN2dRbkpOVUpvekN2bzRveTN1bmtRYVYwUUtrb20vSXJ5ejhBRVc5MXc3NFFjeVVkbEpFWnNnVk1PZGtnK1luV1hEUjJEQWpaM0RsS09tbDk3c1pLVjhKMlgrTXI5TWdZYzNFcjBRTHllZm9tbHhiKythL1hZblZVcFdBMGxrQmVEK1hDeUdmaWlGSjdoK2xKRkdnQ0IzaXFmUlAyQ09IZ05XOE5XRHAzU2QrTXpBRHk0WWZrcmp2YXpaT1JlU1VIRlY1L3JwVlpYL0ltN3hkQ2hMNlRwRkFhNTh5eDl2VTVHWVBpZ2JHMitXbFNQOHJySzZEYWMxNU1mRVhzVW5rWTViS0s3SjVQalhUMm9uY3VOdXkxUy91VG4wa3hwVUpRaUsvSzVxM2lMa3ordEVoUXNRVThDekg1UFBncFQ1aE95aTl4RnRaSjVMWTZrelJCOWNlWWV0aGRUeXV3eHdqZHdaVEQ4Y29tcEo0SU0zSXdQL1hMWUFRYUk4KzRiNlNGRWFka0ltZEtlQkhuSERmelRiWHQrM2xtR2dZUHkxZmh5L3d1YTlGTG5VTmJVNkxaK3o0OTllZ21HRDFNUUtaS1NERjhCVi8ydDYyZ1I5bG9tbEFPZ3htV2FhQWxxYXhmNlZXY1g0R3prM0ltbjNTd21LYjJpYnM5NTRzZzl3NmpNQVlBNjJpMlh0VUEzREU4YUJNQnBVdDBIQmQ1Zk5jV0Y1L3FSQWRyODVqSlVYWEJsRkROenN4YkFOcUdwajk1QjZWUncrSnlYeGw2WlNScnZ2dnNwNGsxMlpaRkNEMmFJRklsOXBvSFUra0Q2UGJMVk9FZE5xMTlmdGtRVCswUHRqbHlZVmF2TkhEOXhvVlBzcHc1NkJPNGI3M2sybGtuOEg0VHR6enJzYmROVDNudlY0bkpkQmhBaEhoQXZkQXJKemdwS3hEdjhPV0pnL0dnOW1sbytuUC9ENHY2Mmw1Z3NFYTBEV012OVVGMXVHMW8reGNRQzJIcTJXb1dGdUUvd3FUNjU2eG5kQlpWbEdsUmp0UnRoRUd1aTcxVG5HalEvZ2tZUWdwSXNmYmFuam5MdnBHeXpJczhzR1huVDdkSEZrbVMwN0hqM2F5UFUySFV6cklHSFBxczVsOXFxcHpzMlluU000YXJObGdoR0VsNXhicC9KY0N1cTNRSk1KNUxnazFpYjRNbUhiMytEWEtjWTlsNFZQaElKSGVEZjZWdVJwNUNIWk9qTVpmRW9qVm01aElBOHdYT1JYMWtqOEl5VHc2VkxJVXFtQ0hIQ1FKSFNYK2hkSUo5WkZCMEtZbWtwOHBob1FIak5MQlNYWW9lczlFeXJnUnNhdkxyU00ySlRRMHp3cVF4RFNXZW9OMUVicm81MDZIdDgzbEdjd2U5UDBvaDdTTUFHdUJsVEpsMWFuNXRDbnZpcVNMeXBqWjFyOWx0aVU1SjBVNFpRYlc0WCtGZ3RzMitiUTVUNVJ3RHdKRlA5eWNpbUFwNFFnQ3I2czBJRlkvZ1dSM2NYNTRISlN0eS9lUzB0blFGMXFJc1NiQ0UzeWlCMU9rbkcvODJiTDhTWTlyREZnUm5MM3gwdjlvT094NXRwS0N2SWxXaERkN25RaWx5OTF1YzhYQ0dpS1Y3Sk5OMm85ekhWK1BnL1J4bzl3S0wydVdCM212VE80dTQ4RmZjNmtKV3grcGlXRnczdWJ3dHhvTnNwYVlQSVB5Z3hCc29YVTE3SkZwMjRVMUw3M3Exc05uaG9wc3JMT1o4RTNEdUd2MTNwWlRBdFY0ck5lRi94dlJnV1ArMGF5Sy9wR0NPSDVFSmN4ZHZueFZkZVVINUc1ZHQyb0hvbkpYMlVKT3BRVzBibFFPUmVPV1lCSzR1bnIrQW84dkRhMityZU5kT3dHMmtZNytRczNyb20rY1pUUy9zZ0RRTjBTWE5waE9kSVo0WUh6ajlxTHRXUmV0WGQ5eHpzaVB6dWgzTmN2ejUxTVJRc2d3TEFZS0xpYWlVRDlFOG9jZ0tQTFJUYUpBTTBWQmlOVEs5SDlZODE0NkE3Z3JCUjZWYUpJZUt3dXp0dmtzbG5oVWJvUjE3NnB0aWZNOU1UWkhYdDZQSWxhbG4ybStnS0h4RXAzdkZJS3BBallPNmthVG82dDNmYkIwVFBrUWduMEhSWFlDR01YSk9aOVV3dTM0UVdqWVNnS0pGMlRURzZHSW94ZjhFRlBFbDNoQ1c2aFoxM3hCalRkZnlrM3JXR0NQMVp6QXBzNUJCaHg2aEkyblZSNnZSU1gvdURDR1lHczJhU3J1OEVrVVYzMEhMMm92bFBNV3VZWHJkNWFQdjRKdEFvNmlFMVNRR0lQdjZLdjBEeFNZWVZvWENIWjNnRkQwTUhxZngxVDBHK25JN2kvWkdhUWdSNGpxMlhrc096SXgrWXF1akZMNWkxTnZVeDU0bExLSmNWdGxyZlNkT3U2c2hZdVBWMTZnN1hrZ0ExaFN0ZSs5UTEyS2xqSXgxVGllYlZ0YnJ0TVlFOGl5WVBDQjMvUzBXWjN1WGJsVVA4N0VEYktuVmRpNmxYd3ZTbHZoa000SlBEL1RTNlh2VHBmODZ1dWkxaWNSZnhHaU9id0dmQWhzakhieWpQUk5Xek1QZFU4dXppM1ZkM29aOE5vL0hJRmpad2dWVHhrNm5CaGw4anUrQVg3VVduRFptZldmZFpyUXkybXFrOTdKSDdtVkxESVEwam9sYXhTMHB2TGxpWGJCSC9VQi81TUlPOUYzaWdhamZFVnZNaGh0R21BUGcyUStsQXJ2MzlDbGJGSnNMSmxwK3oyMVU0LzdFeFZYMFlVSndiNjFmYTBURDFqYnZlNExNTGpydlZJMUhLVmEzaFBacktmNHNpanlDL0YrWnhPaDFRR0NEZXVaQmRnaXNZd1FlTzNTdkszSnFjNU9ibDRQVWR0TDQxTVVTc25iTkRqTVhjd0xydStxQkxXMUdUYXNIdUF3Zm5KQlZkd3pseXhyejlHbHBTLzZUdVdxQkxuUkdWNVByOWJZa2hvUUdyaEpXUVlySW9sMDlpL2FVNmpoWkVic0hWT1NicjJ1M0ZzcUlVU29HaVdMOUMwL1FMUmhwTFpGTGZVUWErT3E5V3VLY0ZSUkRnMkdBUGlxU25Pd3IrcExtaEl0a3dRdW5rS3VYUGppeHlJdDl2dmlMbGJtdFhBWkNCTGFuNFFwR0hISjFXLzFlZWFlZTFCZzFEVGtiR09rL0dnSFJsWG4zMUU3S2R6bUQxQVV4SmR6bWh2R29IYUJpUEo2U1RSM0xodEpydTgzL0pYWDBJTFlXOUxUWmY1dERCd05VUUhYVjJqZXB1RTFDZHBFRm9jRm9QTUhleEVQaGJLc3hOWVA1RmtDM24zK0hLa211YVdMU01XeTZhSnA0YkFRWlBsRCtUSVlHM2N2aDVHWndjeVR3UzhmSnpHbGZDVFhmcklDU1BIa3NuQm1qZ1V2MVFjaGc0OGR5cFhKR0NLYmI4am9SOTA3RHVaazAvWkFiSzIyQ0dtczhjZWFwdzlsdDcwUjREQTN5UnlJSkU1N2ErQWhRM0J2ZFlTN01jL1d0aGsrNlA2dDJhU2U1Wi8wcjd4RG04dnZUUXA5UVFTNFRGWXdSNnFOY2ZydllRQjRhSGc1Vk9DVXAvSWdwWjFVVkhxcEpLc1NPSEZyVThrV01rVUwyYVJPQkhXcjZkWGpYZlQ0RWQ1b0RWTXkrS2Uvek04ZS9udE9WdEFaUmJNR2dGRG9ONUkwWkZxQ21mdEx1MFdRcytuOWxjQnRrUjh6NFBaUU92NVp4OFBPR3RTanhxb29ydGFsOWpsMjEwaVFUNWpzOE1YVGVQeGRhMi94Yk92d1ZPYjFyTkRKWDhHOVNMTldFeTd1c0NuZlJVSFlDeVo4WlBVc3dBc05IeEYveEZ2ZTJ4dGRYWUxtRmJNVUZVRytsUlZjLzBhandaMHIzTTFVZlZqSzRWQXZOY1IvejBTdGZKMXFzTWRaZzd6ZS8zVjJlTjBlNGtZL3RKNnFjZ2IyeENYNUNZOXZYOVJHNERVV0REaDVIcmhQanFadW1xdXgra2JCcGU3TUtwSkkzMzErWXZKTEkwcXlaTC9MUVpZYzhERXUydmNidmlIVUFyTUQ5cnl5QUtXaHp6MFJDek1tOUkvWEhMZTdLdUVNbkVzUFF0c252SXNJZ0EwR3ZXU25ZYXA0YldCZDlzU01Cb1Q4UjhTdCs1S25VSUFkZzQ2NlplbnovV1cwSmNiQWUwWXRHY3ZlaXVGblpQQmtmWDZTcWp0UU9haXplcDh3cDF0c2t5NThZQjVJb3JlaWVDNU9rcEcra0d4UkdIT2s3bHlmZXBDRkNQNkltS0I1WG5qcThPUXBHWk1kaHFVaXZIWEs4Y2pFc0JqK013Mm9vR2l4YlZXM2srSURiQzRjVXJCMDdrdy9OZUVNMnc1YWIrK2k3emloMTFIQklvUXUzck44OU5NRlJkc1JDM3RQd1ZUWEd6cHVJQ1VYZHRTZ1lUcnFGaEhMVU1aY2tuazNnRXNUaEhYeHhFdHhLekR1eWt4TEZFTFY3OXRpam45Q2s3eTF3RGwyQS9mNVBSYTBRYmV0THNqczBoVWVhdW9qQ20zR1VTUDVPUlNtQnRzakV6SE1UbkIxRTMyMys4THdLTXJVSVFGOEFHWkcvZjJUTWZ0WHVOazlNRHdhenpBNytJWkh6bkg0U0xVQSt0Rjd3cGtDc1B0SmpxTkE5Wi9xZkJ3VDdsQUpldC8vV0F3TXgrYWM3UjNwT0JVUG9YZlZsNFhQK1VjU3pFdWNva1BSUGFldm9WdnptS3JBSVhVdXRtbW1GNFFuVmhhUVhIaWVLcWJGVjlWL0RaZUJvbUxOaGtscHdRK0djbzBuR2E3WWQyTE4yem9tN2pYVUpoOTZBZFQ2OTlYenFtSFNFZEJQbG5CQkZjbVhkU1pHN25DUG53UzJlMURvaXR5eXJ2MVI1QkF1RFBOdDIrNFVhRlJPK3lhc1FtTTQ3WmxJRVl5eHZTbVRDZFlNMW05WHJ0U09nQWhBQzBIWE5yeWlwUjdrdkk4SVp5dE12bmltaG43eVhUaWN0UER1eEdZTDJBYndsV1I5TC9nQ09BQ3dXNDlndWQzbWJzcDlITHZDOXk5b0o3NFhHOGZLZExtT1Yyc2NjTlI5L2F0Q2FUb2piZFpmd2VCY2pYbXk0V25Rcjl0RlR5K3l0TU5Ralo2RFl2clkySVFJWDY2c0RyN3FDRHFwMVdXd25tSVprUGMyNjBlNHhpUmlodkhjUldVd0NrTTRvRy9sb3p1U0xRV0U3c0VPOEZhTnVCa25ZNWtuWFBCMzlkLzFKY0UrdVNIWERxSElrd3p0eDVqbDliaDBZZzl0OS9ySUwyWSt1ZzRQelhxWmFCWEhROWF4M2dmZkFpWTMwWjkyY1lVN1N3L3p4ZXhhWWVLQ1JTUmVwQ0Y3UDc5WWRDYlhDbWZoN2FvMXFLUFdNZEhmSEoyc0hkVUswTVhsRXJCQ1E4T1d0WUxScThYSG5vUTV1NURNRlhyZ0habzduTjNXdG9MV01UZTRETHlhRjVISGZqT2plakF2R1JTZ29BeVFMUmNtN3dPeTA5V2NBblV0QUZUbGhENUdldVh6ZXYxL3UwNjB2NitTakNBK3JlZ2pQaWl5SDlVSTNtSnViYnc1eFhYR2FwM3YrUHlKOCtYSlVMWFlHTU02dCtPdUdwZ3FpQUFPOXJMQ3pYTXBlVnhDMzdLSlZsaFlMNlhrYmFQWWhVMWEwS2YrZHRoNXl5VlJ0bEJGa0ovNXJVOWV3YXlzczVQc3pReXV3VXRCYkloeXBibVpFaVNrRDRiTkJDSEpnZmtHTDVUNmdmNERKaVA5ZUxqL1cxUmFhQlZFa1RBcEpMa1YzaHBpeFpLZlhWZGNlT0pFVFFwUzlSOUY5bzdaak0rVy9mSmE3d0Z0eVRmMEMvSi8xOC9JTTlZWnlwaDJqRFZEelhjYlJOTS9PWk5JaGZGT21uTHNoTVlBeEpZTEN2Rk03akt0SStrTmNBZTBsOVBlZCtScHBiSUFmQkZXeGd1a2FTTExTOEVybmdGeUwyYTFSaG41TTdDMlRMQjY3Um4rNEswcEY2cEtRdjNVNk51eGF0NHNWZGFiUXhWeGFub2VpY1Z5Zk5SNFBKYTZLc25VZTErdVBjMVYvOGJwY3EwMlRiZEh6WWJwekJIaUtjOUQ3ald3eDVBVk56eUp0WXNpK1BOZWFyL2Q5dUEyaDVWMS9mc2JROWtTZFBjTjdIdlNrNnFhWFJWTk4rbjZwVVpwbFozR1hUUkZyTXpUYUh6K0lhcW1wdGtNN2FmZlZzZXRBVlNkWXRPV3V5d1o5ZG02bkg5N3FucTV3TXE5OGUzWG1LTml0SUowTHJWK1c4TG52QzE0K3hkZGdEZGJGM2s4TjJoVEx0eXcwZTFlc1JGZjRrblBuSXBtSFV1bTNNc1FlNzZVei9EeDlUWTdWdnFBVXJQbTlyUTFrT0VlZDNrQUdjUTJpcUhsTUgzdmdDK2hqU2dWUkExZFpXU2d1SkFxQkpGZU1GNXVuZzlZSU5WVFhSK1c5OGFLWVdWRUxGay9HT0QybDJXZk9IVSthZzdGeTVDS1N0ZXF0NFc4Qlczb0NhK2FmOW5wdWpCMlZYYlQ4NUFwQmZYVm0zNU5MYVYyMzVmRVVGbVF4cWZha3dadFQ2R3cxL0JQLytGdVdaSWg2RGhMUDh6ZU43NkVDVmM4Mys0cnJveVBPN28ySlJvUmoxcXpqUXdPT25sVmg5QVBwTzc2TnRKNlQwQjZiMEdZY2E4K0NMWnQ0aUp6QXJUNmk3dTV6bmFtL3RxeTI1TXhIMkQ5Y0JrMU9FUFlGQVB5d3dMMmsxUDZQSy8rbHBFeDFOSHF3Q0R5MHFjQWNUWUpZZGQ2OG5DNk1KY0IrT2Rtblo3QnAwK1FZSHh6MHBGZlFhM3RHUWx1cS9HSGFldlpBd1RpMCtMYVh5NEtNTHBGZkRPbjN2TVRWbFZ1YTJHQklYSHJjcnVnSyt6MmFROHlCRWFuRzRXOVYvMjU5WUVuR0E5UnNvdUZTK3FBQkpsRlJ6YUQxZEJEaklXZkVWMXR6QTZBZjA1Q0N2ZHlMSTd5eXM4RFlGY01rbis0NHNaL09ISFE2c0hpUHI1UlNweDRtUkkwemNyQmRlYkIwemNIWVlnOVVsb2JyM0g3d2F3UlVXdk80NEF4U0JlSTQ2djlWaFBIcDQ1eExLR3BzZGszb1pPWHhFSW9OVmVYRlJIU3BzLzhaSS9jb3l4Rk1xeG9HVXRqL29PeURzRVMvT2JyWTBuSE9LUGVpVGlWa1NvN2RvZ0lxQkJ2WktLcXdjL3hUaEtHVU41WEJKY0FCdlVuS1pHWWxRNnN6VHJVVGV3cnFrcSt1S2tNbllXRFhDSCtEa0JlYVpLcmduTGMxd284dXAvUXRSVVZjUVZnS0xMNGV1elZSdGRXTmM5OEpPTDJiOHhKaHB2MXc1TDYzN2FTaExYRkFmSWVOQVdsTW1EUnUxczAzaXRnOUVaekhsck5PazcvamFPRHNjNlFWc0xWODNNeURnVzIrSHBUNkRSTUNKMy9odVJUVG82c3cxV3RhMU9LL0RvMlo1VDBncHRIeFlyem4xSHJ2S014Y1BTNVZCUVNKS0NXT2dxNmg0aDJYTC9aZjc1VFQ4SFg3SU10Y2V0b2s0SlFDWHBwUVlqelpnMDZZTEZYSXVVM05KMnlSQ2U5cHZuZ24vd0NyWVhIa25wcmpjY3JmY0ErYU1PV3EwVnhHa1RrcytLak0rdEwwcUtaUUEvVkdsN1dRbFV5Mk1UajYrQlJEdkNiaUE4MG5xRFJxMmhsVWw4azM3V055K084UHd5QjcwLzZyd25GMFN3dW9HTWxPYWFqbHlucTRSbXliWWNMNDZTb284NGY2a1NoOHpnNW9ZV21iSEZpQU5Ud0dxUW9Ja1VVeUxBZkMzQmNZcm10cFdXSnBUSmFEWUFLbnhLRk1icW1qaXNpL0dod1VvKysyczJNeXYvR1ErVlowa25uc3ZvQWdDZjhtaDZ4cDkxbHI2M2h5RFhhN2Y0VUROSytGaWFYSjJQWDR4VmRmS0tLa08xd09pS0hKeHFFZ2pjSlJMenpaSDI2Nmg0b0NoejhhenlBejUzQ29uQzlRWlNBMWhzbEZYY2p1QWdYRDRPRUxoT3IrWFZCalBhQ092djRueDRtQnVtcFYrZ0RXYlFuMlRLZnlmWWQ1QTFOclcxbEFpMnczT2dEblJyMXBnZ0VqZHZ2WkhqL3EzT040emF5MU4vVXdNallVVng1eTNHZ1J5VWdvMnhXdDJsMDNyTDBYc2dWL3BhZmZ1bjg1M1ZsREZMVjBoeXZGVGUvVGp1ZFM0aHJRL0pVaDJPKzZZK2xzclk4VFUzVlJ6WlErLzg3bWF3UDBMUVpEZ3RSSE5pK3BvejlwM0dnYy9jN1htdkxBVUJlYXVMOTFHWlR4bE0vTUpqN1hmRWZhYlhWeXNTSnBMNUQ5c1NzM1NuM1RDck1qWHV0a05na0FOMVlBMThYV0FDTjlHc28vTTNnZlR1NVdBaC9uWklkRSsydGxKTEVoVFZCRVk0TEtKb0wzQ3hxbThvWlRTZUt0Wi9EK2F4K05YV044VEpGZzJFc1NMa3pDRGhQcEhjaDl1RHpJVFNaWVhWZGVCajZjRloxTnQvUmJFcXZFeUhuSFhPSTd0RkdhbFlTVVRQQ1hjVUg3aTJlUW9oeWxERnFiU0FKWjBGdmE1eFk2Z3NLUzNNMmFXbFR4NldUeU5tZDAxeEFTSUw1Snc1ZDRCSHloNDZwZXgxaklXQis2b21qMjdDdG90bXZxMCsvbVltRno5RU13UWVZd1h4cm5jMCtWdzRsTWNXSDBtVTFXQTUrck5Hc2M3MStkTkcxd0k5Smxqd3VhaEZXU05ZdWVDWFlXdFUxTG85cThmbTY4RS9vQWJxMHY3N0xKN0RZb2tRWWp4RTAvZ2dQZ200K2haOXduMHBMLzRkR3V4VS9pdGwwY0k0SlNBUTQ4TUZ0c1pKYmxKN0NrbEhqQXBqUzU4QWJBajJYS1Y4VWN2QmFaV0Qwc3Y4SGZSaXFYMjNDTWNMNU1GSkM4RVIwWm5CVHo3VnJiVFE3K3IvVHBDNFhycHJEeHY4clF1alpZQVJNWDhFcWsyaXhpZTI5TW41UnFBbTk5R0VycEJ6NGptL1Z2a3UwU09xa29NU2IwVFN5M1hPdlVFZ3p6ZmE1VXBydmloeUFMWnh6Z2RFeHF1d2xRYzY1NEJFaXYyRlNSZGJwT1ZQc1J0dGtnMlFxYVRSb254Wm5aNy9naGJYS3JtMVVYVHA4R2FWR3Evc0M0clc5TllHMWt3bHZIMlMzaXlRKzc1bkp3SGgvd2xhVE5PRmFOMWZLMEFnd1VYQUtnUkR3dzFGbDRabmdCaHVGZ1dKa2NSUHRiazQ0T0xhNlBFZThlMHhQSE5SUlJSYWVSTndlRm94ajNVSG5Vbnd6YzB5WHNKVTI0ZWxxU2lhVjJta1l6RlJqbGFPZ1ExUDF2eGQ2M2QzMW1WbTRTVkI1ZWlHTEUxZ1B6MzBhRldGbXR0VFdHR2orSHRoM0NDNUFIbWt2RE9FeWRRbjNscm9HMUdKZ2MwZjVzbnYwSHNSU2J1RVhjVHRYbnJNSlpPb1JBdWxOeGFTWVhPY0JRRDNSeHB2L1V1MUE4YlM4YUlCTVZjcklEamo3dERoM3YwQ2lQSVFEL2ZUN1hTelpnZzI5NjZJRXNJZVBNdTBSWVdmaUhuaFB1SWk0MTA4MTdnc3A2YVAvc2pmZi9YRlJ6Q3kxdzQzVEt0ZEg3VjNOS2R5V3hSS3JtakxKNHhvRm1nY290SlVJYkV2dytCamxwNzREL1dSVGl5eFlMeUlmRnZiT0djV09yeFF5TFcyT3NsYTZFeE1nL210eXVQeHd4NGwzSXh4a1dSUmltbHdnZzlHa2hhV3NzdHFyR1paQzVGa0ZDM0d6ODFVKzlPN3Yvelo0YUNJTTdUaUNHMlFxdFJwWWpZdklqMXg5Y2V0ejg5TXY0SkNKRFNCeU1rRUZ1azQ2VkwreWNMbEd1WGhwbXhxb0ZjU0NqV0p0RW5BS2RXV09nWVhienJTUFVPZ1pnd3FTZnVNQ0RJTjljQ0dKc2pnc3dpSlhNaHdTUWFYbGV0KzBVM0RnY2JQbjZodkM2YnZEVXdqRFpsYzBnTVVuSFp2RXN0SXBXTFhJLzMzbENQckpzQ3pra2twcy81OThIb3dMdUttMkVRSlFXQlYvU2FhZDlyRVR1NEVkbEtZd040UTE2aW1PRkdHYVlvcjBicExxeTZ4RVBEUytKZndMaHdaakJPbTdwaWlMazVhT1JYcU9pazVuTlJVa2VuNVFhSnEwckozQlRrRUIvd0JxREhyY2N2VHpCekx0RkpsUzZUTm9VZlZJTmdVc2tUNlNoMkh4U1p1TzM0aXhtb3kvelpibmJCSzdVbmhsKzY5UnlPeEwrOWJBZ3NpNE84ZUtpc3FmclBwejBIR09oTzdYTWNSaUNHL2M0OVoxbXdrRzRpcDc1NmIvd3VLd2wrUk9pdXVsS2UwQWlFQjRXWHo4SlR4Rng1QzhRV1NkM25yMUI4Qzc2QXhnK3NQSjNEQUpEL1ZFblJIWmlsQVVHb3BKYjN0b1RucGhUUEdNdnpaQ0Y4bDRYZlVtZFo2bkh2TGtDV29hdWsxd1RpNDhrQUNnRUxyMjVnN2xtWmJJZTYzWHdjb0tQek9mbzZrakhnd1IrWFEvc0FmNTNzL1ZwQ25TaXNlWFB2WGdteW1ETkNRa3ZNZitCQlhRaWVFc1JRaHExYXAwWmRmVml1bEpYTjdTWTB3NEJkUDVyNFlxc25LWjRVcEFRV1pUNzlOYVVwbTh6eTBQeE12UlpBeGJMMCtvVlJWSzZlWElEaldnRmlkTHgvS2ZiQ0ZHdSthYmcxa0ZVd3AvMVd4V3VKcEttalpqK0VnTTZCMVExdFN3c0tMaWpaWXRHejZ3VU1nWHZPOWE4VFNsZTRVWkxuY0xVTDNnZHUrMDlGeDRjT05QWTZISENpUHBHV1BkSnpCWUVDTUlFUEp1dTdRVUYwMStzUThZRHZYV0NPekxvZHZwRm55dXlCeVJ2a0JrT3F2VGFSbWZhVnBzSng4cFBacWlMS0dqa2c4MFdpN3FaRmJJYVJKRHRlcVN5dFJYeDc3bFg4dVRMc0ptU0ZoOTl3TjVyL1lyQWJIcDRmVDF2bzJZSEdzZnFkSkwycXE3cGMvaHZBQjJNaXRncHBhWDZ6NmVIb0NiQlFMS0VHeEtiaVVtVElyaEF3cmxTZ2ZUeDFYbWVXUEV3b1E5WVNDT2xSeVFkZUtSMTUxQ29PdkVuV05CQmNxdVJURU5zQXFUQWxHUjNLeEE4ZjhIVEkrYld0MytEY0VHcWdrampRdDZOT1YxcDhzWG5FVWpGU254S2pMaFJLbUJpeEtvaHk5NVF6Z0c0eGJjVlJhOFpsUm9NUkc5NVpKOEdZak4vVmtyR0lRMEgwM2hBWXk2ZUd4ZEVQWFpWYTAxc014b3g3dUhjNkFDQm41eTdIbTRCZklkcW9NSzdqNTZ5RUVOVlUrVmFtakN2NEtxRlArWlk2TlhaUThGVVZaOHpSaUdoQU1TaWRJbDN2R0YvUW0rcHhTbkVsS3lyY0hCU1hESHJXeXFSUjA5dFBzQ0hXOFkrZ29HQUtrSU8xbzgyVXpmYmNlR3h6M0JTZzhPQjhtdzlqT2JqZE9mNW1lVEhqYjhUNFhyMmNyYUZBZE5qcHBNaWNzamlSVXRjendPaVdKbzVMWkRCYXpCV1FBUjk5T1V0eXhldmVDVDh5YmlwVlBMeWFaNTE5akV6bU1PRGdzUFZ2U3hpbDBJQnVmUGhIc2VMMHNvNEpRZk1mTWNnNjVOYWdPdVNhNlBMMSswQndWQUNrR1BnRlZBa2l4NlZNajJVMXBGYjRBMFpmQ1FMRlV6MkhZSFRsM2o2N0hMazQzV1pTT29WL0x1b1UvRVJRUk5yNjdNWC92SEE0M29uOWVlUzNMbnFURjZWTkFKU25xYXZteW9JV3c2WXZwYkpkYXhNYlVVUmhpOG5mMHVOaU0yT3NXODk0UUdqdm1sK0twcGI1VXJLeS9VYnJTOGRtN2ZYQUNGK0FiZTBzanZTSGNsMC9WWHUwbmsxWTZ4RmpTeTdRSi8yaW1wdExxZDdRMjJjK2VQZXJ1VURkc3Q5eXBQWVQwbnFiK0tZcHRxQi9pNDBITU9mR05Jd1ZDcUdiaDV6ekEvVzBjMllJcmV5empMV3dwNndPSVNId083MFBQNjRBNkFNd3U3NE9GNTlud0RzSmJaeXpPcitmcFJ4ekE3Y2s1Tys4OTBaYmV0TEk3OEY5V0hmYnN6TWl3M2JsTUhSdUlyWE1MYjJPeHFvQmxlYUJta0RkZ2doMjE4SU96cFUxY1E3Ni9MTjJDRW1oRlNtbTZPUlNib28yWkk2cGt3a1lXUjdXNElQNzcyTklEcW5XZXBhSjRRY01obUdyY2Y0ZzRZc1JwRnVwdnAwUzUzS1BUWmQ4TnNRdUloOU1XV2VFMXlwRXpMRVVPbzBPU1I5WjJtY2NWVjEwOHRxS2lkQjdHVUdRRW1iR1ZMdTV0RGJJQUszZWVJUktOd2RyajVQUEtvdlhqUThWWmZ2ZWNSRUtoMHBXZ3lqT2xlcXRkYlRVLzc4UnVlOFU3bm9xckRoWXZwbUlEeldzT0FiTklPQk0zN1I5T3lJYXg4K0t5d2FEOWRCeXRlc3VyaXJXS2lzQ01zQ3dHOTBwYXBVQm8yV2V6TFB4WFFkbW1lZnNuUHIwMjhBcWdVdVRSUFpURjZQdzducWZJazZSSmVPZktLMmpCVCtITVh0WVp6NmJxSE92UWhZVjBSQmFENDVZQUo0QTZwWEMwSXJuazRha2FncDFOR1NNYjlkcEkyUHZDSFRENDhzSnYxK2NpTlAydlFpVkdtN0gvZ0NCOUIxdzg5MFRXMWFXM0ZhS1NjTTlac3lRdnFmYlhYemZQUFlqcGJiYUwrdUJWS2N2ZkhGUmhWbW1EVHkzQ2tzQ2U5dEY5MDdtNHEwWjBTa0dsVm5sb0RvV0NZWFZ6VUdWbTZuWS84M1BsbkM1OWRzbGlxSklsQndFTUw4bmlJUm1CbFJiQXpUd1J6L0hwU2I0Qmtsa28zd2lnam5hc0srUWVLbGhlU2J0WW1lMFFBNFZJV2FIVkhMbWZnd1cxVk16WWIvMHRiSDFFZSsrZ0JtRHVrV0xsRWM5OGVXMmlPR0xhSkQ4L0NNNWl3N0RoZmFvZEVLNFM2MEt5Yk9yTzltMTc3T2RkYXgwQ0ozVDJsb3Frcm9tQmdXcGsvYXQwSmlTVldDK1pCK0ExdGVRYU5OL2tic2FQS2cxRE5SZFBNNEN6Mmlma2xmcjR1elpmTVRWZC9MWGNYSUxqSis4ZXNuL0xtSjNhaGY5alRJcWthSE5ISXBkeWZrN3JEZTdZcFAzR0dOUE9aSkRvQjFZb2lWckhOUmdka3UzY3NXamtyaVFGSUNJaGZzT1M1WkwzZ3VkcmZjMXhDc2pBTW0zczh5L0EwTk9BZ1JCZFpaMmVLeFJ6WUVBUVpOeUlMbzR4NjRvd0ZwRTNrcWNWY09XWFVuTHZDRXZFZlVNTEg0UitNcXZMc2FMVXcwa3docTNDUjBsQm0rK2hIVkdJVTQzbE42d0lZMFR5VkQrdzhGQ0drVVkzV01LN0tUU2t3eGNmSFBZeWlEN1RQNUswUzZHUTF4L0VSZFo5a29vLzRPMDFNZTdCV2tqaFMxWjYzUVBHbHI5dlY5WHVPNFpqcVZJRWJBaEZFVFdJWGRoa3JyWG5BdmRlVmp1R1VhOEozZHcvb0ppeGVUc0szeGpQeXYzRzFlK1NDV2Y4YytKRjY4KzB0VlY4TWhyTVU1bGc2SGFXKzlPSjJOZTFieGpFb1lPamdqamFVM1dUdElvQW1SR2lDUTdhZ1RFRHNtUzVrUGdjdVAwcnlWak4rK2t1SVpCYlgzUXRybVBvYTlUcGkxcmpNbVorNUtBNU9ZYUcrY1NES1NRQ2gwNjZIbzNXSkpZM05XRjZ5NElSS29nWmJkanRwOE9nYmVURUtDaVlGcU9jRDJtTWxyTXp2cTcwUFZqUklKc1BXYmc0dnpPeU9nRWJGaWFTSFpIaCsxWmlrTVFONko4Mm95N3BFczVjR1FodEhCSHRjOXVNWWQ1c2FWbS9mdUl3RFg5L01OSUd6LzNrcGxiMmc1V2p0T2JSWXo4TG13RFFVMjFhaFh4V0k4b2Q2OUo4MjFnMmw4SmRtWERiaEtlN1lqOUprWHdYV0hNdGxHWTFueE91WjdpaGFlWUlYbHRNd0hPMHljZi9WTlRZcytzNmREMFRteXVURC8wckRJRHJoWFBHRHNxUTk0U09ENUREMngzNUJlaE9LUk9JbVg0QjR2MEQwVDQ2WDVSWHZGNGUxSjNtRHlaMnVVcWhKVkFFY05zeW5mOG82M2F6bWJkVlN6L3RZcUZHdDhDMFVRT2tlTTV0SWJEb0p5TmpHR1FjR05LMWRBZTZWekk3R2sxRnplVjhydnc1VkJtVXFhUHpXNkxKRHhLRjR6WjRKZ3JoaExqZ2RjTmhyTEhYRjVBWXVzcTg5QTdMTzNyZlc0V3RpM3Y4TkM5a0pkTWVUSXZnNEtJamtCM2Y3TjQ1ODNtV25oNXRoOFhzZmhGWHA1OG1ObWJXc3pLZTB3cG9hd3pmYnhZMnl1S21oUkFEU1VPVGUxdENZUzNqWUVQbDZ4Z0VjZUplTUx0OHY2dTVvRnhodVBWR3NpZ0FySGxhUlhoYWFsczM3cVU2cFRhMWRrOVBIOXV5eERKUlM1djFCd2Vncmp0bGMyM2hGSS8rRnppY05iUEtFWVFoMDljaDd4SDhvcW1xc3VEWTVTczRtNTVpeE16MVFKeTRYN1FKZVlDcFU2TktxS0NMcDh4YUd2UlM5SzZYdUpYUExrWVFrbnhzV2xqV3E0VVRvKzNYcXFpQ1laNFNCcFBQT1MzRkVPV3o3Vk5rR21mbkRFNWhiTjUzTlJON2s2bDNIZW02NUVsSjNxcjhuSWNJQUtLbElPV0RUWnJxS21ZV3BxL1NEVk53OU1xT0NIV3cyTHFtcVZPelBoV1RmaHZYV2p3WjltN3VMUjdGOE1PSzRnOEdqU2ZxVUc1VVlqM3hiMGtuZEVXTGNjQ3pCZGIzTmRHektONkhRTUhTRFROSmRiRzZILzd4UFFsbGcvaUNNVVZJUFBTcGp2aHJSVzYyWVFSdU9Pd2c0Q3p5M0Y2d0U3L3B2MEZXTFM4QWJsSGVZckNEQnMzWmRYNVRGek15ajJjRCtwbHBGak9EdENLY3MvVDg5TFlQT0tHeWF1VVMyS3hMK09MbGl2VDRNeUVRYk0rcFJMSXF4K1g0dlhBT2N1MnJReWllVmcvendIOFRIRlBZZEVzL1A3djQ5MkVqdGU4KzIzd1lMdzM3Nm50MUdrYkZNdVlBbzVkSmVaSmZZbHpEL3ZlZGhiaUJRNno4SG93ZFFVYWxaUUxYSkdZd3RocjZJZGNmYURZZmc3WGxROURuQU9BRysyUlF6YW5JVHJYYUw3dDFRTkJNN1U4aW5GcTlZeGFRT3lzRUYyN2tjTnByVzBreTk3Zys2ckszUTI4OFMzZzRSU3pZejZMNVRvZjFFQmsxYXZwdGM2emJQUHJ0S1BPQmxpQzZiTDEreGt1TVl0TFFDWFhsVDdubUdJWDNSZ3gzQkFxWnNRR1dSUkZ4UWlFVis5bU9oeVNMWVJ3SWQvNUloYThHN3RiaWhTRzkvbnlYSFVrSUVYcHZhMDAyK0xSU2tpdEJIQzY2WFNnUk1xQWhHR2NpOUNVWUREV1BOYTVxbm9kZVBKQm9sUmthSkhsR1BvQ3QyUTlRaWJTS2wyT3d5b3JLQ0JiRGcvbzVzQWJXZmFyYnVGclF0ejNQOTVpUjVOV0NTNHBEOUludVFCd2xjMlFoSVBUUmUzKytYWngwc0ErcStUMTdWZnNYV3pVZWx4eHl2b1E4emVMUFMwYm51MjhtT0NLQWJFeUZhbUFCSSszRUpJOThndGR4RUpKRlN5ZGRHdHhPYzEzaXArK1Zyc3hmbzVlZldqYU1Jdjh3QjU0WVBZR3FHTXdBdTV0RFFuQTUrRXU3b0NaK1JCMVBhcjludVdhT0F4L2FVZHprc1hHc2o5dksySHVWUlZ6UWhsUjc3K2lhSTZtZ3NOMTluYWJ5dkd2U0hFbWhBREQvWWtmL0NGMnZHU3MzL3JNQk51NHVuVHNYcXQ1WTlyaEtROEdYeFdDY1U0Z3NrNlJFMXBhM1FSWmRvbS9SQXl3Qk9vbEFZSHBOVjdiUTNid1NTS1NjeWVodUlyMmRuMUo2YkhjZ0NrbHVZMVNHUk1BeVJUWTNNYit4emk0a1BaSVNIdkhDVWo3T3lGSVQ5aTRKTDR5Nm1FaW1MWVFsQU5OMGwwR0k1aGt6UXJkYSt6elozU01tV1VhM1gzWTBoQnMvcDVOc1RLUXFDdXhod0xVWFA3OTZXbGpabnlLRHlRenVOc2RFckpIbHB5M2dvT3BlQ0EzOTJkQWNBTnBqZTlyanR3R2gzUzNGQnhMN1RvZTEvZUZrNVdmOTNRVzVpSmh0TGJucGllVGFtaEdqdzhSajEwRGVSSFFDR2lXZHJreE53WDR1ZW9YYnpsSi9RZmxVZ0hTMXJLczYyeUs5RXdKWm1NbS8rTUFYVSs0dm1IcjN4MnBjcncwUUZHOHJhVWZmdEdGZnA0SG5tMXNKaWh5RDFZQ0FsbkErSzF0U3dIbUtoOHVIUU92M1BUbldJc2NDZEFQTjB2RG5jSVJ5aFZhWFBxVTA4c3JEcmpIdllZamFsOXIrU1JkVkJpcGVkZHpxZ09MR3VFZXhVWXlralllaytqZUMyQ3Z0K2oyZCtidit1citqVjM0ZHM5THZGUisrbVJyd1BVTXpHWmU3U0JyN09iYUFwTTNVSWJmbTVmWFZxSHVKd1hkdzRuRWhoVEtwZ0hKQ3k2dzI3akxTOUpnZDBlcTV3d04ra1lBOG5RbkQyTUIwMXU4czg4dFhUL1QwdUo1WjRlZEhrdVo5eXo2VFAvR2ZoR1FIWW04UTZVU0hFQUFwcjVRVHVUQnh1bDFNTm9jUDQwaWpERDgrYzRLZWN0ZDhMREtET3RxNStFVTV2ZXVhTSt0TzhyTS8rU0dNV1RrTUJtNEpBYU5ORFhZUmlDNnk5MXBVYzEwdUJ3dnlCTFduMDFLTXJjNm9xYzNYS3hLc2Y1Q216T2NqKzVZSlRBN1hqbjlRTnRrZThFRjJKU1RVcFhLV3VYbVR3TEFSaXRoTzZzYWovNFBEYnVwTUZ4clpBWUVyWU1saW1RbnRWanlBTzR6NGlVUzhhYThacS9kY3Z6QWkvSnBPSlBBZVJtWnN0RzdOVVBhUFZOVlQ4dUNpaFY3N1dZa2dmUWFRcU4zOFhERnR2T3FmQ2ZmVm81UkJEazZPL2RYeHRjVkhBaU90VGs0NVBCdEIvVXJLSDY3YWhwM0pYNTdCdFdXd2pWVmZlMzB6VFIwUTJ0UXpOUHpLdlVxLzhXVEFYQnZ5dnZvc0RsS2d5QnIrQW5ESVl3T2pCVGJOb013OHN3R1ArUllQSmFXOGY2QldmT2hxOWM0RW1POEl1TUFVMU9IVC9PWStWVThLYjI1cWg3R2VBTExGU2l6YXNpU21tY2JNRTFGY0dQcVNjQkJlU1E1d05kU3NXa0RXZXRYendDTGV2OE1JL3RPTHo4WkFMSm4xYmhkckczTkNvV2c4UC9nM1lORklvdG9ZbzJhUGdneHdjV2pRZUsxK0hNKzVueGhHaGdOcGNpeVIwd1BnNTdRYjgvWkd3MXFWWmtQRE1TM3hpK1JzR3lnSzlkWEpNK3NXMm5IaUwrT0NDODVZUkpVWjAxcXVXSXBjZHkxWnRGbktsaVlEeHNFc1RBK05yQ2JFNDI1ZmF0YXpLek04WGtZcnEwbXFvY3dPbHVPN3hicXUydzZ1OFNpdkpOSmMvYy93QStWZUJoMzlvLzV4UE1zZEgrS0NOam9CSmh2SUpSYlNOUXRBVUFmcXZkNjJKWVRTVUtodkxRdUE3TTRPalpFSzBQV2FPdU1YTjM5NmlYd0NoM0tzUGdocTJLSkhBdTh6QThGQlhxMHVGamN1citWVklhU3FtVGhTQmxkY0xCWjVXVzBOSERQYWZYUk5ZdXg5bHAxYTFsTitON09oNWRmWUxWaCtQb3c4T0cya0lQWUQ5R3h4bVcrQjM0YjNMeThva0JOOElkVURHelBiNCtVQmNFS0lWaHFKcWNMTURtSFYxWG9yUDYxZ1o2ak1TdXBXY1JHcDBsMXNqbFpETGZKTWx3ZCt5MmpjQTkxeTBvY1YxWW5IZ2R6eUhFcGtBa1ljazh5Vy96VXZlT2NVWE50Y3UvOHI3clMrSmpHbGpzS2JZZXhpQW5xTEs2dGJXa2NpRC96Rmk5dENrS2c0RWw4Y1lKMmVnRVZmQVQyd0xneDFsWkpxZURDV3lwcS9mQUx3RU0yakoyV3ZwaGNuYlFtdjZKUEFiVHRzenM0V3FJWUY5MHVmaUZjc1UyWmg3d011Vkx3UVJzeEJ5MzdXSzR3VTA5MzNjWDVjc3BoK3poM1ZGNkdFeGJhbUptTmZqU0pyTGlhNS9Jcmo4OU92YWtjT1ZTcmdNVWtpWnprQWhTZCtTK3MrZzgzS2NpNXA4QXhKa3JtMTBGRFhkczNkQmNiaTdWY1NtYnlWNDcwYnd3Y2E3bHdQMURZMmluZzhLNkZ4dVBkbzUxbGFtUDlrZFRPUlV6Ylc4cFhtYXgwdE5OV1ZGejVuejM0MXJGWnVpRHlYSFpycW9wUGVBMDRPYnA2REp4NDFwWWZtcUd2cmUyd1lKa2RBbjdWL2dWM3Qwc1BMeUNESUVPTlB2cmVPaTIvNXZyNlRrbVYxcUJMaGgyNGFnUDdqclN0and6Rnl2YkpNUkw4cU9YK1pBMERYUG5yQ2U1NWVuNks2c2JaTnd3aGQ5NktlKy83VVI2M1VKM0xyc2pBSVJpMUs3aFZtV1dxVGV4UzVQdnR2b3hJaHN5OUpTNmtmNnpJM3NuTzlOOEJsaXlYL1hmU1JBdmJYanZZQnQ5UDBST3NGa2VJMS8wcGxkOW4rdWVkWVZuVFZwcEpoTEx3b2h1UHVGS2hlUWp0dnBjaWpKZ2FXSUM0bEtpaXJsRk9tcDVJaFRaUGVmTGRKbHJBQm82bHZUcDRRSmR1YmNoaVpSMGpOUTBhMWVENTRzcTAwQzdnVk1HSndPcW1Zc3NPQ3J4TXVISjBscHZxQWNqeHFTZ1Jzamh1d1VLbmRoUGxnUFFPOGwvbFIxa1dFZGl3d1JZMFB6ZXE0UGdrQkVhY2ZQT0lQS2NwZnA0Znc0WUtyOUxDVHBCb25SZVlWL2ZDRnNvRHFEY0Jhb1FRNU5KOHlxa2Q4czF6K2FMRjJvZ0l0c1Axa3QyL0F6bTgyb1czNzVMV1RYZkdIaThzaWxIcFdQSk91STZ2ZEdWQlJIMXNwUGdPeDh4NEV0L1d2ck84S0pwOWZNVVpqY3AwcnhTRXpmUW52WGpxTSs4Z0Nid3Q1YlZLUVlMcDMzbHJ3b29NVDZxR2VjZzJ2MkVEaEhOZ0E0VU8rNk9oaVRhZ3c5NFpOaGdSNG5HYVYwUFdkc29WeG1EUEg0TlViSHhMQU5pT2FnRmpPTmJibVU2ekswOTJwR1ZSd1oxSWVkdmc5eVJyemdlT0J6WVRuRGpGZXQwNk5MRU5VVlBXTzlQMCtDQkdYQnF0M1ZoSm5oOHBuWUx4YzBoZjUrVllDa2tTTkFqV1RwZGFqblkwNnNxcW5pQ3FwNzhmK0NqUkFBUDZWTVVpU1RvWmhBTU5DSEo4VC9KRFpRVWQxemVJdlBOeVArVEswNnY4U3FQMEZpeFA1ek44NWlaK2JRSU9hbDVhTGg2NDFWRWNYVlFlUnIzOEhUSDRDc2VSTFZlN0NDK2pMSFRQYTlKY1ZXY3MvSUNjMWRNVlJoQndxK0dNYmdmNWlCbFNvUXpMOUNkMHBHQ3dVTlduaS9pcHRlUzR1L3NrV3pVSW9BRXlIUXZlUFR0SkRBQ3VzUVJhdDR6eFU3Vk85eDFxQ3lFR1pZNVdDTjZTY0NhRHd1eSs0NG5IMExqcG1HVkVrUXJoeExzMmhiUU92R3pZZlIxZGxVU3NaKzg1ejlReno2dkxIZmYxaTZDWkZIUmFnOXRMOWxhZmt6VDhHZTBQRnNxV3cwWFdodlBJd0FTc1A0VnFTVHRSWFQrYTdkdXRHY290dGcyS2lrUWp0UjFJaXBzWGRYenViSm81cGIwcjBwWU4rM3FDSlJOYzh6ZWJqZm9xTzQ3VHdSODRKRGtKZHYwRHFXNEhseW03dW0yaDcydDBsMzJ3WmdPR1d3eXRJRXkrbzFMdXlrNzFhQ0syQkRuS0lnNjRNQStYWWJ1cUM5VzduSUIvcG5MQlozMXBBY3ZoR0o1YUpQQzJyd3lVOFNOaWhMS1pBT1ltdnR1S2hTZ01lemZHY0EvUHhEMVByYnFIa3UvTmpJTmZxUVJlR1ZWSzNURyszYzg5WUo4dmJhdmRMNHprdnMxRmFyTEZLNDQ4dG1jZkpMREFUNmNqSEJibnMvTTlkNUhrZWYxZ09JNFh0QmE1UFpuM0N5akkwODlIeGJhVCtIRXRUNnlwWGtSNlZ3L0ZFcEx6YnNuUXFLdzZCMG52dHU4RHcwOXlmVFVxVWhCU1JYM2ZHUzd3US9rKzFlbDhJajBpVUNadUVLVi9ZV014cXN2RFJqT09TVmNiek5YZzlJZUFoeEdFVy9kS1hta0RLRHdVNnB1Mmw3SkpDK2tGYWdZOVFjT2hZZDkvRXFFa3UwSEdSWDlJZGRUZzI3bThROFUxSVZEM0RYQnBXWVd5K3lVZmRJMFNVYlcwQWZsMTg5dlJUd253Q2NnMy9XV0FDZ2d4TlJyZElFY1ZmS2tKbDhOM2l5bnlyVWZWQUl1RFJjOUJtR2YwVjlKMk5WcmRUcjhPaFRuOElxeFQxZExHUnlFZXE0TGR2cnVmcHdsekEzTjA2QThZOU9mY2Y2M1NxSjVuMEQ0b093U3RZSytrN3IzSlZ2NVJFK1grejAwY1pyMTk1RjNDNklGWDNmRWtCUmpRb3lvc0ZPa2RudTlIeVhyRyt3bVRKUWI5dEdlcVdWT0plVU1RMnRqYzl3c05RbEM5VSs1a1g2UDNXSnUxWVRGNjdRODdHNzVIVkZ1T0N0azZadk9xUE5yMkR0Z3hndUFBMnVGblRrTVRlaE96ZG1YYVpXOE8zemp5OVd4RCt2QnJXRHFVdUhIVklzcE5ZS2hQWGVnUllTcUxBY1l6QlkrYklzWUFSMFcyemdHZFpILzVEamdsckczZzVoRm1FaVR1bGh3Y1RuUDlCS01laVVFVy81bis2L1RsbGFqOEQ1Y2ZoNndXRTVQa3VRaHRPbXZXbkhoR1RuT1cxYzh1Ym9yalcwQXpVb3dVc1NlR2l4bDdwYm9TOEJvQjZ1bG9tdDVzWWFwbldrV1lZWDJUWDUwUXFCM3JVSndiSlpwUEt6VC9kaTVUOW14Z3pJR3RZK3kxTG1ZRjF4SVJ5ZEZRbTRtaFR6VGNmMXBaWWl1WUtWKzBqNGZTbG1XQUlhSlpiY3dpVTZiNnFNb3ZVVjR0SmdwYWlyakxVYnkzSVRST1RuUklBRjBCRkprTThkTzdtS0Q0OHJiMk9jL0ZCU2V0RE5zUzhHaGZUa2k2VVVZOU8vMTh0ZzBIN2FmS2tYb3NvYlh4Q1c1RDFXamJDK0xiRnpOQWYzVXU1TnFlcGtGWUNwQ1NjQ2dyYTNMSENVUDQrNW5qbkxaREJyUmx1eVAzY1AwUC9lVFFwMFJpWm1lODhtSTYzVTluVTNTUUV3RE9MVXVEamMyOXNSMGFrWjNGeDR6cUZJM0cySVpDUVM0eXhBNEhkWXVNU3hlN2QyNnBqS0NZUGlBNnpGVnpEL05NaUwveXVEdDd6QlpmaGt5Q2pOMjJRVjEyV01jZTJOenB3UzZjTVl3dTZjN09PZFAzM3oxaFk3YUgvTk1Pem1nVUdNQjVGQk5jdXp0ZDN0YlhuR0VZY01TR3FoMWpCL3pzR05OOG5KSEQ2M2N5dzRFK2xqdmV6WWpuMTFCOWNGTWNTcjFja21IYmdDUmgxNXVla0VkcWRjMUNZbk02NDV0UEg4cWFDY3kxdVBYdE5KUkRMSGJ6Y2dMRnBSV3RobHVnU1J5ZThhanFlZGNHTEFnS0hpVkVYQUdrVzRPeWxPbmNHSXhQL1BrKzhkb25ZbWp6bWcyN2Z3V0hmbWZMSWVSY2ZoMXFic2pzZ3hpOHk1WlB2OE4zOVpmOWx3Vm1mNjhVc2J3aVQwcUZXVEF0cmE0RXVrTnhtQWU3NUMwVS82dHk5dENhbGhFdWFNNlg1Q093K2lKaXlHQ3cyY1VGM3dRemliQ1NJYjVDeDBWZ0p1R01GVWk2K2gwcFVFVWlVK1RnYWxmajdraStoVGZEWXZvdTV0SUNTYjM4UlNSOEdsMU1PNThtRWQ5eUtwOWFYdE5DRHNUQmdrUGltSTNUMVluNi9lZ3NZZTE4ekVCYkhtdXpDTzk3ZG9aT013U1FTUThNVXhoK1p1Q0xxK3BkdHBMYUlUNis5ZEFiTU93bnllMWxjU2NpTEkvUFdObEJnTFIxYUQ4akhZR3EzYTJsOW9MT2NBTlpDa2h0ZVljSzBkMy9ESDFxS0pycm14a3VaWkxBcFNEdFVETVhjRGJnRG5WRS9tYzBnYjV2SFFUZmRTc3JvWjRNN3F1Si9memJXajREa3JaSDJqdFlNU0RxdGppU29xc2NXb2thYWZGTCtFOGhFVVVnY0FlcFJNZUdVNmRiVzhKTWJpb3Z5aFRnNXRQVGtGZ1N2MUkvWk1NZTNiZEp6RE9zWHdFV2hwUEpHYTUrN2I4SWNtdStwY2VMY1ZTSDQwZzRjT2Z0NjNmVmo3dGQzdmFOUmdQWjlwUWljZlFVR0lQMWRwdnpWVnhBdDNTeklkRUM0V2hrNGwvUUVNelNkSUxaNzZ1NHFsNGExUnorMVFHZFo3bkFJalErakxoN2NjeFFqcnZRUFV5ajBqcmI2R0syMzBEck5DMnkvV25xSUNKdExGVVJBS2syQ1crUlIrWW13MUdjVDRNeWVKMFVab1J4K05SclFYT0Q3SWE0L3BpMUxyaVA3YkdVK1U3NkdVR0JlcG1KZGdVdXpBNkJZSFZRb3d0MEtGdVd6R2RjTmdvTUR2QlNtUTFEbVJ3MHJkTFpZVlIrSmJMRGFuWjlBMTF0SlNPUmdUWVd4R0RUU1luVGx3SnFJSXJxRGpGRFgvdjVmelBnNlZWYlpkTE1yaVNwVU9TVWVabFJ3Ujg5aFdMOVR4SnV6d0xYa2dQTEcrc2pCZnM2YUVuVGRxM1FDN2ZYdiswV1kwVzE0RHNkb1pSWFNCdzQzNkR2VVcvd2k3WE5PZzR5Vk9vVEJQTlJrNmk3eUJCZWhxN21lQ0tUeUVCSWgzZE9BMzZBaDFyeUtFcHpuNUJHRVpNNENzZzd6bmZCQkdjZkQyOHBGeks3U01ieStuVHJlVlMrcnR6ekdBSGNCd3d4aE4zcXNHODV1WkxkRWMvcWNXTnBhZ09pT0d0blVqMEQyeTNJSXdOY1JwUmVYUlVXVFl2YUYxZjlleVhQN0JPV3BWcGU4TjRxazF4OWtaTm03VVlhNlA3ZlRiU2NCWTdWczFRVU1qRE1yTXdFcXJDK042TXNGWGZNZlgxc2pJOWNEU0tYazVLazdjQVJRWUFuQ2Z3ZGJSckJpNWtjY1VlNS92SG9EZUM4Q2M3N2hqb0t5Y28wdEJ4cis3R0JMRWVLNEFtcjBTSndET2ZCR1IzUVlwM005YjZPaGJiL09hbG9JRXJlNWI0dFV4N0d1aERUSFhjTERaM3FyS1dRN3NnaVlTTVc0ekdlcjRNOUFVVXpRMSs4Vm5FL1ViMHV3Ty9kU2J6MitNZzZqMlo1c3lESS9Oa1Y5YVIyMDdsSnYwZXJpelpMTzZHa0FYNW1kTWZNT00xdUNpVStSbkZuTElsQ2l6a1Y4MjdLWmFqZ040L09meWhjNXIrZWZjQXcvZUxGUi9ER0s5MGFwRTM4TTM1WUR1Z2U4cnRhWDRmSDV4N1lpUnhMK2ZGaXBKTUxnTVVPYmFxNVFPeGJZOG91TDUvTTZmNUFENE1hcVdGOHA4YklGRnRESkFuR1JJNzdONk1kY2VScmVFNWNSY1B1Ly9EeWI1ZjFlWmFxOE1YUDhyazlabFRCNlZoSDVrK2NHY2M0THJJVkpxODNKaVA1Rkx0TGdzNTE4NE5McEpNRVdNR3J4OFJ1RFgxVHYwSW9GblplQVYxRDJldUF4a0YwVTVyby8yWm9vanNwN0tKeklwVklxSWJPSkhGR1c1ZHlKTXRPb2puTSt2OUIxdWkrWXpML05rdHpmaXFlM0UzN1hFNFp1YmZXcnJ5L2VDdTZwV0J5MS90RWdMOVRJeGZzMW51VVZwUGpzanQ0dXZRM3Q1aU0zeTJ1ejJyQm1MR295ZGNMOWt0UHZWRU0yM3NTbTMwNGw1RkZLRG00RVJvLzZKWmIyZVh3UU9LZEdqOXpJU2dPNk1DNGM4M0I3SFJ6bFpVd1lPTkhmamRza0dSK3V5OW9rNEd4V0FLQTVhN1JwREZ1dGUyWHRnQzVPNklleUxiT2czVDZneWJIcnkwdE05dkk2czQwSDdXOTVUVVh0NjFNdTl0WEVxNmZSa0gxMEJSWU9rK1AxUVIwVDk4cm1hbXNySXU2ZzhHS0lxendPRUI2MzRhWGpFSTlkdytRazNTV2FYNTExT1N6NmZLOTlFRDdmUXFwRTNybHcrUFh3YkNoSXdVMXVZa2JxWUErWGRsNlUzc1lIdjNzTzZwZVNaREZscURjaTFTUUZ0MHZXVXRFdE1oVHdLdzVLWDRDd0hINitpUUVhazc1MXhheFE4d29ZczhQU2tOVnNsN3hrdkNSM1Q1QVI4anZ6OFA3dnZ1Ny9NdldpL29HdGZreGwrbzVxeUhHWVFReWg3VFUzSzM4MTBDUEhZOW5ocEhyeXBNTWM1dzIrczVTRVE5SGdhWDA2RkVvQjBId1U3eVVoNXVlcy93MTVNekhiS0VuS0Myd3NDTVpWN3lyVUtjdFlJVC9EdXdLTmlnRUNqTlNDdzJwbnJsOEJicUFOaEtjc0VkaVR6c3haZWlWT2Job0ZnZVVQL3FOMjdLWDRKcDN4OU8xNFBvVTQ5SSt2TEhidytudkNWanV3K21NQ3R4Z20zUnl1c2QwdXloeTVkelJQYjEvMmtSN2lNd2llZzAzcHBURG5NZjdHOHFzeTNocU1kTW41cEwwcHpQT21DOXlBT1l0VUdLNlAybDZBTFVNUWhVV29HM3NrZ0VEMW9vT1k0bDNaS3Y0aC9tdkk3d1l3aTRNWk5va3IvSitYWGZHQlplTkxISUd5WGVXUk9vZGx1OS90UThyNVFiVndxdVozMEdRcklSVXVxOVhHWHh5blcyQ0pZT1hTME9TcnBYa2ZmbU9xZ1c2eVF3YUdoVGZvbHRCTEdweUZoeFBPbm9saGdyeFJidkJtRHRjT0UrMyttTDk4Q0IvS2tFWnFiK25oTmp6WWh3OGhmSXg5TCtjazlKcFd0MER2MHZsTFVhZ3dGdzdIb3pTclpjWE0welFtb2J2aUFqTnAxWWVxZ2s0S1FzTmNrbFZxZjVvQjh5NUM5d1plbUxNYUFESThpaEd4dkIxeERvaTR6VmJJWllVY0F0L0h6bzRKbnFlTXhsRm1mcEhHL2tXMUxwZlNZTHpNQzY0T1FBR01QejRvUllMODczZ2tSbXdJYU91LzduQndMTXhZZWZuUHJ0eWdvaFJTaHU4ME56VjlNRFFZMTFuUloxbVdmclRYR3IvRzZ5TW9IN0pidXU0UjNTRVp1RjdxVUhtUFhRdDhYKzhkOFNwZzN4Y2RWZ2pudEZ5UVhIMWt3RmRzWmdWajY5WDEwUkx3cHIzbEM2aVAzUjBQOVhKM2lSazBUNjYzSEZHdUVLaXNxcmhmWmoveTloeDYra20xM0NLa2orMkZKeFFPeXF1WE9EWFNsbVYvSlVsSytuQVJ1WkpJeWxPeXp1My9ZUXVZcmFCOXBVY3d3RWtlUFRaQUk3VjdBeHl6WHRkK3ZnWlpVZ1VnbUFjQXd3RkRUWmRHUlJVbE56NTZlc1RzNm5IOUFDWk40eERjbkdIZ0t1dk5zZE9oVDR0Vnd6MllzbW5wTy9waThhOUtHbkkzTldJQlNlSXVWYlhPZEN6VVdzSTJGQlFSSlhjVTh4Umc2UTFCampQVGxrQmJ2cDV5eFFRLzRCM3htZUE5Y2lGYm1uQ2ZlS0E2bFFNQlVSV2t5amkvcGJrM0dmREhTQmw3R29KMFZPOCtpdlZEbVJNRGdhbkRveFJ1OE9abXpsSmd3MmtlY1Jtb2VNa1NBRVgxTThjRGs2Zi9ISHJrSkFPbTFtZ2VUZWFhYWpJWEd5aWtOaG9vNm8wblFRTTU3UzNLcjNlaC9ncFp4MVhGZmVyejFUWDdWUEowUWljNG95REpnTzZObFNMUXhodzdwMGtpb25qMFQveUxjN25RNkRZVk92Vk16a3ozUGt4NUZsMEJFd1FtM3NJVkxjcDFuWExrczJiMjI1ZnVjVll1aERSNkZ1Zm8xUVlQQWw2ejhocDFmaExGdUwxRjRBWkhaVG1YRWNiemhxRVNEZkFKcGd1N00xVEV3ZHJxTkc2My9vS0UwWUtyTEZqdDB2NXEyM1FsRTkvdkhFb284MHhHNTdObnFsWTcwNTFDeEtmSHkzSGY4L2VVV1NRUEVoRy9wYTh4NUk3SnErSm1zQWovVFFxaklocWk5YjczMG5jZU1tMTExbTQ5QmRXRWtjSTRqaEpoa1VPc0pRUjg3VnFXWlV6cElaODlUNitPSVNMT0RzUlk4ZysxVWh4eGsxM1l2SzJSb3BuYnhxRDlSbTJ0a3ZnSXJvTVErRHAxTnlCNDdHYzZmZXhqcUVPVTAyYkQ4WWEySGVocFVhTTZqY2JyQXRnVC93aExhVnpQRHd0YmdaNHE2ZjlrUnVwM2lNREl2bUZiRktmYVdPMlYwZURkbVBWM0k2S09UVzIzOGoyRmVLb1lKWFRBVGFaUUo5UDl5VXVnV2wwQW5qLzQzNDI1QlBraXNrLzJnK0tPNk9kQ2o5WFdRUmIzWGM3YytxV1FsV3NDbjQ5WlJsTUJ3U1lhS0FZQy9BWVVXOExBcGh5c2hLWVNOVmhqNGJwRWR2dGN3c1BuallmbS9ielJCc3FWeG1YMHlVYnRPazZDeTdOZElVMEg1ODZtdEhOdmhLcHljQ1I3Ylk4OWtPaTREU3UvQUExSzIxYkF2NElpbkdYUkFkVExudGpyTjFvbWJsYU5OenRtWjk5Sjk3bmxQN0FzeVpUNkJFaW55Q2gzb2V5ejduRmh0M2d0TVNpMUw3NEpqZjRNcStNMVNyNmh2U0luZmhWRm5hSHZWK043cTA1WFVycFFpSU1UZlFXTElDRVZXMVJZWHZXUWZPUlBUbWt1aWl0bHlaRFFWS0ZhK3l1S2QxSVVyNXl6bXBtZnRsbFRKSHMwMEZnY04vSEU3TEU4UkRPeFpkcEs3SlYyclRqQ0Zzd241OU5UeXR3dzdaT1hoR0dvVWtSQWE5QkYvSktJS0tlVGUwRnY4bE9lSkU2ZW5RQjRlbHdTempMQmpObFREZGhlcWE4dkZlbklXZ3diSWNBbUNIVUVhWXZkUkNVK2hwMng3NkR1YzY0N0NndHRmanFzZjdmT1FleGRRSm9ub3V4MEZpOFV6SEtUZTZJTzJBcXNnc0J3R1JsejRhQVUvbEtMbnRIMHN2MWtETE5LckZkTEErQTJ1NjA4UFo4U3l2VVh6bXVXWHZIVDVjWVFheUhmVm1keHJwa05MMzBNNEF1dlNOUTV5V1djaTJ3SnlOWDBaRXpJSm5wQnZYd1NIMGZzcisvdmpiaWRuam0xNzNuWWFaSkFLUkY3cDBoQlgzSUlKeVpDSFJYZUp3SWVrZ2h4R3ZXMWI1OEw1QmdaSmRPMDBiYnlhZlI3RUxyOWZITVl1Z2xNS2lVZXU1anFseWRqNXIvWjJpNkhnWE40bDJyOWx2ZDdrOEJPVWFkRVh1SkVFazFOVU1zN2g2bm0vTnplQWhLWUhLejZoNmJybk00OXdLOWU1SndMYWlWdGFUZS8vRFNxSmx5YkVTeU1LL1pYMHcxNFpWMVRCcG1VRGlFNFo4UzZpcGQ5MTg1OURicWVhZEo0cHJwcitFbWswUGwyaXhTUTJGTTYzT0MrOXppWjVmdlN5a2hYVWx2VitHdDN4bFFkZGpWVjVSZFlFZ3B0cmY4cVJrcnk5ZVN0Z0hLdWVsUmZST1NRSjV0a0E2ejFFSmwxSVRBcU1Ma2xBN1lzMnpqNmN4S2lpcWFBN2swWHNnbjlFNjIxMFhsZU41SG9JZ1BBOHhUbVZHQkt1Q0dTNTl2K25lMjNmSytZTE56RmkrT1JqNVVjYTJndnVac3BzMjJSTnRmR0diekl0US9VSEhwSFR5c1pzUmQ2emlEQW5XTXJybGpkV0cwZTRXeHl0YjNab3J1NTZ5UEhNZEdHNEc3R0ZuWGVudUF6MjVEeDdXZFhKT1pEK29abHlhS2VqVThBRzdhYVRNajEwZHJTY2lxWU1GMjFTNFdIak1MSWtPei9hS1JST2pnL3NoSHRaeEFPQ1pnak5wUnBHNEZDWnBUdEhLTWdrYXIwSVVqdEs1ZDVUYi9UOWVFZzBCcFd4WklzTmRCdWFRNFRXQXBkWktESCt2WWc0b05Ud1Ewb21GWkltVmNkN3VURFN4UmNncFRlR1pTcEJPSXhlU2VOZzBmd0hBMUQ2U1huTXhDT3JLNkg2bm9EMXhCOWVtbjcxbDJyVWwyZ3BMcUovdDRBbmFpbm03eFhQb0h2VHNjNE9uTDkzTU04SVNXSnRvTlIvUkNWK2Qzb1diamh4dGY3T1Q1c24yZmR5bXRDUVcySDVPN2tjNlBWQU5Hc0M5cUNkVmV1ajgvVWVNZEk4NWJpUm5heUl5UXJzZ3lRQlZtbGJNYW9ZK2YxYzErZVgxS1RRUk9aZFVwc3BNZkQ4L050WmNKZzZjcmlEY0NZUzZQVFhkUHZwTEJIalFUd3lQWUFXZFFPQzZIMGhDeWlmcGF1ZmNRN1RjUDZDSzU5UGZ5SE9XV1pxODlscDlIYVZZTTNKdEdsQ21OM2pGMzFzWG5Ydk5iVlZmTGJWRndzanhvQjkvRktPRWhlNWtHK2wxRDMrQlYrdEVYUm1ncVR3LzkzeEgvcGllckVkWURFQUtrSlh1SGo4Q21yUVU2U09ZK1ltV1NIVHh6THZ5bndST0g4d2pIaWIrL1RXbTdtZVVPR29yd05NWFpvQWd3VERLMHhpZUg3ZEcwUmxuMmFPcGwrWmx3RGszZ01NQlJ1YWtscVVUS04vSW5HR1BHSWJFNm9zV0NQTUNzRVJWUTJtZ3pRMHlIOEl5c2hvQnNLL2NRa1BnYXQ3cEdjQmZXbm5GV29TekJlOXJ2ZUl0NCtmcU1rWldEZHZ6UkZxZ2hoaEJIL0RQeEhvbC94MDRSenVUTm1yMGUxcmtTbHJzeXdkbnU3cThlVmVBVDc5YVlGdWtoV05EOHQ5UTFRNXJQa0MwK0VrQjFXTnlrSGVtL29qdGw1Z3d4elV5czJuZUUzbkRmWU00cHgzMnI0M3BpRzU5QUc2RW1mQkpndllvYWZ2aFJHbkVlQ05GRFIvTzliT0IycWZ5VnltTVZzenNJSnZwcHAzR1oyOWJmKzR1TDFRaitxcUZ4VGxhNXloaDlvYVMvMFcxOFVMQkhrK2NTOGJTRlUvazZwbFg0d1NTTjlMQ2IwTFZ2Z3Nya2syQXdVQW9WK2VCcWliNnI1NThPbnNmQmNWMzNPVlMyazlnNzRHOE1uWTBzaVlESVBoeW11bzJvZkRoUmdjd1BTZFJPTVpIdGtFbXNZcDhKaTA2VUVKNjc4SkJFWXJFNHVDOEJtc0ZDdm1RV2doWjFQSm9sSGw3eU5HeTBmbHRkeFNSWUtMUjh0YTRmQTNDNUd0S0xra01VNDlFWjJGWjRXekhuUWdqWlJ6SjhVVnFFRElOZXlCcGh1bFo5OS95N0pRN3gxYnp2ZTlqdWNla3I1RjJmdkJwWmZNa0YwVXFUZTdDblg4RXJBK1dXRlRFK252VlM0YWhGc0cyb1BNUE91V0NEQW44Q2VVVGd2MUFxcUE0ZGpieWgzTFRiY2J3c05YSUQrVmVuOEpLVEQ2MmN4VmhieEdZZ1ozMi9rcDk0cUlwVUdtdHdLUFc1c0F4YXdYa1VMVlozSVBZMkp3SzhOeUVsL3pxVS8yZTByUndhNTl4TDFWRW13NHZxZFBORi8wTHdOZnd2VU54bXQ0dm5oQmk3OEJGbFZXUmdPcTRacUJwcjZRWFVCYkRZSVJ0UFk3enVaQTl1eTdMZjRKWUliS2V2WEFkZzIvM0JHTzR3dUdpR2lqTGpzNklKTUpDL3hwazd2ZjN2ZTJLbGhjeE5NSzBzdi9GaHlqK3A3L1VqcStGUjVLbThGY0VxSloydFpKMm5vek9Mc0hWZWs1MStKSjQxS3loQ29yaUYvTmszMnI1Wkp0aG94NWNVamhXTTBQWG9qRXZBcHB5VldGM056Mm52ZkcrcWFQYldoWEowL2dYcXk2eHFRaDhYNDk5VDBNbzQ5TUpQM0xyRkNqalFaMkppazZ6MzdSdStpY3pOTTdlSHRVTWkrbzVURjlNeDBUNS9LZUNQTGVZK0tRMHhRc05IdmJHWFRpM3dmU2ZhR3RTU2VrSm4xV0FoTVo4Y05NRXdUUXdlK3BrSUF1MVJSbS9selNFbTdxdjhzazhxeVQrRW9WTC93dVd4T21pQk5xZTV3MVRFSEdtK2p0Nzc5bTJJRXQ1ak9YMHNINmJSYUZZVVZkZUpjZjhrc21pS3VCMjV4Q0FlaW5XaUtlMlZUeXdKcVF1QktJeS8wT2JPVFdtTGlMcXh2VlF1dE1vOTAwKzEvR2VBOUl6cUUrbG5YVkdWR1kxYWEvM2Mrak8vZjU4Sjk0ZFk3RU50Y1dLWklYSHdybU1KYVZvbDhzZEhNeGpYRm1MdWtnREErNVJ6NTlnZmNicW9QYjJaQ1RlZkU2UStGZkVQWlkwaDVjeW1kODIzN01ycnVnVXdmUTNrNnp2NytlS1A1UVZyZmtIVmU2MkhNeTcyUEV0RXVpQ2ZLUGZiT0VBcy92ZnRJS0xwYVJlZzluOU50TTFHcFEydXNkU1dodVNlMDRXcnY2UjFEV3VWU2NkellENnFQeGFYUlIwWXJMLzlPU2tBRDRIcnVJL1JDSXVFVFBlZ0ZnU0hNUFlkclhUK1RZWjhBSWdhY0Z5NHR0dTYxWUpud202SGJVbE4zKzFOZGJTbnhoUitwZUNFY3YrRHFiSW1TM2o3RTk0TGhBeWgrU1EzV01Ndnh2bmJDbUM0dXJpcWRKWmkxNnVlbFVocEhqNVpoWi9qdHA0VW9vRnZ6UXp3R3JTeTFSc2d1MHdkcGp1T29iQ0orWENneFVjWmdDOTZVY09yQUpkcmMxMkpDekRqUXdza0plMS9XcjJvTTEyYlRzLzl3YXFsZ1dUcVlUa1I0dHgydmU2dHA4Rk5URXNVeGp5QVlpVHRvZzB0SXJXNU1OQnhFNGZPNXY3OGh6dFd1d3hLamkzU3BuQTBVWkRvYVpzQU9ocDlSNWkxSUlrUUF3UjNTVlg5Q1lVdkdCYzJqSDJ4Z2xYQ3RjM3F6cVVwbFAvRVRudFYzamlBOENhYWlJQ2h2enpma2R3MVZsNkFoYVk3Qm1TclNSQlIvMlJWb1lYSmd1czBxRXlQa3V5OXJtcWdYWGNoS05VS2cyaDQ3cU9kZm1ad3N0c0lMRlNNN2NTaVc2ak5aMXlUNUFpNVpra0dhWDZDYXJpckx6WElEcyt0aUtpMW9NS3BEYnhmTC8zWnFFR3luZDVUZDhueUZQM1dFd0wzQWFubGVzUm9nSnB0V1pZc0xRekNFS1B1djVxNDcrcjNJQWRvTmszV2EwWmpKRnd6amJjR3hsTDFpdEdweTRDRS82aHppWW9mVkZNUkdLSlNuRHdHeG1RMm41VlNRY2RHNUE5YUdWZVhGK0ROZmhMa29hUW9IQURUUE5JcFZ0WXVMNzRRUldPVDZwSFV0QTY5U200N1BUaXd4TEdTOVN6RGJoVVJWWVBHaUo0VDZGdy9pUkFPNXdlV3QrTjM3c0VGWjZQY0RhcHA5NmNLWjcyd0JxTWJVZXRMQWRGeEUwNjhOYWQxNERKUFdCTXNPYWVzOHhvK21ybXFKV0pTcU1BcUhVT21qc2JwRXgzODNwN25kK0NqcHlGNDhpamFDNmJNaFhqTGNKL0pYQllMYmhJQWpiREpwb0JtbzV6SnQxUk81Q3FBYWhVbzB2VkJxdlA0N1NZaWZJZEdjZG8ycFlaQXdqczUzL243bDNzTnY5WHVOUElZWlY1bWYvU3p0NldndkNXNlBFM1ZHVDNJYnh4ZTQrYVNLSDYxRnRqQ3RPSjBycUlJUHVpUkF0U1QyWlZoMm1GTmMxWTZ4bmo1NjV1NGlYUkw2L0ZTQzBXc3krY3VWYWJhVkNyMHVaTldybVdja1hHUFgyTEpuZWJBaGM4K25aaFdnTzZjcTVTS1dhZktUVXAyT3QxTTFHTHgxUnpLYVdUbmxhMkFiZ01kL2FVTFdXbmpKL3duOE5WdDVEMnZoK2wzQmRIMEVTNjJZWkthVmJvWlBSZ3R1QTVrV29nWWtEanJ1RUFjNElLSXpRYWt2M1l0YnF0Z2QvMVBoT0lsRGdDUEp2ZG16UkNPU1lzV2FTQ3J4bDQvZHRZZ0ErUFFPQ3BmSWpzbWptR01Uc2pCU1hvczhBT2ZlQUsrc0RrdUNRR09KOXE2M2dtb09ENjNDbEZYMXozaExyaS84dkRjRFdQaStYQ292aUk3cEFMR3dzM1dCd0FtdE1FcHZDdzg0aytTRkpPb2hGa25rUExwMm9pRnZ3Y0FkeTkvOGl3eWEvS1ZnZEcvc1A2ejFIbWc1eDB2SmRkcndhVXVtcDg2NEJhWFMxcHpvTE4vYytLUGwyRWtoeFh0ZnBYWCt2RzkzNG9TVmhBMEN0RzBDY2pvdGJEWjhuclM5RWJUdHdZRGdZQWFGUG5mbTZPQU1EUSt3NTdEeUt5UXI0RkJkMWxJV1RjYkhleitiL29WRisxNHRHSmxocjREbE9VOW5uUjdTZ3pxV1FnclhuNGdKdllEdzBRNjczOHRCY0plUk1qQ1pBOHJhUlJHWmFJSCtNKzFlcllKcFprVDY5YVJzWXltK3dWRm5zdUtPem9xcGRJaGFPR250ZlM3aTM3anNCS2E5WEtkRjVoTmpINmp2eHZWdG1EU0tKbDdrMWhHd0hQa0VTNExVV2Zic1B6K09HU1VwWWx3aGdiSmZnc0N4OEpKeGtkaUVVZzRYbmlZL290MkpxQWxGWTVoYk04RUxZalFjL0IxdVVNNlNaWlJ3cThEYUk4VkZVNlQ1YzVhNUdIYlQyZ3JSZnBZNXJ6MUlxTmVJVmxyaGh2dWxaeldaVjZQR3l5MFAzaTczMzhobWNqQkp0ODRlbEQ2UDRXL1lIUFIvOHdyMWYybkdHaS82ejBCczZwZlFwOStsZW11Q0R1c3dHNmNCZU50UGczbDNaZTl0b2tMSkE4c2R4NXZqelJrMEkzRU5lTWs4Und3YVVQRkxkWE9tSVcvak1nVVorMCtUUGV2bTZXcGM1WCthWU11QkpnVzRQcDRBbmZYZmwzN3h0TXhRWkhUeituRFJKZEx4VG16UytCclE2aUxCRTRaelh5NHlqN3l5SThVY0JNRFhkYjY4OGtoOXVORm4rRGYyWXN2OFBuclR2ekFXdno0dHBEcjJtdGIxVmlpTmNGTlFKdmoybFBCNXJQd3VQendsVVNnem1GNjVoT2t6UHk3bmlNb1p1SXorMWtJRjI2dG1nb2ZuZ1V5ek4vbVRDNUIzNXlqeThFS1MzWG9jZW9Vc0pvQTNqQWt2ZVB2T1FZc25qakdYdys4TndKTGM0QzVtZTRZa0lzRU9kbFVpd1l1WmtaN0hnU1QvVmJvMEhGTnBrL0UxZi9CRW42Mmh3NUUrZ0h0eFpjMWhZSURWSmlHRGhrdjQyenkxUStKT2tCa1g2UzBiZk5UZUR1dDkwNCtVOVl4Y2x4TzZmR09SRGxacEVZR2pQUXU1QUhQZDNEU0pNVnhyUmkwbHNtZm0zTEJuM3h1RmZZc2NjZUxIZ2R2SE1PZWRLRW9HMU9HVjRjd0JlVmJtUnk4MndxbkFmdWhYUGxYM05lZ29mYkhac0VQeHpnT1dFYThldlZFSkdGZmpaVW9LNWU1Q0dwSlJEN3NZdTk4TTFIOG4rN1huUktGSHltamdTaFU2enBkcmQwb2dYZmtyd0p1QU5uUlBWSHNjTG9yNE9jcmVvdDlGTFh3QmljTmU3dmtCQjZibmNnZmlJaHliWDA4K3ptS2xIYUtUU1FjN1Jjb0VZcXc3UG81cjEySmZmTndoRUQ3L0JKNzhVZXZtWmpwYTBiS3hETEwxanFqRk9lRE55VXlRNE5nOXRWMVdCMldKYU5lRkhaaGU3dUU1YlNsUUtxazgvaTBLSlY2d3Jpd1hWeDBsdDBYY1hSMnpXRVlQNSt2QkJIMkVic2FNMTZGWmlOelprOCszMVJCODJrZFdYQ0prbzlRa3JPUitjNjV1Uzc4NDNkL2RFVkRoYitXS29wMk5MUFBzUmJXcGZMczBCTkwxMWJnNTduaTB4bEo1blM5QTd0eUNKNlB1N0VsSkVPbXFQZkt2Q1RGeGFLK1RjV0pwZHNXRWQ3U1VDWVZSZzQxdE14RjF4MzZjcmR4bWcyUFlCenlVQkF1UHpDWDR3SjdzN3ZYMDhiV3RNdDVMMEpMQWp6Z0t6a1Y1NFBSdjNib3ZsaEZqR1VFRE81MHNrWmxtYkR3czB4UURaWWk3Wlo2YytISDEwVVQ5NVQzcHp5eTdVc0dSOXJ2VEszSlVOeU1ZMVMvZHpZcDVmRkJPR3BKUVl1TmlwWXhHL1hkNlZkaHBuMzZ6WENFZlNDb2ZJeVNuU3FDODUxRGd3MnlKOENhVGM2Sk4yWEtjTkdTcUlLcFdTc1hZNGhqdmZ1REpxQmFKdUZuVzEvQjFBZVFuVEYzbU8za0VpT09aYUU5RkRpZGozaDB3RXgvYXJ1L1MzV3dBS2Rtb096SWdMWWVqVWlocW9jL1AzWEZONnJCUkV0RlA0cXk4RGVBcWVUNVRPaitOM29Ed0pwQTNsV2dwQ0V5SHNnaW5MdEVpM3JpOVVNYTVKNCtTSktPd29DU09ISjJFRFJBNlFMR0g1RGgraWI4VDdEWGlrTUZmcHMzOHFlSThTREZVV1dsU0lJa1lnaWMwemJkU1l1Q3FxRjVTTWZJU2U2UU9wZnlTOEdYWG5sYU05cEEwMkYrV2JBMGJJYUZheVVqZDF0M25LODk1Uis0ZmZTYzUvdmF3dFREVzcxdlZxQnY3S2hWMi9qNlRSR0NMMkYrNTRWT0c5bjBIUkpNVlFoK3dwOUhmZ1FvSy9PbEFSUTlmUHlPa1ZnNWV0TE0wMWZMWk5KeGFmOGl5dGZwT294aXlSOE90RDROaFFNM2EwaUhlc1BaQXhsMEdIbzg1S3pYeUtrZ2FMOGM1SlBWRHZrWFMxVHpMVG9tTVBRRkl0a25PWGovYUxkTGIxeDAxdjRaekp1SWlMR2MyejlsWnZHczJGRmdBVDluWG9zVzVBNWptd2VIclpQaHVBUVphWTNtaC9kaDZoaU0vSFE2cHpHcE03RHdKdU5GbVRaQUFEdVpBS3ovYmpCVm8xR2IraTBkVFpYY0E3OEkrVWVkc3dvRGhIMmhXeHVqZVNkZHNYVVprR214L3dIQ1VieUcybFp4Tmp4STAyVVM3bGZ3eEUrekJaOFc3UXVBb094dkVWSm9BYlY0dllEb0trRG9yWDBHYk9zOVhxZUNIYXhIclN6SGQzeEVlbEtDZ1FDNkZoWjIxR0dQZ2tWUEtxd2pnYjNmNHFUN3ZxejFiRFNIbDY2dUgrQVBaT3lxRTUxenhtSzR3dGVaTWQ4Rk1jZTZ2eUowYTZmeWg5LzBLQW1iNHMyZitkVWVmQ3VKbnhwZ0ZML1RnY2tkT0FxaStGeUNGS3BmU2lJalQ4MFVpdGI0ejlKdXpaQnFMYlRtd05XZUcrelFzelA1S1FPTldhN1NtQjhkV3pobEl5bVp5VGFEdUpta0k5MTFFUmF1TnMzdHdvYkFrd0p3WkJ1Mys3SFV1MzUyNzBGeDZ1cU15clNITVV6SmNNcEl5Nm5oMmszb3RHNEN2RVEyeVNyYXN4RGExS3RqZWUweEc1bUE5bnBzRlJXajR3dTNMRFE5RkYrR3RxSWZVVUFaNGdRVDZRTm82cG00Wi93dit1UGZ3VlUrVk1zYytSYWZabkpNdkpTeWpGQjFRUXFzSFRWT3BYdkRvYlZkbVZSenFGOVZENGhWL3cwcWIvZFh4ZUkwWDVaNE1WTUNqRlp2am53VnNyOGl4SWFiaEIwZVp4RUk2QTdST09zVXZYMUNUeHc4Q1ZVVXJzN2QwOURGb1J6aldhT2VOZU9FVC9PeC9yKzdqZzFJTVVSRWlsT2hyQVZYMkhqWWUyVlp0YVZGaDdUM3VlMVRLQmRVdFFKMm1wZlZEdHg2UGcvSGpuL3J0Q0NsbzRhNHVJSXhJYjBFWDdqOXB2QWhydU96MWJ3Z0Foem1pV3pWTWViVUhaamU5c0QzMFg2Qk14RUhvbG5qdnA2eFBJSS9QaDVEekxydmYrOFJ1M3JPa3NpdDBoeGY4UzBhVzVxc3I3U3pMd2FiR25YTWpEc2JCeVJ1REgxd1NoQXVOT1pTUk1RM2NVS1FOemExT2h1WEMxUE9QR1RjaWs0NTBGTmZ6STloY042R3RzTERSQWFoVGFvK3JLRm1XUERQcDdvM0d6SUhGNVU3NHhzMGJoYThWUjhBVXR5Mkozdm10dkdHVUoyYTIrSWgreUpoRzFYaHJHd2RaaXRPMFNJVWcxL2krRTBvR2dXdG9lUUJIL2FHeXdQY0pBZWkvY0R0TkZST3hyMlNzM3dXUVIxZUlQV1BjTXFlMDBobEM2bEFtWjZnZldQVmpQSzVLdXAxVElCV1hWeHpQYXBwZmdDSlQrdWdiN283SUVCRy92ajFtb1JpSUdmYytRaURRMElab21zZHExdFVIYXg5eVIvV3Z6YlNhQlhVendNRSt5N0Jpdk5KTFE2NWZlWlNwMXFyY2Y0N01JSlUvN2RCY0Zib3FWQUpYZjNBNHJ1enA2aWFoV3BHd3g4MWhpUm9rN0s4c3UwK2hFNnBWaTJ3TGo2d09SNDdoM2FObENpUm9IcmZlUmltbHVQOWhNNktkWGdkUStqVmF4anlRK2VwN0c5b3hNSG5VcVltV3E5a2YzVDQ0SnN1aVNReTQxYUZGSVYzVUptMDZOTTZsTFoxdDhMRWtINU5KK1pUS2JVa0lrZG9TNk8yWVB0Y2N4YXZoelFrS1B6N3VGcFdwd3hFMTJPMmcrUkpZcnJXTWZTU1hrOHpFZjBEMmlDNFJvRWh1cmY1TURPd2ZndlJwZUFtYk5rZUZQR0M4SmVPRng4bkx1U0VqaTRYWGcvMFFrdHV1Q21IT0pNZVh6RTlrejQraWxGVkl4bWZWbm9GZWpOV1JZcnBPYThWZHhBWjFKanBpRHhCWnBVODdDeXUxNzNJWURUTFQranhSUHpTY2l2STltVVIrbmV5TUNhcWhEd3c0QlJtU2N1M2dFUVd1TXQ4eVBhbFV4ZVJwQ2k3N2pBaUJ4L2ZNVjFYdUxUMlBaSHhJbDkxMUdQV29QeHhIVFVHTXRVN2NyamlwZTJrMHR2bWpHUm96L1UrVDV0N293L1h5OVE0dEg5U2Q2ajhkVDZ2OThWVmVsaEhkejNZdGtHVjk3bE1YOEtPSzF2Mk92NSszak16RmZqTWRyaXdLbTFWbWdTYmhLUkl5anBjOUlUZXdMWG01bkk3dXVrOExneUF4SEZScGxHOGN4NDFrRUh3c1BqTHlhUXRlcjVGOTBEbzF5Mi9wblRWMGxNd3V2eFphV0tTdFpCNEYvWUNZYTljS1dQdHdqNERqQ2J4eExkeFplWjZ2SUx4WGZhSjV1WmhBMndUdjQzVUpKQUU3eG1teEM0dzhSUkNSb3UxaFVaeHJsUHVFYk4zS2JMbEZvZW1ZU0hFTmhySUhyeFhZRjIzcjcvOWxhcDNCMndNeFdadTM3cEFDMTRSYWo1aEYzN3NOVjF3M25MLzRPNURJUXlHRDJUN2ZROGZmN2dDTmlYY2ZySm11V2Z2aGhCVXNmbFU1UXBIaXR5WGE1c24zK3l0aGJGbGxuYjZSYWw4V3RSSDFFSEpSbGpjTHdDazl3ZEpFVnBxM0VLVDNhNDFyR1phNHE2ZTV4MFRMNW96V3lFRU9QTmpWL3RieFh3ak5Rb1B4MmxqRFRTNXlORktqVUZycW8zQVJqd3dzaUdzcEpVWmIzTnh4dlkyODVwQzhMaGpDUWRTeElYV1RRdmRVU256NENUNllWRkdFVFNLWC9VYVA1S0RQczVLR3lIcnpsb0dhY1dJd0FzYU5jMGhUaGR2WWx1OWd6QjY4TENIUU82b3h0S3JrYW5ZOUVoK1RKbk5ybDJBVnVWUEVlczAzNnpXN2EvUGFUcU5zdy9IakY0THdtS0dSMTFYR3dReEs2cU1aVmJpTDgvVTd5RVFYbXZCMjc5aENERmJZdkM0ZGRlTjQxd1dTL0xIb1Qwai9NRjNFR01VN0pCeE4xajZLMS9wL3JtU3c2VjloTDBOeG56MCtmaFlXQlhyVHR5QjhSMGZEMU4wTlBjU3lFNGpaVjk0NS9YUVZSTGQyOHR1Vms2eEUxSG0xd1pVUHkzWUtZOWtRRDJKdTdId0lZK0NpYWkrdTJaRzNiWFZ4WWw0Vnk0K1VYUFdaVE1XTFpGK3NRYXUrem9WaUJIM0xuVFJoK2dGUUxBNUdObmhrYnNxbU03OGNKeXQyTWdaS3JsUXVOMkRMeXFuT3FVU1JnMnJIOUFDMG5OR3FLWDhERHc2b1g4UWd1a2orSVdBMk84dytBeWxQNmNjbjkzWU4zeVczUWJxSTZGbmZzVjBOME43ZXJlaGRaU2xNdnZDVkY0LzlObGJCaG9xMzc4bjdINEtaS1ZWTkdQZWY3SDhHcEFCa2VXbmFCNmVrYTBjUUZvK1JTZ01yKytYQWhkdzJWZnZQZlA2a3BDSlpReGZYRW4xS2dMK0dEbEkxK2xxTGQ5bGVsaHU2cXQ5NHhzUXRDQmw3UkFkdGVrM2hHbjNHWUtkc3lWVXRreDVFaFJGWFYwQ2E3VlBTU0pVWEhlUG84Z1BjMFVTaC9RZmJHS3BCY29aTmRLMGNaN2s5bjU4Ukg5KzJTWUZVMWRrVmx0eUVxLzJ1T21zZHFRdEMrVE03UWxFcW00KzhzSWMxdkExamppdkpBNlVFMUF4TnlGVWVDa3hYOWZvQlhHWDJEYktQUWdIaXZCVXFJTWRSSUh1dUpwVlFSTlpnY01BM1pLaHFlNnQ3NWxvZHM5YTJRc2U1SFVrSmNmWTJvSE9xYnlkeTg4MHdERFlncXNlRWpHVVBHRXlyQzF6K1pxMTl1ZnhsSFlLRnZZRjZSMHlKeFovUjZ3U3JIYyt5bUlxMzZQUkFYNnVNbEZQZDVxM3lReEhVVlBnNFJMSFN4anR5RG96UlM3bXRUWkRMN1pjampvdGhHUVJ0bUZkbjFUamMwV0JjN0o0ZUFQbDN4cVZ5RG9zUTR1bGx3M050bWhPVHV1d044RjBpbnl0dFpvMEx5Um9tRzhEZU1WR2hlQlV4dVZKYUhBS1ZwKzc0eXg1SnBZT09kaENMb3Nac0JaRzVhS2E4VEwwNE1GRDF6ZEhPak9zMXlpZU5HWkpXV1RWcXRtMmpSTTFXeGZpbWdEejRTcHRMQ1hxemxhWityRHBZeWtPTmZhbTdNMi84S0U4c3NxWEkrWklZNy9QZGQ4WHVhcnhOMEExaTRrZWRLZnhUSy9MMjRXOWNBd3pIWWxUS2ZJWVlleFRUNmFyUkFtQzF1Y1lDWWtxczkrb3cxWmNKYzhMU1VBQXJiMEFpYjZRRWdyWWlSbE5zR0lTMXBpbzhwdnhaTVZoZDRQSy9wOWpjY3pIUVpQWUpzTkdrclVwTWdybWZvcjRZaTE0OEd4OE40SkptRTE2K0k4ZWxHU0lFQ3FjckRMZmNGWlUvWlY1VDRyU0FHQ0lKd3VDK29iVDBBbUpUaW5yd2p3Y1ZDK2NpaEhpYzMvc1ZLZFY0SUY2ZUNDTEsycG9ZNWJDLzYyR2IyTlpDbDNnQ1ZnUUN6MlNPL2x0ZCs3aUFGV2VlL216dmI0R1luRnFrTkNrOFlMOHc4L2Rqck1nMkZab3llYWwzb25lK1M4MWUwY0VnQmZlV3dIY28yMHFhSE1RYmNPS3JEbTI5TGZNVGJvSDUzUDBhRW03aEhpazR5bmJ5UEhIdys1WnJkMGEyZEtvSUhKZmkrbis4eFErblNxNGJRb2krUjZ0b2pHWlFqY29GVXhTeFFPendRVEpIM1dOZWZ2aTJwdEdOajYwUHFaS3BGMHhRQ0I3VUhFeVFrb0lYM2VZbXRUc09uRUVPQWRONmYrdEszMDg4TVZ6TGFkdkJTbFZtdFVENzJKbnY1VWNVR0dMQThQaDBtMlo4T1NEdjU0RUEvMUpqbGorZnBacVl2ZnI4Wms3RUE2alMrR0R0bDN4MHZBNzBJQTAva2hib0ZLUlNWMUo1ZllmMTV2NGFEV1VjWTN0VHRudkF1dDJQbmJUWVU3azFvazYwU3hoaC9pMzdJUnR2aEd0bzdsQ09aeDM4eHc4N2FCOEJ5b1hlcEV1dEdlNkcxcDhvdHZPZFZ2WGZibTdacG5QcUFxbXIrS3UrRW5mSW9vaGtMOGdGQmlIcmxUOGZvMGo4M1gyOU9TSmV2bnBYNXFXQjEydDhWbmFNaHJzRVIzZTJLaytXelU2SVYrcGxka0c0RW1obEdzY1d2QW9FQXYyZStUeHEvRm5tUzZ6UmIxMndrUXBMblRhZlhsM0d4YnQyS0xFRzdmUGRrOExxalNYS09nZU84TmxpenhIdzdsSXg4ZXJDd0dYbGhoS1BPUVIreHpyM09tRVQwNFo4TWdUT0xHbHN3QVRCYkp6WmZQZTM5TXRLQUFnaVFUbzNmMUZHd3RURzlTc0loVlIycnBsK0dxZWVCWHBJbUR1V0pSZGFUU1A1aXdQekIzSXFwN2tVbWtTWjNvOXA0TkpzN2pUako5Q3lSYkNSL2NSTXdVd1RMbFNvcUNGVzVLc05oS2tzVzhGQ3ZhZTNadXZDMmtES09uL3FNMnBqVmFBVWRBVXljT0sxWnlXdTBEdERNa0pBKzJRZ1hwckNXRFpGOWZqRThGRU02T25SODJrZXRBUHdmWkNvakNpQWk4SUFPSmZYTnl4STlWc1NGZERySmVzcDVWTG5hN1hJS05FQ2tqaCtNMkl1VGZRdWUzTmgveUFCNTJwVllHVkcxaU1UdGE0eFVzVXBJMFNnYmtDVHJ2Ykhjd3U4bWVmekRFWXJaaEZJelhna0dnYUprM0NRYTFncjNmOW9Fa2lHVnM1THdRODNhK0d0TUFzNUhVSm9QdDdNQmd3RmFiUDdaOHRZRlcvU25Eb3F3b3pRNWYxdStoN1JNbzBpNXppT2hmYmg4YlpZWVc5cm9Wc1ZQakxNbFZoekQrUjl1VDh1M1hFZUhHUGpCai9Lejk1eEh0b0Z1WDcvWU5VeDNrVElLM2htVkgwcUJaT2pZbWpaKzhadmFmQnBGUTBkdnJqOVdOa3p0YUo5QVNoMWJjM0w3Q2xWTEs3R0RPSDJlaGNMZ3pDaE5sRTZNeUJZZStCbXJPY2hBTEY2RVVlTGlsM1dRUUsrdVZ1elJWdEZ5RnhZNlBDTGxYdHBqVXNUU1Awa3pmQ0VjN09raGxrdWFkOGlkMnB3OTNURjdvMHl3aTZ0RGtQUlhKVS96TWhHWXdhVkFYNHdQMUVkbHdCRHM5S1ZsVnVmWHZkSkIxYk94akdGL0RTQktjd3pxUTdVSkZadVFYUFZEOVMwelg2eUF2ZDNxbnNvNDFUMmUwU0tuVEd2RzlJeVlyckN2T3huTXN2U0NSemN4TEM1TGRlakpwK2Vja0I3aG9ldzZ0SXJqUERLZ205bkM3ZitBSVc4OEFWVkcrSVlEUXJIbkhBeWZDRVBLVllMa1F6L05QY0NJK0dYQ2IvUmtnMkppU2V3QzlCcklGclgzdFlOWTl5Szlzai9HTnV2OUN2dUh6TXJDWWNrdjY5MXhKMzV6Ri91bEl5VGJmSFhsTWZWb05tNjJZa1JYNTFkOGg0dFBYRWFZV2JBVEJJTWxtcFJDSDhFSW1Ca1ZkNUlmNDhiNVM4V2pDT0RXcjdaS3d2RXJOaGI1YU8zOHViMUZkVEFHNFFYZE1lNURkUXZoVnc1NGwyak1zbEtsbEk3bFBGT05lY24xV1FZT3BsQkx3SkI2dGN5NENMaEhCTDBicGhLM3RCZWFDSFZNeWNyeDViUjAycEJWdlRlU3RFMkxCWWxRRzIxcUU1a05nK1RyQ2U4OGhpVTY3dWZFY1E0enpraWRPN2gvZnRYQTlsWm5QcC8vTldoUkdaS0VnTU0xa1BwY3Y5UktYZnBJcGF5RjV5bmUyNVV1MHZYd3oxZ05zcjZOVUFNNVRIL01oT3hJRmtEa1QzUGpIUGpVeDRHMnVkOEVCOENFczJSSEY5R3BvT0pMZjBzSXJVdks3cithQlNBUndtekl3cVhRUmNVM2VVbHkrRDlOczZIQVkvb0tEUW5ZeVdzTi9URzg0U1M0UXJYQWt4bzRYQUNFVksvQ1NpRkVZeUE5Z0d0NDAyUFN4RVhiNXVCVUo5cllpT2tRMmNtWWxOWUpGYjRrZGxhU0dHeHhNYWFTZm9KelFTa2VqcmpLV2V4MGJhVVhsS3NzNzBzK0l5a0MxV3Z6KzNTNEhUQUVWazUzMW9QazFuamxHWEp0QUJWOTB2SVFjSDErVU5CZmhXY2dIUmhCR21vSVRJR0hYRlcvMTNPaTlVZkhyZnpwVzNxUzJZRStuVFlrOXU3MWFKTnNTb1NNcy9KZDBweThDb283MUN1Y1dUNnd3N2Q2SUhiS0l6RnE2K01mek01YWJIYWlQY2NXTDk3RmJjRzFWWmJsa2xValI2am5DZFJMMHkwTEZ1TWoydWdkOXFmeDdNV1NwSlRuWlZHVm5JakZla1lhMmFjd3Q0QU1MMnhCdU9ncXh5OTZ6bjN5WmxsNnZ3RUtRcXVwTXQyNXY4WURKc2l3bkRvQm9sWEpyb0MwY01oYVdnaFhqdlBGNytRdWxpdHpKN1BFTEFNMDgvQkdZOHBEY1llWkdTZVZTNVNicUhqVTErVTkzb1BLcW52aUJkWUZjSVR3b1F3RmlTNkVTYm81MVBXMVhhcmJzdnRUWUs3RjdRT0R0RndGZW92QWhqTVZjN3BKMnVGNmV4aHRLakVqcXMvWmYzZnlLT0VUT1V0MWZhelluQnZPdWc4Q3RtQ0xUUXpyNVNLZmhZQzdwRTVTNTNyY1I1WVdtaWVkeVYwdmRGVEdpcDE3aU5DUDVtSEZoNkwwYVJlRGszdi93cnhObUpqQ2g2K2J6T0NXZWYxRk9NM0FwQlFtNDRjRi9nVDNnUDUydjdRZEp4U2RYUG9Sa1k3YU1pZDduelVuL3ppblk2LzNocEdzaWx2eGpDcnE1MzUzZVF6YUMrSHQxRDBHNWhYdElSZlFEOEhTYjZLWDVZdGVhdVlhUEtxYVo5b3JnbTNlN3l5Vmo0a3VhK3UyRGdwenhwVEEwZGs2cHFsMDZhVlpERWtQUlluTnNVc1V0OXRya1RDZkdWcWFGbU1IMXU1M21rYTdUTC9EdWg0dEZzWmlaSU1jbE9OQVJ0YkN6cG5URkovUGxIZmhIcExzOCtlaHR1WGJKcmN6QStjcUpFMENwSTR2NGtNa3FJclB5UFJvZmVBVE1uTE9NQnQxL2Q2am5nclJTb0NSWGFWQngwb25YckJCNC9WejY3S0ZtaDNWelhNT216NzJmSHF4TnZ3Uy82Y09KUnJtdnVmdnZFUFpzR3BBc01hQ2dCM21aSnJKTGh2bWxYSTI5S3lGUUVMbjlpYVBNY3AyMWhUeHVXRkthN0FmcWZ1anFpU0ZxQ0UxakF3eGdqQVU0ZVIyMi9uNVV2Zk1INC96WVpIWFlzdXc0UGpLdm9vSXpPRGxvQ09jTVIxSHFVVG9yZHVMVUZRdS9yYjgvTkdPY1p6d1R2QnV2S2xNaUtFamFqTnp5VStNbGpTbmlON21WUDVaVTQ3QXk0bGJEbGR4Vm42QUdsMmZHaThzeTliZmZvNG01bzY1eFY2YWw2a3dvUitQdWFwYVl4K2FldXNYNjJoUDNTaWNaUXdPYzJSb2x5eHpkSG43Kyt1VXJ2YnQ1a1c3M09yMkZDNWIvdWo5NVQrbWc1V25MZXFRVkppMmt4OWl1UkMwTzdaMlRQUkpNbkFLcEVLSDdmSTkwNlNpNjNZMU5Bckh1OWxiMmtiQVhSMUphY1VqL3AzQnE0K0JJSGNlWjhnY3M5SXVBOE1nTmkvaFFsS0lWeUhna0NBeGw4K0tqL3F1SGpUTkp5OEpVZ1hBTFU5VkUyQmFaWmU5SkdpY3JRSjYxd2VtYjZqMURKSzYxRm0rZXkra0JqTWU3VXZhbm9sZjFYdmlKcTh3MVFCWTZkTkZPSnJ4RS9EYnNGbjhxb1FjNlYvYm4zSi94SGxrcDIzcXNaMTQ3emIyTUlUTWZ3UjhTclEzOUhLVjdjUFJ0UHdZWTRXMEhHUjhhdWlHUlJEek9QZDRvOFZyTHFGUVpJMjJ0bmp2R2k1eklhU2NvNXUyL09lSFhYRnMrSVAwL245R3BMYUpVL1VBc0Nhb1RRdkVwVzQ0RGM4aGhWQnFaZjZmbWdrcjYybnVFRjRLTVVqenJraU5nRXJmc1lQZHViUVZ3Z1lvZVJ2bWw1WHNlTzU3VzBmRlBOWXVRSkY3YXVTaDBqMXZpR1Z0TEJnRVFYZzR2OW5NTmxBN2J6N0ROdlZXNlN3TEl3OERuUFRxWlYrUllJQjEyYkE4Q1ZpT3YwN3Bya3J0RnlRdGNDK1FTV1Y5RWgyQ2NPZ0FTa1RBWjF0MWI0b3RBK3lKMjQxTDV6bmh1TjNiOWpJTC9TRE5QZFdNb3llV2dyZ09JMzQzSmhkRktMWUt0RTRlNlUyaHJGd3g5eEZwbEl6bDRxNEI1RHFocnBwc0JQSnNCTGt6WlRkZ3MwNlpIQVJVZUZKWXZUN256Q2xPS1Y5R283OFJJVkV3b0piV2lJeGRYSXEzZktJQnRZSGxZMVJXd3NlOXBtYzQ2THVjSDlWRDE2b1lpcy9QSXNOUndQWEpYYUlPanpzYlltL0tCS3ZmQmk1R1JqRkxjSXliWFc3aDdBYmxQUVdQWm9tT0YzRTAvQ283emV6cDFLOXRadGVKUURJbUM2UTZlQlZLa0hURWpGWmd6REhUMWhHbExsUmwrbFlzUDJnVDBtOWZzYml3VlkyQzZQOHhwNHlzR25GYmhLa1BFd2FXNUUrTUI0MFRDY29ra2RUL0JxemtVaTVoUUdKVHpXcjg2UDltTkVhNkE0NS8yS2tndEV2aDJaQkI2MVhPR3RFeS9EU244Wng3YitSZ2FOS3orQlRaaTRPRVloNUFEd0YwVW5mdTJRcEpwQzYzUGxIS3lpcWlsTGhTM1d2aS9ENjNxVTZEeEJ5YXIvQmdXS2daWE9qQTI2aHljMERTcit4aFFnb0lkSkRKaWFSS2NDaFVFTVNqUTNPV1ZXb0k0QUU4NWFHQnlPOVNtcUZxbTJWYU9GeElXM0o5VEcvVTNVNExzNEV2M2dyWkRVaXlMVXpacjhCQkUzbW4xZGJYYVAyYXlIb0NwU0k0S09BVVd1YVF5Z1FOcS9hTmVZVlNzM2dnb2IvUXlQYVg3aWJKZy9rYUJXS2hPbStEMFBMaGFoaW13L2dKSmFLcDlMS0pqQjJGQ3d6MW1KUHVYdS9VaW9obHcrRUk4TG9HYXRGemxFQmxDNjN4dStPZXBrbXJMNGk5OXlTTkVBZ1VuY29NMm0zSUF3cTViWWhLdjZMajNVMjBQcm9yalFYU3lVcXBVYnFzNWpXY29Lc2t2dTdyQVJXZ2hlVzZBM09MSTZIb3ZoNHpOd2ZaQmh3b0ZISHhsT3ZMN2xXVmdOaHhlV3F5ekpRREl5ZGhkdHUxcXR6Q01SZG9GY3QrQmNvZ1o5T3pwL1FEUVRHNFZVUWlZNGRuQllyT3FIOWZyVGk3STBiK3AvZ1VGMjNGR1NodUlheDZMRVFhNnlVOTlsV0d4ekRUeE95b3lnaUtjUEpobXVCTmZJKzdKeGoxYWlZaEpuOCtaNGRzbEJtTzU3akk4V3F0Ti9aVlQzYVBIb3RMSFVaZFBkQysrSWFNUWxEUzdsRXRaektlOVJqOE5meCtlS25wWDFMZjVXTkNZWjRwTGU1K3FDZG04eC9KSldMNzVNbGxUdmJIMkF6eWdmcmdmSEtmMWhCZ3F6Wm1EeU1EWU1oVFNvQU5uU2ZwQ0pqeHo3SDBqZjBjL0haRmMyM3Y3SVl6VUg4Q1Q3NGNuL0ZPd20zQlB5V2dCbWp4SmNEYnlycVRDYVc2U3UvN2N0RmszY2NOZ1hDUS9CQkw3Wm9oYlFHSUV3QjRYM2xNc2ltL2dCbHNzK3RkcG1ZamthdG83VUx0VUhxUU5NNWNpMDloa0gzVU8ra0VwMDRiL3VCd1NwOEoxa3k3WllBbjA4ZEdwMHd6ZGNEMmxHVHQweE9icEpKOGRRbXJZeWJRaEZSRkNJVmFlZ2RWUmIwdzd5c3A0UUZMdWI4YlVsWHpwQ3BoM0VobWViMUg4Z0o5QmZweWpPL1lVUFRUb01SQ2RTeCs3Q3BwZWlpZzhWN3gxeGY0V3BwYWRGRTZHU1NkQVFLMkRxZkNtVlFwa1JPMGIydXlGZlpBcjdOaDdHRWY1b3RMcE9BbmJ5em1aUDNKSTFPMHdnSmRxcDZ3NHIvUTlySmNnOXMwUlorVmF0aEYrYTJvQVQxcitkSEJIRVRucGVOMnZob3ZlQWQ1c3dQNTd0T0ZtT3dzWlVDSEU4UHlWRU53MzVWb3I2VWpCdnZmVnk0SEprU3E3dU41aWJzcmZibWltQk56eXQvSUtBdVpFQnd1aHZXdm01SVRORzZ4UTRRQzhScnlNUlp0L2VWQWhUVUMwemZUVkZqbUdySTFXdkNibzROdy9icGQ4QUV2a29YeElwWUdYcFRIbFdSRXIwMkkyVU9JVUF3clU4aGdrcVhLTjdqQlVTUUtyTG5kUElqZkdDclN4S2RXTy90Y1JiRm1KdGt1NkREd2tZYTNjZk96SXNicG10NStXSGJudkJ2Y3lyMWY2RHBTMVQ1Vlg3Rll4L1g1RzJnM0NKWW04NzdaVG1SdEpmVi93MVVqNzJSSXBsMWpoU2FJU0NxVG1BS0pKWnhlUjdXTUk3Wm1zQUhYUDNzLzNuMmN5UTlMSDRGVjJ4NTFpVzluRkxsQUxrOGFKVG4zTWZMY1ozeFVKYU95YVdGVlFCdnc2K0hUclM5bEVYTGNYSlNheUlQUGdlZTVIVDQ0V0hRb21uVjNielVLYW5ubE9nQW9IU01BYnRCQjF3UmV4L29jMzJtMHlFaDVOdTlaTmQrWmpKREFEWHlrdGdFcEpsYk05Ni9RSmdPYWRzaE9NVWdmNEN3NXdraG1wTmgycmZoTnpvNFlnVExyTldXcXNoTE9ZOFZqTS81VTlaeXcxZm5WNWdoZ1lKdFBaWk9LNFJ1Z3VUK05kekpyd1B4RTdpeGphZEdsRWYvUVUvVFpvRXZXSXE1T01Ndnp0dnpIQ1duZmFDMit4c3FMM3JKQ0g1VzB3ZkEyQjREaWpxbGJUTGNSdW16VTlrOXRRS1AwNkF1dm5yakJFamdTQVhheXhKbE1pU1o4QmRwYk95L1lhYStwM1BBNGtIZFR4cUh3S0JVNXJnNkRhcDVXelVmVWgxeU9jZU1PQUl5QlN1QnVPVTNSU1phaWZZajJoNVNSd0ZaZTFrQlhOQlZLaTFncTJSTytZZWVuSXhtSmcrSklzL3VqWElFaE1nTktxbVNjaGlVbnhCbHZsdmliK2tNM1BBNWVIWktCL29lcFhmTHNBSXlSV3krN2pBdlBKRmhEcEJPM2tlSTFoK1lROVJJcUZNdXBGT01GcGVaelUyMzVTZlM4Ym12NGVxZy90SXV6QVFYTnE5b29VZWRaTGxSakJKc2dDaVZieHBvSWRBZytDM0tEK0YrK0JieXh5VEpHRXJDYWtncXlmYUJlUnVIaUlzVzFoTUJ6U3YrMmo2M2dtY1dWeHhpWEtXZXNiMWRtbzh3MTlvOUFuMFpHdlJMakhHcDVBUzlyTzI0QXFwRDhGeVA2ejVlNjdOOHhONjE3MTVaK0RnQ2E0c0xoSFRmZUJoSFdwalRhS3JROGdrakdPOHJ1SDV4TU03TThKUEJRcDlMQ08wVWh4YllpNkRSQVpITXdNNlg5eWNBa005bUdoVWdRN1c0L2w0S1NFTmtEZm50K2l1T2FJK0ZXdXFIMmQySkVRVUpZNnBrZkZibjJERnM0aTVhdEFXU1h4a2gyZXJhbzBsekRCN1Bpejd1TXhGZUxGeWRhb0RyeXd1Mjlla2x5bytCa1J0aXhXS2RYY1BtOFpEUDV0dk5IblpoWmdWYmo5Z3krRkNtQVRTL2NRSy9MZmN4S1NVTU5pL0FWN3lxQWJLVDdqZGF5YVdBTDh5OGRMam8zQU1HSTlDUGxVM3dSSVA0UnlnYlB6cnI3V1hDVHNlZXordEtkM2d4RVVnWWNIUWhHVVMyT0pyeFRqTCtGbnprNTd3TWhtQlBTc1JERFBHK1RIYmVNSXRZWDdyZjhZRHQxU2wySzh1QlJwQ0tpbksxQ0FJbmhLMkE1d0tWamdjT1hRR3pscWFQUnFGK1VPSW5DaThPcnZWTUlHUGcwanNRN3hnZkF4WFVCQm9IMlV2U25ET0Vya1IyYlI0Nno1WDlvc2o2WGUzZkkrUGFSZ1lsY1YvUVh5SVE3UFpSWWFKRkIzWDhYTHBYMVFIMXZPM1BoLzg3MnBmUUZEQ2RTdFV1VjFKcS90bjQ1VlBHZkcwaHN6WGlHOGxrQjB4amJ1OVdtd1hsQnBWdWJyZSt0eVFxVGZQWit2S3hVMXVYUVo1bVozZnZyREJ4ZHZPK2RDckpiNW9WZktsQktSU1I2UUdEbGh3d0t3TkRpL3kzZW05ME1RWS9kaS9ZOGNXM0RaYkI2Si80WmJuQlhsdERGeHJleFp5ZnlXUi85bFpUeEZodEloeTdhU0V4QzgrL2RnR2VzVE1UUkpzNTArMFBNVFUyOGoxL2hvaTBDOVFGNjdKNEpRazN2VDBVZEN4R0VWM2l2cEZHaUEreVlyZHlQSXFuRjJHc1lsVmJsV2Z6d0o2a0UzNkkvcEtTWWY4K0lEZ1VtMkZzajF4RElSMVdaTWhIcmNTc2ZMWkhCeHAwbndmMG00c2ZTanFHelVxR1BSVmZPaEw3Y1pLMkFDSzBISmV2VUpZVmNNTzlqUTgrSFBwdFlrQ1JKQ0ZHQjcwbWMxd3NtNFRIaHZGYmh5Rm5LZzJzWUxpZG5jVW55QWREMjBza0wxampsSzBJK1NlVXVqS2FEWFU4cjdyMm8vbjNlaGJ5dWJLcDJFTW1TSENKYTdyWS9oZlZUbmRCb2xmTnZzWHl6WnBybmQ0N1NrQU5ZZmMvdzZvOXBxRW8wZU5VYk5kZjZiYlY1aWd1dkUrdytYS3BucXp0Qm9jU2g2eTYxQWNmL0oxaVVCWUgyNGNtYUJrc0xZSWszL2IvTEZ2blFaTzllSzYyemJSR0NaU3Zxc3I5dkgzS2taN1p2MUR3VDlReDUrZUppZ2s4RDJCOVc2b1FDY2hYSFEvbmVIT0czSlJ2WlcvMTRTcVk3TEl0R2tFZmxoL0tZa09NOXJ6QW9OOUNnV1RoY3N4aEhvaGMxK1ZuRXZraXVobXZrM3JaT2h2S2RtTXEyY3BEZmFjVFRwYTRRQkhuRGZEOXZmMjR6N1dvaXlKM0tpVEZkcTBUQnljcEJSeFozS0JLWHlWeGwzRVk2SktrbDdDVDJQb2JyRjVJazhWcWlxa2RZUU1Nb1l2WWUrWW45Wk1PU0Q3L0tJOXdPSWNTeHRramU2SDZqc3NGTC84MlZZWmVTc21sdDluR0cvWWQ3MUR3dHRlL2F6Qjk2cFc3ZHREZ1loTmZLalR5ZWpra01TSnVlL21BU3V1a0lidm1hRGxVRWZSZ3prdTQ4blErZHdZZ09TVyttY1Z2NGdISVRPalA5SGE0T3dDb2RuRFlUT0lad1lkNjh1NzlsSTFsSkwxeEdmZWRyU0ZzRUllYzNPZXdrYkxiSFpaRDdsVUNObDg1cnY2a3JiaWlGTDdiVnNWWTlQN3V1bFE2NlJqQWwrT0Qzam5JWG40MXNRQ0RDTmU2THBwSFlnTTNMNS9UNkFudldzVUY4VFZxKy9UNHhxN3NQOWNKQlovM3E4WDhUL1dENkNZSlNYanFqVjFLRStUVytOdzVaZXNQblZzTGY4b2pDQVZKMlVBdlV0U1I3UzNVZHd1T3lEUTQvaGlwNFJvb0k1eFpsQVRTM3d0Qjk1UzhPWUR4R3RBMHdCR3V6UG1XV0w2UWNXd3V3MWFZR2grS3ZQcEFXTFYvaWp3TnQyQjlzYkNMdngrb1hFN3RaM1VjcWxDcDJibFJJdmI1VzhBOUpRTW5iMFYwWWpjSlJ4a09ic25OUmpEcUZHbFlmWHlXTlc3M2xLR2JjL1FnelBiTlpsU3E5U3g4LzJWNVIyc1k0dGsveDVTaE1WZGh3Zm11K2UrWERiRlZqRzhGZUtMbUpvZGJweE1LSlVlWjc3cXR1SmF6MC9ncGY4UlZ5cGxEdlVlZ3hrZys3UDIvN3RlOE5QcW5lTS9iQlN5VXhvWEJhdU9oWExpYUNPV3hiNzlCWWxnbHRicGZhd3hRMUNsSndsa0E4MDNXa1pvRWhCZS9EMEpwL0tuQ1NaMWlQekowekkwZEJRU0U3YkpLMnVQblk5YXRWUEh5cXJWRlVsWS9mQy96WVNqMVArZjMvYi9jTkY5TXlUZURyQXc0WnJjYmNZRjhxY0pJeU9SMElGWDRoamZVUGpxT2NTUjVMRTNCeXVmVmlpMmlBanM1dXp0SUNnQlV3Y0NSbURnRUlRZVJUUm83dG9kcnJqNVpSYnEyeXI1QkhuSjFUZm5BM1JkaGtRWGtzNDhXTlZUSzdMNVJYWDVVaExmSkdlcDNGRUtRUlcrQVpRaTRoTHdtR2NCTENrV0tkZFFCZ2gyOW16Q0FHeUVpQjdSSVVqWTZsVmRFTC9ueU1nR0FITlBrS29TT2lGMEtNemI0Y3VySXdNRnJvZ1U2NmJLcHNxYWpsTFp5d2VmQ2x0N0c4aDY0ZVN3R1p6RWNxN3dUemdsbGRYN0ZySmdwQXI5WC9IMVNFMU5nQjVvQUdRTWtseGVsQ1VkcnFvQmlDMmtHWHQ5SkwwM29KSElUYmJZTmdBaWZpdmdJV01ENy8yZDJ2cDc1Ri9OWkFSTGpLWWNGQ2VOQ1hNUzRtRVY0RFRBSVkrSmN0Nmg4WXdpQnhVZFZROVRSYmtIRzN0UlowaDlhbks2VldicS83eTZxN1J3NG1aYlYxeVd0U0Z4WFlkZDcwakxTUVQyMzdjbGJidGEwVkt5SW1RTnF3ZmpaaFB5MDRvcmVzakFJMm8xMjg2YmowOUZjdVVpTGZpalI2enVvMnFIRjBnL0NacGMrZGZBZWZ2V2J2SGpDakNPdjJaSHQ0NEU3bUFDbWtXV0ZqcUUvK2FpM0E3R2N3ei9iWlFVZjdEaXlWZjBPSjlVdU94TmErU2lJUE5sdjl6cGFXQW1sS3AvUkI2dWc5WGF4SGU3bjRNVjcxbjk3b3NCa0lTU0M2WW1ZUzRTWCs1VlkxaGhGSlBMRXFodHlaL0pLaG41OEY2YXFBdjhkbXNrWkRJVzBONVVhcFQ0Sk9CNFoyMnZ1NDQ0RmpSVmwzOXNxMUxnanlCcHVnNGVwd2sySWpnd0RKWTRqenlpaFc0WGV6Yk4zMUlYV3JUR3JoMEtkendteTROTEwzUGo4b0lRSFQ2YmR4YVdxSXZ5NHk0ZklseUNac0RkZEpGeUtFNGw2eW9qYmY0ZkVOYzIxWWM0TFp2Y0dIOWNLZDhCS0s2ZTZTVzdLWHZ5bTEwckhOR3hJTmhXMndWb1NyVjFZSmR2Q0JHWGl5b3ZERUNoWWI1cDZ6UWxsa1BlZmRucWI3V3RnWlFtWlg0djNrSm1LN3cwNVBGdi9YV0JFUkJubEkxeG9zMnh1RUNlaG1UY3JIbEQzUGVjeWhMWW1uVjV2UDRRVEtHR2NNbXRTVVFaT0JCc3Vza3FmK2NJMTVyL2wwL0tDSWlKWWVxNVBiVmJEelF1bnFIT1AxMmtLZTJ0VEZtbldtdGZXZVo3MnhxaUM0S3RMT2h3eWhWWlg2OHpGcWZ0cFFjSzR4NWFEakhFbll4V1Rlbllja0dOLyt3Z1JTcG5nZXZoa0xEdGhXQXJjc2luOEhMYk1BdG83cE5odGpEempFK2w4c0hobzJrL3QyZVMveVZLeTl1ZHZGeXVMaE1iY3dHMFhDZ2dXNDhkL2lDYWdSRzI1b3dDRHRkdTBpbVJ3dGx4b1NTMU5GQWgrbFFramRGb2loVjdPaXNyVTBIWHMvejd6am1jQUlnU2pueXc3ZGVxVlVqTk9Fdmw4dnNjMXdSM0liOU43bEFWNzA5eUxtMkJFcHh5djNxNnJXbm5Od0QzNk5EKzdJNlFMVkt4TnYxdzhZa3JIcTQ4bzdEYkFOaFJWQWt4a0RLTnNEdFh5cFNIMWJwaVZJUjBObTJEeG9KMitsQ2ZJbU5UVFA4U0FzQklTelRVR09aZWhuOTU2MjJGRlh5d0RCdVlEZ3BBQnZqRHFVelZkRWoxL2kwVEdVeTdaN1VnVmRGUjk2c1A1b0pjb1lNY3hpTmk2dkhOeC95VjB3UzFlRFpPQjJoTzhzc0M2TWMxaEMrTVVSYVVFTHZrVW9nSFM2emZncnQvRXlOVHlmZ3BwZWQ0Y08yNjlQcTdKWDFJL09Pck4zWVZkU0lZbzZPZFVJUW1ZTXUvM3A4dU5xdDdyYjVaR2hlK243TE9ROHJBamp0SkxXVVBMVDBGc1dBUWpXSDNsWFJWbDRyb1BOZXBLV1VvTmp5bDMwL3J3Q2FhMWFtOVVNc3ZqRVVSaVU3WWVBb1RNTm9IMGZZU0UzK3BjQ0hJb2l2OVdwSTZoWHF5K25Ibk1wNThHZnd3R2lkNEMxdkcxcndtS0Q0TXJyZktURlNPYitYSlpDclZYblp1ZlRyTnAzZ3h1cEN2b210aG9BcTJZekhiTjA5UTRuNUs0N0VUZ25IQjNZWGFXT2ZrQ0taZDVLN1F1Q1RlY2NCby9QWW9UY3BmaWFLMkkwTitEcVh0S3ZhS2hJcldZWDRkTjVFSnZlcjNobklwcTRmRGdpYUhWcW5hVnpsdC96VlpnRzdzTE9acWdHZ3lOS25VekdyTFN6WVRkRFI2eWVENlV0RVlqRnFNdzFFcVoyZlVmdGhGOGhKeC9ZL0crWWRibDh6ZEs3S1NUTnNWc1U2K3NIcUFGb0RXQThscEVCK1lkZHdmRXBTUHAydDlVL3ltUmtYS0RaYzJoZHFhczEvQVhoVkwvSjdweXFTdkNuQnMrajlSRlVkUlpxaHNFMWJuZ3FlQldKSDZhRW1JTzFidTk4UDVHWUZiKy8ya3d2SUs1T0JxMk9hb0pIcGRTSitFenhkVEg2Qmw5UXpFd0pvZXVpN29CK3BlV2UyaExHc09qSEk4bk5Yc0svU2haNDFNVklQdEJKczdjNTI5S3QrREFqRCtsVy84Ums2RnBvQitVNXhZcVZGSDBlekUxaHdKSGZJVmVURFp6TXlBMnY2SjB3eU9DK1hROUVUYkl2Z0h6b3l3Ym5BRk5za2RJSUZGaDNjMlBzNXgvMjErQW5ZSTYzbkFoMlp0ZHBQczVMV1RJNGppWE1Qc1JxSU5hQyt6SkxISzFKekEzeU9QOG9qbStld0w5WDRESFdUVVQzVW92YU5aemxpanpaOWVQZGg1d1VLd2xYQWxLdUxZNzFIQzZNNG4rdUd1VXovUDVBVVBUQVhzZW9xMVN2NHJ2RStzcFYxNDZVa1BvQjNBaGpkM0pzMjkvaTExVlVneXVmalFsdUdFOFVzTnE0ajR4emJWOVpCbHZnVk4wbHFoK0xOeG1MSit2RGFVbEJuaW1JWlU2VWVpSExxalN5TWQ3WWtpb3VYRVp5TGxtdGovV0g3elpkemxZT0JMajU4elJlK3B2YVlycE5zU3dYT1NUZUVRV0JNMmRWRmI3a3VOK1VEc1YranRuODltQlYrSDR3dUg1MnhpN0hiTWxkc1VqbnE2Y0lWMVY0Um84R3F3SlEvSlhSY3BBanloTTVsRFcwTWxnSlJIMStUZS9WOEtRQ29RQUpjWlYySlFNZXVrWTd2WGFhWFVBZkNRR2dLcGdsWW8vcVJyZ2xBdE5YcXhlOURDR0tWMStrZ29YWWpDYitLTVRrZ1Z4M0Y5UkUzeEM2UEtHdzExNmtzMFhUOFl3b0phMHMzNm0xVEhqOFpaUzlKd3lRZkxBeFR6WGhtcktmdWMvSVJROEFmSHF4K0FsdlA0eDl2T0hMMFgzT0JSUDhJdW81UjhSQXFVNzVpM3MxU3RiNUV2VWtER0JFaVRWMXByY2VGTDRQbFRGM01KY0s3bDE1bGF6dFRQV3JjU1phL1YwQVlCZVR1dWY1U3N6d2o3NzdTVVp5eGU4YUFDVEZ2QXRJT3U0Vjg0ZFRsQ0UrQTBLSEpxMkxWVFlVdURidzR1dFNJSFNHUVRQUDdWc1F3aDZESW1CWVV5d01mYXpqM3kzMXJBRWVPUitlN2prRGtSWU5Ib3hVTTFYUis0T25WZ0RWaUZCbnpuQXA0TTM5eVkwRTdhc0pmdzNBTkVZU2lkUGovV0RMU1Bkc3lDU2JpWGlDeDFCYzdWTUxYSHZNY3lVakhvc0FvQ2VKMVh5c1BHREVNRmtVTU01djEyeWQ1M2tWWEQxQTZwM0dUN1ppdHdGNlFIZlp2RFU5TnJKSGU0NTVlaDRqRWU3ZVRncW01LzdKNHlpREo4Rng0Z05PS3pGa1NHSUxNbytCUnFxcyswR0VLWDZLeHM5RXRHMjVEL2g1aW1yUWk3VlIwRk40am5JRTZ2YWt2ak9hYyttdjQxZ2RJb0hMckZCbHNhT09maHRXR1dQN2Q3ZzVzNkQzVXB6ZWx0YVpnOG51eHJmZGs5V2hCODFCaGpMejRBd2Y4SkNEQnA5NUxmWEFvM2JYQWk2Mll3dkk0dW5UdGcxRDluYzF6UWtuSjZlNUNUSmwxTlVjMzljSDVCZmo2L2RxU3lMZVNnWGdNc3FRTmVKUzlQeWVuWHZGQ0M2dFB3dUZkdFF3K0lPcS9JeFV3dzFBekM5ZFd4bWt1bjlIeW1rVTBOQUFSOTE1VnhLNDJydktrWFBFbllubHBYcXhMSkNyeUNGK0xvRFFWZkt2anZyM3FxMXRNa2s0YzJFazQ0MkEvbnpnMHZ2ajlwektlRGVWVzNLNFlSanI5dk1HTzJIZ2JvbWd4NjRQbU1ITGFTSHFTekxyUjQvQ2d4Sk5STzJDelJlU2lMRUZPb2wvdmtDU1dINW9rRDEvMWt5blJrLytBTjhVazYvTjFkWE1JaFh5Q2xPbWtFMDBTMmxBNmZpWXpXUDhOVnVwNHFOeS9TQk9UQjhVVHZCUVB3TzZDYzg2Q0hna0JOaWhPQlMyRWZNaWEybThsVkh5bmNCVGtXL25VUGNUblUwanNIK3ZRRmx1V2VkSWZDYUIxTHA4cGEwbnZQTEZxZEx2VE1kK3lzUmgwMFJUYlN4OFkxdUU5ekZSVzRyMDdzRXZtNzZqNE04WUNMdElaQ3BvekhaRERMMnhJelliQXZQNTlQVXpvN1VTUCtJSlMxcGxuVzRhMDd5N3o1TTdHUjVCT2Z2dW93MUFmZk1vOWltS2VvQmVzNzVvMjNwN2JHcjV0ZUd3MC9wL1c2VnFNK09aSG1mWUJzQnhJMG1iWEVySTRFUUxVUWFkTXJTVUdNRDF6VEtmRldDZVlUQTlETm1OM25ZckhpSnIxWnFwTXZ3Q3RzNHdZT1hwUmdlL1E3bEFpYmpYK3ZLZFRLVElvRG0zb25VeEVRd3A0bVBsWnR6YmdhbldvbXFaaS9kUDVkcFJWT2g1SGROaDIxWW1hMUpNOHZhM1RMR0hLV1crWVhBQ3Q0NlpMS2pTNFBuM3Vrd3FFb0Y1RXNsRFc5LzJrdnBkZEtpOFZzaVVLK1JFL05qeVZlalBtSE9Gc1AxckFTNmNOQnYwOW5UZWFNdEZDVEJEZE1xdGhXOU5ZR3NibjFjOEh1V25wdTIrR051RGZNWWl0Q0IrZjk3YnpXRk1zTi82UEgzWXkyNm94Y0J4RWdWVXZZWUFzeWdvb1N1enZpTTZqWURySXhpVEhOa1gvVUoxanVYZHpxbnZNeWVXREJEOUltKzE4MnNsamJyZnFOMnlqbC90RjV1TkdsYWlFaUhCUEZyejEwTjJsQlc4K2owK0hkem1mSXg5SEFETkhwdmt1MnJSRnNkZXZxdUpNTFN0Mkg4NHhNaHFKVlpZbStuQ09rRmw5T3llejFSNm9uQjR4OXZxL0Y1WldYOUVnVTU5WVJCZ0ppT0J1R3JGZkQxeHl5NmFoTjl2SWJwc1M0SkFSaWp2RldZYXp0emZoU0ZTZzRQQnpHdHIyOTJKWFVHb2pXYzdDSHVhVWF6MngwMmY4eVJZaGtlenF2UjNSMmt4N2hWWFpNcGJMbkoxZ3ZQcjQ1Ni8wZkM3NGNDVmZtQ0lyWjA3WGx1dkJuYkpONDJvazNiNmVlVCtXbG11QlU5WDF0OFV4MnEzclhzTXRKVzRNUWR3WjJSN2xaMTVKcGVYdG9PcmhVTEowU003eWJ3WlBmWStQT2dhS0x4SjlzVDJCbS8vSFF6bmtvbmVNalJ5TU5PS1hWVnhZa0xDWmNuYTF4dHl3eUhJNVduT3paczUzOS9qNU5xdVpRaFRiaFBYdUFwU2RHREt6cFFsOWtya2ZSbW5hdFRHVzRTc0xuUWQvc3QwL2xUV0FSUnFCMDgvZ3lRTnZ5NVBLZkJrU0VyZmZZbHRlRDBka2VoVTZOWGVHZ05sdml5aWhkenlZQWFjZ0c3YWovdElLSGVYa0hKZmxhU1htckllUzBYMVNhUW1HNU1YZHlXMG9BOHRpZE9XWmNKcGdQMjltRGFwOHlnZDh1bmJIQVdvWkg4WHY4VE5tRkJaRU5UVFVIWlE1MlAzNnhYR1B2UVNZZjFqR2xHd1ZaaVZibm1pSEpIcGtTYkE5cW5mdGtIaVh3Uy80Q3dIM3l3R3QxZnNuaExONWhZYjB5VWpFd3MvaXZtOXIwVFJCdEs5OUdxaUJkSnR3Vys5eXY3K21xTXc0YTdVRlNIYjZLZFJWZ0VUS3NQaElIeTZBbWhxcVpWc3RUTkpMZHd1MEo2SXdha3lMRHNxUy9XSnlmdXhDLzVNdHc0OXgwS09aUXFuTXJtdHRIWFA1ZG9YYnRxdHNVbTREeTBMUERPYTNLSXNnOUpIeVo2NGVBcDdzSkZkU0ZNemx0OS9sODNUMVNwbko0T3I0SW1va3pHUlZEbUhKN1JKRWU4RTc0QjkxMGplcXlHTmFPaUo5OFZrYWFOSkVaYUxHOHpveE52eXRvL01KbGhQNFE0eUc1VDRuendFZUF3dVYvZlBiQmtNbk81dnpzYWxMa1pIa3ZwSjRieHJRTE5MY3Fpb3VBU2x5eE9Mbit2a0ZySU84bUVjdHZkajlTaTdrdDZmaHZmdDcremhFUXkrK2VoKzFETmFHelFGalpQWVc4V090aS8vVVFPZ0FDUk1Va1RuMHZHaHZOckhCZE5WR1ZtbThmYnpVUzdoMFpPOWwrczcwMnBhcTZ6aTJHWmlRbHRJdzlKd29RcUdRcTczTldEYWdLNmQrMlNjbG9ZR0pwZGo2VTZWOXFLeFBTeC8zcEpWWktidTJPZE92MVUveGR6RDBJekFtQ3NKVXdKRXBtcFl0cTMybWUxUnlxLzZZZ250YnFZdk1YRjh3K0luTmdZSFRtYXhoaFVHVWloVWxhcnVYRlp5QU1ETWxjangrUnhxZU9MNlkrdnFJL2VwZkM0Nm1TRmljaGlBY1dROWlQN1N6THovbG5qSUtnMnN6YU1yNkViaHg4Qk8wQmVoV3huZ2ZnZDdCR01rQ1M3aG9XVkMxQmNCbDJIQm0zb3JUVWJpbFBsa2JHK083ZHIrOG1zRXNxbHhGNCtlNDQ5d2UyWFJOWTZkZXdjd2NGd0VkWVNSa1RXVERoV3UwM25jcFNiWEdOWThTakRJOUMySkxsNjNnOVUrVEV0OERmRHJ5TUNyOFl3a1p3UC9zWU44WFBpanNhalFlR3VxYXYvYlZnUjB4L0d2UGxkOFp5RldNbE96WkxyRks2RUw4QXVsaVFLTUp6V0dQdCtoRDRqYjFWV1lTWjloOXgxbGJLMmFkQUE2dkxXL21rNCtGckVCeXRRUEVBamJIWkNDbXErWnh1Q2ZDYUVQNWZieC83TDNPZFdqTDcrNVpUZEtDSVM4RkRqN1VKUzJ4TkZRLzlIMmNhRE9qYzgwVnFhVmQ5M2krd291MWl6K3p2ekF4NFVxZXdabHVENWFZekswOEF1RDE1dVZPbk9hV3FqaTl3VUx4M1ZFTllWWWhoVGdXSWVhL2RNcVVoeWM5WFBTUTRESFJTWU42cy9DQk02ZGtCMXpyc2w1cURjTWRNbnIzRHVRL3Q2U0VtTGVIazVmeldkMkJLbkRaQjdsZ3FnOVRRV2E5SEZLTnhpbEE4UVJEYTg5ZzlGVHFRejFDRE94bmdwT2hHQldUdmhUR3VuT3lFOVc5T1Y5RFVqNWpmNmR6ckJGelNOVStNWGR2ZG1HR1JFMWY1MEhVRlNaODYvL3FGSHdSOXdBblhCcmRUbHdXQ0Z1clFzMTgrT3dxR2JmbFdEY005N1R5R21PR0xHTTNKQWk0WXN6aGpDN3JoVTkweUVxdkpNa1JJZmxldGJ6c29XMWJCaytLY2lHdmxIRnBXbzZIWXZybHpPYXZrcy96ODZ0V3o0bnpzbTBzTHE1MnRlbnF0RVI1emdMdFpIaDBvM2hrSzZJQS9Nd2VMaHRYY1U5R3BrODhLckdDWVpCY1Nsb0hTNTlWTzJ2ZzAxY3pPbUhYZEVFeEoyc3g0b0FJaktNTUdrLzJhdE11YnF1c2k5MVhXWk5Sb0RuZEFjSGQvdzlKeGVtSTBIV0Z4WWxGaGNaQnRIaDRMWVhaZjlpN0FzUzY1MWZxaVJlQVhSRW5LQTI5Uks2Sk1yUWZ5WTdjM0M0Wk9XRkpGbCtmc0RTSXE1Z3NuaWNUWHY4T0Z0U3A0dzU5a2VseHFCNno1MmdJRzRWcmVqZHFYeTdFYTFMLzJxaHJSNEd5ZEkvMFIzWkpLWFQyRnczejV6V05lODNuQ04xMGl1WFlHdi9mVjRkdXRRbVlRL0JQYXprNjNZZW5RYUV5MXhXRWt0R0RBVU01RitQUEh5VWFPWldhUGtsai8vQyswaDM5VURUVTYxUnBjdDE0U0pRSWdqT3MwZ3pTTzBPT1F0RXhtTDcwUUFtenNNL0ovVmQyb3FKeGVsVktWTkVaZzJuTmgxQzRlSGE1V1oxOG9QRDU5amxJeVdnbjZBQ05tL0dPdWtPSFBHdmVtTkxpa3ZvNGR4UnpBVWZtMHM2bDJYQmNTN09KMWxMWlVYc0lldEFUNWgwT1ZhaW1RR1R2eDdueVV6VC9iZDVPcXd0N3N3S2ZTekxkV3MyV0VyUExVblBkckRPUHFwM3VjMllDMzFIVElRRW05bG52MjRiM0hHN0dnMEFMYVJrbTVVR2d4bE9Bako0Y2d6QmdZZDBOVnlPdjh2QWFBdFV1STdMSEsrb2IzaDN5OUE3c2xONnJPR3NNc3hCM21jTmgwZjl2S1F3c1l3VlBGL2ZmMkZ4djR2Yk9RVm9mNkJ4dlhMZ2Y5ZlFZV3doZUlTYWJQWHJrZGQ5Y2I4UWZLRm80VkFkQXhLOE9ESXNNVzB6QXNWcTJaR0k3TllxWTRiTHFwQkNxVG9oU1d5MTMxcVU4QjdGd29wMjlBNi9QMlpvWTVtMTFZamRqeng1VE5XOGZJdkthcVIycCtoMHhKVzBubTRBTURSTndWT1NTK3QrSHBXaEMydHYzZDVlclVDQ3ZHNzVUN0xzREFDV2dUKzVVOVAzZDFVYmRid1pXZm0vZ2xoU0tFR082d2QxamVjci85VVdyWmNSWGpVakJNcFNseTJoUlVyQlVDRlQvSnIwdFRzNVBjREtIbzlSamNaYllZMTh2ZnNLY0dOV2prdWtsK3Vud3BLQzZPRDFxd1JXNzZabklJQkU5bGtFMlZRbzIrbTQxN283MlgvTkc5RWRsM0VEWmpKV3VNOFlucXE1RlV0TndWWDRQMlBkTU1SNE04dDhicGYwWWlreEY2Y0ZVRFlCcU9kT25Id0x1RkpWQ3c3L2VDang5WlVNUjdEdGxyU3RmTXN4QkorVDhFZExMR0dQVEw1a3l2SFRMaGNDRW5aWEFpSWZnaEYzQnF4a3FYN0xaWllvem9ySjQxdkdWdmdiNE5PUkVRVFlORGRDRy9Zb1Y5eXVHdnhzNE02aXVBMmYvbFFPUm82WlpPY0FxdVViblFxaXJRRG5NcTZKb05xajFrYkI5ZDNNK3BMYmE2anFZV2U3aWxPWHpvN3lBbVVhcStRQ1ZiWHpMRmxzK21qMTd6YXFUZ0VQUTRhaUl1VUV5d0tlbGV0WXhaNnMwWGprRzJSM0tld29WaTdOWDR6bnlLTXgrSWwxcTMrMy9UTGJ1L0lMaTNNaVZiUjZBRjZ5M0FTOFVBaE5yL1JZcWx6Y1VzcXpScy9nVllNdng2OTc2d1R6SVZsWmhKSWROb0NYR3Joa3lBekNpMklLV0g5cUNWRkM4eTQwZTFCcnlBWUpvamxGY0Z4OGdwdlhxekRDNFExT0JuRnVZdW1BWmNUajh0ZGs3RnJDZkFva2tTSzUwQ0pjbjJsWmNtRUgxaHhEOGk2UjRMKzBTQ0xwL01qTHlnSXg5ZEhMdGRaaW1kUm5PMzVYM2h3bkNpb25WT3duVEMxL2Y0OTFXenJZMXdkRGx3dG9rdnpETFhCWmVuQlBGb2o5bmhwU2lBWHpWQTkxdm1OYjdKVGNqcnpmU1lwR2lCTDBjdks1QjZuU29SU2tGd2tWdzZZWWFUbEVkZlp0SHhQWkZUbFJlU1NaVmRGT0FzUkVFdW45UGtaZXpnRnNzN1Fsek5nKy85LzJpQ1E4SzlBcnRpK0tkUGtmcTh6YVVMVldHNmcvU0RwUlpLUGJJcVNSSlZ5ZU9NZHRwSHBsL0JuZlZWRmFZUHl3bzQyd2lpZFovd0svU3EwaExFMnhCZHZEQU4zQ2E1Qy9JVndja1VuckovbzVBUCsrc1VLS0ltUHU1MjV2cER2UWtJeDBxb1RJbW9xRHFSd2MrUWRHTUkzWHZoZlY3RVFIUTdIT0ZjaXhwaUl4RWdOc3hBMDAwa25LTVFVSk1VYWxaZFFvSThFMXBWU3JjSm5VcFcramhTUzRWTFBiOXhKa3dIbnZpcW82WStMb213NDcyYUcrY2hQNzdwQVZTRkIwbEo2cklNeGdTb2taMTk3YzducThoRlUxeGpHcUo4elNwTVJNYzE2cXFuUWk0RlQ3Nzc3cDVsMzFzQzYyUHNjSmpnMDFsUDZZOENuV2JQWXpCWVFscWQ2K3FNUGlUY1B2UjVvcEZERnFnakxYLzgvYkhBSTVDdkY4OWtVRUhoZDBLNU9CaitGMWlyWjlSSWxrYkplZ3ZuVFN3N3NWQW5WQjBUeTc1SlY5T2tHQU10eVFIMXo2eUNiNlp4NEtWcmtRNE1jaEhmRUNsdFdOL1dESHNwVEpCb0R3ZzdjZFc2NWZUTUM5VlJHRDRYTkdnd0xCMTl4SGxLRUZPZ0R4bXJjY1VBY3RJTE1SQWxwY3JzREdQckFZNEUrMXd3VU45dHlXVmtETHh1N0Q0dGkzOFJMSHZtNFNOaWVlcExrVElnS1pzV1BvQmVEaU4rWWNDR28zb0Z1ek14Q2lyUzl3TUcyQ2NBUE9CQ2NiUDMrdDNVTlZySWhPWWRVTVB5K0l1a2t3a29NS2lvV3RHQlpaTkZ6VVpoaG95eGZqUm1Id0dVNXR1Qi9qRUlxL0JsVW0wWjZjWlVmakZ1RDljNXBpeFhBU2NxNGdreU91SEFLc2ZWZ0UxYTdvMUw3SkVKcVR0Y2RORWtkbUZPN3VTMUE5UnpTRnJGRzAwQVE1RVcxTXJrOVl4SGg0WGxNNVRudlpkZnRXK3ZxWmRNeXpMS1JQVGZBUEJwWm9Vb09meE80eStUQlpNS25zYTkrVENscmdDVHdiN2V6eldWU2dYMER5QkVYdy9zQ0tEeXVtcDVlSllyUjQrVkJaaW9ETjdpRzhBZi9iREVVdUUybkpkZEVKTC9yMmxONFZJdzBGajVGMHp0Y3praWZaaGpTcDFwcWl1amdsVmRFQ2xuc2tkZG02Z3VYTnJ0cENQZ0JUWUtoMUVtQXFhNkM3UGRqSUROdWRudE9kUVVmd1NVcE9KN0Y4ZkdlcFU3cjJnQ2FGaVliVC9MVUpSTW5vSWpXZlJBdUtaTDlnaVVZbHpOYi9IK3R2cUp6SWoxdG05N2V6bEN6aXUycnVPaEw1M3Vsc01Nb1lwUG9mYWpwSVZrSTRxQ0NWU0xNU2U4SXdXa0VWMUU4QkFUR1JKZVo1eGN0RWd1TWlPdGtXUThwSUtnaTZFMW5ETWVIcmNXbWRoVllDZEh0T3VIR2dmdU1JNkQ2SlNWbjE3YVNZM3h3QzFOUHY3SEdmdXl1WXlVMGtrQmNNU1JVN2VxRTlYK1hlTFl0MnIycTFKZmtTdXZ5ZWxWWm5XYXg0YXFpSjU1MmVPRk8vVkQyTWY5Rnc5RDFpSm5Ya2I2U1RYS0V1SGVmeW51Q0hXOHpHODdta0FhTjVEZHZIcFRyOU42ZXlDdjhNSmFnMDkwbUxONWFxa0F4LzBra1FpdU1TVkNsbVA0V0ZEMDJqZHl2ZlNtcDkvOFMyRzc3VjBsd2YyU1piTFZzcmRPd1BORG40am5sZ3pnRW4rbWphZms5NmJCMS96c0tYVmZDZ3VBR0l2VmpYNnZtMTBRWS9rVjBjVmx4UTh4UTdwdW1KNXRtTlYyOGhiSkpxMVlrZmNJUkZXdXU4OXQxWFgxQXdybUFDcWpQZ3dLRWpUd0xLWEpkemllRU1QZituNjZZRlY1akNoenRPdCtjKzE1dEJmcDRHNkFpRU1UMFFQVWVjU21RbXY4TjhKQmwzZ3dZdXEvbHoySFJaazQydzdaTk1janR4MHhJZWFSY3o4aHkxUmx1MGwzN1dsWEdTMFlySU03b0w3cngya2NGOTlBTG1YRXAwODZVeGp4dGxmTmJsZVVnQ0M3Sk8xa05mVVh6R3FKT00zWk5LREJjMzkrSXJJRXRwWkdtdUlIMXltNUM1U2VxSFljckd3clJROVlndkV5V29KQ0pzdXFwd245Um1vNnVCV2VoMG94RTFkQUQxcVl6eGdFRWhnS1RFNlM5enlCSGFmaGs3QUlidlJocXFOYWNUYW5DcDExeXBxS3ZseVV6YWRYTUxVcmhEZWkwZkgvOW1NalJKbFc0V2RCZ3VuT0dsM2lxWFVaeTRLRXpsMDMrVEZBOVVZaExqa2w1cU5FYkp4b3VLZ0oyYkpkTG9xMHZ0VmxUWS9PdEFOczRnTXdZRVhNNW0yR1NOdGhocVFabkpuUlowVEJqbUt3Wm1ET3FPc1h2NnE4TDN6U0ZuSFZkcUk4UmpWL3NhRTNQa1dLaUp3TmJuNkVxVjE2NzVJYnIrT0UrUkNXY29mUVMwMlU0YUNQWUs1T21EVDNkOTVDS3JBUEk2Wmc0OGJadmdIaUptV0libm5rbmRzN3ViNXVBdGhBaHZlZmlLeHgyYnVJb1M0d3M1RUh1ZGMrSmQ2ZG5QVDFUT1htdmR5NXNpRm1RSlNWd0hQcVA0NlFnVGp1M2lBbW53c09Cb09IdkZiazB1TDl1TGV5WHRXNEFjdEJkTEdacm0vaUpXU0UrZXA5NTVEMy9ZeUpFTXhVL2xPVFd4bTZVQmk2U0h4dnFYRDJlY040a1RUSk9SOFFoeEdFTWcrRGtpSndzbHBoeHY3TUVmUllzejNZVTZPRGpaaGdHZmlZc1QyZHRiTGVOTjRNYTVOcndnZVU1ckVHRjR0dXR4Y3BJR05pcFBaOXBVdE5xUzVWVW8zY0lQVndqbm1zdjl2OWg1OGIxSWlqZUNOQUo1M3JkLzF6K2hwN2t3Q3ZVVXVDaDJ5UU9RTGhZQjBjbDNQS0hjTWR5aGJzOTZnbEtrMTU1UXZOTk5ZWklTM0JLcnlBWmtLaDcyVlMxa2tnN1VLUjV2cWUxc21pMms4M2ZkaVplVitWN2lMYnJGMkUwdkJtejNKazNNRVBKOXlUL0F0YzFocFdNY09ySzNVMzFDMSs2Vk1HQzlRKzYybGtEY3l5ZldSL1MxNTlrSU5qSkFVNUphMmc5TSsxZWJoQU9LcmV2Z0tTa2hYcVdPTXpWVzArMzM5eTZSemF3bXlKRE01M2pMM0d3U3pFV0Z1b3dnMDc2UTdQZnFaS1puMzlFWVg0cUx2RlB0UVB4SmE2SnZYSzM5dXd0NHVuOVBvSjk2QTYvcTJTUzFHZWs0ZjBxWXpmbHo0SDUwYTBkK2t0bjRnZmVkV0dIdWVuTDRPK1NKSUVGNUR4ZVE1VVY4WjRoaE03NldMK2gwdnNYeGptYlZsRm0xTnltcHBjMHhQNFRuTFA2QnY1T0RNTzBEeGk5bkM3Zk45Z21kclp2QkFSZXJZN3g4SEg0SUIyWWttL2lUQTkxaFdMOEpVYlhLMnhTWXZxMnhWcWg1RXhKYmU5UzU4RUxla0NFaEFkeGt3NXNNR25JY1BOM1IyTFhoWi84RlF1WEd1ek9PcUtDY001UDNKOS9XSWFtZ3VlOUQ1Q3V2dlVybEhPRUUreWhVaW94L2xqaXIxZUpJWkJjNXovS2RwR1ZJVm52SGFyNVhTdzhOdnNlaEJvZXh3ZGw1ZThjZWdwc1NHZE5JUS9SK1M1am5NY3hTa0tGOUt2bS9CNVZ5elBDYmNtZ1NvRGRNMTU0TExCNDhGVG8rd05BcGVlTDNlcm12WjI3SGxmVHVqVVdEU3BtekhOWkpSaVRodCtFZDZiUjNScm42L2Z0WGRUTXl5YzhINWx0S1MwVkMvTkswaVFuRm5EcFBjWjhoMmNlZU1GMG9Tc2MraEc4ZmdrVFhxdkFaK2NJTE9TbnJXYktlbnFuZW1BSHU5MzgyajdPSWpDUmJtb3p4MFZqTW8way95eFp1YThGeTlHWHBSQms4SU81TEUzQml1Wmppc1BtNWVBdUh4T0F4VC9qN3BQS1V0eWljNkltdFlwRFVTR0xqQ0htVGdTaUxSRE5oN3JtZDdHSjBHOGI2U0VRWG9vRm5uY0F5SjE2bVlpVm1yS0xod2JGK2d4T0FTc0VLNFJhc3JJeFFaL21aTTNqVWtLR25jODkzS0VZNnBSMDhSRGc1OXpPMkx1M0Y5Rlh3Q3pZcHhVamx6NU03RXFiSXlieURxemlNRGc0TWltMlFybDhwOVRydDdxQVNkMG94T083d1BlVkpHdFAwR3FwdzVvMDEvMDZoajZJeGdhOTEwZzQveTdRczVpczZ0dTZZaHN3eGhqeVpTV0F5aUUzc1ZoNk02bitWQTltTlp0dkNpLzVYaHk4U3NKUnd1cUkwWGg3bUVnU0dNN0xLMjZSNkZNWVptTnFiUWY5OWZDc0t6aVhCZ2VHdi9HQUNJQVo4Tzl1WTI0a2llbXBldVk3Q2ZkbDZpc201cXVaNDBoRkorblNwQ0N2bEQ1MUphK0dKbEpQQ0VOL3FpU0tJVlJaNjh0aWhvcmgrS0pLaE9lSTNqNU9Ya285Z3hRYy8xMmFieXVBOG9BNFZBMDlFcS9FTHMvVUI5bWVtS3lHY1J5cTVmZGlNaytVSGJtZlRkVVJQajM4cWxTdWtOLytralRpV2x3UmpheEsyb3ZWcm1VeG5RK1FpUFlCODQ3dHhQZWJUMzRaU05YekJaM3FOTTBqdUdkUGErUWxsOGZsWHRLZEdLZlhGQnphMEZZV2pORVE4RFdJK3pTU1ExV1VaaU1QejYraktaT2M5aVI5bDBBREpzZ21KUDNiemxwaGxpTXlpM0d2SjNKTUlibHdnM2VTOXhwcXM2MFBhRTJzMWhNWG03NlhFZDZuVFY0enIyMkdabitydjRtZ0dBVGREQmtuNkxic3Y5NzNUaGJ5R2lqMXlySHFjOFA5TlRCbWJkN3dmYUNCUFF0K2w3VzU0NUtsNDFSc3E0MXR3RTYvYUsreHh4a09FUTZON0N6QndYT3ZZUjR1ZnVMNkVNeEZBR2ZZWGV1Z2k1WnptMXc1NUZLZzQvdnpSZE5EZE56WEhZaFI4STh2cUZTUWc4RGUwSnhsbkU5WEcvd2FoaDdLQk00ZTBxL2xKa3lPa05odFREcWJJYnd1Y0JkV1BGQVlPZ0Z4UEtTM2Fmem5FaGp0SStQR2JVKzhpYjdVZW9pc2g5VE5WQkluTkQvY3VwdTcyUFk5SlpZenkzcjZTS1lJbC8rQjVtTzllYzZVSTk5QVlBQ3VjQWdJcjRRQzRaMHFiU1BIOTVkS3BQS2tHemVBYmxkV0x5RmwwcVllUmVqdlZhS3Ewc1NCRmZMUy9jQzhZRlVzRmtaZDU3NTZkZTAzS0FDekdvNmpiTWFhaXJzR2FOYnUyRzVhV0NkZmhzT2h5NWpCanFDaXZiNCt5Q1lmVmFySEFVRnNPZ0t2WVlIcEJnbStJanJqRFZROU80bGUwU0VnaFFQdHdudEpZdmZPeHJkM3dKSm41dXlkbEVwTkZRVzhudFVJTndsWjdkT1ZjcUh2ZnZ0S2hOZmZqTEUwaE9WRHZJT2dZcEpCZi9SY01FVlN1M1RuTnVJVGRiSko3NEtiM1NzQ1JlMFlQVWt0bTVnZUF0ZjJKaUZhNUZiSDJ6M1dqYmZLV2NKbEZmMU9IOXhxa3BHbjdBUm51VjNGd1ZEd3JzZTR0citNQzN6Y1hvUlBiRDdBZGEyVE9jekI3UVZFZGJ0ZC95Vlh1M3M3RDk5N0FzTGwvZmxZSGZnRnhkVnQ2V0ZBY0tDQlFrVmNveUNYWHNSNE05MXdSc01wTTY4Vnp3VFVHS2VSM1FBZEgrUXhoNGdrV2d0VGhzLy8yUUFCQUJvQVFBQUJUd0JBQUE4QkJrOENBQUFBQUFGZUFhdEFBQUlBQ1FJQkFRb0NBQU1BR1ZSb2FYTWdhWE1nYjJZZ1JtbHVaMlZ5SUNnMktRPT08L0JEQj4KICAgIDwvQklSPgogICAgPEJJUj4KICAgICAgICA8VmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I-MTwvTWlub3I-CiAgICAgICAgPC9WZXJzaW9uPgogICAgICAgIDxDQkVGRlZlcnNpb24-CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvQ0JFRkZWZXJzaW9uPgogICAgICAgIDxCSVJJbmZvPgogICAgICAgICAgICA8SW50ZWdyaXR5PmZhbHNlPC9JbnRlZ3JpdHk-CiAgICAgICAgPC9CSVJJbmZvPgogICAgICAgIDxCREJJbmZvPgogICAgICAgICAgICA8Rm9ybWF0PgogICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5Nb3NpcDwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgPFR5cGU-NzwvVHlwZT4KICAgICAgICAgICAgPC9Gb3JtYXQ-CiAgICAgICAgICAgIDxDcmVhdGlvbkRhdGU-MjAyMC0wMS0wN1QwMjozODo1Mi42NzFaPC9DcmVhdGlvbkRhdGU-CiAgICAgICAgICAgIDxUeXBlPkZpbmdlcjwvVHlwZT4KICAgICAgICAgICAgPFN1YnR5cGU-UmlnaHQgVGh1bWI8L1N1YnR5cGU-CiAgICAgICAgICAgIDxMZXZlbD5SYXc8L0xldmVsPgogICAgICAgICAgICA8UHVycG9zZT5FbnJvbGw8L1B1cnBvc2U-CiAgICAgICAgICAgIDxRdWFsaXR5PgogICAgICAgICAgICAgICAgPEFsZ29yaXRobT4KICAgICAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPkhNQUM8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5TSEEtMjU2PC9UeXBlPgogICAgICAgICAgICAgICAgPC9BbGdvcml0aG0-CiAgICAgICAgICAgICAgICA8U2NvcmU-Njk8L1Njb3JlPgogICAgICAgICAgICA8L1F1YWxpdHk-CiAgICAgICAgPC9CREJJbmZvPgogICAgICAgIDxCREI-UmtsU0FEQXlNQUFBQWd2TUFBRUJBUUFDQzd3SDVnd2NEQjhUQXg4QUFBQUFBQUZEQUVBQUR3SUFRQUlBUUFJQkFBRUI5QUgwQWZRQjlBZ0ZIUUZsQWZnQUFndExBQUFBREdwUUlDQU5Db2NLQUFBQUZHWjBlWEJxY0RJZ0FBQUFBR3B3TWlBQUFBQkhhbkF5YUFBQUFCWnBhR1J5QUFBQitBQUFBV1VBQVFjSEFBQUFBQUFQWTI5c2NnRUFBQUFBQUJFQUFBQWFjbVZ6SUFBQUFCSnlaWE5qbWNvQUFabktBQUVBQUFBQUFBQnFjREpqLzAvL1VRQXBBQUFBQUFGbEFBQUIrQUFBQUFBQUFBQUFBQUFCWlFBQUFmZ0FBQUFBQUFBQUFBQUJCd0VCLzJRQUl3QUJRM0psWVhSdmNqb2dTbUZ6VUdWeUlGWmxjbk5wYjI0Z01TNDVNREF1TWY5a0FCQUFBVVZ1WTBsRU9rZFNRbFF3TWY5U0FBd0FBZ0FKQUFVRUJBQUIvMXdBRTBCQVNFaFFTRWhRU0VoUVNFaFFTRWhRLzVBQUNnQUFBQUlLVXdBQi81UGZFK0FKUVRSZWxQQkUvcXRaTVMyM2dkK3NhK01nSlJ0MnhsbExOckhpRHJwTVYxMkNRM01scDVWTTdvbFpTejBOSm9KRTBDbWVzQXA1NGFOdDVneFZWNERhWUFJd1A2TmZ0QjVPZmRORXoyUWpJbm1BRDRLQWdQRGcvck9tdXZPT3BPZkdUTFdVOXZKcnp1djluYmVOSVVmamtrQ3lVb0R3MEVtVzI2SFhROVZqTmJGVkJQOEVlK0ZNbGx2U1gwQTRId2R1L0FaQVZkdUZhcFRYVHZJeldvYXlGLzdGcHkyNURCOXZ6aEhDbktDcFZhREVuWWhOVjh5UEV1WkRMZm9OMEdpOC9sZ0hEeWVSMXNDT29WRHVyRjdSNXp2Qm9vczA5USsrUEc5VjIrNWNEck1xdUJPQXgxcU9zRE9LQ1Y4NVpYMzZER1RwMFlnTmo4aWwxWlZHUnM1R25TVjFoZTMxbDM2WXkybXNrdmNuT0UyenZhd2RUQWJqaEt1eGxwQUFwcGt5U3R6SHA0VmRURU5zblNpajljamE5c0FxY2VUWG9FSzZSZkdOVVZjM0ZvY3dtWm9Kc1NDdnVra3Uyc3AvZ0dUb0VuSlQ2bzlMZ2V4YWlUTTBwQ3hyRDhKQ2NNang0Q1ZvOU1SbGwycWpPbUpGcGtIVElUNjNraHYxNE5wcGhhQ3NqVm5jVThuaVdKZ1dTZ2NiKzVNSlkzTFIzOWJQWTNSaW8zdUM2SVpoVitKakRZZGVLZm8ybGU4WlAxYlp4VVVBd2g2SmF3KzhPa3VxNHp5VnRlbEJpL1h6dXZQOFpLK01vZk9hZ0lQOERVZThSblZXS0s3ejBvNE5oK1M0QUdXdndyTzJndk5sbVdadlJtUW1UaEJSKzZGdWdWQStNYmsySisyQzVhMGJlNjZCeGZueENGNlJtNXh3bnUrQy90SHYvRjIxSFV1L1lRbHd1cElHTzhMNWVtSWZFT2hnT2hydm1SZGt4bzVGRXI4NnduMTNRRkJzV3g0cVg2Qzl6K2ZXMW53c3pMRlRzQmVwRkFhaXJwdmxCUUZ6UUdUcFEwaXY3eVRFSDVFNGRpSEc0UFgxQ1pqaG1vSS8zVjRCbDhpalJ6UE1ucmxvd3Zzc0tkcFhkT1RVUThtcVpJVE44OGl4QThtREJOL1E1d2ZZaHMzdXZ5UEZUK2h0RVJBOERhc1VKVXVDRklaSHZxNHhtZ2VQcG1TMFpsa1dsUW5NbE1HZTVhUUFqdDBpbU02NlVpM3RhbjEwV3dhVDNrbzMrL1MvcHI4emdEK2sySFdxOERzQnJIS3hsM0lnYm5GdlhTRUFUMzdzQTZwTjNUVWhGOWFGTWgwSUxjSHZsVHF0aHd0Q1FJRE8yZW9kbzVOdFBzc0NhdGNPSG03ZDZzRWp2RTBlc2Jib1VMT3NZOVNIYVVEUjNBbG5abjZodEdPeTNZalk5aVpGLzFLTGx5aDVCVm8xQlRqY09iY3VpWnZVaUIxRG80clBrYjhQUXR5VGVCc3NLM2p1SzhZNWh6Zm41eWpIRzcybUpsSHpnRUoxb2d2T0Nzd3cvUk95UkhhWDVMdEZyN0JOUHVtTGxjRG9CaElCSXhXZEU5MytoTjFzaFlYdGFzSDdPcVlnTUlTbjRPamF0a0xSeEdYakZveWVCcmdGWXdjd3dORDUyZmdxdm5yZnNOZ2FRL05TNVlNUUFGZmg2RlptT1pEMDVIWWl3OVZrd3Ixa2NrYVBQeTJTZnUzUDdDc2dCdGErQ2FTTWI1VW1Tand5SUEwTXJNa1QyQ0kxMXNYdjZjVEpHNmhZUk1jRXFkUXFsNkp4RTgwN2NPcmZiMDFJWHhnV1FsUGo2V3pkR2FZbEcxYjVGRUxENGV5aW9VNjFENmVDTGE3MVZHNENqb0k3VXNZMFRXQTl6YjNNRlF5dmVnS0cyR0N2R3A0ZTVCQ2k1Vkl5UlJzaUNuSGo2eUYwMDZlUmZDNDJUcTNEdnBXbTk4RmREbzV2eWVxMGh0OCtqTER3RGZOeFJCREg3ZG13SUU4SWNYMno5K29QbHFqS3hrVURPOVY1M3labGZWRDc2WlBBZnNQc0JlL2VsaFAwOWZyVXRqZjF2N01seC9pcTlhWWE0a0RnMTh5d05EZnc1Q1FOcEMyY2g3NDVCRE5nMStINFRKb2FyRk9rMmt3dEM4c3UxR3FHNHVJVEg4WXNCNUVBZ0VkcUluY0Y2V2ptUVJTY1ptQXQrMmpIcEwzN1NvajNNcG9sYWxMMTRsQXNyQnpUY0p6TUMrOTQ0bjltQVhPc3pLZTRBWW1pUDRONzBYazlQTkdUUUNnUDRIZm03SktDT1pFaEpxaFoyU0RXdkdRN0R5TmlEV3plS1JsQWUyOTdPQ0NWc2x3dGlDZnY1SzBoSFlxMUp3cHZsN25zcjVkbmZYTjQvalZYUGIvRFdFV0lBQnpMSzVGSU54bktDZ2hPa0ZxNDBiZEpTeEVWNW56T3F2SnFTeTNiaXEvcnJHWC9aL2pRUy8wYXpxYkRnSEwwcUVSVkxuM3hlTFk0ZCsvZ3pMWmtEdm5JOVZOZEFiQ2l5cExBWlc2STNDNm80c25Ybk1qUytURUVxN2M2L01ZcjVUQi9RNlJBWUdHM2ZUUnBSUjVZcFBjRjdGK1h0c0k1QmQvWEVCNzUxdjdlYjFkeTJ2ckF5dE8yZXJHdmFjcTRvY2xMZnI0QmhLdmRwRDlEYUdtS0p2SWFrREV1ZUErVnR1QmpGNTNHSm5YejBrdHUyYnJsbkowOWZNb2tLSmZzY2hrZHE0M0xWajNFU2RxUE96cFpORWM1TGlweTErVTBsWG9YVnRGMkJVdm9temlUZEZzTVVBR3NnK3owRkpIWi9zU1BRRXU1YXk2MVV0Y0I4SGptNnFuMFR1RWxKb29KNzRvK1JaZkJjbXRzY05wSkJoMFdndzVQbHhiYVFPdWhYSEFiUHNZWEpVbnY2UU5JOERFbnpGZ0RNaDBYRTA0WnZSbHpKV2JUTnVocktIeGhLTnBZUzFNaEdyc3FUbUxZN1FSRmEzOFpKQlpsd29pWTZlQllRQ1lzVGlBbEVlbTV3em1ncDV3V0ZaS1BuOG9ZNDBRT3B2SzBITlJxcjdMMXBuTkp4U3VIZEhqVDBFK1VZR1BlUUUyYm0vNFFGQzlXSFVIN21NR2ErQmhIeHlXakJjdUtteUNTU2FjdEFQQWdrQ1U0Z25LbDFTNjlXSk9JMkgxUkozTGxHNlN6Y0FFN284Q2pEYXRSWGhDSElhY3BSUVRHeXRFdFl5NzBydmVqWWVFSnNuS0JEcnR6dnF2bmlRWS80ZVUwSU5pY1FEc05vUEtwYUVka3BULzlROGFJaTFuT0hxd3pjTVhOaCtsb21BQzNIcnpVSGhobUNlRWY4R3Fsd0IrRkZ3YmdvS1dXTklGZWZLaUZIVnFWUzFRWmRnQXU3cHNpQWs0Nmg3em9aQnQrdXU4R3F1T2ZERFMvazFPZkVtbHdzL2xTRTJmYVd2MmpENTVFazZ6ZzJ0MXNPRlVRQWFJWVdlL01xOUJuakhqa2taa0l5VnZuZWZrOTFvK1FVUm40cEt0azFNMk5CejRGcHRGN1ZJRkFVRDRVRjJCU25zb0tFeElZQVIwRU1LNjQvSEc4OW5OeW9mWTlBazJsUEthU1NubGlkWis2ZVR5OVhlUWhqUDl6QVJzWGExNVkzSzUwcnlzZ0d2WjlwQTZod3Q3SGFxNGwycFVrNmswaXhLVm1qR1NQTkhkT2dMVE9GdStPV091azhST25CcUNFRmw5amlCUHBaZWF6eXpPQ2lLU0pXUjBleUJzbHRWcDgwNndFWkhOTUUxUWxlWWNRckc0V0JmZ3FjSUhMWHE2ZG9vRWljYkhiVjllTTJFcVFDYXBmT2FzK1BJWWczTmllRno3clNDOE5pRkxJUnhaMVE1UDNWR1N6d3BsTjRITDZJNVBjelVCTEh5OXJqV0pZWnB4TzdxdWlKMEVwK1FGNVNMOS9rK2Y4ZzJINWNTYVNPS01heFYzZi9oN1owZHl3dWR1SmpXOEdNRW5sL29GUXY5bmJKbzRkNm91SEFZK3JRVXFyK3VjbUppWlZlYzdWLzI0WDVPWS91N3FTbVFuQStJUnJES09sRnBtclRCTEhvYTdaM3Z4MklSc1R1MW5LZ1J5OEV6bVhWd1JjZXpUQ1IwdUlNbG9hOUMxOVphWG1QUzJjZkpzbGVjNG9VS2lmemhTWnlqOFN2Q3FtcktGK0RQWlI0T0VvWGRsMC9rK3IyTktNck1oMGJuV05uQVgzQVVCdGdTNnZJU2w1WjNLYU1wL2ZiWm9sOHRrMyt2OXdYeG0yVVpuYVJkQ2RleFBjQS9GN2U4cGlVajRvMmtqN2dJMVhQY2RRZGJGZ01raXBPTE9SUUVQbnRRNGFzYnJqN2lKR09NcmQwQ1lVdnYyZm0ycURaU0lyNmw4aVVQV1NYM3phcERpMmJ4ODFZaEFDbDZwTFVsYUY3QWIrNHI2SklMeVFzYUJzdkFtbUszRXVEeUJiSEwyZVB3eFozZFFTTzZpR3B1VUp3bERlVXM0TGMxR3BENEZ3U3JZWFZBSnZsaXZYeVlBcVM1YTRyWnZSaTVuQnI0TmRVMnRkZmJ3cjlBUWhrMkRvektReXJtYzlSb1dVblcyKzdQSnRITWorbk5JK2lERjJ0Q1ZZM0VWaXEyOTlTaXlFQ3ljeXdMU0VQUWwwTVpiTUN5STdIWWoybzVIZEtab05GZzlLWmVQQkVWWVplV0VmVkh3TWJGTlp1dWRQOWJURmF4RU11Z1VDS0FKdnkzcmtqa3NSNzRkRDc5cTF1aERxRi9VWUtPRStzYUY0Q3R4SkdsWU55eVIzWWZQTHJYcExtRjY4eTc2ZERVb0U2aENPRnQ3WU96bGZHRkVxNkRqNmkrWnphRDNoN1FJT3lUYlJ3Si92RTdHV1Z6V0lVWExvZC9Ta2wvVHNXWjBJM1RzaHVkaFc3b1hVMks3QjlqaEtrNmVVd1ZSUFBFTkxiV1VaclBrWnZmYUZHclVsVHNtaEs2Sks2U1cxUmpxTlY4MUprVXZLbU9MZHQ3bFlrTDF3OC9zUGt1a2tmVGZVa28rVUJCKy8vbGpRR1NhaEtkR3hUUHBDK3E2NXppWFl0dWttOXZCM3RCWHhHWXEyOWo2ekl1WGErTHUxTk1YR0ErR3Z1L0Y5cTR4QWhoZzlQVU1uRnMrcWJLTUU2WHR4MFp4bElBek5nYVlmbSszbERIY2xTaXR4OEpBaTdMUk1YM04vbVJqcmlOSUp2OUFGOXQzMFU4MTFVWC9PQTJPd090Q24vdXVUd3RJOWdSRU4rcVdYRStYUjdaeXBSbkNTUWlXY0FKbWNMWmgveVp1cGhJNDA0TE94SGdQWnZWYVdXNkxPSXZHeThzYnkwRVdUZ2V0WlMzdkhvc3AyYndsSWtsQktMZGQzNGhLMDFpRHlPSDJ0WGlIVjlTa3ZqTlEzaTFpVVpuMlJQYzJsOXBMMElLeStRRlI2MjVtTTZ3MjBWajZOQ3VoZGNnbzI3NUxBTU9WSmlzNE90OWt6WUxFc2NScncvYUJ5LzJTTERydlVHK2RGbjZGcG9SczhyR1h6MnYzZ3EvNnl2ZFRkV1dMQVNDMStjMUVuZDFBMGtqc2dZTEcyZUo2Uit5WVNGVUFBZDV3bi93VmdCayt6M3g0ZXZQOGE3bUx5bU9NL3NleWJtbzlKZDkvRnRWQnN1aEZ0RzhVclVUOFU2eTVXVEVENW1sLy9aeEVqY0NNUGxnb0lWdkh3NWNlVGthTEFhdmpocERmOWJabUFxMFdab0luZFB5SnB2Z09TeC83UC9scGVNZ3FlT0Jmemg3ZEgyYkU1TFh3Q1h2YUllR0ZjdXB6d2tRaklaOG1lbXRHdU1BRmJzYmV0SlRpQVNCZHpHZk1kRUlQeUc5YlFqR2xjck9rYk5kVHlMRW4zQWRoQnRGWDVmY3M4a2FYU1BGeWpCMHRyK05rbjZkZCtoeU5VS2ZCZk9WOFZsRWM4enBKaW0yTUcvSVNjc1BPTmZKTTFDaFZVYkRUZXY0bHRSYU9sMEJNU25mODdKWGZ5cGRhbk1rWUtZdFdNVGpQMThxL3NQbFVBam1nc1pqZzk4bCt3VUI0eFZObzVOaDBXUy9wTGp5VjNSYzFyUGcrOFdENzd5bGxJNCt2S0xONjdDQlJQdDdUcGpRZ2JwYXdEZVZVK0NvNVk5cXVpZGpwZ1UrcXk5L0V3Tk9XT2E2YkZLMW5uc2QvSjhMSEpYRXlpWXlRa0U4L1Fmb3l1QVpuM09iMTd6N0VUTmNBc3U4aExGd29mdEVVOGdqZThlSEQ2NlBHbE9DZnI2NUNtdENSc1VNVlBjOTg4UWVJWEVmVW8rc2YwT2JhQjRNQXNlby8rRHQ1OGpXWUYrTEpBMUlvSHRXZWgyR0d0K3JydVdiQTNGRTdLOE13eldvVFVMckZnWXJwRWs0UmdOeWJiekpxQnpudzAxOStTU3ZQQ1o5aDFpRmxJdkc0ZXJnZFoxY0ZTRm94TlRocVVCa2Mxd2h5M2liK0FZV2R0UW1ueWp4MkNQMEFyYi9KMkJqWHlTNzVYbko5TVh1V2pyZnV4RzhwVlUwQVVQM1g4dG1EWmtsMlIvdzRmZHRmN1lQUHhJdGtCVmExOFBCY1VaaGYzOXl1M25oR2hzN2RVMFNPZm50ak91RXVjVjhCM2praDhEUEpWQk4veFlGbFVGMm1mbllpZWtLT3JMNkN5VndDYlhnU3pYMXVKWjdSVGxjb3RHSjVkK2xaZ3RQVkd6ZmhlSWtEekEyako5RmxPSXVocE1TcGgvd24rTkwyWS9FTFk2TXR6M3VwQzV3U2RrVVFwdDl0SCtNQ0pOeGowNVMxVFBHWXhtcSt0czVKUnBxZVZBdDAzTUt4ZUhyOWZrdG03UitRVU5idGtSbVpXeXg1QWtyZUN4S2lGb0o3ZDNqK0g5eDQvUVIrL2NyQTlEcXRySUpJZ0NsNEJ4bk1BODhxY2VpRmxvWThWZFBzSGVzTExmVUwzWWYzNUlVK25EQSt6UmxWZGhMblRtQ1dySkRoejVTS2F1SEtldzFVdnFFOGp2NVl0b25LUlppU0ZoQ1RDUzNtMGhqdWxyWk80VGxYMk1idTZEUDExZnBZSmhUSDlnOUFFeFVOUkJlaGwwWmNuaTFWd1RDd2cvdDRwa3ZsSUxnbmNwWk5UMy84aWtJV1FiR2xraWZibzZwcXRGdzNnNGV1Q3FBS2NjUlA0VXlDK29DVEV0NFE3RXpYT0NyaGlFZXVKUlhkSzl6SnBCTzl6WFRFcHNreXJibFBQc053aTN5MjIvWVN1Q0c3UEZvN01RcllKS1JicGRXSWl1SGYvTkRwSGRVbjZrV0hROG5PbTNxb1lTdGFNb290YTZ2Y01LNjFLNzBlKzFWT0pjaFlWMjNkSTNaUGdRT2llVWVWZThmcUJJd3lhWnM3TXRvdGwwbGt6Z0NGUk5DODQ1VzZqaWtCaFoyOWliQXg3RlVXSnpxZzVCS2JrSDNkcG9vU3JhMFZ6Z2dKMlc4N1p4UXpBVUVsRkxRZllPcmw0NkJnWUxPR0E4RTB1L3prbWRrcGplZyt1MnIwL091QzM4MGY4d1hSYXBZNVVqcWNrUDJPRW9uTGoyaGFkZXRRYlNDaC94ZzhrOWhlcU5aZmFyTUFwY2dIVnpCK0JxK1BVa1l1VUhDdTB0a0s4bjRVdzVrNGhlRFU1RG9Sa3RiQ3B0aURIMGhSa1pBdXpueThZclFKd09PUk44aGNYQnIwQUtIUVRpNytOdS9KMUc5N2hEWk0wbk9WT0JXVmN0OFNYUkQ1SHJMektGTjFxbm5OOEZwZHBxN3BxMXZ4NnRVUEFJdVkwbXZ6UUFyRU1oUUI3aVd6K1N1TmlTTTN4SGxKUkV3UDlYOU95U2pVaTB4Z2h6Unl4SDAwRmtvT08vd1h2UHNnbWRMNmJpRXBYYzl1Z0hvSFhRS1JQMjVYditzZjEvRzNtd1FkUHFPejV6eUJ4YVltZkZhUFhaYVRNMW9xcGt4cFRuZnhNbWk1OEtidzI3Rk1RQ09aSjZPVEJ3alR2Z2lnWStTM2NEb0hvUmdjSy9hTVhzN2tCQVo1MXl0aG12bFdwbjc5VDhVOHdrenVGUS9mS25vUkhrd05waHp1RVA2Y0lXWVlZYnRiUlNpR0d1SlpFd1J3Z0xqTzdTVGJ2b2xDbUpDdTNNZUhjOVRTYnpMS2JhY3h0UC9MaEVlZU5VTWVzQnpDNGlzYkUyR2JUajRzVzZRZ05UNEMvdGIxc2FLTkdWa0w0QnhYeitFYWpTVktHY3NvT1RyNld4bTFOcVlEbWpMRVZwV1ZTVTZyTEVndFR6amZCbnh6aUcwd1lpWWErN0NmYkFEUnlmUDhlNUVEMU1EdnZTMWEyTHArQkwyV0lDbXA3Z25FZllnZzBPWFYzMGF3cEs3MVYzUUx3a09IbkVaa1VVRER3VXlrc24xVEExemo0dXNhaDYydzhWT1JFU1Jqb0J2MWxZZnI1RUd2MlVNV0JaWHh4SW50bVV6NENXQmUyTi9BbWRtdVQ5NllHSk52b2NDM1o5aE13WjFRcnhMWUlqUEdSWHdEaTRybW5nSExjUzAvL1l0Tys2MjNMWEZSQzRQZWRYNnhnU2ZUTjRUUjF6aUhlbmFMcGlmRFlSZHJrZTVQNm85bmttV3dzRUV3YVh0SmE2R0lEZ08yZWdkK2cxblpmcnFKK3liaStxY3JEUHFUS25ZRUJQMGZLRU9wLzB6UjM4WC96eVB1bldaVC9kcW0rRjRmcGJVbUt5cUFvU1pCVlJGVTRGSFpReVZJYnM5UXhVQnp4dElkWE1zdThDdUpkbERTbTBqdStrUmZqTXhzZHM4eE9nd2tTOTdZWHdUV2x5OVhBVk8reXlqR3JRanJ1QitqS2N2VlVxakE2bXJ0a1VvSE5uN25zTjViTjJERW0wMm5LeG9PQkJHT0lGeDRsbTc5eTJxOUxKamxTOXhaQWwvNC9pZjhiRk9UMm1DOGNFeHRrOWh4S2xaNG1Bd3pGejJzZTdvc0dGbjFLSUtjd3pKaDRUaUduaU5XQ2NBSllIMlA0VVhHRUZxVTlYVldLN2liV3N5enZ6YmtIZzlpaE9KazlEejB5Qm5iWVNabXJESm80MWVlSnV6d3lUeFRIYnlGQUY4M0FVU0ZuclFHcjJCTHNydVREbk5zeUZOVnZOR3pRRmFyOTBEbDVJZXNuSzY5S0d5dHM1RHdqWGtOMm1ybUZ3SDBBNndGUkhoWVM3WUtUQjdlMzJMQzZ1eEJrWW5peUNyTS9UeWgyQlpFOXl4RERBZk1Uc2FqS3NkQnZHMDNlTHQzbk5nZnd5YjhNTnl1VXR4TXFrKzdxQ2hWa0I2cWQwem9ISG9PYnIxb0pTZGVPWFZPTy9TNDE5TGpIMUh2Z1Rwd21SWlZmYVhyV3NNbVVBN1pydTBockpVcFNCVUM4ZFFGbUlCdXhNbjRONkJKOGR4cStZUUxHd3lFOG5lNHVML01OOXUzMUo4T0xhZUpLd0V0Ri94Tm5VNStoNzU0NGRQekdZZGpBNzlsaU55ZDU0cnFjTk85MG5lZWNZMXJwK25iR2oybjFQcXFDSGRJamtZU1k1MkMzSW5DdUd5dmFyNTZZdU5XWXRqVXZTV2k0Rmlqd2JMR2VmeDM5WlFmQURrZ3Jpb1BGa29VVEtVZ3Z0YjR1ZFd2QkJKNjJ4NmJ5VGJ4UzRxaEJzdlVPZ01WWHMzbjJKT1RDVlFxZ1hpK21RTys4TkVBV0tOVnQ3OXUrODViUjVlcXBuYlRwYk11V1M0bDAyT2hITmdEck8zZlltTnhQRXBiUUFkZTR0YzhNdGpHSm1NMHMrb3J1Tkd4VHQwUDhSYk1tOHo5M1BEakVKR3RQeVFJZXB6N0k0ZkFnNW1mc0lEbGRHelRqQUl2T2E1eGxBR2NaRzkvdUFqbVppWVBKb3Rmd1lRaVdtMi8rTGJTT0tBZVNaZDIxRUVCQ2VUUnRNaTJuQ0Y3aTQ1bDJEWjkyWDNJdjd0bWM3UUV2YnAwMTlONnNuK25KODNqaUE2akdqYTFSQlRFeEREYWpMQmpDUDJEY21SaTBrVWdNQjVnOGlDNEpEQmprR3J2SEJxS0k5OWsrVmZuekh3R3M0VVZHdWVUU2NISDZwSFZMb1djZzA5d1J5NkxaaGg1dm5tWU1KWThGcEtmTXVNVm5vVW0rOE11VlY2YWxUWC9ibFA0djkwN1VvVjY3dzdpU0pJZElNdURHdlNNMXNKbENIeDlWS2xaL28ybDhsRk1wSWR3YVdRbEViUXZna1plazFjTTdwL2NyM1BLNHBRcjhOcDRVWDhLaDZrcVQvanpqRmRQWHVPOUFKa1YxVTJSNmU5M1VjaklKaFUrT3FKdUpRSFkzUUdvRXFWUVlUaUU1WVhhVjF2a3JSVjRWK2VWTzN0ZWJ4dHlqQVA2Mm90WkdJSllOdWtzcUJ3SWlnQUlUTWIvM1RVVGUzUjVkUXMxeTNoWkdDZ292cnNxblZpVzRXM0RzZFFUL2dQbUM0K0xFZHJzZk1DNzBmOFhNOGdSVUpENXdPVmIxMlkreStSVzgrclQ3NnZleVdUR254U0tvbVF6MVE0NFBVTDF5V3ZlZ0ZDUGh4eVpZMmVxZE1ocUZVZUp5WE9rSjV2cnFrRUk3Y3kwS0JBY3VTRDFQNHJKeGhaY0RGYmlEYmRxMUZMeUdMWWZPTTJMcU50ejVBalJ4U3RwTE9EM3JBODBLYjVNV2VLY25zS2VjdnJlZXg2VGFDTGhxYmk1Z1kwWDEzcEpscUZBbTdvVHlHRndyRGFPV3VLRnhqcHFkMVkwVkh6YVpnWW9xNWo3OGwxYy9BWi9PWnVvem8vQUxWTzl1cGFEL0EzZzdTNzRHREV0UDBoWGhOUHNyVTdla0hSTW5ycmRjcys5WklDcm9DWkNZSE5IaktJWnlRd1gvQ2V0ZVM0a3hGTk8yOXFna05OUFB5Z3lEck5BSXZPeHlQVVdjQjJ5RVppbVkrTUdiS2xEVmRFZXVBb3hZTkFXdjFVaDRZZUNYY1Rnb21ER0t3WW12RzI3YXZVVVkvMlFjU2c5WkgveEpHNUs4eHg4cEcwZFMwWlZsNFJIbmVlVXJGOWo1SEZaTkd3NDNoOUNmZ2QzQ1hYT2ZxTTFOU0h0dmZkNnM2dk5pSEdCVkVCUUI2cTJGYWhaanVmakpJaC93Mi85Y2JWSlpYSXlVa1QvbEpWS1NNeG0vSkFlbVR0by9ib2ljdWlpSW9ld0ZudHN4OEZ3Z1FJcTBPTU83b0o5VmdQeVc5THRvNCtueEJRcmtBNUJNekNmOWJtUW1xc1FHRWdKOVBDeFFqa3JVQW1xUGJiTGg1d2E2Mk14N3hDc1ZnZGtVMVFaUlJXa2g2NmNtWGgrLzRHS2RSdDVlQkZMT0luL1N4S01YeWxidzBCRjFpaVVUaE42ZnRuT1NNeDRPQ1doRVVjMlpWSFYzWUU1TlBaL1ZnWFpQaytGNXcyN2lreVpoVG41RlhVaTgwMHBNRFVIS2pGZTFwNVhUVU5pRkUxQktxUEh5ZG8wR2dqK2haU01jTHBwcWxYMldXUDVzelZyMlFBcktyTm1oMjJ5U3ZPMFNkRWdQdERFbU5PRzRKQ2VmSUJUM0gybVVKTnM0NWZlVTdib2U0OHVNRTMzdzE3blRZWWFONkV3Q1NjbWNBMFBUUHQ2eTVPOFdZRnJvRnVHRlFndC9pYmFwS2VDSXc5OHorS2JkZW5XNEYwTjQ5eVljeXNlVkxOUHZiN2xzZ293dU5CcVJvaHJKNjMzdEswQUl6a2RQR1JWU0hMVUdWZlB2clhpRm5TbnN1QmlCUmhWQnRDR3lCckwyNmE2N09QV2ZZZVl4ZzdXanl3aFlzZWN3ejF6NFlOT1NyTE15cXAzc0lBU2ZodVdLei9wb3ROdC92MWxSeWNYMkx2c2Iva2Y4MUVxamU1d3VVVVhLMnVsb2hyZUJMZkF6Q2F3eFdKWkU1N1BMVGFZV0JSb2FEM2t5aFc4ZUZ6TTVzclFOSlRYYVd1RW1zTXUyMTJLajV3eFFrS081QWgyYlIzZFhEaW1CNS9sQTBrTUxNQUhIWnRvYnFPU1RYNWM3ZjJQam05Z0s3T0FwS2IyS2V3azkySDBjOXN4YktxSjhvMmUwTTZjKzRDQnVsR3d0ZkJVUXZOMHpzNkNMZjZ0Z0k1cmFLTkd0Z2YzekxoRm1iK1owKzlJWmtKSWJtVzk0Z3ZNWE56NFVRWVh6OXBRMEJwbWRNcmVDUkIxRjdOT29Yb2JPdW9ORGo5MStlY1JCWElGR2ZIelRQS1dSeE14dEc4R0c0VHdxUXBubFpENlc0TUNKc0NISVExa2w2SGd6YS9wOUlCOXZUdkFoQXhGbGRHNHJKQnVkMmFNQlJUUGYvcVZ5Zm9yUTcxWVA5UnZGNXZqK2JQbVlLaERlTXlIRXhZSkZLRjhFYm9kczBzWHZoTU94dzFVcndnZmlDR3VIVkxaV243RE04VXMzSGVaYUVOeGJKM3hrQ0lZbS9aR2FBL01kR01scVVYcGlvai9POU80czJ4VDc0SG4zQXdlaEE2UG0rMFlpcDhxd0FOT3lDUno3RjdTNEVPK3JiUkxXOHM2dkR6emlxbjBCYjFkbkVraWFsRGxBMXdOWmxZaDA4U3JSMzJPdFhhMUZHZUNUZVI5Y2x2RU9MNCs1RkFDdEdNbERsNUJIUlpDWXBhRzIyWUoyMEVJWlVrSDdmTkxmcldMK2hZdWJxTzU5Z0x4SythR1dzN1FrVEFOblllYUd3eWhJN0xZc0hYcVNTSlRpSnVFd0pHVHRHSDRiZDJ2YWlyKzdIei9MSXhyTVNpTElXdXZxYVNDc25GNnBIY1MyQTVKZitiTWt3dXJ5blBiVTlNMElpWmY0KzZQYmgzQThMNVgxbFBjSW1GbWFTdjczVGxTVEpTNzV3YzJNazlFcDdNaTdIQlQ5c2tNU1pKWVhya3VQTjR1bVQrWEhXU0tBT2MrZjFKMVdmTjZIVGlqTFN2dGFWbVFxWllIQWZtQ3RrTHkxVUxlblRUbHE1Nm1TK296OXc2bHBxaUFIenl0QnNpais0UzNHSVdGaGhGWittZEJJSmYwb3hFYUVyaCtyTnI4YjQ0Z2ZVK3ErMVRjWGhWSDczeTlkakw3b0JNUHRDRjUwblVmZkduSGpxNC9NQnl2eW9hYk1lZzdrdW9BUEhpV3o0RE1IQWdHSWIvVmRza2lXVTdWcWNpTnowM2tjWkFQQXMxK1Z0dFFQVTlTNXVDMldDb3RiUHJGV2dLRjhsU3lVbzMzZXRsbXVEWjF3MWp5MURKdmNhQW9TY3ZSbUN2NkZ4MENISHgvY1g3VlNqTWJnN1ovODFxbXZSeWpnTzQ4a3c2VW5zb0o2MDdubGUwYnBqV0FwM0F2ZmtMZVpraXJlQ05KdnVmcTJxaWZ2Smxmanl2dWhoajhDZ2UvcGhwSjBVMEYwR004ZmcwVG5td2FMVTZmaVJlcXZiZkdjWlhRNXI0TzRzeHBPK2hHbDFwOEdOeUNLWFoxbndqcVBIRGNSTWM5UUhWVDZTa1k2UEgzMld3ZVFvbnhadVFsUzF4aXY5UEVEd3dvc1pueFZXK3JUd3NNS1VPbEV0Z1QxVUdHM3d5cDloR2pXcUpkQzlRQ3pQYm9oNmY0RlU1bzZCZ1pnR05SS296cnI3YzU0K1ZBRDNkaGczZ3ZBTTdldUl5cXJsS1U0akpuUEVSSkVVNlQzcHNSR0NBSlRYcUk1L2NWNXpjVTNVdkJjN25xc3hWVk9XdFMrNXFqK1U4NXVSVTZ6NlhsaHBIdXpnYVRHbkJ6L1BScFR4RFNjS0ozV041eEdVbklqT1g0RXNjREwwMGVXdkUwVmZDUmFJeG1ZL2NLeTBTZzZFdDZ6ei83MnhFN29MWFdoR1dJVDVJcEg4ZllqRDd0YlFOTlE2ZTNJUHR1cHNUTDZpWlJuYllhOEVDZUxRUE5xM1dlNGg4dk1mMTQzZHcxaEd6Z0t0NHcwNlhpOHhVMENwRUI3YVhyNm80TGVYcy9WRjJMVDliWE53OHNEKzc5QXZWQWRSWldJYkF5eENVZXdCcjlrK2J6NlZvSmpHSzZoOGdLT2NMelJQajErRC9XODZiOU4wMTRpZ0lIMEg5SE9veGVmVXBwWlNGQXJld1pTdjYzM3cxbmx3M2NQZy84eU5QdGMxdzdNNDFEMzVqWUdLNFRwZ0gyUnZNc0VNc3YvYnZLYXlyTFZKcUR4NHdnSXAyOWRjekRqaGpYUHZLamE5QXVYS3kxYVFENzdUeW92ck1qTW9mSDNVa2IxWFlSZVpST3BmSDZpakhLc0ZGTGlrL1FPWkZqbVNHZnF4Y0JWM0Yxb2drVi9wb1luMEFuWi9tV3dPMFNLdkxYeEpySlhocUN0VVVnSWNpZnNRaHhTUjRBVlBwUWJDMVU4T0ZueHlTTHIrSDFYZDBuT09Bc055SklnUnVJaWNsWktnMjRTTXJEd1V4a0NmVW1YWnUwVDdVNHVZM1NBWXZlYXJUN09GeFVqWkdCTEs4cndERWw2WmF0RUc0by9mSDhkR1JBTDVGSnkzT0c2cjFFcHAvejRBT0ZNc1hNOGhsd1ozdHhrYVJnTEFGN1VzMWVhZENJN2NqU1JPRVVWcmIxUm1aTERPTjd2QmFDNlRCVWtwNUR0b241dkNrcjlsYlZGVENKRWd2RzViNmtrN1h5UHlqc29zcHhVNlZTeDRXVEZKdG0zNzdSYmdBS2k0aDFKZzYyOWJvMHZhVXlLWHcwdHVabkllS1F4bXN2elBtV2RJQUFyNmpYTTFWRFQ3WWpIdGM2QzhFMmdPK2VmVnBtWVdBMWFIZnZCTnVtdEtkYlFuUUVYNkh0bE45cHRwWmJkaHJKeFVRN2Y3bldXeWozZ0ZmN0FhLzlwckxSVTI0RE1TTWkycGlNVVlFKzkydFhHTDV6Vm55K1NEUzZ2OXF4azJOUGxSOVhLSzAvV3dqKzVSMWV0UXcvUHh1dkhPd0lWWmV1T0ppTEFrREp5dll0d1ArVXcyTnZQSzNDcUlnQk9XT2IwTUZvMkh0dWJ4OFlCZG9tM2N5ajg3RmJnTXp0VHdoc2NETWxxdWNrZVJrWjJqUXdYcFA0QS9ZV2lNV0xpZkgyb2IyUUdFTVB2ZGJQRnJpbm5wK1Zaa3hLN0dBSWFhOExHYUZaWENDU1V4bWg1WDR5a2VhSVBVSG55WjI2TlZxOW5BOHlGNWNsdWNnN2UyMEd2N1hUVE54QXQrMjBYc2o3Vi94YVhlTGVWK21DckVDaHc3TGliNjM0MWkzcTd4Szhlbmk2ZEVNZmVtWHRMVHl5NENyWnF5dm5GM3haQnlROFdMbVNiN2xaY0FlTGRZcmZwbWhTY3ExWFFTcDQ4YnEveFNPZG8rTTFpRVY3MFJmMnEwTHl1eGZ6ZU9KVzlJVEU3QnF2WTEyVFdYckdtdmNNU0piRWkrS3ZPQVVORXEyQlZZT2R1ejZFaExVY2c2N0RIK21GWFBKbVNEMXErZXBQOCtKdmxWWHo5cXBBb1A1SUNOQkk3ZWxFcDJ5bkFqWDhPdlVZTEwxekc2eFpOUVF3RXlrbitYVmRlTmViNEtBM3lKNXhodTA2WVVUM0pOTmdoZEl5TlM0NW9vVXhUUXU0L2x6RmpzQTAvWDFHV002MG9TMW5kZ0Urb2ttVXQyRGFHdE4xcEFIVVg1QWhkR3ZYZWRwdEMzTlZhUUtBb2RHMjVSTXBTaVlORkhWZEN3ZEptM21yR3lUbkJEZFNwM3lTVGFkMXZPQUdyV1hGZ09ZSndZNUNjei92MllYcVRHKzMvZjBuTjdDUDVyaGNpNnJNUzNFOTJWajZIWXRNdmpHbVYvaTRHUUttaXcrUWF3L1kxcVRXcWJTUGdZdjJHejJOajMva2IrSHIvZlhhVVVqZ0VuSjBOdEdrdE1nVktYSWRVNVJOVnNQNzY1K3E3V1pDNjVBWFdnbGFMUjZlV3Z5NUhqejlHU2pJUFFTbWowNm9ES0dqOExNVHNDZ0JidW5Pei94U0lzMVFtU3F3cWpScGY2b0Q3cnA0V3hlSzNUOW1PU2JGRnpXMktndE0zTW9oWTVMMXFPTmNpTVUrRXRLK3Q1aExvSjNCd0RVK1VoaWEvWTNjTXJHRjNFdWJRY25TV0ZvR0dlRlRBdnNQcktVaGVzbjExbkxER0hJdUJ0bi85bkJKZmxiTk1jeDVxbXJKMzdyS2lnWWJpTVZvWk8wUXpKNG1BSUVOemt6MFVuUERsZi9zZEFwajJwdGdhTWZuckM2Q2hhOEVrUUtxWHpMazFkWUdFc1F0T0hYUEZMYjNFUnNsd3ZWNmhFU0lDTE1RRmlQYUJXS3BnY2ZmSmJxZUh6ZHh0cHlKNEVtYWJZb2djUGxydHJHWndSL0RZemtvU3VWbmlYcXdaN1k1d081Sk1HRWx0V2xVTUFNdFpOMGxuaHh5Z0lzVmZQdktxVDBxKzBsdHJSK3lCY1VVdWo3ZFhERkdFeDZwQ1JxSmV4YTh3NEV0WElxdldOT25WRHVBaitoUVBZZTBEU0hoZ1FLUTNIaENLYUtUWis2MlZVOEVOZ2ZYdENDeDVTdm1CdlU0Rm4vNXhqd3BCR3VBQ0tMbkUrdWszdUpZaVZTd3doemV1NVZyaWNUR0NtcERhUVVLL2p4TklnT3EzSEJLQjIwUWxNZHN4bUY4eTUyaytWVFQzU1pZZDNYaEZBUDgzd1dycmFicnVqa2xFV01qMUZUYkVxb2dMd05HTmNYRm9sajJtR1FOS0ZTdklZYlBPZVNVTzcrY2d6Qk9UWnJaUDdLQmhWUGM1c0Mra1BVMHlqVXpzamNHaWxkNEE3bER6TkFzOEFDZnROK28yckNkaU9zN2lpZUlLbGNqMmY1WWVrNzFBaDBWTjY5RG9rN2htZEFBcE41OGlaRUNtMll5MTJ6NjdnZXIwMlZyck00R01JQm1kd0hZN1A2VkZvOWdVU21hckFQUkVEQWk2aHNtaFlMTWdCR3JsTkNWbFNCZWY2bnhxUzViZHE5U1puak9FNW5YWE9nN3ZaUExPOVY4Zk1LbUVDNDFpTlErNEVSc3V5eml5YzJIS3A1UDVnOEQ5M2tRMGw0YXBFNkJSWDdYM0lsdXFBVnpSaVN0U05DUHhtTkR3b09Hc1ZJdkJRU3orS05sbEtOVFc0WDVidEZUZFJ2OE5uN3ZZQ1diWUtyd082dkRCVk5oaEZjT2FSZWNHVGFQRFdhYUdlaGN1TGhHVmEycDlxamtMNm8vR2d0Nkg0aWVoNGRTc0txWUxOOVQya1V0NmJ6NEhBejJmTXpXUW02djE1NXNmVlo5My9LYWxla21KNEZtVGN3MHNGN2phOVltZTFYWHRnN0VmVHZtQVJESEpXb1JBK05kUnZOWDljU3pUM0tyVkg1bDVMN0dGRmUzRGVRL0kyeVdWZjc4bmF3VXpNdlE4Y3JCYk9CcjVLdlNwZnM0ajhQVWxHVW1PVENQQ1c0a1FWcVpvWmcyN3NaVWN2U2lDMnpQdWhiYWttck8wMkk5cmQ1Qndmc1h1MTRGNXJyMnZnZnhscnF2R200bTVJYURWamhZYzJSTmNtMm01UzNxS0Z1eHZHNzFnd1BCckh5T2x1L1ZuaUJiZ0k1dDBOMUpHU3U5V0d0b2cvQlp1YW5NS2dCeHZUV2tkYW9nd2pIK2hTMGY1NU53U0NQaU43eHUra2V4bEpqZVMzUWxQSk01djh5eUx5Ti9pbGUvWFkwNUxrWlBrTU1NaFFYSUNzZXhwVXE4MDdsRDdZZ1o0dG1CVU5kQjBRTXBTbXA3L0JLRVAvMlpOcGI4Z2ZTMUNBdkZpUklLSThlT0hQVGFhenFXeUZKVjNWZVM1ZHk3bTZpSUZydkpOeTNmSkJMRHFzZ2F0YTVzcU50a3BZUFhoVXJPU1ZoWjg2cUJXTHVFajJYUWRyNXRZM0NhTWhjTmtMZ1FhcERGL1FpWDlucldVRm9zNHAxSVRtbFZIUTQ4MUlaVlhlYzBmWkszcWV4OUVCUkJ2QzhrV3pHaUxoYXc4dTh6UHpiU2E3QklTZHdxMFhIMEEybUJKYkQ3d2QrT2swSlNEcSt5SjU0V3ZpbzhvdFo5b0pqOTVhTDZPb3pYYzBEU1NnL1Uxa2s4LzVRR2sreThpcU15Z0RNOGpXNmJ1NUM5TFpLOXB6bU16d1RSeTRYZ0N3aE12VDZjblZqRWMvWkIvanJBbkZMQUlRaDBaQlZyU0U2L0ZBeWRXZ3FaNStoaW5xU0hlUXhaZW5iM0FhUWZwODdkMDlDTVI5OTNiOXlFTitSNnV3SjJEWFFhR0RmOXZFdHRrdGFJM2wwU29BaUxyWG9XTVo3c05WaGtlYXZpaUFLVUViM3V0Tm9UeWROcFhsMk0rNXY2V21aVXI2bzlJNEpxNk40VmJWenkwbjZNdVNPdmlWQ1N0OWtRTmRKdFhGTE82WGlacUVQbXd3bkVpS0NCd1AxZHE0WUNOeEVrMnh2Y0hUc3JUeWZlL2xObGd0dFlBWWduSHcvQXI5ODduSHVTeE03d21LRWdYcGQxTEdmYTA1elVEUm1BK21WQzFKM0tNN281a0o3WW1za21uTHNMWFZnSXNuaXFuVmFLNXRjZzcveVJVVy84VWpxWUErTlJBN1A3cnhYWkErU3h1dVIySGszS1JFbEFLTjdnRXlhV0JkZjhNd1dMOE9lQXo4RjJUNmJKU1JTVmhnc0ErRUVsQS9JQVRBZGpuWU1kTDZxWStpWDBBM1dhWEJlR2FQY0FUUGpsSkx2R21vUEFCdmluOEtXRDRGQzNFNVRISHF3VGhlUTYzSlRjSjVnbXpQWG5uNXBhSzAzSTNtb0cyMDYycWlQaWhQMmxxS2w1Y2lpNXhmRzhOVkl0QTVxamxSc0RNUGlralpqNjJCSXYxNU10RWNRZW44bnV1RXhJRmQzWXZkR2ZpRzg2dTk1MXRQSjRxdGM0STkrbzdZeU01Q21IOTJOQjlGc2lXNFpBN25scldFN3MvdlVJRjB3eDFmQ2dnOVhqU0dOYWI2eWNmalhyMHVmMnNiTkxJZEIyOERlMFdNU1NQa0M4QWJOVXJHV2VHNlhnR21lWVF2eC8yazdpNVNwbXBZRWk4bFROQThIbHB0bk8ycS9ZZGJlMGp0bkpPSGg2b0gyc2NmMXRScUF4YVZENDUvMTFDUlAxRzkySmo3d0xISzFKbnJqZWM1WG9MUU9hVHpvWnpxVkNZc3BiWUc4Tk5WOWM5cnJHQy9ZVThMc3Rzbks2dUlyV0x5UndGMzQ1WWV5cFI4dWQrU3Z4R0hTVUFyZW1lWmVNL2dJQ0FnSURtOWEzVitldWQxMi9COUlBQXd1aHcxcEIyZ2IwakFWTEhmVlcxaDdoSy96UEM5c3krYmxraE5YOWF3ZUNWeDlwRFFWcngxSFNFNlRWM2U5ejltUU9KYTkyb0ZlUndHT01JdHhXRm9ud0cvcldUTDdIUzQyQWdrMFQra0VTLzRiNzZTRVN0SnhxVXhwMnFKRTJSeEZiUmpSaEJtNlVtZVAxMWxwQk16c3VqWmgrcjVVVFkvWCsxa2tvWGpnZklWaVRMMUIrSFBnWmd1VFFRMkF6aGZBNzRyUFNLOEY2N2xYc1F5aUp1QXg4Vm44anVadXc4NXhwakZUOXQ5Z1Z3UU9vOTN3NE1RQkUwNmJKNHFWMXhnYkFKOGVidDZyaS92dGsreDNVY2FZRzRRTVdjVllXOEZHTjNtVVBWZTEvYWplK01qSmREWkJISU53dTkrdWdRdm04Z0g2N2d3YmdtVFVQQWJjOGpoSjdRbTNmMEZvWVZHSVZPeERJRndFN1hhTmg1NURxRk42RGhFaFc5NVBOWVl2Ri9OUnBSQXJraGNqcW1VT2ZzTW5kQWpzb2FWWGdLQjA5VW9KSmtGQ3kzdkdOdCsxUFBkZFVjWkVwKzJLQmp6NWUvZEx1Y3BCbWFmWlozL3gzbDZpY0tZZFhpc0NHQVEwejBHUER4Z2o5ZkpVcDZGMnBmQW9xdWIwM2ZrUzJGMXJBWUdPUzlxSTk0ZTVEL2RWQzQ3T1ptSDd6bEx0c1hjbGphc0FoWW1jSlNqOWw1bE9GN2VoVThPRnFJTDhkK1cxYjlqSVkxZWdmQ04zeGNFL2xJRHV6L1dXMjNIMlY3cWZLZk9IQmpVUjQ3SzBpN3B5bGxaU0cwRjY4ZlkyVzg5bHgrSnc4dU9YeFBBV1VhdzF0S2tTOXlrcHU1bWNXQlNJV3RWa015eXlrODFCRmdjelB5Ui9pUmM5aEcwUm9tTUNsNWZ4SjdLWm1WeVJodlJLUVB0RlpFZDdXZW84VjVUa0E2WUxlTDVYK3dUbUg1QzNCQjVsWmtLOWpZNXJVb1VKdTJ1aTBLbE8vcVFrUjhBVlVUa3NHV3hwN0djbUo1YUhvdnErZkkzWFBGZWpRK1JYZDYvdG5xY2JqR3FLcFkzcVdaVXFsSzlIcjFnOHowRWhhRjZEdnpnUXUxVTNQNkhGanlUMS9OSWZReEhEcjdiS0tNSWlld2hHY0J5ZUlUUmxUZ0NtN3FTd3pSRlV3VVovN1RpOWJiNmlnd1BNc3RGTFNCaE9HNytDUExSdkNvKzZDaWhxeDMrTk1tNE1QZmRPWmRBZFNscUJZWFovekxpcTRMcis0QmhuUHlKL2pMbWVBOW1waVVmcEh1UXZrU1ZNT2tEcUx1TmlXbkFURTZZelFlbVZYY040aGpjTEdkTTZ2dWxYMkFIOEtNWFVra1VBZnlta204OEpES0FJUGZrangrWGM4NFpCbmFMNVhFcFRNY0h1NjdCV1NzTnhxUUoySHRnNjJPWlhHRG9rZ29wYy8zWWtIa2pFcVdsUHNIZ2JNcWJPMkdndXY1STNJdE9lRHhnUWxqQ1hPS1BIOGp4Q3o5OVFKeFMrTllac20vRksyeTdtZksrVzgzT3FoaUl1U25KS3AwK1ZjZlNSbGZhVTEwZ1liVDFGUjFjZ0Fja2Jha1UvNTl2WGlaVEZmYWRZaGo4L0xBY2RuS1JramJmM2ZkME5XdGlEZU5GeVBSbXY4dVJQOWR5clo3RjJjQ05hVlVnekE5SGdxc2RKRmU0MW1wT01tbWtBUGhOdzdEeGpCZUFQc0p6SWxkUUdVeEtPbmxiNXNtcHdnSWFabVRVcmtMQ2tnRmZaMkNZVEVHWmdTUkhLa2Z3UEYxYnhLQzN0YU8wNWNrM1lEaTZLNTVHQjNYT3ZRYU5wcFJmTEtwMWRmdk44bXRwQVZvMnV4VFhIZk1UbEJJam82MWk4ZUtzVlplc3BOTE1WR3NXekR6YzkxUVVQaFdCamo0V0JRUEVWMjB0Zk9XMFZTS1ZNYWNwUGhmYXpQM0UyK3NGNGh0WFdZaG8yZjR4VDdobjJYUXJEU0NWOHVrUktMa0I1eXAxQ0NYWS9ZREY2K3FzVXYrOEhRcFZiV0dKaDRWWmh0TmdPZEduSlJvZCs3dFNkUDhyNUErRzhDWUMrME5mNURLZ1hUYXZsVGVobkQvUmZ3bzE2NHdsK2toSENydWxtclRpcVFEbjZDMjZlUlFMcFp4aUROY3dNYTI0Y05hN2dDRlg3ektGOEFyaWV6MFkrdjJMOTQ5RWN6emU2aVNyMEo1ZkpOWUdOY3habGF0bWpWNU44ODVlSllSM1VDcG45Y0J5ZFRlVmFDTEVEUHduUFRJQkk3MHptNmUvSzdVOHQ2cWxuU0kvUk9oL1RJNWZWdXhIZ3RQd2F1RkIwdGZyY1RYdVFyOTdNQmFsT3NBaTNpT3RZcERsTEg3TmtvQ01rdlp2NWgwaDNmRjExZDBNQk4yUkRSNlQ0VjJqNUhlaC9IM0lDOURVSWZNRVBGV0lyTlRHa1A0RzYzc0oxVEdwVEplYWZSbFZxZnowMHVDMGdobzFQMUFjWmwzbzlIVzl5NUFsbWcvMytmb25pRzZqS3gyZ3oycHRGNyt4NTQ3Q21qTENLOUhZb0JVckttM0ZDbkdkSXg1aTBURmJKWndXNVBvVlJWWjEzMUJjYVhCeWdzNTFTZjdaYytraUVLL0tBYUNUbmxGQVRwU0FkVGVVM2tFQ3JmOVNXU0M3VStrKy84d3o4eEpNdWt0c052ZC9rcERTN3Vtam9uYStHT0VmMDZJQWs3b015K0N2R29KQitacWttZVphcGNzalA4RlRWclRDbXdpeFVNZ3BPVTY4bkVhWkRMUWJ6cUhRc1dqWFgxQmVIV2N6NE5qTFFHY25SQ1lPbkhwdDA0aVZ6dGNWbW0wNlRJa1hPYmhVdDhFN1lHWExSYjBJd1NFQnpvMGlZQTRsbm1lM2M5aXA1djVGb3BjQU9zZldpL2s3OUplN3cyWFI4NEQ2eEZhUUM0U0Qwb3kvQy9DSFNvV0l3a3JBSnY5b3NSZHBwRzJoTHJkZWVWRmVjYzVxZ3h2Q3NCWTlKVStraElUMnJ6d2Nlc0NRNnBRWlZSbnpqbzY4QW43bE52Sit4UHpWV2Z4Qi9qMk1veERtcHFYL3cxN1VkZ3MyREk1NmRUR1pHeE1HcWZ3eDZDckhBR3lsU01MY0k5V2ZFMm9xWVlaYTZaSVlHd0U1dFV4UlByV3F6NFJQNmtoT0ZnTDR1eDBiSEg0d3F2dEVUMnZMWm1IUWlsUXhUQ2pGVHdnbXkrWW9qNlJuUmp6a2xhWXMwcE5PMkQ4aU1MN3ZaZ0doZkY2UjFMVG5Wd0N1eFdKN1NGem1HVUhXVWNQZTRpbzBHbG9JUVhFNmp6RW1uNHpDTW9va09VaU5BaEs1NWJoaXpZN3BaY2FGUmFYRjJqV0xFMlFqZGRDZzhuMHRWQSt2cDc3OTBOazI1QWZOUEVyLzFJc2ZGbEdPV2l4SWxCM0NKVXgzSjh1ZFNkR2JycUJGd2Faa29xMnVteXNWd3o1bW9IaTRBcWlQcHRMM1FiN1JNc2ZkK1FwSUoydUxDY1pPNUNDeUY3NHBrTm91S2daTU1uaXdOdTRnRFhMZ05aSS91Wnc3bmpkdUo5YjhqcVlvSktaTFRQMUtNMU04UjhyS1NkUUM4Qk9FLzV3a3h1RXJKWUpUa0lmejJsVUI0alM4SXBzY3FtRVVqMjhPWjlDVldiNVJGUVJRY1lHTHk5YUtML1BoRXl3TCtZMDB1a2g1UDlPc0J2NUxrVnRpSGxRN2t6UnhSQ1VWbjNldW8wVW0xVUJXbTFqOFJsem5UNmFHK3VlcDZvSTAxOWRGRVdyNnNBRjYwZFVvK0hGS3loSUlDVU5zWlg5bnBtKzJIQkJoN0FVQ0pCejBvU0J0ZjQ4NW12R2FMeG53YlUwNHNLbTNRSmNqaUFQbU1BSXgwRE82ZUEzalNibVYybEQrekkzTjMxbjRDWXl2VGtpRTdpMEFwT01LMnJDZlpQQ1JKbHN1Tm5UdEtzRzBuS3F1cEs3ck9mZzlSYm5mN25lQUt2T01id3FCRkcvRExLRnBFMUlBakN2M0JaYUxodlgxQm5tQ0p1WnIzdjBZZFo3dDR6eE9oNERvZzhtQUJuL1I3bnM1eVlLNkJpRGRzWFJSeG80dnIrL21LVWs0dmJhWmRLK3lNaWwyaGVSWHBSUkV0N1pxRnZUN0lZQU9md0R0RTAyb3dWUnprRWZyWEx0OWMzQUg2eWdrU3hRYzA1T3g2RDZkWTRRaU1zYVRvaVJKenNZdEs4UlVLMXBldU1wWFBMUSs1dFhTRjNUZjl4YjlPdTFKS1p3SmMyOTVKdVc5VC9ML0hweDY3VENpTkZVdzBrd1VjN0tSRExLT0ZxcXk2aFNDaTIzUk9ka1dsWnF2eWJUcTRVTmxFeDRaZW9HUnlTVmMyS3M4QmVZTytTRUE4Yk9uVFliOFVIVmZDa0wxTUNyVTJxS2s4S2dNVHBqZTc1QlBlVDB6M3dlWm0wSjRVdXFZVW9ieG1QWFI4QVdjTWQ5Qkh3djVSNFhxWkFYVXVQcmF1R2k5SEo5NDF6M0xMN2Q2c3NDMUZ6QlZjaWxlUGxoNU0zZGEySnFCQzBleXE2YW1aaGYrUzF1alhGbFBBb0hXNS9mSFVmZTU4RTkxekxSRkwrUUNKeVlpem5pVi9UMGhqclN2eGZqeFZ1a2lFck5Bc1JPbGhTNFJISE9Bc3c1QXA4emxjeWdtUnIvZlhFN1pxLzROL3lOV2l0NDZCWmlrZzZkdlFIUnd5d1VhbHVNajRXMUZPMDBzYVgzZzBkVHNBLzVFdzMyN2xjZi9yTWdGRXZ2Z0VXQWduY2d1YTMrb2Jhdmp0QnZpc3MyV3dRL0NKZ0kxQnV3VkN1ZEFGeldBekJFSjE1T2hscHpzNVpjQXlBZVNVVnA1dWVKZ2N0RjhSN3MxMW10QXU1TWQwczVhNy9qWHl5UURIREhYandUV3MrZFRJWm9yRDJ4bDkxZWdORFN0bVhUd3BYTzB3M0ZGdytEeUprQUlUWFpKU1dxL3JSOHFISlhWUmdsdmhONWtiK0ZjRGIydW4zTk13bk5VQityektYc1I2R2FqRzIxVG9SWmw3TTE3RVNYWCtuL0RWWklLREZMa0RDekRCelFJOHpIUmEyVHNjczZ5SmE0MTRreGRsSXZ2TjJsQkhGRC9ubmlpZDNTN3BPQVdtNzltdzFyWE1yOXJIbFZna05zSDAxOURFczdBcjlpTEpjZkFZWWRjdzFxOHlQWldlTGFGRUJaNkJoVG9MZmpueGhtUmYzeS9QSFdsRnNnMVZMNTdBV21UYkdBdUdmTGxtUTZ1ZHpHRm1US1FLZER4S1N4SlV5MU1mTllycC9DNVdTMmQ2Vm1wUkxGekNKV0hUMmFZMUFRWi9RS2d0azhvVXN4Qk9PMWFUTmZlTEhnc1UvaGorNjJVeW5Ya2tJcTFvQU9sdkJTZmNJd0VEeEc1ZFhXVTlNZzRhbW5BOHlXN1c2NnNjZDZNc2Rwd01PbEoxM0ZBTDlJQ0xtZ095RnIxNDhLdlJiNDRnUGpWZHRFbzF6M0FOSTIveDFpdzBUSVJmTVB1d05tM1NjSXFyZmZ6TXRrWE5GVzBpODRpdnJoSFNsYkhQR3BjT2x3TEd0elRCblpWTzdlYThvYkd5N0NXM1MrZXJsVVVBOUlkcVcvV2l5UnR3U0JrdWx2ckY1aitaMVJoNDBlOWROUkR3TmM1TTJacXgwRUFwWktBTE1laEZwdi9IVFlJck1RWkkzK1JaWGR1aWsrVFU2TzJ4QjZZMjJ0TWJjMVZBSEZMbGlGTUMvcVAwZ1VUY2t1b2FCUDg2eEN6NEdDMURTbGlPcXlZcG9BcFl6K2VVNXdUamRyNWdpOWM2clVBZDczRGZZMjZRZ09QUk5xM0QxQ2NCcXVraVcyNTNUL00rU2RvYzlTZ3JOOWg3aVRldUhGZW9FNE91NW1GRkRXbVNqTDR3cHZYRklieEY0dTRubm9IZWxadHJhR04yTnAwaFR3eTRnbWl2RHpEc1lPWjVkYzlpVVNkRGY5NnowQXdudktoQU9Zb0xxRjlONmY0anRmWUIrVEJhTmhreGRXeUxMbXFwdVNJOXVzazBocGVJQ1pCK05xZGNuZ3kvOWdPUTBWR3B0d240bERtSUNEb0pQQVJyZnpERHRybjVvQUR6Zm5OMURjOGRkRHA4czlHN25YK3JEVmh0OGgySEtNajVDbVhrSXJQTjZqNlA2VlRLOWNvRVE2cStoNjRxWDNzNFZnNjVhc1dZQ2pEZmF5VHVrbWc0Ui9GTytIbi9ONW9CVjVPVkROWkxuTWZMcElhYitoVVlNRzdZMXgwbXkrSFVxRWRKYWt2WUhuUXcxeUxHbU80R3VSSlB1c0oyZDFwOWNYNnVkYi9Jc2I5Vk9QWWgybVVGNmt4eC9uQ0kwRncvOGJMVFVIMFZDWEJkT2E4c3pTbUwrVjhVVGlnWkx2TXBkeUY4L1FVUXFQeEhWdTQyM0QxZTg2em5IRlpDYTRtS3FsRXhHOWpHOXQvTEpaNGtHOFZxZXNGT05iVmVlNko3TjU0NmRnYzA5S1YyVnVhNFl2SnlBbXpDRHZaU2VSZ0owTVhwdVZtdXdDL2xhejk4WFo5Y0JkcFZESTN5a241TnJIZE9yZlFhSU5nWGZtMm9DdGcvU08xK2ZXVHJzckpJTFc5dzQwRFl1WnUrQWwvdk5sbGR3L1EzQVRidGV0SXpHWnAxSzVrVzY3ZEhDc3kvVGpLMUFLbDZTY2tKQUpXb0pVbTJLd2swenovdGdCSDBsaW1nSUh4dzlqNTZQZ0lDQ0EwZkhWOENGa2pMVCtPWXl4R2lxRlBKeVdKVXpaYmtmemJCVHdtTXBvTTRqRlhZUXA1UHBZZ3dHRFVJM1htT29uU3ZLd2hneUxRMmxSMTQ1OVdwTnJJcVpNcWFjQ29EczQwT0d5Zk9jSkJRWDgwQlBWWHBhRVM3M1lvTUgwaEViRm96a0QveTlyejFzVDgvVDIybVlKRlJ3dXR0WWxPcjNHTmx6cnFWWlRFSDF1SGx2MXhjM0p1cmxDbWZwT0J6K2dHMEJjWlArSEpRYktIYkdKdGNhUXFxbEtUR0w1WmUyMnY1Z3FrMDN4cFU0SitZK2p0ZjJMNi9yTWorc3N2K3hMLzFaVHI5anZmc3NjUHIwNmZ0dEcvdGVmOXUzbXZ2OHEwT1RlU1RsaDBQeUlCV1BxZ2YweWRwUDIyOWd1NkluS2Nzc25mT0dkcnQvSE1DMUtZdjRnRmxTTUd4eFdCYlZqOEE1b1Y3MVdUM21Zb0dBYXBpTUJUMkVJYnVuc2RScXdYVEk5aHFpWkhVK3FYUk5WbGtkTkhwejRUdjNNREUxWmlBbFVsbnJ2NzNOS1QxQ0RYZVpRbWdoOUhwYU1GWmFEbURxV1cxeVdIczh1MVVkTmFkc25xOWdNQW10aVBZRVU5eldZQ3pZVVc3NGpwTnF2Qk9DTXA2Tnh2WFVFU3k2YlhZQys3eG9DaEY5ZHkrNURIWlVKcG91YThxT2hJTnVaRE5wbG5PUExGT0hQQmpBSFE3TlJEbVhPek15blNBQjhtY0dBM0Q2WFhKOW1MNXoyZS9KSVZVanVEOTB5K3pEWTA3WVVSaHp6UitwcFQycHMwN0U5ditzWndZMHR1MWF1UkZuUE5NWHlKQWZRU1ZmZXVNOWRJd3dwVTRRL3dXUUIrbEhRWHVrUlFXQ0MxQ3VjaDJZZitldkc1a2RnN0tVS09ySDdRWU85VG5hSHoyQTgwQVBZNVhvTllKb25xNlc3eHc1bFFOWUM2aWFZS3ZMYU0rR0YwVExCa2NBQURVeVNlS2hwZm0xY0VROTY4MkZqRHV0cGNDZWVUTGVKZHpwYjA0US8rVHBKVlpwenU4aVRUTWdjdFF0WGMwdmJSaDhCSytOa1RuUVMrZ1RwMW9UVlZDT1lmaXdEU1kwZlV1UW9CcDgrMmowMzVQQmFsRjZVRlJSdjdpV0hvME1pbEYxSjZlZmY0VEtOOWhYWWd6WGJlMXdjRkZnMUM3WUtqby9DRGVEL2dna3l5dm51Z1ZXQWlSM2lCa083cWlXVzJ3SVMyNCt6a1NoWVBPZGl1ZUlQMThZK0FoeXNXZVgzTVlNRXBHVTlVS2Q5YitEb0FwNFNtQ09janUvQjBpN2NFTWhFSUh5QXc1VTcydVEzV3N3cktVSkRRYisyTnE1WXlOWVd6OWlDUGsyVG95Tkg4U2hSM09TeVd4VTJEL1NMblA5c0FtMktKeDZzTy85c1B3MHp3MVc1cXhES3NxbXlwRERObDhCcUY1UUNKSUdhM2tYNVJRbzVabVJqQzlaL2VPK2t6TVNGZEZQYStwVGE5eE1valRiUVU2Rll5eHZDSHFTbWsxQ3J1MmE0RTI0dkZBd243bS9lSTNBRjVmRDZxUllQeW9DRDc2aXhDUnlNNTZZYU0xdU00RTdNU2Z0QXZZM1dPWU9NcHVZajkwYlNUMFpja0Y4MCtFOTcxVDFVTGlrK2s1VTdGV2I2V3J6TTlyOFd5czRIZXlLbk9uMmV5eklWcWlFb250d3RFaUZJWWtiWkJhcWgwOC8yMEZXUTVzd2N5SlBxMitycVZkYjlZdzBlUTVRZlQ0Z2ZacG9OTUN4N3NKR1F6Z0N5cTBnUUhsdDhmdkwxRVNiY3RIeFFKSlFhT3AzdGRtayt2Ty9MVFpuT0xoSkY2L0RCWDU0QWRRdzhPN2dmR2lhUklIWVZSUExZN00xekxlTUZNWGlSVExiWWZBcVkvblJkQ2QrYjloZ2VKUWpLanBOcU4wY1p4alhia0JHYlJNMjNLWUc4cHo1NStlOWhWUVhiRm90QWZzZzF0emR0SnE5Sk9lV0lsVWhBMUx3R3JJQ3BiUjJtZ2huR1FqcmpUUGFQNEErcXlJR3NyWVB5VnFGYXdZUURnWGpvOU5EMVpIK0xNYXR1dEhUL1VrVFlUcGpvNWhSSy9ZNUhGTk1EaDBsRmFhdU9JMUxtS3hwcGNnbTdSQ2sreEdUM0FISkJhZTkrcXd4aTl6R2k2djQyc2FmSlBKckNFSmQvQ3FqcFpHb2hRR0U0VE15clBzczMxOG0ycnRHS3I1RVJLWTNrbENBNFhQYXFZYWhZRFExWTk4YStWSFFZK3hESEdWSm5PRkE0eDhKWlRVZ2ZkYWJtblY2Y0Y1cDF0VWVKYktRRlViQ3R6WmZiVlJUbzhjZmkrdGNQWGNsbXhmQlpua05BdFBDa2M0aWN2UWRQdytxTVlqQUkvWjFocjB4a3hhbW5MOXQwcGt3U0dWeWRsVVJvZlZneUF1YkdHUXdSYmYyemdBZFhWZDlQdG8yTGlXdnZkWWo5OHVLcmd0dzZkTERuZU5zWitUaWs1a08yTVJRNlgwV2FWYzJVYk9kSnhiTDVMWmJzeHVSa1VHbnQraWtJOWhmVFR2UEFoVjZCdFNPMTlOL3FXNGpNbjc1SzBJbjJSVG1HaUtxb05aSG1kNzAzVVArQzRLbG5NKzlQYm5HejhvY3loSUtCS21HTlJqQUVUa0dUWEluYW9sNXdlb3F3U3AxTThGdnpHNEs0NDRSRjkyaUxramlBdW5VZGxveGNxci9RU25nZ1VPTlBrTFZMRU5nR2NXY1ZkTjhSS3BraElMVDd3WVZ6M1lMRFVZUVNRcnNWRmtFMVd2NTFFbjJmU1BSS2dqUWtwMkxsSTVHT3B6WUNhUDZUeWp6ZmxtcFQrNGppVEh2eDY1WFpCS0FmOTZtUDZtSGdVclNQcVIvQzdWYWZIK2NxVlRLQUhCNUZiWTlpMUJzMGN1UG1uS3o2NVBUSzRhbVpROE03RFVKVURSTUl6K0JUWTcrMzVMbDRLZ3FtQTZITXBBejBsM2NrQUlmcVBINGYwRnViWHRIMnVCek1pYkFqWnM2cXZzTno1dUc0V0UzWitUQm1QR3lRekdlSTcyRysreWkvYzI2bHNsRExmRWYzQlZrckNvQSsyMlBRZ2pZNjk5SHRxamxYZlZXa0lhbng5Rms5cEFGaE0yZmVoZkkxZGFla08xWXIvaXZzbWlNTW8vMU5jMUJqMVFud0Fwa0NSbTF1NUtUNTFWa2RSSm5Sd2lidHZ6VzZkcmx6M2k5YUJHNFJKdk9abzM2am9GUXEwUlNFLzFCSkE2WWwxeTZPelVwMmtMZ3JNcGxoQUIyN3BsOXlsU0hZejY4RkZZTlI1cUFGR25ja2VVM2FIKzJ1U1FNaE5qbDdDMFU3RUJjMnBoL2JsVkEydXpRWElXTzlzWFl2c2toa2FMbUs2dXp6eDRTa3ZQeFdPRUR0dnNnZU9wZVpuU3RoMXRvZ2xVOTlqR2JydEQyaStuakUrK2FucVRRVjNQZGZzRkpmeU5UZjhLVWUwQUd6Tm9EWnJxeGdVTHNINUNyZVNIdFJpc1QwbW5VVWEyeHJiQlh5QVE4LzA0R0htOGZ5S3E3Tnl1OW1ySm1mQ1NTUWtST3kyZXdQYVR4STlZbVNBeHpiZGJ4WnpTN3BmWWRvcG8vUTd3LzkwcWwwWjJhVGZOZTYzU1BsV1loNFBidnJkcVo2aUkvNFdlbXcybVBCZjZBNXVKMWZCbFd0RUhLUk9wR0VwT0dFcGE1NW9OL2pFTnM1UXlzU01UZTRwKzZVakRHMjU2YjduTWV2cEg3V1M5Wi9XMzFzYzM2RzhjalVEUjJ4QnNNaCtJbHE2WmdENEE5ODR2OW9kenRkQ0Q5MkFFSXpxdDF1SUN3UU52YkoxczAwSm1ZUzJJT2xzckd0NTN6amhvMmF3eE1FL0RzWVJHMGpYVWcvVGNCaDZROHEyOU9RRWlTcFU1SUtkVmxubWJtSGNid2xFbFRxa0wydVN3d2UyTDNuOU4wT2xDNVhibjg4aGpNdWUyODd2Rmh3L2MzL2VwdzlFZkl4Q2kxa3RlOXBvQlpBZG9MRFJGdW5OajdXWE5rTHZhdFVKV0xWNkxpR3Q4bFJxZjhyTDNCbm1LNS9Fb2RwS3NOOVg4cXFUSUtGVWtDMXhoVmlZUDl4OVR4OHo3Z25tSWtzcDJyVnNWNkxrT2cxaUJFNVdUT1Z5aEhsM3hMKzFpVG5jWXJ2d0xyQXBjclVPLzljYXFyMWIwME9aTm9nOWpWRGs1MG80TDNBNi85dmV1c2h3TlorMWo0RzZPQll6WUZRMU52U2pOWVltNk81OGNZQWluV2crZkJKRm80N1NDcTJyT0hRVGphZTJTSTUwYXBNQkNuZGd6bm1mZGE3ZWdOMzdBUWRqL0RYaFQwakRrYnNkRlBYcm9Md2xCaGRYQlpDeGl1UHdSaDJqT1lJdUtlc3ZNR24xZ3pCUmdzL0VZUWxSVm5pRHhUdnowM3ZvMStzK0V5dCs5cWdUS25kME5Yd25MME1JRGVONUh4QlJVYkhaNExUdFZnTmg1bTIvZUtTZmJEbXhVQjRtUDcxM0dyTFlTL2tQVGVhTndUQ1IzbFpPQXhvSGp2YVRZZjBjSjVUVHpHTi8xZEVONTJjcFJtemkrMHpEME5ZZkFNZzdhYXM2ZnR3aXJKMytuYXJaTEJtSTBjdEJUamsxMDBmR052SmFKVGVtZmx4QVZsOUptdUpzZjNVL2h5UStXekY0UjFmczFDb0lkc1o1QnkwNGlyOUNXbEVsYlBuSERkRGJTTnZ5YXBTUnM5ZWVRMHFDMGM5QjIrazJTbmhEMDVzS2tiYTlsM1pLcWxuNWZYb3djWVFPL0JmVDZxUE4xbjREWkdvMHFabzFWM01GRXVZM0g4cXpJNmJwNTFnZ0JXSVJNYzdDbmRxb2tVVDgyUkxrL3YxOEVYakR2Rkp5N1h2NGVLS0I2MndvQUdYY0wzRzdhTnpIMTh1L3lGaVVKd1NUWGwrWXplbitQdDNXKzRHNWV0ZVd1NldrUXNaUGpXVDhVVFA5aDJkSGMvWVY4bldHRko2TWhvTytnKzJlREgrMmRzcWhCelY4UmZ1M1A3R3pEWnNia0tjNXBhaGFWWGVhTWRiYWJLS2dWZUNMNWxWWDVpWnJGRm4rZ1RQOVVsSm5lTi96eUJ5cHl0UE1MbmY5ajEreWl4ZXN0R2tvaVB0cUhWRm9TanRjNU5mZjRwR2JKQU5IUGo5akNlYTNkQ0FJMG10OHl2WXM3OFUzZEFteWphQmFldmhOb0tod0ZCRVovcklocjk2cktuVHUzYjZoeVJPR2ZqOHkzK3pQOXE0M25TSmhYR3RVRmoyOElvOVB2Rlk3SHIwVFo1SHRaUlpzY0paMEZ1RW1FQ2V0NGpiZENCUGhUd1ZMZjBFRUN3RGgvRlZ5TnNoNUxnclRZa0xINHBkT1NycHVEdmYzZTZqSkYxQjFSb3BUdlFoOHB3ci9qOElHa1lOQXUrYTlrbEw0cCtacmxZeEZjQURCWmZIOHFDVDVhNWZTOVJvZHdvUktwYlJXaDZrTGUwZWtGYytjakRmWUhRSEhJOEpaWGtvN053VmJ1M0RxN1Y3WXFLWnJ5Yk9BWjIwcUNpMFJlMVJBRkQ0UUU0VmJpSlhyNnRUVkRQY2UxdWwzbHErZHdsbEFnV0krVFZJTnNpOENtTzh1M2djTHNGOTZiYVJEVHpvVkgrM05MYXFCeUZrNk1LMFJRcHBFQUMwSmM2QjEvenEzamg4MmZrcU5Obm53NlFuSERVMUpYTGtzVmxwNUgyME8xN0RHUXlwWFRUaWQ2dWVEM01vQUJmaXJIMVlzNzA2VmFzUTNwNlNJemthbVcyU1hiN2J3MGIzTCs4YmJaV3EwUEJYZ1VyeWJ0c0VCMnlUZnZFK2lVclREK1hienN6L1lvODBtRDIrY2luMEJDSU8vWStERjU2QUlSSk5EUG5NSWNXQ3NvdTRkMWhYekVad3J2aVdzbXUvcjdkRVBWcWpwcnoxQVd1R2M1WGdqdmcxVnZLdVZ0cUtsMWlvdnZtcEREL25NajdCb2JHbTNXUmpHR1VORkF4UEJkM3BuY0hwbWdHaGVuWHQ5STg5aUxtZm5hTEhHdUJsT0lWK05RSHZQMXYzcDdGY3lNUkNnMW1Nb1NpbDRYQ3d0VU5zSmxoa0pTR202L0xZeFBCT3VaQkdOYTRDUXZDUUIwVmhGZVorK1NSQXBLUlRwMGxYT0dwU0NIeUsyNXB1RUxrUzhweURuWmlIeVlLL2x2MzR3MFhzeUgzc0xUVENsRTZLOUxOa3I1anoyRjRNRUJuRTVkZDBKMDhBUkxaU1l4VXZqRXpCUmFuaEFHQXMyckp1dndBWkdzRkNJaXNsU3U2eWp5Uks1WmNuVWxHakR1MG1nMHlTYVRwYTYwaWJBbDlkYmFVci9wbGNMUUFxYTJkUXlnWndaSXZ1bGp6MmptTnV2Wm9paXYxMXRDL09xY3RyWTkrT3FURDVPakNQbGxSUy8xNkZzQXRhTHp4ZXhnMXdheU91U1ptdFQ1VlVYM05Rb3hwTEdoem5CL1plYk1QbXd4eVltS0dLZVRnc1U3cnNWY3RaU2JDNHVTUWJVdXIreG5tT2ZvcFpDK1BpY3c3UFBUOE9xdk4yaGJ6dWUyU2VNZTJZclJNdXZlcHVtck4rMXVTcU1xdU5qb1VWWW1NUTE2cGR2bEdKS05XNHArSnUwYTVLNGtsbzJJVDFCL0VqQ0hIQUpkZUZQUUsrUUtIZHhORkt4ZVNzZ2o5bDJwOWg4YTlybXRFckRTOGs4bFlnQ0lPRVk1a3N5Tld0dTlxZHR0U1BFM1ArZ0I3cGt4VlpkclhWUWkxYlpLOHhMbmNsSUd6WXMwU1h1U1M4YnNWd1FzVGwrZk95QU1sdnhvaURxN1JpTXkvVmJBejRWSU9sclpqSTgvdjhhaGNIdGVVL0cxTDM2bDNoVEFJV1U4N0ZKdnd5bitWSDRJWkZRaGtYeDhiKzdleW52enpNNmZWWHRFVkVNVHBWdVloZlhIR3kyY2RxWXpRZm9Ca0ZwdjJ3a0JvaXl5SDBCbFJaNFkrNVJSakY1K1V5dk8xWGJLVFFwTVFRV095ckFTQmxZUEx6cHUzVHl6VForT2NCelN6SUllRGV3YWthRW1BVVVlRktvUk9HeTkxWE5uVkgvc1ROWWFBazZhcHlhdEdMeE9uSlNBQXBkcDk5V0RhNWhNV2JIMVMxaEY1RXVUcXBUSmR4dmY2c09BU0QyWnAwWlUxV0N1OE9XV3JxajZDOHBybUtlSjdtMHlzYzhtRCtsL01PRjRiUDVBYXFkV2pRL3d2VnZtczlySXBkalpkSTJQaThQTW9ERitmdUNkTnBZTXdCT3pwcHcrVXU3bE9nWXhoYnFZdWVDTHFvMHMwQ0pKZlEzTmRpWmxqRVBzNStJSnZ6WWxKaExCWHh0RTJpeFI1V2o2KzBuWWkyZnA1Njlzc1NJVGtkYnJlMjdLVXAxZjhWMkhRU1BhOFhvdkF6NWZJL3FpVHUwNXNRNWVGeHRUY3JHY2NFcFpMdWNRc2kxN1BlL3lXUE5pQktFZG05R25LMlRjbGRVWnBUM2VBZTkvSXUwNVJ6eHJab2NuV0J2a3NIQWNWTGZUalB4Y3c3TGp2YjNIaXJxNk90YURUTkhGaHZRdS9RWHBVNUhXcnM2eWhGdklPbTdCYjZ6dXdUNHpsNlZBNk0xcGxJTkNiU0hxT0lVTHNaKzNHWVFDbmdCWDYyLzFiS2xGVmJyY2ZHNlcvRlZ5cnMrOG1FbExQa2VsdnJTaGYvSHJSejVzbS80aU9SMi9wWm9ic0F2aGRHL0JtZnVPcUd2LzNHVVdSR3lOMURSb2VKbHR4NzFaWWplVnBycUhvcm02ZzJjeG5hT2lyZWkrZDVpLzRzaHhja1ZDc2RIbHF6OW5ScEgrck5jNFJ2RUIxSXZnbHE3MTRCMmZ0YmFzOGdFNjF6c2tGL0MwL3YzRFZyNWVFYXZudGhxdDZxUnIvRlE0M3FXOTRTMUttMzRUZ0hBSm1YZCthZmFISWdqbmRvNFA2S3h2SjhxWlVGeUJ1ZUM0MlNQalNScnlKVGZpS2NOZG80bXhYVS94WWxFSlBodXB5YUhmdDdFQXI2eXR6WEw2Q3Erd21qaXNlZVJnK3dWWW5UN1Y5Y0QrRld6ZmU5VkpHNk00djd5a01TeUZGanRVT3ZZYysxTEc4YUMzbkNyeUxrYnprUyt6a0JnVEoyUEtMaklIb1JrVkhtWVlBSzIxUTkyTkpORHZ5SXUzWGQybzM0bVpjKzgwRHNBdVBwOVkwNGI3TkFWSkg1OGt1TkJja1FZaVBKLzRCNE1YMm9RMlRGT3RHMnVYd2t2Vko3ai94dis1RnJMd0ZTZE4rU1Q0OGlodE9yTzgweHVBUDJpc2pJUkwyZUg5VFZoTGYyZnVIVHIrb3ZKV3BHOGphc0ltbWFQZXpnUzAxVUMzUGJQOXlPNnFqNXBKc2hwTFFUUjE3ckNmNEtrOVNmSTRUckYwcWVKN2hxaUJKaDhUTWRlOVUzQnc4bFhVU2JBOWN0SlhhbVR6bFpxL01aQWRta1pXRTd6MHVzNFNWenhXTHJPd0h4Yk5kbXBhYncxVTBQYThLVzRtV1N4MUJCd2pONE5rRXhvSGhlRzJxeGJ6R0FaU3J2QTlrM1dCTWNKZWxTemc4dUV6UE1ocGRhWTBRQnpoMGE0UG1JZncvYnpOTWhTWEdZNk1oSndkdmFOQWgydzdwL2hEenpoU0JudTd1aVJHWkF0dFZRWjNNbUZzVmN3NFQwMG1lTGNBbzl3NnN2Tzl6b01nNnQwSVVsY09oZGlwOVE5T0w3bEFlUXhZZml1cDVQSUI3YW0ycWc2KytYL2MvZElVUzMvYWxxSUpHZjJVUlE2dDdjayt5NjJ4eXRCQ0kycDRibmlGMkp5a3RnQ3h2WGtMTHRPaThwSnpzdldZZzNSSDJvM213S08xUWF3d29kSjZiL2ZiRW9ieTJpOXZzTlUyVFZmYlBDM1k0TS9EUzkySWx3M2VtUHdmUlpYQ2NGeXN5cEZtdU1mRVJKSmdNS3F5KzVLNjBrZWl5QmdPZkx1ZXAxOFM0bFNHY3VOZDk5VjQxTkFGeW43SXQzYzloUXhNTWxvOXBLdzN6MmZEVURTMU5xeWR3WU9aWGxJN1hIUTUrNDlwYTAyOTVGSUtDYi9rbDRJSERmMkpBWFFQMUxaWmtmdWdLTStYVmhNd2FwWVRjM2dtdzJ6OCt4RU11SytpcXdKZkdBUUxPYmZaQ0VTamI4Y3JpVTBmMUhHQlRneGVuL1g3aWFFcFRKNWVPUWF4NWo3Z2FKZUIrREdzTFNzNWhRalo4cWZKRXd0dE94d281aTdmVG1rbUxETEFiR1R4dkJlbWxUUENSR0Y4VzZybDJ4aE90YVhocmRWTGFrdHR5NVJ4UTc0SVpHd1dQSDBpTnRBQlNFNVF5R3JZZzZ4QjYyQ1JOeWtXTSt3RndPclo2UExaOHA4YkYydk5NRzV1TGZuT2p2ejhoTENvditOaUhVUFlGTkpzeWV3YmoxOHNpaUNnbC9uTmlHaXAxZUtqN1BtOW8xTGw3MEsxaU00Y28yS0JSWVdZOXpmSzcwYks4WGkzTlJlMEt0WXpaNlU4YUw5L2R3T2phY2c4M2VGdFFHZUJLYXc1d21UcjBUR0Y2Nzdma0c0L3hzMi9zRklrZy91QkUrbE15aWUyejdkZnpBdzF5Nyt6Vm0vQVpTRkNzTUh4dUVTbjdudFNXMzg0L093Z1FsdVVyVzlkVEJuWGMzN3oySnpTRk1FZzdVaW9uakx5TmVtRFhQRnI2RkdHOHd6SUx4NUlpVEozQ3dXUHM5cW1hYzNrblcxYkZSbzlyNlRwY2syeXp5QTZnQUpQc0dMMGpGc3dkS0U3bzlQdHBJTklhUW16MXlKLzB6b3NobFBYUUEzS2crWVNuVzlzQTdzNUdhQ0l4MDRjdGxKY2diU28rVDl6SUdqcWRQMXdOTFdvOVh1T2tMN1ZScjFBWStCWkx1L25UcEZ2MGtlZ2hkaVlYNUs1UHAwSy9NMlRIRGVoNjNBZXM4NWxYc3ZtdGJBUkxtMmYyWmVHNzlSamdPRHhacFVNOEJCVVVLTU1PR0ZRTnJtQUVIM2N2N0xQa25uS0ZLTGtMY04vYjd0OWRRUU1VMFBJTzFWdWVHYkY0WENMUGRsaFVNWEtQL0NhZFVBMElnMVlLWWtCWUlacitOSE1mUUpPWkl3K05FYjl1ZTUrTVdjbTF6dnNTODRMMTRKcFdSQVE3M1ZVSWIxcm90NVlHdmFPNm1acTBwMVVHWUVXZmk0Y3lLanY4SW54UHRiOVFYVUg2WFVjcDdUbmVEeWVJNmRDUnduUytReElCN25jS0xpT2VVNHc3ZmxTOGVpdGxEVTNmMkM2YXNWUS92MzgxUnZWR0xwTzNVV2lQYjJ5TithQ2RMQnV2SytSMXpCSGNxZEZXRnMyRjFTdjV5MDNWRWpNUlJzcUJUY29ldjVTaDZjVE9DMFVQRkRkTXZVKzRXNi9vZy9UQ1hmYjUwTFVFQjAxYkRVbUc1bGwzTERjZ2cvQXp0TTFpQTl2Qit3c2tYSWE5SVZiMkhQaGFGazZvK3BnQ05Kbm1Vc0tlTU5NcVB2VFVTa3ZYYzdNeDlNc2VUNitSc1ZWOGRiT1lSMzBUd0w3anRkMkEwNlk1MUlJWmx6KzVoaER2aGk5ZTBub1RkZjh1aHdxamVSazR3NlVqV29FdWIyVEdJbVkyNGJBNUFHbFU3bmZQUTBidStGRzQrM1A5T2V1dlUwSmxMOURSRXc4Qi9LYm54R3FDV0hFR3g0eC8xLzFSbkt3MjFsTjRySkFuRVFISGZXZ0IrWFpjb09jS1h6V3MrTUQ4cjJEQTBOUGFrTG91L1Y2OWlhaTVhV0hMZ2JHNXBtMkxUaWN1cjlNSFgyZVcvZUh4aFFKcXFZUWJOZG5UKzFjaGdhSVVGNlA0UFQyYWhzazJ4SXVmbmlCUXRVTExpOWJWaHA3YkpBVVBSL2tETWZzOFVwRkxJU2hFeVVQRGo1UnlYc25nV1VyOGpQRklGdDcrOHRVcDhYelhRTDUwYnl2OHgzSU1HWVdsZTlpTnkvMU8ydlJnTGRKTHNsWXpnNFp1RWNrbk5qOUdlY1NyTndEeml3LzA0Q0NobVVJWVdFbFc1V3dPbkYyanN0dHJrZ2pDVGs4ZDhJMlJqRDluTTl0ak0vTzZMWWZwcTJja2xxeTNPaW0vazIxOEwwS2FRbXJZS2ZweVVGQnRvSnhxNjBHcGx6ZWJhYjJzRkc2b0lQY2hrOUdoV1Z6MlMvMDhoZEMvcmVmaUpJS0plY0ltNS96VllvZDl1a2ErazZWRE1LMnFZdmlmNFA3RnJLWmVFYmZqc2VOS0VZTWRSQ2l5endpRG9uL0pSYiswUkZXMFZGV244VmVNQ1B1MStma2ZSbWcxbDJNUFRNT3BiRWZmNFZkRkYxMmpHOXBzL0IzVmlIQVhiS1pYbEhHUzBhWkVzRkphZFJjK2FHV0tQQmtmTFNvTUdWVHgxeHAvTk1SR0k0WkNSTU05cnBtdmNHSVpqS2E5aEF3RldwOGhCQjl2WjIyU1k5RFNTUGQwc1lCUWFPWUd5WWdWdWlEaVZUQlBBdlRKNnJOSm53cFYxSGMrWjVKQXN6S0s1eWRuK3BENjQ0L0daUUpxYndEMkF6REFxY2pXdU5XZHljUkVLSm13aXBBVGpiU09UWmdCelUyOHZXdHhxSm10VXFYT0FuVzhOQVVVQytGaVRYQUFNbVlselFJaGJ6RnpPMW53Y2hUNXM2QU50WE9kcE9nSi9RY2NZM0RrMVNuTFNYVUN6dUJpVE5FZEpMMkVmVUpYVlBIcjF2TlRtOW1KdEo0R0NkZGQzeHFkQ1p0a1pMbFdnVTBoY0NwdUVtbjAyM0hEVjdYZmRGYTdpTXI5S283dFgzWU1RVkM3RDMzNjF6SmcrR2p4OHBXdk0vc3BCaUgySk04ejY5aE5XTmFlVVYrdmFNancyRWFseVFUSW5jMWpUcXNwN29QZ2FwdGNTa3FqNjZNdDg4SS9EY0xwcyt3MkpaZmw1RTI2bWY5a2pGd0FWRmtML1pOV0Z6NjdkSjZ2bFdhTHRRQ1pjRG15ZEEvOCtFVmNmL1duOWFPVG84NG8xZjlmV0JINGg5c0xBSVZHVSt1VUZRaHJMeXpBeEFGUHE0dWQyUDdjZE91cFF5TDN5K0hIMFVrbkZrUENZVmJUY0s3ZXV5cFFaSVNoNDRSemhVc3UyTlBmNXZQV0tSdWZwbG5pM2VVdTZKK05NWGRmdjNpWTdQVWZ6Y2Rrek0rVEJKeE4xK0lRSGxGWkdqSXhzUEdBckJ3Y1A1NnN4Zk5WZHZzcWV5QSs0MTJpZjBGbHdWbnQrNzRndmtWeFVMcWVnME5tbWUxNndVU2dLRUcrSGx1SEdLYnlBQmt6NXZudWJ3N2hVMmpMSkhmWHo0bzFpa1J3NzRGZlFVRlpOajY2NkNQcnhiTitkSXFTRXpCdWk0Q0FYbVA0VVJBVGoxa29QbzlvRi96SkxlcHlyN1FMK2VISTEyT2VkS1MyWnFHcitDajJCdWlrRlBwRDR1L21GWG41V0svSUN2ZDlEc3htZWFyWVU3L3pXRDNkbHdFTVRMZ1dqWEluSGIvU3F1Y0JHNHg4bEN4MUFoQTFpaWRKbWhXeGMwcktlVWdMb2s4MG1qYWs4L3RkbWc5K2ZiMjFVNmNLZm93T0xaUkdjQndLUGwvS0FxUENqdFRqZWw0dTh1djlxeS9leUZKSUVGZGU2VFlMWWZ4NVNRSndKNFVjOU4xTDJ4b0tyMGRPWFlsTTR3bDdtQ3lGWk5aNzFkcGZBQkY2TXBXaWwzeUZmQU9tbkJoNkU1ekRzUGl6RDZLNzBOWUN6L1VpcEpNUlVHek1ZOFVxQzRFUm9sTlZrWUhsS1g0ZEJsTGVJQ0c5N085eUQ4TER2QkZRSUdaNUhYTnlxR0xackR5T2ExVFY1YVJTWGliWUZUdHBoeTFIS0ttUWxBT3RTVmpacWhRSDBOdm5maU1MazM5QW53eGJMTzF5ejUzY09QWklrZHB6SkhhQjMyNXRZZkVoYUZLSmExMXpRS3hpMEREZzVybU92QVh6M0R6b2I4b1ZsMFFqSGlHK1lJSnprdWllQVQ0OGI2Z0VqRlpYazA3d0MwTFNOMG8waHNuclNMQ25XMXd4eVVycnJTSGtRQklmSDlxQjlDeEdrUHdqVVUxUVBMYVRkRFp5SUo2eUEyWDhVTzVNUzVLT2FYV0JlY20xVnZ4aGRYa1cvL3p5Sm9pZWkyT1VSbUdzSmQ0NzdBTkNuQWFyT21COWdQS25PWTRPRzYzUGp2NGw1RUkrUGFIbXdFTGNEWXc5RjZ5dHYyaTMrakY2YXJFbHpPTk1ES1U0SnpiaEdDUUdEa0poNXFNcXBjWGFTR3Rvem9FOUZYOXZxWitsUnBqeXhyOVU4cUJUdmZkMlltOGJTd2MzczMycnVxNzBrYS9vNi9sME0yejRkWGttNmQzMHVJTVNXc0o5MkNoTG1kUnVsQVM2VHJscjZHNm03Z1ZyUjVpZ0I3bE42ZmxZbW5HZGEvRDI2MTNYczMzNjFld084ci9DSzB2UjE1VE51ejdqUzY3aW1CMWVnRm9SdEExdi9IQUEvZHpUWks5WDgrY0JQeVpZSjRzMTFlZ2o2SzlUamdTcEZoVlFHUTBFZDMrblRJNW9NWm5ON1p2bGFwTUowYndUNG1yb01lRk1kQ2tJczRBYVlVcm9BMHhScmNNVHV3a0xuYlpWOXFuamVnM2U1V2gxS0tSRTFrajdUUXFNUnlWdWR0WTJyU1E5eFBiU25QeDZUQVNuS1BJa05kN2t1OUFmZFVPZFExRDI0Y0RycVlCNEZnT1EwZmZpRVc1cEVXbDdsQU44MVY2eloxS3JzWG5HL3ZPM3B0QmtpeXkrSFhjNXluRUpkRHRVNkYvSTRWSFpQbjhEbXhKNjdYYndwU0RhWEUrOXI4aTNaVlJHK2N1bU5jNmg0VEQzb1BMTWd5TzFvZnhtUCswN2g3d05ENE5CRC92MllXSzRLUkkreHBNdDByR0NkS1hoS3owRWtCajNkOUg5b1gvMTdZMDNvZDV4bzBaR2JOSTI4WFB4OGRUUlcxbHM4bmZLd21jbUw1aFcxbWgydXpEWnJkVU9HUUhyWVZ6TEYrWTZKYjNad0RPRjVQbUlLM3BlNEtscmcrMDhNeFpFVlptazVVczkvb3FWNFA1NzNWNlkxZEdsbzlmWVNnMEdsTU1pc01oZzNlVzZVdS9semZscUUzSmRzaHEyazRrUzdoWU5ZaEMxZUlEUVB1Uk9XSEk0eDZ6NHRNUVJwYnFUTEhmdTZyeWg3TnBESFFjYVM4RitlU3lmKzFwQjBQTS8wU0ZLRGZSQ25uWE95c2tCQXZGWVcyeWxyV2ljQkFERENqTDlkemZDcHYzeStBWngzTVpnYzM0THNPNS9pOTVRVzQ3VkVOK1ZjSk5menZld25WdU1XNnF5MDRZNUxwMFZIR093aE5JQmViZkZFM2FOU1g0L2pKTUVBNDB3REJVWU9mbWRrTmpJdTRoelVnYjZzMkM1a014OUdUa25meHVGcTZwRDNaR0pOeGZ2VlVuL1JFQy9ablpzdEZLOVJaWjlxZE9rbDBRWUg2ZDYyMlR6S3JJeUllZlpTOC90SlV4a1pyTzdtc3RNbXdwMUpDSjRERFBGeStnRmVGUGhEcG9hSjlZc3M0TEd4bFd0Y04yYWVYemJ4VURNZ240TzRYVjk3QmFUZFpkYUgyN2xjZHZ1Z3dnNnRIaEZWbUJnUVFPajZQLzl5eWJPcjdiTjI1Njd2dEVVbHNKeXVvZEV3YXJyY3Y5YXU4UTYvdUZxa3gwK1czWlk2NVhTZlh3blBnQk5wOG56N3FzYXdNYW1sQXNVQ2NwdDF4TzdFbTUwekhiaHV6c2lRYkVOdmcwSEpaNzF4Q2dFcnZLQjZtNmtRczZ0RFJQZ1c4dk9SdTlMbTdsY0VKQUlEbXJrZzdjMWNHengwUkZMYjVVczVnNmJscEkxbWdzdWEwY0k1RG10Nlh1Q2M0L0hlOXZYU1lZb2doZ3hqckRZYWNYN3N4enVySlFZeldSd1ZQV2JZYTBraTRsQTNkSHFwZ2tXYTFjVU5NN0lKL3N5VGUzMG1Ickt3NndRci9TMVMvd0dpZ3dyN0o1U21INEZNekpJT0w0SUl2VWdhWXprOXlKd0l5amgvMDlkQVovYzFHZFN0b0RTMXFPRlZ6YzJ6b1FqYXp2UE5CMmx4cE8vb2x0M2lUaElaViswTnBIYlIvQ1NGL2VxT1lvWXN0cDY2YjBOcnRHcEYyQUs4MHAzZCsvbi9WNmZpeENXZjhDSFo2UjVQTlhzakgyQjcwSmpXODFsK2RFd25hMWJrN0lLRE5IV0VKd2lmaHp5V3RIZHRRTG1ZMm15ZGgwY3kvTm1RVlpodFJrNkFzWU1kUGdMMnRLeStzNHkrOHp5Qk5KTFFsQmhvcGE4Nk9pUDlrcFdZZmNiTHRKTURYdFcvamtEQ2JYVGJoa1l6Ty94WmlxQU15TEMvaytIY252MjI1SVYzcEIwTmZoeVp1QmVNZUtVb1pwQ3VRcFZnL3JPREowL3FJU1NrTGJwU0p1aVowSFVId3JRWEJPWUx3RnFNOHdUaWVGQUxLNmN1OG5XcnVBZ3hmSWlQdkdBUHF1TnQ2d29JQWdCNHpET1ovTjljWERSeHRHTnpKckx5bStqUmFsUjZPVnUyMTRZOE9wRTdQZzh4L1JVcm5uQ282aGdyM0hOa1p1SHMrcVduMFVZWXc5K3FhVE0xdXMyK3lFTGdYd29ReFdlMDlGV240ZG1UNTJ2eDgxU0lCN3BGbHNaQ2xkNkVHWXlUSytaQzhaOHAzVDVnVmZEQUY2NFhUNjI2MTNGUTVicVIyOGlkZEFMa29TaHd4Y2ZadFkvZzB0b3V2b2x5cEtEQnlqRmREMFFUNG95YzUrdjBzalJPQ3NSbnB0T0NWNk96SzU3bWdqY2VPVFFjV29hSzgyakMrempmVzhZd1puK3dvRU5UVDBDRTlGSDVlTjB6VEk2U2w4TERqeHE0aHlTdDY0SXNyclBHRU5HNlpRcFF2RW1TMkN4M0Q4NGdWYldJSTVpWjZGZE9jOE1xbXI3UnZkbnBGYm11UFFRbTJuRDlhZlN0aS9HQTBIb1ZVVjRudGh5WXgzKzd0OHpNdFp2K0hXSWZtNmlrVlJmOWFObGIzajErS2VCUWRoSEFMLzF4eUIrRHBHRTlkVXFUSmZpVXp1b1Vjd3NMZHFqY1A5ZDVrbVl0UHFveTJ6MlBKNnVsZ29yMXMvVWloVUhGM1ZrVkNCa3MyNGRZRDlXbzRDbXhiVVkyTzB6WDZMODI5TmNRclc1L1hidXhVd0R4dGlxdDROamQ3dEtrbGhmV25NSXdMWlN1bXMyNGlCa2R4NU5yMnh5NjlWQVhmbld5N0NJbzVuN1NNdlNMN0xjdkk4Q09XTFJGY1dYMjIvOFdwSDJ3R0hTT1dKMUUwbUk3NXgrY1dJVlppdUZqYVd2V1BNdW1uZ0wxd0NpN29yUngzWTdaSVZVZHR0UDNzTVFWZzZDVCtUMGtHcFIwZFF6UzY1bFgrbVpCUWlPL2JIckdHL0hBTHJHVlhZeDNoQWpwZkwzV21BUWcxdU52TTJGRVFoOTkwRHBmZE4vc2VzRDhQbVExTXU1Um45RUdyNFJkMlk3SWJXVk12NWxsQW1Sb21KYklOVXo1Sk84TC9ZUG5aSGdiVndGWWRxZ1VwOUNZQXRrakxRV3ZOckFOSmxHd2ZOKyt5aVExeGd3bzYrQ2pYMVpOSkkrc1NtazJGTzdiNjlhbFNkdS9ER0J1M1loSVorSnJUbFpHU2RwYXp3YSsrajdQRXF3NzFsRU03Zkw1ckZGejl5T2l0NEp2bFNnNHlqSWRjY01MNWJWL2pWSDQrTVZBN1lOdFNNUWRHT1dNZVdFOTJPRGRyRnJSMk84RGhlZzMrVXBwNVJTYmNPNWJTeFVpcDNCUllmY0ltM0FyUDl6eThEdThxek43QzVJREd4TlZyR0xnU3I2SXVsWkpiSyszeGtVcFpyM3M2eXFnUGtQQTY5ckgxZzgyM2NFd3U1Q091MnJ6eldseGtrS0RYVVFyZDVyODgyOXIzOStGSnBOSWpGT2s3dGM0NFl1dVZXWTFmWUFIQnFzQllabzhlMFF2c1lFS29PNHRhNmNPT201MVM5U2lTV1JaWXpFWExyUzNQSURFZEw1VENCNXF5c1lNSXZqSzF3eTlIWFYxUXBNclY0SW8zWklSQWNRcktoakE3NldjQjRQSEFaRDhjTlZGWHBWUVpIRWRVN0NEN0ltQXFZYWIvT0VRcVdUYkVna3hjMzYxdTlhVGVTaVlEQlBOc3RiUU91UEJkWVhRbnRxWnlhN1NNcDM2MTA1blZvK01tdzh6RytycWRUMXBFdWE1dFBPc2ZaSjFaYUtHdFNQRUF1eDJWMlNwWjRKdU94WEszbWtiSWVjSE1kUlhuazFaYzNDQ2FsUk5vR1RjelBpbHNmOUNsRDBRbHJGVlJpZHltbkRLVjlGQjBqVXdnZGlCNEcyY24ra0ErVm9NV01nL3pSSENmR1lrYVlMQys5OVRsSnJGdEJiY1kxKytwZWd2VHk4bWNCRXNONC9xVm1jSkNFc3ZWMjNSc3ZaR21iZUNDM1I1TTdvS20yaFg5TTM1Ynk0Vld5Qy9ER2hGSXJQMllYVk9VaE54STk4WmFVVXA4ZEdMbDJYM2JlYnZqL0hMLzB1WHFhYmVGMnRsYm5DSWllUFVaQlhsekluZnlCakhQMUE2OW5WTVNDSE9GeXBEUjdjeXlOcmdZWndVUXJ6MEs0eCtqRmQ3WE5wclBWbDRMaXVJUVU0Uk15d09TMnNISWpZazZBUGRFRE9acjZBVi9MVVdoTTF2ajFKSjF0QitScFNEVGpGMHEyY3FmMkQ0dEEyaGZ4ejRobEtrRFZaeG5jSHFLSml0MXVHM3RYbGEweUtMMXpzTENHS0FQMW92aGdKYW5weTFUMUQyQkZ0ZHpiWWlYenlaT2pEQUxrS2ExTzZtcVJJVWRLSkJZY0lvUDhpWGxOUm53Ni9QMGpYVmNicVhXbWZKRkJsU3hmOXRFS29MQzJhOU55WFdYSWpOU0t0elBGTXNHMXlXMlRLK0owWVo3anVsZDIxSk9PbHFEVktaMjR5M3Y1aWlaS0IzOWJIMlluVVlmdktXZVZzcDZSRElobW1hTkdFdER3SHJtbWo0bjM2dzNUR0hzVmJpRmJFb2JQSktWRm5USTFUWUFMUm94RGkvWVA3dFhXbkNuKzV1TUVoZE9sUXdLNG5pS2JvU2RUSWxyL3NHaytFempyMHlmU3hkbEZrMHhxY0xWb0s1ZU84emZ4dngxeEtlcjd0M2xYeUdqcU5aUVB3Z25KNTkrbDJPSDFnRjgzS0VqTUp4all3Yjlsa2h6RkdrNGUrSHNPWU83UkdwZzhJcTFGYnVBT05xWEZMUEx1SVVnL2hlRzNHVHIyZk02MEVGbGNoR0ROclBqaTRKNWhXRlFzTUFCSDNCVHZYWkFIRlF5NjRxODVoaE81dzQvM2dkZlhDSEh3WnFqMSs5OWx1RUFoU0hDOXVDVUxmUW1aSGcrMDA5aEhRalkwZ0NuRlJnazJWRzdaRDI4Y2VLelI5a0NxaFpURURaaHlOcVdUcHZMWDVmSzRuTlIwQ2NhaE16cDhhWkNIamhQUnFYYU10dnJ0RmNKdjd6S1pOTjlFS1gzcjVERktvNHZxenAxUnBXOWE1TXlrdGtia01HY2ZtdWZJSEJkbDdTZFVUSFk1R25EMi90cWFqRGVXNlk5SHV5YmE3N0xUbkdpdXNnUnc0RUxTTzhhVTdzTy9kSVZjSTdmUmhGcHplcmptcEZhcnRHck9xWi9kTEp4a3hJRFpKbmhpblM0Z3NkMzdsbVpuNDlmR1pGdGQzelA2T1Z6TUE5MnFLeFlSLzRYbUlpMDdwL3hTeWtMRnFpdEtxdGV4YmN3SFpGTVhCUlRZblVIY0JFam50YkxCMngydkRoMXRyVWtuR2xnV0J4cXIrbWtmUVNoVGZDcU5ESWdobldXRlpTTnM4OHZ5WmhzYW9mcTJlalQ0VWVKL0xxL2dIeDdxZjVKYTVwRkU5SmZTYUlPSXA2ZGFhVExFUUF5TE5FVXd3Z0FHUVdlN0JVRS9wd1RkMXo2RWkrazR3b3pFb3pYZDFMRVFnTFFXSDFzNjk3WG1hRUhrM3dTUkxKTzI2TzM5YXBvbGI4M2dYNDZ6NWROZTlMRFBod2lTQXpRRFdBVEZXMGRhZUJCS3pRT3J3T09pWHgvV0h2N1A1NUlmSmtYbGkxUU52Z3E4dTBKRkg3RDA4M3B2TzdvSm52Y3FXdm1ucGQ2cHp5NnRINGF6WlRZQWtxanJmb0RMWmdxb3I2UjNWVzh2OG5MRzlQVFpvRGxCMUFWZW1KMitFV2RFWksyaVdxcjVuMDZJOVdtUFdFZFJKUG9PWEJaOWF6RHl1bXpVaURmOVVCL0VlSlJvekVnQzV6RktvMzBpQ0RmU0NpQmdLME5oNXlVZlI5VHFZdzNnRHh6TWJpNFRsdGZadHdMeUJTNmJVbi93RTJwams2Q2h4OU9PMTJqWlFFeFhRNi9NMnh5UWxHcWwvS0pBeHJhS0YzQWdlRWMycmsrS3B1NHBYV3dFOHBXTFFNZUhxSW8zRVlaWW5xdmpUS2ZhejhzT1R6c3VQQ1B1ZTdHTEo1ZXJxRnlpeUtXMktqem0xUnNTVDBIWHF4akRQZStyUDhyYzQrZWdObHpRVUtqTENNUWVVWXk0ZzJwTzZKaHllUWt2M2J3Y3crd1duQmVYVGZXaG9seDd4TEtxVGg0TDdFbXdTcmFENXZpOVVPeDY1TUdMditaYU1tL1lMTkI3SUlMVXZrNlVESDZhVDNZVXlWZDNnQ3YwbjlDVFgxd1MyNCtZbTZqRlduNlo5RXRtQWN0aERlLzNsYUI0K2tkU3Y5SFdvdlRBUGhVSXVYcFdOeGlJMWZoMHVreXo5b3lkbGU0bzFlN1NXSWl4RkJvdE9jUVY3NEtCTG9qbDE1Y2RxR1hSRGZWQ205VVFWSndia0g5ZXZGdW83bzVHOFJmdmZoWUJaR0VVNzdxaUtQMVpOUXlnSktPQlNrZVBLSjh4bGx5eHNOMVJ1Wkc0WHF5NUx2MXV4dFFqRjJqZWwrTTJiVmF2VWVDMU5xQzhTTHdLN1NvSCtwRTEwMHVVQmxUd3NOUERmWlJvUkV4UTRjRTRnTld1TTdvYllxUGlHRVZQenpOL0xXekdhODczeWdUTzEyb2hiUGRZMHU2cUJaNnZIQWNVbHIzWUV3aVlFNHl4WmlZTFZieFNpSjRDMGdTbXBreG5nanYzYUxaRjIvR0pqclo0dml2SzJrZmxpWkdmaFk2TDdqY1lhZnlIQzh3SC9rNmp0TXBkb0w2SU14TlA1Z0xncUhRdTFQVm9vcE5QVjRDQ3VYdTlTNTVtMXVxbXpUS2VDUkZhTUtaZ1VYQUUwWURmZTdwd2VIamJhM2ZUbENLTU13ek5jNjEwMnI0S2pMU3JPUlBOUmVLcy9TNDEvSGpjV0NlTldoYlVERHVSU1pNRFdZeFdaR2RYTU1TT0ZOaGZMTHlmbyt5YnB2bC85ZXpKazhBdDhBMXRJTkFZTHFwRSs0Z09jQjRPSWVHZVM3Qis5a204YlJMVzJHTUFRazlSaTdVOGc3UGxkWDIzdjVSOW02WE55eXl0ZTdCTjhNcy9BRGZ1am5nR3Mreko5RWxlUXRESHY1dnYrSlVSZUpIZU4ydHBzSnJyVW5DVFVZTGIyR0YvWTlQcDNwK2FVWm1ZV0NNOEhwZFRiT2pVcTVsNGdIdFUxSVh0YkxZaCt2Vk5oYldzdzFjUDVjNUh1M0g3eUxMbC90Uzl4TFZxd1dKdkE5VERxUWZTSnJSU3VzVDFvMCsrbmRVRDFrRHo3blhYaFNPN1pCWURsY3lKOGJJZ2RxQWM3UGQrZWNlUkN6eWFsSkJvOWM1SVZrNXhEd09zeEJKTmtLdkJidTNtdUE3ZU1zTDVpQXNJY2Y2UTFXWHVLMS9KWWdaU2tKMTllc3dveERyYXA1dTliV09Td0dRb0dzeThhRUhwL0t1SnBUSHIrZVJPa2JoQ0hEQ2piS25EY1BGVWdmZEtxc2dEdVQxejFucWFSZTRuTWEwVXhteFFZSFNiUHBNNVJxdmtuQ2FEaW92RS9NdFo2ZGlqS09uYWwra3J2WEhXZVVoQnZMMGxPWHZNMVE3L3U5NXA3RjFCZFBGMUtGVk83OExjbGloQXdtWTRBaW8zN0o0b3BhaWNSYWJwek94NXdmSTROL0RnaW95OUNKTjhzVEphUE1nOGJjM0NaaE8xNDR0RW5YaEZRTlpjL1QydFhMdUY1ZmQ5WXM3dG8rYmxYSm0vTEhManpnTUY5blY4ZVM1WEs0aUlDVGtMWTFXcGpETmVUems1aWlFekFtaGlRc2VOditoTEgxRGhiUG9BY05BQktkV2dFemlCektCam9rWVpxM2Jaa21Edm1yelVtajZ1aVZqVmp6V1NSZmZmMFlQWWtVL1FKWVVJM3dHUFc3VlBBdnBzNzh3UmY3QmF6Vk9pcjVpMnFVcWFhQ0luQlkyVW9kWkpVWFVWcmRBSXhTbk9IZ0xETmxVZzAzNFBoVmlXeFp1MThvZ0ZOREx4d3N3cDlQWitWYWlOVXErLzNvRGVRRS9VaGJSL2NVc3dhb0dmTWVzb2NkcmtqVzYvbmZLTFlCUlNiVjJ4Mmw3dGUrWkszR2dNSGQwRHY5eTE1bzlDQkZuRXJzYmpTNkdRWlJmeFY2Z0ttVnRlTnZ2bmN6Y3Vac2JNbmZLYiswUEhEb1ZkdmZwcUdnN3V3MHRVK0NlYlRqdmNJNWdhOC9aUWVFbG93STVLUHRGTTkxZ1c4MWxHZEVwTmlrRi9FR0VndjBSbUZwNXhNYzFqK1B1MDY2eXZLeTI1N1hDcXp5eW54RUJyRzVpekJxNHl3K041MklZM2tRcmpFSmx0RHFHWlEwQXdzRzJFK1hpNk9IMWp4RXViTUs3cHBGQ2FEL0hGamxmbk01TjIrUGl5Mk1zTGJtU3F4blRScWJjMFdWNDh4US8xMUNXcG4weHBhVTM5bXkxK0txS0lMbHFhNDVGT1lqeGNsRVloalZucGJCb2hhaTFlMmkrUUhnUkJOUzRYQnEwbU0yajFDRlN6cjFRc2RxcFNTdmxXYzgrbXhwcWtaWGRlZ2JsS2o2UHRjdlh4UEFPalFndENML2RpUjdRRmJ2YVY1TUVVZXV2VThIYXNHSStDcDBNV0FCVEZiT3Y4L3ZOaDRZckNFZ0pyRzlna1JGQ096TG10Tm9GWStTcXZPNVpEN1N5ZGJnSmNzclBkSjM5eFNsYWpDeE9nbEs3dkExMGwzL2EwbDZNSXJlc0FQZFRWZEV4SEtTZmI5RWkzSGJ3VkZPT1NsdXNmSklSc3FHd3pkM0RBWEk4a3RyaThiVVFMUDBvWnRVMCtaTFlZS3g1WG0yak9IbFJ2aGZ2TXJiNUxoSUhPSWxNZHdzbUErVnV6VUc3Q3NWY3E5UXpFNEN6Tk40QzJLTktmNXZKWCthYXpsVGFzWHVpMDNyMW1tYXFHRWhYOTJSYkErRHlVaG9MbzRXK2UxUEg3VzI3Zk5OWE9tcGxoT29KZFNRSld3RXM0c3lGTHFBNy83L1RKdHhOK0NlTWZtMHVhM3ZBNnpmYzVNY2szVVNXaGxTakhsTjNyY2t1cEdHZzB0Y1h1dndxZE9yQm45UmFGQUR5TWg1Vkp4TVJEWGxkMk9VNXJ1dHBrVzlmRzhDYTYrc1lOL001cVFIcDhBclNrMWdLc1NnVnJQQi91cXA0UWRxVWxHWmxYaE5uOHI0MTdPdy9rWUw4azJrNkVJVm9sc3YvMnoxSnV3L2ZadHJDMW1Xa05haWVBWEV4cC9qRS9HYjhjWjdNTVhZTWRtYTE4dFc2dmRWYy9qWUhBTmlMblFiNFRpTU1QYTJiSmd5dHlZNUtVb2FvdFlUM0oyLzMzbXg0SDl2RUo1dm1RSW05anZYait0WndtOU5leVZIc21mU2N4Uk03SHdZQkxtTTFucEhtTTNBa3A5UEFnNGJDTDhTVDYxVHl1QVllQVJMS1R6R2pkYzFjZWFqUWE3bGNENTJLUFhCbHMrd25pT1l3Y0ZENGx4SkF4dUFLRjFvR09pN25YZFVUb2hDa2pVd0VZMFZzdldzRWRza01vdEpzUHNIUzRabUdtb3VQaXdxMmxrcHZKcU5iaGhha2hEM0dXMTV3Y2hOZEhsblhYNHkzRzBZYW1MRStENnQ1bzN5UERXQUNvS3JCdmYvVmg1bnJMbENNMXJRSDdYUjB4bm95SjVWaDVweWJLeUNKR09aaHRPRTZKZTcvbjd6bElUaElUcXlnSnk4em1TZHRwSXB1Rm9ZREdaaTdwQUhnSnhReWl6SHRKVWROMSt2a2FYbW1XaUthcHhiMzVDQ2pKL1ExeHJ2Y2Nzem56MGpLa2pUSTVsWWNYVktTQWpEOXRZWml2ZU15c3llKzdXSTAvUmdZZmtaR3pITm5IdkgrRlg5TUtRR0JBdFNrYmQ1Ymw1dUpYUS9oeGRiYjJnNWJNOEF2emgrc3A1Z1ZqYjZkcXU5cDRENmhBckNrU0hVak0yRS9qV0ppMzlkeTl1dU9YbnZrc0FubVJhZlU5cFh4ODd5SERvVFN4eDBqS0U5d0t6RDdxejFkYnR5MlhINEhub1BDNjV6cFUyMXFtanZrVXlIZjRvcW15ZFM0eGs4R1JLT3JqN0dSVExLUCtydG5uZWV5Q1N5SFBxaTlnUkxXb0RXNWhhNEJyOGNUaDYxTFlBaU1Hak1IOFpRRnZPRm5hZjY1WUNaL0JsRXcwQzhIb2M3UXBkNHhCdEZNTjdNTVhYNVZiY3VndEJYOVdRbXIvYmQ3eTd5alRNaTg4YThETENCWExkWEVjdW9DTFNabTdqRElmbGZNaU5FdGpCQnFzTVlhQjcweGxtZmF6eFNFVWwxV3BxcEJvWGN6MHlYL1RTUEFybXBLc3ZKZkNzVjdjRFBtY2ZmcklDN2NVczVKVkw2YmsvR0R1OW9mNFFBU0pqYkdyYlppcFA3MUxaWXRjZUU4RWJCRXB1ckVsbWViYi9BL1ZmZk93cTFxb3ZhTHkrUWtjcTBBZ1lWS1B2QmhlOERsY21BZUgzVXljc2pIeHFicmEwbmJPYm4wL0FBeXBleHlHdWg2YThHRXJ6aHNCY0VhL2Y2L3F6TUlCUXRYZ25MbTZWZGFrYUZQMlEwQmpVRDBxVGxzbS9jc2k2RWswKzFublZtRXlzcWdpbkVxR0pQYmQ4MDZLOHJ4SmVObkd0MXIyUS94Mi9hcUdPcGlNcUxLVU9SQnlqQVVaQWdibEJTNjhsd2lEODZWNjhCd3gyalRKODlwUUF2am9aQ2hhTXk5NmRlbTI1Slg1VVhpUzZPVHVEeWc5QU1mZ3dWR0JTeDk1VEYvMzFPMWZpVFVsU2o0M1FGQXhzeWZEOWEwWlNNRWFrSGtjUnU3SW83ZHIrZzBCK0hlcXd2N3hBQWhRRkhnWlpVQUZMTCtmSkM5N1k0emhkZVdMTkdJZnMxUFhaYisrNERQRFJzdStFb0NxbTlCcFRKeHM2TWpPN1JyZFJORTRtbndQN2pHUThZbDRNRFZ5N05oUTVJWUozVUllNTN5SmlGeFQyc2VVYVl0dXNiM1o1RHBCSlpwV3FseUdEN3hQOUZtbUZGdVJ2TGNGZXR2QlF2RGViSUEvYXo3L2RXb0VHZHY1RlJtYzcxdmJTMjc5WTByNjVpWHAreEM2cVFJVFRONzVTeG9UajU1N0lFNCtGdjRBd1RVUDJabTR3UkRhekt0RXhFcXNVaUx3MlZDeDExamUxR1FRVFRaNjYyd2p6RjV1akJKZm0vcFpaV0VGUktpcVAwQXA0cVpHdmFEY204Z2NHcmUwQW5hd0tEd1lBNGM0VHFZK1FLeFlqbkE4alJCekpJOS9vRXZsalJyZjFWcFRleHZVODV3WVEvVHp3K2VuZmR5eGQ1Yi9qK3lxVitFbnZZVll3RWlBeDViMlFKcHdob1dyWVV5d0tkRkFneHZrWFJGVFZkYm1QQm5GRDhjazdvNHBZaUtQa1d6VklmSGxpUmFXcEN2bVhrb3VaY2JKNTdYVXRWMFR3eWsxSDc3eWRNeVYxR1p6M2JmdGlKaEN1VnFtYTdacCtKYUZKS3A5VlJUaWtJbkVYZURoYm1rRXN0cGFuY3V6M25iUWtxUWhHZk0zWENJcGluVnFmWWNnUDlacE91YVRqbEdUV1EvMDJTazRnMERHcXlhbUxBVm0xdTZRdWFudUV3MWFvaDR4a1I3c0hpQkFMZEZsZ1VhZ3NwUUJZQk9jTnc5WlpwTEt6S2VPMEpaTGhzNUdyMmRvdHNJdTFiODBMeVZRa251czh2ekwyMCtIWXBSaXJLOFFETDNrMUpuYWpyVUw1QzJvNzFhT3dEMHpBZWpiL2I4SDNvdEtVRXBzTzk0YkxjR2xXL3BVeFpxWVZWSE5WbHV6WXFMeTlvSkU2WEg4bWphZEswYldURnFMZjNUS005R1hHUnEyZk5jazQxZTlHWEdMQWdIZGNDOUZQVlgrbVEzaG44RW1nakdyR1NZalNndjRkLytZdVVIcWxoRDZ1bjhiRmhvNTdwSGhTQndPWC9Tck5rM3JyTmJKZ1dDL2pxeDRrVHh3SmRqaldjSzRyZkI4bGk0MkgzYUtmQ0FFQ084ZktSZ2luYjhKMHlrVlg5bE5TakpGTlF4dU5FMCtaSVdlZUFlWGZldXowQ3d5MGxHVWxBVzFQTXdYd2lMdHZIZ1BhRzkvdWUxZURtK05jNzQ5SUlidHlORkNJTVJJdGxRdzlvamtTQlc1cVlGbjN1bVVBSVlwRlhvNDNYd0pLTVpibVBQVDNLR3JpbXRCam9FREp6T1EzcHlsemoxWS9iNS85MTFqNkFzMFEzYzBxbjd2UEhvbEovRlo3Sjc0UjlmcFZxaGMzQ2tHb2lxSGFVRXBXSjRMSkdKVDhSQ09GMHV6ZU5lQm1UYjkrTjQ2YUV6cndpMFE3MXJDWGVmUmNrSTRlM1ljZncwKzd0Tnh0Q1Qva1hUSWZmbG12OU0xVEVpL0wyQ1lqbDVYczNmVXhNQi9nTm9ja1ArMzQ5akMrUnpSby9wSUNDWit1ZFhrTEJNTDNUbVY2bW5OM0tsUGRZQlR2ZzdsMk40QWRUalROaklTTHNJNmtRbXFteFJ6YVVSRUxrZGR1RVJYZlNqQTJNYmlWL3ptYWdaMW55anFtdjdnYW83MEtHdldsTG1QNjhIVm5EVFhOQXFndUlobSt1UTczVUZNdjVGeEloT2w2Q1dzcW5COUoyeDVCRmEzbVIvSEVWbzNrTUJIU1EzK1JHbEZoR052eTQrc0hFK0JacStPbVpya01rOFdHSUQ2bStQUjhyNXo2d2ZPcjBwQllsN0lOS2Y3dUF6bmYxTm8xcGZOaXdwZkZGWmxBTFZTZGdJeHk3QlZ1RC8zWTlOMktnTE5EUHE2VHV3YzNLZEdPd3dMdmsvcmJxdEtpK1NJa1NjNHRJQ2FPcU54cWZhY2xGU3hZR3NyaUZsQ3FzODFhUU55T3NWUko0dTdvbE1OU201bGdxcC9nRHR4b2ZiY01zK3p1RUhPa2lJZjkvNk1OSWlSMEdUc2lQUGZvUVFpZXhOL2R2RG1jbGYxV05RcFdXNlYyUmVGc0hsUWk3Y2xSR2JscUlSWXY3QTBOWDF0Nm5wc1JCY2N3RUtBelJVOWZTV1ZEQyttNENmL20yNDNpNmc1akNiS2M1WENXOVErOVRBTFZwTThRdW9oT0ViME5mMCsvMy9NWS9tL3RMK1ZGNUhBWklmaWhNamdmNjVjS1FBb1VGd0VFQWdnTU5kNm50RTNXM1pCUHoraGVvTUVTQnIvZmE4bkxab0tDOWlzeG5jbDB0a0xzeG9vZ0pKZnB3UFM2VVgyeXdYSE85WE5WWksxbng1UTZWcXcwMmJEUzhzZnFnMVhqVDExaXpiRGd1aWlZWkErOHpzTHZ6OW91VUJBbFM1S3pSRFBkcTNpZ3h3UWxJVWttOWNLWVRQbkI4M0FUdWRXV0gvMmErek9UaWdGSXhBRlZJWlQwUnFOc2hyTDR4cCtaclpVSkFib3ViUm9ubDlkbWF5NXZpYTVKR2s3U200V0M0QzEyL3FzM3pZakdFSEJXSVdrcmw3cTBmV0dPemNpdzF6UG9pSG94a1NGdGhZZVRKdXlTZUIyb1hZWmdSdFVWVkZ3Z3BMeVlzWEhQREtiSCswSm45U2UzdnkyYXdRWE05WUpvcnhzSkQ5MkVYa05qL1Z0dFByck96Q2w5ZHg2NU1NRDhwUDdjeEFSb01EZU9Db1FOVW9iNzNEQWp3WmVmZW8rV2NsNFY0UCtPcXN4VnlJSTQ4TEE4bUV3RUIxRGd0RlVxeFVydnRib0d5dGZndWE0azM1T1R1VFlMdEN0bDBFeUVGOXpBU1FGRG5jc0pmRmhpSkVkcG53bVA4OHB5NjBJdktWd0h2eHNkOW5XeEZDaW5qQTRrbkl3Q3B2K0R5T1pOTlJmZDBYQVN3MG1VMzAwQWI3NUNxMVlWcWFLZXpXMnlzS3NHc0hscHQ4dUlZempIZzY4bElPaGJ5VkM5MXVoaEF4aHFZb2RjdE05UlFaQXR5MjZVT2Z3ZXQ2L1RuRm13WFhDd01ub0xTMzZKMzMxUUZLMmIzR08yZDJNNUY0TkNnNWVWNmY3WVFtMko0ZVlpdTB1R3E1b0VlM1JrYmFmdTNjTHkxN3pxL3VFb1d4aVhtQ3M3dW9LVUY2VjRlaWVLY2hIUlBOakdzd292Q29xdkZFa1hCUmNXTjdQa1NYN1NOVkNBVHdKaHhnTlV1cUhVNXlFUGJZY25SVEs3eWJIOHlSTURZa2p0L1FkZnErWmVTZzJxcnUyblJMMnpGTWNISTFnYTVmYXFpQTZWd08yem9MZUYrTmF4T1J3S05HdXlUWEFKR2lWa1hFUDUzMnZHRUVGdzBJazdJNW5VZVJDeHlwRUlpcW5rTGd2QjdMKytETjJuWS9hSllQdEhRRFdUdkhuK3pRbldEZS9CbUlvMTRmajlZRlRZWE4wdGlLZnFsenczNzVEUFlWSXZjdEtvUS93ZXo4bmE1aWU3ZnNoazRrazVuWXhYWThCT01XZnlDS1RiZk5VVmNCMTd0YXpHcDM5WEkyY2E2aHU3OFQ2dVNiKzZPbENqbFNiQjdyVlNhWExDT3YzZFZEMiswbUYxRmx0WUpQWkh3djZZMnhqajRzbWpmMFVjMm12aDNqS01EV3hwUVdodXIvc1BqdVFmMDN5dkRsZ2QyV1l0bk1TdTAzWk5LVUw1ZnFld2oxaVdEN0RTMFpRbGJkcm9RMkNyM3BSeG5GZ0pYVG1CK3ZNZnMyeHRzY2ZIQmhaSzhsRnZIVzVBd1N1RWFVMzVmV2w0NFBCS3Z5anduc1NWUVBwWWNMRldTRlpRY0JicmVKcXZrWEhsNk1XT042WVRJYXFyUXQ5Vy9ORS9JWjRxZDd3eG1sVk5SRmhiY0V4cUordXEzeEVlR2ZCU25uUjQ1QURmS1htWGlMdW5UNkpFbUYrSnFyS04wR0tvQ2s3QWNtdnJWYWFKMU5BeHRldUp3anZKQ3hQTWxhclBKMVA5NnZqOGhLY0NsekxBK0xJMWNIbkplT2dhQ2RIUkJPMStLU2toWFVabFA4OXhZQk9xRldYakxIL1oyemczSlNmdnRUUkJoTDlKYmZvNGlUS1IyelA4azVVL1Vxd3RIem9YOFdVOGZDejRHWWpVSmZXeVJ0OVhRUXZ6NHpIM0w5S09QYVBOdW00eEE5SGdsRnF5elhBSDhNZEVyUFhac1RwNTliRVNlUXQ4akNweWgzNmxjR0JRR1UxbVZMRVNyN3JzRnZjRDhxaElMMGhNVS9HS3pyRldIWE1rQ1UvS0Nuc0pzTUJ4OXlPQVJ5WHVqZXlkem5ra3dRY01pQ3EwZkdBTGJVNGNnRnRuOVU2MU9HbzNwZlA3MmtManFmV2hscGZEVVI3U0p2ZHM2ZzBKWU5GcXFzL2tkdk5maFBwckJFbHBTajJGYURrLzBJZmRFcXNmNGlVMWo1TWIxcFNtK2lTTkZ4dEhmTXIrVE1ENVdOKzhsb0dFNE83cUNmVnAzMWw2KzBIV1g1YTQ0R004U3ZsR3FoWlNxclhDS21reXFhVDF5L0p0M0pxUzk5NGZkVG5TcW1qWmhQTWdxR3FBNnRhWitDSmQxR0JXR1pzTVgzaDNZeDhOTE94Sjc4WVVuM0hpTGxPd3F4U1NCUXJka2g1Um1vYjBOZG5ncWd0K1lxaDQ4bkpDWWM1anF1UmNDdHFUdElXaEoyV3VnN1VybFREd0FweDhDb0Y4MzFqQ1g4SGFsTmN5Wm1wZlBwVmo2ODFyenAwcFZ6elV2a1Byb3M0aEZTWGhWeU53c2hqMXJMUXpTVHNhVlFUTWxyTE5sYlZZSTdiakZac3FMS2VXNHdQREtoSGpsNTdrcHBvU0VERGlENW9RVDdWMHJEbUtoL3hlOHBwNUxabEs3TVR5NXAwbzNFOVU5TUFrWU1jYmIzclF0OUNOdlFZUDRBTHBCaDdvNm1RUDZVNEsybC9TVWFPdDVQVnJYYnROZkVYUlhOVHpkeGxGVGVVY1djL2FER0lzdDV2R05FZGsvdnJCeFFEV3lER1JQbVVnU3MxbjEwakRwK3pvTmhqa3VqM2dUcWhzcEkrbUsraFRUNXExcTB4K2hla1R2WkRiL01qbXhlTndPTXpBTzh5UkExdjlzOVlmNHRNS3VkTUxlVVVuNXR4WUdLd0syYzZ4Vjh5cWpQZW9mK0dOZ0FOSEcwTkNpVWw2d0hmT0MzNlU0R2xaQk51cmo1TlN6clUxMUtVMDJxS0NkdVkxc3lmaUdaWkphVk9zUXJBTHozQ1FaWE1hNlAvREJCOXVwTkZndFROeDZ0ZTcvQnlSVVN6bXIxYXNoOU8yVWdpUFpIUHB3aHZQR3B0aTNwMks5dUZ5UWVGTVEwRmlWcW9kb3FlWmxqTGFuUkNFLzNIV2RyOW4rMU5ET3FUc042cHBTUFUza2JSL0w2c0VpK21HTnFHMml1SG1wK0V6Y3hya2Y3Rm1tdFQ0bFB6WDc1eU9nYi84OGtuOFRrZW1kSU5RcTB6cHVqakpZS093cVVSWTE4bU1uL2dXVVNhemJQZDI3Rnd2b0d2VjhlK2Y5aW9rSmtQQ0JPOGlBMW5yMitYR2NTVEFOVFo5TlRPeUhXbkpncTUwbjJTc0NEelpYOXJ3QnV0TXFNRi80ZjY4azVTbEtBYUhPZ3Z5cktHaG1xNU4vbUsyYTVhM29LT1IreUI4cXF6V2VvSEdUaHJFdUdiOW16MmlrRXlmelJhbGtNdjFHUDlUWWhZRDZkb0tkeEtudGpkTHpmZVp2WXorN3c1cjJzZ0R6SHZ1dUFMSHhhUWEvS2t0TmpaU1VCUFZ1QmdDV25Sc2QrZG5ZbUt5ajdrdjVIRDlERnNwUGt0WkFNM3JqRE5QWXNQanBPNitMYXFjU1VTUEgrTEMxMk5oWUY4ZFRjU09LVjlKeVdSV3FzWU9UaGpFU1BYSGNiUHRxcEdCUEY3YWZLelMwR1hnd2N5TDdLT0UvRk5jK0xGdStoQUQzLzBEWHpKSCttM2UvMkMvYXgvTW42VzN2UVZlUWJzVkQ0Sk9PQXA3OGlybjNvdGNRV2dvL1J3MUNDNDRIOXY5WEFCc3FxdkUzaDJJYWJOZEVzVU9JVjNYRDZpaWUraGlkQkEydy9xNHJxQkJQbDlwRk9ybzk1ZnVoWVRVUC9nLzRxSWJVSnh6ZWZIWGVDQ0dWRnNsQVg4WlkvYzF3TERnR1JFK2tPWENzeCtpQWd0K0FOVSt0b05VcWpkZ2xCWTM3N0wvdU5zTjhZSVpPMDdUUWVkNFp6WVNlUXhoT0lIY3JRdFV6clZ4Mk5zQndDQUZ4NE1FVmFYci9jYm43MHZkYWFYNEU3MUtjNUpFYlNTUnJLcjA5VUwvUExucW03VE50bXVMWCtQZ2tqaVBtQjdNT3NHSGszcFhoRkVkNzV2NGlPWm9zVkJ4bXZBNGhhbTlESmdHM01XRHk1NE1jUTdJcU1SM3NTVm0xM251dER6YkZlajNJRWNkMUxQV2NEcUM0c2xaVEs5emlORkpHaWhTbUxVakN0aUVNVjBQZUc3WHBlQlAwSmZUTW0rK2IxVjA5Q0ltaENlaVBGK0xBaVVJL1NacmptNjJnb2NWWnpSQzFrWmhIU0V6YWlOTWtPUlFVc3J4R1ZaOUR2OVpVUVZQUlM3UlNacFVYNURYZ2VrYWlpZjNRVDJWOWZLRGpZSEdtY3dTekYzK2VSZnhreTN3RitoT1JIMlQyMkpFaHZkQWFxQkUxMUJNTmlJM1BkV2NMN3J0bVNDNklqenpRUVNkdFlsSVBlei9aRE9BWEErTWFSbzRVZFZVVnlWUXE5VVc0V3JsUXByRytxdVcveTh6d2JEMTFBc0xRT3VaOXFRMzdXT3g2WWR6K3dvUzJPS3pjMU1mS0Q4QW9tQUlmVklPMnBZeHp3ZnBSanRLL3p6bXlVdmg1YktiamhQc3l0ZkFBMDZqSk1QU0kwM2tVSDhDNlBrOGhqM0h5MFE4bHEraVFGaEh6UFl6QTg4eWhtTGN1d3BacjZuSXUraVliVjhwa2c5c0JxL3FEcjZCYUlUYlZnVmYxR2trRUFuN3Y3c0VSNXI0dTFSb1Rhd1Z5SW1uVm1HWDdmV3Qzc1VaVVdlbFlBZ3pDdXRuWmU3SnFiNTBoQjNpZE9FZGlNeU41OTJENmRRSngyTkZESCtkdFNJa0NFTnNiODArMDZvd2QzMGlDS2VCR01CcXN4dFU2a3VycUZXWWsvVUdkeUY5UlF1R1pWZW5uejhFK1ArN2cvcWc2UnJFTUwrdnI0QnBsY0FCdDZkcmVOaW5rQzd6SWExc1JBdjVSRkNVMGIwbU9PczB2bG1hSUhreEI4RlRQV1IrWEVpeDVVTVRvd1BsSW81ellIL0hIQmNwL0lKWXk0UTVaU1FTcmEweWJzeDRGcWZvRTdWdHhCc3VLY0VmZG9ZeHhvcXlQUFhCMHhhemhQb0s1MmFIV0NQcDMvWkVBN2hlZEJCNTZPb21jakg3c0dua205YmJHZWFnRi9nUElUVEJlYjhNZlQwdC9qNUZ0Y0xSZC95NmlHNXkwWVFPelpteFdQRUFLZ2ZMN1BjZmUzV3hjOCs2TjBvMzIzK3dyMlAxZjNHMTVaWE1hMzhJa2tBU2JCWndpQXlHSUtnZmEwdmtiNjBNNjJlclBBbGlnRjRyUmNXZWtNWno2TU1wQy9rdGc2Kzk1eTkxcmMwbk1wTlFPS2x0aVhsS2tnMmNFazN2L0N0ZVhmM3hscDRyMStYSEowQkVLRmdRZFErRUxkVlg1MnhjVkFhd21UejdVSGZaQUI0ZHh1OExxcE1XVDQvOSsvdVlnQTJONS8xbGNxd2wveU1zRXQzY0kwMis0V0VwUDdGdmFyUGhReUY3elBUTm9CeEdScWQ2QVQwSDhqV1k2ZWxxU3F5T2JWVEVpYkN3WndMVHQvWlZjYzdMMGMxL1dqTjZtSkJTZDJUZG1nQndtS0NkVTNYL3lYVGpCakovUmthV1BxOTlTRmlsWjc2T0RodzY1bkp6ck5jMEs0ak5sblFFQXE0UlhvWURldkJnNDE2SzhHVmtObGZUTzFpcHd4dmV0VHl1dmd5TkNKRC9Tam9Ubk94b0NPbDRYZ1RkWktMYmw5MUptYUJhUElMQUQ5REFVMFY1OHZQeEJPSHZ6bmdudFBsN0hubVYyYjdOYjVpNDJLY2hHSzlHVEJsYXNxbWRFMHVkeUlTVUF6Ny92ZktOR3oyRk50a2lMaG5VMXN1Vm43emRFZW0yVklFN0xMSnIzUHRJbWw4OFBaY2E1T3dRYkhKbHB3ZkxtRERCUHRmNzdkUHdIRGxwYjJ5SzErR1lRbkVXbk1XbmxvNUJTOVpVbGN5UGxtMndCaC8wdGlLMjVlNVVoMkl2ZDhvRTlFNWYydWFWbThHVWRxdG1FSGpKbWZqbzFzd1BPWFA4WkdkaDNLYTZyaG9TdVZUSjlvajd6L1FaMG81RUQvZmJNUHBFWnZnVGdUWXRkQ2NtT3dtN2dTTWh4RjJsUXlNNTFoRGNNa21FMWROMmN4ZW5nOHdvS2xOWUVuZG5nL1h0WW5xN01tR1FNYzFPby9qWDBlcDg1eFNSbkVOcUpzRm5LMTlLZ3huRVZwWDZ1Qjd6MTZ4VUxqa3RkcWNFZ0xBbVhwVCt1RDFKWVlyN2dxNm1LMDdocndldjM0VUFGYTJXODJZejZOd3l4bEE4MFFIbjRoZ3BUd0tQWDZ2N3BVSjBDNjV1dmJldEhlTmhNbXlqeldPcmRpWHFLL0dXM3lkQzI5SzVRU2J5ZmFZRVNXNm5lZ0N1Sld5TS9KZ0huNkprek5LWjY0Ung2bFFpSWZickRyaVRJcUovME1INUhQck9pOFpDbmptNkp1KytVOEZZRlp3dFNQVmZMSkJmQS9mRzFwK1FoMmxGeVp0cENQVGJnYzl1OXRaSC9kNVlvU05ZZjUxRTBUSzVjMjVmakVnNTFIWDlGT0Q0a0xpSmVGb3VBdGprU0F6SjZsMU45cXo0OHZPb09JaDhyT3pHc3JSWlh4RWlmektqcS91ZFEzQUtGbTZkemxOanVjVkcwbkZGYlBBWXhOb3p2VWJKYmxEYUdxRmVrU1FTbmVEcHhWaHZxYjhSRWxXMDJNQkF4RFg2V3N2UWZHVUI3NUZyZFJ4cVZjZDFZOU14c0szbWU3WDVpcHlBRG9MVkNySm0yTW5PTkovcGdOMnNEb1F1U1gvNkpRSGdBc0FDZ0V4WlViQUZEbUF6TVZwdVpRcHRUNW5ZZFMrbG8wRnlUb2pubkg1aFhHOG9za0tFMkYvTnl0Z0ljRkJNSEhBMzNoUWRWTXZhNmpMODVtbW82UzBrQktEUWF1WlVHeU5RUklSQ1dlSmV0dXdaQ3htWXpMd3NMUVdHcmMzeTFNZVVpMjJyT0VZNHpxK0xmWCtrYURac0Fvd2ZvUW5nMzU1WVVpSGJiUmJaWWk1amFUS3ZJN2VibG9uVnJlVURMOUdaMUgxQ1pkVHlrL1ZSVCtoZjZ5eTZUZ1RUMmpkWWZBbUdLN3hML044MkltaW4wNmkvdUJJWHJYVGtST2psakxGUmRQRHJHYnIxbnBKTjBtYk50MEpiSFk5RmIzek1HUVF6d29MazVESS9LR29oSWxQNWZJMmZzWVhZUTFldkJpZHpJL3hNVFZQVmZIWTRkU0hQNDQzVWxIUjRhMGVPWFMvYU1MRlhnWjJxNjU1L3pGdG9qQTNyL1hLUWxoOS83SWlscEE0QWVYS1lDRzhBYlMzekloNmZYalp2bGQ3RzFEVXFNcXZjMzROZnlCdkFNdTZ1ckIvSEY3cDNwTHY3bkFkdFhsQU5yb2VxanN0Ukt1dFg5WGJ0UHVzemhjcUp3VHFSUGphcS9sUkJpOE5NdFd4TFJ2VDVwWEpWQkg0WkpIYmVLTUphbXZWK0ZpOEVkN05KTFlndjd5OWpHOGY4Yk5kdE5yOGRFNnR1QXkzZ0tZallaMEhQSjQ3UnEzbHZWdU00Y2NBNUpNYTVFejRsR3ZhekxVZk1JNkt5RS8zTmRHakRIYi94LzZ4a3h0TjZwSzVPWHVQOXBDbHhheXU0Y2ZNTWM5R2NwMmNYUUg2eVViVkkzRStNdkdLcmJZUFNJcmV2QlM4ZEI3THVSRlFqVkxYS1h4RDlGZ3FITUx1eDhDenNXenZuL1NqcUVnenBJZDkxUVVETEdSeWhEY1BQT3ZLOXVSZGVUM1V6VGRPc2ZTWWZGYkR2QUhBVkxSSXhQeWVHdUNkUEtETWxHcWJQN2FPQVBSUlFtRTFycFIvZWMrT0t0aUYyVmpYVmVKV0ZiY0syOGZhNS9VSVE2alpSNTlEZ2ZoY1R4YlBXSlBJMUFhSkNmSTBwaVZaVFlXcmRlVi95RWJKR3p0U2dyU3d6cld5NkdaWG52WEl3S2tpMzJSRmMydmRjQ254Z1U2YTRPelJIU0RBNEZrS3hvUVNGNEwvZUJpYTlLMlUzQkhPMmkrTktDTmY1WE81QVR5NEdkYUdzZTFPQ0YwbXU1YTE2bHJCYm03NXRubDBmOGRNbTQ1ZmtMS3IwTjVBTnJ4b3NSUVZQMHpUWHlkSktPWUo0dEY1NlMxc3ZZSkE3UzlkbHhoNWpxV0o4ZVFPVXFQd1F4bkdOenFHdHNOR0Yxa3ZveTFCK1d5RmxpNVJQR3haeE1NSEs0RmNKRlQ5UFF4Q24rK2dEcDUySmFNdkdhZGt6dkUwR05lcHdFNW8wb0hNVGtWZE9QdnA4NDVTdTNGdk5KQXBlMFdqZks0V0pONzlTTjM4QUg5Q0M0SzhXbFlSQTB6Y25MdW1XQmRjY2c3UjZudWlIYTM3T09nbDZ0alFkaUVaQ1R4NWJUYkd0TkkrSGZQVVRQQldZWUpzb3lZc0Zxczc4OHZYV3ZHa210dEtQZ2FKQmppdUZBcnUwLzRqc3ZYRlh6RG51ZkRoQmsxS05OS1ZQaWc2UHRFMTMvYnZxZmR6anEzRDdiNnlON1llMGFwK2pOQ3pTY00waFVjMlRFbEZqWnowS3hNQS84L3JmeHlVeUV6bUpoVHVRMlRpazkydXR1ZTZNcnVVb0t0Yi8rS2w5NHdsQ1hPd1d0UWVJYVpFSGVnQ0hNMk9qWHFrQXFCeEVUcFVzbk1zZGdWMVJaalZKd0huSkN2U2tHemVVWklQd0dhbU96Ky8wNDdOOUEzTkpRK1kwUGxLakdGK3RKYXlSNisraGp1am9oaTlsTDl3bndrS1QzMWNoWUtZNmgvaDJSQnVjSFFBNXVqTzd0YnArQlVuMm5HQXJsZHB6Uk5xMjBOM0JmV2ZJMHkxaXJodGZ1eWtMY2laMFBMdmhsRHU1WFdyd3FubXc1MGJaY2tpSDJ3Y2pUbVVERmQxLzNVMDJrS244aWZPTzNxRXcwbllZMC9VYnZqVU9KRk5ROWttMjF4R2JpWUNqL2YrZGhLMGFDVDlkOU5vSTlaUWlPR1JlWDFzWnJMWWo5ckhGTE5HY29FUHQ1K0htQlY2dy8vTWhYcHFoUmZmUDBSbEYxdWlrNEdCWisvcEovZ2ZTcHg0b1RDR2VDQUtkVktaZDF3TkxYaEhMd3k0eE5MMUNyS2pLNFBPTWdQVUozSi9ucm5SNWE1bVRsWkdqYlh6S042VVF2ek1yV0wzYWRVcXZoVytpVC94WE9vNU12RU1BeUhBdk1EVDJ1eUg4a0FWS3paazFsV0MvRkpSdDlKekU1Y2RjcWlkcjNPbVYrV0o5S0s3Sjk1L2hzT3Z3Z2NRWUY0YzZ1OFNpMzFzLzIwZXRlZUJkaEpCRnNaNUxLb0dmOUVHWUp0TVkyNUpiZTlaa1UxOVJkaVlJMVV4Q05hcHlFMzFRa1NPZ3hFOEdmbmZSQ1liWXd6NE5HdlVzamFRN3Bqdml2cFFIT2ZpazhaK3NOQ3VKMDR5eFA5bXFkdWVhektKREpuOWJFdUljenRsYlNTSjlOQ09KWS9FUFEzNWcvaW9La1Fsd3AzMlg2U2ZTeE53SUJJd0RsKzVOWW4vRlA1WjREN1JKK21vNmJtaUVEZFRldUJOdUdXZDN4R1kyaHEycnpWVmptM1A2NGRVYWJ1WDhHSXkrcFJnSnUrbnlBdDdjWG16cjlQb08wZzR5RnpuRzJ4Nkd4NGhrZXltaGZrQWFyRTdYWEkrRTR0UnMva2EwbXRKNFdab3I1Rk1GSGFZZVgxbGFNbzJzTEhheGlTM3RkanorTkJiU0dnOE9OTXJlcVNVRDNzU2Z5RmowOVBHNlhnTU02S29Hd1lyQy9WNlhKK0tnbUlNdk15RWpyY1dZeEhuSlYvUGJpVDNrRTZhbFpTUk1XcnZVNFhIeHMzYVUwUFJ4KzFIVkZrQXgzWDNDU2ZUWXNQUU1wbHJZclBEcVRTMlRYeCtpc1RITjNrK0VySm9BYUhnMm5UQ0RqdnkrRTJEanpkMERBVktOMzA1Ylc5ODRDS2pZcmRiYmlwK1NPelREM2lHdUlHSXVlTVZRM3pVS05LbmhxTkpjSUZkMzViVVMwc201b2dXWG1NL2J4emxmVEc3dzFwN2dneUtqa3RveUpaRUFZcTV5UWtsc1h3WExmZkFKbTVwTkR2emZhaVZRYldrTC9IaitPSzVwUzRJQ3dxNnMxV2NLSEc4cENDMVNyWm41SEIvQWxUTWlMTTVxZm1uV0c5c0FiY0VsREt0bWxKU3d5RFpENEV3a0wzdzhWdzVCWi95TCtxUzI5WnluU3FlV2JJa1U4bTIwd20yWVg0R0lPOGtMYXM3UW9UWUZ4a0p2U1d1OUd2U21uUUE2dmhLVW9IbHpWOE5USkhXME9SL2h2NXV2cEovZzZpcU5iYVZ5YnZiRVhxNEtOT28vK1pVYVc0TWI5Z1lhdE8rYWlMRVhaSUxWTFUrQWx0V0pjcStwVFVYWmxRY0JXRnZzN1VocmpRd21ZZ24xaFlIK3Y1Q3d0TmNkVWpnME52NlBEb3g0dDZCT1BSUm5vdlhtNGNFNm1XUndBNEpxZFdNaUtNTm82MW8xYVlmT2Q2Q2JvSEFRTmhUb3ZNN1h3VHFPZ3VWUUkzK3JQZStwWXlwWkE4Y3UrcEpkVHl1YWVLeXh6emZOT0MyQzF0a0pBU1ZJTVJhOHVBekE3a0FFbGNpbHYvd2QzSEcvSUVsa3ZwUE1XeGdQTXZ6dmxZb09HWGx1UHVaOTVJbVpkR3ZTSE04MUNVQ1lSdnlmTjByckhoWmtmbmZRV3Y0ZnEydllLT3dkWDIvblZWMVhXWGhYUDk0eXNEeE1yVXpwSkxRTE9VT0NxN3pvTE1kQXdvVE1ybFVKUWVlZXZqdG1PeUU5V0xBaTBpZGgzZWlLeU84V0c1Q2NlcmFSbnRya1ZHL2dkSFNUTzFCRUVVYThVVjRLeERCSTBVamNUbnRiVWFrK1p5cTVuZ3FmV2VjSXcrOGE2bWEyNTlPRDNhUDM0L1UzbCtNaWFrWW1oYjllREY4NGdQYVhOY1d5MDlyUUdPaHlvcEtDUEJxWFBCYlVOcU9ISlNZUWRGaW9QL3hGcWFzUjJ0Vk9hMk0rQ1Bwd3Rnalk5SnpvTVBpY0orT3JnWTVYb0hGU1hoajRDYTg3WEtkWTA5VXE5SXk4My9GYmVnYy81dWk3NzIyZktFa01jdFhLMzRhWHVvck53YU54NEh2d1JQZXdYQkI3bU1EUXA5SjIyS2d5YlNudUtaQjFISFIyRVRTbTVXV2F3WUhLcHB4bTkvQzloNmlOT0lMVFVQTllGR3g3cm16dllRL3FWc3VsZnFCN0d3TmVwWlpqUHNlU1h0WmdSZ2dyb3ZHMHpaTUwybW9WOVA2UUZQNFlzT0J4ZzVkY2ZrbTNlMENVWDBIZGJkdXJTbUdsTHd0UEpYVERSTkkxSnArY0pHQjVmNXlodVhrN0lzc1JmaEsyc0tKR25SM0hlUUpYZDVjUUt6QmsrbjFHUlhSR2prZjJOajU3clFqK2ZoT2RNZlE0MEVyMWZQNUVMVzFtQzRmTTRpMk11NnRLWHRPSHNtMDhGSUFMU29KWnN6aDVOL0dyMzZJSkVXWGZtam1WSXpZR1JWd2pjbjRxWFFvZDZudUIxZjE5Um85cnJrUUd0SUFYU0ozZUp1SDlqYlU4eEFrNFRKRitsZVV2SDYvSkk2WFU4NUNSZWs1WVRkeTBwME5TWUxVWFErV0RVdVRwYjl0eHhtdUFNVHN6cjVuTnRPQXc3bGNjTlZ6L0ZVOC9DZkxWcTdHVitaQjhOOXUwTzZmZ293cTFRRnVkWWVhQnRhRFN2S0lhOUlwaUpyNC82VTVTSmRYWlVGbDlGQW13MzgzNjZmbXZEOFh2bWV5bUN0MnJWTVFvUDBSWTVjWFJ0dWdLbkJtWjE3bVlNUkxQRC9neDRDQzBNRzlmTzhYVk02NFlpTzkxVStPcThSRUpHYS9XTFdUa0RPTUVrTmJMT2l5UG11bytMdE5wU2lYRFVpb093NHI2ZVcyK0R6N0xSU1REcEZEaG5EQU8rUm1sU0ljaUQ2MjY4eFlVQkdmcXJPU0lyNEFPbHJIRnhoTE5yMTQvWVVrM25UQVBQVnFYWTdvU2R6QmxKdGVkdnVoSmw1c1o0Sm1DYldnUDZQNS8yL2M5NzBDU2czQTBPQzZ2OWhEUzJNQ2xzWmg2eVRmdkozNnJuamxjQXJzZDUvMm8wTlRQbVVSZ2RtWDVuOFJLRDliLzBVL1RBa3NkSUsrZStORlN4T0NEZ1BTN2t1aWl5YlZvZ2w1bTIrM1JRQWZtZDRRWlBYbW1VSnhpNEl0OU1tMGRkTXBHaWhOUm5FcXNjbDNoaFVEbHU1MVB3N0hvVVhhZCtScnNNUlBta2FEREpQbjFpODNYYXludkt0WERiQm5aR2diOFF2YWhFQkxDdm5wZStqTHFCK1RleGVWQU85b0cwdnlSN3BETEg3THdGLzJjT2c5WU83b1h1NDlzVzNPdVhwSHRtSG1BQ3ROOFNKU2JHb3dXblRjK2xqUkFrc2pMMUZQUldubDZ2MHF6L1oyc1oxcXg5LzJMc3dYaFNXRlVuTHczckVUeWVVZUtKcktsdkt0TzZyMUo4M1hpdEVHbk9rQm9rcHVFN0orME1nRkdNekxZZHFrdXZVbjY1eC85bHVrT3ZzL0U3cEtlOXZmZTJQVitkZ2tpRVhrZUY2RVhUakFQOFBqZUVNc3dhY3F4cmpBcjdKVlRhQWtndXRRYlIzSjd0cyt5YVhjVlA4b1RYWEJCamVTM0pvU3ZGMlhweTdtRU0vUXpscGtBQ3dyYlBEYjVaaXhxTGI3NDQ2VHprTHV5NndKbUdIeUYrL3JtaktiditkOVVDL3luSzV0NnFiYW9VdWp4Z0FCNmtRNGVCeVpkRFZHNUZmSmtRdHhlNTQ2SWFDTENTcEZaUERYVUJGMDNseVBTOEcyME03R08vOUdkeFo1OGY3K0Z2c1psYk9oNkhzeFBHL1I5dUFmNWxWRzR0aUN3aHRxWUlSZkJHbjJnZWtLNFRLTjk3NUxuNVdiZjhZT1Y2TTJBQ2lMTkZINzFoQytVaXIyNzkvMVA2M0NNTnIzYjY1YmxJWmVkamUwUmp1WDBUVzRUKzhtQUhZSWdCbzNOVXYvTS82NUVjY3JXdXpMVjlZc2NjdVFSekNaRUJZV2VHQ2dkQjBOd2UwbkRROVp2dGRSRjNxSHlKZ09SbTJlYW5lbm9ZK2h3WlpZZ3hpUmpFbkZMbm9QdEg5VmxjeTIvMDhoc0U3aVpuOWY3MkM5Z0pCQ3Jqdy95WTZnRDNsM2J5SXJXWTZmRStTSjQxekdYcHpZMGVBeE5nRlFFL3QrWjVnaU5BMStxVHVmc2pLa2JSTFkvb2pqWmxPUEtIN0RPNDQvVTJYdml3Y3JLMTlqVklHaklHZEtEdnVEZWM3eDlWU2RMTW41R0RMZURNdmZIQXFRTVg5NXRyd1doeis0ZlNmMkIySm51SXdJK295dVcwNVZZK1RFWjVSWlM5d3FaOWF4YlpXMXNjcHVzSHpuanllcngrRHFBMCtrSnZUWkF3RktuRmo1ODVMc1pSY05wV1FzRHlZb0JvTEVGMkVCNXB4Vlg1YWI1bDljQzF2RGVLWTlTZmpxdUMzUHFiTklCeEFqYzFGTlJ5Q1JWQWhTalJLWmkxbHk0UzJ4L0Zpa2F6M1QwZlBPbUdzalRUVGxkVWEwdURkemVyS3dtOERJNFY1WTdTWnBIRk1GOGpjdUdMaDNLOXMvdFZEcmJrRTB6dDVqSCt3MG9MMUk1ZUJjMXhkYzlhUFB0SHhWUUM3dU1jLzFLU3N3ZEZFU2YxS3VCYmJRZ2REU0dPaEhKMTQ4RFdTQWlZS3hJZEp3d29odlZPdVE5OGpoRnpPb0MyNlkrRlFpejU5MzhKN2hNa3JYWk5zcG84V2R5d3FEY01ab3pXc29uYzFVZFhxNzdMbnFkMHBSMTlYOVRlcnFGTzRSdCtoZWllUVA5a05nRVhDSmVoUmdvRXVXL1lHUHJtb3pkMjJtdDExTW0rM1AyekI0WkZXWEd3TStna2d3aDBIMHJKTFQzaWhsc0hTUjNsSU9PeHdCWGN1dzdDWUtkVFVjUTE3cXdoVExqbUNpdWlENXRqdGZLZ0MveDF0cXFhc0RhWXNBc2gySHNnSUlOajJ6bG9uSG8zQ3FzYlFMdC9ENitxL2RpRFVyeTZHRnRCQTVFV01ya0lwU0M3dW9OZGg3eWl6ZlhiMkFBV29DRnlCU2dZQjlsYjdwcWRyL2E0eitkWlY5d28wM3pRZHdiVm1sWWZwb2lHRlhWT2R2NmNDY01lWU1PdmVSVkphZjErWDhlUzRESkJ4TVMveHZaci9kV0M2em4vRTRNMFVEKzNjSk9qazVlT3FRdnZ0c1dmZ0JIM3B2Zk5pYnhRRDNQMlFqQ1M2WVNhQXhpVFowaVlnWlZhTElkemsxZjRXNnNPZTdwZzJqemNKak9VSEJwS2FvZTgzTUc5OTFwWkR1WFhUYjlLekhZOFhJUzZseVFwZk10NDJHNi9RM1o5TmI1T0drWWJUWHN0Skl6emlQT0RsSjZuejArZWtZbnd6a3E4d2FhTUpCdUJTZGNLQkZqYnF1R2RCRzdxRXBXRk42eEd3VXJkRDQzWHc3WlZxQ01yQ1ovM2xCV0h3aUNqUlRGQnJhMXJxNUVJdnVSaFN1Mkcvdk5QaVo1ZUMyUDdJazhSczVRbmNGaVNOQzFaNHpYOXVnM2lsVVhVSVMzcloyejNMM1RFVXUxdCtXdkJMY2pvZ0NES1lPUTFJWjluZnh4S2dzbzFNQ2RoaTBUaGpmQkRJcWNqR2cvVkQ1SW8rTllmeVFmRFZPbnNabkw1cDB4TGg1Rm0yUnA1VWhEOG9haW5yc1BuQzRucmgvN3gxWDRsTWRyTDRpK3dYeE5KcXdLWmh1MzA1aVRlVEYwTGV4bzVBVnJQcjJhRDBoK25SbDFkN3p0V0p4SFRIdHFEdkFNRDdiMVZHa3hxZk1QSmZmdlNXeU42eS9SZWxwUDZ5UmthWCtzOEplQksza0tQNHQzejExb0pjMmhwZGxhZ1NqQis0MDJ5cTMwUEh0WDEyOHZBRDJXKzhTdlUzZk9aU1BVcVZlenlVWGlKT3dQUW1WcHBUOUc4STZkSUZFYWRxS0RFcHNwVWR5TEE0UW5jcmdsRnlBTWtQZnFQSEdhMUdKQ1plZkw2UnlDZm5SR0tiZWk4ei9INmxkQVRzOHBidSs5MVpadW9mVXgwS3pMaVVzNE1CVy9aSFcyaGM2OFRnUGxVQTFFTU9GZk9ieXIwaXc4ZGpmcElVN3JNKzN5K3puUmZlTnNmUEdJdW5pcXFsWVJqQ1NWRUtUT2RScG5nMHp0dUFNa1pMMTlOOWVvVXU5WGd1eE9pYjBLMWMxOFBNMTg5ZUZTOEVXU2EzQlpBeXE4Z0k4ZEhEdnFJNld5ZUNaaVB4TnVmUWhoYUdHQUhublVIU1VCdld5dHRTWlFmN283ODJNZEI3VXNmMFYzM2p4WlAxMU1qeFBSc0R2bVpJRVlPaWhpbGkza1FjK2l1aEZpUWdsTjFlN0JCdnJRRnlUby85RlVnZGhuT0VoV1NOVnhpN3NiTi8yWTVKd2VtTjh5b1BDYXNTVmJQbEtuc3V2Uk1YQUhRbGMxdndJcVFhNGhLWmx1Z2EyUVBXc0pOdkJMcjU2TWVWTUQ5MkIrWmQ5SUsyUjRJMG1waUU1Y2hrSGdYbzNLWHRZeU55T0I5L3pRWTBaMUExY1d3UXlLS1lha3VhUThCVkNLeFRPQlRyU1AzakwrVXF0V0lpZ2xRU0JjRWVUZERsSWtJQ2NQOU02NFV2SGRDVjNEYjFmMEZVNDBDWVBhcXFJVThjQ29mb3gyKzAvekZSM0N0QmFuVS9xeGtYc3ZSV1JvMHF6YjgyY0ZCbVRQS3pCdk91b3c2Mm9RS3VSV2kraUNqUnNOT3ZNRjJIL3FIK0twekphNEFmcEpMbGVEdmpMY0ZvNkRuaWZZaGhjQS9PUFFhbmQyN3NkUTR4cFdOcHpnRlFCUWllejJKRWVENVpBRnI1TzJ5Zk9PNDNmWUlubmp2Q0lBdndOSDFmVUEzNWFWVzZBcDdUWGNBRnJUdDNrRHpJcGhrSTB1YjJDbUFzbnNJUVRSck1PVnBkZ21BdGsrcHpseVFtUE1XTU1PQSttcDNoem1sVWF4Q0QvYS9yV0tYMllkM2RGWTJLc1VmOTE1ZlFNYi9SM05lczJUMy9kN2ZnZjlaZkoxVEZpMTM5dWFKaXRCNVZGMkljUDNQUktXdWFCY2JHYUl4OEV1aXJIVjY2MDJjRTFYUkNvb3ptUTZzUlk2aU1vOFFOK2xqR1lxOHcvdGlLdWxhT2NEYTBZaktab1puOEFCNHJ6TEpWSDgzSVVJNWZSMEc5dGZabXJIY1UzcWZLbFY3VVBaQ3NGV0J2YS9jc1VFdFlzYlkxd3ZnclNEVFZScU9ERFhCTXRzVG41eUtNRW9JQ05VcnBxb2hDWm5DeEpKdU9NdnVVSnp3NHlueWR1TXVCYWlDNnJhOE9jUjZ3VzkzNlp4WnpscVlZaXNLeEU2Nzc3a2dyT00vSndtcXgrd2FWU1JvYmZwc0QxTzg0Y2N5L0M0ZlkxcUt1cVFaMk1nVCtBK0pRUVZlS0I1UnNsQ09LKzlRdGVNZVBYM2FnS1FzckhuU2tUbmt1VnJHQUhMRUtVZ1dxa1Nrb3FCMFh3SzlMMC82ZHJ0YlhWMnE4WUxWVGNNQWlWQWxyUkhxM0VnaUREK0RBWmZVaEIxNHZDZ09XbGNDdXlUbWpYTHdsc3FXbDJiS21PcVFpbUhqbjhQVE9uQVBIZkd4TnpqMnpIZ0U3WDg2QmpxTjBJVkxKdnJ6aUhVdTg0YlZoTzl2eGRuNzU5V2RsOFBHd2dnSEdVc1BIYlE5c2RwR1lmYyt4alhDc2R5cXBxM1ZwQ1kyeE16MjNtbWZXNFdKcTQ1ZG9Bd2pzYllLcEdxRC9lRzV6eWh1S2RVV2RDZ0tSaHU4MjljeGZlcFVyakpuS21qcmlBYXZDQ0FkS0pNMlZGUW9nYjdRaDI1eUlBNHhWMTllNkhwcDV4WC9XT1FsY0hZRXcxM1RqWnRsTk45T01GMUJONlNCc2I4cFFLbzdrOVcyRE8rblJpZGlxTWY4UTVHdEFsNFh1bHgrMFkyU3ZnamtiOXBsM05qamJmc0ZLNmx0VFpwZDFHdExJR2FRQ0Qza3BJcmk1Y3VtckpiVXV5a1NFdUFPQVhrUXFyamEvZ0k0QVp5djhTajcxUHhHeThMNnJtTEd4UTZaalRpaFFjTnVRSlBNUU9RdEdOMXZHRkorY0pHeC96cXRJenRrMVNraDRBUERuMitZZnc4RjdheG9sUjFBcXRnVjJkMHJFYkgrcXk1Q09Cb1VCZDEzcW11emowNkRUZDZJZWg3Mk1aejB0SnlNcFlrS204RnZJVGtjNnJoUWtId2tjRFpXZzFsN3RFVTB5cStyMTZBZk84Wkd2eUhxa1A1UE85Uk4wb0JuVmhEaXkvdHFPZjhaR2ozZmNZRm9ReHJTTE95TUNlWHVoeko4cTNxQndGV3MxdXlyK0hQY3lTZ0xNNldwTkxXUm9abTdQVXRpcng3eEx2bVRVNlZ6Yk5mRE9aS0w0SXVyRTB0c0ZKTThxSTFCb2pPTXc0SWxCRDFMZ0lDQWdJQ0FnSUR6L0QzQTc3ZnNZZSszdFp2dCt4K3ZzKzQ2L2g5Tnp2Mi9ieWZzKzREL2NQcTZmMi9TWi90K3JqdnQ5blBuK0h2VC93ZmJhYjl2Y2QvRDdLZjkvenM3OXYwMC8zaDlwNWZaOXd0djJmVTAvd2ZUUVgyL1dVL3Q5bVRoL2I3WDM3ZnJxZjh6c1A5dCt0bC9aOW5sKzM2TkQvYjlpVit6N0Z6ZnErbGcvYjlEMSszNmNQOHIxekR4d1MveXdyVzJpUktHOWt4K3N5MXFldnhUOVV3R2lZc0FuWlgxSzROQmQyU3VWSWNDclBWelY0VllJbEhBSUowYWdnckozNTUrbTB4UFZsRDZFaUpDVVhDcFUzSWZrek85bVhPc2hGUXhrcGxHRnNQRCtwZCt5ZUhCbWRtNWpZRlMzTXVkdE5CQmx4c1VNZzhHclRBRTYyaElHS3UzY25UYVZCTC9lOG12WURvd0IxQU9tS0hxZTc1ZGxHN3VZU2psWUF0eVpBR3YxRWNLNXByaU1iNG0rQysrY3lBQitDMjZpVHJqVjZCZk5CTTlzY2hOdnNrTG12N0Zyb0gxMW53dmUrU1JtRWpkcVFyYWlHak5JbE9CRXpmZU1WK1JETCs4b0dwdVA4UGxMekk0ZVlwRzQ1b25TTXV2ZzFWSzVxTnhEUmFCS1JLSnlkMlBMaVphSTFqN0FTZ3B3SGxlVXh1RjNBZVFDZVBYNWtoSHJPQkxUeThIYnhUaDFZU2VRQ1I4Y2haaFdwTHRUYURVM29MS0tNbFhwbFpiSHMvRjIxZEJucHJoMFN0ZVBIMFZIVyt5Q2ViVWJEMXFJMmgwQTY0UkZhT0hzWXZpS1ZDK1JVSjZZLzlhcEhFWEwzbllNTm95OVVPWXZQanFzTnNyaCtPSGVBVGNvSFBXRzNIWE1ySnk5aUhaSSt0eURNd0tySHUxZEZHSnptM0dJVkIxZHlZZHZEOGVUZVJlU0x1OE9YMEFNaitmaUgyNWptRjc1TFRMdjFZNlNGdlIwNW0zTitpbGhESUxsblRNZ1FJQlFUNGd3Q2VDOXU4TG83SWU0NGlSazk3UHJ3S1lSMHBxRHBmakxjY3pNSkdLQzhwY3VjcTVFc1ljVG5laTNjc0V2R2ZYbUN1eElEWkJyUWVMMkN1M3ZsRVRCczBxMXkyT2FxeWp4dzJyOTVJTEpEeTFIN3JEQmlsSFQxNjh6TVNodHZobjNBdlpkK0dvSGpRL2wzbnBSUkRkekJ1VzJ3TlVlaW4rT1NHZk5nYVJyYW0xQzhzSS9VbUVEcmNIRkVTaVhpaCtIeXRSbWJDOXlNR0NKdW1oaGlwY0Z2TU5hTnFQMWFGWnEvTmwxSmMvdW92d25obHo4RmcxckNCVjg3eGpZVkQxOXlPb3NrRmNhOFBBRlQyYnpFNEJLV0I0Qmp2YkFzVnRkaDJUeE5tT2gyUGRwdXlDOElIa3RWWm9rVmt0OFVWdkQwaTN1Sjd0bmhGMW9ibFJOSXdpWXVWZFlDU1pSTmg1V1lKdTNUZTlzQVl0dnNKYktsVE9EMGlvOEZybG9NSHdEcVZMZ29KeWppOU96N2JXSkFXM05VZGhlL1NhaGZlL1Vrb1JSc0JRKy9PMkNNYzVSTHpGYkVTd1EvbXNrZkFNaDk2S000OVRKdVhycnE5TS95aWZvT3FsOWZ3ZFVZYWwyV0RVTjBYVWdzanBoRU91OWFmalJQMnU4UEx3aXcvd0JjQzJkVU5rNENPRmVWZlBJaGlSRHhmNEE1Ump2dkpaQ2dhaEFmTXFxVzZZaGt2aDR3eEw5SCtEcTdSV2tzMmtYRW5DQVVpTWRCK3Z4aVBzVDd1U1Eyc05vRmlzU3g4aTRaRXJZaHZlaXI1M3NZMTVLRW1EQklPeGh4NkcrQnBKOGNwMlVLTjV3enY3cGpWb0ZVUUxLU3RsdDAybUVHMGYvdFgwbEJSTU9YNDFJZkpsaWVtL0RKVXVVdk1hY05aL3QwYmJKUnhhS3pCd1Zja0tGclhYelhOUFJhaGVsMWFmWEZHaHhCaFNoT2RJOGFXWVN2dERyZVdYbVNnTHdrT1R2SkppdmNrWXMrem05T3BqNCt3YXc3WC9CbzJ3V084Y2t1Y2h3U0VmQ2dpMGtnbDdOVFZlWlR3Tlo5N0hrRWo1T1lLcnBEU3NXaDNxMXZOb0FnTDVGYkdFbUlhei9TV1FMWW5hdjl0T1VJQmlITHVhczhVREduTVdNQ24yYkRCVzRzOFMzYzVOaHRNaXdyMnNkVEVvTjVzUnIvM3hEOTNFRTVoclFxSHJMRjR1WjFTNTVWYTljQW1xbjFQWW1VN2tBek80MndnUGd1WjNRSG5QOExxVWdyUDIrK0YrMG82Y24xZ000S3JBMXovZ2VkTmxNSGZiQnpMd2w1WVhYc0ZVTENIYXVEc1FyNFBMWjRRUVJ2b2ljclh5aEJSS2x2bzJ6Nkh5S01kUlNBM3AyVi9abFBFUkxpRVVDeGdqR1hyNC9PODJ4by9MZURLS2NZZGZMdXcwWGFHWDJSS01HQk5Yam9UYVI5K1hReEtpSzlLQWNVUmRVUXk5UjFWaXJaTGNDR0VRVXgydkhKUFNVWEhEMDdFQTBua0dTUE1EVDNHNmJPTjV6cEY5T2lDc2tUUDJGbml3ekljaFVUanRtbW1zUFdSV3JEemhxOHRYb0wzTWJIU2w0TUxTVm93YnVESnRDNnd3Vzcyb1hMQVNkUDJ6L053VTZxU2JaSnJYUDJ6a1IxaE1QNk80RW5qaVdWRUJ5aFpEb3VyQlMwemczNS85WEJsTkh6d09EV3dtb09ocXNlNGcwQmtORE5rQkdQZmhGSGl0WXlMZFI0MWQvMDR1Tnlsd0xnU2p1blB1RFJPTDBxSVlxaUNlNXJyMjBNd3pVbGVqNkhrK1FVVXlRSXJFbmNhMi9nM3hjRU9Ed0RQT2FjaEd2VEtERGdyNDFFODJ5RHdRQkk5aElCV25hVkVKQzNUS0ZwOXBOd1d5aUhxOEgxSm50OWNibGtqMEFwSXRXbUZkSkpHYXFMMDVSb2hUcTdPT1Bka1kwZ094bU81cDRxWTA4TmhxTVFIMmRMbVhTQ2h3VlpLRUMrcW5GVEJ0U0p3L1N3Y2V0K3Fvam5BS1BGRnJ6L09ZeVYyRis3YjhOOXlzOHdQWGZ6Z3g5aGlZZ0sxc05UZnlmcVp2YTcvV3FDajdIdWRqM3RUK2pOamlJQ0xTR0ZKMnJkN3Jabk1HcU9aNE9vaVdzN3p5RW1TNVgrSS9BMEdreThiZXhmNCtyTEwzZmNMdUtZOXdGdDNwc1dGQWsyUjhYZjc5RlFBZ2dZT2RSRWhFR3pIWXRiNXh0Q05DSzB6YW1VMlhXNVNIMnRJem1RemR6VDBybm15ek5sdk4yTGlHTkZzbGNuYUxHOXpWQjE5L09WdGFqY01VWlU4MWJZTitlcTloeDFoVTV2SzQ4ZWdzbUZNL01jUzJZSnR5K1lrV2F4Ymk4dWVsOTJ4c1pjL1NlbTdHaG1jdHdVT3VZcVpaVGFDT25WUVJoU3lGakVBNnNDRi9BVitkZGFBK2E2YVdnZDB1MEF0TE5kdFdYdlBPSmROa1Uva3hwNHJGMGp4TzYwcnQvUTBsaDYyc283TDMwS3JBeXM2RnYzUnF2SlFObFhaeHhYOHpaQUVnODg2RzFnbXF5cTg5YStveWNtMFZFczc2eHFENDMraEhiaVQxM3ZnWitob01pTVV3b0M5MDZFWTR5YlBhdkhabDhwa3p1L0t5VndSOWk2NXhHTGY1RXQ1TnVTbHMzektRdUd6MHBscnk2OFZSbWxhRE81MVUzL3FQNkUzbnhISjFvTERvZnhMczVYcGhCR3N5ZTgrVXFpRFpETVZZSmdBaFArNU0xVTA4QmdWZTdJWE9lNEI3MjZoWFBrR0FnaEQ2dFRaWkZtZHlMKzBMelpFRVpLNmVGQXkyeHF5cExIOGcvMmZsajFYZ0k5ZlVsblU2Tnc3eTByaHpMYTFGTzMyM1NINytJOG9PeVhxOXV6amVSeDByZ0h6Z3p4bGhSQzAzcE9hU1M3Zy9WWGphUHZnM0cvUzlRam42QTVyZmd5TnpZY3NUcGFqd2FoZlJXR0RqMDAwTTU3andyZjRNYnpuZnFMNENSeDdOcWVwalQ2d0trSUVRM2N3Z3ZPZ0VtRkJjZnMrQ0RxZEdYanZGRlJnemYvRnBXa1k4RDU3aUZxTWR4QitNUmEvVGtJZTRrclRmNm9sdEtyNkxtMzgvK0syV3hmQ0xNLzZqQUZjZWUxUEI0WHF0dGE5Rm9ZVDlScDBZRnhESnVwM041VU9sVnF3Tm13cHVFRDhERHVmRzU1R3haa2lHUms5Q2VPbVFXUE1Qc0RKemhsQ202MTNEVTQ5UndqRUp3YW5Na0N0VlBYTVlGdG1IMzdMR2QzQmYwRW1XSStXY2tvSmZqNWFsQ0VOK0xMYTRJQlN5U2h1b1M0MTl4Ykc3UVRYSml2TjhpelFqTmJPaXZ5NitjSzVOSzFqUEJvWVBUQmwyb2xIMVJKekJwQTc3MG5yUEdNY1RpRmMwTGRYcDlXcll4djlncitabGJpVElSa05JakY0aThrZ081Y0J6ZEdqaFRqaHdCMmVBUVNKc1Z6L0p6NG4wZlFIc0xWaGZyNUh4ZkpXalArMHVxQ3BGU3JScVByeFRaenBDSGN3SzdndVFENnlWWFZpQlpyV0VmMVpHdTJ4eDlRaUo3NlNFbnltZUNqU2VkV0xWWm8zQ2Zzb09uQmhPL1NGeUovVzVFZG1UMnhVd1RtZkRFSmNSNFdOREhTTHRaeHRJcng1U0ZqbEFZQnZscU56OU54Uzk0NkhYbE9UcVI2Q1pSZ2ttczlkcTNDRFQ5alA1NFBrRW9XeERsd0ZDbDlHaU13WElWWXEzR08rajNxRHFCLzUxb3NaaGVLcDZOMmFUNnRUdHVxWGRkT3ptR2gzRmdta01SdEx3Q2FSVmFDYWlrVUlxVzBTcDBlbnNDcmYwbEhMa3lscU5hcnV4b1p0QjJ1bzV5TkxPa1lvQklBR1lUdERrK3lqL2g4ZW9nQVo4SzUvdXdXczc4M2grL2hDeUdHajVIUkxQNmorVDFkOTVuU2NyZERnQk5jdStrenBZRzhGMnJBWHFzSFkycVpIY05MMEtDcU55Z0IvQ3RjV0ozL0VLaWFic3FQOStzZURyRUVJU1NOSVBidS9NZk42VFFuS08xbFpkZEZDbXhQZXgxVW5mMGpGd1huZXJsRzhUUllTZ21FWHR0LzdNbUVjY2ZuNmtZNkdKaWtMTzRsSzBqRWY2UWIwaUd6SkVaZEF6YWZETG5NeXB0dkhBMG9rUlhyRmk3WStkU25KU1N4V29RZzRYWHZ0eVcvTUFvUTUvZjQyZWh3dGtZQmVlOGtUdnh0R3lOckFMR3laK3ZMREYzRm95VzhFMnhldWRrb3ZXSld6WldMck9KVzM5TStiWW9GTHlQamVTSzJNbUwzaXZmekJodEVSdHFsNVdXMnJYWWhOQlNWS1dxZVBVdThhazZaYkdKdmxqNmVHeHBseUpDVXRtOG1LTzJmZG9KZnMyUzdDbHhQVGQzL28yaHhEak8vbmFZTWN6L3JZeDJQMk9DK0txWURUNGw4MTg2c0ZxWWdoSDNxZFltaVpzU0V6aGliOXcvSDJjSWsyUHJEY21OdUJxV0xiUVgzem56a2ZHdXk4cXg2TkcyU3BkdUxMdGdkeUc1WXI2NUZLZ3lINE5weDVhejJ6MkN4RWp1ZVlndDQ0UStOTDBnK0s2Z2Vkc0ppYUZWYWRYd2RST0JvRHlwc0dPRFNIaHhxc2R2WVVnL3BDcWlPMm12RnMzUks4azlmRHpiRWgvZThBd0dqTm5RTG53ZlhZZFRQRWVNZDU2ZXZzZGREb3hkR0YwUExKNXNBR2R0QlBSQVFBVFVjNlZPV0NBTENHa0JQYzlFTnlTbGxVbmNJMCszZjhzK05hdlJSVTRtOUpUbVVKQlF3bnBaaDZsa2w2TVVEL2k1aFdYWHBndUxBaXNzUmUxM2ltSzJPZkx5Rmh6WGgyKzFjb1Ezd3BMWnRzaGh1dGpEd2cvS1JNNkNnUDVsUkxQcUpIT3ZSOGFnRGJFcU0vNmRFVTU2cVk1V2h5ZXNwMUdWYnZOTVlmM25TOFUzSGg5T2o5THNqNDhKNmpMRnk0QXAveXhncXkwSHhtL2VHMXNFRllFRk5nakM2b0JWbXJKU0ZCSjBVM1dOand5UmdTUEx4R3V4enZPeG1rditiV2lZK0xGb3JRQkF2cUg3ZFFsVlFiQzQyM0Y2eUhzSDJ5VmpoRFdNMWxjUEY0VkFuanJKd0d1QWhHZGh5d2JXN1dHQTVoWm9zZG4wMjVzV3VtbmIrQlBMbE5mNk53OHFnbGNaYVlUeTd2NWlUejlNVDl5RUNoVDAwYlFiSkpHVDg5emp0cG1odU1MT2dzUU1QalVURkJSdTgrWk5QVENGd05IdVROc2VVdFhYWHhWZmc1V3VqL3pEMFpzYzJJb2xuTS9VaGJuUm1vaHRaZnJjUVJNUkt1MmJHckFFTWJYcmx4SWppMk16YktncGxvMUJjeTB3ZE1qZkY1UFNRTGgwQjVlb1FPYzk4dUZoWWJXcm9vM3Vkd0RONGt0WkoxakJDSW4vMW1GSm1tdFhyNEtFaG9SQktJUk9hdHgxOExmVEppaFBzWHRzSTd2aEZqOWFMYW1PSzByb2ZXbXlrYmM3ME5ESTBjcFpFeUlVMENxT2pnQ1JTNmp0eGNrcWlCVkxzTEU5b3RlYzltcE5EZTJlL0R0Y2hrVzdyWXZFangybUVxWXJ3OXN1Y2lWdmUrbStGWVZxaTBJZEdZa3k4VVpnWHVXUXAyd2ExNldjeW1IVUxjTXRaSG9nSnM4YzRyZFN2TzhNajJIZHNuQ2JvcG0rSCtyN3hoMnVGakNiVWtENXd0L2RlZWQyaG5NZlQ0ZHo3NXRXS3RSUUMwSzJxWlBMUFhCSU5SOWlLdVRTbGZCbEJZaE85bGFTK0E4S1hKOGNIRFhGKzlzem1ER0ROalY2VllLRUpEalJ3b0xhTFlGM1Bsd1VXRUVYNmtBVEg4aHBEZ3RLcVR5VFpmQ2RmcnFOYjVoc2lLLzBuMkxJMVN1MncyTGhkTG5zcVpJcTVYZUxGTzhXMTMxUnkyR0RPWFlUcnhZS2UrU1hDSzBPRzVsbTNDUEIrcWhoeDhmbFgweXl4cDQ5TDU5Tm12SXU1enJEZ2ZNek1VcUliUEpiZjQrd2ZHOTRZcGpYTi8wK1AwdEErMWlDQ042Z2xTSWJleWRrTnhZc0pvMFpxWjFuSVFSYjNIZURvU204S21FZGNkemt2cWdyTnVVUzlhb000TWliVk9Eek9KVmJsdUZ4TThRS1RiSDY4Y1hMR1NXM1ZpOUxrTjZXcW1BaWsvSy80S1M5bC8yVHpsbmJMa3hodWtUcUZXRDM2Wm4wQ0dyRHJNSzlidTc5M1VreUk0dHhKWVZBUVM3S1pmSWIwZ3dnbzYwWWtQZ0RyV0ZCWktPdW44U1VUMDJ2RmtGcVdlSTRjMW81M0RDenBWemcrS1BUNUhnMEZ4T1diZGVQNmc4Vll2K0VSNkF4L1JreG4zblBnaEFkUGtHeExDTUx6aytGdjlLc1dFZlhPb3djcFZKUHIrVUd4dHFNb2hGaXpEMmNac3FpYkZjTVdyQWp2WjE0bjNsOEUzQk5ZKzN2UVovWStZem5kRFVNckpxOTJhOWRWMkZLb2J5UEl6Yk1VUDZBR25zYVYwWlRxMTVNUmd5NVFtSHhjSmIwQ0R2RFg4OU1mcFBpMVFDK3RBRnRmdFVZdkVKd21TM29MYWY0dnVoVVYrai9SQm9aZnF4QU9KYWpGRWlSdGk1dW5pS0NpcUJoRHI4QktPd2hTVWwvd3N1S2ZZaVdQdkY5UTNCRkIxY1Y3cTI2dVlPWVcxUjhta3lNb0dMUGY4MUE2RlNJR0VTU3QrbTdTQVRsemlwNndGd0c0RzgydTFmUkxRNnBIcjFISnFKTkpKbFN3ZGxKeHNrckwvL1VZcmVwK0hnWThTYXVocGNBZlJQeFNmZkRLM2JTQjlaaXJubDYwUFY5VGZyMVFDRzA5TnFqWjJKR0gxckt5c2lEVE1oc2Z2S0VCRGRtaWIwOHJEekdoQktIR1NEQnI1NFlMM2cvQkdXcUVBRlo5UGd2TTJQUzdsbmJDcVdYQnh3blo4S1ZaN3lyT05lMUZPeWQ2R0h4ekRJMGc3SnlKcjdCMlN3dXVDeXh6dkJSMWU5aENGTm00dGU3bWY1WmFlZWJmNzFma0VpOUtnK2NkU1JaaHk0eWhsRFd6dGcycG1mMW02b1JEL3pKNytobndxU2prOXlUQitZTDJDbDBFNjRIUTRVZ1c4YkNiNzBJNWpWVi9Denk3SHNRUndFOHJSNGhlNisxZnIyNE9DdFhXMkFXNnJKZnE0NGpEVnFlL2x6cjdzZFFGNENLaVRuT1lvMjd2RGpFUXNWUUs3bGtocUM2b2s2cFd1TzlYWEV5VXZ2NWFLa1ZLME9tTTkzMEhyUExKWWdVbnJQZkFZMnJWRkRkeFZDaDcwa3JYcW1SeTFYLzMycStuN2dZb1VvMVlRVGtHSlNPZ1pXbXFjZllqTE42dXhwYVI3VU9zQ3dkRkVmVnZNNzZ1aG9DS0VPL3dBMUE3YjJZZlFTTkJWYkpFeWltSDd3V3NySkVES0FDZ3N4ci9mTHNMVWJkM1BrQmZ1TGIxMFBPUDlnR1QxWUtNR2ZjdDFJbFR4a0NLUDR1RzBwamxyTTNsUDlxcjE1UUR5THlnTXlVOFBlY1lmTmExVU5OZXp0REduSUZMRFJremZLbVlramFkZzRpbklPUTRSdThCYWJRZTVPQzQvVUtOcGlheEhsSW82S29FeFRDcEtyNkUrZEJtczdlZ3dWNmErQ3lCanFvMmFuMlRyekJBSExMMUtjc05HMzRHWDB3OFQ5c014RFhNZUFnTkdsbG4zOXByYUhlNllvVWhLVFArb0hZRXEwdmV3WWZRZVhLdmRlMFBHd0xNa3RFbkVab2lxcmg0SVF2VDRxRnNaL0RicTVub1lNeUNSeDMwdm1kbm40andWRmplbklOY21yNFY3U0Jtb3ZNZm5haGJSZU1qekUyUFMrd2lIa1BGUGhQdjg4ODJkNlBwUWkvZ2gzK3Fid1c3am10YTlrYVo0TXB6eEUweDFMdnNvdDlTRjl6VTIwSCtySGpIcDljdEcrZ2MxaFdwWFloSDNGWGthUmhRdXpxV201RWQ5YitodmtXUFBUeFh3YjF5U1dlSGptZytqRytSRzhTNzVTM0h0SGJSczFwMmRONlF4Zy9qU3B3RUdvb2Qwd3hKREFONy9adkxUSm4rdXRmUGV1RzNza29YVFFCd1R0ODhJWnpDVTVTMkZnMTMxMmJCbUt5Ui9uMkhLK2QrREljdzlCMjQxcmh0TG1wNE10aWhCcVhSQ010VWtNV1hiaFg5bUxvcUhSY1dNN1ZrRkthQ2VrRVEvYWZJcFFtK0dxQ3hSeUwrQVBENUZMWUxEWjF1bkN2bzhnMlYzbHBwRWdNdjVza2N3VVJRbCtXcXpteUpWV0d5d29GVFEyUzkwWjMxd0pSK2orR29uU3NseTV4Q2FSTk1saU9VcDJPU0RXaXpyd1pUVXpRNE4zWjVhTmFsVkdkQi90Y0NjZi9mbytabkVZZzlQcFFRbm1nUlRpZEtEbVZOU3cxSGJwOWx4MmNaY01Jako3b0srRk8vS1p0OXZpRW1oTHdEeGtNR1d4a05xOS93OEhadm1OblpNZS9WSm9KWWFaM3I1TjJUdDY2Z1g4QXJWNXhxTzdyYTBINFhrQWYzZ2ptbHdKbzUxajZoM1BIZVl4ZTBiNUt5K2hvYWpCSVBYaFdjelhnc2tBZmtGQ0NIVi8yYWJ1OE1BSUdrdmFnMU9kd3hVazgzUTVGd2FLZVlka0ljdUJZSTNtRDZoWXhsaGNFYUJDcXBkL2FCdDFzNnlhQ3plckV3dVVvc2FaR2Q2ekdvZ0dseW9XWDZqK0dUd2xTK2E2alFwanZvNFZyeEJmTVpRL2RMdzhXSmgyRjE2Q3J5YWMwK3RBdGNZNEorTVlPY3o0ME51emVOeVhDZUVuSC9aaUdlTzE1NVk5V3RrSExsZHUzamc0TmpkclRoaHpXZUJMRWdZbVJTNFlSanhjZ0EvRVZtUUc4ZFRvSmhDaldjTExQTEdJcTZHN2Q5M055azg4VE5NV1BhSmlpK2NaNHVYamVPVmUzRXJQMEJvL3N5bmZ2UnZkaXFNNEhBVGxrSTFGZWpXVkNNeVJQSm9TaUp0Rjk1QzhGQWR2UXNWazB1U3R5MFNvSU5RRHVtYkxoTUFsZTVNbHdQaVIxNkdCOXJXelk5Y01lWlNkT0VZdHNQVzJFa3VoVkxqU2g1ZmRTajAveGNSVTdjTEw4cmRyeEpZZHYvWTEwVWYxYWZxNXBHUkQyb2I3TSt2ZmtHU2JweitVVEp6ZGp6OUNLTktYY3hHaTFjOHFneEVXTXQyY0dNcVVtUnZQYUxiK3NlTlVXMVpzalFxRHFocXlBMW9QRFBmcWQ5SDVQQkZPdnR5Y0dHckVsUkxQUFp0VGRDYWZpSHc0VXlnZlFpS21HcTJTem8vNnhRejFvVDkvb0NRWFZzenVsWDd5SE92bWtLd251RG5WcVExV2dEeFV4Q2puRHJkMnVSdUpmVTc3dlJXQTQwa24rWXRPOWhhb3BWKzc5TDNoV09MbUszYmJrTmRwZHQxTFhNQkxYczRFWG4wSXdwNVNGZWNtRnAwWFhRa2lzSUFPKzZEZzB1VFRXbDFySE1EL2NFSW81WEsxdlI0amRRNExrc1lOeFhVaDd4Z21wQVpJYXhHODNqUkFSbHRsa3VhK1ZjdStaQ3Z1Q3NTZ2g4YUZQSDB4RFJaTFp3b0UxbmJSVFFBbEZvN01mdTJZV2V5d1hEd3E2dlpBZno3bXZqVmdQNGdhVlRjU3Z0Y0xQZFRHWFUzQkJ5SS9Ibi9nVFpUKzN3M0ZPVmw5WWtzamVXYmlCSmp4QncrS1hMaXBjNllwbC9GbGl5KzlML0hKVUpZOHRrNlJqZjRhaE80b3BPMktsWFNBd3hSWTNLTGloRnQ4NFp4Wml2RVlOT2hHTzI0UTJnR1ZPeWl1alNCTE9GM05hQ2xMYVZvOGQ0aUVGVjh4WE5PZ3YxYlFxS2hFcjZZdmdpRG1WcUlkUU96QVlCSTloZ0VKM3czV0RrNnBmVXlKTDJqSEt0NHhaMHBTbGFxeDFteVN5OWI5Q2hydFZuMlQ1U3pXa3Z5MXh3YmErTjV2Y3llK1ZSWG42bk14dUVYd2tOMk9kcll3QWtna0RiNEFhdHZMMUQrOU1yQWFWNUsyeVd4ek9xZ0Yza0tpandBbms1M1hrWGNuT3pzMW1zZndvemF6MzJteHhlRkwrOGlxL1dkSzV6ZGE5RTZxR0xBL0ZadnJ6ZzUwcUxYRmU5bW9wRys4N3J4ZnpLOEMzMktqbkg1OG5acUxObGUxMThJTHM3bGpKU3JYZGZVK2RHN1hnWlE3YUVoRm5kZmJ0K1VjeGpneXFKcGpENzM2KzY2T1pTOU5Rd1I1VDJqdi9KNDVocnZWRGl0YzNnWXJhVldaeXZzeDV1NHR4aHVUZzFiU1oyN21QYlppakNUSWhIWGp5T3p0NFZRc1hXVzNrSEdPb09hajI0cWZjTmRGdE03VVNGeUNUNGdFcjE2UG5DWTdhZ290cGdvWXdIVXN5VDFWWXA2KzJma25kRmMxdlg5Q2d1TU1zNzVzN2JneUoxbkcxRFZ3Tk1sNk1DZC93NFdxRVM1czRTelBrb1pXN2g4RVNMeDEwZWF1TG1zMGJYTURYZFZ4SEhZLzZ5MWxzcDVJVEZGTnBuRlV2OGJLVVBUNGhtclhlaWdaQVRmc1YyL0kvUVd5OTFudkZvKzdHRk9Oc2c5ZVd2eHoxNlUvRG1lNjJ1MEhudURuRWpwTjNhbDJMNlpuclV0VElsRkIxRUoyV0tIcmFXQUdLZTYrb2VJa0VWeDE4NWhBZHV1VnNya053MUY3TXEzdmtSVTB0VXE1SjZ6MUdaQ2RVaHNSUkNBbEM3UEc3UHU0K0prUnNCZDhLTDJKK1pDc0FqTGN2eVVnTjJiS3dYeUpFOE1BYmN6WVpKVC9mOEpTRGFHM3R4YThualAvU25aRWxNNFptd3dGSkhneEhaMkszSHo2R2RCeEIxYzl1QkczOGJwdFRHblBjRnN4L09kdDdIU01QTVhOL01OWG5PRStaNnhzdTg0QjM1ZVBiOWhYc3pZMjhvZ3puVmJoL296Q2tUWDIzeHJCQitob0wrektPVGZrV1BoMG1qbUhKbTF2R3JyZmFoaTQveGk0Q2JzL0NTSEdTYlh4ZTM3NVlKZmFZOUpOS2NCSURPRmhxWjdzR2hNS2taR3dIRXk5UUZuT0dpVjU0c2V4U3NRUyttTWVFWWZEWmtIL1l0eG9mTzFub3p2T0h0c2ZvOEdDaTdLb200TDNmYTBwTjJGTzl6dlRYVDMyakZCZDdNWTJkK2l1dWVGdldFMTg0bEJFSURSOVd4RnNxbVpqc1hNV3JEQ0NZcmtwUVluQXprRzEyZWdBV3UwdGh0czRkZVA3MCtJQjEyQ1ZkYjIweUx3bkppbHY4bUhwcVVBa2pGUWsxdnc0QlFJS2QyRkdKUHlsVXMxM21KK2p5aFZ5LzJDVERGUS9ieHBHelFTektDTGhmclpUVUpPRDd6dnhBaklHZnZqMmpvRFB0ZTFyVkVTZ2dkVmlFK2l3NDVCT0NTMDVuYnkyell1VTFvZ1pwdHFZbXlMaVgzVUpKR0NkNFdtcFJoNzRWNSt3ekF3Q3FsTHZhZ2x6T1ZXSXh3Z3FENmFlNk4xMnpzQ0JyMkVHckltVUtJbmJCdUhueEFlcklIcTRLS2F0M080UkZWN1ZFVFZTQjhzQm9qNXBtN3FPQ1VQaVJueUJUeHNSM1BpWXV6OXE0bVFkeWUvTEVrU0VQNC96blVrR2kyNnlNNzdIdW5oSk1OQmpwdlRjbUMwcXN2bVJzejRmQU5oMU9qYldNQ1l3Yzh5US9DWDJIZDNtSFRPcTBBam1UN1JkRHo2TURXVDJ3c0gybGRuTEl4emxTZU04ODdVZ3VJL2ZVTHg5TUl3dEkvWmpvUmZLSVJLbHJGaG1wOU5PUnQ4SXowYVJBYmxhNTRyaVNzTGx1TnkzcTc4dFFvSDYvWjlFR0lOdExZQm1KYUl2M0Viak1waG1ETld6RjRLUHFCNlFqOCtkcHVTTXVOd0VabnVwdFU3RHR2dkhRaVRuY0lzMyt2cUFIbjljY3BpWGRjTnVjRGc3dktLS3pPSUFlM0FHVFhVbS8wMVluTVhXZHNVMzZaYno4eU9TOXJMNEhEK0FzNk5BWXZHYUN2WnJ2akZPczFXZzRSVWsvMEFjWjhMWlV0TXN1cHI2djdWbk9icURmOERMbG1QdS90SDYxTlpKWXlVT2hrRlpycmNRSm5sOU5LL09UeDdmZkZvRFhSeE5FakVYSXlVUXYxcUtRSXRMUm1RK0VvTjRacHhUb1pFTmV0ZS9NU1RYOENMU3JRQ1JUQ2xPakVNMzF6NUw2V2RGa0tLV3lMeVplWHhKOUVySnRjZlQwSHNIZ3BpTnRoRFNySjB2dU9hZEJGd2xjWTNyS0VYOUk1ZHlkT3g4VFNxc0hRQ1dPYitjZVFzMlczMDUwQnNDbFBTU3R1Q2hTaXVDVXM0emZkaHgvMnRVWWZUVUtSNnlUTHNrcmgxaFYvQ1RxaVBraVh1aW5KS0MwTE1tWTlxS01KaXo1TjBPSHNVZGdkVXNuekhwWXFUaVVwd09rQTJNb3Eza1RnYjNDQnhhSGVJNXVQYm1ZVzVDTkx4VExxckFHOW5qaEkwTTh3ZTlZZ3VXQUFUeDBhSFBMb3BVaHdMczcxZHVxYzl4MmdpMUJVMzBzOHQ3NG9aSjFSNHNlOStLRUNhWllBR1ZkZXBUNTlVSGRwREoyaHNLVkNQZEFNYjRCTEJFRFlXakVwT0k3QWUwWEoydDZ3TGh0aGN0MWUrSG5GSHlQSjZIMVY5VTBkb09UL3BEQ1htajV4OFVZaExTMTVzWjM1YUFZZWtTdDAwK0hUMzdNL1Y2aFdpZ1A3M1EvVTVWbGZpYUhzQUxlSmtyQXJKbXdSMTlWNklVNWdtVzI4SmhDVzBPeEtBVnJ3Z2dIa09JSHVIWnRjcSt4NWM0VU1uNFBYQXhsL0h4WXowY3ZLTGtlRGZNeWQySUlVS1k1MkdEYTBLa1BxN1JwQ0NEQlJJbDVrdSs0azl0UEZCSER6UzdHQjFKUEVtMmZWcnpRejczd3hwRVAyY3BSQ0lyYjZOYVdsZUtzMkg5M2FyWTdNMTBUU1JwMVhXMDVtZU4xM3pLaHlNbzY0K0trWUdHNVN0OWxPbHkrcUJoQUtkK2s4VTM3TlVzZnRYcENDU2UyNVVyMFF3ZHk2TDBuNFZOMXI4M2FZU244dzFrSEszL0pDSDZFaWdGbjFlVjRuc0FVWDZoQkJJd3Myc0l1SjJMTE9tWkFjTUU4eVBvdFpqSWIyWXJRalhva1djMXgwSTVYVWRQMGNXVTdXUnN6WnZLQnVUVTF0Smc0alBhZHUxYkRIMTJhdHZwd3BnUTY1SUpHRkxwMHhLbW9sSVRzZGs0TUZ3dUZIRXJMNmN0SE5GaFBrcmZHMzhoakk4Tkd3YmQrV1NiLzBqMGp5VVczR2htKzJXdTVDWVFaN3BhSkI0Y3FoaVEwK1BoM3VncDcrbStZKzFjUTd4aGlrS2p3SlY4TGVDYXdYQ2p2RjZrYVYrNzlXQ21uWVZjSG5SZXlzU3VkQTM4RkdZWFpvT055NTZueTVzcUNxbktRN1VnbGFXUjAweUk2VmY4MTBhVW50RHhJbll3dU5RQUpNbXczd1hYeVprTWMybjdpR1lTUDZxc2Rzak1PdkpJa2RXZHlvUURoa294UWRLazZMWUp5clo3ZkNEQk12RFlVc1FjdjhOT0l1bWRNaEdFVlVHUmptb3ZqMG5FQWdjbHJaa3ZrMldIQ1g3OTErd2Zrc0h4NUJnYjlPYWgzMkk4ZnUxd1BmT3FWNU4xRkkvUU1KSWFhbWMrbHJla2RMelF5RUFEYW5jczBOZXFQc2pLMmx2aFhMdktlTzJLN2JQQzFlb3dxTW1mSmFNcTNoZWhmOG5TWjI4Vm1FbklQN1BFNldqRUhxWEYxaU01SnhFaThlc0VmVEdLQ3RmdjJ3SnhPNEdYT3k4WVJDTjFqcXg1dDkvRXNzV1gzZWpMS2tqU1JFZDg2c0xyR0RiSXlIM0Q5b2NzN2Q0eVB5c0lodXc2Y0xrWjFFd1VMdjhveWpJbHJCSFo2b2YwazlPMjdsKzlsMjR5aThwUFdwRzl0QTRQb2tYSWRuc1VnL1JqWDU3dncveFNHdXRET1dWUVQyY0M5VWp1SW5Sd3RKcjhhNGJhTG8xVDNTL28vaFdHcUVTOWxpbXVVWERjQ3JtU2FIL2EwZy8zM3FhMW5HdG1EUzExb2lsM2MxNUFQTU9pVkExeXY2S2hrQjhSU2hxZkRnMUhTUi9lRldWcVFMRldwMDhYNjlIQjRQUFlhQjI4bGFpMkJabU9sUUtrWVYrZVZsOUEzSVIvNWw2SUtmNHBvdVVudGxjd0FGQ1l0VHMwMzduVnIxeUh6R2E2N2Zaci9Qa0FmekMvY3k3VjVCaXpzbVhMVHQ5K0hTRWc4ZWk2aUNpVVVFKzdyWWg2b1hOL0ZyWERpS0FGK0pXNFFWN21NT0NSOUt3QVZYeHNBZ0ZJcERLdGRhV3l3VXFvQ3RJMWh5ZStiZWVhU0ZsNzVtbUxONDNaTWI3QWpvaW5DZ05GUkppRVZxRG54ZmREWUlCU2VXb2Fpek52d0JGQVRCeEhRV1MzUmNmTHhFdGpVd3FHNTNQL2R6KzJCbEVBaDhSVWhmYkNvakxtS1k1dFQ2ejV1blZrbUdjMWlNWUdnMHRRQk03Y00wai9Bcm4vQzh6M3NmaGFYazlOcTlvSVVvVUFRelJVTDdSQjJBek9Zb25CbWtDYTdhdFdab28zanc2cWhtdXNPZk1RTGx2eG9sbkttN2plMGNtOVoyNXlTV0oweGh1N3dzMjA3eElpNlVta014NEd0NVRmTkRhV21xUzErNXJyRlpCSmYvTjhydjY5anZDYmNwMTZXL1dVeTVRK2ZoelNSUnpiOTNIa1NiNkdCVmVCd0ZkU25jZy84SEVKTTQ4VXdFdDJMMWIrS1VQemxCb3hlL0RENThtY3crTkpMRFJNRGE1aWJqMjNQY2tMN0NyTVdOK0x0ZThaUTM3aE5LU1NPMGl5Yjl3eW8vdEpudkRCRjgzbWJnUFVkbXF3SUtLemg3WjE3QmdyTU90QjA3MHB0cjVsQm5nNlB3cE42WTZWcmN0OWxPV2wyRGlTZDBMT2lsRGgwTkdlYjRWZXIrQ24yeHU0WCt6aEs0VDRuMUlSVk92R2Jxa0tUZ3JaL1ZUWlFob0NMMUNINDJyUE03TWFVUmxRdG41L09HY0J4SHdFOXczQVUzOGRrYTZpc2tqMUlQeFFIMjR3Rkp4U0NyQ3BrY1JQaDlpVXlBREZJV2RIVWZwMjEzMjNsSjkvdnF0Mm5pMmEvVGhRU3VZU1dmZy9SMUgxc3JGeC8wcmtqS09zYnN1RlM0bFRRZ3cwODErNlc3eTlWMWpDcUx6dTIwcHAwS0hiQ2d4M2JZcFlCOTBYMWZDSG03cytrTEEwTk9SQlNTaWNQRk43QWJIcURISnBhTmtWSWtDTjUrYzlQZGhyWDF0VmxlQjFOUmI2ZC9hcTBnaGh1TnVwRlpSQ3ZjaUZyc1l3V3hVeVJLWVRIWDBtUnUrdXlHZmxtVXllYjBRbklreXJuRUNHbTlOVlAxdkxESHVmY1FtL2VPY29BRGJyMkg0R1JrNDRZbU4wRThSWjBsbGlDTk85dURaclNIbHRTM3RRU2FDV3JQc2hyczlsYnU2M0lKb09xT00xK05uTytEYXpqYVRNVkhhanpCdHg3eGdrVjMyMThBcjRkQXkzZUZhRk4wNVd5YU5mNEZTd0l6Y3VaRlhFd3NhVjg2ZmpVeDA3K2QvTThFZW5lKzFQa2pxMjQvdm1EVVVlOUpKTEhsMmoydVNEbjhITjdHYzZ5UWlEOERpVlo3RmNtSmw1RFFObk80RVlDVmpEM0F6bytCdXJpM3hxKy9RL0NPYkdGVG5YNjFrOFIvY09QeElVd2FkalFrVUFGY0pqSDNna1Njekg4eDV6OHdkak10bGdyYnJ1c0o4UXZhY3B3cVloQ1Vhb0RzNGtjakFScjI3RUR2THNjYzMzMzQ3L2E2SktMc2xKa05ueG9UUElqQTg1Y1V3Z0hXMW9DaWtlQmFiRHZyOGtNZnZjcEJKRXF5bWRtdFkvUzRkaXUvYkVjKzRBbHVCdFJlZGdxaXlTTU1JWVVwdVBuS3BFcTRmWkxLU0IrdkozWkRNN0p5ckZiMHVtTTBpUWpPRnhzOEpnY2VseWJFeENoMEh1NHIranBmZjZsSCsybkhWdmVHRFFSUUN5bjBwQS9uVWhSOHhuTXpBWGdKRE9VT3c5TnRCVldVb2JQSlFmOWNUcE9kRW5hL1ZOMHJtZDV5Yy9nZlBUZlFJTjlNNXBIQTF3RDlGcFBuUGJTb0hhVjZrOTRmdlNqMTUxaXdlVERpTE1lQXQySS9iNkMvZElXdkVUemVGNWIxaU41c01acFNxOVJxRVhaQ21wMXd1L3lNYzU2M0piak5yOWVBVDBuR0lvWEZERUZPT2lwajNaM3d0Ukg5UEd6dHBVWG9iempvbmFSWGc0RjQzT0hwWWxGQTdLU0NPbTJpYjNKdWxMK1lMeTEvOHZKYkNvSXZIY3NsNWtrZkFqa0lzNkJ3aUZUSXdpMlYwMU5TWFRCWDJRbyt3UDBKRkQ1cTFYQ0ZWYUwyaUFGUS9FWkpSS2RwcnhNb1M5cFJXeUFHeVVHQlJxOHhsTXZ5WFA0ZTRXZXFYVTFESDUzTld4NmNiYm1MelVxUDVpbVZSU20wc3VPRmRlZ2ZnQnVORWJWYXNkMUl5ZDJvVXBXOXNBWlprbWt1NTRhUmZxQkNRUTlDZ0RyVE5FYUJ2WDlUYUk0WTNsdW42NlJMQnpvWnZhVzJWRzNDdlRqZGVOSDlmUjYwc25BcWc0YnRZSHpJcy84QmlKaEdJa3JmV0ZTdHZOUHlKNEhFbVRFeWNlSUlrQXVaOWlsZkJvL1dleDVHRFFkL0FGTXY4VjdTcUt3MjdnQWNYTmhpRzZ0ejhOK0Y3TG1CS24rM3BuTThKdy93TUxJQ1FCaWJ0Uk1KZ3gybXFpTlRWY0FPK3FSa3kxTUllNmlmQzljR2NXOWhncGtsOGduMHVGNjNKU01iUEJ1ZS9QZEdoN0VzaHAyOC9XTHRPUVFjOTdUUHh3L3ZiL0pVZmdDQ3JtS3ZMOTc5RVlrR1hoSW03RVAwaWtxS0UrZkRITTUxLzNkc0t5NndKdTFTdU9ubVRQK3hTOERPUTliRmlTN1J0aytpSWowRDh2dE1lZmYvajRUY1k2VUNtOGFOa1pVRFNtZ2NNTW9ldWI1VWM4T1V2ZGd2eFp2RGRIb1Y3aGY0V3VjVEY2V1pEZGUxMnhkc3FaUjE2WXdYcUEvRFAydzJJdXhaVE8zMExDV3N0QlhDQjdCUnVjZ0krZmd3YkpoRFZnV2F2cUxHTDZSUno4S3kvUlVrb1cxYWc4alplVW9WcVhLSUp3ZWRFb2I5VlNHR3RSTTc0aHFTaHRKT3dyUkRabVNlU2cwTTdoVUh6VlhHWTduVHlkZmdKaFI4eHozNHNMaVFLczEwc3E0Y1RsQVA2T1JtR1N1ZlF1N2g2a2dUYnF4aDU5YnptdmZsYmY2NHpkR1JjR1FrcVdVdnFLZUd6anYyYXVXRlRZRFFJSFFaWFlPRTJFeE9QUExZemZ6SCtnMlNMV3JCL2paQlA4SEN0ZWRUU0xjeDBqdkJsWU4xS0cwS25ndTN3eTE5QnRtSU5HOG1zaUV1QU9kVk9LZmkxV2dqRkpPekhaYUQ3eFZPS3Q4R3Z1YjZHN2U1bzZOeExpRVczT2hUQzFRQytZVGhWUGE1bGQ1SjhRNEVuRzF4YlNhL3RpYzZlR2p2cjk1aFZxNzRCZ3R1TFgvT3daQnJVeURITVhlWWlhL2ZJUDVyYWpmQSsrVm5BL3ZaeHl0VHU1WmIwaEtXQlorcE9NZkYvT25rdGs1eHoyL3pwYXAza1QrN0g3Q1dnMmxsa1ByRTBtRnhEZXJpUzNZekF3SWJsOFVjaFBnYVdGWWIzaFpUOVBTdnoreDRrb0hpTllGdWNTbk8yTHJZemFSRTd5c1NzWC9aTzJIMHVhcXI1eVdHcEdCUVIwckNkdTlSMXBtejhsNy95Z1FwRGFNeUU0b1hkL0hRZmhQaGVkcHJMSzYvbjNydWVtVnFNbm5mdkxrWHppNStDN3hnd0lKRVVSWkdKSGVxbWkzVFQrMnBaYkhLRjFqRlQ4ZjNiREhra2J4aWJ2WkdZd2VYVzNTZGVweG1hV2k0NGNlbFRHMzdGZWpSbCt4MzFZYnluOTZKY3R0cUdlZmdRejlVeHdlR0JtcGJvMXhSVExlejIxYWtCM3BIYjBSQVpOTWpsOUJid3laUU1YNklyL1psWnNaOVBQWnFuUTNvZGJmRFU4V3l4OTJQR2tHMno2Uk92NjVOWXF5bll6d25MSCtYZ1RNVHlKNllGS0FWakphczVxZmtJMDhZRVJCZHZUdkFkVmJUVDBkT2Vtb0lJR0xobXMxdTFCVXd2amwySEZ3ZlVjdmNtT0R1S3J5VzVrM2l3eEV5Z0d2QVNoc0psYmRxcXpxaWZCVW5TNmJqNGlFbVQ4Q2ovL0d1Sms1N1FuSnpxazE1L0V2Z1d4Ymt3TmlpSXFiWEdQa2RaOGlIQVlpYTJDUGtheDNYNy9TamdSenFNOFpxN1ByT3BkeEpWMjVzRzdKRXUrNExSUGRrbE9TaU95OS9saDZSc21sb0FHQnFpM21HTHY0QTlWcXRMUXVnWlpNa09aNExNZWhIbmVpYm8xZXZRZVRsY2w4T2J3ZVBrQ3R0bU1ZNC8wb1ZQUTc4dW9SblgzYnJhN3JObFRaUDhKakM2bHAzZFg3VGpDQVdKU3pXdGhndGx4MDQxRVphcGtkL3hleXpLK2YrWk8vVFJaQkhSVXkwR2QwZ05lMVN2Y1paSkI4aUJIdFNjVlRVckFKaXlSSC9uNmFyQzZsN21BSWc5REc4V0l4NnhMQ01vdGsyeldiNW1PNFNNUFlsYU80Qjh3Q3RzNjdJRVlMUnQxRGNCYTJzL3p3NEVDcm8zM1htRXB0T0dmTU5QRFNEUnZzRW91TzBuQXowdXNya3ZUd090Tm1aSHRYZmg2WmtWM3NVK0VFdTBZYklEQmNha0owMDJWQkVYRFpXM3FLSWRDZGJaQllLRHR3Y1dPWEVzMHIxYURERUJtdHExM1NtUjJYdUxsRWJETFdhR2NOVTFjNjZtQU4zOVBZRm1mZFphbzN0N3JmZ2c0TGVGRi9OTEd5blkrbU1FMEtydmlKT1dVY2ZnaFNLMVR0VE5XS3kvTEVqd0hTYVE4bVYxdmozRjhtQ29aRVJFNXd6Z241bnhkTXNJOVdoMlJYUmhpaTNCRjNTZEQxdUFueUJLTXJabTBJS2RhbzlqSHdtanJHdmM2QXR0TStBZmRLaDAvdEFRT3plM2p3eVBUMVJtMDhoQmRCbFpvMnhKQjNUZWdlV1IwUFVUSTJpZ1BIRTVCNVpKNUVKeDM5VFR2dXV5b3ZrelhGY1htajJDNVRrcU9VRmVCdEFncXVFcS90WWdUblZaZmtFSkMyM21wb2hEdkV0RmM4M3lCYmRlRzd5MHI4MTVVMjc4bG5ReDAwQkxWc2pEak1kc3U3UGZsRjQxek9NczVnVkVoUUp0KzZDTTc4U1hQbTM5ckhoTVdQM2RxVVBmT1FtNnFKaEN0S2Z2SGpKZzZxeWlodE9adHhIeGhGdk1Wa3Y3WFhsVTR5aXAyMnBNRE42clBOZzJxNDhsa0dGV1ZlM3RmeXlFR0RkM0p1MmZwaWJySFVSSE9FZ3BzVFoyZGdxWFh5U1RacVZHdXZ1c04xWm5ZUlZpSXQ1OEVJa0RLREZER0JhZElHR3I2MGd2OFVKeVpVTThvVFBPU3grNitRYkM3ZHJMU054cjRKVlRFNjNmVzVqY3F2N2d3VjZISkk0dEd5QUdBb3kzSm1vUVk5NkZlczdUdVNxdHlwR2FDMThPcm1EZDY4MVJ4U1JyK1A4d2UrQytKMlZLdnd3QmsrbVpkazJPM1BTMk04NkpYY3FzbDJBWHEySFlZOHc4dW1JL3FkOWZIcHRicVI5Qk0zN3VrWXB4NVRIcEMwZDBaaG9MN0J2eW5jUnAvNktoMlV4YlJXU1NacVlHUVdtUGZwL25kckJSSFRlbnZsbWRqdUZzamErY0RWSlprVDhxR1FReW9zNUs0MW1uN1dobllrL28rSVliTjFTbE9ObjJKaWJLZTdWOE5taldBaCt6YlNPRm5LQXNyMVEvUEJmWkxsdUhzanVvL2dWdldLV0M0N05wQUttYS9YS2NsSjQ0U2twbDhuVUJTcXVveTVQMTRjOFpkbmc4Wm1yZVVNRk1xclJXWXJKYlh6VlJISy9qTU01UjdwbWpRYkZCa0c2UDBrK2hqd0JHOUlNZzExNkFmb0p3Skgxdkc3MXBsYWcrekZnZXl0d2tEWW5kd29MeERyZE5KejV5R2hYZ0hwU2o2THF3RUllbVUrNlJkT09iOTh5RHhUZkZJajZ4WUdsZk9aeU83ZlZnU3BDWnVYczFCRUh1bXpqY3ZmcW1wQnBENmRVMUF4eUkzbDdXNVVhQXd0cmFHSWU0V0QwTm5uNk9IYlUwV3Nmcm5pdlZzeEVIUk9wMTJPbSt1OUIra3kzcXg4WVNkbUZFYTlPc3Nkemx3cjlGTTQ4dkM1WjdSRCtqNmVsczJuS1N1UVpWbjNldWNvUDNSV0V3R3piVHc0Z056aVdmRWM5cGZkL3c5aUdsQm1VZWlRSGhONGJSdklQNWx1c2lpTmVveW9ldjhoU1FFSmNHcFpEeFBPOWFyM3lKNXQva0NXeGNLbDl2N2Q4MDA1WnpNR09uT3UvR1o2YTR4d3R3Y1l4WlkvMmRGbkRuVThVSGU3UHJjQ3VGYm84YmZuUWRaQVdEV3BmV3Y4dU1saWpVaEplSkd6OWpwd25FWVJ0a2J5VWJjbTJqaVFOOHVWc3J1bGpKK29zRXdiVEVQTkZ1cXo0Yk1VYXYzdW10QXZSa3JMMG02WDViemdXMng1bUpiYWEzZTBHbHpNNUFMa1kxcm1EM0dFdlNYUllBVXl2YzNiVW0yOU5SSGl5N0VuZCtncDNOYnVNNzBINjFKSEhYeWR1NitzYVFUN0FHVEVWTWpJdGg0M0NiSXJDQThpYWx4eHhkVUdpUkRMZWJmNnM2U3V4Z25ieEw0RlM2cThnZm45WisxTnk5TDd3S0FmTFpMcDJScXFVZEpTSVVlRDhxMzR4QWNNeHREYTZHRlNQOS84VzlXWWJUNnIrcCtSbVVJaU05azVpYUJSRHRVVGdiVjJwejIwakJqYk9jd0lVWVllZzh2TTBRTEw3OTdFU0hxZXdQVUhtL0taR0xJenhLdHNKSXZjM29GWmNWcnRkVyt5WlQ1eEtOd3JnWUMzUnlBU2hyV2tRVFdIbWU5U1AwQlFkRkExdDREdHExVkdVcGVma2dvUzlxSi9ZNm1TbzJvakFvWFhncG9nZUw2K2N3OHJ2cEM3Q2Y2YklNSkl0UTAwUExZVEd5VjExWGRCZDQ0ajlMcTR3SEUyVVB1eUlqb2JMK1NjY1JZZk9DWElZTjVQelQ0UERuZGoxQ2x1SkRGeno2TklXdE95Ry9udHpQUEZnam1CYmZaR0pPQnVEb04vMlM4Ym9hZ3hadHZwWXdwRm5yb011eGJQL0lEdVJBVDNiUmtvY2puVTExWVR2OFAvM3hNL3piazZ6K294Y05EQ2pCdzJ1MEdoTjJ5N2FJSDExa2IxSzBLZU9sVXNCb2tzMHlrK2dTUmxYa2lTTVBrZzlkSlNPNHFzWmtTVnRUTnhCRWxQc09GbW5qRGxXTUJKMUUrSE9jR1JqY0ZWQ3VBQnVjSFV4bFB4aVJsQzR0UjVNZ3h4UndVVFdvNTFySFJxZ2ZmUG85ZGFITTlPU0s5U2ZBbDZLWWYrbVY0QWdQMkxQamJ5OXZWWHFYQ0oreUpkR29VaGJlN1FiM3V6Z3FOcS9jUjRXcE9jb0ZBZGI2VVArUFhmaDhpRUFSY1FIUCthV3VmaktibXRnMGNSR0tUL3dVcEZJUW5NcDNMZDNyNWsyTGQ5Z2UxN2RIb3IyZ1ltRlRTRm4rb0dFYVMwQ0Q4c0pUbWVjZzFNeTltN056WDB6SFpmWkFQV0VYemVVM1kzZzBDeWt0c0lYeXowT1Fua3MxQTFSbmJUUXRTajIzb3BWWkZ2MndvRkR1d21XeExMdmtWWmtXeEpYRFUwWUZUMHBMTGZqR25TMW00a2xxakdMdUpOendpUnpVNGFTajhwcUx3TGtSNDIvdFlHbEk5ZHdVZkplNDI1Z09wVUQ0VW9EaVR3TTFSVmFvMmREV242OVNEZm80VFdlY3NZSk5IMnFNUGYyRmNqNTQ4bkdFd2cyeUxBcXBRd1M2SkE4dXliVjlNMWtRMlVHb3JaVU1FMldEYlY1ckFZUTkzWFJNNDZqTWJCQWhaTG1nR2RFZENibHRNTjFSQ1JTQ2o1YkhuanVudXhTOUVCU0ttd3B0bkd2d1V6TlgxcnBoc1VMVkIyWUZGZ0g4SGQxUVFBdkVBdEFndUZFL201N3R5Tnh3dUZZdGdmck1Yek9RTU5TdTNFaWlJRkUzclNYbGd5VHZjTHFDY2t5WGt0UjZvZGxtdEhrNW5ocjVzVXI1bHU0ZGdFYTVGbk9kcVFPVGt0TlFhUWhUaWRLRHg5M1lndTY5Y0NBRlYwQStMK1dSV1pWVjkxczRhRTd4Z1ZVTGhmY2VPeUsrbWhGajlUbkV5aE5hSHRhaTBNVVd2SEd5dWNlR0tCMVI3M2dOUHpUMXVtVmhQR2pwUmZUR3drUVZXSHpPQ0FiQjk1ekhwT0ZlR1pOWEp4djJjT203eVRZY3dnL1VnaXZnaGduMVNzNlQzZVI3Nlo2a1ZmUTh3bGNqYllHVGErckZTY2FQallGYTJBejdZMXFFb1ErWmRxaURIMVVXZUVuWUlOS0h4K1AzZm9lTU9iRUs2emkxUGJiM1dRRXpsR2Q4eXBlV2lpV3Q4RVRiMkFoc29CSHZvQmc0Wm5zMks5Q0NTZllJR25iTDFTNUU3Q3EzWFE3NXZ4b3Y0SW94T1h1Wk41dzRSOVRqaVh2OEZlT1RzWmltM2pxTmttblZ3TXk4WUVPcHJKS28rdHRrVlRNT3ErUVRFTXpESUpYTzFDQUF0aGYzZlQ1dUtKWk00RmZPZmFMQVBhOXIxNjRZRzAxOU1VKzhwaHZqdVM1di9BQUt0ZWU3QXBoRkZGZHJEMnRoR2U0UlB0TVFTOEVLbzBYTW5QSG9idVVLTnJUbFg3M2tlYmg0Qy9icGRVZDEvSjdERWFDRWFkeEVZdmlacEsrOGJiK2xyQWhVMVFTNWlPYS9LRGlndlR0Z25xUkFwRUVnU29DRWNtbE5aelIvN01VaEI0bnlpeGN0TVVmWVptWGZ0Wit2TXZZR0tiVkFrNUtMZW5nVlRsb0U5RnBieVVia0poa0Uxd25PSzBtVmxWMHM1WkRJbWU0UnBQK1NyOXRVejF5QUhZU2YyQnk1Yk9ZRFZqZ3NrNllmSmRiSU91V3h1SGdsdHk0RkVMZzhnN2Z2Y1VEdUNFdWtlMWJYcUlxYW1JbitGMEFsTzNQUTN2TGc5UFhkQTJpNXJNcjVEdHhLM01RYzNSU25rYkJ3R29iUldjdlovZDJNOEZDWTJydW54SFRmT3ZrY3hHdm9PcTIyUFdySnNYVnRsYUhTcjk2a1Rvczl0NC95N0tGb2U2cVQxTW4zYjdlUWVHRjZGNUxrYjMra0ZTNGlDN2tqUlB4aW5jTnZqZXM1YlQwNGIrdk9ORzBJZVk5UE9kelVGSThpaXZEVWMwblc0TnVVeDdNbGpqOXREN1Z1N1pKanJjY2grYlVuUFlMSVpkTWN1RXJNVnI5ZVdZVTZSS0d2azM4UURxY1RvOHRLWnRqZE1DMDlGNS85QU5jWDBhQy9KZGVCNHVwbVo1eWxvWVdydjZDZG5LY2JHNzJoc3lCS0xXNHVKOWt4WnA4WVZzZWVIR2g5eFppTVE3VzlCdS9hU1pEbHBzaGRGbXZkVks1cVVoUGo1T1Y4MDNKZklTcTdTaUZGZTZrbkxtMUlOTUlnbVhiSnJLZEhmSjc2Wk10a1A0V1BjZ3pOYkFwV1hoT0ppTmRYMm1UMzBIeTh1RTBEWXlDV3F5M2lkQ1hTSkZHV2hRMUNSN0pXdllaeXdiaXh4aWFRVEw2NEQya0VBdFNGTlpMYWZxUkY5WXpmS1R1TlVFMmxMNk9yNGhQTEZwTldPRzJXQk40bGpDYmNDUkZLM2RINmNta1pnajJoY0cwZVlMdXo5L2tlV0xzNjJUb3VrazJOTlJ3blpBNkYzRjR1UDYzWm5yZDdEWEdsZXhHV3F5VnBoQmdoM0Z0b09NemVYdjdPd1ZEeUh6YW1aQmxmQ0tSdGZzeWJyRXJlVE1EcXpzVjFWODVhOW9kNGtEUTlqTU9OaVIvNEdtM3EzdVhOek9lTUsyMGJxTUlqTE9UbWJDYUM4YjdJU05wYWtyV1pFcnkyajZ5QVo4RVNQVWFxYzU3U3pHRFNvZk9KRXBwdklqdm9FMnNCTjhUNGpqNituTTJDd1Yxb1VjS3NhRTBQWHBpVmhTRy8wL1lDQWNMQThYaE5aT3lpQlBPc2NzVk5uWUlNejJwWTYrcmROUm44amEwSEdNZWo5UXM0V3lrcGZxRkFKaGIzbDN3NzZTeGc0d1kydmtXaktQYkozSERqWisxaDlCeFdGTTZIdXNqZDJPYmhteDBQNzFZeVd6R2FBK25WRElKYzEzOFRmMUpUR3FqbVpIK3BFMTcxVmRUSVVaMjJaVlZSc1lHdkEzS0YxeVVhT09pRm1SSDZnSVZTeWdPcUdiV21DYmtlOVJrOUJaMnJud0FKNWRSNzlIU2x4bUVqcG1PaFM2Q2dtQlJoVXNCMXNIQjZDT2JTdjZQeDl0eWtZZ1ZkRTl3aXBINU5HcDEzNjNrOGtqM0o4WEI2NERNV1RRb3l0QXM3VmVidU9Gckw5Y2VvQW81cldNWkhST3Q3ZjJYOUcxdzEyd0dtemFMWEpUSE9lTExKMncwQ1FuQ0htcW5mNmdLVUVVbjkzV0ZRRVk3Vy9teGs4NEVkVWgwcE5IS21uMnZObnlEZm5uQUJuYm5Ib3JQOTRFNmRrMXlCRWJHMW5JdEFwaWt6WkxtZStyaVprYWdjVVExelhvTWZZdVdHbUlLdzlhNFp1K0xQWjJydGRuZWFsNHRjUmJoUjBBTDI2TUczVVlaaWhvYXNscGpCVVF2cWFHakFvMkY5b3RqSnVkMlNleVpBWTRtbzR4WFFrZlFKdlRWd2hBQlV3RVlPMUlWQld1b0VjNVpYem4zV3RkRVBzUVRUQVpTdEF5VW84a1pQZURkeGNpcHJhR01YRCtPYmFjdEhsZ1JKcGdvODhwL2FmMm9PbUtJcEFPTUZmRkxUbnFQczZTYlhRdkFmMnZJMmlMMWUrR2U5WnYraXVUa0xrRkRDZ3FOQXA1ZG9GWkxTMzh0OHVoR0J5MlREY1dSTnJmcCszNHJYTFVZUElTTVUxRkcvdmVXdys0aVY4ZDhkK2lsTlBIU0RDR0l5M2FkTmZyU3N1VXZ1Y08ra3l6V1lhdmpuL2QzbnZlUXFCV0FnQW9ITHlyS0JZUXdrVjlzNnRlWlN0Z0ZLS1FqZEtHUitkbndMSTNhRTZrYk9OMG9URUR1S1ZibXFSNXNVcWdXMzZnQ2VWdXBsMW5LRkIzd2V0VHkwN3NnTytNKytHSTVaclYyYSt6TmRHaUI2alhpckxOWDZsKzlqZFlhdFdkQU8yRnhBLzlTMHBYbngyOVJTWlBoUHdOL2hiYk1KTHFiMEZrc2NYWlEveVFlVlhXZWxGTFBYVGl1TnlFUkRuWDF5R21zajAyK0lRejlJa0Z1b3JyTkVVUitDZ0JmNHFSODlpbnpuODV3c1NhYUVSTlkwUmFnUy9MTHYrNmlWTll1cGh0d2R4UExIanh4U1BlS0dCd3RjMFY3UkVjUENQb2ZvYzM0encyRW1oZlZvNXFQcW5oa2FNTE96UTltc1dLM09GY21Ndm1kZEI5NDVvbkZXeVFKWkp2aDRKZ1ZOL3FOeHBxZGNNbWk5ZlhxaGMxQUkrNTI5c3JxeHFWV3NuVVRacFlMbXRsOTRVU0RHRm5GQ0hEQkk3TVB5QlBHNE1uWWQ5Qm9GTGlsdTlFSG82UDVIZ0NQWlNsTXlDb25meTVZRVd6dnp3LzNJRVV1WTRDZ1RRMUcyM0VteGNHNXNJT21mSllCTURPYVd5S3RDNTFobzBja1FBdjAxaUl1STZMdjhtNWhuRFdwREJnQ200K0pRckdHaWdtWjhFT1ozWDg5a2FmSTZSQ3NTZ05adWtDUi9oSUllZG1ldVh3WVMxR2lDWEpqZTN2a2gyTXFJRjc3ZWg0Rkg5dlFLM0VkY1g2VGNDMnc1dGVuR1E3WWtIWGZxdEplVk1JbHlwK0hLMENVNFJGalNvYkk1K0NpSDVJZklGMTlTVUR0L0hQSm40VjR4UjVpZ2hFb3ZGQkZ2NVNkYTM1SUJCcU9xRmorcjd5cVFxWUhKK3NiUm9Ba1FwSkpDcE1TcHk2eHVURXp0NGViRk9iT055bmlNdURLYmtQZmxXaTBvVlVnM1MycEl5aXVZUk5MenE5UGQ2Y1g4Q2N4TzRMZTNEb3RXQURCdEVYemlkY0hKZDNPRG5KWkRBYzZ2cW5MWXpyUEp2LzMrbkF1SlM0TExNNnNUYU13cG81U0tXTGhGYjFiSzNOOTBUR1VEZmxKS3hGSThSZVprNlUrUFJxRm1PVVZjWGNGK1liU1Vwb0JxaUNsd0R3VzRuaURLNjV1LytXMTBaVkJvR0RaVGVrcnZvWFVsYk1RQzM5OXdtaisxQ0ZSNHFiWE5hNEcwWS9nOTc0WVpZZXVRN2ZsZ3E3Y3JmcVhPajR3RGo3UEF2UWdNakJiRGxhOEsyU3VEUk1xR05LM1dwT2ExV3NBWGlhYWtKV0NWbWM5OXZrM1ROMGxFUWJTVUtNd3ovQmV1QXFLU3Y0STBpdSs1VkpsWDJkRENOVFl6UVFNTU1tV0VtOHJ4bEQ4R2hVaW9GT2plZTBERzI0YS9ocnFKeUVrNkdXSWMyc0JUTGZ5b2xiMkFwUmd2dzc3Y3hoQ2FQSHBLeElvek9lOW0yQUxXZDluRW5xbXpKVENFeUUwTHMveGN6cVhBenArRER3WWZ2V1d1ZUwxL3EzTHU1NWlJWGs2dGgycUhUUm9rQWtPeGZRRXVyL3VRME1tSGMyK0IyeXBVK1dBVlc1eCsxQURyR0U4Uko5c3R0YUdNSHVZVFV3aSt0TmxVVzRUTzZWSzFGc2xnM0Y2ZzdCcEF5NjRVM0tIS2xkYUtMUVphWlNUQTRvc3pyZWRiMHNlS0ZwUGpnVXhJTGo4RmwydDJLZEl1SW5BK25vYmdKYXB3dFRINlF6cUUwMVdvRkpIQ3ZVUVdkT0ZyK1M5MVZOOTRzNHYxc3NtUjBlb29NQkNZWGNSNVBIQWZmbXdFdHNYcUZwQXpuRFVrT1liQW9kYzVYUk5CK0tOdGxZbTl4SW5YdlBpWTlMVHZGNmxUbmJpZEUwN1Uwa2tJcTZBRy9FMmJjKzJtZkliZXE5N0VFSTAvWklMU1lCMnhwSlQwcUxUeGlBd213cTJqbW8xQW9pTnVqRzNCd2FIWjl3SGNVVzN0ZFF5ZkRXNzdFcUU4WVFpMUUrTnR3WHUrNTNNOXArSU4yMy9SVDJJVGZyVG84UFd5Um1uNGtzVTZXWEdoVWwwY296ZlVJSUhSNUtPTmI0NzBxRENOb1k3K2tvcE1kSm1RSTRtSGRTc2xlN0lISkxVVlNRN1JNa2JyVlAzcHJmQ3dhWEV5UUgycWtJVE4xWllUbU4yM1ZGZmNOaUJtRlh3eEpXMWFDTlQ2Wjc2ajFTTmM2U3RrV2dyeWtIMTgrSDN3TFdqUmN1cllFR25SbE5jSzZMV1gvWHJSeVNpYTQxV2JRT1NMKzEyUndCTll4dXRQSkRBalQrOVFOanVhVmRxc2I4NTZ3b2VuMXdlS1JkcDkyR1Q2VkJqK3JZM1VEanpVVldKelhXcFQxaWE5MmFPMDUwQ200OUtPYWlTUWhGUVVjVkdsTWVzQncyYWJyQVM5Z24zWDBzNG5BVzNVTklqT080Y2NKR09lby90WEZvaXZSUGdNbktjdmdyOWFqeFNNaEplNkhWdGpKNXVEWmpmSGw5U2hCQXdaUGk2aU5sbW5NSVlFbEJLdDNmQVZpZnlnYkgybFd0Vy9tYUt2a0hQbUtZMTVFUE5ZejdIUTVRSnh1WnNUT0xnSndiMm05MDI0ZVFkbGJJajBWQWR6dDJ3MzcyUmZNNmgyL0t4ZFAzWlRFNzNXMFh5NWRyRy9YTzhQNWRrQVVhbHhLTk5zbGxmclBiZERCMmozVE9tWW8rYk1NVU5wYnhqMVdFWUY1MXBEUWZQVG5LVXkxU3JrMHJmOHZDV1JsYzdtYncwUkJvV3JJa2Qya0txK0hBVlBSUlhlNllNNTArNUNGbmhZTVFiQ3pxK3pST2NpK050VVVvMXozV0tRRHJGQU9weC82NU5IQ2loRGova2ZCM1hYOGdlK3RHa2Z2VnZVTGtpblBneWRJc0szVW9IL0hQL05HTzl1azkyNzFjVjhEMmN4VnBKZFZsdlZPRDR2a1FHRnpmVmxWQlY3WDRzZCtmUGEvQU8xbG9LTXRXaE9jRXFGNWtaSjlsUHltT1k5WTJmRGV4bHJDZWxWZXVJTFhsVFF2N0pkSGw0WnlaYWV1QmJVUkYvb2ZJMktBNkFiZEFFcEdoVGtlbFQvQmlNUmhrdnkra0RWcXFGWUE4Z00vblJQdmlnSHJjSVR0V3Y1VkRRbllzMFVjT1dRVHBhMUZ2VHlHNWl6aUM5NDlsZm9wU2k4WkpUUlhsQUJxMVZBSWhBenRLNlpnV2dzcGtmeUZwL1dwbGptd210SVU1S2lsOWJWWlZkWTBNK1QyTm5SUFJQZ004bm1hdG1GR0JxdGE4UUNTbmt5V0xDL2hRV1hCd3pIdDVuc1JROEdKNkdBNW9QcW84SGlmSE9XVnJ3VWJHSkRDTFBqRHlicU5ob05vUHpjN3hMa1ZqbENLVWE3QzROcFVoNUFTTDBYcFRSaWRKbzV6eWNUYWE4NWRsYTcvTlVwaDhOcVpnNytvMkdqNEhUVVk5cHl1ajU3QlYxMHNBalRreEZ2Z2JZam1VOXpnU2RjRDBPSS9BMWdsZXk1NndJT3NoS2YxcFlDYkdTRWQrUU11Zm1ESnE3NENtb1ZOZzlhcTV2eGNKNVlKQksyTlF4dU9qc0RRRHByYzZFVTFuaVdJNDBPck93cTViTllIenB0NG5UVVRRNXdPc2NqcGJmVzN2ZHRwYk9TeXlaT2FTWXFYR1BBVEdUU1hRSjFnNG1GSHhDOVZrTkdxUy9paU01Yy9WR1U5RUtxWEdTQmxJbnIzSUdKLytYR2lUMmdqU0RCTnNXdnBPMkdjdXFyVzZJRWRoanpyM2wvVnVET0Z3UmFGUy94VDRIUE1adXBEdFdHM05wYmJwQ1NiZjZvUkhkQXpTNnl6TGlkbWkxa1k0WHAvRjZFMklUc3JreUhibnQrV1N0dmtWb3FYZnR1S3lnN3V6SVNHd253VGtlNDQrNVNsM1RraWwzcmVGaW16Z1plTEY3UWR6VWdoZXoyVERWWTJmYVBERG45TklZZHE4VWFIN0VnMnVvMURyL1dycThkaEJscW5nL2NzYk5JQU93TnJpYnhRWi9FZzFUYWs2Mm9leEVOdDNpMnRjL3JKVG9OQkFsTkR5bWpJakVZK1ptT0JIT0x2VGRCb29tQnpYSWNOS1lNYTBQV0JKODlrMEJ1VGdKdUtaclZqY0s3Z25Ca3pMOUxTZDRNNWRlbWVWNkJtV0tEeGxmeDRQVC9CT2g0clIrbUtKZ09HRVZGVW1aZno5QTdTSTc0SFQxV2NyYnlIUWVhT01iaWFBT1hneUo0UXJKbTJ4MjJ0T3dHcmUzaVNPNytMcnJqL0JkVmVuYTlvNXdvRExueSs3WjFZZ0dURldvYWFTWWJTUWJNRzg3YVpnSnNqRmdEeW9QTnBObldUWVZ3eXByYjlIMmRJRTA5bFozMmpKQnNVUnFDWEJ4SmhXNWtBZGlHTGgxenBhSGs1SUpVSWVEcll2ZlUrMXBtZUxXUlFtc2dwZUNNUysyMHBick10d3ptalVFZG1WcXRFZkpDWjdqajVQOFlGU3VabEw0Q2lxRWtkZlI3ZHRTZUU1YnpyOTM2VnUwUStCbnV4T1QvNVVXRXZWdjdud2NWRURwR2l3R09jVnZ1MW53ekluZlFkUmsyOVI0S1JyNk9ucFo5cGI5dFh6MkpPVE1rMEd5YkFIU1JKYkg1eXlobitYTG53ZGZLbENyREpYdDhVMkhnNW42M0gxZnIvTXJ1UUd2MFZNVkJ5cTNBNUg0RzZ4SlQrOWpQcWlvNVkxZkU1ZkdBSXRDWEoyeURPOXhwby9tT3lrcm83NDZGQ0tFbktIVklhQzBwT2RTaHViSFZQVVFmZFQzUCtkeHBWR3IxT2cwbUxrY09jeTJFaFFGUGNyeEY3QWFSaVpBYWp3a0tQVEtHS2UxTFhBWFpkalpiNjhCVnMwVFQ0Tlp0bzNuZkQ1MWZVWW10OWVSUmdyemhmQmg0SFM2OGZ6enlVcDVhOTNvS0t0ZUdzWm9RakxlWG1rZWxNQ3hVdDJMR0xHcklVZGpidTlVWU9ndnE1Z3FNblo1N0hzNE05Vmo1YjJDTWl1eDB0MFE4ejZvanVhN3pTbmVKM0FxMys5OURmTU4xQS9KTUVsNWdMWnZRQ1VRRm5ZSmhYLzBWWHlZbFcxYmJ3ODNiWmNkYXdQVXdpK1hQN1ZyamVOc2lKQmVKbWlGVnEwYlozbzUrSVcrbDVRdWo4elZWYW9FWjA3RUdMUTcxcllDWHZpakZVMlZRZXZvR0ZKdjJZbnJrN0NGQWZ1N2Q1VS9kc1RXdDJZOVZuTm45OTVyN1ZuS0wvRTB3S0ZWRTdRY3NDeEdXb1ByUjZsZko1YW1CcS95Z3lLSm5uOEQ3RzdtS3BhWWtFNG5BTnorcjBPYWU5RXA4OFRZTmpXcGErU0czZzJXcmtndzFrMkZnOTVCaEYyN3BXNkkwOHVxT0J2WjZENEh2R3MrOENhR3JYM1FLV3FzUG9ucjNobHdRT3h2bWhXN2FvdWNveUdqOVE4M28reXFKTFBxbVVhTnNCRmJYSEhnQUNhRlcvdkFiWXNJajN3QWN6VGxpOUcxUER5azRpQWlWNUNLalJmM2pPZ2NkYTRYaXpwS2pQTWJ2d0xNTHRvSzhXY3VwZFhnc0pPV3YxRmlVc1RvcCtUOTN1emI1b0UwZ2VGN1hPZ21LcEphQ05yYlRQMTdPc0d6VUFZWlZTSVhzbEJnc1h3K0dkR3RkZE1xKzFpeHBaNVVGbmlHMkpXNyttUUpYMzBQaFlmZTJmdkRDOG1KVnI5c1lHYlkraVI4UzU3L1hZOEhFcDdEWVdBblBkd1JwcklRYXFoT0VneUFzSDJJUFArb1RWTzhIRHQwQ0ZjTGl5RXhpc2xGRU85OUw3dWZnVVJ4amVFZXFoWW1vWHB1bDNFYXJkOEpqbEZSWDJFb3pLVnN1S2FzNWVSbzVqL0I5OCtrQ202K1JMdnl0OU9aaUppMEJPaGxCeWdpV2FuZVprdWs2QUtKWGZHdzFZYTYrekxTOUFMaVBML2s0dTlVbk5uU3hGL1pUNGJSQ2toUjg5cCsyRkRrQmVtZ0JWRDdLbHZMVmNKWHFxZEkvMEdWN25ZRnB3VDFYV0FQZHFrYzcyeE1HRmx3dTFTMS9SQXhKdkN3TEhPZnNQaU5EbU5mVitKMW9kQlFQOUNsMHlWV1ltOVVKMmd4cVlkNHozZnpaWEYvOEszN1p4VlovdzdmRzVxYVpqTjVEYjZVUkZZOEUyekxoRVN4TEZuY0F0NGhxMFBGZ0ZyT0JPUEFkbE5GWlRIeDU1dWNNNkhVUHh4YmRQZ1dhYzRHYnBwd3BQcWVJZjhINlFxSnJOYytiWm9TY2VCcVIxUTArVkFjemw5TDlLZkVLTnd1U2REdFhYV2crSGpTQkxOOSt4bDBJU2lxRjNwS3puTk9RRU9jWXJEd3p6SzdUQlJjTTJ2VlVzS0RRMXRnRGp4ZTdaZVhMci9IZHZ5RFBHS3FzSEFEWnIwOHhUdXF5ZHNGTjd3ZGNXMGc3UEQvT1RnenljeWZzOWN0YWFlNzhON2ZBSVNWM0lvNHNGdDk0dmdnWVloaUN6UENqcXVCbVA4ZjQ1eVhieUUxdnc1L3RBWTVGWFdZV2lCY1RmVEpZbk52QWtPYXhna2o0TjFSVXBHcTQrSXVHb0NVRCt3NVhHYjJ5aHlnUHg5djcrZ1NsRmdNKzlUTGFGbEFDUG5PRGtHS3IvT0xBMDhpcC9nQ255bE5DSVYrL3pSUktOTjlpV2kxZk5QY1dQWnlQVmVLQTh4ZTRUWDRGRGVpeDBsV2JkcWV2cStlQVN4NGNWS05MTVhLSEFqYWZwSUlqM1FINWFKQ0VPaUQxNGg1L0VoN2g1U0hUQ3hLNFA1anIyemI5d3FDZVl6T0xqTm81ajlnVGVCV3NPekNXMjN0Uk9BZzc2Y2lCV3BuODZKcXlwSnQzTXhKYUJXdXJvdVgzSFlOQVN5ZHFvdEQrWXlZQWtkbS80b3puMlpxZkVZcm5rbVZ3UFB2b0E2VFpGK2k2d2FWdlgzSU15akZETzF0TzA0U3hBM09ZUU9UQkRpTHhEQnRkY09Ic2dNYXFKR2tYN2NNWGJQdkMyRmJJL2ZYcjZ6Sjhrai9OZmdsQVIzcC9PcGRQWU9UVXJqK1RLSldrWEZlWGJQSlBRWlVFbWg3RXlPYWU2cXdOeVU2c3pjdzRFcFo0dnI5OEt6aSt6WE9nUjN1bzBWU3hqWjR2N0c3ZWtDTGtEZ3VyM0JRUmI2akovUGJyY3l3MUczNFpURlZMRDJjQndYTUozSlBKZmdtK0g2M1gvVmlMSVM4THFIUmRMNmJmSDJoK1dsR3VTVWlsVzhsYldPTERnV0FoS1Y0dGJDNThxZEpVbmd3enJUT3owVU1sT0xMOWxVSUxjTWc3dy9HWHFERmhEc1JwVnNtRFZucExZMXQ0MU9KQmhiMkMyMnFpcEZXQWg3by90STVoeXRadXpUcnhwdVdoUWJhTXFBcFFOZkdrZ0ZLbXUxSldWSkVCY3YySFlRM2toUkdyVitKK0t1SVBBYk9mKzJ3aG5kcDZXMXJzWXZYVWIvZ3FOdi9CVkZLTFlnTHlhdGM5SStCUWlSTlVuWkFWbU5FcmlFb0F6bHMyY2lkbFFtK2k2Y2wrMHpxcXdwZXdXN0ZxYVhQbGZYWG1DRFQva1U3T285cG1wTG9UL2dBN1hmU216WmNrNUZYTWRhNFVRNlRkaEZNdXhLYUFvK1BEVXpEYlJ3NmtMdHZRWXNuY3YvQkYvdk5Xb0lvamFZNVBOUUNTb1pRcUU2UFk1Zy9SSlo5cVJiQnBvWkpJTEJWSmN4dEpKeGRYVzFtdFMwZUNuSlVuL1JmZzZ3MFRWUWpxbjVoQWlNeW1wcTR2SkhrNUxVOStIUm80TnMrc1R2RC9vYVEwN2NWV3VwYUxsMDQ0VnZuaXFSOFg3dUNDaURoQkU4YVRpVlFqSk5uWEtjbmhRc3ZMZjhBV2p5WktyaXBsajhBRERiQWRlemsyV0tFVDVaL0tPZnpId2paT3JvLzhMTUd0ZisxMFp1QUxEK2w0YVE1N1VPcFRBTjFzb0NXUE9BWDI5Kzd1MHVwdFhvWWo0VVI5UjRuYTFpNC9ZbENZeTQyWkRxSlB6a3Z6OVptMFVRc3VvVVppZzB4aUhqVW1WRng3WCtoT25NVUxuYyswSk0ybmJNQmNVbm9uSTM1OUVGV2tjTGdhQXlJRXVTUnN3eWY5YTVMMFMyYWNPalQzSG9wK2hHL0d5aGdZdzlqVWdSN0JQcENDZU5sS05ZV1FHL3JIL01Ic1d1UFRnaURTZ3orallpQi9yQ1BlNjQzVFRlSlN0Y2Q3VyszeG1vVHFscitMMHlFdFVrZk9jUVd0L3hyZWJLWWg0ZXIxZEJjNzhHN2NIRUYvU1dGRzdmTHJBbHhDb0lGekFpLzVuT0lNZlBIeUxMUHF1RWZWVzZERndqVmJ0ano1R1FFYzU4WGZZRVdVNnhpTkFNSHQ2N0FodWVuUnhhV2tGejE1VzhaQmFVTU8zM1ZGSE1JZHJDb0Vjd2ZhZlU0bTh3VVlQRHFaVzlFUmNsZzBRTzVnK0t4dWd4UUxBeGV4V2FSWFp5UXVkRzUvWngyV25TU3lHRjdNYk5uam5rK2lkOWxDZzlDMXZMUHdHNmhZQSt4OXQ1ZzZ0MkIwbmpYaC8xMHZkWDM0Z1Exdlk0NXlCWHRnV084dFFNZ0lEVW1oN2VPRnBBSUx6RjBPUUpZR2ZtYnA4aUNtcjhqK1p4cDlUYzNWNC9xYzRuNk1mZHVuMnVmaEhkNGNjMTcycFIwY3hPRDh0TzE4U1RwdTJqTk5zUFpvYkdrNEc3NkpYMDhXL3lVUC9LNVV1N3VUUUozeXdCK2lxeCsxQ25rWExZZmtNdHN1a0xvY3BXS0MzclkzUTUzNkRDeWkxM0tiWTAwTjZmTlpWekhwZ0VFbWVhQjJiQ3BzR3JuWHdqM1pVZHFUSUJLQkNHVUx4YzkrbmdhelJiWCthVjJCcDZwdDJ0ZHpTV0FnbFJhb0lmZ0t4cjd4UjBRUldsaHZqVk9GRE1YNUxaaE95cVNVTHVYSUhWT0lER3FOcWc4d05CWlVjRWIvSE9xR0I5YW1QNmNJeEFJRGNEZUtqeVhvOTVWbWFDWjdEOHZSaTdRRGJWYmdVbkdIS2RTNE50ME9NOEx4bUs0RWVjS1E5UklraURqUXk1MnhWL2dqNWhWZkJpYWhQa1BRRUsvRGN0S2NBVUdKOVhPMVdSNFdkQjErU1Bya2VtVWEzRUZ0TG5sQUZKTjBYMFhkTUJTSHhUQXdKMXlnYnB2TTRnQnFrVmhYdE9nbEFESDU2eU1tMGZiWmNEZzJyd2l3WmpnNjZ5S2ZDaDl4cWZaeHJSWUxOWnRsUnlxS2tQM2hCRVUwT2F4bmtrck1aVVVHYlJsQTliNXZJcnE5d25GYUt2Vy9XVXFzcUxxWHExZExTN0dKOG8yRkMrMExBZWtCaEtEY1EveW1ka3NvREpKTTB4VEFQVWlIaFhXdUpZYlg3eVFmN2NoVHZhOFc1UU54WFc5eGdreFBrTHFjUS9CamlaUWozRE5DdEo2V1hiN1JkaXI2bWN3SkMvYmFCRjhVZURVU1ZpY3VxbUxUY2hTa1hqMTc1ak02T0wreFNma2paZE9YMGVMSUk0YzdVNGljUUtGSjR4NnUyb3VybmFXL3Zac3F5SFNVWDdwdUx4dVFyd3RHY1lYTUMwemd2NGNQc0pVMk9neDhGRDFxUzY5R1hXcEZHV3FSQ2NCUUsrOWtoL1RKd08xaXZDbG5veFFvUFhzTXlFTDF1czAyTWNhbit3SXFCL2ZLSkZkbVhrWWtKM1A0bnovTitFMkorK1JsejcwNXpZcVdDNXRJWHdtNko1aFVaSUVadi9ZS01uemFSdzlRM29zSDVMa1FpcE53Mkp6WC9kK09EcURUaUE4ZG1WdzdiZmg0ZnVsVWFFSnJyWWFFdTFOTE9nL2sxWXJwb3htUG5VUnRoQ1lOZXJBdzZldnBZM3RoM2ZMQ3puaHUwb1ZEWTZFbTJhb1NsMHVFT2tXSXVoOG83Uk9kellkTFdSaVRtQ3FIZzVveDhLWjJJMWh2ak5pY0kzRCtXaFVPMW9wK2VZeE91OUpOZnIyQnRxOHJEd1pWcFV0amhQcDQrS1ppMkJNV2dlOG5uN0xLRkRvcFZERWlBUUdOUU96YnBVMFhxNHRXaWswSFVhNXRTaXpMQjlqb043ZWZudmdUMU9nTGg2SElieW1rRDVVYUhlMU5MTDk1d1A4NEVlME83R1RFVklFSVY1MldBcktKaUlQNEtKZHgwTE1YZ1Z0UU9ibldNV3dUeGlPYzl4N1RHT1ZTOHRFOGwrbW5OMm9ZVzYzZ1pBdFJRbDd2UjBHUUNEY296Ym8ydVFXU09Gd2R5NFlib2thcDhRMENua2l2Tjkvbjd4emk2OGxFTmVyLzYxVnRSdTU3ZnlOTk5PbWJaTmN3SDFCRlZPWFhKSWxzbzNWcEZhanVvNnJrWnhzSUpDL3p4YnRTWVZrVWdsakQwZ2R3eVRxTlFxUlhFcm5LVWVUTEs0YUNCcGtIK3UySXVEMlRxNmt0S1JRMW1JTDJhNno2ODdIRG9YbXBTaUNEN3lYdDlIMjJEZ3NqWVZvSW5XUEF6R1hZZjlrZTFKVGpSY3BJelRHaTFCT0JTSkNyRS9xVWNEYk5aYUJWSU1HNVNIdWtLYWRYdEMvMk5NeDA3RDZDMzA1d2Q2Zk9vazlCUjhPYmk4OEF0aW4vSVBmMHY4djZkdWI3VklwTnZlLzJJdnR6RFhrS1RMK2YraFZ6NGxXZDRYa2trUFc2RlpNNVhBRE1SeDY2V1pXN1UySk1TclljWmJPeWNmWjJKb0ZnYnhUTGR6YlJtKzd0Vk9RbDIvZUdhemkvNnRDaXNxZDFsUHZBVWhacG8yaHFVcHJtQmhYMWNleUFRZmdpZjZOQTB2akpUbHVyUisrT1RnMTF4aC9odzkvK0NWYThuQnhvL2JoSzMyQXhOdTR6YUtwWHFxTW40NXlyZDJwTDh3UEdBeVl1dEhYWWN3cmJ2c1QrcUJCc0FMVHpVQW5YNHhXajBsMmFUYVFWRnBQR3FYY1dBZUNkVlplL29tT1Y4cnFrRnBCSVRkbTZGaXoveU9DcVBLRDhVOHVGQ21zeWs3VjZORUJ0R3FoQXcycC9nQ1dyWXh5bWFBOUxIaHZxVi9GNWR3RXpwRUQ2Ly9aNndscGl1SU8vcUZRY3ZLck0yYVFEZHdxaDBCbVVGbU9jYnh6ZmhwNVJMdXZlTk1odzh3cjlxb2Y3Wm4vK0Nid21qbkNwWXFPZ3RFSkt3d3pQNDA5ZlJScjREcXlCRlBuWGdSbEh4UDdFYVFpb1RScGVTQWxzQXNXOWRpM3Rld1J0SC9oZ1VuL0tkcnNxMUl2M2pyaWo4OW9yazFqYW5UNmJ0QmU1cCtMR3pUU3hOcklrdFNzajhZT3Y0djQvem5uWGQ2QTZhRGwzZVp4RVN5TENFNmsxVVNSZmdlUkdaWUNtcHJkSUhoeGNMaEUrZXZ1MjNQRXJJYVdpZEp2YVNUNk1SQVJDWC9BdVVlOWxhQTJLeGNCL0FKcXpTN0NCcEZHcnpRN25ZSm0xK1VxVnRDKzc5ZTBFM0VsbGVhS1lUbWdOSU8wa3J3TXhtelZPUUJCbFY0d3kwME9rTmV4Snl2Y3k2ZmplZElPS0xIQ05TZ2FUTFNzTkI3bW1IcVF0OUhJaTREOWZackpyTjhpN01BMjdnSndTeUFLMmk2dUFJODNVOWNMNU15SmljejE5WkREdGpNVFRybDhMK0M2SWNJaWZQNGZXNmN5eC9qY0ZXUzlYVUhXa0J1U1lSZmErRzRMU2JwbHhwRjhjL1ZBbExhK2VhQWRKbExBanNMLzJMTXQ3bU9HZnhzeTdYRGg2UFVKdkpiMGozeGhjN3BtT2ZHdVZwMkdQWVZybzRybVh3Q3ZzTG5La0FudG85NUtpRHc2SU0zZFhsaU9CSUY0NUhldE03a3J0c21Cdlc0VitYQVhuYTRrd2IveTJ4azNqTEl6UllSdGRaV3l4MFk2b2x1RjgwU2V1WFozV3N4TXVNQ0g0SDB6NXVrZWZyQ0NQajc1ZEJWOHNlOXVrN09QNWVSZnI2SXJkVkYyWkFMakZzZE9IRThJV0UzTFk0VE93a3VKblhCeWZxSEdtTlFGOHdwZFg4SFdkK2FpNXAwTlNKSlAyVnF5MTZZTjdGV0RpdjJhMytOZGFRRm9nQndIeXRJdFVRbUpWc3ZNR3Mwc2lKdlNoczdwTVRaSmtTVE1KdWRyK3JXdngwd28weUwwaW9MYWFTOW9Pdm1BR0lBTTEwR2F6QnhUUWpTRkJKendCVkU1K24xSDI4M2FUdzAybDNqKzQrS00xNGRIMU5YZFJPYlRvN1hzc3NFcS9LMDJ2OGQ1NFRKT0NQdDRPRVV5Y3d5Z0haMzdkd1YzclpaZzFrQVliTmZJbkFpSWo3NEY5c0MvcU1Vd2IvRngvbjhaUmFzMzl3a29ZK0tMUmI0SC8wM2ExWndQbGJ1aUltZ3AzVW12SlJ0eEc1d1BZWmlPR2dETW5rbnlqY0VSV3ZrTnJKam9lV0VTSlRZbXEvUkxlQ3FIUWowT0Z2bUR5clpSTFVpVkFsUGZLU1oza1l4ZFJGTW5Hc2FjNjZHaEh3VVNENXpoQnhxNEJvNmNHSDFDeERlTnlJdk0wRDlGalBXMnRrWld3NlhTK2ZKZUdRM0tLS3VPTy91RUJROXlXcDNrbjVMMUdubitHK1JwVzViTGdiRTFyN3cvM0JhemVSWEZnSDZEV0J5OTEwNnAwakZlVFFNalJTZWdGdnY5Y0hiTEp4VGNROW9YWFpFOU8rcUxHNnd2VkpiMXAweURXblJnaTR6Z2ZPSm5IS3pMVDJZb1hMc2dQMDlwMXEyU2lFdVdJcVplcjVncHgzeGdxNEtPVWRlYjBuSVh4NGZzQVd0ZWwvSVovbDRRZVM2SHE3dG1vUkFuUG9nTk1FeHdwSTVSb0tvbzdVMi8xc2RyRFJ3dGNDZ2RHYlZhUWJCSTk1MnB5UnhUMkRnRU44VEJ1VUdNeU9peVFaR1V3eFd5SGh5dHUzY3B2SFVrREQ4b3NKREl5Vm95SEYwQkYxblVWZnd1ZTJDS0FhemdxUmxUbDRMdFh4dmhKbWZQNkFObjE0OTNIc1RtemZ5K1N0K0NlKzQxTUtBTVA3L0gwR2RzVVhidDNXYXRPdGRXNUZKMnZoUWpjTlR0RThpeGlLa1p6Z2MvWnc3STczbUhKTFNKTUhlMzR5Ukpxb1EyaDBZV3RMYkhDcjNTVkIraks3anpxV011eVhLWDllcDE1bi9WbWpaQkQzWTZaWTYyOE5iZmlYSUsra1ZnSnRFc2hJSGJnc3hOU0VteTFDU3h0OXk4dGdsMlJvYmNIaldxYXY4aTYxU0pCZm9XSHpwVHhHZkNVKzMyWEJSNEtZNWhSajFRajBvM3lyZGNkek5OOHNPSHk1OWgvbnl0K0Zjb2pxQWJzK1FQRDRXQ1MzWmJGYTIvVDFKZGs3YnFmVzZpTUtUTFFyeThSQzlId3pvZzRNWXVmVWxXYmxzakw3Q3kweW5hdU04Y3o3MzE3VkhmaGtYMlE0N3U2TUZtNGFMcnVuSHZuRTlNRXN5dE02OWxvY1dCMHppT3BReGhmWWs4Uy9HL1I1ZHlPeE9hR0F5cHkyeGJYK2Q2VHFDM0UvcHUzbjR0Z0lRNTdrSkd0Lyt4MVUzQ2F4b0dOU2hMZGZvQjR3V2xOR2YrRWlGdmgwanRJZEhGRWVzdmwxelV3VkplbUJ4N2pIdVhNSGc1RTE5TGFCY29JQXQwMzVoUGxld1dqb1p0Q2RKUzNzYlkvZ2doN0Uxb3diNG9KcVNtMS80clJvcnNZVStlVER2dWZSTFFjMUlnc1RVWnljOWh2d1dYRVRSNHZTWitIQTZBTElidG9NZjQ3djFVODNBeUhIOUg0TDIzajlNeURWN3dETE9hSmw0MFN3WTg5L3RkZlh1UnNmSWpYUldaT0kzTVN1VXl3R0JBdVhUd3lvV2p6blNQOWs5NTY4cTBWTVBPTjRZQ2pWVTg3eERIajl2MWo1Q0I0UHloTnhwdStXanFMNEVsbW1kTHRZSU9jMlgrM09kVkxzSnIyREYyakp3cmt6RzZ0MWJPSXlwZXZ4azUwaUd0Zjk5Y1k5enBMTjFKci9kRUkyODRUamwyczNCM1JEZHhhM1lvTGRSV2FnSmUrVHArbmM1dTAxU2x5QXV6Q29RN3NWcG1HRkN5MWRlMkI1c05LRUZ6Y1Nsbmw0VGlncWJmcms4THdMQzQ0VzdVTlA5elk4dFRKaEtPaldoV2szanpieEJZTG1WbEtRS0dsbkVRL3NhT3haaXFicVozTEozTmRrZWdMclRvaXNGdTQxYlVjdDJrak1uK1JWL2FqaC9UL2dqNEpzUlFWMlJNREQvRTVDM2xoTDY5dEdMR1l3Rlh1M0VJM0lYdm5FT0RydmU0L2RYZHBPM2VlbzgvMkxoTFRRSEFqTDlET01CYm1OaTZwQVpuSmI2L3VOQllnSDhHeTJVY0VTQVU2ZG1Xamd3TWpkbWRyeWRUN2Y2bTBBeG5WV3ZjbVM4eWhrTEdJSHZQSDlybkhqK1pXbVY4aVM1WGlLYnBWT2V1YjFNd1ZZVk1VQzk0SnZlUXgrWk1UcDJhclZVektnZzhIZ2ViSVZlRTVQS1ZmN1Y4U1NQeHY1cXpqUGkxQXo0OTBjNkFYd1lwRjFnQ0MremhrU0VZSitJd0I1QWJWaTZ5L2k1bnN6OVZDRVBaVGdYZHVFbEdzVyt0Z0NVSTI0am42ZEF3UG1SWnhUNWZnVHZxdUVJWTRpRUZsQzBsbVBhMFlLYmF2RGw4dnJWUTNDelE0QWtEUUlSdnpXWm9uckJmYm1oZEVvc3hqN0t5L0lyektRUGoydVNGbXgzRENqZDdmUmFEaG1GOGJ2RVVpVGJaOHBjR2lQRUYzNXl6ai9CKzZNZ0NwNXZKYVF1cjg2SWgxWEYzYmZETTZLWEEyL0pQdDR3bytSRkF0L0w5KzJIWTRDTWhaREFTTll0dVc4cE1EclduL0RxS2paeWkyZjVpRkRsQ0VXZjN6STRocVJtY2RydDE4ekZtMEZjWVRUdjB3c1J0RlplRm5ZVUQ1MnhkaFpoanZiVmJvc05FU2lWY0h4ek1DSnl0d1NFdTBZdzF0M202eTRtdTNpOGt5OStWbTFqZFVERjQrb3VncGlESXNST1Jsd1plUHdXcEtRVGEwYWJXM2s3dXRVdFk4Q3QwQWFWMnZHd1o0ZkxWV3p4RDk3ZVR2dHU3blVMVUNDc2dkSU45UktzRmJnQTlUY0c3bE9tSzVrNW1TWHNaVExWYVI1WnhpTmpLMGYwT0xETXI5SVYzYzlKUVV2K0IwaFZsYTBkSFI1Ykxab3NMNnpUOTcvQVpLTjhYb292eUFtY2ZQb2k5bG1hTXh6eXE1NTJaeWFmbWIvRkEvTmZVSnVQbXZaUWhYSFRtVVBSM2RaTWd4dVc0NFBOMFZ4SkJheFF0bWJiUkZGRDVsU09oNnlLSk5rOTYvSTNGQnlJYk1rZEI4Qit6VU02RWZoaVF0eEtVdS9qTStIYW9GMHRIS0RSbFVZbnFhR2pqc01IcFBrekpxeEUyYXFtYVdiMTVoZHZNSERkZzMzaEtDcUhZSTNIWkZ2NFNVcy9DZkFyV21OblByQ3pMT2lHZEF2a0UyZk1iZUx0dGQyTlluSXU4K3BPWnhpdHRPL25ycTdnUzFWV2FMWDZzeEszSFhwb285b01YN1V2dDNJRHNnQXRpbys5eEpNVDA0WFg2SlJFVjV5YnpIZS8zcXlxMVM5bWtyZGpodVNaNmxqUHBoUW5DYmszZkFLa0grMkVYd0pYZ1E5ME1qWXdHOGl0aVg3dGVka2JjT2ZGa2E5eUxHU0dzbTIzM2p4aGRHSlE2Q29aaDlBRkQrZzh6QTE1eXc5YkpCdFUvUjRZZ3hlc09YZG1tM0NYR2Z5cjRhYlV4NnJWQWlHU0hJKzBEa1dMODBIcVhsRXNnTVd4RlNaQ3Frdm82R0l5UDQ4NE4vSDJ2OFhFVEoxcHdXZzVKNmtjdGdPTlZYVUdtR1N6SVhGeDkyZW1wN29ncDVRNm1URitaTmFUSndrbml2ZTJSeUVicFZVcTB6cHdNaGF1dTFqbVp1S3dSclE0b0gyOFIxa0hZYzloU1VyMzJNU3NUNGExK21Ca3gzcXBmendjSWM0b3FEektOd2ZaZzd3L2hpQlZ0MzZKci9qaTdndHZ2YVo4SG1DZ3F6andpRzNqNFY1d1FGT1lJVDh6RjkvWmY5VlNzWWl5MDZPQ05nN0dRSDJqZE9hUXpmaFl4b3d2MExNNXVxK015dnBRN09vbFJkd29ESlZ2ZUN5Qm1WalpMa0pNUm9ZYzAxRVNSbTd5VTMwZmNBdUtaQ2l0WjlTOHdvK1Nveis3Q1AvZkV3VzRDdUU3UFZ6RGE0bmwzMDBkRW1zY0t5Nm8wR0xlRytYOExLSkRva0hmMW9OUUNpQVBsdzg4Y3E5WDg3RnJnV3JIYVNGdmxnV2RTWDJyN0tKVTFGNXZ4a25uK1dDK0ZVZ3loUkYyWnp3OVdzMUVNVWU5TkVmUmE4Wm5JZFUxYjl6WWFqU3Y4eWpzWktCTEdEbUJYMkd0Qm5WY1BCUzhiU2tzUzZDWWFTWGRGQmdWOWxxZ28wMHUyQmtIbmFIR3ZKYjhsVzFtRko5NGtRamVLbXdlcVJTdWVIOXp0WjAzMnZkNHBtVURDbFZBcms2aURtaWpyUitacTlITVBHWDdWelRhanVhSW5QUkVNc2ZvREhJb0xOekVCSUMxMjJWRkpPWllWUWlpSTlTN0dHNUJpNHF0NkJrMXcwaS9DOER3R2JlOEZrRWhjTHQ4c2lqU2sxU0hMbzh0d0l1TUZCdVJzV2ZKalA0STh2aitCeHBCRUFMekFDVm9FUkZUWllJRncyZ29qZ2pyOVlTOGlsMk5vNG4rTHJsYXkyUDViYU4zc3EzQjNJU1UrOHhPMGFaVmpzSVJ2Vk5DTDNnN09ySG1xWXAzS3UrQ0hnTkVXNnlWL1ZRbVB0ZzJWenZRRUNYRFlNN3A1SnVnekhrMjZxSFBTQ3FyNm1vWG82L0owa0srUzFMdEVOYmlyaHA5TElaVXdiTWlaV25jbUp1VU1jTURhaEY5SjlDdHdsK09yRTVPU2hpOUovUTdmOUM0dXY3SS9qdURlNU9FTTVMTXVnclAycFdnYUI4bWdidVl4bU1SZGlLUUNESzI3cWNaQU1IczVnTkxkcjZQQU15dnBVdEhqWkdHaGl1cVBMQlJXWTg1MVZ6K01TUDJZdTVaV2J5WGdLVWJhQ1BueVJ6OER6MDRDN1c1cWdjazBjZVVnQWZJQkY1QkYwWTRCUnNiNjh0dVd4bXc0MS93b0NIUFNGTGM0cDdnNlVqRWVTR2NDVDBFVjJjZ09URzhWaTFCdlVOR0tNeHczVE1xVU5tTU11NG5OYnRxeE1IRHJwRGVpZ3NFeU1kNG5CMDFHSkRYc1EvTm1tcHd6SDZiQm1XY2ZZZ2h5U1RxUXlVUWxOWm9Bd2VzcVJCbnM5TTlDYUJONHlCc2lyRlZsVElMTW56UXQxeHVzbUFkRW1jSVVEclVWRFZtUGZabzQ4ODZ1YXBTQUQrLzNBVTZzOEUvSGNlTm82Mk0rcU5BcmEzZ3k4WDZwZjlRU2kxMFQxNXQ2UENSV2hIcEI1Qi94Z0ttOXNmTWd6d3FrTnFqRzl3Rjg4YU1VbUNQaFBTNWw3b0RGdkNPb3BnWjhoNEZvWmgxZTBOV3JRbU90Nk14dDl3K2doWWV4RkJLY2FlNEN0SFhHdW9zYk9kZm5sK0tzZE1FUGxacUpDSXYxYjdqQy9WNjBEUVVzdlBMYXRRUSt0ME1Hak1TdVVaY081dHZSbjJQdGFadG9TNjMvQWZBRitmSnRBdzBtdGp4WHJwV0x6b0RjRkVPS1NVRkRZOEFyR21EQ2NjU0Q4SHUrVDgwclBlMTd6RUFQaWN2TlhxL1N1ODZCZ2RVcHVzcGUrd1RqSnpLOWoydkNLNTFINjRVU1d6bFBCcThsYzlISGRaSVkwa2wwZDhURjFxaWVnZlZRL1B6SjdBQnJZbVgzMGhzRS9kcUQzQmdMMU9FVWEzQk13eFpJTWJSR1hKOEgrckVlS0pYT2J6cTdqTzdUcEFBOGo0UjNOdHJXSDZJT0drUnlMNklZd3F0Y0tSK3p2aFdUY2ltVkx5UGcxRjdUYTZwVmhTR1ZsU2I4bElXaFRnOWdzeVJQSVMybi83ZFhiTjdXV1hGQ1hWUlJMTWVKM1h0cTQ4V2U3NlVoSGNLbVpZRXhqSkZnRDNxRE1uK3NpOEt4UUxLY2tvcjhseUlEQUpSNDJPWDZmR3VsQ2wxK0Uya3lFM1lKd3owQnVwRzFJV1pGaGxIVE91VWZadzRFTWNCeEgrWE1TMUZIdjRib0VEU2pvV3IzTGNtRlJHd0FTMW02T1VUQlJucWVpYTcwM1AyTjRuSk9rb0lwbEcwWEhzSTNGTk5oZWh2c2REU21ZM3YrMENjTDlWRWtqV2kwOFY5ZUkzYTJxb0R0b2pPbkI3UHJ4aHR0UmIxRTVmMmIvSWhBZ29ybVlaOUdkKzNlNGtja3J5YnR0NTNzM2xRSjdKcVNWOUFnblZRMjlDRUdFaEh4VEppeEhOcFU0UmNvRDBxUW95cFRGNXlPM1dtSWFUcGlqbGxvNS9zbXM1OWdTTU5mZ0xDNitVWFdibEhDVjhPR3FJcUQweXRvN3ZONEhiMXRnMENIOUlZZDk5OGZxNUdxRXkyc0l6NWxZT2VjTlRJNmJSWDVBTHZLWHliUkRZNFBUN1ZET3p0K2tEMlIza1JCYjhEampPZzlISitlNDhXRXRJYktKb1EvZlA2Y2sxZmY1aGl0M0k1b0dMczZLNFhtTzJNeUVZYVNCMkdsdnRhWU9NdzBBdGlSOXEwcm5uZE85RWJKdnhCcnV2T3Z6OHpBNmZlc0hiVzk3UkJ1OU53TWh4WlpuUEhaR0NCalU0bjFwNWNxcW04SzJ0a1ZHWkFHU0phTHBtTGtINWtJV1hkZWZOL1U3WG44OWdKZnRRZnhPRUs3SllwamQvRkVuMnlCSnlqSi8rMnQxVE1ENmZVeFo2a3o3SUtkbVdmbE5OL3l4MEZHRTk2M2lOZTFPQVEwaTRHL20zUEttd1dQNnMyQkkvR1lJdTZVSTU5bjJyeS9wSHRORmNkd0o1VmNOb2V5SmlxemVxU1doaFZrVDdLTUFITjRTR2RaZzIyNlpuYWtsUWxHUE1NbkxoZGJMU1E3WTIzTTh6ZnhVNEZySDNJdnZhdTFaTFRhdEo1TmVWT3I2cU84ZHNNRzd0OHA4MzJiU0dqSUpEaEdKWjc4OUIzbjdzQWdrc2E2b1ZxTFQ3OHdTMjBCQm85TmRqT2hSRzF4SWpGa0svOXNRMU9NVkJFNkN5aDExeUlXMGdTY2pOOTcxZUhEU1RTRDlWN25nYzNjVTB1T3U0bEpQUDBtQXZoNi93N2tZSTZ3WHFLZjhITUs0Mjk5OS9OWjN2Y3BFV2FTeGhicHdYQlBKOExMWm53RWI3eGM5TXZKME5RK0lKcnhJMHhpNVdXN21KdUZLRC8zeHlBb2Q1Rmg2VUpIZ09NdFJzNmZhNzdXNkZ6Q29GQjdmNUZlZ2UzZHhQS2RUMEIvZ2lxS2cwMmU2QzBTTkRJdkpybnNOTmZVOUR5OWp1ZzBIOUFlSWx1ekdvY0R4cVRENlQxT2tPL3dyaXltTS9oemFKeGpuaTNlUUViRjlhczZYVGtKdkRGL0prRnFwQzlIeG54WnBDWGNHODJsYkpsZ01kYXY0R3NiRDRQd3RkUVhiL1h5d283bHBqTUZJVFh5NUpvU3djZFJRalR5VVJ5Mys3czJkS3B2WFFZQnZwbUQ5VGgvazM1elFUakQ1ZmNnU1V3Smc2MzdDNzBQbE5weTh6WUdwc2c4WXNNdmNJNXA5L05RcUFlZWxYMi9lL1pERWlZQ0psVVNqTjQ4WXdoRkpQWmhoWVp4RGJOMndRTHBJU2t3OTZDVWh2eWQ3WmVRV3RITXJaRVhrZVlzRFJPc1k5QWxQNUlKR3drNE80ekVoVWYwVElDYWdtQnNSdHBrN1JZcjBJZ0h5bHRPejk3KzZtdmZkQnBsRHY1NmtVdmtiMlB0SVRLVS9yeDRZalRHaWJwek1nMloxaFNKZWdYcmpMZ3BJWit5bVhLNFFVMGdKVWs3bDBvVXU4NWdUeFBrVjVjdVlodms5amR6dHQ2QXhvejBRcFhvQzNMdDVkaEhHSE16WWlUM1E5OGRYWWdxaVlHYlBDQVMwQVB6K1JDdWlTTU5FVW5VLzhrOHJUZnA4TnJ0R2dENUtSdkduOVo3TVV0V0JjeUlPQVBEWW1WeklOemdlSlVuMTNoQjFFMTR0dk9FeS83R1loaVcycGEzVTZDTzdXVXA4RGk1azY4bnJrcVQ0TVBGWjFDMjIrYk41VTBxVldIY2gxVndWZlZ1akVvN3pURFFTNEVtYmpHT2FBRjF5Q29xLzhlYktZWEhNL2Fyb25YSWlncHhqYUE0TFFKUE1DVzJKN05VemNCQmhUTEF5ZUNjejMyb1k5TXQyVHlVYjBoNkpFQXd0VlZ4MUVWTGpqNDdITU5UWlVobGVvcXZMTk5rK2Yxb3JFL0p0TnE4YlFETnNPZDJiZGhVRldtbXJGcjkvaE92eWhudDFPcWpnYTdVeGFYSUszUHJwS3gyNDhBekYxZXh6blZtd0hqTnVqd3BQZ29oalVIOEhKaldFTndLTk9jVXFKOUZ0VjdzN2xkWm54TUZqQmVSZDAvVG5mQ1BSdGtHOFc0U0xOREdETlRCYUkzQ29KZDdKZjFyZXpEYzlmM0pBRkVnMjk5cHBMWitaTWZiK3N2TlI3WnJPUTR5eVIrQ25ySkpvcTVmQkxJc29aVjZtRDFRY09hVWc5cnRRL1lqUnZnN3ZBdklsOEJFMVBEQllZeHhLK0J1bVhiNXdsQmJOMWg4Q3ozOEZxcXMvSzd0MFp0U2dkZFZxVW9KZmt2RG8ySzU1c0xNTzkwYXBqZ0p4KzEvSjM4dGlhTFAyN3BvNXg0amJnVW9mU2svOUFrdVNNaXoyekVIRSswMWJFTHc1RHFteTJOVWQ0R3Mrb1Fqa0ZCNG1JZ3RONVZCRGw2dEV4KzRzNU0wMWdDeFk0MVpsRVNyakYwdjlPMUhuM0VteXc3ZEM1eVprQmNoK0I5Ynp0WDRqWGVDSFljbFZsSEhkb0luSTRKbXNXRnM0S2g0dzhUUkFlTG8rY0J2TkZKelZEMi9zN0VHWkMxaEthblpVN2xnMXNFZ1pVcEo0L01Ba2lSeTI5eGVpUUkzdnpCb3FQR3hrVEpqZzcxbDVOL3JTQnQvZWMwTWRuV240dVE1VnpXRndhUVU1RWhJaHR1Y3V0SDAyZVJoNFJEQXpZVkxhUDFMbWViOWNnLzIzU0RLMWZ6Wlhqa0wvY2VkV1dtL1l6TlBNd3pwc01hSzVtQk01Q1FVanJaelJYdStWTU45anBuTU9ISzFRQ3NsRE5mejNGWHhJalRlSE9BZDB1dkVnQzdZb2oySlo1b1BFaHZNSmZuWXgyMWVIWWRaTVZQUU1nK0RHSXpZR3dSZStTbTN1bGJVS2JLakF0MFM5WGg4SHJGSTUxWWZ6Rno0WUNCamRjY1ExS2hOaDFGMG1DZHdXL1ZlSmxZQVRTUkZKS0pKQXN4L2RkVmo3VjU5OXhCQ1lmdUZRcEtLdzdmVmFUWmZVeE5VV3k1ZUZXMkN4bFl2SmNUNTNlTk0zY1hOdGZBbUR6MmZ5cEc2SHAvWmVSYjNJNTNNOEtWUndhdUYrUlhid05YNFllSS82bWxmNEFHT01QUDZJZmhxSUk1WFEwaXhlU001MWt1NlJEK1ZZRU95S1JWemN4dkR3Z0xMRDhBbWpYV2JSenVzRVlDYlJWOVRsYVd0YVk0T2IvU05LSGREVjYzSEs5cXJxekFPaEdkY3JOTkZGci9XbWdRWTBwVUlVd050UUNsL3FMWk9vZmpMdWNVSEJxSzNYRmgwcG9QMHZkN05OdGtqdTVZSU9TZWtVc2hJVGNiZ2w0TEkydys1ZHlSTXhtS1lqVXR0SzNicDZZZ29PeHJrNjFnVXE4MFRUK3BkRFhFWjgrWEZZb3pPMjFVbVRadzNIdmZmQ2VXZjRzWk5SL0t4NUx1aUZHQTdiY2xJUXVWcFpYOVVEbTFXazdSVFJUVXdLa1lhYVYyY3pleGxxcStkVDh1S3FnSjhoeTFwbURMSDRiZzE1dVdhQWpVcXJJNGNHL1NERkgzUHdKeEozUlJweVhqODJPcVM3VlRHaTIvSkgvVW5rU1hOM09GR2lMTVk4aWJxOVJ0bHUxYThxRW5nZHZEbGRCU0EvUUJibk84RkY2a3YwQzNUM2tVMEFsM3ZqNW5hZjFtOURTT2F3eUZDM1JLTG1KZUI1VUo0QzhzV2VOdmdlQmo2dWN2MmtXL0Z6RG9MbEVSUVlIQVREdHJScndTSzdSbzA0SUoyWlg4S0Z0bjUxUzlrN3pZbW5SZWVrekFFK3l0N1c0VCt6MFlEMDgxWE45Z3J5VXZDNzhjQnBJZ3pDSFFadjA5Mm9iRTRMSEFxdVdQMmx4bENycDJ0NXpjTll5dWVjOEdGUEJhRjV1elk2c29IVnQ5RFNIYXl3S1NGTS9uL0c0TGo4UUlHNExTY3p1aFJDRUR1akRuVVpqWW1yMVNCSURkMzU2RWFabG5YaFZ5cE1SZDBZWUNaWTc1TW1wVzBIdmZtYUs4eERWUytscVhvSkhwa0hicy9TWXhQdFh3TWV6SWJodzhyOGIyd3JBUXpjd3h0eWl2UkhzVzVVOWx5SGJkSVBsOUEyWlZuLzE3OVV3V3FLYlRSbFRYT2laSlZLYTQ0bUVidERYa05Idm1XdnE2bndnU1FCTTBpeDhuQVkxMUoycVJYKzduSFlkK1pNN3l2VktVditBOWI0czNpaGcvTFhWZXd4alNDM3owb0dmY2tkVDRyZ0Q0Nm1QbTk1dXdRWkdmREMwV0JyUjVmYzJQbmxkTzFNQmdEOTBSQmhUdHFBUDg4dGViT0Raa1g5NzVxa21OeUR5TVY3NE5yeU1RT29OVW92SFdWd0lDZk1takR4Z0RrZGtDMUxMUjlBWUxNeGZQMXVRUC84QzNUbEx1RnZ2emNYMDhETzBmRVJIaVdNUkJ6TUZvdW45UHVzNXlQTU9DVkRSRVJsS2ljOHZKWnFpb3JyaXcweGx4RTEySm9XeUJHU2dyZWtId1J6UE5STVVlVTRaaCsxWXA4b2lQTjRGbnRmeWhhN3FLU0xnK08wTGh1eXNOV01zZnErcmlvZjFvNHl1REpXZ3J0L2JZYTduTnVjaGQ2dnppcktReS9oVGZ3eCsyaDY4U0Q1VDd0R2htS1I0QUVFRVV6Z3dxeUJGYXY4dHNTTGQ2WlZTTXR5V0wzRm5wSGEvMElsdzRFWXd2ekFZVmJHenJkQ2pqTHdaY3p1Yzk4K1ZjT1NqaGd6YnB4UDBQTUp4TUIyV0xnUjRWWTl4UmRVblpaVEV5bVpsWit3WjVvdHNMZHBmRVMrWlBYSzRiKzQ0dkxIVk9NK28wNWFzZHVZd2RGR1JYdy9RandsT2dYc1d6b1U0b3RyZ0dBVk9ZVkRrSGZ0bEsra1FheEJwd2swVXU5UUpEdWZkWml2RHphcFBUS2IrcnJsc056WTNJZjhBT3hYRWovUTJiQitMUXRUL0c2OURLV3ZjVndlN1JtVWZOZFRPUGg2M3h0dmZ3SzVoUXg0WVgvUDhQc3Q1RzVab0pqQnZlazFwRzE0a2JsR3hUY0Nzb2xBWExPbVp3aTNjd25YM0R3alFGV1B4cEphdGRETFU0bFBCNnRlN1pCTmZFOWtXUktSaHJKSFZCdWNtaDArTmdWRDZHdzlveG9jOExNV1RIY3ZSTXJPNXRyVEtGb0VFa2gzZzNkOCt1M25tTHplSmlpVWFMMG1nSjFlSkZCMGJ1aHJKZDJnTGNwV3dDM2FVQU54ZFp4SW1LdWNMNTV1K2ZWai9IUjBud3ZIbnd1ckljMEdJVEFjcG42N1hXak1xK0k0bDlEbllHOUdzTlpsdlcyaWZnVFRZNHFpN0dGYjdQdyt1akNnRnE0Tmg3YzNuQlI4V2cyeXdPVDJTeWZvYkQyR2dhRnI2VFZBS3QrWkRncjdlT1dHVFhtT2NJa29xZGs2cjE2T0tLWXJUSHUyM1g1SE0zY04rRFBESjVlSFJlRmQ0ZVJDVm1mZHBvdlpaTUNJL25uWS85VWpoUnV0T1VZTWtJRFBmMFZpc1lnd3Q4cnpRa1dGd2wzZTV3UnJoL3gwMExCT1F0MWV0QjlPR01PKzJmZXdLRDA4WGpYMkc0ck4rWWg0aWhpU2txZ0dYQ3A0S0UvUVd1MlZxSWs5MklMY05veUcxRGNFSlFjZ2RRVVMzc3VsR2s1RG5DTXBObkM2Snl6QUtrRUY3ZHZCanVGTGdWM1F1dE9jOGptTzZIcVNsditpWDdTLzNQMEZLc1NaU09lRGx0TVhXUWRneW91elZ1cSt2cUxUOFBOK2RqZ2JBVzl1ZXRCTnBYVll3ajByTzVoREFveEIxdW1abkdEMkVwcjloY2p5YVpodVVuMWVYaTZDZHY2Z1JnazFFRzJFdENnV094T3VoN2UrQ3R2VlUybVp5T1FPQm1uNjhmMmo4WklSTlRyNGY0OGxJNFpxUkp5Y2VIbXl6amp4TmphV2FPWGFQZVAxZ1dqVzRvRUpZcnJESFV3SGFMWkU1NVNnV3VsKzZ5cU40Y2NKV2ZoOXVsT25Nb3Y3UHU0UmwxL01KUUF3OTBWcnp4cWRTdjl4ZW0wUUZ0Z0dzNVBRSDFCRmNIMEVSZ1dzN25HVVVLQlZXYkx5OG94cUtIY21DUm9WcDlYcUl5U2prV1VrM3hTUnkwS3JOZ0s1dDZsR1U2RGFvRUM5WFRjcDZnQ1ljd1RJcVZ4Y0E3aTRzQXRocGMxYkkvejBlWEVVc1B2TCsvUVI5cVhmRG5EOFdINTl0b09FTmJoSGl2TUI2b1J1VFI2eEcySEFiSUQwOXFkV0xRUmRCUi80a01UUXFlejArN3hSenVLaWpGZ3pBZHg2dUhDdGNKQmM1ZlRBZXdaU3pEZDl1YmU5RURkRWR5QitGMm5kUnJBaC9nVVVxdjlrNWhtSzZpWFp2dzZQb3V1NnFpM3RqdHR0NkRzZS9hazdjb2M5bFlWM1R3dkVsNGxCcFhSSERxN1pKWkZpa0tBcDFxWGV2L09QVkVxL2sremlLZVR3TGgvQWdDYzFhR3NsQ1B6eVc0SWs1aEJodXNjejN5ZUNPS2dsRTNrZnB3NkhEQmlLbnY1anhoTmd3cngrR3lYM1ZrQ00yUTZVeU1FUldJUW92d2F6OW80dktOWG5TV2lRREdEaVVGVHFseUpRUUdURzdLU1N5b01wRytQekpHZWFDN1hqSnh5QjZVZ1MvcThRSTYvSjdVa0FzU1RzenhXeURGbzV5OVVoN0xzTDh2VnJNSFpESXBVdFRrUVkyRmZEQ3Z1eXNGZWs4ZS9zdFlhLysxUTdEazAwenVqNlBQU0M2aGxJM2J0QWpqUnhFbFFuQVkwMU9RMWNJV2ROR2RpQU9QMUVRdDJBYWthcmtLbHdNSnlBUW5CelNGaFp6eGpxemxhY2sxRnpiZ2VOcDUvakxsU0JYZDBJZFg4M0NsbG5XWndRcThuYnVncldQVUJBLzVLclF2L21RalcycFlSdkN6ZWtKb0FTbk1IWUlFUGdBUGpVVFQ1NlBkMlFZdUttOWRsVDlEVUN4TStQWWc0anh6dXVpK2FWWmRwVjhiSnp4cmx3cmtLOVBQWklwL0k0eHcwTkZleWpMTHpYR2dOVjZsQjBPcWZhSHNUWENDOFp6Qi84ZzBhQTZURnRBS2JTZ0RiUnJ1cWd2Yy9aVUdkbjdjMVQ5RG85cGpWc3RvQllIeFpqQXVzYUxvWU1wY3UwRXdyN0x3N0FURlZPd2wxRVVrQ2lydEVBYXRXRC9hNHJvRXdnM29MM0xrWFI5akZ1bFc4czBlcW1tNUR0QnkwQmpFZHk3UnU3bE9PbDJqWjA1cWNzWFJyYVp0OVBKSnZkRjhHYjZPM3dOV2F4Snh1b3dqNkM5M1ZYYkNKcWlNTUswbUUrQWJOTVZhS29iNjlBNi9VRERDMWNZYzhHaWNYUDQ1aVh6dW10Y3lhSVpHbFJEY2ZLVE5yYzJpeExQazB2Y0daSlFZL1FYR2xYTnFIeGZudWRqY1hUczByWlZtQjMzeUtnalhreDZ5aFhpVzBzVm4xUHZlbU9KRnk4WXI1c0cyNXRybXZldWxWOXlQcGdicXNwZi8zTGxVeXIrY05taWJjaG5rVXR1WXgrNHE5OHpzellrVjdHelFWZllqVVFOcW94TlZCbHJyTExab0syU3RpbTFBdkovREpXNEUrOVIwUllEMnplS3hVWlY5MHFQOTVWcHlacTN2eldiQjBlRFQyZUpheTlmSi9OamxXcWtJdUZRK004RStxYVhEek9JVnY1QXhuWnRyR1ZERHZubXVFUFRUMFphZjZ2Zy93ajN4R1hQUVVkNjM0UkgxV2VZU21senRnZVN2VHNzcjRSWVZIdkgxMjBWQWxaQ1U0L0h6bDRyVkpGaU14RGxlYUhJWnRISUNwUXhXQWJqZzVqdUFNejVYVmlkWm5DZG9VM2dYM3Fxb0Y3Vkd1cjJnWmk3UDFjaWFZZlJKaktBcERTM2xFQVF5WWtQUkNvMU01aCtUMDVNYWt6UjhQTHM2MTY2dUJCWVNoWlEwaFpmV3RFZ2xHak1KTkU0U3BnejluZ0hjcVd6d3lIMEtPN3I0WEJKSE9RVGUydExFdWEydFJYY0hTMXBHdWRsVjYrQ1FIVGNJVDZ4dkp0dWNPRlJ3U3BGYkcwbWE1K1dKNXEvVzdHbnFvUWhGR0tMaXRteDhYaWtxd2luVmd3Skp6U3dBNnkyUk95SVFRV1dVU1l5bmJSdW5JUVZ4RlBJTTFHWWprUzRPTkVka0MrVHpWT3dZT05lSHpHSkFtOGMwK2tFZ3MvaXBvM3BXcTVyVzljMEV1amtWR1RpWVI3ZDhEWktnNjJZU3hjL0wrRWF1cDVKWFJuN2J6ZDMxSXA4WmpzcTZMNzlYa0lMQ1U4aUI0NkV3NzhPekQ2UzJ0TitiRUV4RlF5UE42K2FoTWFFenFJd1IyUDZtbzdZYlVnbWk4M25jUmMxbjNQQXNVYkE3Z0g5U3ZPVG9LaHJWUDhob2FRa0I4NFZTN3N1azRSNm9ETHpXSFdVc0JXY0hvR3BhVUdTRmpucGdrbkxEd0hFcDRQcjBLemZtK3lRVEMwMllLRkxnaWVmVjdRM2lwMHRja0xJRHhDVUZoVGUwY2FiU3h3cXlWMHBHZWdNQStDSGpoQis0M2hUeDh4dElEUVNEeGdiTmJYMVFnd0xZclVtNDhRdFkvM29LV1Z1d0dsMDRqVDV5bDFiRVlzWFRvZ0FaZWtjRGJPYkpQb28zbEFNOUhtWXdSaVRCbXpsVzFxcjVNSy9lM3h0WVQ0ZHQ2Y3BFbDFxR0lBR3QrVVVsek1lczVqcDVnV1lzMkdYZW5HZnJQaE1ub2V5OFRDeTM4alYvWGFqWWc4SytER0tXUFJMbjZYRmt0d2VicG45NkxheXpvU09yODNLdGpiL0lWQmtRQTRYMk84c016S2VJcFRLNkNuajhiU1ROMUIyZWY1cC93M3ZYVjliaG4vOFN1RVMwWUwvRDdqT1dxUXVSRk9hakVFc01rUWNnWnFFVGtDd3FPME1OMFBjT2I1Q2hsd1c2Sm5KMGU0cEpzTzFLM0NsSUk1VC9ramlPeUQrdkRqUEFjR1NCckZPbk1Ob2tmNWMyaHVPZmozRlBkbXJVS0Mybnd1NmFrN2dCL1pnRE9zekhKeWRBa3NiSGkrVWVadFd1NFFVU09qVmRhL0Q4UG1vNVBwdkxiUnJIdTN2U2R6cVUwcGRsZ2NYcGtVQzM5WGUzQlhlMlovMUo0R1ZtbDFUaGtIUUlmVTZqYjF4RlF1RzIxZHpDUWQvQ3p5Uk9na3dWbVlKdE9ZWWk3Q2xMUFZNTmpjcUsvOFZISFZ4MGNZa0dQaTdlMmwxeE03L0dpSlJWeHM4WlU3enNNZkpwajFpNUwwZXgyeEZzRHNUNU96UmRWNU9MNkdmaVdlSzg5WWswMjl1M05XQWxPNWQyT2d2eWZNa1prenRLV0txMUZ2QTY3M3BNa2V0eXMwYjQyb3FYazJhdUYyWE9Va0NmV01Sb0N5YVF4NmJuMmdKOWo1RFBabzNnME1sTzVtYTV3RTZBVnZrekF6U1RQUmlMTTdnTTYzVVVYYkt0T3VoZEZmWVJDbWYxVnFKZUY5WHhYTkJPSUlwOVdaMUdmT0pmbyttZ3A0MTNFVi8rM3BJajVGSUErOS9PRFB2MkxtUTRvSkxvakYwOHFNVGh5cjk3SUQvU1B4S2FMa1AvSXl0eEYxVlNFYkhUOUV1RmxKZ0paVzRIMEZvY1ZtTHdmd2JkN2Q1YW95K0Z2bU5kUklkSUs0aU1Dbjh1U1lFNEVMSitNekRFc05VMzI3eFFuL3BCdjQ5bXk2ZytuWVY1aGg3VkxwVGprWUxXTks2My9seHdNWW1Xc1AxQmVGMno0d0lMM3RIQ3hmTkl4MHJCeVdFTFMxOXhRMkl6V25mTE1POXFSZ1l2b1g4b0NoaUVCME5IeC9xMjFCZGFvbFFMc0o1YjRWemNoV1BHeU5sTFErQzlkdUl4Y2NFQm1yR2kwSEJHNStrNEVOanZ6aS9ja0tCaXp5NGNCdFJpV2p3elBmTnBtamZ3SlNDd1E0c1BJNy9PSjFGTitEY3ovZStteUlZeWx5VVp3SDJvQys0VEdxVk5tMzUzYWpBWjRDcGxCUzN6aHJtdStyWjFlU0g4SUszUXlqWmNZS3BoOC9GVzd1eEYxZjg4YXhmS1pvUUZFTzI5RWxRNmx0TnlrNnVYWlgraTVwbEx6MVdoZXhZdCtIWkhzRnVNclFXWUJBNkxlaldramVGMHJWdFRQRHN6VTcvRnVBRDFEVGNxUkNSTHladDVwbWZKTDFLVlJwUzYvYzZsQnp6eGFSSU9iMDVhSlpvU0JqSVZ1N0U0REQ2UlpyZWtDcGpFZkl4YlNuVUVHMFdKdWZEV3duajNhUUhCMzNvaTFoMkZHZ2Q3Sjkvb3dwR2l3RXhGTVRsTmJLdHFpNHlnazRqMzQvUmEyVitlZHUyL1pKUmVWSWpuWHpRMXdSUEFKYWxTTmN1UFRZRkhqZ3lYdjhMK21naTVnRXJXcFRIV0hScSs0b2dwSm82K2NENjJKSjQwSmkvNnlURERpTUlpd3dmUTFzMHlvTlRlbklIYVRob3dqazBrbThLQW1mVnB4T01iMXdDdHhCTmRjU3J4dnNhWjRJSG96WWxLUEs4Tit1Nm5KeXYwNFpTY3RSRUF1bGYvS1JZUFFNZVowRDFGamZmUjhUTzNHVkhtMnd5WlBEdFNvOHlaL1ZKZU1JeVRrNlludXE2Zm9sRmpHLzZ0cXl0c1FWTU9kY0pFR0tpTVhTNjZacFhDR2xTdnM1aTl6eG9zSGZib1BNNngwbzlwcTlDdlh0VkV2UHlrUUc0S2REWHdJd3dxTEtFdCttbC96aWZTSlhwN1g4Y0YydGVWVGN4T3VmSFg1eFpNMXpJcm5ZVWtzRm44cXR4b1Ywa2lmZEdINEIwNEVGaEtyQ1RmejgveVo2TnZKZkVDd0V5UHJpb3lQbnZ3L0w0VHRCK3ZXckhlaUdnNGZSYkJSaFk5UDh3Nzl4V0pqdEZWUHVFZWI5OG44bWg0STR6d2JIS25pNU9TbmVxaFRrOVk4TFYwbEVKWHBhbXczVGplb0NFRDYyTFZtdEFkTFpWMlBjT2tZS0VReG12RHZ1RGVuWDBKbW5nV3p1S0t3M1RKS1ZsNmFpbU5WL2xjbjR1d2dla2xzdnE4NXRFUmJzc0NMRFIvajFLRXZNdlZkUXNDTGJaemRzOXhFY0tLLzlEdlNnTWpMYkF3U3RVM1dlazVpY3R6SThoNFpXWDJRS1FlWElRWHN4QVdsUVBUVE1BdEVJN1MrTTBoREEyMWdZWHp2VUY5Zk9pbG5lL0QxQnRJenVqemEwUUl6TS9IaGVZYXZDTnFHaGtNa3NmYXVPZXZnRlk1WVo1WHA2bjIwVDl5N1NaYklKMk9Hbnd2ZzhwNTBmTElCR2t5ZnpVbG9MdFNEdUpZbGVtcEkrYTEvZThSeklobWI5Y05udzNIREVYaHlEbXpDRDh5VlQ5Rk9CRUtrY2V5MjdPelFab0hFakRRUDZrajdpakxRQjhZMFp4Nmk3N2YrbkE3WWNKcnBUNWZzTVhvWXphRjVZeE0zZ1c0cmRGV21VaEU4bTF5dXZSYStJaE5SS3lYZUQ1b3BwUkRBNE5IWnZOc2ZCMG9yV1pLbjd3a2tvTnI0Z3JPUWZoK3RQd21YMFRBaVJGY0tWNUl5QnFnZm1JZm05N29FSW9KREpyOXRBRndKSCtVWlJuL2s5L1Q4cloxYmdwUGtWU3NxOWtmK2g5aEpINFVlMENGeEFiWTRPZU9NV3RrVjVRaEJpTnNscnZPYWxZTit5WWxzbGx2U3pUc3VEOXpvRUhwczA0UjBJdm9XVjVqYndlQ3pETjdjbGJFdkVKK1JzR2pxOGQ5TDlWY3dUdzVmS2NIVEJnekhjak4xWjFvclAyRUlZTHdHTGIvWkJjQW1kZ25tVnVnQW5Sa0tWWS9VRlhKZ2dzZG1YSUozV2NON05ld1YzMmh5TFczS21KeWJOZTF5WkNSWXhSS2FXb2dVWElJVHhpeFhGU3hEQXE3Q3N0b2RweEJCYnlVRUVYSTBYVTRVRGx3ZzIxekcrUnlybWFuczVJWXRIN2JpNXNIQnlDYXZIT3d5YiszTUZSazFSUGplT0VYQjAwUUUvREtpcWxoWURScE85end5TmZ4OWN6SlZkTmNEbGJ5MTF6dVk3akJMMTRUVFIvZnJXVUhwMnJXczZyNXpNeFhWMlJiYVlQOC84Q0ZHd0hQTHljKy9SUS9ET2lhVnJkMFAyOXVTSGJOZ2JvQkMxTHFJZkpCQzFqa3IyeWNoYXUyam4vVVl0NlZKNlNMUDZoSDlidlFlUFBodGhaT3owNVFHTU9yU1lkOXByNE8zaXFYeUs5Nm1GU3ZibjkwZXkzNUtndVloYzh6VDdqd2tFNVJSRUNmSm1OME43NnZpNHNiZXJiMHhFUUpXQVVmb1IwQ3pUaHh0SklvYjFuRUkwWXhuN0xqNmlTV0QzakhobGxtemlNVTJOMm1rY3hVdzRHR2dYY0JKSzhiaDY0cFp6S0hMTVhzV2diYlRNRjFjekxQWkxDR1B2V3o0ZWxwQzVDUEtVMVA3d2VLRy9rT2F6U2szSUY0RVowc2gzWGdFbStJTXJtNXhnY3hsM1Y0T3d4QmoraXluQzRxQWpxMy9EWHpmZjF6RE1nS2Jydmk2MURvaitnVGFPNENncGZ5VHZwVGxKai9SMkdCWStqYlJGRlZhVjlIN2hMclZFNHJPLzl2VHZsRDY5dmxDZXBsYUFZbkluTjFUS0tpOC9YZTYvdDBvZ0VkMG5PNE9pQjBMR3YxT1BMRDhOWGdpMWRhSERSSGtwNU5XNDZmNytKWUJFNjBxbmVFZzJnS0hNV1lIamk2R0pWVGcxekVTckVYVkJjaDVWRVpJaVd3WjlxY2VSNVVkSTQyOTdGT09yOEZUaEZVZmVJM2JHVG85THYxOVJXZEZ3UXg5UHRTTkpkUk8rWnNOV3M0bEUydGY4NkRPRnJlT3FYVU0vNEk0UWtFYytyNVo5dFFVSWJEVXp2elNnSSs0anJ0KzNpS1pGRVZWWVRnWkhsZVp0SWI3a2pDd2FwU09MNno0RS9PRUQ0N1MvTWlmamwvMy9URGdqODZseERrYnVESHFPT1A5cFFzVkI3S0ZJemllUGJKUnVWRzRJc0x0eTh5TzZDL3B3bHpTaWRrV2RWc3Z0Q2NNMnFsOTRVSUxMeWxxTTNtOHNDQmozL1ZjSEZHYnVIVzRid1V3NW02c2UwdkR2MjdtMW11OThCMzIwRUpnU1h1WU5wVDJMR2NuVnRKcEZjYmtJRElWS1o1QmVhYktEdU51VXpnSWJ2b2NWVHNDWk1RQ0JNNWFVdEVSUDIvVloybHFvbXg5NTFtZHZ4NWtIK1ZiMEprUVdIVEtsbVBRS2lMbnJvb25MSmQvbWdqWVFYSlJTRHJ5ZGhQaDlXazdHMkJrb2ZoRlBYQmY0a2VzQWdhRlBET0Qwc1d3MnVGRVpwNzB2ekp6dnBIbGVuZ0doOWZVUkEySCs2NXVDVU04SDF2c1NZeW15Q2NjS0pKcm9pMm5ZYTI2UmZTbk8rS0lMZGYxVzhsbFJJMlgvOWJRMkE5ZDNuUGJTUVpDeFlpOStGVkpWbUFtOHZMdEpaWjRyZkYraHNsYW1zRGVRWi9OeExXQS9Da3VQa0xucXFZaWJPQzFJalNsRENkNldJUHl2elNqaUQ1dWtrSTFjNnJpYlpCbHppdUVRS01iWXpjTCtEdWl4VE1iZXBKLzQ4SDZxbndEQW9pV2dIYllQUm9Pb2s0M1diaUlLUUpTY0F1NVV1UC83M0Y1NWFXWU1MZTF6Vk5RWm9rTEYwYnBaZ0g3Z2huYkxIeERhcWVFSGdWSkpaZWl4ZE9XYXBmY2lrL2VzZkNiTEF6VTM0Qk1lcTQyYWVkOXYwWE53Znk4VmVBWkEvTlJ6TFBwOTYrMFIvd3BZYXppb2Y4VUEzZFVwZTRyWkUzN2VnZ3hja3BZblM3bWhrWEZBOUJXL0RZN1dONU92c1VIamJ0VC9Rb0dKL1RCUmFRRFVlcXZPa05yek5yUmJ4VVV6eUpEZlRpUmQzc00yUVR6ajRSSWxvVWo5VDVzeTdIZkIzcldOUHBjSFJZSVVpYTZVczIvMWlwOXFoSSs1RUZiMVFhbm8veS85ZzlmbExnTGhBN2x0cnV5a0NtWHlJcWJEWi9DY1pjb1hDdkVPNFJsRDYyWENZZ3V1d1J5a3lJUEU0TVhtQmlCT0NidTZkamFBVzJIN3dtbVRab0VyYmZaWndrWEdJM1FNQWV2eHllc01QNk9nUjhHWW1oeEE0SjJnWkN6amNEY0VmMXU1aVFoQmd6em9wYlc3MmRhQUgyWUtUTEtmdnJmaGluaGM5L0oySGprRENWM0Y5RGtodFQ4MjBrQ29OVFR2RGRkVHVWNktqSGNKUUxEdVlqejRUaUZjQmR4bEdEdTVPdGJ5aDMwdXR6QWQvU2VzRExNbkR5UkxmaDliZDdHdWR2TTY3YmFjcVVnU01RVENUQUdhcE9pWFJUUmVlY3RCUFhJQWlreFJ3T3V1ZzJTa2pNV0VRNGtHTVlQSi9ZSm41MHNHMW5GZXpEVUFzemh6dHMwczJpaXdLZWFtaTFpODExaWpWWjdVanJEdjEyRCthTk9FbzhBdGIrMXdXUElZODJvTXZYTENWTm5Id0U2VkRKM2pIYytsMGtvUGZqUWZEaVhrbFZGeVo4L2dBYTE5VmFTOEJJUHgxcjF4RGNuNUxYL0lvdUgrTlNNK004YkFuZlVncE8xUVA2d0dKK2pJNlFFQkg0YjVFTTNEREo4ak5rK2ZBTzd4aStvMmJsdWlWL2psaUdmcE9hRWNSZFFoR3RuUTFNRmxyaGlVK01kcjhYdG00TzN4UHV6ZTg4TWExelRFYW41dEx3UFhaK3plamRXMG9YUzdiTTFmTHNEcTFtTGRCWGlBNm1SemxwbzQ1YkxWQVdRaDkwZUFMQzB4bHZqSlkyQmNoRHdhcUlyUjRjRXRObXhxZ1pSdlIxcWNUbFZ0SlRMaTNxdjlsMmswNC8zbDd0ZmwrUk9INm5IUy9HalgwVE5qc3RveXNDdEZLWnNFamU5T0VuYjZScEN0YTl1NUVoSVlGU205K2hiK0hRalFTV1IvSkphcTBkRGtIOTRpbmQzUitDK2xTYTdnSWtzZ25FRFpZcWZ0WWk0eHVqM0wzTy9sVmtCRnhoK1JMMTZZTDRYSE9wM3BUTU4xckYvcHRZeTBnT2FIZitlYUw2Z1RqbkgrRU5GSzFIbVBzR2dWRGQvWDRISXFHbFozaDczREdrMWlUWXJyUDJQWSszc0Jwa2pHUXhYSEtFeWkxVWsrWkVGVG9TUEcraVNFV2VMVnJEWE92UjFyV2NtcjJ2OG1qd0RnK1lySEtBaVNEdFE1VkFjRkl0TnExQlpJVnRTQldGbVFEMkVoYVN5V3Yrb0VyV0Vpb3FGUnMzQjhubW9RS3d2RTlzYXlrdkZyaXk1NzE3ZFVlMlI4SmVxK1A0ZXdGNW9zcGpzVjRvazM2VWQweEE5dURaSVBFNGI4U0NkUThZNW51NEQvWm41VmF3OEdMa3U2MG1qUkExMkFhTzlyZm1MNUxQTzlQTTRLOG1UUjhBK1lWb2V4d2g5c2xFcExnTG44OHMzVXB1WThnbFpnNjV6cVVCRFRoQ3M3WDZoR2M2Zk14dDBpYi9kejhKY0wzQXJncGxzM1NHV21pOGFLNU96RWozOENjcEFXWVVjYVFCWTczVW16bTJPb1BiM0ZZMFAzWHZheWtOREYrcHNQaFlYMTdJdGs4WlRwU21aeFBqOUJsbWNScmJpQTJyWkZ1YmU4Vk9HK2FSS2xtTU1RUzdjTE94SVZrWFhYTUNMM24wQktsa3Z1THh0Um1lcFk3TFJ4aEc5VU1LQWwxRjN4L0FuQzM5aTloVllZaXk3ZUZqWGc0UkZzYnhwM1B0Zlc4eFFHaUFoYWhscVJncGd0VGtIR0lSWjY5ZGsrWnA2WDZtU3pEMmRuUkcvQXU0RXIxUmU1OXB4WkI2WThZUXF3RC9mVnZTcUUwcnoxUUk3TEg4M0ttbTg5eFFSTE9xSTRNSGNDeEVQQnVJZVorVXVOMEtjaWYxaUZ5cEhxdFdzVXdnTlYrekN6SnVOamNwN0VuU1lGcjk5UDI3d2dqd2pxYTFyS3VJMHVpWmJSUDRrMkhndWduSXUxYkoxY2FiTEVkRWhNRGVlSWRRWUdrUlJHV0VzMm9vZDZ2QTU2citpSVNQbS9sRnFheUFxeDQzaWs2emk1ZGU2TjhhR3djZmFKU3g4aFVtb0phTVlHQUVnYk9pclFERmI3NXpiYVBZZ28rcUxBc2MzdDhQMlFndE03RWE2MCtkYVdzMTlXMzhBem03cCtzdDkwUEVlcEhNNlJJdGZsYmRIdzVacE83OC95WEtMOGQ1SlZyd3o1TjhxRjQrVlVld2JSS1ZSendFZE5wTExHaHpjR1N0RFJnbWROdW00cVE5TGFmVGhhT0NmOXl3QWdvTVpnTjRTTU5haEUwWnlITTBhVDROS1N2OUJ2NkprYkU2ZFBTcy8rQUdZRXVZc25GTHFQMzh5V2p2eWRkQmY1cEpxOEhkYXZXbUpEWmY2UlJBTGlkRTNQYncvY3V6TUpYTGZWbVhpVHpUQUNGYWYzNitPUHgyWG5DZ3RYR3dHV0ZQRzlwMHErVU5FeHR6eHRONFU5QmRDdzJ4ZG94dzhmS21CMWo2Sk1ESW9YOGZqMWljWWFiemhwTkV6T3grQzFzL3dDZHZlQ2N4SWgvOTI5V0tRUFJNZ0VVNGhVZlBPTUs0YTlyZWFhVGNDMnZFckNkZnJiVExmVXFPeGQyUWdSYTIyVitwemFUbW55L1liNnVTUUlVbFB2YlBVZUM2UE1DTzAwMmhrZG5tcEhpTDNzYVpBdkdzUUZBb3VzMXQveGJuY0VXRnJrR1A1Z1FvenpSUFRGZlgrejJJakdRc1dCZ1F4VURhNzVkVmpiQmJvVW1OWGhxNlNGaFJiNjRqU1dTc21DT3llMDNvV25UQ28zK3FvSkZLdW9YMk1DUWJLb0o5YTNid01lZnJlM3AxWW9LWTVmckgxaFBkem9TSVlEc2NTc0Z2QnoycC9UU0FYQmhyN2FXMUtyakZzTDlRZjJvSUZhdE5YQ09YOUpvQ01aL2V1M1BlVTFhTjlzRThFMk85ZXVPejBFS0VwSnhtY3Z0eVJHVWRLNzl5YWwwNkZ0bm9jWWFzTzlrN2tSZjZFNDFlS2dnazJpbE9vaXZRWWt4MWZ6UjdWT1hkZk1yeThOaUgrM2NVaFVoOUlPVC9VZk1YY29YbG9LV2VzdkllSVE0YkFWcDF4bHd5QjB3VmMvckF1UTYrb0Rsd3VKaG5HSjJrMWhJOGw4T1g0bnFGdVJxSjJReW54MGgwSXd5dHZjZnQvUVdBRzRpOTIxSmU4Yk9wZ2VnRk5RcGVRWGJ3aENmTG5reTVrOXpRTVBPTENLWEpWd2NvZFRwSW1EQXh0L25WN0o2TTMrMXR5NGVIc2RwN2M2VFdpOUtLOXlvUGpHSzU1SXZqRGpTUXFuN3pNRmU1WEo3cEtTN1IvZkFwOHRSL2swU1BweThld0tmZ0E2NVFsaVJ1ak0rRW5wZXczZnZwUUYwM2FJbS9LdFE2aXhSbUdSUklQMjBBY1hqSTd2ZmdtQ0cxN21rTmZXV1lvaW1XQnM2V3R1MGpxQyszODZ1KzkySU5zTGFNaFJCQ0hmZXJsdGY0WkJYKy85NGRIM3dPOTR4M2dDVmM5bExkN3lmWC9VcTNGTHVhOW9RNHpjRnhSNzZSRUx5bW5jTVdDSFk0WUY2Q3lSaDhoZ2dTeDRWcnpQc0pWNUtaelBIOGZUOGxsc3FCRGpwN2NNdGk5emJ5UFdVbXN0MUx4UWRRdCtoNE1nbHplc3ZtbGhkc3BsTDdtdjB3RGFubmM4WFZmRzR5UEFRaXZpVkhkK0lHbTc2TFVsL3VjTnV0UTBkYkZWbCtONTl2bzA0YXY5SlpqR2RqR21XaGJjblZ2THNYTWkvTUxWaHoyemJFaVd5c2NPS0ZPOGVrejd4TmdSak82NUJYcFdJZTB3Sm1pRjNKMGpWN0RLNDE2aWZxZjg1L2hTQlNNSTVFZ2UyN21ZVXNlazZrbEMxeEgxN1ZkdGwyRFFLOXBwbEtDZkk2N0FlczlHYW1nbng1bS9ueFNid0pJSk1jcmdUU1lMNERvelFNelhwcW5uNkdKaUpvQWtVMm5tc0hoMnVkQzlrdnNvTmhqczM5bDRINjlVN1J5VXlNc3FDOURFWjhOR0FCTFJYQ3Q1aVZpTm4yZ0g1U096K0VtVG1UZXFmQWtEb0VWUExsQ2dMVjVRNVJmbEdZSndJWmd5OXFOa3NVeFgvTU5zVEZ0dUxwbytDbDB1Q09wZ01QZUFxS2tyQVhiNWpGLzg5ZTRVeTZLNDdCQzVCQmZXdjJSWGxaN2ZiNEZKTG9EMndzNzBNOUl2L0g4TFBRRFFtWnhWcS8wOUk3aDJWL3NzaWdzcndkblhIc3JHUStYcXhmYTlzdks3WWNBS0lYcEtGbk82UHhVM0hEUUxZTlE5OE4wczgvYnFtbm9McUJPTGdER0h3WGhHYmVLSnk4S2xjNVd2SnNFekFrV256c3JPWlJLNWZKMGl5OUxNWGo2MUlJczV1V0tzTDNaekdRcnFUV0NmQVNzL3p1VEpiZmNoNGo2Y0VBOENvS1RjVHJvTHlEQ0l0UTl3V1crVFdYU0ZJMmo3WU4zZlR0bVArYndGTDFkcU5zTzZZWDNVbHhJeWd5RUhkTTd4MFBSRDRkSmppVmZzUnZQd1hxYi9xYXJxMzNIZ0h4SzJweDZ5TDVFR2hNL1dsSXZiRXZsc0wxUERxelVLeVVrZmRjSEsvV092amN0QVFwblRRUVNGbU9CTmxpMFZocy9obUt6cjVyRkdYZEpmendiOFgyd01JNGRtQ0FaZmxSK05UbkVudFR2eUdpS0lGNmNJZUs2QzhFdTREbUVDUU0xMnZHSDAzU1VLM2pBbzZDaFFZbUlrMkFVRDR2QTBXS0pBelk3ME1GeGZJa3VBQ0Y5UmNYbUlaZG9ocGtiVzlHbCttVUZyRDZkdVcyakdDeFNVWStNUDAyeHpacTRSRjlQSURGUlNWcEplUDdCQzl0czlLTjFadXpIMVZ3SitUaEt1WVFoWEFIa1RVeUFZcGsrdktvNFVPZkNycDJzaTQrcEt5WGFQdUJ1Wkpib2c2YmlCL3dsMGUzZ0RTa0w1ZFBZb0RvdVpTSUdFbk5XZVJtN3ZYSmQyUldIRFE2Q0dDbjNOdTFCeEJ6YS9yVWh4VStkVTFabGozbXJiTEJsQ3NibWRVd09INStNUlUvVE5pU1oxbnBmQ1lvY0NRQ0xUbkxkUi9RVFlpdDBqRFNja2xLUmNvWUxmSm1Na05MeHFTNWdIOS9NVndKalhWN1MwM3dkZXJTcUQzUHdYMTI4UGhFakRIN2pVQ0VIem1XZEFvbzBWTE1sWnVYZnREUmViVFYwUzVNNk5yelZSdHRvMXRXa2YrUWcxQVB3b216bXdWUlAwell6YTA0eEpWbVFQN2Z4bEhtSitHZXBFY3lrYVFxVk9uUUZWQVduekpTYVA3S0FxNjlLMDZLc3hZVmJqRVY3ekd4NVp0OWVWWUJ3R3pHVjhydklvRUpxejBxMmNoY0lyTFZhMHA1Mjk0RnVtK2lHWHIxMXR1UFdvQVVCbzlhcFowQVRZTnBUcGQyQmN4ZTIzM05wamQ3MVY0N2tUdTVscWlBZ0QrWm9tWHBNNzNyTWhCaEJxTHg1ZUJna2VQaEZiM01BTFM3VC9IanJ0VnJsUkRaMU5EQmtpTWp5eGx6Nkd2ZHNCQytwVFFXTWVkNzZxMmJsMnVHMmVUV2VRMm1aZDE5YzVWUnpzQ3pZd0x3WFBPblN1R2N5MTRaUmUrdVdtSy9ZcS81dDNVaVpmMERkdHp0SW9uTVlYUHlZUURIZEMzT2h2ZXp1emZQQnJVSG1IUEdXc3g3YktWNklVaEl4Q08wRmNEbE0wbkVWOW9pQi9TYlFGZFN0eDJIK3h0Z0RmV1BMWW5hcTdIZ05VckhIeCs2MkROY2d3a0k0TkwvQnZuUGVrcTJ1SFRFWGR3NTQ2WDI0MnR6d0dMVkl2d2YrYzFvTEdpVExqakVYV0dRSkRnSFVFamxWdUhIWFRqVFdkTjVRYzdGNy9kZi9URXV0a1B0S0VzcE1xZ1BrTmNyb2lQc0FkUkZPeisxUXU1MzJ0eU5EazVFUUpIV2Y3Z1ozZVBnclNKUXBSN3hHQ1hWdUxyU2hLZTVXWHpJZ2pCdUM4Q2diM3BoY3NqWmQ3SEs5TCtGZHFZL3FxeGdyWkVnaGxzTXNKU0k1T1puRzlOSEVzOEtzWE92QWY3dUY5bk9UM0FUM1hHMW5GS3ZaV0pBOGYrRWUyb0tjdCtYZTdQTSsrUkFhdE1CSHphMmJPYTZrRzFiMXdrZFh6SjQvVG8wZDBpdGhoTTJBbEZxWWlkZFB4WkdDeitXVUF1dTFibUZOcmZ6RmxzOCtPeW1GKzFFTlVBaFNEcUUwOXlHTlpINGp5ZFN6MUFJZlhTM1pwZzZnYjFvTVdGd25sSDZ4dGRMc2NLVWMrc1JsYmtub0xHZEJ0M3FCdHo0b01PVEl5VHpHckVOK2N6YiswdGYvTGNPQ0syQWVZVDNHNEtvVGN1RzErRFRYUG1KVXcvMVBiYndyaUZ1eXJYNm53MWhWYU1idVFSWTRUNUVuTnJXRWd2TUVQZk44UDZuSHUyaG9aWmpsR1dSb2ZvUVJIR2VWTFhBb2dSZmhaSm9ocmpJQ2NkMVZwY1NnQWNpaVV0Rno0Y09kL0IvMHhzZVlEcVlMU01lcjRvRUdoUis0ZWVGRWNYSjg4b0ZUMHpxTE1DNVhPTk1vb2hhdCtNZ0FGaHlLaFlmMjZHMlBmcGx6VFRmVktONG0ySmUrUjFNOG91NnZRSmhncHUweGVjMWQyUTcwNVhPVFh2RTdyenl4Y3NVclR3M1dENHBvRlh1M3lzN3BUeTQxVzJBb09wZTJFYmpJVTg2RE9CUGhGaXExZzFDMTBDVm9Uc3JuQnBOWkVleFowNjV3ZmNxdWZxbDB2N2k0N1lVUzBIRXVLUFREVlArK2dqTExVRkVvNm1leHM5aTRWMWJRR1loeDNETUhiUG5jYzAxNVZFTFlxdWxqYUpQS0d4c2xvSlBpanV1ZXNmZ1g3WVZKY2tTbWJnZEJ4OWdwM0pEc05BZkpqSHVrS2xuTG5SbVhWMXZ4Z2o2RVQxanBKbHJ1TlpkZ2MzZTJ1clVkWXRyZ1VkM21lWmk4VFNSR1ZtM0VNdFhvTFFMckx3MXpqUmZUbUo0Q3pUTU94SEZtc2RvMHRwWVdMalVtQ2ErSi9EaGpSU0pVRWU0Y2twQkwvaU1TOVhFMlNaaVlpUG11dExBS3FmeVRtSXNlcGVzVk1kb3ozTUI4MTBXL01ZUTZsUFNzc3N2MHc3NjlacDZERGtiUnQzci9JL3BOY2tQR3lhTmt4cWZMQktuNHVQUGdQemNjM0hyMGNuQ1NqdXJScG1iODU0MmcyQ3RKSE5vS3pLMDI1TkVlb1hITkk2S2dLaWRJc3hWcllzS3kveGxEYmJSQjhaREs3L1lMY051VTNMV0s3Y2Y1M3Q4T05qWWJwQW9yaEo1c0g0QmliZTdiMDBpK1ZCdVZZRW1ndjNUS1Job1lraHlTL3kwZlNLKzMvNFNFWkN3OUtCbnl2QU9IL0pBdjI1d3U1UFA1WGlpbFZFZ01YTmhIOXlHQzhGSG1wSFpoaU55eitSN2sxOGN2NXhCRDdQeDVKWDN6bG9VWU5EV1VGV3V0SzVnUmJ3YUhRdi9KWll2K3F2Wnk5MVhieXdzcm12dXBvSU1EYnhySmhFbXNnRzBxMWlXTjFZaHErcnd3S0lZTG9qSy9TaXZZMkdsSm9NVnk2c01XbXo1RmhXdjRvb2VVTSthL00weVVZN0hCaWZRQkpOaDcxRW92bk5sU1ROTEtBa3ZiUWo0czYzNk5DK0NLckovR04xcDMyWjh0cUNpaTlGNDAveUQ3UGRHK0pOWDlvL25yVGdiUTZQUlZJMEFMN0RRUDdweTVMZ05NUk5jRFdlaUgvQ25HQ2JYSVA5RlhPVWdzOEJxKyswWEtnNGJPeVE5bjIwR1krZ2hycFE4VkxnUDFORG5wQjRkajAwVkdIZnNjTU5OblNwbnpGbkI1ZHFKdjg3QllkQVhNWVZoN0ZQRysyN09oMUplUk5GOXFkVmRlWVVaNXRHL3dyNHBFa3JIVy9lN0s3enNmdVFGL3lCNU8zVjhLb0RERHdWYkJ5a3RuT1A5ekRXSFYzbmRTcXEwdUtRcWk1MHUwa1V6QkdVTUhETzdueHM5OTM4ZkJiTFZqVmJRWEJwWVpTL2w5U3RiUG1CcXVSM2xScGZLSzgweGJSUDQ2dkk4eTRSc2xxRGFEZHpWNDVWZTRFeVpWQi9odWo0alFwdENac0hxMXdpbVNNUUtzWWFKQ2Y1WXBLNThUQ2RqRy9uTXdnbVdRcnFic0N6QTZ0ajJoN2hNQUJTaXRZZWJQTXZyQWtDTFR2cU1QNEZHNXRFdG92aHBtSFh2UzZjTjlJNlJFQnB5eXI5K05KRFVRc2djbUJ4OWFYeEdEUkMvVU85RWoveXlmaDJsayt6dDRhVndacW53N2RQMUVvcXdueS9GNTQwbm5tWjdTYWtDVmorVEhPYWhGYXF0Q0E4UEZRblBQV2l1RkxxcitocWhWaWx4aGIxNG84TTZNYTJEVFBaQ2l3emVYckdwb202M2pRaHVYUzIwdTd6Z1gyTDdLWTVEVC9iTUVubkdLQjhMaC9UOW50ZVpGWCtocEtJbERQNWRVRVRkbTlTVlFoVEliMkNmb0ZjVEoxb1B1NjF2U3lDUXhDQW1xYjVxMEpLWmtqTjhaOWx4SWFGNzVZbXZ5aG5rZWNGZm1VcEVYY2FUdWYvQ0pMdmprQUdYU3Q0S0NNelNZeDdLYnJnK2cvSFdQUDQvMnJjRzVVR2hKVkp5czZYcFJ0VTcwRzdBUXd3SnBCTmVSRGo3RUxyektqendpd05TWGVqbE0yUHpsdHNvR0xUZGRJeVMrUndIdTdVOVJVaDdOZng0YXJkdE1aeEx0YzhrcytncHhhckhzRkw1SjBJTFhURFY2UzJuWm5pVS9YUTUwNGplc0NFVHo1M1hxdUlmNnZuNWthMzlKTDJIbStRcGhhM2diMUZoTVFvY29FaDJLaE9ERFdKK0hqeDk5M0M4eTVlbHlyL2E4NXRXSlUyZi85QlowOXRqa2E2OEVvM2d6dHVCUTYxTGJHOTlwS2JWdDlFQVg5aUNoNE5EN2I4S2kvampmNDk1V1M3YVBGRDgrSFVRT3ZNL0ZTMytLdlZIeXlhKy9TQ01meVhIOThsd09pUHgrb2hvWE9RTnNvaXBZSi9ZVmNSZFVnWjF3V2l6RFJkR28vYXJkdFNQcFhXYzRubmlIY004eEVvUVZoS3labmhUY0VEQVVHRDZ0SVBPMmpOWlJ5USsxZkNaWTREL0lxcldOZ0UxWmJ2eDB1Y2FuUlhkM3lYeE1Fc0tXN05ucnlqWmZldGFGZ0NpMUwxUGdUSWpKcHRSVWJHdGVDY0hFQ3dwaWFMMU1menpQSWFrU2NIcUxLZnFSQjdWZnZnSU1YTDhsaGxLdmNtWGhwQmRQS2VqTlVHb3dZUEs5WWNTcGpRekFwSGhhWXc3K1lrYzJuYXRXOEp1U3kvZDVVN00vQjRMZTRFQ2I0SmhjV2pxcFVWY1Zqbzk4STNNeDUxallzeDJRZkdydkVLNDhkTm56MlhtTy9DYmNLYy9HKzd4UzJEUE5wOFpuMU9CeFJDT21jSjIzQW9WUk1KSW5iSWU4eTJCbHRKemViOWhMZ1J3VGlsR0lubWg3bThmM20xSHdWN1dSK1oyWndMUjNQbXp5andIVFArSTQzTDFIOElwSndiNnE2YU1zRjl6U3JQQXFQcU1kVDRzWnA5Y3hjWHc4VGp1QndnOEtNdHRmSXhpSmppeG5BdHN0TERXMkRVVm9PNEVPT3daT2FXOHkwRjJwWE02OXFESklDMGNhSFFoREh3cCs4ZzZMcWJ2aE5XYW0xM0p5OGE0aVBvN1RGMUVveVNwM2plQnRZWWxlcFJSYlV4UHJ6d3NjeGVQUlIxalp5a3QwY2I4RU1wR2hnWmRJU3dBa2I5UTFNZ0ltV1VSc0tselJaSXdKeDN2ckVwZFJhb3pPWk1iaUtteUlBK21oMERSalFvc1RGYkxpUFFySEdpZEhwZXJDVWJva0ZxSDA3UDZlSndrYnYrZnJoVVRNdzZSOFM0Tlp0NUkyRHArRnBUVWJpb1YyUmZwVFFYU2lLSDFXaXl1N2FlQkFDaGFSaUxid1lhL3YzcklDZ1BtZXhhN2oyd1hkK3B6U2lYNFpacjUrUk52c3pjYjFVWlFnQkZqSmhGWmtxNmFJODdYekVsTDk1RlFsdlpRVmhYWEMzem1jU0NlRmloWUc3WTFpV0ZoTkZRWjQ2SS9pNVhDbjVMbnZCRUpjUi9PWDRwZ0dBL1V2cTJaaEFGNGJWSzZEdHJ0cWhOdFRXMGRNTXFQY0M2MnMrM0diOStNaUFVeDZ2dFJyTWcxVTlxNFdtMjdueFVDWGd2aC9nV09qZk5xZ0grU3FYV0ZxSEJwT3MxUFZISWtSTFdvcEs1a3J5dDQ2Y3RnbE8zNVFOUElnQ2N5cUNtRWFmd0ZNMXhwK1hPWlczRGhzV0JZekVqVFp1Wm9MV2x4QnBBVmhJUmh2dG84UXRsazV6UWxqdy91ZUhlMVJJaXBBR2FJa0Y5aHpEUzhIbHlsTXRuNW1wUGl0SlJWVlB1Zmp2WjZ4RWdNREd0OE54WW9KWWhUZnIwMlRyUVNrU0hhUkdQT3FkallPOGJjanYwVDJSNGRrRGJyWjk0Qnp5ZkRLc0U1ZkJHQ2FMQjAvMHBKY1Bxc0tJVVVUTldCK1dVTUt4VnFBcVRoK0MrQ3lMYWYrR1ZSaXNiMU55a3dLN2JxaDJwQ09mc2tTUnc5cFRNbFlyVkNGT21MR0dQTFBEb241TzZYWWZxMjBQVC9TUGRHNkZ3YzU5UllMbWlHeXpxQ0drNC9nRUkyVk9EektZZk9iNmY0RDVjTVRQWDNZNmdZeEVFL21OSjhTWk5LOTV6ZUU4OVBFN1RBV0FEYm9DUnZHVFRFY0dKYXR1YmFpVHk3b1pGMlFCNUtISDdnNTVrclpUREY3eTRqZ2pnZElGc2lJSFBvM08yaktveXR0cUluZlE0VWxVVGxiN0VPTllZNE9RaUIzWFQrZUxXUnNvUUREM1hadEJYdXo4ZXpNQVl4a1k0U0FSM3lZbUVXV2tObGNySWIvZWV1Z1ZqVC9mUTdidGxaeENPcFlQWnJhQ3dadTY2TkpwSzF0bjIxaFN2Y1haM2tnSExPTXZrY1hucUJDTmVUdHgzZDBGZERMWlI3WmZYaVJkK1lpQ2ZrVEJtWGdPZnR2V1JlMGNyOUlWWTk1dlVKWHhBdzAvcm9EUlJzZkpYcysrR1djQUNHOStIb29NRTg0MDZZMWpDdk5ZZDFKU21WMG1IaVA3RHJMNmhGODNXdlBTcklMM3VORXk0SWZXT3dMTjNUTzVkUG1GdFRkVnUvQ01uMTZoeERoS2h3Ykw3cUxWVzMyUUVXeHV3cGtCKzNjT25iaStiREZ2TVVuSkZGQzRIUS85RENadFdGYW40NUZuQzc0NmU2cHdpZWczZ3MzRGNIcmxUQUorN2gwUGJVUDlxZ2hoUTZNeCtJYmhPVHR1Z2xqdnBJdmtrandsSWJkdmllNUVUVExPU3FIQnVJdGI4U2NMalp4bXhMTW5pbVkrTkF4MXlCbGk1NnZwRk9mVHhsaTZnZzd0UStxY3dGQUNUenkxa3F6Tkg0STlOSjRlcis5aGJQK3VpT2owSi9SZ1dpZjh0ZjZpcU5oQkxpOVkrdmJhNHprbjZtTFhrdlZPTnFDanhXMnFsQ3N6SXdXMXZTemFrS1RocUxYQ1lvTDNyMVl5QlBycDYvdFptSXR4UkdEZ2ExZm9TOWMxa1B3R01OMVd6MUtYYThnR0tvYnVqZ3NtZXQvOFpBTmtJN2gyZVJzN1VocEZiVjh6Sk5GUWFSNitwWDE0K04wN1FtRThXUkl3Skk2Wkc4QjdyS1l6d2NvMUlDZStobmpkQVJYSjdDSGltN2FDamhxeU9XQS8wUlhNWVdvYktrSmR2bGZYVGdVSHo5bkVPQ0VjeGNXcFhKUlpaTzZ3R1g5U3VOb3p4N3BBMXRPcFpIWmwvTFFnQWZUemhpWDJLMXNKcUgyZW1MWnFxRC84M2pxVXdnbUgyMDM0N2QzZlRjc08vNXA0czgrNlorOWRoM1A2czUyT2ZhWGJoYlJDcTlDdCs2QXZTWHNvczdJTkFSbUVHSVB0SGVMaVd5aTZNRWZ4bDkzd3o4VjJISElrOVVJeEU1MnFEOUxVZ3JNQmZQV3Nic0tWNmRMTS9EekJrejZnMXY0azBMcGVXeU9KWVc2UHd0UUdNT2JpQnl0YlBTL3dGZVQ0bmI3RU9hZGRzMDR4SHdUU3NYNHRBSUdwQVgydjZoY0U2eGI1WGlzenhXbWIxczBpUXc1VTNFSVd2MUhBRFFZZ2hQSDA5OEM2c2k2aTZaZjF2WmFNT1pxYUlrTGNXQk1VTGY2ZFZJM21pSFNCUnNvNDZVZmo0cmR6WW0wcFlDSkhGTlkyQjdXM2VraUFyb3dFVXM1eE9tU2pDUXNKazhVYmpkVVZ2YXlIQlp6cUQ4NlE3QkVJa0RHbVdPL2I4dHl3ZDJENEVraHRMY3FodzAyeTRkeFBrRTI1dUltNW5EVzlheTFwSEVTZk9yOStTSE5TZG9jNVdtdysyMzZRdHVLTHFnNStjeVcvOXhaSCtNZjFtMi92TWN1VEQ2YnoyTHdHUFlQeHZiWFg5N0Rjc0hlcHhCeVlOeDhiaW9SRTF3U3pTNi9nZ0J4UVBCcFREa1ZqdlhtNTBjNStvRWYwcHJCOVQ1TTdlS3NCaUJsekd6dUJIM3BDbE9YMFh0UjBiZFRFNFFjeXFkSC9RRU1LaERYRnpPemZGdmplM0xlTVVvWkZSc3dkaGdXS3FRenJVSElJM0Z6ZE56bFZrNlJFQVF6d25qTlhBQTllVkVrZ2xSbGJwaVlNdkdId1dpQTZrM2h3bTdxS0tPQW5PZG1jSjR6cDNLZjlpSXBVc3BYMnloZjRzUi91bXo5Q3Z5K2JIT0s4WE8vUFNWLzlvYjhTSEdyOC9tZ3gvVjk2cFdlS1MrSWlhOWN0YWpTaE4xR3dmcnJSbnJIa0ZDVUdJYjJ6M1VmNEFhRGV4aGQrR05zN01TeUlITUhQcDJSV0FsMDBZYXVSeE9ySDZNOEh4S2I3UE0yUDJCZXduTEFSc2NLZEtBMnE0VXIvcll3N0FxcmNyWkJRa2w2SU5WYS8zenRxT2o1ejZET25TbmIvRENHK0h0UncwZDRWMW1Pa2g1SDhhUFdERXAzZzMvVTVuV3gvL2VGaTA2bXV5WWx5a2VqR1djOWtiSlMrZktzaUhyOGs0bU50SDUvQWF6dzdoK1dCZ1NIUHliZTk5ZjlObDY0cDVXbDNUYS9ScE9EdDlmVDJTa3d3OHhxeXg1YW9ncis5WElYczJWVTh3ZmNlMEozY2c5dUVWYVprR2dWckNZTy9hZWNydXdPeThocGJldW1PbG9YSFlBVGFoeGZMdk5JL3FJYlR6M0FQMmxac0tnY3JSMFpXT3ZGVS94VGxpUVJKYk82dEdYendDcDVDS0hmdnkySS90Y09SS1FYelNPYmdZamNuSXJacHQ2ZjhMQVowZ1I2cFYyQmJTTTNxdHpuL3A3ZEh6dTNLTEpSVVc1SnRMRG82bHlVQytGenN6VUl1T1VYcmo2SHVlZkdVNHhNMlNob3gzUnQ3blV5M1krTEU2dGEyWUxITzNrZlhrUjlGZFpoZWlaS1NHNENldEVhU0JjaFVBc0lvWW5BZ0pvSUZMQWhWaFB1TFIwUE5iYUg4RjBtYzdhNDFkU0psSGUwZ3UzZ2ZrQXpMZDdKWWk0U0YvREZKbUhOQnN5L0hGakxUNDA1NE1DS016Yzd2OHZpWWsrZ3FiUnMzT2hTakI3dTFxa3E3b0RSd0NhUUtocUwvc3dUREJXVEp6dW9GZXNkWEd0NThmM3JQUGpabi9NNVBkR2Z0RFJTWEducUpIeVluOFpZeUd3MGlwcHdQUnZVOXh6RnZXNEIwV1hsZUk1TXVHOVBXSmphQmovMHJQV0IwYmxsTDBKdDJWdnkxajFxK2t6ckxsWEYxZHArSWFjNm1ZQ0pjRDVQZXlFU1d3ellQcXh5UVpad1h1MGNIMko0NFhmR1Y5TDVwQ3ZNOEVHUlg3TE9CRHJyZnBlY25ESE9KWGhaN0VnS2doVkY0cXN6bmRPYUhGRDd6cFJzeFcvWm5yL0pNdWEzclZHc1YweWFJVXFYVHpJUE5YZFVsYWZvOUtVQmh5QnJhTnZnNHFqV2lJS1dZZ2tkVHlxZ0cxVEFwZ2tvYXV0MWIvU2lzKzRxV1MzR2Y0MEJ3WjU5d2xHeDZDdVdMSWppRTFPTzRHUUMwZFlMWFRFOTBJTStFYWRydVBYMUtDL2pHK2dzMWI1R3pVeUVrNlBhOU52Vm1Ud2tndmFFRG1rWDlSRStJcmNWKzN3S1QvWGI1czFyVGJSYWlKZ3NoblVUTmlzcmFXYi95bUZTNnVjeDJFMUM2SGZ6MEFjYVNvK1Y2Zm1ObjRMbEpvVnNpYnJKS28rczk3dVk3cVE4RVl6K3N4YUN4QU9LcWpUUW1ZYU90NitUL3ZNMFlkWkxWb2hJRDcySm0wcGw3WnpYUW1JSGNQMFhSZlNGdURlT1hzVm9xT2hEWjlzNS9zbjRLMmUvbWZUdXcxR2gwbzlYdVZBQ3FpaEhVRHFidURuMktLdzVwbXVjRU83c0RtMUNvWjJkd1Y2NGJoY3NVTGx4Zk1QTEh1UEtwZnE0c2RsaGpzemY5MGlpQUVtcEFXRWpFTVA1eDFhUDFuSzRQNG9tWUREeUlsR2NlVHZDZFpPS2V5a2dHOUdwM0ZyNTRuRVZaKzVqSC9ZUGxwak9NTzdLOGNVY0M2V1cxVDEvTTRMNFZhQUFSdVY5Z01BbVJVd2NhRzE1WmoyN3YvVmxKUldINmVBc1pkU3Y5dTN3QmxRamMzOHlTZEswTTAraXlJYXZwaW9CemZmaStQT0kzYnVIVnRIa3JVWUV5d09zbktzUmNsbWF1NFdkQ1U5Y1IvK2kvakVuQVZpY3dmRS8xb2ROOVlCRE1jRjRzcmpIZ3oxWHQ3TERnSEx1cG9LdjVLUmxWWHY0VGZHVjVpcS85ZU5Ia1F2blVVVkNLVzIxNkdHZm5mMENnQml2S1VNVVl2Szd4SmRoNm1WUEx6eEJqT1FQUFJzZk53K0VuQkJmOTJzdzk2L0dDQ0lpY2gzWG5PQmZyaXNldkdLRlcxczRLYk5SK3p6eVB1eHkzWms3VXhFa0s1enBWNys3Z0RCNkpNVExPSDl1UDRtVDB2dVdIRjBPR0xMWm0wS2V3dE00MlF1SkhVelZGU0wzVlJ6YUVmUm9xZzJVTHB2RENjWjl2WTRueUxDaEtKYm83Ui9BckV3R29FZldSWU9sQ3FSNThrYnJmNHY3VUUvazdpamovWW8zaVRuSjJmTWZaVmtMUG1RSTNDODI1OGdQMWtPS2tuaHRhU1Yrbi9CbktScWhpdyttTWFMTDhkMGRVeXNIa0JNYjhtVHJwNmloaXJDaWFWWlJ5Y2tSVXJ4dFF0Um9TakRiNnBpeUZ6V3BRMzlkQzlYV3F2cDJhQ1ZnQzJtT3RoUXNLNm5QWUFrd01oMFVwbVN3Ukt5UlVRSjZQT0VKazU3UlN5OThhSEJxYndieGFQTlkyOU1XRXpxTXk2cW53aXlSc2FIdC9qTEY5RGFLOGlodXhsa1VRbllOeno2RlozWUFCWWtpeHpPOTd1ZTV1Q0lvMk1CVXArWWlseDJZR1ZvUzBoRzJMQWRydmp1Um9OVzkrWnhtZUJOcTI2TU5lSVFmbEFuQ2tuWGMxZnZpVWVaOTJLNkFzT1NVT08vbWRjWENRT3d0ays0QTQybE5OSjE4clYxUTQrc0g4SW45VlVWL1lFNlhzbUZGZ0ZQNG1OSTRGdDN2aG5lYzFFblJzVFhGRFJyL3UwMHZ1VmF2ZDM1aUwzZHQ1MHp0RFg0OFk0NjN5YS9hSFNPQUl1a1o5SG0xR3l2akEyQW0zN2lEZW9XeDJXckNvMDJGSUhYd1g2b2xlY2thOVBkdDNCamRnV3ErYUduTlFPVmVYWFluQjhsQSt6by9mMm1uOWhCOHlXV3FycVk4WFlHOURycUZHSExKTkRjdE9aeEpoZ0IvdmRob2V1amNuUXh4NHlKM2duQllrbSt0VkJNbWNVZlVCRzE3YVQ3MUdMbmlvYmRZcGI3K2tiSThSZW00Zm1tTVQvYVA5SHNsQWxVTjdrY0tVQmVkYmxwV0NQY2FUMFZiejBESUxZMStjQ1R6VmFoS0FFbGpPWWd5WEl3QTR5ZzVZb3hRWFdJa3VoNjBFdHRzR2ViZDJDQWUrVnNXVG02L2xHdEc0aUw5Q3h5TmE0M0R4WHVpdEtaQ2ZRV05MV0cyZE1TZHlxak9iQnJObXRjMTc5MUhvVXhVRFRzNEV3NHIyZ1RZYUVxSTRMYVVSTUdFRjdJOTFXNmlTMFhzNERFZ0s0QVA4ZjVQYlhVb2Q2WXVuL2FwN21pRzFrZ0s0SFlVOTJWOE9WejhXRkRwSTBqNTlLYW1QK3FpaVphaytCeUNFYWRNV010OGZDM2VKclcxbGZ3QW5GT3FFODFMZmJiSjdqMmFrMnNzV3Bjc25MY0RtWWkrTitDVmdkb1VLRGRQOHU0TTllaDBxUjVzMk4vM29RTkkwZlhRL3FIbTdBVS9FYTVoSzF2TUhxOStZTlFwdzdOcjBCeTBIZWU2eWp4dkZuUVJBbG1jS0h5em9Yc0oyTllCTnNXZHpiT2xlWkhQRUFkTnhpcS9vMkJXMXFHeG05TWRmZGFMbnp0TUZoMFA1TVE5SG9UcTlRelpRQkRxa0tncUpsbUJnUEdPQTFQOHhKNU9lZEJXd2hUTFJKLzBJY0sxNUNBUHVTamUwTWRPRHpMckVudDF4QTVPM0J4K3pYUHJBL0JZeEczR3g1a2ZFZnBXN2NJL0VtSGtYaXJVTHB4T3h0NWkweVFnWG5wc0RXZmFZMVk5OXhWdHZQK2pOOGxPbWRXcEU4S1hJS1BSS3hvQmxwTk9FeXpSVkh0VXRRdHl4YjNyUDZFVERPOWdXWFRjbk12UUtUWGJwM1BqOHNoRU9CRE5WbTNzTFRoMEJ5VU11eG0ybzNEdWl5U0x1NHJuakk0c1lNSFhQZGZtQWJVV1oxdHZvS09XZW02RnZxOEI4Zys1elpJalE3UG41NG1lZnp5M3pSWE1VTld4Y2Zid1kwVEhxVVpsOTc4UVM3SVlkSTc4LzhCUnBxRWp6Z3QyeDFVSC9JbWU3L08yTUlKN0IybjhKLzJsTXNDclpIWVpmMktIZEJ6Nmo3S0tVS1dqbEdYT0grWDNNenFyemYxdXA0dXAvN2VwMkZoKzlzQ2pvMVVRL2NFNm1CeW83RTVOQ2U1MTl1cmE2MFRGdmRJYlowUGJ4ZUhXajl1cytpS2RaaldKTzRGdXNITmxscXNnaEJhSGhPaFlqeUl5RHZ6QUFUTWowL2VPSStDdE9UajFQYXBZMldhVXlPWFhhbnpHVXo1Nnc1RmovUkhEU2w0N1VnaElJWUUwQURTV0RGMFdoZDRMcG9BUWpQR2c2L3BHK0lPT08yZkM1dGxOVis2SGp1dnljRnhxMVljMStKVklUNHdkUGcxTjlRY0Y4U3VyQkpLRjZoSkJGeW5ZQUhNMyt0c3U0Ri9RM2djYVNjR1FGWVVVNm90QXRJYUIvMGl3WU1DTWRhYXZGSUZSS1FTNmxNb0t2Q25CODh3MTkrNnd3T3BzTzdpVHg4V2RIWXZVN0xsUi9SMWNaUXZXRnI0dnJtQkJzdzhWRk9UcGdhRHprU2IrRzdFeXF1cmVQclRIRTc5RTdadVIxbnFWR25FanViU3pabXMzQmlKdkRTNGRHOWpwbUJvbVluNHVncFp2aHlBT3QySlR1VFZraEtMcG9QdVpXYjhRdFR5K3BYakNnVHcvelY2MzNsWTduc3IrT0lsbHlTVW1vOFU0Z294VHJLOXBoYW1Tb1plQ0gzeHpUTTc3dmpEU2lESHFuSHcrOW9yM1Z2cXFuTXV4M0Q2bTFXc0xQamFyaGRMY2lyN0t1VW5xeEYydGwyQnF3eUtCeGJvV0tPcHU0d29Mdml1MjU4K2ZsNVE1UWF3eE90M0NvZHFaTHJpbnd4M293c1FObFRqQUM3QlViUUFhQmVZa0JJdE42a2tPcmVaTjRsU3U5a05xdk9GY3E3WmlGbzFoUkxiSHpac1RqTWJsd1VUN3VJUnBuNDBjUzlDdVo2bEtFSnpNOGkyNmVDTU9pa3dNak5yUkhHM0g3R1N5WUxZUWthRitzWmEvVm1PdWp4MjFHRkQ2b1E0MHA4SXlnMlJJY3h1TW9mOWhYdHNOZERDdzhvN2luSVhTTGlTbGZDOFJvenJwc2J3NlpIdDQ5VHFrVzBQblZvSVlFVHNRa1l5ZUJnSmo1dWEvbGkybGdvT3RlUHBmRFlRU0lMbnc2blNhUWpTbWsrc3ZDbzE0TUsvczB1YlRCdjNUSUFkamlPWDBicGMvbnFQQjdOcGJmM2hQbmI3WTYvTWVGRks4RTB0ME5BaGpBTUpQdVpHK3hSa1p0bUpFYmVYZUlZQXJtUXFiRkZXUlFYUlRmVzJyN250Qlc3WE9lc2F6ZGdrS05ET3R4b2NrZlNCbnIrNDg4SE9VTE8rVXlaVTBLZHpGSHByY2Mvc3QyMWdQTkoxL0ozeEsrM3NxaEx0V0Y4ck51MEkzRmNmdHE2UXF1N3AzYk5yc0VjY2poMGFRa1lXZ3NZdldEalFWYWRmRE1RVU1CZDhzZkMzNEdwc3pqV0VFNHYvbU1ueTNZRUJuT0V6Zzg1T1crREtuYk9KR3h3R0dUamMvVDh0UFRjY3BJVXNOb3V2Qm1pb0FlVGttOE9LRGxoT2lFWTdwMkdDWmNxUUhZSmxZWDAzakZjc3pLUjdRSWZxNGpaVjRscmlpQ1NDYjBTSFI2YklkdElxdngvZ2lkUE5IWFZGUVI1NlFoVDE4NkIyWWYvUlc0ZXhhQ3YrcFhxMStYbmdjN3pudHN4a1RwUytJVmVuUVdEUytxdDhwYnpScWtRVFljakNPSStmZW84eEJFY1M5OUg4U1NoOHVOSEJic24yYkxxWFZLMnZxS09MMWhFZkhuYzMra0VhQUcyRUY5NjNXUElXaDhtMnJPTm14ME5yV1lIeWlDZ3V5ZmI2RTFkYmFNSlk1a1BpN3laSzNQdkp3V1ZmM3JleHpKcGFTYUUxQkcxN3V6YmlzR21IWFAxZVBPU1BPd3ptOG5hNnNkeHdqWTlVYXhNUjk4eERjbEJTeG9nQk1zMnlzbVo2K25RTWZ5NkRpVDBIa0w0VlAweHl5TmFPVURpT1E5akZZWUVTd1FLMVp2V1NSY1R1dXNmWnAwRStrQ3V0dUpXQll0ODJTS3MyVVplTi9yRHFFZHFwSXpveFozZThjTlZIMTM3ckV4bDA4TW1FNktWb3ZYanlxa0lrNU9SNWFUNDJ3OEd0b2lJTkF5dFFsT0RBTGF2L2VqZFB2SENteThlWmREQ3JtRCtSSnF3ZXVsZ3FGcFAyZjU0UVd4b1JicnRydkE2czREWks3eWdBbklIWTVoV1BhNm82dDgycGYwQXl4Q3lzenRIZXRPQytxVmJFZUtSaWFKNnMrNmhsWDBTV3NycDNwTk5Xc2FHMkhIY1l5a2tBb0xJRnhCYS92UzdUTWdQSElOQzFnT3RybStMZDFFR1grS0d5RDhERmhROHVDcFhFTWxyZTBObWhoT2FyQXpmd2tZUlRqMThzNEpQMzZIWUdwRjZLVy8zTUd5L3lOTXQ5ZjBOWjhuc2hCM2h6dXJ2MWd4QnFCNFV0WS9EL2NONWFMakc3cnl2dnN4RGw1OGFpTytEQnhGYzBzV2V2c2E4SEM4Z2oyYzBJei9jc2ZOSVhFL1ZCOHE3QUJVamRrbUxId2RrWDNCbVpEem5QbHRhc2ZSTGJTNWMzT3pFWlZ4VEdNaWhNUWtscGh1OEZjNjBObUxmOVdGTGh5QTFVTzh1QVZ3THZETVRJV0tsTTMrTGYrdVdkdFRUL296U1RBVHI4MHhUeFBkVjhNTmVEbWtTeWd5MWtDdzdld25rcUpHTFhRU0hRYkQzTUs2MG92dFZsUlNWNWg3ZkJOOS81bnBUdW5HemdWODFkU3R6RUdDdHBoV3QydS9aM0x1d0p5YXFtWThQNGlucTBSTjBiMWJkMVJQek9ZYXBkdDgyc0haSnArZ3lDWGR6SkhIVGhOM3hoWTN3MlQrQWkwMXVQZTk4YS9VOFBocituWlVKcHhtOXVpMzJQR2tvbG5jejdWTkhpRzZmYXVaQi9MQU02c1JTcjRWYmt3K0h2ZkxuRjhydVZKUTV4bmJyclRWdUhEa05RY2ljV2NyRFRrZVU2UnZ4SG9yS3ZyVTVqZkE4UEx3ZlNaZVowdC9DME82UStNT0pTZWxUdXgvZXlhbjJEU3c3emFJRGs1TW9UdzAwaUhzZzdmY3ErRnJSTVRDZDlHNFBDQVhpcU5NSUhFUlFlekMyVlpmL1lKdG1CMGphZ2xycTRZb3cyV2FucVovaE5POTJVRnVxbll1blMyMFN6bmVPa1hFcFpnOWJ5MStyaGliWjhndE1FQXpMbkoyTWhqcXpNbEJXaE14bmxTQ3pJQ21QNXhBckFNMkhqT2J3S2FQOFVwYlphMTJvdVY2Vlkrc3BtWnk5bm9WQTMyaS9sbmNJYVNrNGZUVThJbmFuSFlGeXR2K0gvc3Qvc2c2U0JIUWEweGhIZkxxamQ0V2JpOUJMOFl6ZzJJWDFqN21xQksxMlRaQlB0VXJEMkhLYWlRcVNvV2VlZ01FU3ZySVBnaTMyVXhNa3B4cFV6OUVMaVRXZjRqTTJWU1ErYTZrVnpuNFZDOEY2UUNpa3Rmdk1aQkdSYjlpVmlNSWZCMHVmQklBcHFZTjByYlJLVDEzbUZYanJsbFFwcG5ONkEzZ0tFNVpIWG9CZFFvcUhJbmZPVWhneG1yU0ZHM3RHaW1kTUY0THkwVXQ4RjFQeXJlT3RHQ2JLMGxCeVo0bi9PYjJ2cS9GeG9zcklVNjFIT1dDckI0NWkxeGNTOEtpNWFGNW1SYWpJN0FHSUtzb0VucUtQeGNDVjh1dG45YWlUWjEvOUN3WFdtdURLMGl1UStORnJualVxZUJUY2tMYVBTYVF4NGh5d0ppNG9PNktGUDNXNzNxVkp5TTNQenI0MmRCdHIvUlorRkdZTVJtbEpQVWdxQkhkRXRBeC9LR3phZzJOeVFBbHI4d09nL0FjYUxVQ2M2bGJzWUk4aFpERnp4OC9jTWhHN291UDIvUXhCUzd3U3MyZHpHZkZ3OFNtZkNQUjRDMzhOMTFWTmpqb0ZQRXdxSFoxWDBUZ1N1K2xPbDJUTFhPUUNsTzdZQjBJcksrSkMvb0l4MkdscDV3UmJOQ0NMTkc3Sng5RVRsZFFzRE1uZ25CY2I4eG1kNlVYZkpCNlJsbjFLZHd3cU9PWHF5L2RxZ2RudEljMzEzMzlnNVB0U2RGTENkWmdET3JTMGJSM0JVcWFsdlpna2FwaEpCNE5kcnlyWUtPWmYzbmI4TVorbmFYdHNZa3N0bHFOV1NMdHlwaEdlN2xwRUFFQkgrdTl2Q3ZGUEluNWlHVzcxRHllRkVVM1B2dERJd0xBRFgza3hlem55RUpwYW9aTExhNklybStubGdheUdrUFIxRHo4MSs4UzlzV1RDalJEemdxMUVHNktUcWdWVnErN2o4RkppSE9FS1U1bWtPRFV3alBya0JaTXAvTW9NV3RiWENQUFlmd1RJTWpmQzNydGhTOWVkanl0b3VGMnN6M3owVVVsVGtRR1hEVlZXUExLalNXc1pOZzVwdlFFNUQvSi9ZQmZNRkQyOENuOG1zR0tHa1FuTURDcWVQbGtrSTF1d3Rtb01JVVhYNkl4VU9VaFA4Y2lGUFhoMXVJdUFHa0RpcjA0QkUrRGFiLzhHc2lqNHg2RzBTaEVWSkNYVHpBelo1eTR3ZlZTQkd2cVEzQmR4MnpqdnRxUEYyc2I4WUV2QWRITHRiTWRjODFRZVNlbngyR3IvVERSUm9xeW1HSGRYUWVEellITUdlUGhyMjZHMGpVbDA3ZlZETDhta3h5S3kreTNUMFlKekM4TzRlWEpOS3liWTBLYVZ1cFYzOVNQV3I5MHlnVjNCN3ZFR0VSVys4MWthVzNzRGJOb05kalo1YytxeXl2QkRRMkhQYm1ROTY4eVZuMk1MK1NPaFZURUNkNjMyNWJmUFV3Vjdld0Erb3VVSHl3RUFTMFBYNExhTGF5MkRlSDFHanNiWVU5RVlJVVM0L09CNEJER1dreWZQTGs2SXY3b2ZVclpwYnlDSkRrSTFoQkpNbGFZM0cwalVCQXlqVkNFVUViZVBrZjRENGhvMWxvYjJOVzd3UUpSM0x3b3Z2c0lRWTVnMnczWlJBWUN3VE5QNzBRK1ZETzJKOWxEbC9BYis1VWR4YjkyODNFMG9PYzQrRS9CSHJxekJIc1Y2b1N0bk1OczlsSzdUVThsRzhheDNoU3hrR2tSQmdZM1FZaXQ3ZUdkYVQ4UGdjUGhqTjZMTDFTb2pBN013RmNhdCs0T3cvMlNXWGFpK25JMEgvWU40b0NqN1FVOUUwczIzZ2lqTTJaOGRiUHptdmpNU00xb1QyT3V2WllpQjdPM3lrSVUxVkVlUWhpQ3V1eWxjVEFQS1RzWTM1VkhnbzFKUEVZaHM3d1NrZzVLRXpDc2k3SmdWa0dFdWhMeEU4Lzc4aFhTYk9FUk9PTVA2VnltNzVrc2NxRjQ2S25NOThLVVgrVWJSTUN6SG9BVXdOU3E3MmpjTCtTam0rQmtVYnlZZ3Y3WXEraUVtTnp0U1Z3VEV6NytBcFhzK1kzQzlxWHNRUW9qTi9tWFFBR1VTcWFlR1VMTTBZaFpwVks2UU1jNGQ0Y3BpeFIySjB5R2E3Nmczdi85QW1FQUVQVUpwcFIvYU1BOERLUDdUVC9KS05Qd01LMlBFTjF2dzNIU2tDVmhCNVRYWk40QVlqd1NTV2JlckJVM0ZoeUlsenBUMmFHUjE4WFZITTY0WDYzVW1SbVpLc1dYMHFaaEsvQmtUaGRyUEtOUVZUd0tzQkpRVG93UERsQnJPZ2pST2dJVUo2OUtkOTlzSTI2Ym1xbEN3VEorTU94ZDMvVEd4Ti9OVjBnYmVNRnpBZDRVVUd6dmUrcWxlU2hMSW5henRjM3ZyQ0FqbWp2MlNRaXN6Q3Y5SGM1ajRqaGxPWWpSTndsdHYrY1FIZWczckdxNUJVcXdCbDR0ZGh0S1VuaTMrNE5aZDFPbUxHdndvd2dnR0VORXJsTTNjdk9MeVJRbDYwUFVOYm85VFJ0RDE5M2liVUZ6V1paUXNKM1Q0bmdjcEl2bFJRcll4aXNoUFlieUYyVENzQ3JJSEpua3R3b3EvaDNra3k2WFRYcnp0M2J1cE8rVnZ6ZGJ3UUNXWWhiRjQwam9HVFdTUC9rYTd6MlNwcXBrWlhJV2xBS2kzZUovMnNkU0xZL0hxV1VjUjBZeEZLN0ROQWR0VENkbVRhMkFVVkMvRGF0dlViNHBCSW9UU3AxMEdISVdwUXRqTVMyRkhuaDg2QXQ4dGtJTTBIL21kVVFYSzJKaG5tZWRzdkRza0tSR0tkVXNFb2xWVW9mWGtYblZGR2ZLbEpXSFBiRS9xdjNUTFlyQmt4TG1VZCtJQWp1Rk9QQUprMytBVUNodEpLOS9nUTlyL05ZR21IVHNFS083RU9OU1VXaU9EODZhL25CZUdLeGV1ZFE0QitOSzFtYVAxeXI3cDMwTHBLWjBzRVRtOURwcWhnNUxrcy9RYjN1U3lEQ3hIWEh4NzlRUDBsRjJJcUpjVy9qNE53N0VLTkNvOExKRDBydllETGdSdUhrbWU4aUtIK2NGTmh0cm55ZlMycDIrZEVMM1NRaXdlU2lRSHdHRkY1WVFOSW5TVG5WeVU4Sk43bDhnQk55elgrSXJFTzZFZFBkZjJZbk9qc1JBNmRuWkcvaHN5TlNxak9VblEvSjVodTQrbVo5SFNFZGRGWDJPZTc0aTkwVVdWOFJXLzFmUTNMSlNEVWU1Y0RBbzJaVHBVMTBTaFRqYi9HeEZUWFUxQnVtN1kydE9KeVZ2aTNzYmRPRDNNS1hrNXM1MHVMVGgxd1VYVXpKL0xMMWpOMzRMclJmVTBpcmNoUS9tMzBjNEpUOC9KY3F4RVdBUWFJOVplSThrRDRxcUtVVnpTSWowa1dGSzhLOU43QWNWVWkzeGxlZ0NuYjBCbC9VTzllN011eDU4TzNxdDVjQmZ0VXB1WXh0bnJWdXk0cXUzTmp2bW9xRXlENXRTcFRFZ2hEdWFnbGlEcVB5SUJHWmJrdExSbTBoSkdvSy9MNjZWTTM4Tk9EMmVyRTN2VHBBVjVicVI2Z3VIcUgzeTJXclpCQUQzVEJNa2ZYVXZ1MUYwSzNrK3U3UVZHeWFxaSt3MktOOWtYVEpoZFhVWXF1dG1NMzRGeCtESnUxbWlEQ0RRZW9JK21DWUNpYTZCRStsY0JiOHV6ZkpHa2pvdEt6eEVmcWZLRkFCUEVFaVYwRlcvYk4rSk5jM3V3SkpielhwRlJRaWlXb2RORTlEcVA2VGwxcDNnYTUxN2d0a3lRVHloZk16MkZicW1JbnQ4Rk4wVGd2ZlJlR1dSdm1CWlB3bnFLaldkWnpraWtUdDhLRkFlTHRndE5oc3pHSm5LWXRGUVpjeEpGd0RLL3dTWTl6Tkk5QWpiL2JheVpML2d6em9vVVRUVGJWTkp0TEF6bmhUVzdHZ04xUm1LQit0RjhCYmNhT3FITmJaUnhRdjZYWHBTcjdINEZrTUREdWVWelV6aEp6a29hNGdSMm13WHIremFTb0hRVFVYTlJ2Vm5ib0VpOWo4SEx5U2NJVFV5QWxjd0hBUkladkNqMk1TMEVqWGtZMkNRV2RaYkxYdVNKRUpNZEI2bUNsOVJ6b3lCdG9XUk1GNEsvUUZEWGQzeUNPdS9DRktkcFRmbEtCWXhVZkZUeTJSb0dQYy9PQTArV3FTcS9ja0IwdE81VTZPV1NYS3BJZjhuZXhXK2tsdXFMU0JWcGs3MnAyQmF1MURLZGlUQU81QXZJVEJNUmRYRmVCY2ZhODIvSkRyRGVvTUx4Y2VTdm16RnBuN044dUdwaVVNbXgvaWs3UWQ3YVhBL1p4U0h3NUttb3lqS3FRckFyUDBFQlY1U2tYT0FFK0lmZ0RORHF0cC83YnZUc21ZYW1GRjRkUTRhcHRka1d6V2VlcThIbUREVnR6UGhLV0VtQ200TWFsY2Fqcm1IZ2ZzUzF5WFdGaVNnS2xPeFhIN1IxazZGQy93QkhpK3l2eUloYk53Mk9jeGVObmIzSk1ueTdBWWhnUjJKaFpsTXJpUkh0dkFkcjFHa0VkN25SS2lyUHhxMjFudWxIUDRFTnBTTFdNT1ZTQUlWd3JFN2tBRitEWEl6RDQ4UnJtT3NkTklsVXdaZndGUmY2aUk5Wm1CYjdNNEpNUHJHTEpKQkJVR3Y2QW9aOXBSRmpRY05FSC8yNzZOOUg2MTJRZGM4MjA3bFJZZFVPMFJKN2dQanA4U2tncTFPWUJTcUVkaVR5ZnNScGVOanJaUHJ6c3p0YXNaQUp6QWJkN3VwaWRXZ0xkTVlMbU85VUtBVWR0WmpuS2toYktxeC80UnJHTXJLM0dwMXlGQ3dsSVBYTTk0RTJrYVM0eFZsaU9hb0llNDJncUY3dEdKUWw1UzJJS0tjM2pyS0w5dWYxSzI0blN6OGRUTDVKbFp1QUluVjZzbkVCM040ZE9TaEJQTjBaVi81WWpraHFzV1dkM2xyQXRRVEhHSnR1amovbkREb2J0ckh0MU90TFROdkFHNmVFTkJKV3lqVTBtWlRaZW5JYklDNDVBVlFHckhMRWZFRGJxOFhLck9YYS9OcW5mYlFUc2kwbVNuM1R0VURVNlR2RFA1QVlZVnUvMWh0YVY4Z25GaiszWGhxUituYmo4dm56dlZpOWNlT1JyRjBBVXdUSFZRRE1pVW40WmVRaWxHRWFPeW1TUTZseHE0cm9MbS9GZEhNS01naHNoZTNLYjlyVzhhT0k1SWVnMWM0cCs0Nk15NExaZHZnNWhhU0ROeEVQMVB2dEEyNWI1T0EvYUVBV2xGcVU2NmUwSXM2YnJCbnhUeWRacmoyWDQ0eVd6ZGd6eDBjQ21yTjk5aEVKUXBoQ2V6cUU1SXpDcFpoMXlNRTdYQTRmSGV1SzJ5OEpKckIweHYzcm54WHdxRzRzN2diL1dFVFZYdUxGaGtIRzYvaTRKREV2VSt6NHFvSnErVUxPSnE2ZVlzSlNvUW53QUhrejhRMndQeVpOVG9KTWtXYjZKdVFIT3hGTlgwRElyTWdGZ1NhaVZzai9CS2JRV3U2TEVneEVwZzJIZm0xRmVPVzZ6K3E5TitzZ0MzR1ExSjhkN1ZWelRORFo4L25CQjJYYno1Z21FVEZzSUllWlR5QXNzMXBuSVJrWm50WHMrWnBBMHRSN0pFYVNCSVprR1EydGhBRC9OaDVyRnNpZE9LREM5dHBUd3FDNEtXRUNieXNNc3JhcGh1QStqOHd0UERYUTRmSEU5YWhvZkRSUEQ1a2toRTVjczRqY1NSakpMWjBUZE1JMUtPTUtQQ0VzRHoyL2VpUXhGNVJubU9KTTRNT3M5K0d6QWViR3FUc2tzU1pxbDhGWHJaWFU2K1hMUnNlc3E0c0tldmFHY2dBK1FRbzFEWWRzbVVhMlJ6ZWs4ZGxaeVRqUklvZjlZNmg5SGtNeUtJczQ2VGl6NW5hdDFTV0NONUpxL0dJMmZkRGtodU0zYzV1c29SZElEUkVRTlNvWHFtWjZpeEMzTGlUNm0zN1p5dkc0a01GSW0wRG1SUDR6cnpSV2ZBT0VFU0dPcXdva3dwMW9DV3Z0ajY3L2JTTHF0cHcrZThlV25WNTNXdTl0ZVpIa210eUp6QVdONHl5eWJPZHgwaDNoSGhZTTB6ZVpMaHRXR0ZoSE9QRnI4NmZhL2g0NWxCeitQbFRUbzFYN1VyRCtGV2VTN3l2L2VraU1EbXFxWTcvU25zN0JYcUd2UXhkU0dYWVU4OHBHNUNoLzFpRWtwOXcycjZySERGbTEydjI2YkZNalBaODZVbGdaZjFoRWJtL01mc1JHTEpUTjRta2VSWEhDRFVteTMyV1dmQngwL2tBeDJmR2pVUTZucVRGQ1hjaU5zb2ZiUVRlTW1KNFhqVTh2WERlanRiZ0ltRFZnbllsRGdUb2hiZFdhY0VYbkpNNTV0OTI0OWUvKzl4SDl0bCt5aVRtUzcwMnRQUWYxYVlqaUpoZlp0aFNMUzJrODRmZXJWc3FINlVTUmIrM25vL3lHQTQ4TkowdjU0ZjBFaFdFd0ZTaVZwbzAyc1IzSmNzZldCRFdwQStKSklzOWNNaEtwU3U4V21DbW50WHJDT3l4eWR6dE1FV2JGSGVBdGtiMWV5d1BOeDV6RndvajFWKzBacEpDaDU4TWU5NW03cURwNVRTVDlxVmc1M2ZjS09WVTRWYmZZMnQyZVBRTC9KbWRQU0RQVnZEZTYvWURyMUVORjluM2tkam4zNEFDL2t5dEdzbDViSFVYUmY4eTNKeXgrcGF6MHZoZ21pSVpqSElSZE5OS1hudHVoaVNWNVUwa3BWRjQxeERMQjQ0R3VMQTV4QiszZWExb1ZVQTJMQjJySktKdDg5dHg1eHJlN3RudEpTaDZGZUI2bWt4UUExaHlpZGtxeFo3QmRiWldvNVVBUW9nRlpkdW0yQUQ5RzB6RFMxUFVvTTFTQUtVK3Y2T1oyekkwS0dUYm96elA1Q09qSFVyR2xTRWFSS1lWdHAybWhSYWFYN0FUOStVREpSN2x3TTRVYU4yZHd4MnNUMnZQaE5oNVF1ZzNUM2JsYzlseGsyaVJheERHM3RVREI5Ri80QUVmcll0THlkTllPd044Qm85U2x5eHFtRjNEZWQrcWxPbFNSKzhUd1hQWkVKcnlJc0IvQ2hJbEovQURyZTVpQWFFZ2UzSUhIRHEzQ1FkdGNqbm1teW5wOE5JNWk5bXFLdnl0WE9pcmRCYWlmNHdVUThyVWxYVDJWUFJxSnh6Wno1SURFd2FXMkxEZmthNDJtbEdibWxSbTBvaEt3RUttZDFuaFJDTzl0N3JwMi9QcGpxRDV4amVPam0ySjVETGdkaWcyL0lxNlNJVjBJeDM5SEZzTGtzK3BETHpORTEyTzJvRVdVZXkva1ZkeEZpdDNCdHY4cExRaFVyOWs0OGsrcjFmWmxBOWF0Q0haTysrSEUyTUdxQ2IwcG1uY3F3SFUxRGswL21aUlN1S3BFQkwzbFdjTkJuN0ZzdHJvNlh6NHpIcFFjQTQrM2xhemV0MThuQ2s5YnMyd1d4blViTnZCRFBkcUNJanFjbGNvZnBReTNUZVltWlhMYmtnUjlQVjg3QWJraGNpbjdhK1Q1NTBRQ0JoWXEzKzhLR29rbzNlTThITTIvencvVVFSQlBkN1RsRk9NWVJzWFBxWmxubUhEaWdnOGNRRnorNkh6anlzbUFseEhDc3U2V2lyTm84WlVJU1NsVWdZZXJYM3YxaVJ3QllUbU1BRkpuVXR2U1YrbElNMkFvandvSDdnbmF3aTBYUFl4QWxLZ2tTcG9rNjVicTNrUGpIbk9Oa3l4c09seWY5bnliVllVRVJDOXB0MGNEUjhZSUZSbmRxcDBzVWh6NnFnSDNRTjYyZUluUU4zWHNvMTRzdmdzSXQ1d3htSnBUTjNURFBFU2orV3BsSzc5OFM5bkVXWHRJdjBXSWlINkxrbHVISmJybnkzY2RiT2U4dExyQncrNXRiWlNTY1hnZG1Ub3pQeWNHV1doQytPTWJ0WXU4anRnTFplL0U3bDNvWjJhUzYweEJMTFF1QjN4OUlIdCtpSDZURitrR0Y5MkdQaGh0VGJoWXRnaWlFYllScktXa0RDTlgwSllVUU5ZZC9FMzZvb0tYbkFUT1MrUGl0cHgvOG40ZFloS1Nhamx2KzBuMWZaVlA2TWZzSFBvMlF4U0tFd0luTDloa3RnRTB1QjNoRGk1UEptaUh4YWNkU1pmQ1BydmRRdTFwclBWMWdibDUvek1FZWphcllYdU9qUmo5a3NrWmJFRHpObHFRVHU3VGxkb25zQ1FtMUdySmE5ZEt1ZHJOOGxSbmhrVStOd0srVXJjVTdzWGRFNmhWV0lBb2doU3lCYlNELzE0andpcjZ0YVNQL3dpZTVuR1pramhpaTNIekpETkppTXhNY1Z2a3BmWGYvRHViU3ZRVzVvU3dCdy91ZzR6SWRCZzBVY1NBS21peXZ5RkZSVlhvMlFmWlFwL25PR3pZZTNzRlJ4anR3b3oxc1FIaGFleVRVZ1UrZFllR3NnY2daaDVHZWw3VVYxRjJJYitKWWZsbHl0NnE1VEEzY2FXSktxQ2lNVW5wT0RvaWRoNnRRMEE1TlNsM3VPcnVkMmgyVE1sb3VjVWJGTVlhcitIVzVWUFk3amUwOFFFNUhsVllDeDF4Vi9TNHpPejNqZHZGVnBHUlNqb2xxUms4Z3hGaWJ0TC9KTXpTOWNvTUdMMWRZRVVmdDIydzF2Z2FjTVZVZkFrVW1DaUhEYmNBMytjcEhnTGZHNFRuZUxNMmZCV2hjbUZhczVOb2ZBZ0Y4bnN0MjRBKzJ0ckVWRWM0aGVLTW1FSHBNbXlrcmFvYWswSGhDSVcrVHBRVXZ5dWFhaE9mRFZBNmMyYnN6UlY5SXpiNXRYUDVydlBUSHZ5L05LWGNOenZTaWYwcElPcEZhQjlFbGpaeERrNXZCS0dXSGVxSU81TVhOd0hnUnZORG9XQ2lRZUNwZzh6ME1GMnVKR3haMFc4OThYWWdNQVk5SFVZMjZZNnRZZGJYTDV5S2dmb1I2NXdobVJuNGh4Y0VnNWZlU0gwdU9XUzE4a0VBa3JDTDdtS1JPcEZxc2tSTVJwYjJhaXZSaDlLT0ZXRHV6WVZvVGVUMnlxaUlQK0tIN2YyQXFsV09KVnpPMnBxR1ZrMHlQbm5RM3RkQU9jL2V5YW1kMDdpSDlJUkUvcE1mdFVOOXduKzdxcnBiSFdxQll0SWtydFVaUDJ6Q28ySjhhM2F6d3k4UmRtbUFQaDdPejROeHl0dVREK3FCc243OC9Gdkp2M3NrUGJyL0pVb1QrcGtVOTFGb2hlaFpxOVdzVzNrdTRGY1BjRDdmTGVyZURmTm1ZRU5pNXI1ZENOZHpmNmpZUFlPeHBGNUMzYlpMZEViY1FzdUFmWXZEWlpOUHlLVWtoemRQRGUzMGNFcFJEL3N6Y3p0NFlGWlBEWjA1Z01OUzZ6cFgrY2FXVU42dWtzZEUwY1FaQ1hmQWkxT3hYUlhJT2VXcTJwd2plaG02Q0VJcXdhWWRwTy95ZGNVclArQ3FwckpVOUVZQVNsdWxLZEFVL1Y5ZTQwbjdLV09uZWtCRDJDZDNmSVhZUjBQekkxNG5GQ3ROeUF3dWZzdDI4d2cvTUNIWThWMFQ1b1djeE9HcGZ4T1hHK1NSMXlkV2grRnhtNG9PaEpvTWFPWWx4dFFNSE03ZmRHTWVlakh3YytyZm9KQlhsLzBtbkVkZ2ovbzk4NWxzZFVSK3cyakVKNzRjWHQvdXdTbEhKUy9ZRkl5WWRva0JVUW80dzhObUtSZ1BJYXZ2UG1Eb2JvRnJUZ1NZQ2tiVDgvV2Z4TG9NTHdobjkwTGhGRUg5WUlNZGRUb1dBclRnYVJPRHFacjNlbUUrUmcyZXZFcmQzVkV2YzhjUUUrTGQwYmJSTVdzanJ1VlZPMGhUVmdlcHM3a2pmcXVmVnFDc1FyRDlSMWtGb1RTVzJZMndQeWtEanhZMUNsekRnWGhsejJ0TldTNXR3VFA3cWxrM0tjMWE4d0lkOVZiTFFUL3pqY2RxM3dxNDA4SHQ0L2N2aUVEMGpGQ2pqa0xwdjNZM1RTSnlxOXF0TFR6b201c2dtZTMra1ZUeTdqU3VoTG5pQXF3QmJPVXJxRmhjM2VHbGx5Q25jdU0ycE5kd2Yza3FTc1c4a0ZGSHpPN0d3eEJJcjRiVzZuZVFYL2xwa0NGaWlOQW8zb1JLSGFWMVFmRXNHSGpMUDZSYkhPUXRkUWppcXpINzdnUm5XRlVwcVNjdWdDeSs1QzVTYVJBWGV3UFlzZjd1emZCWGFsNlFPNGI4NDREK3lVcGI0RGhlUFRseHZhVUYyUGJQRTR2Z0NjaU5MUUhmQTNuc2pKUkNWSjF6dkJ1ZHR2Y2ZaTFYvMmpIV0s2Z0VIM1BhZjhCVk0xNHlWT2xQQzNqYjczeVRaRkIySDdya0lsaUg0U1FvdCtheUlsS2JHS3VhamJCdXhUOTMxaklpaHRlVUZseTVpd2k5bndxaVUyR1hJSkEzVXdmd1BZRjlqaFhnVjRpMFVDTzEwS1VQUndGQWJuTW1nVHZkcUpyTkFEUGpwUjVhMHdFSVNoYjErTmNZOE90NXlMYlIzQ2RTa3dOQ2lSVmVKNUFTQXgxOEg5TkpVR2NKRENZQjc2SWZ1MEovZVJqSENxUnNmcW9nWEMvNEZWdDZhcE5zd3BaQnVHaXg0eUF0ODBYMVF1a3MrZnMwVkNHVEtNaGtwbTJ1L2JDQmNSQXdpUFNkTFJJV0VYQnNER2c0ZVpGenI0U2lyZGJNdEt0US93V3FyU0dIRldlaVE5bk5RMzFQN0dvQlRNdHFrd0xWV25HNEVtMEx1QXhyK3ZTTlZqczVlVDJ1dFNwTjFDeGx0L1FuQ3IxQVBvS2s0Y1NmS1VGMEFDajg0dnQ3elpqL2pJZmFsaGlrUEN5SllDaDl4Uy9YR2ppNndFVjc2UHVkcXUvaU90UGV1ZjFreERNbm1CNlJjWVNtUnNyMk1aVElzd0JVTmNRT093dUR0WHdRWFNjazJHTlU1dVVadDdsQkJDUjhCMzBseUlEbGtBNVl4cDRLbEZQeFhVallnMHdCU1FRR3hQQlM3UktSZ3gyREg2ajlPNkpiQWNWS0JUcWt1NlIvWUllYndVV0VYK2JEY1NtbmJxNWRROVFrVFBJVlI4NG5kUlRIS0xIUXJSQXhmU3JpTXJYNlJwY1prQVZqVFNqbVVmRVUwQVBHVm9YV2FYNjRibTAvNDdTdXNRelQ3bHROTHBzckVYZ2JSdzdtb1FYOGJYdUJWWktMUis3R052S0JKYWRSOGNDZGZnTm1hRjRMNWlyc2pNckdySS9OQjZuNzMrZ25VZmpLMnJJMURMN3lPU2Y3ZDFIaFlJNHFjRGVVVkhlcXNONXo2TTBwNnJqaWYyS0RQMkdiSTU5d0xRY3JzMjNTSlJERk5OWXhpKzJMTmRwQ3FTektqK2pEQmFtR0JVandTMnBBNmErYmtkQjliNVoxUGVzaG0rMjhKRnpMWEtFYkk0T0dOUlZuRDFGcXMyd0hBWEcvSGNvbllzbmNWbE1UM1cwOGZzOWk0dVlXek5xZE8wZ2pzOGNsMHN4czhLWEprM1VYTGszWHhUeGQ2UGdZMjBLakpmQjhlSldRaTFuV0ZNOEc1cUkyVkF3RCtDK1kzUFFCOUIrNSs1RXdVdDRSYmdzYXNWTXBVY0JORW5WSERQdmQrVDBjYnlFdEJiQ01DU2pndnZmUUZFRFk4MUhDWFYxV0R4eGttTGxZTll0Umt3RnhsQ3BEZUUvWHIxQnBoZUFFWFVUY3U0NHBBZm5xb2dsVUs0S2h5ajc0WW5tZUppQmF2b3oyekxlcWlJdXlwcVAyZ0I3My9vNlJ1QUhBbnRXQjJTWU5BSGJWK1dQdXQrTEkyODlYTm5rbUFITGpMNWNURFNhY213MS90MzJ1Sm50WDhOWHloVFFGaFpZSGJvSWFXaUd5bHgweTlFNm43VjZQNGovTGEyN3VHNTQ3YnhMYVUzSU5rWlBvT3I4RW5aRnpBVzFZdnUrOEwzaW1DQWNYdDhDeWx5bG9RTlpSTXZsRFZCKzdXYSs5M3FLcTRlbkNNQ202Wkt5MDg1K0FXSVl5QXNpcDgwNXRadmdPNkdWbWlxNTRmelNTY1JFZmdHRWZ6RDNYK3B4d2JOallvZ0d4cDBuOS9FOFJCc2ZmUkNZUWhtbi9HSjZKKzRpalRyL3FwRUYrT0g5TFd5bTJkNXZrUjdWNCt2VngxVVBHa1JVV2taY3FHK3hsUkNJZ0Uvd0JxaUdaT3k1Q3hEUkx4ZEE3MDd2NkNydDN6MTYwaUpEV09Hc0QzVitIS0VHSi95c08yMmp1Y2t5OXp2RVk1NnZza28xbi9TTGlER09PSGRJeTRIS2p4L0FESnRqNmNLYXBXd2xkc2JoVDlWa2lTeVdiU2FKMXZNNnpOYXUwQWRabjVEU21oWkEzUER6L1lBdksrZ25FRnExTDVqWnlldEl0b29helVoaFEzelhTcWwyRXN5N3dGZzE4L1p3UXh2cGlmWkdUekJ2SXVsYWdtUDhpNWFNYzNmY1Q4Rmw0OE9hMVdTaTFHM0JwR0lpVEZUeVNhSjMwem1DWG1IWnBRQmYzTEdPcnpEZ0ZkTHNCb2tOdTR1aTZLY3BEaHFXdnFrVk5DWWJFalhmZW12N3ZWbXRjY25XVFJtOWhGTG9MM0UvcnIvbGNFbFRpQ1ZEcVNDRHZxZlJqcG9qbGZzcHNFYkRzTEhEcndiMStPcnJwRC9mVjBlRzNTQ1M2czBGUysrcWNkZ3VPT3lEUENoTGdRRVRqQTA3UDNDeS9KWm1wRG5pVTU3VENhVVZwbnJjMWFPQmVhcngwc2JmVWQ5cHNJNytIZGszMnNiYWFBUk5vbG0yaituMjFUNFV3SHRnRHN6U1JCOUtxN29aWEJRaU1rckMyU0JRUU13QXVPM0w3WVFIZGJ5bTBrVUxoQmxSa2FLZE9OdEM0bXZSL3RBd294U0dtRnNzdWprZnNERk94M24zenBBZmtGY1dRVzcyRWJYdjhNZEE3UGN3QjJteS9XL3l0cjlaVDVKdEZPWG40SGl0NjhwNzNONllJR3kzWUhjWXlsUVJQUTdVcmV1cDFPcERSUWZ3STV2M1BhZWRjNGlRNFViZ2QwVDRZdkR3VEc2Sk13M2dZSGJYSXB1MXdacmdnNXJ2RzIwL1hPWUlMQWZCYUxjS1VheWUzT3l2TGp0MHZYQkg2VlpNWThQN0U3K0hDNWcxclZPVC9VM0VBZ3NoUEdZZjRIeER5ejBuZnp5MlVnTGpFazhiNjhzTjkxRko3ckN2YXJTeDdBcFVBL3pJTWFlbWpoSjRpbEFLSkdzNUZhTDRSZFZQQytpU0FlNWFwbDR6Y0RZMVR3dVlzM0tCMnZSWXdseFhkNE1uT0trMDRxTE9LSC9nOVRkbSsvMmNqUnEyWDNYRmZzcHlXNXU2bTJmVVd2YnJJVzNRSVlKbC9RaHp5VUxsWVMyTUE5d2IzZWdWc2kxS1hvV0tOUWpDbnRFaGxhTU9PQ3k5OWFjalZ3S21qUVVOUDFuNFgzUDk2R1V6OXJ6YU5BZjNHM2hVU2hGYUhjOXpGNHZtZ0RsTVYreERhTjdqZk1kWHZXOElocnh2M00zMHBpK0YzeHZvV01kWlB3NVdDWTVtaSt4Y1JyNUErbHRvQXBPL1pydFRJaFR2U3RKWjB5bnlBcjBHVFNFcWovcVRpWkJXYTl0aTh3ME0wc2gxOGdjL09GVSs4YUQzQTRNajJMY2FoYzNPRWZ4bUwwbUp2WU05bktrVzRuMTVQYXRBR2VQRGs1YlkzNG1PRjZkdXNKTlNXWmlHNVZkKzR5eGdGdmFicjZOcUxEMEx0TVhxQzV1WGVVTUNsdGtRVUgxRjFKVGNUU1RzZlEwTjdpMkROVWxXTGI1eXNQQlQ4RTRqQ1IzZXRlZmJINnJnVi8zTUt1bHlMOURySzF2UkJKTjlsUGt1VCs3dkovWi9VbGwwSGcvWTZIWjd0MVJEdkllNjByVmNFaDNMdkIvSVBkaHBTRjloa1BEdFpKQmY3YWlvNjY0bFVVQVNpemtsZldXTXZUcmNDQVRncUxhTS9pc0JLcVRSa0xMUEdDeWpZUUZ0eWxSR3htT0JUZWJwZ2dYZ3ZheG5SeGpzR3pKZkhKS2JLUmVTUGZVdEV1UjFJNk04MURnM09ta2dtN0FVZm15cnVtSzltWEV0eUJvR1NiNmpxcW82ZGdRUTdzTjRTS3Bxd0FJR0JBcGNNNTQvTmdjU2h1dHRIVENuNTdnbmllYWVobmxMc2hkTk4rZy8zVmt1L2dVUWh5aUduRmxpVVFaV1NYelRlRlNvSy94UHNyZmhLeWl3WFVzbHNLUyt1bkwzWWZqV2dGdVNpT3RyYW5JN0lDbk9HV1hYays1VSsxVU9GbnR3QTI3SExrUmdoUmdYSFNsRFJpYmZ0N0haTFpoczZsMzJFM1RKYlNWNjFhNDJxeHZUVDdjV2VaWi9HdldUcDJNOEd0RjlFL0J5R2RTRjJQY2RQbVpub0ZwTzdMWVJlZnNuaTVVMmR1MFl1YnpiSEVQdFAyNUFsREFsZTVwVUptSkRsQUkyd2E5RFFEbW1vQlBablNFSUYvcjVVT29WOXBob2tVTzJUVHpsVGkrWHJyT2lOYmVKMHd2eXRkY0RadGRRNC9CRzVGVFZVRUtDZU51N2VQZnh1NFVicENnM21xWXE5VHJFUGVreGFycEd4NW1kcVFsYU5VaWFabGo5eURZSDhicy9HKytkMzl1UmxnTlJMWDd1UllmY2tYNHNUWDBiNWJuWFRHMkhOR1dpZ0liVEVEUTd5bFk1WnlOV0VwZmNuZUFML1l6bCtpOHk5VFdoQzg2dDZwRXJML2FOTWFEQ1ViWjYzZlVoVWZYNy9hOWdHVUVRcm8rYWdScWdudi85cXY0N2tDdFBMc2ZEWVBuTWRZYzZ5TUdBMllvTTZ5Y1Rlc0RGekxxOUtPRkhsT292c1hwclhuaityakpKdGF6RG5rYWFLQVZYdTVUczcveStwU3hDenREcVZYYTBPSUk3YS8wbGFPemp3WDAxZ3hZNkxDKzZnSWsyVThjbTA5ZTdBSWRxOG9lYU1xUEFOY2pId0Q5WmwydjI2MU1RNVJib2VZejI5SmJaUXBiQWgya21CcHlvWHQwS002Yk9OTWROSmU3Z2I3cmpycVFxNzF0Qmkza0JSSFIzb0VPT21MNmhpRzJ4UE8vSXl4eVBBQUlzK3lrUHg0M3laS2FjV0tjUy9LRUtOVXlDakt6QTlRMHhZUlFqZmd3S0Z1dHhKMHVPWmZ3VXZwY3prTHhPTlYxRDZSK250ZmtKOXFOc1JwckhsdGVuTmxDMCtUdnBDZXA4NmlQaW15VGpzSk0ydWlGMG9QbitaZDhtbTdjdllRQVNMdkFRUTZqT0VjYm13UGFBaDFqVHgxQ3JadUFZTG1Tck45T1JkOWVDMElZTXhNWDd1NnczZE15SjVBcUJVWitDU0I5THlJN2NiYUx2NTZyNUV6eHIvQXU3ZGp0OWdRMWJvZzZMeFREMWlXbXdwbHhnVUZRaEFWclVaS3NqRmc1RDNEejZJMndUT3RxcnA1QnFmbzE1Z281RUZPQTlyMVVBS0x5aUdBaEN2YVl5UjlWNHRXSnJjcHY3M2NRQ2NOUmQwZjQ4UmVpWGtLcW53elIxMzRraVh4aWpwMm90dU9sdWtKZlhEeEcwSlAxT04vMEdyWVllYWtKVlVsY0k3cWgrUW9VaXJoTHpSaGpXTG5ZczRSVHNrZy83L1VITWd0RmpJRE5MZmxxVWVDbXJZbVFkVkM3MTdqQjZrRkpUY3lUK1BvOFQzcWw1VW1IMmQrUXo0Q1JUQSthUEpvSWhQRVRSa3pVVHVDOE9PUmxxOUZlREtDaDVDcEVSRkhVckYzV2U5TmxlWHRMYWlhM0xQaW5CdE1ONWgvTXdYQ21tMFp2OUZFaHQ1Rlpua0lBRzE1elRCL0o1eUQzMXZtc0srL2dwUjliWEhWcWlMMEZVQnlYTnBxQm9OcUdXL0Z0T1Qzd2NtOFN1amVrc3psSmtSb1pMTDhrUkF1MGJBOFhDRVFhaDdUcVhGL0ZOUCtjLzdaWmhQQVMrckxIRWFzS2M4RGVsQVgyM1FWWHlQL2R1WmJsZ3hrWjd3ZXdXNmZXejhNV1NXbmowbUp5Y21GdXBMbzFobWR3T1lEMmd2RnpiRWtoZEtRS044T3ZkSDU0ZUwrNGZ2cU1tTHpHOHl0N09VNlM2RHd3OXN2enNHZDhQb2RETHlQN1FESHdSTk42S2FhQ2ZYVXhzdVd6RzdRdXpCSjRiL0IxYkc4aWF2bWtxWGRwN0JlZVBKWHVFQWI5U0dyM240NmZVZ3pGQVEzTHRjWTB3V3g3bEtrM3JsL0RJbngrS1FvbUlQeHZMeE9YcEU3L2QzYW9UMVd0cDJRY29naSsvTVZYNkUwOWpLc1diQ1hUQkpGV2NkOUo4T3FJcUUyMnVRM2tramZGUUo1SmhiNCtERXZWcy9QUEVzZjVuNERLY2R0TlFDY0xQQTAvbXlBbFFMQUVUUUdlZXdURmhHK2JHRlFkT2UrbG9mV3g5eXpNSDFoUWVXQStZb0hqZGpJN3FPNm1iMnhubFZ6SFFzQkc2R2VGbk1pV3NtVzlVQzl3TkNCS3dlSlhSamEwbFRCZk9OWU1GV3NsODE4ZVY0Q21ubzkzVHNudXJPQ0todCsxczUzN2RVeGdhbUx1b0dKeVQxRGlpSXN1cXRxdUpGV2E1amhTeVZpZlBVZHFoWWpBMnJPUjRaWkxKcy9RN1FuT1hPNE1LdmxrSmhsWHFPVzdnWkVJbVljQzBTNGdxYnBIcEl0bDAvbXo0UEk2RnREdE1vd1VadWtmZW1HVzFLcXlLYVd3b1FtZTl2VHJ6SkVMUmRNMDFMZlFwRWFuNEd6bVZRdXhmL080dlAyd0tYUjhjSy9YelB4bk9rV01QbnVtUHo4RmF2cGVVK3lRSW9JZ25LL05LS0wrKzRIZnBLZURwMG1JMXhqWEIremlBSDFKbWNYeGl2UUNGcUswRjNETTJ0SHFlS3Z1VWNzcXcvVGgxQVlZVmtmM1BWd2J6ZWFpRjFXNjc5VysxaC9OSHZOM245VEtjcFZZbGtqSE43SHZnaXpRUFQ2cTJ0dWFSVENITG9zaFB0RkVmYnJLOGxFSEZNRnhBVEs4eEZ2eVJUWGlxV0ZkbHVod2NlOEpIeUs0REhhNkVvQysvNWw1OHlJaVpUMjI5cjdhbnhSY08yOXpFVmtCZG1JbXdHSFBBUmtXYnhXMUVrSXA2UkJ4NnBrM1BWUGNidzcrdHBTNHNlK1htd2ZFSjlUUXFKUjdvSm55bTRjbU1HUXhtRjIyWlk0WUE4aWlQTFlNa1hDYzdLN2FNdjBZRENMd0U2eG04Q05ROW4rMGlzQVdqWGtsblV3Z0d2UGRWd3dVRFRveHdxeWo5amsxYXpuT0NmR0V4ZThPUGN2WmRXQU8xaU5zYlUvSVVPRHJYU2l5c3NWdzROSVBESUlTY1hqTE5jbEpjSjBjM1gzb2lXQjl1Ry95Vk9sZ2lvT2hmMHVqbHlRK3lXaHpDZzd2UXh2Rk5OS1JsNEpIZmtrL0NtY09ySkFtOWp0R1FwK25CbXA0UmlldVFnRUZEeFNvQTJJOEVZM0tlOVNRaWEvWE9VQWY5d1dTcmx4SVRTVDI4SUdKNFlVMnlVSkNsYldhT1RocWsxYnB4T3E1ZFdOd3VyTytFQk9qWXJwQW83bkJ6U2ZCcmgzdWlzTFBNWmt4K3dESUcrcFdERnVialIrQzlBODFJdkJiWmI1MjJndTdhSWhFcGI0Nm5GcWFZZlJFeUNObzBzem9IVE1KMi9lSmMzV1JOaVAzZGVaQ2xQNFYzU1gyK3d2SFJ3cXVBQnZjdlhsTHE0enU3Y2hyZXhmTGZHemNjVmV2cVlhZ1BvQ0oxNnRScmVDSW4vRVQrYzRPeGJuM2xmQWZxWndCUmFyQmwwUXRrdXBpRFptZWdZQWZIbmJCWUpnZzMxVTNRMVRXcjNBbW8zT1JhVEJmaGFNUnVBVzkzUEd1TU8wZy9VMTFKTzZLSFBKRlduZUhYMHRRbmNTcUZOSDBYZUZHSGpmdUM1djQ0Mnk4ZmFNODBybWVRN2NnWENWVlJFTWxxZlJtV3BNZ2E4cU5NRFhzOEIyRzRCWXhQNG9Kend2YW5PQ2ZVTXVjOHhodDBKOU96VG5Kd2thUm9nalBiTHhkb1RzQm9UMzdmZDJOemJHNTk0c3EzNTNoNXdhcHIyb0NuNTllTEFrTEdXeE5KWTk3aXNzNmw1ekZNM0FjK2R5MDRuZlZucG9ZMnMrbExuTEhySmdDZ2pJZlRzTjA5YUcyUXBZOFdtd0hFanJQcHFmZW9Qa0VQcStDSFhRR0srcWV5cmlyZFhGamZsSG1xNlNaUEJXMTR3bjJGU0ZlNlNMcWJNc3VpQm1GRk0vaUh6Y0d2VGJ0N1VuMm00ZUFpNVhGZzBHbmVLeSsyTHdZQlE4MjFweldDUlNadytZNkFNbkk4bXV4SmFLZkY4SkxLQ1p3dlBnQllObTIrWWRxaWZqbnVtNFZYM1l2V1N3bS9BWXFqUEo3c1VkRnJ4OWsyc3lzd0RNbU5qR0NpMVFpMmdaZDdoMWFNZ3lEbStqT01YY0pzNUxlUHFNK2hHNUtkeWxoVmJvdmJURS9MSHZ2dlI2QXRHa0hZaDBkR0hCQ2g1M1hyYkxCeUxHRXVnclN6Ri9OUHprMExIRkF0S0VWR0JYOTluaHAxR3c2OUo5RE50bzBaWHpSOHd4WHdNSDZxTnZXMDBtVis5RDVTRlc3OXI5Rm16YWtXY2llajdzY3Y0cmxiZTNGVStwN2FxSUg1aytiREdqZ3lJR3ZtUitNVWdoL3EyZDFxa1dZODdXSFNHVFdNOC9ZTlBOYjhUMGduQ2ZKalRVeWsvOFVRUFU0MkFRekMxSlhXR21oNG9hTTZMVmRCVzBjQm41QVI3bHpsWEM2Ukkyd2Q2WW8vUHU4YmdNZmpKbDYzRGcvb05RaGtlbDZFSnNVb2dCVnE4NHBjUndadTRyVFFIRjMyU3NXdVdlM2drYko3QTJTdzc5TXhnd0FWQXpFRjhlT0RQWWJtYWk5NkIyVEdleWVJc0pLYVZUNWt3UlRJUS9XYjhOWkNPTk5VWWdWVEhHaVJSMUVldG9WazRMUmxXQTBuZ1NLd1VneDRnR2tlZ3VpR1N5dlZVR2tpQ1FVdEFIVlhMOVEwNHloVHNENnpmOHBpdGhSQU9JcWxEN2pkYjRXSUpaQ1BrVDRYMnduV1ZMSGVQTjh4eEpjWGpQNHdCZ0JmTGVhTW9PcFdyZTRPMk9OOXBaZ1ZhL0tQVEpyUjN5NFp5L2FFSENmRkRQRUVTZ1kzOGpoV1ZiS013M05rWlhFUVFHbFNhSFcvOGlzZ3dvRkd4SmxjYmpwNDhHMGlXaFl0ei92aEJuenkyNlpOT1c5UUhnSndWSUFKSWxCbUdqL0tIcC9HTnlJSXBnWXN4V0tpMEp3V3czQ2l3cHhBSGh2OG9aYWZIOTR6dDlSNFFCTTFSRzZBUkFxVVR1bmhtTXZRUk5HZG1BelJLLzAxNitBZ1ovcVNWUFFpaGl5a21kdG05TFYwWGtNNVdoWXJudXFWTjVDbjdpSk1IdUdLWWk2eE9TbFJpY0VucSs5R0kvbjBCaWd0N3RENEJKQU53SFVlTjlpM2RzcnVDUVlDczFUcWwyci90WnhKRjFiSGxncno5bkJFTnhPckFRQkVMQTd1dlB5OEtTeTJTaHpTUW9JWHQwQjIwdE4xTlRoK0lNR082UWdmRmFWMGc3eWtFVCtPN21mSmlMeW0za0w5ZzZwTDdYbDVYaWNoN3ZuWTdXTm82RW9RUmdTcTVCa0M4WEhIeWRFYUxhTld0OWVET1cwRy9RSE5Uc3FNbno2NXd0WUpjU2d5N2JuZGRYczFGZkpGVFJ6NGU1b2ZNRGpKZ3A3eDh3UFpDd3RKd2wzcHk2L05BVkNoaXhGSFZPcDN1czNYMUYyY3BzZEtTOThvVFQrQWg5SHRNMk9NUXIwLzc1YlN6L01Fa2JXdE5YSm1YbDZ1M3BuMlo0RnU4ZEZFRkJCL1dmWWJQdUJyZWhkYm1OV0Zta1Vwc3RwS1h6N3UzNkc3ZTZYTmNiTjhTTFoyTTI2bVlsRXREL2hWMEJPSjBYN0dKRjQ4RDJ3NE1xdlFJMVlCdHkvSHBHYmhNSS9uN3dHT2x3c0llR2xWaHNKZGE5cU05SFlaVjlSLytka3pvRzB2KzloWWpUbEtxQVJwajVpZ1N5ZlkyNFN4TGZwWTFpSEJkMndzVGpZdmJlb3BBYnlTUFE3aDdtZ2ZHdXVOL3lsa3FoTnhoKzdabXFWQjNEaHlveFFMZ3lBU1ljWFdiYzl4a3FhMnk0bWRITXl0N0Ewdm5rTFBOTWVGSzlCT25sMktYSjNvcVpoZ0dqS29BcmdFemVsTkRvYUZNL0thNmZzOUhUa2xHVFhRYkF1ZEhjUnVyMmpXSkxwTXpNUlhDcEpjaDFBbnVSLzdmck9YRncwbzJsUDArRUw4bjBkTSt6QkZPcExCcDlmcDdpdlV6RlU1Snp2Q2Q2T200U2hzREVRRGh0akxiSnZOYUpGTGRYVTU4aklWY2lnaVIxMFl5S3g2QnY3Y210N3lWMFlrNy93TFZXTEo3ZXJWWlNCdC9ZaFJwSUtOcUw1ZzNNRjZINklHU1l2bUVwMzM4N1pRdWhzaWlXQ3Y0Y3NwTWwwOGNBTzI1TnRweFVoVytiQVpmVENUVmZ1aHJhSU1Cd3lES0JhcmluRlFYNWFVeUp2SEpIZnVVcXAwWTZnSjVOTUdubTc3R1BTVytZdXpwRGFjOGxGb2IyeVROWThtK2NQcXhNWGk1M3FzNzFhRkRTclVTU2JYWUo0TUFRSHhRM1ZnU3BONm5sV2I2bHY4VG9VcGNuYVpOVnhoaVV5M1RDWXc2ck42SHlqRWFaU0pNRGVkaVFtK3ROYkhQUlZvTDhlM3J0c1dtY0doZTRlVXVBVllIajNyL0VPM2xoSUZ0Y2pxWG93d0VoUWM4dW9HM1gxWFNtZk81andnditMaVBOYlBaV1pjMEhqdG9KSUN4Vld0dHFZU0lPRmdQdk9oTitaZGxrVVE3aWhSSFZ6L0t2UTIveTRKSU9TaCt1N1BoRVl0S3hFZXlUNC9XL0gzd21Na1R2eWZUSWh5YS96VFA0YXBjcFlYNFhBL2ZUbFRWTEV6WWd0WW01MHE3TG1tc2JPR1ZLRXM4Y2ZpMkM3ejJ3MEkxKzJENzlaWmVrbStLaHpoQ2w2bHRSNlAzTlkrajFGV3VxOXk3c21yOGRha0xjc2h0WlpYZDhLejRsWmcvN0F6dlcydnhrVnhNY1hUL0lCc3dwb1hUcFZPVzZTWHcrZkJJbWt6MWVSWHZEOFRBSXZsSXpJcVFweU83RldNekpaZi9JZlpSWjlJMGh1c3NXeVZ3dE5VOVBCRnBHajJuQUZjb1A1Vkg2aVVJZ1l5UkozTDFDMUtGQVhuN0dhYW1sazdVVHY5cmVqS1hRVFRnV0VPaUJlTHZzek1uMGtTeW1EVTFtOGZWRzNiWE5pMVhkMVdiVzdoQjFkMWJDcGNhQk5GaXlnOUNjM3RJVHNYWWwzcUlkTmhqTTR1dXBrOWpIK0NNaFF1ZzNVUnE2MG8rUy9XYlM4NjZzem1uWmcrTVdPSDRRZXBjbVNPVUFuWVIyaExzTnRDVlA2ZEtob1RjcnZKdzM1QlBONi9YcDduTFFlaEZ4MGpQTi9aOW5vVVgzS3M3aG1sbHV0aVJsZjl0aTRvaDltK2N2c3pJbTdDd1RZdVQxbjl6NGFDSWUzNWFjRFQ4RmNkVFNhNVp2L3psWi8xR2Z3RzRrdFMzTkdxcHlOcjJmcXBvdC9vYkUwajYvamhyR3dvLzVLV2xLM0VDNmtpd0hza0tBa3M1a0p3akNmcVB0M3c0Q3BGVEJrTjlvQS9iU0E2VzdPV2FTdzVOT1RSREw3V2V6MmQ4WVJDVnlCb0lXZjlETEVtVFpKL2RUOHVTVFBaRis3SHRhUXFyOEdqTHJpczdyTXFQS3E3djd4WHIySWpHYVNod25kYk05WWhzb3BHdnFMS2tJdjlWM1phTWVqYTl4SmlGOUdUU1NLQ3NoNkZwdTdFa1pPeTRtbHUvRkdSUytZQ0tJMWJFMWFqQXQ3RE9OUzJKTExhaXRhc3RFQmdpN3JWYVJ0c3BRTHhDZUJOUzlMcFBpSnJBYlRiK24zU2dIMG1Yd1J4aVZBMjVKRUUzb2YxeVRXdm5udXFYZ0FEUXZOTUVqWUY3bE44OTlMRFFxbGdFNzJZTkF5T0VVK1d0eWVJV3NpdWRUcVk2cDk2NVh3MXh4QVVKRUNWaHBDTHVNQWtjRm44ZHJwVWF3TTRHNEhkd1BhNG1lNjM2WTg2aDd0emU5eCtFT0lPaUNjdS9ualVFN2M2eEFzTTg2Mi91RHZLaHhYQ3BidmlWQkk2cHJ5NW4xYnBkdFJBdUY3UlZHTEpTUkZDU3NlYlZxQXVkTjhSTUxpcmxQa0kzV1RXbWQ1eVJaekdxd0R1Tk8yNVp2alFMYVh5Z1lleWJmajBQZzFZRWdXMjFzbzR0K2VvKzNRdDh2SGEvaGV0dzY2bktkZUp3ZWlENHkxZ3M0TVRxOVBzY0h2SGl3d2hVamMzZk5ibWJ3dW5nT2d1dnprbzE5dnMwVTF1SGNSMTltT25qU1N3U2tvaWlLeno1N0RyemJPODN5a2NvcGFSNDE2bmN6eEdrL3ZQVTdNVUpra1RLTDdxYWI1MVJlQ3Rac0xFdHc1OVVJVHZZU1hRUzl5eWZzNWY5eEZ0c25PRHpTbG8rV1ljSnQ5VUx4RGdkU1ZSbXpCL2UyYkRMVTg1RGVkRWlPb3NYTEY1TGF5WVdlVlIrcVUza08vT1lTdDRubVhxQkdXMklzNWVncFBMMEUyRlRURDZUN0tRTmhPSGNWOXM5SEMxWlBTL1d0RnJRak1sMGpjdDdsamkwbEZqd1BjUzZic25ielVHdVJrQkFGbWljUXltTjlNMVNSaTFqTkZSVk9VVmRzWjBhNE1KSVNISFc2MkNmM0tHanlpQW12cGZzM0lNYWhqWk52Z002Y20xQWsxS0dydHFLdm40TDg2N1MzUFl2Q3EyNFBvbGZNSXBZMkx1anloZW52VHBDL0k4TUtpRDEzUmUwQmNuR1RDWWU2SjYwMDB2Z21ZdTQyM0dTSnllTHVKZ3cwR3dZdGtsazc5MVEwcXpibkNIR0UyU1BseFVrdGJUbDNIVUg0YzF5ME5CY1paaDVoek9Gd2dzaXdtZUFvemF1TDNIUjR5WEkxRTZtdHI3R1gvbERGMXg0dkFwSU5FaXFWR2crbUYrdmkrR2huYVprMzkwYTdHTjRrVjVNSE9aOE1waE5VSTdoelJ2UkpHNUZBcGZHTThYa0RzTEc5Qldtc0pJRHZ6NEZXQTZUd3I3U3NOQjlkL3ZKak5RbDl3bDM5RWQzcXkxN2FhQkVVc3dXWVhQNi9pTVh5VFRGNWY4NmpXaTk3dCtDdzV0dHIwWjNyMzdaWGQ3emJlcGhTcEJiaGhMbHRoN3Q0d3oreHhDY2pqM3NKdXF4NWVmWjFQZDNxRWRKK3ljcVNvWTBPUVZNNHBUdndEZGYrQm5TWjJVZHVpNlUzVGt4OXdPamZpZWEvSUtBOGxPSERUVmF0ektCWW5JTWF3NWJUMGhMVmVvZER1a3pPUFBDdXJtVjhQNG9PUXZqczhZVGxxbTZkZytETExDRFgzUllpRlhod2hYRllTRnFCZ0VqN1FxRkFFeVh5ZXBmT1VyVmlIY1ROWW1mUDlTVTN1Yng0YlBWM0s3SzhrNTdJQytnaStWN2NJUTE5a0dBdEZ2aEs0Y1NZdDBYSzJWY3oyNDMyNFBoVEF0UGtQWS9VbkwvaERzWDRpY2prc3JtKy9ZK2RlTE8rK0hkSXpPSGpXUVBsTWVZUTBtdWFNQVBDK3pxK2VQd0Y4ODdCYkJKN2lnb1dBMHlZVysyQlF1cVVnZTdWMmRXS2ZWNnAzb0dadkowRGlEcjNKL3JuNHNJWnZpVHNiOXRBSUZBUklWYmxBejNESzFnR1Z3bWswZjRhU1hmaWhWUEIwemhZS3NQb1BtRDZQOWJvWXcraFVaM3FueWdDdmlRTlAxSWdMbnk3RDNZWVFaUWhTbVlta3FLVmhUV1RlQk16TXFMbENVcUlicUN5MnpGZDhYcSsrN3ZQWmVzTy9QY2N0emZ0MWxyZlBxS01IV2pndko3TTIwT2JnVDFyc2wrQUJEVkVVOWdweW9BMEVaUjZpTnZRSWdqT24wVmhZYURZdG5hTjVIZWhLQjZMUDk0MHJINitiMHZPSVBWYnVza25DYkFkNXlodDgyMHMwT2E5VUNwbG1YT2libm15T0N4bVBYam9xS1NYWDBsZWFWWGZ4bVh4S0loaGxIY3dzZU9DYmthRzBwY0lyOFZrOSs2VzNmdDNKM0ozcEhRV2JINXpVblJqSVVXTjY5VzMySVByQzQwZHpjejVOMzJPQ1paMExOM0FUWEVtUjIyZVJpQnpzaEsvNEVDNm1oZzFLdnVHMzlzUDFGZzJBZmN1UVBnd0w0VTRXcmNiVHNSdVIvamZneUdmTlc5eTZCbmJsV2JIMDFWUU15UC9NaDZrckRISUgxR01PM1lyLzl4WXhUQllkRWZXUUhZbG9CLytWUTBmWjFJVEd5eDd3UjY0cnV0VkxuTURNUTBPRlV6TXh0VUNra2l2emQxYUMzRUdCTllPQWVuMU1UbStQczVLSjJmU21wRkZUSHZWQ05wKzhwT203dDZQT0NaY2p1QVRCdWxwWkNaMGw2cTJ0NDJEaEF0VnN6aGVLbGR6eXRldkRJcGpUYm9Da3BEMDVuaW1XdHR3UUFYUzNhQldiSEppTUFvdXNnZHNBYXpGL1pBMWNOaGswaGxvaHVTVXBYalpGUXErWDlPZW1nSWVUQmowcHgyaFBDTVdQUGwxdkFOaGJ0YWp4NzBnd2xWdGVLUlEzVnlmVFdveWFoWWlFUE15MFR6Sk9hMVBFN0dmekl0ZjJ6bmxZdUg5akFFdGtPR2Z1SWp3Y0I4a3BPMmdZb28rVUVIa20wbW9mdGQraHBHWG5VZmJNRVZvYWZndUZ0YWhEU2xqdGVHOUNQVmtsMHRxaGxKTlBqcUR6S01XakVlR1cxQStMbytjcnJNSlNqWmFGUjRLYWZuTEhoL1pEb2kyK2p4eHNTdkxGdGRaazRsaEhvNlp1ZHh0azFLMmlUeGRXZHJBMDlndlhscW9yM3ZzY2FieWV1YVdDTXM4M3l6TWtTYjlsQXAwSWVkaHNDUU1HVjQ1V2JjZnNVSzJKalhwOERLNVNZYWFsbjQvTkNMekpHV0c5OFlLSFhLYnJoUjJjVkNwbmEzSGdwZ3FFci9TVzhETHdPWEhQVUhBRHRBQTBQMGV1Z1k3M1A5Skp1ZEo1dHBCaCt6UnVQU1B1d2dqYU1oWG92MUw0d2J2TCtlNDNFU1p6eFAwN0hqU0lCbWVsaUtWS3g2c0ROb2JtWVhydEszY1lZeUU2TlhtTnlkZEZ4eDdLZnNTYXIzU3RLMEFyRENxK3B2QjlhV0VnZ08rYlBCTlNpVnZ5RVQvZDJZaVczS1haWHkzNDM2Tzc0ZWRqazJPaVIyek5lM09GbmlrSTNpLzJaTHJKeXc4RVlGOFFoUG0vTndhZ0ZXK2lESXE3dEZGODlEMjRUUlNNZzNMTmFPaUZxL1V6d2Fiek1hVWhYcmRTaDh1YnNNQjhmcDZERTVyOG9YREFPNUtNajFSSHVoOU96UjV2c2h6NmV4KzVGYUhlYlZZaDNXVkVEZHF1RU84WmRZWUdMeWFFVmwzZHJ5TWhXNEpMYjgxcWo4NEx3ZTRIRWptUzdaZVA5R0g2Q2ZHeFQvTC9peHVtZExjeGJxVzA4Z0JRRkdPTzJYQTNaSE1ZMURId3NkdUxTcUdiV0V0NXIzSm40ckZqMlI3QXcya0w5M3VaN2c4dG1MRWNtSWk1YmNMaTRuekhzSFBoeG1oWnlXN2ZZSkp5NE84aThlUDJzeVZlUjM4QWNGZjJSQVNHc2NaQzlEYnJpWnJERjI0bXo3VlRjRks5d3VVMUx0WGZReUFva0dSU1hqN3JBdmZhRk1TSDBBR2l0cklmVWNKUTZaK1ltRFRSdnA0d3JmaUFYQ2sxRXdIaGlOc001SUxXbFlqV2pJSHFIa2lPVzdhb1puK3VHUUEzVEdUeGQrZUdOV1JyWDdLazh6WW05Tnh6TkdFMVFkMkxvRVcyMXRwdkw0TVJ2YlVWK1o5TC9ubWIxYUxFbW5GL1M4RWx6WXlXcWkxWHZYZjZoNUhvbmxRWVZib2FhdW4vVDFjV1ZKb3cwMk5td3Vlc2o5TWNoM2lMR3hGcTZadEFHQkRRT0Fva0RmbVJENTJNNmgwMG5POTZub2RJVlM1ZERmeDBodUsrVmI5cGdTd0lMUWgycjdPbVV3QUVYL0ZMbHFZc3Y0ekVNTjlJb3VEV0VkdEMzM0JSWU1aUytLVkoybE41eERJSlpreEhNTURnMktMZWRNNlJmeEdncy94T0pJWktadFJFWEI5aUZtNHZRR0t4eWV6bzlHSGlXM2JpOFVNMURhVHZTTUNHN1BtdWdyaCtYRjZjeUlRbHNEenF5cFg5SjF5bmNVZzRGMFRKQ3JqVStWSDJsTDNiWjdENjNBdHBTMU82NEZOb1dFRXFHczFwNVVuY0x5aFFkRlE5ZE12bXNnOE85ZlAvOWpUM2cwQ0ZybCtEVm1QK09waHVZLzRVVW9KMFR5OGx4SnpVOUlJUUJ1QnVrR1FIVGJzbnhoN1F4TzY2b2FsNW9xSStlUUtnT0hYcTVJQUwzeGU4RFhEdE05U01jc0h3TU1KZmxQdDZJc0dFUVUzbjMreDFoZ3lHQkJEcXRiRVlSTUFFU2lVSjJuNVBjRGh3RnhvRWU5aFJJOGd2ZlpOaXlva1ZsUWpqaFlCNzNvOG9zaURFSDJNQlc2QjVDbmNuOE10WFc5QkNRVkNBaVIvbVI0TnRFS2EvdnRyM1FnazBuVzhsRG5SeUE5MUZFZitiY3NiQ3BqRW11RnNKL1JCcHFwVnc1eWlNZjFXZlhicjVEU21lR0lSejg1dU5VWnhEcERsNTFRbEMzNGswbVYvZXJSUkJYTEYrWmF6bGRIVG1lODIrUlhLUmlrT2JxOC9aMFc3K0twb2QyNzFsQXRlK1Y4czhwUW14SE1ZWHQwK2pzei9GT08waEtjWXJpeHMwaGJhR0JlMVF4WkpBbmRDYmZOODNuZTg5TlpDQ0gzNy9nQUcvcVk5UTZCZlNab0hwdmJPSjdwdGtBS2VOM0p1KzdpcEExMHN4TzZzVko0d2dLa0VoQmU1czBpTExVdHB0cU1NRmtscGUwUDBiRGJoZy9OdGV0OTFzMlF4aStjSFNkR3lqcmpOTEp3a3M4cGgrd0RFdjBkMGRKUG41VTF4L0pUWXZTQjEzRzFCUGxHV1grL1Vnbm1nYmsvb01HTnJtVWx1TmU1ZnlCV3NsaSsrSVNYOHduV0ZuYlUyd3dsRHhPZXIvNkFJU3FYcDMweGVlempRcG14V3g4Sm93RXlpTEI4Tnl5MTd6WmI1Z0JZQTlDb3l3bmlGeGtrdVZ5UkRadlo1VVN3NUZ0K29ESGxiTTBSY0J1Mi9NcXFsQkZTcHE3ZGFMUVVJeG4zcjFNUXJSdnBiR3FrbHJzbElVVm0zci9WTTVKa3l4QTdjb01CMkRadWZ0dS9QUFgxU3BYSTF1dlVqcmtiUGFUR3RLZkNkYUJlRTU2RmFRTUxBVkI0b2Z4b1ExcHduYXB5elBNTmJGQmJvSTAwRnpuQTJtOTlxVGV1MDh2b3YvWlpQRFdpTnlOeXFpMjBpbUNKWGZtVm44bStPMWxrQkFrOEMrb0VzbmUzRjMrMzJOZ2l2dDM4MUVmMHM3bGNXaDV3OGMrY3FDeUlFNEU1bEN0bmpJL2x1cDdOdWVPUnFCMnRycnRNRWgzTGNMOVR4MFJ3RmNiMGUvOW0zRnlqU3NJRTkvWWE4NzNkbUVmYkoyZVhIaW5VdHdaZDd1eEN1VzhtYzFuMlJBbjNEZTExVWl2VG0vSnZYU2RCQzRaMWVrSkNGS3JCNW9MYU5mWlUra2ovUzg4eVhHcWI3N0ZncVlXNUJ2OXZsVmVGTjMrQ0NKQkc4S0pVSzEwVTlNUDZKVkM0VG9RaERPekRLVWpQcmxRbzBQZmRITXkweFRGZlJoVUFkM2VnMUtvdmVSd1IwZEprM1VPbEdVVFNpdWEzeFdmN1NWR0FpeU9aNnBzcUx5cExhcHlQbXBGU2ZQVmIxR20wNjRSY1hnUWxxYm9mUVNGOHE2ZlAvT0VGdHNDTllOU0hnSFI2QnlMV1NaSXM0eGE2UUFPN3h3OCtoTVhNYzVJU20zYUMrU0lUZlA4ZEhPaXlVaTY2aVFPelEyZVhUNXFsclJJdjQrWXhFdlRnV2t6bk5CNWYyVEZvbTdmWW1LUE1zQUhiWDBGTDVLcE1uVGF0bDRRc2l3WHpoVCswOVI1UzlmZHlaN3VRR0pTZ0t6VWpPVDRBcnVnajRSd1BEQkdWeTdSZmJwUmk3bjJ0ekdIazZTZk5VbmFLVEk4OFlETm4wZGVRVUEwRWNBbFBnVk1SVnYyN1RWcWZDZ0FXUGo2MC93ZFNGTStzZEt1UnhlNXQ2WkRGVXQ5V0pmanN1NFM1cWRWNUlDL2VrR09mN0NIZ1ZQOE1CZ3oraThTM2ZQQy8xN05hMFUvYzYzTUp3Qm9HYnRPVitwcklScUs3Q2s5d3lMVG1jelh1QnFOdDVFcVFyejNGVk9ITWJySFh1RlZ0K2JEcnJZbGJwN0VwZTBjdTNiSE96UG9iVDZ3UUI1WW1CNGpGSXBCUldJQ0s5YXpsdnhHaGNwU3Z5WithaUhSQTYwZGRENTlPdTI3VjlEWFh6V2FONnZXS0RHbE5VMzZ5ektpOEdxN1JJMXRiZkY2Q2xna05uU2dUZ0dsYWlWZlphTW9GUkNmU25aR2ZkR01tUXNEQ1ZVWHJ5TklnQk92ck81WDNMeC8yN1pOTjJ2Rkt5QVQxVlI4OFB5YzJyZ2lFVUJqR3JxVXk3WjFoZVgyanc0WEU2eDJQVmdhNWk0Uk51c1JHZkpBbURPa1pEbTAzVXpBaEhPNjZuZWExSkhwOVZDTDB3a2JheUVPWTdDQlc0Q01sbGZuMml0ZFV4T3NZNkhjTEppRnFLS1BDSUJvaFZ2dzdGMlFvTkJ6WFN4TlhJSEc0OXNlSVloak9ZOFJ1d3hjWHJ0eDVmUUJOVERFdG00UENrWmE0bEs0T3JBYnV3Y1VXNnp5RklqNHFnbFNsWnlUT01XdFlSYzR2U2NINTRvMnNDbG9ZZVJtZVV6cFR2NlhISlZZMTV1dFdNOHlaSkQ0Q2tuQTBmcGlCUmVSeGtSa3RIeXpDeVlSSVRLeUdhVHRGb1hmYVNWYjYzbHd6RHgxZzJKR3B4dXpIYWV0M2RUWjYrWWdJbWJMN2NSNGhnS1FpWDBiU2tUYVFtQVRuejNNSUZWZmNuYjJBbHZUZnE0VmpaODluMnkzU09zbEVPR0E3UWtvV3V3ak5pZC92empRRUh2akpNUDJBQTBQdFBlSW9PL0xtZ2s2UXhVRVZ3aWpQU210b0dyaHFrWVJTdUg4TytYWXJSY3laNmc3WDUrVWVScDdVdDI1dTBjOGIwanRLSnczcWc2bXh1U0loL1g3MDVIaVNlMitWcTlJK0t6clpWTFJMdVRIQzI2cHIySU1mMEVCRE1YNERsa3hlRE16K1R5ZjFVZ256NFRHMHdmUEt3dWVCbkI4VENQWFB5RjFuZmtBZWY0elNSYXY5aGhxMDRpamVvcjh0bU9nOG1GTGhjSFpnTEN4OW1MOHZ3RWdaNjZudDBGM1ZMaGhWS29OdSt2MFJtK2JLenhGSkREUlBPNW5DRFB4d0FrQ0czNTJvQ054VGk0eW5jYS9oWXVnMkZvUHF3eDl2RThlQjQzdVJNTVo5RUZvVjNrUEwyOTJId0ZsanVMUVF4bVE5ME5FNmJzcUw4ekQwb0xzTWV0bnZPdVVsdWRmditZUHRmcG5PQkljckRMbkdFMDl2UWh5dnhlUmI3VVBiNFZYZnpIMG5tdXRuaSsvYmZsSk1yS0pMOEhhbTZldk9QU0pUdTMyS2ZHWUhEMGdhWUVuQ2FjQkVHdlRSbW5mNDNOaEg5ZHJLU0lvQXgrUXJNVG1CSGVQQ3RyTU5rdDlXOHlsbFM5ZmMxTU81TXVweWgzYVU3amZNVldOR2t3dmdHR1VJSExWaFdEMGN4bzIrWEJwYnRFNURzajBQZVd4ZlVLa2x6d3h5OGdPMVdhSjZlaFJOc1VqN24zdk1Edlg4KzYxMDJtVUdxd1FYSU1ISjMrWWJ3UTc3M29mTXBTNk1MVHZRUll1SWd6RDRuWUJQaEpmL0dwV2x3bURXRlppbUJYNmdKY3oxQ3VKczJhNWZDaVRyZ0E5eU1teUlyV3R2NVpBOEF4SlJ1cERaeDY5ckxINXVSWll2bDdVcEl1N3pYUE1iL2drbmtkdjRqaFpkanBnSnNMVXNDNFBEa2VzaHhyMW4zZ04xQUx4QUtFTkNHdzdlNVozVlcyd2hjWXFFS3RGYVd6cXEwTWh6MHB0Qy9VcWphUkxGWXM2M2NWc0RsOXlDdUxQM1MvMUU1SkhqK2JmOVdGczZzcUVLQysxN1ZDZlNNOXkzN3pPRU4vQ3ZvUkFxYit3TjBGeVlrMXg4VXZkd3I1VGpVTS9wRzlMZ3NMMVkzTjExQkhwQ1dteXVuT0thWVJ0V2ZILzJoblNGdi9uR3RmZEVONUZQb21FNG9iRTFSOVlPK0d6QXUyR3NVcjNHdEVMeEpHT3NZOHlIMXc3WnlTaktPOHJZR3c5ZDlEQjlhKy9zbmZ3TzdiK25kV2J1MFZRaHVKclVnNC9YNkhQSFpjemd1TVZndmJkblBuMk5WcWltMDRwTUNpQXp5aXUwa3JldERSMWM4SXNIenNlclBFZ0ZaT3NLcTVZUFcyWkJGRkd6Z1VwS0NOQ3A1MERPZDdUZVFPb2dER3JRQU5INGp4UlZobmp2YWZ1dHI4b1I2MUhLaWh0bFNJOEkwUGZreGFVTXVrWVA5N1hVMWRNTnZmbXZpQ3ZEOFpOdjRvNnFZcTF1b3J5eEZRbFRDdnBTeXJrTG9MWDV1V2lzKzljMFJsYTBBNVMvd3EyaUV6STB3ZVA1YUFsVmZPMEZDcFJ2ZEdTdnJjN2VBQzlVQTQ5QVhyZjFzeU1SWFZ5RHJBUnI2SUNOdE5lSTdUMW9iaFhNZllRa1NsQXdMK1ZWcWZKMGV5Rk1mL3dOZ1dwWEFQajQ0SGMvNWNtMnIzT0Zqb29yUXJnU0RCdUlFUXVaMnVpajBtY2lXSVpiUWNPT25xcWhKUjFKTG5TTm5nN0FWY1Y5K2prc3ROcUhES0kxVmZ5ZXlqQXZ4QmhBMXBBVlpsWGhYcHV1N1FWSnROcElDci9aRTA3bXFUWGNuNk9BOEN5K0FhR0xkR3FyeWR4N0oyV1grdU9uS25JV3F6WUhIK2lYL25MUmFBOWZtZjhRTnRicDFLRTlEYXU1aHZUMlNPKzFJeXR0bTRuNk03c2FDbllhaTdtUG1PVUFtVEhIWmx6Zm5EUlFIck1oRFFFTFV6cVA4UkM2eWNvNU4xa29HZzMwdDBFN2tJZ2RlU1hsRDYxampNNnBHTld4a2tBWmlKaHA1MWduN1dtVEdnY0txV2M3T0Q0TGtkWW9xMk56MGFZTm90em50U0wzSGNRd0tMRzkyU0d6MW1GTm5TWHpBZGFjLzI4UzJDdXNSbjV5OVA5VlVGNDR1bm5zOTB1TE00UnFOSGpiWDQ4ZkdYTVRCdmpjWGwvd0hNYWxHQ25OWDF4QU5SVjZoWUdxTGxFRGpxQlBIMVloYURYbVB3M2lqUm9SaDlWS25yRWtXZ0Y1TEJRMGZiSzlHd2FQYXJnaDNNUnZFSkw2cWpuVzcrbG1MdHNqZEpPMEc4N0ZSNzFYd1NTVEVGOXNTWXhURG9WMk0wdC85cEZwWjIxQ3VYNHdER2d2ZDM1YWRodGZSNEcyb2VQSW0rN01iSEVQdHdHRUJMVzIrNFYveHN2TDNEVzR5c1ZlNUNHNHp1YjV5OG4wK2hnZTJ6WmpUMWZuS200MFdlUzZONCt5a0FnYWFjQVJkZmZub0hLaFRXZWwyMUNRZ0Jld24vNUNRR0EwSVlzbHEydlZhVXJ0OWd1N2JzZnhnVEI5YnpRbXJrazRIY29KZU1iRnVXN1Z6TTZJamNzSCtNcDhHcXVaVmRGZG9vMEtHOWplSkQ3Um4rV0hGcEVYaEtRb3pIaG1tZzRBZTFVcStiTGNhUGR6S1RKRkZOUTNxYnBQQUZWSWVzbEVPRnRiMHZ1MFJJRnJVRG9OOHVvUzhXc1JLNG02K2N5dWVoeXNyY3Q5VWZTZVFjMkQ1Nzh3Qzh6T2hHNis5ZkVHaDZ3UFQ4UlpJUlJrUGRBSkV6YWdZS250SmFibzRzMEFyK01hRTRkdzZxdzZVZEZIa0dZQkRDUmhmeWdVNUtmS1lrOFNXOVVnZllMbjk0QjMwTFZ0M0ZObHIvNk96MGFBd0o1eEQ4RGE0dFZvYWtQL0hqemZPYjN4UTVqSk1rc015bDNXdjdCS2Y0ek0yVkJLRXFoeUJFdkt4OC9yaGp3aGVKOFhtQTBYcEhtVy9Fckw3N2tyemhRN0VyaGExeWdmbUw4dWtFMm5GNTJVcEF1MHV0cUMrMTRBaXJrUlYvVlV6eElHLzA1ems3R1lIZXF2MVdDQlljQlk5VTFQQk9YVWJjTlVnT3FwZHdJUHBSMHNabDZFZ003K3hhRExMd0xBVVBwN0RodjluVmJpYWM5aTdoKzFjUUhaZytNVGYwYWhPdVVSdkZyTEV0R1BKUWV2UTBKSjJsaHg0U21PK0huazBxSGRVdlJaenU2eXNPc2JzWWFweUE2a1JyOTBYN2FROUxsdGZ3MVI2N1ZrclRwQTVrV0oyc0U4dXpuVkVEb2lpQzdkayt6WmJRTW5lRVpMTE16SmNyWGRmbDN6OEkwM3FKQU03bENuaTdISDdzWUR2ZlNMU1pFSTlrTmJWc21iSkZHOEh5SWFyK0d3d3FBVE80V28vaVJ5N01IN1VPYTY5cmxSMUxEUjFNRTBnc0NBSmpTcll1eWI5TzRPLzBQaTlFWEhtSHJhZGZhbEJpRDl5VlVESTljVEhDOHV4RHp6ajFtQlNRT1JjWG1HYWZJU0w2dVNUbWM0WjNONGZSQVIwaFFHR21hUVdzNGF6QkQzK0dtVmh2SFFRYzIyc3hCZHNmSk05U1JlRTFzZTcvVWUxY0tUTUl2SjZkMStlL2xsZGRkVzFiUDQ3RTlHNnY3Rzdtc2c4dGczUlJrSm9tRzRKNVR3K3U1K2ZyMnpJV2Z4bjVsYzl5ZmpqbVpOcGtVMUdTamhKSWxkbUdkbjVMRUFnd2Q3MVZzckZ4c3Jld2NxRnVkOVlROEVJVThlRjZ1bDk2YTl4dzNDditRKytWVzhwdzJ4TlNxQzNmMVB6bFd5Y281Qk9TM0ZxeU0vaWpyRkw1RFpMMk5BbHZhSzZIUCtqWWJHR2RsZDZPc1JORldKaVhGS0tjZE54QXpNeWRidkJzVmlvdnZTcjZBT0l6YndSdHZzM1h3V3hOUlZWcncvQTIwOS9WeG5URGRPNjdFREw1M2lnbWNZSlY3bW1odlJZMXRNTzkzendIUWU2ZDBqL0c3Z3FFNzU3Wi9OWHAzNit6bzcxd2dydTIzRXVnL1pFanZFU3NrUmd3S0RxSDdkMklwZlRVODFVWmhjWmw4TFIvdUVBMThWSWtJL1Q3SzlEd212UmJkNnM4M1dVZU41ZFhBYnZScUExYVd0TFZocnNHUXg5RXd3cU83V2ZCOUVmcDNUb1EvZklzcW03QXJrekI1NjZBOVpCODRwV0V0OXFnbzFVVXdLMG9mM1pXZ0lMT3lVc0lDeElCYlJXSllOTVRsRWYyVmQzTnNmVnZ0MWFJR3J5TUJBeDl1d3V3OEQydnRpMlQ1cnB3N0s4Tm0wOGhrUWxLbmgxelpJN0RTSU1RRVU1S283eTVSNmpYQXB0bitVTkNZV3pPZXNXMHdEc0dPdGowZWdwTm9Ha2w3S0pWdlluM3ZiTkJieHZCTEJBT3VYYzlwdGxxTnEvVTJyZnI5T09saWIwVnUzaGVQRVlmWHFCUkJsMGM3NWtPZ0E3M1BKOE1JZEc5N1A1VUp0bkRNbGJudUltSEE4YVVITUFHNzNEU2xjSnhHbEw5Q011YXJqV0ZWQ3lXKzh0UTlqeFRKUWZndE1YTCtjRCtoK210d3ljTjgvNFFvYUIrT2J5ZjJSbjhuTmpFRTVyT08xZjRCcWRpQkE2UE16dmRid1lJOUFRQVZwNEVHTTNCTVB4VFlNV0FwQVM3REhKZmZWcVg4eDUxd3ZFRXVSaHQ0c2h5OUxEQTQveFBOTW0wbzBxN2hBRmd0Z1lieE03OVZqK3NyOFRhSlMrMlNXMGpyZExhLzArZlgyS3gvK2M1dFFMREFzMDhJVHUzbTBGSDNZSXJiWDhUKzcvRmZUZ2xXd2lmNGxvaWpyaGw2TWljQk9xNmMzV1llYUcxc2VHblB4MmMwK2puS2VLU2FWMUdhKzcvMXNHOXBralpxbGFLUmxGWjZvc2pJMlhnTjJzNzcwbmxNSmN1RXBIQ1FHeG02YnRTeEVkbllNZ1RlVGcwRCtnUUZsMjdFRVA2VjNSeU5FYzhmell4ZmRyRkhyaUFoY1RtMm8zVUdHL3NMWWg3MWtlYlk0VDBzKzMxTnA2VUNzU0IrNU5JbFdDOUhyWHpCRFY2UlROK3dQSzNJVkU3RDR1dmNKSHBKaDl3eS9vRG1NcndwNzB5Um8xK3M3RmlveHRGb3l2Y05DVm9hTTBNbjI1ODB1dFI2Ni9xcENKMjByZEhsaU0vMzJaQmpyU0toUnZOb21rVFVVR3lNdndmUEJsck13RmdlM1FWeUcrQXhVZHdianFBMjBYZ3RMTGtNV2RCSmphNWtDdytYc3EzK05YVERJTTJCL0NrNlk0bzN5Q3laazNRd1B1ZVh4eCtGN3VsSVFhaFgwK0RZK2JPTkErQnpScGJvWlJIbnRiVTV3dzR6ckFwdlVSeVl4MmhkMEtxOVFCS3JsM2dxZ3M0Z3M0K01vRTdmaW1aR0pHMTFHbXFEYk5XUzdLeDRML1pVMTc3bDBJQWlDWFVjRllueGRYSnpPUVBzWEI1OEVweXY2WnhoMmlkQjJRczYxdUx6RVpFeUNIb1lYaU5Na291NVA3TGtJNGo1VXJMdElienoyZDJtSlVOeXlGcDJDY0RBamxnRFB4MmYyK2pXcnRsWDE5aC9QTnJxRlFZQjVPWENRYmZhU0psazF0S0QzUFJwYXM0Nm5iVlBOaFBDWVdzMkMwRC94Qm01UGc0T3lZeVNEb0JIaGZhS2hXYlNpa04zV1BGczBhNW9YN3BwTmN4cGNxRjlvMWZWeStlak1WOUVKK3RGeDJFVnpnK0RZTjdET3FGalhHQWZRVHFLMURNY2pkbzJTQkxvNGZRZVZsVSt6cFVHSXdhTE12WDZWYlcyenByd1VScXlwQUlRL1hjS2dFUzJ3bDFVY0VQWUswUEw5S3NacUhuTGxmRzhzdWhzU3gzc0d2MFZESnFGMmM0aG9xcG55TDNPWXI3d1hNWFVONFVaWDJqZlMveElTNCt0TXNidkpiRnFwWUY3MDdPeDlsZnZyVjQ3bEJHZE5qNzR3bHlVNXBJd2YxdExWME8xN2xKVk9lUE5INnltZzBTdDBPNVBMdm5JMjBQRnhSTVUxV1Boa2huMzI3WEdNL09oSVIvTmg1U2lPcjJiVkhhSis0RzZ6cWY5aVg3Vk1WOVhzdUh5a3R4amVxcnpVOE5kN3lHcnZPNWN3RmdlNVVCcVF5K2ZOSnBRU0NiZytyeFFuVlpobzdxSmowR2JoaFhIenB4cHFrMnJrdVZqTXhGUktnNWEwNXI5ME5jdkpEN1BmQzhGT1hCNDFlbGxjWHJxSHRRQ1kyV2FOdzBEQ1lUbTZnYUJjMmRHL3Zodlp1YmJzTTl2S3JNRlltajhqdlVQc1RzaWJvM3ZQdUppbFIxV1IvZ2VteDA3RWE0R3ZwRHVnalVhbWFmRjNEaXZSYmlqUWtNaENzYXpacFVsMDk4eEs4SWNYdlpZVWNEYWdITk9iNWJvWk5nalI5RjMzdmtmNU1YRXlzM1hsNmJrRFZmZlRUWk1FNTVrRmROTmt1VkZLRUlEdE1PSWZjY01wb1J2dWxTTDJ3Z3hzekVlUFBqMDNUVm0rNVlzTEp2M2FvUm9FUHVVUEZ3RFl3ZXNkS0JSZ0FXZnp6T01lbUJYWlBiVGdkMzdhdlpjM05KZjNKWGEzK0FpbkFiZjl6eVhvbmt0UkxGZU9hYlUxT3dnZlJ3ZjJnN09wOHlPSVZVVXFXWFI3RkNWaFBWZ1RQN2UzUXJtMUIzd3NxZGJBTzE5bHFyb3Z5dkxVYndGVkJnbHhZeXFObHlVNlFQT3VnTm5MUHg0dFA3bUtnN1RJVjZFd293MS85UHZFVjhTSlkwREZBWVJ3cnhMdDVYSUZmYVZQQ01GWFMyZDI5SkVGbWhhdFgyOFpjZjRGSWErTk1HRkQydGk1c0J0aGExYjFJVlBmN3ZDYkZ5c2hWcWpuTElRMmwzUERMVmI1WFpadkpyQ0h4TmVFODZuWkhCSTZFS2EvTEFPS1VkWkRCZnU0ZHJpM0lBQWo4a0ZBak9kZkdPWHNZZkxybk5qSE9SeGVzcnpDekplRUxnUGhOSURvSkZSSkJHWkRoRmdJT2VtVnNma2QycENhR0xJUThQT1NpMnczZFprazlLallIZytDbTVxMFRwZUIrZUorU3EwbTYya01JekgyTXVTLzhvZ1NtRmdTMUdSSHdqNHhabkJYNnZUdG92eXVDbEpRNXV5c1hHVGQxWFBJSHoyZ3dnK2s1TTRCTVVLYWc5ekNtUWdhYkU5TTFxVExZM0w0Ym9MY0U2K1JXWmpXbnZDR2Y5aFpmRmlZSmRDTTRGMGZUNlUvQitHbHRWaDE2NHhWTlZLRDFCUEpmRWM1SGRsY2xPNzFEZnM5aXJKSTRQdCtaNnpaU1NpY053L1dXRTlScWJ5Z2o3MXdqWnkzVldoOURVS1ZwMnZnQWt5K0FhRjR6NUNiWmxwbGZXRUhoUkhsQmFCWkQ5Q2lBYWFzVW00ZUVUa1U0QUdiYXhwYlBlc1FRV0RKT3VCdVN1S0Fuck1tUU9Ga1YycUVsNm1KYngrSHZpSzRXaTcyZDQ4L1ZJMFdHamlGM1FieEQyTVcydDlYc1BlTlFqbW50cnhhcVJEdStVb3ZGS0tWRm1rTHdpZy9McXhOanMvaVB0T21ZbkpSY0ZHREV2aUpYK2dYQXE4bVVCVFhReXhleDRrcHdGMFoyMlhxSFJQSUhXWWZvbXQ1aVBGUnE0aVlRMjZwOFBVeFJPM21XOU9ZaWY4R0lSQ296aFhOMjFRTDUwWHI1UkRadVFRTW9tMnhsS0R4OFFhYWd1NmoxUjZQbk1Vd0owZ2lydWZvTDk3SHhRZ1ZkTGU4d1lkamVmdjIveTN3d0NDU2o2Q0E1aEljalJZTnNvd1AxRXZUbTBQS21BZit4amtlTXVYcG9sVzRKUXNDcFVWRW1tZnJXSlc4OTB1cnh6YW5jYU1PbWxPRlJRZmNuSXlrUDh4NkpINlRqYWM0NUg5SEdJbHpWUzcybDlZUVRRSnZQcWltTERMUXZkYzdmNUQ4VFBrS2J4bWlsNGtwRGt0QnMwSyt1WHNMcWdaU29QbWsyUWp4ZUJXb2tqcnVDdXQ0WDVIUTRYVXlseHZ3WHN2R2k3TG4zZ3pib0g2NEJoQVVPbXNoZTNmc2VSWGdlM0t2K3dzcE4xN21zWVVDdlBXYUo5cVF6bSttN3MxdjNRMmwrUzlnMXcvL0lSSnozNkJyZ1JjenZONkpXNE8yeXAxcDJxQVZ3c1doNG43d3R3SlBWdnAvRjJsSlNNOWVzOFlxRFlXMFNGRU9mTmZJNjBoVDZoWVg4TnlvVUZOSjZoY1k1R3VGNDZPMGFBMnNieTF4VmtVbmRhUGFhUE9rUjVZb21RWXVCNzUxSXdZY2tEd3FQcmoyRDhYSndBM3AvbVBIR2luN1FJdHIwakFybUJuVXplQllNcS9NRlJwQVMyM0hJakZCeWdMQUF6dU1HNnlWTVcxeXJPZ216dk5zdi9oejMwM3hjb0MrTXNxa3dGWFB5a3ZIOVZUMVVBMGVXNk1LK1lkQmNvYXZndTJnYmMwZlRIZ0dmTmx3MC9MNXMyWVZmZGdaZExNT2dlZnk3cTFRbEVCeDdYN2JrMnFTenhNRjlrMWtDbzA1eStYNXc1eXFob0xoTHhvWjRuZnExRm13TlZUOVA4VkhBS3c2c1J4TlpYUklKVlk4czdMc0J4Mk80UW9SKzRkV1h0cmdiUzNlZnVxQ09zcE8wTlFZVUtHL1dsVXRtdU05WUp2VzhpOFhWTENYc0dUSk54OWl2VG5pYWl5UW5jemlSSmpxRS80aTI3bjFvdDh0aXV0VmJNNXhVODZFNzlmVFZabHQxUmFjNWRiakl2N0p5RU9xOENaVHlpaWJEdEJBWVQzOExucTZHQ2lPcDd6OHpxTmFCeWphYUhzaVp2dUZXb0tVMG9kTDJVVGY1Zk5TaEpSaU1BQlJTUENjcmxnK1N4WlFNR0h6NS9GbEJ5VlFqNFArR3RvckMySjFQUVV0NGwvY2FoQ2RNQTVuR3YxcUNEd2tLTUNCWU5qejN3WTlBbEU3TS84OUJUZDF1R3ZqUlM4WlJSNDN0NjZOWnQ1Q0t5dFc1T29pMkhOZHpPN0JCM1VCWmI3cG0ydGpUbGZMemM1TDE0M21LZlE2S1h3b3RYU25BWnhuYnJLeWVGc2JqNU1yQ3NkZHBSWEpHVjl4bndiL1V3T0JxU0QwZDJ3VHZna3o5V3VGZDRQcmJPcGluVDlJSFBjMjh2S3NLejhHS3M2cEF2SHhaMTdvSW1ld1hjT1NobU1uYVliaHJuZ1haYlk4bUlZa3g2ZVA3bGZ3Z215WmVvYlJVUVVlWkZuc2o0TysrK3plelRVVFd4TkZqWFhUczZmRm85NHBhT3BuQUJOUkxUK3RKKzFkQkltTXhUUW5LSVBwUnRQK1NIcDZDSXZOdDBSQkRzYWdtZFhJRFM1RHU1L2FNMU1ITVNLNDBtdklKTDVQb0RUZlAvU3hYOXp3Z29uajhyQWsyU3ZzWVdXMjZiZnp0VzVWL1FycXhySG1kcUJNSVlObi9FY0U4WjU3OTJTbG5mcFlQREFWelVxVDlxYmNZcXJXaGt3YURKbGp6enl2TUZ3eWJUSVJzVmRzbUdtS2ZKZW9xUmtVMWRzWDRSYlUrd2lsRjBRS01rRWdLdldZR2VGc0lTcjhGYnA2WkhiVTBTRXBITlMrVGIxOUV2MWNBWndpeC9Dc3p3L1BaMjhwVmd6SzQwSHYrb3NVbEJGTFhUT2Ira1ZXalZVUDM4UHZvZGdUUjg3REpmZzArOHJtd0JOMUxhak05TVpvRmZlZGp1djJ4cm5rZUtHbWExMTQ4WWpTSW1BWi9mRmdvZmEwb3pLM0xnaE1yRkl4VGxuNzJ5MEZMczNxV052VHdyZ2xIcFM5Ylp1RGlzZExuY2lYTW1zSFNtdjFmanhzdWxnc1VjVTdLUDVxVFBCZHJmSW41TmNldUlDcWxCMzNYTU1lVmNWYWVyVkFTZ3lZNHpIaVpMc2loVlVEQ0wxeTA0Z1htSi9XMVlJWVZnUUlIQkxpdUMrdnlRUkh3TkVwMGV3OHd6M0tPV3pBMmhrM2pzdTdDcTdrSXVRSjF3MEpvRVdqdnJmT2pEcDVyK0Z1eno4eUlQTWZ5eXlrV1RIR0pZY2JuM1M2eWtYek8remdVd0hQN0dBKzBMVWlKUlVsWWwwUUxKOXZmNlFYcU1DRi8wdU5GTFNNOFliTWxScUxrWS91QjkveEd5bEUzWjhJZGxtMUFoRlVuK0M0WDRmMmV2OGY2SXBjVGIwQ2l2bXlFVXBFVVNRdHRSVzNHdWN2a2pVMm56NXROa0ZVa0lhcktvaHpZVXJneFptZTdZTjNFUDlZWE1GbHY5SERKWldzRjFEK1Vzemo0SHM4T3M5WjdDNHlXWVFKdUtCZjRwL3hCMEdFNUU0UndUOFJNMktxYzdtYkgvc2VKNU1kQlMvek9XWGcvQ1N3R09zSi8zbVFXR3Y1cVphSktTdDZmdlBMdG9RNUZkMDJCNnpJdkszYVdDRW9ZelRYdzZqeGUxbzhzNFUrWEtsTFJzblYzaktaeVh0N1dFTHFEbWFnYzJyY3NGTldJVXZ2MVBoVSt6OVFKdzZDS3lmRGJ2bm5vTW1Xa3F5V2lhcVUrcWU1VkplckFOUnBlekdZd2RtRVAvNzJ1TWJkZkV2VGNSMGpwcCtuUXFzSWxFc05Ga1oxZStZUmx3MGg0TW93a1BVY2Q2aTdEV3B2cHhmUXRRY3AzNm5raStaNjltaVYwK09vektseDJ3K2F6eUZ6V1pxY1NKM3BRNnB2eUtJanFVN3JOM0VVbGdPbnZUOFZEbG5hZk85MWg5S0hET1AzSmE2cU8vNEZwcmttbFU0cVFHaDVNRGVkUGYwL2o3Z0lQTFNzQlFCVG1XMDJLZkUvYXBrMU1GaW9sKzAvS1BCZTNDdGwrMWxqWk1YVWtGaTJ6QklLTzBCUVpsdXp5REdvY2lhS3M5Z2FCUGkxUktyMzVZZlZZazlWT0Z5RnozVVd2Vis3dmt3U3J3dEx6M1p1emFZY3p0UTNUL1dlTW8wcjFlMFRMMG9relEwS2JGRzZ5Y202eHlrb1drSGJHL0Q3UDlxeXpsRXpaQ0RkUFdROWVyaXlNdXpzbHZVOXNRektZOUZjR2RoMVBOWkowOEZmZm5MN2VIYlc5RjBwM0MvZEVreDNZdUh1TXMrM002UllwbjJzOGFQUFFjZ2YvQkV6QkJIRWJUMWdPRCtDalNzVWU1em5tU2w0WCtxRGdMa3pxSytDTzhvUWpGVGw0UWpTeStCbnVVb0F5ZEFFbHRQQkovQ1JsQ1NYZkp1NlVOV1RLRHhsVlZoUGMwKzdXZ0h5RWZpc2hpcGNqbXFpeEJUQzVyWTV0M2I2RlpqK3hsL2ZHRkVWeFYrZFRlcWViNkE4bFVveGlnaXR5QWk2KzNzZ2pJUHNha0VDS1A5RDVkeTVmd0xkVEJiZ3hrazVzNHJCVVhRekNRSWl4SjcxdE9YVjc0ejU0Q096clUzaVloK2lxYllGOFZ0eStDYzlDOWJ4OGgxTEY0Yy9RYTNLN0J4YXczMU02aVFjbTY0N0xSUUpnUVMvejFuM2dBWGQ0OFNQa3dSaEhjVHJiMkVTN3lFWXRTZWhpekN4blFCRHp3aTdiSHp2bFpaVXFiOWFYbk5UeC94VVdyRW15K09yN1JmVWRMcjV5RUxyTkE3KzVKNW8wTFZUS0xtZTFRR1E1K24yM0MxS2ZZM3dDTS96VFlhQUdGV0ptOCtZU0hPaEFWVksxOW1EUTNCT1hCVWpTTHJDNFVVODRkRW1ZVTRXRm5WTE5oRFExL2dWUDl4YjJXa0ViS1NnM0xmNnpqTDFoRlhaSU5vclNZN1EvbUp2Mmh1R3AzQlFack1WazJPbFphSWRqTVdEMnRBY0F2TW44Qmt6MHZ2N2VJeG5iVEV4ZksxUjRYRTJVVm9UdTd1b1dvRTdpRjVvMXJydThnV3NyZVo5dVN0WndURGxnSTFRcWVuZEFOU3lPb05BMzF1SitpelZWOTVpZEQ2YTE5TCtYeExiTmw5dnVtWklGekVHb1U1MXdkRVZmdWJOYUw4aTJUUlJ0SDZwUEJra3lhdkJZZFdMQkFPSmdtVDZodjc4QTlrMmVBWkN6S3VPOVNqSFA1bGhNTElkZWNyN2x3WUhHcUMxS3dzaUxydlFPN0srWmdIVytEejZzRjY0bER2VlZIR0cvMkVYY0ZRRmQzRDM0RXpURDFSbGVCaUxlMnFzVlJueGZSLzhmS0lLNVVRVTlENGUreE1oYllsR3l0TDFBbmZmWXE2TFh6aWdGY3ZqalZ6S0h2QUxObVQwY0RabXdkcm00R0xEQzJ5eVphMlI5RTd6TW00M2Q3Tzk2Njl1V2RDZmhTWDZGSFh2bElvZEVvOStmOWM1NDdqVFFaNEtQc1d1VGppV20yUHFXRE9DT2RVK0VxS1V5Z01jVU9oOWNrT296K0xpWnZVZ1pxWXpLdHV5MnE2OGM2Q3MxeW01NjFIaGZWMHBXYkM2Rm42bnZOaVpTS0NCOUFCUHo4SHJiSHdwWldWR1hUNXh6UjhxUDNFNFBVZWF2UElVU0VSdVloNHg0a3BkTEttSGduL2pNWm90TXRiejRMWDgvVWJibDNaODFxMjZhb1NMaEFsVGJUckxHQUJ0UHBVckxHRkN1Yk5pMHFQc1hZQS8rWXZVUXFCRG9DU1FWU0JjWDVNeGNXeld0V013NEhnTkZadGMxSG1mZkdsU1BpaHgyNUJmQXpocVBJM1NieFd0bTRuQ21kZC8vQzZFTEI0MXI2VXNCK2YycVNFSDYwT2lTSFZ1eFhXZTMxZGRlZUR2eFkzQSttbmkzUzYwSTM2NmQxMTRsUW1aaytFS3Bra2FCTXhyL09ERzF5MVpMekU1YWF4ZVJleTI5cVBuVzNHWHEvaXlnWDFxbzVXbkVuNUJZcDJFdWdkM0UxU0NBZDVIK203S3VmSFRLdnkyZW1QVTdTR3RjYWVLc1NPTmxCc2h3ZHpTaFhUTDluUnpFcFMwRVRyZlZhY0l4RUc3TUhPV2FkY2RSai92SWlJSFJMeEJzTnlFejluekRqQzdqa3FPc3NudlVQeUVWRVFBNXR5eTBlcEE2T21VTTB1NlVrRHFBVHF6WVl6SHEwSmt2cXhjYVhiYUQ0cHRBUk1ubndjazg4ajY5NWJOUE0va0RQRkFKSXdjYWpubWtzTmVDS25iQ3d0MG5wck0vUGtaZStxb0cwekxoaW5zT0RYcUs3dVBxcS9LMXkzeUxJdVhCLzh2SUZZWTJlelJDZ1JoS3IzZy9ZQitoWHJqQlNwVjJTUGUxYmZjd0o0WnpzenphaWtoZFluVTVEVitxZlFqR1paYVdIY1grYkJmMVlQeVI2RkEzbStRUjF2N243TjYzNjlVNDVoMnlDSmhyay9Dbzd1WGdkcERpWE9DTzZnd0wwYmlLUk1mejZnWWxDaFVPQS9jZDM4T2ZIOWRzbkNITkV6aFR6ZDYyeGkrNWJKd1AvS0ErWStSTVNUR3pmR0ZjWmRtR1B6dXkwM055S3ByK0hndmdXbmFvRFdCQjVUck1zYk9HRUtxaVd1MVFZSi9ZcGlRUWNHTE1vekpQdVFxTzJMNWE3Y1FOWWQwTHVUbFBGM1BMaGFVNTBhMFhUV2ZVTDFCOHIwbjczRHpmT2NmUW9ZR25YczNYTEhEK1crcjI1M0ttLzE1MnVTeTFjZlF1MUs3a0M5RUZ4OTNUbkZweEhUdzZWNHQydmxENlZ2WHIvYjJqSCtXRytjRVQwUVVjeTg2dHNoZk5naXdsZ2xGQThTUU9HRXRyTklvbDc2VTFVVmRhWFFNMXJiemM4YVVpbFVKd3dhN0tZRCtCWDVablMrUm1CQ1UzQlVyTTVhQzdGcXFWbjZtYlNGVDAwU2U4NEkreG5zUGFwNWlYY1RuSWVEYTB3NzhLQUtMcDNOZzhTemkzeXFUdlZiVEc1ZU1FcG5OZHhOQnlqSk1iZmsweWEyOERaQ3BmV3BaUVlZN0JJRDNXN3ZDS20wZWV3ZXJkVG1Ha2EzR21wQnA2WHJxVGNCWVY3YVpVb1ZyMytzOXdKeGUvcXJHcldxVEJHZ0xtRFQ0anhpWTdvUWloWmV0VkJsVER5cmpQR0hCQUJFQWh5S1B5YmNRcXM3OHhjRm0wMGVnZ1BUMndLdENrME9QZFlFd1JLVE5ZdENRbG9UL2Zzaiswcm42RkpGTGFEZGFCV0Erck43Qk81RVZwWUpDN2lvdWxxcjRvWWNDK3hmdGRQQTdzcWxjWmpxMXY2cy9Zcm94ekgvK3QraTVOUVVvd2l3UlFjWU9zaXIwbmdlU3FVemEvcXk3ZWV3UjdSNDF2UGNpV3BZcEdsN1Z2V1ZoUmJqd3RmOVRzTGhvNTQzYWdTT0JRWjN1MFdXQXNoQ3YvclV6QWwvckl3VElteGhvVDRicktPQUtMVGhTdUd2a0ljMkdTY2NRMFZOd1pRSytXNFdHUlpGTC9UVE91UEVrRXFDdlYySkh4aGhtR3o4SmtyRUk4dEZSVlBqeHZjTW9Qc3I3aWZPWGZKc2tVYlB3bFpvMDA1RnBLOWxZWVdYTlUvTSt6b0V5bmNaT3VkN2ZubG1KMnp6cit0ejNwVWFqcUg5cS92SUpGYTVCb3I4N0poM1JybnBVRHFRaGZNRGtWZlA3TDlvNjExcG43YklvZXBYVDMwT1huZTVQNDRsT1p6Z2VCb3Y4Um1tYldPaTdQczN4MFpzZ05QU0VsVzU5Nk13MVFVMEtXTWhtSXo3SmNqc0NGTWpHWjYydGhBWTRJQWRlK1gvN093TEl4U2lsNERES084SVlUQlVOTm1NR0JFdXdhblFKQWJQb2RkSTlFTHA5NGtIVldYLzExem92MWZvT3pTa29yZFAyb0dLMTBaL29DOThJTjQvWi9rWk1aaWlpMXVGNXh3T21GMDdOR1ZxUkxNT1YvUTVJNFlaT0wwSGNuMXpmSWRFWDdSMTZqeERENGZwUEU4Q2t0UVVDNzB6UE45L3k0MzNmdXpHb1phQnFvSW9SWVpWa1JrTlJvNm9aUFhyL2hLTVRlMUptL2g3Q1lyVk5NWWY5bU0rcjl2T1BnVEc3ZjZvTU5FUVUxbzJ4YzR4R0dpWW1sVXZDRzJyU2dBYm1JMVF0U2I0OXpPdGZoU1N0NEJFbWFxbWo2ZStaY0ZsbjZjK1FFd01rYU5OdFlldnFVVURXYjA3aU5GeDhsTFpQS2lNYmhrMElqYm1YSTlQejlXZTJaN1ZUQzN0QlU2cVg2RU9IWmxZQnJsWlViNDZaUHAvRnZ5VzlXTmVkUGkwdlcxSEVPbi9VN0JSMWZ2NFhlcnZjWVg5akdONDk4TThKZ3MyTVIwYUtsY3ByanlCZm5lWmU1RWh1UmZnSC93ejZ1VnBMZFpwSUpRYVpNRkxnR1A3Y211aVgzUkFmTGFCRTJTdEFydWxZdkxjUDI3RWFRdWNWQ2NqckxZTzdhbGtiTVZVTEVGWW1qZUlDdFRRWnc1S2hCVkJQdlo4N1NVZjhoNjNmRHlZcHJ6K25OaERadk8wcmlLU2MvM2RLYlhOTmQzZG90MXdxdEFldjhyNmVDZnh5VDJHU0pmOGUySjNHL1BLYzFqRUhWRHpDT2E2b0h2UVBZZmdxelBseFkwTEMxODhPVEFvU0pDRmUzejN5amJreXp1SFZaQUtseTltODJWVWU3QXVuMlhydmUzYkFXY0dxNTBIZzBEeklpemZzSHNvYWYxZHpsYVJGNGdjbFA4b1BpeldNNkJQYXp4MTIvcjlIR2JpdFVoSnp0WldEVEpDcUZRWjhPWEVadUhXWlN0MU95aGNhdmg3bFZqb2tyblBqcVFURUczeTFSWW54QWlqeUF6dWdYN09hV1NDRXZNRTRSK0toVVdFTnNSc2FWK1N1ZVoyVHhqSGRVakJrYmdaVXNsNWFoV1JLdmtiVEFtMjhoMTVyUFBwTVEwZTdZVHFIN2JvcUNMVFRtb1dpWi9aYk9mUlF2azlDQ29ZM3BIM0NDRFFEakE5L0pwbWNML0h3MXI5cmpQQitNYmJkdlU2Y2s5T1k4TVZCM0FvNk1iSmRvNjhybkEzTWo2UHhzNXBUYkpYRjZPUmFMWDhrQ1FmU3FicEcycm9MUm9RNmF1eEdONHdjWnRlNmdEUFpyVHRXengvL1AxWVdpUG0yTWdVUlA4akQxaHc2S0hhR2pNc1JjTGVYOGV3ckFWZmxGS2F1azl5QXFuQ28vZU5Cem1Sc00xdUNqYkJlZVhmaUNyaHpLdjJ5SHRtR05aRlhzMGxCZU5pb1Q5Wkw3SzQ1a0tmOXlDNzQ0bnJ6U28wWk01czExVUt0S240aFhRZ0hUZlpNZmhLN1JiV1lqYVRVdk9LT3VwakxOdlhsWW1QTDFUNjNENjJJakh3bHUyOUdUWHVBUkxYak1jbU5TQjNoQXovOTRzMExicjdhcHNrYnBUdzlwTFl5TEFKOWNOcFJKY2Jwak9kUlJUaHMzd204VndadmZUNXkyRnJLVkNvZTdleWJZamVkc3krL3NJa2F2ZG55SVQwUTh4V0xnNTdvUUV5VDRvS2NnUEVLc3RXenJTMWpoNjdEUlplR2VmSjJiQTFkNHNmeUVmU2dOTHMxaWRTZ1Q3UWJSZDEveVY5WXVieWlhUDVNRVNaaW4xVlk3cTh5eFhQWjBtNGxXNTdMWWZxUnVRZmZId3YvTFBQVTRkd2JlTlIxbFNKYjRkVjh2YTI1ZHlqYmFJTmp2bHFWQys0bTVVaVpZT0VlWDVjMko1VjROd1VOS1RxUFJqU2tod2IwQWpaMjNHYmd6bk5yTVRDeE15K2Y4UnZ0TDU4TzNLdXZDNW0rUkNtU040UVVtZVN4bld0dkRLb0ViaVFxWHZsN1g0b09wb3UrNFFKRDFjekpKakI4SUNpQjRIUjRVaXM1b2d1NlozSmo1eDNMM2E0eGZNY1hwM1Jldm5hOWRXdGdKM2ozL3p4dlM0M1B6OUFYa3ZCYnJReno0RUloT1AzZXZtU2Iyb0o3RVYraXE0SStBbzIwQW1JdXdWbDlxSnl4a0tkYzg5dXZydjcvVTRKR0VmK0J2R25WOXlEelRjaFZMK3cyVE9GSzVlbkowRGZmZDMwUm1WV0tmY0pCR2NEelY0RnlSeGMyVFpubWZRS2FXRStpbkExR2ZEUFVyVEZWMllhUFN3b3V0UmF6dkdsMXg4ZHlVblNxT3hibTJYNXFEWk1LaGpVelhKb2RiTTNya2taR0ZQcVNURlY2RVhsUnlTdFZJbHR2R2xINytwY2ZDZ05JMTBvbXlyWFFNL3NhWnJpUWNKTEs3TXJEVnVlc0FFQjE4UXZnenArVlBxYkh0ZGZwY1JDZEE1cDUxa1hyVWFsN1dpSzAzTVphV1R3SitqYjc4RnZhWkR4VW5FVkJVNE96QVJxVzlwUi9SYjZ1eGlhL1NvZzRtSm82a0RleFdiVFV1TFcxV0NwcTQ2T2hyeTBiWTNORWVZTFlscDRrK0U0YWtUcmg5VjBlRG9zamJ6N2dUa3NYZnlFMHhrRCtiWjdIcTJvc0R1TzRocGdNZWwxTlQ5S1QyYlF2d05jVW55eDEwWkhyemdIOXNHSXZsSCtDTG02aXFUdUFEVStuRlNZa2docnNvVXZqNVgrUFhHQnZvOFUwYlFvNEpkTkhERk1RNWx4QmpWVTMzV01waXU1aDlGSnJzWTErU0pKRUlwejM0K0pxNCtMVnJGVUtEdjgxbkY4V1ByR1gxcjNjWU05eUVHbWx2NHBUN3NEcFFuVHFoc2dEOHlxWDJHRmRQTzZPWCtBS3paYk5BNTlwVlRVMzkrRlNLS0dNdENmaVRVYjJpdkovMFkwVzVBQ3poSFNFMjQxMGU0cVI1RXorZ0RxVEhZamJaZG1nc2c3ek9uclgzUlAxVDhhdEtUWnBCWXVoYkZSUXZUTGpzOHhZR2psRkg2WjdmNS9SeXlFbUk4akRkUXlCNzJNc2NaRTU5c0tuZWtVTVdqWnE4azd1ZlNSdlo2aHFVcGlBTk03ZlR4SmZWRHhvRG4vWVdtTWViZm03dTJUaEdWV0x0SjR6SjhHdk1nU0d4Tkt4NlRBQUdyaFBrSU40bC9SYkl6bzJZQ2ZMQ1J0TTBKU0Vob3JKSC83Z0V0eGxEeDdyRDNRSFZ1dzAvT2VCRVRrNnhKOUxWUUQzc3Vob3BQOTMzSURMZEJxckQ2TWJ2Vkk0bXJzb1gxZUtoOVpuR3F2anVJN0duTUR6Q2ViZFB2TVRIS3VocEVibVZUWmM1RDJoL3FVd09VM1A4eU81R2JkSk9zNWcxdUtadkRlUEcyZWNGTTZqZ0xDYUxJQU5zSG5yRis3QXdCakpXNEZ4NjhwZVorNVBVNUFqRloyaVE0NkVwd2dSTkpMams2bnp4d3VIVE1lR1FYYmxHU00xYXdITmJIcXpHQkpyaFRZejdIa3hQWExSSW1GMjlZMnM4c2pxWWlHbTRKWlh2UUR4QXpZdkJJODBMV0xIanlGQWw1SUNxOHRGQTUvM3VHRDJvMGhTUFA4azJHL0FsTnpFQXE0QXhHbGVzdC9KaUh2SWJNc09mR0w0NnZhUHBBa0gwb2w0TERCb1JKL0hNbUlhTU9kUmVPREFlaWZBeSt2QzBNWERtbnN5NGtvYXdEeStxYy9RdWtrY0t2VHd3MnMyUDBPVkxEU3N4REMrYk1TV1BsUnI2OWZNQmdSN3hRdzlocDZvMXZVRmRnQ0pSRXd4b09HbWFyc2dweUZiL3cwWGE4QTRQWCtoOEw0Zy9WbFJlZnVXSDc5Qm04UEFjWmhlZmRjSU1zNmRZeno2b1J3cXRqZWM2cW11WG9FMGMxcDVjNE91UnpXNVNwQTVVempnK0RhZG93bTBtbnpld041VWx5K1JHZjdHTFhYOTdRSlhsc2o1Qmp3cTNFc1pCR1huTU96OXFvYnU2SHZmRENHaEYzT2NyTHBtTFV2SXRyN0lTNXBhUkxrKzl3bko3MkVSamIvMVZvaFdPS1phdk5uR01YbkZTV1phK1VYc0JZWHBQWThZL2FsRE1aNkxDdVlPQWVnRXNFc1g1ZCtCb2FCbzBKUlEyTitCMXNxZHRob2RaZHc5bXZKKzRiOHZyY2dTYjRCNzgvS3pJZEl4LzBKZy9Qd3JSVlZvby91anhNb1RFcnp2eVVJVmo2b1d0UzlWS2JlZFpIbExsRnZXYXh2UzBoMmRreVZNM1BLRmQ5ellHeWpXbGxydGFtMTU2andkMmRnOEtDSk5OaHRQOWt6c3hITi9FY3NXbHZMYlpRUFlhWDIrSG8vWkFJS3N6aEJIbHh5dmFKRnpnWlkrNE1nVEZKa2JwODlrSG9FWjM5Y3N2OG1zZVJENmFFTVJQWTc5VTBjNk1OODgybWVubzdjYk8zMTM5TWExeWNNYnBpWWMrenhpazJOaXpEVU02QUpRNnVuRDliZ0lqMTIzMUM2YysxNzg3ZEJFc2NIanU1c2hhUVpIUEt3L1UwanV4dGFoZis2K2JJT2V1SmRCV2tZcG9kbFJTTm4wamEvUGNWLzBlK2pFZ01DNFZYRTVFM2VHRG91L0lHY3hYOEY2OEQyOVJBUEN5VEF2R05hNkV6SXNqaXZHa1JpU25SZldGOGZmT0c3QXhPL0tUaG9oWnE1ZW44bS9XUHpFT1ZOcEl5MFBhNDFYcXdidGtKeHhBdkk5OGpMMGQ3R0dLVWJ0UzB4THF3Zm1Ybzh4SFM5dUxncjNkaG9USk1zU2k5L1p4UmlEekhwaWRnK0tmeUJSMHNRbXFRb3FsQlp0bFZ4cHpOa0ZkUWhaSkl6bXlZQThQSmh5dW05ZzlRYTJ1TTBnRXJkNlBoeU9HUHYvUkFZTEpxS3FSRU05K2NKR1YvS2pNN01ncGJGV1pCQ0pUdWFsZm82Q2E5TVd2TG55Wkk5R1IzWkNJdTJLbDJoaUhhMDZRUFN0TnJrUTBSTVpXRjYvT3pSSlZIZ2pMa2g2RStxTzk2OUFyQ0p2OGhrNUlLdmhXY3BVcHF6M2pMRXBxblQ1UUNyZHVvUVNWNmpYSHpBc1FIN2gyOGZtL1FVcXVQckxoeVJwZUpMaXNUSlRlNDBwRG1KVUREWE5lSG1RRC93U3p4ditWNGNWQ3BFbyswWmpQMUo0SW8vekdwbVpiaXFXb1JkT210NnNCdGJmYWptZWVZeEd4NURwSzZxOGVQeDdqdWQ0dCtaYm4rWjF5b28yeXFBck5TRkNLakZkOVhIenB2Q25Zc2dYNUNrQk5RamluWndlNm9wbGdGWjJra0ZFc1pQOFBYdW9nZnRxYUtHYzc1R093MzM5UXZpT0NjZ2dnZXRmSEJmcnpzU2JiVk5qbTU5OHdPMHA4K2FkelhzOWMxNTh1OGszQ1ovcXhCanVReDN4ZC9MaVVQVFFlRFpyWm1BUXNjRUhoWE5BVHh6eDdFT2dQRHdGWlZ1dys2b0txdVBOb3AvTHNGMFh4NFBQTzlmdGRBSjhvOHNpeHMvZk1kRE95WVlub2FTUzVoeXd3SUIzZDZTS1ZtL0FzWDYyNnVwOTJ4WENlWUhUb0F3M1NDeHg3aFhjVXNyYjY4Z3dHMlliVmY5V3ZJZnFhTXpuQXBma0FZUkZ1YlJXRnNHV1R6RG1UUkZGNVkvWHZDVnVpWVZyRGNaTElRYS93eFlJS1J3eXB1dktxMWprcW9ZNTFTNlV6cnE4d2dMdTlFTnRzWG1iVXNIZ1AwYzJzMFVrWlg3cS9uSW1QT2RsUHVEczJwelVpdFRJZzdVcTZQY2Z3SHlYTCs5a0xKWTNoejhCeTlGSnBuV3VGbG14cDZoQ2d3amRrcnR5LzFDUmx6TWZYY1dJRFNzSWRYSTl3KzZkVGhrV2VmWDRITVJHTGs3NTJGWlJFckd4dkN0aE1wREZKYTQyYjE2YWVvc1A5TTUxNzkyZ2kxdFB4dTRjTXVucDljYWN1WGJqYnROeFpIS0MxOUREcU9CVm10QVVvSUFNcjJEeUZDN3Z4cVBaMVNMSUxPVU9TajU0ajJOcHhybitiUGJlTHo2RWFmZlRVQjJPcy82WStWN0JaTG5NcEtkK0M0VEFjVnVhNlJCaUZpQWJTV2RQTW55bnMwOWJTcEVCNDdUYTZkTytCTkVFMEhOell5eXowc1B2b0JyQ2w2cFhFajVjQ3V2dlJxcFpZT1BmZmpCT2o3cHF6dWd5cDUzTUJZYjZSb2xkdTdQaEt4SnQyRlkwYWVMM3hqTE1GVTR4QXVMSFJyMm1uUnl0SGJoTW1QQ2tsWFU3ajM2YlBLOHFKQTNXbSszVjIrdVdUVDlDUjVLL3VnWEYzMG1NNHVKTURLL1I3Y3dWNG5XbmtHUVFLMFJyN3hxaUEyTmF1bWlWcVFJMzAwZFdld01QbFpwdEdnRnpXRFVLa0RLcGh4Y21NdGFISVRDbXRNeDZjSlZDaFRVdW95ZDNGUml3TWRQYkhpTVJCRUg3TldkTmVuSkozQ2hpaXhLRFdIeG5xVjVUYXNnbmJNdVZVc2x6bHZseFdaeHhtS0ZyLzNQVE9Za1JEL2MyRnZDT1FoWElYVG0xT2VDbjZnT0NvR0h4NGxDVlFuc01SV1BDZ05DMytuSFZLTFRmSVhYTHEzMEF1ZE1LTUx2VTNoRU1EaHA4czNBaHdUWHlNUElyWG9sWTFac2g4ZnJVc1Jrd0J2bUZQTFdsMUxGaFVJblVsU2hxdllZK1drdUZMVjc2VVd1cW8rK0pkbzF3VlUrZ0s2QU03QmtNVzMzcitqT1NaUGE0eGo0MDdZK2dnZ2xTNmEyd2REWERKQzhmNU9DN29DakJsa3lPZlFqUEVqR2JPRXVubnIxQ2ZBT3l5bDJHSkR5RlU3cFpFbHdWVTAzKzc1eEpYVlZTYkhPVldIQmtSd0cwZWZGZXZYUTRtcnA3RC9UVlgzbGRnaFB6R2lLZ29LbjhiS04rWm1WdFFtYm1TaTlMb3gzRTRxNm5YUlE5bkhLR2J5WklQdXZBdFJmSjU4eHB0SUxrZmJvYXZnSDI2YVhURnZySmRMYkVTZ1czdHBlYzA5OWI0NjdlYjRLUk1mOG9OS3JUT2Vid05WbHExKzBycG1RVWI4ckRKbnVhTU1QSldDTy8xTWN5bUpFOUJYUEdQNHRiMHhoeEE1MTFycHdwNDFnMHVibGx0c1FucHBlU1YxbVdBekFiSm9Fd1dCamU2TnRlOFcrTVlldWczdVM4eGNnVlQrUVpSY1NzblRkZXpXZFptN1FYUXVLdjc5RVBacHdpRUNscGM3WG9xT0JTY0pielVTVnE3Y2NRek94aUFqR2RFd1gxNzhybkJuY0tlendRMldnSjR3VGU3cVUvVDFGQ21ZWEtFa2tyK2pldUQvZ255THpWeXh3V1cydDB6K2hTZ1N6MExRYTdBVjRyd2l0Njl4NStXTjdteVNCY0xqYmJSKzZTK0JIZTZWK3ZjYkRVWVpiQUlGWXZ5S1VFUDJPTVR4T2VTajRKZ0UyMy9RQ1N2eDhVMXlKQmZEbnBUZytJOVBHY2lZY2cxNDc4WTh5Y2pUU1N0WGZlTFdzaFNpQU9zUUYyU0dQTG9ERXIzRXMyQjkyWGVIWFRBckdtOCtkS29VdjFZNENLSFBDOFUrWFpSMGkxVnRFTlRQckwwd0VOM3JLMnNUN1ZYSG9TaHpKNGtjSkdOWFk4ejc5YUtzZTNJY3pybjFmSkNFRFBMdEdjUEFURzB2UmR6VG4wTEVpdmlHQXg5NmE4Wk1pdDQ0QlUwS1BMRlM2OUxjQlllNEdOQWdvcGpFTU95Tk1uMXovOU4yalVyRUNQSmx1ZVo3UTBRWGJBV1FMcXZHZG9CVnllVGk5QVlEdURqMXJaT3RNN1BoZ0puTnROWjJnZWZRV01KOFpBczNCckkrVUZWT2t2RjNoaXVhQk5PVGdla2N5eUN1VStMRDV4djBGNjBCM1RMVXYxUzJRem1KUmsxYng0MXc4YXZjVFo0cWorY3VEb2QvWm1xY29wa0pvQ3ExK1QxY0t4T3g0c0RCOWR1SnJMWWhZSDh0UC9kbjcrUXpHUVd0dUtRVThKOWpPWTlCOXpXcUJCWlRzU0V0SmlDTURDVDBFTFlaUzRob2themZjaHBseUIzN05PWHBVdHcxaGs0WmVpMVdDSlZRcERmNVp0ajB0WTZVVXhMQmo2Q0lXZVlQcVVqbndZOE5YY05ldHhKMGpmUzgybFc1QmZyYnVHWUtaTnBoY0F3Y2lnNkRTYk1KWUJlVVo2WWpRMHVUWXc0a3lCWDN2L1cyc1VLMzV0SnM0ZnlxaVdnTWhkbFVrNUw0aVovWE90STB4ZXkydHpid1pvSlIrTHArK21nQmRHaml2clNKeUhkN01uMGZGaFFuaURMdEdWUUM0NkorbFBLYXMvcVlVZGNKZGNQWElCR1VKbE1QSnozT2EzRmRzM0pEUmVzRVdXdXFuc0VWSTNZZmRKcEY0Qy8yQU1tQ3laZDlPdDlmdlpIMzY0K0pkWDlCUXo2VU1LZjgyWXZodGljRTJEU1ZEY25nbUwwV3RjamhCa1BkMzg2VnNHQ1h5UTNBTjIrK1J1VWpOdG5qUzNBeDcrc0Jnazc3VmJPdnNZbGVlR3lLZkdtOG9USWlvSytPN2t2eWFOVTExOFRPalpJa0dadlF6RTJUS1kyQWZKT2s3Y2tFeHlBZGNlVU1mQnZqbFZRVmVzK3QzWjFMSXE3Tld5Qzk5V000eTBqRzUwZ3JRZEFuUDNOL25oZGpyMGtkUzJ1cjN2YTFQaW9wZ2h4clJiVTN4Y2ZTQllLRDIyTWxTS1JuTFhpN202MHp3UEdqcSs1dEhSdFRyVTFMYmpQVUxaYnpPNHVzeU5UNVBBQUMwTXU4NWVTM08weVpnVGJLZmF3UHNyb1JqeHMvbDNmUGY5d2l3dXllbUg4TlRxMUVJZGtrY0paNkRrMnBuVmVwVEE1Z2U3ZDZ4cEdQakIxUldLcUx5ZzB1SDVyd1dYZzY0UjkyTmtQY3JNTkt5QXoxd1IrMW5sQ3JwV05SRkFxcmhpeHVNNk1DUk9FTW9zNmM2VkdsbWRZQlBJWDF2cEUyaXViZkdVVzd1TUp6dVVNdjdxOUdZdGtta2EzZThIUlVsY2J5Q3FDQnpyR0ZPZzlSaFRpT25KbWFZNmdDVlV6dm5najhZUzhkaEJxdDlReCtBOGkwYXFNT2kyZHRpYy90Sng3SUx2VFJ0dXZTNGZzaituMzR3ZjZOL1p1citKZ2dHL2h6Tkk0Sko3eTNJRVhGRlJXT0xmTnlVZ2kzeHZuNkd3MTZoRjNiVlMxK09uM2dGZkpTTUJLRjlpc1pLU2RCaTNsS3hRQUdkYUhEMXdaemo5ZEZWb2Z3ZTIrbVlVRVQ2UDQ5dENXS3JOWGVhMDZFSnh5Z3ZTaTh2Tm5kQ044My8xL2dFMEFPMHlocHRSOVZ0Ti9OVUJTQTUwemk0WWF5TXpTNkcyN1h6Q2VzRUNTRTVXbi9BUEZXQ3ZXVm5rQUx2UWlMeVJNblRGbDk0UEFWMThxMlJwaHNvU2ZVa21tbWZNaHVzQytEVG1KMnlac1M2czZGL3FjN2k2VXlOQW9GVXN4NmQ2THJjS1llVVF1REJTek5pN1FMbXRtWTZuaDFkWFNsNjRRZjloN2lsVFdQMWZ2OGFjM1BwSHpCbmVoSnd6OXprSmN0eUh4dXZCWkRyR2hOOE5jWUU4eUpJWHZOUjJ0bVVraGdQanQwNVdKRnBLcUlqcHNTeDMyQzkxaiswMy9zZGUwNDRNeWM4V2tCRTdPLzlBdmxHSVRDZEZQaVNaOVhaZ2FuM0pnSVlOWk1pNDZObngwd3I1SGxDWEhrczBCaGFsTytaM3FFWXp6MGREWjlPR0ErWXU5alBFNE1Ib0paQm5JVXFtNUEvYWEvMjIrSEpjVEF4eldiaWVBbWluRlp6djlqM2puVjBaa2VpWW54aEJsTThuZ1FucWlVM3ZZSTVtV1haaFJ5ZElLTVNuRmVlTUIwTXRwSUpzUUE0V3J3VnB2RFZ3b2VXOU5DWndWSUtvUTVzUWYwOS8zQ0dKQk5LMUsxRnRab3E0WmczeGpFdFRHcloxZk9vZk1MMktvay8ySjBYQ3dkKzVEMFNFWmVSUjd3Q1A0ZVpUcEhsT2VtVit3RkZDSU9lay9UZVMxK0lPQkdUVm1TQWh4aC9FNDQwVmZCeE44eHZBVEgreWhEZ1B4QkFXK1MvemhVM0VGdEl1SEZ3akRCem9Cc1I4Y0FmOVF4TVFiU1FNMDdRMVh4UVMreDBVVXUvY01NN2N0eXpGaXNTc2YrK256MHpvUHRDcDNiaVZSTThXUU1Celh3RXFNd01saVpsTHd5WTh0UE9DeUlzOTN5cW0yODh2d0FLZnUrL01oa3JCT2hXV0FuWVV3YTJzamlIZ3MvRDNBMU8vVzU2UXQvQzBDcTFCR2E4VGRKY3BRSWZxTFZjNERhVTZ6WC9EVURMZ3EyL0lKRDNkV1pjcjFiOFM2OTE4aFdoUG8xdzNwVHpCV2p4b2ZNS0xsNU4vOE1lb05uNXZzRGlCKytMZW11OXJCRExJS2pwenMrTDUwVTJ1Z21ubHpLT2RoQ0xDanUxYytIR2Vmd00rYnJ6b1NsMGNCVHZjeFg4ODhLS3NZT0VNWHJXMHQyb2pXaTRvVUY0YUg4UUFNcnZGN3NqMEh5K09tNWVvd1J1NU1jSHp3OWt2L2czYVU1K3BXTW40NmZoUk9XSk53SDVDbnljc1A5ZEVzZmN4QTArSEs3ZlViQzl5Y294RkErck1WYVlIajNIWWNXa1dFdHlXaFB3VnlMREk1YWpvNWNOZ3E4bTdXQWp4S1dVaXRKV3pra1JSWlcxSk41VUFmQVdWUmtCUk9ReStHd3Z1UXR1eVc1b3FlRTRSS2lIeC91WU8ybUhJYVFvR2Foelk5RlplTHVpUlRYMEtha3EyQUdldVpvWERNcXc2MU1tUDBjQ0VSMUJJdzlFd25FVDBrZDA5Um1rMERqcjlnU3ZzUmxLU0F0bmdVZjkwdWlkSFlEZmxIMnBiTDdNamYyeHBuSjhNMERmM0w5UWhZSmZQY0JKbnFWbmQvcWc2eWI0YTd6RTZISzMvWHJUSzFlcndNUklaV1kyc0JtWkVtUWNwR0ZhUTlXLzJ4RHFBZVI4QS8xTEJTbmMyYldjOHVwT3oxNEhKcFQ0eGVWcmNaM0dWN3JyMHU1ZGpjOC8rbUczRyt1QysrZkFpakNuSDVrRnhRQjRTTmFCemk2WVA1enpoS1hyeVpTdmZuMHpqUnRpclNlY3dOcW95U1drbnQzc2dxVktEVm8rWCtSMzFrWGRuR253cVNvUXliNS9JYllBTW55Mm1DYWVhT2NGZXA4dmNLSEw1NVVKQmxaMXUzVlVLY3BJSmo1a0Q2UjFMSVhuZFFXYnphaGtNTDl3dTI2SWYrYjhWSm9FcmxTZlJBN2JOWHdicFNKcUJFcTV2bTVRcy90dWg5eFk4SGF0Zy9xUzkzam1TdlR4WC9PMjNsMXVydUlabFBPYlF1T1dyVTRxYVFOK1ltREFIUllOL1l2aTVDUXpHSzZGQVpQUS9BK1A4Zmc5bVoxZm80Uyt2cWIrN3dLSTI0NjJnRzcwdVRuTXk3UEN3cXJScGU4ckpwZlFIT1RGRHlGSGgwZHF1RVBZMHRaSGNLVXpkdmRlMUhXdWZydFg1eU1VdHl5Zk8zck9FS28yZjBYL3YwM1BZMkViSkJpUXdiRjA5REFycGY0WFR4b2s3NklDNEY4TnRxK0hmWXkxY2FXMkNoWExkN3RFbk1HUXU4VzZ2Zm5XcE9pYVF0YmlKQStOUXBaSDEzMlhjZWhBa0tqNjFDRXoxWTd3YldUOFhvNkc1S3Ava0w4dDYxRndYNkF6YWpRU0NrWDBkT2p6R3M3MWI5L2djcDl4c2RsanFVU1kvbEhkWXNYYlRiUW1ieExYcUtNRGpCeWVNV3RCakxDcHZRdlprYjJrOVJXakdxbkQxaGZVbjY3aTBHazdLV3hzVVhTL0IyczNzZThIOEZtY3V4d2E3ZElpTTErZ2JhZWNLMlAybkZxQWdMUGtQdHJ5YWZ3TUI3aEtDMkZUZUE4NWNtall6a091V0UxNlcxSGFDUnRRRFpUenl5MXJaMHZiMTJodXA3TkdyYVMrbGhmeUcxSXFzV1l5UUQ0cm5NN3ZxU2xRRTNCeklKL3hSWmNWQXNHVldlaDI3NkVJYUsxQjJ3ZFdFbFNjaHd1QTdZTDJnTkR0VzBLZWljNDhwZGpGVWcvalI2UDJuRlBpcTBhM2txMWZCVCtzbFY1ajFFVTgvY2c5cGtUZ0JNN2hZejRpNmpRYjZmRCs1ZTlaNGoyZDVQWmNzRHc0VjVWYmxXcm1Md2xMOC9sUTVvc0x0aDROUnNSUFh2MWxEbzN3R2pLbjFVWHpWK09LMjJybnZOc09OK1loYzdwajVXTXJPNnBwT0N2N0Z6OHFjaDQrSGtVbjVOdXZsTjF6bXoxRlJGSDlseDVUVVZmUVRuUlJDN21WMUZtaFoxWWVwbnJxNVo0Nm50c1JhRGhnQ3pRbGRNMVExb00xSld2TUk3WFhrRmh1Z01vT1RmWTl0VzdrVUFzMmViQ0lhWWdxdnJLNmhVTmxNNnRqN3Ura2RPSUtsd2x6RllrN0dvOVJYZlZrbHdvWExzbFUySnhlU2p5dFhUNlh0Vm1TaXlQOXZCcHRDODBvQnBlak1nV2NXSkVFSjA0eHY4aVFMZzRVUHhzdGNQY2ZqOXBGLzVWWGR5a2ZxY0J5azJrUXhRZnNDaFo3QURqZWdQRjhTM0c4OXNaKzJlVjU2QVBOZ0s2YWxnQTRoR09HbENGRDFiWjBsRGh1SFhaOWlMRWUxWDBCSDJMVkZFQUlGUmlQbHJBUDcySitRZ2FXTkorYUZQK2E1TnpFRGhucWxLQzJKejh6cXZ1eUhQdDJmUit1MnA4ZEl6aTNUb2JrVWJLUmRiQXhtWXNVbDUxUEp4NEN1d3paQkhiWXpBTG56bFlGb1lCRTZrQlJROTRHZnpzTXdCV2JyeGVBWVp0MFRWd0hHRDgrMVhjODlKUnVUSGFvSzlMU204SWd6MWtSa3hWOU5kT2hzRzhRdlFtTUdjNEpZMDN4dE5LZmxDS0VzMm9pR0pUOVZrMzBWaGF4Yk1mVVNIRGJGSjZKQURybHVrNkV6cUpnY1ZjYXRFdUlIeEVsaTd5elVZUzRJSVFzTktCTXNiUXZPNmVCbXpiT3haQjJQMkxhNHZRREN6L3ZZbUlYTVI4NGFSSStvUWZhNmgvOVFLeHdqMWtTa3YrMjBXNXJtZzE1aHFiQXhoMGpzbTJEWEtiTTVTb2pnTmlmdTJ5dkxjVlNoOXk2TVp2aTFvbXRBT1NDa3hBdjVLYXNkQWduczNKZFJ5QlZDUmN3dEtqV0VxczVpVVR3bExmcERuK0E1eHN2aXIzdFVaQjRrdmZJTFFWcE5mSDFFOGpETXAyNk5sVDNrTHRIZ1lLemtrZEMzK2tBVVRacWdocnR3dDc3elZTQnE1blovUWpLWGgxOFNLeHV4aHdHeFJlVEFjRGZiVXE4bFRZNFpKdEF0QzNXSTJkcWRHdmJyODdDYjFlcVhCaUlTb3QzOStvKzVaQlFWcWczY0huNTl3OStRQUladUZ4ZVZZUFhIOTl3Z1pnV3pxd29kck9rYnB4YlNKQ3F6U2Y2dzVPVHkwV1FRaVVUZlJ1T200RTJhNTZZM0lNdHI0S1QyYVJNNGx6ZGE1Sytldi9uTUJKYlJleDVOcTFLMUpEUm1GQzRNRjFWNkFFUVdvMkp4UTR2L2FWaytCT3VFSXo2WFh5Z0lEaXl0MHJvcGN6c3NNSmNoTkp3T0NHME1tbXdEYVltZ1RkMHA2M2k1SHZTNzBzSkl0cVY0Wkh6TUY3bEdDclN3d2ViU3gvMmlaVUlnd0RuSStxa3QrYkF0US9HK2pKZGN5M2dYa0M0eGtCRVhDa2lTU3l6aHlPb1JOSm9DbFBRRFVhakF3L2hVM2tVQzdKdHJhK2QxSThkWDFTdWdDbHhEam45NkIwcEZPQVEyV1ByaG0vaUYzU0x1T1lZZ0hBM3lHVHk0MkRVMWFpZUsrWVpaTXVjNEF1dXR2cVZqZ3E5a1hzaXRIKzF2NVluZWpwK2xRUDhKOExyREd0aE9SMnhNOURDajd5WXc0R2JucmNROWs1OEYyMWF1cmdYMVVkUURzaVFNV0l3TFRMTGtEeitTbG1mRXpYOUJBeUJ3SE9LWnZQQm53bXNaOVRUMU5rQkFUVFJSR0lXMVlmRlNMNU9Xd2hSa0VrY0ZOa0pEeXgwb3JJRmloSVNVMGtYOGJNRG9UYzJDNCtsUC9KdHpZUFhkSDk2Z2NnbFdIWGpNVE5Eai8zUERkczV4Q1FIaGRiT1ZFNmZJbjZxUE9BQ2ZxVnhFLzMvSVNBMDAwUVRsbWpOeGI2TEFOM2laOWhBblZpbTFENDNqcVoxN2pCQlpsdFFhVVRkalJBdSt2cmxrY2pBMit3OVBjNWdiaGRXM2ZGRHkzSEhxaWpEc3JPaUNCdGVzd1FjRXV6RmNOeTB5N085VG5RNGl1Umo0M3RLK0ZTV0NEanZVenVJdU1JZCt0WW5zd2Z1OFd1dUMxY0lRRmlkanBZelRUWFRGVGxNMHFGVGNWTTFyQ2w3Q0h0TEVwdlpQRlcrcVhlVUJZdDhiOTNPWWI2YzZoSEdLSFZVNXd3WkVTQ2dFMkc1RHNETkFBc0FQb2VmcVNrTXd1amRFemRuWHJyVDBSU3A1S3VQRm1TKy80dDhDWlV3RDFSL2VsRjdVQ1I2Wlo3MmxuUW83WDh3Y0tjaVhid2RzS0Y0Wng3QUVocFVRMHRIWUJsdTRHbmJGQktFWmp2NzJDanpZNkNrV3VlNUZtQ1hWbE1aeGl3Njk1U05pZE5XaVNlSjJKWFdNckJMd0JjV2c3T3dLTnhYaGh4RVhhTzhIRHBPQ1N2ckI2T0ovRDFmbktKUEFjNGMrTmg0MUJrWVE4YnZhUFJZbkNoUnhUNTFMT1dTelh3UlZkbGEzMWdrdGp3WXNiR2FKam1IRU5LblZ2MEdSSjdBblc1REJwNUJqelZUYzcwWDRtWlA2dW9pUFpqYno0bEcvb3FGbHlXdDlnWTJ6WHg2d1pTbmxkWHEyVUQ0ZEZPdWkyV1dZRXdxZlhkM1NKN1A2eGVGVjlYZytPQmREQUNnRWs1Qk9vYndFUUNOMlFIUmNOOGd1dUh4UkJtOFQrYWc0YnRZeUJ2bzRWMkdnYUxaRWdHdjlOU3JUVWR4OEEzWHJBelgrOXUxdE5nL0RjQ0hFU0tkSmpmQ25aSDZyQldGMGpQVkZyZ0VtQW5UYytQQnVTYUtnUDc5dCtZdzFXVldDVE14UXcxZWIxZWRHU0xwNTFncDdWZnVVRVc1emdqbHB5dzFkdlEwOXpySkZtRGtXekZBQjByVEpnTmNEc2pPL2g3Sm9VTVhrRTBZajNMNzhpMmFGZi9US25FUW9ibVVzVEdmRURnaEtSeExpTjZub3h4eHBDckMvV1M4ejFmRXQxTW84SXZCODVsa21OSE5CKy9XTXMvd1JVUnZFTnRDaFdYZmp3VmJGU01qWjRvUE9mNVdmYmR5S25LNWRmNHZSZWhGOHowN3lRK01TNnJVV0NLdmwvZFhHbmY4UFQ5WWtGWm1ybWQyS3NBanprdUQ0QWN4UlZkLzZ3M1Q2akMzWDFLWTNhQXlkSnhlbFFjb1lqcXEvS0VGV1ppZHN5VERWeWt1WTFMdndRajhHdllFVDh2Yks2UUpBWHRoaFc4N3pEMWFQOTB5QmVLdFlXemI4R1M3V0xYWDczb2VZNEUwTG1sSDJrWkswWG10ak5FbWV4dHlmUUg3SmxaaEd5eTNWazhQZkRaT3BDdEZkejBSRWJ3NkUwWC9vVXl1ZktvblJOQnRkM1VQQXB0REFHaExON1NSMG9LUWFvWlkzVGRPS2dIN2tybHphbnJ1Q05udnNWaEovWDFtbTl2eUpPYmhYajJSb0JKNmxhVld1NjBZNlA3QmV2RmZOYS9TdXNQeTVtRUduZVEvV0RJZ0tiV0JMM0dIVkJIMWI0RG1aNUlSV0Jnd0duQjYvS0xla1FNK2l1Y3d2bGttbjFNNDJ2MkxOcFk2UGppeUc5VnBUaDhQU3BoZ3Vsc2I1K2hRakxycElnS2JSV2d3L2xRR1pWZnd3bWpMREFrYjBmdk5hTnFEVktxTmdSeUlJOXVwckFuVjIxTHN2TjNUMVhyWTZGQVQxYlFHbmQwa3RWNkVkT2lpbGZUS1ZJc1B3aEw5Tkg3TlE0RFlLTnVaVWg0R2FkTEY4RUVyUHZQNldyb0dZQjhBU0RjL04xWjdBSGdZRVdNdTI2akNab3VBck9qQ3U0K2hNeWRRR1pvUUtoRjFQaGVQcU8wSU16Y3VRV1dPWHJCRDF4TjVQajdRS243a2hsWm1PeW91V3h6ck92TjJUbkdGZ3cxYmkzQS9uY3JNRG9sODNmNVVVK0lPdHliekc1M3hTK3FQNFlYYmpUcC9xc0ZsVSsxNXZPSHJ3dHc0Z3JaZnNoNXcwR1owbjlqaGMxVzk2VzRJNDR3ckdZbHdPbkVuK2Y4c2hPMHh3SDZBNSt3d0xnU2I0aWNWS0h0QUhnWEZFdzBoV2tmOEw4b0dDaFVwNXVaVVYxYjlvb3F2ZGQ1SkdTWjZNanRhYW1QdUpxVjVkemw0cnZ2RmdpbjhlZnllN3JaaFJpSTR0R3d3cHcxd0tRM0R2TnR2RDRiZHF6VHRycjRsTkZDL05PZTVaSFJrNy9XL3dpZzJscjRnbUxMdnJkd1RuYnpoWG1rK3Y4ekFubWh1R3VhTHBzeEFJN25YeEZUZjFOSDRkK3dtZWdEWElscTZaVys5aVM4TjlSS0FlQWdhckVYSjRuVUN2OWpHUVdPTWpOZWFOaUZ4Uk5LRE5PZ1BkRkxkcC9HZGVxOUhRSGpEaVd1b2t0dFAvSUxleHh2OVIrbU1raXZ0UXNJcVN0MzBPa3dqSDNiZHB0UXQ1bjJ6M01wZkxsc1FMYTFWQ0toUFpqbndERzBWWWJMQXBzaUNSTGRjTFRhS0VzcUlPbzZ0R3hVY0NyNmE2SlUvR29vckRtOWJ5VFZnVGU3OUtzdnFpUmQyQzU3d21OTmVVK0puOHdEeGhFeDcyUE1JaE82MjB1VUFLL2VDQTFJL2NNUnBvbTdyaStPWmxsb3Buc2FlUEp3NWJHbXNIV1NsNkpqVXc4Mm9QMDFFcUtTY1RyOHFXby9uV0V6TmtzcGhwQjZ1N05PNkFnRTAxVGtwRnlIRWZYZmNEVDdITWcrSmZ3SHo4dGNOWk9keEJ3aUpWT3g4V1RPbmdWTlBHWUp3U1Zrd0ZxVHZJYWtnbExQaXY5d3g2TlRqRkVkcFEzYjNqUVE4NFRJeU45a2JqUmJ4WEFJMkx1UnY1T3F2RHNmZW1UVU1TbFdDUkZxeUlDNHdJWDRRUTNwVnNZUEtjYjgwalhGNDcyRktYYTNlMmxTeWt0VkN3NFQyVFNYbExwdkplczkwUmkrUTBCMlZPNEQraTd0aWFad0JXR1dsTC9ERlF2UGNZVk02emVrQ2hJVjJjbG5KYWc2SlZZaEJ4WmZvbWFhUHR1bk1zckRaWjIybEhiMU9veFNIVlRhUTNweGdhS1JKUXRlck9DNGU5a3IrbzY5Q2tBWmE4SkFzRXRWUVNIN3JuenFMUkorb29OTjRzWlNuOVJPeEVTSHBpTzJWVEtMK2NVYnk4TnFFN0FwT2tPdHlxejVXMmMwanBvTGRlOTBWQzlmY3NXczBkbXovT2ViSU1rMXpUMmxyYlRhaU9tSzY4T2tiY21DSkJIQ3BvckhsN0x5cGJLZ09CSU5Va1Y5NFVNYm5sUEdENVFzeElvR2tBNVdFRlk0SDRiZ2NpaDFOd3F2cmRsZjBDdVNySzRTT0JhZ3N1UGhscXpEZ3lpc2Zodm1BOS9lak5ZN2cxbGlEYW9nY3ZNT0tST0RLVUp0cE9ZUHR0aXVzZjB3TGRIK2RCTHhZSkxzbGpUWmRjdmJTVGtVcTJNL2xLeTR2VnI4ckFMQ1dFWTJ0eDVTUnd0VkNpeEcwcFJTYzI5S0V0RlF0NmoxdktBWTIwQWF0M0w1RlprMW5sekhYNmFzT3dqRnl0WnkxNWhFQWpFVFBFYVpoSGNINU55YWw4QWlCZFBqODlTRWVCRWx3N28zTmJuZFFaRWhWdFJPOHVVeWV3cWtaK3lvUkFkVk1WYmdXM2NMM0JkdEdoQlpXS2xVem1Ud0ZLaDVtQWhZakZiZTRxVE1mNE1yNG5QalhBaGlOczNsQ1pCZU5ybnVocnkwdEV3OHJzOTZhTkY2Q2R1QlN2U1FzcDdYb2RQbU43Rko2RlVmdi9LdSt4dU1JWUJScVd1Z3BsRllhQmx2d29XaHBDZ2trWC9RWWxIbkxESDhpd0RIdFZxcEpSZzE4M0xxcWFhV00yeERCb05paWxFck5XcUVoNlBjQUR5REZrM1hjYzhZMU5YaFNXNGY4VHpyOUpmY0ZkRE1GcUNWOFgyT3V0TEpwMFlHbzV2d25ESlJ4Znp3dHQrT09SWXBaS28ydEc1OU9XTEtadzk1VkVHeHZhRU1uUm9pYlUrQU5MeityQ0RnNEMybjhOTHBHU2lYZm9GMHZ5aEU3RmRjbjVWQmorSEp3VjJZNTRQSjRiLzBVeUc2UldvaTdkR3FmU2FhQlBFbUR0a2RYcE5YZTV3UVhFdXV0NGRrSFh2cHI1bS9JK1FGU0tPaTRtS05oNkNGcG5TMWFMbEVteTh6dXpaUXVObk04aW9Fb0JWY3dPQnVONHZ0MU4yY0NYTmxCdUxKY29xTEVRZ0pDNEFLOHdPTTY4eWx2MWIzbllFMEp5UjB0RC9yMjNoVVpWSE0wTWdQSEo3N0hZRWpES1VLYTh4SFRiV05KUU9Xby9OeWg3QTE2WXhMQ1ZudVdKS2NDZ2ZjeTl3alpEbXlEWThDNjZYazQ0cW05QU1PWjQrQmViSVJDNjhKYytFa1hyN3V4YmRjczB0YmliVmlWODdTU3h6QnpwR1hRU1AxbXdUZWMrUkZCalMvZTkvcm5sSU5xelZTd0R4RVdDQWhWemcza2sxR0ZITkFiQXAxbXlsaGxvK1V2SlpDOWVHTVBnQmFaVXBDT1F6RFg1Vk5oK0NObnUzRTByTE9IOXZsYU1VZFZqTUdTREZvZ2tKZmZtcjIxZ1BFcHl2SGpVdVplWHZ1Skl5MXdmZmNLUGpBVFgvcDVNU3pWSFBHOWFXeERyY2x2YXZNc2UrSzllM0FhYTljc3FlcFYyRTJMUFIyU1JtcjN0aVJFQys5alliSnVqZm9wRlBzTTdaWkdxSmIvN3U3T1hJQ2NRYVRMc3pDTW82ejdFWHlxcDVnK2g1L1FuOG9BNXNtRVM0d1B3OFhMZS9VWitQeU1zSHAwL2FqaVRvZnpKejkrcWRDRENpci9MRnd2UEZlcWtnT1RqamN1OXo0bzZyV3QxN3I0OU5VNGRnM0owS1dvb0dvQzRQQjYrTVowaHJMOEphaDlTODJxZGxkMVZmMWVoSEpnYWNGT2xaZzN0M1hpSHZPcE5Sblk1dXhvQzU0UGt3SmlKdUR5SUpnSjRUallFSEZtaHZYYVNYL1puY25SVGNxMXFqZ0VJY3M4V1BrenE4allheUR3cHJCQjFaVlY5eVRrTTBZaDRFeUxRZ0tFOUFZY2pVSU5lYVhMcmVRdk9XZ0ZkNUJjWWI1dGRMTklJM2JHYnFKc1ExRTVQdU9kUG10N2plMnhmaW9aNDQ0bExramVsaGZrNnUrWFFXVXYvVUJLV0VJemhtY2l3TU43SkJDdkd2L2ozdnpqOS8xZUg1QlRSQjNib0N6OXgxZXdPTFV2RE52cmJUa0ZmK1IwMDJpeXRPRjJ4NnVCcy9IM1JzeVVhd29PMFJ2TjF3US9LVEJrVThaT3ZxL01qbEI2d1Z1RHErS3VnWlZDQkx5Lzh3RGtidXgxZHkrSUVUOVZaV1BmWlBiNThuVGNQOCtJOHA4MHhRWW53TWpEWit3SGRzREsraVdhUnhKd2VVL0p0NlRINmZtSGZ2OXNrKzZpbE5ONkVuY3hPeEFyeTU1bFlFK1lwRmpHblRxd1hvSCtYMk5uZzFlS2xOeDFtcjlIajd0bWZNcnJLMzE4SGQ3K0JPdFRENVZQbG5MRDRtNWw4QW1LNkYycHJuVUNVYmgzbG84MTAyVmdQN2VTcDlkNmYzdkhqakQvQWliaTlCVFlQWVcrMDlieVd1OVJBY3I2bk4wVzlRZkhpdk4vWmV1cUZ6ZXVuczR5ekVtQ2JZNHR4WDNWZTRQQVJibWtyMW10WEhpUXhURUxRdVB0ekk3SWl3enkyTVVRakI0S1FXODQrM3l4cDJ3Y0w0bEo0ZjRZYkFiWWpzcHJXTDlYWWpsZjgxOEFCYlh0dCtiUWlxU1dMZjNaM3RlSHZNZzN3YkZXbVRzRzZkUHExZ0p5Rlc1OVNOdjgvWk1pUmVaYW5JUWVGUys1MVUxekk4K0N4WE5uOGp1M1ZxRFJyY0dXN3g5NXM5K2FScElvWTBucTZmaXVnd2dwZEJ2aCt5cFZndWhYVGc5VEdNQTRVcWpCR0tFTFpMbXZYS0ZIWTZVUnhuWGduUWFycnhibTV5amtOMTh2R3lWRUxIdGpnMEVyV0ZmSndOVXFacXlxOXRIUHhKbWkwYlJEV2FMWElqUE1zU0hwbW1EUGRiY3VyTFhzNU1hV1VyVjhNdHdLWTZZb01jQnNaQTUzeFExb0cxSWU5TWx2Sm5RdS9aYjF3Rit0dWJOUDJ5Q2dhYUtHUGFoL0J3cGlEN1JOK3pHaVRZYk5UeFZTcnJCWXpubllTUEtvM3IvUkRrZzVIUkwxZUsrUzh3WmRGbzlHT1pNdTB0YnpSOHNiRTBQcVVvZFFKbi9wc0V4bnM5V29UTU5RaEpmNHMrc1k0UjNWUWUxa2ZHS2xlTXQwTU40aVFqcG9weVVoTUJzcEdUMlJFSm8zOVArRlltR0p5N21vWEZ1SjBYbllxcjZuT3pnVlE1ZURMZzY4QW5FVWFDa1o0Smh2YjdiZTB3L3N4b0VOYkVhZ1EzNGloeW82anQvcEdoTFAxNFJpdno0YXh5NDI1UjJwa09xcmlxMFZSSjgxSGtMWWN6c2dOR3VuUUZxVDVtaTdsTGdQRlQvNjZ4SHFhdDM4MG8rZUp3SnF4eDJMcWVVcmtUM05IYVIvL2Fhek9qVExpQUVTZjZuZ2J6Tm56UDJ4YjZWWVZaMjNjMXFzSC9FZ0c4TmNlYmJCWGFZR2ZrdFlQOXY3dDdlUkFIb0FBaFVrYTR6VVpEN2F6R3k4UWVYYUcrRXl6NUlFNC9XUnhXNko2Y3lDQmUyaUZWOCtzNllKcjRHL0R6RnJKT1V2WHNkVW4xUEpYU2dqQTJrNUN6N0twdXN5bHdvcDNVMnFLN0RTN3JNWEpjT3o5b2xjYXFLclh6ZHllS2NPeGJTSGVCbVN0a0c3ZnlmbWMyU1kwek05WS9xd3NoWkJtc2UxYjJJb21yWGhoaC9kdGhpTm9hNDdnc2QzOUxDWm10WUM1OG0yUVF0NG1TYkdCQnNXaDhJY09rS0ZVeWtqQXpJZlcxcnlvOStOMVZsbnN3V3V5S0ZsUXJoTWFrNnhCdWRaWnZVSTNiWFhJQWFXVXdxRkI0V2cwS3FVTmdkN2poc2ZyS3hqZ0lUV2dXbUNJdlZHWUh1WmNxTVNLNWd6ZXhDbFU4Yi9iTFlZVFV5TStQbEFmVlZESzl0bGZ4dnI3NHNBZUxjRmR6NERVa0hyaEJUazZ1Rm5hanFsblY0R1VUTVlZNWhHclVJVkEyZ0xRV0g5SlZBYzNBdjBFNUExZ2Z3ZmVtL0g0UEZnY1hucDRRRkorN1UrY2J6VXhGZDh6a3oyV3VxNVdUVS9hSEVXVXRPY2lIWTY3REZNYWZNdGk5aUR2MXFMSC9LSlREU0FVaGhDYkkzWndPQ0dESk45ZVlsMnB2NFJKV2FxNXpqQ0Q2aEJab0RZbnRrQUNkM3d3RlcvblYxa1MxR29oMjhZbzBSM0x3VlVGSjAxcDU3UnpBd2NIMlY2ZFdpVnBJWGh3WXRBd0dyMVdxcSt1SkVUdllUci9PNnZsbDNjZ3NTK3RtQTN6RFUraWk4T1NvWUp2Nkc2d0xiay9ZRDVic2FGSmxqcW5EM0V0MlozRkk0Tis5c3dsbWRkUkVEYThHWlJzNEczbDM0T3c3RVZlditnZGNuZjJITVlTYlJFUlM1R0tFYlJkQVZKcENrRnFick5nNEFZSkY0ZjVselhQcENIQ1VLOHFqS044ZGVFMUUrNE82RzdWVzJweGJrenpPVUlUUXlxeGN1ZDZNWjhld1ZtT1dwVHZ1MjU5VkRlaUZNd3hBNUJVaE5TczJkWHY5QUZyZUpMS29NV0tua3BVYjlncW9tVnlvQlBwczZUc3k3V0FFQlp2bzJ1Q1gzam1ZS0NhMk91NDg2cDNiNGovZStjdXlqRW9YRzkzelZ4R0w2QktydjQ4L3lva1RtS1J6VEhFZDdvbXVFMFRMTFVLMkRTTllaWCtwWkw3b1EzZG5iUnk2c0hPRVdZdHY3dHdmZXZ3VUNVS0xsUlMwY21XNElZMmFFMG0xdGR2azQzeE81cFVsSHRSdEZKNE9LUmI4dUVONnNsTURxTVZCK3pMUWpNU2FhbWlQazQrSG9WM05OUXNkYkEyZnhsL0VmRDUrYVBYTG9oQVdzNDhsek5hODhQbEM4aTF0UnA5TkVzQUE3YVgzei9LN0p6MTdIN2FwZ3cySU1oMXRyTVEvZW01aHBmS21WdEljVGYxUmhHeUJCS3ZLc3B4YjltQzJrbG1abmlFZ1lIR2JjYXJRSkVJWU9GdGQwZmtwUkx5YjlvNVptYXFSTWxrQ3hWaFRFa3l1a0w2cTliQytRRHd1RVQwQVBMQ2UxNlJjNGc0b0UyajF5RGwyOVFPUnlMZkdhKzJHZzNsUGVBMzF1Ykl4aDdKandua2d0cnp1L1UxbTIxNkdWcERWK0R1TFIyWWNHVk5yYkNiWjN5NE5yaldxUkg1M2FweGU2SExLRjY1MkI1R3NPOXQ0bW5FS3pFRDF6ZUp2Tmk4R25tRHZLK2tTK2hDaDU5S1lJV0x2aEdzTXg5bWJEanFjUG9WMzN6V2hGSzF1NUR3UzNhbU5oNnE3NDNQMkx0YWtkT3BiZnZ4a1hZdVpISm9LNFNodGo5cnNEcUxuV3dHTnA1N0dXQytIRFZoeXpCZVU4b2Zhd2JDS25DUnliRWZmWTA1T0tPdXRzOFNmdEgwWjJYeWI1VUNkL0hlNU1ZQ3lYWmJzL1poSmErZTJ3TCtGYkMwOHY5akdCeEl5NlNuTTd4YzN0YyswR1pRTFdDaGpzMW12NXgwdkpjUDkrMWhlZVhvOTZSNFp2U3NUNHFxZloycHhTb3gyeHZHbm9YZnhVOHAzL28rTzhzdlZiSjlsUFo1bGY5NytNbExpZEttQzhtNjBGdlh6VzcwK3ZkWFg5VmdZeUUyR0pxS0NOYzkrOG1EQ3J3bTJraHhWdjBPOUNuWVZHN0wvMDZScUtLdDREekhoWDhIUHJxNW11OHhUREt4OFhUT3VBRHZtQkxrb3JrWUdZbmlJZGRUS0lWT2xORzVQeHZuYTZqL0IzU05yc3dVQkpnVy9BcjJQN2FJQ01OblhRRWJYYnBpNmZ1cWtXdjc3NFFLekpSQlpEb3ZyalRwL2lyc2hCTXNpVVRmQ3YzRmtxa3BIM0NuMStyY01ENENFTkxvQkpIalE0OVpaS3V4U3h3Ry9BYjdmamFTdTkrVisrZEdYWVp0b0NoNCtRUTA3TW5tRWpZVEJnN2lVZjIzOVRZelhwK3pheldpd1RvQlFjTXhKL0QrYUg0RzVhZ0I4SjhDUkQzMmNDUTlKUHhxSTZwU1dqL1k2WW9XWTlqb2Q4REV3ZWwxbUIycUZyVXF3Qk5EWXZrQnJMdlBjRTNBZU1uemNzbEV1aFAzYkZUWmtwZmVFVzJoVHdKTTJxL0RTNDg4ZFVBKzFsNjdlRHhLMkNxWTBOZnU0cWRqNVB1eCtITGNZRGw0SzU4Tlh2dlZ1TmFDMGZRUjRRT3pqSitDbSt1UmZiMi84aEVMdDhqbXV2VitSa0M3aVp6dWdVc0VBTHZhTXZjNHQvRXZVbjZCYU5hUGxubldtRDBick5PcjY2ekNyTUlvZ0dPRXRud1M1cHFpUDZ4c1pKNGI1aWJDb3pybHRKL1VkQWJUcU1lRld5dWs4SkVqSERtVEo3VjJCUFB1ck4ySzltTkwwSVlibk5HQ3VWQVcvcnVyZjZZdzhSa3ZVUHBzYW1hNElobzB2bHRXeWNGU2pSMHMxS2E5UjN4RDMxWldhOWZtN2pVK1M4L3NuU1M3L1ZwUWNrK2RGV2t1RjlQR2xlL05VMnRzVTJXNXVBaGZJZldkeVdjZHI0S1JLT1hMK3VEa2RXVTAwV3RHMGg3eTFYWWpzbDkyMTZzWnBnU0xubGhmNmZMVklGVVRjek5ldmRxS1Fib3FqY3RxS2laNDhVYytvVDM1U1hYM2xYc0gvTXNxMVZhSkVlOTVwWDBJeHI4L0ZvQUF4cFdkV0dsUWlSTE93T2tmN3pOMlJZVW9pR004M3doSDdMck9jUEtYVkFEVUc5Z3V2ajE5ZW1ZTHRJK0h1SG9NYlV3VEc2SFo4b2NyQ1hOMHF4S3dWT3prZmpnWGdSZEhTQUhKV2pKQnA5RW54QjJObFNoZmVaVk9lVXRTdVEwSFAycm5aTStCRTFrM0FUcmVtbDRlODUzbGRkNG1BM3d1TTNER29WOVdocGlaTmtDMWhpa2g3R0JkQmQ3dWhSVXNoU3FPT0JmcHZqTllveVdCc0VtbHBSRnhzc1NZbTZhakMwdXJ0ZlU1Wmg3bU8yQnQ5R2xKVGg3SUJKNW5DRlJxYzdHTTFHMnhyMTJYaXZsbC9jRGdTNEFKRDMvK0RTUnlMSittY1E5QkcrNFNTMVJDenliS3NtK2N2Q2tCZENwK3FYTVE0ZVg5L2VtQldSTDMxL0ZwZXJaSzQvaDdic3l5bllxMEJHUnlIMWxsbktSc0lSa2szK1h4NkE5MkNHVUNET1psOGZaUTVSVDZLSjlOWGdsWmJoR3Y0UklrNjFqTkxkM0ZseEJnOHU1d0N5WjZPS3k0LzJNams2bDVFL3JhcFBsOGNiQjFkRGwxL2NHQ1ZRdXY1TVVOcllBMkpIbDBoSEVyekp1OEZLNFNab2pBMWtWVXZTK3JRaDhjWGo4bHdxSk9QY1c5SDJscms5OGhwTmJ1ZmEvUnE5VVhSOXlRS2k0UVp5QWEwWGQ3eUxjUVFEMWNBZ2JvTm5YbjNoNytrRmkvdituMzYrdnBIQUIrbVJRc2lJeS94cFBKMkpCR3RjWUxXNExGVXo1Z0pVdXR0akNDNlZBZE1MU3BWZFFLdDdYTFZYNWxnYmcvSWFIM0RlbDM0SmRvUk16akxxY3VvSGRUKzZEV3ZFamNhMVhjWWRicDJwdzdPMTlPNm9FaVdBRStvOTVjYVNDWG9ydm5SWHZDQmxibzBFenJhUTR2czNlOGhySGdOL0UweDExS1RFY3B1RDU1N3Q1QjNieHlma3Z5ZkJzekJ2dU5qenNsWldpUWVrTVRRVGY2T20yVnVMbW05TVJKWUV1bURsR1M2eXVjL29CNTZVbW55ZW92MGpFRXJvcDdnSXIrdW50VkE1Q2RCZzZmWjMyQXFWb2VNK2hObGtYV3p1aUZ3M0FzcjNFVXh3TVdQRjVQaDNnVGVwams5amJjdmhLNjl5eHVueWY1MU9rcnQ1OFR1dTBOL0pTODNJZDNBN3NvL3paUngwYW5pbzUwZmVSbzZ2aVdsamtmb3dmUERRSTVGSURIL3hWQ042QjRPUjlFY1VqellkaE1uVTk0aHgwME9ubXB2c2oxbUltdXJhdlFCQ2JpQTZCMEkvQ2lTbWtEa0NoRW8xam0xNEpJQTBxbzBwK1NOdzZROUtLRTZJTHMzRm1LZGZTeUpYeCtTand6aitwZFA3Wnd4alpCTFg4ZkpxSkJlU0VTTExGTTQ2Mkk0alh5Ykl2T205cGpaVkVmdVEzSm9VQ3RINnVnbFFMWmhVNERLU0gxSFNtY083US9VKzFKS0g4eERTeStaMW9EaVhyUnliNnVoNlQzOFNveThMckc3eDI2ZEFVTkkvRzVHKzdmYkNHTU5XdFZFU2tzOE41SlcrQlU4U01xdy9USkxNbXo3MjB2MHdZbVlySUpzMXJVeTlURm9namRoUlJIUmhHUWc2cE4zUnhaT0JWQUVrRG41ZzJCSjZWM1BSNWFMSTFrOVVSTElvbkhLR0RrSTZ3UEw4NFQ2OVBabE83ZWo2L1cvNEJ1WGhFcllGTjVXZktRTFAwZng5S0ZTRDZkNVJxWkFKR3VkQ0NSRmZnNy9kYWQyRjdBNFdBZ1QrOFg3TkVJa3lLRjVOWFBmZ3FHeWkwa21ENGJXQTZhdVNFU2M5STdWaEpCSTFmeWFEU0RZN29hNlR3Mkh4dW52U1pBdU5EeUlNZmkrOTAwMGFIWFQxUkhHQndZUEl1elM0OFNIWnVFbWFZc3lLZkpyMWE5TWpXZGRVUytlekFxVDZMZUdia05ibm9PMktvUXBTL1Jib2RpQ29NM3F6eTdDQWxvSUpqNEpZb0JLM01mbTlKRUsveFQ1azU1U3RiQWtyWEZmV0QzY09rWjN3UUZHelFwWHRQT0NtdjIxYWN4UzVMdGMydHZOZ1VwWUtiNmhOYzQ0S1NCWUtoNExxbWdsQm9YWDNBN3NuT0pzeHBlQlloZ3V1TnhxR2VoOUE3SytwWHVqOXRQdHgzVEE5RmgrZHpMeVMwbHQ5ZXVXbldYdGg4bWRVbWJ0VzdkK2FCV0ZUUTh0NjQ3NUpya2kwWkIzSlpWUFpuK1htcENoWkxQOWtHajVJRDk4aW9sK1h6aW81TGpRTUVjZGtLUXZFYWpidC9qK3JybXFycXYxdXdCc2FFTkJQOUlINnpyNjV1c2ZJc1MxbHdRTGVaaERtZWF4b0dRdmZWWVRIcU8yQnpoVjZRWVdDTUc5SlpTMWZmYzMwalFkMzR1YS9hazBLZVp4ZlFEN2hpZFNXWTRKWUdSdWZlY1FzNHdrYmNqZzhVWGZweHBEdnJZU1pTOFdOYlVFU2ZIejd4aDBNREhOemwvVVJMNHFYWXc4T1cxZWFGak5MRFhqcTI5UEh6OWg2SVc0bWU3eGs5Q0dVazROVGRHc0tJNWRVdnBKQ3JlZU1mSHF5Y2ZrVG9VNnBScUxTSTUzaDU0bFpIM1hLSHM1SmZqUi9nV2pDWEIvMGk2Nk1OY3RsUXpGS2pzZ1RtMVV4cTh2Mnl1eVhjcWFVZFBONGorL0FkY2x6c2c0d1dMS2pocXdvalhkY2psR05vbEl5elltbyt0bUJKdkFXZ3RZbzVucGk1ZTFuNDFham1LYlFNMk92RndvTTNaU0lJOXBmeXA0NGMya1JhL2s1dmI4Mmp0WmxvWWdrS0VTVjBoL2E0VnRUa1VrWC9uV3BxNWVyL2JHYWFKNWdtN1Bod1hobTBJUjNSOHJsUXpNSUhUSXVPVGJpdUdScmpOaG9lekJNc2RYZ3FsbzU2Y3FmQ0VmVldoMncySG5LdHU5aXhLcHRRYndmb0NrMVEvekpDV2p6WElLOFp6Q0U0TU1sNk1VUmJ4MkFhZTI3VVgrVXpuRTZSU0NtVjVKOTFJUG1VNUZ4WTBheU5ORXA5NlRuZkdoVjdUT3JUY0RGQmk5ZE0vVEVKNXhrb0NINUZIczVYNDZYVnRiMHNSNmpvUzRaZlJQMDc0dHYyNDhPL1VpOFBnOXhaY2xMb2xMbnJUWTBwVDVPYU1kMGhZcDFLYWFiNkp0MzQ1WjNEamNzZDRYTHJkQyszMDhPYko5Q05FZ2VqRHM2UUlrdzAremxMM21XaXlMazdyaThzM0pLcVBnMG5IYUdHZXgwNDhjQWpreUZnR2JHQndFakZYeldkTUdkSTFEalNpSnhtZ3ZOWXNURHhkUDg5WlM5Q1VzSzRJZ2hDZm1yVU1KQXVpT3lmYjg2aEp2U3IyN2FsM1FZeno0cVFQTCs4bWRHVVhRTGlmMXptbWRpUWtnNVB6M0doU0pEOEVGRmlSOGhueXlXbGVSQ05ZV08zS3VCZmdLekJxNm9oZUxtQkJ5RXlnNzUyVllPTTNyOUNHNElaeWVvVTRtb0FxWkxEWVZJbStoZ3N5bDlxVkRNWE96b0tlWG4ycXRTdmtYeGdkKzgxL2N5VGRBUTUrTmttWXlYV3ZJUk81WnBTVnIxbFRpU05RaVlOWFNqTitveWtGaE9ieFA4ZkI1QXlhcnF1aHZwWkttcmxvT1lJcFpxLzY3TldjYTg0aHQxOE5JNUtIZllkeWxGMlhvR0NhcFFLWWk5VERDQ1M3MUo1MFBLMzd2ZVlCNThZYnVHdVRRcXJua1FVWXYvOEFzMTR5QkZweit6V1pOYjdYV1l2UG1EcCtBQnRTN2pMcTdkaXFzSmVxdHlQdHY0Wi9DNW1lWjFBTDh2NjZaZkZPRXozRXdOaGZid21kSGR2RDlhRjdrY21ydGtuUllWSXhwV1ZDV0dTb0RKcVBFYmZoMzNVTmFzamwyV2hTQWR3Q0JrcGxBUDJVV25lVURSRDQ0MmowVmVIWE0rL1F2Qkc4K2c4OWxlMDkvdTRWRXZLWkRKSHFrQXJHRXJ3ckdqRkFLaXFpbExlU3NERGNHL1d4bFU1d0xSaHZTUXZLdmhBOGQxYm1nOU9iTnEwejJKVFhHdFlaZmlBOUwrRk1TTlY0d0dHc0pqUnVWbTNSM3BDeURYSTB0VFZZNytKbjVoSnYxakt5NWtOdElRU2hBK1RpMElreHBXNFRiV0tWVk5UNDY4eEJXZVhMekhSSW5DSTJPL1l4ODR3YkpTV1dXOFAwa0xYbVpSNlZNOVVLSkVpdUQ3R2taOWxwUFN2SWF6ZEFZalhWUWxtRUYvWjhrNVhWai9EdUpmbTVXZUdjVDc1S3F6clhQSXlvTEdzUjA5SGlqdmhtV3BteGRXN29yU1VYb1o5Y1lPM2pGeTM5YXcrTkp6Nm1NK3V6K0FGbmFNYUdEQ0tuV3RrUlNORFpXSFp2T214ZHBWWTM4ZWhNM0FBVGZaQkxiZThJNC9ReUtneG9KVi9JUzJQNWpkTkgzTTZGZkFLNDc2YWlDSFM5TTNBeHo3czFjS285bStXMTZRWkI3U0hYbTZVL012U3ZQeWptTFE1M0VaR0ExWUNsSEFLYlVTcTF4VDMyQytBUW1Zdk5qOFd2eU82MnRUbWhiMW5HbmxqZEN3QzR0Qy9GZ3A2SXRKZDh4bzBUVHZ5Ylg1ZTZXRXhNYmUrTlIwbHIxZGdMakRrODBISkV2SHRCMFVlTys4WTF1VEFlL09TVlBDU3Ryc203dWZ5MFU4NkRnYVJiNi9MQVRGeTVJdnNXUVFEdzA3ejJzY2Z3NjIvYjc3L0RYWmJQNzVjalBadEtNMEY2NkhHY2NJNThobUlaU0FTVDAxZ0xFQS8xTjNJUkhZRWk5RG83S1hUdXZRK0twenRydmVqMC9nVEJmV3ZDdHFQTkFDbWlMeFV0M3BKVVAxdjdBOVUwa3d4anhxRzJBa2UzUXVTeTNlS0FuNjdQZ09paE1ZMFRweFdEUVdEQWZ2UlpNZldhd1A5V0FrS2VLOEhuZStvZnVzOS9JcVduTHFxNTBiVCtnYmRyVnlZODVKREJYOVpqc1FkT05kWFg1M1p3NXpBK1pnS0VScjFwOEZUZy9Nd01OZmxWb2xucjZHMG94MFIvOGZ3WG9MdXp6a0owSExXNzRIWXRkdjF4NEIrdThUNHQ5S1VvRFFYTWkxcmpsdEkwSm1UbHM4U0JPY2E1KzNWSlBNYzhRdlhrZUR1ZU1qOWJKT3JVZVNrS1F0aXdHelRRMmpPUmFXTXBIaTRFTWJENVFKNUdKd252clpYY2lTOXhkRkQ4WFdZZlNSUk15U1VxT3VrMWZmdU1ta3RrSS85dFdrRDFtblVBY3Nud2dDc2RBL09IYm9VMDNCaVVTR1FjNE5COVdXMmFMTDJPdUxVWW1OS2hON2lNZ2ZCbUtVZ1crM0k3UlNCV3lTK0ZNQmk4bzhja3g0N2J6bVFjRXRlUGYvOUMrTzg1T2ZaM3RsYjZJcTBBaFhOV3Zlc3c0OGN2TUhUU0M2ZS9VaHowclIweTN4eXp3UXhzS3pGcCthS2RTMzJVcHd2aDFIaCtWUE5FdmtpT041a1BPQ0pkanhsUDlQTmtPRzJqMHBib2o3cDNremxQZzJBalB4bEtCalYyakhBU2lFcERKUGU2S0JyL01wUTRZZWFnbDB3RXMxcTN3Nlp2THpaUTk4YkFnTDU4Y2N3TDJ0N3NIYWpsWVZCVkRTa3JxWXBMWGRTZzJYZDVHWjduWHpjbDVkdllnTUIwWkFZV0p6M2cxK1pkcVIxa0lMcHB4a2YxKzgxWUt4NFpEVXBqMjZWOVl4OTNWK2Q1Z1Y1TFdLdnFjRXRtM1hGdzVTaXVMTVMrakxabmhzakZKV3pqVklySkZmUFpwVVo5OXhSQXVCOE8zQUh1Z3Y3UVM4OWx1U1JxWU1ScFdEdVJZT0NvVGJsd2tlZ1BTRlFxWjUxUHl0SjIxQmttb0pWdXIxQllEazErUDB2b201UmI3RzU5a3dpYmNJSHpXN0tpc0lTMkcvWWh4WjFETFlReFRUalZ2VExoRVJIWmY2V0Rla29nSUxmSzVmUWhvSzJ4YmI2Z1JEajZlTEF6MWMzTlBjUFR4bDhQVk1QekNVL3I3VUltaHNYdjFad2xhSGtiZ3MzRnpURlBGbyt1TlFOYXAwd1pOREtWWmlVSEVrQnI2RmpLMEhQMlM0Uk1ZUkZIL1JhWklMcGV6YTRpcnNTK1lDVkxZOEd6REdrbXR3cStIWUZYY1BsTDB3TGlsTlFzNlZmZm1KZVZtcHFMcm5SUUI4aFBqaGJBdklxL1JLcEpSTGJjdko5V2pJYkxySFF5azIzamJzb0FIR0ZmOG5SSHI1N21mUnNZdGVUSHRaU0JoV0pTbFYwdFdITksvWVpsME1uSUVmOXBBZVhMT1JUYnBjRXd4WllkMkR0K1BpSk9xUlJiNm1temJyVGxmUUNuRDl2eUNQTHZNRkdhVzdzVFJTblFPWFRacVA4TDBpWjJvWFQxQ1ZNTXZmVUdHWndnZHgrRnV3SERjUDcxUzlSdm1LN2pPSzFDeFFIT0kzaWFKQVdybEY3QnNGcE5QMkdBdnFaY0hpeHh3Y2xMU0tFeHVqa3FjQXF3UlBHcTlWWDl3Z1p1RkhGRzdQOUp4eU1mZ1BvWVhJMDIzWGkvTE9NdG9xaHhFQ0xHeXpsclhNQUltZHJYZjFCT3hGcUZ5STlqQWhxQ0FXWHAra00zMHVNbHhJQ0w3YmVkK2ROaHBjRWZ4YXJmVmcrQkZ3VXc5MkwxWkpDVWkyWnQveU5xN2pGYzBmRUhweDkzc3l6bjIzQlRndDJqcUEwa0kvRmUvTXJ4aEcrTUI3dGo1MjljUGx6MjUxQU1QanI5Smk0ekFXOWhVWkVXa3BDU040RUxadmVLdU9YL05jSWY2ZlJXaG44N2pPMmdvOWVLQmNYRG1Ca2taa2lwS2k3Q1ZsdWYwdGllZkgxbjhWNjBTeGFhUmZJdjllcElaenloNC9KODIvSzVFRXZ3azdiTFI2dndEYU40UWxqR0U3bFJvUXU0dzRpQUh4bVFYVUR6WU8rTlRVemtIT3BvOGxiSDFveG41RFZnVFJkaUdSRGhwWUdHY25CQUtYU25aZ0RzWDlXb0JSR2VHZlBRU0VaYmtCTzZqeWpFMU4wcDdJNTg3YkRlV2hSb0YvcnBIRDBLalBmK0cvQ0lIcmlCVFlnSU02dzZBMVJXTng4cER3VUVlbWtFcTd6OFFzT3QrOEppSVdlME5YdDRPaTMwaG52cHhZTENsNVpWclFSYkkySlQ5clNLeTVsRGNJajdpeUl2cEZBNHJ3OS9qZFd5VHNzUTJkRVdaLzEzMFlib1BwUWdJc1pYRWpBMXZIZ3FselpjYXNJZzhsMXRaSUZjNGVmMnBGRlVmOFVaY2tRMDFoMmQ1Q0QzZzJwUHpGSGprLzloU2JJSDJScmduYmdhdCtuQ2Nnd1RsRXdGck51MG40VkVkd3QzS1dla2FPcHRZL3VreU1kcEdSdUVHWVZ5RFBLaGFvTlh4a3A5Nzd3S3dnZGVUOFI2NXNZZG1YaEZDbkFzYlV3bDM2dDM2ak1YMWRZTVJPQU9XM2VFRUJnYjNEcE9Vendld3NaNDlIaWdVbGxka0Jya0ZoTUY5d3dXTzBHb3hveGhHc1lueDZmL05VSVpFa25ielo2UkVwLzFTQVVyOEEwN2ttT0tvdHlCZVllQXZLT2ljUU5tYitZOWJPZjFpb0ZTOTFjeGVuWXpsVGpWd1gxQURyZ2J2WnNZWVREVkY4MCtXU2JzZkd2RTdYZ3pSS0lUaUFzOFpoOE9WUnNtb0dQWHJTYmxka1lqSFhwN0RDWjd5UFl5NTFGaFowZjZpRk9ndyt6NytFYlhuYy9TQmx0TEo0NE5DUVlVT1pkeWxzODZUczZhWUNlTWNJZmZhcDNhenhoVnZMckl5YjgrTjdtb0lwU0dBZnovRjBybUowWFF6SlNhOFF5d1g4TFdqZnphMnBrei8yUVVNTFh2cVhLUStpa3Z4RHRCNEVzNGpWVjM0K2dmMys0N2tJemhYOHk2dGVhZUI1Nld6cERTVFAza2FBVEk5VDNmQlQ0ZXZHUzVOSnhaSVpBWmNRWjlaOWJLaTdOSmlqcHdYdE9ucXlCWEFCNzhpRTF4QWZOeHgvNnYzOWFCbU9aYVBKVDcxL3k4bUhjUmUybWhJcXV1alhNRlh4V1V6MDlXWk55a0V4WFlUeTdDd3RyRkw1K0tCN256MHRqeW5CQkJzbGtXZ1h4eGR6MXo3c3pQOGVGdWczaHZrWUNGV282RFArdmlYQlRDQTkzTEcyUjBHVHFRdll6S2FobE1FWDZlTFhJcERWR1FvMFlhdWZ1REkyalVld1pQN0tRdHVhNGlNbGpzYWxGZnhqYXpoNTVHM3BiK1hqa2JlWHdPZ1NWejVHWDNtbDdyd3puRWtsdXY4VlJHOVpzaDRWL0NZK25XZzRpZzY3YjA5cDRkMHFGTkpSYkptWmVuVXF6bnhYOUtMdkg0aW5ON2FzZS9Mem04TldQaWw5YUs5bDdLM1ZLVHVGQVpCcWsvWUFqL011NkEyZVdtM2I3MTU1QklNRW5iL1JUYzY3dGNQTUhKV3krWUIrc1VMMVdhUG1wdEIrRzJGTjYzVnNhOW9yOWp5ejZnVEpNZEtVNThUYXFjTEMvVWp4RjBUbEpQa3NENUl6Uy9lWXNHdWVYSnZtUFVwUGxVQWh2WXZvN2hFc0dVZm05ZnRFMDlGV2cvMk9Gblc3cFpDa08xdUVqNnh5c0xpblUzcCtjVTg0cmNjZHNrYmc4S2RLNFlYdkRBdk9YM01ZS3ZkZVRVeHlPY29KNW0wL3BrWGVwSjVPM2xqM3ZMYVRGRk5EVlltb1Jmc2tiZDgrVnVoVW5EVjZTNS9pZ3FjNzNrdUZEclpDYU8zdktTZFd2M2JTT1FydWZOOTNKY3pXYzNhTkEvS2JYTS8yRnJiUkVSYURKUnNRdTNRS242Z3NRa3JZeldCbC9SazVyUVpxSktIMmZzN0VDUEIraDhTMTRuYWQxRk1RWFNPU1djRnU0NWRNRUViY1pYTjBkU2xDZU5TWGhKcSszczJpMkMveVZlYkUxV1dIYlgzeVRmTzRVNnU0V0t3eiszUGZ0d1BNY0JTNzZXYXk0bkM1NGFySTdIMXhXbU5CTDB1cTJvYVVQOCs2TmIzWStKNEZLbFpUZG5HNlVnT0pua0RFZ0M3TkdmWFVUeGxNZHBVZzBvY29IL2JCYUFodHZ5NGtwNFRoK0JRZEJLT2Iwd0tPUFRBTCtoUWtNQlowUkZmRGtoVXQ5dzdEOFNQbDV0R015cDhpbTRzb0ZkODFvZTNhNW1TQmpIM1JUbUlNVUhWT2hzNjVTMHcrdFU2N1FSbGRxSTY5YXVCc0taa1NQdmlRWG8zdjh2emFDRzFSb2ZEdTBPMzdPMjA1N1gydnhqZm5YRWRFczJaYW43dDBWVDQ0NDhML0pWSi9tTzN0T3Q3MFhlOXVXa3Y5VVZSd0JOaXVBci9DNHExSjY0MFN6T2lObmJodFFjMTFhNlI3WHUwUWpQTzZTWVlvT0FNeExMbmMrcUtvZ25oWTN4cmhaZVVJSENuVS93bVhoSG5McmtwSlduSWEvcnBQQlNMQVE2ZEVuRDJhMlVUUk9taTYrOG5QUWxZd2dDQURXTllxbjMzN3VacDVzNVFmRm8xSnZwb0NxVEpVellsbGt2OFhJeUpXRm83c3J6ZjhFdmZYVWlQenh4bCtVVTJJNmVhZzUxQ1dIR01UVC9QWmlnK0RvQlF0bmVhZHFwRTNsVHpFK2ZsK1ZBNWtMYXFXWi9Sb25VUyt1eTlZdm1BMm8xS1o4dmZDLzloQXhyVjFhZ1JpeStWUzJ3bjhOMGh0aDNQUDE5VFZwcHdsbUd4SUhWWXU1SWJ3UkVyQlZPVGQ2QUhnT1R1YitCbzMwbktESGU1d21kc08wbmlpTGxkRGFnNy9iQXVJaTltZksxS21qbng0aEFTNjJyTjd0V2QrR2pmYURYVVY1V003RDZJSTIreDI5RHF3dHdPY1hLUDBKczdCTzUxdmlsbWxFSUl1VEJXbHhDblU1aElSejU2bFlFK0F6ek44Tmg1T0E2ZXRuS3psWmNTR0NHaUFnaDIxN0UyTCtHK2liOXZFVjlrbHVWZ3UxeDJqUkpoNlFrd2pOSFFwTDdzY1lSbnJ0V2FQc3BXUDQ1SUVOTTlqeTZuOHE5SkM0OWdyMXlkRjMrc3EwOHlkUURhRTdKV1ZiV1MxQUpkZ2JhRGYyUytYVDBLZ1djSjBkSkRrZGIxdk4xWXBJKzIzMEFRTHJDcEFtREsxQVJxeVVXMm9zZXdRMFpiaXlzbEZsQUR5dG5aS1FQRDNkeHFXYU9Ka0tFaFNyK0IvR1IwQXA2YWZPeS9qeE9GdmJoRy9ja2llTUVnQ3I4RW5teFB2cyt0QXFMRlhxZVBlS0NzaHkycFkrVTFYS0dYSHlLS3cwWXJJTHBNYnRXRkFnOFg2Q2JzcS9xNHlRaGlWNUNDVmdBU2NCWDVwTTFjUGdvWldNS3RhamNWRzhaT01LbTUyRDhsd013aFJ0d0NsQ1crMUFIOURQOVZvVlhndzlXaEdCb3FEdmtRQVo0cGFGUlhNbzNGd3ZnV0RScXIyVkc4SmNIN01GakRnS09oUXlSL2pVYmdrSDdJbGFLTDJGZ3Nxd1RCdVR2NFhFT0UvZXRJR0lyakYvOHR5bGprRDVpTXFJMURQWHA5WGtiM0w1SDRBQjEwSXhYSjNoY3RFWVFIMkVIMitlbm5uU00xUHo2LzN4NTJiNVZ5RFpIeFFQaktFYTlNY0ppNTJsVG5zdmQycnNBbnh4dCtrLzJscnZuRmFUZDI2RW1DTFFsQm1vNCtGQ3FtMGRHZkxTeFhxZHdESWZDcTBGUjF0YWNwVEI1a0ptK1FsUFBqMEQrMWkrTWc4ZWgyYURBU28wNDhLMG4zYXJMOHZWS3BSeTcvTnU4YXhXaE1PWnkyUVd2YWhtb2I1dG5YSWMzNSs2RlNUQlB6aUdXZS9Fd1huYnVxaXJXNk5RbWYvYitvZnBWRTZPa3pudm1LVXE2NW4wZzMrMGp1WXBIa2dyRWg0V1pUVDdFMEQzcWZQQjlla1hHQUJVRDh5Y09qTnNpYmgwZm1hOHBDYmhlU3Nuc2hkM3owYkZwR2JZdjc0MFhCdVV4eUx1Ylo0cUU1N1d4RGkvZ1cvVTJWUjRZclJRQTFWSFZEVWpKNEdoKzF5RGdSSFpiQ2FiZ3NhcVg5OHRqTUtaSDZJZjRDQlBkTzRZTnRNK2ExdzNQK0MxcjBYWEFvUFVEY3dwZHhCeG9JRXkrWTc5ZE1UMTc0NHBjK2hGQ0tCQ3J6anQ0U0JCb3pZNW41S0c2YXEzQzAwdzdjcmwvM3B4QlNnbWJuVmRxMXRhTGgwWHV5VW9kdU53T0lFWXpEeXBpN3FwZEY3US9CSHRiM0l6cWhUalEza3Z1SG00N2ZNUk9JSko3RW5WVGRHWW9QQWNvQnh1dlJVWFFvRmpsWHRwc0VMaWhYUEdhVTBwUi9UTWp2eFVsL1ZRcE9hbXN5WGZIdzJnQjI0b1pqc0pnZ0UvV1libUVEYjFZeGRPKzN1Vk5xdy96TlI1OVc5MVlua0pCWU5MYndFVTI0cTJlYUYxd2M1VjJQRGhFMk5od1dqM1d5ay9qMXM3YStxQ2U3TEhxNUZGSTBCS3JTdXFzUFdLbnMybE94VDFPcnNkS0ZENG5Va2ZGSUI1SlVqeFh3RkZNOER6UCtmS0h2a3VJMUpibzhpZTZET1N6UE1NQ3Y3Q3FqYlZadUNxV3FBMDJGc3VNRFVMOFdnaklnRWRLTENpME9FZXQ0TmpYb1UvK0c5U0MrNXNiYjZJMXF0L2lkSkhETTRtU0V3TE5KbXh2UHNPS2lFYXllT1J5Q0ZxcGFrcTVhcVQ5VXg0a0hvbWd3dlZZSXczODVGT2tubVI3ZFZmamdOV1F5dVQrVTF5eGpQeFdFUytFMXQ4NHhqanZiUklVKzlEdDdPMVllLzlXZFd5RnNnYit3U25xaUJWZkJ2SUhRb3NtNytFQ2gwQ0FhVXB4cEZMdHNKWVJtTzBRMU1oSmVSNUlkbWpXK0g4SllTQVMwYStPRG1aVW43S09vOFBIb09CRmhRS2NJMWMrV1k4dnV1eE9UL0JUeFFDQllycSs5cldGS3lsSDBjZjcrb0VvdW91Y0xEeEo2R2RmcGJPZnFRbWRxcjhlWG1SS0NtWFdmRGllOFRNK0dJa3c2NEVYVGxxdEVucjFGSDBYU2x0MjFDNHR3RGF6cDhBTkJrN084R1o5Z3N3STBRcmVLYWlwTDVnRzlGcEp3b3FqSE5DVHJ4Mm51L2JJVkgzTTRZZTAwVGdZRVFTbW4vbTd1bDRMWkZSOFBRS090TGMzZDJha0JpN3RrMkxPZTRBeTlVOHhVVG9PcFV5NDkwQUNyS05DSFQ4SDNSOEk2NnRJRHByNWtpelladCt2TllTRzdJWStTSDZEY0V5bXRuejBmWXJYTGNzdkE4WTNNK1RIMFdVTlViL2VIWERHaHpQZnhCM00ybi9LY0pLM3VUNjdERGpPNDl5TWJmUERPalFFVy84OTlqdEkyVE96K1ljWFdxemIyeTRtQWp1UEhFYnFxME9CTlRpMlJSelF0SzFnWm9oMUJ6Z3NqbWdXNEpEZGtvVTFnVW4yOU03VmVVLzNFQXBSUlFBYlBIcFFUYmRmQ2UwaWdNZnJKWHU1M3dTNDAxbVd0VitYUlFiYVVuS2ZzUEtycFo2cmZmcG15b0YyeURQaDY3eVhGYklrS3ZVUWlia0J1QnBhclRRZnZ4UFVtdnNLd3JPR0F1SFloU0RmM0pJOXFOWStDbHl1VmhWTHk2Q1BVSnlkUDhEOG5wdEU2b0psWUNTamlVWXlaVE9PMVN1SVc5R2hRMDFCSDRpN2pUaFhzWnd1VUY1YmQ2VmRrYkdEakcyTS9IYzVBTE5qeHdKVHc2YUlEdGthS3JRRTBJL2xvZUVWZ3FuRVZHSVYzMUlEK0tocDRxckkvZGlRa1lUWlJTWnltR0ErdmZSMGJwZU9BMDNJQmVYQlhORDl6U29oNkFISEc2c1VpK1NWR291WkZicDlrekJoa0M1MlNCVGpnVzRselNEeGV5NStkVkR0NWNIRUhhcGpEVFZIcWQ0aFZ0YjI2c0o3UngzK2U4MDU0Mzc4Y2hhNE9zVkdPZU5WZnlVU2JFSGJLbGhmTkgxcnEwM0JWOVYxc2p2UUVBOHR2SWQ5dm80Y1ppNUkvSmhtbld6ZWszWjVCc3VpL0ZLZDJRaTZYRWFjeU9SSHRvWHZqeklPbHc2ZTB0YVNlYzkrSG53TDRuU0F0SkF3TEN1MmQwczJMSEovMDNKS2VuckxCbzJsOEhaSW1Db05KYi9rYmM3THhpbkpLV0hWQThUNW8wNlIrQlhXMjQyQjlRU0Y0VnVvbkZUZnc4WjQvVmZEWnFocGpMcmtTdjRNbzNwRlpHQ3RMeWdRclJTaFVXeUw3M3h3ZWFnSFcyN3IySzE0dG85Y1gxSnh1elhJUXkwUG1DSWFST2ZxN1U3TmZZTzZTeEtHRndxcXBoVWl2QWV0VGVYR2ZlOXVFdzhnVlFVaWgvYk1MdVFJYVQ2SkFKdFdacGZtOTUvMk9wRFNGQkpXSzlFZG9sRytZSUxYSUxENGJURnlZRTRrMFQ5U3J1QXl6d0NwZ1FzK0ZWb1BWS2R4TjJ3SUcyVGZWUHBtQW40NFBIdENaSlQ2Q05VZHpwckc4akZOOEJWZFI3TzVGdENjYnIxMHZ0OTZtZkcwZWY5WHRRQ0c1Mks5MW1VQlFCQmJOaTZWT0xHQ1h1dnNUQVAxTm1pVW1zemJvNTJsU2R6U01KK2Y3YnpxR2tqSUtlaWp6Vm5Ed3QzYU1FSVJpUEpWdFBUSEhCRUtoWTRJa0VNUVcvZTV6SVRhRzJPVnBmZ1RNQk1kVEJmLzJRQUJBQm9BUUFBQlF3QkFBQThCQVVNQ0FBQUFBQUZsQWZoQUFBSUFDUUlCQVFvQ0FBTUFHVlJvYVhNZ2FYTWdiMllnUm1sdVoyVnlJQ2d4S1E9PTwvQkRCPgogICAgPC9CSVI-CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24-CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I-MTwvTWlub3I-CiAgICAgICAgPC9DQkVGRlZlcnNpb24-CiAgICAgICAgPEJJUkluZm8-CiAgICAgICAgICAgIDxJbnRlZ3JpdHk-ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8-CiAgICAgICAgPEJEQkluZm8-CiAgICAgICAgICAgIDxGb3JtYXQ-CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24-CiAgICAgICAgICAgICAgICA8VHlwZT45PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MVo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU-SXJpczwvVHlwZT4KICAgICAgICAgICAgPFN1YnR5cGU-UmlnaHQ8L1N1YnR5cGU-CiAgICAgICAgICAgIDxMZXZlbD5SYXc8L0xldmVsPgogICAgICAgICAgICA8UHVycG9zZT5FbnJvbGw8L1B1cnBvc2U-CiAgICAgICAgICAgIDxRdWFsaXR5PgogICAgICAgICAgICAgICAgPEFsZ29yaXRobT4KICAgICAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPkhNQUM8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5TSEEtMjU2PC9UeXBlPgogICAgICAgICAgICAgICAgPC9BbGdvcml0aG0-CiAgICAgICAgICAgICAgICA8U2NvcmU-MTAwPC9TY29yZT4KICAgICAgICAgICAgPC9RdWFsaXR5PgogICAgICAgIDwvQkRCSW5mbz4KCQk8QkRCPlNVbFNBREF5TUFBQUFNcnNBQUVBQVFBQXl0d0g1Z3dXRGlZWEFIMEJjMTh3QmdGaEFBQUFBQUFCQVFNS1FBR25BVDBJQUFELy8vLy9BQUFBQUFBQUFBQUFBQUFBQUFES293QUFBQXhxVUNBZ0RRcUhDZ0FBQUJSbWRIbHdhbkF5SUFBQUFBQnFjRElnQUFBQUxXcHdNbWdBQUFBV2FXaGtjZ0FBQVQwQUFBR25BQUVIQndBQUFBQUFEMk52YkhJQkFBQUFBQUFSQUFBQUFHcHdNbVAvVC85UkFDa0FBQUFBQWFjQUFBRTlBQUFBQUFBQUFBQUFBQUduQUFBQlBRQUFBQUFBQUFBQUFBRUhBUUgvWkFBakFBRkRjbVZoZEc5eU9pQktZWE5RWlhJZ1ZtVnljMmx2YmlBeExqa3dNQzR4LzFJQURBQUFBQUVBQlFRRUFBSC9YQUFUUUVCSVNGQklTRkJJU0ZCSVNGQklTRkQva0FBS0FBQUFBTW5YQUFIL2s5OTlIR0dBZWRISWFDdWZJMVdCMEFrdmZqZzVKaUJOY2FIdk4xb29PVHM5Qnh2NXZ0b01tbkNWRnVFdEtiRjhJNjlqeEs4RDFmTElLajZkSGlXb3pOUU1uK2RuMlpYZ2wvamF4SjBLRGdIdUJoRmg4Q3cyK0tCRzBnYkNxd3F5WUROREsyY08wRXVnNDZWWXZ3ak1qSythdElZV0R5ak5RWFlLYTMzQmxxUkM4NEg1a2ZBd1VYeVY5azNLdWJET0VsZkgyTnNmWTd3K3h1QTdPN0pFVWhvMzV2TmpKcm9rUzV6TTRHT2R4Yk1IanNXcVVrSWZKa3IzQmphRERTMGtmbWs2aVk5RjczUENKUkhBVkE2R0swUVR3M3ZlVStYandyL0ZkMXYraXVFMVdjcGVLVVlOZC9CUGd5ay9ScWlsNS9aQVRwQXBMbHVGWTZwNmNEV3hGZlQyaCtqbWhScy9KclBUTFoxa2trMTdEZXpwSUc1OVltdGY2aE4xU1VVV3V2cUdQWEVNUnFJQ3dWV3p2ZjVhR3RRM1o1b2hvZWxBV0w4cWIxWkhidUxIQXJIZ2xXcnFoV3BPbXZtWUYvSFJ1T2JuTEtramptVXlNVEZ5WFpZUitseHZhVXYzeTNvZHE3WThUTjZrcTBYVnIzU2JIb0lFSkFXWTlaSk9yRThyOTNwODNSUmsyZUFzbTlCeE1DMms1aWFkZTF3OGppaHZYTThjZ1hWM0RTNXE4cHE3Vm91dFlJTFlUeVY2bVBFMnlYaWhZYWUrTngzSmxmV1M3RUMyYXVNUnY5dThMd1lZWUM3QzJaaERsallMV3pMaXpjdjYrRTlMdUNLZnYvZkMwZ1F5YTErVEpJQU9XUHlIMzhmWnJMSDJhNFErelcrdGt5aGVkTVRKZkhic0VkZWlic0c5Y2RSTDZsaHlKcnY2MkpFa0dGMDFjL2Z6VWN3eEVzNFNFK1hKN09wNWdRelBYYXVQWnVoMUV1K24vT1lBMEZXMTY0T1JiSUVoNm5kY3Z3bXVBSy82czhKazBFUCtsdXNjMVBRQnpueUJwTWtLaFJhcDkzdXlCWm1VTjVXakZYK3F5SkJGelAzS2tWNC83dUhGdVR4Y2l5K29iS01MdGdtTzRSNXNyTHk4U0NVVlZ2Wmd6YkVnem5xOExSQjFVWXhYb0ppVUlQWmJoZExsMnlobHptQWE0eWlaUXQwVE5lajh3MjMrOTYya3JXOURtY3FLZnlRRnZsU0NxeUU1eFMwQnNpcy9ZNVkvZGF1NDIySzMvR3k1VVR1UHNlRExnOGFRNzloYlRXTmhJWHl4UHhtdlkyYUtjQ2NkSWNZQ2U0bWVBU3YzVnV5LzlHUE5acFlHcWlDQUJZUHl4Yk9UTFJnOEJtbmY5TmZyK1Z6aGJJbHp3ZXluZ3hHUHUzR091d1FOdVNWd2kybGRMM2lSKzE5NWNiSHV4OG9LRFpncVBpdGtlZ3hGL09YdmZsQStwRC9xUnBpNjN6QjBHaGlYVlFDZnkyZVQxNnhKOG90eUdxdUxtS0IzRksyeUJtdFJoc0wvZ0RDRmN0VlJYYlZVWEt4Um91SHpSK2Rjb3hWTCtRK21PTTAwRHBKYzloM3hyK2FEdkg3V0dxOC9GOWgvd0x4cFU5TDk3SzdnbW5RVUFOaFo2bjRUbm8xVkhwVTNOZUtiMGhWN3VXS3J1cFozRGVNa3E0cnh0OXNvN2RZdmEvZytBZ1hCdHpFMkdIZG94VW5VQWZwTXhoRjliR2dHQkJCM2IwVmhDU0U5eUJOM3NIdHhEU1dsdkV0dm03NWdHSjZ2VVUrb1lhNXFCTkYxd2loaEc4RnVVOERXeitqUm1oV2NtcWhGYU5pWFNCSmRGV2lYdFZnNGVRWHFHVi9zK3B6Misxcm1XMTVzMnM5Vk1yMzMxdUxSUlFRa0lUWXJvRzJyd3FMVkxVMzRwRklHV2JqQkh0TzhRVDV6WThabWZNakFRdUlyU3N6cGZsTzNqRjR0S3ZFT3g4b2ZpcE5EaDBkMCtsYzNPOGVGNFpubnZxR2JIMXJKK0dTYS9EZUpENVhYVTdTelpLZmJuc0JWZzY5RlpzYlRWZEhqckJONHJMRW5aS2JoMnoybW02OUZXWEpuWUVOY2lLQXJwakRNZTVuVWJOaklVSlF1QjJaY28xUXhSQXlBM1B5SGxHNmFqWGRVamV6blFLdGpDNTBoZkJnT3BEK3hYQkhnTnYzNUQzRThxSzFCcEpQdkVDTEtyQ1dMdkdJUkJ5VEkzYXF3d2hoVG5ZK3gzZ2owZGU5WkxGV0JFc1RaWHR3WmY2bHcyejNZaXluVHVKcXNaNlZjbjh6THZZWFBUT1o4dWRLajgyL3d1SEpubzg5cEhJenVvS1M0ZWFGcG1IYzFNN0ZFSnRXTlp1eXUzTG1rMk44L0wwNUFsT3VjTVhpNkgxcDdyaVNQR3NWN2VYaTRCMnZtRnBaRDZ5Zm9UTXdJNFR5Q1R1K1lHblRxOFRUOGNHU2liSk0vNVBUcnhQa0ZIS1Y1VTZldmlKYStTaVhCclRQdzNuSjJYUDVqRENERmdOSWI0eEdYU0pWZDdMYkIwcFhiSWRJeS8xTG44UXFDMi9LZE5wOENzSTJNRElBMExJdm5OZjFldjB5TTUvb0pPd0I3NFl5eFB0d0Z3eU54akYwbXpxYkxkZXJSUnRZTnd5Wnd6Nk94ZFBXTnFTOTlqWlBhN0tlWHVxTksrMmF2c1p6OStPTVJKZFQybDdNL254NWhCT013cnYwWnJqcXhQT2hGaUVjN2FzUDhrWktFSFJqWTgzUnBmR1hScjVmTklYL0gyK2xmSDJlbG5INGVtY0NGVE5xQm0yMktiSG9ZQWgzcEZOWVBRZkwvRVNiNVdqY1VEWmlGNWVIVlNOZnp2TEdQZzNIQ3JMWkxmOGVqRzI0ODhuUXJoakM1VklKTkxMR3ducndZQmtiM2RBaTBOOE1LV01MTXVRZVBrQTVCaFc1NFJXTGZPWlB4RlNLLzJaMlhTSG1odTBWTGc4RkpYRlZ0OXBuL01MZkk3aVRXTUdpaWN4c0RjdjhPMVRsalE1YUtuVTVpTVNNWVlwWVdoZnhxazA2VGhDWHVnMVE4WDhCTnBZeFdEUUUweUdqQkw1a2lYTUFINzBJeVpQWUloVlZ2MzhlYXBneXJpb013QXNxWG9mVzd0V2tyNFMvMGh6b2ptN0E3NmNIdzBLZGxPcENoL3pWOGxSZ1RpdEhlclVhdFVUVGlWMlVudnp5b2Q1MHVwbmI3R29uU0ZLOEFoKzFib2RoZ1hMSWdFLzBrd3pTaThkZFc3NXZZeUtiQ3p4TGVUU250OHB2UXFaeDRUZ2NvTm1TM05pRys2K2JmRkdMcnJDRTY1ZDhzV24ra1E4Wmp4RndjZktjN1BqeXBLNTBIM004YWV6ZjdYdVhzend0ZEFZNm5TQ1gzQkh5M0thME1VWHdUckh0cjlzTU5WOU9mTXhSVEU0WCtFWlRSTGhWbi93L1Qwc0t4aEE1RU91V0xxeE9manhMQnJTRlo5WmZENnZEVGEzT051Y3ByMTBGRnM2QXRPdW9SRWpPOHpFS1NjbWJCeE1IM213NXlGR2xhYmRBQStyaFF1RENYNmQ1d0p5dFozS1NrOEM4M21zZXJoL3hJU1FVMFdZRExWbC9jdXpXNTk2SE1QMUFSWHJSbWlNMlRhTGlmenh1anpRWFliNEVMeTF2THdaK3lzZ05oY1FRVjNzS0JtUGtjTXpwcDBEbGprNE9zemthVVV0Yk5vSzNlNFNNeW9iZ3BpaDlWdW5laGpLQldCWmNyVHVSdGRKbCtVT1ZkSHdma2J1a0xaLzRNMVViZWpUcjVReFIxTVRNaHlZZGdmT2xMZDJWL0FrOEhaK3o4YXZqNElFUWV1V1M4UkdmQkpjOFUwTFpETlBrSG5sc0dtNkJCY2k5eWNjejBacExHcCtiQm94eUdOMVB0OUdlUmYvWHk5a2VLQ0E5Vm5pcWFVK0xCZzJwMzlHSjdFSGpoVllENDdKMVJpU0hFblE2MXhvS0cwZlFQRzVrb3VVUllaZ1loZkxTdTV3czlPTUJEamFrL2ZPajZkUTBYdXR5WTRuQ2tXL3hYdFZjcnNSY20xenkyUFVSMUMxZVhJN1NnZ2tSQUZIV25SSVdPYjdxQ2dQbWpiZFBLc3QvWG5nTHcyc0RlK3ZzSVJjcGF0bGRlWGVFVGhwMmVocDRIODdIM1dDa1BoNGdZUnROWXM5N2lSWXBQMGtlaXF0dzVmOG1iS0M3V2x2SHJsaTlXZGlhaUNLRXA5RlJ5ajNCM0tzNmFSdzZLMUZIc3ZSVGx6ODIzN2F3YkhTSzc4cGFqY3FyUnY2dzN2ajdkamdLTkJ3aFNNb1pxcDBJL1BZdFNrQWhLVFFvS1g3SHVqK1hqWGh6TURUUjVNN3BMODNGYXRVbzQ0YW1vSC9qdGJaZlVCMWRlcDRMOFNZWGVuTUpEbit6L1hqQmhTTTd3MVI2czlIV2ppZzlhY2NaRVllUUZvMk41cVBadm9EcmdocTZjdWxra1ZjemRVdnZWdzZhWTU3WVpMRWlZcDNNaVdiWHNkUFFJaWFPQmYxTWcyaGQzOUpqcGt2VUsxRlVhSVkwUFZMaCtoVi9lYlBNa0hDYUVQUGkzcTN0ZURyYUczTldQaTJML0ZHbDZQOWpOek9oeU04SFg2MDEydGxkM0ZrakNYREVGNmllTFFnOXducDMybW9rVExVV1cwOGRuNXZuUGgyTDhvSExyclc1WVVDM1ZGZEdWWjFVODUxMG01cWRVK3ZYRUsvM25aZXhEd2c4b0VEL056Ny91Q2RHSUxqOHkrdjNXL3dBTWRNeVlEWU1OcklkZG8yR1dJK1Rpc010TDlqbHpTWGZQZkdOUi9YWURza1lHT284UjZJbmx1UE9kOWxrSnhPRFBzT2FkcDdDM1RnRnN0bDU3VCtYRGpvSm84eVdLQzBIUVByZG9PRm4wd1ZmY0czS05NK0g3UXlJWGw4WC9jMS82YndJVnRoZ3BpeXdTaWpLYVIyM1RVZSs1TEw1R21UWU5SVXBReWVkcCtrVmhGQkxNVUFxY0wzV1lTQ0dtYWVpOTl4cHlITWdhaGoydHR3dDdLTnA5OG5wL0ZQdUI5ZTBDaktRclNIdG9LNWxkV3ZnVUQyTEw0c0djQmNtQTVSUzJFcXpHUTc5L2RWL3UyOHZPM001L2M5Qk0wc1ExQ21tU1ZZamtpYmJiQUpoWUVNQnpzVlc4bTNnd0J3dnJwa3N1a3JPK09Vbzk4QUxDMXhwTWVJVllTTFphWDZWd01lV0o5ODJqNXhaV1ZiUS8xQVV1T2dRdkRVRWhJamZldllBRjBvZ2s2Q3FXTkx1V2Q5cGp4Ui94V25nQUcwaFFaSmpFVEJaNHBMV042RE1heTYvYlo3Y3YvcXlReU5CM1JSbkw5Q0hGY3BUd1F2ZmF0Ky9LaFRwanU2aFUvckM5M0RicjRGelBMQnZhVzVzQnZTMVduaGF5VVQ3VE9sSlhYektHZDZjdlhMWHRzSU9nTm9GRm92Y0V5TW0waDBwc1hiTGlzOFhObzdVRjJWeDZ0V25rY29aMVJacFk4YldwWVJHNnhDNWpndjhhdWVrSzBrWmRaWjEvMzROUGNvc1FSRkN5R1ZSakJkU3JScWZobFNqM05rYVJKYlVUTXRLTGpwS1BGMzRhaWtuN01VbVFHWFM3Q2JrNEZDcEliWVpyTmFKN3F1ZGdFTzY0SHA3S0RoMWNiS1czb2dUSmNWeUZTU2lnc2RvMVp0bGFBUWw4eUtHMVM4THJYaVI3aEZYbjBLSGdhYTN1UHZodGF1Y0ZEYU1Mc2xhTjNGcVNQb0JFSFcwQlB4WTh1dUcyQUw3VUVHbllMOXlqdG5TK0V5RC9jck40b3NSYnNJMkZWdXQ1bFFoN25WSEN6cHFyZmhON0UxMFJybWYrUkhDK216d1BlTWtOVUl3bjlSUThLRkxMTko2K3ZaNEtwSzlsdnQ5L01WNlVFZjk2SE9RRFBjNHI0eGpPVFVwRWtPWkRMSGhlUC85M25sZ2hmOFB3Ry9EUTBoWnBOZnJRaEhaUUZqYjVBNDdHZnVLVTlIOElqUndkRStwckRCMkc0b0FZZTRyL2NlU0NTamxGMHk2R0REVk04bjRJZWxSZENKRFNuK0IyNmxlRE13REVkSjVSMXM0UTJFcVdKaWV1VnpSODJTUUZObkhNMkUvTUtDSXNoL0VwNklZR3FMTm1STEJOOE1JRHpGYk9GTFZXMVZTbnV3TUZyTkZZaHRrdkZCdnQ5VzVjUmJqUHRmSTJjdXhLSnprbExwRnpwTFlITnZjSlA2WlpGMzgxb2lhYmxNOSttVjlzaXZiOWZXZDlmL3doMGVuTlI2Z015LzhiVkQrdHIzbDlPL0FXQmZDS0JDaHFLOGVoWnhzNG9LOFRPYVh6a1lHVTlNMGYzZW1zZUNSL09TZm11dHZsSU4rMkF2UGpNaFRncTdiSUU3THpMQTNMeGdkYVZVcEE2SVY0MkNQMUtlai9RMDJKRS85SnhKUkxodDRPaGJmU2lDaGk4bERSeFJrK1hCMENMeXpaclJzS0NNbnR6bG5Xa2FjOEt5cE51S2gyQUhTaUMvelRRWXV0UmdaUVN2VmpjcGp1OW9RNk5XTzBoUWIvVmZaZTRpd2NYUWRFbEJHSmtWTmNVK2tFWTJwejZrNE96Zm5jNy9UbDhHZHZZdEVJOXMvdk5XVXZ5UDlDem9rL3p3b1hvUDkrTWlScGNpS25HYUQxNFNKNlYzMCs0cy8wUEdRREw1Z0xUdHk5KzhRcnRuR0hjSGxzeU9FeVhndDJKVi90RDI3MnBXSVdPeEwyV2RFcWJVNzNpUTdnWG92VERHcTVRSklIT2Q0MmJKYVNrS05kUmZJV1NuYk5VZkYycDYvVmJUUEdENm9UNUhoa2ZHUTQ5bjJ4MmVwaVVqSmpPNENRZ0grdGtuQUQyK0o2WHRPSExtN0d2WTlqdGtQMmpPOUNYZGdNLzJYSC9mSWVMUzVwQTZiUlJpRXNWMWh1ak50WE0yTjFiZHVUaWpoNUpBVVdaZE5wMnZrcU41RVhLenE3VG5pM2MvWDZ1TWpqbXErVDJvdFNzQnR4Yk91Zkk5MDhwMEhzTXNDV1p2UVpxSnA4RnE1bHBRSDk2ZXdqbWZPbTFKaFBoeVU4VzIzNEQ4NElhZkxqNTFjRVZjOXc4MXl5QitDTUxvVHdBS1BGV3FHSWFKVkFVelpqSTh1UXRFOS9YQlZSK1cvYUVsc0xDV2w0VzRmTW9tdzdkZDFXVDJvWG1Ca1VsMkdkRk9vWXBNc280T3Q0VEhxcDBSS0VXR2RQSUFKaERad2tYUS82d3JDM1hPQUQwdjczeDN3YnZVSGxpM1J0L0Y2WFlNaG0wL0FSdkJmQkF6ekkzdnNLVVMxZmdRYi9OZENjblRrUi9tdEc4MDBYblpUSkl4eU1pTkVUU2lOQWJPMGxoaW4zVU5SZEdXMjFMVmRidWpPU01HL2E1OWFlQW1keExaV3BNRkJoM3h1a0l0Qnh6ckJzOWVnY0Rkblk4bzBvM05OVTBab0NMSStGci9PREZaT0FDb0QvZ2NPak91L1VPamZFaEhqeGdodnlwbnJOL2R2U2FnM0pBa1YvcGQ3ZHRYeWlUK0JjV3lvZC8xdk53SzQxbFF4aXlESWFLbVphYVR4WGdEUk85RTVUZjk2aEpZaG1zWi9WMjRVR0ltYldWMzd3WWhlM0t2UzVFRVpsT0xST3VmWmZGYzlXSVJ0WGNSdU5yOUNkMXpBeHlLRlRQK0VHSm8xdnlwV2RWL1FOcmc2S05QUFcweFEyWURRRnFqREFJY2VXcXE1cEM3STdEMC9mTitNVHE0cXN4WUduczNhWmI5NlR6WUUzL0FSM1hVaDhDNkdUbW0zSHY4cERKUXdRa1BUb3NSNTYrVzd5RmpDaDBOcVhudFl0NFk4QXhoMGFoRTZ3OUZhZ3J2NnVnT1lFQzBNa0U5aERwQ2VpMnBSaTM5MjZVOFFzSjVXR1FuT0V6NzVQOFlaamh4enVUbHAzcWNVcVRDNDJ1TGx6MTBZUEZJSHl5bys2RGhxUndReFMrZWptK1dST1JtN3dxWm1RWXZkZHY3a0xrVVVZYXZ4Rm5kNHk4Vm00ODRmZnZYRU4vZk0rMENtQmdhS2Y4VEhxVjNBUkQ5UUtkaVJHMG5GTzZiZVVNRXM3RFRpZndjZUJ3R1FCZXpuOCtRSHRhcWp2VU9qSXRndG0wTGRVbC80NndHSk1kUDNNL2FMbEhhd0Z2TGhxcDRoNkNibWZoMmRVUDRmTDFsbTdVSzFNaGY3aXJramtRblBXYW84R3l2WndNVGtZclRTTjBxcWxxR0VHMy92UGJEbHRCcXBlVTVZU2NTUzc1M2I3dnNON2svM2tBa3dlczBjS0NVS2NJZkFpYzFqZ0FaZm5OR01IVERjdmI0MGNseEc0eFEzL0phbkJ3MExHQmVDcFpFNTd1OCtadkQ0MGhhRFBBTU9PbFU1Z0pHb2xZUVVnRkJzM1R3ZGNFa2FXb29tRlZQa1hjYU9xUjAybm9OTk9yd2ZnUldRVk96alA1Tk5IclR4RVNzWnpQczZ2MXJNMjFUaCt0SFN3YlRpVUthWm5UaHdxOGhaaWZYUHFLMVlDUU5YMWk4RzJGKzFTVHkrU0o1cHJNbGJHYTZ0enN6U0J3Y1hJL3pKTEVLK2VTVStVbmp1bmtheFpHLzArY05TSWNJVWlXTlhCK2RmYUxPRC9oN242UjByYW4xWTlsRDFGc0labS95WXZqODhkR1RlR09HS1FVRFFuWC9ydWNVUWJuRzJIYmN5aGc0YzduQllSNFdIcUxDa0tWV25aZ3hmUGF2SGY4R1hISXlJaHRweHRDSURhWDNSbjZBbFN2NG1uSjdZL0NvUXFxVWVOMElveWJyQytVYm5jR1NHQm1iNFovYTM5ekJ1ZXAzUzV6amZNWWJaMGNEQ2VWek41QVd2OERZaU5XWXZ2dnpQSzdEVVR2VFJjWGVxVHZmRzh1SUNjUWYwZ0hzcEtER1VYOE5EekVuZElKWm1EYkhHRG82NWNqdlJwRWp4bTdBRnhjaFUzbWFJSGViNkhrVDNGSkMvU013a212TDJxbmhBSmsvelplbFBaTHNRYmZQQStDMDN4blQzWW1SUVFSalhzY2IrV2FzYnZqT0orZXR4UVF4TWFFdlhWQjk4NmRGU3AzTmkwc2x4RjBPUDIvUW0vdDlkQ1BrNkFUNTl5WS9iOUJuZlQ5WmVQazZIWDFYN2grMzZHVDl2cndSOG5RK2ZQdk1EMFRwRm9pdW13QXBVNzViMFpCb2ROenVITk1KNkhEWmt1YmpLd2htRWV0cGYvWGNzTm5adk00UENpaloxaTFOL0pnV3IzVmRuSVhNUk1CVVF5QVN1WGdyVHZINlZacWRMMzdyeUR0LzE3cXVFelY1Wlg4VFM2YzVSanl4cW90UWhLcm96dTVGbEN2QzZYZFhQV3VoR2dWRHlOVW5nMkNtb0tVM0FLN2lOWkhwaXVTaHdSQVRkMU1LQXFBV082TTloM0ppWFNNNXJ2b2tjbG03bmlwTE0wKytxdlVsa1VScGJYNEFnNUpQOU1tZUk2WWU3ak80MFdLaXorN0tDYS9MK2JjblhOMFZWd2hyMUZOL3hscFFiYmJWb3BEUDlvYTVaZmxTeVlnOWVheWZWRDVnQXlib0RLeGovTUVKTC9SaFZidWMwOFg3S0dsWUVod3ZadllhQlZ6T1VpQ3o4cndsQU56b0lGK1lpMG9YQ1RsSnlmNXpqV1BLZjd6ZEo4bm5aTjcxQU5DVEYxOVFyQ3FkdGI3RlFLMGNEaTRYZVozb1FKMU4rY3kzUHdGbllkNEFGRjFpb3lLd1l3MEk0SUZtYVJhQXQxeW1BNlFaemg3NTRjVUlQRnRDOFA2ZXhPa1pNUnowZjdMeVZYdW9OQmxrdHZlMUMwM29iQUl6R2VNM3FBMFZCS1ZMOGRoWjVmQjZNdEFGSDZPenUrK0J0WWFSSzdhQk8rNGdpTVJjVi81VXBURFZzeXFnSkZrdWNCYXZrUXF4QnBXRnR0VDFubytBQlI4NnVpVi9XMFk5R3J0NVVMbUFpMjJZU3VZNXo0bnNicUFZUVB2SElMV3lMeUY2RHkyZ0N5MXVMSENKaGlpSENjcC9WMTV1TjBpZXJ3eno3Z3hsQThOWlFkRnF3anVYdWo5cGlzdjlaalF0Zys3dHJZa3pVeWtkeCtkWHNydE9TWHF1RGNMN0VoMGVxa3ljRmNXT1YvU1FzcnFZZVN6SEY2bFEzMHFCMXZUbUc1Wmw1M0NVVkVUc2l6d2NYSGxoOW8rZUlzMFRJQWhsbzcvaC9TZCs1NHF5d2ZpZnlkSU1SdjB5Y09VSlFLeWJqMGc1WURRb3Z3a0FRRFdBeG9nSk5uTW5BZ2ZzT051THA3cVR4TTNMc0diT205RWhuRnh3WmVpWnBHaWdJbHFOUkxNNHRtQXdFaEp5V3RFaWhMNEFyWEFFOXBWTms1VmhkdUljZExLbktGOXFYdnRML1pibk9mbVJ6dGNFM0I2WlB4bWV4dVNZdmtMS0pmU3BJTzJKaUY0ayt2UWxFV2hsRzZ3dHJTbWZwNEhsR1lveXdWV01oakpLb2p4R3N4c2pObmo2WGpUWDVkY0g5SE9LTTdReDdxMkJ3amVFakU2QXlBYWUwSzRSQUdkZll4cC9JbVMycVA1YUZsbTFvZE9LSHRoU2ZtU1Jqb3dmOC8zY21KRlpZSDMvTVBRTE1ybk9obGJVOTNRaHJ6ekRYNmRkcWxSbWZJNlpQdE9RSkQyR0llM3hPNFhjcDJ3ZmdDNDh0emZrNmg1YkNtUk01c0FTREZ1UVNiSHBmVXNGV1VwY2NRUWVDYi9OWDB6T1h1ZURIZjRaVUFUS0IweWxEcXg4aURMOHJZNCtnWUk3M2VrTnlRUHJnRHBVNEZLYmpMM1o0WVQyV1dHclltbC9SN3BCTEZqcytWNU4vdG9ENk5JclZnMVpzcDNJdm00dklaRzZYOWtwNUc5SWI1d2daclJRbVZRTDcvYlV5WFFCVWNkMmhNU2ZZcXRGY2xtTzcwZmY4SWx4bGw4a3R6c1NEcTR5R0g0ZXZJdjQ3L0pBb0hpWlI1VU9nMjlxK1NzcjdGdkFZMU9ockxnSkc5VzhrRWFRekVheEtWdnNHaXd5TFpzLzhNU2JvUkxTQWNSa28rTVgxTXptamE5ZnowSU5icnRpVHo4RTh0aVRFK0VSa3R0dlRDYk9scjl4Wkw1MHRoYllrOGhza05Md05Majk4VEFMUElSRmQ1WFRmanViZDNvL2xoOHpxSlVGeEVHVzdsTVZwdHEySFFxcGorcGhLOENMSmk2bERmZVpPNmdiRXJmdXRsNW5nWURGZ0E1eTk0TFFoZ2hQVmFTVXpscVdHenFneVFQcVYyakc0bGlFNy9SZWx1R0FON0dUOWxsNXlzd1RDVDBkNzN4NDVId3JWbDRwQUhLb25hazZjNDZ2Qkd4WlppaW5wcndaYm53bStSeXl5TDJSZmhUN2VOR3FrYk03OGRvSDBSMzg4dVVEeUluRTZ6TkluWlUvZGNENTI5RTdxREEzRzhwcEJtek5MSGFhajdlVFRVeTFtdmlhYWxSSFpYbjcwdmFVcDhWU1lmZXQ0UitHR3JaSUNtaTVZYTlHbmkyajFjYkN2cGxzT3hlZDdoRTFZM2l2YWl0ZlZFcm4xL1o1a2VGUytEYTk4VkRPNzdsR2ZQZWhpWWZhemlsb2lDNmlNdmMvQ2VkTUszS04wYklUalBqdmlIUitqSnYxL1ZvNU1iVUhPM1JIZmRnWXhvUUpQMjdQZitQdGYwZDhlVldYdHhYbmY3N01Ubmw3Nm93cnUxOEFPYitaQWN2eGZ6NWFCQWQ0VHhqMjVoVVgxbFFXT2g4cklSdlRCaXpPeTFDVU1mUkk0eExpeG5NL2VQZUpPRUlVQUFyZ3ZmbnlSaFA1a2NNMWJ6NU5aZnkrdzdTRDZVV21LcG9xZ1dBUWdvV3pSZzF1VGlOWWRaeUVhdFhQZTBORTQ4c2xweDJLZW9iSGZmakNKOTBuTWZ1NVliVkZic3BVemlsY2RhNlZZcE5QQTJYcC9IL0t2SUQ2UkplaVNEQi9iU05xT0dVeWZvWDFHVU9DNnFWMTNya3JmSWx2RUIyTzJwbDczbW9vSkZHYjRjbnN2ckRwZ0xNMzJKYlNsSkxVQlFWa2dhbURDdXZneGgrZFFSM080d0c3MkdiWUxlM2VKWS8xSzlUWGU0L05UM2h1Q1ZhUG1ZOVJhV213NzZpUFhRbkJEOHlXSDhLSTh1SzMwd2Nxa2tEaVhaQnZZYzJIZWtHSEFaSUxQbWZ2eml1UjVjZzZWNmw0ZGl5MkJBMXZVdFp5R1B5eTB6QWVqMjdoWFVNeG5jS3hRYXZyK0ZBSVVzSDNOalY1WUZGc3BZTFhXSDdhL2YxclhyYkEvRWUyc3dnVnBsaGFkeVFoQ09PMEJKN3E4T0hoc01NWXJhVjNpRFdmNWthSWZteFZ3UUpQOXVCKzJFQXg2TUlEbFZUdGhiZk5KRlJBWmgwVVdwOUk1M0U2Q3dwcXoyay8zK2tHUHh5YVhKV2hjbU5IamNMU2t2SVFGbmlhVkUvWlZOcFdGS1JBSXQrZlBGMWU3YVJyQzdlaGUwT2lkQ2ZjWEt3U3NPTGhsOUl1VnNTQlBJVFRQQzdkZDNIaFpLai95ZEhmby9USjJoSlp4VGt2blJSMTJEbmtVUURMRE94ZUtsajVNMVVWQWpPbGF3SUVqMGRmUlhEZXR1dlBvSlVBY0JCRXhPMTh3VUdJaUg2Y091V1FCZDVNSkFDbzN3cG9qZzdsL0JrTGNWUGtJVGoyZjJHZU05c1I5QkdtQUI4SnJIT0xIVXRRZkVmRnBHaVNkQ3VKb0lETTVlSE94cFhVYUI3MFF6bDU3VHJab2JYTnZ1OGsrOEdXOFE0U1hTNklGa0t4UnpSZkZzS05mbUdWZVRYSWdEZ25DL1lSYVNIQW5wZ0hURWdjb3MxL1Jxck5BUG4veXhDYU9mOXFYakluOGNlZHU0Umd5Tmx1Nkd2enNoMllaZUkwWmk2bDZIVXNJN0JwYW4yZ0t2SmFNYnRIS0pwamtzYk0za2xyUzJ2ZHFhdUgvaHB6dGhQTnFpaU91SXdmUUVqTDZheW5EMDRLOWdDWnlqK2RrMk4wN3FOVGFneml1UkhkWHVFS3dyOHRoRUhOUlNmTTZZM2Y4R09PeXNoMzZhUjQvdVdoTzFSTUt4RCtKcDVIdFREVnZzRHNDZGRCSlZZWE5RekpGVGVzdG80S0xQRGRQUVRZUW1UaFcrN3Z6b29UNStPWlJVRmhtM2U1TjJRN01taHh4WUkzNTdiUUFmRzErUFFhbGVXbitSbmE5MUxSWEkrMExiRlUxTzEwODRhdEJJS0t5STZja0ZUVlRLZisvVGx5TXhxL290ZVMrZGtGVHkvMGhHZVJHc0xYYUpSTGpNb29XOC80MXZmT0xFQ1ErUGNhenlpWnhWTzRFQVprUklaUUthU2syUnJLaG5NS0ZNK1UySks4R0tOWVhtczVidVFidmdCbnRTcytYZlhNMWZMeENhVG5YQnYyYVBvaTlwQ21KTGswZzlDUE9YQ3JmYXB3NFQxUEtzZTZBelZrSXI0aEI5THdkU1pWbFdMdEQ4ZHJuM1ZsSHNJeTB3dk9WOHhVamZrOTlxK1JqVWtNa1RiaVZTNVRuVTZNVlhPUEVCeVZCM29WbW9GdHBUMDJWbVdOQlNGbit3aGxnMHFkSnU5QTF3cWZ3VHovRG5acmZEN0xNdEo0M0RzQlJHOXppN0ZoTVJtVjNJdEluSm9NYzcxc1c1ZGx3S3BTZlJ0VlBhWThsdjJPV0xNdS9yTmVGN3lybVM4KzZZZnUvWXZjcHplVUJnb2xaL0hSTi9UdnVXdWJuQys4cGdITEpiR0pBcURwOHVWOWNlMXVwRHR4UVVoUmdCRW4vcmMvNXI1ZEZEaUdBMzdwSEd2T0ZXbk9NazRPMG4yaXlIVnZGRTBjdzJGQXdZUEpGQ2ZnQXRzb1hpdUcyZ3lkNDcxRS84YWVMazJlN1NxcVVRNGc0ZUxHQ2ZmN285RWRwWk52cUJrQmV6N2R0bWo4aC9MNzYvdS9ZQktYNUhaZ05GOWM1cGxYNUJBUkhSUk9GVTQwaTA5RXZpMVhUaXNsWEpwb1h1TnNpK0pxWWVFZTZhNjUxNFNxZFBoTjRFQ0tLY21yRTl0UytTVnlFampNYTVWbmRPYWp2d0o2RSt1b0FqZ2FCejVocWFHbFJ2SnlsODhWMjhIdy9lYVJPWk1GejB3UWt0RFZra2NZdXd6cHpWdDlESGZVeDZmZXBzUkJvNTYrajhET3g1a1lrbHhvY05hWFlSRjVucUVpcUMwYXA5U0RKSXdlNElneWo3TGJFandhMy9lQldZSDNVN1VkcXFMMnM5dFN3eFRoSXVJTzhjTElQZEFuM3BBNEt6TFdDZTcxbEhDVjRGSXVFR2I3aExXcmpQWGdONCtKRmJ2Rk1wUTFmc2ZuWlVnYjcxSEhnaVVvUW8yOXR5WTcxeFFsZ1Brc2dNeFZsV1RjbjREUzZOQVQzK3RlV2laVEVZRllIU1l1em1lVFZLaHBSbFJnUUpKS3NyaGhlSEZUTXRaemZCbVE0dVNYVmhMbG5VUlJWSW1XeHdzWVlpZW1YSE1DbkV5UE8xcEtCbmRZV2c1UU9qMjBuc1o4SHRuVEx4Y1N0SkZPQnM4M0prb2dmUm13SWlZZElmTkFQNWp3RVZ1ZUorVkpiaTlXam1CQWgrLzJNNkZNT0J5aW83N2VYTFdzNFZReWRjZXYyR1dYWlduWVJsWEhLaHZlMjM0QlJDQ1JZL0MzYmdWWFNiL2VaSUxiQk1NTTFBeHduQjl4bzYxZERjRExNRCs4NnZrbXI0T1pnVXIvOThlQUFOdkU3Vy9oTHBrblRoSWprRDNDb3BVdWV6V0tHcWduaXpSQ21SbEZsZXE5NTlza0ROWG04Y2t0Sk1DTlBtemJCWGczVUplNm11QXFHRTZjWXpjWFREVlYydnAxRzZsQ0lnK012WllrdmFlR0pIV3RYWFI3V2dFMUFzbWZFRCtNUXJTQzZzZTVPc2hGRmlBU0l3cXhGdE43VHNkSmFWU2ptcXZXUUdSSWZjd1A1cFJqQnhBSWZ4aGZTbnorSGdhbWF1WDVrM3VrSHZSdTVORU5Fcjh0czVWSjhuRElCTWFxdDBlWXFMemU5MThOZkc2SkYyZzRDZzdNZnhleDdSL2h1bEEwWjN0V1UrbUM1ZzZNMzdsWEhxTmNKVys2TzloalBLck1FTU1NeWRyM1I0RnZueGNGUlJyNXpGZmNrK2hKaFY1SXVScFJOVEdORHMrL0FmK2REaXBVR25aejY0MGZmQ2xGYVBwZVFaMmh1UmJoRDMxZTJhQkZ1NDRBRzYwZnAwMXV2Wk5FakhtZHg5dmViWjhBb040ZDdVKzVGQzVVWDhXWm9zVmo1b3ZuaythcUpmei9RTjFoc2NVUjFuLzJHOHhZa0VaeUN0dnBIbkFlb3NYVmhDUXUyWFpHVDBKa2Z5Q0pyMXh5OCtVTGFVRVRCQVFIU0M2d21QRHEyV1RLaHhrYUVCUEdxWTN0WEI2cFVtWlI4RkFOSy9RYnNsSG5vTjFjM1NCSXI4aTZyVm83dldxZUZRNzM3NjQ4WkpadTNOSndORWFoSTdtRjBJL0JBcFBranh2czFMQ2NFd3RkWEFFbjdjdk54bExROW5rS3lpRjE1WU1vbDVCbTg3eFJaY2ZlaSsydGJrVEtJZ2xNdUlMb0RwUVpxNWVqekFBd0ttQXhSV0dsSG83WWhwT3FORDBHOFR5OEVqczRkTEdscmxBUUQ0NWZjUnJoUWs5N0ZqU2tHQ0dqVy9yZnpJWTd0QURnNjRXSlBzSm9GRFQvSVc3eUlHTzN5Y1VNSzVTL3hoa0pJbk9UYXQxUnM5NVVCaHRxQU1rdlV5S3Z0RE9oUmY4NUI3TkJla3lYN2lEWDFMdk9KV0xiSGtlcXFvNG5zQ0M2WjhITE9TdUppOHpCaXVwTXZLWkMwZWpXeEwvV2kzeUplQkMyVFZkMmRJQTlUOW90Z2d3TWNVNjROTHJxUnp1WFRGdXR3UlB3azhmM0xJUmo2T3I1djYralgzTlRhSC9mckxGU0NIUGlBMGhFc3g4dGYxNTJYejFwUW5ER1hWUnRvZ3dER09aYy8waUEzOWJBNnA4aXFNeEloaTcwaUhuTG5zdURPMStETno4WC9pb3ZxRTc2c2xQMS9VWHd4My9rVDlOOWtibEhhcm5QcmhJazZSbEdtdTYxd01kSlNBenQ3WWRGaDU4YkZZZkg4eGF5V0xZUlFpQk5SUFlJMFQyOEUrN3dlLzZPR28xRExhQ2J4cHRWNlhIcWJaK3ZmaDRxL0hES1FLa2t0U3B1bGxrbmdDclpJWkg3akFnOENUUUpYMGtIanhXR0RnRDRCM1lrZjhxWGREbWdaWmYvUldhUS9INDlFcEk1OURxMkJyZ01lUjdpSDNKdExVb1FGRmdldnhDRkgxeUcwTCs0SWVPRENpUk1GamhlQnZtZHZwSXNZNnZ5ZWdUWVhNVEpxTWU0QWIxNEcvYTAzQUIvTUlJWWl0UWM5ajVWTGxLUlc0SkMxWWpQc29idVNqVUQ2ZVBZY3NVK2pZZXdkQTVkZmxjd2VpdmtHOFUyM2hhN1paaGNOSmE3K2dHODFSTjRYeDNlQ3NQcmpHdEJXOHMwNWZSSStYbFplWVREellGUXJkT1cwd1hISzNTNXpQTjRjVUhjZmx2N0h5ZGlaTW8rTTlUK05IMC9ZVHJQUUhiRVV4cFBlM2JQU2h1TGZGMWdURlMwcGk0QXg0QThHWVFFeDRiSUdkTzNCcDBFWmRYNFpUajVxOGx5YUk4eXo5NWsrbW55LzhNYUlpV29PbFdiRHBMT3lmZEhnTG9HUWI1dTFmS1VZME5CNC9YK2N5TnNBeTY5OENiMjJDL0ZvYUZyOTg4bll3b2xTcXkvT3VHSzZrcThnbnVRWEZ2RDBSRWZYWWZSQ0QrN1N0UTJDR1QxQzBHdjFMVml4eUd1aElKZmNvTTNKNUM4SVkyL1ZkNGRJMGtqTlgxS25Lbi9BR0liVVlPTHVlak95TzdkanhWU0YwRTdKQjkzVURXSXdrTUZ6amM5N0JteUpwczlaRmJ6MmFROC9oMG8wYUJ2NTF6TEh1WmVCZUdYQXdIcEh6OW9reDNXRm1VN1JoelJadVNJUWxYR1hjajVJcER2MVRDazluc29USkl6QnlSNnhidXJURW9DZEpudG1idkEzL1FxVGhicWhaL3hXL3JZNnhFWkNFNnZRL0pGeVN3SmlFZUU0VTdyUFFrNFo4U2ZtdzdGOE5mL2c2SlZ2WlRmTW4vY21SZTBwNnRVL3c0Mk5ZMURhaDdjN2RWQTZpSHRkWk9BbXF4T2tBYUJabVNSVi91bU5HTVlld3V0NXBta212QkNzMjhHRzMrL2FwQ3NUaDVXUVdOelozUzM4SG05bnhFd0M2anFKUkVsUy8vQTNEUHF1enhHSmRMcmFidHF2b1F2cFJYMlIwNlZKSHplMlZSVzJnNzJhRDYwcU9GcXVTZ1F1cG1sL3FiUU1kSkUvSEx3RXlpZjlZSHpYako4c0grT3VkeDFYajlsMGNLV2ZFNE43SFlPSFQ5V0dXbHI1aEp0alVXUHN4L3dRcnFyc2w3LzRKQUpMaWdsb3llUFhleUlXTVNCUnZGVkpnU0NnOHNZd2krbzNoR0hZTFpKMDZ5OXJkRFB2MVNjYWZhVHlQUGFnTnJybmJ4aURSazR2TjlTRmorNjNBMkx1TmJ2R1VyTUNRQk40QzVUSGlLTGVYaDNhUzhhbHFTTlFKRzJQSTB2U25FcDIvcEFvTU1CVkpaRTRBYldpZ3BjcnpQVEpUVHhpREVlTGE3QVozWXQydEI4aHMvMlAyTDJDZkdEaWJKUnV6WEZUbFpEUmxQT3FqTTB6OWtXeWZxT1VTeFhlYUNZUW9zMlV0TEFTc05hWDRKMW1hcFBKR1RlNlZzcFRBbVVpTytOTFRBcTdzWmJmYjNMWTZBZGtkek55UWo2QzdKR0JXV1k0TmhyOXJTVFlHZURkWU1vQWpqQVdmVXM2Z0ZmTHVnUnJtYnhua2RESVM4V0svSzZWandWVGZjaERpdHRLdlBkdXVWN2VUZS9JZllORlYwQXV5NW5vSytjeFQyV2VRaEpVV0ZOWS9mUXZyZjluUWRSQjVuZUsvb3ZNbTR4TmI5cXNpN3FvMDN0a0J3cmQ5WGN3VkZmYmo1S08rUC8xU29vL3JwdjdLYkJLcTFOZmQ4aHNqYkZrY1hPZ3FRTkwvSElFdno5NzNQWTZZaGxHd1hoa3M4TWdNRXZNWGpySWVxN1FYaFkrbXlGNTE5K0dZVlpTZVUxL09yckpYaXdlbnRnenVKcEF3Y04zQnZPbGl4TUxObEJaNEYwUmU0OWt1SGUwSmFEVVFpdm9KWEJXVTc2RHVmNU9nREZDakNwdTd2dm9XdHZ6YUpORWhyckcrajFGYnRKSlJ0WGJnOVNEbHVadXNEM3pPWFNEU3J3MnEzdTNMc3JCRGwrSkdSb0RzU05oZEFmeVpuZXZYYTFuYzg4SVNMeHRGOE54SzVyT1gwTnJGTnNHVVBVVldodzNQQjRmdk5hN0x4OHh1eWVuVCtFbGFyMEZ3VFJaNEJHc1M2NFV5SzZ3aE9rTTdja2lxS3o1eG9VNUMvdjkwZzdnRWIvbkhrVEdWU2JZSjNMYjVWdUY5cklGY21NRHN0dVF5TGh0TFNaaGxIY3NlUTZlaENpM3pXMHIwVjUvMnZkVG81NHBDMmNDYVVINk5GZUFWc0dTZW52RkxaOE5TemRUdkE2TTNwalVWTWU4dlVVbTBqMFpoV3ZHak82RjhkSktNRVk0QlVXM3pqV2Y4ekloNWdRUXJiUVJNdDg1YmN6cXZ4QUh3L3B0dFRUYVlYRG9VQzRkL0dMZWdkY0ZaSXE5VzhqK1lsSmN6UlZQOEFZVTNBd0pHOEFYV0Z2MUE2bHNyeDFhc1pYZk5BV01EUmdES25Fd0tWMzIrdjFKVGVmbS95b096YlJKWkVWbDlrZ000T2M1UGM1bE54VmdkQ3VXUjFRaG12QjBaV0xmMEZFODUvT1NxVG5rY2laeW1EcFlYVHYzNElEMExmSXdPaHBUL1lISjZmWjdQMExaVTlqbGdKdlVJNXRaYzFmbU9TMVZ1amhNeU84R2F3SnYrQU5pME1oK1g0ZUVDU1hnNzRSZDFHWTM4dEV1SlZNSzhhbWUrc0NPVDgwTisveDB4cncwdmwxdk1oZElPNGRac2FRc1ZtVWxjQ3I5VVVIZTcySllDVW9rWWZmdXdZUndSVkJxVnpCbWJhOTROTU53TER3OVRiM1loczN3QXRGLzQ5U3FjMXdzQ3ptNDIxd0dLT0pTSEZ0MnRSV3dXeDk4dDc3V3FWY0NHTG43c3VoQzNZeWtxSURITEh0NEoxZ1pOYm1BeTRKYk01QS9TbWoreEZ5MGNmZVlZVWNxT3pFbXRIUDUrdW90cmVNdTJwd1pRWU11QmEvcDF2bjAwYnhlanVhYTYxeE1KNW1tQy9aQ1Fyc3p5QjcxcDVUMWNTUzRHUTdmMXVqcmUveUhDdXB5MnYxNDZuRFptSldCSTEycHhZNmw0cDhMUVZ6Q1pmS2lHWkhsQ2pxN2FaRUczZ2xxcEVFZWh5Wmh5azhuVDlXTzdSc0c5bkVPWGVucTY5TldQZzUwZ2pCMVFhQjdQT2JSUmxvZDVCcGQ5anRqSTUzSDlzOHFqaEF5L3lvMGZXWkVtVWlJbVBWZTRZcDE3d0szWG52U2lmVC9nU1NNcWNkR3RPeUdNYkthSTA0WGpJMVAzVlU1cFdib2pBVjV5M25Va1FvcTZFRVh6bXA3c3BXWVlkNXFzcDBjSVJwaTRENzdFdFViNzAzczJkaDg2MzZwaU5sYjUzRmdCSWJGZFZ5a1hOQTRNN09sQWdkZWRuQlZGZzZxaC9rem5PU1I1MWFlbE5vbTZVdXRSQ0w4VU16MTFXTFNVV2hqdGx4bEdSb0s5ZHMrVEFUVE0wc2FUak5VOXJDeXdxQksvWmNIRzhiZEpwUEdhQXYzYy9XbjdkdTUrN2p6VlQ3c3lxMHE2dW9TMUxGWjRPNjFKRDFJZjFraC9uekdwcW4rVVhWYlZFTlZMUVllMGRvMXZBYVBabmVZa2wxUW5MMmk3WHl6RkxWQUhZcnYvSkRBUFFLYnRqbWdsdG9Kd3c5QW1vSHdjeGc0U2dHemJaNlEvZm5Ud3Z1UGszcHdoTHNkb2EvSENGbUMwQlNoK25mOHd5OXppUGJvRWRiajdCZTVQblNIQU5NaHRiNHdFSm1RUUw1QTdwTThtZ1J4NjROM0RzSlFlcURVZlNrOExiZFY4dEMvZmlHTFdWclZDN1EvQUp2WkhoSnZiNHZRa3FyM3lUVjlIeFU1K3pJZGt6eW9CbHNkZ1FLNUh2ZXl0YmFsOSt6VUs3aVMxS1AzeDBiSHJTaDh5TXFYdjRtSWxFQ04rSGNlK1FoZFo0QlQ1MlEvamUwZHc0NlRCa3dkU2Z6S3o0QVNya1lFN1ovYXR5RWEyaTlXeVJkSmI5dllab1R0d3BsRnFCNWxnZGpLOEZhZE5ySzA3cWNad3ZkUjhjMnAzWDJEWjEvRXRtSEE3ai94dFd2RmRzQXM2L01vWTZleDlGbFd4U2FnRWM1WTVGYm1aQ1IybmhGa2NlQ2w1N0txWXF6L3BDaHdpYTd1amM5WFBlY0FmemM3cC9nYVpLeGZlV0xPYmdXdHJJT1QrZnc4MEpXaTVDVFd1Zk84SkFKWU0yb2t0RDN1d0Y3RHB5Q0JOU01Ed2JCN2dWUUpOamxyUFZ0MENyaS9USFdZSUdoczFTUEhjaEhkOEhyRWYzSDczYWFVRElSeURqcjVvNC9Vc3pWbWppUWZhTk4vK1pkbVExbHJVelh5M2VocmdHTzJiWmFXZUw0UTgyaHh2anRFRFZiL2c0djdHdC8wUlZ6aW5kU1FTRUNNUjFYSkppbGRXVXlKMjFZaVJ3LzdBV0ZwOTJ4THU4Z2ZuNG5ZQVFFc3A3TGJVeG0rdUczNjMrY1d3OXVydW00QzFWWHlDTVdVRTloS1hPODcrQnpZRWdJbXlydVhoYjBXK2htYmIvdjlabFlnUXI5MXc2U2ZNdVJoN3c4Z3QvVFVTRElZKzhFVE43RDg0ekNsbkdIaEhucXZSc3lKaFdPbG9lR0ZxR0IreUg3NnRpclJtUTdmbFZLYXp3R2xzbWNZVFJrMkV0SWx4QTRNQng1MnJGQzNJUHFrWWhOZTJ0a0J1VmZYTllURU1JcS9UZWRVay9QUlNpcWZ1T1dBM3ZyV1dEeWtTaGlsVnNXM2thclZYYUgxV1Y4K2U2c2FRd2Y4SUpycVowMWMrQTd2VVNJRGY5NjFRUUlRcEtYMUdJOE91dmtNeUkrUzJFN2RGV3FJWVVJUkw2aDVjTUtEL2JLSEhpYUxGUFV0S3U5RGo1ZmZXT3A4NGNBaVgrRzBneW91Ym1JSHpaTE9PWStkWE1GVklHdm92VEJTaWtFTXhDSlhZQ2ZqVGVIRnlCckFsRjUvVkE2dUlwS3V0SGlZSjBqRE9YQjB3TkJ5c3NFNmJZZXZUN0JKZHFyRndCV0EvTjVXS1BlVk5pdXZ0cTdzTG1OQ2c4aUF6amtXZUk2R0hOZ3BnSzY4Ym43eWRFa3dqU2U0SkpCdDBiRGc2STk0cUR1Q25PYmVsMndQbVlCQnlEY2c2Z1dhWEhwUnlVRHNjbitpV1FRb2lmZTlOa3B2bUhrbjBUZ21QUStVZFV0T3J6UEx5MDJkTThUMEZodU9aQlQwb0xGTkxTMUQ1YlJZYlExWEdZOVdDRHI1bkU0a1hDV3FFWWd0a2xDa0NmQnc5dWxLNWk3ZzhXU2VUcUlYRy9XazlHNlpiRWtGdVZxYjFaeW9zOXlvM0l1ZlRxRG9YMk0rNWlpaEhyTWFpYVpCdWJKUFlIdWFONjBYd0wxcUV0aElrOW45S295UDVNMWtzZWJOdnd3ZHZ3enlUYW92Z0hJNzZpSks2OEpjaFBrMDB4a3hjOENWUE1Feks4Wm5sT05CUmlJQ3dMMG9wcUJsVEJ3aFoyOVFYTWdNNTh5NnVRYkp6OHNENERMVUhwWFNBbWU1NGJwQ1hCSmlUZldsb2srNE9FejJTWndDQnIvN0JGU3p6U3pXNThuQTBNRUwwbVZxQk0wRTVWUUxJRDFoUGZOUHRQSEpKM0RBN3RSZVhYWFlqdk9uR2ZMQ29RWWk2elo3TmNSTUx3c2IrZGc4c2ltdUNjZHY2eUFzUkZkL2h2ZW1mK2N4N0xISEhOTFJyMXpLZXNXaUFPQmxFQjhIbXVsWFk0RDJWOXBGVVgrY0pwbE12aHBFbkZIMUdubUZ2WGRaR2NXQzE2dGk2NzVPQVV4VzA3RnByUEJmMzJscE16WjRra0JzeEUxU1dTQ0IxVUFJT0xINDVTOWZNUkV2MzFjRUdlK0NkTi9sNEdMMUdRTDZsNFdvVTdoaTc3WEcvZUN0R1hWT0daNUJwNE9zdmpMTnN2ZFBHQjRJOCtrYWw3WmsvSUtSTm9hVk5wc2hBbzhzVDVQdmlQSnNiL0pmRGVyVHZMN0p4bWtQa2ZyNWxHdS95OUwwK0xjVUZsQW4xYUFWRmpSdC9BT01JcDBTSFN4bFJ0T0g4Mjlsb0Mwb3B1dysrS0VtSzEzYVM1NEttTWp1Vy9SQ01uSTB0dUsvVWd4R0JFcnlnS09VNlUyWlhERXg3eStwa3daOEgwMXZGemhXbjcxRU5VK0h6V3g2TnJSaVVWZDVoYi9Db2x0R0dFK0Z3S3VQbjFSOXJXYXVYcmxsSzVyaTFpekV1NUdLdWZIcmNoM011aUdBYXRGeGEvMVlTanNzZzVoTmlxaml4bEtHb0FGczRIVFhvTEw1MDZlUnEvVE5POXJyZDBBazlQQTFNVjlJQ0F0R1gvMW9pNll1TUlRa2o5ZTA3MUhCWlhFZWJISGRlZk5weHJOVjBYQ2pXSnh4ZWZmNjlvMEM4ckk4TFk2WndiRlFhV1p2b1B4alRQRWVzZmU0OTFNMlZGRjA1NUw1WVovcnB1emQyZ1RudURjOE9kRHNsTG1nUmFla2FwWWxuT0VkVE9XcVI4dlZ3WHJOZVRYNS9oQVlEMFJuNUx1M1llL1hWQkVoYVpoMGtrQ0QzWEhxalBVSXJ0UytPanZJcEsyYStRNE9sWG0vN0crWENzZTVycGY5UHJCbnhTQnprd3J6SmJEeTNpLzFJRTdSTEkyTmVBbEd6S1FqbXFlQmthM0I5TEFJUzJMdFYwU1pxRlp3MjJoQVBLWEp0TUI4N05lOEhTc2dHbUF2dnc1U216UEk3MDRkMVdQY1c4WWRLZkQ3aVc0cEVWbUh2WGJ5allxMW9uRFhTbXNPUGR6WTh3S1BaNjl1emtidVIweDdlYldTRnJxNEU2WWR6ZTF2c3lMSi8ycVBRZ1NIblY4UVRRd0tWSksydUxQNm9SKzNLT2VBRlcwNWVMalI4WldLSnpWRzhzcmV4S1VPZSt6bVVDdVc0Y092Unh0eFgycDhkNXc4MENmV3NwY2NtWDNyRldSTWR3VFNBMmlYcXFsM083UXV4R0plVUNwMzdEaHUzZjIxL2FxQVZIeHdHNnJ3MnlUUmtvWGc3Z0NGMGtJYnRaL2V2dkJGd0ZFaGd2YjJJejVKWXdsTWRJTnI0VUNGS2NNcnBxc3I3am9leEUrU1I4TjlrK3l3WjRvSCtEdnNmMko0ZTE4cmNzTWdxOE5IcnkxdVdySmREWGgxUktLSEpRWTdSRzZMWXl6N0JYeG1NbzI5dDVtNWdyOVNQcm1IbGZDM245Y1lqaWQ2QmFScTNXQmdHSWlzOEpOTEZPbk1HaUFmN0p3ckxSc1I3eG5pc1FlVStGYTJWSzJIWERKMGxrOEpNQ2FLUE9FNVRUcWtCbkRpTjlWOGhnanp3RmlqTjQvUU83ZFVaNlYvSkR2QWRmc1NNY3paMyttZEl6NDRFMlRLQzBsVGNTWUpZTTR1THBFNFNVcXhDV254SFQ3Y3h0WWo2amJCVlprK1NUMXFiYUY2WXlPRmJzdWY3c2hiOGs0NkVWZUpid3JyUUg0azZ5K1RJTEZqbHZIMVRGME5pU00vL1RFVWMyR3B1cDY1aExhSVNpeTBnRFhMb256SExaNk1uelBlcDd1UklBeDFTTHBvb0xDaEk0b1F4cTBjdFBTcndNRzVRYjBZQldYSzRXc3VjVmhqRzY1bWtmKzA5bGI1ODM2M3RENzhxNjg3OEtrUytycUhSaWMyRGRET0ZOMUdFYk9vOFdTVDhhWU5kWmFkaHJjNWtTOXFQd1BpWXphckplWmRycWx6bEV5TE91dVpUeCtEcTkrZFkvRUROL2dtZjdqU1VqM29NZnkxQkpRTFRxL3JHMDVKL20xT3JURHcyVDdoTGlsZUx0QVJPL3hhTk4xZ2VvM2owb0djRUhZNmo4bnZwMlh3ZjhkeitxUkdJUWNJNlp1YTRBMGpnK3Juc2JDSVg2MEJML2FOeVh0S0tvTUl6b3dVNFlyczRlWFNlV3VhSjE0eXFLM1FLL3h6dDVha1lVZmZrM3ZNRjNYZ1NteEcvZ3RFUk05YVJ4S05TNjZSblNJM2ZuYWFNUFZoR0J1Y0s2dTRrTG9tOXl2TnhNUVJJdy9IVGF3Vmt3NDRxTGhROTQyaDUveFRWQUw0dXVKdkV4ZjhXRTZQeWd2d3E4WFVVUnptaEp2UGY0MCsvY2JOOG1nY2M4aFJ0L3lJU3ltckhleWwxV01sM0IzcXZSbHQwb0dvL2tvdFRzaVQrRGhvR21FVnZVQW81anhobEhmYWFidlNzRWlWQkNScVVFN015QTZMN3dFNHhnT0haNFp1N28zQndzdWIwNFBXVFM0MmNScGR4d1VuWWd5K3o0Q053ZGVGNmpUcmpGMXpuQi8zRVIrdU93d01yQkcrVVF6Q29oUmw3bDZmcVQyTzVmRlBXTXhVdzV4SzZIT0hxMEdFc245c0FFa1JzVkpVWXRZYTI4VWEzcjhYdHBOcFd6bTY5ZGY1aEdvUWZ5QXZCanlUVjlBTzN0dUNKYlUzcWNiMC8rU2t2bTdpb0U2TkhVTmNYd0hmVFRiU0JWZHArM0RpdWNzVE56cGxScks2WHBmSEM4Qml1NHRaK3dHSHdOZXdScUxORkJUZHR0bC9LVkpoSUVJeEJhcFgxTnFOMU4yNHVvbG1HYmVIN09LOEpwMi82OWVDWDJtNGhVemZTK3RtZnJhUTF3ZEJKSm83VUtPU1piQ0FIcG9Qdnk1Y09oa1VKUFM1K21MVzBxNlJSTXRqRkRQbE84cktFRGpwUUtRbktkQ3dKRVViS21qcVUvaTZPM0I5eDZGUTJjQXYwRitwRnQ3aHRYV0gxcFVhNStXc0lsRzYrY0w0K0lJbzhJNFUwN1I2S25WajhyeVBUejNJMlJ0anB0Tk5LNjRuUHVMUEdjZnpGU1pzUHEyRHdnR0M1SUNJU1d6aVczSllHYVVLSHJ1eldFbFp2MSs3Rm1WOXN0N0tHZzlNRmR6YXRFS2NnSUJsdHBwenhGcVFaY3VjSjBhbHNvNjVlbWo2eXVUQXJZQ2VDQjBBcGt5d0diOG5VdkNFNUFjSEdVZWZvSFMzcHBNZnVHYXhIejlUNGVhZWlMVXFWRjdKZ0FGSU5SamRJU21ZWWdDSUUzeGM1WCtyN1I3aStsNjhLZ1pudk1YY3hsZ0ROWWdPUUEwUHEyejBOT1U1ZGlWUVJXdGtRbUV2OWVQbi9COFZ6SUw3cGdQSmtuQlkxVTJsNWNtVHlGNDRyY21UU1dLVGNUNGxUc2tnd25aeTRVMFFQSmZHdjl1REhzdVVqcHVwM0lRd0JWeEQxY3pucWJ0NWhEbXk0MXJ3WXRtanJjTE1wcEhYKy9WZlpJUGxyY3k4bEFZaW14RzNON0J0cCtBcnQ1WkhKWTUrcmZJZmRuajlJT3NBRGlJbUdud1QvR0FKQ2xYQk4wd0M2ZnVjYnlQN3BQUnNRcFpZYXZ5SnY5OGFPRDU1RElqSXZSbVlVdU9MSHlDZU8yMVJLOFB4cVB5YlhJZ3NqMld3R1M4NUpPZXpTWlVCUVRhVC9RTXcweWhTMjVvbTJkcEtRb0J0TCt6MmJQdXVzTHAyaFU1Z3g2ZUhUN0g5c1JjWEErT2Y5OUc0M2x6WGZ0c05weVlYcTNzYVFxWkw2dUtqdko4SVp0M1VKV1B5R3ZXWEc3SWJGbUFVSmlkOFc5R0RBNlJMajZRWUd2anp3ZHdKTEo3bUZsOFhjUXdPSDFpNHFJSEx2RSsxWEpUNEEvd04rUGVEb1RtMzJsVmE0d09aNHVrL2E4Rzl1bDVsSkd6UnlQQkJxWmg2Zmc4NjY4dXJ6VzRGekNoSFFhaUtnWlFoZGNvRFdWUnZSRWpHVE9wamdlQ2UzVlcxMVYzSEdEeDdhc3NnS05qalpFME51NlJKa2RLNzViZ1FKRXZONTVkZWhsem9hQzBSRnhjR0xQc0pOR0VuRnBRUW85cVROS2RCYjZFWkxxZjY4NXdhbFMzak9iLzVNS1RDYnhkV1FDd0JhM0ZUQ0NhbXpNK2Y3RUNYRXlTWFIrZkQrS3BaNS9sMDc3Tk5EVXd3Y094Nnl3UmRCQWwzZ1RINUNUeXQ0YXhsRStvOGVNb3pyeVNZcTZ1dVQ5MFNJd1NwcGJyc2l6Q255V2ZCSSs5OXBhUzR4SG5ESXVFR1lHUHFPNmIxRWlULzErekhMUFoyVktHQWxUWFdQOWVFMDE5anNpbmV0ZHV1bnE3RW0velhjMVV2NWk0czVrZVRiZDREaUVUTW5DRkpyTUs3QUQ2RnJHZjhMVmtpZk5JQU9oVzVVTTMwdU41cE1XcStqMDZGTHlWZlZCckZPNmZXY0RkemFJSFgyZVU2Z0JYNFY3WW1za1Irc1hxK3k1ZmdvNjZtL2ZaUFpIQWxOUXZrNFlzNXBueHBLbFFxOFVsbXA5SE15dndHZVdETTQwK2hxMEF2Mm5YMTJFRkFEOHRsSTBPQTB2N1lpUkZ6R3I0ZUtoaklRVUx5dEF6NnVVbzFzYTVXeUFJeFJyNWs0Qlh2NXZRcHkyRUtQUVdzKzZCeXNVd0F6VVJhdk9PNk55Q2x1RmVYSG0zeUpKc0dvQzRUWWRUL2JKOWh4aVlybmMvRTB3RXN5bFlWS1grQ015ZDlWNjMxTlNERlh5SnlpTzVrRkRoSCtWOTd5QUd4c2Q1ZTYzRnU1aWIwc3lla1I3VkhGTVZjc1U2MkxPd2ZEakh5YVVneDRyOE85dVg5cVcxZ3hic1R5WVNNdzduWW5neEpaV1ZKVjJoL2lrZUpCTjB5Zk9TTENoNzlKeHp6a3c1OVArOEFrSy80U2NMeVVPZEMvc25Jb2tKeU90cHYxckFkblBVUFN6eGtEL3VlSlFMR3prYUl2NUpCemo3aGxUZWdPRkR1N21yVGhmNVlUNlFQcDFyRTNubmd4Mnk2eDFvd1BKaEhyMjRJZXZobDZEMXhzbDY5NU5XOFNNYnRTdkVZZUFKNnBpQjdOcUtqa2dYS05KMW9mZjN5UnVDTktkSVVYSEZ0Nm92Y0RZcklNSHBKWHJNenBzSVRaOGorTDBkZFlxWGs4L2xZMUFXT1h3WUNDeURHbFpGVlBpRlFmaGlITFg3dWlRa2pYTUhkeCt6L0xpT0dMbDJ6YmZUY0VZNHJiTTVuNFd6bjdTNU5YcCtJeW9BV282Y3FtTFlENUs5bW9KWEdPNXFLRnIwd1E1anRuSUhtMldtYzZXM0JxNUp6d1UxbE5weEpvekF1SEVWcXR0dk1oMTNVZE1qRzBzaWFwYWJlZjlJeUpWV3F6OE1BTTRtZkQ0ZnFBY1Y4Y3BLOVZWM0xlL21lMDA2YVJ0SFg3d0g2YUxhWVFBSTBKWkR2M25VS09icEZSNGczK2l6MXN4YzNtWWdPOGJuMURJenFLUzFkZmVqVmNlWkdqQlpmWmdmeDBNS0ZTOFo0Z2hVYXYwc0hyS21KN1JOOE5MK09CR1h3d2VDQ2V4U2xKcUo0VzZBcnY1eHhqY3JpQ2FrR2tZUWdkeXpVK3VobXlmOWZTUGR1Zjd3UktEOUxHT1J1VGZZazZBUTErRitzMk14aUkxV29DOCtsRDB5Rm5hbXVzVlprM1lqb0lEN2plYmRIYTZmOG1GcXhva0hibS96TWYxSWhFTmFqZzc1MEN2eDRCQnlNR05JQzFURHV5VVVLdisxbFBEY3dCZWhmdU1YUDBmNVlnY0xhbjZKdXFJeTBabFpTWTlGMzJ2MnRJaWo1YnVjSjNKN2dKOTVFTFZDKzhrbmt4UnVuQkVIZTBaeENEY25yellMOFhsdzI3L3o2VkpWNWp2TUZIVHk0S3NvWTFnQ3BXM0IvL2FWY3BJelhsNTYzNVV2VGhVRHhEWFZteWQ1SG9NcHZDM3pZL3RWWVRoYk9IZWI1a0lhM2RkaDcwWUkxRWUvVW11Sy9JclBTc2RSVnFJK3pnZmpRemJCU1ZtZmpxTDVrOUpyL2ovMDBCRXB2VE9QOXN0Q0xtRFgvT3FZbkx4ZHd2QWtYYnYwSUFYdVF4d0NvSjZqQnN3eVAwS2ZycFVTT1BVSnNzYkFiSW50R2xwUEd2TXdTRWpWeGFmSUZVa21wSnp6QTFwbGN5aXBMTGF0TWdHNzYxaUJtaGJ0Y3czWXFidWRnY1RzcnR2NndPcjV2MEZ2TDdNTFBvbXNGaVhlbytrYTF2cDltcUJROW5MWEN1MXNScUVhdzJCZUxUL2hwVjNTUm0xVnZCUTQwV1JPU3dXY2xlS1dpSy9jOFBabngxbkw3T05ObE1TWlo1cGl1MXRJa2NFbGh5Q0xKRy94WTgzNzFFQ3dqRzBmQTAwT2dkMzJrRmpUTnZVQ3BKcjR2TUZyVW5mM3pIRG5SWE1wMm5nTU52Tk9MUTN3TVpDSEJ6clcvYWdnc0xTc0s0VlZlOWpoTWJoRDFpQVFBYnI1ZTBDTUU1Q1dJcS9Gb25HWlpLem9uaVZRYUZGRDVKeVhFblRDMXpNczBBZCtJdmJRSFNyYURseWUxMzFpTitnU0lKemxFZU84UEgzR3F6VzVBcTJTYVkybEZ4RlhnUnpwcUt6S09OYTVYOGZPSTRxSmVCWnB5QXlvZVJLWXphTktRUjc1aHBTYXJnRXozb0U0WWJNcWV2YUxnV0hMVmtNRlhVSXE4S3R5bkcrZVpsYkRBcnpPekkvdzlENjVIZDN3TmpmUUJhbEY2NmtRRDEvZndJWDBmVFd5cWhFSnhPR0hmb1BXSWdTdDVzZDJMRW1aWnIrcDVndlptM1NOdTR3VmpCUHl0OWp3MnFpcW9wRE85SXk1SHFRMUU1ZHJvOG9jSG9XTjV6c0FVcDA5MldVZXRHZ3h6OHhHTFhOanZWSUtwSEs0eCt0TTZyczVrMm96U05oTXJhL3hBdjlhZ1FaWjRtN1RjMzBMbXFrcFZZNW1kOG1idFJ6dDFTazdpNjF3WVdnYnoxSHJyNGZPcTh1QSsvR2JPQU9xZEJ1dGRUS1hQczFDTHgxc3lEd09wL25FY3EweUdkMjVUMnpJRzZTbXAwdCsvcHJJVForbzhpUXVsWVdya0tGeTg2TzBkUUtWNFBadG56RjlIUDRXZ1M1dkZqWDJBcWhLSS9hOUhlQVE5NGRiT0F5Q09YT0JQWDhkS0RJL0NzcTJlMVJLZkJTUkViWFcxZHBUd0s2dE9KaWxjOW1Xd1BZQ054V2Z4K0RYeXNjcE9MTmxFWEowNUhMcmJJUmtQWVJXVVBUR205R0V5ZlV0SkxWdTRZNVFYNDFreUxGU2s3bzl2ZFNIWmpWMEdMMS85ZC8weWFSd1NwTGlBb2tRVnRXY1ZMcTZPbXdvZlgwOGp0WCtlZUhZbU1OWkwxU29vUFE2NkNDckNUb3pvTExSdkJJQWxENWhRR2pibWVwdEZiNmY4T3ErOXFXQ0NodHViR05QRmpNRmJmcEVGUlpQd3dFNkYyZG5LeXhCSERSZE4vVUtYMmNOOFY4R3BVWEJxYnIyQ1ZQdndZRDE4NXllTnhSQ2UzcDgxOExieE9icTkyaC9FTVFHWW0zT0pmUFQvYTdqWkk5SkpkYWhpOXJoTDB3WmR4dEtLQ0drdHMvY1VPaGZ5MyttbHdpRTd3TzBhaTV5ZlJGOEtNbXZLOGU4cGxncGw0V1k1V29QQzFVbE9pZ3BkR1VmUTJyRHIzK0l4OUtUaFc1c0l6cW9FcGhtREk1TUYvZWZpcEpRRVRpbzBLcFdjSkt6L0wyeG42WEtFcFJqODhkaksrUCtmZG1hWXQ0Y3MwWXpLSXJleW1mRStLVEdzcVV4TnJDaTB0Tlp1VWdUbEQ4S0tYMys3YjJUMFBveHRsK1VoVkUvMlVucEl4RWRzRHVsWjhDakhDU2JMSEZrcVFiVERJOEFWKzExQjVYNFJyZUE3dUFNWHFLYlBUbVAybGR4OUV6OUt2S0k0bkJzbnVUbWpkZWlLRUYyWUk4eU0rZFp5bTNkaW8xb25kNS82bjBJUFBuZmhST2VNSWZwVk5CQ1IrTkRjK24yemJnSzRncUVWMUVPZjBOM2FLNVYrb1E5NVB3dzU4bk8vVTJKNTFjU0NZbzFoU3ZYWWxtdzd6djdnWUZhMGplTTRsT2llOHBKdFk4WGNzSEJYUmkyRVJ3REpuRTdMZHhFYTVMOWIwcnZaRUloOXZYbVV2MXRuV2tTNVpwbmFFTzFDZmtlNnIvRzNLY1laSEFHcnJOaWVWcGJPVlVHZGpjd3duR2t3SHhFR2xHYmJHRFliVnJmSGQ2cmNEWDVpRU5rNnlZNVhOYTVSd0UyUU1GQTlXWDBNSFNkdHY1NW9MYldtdHQzUjFrbndrVTBIUytuUFBNeURnY2NwRFl3ZTVlVWpQcFdqTXN1Q3pmcEdNdSt5bzV3RGY4TjgvMnNmMWV2My9WZTMxK3JwYnZuK3NSK3IyRnA4bjFjYjUvUVRuNU5zWHcrL212azdUZm4zUnd6NVB0ZjN6L1pBLzFlMlRmTjZqSjhuMXN2MWV6RFBrK3RYZlA2WE0vSnVEOG5wOTE4bmZMOC9TRGdiNVBxVi9uK21IL24rcmwrZnUvZko5R3o4LzAzTDVQbzkzeWRyTmZCMGQrVHVCdnlkYi94TmxBSXhTZ2ZMVVRpYm1wMmZyOVVIQVBtT3J2WFlCZEE4WU5DWmpVYWFEdjcvU28xalJxdHJBbUJqK1hzQjJuRFNnRFdieWxwQm9vMW9qTURNQmdvM2o1UVFoaERyMnBweldQTHdlUTVIRnd0WVl3UHFpSHh3ejFxQ2JBMXB1OEMxMHAyeHFTOVZoalBxY0NPSmRObUoxTnNGL1JoODd1MFhTc1BjbkRVRGc1OFR6OE9nR29CMDJQdDJTTndpL2hhcG11UFB1bnQrVml0alpBeHlVOHJPNVdDYWxTb1VibXNiRERjN2VzSlhoMkVDeTF0VmRGYjVEZWdHRitEc2RZalNIWGhPeWdFbkdzYTNlaERocm41VWhmSmkva2svKysrZ2l6cnZWVDJiQVlpeC9CNzhZSnV0bXJCK050MTBrQTV2VDR4TmNnQWVWNytaTEZVUUhkbWQvZS8zYUM3QVA2NEFjb1hreHpHWGdPUHpEYkM1d3oycHdoZDRhZGs3UUx4R2hNQ1A3dzAyK2I3ZElGM2pOZzcxeU80dWZnYkFtZFNRWGl6bS8xbEcxa3FjNi9NSlhvRFYyem1XVGxSNE1TWHh1YW83TVlwY0xCVkxGeW42ZVgzTWR0ZThnT29Sc0Y3QzA4UHZ4YVJxVE5mamhyZlZOaXYwemlqL0RGOWZIN0lnTDFLL0tZUnlXSzlBOGIwdXZ1R0FDdjNWWmFwUWtlTTJ4WFdOakZmaEtDdkZ3SEg3ajA1RTdUaFE2Z3J6UEhrSWRaR09LVUlMeXdnU094Q1hpRFBBRStHcmVvQlhodWJPT1F5ZjJ1ZlcwRUovb2RvY3BablZRZFNTTUhJOGZLTkpmQXI1WS9Ka281R0NYZ0E2OUxVVTZaMUFuL3NBS0JLZDZYSGE2ZTRCTm02NGFYazNEaS80U3hkNVR4TnBEeWswTGovU0VpeXA2MjB3MGZqTmZYdVhuU0d0bUgycDMyVWRzV0VUclR0bkJ4SnNYSTFLWXdaWmNubWRMRERKVERWZWdXY0psaHkydHAyblNnUFdnVmt3R0hQVTFJK29YR0orNGlEbHk2NWNYQkZUTHE0K3dCK3FSdXRSd0J0YnJEZkZVSkdsY3pySWY4RDU3YWtBMFRxempKNHNFWGFsRks2RnhUTVdHVkRsSHczVDNyanVEdHZzbTFRWGY1aWZsWitwL1YyOCt4N3dZVDVBT1BtTE1SU1ZiT296ZmdES2pzMXFHNWo3TkM5UUo5U0Z6UXhKTlFpcGVtMHVNWHdKVmFvR2Jrd05QT1RldmZlSTk0SEtaOTBJa096UnZEanZCd0ZXcDZIaW1wWkczbWh4NzRlS05nSW1ETWtnYlVOcFgvbHFGbGlYcys5K29VdDQzM3hsUGd1dFVRbjJrWXNUeXVvOXgvQmNBbGtpOGtPV0lOclpzMjIwTXVwS0xWUTRVdytGdjJjM3RWa0Z6QXhpSlhXL3ZXbDd5VFhqQXVDK3o5dFhSdUk1dEgwZk1LVThiVmVXU1h1ck5TQjcwVGt5NHI3bW1VYUxtVTJvQjRpQnlmOGs4ZmpHcW5oMXkvM2F0RDYzd0F3Y3hxZkVEUjZLS1U2Y0Y5N0wzWDdUSnBRbnRrSXNaZEVPeWl0SXZYK2F6MEcxcGVOUldQOVR3N0tZZXlPL1dldTh3SExoWEhjeHNiajk2SlFManp0K3VpVFB0K3pvQy9zbmZGaEQ0NGJzR3ZaQjFhS2pMQklxb0c1QzZpaDVzS1NtQW1uOCtvOHBrNzJsMndsdW5mZ0VXSlpaeW10aWxjYlJZejVRUkZkN2VYRjAybkdDeFYwWEpOVG1lUU1zZERnKzMvSG5XL2NGYW0wTVhqa3NUTTFpczhoYXZUT0VQbldwZ1IvdTZVTU1pZ0ZzS0pwM1hPSW1kOXBzZFBxQjloS3Q1d2UwaStMWlBhakFpUGh1cVB1UE9kNlExV1Q0c3ZqWEhqcGxYTlNxcEVVMHdsblpZVHJ5cDdzUURGbnV4dHl6eG5kNGFXbi8vQVkxcHRKZndtc2YvSWhGRkZXQVM1dUoyZlNRdmhvcGQwM2VvVVZxSjB5aUdaWlU3TWdHTndnWGtDYStMTmtFeUJxUkZSZ1JRS1phWElhYnNUOGw0dlUyM1I1dlkwbkJVeC84Tkw1ZzdLZjlhMGVNem85aWZXNjNPc1R1N2hTR0FLekNaaE9odDhNeWVFMzQxc1U4bUF6Sm54WDgxLzNuWEw0N1dxeXNJZXZQeEtuWm00Wi9JSm5hZEVaUkt3MkxSSXErT1dicDVIYnJFeHdhbmpuMTBjRFZVUnVtc3BURVhvcHQxREdsVDgvTFFuVXFDcitvMkFNNTNmb2lyRTNjUjRIa2lSa0JTQVFzUzQ5QklyaVZTdkpiK1JHcEc5K1MvdW5FWnVDVHRUZnBrdEFkRmhnemlic1FQdDhSZjExVDlmOUZWcVM0NlFFc3V6NjY4WVNvYmtqOXI0YkNXMmw1Qjc0alUwS1lQaEIxelJtSCtobU5GR1V6elVLNjRpSzgwdUZjeldWemxmWkU5d2s3Q2x3dFE0d3NjSkVKUVQwSklIbHNnMHVDN2VhdGE1RWp4WEt1cWNISHhZQjJ1OWRvWk9VOVY3ZVBXT3lWMWg0VllyUUg0RU4rQXdxa1JTSWxNRDV6bzZOVmIwa0QyZTg4RzR5aGM4Rklzb2RiOHNsWnlaOFVGekpwY2NmQ1FDaHFYbFJGb1pEWHBHZXBRSXdqQXFVWkZuc1h3WWp4NTB5M0V4Q2kvUERhK1g1a2Q3ODkyUG43YWVmbUtzbThwdkRaN1lPTjdHbjVTc0MrMnlHcDB5dlFZKzZpSkl4QTBJZ2tqZElqVi9wdmpmQXQvRCtncjQ0d1RKQmp6ZUQ1WDBiM2taZGZTSnFGTHlVRnhKRSs2WTVla01qWVVvczdnN2czMitPN1FoejNwUm8vMlRWTnhIVnVwSFBObkVmRGNNRFN2dmRpcVBHZS9SbnFHM2RyYnZ3YmRkY2ZXRE1Oc3NNUllod08yY2hiZVIzSVF5SFMxWStEcXh1UVc3c3NBdldUUmdEOTlUSEVDdkd0RVVPWUYyNmU4MHNhcW4zT0oxNEt6eDhjc0RGTkNlNU1xOFFQV1E0K1pQSDYxZkM1ZDZxdmg1QWNPQWJrMTlQUnJiaW9qbVlodW04aG40VHRBTEVzdk9NSWJsMHhYeitpMVNvSmF4QzA5anVRR0xFNjY4ZTlidGorb2hub0wvMWlaaDBYN3orU1RacGZFbFhjWnY0aldDd1V1SzJGakVTMkhPUDhIZkdqaGpycUVNeWwxaDUvRk5CQk1HNmYxZFhjN2Y2Y2tHQ0ZINVA5ZWRCTnFnd2MrWGpzVXVKWlFqc1Y0cFQwcVhYVm1HSFl0OEgreG5qQVU2WDIxSEVPeTBNUFJCVms5bmJOMW5OMFJzZHFqM2ZiWmczN1BCclFpQzA3MUxjd245QzI2TVdxOElVWjQxV2UxVG9JdDd3YkZlTDJIMVNNRk5OdHJmcnNuaWQybVd3bWUxQTNOUzBtMHRrajl6ckVtaWhGZlhEWEpNQnVYV01XQ2ZlK0U2cVVDVGlieEZIMTB5N3VSNWs3QW9FSnhlTzl2eS85UFpTS0M3QWdUc3JNKzQzMktwWFBiOFkwcndqR1FXaUVUUEFCbXU3YXV5aEZDd0dkRWpEcmNiOW5ReHRzaTI3MlJlRTN4SzZsMitxRFhDcWNzeDV3a2h1V1FEMU9HTkg4cmNwY1hpbEkyUzREVE5CMEc4dFg3T3RRR3ZMQXZsd3BXcmsvSHAzY05JUWYvWE5TS3NpWSsvd1E1MDludGRNRnNXVjcyTWdIMUlHUC9Wa0txeXZjejdhcVFXRUYwV0FQTlVqSHJGam56ZndRaXVEZWlkSTlIeTRKbWYwSHZ5MG5INGJQMjRqblRERTlKbWMzYmp0NGFuNkRTWWtXZ29ZVDZuV2tKQVV3eXQxT0tkQWtra09XTmZhZGh6VStZNWU3dCt1K0huQXRGMVdINS9CdGVDL2VKREtLYytYWmNSQVhlcGUrQlcwVkpPMjNrQ3lmZGYxM2lRNWRkR21jSk9hcXUzSGhLcXF4cjdHcGNOMmZGeE1hTjljMG9aQVg3ZXdpWi96SkRMOWtBWXppUDNtazV5d3dPWjQyZ3hJMlBMRUVxUE5aVFBheGI2MU83QkkrYlA3WlREeDdZZzliOHFDc0RkdEhoR2k4bDNkL3AyTVZuQmpTUkg5a0IvZDRCY0dNYldJbVhSSGc5WG1DNHNKQ2pjMllBMGpXTG4rNGJnbndHc1JOVnZDaXd4WWk1UUR1MnIrSmQweDZEd0NiU1J1S3Jyc2k1N0pSYi95M2J6ZFdteDJ6Zzk0L05kQVI2enZuaGFqNVk5Wit6clVFNDRENW1SMnJoV05xKzkyYUZVR1FReXR5NmZvN3NKNWJTNGZkdUljUEtaM2hsb0pqeHhFamk2M0JpZmV2bHpJaERpaUJ1U3c4aWwxRkNRYkhlRWJiODRMbGdEWTdnNUxqNlFXOUp2eGVETWNoNy9XZWN3NFovVndkNzc2cExiVm55Y253NUVtQTY0MDN5K2NHeHdsazVVUGRmZk80VTdGcXkrU1puOWd4MDVCR3BYdDR1K0tmMXdka2U2eWhLcENDaVZVS3cydzYwcTFkWDhRa3NvWnAxNW9SY0NFSVRTMjhDU20xMGQzZHB5YmRFalR6MWdnK2tlUTA0VXBoenZneWUvQ05JbDQ3UlZyMUh3WExnSzh2bW1QUXBwTHIrSFBUUnVXU1M0UmdDSERQcFk0WXZUQW91S1FmbkZJVHBCRyt5Ni92YWU3SGhFOTIzMlUxZysyNGNnNG5BbitTOVlJWXY2elVDOElZZzlleXR1WENEa3loRFJYWC9hV1Fac0UvMmlGVEJvUjdid0NHNnBzRkRjMENoKzUwVFk1dkpjVitvZ1dKVmZKdzk5bzRUWFh1dHM5TEpSZkVuNDFING5YL09jN2JiTG9TT2p6WFVDZHlSSmt1M0F5UWRpblNjMEwrdzFmUCtWcW8rVzQ3RncvV052REFPUjZ0Y3ZEZzh3R0ZEUlJqRitBcjVNWGJydjcvN0VxQmppMUYvb3FPaTlycFlmcXZ0eEJ5NlFhdnNoalhVb0hzRTc1Qk9mei92VERnTThXeUVCRkZEZUtWZ0lKVXBEdnd3dXRFeFpXSkVsTmZ5N2Fsbmw0a05mMTJmVkZucDRFRmdkdnZYUFpMZzdxbVRxdlF5Qi9McnAwMWtRNWlUSWY4QlVaWk1WK3hsRkU1VzVnQmduOGhubDJ0SVpnVjhhYTE0SmpyOEFhRDV5VGRMRXdhdll1NG0zNTViOExsVXprQ1c2QU52U2prMTJpb0pUUnk3S3dtd0Jod3FCM0VPQllXUWVsS1cwdFN5dy9udFU2aHFXNzZMcXR3YTNRbjc2eGU3VEptOTVIbDlXTEJUTU9yOFhuWmVNWmpoWG14eEg1OE14dWF4MDNJZGd5bWtlRFg5bnVORHk0RG9DejlnbEZETnIrYVZ4R2NaNTROd3NaYlpnblhibzd4S0kzaEZoVmtzaWNNck1wTHdPZm1DMDJVT1JNV1paaXJaYkxVUUVNMVl2cVZyMVg3SFBtdy9xdHBPdnE1c3E1NkRTRStKakdQZTR5S2JmOWtSREJXZ011R0k5WEl2ZGV0cTEwS2lrOGJyb0JzRlkvdkFuTTZORGE0NFpCM3didUxncENCRjNMejlRSGFYWVYvUXQ2Y0VqUHcwRDZ6N05yRzV6ak0zbXkrbWFWVjJWaTdCbk1lNEFkQTkvckZZUnJyakRzMURpM3hkYm5QaFJCbnM0MVczSjVlbjZaNHY1S2JVT1BiL1JmS05iVHBqQURSRk1sWjEwczZSbWxMTE5lN09KbTc1QVoxb1djSGQxcjNoSVRtYU90cHJqYkFsVWtkb1B0eVFrVUc2TVpZT0ozZ3EyYkZWTXdYQzNhN3ZxeHNrQWhuS0RERzBDZVp6MGJrbCttR3RMeFdRQW9lNmgybUp4TmduSk12M2s3UzRvYUMzOG5Ga0ZTUGZNQTdKNGcrc0NnUzJkaXFRSWNPNUFVYlE3T1hsc0N5MTRXbFBKZmV1N2JJZ01vZElia2R4UmdEM3o2bngycUo5UjJpWWtTTU0xM0VRbkN0b2dZUVcwWW5CL0t4NnhrVzBxUEIxTWducWl2dDlrTzgyM0FEUUlhTXlSVzNha3didkNNMkNjZUNFQXVCV0RPdWVCalY4aExSS09PbjdwcGM3Z1BPMDhZcmVTYVIrRGg3RFY4ZXFodThsZm8zVWs5SW1FUUw1bmtxWFJjcTBUZXZzR0pFNms5RmxDaDRoVjgzTlJiWjE1dEFsL0hVSTlKdG1tQnVLMDlnSXk0cUZBczlDdUNNTFJsZC8zcjBnTitrMWlkRFpHMy9uSzd3VHpvRSszbnY5WEpnb1pWU1J5WW0rbi9zNE9ESTRScEdZcVRPOFBGNEE5YXdUOXExOFE3dXFKSjg2cncwNXZqaXQ1Mk5TNHJnZmxIREI2Nm1mdnlzVlFaUktoYTdHNStRbDdMSUZta3FxUEJwVUZPWGg3NkxHNDNJUER2UzhJRC8yVjFjRFZBQ2VJRWlaWmIvQkRJcTg0Q1c3MjVreTcrY21yL2xkUStwbk5BdTk3ZHdtdHFxaHdOYkh3SDhQZEhTMnZmQ3ZhbzhmT1ZLWUtqQk42SjhmMFRIb0dvTUdlakRYQ2hPS2N2ZHVMWFBmWk9VT1VnRFM5MURRUXNaVlhCTDlDdHFJZC85bStrRnVtVEMvMndSUUdXTGNpdU53eWUxZmlZQm5vN0doa1ozdW9hak1qTkJUVVVpRVNKb1lhSmJjSk13RHNXaURwZTdlT3gybTdBaW5TY3N1Y2hEa3ZCSnQzOCtMdkdYRWJnNVRzQ3F0RFVaTTk4RFlJTEUvZXgxSFRxMGFpeCtFUzkwUDI0VEpCaXE3ekl4QnJXYmtoWFNoSWd5d3VPdCs4NWdEZXl3Mk1CblkyUXJhWDV6cmY5OXUxSzB5bnh4djJsbnp4L3Y4NGh0UTZ6TkhHc2UvWUtDTE1XVTQzcUJMRGZmU3NYSm84bU05Nm9QUWp5SVlQckpkYW9VZVJDNFIyMS9GTmQ1UWdMajZieE01UWZOcFlyY1BiUmpNUDdJMW9BNW9nUWxCMktJVGdISm9OcU9pbzVCTldxVjRxMUhTMy9nczJRYzBYeXdJZWZQcVFyRlE2ODY5bkJTQm5yRkJlbWt1bTN4RFUzczdRWG9URTQzUHJ2MGhJSE5LM2FiQUhKZnAza3VlZ1JoRFAwcXVROHZmdEcyT0V3OXV0RFlDODUyUGQvQ3k0T0RRVWg4SXBwbWcwdS9URXd0V2FWQys3NEVMU09jS0ZHQXJqNWJNQ01ETFNQanBYVk5YVmZXWVNjYzNEY2xLeGhFM1hubzhRMnVjRzNzY1ppcUNxbDFGWjBnTGVFWm41azRKY0NwWVZVQkRrcnY3WmJjbzQ0VGlSZE9kR3NQOVFZU1ZOcVEzMVB0aDhPTnBzb05aNmxoOXVqcXV2ZlJYbmxDb1hQU2VXWFhPUHUvNnFxQmd6cXJoc0VRcGk0cDl4QVNHT21NVFVsQ2xYZHN0ZlVxcVhSdDRlc2xBcWxtSW1vc0I3NEQxVzlQaHpDamwrckszVFpKbXZQTzZlUERPMVh1Ujk5V3FvRWdEOHFJYkFkamdTZ0c4cEM4WG9uWm1XZlZvSjdaZEhGUlBKdk9Bd0hwS0t4Znc0Tmdjd3hxMmY2VHZ5bHJXN2pTVGxab29JT3M4eXF3UjhUSVdPNGVlYTZMck53a1FMdmkweFRMRFpHa242cmw2Ry9FNjdwR0JwSEkzODgrQ3BKdmZxSWFOZm9sWW9SVTJFczZYYnlhVTNxUzltOFdmd2QvUjRneDR3M3prc2xySngrY1M0ZkJ3emt1MzZkUXpJUG1JOW8vYWJmYWpTSmlodzdvc2s5QmdhTEl2SVpyV3daSjIwZlhsajA5U2lDWFdqTnlYM2J0Z2FYMzlCbG1HRGVZMWtLMWNoQ1BObVNITjhxekh6b1V2YTZyc280cHQyT3czMjU3VFNxZzI5MVJVSDNFMGsxL0x4VkJESnhrUklCVEk2QUlwVzlGeUZaOHp5bVBZajNZZ1loRkdReExWRTR5SHZpMmlLbkNXODVWMGduYmpDMytGRDF5REJKeHFQZVhKVHpPa0ZyMk1XL0xaT2luN255d01yQUhmaVpGbGVjNld4QytHRjV4dzVLWUJ5R2cxWWsrN1VENVhUWnZkZ1cwZ3R2UmR5OXBZTEE3ZytURjVmbW5raXVRV0dVMFoySUdCaGt2cjc2OWo4L3dxSXFjbnJ6UC9LdG5MT3NnZHRJRlgrQWlJN0VKR284dmlPSkZSRnR3QjIxQldNYmFINzRtVDhsS0NlSnBWTno3RktLZXFzcTR0eWFJODRoRlczSUkxQjlWZVJwSWtjaDNUQUFvWURrdlNXSTI0NGNoUFRMNlh2RytaZG1BYzQ5ZDYvbldrdGJ6L1FYVFhESGJPeFhZSDJIMENrbnU5SG1VVU1Xd0pOUWhIbERKbkZTbnBvTDhYNC81ZmZlWTBwT0FIbXBaSmlWTGU0WUFEQ0RyMHVNeUhGaWZnbzd2K3ZYeU93Rk9rM1Azbmt4MzJ3ZEZvNU9kSFIzekNZazMyeDdNU1JRZ2VMOVNaMk5FS3NsM0tMNlhpc0NCaGNXV0NJbDhCdUkxYWdhZUVmRjk0MTJxRVByc3M0bmJhYjMxM3NtMSt4RG5MbGdkbEdROEwrY05Sb2QyUHNxbTNJRnNzQWE0c2h3V0h3TTFUQ1ZkUkgwNmFNSjNaR2tEMHdzUnBpWjA0SWVpeGxGZkhZRDg1cjJCUXFHMUg3QllNeVdET0oyaWYzYmxXZjhGb0NRNTdycURZU0RKalBhZVdCL2FkdHYyMG9OWEsyNkc3YWJFY0xHWWM3c0JOc05DMEt6R2JzTVBzNmJyckFkd0ZRVzM3VFM4UzZrb1FFNjd4TGcra3dHRUkzVVZDOW9TakpFZHdxY21reWVhdjFRVHJKa1lkN0Zudjc5T0Z4M0xwUUVlQWF2VWZaaEIxVm45OXdxL2J0TjFhVlhCaDhMS0pNYXd1K0lDSkszRDNXV0dDQmttVVRURzJzSzJVT3NyN1psOUxoNk1VSWxrWjdQczA5TExNWFJZZk1VdFRiUWVjU3pFT0JTTGsxVHQ2cnhlSEVuRzlwQWgrNzZRVDZxV2piZjI2VnRtWjM1eHRtd2p0TWZUZm9qRHIyNXFKdmFHL3RZRHpqWEhsZUlPWE9uUEllN1E0aGp3UDRtVkhadDdmOUg2WDVXZHBmVUxSZkxzWk1IT2ZTL0kwTGxRVjlIUXIyR2NuVFZBRG14WmhwZ1NyOXcvbVV6dldjQ241dGxzV2dJNVNXQWNkL1hjUE1nR1Rwd24rMk45MWhwS25UY1dMZG9MSzdwMlVMdGhOZTFCYS9WR2NJZjJmbWxLaFN2cytGR3pjWHRYaFlmT0dJK3RBMlBZTkFRcEFVZkhHZ0x3cE05UGthZTBaN0tDVmhuZUZLV3o3KzVzcGJBSVpZZFJuZ0R2SEZJT3FPZXNzRXVBQTNlN290b1BpaG82N2l1Q2srYVc1MUtJMlVka0o2TGxoRVpKME01cWdJWHcxWXM3VnA4NkdsZEptaGlNMjBWc2w4c2dTdGZNZENsMXhnMXlrRUdFRXFEMktnSnBhOHBKU3BQc1gza2U4bUxCRXdoZ1JPOHVUejQzUTdGdkV5UGJSV0ErTWlEbFNDbjhqcW1nUE5ZR29iU1FOVWs1bmRIOUdrdTJwVW1hbndvR1VkT1NyaG5YMlo0dSt6dnJzTzhEYkczYThuOElGNEkzRkUyWDAzU0c0MTV3clFmelhDTXQ5TWJNZlJNSEJnSzd3UWpUeit6QjVZM3dXV2xISnJsTk14RERZQnpXSTdEcS9WM1hBM1puMVFhRnM2Vk4vWTgrYytOYzFkTENQaXA3MnIrU2xoQjQ4OUVJRWoxVG9TYWhKSGJ4NmVPb25aRXUwY3JZcnpWUXhSK1U0NDE5ZXFmMXJmcmNxT3pNdjJ3SW1EWmo1anFQR0Y4TU8xTWp5SkxaZmhYOWk2Ni9LRkdwbU1SbUFkSWJtMERwSTNOVVNod2Y2endNNnNRVkFQRkh6K0pwMmJtSi95Z3c4Z2pXOG9UdXNxUWM1VzVTTHFFeG04UWxNQTI3cncrMzlFYjg0N0RGUE5hMzd0enJzRHNJWHB1R3RxQUFmaGo0OFBUZCtwVVlkQmw1a3hYekpwdzc2YXdwT2EwL2d6b2lpNENZN1FPZjdzZ2o5dU1qN3FLMmxHa1RYMWIyWjlaNXhoanVlaFlldVVzVkJ6eHdVSlloUHBsZmFSUDlkOEE3M1BEOXEwSW13MGY5c3h6OU5yYlFIbnlWdjc1SGRhRklIdytHeGdidWdHOUp2V1FWN3g0ckx2aEczVjdiaGQrSWJZcVJuTDFDWEdIdGY5d0N6RWRYUlZIZStuZGIwWTh4Q2xzOWxNU1F3elpscFVkWEZ5L3ZGQVY3ZllHMnc2NStBbll5WHpiWnNzUnFiNzRlT2xxYWFHaVhzY285c1g3aWFqU1pDZFg3OXBmQnc4QUhsL1RkN0ZJbXUwSGx3MytqNWhkVXppTk5lOFQ0cFRWemEwdW5RMEZsdXRGa3owTlU4elFwZFNBSkNHVERHbmlnbndOQTI5TElXcTdiL0lpZ292U0M4Qk8wcWxjUWoyNVNQaGwrbGpFc3NsZ3VGbkkxM3c4VkdwMW1aRTZPZ1hJRmxva01nMzJ0N0o4Y0pjUXpCSE1UaXRkWE9UY3d5WE81SVF6d05nb0FMbXNWUU02NGhQTzd3b1A0NG01QzJMdEFUNU1sOUpWZkF0UThBVmFKd203VkppbHVEbmhkZGFtbU1vaXlyR1k0YkI2NElENUpRejVNYXp6Nm5nejFibVc0TCtPYzlWdjE5N2VqQnNFY3FmRHg4MzVOZEk2QmpkbU1KK1V3NURKWjgxK1RoQUQ3TnlnSGxMVTVXRTJ6bnhPcGU3bVRaYVl5UWlnL3ZRNjNmTituelV5MldzQkNjUTUrMWp1dDhoSnVjc0Y2a1ZrQkZrSjVqWi8weS9mWTZwWkJUYmQzNjZzaXRaSHZkcHV0KzBsSzBROE5SYWtzd041Zmd1ZkQ5Sk41QldUUmFQSkNDVWpjeU84RnZOTG10UDAyWGhWM3FhVVd2V28xajF2cXBaQm1tSFkyQk1FSFIwU2F3Z2luMzJlcEJpbVppeW41aXpseTJBUUxTczFUbFYvUnhUbmlmT3hyVUtGcVpFRjVXWXZHcjFGWFlCb1VwNmV1aElaazkyVnhNU3JvQlMrZ253Zng5aGpIV3RJcUlXSTNLbkxWRUY1WXQ3SjhmblhxOXlOd0ZqdE0rN3NFcjg1K3lYTjhyWXBpSHp4YVZrNDVHUWxrKytzZkhYZktzRk9BUXplZ2hUQjZFM0R5dHZVQ3NxS0xZTGtweWRueEpqVitIUFhPQXRzWmFTRjVCRWtxcFNSbmxxZDRjanJuaGI3QWRLa1crYXpScGcwcVM5eHgxdU9BL0Z3bVE2ZjF1UFNHWXR2eWw5Q0ViSUdweHp4YVV2ZDY5MDdmT0Frek1QeTc5cmFwMkEwNWFobkMxU2FvT2FKWGY2Tm9hallsVyt6NFZQWmpwVXJKMEYycDlNV24zTVNpSS9VUW5GMjBJNjh0RXFoY2RqUDJldXZIVjVKWXNsdmRIUVprSEZEalpaVzY2aTFoUHQxL0RabjkrR1lHMStEcXM0OWFRSEZIZ2MzUW5mWjA0d3FMOTJGMWwwSkp6bFVtaGxtN3NvL1pTMkQzSmJYQ2t1TXVSeEZTSUxPNjlRRWJJdEUwUHN2MnFkeXVqOGNWaWplRmFJU2l1KzA1em10TDIwckhVL0xvNm5ZeWhoaWJhMjlqeEZ2dVlxZ2xzMkV2VzlBQkFWcUlYNTBqZGVGcDJUY0plakEzOVMrNloyQy9FNlQyaXN4cTNmNG1NUFV0c0ltNDJZblA4YlFKMlFSM1loWE9vSjJNMk4weUp0Z3pYcnc4SzBBNmxHV2RmUDdyeFF3SCtBSVBzUHdIakZQUld5eGY2ZnZCczV2djFoVmZmcmVNb2tqSUhmZFhGL0RMMUpwc29BNGdPcjN2T25uWS84a0prc2ZlRm5nTmFMYXY2aHpaT3F5WENMMU1tYWRIa0lEdU9LcHlPU3paZGRmRVZTajNHY2JjaENuVWxkek8zTWpKZ1VlVXNzc3ZlSzc5M1RyU2dLYTd2VmFFMmdDTTgxRlVUZDlYb2R1VVY1WEFiS1FOVkZLTmtJbzlNUDdaRGZldnZZdUV1RnhUTE1BaTdoN21zVmdjRFJVWld0NWdJYVZpWHNUNkpnL1IvMUM0ZG82UlI5eDJFMmlFeFBsaWxhK0hyQVFCK1FwZHNHVEZUeURjWE55TTFxU2l6TWltWmFJTUd2OGwwSVIyK21RQW5uZnlkWFdlRktLNEZpcmdtVjVJQU9sT1cxcXoyR3ZQSjFISFkxL2lpWnRMeFUzQ1lwem9VLzExTzAwL1prOTRCOE1vV1Rmd0VWakFXUkE2cVdQOHByYkQ0K3dFa3pvVXJTRWZ5K1A4L0tnYWU3L09LL3VmOVJVZVFjeFY5NklMdXIrTVRxVS9vbTJLNCtKcVJPeWtDdXZvTytWeTZGdDNYelJlVXdGamtJR0pwSXRJYmJTYWpjK3dVZm8rSVBjWnhzQUQzLzBFemlNK2IrWWxndEM4eEdIU1NLQ0hRUUVyQTUzVEdKQjl3clZWUE1RbnczVGhYN2JBNEp6UGV3NUJvMGJ4SHQwK3RUV2c1QkpjeFFJUTJhQTJWSW1ldUFJZWxTSFlTQ0ZqM05VY2hCd1gvTkJPYy9YY2wvdzhEQnR0QWQrTzVNY0ZRN1VCTGFmcVFXYzNQekhjNWNkZW5vN3NUQWFiKy91VlRmb25jUEVwYlRlR3lPWkdpN2lIbGwwUStXKzBoY0t2ZHVzQWwwdzMxeDhDVnJEZzQ1bVlzRzJFVUhuL1k1TWl0WW5hWWFPQkFhSlZPUEwxQ0JCNHFpMWpkeklrV0g5RFVoSkJ4L0ZyeFNwSWM5UXdBSmZCT0hYamhOd0FWKzlYbzJiMjJmZXhkeUpsa0duMS8xZ1lwR0oyZWhuRkxZMzREMk16dFNNSzJycVZ2dU1UOWV2N1JvOTZvcUZneWEyUHQrVTZ2M3NJbm5QSVM4dFBmUmE5N2NLZGtUUWl5Y0RIMkRBVUVnMzRROERZRzlrREJwWTVibGhyZEN3TGF2SmV4TDlsczJtcWdOZVJYTkQ4cURlWGt1NFpVemhOS1BCMHZ6SnhzNEhYRmdaalArRW1HL2NGUm5teDZFODExRStzdWpkQ09JcUxBNGJ3QnR5bk1lU09uRWRncElMQTVCT0ZLMjBoZEdWK2JyZkNhY1BwTXB5VkZyV0xZNlpGeGM4ckhvcEhPRVlBQ3hNY0xzeDFMTmVCU2RzTzUwVmlYMjNyZ2NlWUwyajhJN1Fna2NobmxKOTNTZ1dhNS9VbzhWTjBvSTlSeERUdmVFUTlURCthN1o1OVQ2NEl3NVZyQXpLNStJdWJHT3pENm5Cbnk3NWtBZS9YVy9WdVhWU2t6NERReW1vbk1ZQVRQL0VmbVNHdEgxR0ZwbE9KVkgzYkRkUkJhcTM5WGZpNVZQUnFLQzVTQ1ZTVHNKVXZPcEFvRWM1WFBuQnpCY1lIM1FDd1dhdXU4a1ZHQzNlZys0eDYyVVJ5c1hKRnFRajEvS1Y2dWgxdlFiVExLVnNXVzJCY0dWSVM1WVY4Vy90eHlWTmhnV3NkZTNpdWlJeDBWOFVOU3crV0lmK2ZhYUxlcElRQlBzQmtMakJGaTJoNXFDanBBNHU4bFFheUNYTXJiR2dwUkExSE5adEVYZk95R0dSM3Rrb2FCZll3bEM0V21xdEJSQklpcDBTdXhTZDZHUTJQUmw5WXBuU1ROMVNYSDRVYS9vcDRPQ3UvSyttaERQczNCdzVMQ1VkL0I0VU5meWkwMVBCUEQ5K2VNTEIxNU9ZSVBRdy9jbHBzcGRLcEdRNUtUZFZvNzJHNEVTdzBDK2VDNlFHdlVBRis5UCs1TmlKYnJVMloxK1NMSWJpb2VIZE1DT0Z6R3dFL1dMZVFOc010RE5uREhLanBseGFZcHQ3L2wyM2ZEMzJZY0dTVVJwa1EyZGFkeWRxdnJ5VkppMWFQSG1rWWhlUWl4bnZ3VHQ2REdHUUg3emdHVjVUak9rRlZQUzFwTyt0QUd1RUV2WllERFZ6SThpSFA5TjNxVmRyemY2Zm9nTVhyL1BPMllhMlNyUzBwVVZqMkpTK08yNS9pV0NIOGVwTUhwRVI5Q3kvbHN0M2FqOHh0UUhSc2JQZEs5TmdBbk52TUtqdzFRNkRuaEdQVXVSWDkwbjViVmh1SDE5elFGSGhBNjl2cjFDRnJiN1ZCenp1ZDBNMXBDRGtONThYZEpXSUhiN205ckVtaWVUK0JVWVJxNWdnSkR3N1ZWWUI1U1pOL2pNZHEwUUZza0J0Z2lpZVNkUGxrT3NGRHQzdUhOV3NKdXNrSFM5bkQxZWZJNURJZ29BMnVFTGZKRmtpMFIvczhURitNZFRveUo1dkdFQ3VrNzYrOTdvN2FkOWdjeVJYNTF6MGR4RUVwMzhFYzJvRVhYYS9wQ1BPQ0xwNFZTVncwdUEvTXd3N0E0ZjR0aVFYRGhaTC9iZnFIVjdRT0JsK3RzV1RHOE1aODRtSWdsRGg2K2kzOGxwcVljNFd4bzZUanZkUnlnY3hhVzBOVklzL0RzRENSQTROenUrUVVYK3g4N1hUb2ZXZlcxSncyckE3OFRaaFZIMUh5NDdYQyt4OUdYK2VRTlRpRXZkS0lORUhCVU9tcDFNUVhqWjZCR2J5SUhaVjc0cFloSGFzb1NwU2Q2N1JUdmkxNHBaTGNvYSsrYnZacjFvdzZwZ2kyWmM1UmxvbHdFMTNJdE1PWVBudk8yNTN5dGQrS1ZuOVBDb0h3STRHY3hqNHJGVUV3MVZ6WDNYVkJtK29GLytBOWc5N0p2Q3k5WVNXQmFueGkwMHFPY3lsaGpDT1ZyMkJTZkZmQUdXVVJNcEVSTkFINWVMQXMvVGRJM3ZCOWdQSGJDbHFHTmF5ZlY1TVRqMlh2RU5KbzY3ZVJ3cEVGdWJZUHlPdTZDMEtTaC9qYXV3SEJkYkg3ay9DMWFoODg5aEdJcnkvbjRFRkdNZXA5ZmYzRmdZV2loUFFvWkV1UjROeXk5L3JzL0hMNi8xeFNJOUpZdFd0NnZNN3NIV2xNN2xsYTRTTzJIN3FqSTRBZkdFL3NONTZrNC9LZmkrWVNXbXpvUERrQ0huZzRoZ2dUR3JoUDQ3V1RiVVFIdnQwTzJTNVg2WGN3UXJJU1l0UlVrZXZwSTJjTFhoUDRLekc3aDQrT3Bab2x1OHZqa1Qvd3JtTEk2ZDA0ZXkrbjlZWEhaZTUreDB2UmFFYTNoY0lWZ1dZTFVnVkRRMHRVMVRvUVdJOC93dnlrbFpWcE81anBlSk9XSUpUN040T3AvREJWdlJUandvV2szU1VRaDA5RG1SdTRoeGlSQncwRU9JNXJJdUE4ODlMM3BYZ09FaTFiblJOWlVBcFJJN2g3Qm8zYWVPODhYZDM5TDNMREtJclc0b0V2aU00d3ZvM1d6R1p6UlBXYXdnQlFhNGFTSlJHeEZyRENuOFhsUjZFQk9zcC8wNFpsVnBKTC9nYThaNGJrNTF6ZStCbWJKUTNWMVR5WHVKUGZwTTFQZkw1aFpqc01MU3UvVmlkU1E4VW5nTUhtQ2R6Z21HYnJPaUVZcnd4NjZCUEZVUHF4VmFIWkNRVFR3UVZDNnNldE9udjcrY0MwTUswdGFNUGxuZEFMZXRSU2VzV2UxQVRVNWJrbmw2S3FFUWc0eGt0Qk5BYTdZNDloTUExSzZ0QjVkWWIvS0hPdHJoOVJHcFFWOFFRWlVFbzY4b3h5YTk3WjNNWWtUQTd6Sm0zbmNkTXhzazNrV2FJUXJOdURoOWFUcnppZzJEb3ZKZUt0RTBwUWtOSTdFZVBBQ09xWWZqbDhVYWF5Rks2LzFZSG15MDhiU0MxSUFMclp0Q2g2L0VrUktiMndScWtIOTlSL0toUUtlSzRGZzFkWlYwb3dmOUZYU3BzTVY1b1pQUnBhbVFzbWwzOHNSZmlCTGc0WTFCQy9sREh2ekFSdmxMRStuSkt3eUZPRDdpcHhKaG03SGRrald4eXlwSnV4d1hPdWFlK2VaR200NWV3SGc0TFI1M043ZGdmbUUyWUJXQ3hielRTSE1YKzVkWW16Y1hMVTZIVUkyaDY4SGlvNmhUMy8xZVN6b2JIYzZZU0ZYRk05SEtKTmtra0ltM3IrVGdLckVHSlB0bjZ6NDhSckF0bmFId3lEOTR3alNKK3RBQTZHa29hWXFZaFY5WTZDNno4YzEzNDdRZkYxZkZBQmU4WjNCaHJwak5wYmlPQmRrb1A4UjVmS2RGcDNJSzBTUzNEU2JnTDIwYVpya1doS1dVYnZramRHUTNvL0RTelZuM0lBd0NNY2xjenFrRmVEejd4SzZGOGk2V0tETVhhSW12VUwxcUZzdkN5RW5PVFJHNHRPdjJRWlZyMDZYL09SUEZqUWdkV25oVnI5SkRldVVMS2tYc1JVaHZTK2xpeTBMYURxR3A0Wjk0WnZtOGtreFpQWnB0MTlEK2I5c3ArazBLenUzaVJyUDBvMnZnNDQzeWw4NytEbTM1QzF2MTNhakhaUjhFRXkrLzArSkRoQWpFdVdMbW03ZFhQQWgrcDJmd2FHaTF0NmhEeFp2TTJ1WFVieG0ydzVUUjY3VTdGSitmUFZHYTRleFhsenhQRDdsc0RHc01WczFuMFhsV1RpTi9sRUJLdlpUSHJmMCtzU05uN3F1SUZJeXRXZVFaRERQQWlKK0ZWTi9ySmFUSnRRQ0o2VlJvOXg3YmhlekRKMWNQT1MzZVlnRnJmcWttTjBhVUQwNHFRZUtNelptT24wdmNTY0tNYVM2Q3ZlQm50OHI5MTFQWkMxTEpZOW54emNONUg1eWhPSGI0eXRYQ1dndE1hbUFvd0huK1UvOEtqMVBOSHBjWjh3QVZEMnJnRlM4bWZVUmduRStQcjMvaE5Rd0hPVm91cG5qRmlPSGVCWjVWd2pjSmFnYkkwRU4rUVM4QUx4VWpESS9EMC9GMW9ENWF6WmNVN25CdTNORU9DeTFQZkl2UUpyK2NzTnlsN05lVW1CRUtaVHJQYUJZU28rK21taEdUYjZxdVhUV1pUdC9paEh1bEEyVFd0ZmxYRDZBR1NmaVpIekgxdUFMMTBTV2FJajdxS0pQSUdVQkRWM084dTV2aEtUQkl5Z3V5V0hLdEkwSFZHTHp2cXNiZ2FIdlZqdWdFRHdUdWRPNTBmN05GTWJqN0FTZkVUSGNicTNuY1V6UFpvWTZEdjA0ZklnNmhmcnFreUxxS0hWbE9DS3cyeGlRZDcvWGhqNTVBTkFzOWQ2NE5wblV1K2Z0a1pXVEYxWVhMUlVVcHdIMkZMUkxWZW1BMWYyZlRFWUdrVTRySnkvbmtxaVg3cnp2NmJnV0pUaDg2dHAyL3hCZ3ZvYS9mM2c0UWdlbmQ3R0RDVVBNYmQwcmRnT1NqZzlQb2hNNEYrT2RxamdST3lSNjZydkMrazlZbkV3YVFZeWVJU01DczZVYkdZR0VQMWE1RlF3cmhTWGQwdk4xejlvWTkrZ24vSDlwVzMzZDd4NEl2Mk5ZbThCdHhxWTd4anRjRHZTUGJLMlFHSjBnRmlqZzVYanE3TDltbEoyZGtqTTdmMGVFaVQ1L3RILzNlaWN6MXlzb0hTc1NuRCs1dWN5WHdPYmp6c1RIeE5zWXB6WXNBbXZlVVV4WVNKaWJtRjNjZ3RrV3drMUtzT0VRZllhc1RMMlNpT2pWNnhvWTBvcDRXOW1zYy9HOERWaWZ2SHAwN0dEWElDMWFVOWMwRjRPR2NLZlFvLzQ3MEs5T2ZmWWdQK2Zhb3lTK2s2ZjJERDUyQUxURUQzNTBlajZsTHQ2NGpkdmtOaENsUWtoZ0JZK2F6U1pQa1RlNXozYXplK2IxcVhaUmRUaXEveWFPTEl1N1JpWk5zUGlYUVlzalpHTWJnSUFOZ1FuVjZpOExHQmc0TTIzQm1DbkN2S0ozeHpycUxhV3BmVERYaFJuL1RLSlR1ZlBMWmc5OVIzZnBGSmtPN2kyZzZXS1BWd0RkOU5YWktSVkNLblU0ZzVPeVBodzByWGdqUVdLOUNCcUVvMEtxYmlhdUYrNktHWXVuTUdTTUNHWng2a2Z5L3B5eW02aUFQZjJtZXBGYXlZZXdBNHVnZGNGaDlzZktMVk05UUFYRHBrc3lmdzQzM3orWGExWFpoRnNOV3F2Zk1NcGh6NnFlR3FYUWpPZ3BpM0NIQ3lUZkh6eHRzaDNnSkVGZXN5T1dNWWNkdHVoM1R6YkxlQ0RRNThncFpXZWFTS1h2eDZsTENzUjJqNFAxRjl0ZVBDc0M2N1lqdEtRQnNhRGZ3U0pSUExPN1pNTnNmRzFlbHdjUVJXKzgrMW0rM2Q1Qy80OUJDWGhtQi9vaGYzUmFrY0FRVnVkSG9jTWpEUitPTHhkeDlJbU9tUVRMTHhNWkRwVkxabG9OakhBdnIycTFIZHNkVGFBbzZ3NHZhUDFveDFXRVpSWW8vci9YRWkzSWNIVEpGVXdQcCtLby9WdHhHczN5ZnpDWGduRm0yUE1DZHpvUWVtcUtMSmVWbnRqZWhRM2VFT2xtM0EyYU1kbjluZXVEVmVPb283UEJTQXlWakVHZWpQdWY0WVNGckx3dVhubEVDU04walVqeDBRT24ya3Z4dXFzZWVmV0Z2UHQ1VGNBMGZMVjluL3ZvZmxwQWpBUk1yOGxTdWZrT0RPT3BJcWZaUmhtUFY5YTcwYUxEQlFneHhHai9mMDBTSXNnUjJLWjM1ZUZJNDVFOHc4K0tBOHh4cGE1ODZpM25VZGJ5c2c3eThFZENlUW9sZVo2QnFDV05TYzRFY0h2QVIxUks5eGxRYjRBM3dxZW50cEVDVUE4UTBycHRPY3NMU1d1V29jUHZFRlJmR0ZDWFMvaFczRXV6dktQanFnUlZhMDVxby90VVdmczJwa2FsM085SnpiWmx0TmI0WXFUNHg0RHBSUmZRcnJXYlI1Z0VsWDBxd2huZUl6TTFPTVplT3VBKzBOc3ZNYUFYNmJacUdzU2xBNHpQSWh5R2FvQS9PYk9UUmNaV0JzOU5JQlNCbWlFTHRBNWhIS2ZDZVdJYlo2bWxIRUswN1BCUGhxd3R0VTVmWXNmUUtmYWNmQ3d6NXFzZC9PUWV4U1pkVXZRWWJ6S2VkZmhNUTJPNEtNSk80aVJ6M2IrbFo4ZzlzK2dpb2VJMEdNWWtKQjJ5Q3QydnBlRkJrbEpuY3h3STJ4bkc0VHFCNGltMEo4YS90SGxMQ2xWYkdyTGdKWkg2aDhpSFV3R0V0cFJ5VlhyUWo3MTlKUWZvRFl3Y1YzWjFMRUZrKzhkakJWa2lqSFNQUHlQVTcxUHRKVHQ2RFlJZDA5UGdoeGZURjkrMVpqelVOTEU4aHNwU3duaGN6YXZSUHFaQkJZSk02ZHVpMytaaCtYc2RjY0pBTy9iVE1pOVZ4TkNLc1dVVWQrSmZ0ZTJmV00vbDFRR1h3ajRyQWRjSmIwb0V5TmpaN2YxN2paN3B2bTg2cDlZVnNZL01EVlFPZHBSOVFLZWFVSUFuQW1EaFQ1cm9tVnBqWDZWbmt3S0NOVFdFQlZIaGxLSHptZXhUbXY5dmZXaE9sQ3FWVmRQTTFZVjRVVlJ0RW1tZ3BvVU9seDFxWGpYQUNjTDR1SURLV3pScmtVcFJDMkZtUW9FWW91YUpyeFhURHZ0bWNZTmVralZkTTA5N09UclIxWlZTVXlady9aRkhXeDgxR2xuN090SlN0NVFPN2NvZzREeE5FRksyMm5oYldZWlRvcjh4dTJycmk4aExpMGtuZmJRMkI2ZFdLWndpQlZ2VWhNZ1dCakRzQUw4STZNOVpGbmw4Y1BZMk52dnMvUVphUWlZN3N6NTNlM1dod2xVblR0Z2JaZ01LZEVCeUtsUUVGYjZFM1JZQVhlb3BCU2wwNG9oMW9yOVB6QjJCR1RsekUvdUY2ZktndGlzeVY4WERobFRQUk14bEwwVmZhTlNreW1JYVcrK3hzME94Ym1mci9jTExCaEw1OEo3Q0hhcTdIa0V4cnNEN0swRVBHL2JGc0prYVA1ejArS0ZZeE1KbzY2eC80WVJNeStRWjBJWkxjTlpwc2gvNEgzRlIyWW4wWjJ6a2ZXcVYrcHl4ZnRlOURHaHBGSXBGL2lGOTV1TW1kNFk2c1Vlc3cvcU5zcjl6TmZQYTBicXNMRWZnSlJ1ZUUwd3ZOYkVDMzlUbUpvM1NhczhmWEhwVzZudjBVS25sSnFSOS9aNWNRbXp6ditzWFlNVnpxRzVXeWJRQkdzcmdzVjlhbXBsQVFFSmtORGFlWlVyMnN4cmxKc00renJZeUUwMVdZL0ppZjJUa1hyTmN5THYra3c0SGlGNEt1REpBd2gvQlp1cnNZeVVPZnlMM2xrMDg3cFIzVFJZN045MHBoa1VGdnBWVFVkVlN5ekZUcFVDUUM1TU5TZWpMQ09qMW42NkVyOEF4YUJJWWdLNjlPZ1FxVC84ZVo0NWJkS3dCcm9sRXNzaUZNWktscGVxV0VkSk82T2RxUzd6ZTNqSndxZmYraHFwQ0E0MTV6ZnZ4cmpMdUR2aVcveVIzV3FnZXUvVU94U0hZWmY4dXBodTJwUE1wZWRkK3p3bVdpMlB6V201MndON0FubXZldHFoZEdIMFp1MlQ5clY0ZXIzTkZqMG5qQXBOVElxZnpveG03dkFDcURNa2FwcExYblpsdUltMURkK3hTRVNZU0N3YzFHalhLNHB4UDgyaUt6cFYrb3V1dlZJSXpvWjZRbmhhb3VTRkFIMlVHNzZYUkhLM0JsMytLV0RLMmNUTHR5WnFIQXZxaWtDVzJOUDhPMkF6L1MrSlE4NE95L0pjVXk1UG9OK0o1NmpMS1gzaVJtVjhiT3BZNHZKN0lPbitBWkcvNjNTV3puazU2KzBmNkpEeHJDT2thUlNVck1GT2hleVJaR1Y5STlZaXZ4d2xma0d1ek9yZW9YUUhiNDROMWFNNWVBNjNsK1RqQWxWNUcvdGRFTHhlMWdobDhPMzRWTnE1bmdJTHQ5ekJWVHJMSFBjL1pZSWJlcEFmaWdjamFFRllDcmdBNDlpOUlDZHFGUFg1dCt2S0lWbHBDTUpBUkl6K0NwcFlLWG9KOWovOFhFVXAzKzNWVG5Na0E3S25IcW94MjdCbEptNlVhbStFYm00aTRDQWpqMlZTRE1kV3lxa0p3dTlURDRUUDU5VzR0L1ZUZFJjVWltSEtzbnE4TmEvZ0FkejVmWHNoYUx3dUxJSTdZOTZHMWdwWnBMU2FFdTZrZTFBTGxEM1ZOMjlPNUV5MWxSOWswR2ZlZWtkWWtXd1BULzRoanJtSjN4Ri9pNlR4d2RoSkJaUDRYaUhBelBOMEZ3Mm4vR2dtTTd6cjJCTVZQNVVKcTJHSlptZUExUmlXZi9wektUdCtPOVpZNnRwNmg2TU04Z05SZ3hRZGFKaGtKTmZYNHV0MUc1dlVJVFV4OTNkSzZ5M0FZcSs0bkJwV01tVHlxQldGSUlxQzd6dEF1OW54OEJ4US9hVyszTVFIR2RyR3QyRUNsOW5BZ1ZVWVRrSXdXWGxEQXR5ZVpweFcrTkwyOEtBNWpTY3JLbUdBRUZ4UXRqdGViUVZwQmlQcVcwYitOaFBGdUZJdzJZQkFsWEdXZFNJN3ZVOFZySWw0MUo3eUU5bFNTK2dDaS9GMHFQaWVXK29jSngrUGtGWE0vT3JCOTFOQUE5YmpqNjBlcHBweVRRRzQya2FJTlViL1lsZmptdSt2TC94RVdtSXlRWTFKdHlzZkUwdnAyV285WEl0eWFBZDhKZkNpS1JOOFlFRWdxUlhEblNhMmJ5YXF6Nlk2SlNDc2luRHdwMVJYbGFnekpoOTY5ZFNYb3h1aCszNXlvTlpQeEdodFp3Q2Mzd3dWZE43MXYra0pCL0twYm1BUTZxOHBqVXQwOUUremhWWU9OZWZwNnl5aUdXUzVJVTc1WStvT00wUWM5SCtNc1EwaEFVNTVaOUs0VUdRTzd6NDJyUjJpemYrZFFkb2JDc3FjRWhhcXZwemprNG1HQ1ZrN3daM3UyM3RrUXFhTzlVY042WSs1N3Y0ME1wZDliTk50N0JNMDNkM2ZtWTJCSTRCdTM0SDkxcWxlQi9aeVVIVWxoRWpubU9SZFVtaWpvNmh1a3JsY0djUWNDN1FzLzllcmVRZzNtWSs2YXpzcU15aXcrTTJJL200aHBGMU55R1Y2VGM1dUlwVkcvczN6OFNxSWJseGVKclNjOTI0NkhUcGFPMEVFRGdRSnFPZFpEUmt2VUZnVTgwdzVRdVRCSWFGeW1SNS8vZUVCSkIvME82MHJmcXBCclZLSHlYY3VGWk8ydXFTMnYrTHFOYThaZ2ZxYnRWOWJ1SlJXSnlrTzczWGFYbHU3L1Byek14V0d5bE5PR3YxN2RleUc0dUwrbG53M3NNazZPS0JYR3VUY2hCcWFIL2NIcXE1NkZaY3hheVJDVjJQOEl6cVJUUGtuTSttYXBmTTRsU1lsRUlRMk5pNmYwQisrQkY0bzhlQnB4VXExSXZaaXRJclZMZnZNaVdIL3R1dVBoRlFlOFNIYlM4c2hlMmQ2cTFXRUtpYk9MSllzUjE2eTR0eVNJQUNNQmJJRU5Yb0t4R1lFWnpIZEtOeVFUS1BrdHJqRE05Yk9vWUw4RVlOYUdiMzFocEtZc1FzQ2pUY2crbThRVEpueWJsUG9rT05Wc3hzcEpNMDZJZ3VZcHJQbDhYdWdScW9SREdGeE4rSGJiODN1YmtIYmNVWjhuRmtTNUpvcDBYY1BqRDFJaTB2VDUrakI3Q2pIQTBOc0NxL0pyN0ZrNlRaTUhreUY3N3dxVS9BOFlkbjBHTFcxWWc4WUVPUEFFdGR5a0xpSWJKQjZ0UGVlVVZrU3dTQ3N3QnZTY0dkYk1tSW1lbnE1MHE2M3BkK2ZTc2lidlgyd1ZKUU1neDhSYUZpYWoxcGlHYUxDS0Yyb3BiR2FTbmkzQnlVaFlnNncyV0U1cWZVaUJ6OHpBeXlMTjJJbWs4L2xZZzNWK1JxY2YxL0p1UHZWL0tsd2g1a0JBbUxUWjBycFVEZExKNlNDS3JvTEJOQ2VmQzJXdW9CSCtFSDVhOEExREdxZERsaDZEdG01dHhTQkZvUkNCdElLRUJIY29zN3lWNzVoSEE1dzBpUXIrNFdiejl4NHhwQkZQNFlmWERvV2FRQTdrQk1oaWtFckxCVVR5UTFlTVZNQzVJNnV0aWNPUHVYVW0waWlJUzJRaVU0WGlSVXFxRmJaR1JybU1iWnBXSDhXQWQyZldmdWVWRDRzcWxkMFRoa096SWtoc3QreS83S1owaWVzWkJrN0ZhNVA2dk5jSnkydDVpK2N3cXlKUXpVYTMzRUlnMEVzSDRQRXIycVdqNHk1MTRWRlVqQnlJSVpWZWc0SE9qS1N0VUNsWlhmakppZTFDSUZPN0ljbDFEcWcrNEhjT3BZbDdMSUt0OGtuazJLeHM5ZFdReDJSS0lpWTlxQlpkN3BoQklrNnBGb3VoekZBeXpPbkZsSEErblR4ZElKeUZlZW5ETDgvVmtjS1JhWlgvQnpMMDI2eU94dStEdHJmVjQ1bG1zTG9ob3VHS0tia3FyYXRDWmk4NlpFa3BpYkQ5TVU3Znh5Nk9ucllxVlVxTDg0dkVQM1FXU1ArSUtRbjc4alcvRzJjNTduTnFUVVZ3WHNWY3YzcXYvWitKY1dHTmE4SW93K3Vpc1BTSEdDTGI4cGQ4ZDlFa2VzLzJqanJqYlA0WmVnc0RLazU0SE95QzhvaDBpdG42L2xpKys3WmNkOVpVRGpxZ0dwUGVDRnNlT3c0cjV6SVFMbWxqSndpenVpQmpuK0RnVTVwYjBOYWdPSDFVdW1pL3dKbWJqZjVzaFM4OTluUkNsOFF2OUhjZjNWbEJJSHFNVUo0OHFGcVBDcW1leGkwQWdJTVFEeWlFSGN2ajZWUWJqRG0zeUJ6dU9nV0hUZUhLQVdTSVo4ZTFPdkNIdmRhVnpPbFBIR2dnNE5KTGVKRjY0MkNtL3p5RWVwZ2VERVIyeDZRQXQ0WWZOdTh5djF4bjdVcDBSczZBaitnRXJHeFVldy9scy9EaGpmWExqcTVJOHZ0cXo0UTdWbW5VVVJaOVU5cElPWnZNMW5DQ3luaC9MdU9nNVlMTldabVBtajZvSEpUZVpiZjhyN01OWVJyMzJYY3JFUHFUNjVOMlVBVnZkRFRwSjBySGV2b1hqYVozcWgweXhMTVB3MG54RVFqV2dvS1Fla0pzdDI0TFRpZzg3TGFDZHEyUzVadzFqQmxnOHgzcDFOVld3V0lLa01mbEFvQ3Vib3hEdHdSWENkaThwNUc4SURKTzRObTJxc3RnUGZjMG52T3plNlNCakZRUllxMGpuaTR5TVlNMmJOaHgvT0FOY0FZYmplWkxVek1QQk9Pby9NdkNjN0JuTUVDZ0FXbjR0SVJGdEY4MHVncENvdDl6b3BVSVpCU2VPNWFvalBrMnJDd0JLdW01cWZFZFhNekI5TU5zTUU1MWJDS0x6U3lEWjVpRHIzTGxTc3hUenAzZWNZcW4venNzUlBGVnBsYmVDU05YR29CZGRvOCszVUxJQS85Mm9Mdm4vbEhUdk5uYzlaaTVrM1JMWmo2empGUG9jNkdLZkxWRHo4VFJyY3JDUWM0SWQxRThyOUVxTzRMaWRwdEg4L29ubnQ3L0JzM3pIZ2lyMGptNkZWUkMzWTVFcFhqYUF4YkhkUlFuYTZrVTJpTmVTNWd5U0Y3QXF0OENjU1dNanRqL0xmSk1QTHBCZ2FoSGRIUmw0c1Q0L2JMK2w5YTlGUmxEc0pnS3VIeVZ2b1VldUEyaWQ3bmt1STBCT1JwTStlN1IybExLUnU2ZEkxTnFLT3FVUUZYQmFsb2NkRHBNOXhaaVB0eVBJd0RZa2E4M01FcFNsajhLWDllS2llMmlWMHBUd2RGNVhOT04xWVVJc091dkIydEN3UVNtengwUFFuMGlQSG04UjJKSHd0KzYxL1U2dUQxRktucXhxdGttN3g1ajAxZkJibTIwUTZCSFQxZC9LMWl3dWR5N1JBd1NENHIzd1BDR0FCZW8rTnQ1dGRLcis5cGEyVk5GZmZLV0lidGZhRnJtQzNGVDZMb05DSzJDbFFLbmlYRzZTMUFDUUh4dWlza3RhSUcycEIzUjhkZWVNL09mM01GYlpDeHAxa2p5Zzd1Zm9PUnh1ZEJIS3krNlZQc1VsQzljdE5mdEJEaFJnOEQ1TTVKS0tHWXFURjJRVFhDZ3FBY3AxTTM1ZXdKaFIxanNTWXBPQjk5ZjZwa1A5TUs0K1pKSEp1T3NZNW5PUTBQVi9DVkFORFR6Yy9vZk11ajVIQllOVk5aOXRPL0txRCtwNXMzL01nOUJnTEJQTVlGNWNxTkVSMFpxOUlSbE5QTUk3bUNLcXowWFMySWlNVjBsY3JCVlpyWnhqZXhSSEtZQmxxOUZYeGh2b1J3TnN2UXJJV0FuV1I3akQzQTZBSklOY1BIM05FY2NEQTY3SnVnY2ZCM2tYdGU2aDFsc3lON2ROKzVCRGZhbVNuMVBJM0FWeFc2c0JnVWdJNG0xb2hRNFVrV1ArSUJURWh6NXR4WS9jeFZjVW84WVErT05welQyUzk3VDgwYUZvWnpqV2pDL2Vld3NxbzExMkE2K1l2QldYdGc4UnVTUEZ4SUNXa2ZmMXFTeFArb2FnWEVpWTVreDJBWDlENVAzMGpRMHNocGJKc2xyNUIrRkRPQmJxcm9JdTY3MTQ0WkpZdXpaN1dveE53Vi95UGRsaWJ4ejZHTzNkektVVnVDTDVCbFVJUmoyQ0RmNzZyUWNkOUVsWUtvWmJmOVJ6UWg3bC9KM1hDRVNWaE1iMW83V1BTakNKYzVNbldzdlhTbGNuZ0VCakZ3MFAzbVNsNnNHYnFWcmFnWHczOXVtbkxOblYzTWU1UG1GOW8wWWNsL0VTSjFucHdHM3Vka20zcHl6d3BjNFkwaWZva2NBc0xGTTdrUXppRTFNNHVNMFhjSTVheTVCekorUDRRRGJlOUMrTm5vTVZiZldFc2tDaUJnNlpUdi9aWHBIeElMZElZMjdSV080T0xYWU1lWXB1Nmt4RGJ3dEZiWUNJRWJlUFgvTkZpV0o1VmJKbTlRa24zY0tKRUpqb0RmNEcwaUE5YlNPcWdTaEl1WUgrZzhDSnRReGRtUGJnaEdmOUJIeVRDTWUwa2d3T1JVMy9JYVJDZGRPMlFocDNMV2RFT2VWY05tdzFZOXhQOFZlUGVMK1RXSS9zL1JmN3hrTW8yNjJYWVNGUFJkQmU0UlNFLzZiUStXV24vcnU1K2t6Q21hNjR3VlJhSEYxN1FCelJocEMwK3dnRmZLcFZHaXBWMTFoQmRSZ2xMdnBFdnlMOVBvN0tuRDlWaUdxSk9sdWh5enhDNkgxeEhDYVlWbzMzNFhyRnlXQzNXcnJYdVQ5OHZTUGNiNjhrM1l3SnB1YTlLODg2bDhiN2JPcEpuM3N5aWE4VnVwQldycXZDa2NrcDcvYVRlUVhQK1lNQjNWbFdmTEVRV2EyekIwZFdVUVRydDlCODZucjE0ZStEcUI2bEJmL2FFeExhTmZlQVlYaE9UWk9QWGlXYzdvVW5Rck14RTR0Y28xa3AwNW8wemI1SUdJK2w3SG1xbTYwNFZpYkJSL2dva094NWt0dkZPMG5PUXYxMXI3MGxyS3prOXVxUlFRSDBGLzI1NEZyVUxRUWpXbHBVa3RjaEdGbkZsVmtONVZsQ0pDMzJFSEUyOXBjQVc0T01ncHZoWHlKQ1BRYm9XL1B0ZUNYNmpIT09mOUIxL1M0M202d1ZZUGFlNzM2QUlxS1dCbU13blBSaUhrOG5Ed1NvV0krVDVMaHN2TkRCRnJpTkJOUFJISVRmQm5QZ2ozMXRrSVNTTldWOGFjN3A0V2R2VmxlYVU5Nm5zN1dXVHNoSktjYWZpakZMcEt2TURuSjM0UE9qWDR3NEhwV0tCZDJvdWxkL2J1Z001dFVxaE03djRmdVJtbzBVcjRyNEc0eUVKQkV4bmNHTDU0VGlJQTJxOFRUbEI2dEMyM2RjZUtramp4RmdZdjNKcE1lTUdRUHV3NzE2T1NxNVFYZG1HUWxuU0pqVXhGVks3ZzFyLzFEbjMxTG5pVkZHMEhBTEgrL0tQU1NiSWRtenY3Wktvb29SK0xtSGRSRGlBdzNFc3RNdXd4VVpnSDlRRnF5bW5oelFsRVM0L00zT3JGanVvd2hrRXdqVENvd0NvY1ZEa0FCQit6MjVqSUdROUpQZkZoTEkwNmhLQWNvMFc3MUZLRlZDaS9pOGpnRDU0aE04a2tycTg3L0trRzJCQUNjb01CUEpHSngwL3c2ell2eS9MeE9MNHJlOFl3N2Y5YmhvUk5YR3kyMnM2QXZEZUMxZTJ6SDczb05XMUQzUTdaODJWVlFwWjdHM2pLQWRjL1ByVVFGNmtVYVB2Sm9RejBoWmRNTDU3aWxtVWordmN4UUkwOHZFblZ3U3B5Wjl5SjBFTkhwMWN3SmFxN2hCRTJRN0NIQVlqQkd0b3dkVFd4dEl5N0RjTlMzVFNJdnBLc1JGV2NtYnovOUdLQ1pWY3NMTGNEUXM3WEp1Y2V5bnR4WW95YUNIN0IrYS8yVjB1RlAzTm9lQ2RVNFFsWDFmYmZ2SDVyRlJiV0k2STFGRERDNWFjalFIUURmUnV4VnF1WFlIN2dWUWpVVVBITUxRYVUrUVplSjBXcHAzOERtV3JscXVOQ1NoT05YTEl4bjRIRjNXTTA2NWJoMkpQTFoxbC9oMzg1T1A2MXRwb1FRd0tFOHltZW5mVE9YMWtJM1Y4d2xEZVMzU21sTWoxaXNQblowaldZS3F3Tnh5bGYxdUFUcmZtUjl0L3hUaVNNdlRSUWhQcnZkY01zYVFGQkdKbmJ6eHdYcFVibnQ3WUNrWVNXWkczM0R2SEs1WExIOVNhYW50NlJacTc0c2owN2xER1grb2ZuVEpJMTZNalVxbjhNSVFmRXNMTEs4YmF6RTBvZTA0WnVITHVDcDFzempTaTZHWEZpTStRTGNMWnZhTkc3eit4VHBOM21sOGIxOHRwZ0c5aVphT1pBeEF4UFRuVHpHbzc5aVNhMjkxdHFyaEd3c2tBNGt5cGUvOG1kdUNHS2JwdGhYR2dSOUpuS0tpeDVCWDNZU2FsdEFhWW1Kc04yMmFOVDFBOEVZL1YzeFp2MXVNc2cyN2RJa0NJb25rTEg2K0JYSEtPYVMvU2JZZW9rUG1va2JHZythcXBHcnBSaDN1R1dUREJ6ejBJOTR3NHovV1RiN1RMN3ZpZXVpVER3YjZwbEUzRVBvc0lMZ3ZmNXJSd09senNycXJRa0F4UW9lbDdzbmJKWnl6NjR3dW0zZXZmS0xEc3VnTWpjV01NOTIySGZ2d0VKOGRTZTZTVnArRlphZjhDSHZTYzNTUTFacGlEN2kyUHJjVFNjZUwxYTdpaVZvUmJ5YVNnMUFoV2lqaG1sYkNONzJRYnB2b3BLdERzUUZZWW56V1psR3dPckQ4WVZCekNtcHNuYjBHVjE5NzBTTHR5aXpCdUo0Y09yYjJRdWw5WTMvS0RFL1B4OWk0ZW1vbmZZTGtDMEF5YlZxT3dROS9KL2ZFQTBjTmZLQ2xiSFVOTTRNdktmalBpcWxMTERIOE1wcm9nMGY5WTV4dndsVHlUR2liZ1BLSUt4TlkvcFd2bC9wUXp4VlpYMjFEalNwd2RtaU1TaEt0bWFHVm1IdUxGVndRcGFzcDQveWd6OUhrUUMxZGNsTVdlUU13Y0FwU2Y5c3JXRUdPMzgzMmczb1c1bHNnVUhvaFlzMUpsSjJRYmJZWkpuRnV5K3Q2WTU4djNEbDNNRU9CazVkSmplSjdZYlRNVTZXcjQ1a0hIS3lSSnRQZ1VWUk8xRkwyREdTR2kvSkRXTUYyMERWNlYrY2pQWTVsMVErZStHRjh4dUorbVRGMEVKaTJCYit2Z1UwdEtmaGFaMHNZQmFaR1NFMS8ySEl1YnJEVE9ZeDN4TEwvUVdKNVhjdUY3VGtud2UwVE4zV3BRK2h3cXpvZUlFNCs0aUd4WWMxK2tXYWlCTzE5VEF5WkUxV28yRm1OMHZ0NFJhUTh4bWYvT01mZ1c2SGowZmNLa1RWQUgvWWo5WGdMM3RRcHlFUXg5OU81TVI4WHM4KzB5UDF5Yko3TStxalBRbElpRUh2V3BQaHBYRG44TDlvQXlrZ1ZCMkNOUU1taSsycUY3UUgwUzVRRWZLT2t6MWorM1FkeFVLc01MN0F0WjVtdzNnRnpMVWVPQ0J2TEhEWUd1UGhuc1FnTlhoZmJhcTF4Q3RScWNjSlE4aURsN2ZqWjYyaFlpVVg2bXB5VWdndCtNUXF0K2tYNk1BQTE5SnhBNVBRQjcxeG1DMEpRMTFRZGV3ODRzSlROTUZtcnJhZnJwaTlQU0pnYjgxU3Y0WVZQSU5JRkNaYXY2elo5TU1lUXgrUi9QdkNpVHoyeVZLZmpoYjRvOUxFSEJvZ2RaSlkyenp4VTV6b1YyeTRmNkM2ampkLzdYN2VpeERwR01vKzR4MDFIUGZWQ2hRLy90RXNIUEZxbXhua2FEZGpQVnFnZG5xdUpWTGVWbXBSYzBXcVg0M09XZU5zZVlmaDlxdVZveHVLTFY5V2NxOE15TjB3VmRmUy8zQ24rM1Bid1VobFlYdVprSUJqd1RZeVZjdlBCdkxwQ1ZXd1F4TEYyTzVqU3ZqWEtQdlVQT0pkVldlZWhzL1BWRERTbTVZVmtRMUVGbGVvWDZDanF3YVZ3bFo3ZlY3Y2ZNb3NleHVNSWloNkhwZm4yb0FRK2h5TCtaWVFOYXI2WmgxRGpjY0RNVHFoUlkxZFl2eW1Ndjg5dWs3a0tFNDRqVllST2U0VDVrWU5CSEFPbldBaTF0OGw2OXBFUnZHcVJzVmd2blU0N2UzQ2lqSEdRTUhSRFRqbERZS0NCbFZVajR0TDM4aEE0T05yUE10UXdYc2htTzI1QmhtQ3BZUWE2UlZRS0s2OGdRaVk5bmd5NlJNSzB0elk0Vys2UWYwK1orTkpNSnZRSmMyQjltNE50ZUNwc1RDWkZKVi9aRW9INlhDbFZ4RmVINlJaRzNGOGh2cDJycytNa0lFOHJ1KzE3UXU0R2p6dTYySFlCcFhTMkYvNWZreHZVWG5WZlF5ZnRjVlAzL21iV1B5ejF0QTNyb1dzdmJUWmpoZXg5NTBZd0NtUUVrVUx6U24zUDhnR2haVnZyRm0rYzAzTWhXUmw0YUptbGNHSVlPUnduSWlXOHZIcEFuTVFUWTdub0RIZ3g4Tk02VW1FR1Z0dDdnWS90bTZORzNOQ1Nna00wSUNGQjJxYk9BWURNbGdSSGNCNnIySWdKSTRXbVhrRERmdE1UM0s4M3VVQThtNjVOakoxUktLYy9MK290RndvL1lPakxReHNYc1RxeGFkT3BDTkVhZW5ZVE9jRDNUNDkyUTU3bG16Z24wUVYwcXJPRTh1ZWRWdE9ZOTBENUYyRlp6bTZDVXVkWVIwdWlPdFp2czNHcVkvQ0xFcjdsUWJRMDJJTWNwRXhnc0oxQ25ybnk0TlhJM2pYUWc4aFhhS2dHTm1BMVpRNFdsaFNBT3A1bkc3QkppN0l0ZUxjb0w0eGZKY0trRjJ5aTRJRmFKK2Ftb3ZSYTNNdXVMUzljN09xd2pEQWs1V29hMTBGR0xmNi9uWTVsZ01Gd1pieVB3ZTdnVXFEOWViMEtyWXcrdEhtOGIwMlJFNGlUYS9rU21EU0l0alVJcVlDanNZUkI0b2xMR09mWFFWS2xhQndhYWxuTkIyZ1ZRMFozc0R5d3A3UWpGMmpuZVBoUENXRTV1Rmx2dTJMTC9CaEJlRzI2a0JlWEljMW94djlRRnV2TjJHaG9WM2xmd1VQQkszRTY1Yld2Y0hFZk1taEFxZzhDVkJjT0g5UEkxOEtnUjBkRFFqZUp3b2E2QllMWjhRc1VSOEJ4eXZwb3hpSnYxaFJjWlgyU2FNK0FpYVNKekg5UnhXMi94NUxvVGpYSGlUZm1EVnZvZFM3dXhlWjRldXdzQ1BQNGdQN01HdDkxZ1hvd0x1dy9PYzh6SmhXOE1CUlBFNkZnS1Uzbk5XdFBIdmY3NTdwM2grRDJiK3FVWmtvdm1uQ3RNRDRzMXgyMWs4clhjaVFwbFBMT3hHOGdINTIyRVN1cVZyMkYyZWlPcGM1Ui9IVjIyMmVzM1dsa1pMZmJJTlZFMnYwYXQyeExad1FYWWZKTURlRDBwV1FwQ045U2F5Y0ZVSWQ3bWNSaE8wekNnWkVGOXNDZUgvSEl1RkI2SmtDcUUwT3NpL2lock51b3RBZmY4cmhWVWs5L2xnTzRzSlpjbnljaHpiQUZLT1VZbUozZ2lXalpuRmhJUEdud0d4ckhaeHRyeHR2NlNHeEtJY01hMzE4RXMxVnFqTDZ1cnZ6RkU2a2N0L3phcU5zUnc2YVNzdS8rSWtTOG1jbk9xTzFobHNDYlVINStFcXNDRXJZYlorbTFxdHF2SlVTRWUxWVYrUCtuaEdlNVdxamlXWWwvUmNXQ3d4V3pwOGkya0tQam5Sb2hueFROaFJiQ1YzOGVSczJSeGJUb2JRekt2N2xubGlCUFZGNStSODNKSFh1S1JlbElqQThCeE80TzRGVjhta2QxMjRiSUZyZnBBaXRDWXk3QkQ0Z0pNNjdYY2luN1VIcnlwMm5tb0VaRDlVV1B5elFyM0RpMC9zaUdaenhXMWZObkR1RjhIb3JvMnVvTWhxQVVHMHJKT09YQTVyL2F1eWpvMzcwbWhkWnVnT1RTQ3dZSm1tRVVJMFhpNy8zem9WVGpFUW12MGx3djBXNHFOdnYwa0ozSmxHMmVFZy9wZTk1MllvVjNZb2JaMnRwUGxibGZXekVKYXd0VTNCY1NrUlZlOGJrcGthWVRMUmRSa3RreFM2UVlSUmNNa3ZQWDhHd0R1Ujhjb0gvV2cwdmhpNkh0SmpjTVBzbUVaVFdZU3BzTWxEY1VSOWJLU3ZubDN4Mnh6NUpBZ3ZCVXBNb05vaE51SzNtTys5d0dYY0VkT3hzVmFrRFBhb0RrTC9JTkhjN3JLQmVTdFlHc0w4RnpkMUkybXdQNFdaTk9XQktFNUJiUXVpS3BpYUdIZXhJbjludFI5R3BZaDBuTWMrNHlPaTllSElWQUJ3eTZGVE5TS0RvTVdSZTFXTTNrUWhrTStpb0JXWC9Bd2pUR0srUXBPM0wxUkdUakVkOUdLU1JPWUpUb0UwWGliczE0amJEMTM2dFlJbGdEcWtGUlI1TlZqSHovMHpUelZvRFU4ODlyaTlIeUNRWmpTV3lRRm9CSXdxc212eXdGR2c3cW1penpNTG1TTmVrb3FSNlM0dTFia3F2M1pLZVpRK1VaNHFleGhPaW9xTXlGS1dBRkNGSjA0c0dzbHJqbzNXN1FyUGdreEZldDNhenp0U1JOTkxHejQ4c0hpOE5ZR3kxei9XbEtoMFpMdnhvNmNOVHMybStFV2tVc1FWb0JCNFpoU0NxcTNJZEhHYjJPTjZtSzZwWmsrd1F6cWRNRG9FVjZjdlJiVThoMkdTVUp2N3VpSW1uU3hFdlltVmM3NFd1S3dPY0dYYXNkZ2RBMzFoTkxPdkNKOG5Wam9vTTVXODUyYkV0dHVEckwrWERaNVJnby9QZmN0bDdXS1Z3SktNZUt3SW5pYTFjRDhaRU01YXdRWjlBQjUvNzBrS3MyRW5yYTJSUlJmOVpiT2RNMmdjTjVmWlJSNzJnMjI0SzlCYTBUcEtyL1doWDd3QVRQM3Uvd3FDamJzZkhHWkZ6NWg5cWxhdy9OWjA0bnJrZDJhUGJlbFhVeEdrbGttamQ1QXNGRVJRYkI3a0dhemJKSEZ6VW1rcXZMK3VNRy9Yb2RpaElwaWFnUngxWmIvMnZaQlBudzh0bVIwU2RTekdTTDF0eWdVYWF5ZGV5NEZrYWVDYjl1c2s1QklVSkQrOEhIdU5taXlpK3ExRnFqUnJKcGRmRU9vWmhQTEVMcHRKa3VuWnYxL3JJREdzNzhMVnZCR3d4TDJVL0NsaE90dE5HOGxJOVk2cDdDMzdPdW03TE9GU1oyVitpN0t5L2JHUWYvMjNvclJqQ1hqK1ZtRk80WG4vV2JGSjZDOUZRNVRUcXQvTWZ0SGpOQm9uTEdOVXliOEdhSkJEaXJTaHFRN0NtODBEekxiaVo3em9VYXQ1K2lzeGhPRW8weFkxdlFpTW1PMkJHTHFkM1BLd3Z6RkF5eUYvSzEwWFdKMUZnS3BjVEFFbHYzSCs0TkUvMWZFQ0lmTkUyNUgrQkw4MHRtODYzbDRKZ0Z4azA5TlN4RXlzYVpKT1lkY2lKMUFPK2xQcnRWZzFvckhTdjg3U3N0VHBzN0ljcHpsbXhqQmJvMjdUUGtXZ0UxVWM2b3VPMHVYcFFwSFgybEptQWlvQ2k3b1JEaGZXbXpPWHlxTFFuNXpRRHplbW0zcXl0ZWg2WXB2MGtWSTRBaGROV0t6QlhNQU9kb3pwUnhtTmJMV3lnb0xVSStvMmtNTUJ3djJ6eE5taHdTZTZjaFRxalhjOWpVKzVnZSsvT2o3bDlTTUYvVS81bm9tdmdqNkovWWVGRXhud3hzQTZ6L1ZmR1dIeTlIYWRTZkpLalhGVkorUFFXVUxJTS9pcDM3bElpckJYckdnVDhMSTk2M2xaUE9DT2YxNytQdWF2VzZPY0srWlBPY29zRktRTmMvZ2V1NkFiL2ZaZzRNMzcrZFVuUFBNT09ETEVJcWFSZHNITnVWVnQvTFk3TTVYMlAzU2J5aGpJb3RlZjFnUjJNREZaZGJmVEdEM2JoSmdxekFJWDlPWnZiVmU2MkltWk40SXhsaHAyYTJNNCsveFl1aVpBdktDbXlYeHBpOWY5RDcyYm93bCs4a2prdTgxSG5iZWhMa3dmVFJlbVY4MENQM0FnWktVMklOdzJmT0lnNG14VDIra0cyNzlLK1IrSlZMSG5wc2U5MnVtSVdzWVpvM0d6TENkMXo4SisvY296R3d0U0hwYnluM1ZXL3V0OWlNMndLL1dyWkVBMDgzdGpzVmV5Rm1SUjl1T0tFTzRldkhuREZqaEt6M3Zidm5vUVg4dEMvNmR3cnBqWUQ3OXpRNGJyREJ2U0JSYlVFK3FsWDEzcjVZTVVzcCs4U0JpaGp6SWNPNXpucXgyMTAycVJnQ2pPcDlvb1piWGI1eGUvQmYvMnpiMTNVS21tSEZodHBtSEsrejBEVy9tbnFUMmFsMUhxM0tmVzN4RnVrT0tJcG5HVC9lSGdld2EzWEhScnUwQi9mNG9XMDFzaHJKZXhjcDdzbG1LQTdvWWI0ZTM3dldUVGUvays1bDRSS3p1YVdWZnN0M0JpM3EvOGZTTUxhdWZMWnVFSEZ2R00zWUhBVElWZzVzZ1hpeVhrUVBGbllaejRFekJyT2xzWjRCUTk4MVRKNHc2cHpaTSswcUt5aFpPYW5jUUhZL2grcEcvODlXaWtzZ0ZpR0ZQY0hZTnRaT2dpcUNDSVJSVEdEUXYwWVJaeVp0cmkxYkxyOGRaYXBpVFV3SkNXZFEvb2FsY09NaVdoRC9wbWdkVnMySjhrWFhvT3IrUUR5VnhDVkwwcHlUZnZTdmdvSUxnR1lEQk9yanNSZGs0MWN4TXpuSVNtTCtHR1VvNGQ5TUdURDBPVmZpaUo4c0hNYzh3MDJmUGpWcitFdURoQndHMzZJWHJxYUZWMElKaDV3YloxOXQ1OFlmUkJKVkRrRDZxT1ArU25HSWxSSUFtTzVYMHo2SnRkM084Y28xYysrdHVObUtFS0dvY2lNMlZxdWZDRlNMcE9UMzEvTkg4NjJlNEw5ZG5iYUs4ZG9RbHVEajZaYUhjbkZHYUsvckozM25paVFJdFhXRGE3TmhhcHlVdFYveHhCNXZnVTVWUk10TkFUN2hBM0RtVDlIME9rMU1LdDQrck9qdVk0R0dxaXFWeDIxVXQwT0RhZkNWTHp6T0trckRscW9OdjZsbWJNd3pyVGFvbEI5TzNLOG5YdU5PcHZZaHBnb1QvQy83bHhUNDBVSDk0ZG0vT1IrZzdhSFpwM0g2MFg1MTlTbFpFdFduWnEzVXlsamI0c0N6TE5xbmlXcWxLTEhIemRsLzNFRDAvS3krV0VkUmFmNHFVSlJaMU1NVzN4RUR2Um05RG0rL0N3YTc4bkNsdUtCR1k4cUhXY2VOUTdEME9rZ00xZm1uOVVjV05SSEpaT1dUVUwvR01qbVRjY2d5a0p5THVVdlQ2QTlwNFhaUDRsajRtdFU1a2JpSjlVZzFMS3BpZDVHVjhzeGlkK0wvT2tYRlFIRlVtaXdBY1VteS9SQXo4THVrbWFFdDVTTko5Ym9BUlM5aGZyL1VDRlZRREpMSUhhREFGb1Eva3pHVWpJUUgzSTdpV1ZlSHB6Q3dGdFIvVWlJY2hsSTJSek4rQm1za0hVcm1qS2UxQ0c1bngrYXNndG51T0tTVjVoOE4xMTZZZlc2NENLdk5CanptSkMrM0NydHRGbEZ4NWg1RjdRd21zQjZyRTNGeTBra3hVdmtqR0owZDlPd082SGNHU1VPQklwQXV3UjRHd3l1U2dOK0RqNDZBN0xOa0tQcjNaTzluZFYxak5LU3JRSndBalF1NmlIL0JyVTJoeGcvdnV0SlRkQXpGcGVXUmdGVjEvQ1BsdHFja2xhMkx2SWtFYk9IbGNKWlFLRXI0VWxYOUNOMzNlS0JQTEV5V3haN2Y0THNnT0ZKa0xVT1NubkFpRXVoN2ZBN0lqaVdac1I1aWxVYTNzcWovangzejB6WVM4SEh2d1pmUXVXVmV6anNmRitXUVlXVnM0YWpYeDR0L21BQ2hDRXRwM0RNeVlPeHlJRmlWaW83NWFENzNyVWR2L1pQajJOQm1CZDhVR29NVDhXV0xOQmVSQzNMOXVZTnFrdDZpa0hlSnlRZkJxMlkrVTNCZU40Y2E5cDQ2bVllbVFZKzlQdTJlQVlPcUZGdFc3a256REFwRHlWVHFtTnJwSGErUFUvTWJybDVPU05RTWJNV0hxZ3pTQ1dzMFhNSU5IWUdEVk1kSEVDSVZGa2txK3YrTDBmRlVVNks5eGNnNmRzN0EvOXp2TlBKUEMxNDhKRFNXWWMwLzF0Z0MrRnhtZVlKRERqWmlFN0t6R0kxWmI5V3lWYkEyNCtFRVdVV1FORnNIbTN4RUdWQTd6ajRmNG54ZkQ2SmNhN1dsTE9JOEJtOTc4SzcvdHRabXRhY01wT1FjL2RGUzNrRllEbGhhVEpZTGZBWE5CeHJuZVRUdDVJckRYVGhHWkQvVHErWWJMNm14NzZhRWNaNTU0ZkhFdURna0YzaDBxSUx5M0pLQWtTdExTTEtSTno5Ylg4Uzh3U1ZMRk1ES0NoOXJNeTh0RlI1ZmxhQnpQR1pLL1FNdEZUTFV4WSsrZXpFQUNjUm02Y2pEUmd5TTc3SGZabXpEK2FEQjlSRDJFSStsSDNOZnJRc3l1QzJScFFieWhOdzJ6eWV5MWZzRUxKcTJiZWJzcmo5V2c5bjBiOGtUU2YwNWtGdWtBY0xucVRxOTdEc0QzeHlnRzBKNDdvOXp5TmR0ckxkZSsybmtSRWE5QXRqQWxNTjBUSnBhbDVrNkhUZHhObzZJY2lwRTNXSzl0QjZoVWR0Rk5DZkhPOFVlQS91NCt0N05LNmxacUxrRE5hczR4Mnh5TnRBQklTdkozZHpVbUlDa2xWbVZPWnZCUXhXWHFSSnV6K2Y1ZGU2cjdLY2llOVQ4VEg4U1ZoSE9KcWNNN2k4RDJuMW9FRWFPOHBkK2h0REw2YW5PWVBhcFgrRGpaMzA2M00ySDkwaDF6aStyQXY5RXh6OU0xWEcvMWxKaVZPb0dFUDdKemx1NXMrb3Fsa0cwRklqOE90Zk5DdFZ4M2Z3T05vNFZXaUh6blRUTFZjaGdPRzVLai9TdWN4YU9iRnkxaUVyV3Y5dUJJZnp3L1AwY1VITlJhRE9RUTkrd01DTjltdjJVZ2ZZQ1NLejFXQU1Kb3Y2bE1CQ2xBc1RDQWY5UlV3WUdIRS80dk85eTNtRnlvTkR1c29yL3VQVVVLM2RKSEVEUDZWR2s5bStUVTRzdkV5dnU2c0hndjQ0Y3AvcWlTeFVCZFl4NGYzTnhQT2ZuUnMra1Uxd2ZFYTJXdWUyQVZCNU0ydy9IcTVmTCtZRXNUU0Evc2hYWGlSMUY3bUlpZXR3YXBRRUlqY09XQXV4RlZJcUNqN0hTa1FrdS8wbkNMZlEwVWJMVmJ1eUZPcjV5bzNOUWVOcHE0d1hYMEhpS3F5b3JLRHBsR3FQK0VyTHpseXRjTy9SQjVnY0RqM2ZXQzNRdUdPRERNd1RVVmRBQkswZklkV0RrcDlrUk9nUTFJVnJnbHlYQTRQVzRxUXZLdHNqOUtOSHdvTWM3emNhUmhxRHVIRUNoSlZZQVY3Uno2dWQyRndsemkxMXR5b2ZBd3IvVWpCOVI3NjcxaGdtNGZsSGo2b29EaXpsZnorQXVWSjAwempVbWI0bFRwY0RXOFpRUkRVNEdDTzJCWEdSL3d6NU8rdFRkNDJTdDc5VzZESVRWaWVUMXNpbFNWNk5oRU9RUXdBU1pWSldTSW0zQjR6U3A4WU4xYTZBcXVCZ0pzcXNha0hVOFZFdVZGWUtKaVNOUjFkYlF2TjN6ZmJUVENibDNudkYveUNua3hrR0VpencrMWdESXdGZ3lrcnV5bzJhdzBtb3R1TjhTeEFaNVppUWVRMGp1dXlqbHBmdW5CNEpOSVpqNWtaMkV5L1lLa0F5YUF1T20zNi9vUXkrV2YzempNZVIzZXI3NS9GYytTTnk4aE9ybmpES2M3RGxJMTMreitLYWRYNXZzeDh4NEdXTXNVY0Z4SjFwV1ltS0tPRlRTdkI4N1hLSmkzZUhsS20xZUVkSXVDVGJ0K0JlKy9qZTBTcFQ1UElEWDI5SU9FaW04MmgwUlR0Z3A0SENTcExMZFZTU2ZZZUUrN1Vub1UwSG9iOENkb3lRTjF0cTJsaEJMa2xKcGVTN1ROTkM4TW5OcmlNand3RmJFbUdBK2R1V3diOTIrZTJ5WEczb1l1dzE3b2tyZlY3QldYSHZwYnZpY2NZNWFNbTFYUzRhaDJBVGcveWt3aW9iUkJLL2dsQ0g1UEpOMjl3cVJYSWdOamhLWHlCMklRSEEzWFV2bWVtSFp2bWM3bkxRQkk3d0lJeDFkUVMzRXQ5aHhiaDBBcFBlRWZ5WXdqWE4xdmtJdTAvNWJZa3dhRjI2WVBoblhiZ3I3UXlMV2lzK1RMcng1K2UwLzJybHVkenJ0cDdRQmdENHNUbUhtQWVBTFE4ejVwcWI1a1ZrV2NpMWNOK012bFh0Z1BWRHhMMTdseTlNWGJLOThiL2l4WnRWVjZqR3Rud3NVcmRESFJXMVpnOE1GTXlPUW9TZmhaSW9ScytTeWw3QVRpQ0RWbVBUSGhacS9zWE5mNTZpYlNiYVBmaGs3dUsxZVpxaGdDSExTeDJoVVlNWWJJeGV1SXJmRXdYK3lKUmx1Y0huNHdaVlZySVNwUlFXaWI3V01TbjVXazZ6WnEyN2JLSXlnSDNURURRQTlreW9QUVB1Qzd5MlV6eVNtK1B5NFRFL1Q0cHROMGlpdENMMUt6UklSRGtFb0JOQ1R2S29tY2lOcDdic01ZeU1jZWo2dVBVMHJWVUhJYjVFUFZVWk9JUVhMdHJZSkV5Z3FRcmdWbFB4YVcydEZydldnNVl6cU45blFPM2YyOTJheFBST0haRjc4NHNjaVNhekdzQlcwZFVyUTFSdnJ0QnpTL2hScmFvbk91ditoMldBQW1ZTVF1UmF2T0dqRXFPdWhzcm5weVR1bVhqSklxVHNDdVJTQnRYVDFkR3pSMGdkQWt4M3NyMnJ4cFNvNmxZVmxuVXJYOW9MZm9tUEdzYWx3dzVyZ2V0VEtxeUZEZ0I3V3daSmlOdXBWK3N5T2FHUEFWV29xZzdJL2VRamt4SzU4NjNVM1duU2xUMUVJblRxWTBmZEhYY0xyalVIb0RodUl5TXJ3d2QzWEQzUDNZdm9HNXhPN2grMlpVRC9Bc1dycm9aU2xQYlp3TFpUUkU4OHdDdEdmWStkWUs5ZjVXL1AzQ3lOYVFUZVdsWDRNZmQ2bU9oTm5HYVVCRnM0WWRwdDR3RTFlUHdEUW8wZk9NRWpWUk02NmZVZjJiMGp2amthelJEYVFYai9WRDNuZk5iMGVpK0ZZQlVKYU1rSnlmMGtUMFJQNXd4ZXd2emVCanArWG5oZElJTEZjTzNxeGhoOHpGZDI0dTRZRk9OTXM0dU9Tak4rUXczYUswb0p2S3plT3V5bmZIdEtTK3NPTVJMZEQ1aW91NTRNWDd6U1RNQXVaeTBnTEd3d3hXbHVDWVB2RlBaaEx5NDlRMWw0M1Z5Q0ZubWs5enZqUlZldVBnT3B0M1NNcjJQcUxqRkpLRjZGZWRXRkRGTzZYN1VmRDlxL1REcFB4V1lYVExaRytCN0gxS0lzanMzcXlKWEdQanlBYjJrQ0ljbG1sQVN5a25zSlJLUit1SWVvdzFGWnNuRGxOVnNGa0xlOEFYcXM0Ujdjb0dScm9IaWhFcU1ONVMwelc0dVBDNGxoVm1Ed2JPUXRSdnFySzh1RklFQURvT2RGL3pkMGFCZDduSDB6WkZkeGdDU3plRTF4d3ZBa2hPSVFqTEsxcFNBc2VKNytZNWtod1EyZGZYMTV4bjFhaTU2dlhZYVNRUVNoakxuT1FaYk5NdUxiY3ZYeUlxZ0NzZEpaWHBIN1d6bnZYTHovVzFyR0xUT3NVdkZWUlNORmxvdCs4Tk1PNmZRdkVLWGZPdnNzUzdrSHloMlZCaDR0Ry9tekNQMXZhTG42Y3RncGxXd3hLdFA3Mmo3VDBOQTkrMGQ5bVRXckJ0eUQrT3huTklkRGZQRnVULzhUZVEzQUJIMEtrVHFocDFFKy93akY5VThVOWdZSjZodlVIMEx5SXoxUXBrUXBMLzZia1QxL2l3Mi96QWlZY0hMSXhzUVlzd2cyN0g2TzdHY1poY0NJTFBaUE1zVjNaVmduVXJad3JkNU1obDFrbFNpTm9BYWhQemp0cGVsSGJyUGZmYTZsUHdyZS91bXpzU1VmNmxJaVJibkdGOWNGNVNHaTdYRVdpUWdOc280VE5sUGtRMHJZVC94SWRSUnUxMy9IbVM0TG04N2E0WVdRVi9iZS8xdktZK3U4cUFXQlVDTnhvZzZ4OUdwQThScnZVN1BFTWNOSE8xZUduclBaQmJoajZCY200RTF1akhlMERKczhwL2NoSGlmUFJsdHljYzR3eHQ2TFMvWmJQODlJTWZxbUFXTi9XSE9TTTFHbWZKa0tkZ1A5cVBGSVlzSS9qTS8xSFIxSk8vck1XeE5VejNhS29EdjF1QmZ5ZFZ1aDZteE1KbkRQWlVVSEhrZ2pXbVZCbGNKeWdBZGlZckd0SlRnUEdHSjR5cmQ1eGsxbXBEQ0pyVGpkS1laeG5jSzBSeFF0eC9zcXhNcUltU3RMc2VOTmhLUWR3SkF5aGk3Y1doUFd4ajlzTGNmRHBoYTRnTUZoQ2kzeVJldWc3bWNwNGNJNmxXTzBMT1FGeWlMU2h4TGlOTlNabWYzZVN3YUtRejF1VlN0TG1yRXVKREI1OHBWL2Y3R2lHeFNQejR4ek9GM3BxV3NreUQ2TG9ZMHkxempBWWFUZWJKcERPN0pXNXhUUmJjVDRBd1ZGY1dCVWZaVWo1NjM5L25aV2lyajJWS0x1WEVTc01iWmZGcmROd1VxcWE4NHJqVW0xUUswTUJON1NxaEN6OUYrY2R6elhrZ3JjODZaRFcxN2pTclo0WDJ2OFI5U0lzOUlJVFoxR1ZOSGh0ZU5VRmsrK3JubUdLMlozTHJCWnl1MUhSZnE4YkJqS0NVUW1td1k0ZEtNTWNnRGtrN3VqN1RvUTdtdU5vSzlhbUNDVExINWdiSy93Mk5lZ09Cd1hZNFdjWXVPVzVlMkZ6bitwU0hRMEk0YlhaOWtzN2hLK1RIV29FZUt6dXBqaTR6a2RqR25ydXY4bkM1RUNwS1hweXZ5dkV4eGdnRlprMSsrZ01XNTBoWURZMGRUWXJrL1pVTFArU085dzZsUXZFSk9VYWtLUkxnOWtHcUU4aGxkbi8yekNjdE9Tb2kxRFlLa0txYVRNRFJIb3JxWWFMbmc2c1hsejRVYkx2cDRwRzU2R09kVUZVYzVaRVVPYkxuekF5K2ErZWZUbERkSVBnZ0tTVk9xTUxFK0V6THNwc3kwTG9tU0xFdlQxVS8xcXQ3Y2liaFdCdDVwNzFVcW8vUngvZzFkTXNyYlVRcTdTd0FmeTY5TFhZcENYd0xKRUlzYWVlRmx4UGpJZkZOM1BNa3lIaXpCMkROcnRQeEJ5UFpGRzdxWkZNWjVqUTdST1d2cElaSGw3T0JKZzRZVHJORDBqcC93NE96bGdaTFd5RHpMN0hFZXlqNTkzdVJvSVFvbTV4OGdpdGhabFMzdVJXV3FZcnV0bFVIOHJJblI5OHlPNEJ5R1FMbzJTUTBncmJvR3pqUTF1bndqU1FpajYyUE5zNXVqdTgrL2dIU0hodGFTWkRkNm9kOWVoYks0dmE3ZFJWL3JuWC9YYUJRS3lQbzVEbG9wN0MvZTZ1aDF6U0xmbGRTMlZJTGdXK1NRdWdlTEJXdURvZ2hKMnJiZHRPdHpTei96N1RkRFY1Sm9TVE42ZFU1Vld4UEFkT0c3V1hFQTV4U09ZQVFXZGZJaGtTZ1dDOHZZWlRTY0RYbFExUnNuRW1GdEdlT0tiSjl1YlRYOFlnYVQ2cGUvZWhySWZGZlBCSzlSOEZqa25OVFovYTRaL0RBY1BnNklIMGNiL2F5M0RVV3JzNzMzTGp5Q2szVEV3T1ZRYTd0QWI1VzZYL0c0N0JLenNxV2lITE4yVTBXZG5adWFqMGluUFNlaE0rVCtVOE9sdXVzNFVScFJQNDM3alFlTHRBV2dVZ2ZCdkowUWM1WXhPTTZ0QnNyWWUxa3NMMEttS2UwSzFHbVltNVM5Q04zOW0vUXhkYUZxZ2dzRHZwYkh4ZlByQVVxZjZOMTRUbXZWOFhDSSt6endpNURZbTVGVXdNYUF6YlUwTFZpVTQ1VGFLa2xxTG5lN3hJQjFiUnd2VXVhR2xXTjIrdTF3UlZTeTBxcGJjWmM1ZWZuWlVzMHFGUEFPa1dHNG9ESUl0d25MMHlpZDZkSm02aU1XZE0wVnNDOTlvM0wzQXRHcUltdlpqLzBGaFAzdEFXS21BNUJmZ0hPVENLWExYdGkzbkxXQm1HVERCU3NjdUp1aHhFTDJUMlM3bVhEcExFc1J4ZXJ6NGtqUnhUYXBDbFd4SG96SU5YaUcxY3d1WmsrR2ZydURza2Eyd29rdGtONFdEcmpGb3BWaGQ5YmwwWWlKWHNuL1B6YjhUNzd5WjJXdGpma25wTHdpd2tndnU5TVJHb0k1UGNwNmZHNG9zcVJVakJOTzdMS1hiK2NFcDJ6eFJKNloxQUVMZlB3NUpmcmd3dkdBNFdOelF5TFE2eEJiWmMyT2psdmxPeWMwRVNZUEp1ZVZNK2dHbU8xVnJmSzRvS1ZOQzNndmVXbWtIb1dNMlZCTENNWTFjQUVJVGxNQzQvY25PbFJtT0EzTENFbmZXd2tWNUVQNGR2U1h1NTNyZzAxMm54TU52R0tVVkNtdkZsOWhkVUc1SDllUmVIbmJHUk1jUFp0MUxvd05FR1M5Wjl5Z0l0ZFJEQWtEZ1JsSUJLZ3Q5UkVMN2ttRDJVT05GOTN2S0cvWFFNOFdzSjdua295UGZRN0hMQjk5Q1RsZW1DZjhGZzRzUS9wNXo3ZHBhcFZydWNxVm81RWRCVkZHMGk3WUVxNS8wbG0rQVVGb09SOTl5eFlpMitHQVBCS014QWQySlIwQTFJemNnREhqRnVFZ0RpZHJGWjNQQ3k0YTQxMll1U3dtTnNHWUM1OU93SnZYVkJZZUlTTEdLUlQ4ZVloenA0c2lCbGNwZkRmeHhQUnVkcHB2dUlCVTVOZ1Q0YkY5NU9tWU1ZR3FGam9obHRhUTNlY1ZWTXhmZ0lTVjc1elBWUmRKWGR5cExKSExtZm9mNm9SeUE3OE44R20ySWY0MXNUWE85WjRsOWtNeURXUUxFdllGNHhKa05aSG5KYjRtWTczdzdXUjVub3hYczRmdmNhSHpMOVhGbUk1RDJSWW1EQVNJYUdFTTVJNklCWndFVi9La3IweUgzZDNhUWR3Q1RET1kzQkVCbFV0TjZDZ2V4d1hEL1pmWW5jSHpQZEZ0b1RtaXY4NFdLUW9QL0FpYmR3NDBpamVQQnAzV3hYUTdRSFNOc1M2RkZ4NmY2ZzBsUk1FWnVJaEhJZDlpeW1BTlVaMG5zTXl4N1hMRXQxczVXU0RtSWp3QkdrK0VZR1Y3ajhoRVhUUXZLV3hqbTl2U1FaLzBqejd1cStKUzIzRmJhbFZCcjBMbjEveEQ5OTMvdWpaS3pvUlNJRXdtcHZtTm5zMFdBVmUxZUw0VnRnQXpwQnJSU2RscnBPc0NZWHpOaFdTMXFvUU9jVjNOSlkySGdUdmtvaXBlWXc3WWltTzR2bzBNOXo2NXRENS9WVExIUWN1NUw0ZVRiTGdCRk51NFVvSTFDYjlMaGNHSnNySDRDYWNpTFVwR2pZUzdxa2RpclBCUklvaWZIOFNkS1J4bzBvMTdVNmo2VFJpMXY4QkR2by9rN25QcjVnWkR2L3hKaDAwWlpGc2tSZ3dXeS9valBwQmppaEUxZkVMOEUzTFRaTGh1SG1ZSVN5d2ZveVF0Z3d3MTh5NHlKTmhRZzc4eUZFbjNWMmgyNnV6SXNnb2VESGgyNldBVTFQVkxsRFNtaFdaRjUvcEZlZkNvTWV3eU5maERsYktMU2oybmhNNHN4VU9IUVdjWkJBbVBsSndmNWF2ZlhQNkpUb0FxYTEyMFY1VFpEcyttYnFxcjR2RllwUDFNazBHR2F3a2Zub3lTU0szQ29QaUZEaGFaRU8zS1djYnR6N1VSOUdiaXdnKzFVZHJUWjZMbTlwaDFIa3dmWnNZTk9QMlFsTkNhalMxdjlvYU5IYkE4TnZiZzZUVkViN2FDT2pGazAydW5VTWhnelhXSnBlcVMvdVF2YzNWUGY2Q0V5b25FYW1Ub3V6dTFiOHNDMFZHbVh3WWMyL28zMllQVWM4bVR4K2F0MjZJR0lDL1JjNXlja2xPRmtVcU95WnVUQmlIY1JueG0zVDBvandHa1QwQzlIL0xUWXh0aDZURUxoaEJSQndVUWd0djQzWnMrUlF1cng2Z3ZmdC91N1FUV3krN1lIbXdIb3YzWGRSS1QwTDJmeEhqaE1HakpzMXNQSlNrcVNDM1Jod2MyZVA2K3JRN2U2RG01QTdPZU1QSUxOb2tVTGpNTW4ralJybmJSWVI3R1lQMmMwMkZZK0ZtZStaTkd1ZFQ3NHJVN0JkRHlOaTJLYUdQQ1N0Y29zZ3NhNWdZaWk4NEZydFlqRWpyZmxqSDVNTEluM0l5b2U0ME1oOXlFZjZXZW8rVUtaNnlMQ2o2Y2l6eFhMNS85RG9GYm96TjNvekdqemc2bk0zYmZRVDFlK0Zqczdwa1psYkVWdTU1UFVHZGs3ZjNxaDZkZUZDbUNyK1pxZXZ2NzVIQllGalhWbTd5S0o0eDZRQ0VuU3NKRGVKdHBCODN4Rlh4TEVycmtUTCs0TUdwa3Y1b0E4UWtXU3RmTDl2ZFo1TmNTZkhjdTN0S3pFbE4ydWp0SlVSWmp4TkFxSmRDUmRpYVFxbDZyUHNzbzdSSU1QUTJsUjl3b25XMko3Y3E4NmdmVjc5OExDQ0ZwQ0FJNkUyRm9ueFk1bGdDbmJUNDExMHRKRFpxWGptSnJMRVIrU21pTU5CY0xFNUlvV3M5bzdGZjBTbFFZUlgxbkhjZTZPUzZlTVo1V25MSjlFTzI3QmtIZGk4LzhsNGZmM1pxSzZCdTY5amhTZitlVitka2hGcU9VUUo5aVJiVmJDL0xzdlZJQm1VWWFWN2UxRk9OMTc4aEZ5ZEFiSC9HUUpibWcvZzdZZytsbUhWNnRsbmlRdXM4WEowYmNXeGhjVmNkUmUxVDhQa3p0MzNjWnFYTS9EN2pUdGZGb0JCVyt3c2QxNHhuWitxRmFRdWFQV0FmUmg2RjRyNllqUEFPbjBSODB3Y0x3YmVXVXdRcGYvUGl0MHh0YVFHUHQrcmthd1hPM0Z2OERLZTVxVFlHOGtyYkx5RGdyanI1N0R6Vmo1UmloWUZkT3NwNFdVL210Ui8xY0hOdm5kRHl3R2poNkRQRFJOSGhjVjI0YmZ5Ukd4bDF1QXV0cDBvL0hhMStuOW9XSHpPZkxsL3ZxUklrQ0tzQzh3ZVFueHkrSkplREFqRTNsQzBJSXVwYlRJd1A5SERxNFFzc3l6bWFIMmtuMlJyUXcvYzUvL0hHY2hzb1dBYkc5bHd3WEtNQ3YyNjcxVmZlRTJmb2h3ak5NN2pMMGJ5c1pJUXltMlBvTFFRdm13ank5bmQ1N2Q4dVRXNy80ZUpzRlZnZEdyRUNXdzVPWTdRRlVZSHlSTGU3TDJwRUkyTDFMM1FUeXVPK1JYSHlORHdGQkRrL0grNFdKOFpuR2dwWVlNOTdmT25BYlZrS3ZwOUFvNnk2NWdJRWNERGdZZkhtNEhnYng2VmMwcTMvbVNUWjY0Q25TUWN0bTlUMUQ3bGVqc0lvUVJ6dXVpTExmNERkdWJKOGNYMithOVFWcWl3NEs1SHRzY291SU83NFlCRU5OMGVsbXE0RzZMbDR0NVdMWWUwQmVHZGxJL3dyaitPb0MvNlJJbkMrYkxFblg3YWlFU3lDbVRGWXJBdDhlSTlvY1RoWmR3SXY5VVlrWWU0ZXhraGpQZkQwODU0Qkk0MmtCWDFQcnZQNTNMMFMxOEl5VWcveWhxT1F1Mm5FNjRuYjlRS0lqV1BNcWx4a0RwVDU5aytLTmVSQ0p1MVVWVzc3VEJKSWtrTFIzMUE1YTlEekVNU3NHTjNQZUVQWXozYjNLVGlVeVB3SWo4d2RVeXppTDE1cHpIWjE2K20vOEdZenh3NG1SQ3ZmTWlrZkcxS3U0bmNEaDVEZDlNdmxjREROZzh3cHNKYTBpOUJKVHdzZHBxTXlwcjVQQUdMOEtGY0ZlWUFuUUk1NVFhRzU2aVpSTllKRk0yZjUzV1lTQ3VKZ3IwKy94R3lnVjdCeHFMTDZibDZoN1lOWDZadWFqSHdNUjZQOG8vZkhwMHVEenVRbzdYQU9RQ3VuS0pyNkZjVUl0VDF1MWErSGNxUHkvSVRRS3JhZzIzbXpaSTR4UUxadnhPWXlHdm9vOVloOTl1bkdEQ2dFN1JqSGwyU3VyWkRnSjRPYzNmeEZpQkRVcENyV0h4ckxJcEVuczcwcUZxODB4M2N2cDRnL2I4VUNvQ20xZDBnU2E3eFhUVmdwejliTnpGZWVJdzhlZ3hjZFZxMU1kYXMxSHFHNUNOTVVib3dldVpLWVdjdU5LMFM0UXlwWkpnWXFudFo3VXIrUlRHSlZITTVUYzVUU3A3N2J6VisxaEdhd3hPRHM4UVNScWdyUmovSWFCVEJ1SVJFLzJ5d2tuQ3N2ajhyUE9yN0FKTUxQSW9aakN0RFJOWURhZmQ1SEsrNWMxYW0rN1hYK0c5eVBOWDZFVmhzMXgyczBVNjF0cVlSS0lVNU9ONjZzcG8vb3RXSEttT2hUN1lYT2hRWG45TmNhTVk0ZlRyemVSM0NjNDRTNXRpMEloVVJLdElKV0hDb2svb21KVUhVQW1oeTkzUWgrYVc4ZFNEakI3cGVhYTlXcFBjYU1PU21QeWp5bzE2UndSQS8yNmtodHhVZHI5R0xQMUZscVY0d0hPbUxHTFBhTkJOQU90QzBOeDFPVDRYVHIxUzBtczhPVVVrMUZETmZMbkRyWEdoV254RHNybFM3aXYwYVk2R05CU1NTaFNxL3dHNHMreHdNTnFSOWQyK2VLdlo5NGttVExuZ29xelNvRHRZTDB6d0JnS05HQWxOMmE1cFI0N1BNOWVpUHptVTNyU2ZWVGRIUHN5WEV2aG9HMUEvckNQUm1Pck5EMDJaTmF3TDZmSzRHNkV4RER0VkJNei9RMllwckgzZDFsN05ST0M0WnVFZy9qUWtiMU9pOElMUS92T3BIMk5MZVhsYnBFNWtMQmNRd1JLQlRtMVFxNVNKdkFHT0FQdUY5elkxTkU1Z1N6dFZvNzQ1ZmExK1EvSzZWY3RMaUdXc2ZZbE1PN1ROS3ZNMzBJZGpmbVJnellMbXpRekhyVVRGUXh5V2x3UnUzQmVOVjF4bHFrOUZwcWpqU3haUllhZkxwOHAwUi9GL3JCa2E3Yi9DeGZPaU5aNXgrZytCa2tqUXhiRk14UmljSmdZUXRaV1RIaTZwOVZjY2NvVHlyd0EydWVWQnZMVVEvbTU4OWk1K2ZMbElwdUJzQTFxS0YvUmdGWk1iNkloY1NiNExIdHF0a1VuK1VGYmhEU3FWdnB3Si9MbUlQUjB3LzMxR3RrbXN4K2duL0VJekZyM1FBK2lmaDJXaiswbXkxZ3NGWXdJZmZFOXZlc2QxTjl6YzNCMDhKTXpZWXBXaHQvaEhVcEZYdWJnOW96bVVOU2h4VU5VNkVDbURCK0FjQVlaRjhrT1JlcUFaRjBkV1BsSmgreGNLb2VtdDNkaVNmaTRSKzExY2Q1RXZlQy9wcVF6ZlhDZ0NiMkorbWdQTEVlYmN5QXZjOC85bExMTnRXRWdtOHVwU3drZXBkTlRXaUJFWmNmb0xhY3duRWZIbEtRNFRWZFhLNTJ1N1FkZmx6bmpuaTRaZlB6MDhMZThNL3JrWW9sZjJKclpRM0dzRmZUcHNSWWhxM1JIaXY4SHJ1YTMrK2k3SEJQakx4RW1ISVFTQmU1WU1vNVhib0x0bXBkNWdYdEhCZnpnR2V5VEhqU21BZDJqTGxxYXFFamR0VkVmbUorQTA4c0d0alpqR1pnbkF3WWVteERYclpROFFCMnM2MGtiZWl6ajE0YUVjakdQckNFRVkycGlHRmtYZU9IbkVjODBVb0o1NWdqVXZUTTJFQlA1UUdYa1pTc3FpQkhhTGFnVHRCS1k4MUcyb3pqWFM5WHA0a1NZc3BEMTluWjZsVENObG0rQmk1bHd5T2dxL2h4VkttZXJ4c3BycWhaUHo4T3pZb2d2UnJvWHRqM3ZiNmc2Q0pRbTVHdHo5RE9aSE5MN0hXS2V4bzF6VEYvQ2s1Z0t6MWxnREkyNjVBS1I5QnRzOXh2WW9jbms4U29YMmJVQU1OREJUZ3l6SVdTcmVhZGZvbnRJOFdKSW8yMnhISXVPWUtzYUpJcU9aclNSRXhya2FqVEYwWnBvUEI2WlA4UlBuUGxnTnJiR1JwUDIrR1g4WGpTdVNKYisxRlRQaUtVMEVQTkNBV1RLOVh1alRkc2g0WVBENlRDRE0xTjVMYjVidm95U0I5dnZWaUhxeWp5aEc0aWd0ZWVVN3ZHSDlKaUkyaFBoTGJXNkpPOEVjRUloWlRRUXhKWkpPSzNqSUhDa3g0QkE5cElsazY3WkFpeXRtMUNvdmVIY3RLTUh1WFJuOWx2elZ5NUdCQVJWZ3B2c0Y2Q0pidnN2VjVqMGdqWVZEcGFGWVVnQ3FoQzZrekpxbXI0V0xtUzFpUWMrY3BZaTR2bmxBckowZW92QWdZSGFHZ1pwWHN6TTFSb2tLRXFqRW5TQWRubVppcGl5NVhPRXBVRnJyTTZuOTh5M2Rrd1Y1dk5QU2hwUWZpTzNaSGErdXQrUHNJa2ptaTlFMi92Wms3NnBnTlBOTTJxUEFzaHl3U29VSEtSSERPYUJJMUprWStEYnJJcWJRL05YenRjVVpzY3BYMzRkTkhpaTVncFdxSnA0bzFsVXpQWEJ1alEzNFB6Z2JmRHZXOGptdnhBSjJJbEF5WTR1cktDeGZNOTFNNVBkY3BHVE9HNW1ZcCtTbmdMRTQ2MEdzTklpelpDK1RidWVNZmN5dmZoN2JwMGd0Q29KUDk0MGZYWFlGZlE0NUZPY21EYzdjbFZxc25DdWxmcCtIakI4eXJrYVF2TEM4c05ta3VqcTVqTkpFbTRMdnBQRWV6ZHl2MVdPZmVyWitRWXlEYkUvM1RWS04wY0dmdFFTbG1kNE45NWZHZmlMRE9PdWtpVm1sQlVXVjFwdVJ1bUZ2ZVpBQmFvV1ArWDMrangzOU9QRmt1M3dhcGZTOThrUFN2K3hXa013b0p6MnFNM2s5aWZLMkUzZDE5WkdWc2Zaay80RWZEUWNJQjY0UXNuRGlRK2pSMEFteDkwcWhaNWdDNXFnSXJFOGU1cUt6enJDY1I4aXloUURubDZIREhIQUlCWW5zaUFXdDdnQW41eDlzTWR6OERhUzBjUlNDWEhveSsyaGZiTkc5SEtIY3YwNkxqcGFoMTdZQ2dxelBqRDJiY1cvSk01emNsYnU4RkJqQXZidFREWHdWdVpDWjhLZzNRTXU2OUc2cjJickhYV2V5ajdqclhXM2RBVmI0anFFdXlVR3VTR2pFQXNJa0FzM0E5akJueUNVSmtNSE1qT1FJanRxekFXWmxyejI0cEJLdTdSMkpqMVBqbXQrSFBObWR6MHlRS2IwdkNPYUplNFk5Y2VyOElCTDEzZFhQME9iWjFpM2k4L3B6ZWhjTUxGemhMdEN2UWk2c21DeGxXOHBoNTBSWXZ0c2traUFFaWhNMWNadk5VNWFYbFNTWlVmVkM2WXpMM010YTlGMldSLzk3d2sxc1cwWHkxTDRPQUMyYmtMOG5sWG9OSzgzc3FsZzBXd0N0ck95eDZmN1hSWWlxbksvU2cxL0dtaVRrS09GT1c0Y0dqWXhzYkNRZmwwaUtqQzAvY1lrRExrb2J3cEZ0bmtGejNPWU1pYzNjZnlYdHluQVJhOG5YbTZBYStEZktsbFhlKzlwUG5NOFdBQWhlUEI3TngwWUpvakRvcG1wWmR4N0IwT3FlL2hJc2wwVmJQVFdyZlB2S2pUUk1Na21CMkVEMEFqemxQSFJoTUpCTllzeTVnV2hObElPSHlHalZ4Y1doaURPclFHUW5XZjg1R2dmWXpyZ0M1UlBkYjh1MnhnOTl3VzR4L1pld2p2aFQ2NnVNZzQ2d29RaXVKenBSb2RIcHZQblhXeUdIZXhONzdVWXNIemgyb2lOWnFaRHpvQTRlZzhNb3FMdmZhRWNocldrWHNiTjI2clk0MEZlQTdrWVZpeWtQRjV5MTVnY01QY2Jrd3lQcHNZTUR4akFjY0I1a3dob01VdEFmTjJ5MXhpMVp6YzNjb2RIdHNycWFmMDJicUgwdVdJNmxXZjh3dWFRVXM3VTNHT0l2VkxaanZMODRGNVdWVXhzY2NPMzVqMjBoNXI1eVZjVU53b3hmYnMvbitucW40d2lSbUFubmlseklPUm1QWmNEVHJkUHoxZXVWL08rRVVDRHJnQzJEZ1k0RlI0U0lWOHB0UGFqTCtaUzc5YzNOaURDeit6c0ltQ3ZIVUNISUVaUWxqdUxvckJnUmdLSW0zV01GeGFEZlI5aDRyU1VzL2N6eU4rRmo2cldGWjlHajdKUTFnVEZzeDNFTnRoUWVPSjNGRE1lSDZ4aVhxMEcxVmFXQktuL1d5Q1lZWUhvWm42WEo4aW5YOVZsOUJEdGduTmkyUGJsTFl1TkV6Ryt1Z2M0eFZ1empsN2dDWHdIWDFmTzFNcENSNHA1Y3FTWlNqYkFJcEw0bktTMGFDUW8rOUpKREJUQjRpQ3FqVE0xL254ejAzREhtYWtsRXl2VmhFTXRRM3l6R3pkSnM3SWRnRHl2RjN1TFlobFc4cHJsVHdGVWxXQVc3c0dGWjYrVVhRcGFhck8wc29LTEwyRVVoNitvSDVPMUttSnFTVVRIQkw3Zld6UGY3Tlp2ODdNOUJZSDJCM1pWN0NIQ2cyYUhtajVtVFR6eXE2NGtjMjNFcWhVeWFzWFNFNGZGWFhUQjY3cHhIaENXVDBmckZ3OU1PS1o4NjgrN2JMWWMrYjdFSXduYzAvYUQxZW1VWTZSbkhzVzdjWmhwbmJxRiszSlhrekFHSm9ncnJOSEFVanN6QzBNMVBaYlBTcnBlZGxrS3FjWEh3R292aWl3S3FONGdwSlNVbkFtc3VFR0hRa0RRY1YzaElCdytZMVJ2THZ0bktCRmNmNE1XVkRnL1pWbmFKazh5S0N1aTZGUTdwclRZMDMvTEFsbmZNZ0VTRmFYMDlNNHBCbnhYUGxwM0ljeityclJVTkxPZUZRdkVtamNDWDNTNlV5MHU1aDZVN3lESWpQSzNldjBTZ0crcTN1TWZzSld2VTc2aUI0Um1TNUplSkx3dU5VMlBlZUI0N2M1eTZsWmxmcXZlWElJQzdkZnVWRUJ5QTBueCtFMk94R2drUUxiRFhSL0ZRWE5JbWp1Nmp4UmMvUzduTXUzT3hkOG9TU3JBa2hmTXZCTkI1NjdQMXFkZkxrRXM0eFk5QTNOSW5RTjI4V25RSXpnbHV1WmVoeTRobEFNMk1EWEpRYWEyMHJWcGV3bm05aUpPTjFRM1l2SVdvNmxmZUEvMTRNZzZkTTA5SjdmRTR2dXA4YTBCek56VUxBdkg4MXQ5WkpCeFoweEUrSm5TUzZrSVkrK0JiVGVkU3Z1MHBRTXdHV0pIWTdMS3lULzlvVGxXNSs3b3RseU5QcXY5NmNmT3VkbnFyaERDOHltN1FhY2ZEc3F0RVFQaTFOd0lqU0twRk5oTVZmdjE4ZXBnN3RObU1Uc1owVlBIMEY0Z2FOU2ZzQWpxbXpWSzhtMG1ISHVKM3ZLM2FMTGNESWh3SzdBbUl2REZMb0RRN2lNaHVuQURwNzJGM1FBdjFzaW5MRlVseVEraXR5cVlOQkdJa0lxR2F5SFRDbXh6ZHpZMkVwN2RjeHErRkliWUhWNlFTcDV6c0NkeXdTbGJOYng1V2RDTGNZU1VULzJ5alRldVYrclNnQW55YnhPcVJMUzNHeEorbHdrT2pRUG9Md3FUNGR1UU04WERqVmJ2dDZpaDNOQ3ByWjhGRWFESjgreDh5cEV5SEVWakx1bEZidXphRUF4Vks4cEZDdWFJNTIvczAxdWFNWjdRdGtBMUExM0VvRk5IUDMxQmw1aDFpNFN4VUo0WmVSeDhGc0FPUGxUYkJhRjZ4SWVkQVJyNytKOEZzb2RlWmQ5enJFak1ibmZqVEExWHR6TG9HQmxTd1dOcmx3WWhtdEU0OCszTkllNndLcEdzYVFybjVNaEZpdSs1Qmd5TzNqbjduaUZSSVZQRWZMUmhqYURSVnZnWHJTbEkzUlQ2ZXp6SlV2ci9mQzgxSEVwcys1K3NQQm1jWTF0QnhmZEZKZ0MybDNhVi9NZS9WWGF4M3M0MXhlWnVFd1dKVzNOOGlzZngxRmQwcVgxckdRMWxJSmhDdkxwSGRMdTRlQ0t6a3FoTUpVYW16SEQxQnFNT1lSNWhEQW01MWE2aXlicGViTHdyMml6YlVWMlRkSEVYR1ppSnNXMmlBZGlBMTRnNi82OVhWU3dUTWdkQlZUemYrVm56S1daUW95S2laUWRlVjVUdG9jbm9CUGdmOFhqRjJmOXpYN0ZwQVZtd3pxVEE5UEhqQ0pIOWRGUEIwK1ZTYkd4NWFhbDd0NWVOTFZPWTVKbnVBUkwvYVhSUzdTbmpWTXNobkszbTFaemhHNGVXTVd1TUE3aXQ2WTU2c3VmNWZwejhNZ21idDZiMWM3RzloQnJ5eUhTU3FzWGZkOVBsRm5XeFp3Rm8xOXo1MG5LRk02M1g3VmRGV2FDYmhyUllRTVlwemYya3hVaVQ3dGx1RXBsV2pNTHBoVWJRdk4vdTgrbGxTcmdFelZlL3hZNnpnSGJRMW5Rby96a2RBeFRSc3dpd2JRNG51VXBIQlhrc2xZeEJ4Y1ZxYzNOcVpNUGZPWGNGNXFvVy81T21LajlPS1N1YUtRVFB4TDh1d0RyWUJMR3ZwRlJjQ1NlSFp3N0ZoY2cwT0VERzZEUFpUMFZYZ0MrVVJSRXhkb25kRktpUk4vRXFvL3B6VEtEVVNDYld4ckFkazJrVWxYMnlKaW5OZXNSZGJiTzZHcmVaeFN2NUpEUFFoN2xlcXlUVjRERHlneWdnUHhPUFI4QW55U0g3L0ZXNWtoaWV2cW1QeHY2VkNWbExjaDhrWjgrcHhZMFd0eUNxa3hrOGRQcitlcjRhaW10ZGJLTFdzVVVZMm5aNU4yckdScUVsMU5KeFljdFVPejRXamVmZk1hWDNrVmRUbUlKeE1MS1pDWWFQelFhenEwSWNSOGhCaERKd2cxbVI4SUdoR0N3UVpnaHc4dzQrb25aY1VWM0tOeDNoOGdHMjhmR2hzR3hsRDZ1bDY2eWJXS2EyMGhSQ3h6UXdiVGNaYjBoMW05NW1qUWRUMEpJcWpZLzhpcURNVE9XKzY5TnJ1UjFibEJia1k5WnRaeTBLdEpmR1lnaVI5OHE1bDlOSlBUSEpOMzhVamdlSGNZMXYvSFVwTk84cDVHSWxHRERIS3RVb1FqTWExYTI5RkFpQ1BWS0k4N1VqSUNsKyttcUlHd3JxMm5QNXg0SlRqL0cxRUxWVXo2Y0RmbUd4R1dxVGh5V2pGbUsrL3pZdHlRc3lHckNycm1MUUI4NVNiTysvdXhkb3V5d1Vlci8rQ2pXcnNReTg2SjVRWXA0em02WXErSFA5eUcra0QvMzNObmY0NXFFd3FJb1ROUGs1ckJIdnJGd056dTN5WHB3NzFINjFSYzN6RmluUlQ1MndrZHdVb1YyU0QrOFRnZXFJYXdmWGlreWlTQmVKeWh6RGhxWndHN1FJdWswSHdxUllZSTlpYy9QQTZwSE8xR0ROUXpCK3E5VXNBYkFjck5FUW55MlZRMGVmclluVnFpL2tsaDY3dDd0dkNCVkw0TTVCRTFsMit0a2IyZzdLM1R4MHZZQXUwVmt2TVJ5UHpiMmh3c2MzQno2WG1kTnBlNittSjZjZnJrWmFqOUNXUCtRdEhodDlwcXNEbnV3MFp6UDVrcHI2NytMeTQ5bURWaS9jQ3crc2FkNG8vNVhlT011alVReVROanZzR0RleldqY2pGSnlUbXZ4REwyN2c1dTMrMDZvYnFZT0NRUzZ4My9iTnk1UzRGa3NSbHU2V0pBbkFQbGNqTlJtMnc4bEJjS250VHp0d29tUEdXelNGTnJRUXlhTHZXK0VnYVlCLzVEdTJlNzFyWFlUV2NDU0J5Yk0wSlNDZThzWkJMa2tvbzlCVDBMTmREeUczVVhSOTlDdURmRUZobFM4R2JFdVhQNDAzbUFQZ29sNkFRVG9lNXptRVpEMUZLajc1Q05ZWWlmT2NXN2FzL3dBOFFueEJRYkllSUxYS3FGZC9GMmJ3dWNmOTFXY25MbXBMbGVvNmdUQXNkRXZTMzJmR1Uxd1p2WVVJUmYycGE3NzNpQWJyaWk3dFNjVDd5T3dOa2dpb01XNlAwSzZTOENJYWlnaTg1NGZKWGFHbkxCSVdINVVzNDIrV3d5dXpBQjVMeGdzcXdaeWVzQ1FFaDR4dGNiYm5WZFBJMGlKa2U0dXhDM2k5Nk8vejhPV3dJRkM3QXpxVFFoU3hWSTRVeVZxVmh6ekdDZDgwU0s0eFlXcmNmeEdXTlI4LzZ5Z0d1MU5PRkt6UGFxdU9ZUEVtcm00dDFFdGZRdUY1R2ZKNUVNWFJ0cnhHaUZLUmxLaFpSeXVCaU5xNXBBLzBReTIrNVNYTFh4dWdpTVpaNmFZZ3c1Vnc2N2FhWXFaZ0YzMkxURjhHSHcwWTNDaTRsQzlzN2FZUWdqeW80WHU3TEJGTU9NVTVoallqSDV2a2RHcEk0cUwwMVJ3WGtzbWM2RWJGZ2FCNjYyWnlYeFJFbjA5cUhyVjVDZ1daL29RMHVTZVFlZm45UVgvZXRmcVdyWmY5UEw1dWdOV0NQNGJpVUt1cnpPbk9kU2k0VC8wVFp5VlpMc1IrYXFlcFVHWngyUjhNQlhkRGs2N0I4cmlHRHNVQU4vY1N6MmJWaTdqdnduMG5LMkpMMVhKbGxJbkZzTEJhSzN6UkUyWWhZUXBKT2VWZ01KY2Z3VFltSThOQVoraHd2aXA4eStoNEdScFZhVUxHWUlOeEtMTnBWa3FTaEFSRjJhdWlKbU1BSXMyamZxQ2hwdkR2VVNweTd6VGhXb1dKeCtSak9ZUGo3dDZiSEJUUWx5UGl3ZWowckhMQjlZYnZyWmpidWtEbEVHYzN4UmRBM04vbVdTVmRFbTJhY2JlL1hFMU9sZFBaeTZOd0xoaGVyVzNzM1pIM0RPNzZvSERVVG01dEg5YkU5WURMMWRXK0JqeUJ5SkQydTBZM3VCVUZpL2ZzWUxFNGQ1dGhEckRGbW5BVmJ6Njk1U0VUYVBHUERMbUlHR0xvT2xDOHl5cFZLSG4xdS9uckxuZ3pOR21QVXRpOEozSVRxRXp6V2NiakkvY0RIc0c1bWZIV3FocW9zbHRVS08xLzVteFFnSFJCaDRyQTRzR1FETmN2TVRoelkvRFhMSFZIakdremhRZDFLQjVUSm81NThGRzJQaThSVEp4dHpPNWtQeTJaRkYwOGF3Z2tnamQ3RUd3N21SMGU5RFZUbm0vYU01UHBsTlc2NGZzVDRSVG9XYnBseFlFTERRZ29qVkpneGJjeGRWSy9pYUZjSEdpS2ZpMDVsSTRjL2tHN242djV1VUdpMHIraGtsaUdRbEswVzdTcHQ2dE5ZeFVmNFg3V3I0TUY0Y056WG1TUTdBZkpuWlF6SW96UHAydlVPclE3RUtneXRWVXNBNWJ4amVkakJGUVQwKytnbXNpMEJIM0l1Tmd1QjcyZE05VDVTazY0aE5BWExuYVp1c0ZmUlhnSjg5UnF1ZTRpMjNyZVJadVBwTVZLQ2pjVGk4VnR6enBNejFGTTV1Z0JNV1JsM256MmJJNzNsUUFGRUhjY1JvcGhhWW1aelpuMlZYSUw5ZXNyOWVpTU9Yb3hnSXdUNnQza1AxTkpaMzdROFQyU0MyaHZiT29SZ0lvLzNXVDBjVDgyblJYMWhpSUN6Yi90dHMwS1MzY3hSZlBTclBxNzdEREdncEFKNHMvbklobHRqaklzeTUvUCtMR2NFTnZ4ZG9XUEk4LzhMOHg4SHNncXNSYW5ncUFEajFoTU9ZWEN5RGQrTFVUZUNWU21sUDY0S2UyVDhOaWVBWlhybjJxY1VqaGsveWMyUjZFSFpPcW1GZDNBeGU5T2RMZGs1bXVmVlJLQXNnRmxFbUdHK3dDNDRqY3dVNUtoVmZDTHJJb1BTMk8vaFhENkhwOFVZM1FXbnovNTEvVWpvRTZ4c0NJQ2J6Mi9ob1ZYWHh1bEZ6b2NIYmVmMytvQmVPVkdCQ3NoRmFBTFlqc0lEVGprVVIxL0ovV2xLaUxFZi9Za284Z0cvTHFqdUVVbnl6THU1V09ySjQvOTFOd1BtS1laQVdCbjB1L056eXFoOC93QXdaNHptTGxUNHJwSzRqTHYxSGlxcUtlNFdZM3NRTVhqWWdEZjhxc2E3YlZrTTZBSzBoRGlTVkZKWmQraUFEZ0NadzQ4N2pwUHIrSVB0VkhBaU5sdm4wN1NmajZFbVpOc2pmREQ5dUZJM1pmY2FRK2NDK241aVNtRjZ4aHlOSnZHM081YTFadlV3bGd1NmtHTDNZblJjMTRxMXE1UkJ2Uzh1YTRGV1lRLzdUSjF3VXd6czlxUzlDZ1EzbGRpZ2pwMEdCcjRhSmZBdGU1WVNYb2UvMnNTMUJidk43Zm5uWWdvSHpBV081Vml5Z0lBRTgyay9Ea1ViSG9QVGdpYXRsRk1CeW1DTStNUXhRSDFhV1c1TjlRS2EzVmFaQnk5VWh3R2I4LzhxNFdIUzBSWFpJUnFTVFFGNGt0eEJHL084WnFZcklJZkdURDBPZDZPSmRlek5YMkFWM2FFNzBPVnduWFloZXJiNFlXQkMxcXVXZ1hTNzZ6MEF4YVdsanRPRVg0Z09sNmZjdjZYZ3lVT2ZoUTRhUnFKZmd0RXhZTnkxemNuQ3hoL0ZmQlBhQnZ4U3BKS1VGQkh6MmgxSHZ2a2JMWnZNcnpsVXdWTzZId2JHZHlPamJvZHk4QWZBVUdEYzFDTDBzY0JlTjZGWDhHbENzYURuYkgwTjgwbVo5ZDVVOTc3Q0FLTW9PdU5MWHVoaVppMDhNOHlYVXI1WUF0aGgwbGk2anpzaEc2aUhqaytQZ2Q2Y1NwNWk5MUgvTm11cE9uN0RUWFhZSHA0YWR0OU8rWkJNTVhQeWpvOGgya01YbFpuZ3VVSThnVEpYS2kxRzdFWU1EVkY4REwrTlRRWEVidkRuNWVrV0FtUXFmV0hHNEtKR21EUS9aYXNyNisrODVOUVFOVDM2Y1NNODZDcENKVGM2TW8vbyt4eXIxZTBuSmxabmxIaFhTVktvREV5cjRsL1lZUGFmODluT1BKQVdobjArTy9IMDhoNllDc0t6R2hWSzdwSjNUV1lOM1hyclZId1crMWJGMzhJZFd2V2l5QUZWbWhQQ0lzRjIrMEFRVGJiVDYxSjNSS3NuSUJZZ09NV0J5aG44T2cyZHdDUXNhdFZsbTJRODFLTUViMnRqditaM2pScTgvWi9sVytkSzliSEs5KzE0eG12c3B0eVFGVHRsWE9IUHEzYndzakJNbDRMOFk5cmNaRVA1cStlUEk1RjVLaENTVURBanhQOFFFUkpVK2wwcElrYWJidXVlVkNHSlNwOW12OVhkMEJieG0vNjNIeW5jejc2L05MV2VQUzl0ZlFEV3p5eDVpcURsd1A2eStqei9MSGcyWmEwbXpFYnNmU1JLZ1czb3VRbEhTZWNmMVcrUTlsQjkxZzZSbmdqSTZkcndTNUR0ZHRMeTNpSVQ2dzExbmVlNGgrU2creDR4emZ4MlB3ZHljYkczNWxGcDIrQnFneGpyUWFtQXJuUlBybU05Rm4zL0ZFSXR3dzBJVi9mTTB0UE9SWFZUcXR6UzlkaHpWcWNnaHNyMDRwWU1xOEFWQVJPa2tVMXFpa3YvRmkzMUNGN1p5a0FBY0lCSnVzSFBtMXZ5RlFpcFNKVG5XRjV3WVpLeTZaR3ZUYnYrTnZ4eG5lb1UwOTJkQmV3aHg4K3MrdVU5VTlaOVJFWUdpQzBtUFlpdnMzem5pZzJOb1dXcWdZOHBJYnBJOUpXbTNXWkQ2eEU1RnJ4SEZxMkV0bWZFbHV2bHJFTTUwRlN6S2JCSVQ3V280TytmSGlaSE1ZK2xEUGRUckxBbjduL2V3NURZWWhyKzJaZVJmdmJuMmkrSG92dEZRS3RjR0ZWK0RXbXZHaWNWdXR1enNuUnVXLzBscnc4R3QwZ2QrL1BPTitiZW5xMCttbzFpWENQdVdkeGNqT1ExZFlhZml4RExYUVJ6TkVVYWlnK0p1K1l2b0hhZEJMNFFlRHJFenFJWTNxSjlzZ1VkWVJBZWFrVkgvQVU4QjVsYU03UWFNbE5TMWhtTFNPNjU1bjJvdGFFYmlGN3RjWm02SzlBaTVrc081UFAvZHZYT0dmd0hMRXowWFg1aFErcUo3VVlpc0toR2Z6ZnRxaCtWSFl6Q3Z6Q2RhdUdydEJ2d1R5N29qTHAvUWV5bk5ndlo3UithWW1WdSt1RHVRaE5HNnF3NHdzbDAwTVBFU0RHa0llVVhyTjZNYzloV2ZsSkxMdndYMFhwZ3ZZYjg4V1BzU2RKMXcxRzk5NzhPVGhFQWRNVys5V1BtcnQ5QjNSUUc5aXVYaHhXcTNRbUorTmtCK3FubzBtMUlKZGw0M3IydWxaeTQ3ZUR0Q3NZY1ZlTmdOV1l2d2lkVm4rR3VZWVpULzM4Mmc1T0xxQWFiWCtUSFhuVFRzeklXRVV3MGliZ0RNVkkyZVJBY0MxdFJzVlJ6MEJWR3E1aEJTdEFXTXdSdGVjYmdPMnozaG9RZE9xTnJJRS9kVUVNM3BpblVlWlczSlI1c24yMHI2enNJVGhiUmN4RGUydXpiK2JxUnM4QXBLTHNxTEZXN253OHVNYklubzlLaFVLU0syRzMzWldVczkwTDNhNGgxQm5FaHkwMjg3SFd4TnNhNWZwMmJUdGNOSVp0N3pqN2Vxcy9HVldlY3BXSzZXaS9BYjNtQU1hWU5mN3MxZmxFVENUR0pSLzlDcUljTkE1N2NwcnlVWXpzZkFnYmNpdUVPOEpOYVVaUUdPMWpPZ2kzWjM5WDZnWTZaVnI1OWxTekFDT293ejhrRzUyY0tJY2wvcThQSzBFSUI3bS9kUVFSRythUDlkNCtjZUxxN3I2ODJubEFheWJhUTlPd3ZZVDBhL1BUY3NwMDk2dUNTZXZYQWVpTlpXWVJzRGFHaG5kMmVJYVVsTkYxcllpTGRpV3JwbmN6bU1ZL3pNdm5MZi9tcUxtVHJjdCtLNkRUVEVPSi9ha2dFc0dFaWpzakpWQUFybndvdVphOEJDV0xqdmRLNjlERzRsYUpINUNkaC9FeSt6TGRGMXdIb0ZqQk1SZUZPRkhyVzNNcDFObTlJUWZ3TTVrK1hrK1p3WE5JaFRkY2xZZ2hkaHVxM21MQ2RHUk42WUw2NVBrcVdoU00rMk5OY2pFWFN5U1c2R2RDWFhOUTJkU3hjSGFVaGhaRUNNa1hoU0NhNmFvOWk5bVlxVGVBSFRqWUpsYytIT1c1cnZoK1F6V2ZGb2FHL2NPUUtsbkdselVxSk1RcjE3T09kNnVUNXJ3ckltcXZ0RG9XUVlDMTZLZFVhMy8vWjwvQkRCPgogICAgPC9CSVI-CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24-CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I-MTwvTWlub3I-CiAgICAgICAgPC9DQkVGRlZlcnNpb24-CiAgICAgICAgPEJJUkluZm8-CiAgICAgICAgICAgIDxJbnRlZ3JpdHk-ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8-CiAgICAgICAgPEJEQkluZm8-CiAgICAgICAgICAgIDxGb3JtYXQ-CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24-CiAgICAgICAgICAgICAgICA8VHlwZT45PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MVo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU-SXJpczwvVHlwZT4KICAgICAgICAgICAgPFN1YnR5cGU-TGVmdDwvU3VidHlwZT4KICAgICAgICAgICAgPExldmVsPlJhdzwvTGV2ZWw-CiAgICAgICAgICAgIDxQdXJwb3NlPkVucm9sbDwvUHVycG9zZT4KICAgICAgICAgICAgPFF1YWxpdHk-CiAgICAgICAgICAgICAgICA8QWxnb3JpdGhtPgogICAgICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24-SE1BQzwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPlNIQS0yNTY8L1R5cGU-CiAgICAgICAgICAgICAgICA8L0FsZ29yaXRobT4KICAgICAgICAgICAgICAgIDxTY29yZT4xMDA8L1Njb3JlPgogICAgICAgICAgICA8L1F1YWxpdHk-CiAgICAgICAgPC9CREJJbmZvPgoJCTxCREI-U1VsU0FEQXlNQUFBQU5pTEFBRUFBUUFBMkhzSDVnd1dEaVlXQStJQmMxOHdCZ0ZnQUFBQUFBQUJBZ01LUUFHaEFUa0lBQUQvLy8vL0FBQUFBQUFBQUFBQUFBQUFBQURZUWdBQUFBeHFVQ0FnRFFxSENnQUFBQlJtZEhsd2FuQXlJQUFBQUFCcWNESWdBQUFBTFdwd01tZ0FBQUFXYVdoa2NnQUFBVGtBQUFHaEFBRUhCd0FBQUFBQUQyTnZiSElCQUFBQUFBQVJBQUFBQUdwd01tUC9ULzlSQUNrQUFBQUFBYUVBQUFFNUFBQUFBQUFBQUFBQUFBR2hBQUFCT1FBQUFBQUFBQUFBQUFFSEFRSC9aQUFqQUFGRGNtVmhkRzl5T2lCS1lYTlFaWElnVm1WeWMybHZiaUF4TGprd01DNHgvMUlBREFBQUFBRUFCUVFFQUFIL1hBQVRRRUJJU0ZCSVNGQklTRkJJU0ZCSVNGRC9rQUFLQUFBQUFOZDJBQUgvazk5OUhHRVNMQzBiL1pZWllxVjNuUVZ4TUFXbXpYeHFEVWhlNFhZaDk3V0RISCtoR2RMV2c0bGI0elVrSlIxMFkrUjYzaTBSenl1cFc5N0VXb3RHNnRpUy9TN0JQTW9qMEFKWVpRUzQyOHU5VlJodkJHQ3p4dTIxWVhUYnpqcWpzcVhpSGhBeXBjRTkyRDRrUmxpd3FuSXE2M2l4OU9VNGE1Mm5INVEzVHZKbXVQYk9BTGkxMktTdXFNTXlGZHlqbGIvSDJOOGZZN3creHVCdEU0Ry9lblRvelg2d215SlVBSlltNWZ6SE5OcERmSTdkNWo5NFB6SEJ5eUFqQzBvRCtDeHhtRXhwL3diMENRWktMOFZiMnZyNlhXeERmaHB4ZnpYK0JBMVhUeGJBZjFzdytvOXFkWEdBVkpKRDBwQ3FqSlpSKzhXV09sYmdZSWRzbk1jSS8yaGUweTZwNUhzVVdkb0hUdUxvY1V5YlFBNUU1WUJramlvVXFHckJQVkpmcDVoREdOR3VTUGtVNGc3dlZWa0JEMlgwQWpzZU9IYWFjME1CRHR1bUhobTVMSmZ2NXZUZm1SMzdQRFBGQ3Q5VXdGUDV2VGJhQlNPcG9oUWg4SnBpRmlPSm1aQU56L21uSFoxQUJ2Y29kblArR2tKdzRhNkhENzdOaDJmSk9TRkNKMCs3WStGTGhuVndDQUE3SWlqcFkwWDZWYXhOeHQxbmxyWWJmaWIzSjBJMU1uS0FpZFhNQTBaempBNHN1U0Zkb3g4N3pQNEJqRVA3Q2xGVndlOUt6NnNzSDY3dkpGdk81Z2tBQ3RKQXdTOC9wdlJaUkFKOUJQWDhXbFlsTVNnVkxTc2ZVWU5YNDhxTVpBODZtdW8veDltdEVmWnNaRDdOY3EyK2tYdFRZQnU2MmtEOHozU3NXRTcvZk9SMC8zNVJjQVEwSlRVWXFHSTBNeWhncHlPN2xhblJjcXBpRUxLU2tqbSsveDNZR3kxRXp0a3BDT0FLNGZ6MVJOTWFYdWpoTldhcjVsb2xGSXQxRS9DdUZrbUpPM3IxSWtlOGNQOVFXb1JlT2I1OHJkQnZJRUZBVk9vZzlWWGw0czRPck9wSStPN1NLTU9HNkxkYnFQMGZvVlhPODRtUUNmUUxvdHcrYjcwaUkySm12cUNPRW14aG50dlc3WU8vRGVlOUpPbXFMV0oyVTFya0lZdGgrV25CNGZ2YXJWSmVKY24vUkVDTmtlODJnWUhUZlRWcmdpbTQyT2VBNlFRT3lHZmFtbW9rcmtya2kxUFZiMmdKYkxYdE4zOTVlWTQ3ek1zMU5NUlk2TG5YQ3k0QzVYVlhONDlvU0FFWlZOT01rdlpuR0ZjQk1BUWQrSzlzWFdWV2JNOWZ0MGtNWXJZZHZNRXdqTFpqbzNwT3BnVmZaRWg4YklOdW5jQ2UrQzlqQ0I3TytyT1J5RUpMc2g1UWlVLy9LOFFsZ2Via3VoRjRmSVJrWHBnbXdrSXZzMVBkeVgwWTR4RkFCTWpvMDl0N29iRDVMSVhUQlRhK0hldkFJZWdReWltZWIrSlRWOHhDSUdieVV1b20zOEFsQXJXWkNLTitoWk8yREo5YXNlMWVGcFk4enlUTjJ0UTJCYWxKaU9LK3JmZ09WUDhBOC9Mam5HcTZiakYvTEhTTlhEd2RwNUUvVENUT21aNTFwNHRFdEhScGk2aEFSa1d2NURzSFlzbFRLdk93dG9zdDZJZVEzZzZ4K1VyS0lwNVlmT25SdERjaW9FUDRyLzJ2RUtMaXlFMUJ2TmdsUXZsb05BSXhyVWNpV0g4UFZGOFplb1hHbEhhaEhwclZoSVlvTzRJbFVSZ0RBVkwzeWY1QTNJY2xaemFoS0Ridms1emI4YllpV0hGeEhYMHFsTGFpZGYwNzY2b29VcEVudTdCeDFESW1lTTd0TGdTVGxyNDhGTWN2Yk5YV1ZJeFo0R0lwTWI5d3lKZnlUSzV4WXlNM1NyRXpKdWpLN2o4ajEyaTVvckdtbXAwL3ZNdWQ0NmNzTG1yQkJRRlV0Yk1SOGgweXhmdG1mUFQ0aTdBUW1wSFNrZnprcytWdFJHdkMwbWIvTHIxdjAzRXN1bCtIQk9zMHRIOEo2L1poTUNKOGRhekJvSHpleFpvcWhzWXFqYUticzhJdFJDeDV1UkVaVzFyNm5nVnlhNG1qQlM2R1E2YmRnSVN5UXN3dEJSS0VHUmQyaEdONzliWUpUaU9zVkNpem9id21CSGFORlprUmtGdGRuWXdhKy9YOVRRQ1BFeXJhS1Z3YmNBbk1mVlFUdmlDMzVqWmRXSFM1dklHdWdaRVhJQndOMkptYTU3Smg3dnhXTUJ5M0wxSDVsN21qLzIyTWZCMTh2YXQycGZCdk14YzV0YVJ4TGhkOERyZ2tnNXllVUd0dHF4bXhSS2pIRUVmM0pjVEV4czM3NHMvdVMrd1R5N2ZBL3YxcHhBT2dSOHphem9CdXl2MnlQZGVVZWFQbllacE5JNVJVQXpnWEptY1RLYmRaN3kyMjRscDFjVzg2Vy90RzRTSmhkVmFnUk9va2tnVmQzNU1YYWRBbUkwTUs2eEhYSnNQVkk0ZnlWRExNMzBETkZDdEJjUkFlNThaWDM4dHBxOVMwK1Rya1prdUVVRyttZkhYRGtQWlM2L1lGeXY3c1UxWlJaa204cTNwWWNQNStjSWxZa1VzL29FdXQvM3VLaHBLR01jblVvTG0wUXArdS9sV040SGJIZ2ZwUFZ6YkNmRzNoQ2JmMWRxaGZwZ05ZMDlqdElxbWRNUUxNNC82QlBVdzdaWk5aVk5LQy9IN0U0NkJaTHFuSW1OL0hhOEdNaHNpZ3VsMngwbmhuRzY0WjlHNzNMYU56UUhkRnptZFhvS1JxOVQvUHc5TDJQdDlQdUgyZW5tQjdYSk9kYi9mc2lsWml1TFp2aVYwUUczM0I3dTc3QTM3YVU4Z29ZQklzM2tKUERyODY1Syt4bTJibHZJRTc0YzIwZ1UzZVN1QVhMMzlrYWpBU1Z5cUxzdk0vM2JXS1pmMFlldFZvQUZEQ3F1b212ZHZZRUpmQ2J1VGt3dVB4YzJsT1oycXdONmZtcWVnVjNwNytOZW5pclBodXR6aHpIOEJ2UEV2dmMrak1yOUp0MkJWVGtwbDM4NTJEYnBBL09sQkVMT0h2c0NkMFlUVEExWW5SLzNwTVpHYXJzYjM1WWtSb09PRFJmQjM1dExQU0ZUTm9lQnZEdTRtdXV4RXVEOGhQQkVhdXlXcDZNYUZVMnlFMnJjdnZHeHhZd2Z0Rm03ZEZyWHAwOGlFbDl4dXBsWkhGTDQ5ZDNkbmVxMXc0NDBFWWJVQ25XSCtXVTdlN1lRU292UmNsd2xqTW1OSDhkWExrY0Y4RExWbWJqeDljdUhMRmY2Nk1rTk1lVnhyL1VIVXd2a212TGt1bjBncXd5YlhCcXl0ZGRBN3Z1VXgyRkx6T2krZEhGK2F1OVNKQlg5YU5TaFVZYXJmb2hmREM0Vjk5S3J3K3VySW02alczdUcremRmQUJXWXVadE1FcHYrOUJHRTEyU0sxZytjbnBRV0ZUdHZJbG5yKzQvT0FGTWRJY3J2eXhyd2JDTjlDMXVSV3QyWnl2YXFaSWFVelFxTWhGTlhkdis3d25uMjBEaG1jazY4VTZZZy9CSkxHM0Ywb3JaSGV4QXdvNHdMOG1OSGhMdStybzlVZTM2MUNjdE5lekRVTlVsWDN2dGI1YnUrN0F0VnNLZkVvKzRwbXBjOGszb0VYNlQ3bGI0NEx5TjRyNjN2QkFKcEtpbUIzTndHcTU2c1BiSnR6WnVoSGttMEM0UVF0VjdtajBvR01vSGdXcjI4a0hOb2Y0MVVuUUxRbElMNEtxcS8xZit3YmdrL1prL3M2encxWXZVY08yK0pwaGdYQXNRNTliMytydzdUWlhYbG8wSG9EWGtycmJ0T0xzbXBVR3J3SjdpVzZTNWN3S1FERGRpbmgxcFFQbENwRkFmMDcxRElTcXZFMXdaUmF4ZEFiRWFQVHo1WXE3MFpwd3lFWFBONmg2OHJ6UmZwRDRPTnJsREpqV3FSVVR2KzBuSUEyYjYzQmM2T2JVRWVGUktUUmg1RWt2NThUa0hjL3l2WVFKMklQRGZCS1hVVm9qdk5UVk9ZNER0MHZhWi82d0RLQk80dUc0c2ZFMW9UeFhyN3BteStFUWJXejh2Nk1Ld2RQS0NMZXVEOU12dUNVbWl0ZG9VbkVEMklCTlpKVzdqTTg4YkxQNW0weFV1ejY1NW1Ba2ExeFFMTkJLUU5ZRFhjQmwwSTlwTnpNUm9hMEY2RnZHR29YYmhvTldrTzFrbXJNbTBvZVVyekx3MFBFYnBTRDlMSHo1Z3RNZmdPMFg0bEUxeHJ5MG1BTmhaL0F4YzhMRXJ1SFRESnk1Sjh2YXQ3Vy84OTIveGorMFdtaEwxNDZYRjRkbUZQb2h0VzRVTmV4NVN0bVdxbUdVNGc0YXo0UTUwbjljL0ZQRnBzekoraVNKaTRKR1M5dEF5K09HRGduL0lTQ3VzeXdRZDRPSTNDRHV0VmRHZ2dvZmxNS3ZjY2x2aldlUVZWaHJteFNnU3FqMFQ3T1RsdndvUEEvUXVtUEFvdEFMMTg5Y2J3ZHh2TUhLZTlhWFozM2t4RkhTUUlodVdheWtHeHR0MGRqL1ZYT1NpeE5EVUN3QStRb1Nhb0p5WXBLS2dNTEgwRUd5VjdPM28rQ2licUZ2RExsTWF6VUdZd3FIQWRDOVlSVG14QTdLREhNdFRGeDJXNXF3N29JSkxQSW82ZXdPMnhZQ0pSWFVudzUvdDdPeHZxZWdWT2NyVkgvdmw1WlRzN2JDRU9pdzI0REwrYWpQUkVqVEd3UXFySlhQSEVqUVZIcy81bndpYkcxK3NIVnpuQmEzSW9KTVJ2VG9xT041c3JDSW5RVXU2MTBVTUx1Uk5UYkxqbzRTMDhSKzlGVnFnZzZjQ1ZDQTAxKy9qWUNPODNmQlBWTWxkTHBOUGZTbnRTOHE5V21sMGdFeGNsYkh0R3BOdzZpSUNUemhSVUV5MVd4a2U4bjdBajJDbkpBN1ZCRXJPTlQ4UHE0bEx6K3R4LzVwdmZKcVE5K1FXT3BBQUVZZUdiYkpTMFpEcWg3NFpQOXdOMTlGMmN0ZDY3cDg3bzBLZitzYzJPMTRPeHBoaTVucjRDRHoyaVIwL3dqRllJVHd6enpDM0dEb2QwM1RFU1F5akdvbkZhQlh4V09xVk1Xck11Ty9EM05iSnpqSHhSQnlLcnl5a1lLTVYyeHBIK1Bwbi90OHJMa0lYSEJsS2k1QnhTRXZIdDN5d3NtQ09aL3E4c2E2TWlZeDgrWUduZEJJTmZVS1A3eWJSYkp1U2lCTDVTTzlUaG5OV21hNG8wVHpTMzZMajNPWEltcHZSQVFtNTFnSXp2UmlvQUIwU08ySExpbnhRUUtTa3N1cXMzUjBqT2xZbG1nd3JBQml2endqQzgyQ2M0NmhtNTVqYjl3QXdCY3hUekdCUWdKWG13OUFtZm5WY0tPUzExRXdCdFhXRWxBVmtHQ0JaTm1JVXpzTkVEUlo0aE9xZk1ZamxDY0tsTHB5aVl6UWVJUzlYMkVjM1dEbmNENlNuMzlROXAzQ05rSUhYNkNEL0RwZTRpdDdNYk1YWC9qVVN6ZDBOSFJyZlRIMU1HWUJzM1V3ckkvSWkrc0Y0aEgzS2xKajRseTlzTVpmOUhHcGVMNzZFZ0RhdlBVS1Fuakh3eFdxOGVNRTRvMDhZL05nTnFGdXpqbGRzTmdDbE1IcUVWYUJxa0xlUys1UXgrUjIyVkpwVUEySUxoNmozS054ZEp5Qjh1MFpsdkNXUGw3bVRYcktQYUJlZjRoNU9uWFA3SWpnaG9LZnRyRTB6NklBU01vQjhmQlR2T3hXWmg4UEU2TWlQWFFLcHNDemI0V1V3Y0pWMnBTQ3h6ZWlzeVlSYU1zbWFiWkkraCtYVTFNMFdjZ3lqY0t0TkhjbWFtSjdMMHpaU2ordG9zczU3d0xXVHNwRlIzL3hmY2lDcHBRZ3diZzZ3NTVzRU1EMjNwL3luRXNJUzVhbDdld0RuZWhOSFp5YlBCUjZRcXprb3ViTWZ0S3UrMU95YnE3M2toc244OUdPRm9tbldCSGxiNFpQWFg1emRwbm92aW0wWDNrY3NaZm1tcTA5VE5keFJicEJjS0ZiTjFjUVRIU0YzM3hLeDR1ZHZ6VTBtQzRRNjNCT0w5UUg1eXpVR1VHcVI5V2EyOXJySEpjaENjS3VMV3JZbmx2STcyZ2ZYQjV3K2MwRHpWNzE0NzRCVDZySHJrYXlIcDVpcVJxRFpha3VUVVlVbmRxTDl4WnN0VVlLTXJKelVLcWxmS0xTVmlxKzhHQTlLNTRxYlhMRHlBZW1YMGhNakRsbm5qQXRFdGEvUklkWXRSNnVnL215U25qOEd3UTNHS2VJazFVS256bnBTcE00NnF6UXZOY0hLVGZDV0xBMVNDNkFmNjBRdElDbXBnUVFCM3cyR08xUGgwL0JHZzFvMDVwdzVLMnJocVBoMThqajZYc0ZHQVJudC9kWU56RDRROE5ESkRldWw0OG9FRUNwdXN5Z2tiSWFnSjk3ZVo0L0Y4Q2xtb3drM1o3TXNDU09FV3FuVFZscTJ5Q2IvMkROWGoyMFg5d0tmYUdwYmRuamF5VEJSWC9wc1J5RmpJdndoeWlycFJKdlNJV25DTzZYcTZEUFBsVVJQbW9SbW1tOWl2eVdDQkh2U2JlWWcvNFczNGN3Ylkwak5EUHpOWXVRZDVYYmVFYnZmUU5hMTVwb0Ezb01Yd3RXUUZmMmEwV29YdnNmR0lrZ2xIcU44NEZqd0NWM2xXa3dhUERpVGhTbTh3S0tWRHR3eDVndzh3QzNob2lmNTVtT1dhU1AyMWw2aUdwZ2IzUGhVUkIxaTR3Y1RlNmxGS09XVHJoRUVmREVVTU9abTE5YzJDanBJYS9nUlkvWVJJUm5HdGFDMmNDMXBMQnFOc1lYakVOQ1lydG5mNHZIY2ltaEhjRXhLN1Noa2RUdUJrc3pMU1hCckUrcFFDVHFxcFQwR0gycGdXZ1drNVRFK2cvbE1WWHpUMHRYNW41WU9Sa3FlMGVqMjlVNy9BZUZhRGs0Mjg0ZE9VRUNHd3JZd0tVczAxenlmRWtyNmdlN2g5ZjZWT0lvQW9mNjRlci9QNGQ3TTNnTDVFSFFEVEVRMzl3L0NaWHFvdUpvUkRlbGJXczVpbEF4c2MzWDdmUnRsaURiQ0gwdkVsdFh4NXplaWVwa3JvOVVNczhyMW40WmhwL0c1UldmUWFoYm9GNDZ5ancxeGg0ZG1RWTYva1dlT1o1bnRKaHZBL2wrRWgyNVorSzVHQVJ5SDlRSTVMYWl5cUwrbVViVFZRaW5XNVQ2NjhjRFBOTVlKbUVCMUNmUzlGY3AwYlJUbkVkQ3VUNUVUbnZHVkRMam9XTGdZZDhwWnBtQTNCWCtTa1hTd3dCc1ZLZFhRalpjU3ZEQ2lSL0VyZWlya3EzREFvME5LdzZRZ3ovVU51T29RUDdkM05EZk1VQjlTNWFHUWoxRFhDdEpnVzFuZ3NZbXY3L2V3N2FNdC8yVG1UQXZwME5ZTENXNVNMeVZkVmhBbm12VnBHMEh0S09lYXlOVmtIMzY4OU9KanNRS09CN0FBeU52Tm9CZ2JTaGlkaUZ0b3NwM0dNZXk0QWRjeDBYUDZyY1RBcXB5d2xpVzNmNmMzdmZxeGRmdXdTUG5ic05oTDloalp0emwzRldmYUxJMm03b2dlclRHazhlKzU2ODFLcUJHcDlPSURNZTJFS0w4Z1NUR3dtV2JCZjlnekNCNzJvWnBtelB4Nlc2dTBETnFLa1VjZjVtcExsVXliS3RKZHVMSXNKSzN2b3NYM01uTEYxMEI4UFl5V2ozZ2JGZVM3VEw2enJOZSsvTHZYdjdBa2hUWFdlSkN0Sm1hUHV0MGhLeEtCckdXTE5KYjVXcXRTd2pVZ3J5VngyNTFUSU9OOUJmb05pamZ2THBmWnkyeDZzelJYY1oxZlQ5S0JhZCtmNnhlTTNoU0dBRGVBT1dVMHVhM2ZROGQxZk1GREo5V3g5d3hYN1NYRmRPNTREbHpiY1dEWDBDdlhPZjI5eGQ0d3c0Z2V2WUF2RXBVQzVMcTU0azQveXltUzFWYjFLa1RXN2NXZTJkWkZ0Z1lLUFQvSFNqbVJTL0JHVFZrdGp6bGE3V1A0OXU4MGE1MG5nTkduUFc0TFphZU1OVk84a0t0dGI3OEhscWk2RWU4Q05aMVBkZ0tBM0pYKzZOMDBheVVPVkF3ZWpaZ0NnUWRKaXNHZ0FKcG5LL1pWRWtWV2hVNEdxUThvYlhhK2hGZlFPZCsrRVhUbmt5bnNRVURtVzF0TkFyVUdvZE1GWGwwNWlqRkVmaHdiUFhjcThWdllLUm5GYksycDFob1V2SkxPYTFERnJnN1VGY2pTOWh2SWdkaVNyTlVnak9QbG9yZGhCRXQ5NWgxZW00SFRwcHBCM0pobVpDME5yLzRvZHE3cWwxQnByMEhZdmFPZGdYZE9FaHkzZGtoUFpLMVhjNjB6RDFqQmhlN1kvODYvTE8xb0toemw5S2FMczd2eW5taWVwZkxIYjVDdXJ1VEthS2ZreS9aOTF5UTNwMk5nM2NTeVRrZU5WUHJQbnRZME1hZWdKcnk5RXZPZXIwcUpLYXRtQUNnOHVpWjVXUjRnWmtOQkUyeGtyR08xNm5LN0hjYXRQeUhnRFZDaTFPc2hBOFdCNGE3SkppcEs5SFhKeVlJcHkxcTBObE1MNC9BcGdFUkJCeDVWYkVPVGpMQ2VVT21lQ1dPT2s5djJFU2YrVWtxTTczQnMzQWljdHFyZHd5U2dVV3EzdXFwYlRmZ2JpRU9BMjRSd1pROWFOWXFORlk4Zmh0V2o0TDhjNWlzUUEvU3REbW02dll1QzNXVzZxTCtLREhhVjVyZ2F1M3hWUGE1ZWlZOW5GbllTOWlHUGsweXI3VFdDZUFpQ0l5VUowZU5jVzNEdnhoV0FyK2xYUTM2cFBDYVg0Sm5aM1NDbTJ6SEprMW5mTm5ibEdYWE9MMmM1b2xLYWJvb0hUM2JqM2djNmpjbzZDTWNYdEFJU2w0VzlIWHdPbzIycXV3WmN1eGVKYzhDYXNNQmczc0wycXB5bnN2RHpHMU9GY2ZsQkdiOFJVNGlxSmJERStaT0RpZHA1NUgwT09vRnlCT2lGQjB4OTgraCtBYzV3TFM4UjJYN3MybHNlUmgzeGgrMVRUUDJWOE9uWHlqcHkwOFJFaUt6ZWo5VThWdkp3SU9jQlk1RURMRjVLWldQazkvbFBHYVlBWG1vMFh6aFZQOXR2R1pxNEgrdjBkeGNlVytkZjJINlVBNWF2VGs4VitGRWwwekpoeDRDV1BRSzVJaUFGR1I1Mld1VEp2eHlpTUZKekRPWXJBMmNCd1dVTXVBUktpUWU0N1hBdEIyMjAyMzB5ODBSazdlMEREaE5IbWxXcWlaemhPMUkyVWVUODFVeEpkM0d0SHJNa1dyeWVFSGMwK1AyZlIzWDAvVkpuejlXNCtUWHVQMi9TUmZzOWRQOXV2bDlWbVlmdCtrTC9aNjUwK2ZybGZWWUFNYW9kbEVuaVcvNHFBbkxTSHRoVmg5alZQQ1htRVFGaUZNTVpxZjRDNTZmZS80WkJESzQ1VFdmdzVMVTN2UjVJaHJQQ0w4RGNGeWZlWnVNcEhVc2FRMkFoaXRVbVllNVYvNXJ5c0NvYXdDOEU2ZURZMFl0RmhqT1pWUUE5MFA0TGRuZWJWeFlwZmIxN2NkUkVuN3pnays0cTJUQnJlb2hhVWY0R0RYQnRZeEpzaURCdEJ1cVF3Q1o4TSt1RVl1SGJzUXQ5eFdYdWlwNGNIVFkvQVVNMFlrZlhyNGlwbG5pSUpNSnp3d1lrSDBXVTk4RFlhOThSaUtxNjdoMUpnVUlaUWpRRU13UUZpbTIxS1VzSG91anRlQXYzODdaZzhVT1NDekt4MHI2RDhOcXdveFVXblFubGFNYTNUMk5pQXl4R3JRaTJ0d1pJbnFTaGhWb3NFZXdSaW8reHlwV2EvM0NzL0FiVmg5LysveWc3Rm9nYlhFMmJrNjFKZnAzOVVjbzFiMXRWdWUvN0JnR2V5ZVdnaFlsWGdKS0pOMXMwTDRCRzd4WE9FcSs5eGdjSy9wMlB3ZXFoSTBub3JKZGhRVHU0Q1VibEErZkgwSlRWU2dpdUZ5UXVEZGRDUkxEZ0J1V0lxaXQ0b2NRN3RxNWxnQXVySnQyMlI3UE9WRDNDZ1FuQS9kYW1DVHpGd1hkR0RvakVmOFp5dFhNblBLQTZlV3RKck5VRVg2bzlEam5VNzVNS2grb0J3WkxOQUlEQ1pGQ20vaGJqZ0gya05LRlV2TGIrWE9pbWVZTzRRcVNiVzNZdVBxb0ZiamJ3cGNqMjBzWGNmcTA1Nkx6a3lHUGVnVDNTbDhCSDhkR1IybXFkWldpSmFPaCtqUkI1MjhpSWl0VEpkTlhjRktjcFo0ZHpKV2NrcWpOV1pNWXlRYmcrL3lJVi9uc29wWEgxbE9RQ3ArNVo4N2o3RjEzM0E0YVZHK2kvWWVlMEp3UGVXbVVhbUx0SWdKa0liVEpvTFhoaVBOb1VRWnVMT2VqRXB6eTZTZWdwWWc5eThGZ0huaCt2L2JKVm8xamUvM2Z4UXdEbVRMSGJIdlNpa1BZUGZTQnpxVkU3b2M0c3BqRExleTZya1Y4b2FCbHhETk1EOE9mRkg5bktWc2l0YXJOSzQrczlBNVRGaW9Zdmdxd2NTeUxrbjF0SUlTT0srTXZaaFN0M09UTnF2YkpFck5aM3N1YVp6Q0JmMkpTR0JtdTV0L0psdUovNm56UFJqRnY4aUlTcEI1Z2pWRnRwa0RQa2VGMUkzT0J3K1RjbjZQR21BVHJTcXBNN1JGZzBYOUNGajlBcjhkTzNxMVlOZDAyblJBRlR1TThUclNiOXJzNlRUd09nL21ITU15cVQydVkzMmtUeXFhMU4xK0dmbjRxYXBQYlFJZ012WTVXWkh0YndzOHlac0t4eUtRL2JiYjJncDVlUGxpNWVJTGU4RHNQUXNBdWlZQTgyVU1iekt0TVZZZTk4cU9hL3lObUdTcFRWYXVNbTAyM1IxR3p1eU1YNURlcjZnQzFDcTJLWWRGcko2Z24vUnRDT0N3Rmt3N0FQcmxpV202VDRBWVZ4TUpycXNndVRqYjFKanZtb3Qxdm5NL0YzZ2tFOXo3TEVXMkkyZy81R3gyd29JWFp0dVoyT2FsOU04dVI2OVJTZVNBaENIMEFhNjRhWWVwNlhSV0czdUtFTGt6bSsyTmY0NUxoOUoyempScVZqNXFjZk9NcXl2bFlTVzByMk8rbkhNSTQza1RWVmd5RVFWRHIrWUc1MFhDTERVc2cxV0p5Slo4S2wvY1c5bzM2aTVYYWZwdDF6bWw5VU91UzZxQzZzL2hFQkdPY2dkU21pTE9oNUJIYjFjYS9RUFpnNElITS9Mcy9CZ0NMUTlQL1gveEU1SmQ1a3M0K1FoUDlGdFF4UThCT09oL1VJTDNpd2RucXFXVDZoNUI0dTkrR2tWUnpUYlNCYmpRRVhhRFBUb1pRRS9oM042UHo2ZVp5NzRIaXpRWWt4M1NsZEE1NmJ2bkVyWHNkRk1GWnZNQlc5ZUFnM3pSbnBaTnRFang2cll5dTNYeC81UG56VzVaZzdJd2VtMzV0a2UrZ0pwRG1HQW40Yjl4QS9Jd1ZFUlBYaFJSUmRNVUxHdW96YXhoczlsaWVudGRhWmpDaWphaFlWb21rMGZJNEIrVHNZdFdQdGhIeFJvaWE1ejJsNXN4MnRNRGVCbGl5NWF1Q2VlbTFySC9qWGdxSE9LNzIrVzlrUVYwdjd5b21WYVIrbHBFVGs3VWtaRjQwd3kxcEJaYkVvUnNUd3ZqellvQkh2TFExZnpDeG1HWjJ4R0p1Wm1VVHpCZWFUSVJ6TUhNdlBVVkhvMGJwVG1mMUZKclNuUTQ5QVdFY1R3U2oxTG4xckNHcHF0SEw2REpha3RseC93ZGUrTlFtbFc1Wkwvb1FObjk3cXhLT0ZERGRWYWJZbDFXTjJtR2JNWWhJb1dUMHZ0K3c0YzFnZmlZeDhhVFJSNTFQUDc4aUQvckpicTNuVVdzVHJBNjdESy85RG5rZzl0OFhMOVNyTzJSU2h0R0F3WkxRTS85Sm1EMDVCeWoxT1lBM0tSV2F1QXRpMWxDZmVXSDRHQk1DakxIOURJVDFIZlF6aDhBdGdVMEZjanhRb1ptNHdTR1plU0hudlIwM05SOFZYS3B2WUdpS3JzV0gybXhoL2pqcGpJUmdicC9BSHp3V0Uyc2x4ajBMckZuL0ZYbyt2KzVEZE52aDA5YzA4eC9LZFNIbVZwVlY4L0M1Zk1lczE2aS9oZXl6Rk5za0s5VDVnRXkya0Mvc1FBby95QzZnSkd3eFFObU9oVzZiYzZiVFpJaWl1UGR6bHZVK1Nnb3BEZFJ6RDBLT0lob3JNbkhoeHY4UFZSNG1LWCtWNlY4aXRSQmx6b3Z6WW0rcDJhSWZ3VG9pUmMwenZWZjFPWC83bFUzaXRsZTV2eE1GajRTMlM1ZHg0OW1pbW0veXN6cWozWUN4WUllL1NGRkMzdFNXdHBKVTUxV0hPdEhYa3RSSjBQdklwL1Z0SUVhbkd0b3RvcTh2U2lzbzJkQjFKajF4ZEk3RElCRVNGNlQ0SjIrR0FMZENUMlhIc0hVb2kvek1MZ2tFczd1RE8xeDlRMzk0ZlJPV3lGeXJXY3dwWWlQSHlvbTFET2czZ2tBWXhJM1lYTmlhSFVhUzF4VjFhaEZuUkl4U1NnUjAraGxSMWcrL0ZMUGE2cWZvS3lyVVE2MG1Ob1A1Uy9xbldJeXR3Y2gwZUY0blV5SFkwNG9VRldyaXlaN0J4SVFGcm1XMUt2eWM2d1NZekh0Z3hQN054cW5ab09Ddnhwby8xVGk5bE9BWHgvYTI2cUc1OXVhUEdsVnZWalgyRHRqTTRVZmJyRTFWRzBzWVJwYVFnVythRzZkMnJCMWw2emNocmUwaHliYm1yUDBmMlhCK1FmUlVRZHkwTUhVSlpjYTMxTGN0VFcxdXp6Q1p6WWRxYmVJWU9IOTFpbGFlNDVadGh6VEhuMmtORG1neThWNmtRaDB0KzFHdng0UzNYSlp6UDhCbG93cjFGY0FnL25oblFWb1Z1YjJpTDNuVzF0T3YwRG02THBnamFzd245TUgza0kza09mWlNicHhmZmVJbURLdHYwaFVmL0tvcmJsbkZoYkpkbDRXTnBoRWt4b3Jlcm9YK0ZpYSthU01hTFpsWHFjcU5PSkpGK29ydnFrZVIvbG51Sk05T2NmRnB5cDNHMTJiMlJ3THN5dEFTVllWb3kySGlSc0MrZFJLQU42YkttOVJxd1cydzB1bG1SZjNhWnlaZWhBbndqdk5kbXNqdHVJYXhHN1VzVUI0UWJEUUFZM0pyMEhHbWRKQmxwMVZxWkcvQmplQjlVREZsaGRMRkNMODBjZG5adzdHNEQvZWgyV2haaFlsb1ltQ2d0NmpBemc0d0NRc0FzZ2E2OEtHeXR5dEdmMnNBOVAxVnFRYWxsZEtmOHpvVVhqR1BCaGtwK3hobWEwRDdjK1VYeVZhSGl3RlpUVk5DbkcvbkZiZ2grVEJjYldFN1pqRHNUaDVpM3AwMmxIOXZWTmw3YkJsZllXM09qbE0vRG9iUnBSb1lncGYwZW9TUWFIZFo4NjN3N29RNEF1d1RBUzdXK0tNeFRVUGdvbEpyVk8rcjR5bjMwTEd6bkhXZ2k3S2xrOFU1aStWU2I3ZjNJbXlCZERXdVVOM2xMTkdQNVJaRWdQOGdQaWRZNS9GOEtXRTNHdXBDMGhmcnU2akdwYWUvUnpWVEdnTVo0a3pldmpjaTBLTFNXcFMrUGN2OHZhaU8rVFNaVlI2MU5ralkzellxRFZGemdhN0pXSXVOYytuQjFlNDNlTmxPZHBaY2pHRk5aQnF2dWl3YjB4d0YwQUQ3TzZjd2xqdzZXUCtCYlFaY0QzajJvQ09sMUVNUWxwTGFHL0wxOEkyd1dPYVJtNEFheHlGUnBDQm84T3R1WXBWYTJOM1ZPMnhFa3dyR3ZlUGxmSzVTNDNtbzNMdmtBc0haQ0ViWHptQk1KdzJJSWc3QXNSb2dacHJIUkhtUGc0ZklMY1F3MjRNVm5sem81SXh4b3pQUEZyQUpWbHhmK3Rvdk5oOElMTW1SWHNteGx6cWNYblY0c2FnUFRJTmQxNXZhYUR5OFp6R0dqUUtlbmJ3ekdjUzVySCsvL2M0TVc2M2x1VFZsTWQzZktucFp5SG43M3N4TGlPQVdQYzJWdmRjSHF4SldlR0JwZ0xFSnU0TS9kVURzMEwxTERDYlVsT0E5SWt5d2R6akp5WmU2OFhTN0dsWGZRK3pVODYxQTdrcHFoMjYvWWhHSlF5RWt6ZFZJSHFnWng1WjNPcDR5NHRxZmxFbFlRUVlQM0hCaGZJTTZISDJkc2pQYzMwSGdFZGdCN3ZRM3NvNjlweFFjSWlwYVBRRFVtOUdyeGVNSjg1MFl3QnFvaSsxU1dhYzZ6VVF0NkZFU1JYN2JaUUQzNWswckFTN09SWVdaQ3I0RXUzTEZUV0QrRGNYVmlOZ0lXb1ZTTlpHOWhLQ3JLRDh1bUZSMkNpaDViRkJGUjVsSXJETDgzVWV6RW1OMisvZE9SdzBkNTVoL0EwdUJ5NGV2cUdGcGcrbE8vclhhc3EwRUdJSlBjY3NKMndWN05FNk1WdWcrQU1HditDV04zVFlSUm11emFjdkw5WkVqMGhSYktsTzlpSCtweXhlWEduVkpuZExxUzlHN3JNaGRPWi8vUEt2dGlOMUZNYnVRcGkzaTBqTUV0eTZTQ3M4Mkt5NCt6aWVoVUtpdHZNSGVEVkxYdUs0NFJmQnRrQk9TSHpYbEZKdmpLZHRwWHZqSk1yTkZiQkszN01pT3J4ZFluOEVJYlBSMitPaFhVTTFLQTlUYzlNNitud01lYnBQMCt6YmpyOGpBYVBmVVZVdW1PYzVRb1AyNEI4ZFBIUmlGbTFmRy9zekNHclNycU0vWjJ2NUtJOGVFTWNlRmpySkZhaGJNdmZvc05pSEE4SDZrYkVwMkxZL045c04zYm9hU0hRa1lvT3doUnU3R0NtejBMSkRXNVh1U2tNOTJJdEhlRjRDRmFzQlE4d0hwdEt5bEEzOFU4a3Vjc0ROQytQVHNhN2tKdXprQlR4U1FBK0ErOUNjVkpaWFNhOCtYVndsRjNnZ2YrejMybnpBdlRhdWxuTU5LQTM2TkNIdkRVd2tsOURsQi8wV2luY21wc1RyVExodnY0TExPWWZDamlMc3YxSUhZOTZMR0pGdEFhMXREWnIvbnFMcUhFWERkVDdkWlIwZnJWK2NFQVRGbGw5ck9INmp2VWZRN2VwQ29mcHdibFQ3M25HT3A5ZnRONlBEQzViU0dsSUVQc3IvWlBDRkpEWVRzMDYzOW0xSmdwV3EvVGZCMnlTdkhMdEtRc0lsUFZGQklQTC9vdWNIRWY3VHVnczg1Z1JGTi9LWnVwOEFSZzdaVmNGOE10c2dzbC9pRU9pa2ZJVnl6azhSTWkza3FZeFp2T3h1VFBtWEp5Rzl4TjAyY1RSZ3JFTkNIWXdIa1Rxcm56aUhRT1NxNC9yc2xQNFN3MW0zVVpndkhjdEJtUzBKU3poUnByRDJBdU9KYUVHNmkvbDZ0alZjK0RlcGViU1krckI0NC9PdHFzL3kzMTFYOHZuQTNzenkvNmhOVEpIK1J2d3dGRzNEUzBmRit2eWRJOVFINGlrOCtVVW9KUXQwYi9ZREUvZkoyemxRekg5aWIrdW9GbkN1VFR4Yko4RDZmQ2gzN0xORW5QSHFVVGVBSDk1THY5YWJKWDNEQTlhK0IySkRJUE1KZTJnL3B0VkhYclBjN0FrWVRZajBvdVZ6SkZPUjJlODRSVlpoMVExb0VQbStnNFk0d1VPMWV4RDRYRlhpNWo2WndOdWF0ZEFxTDZzcUZmK09pQ3NJeERnSThCeWRjeStPK0I0S202aldaYWphbmloZjNtajJ4UVk3K2ljbndGa1JWZW02QTRUbmpBbmxzczRzMGExSjRRZVYweFRCaGo1RlZCM20xOUlDdzFtSm11YjRNUEVDVkpHRTIySzFMRmZWcEFzeXExQWpMMHZ0MXFLb2JrSXlMNUx5RFZLYm1VKzl3MVRXYWJOcTh1V0xlblhVaiszYnBTcXF6a1VYOW01dk55ZWJQZHMvRXpraHdjSmNQREhrdnMyTjFGck84VUorckJmZDlldndPRGVPZFM0SElDT1ZSYU9GazdnYUVrdWk5V1JEL1dYbXZJRlBNcUIzdys0VUYrSjZBckJRUmZXMW1ZQU54c3I4SGN2a3k1WGpFTVkxZHN3MjBTclBDODVmOXE3cUhCUHA5U3p1em94RmZlaVpHVmFWOVVONG0zcm8ycU9TVDJxeHdZdlQ5M2hOUk1WMCs3YUVpejVzRXZDQnl4ZURoR1FNYkNrZVN1VTBGZ1RDZnY0Yi9US1EvQ3pya3d5VkIveHhGT2p0Y09IU1lLQXpRYVR4K1ltRDN4ek0xYWFZMzl1dWtqTHA3M25teCtOSFBjeW04MU1tL09VWlVjNEVGa1I5NVFwM290b2M2VkZleHZzcWdlQzB5V05sS1dsU3RRUDJsdHN6M3l5THdabXVNazEwMlNQcWxjTFhBWTJObXJXT1ZEL3paTEhQU3hkQXpVTmdmWmNZVmpBdlRuWElkRVNyYWdxeDdDNGRPamxhNldBOU9Tbk16V1Z1blBPZ2trbXBHeFFJRzA1NnVieFo5akVpQk0rWFhsOVpuZmQ3Vms0cDA0QWxWZXhsVEFwa3AwelRxTURlaTR3TFU1cHo0eFIvRnlwclgxNGxEUGNCSDlsMG0yYUdPMDJlR1ZzOUZFLzhneVgwdFFvcC8xbDNQZjltWGlKRWJON1NDQmFGTEVDVStiZTZ5RS9VdGY1OEl2TWowY3hjWUs4Y242Q012VWtDeHJxMHMvSDJDVjJsOEIwMlFYMWVqcWhtV0NlS3pvN1hkL0QyMVV0Tk9IMjA4UHk3T1ZuOXNKT01aeTFPa2JqeE5lMER0OXdqaDhMVzNjdzR1TllWRi96ZkMzcG14MDdMaWIvaW5pd2lHdEd6MEJDd0dRb1RXcmM0NXdJcnFva2hiNFJXaDNTcHQ5aHpDUVd4WHk1MGQyTWxXU3UrMHUwbWtDeCt6ZXZML1pOaTZ6SGVWdTVKRHQ2Q0RHaUtOa2dCcDN3empTYkJ1a21sazgwb3IzbXNmMlBNZlF1MzhtTU9mdGlwY1hqb3B3Wlp5UVl4RVMrL2pCaTN1R0lpQzdId3B1bWVmZW9Eb2dic0xTbXNSYkg0ckxZYWl3VkJvczVUNUxuSUNpK3prdkFXeWg0UEVKTnM3RG02UXlqWDNXOEtYNUVNajFNNVlqbjRrSzl3Nmk5Y0phOEpGQ3BuL1doM0gxQ2U1RDlhdXhEaVF6eXlxa1UzNHhhZXRxMThSNEp4TWJ2UEFpQ09jS0wxNktlSzBvUTd6ak1VaWRZWDFqU2srWEg1SVFFMFNoRzdoZ0wwS0pYSmlyQ0pNbVJtZE95MDJwaUQvUkY4aWlhRkcwcW91b0RJQkRCcSttSWxTV3hSaHFBZjNHcUQweS9jU3lGMys0ZDd6UzFlT3poRkg0SGpIY3VmNzVrUGtCYURXNWZUWUpvMjVkZ1N3NWI1RU9UQkZ3eURYS3kwMnlPS1U0U1BWSVoyOFk4YmFZeWFBOENHeFlTT3AzMUNRZGJTUVAyQldaSkZ0akRkZWcyKzRVSzNUaFRnVXJqYmN2SVRyZjdlSVQ3RDFjNnpuVDFuK3l5dHl6L3JPcVdhcndQOXpvL3lOVTRlQ0NLZWMxMmNGZlVYNlRvZDJaREU5WDBodzVPcDZoTHArTkR1SktQbGVxVlR3N09ML1ovT0N4Y2QvRmxFUDk0TXk2cHY4elNaWnBhQ242OHk0cEU4WlY3UWVhVyt4YWMweU4vOTJOOXFmajNOTzJDYVE0K3Z4V1hhM0E5WjBqRVpTdjRKOWh5Z3VhYkpUdDRaTmticjVDank5aXpRckkvNUhpN3ZDbzMzVjVJNVlPSW5jTXZCWkZVZXZkV1hkVnZTaXYvOWJOa0hjWjR2UUlaWWloNkY1TktTY3RUV1hBSm1ZaGs3QUR4c21Uc2UyQjhwZkxMQ1A1clVqa2h2TmJZWFJkWlRlV3B6K3plQnl3SGR2TElzVFRJekc1bEhNcDkxN3lwTWFnSnA2UVlpMTNrbEg0emN6aHdRdmRHK1NtNmQ5RXJQd1lvK3IyV2pyMGdkNW9lc0U0VVRFYTN4SVFvemJqVFptaHljQ1JiVDBCNE5Ga2ZGZ3F2V3BucW13dUZ1QXArNXI5eWl4NzBzSFllN1JvZHlHSlU0V0R3TnBEeHJaZy85dm1sNU1uY1kvaDhBZG52OWdwamt3bWRwbkhFRU1OejFqc01SQ2tlS0RPZmtBSDdZRkpveElzajJ3UVZoU0QwY1RKWkVMaytIWGtyL1VodXdGUCtoSHZJQzJtci9Eam5hR1BYOWNVNEdsZExTQ21sdldORXpVZnFMd2lHWHFUU0MraTdYbVg2ckMyM0ZvQnllRGJjRkpzY0llN1BmVFdPQk05ZnQ5SVgyY3hmWDM4UWgxNnJJYjMzNVZlUDdhK2xKNE5UamV4cHNUdmJrVlIvdGF5aFVyekFIc3NnQ3c1cHF6Smg4WFN2dmVGUlNqV1d3QjlVQlRYZjdtaDViTkgwTEI1TlBydlZFdmc1L3J5UkxXVzhzeTRSa0JXZnR0TnhReWxzR3N4SnZzOGxPNEUwQWJZeVIwSVRidm0wODJvRjdaQmxROTNIUlZPZFRMUzRzck50Y3U4V0JySFQ4TWxhakdWRzRsaHNaK3BnbU9mWnhuNTZTQ0hjR1haOVZwd0M2Vzh5bi9HenBhY2MxdUl0NUFCWjJWclRhS0dsUWpJYWgxRGZkWFQxMmg4eUc5Y1p5OXU0MkU2TEtLTWVvWVZsd1NPL01jVkZRVkREM1JuYlFJMHBWT2l4L2Fjbld2dWVOOE9ScGI5VS85eEpoVDhmdDVqNXFyVHA4VG5nalNHZEt4aGEyU3FOK3hHZzcwdXgyTEQyNEFRMUZlck9taHRlNnU0WHk1czBYQ3gvRHoybTN1V25VL3pRWmJkR3RwS2xETnpKZ2NZODNGUWpFck1PRzN0SVFOYTJuWFJnNldZQ0NNMjA4UE5hVnh2VFhPOS9nckVJd3FNZFNSZWRZVUpzK2t5YzVhM3d0a2s5VTJwSk4vSlUvSkI5MDMzYi9qT050T3NwVVRzaVJrOXZIVjB1bVdRVzVXVUtjS0VweU5FSy9BWDhrdlpoL2JkRzh3eEphM29NRytOV2dneENEWC94TURmcHl6ekNTbUFmNkR0Ym93MjNUcFQyQS9WbG1pRVBuM0RWZmt5OFA1WlIvbldpKzdmYW4wVlRiM0RXdCtvWWdtYkFFbnpWOGVRYnduQ1VlZk5sZ24zN3dnUnkwNUZhV3FONlcwV05BMGk1d05ZdFJ4SVIvcnlOQlVaYWFhVk1hbzBmZnUyS1J3ZUxkRHdwbVJqWGVqN0lHb00vU3JQLzAyaHZuRG0zNzBNYlBCcnFBTGFoNHZBcFZCak5lN3RqYTNlWmlqeUZMUnZYeHBtcEhMM1ZOMzFUcFowa25tSy9KS1Qwc09QZEJPLzBUU1NCWHYvRG9KUlJaQ3RteHhDUk9pYzhWdlM1c3V4V3JFc2hmdEtxQ3pCSGhCZ3Z2T1Z3VWJWakt1SUR6UFozSFVHU0psaG5UbHlJSnE4WWZvTjF4ZGtrMzloaEYzcExHT2JIekh5b2FhRFpWQjdmbVpGWFFZemlHNTdFLzF3aEU5MkdKeHNCWUY1eU9mQTZXOE5ERHBHU0xmNC9IRisyN2VYcmpNMWhXd05iNllONVN6VkxBSWJFamFoNm80Yko0eW9OcXlFd3NOeml2MDgyUXJwMUkxWjFrc3lGaFhia1Q1bzYrUVNSd2xjRHRnbWxhY1JzaHhTREs5OEZvazEvbGhGbWtoaEliT29Rdk5tWFdjRVFvNzQrL2JieTFLOGp1TEFmY0JYM25yWVVCWDJ6VzA1bkRZcldTSnZCVDlkUi9vSHVBUmJqbEN5R2x3aHBPTzAxWDltczlFRGJCbUtvYStBMEN4SWhMRTAvOFBaRlBkN3NUb1kweTVwem5PSDhzUklIbTYxdU1ER0N2VDljT1F0VTBnUDAwcy91eno4QWN5eXpnOHFvSkFmcnplZGJnOVh2bzljQW5lMnFNaDFsVU5GeUNtUmNkQW1ndEF3TzhIdkFnWmZQR2pvU1IyTHB2a2MvMlVQYzh4MTRxNVdlQnI2aFRDTFhwaTdaSEZVc1NNWkM3alJ5OFdjSDQwUDFWWlNkR3RrTHdUOWtGelFyVi83WjRUZ3BQcTEyVGZqdFZEZWQ1TXo3TDhIQktwSGQ2NnFkZnRRd3hIbUMzSFJ6SUZpUjN3U3JqVXQ3ZkU3MTlHRklldHV4WXhmZFVmODhIQldvYVpVRVpLakE0M1ZQakRpTkVGM09CTTFsSVQzR21Sa0lXRHJWQ3VvM0x4Wk1FYjY1ZWtHR0N6YzdZRktpTVIrRjE5SUVSenpBRzI5THFpYWZXc2x4TzhaUGtYWjVxWXZqL0krNCtNQnFma3RhSWYrRVczUDZhNEI1NTNSVlNKM29Gbmd0eE9UNEo2Z0pIUWh3QWJRYld0QThnR1BiTUtObW5laEtwUCt1RkMvdERHTGpxRE12UGZOZHg4TDBhaGNFYTVoWmt5eGhSSldTRVNTNWRxZW4zdGRVeFNZUnNPRVY0WlZOc2VoRlIwbzVBTkx0RHM3SnpRc3RrL0dYazAwaXE4MWNsbFZ0YTI5MU9PVkRkSkRvUUQwNEZmTmdhcWhXMjQxTURUVGRFOG4zZjBhMjlHVENKSEV4eGtyclMzNzEzRlA4ZmtTaGI4UnZuT253d0tqSElPNXdObnMwUkQvNEJwQW9nNTU3YVBnUnc5bng3Tm9NK2lHdCs0MXNJRS9tRzNsL1pqZjF5V25aMGYzQ2ZuWElkZ2Z0UzJiNkcwS2t3MEJNQ2lMdElIUHkwVWFOTGtDZXVmYW14bmNXVXZCR2lvVk13bGFKdlVCVHdNc3hYaktXTFFjSnIrSGJEVm45WUxmY29HSnFhWVJBS1FLMHB6U2phYmkxSXN4ekcyQWtza25Vc0tvK2JPaFh5TFZuTWt1TjBqSXNpdDRFN2M0Nnp1WnJBVFM3QlFFOGg5d1hrNnY5ak81TUwwcFN6djYvMU1GUVFpQ1I5cTFxVU96OFo0UXRQQjR3MVhCOS9mRDZvellnNXhUU0RnNTYwMmk0V1NpYlNWenlHcnhZbjlNN1RlekVWM0xwcnplYllCQm5Lc2lHZ1J2OGpZUmMwVWRKU0pTNWRBOE43ajFoOTlDTXRZczF1aVFRNEkvME44OVV0SGk3Mjc5MGk1Tk9ML0dGM0JKbXlSdGc3cXQyVm1pTGpRMDNDZ2xaVW1UeHl1V2FvMmZZZ3RhM0NJM2FTajU4eFBwRFVWOGNta3lJNFZPWTUxQ3BmODdsaTFDYlhlT2RKZ2FEbFN0UGtXR3NIN2t6Y2dZL0pzNHZBV0doajRtYVgrQVdma3Jldk91MU12bnJ5a25OQXErd1R5VkNWRDhTSFNiTXh5a2g5UWtpdUNxY25sTlltS0F6YUYxcUR6bmxHR0tpbGswaVR1bjNuR2hhRUxhbVVEWGRDNW5kTmRSRy96U0dSQTZuY21Zd0JSZTErb0FyZ3ZtUWc5Umpxc2hvMFYwSnllRjZ5eFNQNkdhdDc4a3JFeTY5RHB1WFAvRzZKYVFXUnFyMDJXbjdKaThWbmcxRmtBNzZUNUNuam94REVFMFZIWWEzU0NROXRyUU1WdkV0UFNib0wwc1BwRjI2bmZaRVhLS0lmOHQ1NXFhdFZFTXNjTzRlT1RzNTQ1U012dFlRZENYN3hJK0l4UnlLTUtTa2FGTkFCQURNWEs4eXorUi9sT0owU3h0em13QmtUako0aS8yU0FLUjRLT3Z4aUpkUVRRNzR5ODh3ZFNhWDlaSk1zL3VuSnc2SHg5SlVKNzllNVZ2TS9EeS82Vkh0a2FKaXU5djVweUpCLzFMZ1VKbit1Y241WTVXN21wQ3RneFRXNzBGWWQ4NHdJSTREYUdOZXRiQ1dlOFF1dWFDcit4bXliek13bVBmaHVJL2hpb1RiQUNULzBkUktuSkhIMzJGVjUvellsNVpOd1o3bnlCTGp6dWQvcTlHVkUrbWtkdXovajhiWGdXdjlBL2tuTHZPaS9UQlRjUE9RYUEzNER0dkJhbDY5RXZrVmRaWGw3a2Jac2Rlbjd6YVQ4ZEM2UE9PWkdDamRnWkVhZWNoM2ZDeEFFU3RnSXpuS0tOTmlwOFZGYVFsdE00N0RIaC9PK2RPYVdrK21ZOGo1WGZvWFA5bkxldCtIVnNsRE90dGRhc001MVFEN2hldkRJTU5UWU1uaC83RjZrbGpEeW96d2dLajl3OFNvSVlyRkFVS2VnRE9EcXFndUllc1lIVWN0S2NKOXlyeEQrbFF1bWJHdER1OUZmSmQzenhydGJIaVJmUnNtdGZidytjcHg4aXZQM2JUekt0Q3o1NzJ6KzM5d09aMjJGaG5EcStQeWsyZEdWeHlnYm05WGxrbnZNeExGOUVmWW1SVDNIa29Zc055VWtPZHk1RlphUjF4d3BDZXkvODIwR2p5UENhRHBoV0pGM0FxVmF5czJzQXFUam1zKzBqbjFQdnZ6c2pmODQ4UTlVVnViclJTMkVocWpTdE9Id0FyczNKWHY1OUpwVGhlT0NlM2xQVytVWHlUdTdIS2UzRWdHakQ1bllwME14QW9zdEFlbjZtcXNRZGptWDJxbVJmdEJVWVpFTlFCS2dmeDlBNXlsQS8vQlhWTzRteWhxdnFzSVhtRmpteC9kUDQyL09pSkppTXUxUVhQWDg2UlA5MGtuaFhibHpkNExobUw3T1doNGRyN0NvTDJ2TlVrWUFEUjFrNGFlelcvYnJOdld2L0FFNmxsMG5mSGJ3ZVFLTnBLMXpzNmpURFg2VUlDcmVSRktRdkxRenNjZ3pQWThnLzRvcVY3akFLTituOUpsT3BhM0NtSFZYeFF4SVpucDNWK1poRERWWUtxM2tTNzNxTDBha3EyZ3V1UkFoWHJhTUgrd0ZaNVovRjNmamxuMEJSbFBxTmpjMEhSblpXbnptd1R2bmZJOTg0K3F2STFQd1RCYU45WlVoZlRpd0hjOEZQRU1uSmlkUTBaQnhSTEhzRTNGejVjZnRxeGhCRDBlN1pEZjdRVElBQjdRMzRmMnRxSUliNFZ1ZFpNZnJ0eVNMZ0ErUkdudG5DUE9zQ01zZTZHRWU3SG14TEZ1cit4V09vWEUvc212TTRaSFBqT2NlbDVHcnRRSFhDNE4waXJraEFNbDV6NjFwdFMyazJITEUveWE4ZTg2MFhFcUxFREhxb0RhRG9ZdzEvYkhSbmsvNklwL1ZVV21McWwwejFheW1LU1pVSWQvMG5tMTlYVW5PbkU3dDNqd0tScFF4UXpvZ0Q4elZLSkl5MXhRNERsdStUdTJRQjVzMitZZDRWaWs5dk5OQU54bHBMMDFLNGU4WUNvZHZCREpXWndpQ0lEY3FGNE15NHUwYzlmK0MwYXhwODZ4WmQva3NmeGxlallCWnltMXIrZkdKWllBbERkSVhJM0R0V3UzYnphTlpzNTNSajBCeHAwOFVIQnNsdlFveWgyS1VRdXFNbktrK1dqZGhpOGphd0FxZXVJQTdPQ3FFdFBOYWp1YmpqMU5SalUrSE5NZGQ2bzRyNHZZTEZHdFU2bG5pK3dEbzQvQ0dsVFhtRXJTbmxrMFVWWk9ocDNUczJnVGdZVEJuSk0veFZjV3hRckt3Syt5V3NtWU5FZjVIQSs1Q3NGWUV5MXhmZlN1UmpMeE1ld042V25kNDd1NkhGR1dLajRhZVZhVlQrSGhMOEh3b3Z3MXlNY0RkejVOelYzb0RWb3F1VkVrOU9HaWhWdFM3R2ZlbThkZDVxRmhXYkdJZ0NzSmJoaW1MeC9GQ0ZYVWIrMm1jQnMxaG5NWWMwbmxWbWRtVFJZa292R3Q5Q3VKM0NXMzNTUmMxckliZFRRRjUzT0RKZGxwQU1KM3hKWWFJZUpqWW55clJQYUhpaGFiL2xxUjlHYllScVpCVUJlSGFnTEdWM1FXR1Q4TXdMY2hyZWJqODNrclgwUldlT0dEYnBIT0NnMmkwZjR5dVEvc25hYkhuci9FSk9DUGF6M0JMOEFxVnpVYVNGSGd0TU04VFVmcm1zZ2QydzA4aFFES3czeXlFMktsY2JqczkwR2V0b3lhTkJCak1ZR01XWTZQRUxWNTI5eUFkQmVqTEJjZ1RRTC9SZmdvSVh2QitZL3k2bER5Zy9oWWYrSFFEL1lzak5aS2twT3VEcFIvWUY3MHBYenNGU0lpQkg1QjdpdFZKOEMxT3hSUDhWNmh1NkZpNERPNGx6U2p5QUpRVFNzS1dPSkxoYzVib3c5a3FLRU5XM1BwQU96R2oxQytBanRLUmRTai95ZDNZdW5kT3FZOERPeWhkdGIyWFZQMUQ5U0R4dDNIa0pqRUZyRnJLeFIySU5melc2TjY0UkV5SEl6S2Jrd0RBSHJrUjhIeXRlV1NCS05odTRtbWdyeldYVE1JSWZ4TmZjREl1ajU2cmdnSE01V01aaUNobGc3WHU3RG53T3FUb3FMT3FiWm1FOGxwa0JNc3htNlA1eG9UeWhiRHp0eVR5N1pYT0RsbTRiQkhkUmhQYWZ4dVRLU3BycG9RS0FLMFFScjBvZ0lPdDdkZU13K0ppT2lheE1wbTk3MjVOdExQYzBsSzFKYkxPcmNCT1FBZEtrdUNMbGJlZDBOUXpPUE1ET1Bra1Jhb3FTYU1GUG5jSXBMa3hiQUQ3Ky9DR3J3KzNpTWM1T1MrcGlPUzZqam5ydVNkRHFxNTNXWVF2dE1ZUEh6NFg1QitFM1poVzl1N0hDdzMwb3NzZkhSekNYYkxKUzZJSzVCaXFMVjE0UkRVckdKVEsrVGV0azFrcDdCcWoybXdXNk5QUlJQL2V2cElRMFgwUUZaNzB6akU4VXVoclFNUmtSdllVRUdIZ1FlZ2VnYlFsRFNxUWxyR1Jqclk0cEJqRTFzZDBmSk1zczBBYkhFb1ovckNOU3Vldm9WMWFoU1RJcUdwS0d1YlMvM0N4RXVQTUhYelVBY2s2K2ZTUXVlZkUrdGh0OWpnQ2pxc0JTVmRlQ0pOMmdJVnEwOXZjOEthWitDSWVkMkx0WXMwN2d2TytVOFgvSlIwNU4rTUFvYk5tTHZBOStwcnZ6RVZtSmhUQTRhYW1rSGRYYTIzT3loQmVZeXFrc21ZK1NjUms3Q1hjVFg3bS9leXZZZlZrNHErVVVKT1gvZ1ppWEwrbittOW5jdzFPY21WVEVuUEhMTDUvOG9CeHlvd2Nod0NRdGE4dllwVk1YWkVtcGRiTmZSYUd4ckFjMGZwK0RyUGlNTVFhU0JTUGZJL1JDeFh2aXkzdE84MG9xOFBNbjVWMk1ob3ppTmhsdHZjZ1ZHb09qaGtXd05LczV1bXAyaUFhTjM2RUh0bVJIdVVPZUIxd24rekx5c0tEeDNEZTdYMHlINHdqaHJzRkFFSXAxZHY5TzJScnhDZHllSktpRGlhZDE3ZEsyMWFKdFJFRktVQktDSjFHQk02RjdWWHFIZ3hiTFJLR1RuRDlTWk1HRkI2OWxJVnJWdjdQT2lZd2NpRUk1WXQ3blNWMHBxTkFVR3RCYUdLb2JiYUtMYlJZWDQ1c3hHRlNRY2NIbDZibGV6MXFUSGhBaklyUjRiMjd2dTM0ZHRTcTZSRzNLL2xyRlJnOHhJMGM5d3c0Vk1uZjI0UVRoeFpDU2VkWkR4NzlXcXY4SnVLQ3lWNDlCb0Q5YU9pSktCWmFHTWdFQTFFUm16QlBOdUZsZGZjRkRKNitib0VaQ2JkWGhGNWxQWVZwOHltOThzZ1NleTBFbjRraXRZelZibXBndVVlRWo2VVd2U2ZkdDBLWXlyV0NucWcvVEI0aEV2LzluOElLRk9Ibm5CQnJLdEo2bUVnYWdDWWVpT0I4eGk1czI2VEl3YnU5dVRwQ1BmNXVqYTRKRllaUGdJODJUeTVkcWxiakZxR0FlSjd3VFVWbTRpTkF1ZWVzRFh3WCtiUlR1UmxSV2ZJY2grVGNhWEdkK1RtblJuZklQUEMxUzNhRVQyenVTUXlHY2Z5Q29PRlJCcVhJRHhBdnJxcVJUbWQ4MitTRFFBcWIzTGlISVEvdWVjV3BTTjczVWRGYkhkVjNqakQ2N2VXc2pjQW9xNzBIeDBsSmFFMFVRNitSQ3hTOHFQUkZReWszbWgrWUFEdG5tK3NBSW4ydnJ5SkZWenpYOEJyRVlLUHp5SElYSHlGZlcwUUdPUGJiVWJEMEFGYTIvSURTYlBvR2EzY3p4czdQeEN5STBWU3lwdFdQcTlFWXJwTmhxbWQxWXJtSVBFR1BXZnByd0hXSUFFRWtNVTljY1hhZkJ5SENRQjNDNkRrTVh6bTNJZFE0SVNrK3NLVzNLbktSV3E2UFNoY210UWxUTVh5TmRFQ0duTlNTWktYcXZwa1lKb2dQZDl3NVZVcVdsb0g5YXM2bG0xZDhBSlYwaWtacHlFK2ZFaTFsOUwrWjM3R0R3YkxMY0lGMnlvZ29aU2Y3Y2EyUTRSekdhTXlOZlQ2Sm5lSGNKcWFGVFpKeHMxdUludGVsSEwrOG1VY0hCZ0NUek5pWFZ4eDRWRWdvdC9mZmNwR25WdzVCWFpvc1RDOHFweDB3UEh2S0RVWnRGbU9OM294cEhHOUhTbTVXdWFudWxveExLVGVKTm9mZDdnM0hlb0VTZEZINWtDdWszWS9PYm1tYW5kdjZYUGFGeGUvSEJtUXdSbkZqL0gvbnU0SVJvRk91TjltMWQ0alVhcWVpWXpYdVgvZXlRWnl1Vm9yd0ptSUVzcitXN083VVdhcUJCYUd3dU81ZFRXQ2N6NEtzcDk4dEQ5NzVFbS9BOUdDNXRWYWl4UHBGTmNLMWVKdEk3RzVkby96U1A1TCt0aFRuN1ZTMjFxd2lSK3Ird2d4UzVnVWpnbi9jL0hXRURaQVI0Sm42ZXhDaHlySUxIcTBHVStiOTBZSHBUOFBmclMwMTJPMVJwU3JqTHNBVTN6Y0VWeFhwWTJNLzJwTmYrOUhWckZTMnNFdkxrNlIyMFJhR0VXMzE4REtLNmtIdlFzcjJwV1B4eXFhbUNxUkdTcVVJSlpRSUtxSFhtT3pNdHdLL3FicmliRjIrcTZWZzZOaGhGTDMrSmt6aDFITFhmWWlraW5qM0pwUURRWnVncGIyREl4OFRRYXlGZWxQT2VOcDhyajREUU5ISmxkUEhmQVhGRDRNeE0yOVlPT1F1L3hhRFR4ZnRnYXQwSkpCMUpDcmJXblBCeWhvcFVoTW5SYmRpU0orcVRSVGVsY3E2MEpaQTVaUFFybHdBcGZKbCtCbFdPNHZiR2xwSzRQOFRXVzV1TkFNVjVTM0c5K3gwWWNMNXpvNU9rNG1NYXpCWjFVc1U5bFkyMVZ3Q2dDQlNjOVk1SnEvV0gyZnZvTTJuNW5mTExmcHFIb3ZLL3dTWlAyaEpNdktuOXdhU0xVaHp5cVR4K3lUNmlMeDVGUFlmVlBLeFM0S3g3T090L2lxYW1vTGpHS3QzWGcxbDNrYVRqR0lCV0xlVHdFZzkzbDJiWFlmbUwyYlFNNnVPY0ViU29XUGZqMHpyZktwN2dHRzVWdXZ5MS93Q1U5WG04ME4vZmVMcTFIbmNTWGY3Y3N6UTlXanFUL1haKzNscllYYXg3TlVERnNlNHMwYk5rK0ROZWoxcUtDNVB4YURKYVdzdU1TR2crSnkzSCtsbjFCNC9SQXJyazROMzBmVnhKY1QrWDdISWd5QlZtTWdsaTlHOG0yN01nMnE5NFo2Wjh2TWxwMFEvcjBJVXAxRkNxVFA1M2dkOGx1SHUwZTduRWJqck1HR0Y3c3JYZUxNUmNlRjRqVGdJai9OSFZ4aGZocFM0V0NGZjFhZGc1WXZ2ZWttTXlwc0xPUld1UktXNU9VMVRYUWJjZVFvN1MxeGZZV2NLa2J3b1ZtZ3Z5L2dEN1JoUktDUEpZU29DVkpSZzVFTUl5ZXFDb0xhQzd2RStSNE1teHVXUSszaTB2MlBQaWJ5K0RMdld5aktJL3lZM25GRjFpVHBCVCtNazVvd1U1MVdBcERXZEl4MVN4T0twTTcyd1VhZWwyd1VHUExYZkQ5SWtLZGhvMDNwL1NVVllRY3FhamF6TUFpZWxEMVlTcGtOQWNheFN5ai92bU1PS2t2ZUxKQldEZUxDNFllNStYNUZRRVRLTzM3TWZuZ0d5em85ZE5aY2VaVElpOElmOHBrSjJ1SWxBTWdJYTVieGorT2JwL0RHcVB4b1doZzdKOERuSmI5M09oTjZsVm5xbHAvbEtiMEpqVWE1U2xIRmFQd0pqUXhLRTd6SXJZSWlqZ1loY0N5ZXJDRW1ORk16SmZQRnpDa3FWR1k3SkdzbzdnV1JlOTk5TGpDTFF0Wnhyd0F6SXVqOTNoTkJKeStKNDNrNW1rdnJ1MnVrL3Fpd1BMbm0zQWZBaXBpMUV4K25HQXFIS3JNWmYrWG9XenVSTjF6NzRSSFB1dDNnSDNFVkpnVGNUOE9OQUU3REZWcTd1eWN4dHl2Sk1Sc2RwWG5CcVQzYnlRZUpKSmQydTljM1BueThBekJOUWlCZGVsNlBXc0VMVWNGUElsS0k1ZmV5eHQ2VEdBUGZXVDBCZWZZMHA0cXdPZ0lzNkh2d1dyOUJqUFdDUnU4REtWcnNtNkp4MDhrQy9qY3pGcmhXQmVOWHMxVFNiVWxVU2J0WW5KSStmSzF3T0FtRW1IZEFOWVkxL2ZSM1dDSjh3cHFUdkdaMytuTUI3azB1bDlwODBnL1BwL1kyQ2VBNHk4OEhGeE54NmFNYlRRNmdQWmNrWUZSMWZlaVhhZGhMMFBUbzV5NG4vYmxGWlhPRW1OakZIdzlBV2JVaDdkc3c3WEJyNnlhbmg2Y1BGaVFUSnVCVTYxejlLV0FoVnpNYjhsYVlqRXA4eHgra2RTaVlTL2ZYc2E3N0l2ZWJRWTRPNW44UDl0cklyT3MxVzRXc2xoeGd3S0hLckJKNlM3V3pzb0VvRFhOVkR3azRWVW1GNkpXMjNxYjNyTnVpTVhqNVVITlJ4RWc0NFpjUElUTW45QmRhNTh5MnBoYWE1U2M4enBQd3M0WGtSZ0xRL2tRcDR6TnU2VmdITmtMTWpubjBEL1gvanVxZTlNMER5dUxXNVNLd2hBaGZkMWFFNnNUcDJydWJOT203akdsSC94dFFldnJrRDNqRWhiU01SS3FtMUxsNnVkbklJUHZoalFHRXpRRElFRVJiR210czhQWDV6SDcyN1dueVMyOStXYy8ydnloTGZBZVJrMzFLb2hEMTJHSU1XNmd4NnN3VHJ4TVZuMUNDaWI3WEVHdmpWUTRGRC9Eb1YzSlhFekNLeW83M2NLWEs3WlRJOHlXais5QmlFQitIL3dZekdUQmxNK2Z2ZDI3VTlpZ3l1ODZ1WmlNcWFwZTc2THNLZnhmb2F1aXFCU04xTXg1WlZ1WDMwYUZUTFhCRTN4T05sVk1GUFgrL0FlbWlKaUxkOUVrM1E5c3ZMUkQvV0pOMEJxOUJaMVFSTlM0aktyemQ0b0taaHJ2WTliM2IyajlFMmF2Q3pGUFRuU0tDN0pKeVFoc1hydEVSRWkrTjBmUkFNNUVDMUZMc2p0VmhyQzd1SGt3WWFjRGFXNWRPSTVwNzR5eTMxTm44L2Q5amFWVUY3OThVS1p3NGcreGVwazBMeGFPS2lMYXo1R21IRU1BQjVkb3JHQUdJMmdMS3REV0ZHbEVyUzdQTkVnMERTcldUT2JGSXYzdEd3aFVCQlg1cmZZd0tZa3pFWUtScGh1NXZSOVRzVXg0a1RmL3p4dEtzR2M2OEIvUUJha1dSZFlKN0FXckhjSU9nMVJ0WkYraGdtRE5wYnpPVzVHK2djZlRneFdEbGkxZWtzblVmV3R3OUh1TTFodm1ObGIxSGtrN3FncFFWdHVWcGxhYWNabDZmQm9nZDB6SHRNZW5vRSt6WDlQN2k0Q0hrdDBiT1VSSFZ0anI1T3ZEUDhSU1BEZlpEZkRvQzdXbUc1dWtqdy9RYURFaUJYZFJ3Vit1NkJQOWdnNUt0b0RDTThnbXhxeC8xb1J2YitmZ2I5d1liVTRKOGt4cWlZQlY3NmdMZ0RXYzFaaG9NQTNkOHdIZ0pTN3hWM3FuS3BTSHhRY3E3Yis0QlpsbUpHWUpRcXRUaVlHbnV0TjlrZUI2WXFoZEhSaFZBUzhiRXdUSE5OUDlCSUVxc1RpaUtJWGlSRDRYczgyV1I1SWN3WlR0czdGKzJPcmJLNW5HdUlOUENGTlZUSGFkK1V6dlJtR2xWN3VPNitCWHIwYlZkSDFLLzJNanN2Vnl5M09qMmtRTmxSNlRHVnd1RExXM3ZDOHAyMno3MmQ1MW1MYVBOcEJsQ0xEU3kxenhXT1RybURBelRCV3JFNHFkeGZoNUQvUXlRZlJKTUpmeTU0UVFrSmlwSUN5NmhEa0llUU1xODcyNXY3UWtvR2xIcGxwMTAxOTdzZmc0NkVVa0dCYzNsMTNIOTd2aURKSHRudUQ5QmlKUUp4dG9XZDRmT1ZoSVpnRkZJWDQ0TUt5d3VHNzVGMjNqU0x4N3VkVVh3QWE4dHczeFFMWnN4b2UyZWM3N3d1VlFSa1cvU041U1Y0aFlwaUdQc1hMZWRCQjl3ZGhidVFCUEJhZC92aXRGd3A5V2lNOU1iQmZ2YkpCRFhYdEpkR2d2TGRQZHAxK1ZFSG1mK0o2THk5Q1JsNFZLdzZjOHF5YkhVZURRWVJnV2R2ZjJkRDQ5MHVTdmM5REZHaWVMYUFDbUhMUmY3aTR4NjlwSzVXZmhVV0Vic2s1U1VmSS9zL01vanE5TVVYVEZSU2M2Z25rVE9TY2tVdnhwR0dZNDNiT1lzcjBjRHlaMUQ0N1pjVUM2dkVXYmp5dkxLcldIZG83c0MzejBPeXdtTjhuRzIraHc2eDJlU01IV2pIZnRneWg1YzJOSUcraGROditBWm93ZHV3MDgrdEJ1TkxJeHFveUtHODk2bURqU0xpVnUrRnlPd3RZMHduU3Z2djAxUWxmR1E4b2QzaXpCQWFXelM0azA5SzZmKzU5NURaMnVCdFFkbnZhVERsY3BSVkMrclZkbkhzN2N0MU9DMGFhVFdmNGgrYmtuTWprTjEraFJ3eitEVWkxVTcyOGVMM2NSQ2NXYnBMMm0wWCtkLzVDTEJTN3hxRVYrbHQvZGhrcTR1VjF2Vll2NEpKbjIyWlJyM3FINzQ4QnFBd2pyRHVWQ1VqMnQwdmpCMlFZN2VEd2ZKaXk5VStUNXQ3aGxpc3NYTVRHZHNoZE5QWTJCOVdJbWlXZUkzVDBFbm1zZWdZVCtTNDIxYnRIM045amw1ZzlGZmduNzVuWUt0cHFXRTZtVTB5ZXBldHc0S01hTFR2TWtrci9lZkRueHFSWnU3UXg2Qmc5c2tKWi9tU1Y5MEVDS1ROc3JxSDlvVVR3UE5Ra3A4TXpTdUhJYklCNWRkTWpBcldDcVZNTTJsN2hkbnlLdjhLZTF0WlJON0ErNGdGNW56TUpDVll5dmp2SXJUNTJZQnEwaUxUZUI1aG0rVEgvUEkzdmcyNHNTUGc1WVVqZFhzNUwrVGROdmRLR1NDZlp1YXVST0daaWV6ajl0RDVCNVArREhGK3lRL1dhTG9KaXRiY0JKRzFBdDg3dzBSQnpEL3ltSVpweVI5ZFphRjFLRWhldjVSMFRUY3B0dkpEYk9GRC9LK1VVU1hUUFhyWEpPVU0zRFR2WU1EOERIdHlKVFhaVW4yRndRd2gzNzV5bDZiOGlXTjlXTWFHVlFiMXhzTlJmWExhTGRPa2JxY1piWHpGTlZsZkV5a3FROHFyYjkyQ2ZQUkI2aTdRYkZhZ1RGVnltcC9CZU1tR3ZnNEhnQXhVNTVlUlN0U0QzdUF1QkNUUDB2V1d5ZGJGb2ROT2NqeVBoVlVxVm4yTTZFU3ViN0xaSVpoU3JNTlJmcjBQWDZHRzFtUUpTK3crM0JqL05QaE5FNC8ybjl4a2JZalJVREdDVXhxbnppYWtsQTYzaVVXSzU5TSsyOWJUL1FOOCt4T0xMeWh3ZEJrOURQSmFxTHd0bmFVUlNpVU1lTW0rUjZ5OTZWN0J6cjBpNEV0cDNHSVMzaURBd3VIdjFNeXpuem1kclYzZ1YrRGhqQnhMMlFrSEc3WjJiWmJIOXpWbm9FTFZEQVdHYlorNmsrZFhsR054eGYvR2ZQOXlYOXZzNDUrZjdRZjUrMnMrZjdJVjlYc2FmbisxeGZKMk54K1QwTi9rN3JZL0oyanZoMjNoL1Y3elA2dmJ4L3l2ZXAvVDZGNzUvdHhmcTl2UytiN3Q4K1R2WC9xNmhMNS9UWDN6OTF2MVVkd2I1L3JjL3E5UjNmbitzbmZKMW5ueWZVQ3ZuK292Zko5WDIrVHFKbjVPNS8wbmFMUHg5T3Z5V2dNZHBZdzFhUUtIaXk1UkxtL0U2NVZvV1A5WXFUck8ycHFqdUNHVFVpMVNkRmF3a3V3Y3hScnZLS2Z1eENCVFFQZlc3WGx5ckRWZmcrdkhRSTlOVWdHbklDZzY1RVhERmJJUDZBNlNLY3pqbjFvT1lZVEJ2WGNWam1UUTM5enJoV3pZR0pBY3cyemRNT1MwQytLWkdhNm90bVlmeFM3YjJneDAyeVk0N0pJeHUyenk1SVdkMWIvSHpRR3l1OVhURXIreDNLZUJMTklqQ2F3bXAramNCQmlWQ3RieEYyZVh4MytlNWlORWtpa21nTmFJb1Y0NVZKcDRCR3JVWGhUcUY3UGlJU1BnajhUOHo2QXhMMFJzbm1ja21RTnV1TW5CcHJoc2Fuc0JtcHhYVlVlRG5jeXBHZWQwY2Jvd2ZkMWVjVHo1eTFOSGJ5Z1FHNE81WmtpWUN4WUZ4OWh1cDdWZUFFMUJ3anhSN1ZxaDZxSE9PaW84aVhZOTI3S3g2TzMrMHFUbVdkUklIVERVdTl5T3NxaGVudWo1ZUJ4VnBHamJVOUhsRE9ldE1wT3VCZjkxcE5yUzBDM3pvdUY1TmNvL3pRSUZ3djBjMWloeGFibVM2alE3cnlIaFVDOFNmaTdpb2dWcW1QNnM0b1d6dG03a3BId0Vkdlo0YVlvb1l4WkVKYlg4dUFYaDhsano1eVdobkt4V1J5eXM4UE8rUzFmNVRQLzhuTU5HZlY2eFE0YzdSQXI5eHU3QWppcEc1NnlCVjcxdGRFRHozWmlYVlRUb0RRbGNSaCtSNVZzaW5HMUdvMk5CdnRTTVpPZFBNZEhrOVlkdGtxd0hNeTlGektTZWwva0t1aGFNQllSa2s0SEx6bzlMVERMSy9zc0J5dmxtMTZRQk9QWUZWcVhIcFJvQWdDR3FrQURtZHNuYmJ1SUpEbDA1d2RYQ3V3WmZNMmVpam5FL1B3cnFqZ0lFT2ZseGovZk5rYnR4ZEN1enJWNXhldzV1dWFsN2h3dmtxZFQ5U21GUmk4ZjZVQmY4aEVOMStmK1hFbkRkTFBkekFHeEN4NEorVytRY1g2dWhIcmtEWVpzcloySGlnRHZvSWRtcXl5clJUV2pEYTkvSFdsZ1oyT0Iycnp6ZFpUNUtnMGVxa0VlM2ZIRmFVa1VQdm1YcDJCSFZXNm9wZzJjWFpRei9jaG9YNzRVYUFNTkJQbGxrazQ0Y01uRWwzRi84ejlQQWVXTGhFSW14bDNJRHRwWWxiRURXcldST29wb0JnajRaU0lqa2JXaHVCbHdUbGlIRVhzVzROOFg0ZHl4cHBpekNvWUJ5Q2UyQ1BNV1pCSmREYUl0SEg3M3VlMldSY3NsakpmZzJQeU1US3FJUXgzMHR2TTZ3U1JkU2habTQ1SUorcTRUQVl0TDQxdXMxNzIxaXBpUzRuc3hNY3hFVHlZdmFyUkFhL3NheDVXUnBUaW9rcE93WTNoQ3lHODBLOUZmVnExenVhWWJzOWVtRXVlRFprZHZqcnlKMVQ0NVN1UHJBOUlGZG4vQms1WGVmQ0xIQS9Vc09ZOVl5N3g1bEFNUGttd2JOYjFsRm1RbzMyQ1ZmZll6RXZFdWl0VTlqTm8rcTRNQjV0RStCOFVMNXpaVUJ3SWJMV3kxMG45d2xzTHp2clh3QXRROFVEV0F0NUNzNW5nY2xxZ0crV3AyR3VrNTRJOEx4TFMzUWxUWUYwMXQ1elZZc29ZUVJ6N093M1IwRUNJZjJEVTdBL3VnWE40KzFUSXdJektySnZZb0JobjhvZk9oeEVmOTBlZ2taM2wxcGNvQWFPQmU4RnE0dlQxa1MvOU9JUnhqSWhjRWpWeGZqRzlGdGpKQmNDUEw3TXhBTitQN0RCd3l5QnZ0MmN3Tkx5YS9uZzQ2SmVSOFhIWE1EUUdENWJHWE9GWkhBTnBVdXpQcGtia2tpd1ZrUEtBcmluL0k3VWg2M2xxZmE5U21VY256SFVtZ1p1ZW11eUZHMTFaUFNHcDJIMDhrdHJ3RldCTmo5UENONWI1alAvZmFTSCtHYzNXOVNVY1R2WDBlcXp6Ym10RUNEWmVPTjRpZXVtUS9uSTcreHdpa0hwZ3FLWW5BeU0vZ3o2YzlPT1B1RDIrNGk5SmVIdTdWWTlBcU9hSjlCMVlOVXZrZCtHWkNLS2I0WmN6NE1SYkh2QmJqR0d5YXRUVlRiNjBVNGlEYStDZUlLaXArUGtOa3ExMGc2bGRGbGt1dWR2TVFQMUo1c1JlVlQwK1dqMUVlWEFtVTJMOVZkbytIV25kNy9IQzB1RHZyQjdsSitra1NPcHMzb1pLaVl3T2ZxRVZ3WFFmTWVYWlVFZ0pGMWhLQXZmRkZMSEtSYnBlbG1nVnZsNjg4Y0dXYTBmR3RWOHdCUE5MdlJsTG5RZjl3WWZKQ1hTaS90ZmpIODJQY21yRU1FbWRZRUR0c3ZKcGx0cmJXSW9uaVExNXVpMlRzWng0cFUvdnV3bFliUm5sTUdlM0hHYTdsVlk0UnIzTlo1cm5YaDdIWC8wc0VWb25CbFl4ejlQNlBuZzdIdVR4TnR4dkUzM1ZaRHRPN1JnaEQyWHIrNUdSSDBZL3FoOXhEZ2V2d2hPU2tSZmQvNjI1NTN1YXB1RDIyaFdZUVdyOGZQbWloMWFWc0ZVTUZ4aU9idHhRbytnT3UvejdHcy82VlRHdW9VVGhkQ09HVVhIUmF3M1BPMGhnd3RUUitGSWVTSmNXbFVvSXN2MUtFb25JZE5nMUk0WGtxNUQ2TFRBeTkwamtrZ0NUUldMMVRzSVFjV2lJSEhJTS9oSFlqV2k3VnR1Q3ozV0xuV0ZaTFJrUSt0WUZqOXhsUmFlaEZmSCtxN1F0aDQ3UjkyT2hoNWprRCs3cXVQejN2Z2g1SHozUkZpeXMvbllDZ3FuUjlNTS9UUjROWkFCby9sb2pYL1pEa2svL0l4SFBab0ZLVnJ1OXc3cWJLL1kxWFVnT0FvOFAxV1hDbHN1c0FXQUxLQ3oxVUlFSlZjNk4vd1doZDRIeWl5VjJXc1lMejdjU0ZMTHFGUnBXVEtvdXg3QjAvbGI0ZHRpSGtaV29sck01ZHBDa1JrL2Z4Nk9xd29LanVzTmIrQWcraTJmVlprY3pHWGhGMGdLUStqaGwyaTVvcXNnVkJwUzBDUlkrTTFDQkZwTE0zWWFlbmkzMlZCNDJwUlp6TWI4VEljM0ZzRHRDNU4vSDRsSW5DSWZqanpDcnJCYkRzTzM0SzE5M1lFNGhlMG5RWXUxaVZic25tSllZSXYyWHo3WW1IeGNybVRpblF3OHFuQXcvYkxhNEpqL0poRjU3RDhsOG9oeTdVSWNWR0wwa1RYSDNxVXNiTDRiRE5uQTJxZmlmVVI1UkZVaTR4SzNLeUVUMENHK2gxN1JKMEFwY0dXUFFDSWVaQm1Yd09ncm1rRXFPRks3OUFhWGM1RzZEakhLZXVPSXRvbkZiOWFGSkVhcXVxQXJlNk5xK3IzMFAwQWNkSTJNL1pkZUVJMS9ZcHgxQ1dlQ2dudEZjb2o0WlFnUFZpY3ZwYTFaSHNoY3habzExQ1JONXZvVzNLaUN1UnBHNFkzMGU4QzdPbGVNNGVsWlliTG14dk55R1Z1UDgybGFQQVdmeXdaVDQ4OS9ETjBzYVVpQ3ZNNENvUGsyZVp5Vkx2eWhRMk9yK2lVOHhsYlNuZzB5eW13cjJnWmp2MXZNWW1rSkliRGFQNFcxbzZYd3MyeTVaOU1HV3JyaHBrZW5EWTdHTkE0ZHcxNUE1bjZFMUV6YTJ0b0d0eW5CQWRaaEpZRVpkRnhwTk9ZaUlsUUtJSmZVcGZVTFNaU2pWaEcyZGVOYjJveDhlTVRZSlRqaVFUbEhvdUQxYUoxWHVtWkZmekNrdGlrbzBHM1YxMk5HMURFQis2S1VyQXhSRkwxbTB6bXpHMTlvcUZxSzBNTkhqY3RiZW5WOHBsTlB4QVlzZ3JpOVF6amY3WUprS1NRQW1YMDhoTlBRZGVSUEM5d2l0aFo0aDMwSEFTOStqdFF1M0g0N0tZdkNwNWJTc3pNTDdOY3VSNXdDMk5PaTEvOFpNS3B1NDRvVGJmbWx5dVBJU2tzMzY1N3gvWEZacUVuYWM1NFRqNC9jMHZQZWxaYllWNnl1WWIxRE1IODEwS1BCQXo2ZHJkNTZJaUpxRDdZVXJqMFhiLzFxbU8wNDFyRUVrYzBwYkZFc0pwa09PNXZ4a3FuR1V4K3BDOWpCQkZ6NXZTdzV5c3ZUc2MwckpyUzUvanVDc0NrV3Q1TTBWNUtqdjlhdDErTDliWVcxVzE5b2hCQm9HdVh3UkdtaERKS2pyRVhBRmpXb3VzZ3l5M21vUE9YdUlXTDViWGV4eGgzSC9acktCa2JheGJ5eUY4ZEhwSStUNDk5UG5zcWxqell2cnhpV2kzbUpnaEhYcDdndjRMeU8xZ0VNNGh5Zy9tMHBzQjJmcjd4aVV5TkhxcEQwTnQ1WnpROW5qWFVFL09YV2pHTzN6WFFoK09yN2N6RDlnUk16bkw0UVNta1RPd3ZzbzM0T3NXbmJsMGdsdXNoVVQyWUdxUjUvU0FxSnhLSDdYUHlDUytBMUdWMEJsUlpzc0tXUEtDT3k4MllIMmVVSnhZV2FVOU15ZTdHeExuYjJGbnJzQ01hOGNRRjV3SG91cU90QW16S29ZNjdaYU1aNFoxNGViQnRXMDcvWWdaVkdYekgzSEVGcndyenJFbUlHdzNoYjNUSU1FZFVYdkdqdmVSV0pnY3lNNzFKbTgxLzZlOVNKdmRMenpWWDd2ek1ubzFweUc2Y2dkcmJtNTFJbVRMV2ZxZFFacVg1cnJPdWhDdXd2MUFOcUNmV213MUcxY251dytGVVNnUkg3aDZYOFpWalVlNXA5QkVsejYzb2RUWmtTeld2WHFrUWxIemh5bzJFUklKaGhxa0lvWnNTSlpPa3kwNXgvRWdhUlVkVlRUblJMVzVqcllqdlpyaC9BTS93dGV4YnUwc0k0MXZycFZIRjRGa25UZ2xoM1lNVHJDTGFhNWdUQ05CdE12ZTJSUUFEMktIQXBMOUVFZXJOWFpSd1ROYmdkaG9abFhQYU5qdDJvZjJRNnUzVlpaUjZnWG90WjFwUWdKNHE2UlNGMm0zSFoveTd0M0xZSk96YzZhaFBBVWFYdmRwVnlNeGthS2hIU2lXZHRLU1R0N1VTNTJuT3lGTmN3Wmp3Skg1Ty9DTVdQVEF1dmdJeFVST1FGcTQ0cjFUbWttYlgwNkNvWVdUSUdVdXBNS2pKYTBxa3pkdkZ3K2xIdXJZeHl1bDNadTFMbWQ0SFpmem1xMWJUMm1Ld1FibGQ4azFRMzhsc2prUUtSOEFudDBLRlgyeXB3U1BoaU5CZTFMV1htcXlubFNYb0xiY05sUGF4UTd5TUwzM0g2UUd5M0Nkb0FTRkErSEZjMysveG1OdzRvcWE3OTc1L05sSndvT0tsNDFFWm9qSFN0UmdIMTVWaGNMTVZ6aGJKVmt1K2pDa2hKZHY0WWFWdmtzdnIwRENoMHZ2ZGRZbklLSlN1Yy9IRm05RDU2TWF6QkxYWHdVOWdRb0NLWU1lcVFkRXl6RXRIWE5zL29IZ0hrT1Z5ejU5M21vdHlTeklRUjk4a0xiN2FYb09jUnFSZTNRNU1ENkdwRk1TUjV2bGlRUGJzSGc5YlB0Ni9JUHBoOGxzazFCN284UVZHbFZnSFBHOU5LdGpzYUUvWUdCOWtHajB2OUIzb2orTmlmQSsvYVV1OVBZTFUwdkVEbnY0UjJEMi9qWHRaYXRSWWZUczlxZzM1ZDdCRDJCZ0wxVTF6YmNNTFNHVEV0eVlSeU1GT3FmaDlRd2dsTit3SUdjckRVdThWOCsxbVhCcGNxWFVGUmNDL2pzS3crazRuZGgzM3FYd3NXY0ttazZrdGp3MWMzM0VwZmFoR1lqNXNPVlVnQU5PYzh0TjRTRGRxRW1yc0RoWlNJZm5lOXZSRUtRbjBhNnlJL3FHdHJBNEFXQTNQK1J6WDBoaWpSbzJDdmZBRmdrV01xR3g3Y21WRjFmS3FJSHVadkpwOFhCWnhnRGJGNzBMZjl5bjExR3U4aU9iZm1VeE9XSDFscFEzZXNJb2Vld2NnOXdXUVFLaC85QUJQc1luckJhaHQ3QkpjWnFlbkpIMzhsWjZqaysvQmNtKy9wSENESjN5ajV3VTZVQ3IvZWJXYUYwdGFocEkzR0hTZkVSQ2VxNWJSSGN5bTRPL2Q2SGVEYXpMS0dqc3pJZEV5M2YxMXh5bi92cHZxNVdEQjdFZFVMS2F0bUdINTZGaXpaSmczRG9LYTNZUVBHK295NlF5Y2E4RVB4cEEweCt6c01hWU1CQnlsUnNTbnBCMVliMERJclhQblM2TGliaTcrZkg4dDVHWm94T0RiTVdDNmhaTXNVT1pwYTN3VFkwTnora0d4WENaL3ZERUxUVThxUUFlS0h3NlBJL0p4QjRRY25YSGxJNVV5d0w5bTZoNW8yazJDbnJoSFV2cHZiTDFPZG5tL2RVMjRxWndpam1IaUVUOWxwSk9MNGlqNXp2NTNpUDlWbldSM3dJZ0ZnM0hFb2Y4ZitMNDhodkNuS1cxN1drSForNlB1bll3Tkt0d3ZPU0w3cFcySjVGcHZTT2N2MWpLVWNNUE9lV3VhRGVzUWh0WUlwN29LREpOSzIrb3JlaVRwOXZyV3Z6UmxnM3Z0b05JenNRMnZwZUpXU3JZOFFoaUZxbmM4cjh1NDZ1UlIyODdCM2RGV0xxclN5ZWlYaEVHbnZjbTJpbUZKQlhUVjFzMExsbTUwdDYvOFE4S2gveWVtclIzN2RIMDRkZHlMbUpaZk4zNUlNRFhCVjNpMm5sN2JlSnNEVXFrMkNFYXVnemdzYi9RQ3FXNHRTTExqWWdXVWNLczJ3Ulp6ODI2S2RYY3FmYlU1SGQvQyt1SE5tTHdiOWdiUFFPeTJTMFpLcndmQWJWN2xjOUR3SmdzeW90aHhBTUJkdi9XUmJESTA4OG5WbG9rNExtRFUyd1RZdW9lckNMaXBxUlVzTVlyTnpwSFlNYTJ6ZTVOdmtpYk5TamJ5MTVFbXdNd1Fta1BBdjNHbzlLanJibTVJbktFb1JYelJrWElRdENWZ291Wk45RkN1Um5XZ2JVbi9SQTl5SVI5TWZZMXpHdEM2cElsNW5Kd3dadXlkMHJUanZQdWFRWTlFRkZML1ZIM1FCdm9jZmF2RlhuT1IrUXFYanFhS3ZqRmI2ZzBXN0drZzVTcnRvVVFnY0RxVlFFNVk5WDVtcFErZGF5djJyditiOFZLNXE3dGQ3Z2ZndFMwWm1yY0VyeHpvR3ZaWkxwd0NwWHVEVExhYVpub3dSaVBRc0pCTW5ITFVaR0NhK1N2N3BYeFpKY1NlMmU3VjhHMDlnUUdDWDRkek1wSklxblFGcTl6NHRuaGMrTVlpVWdPWE9lSTNIQW9NVkw4YmR1RThrS2dMMzlXa2M1SDhEb1JHdG5MaXl0MmJnd2hWMGJXYU1tMXdWWG90UzJ4dHVUcUg4RWpUbWRlN3pJVmR2RVREbTR1NG9PalFSdDczZks4TVo5WjFKajRZcEUrQ0FaWWgwUFh6Y1dsWTNJNzZkOUlmSDlsT2Zld2FmY2QwVnYwODlJSkhRUHZrYzIwbXFPSE5JOHdCekxOM1R1b2JBY25hdTczQTBpNUtlNEpUMGg4Y21BakphWklGdVVER1R4b2tRZXBjeVR4ZGlzSEFuZjIycVEyWmJwaTdnSUU1SHkzQXVuVEdmd1ZjMm5uT05VNjFLQWdZMnFaT3dKOXY4NXJhT2FQV0tCR29ac1Y0cUlmUFpNNGc2MG9DTkd5ZGp6SVNFUGZ3WE9KUWRNRmQzWGd1R2tIVEwzQk82Y2lDYUZkK0ZVbWhuemZ6QkJRUUQrZ21BamdBb28xMm8rUkVzVnpmYXZ1TjFMWVE2WVBGMFJhS0ZkOWs4VjRPbzNEclVUakIySVNvd1BmS0JjRlNXQ1d5WUFNM1grS1psdC9RSUtZYnpEQk5rMUo0K0ZYSXVYN0lITGQzNUp6VXJqRVdyMFRUWXJtbkY0dkxRQ205TkE1TFJhZThsaFR1ZE0rYjUrS2wxRi9QcmJWVExJOXVFRXBLRUlKc3F1N29oT2dSWWlDY241NWlCTzZLSHg2Sk4wc291dDB0SG9nWEFjT2dMdUNINmVMN1lhMnNrWk01NXhuSDRWc3hmTGFFK3YvM1lya3RNa25pakwxZ21yV1lBOThSMmg1VWNseVFtMklaMFJBODhGVXFZM0hvWHc4ZDRsMzRrdm11YTc5RWl0OXM1V0JwZndsMVdaQjFwaEd5V0g0RW05Mk9xQjdJOUhnY3pSbitvSHJUT0g2Z1BOQ2xET1oyUDlYbUNHdk1hazF6ZWhOcU5meW9lbjFjUUxIWHBLbUsxU3V3QU1Bek9seEE4WWpCUXpqbTVNVmdlTzdKUGs0UFZpNlJpYTlleFpCbkFFOHVXYmdmVlVKdjhDSUdpRWRKQXNqdXZaNWlBMklaYnF4RWI2Tkt0eDRrRVJhaEQwTXEzQ3FmKzJrOXdUSDlkL29BWXlwL1M2USs3RUFJV1laN0paYndKcW5rVHl4NUZQWjNKeGVuQ2tSQWNvZzdJVUJERC9iampFSGMwQjErdXlBTVhTOHZKM1JkWHN1QUlkV2poOHRKR05RSkFpZ3IzRkhkOVJvcGxZejgvMnNyaGZ3bHJldDkwUlRZUjBqUkh0MEFwQlNSQkFpSFppZkh4b0JYa2s3K2lPcDRwbGhGNFB5UUJaSjBQZytQVWF4SUxHV2FGaFVCUUpsWDFHSlp3U01ldG8rVlZKak1ocWJjRjN4d3djRzlVVnhFUXVRZ2xEMnZuOUpWV3pETkc0WURQckZPN2ZFb1BYajVSNHR3UkhnMlh1N0FENklIeFYzeFN1cTlLUXRoM29lNjFvRWJmWG9qOEFEWktJVjRpVHJqSGxrWXZZSW1neitkVGdnSi9UMFdMZEc3SG1ZSmxNZkFvRmExcmwrTExjWGoxQXlRcVBSZ1JmQXRFUkIrUmYybkRlM3k1d0poZXhuMzFqbDk3cWZoMUxVWmErMmVrd014eVFoVHBmWXA0djcyS29vUjcwVFBQbUE3R1lVcGlPU0t4RUdrWFRRZTlUS1dOU1IvT2g3MFhFQWZCTkRBVlBXQmFXL1BMK01SUVhqd1VpWUhMcWUyMFVlVUtqNzlFdklnaktPUEdreHdnREF6dUZHN1dvMWl5S3VOMnNSUkxjSGRpeEoyVFMxN0ZzMWZzMGdyeEo0NFpVOEkyNHJZWWpUVWRCU0lxTzVHQmZXSWJLcmhFZm9YamtJc3VtdkF3YlNkL0FlRHFnZVlRd2NBUHIzb2pjVHU3eFBEQnZHa0RXQXRZcEYxOU9GQjZpOHBaWEw3d002cHJocTBhNDFTQ2NxcktmVUFrN0N5S1hOS0hrUzAyVnV6R0ZuQ3Jyb1RhUloySFJxODY3NzF0clNWdkQ2V1M0SU5UL2w1SFJoZUhvck0wV2FSaHFrUmRZb09pd2FMb1JGMWhseVV4VitKcjNWVVZoVGRyb0p1MjJNZzEyR2xlV0paL3UyM0FvUndxdkZvSWlaNTJXRjZFZ0hrdFYxR3F3bUxJS2FOYms2TXdXMGpMeitQaGFrU2N4bEdTRmJjVWdWL3czRE5lU1RsWmJtS0ZIK3k2b0MxY1pOU3M1d2RFUk8wQ1JhK3FORU5obEJaZ0dUZUVoTDZoRW03ejYzU20rNDZJOGFNMHQrdmxOQ1paa3hEdTVnL3hjRXBYWUVHWU5MR2ZLekdmbDNkVTA5dlJCMUtEOG5jcGZmUFZGNkxseDFKaXpDUWs3azRvOXRrUStRY2F2Y2xjOEpGVGVYdGwxRFhMbU4vMXMxOVhsRUlhcGtMVFYvNmNmbzBEc3JkWFZUQVMzdnZpamxyNlZ0Um40UmtINnk4UFNKZnQrVmMvZGlkbkJFU0ZSOFpGOFJBL1RhQ2JudURKM1dwWnZYVm1qZy9IMEdDakpJT0trdjR6WHk0OXRrTDRYK1FhcG5iSGFMRnExck9iTDR6czZpTGwxbnhqRVRaaFBWM1VHNWx6b3BlanBWWXBiNmsxNFA5OUFNSjk1MitlUjN2YjcxSFpLcWJaVUtDVEg2WHFvbU1YOExIUTltVDRMU3gxY3lSVzZESXkycWJxd2ZJeEJXM3dxOUUyTVpIa3QweTFiSzhKOVlOY01wd25NNlcyQWppZm14S0JIY2FkUkI5cGd4SmY5bTR3ZjkxZ3NrSVY5dGFlM2R4Rml4RHFpelNid3BsS3NOMXhUQlR4SE41MEJvNVdTZnBCZDlxaXZpQlVWM0svODlSeEMwNWx2b1BjazZRT2RnRjVaRnFKUGpZNWc1djNPbTZpM1M0ajlCcG9sZHhqU0trbXYzWWN2MGwzN0R5QzBMRnFqOHZJcnVGWG9TM2NQOVJTRUJGelFiUXpsVXZNQlBhUUlSZndYUUx2NHBpQ1huMlltY1E0b1RQd0Z0WlJ6ZWdIL05tbHFCYi9KTksvYndaRFc5QVBXUG1lVTJMVWpwS2FuaU5GSGhyNU05d2dkTUx1T0YvU2FsOVBVUG1jRXV6Y0VtMG13Nm0vTENFb3pVdWxFUlhKOExyNVM4VWxabDExZ0tYaEFhTjRsbkdMTldROCthdTZzWFE5NUN1S3VDd0FDRnVSUGQ2djZyMHZUMXNjSEdqaWxraXEzR0JpYzJyajF5QWNWRTZCZmdQQmZBVFpXWEI4Njc1U3RFR2dhd1ZqOVk4dWdGL0JWSEJ6NHAxSjJlYWNtUWNBVXFNMHhCc2tDMW5RdGphbHN1S21PZXN2TVpCNkNFbHExeWNkMExydUJSQ2tGRk43ek5EWlE1dEhDTFFOdXp6NDZBaVlyOFhoWXltTXVYSnhYMndteTlaMTViL2h5VWRzNGZLcGo3SVdXckhUTFNSa1VHZnF1ZjYxdVpucHhtWUtxOURiUU9DeUpmd2xUaXlqYW5uYXRyUlVVeCtKdVNsU09qVW9KQzRYRDJkRkVOamZLc003ZmJSSzFhcVBWN1ZYQlVRNzQ3a1RNMlRhNEpUK2ZoemNmWGJnUmVSNVh2MERvWmVIOFZ3WmE5U05COTN5anJRa1hxUVJjZ0xjVW53Ui9WY3lSajlvQXlOWmxlU3lwMGZxaUFyWStsYUdjL3NQTW5qZ25QMHdPd1FHVUZieXNubEEzeFdDRzhLQ3BydHFTQ0ZWL2dNRTF1UlV3MiswQ1NMUlZpZXd1YVhlaEJKNVN6bm82bVhhMXgzV2tmaWQ1eVdOYlJNaXFXc3pnUEo4TWttUGwrbjJ6Tm1qbnFPSStqVGZkNEpFV3gwajFsc0NLVWdnMXgvUDZkdWxtcm8vWUVEL1MrUWRwbUVhM2plNXNDanNvdnZDRGEwS2ZxVk4wbjdCQlVQdkFnM0ExMG5tVWRWUW1MdHFPOVBrQVhrdVRyb1NyeTBQUTd0NDgzSmlsSGRGNUVHNFMyZndURzRPcVFVMjQyblhUUkYraXJSMGJIN09WbUxWdE9BQ2JQcWxwNVhRY3VhSUZqeTdqNnp5T0w1VDNvRXpWQzR4YWhHMG1JWnFLZFcvU0J0N0o2aXdhVDNWV3FpNnJIQkJhZEc3ZUtPVjZNckZpc2xzMUNzbGxsMEViaExQczU3WjhyTno1SS9wVDZkS0tkWmdkUFgwMk81cEpUM0V4SVh5SzVBZUFDZCt4RjlVb0pyL0ozNTNPZCtnNmtiR2dCNzNPV3J3eFloNWhJRzl5cjlPS2s2Qzg3YVhPZVhaQ0w3ZzlEMHVrN2l3YzBDejNOK25YcEsxb2R5TVBBd3lEWW5ka1c5T2tsei9iTjhHaHNNVWxiUmZITTVIelVYKzZaVnJ6cHJvcW42a2JuVVFMK3Bwd2dTTE9iSEk4V2NkcTlrVncvOHV4eTBMYnZER2pnUUNzT3JoNWhjUE13dGt2aGhSa053NHk2MHBZbXErYyt5U0UzdXZRT2l1T0Vxak8weXJEeDBXQ1JwMDl6RnNQcTRuQVFnT21vR24zTkV1ZUx3cFluTWxyNlZZRzRZYzhsTkg0RjdTMkxYNW9vSm1tdmFaS1BBRVNjUS9PSHliNGV2cUF0ZzJDL25jWDJxaVg0aWVyYWFlaDFiSUc1RkhTbUltekcxOE5NYkp3bmp0ZzRSVHFEcXdSR2EvZHAwNW5Ld2JXVE1URnRHSEpNNlNPb1VHZ0dnSEhuQjdSS3VCc3dsNnFDMVh2U0l3OEpmdU9QMm50Z0JpNWU3NmRaczR1WDZrbjljUlR3WkJJRE9jRTE1VWRRTVZUc3hKZ2twT0V5M3pZVThsQTJPSi9uMW4xWHZxbkdpSWtSMnhCczErd2FtNUhod2tpZGkwZUp3Uk9aSWpscmpsQW03M0VPd2RYN09Gem1WeGMva0M1KzVzWnpraERrd24remJxVGx0ZHJEWXViM2hqRVZmdlBJcVE1NDJET2ZycUNCMUFYUFZyR0FQVTdscTd3MmU1Q3NqczVLbVhSMXlsaXpVRHFudzZ0ZkpFVHpYSFFBTVUydUhqUWJ5U1B6WFhYRWFmOUE5NlAyNDBuUHNKSmJ1cWtqalEzSjhvbTh1TmFUcndCS2ZHaXY5UGNacnRWbGV5MXAyTW5Gc3ZseERyTFlabWRYcVJRWDVqVjhKTEQ1MDBYNjZkL2lMNU1wOG1VOVp1K0FaTExCS2Y0WVZsYVhsY2tWKzVTcVhwd2NXSml5cnRtcTlqdDd4YWZjSnkxd3lDTDJOSnNUdFFqWWdJaVllRmFqVEJqdlhCWWI5UEhhVEFqVWhUcWxzUmZjSldHKzBrMi9SY0hSZmVhL1dvNTRWbVA2UDVxWnUxZGdQSE9XM3YzODZtd2JOQ09EWGF1LzFZOUQyR0R5WkdMa0V5ZDdJa2FuUzY4aThXbU9pek5xKzVyZnNvNWduV0prV2dWSHBIdm5qeEhtb2tpb0Nsa0xERGRkRFV6cXZCcncyVkl6MVJjZVNzT3N1V3FzRVB5c0RQTnlLTHM2STB5bXgrT05wblM5UW1ybUZTOURySkNjZXlGcmFZTDJ0MlREa3lsbHVXUXZyRWZDNkh6UHBCc1ZDTm41N2loRjRuMmNkdFBGSzVqanVqWktHR2s2Z2ZIMmlLSWlFY2dxZUh6NlhDOHI3VTZkUEp3VWFYRTNna2g5YWp4dWltbzhmc2RQZWZ3aXBaRTkzZjVHVnBoN1hqVStSZ1VWbGxZNVREby8wVitBaTRPckx5Vi85T3ducEVEL3VqbWhBM0daRnY1K0R4ODJZVmtpZ240WjFjemtkRXFnUk5QbVAwUDBOYmU0U1VJU3J6WWxCaVBNT2lYK3VoeE1OOE12YVFrZ2hjSTN4ZVM5Wk95NjZuODZJZ2dnZ2xKOHZUeTNiZWMvUXMrem1UVDNrY1QzUWZQWG5BdlRCemxaaEFOUHVOK0paamlXQm9jMnAxbmw3RXNiSUZuZnMvVlBQL0hXTzhEdFBzN0JoSFo1VjJ1eXBGdy9hVUhab21vdkUxckd2L1RyZU5DRDFIdG5xK3NQVlZUdGs1QUNyWnZNK3pNY1lhUmFSTTBYZ2hVNlpkdHdMaWtqWGlXNlEyY2VNMTA1U0ZSN044ZmxPaWNLQWhkZllRTFdTUk1hcUJXYVNEVG9GdUhKL1NHQjFXVGQvaUNZVjNyaVU4cHNHKzE3a2lNRlQ0VXNhQkNjQjRSQzVuQi9ubysyemhXMVVkTnpFZU93R1Nyc2YvZnRKdVA1eGVSWEcxQXpBbk83dDJhVEZaS3pWQ0Y1OWpXS0piUkJjNUEwdVo2K3FBV0NkTXN3M25WT0xTVkpVcmY5WWd5QS8yNHU3R1UrbkNZbG9IL0hHenhCYXlRcnpRamxzU1pZdUNua0U1V2NvMndsMHc2bG1ZYXEycHd3ZzRWMk5XYkJFcWRKSWJVSmxIUlJmZ1V6NGNycVFGa2hFdUh1cDdjSXRJK3d2NDhjSGJZRGx0QWpxalZqVVpNLzRiV3c4c2N3Q2RtMU10WGNQOHM3YWhrUkJ4MWY1QzlvWU1UUS9BV2lPSk8xekgvQ1pOOWdSYktSUlYwd2xRNnp6Yk9talozWkEwTUo5ZzBvNkFHNDNZNHU1K2F0N25SZDdtRjExWFFXQlFlRnh6UE8zU0ZLcE9maE4yUkJXMmRIaW80V3pPeU9TdGE0eEc0TUVaQU1ZYmFLMWZLSGZSenptYm1oeEh0SWVsTkNIUitPZk80SCtYVzlFZndkRk5QM3ozY3VQdFVPVytoWTVMQk9RcWNQOGs4ZnJzWnh0WHJaaGJYVlFyNHY0WWdvejZIa0c5WkxzejRwN1Y4bVIwUVgrV2ZwOGhvT3Vwcnl3VUtNU1ZiVnpIOXFLZmJ0d2h4elZOK3o1NU9peDBuR254b2xKZ3ZYQTNRZmxGa2VidXN3L0VLQkJjOXN5aDl1dkxIVjBMaGd2Yjh2MEtrNlN1NndESkdPSVF0eFBsSm91ZjhWRlJoTGZvdFJzRmQxbEhDWXdFM1VkdW1kenF3eUJxU0kwcDQzbkFXRjhieGZNSDN4YjNTLzRPSGtiRjZTamZaNDhuanNkcVUzd1NhdkR1OHRIdnprQSt1MlZSZGd4ZXRsa3lEMkZVL3V5TjdOaGxvSW1ITythVVluRVhPdXk3eFM0alVQM1VlTGVnb3NuVU03WGlpYnNqS09qamhCVFJBcVVSL0g5VGt6RHRRL1IwbnFsZjRaWGFuNldDVFdvTU1YbC9JUXBNcmpsZlFjVm80c1ViWnRFT2RwRS8vbXovREFsblcxZjNaeHVVN05nSjFkYkdFbU1zbDR1YnpBN1o3T1BHcUh5SGJka29VTDVTYUVJVDNlLzNNcFMxejhzdVlXRGxzZTlrWDVhYTFGSW1sUm5tNjIvOEpQT1Qvei9uNG5sblVTaVAydHJ3eDZPdGg0MWlLNHN6NmJRUWwzdkM5Z0lBYWNRMGFuMWNKcGQwSC9HVHZLU2JFSmlQMmZvYlZYbXphODJsR3BxcVdPY3crU1l3T0ZKc3RYbk0yekFBTkx0aUU4MVFyTUkwZ1VWYTBhRWJqT09oam5yT0h0ZXFjS2MzMDAzbFprYTRVN3k2RDgwMlRBZ2hKbmVjR2tpUHJ0elIrTzhWYjA1TCtnRE9VN2J4ZjU3SG13WGp2S0t6ZHkzS1grOEx2WmloZ1V3eGFBYlMyZnlFQUxrUGNBRm00U05ONGpSTU9TdG51Q0lmWk83RHNIbVNXZjdiaXczbDlCSlVpb2RUdEhGTXpVSElnd2g5eUR5R3FXUE4vWVJuR1hqSHdDMTd6UnR4YzR4NWo0cTkvMjBNSTFmVjZFSkNlZzlCTkRWMk1xWk54dGwvWnJRcXlpaXpSSm85NGEvZk9hUjJHUE1RRDBLYzF2MGM4RkR5Zzh5eVByWXNvLzZDNm9wUk50YW9ab2p1S3ljMVkwSUtpMW9mbzMzVzhTUldTeFNVUU5nWmsxTi8zaDg3MDcrMW9jMFNBOWl1bjVvSDlvaG8xbTYrdi9aZWdOd3ZXL3RNdm5QVHlNVFh2dDJRaThlek5WSVFUcThOdzAvVjdoVVR0U0t3VWZ4ZklUamIrQUVweFY4Si9nMEYrWnJ6ZHBacW9aelFhWUFWdUUyMmU5dmRpY09IM21HOFFOYkR5M2N2c0RrWjRQc0JvMDR0bzFleTJiUXFCY290R3orSmQzd1U4T0JJL2tLY1lPZEtYSXZDU1RIS3VuZHZRSDUweUg1b1Ryc09Cd1JLSXZNVlA5V2Q5YkZ1WGZXWTA5ajRnYndXemh6cmxFK3lmbjhKOTBRMVFRVTMzVHEzYUE5bW54bGE5Y3Y0VklTemhqSEFpcjdLSEdZaEdxNllWWDRJY01sQmxTNm1oUGhid0xuYlVwdURaMHlBcWttZEs4WitxTGR0ZERTb1hDRmxyeHo1MkFGQVE3MWVQL1VaMENaWjlGM01tTFZkWTBxeHEyYm85dGtiNGZkaExOc2xMbGNUcFcxL0ZVQlRwSUJCMVhSQ0tXL2xZS0l1MmUySi9RTFFtWW9VanRBMDJQZ2JrTFNscEZQeStsNEFxaE81MUlPQ0ZZL1pNNXRENTErN3gxNDNqcVVUaDJPR0hUOTdvdjV3ZXVkUVBjTGY2RC9lNXZlbkxTT00ybnM4WVFkbjYzZmhFb1V2ckhKWC9VWWl3QXZQb0RlbkdZcm9GVkxGakdWY0dIeEVSMTA2bURFZDZnVnNTK3BlYm04bEVybHZFWVpkSXAweFlBUFRoQjNuRGZocXpuc0RtN3JGTThMUCtZbmFpeUxvVlNNRnVrVEZOT3B0bXBaZ21pOG9kR0ZQY1pyT2VDWnlpdnFOLzBKektPNEdiL3YyM21xeVIyOW1sNm5PVDdMRkFrY1ZzL0NtYWlVeDNsZ2RhZmRiUExlOUVVYmxnMDFWSEtyd3NtZEZveFhGUFNVcE1GTmxVMDl6amZOYUpjL3NJcVhSczM3aXRJMGh6Z2piU2g1WUZEMGRNcjNZczdBQ1p0bUFMeVFUa1BWVEZscTZidDU3ZnFzMkFBTHN3TGsweld6YnRneVNKWnFEblVzbzRyZTlSQm5VUnFUc2hPQjdTV2RqK3JyM3RhSUdjdU9pc2JDVkxRTFFOdFpFV0N3dFZJaTdYbTVocXllb1o0N3Qrd0paU0NGYVN6bStnS1VLc2RrNWI3V0dxelV3UGVmYlRDbks1OGVDREFodWU5bE5rb0xMT094SkRLbUY3c211bSsxNFJ1K2hmMlZyWUh0UXJ6TWVuVGZQZ2tsOENtQ3E4TmlVNU9xeG15ZTdHeG1icHVPKy9DRDMrL0lRQ3Nud1lhYVdSM3lNQjFHVlFqMU9mTHdtcTVFMm5LN1Z4VUREdU9LeGtMQWlSK2RVN2VOcjZVa3dDM2I3Wit0ZnpFNGd6VFBYZS9DZGVWbzJHSE5DS281WmRuejdoTWMxL3hkUWZ4T3BicGR1Z0EvMUlLdW4wSlVvRU9uc0Z6dmdia0NHZFlDUExaYlBpcDlRSmZVUldSNFJIOXhBaE1NT3NDbVlvM3orRVFYNHltbVFCdEJzdWJDdm0vOGJ2c2MzSmZ6R2hBQlFRSm1DVXE5NHpIYUFicnJyWExYNzQ1RTExU21IMk1WT2xPbVpPWTVGSi8xSkhIRTd5M3J3N09TVmtETFc3L1RuYVlwOVVQS0hvVVFDdjNoY0tzZE5VRUxVRlI1c1dLZUxOYTVSOENxWS9xYlBPeHNINDQ3Y3p6cElSQ0dRVzgxaVdjLzZTcXF6ZHpHUUVjNWpQOGNIekUrV2xOMlYrSlA5dFYwSzJIR2VHSlEwR1YySUxRRCt4M2VJSnE3czVET1FEdnByM1VNTzNacmNzQmVoNWV5OGs2ZkMrVmJ6UzR1K0ZIbElDNGpqbmFTS1lZT2tQSkFqTkVJV3BsNXhJWU1jS09FUy9oZmFVc3c4RjE1M2VydUdhN1I2a2FwektGL21QT0NtSXVMb3o1L2pmdk1qMUZpQkgyU2RnTlZtampzRjg2d0UxcEdWaWkyUGZBUmZDYXhvNURBamZ2QlNnSkJoS3pVZjVLUlpMa3RJMlhaTTUxMWJwSXI5MmV6K2JJTkpBZkhyL0d6ejNkb1NnRE9sQk5WaGd5QmI5SzFlQW9lb1FmMmw0Uk5JT3huMVdmb3VYcmxoYUJoT0lLNkliYktCZWdQS1JXZ0pxc0NBMHdhalZsMEwvdnBzMEo5UTRYMlMzdjkwNWFDeGdHR1EyL3FVZXZTMWQ0d1l5S0VZUzZsYnVzODlCNFozWC9KZTRDcS91ejVsU0FLTHFSdWtOYmxVSjV1MnIxdUdwcVpKcGxrZDRmejU0eURxOVFWSDUwTWFKQnNjdUVqV1BiQkVUN3pBNzZ6bkVvUXB2THJwQ21VTXB6bkl1bzJHYnJISlVyNDlsbWo4ejlLOEVicldicXh6c3Z1ejNYZHFBYm5UUURyOWorbXB4WUpXRXlVbUdOUCt4RUlyMVVlcjRuSlhKckZNNDlhTGFJUHJvbllWcHJoempJMWVKbGJnczAyZWVFaWY1azNCdVI0NG5nQmhHOUFiZFcxRUxXeDlIekZPd1gwSGJEZm9nSXpBRk1DZlB4MkVjL2tFT0ZxdktIdFlDeVlETWVWb1JnOTZseEVveHVTeU5odWtaQ0VHL3dNa1dMMTB6R3lLYnU1ZG5ZeXY1Tk5PNlZzTVdvRnRHV1dFVjVva0NaTmsxbXNSc0srYXA0ODBYcTFPK0ZmUzRpcURGVlhzVytVaTB4OGU0cmEyZzZUUnpycWw1TW9zRTd1OXdiOFpyM09sT0FjanlsUjRxNmJkS1hQSUl1cVBkMy80SEYxbk9BQ2lSMGFlKzNjaUdaaDArUGg3aTVtSmdQRytVU004bGFwd24yaVVhaHpPTzkzSFRnV1pXNy9HY0NZNXNPOS9SeG9iaWMrY1ZTRTRKcUhrNWRHM1VRdlE4dlFGQm5XUEJ0Wkw0azVuQlRLNExRVmpYaWY2eVcvQlJ6Mk9LdGFpbHBrbG04ZTVXeVQvZ0NWZ1Y3WmljYXVQL0dwMWZ3N0NJbXE1MVVlekpKcElVS3MxQmE0MXNvTmxxMjZFZG5GL1NWQlZuS1V2OVA5OU40NkN4OFc0OStHNVQrNkIzR3ZlUWdPeHZ1QUxnbElYdVhWRFpwcEJ5VVdWVkZtVE1xSEN4L0JrWVFDMHQ0QUhQK1paVWxLN0g1em9iRS9mcmpWNWl0Vmczd3JPbUxCTXorTEE3enQ4VEorcFRMb0RleDB2SjBLbERWaFRxVUVscFNXZU96NHpYaG5CTHhYTGtpU0hpNHRUYmovY0ZRb2hVai93TCtIMlRZV1dpS25lL0Q5K3ora2ExVXlsUUhWeW1zWHdLSFFTL2NLWTNOV0s3NDRoOEFNNUhzR2xGMDVBR3d4dGg0amFCRldWOUFrZG1lMmlaMmExVzB3TTFNSVRFTjRINndsM3V0QkNDekp2azllbU1zOGFBM0tJQVJZNDBLVVczeWwybHl2RWE1clp0R3g1c3pZNWZSK3FOZjU4NHRuTHR6OHV2dGNkSTcwRGpPeE5aRDNidzhlMXhZeksrS3pVZ2s2UGswR2cwWk0rNGE0M1dVUnhnUGVocktSUHVDcmFwY0RjSTRJL25wVWxUQ1RHeFVhSjFvckFKOCtEaTVzanl2aDVaRWEwYTUzWEkxaVNjRHJpL0loK3dxOUdoR0wrVzFBYmpJNWVQWDkwb0ZTWnRab1JxQllkK3hJS2tkUnBkTjkyN3podkNlWEtNS2duYWVDNmMzSWVWN3laM3k0RDFIL3BMQnhUeGNobC92VWFkODZBRzZvZ3ZXMkd5UTBLNGxkOWJiY0V6TnBnY1FqTXRzTXdLMEVnRzNuZXliZE8xSWtBUCtXdTU2QVJ4RTE2VGVIQWNXenFueU9ybklsb2dCVHIvMnJxWGp4byt2VlJEYTJjYW15dVpLbnRzbXRDYlpBbHpmdGdmRjU0U1lna3ZhN1BZVWlndVBGdEx1Mkx1YnhMMlJHSE1MWU9PUkg5Mm9icTFYaXRuaWh3ZWkzZG5ER0diMUZHdjNyWk1LWnczdW9iVWVjV0MwQWUwTy9oQ3MxcDh2RWpFYlE1QkRLMkhLclRZMGE0N3RFRi9oVzFIZlJyZVMyR2tQb2U3WS91d3YzSXlyNS9FUXR4dGQrSXBmUXJmZ0tFb3B0L1FOUjVpcllxMGtxRHpvdW14V2FEc09zbW0zQVVKZUlOS2xYME1IaTdTR09taHlBTUhYZEpTSi92UFJRZ3lqTVc5Rk9EUXVNaTJoa2lCVndmVEdDRWh2VThCdjd2aTFGL1BKVzI5d254aTRvazEzeXNYb2tVMWQ4N3htTmd3WUdhVTAxT25qa2ZlOHVXekNGdnVaT2FUUGNIT1JXNlN5L2hHeHBVZDNFVGxnMk9jdlorK0preExKOWpXVERxdVF6eFFBWGxQdzRjQ2IrY0RWcFJWZDFqS3F1Qjl5NGFuMzNmeE5qNVQrcnBabU1ZSUMrMDFFZzhxcTZRQWZVQk1mbHpxS2JrZUFuSVc5czFKSDlIa283TVprazBaUFRaVVhMUWtWMzhCTjRBclRxbHpsb25HQW1YRUVYcUtEbDVhd010OTlEL2VReGNlL2E3RzU1cmEwY0JvY3BqbnAvcjV3Wk96UktBaTBtTkgvOWRSR1hSUnkvTkpKRnVGNURWUndWR2lLbi9ZWjV6U2gvTXROczFVakNMZ3JOK09OenRxVzVTQnhYd1Fsb2ZyQi9WMWFLa2FYbUVuYjVyL3ZOVGJCaVR6RWdQTis3ZDdqSzh6Wi9tQ1ZRY3hJcWZMUXBmRnV3bWV3SXlWQTFOL2JScHFwZXF1azVTQjlubms0NzZ5SmorYk5UTEl5RTB4akUyZU9EOGVha3Z3SlhNUXpXVXVrNDVQdlJkbTRHY2Rud28xTXdPWHJvNmgwektMRDBNQkJJOFdQczJVNWMzSlMrT21pVnZsb2gxWlByTnVBdHdHZWM2SkRWQnhnclhKRWx1MzJjNSt1Z3Q4SGVteWx4NzlpbTFpMUl5aXN2aHdLaHNFQWVpVWhzNjVUOVJKdEZVNDdiK000WTZLYnlLSmtZK29KV2k0UkJMbFJUZGpiRUZpTXJDUWl2VUJONThTWkJwRXpsYzhTbmkwaWR1NThMMUVmUjBjQ0NVSW5SZmZuaElPQnJlenJ6ejRESFkrRnVSZzNvL1d4Z1pERVR4T2hVa0FrcjVKbGJpTkhSQk9RUmloemVIZnlGM0ZLZTd0VEVLY2N0cnd6TFNSVll4Rmd3eTFndUtydDlnb0tQWTczQnRuTHREaVFSeTkydEI1ZVdBdldmZVBETHFvaVIrekxNeCtUTU1JS3FlYmVxbGEvdjNRTWdjT3VaakNqdUJXOGNEMzdySHdqVzZsYUlaYVVwdXB1N3pWNVA4SnJYeUQ2aVpzZUxkK2tyT3lXZzJxTDFIOThhTFBTL0M1V3J2WDUwY0ZEZ2JkUnJ2UWlEYUhlbXNWU3hHeGhHVEZ3NEZmbjBXZDZkaGl0Ynh3Ymo4MUJ5SDNZUWgyK3FUR0hKd2RDTzRUMTZ2TUNRRmJtQXR6SlpKMTYyb2hHTnVQajNSNGZXVmIvMEVWWisvTjlIalI5SmlmMzZJam04ZmNBSTEwNHhyblRZNjFzZjd6RWhhcDZjWUNCcmViS0tXZTJRb1Jyb3owck91OFI4ekNacEd2OUlpWlFqYVNnSXY2N1hrYzZrNU9xRExMM1QrRzh0SGhneHUwWGtvTGhVRE91aDNoODM3RVRUNjlOV2N5NC9ETkRzaGhtaWFrSFVvTUVhMXR0UnNMOW9Ib3plUW83SmxBM0xwZXN0S3NnSlYvbkU4VTUvbXRBS05sbi9IYjREZlBDbDVyaUh0eEltTWtFaE1BQ2c4Vk9sVUNKVDNwSGUreEtvZzBxdEdCWlRuMnBmQ0xPdVZ0aFpSWUI2ck5wbkZBS3Y2MGJENE9CeFZydHNuVjhtVCtwMUdySjVHQVdWMENCMmkzVEVsMnVycEhMVFFSSThjenZ4RVRQbGs5QXMxSUVLdTBhOWlSenREZldnTnRkNlIxSGVuRyt5UGV0cGVGbVZMMXduelpLOHdqQS90bFdrMS9DY0FzRkZFYkpVQVM5NVpzZHdqdHRycjV3VkZyYTdycWFROUU5V0lyTnFZdEprd1ZxdXpDWE5kUW82Y2duNzNQWjl4SWVVcWwxSXVOcHZMRkVGNEFsWElDczBZQlovRWRCREpvN3kyNm5BaC9oSi9vaW1rb3lyaGlJbTg0K2ZsRkNvWG9MaURNTDhsbXlUZFRZWTFFdHo4YmVaLzArYU5IWGRLMXRaMlBoNER5enovRzdwdVdLaGk1T0FZaUVGY2I3RGhPMUxoNm02L2hRb3YybFhtT3RnWjR4TmFBUDBScWxob2lWMmZqVllQQURlM3hhbldFRXlOQ0Z6bmN2ZjVoNEh5akQ5ZTZFbC9EZ1hsSytGNkxkV3lBRmZpaE9xYWhFZVNrNFFNUG90b1pMUDVRdGkrYk00Q2pGMEtOVmNjRHpmWFZVRTZNYkZqbzZyM1M2T2ovUUcyaEFxRnBoMlF1bmFrM3JodU5kU0QxT28vcGlPWXZIdUNjQ1V4d1JEUjJZZGxhMUpweitPa0hlTW1oblBKd0h1V1VwL2pVVk82eG9ocW5GS2dJTWszc3VUVDUvU2pWNTErOHNYcW5td2hQdGNES1FmOUEzYjRxMGdyZDhVd085aFpvRG5SVmdQRlRpM3l5Qi9UcHBJOFFZMFAwb3hybnR2QmtYZDMzbm9tV3ZyQTcwNnd5dkM1UkhPdFNKQ1dza25HR0xSeGxBb0ZOdUJIVmVQVENmbHR3WUEwbzJYZ3VMdXZyQ1dQbHU0TW9jMXVEYjVReThUKzZJUklLNGhjcTkyaGJwVWRyZjd4c1hzb2FPZ2lmT3RITytqY1ZQRWdkTldCTjZkOWNMRCtOeDMzVnhuQ25DSU02STFUTnlLczVlYnVlWGVBeEdCdFFDODJCcUlvdFJFa3RWY0tlcGtEWmtvTm5FWG9aVTVuV3dlMUF5TzdhOUkvMnE2N1JjOW9KNC9kRThUUm9kQTJpdWR1dzZoeG1YRmhwWkJVL3hINWxOZW1WMHIvQkdNU3EzK3lzSWY5MFBzYVkzVjFGeXU2SlNnZytoaGdpUXVOV3IyQnMxZUFUUHJyeE5BaWdLMU5oRjIvaGtLMnVsVXZiNEtmZkRIR1U5NmYxeGFGNXdqS0p2ZWZMdHJRT1hKK1lVWVBaejMra2tMa3ZQVU5GN3F1TlBFak53am80bldoejZpckJyamZvczVENlZUNkFlZFlXbTFoRFRGRjdMT0tGeTNVL3VWWHdwbXkwcTlEcC9CZndwU2xNNE9Wb2FwYXdiWkhTOUFHcWppVFBJaWxZQXBaeThHTjA3ejlFd2FValRQRWJXbTU0cm5WK1BMdTdHaHF0SXdxdGsrOW00QmFDVDJqanNnRVVxODM1SGdld3pNOXRldmhVUkRpOFhRaEhpRSt1TnU5anp0WTAzWGpNalFrVDZRMWtIcEZFM01uczRPQ092ZVgrcUhNVkJ5SHVCT2VBOVR4bjBPUTFJcVJqMUo4YXVhUkJIbUE3TGVsdHpLOFhQaVFvZjFzUmVIZFdPTDlzTXdCdm5NRVZNR1NuNTZJNmMrMWxhWXhCNUNJVWR0QnBqOFZMMVZvdDRUd0ZoZWxDS1crTmlKVDNueHN0aWRkVENzVHlwN0FVM3M3VjJmbEJTSk52WXV3UnFMd2xVS1NQdzBHMDg1eDFVT0Y1ZGxHNk85Ym5WUWtBbkZzNzMzcDVVQ0I1N1NJMElZV3ZrT3pZR3B3NE9zNnhxSUwyVm4rVGZHa211ZmR6ZU5CYzN3Q0w2Tm03cWxYa0FSdG9XMmw2Zmo1U0xCS2d6UUdGK1M5aXQzc29oWlZ2c2EzWExvZGloL28xODdyNE1OUGduL3dlTmZyY0Z2RFdKajVnakl3b2NlR3l0Mzl6SDJzanhYd3B1cWNjM0xxdnlZZCsxTk41WVYwa0Mxd3IrMERnc2txaW1xamdRMllmRU5SRVNlVVN1a1dEdEpCYWlDSTJxSzVhNlVpVTJWUWdnZ0J5RG1mVXZORmpSSWhUOVNDdFRNUjV4RndiVXQ2cmY2KzlKUGdoNFZGckhyU0hkY1FUaG82R1NQd21WUG12ODBXcHVKSEo0Q0l3THoyRjIyZUFHSmp5OE4xcEV5N2EvT0NURFljRkJIYWhCZFcrL2NNTmNjUS9zcE1kZnQyQ1BDS1N1NDJOd3IwaUgxTkNqSG03ekRJcWlpcjlSZGpLUlhoK0k0YjU2NTZ6S1B0ZGV1RHlnK1VJYzl1RCtpWTBSekFaVUdBZWNxR0RxaDQvVCtmM0N5OHlqZ09KZ2lDbXI4ZkdDalZZU1ArU1Q1MHQwSDU5QW9TWC9XbHEwZDhNSXFONVZnRjB4SEtkUWFKUkMxdVJ0dHBuMEdPUXIwTG9TRHpHdUhHM0J6M2gvT2NUZDZyVmkzU25FYk5RSFZjMUF4ekduV25VbjlPN0NGZHhBU09peHFMSVUvWWVZS2pSM0d5a2d0UWs3UXJucVJMZUJvZzFyU0dSVkJwTG1UNS9kSzV1cFB5dHlEVFNnQ2FML0pBNkljR01ZK2EzV0FUdUlPR1NFcEMrcHhxcUxTK3c4c1l4RWJHZCs5KzQ0MWF4akg5UUpOQ0VNNm1rWHRDaklMQ3U3OERkeUlmMVJkb3dqbUNDNjRuOVduVlAyV2I5QmVhSlhkSHRzRlI0YTh0V1dGdEE3eldUK0tVQ28zaGtiSkdJZXRRMFdkbW85QmVhcERRaitadDk3dWgwWU80b2Q0eVN2TGdlcVRNdEp4UEprc0FVZDIyUUxXemVnSHFqd2FwdVlEaVRzWU5SdThRL21kUDZ4eVBDUTBENWpZeE9XaGZwcjhuZ0dFVjE1OXM2anZsYjB3SW44Sm45REZTR0RBbnR6UHVmeGQxSXdRUG14elZJT1dIWVhQWFdnMGNoY0tqMGszbjdDQTdXUEEyQ215eFFuUmplLzBBVzBhd1cxblBsR1RHdlc5Y1J5Z1RQRXVPUEpPVnlrT0hSdWprbi9EeDZyWHNFOFJFOTlxWDBxT2w3b050VDlvK3UveEFEYjNyalVqVlB4bUFRc3JVSFFOZTdrcEV4TE5DVUVaRmlmbXdVZFc2ei9VQjhRdzA4SzVBaExCbld0S0dEMmhTNStZMmJ1TktMbXR2Z214eStRRVAvMUJqYkltb3djejFKaDBLZjJ5cytaN0RjV3hhVUllZlVYUlpDVTM5alRURDNYNkhuYkdVRS9BbElqSGtJMkEyTnp5clJEWFlha3IxSGZUbVI0c2RDcTh1aWpxdG5RV3hsUjhrV1BhdUdLVjc0aW1EZjZXY1FOVHlzYnVyUVRKUHpJeWpYSGlONjV1Z0tkVUgyTm95aldZOWpHTXVUU29VdWRsOGhRdVRKNW1UWmxNdGhYRklSUmhzV29XaHJ4Ym1lWVBGeGprdEhqQ3dCd0NpVGI4M3ZsOTZxU1VkRFExUkZwQWIxdGUwZlpKNk1WVGE4aEl5Qjd4YVMzbzg2dkNGdDErVXlNaWYwN2ZhWmRYbVNic091aVYwQU5RT0lJUGEzYVYyY1Z4eHB4blpVQ3pYaUVuWW5yUFRETFM1b09qdmlIZVVaSjljRTJWNFBLMUVpYTRMclVIajN1ajdlcDZWOVlEa2FGandEOTRvOFNpUldreUswNHNhSUQ1VUNKSHJjdFoyYkNpWWNqR2dRYmdLU21CejFKbDNyUm1tc1FBYldmRHJLRTA4R2dkd3liTGtMbllUOWxCeDJQTmplOURkVVhiRFYxNzFTS3RDdVpvWnhuYWpUMlo2UmJIQ0pmRFV4MEZmWVBnbmowMnFpSlpwSlNQZ21pbXNxSUt2ZGpvNS9TOUExMjJJMTdha2x2WGdYeWxhL2JrL3FyeXlkbTh2NVQ2SDc5SUI5dm1iY0lybjg5SlBxVUhJb0lvY21CaWhkSWJxSFE1NUlZbjZmdWRkM1hvT3hiM3pxWE5rTUp5dmVHdzdHSkVuNDlNNDdMTkVuUFNDMkh5b0ZZZEp2OTF4cmUxTEMva0xyc2RCclVIZ1crZkdoSEovdVNkUWZwaXd2blpiQzd3SVA1a2FqTzhMK2UrVUI5VjlKL3VoVGlYTDZSaUgwTWU3QVdER0lXWVRPeXFyT2cwSUdVQW5MVzRRbG5zazNXeHM5R0xxRWFYbU51QzVyUDdISlFOQytNZCtOOGlCNUhldlNPNE50V1NkR3VRTVptSFpuVkxvUWpIVXF0RGJlZ01nenhBdVlmTlZlYlFWVFJJRHBvUWVhUzYwUmovaDdicS9vcVJEOFhUMytJNGQ2UkxGOWdTVVExNTMweTd2Q1IxdlZ0ZmwwREFWZVJhcStWc3F1d29jeFB1SEJPSjhML01LcDlQUS90OHpyWDhiQjQxdXJRMHpBaVYyYWdnTXFkazBabWxneUpremNMQXBLaVZMLzB6UmhjUVVFOSsyZGVka2QwcmdKTklGcHBudnIyaklIdk9zdFo0aGVrK3pFc1F2blNEUUQ2UzRETlE1SHE2MDlXZXdaZFhzMDVHQWEwOGJ6VmJidVVzQlFHV3R3SU5aZzdNeklDUXFpWi92SmUwQmpRSGR6MDFLNXhIT2ZkQ0ZwVlJBMVhkdU1MNDNNUUxVWXdVMkJiNWtTQXZTQ0wyRHhYdUxrd052TTdwcGFPK3Q1cmZhUzZ0b2J2dW9VU3pralUvOWJnenp6amI5QkM1c0x1Z2JsUnVIT2VqNFFyeWRnWXZtTElWd3dabUoyTW1KejN2YjVOVm5ybUIySjZMeE9ienRZM2hNL21EUVdWVTJWNE5laXZFejREaG4yT3JqSElqSGZqRmNLTlZNWlU2U1d4YnlEQ3pnN29jcWR1MUdJS0doMlp2Q3BGWitkeWJCLzBYdlRBZFRvT09LMDdzbnkrRVVPdEQ2VU1kdkZaZWdnWWNERVlueHlocTAxVlhEQ2Ezd0tWQ1FJVWg4cVBEWngxcGdvV0c5eDFDd0pjQ1RHVkxtSVhKaG1WbGJMbWlJOGlXMGVqcWhnYk1oUlNLeVhNbGZiR0tUOVI3K2FtMnliL1dMQjFwL3FhVlRLNlF3blNrNGNyRGdwdWNRdEhiTDdYbFl0a0xLaWxLSDJ3ZEdTNW52b0RSWHhiZTh1RGIxRmtqcXZxSTlQR1p1MU10S3RnVHU5enp6d1ptWlJzd2Q1dG9HZUV5aWhjWEpmY2M4eWdoMGExR0dlVGhSUmg2dzJpOGJBR05iRHREKzh6a25TdlpJbFVCWUxxVGZTR1JRR3ZFbmwzUlhadnpHUG53L3FWS1paMHBvRWJEb3ZkY2E0KzZMZ1B4WThmQVhKRVN0dW9lc2F5V0dHTmd4QVlIVWhPZEdBTzcyRkpIak5LUWg4QWFyK0tZWmprbkJENllPd2RoWWdVOUh2dkFUVUtaMVUwQWMwL2RRT0krcmh5WEVXSy84ekIwdE0xb0x0ZFZPbnk0RjFHSFBzdjc4NnhwUGFlcUZ0VFdKNEdmK2VVSDlwWjBreW14VlVZcnlKQjVKT0ZIRkNWMHgycUpnZDl2RUVKWlBkVzNOajM2bTVmS1VORWliNlpXNkRRY0kyMGNPSlJLRmEzcEVGdHF3ZHlGSXl3VUhxbmdCT1NXZmxKcklCSjJNcDlaSFJia291djRyU3JGR3R3YkV4SjJDUXBCUGZLSzlyYTBhcVBDN2RhcC8xV1p2M2hYMzFmdDZhT2lEK2RCS2FFOElEZU9WOVZJTk9sNmRZRDVicHNrZFFnZ25tREVXY1B4SFdVZ2w2akdLRGZ5UlBDbXhSVkVKd1JlNUxndTVOajN6MnRJWElvZURWZTZibkpzeFNZOUtSSlpVdTBFclpvQk1VaTV6Zm8yU0hVTXczQWszZXk5VUR5d3F4YWsrTzh6SmxhWDE0ZjkyUGdadE1VTFpVYjZiZXJURTlzVXFOZVdwVCtreGZhSXNwYmJlUDdaUlE3MFNWN0VGNjI3MHpmcExXNmtRRGFLNWU4MHFmRXZUcXllckR4VGswcHQwS2V6K0dnZFdERzUwRVJJMUVKaWIwZS9OdWFzLzVHNVAvY1p6Q2VIaXBlbVVqb2FLRS8wWTNSbGpSMzNjdUo1TUtNRHQ4ZVpicVF3aElMUFNWbE85cXpyZG1aVkhzdFpTTmxVdzlDZGdwdW9MRkxtRXM0TFltb1FpN08zRjBkR2YzbkdpTkhacjJHdjk3OWcreloxaVdPTGhqL0gwLzJBc3ptd1dqWFRLdEVXSSt1QkpvTTkxZXdqQlIyUlBhUDdta2hCMlpsZ1AzUWovZkVTVUFvdG4yV0JELzNNekhSUmUvbGlUM3Vib3M0UlBURGs0NzE1blVnTncycVV6WS9jTE40VENpdXlRaitRc3h6WlMwcjNNUERJL1FVU0l5VWFRR0dxNUZZakpTTWV6Z3FhRDluM3RQYXN0SVBxVEQ0MmIvMlNTU05qbTIreFd3MklUQnVRdFk1alpidy9BTyszL2ROWWR6ZkZEQ3NrTkZBY29Ta09KMWNjVTJVTis3NHpONFJIUmZjYUwwaFNyYVJUR0lJMEJDdGNXSEt0QnNMMUMySTdzenc3cm5KUVNnSlVhdjFueFUwR3JMbCtRdVJkMk9rSVMvanVIZXk5RFBWVktHUDd6TldTSzF3OUFVb21jMnhCMFB6RTlQem16akRUbWJ1SUcyK1dOdFc0NzhFUTVEeml4VHN0TUxKMExyckhpNGFLQzBFeCtpTTVjNllIUEYrNHNuM3MwcXR2dkdGbk43OEF6aFJxNDZob3lGTVFuV05KTjhFTnJBeEZKV0EyRmVJQmdFUGp1L2t1ZTY2Smw0SFY2OS9ldGgvMFhNbHpvRUYyNy9qTGI2akNCY3NDWHlZS0xpcE9PTkc0WjNiN0tJOWc4QmNnbThoTTQ2ZDA0NkJIQ2MyMmxwNnhmdEdxT0dFdkVsc0hJSDkyU2cwRlhZYVJjbGx3b1NnY0JOWENhREl0SFVpbTdpbkVkN2RnUGlORjdSejJsM2cxeTI3ODFTMmplcmQ0dldMSVNTd2s4V1BCUFBoRGNqdyt6WmhZN0c1aVFyV05FSkVuTDI2WjNpZk9DeVNmQ0lGamxnUWVqSmVtbnhtNVJPSmNabnppbGtuc2p3aUNibmJaTERwWHEvVW4vUnNDRFFOK0xRVWp4THNraGRoQ0thcDhVVzRlaTZKek5IVStQYURNNmJXdVI2dExpZ24wcUFvbmN3MUY4RTVsbW9zbjhvaGlyVEFIbG03c1d1Sm1FSDR6dWQxbHdlNDI4UTlwV21PV3AyZ01TZ1YvRFhyZWlGTU1hNTVNa3JHU1lSWVpWeUpNbDFpMTBzZmdBbytnOFdDa2dHbkVib3JtVGQvdWlSNDVlVkVKODYyL013bGRZejhLODJLQ0dHNmdDeW0vYkFnNEFUVnlmWjMrUlFQK0RBTU1tUzVCMEhTSEkrem1WcytVU1hocnppd21HWkFLaE0zU3VBQzJWT0Y5RVpuWkluMlhaOEI2dU53enZqaStpOXBOcG1iaE96UkdoOVVsUTZuejRuaXhJOWx6MWJFbnNxZ241dTV4eGVFL3MybFhVSHFndEZHM2dwRWVjdTRBb0QwWERub2tBSEFqaFlTZzJRWlE0QVJXeGg3UU5XOGZHb1RRWElqejZmUGFwMzRSQVVzTGNxTjk0OGlGTHBORnQrS2ZPcFF3R3NhUk9EUnpJZEhVeHpwQjBaMGljclhWc3RpRk1Yd3cweTZqdG51dms3L1ZGOWNjUGE4MjBPeFJyZzJzSlM0ZGtaV2lQTVFwS0hMb2J2cEdmbnRVMisyWnNLUVErZE1xVkw0RFpkQjZTb20rYTdhZGh1QkxwTjI0R3pmVzdjY0Vrenl1ejAzN3IxcnUyL3pIOEVRWWI3V0FMME55dUlVcWQyUVhxQ2ptZmJ3V001TDVBMUNKcnNTN2pIRlZrd0FWdC9xTTl0UHc3cGFONWlnZmc3bkxaeHRBOHYrRG1VazFGNUR3WU8xaHp4NnBCbmUzREtSTUVWQlFhRjd0dU9uZDRVU2M5cTJieG5LUmhpVXFvY2FjZFNwVTNZeHlhaW4wS2RPMnVCSEQ0THFlaVg5UVlrS09lRHlYemN5WDlXbUZ0TjJvWU0xYWdEeWJjZzIzbXoyeHZ5cTh1WXh5NFRrN25kMmlZYXZsWStQcEFaSDRWVUFJYVJLRXpMT2dPOWJ4ZWVveVhnVnk4UTlaVUx2emdjTXhSNzVOOThtMDRJRUUycForYnRtUmMwclozREl1V1QyS1RsdXExano0ZW9KOVA2WVg3VFBqWHJTUjhNQzhKUTNqOTNSa1hkTFAvVWsxRTRYMkg5SURwb3F6WGZPdzE3ZW52N1g2VFB4dHB0KzhkSVVBNFJaOHI2MnIzYzNSS05kRFZLeGZRbXprMlROUS9Rc0dHeThZQldIem5aY3NNU2htSUovWkhEcjdnS0RubWExMjNYM05JMDNJdTl1VWlLUEZDd0R3SlcvWEtQYlQrWnR4VDBpUittWVV4dVRoWGVwMEU4UHorSzcvMnJJeUZ0RDNWN3FDM1p3NGgxWVo0ZzBncnQyV1ZIeGxWeG5uMDdoZThBcnNSbGNRbWh5ZVdXMnpEc1ZOQllSbEpUSlJNTmNFcDhxQ21ReERQRExMeW5mT1ljRXlRQXc2Ny9RUmlWRU11WFlYSDV1QnBmN3hpaEVXUFlKaTZ2d1YvZHAybVN0aUJkaldLSWpIZzlla2g2b2VadlY2OFF3YmU1RDVBb3RFZWJoaU9yVXlmUXMrdHZVVDZ2VGNVc1ovQThqM3VTa21Td2tlVFpGS0QwWldpQ3MrTVFUQ2oxZXdTZVlmSW5NWTZSTnVKbVZXcENzYUhYNXNlWFJSZjdVZGlCSXQ5VkNnZFhKa1E2OCtHazkvSWpRSlJBTEFJZXliMGhYOVdMQ1V1UUpsL1RXOWl2OXJ3em5GUUo0SE00Z1RmWFRPOXVVcEQyQ1NKTWZQMy94RUx2V1RwZkFlcWduM1VGemEwL3dlc1hmNVFSOXNjb0tIMndsWUNPRTg3MytmcG1JRHhrU25ySVhRd04wZlZ5Mmx4YlFnU0taM3lRR0ozUTJxUTQ5QlFjc0lQb2MxRVVUcExGUUFReHptdHd4d2pyYTJTL2xZR3Jjd0JLcmFpVWI1M1JXSm5IQWUxSXk2SkJaZThlMHpXZWc4Ylp1ODhlU000YmQydmFiWktyU0l4bWxob2NyMXFWbkd0bTdzQ2Y5c21FSEF3aDFNTnJCTlRMK2g0QjhjdVRyejlIM0lxd3dQK2VzQkEwS2lFQ2tkOG42MmFWc0dvb0x2OERFWVhUMWlTSU9ZREF6MFJxakdJMVZDVHc0c1dyUk1Ydis3ZWVoa3JHYk9oek5pa3Jta0FLTHE3VFNzMWcrcVJuNFFsZnJzV3NyNU1lSDYrRFRaVjFnNEFZaGlrYXh5VjkrNXVmSjFIMnIzeTREbm5SZEg3UHFMK3EwVmVIUHVLMndmSG9SRnZ2YjBONExjNFRlUDdQWHZTM0M4ZWphRktoeTRobDRyS3NiZjhQRzVNeE10NDB3SU5ZNTE4d0dlRUpDVlV4UGpUT1kvSWZsb0cvWXQ3UzFnZ0gxOGtVNW02Y2Q0R0lMaGoybWNtK0pCdDA3elEwdFZhQ0c4Wng4WGNMalpwdndUVGN0c3Z3K0JhMDR3T21Sa0VZY1RPT2cycmh1NlRYbmpRcEIzQkFYbmJockZxREw3MFdBV1RZWGpHcUM3akJMTWpzSndtMjBBNDM4Z3NjbnBBNDJTT1ZWQXEvby9TZHRBVUV0N3lQVWZGaWtheUo3cUZpYnptUjIzZmN4bm5PS21vT0Y4dGZ5ODZCU2oyaEN0UjMvZGdXa290eUVvV2FoMFZMdzJBbkFRdHVBdGFlRXNVZ2xtcmxuTjJ3S0ZZeFVFRFpVa0ZWTnVtbWdBT0xxcFRVUTFFeEdXZDlFa3JlYUVhN1ZKZWNQR0Zud3JvYzFMZFFOdUNtMno3RllpQjM1M21JS2dydFMxYXVkWVlTYWsrcVliUVZqUWluZjhJTG9iQ1JEU2IwZStDeTJUZ3lkdUNIaHQwSUlLTjJCRE1hK05pRXpnT2pRK0V6MVpRbG9SZ2piNVN4VkpodDA1RjV2eVlKdWlmYWpYampFczg1RnhVMjZ3OHpwcDJkK0RGZ0FlS2VCb1JDUGZGcWhiRVY3ZkVMcnFmbitKaCtaNnlHTHdaQ2dvQ2NhUGxBZFhoWXZPOTZPVVplTUp2bG9hMjFycUh5akREdEhLRUxMZU0wSG9pMStURm4xbGNnaVplUVZ5NEIydWhtT2YwT05PeVRXRi9yWVVsQ0c4MUZIRXllTTU3cU1zbVlVTWJmeDJNUm92ZVlQbXVsa2Rya1YzTVh1NlN4RFVTVEk5UkN5eVZuYnZPRU9LZUVrcElwVmhNRFZMUENsaFV3TCsyMlpXWkF1K2pBOVVQYTBPSGhSeEFTeU9hWlYzc1ltWTdtd0t0WnlpNWVtclRkYWZ6TzFWTGF0VTlva2w3VmlNMzZ1ZDlUdUlXL2FBTU1rMDhBekpPMUFoT1FDN3Z0VXUrVVhZMXJNc2JTVG9BUk4zaTM4T1R1T1U1UXBzWm1GMzZKb0VNckErU0QyaGpSdy9McUw5T3A2OEZEemJSVTZackdqZlBaS29xZlpENVM1RG9IV0dtUG9CU0JKUkZJVlhEVEVURFF0RTY1M21nU2I4aGpiWUpaOCtCb2VYL01vQzZPd3dHS1lhcVJJakJ2SDR1NEFGSnV1TXhhZE80YkdFYkNmbW1NYlJ6LzBOSVpCVXpYNnJCTEhBbGpIUFdkcFJ1dTNLMEpqbTFLRzhxTU9TYm1udS90ZHhXOXQySHQxTVpvNEVKQ0NSRHA1TTZIZThSZXVFdk1PdThtVUtKSGcxMEpBd21ROE5vYlZNVjdSem5JVS9GRThtcWlQZzhaNUR3NTFFK2JlMytDTFI4K0daeElORG1pZTAxdklWKzdJY2I5bEFjZHg1emYzTmlNZ2Z5Z1ZOK3pMaVltUldjNUlWalIraThJSTdleFdibHFraXFyTG1ydzRKWVdBanlkb2VvWmVnRkk1QXBRdGdSRjVMVkxjbUpHNXNKTk5yVTl1cERhcVNmRFRZQ2U3VldBS3MrWmlHb0pCbkhJcUZOV29TYnhHdjZYUXdVV2NLbno5TnZHakR1YnRYcVJjTkxpNzV0Wnpxb1hqMU50SlBtMDJHU1Z4R3p1SkxJRGxXeXBEenBIT0VaMDJxM2ZKbEZzZHR6QVliODFHU0YzcE93V1VLbk5vblR4QTB2R0Z6QSt1by9rb01QY2lMVG5NVHpadW5rSXFySlZTckIra1FWNXJqZmVOdTU4Y0JocW9EYXNCa0JSTTFDanlrVUY5MFluS1dINkROSUUwbWZlb25BblVQK2FGQUNZZU4rQmFWd3RsSUFuM0sybUFsamVUMnpFOEswUTBQbXBCRERIejRxcnI0dXNNYmwra3lCZjJtZjNuZ0MyOFpzMWtNZmVkYlNUSUh3T0VMdG94bDlKUG1jN21hemRVeEpjeHZSVTZpZHVDSGZnY0xuYmUwMUNPYlFVb3Jlcm1DWEtDWlFRQWNjNUlQTXdnS1lBZmFEcTEyR3h6ZnJVQnFPN0JLSVhDVU1YK0JBTnArZVAvNmlwMndyNXRWVFNXdWRISk5QS0NJR0JIQ0tnNjdnbFNIMXRxcnFzWnJvZlNkakx1NWlGUTFVcmxEZ2c5bE0wOXdBZ0kzUERiRHNKbWNQTXAzenJuYkxGbTRrYWc3WDhPQXZnZTNPdDMvem5oa2VQN2tDbzVPZE9PUFRXeEJYbDhmeWxYVnZqdjdPcEVnZ2JWWkFyWGlNM2RjNW1tV0kwZXlDR25MVlRYMmJMS3M4dU5CNy95Zm10T3A2WTBhTm5Nb1ZqakdITENTSDNTQzJJM1l2enRhVm1BUUNRQmZhTFgvNUpXb2h4aDZRLzNYUHdLODQ2cEJWeS9MbEpTMmdibVBERFdsU29aSzRZU2QvdmUzOWlkTzljM1c0V1V4NU91NHJQWjNSbEZYOVB5VnA0WXBFdVpKL1RpczZyRUNzUENQQTRKWW94Rk9nWDM3cHlaY3lOZDZQUTUrZEZ0WWgzWGdERlg4ZDhSRlV6a09ndldZNzNocFg5RUJIWFlYVWNCUXhPdzZjRUZIUGd2V3BTSzFOTjA4WkpSZm1udHNOdWw3ZlFQRVRhZnRwd0FTV00zdUcxUUFSdHE2U203TFNSV2FzMy9tODVER0VCUUhpSzV2eUppSXR5ZzgyZHpOcFZGbWVJSXJHYmhlTjNwTERweHpoU0svQ3dhRFBkZ1lYS0k2VW4wUExjdGVmSzVqMC8xN21Va05sRVo0RTlWMUlEYlpCYWw2VTl4YmIvM2pkRU45RnpqVFdIclFhZU9td2YrYXFMVHlRejFQVkdEOEVvS29TQUpWSjVKVDA1djFxdlF0aEtlSjVxSUhFZFNtazhpdVRJUW5UbGxzcFJKVWczbm0zalhOQXlIN0IxK0s0YWQwSGlOcDluY0xLNFZrV0NLMEx2dWlqSExmWW1NNDdER2xZbDIxdmJNS3AyMHdBcUt0WG1wdjNWeUJXNk1MNDZOTkdXNkU5QlhsR1pqbncwdnp3VnRXaHI4Vkw0bzZTUWZ2WlpWRjZyM0dIbnRVWGYrbjIvdExKMUFZZ3NtY1NhQ0xYWmlBZ1ZQM1M1OE1jd2g2WUJGbVhlK29LTW9uVUlUUzdLMS9zK1BYZkliZlBJSXpES2dVbXlmYThSMnZ0cnVobjUvOWJDOERrMThkZFUxeFJmc00wY1krc0kyUmhaRXlZb01PdHg1V1l4TVFUZCs2WXhGc05zSGRXSC9wbTlRLzBmVVdiQ3BLS0Z0QngvdVlNOGJUYWYrclpKdlZMTEdpM3k4UDVVb2xIWU9mcklXRDNGRUVqNno1YUVQc0lyM1VYYjNqL1dhVkFobFR0eklMQlNpZmd2M1JXcmk0K0VtNkNkcU9FWVpqc0diUDJOTTFWNmFNQnBmdHhNSnVQdnVVS09scXVJSU5nY2ZsZ2dteHRVV2Q2Tkp3K01hNVgzb0lKaEkvRDRReHRYdTRlYmdGeS9zYTdrU0ZoTlBHR2Y3VzVRQ1hoUndQaHlYNWpJRGQzMGRpQ3h5YnB4ZGpjTGFlcTAwdVdocERvMnF3RkszeTMvQVQwT3B1RzlHZ09XWC8xS090OEN3azN5MWcrRmZPaVFnaXNhVFRFbXlGT3FOVXBlcC82WTNOdE5vZ2c4ZGtJNmhpd2c3YVNDTnJXOWY0WnlSd0l4Ty9uMXdjeEV4TnB1SDgyWVl0M29iVURhbW9jZ0RWa2k1RDBGTWZMT3RWMFJjMVl3UVdMSnZidGt2VktrZ2J1R1NLaHYzQ1NhMjFKdkNFdjBjQkF1Q01tMFE2RUhlQjl2V0cvYk5lTFhTNUR4QmVqNzlaVVZibUxrUk9mK3g4T2d2b2w5TVFMeGtEcDFNUkJ3SjI3R0pickNiZk5wN3RqZlJRZWw5dFJwY2o0N2FMdmNKTVU1NUpnQVpEVXdleHc2Tk1VODRNNU4vd2RxZXYvVmFTRnRpME40MGxYbDM0b0oxNzlaZU4ySzQ5L3puZHNhRDA0TVdLNXRsZUJOMzZ3WWZMV3dmV3FSc2pGWXpwb0dDS096ZjlvcjRnWkFXM3o0TWhHd0RROXpPUXZrUHNqOWtmVkgxeDduckFWTUNSMGVMaGRYTUZnTzlOcWZIajNKcTNxb3hsaDhvbzJwWUFNWlVHUS9HcGtPZktBUjBENGp0a1pLd01WS0dGei9CSGZ1QWVQMFBhSXZzdE90VWJ2SEpoYkV3dzRYVTVYZXkrcHg2clNJdTltV2w1R1AzVHZ0R2xnMEg1d1AxMUxEODFlbHcxVnJYTGhwQzVLaTZYbWh1Z29BaFp3b0J4cHRzTXJKM2NXTjFMZ2RrTGp6UWw2WnpzYXplWkVBN2NGRDBPOU9mY3l1TzNjcUcyWmRoWEJ2enBSTGQwY0ZTME1uMHRRK0dtcnk2Zm0weFdicmhXbnNrd09FRmtZeHBUV3ptNWdyZ3VVZmhKOHJNSE40dnlrV0l3STQ2SzVQRDZybzVHNzlnTWhtakN6ZmQyT2pZMnE3TWFxbnJoYUVzRGl1NFFybGsvUnI1YXNYRDAza3p0QWZSdm9MaGN6ZWFSWWRHM2dsQ3JBZ1gzN1FjQnh0NVhxTzM3M0hwMFB6MDhnMjd0SXdnSFgzdmZyVk02aGJiQlA5bklybjJRcTVxL0lsT0w3VkpuQmE3Q2xuWmx2N2FmdlBkVzJuRmVVRmgzVHNGd3QwbUxvOUtvOWJiK2hPeDlvcnFKYVF4bk9tNitUMlQvM1k3OU1iZC9OTzk3dHhvUzdNWHN1ZDNWZ1c0NWdmSFdzUzlkRktOMmgzdFhKakJ1MWdOYUlvYTlEaThiQ3dDUjV6UGM0SlJIS0UyMUprUERZdHc5QWlpVjBHUkszVXRZc0lOc3JDZ2NaRHVyUnp6dlEzNURyaVRIR1ZxL0JXbFVyMVh6YWIvaG9vcVdnRm1pamxzUFFEaXZ1d1VzTU0zTWIrUU9rZ1NvVEtqRWk3RW8rY1ltdHF2WlBRQUYza1VqWTZldEhFTDNQR0JmVHVhY1dxaXNwdDBpd0dVdzNaVm5UVUUxY3hIZ29lczJOVkorWkM3dlkxSTkzWVlZaFpxRVNXMnk0ZlEyMXc1ekU4QzJNcGNJRzRuK0RXek9EQml0N0hqNVp1ZVR3dXZCbkhCbU5rY0lHSnluS3ZINEkxVThyVjAyVUJyL3hmODl0VFRWY1c4ZWVJMkRtQlE3T3FzWnZuK0NwTmtiRXRMclR6UWhUY0lYU3dhbEpMKytZeGl3Mjc2ZkFLRm85TVBTVmNTOXVvL2xobTVUZ2pVN2xhQllFVE5hZkJ5djZsZDczelNEakhkUFM3a2Jzd0p4OUxvSGNTMTVvQkRMZVFhYkIxYTQ0M2hWam85RUloT2Vsd09TUmdYcW93eFFPTTQ1YnRLTit3czdNUjdndmtOakVIdVRFMnhrVDJmblU2MDRjL0ozd3RSQ2QrbFJYU0p0dmp3VXdGeE1jR05mc0hRd1pRQmIvVy9heFdYeGF5cUwzMXVMa2RZU3p2cEhQY2dpc1dqYkZIdUF2Rkg2QUVrbnlJMFI5N3dadHhWWDBRWWlubXBLRFRhSlV3UUFnYXQ2OUFVUldsQ0hIaDNCWU0yekYvRU5heGJBWjA3cWJ4cmtDMjV0bHdYN2FpZUlpVGNjRDRWcjNpTkFpdkszTjJKUSt4VGpFdlRXM3JhejN3Zm9zR3I5eTZHanF3WFZJMlMwekVML2cvdjlpV2hGTWJ2Y1NaeHNKamcvWERXWWdKQnlDbXNpUGNqTi9lTW05NUpVNng4aVlqZlhRY2gvczV1OGpraHlNKzV0Y2YxWnRVekdOS2I5RHRsS3lwclBqb2xKaENwNmwwa3A3QXIvNElycERVS1VnRkpoYWdXeUpMVHJDKzFGMU8yVEpvdUk3WEtrVlc3dlpKSzdaSHNZOGM0Njk4S252d2hqM1N0OFhjeHpSSjhSeHhTUFB0SFVzQTdRaWRLKytUWExuRXdsMHdxVjROZjNaWmxSdElpdFZyYnI2cVpqTjBlSzY4VXQvaVJIUUFEU2FoOWJXZDc5MVczMmVudWhkTEU3VmRPMDV4cXA4RFB5UmhMc2VOMzVSRElnU2FrK2pIUnFoU2JDK3Jud0J4Yi9iTDRmS0x4WWlyaXBOL0ErKzljSnRQbGVWRm1jUkRjR3d0eUE0WklpbzcwdUJDWFYwZTU5OXBKb2xBSEI2Q0VpR01QSWpqdGpGandEem5rTWN4UGhRU2FnZGQweXkza2hKTEo5SnV0TUpKNURBYURTcXJxZWY5bDVvVkhMNVl4N3FiMDRjMXhPVmhrYlJRVzdOZkppeGEyc2ErWWN5OGVETXFLNzZ2eVNBZ0wwZUZHcTZkajBndk1GVHEzMTNROGJuMzUyMXlCSlRCZkhvd0dNNUNURWdGeitLWi9BNFJCN0hwV1k1TnFkNk9IbTNOTDExZjNQeDhPQnBNMldkbW5IRzBJdFJRTFFvN09acWJpdlNybXVKditYQmdiZlIwaWRqaU8xMFJUWXlNV29GK0RUbzRUb2hNWHl3NEVOK2tPc2duVzIyL2hkNi9Dem14c2Q1QTdENGR3VjBmdE5tTkh1MEJSWC9IVitjcnVBd1BZUmo0c25iSW9YK2VOeElVYXlrcE5kbDJ1dWVkSGsyVzlHdGM4TmN4WkxWdU5pTDZLNm0yQXdkWEFpL0IxQVdiWGFCUDVzcXhOSklNMU5pbEpyOFJ3SFFCRFpFVEVBcnhHVWlVa2RrZmo0WjJVNCs0ODJoQ1NzYkRWV3gyY1pad21EZlQrTThlZGJjdEpzTWxjekkxbU5jbGdZaUxDSDdYekQrayt0L2FMeUx1Z1lWaU9DWWxLUiszS0h0VUx0RjhRdVFOQ1hyYjBkTG1jWllkVyswN1BtUGVveDRna002R1dFS1JKZFlON0lkY2d4aEFwVHJCNjVhN2JUSDlzMVh4d2M3aHhpRE1IMmdaOUl1em4weWl2eWk2OVRJR1J6QlRDZDFEd2JkdjJURlM5MFJlMGVDTGFyUG1aVWwvb0hUWkxIeUw5eEZYNkx6dmh2T1V5bDZtMlFDUXFCUEFBMzB2OW9iTExTbXpwMnMrTU1FdllZdTdwZHozVndTSDdrQktQazZLL0N5K2pvM2dKUlhlMUJQeW5qU3MrZkpoYzJPL29sck5oL2JDQUNnVUFsV2xZbmNTRTJQdHJoOGIxVGV3eHhHOHdraXViQ0VYRk9NV3RJeXFzcFhaa3VpL3ZqSUR5eWx3R21wckV2dkdwM3paWit3RlNJWEpXRGpXUHlZNHBOWEdWaTdtN0xSQ1o4MWswdFRMY0ppQmVCakZvMzk5ZnFFaTRRKzg1enh5S203YXZ4VEJsVDMwUVU2Q2F1MFBvbEFXWnFVTEpCaWk3b3BDbXpVMm1yT3ZIRHFuOHJGNzFnc2NsVXkxWnduY1NvS1FsdmJZcGpzcEt4b0kyMDJHYkUzL3JlQ09HK0NvazlucFpBR2Q4cEMwL2p6U29hekU4OHJNZHRKM1BWdnUzK2FnRmx5VVdHV083V1VxSUUvWUUzNTBNQ011Q1RMNmZpU2U2Vkw1TS81V09Qckp0MEpDcGFSeW11WGo3RTVuWGZ4NUFoTWdienZWK3U5dDhhZlNNWVE3S3NSWFZKNEt1eThIYkZkamVBcWkxTnVhZm9SYmhTR21HNjlkbnFQdzhCcktVRUR4N1lTaWl4RTlpVERyc25UeHpkbXc4UEhHNGdDMXNPRnhuenZyZE8xSS9UdEN4NXhyOEd4dm5zTjI2YnhzNHdWZmxmalROYU1RYUNOT2R1THZPbWE5bnpzMEVla2lhZ25rd1FnWG9GZDZESzVzMHZnZllqYjh2RkpHRmpsUUpNSDQ3bk41eXZqWkVFUkJRcmF3bTFXMFlxamRsckR6ZE5yVm9kend3NW1ZcVRGV1FuODdZOEhvMzNwV3c4ZDFycWp5WVY0aUd5SC9peS8yVERaaXV0ekc5NDg2aDVDOVlkUTlBYmJFa2ZISW5qbTZLQ0VUdmJLRnVzL0VhY3RFT2FoczlBbmlkNjRaTFRqNmFXejVIRTFNdXFZSCs4SzloczhOYlBvNWNtWkNGOFU0d2MrVzU3Z3ArME0zZDJlbG5WUWtNYTZuN1VaM0pBMTlKeUtvL3JEL2cyK1NpZnVQSmROV0N2QXRSdHdGRjkvNzJJWkNQN0RhWFBJaG9FMXFCOUJ1NW9aOUhYdzR2U0hMNFBtVEN0NHdzZS9rTElFOFByRXdSNkxCNUVkNzdiR1NoWU9uREtjRkdBcmk3QUtYSXdpMCttdy94QXFpckdDeTJ3ZmxJMWN4V1I2cUtpdzRFcGxaSEorSFIvYTRSUW1jQmdLL1JWcC9VMEFYOFpaa2JiSGNjbk0yRkw5bWIzZ2xQbVFlOFJ4SEh4bWFYM2t1NkxDZzZyL0JGR1dxWkZpZjRIOWREZmJjcUdaVFJXUjl0SGNnQ1IzNUQzai8yWTVkcm1BWnFMR3F4Q2w3Wk8wbTZ4UWdjZHB2OEN2UEs3SW9sYXNVKzc5ZGVHUllPMEhEY211bU56S1UvQzl3Sy9LMlJJNllsY0RtdGY5YzVLTEh2YWZTNkowK2xvR0tCMFJtcnpsN1RqWXg5bnhKNmk4UUtwNE5WaXJkZnFFZnBYckdsWnF1M0RDYTY2a0RrckhZaGY0N0VIbmZnbXgwQ25GczdWUFROUUZYVVo4SUtkZnJtQzdPM25DK1l2bk1PMFFaTE9nTk9UTTNORHRoN2xsVVkrQU5Xd1BOZE84eW5zazQ2eDBxdUl0azNWcHFuT2ZiY0IvT3ZsVnNjZnc0bnZOS2EzRUlKWEloejZTYkJjSEFQMnRVR1ExSDZHUU9wdzhoSGFscVgwYUg0Y2tvRGpDZndrS0x1MDNuSTlMYU5YZ2N0VGRoT2N4WnlwQUN1U1FuekxlY1k0ZlltaXRzclZmaEwwdUY0THIrTXJYTDZocStxMjBUQmQwMUpsU05nN2RGb2lPdi85L0F0ekk0a1JuSnIxNmk4enk0Z1g3U0pwQWsxMzJkclhITE1lckZuSDBlYkpBNm80THRVbTk4ZU00TFBXS1ZmcC9maHJNS2NYRmNPQUZtV3lZL3VFcmZZcUlPYks1Zm10Z1R5NzJtNTVsZ1BSZUQ0WkRFamZUNGUwVHBRS2FYOHJVWkFtM2h0R3RJbGtlTG8xVWx6YnpjVGpyRkRuSWFrbHNIU0c4RldvUW9vSUhsV0o5cGFoZGozZHJpb1Y0UUpxUUlMdDFSQUcyZStveWdkeUp1d2dNWU1sRnhITGIwTjN2ZTFCbFVyUXBwRE5zdnBkUXgzU29McHo0UW8wZVRzeldsNjlkSjFhTEg3bG1XcnY4TElxZk5vc3NrVnQwdlUxRzNQaHg1cHlWUWRqek02VU53a3hjeG5CcXE0YWtaRmVYaVluWjFUL3FLMzAyYVFGeTRvVDJoSktaQ0xWUDRVZEkvQmVsVmNKQWwybSs1bVd5QzVPVFMyYTFjVTVvMGVxNFJyQ3JLREJjRW1rODJuQ2RhT2JPejcwMTRENi9sbGhwMytXUU1VR0pZUTBzZzhRcjI4RGFtNU9rR2lMZ0xVM3NKdVZITjZuczJmbEpIRHF1NytYcUlnMnF4UWhtRUk1a3ZlUHhqUkVRVHUrWEllK0pYdjNvVHZkd2I2R0lIYTJ0YTM3RDBzalhoUVUrV3NDLysyTDVLaGZ5NVJUNmhjVkNBaWdGa0JZa21XeWdrM0FGOXJQeWRvSFFyVWRzTmhRei9pbUE5SStTQ2RZTGxxN1g1bGp5SmhpNkpQQ2hNaHk4UWNHSnkrWUJrc3gzd0RvZGgydG9JenVjYzRwTVFMajVwSlNYaHJDZTBqQjB5WlNkL21HSEw4UXlTcm5aZ2ZJb0FQZmZCTkxXYmo4dGNHc1hDMDRGV0FJYlpVbmdaQUtwMjNERllEb3FrMjd5dXBsRzEyeWM4Tkg4T1hMQmhINWNRVWF3anpqN2cxRk9lUmNkRlY5VVh0b25yS3F2UmtiNEdveE40S0FTRHlDaUFMMzM4S3dUM2dkaUw1SDF6MEZZazZvaFlZUlU0b2R4ajJKaGxjMGF3UEh6eVpEcXdiS1lzUUR1Q3pUUHpXSURhTzdtNFZGeEYveDY2aVlLbmM4YU1xWlVkY25mTnhCTVBSZ0RDZ1NTcVlMNXlEdDVWejNTd3VDMXRONkJkNlhlWmo1a20zNm9XYVgvSEM3YWF4bGlnWU00YUZRdnVvMmZXYlNldjlydFlJb0RVMkFHU29lbHAyNzRvbkpCeXVBOUZpZnNDMlp1RytnNU9FaU1pVXEzL3ZOeHMySmlmcjJTaG9kVTllOGltcDRqYnplNEE0Qmg4SytaSWRaSC9Hb0ZUa0J0cTBXTHc4RkhhRFVaSXZXQ21HSGplVUZJaS9PWktibkR0M09OcFhVaGJmRmFuUHV3c2V6TjRUTTU4blZhQlFDRTd2Qm5ibTNHVldnUC9JdURhbU5BcmhCcEt4Z0cxZWNFM3c0cjFtajhQb05FK0M0d1NnWGZsQWwvUTQ4dWUzUXJ6OXYrRWEzbmZMSC9RUlczZ2ZoTVBqSkRQcTB2SmIvbXBWUkZyenpGaFBBaHhTcTJzOHkwV2NIenFGS1hQYnNFdE1taEl2ZENOVjFiWmh4NmVpWlI2bFBoV0lsWjhGVGcxdE9uOEROQkJwRHU3SWllNGN1ZWtJcWVQOE03dDZhVkp0STR3Nm5LSnF0RlMwSWlkMTIrelNLZ2Z1WW5UbTl3RlovbDNwckNtVklHZThmaEhsb25iWmNPU3FZQjN5M3kzejh2V0xad0tYa1dKMEJyUnM4YTBQNis3M2Nnb1JQN3hJM2tzWWsxYStoRWV3SGprZllKdlZ5ZEFkOW5NMlRWMXk0Z3F3S1czUmJzTGhSaTNTUTkrU0VGVkYxa0JZZE9kL0ZHTm5KVENEWFdENWJiMG9sVW5ob1M5K3BEODRNa2RpUjJOU3hjRWNDQmI1VUI1U0xwRDlQbC9UVENlME80OWNnVUdvSEtIY1hIR0Q4MVJnaWxaWmorZC9RcnF4UjN1cnM0MUhkTDhPTGg2SkRPVDk5UDhrTjBmeENsWjdOcUVZbkJnaDVDTWxqVVh3TWlRd21aTnJSdEpmbXloZUZrWFhla08rUmRLWlkrRHBwNUdwbW5kT1l3UklxTlFXOWU1elVjelB0ajZwTSthZnVRa0NIT1BQa0RGWVFqTloxV2FTZzFEWEdmeUxsLzBtdmtvTzVFNEJkQlJ2U2p1K3N1RWpNODJSMXhjRkRtZDF6M1R3WEhhbnRac3BpSndjUUZHYUlzbVFxOC9EWXk5d1N5KzBRcVB3SkRkcXM3TGtBNW9reExyMDUvTldLeCtXaGZwVEdhVVA2d25QS2wwdzBCbThKNTRuSUUxZGUvQTNaYUF2dzQ2clcxS084TklLZmJ2dXBRNlNGY3pmNy9IUTlWYithZm9QbWZlNUdPUlBFcDg2K2ZYR0RoQ2hOMlIxTFBsOHQ5RFJzQWpmMEd1eVRQNHZQbE1zL0FQS3Z3UVhxM3Z2dXRMVGFZUnlxdldZVkxNZm5iSW04dC95cjIyWFBsRUJsZENWc1YrL2RxSDFTN3NldjNIZGNxUnFpWTlhRUNmSWpQWXVTa01FNE9ha2VZZkR6TzdqR05RalhrbERWa1lsODlhc2J1bXdQNGlYU0tqSjFCYmVOWDJGdjMyOER1VERlYmF4OUF2NEZ6d2l4M253ek1IbVpuVUJMVmtmZDRGeVVCaUs5T1AyYlZXNldEblNCeXl3NEtSZWxTR0JyQ3V0VHJtNzlEbno5OGQyb1hQamVlVkp4ZEhqdUZZTGVFSGQwR1E5Q1NKOFk0UlJzRmt3TE0za2R5Wng0QzJGU3ZFWXJGandiR1Zjdzg0cDNiUEYrdmhzbVQybmtIczc0RU1zY0NuY3Q1VU0raFVXMHJUWnFaUkduQURwdHNNaVQ3cG9SblNodjdXYWpyMFpFMllKS21aejFmVXdzYWhxNUxodUZ4WnVqTnpRVVBJdmlnd09jcURGQmkrWTNuZDVmdlk0RDdBOXlSUFlFVXQ2ZjZ4S0t5dWp4ZDRwSUd3anp0ZERxSE9RaElJNzNZWjZEbk9XSmZWVmMvWmo3eWRCVFNPMDVJV3ZxRE5WZlRoZWRoWFZHUEd4ampVb1Rzc1BSeXVLeEYyblB6T0o3dlZoSVR0c0VzcXEyM3RjZ0ROaFBYeVFjL0FkNGExK3JlYzRpU0Z0cVAvVm42RlFWMUY1a0RHcmNqN0gxRkZtL3I3QW41QmNGdVJ4L2h6L21FaUt0UHRuWTVQbWFKeWpCbVRBYkZOVU50YnpJc05td1UwUVBvMnpRNGhKRkJSaXR4UU9EOTBhMjRERU42eUpMbzMyL1NoMTBYUjUycXVsbVpXVlp2YzgrYSt1bUNBZDQ2ZnhiRyt4RC9Scy8vTzBNSENEQU4va29JSllabHlTOXh5WSs2VlhESGlxSXUwdWtPWjEwRzhrVWZUWVFpdGozVGtrbms5TWZETzNCTU9lWWtYdFlmRzdaV0FWUXM2UGgrZWtqanREUFM5NmMvZ2Zza2xlYUpLeHgvVnBuRFhkS1NPL2o3QUszZ3l5WnA3YzhvTjIwT2h2a1NFWnVIbVBXZHZWaUZ3M1hyZ0VhSWdQb0pMSEE3UEdLYmFydUl5dkdXNFYzeVplOVZzYmZFaU5veGpEc0FVNmZCOWhiMDlUdDJwN25sM0x4Wm9SY2pKR3pPeGtQeWtjcGVhajRmSU55NVp1UVpIeDgvVDZFQTl1Z0hoL1p2VVJzR2dXLzBtLzRLYlNzSmcyRUN6UXErYkFtOWZqalozNWhRUkRXWWNkbmR6TEg1RXJWeWhiZHlNclU1WWJKUHc0MmR3MTZ6VlpDOVMyemhYSHhzR2ZnRHJiUkJGSTZBRzZNS2ZURVJjQTlPVmk0NjRyQ1ZNOThPd0M0NG5SMlk0NzhiZy9BMUh5TFNCUlowc0VYbXpYaTF0VmhVVUl4Z09QVWFGQUxTUlhvMmcrRnY0SFJsYXAxYk01a3BucHBNUlJrUmQ4eUI4UDFMak9JUEJ5N3l0NTRqRE1jMUp3Mmo4bmlmZEkwRGRVckdHNTUvTEVmRFhvcFlITXBWUUIwenhmYXZjc0RnWVhtZ3pHTUM4aW1DRnBZSUFXMHJMaldydDR5b0pMcmVkS0diY3poYVFjWjZvTDdUN2gzM0lER3EySXg1S1NURExBNGJtQm9FSFVaa0VDa05UZ2d2N3RWUGE2SWlMREVEL3ZUOWhyOFhwbHJNSWtXMUxhQ1dadmttR3Q5UkR6MEJsTEc3WFY0c1ZXQTZZSlBLK0xVQ3ozUHZKUDl6dE9DV2g3czVBYUNSTWY4cTRJeTZvbjJ5NUJ1RGI4QXIrcXVuUGRxdjNJVFBGeEV2aXRMcmZpeHhDaitERWNlVW1ZcEZLMWxOdE9wQmpXZEk5dURtSHNhWlNYZ2dCZ3ZEaEJSMW9qWnlRM0xLei9naDUvOHJGcUs4ckgvZ1hiaVdka1dmUUVtT2I4RDM5b1ZHWW9JbUNjU0NRUGI2N0x1akpJN1MzS2l3M2tPejJDbzJNU1ZaUXdoZlFMeDZWSE1RdkV5OExvdFJKbVp4N21mZ1RWeEVGSEZnMHBBQWRMbFhkSlNSZklEcUhQN2kyUEFhcWx3Z0xtVFdwTlJTTUVuSnNSVnl0TnNHZWxudFBONUNxbXhqamsrbExQTVMrcUZmcjVZK2lrcDljMTZJcnRtREcxZ20zN3FXTVNmeFMwbkZ6ZUluSmRsSGo1SytCNGM4NjFQRm1KbzNNODdnQXRQRWR4QXVrcElZdllVMHpGUTNXOHQvaGtHaklJL3NvbVA0aE1pbE9tQTIrdkRuY1Z1TDdDc1VzN0s5WG05QkcxeWlnejM2QzNuZHhPWXhlaUxxWkROZmpzZ21XSDYvRmtNWnJabVRycW5wcGdxQmNmdXpVamJzU3NXcDlaaXVMMlJOK3krWGtyd1BLUnhZNWNzRWJ0QSsxWmFEZTJrdW5haC9Dd3NsLzE3TmhSMnQ5eE4xMUJlUnR2bzd5MmRTWFhxa2hwbUw0Qm0yU1NFN3hKcDJQcC9RaHFEaFJiUGNEZCt4bXlYQVBaUFd3MmNjeWE3WjZLSWVMdEtNM21aRTdlR1Y3bTUzdkZLakJWdU94bVBSYmNMcGsvaHVHOTVIcFhWNDFUd1lmbUhNcmFhallod2Mra25JMXFWbVpVZ3YvanJXU2VoelVwMEJ2d3lyVmxSSDA3WmJueVp2N0NXcHVxTVo1b2x5M3R3aTlzWmx6TUEyMkFLeGVPeFRkNlR6Nm81MkhVZlFXaGl2SVJBQ3o1cTlLQk45S0JRWmprbnBGYzNXNzFKd3pKa0pmWm9oQlJ0UFlwWHJrWUFub1ZPVldodnBQaGhPQzlzZXB1NHNRNGhzMEtidHcyRVVTN2R2Vmt6K2l3UFFOR2dsay91RGlaQzVxS3p6SFZuSStNTE01NWFaNWxDL0FXWWh0SC9NdVhNZ01mSUlTdjlIaDFkTENSU1EyNHpZM2tXS09XNW41UUQzd051WGEybjh2aUF0Z0s4bUQzK3VKUDkwaWRRSE5La0tGVjVNR3I5UnNtcUl0NmxvMmp3eU82RS9uT0dNY2dTb2JPMWJZMVo1TFlaQm9VVnNoSlAyWDljazJ1Rlp4LzR0aFk2TEh6U0luSXlUMWxCUnRHUlNVa25FazNkSVN3RGxlM25WdzhzdWU4b0ZOSG9mQnUyWEtzVXlIMnJDc3crNlJScTh0WTh6RVV2cVNyNGIySnhMcGJEK0ZjZ0dJQXovRVRBT2d3VmUrZmRwd2RiUk04TWJBT0dKREhpd2FETXQ0QXY3Z2pFMEJYeExtM2VHaUlzVTNuQjNOaHgzUUl0U2ZXeE5HM09zdU9nRmdqQnFyQk9LL09FQ216RnNxZkN2RGRaaXVEeEQ2Wkkyd3hvMDVvOG1xdlFlY2lkZTZBYTNtSisrWnlmd05qZlhwMHVpa2dQY1h3UWpHbVY4TC9LNEFYQVlycDRMSWFaUnJ6YTFOaFNQTmgyV09zM3hWeXFMb2lBNEJ2R1VUR3N0aTU5cFUxSEdHQW03Nms2RkpTMjMrSjdBUU9WMXFFQ3hPckl1QVBFNUNGRjhIWTQ3b1BYL0tDd3I4Wk5XbHNxOHYxOGc0Y2tYbnUwb1ZXNTk3WVh1cG5yMWd5Y1k3RVBWUktUWm1BZTA0b1RJai9jbzZNY0p2Y0tMUFh0ZE9vWTNNWVVkUEFvS3prc2ovVEp0Rjl2ZzB0ditwRkdSNUhpSlB5aHc4Z3N5aUM2VlJVQy91eVVvcDB5YlRqMzdLa0szZjhlWUtMV3FsVjUrVGJEV3I2bTBLWEx5cXhDMmR6ZDZyT1ROWDZYbXRIczUybFgvWUppMk40YklNSEFaTkFIQWkvT3RITC8rMnRBVTNuY0U1Snp6VC9RZ0cvejQ3NGZiUWxJbE1WcnVFeCtDSTNOaWc0dXhwUzVQa0ExZk1mSTZia1ZQWStQMTM1RFpmMnREeVF5eXArRzZycTJxUnZqT08xN2JTSTM4aDJ4TnhWNmdIS1BCSHdJZDBBRVpqbis3cVdFK2hFL2gyclNMM2JSRTk1bDRIblQ4bmhPMTNKNmw5U04zWmhKeGZzeXptSnZSMlR1bHRRMjhROEpkYWZ5RTFGWno1dENXYzMwVUtvRDB3cFdPRyt2THZIRFdLd2p4cHZWNUtwNG5qZkx5cjZYMkM2TWxLdEYweXNyWTRBSnM1d3h2UjBiS0Q3dEFGWXd6dkpyeDJkU0tyMG9OUmU3UUhrcjJhSzNEZDh2M1N5VHFSbExmWEo4UUJ5S2J1ekxoYXJhNkt2cUsrQlFwejVkcS9pQlg5aXlHekNLRjd6ellhc3draGRZTjljMjRCZHdEcCt1WGc1WUtNSlZYa1VZbERLVDE1a2YwOUdVdnBPS2VwR1B2R2VqYTdkVFpkUzNsaHhLN0ZaUDRGS2VUc05wZ2wrTC9Rb2o3eHhJM3ZRcExlZURjSVVPdzFHNUtsdFVOODczMmtha3FWb1VlVXJhdFhPeDlGWTJHaHVBYlpKM0ZOZHdYUUpQOG9EZ1J1NHJ4RDhURFJJWEtaYWQ3MGJNR2l6Q1ozekxIUWNRWUs0Y3RrcjBEMzF3QnNKK3FML0ZqMGxGdXA2NHc5V09BdjdJaEt5bFQxejdJbEtGZFVhZXdrVlFsM3o4a2ZkWERTNGJ0TlJSdXREQWZSQktrTmtzL1JWZmhyTVBYd1lNSncwcjN3TWpJUUpHYXVqdkJqd0xONXd2dkl5b0lKSWovTjM3Wi9kLzdRWkxQVVBZOHZqTzZqbkJ0SFJyV3lEUWJOVnUxclFpVjVSbGpnOGVWc1ZqYTBFdkFiOHdIVFliUlN6ODY0UTlUVktySGlJMjhMZUt5MFJybkdZdHFIdFNPN1VKUDdZbU5aU1k1Zi9JU3loWmJ2ZWZ1SXg2dGdweWxVWTlVWW8yMHJQU2lOejI3MnJoYlptRXc4ZENkRUFBcmc1RnFvOFJBSCtmRnJDa09la2x6eEw4bnFmVDh5THNjQXNUMjlXc1FLTkx2Z0VLSTl6STN3NTJmcjZRcGk1ZHNZemZ4eHo0RmVYY1UyeUxpMk9tV3RZcFVTbEJpMUZvQ2piTGNOU0dmbWFOSGY4NE9ZZHZUdnZtWnlHK0w0eHBtcDBHOGc4VnF2aTJXcWg1MlY3OUJ4Ykc0TkcwRk5CUWN2dkZmejEvWlIxeTlpZWZ0WDZIRTdkaXFqcHVDN0ZuVWtNc3NGdzA3N04waHlIb0hJZjdIRnl4NHVjUkd0cm0wVXYwZkJMQjU4N2FBd1hTTjFRaXBUTkp3TkpmejBxTmVLK2E0MGdKTnRuTm1aNThsNURkSjdpcDdSK2VQb0REVzdpV0duSjg1ajhZaVFORTR6Umx6cUNSSW1xUXVxc20zYTUwMFlLZmdPTStjSVRqSllWaExYNTNRQ2pIenVDZTZWOTZkaEFXMk1TVGZJRE9hdzMxMUZOZU9tN1ZFSHlaUW9OOGtjWHQ4QllUaHNNUUY3ZUdhL2Jpc1REYThWbno4MUNaMXFacWUyUklNVUJOVGpyUkQ5dVpMb3dNWEF3N0c2Y1Z6OXR1OEM1bk5Od0dvRHhKcXM3N2IzQjlGVmVUZGpXRzhlME0rMlpVQWVyeE1icWtoNTh6QjRmZW4rRUUyNEk0bEZmTnlQVitKOS9HdHNvOVEzU0FjNzMwYXUxUS85RW1UekFWY0ppNWRRZzlUM0E0bEo0d1dPVW9kendBVVBPWDJ0WGtwL2hITnAxaHRHdTZOMURBNzZQcTkrNEc3c2prQWJGMCtHd0tVck9WOEVEelp0Y2ErZFZuTDZpdmJ6RElkeWxRTnZpMVQ4azFKMW1vQXhVa0RGQkVtU3hUSmp1QzZXS0J6VjZ0Ui9GdEE1RzV5NHpGR3ZUSzhPRWpwVlFJem16SHdXZHJ3SitEMXZmMHpmbEdhSXh5Wjkra3BhdDN5M1NxR0ZGUU5BMWVXVGhjSkNkSFlNWEpNaDhOclV5eWRlZy9oQS9tamJHL0tKUGx0RzhhSVZ2R1hXRFlxVFhQMHBOcHhncEh2ZGRQdXZqbm1ZdXZGL2dUa01jSWlCQTlJblRpWHJpdFYwWWllTHREZ0ZrU0svcGxyWkVxVVpjSXlvcFdlUGtMY2M5cHdwS2k3UEN5VzA3enJkcWJtV1ozK01rZFJrNEhjVG9iMjZUSFhtN3FveHBIaDB4dTV5Q3hlV0NIWUw1M2hRbW9PRk12bEFqaFdpTm1ocVYzWmVTUDlOdnhFZUdNdi9NSzRzcWdzVUFuV0w0NmF0ZjJVMWJZYWVnbFA0N2VsR0NsTXIvTUNpMGxiVlNqNk9SVjBuc1lhRTVSN0JTd1k2bUV4Yi94WmxFU1BQc2VHb1k3WnJGZHlvakFJWU0wM1kxSUFRVlNaaWpzTGF5REx6YnYxczFDbnBRcXh3RUZ1OG50dGVrYU5OU1VKbExTRW1qUmh3ZDdWd0RGNkhpWWV1VmlwaTIvZEY1M21GQUVsc0dpN1dnQTJZSXBSWnpMQ0g5UkRtRHYrbFFDN1lnTkpvR3J2dXBXSnE4R0hGSmdHNXBCV3lBMk9rSTcwem9zWlozWnU1R0dwR252OEt5ci9WVGxlclFVbHlXV01DOHFObVA2NzA1Y1kwVTMxRlgxRVlFRUdZQ29LbmgyWjRIdTRXVkFWMFNRMjdySlAvR2dRUVB5L1VlSUdLOXpvd0xhZ29vcVZNZ3I5TldwVXY3OEdhdjZEVHJ5M0VFTUNBUDZvcEkxdzYwRjkrVlhPaWN3ZEhBYkl0WUY1MlFDcGZZZ1NFV2s2TnBLVHpSSThOSVU5MUNzU2t4SjI2TWhnYmZlYlB6azN6Yk9FeThjYkl2MEkycTR4Z0pGWWYzUEY5VVBpaGRlbS9lT1pMN1ZFdVFZV05DaUJRUEMyL2dCK3QrVDEwb0ZqZm1EbWNnR3p3c25jUnRITW1MS1RhN09ic2dzWG0xY2ZBeFdLdVJBSXQ2MkpwNGg4Ym13STdwaS9EaDdQenIzMHJoS0FTdmpyS2N6R0dEZkwvbUg1a2VxbnlSK1FGdmNCUll0RXNRQnh6cXVDUWJmTnQ2anIwaDlPZUF3cFlscUtHamlVdkJGRVp1eFhFR1NSUngyUUJaUG91NEM4bnp2R0xYVnRHZ3p2K1UzaitGQnFjWDZIZGJCcmN4ZEt5bFNFWVRPSFVCVVUwOHJqTVlpek42WnFDVnhEY0tBV0ZqaUlzaGxSUWtybDRDWlpHcXkrbkFacUo3dlYyQ3YzTVdQY1FmZWhpeDZmd2piOXdCR1BDNmt6SHFWVU9CVGZrMWQwbWIrbE1MYmdsYkRlaGtOdnVCdEgyS21RVG5hcjVLR29veXRDNFFKTzQ4Z3JpcDJKNFJDZlh4UEg4MlprVm0zNnR0MEVnSy94SW10Ni8yOUYrYnJXSjlMYTg4RE5yNTJTalQ0WkJIWnRiLzJVcDBiR0p1U0Z1aXduS0JsMXY1TzJJcGJMZUFWWkZKV0ZXL0QxckZoUGNuaG5yaStpdnZsa3dpYndYMmN2WlZRR0VNc0o5aXR5d2owQUY5MmdBZGowT2ozeEVyclh1aC95cjc5aVR5N2l0dkJjWEZzdTUyRk0ydktKNzg3TlZSRlArNWxXNFFsWE81a1NFQ2Z3NnFKTTUvNzBHdUZFNnlWTmlWTVUwU2pHdEhlOUxwU3JwUi9FcDNhV1BTUTBEYVNWM2ZwL2lJS2UxRUhqclFKdzFSS3BGb2E4OE81bzVkem1BTkhQTy9YRy90SG94V1U5ZmJ5T293ZUlNRm5qWlBYc1ZtaER5NTRXbE90eFlWSU1udjR3bURVUk14NDhob3Azby9Vd2lweFIxNGtvdW5IMEhoMDJlYUFkTE5zc1BGUEZtaU5qR21aZWk3ekUyTHhpN21xZlFBMzRrVUxqckVzM0JLQ0lNNk1TMncwbWVqL0ltQ3plc2ZwcklmTU9aUkpYelU0MGgzRjA0NjJ6YmVwYk5xc2ZjMTg0cWFSSG9FYm9kRXhwK3BGaGNTWFJYSWtzQmpxTm12MUhiSllheWdBaW9lOG84d0ovRm1QUlpYcmFZSVlQejNReXY0dktzM0YzSERKSXljazFEVmhLNFRMS3cvUnZDR0Y3aTFUb1VHdnBDVXRuQktkT1VOZmlHa2hDMTNQYngyYmRabE80NGcvRlhCZzJwMW1URWR1TkEweFZWNk9jLzJKTjhzT2hwaVJVbXJGTDRjTUxPbGFCZS9Qem9xWXJtQ2lzeUgzUTBoN3Q4bzhhQmpaOVp4S1BPSHJKVzU4UmxwZHVBOFFTOGxJWUg0SnNMUDlQaFNGVXJVQys3NGRBVW5XYklvaUN1NnFHV1FGZDVhUllvaWRvWTJ6akVOSFMwdEU3WVJUaWdKSnVXQXZMZ0RtUW1jYndKd09wRlFTTTVGcGYrYUllV0dEUklUNDQ3QWZUS1BhTktuQ0tQeXBJY2xleDJLWlF0eDdFSFNVV3ErTzhxamtPM2RhN0hDTC9LSFNXVVY2ajhVY25zbFE0UG0vWlNTTXU2ZDFoTnFCVngra1BYZHJBYXlmOFN4ZEM0Q0t0Z2I0Ny8wTGZNejFnTkFDcWd4Y1ZpWHg0NHVlSWJWUzR4czNnL056QWFNaEgveDdHU3Z0Z1B1WnBYY3AwWXFsMytLeTgzY1ByMWxBU3J0YTVJaU1NRjl2NWVmMHAwQ1k3eHhFbE44UEtXOTZXOFdTUy9BRjI3RUNlMEhnT3crOWFSRTNxR244NzZWTFg4Uy9odld1eFhxU083MzFEM25sT2N1eXRISWFlV2s0NlFCT0pDNkc4eVhvN2VnZ3BFTGZNWW5VcFd4ZTVUN0tJY2R6QXBKeVRpdUc3NnJsU3BndHlFRXo2TmgxbytSbExDamlSTTJha3M0bTRGVFNYMVpaVnptTFJZTDFjT0tocjFHb01vMmFCd2dCcWhCSHJSRHVnaVl2N3R4dks1V29wKzlqdHRkRk4xd3BnNWRZK1dNWjZIUnhuRXJib1BwQ1VDQXk5QXhnZ1ZGK2dQSGV1cWhKaVE3WlZHeUx0UUVtZ0JUTktyclF5c05pYmQ1WmNwaDFRQWVmZmpxU1g4enV0WVlheG05MTZZMFV2bFFjNkxobGErTXlnWVNwNVZaOXVFUWpoTGd3SkxGQW53d0E2enJ3bXFpcnNoQWQ0dVNVK255MGlHeE9QMW5sUDJyVk5zd3dFdW1mb1Yva2gxRHQyblJxbGFOMnlDWm96aldvQ3lCS3ROdmU0NGZrYXhlcEJOQ3EyclRBRVVGWmZvUjlmdUcvK05zWlpSMng1MzNhQmdSZUJKRHo4L09sZ3FYcm9lUVZCbjlrUmZDTEhpR0VkZm50cHpkMEpHVHN6OU80eXh2VUw1ekRqTE55VGNPSnNBeWRHYjdibDd2MmVKZWlWRkdybEVvVjc5N2JrV3pTbDZyTTEzOWdUMm05YWdPa013N2oxbVZTQ1BjSmFhcVFROUVHQ2sxSy9WckRWZ3VkZHMwOE1XcnlicHRwM28rRTNtWWxjZ2w1YWIrVkJhd2Foem9IZk43U3ZpVi9mVUtXT1Q3dXBxcS9VME5JeGcrY3FLaTgxRUNicW9oMmIvNFNPcy85SDBtWmhCU0wyREI1bTJmWVRFcFJRZVk2N3puTmJKV2VsdkJYUWNrVS91dnVGZkcwaGwzamIrUGhzR3BTYUI0MTJ3NnlmbTUrS1VhQi92T1NMdTV2VXpsR1J0WGdMZzM0ODFWMlYyWi9Mam9vcVVLYVRGbE5QbXcvQUUwQklGaVVtbGdHRUtBay9ZZGdxQ3JXV2JIYW1YWGNyL09wdlFHVDNYMGt3UVVzSlZRMUdCUFdrd2sybTNOVVJ5ellQc3YwZ2g5bnZTYjBBMS9CWWJ4ZEFJT3NhMnhBaFJDQTFNK2gxWTRjZ1hDODd3Sm5qZmt6S2MxbllCTmhwSGdkV1AyOTlrUDljQjgwcW4rRkwxRElYaEl1VHlLV1FQa2kzRTNJZUl4RDlaOVZkOEdhUEFmZGhVWW14QmRJYS8wTTl4K1phTU90TlgzcUpNSjJBeDN5WU9vaWV1c0pBcmJaQ2l2djFxenRpUzNINGpUZ2xqd1ZFekxhT0FrK3Jrc1BmaDdSYjU0V1pLb0tjNXQvVDVDRjJ0TmE5WTJ3YWJFc3IrSE84UUhaOENOWGNvbHFhYTNPZ0RLN0VQWWNqN0ZJbWd6YWVHYUlmYlFuNStiQjFyTlN3WlRLTVVpR1MxZUlJSmlTcm44YXFDTjI2b2VIQlNDT0c2TWlvNGZROFlIaTV6S0RJdGovTG9TM2Q2bFVJdmZhWmZBcTY1RHQySktLNlpBMFpCMXpUTUdXV0lyNW1oZE1yak9YUUVJRjZPZ2pwb0YwSGZyNk8wUlVPM0hPMWhSSWZybGNQTG9QeTlLdTVzYWlFSHdXWElwYVB1L01yK1EzNkFpZEFyMzlWTDVjQThWSExXaWVKYzltenN6Rk8zRTVVQVJtMWVac05tclNLMlpRdUxTRFlxUXZvbHo3UkEzVExzdEZwM2ZWL2dFam0yNG9YU1diR3ZLMjBKbVhaTGNIUTF2NXJqRWUrVjc3c2FiVVNyS04xbXBFbi8xd05PUjIyOXJReDVRbVB0ZWgvamIwVkJzbjdwQ0t4bzNQeEV1TlF4bzRiQzZ4TnBCVjA0eVRNVHpLbDdkcWE3eDBWM1NXUlNqTVRqR0pYZ1cvNWliZll6Z3gwbld4M01qb1MzZ0Jyb1NSTkNvcW9kOXdRV21NTkRHV3BzalVkRGdqdkNyZ0RZcTBidmZaSjYxY3ZtK2pDaGliNk81aXVtTlEzYzlyZktZdGVDRDJxVGRpTDRwTW56Vnc1QWt1eDJFamZOQ1d6OWwyM2pTRUdBa0UydmhRK3EyK2xHRFgySmlBN1lpQWhLWEdHTWFQajJoelp0MGJMRWZ3b29XTzZBWndMWlRLa3lwUTJUamt3YTl4UVRPRGJGSlo1L3FSN2w4Y005UlY4c3BEWUhpYUN5RGhIdVZab0JKbkZoZFZLaUp0V3RuSEpiRXhYb3lDanVlN29RR2g5K2MzcjFSWm9KYVlUaFlOQTdYZ3JaRFNhSGFYVUtLbEsvMHh1N0wzR0Q3ay9vT0lyT2s3N1dOdEhGLzZOUFl5ZENURzRySGpGM2RVRXpsRjc1TnlFaDFjck1YMVRNMnNxdGpjWlpvMkIzQitGK0xURFFGUkplblNteC8wdmFoNHEweEJYSXVjc3E3d1grc1FyZW8xWUM0cWMzU3pXcnFkTkxtVHdiTEJDMGY1dGtTR3FKY29qK0pnZnFUQUJFMWhGTlNMQldYOGFQa2x2WFZ0L0dzUkJ3VHYzeDdQOFdEaHlBd1BjeDhWOTM0TnR1SDRHMkYzVkZURUtnR21MbG8xUm1yWjdxZG8wN3ZyTkpuVWhtaEtldmQ1cXBoYm84bnh3UUx1MzkzdXQrMFhJbDdpdE9jNFRVYitacEIyS2F3NlhUSjd5K1lKTzFnVmhJd2U0TFpERkFZVzlGdHc0YUhvWmQ3V1dHZWtmK2xWZFZDZGtnc3ZBemhsQWwrUUlpNmJaZWhYTkpmSno2STVCbGFLb2E4d2U1T3dCRnFxVmRVelpiL3orYi94NFluOTJGOEJLU3pJUlFjL3RIOG9lRHhVVEp1YzF1ZnBwdkZYSElqYlF6SWg5L3NpTTEwUkN5MFJJOEgydG0vMktRNUNjazI5ZUowNzdDZ0ZPQ002TndsMDZlck01UHM0NDQ2YStXWHBpQ1VTR3NROXliNVk1a1Q3QnJWQnpKc0hzSkFYd216SjJ3YWoxRnhLWHNCaFdQT0dTNGJ4T3JQUGpnM1h0djQ0Y2d0MkpyRUhYSTJzLzBYc3JmMVM3cVV3eDUwMWFncDdWcWhUUktjK0p0Q1ByMmVoK1NzY3lTdkxjeHNvZ2pwYnhaQVRwOE03RlVudTF1VzdaSVdQUldCZERUeGxRd0F3S01KVWhycUFKZkxzM29nRTlCRzRrS2gxczh4TFdHV2dVMGZJRlp4eHpNNWpQODZxaThHbFhMS0xTNVk1Kzd0M0pvVHMvZTZMVDdNZVpPL3o2QTFDN3RaOG96M0RjZGkwOU5RckQ3Nm1ZTmhLT2F0L1JETTV3Y0FtbXpxK1pFaDVFUnhYYUFqL1NaNEwyaEQ5cXVmWjZBdUVRaEExRk9FUDlFRmt1dkFFdll6Wk9oSTBoV0ZjSFhteElsU2ZsVUhPclNPV0VSbDlRcEcyYTVsZENJRkk3SVNQcEtnSjBEb3YrMldNdExJcUFsSnFYbnRSOWNmNTlGZTVOQ2N2bzFOc1R4WXFlK2NtOEZhYnBVLzNkUFN4N0tLekg0d0NqaC9SZ1pYSGY4anp2N3JCdFVtbUYvenFWRzF1SHBNV0M5by9iblRXVnpZN2ZxdjdWaEp3czNwZndBd1JpdE40R3U4c3dremhzalB0NjJvRFoxWktPTWdyVlMyblpzeWZrQ05FYzN3UzE0MHJ2TVlRalhjNkdSUlVzalRiclR3cVJDVFpETWVIcThlejlTZStiQTlIcEQ4UUFQbTJlY2RRL29CUFlHbzhkK1lqYXo2ckpsbnErV2xFMkJadHIzb3p4TGVnWVJqOXFLWWFkMmQwNW1nZGpvbitDVThmVzVWK3hHbGl6SlIvdE9HQ1ZHSnVFVjIxRlNwTEgrK2pvMjRWbE1oWG9nTnVoM3k0Z2dsYjhhUG9IWnFsWlk1ZDdTTEt3cm1HZG9PemVid3FjeFBxVzlQbG9pTG5zSVp2cjBtdGhwM0xOelQwc2Joa1hzNExIWTJ0RmpjcnJ3Q2YvR3NDVG44UkN1ZTFKSkFGR3FDUUJvRDJOUkg2RW1QOUlBMzRUMzdXU1RXMXV1dWVoMzF4NE9EaTMvSmRJM1dXa3NaQjFCRE1ZWEx3M3VhVkx5WU12T3hBc0FMMXk2cTJaVndBeVZnZHI3bEdvWUNld0g2Nkg3RXVDaWp2OXRwVXA1UzUwV0lCL3N5MGF4NGoxNUJVZ2ZBV3RnanhLYWhvYXZ4MDRjOG9sSXhTSmxUczBqVzk4c0pvT3o0UDRMQklPd3VZUlhtSzdhejlHYjhkZkJxcWhJdytTNnhBMWtkblkveWsvRkxxZ0prUVNOZWpsTXpxUlg3TTVBNm1oMFpXK25NaVNHcnBOZ3E0cU5UUUVPNkpBeElKTEsyemRmd3dOdEQ0Wm93YktFZ3VDM1lQQ05WQmJCMEhBQmxzYUF0VTNnaWI2MWVoOG1zbDBVU2ppb0ZkMFJCVm9wWGEybXRLbkJXSVRJdWJtNjdOSEVCZE4xa3Q3Qno3aWpBUDBkcmJEa21XQ3p5bExkSU9rV2pNa0U1RTBBYUJtTDJ6MVFOcVpXR0Y3UUsrbmFCQ1IzM3VXY2VxcUJaZHE2QmxNZ0hsU2ZoczduVXBBNzRlV3o0L1MwTjJNdzhKT2NrK2loSzE1UjJGTjBCTWZMY24vZVhCNUZBM2dLSlg2QlBqMTFSdmNvY3NSQ0JQR0hpOGJPcCt0ZlBacklOUTdGd1F4VG1DVmt3TXExYU5CMkxBNTRDT0R4dWl5eVZDNzNKTXhTSElQazYxVUlORnhmZ2Q2aXYwcUlxZmpPU05pWXk5UVJITVNFSlJaNHV0MG1ucExDSGhTU1Q0YVRZSUdYdzU2TktkTk5lYkMvcDFZekoycGtKcjhad2REYkx6Q2VpbUh2bm9vaEtIQXlCUkpTUm10T2w3QzZQeHh0K3ZGa3htdk5Qd1pzVWlFZE5sV0l1Q1oxVlBZWVc0QjY3ZHR0dzdIdm1rdDNzTEpTbHUrVEZjeHI4b1crNVRmQ1NkUmNmRk5hU1p6UWNaL0p2K0k4NFFkaWpnUTRSRGlwZEcvbDgybW5jUXA0MnBkRG9uMURCVWFFeGwrVjc0MzZ3dFo4dld3QURObGEraVYzclE2N0pQSElBclJrTzZMeDA0OFFtQXp1SkFRa2tYeGxVZDdxaHB2Q01abk84QVJvdGFhS2s4WFRvSVFkK0FKbW9VNk9XU0VXaFBKSzVKWG92TmZqSTdzQTZtSXMwWVY2elhBTFJCT0dNeE9lNWFMQ1BkTU5uM2ZjTzZHNVFzNWdZNFVob0xRU0tFdG9pVGZ6OWQ2YUdoQ0JEK3hIN0ExcVA3ckd2Nm41L0JCRDI2RnQybVFqeUdFSWlLWXRuU1ZtQWF3eUV6dVUrb0doSVRxeGsvZUJicW5udC9TZGQydmZUNmJZVWJreStpQXRXeWVrQ1lZaDNaUEZFb2ptakFlczV6Zzk5QlFxVVRzVXZNY3NiSmZMeFdXdDYzZEFZdnRoUXB1L1ptY2VVcWJkUFl3Zzc5cGZMOW1sb0NmbFhlZkM4L3NiNzhwQVZ0aGxBbWtlMG4vUWxQUFYyTTBuVUIvMVVEMlpoUWRteE93elBCTWRkWUcyWFNXdUlZZ2JXazFxWVM0OHc5dnU0ejRiaXc1cXFtc1JWbWJQSmczZjlaNUp0bTFFYnM1QjJoSndDT0o0aEFBTG5teEVuZzJFRkV3b2dKMzBzakpCY1k0R1FHR2wzL3c4UEJGNlpsaElZSnJudWtpUHluTmg2cEFlRjBTVzEvSFFDcFJUYmxEMUdIRDN0Rld6VDB6eThoQWs3dktPZnhQU0FOVk5tcFNsMWh4K1dzZ0pRdGgveU5jTHNOUnlxcGViRkQyckk3M2tWdVdBeS9TTk41WEI4U3BkYWZDN2FEZmpUbHJ0NDhHZy9MTStJTDlDSUNnN2dTbVlLQ1d3eDVWd3YyS2lyR09LanhtTkRncHBPb1J2QURyQXQ2S1hEVkFHSHFueHdjU2hhNUZuTXlTVGtGV2psK0Zma1VpdloxOVZGejNVeXdDaVM0dG1PbFBGa1p5aVI0SC92SGJjdjYyV1NaM1lXNFd6b25iZkthaEc1UUpUc2ZHbW9JMXN6R2UyMkJQdEUxMGpFSUwzYk1MbUpoT0RTYzF6WmN2Z3RHRjdpT2phQXVENWhtU0ZyNlR6RWJWTVdNbEliTFA5dUJnVlNjSjJTS2R0MzRrS3lvZlBScXFldjM5eHZBZlFaY2h3VXpXcXVRcExjUGNDUUVFVHpJOVpob1lZNDBBekxWNERuTkdxNklEOU91SzhiZXJIZTRtQko5YUJ6alBpa3NzdTVsSzV3MnU5V1czUVk2YUdGdEt5eVdBUExEa1lvdnlUVHppaVFCbldoOG5GWVlRcFcvUFNQeEo0anpQNVNOS3JYNUFLRDA0Smt1akt4RDFxb3lYM0p1aEhDak5YR3hZR2s4S2Y4M2V5c2p1d0t5V1BWOE05bktUMWE5cktaVkJHRUJoeTF2aVhTL2ZBc1Y5MGpPWm9OZWdRSndhS1dqcUhRaFRwVmE5bWdHaXl1UGEvZHpKb0pnMUhsRmRId0wwNlk0SjBhVnBhY1NtSFJzck5ZQnN4eGM3R3VOTER3UzNDNjRKMnk4eW1YWVhscUdJN2g4Y2JDbHNEZ3EwWTBsOHJsNENITWlyLzE1MWNML00vc0IrV3MrSVllNEJoUmt3aThTMVdYOThjL2tlMWpBaFM0N2FoaVI2UGttSWFYa0Z0bUdjVVZUa0VEc1BoRGQ1bnhGWkFXK0hqL25xQ3VrODIxS3pLWkVWUTVZNTFieENUV25DU0JIdm9LWTVyZVpReFNBYlk4SkI0Y2hXeGhPWlJTeGF5TTllaWpDYVppc2szNWRTeUdweXVod2dLZzB0ZmJzNGdJNU5sUDFSaEVuMWdpOFhTTERXd1JES3N1VzRsMk5HSExtalRoQjJvSisyQTk2M2VCa1pHN0x6WTF5anRVK0FrQ0xiRDczc3hLTkRXT2x0cXZiT25PZDZYYmlnUkxjb1lnVHlGbktxZ2dUbVlHRWNqUnMzN1NERi95VXRFQi9VbWttOVZPR1pRYlZ3dXUydkJJL3RGZjlpUWswYUlvTTBpdkpBemxTVzdtaTFYQUtZTXJkTVdrRENKRVVkNzYzK1hzZzYxN0RRUDNORjZCMTc1OHM2RytLMlk5QU0xTVlsU1JBa3VVUE9uK3crK2N4dE5yV2w2ZXNPSnpPbVZvYklhc2RJVWxhNUxvYmdlQXg1V1l4YU5reFY1LzZ5cjRYb1FkVHdUVXNNcTVOSElFdDVsZEI2K2wreDc5T25iTGtTT05SSjBPRFdDSDZpZ2VuUFNoM1hPSVNXa1k3YzlsZ28wWm4zRGdIVnFSaERVdytDTzF1eG1FMmVkL202ME1WakZoODAvMWhZTUJ1YXp4OHh3WEk5NFlNcFptaW5GdTNpZWpNT1BMZExzbUZEUHJXci92UTFHY21qdFk1QVovTkc1UFU4S2RmS1prek9Ba3JkMHNMeGJZYXRPTUNQbGkwUm9iZHI0dUNreGM4RVlRWjRROUtyK05yWXEwU3J4a0NNemxidU5OS1dZcFVoSGdWbisxejMwNEw3R0NPaG1aVlhSV1lmOER1VHNKQXc5NEJhNU41T1JlYnNkYlUyZHc5djhPbVdNN2tROGhISFdPd3A0U3NpRDZsV2F2QTlwb2ZLeVZMbTU1ZGxQU2FleFppMS9sMTVnUmJxWWFIUVV4bjlDdmU2VkhQQmpQOEtWYnVmTFIrRm1TdGlkM1lLL1g3RXJ1eGU5N3VNclA2VlV6SE5BbGRaQ2NjN2F5ckNPT0pnZ0N5dzBjTkdkWCtGRVpuZ1hVbFhqbTNJNEpzUEl3ZVZYNzhUZHF4a3d5YXA5RVJlaTRyejI0UFBxTTVsbXVoNWlRYTNCQ2Q0Q0JGY042ME0zMG01OFQvcURHVFJNdHJReVdrd0toME1QMDNNMDdnbjRHaEQ4cGZWUjdLNEdha0xIdUw3SEllM1ZVMHFpSStMTEpHdGlqd0RKWkFTRm04Uk9jWnJSdU9uenlpZklleFdNMVlmeEowcHdKSzJVZTdJRk42cnR6VmltR2Nya2cybmw4RDJPK1hzemt3MHI2bFh5aXVUNzBUZjRiU2YwZmpjQS9OMmhZdW9ITnZLbGFOWGd4VGd3VWVSMkxzdmljajFjZEJLZ0dWUityR0FWd1R6c25oU0VaMEFmekpLMG5odUIyTGhRY0ZtZnc2SExST0ZXWGdkZHBpS0hLQ1RUVmE1RjUwcytEL1hTUDdPL05UQks3YUVFaTFzMnVMSXJDRE85RzhFUjdybDN0dHZ1VGE4djVtNFBIcVJ4ek5hVlIvbDZkYlZucGhvald6c1IvWnlTK2dTZFpxK0VuNmg3NkFmUFlVczlwM2VxVk13L3ZnZ2hPN3ZqQ0FXZ25HUVFla0RIdVFPRk5DTHhuRDlJUmNPTVdudWxNUGg4eDF0Vm4wQzlVekVUTEpkR3poalhGYjZUb0toS2lzd3BrNEdPaWcvU3FpS3JDLzJ2Q2VkNUJtZFVQdDRzU1V3cWprdUY5VndCcVY0T1kyK1ptM2lFSThETE1pTmpaTFdvdUVMS0NMQlBabkxLY2xNVm9hSy95NXVuN2V6cWIzNkVrbzJ4d24wQTJNRU5DODF0cWJpNHBhdTRidU9nUzh3VnN6dU9zaUVxZnJJK3NhRXFoYlYyZmxrajhEU21ubXNNNkc4a1JibjBya3JUY1FPUVpHRUVpZWFHaXpMaDZySGdBSEV2SWJjdnNpcjVYVEtTQmdHc2ltNkY1Y2pkZUZKeitiYXJEVDNMZWFPV3hrc0VIRjBqTDAyNnE4WUlHbzBoSWdDNEwyb3lRY1MrWC9hL1B2dm5Nd3Y2SkpxWGJDZjNKMmc0UHFQbkduWVpJcVNPV1Vkcis0N29qS1h1UmNHYjZTZWFkRk9Wd3R1YnJJNWsxNHhpMkJpaVlKTVhWZ2E5cHNTcHNLTXRPZURyUUJnQWVHVUo5cTJ2dDVwelFYRWJBUUtBWTRkYlQ5M2pZRFUrb3gxTWFPL2luQWc1UFBWUzAxa0JJSXl5Nnh6UjgvOWZPc1FCbUp5NGt0QTNpRXdzV0Z6aHh4cnRLK2RmVXhkYnptWURPL25PTy96Ym5lREJBV1VYY0ZQNnlIRWhaK0pjYkFpTVR1eDNsd29za29FRzVIWGo4dTRGM1BIZXZOSlI4Q282QVJzSWczL1NhdFJ5ZXJ4eGZkR2ZRU0ZpZHJab1h1b1I3UDBOcy8vSTdvdUkyc0RJeFdqSDlqSlI4c2FPcVRDQ2p0RHg3VHdVbjIwTHVyNW9Ya2NaOEdhZk9FU2ZXdVJVeFZmaW5RVFRyTis0RXk2VnlLOHZtTTB1MjJSMnFFVmJ6bkM4aS9KUmcraWlBak9QVUpxWGtJWmE5MVU2aDN5WmhCMVFZalN4a3VMbnJtdDB3OXVlZTQ4SXBlZ0J4M2dnT0VodE0rNVJsMUhvdUNad2J4eHoxeEMxamZJREljcm51RUh0VklnbmJJN2tCazlXUzdNZmFacnNsTXB5Lzk4TkN2VENEWVRXYkNyUWFrOXVxSEpXc29lMVdJaldob3d0dStCT29pL0w2NFR4MGlITEtaL0RDeGRtRTRFcGlUYm0wYVlIT2pmZHh0RGI1KzltVXRKTjIxRVhwZFE1M3lWbE9hd0w5SThVT2d4N2RvdndHc1R5UWdCOXRTMFJZUXoyblQ2Y3RlZ2hmSmZlWko4cy9QdlJXaHJhaExxcUtWWG44czdHY3FaZXVwUjV2cjl6YkxTVEJUTHIxNlFIK0ppa0VtZC9YZS9Qalg3bSt0ZUNGUkFzOEgwRDMxOWU3ZlpGZDdud1hQbm1XK2YxN3ZkajdRMlhFZ2RnWGxyVXZLWjRWZFZZM3Bqc0pQU01zanNMajhHTjcrVWlITUFFZm16VXN5cjkrZG52RCs5a09YTU5pazdwMDJzT3FIQkpXdktQdkhTRkY3Z2NFYjlNUEFnempjbE9WKytjUTUrTVhuVnpyUElSTC8xaHFxWkVCQU01bk1Wc1kvYkFicElMUm5PWWkvZytoY2lnNk1qaDdKMFJUSm5xSVhUVTJMRFVsWWlJaXJVOXFseDFsMnJhaDlHNUhGVkZSWkZwdjM0M0hhemZuRDRrUk16ZHl0UDdEOGJOZXNoZlJjUG1ZWUVpMnBKbGtWVkhOd0ErdUI3VlNQZUFndWs5cUVhK0Qxc2xQeE01WStiNURiYkhEU0p0UjN6REZtV0ZIbzg5aVdZT0U5YVdaM0pWQ2lqc0NTN3FhN3BGKzBJZTZpazRPdXZWSjJyU0NqL1FRYzRxSEh5d1BvbEh5a2JkYTltVUdVRUxPRGJHc2llaXQ1SWFNR0NNN2NGM2lCMnNIS3V6Skx2Y29tNzJFeENjZUJTR0E0U1hXNDl5N1F3K1QxMVhBeWZWWncrUHNOTG5KcTJocGpML2dONU1wWGtRRWdIVEJqZzg3VTZsKzQ2ZmZPM01rYVlrTHF1R09nVTVIVHJlYlBxNU9IOVlTM2trNFlhczIzMjBSTzNtd2FkQk5adGp2YXFjVVZrUEk5L0VBbFJzUGtFWXdNM1JNR1d0dG1DWHU0RXpBRUw2amlDaVJpM0Qzbkoyc0hSVDM4WXljK2pROWRESUJQT29iUE5tU1BiNWNMRjZNR2hTTjRrWWlXdlM0cGE2blBGajY3ckZTcGdqYWg3SkN1c1R1TW56TWN3UzJCbHdzaE95WEg2em9yK1ZFZFRpcVdIaGNGVUZMbnFyV2RKc2Q5Y1pBUmtMZTQ4bmxtRHNyTFVVTGVsY3N3bXlvcmM2QXdNZFpxV1Z3Y1gyMnorUHo3aWNzbVRxcFB0N1J6ZmpmTytQaUdHOHBGK1pvR3RUWC9LMEVVQnk3L0VzYnhhcXMrQ25xbWs5TC9tZlNreHRBekdHL24rWThjQ0V2R0RBM0pqcEpSQnJhZFRKb0s0TVN4TFJyRzlwR2tDUTRmeVpxNDg1U1ozMmNWeGRUZ01JcG1XeXBUR1ozTjg1cnJQUlJYMU9RNllmd0w0K3dOZVZWR0hXZS9QUVdGYW5FbVJhbVdmZ0MzcmlRTVhOOCtWR01ZL0dvT3Z5MXUyZkJ4eElEMEhUTjROdkVLL0pSR0FwY1pXSVRJaWtHanRna0dYS2UxS1RHekVZUEFlT1NRdlh3YWp1cWZTMDRFN2dmYlBnQldDMllMcVZiSjNjTXNueUxLU3d6ZFJmOXc5UkFZN3UyM2tNdE1Vb0FmUEhwdVJNQ2NWSzE0bHc4SlplUWhsTlRiRExTQVNIR2dhRmljR0tWQ3o1YjlHZWlHSS8wOVBVOFRNSTFKUVR1RVVweG1rK3ZwZ3M1TWJRd2FBOTFnMm9ySVFPQWhXTDhGZVlYOTArQ2MyYTlvSzk0NSs2a29na0V2T1JubHE3Q2h6eTg0RnJxRWNwZU1HZXJidXExQ3ZlREJTRXlsLzE4U2pRNmdGZDJRUjJjaEFNeDJLOG1HUmdkbHJjUjMzejZXQWg5cnBjQnZCN1RiMUpPS3NvWXlBZGhpMzR6SVp3Z0tMVkRHZkNVZFpUYW93T3gzb3R2Q2w0Zkc2TkMwcHJydlc5RTlkVktld0EyRnBDZUVBeHY2S1RGTXorc0NIRndhK05UWjVyZmJpRjRSemE5NVZSTEpmaFIrOXVlU1R6aWVFa2hwTjE5RDBJdWpGZ0ljTzRjQUY2YjE4OFlrY1pJRzlhbzI0MlA0aDR5QUZ2eXpqK09Nd1ZBYlJpM2o5ZkJrUGkxaHdXdWVWYmJicU02QTdxUVJUYXdBc0RXTDdPWGVYTE1WZGx2YmF6VUMvS0F4UlVDOUg2L28yOGk3TTlERFJYR0dhQjBpaCtKS3JncTdlYUpFb2ZmYktyRVNZa2t2SEMwV3VIbW95bUdWUU9OWU9PbUVOK1h4bU5WMnlVVUtoRE9XU3d6WlNmdzFmaXRZYlJDRlBnLzR4QjFxQStJdFdZNUdrcnljd2Y3REMydTRHTlNsaDBkODdGV0RqSnpsdVJXSytlVFFzOEQvSzFBOUFBRkpMU3JhQUQrWmRtQzRjMHhBd2Rkb2Q0dXlPc29KL3E1RzFoUnBiSU4va0tzY2ZOeHpkOHhTY0FZSzZyQlQzV3ZHS1RaOWovTjdMRWNGQnZqOGpoM29aMzlkWENVYks1WVRLUVFmY29Pd2wybDJTR3ErK1BaK0FlUWlRbU5NZEExTkFHWjBYUVJxbmNydkQ2K29HbWY4MTMyajJ2YVlOVHpWMnV1aUxHaS9Yb3B6NWZnMFFrL0JxYnNjaDd0WS94bmErS3RxMHo4bnd5MmZBaTk1ZXhWMGFFaGZveXB1WTFQM1dUNGxjNklKSGZLZXFIODdwRW9hRjJIYVlkTWJmZC9KWWVMZk1CRW1zRytxQTM5bUtweWI4Z1dWOTYwL045bmdtM0JBY1k0aDRxNFM4TmlkYkREUkZGK2s0Y0VEWjRKZ0E5WTd6OE16b3Q0TlZpRUhtMTN6eU81c2loQ21veC9oeTJnQVhOd2xPemxJeDBVS2ZOeTlDbFpRY2kzSWVvN3N6U3VyTUJ1eWRXMnE1UGxleFQxSWFLV3YvUkNDQlh1bFlGK1FpUTQyT1lzZk5rbmNKOEM3WDFuYjdZOWNFZ0FaaDZFSzVXRVVGaDhBZ3FXNDNQcHJSUkNxeXlLK0VuVEVBYlFKbWkzZVVVeW9wbHpBclU4MVhnT3J6UkRYY3A4L0hZYnc4MjZJNGp0VU1uNk9GcUVFM3JLRmREd0JyTWkrVHV2MUVIRFE5SHFXZ3BBTUlhbmNvV1hCV2N5ZXlNSE9qYkFEUnJjcDNFdS9hbHJLa0FCSGNyVzl2RUNzanVxcmFXZWYxd0k0WllIV0pmUVJpWHE5VWdiZk54b1grRGlaay9CeHNEUm4vUTJ6K3hyUXdwa3YzbXJBUC8zNUxSSWFXUTZpMUk5SlNDclUvUGQ3Q25tMmIvaXhqa2ZTWFl6bnZOME0yY3ptRitmZHViZE5sTXgwVENuemNYOGxxUVFoLzZZVVJ4ZjJrOTY4dTB0L1ZBM3J4MGFXbGIvdVpsZmJpN3Y5eFV0cE5QMnVReTBpdk83dkcwTDF4RldsWW9MUEFWSDRtcFFUTWd1anRnV3RJcFlpNG5lR0ozM3dSZXI0T2lGUDcxVTF0bVdlNy9yMGRuU0p2aitkU0dONERrK3JMa1pVcHIyS2U3ekdhcXNmLzJRPT08L0JEQj4KICAgIDwvQklSPgogICAgPEJJUj4KICAgICAgICA8VmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I-MTwvTWlub3I-CiAgICAgICAgPC9WZXJzaW9uPgogICAgICAgIDxDQkVGRlZlcnNpb24-CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvQ0JFRkZWZXJzaW9uPgogICAgICAgIDxCSVJJbmZvPgogICAgICAgICAgICA8SW50ZWdyaXR5PmZhbHNlPC9JbnRlZ3JpdHk-CiAgICAgICAgPC9CSVJJbmZvPgogICAgICAgIDxCREJJbmZvPgogICAgICAgICAgICA8Rm9ybWF0PgogICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5Nb3NpcDwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgPFR5cGU-ODwvVHlwZT4KICAgICAgICAgICAgPC9Gb3JtYXQ-CiAgICAgICAgICAgIDxDcmVhdGlvbkRhdGU-MjAyMC0wMS0wN1QwMjozODo1Mi42NzFaPC9DcmVhdGlvbkRhdGU-CiAgICAgICAgICAgIDxUeXBlPkZhY2U8L1R5cGU-CiAgICAgICAgICAgIDxTdWJ0eXBlPjwvU3VidHlwZT4KICAgICAgICAgICAgPExldmVsPlJhdzwvTGV2ZWw-CiAgICAgICAgICAgIDxQdXJwb3NlPkVucm9sbDwvUHVycG9zZT4KICAgICAgICAgICAgPFF1YWxpdHk-CiAgICAgICAgICAgICAgICA8QWxnb3JpdGhtPgogICAgICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24-SE1BQzwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPlNIQS0yNTY8L1R5cGU-CiAgICAgICAgICAgICAgICA8L0FsZ29yaXRobT4KICAgICAgICAgICAgICAgIDxTY29yZT4wPC9TY29yZT4KICAgICAgICAgICAgPC9RdWFsaXR5PgogICAgICAgIDwvQkRCSW5mbz4KICAgICAgICA8QkRCPlJrRkRBREF6TUFBQUFRWVBBQUVBQUFBQUFRWCtCK1lNSEEwcERRSWlCUUFBQUFBQlVBQUJBQUVBQVA4QUFBQUFBQUFBQUFBQUFBQUFBQUVDQVBBQlFBQUFBUUFCQUFFRnhnQUFBQXhxVUNBZ0RRcUhDZ0FBQUJSbWRIbHdhbkF5SUFBQUFBQnFjRElnQUFBQVIycHdNbWdBQUFBV2FXaGtjZ0FBQVVBQUFBRHdBQU1IQndBQUFBQUFEMk52YkhJQkFBQUFBQUFRQUFBQUduSmxjeUFBQUFBU2NtVnpZd1BvQVA0RDZBRCtCQVFBQUFBQWFuQXlZLzlQLzFFQUx3QUFBQUFBOEFBQUFVQUFBQUFBQUFBQUFBQUFBUEFBQUFGQUFBQUFBQUFBQUFBQUF3Y0JBUWNCQVFjQkFmOWNBQTFBUUVoSVVFaElVRWhJVVA5U0FBd0FBQUFCQVFNRUJBQUIvMlFBRGdBQlRGUmZTbEF5WHpJeU52K1FBQW9BQUFBQkJQVUFBZitUMzRkKzRKdDBQTTlPY2pGMVR1K3pILzAzK01EWkxHN2ptaUQxRDZlL05YRmltZ1hnWXVsK2VZMS9rWTRHdmxzb0dBYkZ4NHBGU2x5U1JwTUU0b3RJUlk2cURiTFlSMjZIaEZjS0hPWVJ5YXE2VUtuQTBaYjZxNUgrWlFjdzlnMytMVU9JdS9mbGFzMkhoSXNYMWpCWUN4Q2kxWk5jUjBHcXhhd2FJY2VWSm9VOXA3akJaQ0hscEl1eHJrMnJiZjhqK1p0RWVndUlwVGxxU25ZYmhPS1Rhb1kwVUo5cDdTZU5pYXNOZElkSldQZCtIRG1Sem95ajR1V1R6T1ozTjFtV0VCWXdLbDhLdWRiVEJLcHJPdFd0cGE1VHR1L29vQ3p6SnNVV2t5VnFlM2xrRGhtRkcyR0VIZm1henRyV0d5TDJoRzJsOXE3YmdQYnNTUFpFc21wMlRzWDNkSHppSEZuZ2hIVy9hRmo5c2NkMXVYTXpLS3ltUkFQV0VNLysrNGhpVENuSmx0SFM5cVlPZHIvUmJURnJnZmcvWVJEVE9EdWZuVTFuRnRCVmo0SjFnaGdXQkR5VlFHMjBpOG5SQXRoZ3Q3bEx4bXhvc2MzRXM1OU1ZNmZXTHVRcXhMUkZSbmZzK1RYeC9HM056ZHlaZm9iUFBMNWNIV1hmZVFMc0RVQkhLbVdvc1BkYkMrVUNEUVJ0QWFGTEdYaHRoMkNjTkgvbDhHREo2QXhoUUlHOEZRMlIxZUlVL2pWcS96c1JyMDM4djZBNzVpR1VYSVJXYmt2Z3llWmVsMG9MNlBBZlFMY2k1OXc5T01ZVzhJWDAwRnExcHNXSEtoZWx6dUR5K1dFaVdIQXVMUE5XMlZ4R2EvOXlUYTNLL3JsNE9JalRkNjBqcFlrL2dCRFhWcVAycW01MS8yWHJKTklqY1VqallkcXJlL3hESTlodTBEVWtoWnhpdzlwOWw3NkFBZyt2UWV5OGkvQTJ5bkJwSDRXN0JyL3dZWWM0OHdiOEdtS0lCSnpDRnNFUjlFbk1yM3Rwc0VncjMrSzZjSFhFODRUMTN2bnhRSXgyQTBrQ29kMjFPRTZJZ1ljMUpCM2hiazBldnZhMVNUM1QrNGtyTjlhS0xRU1pSYkNVQWVobHpZRndoSnRlTWY3K1dqa2s4OHdZZmdyakFIa1I2NXdsNDVzZHFxeGdoQmcxR3hYa1phOXZPbTRoU1hQWWxxQ1pDTElLcGtsRE5zcitrb2x4b0JDN09kdEpPU2k5Yi9ISUF2Q09ZbnV6dTgyM2RKME5PU0NqYzFuR0tvRkVoWFJqbzAreWZCKzBuVnRwU2dHUVFLb3k5QWI0U0NqcW42SWE0ZzNMMFNKaFBQYTdpdTIrRU15ejBOMlFRdVlTVDk1Y2s5UWFIZ1EwYkcxcGRML05EcjZPaWhuZkdGUmdSZk9XdTZnaktsRVRVbHp6MUpzNGlydXFXVHUrVTFDZXVpUENPdWMzMnBKVk5iN1R2RXVMSFZOd0x5MHQ2MDErdnNpZU02d3dQejNhZkwwQzVPSU5Gb0FObGlsMHk4cEpnUXh1RzZHK1pDS3VkZmJBWVZESFp1OXliVGZrUnI2S29ZVTJLOWR4SjNjMlRseitoZWpKUEljajdXSm9yR3dwOFdoRWNReElOOHExeUN0RThUUTI0dllRZ0FaZVA4MXc4RC9hSWFOck9NRmFTVWJCRkNHTmE4K09qVWhuOFRkZHBvaWlGSHpPaXhQTURGSFZrU1h3cDBKTm0zSmM2cy84RnEyVmV0VGI2N3J6bGNOV3R1ZFNzZVdnOTZmSDFkYkFFbUdiUXU1a2pFNVpERGtjWFZ1Wno5T0hhZTJ1U1BTU1NGMGFvTGpoUnY1S255ODBmK2h0YU1XcEZ3TnBjUWhDZWRCc05HRXg2d3VQeXNiK2luQ1RidEdnMGllWXBibWJsb0hLNDR3SS9FeDVwYUoreEhrWWRkYzdCdmtGU0c3MnVxZjZZUEE0Rk8rU25nRDRkcUV6OFdlUVBVVXV5cVp4SEVtME83dllyWTEvSzcxR3dISi9ybkM1VTduK3FLNy9TdHZldjZGamxCYUhHZWJEVlZJRFJTL0k2YlYzTTYyZWtVWExTbWc0OW85M1Z2VTk4REkzcktMcDZOeDhXTFlSRWNBUEx3dUM1K2p0TW9CMnNMdm1QcDVZNXJnME44VmxPOHJCSlhWOXg4dFl5NVlpVzVpaDJXQVZMaG9ISkpiTUs0UDZhODJndVJqQnNXbWFVN1RweVdzd1RWN3Jxd1hZaUN3QnloWEltKzZ6alMrSjc5aUhPblo4NkhtMFAyRVFJNlVlekpTZFpkS2FoYldZMDJ3S0ZNd3VCa3hWeEsxOFNaTHFnM04yaFIwWENZdmo2Y04vaEJVR1NrYlJrZVpFeFp4T2l4R29YaW94aGUwSEplRzcydmdqYW9XMEIxRkVKekJ3RlRVYnUzVmlzSVYwdUk0TDEvQms5Wkl0NlRUYkdQNnZ4YmtnblQ0aml5T2VnTWlKbU1MZXZBU1RvR3VWZHNxNzcwdVZZTHMzTFErbXB0WSsva3MzZVdLblZialo1ZjBzTWRDZGtuZFhBT2dCSDJHL1NaVTRrMnFGK2VobG13MjdLdnVadU8zR2l4RnJLUFpTOFZtS2NJdk5JdlFGTFp4dU5VM0RKSUNxcG1hTzQwQ2x5YWZGVTc2aGhreTl6NDdaL0R0L24yUGx5Qnk5K2dJMVk4YTV6VjBHZm8xdmJleXV5SldDWUZIdEUyY0NReCtCY1E3NEk1SklyUmV1NjNZYWdkMzBTUHpxU2lhK0JhZ2EwZlN5c1JLdG5zaWthTnN5d3BpTCtySEpFSmFRcGlIWGl2Q3RSb2dYTzdPemJvdkNxL0E4V0MxR0w2c2d3WXYyQnNOaFROWmtRZURGQXRJbGl6MVIxckQ0ZlhWbkx2TUJob1pYNEFWaHhhRkpmY0tQZThmTmVjZnRvSUFFeTdhYXJVc1FLa1JyTmpxV2ZUQ2RybWprOHhWZERQWEdMOEQ4SkxRaWF6T0hnSkJMWG50K3dtV1BscXNXQlZmTXYwb041eko5ei9VU3pOdUp2bHFzM1VXbTRyL2ZoMWFnRk9pMzdzS0lmQWVpL3YxSkZ1bmMvcXdPTlFCVG44UmZrWHZDdWhUZHVBMmZObW56MXArM2lXalNKZGswRlRXbXlwQThsOWdMQ2tjVUY2RjkxZXFyelRDWnZvV043Y3Z5ME82c3hFWEdKeXY4ZGxVS0d5YnByRGpFMThhRUNNUU1VV2JUMlZEUXZrWnNvekdiS0FIZEdIUmZkN0xWd1hqdk9qWEx2ZGdNZXgvblRPQlRUajI3QzlXREx6YjQ0cEw1QjEySnAwdVlEa3FlWXBHZ3RTTDJLaTdKWkRUTkxzelBmUHpLQWk0eWRxQUN1c01weWhCTEJod2hDYWJnc3V1VTdvY2dhYk5tTFZKOTBHamJaMWFIam5lejlCQ0g0cVJUVFJycitWRzlnNmpETDFqTzQxa1dPTVlXSlFHRWNlODdRZjFoT3BTdVh1ZWE2WUhPcUxEdC8zc1JNZXBjSFA5SUQ1SVJCQkJnbitRaFVQUUtXNHVXUHZvR3lZc1lvcUZQUnRLNDJiVDR1NExRY1pWMXdWTlVhMVhIREdnSG5pS3ZVL25jb3Q2V3RQS1BQYXpvdTA5N0hscWRYMDhySE1oSlBvK0NVbjZVd2dqOG85d1NrYW5pMENwWVlhckJqMGthZjN4QklEbml6eURNZ1dwK21laytDYzNNZzk0ZkVIL1cyOE9WS3FYN0J1TWRoUVBoQnBENUJNV0wxMmlnQUUyL3RsTjVoMDNJMVdIN3RxRzVyN0NoZEg5OTdxZnFGOHFzVjUzN0xEVGwzSWlTbmU2WmEwcDVLbXBGOU51anowVHRkZCtOejkreXJLY3NFdDVmQnM0TjNWaG1HQjd4K2JSOUFxWWNBYnJhUWsvNGpNa3lsM1UwUUxyZ1dOdHpnRTRKa2V5SGRpNmoybWE5bWNnSGlSODVGb2JZTDhLOCs5OEdrSmt5MnVncTJEYy9zWkxaWktYRjZXRDVobFlMUm9FaDlGSGJiRVM5S2hwTnR6VmcrNnROTTdUSlNnVDNVcS8vVWw5Sm9KNWpUV0ZkSktsM0J2ZmVBbEdobSswU0ZCckY0VHFrY3pRWm5saFJJTFdpa0grZGlqaXY1SDJYMTZRejIvc2Y5MEY2VTRpV1hycVpMZStwbENXWU03Qno5UUQyM2duZlA2V2d1cU45ZjA5VTlkZHhYMU8xRnhQOVJUYmtMbmZLYTcxbnp5RW94K1pwT0JTNHJ0Q1lZb2QvejhPdEtmaDJHUitIWDREUW52QnplRGdyelMwc05EUWJ6eWRKY0t4N0xqT3lubjN5c2plbTlFaGx4UWRrT1JvMm9kNk9hSWNnYmZLQzFhRFBad0U1Mm92Qi9iN2xvbjRtQi90dEJSelFHVG9qV3FrbzRNTHNnMDRKVkIvUWxRWW9nVkw3cWlXaE8yMW9pSi9rTFBWYXh2aE1ZY2FDYXB2RHFCQ25WTURUSUN6RzUrZDJTeVJVUG93UEE3eWxza0ZhTzlhNWRyTzFSdFp0WDRYb0xDRndkK1J5UHd1LzFwVnptdHk1Z0RWSUsxYlZnQURQWmlhbHl6cktYdkpuaHZXa0VNOWdWR0g4ZGlTWXJ1akc0OTNwTzBCa2J6VjJxNnZEa1JJblVVVnFjTUxlbTcrTWc1N2ZCWkgwc1U5aStoKzgxRWoyVGpEQnVocmNrdXZkSTF6WUdzbm4wbG90YldOeVJObXNPSi9nSHQxMEhsejZON0x4N2lRNkZTOXN3ZGhLbzgxRWpacTduZCsrSit0Ym1EZHpUZUczR3czeW9zbkZwSitXRlF3a09oQUhzNVdKYkhaZTdlSHNmRHdsV2dZallUYVM5eDRndCs1RGZwSmdySGM4M212ak10US92NHhIODVnZTRTbG9DVGtJSXZYVUdvSk1PN3dmaFFOVkxZU0xkTXU0NEViU1BXaWJXZEdFNS82MkQ4RkNRU3VqekFxU2p4aVMrT0lIVnhXSThJWXhWUGVCbkVrTWpYSldmZjdFSDdSM0IvMTEyZDdFbDIyc0NtM1RZV0pBYVZvMXVwZzd5T2lCdHJuTUd1L0k2VmdJaVUyR283L2VheEo0Z3lmNGlCVTkvcldqRFRGTEVVR2pseWh5VDhPVTEyN3hacVRTNjIxVGpPU1NhV3hRWGZPZ05FZWl3Mm1MbXNGZE0waGs5SzRpM25QdnE5V0lnb0FGMFFUaFZub3dTbVFkYUFkV0NYNDh2MGNocmZTNExtL0JabmRzYS95aXpBU3FSeGVzdWpxclBTQzNuU21YVk1DNUFKQWJ1MktjS1A1MWZUN0JzbnJnM04vcFFzNGpxUTZ6ZFRnazJNcFU5djgwQXdHTWRSRk9wQW43elJyYVMvSmdpWW41QlFJR1kxaGczK1hjQm9pZVpRUjIxdGxaaDR5aEpwcmJEcURCQWRVMzZRSm9CeVRHMWtQYlJDSlZHUmVuSWFabzFjQ1RPb0FUY3lGV05QTDh0Zkx1WDJhanc5UndtL2MwVk92b3pybWk3UEdOZVBISFlXdlF4T2VvbEZLbmw1NnNkTC9iT2hnNjRXOE1VMEdwTEhaYmltT082SWpVOFdwQTJ0TEFxU005ZDVhTm9kQ2tLZW1RMVpaT1ZNVDZTcW5CNUozOFM0UUlWNlcxM2ovNTEwYytKRmZjVkMyUFhTSmYvcDRzNEMxbzVqbm1FemwyU3BFUldWN3Y5MHRGS1JxNG5Ub1Y1RzhBWDZoU0NvOTVDby9rV1lmWG5qYWtIM2I0aXRlbC9xWVFhVWF3OVg3dWJFZHBOWHM1QkhrYjBROG1WVFhCZ0p2cU5XUDdIS01TQmp5WUZEWi80cXBOSlNxa25vVndOWnNSbC9DN3IzdG9wZ05jQmJRZ1BIK0xGQzJ4V0R0WGZDVHg3TnJKR2UwTmJiKzN2b2d0Unp5dnZ3KzBqakU1SlFQeXNHcTBvUkM2dW93L0VQdlZLK0pHQkRtd3pCQ1J5TC9WWmsxM3dWY2k3UDdBNFE1ZlpLL3VsRm1COFk3T0xJZ3UxcWg0V0VFaHhoempUUFpXa2xKSXRpWjhBeVI2R2Ntek5PbWNSNjBDcmI2eTJCUFdMbFBwMXdha0t6NU5NeDkwRkhyd0h2Rk84bWs1NW03dzFZMURqQ2kxNmpKRy9xbDZnZUszenZCdGtWMko5VUE0YlIwVG5RRXk4ZjE3Sjk3Tmtxa3NDaFlIWGVKV1BWb2I1WHR3ajZVRE4vcXBHdXFzdWNMMTJiVnBlTnBEeEVqakpQaFNzK1ZESXY4SHd5aFBpQ0c0QXpvZHoxSkd0MHIwL3pZWUhWN2hoWE5nSXkvNU9tQy9kVEZLYTFhaWdWanBRTXl2VVl2MnJZekYvUXBBYWY5NFdwelMzNjV1MWRYekoraXYycEF5UThMb3VZOFJsU1B2UEJSWkJKaXdpTDFWbWpyNmMydXM2a1Z4MmxIU3NOV3pDMkx4WDFNdGhkUmcxeXQwWExldlRsTlpFb0dOQ0I1QXFoSk5BMEtPNHFjUUFYU2ROemd2QkhocGJ2ZUhOSENwU1dSdU1iNzhyL2FwaC9Qa3lmVHEveVplSjcya0RlbFJ0QitpRCs1b1lzRnFLMXg2N0dORktZY0FmYzlDOEF4aEkrUDRIaE80WVNXMm9jSEMzUE54dWorT1Q4ZDZXcVN0OW1RVUZvUVBHejFwOHkyWFFZWVJUL0dUTnJjNGdwdkRTakxzWHc1T3hZVytkWXgxc2ROWEFLZEhpSTZKUmRaa1lUNFlPdFVFWGF3RnNxTTBNVmY0eWlwWUNweE12VjVJUVc5TG5uWDFUVUIxYTFUYXEzYjBxNjR0Y0lHRzhNRys2RExuWlk3OXAwQlVqdVRMNXpLWGNYL2JTVkFvTjBaa1JRMGxxaHJMS2ZpNUNyaUZEc0xSWm5NY2taOUpOdUxidGI5MGE1YnBZWW1rZ0FSanR6TkdKcjJHNHl6L1BobXdoVklZQjl0ZytwZHF2ZFVzMS9QaXFMZ1pWQ3d4NXFmMTB0L1FPamUwNUtBc0lhbEF6RFZ3VmViV1pkcmxvVjZOMnV1MTJJTVR3c0NiNnVNelk0MW4rWEEyaG5yUHhKb2Q0bk5lcmJIdWVPQTN0d3AraWxYeUthWUhpQXNONEhNWVl2RVZ5dE1kc1NBTmtqeUFlWFhaNGRqS3kreCs1cUE2UVhRa1hDZ0Myd0UydEtkaFplYzZjbUhHLzBRWGtPS3dZeE1xYTZiVy9BbGRLWjhncmVheCt1TGNYYTEwTjZjT2R2V3lYQjYrcjl6L1NOU1JNaUhCQmFGdTVQVDloV0ZVSnpaWHcwSlN5REEwcGM0MytSSXJjT0pqVVNsaG8wZ3Zjdk03MDNmYk9KUHhuOU1EZXJSRm9pOTdsUVVhYkRBS284ckVYMXVNQ3pNZVkyaVo3d0R6bmdIeHRlRk1yTWZhbWMrNTBicWRJTDlXelMvMzhnYWhvY1g5Z1BidkJaZVJnSGxGc3FLOE56MVgzaWdYV1hGSXEzdTJMMmxnbGZNT3BPOFhITW5xTjBpM2RSYm9CeHcxOGhRSVZIeHY3dFZidGVxK2lYOGNBSk1IM05lN2hoLzVCMXRhUTgrS2wrSGlBQ2JMYnFOSWV3ODdUWE91S1lnMXEwTFVBdmZqa1ZLZ1BkYmVzUk8zd1oyeC9BQ2lUSTFVNUUwZFNhSVZJQ1ova2VlYzlBYjJ1cUxYYzZqNFhSY2h6MmRVTnBUdTA5bG1XNkxqWTZybndjZTRrQnd3eVRlVGUrdjI1TlR3Q0xETkIxMmF6RkI4dlVHOHo5ZmhtN0JsdFFIRTg3QjRrMlZsTXFoWU9xZjFLelNvWXVwamxrTkdySHNCc1R1bjFMZmRJWkxtNE42VDZkL3NSRkxKeEVRYVlkSzQ2eDZlUWJ4V0theFJXbzJ1elZJdkpONzBPZUlpaVF4NTE4WjdBVi9ZNjlyMUh1OGxDZnpLZmxLYWp5TjVrV3dNNkV5UzZSYXlNb0JtT0IzazVwSXRyOWU3VTZJbWY3YS9sejBteVppUjZHTnRxaEdNMWMvekROaGpBUk1LbGEwVGFrZG1xVUVxYVRXcG5TTHJpZUxORWZXQkNEWW5sTjVnNkRRVG92OUE0NGJweG9ucE1UeVduNXZpNSthRVJLNkg3SUJxK1R1R2hZdVM4ZUJEdWtueEw2dElxc2I5ZjlFOE5pak1MZ29MbTA2Sk5oUlFSL0JEZ2NPa3ljWEo1QTRoV2ZyY2xpTm81dk1tb2M2RmJuVVhSb0VjeXlFcGxxamg1ajUvd2ZQNlNJUG45UlVENS9VbzRRdlhqay9LTCtSeEVabEZMTmJLYklFbERLYTZlTVNsQjlXYTJmVW1WTkFZN3hxYnZKdU5HZEhVOHA5RzV0ZE5wem5xb1BzbWV3ZFpWUTZDczNMV2lUQ3h2KzYvTitSN2Z2clhIM3RxSkpuQVU2VEhZTE4zd1BxRGRmZktLTlZmQ04rNjJDOVk3WjN4bi9adWpDU0x3bW9lRnBvci96czBqTkhHQTdFZTRkeHRwWU1IYm40bUREMkszUGdZa29icHYvM1ZPM1NOWXhWanYrZ3QvUElqVzdWOTdXcEV4ZjZwUnFYMjAyUm5RNStpTFR4ejgxTjg4MUMyYUdvN2poQ291NEJoeWI0b1FsNW13T1BoWnliOXpjcGNOdTFtL05OWFN6NDN0bGVTL2RXcG1ROHNTd1pGb1A3V1ZlYWZOa2pjSkpvMlRCV0dnenpSTXk4VEcwYyt2RUptTko3aksrYW1KZWRYZStPK00vd0ExU29rWHdTS0xjUzM4VnhHWFNvaTUyZ2RkaG9vUGJ3TEI2QlBCd2ZWWExUNEorYVZhdVptSk5KQ0prRmJ0MjAxQlpGRktRUkRXUHhxdmFKcEwrL3RQRjRZNDJLREtyZWVMeWNyOFNBaWlvQVdQWnk4VkZDaDJ0c1BXaldHOW9WSUcyZytuVy9VRkdjcmhwa3dEV3dvUC96RGpEYThKbzA2ckk1VU1MQzB2SnNOOStNOVl2TE5vaU5sblIrVDVwK2hiL0N5OTVHTm1jZHBqaE1FU0ZhOUZlclFPMFcweWwwZTBpdGZvRzhGUk54ZFpwM0ZXcllqRFludWduOFlzVTJRUStoV1o1TDRXRHFtVHN3M1FaM3BlNzRUSERBVFdDMnJSaW5SUmcyN1dIcjErelNrK056N2JLRjZtMXVzeUg3bml2dmZqQW1wS0MraDJ2aHNmNkJOY1E0OG9BVGhNVDA5aTRkT2UwY21wQkhZakJYbnM4UHpWaS84d0ZoYjJDc3FTZm5hd2ZBR01GcnM4VGtLc3VyeDNrbzdqRnhicG44ZEkyZDl2RjM2dkdzVGZGZkQzYUlUcjdVTXhITjBvVWJObmV0WFpZUGNTRG1IZ0JkY2gzMzJTdFl6b3ZuZFdTRVdxNHNhUFM0c1liUk9TTjJ5M3BjeXNFUjBtalAwd0JLREtwTUpSV1BlSnFZOVp0V05CanBLc1F6Y2hoSXMvbDlmM1pJNUJnUHBjWko1eTVwK2dmNk5LelFrd09Ib0x5UDh1Q05WVk5aOWs5UjYzOEJSc3lxOGVuTTRRbUdSbjA2ZXQrS1hvRHF6SGlmSmpHeGErMWZJb1k5SlhRTklCcnJRdTk5M1lXV2dhTzBsMjRRWjI1bVdSblRRSVp0dnhOK3c2L0RZd3IxK2Q3QU9SR1FlOXFYYVUyYnN1MVJhU2d1Yk9mMmdLQ1Q3QnMzbnErZGJKdXU1dU1aVExVVDhBaVVEc3pEQUFQcVhyWjdGRTZUbjRicmVqZk1pZlVzM2NoVTdFRDZmVjlLcmU0dmZMbUNVcVFoRE05Z3Fwem9xcFp1VlV4aW5xeGd3RzY2b01UTXVGT2tBeW5rSUdoQS83ekthVDl2VGFCUzhxTFRHb2ZHVFdsajdxNEs5VnphdGF2Y1NMbFZ5YXdTbEgvS2g5dEdTTXFCWW5kK001Mm9uR3BNbitwVGk4MVZQSjh4ZkRzdWlwOFUyRkRaUWFQR0RGTUFqdm1tM0RQY2RXcEQzMllpYzZqOXMzcStmZmxPUkJNS3lzc1o0cXlmbVZkbWNZSytQcVhCMEFNZFpUK3U1NktrVG5UNjJxUmNBL0tSYUkxUjkxMnNjYmQ3UzdqcElJdEl5WFk1OGcwQW14MVpjcnd3ZTlmeitJSlVwajF4ZldGMWNodjNQb2JtQ3pvTm5tZFFZTFVxM2RVU3k2dEEzcnZ3NnlPVTVKM3p2WUNYMFpWOG1XS0U5YmVwY0NEQ0V3OUN4RDArc05uQklDL1pBb0FZb1hDeWNlK21HQ2hmR1YyeUFPQ2NORkRLNzlPOTRKamprc3dMNFVsOUlhQ1RBMVJ0cURVUzNTUnFXQ2VoblgwNjZVb2RUWVpqNFZTZkwzYVB3NWxmSXBnVnZraVBROGtEd1EzVk5HQVlYTjZnRysydFY5dlRSNGNDMzlsVmp4WEo4MytlTS9SRkI4eWFRZ25NRHg5YWNtQzJIQmtnbWFoNENKU0NqbHI0UDlub2FKRjd1TDlkUXZBalBzWllLOHJwdmFqQUNWSGNRZm9LcFE2YUROMDduNUJsQVIzRjAwaU9TRm5naXlHRnJxWkFQTk56dmNOK0JlbTU3NEp0bFNEVzNWOEJtVytnUGVHSDA0WkxIK3F6ZWtzeS9UT1IzRktReEVPUk5lZllaOGwyTk8vWGY1YzdaT3drOE1aZGhmMnBnd1hndTc5SitoWmpaUU5JczZrVlBDSHo5Ym9WL1lDVGMvS0FnUUM5Rm05VGtVZUJyUWpRV3h4RmxRbThPbDgzaVhxOVA4RlQ1QUgxMnhJdER2WlU2Q0FEc0NrSjc4UXhBdlBnUUk1RzM3bzRUYlZqOUhZMStTS25xVnNXSEUzQkVRdUxKd3VrTU42YjFheFdsb0RxQnRBRk8vTGIrTW13Wkoyb05kbzFndVFvb3pxNUV1QmJ3RWRrbjMzN2p3WXhDcDlhcmpGdksxekh6U1BtcGxFRkpQckk4b2JxVFhyRnlrd2wyUmNhUlU2RVZtQkZUdit0cGFSWkJCSllXYWxFQVVXU3hnNndueUxUdEVLSTFnSTd6WUhOaStXc0pRTnJ3SlNTemc0MGZFSXpjSmQ0US93amNzaFN5M0pKdEt3OElxQldjR0ZBZXRpUFBQK0hhcCtEbnhWNjdnNFkvSTU4ZDdPNDdmWHlGTTV2bWZDLzRsRVluODY3cUczMzkvbjhGWDgzamVIRmRidDNVUFIxeTJzUVdFV29DcXh2UFE1b2RlZnJOaTVHNUF2TEkvZnpqb090aG9vM21uK0Q4K2NCKzhFdXdQbVpNRDBmNlJBMFI4UE53R1JXVTZlYXp1VVRNS0I0Tm95SHVha3hjWS9mamVFc2w2OVUrOWFGbmU4eVBuWnk5QTVrN3NWcmMyQTRyVS9ET2F6ZXVhRE9yL1R3eVhISlFPMlZSMVVpMnZyb1V4WFZMRHcvZmxSN2FWWE5oT1pQN25IclNWY3lSZ1oySzVaRzBuMnRYeHIxKy9raWI1M1ZkUGtBVzlRMjdmV1BpYm1RNnBWMkhnbnA2TzM1K0VxOVpmT0tndVV4MmYwSVVKYXN2b3JZTlBwS0trcU1qTFUrL3Jpb3Vsc1FoRWNyM0V5ZDk3TkNJL1MxSElBSGM1OEh6K2lHSDFkTGtENS9Tc002Y0tGOEE5NURaeTVQZVp5ay9OWHNhNGlFcHlpa3NFLzY1TEU0aTkzNHBTWGwxMjBSelJxZG5Jc0J3L2FhUDBHMlVZVm1BR0loV1pkUzFmMWdEeWdjdFJzSnhsSGNYVjM3UmoyN3kwRWduSTF2ZzZMTFl2QkMyK0ovQ0JEcGszVDJlaTRBd2lyK0p6U3Q5UmhSQ1RxNzV6TkEwRmdVOXQzN0RyTXg2V1dSZnE3VHVmNE94QTluL1BRWXNWNEQvQWhmNWwwQ1MrMmV6ZHJOdUZsRFFLNmpIUlQwaWQvT3ZKT2RUVHcwQ1p1Z1J2aktqQXBtRFhVV0lGOGhtdk9XMCtXd01DMHpzcm56bmdjVDd4TXF3OVkwUVlWa3pSVW0xKzJGVkNoWm9iNGRsS09SVDVMejFVOXlUcCtkaGU2THIvT1M2MVE1NVUzWDlETnZFSWVoL3I2a2MwVytGRHQyc29mREVTSlRjZUs4OVdhcEI1cWM1Ui9wZkRVQjhFYXQ4T1lRT01aQkFaV0RHb3hVTDB4cnc4VzU3d3E4RldzelRKanVPNEplSmF6ZWFOS2tZWGVhN2xCMVp1RlArbkF6bU9TSk8vcGVsdzkzZVFQak9mS1RjOTdNU3h0dk03VDRYcWFMbkJPSVZrZ0VtYVV2TmUyRzU1YVZKZWJScWZXWXhSamJJRjQxNUtaOG4rSmZ4RWxPdlN1ZHJ5aVZxTXlXM01HdzJVMEFjcVY4VCtxQS9zdVZWbHJvZmxvT3ZhaW5CZXp5akJ0SFZrNXJMaUhWVWdremNFY2JDOXVETmxvODJmaEZxN082clRESkxVYTN4T2Zhc0NLbWFLSXVHeThNd0l3ZDkybkxWaG9pcE9xU2crQlViVFZXMzRXVXVuUWFwWTNLa1JINmQ1R0R3MU9sSDR6S2w1T0MrWHljQTN2ZU95MVFzK2U2Sm5MS1ZXUUFRYUNBVldRWi9GSjRtbC85aENrUEZXdmZiN2ZUZkFhQXY0TDFnZGhwVWZvT2ZkMkdUdktvWGxVUGZxZWxjVit2bjJlWkF3TFZ0S0hUc2w3UHd4N2p3RDR0T3d1ZUNSS1VwV3RLcXpoVEVjZVRJMm5CaExvRDhtRHkxUFo1UlhqSC9PRnRkM0QrUENveHY0LzRTbDAvTU9EdlFNZm0renlEOVAvZlNnK3NUcVZEZ2JuR1pRMUlMcDh2aE9ta2J0U1FrcE5qOVlQM1VrQlVraG1GUU1KQjNOVlNTeFAzaVRRYlhKZFhjMkxkY1lwNTdCY2RJMHZXalFpbXRyVTFQUFNvSFEvQ1E3Sm1TT2VCaUNVUWEzaTFCbUNlblBUNHFBL2ZIOVhFditHeGhtL09uM09SOVozanB6VTVPZUFXWjVpV01sNTdCMkc4cTIxamJyRnNTM0pGN3BUL0tOWEtORTNIWXA1NFRleEx4VXRHQ3NSS3E2OEpxbVlJVUsrZUl1RTh5a0w0SjJrTFU2dVM3QlRXbFRLTUhTeWpnS0hHTUxZODJyeFJMQzloa2cyMHMwc1ZZYmQzaElYcjdvOFBUMC9GYjE5T0puUkxQZ2Y5MFBFQmlkSXVQS2EyaHhFTzBzNXlkUHpkOGE5UHhpaTQwU0lYbXN5cmJMTDJLQmNzTmpSL1dlYUJHUGJKR0xIazM2ajJtMVRRNVQxY2RJc00zajJHbnRMa1NhMDJUVUFKeEQ5bUVMZUNJSUNHY24wSEM1S3QvWmNES0NxSUFUb2hhQWdmUlc2Q3FuZEJ1QWVaZnlTckZGNzAyMGs1Y2Mvd3liK2N3aFN6SExoUTJJa3BYVGQ2Y2kraGhxQVVxR0xTVms2RldTdGlxV1dMUzEraXdLNzFjSmozbFd0blBxNmYvSW5nbEczdWE2bXV5SjRFbDhPYmduM3NJZWRGREg2SjZZM0U5eXh0UFFMblB5enh6NktMbWFGZnlOdjlaYmtaeHQybnVuVm9XTWRPL1I2Y3AzZFJ5d2NRYkVndHQxTTY3M2s5andZWDYwZVJUVDF6Q2ExemUxUEt3UUZBUnM3U2JNeHltN3psMXgxTzkrYjdPdGRoTS8yVDdpYy96R1FWek13NDVHOFNpOG1JR2lBS05DYjkvdHVPM1l4bitCRG83TndpSkdaQ3VIVmhGZzV2Vis5b0hDUGJEcHIzM2YySEg0dlVnbUlRbFpTbDJGcHVpL0pYVE9uaE8vTkFUSG9tV1NrQlg0QkxxWDk4ZzZvUW1wWkdsSldrOHlqV1ltUlJ0ZmpJdnhuNUlMNG1zQ1ZkelB3b05SM2ROVDR2dUtobFJ6OXVmYVVzWXJaRVUzcW9RWjBIUWEyMHZIdDBPaHBKdml0ckJyMW4vUy85VTkyV3hzWWRVWUIvaVR5ckhvWTA1NjhHWmVtanBWN0daczd1RnpJQlo0L0N4dnZEeVQwSFZXc3ZoZnlKaEtoZ05PZUN0NlUwbnptVWNyUHpUVWFKQ2F2b1Z6UmRucXFja1A5TnZSM0tQbmVaZ1AyY1hxdEZmZVdsODN1eE1WOHdoRXQweXlLS3Q4aGYyZ2tTc1ljY2gvZmtoUFgvTmpqVC9SMXpsSFJUd2ZSVWtFL1VvL0FFS09FQ0oxcjMyZUtnRERKekk4MHNnaWwyY29xNXlrQkJ1aWJQTlkyL3pwM2xNOVgzd2o3NThkMnJncENFYWh2UTV5TmxObGZKUGJ5MUN4eVpCNEtvNldnOTdQNFhRMzFMdFJDSmVseENRZnR0N3c2VzBBYlBwUGhaT0VoNGRJRnhlWnJ0L0VZTnN2MUxDWEtkcVo1Mi94L1NyUitPR0xDOWdEN2VvWmthcWQ0Wkd0VCtiWldneXg5Y0VoZW9sQXpvelhLUk1pYWdzaUxob05ONHNjVG1wRFpNSFlubWxhYktaNkVRMlVNSXdPcSt2K0p5YjQ4RjRyWmZlZUplZS9ZRGw3TGZPbjUweG14bUszSUFVbXhaSEhrc0dHejNzUmNXQ3A2NXVzYi9HdlJwSlE0WmdMR25wUmU5dWw2WHZRY3ZyNHRUelM3bE5UbUlHOTF2eEhPTkt4RFlhNGkxbHozaHg2aW93OVR4dTJLVUVwU3A3Tk5MOTh2aTVOM2UrMm4vbDl2dFdmdzZFc3Z0OTFEK0hSdGorSHRCZnc2RXc1V1dsb0tGZ3VLN09UR2k5cENtMTZ2RzZRMnQ1QUNlcVl0SHNuODBKMFljaG9RZ2VLK1dsS0g1Q2oyRUlnOE51dmpmZHhPUXE1WUZweFBmTlVoYzEzTk1PY25aa2hKTHlqWFovZG5acXM5UklteHFGcXh1VUFPYnJQUkpXQVphRUFUcjZmOFdCZUl6aHgyVG82THFRbnBZZGFTNkxVLzhVUVBHKzJQbFV3allGODBVM29wQmJTbms1YnBpVUtSV1laNWF5QmFiRE9zTDV0MU5za0xvTDg2Qzc0c3l3UUN4dXA0RjlEWkhMTmV3RnN2YWtXeHVLSGJCYkVUZDFjZ2dMRXdHcjV2YWF2VVpXWE5wRWNPUmM3cHVQb0JhTHlGb2FKK1dtQkREemtoNWt3bTRaNWZPcWlRYnRMMjdsc0FNNjNDbXpqZjhSUk4zaERnR2tMNGQxT0RmcGZsWG9BaHVWK1lZUTdWUy9CTDNEcVpsVEdUZ0dEVFNwMXVpK1I2Rk9pd1lzMW9Rb3pENzBmTVVwbmNxRmtLSDVrL0xoS2o0UDQ2M3Y2aHE3SWdxSVhHYXZsb3hLcGl1MHBUUVMvUTVtREllbVlNY1lQZGdIaUhuNlJiQVNUWnd6VGczQ2cvS2RydmpDUkJidGN1OG4zY1VERC9McDJwWW9jNjJrOFBwMUV2TmE0MXJseFhaZFdEZHdjeWpuWGh0Q2pITVRwWE1XZ29MeFo1SGxhTjdibkhEandPL2FzRXg1Ty9yWitQT0tzYXhsVHFYWXVlY1B1ZllvVjgzbmxveDhQSlBKUGRVWW9iR0ZrSzZwdmdubU0wV3RjUURJK01aRHFGVlBBUnJSaW5SdHh5dnQ3RllUM3Rhc2FMZWpLQUtOQ2hLalFNcjhWVGo0MUJSTm5uNEtHaElQYWx4b3c1T1UwMnZqU3dsQUhIelZsbEZabzJOWlF1U2JyS3Jzb3JNekpmdVpVWTRRc0JyblM3RFQyenRscHMxS3ExMmdMZm5pZkhMaXZqREZwQjJyZFE4OXgxZHFZd0tYRFhTOTFIVFg3M2lOWFpzQi96dlQyeHd1dTJEYzgxQW9UZ3NIK0QreHhsdjRwUmJUWHRYSmNDUC9UeGl2N3dZdHZxeUM1L3pkVDlrNndsUmhKTnVyL3hTd3NQOEprU29sOXlkTmlKUnA4T2IxU0U1TFFXQXBVMVd6TlA2ZFNOV0ErUytPTWxRbjJPOTZvdU84M3pqeFIrUmgwSkZOQU1ReDg2cis2SWNOZHI5YlJ4eDRHSzFGR1kxMlF0QVM5aVZCSDZ2R3lFaVorc2pIbmpTNXZ2ZlZ3b3NYbjlvSy9mVHh2Ny9UL3pYZHdKcGxhMHRraUJlV25pWXUwQ2FIL3R4dUhlbFMvQVUxNlVxRWZDaklLb21SY1c4UjNxUGVnNGdmanI0YVNUZEh4RDhxdnJmc2pvNmhOWWpkdFpYczlSRHBvQ0FzV1c0Y0M3U0FRYlZwcyt1cHd2dXVHRXZ0MWhxbWg4dFpLeGhQZ0dyZktDQi9oRm9udDJsYlBaRTEwR2s4T09BS0gyNTBNZ2tNbjdPWktNTjdsS3dtMm50Q24xSjZUZGpDOVdmNzVCK3ExbHBoRGMxbnQ2MzBTU2VRZlMzci9VVndVdXZ5S1JDSVVnMzgyYmErZXZNUjlUVDF2MTY0blRCUTVoUENrKy9YWGVURzVQNWVUM2QwSUxOcEw3MEw2S1Z5VDFqOGFGelBZV1JNVHJqN1lkcGhoaG15TTJNL1lFTHJuc1E0ZVJVMDdGRm9PcHc4UVF0T2RaeHp3K0FMdjI3cWgrek1mTEF4WnJkQ1pvemprRU5pL3NDTGpMOURJQnRxWHBWTUNuejgzc0Frb0Y5c21VSUFVanNSRkpSSWk3T3BmM0NBV0pHUmpqaHRpWGt0N3czbFRnTXlFWk8xUU4wTlRJd2d3NTQwQjZPRHQ1eW5kN2tUdHh0NFFDWERLQlY0Q2VvQllhL0ZKOVR6M09BY3FIUkc5M1Jnb0ZKSTlyZVlYcmN1RnoxVDB4VktGZGF1Ynl6L2JFUnpBblY5cE5TYU1mblNKdVFJMFcyVU5RYW44RWpsS2ZNUVFNUU44K3RqOVFrWVFxR0tSVDY2VncvVjRZNzBOTzMyeCtNR1FuRmdOdkl0aFlzdFVIclhNaGp6NmU0ZnVuNEoxYnQvT2ltRmlnTldvNG5DNTUzQ21Ca1FnVUcwVW5lQWRKRGtaL1Y0RzJzZisvWjV0Wmh0SXRmMHZySFBweEZyNjgzUHVEWDNUTXJxbzBQbW1BcVliaDc5dTRKa2YwM0ZHMEtIb090UjlNT2JLaHpSN3d4RTFGaHp4Szg4SHlVM25LVjdyUmdRN2hWcmNreUo0VlJ3MzUzU21iQm9YZmFacUpUcWtCRE5wRlQ2Nmsvcm1CTjdhWU9mYjNmSlpoQVUyQlFuY1NuQVFlQUdqNWhPUk5ZYUxhdS9PTGFVaU56Y0FxUFZteFFtWTNDWm51Q3AzanovRVFMNVVDQ0Y2WXY2VUpNM0p0TEh0bHUwaXptVHNwOS9WcXY3RVd6enhEemk0d2lrQTJEM2kzb2hJRUxkN05IR2JGT2VBdXpjTmQxZElQeWR6bkd1TExJS3hmWXNHb3NZL3lPWE41empPcWNLMUFpRzFJcEVXUDhWL0pGdlBITEtaUmJsYjlncU5HNmtFemFlYTBpQUROYlpvcm1CMzNwUHB1MjRzRjloWXFHejIxRktiNHVFZVNaM3p6YnB6T1BWYlNIeWlQWWdnNGNaNFltdFZ5TG1CNkFiaEZLSUxXaVFhRWJuSW9nR2dUTENxRkJ0bUh1Qk5qTDdoZUxkWlN4QS96UjdhOFF0NlhRV0tpeXFSSjlVRitZakdITytxdW4zN0hsRHlVRlpSclpyT2lOdkdCZ2dqbk56UlBGOTJRbHlJeWxTQmVWM21TYjR1TmpES0lkUVVHMzBaYUdMNW96UjlteUxOTGREZGJCMUJJRFp6TEs4Q1NpTWJQWGo0MnMwMmhBQmY2bGE4TjNaQnFMblRuckJkYldoUjlFNUZmcitXOFZKTWhHSDdDbWhHS0ttSzJjMDJLVG0zeVVqZDFFbnRLNXYzb3Q5bk1DTmFzTTRhSHF4ZFYycmR6Uy9QZmhQL1lSOTVUL1Bvb3psYS9yUTZRYXAyOFgvRGluSFYvSmZTbENpNDl5NXlYUHd3T2JiZGpjdk5sRVAwYzlWNmZoTjczUVZhcU5kZnBod3ZoM0lvSHNWVlZaSmNGNFFyWmxyZGNYRUJ3dDFzVzdsMloyZCtSZXRTNkR6cnN6ekdya2dwMStXZi9jcW5TOGx1aExHeDgxWVd0VW1adkVTdlRRSS9JalVRWjVMaHowUGV4RTVpcXFEdE12MGtGQU93WXBMSkdQWFFVY3hZNGx0L2JZRWltamxPNFg3TGxhSG1ucUhzNDJjZUNPVTVETlNFOWMwTzZLZ1FEREFRZFV6T056L2VPcVkzTmw4M1VlcXZtM0Mva2Y2TzVSNklCVmZxOTRNYXkwUm5MemVIQWcycXhkbGxOdmgrdUhybC9ZK09XWEpmL1pMR0FHaTZ2WnRvVGhoR3VIS1JOMDhuQ1JZTE8rblJMTHN2a3pmalBMWjlOdXAxUjQyUVhVNmxlTkJ0YnNHcFh1YlgveUc3VVNvbk1DY2hISmtFRUpGZ0YzcEJscitDdHM5WVdCVGtmZlBpRWJ5bHNhRkVxNVdlSXVzVForc0VnNVIrN09ocTBQcTdpZnIyVjUvNTZ2RndoVlVHZzFMYkRENngrOVcyY0haSWV6TTZ3R2NXN0EwcUhtcDJoeWVQRjFodXUzWDBBczltZjhTd2VhbkhSRTFSeFZONy9TNVFoVVQ5a09DelR3VHRpelRNRVhRaXZNZ3VEdHErMGhnWnlrY2Jmb0l3RWR0SlpoWTM3YVdIeldVS2piaVdldjA4cDZaaXBxZjBweWhSMHJTM2R5SWY0dU9vQXlMV0NrK0x1WW8wNjFNU1QxODc0MnB0UG1WTFJKQndpbUoxclNvN0MzSXptL3hYcDFDQjRpaFV2OERudE5GM3FNUDZpK05mRXQrRzFDQUg4U29oTk5XREpJVmZBWEsrY3dBM0dHb01IbUFMM05obk1pV2JWZ00zeDgvMGYySTlhS2lpVkxWZnBvS2IreGczMnRubUhZTFZ2V2NFckZIM2tYc2dKdEtVTVBlSlFXRjdEclVHdTZNSEJNY3hqR2R5dE51aXpDMmpzWXlaS0ZaTXQ1MXdiSEIrVm4ycytNRHE4VnJaNWd0YXpGbHI3WDFheGhrYjlJQmwzVFRjV1NNSnNVdXpzZFU1Y1lxYXRFdklESm9IWTNnOU4zR2VmQnVka0JqazRIblNiV2ZjeGNPVUFySUpLaEI5TFIreEF4RGRBR21nanhtMWYyRUlGb1pyNURMcDNZL3kwN1lkTk9YK2dZcnZTc0JNTThqVTlndWJwNnB6eFdGbXR3UXUzZlJEU2RNMFpTTW1DL2dQMnhtUGFyVkxQWlFHeEpObTJaQVRWZ3VoNjdVbkN4RlJjUmVWN21OY2s4cXFpblBERUVyYUVydHZXem1rRktyNTB1MnduYkdld2xsd2hWVjk0Zm9xWDh6S3M1b0dlN1dEaERGYXdibnF0RGRzQ2JUaTduTWZVUUNNenM3RWFoZ1p2TTBQdnZZYUxMeFN2NTZXYkllNnJHdWhaZk91ZHhXdlVvL1FUWDJraCtXUFY0MmxHQ0lJY1JpK2VLQlgyQjU5d05GRHFOVWtYVmlSeEpoVmNXMkJlanBuV09ZRTl1RlpHQm45ektDN2V1b2lUMml4aHZDYjlCYmdraGZWV1VZdHpOeC9ISktpVW5aWFFsek5SY0VYUGVJQWdyT0JBaWNwcDcrMmRGUUdYSzliQ1VLenNlZGFKQmlMaWVPWU5RMndBSWZPTVRxYWZnaWc2U3pYVWF1M0pETmFxMVdDY2IyTkdRekNoVnlFWUlRbVp5cE53RzhGWVlURTBscWY0MTQ4NStOQ1A5MFdzaFM3dGtreTFWRXlNY1pDeVRybmhBeHVaR0dVY2ZHejIzbis3Vm5BczNPdzRVcDUrNDhkclNIL1c2Z2xDMzBiRXlndEl1S3daRjkrNFJvZUZ0elZTdTdpRjFPOEpsSVhJRlBPY25sSkU1bnp5TjJYK3FIdld2SzV3OFljcERVRUVOMnNUWTlTQXdxei9OcHdUWndBRUEzMTdOdEkzZlZ2TjF1NCtaNzNBc0VDTTlER1ZDTkN1UWdEVjdDc01DbXg1YmNlZHJhYmV2bzhnVENkdjV0STVuZm9YRTBYYkh3MzJPZ0tpLzQwSWs5OUZkVEpySzVPQS9SN1ZFYXBic25MR2hNODUzZHJIUEx2RlFCdVhZTjlOY0o0NE9lSm91ZmpsaDNpQnZlckdzVEhDb3ZIWnVRK0k5SXN1M1lMZFhnMHRjaVRJZzRoZ1Y3QXZkOXAyQVBSSWlhUldpTzlCUnY1Ujd5LzBNL0QreTg3TytjZkJXdTN3OVpsYzI1YTZmY3lyVEl1R2VjU28wN21uT3VsazVYYThucjlCVndlWWR5TmlwMzB5c3pWZ0V5RFdOSHRqOW8vU1p5Ti8xMU5NemJaVlZ6NUF6bktMcnJhcmgxZVI0bG9YcjFZSndwZGtvek1qdFdQUHZFZ3hvTXVRbnBVQjFkeWwrQ2cwc3lsV3g0V1pYN244N3dEMFB3cDhWclNJZXhwQ1g5OGl6Tlp0U2lKU1l1dGF4ZDg0RVB6WHNSWG1TZTVhbzd6MU9FaWJMRWkzT1phRmtMMGFjN2hYa0w2MGJDZTNmVG9ZN2RBVlJzOGFHa1ZlTFQycGxWcnVIcnBxK2lqZTViVzRFZWl2NXFBNzd4aFVKcXEwWnV3S0V0a016RnkwS2dLVzBNTll0bURWMG91aEw1R1YrVEtoSXlLRGVpZXhMUE81bmhocmExcHc1TnhPazl5ZUVPVnByTDU1bVhYZWhSKzdzQTBzM0dWcTdFdS8xTHZhWUx6bS9kT2VMWUhkYUNrRVJ3enFtUU9abnNYSGkxaEN5a3R5YjlGSktDS0tFT29mOENFaVB1dGIxbWVtRTlPYTRjZ1JHeG5BdWZRNGxCSmY0N09yNmdFci9aL2lCa0RDdlBRSFRLak1ta2RGeFJjSDRrRk5BVFhXTFV6amVjM21VbkhCQk10QjNaVWdEd1ZvQ3ZiRkFMMmdDbUhvUFNmUlNkdFQyQnh3Rk5JbnRJTFFVeEc3T05Ga1Azc2RxWXV1RGM5TndZWDNaZ01wMHp2TGpHa2srS1FtN2hlbDcrb3h6cHdXVDEycUdwQzFPWXZMN3Aza0x5TnU1ZXdSM0NpR2dYMThCbEE2Z3hET0RySEh5L3ZrL2YxdWtvZ3BseVNsMnJkWVpwQWwvRHUvV1FROXM5Q09WRGRRS1BPUUNDUkdnVVp6YkRUUGFNYkJoeExwTDZQNlZ6cDd0WTg1K3N0dDJ6YmFRdVdETTE1K1hTaHdlOFgrNnlNcW9SUVNhZnJFMVBrb2dtTm1la0oyUURpMGVyZThsWUFoNUVmZGNucU5WQXprVTF6enRHclFrS2MxdFFlR2tBeGNobDJ0aTlUUHVMUzFzdWVzSlpieUNFdWRrb1JXU3FRaWg2TVdtY0ZEa21TWUlBU0RIU2JIUHV0MS9mcWJSL2FFUFFENFhJbkI1WTcvQm0zbHFnUGo1Yko0Kzk0L1krbWc4TUVxZGJ4d1hUUmNEUkdTS1NSTWNRTk1YOU9Bd2VKUXlZTlFmcnVSbWhyazB4V0JyREZqeFhsMVlxeUtxc3I2dVBlVm1pWVVPNnIyU0lrbFd6MU56ZlpvV3F0OTY3akNqeDQrckhpUjNBREF5eVErUzRHemJZRmxFREpqa0xMUHhvajdSSTZLZUx4ejlwSytlM2Fla1pFcHlsQkYrZExJb3N2TEhyODl5bCtJelRBeWhiOHFEK1dCakJTNTlJVEtLbTBta3JoKy9OU0Q1WHB3MU1uNDc5UFpKdklVNEd6RW5YVEtBZDVPSEp0UEpMTWtUVk84S1lyL3VDZENpZkJMSFRMUjNPY0FVTVNiSWN3TzlPajJBenJTeDQ4M0pTeTVCQnYvR2JFYWZqYkRsbHlHaEhBWmFDbUYzZzl3cWUwSmU4dURybkVtb0NKY3ZVZS9pWDN6THlzNG83RnpkaHZoQ3FiSUVsV0RWeG5RTzRZd0R2b2ErLzJISFFTYWVrZFJlRWdQMjZNZEI0dlIrLzhmTVhrT3d6ZDE1ZnBsbDVPYlVVWVNsNlo2VE84aDhjanZzd0c1N1dZUmVDdklZMTNTVXlvdWwvV05WNXdLM1U2WjVLemYzZmw0S010WmE5UzdzRkxyZDBEa3NCM1RqWDlvdDB3RnIxRUNvMHpWS2JDWWVLaVFNSWhEOVdtWnRGMnJzSzFrdnNpWGJSeTl1Z25JUkJJbnViR2VFayt6RnpBQVhRZXpIZlZ6NWpFUWt6bXgvSjlCYmpLbG8xZlYyZlBzYlJ5aDdEaTcxT2dWWnhjaDBreXRIa1BHanhyQXJlNUsyOUEvUHd2Qjg4OENPNWRUMGlSbFR1eDZwVjNjYkt6K0FMVjFIRkoxbU13dGZkRE53dC9ZQlY1K2QyejBwVXZGOWR6eHN5RTRRdkoyWFFVU3hDYXd1bTRRY2tZTEFCVXVUbEZkYmNtTkI4VkwxUVdCQmhKK3RjSjkvUDNQblR2YkpsdTdjSjJaR0JiK3BQcjY3SnFDdFppazFpWG9DSWw5UFVSamNFWmcyNXNyYlVoWjFnMGt3aEhRMFhvWlVnZ1ltcGVkWHFwNXc3bjIvRDg5UGFQeGZoK2RaTWhhTUFsdDFMUTRtZmM3SDZGcndzTHV2U2pqMUc1T28zZGJ2MDI2MUo5ak5YL2pUTHk3KzA4ZXpYYVQxRWtxZXBXdzllb1dtL1dIQ2U5bE5mT3F3SkowM2dOT0tXK0pxVG9KeHJHT2N1Ums0S3NPTHdVRnBkRFNWVDF2NXU0REY3dWNQeDRacWtlZ0N2eFExYmk0TUV4V1hMZ0xNbE53R2VBNkJMc216OFV4TmNQZEZrVlE5SFpRUW9Bc3pORXlGZGtkL2pGcUJtc2NNU05mR0N4aStlVmhnUVVFRWlXRjEvVS9FV1F2ak9yMHlSK1pmOXVKU1d0M0RnZ1pRNjlMU1V0U0d0NXR2Ky9LcjFVbytYQVptN2c4c2I0bFRCU1JXVnFlc3ZKQmgyZjhhVE9rWC9OU3JPUU12ODkzWjUweEZpeXUzbFB6WWp0NmlCc1JoNlRJdWJBN0ZiOC9CMXBDWURDMm1FSWFlUlF0c3ZuTzUrUVBGVkVDWW10MXhjbUVxV2V5SDVUT0VjRWhhc3JwVlByUmRJaGx1bWRnNUlPM2NZcVhjdjBKRk9SZzVkUGdqTmRmZCt3UEQybjJLNGFWMVFPQ3BDRW9SeWtlMUZsNGkvaCtoeGw3MjNwaHdWZDU5N2xFeW9haW5ORnNsOEZncGlxNlRiN3NTME9PWmc3c1FRVkRIUHRpOUZkeno4R241T2p2eEZWMy9TdmFOVEF6aFJuN1hZQnhNT0NtZXNoNk5QTWs4WU9NcUhiVENtRnFXV0tJOTlFc1NwRjhrdTBMNEw1TkczTDJFcGhVRVo4SW1idW1VZ1p2YlFHOW03WFpWZC96MTFxUDNWbFM4ZDIxcG5QMzBrMnNSa3cvbktNTnFaMG15OVRFZXFYRTVWQ1dwSnl3SWgyR21wNWUyOEY4bmowVVNaSkFrZEpFRFpiWHNXditBWDMzY1hYRkNFVXVZWlJyMU14TVNKaTM2czJSeXoxc3VuVW9PN3BJbml4UHJaMHB6NjVzVlc4R0hNOG41b0tHZDBIdVR1MnY4UVo1d3F1b25ibWRIMmYwLzQ3Mno3aVF1MXJubmxGbXZzTDZidnB3Nk5KS3RiYzRPNGx4QWJ6ZlBKR20rQ0VNT1NxQW0ybXBaYm1QNGEva09nTlUxNTEzdENzK0hvODVEUnNmcWtnMUpRcFJuZnpYRXNSNENGVTZ0K1pvWithMnEwek5tbWhxNmpQWjRqTFV3Z0ZHM1B2eWhjVEh1aU1HanFGdE9yM0c2bVQzV2ZPTk5vL3JYYmlBZEc5M3UyVWxqNTR2ZFZKb0NmbC9zRWhSYWJRR0xRUDdLNlBzOFpmZzlpSlVFY1hYMDNVZ3crMllBMnFnUXNOWTJVUHNGZE0rY3ZEQnF3MFY0emJrdDBJVDhuMDA3anRtb01KODY4bjE1ZzBMVG01eEErQzVkendmNU1rTVVRRzRoRlZ4alN4bkYrdzUwK0lVMHZKaTZ5blFVNWxmcmJMYWJHNHFGaGV2Nm1Ma1ZOL24vbUhDdmhRNkJJZmF6TUVDMjJsUFNYWEU3d0FqdHZua3BUeUlDeWNSK3ZZUk83RUJrM29NY2pxaGZrRlJKOWdYRjRrZFpiaUFzSVFLcEdWUzBaRmszY0oyWXJkcnVEODFVbzBjS05nZTYrRHc5MmZsWVlsVzF0bnlTNVc4ancyZjRPQVdyYi92SUNZbTEyc2JIWk9HQ1dJZzIwUXo3dWRiWVhNeDNzbGlBanl6Mk1HSG5uNTRxa3lUdG1iZzZOU3RNek5Dd3RFL2E4c2FTemFtRlJDN1lGMHBsYm5ISkdvcm16NGdybGVTOHJxTmhSdEc5bWtJdnN5Tis4ZlJOcjVVVExXOXhLZDU0MDdqbjBZR2VmdFlneTZFR1FnclJPcWdHUTJwWGFKTmtQWGFPajlGQzM2cEt3Ujh0eUJBRjZXMC8vYW5BdU9UYzZ2YmxVdHJpMlR4VXpYY0k5RDZmRHd3eG9EdG5nV01lSklDNDhxMGFRQUp6RTBQeW8rM044cWRXM3JpZHJDUm05K3lPcHd5S29BTFlsWERWeTRkTXZSTHhDeFJrb3A1R2RwNE9mV2Fvai9wRkR1b05DT3M3MWpYWm4xcEFLWXJaeDRsM05aeGczOEdrYkdaUHJ0RXl4RUo3ckpYNGtNOS9PbU1SazRGY2dLNnlOdTliYkh5WjRsMHE3MkVQbWNVeXc1Zm00OFdPanVMWCtmdTFJeDBkYWEveVRmYnRpMFJ5NmdSQk1EVzhNMEpRcHJLSDBTejhBYXk5VHlWZXVZUlk4b2VSbDZHeVVjNW9ZU0ZYSm4vcGtoS2h2aDY1cUpCcGFSd09RUjhxeXJlZEF5MW1YZDZXd21NcmVpcnF4RGdTR3RLMm1uLzZpRDFJdm11NXlkZXRudSsyb1UvemlFc1psSUxETzlTTisyb0NaZEJJSlJVOEZNUURqWThkN3U5N2dtUjlQRnFoMklkZ1BxSEJSVWRNNGtrdmNYNWFJU2p0RjBIVkNxU1U5QWt4SWFHWG9FVVFLYktGUUxXV3A3aG05aEp4cmxDLzRpanhiQ2FjMFJDaW5kL3IvU09oWHIrK29RazduNGNsRUFTQlpES2RWdFhCZ2lxUlBWTFVCYU9wdk5OWVBBRDl2bUw4NEZCblFHYzRsdURWU2NBVElPOFgwaEdwNGo1SGJFbDhJUlAyZUpFdU5hcXltSDgvWHJjaG40QmRIY05pUE8xVkhqcUh2QWVScDV2ODFtM3RoK1JaalBDTWhWSFV0TUd6NCtGNjNnck1LRmkraktxckhDQjlIeGFUZ0p6TVdUbG5hbHdNbW9KaWoxVHVCNllDZzBEMU9RcisyVEc0aGdocHowTnhNUFkvaEJ4YnBMVXNKbS9wOVFSUlIySXRTTTU0QlZwZUhPK1JhL0NKSFdSRE9zYmYzRnJvcjVOM282T0ZUdnpFS25QeEwwYkdzMUp0Z0tORVExbCtweWdOUlZXYW5EZG5qOU1yQ1VZK2UveXIrVnhBeUFtV2tpN212RThYMjVCdFNyZGowVzc5WmNVYW10RnVIdTlZVnpqUlN0S3ZwZ244Si9kYy9rRDAxVCtiZW9xYi9kYlBJY1dsVDcwTmlXby9ZczV3RnFwcy8xd3F5UEpWV0thZ2t5aGFYVEdTWk1EYzdmSWJORnU4L1B5MG4xNk1oNlBvQ2F4T0M2VEFlL0dkZjdCZmpHNmdEYmk1WFBsLzd3dkRWRDhEZ0VUUWYycDZ6WVRPYVEva2JuQjdYWWFuV0dhVmxJRFUydXJqSzRTODFzYkl2ZmorQXl4ZUt0VHF5WDh4MzZYODVBTHNhTkFrVVVyNWxBVTJMS1FyeTlJRW5aUHBMUENEOG44aWJaaU1KTXBsYno2UmJETW9mZTZSWHMyaVdzMWI1ZzlrVEFKeVdHMXFuNUtlaUo5UzhYYUIwenk2bmk2bC9paHZtUmpLT2k2Q3ZZcEYwODJPemlkOU9LbzlMSWpxeUpXcnBaeTlQajBQMEl2NldleklWYkZoVjVMNkdXQ0s1R3FLNWF1MTB6Sm1RbG01QmxMd1lJSXBFaFNMV1crWkIrK2dldHNqb2FONEJoTUcySEdZUVpJL2MwaFROakM2bS9YYjQ0SWR5YVNJNjQ5b2d2MTMwdk50Uml3Wjg5dTJqWkZVckpRMnF2UTRTNVpMZTNHNnJadmJaMWkzdE56WG01V3JsUXJTaE5MamdqTVpoVkV2WFhNdGdwcXdCS3ZUUXU5cWRqNTB1SzBOWVMrVDZScEJqUVVxZ011R1poeWloYUt0R0lacmZCRmNRVm55alF4UU15Q3A2aDRmbU1wUTZNenlHcTB5UzZMWm1SeVc5R0Z6N1dqNjA1KzlwS3JjSitNUzhqemZiUVI1bmFoaGJETnB3RWcxMFVKblVtck1vR09ENHV6dDJIL0hlNFZ3S0FwclRDcndsT0JtdmhuWm8wcW92dW5OekVBRjJvdnprajBHVGxRSGJqQ2xlai96b3NsKzQ3QmlsdlFjZUlCZUg3K3RHbnpERXpIWndZUkNvMGJvcFZpR2wxU3orY2JldHJNZWRyQTBuZWdSU01xaUJOZ2wxL2NTM0FHMkVUK3VaeVZhWnVMNmFzZW5SdnhIeVVPcUoxZVZ6L0ZvRUZwaDhMWjYyVHhRS2l3S1pFbnJsSUNPUHJWbkplK0pxNklYUjczQXFEWUtWQ2VSVTk4STNiYW5lR0FQRnpMU0JvK0RiYUpsWjA5K0p1SGlHUnFWaE91K2FMLzk5Y2Ewa3NmMTdNcU8xYjA3TEFoTnVKZ1dPbGhYYlpXeUY5Ris5bC9WdDRMNVBxWC9uNi9ZWHovZEgvVnYzZ2gzNzB2MWFUa3lsRkhOajdRYTFtTDFUN3NRSGlsQk5mTldBbm54TUVFaE5yU2pCSDdHSlE5U1JVWmRUZHhHaFJPaVFxeXUrMVR4eXVQTlRPY0IvNWpnMUoyMnQzQkNnbHBPbXgrQkhZSkpuZnpBYjl5dXgyTEZaTlI1b0xEa0NTWGgrWFVweUZITE5rZHYxK09Ta1RwQWxYUk1FamhIOUo4N25ZeTVMT2h3YjI4UWhhSGJ5Qjd0ZEZ6UmFFSnFNU2RyRzdSQVlhNHBBdjgrYS9iMmlrajVxMzM3d2tmYkJ2bXhNd0NITWpnZGRGV2FzdURmbSt6WGpOTFFEczZJRlIrV3dHcDRZS1BqaGc0NHR6SDJLVVhTTTYvZkIrYllCS0VlWS8zR3FnTkRPOTFVV0M5bE55OXBaMjZhL29tdkpCT3p0Z0NLRVhBdWRUc0x6c3AzbWJnWTdyVVNFZ1FUaEZuNkxlbFZUYWlEU0IvTjR5V0xlYmR0V0xOem9TM1hiZHB6QjZDdHIrcHdES09kVVkrOFZ4U0M5ZVJYUHo0d0NyVndHYWZHcmswUVI2T1NjZGp1aDhqNkNGT1RpS05Pbkx6cU94TmIrWW55VHVITEJyZGJMRlU5a1lTZmJwYXFScElRL1pGcDVLZlpVM0xPME9qQ0UyNjZZZkZKL1JYQzJaZ1ZBbWIvUjUrSDFlK3NxRlRNWi8wU1QxSkZzbmg1Q2ZGekVxcFlzN3VKNzdBcTlmU2Fma3lFcVdaQlhCTWt2Tnoza1N1SWhIZ1ZkSXN4YmJ2d1V0L29KaXVrbzE1b1BIenZSNGNTVVQxcS9KZXNHcFVoK09wRlpPN01JV3l4NmJUY0pBQkthbVBaYzFpdWJueUZoa2Q4YTRVM25vWUIvWWsrY2EzVEwxcGV1VUxyNUpMZ2hocUE3d2xxWEMvUnpjUlFFeFExeHJBYmFnQUVLR3Uwa1N6cHVjeWsybitISWRGVXZCMGlVczhNS3U5OGdlYmdBbXZmT29aWTVPUEJuQjNzc2RaMlB4OS80dWs5SXlCRDdPWmNKRG1RR28vT043c3hCQVFhWUZGN2FpNkQ3SWRwOExZdjUwNWNGeDNybHc3ckhOSVN0ZDBPMitGR3NDNWkwMkIwb3B3RFp6SWJ1ankxVGRHbTBxaVcySm44bkd5ak9rWHo1bzFWeGUrelFEVVZpVVhGYk9WcjJ4cGEvUlE2MERVbXhsa1dzNFpTeFlZSHJVNWVERW80Q1R2dHBqdTQ2Yi9YRFIxd0syUWI1VVQ3UnhSQmdnbWdlczFGQTZPUmlacTBhYmVqVkZjRWhLNytnNThjRDR3RVE3Qk9rZCt6bW1qZktNZllzaGE4L2xnWlBTTUZFOGZTdGlES1poeGVxU3o3a0R5Yk9PNlNrWTRSTmRITnkzMnZPajFjNWhQUzNrS0VWa29lLzJHTGJicHY1Q1Z3RjV6dUF1N0NKSnhvM3RHa0FFR1VHb01zQ3FYUFFMZVRZNlJPS0RKWERlWkxzZGVlamFHSXNxV1NhSFBKVmJubkJPc3JCNGdyMmJiY2ZRKzNzdkNzUGY3R1JseGs0ajVSMmhGQ1k1T090a0t0MzhiS2htSmRpRGhoeUZYWTlsSkVFbWIvZnhLbm9BUHlvTFIwU1U0RjFaWnJDWmZMdnFBMzhoeVFZRUZVdXNSMFFidFh0N3hqcWVFMzROb3I4V1FicFh2MkhmNUdHOHRQSG9kQUZxbEpxb2hmaUhGME5nKzFVWEhiTXRvVGVJc2NGc0dXY0lxbXNGSTRYMjVkWWJMSThxTFFQeGM0Tm94NGhvWDZoYTE0K0o5TkxJcDIwdlBETVM0US9kbzYwZWpEWitXUGluSG9RenorU0ROYzFHV1ZHMzU4VXZXRWlpdnFqc0NSV20xaFc3OVVZbDFqODY4SWtlMGx6VmJyTTk5QTlzUVBUNURxb3VONGwycTRYNDJ1U1pqYjIzNFZNbzFSdHE0TjYrQVMvTVU3cUxQTmlLMEtBcHVlNlBVSG9SN3pwcHZDZ0tyMk44Ym9qNEZjR2htZ1UvR1JVdWducE0zazMvazdXUE9yWHNJQlhxaEt6VFBLcHhZUER1citXcEtLc255VERCUUxjcW8yZHdETE9QUHY2SmpiVk1EcjNlbE5JL3NHUE5ONzZGMWorc3lia1lDdnU1UGl2Y05UaXFVdndMUHpYMlZYUzFjWVpHZFErSnBiNDlPYW96cUUySTZqMC8wbUFNMlppQ1B5VS94U0tQS1NkbUdsaXpuMnNnLzdmVlRoQ3huK251ZDQvNzRmZHpyaUFENVBmMk83MkRqV2Z2R3dNdEIzT0dNVGJ6K01QUE83UXRTaFFCeENZeHIrcGI5eFRMWUZCWEI0SDFrbDZKWFRjUG4zbUx5U0laMDBqdUw4V1JIT3JSUnFIcHAvaVUrOWZYUTB4K1BJaWxsbnEyZm9USDd4bUJmVGk4cEF0Nm9NbkE2dmRIcytkZ3pySU9JVG1ReXVjWDh5V0taVXk2a05wVXZxaEdmRE9sUUZGRkZaWEtwMjlGY2tPN01LVHE0YW9ZY3hLN1FlaVlBc2hNeDlncElaZlRHbDdOOCs5eGVOcDNjUmptdVdxSWV4cVJuNU1Ta01Xb2VLdHByaFRSdktidlMxZXVUejB6NVdLOElwUzc5Wm9MeklNcE5GZ25QMFd0ZVhpVC9KT0FJRHpNSEVEWFBQTnBBZUxPL2Z5YzIvaEJNMDh1d1k2T1BQZlZ5RExUOFVDT2hBekZuTkZqUERJejBUbkpGQVQ5WTN0Nkl6U1RyUFFaU0R4bDlKb3VLMk5FN2dsWmNQTjNETER2bnVNUm5tZjM0YTQvV3B4eXJxREJlenNoUkNxbTdFd0F2dTgwd2p0VFlLU3RjUFRJRUNKZDJqdHlIeVZvVzdNR2JURFJZUUZkM1dFbHN4N084WkJTd3FZTTgrazdNRXNWcHFleUcvOWRDUFZmUTdqdFdjR0NVK1ZhYkU5bXVlOVRsWldGelhaNGZ0dnk0enBMOHVISHh6Uy8wVkgrQlUyMUVCTDB0alRvLzljNzdLWVNlRUxiWWdoM0Q4bjdaUFFWY25PS0lIUmdIVllGV05HRjdNdURJR29YM3ZkMXhmRkVCVGR6L1FlRlFvTllvcnZqeHdVdFEwZWx5ZEZuYjdRQjRxLzdIbDVSKzJOL0VRNGttai9NeEVQTWpNNm1jRWtkWjNQUVlGYnNwb2FSVzdNY2ZUcFYwUnBwN3h5WHluZSs3Z1o4TC9GSFZEK1h3T0ZZTk1yMUp6QzlTc1hGTDRrYjRqYlROM3V5YnlkdlRQRG5aRnpVcTV3bEZZUmkvSHF2TDY1a2kxVVBGWSt6OElTTlNJelUzMktBdGxKOTliRExZVVdxaTZ5ejdiUjN4RGRZTVp0eXFiSkE3cHQyRmFjencvZWtFdHZRNXJYdHNuSUR5a0tsZmtPSWQzNVlrbndLampwWWs4N2xIelZGOGNiTUs0Z2EzWnY0bDExbFNRN083WVV1SGhqSHkwVXM3eGlUUXZkdkZrM21LQjNYSGJtckdKVERJT214OElVcDVNWGlkRjdaZ3l4SlFhay9jSWlObU5rdGlCQS94aGp2WkJTeno3bGtSZWsxU0NLVmVvMnFFR1orSUkraFZLdkpLeld0UllldTF2b0RFMUNJTHFPb3hURStpblVLNHFUVUMyZkZobnBVOEx1Wk9FSGpmS09mUjRuaDBTMHFYSEdtTlh0SXBadVRENTRZYy9zOWdSU3duNHlpbDc4YWhUWFRqQlZsalVPV1NxeERCdXFZN01VUkNpT2sxWDY4NGVwdTUrS0xvc3o3VHdhY2V3OHUrWHFudEVaZjdtZDVIN2ZhdlpBUkN2VGlvWWVBL1M5dnNtc3kyZkdrTnRrUmJtT2ZoVTM2WWxnaW9ZTTEvVVczNkswUGJteU0xNVlxYnRCSjdaSm5iN3EvazZjWWhDUGM4Q2tVbktMT2pSelJOUFZqQUFhQmxEL0VyanlBSVB3ZnJHem1DSnV5cWRSak5zRk9zSGtOT0lQMit2dEpZTFVsc0c4LzBhSkVpSk01NXZPQUM2RXpaUmVYK3lMVkF0YnFNRlo3WlU1VENRamdkcXVVUlhKYXpBTm1xbXdoNnZCQklmbUtKOU5lbDVzdWd6WnlsKzBWT0FEKzJOczR0NUovRFVzOGcxcHBRazdEZ1BrOUJicngzZzBDeW9tT3NjSDRhWDFtNmIxZzk4aWIySWFlZUtwS2lvUkpnNkg1MTFRamFmQWlOc1hIUlVPU0JOMkcvbEtxTlVkOE1NSGowakR1NUlTUjVNaGZhUEdQUllVVGcrZkFTb21VcHNzcU9SSlVpUUh1ODM1V1kxdHRKWnl3aCtEU2szdmd6cE9YQkp1NDZsU1dJUW9pU0EycVFDL3UwamxyTGtlV1Jsa1BxVXJrZjdxdGNHZU92TTVwNVRQNGh6ZDB2eTdOYzZWUFJ4OTd2VURzUnl4L3UvL2EwVDJCZ0RRTC9VS3dkdnJ6VzJjZEUxR3Z1QW56S3piSW0vSVlrRStmM2ZOMGpvM21idTZ3anVRVSs1a0U2ajJlTFhTd3pJNUR6cjAwY0JVTjRaQjFRZTh0S2x1SWl0MHlXRy9zeVA5WUxRSHd3TUxuUUdoUUJPNEwwV0QxcGtNUHVtNG5WYld5WmdBcXRJQ0NzclVxT2hwQThaOFh6QS9xU0hWWHZVSXlXNlFyV0hRSWFxUHhUTEhZL1o4WG45VUhvQ1JpSW1DUWVZUVRPUmljT2JjM1ZiVWRsRWJENjdjbENZUXJQZXJVZ3pSVVg3Zm1ORmNOY2w0aHMvaXpVUlA3aGNMZWhMWFd0N3FZT01KVWtFOFVZZVZaclRTSFFIL2NkTGc4SVR5YnUyVUpOZ2RRcTE5d21lSkpqRVdFSDV6NGhrTG41SGh6SWJIOXo0Zjl6NmVrMGxBb05WZ2svc3RjaHJFOHlXcmR6V0ZTczloUmRLcXIwZnFvN1hZVEVJTzZpb2R2YThPTk4rbFp0T1dUazVkaGZ4VTNiVVVqdHdTQmxjbFpPckRIYlZkcERxZGFvb21zdDdMcVFDM1lpR3ByVjhLeU5hM3hwNUl0SG0vakhGby9oekdGSjBwK2NWajRiSmZRdENEYko0dkQzcHdzSFFWcDZBZjRzUW5SVTk0cTI2TUdIb25TUDZIMXI5U0RuQW40dmtLS0JLRldPUGxkeWpVUHZRaDZqbndXNUFKSHdiZ0xZcHlEZ21WdmxUY3pCMVRrSHJyY2l4RkxDQ25PbHV6OXJiQkdaK0ZEWFdVVDNOcDVMRFRvUmlkNGI3bWFKOHE4eVNUdTdiOGQ5SXhDcWNZc3F6WlZLclFITFlMVEdJT2t5Q0lrcHU5Sm5HU2JmNDlnQjN0cHN3VUFEYzcyUXk1aGR3ejhsWXFtc1ZSWXRKcVduaTAyTjNHWm1Tc1hGbW5XR0twVkxabWtEcmRETG9MRjFTbGdLTVNGNnV1T2s0L1MxeURDWkRTc3R2NFpabnVjTklOSkxBdWJURlBaMCtzM3RtTUhhQnR6djdRU2lQQy9yU3JSR0N4eFNtMGQwNUcwTWpnbWcvWjVvam1CU0hUWFRUMC9hMGluWG1kN3B1cGV3a2NXWTJiS3NWQ1QzOXNVVi9INlBOaW1WUXJHdTMxSjU1bVpQbUZLa0N4TnIwbHdtYnlrTEI1UkhjTTh2U2F6VHJzRlVYcWw0WTEzc1NyWjlpdjBpL0FkcjlPanZzcVI1bVN0US9MREloTHpUc3UrS2RwSHlHOXRzN0VpeFFsb0RWSEwxa1JZWlNYeS84OU9tcis5MnFuYVVGMWQzQzM3dk8zbzZkMFExbHM0clRvRC95TXNEb3dKRFcrY01HUWpocEdNSE1KejVUNXZXU2c0VkNLWXIxUEZLRjZ6bVVCeVVIZXlyaEVWU3ZBSWs1NVFjalNadTVrZUk1R0ZEU3ZJd1lMcy8zcGgzZzh2bVVJbHlXT0ZDb0p2bTRwalE3OUxrUmh3VDNMUnJqWGtkQ0NvWjltYldqb2psZ1cxd2I4eTMzUnMvMG4zN1hacUhnS2o4cHYvc0RQa3dRU2lTdnNCUzdzYjJIL1V4NFExVVZpZGtLRmxHNWpySVB6cDVmSXBBaVFWQ0RzZXo1NnhqeTNHdmNqYnpFMWZVaENiMFBsWnpncm82K3VvRWJGTkxpRmdCWkUxYkdsRG9rTmtOeXRKbVU3eklVbjQ2QzA5WGJ6bjZZRE02QVpvQWg3WHdUVVhyeHVHcUlZVlkyczVPUTFpSFVTbE91UUw2V210ZGZMdCtVL0c1ZVJ6bkprUGdoREpESi80QThaNkhrcDAvanZXY0xNc1k4bGNkM0NvYWNYRlBWVzdOZzdDdFV4YURlR0kwVmZFL1FGbzZLRVhuQ3YyOEJ6emJjYW56SnZxUWxWdlhwRGRyVC9WM0JCam9uRkpPTEtlSW8rTXNiWHFtd2x0WTMrSktEaGsycDZlUGs0Y0R2NEg5V2xWNk0vSnRtNVNwZkRMaUNlb3JmTjI5MVRQb2o5aXZiMUhmcUFFeUhBVXREcnhQVlhrRjdnMFdIazhZYUEyZmFOMkxmcksvd3VkQmJJbnVJYU1wbitudVF5UmVwcHNGNkV5dGJnZ2xnZW5SZ014OUpFaC9JelowM2dqVDJCSEVqeXgrREZlZEdoMC9Zams1TjVGUmdZdTRhTVFyS3FkN0ZLNm9hTlcrdEJTQkF3UUdUSml1dkNYNXNzUmt1ZzViZzdNenBnL3FXYTVVN3cyRTNzNWNYL0NBb3I5Z0Frdm0wNmxKSkVqQXFJellhVlRxNEx0a2FybFNvMitYdi9YL3ZueWZmVU1PRnM1RUxJb3JBS05lNDFsZjI5dkhKQ3NvR2Y1NUJqQUxHRTMyYVNuZWpNUHUyT2Rra0JhZUE3bWw2aWM2Z1ZRaEdJbW8yKzBZSGdxSzAyQXhjSmNVS1RkelA1V1NKaGRTSWdnZHEveGVyWjBCbmZEREF5Tlc0cmtuVTlaZ0pnRVptUzBhS1dHdzA1N0E4Z1VPd1pvUnpHUFZlUmxnb0o4d0FZaTMxWFczYXA5c0hIQmw1OE5xaklQWVRiUmQrV1pMeVJ2MVZzU1lMOTE2SGxmWGN6akNXa3VMc29XUkpFOWRqN2FHeCt2MVk3dnRlSFQwUU5RS1BLVVBBb2lFZ0hyTEFhZzVDdjFvUW1hVEdTRGlIME15ck5meXlQQXNtUGt1WUtPQ1hVcHBvL1IrYTlEbEhNSG5nMGxuYk9mSnVQdmJBT0lDU2VuTnpzN0llL0VWcHpEUHpPWjJmclMvd2l2VkFXMUluWlNxYjNnK1RGWm5GTktUQWF3Wm90QzJrYUhERUl1dklVYWhhZFZSazMrbEdmMWRIUXRxTFJJNGhVUnFXTGNWWDduZXROV05nZE52UWlIVjR1N2dNdkczbEMyZ0hmTThQMDlPNDRMN2tCSzZRYTdYUWhKL1ROV0gxamNNZUZLVm5Kd1ZXSHZDNzZqaU9nTHFGSkczS2t1eFVteW9IZ0IrUEFtRlRwZWhYdlI1UUhvZ2FKRkFCeTcySnBJZWJHWEIxRVAwWk95dGJ1VUZZaml2SHdIT21KZ1hTUktvd3YrY0RYemlOeTRGR3hBeXVVRCsxRGpJMWt5QUR3K3hEclRrKzBoYi9kZkpzai9WbGdaZWJ4T2lBWjkrL01QZmhhb3J1TFlsSVo4NFJGNDhKZnE5QllpdUlCUjVRTFFQcGdaNDRMS29yV0NxODFMMzU3b1hvOXJDMHhpLzY0T3RSbkdtbDlzbEVqWitRYkdESDJJdHl5Zi9jOTFjL0ZYRUR6TGtyV3pvNHB3V1UzcW5HVHRNRFp2bVBmQ0ZyV2FUajJDVXlaRTBHenI4T1lKQ0gxQ3Vmb2FRdkM2UlozR0ZKY0wzTlpySi9CZUI3N205N2NzYmc2WWJ2R0RiZzcwbXIzbW5LYzB1OXFiS0JPc0oxb3h1Z1c1cXRPWEhsNTZaTExRTmpJOFBxSStUL3c1N0E3NDZoMHI2d1RlYnVSQ3I0ZHpMNnh1UHJNK3BoeU5TWTNKd2puMHFUSTdxQ1cvdjV1aWdSVlVqQUpJWFpzR3M5cUMwMHgvcW1FSEd4QjlzL2M3eVFiZFY2Z1duTC9jUG5EUGM1VTkvMGZ0ckJBOTlmTG1LTm9KcW9OREV1NVdwZ2MzbnBsN2w0UmpLaWRJbXVVQXFKS2xQZGE2ZTdEZHd2SWZhVHBLTFdIRkZBYTd2aDNMUW9CcWpoQVh5cTJ1UFhQdnhrZkcwem9NK2pPL3lPU1QyREtrdGhKUUJwR3NSYjdqOFZ1YkZYanBiOFRzbGJUakR0WWIvWWlHZXVJQ0liNzJ2WW1kM0MyUmR3WnZCRDhQOG1idERtbERCSitWekRueWFqRGVtOWlxOUNsRUxmNzJrMlVySWE2UmN1dk5Gd29rdElaS2lRUTJudHNyWU83aS9FcG9tMStYWjgrZVJMVDdPcm1BUVp2T013MGphdzRtelhJa2ZUZm9hVkVvaENadVZLdkRpK2IzZTZaWFkyRVBiaUlBU2lSVWw3N0V6Sm1FcmlRTHBycTAwc0tBUlVmSlMvcWQ4SmwzODl2L3FzQ3pWNTlyY2paT3hQRmtjUllQVFBqUzNYMzVZV2J5cEVSSUI3clR1WXhTV09oZjY4WGdUejBpV0o3TXluTnVCYVk0WXhUTmRLSDFYTDgxRmdFbHI1VUlLMHNsNEZGT3ZMd3M2NEw3WlNjRU5pZVI2OXloTFdCMzRQRGdoM2lEZnBBaTMxZ3FLc3lrOHJIaTFOUkxIMlRidllERi9VQlRRWHB6c2JtUmNYNHU4aVFlcU1NZC9iSjBzMkNRMVYxRTQ2NzdTeGw5UGV3SzE5bHRNQUNla3BpL2NCNnRZeWprVkxkQ1NScDh2bmRVYWRvV3JTVFNDNFBUY05EVHBzT1lYekQzN2VUajd4U3lTWEgwbi92SVNjczdOSGE3ZEZvSHdvaG01YXUyaGF3dytkRXFUVDBEK29PcFlERzJ3WktBRERLVmhRQml4aVprcFkrSU1POEgwTW14cUJkT1ZsbW5wRENLc2tTV2s4ZS9PNmNLNVdzSnpwNXY3d2QyVmtiRlRQV1pUUjdiRTBFVGg3SHpsNG5kSXZMbWRuclRtakV3bEZDbjZYTjRYZG4wZmw3QUNlVkVDRkU4aDR2eURiSWdYcXlKQzZTcnBDcWNjZHlkT1QyczJhRlo1a1hiQUpuKzRTQnV3d2huYjNEZkZ0RkNneWpWeEd4OXUxUHFrY29oc1MybUxsZDFyVXRaanlSS0FhTWYvb29SVXkyNHY5cVNOd1ZNSFh1SEZNdldNeDFSVlcwb21FR2xjeTlvY3ZqVklBbFV2OGRBRndaa2ZMbGdsZmlnT0NSdU5pTHdBSjVVNkV4YXFkdmd0ejhPajhrM3VjQmRvdGdXZU9md01CUytzbWNDMmhKQjZITWYrQitUM3YvU2RETVAxZXk5ZlAzRHdEOFAzVS9oOUFnakh1TExjNUxrM3JOSFlQOFNocnNQMFBsYjVUWW9rTmx2OGp6UUlYQUhEYkVCSTNrQlBid2VEeE1pVldkN0kvc0FiZ3JsOGg5WExhS2x1UmNIV1U1WTRKdUtDR05jdk5MTTQ5WE8wc2JycVp1WjYwdWpGRUlwR1ZqOEMxNTZ5RlBaN2l5V1NYalJPTnRuWi9uekhTL1VTNG9JbjZPVG9VQnNJbDE1NWJ1a3VxeGhqbUpzUkZLTnM3eXhoUUYvWHlybncxdkI0S01qeW12MC9aS28wMXlETjUvTXg2SStYb25FdVBjb0thVXlGWkk0cWtNd04yeE5oTDkvMHdqN1JaajF5Wi9sMncxeFdKVGcrZUpUd2EveTdJMTZHWHJzbStDSnRJaHhFVlRpSjlrY1BkYjVrditmWjJwOVhRNVJYTDE3OUNsSkRzRlVVNHN5dnVYcWY0SldWOWMvSkRxVkFmVythMFJMNUhtdTd5Qm1HMnNxNDAzNUI3MloyYU80bTJEdk9CcGdSeEU3dzNiQkJ3dFYyQVVmcEovNStqdGJ4UENtbGQ5enlpanFJWnNXNlFZcVhwbDJqTVBPY1BKdWplRWcrUEpmWW85RmlYQ1hKb2U3YzgvY2xhcVNlQ2dyUmNDTDlFZUwxc1hpVGJtRUZDNEhPeEwrY2hTRGw0bzZWMU50QjRWQnEwcmJCNUVZdG1LMkk0cThvMFZVcmFrQUU0UFBoTWhsWis1Tk5PS2RKamxyZk9iT2ZsQ0RPTWNRM3I1ZE1Lek5OOFNlZ2trMEpOejJqaVY3d0Rwc0dSN3VUVGxnMldCdzR3cGt0eUJ1ZzZINWVBRjl3ZHlQYS9lV3V0ZkRNRFYyS2F2amNocHg5Q3lOTWpVR3paWG9ETHJwOXAxMlJPcjFHcFk3ZWxwbGY1SzF6Zmo4dVNKM29hbjJGNUE3bHRpbWNQRUtoc0hhWXdrdDArVVQ2L2JUYTNPRzhPQ1JFS0pJaGlySzdwcXVxREtldWRMWlZuSy9LWEJINXFOQUgxMjcydktJQU44alI2S0FGQ0FHSGlrK1lTUml6T3RxM3AyM2VaWWh4cHJXZTRTMmNVMUh2OW83TW1HRytBbjl3NHZuY3VwU3ZsVU9zS3RtVzBPalc0MEpSOFp6VUR4d1lqYzUxVE5SL21JdEVVQ1UvbnVWbEVhdFhHbHdjVC9YNFMwd1hKem13Z0tuZzVJR01hUUFHNE1tWjdWTHk2Q2VqRDg1TW9mRi91U3kvV3hEdzl6M2VZOWlFZ2gxT2FmMnp6VVJFVEtNSlp1ZlRWR2E5bmVCMi9pemQ3cWtJQTdCSVpQdUdQMVlTTFhqVEcxWXg1WmdaZWgydzhFeTVNVXFqZE1EOUNlc3lDTWZ4LzVhQkprc0NqUjdHK3JYcU5DRGJyNjNpWXZYUmFlaFZYc3NOb3pRNmsrN2Q3ZzRvYnlwSjB6L1VIUGJGYXdBSkNwaW1pUnJPQTNVbXRQRkpCRDVubGdNQzdiUHRYQ0t3U2JxbXducWhwYll2QTN0S1N1bzYvVXdOcU9lKzgvNzJWaGtGYU1OQWI5bkZ0citKY3RIMndpZFpYZTFmaVFzYXFlMzlpL1NFK01hNGt5ZDFVSzlRWk5UZE93OW9ITTQyVlhJcUJUQysrd2hxeDJMWDdCN3Z1dHNBcDhmU1BjY2NHYis1QzVFYTRyZ0RQQytzVmllK2d3ekw2c1RMazUrUWhPN1h4V2VxbkxPRGlIZ01TMkpHT2ZIRzIxRzJjb1NWZ3V0WllhcTNMSE9vVmVNdFgwNzRNRUZoS2R2WHRMZW9ReXVHUXlsWGgrTHlwZUE0eEtmYUVjVGdkVnFtakdlL0ZIM2ovSWhaWkJqWXNCbjRYUE9aYzBMQW0xQnhFS0YxQUZBV0Fra3VjLzBSalMrUElKRUtQbHQzUk5XZ1Zad2ZGMmRzblBHeDU5MUtKby9qOGpSUkRON2ZmY0R2ZWZBQm45ZElwMUdPQkxhOGZrQnE4bHVCbnV5d1lhRzRrcUlMMll1M090cXdoZlQvaXV4d0JPMHlyV2thMmlhL2FVdnVVQk03VDBEd2d6Tm8rUjYxSGdxT0E1M3NjV3huU0RBZkUyWStGUWJod0dzZUJtSzZEMUF3K0haUmRpeUIrV1RHTWNCR0lBdDZIYTBRREVnN1hGUmhmclRVQW4xaDc5cWxXOGhQSi8wRnBEQU5IYllXSnR0R050bGpNWHMzM2RkSDhpVGlZb2E1MnI1OVpKbW82Skg2R0NvSE9RbmRweEZmcjFITzlIUzBEaUZlaFhyc3p4Z3VsN0VyRHExMzVzcmFGem96Ym5BZnlxa3h5S3VSNzhIRE1XbWszeHJVdDNwYm9YWUJ0akRkMW5qcnpadmJNejRQVTJhUEVaNkZJUHo1R1VyanArQmQydU9sMlRhNzJTMXlNZkdWUC9WaDVJbEdCTDg2WkRMTEZ4eFZmOW1vTUIvVE9SYjNFR2dNYThjeTVrOHIvSGVaRXkyLzlyaDU0dTZGQnoyVTd1OTRndGtQUFhnQjZwOXVrYlFwaWJ5S2M0SmtjN3RwRXJUZHpSSnUyaldhMUgzNm0zRHU4WHFRaTVnZ1VLeDM0K1Q5VUVxTm1jTTcrNVd2aXFDeENwSXNBOERDRHkwcEdsdGZGQ0t1Qk1ObHNKdUkwS2k3VmZac2dWa2RpbXIydTBhbU5SM0pIYXBJZmhjTVZUV1VlcmtYVEFmSFArRFNTRzIvQkdxUitJWnhZNE9SUnlPZGxBWitRRzZSS2taTVVDQ0pwZ0UySDJDdE9QNkpHVElYNHNzdDB5NHYwL0hTVWlMeDYyMkZ6aUhBSGNwVUpRdFV6SmZ6MEVXMjF1V2lIbHlLTmk4c2ZpeWZGU29EZSt4ZThCcTloa1pBRkVCcS9RQkJUalNMZVlkdzR5eGxmWWlxWm9VK2lZN1lQUmEwdWc3RkdReTA5SlBVZ1hpQldGZlN0WFQ0RGJYK0srQ2s4RG9WQ2Q1V1FTR0lUNHVSN2xpZnZRUW5GY3pDYU9odzMweHBmUGZJNVNSUHVUUCtYOVJMbUpFMGY5d1NBVVl3TE1JdlhxWmlxclBGTEErNU1PMnVCY3QxeHA0TkVFRFlUZExqemNmUFRzeHFvMGxyaUZCMlBNVmFQYzZRRFErWTBLdDlwV0NWS3BqejVGRlA5TENWUzVsTWVSc3hZQzBOYlFGYU44bmNlMEt5QWt2Vis2cFFvNW5sOVJwb3h6ZGNXUlJtN1pnNkFDYlNia0x1REwvRnZMb0QwYWVKL1dxSEtYR000MHd0ZjgxUi9BS0ZVdGxtMkNmellVZGVKT2hqQ0NSOGRFOUlMWnU0NktFQ0ZQWHNnRUVqY1UyUEdiSjQ3cGhHbWNZOXh2cDF2Z3pOYTZlc09PcHo5Nmhxc0Rua2FGV2lqYmswSWlGWWZEVzZNTENobEhRMS9kV2hoVkRJa1pXSzNjNnc0T2dReGhvcGY4T3Ryb0xoNFNqNXBYMXIvZUFEUVZHR3dmZWNtczl2YWs3VGhJZ2RhT2lOdk1SZUQ4QkF4Yjk1UDZ3TFBYL3FoaTQ0QXFWOTBRZmtNYm1UNTNadE1GeC9MV2E1NkhWQTZqNU9sSjVGMXdKVzRhaCtZdnVxRmNsOEpodnM4VGRmakVxMmxDc2dvWmlSZkdMaFAyUHJDWEFJRnZrNENWRHVTbWJhN3F0MU5oVkhGVDY4UXBTUFhGOXd3NUJod0Q2R3ZJWHpWK1dpczhybUtOL1ZaUkVLd0tWZ21qMXRKeks0MlorbG96WG1ZZVNQcVdmblVFeVFmSy92TGRadjlLK0ZsWnZ2OHd2VWNIS1ZPdEdzeTRocjgwdmVtS2grTUFvMFAvWFhRYVo0enRGdEZFRmI0Q0dQSVBsNklLUmRMdmVvTFFvY2tMenRlV1B6UGQwclVieFhsSlZTVUdSVmRRcEhaYjNDZjJ6OFJwTU5zSXUvOVFGTnZmdndTVHFqWjNhSGl5TXFDaFBxZmtseGFyQzA5ZDBDQUxBR1VwK1lKVHdPSXd0N2lXSXVjZ2pNSlVBWDNCWFRGR1BTQWdRVmlzdWZPeEUvNXBPNU5pSW9PVnR4RUlyNXZxelE5SndEZ3pNK2wvQlZ6MUplVDhocFQ1clJSalU1RDRvZ3cySXdiUlB2bE9pV3o3dDMrbEJEUXhrT2pIYlJqZVM1anp2OG1SQkp1Zjl5anBPR2d5UkxMa25mNCtrclBuRFB6QUNPKzJKSVlkUHZCVVZnY2lHajY0cUEwKy9PRENhZmRJUzlxM0JQNnFXNGU3RkdUMGtFZ0l2TTFrWWNFcTNETkRZdDFpYUVnZHlNUG9aeU1sb3o4cGZmejVXQWs3aHN5cE1iRkZod0IyQUlvUnIvaUtJSTBoVnJ2eWRhYXY3STNmRW8yTmV5ekNKRzFIZmI1T1g5VEUyb1FyN1c2NVR1TnBuNmdkVXZNU1BvaCtUNnFmKzY4Z2RMVXd1YkdtWVg2RWFncU96RmlYeEREMkNIMmJ0VWlUOERkdndwcTcxSHlmK2M3dkcvUUdzYyt4ZUNEY2owMDdWVjhTd2t6V0ZKdDdPcm1FVjJmTEVhdmppbXl2eEtjVC96YXM1Q2V0eVV3ZjdGL2ZDUEE3MS91UkhEYnh0SGljSXh6QUQvRmhkUGFNd3F2WHVvZXRDOUtrT1publAzT1lUalZTTmo4dGtodXpqcXJFTzJ0TlBnNlR3ZEdEaU1PZzBuWlN6Y1lMemFuWTl1VC9ncldsTzZ1MXh5ckJxWFBTZkR4akR2Q0d2amZhcG5lYW1KTlJjdVZqN0g1ejJoSUM3RG16dUw5OG9qSEEzeU45Y05hRXd5cUZPdUhhOWxYS3hJM2d1blRMdjM1NEJxcjZIblZYVisrMlJWb1M0UWdNWThtenhBdkNFai9hRWNtOUZBSzdNZjNTYmg3K1NpR0FhVDdPVFdiUG1uNCtLODltdktJN3RGK1RqbVEvTzNLM05mdjI2cmJBOThpSnI4WDlUQ25vM0VEb291allFTDNrc3JFYm41N1RabTd5T3dmbUpYUnV4akhuMmY2bE1tL3hKOHVmZU41VjBMQ3ZNZHhiNXZUUVZJUmdJSGNYbW0vZStaMjFHK3lWcDJtamJlY1ZtanJ5Um1zQnFjM05ZOGRvNWcwVU1DSERTY1dyZDRRa1ViQW9DRjRlL1lNMjJ1NUxKLzJhZnlJenMyOXhETVNBNGdkSVFQRFA3Y2l5YWU5bkVqOFJyVlRLQUVDcEtEdW9BbVBxZzNpWXhXai9PRVVRekZmNXA3aExoS2dLcVpTbmZUWjd5dTNnQ2JrMUVBclBQS2RqT096WnA0Y2xTYU9uSVBqbjEvOHNLV2lBS1pORVkyaUNhdlhmR3RETUFxd2NPMUJOenRTYU9wSWNYek1nTmhZRXdReUJSY3RiRE9GcS92SjlCUmk5a3dhUU9wamFjOUFGcUpnOTgxSDIwRGZXZGIyaCtnS2lZdVFKNmpKV0UyT1VVNmdnc0FRNTZMcVc3cFNFRXZZUEhhZTNXK2lyOGp1T1BkZEhlMWcydGx4WlB6MkRIUklTS1ZMZytlT05neHgzcklMNGdJbVhTanlHRXkrT0pRM2J4UFNzSVU5VFZPLzBpSWs4emtpZ1pJTW1DcjZwU05LMGJsYysydWNVMHkrVFZkSjRMVzJ5TCtJdDFBcHhlTnFOWGtFcnY4NGJFMFBEdTBxeXdMTVg3RVdHeko4M1pYWEczYUVRMk9nWW01ZCt0bTNJRHZKcmtYWlBJdndTOXE1aDhJVXZHZFpEYlZyTWFROURIK3gvR3FCWXdyWC9ha1dpOTV0Ym1QMXh4aE0zbEYyTkwvaG1YenlDanBqQ1cwbnB1Q0tUQ0E2U0MweTFIQU1rSnVWZGtXb3FXWGgvZmRvU2U3dmJWblFpUXZnV1h3RmkxL01jV0ZFU3FyVFNuUVRaRnZQZXo5S3FFeDB1VzF2ektiT3B3Vm1wRTFveG04RHBlQ0FCeHpnTzk3cmFUN1FmR3ZEamZHMlplSTMvYkt0eitIN2V0OUNhZ2ZJd0toc3UvMWNYSWpLbmNOSzYwb0pkSjROYS94bXJRV0VEMEtnU1Z3aU4zT0NubjdFV1JEWHMvSFVZSjhEMDBheTFBN1Y4VUZFZmlBY1N5Y2t0VHBmemRNQUNiWE5YeFpiWWtDbDlmZ21obmRVZ2FmdXhzVFp5RjV1cWlCVzNqVnlxb1VXbnZpR0ZSOG9uRGtmUUdua2JqWVYzRXQ0b2t0Rk9uK2JlcUttNXFKTGxjcG1ZK1BoSXk5cVBDWUt0dktxRXRpVG53RlZmNHJoNkErQjRBYldYaE1EMzhMMkdoRk5MSzFiVnRCZU9NMUhrTXBNdE5nV1d5RjhURWxka1FxZXZkblVHRWV5L0JxSVFsNWNNWmkyTFE3WGZXWU16M0NrdUpldDkwOWJCbVp0MTArRjZ6OGtOWG5jcXZBcDQvSS9pMkkyWDFBSC9YMG5yQnh0WkJ6aG9Gb1RnZHdKV1NRWi8xN2cvMTBIeU9JTmhvQUhOUzVIOFh0OUJYZmx3WDRqR3hYbUhtMDFEem5jcXFGeTJyNWcyNHQyajJZRHEzR3o3aDlxQVdKMWllNTRLcThaeHF3cnU4SFF6Z2VSWU51TXY2eUxxTnQvdGFPeE90NG9LMExrejZKRjBwbmF4R2JrUGFuVjlwQXdxbWE5b0ExVHBsUGtybW05VkwrYy9YRHF2cU5hUVZsUldtVnFwYnpreGhEeGlCbldiSmhENU4zSk54RldGR0JQcFhmRkpVVmo5SDdVUXlhc0tkS3M0THU4VmU3Tmt2NmxuVDBFWStwamJlY2VaOTlWa1NZKzhsZHRLdFRFYmxZazU3SlJhOFQwc2dmK0Z1YmEyZTJoWHFHQnJNaGllNy9hZzlzWmMwYUhveURxUDZwV0oyRmxuNkVnQkJ5VzdFQS9uei8zN09NZi9KWnRrQTRMdVViQ1BkaldRZ3ZjZ2l0cjJBY21NczcvYVA1L21rekx2WkJXTk0wcFR0UFh4d1dOclBMb1o1V0ttQUtYOFV3a0VQdVhkblNWTWwvT2NpM1hwVnhDN2dQbVhONFpHNEdBTkx5Y1o3aUcvVkJHd210OFdtOTFacVRaUC9zd3R3djNtK0FZak81UFRmMklsVmxwR2NiVHgvVnl6d3F6QUtJSUZneWJjeHdmR3A5MW85NmFMYmozSzlwN2tReDBJSEtoTyt1b3RHSzhwSnJDNzZQVjh2Vmh3eTRJaFpSYXZjMVZSZGM2UFF4Q2E3TllRMDMvKy9rQUJnYmQ2VXFEMnZzTlN5UDFvUWV6cXEzNFRsS1F3NlpmVFh2M0VqKzRCNmZRVlBSRDNydmFKVXlYVGtBME50bmVMSG0wbzlDbDlFR0JSZlVOTEgxWi9XMU9ZTjB4cnlINTNYNXphM0R6Z2NEdG9XNEdoUXJIVXU0SDZWL3haM29nQXJ5SnlmYmNtOFkyMzBXNmt4NldBejJwMUkzL0ZGVk14WllWYmNHUnpKZCtjV3c5TVNyVVJqMXZMZ2x6Y3JwaVFGV2ZSUWY2anBJRnFZem1jemkrblJldEI3UVVxSU51YXUwajg4K1F3bXN0NmpTUkUyZnJITlZGRWxubkRtai9mRDZBZmZnMGFzK2NQeGlzeU5GK3FzSW5MSkxhVldrSVBjUjFNRitieGdwdE9BdmJ0ckpMbitVbnhiTTZITS9Reno4VUtJN1BWKzdmMjlQWk1XL05HMk1DTzA2Ti9EWDBCbUp2alVOTFR6TmlUeWJKdHpCSm11TmRDcEdnYzBSVElmRkRlc2c5N1lWUjFkN1hXY0xLOWhjN0ZkcVI5dHVFZkJpb0hXY1JXTXVGVzlpd2UzL2JibHFlenZwZGx3K0FqeTRadStTZ2VrMEJpU1JzMnZ5R0FoYWhCZkdlYzdCK3ZaTVJzVVRaRnZHenlLTG9OaFdETkxmenNlWXF1R1hCbnJLeDhiSlpzMjFGanpVTDhqYm13MnNWSSs3YW9IYVZwK200WjhWaG5jYy94dnE3MGI2dXRIOXZyRmZ0N2F2ODNzZ3ZxMzI1ZnQ5TmI5dmJiZlY2ei8xdmRCMzI5blg4T2l6aHZxN29QMjljbDlYb0dYMWRnZS9WMUJmcTNUUERYY09taTlyRTkxVTVCaG9yRUN4ckRWWExnRlUyWDhFMkJrUGFSM2xrbFZMK2VNNnhna0tGZXRpV2poWEwxcW1kdHV2VHdSNlZXSmNacHRJK2ozakxWRytHTTZPSlc4SXZ3WUZIeFZsblJvQjVBbEF6Vjl2QktjdVY3THROZUJJajJSKzQ5bVJkTWNkT0d4Z3dGNlV1b3Z4TFIwQWtFcklYb2VXcVRFZDc5UTBIYWpnZzJmUVZlMXN1bTBuSFN6ZkJNa1hUQUd0K2R2eDlPSURodWQ4M2pIR2xsRklrQUt4NlBoTEoyYmt0R2JBdmZtVWtLc3pxVE5tMjNkSTgxVldOcEZBRmJ2c3RhbjZmbk9CTDJxanFpTXgwSjBONUJ1bW85aUs2SDEyT2ZhNHBBL3JhbTZRR3hnZUVNSkhrd24xdVpGeDJaUW50eS96aVZpaUxnVHdsMCtsdUN6QldtQnJmMnhZQXcrbStTN0gvaWUyK0JSVkhuQ3p4dUhvV1ZBUDkxMGRORnY3RmV6b0xML3dKWENMRGdWcFA2QnIwQldORGJIM2U4WHc3VVU5RzZaWmpHbzdwaDZDUGgxY3JmQUNnWXBmWlNoeVNkSTdSUzZScmpFSjdQVGxFTkNjVGE2aW01SGxZYjdYcS83QlBCcVNqQWFIaDMrdXB0YXFvVDFuajh4NkwzdW52OHhOUURmUzBTMTFibThaYjF1NTNMVko2WWNmU2xTWWRaL3JPbWZ1YXU0eHF1NEM4ZWZIaysvdk02YTZCYWJQd0dydjFMOWVhdnFhWWRjbndRcHMxT2NRUlpUazJrTENMQk9GeWtUWmlSV0pxa25qSHFGK0RxOG51aHZSaHdOa1NNSGNKSC9lMUp1aG1EZnBNMEZxVHBHc3dZMEVmRjFUR0RybEZ2aEhsK1AreHVwMHZqSUxnMno0Q3gxRGl6SU5WcTU5Tms2Nk5aM0R1V3ZmaFhrM1l2Q1czU0FKeFFTVUhOM1VwbzhuNmlRZ1dOWFpDRFFyd2FxMFVxWFdFT1NSRDVqNGoxL01SZ2ZtTFJvaFhxNlVyamJyM1hyWi9rMnZyZk5UY0sxU2VGR1pKaVhWZVlhcFVNdkorUXByNGFkcVg3Mm1ZcnE5d0NYT0lQTVRJb1RqK1phcUxwV2QxM0hZeStkclBxVE9xekYvNUU0VisvZldDSzgzQ3k0M2dxZXN0eUorNElqb2h1QWR0bUVObHN5dzNoSUhQQ1dHakVlRDZ5RG5sRkR6UVQzOFJlalRDWDN3UU9sbVVJUkNVbE4ya2JPSFBXV1hDTjhVeXJaM3FIUXFvRkhvTWZJY3lRajkvOFRreFhhL1FWV1RXMDRobXVMV1Erdzh4N2hnQXBHVkJYcXlUTG5QOEtYNGRYMVlVSXdObXYrT2U4QU5JMGFoWlowd2h1VTdlcy90K0xEdjJ1RXkzdzFQbVJxZkFaUy9yeXU1eWswd1o4ak1RWnhXNVcyZncxSTJqbkFSNFFEZUNGWW1zOVp5ZXVBakhVd3ROMFFHS1cvMDFMbGRjMFYzdmx4OEtFOERpbHdlQyt0bk8vbzJHemNHMWRVcGNYbWdtcVVXbTNIci9lblZtRUlibjR1OHhTSWdZa1NxL2V2M2dDSmhBVXpOeGZOQ1drV21BU0NJRFhldVhGMFhPK2JsR0w3UHNBaGg4c1FoU3VBNm15RGw2ZzdnNGFxRHlmWWdrTTdySkdqRk9LV1pCbDhYRTA4ZmlhcmRUUXlPZmdKamNaRzFoaGY3dVhQQVczT1ZuUmF2c0NyaWNMMUUyang0TTRHRzhoelZGR1JnVHRhNjg2RXFpMUMzMUFTNCswcWZtK1lKZ0s5YWVJeUpJNGR1emY1UFFmRW5nSlZsd0E0QlZSbnltWnZwOGVaWFRTUTl4eitOVDhkeVhVbGxsTXVYbWt6Z1FTVEhXeXpQTWFTNmI0NWtISTZjV2o3ZzZ3NlBMaFJPRTdqU0hTd1o3N2tnaHlUUUtJN2xxR3ZQMWpudlJWOEtwTEtFYUh3bmFQNlptZWFJQWZlSzFRQWkyU1hNSkV0R05ITmY3dDJSSGNlU2JZUUk2T0JDbnYvWmw0SWwraGNBMmhPQW5pSDBNVmdZREhqY0MxVzNlUGY5dnNJRC8wM1E2YWwzcmJxSFMwTUF6dzl1N00xOUtDbEFPanJtdlZQU1VoYXVKVUVVMFRldEpUTGFlaDZ0aVNzcVcvSXFiSll4Y25KZFk0V2ZYckxhYXh6SjgweEJsT3lGTXZJTFFEOTBSbXRIWEFoaVJxWXRxdElXZ3VHOGF0bHk0Z3RVYVMzemFhWVp6VmM5Q29USGwvUG5zRjFtMUFnUHBJTWQvVHhyam9kaVBXR3ZVUFkyMFlLbkFNakFtVW1zZHZld0IxTmVORk81bEJXRE9mQ3lYU0FOQkN6OTUycXk3a21KbGRKVVFrcEMvdjNHTVUzaHE4OHFETW1HWVdyUjlUUk53Q0FRd0pIQkp6V3E4THlDVFljM0RYUk51Z0JtZkUxbW9BMEt2MTdLOEYrZ2l1cHRSMlFtSGpnaHRFZjRkN1JXUnhCZHpYcHBTWGNza3VzbWV2OXc1OXl0MlR4akRXV1Q5ZG5PVlpJQWNRUkdwWjUybnJKNk16KzBJcW4rVnV0T1JlRU5IUVFJdmVyUENFeDNZa2puUjVLRFUwdEQxUExjUitncENhbE81R09GcXJqcUdNRmJGbTVEMFpIUlVNek8wYzRtdUtsbEtVOEhoYkl1TytkNThFQWlYT1FHQWQrNUYvSk42MGVUV3hvaDV5cVJ1eGk1NVlHVGc2cllQQzVKYjZiOEtZRlJwemJhcVY5LzVMYW5YUFBTRXR6V0F2dnB4bm9YdEs2TWdqeDRCWitYdXVNY2ZlMkp1K2lwU2g1Q3V5a0VYbWQ0WnJ2U0M0bGdIZ0hCZFkwZStxZFZUQnZKM01COFViVmFMS0xHamtIalVGZ21od1VWbWlZZW1ORkt3aXF3UnVCbVFJcDJoM0M0ZG9uOUJ1ZktteklyU2loMVNnTFlUTEZMUmd2Z0hNdkRyc2dvRU1SUTAyWjh6TzdteG45R0h6bm9GdWJUWkVHenVJVEZpL01qNWZ4MXEyeVU2VlZuVDAyaUZEZjRWdUVLbUc1M0RycDFFMnVKNVJYL2ZQbzdhUkdiKzdGbW1oT0VzTmc1RE1HVzJZZFNYK0VlS1BKTE1CRHRCaEZsRTZkZDRXTGpRWHNQSXU2Q05xemJ1L09hdmN6aDNBMUdoem9LL0tvN2Zlc2lwRFBjenpMRnNSdTUwbTJqVUlNZzY0MGJUTm9wWVJKblVXMXA2WG9RWkd0ckVJQjlyYk9BeVJxNXR1VVpYRC9iRkxkelAyMnBDRHBjMUFwN0grSWlpTTVFK2h5Q21nNCswUmVwa1FoV3Vsd1hRYTJVa1ljREtCNDNlTXpqcHZXQ2tERzFSUzFOZHZwUGRBcmRGS1pEbXdVam5YMExXMFY4R0RCUVdSRU1zMjFQOHduNDZaTHFiSVpUNVBaWDRscmo2ZXlHY0RZbHcrRGtWSzREZk1OTUdGSEtsQjRKSFZnUEVHNVcveTVBNUt4dGlldHl2MXRBaWU5cVpzVTFVZ0NrM0Q1dTNkbmhnd0JxdlhGQjQ0Qnc4YnR2K0hwS1hVMjA3MnAxRm16N2dQK0k4Wmw3SXBRZGZUM2g2UTkvaE0yUXdIZW5XeVdERk5EamNEcitUb2xmODVTOXdSc2lzWmVUS1pmakFlNTFzekhFbDhpOEF6WmJtZkh3Z3RyUVVyVmNvb2ZiODZTZkZtWERSMWxMeTZPV1JBck85bHErRTlKUVdURHNqZ0FZdnh2emVXTGlQRGdGVm5lNlg2SUp2VCtkMDBqYlJOaGpaTGVLcmJRTFZoa1M5SVJYUm8zTEYxOE1tV2JHZW9KOGJLa0c5SVNkOCtOd2lXUXJWR0JyVjlNNG9VVVdmTlFUaHE0Zm1xbU5mbWczS2hsdkhwSTdySUN2Mzk5VWJKSENMK2FMUUxSamlDOEZvZWsvcDRuZ0w3ZUZBRGtNV0gzbVgxbmhrcXlmWXZIelRacWZueElsbXNYS2dqSm4wRzVOUmNLQmRteW9taTlQaW5qM01XWHIxRkNYbkc4WWNYWWQ1aUlqK2pQSjZVVnNzUXkraG9ad2tVdFkwWCtzTnpoL1U5WGwzb3QyeVBZYVI4bUtUbDIzSmlTd1B0YVp5UnNoZnd5c1pXTGlXNWYwdkpZWjc1UWxpcGtFMHVTU2I5QmJ6Y0Q3T1B6Qi8zTDBaaW5CaFhnWnJEUFpPdmF4MjFOTG5wbytGd3p6WlZKVUh4dzRJN1kvSUZvNWg0MFVEVmp6djRSSCt2NmZvTDNTME5xYVc5SHNvc3E2MlkyTUlqV0w2dE56T3VuQWJpNkR0Q2R4V2daenBna2RFelFBQkFMeFB4T3VBazBVL0xKRGE5SjlDVW1MMU1IaWlQOGVjcmZ0SUs0TFJnTlR0b1pVQWpCK1BMeSthMmJ3eWQwWkQrNWJIYjVtRHNnajVMVE1CSFRHajkzczgrZFFNWS9nTU5Rc0dVb2ZYQnpXN3d3N05SdHRjNUJmUStlMzNqUmtIb3AvM0J5OUpJSks2VEl1MlVLbEFOcHIraTZQam9aQVdqRnk3UkxWOGQxQnR2V1JjNm16OUZuNXZELzAweGJrYm9LaGlHR2RnMm1JNXhJbWhEZHRucGZIdGZXWnQwKzd4Q3V1eURPNXBsdFM2MENvdnMrby9CTjJVWmlvQ250TWlmVmJMODlsZXBVaVgxdUgvTkVNZWwzdldWYlc2Y2krMEVqODl5Tjhrby8ySFk2ZzhFUTc3dVg5UnhwdWZmTlpjNDAwS09kVjBsaUgvUnVUbUNNTGlTZ09xL3l6VUxVM0xvUVZ1UmZJZ1hjL2x0elJHcDlhZ3JqMk14QVRJR2V3WXl5SXduVVFlWmtMVlZ2bGhZeU5KQWhNdUdwL1hMT2tycGFWSG1pVFBEYVdSd1ZOenFQOE16c2o0ZDl2OG8rUE1TUS9qSi9KWnRETVBqRGZmQlRMSlpFYXE4VHZJSDlxejJkbkxUU080ZmNVU3VISS9XNnNWVEpZUEhiV3Y1MlZzM2czSmJ1T3grcjlCRjBzNGpuTk8zMDgrLzFhL2NLejFwcFZkTHoyV2w5Njl5MkROS01GVHl1bGV6MWRmNXJFZFlOOSs0NkNBaGcvMkhrcTdaYzkvQ0NxaGNPUm43aVFwMk9zTUZWaCtBWWhTVU80TG14ckc3S2I1YkZZNGRyQVRQclNBQ3JmYURQK2d0dDVmRUZXV2dhRi9kNzNHemN3VDcxZHZkd3RvOWlrVlNCcjRwQlpWRy93YUNKZDQya3BOeVVoOFh0VncrYWZGNEwzb2tPT2pZQi9UL2Yvb1hIRmxKTTRsd2pUVk5ITUdmVHZaLytZQkd5M1d5VlFkWGZPZk1LODMvWXhoODdxVjNjMGNXVzV6d2d2aVZzYVh0Z2hNanQ2MGpzNXN6M3M1Wjlxb3Y4ekkvd0xxdDBNQnpIWUducmVEVUVXWHRGSGNCU09ZU1JJK1E3dUg0eUR4b3pDbW5kZ3hGQitlRkF5eHBsR1dVM1VMRTBKdGJ0ZGxZR3RxbWlSTHVQVEQrVHdRbzF3RE0xS2RIQmlXLzJyV05UenRVNE1CZnI4Rzl2SFE5MGR4aHhSbXErSjFnVGxwVmZoVEpXTHdHYU5FRCs5Wm1TY1FhZWRsVVdYSGgxbGIraUxmbFJReDBRbW1namZ2NWZ3Y1ZJVVA5UGlDd2NIejNYd1ZxZEZVT3I1K0xVaEFFWGgwKzVlTEJXNWJVK2VadWdQbGg2KytZNVlpZ0hzd0FpcGlJRDhuRXpDWkxzOHBOaTZkSWg3Q0JmQ3dEU0YwZTJIVHNIYTdaN2ZwM3krcVZMSUtoL2YwN0xTNE9VVzRRL1lvZlQwSVlodEFvQWU0b0x0Z1lpV1NUQy8xdVJDZXl4ejBCdlJKRG0wL2xJRnZScVVsR2d2QzBDd3JQWGl5QzdBbjFIMDZ6OU90MWhuUi9oQ0dYeEU4QnFCb0hnbWIyc1VtbmdWT2pBZ3Racks5VncrUDIzcVQwZ3VFclRwREdraEVDUXlhMGFJakdzOHZmL05PVzF0NUtSYWc4dm5TVHFJcWVBeHVNZFFDby9wQWhTZzNOenlJTXhQSHdIdFFJWHRPWHhqREkvck9hM25SWVFieTdObEhWcmtia2JZYzdGVUFnaFZmdTgycnlvNHV1OTdpUUI1VTFZaHdMRUlTTS9rb25vVzRNR3RyY1pTemRhU1U2dkszMFNmMktXM1ZaS3ZHMGsrd0FlZUNJNThSVG9VczRzNVhFMjZXRnltYzd4eU5DSGg4SVh5SEtOZStRNVozanYrUDFlZm1IM3ozTGZocHJoK096WXM2RjM2TTIxcjFJUHNQM01vRFBkWlFleVc2UmRLNnEvSkh6MkRUUTdBT09QaWxORjRVTmlEaHEvTUlaMFQ1RWZBTlBURHpVcmdoMGZMYncxclZLQlB0dzVOd3NJaHl4cC9jN0RMOUQzR1lnQW1YNkdmbXExWGtJcmxqb0dHV1BYTW53VGw2SGdjek56clhtR2lxQVRrWTRQRG9lTXFNeUJKME96VlNxc0VuL2VaQkpXRHNHaFNXOXA5SU1QUVdxNXZneEU5MkxjNENPUHp5aHMyV0N1TldLWk0yNmt4VFNYb2lOaWszYzVINVNnMkdHdlp0YmVpOHVBMnIrcjlLZWZDVWxXL0RUVHcvMi9iK1BtcVB0TFh1SHJZbWdxaEJTNmJraWEycnFNcVFTRXp1ekIwM3ZCMEs0VzY5QWFrRUhZdVBFdjhzSGtKZW04MFBrdzJUOHNCZGQzSWlOdlprbkwvd2JTUUdKek91QXNzZGI4TWRKRFBSVnhyMjVYVEx1TkNQbXIxbzJ4dFM5NnBWQUlhL21KZFhwdFRsbUZtYkRhVFlnVFRIU24ySUdDT0ZBd0d1YThrbVBoekpoOEZtMGQrVzVzc1hXdDhvNG16cVRiem5ubklWOElYd0YyNVlZMnFTVXV6VjA5Rm45UytZdFFUM21POWx6TVZVVXg4T1FhL25ub1pTNktGRjgranlQT0ZhRVlJd3lQL25JTk5hb2h2TThXM3lNSG05c3NjcDM2UzFPNWpSQ1NybjhpTUxHZEdmTnptY3N3R3lCeDZFRTF0Ym5zallDQ2oxSGg4bUd1ZnBDelJMNk43ak9EblQxUGhsTUhXUUVMQXVrZzZzRGNOMDk3ZU5WeEpjckVzb2pVK1NOMVkwY1djUXNYRUdrSWRNdlR6VGYxZGRiajBndG1rRGtwVlBXOUUzTDRDUGUrcEI2OEhmWktNNFI4dzZSMWNIdVpqSzVMUmZBbU1SZkh4RG9xbHFHM2w5eUxnTklMVlhwTE5LclZLaURLYzlLZTE3Q2ZyL09qcitmN0d6VmdJeVpTRnd5am1nQTA2dmlxK0ZCYXY5QXJNMnJtdWNjajRmQnZHazBieHJ5dW5OWndyd2ptRzVGQWJLdU15cEN2Uy9jeVYyci9MMXlKV1kxY3VFTzJYRGptaTFWVG5TM05IMDNDWVYyaDg0Y2Z3ZTF6UnpHK01CcjNLL3I0cjI4aWJtSUZOeGFXcXlaV0JsVDNVNEFFb3VJZG5PTFdUY2xKY2tCcDlWYWUrWXhic2NHbE9sZ2tRekxvQ3cwWnNhM2dHMmtNcWxONUNTT2ZWaGNRTjEzMGZ1QXhSMmhGek4vcXFyTHhMMXR5VExqN3UwRmFOendwYjdQOFdxM1RmRk1lZFJ2Q3JVL25iTTY0SVRBMXVKT0EwdUVBcURyQmM2VmJNOXVQZGxrckt6RzJDcTRERXRBNUhNR2hZcjdMNDlXV2Fvb1R1YTJEL1ZvL0xQK3l6cUZsVG02WXU4NEhKckNHSUEzVVVFMzc4bXFNYm91NVJMaExHQjJCMVNyZVI0STd6eFIxdm1lTEhkYmg5YkhMYWFsMjk2OFR5bGhsMDFEcnNaK3ZPYkNQUjJvK0NZdU45OEVyYmErdCtnN0pBdlhYVWl0bUFsb1BFRklWVTFmVVQ1S2J6MjNCRHlMUUlzZ0JXMzhhWDdKTXd1aW9raHZ5WnBBdEpUM1dyR1ZRR1B5Y1dwVnJubFM1aWNzVkk1ZThFcG55NEZsb2JBVS9jUG00aGEyQzFaNzJtd3hvbjU2d1Q0NnJHZk5EMjFWbTd2bkFFbllSY3hhTTVlNXVoZk5LdXltazhhRjFPalcyaDdqSUNXMlA1SjBWMFhhdVpnaWc4d1dqOVR0L1FXbUZ2RGpzU3RvZDhabzYxUVBzclFzRmtXYmRoOVViTnN5cEJWVGlwY1pqMnNLTnZnSzFLWnpUb3ZMaWFDUE9CL0R1c2EwR1UrRjA0ekZIQ1I1ZXk1cTBidjFIdjh3bmpxM0JSWnhjUVJybXZFTTlyMjl0Q3dxSUY3VUZ0QUlQVDJqMk1YZjRTTHBJc01jNG9vK2ZiM24vQitncFJxU1U2RkNGZ0hmWTJKMCszVlB4WDFZbXB2ZkhLL01aZk83RGNKNHVybHpEbHRaTUVkUU1KRkZweDM5R29EaSt1bHQ0eFZaYytrK1JVUWtCcDNqUW83eFNJUlhQWVFHRmJDNlVWVnpjb2MzRXBnZDhYaUpuYjR3NmplZmVZTEVyVi9mMFlCZVZURG1KNGFKNW5ZdVVNdFhSaGowN3F4K2RvWlhJNzVnSi9aUWx2UWtlS2F0ZFBvcXlOQzNXMm9kR0c4cUt4blIxbytEanlMU09yWVUvd0w1b0lQSS8yNkQ0WldjN2FLeVhSWFRSbUd4VThueXZzQUR2ZWlVWExzc0JqU0tGTHRRQlNOcW9WYmh4em5ScDBYRlJRRlNHTjZQRElwODZ0ZTBTcWphYm82YlJhUUJubUFLcGZleVYzOXR4V0Niam9QbVRDZUhyWUljZ0g0a1JrOVJ5SjVZZ29XWUt4Y0JYT0g4VFdLOTJFYkhYam1UckF2aEkrLzExQkVLRW1NSnlWMW9DQlBHQW1wUzVPN28xbWZod1dNUWxWOFFUMkNyTjQzVzBZU2VpTkxiSnZFVCtVUVZYc21SR3NlQnpqMkM0OFFyZFQrMGVGU1FXbERsTlR1bXZWRWhabUcyZHdMRjJjRkpWa3RDMk5UVWlrT0tIVWlIb3dBcEtTWjY5QlpUZmNramUyZm1oTm1xc0ZOeUM2cEJab3R5Z0pxYnUyVm5MNTU2MnhQRGY1bG1NZU9GbkY3Vk5SWWI0S1dFL0NteHVJYTJQYnE1QUIyQU1kbjNabFBXMHV3U2xLSUIzTXVZOE0rWXpPUUVRSTIyczZ1c2RIMDBubkpKVjJ0TFE5d21DazBTMVVlY1g1d0lUK3V2SldQL0VqUEdDVXZrWDMwUk9QOWgxU2pMRXRiSExxa1NCRmU4eWVUUmZTTEdnUDF4aVV0aGQ3cUxCMjgxU0FmdDRxOUhNRlBldTVTWEVtMkYrbVhnSmNrUUxUWGJkaWNpdnVPa3lBVVBaRjJYeTJJbzJzbVRBNnAzZGdES1dvTXN2VXMvY1hxa29CeHVISWhHZWpLZ1FaZnNPS0tHYXRqMVhoZ04wVXJkT293N0I5bXVsTFNzOUpiVk05TWxRK2lENXVlcE0yRGRINnRTb3BvZmFQOSt6TEEwOERGb25wTkMxazdzbmhBSy9HZURkUjl0aklaY010SEx1OU41NE5IdHFFSERxdmJqbHIydG52YU1XeHVXemt3Ukp6Vk5LQS9xbVdwWEhxd1ZueWtzbzBBdFdCRGMyYmkvdnNsRzZ0My9IT0w3VFdjbDU3T3o4VlBrd2hRRTNHOUVSTnlXSDl5TXBJQkdoWTJ6dktsczNhZEdyRHp0NU9pVWlxVk1yMXdRTnlQMFkvcVk3RmxWTUh2S0QzYk50elRyWWk4d01Qb1lUbUt4R0lNZGZUNzc3bHRFNDZyUWltaW1uSW5FS0w5OTNSaEowVjExY1l1RTl0M1pZb2tNQmRZU0QzczlxK01uS2VGR1N2WTNiczhtbjJ4eWdzdHVLWWc1ZTdhbnpOVUNKakN0RjdwZ2pzdXF5NTFGNWRXQ2VLUllaa1RSSHgzbS9xTkN0bW1iTmhaeW4yNHJXaW5OWVFWWm0vRHpsMEp5dlozVUhsMlBqUXljQjUzOGNsZTlQcHZ6Q2o0bXRaajVGZ2cwd2hTSXlOR003RkhxdXNJbWtlMFh2b3F2S1FVMHppMWNjVGhheEZ1MzBIVnR3Q0FhWXdzYmhhU1BUOU8yWmxUb1l1MDlsdFV3SE1NMm9hTEs4b2FMTXpXMzlrT0lPQ1Y1TU1venhrcEJ2ZVlScitBSDVmUEtNdG5JcEo1Z3crSWFqRzMvS0dDMWFnd24zc1Rlckx6OTQxWWVkSW9BNk5XRGhWdnpsRmtCbGR5UlhGNVc0bUtCTHVkNUs4U3ZCWkZhTGRyd3pmOWhrWFNFa0thOFdZbDRhYVIzZEVZNEFONG1LZElPMHh4NE9POTA3RTFpWGcyNFM4TzYwUEkrWk9PQTYxNDZGbG9YREVzd0tyTDdPMVZFQjM2TTFDSlVtdmVFUFNWUWJ5RWpwZkp4NVhYS09HR1pac0ZYZEpRMnZsVmxkc0tKV0FmaHpIeEJxeUNWRWYyQTBZNmFyd2NXVnZFZEZCblhTTTd3RE9PWE5LUVV1VStCN1RzZGV5VEh2bDZzMlJSNURvUFNQb2RMVDhZaFFvQUxKdldnWWZFOGd3b2JhdjJkcWN6bExrbTNVN0U0MkxyYVlHMXFUZDlOUU84K2NKa0k4bzVrSnRyUk9sWXNxcEJ5OWtLbXBGK3lyUlN6NFJGODBybmx1MURKd3JueTcvSUdjRFgrS3hySEdGMkthbXExbkt0ejBWcGVaNFVtWTk3RWtOWGtqaGI0OVBLQXJ4QjNHZGkyM2Q5Sy9zOXVibnB1L3BzdE41R3pGbkRKU0V0emhodldFVFRyRHY5eWc3enRxd3lHdm92Rzd0WXkrVnJURDJNVHgvQXFRNGEwUmZXdUJHczFSM1NvWm1ZcVNGblg5cnllRFRTdi9qNVROeDRLVXlnY2sreTBUVVNkVFZMOHQvc25KN0NvQTlORkJKa2tVdUZHdmtpY1AwQ0N2ZS9YaTQzNlhJTWcxV1JsKy9ZZG5yVW5TMi9CSzRmb1puYmRldGtHZm9YMHN6RFZoSHlIMXUxdGhkcW5FRDRQOFJGVk5FY3l1TzdmcHVDTStZbjdwUEVkVmI5SU9qZUM0TWN3RGJzUVJET2NmeGdjbkdwelZtcWRIc284UDUrbUlubkQzb2hRK3dFTmlCZUt4K1VlQ3c5Rld3MkxVTE9yU1FEN0ZGcW93blVNam9JZlNqT09kUkErRzZvdjVqM0NVNXFIRmVSQ3daWnNtVlVnMWJSMVIyUnoxTGkvSFNlYk44RTBSQ1ozaC9WZHh0RUQwb0VLMGZ6a1ROOHQzLzVMM3pQYU1KcXZJQlpEZStwZE11VjdLQm4zeXlFSkZHZ2tZTTl6eTdESVJ4LzYwSWR5UGsyWFNYR2FNMlFqS3Rla1R5UGlpTVM0SVV5LzZOQm9Md2lTM0FWOXE5eTl6NS8xWTFrSllEL3BGMHlES053SUFEcys1UFh2L0tEQXJpMFBOYWVIRjRmbnZlU0VJL1FZZ3N0OE81UVYzVkxmWVBBaUp1dEFlc0cxMTlIWTJlZ0RaTm5RU0NpcnprSkl4Uzd5SE9BNXdZR0F2eGpORHZuSEtKSHpPUDhhRVI3czhTTE0wSkNCcXJoWm9ZY2gzcnA4RC85eWc2MFdCY213M2tzZC9USHl1RHF5UlpKUEpzOG11djVoaXJyTTNZQjY3bVRJM1ZjWktDQitKQnBYYko5MHNpcFB6NHgveVpCUVRWWDlyQ01hSWdlYzczNW5zT0JnSFdHMlliZzNqRTNib1pHR1FtOWp0cnZJbzladTAxMFFyRDJQdkpPNmg2OGI4d3E5TXkwS2FKYTREUnRTNXZTUEJOQjBRZFZMN2JaQ2hXbFBiWUtzY0d4YjNUYUFjRGtoTzVsRzFXek80L2IwbmJZS1BPV2xXdkZQTlhmREhVRURqMHlNMlhJaXhYU25YZnBhb3JGYkNReXY0MVZKUm5CaUhrbUxmTG1MSGM3OU5wVFliRWNJOEd2dlFaRlJpdjcvTmtTa2hGTTUvakdQMzYrVUZpQ1N0NmVWVmpJVkd3alBkTXZRRndVOWc4SHJvRTZMZTl4VnAweGhKclpwemEvUC8ybFRqdFU3MDViNG1HL2NmSDNFWDVIamxaMkpTSC9lWW1Tak14V1BRR0w0cFRsK3N5YW5Yb3IwQlJUVUZZV1JnZ1BmaEhqQlpoSGNoQVBkMHVsWUlzdWtKdHFOL1JRc2VGUDRTN3BTKzAzUDNNY3k3Tm4yM3A2ZVhGRHIzbm50ejZTZzVDSzFRR1d4SjZXUThQYmswdXBLMEZRdDZzTUtEUEZneFVPcWxQZ2xiM2RSMjhzbmQ5ajVIdytKd2xDZkFmVFlwUlJtWDlxZUhEN3BEblA0cHJmTmVLQm1Xb1BEMzR4L2haTzZEa1JaMEpPemtRa2FKTGFVM2p1M0RPaVNvNWpTaU42SkZzRlNvejFzakhKN25GUVdsdngyemp5QUtFWTI4elJoOTE3bDlpUkErZ0RORlJDVC96b0hTMkdXUllOU2JYdlQzd0doZXFOSWVGZUlnTGVoQ05HL2lDZHdRNis5WHU1VTNicUpVTEFINklYcVVSYVFqWnRzYXAyS0JmY0V0YzM5Tml3NUtyakdpRlllME9GYi9wenlxZE9DdUNOTTFCS3V0OWUreDJFdHR5di9TZnFKOTl1NEZzL1dhaGhoWXZnR1U0MTBWMGxwd0pCaGE1SUFFT2lIMmkvMVYwOSsyQUVzVE15YlNaZEtEN09GcWpyMmQrWHNsemk0aU00U3pGbjFKQTlPc2YwRGhxamcycDVJem9HdTYwQzFQT09pQytmNVBZVDg0dCtWNVZvV0RWNzh2U3BLQnU1UmVaVVNHQmtLWGRqWW5pVUc4SHZYYk80OTRHY2ttOVVWSGk0Y3gzNHI3ZTg0UUhWWHg5VW14aTBKZ0dySjhDcXVQajYwWHJ6aGFDNHFQOFo5WWFGazNCblNjdTJHWE5wZFdmbTRaN0FBSFpEaTE5Y0s0T0srb01PaHBoejRmVkF4YlJWRjZEcUNKcTVjZUU3c2tqYkFORC9Vclg2V2YxeS94N2VWRHJFWnEydGhuOEI4VkdQS0ZIWkgyanJMN25va1hhYWRzeWtJMUNwb1JhL3pteW5rY0MreHVoYngwZjZGdjNIa1M1R2ord3VmUWQ1VUpEQlZDZ1I3eWR6WVlZVnY3MUpiWXlXdUVmNSs1Qm9CN1Rjbm9kL2Z6RG4rS2tBcGpHbkdjZ1liTjRNWURFRURkZXdtQTIvMHBoVE56cjZUWEh1aTdCaDFLUHhGcFFseG8vNTJ2QkxvRE44TFZsWENrTzN0NFkwcWc5T0R4L2k2YW5RcVdvOEZjWDhQeWpFOXV6amFleVI3TUI0bk04UmswMHlFMUt0dEovR0QzZWMvd29KeHkyRkZiSnc0TUF4cUdFSklPRzZTOGc2ZnlSVU15a3E2bGhUekZYY0FSUDhoZlp5eHVZWVpWR2NwQjFlRytXaGNhYllYK0FETk43anlJckhXV0o4ZXNBamxUOUFjZFJxRlFCbmgrYStoai9QQ3MxMDF0cTJUem41OHA5RXh0MHp6S25vV0RLMFhpZTMvZVpZYlNuVXNKWGwwdkZJUCtCdzJ3RUtkcVRHNndJTUU2ZDU5SWRWbUJxaStWVjlNOHgwTXRJZjVmMURzSGZYRFYrRmxROHJlaU5HVDR1T1FLcTJzS1BHUTJVY2hKekswMVpCdHQ5T1dCY3JmcEpaT1J5MVdRZFFGbE5leWMrbDA0TmlQVHpvYVVuYmp6OTRaVWhJcS9aUWNNeWNyNE1JRDU4eUVnRGNoMnVCNUcraVdoc2JKb3pCeVp1Mk5Na0ZaNGZWL25mTGtrVmwvWWNLUlBna2xiR3d6ekNTaFVRdEc5QUxFYTd4TFcvR0NtV0ZSK0J1cE8yQ0QycXpSU1NKb29HMkI5Vm5HU0J6d2swRDE3SFRuV2E3OW1wRlhGb0trZ1dqTmh0a0Jrbnl0eTU5V2ZBbEw2SlU3SzFBZFc0cDduMjZraVIyRFdFK2QxTytBaDRXOWs4QjZqT0VOWXR3eVoxbWhDaHNPT2pKSnhFMEJaYzRnY3JpSW1WZnNka3FsVm9sYzFLWEVXZFo2WDhBODBtRHJIZFZ4VkxTNEljaUFMRS96ejB4Y1IvakNFMEtWK1BJSFowYnZGSmlEbU9JZ1VTaWt1QXpkdnpKRGpiazhpNjRsb3kweWlINUFHYWJsbUVOTTZSSENEVFJqZFlCS0g2TmphOFREbWNyc0hQbXltYUx2d1VNdERhTEhMby8zMDdZTjRNRG1pSlhqWE1pSG9YaDB5NDJMSzNGUStkd1ZJS2hPcUFML2FDbU1zWFNXOTVMWHdIRXJYbWtwTk0zdm9ySy85QnZQZm0vWmp6T1ZOUUVNSmtPRXVSTmltSTlGNEhFZUtxVGMvT0M3b2VOS2l3ZTA5ZEwyc3JlTUtxSGMwRmNtbUEvbjJUL05nTUN6enhhaW9hbHRoWWdYZ203Q0FlYk43YllvN2tXTXo4WFg4TkZ0c0xES3Bjd0hwekk3TzhNZzFvcEJjYklQbzNhWkZBQkd4TVFITi9rcFVxTnY1WHYxcFdFS1ZtLzk4bGxpZlRTdFZ4MWFMSlFuN1lmM0ViQzljbmYyRHg2YkREb2xtN210V3JpZU0yNVBiVUhHNU5idDd0UkZJbnVKQVhWUVZHZlpmR1FmV3Nia3J0NnJ2UWhKOTZsTmVOMzQ2RTB0bkRuWGdWN1lneUZDc2h5VndOQzR1RnFWKzRUVVlWajcvMWtVamlNQndCTlB1NklWTGwvc282WDNMbkV4MGJnWWtNSW4rZE1YMnA5YTc1TEdTd0Y2cDJBQmMzbkUrOGZYb2Y4YWMydlFmOWRVOFhBMHNoT2J1aGhldmNIK3MrT2Y5eWVFQkxMaEduMVVtWXlxUXlBbGsyUEF4STdtWEdTSDFSM1BYS0VqbXRjVTJKRFM1ekFxRnBRZTlNemFtTnRSc2VRTkxJblZISnlFQUU4ak0zY010V3BzNWEydW9Ia1Z4a3BaUWVncDZvaFZjZ3ROWWxXTy9CaUszMUk1N3dta2N3U0xxbmk0QWJtWU0xREZqOWtsMDF1NWhBRWphdVZRNmhSNjlPSDJLRktxUVJFRXNlaWRzdmJhNjkrN0tyeEF6MFpPRzQ5ZW5zRVhZQ2xwRjlPSHBaNlRzUG1hejdPOVVPa0NYUXV0TEV1NUNUc21aYkNFWmRydnpTU0g3M29OQjdWa0xxcGcxMExuWGxzdis0WmlZUmZXNFc2MUJtQzRMbzU0N3dWQmF1bHoxaFB5ZjIwc1FuTkIveTdqZ1JWK0IzK09sd2U0QkV0VkZrNGtIalRUSm1zUlUxd3QyVHBBeDAvRU5Md3ZlSjF4bmZkSyt3eXF2c3BJUnp4V1RPd1hWNFRmQmtiU2J3K09PM0NPMFRXZStZM0ovdnJTTzF6TkFsZTBPdkRlNVZKUzIrUFdsRExYejIxNEVoSi93VU0vd0RqWFl5QkEzN1pES0pGWmVKYXFmTXJJclBiaUJyQ2RxQjltZ0lWR1FTb3M3bFhOWGRoKzNITURkMWxodW4xWGhrWWZkQVdRbnBMdnI3b2s4Z1loc2J3SE8wM2IxbkcxZXVzd1lqQWpCa2E3Zm9iQ0lRMy9VSXQ0ZkNuNkt3THpYbjJ1S3RSRGgyajlGSHpOeXFZMjhFa0dCbUxUc0JNVVRYREsrSFhNaG1UQjBodzFJRlc4SmlIV0FrUDZQM1o1Z2tMUkhvRFBqdTUrMDIvK1ArcDJRZ2tDUWFjc1o3SjlpYzZTaitkSVBNbFhjUDdYN1k5M0E1NWRvNndKOTFOSlpnZ1Z4alRFaldHdUpSdDgyaDZwMnlRY0cxSFpJa3d6aVRSU1lYMFpEbVNxcG1aeUpCeW1hbnQ0RTR3cnJCSUNBcVRpYUxSR2hNVnVmdmtBaEhRSmZadUtUTGtjbVV5NlJVYUVOZVRGQ2VsS0dHRTViRlpHT2IwSS9xTERoR0FNaVh2UGc1ZzR6UTZOTXhzaGExbFhnTHFpVGlRZCtIbVN6MENmb0JrWDAybGJoSzZxOTc3VmZ5QkxhN1ZCbFRyUk1xZVJocnlFZGNnQkZxNFFBZzdnWUpRNmdESTBnMERucHh2dmVSdXEwd3BwalpDTWw1d29PZk54QXV3SFBpMnlMNkxDeU9WZkZzTDhnVzJSZEdsdHdaR3E4Rzc0bTdWVExzNklySFhadjlWOG82USs4VHZIQXR1Z1lOdnhuT0NNbXRJSWNMTmZmNWdESHM5eHRsMHdkUTVvdTA5RzFicC9zMXBZak9YSGZ4WmVQemkyNDEwb3JwRnhaTGJsL2xuRGZoam10Qlg5UU82dWNWUkFoeWFWbGpRVU9jL2c1UjN0SGVTWGMrbVA4bDdaYTJyTUVuM1IxVS9UMHRkQ3RQYTlxWUJCUDZTTHY4SG1iYmlMR1ZNWUFia0xmcTllRVJNNWdYcWRXK0M2NkhxdnVreVJGdW5DQUg2TVpxY25mK1lwMWtON0xYSGx6QWppWk45cWN3K1AydkJlS3phc2hNRytyTGs1aGw4YUhKUmZoWDZ2ejhUVGNsK1VxK1l0WkNpZk9tRjA0YTl4VjNlRmY5b3AvbDJtbXRHWU5DWEdWSGd5MllNWWxjSi9QT2xkWWxwOXZNOVAraDhVR1hCelpwaFZhcTU4dURYWXNPWWFkRWtpcHF2ZWxxOUxZSnJ3dHJORGNHMjFidHVrL3pLNTNFV2IvV3Jrb0ZBYXJqbGxMZTBPdkhWM3Y2UWtQUGNsTEpPdXdZR01lQ2c1ckFzM1BjbzVQQzM2aHVuVG45MGVGOWhidnlKVE12dk1YYUFoL1E1d1poSE81clExdUdVell2Sk0zbHloTmRsQmsvZ2NNNitwT2RsVmpNZlgyTjVqaFNQZ2NqSDlJZTVJZjBpVUQzaHUzdHdveGdjemlWR2xrdGpTR2JFWERjTmNiK2x0SG1Sa1crY1lFQ3lOeXhIT0RQdHZTV2pBZG5laEtlMFRhZUpGbFFFREFJQ042WXBvQXNjcUZzN3RuOWM3elZTTDFuQXliQmpySkNHWDIxTFNIVDNsY1d3N2ZBRTVtdmg0dDJTTHdtWlZEbmhWK0cvSlQ0ZXZpL0RjL1hnb250eW84SUxaaFZvVThYeTVYZUJOVWRSMTVuZUMzdUd2cjQrbEluSFgxSkpzaytYdDJsdFNuZ1poS3U0Q2o4WkZpT1dJUUEvODVROFVQRnlQY0ZUUUcweFFXdGVZVzY3c1JXQ21UVm51dUxuVWZOa0NvMUc4OVBrRDZicVQ2N0QwOUU0VVVYMFZlZVBCVXVVRHBvMVFLZ1dRc3VidDZaSzVpNXhJdWNwVlZOS3hyOWpqMWJEcUNFZUVLUDIycmlIVjBPUXBNdVhJZFA4cDMrMkllUDl1NnNNNlBMaFlIL2VlS0tzZ010NzVqM2h3UllZWnA0dnh0ZDA1RDZXMVZwOHBtSFhVT25qQ3R2b240TVZEdUxUZmFRSVZVYkdaWHMyaDVuNmNNcmZyMU1yU0thVkFmU2VYNVhMb01idGY1ZStGayt3V1pEejcwOXpEL1RFemlENktSNTRjNldqcExFNmRucFlXS2NNTTlYNmtVSDFyUVRaWEc5UkhsRktndndxS0hQNmZhbWw4b1VjeTF1Y0JjRi85Zmt3ekdkTFRTWWZJUDl0UEJnci9TUW94SXlKOTRPYlhPMWhmVEVPMjFTdUdndmpKdVZ4SVRjNVI3SHpiU3Y0SklIeUQ3eXpBTjhTUU1pb1doL0xIVkl3VnRydWxOYis3S1lnYTF4MUhXRFJDQS84eksyZllXOFhRZkxBT29rUTBBS2xpWDZXL0ZkNXRJY0V4bFBKZk9wMnM5RWU3cTFXV2NnRlhNYmw3dkI2OEpiQlBNMjhwYm9paFB4S0hJTjI0NkRWTW11QWRKTHhpQ3I3WW1BVWtLdjZkbmRDRU5aSGs3UStKOWRvOWdrOFVzOWVWaFJQSk9NcytrNWVKeVNSS2dzY2FCRXp0TEI3NHNrZkVyeDBteFdWSlZGQ2hRemlnSjJPSzVIT2F6SE5DLzA3TkpYbDViYzRmMGpjdHBFakROUlVWdXd1YmtFQTM5ZDl0aGZLQ2hVZzF4MmNOdEdpWUFnRUZNcWJ4Yll0Z2ZxVElpOWlkQVJpR2ZpMTlZcWsyTmFyeGVObXdlSlFHaFFnU1IwZ3RqTEc5R0JBV3N6T2NaUWZtcFlkUHZZWGxXcm05aDR6TlQ0Z3ZXdEVMZ2RqUTlUK2dqSU8xRkRsYVNKaldERjVvdWFudm5HeU9JYUNLQkVGTmxLM2RwNEROU21Kb0Mrem1GTzI3RDNTWVdVQk1nRVNCZkRGS2xTSnFaRlVPWHVGSlFpaDdmRjl4Y0lZUmROcGNlSTBsUnpsSERhc3ZUMzdvZGJBTXNlaTJLZVVvVXNMZmhZY3FHZzR5SXNpRzBYVU55dThZTStZNkJWbTdadWtEdmhDb0pSSXd3ZXZEYUhpc2k4Q3FhYW54VTIxQWk2T09SWU52Qk5KYzNhOVJLSVgwOHRkSEEvSEdXdEg3aFJCTWtDNkY2dHBWZVc1ZTR1L0dDcHdaYmtVZkUzWmF1NzFuMUQ3L0VOMnVidkN2THJPZDA4S0RWTmJjSFlWTkw4MWFkaDZTbnpuMGYrbklreGNWRTUvTmtuYWZSUGxvdEwwUGtzL2c5Z08vRXFQTzA5YVZTd0UrYjJKN3RrMkFIZTRnRmVuVHY4aVhiaERKaWdub1FSODltdS85L1UrQ3NRZmZyMGsrMFhvWXBrK0JsWUVsU2Z3cWovQ0x0Q0d2cG0rY3l0L2JpcC9Wc1RoK1pEOFZGaU9CVE5TL0EwVGg5bzZ6aCtWd1pxQWRpM2FUdHZuNlRDMkhLWTNEeUlYNjlxeEp6NW9pMXlPZHdQUkgwTU1HYjlTMGRoZFJmNzBGTDN5d3lrTWhvY1U0Vi9vQ3lSZmsvMEpkTmxtTXdCWHc1T2Z0WjNLOGZabjFLR21ydlNockhxU3J0MngvUUdnQWw4Z2laQ2kwb0JyR05US1RITEZKUkhvWmpYY2tKdXlZTzhvQWhSbHhsWjlPOTlnNXZvRkhSQXVwT3RsY1hKWGI3dDByWDh1U1BSNHNEbmxXdnBwMGg3eEYrRDJROW14Um1HSTVCWW5EYWdEZ0g5MURtcnZnaXNPOTlPUFBBRitHZksrMnQxNFpHQ0dDYlRmQ3pDbVF2UU1Pa3BLaEliZVViWDNlTjlSR2IrcDNvYlBlTnJkQy9WSUVTd2lNUXB2OTlZSXpxdEhqTTZPM1Avc1BZUERNVWx1eHNPV2U5cXlXb1ErZHlQTzFFU1BYSW5QTi9xUDZuMG5TSDhBNmllVGJacGJFVWxvUnJ2ZDhsNHljU3hhYS9nN1BPVkwrTUFGU2RxcG5PdnB3Mmx6ZXZjU0VhbFJQWW11ekpIYkpCUnBNK1ZncWZkb3V2SzhxanVFVEI1MlpLY05pT3N1T2NuelBvU3hvMlFCRDVka3Jmb005WDBFbGlzWnF1MEg2V25sWnRqaEtVVlJRYXdLVEQrWlZ5L0RpSTV3ZjhNUnBSTGl5cGF1b1ViNStVSWg5THMyQW44YWh2M3VWdXoyVEhiamNpTTJCYVpoZzRyRFVIL244MGtIYVRqU3l0RXl4UHVHMkJXOHBGdW1uVCtuMFpqQmtEMjR6RjA1Umd2WDRCV0VqRTluQ3c2V0lGdXBxVWNSb2x6WEt0QnFNNHBDVnRDaDVkc3JZS2FZQ2h1R1hmNG5TUlA4ZDIvMWIwRm44QkIxMmZXWUl0Qm0vWTN2d1FaV3ZOS2hEb2dEeHlwbUxobVZ5SGgwdWZmb3ZkR2ErSHVYM2o1dy95NU5xMTFhbmVMcFUvTFJZcVNmVXo2NlczOGNOSEtVUFVzWW5vSUZ3SjdDQk9YeXdCNmoyYVVCVG9qUWVCK3VvSlA5NVNlakFhV011dUhWaFhNMjNxNmJWOXY4ZUsyay9MYU5QekpoM0FEa3JwS1ErVEhDRFo0akt5cm9HcEMwQVV0T0tXR1hjZVFaTy9jdG00TnRyK3B4b2NieGxVTENFOGhSdkNta2xRK2pWSUhyemNNYkVHSkQ0TlFsTGlqZERjVDB5ejNOc2NRMnkxWStacTJIbjI3RXJYTjQ3NVhjUkgva0l1MkpJcEpNOU1JQ3Fzc3BqZTE2V0ZONkc0dWswOFpoWUQrRHlaVXhmbktZUDZkVG91OFlsMTF3ZmptSm44MUJWeUQ4eXNWWTRkNHhVWjJ6TGozU3Jpb1ErTmh6Q0RyTkkxOUNyZVREYmZhOXRhRzRWZUVtcFp0ZWNwdnFnN21MRGV5WjNHdVNsdzR5dkNMTDEydXZzY21BV3h0S2lGMS9oaXh1WnVWeWJ2WXhZWUUzYy9QblZUczBma2p4dHpjRW00R0s5MVFaR3dxc1loT1FNbjVMUDJJbk9mbEtTdkVPR1dlVmdHVlYvQ3pITWRCaitZMjU0Qm1SYURuSWRhTmpCT2Q5cGg5UCtxV0hDTXo4L2Zvbk0wc3JpWGtRTS9jaGo1bnNPMDRScUVTSDg5MjFJZllzYXQxRlpIc3dwbVY4d2lqZ3dUYWI4U2FPOGVUUGtNaUsySVlmbXk0YkFmWTdzYnlQTE9KMWE3T1dmY0MrazhUdGszenpSRVd3a0psSmgva0xIL3hBbVB0Rk5WekdzVzdpMUFla1VUK2wrTFpjM2FiYTBUQmZsb0xDSVZpbVE2bjM0VWNkdGpBWFhhSWpPKzJtUExWd2Erc2RMOUJ1TE5NcUlNZFJjQXJQbFVBaTlwSytYZnIrYnM1WjFwWkpFdkdONXdjSVk0QlpNYzU4Ty9wVzBPVkc5UVhOb2pMR0ExUmVMZlN0WUlzOThpTCtBWlEwZ0Q5Yi9KbDhmMTIzbS9Nem9tbitxSjUxMTUzd3Z1anRQNzBEeFJmY3FObHBhWmdQQlVobjQxc0RpclFNSEYvOVZzZXUzQU9NWFRxQmpadVE2NzZFZmZydnBsNHIwelYva1dkSmdqOG1RSFpUNUN6amhaY24vREdKQ2t4YjRrQVFxVGRReGlTWnNGQ0tjaU5kdmxMbVVXbjlWQ0xscW1DMGZjb2ZVckhJWTE4bXBId2h3NkNUR2tjY3VPVEowVDBMRVNaMnFFSTEybnNRVVBHRGJuNmlKSTNqaCt4YnZ2aEZVZDNWY2l0b2NmTU5JT21ZdHAvQmNWVHBzM25HaFR1ZTZ0V0VReldOc0NBVkY0YitZN2dkc2R3TDdNNzM0T0dWTTZ1N1JlRTdXc3ZuM3NESkIxUU9XLzJ3ZWNjT2l2WDAyQi9mSmhkTThGS1RNV0I2TkJTbEJaN1RQekREcVZEUnFxT2VxUnZ4VWQ1NkRPQXJIM2lsWjFuLzJDYzV4eUJoWGJuTGNYREtnaSs0V2R4YmZ2ZWREYjVQaWlJMENmVU5VL0c2cFk2UC9Cc2N4VTVxelRsdGRsTDVpUWlJQ0JpTU90dlVVWksrSmg5MHBsa2lDNExLMldVbjA0TTRKZW93R1JCYWw4ZnRPVTROaVlObkpJRVlXbjJOQlhLRnhYMHplaUxHcnFsc0RBVlJQMFRZR2dENi9WR1FkU0pRSVRvUyt1bURLT3ZCNmRhaDFWSGR3blE1V2tralE3eER4YUJCV0EwcEU2bTNwQzdaTjlsaE53NVloRDd5blRWUEMxTVFlQTFXaHdXd2FJRXNHYW56TSt5bi9ZWDg1ME1YL1YxdTBFQ3l0MERQMTMrUm9iOXZZRnQwTytqUFNkaUVML0d5dGQ5Tnd3b05Tc0xJTDMvQnBnaHFwc29JaFl2RCtqckJwdnpHY2YrNGVTZTB2dWU5d3QwbEJLb3ZwSjFFOGRMc2czVUtWM0VrTENCVDVGZVlvQWNiRmlFYjFaSXdyTkxick5jT1NiaGQ1Nlk5NkJucFlpeFppb3BaSy9QOENKclNqNS9XbXE3TEttVENnODRWZTVEeHRXYlQwV1BZV1NmVVpZQ0MvTnBtZDMyNmJWUWo2bG1TRXNhZDdpQ3g2bk0vRjlqQ2VUeE8zTWtoWXRLWVpUeUtPVGZUNnVpNXhCRC9Pb1JHMkwrZ2JUVis5bVErRDErYjNSejNGTVA0S3JIamhrWENTVmRxdVZKUGNtSFRJaTA5R0RaL1kyem9TSWNJMUdlSTBiTkZNcUxNeGZOMXRESGZmT3RjdDN2TjlwT2V4L3pGNU0zLzk5WkRmMHhLNUxlSDdNQUlVWTVGK2g4U1htTjNib0RYL1h0bGI1MVlMSXY4bHh0WVdwaTVhYk1vZE9PTmdlcno3N1pvc2RkOUc2a3kwYktqbGdmUXVTRWlyb0M3NFVwNXF4ZVFjcGY0eURtRUY0ME51azIwUk1lWHMwOGtYUEJ2bWJ3cTRJTUhmb2czMFoyS0hLTklsUkdyVzVUdldCd3J4czdhYnBBdkpmbUY5T3k3cjdBYzlIemhZZHBBNkM0WlNGWmNGNWdoUTZEdDlrSGFaRmFvNUZhbk01Q1l6U1FjN3Azd1A4YUlvUzhGeUw0dXoxU1hxM0wwM2RONUZsakt1dnkwdVJHMjRVWENyYkVoZzBNc2plU3JZQ1VJeGtpM29LV25ZNU1XMW1mQjE1SWRFMTk3TExBbStyb3VHT2dYWHVJdkxWR1RrYm1XVXdSaXpYajNuZ2ZVeUxrakJyZVp5RUZrVXZEV2lMeWxlRzNhalg3ZFBla2hsZDhZOWxOeFpuTDN2RGx2blA0QWhhYXdIWFNvS0Q2MWNBdHptL0I3a21Rb1N4VVRhb1ZPeklDcndjdUxDMFNHcklMeFp4aVFSUE9uck5NQnN2NFl6djNTaEhEcWJXVVU2NWF4eGp5NEloYmtZb1lQOVNjUVJDL0ZicmNPSEhqaXBtSHhzU044RWNHbHdPeDRLcm9WQUVGK0lJRTladkRjeVFTeUkzVjNUaG0vUFRQcUFaTGNkbyt1cWc3bHlpZkRjampWU0ZaclMwVTFqdDZJd0FUSzB3eGhpZTdlQThTc3lEdWQzNzlVRFk0a0pjMU9lcjJVdkpuNk5lUGUxTmNZdFlYVzYvZ0ZhT3BhNUlCYVhLSGZZaDFZN0pJOFhQbDZXbFlhbnpTWHJPN3RTNUVtQWNNVDVUQkxkZmgwVjlzeFdONkt2QzNtUnV3UTBpSytDZER5ajQzWVFzbE01ZUZobDFXdTFjcGxteXhRVDh5c2JrNVl0NEV3SjU2d3FOQzR6V0loSDI5eGJYaFgvQThsRVdlNWh6MWxmVVNMZUQwa1NqbnFiTHUrSUR1Ujk2Z0plUWhPRytLUDgzdnI5MVBJM3lIWWN1TTZjaTVoaU1yQzR2KzF1elJKYndjdVR6eTJpQ0lkbGJseFhPTkVuY0drcnpiOTNhSjJsUWRaRTd1L1VVdjg2cTIvaHpGSzdYbndYeTVSUDkrTzgxZ1kyWUlqYmlMekd0aEU5aE5oUWloQm9DemhRTXNjMzJETXpXcHNjNW9tYVp4MENZUkhkVlV6V1k1STF1M0lQUjU3dVlJZ0RocDYvdDR5WGJyTDQxWEQxUkJyQ0xHMkM2VmM1endmQnExdEpyL01rMHM3enRLNGtpKzg5TnB3dXg3ZDNtMHBTK3BEY2x5dUV3czBZYitJQUY4Z2VjNk1pdTdGQlpTZUhzdmxIaFZQZ2ZkUFhiRVdYNHYzeVl5dE9JQlpEVE1CK1JSK09IeEVQbkpnMk5CV0U5Mk9XVENEeWhNbkw2L3F0WG1pWUNHU0kvZjNoZEwrNy9hcmxCdG9NblM2VWJOVXQ0ZXN5dEw0RWViY3Z6NnJveWd4M2J6S3A4dWs0VEIvYmM3ODNja21SeE5lR2czakNLVFoyR293WFNGNFFvWE96MGNpdjJYc3FrN3czcEp4VVBZZE5PME9BZGsxQXNqZW5zYWs0eDVXeFZ0VEFiYWRCWEtFWTVGNGxTV1g0a2tSZE5WLzNqNVI4aDlLUUlKS2EzU0hlUDhrbmlVdzBWUkk0blh2bXNyQkY0dWJjd2NkSU9hSXFlM1RJNkluajZqa1RzbHJIS0NJT2NTd01pTm1sV21XMFF3dmkwRXdZZS9kc1R1WE0rLzlwUGxMeXF4aXU2cVZqajdNUVJPS2JuY3pQVEZZWmF4aW1pelR2UTZQUjdwWjRWVHJOZXhQckVIcTRUV3ZHODZBak1vRE1vUVlVVkswNDFJMGk5WkhNM0pHZmpwODlqeFIzcW1abEkzb2pBZkNTc0d1WnI3WnZXd1kzQ00xcXpmaDlhTktFWElSMWRGSDlpNGpmMzdtc2dNUmJkbGI5OWErVzFLaTZ3RGxsT3RIRWt3dXU1Y2lBOVFIRkNpckMzTWduck4yRVorajZQKzRvaXNaTUgrQ00rTEY1ZytENjJxVXNmcEZTVVMrN0ZsbnFYMW5Bczd0SUZCZG1WYkxJTmwzb0tvZG00RE9jUDREek1ES3p1dU5qVDdrUDhKMkNUOEk0Mk1TVDdpQ243TnlyL211byt3Qk9pMG1VZmlFQ2d2RG1RQzVuOHA5Mk43bVJPY2gyWWJCMkEwckJ1djVmS2EycnpsbGtIQlQ3YXVxRWxQRjJPL1pwMFlNRXpzc1J3Z042YXU0VTU0SExnQnRYVDlqakhJYWxiaHZBbUZXNC9QaXh6ekVyQzR3eVJoU1VPTmJPTlEzUWN4Z2tyTWRaZDFuZ2lROExLQ3ZSUndNelNOd2N2L2I2YnNuc05MLytBOFpnSE1QbWJmdjNTUlZxL0Rmd3YvVFB1RUJqL1NhRVNWeGZNVVNJL1FhWWYvVGlBajBidFlLVGRZZG5NRFhMOVIzRk1RSjlFdnBWS2N0Q1BJWVY5YmJtbWRpckNOazhKS2VhV09UeFg3N1h5UXNXck55SGxYb3NRbUpvUVBPUXZvMEo1Z2VyTSs3QlRTZ24xU0NDOUdKZzdwNHloSUthMXV4RXZxOE1mQXBUbUhaNTlheXdrQ2lLeURYQ0JHeDJGZGdScGZ0ZkJSNG1NMy9ySXZ6anF0OWkwWmJKM3ozOXd0dEZ3Y1dpNnVoN2FZamZ6Wk9BVW1vZ3NNTGJOK1B6Y1hDVE1PUFNBcjU2ZDVobE9WcDhKc3IrUnc3WCtpL0lhNWV6bGZITkZjdytOdnRFTlFheVZPUitjbXhoUWNQbEFJUG5VRk9aZDN0UlljWkpCcWQ1SWF3NXBSQlI3bUZHdDIzVWNoeXlLOXRTc3paRExmWWUxQjExMitwQTdVWkMzYkcwM21Ma1c1Q0JER3JJWnZmeCtTZWgrVDgrcXZSQko0anVLanNTTDlPZE1TMFF2NkpUb01wSE1wVDV0QmpYMnBMc0ZiVU5WL3IxaXRSSmxMc2FWR3VKbHM1cDk4bE5hTjNMaERyeVVvTTMzQ2dEVVk5VVp1SG1QSHMzMTJ0ZElVVSt3R29ocmZXdEh3Qm1LaGgwaHJ1YXNFOGFrNkc4ZTRRMHpWM0xOYzBhSjgxdk1hRkU0cEwyeDJ5U1lNNHFBUWdFdUpyOE40NjZpRVdCcDZHYjFSckZQOGFRSWZwUUVIWUc4Vk5pRWpuOS9MMTg4TFpQODNEYzBkOFcrTUJsMmFIdkMrZTNMMm82eHdIU1ltM3QwZ0JzMWppSWJBN3JMUDVteHpSWktxZmt3MnlYMHZUVnBXT1Z5Zk5Tc0JaeU5aRStyTlMrTXpjVVpVQTlEOTNsOS9lU0R1VzNEc0J6b2laL0oreDZiTTFmR2FOcFYrSFZXdzR5WkJwdEhuZ2tLOXRVZGRxTk11NjFiWVB3cHM3cWtFMUZ2S0dGR3EvUFZVT2oxbGs3dzMvMi9BNVB5aENOMElKUGN5Z0FuVkNMZlZMd0NWUTk2RSs4SHI1Tmc5N1ZKaEdhTkhsVDRuZzZYQ2ZhaDRRTUJtNUgwWmpNQm5kMEdLL0M4WDlyNlVoaHpzUXFVS2pkVUpDb0t1L0cyOW1mNEJvSUowWFpCU2hucDdrR3FFSWRvaE9DalNETGJDc3VFSVlYZmxuK096dllhVTc4bldjV0krbHRxYW1uaWJxUHRUdHJzWjhTUFB2TThYV2hIcmdQQUxybTliQlRXN2Qvb0swbFI4K3Rnb1MvRHBzUTNHd3N1Y1l3Z0Q3ck5HY1RlUGpRczEranM0UHdadzFCTTJCUmlSbndlWThHYzdvV21NbWUyaENqRHlLVU8zelRDZjgrd1ZjUjloK2JyZzNudTIzaUxmWDduVGZjS2RrUDlvU0lWaU4xL2Jva2tyaVBoWktWS2dsQXpySEM1cXB1K05nb3dKdFkzTDRNazkwMExtU3ZCL0U2NXBOcGZ2a3VpTjZXTXk5MkxPMHVqcXVWalZJTEZxZjhpUU5ZUUZ5dC9UQk80eVZndGZtVkE5Tks3M2JJRHdkOU9GYXdHcGl0bmxSMWg4NjVpWW83NFk0bEZIU1RwM00xTWRFUFdkK3ZkUExIaXh0TVE0bDZQUWZaUXorMFdXU3MvT1FhVjU0UHk4dDNsdjRXMzQ3cjFocklsQ0FQWG4vRXJBc3VLRUNUR0JvS2tldjZnTk11dkh3WjI1aDNCcXdRc0hwUnROV2g2MzVPZW9uNWJUOGxuVHBxS2pBOE94Y2oyb1Q2NEpMdk1vTWJWQXo5d2dRV3kyU2UzYnFTcXhKVmFpWU1sbmVPYnhGeEhRaFRwbTJwY0xjMHJ0d3BKVHF1YncvUVJ1OW1XMGRMNjIyajk5enVxcFQ4aW5CRDZhTzFlQUtIb014ZzhhSkx0OFNuei9oNUxpYzJDeW1oTnZTL2NQSUdhWWhqK2xEcGJUSHl2RzFhTFZ5Z3RPMGRmSVMrSVh5bXJHbmhLMWU5bngrZHpRNG44T1RKeXlueGJiTi9DZkhaRklxZjlpbUJ6OFhuME96YjkxSU9TNVN6K0xjVGwxS0g5ZzFyY2xVWlR2djdtUE5rbm1zaGwrY0E5dWhwb0J2dFdMNUJmbVBqVFF6L1ZzZkZMSXlmdEEvYWlQemo0N2htU1JjWVlyb1BXQnlPTUZoK2crbXM4UEN0S2V4elBMTW80QTV5RUlpVjdEcEo0M2hWM0YwMVVabHRURjkyVEpoallPTHB6ZUxiWTRkVG1OanZoQzh0OVk1ZmFYWUZVeWJRVnZsVjhoNmVpR2dpUG5nazRSWVV2QkRreXVLdzZqU2ZnQTVPb01pS1FIaTI1QlNreUp6QlJEQ05FekE4OUxkVUNmQ01uT3gwemRaMEJ6L1hQSVZVR2orekYwZ1lKVklIdHZvS3p6dDhGU1BTMjJLaFdreHVmdm5vQzFzMndoK3RXak1hU2dpUmtOcWhveWlqNC9weCtTSkF3K3h6NVlQQjNjQ29XWU9CODVDb1NrcE9nUmZrRGgwREw5Rng3U09BanZJOUFSb0x5WEtWZUZJVEF2d3VOMTd0cVc3NjZZa2JxbUU0d2ZkOW9CTlJGaERYUEtyeG5Zb0ZUbWhWR1RvS05QOTRnaTBqNTlhNk1xRFBSYmpaVm00aDdDN24vcEk1T3l1MlN3bWZxdzMwS0xtb0o2U1EweVA3WHlhT0F1WEg5c3JLMThObDYrNkZvT2RZbU5ldkZNbFFJL1I3bW1ra0tBTDMzZUhRa3N0NWZaNzg4VU43SzI0UE5WeS8wYmNUNlFMOGNGWXNMdmJuTklmR2c4blVmVnlhcVFRbXJoNHQ0VGJxZ3RyOUk2VXdwZDZ0cE5UY0hpRHY4RmZEOWpzNzlTLzVQY3pmRDlUZitmMDAzeWRkdURmSjlTUytUMmUvbitrbGZKNnZQOC9xRi9QNkhlQkh2MjllL1d2Nzl2bnYxeC81Kzl2NSt5UXQxK3N2N1hXQVVEY3QzRGt6QWlnQzkza0JTUmlVN0hjeUswamRqOW8raGRUNUZ0UFkveVRRbFZ3dGZPcmgxTzBOcGVVQjR2RzVXcmdWSTdva2tuRStmMjdQM1RsZXAxYjBZMG1LeEZGQjdySTh4WXhVdGFtQkkyL3V5Y3hKZGljUnRob0VjSjYrRmtQMWltZ1EycUxuZUN6UDVMNkVXZUZ3RjRYeit4c3VBT3JmRjVZcUZRcVBFWlFobkpuZ2xqQUhwKy82UnBJS2g2MjlsdGhnRkpnMWdYVkhKZko1MUhsQXNMRnFpY0Z2VDB6L2ZEVHhiYzg5V2IvVkRJUFFFb2ZySTFESCtYYUdrZzkrKzBma1Q4S1lRUllTdDROaDlxMStqa2pZOGlhbzZldHRqK2Y2a2FJMHdPRUJpU3lxaVdYVURGdnpkcG8xUDBFeGVnZkhSaVpMMnpGUzhvY29uK280L3dqMFJ3RmVxTEprb3BtR3d3Sjhua0hWblZ3TTZFRC9idEhmcnRSZjBuWHB2OW9UZWoxTlpCRjY0amJ6aXF0VjlNNW52SXZrc0FuOVV1ZzJDaFN6a01uWE1zZ3VQZER0bDVCay91eG1sbVZjbllMa0ZYOGE1M0RFMmRtdkk2K05zUUloOE1BU3RpU05kNGI0VGRrZ25MdlFaakkrZ3IzQ2p2UGxVQ1ZCTlhaRDlmUXRVZmZ5ZFh2ek5sQWl1dURLNWc2QmxLR0VYS1E4MXltOHh1YkVJRm1DY2RiVDVKWmxWMWtySWFhRWNGb0wyL2pVckVrVEtJV2dMbnVEY1I3SWNzWWpiWGlOYnRLYnVUcC9Pc1NCR3ZMTDJTVFZNa3V5aTQ1OUt0MDlEOXdGQkRpMEFMRmRFWG1PMVVIVGRiRUhnV3pyNExHVUpXQkZZN1dEaHgybVREYUxSaEZoRkozTVJGditpT1hFWHg3dG1VNlFpRjVnODFTb2dkQlhOTnhZdlUrbTdReDFDeXlWRUZJQkxMY2h2ZHlVU1licnZMTTEyd3cvMHN3cGVGL21yY3F3RFh3ejFNS3BrU1NlMHRJVUhPd0lhc3R1b20zcUlydnZkenhTR1JkV05ONUxiNXZSTFMwSFVjOXhja05jOEhrSDZxMGpTcHMyOXg3Ylhub01ZSXdNeGFQVEswUGtSUkhwVFRjMFN0UGxVTjhiOXVQK0JMaWpnRGphV2xQSnFiR3hFazJDTmhSSEo3N25EeFo1cVpTQmJoZE9qa1pwTXRZRkcyWGMrZDA0NGZZSXd2VUcvRnAvS1VsQnkxSEZrWnlWbksyeHE0dVM5STBsVlNjR1g3OFAxbExYa1F6d0FpbHY5a0xlSFJjbFBCNDBnYWU1NVZnTm9JR09qTEo5SXdIN2I3emQ3MmpXK0tod2lEakNRVFN3bEdvSExtdnRzNEVoWjYwaDhEUXE5ZXZzeHRGclVrMXpLdFMySDA5OGVrVzJqTExJenRoM2dZU0JKa29hd2JYSndpRnpnL3ZJWlVybmN6bjl6RmN3dlEwS2JVVW9qMk1pN2JhSktJOVJiZitGSURNZTlrekFPelI1SzVkMEJxRVFyeGpTSkJwM0dYZk9YQVVhdWgxRTZBc1ZPOHdZdkhNRUpOeUNIaWRHK1FTL2FLQ0toRjlsNW9iV2I4YkF5QTRYK1NMSklmcG9GQ1RlbDBZc0E0N1FvUXZLcTVKUzQzdk9WVndIaUhQOStMSmlSNW9GQzFNQ3FzTWpVWUp2Y1l1Ti9PdERtaFZ6c01FN2JmNTBGNU9jR3hmQUt4T0RCUnA3cUJSNFduSnU2bFc2NWtJOG85Tm1pc1N3RXphYWJQUW1zVlVzTGhZUWk1YkdxdmlwMjhmY0JVOGRtVG1BQUNaaCtnL2IyMlFCK2dRYjRxMzJYNGJ2OWVFait6MDZmSW9sSVlJM2k2eDRUOWpmTHhidUMvaXhNc1E5eCt0WDAzOTFwMVVxWC9tZVZadVNWZHNSOEdSMXIrcTh4dENYcWJBbzd3RzZNSmliMTdWVHBOMmgweThBUFNoNnRISWhOWjFvSHB0elVhMXdJb3U4RzRnUDRETkpTVStOL3kzaEc1bGpNWEdtOTVxKzF1cTVQRnRRRlBEQUpHNklVb21TM1ZYV1EveTJydzQ3cFNNZjVxOHBibHcrNTNZOVA1MjE2OVlMNGpoYjRXUmN6Q2o3T0E4MGVpUkFQZTFIUnU0YUlsRnYyaHdJWGNIcit4RW5WdVd0U3pXM0ZiM1RXSWcvc2FIaEhLcWtmaEpObForWm04VmE5MUpFdlhQQVBpMlpvVjdPc2VZTGRTT1hPRlJSL3BqNm9RUnF3ZWhBdno5REdoNUxCbnNwVkEvWkNmYXJkQkttOStIYmpEamJ3akhVYVZpRW56V2RwLzloOC9PVGJab3VSTFVaa1JMVTV3MGZwUnM0anM0WTNPZTEzR3hPM2dhSFNYZ1pQZllER3VUL1hmZ1RKclp5bWYxWWVKZzdVeDdFR3VGRmt4RFhiYW1vUFREd1Rmc1NPaWZ5U2lDcVNmZmpza0dBQjBDMnhqeTh5M05ZamdEK1dPSXJTRjBlakdCV3RZKy9mOHFqcHV3WnRlb2VtaG91OWtmU0QvVGdWMzNnNnVjamRGT294MGNMc1lqbDFJQitJZmlsYVgwaGFYNTJGb0d4SnZpR2tEcEtHWUxSQlVlYVNqOWxDSGpXTmZXRUdvTEhXMC9mVzVvTTR2aXh4YjAwczRVMTZ6cmpJZDhoM3dWNXZ3R0MxMFQ1UTVONTU1V2xVdHZVMWNLM210NXorTCt2OXROMko2YXpBRzlBQUJzNUpveVFjWWJwM01KVDhDcVRxV3JzOTlpS0hwZmQwR25hUm1qTEFBWWF5eXVCeXpKWjNDck9ZSG1HN0tIWXhvQ0tCRHZ1dGlvM0hMVzdTTWcyZ1loeTdaTERLSXpONVVwak1jbGROUExBSW1NOEtkcFlRR1ZKdkROd1E0Y3dGTkJ4SDluS0d2aXp4WjRMNy9ON3dNbjF3TllPV2NaQ3dGZlBONkhGWW9QYUxNd05vOG81UVhJdFZ2TWtIRkwxNmh4TU9yZGhLSXQ3VFhGYVhoNFdjajhPeUxobllTcnQvUUJ5RXZQRFc1R3M4QzhwMUlDUmtBSzdVU0twUFgyeERzWTczWlVWY3ZQVTBadDM1QVNmS3Y5TWpiYlZsOUZ2aWFTMCtnWEY1MG5pMVVpWXpwejY1WXhWUkRGUndJTGdkVmRjMTNlSVhQdGo3UzNOOFEyekJmMTZoQ1d5eHRYYVZLRXg5eUJWUEdvVVVZSkc5RVlKcWpmVlE5alltcUsvMkNWaUhkSXgyOXh2WEEweXh0aVg4NjZmUEFPNldxdVZneHlFcEIwTXFwMVFHZVkyK25WaTcxazFjZUs4WWpNcmVCSEVXdXhtM2xDOUU1cUowUWVFL2NVdGFjMkw2RUZSem5QZ3VreXQrK1BRc1RJdVVudUpZSGVPbVZ6YnFTY1IvTGMySjZKYkpNOXJmcjFJMVVFVzJVbzcyMzRueFNnNVRVTFNqYS9od2RNZW4xcjNOVWE1Q3IrZWtxSVRCS0ZoZDg0bFZQTjlnVm1uREtoYkVFQ2N6YXRJSWtqdmRmTCs3TzM4UDM3aGZ4TUNOeGcvSC9JajNHVHUrcy9yZ2F2eUtSRU1XNVRnaGlvNW5xNjlkWGZNTEorc3dUUnZSMkdpM1p2amh4V0VqSE5jR3BWeW8wdlh3Sy9iT3E0cVhzOW8rR0lrT0lLT2FKZjQxWXRzMTQ5SDZmU0JsWGZmSDFjOG9mRTJCZW92VmRyVnhZdlhHMFM1U2xmc3djK0FNMWNteXBnQVRPNWhiSWpkREl6czhRK0dJc29CRFpIZ1pwc2QyV2xGSVRKWjRCNXB5dEJIWEFieG4raFQ1TE9hSnk0M0ltU2RLWldvZU5ObUJGRmdqR2JWL0Z2UEpuV3ZWVDdreUtxYmZyd3lzaVVVbTFLRyt5cWJXeEl0K2cxWGVEaWRaOTdCdzhjNmhjSkFudHQxYnJnVkxSbnEyekhpWXM2QlJ5VWlybDFuWWhPZStHbVduUlhHbERGQlFzWlhzSllyT0w2c0NWdDNRbmJSbHhsSkFFRWlSbFRNWHVWUkg2cXJ6ZnQ5R3c5ZWFLd2lXRkF3dDR2U1E4Y2RRbUh6azhFY3dPMHl6NnlQckMrSlc3dkhOSkxqZU5pb3llNjcwMEJjMThDR1B4MGNvQWRXWFMreEo0Z05WamhlanNtQWNGR3FlMnZwRmVOcGZWUlRDVG5FUTlLMisyZ042bG1IUENmWWpOSHM0bHJkMHA5WkxwMHFFTTY4VmlNY1dvVC9TejJkVFQyNU9iSGViNVpqNW9MZWRVakdOWkI1QzlpM2FMVVlOZXNFMFdFenhYUWRUaU95REVsdjU2TnV6ZXVYcUJhV0V4YXpSQUx0c01NWU0wRTZMWWwxMjA3dG5HM1VOTDZIekQzdUR2RE1ncnExM1ZBSG1OWXlTVDZSdEo2dURYMm9mMmlvR0JMUHBrK3J5a21iY3pCVHpoSHpzeklpMVg2Q2dvWTVlOFFtMVdaWVJpOEdNcTIzQU50U2V4WGk2bXhGSUNnbk8zLzBwZHFkMlFXa3hFNHdoeVR4RUtuQ2h2OXRvRkFWT2xyY0o2NTBHWmZrSm1mVGtJSnpnQzFFcXZueFNiMnNRUXFvR0MrSGsrRk9vZEhnU2pCQ0JXS0hHeUc0NzZJdlE1M2xBVStJS0REaEUzaXdFNkNGUCtyQ2pVbU91cEh5eW40WTJmREJtMmV4dW1CVkJoUmlNMy9RQ1dqTkU4YjFoMFBYckRnczJCNFg3Qno4ODVuVTFpUlhXVURKZ0RtdjB6QTN0YTRsSUcyQlQ0cEp6M1o4K0lOYXdiNmpzYURjVFZLN3FZRlFLeDduZmd2MEFOQUY0d1BsYnltZGVXWENsRkNkRnM5ajlEOGVkdTJyYUVBc2RuckxZaUZOWnBqWVJEVWFhUFhndXRsQXFrUkZOa1lYbzd3bCs1dFRRQ1ZON0EwT08xZzBBa3o2WjV0M1BUcHNGVHFQUUJJNFNENm90OUdCdGRRdmdyZlNVNmdvSEFaMG90R1Nmbk9sYWlUVTA5dzY5WHlBUzI1bmxuTDN6SElib3hyZWFVcEIvR0EyeDJsVEJVRThzb0tNZVlMc085cFRCVzhPL1BBbUFYV2VZd2hOSWxabitRbWhaY2w5M1dLTHZWMEtkb1M2UHJBeE9JT2VjUzFVQlgzK25zWEYwVHZuOTFpSzVjSk1udno2UGFJVUFLbitiazJ6TC91TW1ibnRNOFpGNGFweXlnWHBPY1ZhUEltVjZkK2ZzQ2lvZzd2eUppU0JwODduNzFRcTVuMFhseWtnSlBqSFZXYTRUeHBnRWovbUs3TFFJZm1ORnQ1a2JMOTYvWG1TYTIzOHFNSkYrR3BwSHdlYmJBd3lNZGJHVUptZStKQWlUNGZ2cWw1L0NlSjZTVXIycG5ZWE9EMmxIYjJCcUVvbVhCQUVHZ2tuK3hOVEs1eXE0KzRTWUw4cndLditDS1FjMlRHbXN1aHVzRWlpaThKRlg3akFJVy9wTmtreDNqZlVNdUpDNTQ4L25tSjN1NmxkbnhDN0xML05sZVJhSDBFV3NTcHZtWGdNcWtUa2xIbUxYamYrQ2VKMTlOZDhqUnp3V2srcWQ0cDNZak1BazV6ZG9HNkUxMFBzTmMvUDNrYUV5UVdCSzNYekFvRXdQME5ia0wvWTJHUHMzSko3WFcxYmdtdlhnbnExR3crMEIwTDlWWnJWUFhWZDk1UElTb2d5Ull3b2ZRcmNLeHdyZzdLaUZhbjUzRDhQMDZ1emg1a01RSUlkNWdYRnRPWFh0cWJ0Y3p6WUxLSXJSbE1qdW9sUEhnOS9ac1AwdkNBcVdNMGo0bS9TUFpXRW9jNzM4YUE2UlZDZTVRL29QcWtKZ0dJRE9IVllhT2FZV3IwSFlJWEZPdmI3NC96M3ZuVm5TNWJIY0QwRWx6Z0JYL0hmcTg0TmZmWkdtd1ByMGk5b1d3T3E0MCthd2RvZjNFckFoQzFaUFI3bVlYdFM0S2IrRWYyajkvRG1iZGlidTdwVjNTaEkvaDdHQWlRMXp0M3l2cDVVS25tM1lJalRkUHJIMDVoRExRSjl3RER1WmlGWWRQOXFBOGthT1RUeisxWERNZHR5RDJkTWVCTkFYZk0vSWJyV05wUExKaXFDZVZaa3MzYmQweDk3Rlp3eTd1SFRTY241UlRKeGtLaEpsbkVGTC9oUFNHRWtUZU0xVUhnWU56VGpjcXVWRmtLcmZMS1JwMEpERTc4ODJjL1MwWERDSmo3SWR3SkJGWk1uc0JudW9EOHdobi96M25qaXJaUGxuYXBpTmFSWWpOa25xSFNLdFJQOVU5Z0gyLzhjNVptUjI3eXkvWW11c3FuMGpMbVgxOUdsTkJSTHlLOG9BWkRlejRiNEhrbStGSE05b0R5UTFqTExKOFgwd2xoZEVaQnZQQ09ab2RxK29jWExEelpQR0dxUzl3VnJzcEo4NjBPcHM4aUJaOXZyTnJkeUg0ZEpZUUdNeVplaFkrdzFIQVM2c2xWZUd2QWFDQWwrZ2xqWjV2Sk81WEpsMnZoQ0h0UjNoMHdhWisySmJCTVJJakQzdUZ6eVhzRmg3S29PNGZiN2MxK2tKbVZkRFcvNTRPclhvQlJLZFRVY2piSm1JYnFyRHBvSm85aGFxQnRuWVZscWRrQkxhd2FoU3EwSGlNZEhtWkc3RDI1OW9FTUdxWjJhQlRoQkVRTEJCdDBROFk1c2hWaTZtMjdDYkk4V3h1eWhVMVVYVkFBSVkxMHFMSFJEYXZUNWJpdDdPVzNtVTBSQXZEN1FvL2EzNWVKV0NOV1VPR0ZxV2U2OEZ3eWkwRlUvMDEwRzkxdHh2QUtYTCtmMTc2RFNvV25IQnRQVmNYZ0N2ZnNLY2ZENFVaQ0tmYi9CT0lzYjlIRU5pZTNhMGwyZWIvMWxNL2JaeG15SXp1eHJLUklwK1ZmWTF6enY1OHFBNG5hdWtUSjEraG5kS2YwRkMzNDNVa3FmR0pBblExQ0Q2TmxSaVIwSGFzNjBMNzhMVmNZMDcyRXM3S09zT1lvbTlRL1NOblBEeU5hVzl5Z1BJbzhIQWNrL0hicjJtdXVycGJlTE9Sc0NwSmIvWDhoNkJsdWdPODdVY3AveUFmd2FieFFaRUtYbERuK2J5VnFXNWQ3MWpoWlpnSWRCRldrd1RlWjd2T2dJblVUZ3lGS1NKZ0IrdjRUQlpjZlBmVTYxNXVmektHQmMwOFBGa1psZTh4UDBOU1MvWFBIa0g3cm5iY0pNNXp1UTRvSjhHbDBoa2Q3ODZPZ2RTSEhmZ0tnQzE5WGFsV0RrOWhwUkc3M0xsSHdNUXJzcDNXZUo0bjV2TExCZ3dQajQ4TFdPdHVPRFUrY0d4ZUFhcG1QRlgzREFGUVQyam5taWY3eFVSRmZuUSt5akZoc3RmL1VTeTIySjlzcEhKRklZSFB5Tm5NaURyV3gvcWFvMDFDaWdFL01ORXVVY2loMUh0TU9UK0IxWVN4UjBWNnBDdDB1bG1VanZtMnpQYllHNWlNa3N5dzVVZHQyZjN0a1hVVStoczNHbG9GNDJHSTJvSXZ2aEZjNWdHVkNsMkJtSW1Cb2ZEZzlCZCt6QVE2b2J5ZnlOVldZQnRQNlJjajBjQzgzQ2VlaEoyMkRZdmIyWTFiQ2R3cXh0Y3VQSXVMR0NXdXozT24xZnZwQW9hZ0V1Nm5abDkwd2g2S3Z2bEhhUHdIMmxPSk1RaGF3cGN6cXFJUnRobkVkdC95OGxYRTVwVThWZkE3aGJqY3dudTNPNVlZSEpqNWFmS09wRnJ2d2NCNVNHSzk2ZXNkL1pMNG5lTnlUSHhkUGFBWHRBTkw5L0lKSmFVZjlsMW9KK1YrampoWERObE1PbCtOaFQ2QkVLRkRMWnM1MFRYcEJCN0Qwajl3bFhkRDdlcmVWdDlTYk5GK2MxdlFGMXBCbWg5Nzl6YXl2NmZZajVIM1NZbk9FcGNqQ2cwS3JRMTlSRVBKdjV6Nml3ajZpUVp2VUJNSWlIREJyV2lhaWRmeTJ4R0xrVmppZTc0cmZDVHFrVFBndkY1eFh2L2tuT0pCNTlSNjRCcE9UTHpJcUFlM1c3SmNVRjlkNWdVUjlTZHNsQUozcmRYUVdIQTJIS1NwK0xjay9sM3Y1SUJ4bHVoenRuSVhjLzdFaGp1elp4RHh2TEpBVVU5WUtNVEFLcHBNaVdWZFhEWnhCbkxKK294dCt6bC9HR0ZDS1NQbjZuSDVML1dzQ2d4RmhvTzY4YkJJRXlzOVI4Z2pOeDR2Tmk3S2lVaHc5cHphakQvVGxqcGVHa0g2NWs2eW9YbFhYRG9xcDdUaUFJSnpTKzFUc0R5ZEpINk5WbkJvYUpreWV6Wm9YQkhPT2hSSUZCcW5tdFJ6R1hlZjdmL2NFRDFES3gwUnhUbHE4YlA4cEgvMW5lclV1ZWd4SVYyRyt3Y0dvOXhjU0R6MGE3VXhKamxoaW9NTVVVR3JXb2RORXRKTThsbXpEcmIzS1F2OWdRUXpMVzdKcTRZU0IzRXE4emxNNWMxVk9yaEVuOGJ5ZTNzQ084eERSalNIYWVPeWFvMThoVFA4YUN0ZGVQVmNsaTdacEM0NUxLa3pubGUvQU1jbmpGdW1KRXRFTHUzZk5vRTZyRXB5aXp2TVBsOW1PUTNtNDQyVG13ZWtVbGplS1M1UGNUazYrMWpzb3lCWHNNVUp0YUZjTmttWmhPMDNwU1FiSDUyYTNnQUt6ZFBLQzNpN0tpYkRsTGZITllkaXM1R0VxcWFzRGlleENDUFRLZFh5Q2hmeFptbkI0dkZvalB3bGJmNzYrYnJleFpDcTlFTXdJMXB6YmJRclhRbWQ3cG9JQXBWejZ2cVhEQVEvcjhlQ3FsNVBBTkxZdGpUMHBsSi83Y3pZeG4zT3J1S2s1OEJGbGN4cVVtdElTM0RQbHdxWWNpVDVTU25uTU5KMXMvTUlHeGRESlFwZjlWV2RGNGFzQWV3Qzh3WkNDYzBMTUVRZVQ2a0FybEl2dWZ6R0tOdnBpbFNEWERZemhyQ3JCT25USVJpY2dzT0dtV2Z3SXVCczNNWGFRSGdaZEdsWWJBTWJNKzVSK20vZjB3cUNQQW93UklINU1LZFBVV1FQeWgwNUtKVWFXM3lmMzc1WkJ1Uy9QdFlHS2hSd29mb1ZpTFkzaVF5WnpiRWlhaytnZ0JLdUF3aHExVjhKU3NvSWZWL1I1MjdVdGtwSFNGQUp6eU91emtqalNEcUFPOXRLVE0xbVhCSEd0cWdPZEp2eElnTUJYQ2pXUXFDeVZOMjZvTnNod0QzN3I5SVhCL24vNnJQajVNMFNHY2dmeitQbmNSOWwzUjU3RFBnam5nZXBBK05EK0dHMCtHMTFGWlRzMXdPbWFScHA2SzZ2b2U2cXdMcmV4WTJQUEQ4WjFZRDdmd3l4K3NxcWxaUmJ0N2tuZitnMnhhQzdRblRCNzFSOVBoUFl1NS9COFFqQjZBR1VYMjdUQ0FIZGp2MWljQXJDR1A0RVF2SUJqNEJqN25pamMyWmpxcW02bXBVNlJaU1hCRHRYTFV2MWQ5bSs1SXVWTFB5RHdYS0w1UmYyY0hlc2JmS1o5T0V0TG1xa2NoOFIrRWZ3K0E1TVF1VlRMMkRNM2ZoU2ZiRkE5NXYzWXlScXAzZlBnK25UTmFwWFJ3YVdLOXR6c3Z5bUUyakFRangwcDVLYllJOWhHVDNUUHBNb3U3aWpWRXpOUXFrQlQrOFdKcGZjZHljVlY4QjZFRDFGZ0M5WUpMUjZnT2FueEtUY1V5MlRjUUJlMjBqamYvaE1jN3ZBWE1mR3VEaWNZR3MwZGlQT0lBWkJvWjQxMWZkTUhsUm5vYVE3bW83UmlsejM1Q3N0aDhOckUvMW4yWDBtelU0Zk9wR3JtYWkyZkJEQ0txcTQ3a1NiY0pTc3ZwS1hSdFdTb0FwdC8xd2dPclRvYmwzN1ozdHRTdFYxbXVBMTRwMFYza0xScWRVbzduSnhqYmN6RUoxSzdGMDZUbkhhRzkxTCtaR2tzZ2pvSXJGbm5BUVQwZDlXd0dTRUlmdmswOFBoSzdMU2x6L21VYlpkS29JUWdnUXdGVkp6NURBTmtjaWxoYXZBam1xSUliZkw2RWhOTzlkR1ZoVWZVa3hXU1AyVEZmeHhsckN6d3NJQ1k4ZC95clRDREFPVWwyejRTUmppWTFwaGU1UzYvdmFlVi9GN3d0MDlLcndJZ2kxZ0RkZ0RHdXpaQ0VHWFl4VHp0WnZzaDBPbFYvT3RiZGFvRklpVUNlL01rTEt5ZDFmSS9PNVRQaEU1dXFLcjJaK1RjMURRSjN4bUpBOU4xdXdoOVBnMXlGUnAwME5pd1EvSmVFMVRJdUxFVUdKdW1FeW9FN3I0MEozd3ZmSXVwYWtXemZhZFE1cXRqdlhvNGZyMm4yT05HSkdqdGVlSE5ITEdrbEM4ZXFCZk82MUVRRFBnMzNLMkZIVi9rNTRpSDY3Y0NhcnRIL05jd0x6SDJ5T3ZhWVZCa0RldHhQK0VmaEUrRTJIZ0hKVURocXgyOTAzU0R6SWdkbEx5cXRYaWx5cjlVZVRhS2RWOHdob2c2ZXgxY3YveW9MZnFjbGd0OWhvUFZHMmh2R0dnYW9iVnRjSWU1dGFkYXZ2L2RZN0I1UXlZKzROb3Z5eTlhOWg4T205TGcrN1c2ME1RRTl1MUFKajdEVE5xQUx3VlJaRkNjZWxpc1V0UXcybWJPc2hlZmZrNkY3SWVaZmdrV3pPUldMUk5ZMWRnSGRaNEtTR1RIbFV4RGpZNFIwaTZSdWtERm9ieHdKcllEMUs0bHBsRnFXMmRmdHFTSU9TVHdkUi9ISndCek9SUGtxMzZTV1N3MDJsMDcrQUdQcDRxMFo4aW9GVUxqRUlMRmhWOStFZTl1RW5iSUZRdmFIU2dNT3V4NEZLeW1XdU9aWXpOOUIyUDdNbml1Z3pDNURQZE5rQnB2cEVqR0hMcXNyTTROME4wemRRMTdNS1dEUjd2aWh4WXNzWTFJZ3dLTmQ0R2ZVN3d3S1doMk5od2V6S2hLbFA1dkwrSkZnMFpFa0hNMG13OEJPRENJTC9hUWZJOEU2K2ZyNU9ZKzFORm9QNXFDZ2tuNmthUXRCY1JsU2lFM2dNc2NpNmMxdkJQZkE5akUrSVFJemg2M1lGdUoxNENkVkNTNHRZUEozekdkOFFOcHRhQXAybXB3Sy9LekUxQWdUZXE1QVNLVFNsaThtL0N1VFZ4dlBxTEpiTUFwTWc4dk5mb0NsTGl2ekdCV3hVQkJmOXd1b0VJTldNMTdTcFdhbzhKUjhPOTZyNi9uMUtzdmQ5T3UzMVNqYTRRbFRvUU8yZUhnMFloRzVNaWVYUzNVeFowNGU5eFdUWVMvOEZQdzZDRlg0N2Z5d1VSWXdybExJdjltWFN4L09JWElNUFd4bXk0cFR0K3hOREk2YnpjdWd4VGRXMlZNOXNjdit6b3ljTWtzdDQ3Yk15WjRXQjQ4MWFSQ01jSUhqdnRPSnFrWi9DODdMNWtLR1VtcktqcmZtbldHU3hNWFdWdVZ3WTN4bWZyL0podmZZNjQzMm13NldpNGtJYms0dllWRkZRUk5lclBrNngvelNGSWRQcm9TYnZIbEtrR2FSL3hjQlNKQVd2NlJkRTZubmJ4WEdOb3FnbjM2dXZXeXlDQ1kzb3FKc0dDY3daOTNmU3JlaXdLZ3MzcjRPMUNmUTBuR0RYQmNXcmpFdmZjQ2szcDRSbXBzTTBuZ3l5b2l5dnBMcW5ZTHpQcjNxUDNPTTc0RXVTNGI5ZEJFdDdxWkd4dm9uTU0xcURacm9PVDJ2ZkJvclI4ejBYRm9hWXg2c0M4Yjd5czJ6Q0JiZUQyaXFHM0JOdUFlUERjemVWcTVYRjNKT3JqZk9RME1ENlpSeDlFMVlYRUIzbkNGNTBORmtzSTY0c0xhUWJWT2dCajY2NFBiVkdQNVpIRkdvZkJBU2ZVMHlYRXY3emJHV2dFdFAzWnRxVkFXYWtOWHV1NDBxUVZrbHZRN2JwQjBUK0RpRkRrSGI0NmU1K0d4NFUzQUd2OGdBQzk3MVZwV1RRcHJBM084WURsSVRIL3J1ZlBUMlhnMjNqQ2QxbnJIdzdzb3BGU1FsSHQ0U2syK2hqK3ZFbzFwOGNMa0xVbFpURlh3TGN1MlhYZ3d2SGUzaHM4STh2OUxZUC9xV0xlenZydlBaeDZmM3dDbTYwYnlSME9MOWFWcGg0czhSWFFHQzZONjVQMFIzNlBLU3VHYjUvcEgzWUh3QlFkUytaQmNZcXVZNFZZWlNsbVNnblFDNkxLdklXckZVNWp5M01kL0lXVlZEeVRXU0Y4WC9Ucy9ZUWxTeHNucXlyS3JlNXdJQXJOWnEzeVhCbld4eSs4dEIyZTc2cUltbHJOanQxeWl0TGREQkR6akIxMW9oRElKUG9lZHhJa2E2S3drYWNWRW51ZVBJSmNmNEpoYWIzMTJISTRkNXNMMkxUOWhDNFFiY3FBQ0c3K0dsVGZZNURUM2hjM1RvVU0rUGNZdlpyNElVbVNUWHBhc1VPenJpNFJlZ3ZFZGxPMVQxK29wd014Z2hSZk03dHVqL1ZCd0I4OFN4dlgrUFVCSjhMb2tHZDFqaFE4NzhmYS9aWTZISVB5QnpIRzVCaWxZam9mUEFvTmxzRTJIVFhpWG5GU1F1dG1CQ1RpQXNvdU8yb1NMbnNnM1M4ZHBmM3VVNmlaUjN2Q3o3cjlvdWliaXlEL0lUL0ZGOFVFV2lURU9FaS96eDFZR1V1b1ZtSmtNdi9iK2dXS0JGRkljbG1IUGQvSWh6UDlrdzk0am5DT2c4NkdxNWxnV0xTQUZzU0k2UG9qa0tIN050djh5QnVEOG1Hay9OamZZZGJEd05tWlNNWTVCYWZ1Y2pneUFKdzUyb1FNVnV5UVBwSlVSaXNPa0RpT1FWRmZydjlGSGd0aWxzV2tvbWF5dHJpMmx5cDV0blBhZStDV3JaSHQrbE5Zd0NCTE03Q1ZYcFFoeGw0WVJvL3JpM1k4V2wyVTIzbHJoelVQVzMrQ1BLa2R4WlR4MUdldmhSckFYajJjTG11RkNydElTeWI3MEMrTzN1Q0UzVzY4Mk8xTFdSYlNIQzJHWmpZSkY4aGgrTmQ0MldndVhXSDNKSDEvNmI3RFY5dFpQVlo2K0ozcmVSZUNqd3hYRHRWV1UrRXhvN1EvUmkxNDJBaDNUdFpTSGx0T3ZUL05IS0ZwRHNuQmNyNEJnbmJqR0dicnRQK2hJNFgvRkxCcUVUbk1pUitpRm1OeFNGcWtad3hLMkVjNWN5ZlhCamdwR2s3R001U1pxQnY0UkpjR0hyRHd0ZUtIV2NqZzlSKzBHQXVaKyt1cDdkWENBeGp5eGlTV2FNa1pLNlg4Wm93c2JMTWd5ZitBcEhxNEYrMFN6QzFyTmJGeEdYUTBEakRXZ0FtZWQ0c2oyTnAzNHRGaU9jTms5R2ErY2IyM0dlSFp1V1EwMW1WVW1waVJWTmFmT3hBNkZ5TS84c2UwcGQwbzBaZXp0cWhRb3VZSFMxSjg1REd5a2N3QjUwdHJDZFROU0JBQ3pYc0o3bWl0NlJpNE1LR0tnNWp2djFlVUxYR29DYmQweTV6M3FDdHErOHJ1b3Nza3BLZlNSSko3MGFxYlM2ZG1aU29oR0RDYkVreXpPN2lXMDdhc3haZWs2L1czUW1jK3NZY0RFZzhlTkl4QUp4OFBnZXRKTmZVQzlNYmc5NzRLUnJEOUkrVFdhc0VqSE12TjcrWHNCQ0NOYjRBOGVqNS8xNVAvY1Z4VEx1dzhTK25RK2JPSWhnY1NmNGhNOVlxZ1k3R1cwMVYxdklqbzh5b0VIZFhHQnBIelo3VnlFaHo2eVRES3M2dk4rRVNBYXdrbVNIQ296YVhmOHozOGkxLzFXVS9CckNxNFBKbVMwZWZvNkJ3SGdKRSs1UldqWVY0NFFiMlNjb3ovd3lBKy9sSXBmbXFpQmI3bjVzbkRaWUpzdGpxdjgycHVqZEVEK1dWaVVyV1N0dWNJMlFaWHllTVhwaVpCZ2c1V1pXN3g2YThOSWdsUFpnWVpQc0VQWElmOXp1TmZ5QWozY3Nod2dLQytJb3dUQ2I5eHZXcFA4MG83NTltVUh4Zk5QcWJwQnAxNENIU2w2b2Ird1dxL0xiT2phUjdxY3dqMU1TTzN2RjEwT0gwMFo1UGlDNmFVS2J0RDE5WDhCTjVZU0dWV1JwT0p4RXFsWm1LNTNjbytYOGl4S09QTTNFMC94cTRKRHk1K0htM2l1aVRlRjVtYzhrdFFQVXhWd2pBSFFUY29qdHIyeXZTdGkvOXFYSlg0aGptbE9HRk1CSGE5VkgrbkdDVi9wS3dZS2ttdGZaZWJoTUp1V3dmZDhFVnRvR3cvelNLYXFCYnE2VVpDdXU5eEY3NTY2Z3E5WFFJR3RaczRFY0pPVzVMZ2h3UVRSS0puSUJ2RStIRk5ZbkxpK09RTzBFSWVRN2FyWHdMTzlJQ2lQK3BIMjM1RG1Ld0NzWWNEZFZWRUhlOTNKbVpLakVpVy91TjQ1OVFjUnJMR1UwT0E0WDhmVStCREdQM3pHdFgrWTRVL285cUprT05md3I2bGpMbDNsazhCZXg4QkJ1bW5QY2YzVE4wNU1RZEZFWUIrU2VkVXMrS0Z2UGJZc2V3RDZkWlF3VWp1TS9LRzlGUzJ5L0tvOEpqelUrem5ORXpWVzVXRk5JWkZRa3gyYUVNdm9NNnBxME43TzdFQSt6NC9ENlRncTEyK1QvQjNhak1rNDc5UWV2SndtaFE1SHFXR0tnQ21UQVFhNElSaTQrN0lmRmhQUXd3WUVZcWZtUHhFNkw3K0FhUkdieGlPYTJybVFmRnVhQlllV0U0a013QkdpaHJLdGFQeDI1QTkwcXRqODJPcno5dkZnS2dxV1JGNE5EaXliYW0za0lrSzZHUGVPK2xwYk9vZDJ2eXdadE9iWmUyZEU2NndFM3ZWWThmQ3F5RUlsWHFJNUZBZ1JRQ0hNdDNHZUE1eFdFUnczbmlqcTBncDdvcnJHUzJpRjFwd1VZN3M0SUJ3ZHZJS2s1bWtQWjZ1VDZ6dWFLaVpkZ01LY1JHYlUxci9BeHhvYUNNNWU0Ry80eDhxcE96WENnNGpzbkJjaElyZ3dKRWlnbUhQTzhFL2xsVVRFc3FVdWl5UXA1NzJ2RFpNL0Y3Zyt4K1NheFJBQWlyOC9TT3Y4VEFucjFWMm5nNDMyWnluYnRuQzBRT2R1aEJxb2FKRmQ4d0NMdDdVVmltMTBQVE1YU2lYRE9RdzIyVlJocVFVclgwR01uU0VLSlk4MTVBelU0ZjhZNFQ0T3ROTTJ5NWpqeWwwOERGZXcrYWZWVGpvdlA1Qm9JU1UyRTJHQWM2Nkh4YUh3cUhPeVdvRUFYMHBreTN4bjI2T3VLM3ZqcGJJRERaczBPOHpjRGc1Q0k5c0N4bmZVdG1RRXJXc05Qcjg4K3NGYVRvemxIRUE5UVAwT3ZTRm1qblk0RTFNQWl4cC9rNytZNVFYRTRwQUZNVVNtejlzTXhuU1lSVm8wSXU0ajUwVllTWG1aMGI2bDF4b01ESG9FN0J3NmwyWVl2UFoxVXNWSzBLRzhsNUZuQXlxTG81RWNlSjVQZjg5YnA1L3MybE1mSVdHNmdPMnZSNWZFTWhLM2k2RkRhUXpRRVpxOHJXK3JmS2FBQnZ6akUxbGM2eEN3NXBSZ2QzaVdXLzJmYUlaUW43NldDcEJzQjZ0bm5GQXRvOERqN0pubkNLbXdEQ05iWXJUbEFyQXJpQlpMVStNZlVqNlBOR3JVRG03VTVJV1A4QmZjYWdKcFlGaFUyOXRGK1ZWZnU5WjhkK1RnUDllOFpQL3dWSkFsZDJlSThJejFHR3p4SEVUa00vYTVwbWMvODd2SThaRnRGYjRsa1k0Y3NwNDNmNEZDZ01najJMRVJvbGJZa3RSSmQ0dmowb1ozUjRDNVdSYjZiZWZJMEV4b3lwWXliMXBxZnRNL1kwa29HZmlpMkFCSEVSV21HZ29IRGxwSGRyTkJ0cElIYWVsa1BsdUNGZS9OSThlOXFrc1JpZHY1RTNCazhjK0RGUklndUJ0VDVscnRybURmd2F6SitHNlFDektZd0Ntdzlrak9nRkdlTzNFMDlMLzl5MlZTcmdlRThPWjJlYm1wN0gwemFqdE1rQUNsWDR2eTNNZzhiUVFXeTk0SHE5QXl4dzBFMTdaa1JUbTMyblpRWVUrSFNscmdRajFBSGV5a05URlpPK0M3VnVrTjhjeWxPRzM4NGsxTXNXaXRFanBXMDA4QjZybXIwMG5MT1dnMW1NdzA4L0tsQ0hnZ1hteVd3Vmx4ajdyZ1EzMzgxS1NxaUsxNytvSDFXUDF1VEJ0U2lvdEwwbzRJdDNrMWpyaVZ2VXZmUTBiczRvWUhhWnZJd3BYVEtGOVZxY0lLOWptWHRMeU90dCs3WTdKMDd6aGJ4aHdSTnFDRHpOTGhDYlFFWVVBSkc5SXM4SW5Xa2sySmFOWkJzNEVVT0ZBUVdtQU8vNmxJV1dqNnFBaVZTVG1sU1JLWHZsNWVLYmVyeVl4ZGVuYkxSVERWL3YyK08zcmhLV1RuU0Nja0tXS0NPV0xXcHJJMGVUamJzdUxKdEFUNmtMWjRkT1F0a25rcG9vUy8rdlVmbkU5ODE5UzVhODZETEQ1WW4yenZNQ2dEY1JCSllVQTFZajBCOThlSzJXN056Q21zRTNONHNxZHJJMU91VldLY25wMUpkWStvK0FpVjJmSjBrREtaYWwyQ1dkc1BabmtvYzZLWEtQbk1lNUtqZDFXWHY1WUNwMXgvb2g2TEgxNHpLcGlFbFdybVVKTUtoQno2amM1RU1IRGRsbXEwaDQvc0JyM2V5RzdUNkx4MStZT1pVTVcyVWJCUUZGM2IxZHVja2FNcXgrY015SHVUc1I1dW12d0NGYVJLNkVKOVRqK0FlcDZyRlF4bHUyeVBxYjNHQUVvZm45S2RQelNpME8rY3k0bVpLb3IzYXpEK21kOXBYaGpOZXd4Z2lBVFNzVkR2RzByaG5KR05UYzE1RU9SZXRvVXBFZFVidmx5djJxUm9wa3ZKRURiTk9ubjFNd01ScE5WWlAwejRBREZodkcxc2NuaS9lZUlvWU52SStGdmY2cFVRcEkxRGdGaktmY3JTckdON2o4QUNwR0tUT2ZqdE9pYUpqMk5jeFUvNENTamV6ZElLZThBbk5HRjc3S1ZGRmlKQVo1bk12UmFSWXVQZzNkS1dYS1hkcTV2STdIajhIVFpSdVo0VnBVT3RUMDkrQVk2RGJqam9rUzFqQUdKcEcweGVVaTJnL3c4cXJJd0lsRjJoajVpZXdCQTVZam83N09odjk1UUhqN0l2SXlhemJBWDJkbmhHdVJwbXpsTlM4SEN4TjMwUU1EekUzVHIwSEIxVWVFTEVvQmY0dUVHd0YyZW1VN2lodW0wRU5TMEVNRGQ3U0tzS0FBSzNqMUF6YndXd0JsQnFYTmlieUFWQ3dxL2ltdmRvdzRWUWRuU3p2alhZaVozQkxHOXNoT0RDVjNDZEYyYU1md1pPcXpVV0YyT05rb21BTVpyRkRkT3duNWNQL09NcFYzSFpTd3VjeHpXY3RVczZGNzVRcExaVEtvbW1jbmVabzk0YnBhbWprMGFEbVBlL1Q3ek0ydXhPQUFrYjJyVkt6eDU1eUdYbFk5NDUyTE01T2txcSthNllFaUNUVkVTZ2N1OTB3ZGRmMVEwWTJoMVNSdFZJell1UHQ5Nmc3blhTSDZMdzVJeXg5YzJUcy9lWnNwUEhPZThZMlF4Mnd0TUNjNWQzbGNrK2ZlaTM2ZUFMUXlEcWFBdTIyRjFReEpMM0NvaSt1TEN4djd3N215QmRlck84bFdwRlUyNjRmcVJkMjNLYlhrNTBlUWw5eXlvbnBMbEwzVHZ4RTgxaGZBYjloY2pndXpNWU9oTHlqMm11cWtuSkRrRDk1RTJ2MWZUWm5WcDhmWEtyUkNsKzRhUXgzOHVWWEhrSlNjZFNwdnhuUWhqT0xydlF5MVpwZ3h5Mzg5WWlwL3pCL1BUc2o0djFpOUs1clRsQ2k1RDZqQ2pqd2lnbEphV2lISHFPQytDTVlxa3VhSjNlVHRQUXMvZVVOYWx3M002WjVlNnlFclJTSUFoVWJBeHo1WTlCMGdHdVhsVEcrNTVDWEE3cENVOUEzMnEvYlpRNjk1UlUrNE5QajFiUFAvZ00veW9FSTdvQ2M5cHJPY0Fmb3RxTEphbUFYcTNJdndRb3M0SW1HWDc5UGxkOEo5aHhvcHduV2FTa3dWc1djTkNQakdtcHpVL2F0YS9VdU91a3lyaEFqSGxURGF2cm5WeDl1d2p0Z0ZiZStIK0VYQWlDc20yRERacHJsR0xXenhwNjNWcEtxWXNBUEVIQlNHWGpmYmJVOWZSMGtjeTVCNEtpcUQ2bTFiM3I4eEw5Nkg4bzJIVS9xVHdmYU8zTUh3WjE4OE52L0J4b1hzdUpqZFVQQjVPakFnMnlsQzIyVm5vSzNYbStuaGphMlZtU25TbVN2T3hlNUl2bFhiZ0F3aTlaaGREajRJTWlueWxHTDJWZmpIWmZCL3prYWZNOTVUV0J3bmw4MCtiTFFETWphcGhqaFR4V2J1YUZ5NmRIeVIvUE1vWHlXbXhQNnl1K2RubDh3VkJ6ajIxc3JILzd2TEFhWWp6QnQ2T29OenJYcGQxTWZ3V0FYVWE0MUVkZk5kL3M3c3JnUnYvVUtkb1U4MVhjcWpCUmswRXJ2VGYwNFJLTW45MjU2TDhTWncyZnpob09NcmhTaVQvUnZtR1NzRmZrS2tYRUZRcloxRWd1eVE0Wk9zUHN6cUNQUzFoMWhGNVVhMmhqbXpRakRoNzFFRmw0d2NHK2c4citTTnZocVd4akMvSHEvWjZReHN2Qys4UkZTeUxSSGQ5aDRGeDhDRzE3Q0pCQittVXdKSEtlY2NRb2ZCYmp2L1E1NnFpMW1KSlQ2OUFwYzdrR0lNbGlXVW1jYndTWW85MVZkOERpTmE2d1E5Y3dGNUo3QUR1U3FiS3o5M2QxOFp1aC9tOXBIZnhpQUxEajQxb29GNUJrMHRBanVTQTg1ZXRqU1dDZWxENFRNUS9FakQ0Ym1lWDhzZWdQdmswUnNuN1hZR2xvWmRqNXU0eU5VYWhKLytraCtZRkduTEFQby9TdDIzeWZ1aGpiNm5VZ3BKNHNlRUNSL2ZaU3hyTWJQTzFIY09PSzlQaUJtcUVWRGl4Ukxjekw5M2RNa21nbVc5SXBQd042SEp2YXVRdEplY2JqRGNKTThOcnNuL0xPeGt4WEcvSHRYeExScXdqY3FMQjR5QXFsanU4WncrSW1oakIrVnFqK1puay9UQmdKa0xIMWlQU05WdVhBSUk5aVNRdDRPcC9KVkJKNFVRanB1OFZLa3ZWMDRQVy9Bb2Jyc25iY0Q0SnluODV0b0lDODE0b3V4cnVlOThxc0tzd2Z1eHErNXBRUXpnV21ob0I5NDBIZHhyWHlpdnVKeGt6TGdPdEhobTVIZnlGR3FnNzIwU3lOWUhvQmw5b05qcjVEcDdPa0NIaEVSY1RhK0F2Z3JNQWZSWlQ5SzBEWlp6NGlLTVhjUjN0ZklOeXpNanp6Z2RwVy9wa3RPM1Z3ZTVWd0VLUUhSSVE3cnZMZEVXbVVWM3IvNk55UWQ4cFptVm1BOHFWbjFNbU9OTGh6WHNwUE9CbXZvaHU0SGc1U2ZTbDU1dVJrM2J5UWlwMTM4end5M3E0UzVGQ2FyWEVXT3NBc3I1dW5pNCt5TVpmS3k4dWx2YVJzUUR5d2FxNDFjMXRVMTJUNm5XbUcxUHdVeHFiK29OTUFhMDFPamV6djZ4ZTZYc2h0Ym9LSHRxTEVxL2NPaFY2THJrOVB5b1NITWR2dGd1cmpCbmpMSk0rbUNBbnR5cDhEeTZUZ3ZGKzVhd3RuYWM1NjBlUmlBZzJWUU9SSWRncEp2UzVGaFJYdDdhMGp4SDhKUjNEWW1oYUhKRGFibkh5YjdJMXk4WXlCM0plWjJhb2JSUEtUdDNZT2t5Zzd1am9UWTRyUVFCSm4rWkIrbDhubGpYMmZWS0tzZitUNlRuRHF1SmVrd1FMOFBaSkc4VVVEVE5ONmVkUjh2cEkzL0dMY0srYTA2dlVTVDh6ZzJydE12bVMzb2locC95ZkRMZkozK0RRTUtmc2hjK3pPeklWeGc3SWptQ2NSUjc2Mmc2bkNrUlJWbmprdUdXS3NaL0NlZ3BYNkg0U201OWNxV0ZvSE55aytnRkFFZTAxeEk1T29JL1JnQWQyaUV0bHlCNWE5QzUwc2JhcnhlaHJQTHJPL1lMbjJKbHhGTG9NVFdGNTV4QzQrbWV1NTN3Ymc2aW5kUXlWMm9lOFRUOW85K3JUZllVWi9ic2dzSXJOc0tMaEoxZVhaTDFtQXlSd1Bvc25hSW5BMjhydFhPKzAvNzdhQUZTNklyUGt4N0psT2RwV1c1QWxING5CTHNPaGRqSUdvdUM4bjNLb1JiVUUvZ3UwT2UzVjZyVjJ6OWN0SUw1d0Y4SkcwMDVMc3E4L2l5UmJCZldEb1I3QVM4S2RZTHBOSTNtekZkRGxYeTR2WUwwSnJ4S0VKUUdBSitEOC8zUE5pbTNET0Q3V3BONXRRTFFiS0xVOERjeXdGaG02OWRHYmdYSW1wQXFDa0FXNFEvTGx1UnlZV1FNVklDSHV5NjlNMFVCK1hzaElSa0JYWTBkejBFL3lIbDNibDdJRzdVRFByOW9WbE56MVhqcjBYbDVuanVLVkNnTG1QMXVlK25kZ202dmV5cXBTTGUxZDB0T2hMZkFpeHpOMVVtaVJ4eWZMeVdTU2pDVGFKY1JmeXRCL2w2Q1h1aDYvVWdQZVVWYzc0T01Bb1RCTlllOUFSS1ZVbDhhVkRERi9IRHF0djd1V1dyd2tJWE0yVmYzNmROTFlKZ2ttRnRVeldQOFZRTXJoKzFqVHhCUk9JcXBKc1U1N0Ezbzk3NFJobVFwWHZxeFVOa0RMb2xBS01ISW5kanlEcmkvbUNYeXZkOTd4ZUJnclF3ME51MmhWbmg0Tk9QUGtPQ0UwWDJOU2lXUVFJTlYvVGxOWkRFNEc4VW9oNkFJbUd1VjlsM253YXZNTEFXZERKTjJBNGJIZ2MzNFU3VExzVGdabnpSNm9DVjBXK3MxcXpjSFBmUjhWUElEeld2dGtmQS9OOGFKd2JNcktxbjV4TDZ6czE5c04xdkZ2OUxZTzFvc08vQXZuUU9BWGNBb0Q3TzlZOHRoempLdU1tdmdyUHBiMWE3S0JkMzFyQlVia1hpNTlHQmkySkhucjhFdlFlTE9hS08vMTFtb1Izck14NTBlNHp1emN3ZFZrODlCRDJxb3dMelJiM0hPdEV2cXVvTU1FTVZ0NTBQNE5QNjFENldmVTlQaVE1NVdidEZjQXpGOXhRRVNJNGVtN292UkxKNDJ2RUxaM1JId0dDbzFSYk9aY3piNzQwZ0IyKzVURE93cmxMVnFSVmMzaloyT2xzcVNvcGNPRW5aQ1lGa2JpcVNKdmg0VVgzSVkySWpCMlcvRDhTREtJSDlCZ1Z3VEx1M0ZoU1NCSzJkcldYNE9aTDRRL0c1LzJTZ0x2UnZUMGZzSk5UdFpha1A1WU9PVmt4bm5td0Y3UlBUemd3K2JaMmVuaW1XRERMMjhSNVVyOGttYm1ubEFPK2tHS1J4NWN5RG9DSGpJR1RwL3d1R3VJdUV2ak1pS0RSWFlDS1BXVmdBZGFUcWRjQmxGSnUyblFVbFdhZFA5M0NRbzBRV3B4UndUU2FjZTFRRWJRNnZQbHN0ak9pRFA3UEZpejQrdXhxeHBucjRUNHlaT09hNVFPQVozTHJvVHRkR3NyNjhYUFVDSWovcXMrRkpQaFI2UFNvOE1YdnlkdDJXREFhaExOaGFpWk5TRW04bG50TGl0N0VtRFJiKytacm1GT3UwUFJodXY3Y3Fnb1hISkRxR1FzcmxMRjlQbmkrc0cwdkMwUVNQditIeFp6ZWNwajRwY2VUcmxyMzd3ZGRjUCswU0pxSTA4VkppWm1iZ3hUSnFMZEVEdFczcXZHd1dWT1MveGltU0VkczBpRjF4bm5QdjhhL1hIYTFzS0s1Y1E2Z1BOOUJFc2UxYzRvaHBrT3lQcGl2QXZSVmlCemM3aHByYkpCQVNXYXQzbTRrdXU5ZHBUR2VLREg1TVBBclFaRDVRdC9idUhtelRmS3dpcjZHVXNUZGRuRndIa1A4RU8zZllrWGlTT1J0UkNKMHBLNTdDR3Y4QmlRUjg5NHh5K2VnVU11dmVGK3BSN0dBbUJxNkFncmRhV0M5cGZGTjlWeXhEK09rOExpZ3NmdjFKZWdVbDgyNTYvMlhxUnlxWWs1cHh6WllGVDRTWjhZRXlmYTQ3ZFBuUXZmZjZBUUQ2U3l3WDFYSzZ4QVVYMUR2bU1hUVd1MFNaYWpGcExuOEluK2YvYU1BNGh5VnJwVW9UWWY4WGdyNkFmSm9ndHhIeEo3dFRHZDBydFJMWHJadXpaQ0R1ZmhpVCtRc0NtVlo1NWx5S2MrU1BmcHhzOUFjSkpBZE5TTEY4QTRLQUFVcWxWaGxoNWRxMVBaeklibkIxQVJnelprL1VOR2xjTGpBYUxqWlRBQmRqenJNbDIzOURjR0ltRmFLNFFSWFRpZW1UYTI2K28yQ1JMQVNnSDFlbkVZaE1nWlhXL3hTb0JsS1BMOG8xZS96WFhFZGpXS2NPVjdVWnlNMHc0MzROZkIyMXBKSVBKLzlNKy9iOWJYcG5Db2ZlWkxOQ3RFdGRBM2NSWVdJS1h5NWVFMklTdmdkVXhNMllma1dxRmwzK2Z5RDkya0dhVCtKZms4SDVWS2Y0R2pKbm9iakEzQ2ZGL3VSblhNWmtKdFNsQWtseXpGZVBsUDliZGVhK3czcVhEdkpQcWZWQ3BHUC9OTGM0VXdpSnpHYmozNDZORUJKNGZzVFZmN3dhQXZqQThxdFkxckNGOVI5bnNKb2MzUWk3RjlNbCt5UzBSaGNSYXdFQUtSdUNGVWNzWWt4SWVjbUxIYUJEb1JRYzBqb3d5UUpmb2djWlN5MGNxTWdaNmdmQ2p5UWRHU1RmS3lZaXRCMUZiTERSVUpLM1dhN2RieWRRbEszbEZFWUd1OTNiaVQ4WGMzWU1Td1Z6S2cvODZ3NStSTUtJK2t1dFRySFNXcTVZWVcrd2NEYzI4b09yb3RNK0pndEY3cHMwRVdxclNaRmN2TFpjQjRrMUpvSEZYL0xEUVo3SVlPMTV3dzlmTGJVNUpiZWt6d3VqdjVrMXJLa0NLK3E0OHVXTXhnQys1MHA0OWthMWgxVWVjdEgyS1NhQ25YVncwajRZeU14M0ZndldTT2VPNnQyUTczQjdDbW5TOVhpdWFIZk9SMUxEYzU2NWduSTRLUDJHdmI2bG1OTDVjWjZaN3pCZTJQQ2dlZlpINVlQTUxaL0c2WFNKdjhWN0FqOERiWFRjdW9tL044b04wSTdaUTBUK2lMcUo2bEdjbTZGNnNldGU0VlJQNGdHTUtPK3g5RloybWxqdCtlUzE1eFpCZ0U4ekxrZGZSTUxGajBGdGxzbndiNVBYMUhmcC8zbjlzdDhucXczNU82WDVPdEhEK3IwVnA4bnN0bnllN09mSjZwTmZKMzQvUDJzNEJlL2F2NzlidnYybWUvV3gvaDl2L3dmWXdCNXM1UDBmTUg3UC9yWWQwR1l5YUxlWTgzVGJqVmtZRUNwMTNVMStVbDIxdlRnQjVnM2hockxHbm5wK1lZKzhQbG5Kb3RaZkxYUzZEVWlFMUNqc3VZWkljS2hVVTliOHZpZWtPWnZhc3orSTJVZUtPeHhnWjd0czBoQ29Iekg1OE93SUE5L3c0T3BlS1pKTjF2a2FZY2VheHgyNUR4UTBrSW8wT1dhN3ZHbGJrTGtLazd6UDlDb3VJanFkMnVtdUF3RjkyUzhNSmVSbEdONWhIVHY0Y0xLeDZ0KzQvTmxBMFhiV2RoeXorZ2ZnWERMenZaMGEraDZISUdEdmRSKzJpeUlpYnJyYzIvYVFSNFNYRDBhdVljdmNPcE5xbUdlTmw1RGlRa3FSN05GOUhPSW0zM1ZscGcwUTRjTkQ5dWJ0eDVCbzRtaC9veEtKV0lPVlJ6NHJFZ0pMU3ZJWDYyNkFmRkx0V2hrbk5neEZlQzhoa1BNVXcrRlgvbDlmaEp5a2lZM295Sk9KNEppVjkzajFmRUZhTlQ3ZjhYTGlWOTFZcHMycktPb0Y2VEc1SEp0WklEVHZKc29vZk1ZZzg2Z2FzdkVhbWFFeCs3RGtJZjlvaE85S3k2d0Q4NjJWMkN0MzVGV2V6d1JndzdFdWlIdzczMkIrWmhYRWtYc0ZDaVBzbDhUMXJPOTUwN2loOW1KVWx6RmFIbENXYUR4Z1k3NjcyM29FYmF5bmlwZmVLakYyZFRhY3FaZmpmWlZXekg0M0srd1ZuaFdnWENhYlVYY01vT2cxYUMzR1pVS1ErbG9udGdWL1QzNi9OWW5OdGxMYVlacmVJMTRsbEhjYXZueStqaUl1RUNnUUhhK2Fpamd6bGRnckJZTGI4Sys1cGdXOVpjV2s5SFFRakx1WWZ0VExCdzl2ZGhPQ01BT3A5ZVEvYkY2cHlINmVVUkQ1bEcrc3NLMEZKVS9INm83YmZEaUlpRUJwTDlEZ0hjK2NnTE02UzFENkZsMmNnV0pGekhZMXgwaVhNazVNdGh3Tmpxa0VBVStXTTlvczhEOVFZNiswbldYWlIvUE82bFNhS1ZjRnkrTnBmM3J3Q2pDOTVQamNneWpBbFFpRWVKWWlJSVZBc2VoaG5NTEh3R3RCSGVCQ0NLOThJZ1NrU0VxcWdMekZubnVlb3Q4U1pra2g2eCsvT2xLWlpCc1NOU0FxbzZDVU90UTJlQTZCMWZ3aVdSMVJyc1pieGFDOTdHdDdQY3A3dE9rQmVWQm5zTTg0WnBxU0dKZG9KU2Z1K2QzeXFjZTFVbG5RSytnd3NhV1ZDN1EwMXBLRENjYUZEL2N4ZVdQOUwxLzZtRVdldnc5NG1yTlVoYmpLNHVIb1pqR2ZKS2svQjBVeDE0TTgxT0plbDNTcjNxMklUN25ta1lERlpLMnFZbFc3S1k0bS9Dd0Z1V2FRRUV0VEd1VDBkaDVTQnJJaURuWXNoTGdRZExYdkR3RllzTzlGY1dKTFVoUVhuM3MrVjlaVnlTRXlsV042KzdtaUZuSnQvakVqVHJacFRnSWIwSis0cjFKb25TK2k3T013aEVyWDZacE1VS05HazdmOXJjcHhMRXFvY2hqKytHeTV0YmtmdExFVDR3V2FHK2o0SDRzcCtWL2dVSlp3NDZyQTBOWVRCUlZPcmVDZFFlTWdTLzhQcm5VeFUwMVEzYmFQMzEwNlZDYnVhb0RIUFViSW5TODM4TmR3NkpHeGhyRjN5OW1HVTArdGtWSTZ3bFVQb0srbldDajk1emowMjMyMFdSYUUxNFVjL3pGMk1mRVN4WFB6M2xzSTNtZThMV3l0VU5nVmN1NE5BUTIycnFCQ095S3lTbjhIcnVxNGZ2dnFGU2w1bFZEaXJ3Z01aYWJJdHA1VlUrQitMbmJmd203ZDVJUU5lTm5QR0E2Rnd4c2tvU2hwbGhMRkhrUkFiQnN3NzJTVTdSYkY0Uy9yZFdpOCtFMHFERHYxWGdhTXVwRVJTRkcvOVUxZmhwTGN1TUxHSDQrcDZEYWpvaFIzbTFuQ3NqbVUyU3UyRUZaTWZHa2RaOVpUdVZnanpXVWFFRmpHWTcyekczbzRRUHhCaDNmRysxYjRQN0c2RWVjOWllODYzSXJsQ0tPY1VJRzA3VlNubWhOVXJhYVptekMrWjd5eGkvZGVZTGZ5R3l2OEJHNVZEZDgxTi9zUUdmcDQwNTdUd3lENExpdEdqS3R3b3p2d2xMaStEZGhwRk9FU2todW9nYTBnclo4WGRLUEdhWmQ3NDUxYXltNkNBUUFEREtxdGNuRHZ6YmYvZWtkUEgwRzFkd00wTGZ2VGtJTnZSeGZpazZyTVpMaFN2cXp1VFlnM3YyOW0xcTFsYnRmVUp6QnljTllwRjhid1NtQjFTeUFUWVc4RGdSTVVRU1Yvamk0dHJxWXN5N2UzVEtQbEh6VjEybFJWa2dzYU5wSGIrV3VEb3p5T0I5cEpjdXBLUE1GUFd3NnVDYzJOQ0dJV2NHaE1QUmVBcHF4eGFSN2VyYmdmdW1HemhYc29PMUY2aUwwVW5wM09IZFVPSFpoSE0rck9aQ3FFc3VHbEE0TWkxTFZZTC81dDc3bnJZZGdGVXliUmt6TnRPbzFUTjczK21uZ05nTEtkRmF3ZGp5YTZNRXRQWTZ5eU5MWEhMMmM5b3RLS1NGRUJCRGZIdzUwaFFadURpZXI3ZEZRQ1pJUkdsS29zMTF1Q0I3NjM0SVNBVlJ6cDRjTEh1YXFkZ2VZV3U5QzdLSm5qYVR6TVNEZTF1UXlzd09PVTdzUGJSL3NDL0JxVDJqWm94dzdVbjFJYzRoR3paYWsvMHFMTWxjY1R4MHA5ajEwc3FJbDhZNFh5V0xrcTlTdjhCekh1ZFBSeFQ5dmFCMkszOFNNQUEzb2tnUE0vUjZsb3p0a0FkendQMVRHaFc0VENHdUdKN0dxeTl5T2Fyd3lnbjBiSGpqNnhuZ0tTODVVZVVWKzBiejlCT2dVYkdvVEJRMHl3SUcrdDloSGloc05jdVZmNlp6R2pueEFJZTJ6c0tVb3k5dnFTTXFNUjd5cUN2dUhXa1BSZ2tJam5hbGpWdmNKY2JEd2k5enJPNzBlRHFaTm40bTNzWnBBbERxV1hWMVBEQkdub2Q4dkJ3bHBtTCtxVll2SUZ2N0c3bmR4bHpXYTV6STlKYndBakRRaW9xSG9ZcThYc1dSVy9mN0M1eGxVTHM2ZnJYaEhndDVweTBXaEU2dHBiY01NSEpnVzBqNkRDV0JSOEYxYjdaVmcxMjlaMnd5a1oxRktER1hYZWhmcXdyenNCOUFMSmxHK21LdTVSMVNKZDFLNlRRQzArSmxYZ2RLYXArMWpXdEs0QVVkbFR2WHBxRHhlVk5pOG9URHA2WHEyKzRmcFV4dHByQUE5ckVRNXliM2JuWkVyMG1rUUZSblAwdGFpcnMvRFBWTWdMQ3Y4aXlWZndFdmNGenMwVHVxaExlTjdndXlsMnFsOWRZNEhTVjNOWC9vajNqM0hVbk1qeFZ0bHByc1psQUszeVVwTVNSR3JocWNjNWZRY1hmenN5bDIyOVhtVW1CMjB6ZGZLTmFaR1QwdzdhVlJZN1l6YjlTVnZKY0daSVdoSGV2RTNwbUdGNE4vZXRjdlVyVkVMcjUwaWdxNExoZldQNWhJbUk5L1dWU2lIMGNRUVhMclQ3Q1lIWkVYbEI5YUZ0VVdIT2NFNTMzajRBejhTVGlzR0FWUTZOV2dFRWE1TXhUVzZ6QXZtTy9ZdzBObEFpRmRieGQ0dFNzeVg5VzY1YncrN0xndUdycWZyMWF6WVJkUHlTcld1c09rN2JtWmNDb085WUlxNzErK0JoYk5RQ2dJaWNDZUhyUHdTTWxqSGtlaGpJaUFDTzBDNHhncGk5bklKWVZiVWxnRFJKcHU5eXhxUHh2KzdjU3hnbGxDUGFnelRmSTVJcFpDWGx2VHU0OXFQeWlxZ0RyUXJpWmhCb3g1bnNXV002VlhSanRoMFkwd0JYNFYxV20xbzJ3SVhQcVpSK2QzMTI3YlFCelZDRkhrSnMzcDljek1jTllxa3RRbXNiZ1QzYTYyZ2NnblliWXY3VmVhS3l6RWZJNnhxSVRGK0g3QzAvTWhWUm1LTnIxMi91S1dWTXNBSFJqdW1RVWltQVZQb0R6cVEvQjhzR1FVaHFNcGcwSXg5S0ZxUVFLcUZxWGZvTVNaTEY4MSttS2JTOUxIWUtVRVFqV1IxTkhYRnAzai9OOTdwSndlaFhiVWhYTWRHeVdkWC9la0ZnWE1Da2hTc2x5TVhSMVgvdVhMdTRCWnNWKzVCZnM0Y1YwazVwL1k5c3VMZ3lyUGRjd2tYWWF2bHVoanVLV00xaFhFV3JEak5zSlRkRzhDN3Uyd2RiN2tCY0FObFdyUlVqSWpKWGNNeEZacDB5djVHblFKcGpLaHNkQXVxOGZIcy9FcVphRnlxaWlpWFJmZ1R5cm55UXNVVDZWRHhlRmNyRXpjZ1NkNlFoNFh5YWsrTEhXRVJiTGNYZExTUHNEN2twci9xVkRiN09jQjRmTXlMZVpHR0J5Z1RNTFZ6UDdseklCS2VWVmhrcFZMUVJWcitrYlQ1bDVnR2pMM082Qjcydno2RHZvZWFQdGh5dnVSeXlEU2k1OUVlMHcvak1RYTJNaFByY3JIakRLTGJiSld5YXRnWDkyTTFNV3FLNTVoeE84VHBwdDY3N2lWSWI1d0htMThrOTdSRVZlZldTNXJ3NXVQSGR4dXJLdmhBTG5GWmlEVmlKTXdkSmdnNlhnbnFPdW5UK0l5QVBhMFRaNnhXRGJQZXJoeGdqdUlDZzE3TlorM1hzN2ZmM3daTE1qeGVxVWxPbnNJT3UrQ3k4TDMwcFF2V0FjWThBUHFQUEhjdERIOTQ1M3Z5eFRQcWNlUGRGSHQvVVFLN3ZCUkVqWFVwL2cyVzlETVJUYVBxRE9lcUoxZTd5eXFpakNPU2lna0Rsc1NEZDhTdGU3Y3dOd0dVL2MwdTZWSU5JZEwzVVByV2pNNkRJWVhhYkZ2VTZyNWxOWGJmcFpORnZCdHlhTWhGelp2dmliQUhqSzJQaU5lU09jSk1KaGNHZ0IzaGZLdjlQcjNTc0h1SEpxMFczVjRSZnA3TEZEUXVzb0dsa3VoVGtpYXE1cHNlV3VZSGg2aGd3cThSTG44aGRSZExHZWZGZXdYM1ZyYmM0YzN1U2s1U0V3Y3ZWRlU3elBkd1BJQUlzQjlTQklVY3NUYzZMa1BUcmlZUTVMM25ZNTF2bGNuOXkwTHZ4dmNjOGl2ZmJDMHUvVGNINmVmaVFXbzZXd1ZBSk83ekJvbCtRSG9LTFR1S3pia2hYclBTaHVRSTdNbkZXeXlRbG0rNDNWM2hXQ0E4YkRNMWprMmFKUGxQd2FwUW1sUlpUWm00ZVgrODZxeThNZWhOeGx1NTd0WXJyTzN5eE9EZXN3NnBjM3FGTlpaR09NWEsvY05IdG4wM0M0dDViOThkblV5eEovVXpZbzlUWXV0K0hyeERZRHZlaE03SU5zSkVZL3hkWTd5R3BFVFh0c0JQaklEYzRka1kvdzFuY2pXdit5M1JUQm5Wb29GY2ppY0pEMlZiYnA5RFlqTmZFc1lyZFVnSzZ0OFg2L2VhWEVWdTA1VWxBMjJQeG9QOTB2R083SDdJSHJEeHJ6UFZpeGtGRVIrYjFDTE0wT0wwRE5YY3UrQ09XcDBQQVMvQ3BLcVZ4RDRuWU1XMk9yeWFYYVBNdTFoM0ZDSzMxTSt3WDBBRXhtdmtrcnRKZVY2NnMveWlhMXZBMTQySFFTY1RqWmUvQnQ0UndyVHpLb0FPNGlhWlhoYzhsaVFrQnNXZHU1czAzZlVJcW9GdEE3VDBBUGRqMXc1d1lia1VqZm9EWExHUnQvQ2VRZW5PSGdVMm90bGpkWmtkbDZWQVdvdWo5S0FMRGJUd1AvTTNqbXZ1ais0S3U4ZE5tWGtjaUJKYit5UjFrZ2ducCtZZFRDMjBlMDREVVc0dVNNNlJRRGo4WlFxSjBSZXdwcW5GUk41UDh1N1F5V2lZVlU4YSs2bnZGc0pFa2tZOWtqdStJMWpVeU9mZ09tYTdZWDJFZVJGRnVCaXpDUUtpQW1PT0E2aUN4L2NiUERyZ0p4UjlJRXB0dDBwK1VCUHp0NGZuMFJKeGdJcmJkQ3hpQ0RlY3VNcU54U0V2MnN6cFJHRWxYTWV2cFByQTNmcGptUVo4bnhlRmk1NzJnVVlDUWZMNUc4SnFwajlUUFJPdnNQV1UrNzdHZTJnSUwzRTQvOERON0lhVzBTUjV3WXhFZ1dIV1lnNi94amlpRG1tNnFnS0Z6cit0cnNteDVucHl5NVh5YWhVQk5MVjRDYmJsNnpoUjl3MFEwTGpmL2ZXb1JMMVZJNXpYSWZHZmpaY25KVjRTTnFXNFF6UlBSUDlOckR6NnVPOXQ5V1Z3WnlHa2JLZ0tuN21wNmdUUG9LMm9KUEIxdWkxOTR5MGlNOUZoMGFaTXYvU2hQMVNJWkZyUlBVUGxURG84ZWl0UFd5K2tDQlowU1ZGNHRIYmlzNC93eVpoK2lUYkk4WklOVi9JY1VUQjRlRjNSU3QvZDYrMGlvOEpKam1RME52WGV6NVlPYlVHMFlkYVZWZUtJaEJsTnJEbXAxSlBJWE5rK1FxcHpzTTlKQ0N5RFAvQk8wZVFSdnNQaUVlczhlZGZNd2RqM0k3Wmh5Mk9DS3pBaW5kUHBDcnA5empaK05DalV3V1JhMVhXR2U4R3RNMGl3RWhJbGwzMDRwdWhIUEZaQ1V3c1M5d3RhVElaOHEwTnZUbWpWU3VqeEZGQjRZMTNEWjhPR0hMQ0Y3MmFGUW51VG5iYjFlNFlXY0E0VGFoeWdCZitzc1ZiRlQwdGtFcmh5aUdlSTVRcGtpbTFvUGhFdll2VDRRNFJxUExaZ3Jwb2FhcnAzWDZlM29iQWhsaGwwZXJmV0Y3WnRJRzFqYVZQSDlxV0dnSHN4bVZRQWdkaThkOGVwQW9jM3BkaVMyajg1TGtQNUdFRlN6VGkwRTNvRHd2ZndvdlZkWGdLNmtmeUpmSGQrd2gveWQvdXJJMGYwYm9scFNGMHl5aGU5Sy9ZY1lyVit1SVB0eDBmU2gvZC9LcWlSUllPSEg3R2pTWTNiWFpxODlRUzE0UFE2dGxtanIzWVRseFJHSzdIRmxWVWNmK0tYcHh0Vko1NmU0ekdpOWFnY0llQndiZzhzdTdqaldYVjEydXpMQ0FWRXpKUlo5bFk5QklaOUs2REowaDZHNGZVTW9RaWR2cEZaMG1mT3VBaFBzTzBFb0V4bUFUb1QrMWRBSGErVzROTkJCRXdqa0lnOTQ1dHNZc2ZwOWZEWE5hay8zYVhKQ0x2dFhGcjJ3alB3OXUvZDRUZkZWMVVJU3ZKSnFmbklXVU4zc0IyV0VUaGdhbVNJZTNGS2Mzclg2amJwRm5GVExyMStGMHBjQndpOS90cUJtSUQ0SjRGSkxYdjF0MGhqMVN5cysxdlAyVDVnbVJSNHVWQjZqSzNMQ0lIYUxJU0pUS1lZTlJqZGJsY1N1UW13cVdObWRLbVlkakEveXo4NVFSNHkvUVRpdnVnakZEMmNvZUNGN216SmZwSTVlM0hSTTAwRW4yclhmNWlKVEdzODJ3UldQL0hYRU1iR016ZXNVWEdPS2gxdmw2UFBkc0ZETkVvOUtYbEpzK0UvRnBVM0ZaeTA0dW5XeS8zM1VsVHZzYnN0dEhXcHVUOG5EL3lGcGw5VE5ENTk1ZnFKR01XSmhhNEp5cEY1OG1jcmNIdUdEVnZueVRsTzYxc0pPV2RRaE1hdUNOVW5GS3J3QVZVcFZtQW1oMW01YTNPZGFxS0t6aEIyMUpXa0IyODZoS25CMHRDcXAyallFWGlmb25LYno4eDF2SzZIeHJVWGVFN1cwYUc4YS9iUE1xcW14WjZtdnh3cHZ3ejNpSnZKdUI3aFpzR1ZkN0NObCtwQ01xSVBEL2ZlR2pmMUh2OTNnOFlqUkNNUjZ3TkpUL2Y3MDZJWHVZWmRlR254OTl1QWtMeTk4TkljUitCZlcrWUFobi9rWXdERG0rQnNpNm1oSXZPV3JxWmU3azRodEhwbFI1SU9pRW4zZU5ZZUtXNWdyV3JqMGcwMW1DcEJOMFd0S2lyd3Y3V3VrWlFpMy96Q1hVcjkvMzhNT3RpUlB1Nnhrc2hmWWRaaVNwT28wY29BanBERHdhTnVJdW1QRkU4N3VkM1hsTkhGNEl5a21GY1FOMWlaaS9rVXJQYWZxaVE0UUVIUDhtUnIwMXFDOWVUY0djbEdKZ1dEVk9yUjFVMzgyUm1zZGxHZVdIaWU2bWxoL1F6SGtwc1B0QW5FYllrY210K1VNSmhWanRRQjZZZFMxM0pMRTVIeXdHWC8xSlhabXlEZTN2dXh5dDJEQUh0UmdkbEhjQStsWmk0c1UwQXdrRUFkckNvRE1FRVFBeDJVUzRxaFNmUGRoaDdCTWkwS0hmazNmUnJDYnhVcjMvcmVWUWM1WEtLR0ZSK1pNKzQ3RXVRUGhDeUNkZThaOGsrUm93SnRwVkxUQm8rVjVVRklHMmhWTTZGSG1nYUlNZnMwK054KzZhQzR0cUJzTkZxUXlsb2RKRm52Ri9YSnZUaWc2emZIRys4bDdBOXdhTDh2TmhoYUZmYXhWdmFtMnFBSFFIZmR2Vmx5TnNXNXQwaGRxc0lxK01OZ2NGd3ByN0pySDBiM0xwZGh3VWZGUGJ6MFRMNm5WYWthSlBydTVzd2hJbFRXVS9UcWM4TnNWV1RSckF4OUhvY2pYeE1rd3FndEg0bmkzMWUvZzhzQW1GLzIzd0xrVzVqT0hLSFdYb05ROFJTblBraW1JMUdnUzlFVjdvc3RMWHBNNG1wYnMwTC9JWTRmNjR4RzBRcGRIUVhVZ0Z6R3ZGMWVhZDhZQXlUejdDL24yK0FRT3dJQ3BJMlN3UTF1VlRHc2pUQnlWUkZDcDlxVHV6US9mYjZ5bVI0VEVlVWlwcFZUSDJzL0c4K0FIdHhXd25xNS9DVFRici93L0xuS1c1NnhwaDFURXQ0U0VDK2pLTUwxVkprRnE2b05wcnZ1UHBwSWMzZnBYNnhFcUdqMkZDcHpMa0RGWmFzSk1MUXR0ajlEQkw4eTZWUk1IYlY3d3ZEZnBMSFRtYkZ4VktBWmoyL2VwWUVGYmJ2QWpGVnN5K0JDNmd4WFNJbTE0OHFGNmhKblFSMlVqeFNlZldzcGoyVEV4MGpHRythZlhJdWQzNXNiSzVWZC93cVovekR3Sk5ubmR5UGJobCtmbTlHKytqYlVqeDI3MGFZdksyNDdUWWtuUzJpdGF4TEswQlFvSmxLOGZablBaVE5HUDRoaldaL25vNElmdlhMRHB1RzRKMDhaQXN6VWNuSU1PTlRRV05HRlN5WjZScFREUnJIS3JBV2pYT3B0aVJTNWJIekE2TjcvM0Y2Mmp1Rmo4clhnR01hU0pYc2FGNjlxTXBta0hsSHN2V1g4LzhyaHVmd29JVy9uRGVhQlBqek5SdURTdWkvR1VOVDlhekZvenkra0tESGQwUHErcFhTTUxxNkxReU11c29GTkpNbHFZVXpzSFdQWW5QVFhaSUpqL1VVNGFxeFoxc2EzRWdQbitqMWF0dlVIM1NuaWpUZzl0TFpqUk14MzNBR3Z5VnQ3aGY4dWtsU25NWmZ0Mm41RlhqN2hFR0xTa0pFdldiWWRUUW8vTGtWU2s4dU1jNzNnMHpmdEVBcGl6TEREOGtTdFgydU5idVoza3U2dVZ2N01JYXN6amdYTUVXMDJzZHF1MktZU0tIVmtBUUdBanluUXYwUURnZnd6Y3pLQUcvSFpwVmt6QmROMWNQYXE5TU9GY1RLK0Q2YjlTVHM4dEZCMGNJdXNMbWRBVXdVeXN6RTYzL2NCSzdhZHVEOFZCQldNeW9RSCtzNks5blR3S0Y1c21nQTFpUndPUE5NQmpFL0pVUk5xUXNteElVZDJkRWVyb3Y1Y1pRNWFhMVJFN2FyVlVCZngzTDMxazJRaWZJK21Gd21TcnM2OGdmaVU5dFZ3R202SFZrc24zenlRYUtiakMyVGFtZVQ5RERqK1d4am40cmR5ZjhuaG9VczA0aEJlSU5EU1d6U0tiZURlMHpwUTg4WmI5ZmZ3R3lBRzRsaGJuMVdFUVpjdEhROFhRbjZsRmwvbUlPcjVRa1VYcGd3T1g0RG1QU3oybVg4YmxDYkdLNmExZGhzU0V4TGwvU1VWUjFUdHlGaDk4NTBxdGdyaGVMS2NicXpaVmR3dEk4SThNbUhvSS96eHVxOWREV3dweVpnTzdWdjlVc0t4MUF0aDZ5a1pCdkhnSVFBTGNqQi95SnZudDBud1dra0hiai9LZnRhN0tXUU1yVEZOczJYNmVhMXVOMXlvVFh5eTlpTE5mN3hlTjQ4dFd6dmhLblE4MUhjVFlWY2ZyVVpZazI0bGhlUTNRcERrZFVkU3BicUxQNXZaMlVjS2h1R1lWNGEvWnc3WlAxKzA3M2MwenRpNGZKQVJhdUJ2NmRTN0F0Q1k5Vkx3NU50OFo0NW5ZY0dYMG51QkpMTVR5VEp4Qlo0dnE3cDNyWVU5cUVWcUZVWUpMOTJlUzVoNnFvQ3lyQzR3QXF5blNMTmRMTjNGTGVQVU93MnVNWUJUTWF4ZW9ITndtaEVKbFNOOFIrSE9STjRzSWxZcHdQc2h2NjZLVHRoMjE4QTVYU092VWpoV0cwM2tJUkRKZGpMc1A5TzF0YzZqRDJTWEtaZy9xL0pIQzUyRDAvZ0VCTmJjYTI3SFR3N0NFYXhGVHpqeFRENFNDN3FtbXhGbXZtWU9aenFOWW1EUGgyZDNzRmRuenhSdTB1QkdIK2tGM2hZeE5LUzh2TmtTdHBSZ1NpWFhuUDROcU1LUTlwMEh1M2d5T2xJUEUyaVJiak9VZ2owaFVyeFJCZ05KYTI5UEhCL21KRm81U1BSOXpLS1lpK0FRajYxdDZYMEZkbWZpUVRxemFybVVzVk5SaUdjd2NKZE9ycFMrV21TVmk3cXl1YzJTaFhWN3V1dk1MQmlmWFZKUnVoU1pwVER3NHpZbG5iaHFFQjB5a1U5d2w2bmgyTEwyeHNoWVpNOGVqQ0hvZWNkTnFiNVpHSjVuMnMzZ1MrWmFxNVI0Yncxa0VUcXpybndHUklTbnV4SUE1dTZuMXdZV3JvYjhNTTB3SVYyY1llL3FYcmRQN2ZuSmdlS2paTERLNXFSNXlLU2U5RUlnSjVnb1hmb0M4OGlWaldDN2lvSWpkWWVmVnI5R2V3TnZNSGdXWlIvV3puOHZuWWRlZzQvMjhLQ1kzS1ZlS09BaWRuQmxqWE02L2pyVVMxWlFGekxCSzhXd3NqcXJFYWx0NVVheU9nOUh6eDNRQjhNZXdtUWVUL2tHUWRyOUEwOU14YmtFT25ZTjN0UGx2eDREb2RsdGlwYmxtbjVESm5LUjMvMWIwcXBVd3ZJcGtEekExZmQweXFxdGFYcDg4WHgwc3hNbVREbWZtTFI2QXJTWUpwUXJ2SU1GSDRqT05tb0tBVG03NC9zQ1dzczkzdkVkQkw4alExb3Zia3FzK3pKTkNHSTBaejk1OXJ4eE9NaCszM1E5UmJYY2VFS1p1YnhWWG9SRFNpOFZZTi9SN29mMExmZHV3VkhoQ00rODBFRUxsbUluVTQ5dzI4b1czdU5nNnFzdUxLaVNGL3l5MlVIZ3dLR0duaUpDb3lLVDV6UWwwSi84amQ3MHJrOHBYRGV1NDNmelBIMGdTZ29qU0FvSCt5a1hJcTQvc3laaFQrK29xQWRHMnJlcEtQclJvZGthZVN3NStxaWlXZkFOb1Q3WTJCM0JlU2VhRmYxVVA0VHRKTXhZaVU3aFdzYjhxUkRvMEVzem9JSWZJUE54clF3dDg1a2phZTR2aWVlbkZpYTUrZGRCVkE5NVozRVQwMlNNSUZENlVOTEVCMDcxaU1yS1RkOThMa0lhc2NWb2tuTzgwUWZNNGJpK09MWUpISnNTN3REOSs1aDE2aHFkeUdwVG9WT2xQU2pzRFczdkY3Z1NNSXIzSGZKSGovU09sdXZzSWtUeEIrZ1dDVTljMzVhVWJiRlJtOTc1MHpMVTNHam92dy9YVUxaQjBQTitzMUNGVW9lYTgrZlFxL1Btd05mMW5QS1h4RFBuVzQ1bndJL3RXRE1jR2RtRnJnbnVLTzFvN1N1V1BHWHFIazF1T2NEYW9rZnBwT1FhdENqcHpQUkhGTXp6TjVwZ01aaDlMU2UwQllORFhoKzhpR0E2eGxUZFZzb2NpNWszQ3NnMVgwbWNvUVFaVEQyUU1JZzIvS3pOa2ZoTEZZQ3RFWnhPdFZqT01iam5PVmMzV0V2bC8yK05lcXhRN210TW04YkxyUXJhTWZHbVhUeVhTZ3JnanJXVERGdVloaXVOaER4NENVcnpPYk56RnVsV3NNdmo1L0RZMGh3R1ZJS2ZWTW5QK3FMYU5LbGJ0Z0dSSVdYNjdQVitOeTZLOXRla1JzWVFRem4rb3lDcGNTa05OOE45L1VqRWdoUkNTdGpiaE1CQWIvUldGOXBFdEJOaHlyTXZzQ2l3WlBPQ0c3Nm95RUJSOTBGU1QyYTgyMEZTd2FnTlNDQnpZY014cS9WQkFYV2ZWZEtDeFQxUndvOWdEK255dTZtVjEzK2dRNk83L2RMQmZweWhqYzZTc3E4ZkhhSFdKSGJLeUNrUVJ5N2JMV1dMTUQrczFIVmpKdGJpMVdwZUs3L2c0S01ja25zdXdBRnAyYmVyWFpyR0VrRFdodUFJOVVDa1lyem5YcXU4NWRYRUZzTldSVFFwdFZFeWl2RW5JL2g3YlFEYTAyM2NDSTJWODBDWWFSSTdBS3ExK2hNMkJNMzcvWis3d09JVVkxTDhxaWZMNFFqaFJDbTBZOXdvUTZGTzFzeXRIbVNkMDEzLzloVTZsanN1Rk9uTVE1QVU5bjlIbUkwVk1RY1ZKV3I0Q3lxcXpCZXJVKzlncVdQUloyMUVxeUlOSDhJRS9lUE1ySUxvNjJWNmRFcFR0U0FxUS8xZDRiZ0tFVGZUekRsZjA3ZFl4TzBXTk1JV05icjFsdlh4OUo5V2hXSzNLSnFkbzFyaWJ2cXJjam5yMGJBbzR6K01nN0tUYTVadFloL01peWJrQXZjRXpDSGV0VlpTb2psQkh6dlVJTWVJcnF5T2o1MDBYVGZtdEpGYjlHbDJ4N29QUzd2MHFlZEVidTVMV2RYQUhmNmkyN0x2Y3hrT1NMVHpVYjlSN25yRkpDVXBEb1hGeVVQeGdCUm9yYXlraW8zanZWY2dFcDJhMm1mNDFyWFpRRE5pV1BWV1FUVm44dE42OENMTG01Mi9pb1M3dk9sWURlWXI2VGxpb1dGVGdSakdoNlI4TXZzWEVHRWtGZUpncDcyWnpoaE4rbE5zN2lLVHFrK0g3RkRkU1B2TFpWL0FJNXNvSml1cGl1c2xtY2hGZ281R3I3SVpxcmpqUDNGZHFnNFRnck1OcUEzbHdWcWcxL2ltRXJGMWZEREJvemJ6NXd6UnlNc3NJakMzK3VjSmowM3YxR0EwbVduTHY0M0t5Zlo2TEtBcm5ydlpxMkZQUWJ2SUo2VzJHZ0RCbmFoWXJhZ1ladDZpVm56cHlWVXZaaW9XVnpHVXY3MjhmNGNtWlNETFFhOVgrVlBNc01PbXFKbExPcTU0WjIxdzA3ZGRTOHNPMzJQT0gwbVovdmZwczFZQ1MrajJKV2MxaFZHUzBBNFdmc05vS2ZTRFV0ajF4MWdOWllDTG1OWE9IUHNoOTFUd3E1MTZpR2tvT3JHcER1ZEZVVVN5WVRVV3JZenFYNDhBRFJSWVViWS9HTFpGY0pWc3FaTU9Ec2w5M3QwYXQzbnArMDJFRTZWZzN0TUhDYUszdVd3LytTYnliQUMyWXM2dzhmeitBNWRVT2lUSzg0end4RkhDMWk3Q0FxWXdaUmtyMEZuTzJCT3RBZHQyUy9KM1lIRWQ2V0ZpYkd1VHNEQ3NaV2F3cDFoVzZ0U3ZvWStMQ3Q1dDltV3UyaFR4TVFDckpLcFJOTnVzNEt5NEFOZjhwVThmWktVMlRscjZxWlA2TjRGanIwSEM5dUVYWmgxQ0R1Q01SZ2h4TTdBeVNhWXhkTWZSdGFaZHhSYnlrQWtCVmRYVXFKN0cwWkYwVTBYcEg2ZTNRSDZ5bUlUdVlBZUFLQitlNUhIczYxZWliOHNzU0VDcGQ1Y3IxNnozdkdrRlFUYzFHZG1uUmc4OTUwOVovQ0k0Q1VTTEpFS0J6Y3hiRkoxRlVPRUZrN09ma3NZNU10b3FUR05oVGRML2xnL3h3M2ZYVGUvWHRZODliSHFkbTgxc0hQU01DMGJsVmZwNXd3NndRRHNCRjB5algyV08ydmJkeTFtN0JQdE1EMThzaWx3VVhTT29YdW9ENE9ON3JSeUhBeEp6Ni9YNUtvY2tEeXl2ZGgxUUpBa1BzNGFpc3hSQ3BwOTR3dVNpWDVIUDl4dlViclRLUGpkaS9HMUJPMDRjd210YVZ5aGxmUDlMWGlkRHV0YkQ2SFQyZU5YWkFzWTQveUJDcDhUT0tTRjVyWUN2NStlUnAzajVITHhJd3JRVCtabEtmRy9Cc3VkekpPQ1BUTzI0WURWTUV2Y3dGbHlqeWxqMVQ2OHhqYjhTbmc1bTRDa3JnMnZnSjJ0TmM2TlZNck1wOS92ODR4WHVmcE5uWTIvQVIvS3NVNE1mYlZJMzRGVGNUV3ZzSkxERDdoMjlpTWlkNTljVldYbU14WDZXUURNR2c0eDFXbW9KN3drQWhBTE9zbTZnbE9nMDlqQ1p4Z2t6UUZIZEZvc2xtVkRSWkJwaDhORmt6UE4zY0dVVUNWK3I0ZXN2T1FFRkJ3aVJrdk93bUNveGhTT1dxNjFyQnkvczFyUDNWenF2dkJseHprNlBINy93WDVJUk55eWs4N1B2L1VXVkpSSE43dTN3Skp4NjFFcUxSVW43d1FPWUQ0aVlwRWljVmdGTC9IZmQzRFpHYXJYblZrcUNZVENhamFoYURCV2JkVUJiNW1kTTJPbkhuZUVJN3Y4RFNwdXlGN1hwYkJaM3ZjL1JycG9rVUJ5aEhTR3RmZTNYNjd4SDR2a3NMN0FTeng1OGhzcDk3UUxaMHlIOGFDRkJBMTVLbWY2S2gySVdYMnROVDBURVRxMVB2Wm1hdW02QWFwT05nN00ydWdzVkhwbzhDQlpwSndFL2plMnZJNlRZMlg0cUZ3Qk8wN0VGZnAyTVdiUjlMbkxIQVNjY3ppTTU4d2l4UWxGU2ptYThGTmRsN1QrRmxFYUhRcy9OT3F1M0NLUE1oMFhjdHpRVS8vUTRpbjdlalNYQ1hqMGhLSVhFaUJvY3VpdkNDV1lIUUJXajVyeXM5WlphbkdXNEZ3dXBJRnIyLzlzcFdKRDM4TXN4R3BXUi9jRTk1KzNzNUFiaFp2Z1hHdGk4ajlMYmptYUt0b0pyc0V1STBSNllxVXlHZXlVMFplWTRST1k2b2oxZWNKWlhpWERYSkc3cEVKQXdmVUVVOEYySFVxWkdvV1hScmRvRXhJcnpSNG85ZUc1V1NwWmhnQWpJYTIwVWZaS1NZZzRWRmUvb1Q2UFR4L3dVTlRpLzhWYkIrRVNaUEk3OTNIdHFlQU5MamtoWDZvckZYM1p2aUZLeE5FbzJZNzVSZkVHbWo5ZnJnYzFJcFhtcnpkWmV5anpWb3hmZUI5YWdra3pyZUZLeCtZY05lbzBrcTZnaU1CSTNRV2djY0R0eGZkeGM4ZW9OWU0zc3hjYjVSNE54M3QvdXNVWFZuOUpoN2tMUXdEcTM3eVluUTlxNzFuTW5tdGpBbE5kM216c05XZTRPUnNZekpncTNtQzJkWWtxNHA0WWNodTA1clljbUpxMWVLbjlCRmlmcTNPOXROVnlNcHpIVEVMYWg0UlI3Unl6K3BHdlRyaVV6azdDV1VzNTRhd3FGbWFsZ0Z0bnAvd1g2bGRJd0ZhSFl3UjlWdnpNbTVtNDRNOEYvSGhOR2RDWHovZVVOTkFRVDNKOHdCL1BYL1NsM25nZnY5NERydkJlNlBnNXJ2US9jQW1VOGlaNWZoMEFlS29zMklDaEF4YjFPMmVUQklYS0ZDQ21PdjlDNDdRWXowdXdDTmZKZEFIWVBra0xPWXJ4TkY2czdNbVhCZjlHMVdIQ1paN3YzdmpVWndaUlJiZVByU1o2TUNQMmgxT0pvU0lydzVzZzVQTWttZkhRRjQzQTNMY08wanNPWXdQcE1xWUgrR3o2TStvWVZMZWJNeEhsR0dwbERFUWRyWm9NRkUwZEZaeXNxMkJUN3ZkOU5sS3RreWxnNnVFVVhiTXN1Y3ozZHFSMXRlcktpN1ZOQ2J0N0VRUnhXWFptcXNJVEREWEdyRUNyN04zakdkN0RRSXpRYXh4K2g3eHpaQWdMcHlBOEV1enhKdjJEM1hwTmFFZkh0MnBIbEpaWW5tc3FyQ2VWSmg3UEhGMzdjZ2J4U0VidElqaEtvckVBNlY0SE81bUttZzgxTEhtcmFxSWhrVVUySHhTQllIaFVTSzdqK05aczlzUHB1b2lKMkgrY09LY2FyQTV5NGozK2QrY2ZTb1hjL0tGMHhGakZnQ1Q2VS9TdHRzMm1FMkozUU5OTTM5bDFuQmhJTStyTHJjdEdMODA5V0VxZ3BIblhTMktidE9PUVdsUm5MUU9Mc0k2cktIWVdVU3dzMlFBVEI2SVdQRUFXUzRQSTU2c1VRaHZoYWdkS2N0Z1Y3djNSWjluaWlFNWZtOGUvSU5Qeko1T1lKb3RsbnYxamNSOGZWWFU1OWltR0xJWkxQcmRLa2RJMDlXV1B2eVhjMWN6a0xXSjYzNnJrNzlOQ2NkN3FQMTc4ejdoOUR2dVk0eU9oNVIyMTRZZmFQOG1JQjBwNTlRMkVZeGhwZmQydlM2NDVrNW1mNVIxcFpkM2hWU1g3VUNxS2l0YmxhTkZPR3dVc3RjNnB2WENML2xoS0d2ZU85dTZDK3NDZmVGZWFhaE9LcHRseUZNUkx2SXBPUk1QQTdraHpmSW9ucWxLbHNmOHVhM3lFYXBIRk1qeG5LU0NtdU5seGRTaW5ibnNKOWJadnFhaDg0M1ZHMlFyZ3lwZGR3WUxpNDU5U0NsR1hQdUNGYzBRSUpTSUx3K1UzQmUrQnkvOHRrTkY0QlJ5d0tVK2pORVcvNXhaMXY5d3A0dG1adjRMeThQYm9zSkI2YXVWSk12YlU4MG9yY2lML0kxV3l2emhOdU9RZFJuNm9KMkg1REtMVTdLUFdOb0tEbmpEenprZ1pvMWprMXFuK1FvVEp1TVk3S0VLUHcyeXArb1RycE9UaTMvSUlYanJBTDFIeWF0Z3A3VUxDWXlIQ1E5SFBReThwZTBjWVdlbUpOanFObXhRNjhmUG96YzJQcFpCcW4rcHY3L2IwZFNEa3ljSk1YRGNkaGdQaU9sVWYwYTRHTDdpYkVLdnJySHlLSjZUMjBoUnY3OTR2S2k4VDEyb1BrbUdYSjM1VjA1d3U1bWEvYnRmbFRaNEpmVFhQQmFWVEQwQStiRGRyVkpMMUpJVU04Q0JKKzF5V2tvanQrd1cveGpzZ3l1YlA4YjVEMENWZkFBcU9tTWsyWVB2d3BWeDVLd3F0WGhqbkZmZHczSjZ2Y0tIK1lkZkNva2J3MjNBUzdNNUZKUTZrTjFmalBuN28yUTF6QkwxeXBmQVdoTUNUOFRxUVA0K3R5WnpHL0dRakNraWdzanBKeUNuTzVHbEpPcWtUSWtTT2ZLTDltWlpPSXRxYW5ySmRob085VUJrWEJJL1lTamlYcXpvOXNtNFRCOG9Pb00yVjU1Rk5lSFhxVk9sQ0VBQ2F6bWwrUm1GTEJxY2dJbjJkZVU3YS81MEdVUUtheU1BbXBVMHluVWx5bEEzYmJ5Nk1oMGp4YXpFWTJKMlBhVzBRUWUwRjNmVkNWS2xNYjNubC9YQk5MNHB6dkd3bUFQLzIwaDRmanRpWlVnOEE1OG5GSEZnMmJDTExITWRqdFh6TE4weGhpaXl3bHUvQkhqcEhoZEkwMjRNZHVFNHR2SkdaejYwRldMV0FoV2RtR1ZHVC9lbHl6YlNpUTJjRmx4QjB1eklLL1hWMkNmRnF6WjUrU3ZVVTBRdWJDcG5wczFtck1QV1Y2R1o1elNxbWZRdmtlQSt1Wm50VUMyWDZNYmduSFg2YjFQNHpWQXJZd3V1eVQ4aEo5M1dSNHZLaDJGOHJHWEJFdVRIZnB0dStPaFRmQ2xVaDYvektiaWRUZ1ZUSlZqM0x5ek90WkdVRHZZZ3Y5cTl5d3d0NmtzSitSWDdDTURPTUJzRTdrYks3SWdvSUpFbDB0dHR1RHphaWNTZW9hUndMUVhlTEZ1TU84c1hBSlF0ei9hQWgvNWVTL1B3dkhLOTVlMnZjNFFXVi9LbDhsRXloRGE3dTRjcUlUSG9IazRkbGM4QTBsWHV2OVBCUzRiY1VOU1lFNEpRczFGZVNOSVJxbjBXbVJvUzJINDdPWkpBVmIvYUNRVlg0Z3RpaWttT0NmRG8rQlkwQlBoeVorMjlHeVQ3N21oYlhqaEFNcENTSC9PVWxZMkIwVHdOQTdvckZlcmRtYXg3aXFzcS9yQTVFT3p2aFF3M3FyTlBXZXBpcFBoNzNQdGEySWRwaTMvZVFIS3FkTktjVGhRTHdINGZFcVgwcHVpOCs2ZHI1a0tONVFTaHo0VHFNSnhXcGRmSWRqU2M2WkVWRXE5MWt4NXBiSlh6T3lXekpKS1BYOFpMMGNrN1Z4Vy9PcTFVbDQ2dlVEV3poTXFmSWRkaUFXeU1wQ0xyZEVpMkZNU1picDRMbGd0WTlYazFEWlRkY0pBQS9QL1AwM0R3cnd5SWdpQjVoaTJTUko3Wm05T0QycURMZFFzMUFVUjY0UGoycHZHWXFrMzdTL1I0NXhCaUo3c1dqUkVnb3B5N2JJSmRldnJrZjh3R1A1amE3ZE9TTGZoREhtbDVqN3R0c0ZmeUNEWHo1N216eXEzS3JXNVRKRGkzRjh4K21pZS9DNXdWZ1E1SXQ1dkhaOHFhajJ1M1YraXdiSjc4aFhMU2Z4MW5yS1lNM1BqNFFPQklTYVFaYnltVjVBVGdUMEhCOEZGT2Z0Ull4ZW1uamxWWWF5TWVCVzVPekJQZ2NiK09tcmdjZHVGMlFDM01vTGpiaE1LTEpPakJITXFVZFFGTzUyNTZUbHdpZWhhdHdrWmRxeGNaQzlOakZCMEVodFF2MEh1K3hFR3NWSTVWcm1lOW1Mb3pZRE00Y3FFVUZ2eGZtcjA1K0pXUFFFSkVqdS9mTXVTQTdIb0pLamM0UWVYOExKcFVhSVNKRXMyZ0RQVkJPOXVIV25mU3ZsM3AxV2ZPL1krcVFDMGNDWXFXSExRUDFhN1g3c2hHRk9VUjVuSExDZ3RLdDYrT0IrQkU1bnR2cDhzajlCWE9CVVRjdWIyLzNoRXBSTkJ3c2ZWQmc0eEg3R3dvMEVMTEhZTG03aGpXQmtyYUtXZG1zTnpwM08vYklxckE1YzcvYVpDSEU4YytIQXFyZ1JGcWZRdlgzY20yeHE3Q2NCbU1iZWplTmVtY2NwUnFzemMzeUovcjczRlFkczJGSW9UK3plNEtXRHc3OWdRZkkxcUVkUDhUZThXMWNXMStTR2RxOExRUk9vNFNLd0ZVSEZaTm9NVi9KL281L0NDUDhQVjBPL1QvUkl5c1NFRTdzeDZzYTRVQ0M4dnpmN29VejE1STcxZWVXNXp2Y2s5dVZRZGpJY0Y3VlBRRjBTVTByVHdTSDg4clpVNEVJSDBrQ1U1ZXZjL3JoYkdaNy9HVXlDckFsK1hzLzlTdEFQWUl1VHovSXZIR0FtamRGWGlpZ2FXQmdQVDF0VVRGMjM5aDJ1ZmswVU9LM3NldFJJR2J0eEJ4QmVNd2oxMkVJdVJiMGRpeThJdll3cVU4dzd3Zk9XL1o2enI2MkZnb0E0VHBtTmdBR1Y4Yitob2pZQUxJRlNjZUFJOTRJcThNTHN6OGQxUGlSS3NQNlNRQjNPZ1RMbDNmUTdWaEk0TzdYNkpCekp4N3dYZGJweWZTWXlLS1F6L0tWUjBFS1R2RjFKd2k5T01Mdjg2VlR6cDdJTFU5ODJsWFNkVEk1eEQ5cVlBekxoZUdWY3RIdnBxY0FKM3hYSjBEb3FkYlkveXJaL2g4V2M4bGNWbXQ1bzVUbHVtb21rTkxFUnRMWlZ4QTBSOENvQWU1NTc3TnREazF0cmxLbUluSVd0TlBhUG05S1dpby84ano4c0hRRGdRME9QcTJYT29uazZKZnB0Mzh6Wi8ya2oyNlNyN25yMjdJRlJHeHJ5SnlzNmx2RmRTdU5YSVY3eDhkMVpyaTNtdWE5NWNpcC94VFF2aUVZWDR1OXpDZWZOcC9ieXZodkpUZnowZVBabDU2b2xUeDY5azNKT05PZjljblljY09sbUI1amFZVDFrdk5Vd1Q1QlpSaGgrSE95TzdDNFRrcElsUnRuNkN5c25VejNLWnBLOWkxbHhtUzVLcStETGQvV3I0TEU3cFlzemwycDJ0aHFXc0pUbFFrTE1vTmZYTEgxc1lUaStFcG9pM0hNWGQxRE9na1V0VzVMWDRYZWJiMWZoZTljWER0eWVCODdkWWVVQklIZnUvdFdWYklvVncvcGZGc0NnM0Jkc1RvRStVU3pLRkRhcVlpOXB5Z1VkSyt4UjVaQXhlY2N4cE9QSmVwL2pxUkhXZjRTN2p4UEJOYnY3MEhVS0pmTTgvTHhGVCs4Y0pKRy83S05EV1B2bmY2UVNieXVKamJIcERWdHp3bm1XNUFXMlorOU8xUjNTbGJjanl3dzNvck8zZ3ltK0VFMHhHbWJ3cnMrTjJmdW01QjgrZmU2Uko3S2t5MThRZDAyVzVKeC9MQ3pITzM3MnE5UW5PMjh6YzdJQytsY2toakF1WjQyQ3U3WWUweFZIcDRYV3ZMU1RxZWdMR3FGQWlXNDJobks1NFJJaFd3WTZxYmRBeVZEbFpGT0dDV3pUQXk5TG5ycUJiQWVhUjlxT2kyU25sYlByTm11elZyNDVxclI5L1duZTZ5bTZoclBEWHQ0Vm1hVGFWZVNxQjkyQmtXT1hFa1NtRkNjazlWQVljNWsreVlYNWFKUDl3NUVQV2JVWlVsTEtzRzl4eGt1Vi96ZDBrcm9VZ0hBUk84bW01ZmNGTlJRd3VOR3lDaWZkY2FNcTZkdXMwQXNzNkFjM2c1Vkg5VlVzRlFPcjJLcjQ1R1lWSUhqaFg3WnoxR2RMbG1tdlFGWjgzbHpEeklObmVhbm9LVmFGRlhJV1cwUHM2eTRHNUcvcDd0MEdWN1JncjFqS0dMQ1l4VUh0dUR0U0tscmIzdGp4Uko0dUU2UUIvRldCV3IyVXpvK3ArSVp3NXhudlNPc3Q1M1VhQ1U2MmI0QldSRDhoY1BRQVpzL0srS2thL00yY2l4QXJmdys1aXZDNzFoUlM5cGFsdFBuQkhBaldZMHhXZVlGSmRqSENUWDhONm9yRHg0UjZNY3k5NFVyQzJ2NmRObG5jdmIvOUFTTHVwUlVvZGl5OTBhUUdHQXBwZUQ5NDl3cEVZTDJDUCtuSHBGVnJrWWZORUF5NXhYVTBWTlJqUHRSRW10ZTlTRVZZZm9qQThkWDJvcVg3WnVtekN5MDJBZW4vLzJRPT08L0JEQj4KICAgIDwvQklSPgo8L0JJUj4K \ No newline at end of file diff --git a/performance-test/support-files/center_machine_id_values.csv b/performance-test/support-files/center_machine_id_values.csv new file mode 100644 index 000000000..2d6e7f93d --- /dev/null +++ b/performance-test/support-files/center_machine_id_values.csv @@ -0,0 +1,6 @@ +machineID,centerID +10001,10001 +10002,10002 +10003,10003 +10004,10004 +10005,10005 From 0fd0137c90362ab397dbff6dd46b2774747f3c0e Mon Sep 17 00:00:00 2001 From: Nandhukumar <100744358+nandhu-kumar@users.noreply.github.com> Date: Wed, 11 Sep 2024 16:55:53 +0530 Subject: [PATCH 238/860] MOSIP-35243 | Added pre-requisite as a parameter in XML file (#431) * MOSIP-35243 Signed-off-by: Nandhukumar * MOSIP-35243 Signed-off-by: Nandhukumar * MOSIP-35700 | Modifying the mimoto testrig to adopt context URL through config Signed-off-by: Nandhukumar * MOSIP-35700 | Modifying the mimoto testrig to adopt context URL through config Signed-off-by: Nandhukumar --------- Signed-off-by: Nandhukumar --- apitest/pom.xml | 6 +-- .../apirig/testscripts/AddIdentity.java | 4 +- .../apirig/testscripts/DeleteWithParam.java | 4 +- .../apirig/testscripts/GetWithParam.java | 4 +- .../PostWithAutogenIdWithOtpGenerate.java | 6 ++- .../PostWithBodyWithOtpGenerate.java | 4 +- .../PostWithFormDataBodyForPdfDownload.java | 4 +- .../apirig/testscripts/SimplePost.java | 4 +- .../testscripts/SimplePostForAutoGenId.java | 9 +++- .../testrig/apirig/utils/MimotoUtil.java | 52 +++++++++++++++++++ .../main/resources/config/Kernel.properties | 14 ++--- .../GetPolicySunBirdR/GetPolicySunBirdR.yml | 2 +- apitest/testNgXmlFiles/mimotoApi.xml | 18 ++++--- 13 files changed, 103 insertions(+), 28 deletions(-) create mode 100644 apitest/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java diff --git a/apitest/pom.xml b/apitest/pom.xml index f253133bb..bcdaa5a17 100644 --- a/apitest/pom.xml +++ b/apitest/pom.xml @@ -8,7 +8,7 @@ apitest-mimoto Parent project of apitest-mimoto https://github.com/mosip/mimoto - 1.2.1-java21-SNAPSHOT + 0.15.0-SNAPSHOT @@ -49,14 +49,14 @@ 2.2.1 3.0.1 - apitest-mimoto-1.2.1-java21-SNAPSHOT-jar-with-dependencies + apitest-mimoto-0.15.0-SNAPSHOT-jar-with-dependencies io.mosip.testrig.apirig.apitest.commons apitest-commons - 1.2.1-java21-SNAPSHOT + 1.2.2-SNAPSHOT diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java index 585132dd7..cc4826529 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java @@ -34,6 +34,7 @@ import io.mosip.testrig.apirig.utils.ConfigManager; import io.mosip.testrig.apirig.utils.GlobalConstants; import io.mosip.testrig.apirig.utils.KernelAuthentication; +import io.mosip.testrig.apirig.utils.MimotoUtil; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; import io.mosip.testrig.apirig.utils.RestClient; @@ -97,7 +98,8 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad new KernelAuthentication().getTokenByRole(testCaseDTO.getRole())).asString(), "response.uin"); - testCaseName = isTestCaseValidForExecution(testCaseDTO); + testCaseName = MimotoUtil.isTestCaseValidForExecution(testCaseDTO); + testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); DateFormat dateFormatter = new SimpleDateFormat("yyyyMMddHHmmss"); Calendar cal = Calendar.getInstance(); diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/DeleteWithParam.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/DeleteWithParam.java index de59b2124..4132217d0 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/DeleteWithParam.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/DeleteWithParam.java @@ -28,6 +28,7 @@ import io.mosip.testrig.apirig.utils.AuthenticationTestException; import io.mosip.testrig.apirig.utils.ConfigManager; import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.MimotoUtil; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; import io.restassured.response.Response; @@ -77,7 +78,8 @@ public Object[] getTestCaseList(ITestContext context) { @Test(dataProvider = "testcaselist") public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException { testCaseName = testCaseDTO.getTestCaseName(); - testCaseName = isTestCaseValidForExecution(testCaseDTO); + testCaseName = MimotoUtil.isTestCaseValidForExecution(testCaseDTO); + testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); if (HealthChecker.signalTerminateExecution) { throw new SkipException( GlobalConstants.TARGET_ENV_HEALTH_CHECK_FAILED + HealthChecker.healthCheckFailureMapS); diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java index 308c71395..bdc69e6bf 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java @@ -30,6 +30,7 @@ import io.mosip.testrig.apirig.utils.AuthenticationTestException; import io.mosip.testrig.apirig.utils.ConfigManager; import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.MimotoUtil; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; import io.restassured.response.Response; @@ -82,7 +83,8 @@ public Object[] getTestCaseList(ITestContext context) { @Test(dataProvider = "testcaselist") public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException { testCaseName = testCaseDTO.getTestCaseName(); - testCaseName = isTestCaseValidForExecution(testCaseDTO); + testCaseName = MimotoUtil.isTestCaseValidForExecution(testCaseDTO); + testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); if (HealthChecker.signalTerminateExecution) { throw new SkipException( GlobalConstants.TARGET_ENV_HEALTH_CHECK_FAILED + HealthChecker.healthCheckFailureMapS); diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java index 29eab1400..680e4842b 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java @@ -29,6 +29,7 @@ import io.mosip.testrig.apirig.utils.AuthenticationTestException; import io.mosip.testrig.apirig.utils.ConfigManager; import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.MimotoUtil; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; import io.restassured.response.Response; @@ -95,7 +96,8 @@ public void test(TestCaseDTO testCaseDTO) throw new SkipException(GlobalConstants.VID_FEATURE_NOT_SUPPORTED); } } - testCaseName = isTestCaseValidForExecution(testCaseDTO); + testCaseName = MimotoUtil.isTestCaseValidForExecution(testCaseDTO); + testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); JSONObject req = new JSONObject(testCaseDTO.getInput()); auditLogCheck = testCaseDTO.isAuditLogCheck(); @@ -226,7 +228,7 @@ public void setResultTestName(ITestResult result) { @AfterClass(alwaysRun = true) public void waittime() { if (!testCaseName.contains(GlobalConstants._AUTHENTICATEUSER) - && isOTPEnabled().equals("true")) { + && MimotoUtil.isOTPEnabled().equals("true")) { try { long delayTime = Long.parseLong(properties.getProperty("Delaytime")); if (!BaseTestCase.isTargetEnvLTS()) diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithBodyWithOtpGenerate.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithBodyWithOtpGenerate.java index 1cded4cfa..d776c7e29 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithBodyWithOtpGenerate.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithBodyWithOtpGenerate.java @@ -28,6 +28,7 @@ import io.mosip.testrig.apirig.utils.AuthenticationTestException; import io.mosip.testrig.apirig.utils.ConfigManager; import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.MimotoUtil; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; import io.restassured.response.Response; @@ -91,7 +92,8 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad } } - testCaseName = isTestCaseValidForExecution(testCaseDTO); + testCaseName = MimotoUtil.isTestCaseValidForExecution(testCaseDTO); + testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); auditLogCheck = testCaseDTO.isAuditLogCheck(); String tempUrl = ConfigManager.getEsignetBaseUrl(); JSONObject req = new JSONObject(testCaseDTO.getInput()); diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithFormDataBodyForPdfDownload.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithFormDataBodyForPdfDownload.java index 8897361f4..83b1fc74a 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithFormDataBodyForPdfDownload.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithFormDataBodyForPdfDownload.java @@ -30,6 +30,7 @@ import io.mosip.testrig.apirig.utils.ConfigManager; import io.mosip.testrig.apirig.utils.GlobalConstants; import io.mosip.testrig.apirig.utils.GlobalMethods; +import io.mosip.testrig.apirig.utils.MimotoUtil; import io.restassured.response.Response; public class PostWithFormDataBodyForPdfDownload extends AdminTestUtil implements ITest { @@ -80,7 +81,8 @@ public Object[] getTestCaseList(ITestContext context) { @Test(dataProvider = "testcaselist") public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException { testCaseName = testCaseDTO.getTestCaseName(); - testCaseName = isTestCaseValidForExecution(testCaseDTO); + testCaseName = MimotoUtil.isTestCaseValidForExecution(testCaseDTO); + testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); if (HealthChecker.signalTerminateExecution) { throw new SkipException(GlobalConstants.TARGET_ENV_HEALTH_CHECK_FAILED + HealthChecker.healthCheckFailureMapS); } diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java index 70b975124..71ec92cf3 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java @@ -30,6 +30,7 @@ import io.mosip.testrig.apirig.utils.AuthenticationTestException; import io.mosip.testrig.apirig.utils.ConfigManager; import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.MimotoUtil; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; import io.restassured.response.Response; @@ -82,7 +83,8 @@ public Object[] getTestCaseList(ITestContext context) { @Test(dataProvider = "testcaselist") public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException { testCaseName = testCaseDTO.getTestCaseName(); - testCaseName = isTestCaseValidForExecution(testCaseDTO); + testCaseName = MimotoUtil.isTestCaseValidForExecution(testCaseDTO); + testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); auditLogCheck = testCaseDTO.isAuditLogCheck(); String[] templateFields = testCaseDTO.getTemplateFields(); if (HealthChecker.signalTerminateExecution) { diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java index b984eca2e..9a82dd526 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java @@ -31,6 +31,7 @@ import io.mosip.testrig.apirig.utils.AuthenticationTestException; import io.mosip.testrig.apirig.utils.ConfigManager; import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.MimotoUtil; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; import io.restassured.response.Response; @@ -98,7 +99,8 @@ public void test(TestCaseDTO testCaseDTO) } } - testCaseName = isTestCaseValidForExecution(testCaseDTO); + testCaseName = MimotoUtil.isTestCaseValidForExecution(testCaseDTO); + testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); String[] templateFields = testCaseDTO.getTemplateFields(); String inputJson = ""; @@ -153,6 +155,11 @@ public void test(TestCaseDTO testCaseDTO) //tempUrl = ApplnURI.replace(GlobalConstants.API_INTERNAL, ConfigManager.getSunBirdBaseURL()); testCaseDTO.setEndPoint(testCaseDTO.getEndPoint().replace("$SUNBIRDBASEURL$", "")); } + + if (inputJson.contains("$GETCLIENTIDFROMMIMOTOACTUATOR$")) { + inputJson = replaceKeywordWithValue(inputJson, "$GETCLIENTIDFROMMIMOTOACTUATOR$", + getValueFromMimotoActuator("overrides", "mimoto.oidc.partner.clientid")); + } if (testCaseName.contains("_AuthorizationCode_")) { response = postRequestWithCookieAuthHeaderAndXsrfTokenForAutoGenId( tempUrl + testCaseDTO.getEndPoint(), inputJson, COOKIENAME, testCaseDTO.getTestCaseName(), diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java b/apitest/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java new file mode 100644 index 000000000..3202bfd20 --- /dev/null +++ b/apitest/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java @@ -0,0 +1,52 @@ +package io.mosip.testrig.apirig.utils; + +import org.apache.log4j.Logger; +import org.testng.SkipException; + +import io.mosip.testrig.apirig.dto.TestCaseDTO; + +public class MimotoUtil extends AdminTestUtil { + + private static final Logger logger = Logger.getLogger(MimotoUtil.class); + public static final String SEND_OTP_ENDPOINT = "mimoto/req/"; + public static final String MIMOTO_CREDENTIAL_STATUS = "Mimoto_CredentialsStatus_"; + public static final String OTP_FEATURE_NOT_SUPPORTED = "OTP feature not supported. Hence skipping the testcase"; + + + private static String otpEnabled = "true"; + + public static String isOTPEnabled() { + String value = getValueFromMimotoActuator("/mimoto-default.properties", "mosip.otp.download.enable").isBlank() + ? System.getenv("isOTPEnabled") + : getValueFromMimotoActuator("/mimoto-default.properties", "mosip.otp.download.enable"); + if (value != null && !(value.isBlank())) + otpEnabled = value; + logger.info("OTP Enabled value: " + otpEnabled); + return otpEnabled; + } + + public static TestCaseDTO changeContextURLByFlag(TestCaseDTO testCaseDTO) { + if (!(System.getenv("useOldContextURL") == null) && !(System.getenv("useOldContextURL").isBlank()) + && System.getenv("useOldContextURL").equalsIgnoreCase("true")) { + if (testCaseDTO.getEndPoint().contains("/v1/mimoto/")) { + testCaseDTO.setEndPoint(testCaseDTO.getEndPoint().replace("/v1/mimoto/", "/residentmobileapp/")); + } + if (testCaseDTO.getInput().contains("/v1/mimoto/")) { + testCaseDTO.setInput(testCaseDTO.getInput().replace("/v1/mimoto/", "/residentmobileapp/")); + } + } + + return testCaseDTO; + } + + public static String isTestCaseValidForExecution(TestCaseDTO testCaseDTO) { + String testCaseName = testCaseDTO.getTestCaseName(); + if (isOTPEnabled().equals("false") && (testCaseDTO.getEndPoint().contains(SEND_OTP_ENDPOINT) + || testCaseDTO.getInput().contains(SEND_OTP_ENDPOINT) + || testCaseName.startsWith(MIMOTO_CREDENTIAL_STATUS) || testCaseName.contains("_vid"))) { + throw new SkipException(OTP_FEATURE_NOT_SUPPORTED); + } + return testCaseName; + } + +} \ No newline at end of file diff --git a/apitest/src/main/resources/config/Kernel.properties b/apitest/src/main/resources/config/Kernel.properties index 7f749b5f8..b752f6ec0 100644 --- a/apitest/src/main/resources/config/Kernel.properties +++ b/apitest/src/main/resources/config/Kernel.properties @@ -169,8 +169,8 @@ new_Resident_Password = mosip123 new_Resident_Role = default-roles-mosip,PARTNER_ADMIN roles.111995 = PARTNER_ADMIN,default-roles-mosip keycloak_UserName = admin -keycloak_Password = sMDr9Ainw9 -keycloak-external-url = https://iam.qa-inji.mosip.net +keycloak_Password = DyWRaJqTFh +keycloak-external-url = https://iam.released.mosip.net keycloak-realm-id = mosip iam-users-to-create = 111997,111998,220005,111992,globaladmin,111887,111999 iam-users-password = mosip123,mosip123,mosip123,mosip123,mosip123 @@ -190,15 +190,15 @@ pool_size=1 dialect=org.hibernate.dialect.PostgreSQLDialect show_sql=true current_session_context_class=thread -audit_url=jdbc:postgresql://qa-inji.mosip.net:5432/mosip_audit +audit_url=jdbc:postgresql://released.mosip.net:5432/mosip_audit audit_username=postgres -audit_password=2BhgiSpCaT +audit_password=WfJpMctLjp audit_default_schema=audit DB_PORT= installation-domain= -partner_url=jdbc:postgresql://qa-inji.mosip.net:5432/mosip_ida +partner_url=jdbc:postgresql://released.mosip.net:5432/mosip_ida partner_username=postgres -partner_password=2BhgiSpCaT +partner_password=WfJpMctLjp partner_default_schema=partner reportLogPath=automationLogAndReport postgresqlUser=postgresql @@ -210,7 +210,7 @@ hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect hibernate.show_sql=true hibernate.current_session_context_class=thread db-su-user=postgres -postgres-password=2BhgiSpCaT +postgres-password=WfJpMctLjp pms_db_schema=pms km_db_schema=keymgr master_db_schema=master diff --git a/apitest/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.yml b/apitest/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.yml index feffab958..3f8e5bd0e 100644 --- a/apitest/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.yml +++ b/apitest/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.yml @@ -1,5 +1,5 @@ GetPolicySunBirdR: - Mimoto_ESignet_SunBirdR_DeletePolicy_NOAUTH_Valid_Smoke: + Mimoto_ESignet_SunBirdR_GetPolicy_NOAUTH_Valid_Smoke: endPoint: $SUNBIRDBASEURL$/api/v1/Insurance/{insuranceid} description: Getting sunbird policy with valid parameters role: resident diff --git a/apitest/testNgXmlFiles/mimotoApi.xml b/apitest/testNgXmlFiles/mimotoApi.xml index 3237e5a10..6c86963cc 100644 --- a/apitest/testNgXmlFiles/mimotoApi.xml +++ b/apitest/testNgXmlFiles/mimotoApi.xml @@ -23,19 +23,12 @@ - - - - - - - - + @@ -43,6 +36,7 @@ + @@ -50,6 +44,7 @@ + @@ -58,6 +53,7 @@ + @@ -65,6 +61,7 @@ + @@ -72,6 +69,7 @@ + @@ -81,6 +79,7 @@ + @@ -88,6 +87,7 @@ + @@ -96,6 +96,7 @@ + @@ -192,6 +193,7 @@ + From ab9b25cc9d37663de2be41809a26be8f86059988 Mon Sep 17 00:00:00 2001 From: Vijay Kumar S <94220135+vijay151096@users.noreply.github.com> Date: Tue, 17 Sep 2024 10:37:08 +0530 Subject: [PATCH 239/860] Update mimoto_openapi_spec.json (#436) Signed-off-by: Vijay Kumar S <94220135+vijay151096@users.noreply.github.com> --- docs/stoplight/mimoto_openapi_spec.json | 81 ++++++++++++++++--------- 1 file changed, 52 insertions(+), 29 deletions(-) diff --git a/docs/stoplight/mimoto_openapi_spec.json b/docs/stoplight/mimoto_openapi_spec.json index 6acef56f9..e25e60e2b 100644 --- a/docs/stoplight/mimoto_openapi_spec.json +++ b/docs/stoplight/mimoto_openapi_spec.json @@ -2410,35 +2410,44 @@ "summary": "Get Issuers Wellknown" } }, - "/issuers/{issuer-id}/credentials/{credentialType}/download": { - "get": { - "operationId": "generatePdfForVC", - "parameters": [ - { - "name": "Bearer", - "in": "header", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "issuer-id", - "in": "path", - "required": true, - "schema": { - "type": "string" + "/credentials/download": { + "post": { + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "grant_type": { + "type": "string", + "example": "authorization_code" + }, + "code": { + "type": "string", + "example": "GL9N1V-authorizationcodeyBkoaonjplms" + }, + "redirect_uri": { + "type": "string", + "example": "https://injiweb.collab.mosip.net/redirect" + }, + "code_verifier": { + "type": "string", + "example": "Sq6nZNToevcodeVerifierjXw70LCJ" + }, + "issuer": { + "type": "string", + "example": "Mosip" + }, + "credential": { + "type": "string", + "example": "MosipVerifiableCredential" + } + } + } } }, - { - "name": "credentialType", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], + "required": true + }, "tags": [ "Trusted Issuers" ], @@ -2446,6 +2455,17 @@ "responses": { "200": { "description": "OK", + "content": { + "application/pdf": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "400": { + "description": "BAD_REQUEST", "content": { "application/pdf": { "schema": { @@ -2506,7 +2526,10 @@ } } }, - "summary": "Download Credential As PDF" + "summary": "Download Credential As PDF", + "x-stoplight": { + "id": "42bjevdfa0stx" + } } }, "/authorize": { @@ -2742,4 +2765,4 @@ } }, "x-internal": true -} \ No newline at end of file +} From 8146ee0b554832e5dbc8ddba9baccecd244f60ac Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Tue, 17 Sep 2024 15:37:31 +0530 Subject: [PATCH 240/860] MOSIP-35770 Signed-off-by: Nandhukumar --- .../apirig/testrunner/MosipTestRunner.java | 2 ++ .../mosip/testrig/apirig/utils/MimotoUtil.java | 17 ++++++++--------- .../src/main/resources/config/Kernel.properties | 1 + .../src/main/resources/testCaseSkippedList.txt | 2 ++ 4 files changed, 13 insertions(+), 9 deletions(-) create mode 100644 apitest/src/main/resources/testCaseSkippedList.txt diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java b/apitest/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java index 98ad80cf5..751b63fbe 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java @@ -35,6 +35,7 @@ import io.mosip.testrig.apirig.utils.MispPartnerAndLicenseKeyGeneration; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.PartnerRegistration; +import io.mosip.testrig.apirig.utils.SkipTestCaseHandler; /** * Class to initiate mosip api test execution @@ -71,6 +72,7 @@ public static void main(String[] arg) { } ConfigManager.init(); BaseTestCase.suiteSetup(); + SkipTestCaseHandler.loadTestcaseToBeSkippedList("testCaseSkippedList.txt"); setLogLevels(); // For now we are not doing health check for qa-115. diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java b/apitest/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java index 3202bfd20..e2555aa21 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java @@ -8,11 +8,6 @@ public class MimotoUtil extends AdminTestUtil { private static final Logger logger = Logger.getLogger(MimotoUtil.class); - public static final String SEND_OTP_ENDPOINT = "mimoto/req/"; - public static final String MIMOTO_CREDENTIAL_STATUS = "Mimoto_CredentialsStatus_"; - public static final String OTP_FEATURE_NOT_SUPPORTED = "OTP feature not supported. Hence skipping the testcase"; - - private static String otpEnabled = "true"; public static String isOTPEnabled() { @@ -41,10 +36,14 @@ public static TestCaseDTO changeContextURLByFlag(TestCaseDTO testCaseDTO) { public static String isTestCaseValidForExecution(TestCaseDTO testCaseDTO) { String testCaseName = testCaseDTO.getTestCaseName(); - if (isOTPEnabled().equals("false") && (testCaseDTO.getEndPoint().contains(SEND_OTP_ENDPOINT) - || testCaseDTO.getInput().contains(SEND_OTP_ENDPOINT) - || testCaseName.startsWith(MIMOTO_CREDENTIAL_STATUS) || testCaseName.contains("_vid"))) { - throw new SkipException(OTP_FEATURE_NOT_SUPPORTED); + if (isOTPEnabled().equals("false") && (testCaseDTO.getEndPoint().contains(GlobalConstants.SEND_OTP_ENDPOINT) + || testCaseDTO.getInput().contains(GlobalConstants.SEND_OTP_ENDPOINT) + || testCaseName.startsWith(GlobalConstants.MIMOTO_CREDENTIAL_STATUS) || testCaseName.contains("_vid"))) { + throw new SkipException(GlobalConstants.OTP_FEATURE_NOT_SUPPORTED); + } + + if (SkipTestCaseHandler.isTestCaseInSkippedList(testCaseName)) { + throw new SkipException(GlobalConstants.KNOWN_ISSUES); } return testCaseName; } diff --git a/apitest/src/main/resources/config/Kernel.properties b/apitest/src/main/resources/config/Kernel.properties index b752f6ec0..0578664c9 100644 --- a/apitest/src/main/resources/config/Kernel.properties +++ b/apitest/src/main/resources/config/Kernel.properties @@ -242,6 +242,7 @@ usePreConfiguredOtp=true eSignetDeployed=yes partnerUrlSuffix=oYf63Lax0DY2QkYMRHnrmDqhmO3RMWQagwm0ftgLlkuin1KOND/666/576732 reportIgnoredTestCases=no +reportKnownIssueTestCases=no servicesNotDeployed= esignetMockBaseURL=esignet-insurance. sunBirdBaseURL=https://registry.dev1.mosip.net diff --git a/apitest/src/main/resources/testCaseSkippedList.txt b/apitest/src/main/resources/testCaseSkippedList.txt new file mode 100644 index 000000000..76c50d7e3 --- /dev/null +++ b/apitest/src/main/resources/testCaseSkippedList.txt @@ -0,0 +1,2 @@ +##### JIRA number;testcase +#MOSIP-12456------Mimoto_AddIdentity_Binding_smoke_Pos \ No newline at end of file From ad4e4d21035239606b4cf96ca5b741e690e9d1bf Mon Sep 17 00:00:00 2001 From: Vijay Kumar S <94220135+vijay151096@users.noreply.github.com> Date: Wed, 18 Sep 2024 14:30:14 +0530 Subject: [PATCH 241/860] [INJIWEB-825] : refactor the utilities bean (#437) * [INJIWEB-825] : refactor the utilities bean Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-825] : refactor the utilities bean Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- .../java/io/mosip/mimoto/util/Utilities.java | 55 +++++++++++-------- .../resources/application-local.properties | 3 +- 2 files changed, 34 insertions(+), 24 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/util/Utilities.java b/src/main/java/io/mosip/mimoto/util/Utilities.java index cacda19e4..1b78bcece 100644 --- a/src/main/java/io/mosip/mimoto/util/Utilities.java +++ b/src/main/java/io/mosip/mimoto/util/Utilities.java @@ -7,10 +7,14 @@ import io.mosip.mimoto.exception.ExceptionUtils; import io.mosip.mimoto.exception.PlatformErrorMessages; import io.mosip.mimoto.service.impl.CredentialShareServiceImpl; +import jakarta.annotation.PostConstruct; import lombok.Data; +import org.apache.commons.lang.StringUtils; import org.json.simple.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.Resource; import org.springframework.stereotype.Component; import javax.imageio.ImageIO; @@ -62,13 +66,13 @@ public class Utilities { * The get reg issuers config json. */ @Value("${mosip.openid.issuers}") - private String getIssuersConfigJson; + private String issuersConfigPath; @Value("${mosip.openid.verifiers}") - private String trustedVerifiers; + private String trustedVerifiersPath; @Value("${mosip.openid.htmlTemplate}") - private String getCredentialSupportedHtml; + private String credentialTemplatePath; private String issuersConfigJsonString = null; @@ -76,15 +80,21 @@ public class Utilities { private String credentialTemplateHtmlString = null; - // uncomment for running mimoto Locally to populate the issuers json -// public Utilities(@Value("classpath:mimoto-issuers-config.json") Resource resource, -// @Value("classpath:mimoto-trusted-verifiers.json") Resource trustedVerifiersResource, -// @Value("classpath:/templates/credential-template.html") Resource credentialTemplateResource) throws IOException{ -// -// issuersConfigJsonString = (Files.readString(resource.getFile().toPath())); -// trustedVerifiersJsonString = (Files.readString(trustedVerifiersResource.getFile().toPath())); -// credentialTemplateHtmlString = (Files.readString(credentialTemplateResource.getFile().toPath())); -// } + @Value("${spring.profiles.active}") + private String activeProfile; + + @PostConstruct + public void setUp() throws IOException { + if(activeProfile.equals("local")) { + Resource resource = new ClassPathResource(issuersConfigPath); + Resource trustedVerifiersResource = new ClassPathResource(trustedVerifiersPath); + Resource credentialTemplateResource = new ClassPathResource("templates/"+ credentialTemplatePath); + + trustedVerifiersJsonString = (Files.readString(trustedVerifiersResource.getFile().toPath())); + issuersConfigJsonString = (Files.readString(resource.getFile().toPath())); + credentialTemplateHtmlString = (Files.readString(credentialTemplateResource.getFile().toPath())); + } + } public static String encodeToString(BufferedImage image, String type) { String imageString = null; @@ -150,14 +160,16 @@ public void removeCacheData(String requestId) throws IOException { /** * Gets the json. * - * @param configServerFileStorageURL the config server file storage URL - * @param uri the uri + * @param configString the stringified config + * @param resourcePath path of the resource * @return the json */ - public String getJson(String configServerFileStorageURL, String uri) { - String json = null; + public String getJson(String configString, String resourcePath) { + String json = configString; try { - json = restApiClient.getApi(URI.create(configServerFileStorageURL + uri), String.class); + if(StringUtils.isEmpty(json)){ + json = restApiClient.getApi(URI.create(configServerFileStorageURL + resourcePath), String.class); + } } catch (Exception e) { logger.error(ExceptionUtils.getStackTrace(e)); } @@ -165,16 +177,13 @@ public String getJson(String configServerFileStorageURL, String uri) { } public String getIssuersConfigJsonValue() { - return (issuersConfigJsonString != null && !issuersConfigJsonString.isEmpty()) ? - issuersConfigJsonString : getJson(configServerFileStorageURL, getIssuersConfigJson); + return getJson(issuersConfigJsonString, issuersConfigPath); } public String getTrustedVerifiersJsonValue() { - return (trustedVerifiersJsonString != null && !trustedVerifiersJsonString.isEmpty()) ? - trustedVerifiersJsonString : getJson(configServerFileStorageURL, trustedVerifiers); + return getJson(trustedVerifiersJsonString, trustedVerifiersPath); } public String getCredentialSupportedTemplateString() { - return (credentialTemplateHtmlString != null && !credentialTemplateHtmlString.isEmpty()) ? - credentialTemplateHtmlString : getJson(configServerFileStorageURL, getCredentialSupportedHtml); + return getJson(credentialTemplateHtmlString, credentialTemplatePath); } public static ResponseWrapper handleExceptionWithErrorCode(Exception exception) { String errorMessage = exception.getMessage(); diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 8d56145c5..244feefa0 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -160,7 +160,7 @@ CREATEDATASHARE=${mosipbox.public.url}/v1/datashare/create DECRYPTPINBASSED=${mosipbox.public.url}/v1/keymanager/decryptWithPin # config.server.file.storage.uri=${spring.cloud.config.uri}/${spring.application.name}/${spring.profiles.active}/${spring.cloud.config.label}/ -config.server.file.storage.uri=${mosipbox.public.url}/config/print/mz/develop2-v3/ +config.server.file.storage.uri=https://raw.githubusercontent.com/mosip/inji-config/develop/ # websub authentication - auth adapter mosip.iam.adapter.clientid=mpartner-default-mobile @@ -197,6 +197,7 @@ wallet.binding.partner.id=mpartner-default-keybindingtoken wallet.binding.partner.api.key=Aci9jg28B8mO_LDfDXo3ZTp5_HKgEMun2tYyHCa1e8k #wallet.binding.partner.id=mpartner-default-mimotobinding #wallet.binding.partner.api.key=14378 +mosip.iam.adapter.disable-self-token-rest-template=true # OpenID #configurations related to openid4vc From a9618554ac295444c087eb21019a12daa0550f35 Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Mon, 23 Sep 2024 17:59:02 +0530 Subject: [PATCH 242/860] INJIMOB-1592 Signed-off-by: Nandhukumar --- .../apirig/testscripts/AddIdentity.java | 2 +- .../apirig/testscripts/DeleteWithParam.java | 2 +- .../apirig/testscripts/GetWithParam.java | 2 +- .../PostWithAutogenIdWithOtpGenerate.java | 2 +- .../PostWithBodyWithOtpGenerate.java | 2 +- .../PostWithFormDataBodyForPdfDownload.java | 2 +- .../apirig/testscripts/SimplePost.java | 2 +- .../testscripts/SimplePostForAutoGenId.java | 2 +- .../testrig/apirig/utils/MimotoUtil.java | 27 ++++++++++++++----- apitest/testNgXmlFiles/mimotoApi.xml | 14 ++++++++-- 10 files changed, 41 insertions(+), 16 deletions(-) diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java index cc4826529..744ad7513 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java @@ -98,7 +98,7 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad new KernelAuthentication().getTokenByRole(testCaseDTO.getRole())).asString(), "response.uin"); - testCaseName = MimotoUtil.isTestCaseValidForExecution(testCaseDTO); + testCaseDTO = MimotoUtil.isTestCaseValidForTheExecution(testCaseDTO); testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); DateFormat dateFormatter = new SimpleDateFormat("yyyyMMddHHmmss"); diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/DeleteWithParam.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/DeleteWithParam.java index 4132217d0..7592029d7 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/DeleteWithParam.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/DeleteWithParam.java @@ -78,7 +78,7 @@ public Object[] getTestCaseList(ITestContext context) { @Test(dataProvider = "testcaselist") public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException { testCaseName = testCaseDTO.getTestCaseName(); - testCaseName = MimotoUtil.isTestCaseValidForExecution(testCaseDTO); + testCaseDTO = MimotoUtil.isTestCaseValidForTheExecution(testCaseDTO); testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); if (HealthChecker.signalTerminateExecution) { throw new SkipException( diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java index bdc69e6bf..5bb9eebe1 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java @@ -83,7 +83,7 @@ public Object[] getTestCaseList(ITestContext context) { @Test(dataProvider = "testcaselist") public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException { testCaseName = testCaseDTO.getTestCaseName(); - testCaseName = MimotoUtil.isTestCaseValidForExecution(testCaseDTO); + testCaseDTO = MimotoUtil.isTestCaseValidForTheExecution(testCaseDTO); testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); if (HealthChecker.signalTerminateExecution) { throw new SkipException( diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java index 680e4842b..0d10b7bc7 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java @@ -96,7 +96,7 @@ public void test(TestCaseDTO testCaseDTO) throw new SkipException(GlobalConstants.VID_FEATURE_NOT_SUPPORTED); } } - testCaseName = MimotoUtil.isTestCaseValidForExecution(testCaseDTO); + testCaseDTO = MimotoUtil.isTestCaseValidForTheExecution(testCaseDTO); testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); JSONObject req = new JSONObject(testCaseDTO.getInput()); diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithBodyWithOtpGenerate.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithBodyWithOtpGenerate.java index d776c7e29..40be66959 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithBodyWithOtpGenerate.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithBodyWithOtpGenerate.java @@ -92,7 +92,7 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad } } - testCaseName = MimotoUtil.isTestCaseValidForExecution(testCaseDTO); + testCaseDTO = MimotoUtil.isTestCaseValidForTheExecution(testCaseDTO); testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); auditLogCheck = testCaseDTO.isAuditLogCheck(); String tempUrl = ConfigManager.getEsignetBaseUrl(); diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithFormDataBodyForPdfDownload.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithFormDataBodyForPdfDownload.java index 83b1fc74a..b743b89e1 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithFormDataBodyForPdfDownload.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithFormDataBodyForPdfDownload.java @@ -81,7 +81,7 @@ public Object[] getTestCaseList(ITestContext context) { @Test(dataProvider = "testcaselist") public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException { testCaseName = testCaseDTO.getTestCaseName(); - testCaseName = MimotoUtil.isTestCaseValidForExecution(testCaseDTO); + testCaseDTO = MimotoUtil.isTestCaseValidForTheExecution(testCaseDTO); testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); if (HealthChecker.signalTerminateExecution) { throw new SkipException(GlobalConstants.TARGET_ENV_HEALTH_CHECK_FAILED + HealthChecker.healthCheckFailureMapS); diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java index 71ec92cf3..5ce965a6d 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java @@ -83,7 +83,7 @@ public Object[] getTestCaseList(ITestContext context) { @Test(dataProvider = "testcaselist") public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException { testCaseName = testCaseDTO.getTestCaseName(); - testCaseName = MimotoUtil.isTestCaseValidForExecution(testCaseDTO); + testCaseDTO = MimotoUtil.isTestCaseValidForTheExecution(testCaseDTO); testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); auditLogCheck = testCaseDTO.isAuditLogCheck(); String[] templateFields = testCaseDTO.getTemplateFields(); diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java index 9a82dd526..da0edf874 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java @@ -99,7 +99,7 @@ public void test(TestCaseDTO testCaseDTO) } } - testCaseName = MimotoUtil.isTestCaseValidForExecution(testCaseDTO); + testCaseDTO = MimotoUtil.isTestCaseValidForTheExecution(testCaseDTO); testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); String[] templateFields = testCaseDTO.getTemplateFields(); String inputJson = ""; diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java b/apitest/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java index e2555aa21..f4a9b128e 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java @@ -34,18 +34,33 @@ public static TestCaseDTO changeContextURLByFlag(TestCaseDTO testCaseDTO) { return testCaseDTO; } - public static String isTestCaseValidForExecution(TestCaseDTO testCaseDTO) { + public static TestCaseDTO isTestCaseValidForTheExecution(TestCaseDTO testCaseDTO) { String testCaseName = testCaseDTO.getTestCaseName(); - if (isOTPEnabled().equals("false") && (testCaseDTO.getEndPoint().contains(GlobalConstants.SEND_OTP_ENDPOINT) - || testCaseDTO.getInput().contains(GlobalConstants.SEND_OTP_ENDPOINT) - || testCaseName.startsWith(GlobalConstants.MIMOTO_CREDENTIAL_STATUS) || testCaseName.contains("_vid"))) { - throw new SkipException(GlobalConstants.OTP_FEATURE_NOT_SUPPORTED); + String endpoint = testCaseDTO.getEndPoint(); + String inputJson = testCaseDTO.getInput(); + + + if (isOTPEnabled().equals("false")) { + if (testCaseDTO.getEndPoint().contains(GlobalConstants.SEND_OTP_ENDPOINT) + || testCaseDTO.getInput().contains(GlobalConstants.SEND_OTP_ENDPOINT) + || testCaseName.startsWith(GlobalConstants.MIMOTO_CREDENTIAL_STATUS) + || (testCaseName.startsWith("Mimoto_Generate_") && endpoint.contains("/v1/mimoto/vid"))) { + throw new SkipException(GlobalConstants.OTP_FEATURE_NOT_SUPPORTED); + } + + if (inputJson.contains("_vid$")) { + inputJson = inputJson.replace("_vid$", "_VID$"); + testCaseDTO.setInput(inputJson); + } + } + if (isOTPEnabled().equals("true") && endpoint.contains("/idrepository/v1/vid")) { + throw new SkipException(GlobalConstants.FEATURE_NOT_SUPPORTED_MESSAGE); } if (SkipTestCaseHandler.isTestCaseInSkippedList(testCaseName)) { throw new SkipException(GlobalConstants.KNOWN_ISSUES); } - return testCaseName; + return testCaseDTO; } } \ No newline at end of file diff --git a/apitest/testNgXmlFiles/mimotoApi.xml b/apitest/testNgXmlFiles/mimotoApi.xml index 6c86963cc..2ca5c5a34 100644 --- a/apitest/testNgXmlFiles/mimotoApi.xml +++ b/apitest/testNgXmlFiles/mimotoApi.xml @@ -16,11 +16,21 @@ - + + + + + + + + - + From 3f95d0670092c9aeba4d7784806114cd7a6b3934 Mon Sep 17 00:00:00 2001 From: Nandhukumar <100744358+nandhu-kumar@users.noreply.github.com> Date: Tue, 24 Sep 2024 10:06:36 +0530 Subject: [PATCH 243/860] INJIMOB-1592 (#443) Signed-off-by: Nandhukumar --- .../apirig/testscripts/AddIdentity.java | 2 +- .../apirig/testscripts/DeleteWithParam.java | 2 +- .../apirig/testscripts/GetWithParam.java | 2 +- .../PostWithAutogenIdWithOtpGenerate.java | 2 +- .../PostWithBodyWithOtpGenerate.java | 2 +- .../PostWithFormDataBodyForPdfDownload.java | 2 +- .../apirig/testscripts/SimplePost.java | 2 +- .../testscripts/SimplePostForAutoGenId.java | 2 +- .../testrig/apirig/utils/MimotoUtil.java | 27 ++++++++++++++----- apitest/testNgXmlFiles/mimotoApi.xml | 14 ++++++++-- 10 files changed, 41 insertions(+), 16 deletions(-) diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java index cc4826529..744ad7513 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java @@ -98,7 +98,7 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad new KernelAuthentication().getTokenByRole(testCaseDTO.getRole())).asString(), "response.uin"); - testCaseName = MimotoUtil.isTestCaseValidForExecution(testCaseDTO); + testCaseDTO = MimotoUtil.isTestCaseValidForTheExecution(testCaseDTO); testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); DateFormat dateFormatter = new SimpleDateFormat("yyyyMMddHHmmss"); diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/DeleteWithParam.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/DeleteWithParam.java index 4132217d0..7592029d7 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/DeleteWithParam.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/DeleteWithParam.java @@ -78,7 +78,7 @@ public Object[] getTestCaseList(ITestContext context) { @Test(dataProvider = "testcaselist") public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException { testCaseName = testCaseDTO.getTestCaseName(); - testCaseName = MimotoUtil.isTestCaseValidForExecution(testCaseDTO); + testCaseDTO = MimotoUtil.isTestCaseValidForTheExecution(testCaseDTO); testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); if (HealthChecker.signalTerminateExecution) { throw new SkipException( diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java index bdc69e6bf..5bb9eebe1 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java @@ -83,7 +83,7 @@ public Object[] getTestCaseList(ITestContext context) { @Test(dataProvider = "testcaselist") public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException { testCaseName = testCaseDTO.getTestCaseName(); - testCaseName = MimotoUtil.isTestCaseValidForExecution(testCaseDTO); + testCaseDTO = MimotoUtil.isTestCaseValidForTheExecution(testCaseDTO); testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); if (HealthChecker.signalTerminateExecution) { throw new SkipException( diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java index 680e4842b..0d10b7bc7 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java @@ -96,7 +96,7 @@ public void test(TestCaseDTO testCaseDTO) throw new SkipException(GlobalConstants.VID_FEATURE_NOT_SUPPORTED); } } - testCaseName = MimotoUtil.isTestCaseValidForExecution(testCaseDTO); + testCaseDTO = MimotoUtil.isTestCaseValidForTheExecution(testCaseDTO); testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); JSONObject req = new JSONObject(testCaseDTO.getInput()); diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithBodyWithOtpGenerate.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithBodyWithOtpGenerate.java index d776c7e29..40be66959 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithBodyWithOtpGenerate.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithBodyWithOtpGenerate.java @@ -92,7 +92,7 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad } } - testCaseName = MimotoUtil.isTestCaseValidForExecution(testCaseDTO); + testCaseDTO = MimotoUtil.isTestCaseValidForTheExecution(testCaseDTO); testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); auditLogCheck = testCaseDTO.isAuditLogCheck(); String tempUrl = ConfigManager.getEsignetBaseUrl(); diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithFormDataBodyForPdfDownload.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithFormDataBodyForPdfDownload.java index 83b1fc74a..b743b89e1 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithFormDataBodyForPdfDownload.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithFormDataBodyForPdfDownload.java @@ -81,7 +81,7 @@ public Object[] getTestCaseList(ITestContext context) { @Test(dataProvider = "testcaselist") public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException { testCaseName = testCaseDTO.getTestCaseName(); - testCaseName = MimotoUtil.isTestCaseValidForExecution(testCaseDTO); + testCaseDTO = MimotoUtil.isTestCaseValidForTheExecution(testCaseDTO); testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); if (HealthChecker.signalTerminateExecution) { throw new SkipException(GlobalConstants.TARGET_ENV_HEALTH_CHECK_FAILED + HealthChecker.healthCheckFailureMapS); diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java index 71ec92cf3..5ce965a6d 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java @@ -83,7 +83,7 @@ public Object[] getTestCaseList(ITestContext context) { @Test(dataProvider = "testcaselist") public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException { testCaseName = testCaseDTO.getTestCaseName(); - testCaseName = MimotoUtil.isTestCaseValidForExecution(testCaseDTO); + testCaseDTO = MimotoUtil.isTestCaseValidForTheExecution(testCaseDTO); testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); auditLogCheck = testCaseDTO.isAuditLogCheck(); String[] templateFields = testCaseDTO.getTemplateFields(); diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java index 9a82dd526..da0edf874 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java @@ -99,7 +99,7 @@ public void test(TestCaseDTO testCaseDTO) } } - testCaseName = MimotoUtil.isTestCaseValidForExecution(testCaseDTO); + testCaseDTO = MimotoUtil.isTestCaseValidForTheExecution(testCaseDTO); testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); String[] templateFields = testCaseDTO.getTemplateFields(); String inputJson = ""; diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java b/apitest/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java index e2555aa21..f4a9b128e 100644 --- a/apitest/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java +++ b/apitest/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java @@ -34,18 +34,33 @@ public static TestCaseDTO changeContextURLByFlag(TestCaseDTO testCaseDTO) { return testCaseDTO; } - public static String isTestCaseValidForExecution(TestCaseDTO testCaseDTO) { + public static TestCaseDTO isTestCaseValidForTheExecution(TestCaseDTO testCaseDTO) { String testCaseName = testCaseDTO.getTestCaseName(); - if (isOTPEnabled().equals("false") && (testCaseDTO.getEndPoint().contains(GlobalConstants.SEND_OTP_ENDPOINT) - || testCaseDTO.getInput().contains(GlobalConstants.SEND_OTP_ENDPOINT) - || testCaseName.startsWith(GlobalConstants.MIMOTO_CREDENTIAL_STATUS) || testCaseName.contains("_vid"))) { - throw new SkipException(GlobalConstants.OTP_FEATURE_NOT_SUPPORTED); + String endpoint = testCaseDTO.getEndPoint(); + String inputJson = testCaseDTO.getInput(); + + + if (isOTPEnabled().equals("false")) { + if (testCaseDTO.getEndPoint().contains(GlobalConstants.SEND_OTP_ENDPOINT) + || testCaseDTO.getInput().contains(GlobalConstants.SEND_OTP_ENDPOINT) + || testCaseName.startsWith(GlobalConstants.MIMOTO_CREDENTIAL_STATUS) + || (testCaseName.startsWith("Mimoto_Generate_") && endpoint.contains("/v1/mimoto/vid"))) { + throw new SkipException(GlobalConstants.OTP_FEATURE_NOT_SUPPORTED); + } + + if (inputJson.contains("_vid$")) { + inputJson = inputJson.replace("_vid$", "_VID$"); + testCaseDTO.setInput(inputJson); + } + } + if (isOTPEnabled().equals("true") && endpoint.contains("/idrepository/v1/vid")) { + throw new SkipException(GlobalConstants.FEATURE_NOT_SUPPORTED_MESSAGE); } if (SkipTestCaseHandler.isTestCaseInSkippedList(testCaseName)) { throw new SkipException(GlobalConstants.KNOWN_ISSUES); } - return testCaseName; + return testCaseDTO; } } \ No newline at end of file diff --git a/apitest/testNgXmlFiles/mimotoApi.xml b/apitest/testNgXmlFiles/mimotoApi.xml index 6c86963cc..2ca5c5a34 100644 --- a/apitest/testNgXmlFiles/mimotoApi.xml +++ b/apitest/testNgXmlFiles/mimotoApi.xml @@ -16,11 +16,21 @@ - + + + + + + + + - + From 3f0fec7e1fabfb683666afb6cc974b52f7f219fe Mon Sep 17 00:00:00 2001 From: Mohanachandran S Date: Fri, 27 Sep 2024 15:16:33 +0530 Subject: [PATCH 244/860] MOSIP-35916 - Renamed the apitest folder to api-test Signed-off-by: Mohanachandran S --- .github/workflows/push-trigger.yml | 10 +++++----- {apitest => api-test}/.gitignore | 0 ...-Functional Test-classpath-arg-1659588646071.txt | 0 ...-Functional Test-classpath-arg-1659589592502.txt | 0 ...ipFunctionalTest-classpath-arg-1695652238739.txt | 0 ...onfiguration (1)-classpath-arg-1658840665646.txt | 0 .../Biometric Devices/Face/DeviceDiscovery.json | 0 .../Biometric Devices/Face/DeviceInfo.json | 0 .../Biometric Devices/Face/DigitalId.json | 0 .../Biometric Devices/Face/Keys/mosipface.p12 | Bin .../Biometric Devices/Face/Keys/mosipfaceftm.p12 | Bin .../Biometric Devices/Face/Stream Image/0.jpeg | Bin .../Finger/Single/DeviceDiscovery.json | 0 .../Biometric Devices/Finger/Single/DeviceInfo.json | 0 .../Biometric Devices/Finger/Single/DigitalId.json | 0 .../Finger/Single/Keys/mosipfingersingle.p12 | Bin .../Finger/Single/Keys/mosipfingersingleftm.p12 | Bin .../Finger/Slap/DeviceDiscovery.json | 0 .../Biometric Devices/Finger/Slap/DeviceInfo.json | 0 .../Biometric Devices/Finger/Slap/DigitalId.json | 0 .../Finger/Slap/Keys/mosipfingerslap.p12 | Bin .../Finger/Slap/Keys/mosipfingerslapftm.p12 | Bin .../Finger/Slap/Stream Image/1.jpeg | Bin .../Finger/Slap/Stream Image/2.jpeg | Bin .../Finger/Slap/Stream Image/3.jpeg | Bin .../Iris/Double/DeviceDiscovery.json | 0 .../Biometric Devices/Iris/Double/DeviceInfo.json | 0 .../Biometric Devices/Iris/Double/DigitalId.json | 0 .../Iris/Double/Keys/mosipirisdouble.p12 | Bin .../Iris/Double/Keys/mosipirisdoubleftm.p12 | Bin .../Iris/Double/Stream Image/1.jpeg | Bin .../Iris/Double/Stream Image/2.jpeg | Bin .../Iris/Double/Stream Image/3.jpeg | Bin .../Iris/Single/DeviceDiscovery.json | 0 .../Biometric Devices/Iris/Single/DeviceInfo.json | 0 .../Biometric Devices/Iris/Single/DigitalId.json | 0 .../Iris/Single/Keys/mosipirissingle.p12 | Bin .../Iris/Single/Keys/mosipirissingleftm.p12 | Bin .../Biometric Devices/mosiprootca.p12 | Bin .../Biometric Devices/mosiprootcaftm.p12 | Bin {apitest => api-test}/Biometric Devices/rootca.cer | 0 .../Biometric Devices/rootcaftm.cer | 0 {apitest => api-test}/Dockerfile | 2 +- {apitest => api-test}/README.md | 0 {apitest => api-test}/application.properties | 0 {apitest => api-test}/entrypoint.sh | 0 {apitest => api-test}/metadata.xml | 0 {apitest => api-test}/pom.xml | 0 .../resource/Profile/Automatic/Auth/0001Face.iso | Bin .../Profile/Automatic/Auth/0001Left_Index.iso | Bin .../Profile/Automatic/Auth/0001Left_Index.wsq.iso | Bin .../Profile/Automatic/Auth/0001Left_Iris.iso | Bin .../Profile/Automatic/Auth/0001Left_Little.iso | Bin .../Profile/Automatic/Auth/0001Left_Little.wsq.iso | Bin .../Profile/Automatic/Auth/0001Left_Middle.iso | Bin .../Profile/Automatic/Auth/0001Left_Middle.wsq.iso | Bin .../Profile/Automatic/Auth/0001Left_Ring.iso | Bin .../Profile/Automatic/Auth/0001Left_Ring.wsq.iso | Bin .../Profile/Automatic/Auth/0001Left_Thumb.iso | Bin .../Profile/Automatic/Auth/0001Left_Thumb.wsq.iso | Bin .../Profile/Automatic/Auth/0001Right_Index.iso | Bin .../Profile/Automatic/Auth/0001Right_Index.wsq.iso | Bin .../Profile/Automatic/Auth/0001Right_Iris.iso | Bin .../Profile/Automatic/Auth/0001Right_Little.iso | Bin .../Profile/Automatic/Auth/0001Right_Little.wsq.iso | Bin .../Profile/Automatic/Auth/0001Right_Middle.iso | Bin .../Profile/Automatic/Auth/0001Right_Middle.wsq.iso | Bin .../Profile/Automatic/Auth/0001Right_Ring.iso | Bin .../Profile/Automatic/Auth/0001Right_Ring.wsq.iso | Bin .../Profile/Automatic/Auth/0001Right_Thumb.iso | Bin .../Profile/Automatic/Auth/0001Right_Thumb.wsq.iso | Bin .../Automatic/Registration/0001Exception_Photo.iso | Bin .../Profile/Automatic/Registration/0001Face.iso | Bin .../Automatic/Registration/0001Left_Index.iso | Bin .../Automatic/Registration/0001Left_Iris.iso | Bin .../Automatic/Registration/0001Left_Little.iso | Bin .../Automatic/Registration/0001Left_Middle.iso | Bin .../Automatic/Registration/0001Left_Ring.iso | Bin .../Automatic/Registration/0001Left_Thumb.iso | Bin .../Automatic/Registration/0001Right_Index.iso | Bin .../Automatic/Registration/0001Right_Iris.iso | Bin .../Automatic/Registration/0001Right_Little.iso | Bin .../Automatic/Registration/0001Right_Middle.iso | Bin .../Automatic/Registration/0001Right_Ring.iso | Bin .../Automatic/Registration/0001Right_Thumb.iso | Bin .../resource/Profile/Default/Auth/Face.iso | Bin .../resource/Profile/Default/Auth/Finger_UKNOWN.iso | Bin .../Profile/Default/Auth/Finger_UKNOWN_wsq.iso | Bin .../resource/Profile/Default/Auth/Iris_UNKNOWN.iso | Bin .../resource/Profile/Default/Auth/Left_Index.iso | Bin .../Profile/Default/Auth/Left_Index_wsq.iso | Bin .../resource/Profile/Default/Auth/Left_Iris.iso | Bin .../resource/Profile/Default/Auth/Left_Little.iso | Bin .../Profile/Default/Auth/Left_Little_wsq.iso | Bin .../resource/Profile/Default/Auth/Left_Middle.iso | Bin .../Profile/Default/Auth/Left_Middle_wsq.iso | Bin .../resource/Profile/Default/Auth/Left_Ring.iso | Bin .../resource/Profile/Default/Auth/Left_Ring_wsq.iso | Bin .../resource/Profile/Default/Auth/Left_Thumb.iso | Bin .../Profile/Default/Auth/Left_Thumb_wsq.iso | Bin .../resource/Profile/Default/Auth/Right_Index.iso | Bin .../Profile/Default/Auth/Right_Index_wsq.iso | Bin .../resource/Profile/Default/Auth/Right_Iris.iso | Bin .../resource/Profile/Default/Auth/Right_Little.iso | Bin .../Profile/Default/Auth/Right_Little_wsq.iso | Bin .../resource/Profile/Default/Auth/Right_Middle.iso | Bin .../Profile/Default/Auth/Right_Middle_wsq.iso | Bin .../resource/Profile/Default/Auth/Right_Ring.iso | Bin .../Profile/Default/Auth/Right_Ring_wsq.iso | Bin .../resource/Profile/Default/Auth/Right_Thumb.iso | Bin .../Profile/Default/Auth/Right_Thumb_wsq.iso | Bin .../Default/Registration/Exception_Photo.iso | Bin .../resource/Profile/Default/Registration/Face.iso | Bin .../Profile/Default/Registration/Left_Index.iso | Bin .../Profile/Default/Registration/Left_Iris.iso | Bin .../Profile/Default/Registration/Left_Little.iso | Bin .../Profile/Default/Registration/Left_Middle.iso | Bin .../Profile/Default/Registration/Left_Ring.iso | Bin .../Profile/Default/Registration/Left_Thumb.iso | Bin .../Profile/Default/Registration/Right_Index.iso | Bin .../Profile/Default/Registration/Right_Iris.iso | Bin .../Profile/Default/Registration/Right_Little.iso | Bin .../Profile/Default/Registration/Right_Middle.iso | Bin .../Profile/Default/Registration/Right_Ring.iso | Bin .../Profile/Default/Registration/Right_Thumb.iso | Bin .../testrig/apirig/testrunner/MosipTestRunner.java | 0 .../testrig/apirig/testscripts/AddIdentity.java | 0 .../testrig/apirig/testscripts/DeleteWithParam.java | 0 .../testrig/apirig/testscripts/GetWithParam.java | 0 .../PostWithAutogenIdWithOtpGenerate.java | 0 .../testscripts/PostWithBodyWithOtpGenerate.java | 0 .../PostWithFormDataBodyForPdfDownload.java | 0 .../testrig/apirig/testscripts/SimplePost.java | 0 .../apirig/testscripts/SimplePostForAutoGenId.java | 0 .../io/mosip/testrig/apirig/utils/MimotoUtil.java | 0 .../src/main/resources/config/AuthPolicy.json | 0 .../src/main/resources/config/AuthPolicy2.json | 0 .../src/main/resources/config/AuthPolicy3.json | 0 .../src/main/resources/config/AuthPolicy4.json | 0 .../src/main/resources/config/AuthPolicy5.json | 0 .../src/main/resources/config/AuthPolicy6.json | 0 .../config/Authorization/OtpGeneration/request.json | 0 .../config/Authorization/OtpValidation/request.json | 0 .../resources/config/Authorization/errorUIN.json | 0 .../config/Authorization/internalAuthRequest.json | 0 .../Authorization/keycloakTokenGeneration.json | 0 .../resources/config/Authorization/request.json | 0 .../config/Authorization/requestIdentity.json | 0 .../config/Authorization/zoneMappingRequest.json | 0 .../src/main/resources/config/IDRepo.properties | 0 .../src/main/resources/config/IDRepo2.properties | 0 .../src/main/resources/config/IDjson.properties | 0 .../src/main/resources/config/Kernel.properties | 1 + .../resources/config/UmcValidationApis.properties | 0 .../main/resources/config/adminQueries.properties | 0 .../config/adminTokenGeneration.properties | 0 .../main/resources/config/application.properties | 0 .../src/main/resources/config/bioValue.properties | 0 .../config/bioValueEncryptionTemplate.json | 0 .../src/main/resources/config/bulkUpload.json | 0 .../src/main/resources/config/clientPrivateKey.txt | 0 .../src/main/resources/config/errorUIN.json | 0 .../src/main/resources/config/errorUINIdp.json | 0 .../src/main/resources/config/errorUINKyc.json | 0 .../src/main/resources/config/esignetPayload.json | 0 .../main/resources/config/folderPaths.properties | 0 .../resources/config/healthCheckEndpoint.properties | 0 .../main/resources/config/idRepoToken.properties | 0 .../resources/config/idaCertDataDeleteQueries.txt | 0 .../config/keyManagerCertDataDeleteQueries.txt | 0 .../config/keyManagerDataDeleteQueries.txt | 0 .../main/resources/config/lang-isocode-transid.csv | 0 .../src/main/resources/config/mapping.properties | 0 .../config/masterDataCertDataDeleteQueries.txt | 0 .../resources/config/masterDataDeleteQueries.txt | 0 .../resources/config/packetProperties.properties | 0 .../resources/config/packetValidator.properties | 0 .../resources/config/partnerDemoService.properties | 0 .../main/resources/config/partnerQueries.properties | 0 .../main/resources/config/pmsDataDeleteQueries.txt | 0 .../src/main/resources/config/policyGroup.json | 0 .../src/main/resources/config/prereg_SendOtp.json | 0 .../main/resources/config/prereg_ValidateOtp.json | 0 .../config/registrationProcessorAPI.properties | 0 .../config/residentServicesQueries.properties | 0 .../src/main/resources/config/sign.json | 0 .../src/main/resources/config/test.properties | 0 .../resources/config/tokenGeneration.properties | 0 .../config/updatePacketProperties.properties | 0 .../main/resources/config/valueMapping.properties | 0 .../customize-emailable-report-template.html | 0 .../src/main/resources/dbFiles/.xml | 0 .../main/resources/dbFiles/PMS_delete_script.txt | 0 .../src/main/resources/dbFiles/dbConfig.xml | 0 .../main/resources/dbFiles/delete_Masterdata.sql | 0 {apitest => api-test}/src/main/resources/krb5.conf | 0 .../src/main/resources/log4j.properties | 0 .../resources/mimoto/AddIdentity/AddIdentity.yml | 0 .../mimoto/AddIdentity/addIdentityResult.hbs | 0 .../AidGetIndividualId/AidGetIndividualId.yml | 0 .../AidGetIndividualId/aidGetIndividualId.hbs | 0 .../AidGetIndividualId/aidGetIndividualIdResult.hbs | 0 .../resources/mimoto/AuthLock/createAuthLock.hbs | 0 .../resources/mimoto/AuthLock/createAuthLock.yml | 0 .../mimoto/AuthLock/createAuthLockResult.hbs | 0 .../mimoto/AuthUnLock/createAuthUnLock.hbs | 0 .../mimoto/AuthUnLock/createAuthUnLock.yml | 0 .../mimoto/AuthUnLock/createAuthUnLockResult.hbs | 0 .../mimoto/AuthenticateUser/AuthenticateUser.hbs | 0 .../mimoto/AuthenticateUser/AuthenticateUser.yml | 0 .../AuthenticateUser/AuthenticateUserResult.hbs | 0 .../mimoto/AuthorizationCode/AuthorizationCode.hbs | 0 .../mimoto/AuthorizationCode/AuthorizationCode.yml | 0 .../AuthorizationCode/AuthorizationCodeResult.hbs | 0 .../main/resources/mimoto/BindingOtp/BindingOtp.hbs | 0 .../main/resources/mimoto/BindingOtp/BindingOtp.yml | 0 .../mimoto/BindingOtp/BindingOtpResult.hbs | 0 .../main/resources/mimoto/CreateVID/CreateVid.yml | 0 .../main/resources/mimoto/CreateVID/createVid.hbs | 0 .../resources/mimoto/CreateVID/createVidResult.hbs | 0 .../CredentialCheckStatus/CredentialCheckStatus.yml | 0 .../CredentialCheckStatus/credentialcheckstatus.hbs | 0 .../credentialcheckstatusResult.hbs | 0 .../DownloadCredential/DownloadCredential.yml | 0 .../DownloadCredential/downloadCredential.hbs | 0 .../DownloadWithReqid/DownloadWithReqid.yml | 0 .../DownloadWithReqid/downloadwithreqid.hbs | 0 .../DownloadWithReqid/downloadwithreqidResult.hbs | 0 .../RequestCredentials/ReqCredential.yml | 0 .../RequestCredentials/ReqCredentialResult.hbs | 0 .../RequestCredentials/reqCredential.hbs | 0 .../DownloadIssuerCredential.hbs | 0 .../DownloadIssuerCredential.yml | 0 .../DownloadIssuerCredentialResult.hbs | 0 .../mimoto/GenerateVID/createGenerateVID.hbs | 0 .../mimoto/GenerateVID/createGenerateVID.yml | 0 .../mimoto/GenerateVID/createGenerateVIDResult.hbs | 0 .../GetAllCredentialTypes/GetAllCredentialTypes.hbs | 0 .../GetAllCredentialTypes/GetAllCredentialTypes.yml | 0 .../GetAllCredentialTypesResult.hbs | 0 .../mimoto/GetAllIssuers/GetAllIssuers.hbs | 0 .../mimoto/GetAllIssuers/GetAllIssuers.yml | 0 .../mimoto/GetAllIssuers/GetAllIssuersResult.hbs | 0 .../OAuthDetailsRequest/OAuthDetailsRequest.hbs | 0 .../OAuthDetailsRequest/OAuthDetailsRequest.yml | 0 .../OAuthDetailsRequestResult.hbs | 0 .../src/main/resources/mimoto/SendOTP/SendOTP.yml | 0 .../main/resources/mimoto/SendOTP/createSendOTP.hbs | 0 .../resources/mimoto/SendOTP/createSendOTP2.hbs | 0 .../mimoto/SendOTP/createSendOTPAsEmail.hbs | 0 .../mimoto/SendOTP/createSendOTPAsEmpty.hbs | 0 .../mimoto/SendOTP/createSendOTPAsPhone.hbs | 0 .../mimoto/SendOTP/createSendOTPErrorResult.hbs | 0 .../mimoto/SendOTP/createSendOTPErrorResult2.hbs | 0 .../mimoto/SendOTP/createSendOTPResult.hbs | 0 .../mimoto/SendOTP/createSendOTPResultForEmail.hbs | 0 .../mimoto/SendOTP/createSendOTPResultForPhone.hbs | 0 .../resources/mimoto/SendOTPUIN/createSendOTP.yml | 0 .../resources/mimoto/SendOTPUIN/individualIdOtp.hbs | 0 .../mimoto/SendOTPUIN/individualIdOtpResult.hbs | 0 .../resources/mimoto/SendOtpEsignet/SendOtp.hbs | 0 .../mimoto/SendOtpEsignet/SendOtpResult.hbs | 0 .../mimoto/SendOtpForVid/createSendOTP.hbs | 0 .../mimoto/SendOtpForVid/createSendOTP.yml | 0 .../mimoto/SendOtpForVid/createSendOTPResult.hbs | 0 .../AuthenticateUserSunBirdC.hbs | 0 .../AuthenticateUserSunBirdC.yml | 0 .../AuthenticateUserSunBirdCResult.hbs | 0 .../AuthorizationCodeSunBirdC.hbs | 0 .../AuthorizationCodeSunBirdC.yml | 0 .../AuthorizationCodeSunBirdCResult.hbs | 0 .../OAuthDetailsRequestSunBirdC.hbs | 0 .../OAuthDetailsRequestSunBirdC.yml | 0 .../OAuthDetailsRequestSunBirdCResult.hbs | 0 .../CreatePolicySunBirdR/CreatePolicySunBirdR.hbs | 0 .../CreatePolicySunBirdR/CreatePolicySunBirdR.yml | 0 .../CreatePolicySunBirdRResult.hbs | 0 .../DeletePolicySunBirdR/DeletePolicySunBirdR.hbs | 0 .../DeletePolicySunBirdR/DeletePolicySunBirdR.yml | 0 .../DeletePolicySunBirdRResult.hbs | 0 .../GetPolicySunBirdR/GetPolicySunBirdR.hbs | 0 .../GetPolicySunBirdR/GetPolicySunBirdR.yml | 0 .../GetPolicySunBirdR/GetPolicySunBirdRResult.hbs | 0 .../SearchPolicySunBirdR/SearchPolicySunBirdR.hbs | 0 .../SearchPolicySunBirdR/SearchPolicySunBirdR.yml | 0 .../SearchPolicySunBirdRResult.hbs | 0 .../resources/mimoto/ValidateOTP/ValidateOTP.hbs | 0 .../resources/mimoto/ValidateOTP/ValidateOTP.yml | 0 .../mimoto/ValidateOTP/ValidateOTPResult.hbs | 0 .../mimoto/WalletBinding/WalletBinding.hbs | 0 .../mimoto/WalletBinding/WalletBinding.yml | 0 .../WalletBinding/WalletBindingEmptyChallenge.hbs | 0 .../mimoto/WalletBinding/WalletBindingResult.hbs | 0 .../resources/mimoto/autoGeneratedId.properties | 0 .../src/main/resources/mimoto/error.hbs | 0 .../src/main/resources/spring.properties | 0 .../src/main/resources/testCaseSkippedList.txt | 0 {apitest => api-test}/testNgXmlFiles/mimotoApi.xml | 0 298 files changed, 7 insertions(+), 6 deletions(-) rename {apitest => api-test}/.gitignore (100%) rename {apitest => api-test}/.temp-Functional Test-classpath-arg-1659588646071.txt (100%) rename {apitest => api-test}/.temp-Functional Test-classpath-arg-1659589592502.txt (100%) rename {apitest => api-test}/.temp-MosipFunctionalTest-classpath-arg-1695652238739.txt (100%) rename {apitest => api-test}/.temp-New_configuration (1)-classpath-arg-1658840665646.txt (100%) rename {apitest => api-test}/Biometric Devices/Face/DeviceDiscovery.json (100%) rename {apitest => api-test}/Biometric Devices/Face/DeviceInfo.json (100%) rename {apitest => api-test}/Biometric Devices/Face/DigitalId.json (100%) rename {apitest => api-test}/Biometric Devices/Face/Keys/mosipface.p12 (100%) rename {apitest => api-test}/Biometric Devices/Face/Keys/mosipfaceftm.p12 (100%) rename {apitest => api-test}/Biometric Devices/Face/Stream Image/0.jpeg (100%) rename {apitest => api-test}/Biometric Devices/Finger/Single/DeviceDiscovery.json (100%) rename {apitest => api-test}/Biometric Devices/Finger/Single/DeviceInfo.json (100%) rename {apitest => api-test}/Biometric Devices/Finger/Single/DigitalId.json (100%) rename {apitest => api-test}/Biometric Devices/Finger/Single/Keys/mosipfingersingle.p12 (100%) rename {apitest => api-test}/Biometric Devices/Finger/Single/Keys/mosipfingersingleftm.p12 (100%) rename {apitest => api-test}/Biometric Devices/Finger/Slap/DeviceDiscovery.json (100%) rename {apitest => api-test}/Biometric Devices/Finger/Slap/DeviceInfo.json (100%) rename {apitest => api-test}/Biometric Devices/Finger/Slap/DigitalId.json (100%) rename {apitest => api-test}/Biometric Devices/Finger/Slap/Keys/mosipfingerslap.p12 (100%) rename {apitest => api-test}/Biometric Devices/Finger/Slap/Keys/mosipfingerslapftm.p12 (100%) rename {apitest => api-test}/Biometric Devices/Finger/Slap/Stream Image/1.jpeg (100%) rename {apitest => api-test}/Biometric Devices/Finger/Slap/Stream Image/2.jpeg (100%) rename {apitest => api-test}/Biometric Devices/Finger/Slap/Stream Image/3.jpeg (100%) rename {apitest => api-test}/Biometric Devices/Iris/Double/DeviceDiscovery.json (100%) rename {apitest => api-test}/Biometric Devices/Iris/Double/DeviceInfo.json (100%) rename {apitest => api-test}/Biometric Devices/Iris/Double/DigitalId.json (100%) rename {apitest => api-test}/Biometric Devices/Iris/Double/Keys/mosipirisdouble.p12 (100%) rename {apitest => api-test}/Biometric Devices/Iris/Double/Keys/mosipirisdoubleftm.p12 (100%) rename {apitest => api-test}/Biometric Devices/Iris/Double/Stream Image/1.jpeg (100%) rename {apitest => api-test}/Biometric Devices/Iris/Double/Stream Image/2.jpeg (100%) rename {apitest => api-test}/Biometric Devices/Iris/Double/Stream Image/3.jpeg (100%) rename {apitest => api-test}/Biometric Devices/Iris/Single/DeviceDiscovery.json (100%) rename {apitest => api-test}/Biometric Devices/Iris/Single/DeviceInfo.json (100%) rename {apitest => api-test}/Biometric Devices/Iris/Single/DigitalId.json (100%) rename {apitest => api-test}/Biometric Devices/Iris/Single/Keys/mosipirissingle.p12 (100%) rename {apitest => api-test}/Biometric Devices/Iris/Single/Keys/mosipirissingleftm.p12 (100%) rename {apitest => api-test}/Biometric Devices/mosiprootca.p12 (100%) rename {apitest => api-test}/Biometric Devices/mosiprootcaftm.p12 (100%) rename {apitest => api-test}/Biometric Devices/rootca.cer (100%) rename {apitest => api-test}/Biometric Devices/rootcaftm.cer (100%) rename {apitest => api-test}/Dockerfile (98%) rename {apitest => api-test}/README.md (100%) rename {apitest => api-test}/application.properties (100%) rename {apitest => api-test}/entrypoint.sh (100%) rename {apitest => api-test}/metadata.xml (100%) rename {apitest => api-test}/pom.xml (100%) rename {apitest => api-test}/resource/Profile/Automatic/Auth/0001Face.iso (100%) rename {apitest => api-test}/resource/Profile/Automatic/Auth/0001Left_Index.iso (100%) rename {apitest => api-test}/resource/Profile/Automatic/Auth/0001Left_Index.wsq.iso (100%) rename {apitest => api-test}/resource/Profile/Automatic/Auth/0001Left_Iris.iso (100%) rename {apitest => api-test}/resource/Profile/Automatic/Auth/0001Left_Little.iso (100%) rename {apitest => api-test}/resource/Profile/Automatic/Auth/0001Left_Little.wsq.iso (100%) rename {apitest => api-test}/resource/Profile/Automatic/Auth/0001Left_Middle.iso (100%) rename {apitest => api-test}/resource/Profile/Automatic/Auth/0001Left_Middle.wsq.iso (100%) rename {apitest => api-test}/resource/Profile/Automatic/Auth/0001Left_Ring.iso (100%) rename {apitest => api-test}/resource/Profile/Automatic/Auth/0001Left_Ring.wsq.iso (100%) rename {apitest => api-test}/resource/Profile/Automatic/Auth/0001Left_Thumb.iso (100%) rename {apitest => api-test}/resource/Profile/Automatic/Auth/0001Left_Thumb.wsq.iso (100%) rename {apitest => api-test}/resource/Profile/Automatic/Auth/0001Right_Index.iso (100%) rename {apitest => api-test}/resource/Profile/Automatic/Auth/0001Right_Index.wsq.iso (100%) rename {apitest => api-test}/resource/Profile/Automatic/Auth/0001Right_Iris.iso (100%) rename {apitest => api-test}/resource/Profile/Automatic/Auth/0001Right_Little.iso (100%) rename {apitest => api-test}/resource/Profile/Automatic/Auth/0001Right_Little.wsq.iso (100%) rename {apitest => api-test}/resource/Profile/Automatic/Auth/0001Right_Middle.iso (100%) rename {apitest => api-test}/resource/Profile/Automatic/Auth/0001Right_Middle.wsq.iso (100%) rename {apitest => api-test}/resource/Profile/Automatic/Auth/0001Right_Ring.iso (100%) rename {apitest => api-test}/resource/Profile/Automatic/Auth/0001Right_Ring.wsq.iso (100%) rename {apitest => api-test}/resource/Profile/Automatic/Auth/0001Right_Thumb.iso (100%) rename {apitest => api-test}/resource/Profile/Automatic/Auth/0001Right_Thumb.wsq.iso (100%) rename {apitest => api-test}/resource/Profile/Automatic/Registration/0001Exception_Photo.iso (100%) rename {apitest => api-test}/resource/Profile/Automatic/Registration/0001Face.iso (100%) rename {apitest => api-test}/resource/Profile/Automatic/Registration/0001Left_Index.iso (100%) rename {apitest => api-test}/resource/Profile/Automatic/Registration/0001Left_Iris.iso (100%) rename {apitest => api-test}/resource/Profile/Automatic/Registration/0001Left_Little.iso (100%) rename {apitest => api-test}/resource/Profile/Automatic/Registration/0001Left_Middle.iso (100%) rename {apitest => api-test}/resource/Profile/Automatic/Registration/0001Left_Ring.iso (100%) rename {apitest => api-test}/resource/Profile/Automatic/Registration/0001Left_Thumb.iso (100%) rename {apitest => api-test}/resource/Profile/Automatic/Registration/0001Right_Index.iso (100%) rename {apitest => api-test}/resource/Profile/Automatic/Registration/0001Right_Iris.iso (100%) rename {apitest => api-test}/resource/Profile/Automatic/Registration/0001Right_Little.iso (100%) rename {apitest => api-test}/resource/Profile/Automatic/Registration/0001Right_Middle.iso (100%) rename {apitest => api-test}/resource/Profile/Automatic/Registration/0001Right_Ring.iso (100%) rename {apitest => api-test}/resource/Profile/Automatic/Registration/0001Right_Thumb.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Auth/Face.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Auth/Finger_UKNOWN.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Auth/Finger_UKNOWN_wsq.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Auth/Iris_UNKNOWN.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Auth/Left_Index.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Auth/Left_Index_wsq.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Auth/Left_Iris.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Auth/Left_Little.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Auth/Left_Little_wsq.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Auth/Left_Middle.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Auth/Left_Middle_wsq.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Auth/Left_Ring.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Auth/Left_Ring_wsq.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Auth/Left_Thumb.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Auth/Left_Thumb_wsq.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Auth/Right_Index.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Auth/Right_Index_wsq.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Auth/Right_Iris.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Auth/Right_Little.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Auth/Right_Little_wsq.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Auth/Right_Middle.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Auth/Right_Middle_wsq.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Auth/Right_Ring.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Auth/Right_Ring_wsq.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Auth/Right_Thumb.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Auth/Right_Thumb_wsq.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Registration/Exception_Photo.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Registration/Face.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Registration/Left_Index.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Registration/Left_Iris.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Registration/Left_Little.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Registration/Left_Middle.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Registration/Left_Ring.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Registration/Left_Thumb.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Registration/Right_Index.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Registration/Right_Iris.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Registration/Right_Little.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Registration/Right_Middle.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Registration/Right_Ring.iso (100%) rename {apitest => api-test}/resource/Profile/Default/Registration/Right_Thumb.iso (100%) rename {apitest => api-test}/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java (100%) rename {apitest => api-test}/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java (100%) rename {apitest => api-test}/src/main/java/io/mosip/testrig/apirig/testscripts/DeleteWithParam.java (100%) rename {apitest => api-test}/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java (100%) rename {apitest => api-test}/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java (100%) rename {apitest => api-test}/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithBodyWithOtpGenerate.java (100%) rename {apitest => api-test}/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithFormDataBodyForPdfDownload.java (100%) rename {apitest => api-test}/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java (100%) rename {apitest => api-test}/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java (100%) rename {apitest => api-test}/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java (100%) rename {apitest => api-test}/src/main/resources/config/AuthPolicy.json (100%) rename {apitest => api-test}/src/main/resources/config/AuthPolicy2.json (100%) rename {apitest => api-test}/src/main/resources/config/AuthPolicy3.json (100%) rename {apitest => api-test}/src/main/resources/config/AuthPolicy4.json (100%) rename {apitest => api-test}/src/main/resources/config/AuthPolicy5.json (100%) rename {apitest => api-test}/src/main/resources/config/AuthPolicy6.json (100%) rename {apitest => api-test}/src/main/resources/config/Authorization/OtpGeneration/request.json (100%) rename {apitest => api-test}/src/main/resources/config/Authorization/OtpValidation/request.json (100%) rename {apitest => api-test}/src/main/resources/config/Authorization/errorUIN.json (100%) rename {apitest => api-test}/src/main/resources/config/Authorization/internalAuthRequest.json (100%) rename {apitest => api-test}/src/main/resources/config/Authorization/keycloakTokenGeneration.json (100%) rename {apitest => api-test}/src/main/resources/config/Authorization/request.json (100%) rename {apitest => api-test}/src/main/resources/config/Authorization/requestIdentity.json (100%) rename {apitest => api-test}/src/main/resources/config/Authorization/zoneMappingRequest.json (100%) rename {apitest => api-test}/src/main/resources/config/IDRepo.properties (100%) rename {apitest => api-test}/src/main/resources/config/IDRepo2.properties (100%) rename {apitest => api-test}/src/main/resources/config/IDjson.properties (100%) rename {apitest => api-test}/src/main/resources/config/Kernel.properties (99%) rename {apitest => api-test}/src/main/resources/config/UmcValidationApis.properties (100%) rename {apitest => api-test}/src/main/resources/config/adminQueries.properties (100%) rename {apitest => api-test}/src/main/resources/config/adminTokenGeneration.properties (100%) rename {apitest => api-test}/src/main/resources/config/application.properties (100%) rename {apitest => api-test}/src/main/resources/config/bioValue.properties (100%) rename {apitest => api-test}/src/main/resources/config/bioValueEncryptionTemplate.json (100%) rename {apitest => api-test}/src/main/resources/config/bulkUpload.json (100%) rename {apitest => api-test}/src/main/resources/config/clientPrivateKey.txt (100%) rename {apitest => api-test}/src/main/resources/config/errorUIN.json (100%) rename {apitest => api-test}/src/main/resources/config/errorUINIdp.json (100%) rename {apitest => api-test}/src/main/resources/config/errorUINKyc.json (100%) rename {apitest => api-test}/src/main/resources/config/esignetPayload.json (100%) rename {apitest => api-test}/src/main/resources/config/folderPaths.properties (100%) rename {apitest => api-test}/src/main/resources/config/healthCheckEndpoint.properties (100%) rename {apitest => api-test}/src/main/resources/config/idRepoToken.properties (100%) rename {apitest => api-test}/src/main/resources/config/idaCertDataDeleteQueries.txt (100%) rename {apitest => api-test}/src/main/resources/config/keyManagerCertDataDeleteQueries.txt (100%) rename {apitest => api-test}/src/main/resources/config/keyManagerDataDeleteQueries.txt (100%) rename {apitest => api-test}/src/main/resources/config/lang-isocode-transid.csv (100%) rename {apitest => api-test}/src/main/resources/config/mapping.properties (100%) rename {apitest => api-test}/src/main/resources/config/masterDataCertDataDeleteQueries.txt (100%) rename {apitest => api-test}/src/main/resources/config/masterDataDeleteQueries.txt (100%) rename {apitest => api-test}/src/main/resources/config/packetProperties.properties (100%) rename {apitest => api-test}/src/main/resources/config/packetValidator.properties (100%) rename {apitest => api-test}/src/main/resources/config/partnerDemoService.properties (100%) rename {apitest => api-test}/src/main/resources/config/partnerQueries.properties (100%) rename {apitest => api-test}/src/main/resources/config/pmsDataDeleteQueries.txt (100%) rename {apitest => api-test}/src/main/resources/config/policyGroup.json (100%) rename {apitest => api-test}/src/main/resources/config/prereg_SendOtp.json (100%) rename {apitest => api-test}/src/main/resources/config/prereg_ValidateOtp.json (100%) rename {apitest => api-test}/src/main/resources/config/registrationProcessorAPI.properties (100%) rename {apitest => api-test}/src/main/resources/config/residentServicesQueries.properties (100%) rename {apitest => api-test}/src/main/resources/config/sign.json (100%) rename {apitest => api-test}/src/main/resources/config/test.properties (100%) rename {apitest => api-test}/src/main/resources/config/tokenGeneration.properties (100%) rename {apitest => api-test}/src/main/resources/config/updatePacketProperties.properties (100%) rename {apitest => api-test}/src/main/resources/config/valueMapping.properties (100%) rename {apitest => api-test}/src/main/resources/customize-emailable-report-template.html (100%) rename {apitest => api-test}/src/main/resources/dbFiles/.xml (100%) rename {apitest => api-test}/src/main/resources/dbFiles/PMS_delete_script.txt (100%) rename {apitest => api-test}/src/main/resources/dbFiles/dbConfig.xml (100%) rename {apitest => api-test}/src/main/resources/dbFiles/delete_Masterdata.sql (100%) rename {apitest => api-test}/src/main/resources/krb5.conf (100%) rename {apitest => api-test}/src/main/resources/log4j.properties (100%) rename {apitest => api-test}/src/main/resources/mimoto/AddIdentity/AddIdentity.yml (100%) rename {apitest => api-test}/src/main/resources/mimoto/AddIdentity/addIdentityResult.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml (100%) rename {apitest => api-test}/src/main/resources/mimoto/AidGetIndividualId/aidGetIndividualId.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/AidGetIndividualId/aidGetIndividualIdResult.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/AuthLock/createAuthLock.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/AuthLock/createAuthLock.yml (100%) rename {apitest => api-test}/src/main/resources/mimoto/AuthLock/createAuthLockResult.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml (100%) rename {apitest => api-test}/src/main/resources/mimoto/AuthUnLock/createAuthUnLockResult.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.yml (100%) rename {apitest => api-test}/src/main/resources/mimoto/AuthenticateUser/AuthenticateUserResult.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/AuthorizationCode/AuthorizationCode.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/AuthorizationCode/AuthorizationCode.yml (100%) rename {apitest => api-test}/src/main/resources/mimoto/AuthorizationCode/AuthorizationCodeResult.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/BindingOtp/BindingOtp.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/BindingOtp/BindingOtp.yml (100%) rename {apitest => api-test}/src/main/resources/mimoto/BindingOtp/BindingOtpResult.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/CreateVID/CreateVid.yml (100%) rename {apitest => api-test}/src/main/resources/mimoto/CreateVID/createVid.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/CreateVID/createVidResult.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml (100%) rename {apitest => api-test}/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatus.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatusResult.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml (100%) rename {apitest => api-test}/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/downloadCredential.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml (100%) rename {apitest => api-test}/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqid.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqidResult.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml (100%) rename {apitest => api-test}/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredentialResult.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/reqCredential.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml (100%) rename {apitest => api-test}/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredentialResult.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/GenerateVID/createGenerateVID.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml (100%) rename {apitest => api-test}/src/main/resources/mimoto/GenerateVID/createGenerateVIDResult.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.yml (100%) rename {apitest => api-test}/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypesResult.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml (100%) rename {apitest => api-test}/src/main/resources/mimoto/GetAllIssuers/GetAllIssuersResult.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.yml (100%) rename {apitest => api-test}/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequestResult.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/SendOTP/SendOTP.yml (100%) rename {apitest => api-test}/src/main/resources/mimoto/SendOTP/createSendOTP.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/SendOTP/createSendOTP2.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/SendOTP/createSendOTPAsEmail.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/SendOTP/createSendOTPAsEmpty.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/SendOTP/createSendOTPAsPhone.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/SendOTP/createSendOTPErrorResult.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/SendOTP/createSendOTPErrorResult2.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/SendOTP/createSendOTPResult.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/SendOTP/createSendOTPResultForEmail.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/SendOTP/createSendOTPResultForPhone.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml (100%) rename {apitest => api-test}/src/main/resources/mimoto/SendOTPUIN/individualIdOtp.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/SendOTPUIN/individualIdOtpResult.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/SendOtpEsignet/SendOtp.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/SendOtpEsignet/SendOtpResult.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/SendOtpForVid/createSendOTP.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/SendOtpForVid/createSendOTP.yml (100%) rename {apitest => api-test}/src/main/resources/mimoto/SendOtpForVid/createSendOTPResult.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml (100%) rename {apitest => api-test}/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdCResult.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/SunBirdC/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/SunBirdC/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.yml (100%) rename {apitest => api-test}/src/main/resources/mimoto/SunBirdC/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdCResult.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml (100%) rename {apitest => api-test}/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdCResult.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/SunBirdR/CreatePolicySunBirdR/CreatePolicySunBirdR.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/SunBirdR/CreatePolicySunBirdR/CreatePolicySunBirdR.yml (100%) rename {apitest => api-test}/src/main/resources/mimoto/SunBirdR/CreatePolicySunBirdR/CreatePolicySunBirdRResult.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/SunBirdR/DeletePolicySunBirdR/DeletePolicySunBirdR.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/SunBirdR/DeletePolicySunBirdR/DeletePolicySunBirdR.yml (100%) rename {apitest => api-test}/src/main/resources/mimoto/SunBirdR/DeletePolicySunBirdR/DeletePolicySunBirdRResult.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.yml (100%) rename {apitest => api-test}/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdRResult.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/SunBirdR/SearchPolicySunBirdR/SearchPolicySunBirdR.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/SunBirdR/SearchPolicySunBirdR/SearchPolicySunBirdR.yml (100%) rename {apitest => api-test}/src/main/resources/mimoto/SunBirdR/SearchPolicySunBirdR/SearchPolicySunBirdRResult.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/ValidateOTP/ValidateOTP.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/ValidateOTP/ValidateOTP.yml (100%) rename {apitest => api-test}/src/main/resources/mimoto/ValidateOTP/ValidateOTPResult.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/WalletBinding/WalletBinding.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/WalletBinding/WalletBinding.yml (100%) rename {apitest => api-test}/src/main/resources/mimoto/WalletBinding/WalletBindingEmptyChallenge.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/WalletBinding/WalletBindingResult.hbs (100%) rename {apitest => api-test}/src/main/resources/mimoto/autoGeneratedId.properties (100%) rename {apitest => api-test}/src/main/resources/mimoto/error.hbs (100%) rename {apitest => api-test}/src/main/resources/spring.properties (100%) rename {apitest => api-test}/src/main/resources/testCaseSkippedList.txt (100%) rename {apitest => api-test}/testNgXmlFiles/mimotoApi.xml (100%) diff --git a/.github/workflows/push-trigger.yml b/.github/workflows/push-trigger.yml index f331ae151..e8fffc956 100644 --- a/.github/workflows/push-trigger.yml +++ b/.github/workflows/push-trigger.yml @@ -125,7 +125,7 @@ jobs: build-maven-apitest-mimoto: uses: mosip/kattu/.github/workflows/maven-build.yml@master-java21 with: - SERVICE_LOCATION: ./apitest + SERVICE_LOCATION: ./api-test BUILD_ARTIFACT: apitest-mimoto secrets: OSSRH_USER: ${{ secrets.OSSRH_USER }} @@ -139,7 +139,7 @@ jobs: needs: build-maven-apitest-mimoto uses: mosip/kattu/.github/workflows/maven-publish-to-nexus.yml@master-java21 with: - SERVICE_LOCATION: ./apitest + SERVICE_LOCATION: ./api-test secrets: OSSRH_USER: ${{ secrets.OSSRH_USER }} OSSRH_SECRET: ${{ secrets.OSSRH_SECRET }} @@ -154,7 +154,7 @@ jobs: env: NAMESPACE: ${{ secrets.dev_namespace_docker_hub }} SERVICE_NAME: apitest-mimoto - SERVICE_LOCATION: apitest + SERVICE_LOCATION: api-test BUILD_ARTIFACT: apitest-mimoto-local steps: - uses: actions/checkout@v3 @@ -199,7 +199,7 @@ jobs: strategy: matrix: include: - - SERVICE_LOCATION: 'apitest' + - SERVICE_LOCATION: 'api-test' SERVICE_NAME: 'apitest-mimoto' BUILD_ARTIFACT: 'apitest-mimoto-local' ONLY_DOCKER: true @@ -222,7 +222,7 @@ jobs: # if: "${{ github.event_name != 'pull_request' }}" # uses: mosip/kattu/.github/workflows/maven-sonar-analysis.yml@master-java21 # with: -# SERVICE_LOCATION: ./apitest +# SERVICE_LOCATION: ./api-test # secrets: # SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} # ORG_KEY: ${{ secrets.ORG_KEY }} diff --git a/apitest/.gitignore b/api-test/.gitignore similarity index 100% rename from apitest/.gitignore rename to api-test/.gitignore diff --git a/apitest/.temp-Functional Test-classpath-arg-1659588646071.txt b/api-test/.temp-Functional Test-classpath-arg-1659588646071.txt similarity index 100% rename from apitest/.temp-Functional Test-classpath-arg-1659588646071.txt rename to api-test/.temp-Functional Test-classpath-arg-1659588646071.txt diff --git a/apitest/.temp-Functional Test-classpath-arg-1659589592502.txt b/api-test/.temp-Functional Test-classpath-arg-1659589592502.txt similarity index 100% rename from apitest/.temp-Functional Test-classpath-arg-1659589592502.txt rename to api-test/.temp-Functional Test-classpath-arg-1659589592502.txt diff --git a/apitest/.temp-MosipFunctionalTest-classpath-arg-1695652238739.txt b/api-test/.temp-MosipFunctionalTest-classpath-arg-1695652238739.txt similarity index 100% rename from apitest/.temp-MosipFunctionalTest-classpath-arg-1695652238739.txt rename to api-test/.temp-MosipFunctionalTest-classpath-arg-1695652238739.txt diff --git a/apitest/.temp-New_configuration (1)-classpath-arg-1658840665646.txt b/api-test/.temp-New_configuration (1)-classpath-arg-1658840665646.txt similarity index 100% rename from apitest/.temp-New_configuration (1)-classpath-arg-1658840665646.txt rename to api-test/.temp-New_configuration (1)-classpath-arg-1658840665646.txt diff --git a/apitest/Biometric Devices/Face/DeviceDiscovery.json b/api-test/Biometric Devices/Face/DeviceDiscovery.json similarity index 100% rename from apitest/Biometric Devices/Face/DeviceDiscovery.json rename to api-test/Biometric Devices/Face/DeviceDiscovery.json diff --git a/apitest/Biometric Devices/Face/DeviceInfo.json b/api-test/Biometric Devices/Face/DeviceInfo.json similarity index 100% rename from apitest/Biometric Devices/Face/DeviceInfo.json rename to api-test/Biometric Devices/Face/DeviceInfo.json diff --git a/apitest/Biometric Devices/Face/DigitalId.json b/api-test/Biometric Devices/Face/DigitalId.json similarity index 100% rename from apitest/Biometric Devices/Face/DigitalId.json rename to api-test/Biometric Devices/Face/DigitalId.json diff --git a/apitest/Biometric Devices/Face/Keys/mosipface.p12 b/api-test/Biometric Devices/Face/Keys/mosipface.p12 similarity index 100% rename from apitest/Biometric Devices/Face/Keys/mosipface.p12 rename to api-test/Biometric Devices/Face/Keys/mosipface.p12 diff --git a/apitest/Biometric Devices/Face/Keys/mosipfaceftm.p12 b/api-test/Biometric Devices/Face/Keys/mosipfaceftm.p12 similarity index 100% rename from apitest/Biometric Devices/Face/Keys/mosipfaceftm.p12 rename to api-test/Biometric Devices/Face/Keys/mosipfaceftm.p12 diff --git a/apitest/Biometric Devices/Face/Stream Image/0.jpeg b/api-test/Biometric Devices/Face/Stream Image/0.jpeg similarity index 100% rename from apitest/Biometric Devices/Face/Stream Image/0.jpeg rename to api-test/Biometric Devices/Face/Stream Image/0.jpeg diff --git a/apitest/Biometric Devices/Finger/Single/DeviceDiscovery.json b/api-test/Biometric Devices/Finger/Single/DeviceDiscovery.json similarity index 100% rename from apitest/Biometric Devices/Finger/Single/DeviceDiscovery.json rename to api-test/Biometric Devices/Finger/Single/DeviceDiscovery.json diff --git a/apitest/Biometric Devices/Finger/Single/DeviceInfo.json b/api-test/Biometric Devices/Finger/Single/DeviceInfo.json similarity index 100% rename from apitest/Biometric Devices/Finger/Single/DeviceInfo.json rename to api-test/Biometric Devices/Finger/Single/DeviceInfo.json diff --git a/apitest/Biometric Devices/Finger/Single/DigitalId.json b/api-test/Biometric Devices/Finger/Single/DigitalId.json similarity index 100% rename from apitest/Biometric Devices/Finger/Single/DigitalId.json rename to api-test/Biometric Devices/Finger/Single/DigitalId.json diff --git a/apitest/Biometric Devices/Finger/Single/Keys/mosipfingersingle.p12 b/api-test/Biometric Devices/Finger/Single/Keys/mosipfingersingle.p12 similarity index 100% rename from apitest/Biometric Devices/Finger/Single/Keys/mosipfingersingle.p12 rename to api-test/Biometric Devices/Finger/Single/Keys/mosipfingersingle.p12 diff --git a/apitest/Biometric Devices/Finger/Single/Keys/mosipfingersingleftm.p12 b/api-test/Biometric Devices/Finger/Single/Keys/mosipfingersingleftm.p12 similarity index 100% rename from apitest/Biometric Devices/Finger/Single/Keys/mosipfingersingleftm.p12 rename to api-test/Biometric Devices/Finger/Single/Keys/mosipfingersingleftm.p12 diff --git a/apitest/Biometric Devices/Finger/Slap/DeviceDiscovery.json b/api-test/Biometric Devices/Finger/Slap/DeviceDiscovery.json similarity index 100% rename from apitest/Biometric Devices/Finger/Slap/DeviceDiscovery.json rename to api-test/Biometric Devices/Finger/Slap/DeviceDiscovery.json diff --git a/apitest/Biometric Devices/Finger/Slap/DeviceInfo.json b/api-test/Biometric Devices/Finger/Slap/DeviceInfo.json similarity index 100% rename from apitest/Biometric Devices/Finger/Slap/DeviceInfo.json rename to api-test/Biometric Devices/Finger/Slap/DeviceInfo.json diff --git a/apitest/Biometric Devices/Finger/Slap/DigitalId.json b/api-test/Biometric Devices/Finger/Slap/DigitalId.json similarity index 100% rename from apitest/Biometric Devices/Finger/Slap/DigitalId.json rename to api-test/Biometric Devices/Finger/Slap/DigitalId.json diff --git a/apitest/Biometric Devices/Finger/Slap/Keys/mosipfingerslap.p12 b/api-test/Biometric Devices/Finger/Slap/Keys/mosipfingerslap.p12 similarity index 100% rename from apitest/Biometric Devices/Finger/Slap/Keys/mosipfingerslap.p12 rename to api-test/Biometric Devices/Finger/Slap/Keys/mosipfingerslap.p12 diff --git a/apitest/Biometric Devices/Finger/Slap/Keys/mosipfingerslapftm.p12 b/api-test/Biometric Devices/Finger/Slap/Keys/mosipfingerslapftm.p12 similarity index 100% rename from apitest/Biometric Devices/Finger/Slap/Keys/mosipfingerslapftm.p12 rename to api-test/Biometric Devices/Finger/Slap/Keys/mosipfingerslapftm.p12 diff --git a/apitest/Biometric Devices/Finger/Slap/Stream Image/1.jpeg b/api-test/Biometric Devices/Finger/Slap/Stream Image/1.jpeg similarity index 100% rename from apitest/Biometric Devices/Finger/Slap/Stream Image/1.jpeg rename to api-test/Biometric Devices/Finger/Slap/Stream Image/1.jpeg diff --git a/apitest/Biometric Devices/Finger/Slap/Stream Image/2.jpeg b/api-test/Biometric Devices/Finger/Slap/Stream Image/2.jpeg similarity index 100% rename from apitest/Biometric Devices/Finger/Slap/Stream Image/2.jpeg rename to api-test/Biometric Devices/Finger/Slap/Stream Image/2.jpeg diff --git a/apitest/Biometric Devices/Finger/Slap/Stream Image/3.jpeg b/api-test/Biometric Devices/Finger/Slap/Stream Image/3.jpeg similarity index 100% rename from apitest/Biometric Devices/Finger/Slap/Stream Image/3.jpeg rename to api-test/Biometric Devices/Finger/Slap/Stream Image/3.jpeg diff --git a/apitest/Biometric Devices/Iris/Double/DeviceDiscovery.json b/api-test/Biometric Devices/Iris/Double/DeviceDiscovery.json similarity index 100% rename from apitest/Biometric Devices/Iris/Double/DeviceDiscovery.json rename to api-test/Biometric Devices/Iris/Double/DeviceDiscovery.json diff --git a/apitest/Biometric Devices/Iris/Double/DeviceInfo.json b/api-test/Biometric Devices/Iris/Double/DeviceInfo.json similarity index 100% rename from apitest/Biometric Devices/Iris/Double/DeviceInfo.json rename to api-test/Biometric Devices/Iris/Double/DeviceInfo.json diff --git a/apitest/Biometric Devices/Iris/Double/DigitalId.json b/api-test/Biometric Devices/Iris/Double/DigitalId.json similarity index 100% rename from apitest/Biometric Devices/Iris/Double/DigitalId.json rename to api-test/Biometric Devices/Iris/Double/DigitalId.json diff --git a/apitest/Biometric Devices/Iris/Double/Keys/mosipirisdouble.p12 b/api-test/Biometric Devices/Iris/Double/Keys/mosipirisdouble.p12 similarity index 100% rename from apitest/Biometric Devices/Iris/Double/Keys/mosipirisdouble.p12 rename to api-test/Biometric Devices/Iris/Double/Keys/mosipirisdouble.p12 diff --git a/apitest/Biometric Devices/Iris/Double/Keys/mosipirisdoubleftm.p12 b/api-test/Biometric Devices/Iris/Double/Keys/mosipirisdoubleftm.p12 similarity index 100% rename from apitest/Biometric Devices/Iris/Double/Keys/mosipirisdoubleftm.p12 rename to api-test/Biometric Devices/Iris/Double/Keys/mosipirisdoubleftm.p12 diff --git a/apitest/Biometric Devices/Iris/Double/Stream Image/1.jpeg b/api-test/Biometric Devices/Iris/Double/Stream Image/1.jpeg similarity index 100% rename from apitest/Biometric Devices/Iris/Double/Stream Image/1.jpeg rename to api-test/Biometric Devices/Iris/Double/Stream Image/1.jpeg diff --git a/apitest/Biometric Devices/Iris/Double/Stream Image/2.jpeg b/api-test/Biometric Devices/Iris/Double/Stream Image/2.jpeg similarity index 100% rename from apitest/Biometric Devices/Iris/Double/Stream Image/2.jpeg rename to api-test/Biometric Devices/Iris/Double/Stream Image/2.jpeg diff --git a/apitest/Biometric Devices/Iris/Double/Stream Image/3.jpeg b/api-test/Biometric Devices/Iris/Double/Stream Image/3.jpeg similarity index 100% rename from apitest/Biometric Devices/Iris/Double/Stream Image/3.jpeg rename to api-test/Biometric Devices/Iris/Double/Stream Image/3.jpeg diff --git a/apitest/Biometric Devices/Iris/Single/DeviceDiscovery.json b/api-test/Biometric Devices/Iris/Single/DeviceDiscovery.json similarity index 100% rename from apitest/Biometric Devices/Iris/Single/DeviceDiscovery.json rename to api-test/Biometric Devices/Iris/Single/DeviceDiscovery.json diff --git a/apitest/Biometric Devices/Iris/Single/DeviceInfo.json b/api-test/Biometric Devices/Iris/Single/DeviceInfo.json similarity index 100% rename from apitest/Biometric Devices/Iris/Single/DeviceInfo.json rename to api-test/Biometric Devices/Iris/Single/DeviceInfo.json diff --git a/apitest/Biometric Devices/Iris/Single/DigitalId.json b/api-test/Biometric Devices/Iris/Single/DigitalId.json similarity index 100% rename from apitest/Biometric Devices/Iris/Single/DigitalId.json rename to api-test/Biometric Devices/Iris/Single/DigitalId.json diff --git a/apitest/Biometric Devices/Iris/Single/Keys/mosipirissingle.p12 b/api-test/Biometric Devices/Iris/Single/Keys/mosipirissingle.p12 similarity index 100% rename from apitest/Biometric Devices/Iris/Single/Keys/mosipirissingle.p12 rename to api-test/Biometric Devices/Iris/Single/Keys/mosipirissingle.p12 diff --git a/apitest/Biometric Devices/Iris/Single/Keys/mosipirissingleftm.p12 b/api-test/Biometric Devices/Iris/Single/Keys/mosipirissingleftm.p12 similarity index 100% rename from apitest/Biometric Devices/Iris/Single/Keys/mosipirissingleftm.p12 rename to api-test/Biometric Devices/Iris/Single/Keys/mosipirissingleftm.p12 diff --git a/apitest/Biometric Devices/mosiprootca.p12 b/api-test/Biometric Devices/mosiprootca.p12 similarity index 100% rename from apitest/Biometric Devices/mosiprootca.p12 rename to api-test/Biometric Devices/mosiprootca.p12 diff --git a/apitest/Biometric Devices/mosiprootcaftm.p12 b/api-test/Biometric Devices/mosiprootcaftm.p12 similarity index 100% rename from apitest/Biometric Devices/mosiprootcaftm.p12 rename to api-test/Biometric Devices/mosiprootcaftm.p12 diff --git a/apitest/Biometric Devices/rootca.cer b/api-test/Biometric Devices/rootca.cer similarity index 100% rename from apitest/Biometric Devices/rootca.cer rename to api-test/Biometric Devices/rootca.cer diff --git a/apitest/Biometric Devices/rootcaftm.cer b/api-test/Biometric Devices/rootcaftm.cer similarity index 100% rename from apitest/Biometric Devices/rootcaftm.cer rename to api-test/Biometric Devices/rootcaftm.cer diff --git a/apitest/Dockerfile b/api-test/Dockerfile similarity index 98% rename from apitest/Dockerfile rename to api-test/Dockerfile index 5dea0ddba..88050db15 100644 --- a/apitest/Dockerfile +++ b/api-test/Dockerfile @@ -29,7 +29,7 @@ WORKDIR /home/${container_user} ENV work_dir=/home/${container_user} # Combine all necessary files into a single COPY command -COPY ./apitest/target $work_dir/ +COPY ./api-test/target $work_dir/ COPY application.properties $work_dir/ COPY ["Biometric Devices", "$work_dir/Biometric Devices"] COPY ["resource", "$work_dir/resource"] diff --git a/apitest/README.md b/api-test/README.md similarity index 100% rename from apitest/README.md rename to api-test/README.md diff --git a/apitest/application.properties b/api-test/application.properties similarity index 100% rename from apitest/application.properties rename to api-test/application.properties diff --git a/apitest/entrypoint.sh b/api-test/entrypoint.sh similarity index 100% rename from apitest/entrypoint.sh rename to api-test/entrypoint.sh diff --git a/apitest/metadata.xml b/api-test/metadata.xml similarity index 100% rename from apitest/metadata.xml rename to api-test/metadata.xml diff --git a/apitest/pom.xml b/api-test/pom.xml similarity index 100% rename from apitest/pom.xml rename to api-test/pom.xml diff --git a/apitest/resource/Profile/Automatic/Auth/0001Face.iso b/api-test/resource/Profile/Automatic/Auth/0001Face.iso similarity index 100% rename from apitest/resource/Profile/Automatic/Auth/0001Face.iso rename to api-test/resource/Profile/Automatic/Auth/0001Face.iso diff --git a/apitest/resource/Profile/Automatic/Auth/0001Left_Index.iso b/api-test/resource/Profile/Automatic/Auth/0001Left_Index.iso similarity index 100% rename from apitest/resource/Profile/Automatic/Auth/0001Left_Index.iso rename to api-test/resource/Profile/Automatic/Auth/0001Left_Index.iso diff --git a/apitest/resource/Profile/Automatic/Auth/0001Left_Index.wsq.iso b/api-test/resource/Profile/Automatic/Auth/0001Left_Index.wsq.iso similarity index 100% rename from apitest/resource/Profile/Automatic/Auth/0001Left_Index.wsq.iso rename to api-test/resource/Profile/Automatic/Auth/0001Left_Index.wsq.iso diff --git a/apitest/resource/Profile/Automatic/Auth/0001Left_Iris.iso b/api-test/resource/Profile/Automatic/Auth/0001Left_Iris.iso similarity index 100% rename from apitest/resource/Profile/Automatic/Auth/0001Left_Iris.iso rename to api-test/resource/Profile/Automatic/Auth/0001Left_Iris.iso diff --git a/apitest/resource/Profile/Automatic/Auth/0001Left_Little.iso b/api-test/resource/Profile/Automatic/Auth/0001Left_Little.iso similarity index 100% rename from apitest/resource/Profile/Automatic/Auth/0001Left_Little.iso rename to api-test/resource/Profile/Automatic/Auth/0001Left_Little.iso diff --git a/apitest/resource/Profile/Automatic/Auth/0001Left_Little.wsq.iso b/api-test/resource/Profile/Automatic/Auth/0001Left_Little.wsq.iso similarity index 100% rename from apitest/resource/Profile/Automatic/Auth/0001Left_Little.wsq.iso rename to api-test/resource/Profile/Automatic/Auth/0001Left_Little.wsq.iso diff --git a/apitest/resource/Profile/Automatic/Auth/0001Left_Middle.iso b/api-test/resource/Profile/Automatic/Auth/0001Left_Middle.iso similarity index 100% rename from apitest/resource/Profile/Automatic/Auth/0001Left_Middle.iso rename to api-test/resource/Profile/Automatic/Auth/0001Left_Middle.iso diff --git a/apitest/resource/Profile/Automatic/Auth/0001Left_Middle.wsq.iso b/api-test/resource/Profile/Automatic/Auth/0001Left_Middle.wsq.iso similarity index 100% rename from apitest/resource/Profile/Automatic/Auth/0001Left_Middle.wsq.iso rename to api-test/resource/Profile/Automatic/Auth/0001Left_Middle.wsq.iso diff --git a/apitest/resource/Profile/Automatic/Auth/0001Left_Ring.iso b/api-test/resource/Profile/Automatic/Auth/0001Left_Ring.iso similarity index 100% rename from apitest/resource/Profile/Automatic/Auth/0001Left_Ring.iso rename to api-test/resource/Profile/Automatic/Auth/0001Left_Ring.iso diff --git a/apitest/resource/Profile/Automatic/Auth/0001Left_Ring.wsq.iso b/api-test/resource/Profile/Automatic/Auth/0001Left_Ring.wsq.iso similarity index 100% rename from apitest/resource/Profile/Automatic/Auth/0001Left_Ring.wsq.iso rename to api-test/resource/Profile/Automatic/Auth/0001Left_Ring.wsq.iso diff --git a/apitest/resource/Profile/Automatic/Auth/0001Left_Thumb.iso b/api-test/resource/Profile/Automatic/Auth/0001Left_Thumb.iso similarity index 100% rename from apitest/resource/Profile/Automatic/Auth/0001Left_Thumb.iso rename to api-test/resource/Profile/Automatic/Auth/0001Left_Thumb.iso diff --git a/apitest/resource/Profile/Automatic/Auth/0001Left_Thumb.wsq.iso b/api-test/resource/Profile/Automatic/Auth/0001Left_Thumb.wsq.iso similarity index 100% rename from apitest/resource/Profile/Automatic/Auth/0001Left_Thumb.wsq.iso rename to api-test/resource/Profile/Automatic/Auth/0001Left_Thumb.wsq.iso diff --git a/apitest/resource/Profile/Automatic/Auth/0001Right_Index.iso b/api-test/resource/Profile/Automatic/Auth/0001Right_Index.iso similarity index 100% rename from apitest/resource/Profile/Automatic/Auth/0001Right_Index.iso rename to api-test/resource/Profile/Automatic/Auth/0001Right_Index.iso diff --git a/apitest/resource/Profile/Automatic/Auth/0001Right_Index.wsq.iso b/api-test/resource/Profile/Automatic/Auth/0001Right_Index.wsq.iso similarity index 100% rename from apitest/resource/Profile/Automatic/Auth/0001Right_Index.wsq.iso rename to api-test/resource/Profile/Automatic/Auth/0001Right_Index.wsq.iso diff --git a/apitest/resource/Profile/Automatic/Auth/0001Right_Iris.iso b/api-test/resource/Profile/Automatic/Auth/0001Right_Iris.iso similarity index 100% rename from apitest/resource/Profile/Automatic/Auth/0001Right_Iris.iso rename to api-test/resource/Profile/Automatic/Auth/0001Right_Iris.iso diff --git a/apitest/resource/Profile/Automatic/Auth/0001Right_Little.iso b/api-test/resource/Profile/Automatic/Auth/0001Right_Little.iso similarity index 100% rename from apitest/resource/Profile/Automatic/Auth/0001Right_Little.iso rename to api-test/resource/Profile/Automatic/Auth/0001Right_Little.iso diff --git a/apitest/resource/Profile/Automatic/Auth/0001Right_Little.wsq.iso b/api-test/resource/Profile/Automatic/Auth/0001Right_Little.wsq.iso similarity index 100% rename from apitest/resource/Profile/Automatic/Auth/0001Right_Little.wsq.iso rename to api-test/resource/Profile/Automatic/Auth/0001Right_Little.wsq.iso diff --git a/apitest/resource/Profile/Automatic/Auth/0001Right_Middle.iso b/api-test/resource/Profile/Automatic/Auth/0001Right_Middle.iso similarity index 100% rename from apitest/resource/Profile/Automatic/Auth/0001Right_Middle.iso rename to api-test/resource/Profile/Automatic/Auth/0001Right_Middle.iso diff --git a/apitest/resource/Profile/Automatic/Auth/0001Right_Middle.wsq.iso b/api-test/resource/Profile/Automatic/Auth/0001Right_Middle.wsq.iso similarity index 100% rename from apitest/resource/Profile/Automatic/Auth/0001Right_Middle.wsq.iso rename to api-test/resource/Profile/Automatic/Auth/0001Right_Middle.wsq.iso diff --git a/apitest/resource/Profile/Automatic/Auth/0001Right_Ring.iso b/api-test/resource/Profile/Automatic/Auth/0001Right_Ring.iso similarity index 100% rename from apitest/resource/Profile/Automatic/Auth/0001Right_Ring.iso rename to api-test/resource/Profile/Automatic/Auth/0001Right_Ring.iso diff --git a/apitest/resource/Profile/Automatic/Auth/0001Right_Ring.wsq.iso b/api-test/resource/Profile/Automatic/Auth/0001Right_Ring.wsq.iso similarity index 100% rename from apitest/resource/Profile/Automatic/Auth/0001Right_Ring.wsq.iso rename to api-test/resource/Profile/Automatic/Auth/0001Right_Ring.wsq.iso diff --git a/apitest/resource/Profile/Automatic/Auth/0001Right_Thumb.iso b/api-test/resource/Profile/Automatic/Auth/0001Right_Thumb.iso similarity index 100% rename from apitest/resource/Profile/Automatic/Auth/0001Right_Thumb.iso rename to api-test/resource/Profile/Automatic/Auth/0001Right_Thumb.iso diff --git a/apitest/resource/Profile/Automatic/Auth/0001Right_Thumb.wsq.iso b/api-test/resource/Profile/Automatic/Auth/0001Right_Thumb.wsq.iso similarity index 100% rename from apitest/resource/Profile/Automatic/Auth/0001Right_Thumb.wsq.iso rename to api-test/resource/Profile/Automatic/Auth/0001Right_Thumb.wsq.iso diff --git a/apitest/resource/Profile/Automatic/Registration/0001Exception_Photo.iso b/api-test/resource/Profile/Automatic/Registration/0001Exception_Photo.iso similarity index 100% rename from apitest/resource/Profile/Automatic/Registration/0001Exception_Photo.iso rename to api-test/resource/Profile/Automatic/Registration/0001Exception_Photo.iso diff --git a/apitest/resource/Profile/Automatic/Registration/0001Face.iso b/api-test/resource/Profile/Automatic/Registration/0001Face.iso similarity index 100% rename from apitest/resource/Profile/Automatic/Registration/0001Face.iso rename to api-test/resource/Profile/Automatic/Registration/0001Face.iso diff --git a/apitest/resource/Profile/Automatic/Registration/0001Left_Index.iso b/api-test/resource/Profile/Automatic/Registration/0001Left_Index.iso similarity index 100% rename from apitest/resource/Profile/Automatic/Registration/0001Left_Index.iso rename to api-test/resource/Profile/Automatic/Registration/0001Left_Index.iso diff --git a/apitest/resource/Profile/Automatic/Registration/0001Left_Iris.iso b/api-test/resource/Profile/Automatic/Registration/0001Left_Iris.iso similarity index 100% rename from apitest/resource/Profile/Automatic/Registration/0001Left_Iris.iso rename to api-test/resource/Profile/Automatic/Registration/0001Left_Iris.iso diff --git a/apitest/resource/Profile/Automatic/Registration/0001Left_Little.iso b/api-test/resource/Profile/Automatic/Registration/0001Left_Little.iso similarity index 100% rename from apitest/resource/Profile/Automatic/Registration/0001Left_Little.iso rename to api-test/resource/Profile/Automatic/Registration/0001Left_Little.iso diff --git a/apitest/resource/Profile/Automatic/Registration/0001Left_Middle.iso b/api-test/resource/Profile/Automatic/Registration/0001Left_Middle.iso similarity index 100% rename from apitest/resource/Profile/Automatic/Registration/0001Left_Middle.iso rename to api-test/resource/Profile/Automatic/Registration/0001Left_Middle.iso diff --git a/apitest/resource/Profile/Automatic/Registration/0001Left_Ring.iso b/api-test/resource/Profile/Automatic/Registration/0001Left_Ring.iso similarity index 100% rename from apitest/resource/Profile/Automatic/Registration/0001Left_Ring.iso rename to api-test/resource/Profile/Automatic/Registration/0001Left_Ring.iso diff --git a/apitest/resource/Profile/Automatic/Registration/0001Left_Thumb.iso b/api-test/resource/Profile/Automatic/Registration/0001Left_Thumb.iso similarity index 100% rename from apitest/resource/Profile/Automatic/Registration/0001Left_Thumb.iso rename to api-test/resource/Profile/Automatic/Registration/0001Left_Thumb.iso diff --git a/apitest/resource/Profile/Automatic/Registration/0001Right_Index.iso b/api-test/resource/Profile/Automatic/Registration/0001Right_Index.iso similarity index 100% rename from apitest/resource/Profile/Automatic/Registration/0001Right_Index.iso rename to api-test/resource/Profile/Automatic/Registration/0001Right_Index.iso diff --git a/apitest/resource/Profile/Automatic/Registration/0001Right_Iris.iso b/api-test/resource/Profile/Automatic/Registration/0001Right_Iris.iso similarity index 100% rename from apitest/resource/Profile/Automatic/Registration/0001Right_Iris.iso rename to api-test/resource/Profile/Automatic/Registration/0001Right_Iris.iso diff --git a/apitest/resource/Profile/Automatic/Registration/0001Right_Little.iso b/api-test/resource/Profile/Automatic/Registration/0001Right_Little.iso similarity index 100% rename from apitest/resource/Profile/Automatic/Registration/0001Right_Little.iso rename to api-test/resource/Profile/Automatic/Registration/0001Right_Little.iso diff --git a/apitest/resource/Profile/Automatic/Registration/0001Right_Middle.iso b/api-test/resource/Profile/Automatic/Registration/0001Right_Middle.iso similarity index 100% rename from apitest/resource/Profile/Automatic/Registration/0001Right_Middle.iso rename to api-test/resource/Profile/Automatic/Registration/0001Right_Middle.iso diff --git a/apitest/resource/Profile/Automatic/Registration/0001Right_Ring.iso b/api-test/resource/Profile/Automatic/Registration/0001Right_Ring.iso similarity index 100% rename from apitest/resource/Profile/Automatic/Registration/0001Right_Ring.iso rename to api-test/resource/Profile/Automatic/Registration/0001Right_Ring.iso diff --git a/apitest/resource/Profile/Automatic/Registration/0001Right_Thumb.iso b/api-test/resource/Profile/Automatic/Registration/0001Right_Thumb.iso similarity index 100% rename from apitest/resource/Profile/Automatic/Registration/0001Right_Thumb.iso rename to api-test/resource/Profile/Automatic/Registration/0001Right_Thumb.iso diff --git a/apitest/resource/Profile/Default/Auth/Face.iso b/api-test/resource/Profile/Default/Auth/Face.iso similarity index 100% rename from apitest/resource/Profile/Default/Auth/Face.iso rename to api-test/resource/Profile/Default/Auth/Face.iso diff --git a/apitest/resource/Profile/Default/Auth/Finger_UKNOWN.iso b/api-test/resource/Profile/Default/Auth/Finger_UKNOWN.iso similarity index 100% rename from apitest/resource/Profile/Default/Auth/Finger_UKNOWN.iso rename to api-test/resource/Profile/Default/Auth/Finger_UKNOWN.iso diff --git a/apitest/resource/Profile/Default/Auth/Finger_UKNOWN_wsq.iso b/api-test/resource/Profile/Default/Auth/Finger_UKNOWN_wsq.iso similarity index 100% rename from apitest/resource/Profile/Default/Auth/Finger_UKNOWN_wsq.iso rename to api-test/resource/Profile/Default/Auth/Finger_UKNOWN_wsq.iso diff --git a/apitest/resource/Profile/Default/Auth/Iris_UNKNOWN.iso b/api-test/resource/Profile/Default/Auth/Iris_UNKNOWN.iso similarity index 100% rename from apitest/resource/Profile/Default/Auth/Iris_UNKNOWN.iso rename to api-test/resource/Profile/Default/Auth/Iris_UNKNOWN.iso diff --git a/apitest/resource/Profile/Default/Auth/Left_Index.iso b/api-test/resource/Profile/Default/Auth/Left_Index.iso similarity index 100% rename from apitest/resource/Profile/Default/Auth/Left_Index.iso rename to api-test/resource/Profile/Default/Auth/Left_Index.iso diff --git a/apitest/resource/Profile/Default/Auth/Left_Index_wsq.iso b/api-test/resource/Profile/Default/Auth/Left_Index_wsq.iso similarity index 100% rename from apitest/resource/Profile/Default/Auth/Left_Index_wsq.iso rename to api-test/resource/Profile/Default/Auth/Left_Index_wsq.iso diff --git a/apitest/resource/Profile/Default/Auth/Left_Iris.iso b/api-test/resource/Profile/Default/Auth/Left_Iris.iso similarity index 100% rename from apitest/resource/Profile/Default/Auth/Left_Iris.iso rename to api-test/resource/Profile/Default/Auth/Left_Iris.iso diff --git a/apitest/resource/Profile/Default/Auth/Left_Little.iso b/api-test/resource/Profile/Default/Auth/Left_Little.iso similarity index 100% rename from apitest/resource/Profile/Default/Auth/Left_Little.iso rename to api-test/resource/Profile/Default/Auth/Left_Little.iso diff --git a/apitest/resource/Profile/Default/Auth/Left_Little_wsq.iso b/api-test/resource/Profile/Default/Auth/Left_Little_wsq.iso similarity index 100% rename from apitest/resource/Profile/Default/Auth/Left_Little_wsq.iso rename to api-test/resource/Profile/Default/Auth/Left_Little_wsq.iso diff --git a/apitest/resource/Profile/Default/Auth/Left_Middle.iso b/api-test/resource/Profile/Default/Auth/Left_Middle.iso similarity index 100% rename from apitest/resource/Profile/Default/Auth/Left_Middle.iso rename to api-test/resource/Profile/Default/Auth/Left_Middle.iso diff --git a/apitest/resource/Profile/Default/Auth/Left_Middle_wsq.iso b/api-test/resource/Profile/Default/Auth/Left_Middle_wsq.iso similarity index 100% rename from apitest/resource/Profile/Default/Auth/Left_Middle_wsq.iso rename to api-test/resource/Profile/Default/Auth/Left_Middle_wsq.iso diff --git a/apitest/resource/Profile/Default/Auth/Left_Ring.iso b/api-test/resource/Profile/Default/Auth/Left_Ring.iso similarity index 100% rename from apitest/resource/Profile/Default/Auth/Left_Ring.iso rename to api-test/resource/Profile/Default/Auth/Left_Ring.iso diff --git a/apitest/resource/Profile/Default/Auth/Left_Ring_wsq.iso b/api-test/resource/Profile/Default/Auth/Left_Ring_wsq.iso similarity index 100% rename from apitest/resource/Profile/Default/Auth/Left_Ring_wsq.iso rename to api-test/resource/Profile/Default/Auth/Left_Ring_wsq.iso diff --git a/apitest/resource/Profile/Default/Auth/Left_Thumb.iso b/api-test/resource/Profile/Default/Auth/Left_Thumb.iso similarity index 100% rename from apitest/resource/Profile/Default/Auth/Left_Thumb.iso rename to api-test/resource/Profile/Default/Auth/Left_Thumb.iso diff --git a/apitest/resource/Profile/Default/Auth/Left_Thumb_wsq.iso b/api-test/resource/Profile/Default/Auth/Left_Thumb_wsq.iso similarity index 100% rename from apitest/resource/Profile/Default/Auth/Left_Thumb_wsq.iso rename to api-test/resource/Profile/Default/Auth/Left_Thumb_wsq.iso diff --git a/apitest/resource/Profile/Default/Auth/Right_Index.iso b/api-test/resource/Profile/Default/Auth/Right_Index.iso similarity index 100% rename from apitest/resource/Profile/Default/Auth/Right_Index.iso rename to api-test/resource/Profile/Default/Auth/Right_Index.iso diff --git a/apitest/resource/Profile/Default/Auth/Right_Index_wsq.iso b/api-test/resource/Profile/Default/Auth/Right_Index_wsq.iso similarity index 100% rename from apitest/resource/Profile/Default/Auth/Right_Index_wsq.iso rename to api-test/resource/Profile/Default/Auth/Right_Index_wsq.iso diff --git a/apitest/resource/Profile/Default/Auth/Right_Iris.iso b/api-test/resource/Profile/Default/Auth/Right_Iris.iso similarity index 100% rename from apitest/resource/Profile/Default/Auth/Right_Iris.iso rename to api-test/resource/Profile/Default/Auth/Right_Iris.iso diff --git a/apitest/resource/Profile/Default/Auth/Right_Little.iso b/api-test/resource/Profile/Default/Auth/Right_Little.iso similarity index 100% rename from apitest/resource/Profile/Default/Auth/Right_Little.iso rename to api-test/resource/Profile/Default/Auth/Right_Little.iso diff --git a/apitest/resource/Profile/Default/Auth/Right_Little_wsq.iso b/api-test/resource/Profile/Default/Auth/Right_Little_wsq.iso similarity index 100% rename from apitest/resource/Profile/Default/Auth/Right_Little_wsq.iso rename to api-test/resource/Profile/Default/Auth/Right_Little_wsq.iso diff --git a/apitest/resource/Profile/Default/Auth/Right_Middle.iso b/api-test/resource/Profile/Default/Auth/Right_Middle.iso similarity index 100% rename from apitest/resource/Profile/Default/Auth/Right_Middle.iso rename to api-test/resource/Profile/Default/Auth/Right_Middle.iso diff --git a/apitest/resource/Profile/Default/Auth/Right_Middle_wsq.iso b/api-test/resource/Profile/Default/Auth/Right_Middle_wsq.iso similarity index 100% rename from apitest/resource/Profile/Default/Auth/Right_Middle_wsq.iso rename to api-test/resource/Profile/Default/Auth/Right_Middle_wsq.iso diff --git a/apitest/resource/Profile/Default/Auth/Right_Ring.iso b/api-test/resource/Profile/Default/Auth/Right_Ring.iso similarity index 100% rename from apitest/resource/Profile/Default/Auth/Right_Ring.iso rename to api-test/resource/Profile/Default/Auth/Right_Ring.iso diff --git a/apitest/resource/Profile/Default/Auth/Right_Ring_wsq.iso b/api-test/resource/Profile/Default/Auth/Right_Ring_wsq.iso similarity index 100% rename from apitest/resource/Profile/Default/Auth/Right_Ring_wsq.iso rename to api-test/resource/Profile/Default/Auth/Right_Ring_wsq.iso diff --git a/apitest/resource/Profile/Default/Auth/Right_Thumb.iso b/api-test/resource/Profile/Default/Auth/Right_Thumb.iso similarity index 100% rename from apitest/resource/Profile/Default/Auth/Right_Thumb.iso rename to api-test/resource/Profile/Default/Auth/Right_Thumb.iso diff --git a/apitest/resource/Profile/Default/Auth/Right_Thumb_wsq.iso b/api-test/resource/Profile/Default/Auth/Right_Thumb_wsq.iso similarity index 100% rename from apitest/resource/Profile/Default/Auth/Right_Thumb_wsq.iso rename to api-test/resource/Profile/Default/Auth/Right_Thumb_wsq.iso diff --git a/apitest/resource/Profile/Default/Registration/Exception_Photo.iso b/api-test/resource/Profile/Default/Registration/Exception_Photo.iso similarity index 100% rename from apitest/resource/Profile/Default/Registration/Exception_Photo.iso rename to api-test/resource/Profile/Default/Registration/Exception_Photo.iso diff --git a/apitest/resource/Profile/Default/Registration/Face.iso b/api-test/resource/Profile/Default/Registration/Face.iso similarity index 100% rename from apitest/resource/Profile/Default/Registration/Face.iso rename to api-test/resource/Profile/Default/Registration/Face.iso diff --git a/apitest/resource/Profile/Default/Registration/Left_Index.iso b/api-test/resource/Profile/Default/Registration/Left_Index.iso similarity index 100% rename from apitest/resource/Profile/Default/Registration/Left_Index.iso rename to api-test/resource/Profile/Default/Registration/Left_Index.iso diff --git a/apitest/resource/Profile/Default/Registration/Left_Iris.iso b/api-test/resource/Profile/Default/Registration/Left_Iris.iso similarity index 100% rename from apitest/resource/Profile/Default/Registration/Left_Iris.iso rename to api-test/resource/Profile/Default/Registration/Left_Iris.iso diff --git a/apitest/resource/Profile/Default/Registration/Left_Little.iso b/api-test/resource/Profile/Default/Registration/Left_Little.iso similarity index 100% rename from apitest/resource/Profile/Default/Registration/Left_Little.iso rename to api-test/resource/Profile/Default/Registration/Left_Little.iso diff --git a/apitest/resource/Profile/Default/Registration/Left_Middle.iso b/api-test/resource/Profile/Default/Registration/Left_Middle.iso similarity index 100% rename from apitest/resource/Profile/Default/Registration/Left_Middle.iso rename to api-test/resource/Profile/Default/Registration/Left_Middle.iso diff --git a/apitest/resource/Profile/Default/Registration/Left_Ring.iso b/api-test/resource/Profile/Default/Registration/Left_Ring.iso similarity index 100% rename from apitest/resource/Profile/Default/Registration/Left_Ring.iso rename to api-test/resource/Profile/Default/Registration/Left_Ring.iso diff --git a/apitest/resource/Profile/Default/Registration/Left_Thumb.iso b/api-test/resource/Profile/Default/Registration/Left_Thumb.iso similarity index 100% rename from apitest/resource/Profile/Default/Registration/Left_Thumb.iso rename to api-test/resource/Profile/Default/Registration/Left_Thumb.iso diff --git a/apitest/resource/Profile/Default/Registration/Right_Index.iso b/api-test/resource/Profile/Default/Registration/Right_Index.iso similarity index 100% rename from apitest/resource/Profile/Default/Registration/Right_Index.iso rename to api-test/resource/Profile/Default/Registration/Right_Index.iso diff --git a/apitest/resource/Profile/Default/Registration/Right_Iris.iso b/api-test/resource/Profile/Default/Registration/Right_Iris.iso similarity index 100% rename from apitest/resource/Profile/Default/Registration/Right_Iris.iso rename to api-test/resource/Profile/Default/Registration/Right_Iris.iso diff --git a/apitest/resource/Profile/Default/Registration/Right_Little.iso b/api-test/resource/Profile/Default/Registration/Right_Little.iso similarity index 100% rename from apitest/resource/Profile/Default/Registration/Right_Little.iso rename to api-test/resource/Profile/Default/Registration/Right_Little.iso diff --git a/apitest/resource/Profile/Default/Registration/Right_Middle.iso b/api-test/resource/Profile/Default/Registration/Right_Middle.iso similarity index 100% rename from apitest/resource/Profile/Default/Registration/Right_Middle.iso rename to api-test/resource/Profile/Default/Registration/Right_Middle.iso diff --git a/apitest/resource/Profile/Default/Registration/Right_Ring.iso b/api-test/resource/Profile/Default/Registration/Right_Ring.iso similarity index 100% rename from apitest/resource/Profile/Default/Registration/Right_Ring.iso rename to api-test/resource/Profile/Default/Registration/Right_Ring.iso diff --git a/apitest/resource/Profile/Default/Registration/Right_Thumb.iso b/api-test/resource/Profile/Default/Registration/Right_Thumb.iso similarity index 100% rename from apitest/resource/Profile/Default/Registration/Right_Thumb.iso rename to api-test/resource/Profile/Default/Registration/Right_Thumb.iso diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java b/api-test/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java similarity index 100% rename from apitest/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java rename to api-test/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java b/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java similarity index 100% rename from apitest/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java rename to api-test/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/DeleteWithParam.java b/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/DeleteWithParam.java similarity index 100% rename from apitest/src/main/java/io/mosip/testrig/apirig/testscripts/DeleteWithParam.java rename to api-test/src/main/java/io/mosip/testrig/apirig/testscripts/DeleteWithParam.java diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java b/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java similarity index 100% rename from apitest/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java rename to api-test/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java b/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java similarity index 100% rename from apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java rename to api-test/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithBodyWithOtpGenerate.java b/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithBodyWithOtpGenerate.java similarity index 100% rename from apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithBodyWithOtpGenerate.java rename to api-test/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithBodyWithOtpGenerate.java diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithFormDataBodyForPdfDownload.java b/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithFormDataBodyForPdfDownload.java similarity index 100% rename from apitest/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithFormDataBodyForPdfDownload.java rename to api-test/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithFormDataBodyForPdfDownload.java diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java b/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java similarity index 100% rename from apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java rename to api-test/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java b/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java similarity index 100% rename from apitest/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java rename to api-test/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java diff --git a/apitest/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java b/api-test/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java similarity index 100% rename from apitest/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java rename to api-test/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java diff --git a/apitest/src/main/resources/config/AuthPolicy.json b/api-test/src/main/resources/config/AuthPolicy.json similarity index 100% rename from apitest/src/main/resources/config/AuthPolicy.json rename to api-test/src/main/resources/config/AuthPolicy.json diff --git a/apitest/src/main/resources/config/AuthPolicy2.json b/api-test/src/main/resources/config/AuthPolicy2.json similarity index 100% rename from apitest/src/main/resources/config/AuthPolicy2.json rename to api-test/src/main/resources/config/AuthPolicy2.json diff --git a/apitest/src/main/resources/config/AuthPolicy3.json b/api-test/src/main/resources/config/AuthPolicy3.json similarity index 100% rename from apitest/src/main/resources/config/AuthPolicy3.json rename to api-test/src/main/resources/config/AuthPolicy3.json diff --git a/apitest/src/main/resources/config/AuthPolicy4.json b/api-test/src/main/resources/config/AuthPolicy4.json similarity index 100% rename from apitest/src/main/resources/config/AuthPolicy4.json rename to api-test/src/main/resources/config/AuthPolicy4.json diff --git a/apitest/src/main/resources/config/AuthPolicy5.json b/api-test/src/main/resources/config/AuthPolicy5.json similarity index 100% rename from apitest/src/main/resources/config/AuthPolicy5.json rename to api-test/src/main/resources/config/AuthPolicy5.json diff --git a/apitest/src/main/resources/config/AuthPolicy6.json b/api-test/src/main/resources/config/AuthPolicy6.json similarity index 100% rename from apitest/src/main/resources/config/AuthPolicy6.json rename to api-test/src/main/resources/config/AuthPolicy6.json diff --git a/apitest/src/main/resources/config/Authorization/OtpGeneration/request.json b/api-test/src/main/resources/config/Authorization/OtpGeneration/request.json similarity index 100% rename from apitest/src/main/resources/config/Authorization/OtpGeneration/request.json rename to api-test/src/main/resources/config/Authorization/OtpGeneration/request.json diff --git a/apitest/src/main/resources/config/Authorization/OtpValidation/request.json b/api-test/src/main/resources/config/Authorization/OtpValidation/request.json similarity index 100% rename from apitest/src/main/resources/config/Authorization/OtpValidation/request.json rename to api-test/src/main/resources/config/Authorization/OtpValidation/request.json diff --git a/apitest/src/main/resources/config/Authorization/errorUIN.json b/api-test/src/main/resources/config/Authorization/errorUIN.json similarity index 100% rename from apitest/src/main/resources/config/Authorization/errorUIN.json rename to api-test/src/main/resources/config/Authorization/errorUIN.json diff --git a/apitest/src/main/resources/config/Authorization/internalAuthRequest.json b/api-test/src/main/resources/config/Authorization/internalAuthRequest.json similarity index 100% rename from apitest/src/main/resources/config/Authorization/internalAuthRequest.json rename to api-test/src/main/resources/config/Authorization/internalAuthRequest.json diff --git a/apitest/src/main/resources/config/Authorization/keycloakTokenGeneration.json b/api-test/src/main/resources/config/Authorization/keycloakTokenGeneration.json similarity index 100% rename from apitest/src/main/resources/config/Authorization/keycloakTokenGeneration.json rename to api-test/src/main/resources/config/Authorization/keycloakTokenGeneration.json diff --git a/apitest/src/main/resources/config/Authorization/request.json b/api-test/src/main/resources/config/Authorization/request.json similarity index 100% rename from apitest/src/main/resources/config/Authorization/request.json rename to api-test/src/main/resources/config/Authorization/request.json diff --git a/apitest/src/main/resources/config/Authorization/requestIdentity.json b/api-test/src/main/resources/config/Authorization/requestIdentity.json similarity index 100% rename from apitest/src/main/resources/config/Authorization/requestIdentity.json rename to api-test/src/main/resources/config/Authorization/requestIdentity.json diff --git a/apitest/src/main/resources/config/Authorization/zoneMappingRequest.json b/api-test/src/main/resources/config/Authorization/zoneMappingRequest.json similarity index 100% rename from apitest/src/main/resources/config/Authorization/zoneMappingRequest.json rename to api-test/src/main/resources/config/Authorization/zoneMappingRequest.json diff --git a/apitest/src/main/resources/config/IDRepo.properties b/api-test/src/main/resources/config/IDRepo.properties similarity index 100% rename from apitest/src/main/resources/config/IDRepo.properties rename to api-test/src/main/resources/config/IDRepo.properties diff --git a/apitest/src/main/resources/config/IDRepo2.properties b/api-test/src/main/resources/config/IDRepo2.properties similarity index 100% rename from apitest/src/main/resources/config/IDRepo2.properties rename to api-test/src/main/resources/config/IDRepo2.properties diff --git a/apitest/src/main/resources/config/IDjson.properties b/api-test/src/main/resources/config/IDjson.properties similarity index 100% rename from apitest/src/main/resources/config/IDjson.properties rename to api-test/src/main/resources/config/IDjson.properties diff --git a/apitest/src/main/resources/config/Kernel.properties b/api-test/src/main/resources/config/Kernel.properties similarity index 99% rename from apitest/src/main/resources/config/Kernel.properties rename to api-test/src/main/resources/config/Kernel.properties index 0578664c9..f97a93f7f 100644 --- a/apitest/src/main/resources/config/Kernel.properties +++ b/api-test/src/main/resources/config/Kernel.properties @@ -263,6 +263,7 @@ admin_userName=220005 admin_zone_password=mosip123 admin_zone_userName=globaladmin mockNotificationChannel=email,phone +mountPathForReport=/home/mosip/testrig/report #------------------------- Need to check if these are used or not ------------------------# diff --git a/apitest/src/main/resources/config/UmcValidationApis.properties b/api-test/src/main/resources/config/UmcValidationApis.properties similarity index 100% rename from apitest/src/main/resources/config/UmcValidationApis.properties rename to api-test/src/main/resources/config/UmcValidationApis.properties diff --git a/apitest/src/main/resources/config/adminQueries.properties b/api-test/src/main/resources/config/adminQueries.properties similarity index 100% rename from apitest/src/main/resources/config/adminQueries.properties rename to api-test/src/main/resources/config/adminQueries.properties diff --git a/apitest/src/main/resources/config/adminTokenGeneration.properties b/api-test/src/main/resources/config/adminTokenGeneration.properties similarity index 100% rename from apitest/src/main/resources/config/adminTokenGeneration.properties rename to api-test/src/main/resources/config/adminTokenGeneration.properties diff --git a/apitest/src/main/resources/config/application.properties b/api-test/src/main/resources/config/application.properties similarity index 100% rename from apitest/src/main/resources/config/application.properties rename to api-test/src/main/resources/config/application.properties diff --git a/apitest/src/main/resources/config/bioValue.properties b/api-test/src/main/resources/config/bioValue.properties similarity index 100% rename from apitest/src/main/resources/config/bioValue.properties rename to api-test/src/main/resources/config/bioValue.properties diff --git a/apitest/src/main/resources/config/bioValueEncryptionTemplate.json b/api-test/src/main/resources/config/bioValueEncryptionTemplate.json similarity index 100% rename from apitest/src/main/resources/config/bioValueEncryptionTemplate.json rename to api-test/src/main/resources/config/bioValueEncryptionTemplate.json diff --git a/apitest/src/main/resources/config/bulkUpload.json b/api-test/src/main/resources/config/bulkUpload.json similarity index 100% rename from apitest/src/main/resources/config/bulkUpload.json rename to api-test/src/main/resources/config/bulkUpload.json diff --git a/apitest/src/main/resources/config/clientPrivateKey.txt b/api-test/src/main/resources/config/clientPrivateKey.txt similarity index 100% rename from apitest/src/main/resources/config/clientPrivateKey.txt rename to api-test/src/main/resources/config/clientPrivateKey.txt diff --git a/apitest/src/main/resources/config/errorUIN.json b/api-test/src/main/resources/config/errorUIN.json similarity index 100% rename from apitest/src/main/resources/config/errorUIN.json rename to api-test/src/main/resources/config/errorUIN.json diff --git a/apitest/src/main/resources/config/errorUINIdp.json b/api-test/src/main/resources/config/errorUINIdp.json similarity index 100% rename from apitest/src/main/resources/config/errorUINIdp.json rename to api-test/src/main/resources/config/errorUINIdp.json diff --git a/apitest/src/main/resources/config/errorUINKyc.json b/api-test/src/main/resources/config/errorUINKyc.json similarity index 100% rename from apitest/src/main/resources/config/errorUINKyc.json rename to api-test/src/main/resources/config/errorUINKyc.json diff --git a/apitest/src/main/resources/config/esignetPayload.json b/api-test/src/main/resources/config/esignetPayload.json similarity index 100% rename from apitest/src/main/resources/config/esignetPayload.json rename to api-test/src/main/resources/config/esignetPayload.json diff --git a/apitest/src/main/resources/config/folderPaths.properties b/api-test/src/main/resources/config/folderPaths.properties similarity index 100% rename from apitest/src/main/resources/config/folderPaths.properties rename to api-test/src/main/resources/config/folderPaths.properties diff --git a/apitest/src/main/resources/config/healthCheckEndpoint.properties b/api-test/src/main/resources/config/healthCheckEndpoint.properties similarity index 100% rename from apitest/src/main/resources/config/healthCheckEndpoint.properties rename to api-test/src/main/resources/config/healthCheckEndpoint.properties diff --git a/apitest/src/main/resources/config/idRepoToken.properties b/api-test/src/main/resources/config/idRepoToken.properties similarity index 100% rename from apitest/src/main/resources/config/idRepoToken.properties rename to api-test/src/main/resources/config/idRepoToken.properties diff --git a/apitest/src/main/resources/config/idaCertDataDeleteQueries.txt b/api-test/src/main/resources/config/idaCertDataDeleteQueries.txt similarity index 100% rename from apitest/src/main/resources/config/idaCertDataDeleteQueries.txt rename to api-test/src/main/resources/config/idaCertDataDeleteQueries.txt diff --git a/apitest/src/main/resources/config/keyManagerCertDataDeleteQueries.txt b/api-test/src/main/resources/config/keyManagerCertDataDeleteQueries.txt similarity index 100% rename from apitest/src/main/resources/config/keyManagerCertDataDeleteQueries.txt rename to api-test/src/main/resources/config/keyManagerCertDataDeleteQueries.txt diff --git a/apitest/src/main/resources/config/keyManagerDataDeleteQueries.txt b/api-test/src/main/resources/config/keyManagerDataDeleteQueries.txt similarity index 100% rename from apitest/src/main/resources/config/keyManagerDataDeleteQueries.txt rename to api-test/src/main/resources/config/keyManagerDataDeleteQueries.txt diff --git a/apitest/src/main/resources/config/lang-isocode-transid.csv b/api-test/src/main/resources/config/lang-isocode-transid.csv similarity index 100% rename from apitest/src/main/resources/config/lang-isocode-transid.csv rename to api-test/src/main/resources/config/lang-isocode-transid.csv diff --git a/apitest/src/main/resources/config/mapping.properties b/api-test/src/main/resources/config/mapping.properties similarity index 100% rename from apitest/src/main/resources/config/mapping.properties rename to api-test/src/main/resources/config/mapping.properties diff --git a/apitest/src/main/resources/config/masterDataCertDataDeleteQueries.txt b/api-test/src/main/resources/config/masterDataCertDataDeleteQueries.txt similarity index 100% rename from apitest/src/main/resources/config/masterDataCertDataDeleteQueries.txt rename to api-test/src/main/resources/config/masterDataCertDataDeleteQueries.txt diff --git a/apitest/src/main/resources/config/masterDataDeleteQueries.txt b/api-test/src/main/resources/config/masterDataDeleteQueries.txt similarity index 100% rename from apitest/src/main/resources/config/masterDataDeleteQueries.txt rename to api-test/src/main/resources/config/masterDataDeleteQueries.txt diff --git a/apitest/src/main/resources/config/packetProperties.properties b/api-test/src/main/resources/config/packetProperties.properties similarity index 100% rename from apitest/src/main/resources/config/packetProperties.properties rename to api-test/src/main/resources/config/packetProperties.properties diff --git a/apitest/src/main/resources/config/packetValidator.properties b/api-test/src/main/resources/config/packetValidator.properties similarity index 100% rename from apitest/src/main/resources/config/packetValidator.properties rename to api-test/src/main/resources/config/packetValidator.properties diff --git a/apitest/src/main/resources/config/partnerDemoService.properties b/api-test/src/main/resources/config/partnerDemoService.properties similarity index 100% rename from apitest/src/main/resources/config/partnerDemoService.properties rename to api-test/src/main/resources/config/partnerDemoService.properties diff --git a/apitest/src/main/resources/config/partnerQueries.properties b/api-test/src/main/resources/config/partnerQueries.properties similarity index 100% rename from apitest/src/main/resources/config/partnerQueries.properties rename to api-test/src/main/resources/config/partnerQueries.properties diff --git a/apitest/src/main/resources/config/pmsDataDeleteQueries.txt b/api-test/src/main/resources/config/pmsDataDeleteQueries.txt similarity index 100% rename from apitest/src/main/resources/config/pmsDataDeleteQueries.txt rename to api-test/src/main/resources/config/pmsDataDeleteQueries.txt diff --git a/apitest/src/main/resources/config/policyGroup.json b/api-test/src/main/resources/config/policyGroup.json similarity index 100% rename from apitest/src/main/resources/config/policyGroup.json rename to api-test/src/main/resources/config/policyGroup.json diff --git a/apitest/src/main/resources/config/prereg_SendOtp.json b/api-test/src/main/resources/config/prereg_SendOtp.json similarity index 100% rename from apitest/src/main/resources/config/prereg_SendOtp.json rename to api-test/src/main/resources/config/prereg_SendOtp.json diff --git a/apitest/src/main/resources/config/prereg_ValidateOtp.json b/api-test/src/main/resources/config/prereg_ValidateOtp.json similarity index 100% rename from apitest/src/main/resources/config/prereg_ValidateOtp.json rename to api-test/src/main/resources/config/prereg_ValidateOtp.json diff --git a/apitest/src/main/resources/config/registrationProcessorAPI.properties b/api-test/src/main/resources/config/registrationProcessorAPI.properties similarity index 100% rename from apitest/src/main/resources/config/registrationProcessorAPI.properties rename to api-test/src/main/resources/config/registrationProcessorAPI.properties diff --git a/apitest/src/main/resources/config/residentServicesQueries.properties b/api-test/src/main/resources/config/residentServicesQueries.properties similarity index 100% rename from apitest/src/main/resources/config/residentServicesQueries.properties rename to api-test/src/main/resources/config/residentServicesQueries.properties diff --git a/apitest/src/main/resources/config/sign.json b/api-test/src/main/resources/config/sign.json similarity index 100% rename from apitest/src/main/resources/config/sign.json rename to api-test/src/main/resources/config/sign.json diff --git a/apitest/src/main/resources/config/test.properties b/api-test/src/main/resources/config/test.properties similarity index 100% rename from apitest/src/main/resources/config/test.properties rename to api-test/src/main/resources/config/test.properties diff --git a/apitest/src/main/resources/config/tokenGeneration.properties b/api-test/src/main/resources/config/tokenGeneration.properties similarity index 100% rename from apitest/src/main/resources/config/tokenGeneration.properties rename to api-test/src/main/resources/config/tokenGeneration.properties diff --git a/apitest/src/main/resources/config/updatePacketProperties.properties b/api-test/src/main/resources/config/updatePacketProperties.properties similarity index 100% rename from apitest/src/main/resources/config/updatePacketProperties.properties rename to api-test/src/main/resources/config/updatePacketProperties.properties diff --git a/apitest/src/main/resources/config/valueMapping.properties b/api-test/src/main/resources/config/valueMapping.properties similarity index 100% rename from apitest/src/main/resources/config/valueMapping.properties rename to api-test/src/main/resources/config/valueMapping.properties diff --git a/apitest/src/main/resources/customize-emailable-report-template.html b/api-test/src/main/resources/customize-emailable-report-template.html similarity index 100% rename from apitest/src/main/resources/customize-emailable-report-template.html rename to api-test/src/main/resources/customize-emailable-report-template.html diff --git a/apitest/src/main/resources/dbFiles/.xml b/api-test/src/main/resources/dbFiles/.xml similarity index 100% rename from apitest/src/main/resources/dbFiles/.xml rename to api-test/src/main/resources/dbFiles/.xml diff --git a/apitest/src/main/resources/dbFiles/PMS_delete_script.txt b/api-test/src/main/resources/dbFiles/PMS_delete_script.txt similarity index 100% rename from apitest/src/main/resources/dbFiles/PMS_delete_script.txt rename to api-test/src/main/resources/dbFiles/PMS_delete_script.txt diff --git a/apitest/src/main/resources/dbFiles/dbConfig.xml b/api-test/src/main/resources/dbFiles/dbConfig.xml similarity index 100% rename from apitest/src/main/resources/dbFiles/dbConfig.xml rename to api-test/src/main/resources/dbFiles/dbConfig.xml diff --git a/apitest/src/main/resources/dbFiles/delete_Masterdata.sql b/api-test/src/main/resources/dbFiles/delete_Masterdata.sql similarity index 100% rename from apitest/src/main/resources/dbFiles/delete_Masterdata.sql rename to api-test/src/main/resources/dbFiles/delete_Masterdata.sql diff --git a/apitest/src/main/resources/krb5.conf b/api-test/src/main/resources/krb5.conf similarity index 100% rename from apitest/src/main/resources/krb5.conf rename to api-test/src/main/resources/krb5.conf diff --git a/apitest/src/main/resources/log4j.properties b/api-test/src/main/resources/log4j.properties similarity index 100% rename from apitest/src/main/resources/log4j.properties rename to api-test/src/main/resources/log4j.properties diff --git a/apitest/src/main/resources/mimoto/AddIdentity/AddIdentity.yml b/api-test/src/main/resources/mimoto/AddIdentity/AddIdentity.yml similarity index 100% rename from apitest/src/main/resources/mimoto/AddIdentity/AddIdentity.yml rename to api-test/src/main/resources/mimoto/AddIdentity/AddIdentity.yml diff --git a/apitest/src/main/resources/mimoto/AddIdentity/addIdentityResult.hbs b/api-test/src/main/resources/mimoto/AddIdentity/addIdentityResult.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/AddIdentity/addIdentityResult.hbs rename to api-test/src/main/resources/mimoto/AddIdentity/addIdentityResult.hbs diff --git a/apitest/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml b/api-test/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml similarity index 100% rename from apitest/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml rename to api-test/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml diff --git a/apitest/src/main/resources/mimoto/AidGetIndividualId/aidGetIndividualId.hbs b/api-test/src/main/resources/mimoto/AidGetIndividualId/aidGetIndividualId.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/AidGetIndividualId/aidGetIndividualId.hbs rename to api-test/src/main/resources/mimoto/AidGetIndividualId/aidGetIndividualId.hbs diff --git a/apitest/src/main/resources/mimoto/AidGetIndividualId/aidGetIndividualIdResult.hbs b/api-test/src/main/resources/mimoto/AidGetIndividualId/aidGetIndividualIdResult.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/AidGetIndividualId/aidGetIndividualIdResult.hbs rename to api-test/src/main/resources/mimoto/AidGetIndividualId/aidGetIndividualIdResult.hbs diff --git a/apitest/src/main/resources/mimoto/AuthLock/createAuthLock.hbs b/api-test/src/main/resources/mimoto/AuthLock/createAuthLock.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/AuthLock/createAuthLock.hbs rename to api-test/src/main/resources/mimoto/AuthLock/createAuthLock.hbs diff --git a/apitest/src/main/resources/mimoto/AuthLock/createAuthLock.yml b/api-test/src/main/resources/mimoto/AuthLock/createAuthLock.yml similarity index 100% rename from apitest/src/main/resources/mimoto/AuthLock/createAuthLock.yml rename to api-test/src/main/resources/mimoto/AuthLock/createAuthLock.yml diff --git a/apitest/src/main/resources/mimoto/AuthLock/createAuthLockResult.hbs b/api-test/src/main/resources/mimoto/AuthLock/createAuthLockResult.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/AuthLock/createAuthLockResult.hbs rename to api-test/src/main/resources/mimoto/AuthLock/createAuthLockResult.hbs diff --git a/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.hbs b/api-test/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.hbs rename to api-test/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.hbs diff --git a/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml b/api-test/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml similarity index 100% rename from apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml rename to api-test/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml diff --git a/apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLockResult.hbs b/api-test/src/main/resources/mimoto/AuthUnLock/createAuthUnLockResult.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/AuthUnLock/createAuthUnLockResult.hbs rename to api-test/src/main/resources/mimoto/AuthUnLock/createAuthUnLockResult.hbs diff --git a/apitest/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.hbs b/api-test/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.hbs rename to api-test/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.hbs diff --git a/apitest/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.yml b/api-test/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.yml similarity index 100% rename from apitest/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.yml rename to api-test/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.yml diff --git a/apitest/src/main/resources/mimoto/AuthenticateUser/AuthenticateUserResult.hbs b/api-test/src/main/resources/mimoto/AuthenticateUser/AuthenticateUserResult.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/AuthenticateUser/AuthenticateUserResult.hbs rename to api-test/src/main/resources/mimoto/AuthenticateUser/AuthenticateUserResult.hbs diff --git a/apitest/src/main/resources/mimoto/AuthorizationCode/AuthorizationCode.hbs b/api-test/src/main/resources/mimoto/AuthorizationCode/AuthorizationCode.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/AuthorizationCode/AuthorizationCode.hbs rename to api-test/src/main/resources/mimoto/AuthorizationCode/AuthorizationCode.hbs diff --git a/apitest/src/main/resources/mimoto/AuthorizationCode/AuthorizationCode.yml b/api-test/src/main/resources/mimoto/AuthorizationCode/AuthorizationCode.yml similarity index 100% rename from apitest/src/main/resources/mimoto/AuthorizationCode/AuthorizationCode.yml rename to api-test/src/main/resources/mimoto/AuthorizationCode/AuthorizationCode.yml diff --git a/apitest/src/main/resources/mimoto/AuthorizationCode/AuthorizationCodeResult.hbs b/api-test/src/main/resources/mimoto/AuthorizationCode/AuthorizationCodeResult.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/AuthorizationCode/AuthorizationCodeResult.hbs rename to api-test/src/main/resources/mimoto/AuthorizationCode/AuthorizationCodeResult.hbs diff --git a/apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.hbs b/api-test/src/main/resources/mimoto/BindingOtp/BindingOtp.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.hbs rename to api-test/src/main/resources/mimoto/BindingOtp/BindingOtp.hbs diff --git a/apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.yml b/api-test/src/main/resources/mimoto/BindingOtp/BindingOtp.yml similarity index 100% rename from apitest/src/main/resources/mimoto/BindingOtp/BindingOtp.yml rename to api-test/src/main/resources/mimoto/BindingOtp/BindingOtp.yml diff --git a/apitest/src/main/resources/mimoto/BindingOtp/BindingOtpResult.hbs b/api-test/src/main/resources/mimoto/BindingOtp/BindingOtpResult.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/BindingOtp/BindingOtpResult.hbs rename to api-test/src/main/resources/mimoto/BindingOtp/BindingOtpResult.hbs diff --git a/apitest/src/main/resources/mimoto/CreateVID/CreateVid.yml b/api-test/src/main/resources/mimoto/CreateVID/CreateVid.yml similarity index 100% rename from apitest/src/main/resources/mimoto/CreateVID/CreateVid.yml rename to api-test/src/main/resources/mimoto/CreateVID/CreateVid.yml diff --git a/apitest/src/main/resources/mimoto/CreateVID/createVid.hbs b/api-test/src/main/resources/mimoto/CreateVID/createVid.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/CreateVID/createVid.hbs rename to api-test/src/main/resources/mimoto/CreateVID/createVid.hbs diff --git a/apitest/src/main/resources/mimoto/CreateVID/createVidResult.hbs b/api-test/src/main/resources/mimoto/CreateVID/createVidResult.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/CreateVID/createVidResult.hbs rename to api-test/src/main/resources/mimoto/CreateVID/createVidResult.hbs diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml b/api-test/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml similarity index 100% rename from apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml rename to api-test/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatus.hbs b/api-test/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatus.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatus.hbs rename to api-test/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatus.hbs diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatusResult.hbs b/api-test/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatusResult.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatusResult.hbs rename to api-test/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatusResult.hbs diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml b/api-test/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml similarity index 100% rename from apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml rename to api-test/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/downloadCredential.hbs b/api-test/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/downloadCredential.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/downloadCredential.hbs rename to api-test/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/downloadCredential.hbs diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml b/api-test/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml similarity index 100% rename from apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml rename to api-test/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqid.hbs b/api-test/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqid.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqid.hbs rename to api-test/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqid.hbs diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqidResult.hbs b/api-test/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqidResult.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqidResult.hbs rename to api-test/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqidResult.hbs diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml b/api-test/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml similarity index 100% rename from apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml rename to api-test/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredentialResult.hbs b/api-test/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredentialResult.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredentialResult.hbs rename to api-test/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredentialResult.hbs diff --git a/apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/reqCredential.hbs b/api-test/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/reqCredential.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/reqCredential.hbs rename to api-test/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/reqCredential.hbs diff --git a/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.hbs b/api-test/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.hbs rename to api-test/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.hbs diff --git a/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml b/api-test/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml similarity index 100% rename from apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml rename to api-test/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml diff --git a/apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredentialResult.hbs b/api-test/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredentialResult.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredentialResult.hbs rename to api-test/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredentialResult.hbs diff --git a/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.hbs b/api-test/src/main/resources/mimoto/GenerateVID/createGenerateVID.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.hbs rename to api-test/src/main/resources/mimoto/GenerateVID/createGenerateVID.hbs diff --git a/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml b/api-test/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml similarity index 100% rename from apitest/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml rename to api-test/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml diff --git a/apitest/src/main/resources/mimoto/GenerateVID/createGenerateVIDResult.hbs b/api-test/src/main/resources/mimoto/GenerateVID/createGenerateVIDResult.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/GenerateVID/createGenerateVIDResult.hbs rename to api-test/src/main/resources/mimoto/GenerateVID/createGenerateVIDResult.hbs diff --git a/apitest/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.hbs b/api-test/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.hbs rename to api-test/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.hbs diff --git a/apitest/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.yml b/api-test/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.yml similarity index 100% rename from apitest/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.yml rename to api-test/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.yml diff --git a/apitest/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypesResult.hbs b/api-test/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypesResult.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypesResult.hbs rename to api-test/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypesResult.hbs diff --git a/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.hbs b/api-test/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.hbs rename to api-test/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.hbs diff --git a/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml b/api-test/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml similarity index 100% rename from apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml rename to api-test/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml diff --git a/apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuersResult.hbs b/api-test/src/main/resources/mimoto/GetAllIssuers/GetAllIssuersResult.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/GetAllIssuers/GetAllIssuersResult.hbs rename to api-test/src/main/resources/mimoto/GetAllIssuers/GetAllIssuersResult.hbs diff --git a/apitest/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.hbs b/api-test/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.hbs rename to api-test/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.hbs diff --git a/apitest/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.yml b/api-test/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.yml similarity index 100% rename from apitest/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.yml rename to api-test/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.yml diff --git a/apitest/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequestResult.hbs b/api-test/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequestResult.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequestResult.hbs rename to api-test/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequestResult.hbs diff --git a/apitest/src/main/resources/mimoto/SendOTP/SendOTP.yml b/api-test/src/main/resources/mimoto/SendOTP/SendOTP.yml similarity index 100% rename from apitest/src/main/resources/mimoto/SendOTP/SendOTP.yml rename to api-test/src/main/resources/mimoto/SendOTP/SendOTP.yml diff --git a/apitest/src/main/resources/mimoto/SendOTP/createSendOTP.hbs b/api-test/src/main/resources/mimoto/SendOTP/createSendOTP.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/SendOTP/createSendOTP.hbs rename to api-test/src/main/resources/mimoto/SendOTP/createSendOTP.hbs diff --git a/apitest/src/main/resources/mimoto/SendOTP/createSendOTP2.hbs b/api-test/src/main/resources/mimoto/SendOTP/createSendOTP2.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/SendOTP/createSendOTP2.hbs rename to api-test/src/main/resources/mimoto/SendOTP/createSendOTP2.hbs diff --git a/apitest/src/main/resources/mimoto/SendOTP/createSendOTPAsEmail.hbs b/api-test/src/main/resources/mimoto/SendOTP/createSendOTPAsEmail.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/SendOTP/createSendOTPAsEmail.hbs rename to api-test/src/main/resources/mimoto/SendOTP/createSendOTPAsEmail.hbs diff --git a/apitest/src/main/resources/mimoto/SendOTP/createSendOTPAsEmpty.hbs b/api-test/src/main/resources/mimoto/SendOTP/createSendOTPAsEmpty.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/SendOTP/createSendOTPAsEmpty.hbs rename to api-test/src/main/resources/mimoto/SendOTP/createSendOTPAsEmpty.hbs diff --git a/apitest/src/main/resources/mimoto/SendOTP/createSendOTPAsPhone.hbs b/api-test/src/main/resources/mimoto/SendOTP/createSendOTPAsPhone.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/SendOTP/createSendOTPAsPhone.hbs rename to api-test/src/main/resources/mimoto/SendOTP/createSendOTPAsPhone.hbs diff --git a/apitest/src/main/resources/mimoto/SendOTP/createSendOTPErrorResult.hbs b/api-test/src/main/resources/mimoto/SendOTP/createSendOTPErrorResult.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/SendOTP/createSendOTPErrorResult.hbs rename to api-test/src/main/resources/mimoto/SendOTP/createSendOTPErrorResult.hbs diff --git a/apitest/src/main/resources/mimoto/SendOTP/createSendOTPErrorResult2.hbs b/api-test/src/main/resources/mimoto/SendOTP/createSendOTPErrorResult2.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/SendOTP/createSendOTPErrorResult2.hbs rename to api-test/src/main/resources/mimoto/SendOTP/createSendOTPErrorResult2.hbs diff --git a/apitest/src/main/resources/mimoto/SendOTP/createSendOTPResult.hbs b/api-test/src/main/resources/mimoto/SendOTP/createSendOTPResult.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/SendOTP/createSendOTPResult.hbs rename to api-test/src/main/resources/mimoto/SendOTP/createSendOTPResult.hbs diff --git a/apitest/src/main/resources/mimoto/SendOTP/createSendOTPResultForEmail.hbs b/api-test/src/main/resources/mimoto/SendOTP/createSendOTPResultForEmail.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/SendOTP/createSendOTPResultForEmail.hbs rename to api-test/src/main/resources/mimoto/SendOTP/createSendOTPResultForEmail.hbs diff --git a/apitest/src/main/resources/mimoto/SendOTP/createSendOTPResultForPhone.hbs b/api-test/src/main/resources/mimoto/SendOTP/createSendOTPResultForPhone.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/SendOTP/createSendOTPResultForPhone.hbs rename to api-test/src/main/resources/mimoto/SendOTP/createSendOTPResultForPhone.hbs diff --git a/apitest/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml b/api-test/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml similarity index 100% rename from apitest/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml rename to api-test/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml diff --git a/apitest/src/main/resources/mimoto/SendOTPUIN/individualIdOtp.hbs b/api-test/src/main/resources/mimoto/SendOTPUIN/individualIdOtp.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/SendOTPUIN/individualIdOtp.hbs rename to api-test/src/main/resources/mimoto/SendOTPUIN/individualIdOtp.hbs diff --git a/apitest/src/main/resources/mimoto/SendOTPUIN/individualIdOtpResult.hbs b/api-test/src/main/resources/mimoto/SendOTPUIN/individualIdOtpResult.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/SendOTPUIN/individualIdOtpResult.hbs rename to api-test/src/main/resources/mimoto/SendOTPUIN/individualIdOtpResult.hbs diff --git a/apitest/src/main/resources/mimoto/SendOtpEsignet/SendOtp.hbs b/api-test/src/main/resources/mimoto/SendOtpEsignet/SendOtp.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/SendOtpEsignet/SendOtp.hbs rename to api-test/src/main/resources/mimoto/SendOtpEsignet/SendOtp.hbs diff --git a/apitest/src/main/resources/mimoto/SendOtpEsignet/SendOtpResult.hbs b/api-test/src/main/resources/mimoto/SendOtpEsignet/SendOtpResult.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/SendOtpEsignet/SendOtpResult.hbs rename to api-test/src/main/resources/mimoto/SendOtpEsignet/SendOtpResult.hbs diff --git a/apitest/src/main/resources/mimoto/SendOtpForVid/createSendOTP.hbs b/api-test/src/main/resources/mimoto/SendOtpForVid/createSendOTP.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/SendOtpForVid/createSendOTP.hbs rename to api-test/src/main/resources/mimoto/SendOtpForVid/createSendOTP.hbs diff --git a/apitest/src/main/resources/mimoto/SendOtpForVid/createSendOTP.yml b/api-test/src/main/resources/mimoto/SendOtpForVid/createSendOTP.yml similarity index 100% rename from apitest/src/main/resources/mimoto/SendOtpForVid/createSendOTP.yml rename to api-test/src/main/resources/mimoto/SendOtpForVid/createSendOTP.yml diff --git a/apitest/src/main/resources/mimoto/SendOtpForVid/createSendOTPResult.hbs b/api-test/src/main/resources/mimoto/SendOtpForVid/createSendOTPResult.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/SendOtpForVid/createSendOTPResult.hbs rename to api-test/src/main/resources/mimoto/SendOtpForVid/createSendOTPResult.hbs diff --git a/apitest/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.hbs b/api-test/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.hbs rename to api-test/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.hbs diff --git a/apitest/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml b/api-test/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml similarity index 100% rename from apitest/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml rename to api-test/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml diff --git a/apitest/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdCResult.hbs b/api-test/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdCResult.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdCResult.hbs rename to api-test/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdCResult.hbs diff --git a/apitest/src/main/resources/mimoto/SunBirdC/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.hbs b/api-test/src/main/resources/mimoto/SunBirdC/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/SunBirdC/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.hbs rename to api-test/src/main/resources/mimoto/SunBirdC/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.hbs diff --git a/apitest/src/main/resources/mimoto/SunBirdC/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.yml b/api-test/src/main/resources/mimoto/SunBirdC/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.yml similarity index 100% rename from apitest/src/main/resources/mimoto/SunBirdC/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.yml rename to api-test/src/main/resources/mimoto/SunBirdC/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.yml diff --git a/apitest/src/main/resources/mimoto/SunBirdC/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdCResult.hbs b/api-test/src/main/resources/mimoto/SunBirdC/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdCResult.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/SunBirdC/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdCResult.hbs rename to api-test/src/main/resources/mimoto/SunBirdC/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdCResult.hbs diff --git a/apitest/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.hbs b/api-test/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.hbs rename to api-test/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.hbs diff --git a/apitest/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml b/api-test/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml similarity index 100% rename from apitest/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml rename to api-test/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml diff --git a/apitest/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdCResult.hbs b/api-test/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdCResult.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdCResult.hbs rename to api-test/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdCResult.hbs diff --git a/apitest/src/main/resources/mimoto/SunBirdR/CreatePolicySunBirdR/CreatePolicySunBirdR.hbs b/api-test/src/main/resources/mimoto/SunBirdR/CreatePolicySunBirdR/CreatePolicySunBirdR.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/SunBirdR/CreatePolicySunBirdR/CreatePolicySunBirdR.hbs rename to api-test/src/main/resources/mimoto/SunBirdR/CreatePolicySunBirdR/CreatePolicySunBirdR.hbs diff --git a/apitest/src/main/resources/mimoto/SunBirdR/CreatePolicySunBirdR/CreatePolicySunBirdR.yml b/api-test/src/main/resources/mimoto/SunBirdR/CreatePolicySunBirdR/CreatePolicySunBirdR.yml similarity index 100% rename from apitest/src/main/resources/mimoto/SunBirdR/CreatePolicySunBirdR/CreatePolicySunBirdR.yml rename to api-test/src/main/resources/mimoto/SunBirdR/CreatePolicySunBirdR/CreatePolicySunBirdR.yml diff --git a/apitest/src/main/resources/mimoto/SunBirdR/CreatePolicySunBirdR/CreatePolicySunBirdRResult.hbs b/api-test/src/main/resources/mimoto/SunBirdR/CreatePolicySunBirdR/CreatePolicySunBirdRResult.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/SunBirdR/CreatePolicySunBirdR/CreatePolicySunBirdRResult.hbs rename to api-test/src/main/resources/mimoto/SunBirdR/CreatePolicySunBirdR/CreatePolicySunBirdRResult.hbs diff --git a/apitest/src/main/resources/mimoto/SunBirdR/DeletePolicySunBirdR/DeletePolicySunBirdR.hbs b/api-test/src/main/resources/mimoto/SunBirdR/DeletePolicySunBirdR/DeletePolicySunBirdR.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/SunBirdR/DeletePolicySunBirdR/DeletePolicySunBirdR.hbs rename to api-test/src/main/resources/mimoto/SunBirdR/DeletePolicySunBirdR/DeletePolicySunBirdR.hbs diff --git a/apitest/src/main/resources/mimoto/SunBirdR/DeletePolicySunBirdR/DeletePolicySunBirdR.yml b/api-test/src/main/resources/mimoto/SunBirdR/DeletePolicySunBirdR/DeletePolicySunBirdR.yml similarity index 100% rename from apitest/src/main/resources/mimoto/SunBirdR/DeletePolicySunBirdR/DeletePolicySunBirdR.yml rename to api-test/src/main/resources/mimoto/SunBirdR/DeletePolicySunBirdR/DeletePolicySunBirdR.yml diff --git a/apitest/src/main/resources/mimoto/SunBirdR/DeletePolicySunBirdR/DeletePolicySunBirdRResult.hbs b/api-test/src/main/resources/mimoto/SunBirdR/DeletePolicySunBirdR/DeletePolicySunBirdRResult.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/SunBirdR/DeletePolicySunBirdR/DeletePolicySunBirdRResult.hbs rename to api-test/src/main/resources/mimoto/SunBirdR/DeletePolicySunBirdR/DeletePolicySunBirdRResult.hbs diff --git a/apitest/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.hbs b/api-test/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.hbs rename to api-test/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.hbs diff --git a/apitest/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.yml b/api-test/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.yml similarity index 100% rename from apitest/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.yml rename to api-test/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.yml diff --git a/apitest/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdRResult.hbs b/api-test/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdRResult.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdRResult.hbs rename to api-test/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdRResult.hbs diff --git a/apitest/src/main/resources/mimoto/SunBirdR/SearchPolicySunBirdR/SearchPolicySunBirdR.hbs b/api-test/src/main/resources/mimoto/SunBirdR/SearchPolicySunBirdR/SearchPolicySunBirdR.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/SunBirdR/SearchPolicySunBirdR/SearchPolicySunBirdR.hbs rename to api-test/src/main/resources/mimoto/SunBirdR/SearchPolicySunBirdR/SearchPolicySunBirdR.hbs diff --git a/apitest/src/main/resources/mimoto/SunBirdR/SearchPolicySunBirdR/SearchPolicySunBirdR.yml b/api-test/src/main/resources/mimoto/SunBirdR/SearchPolicySunBirdR/SearchPolicySunBirdR.yml similarity index 100% rename from apitest/src/main/resources/mimoto/SunBirdR/SearchPolicySunBirdR/SearchPolicySunBirdR.yml rename to api-test/src/main/resources/mimoto/SunBirdR/SearchPolicySunBirdR/SearchPolicySunBirdR.yml diff --git a/apitest/src/main/resources/mimoto/SunBirdR/SearchPolicySunBirdR/SearchPolicySunBirdRResult.hbs b/api-test/src/main/resources/mimoto/SunBirdR/SearchPolicySunBirdR/SearchPolicySunBirdRResult.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/SunBirdR/SearchPolicySunBirdR/SearchPolicySunBirdRResult.hbs rename to api-test/src/main/resources/mimoto/SunBirdR/SearchPolicySunBirdR/SearchPolicySunBirdRResult.hbs diff --git a/apitest/src/main/resources/mimoto/ValidateOTP/ValidateOTP.hbs b/api-test/src/main/resources/mimoto/ValidateOTP/ValidateOTP.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/ValidateOTP/ValidateOTP.hbs rename to api-test/src/main/resources/mimoto/ValidateOTP/ValidateOTP.hbs diff --git a/apitest/src/main/resources/mimoto/ValidateOTP/ValidateOTP.yml b/api-test/src/main/resources/mimoto/ValidateOTP/ValidateOTP.yml similarity index 100% rename from apitest/src/main/resources/mimoto/ValidateOTP/ValidateOTP.yml rename to api-test/src/main/resources/mimoto/ValidateOTP/ValidateOTP.yml diff --git a/apitest/src/main/resources/mimoto/ValidateOTP/ValidateOTPResult.hbs b/api-test/src/main/resources/mimoto/ValidateOTP/ValidateOTPResult.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/ValidateOTP/ValidateOTPResult.hbs rename to api-test/src/main/resources/mimoto/ValidateOTP/ValidateOTPResult.hbs diff --git a/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.hbs b/api-test/src/main/resources/mimoto/WalletBinding/WalletBinding.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.hbs rename to api-test/src/main/resources/mimoto/WalletBinding/WalletBinding.hbs diff --git a/apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml b/api-test/src/main/resources/mimoto/WalletBinding/WalletBinding.yml similarity index 100% rename from apitest/src/main/resources/mimoto/WalletBinding/WalletBinding.yml rename to api-test/src/main/resources/mimoto/WalletBinding/WalletBinding.yml diff --git a/apitest/src/main/resources/mimoto/WalletBinding/WalletBindingEmptyChallenge.hbs b/api-test/src/main/resources/mimoto/WalletBinding/WalletBindingEmptyChallenge.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/WalletBinding/WalletBindingEmptyChallenge.hbs rename to api-test/src/main/resources/mimoto/WalletBinding/WalletBindingEmptyChallenge.hbs diff --git a/apitest/src/main/resources/mimoto/WalletBinding/WalletBindingResult.hbs b/api-test/src/main/resources/mimoto/WalletBinding/WalletBindingResult.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/WalletBinding/WalletBindingResult.hbs rename to api-test/src/main/resources/mimoto/WalletBinding/WalletBindingResult.hbs diff --git a/apitest/src/main/resources/mimoto/autoGeneratedId.properties b/api-test/src/main/resources/mimoto/autoGeneratedId.properties similarity index 100% rename from apitest/src/main/resources/mimoto/autoGeneratedId.properties rename to api-test/src/main/resources/mimoto/autoGeneratedId.properties diff --git a/apitest/src/main/resources/mimoto/error.hbs b/api-test/src/main/resources/mimoto/error.hbs similarity index 100% rename from apitest/src/main/resources/mimoto/error.hbs rename to api-test/src/main/resources/mimoto/error.hbs diff --git a/apitest/src/main/resources/spring.properties b/api-test/src/main/resources/spring.properties similarity index 100% rename from apitest/src/main/resources/spring.properties rename to api-test/src/main/resources/spring.properties diff --git a/apitest/src/main/resources/testCaseSkippedList.txt b/api-test/src/main/resources/testCaseSkippedList.txt similarity index 100% rename from apitest/src/main/resources/testCaseSkippedList.txt rename to api-test/src/main/resources/testCaseSkippedList.txt diff --git a/apitest/testNgXmlFiles/mimotoApi.xml b/api-test/testNgXmlFiles/mimotoApi.xml similarity index 100% rename from apitest/testNgXmlFiles/mimotoApi.xml rename to api-test/testNgXmlFiles/mimotoApi.xml From ddb09ce598858588e5d0caa5da313e3cd25be3d9 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Fri, 27 Sep 2024 17:51:34 +0530 Subject: [PATCH 245/860] [Injimob 812] expose an api to fetch list of trusted verifiers for vp sharing flow (#456) * [INJIMOB-812]: expose an api to fetch the list of all trusted verifiers Signed-off-by: Alka Prasad * [INJIMOB-812]: add ngrok url as response uri for testing Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIMOB-812]: revert the response uri back to inji verify redirect url from ngrok url in trusted verifiers file Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIMOB-812]: add unit tests for the trusted verifiers api added Signed-off-by: Alka Prasad --------- Signed-off-by: Alka Prasad Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Co-authored-by: Alka Prasad --- .../controller/VerifiersController.java | 51 +++++++++++++++ .../mosip/mimoto/dto/openid/VerifierDTO.java | 3 + .../mosip/mimoto/service/VerifierService.java | 2 + .../service/impl/VerifierServiceImpl.java | 9 +++ .../resources/mimoto-trusted-verifiers.json | 8 +++ .../controller/VerifiersControllerTest.java | 62 +++++++++++++++++++ .../mimoto/service/VerifierServiceTest.java | 16 +++++ .../io/mosip/mimoto/util/TestUtilities.java | 3 +- 8 files changed, 153 insertions(+), 1 deletion(-) create mode 100644 src/main/java/io/mosip/mimoto/controller/VerifiersController.java create mode 100644 src/test/java/io/mosip/mimoto/controller/VerifiersControllerTest.java diff --git a/src/main/java/io/mosip/mimoto/controller/VerifiersController.java b/src/main/java/io/mosip/mimoto/controller/VerifiersController.java new file mode 100644 index 000000000..2f8a0bec2 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/controller/VerifiersController.java @@ -0,0 +1,51 @@ +package io.mosip.mimoto.controller; + +import io.mosip.mimoto.core.http.ResponseWrapper; +import io.mosip.mimoto.dto.ErrorDTO; +import io.mosip.mimoto.dto.openid.VerifiersDTO; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.service.VerifierService; +import io.mosip.mimoto.util.DateUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.io.IOException; +import java.util.List; + +import static io.mosip.mimoto.exception.PlatformErrorMessages.API_NOT_ACCESSIBLE_EXCEPTION; + +@RestController +@RequestMapping(value = "/verifiers") +public class VerifiersController { + + @Autowired + VerifierService verifierService; + + private static final String ID = "mosip.mimoto.verifier"; + + private final Logger logger = LoggerFactory.getLogger(VerifiersController.class); + + @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity getAllTrustedVerifiers() { + ResponseWrapper responseWrapper = new ResponseWrapper<>(); + responseWrapper.setId(ID); + responseWrapper.setVersion("v1"); + responseWrapper.setResponsetime(DateUtils.getRequestTimeString()); + try { + responseWrapper.setResponse(verifierService.getTrustedVerifiers()); + } catch (ApiNotAccessibleException | IOException e) { + logger.error("Exception occurred while fetching trusted verifiers ", e); + responseWrapper.setErrors(List.of(new ErrorDTO(API_NOT_ACCESSIBLE_EXCEPTION.getCode(), API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); + } + + return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); + } +} diff --git a/src/main/java/io/mosip/mimoto/dto/openid/VerifierDTO.java b/src/main/java/io/mosip/mimoto/dto/openid/VerifierDTO.java index 2820c75a4..9c9d8eab3 100644 --- a/src/main/java/io/mosip/mimoto/dto/openid/VerifierDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/openid/VerifierDTO.java @@ -18,4 +18,7 @@ public class VerifierDTO { @JsonProperty("redirect_uri") List redirectUri; + + @JsonProperty("response_uri") + List responseUri; } diff --git a/src/main/java/io/mosip/mimoto/service/VerifierService.java b/src/main/java/io/mosip/mimoto/service/VerifierService.java index 4fb506651..a3c24ddda 100644 --- a/src/main/java/io/mosip/mimoto/service/VerifierService.java +++ b/src/main/java/io/mosip/mimoto/service/VerifierService.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import io.mosip.mimoto.dto.openid.VerifierDTO; +import io.mosip.mimoto.dto.openid.VerifiersDTO; import io.mosip.mimoto.dto.openid.presentation.PresentationRequestDTO; import io.mosip.mimoto.exception.ApiNotAccessibleException; @@ -11,4 +12,5 @@ public interface VerifierService { Optional getVerifierByClientId(String clientId) throws ApiNotAccessibleException, IOException; void validateVerifier(String clientId, String redirectUri) throws ApiNotAccessibleException, JsonProcessingException; + VerifiersDTO getTrustedVerifiers() throws ApiNotAccessibleException, IOException; } diff --git a/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java index 3b5493541..cecf77a5c 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java @@ -42,6 +42,14 @@ public class VerifierServiceImpl implements VerifierService { private final Logger logger = LoggerFactory.getLogger(VerifierServiceImpl.class); + public VerifiersDTO getTrustedVerifiers() throws ApiNotAccessibleException, JsonProcessingException { + String trustedVerifiersJsonValue = utilities.getTrustedVerifiersJsonValue(); + if (trustedVerifiersJsonValue == null) { + throw new ApiNotAccessibleException(); + } + return objectMapper.readValue(trustedVerifiersJsonValue, VerifiersDTO.class); + } + public Optional getVerifierByClientId(String clientId) throws ApiNotAccessibleException, JsonProcessingException { String trustedVerifiersJsonValue = utilities.getTrustedVerifiersJsonValue(); if (trustedVerifiersJsonValue == null) { @@ -50,6 +58,7 @@ public Optional getVerifierByClientId(String clientId) throws ApiNo VerifiersDTO verifiersDTO = objectMapper.readValue(trustedVerifiersJsonValue, VerifiersDTO.class); return verifiersDTO.getVerifiers().stream().filter(verifier -> verifier.getClientId().equals(clientId)).findFirst(); } + @Override public void validateVerifier(String clientId, String redirectUri) throws ApiNotAccessibleException, JsonProcessingException { logger.info("Started the presentation Validation"); diff --git a/src/main/resources/mimoto-trusted-verifiers.json b/src/main/resources/mimoto-trusted-verifiers.json index 3d35060a6..01d587c7e 100644 --- a/src/main/resources/mimoto-trusted-verifiers.json +++ b/src/main/resources/mimoto-trusted-verifiers.json @@ -5,6 +5,10 @@ "redirect_uri": [ "https://injiverify.qa-inji.mosip.net/redirect", "https://injiverify.dev2.mosip.net/redirect" + ], + "response_uri": [ + "https://injiverify.qa-inji.mosip.net/redirect", + "https://injiverify.dev2.mosip.net/redirect" ] }, { @@ -12,6 +16,10 @@ "redirect_uri": [ "https://injiverify.qa-inji.mosip.net/redirect", "https://injiverify.dev1.mosip.net/redirect" + ], + "response_uri": [ + "https://injiverify.qa-inji.mosip.net/redirect", + "https://injiverify.dev1.mosip.net/redirect" ] } ] diff --git a/src/test/java/io/mosip/mimoto/controller/VerifiersControllerTest.java b/src/test/java/io/mosip/mimoto/controller/VerifiersControllerTest.java new file mode 100644 index 000000000..c221a099c --- /dev/null +++ b/src/test/java/io/mosip/mimoto/controller/VerifiersControllerTest.java @@ -0,0 +1,62 @@ +package io.mosip.mimoto.controller; + +import io.mosip.mimoto.dto.openid.VerifierDTO; +import io.mosip.mimoto.dto.openid.VerifiersDTO; +import io.mosip.mimoto.service.impl.VerifierServiceImpl; +import org.hamcrest.Matchers; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; + +import java.util.Collections; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = VerifiersController.class) +@AutoConfigureMockMvc(addFilters = false) +@EnableWebMvc +public class VerifiersControllerTest { + + @Autowired + private MockMvc mockMvc; + + @MockBean + private VerifierServiceImpl verifierService; + + + @Test + public void getAllTrustedVerifiers() throws Exception { + VerifierDTO verifierDTO = VerifierDTO.builder() + .clientId("test-clientId") + .redirectUri(Collections.singletonList("https://test-redirectUri")) + .responseUri(Collections.singletonList("https://test-responseUri")).build(); + + VerifiersDTO trustedVerifiers = VerifiersDTO.builder() + .verifiers(Collections.singletonList(verifierDTO)).build(); + + Mockito.when(verifierService.getTrustedVerifiers()) + .thenReturn(trustedVerifiers); + + + mockMvc.perform(get("/verifiers").accept(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.response.verifiers", Matchers.everyItem( + Matchers.allOf( + Matchers.hasKey("client_id"), + Matchers.hasKey("redirect_uri"), + Matchers.hasKey("response_uri") + ) + ))); + } +} diff --git a/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java b/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java index c12386f80..da59a578e 100644 --- a/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java @@ -18,6 +18,7 @@ import org.mockito.junit.MockitoJUnitRunner; import java.io.IOException; +import java.util.Collections; import java.util.Optional; import static org.junit.Assert.*; @@ -42,6 +43,21 @@ public void setUp() throws JsonProcessingException { when(objectMapper.readValue(eq(verifiersListString), eq(VerifiersDTO.class))).thenReturn(verifiersDTO); } + @Test + public void shouldReturnAllTrustedIssuers() throws ApiNotAccessibleException, JsonProcessingException { + VerifierDTO verifierDTO = VerifierDTO.builder() + .clientId("test-clientId") + .redirectUri(Collections.singletonList("https://test-redirectUri")) + .responseUri(Collections.singletonList("https://test-responseUri")).build(); + VerifiersDTO expectedTrustedVerifiers = VerifiersDTO.builder() + .verifiers(Collections.singletonList(verifierDTO)).build(); + + VerifiersDTO actualTrustedVerifiers = verifiersService.getTrustedVerifiers(); + + assertNotNull(actualTrustedVerifiers); + assertEquals(actualTrustedVerifiers,expectedTrustedVerifiers); + } + @Test public void getCorrectVerifierWhenCorrectClientIdIsPassed() throws ApiNotAccessibleException, IOException { Optional verifierDTO = verifiersService.getVerifierByClientId("test-clientId"); diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index 4449ab23b..730fd3849 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -262,7 +262,8 @@ public static VerifiablePresentationDTO getVerifiablePresentationDTO(){ public static VerifiersDTO getTrustedVerifiers() { VerifierDTO verifierDTO = VerifierDTO.builder() .clientId("test-clientId") - .redirectUri(Collections.singletonList("https://test-redirectUri")).build(); + .redirectUri(Collections.singletonList("https://test-redirectUri")) + .responseUri(Collections.singletonList("https://test-responseUri")).build(); return VerifiersDTO.builder() .verifiers(Collections.singletonList(verifierDTO)).build(); From 939e5f744115c97e2dcdcf968fdf60e13ec4ef95 Mon Sep 17 00:00:00 2001 From: Vijay Kumar S <94220135+vijay151096@users.noreply.github.com> Date: Mon, 30 Sep 2024 12:35:10 +0530 Subject: [PATCH 246/860] [INJIWEB-866] : Inji Wellknown endpoint change, kernel auth adapter compile time deps & Read Me Updartes (#464) * [INJIWEB-723] : Stoplight folder Structuring (#442) * [INJIWEB-723] : update the folder structure for release 0.14.x Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-723] : openapi spec file renaming Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-723] : enable the sonar analysis Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-866] : ReadMe and Helm related updates Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-866] : latest wellknown update changes Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-866] : fix failing test cases Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> Co-authored-by: Swati Goel --- .github/workflows/push-trigger.yml | 28 +++++++++--------- Dockerfile | 12 ++------ README.md | 29 +++++++++---------- docker-compose/README.md | 13 +++++---- .../config/mimoto-default.properties | 27 ++++++++++------- .../config/mimoto-issuers-config.json | 12 ++++---- .../config/mimoto-trusted-verifiers.json | 10 +++++++ docker-compose/docker-compose.yml | 5 ++-- ...ec.json => api-documentation-openapi.json} | 6 ++-- .../MIMOTO.postman_collection.json | 4 +-- helm/inji-config-server/values.yaml | 6 ++++ pom.xml | 10 ++++--- .../mimoto/controller/IssuersController.java | 2 +- .../java/io/mosip/mimoto/dto/IssuerDTO.java | 4 +-- .../mosip/mimoto/dto/openid/VerifierDTO.java | 4 +-- .../io/mosip/mimoto/model/QRCodeType.java | 2 +- .../service/impl/CredentialServiceImpl.java | 4 +-- .../service/impl/DataShareServiceImpl.java | 2 +- .../service/impl/IssuersServiceImpl.java | 5 +--- .../service/impl/PresentationServiceImpl.java | 2 +- .../service/impl/VerifierServiceImpl.java | 2 +- .../resources/application-local.properties | 21 ++++---------- src/main/resources/mimoto-issuers-config.json | 12 ++++---- .../controller/IssuersControllerTest.java | 6 ++-- .../controller/VerifiersControllerTest.java | 4 +-- .../mimoto/service/IssuersServiceTest.java | 2 +- .../mimoto/service/VerifierServiceTest.java | 2 +- .../io/mosip/mimoto/util/TestUtilities.java | 6 ++-- .../resources/application-test.properties | 10 +++---- 29 files changed, 126 insertions(+), 126 deletions(-) create mode 100644 docker-compose/config/mimoto-trusted-verifiers.json rename docs/{stoplight/mimoto_openapi_spec.json => api-documentation-openapi.json} (99%) diff --git a/.github/workflows/push-trigger.yml b/.github/workflows/push-trigger.yml index e8fffc956..851856272 100644 --- a/.github/workflows/push-trigger.yml +++ b/.github/workflows/push-trigger.yml @@ -86,20 +86,20 @@ jobs: GPG_SECRET: ${{ secrets.GPG_SECRET }} SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }} -# sonar_analysis: -# needs: build-mimoto -# if: "${{ github.event_name != 'pull_request' }}" -# uses: mosip/kattu/.github/workflows/maven-sonar-analysis.yml@master-java21 -# with: -# SERVICE_LOCATION: ./ -# secrets: -# SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} -# ORG_KEY: ${{ secrets.ORG_KEY }} -# OSSRH_USER: ${{ secrets.OSSRH_USER }} -# OSSRH_SECRET: ${{ secrets.OSSRH_SECRET }} -# OSSRH_TOKEN: ${{ secrets.OSSRH_TOKEN }} -# GPG_SECRET: ${{ secrets.GPG_SECRET }} -# SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }} + sonar_analysis: + needs: build-mimoto + if: "${{ github.event_name != 'pull_request' }}" + uses: mosip/kattu/.github/workflows/maven-sonar-analysis.yml@master-java21 + with: + SERVICE_LOCATION: ./ + secrets: + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + ORG_KEY: ${{ secrets.ORG_KEY }} + OSSRH_USER: ${{ secrets.OSSRH_USER }} + OSSRH_SECRET: ${{ secrets.OSSRH_SECRET }} + OSSRH_TOKEN: ${{ secrets.OSSRH_TOKEN }} + GPG_SECRET: ${{ secrets.GPG_SECRET }} + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }} build-dockers: needs: recreate-zips diff --git a/Dockerfile b/Dockerfile index d48e1222c..21ddf0bd9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -65,12 +65,6 @@ WORKDIR /home/${container_user} ENV work_dir=/home/${container_user} -ARG loader_path=${work_dir}/additional_jars/ - -RUN mkdir -p ${loader_path} ${work_dir}/data - -ENV loader_path_env=${loader_path} - # change volume to whichever storage directory you want to use for this container. VOLUME ${work_dir}/logs ${work_dir}/Glowroot @@ -90,11 +84,9 @@ CMD if [ "$is_glowroot_env" = "present" ]; then \ unzip glowroot.zip ; \ rm -rf glowroot.zip ; \ sed -i 's//mimoto/g' glowroot/glowroot.properties ; \ - wget -q --show-progress "${iam_adapter_url_env}" -O "${loader_path_env}"/kernel-auth-adapter.jar; \ - java -jar -javaagent:glowroot/glowroot.jar -Dloader.path="${loader_path_env}" -Dspring.cloud.config.label="${spring_config_label_env}" -Dspring.profiles.active="${active_profile_env}" -Dspring.cloud.config.uri="${spring_config_url_env}" mimoto.jar ; \ + java -jar -javaagent:glowroot/glowroot.jar -Dspring.cloud.config.label="${spring_config_label_env}" -Dspring.profiles.active="${active_profile_env}" -Dspring.cloud.config.uri="${spring_config_url_env}" mimoto.jar ; \ else \ - wget -q --show-progress "${iam_adapter_url_env}" -O "${loader_path_env}"/kernel-auth-adapter.jar; \ - java -jar -Dloader.path="${loader_path_env}" -Dspring.cloud.config.label="${spring_config_label_env}" -Dspring.profiles.active="${active_profile_env}" -Dspring.cloud.config.uri="${spring_config_url_env}" mimoto.jar ; \ + java -jar -Dspring.cloud.config.label="${spring_config_label_env}" -Dspring.profiles.active="${active_profile_env}" -Dspring.cloud.config.uri="${spring_config_url_env}" mimoto.jar ; \ fi #CMD ["java","-Dspring.cloud.config.label=${spring_config_label_env}","-Dspring.profiles.active=${active_profile_env}","-Dspring.cloud.config.uri=${spring_config_url_env}","-jar","-javaagent:/home/Glowroot/glowroot.jar","mimoto.jar"] diff --git a/README.md b/README.md index 19ad88a5e..f4a55c9e7 100644 --- a/README.md +++ b/README.md @@ -9,27 +9,24 @@ This repository contains source code for backend service of Inji Mobile and Inji ## Build & run (for developers) The project requires JDK 21 -### Build & install +### without docker-compose Build & install +1. Navigate to Utilities file, uncomment the constructor at Line# 81 +2. build the jar ``` mvn clean install -Dgpg.skip=true -Dmaven.javadoc.skip=true -DskipTests=true ``` - -### Run -1. without docker-compose +3. Run following command ``` mvn spring-boot:run -Dspring.profiles.active=local ``` - -2. with docker-compose - * To simplify running mimoto in local for developers we have added [Docker Compose Setup](docker-compose/README.md). This docker-compose includes mimoto service and nginx service to server static data. - - * Follow the below steps to use custom build image in docker-compose - * - * Build the mimoto.jar - ```mvn clean install -Dgpg.skip=true -Dmaven.javadoc.skip=true -DskipTests=true``` - * Build docker image, use any image tag - ```docker build -t .``` - * Use newly built docker image in docker-compose file +### with docker-compose +1. To simplify running mimoto in local for developers we have added [Docker Compose Setup](docker-compose/README.md). This docker-compose includes mimoto service and nginx service to server static data. +2. Follow the below steps to use custom build image in docker-compose +* Build the mimoto.jar + ```mvn clean install -Dgpg.skip=true -Dmaven.javadoc.skip=true -DskipTests=true``` +* Build docker image, use any image tag + ```docker build -t .``` +* Use newly built docker image in docker-compose file ## Deployment @@ -68,4 +65,4 @@ cd helm/mimoto ## Credits -Credits listed [here](/Credits.md) \ No newline at end of file +Credits listed [here](/Credits.md) diff --git a/docker-compose/README.md b/docker-compose/README.md index a7367bfc9..f0dba6d52 100644 --- a/docker-compose/README.md +++ b/docker-compose/README.md @@ -6,19 +6,20 @@ This is the docker-compose setup to run mimoto which act as BFF for Inji mobile 1. certs folder holds the p12 file which is being created as part of OIDC client onboarding. 2. "config" folder holds the mimoto system properties file, issuer configuration and credential template. -3. "loader_path" this is mimoto mount volume from where all the runtime dependencies are loaded to classpath. -4. "docker-compose.yml" file with mimoto setup. +3. "docker-compose.yml" file with mimoto setup. ## How to run this setup? -1. Create loader_path folder in the same directory and Download the kernel auth adapter from [here](https://repo1.maven.org/maven2/io/mosip/kernel/kernel-auth-adapter/1.2.0.1/kernel-auth-adapter-1.2.0.1.jar). Copy the downloaded jar under loader_path directory. +1. Add Id providers as an issuer in mimoto-issuers-config.json -2. Add Id providers as an issuer in mimoto-issuers-config.json +2. Add verifiers clientId and redirect Uri in mimoto-trusted-verifiers.json for Online Sharing 3. Start esignet services and update esignet host references in mimoto-default.properties and mimoto-issuers-config.json -4. Create certs folder in the same directory and create OIDC client. Add key in oidckeystore.p12 and copy this file under certs folder. +4. Start the data share services and update data share host references in mimoto-default.properties. data share service helm is available in the [Inji Web Helm](https://github.com/mosip/inji-web/tree/release-0.10.x/helm/inji-web) + +5. Create certs folder in the same directory and create OIDC client. Add key in oidckeystore.p12 and copy this file under certs folder. Refer [here](https://docs.mosip.io/inji/inji-mobile-wallet/customization-overview/credential_providers) to create client * Update client_id and client_alias as per onboarding in mimoto-issuers-config.json file. @@ -30,7 +31,7 @@ Refer [here](https://docs.mosip.io/inji/inji-mobile-wallet/customization-overvie * http://localhost:8099/v1/mimoto/allProperties * http://localhost:8099/v1/mimoto/issuers * http://localhost:8099/v1/mimoto/issuers/Sunbird - * http://localhost:8099/v1/mimoto/issuers/Sunbird/credentialTypes + * http://localhost:8099/v1/mimoto/issuers/Sunbird/well-known-proxy Note: diff --git a/docker-compose/config/mimoto-default.properties b/docker-compose/config/mimoto-default.properties index fb9c47f6f..5fff4f959 100644 --- a/docker-compose/config/mimoto-default.properties +++ b/docker-compose/config/mimoto-default.properties @@ -12,17 +12,16 @@ mosip.kernel.authmanager.url=http://authmanager.kernel/ mosip.websub.url=http://websub.websub/ # START inji-default.properties - mosip.inji.allowedAuthType=demo,otp,bio-Finger,bio-Iris,bio-Face mosip.inji.allowedEkycAuthType=demo,otp,bio-Finger,bio-Iris,bio-Face mosip.inji.allowedInternalAuthType=otp,bio-Finger,bio-Iris,bio-Face -mosip.inji.faceSdkModelUrl=https://drive.google.com/u/0/uc?id=1Z8Puici9alcmH-oU-VoXlHXCagAe1ago&export=download +mosip.inji.faceSdkModelUrl=https://api.collab.mosip.net/inji # maximum number of retry for downloading vc mosip.inji.vcDownloadMaxRetry=10 # pool interval in milli seconds mosip.inji.vcDownloadPoolInterval=6000 # validate binding audience url to be sent in token -mosip.inji.audience=${mosip.api.public.url}/v1/idpbinding/validate-binding +mosip.inji.audience=ida-binding # issuer to be sent in token mosip.inji.issuer=residentapp # warning screen domain name @@ -31,15 +30,16 @@ mosip.inji.warningDomainName=${mosip.api.public.url} mosip.inji.openId4VCIDownloadVCTimeout=30000 # inji documentation url mosip.inji.aboutInjiUrl=https://docs.mosip.io/inji/inji-mobile-wallet/overview - +# minimum storage space required for making audit entry in MB +mosip.inji.minStorageRequiredForAuditEntry=2 +# minimum storage space required for downloading / receiving vc in MB +mosip.inji.minStorageRequired=2 # END inji-default.properties # START bootstrap.properties spring.cloud.config.uri=http://nginx/ -spring.profiles.active=local -spring.cloud.config.label=develop spring.cloud.config.name=mimoto,inji spring.application.name=mimoto @@ -255,6 +255,7 @@ mosip.notificationtype=SMS|EMAIL|PHONE # Configurations related to openid4vc mosip.openid.issuers=mimoto-issuers-config.json +mosip.openid.issuer.credentialSupported=/wellKnownIssuer/Insurance.json mosip.openid.htmlTemplate=credential-template.html mosip.oidc.client.assertion.type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer mosip.oidc.p12.filename=oidckeystore.p12 @@ -264,21 +265,25 @@ mosip.oidc.p12.path=certs/ #OpenId4VP related Configuration START +#File name for the mimoto trusted verifiers +mosip.openid.verifiers=mimoto-trusted-verifiers.json + #Inji Web Config -mosip.inji.web.host=https://injiweb.dev1.mosip.net -mosip.inji.web.redirect.url=${mosip.inji.web.host}/authorize +mosip.inji.web.url=https://injiweb.collab.mosip.net +mosip.inji.web.redirect.url=https://injiweb.collab.mosip.net/authorize mosip.inji.qr.data.size.limit=10000 mosip.inji.qr.code.height=650 mosip.inji.qr.code.width=650 #OVP Config -mosip.inji.ovp.qrdata.pattern=INJI_OVP://${mosip.inji.web.host}/authorize?response_type=vp_token&resource=%s&presentation_definition=%s +mosip.inji.ovp.qrdata.pattern=INJI_OVP://https://injiweb.collab.mosip.net/authorize?response_type=vp_token&resource=%s&presentation_definition=%s mosip.inji.ovp.redirect.url.pattern=%s#vp_token=%s&presentation_submission=%s mosip.inji.ovp.error.redirect.url.pattern=%s?error=%s&error_description=%s #DataShare Config -mosip.data.share.host=https://datashare-inji.dev1.mosip.net -mosip.data.share.create.url=${mosip.data.share.host}/v1/datashare/create/static-policyid/static-subscriberid +mosip.data.share.url=https://datashare-inji.collab.mosip.net +mosip.data.share.create.url=https://datashare-inji.collab.mosip.net/v1/datashare/create/static-policyid/static-subscriberid mosip.data.share.create.retry.count=3 +mosip.data.share.get.url.pattern=https://datashare-inji.collab.mosip.net/v1/datashare/get/static-policyid/static-subscriberid/* #OpenId4VP related Configuration END diff --git a/docker-compose/config/mimoto-issuers-config.json b/docker-compose/config/mimoto-issuers-config.json index 958d68ad5..ff6243994 100644 --- a/docker-compose/config/mimoto-issuers-config.json +++ b/docker-compose/config/mimoto-issuers-config.json @@ -71,9 +71,9 @@ "authorization_audience": "https://esignet-insurance.collab.mosip.net/v1/esignet/oauth/v2/token", "proxy_token_endpoint": "https://esignet-mosipid.collab.mosip.net/v1/esignet/oauth/v2/token", "client_alias": "mpartner-default-test-mosipid", - "qr_code_type": "OVPRequest", + "qr_code_type": "OnlineSharing", "enabled": "true", - ".well-known": "https://injicertify-mosipid.collab.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer" + "wellknown_endpoint": "https://injicertify-mosipid.collab.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer" }, { "credential_issuer": "StayProtected", @@ -96,9 +96,9 @@ "authorization_audience": "https://esignet-insurance.collab.mosip.net/v1/esignet/oauth/v2/token", "proxy_token_endpoint": "https://esignet-insurance.collab.mosip.net/v1/esignet/oauth/v2/token", "client_alias": "esignet-sunbird-partner", - "qr_code_type": "OVPRequest", + "qr_code_type": "OnlineSharing", "enabled": "true", - ".well-known": "https://injicertify-insurance.collab.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer" + "wellknown_endpoint": "https://injicertify-insurance.collab.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer" }, { "credential_issuer": "Mock", @@ -121,9 +121,9 @@ "authorization_audience": "https://esignet-insurance.collab.mosip.net/v1/esignet/oauth/v2/token", "proxy_token_endpoint": "https://esignet-mock.collab.mosip.net/v1/esignet/oauth/v2/token", "client_alias": "mpartner-mock-testing", - "qr_code_type": "OVPRequest", + "qr_code_type": "OnlineSharing", "enabled": "true", - ".well-known": "https://injicertify-mock.collab.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer" + "wellknown_endpoint": "https://injicertify-mock.collab.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer" } ] } diff --git a/docker-compose/config/mimoto-trusted-verifiers.json b/docker-compose/config/mimoto-trusted-verifiers.json new file mode 100644 index 000000000..0ae0f141a --- /dev/null +++ b/docker-compose/config/mimoto-trusted-verifiers.json @@ -0,0 +1,10 @@ +{ + "verifiers": [ + { + "client_id": "https://injiverify.collab.mosip.net", + "redirect_uri": [ + "https://injiverify.collab.mosip.net/redirect" + ] + } + ] +} diff --git a/docker-compose/docker-compose.yml b/docker-compose/docker-compose.yml index 53660d5d5..316278b78 100644 --- a/docker-compose/docker-compose.yml +++ b/docker-compose/docker-compose.yml @@ -8,11 +8,12 @@ services: - '80:80' volumes: - ./config/mimoto-issuers-config.json:/config/server/mimoto-issuers-config.json + - ./config/mimoto-trusted-verifiers.json:/config/server/mimoto-trusted-verifiers.json - ./config/credential-template.html:/config/server/credential-template.html - ./nginx.conf:/etc/nginx/nginx.conf mimoto-service: container_name: 'Mimoto-Service' - image: 'mosipid/mimoto:0.12.0' + image: 'mosipid/mimoto:0.14.0' user: root ports: - '8099:8099' @@ -24,7 +25,7 @@ services: volumes: - ./config/mimoto-default.properties:/home/mosip/mimoto-default.properties - ./config/mimoto-issuers-config.json:/home/mosip/mimoto-issuers-config.json + - ./config/mimoto-trusted-verifiers.json:/home/mosip/mimoto-trusted-verifiers.json - ./certs/oidckeystore.p12:/home/mosip/certs/oidckeystore.p12 - - ./loader_path/:/home/mosip/additional_jars/ depends_on: - nginx diff --git a/docs/stoplight/mimoto_openapi_spec.json b/docs/api-documentation-openapi.json similarity index 99% rename from docs/stoplight/mimoto_openapi_spec.json rename to docs/api-documentation-openapi.json index e25e60e2b..45fcb7e9a 100644 --- a/docs/stoplight/mimoto_openapi_spec.json +++ b/docs/api-documentation-openapi.json @@ -1205,7 +1205,7 @@ "additionalProp2": "string", "additionalProp3": "string" }, - ".well-known": "string" + "wellknown_endpoint": "string" } ] } @@ -1395,7 +1395,7 @@ "additionalProp2": "string", "additionalProp3": "string" }, - ".well-known": "string" + "wellknown_endpoint": "string" } ] } @@ -2076,7 +2076,7 @@ } } }, - "/issuers/{issuer-id}/.well-known": { + "/issuers/{issuer-id}/well-known-proxy": { "get": { "operationId": "getCredentialWellknown", "parameters": [ diff --git a/docs/postman-collections/MIMOTO.postman_collection.json b/docs/postman-collections/MIMOTO.postman_collection.json index f8ea3ede9..5f3af5579 100644 --- a/docs/postman-collections/MIMOTO.postman_collection.json +++ b/docs/postman-collections/MIMOTO.postman_collection.json @@ -51,14 +51,14 @@ "method": "GET", "header": [], "url": { - "raw": "{{HOST}}/issuers/StayProtected/.well-known", + "raw": "{{HOST}}/issuers/StayProtected/well-known-proxy", "host": [ "{{HOST}}" ], "path": [ "issuers", "StayProtected", - ".well-known" + "well-known-proxy" ] } }, diff --git a/helm/inji-config-server/values.yaml b/helm/inji-config-server/values.yaml index 3ee9b4811..9372604ab 100755 --- a/helm/inji-config-server/values.yaml +++ b/helm/inji-config-server/values.yaml @@ -118,3 +118,9 @@ envVariables: configMapKeyRef: key: mosip-injiweb-host name: global + + - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_INJIVERIFY_HOST + valueFrom: + configMapKeyRef: + key: mosip-injiverify-host + name: global diff --git a/pom.xml b/pom.xml index 45744040d..15be38c3a 100644 --- a/pom.xml +++ b/pom.xml @@ -418,7 +418,7 @@ io.mosip pixelpass-jar - 0.3.0-SNAPSHOT + 0.5.0-SNAPSHOT @@ -475,13 +475,14 @@ ${skipTests} false - --add-opens java.xml/jdk.xml.internal=ALL-UNNAMED + ${argLine} --add-opens java.xml/jdk.xml.internal=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/sun.security.jca=ALL-UNNAMED --add-opens java.base/sun.security.util=ALL-UNNAMED --add-opens java.base/jdk.internal.util=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.time=ALL-UNNAMED + --illegal-access=permit @@ -491,13 +492,14 @@ ${maven.jacoco.version} + jacoco-initialize prepare-agent - report - prepare-package + jacoco-site + package report diff --git a/src/main/java/io/mosip/mimoto/controller/IssuersController.java b/src/main/java/io/mosip/mimoto/controller/IssuersController.java index 689e686f5..082e8302b 100644 --- a/src/main/java/io/mosip/mimoto/controller/IssuersController.java +++ b/src/main/java/io/mosip/mimoto/controller/IssuersController.java @@ -50,7 +50,7 @@ public ResponseEntity getAllIssuers(@RequestParam(required = false, name return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); } - @GetMapping(value = "/{issuer-id}/.well-known", produces = MediaType.APPLICATION_JSON_VALUE) + @GetMapping(value = "/{issuer-id}/well-known-proxy", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity getIssuerWellknown(@PathVariable("issuer-id") String issuerId) { try { CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = issuersService.getIssuerWellknown(issuerId); diff --git a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java index 1e0a7c711..3aa1529a3 100644 --- a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java @@ -31,10 +31,8 @@ public class IssuerDTO { @NotBlank String client_id; @NotBlank - @SerializedName(".well-known") - @JsonProperty(".well-known") @Expose - String wellKnownEndpoint; + String wellknown_endpoint; @Expose @JsonInclude(NON_NULL) @NotBlank diff --git a/src/main/java/io/mosip/mimoto/dto/openid/VerifierDTO.java b/src/main/java/io/mosip/mimoto/dto/openid/VerifierDTO.java index 9c9d8eab3..5ed8d1e7c 100644 --- a/src/main/java/io/mosip/mimoto/dto/openid/VerifierDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/openid/VerifierDTO.java @@ -16,8 +16,8 @@ public class VerifierDTO { @JsonProperty("client_id") String clientId; - @JsonProperty("redirect_uri") - List redirectUri; + @JsonProperty("redirect_uris") + List redirectUris; @JsonProperty("response_uri") List responseUri; diff --git a/src/main/java/io/mosip/mimoto/model/QRCodeType.java b/src/main/java/io/mosip/mimoto/model/QRCodeType.java index ccf546f5c..9b23b2c6d 100644 --- a/src/main/java/io/mosip/mimoto/model/QRCodeType.java +++ b/src/main/java/io/mosip/mimoto/model/QRCodeType.java @@ -1,6 +1,6 @@ package io.mosip.mimoto.model; public enum QRCodeType { - OVPRequest, + OnlineSharing, EmbeddedVC, None; } diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java index 12b684dda..15b74e849 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java @@ -126,7 +126,7 @@ public ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String cred VCCredentialResponse vcCredentialResponse = downloadCredential(credentialIssuerWellKnownResponse.getCredentialEndPoint(), vcCredentialRequest, response.getAccess_token()); boolean verificationStatus = vcCredentialResponse.getCredential().getProof().getType().equals("RsaSignature2018") ? verifyCredential(vcCredentialResponse) : true; if(verificationStatus) { - String dataShareUrl = dataShareService.storeDataInDataShare(objectMapper.writeValueAsString(vcCredentialResponse)); + String dataShareUrl = QRCodeType.OnlineSharing.equals(issuerConfig.getQr_code_type()) ? dataShareService.storeDataInDataShare(objectMapper.writeValueAsString(vcCredentialResponse)) : ""; return generatePdfForVerifiableCredentials(vcCredentialResponse, issuerConfig, credentialsSupportedResponse, dataShareUrl); } throw new VCVerificationException(SIGNATURE_VERIFICATION_EXCEPTION.getErrorCode(), @@ -243,7 +243,7 @@ private Map getPdfResourceFromVcProperties(LinkedHashMap d.getLogo().getUrl()).findFirst().orElse("")); diff --git a/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java index 9fe240ea8..3674b3876 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java @@ -31,7 +31,7 @@ public class DataShareServiceImpl { @Autowired RestApiClient restApiClient; - @Value("${mosip.data.share.host}") + @Value("${mosip.data.share.url}") String dataShareHostUrl; @Value("${mosip.data.share.create.url}") diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index f23329dfd..074c7b4c5 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -18,7 +18,6 @@ import io.mosip.mimoto.util.LoggerUtil; import io.mosip.mimoto.util.RestApiClient; import io.mosip.mimoto.util.Utilities; -import jakarta.validation.ConstraintViolation; import jakarta.validation.Validator; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -27,8 +26,6 @@ import java.io.IOException; import java.util.List; import java.util.Optional; -import java.util.Set; -import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; @@ -113,7 +110,7 @@ public CredentialIssuerWellKnownResponse getIssuerWellknown(String issuerId) thr .filter(issuer -> issuer.getCredential_issuer().equals(issuerId)) .findFirst() .map(issuerDTO -> { - String wellknownResponse = restApiClient.getApi(issuerDTO.getWellKnownEndpoint(), String.class); + String wellknownResponse = restApiClient.getApi(issuerDTO.getWellknown_endpoint(), String.class); try { CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = objectMapper.readValue(wellknownResponse, CredentialIssuerWellKnownResponse.class); new CredentialIssuerWellknownResponseValidator().validate(credentialIssuerWellKnownResponse, validator); diff --git a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java index 43537f74a..005183e91 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java @@ -38,7 +38,7 @@ public class PresentationServiceImpl implements PresentationService { @Value("${mosip.inji.ovp.redirect.url.pattern}") String injiOvpRedirectURLPattern; - @Value("${mosip.data.share.host}") + @Value("${mosip.data.share.url}") String dataShareUrl; @Value("${server.tomcat.max-http-response-header-size:65536}") diff --git a/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java index cecf77a5c..42bdc95a6 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java @@ -64,7 +64,7 @@ public void validateVerifier(String clientId, String redirectUri) throws ApiNotA logger.info("Started the presentation Validation"); getVerifierByClientId(clientId).ifPresentOrElse( (verifierDTO) -> { - boolean isValidVerifier = verifierDTO.getRedirectUri().stream().anyMatch(registeredRedirectUri -> + boolean isValidVerifier = verifierDTO.getRedirectUris().stream().anyMatch(registeredRedirectUri -> urlValidator.isValid(registeredRedirectUri) && urlValidator.isValid(redirectUri) && pathMatcher.match(registeredRedirectUri, redirectUri)); diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 244feefa0..ac7ab17bd 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -186,7 +186,7 @@ mosip.iam.adapter.validate-expiry-check-rate=1440 # in minutes mosip.iam.adapter.renewal-before-expiry-interval=1440 -#this should be false if you don’t use this restTemplate true if you do +#this should be false if you don?t use this restTemplate true if you do auth.server.admin.issuer.uri=${keycloak.internal.url}/auth/realms/ mosip.iam.adapter.self-token-renewal-enable=true @@ -213,30 +213,21 @@ mosip.oidc.p12.path=certs/ #OpenId4VP related Configuration START #Inji Web Config -mosip.inji.web.host=https://injiweb.dev1.mosip.net -mosip.inji.web.redirect.url=${mosip.inji.web.host}/authorize +mosip.inji.web.url=https://injiweb.dev1.mosip.net +mosip.inji.web.redirect.url=${mosip.inji.web.url}/authorize mosip.inji.qr.data.size.limit=2000 mosip.inji.qr.code.height=650 mosip.inji.qr.code.width=650 #OVP Config -mosip.inji.ovp.qrdata.pattern=INJI_OVP://${mosip.inji.web.host}/authorize?response_type=vp_token&resource=%s&presentation_definition=%s +mosip.inji.ovp.qrdata.pattern=INJI_OVP://${mosip.inji.web.url}/authorize?response_type=vp_token&resource=%s&presentation_definition=%s mosip.inji.ovp.redirect.url.pattern=%s#vp_token=%s&presentation_submission=%s mosip.inji.ovp.error.redirect.url.pattern=%s?error=%s&error_description=%s #DataShare Config -mosip.data.share.host=http://injiweb.datashare-inji -mosip.data.share.create.url=${mosip.data.share.host}/v1/datashare/create/static-policyid/static-subscriberid +mosip.data.share.url=http://injiweb.datashare-inji +mosip.data.share.create.url=${mosip.data.share.url}/v1/datashare/create/static-policyid/static-subscriberid mosip.data.share.create.retry.count=3 mosip.data.share.get.url.pattern=http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/* #OpenId4VP related Configuration END - - - - - - - - - diff --git a/src/main/resources/mimoto-issuers-config.json b/src/main/resources/mimoto-issuers-config.json index 8af145581..86a5a4643 100644 --- a/src/main/resources/mimoto-issuers-config.json +++ b/src/main/resources/mimoto-issuers-config.json @@ -71,9 +71,9 @@ "authorization_audience": "https://esignet-mosipid.dev1.mosip.net/v1/esignet/oauth/v2/token", "proxy_token_endpoint": "https://esignet-mosipid.dev1.mosip.net/v1/esignet/oauth/v2/token", "client_alias": "mpartner-default-test-mosipid", - "qr_code_type": "OVPRequest", + "qr_code_type": "OnlineSharing", "enabled": "true", - ".well-known": "https://injicertify-mosipid.dev1.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer" + "wellknown_endpoint": "https://injicertify-mosipid.dev1.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer" }, { "credential_issuer": "StayProtected", @@ -96,9 +96,9 @@ "authorization_audience": "https://esignet-insurance.dev1.mosip.net/v1/esignet/oauth/v2/token", "proxy_token_endpoint": "https://esignet-insurance.dev1.mosip.net/v1/esignet/oauth/v2/token", "client_alias": "esignet-sunbird-partner", - "qr_code_type": "OVPRequest", + "qr_code_type": "OnlineSharing", "enabled": "true", - ".well-known": "https://injicertify-insurance.dev1.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer" + "wellknown_endpoint": "https://injicertify-insurance.dev1.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer" }, { "credential_issuer": "Mock", @@ -121,9 +121,9 @@ "authorization_audience": "https://esignet-insurance.dev1.mosip.net/v1/esignet/oauth/v2/token", "proxy_token_endpoint": "https://esignet-mock.dev1.mosip.net/v1/esignet/oauth/v2/token", "client_alias": "mpartner-mock-testing", - "qr_code_type": "OVPRequest", + "qr_code_type": "OnlineSharing", "enabled": "true", - ".well-known": "https://injicertify-mock.dev1.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer" + "wellknown_endpoint": "https://injicertify-mock.dev1.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer" } ] } diff --git a/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java b/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java index afea411ee..0fe3280c7 100644 --- a/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java @@ -71,7 +71,7 @@ public void getAllIssuersTest() throws Exception { Matchers.hasKey("credential_issuer"), Matchers.hasKey("display"), Matchers.hasKey("client_id"), - Matchers.hasKey(".well-known"), + Matchers.hasKey("wellknown_endpoint"), Matchers.not(Matchers.hasKey("redirect_url")), Matchers.not(Matchers.hasKey("authorization_endpoint")), Matchers.not(Matchers.hasKey("token_endpoint")), @@ -89,7 +89,7 @@ public void getAllIssuersTest() throws Exception { Matchers.hasKey("credential_issuer"), Matchers.hasKey("display"), Matchers.hasKey("client_id"), - Matchers.hasKey(".well-known"), + Matchers.hasKey("wellknown_endpoint"), Matchers.not(Matchers.hasKey("redirect_url")), Matchers.not(Matchers.hasKey("authorization_endpoint")), Matchers.not(Matchers.hasKey("token_endpoint")), @@ -142,7 +142,7 @@ public void getIssuerWellknownTest() throws Exception { Mockito.when(issuersService.getIssuerWellknown(issuerId)).thenReturn(credentialIssuerWellKnownResponse); - String actualResponse = mockMvc.perform(get("/issuers/" + issuerId + "/.well-known").accept(MediaType.APPLICATION_JSON_VALUE)) + String actualResponse = mockMvc.perform(get("/issuers/" + issuerId + "/well-known-proxy").accept(MediaType.APPLICATION_JSON_VALUE)) .andExpect(status().isOk()) .andReturn() .getResponse() diff --git a/src/test/java/io/mosip/mimoto/controller/VerifiersControllerTest.java b/src/test/java/io/mosip/mimoto/controller/VerifiersControllerTest.java index c221a099c..295c99137 100644 --- a/src/test/java/io/mosip/mimoto/controller/VerifiersControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/VerifiersControllerTest.java @@ -39,7 +39,7 @@ public class VerifiersControllerTest { public void getAllTrustedVerifiers() throws Exception { VerifierDTO verifierDTO = VerifierDTO.builder() .clientId("test-clientId") - .redirectUri(Collections.singletonList("https://test-redirectUri")) + .redirectUris(Collections.singletonList("https://test-redirectUri")) .responseUri(Collections.singletonList("https://test-responseUri")).build(); VerifiersDTO trustedVerifiers = VerifiersDTO.builder() @@ -54,7 +54,7 @@ public void getAllTrustedVerifiers() throws Exception { .andExpect(jsonPath("$.response.verifiers", Matchers.everyItem( Matchers.allOf( Matchers.hasKey("client_id"), - Matchers.hasKey("redirect_uri"), + Matchers.hasKey("redirect_uris"), Matchers.hasKey("response_uri") ) ))); diff --git a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java index dd71cb4ed..363212991 100644 --- a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java @@ -98,7 +98,7 @@ public void shouldReturnIssuerDataAndConfigForTheIssuerIdIfExist() throws ApiNot @Test public void shouldReturnIssuerWellknownForTheIssuerIdIfExist() throws ApiNotAccessibleException, IOException { String issuerId = "Issuer1id"; - String wellKnownUrl = "/.well-known"; + String wellKnownUrl = "/well-known-proxy"; CredentialIssuerWellKnownResponse expextedCredentialIssuerWellKnownResponse=getCredentialIssuerWellKnownResponseDto("Issuer1", Map.of("CredentialType1",getCredentialSupportedResponse("CredentialType1"))); diff --git a/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java b/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java index da59a578e..99d2d5247 100644 --- a/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java @@ -47,7 +47,7 @@ public void setUp() throws JsonProcessingException { public void shouldReturnAllTrustedIssuers() throws ApiNotAccessibleException, JsonProcessingException { VerifierDTO verifierDTO = VerifierDTO.builder() .clientId("test-clientId") - .redirectUri(Collections.singletonList("https://test-redirectUri")) + .redirectUris(Collections.singletonList("https://test-redirectUri")) .responseUri(Collections.singletonList("https://test-responseUri")).build(); VerifiersDTO expectedTrustedVerifiers = VerifiersDTO.builder() .verifiers(Collections.singletonList(verifierDTO)).build(); diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index 730fd3849..4a2db010d 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -103,7 +103,7 @@ public static IssuerDTO getIssuerDTO(String issuerName) { issuer.setCredential_issuer(issuerName + "id"); issuer.setDisplay(Collections.singletonList(display)); issuer.setClient_id("123"); - if (issuerName.equals("Issuer1")) issuer.setWellKnownEndpoint("/.well-known"); + if (issuerName.equals("Issuer1")) issuer.setWellknown_endpoint("/well-known-proxy"); else { issuer.setRedirect_uri(null); issuer.setToken_endpoint(null); @@ -125,7 +125,7 @@ public static IssuerDTO getIssuerConfigDTO(String issuerName, List nullF issuer.setDisplay(Collections.singletonList(display)); issuer.setClient_id("123"); issuer.setEnabled("true"); - if (issuerName.equals("Issuer1")) issuer.setWellKnownEndpoint("/.well-known"); + if (issuerName.equals("Issuer1")) issuer.setWellknown_endpoint("/well-known-proxy"); else { if (!nullFields.contains("redirect_uri")) issuer.setRedirect_uri("/redirection"); @@ -262,7 +262,7 @@ public static VerifiablePresentationDTO getVerifiablePresentationDTO(){ public static VerifiersDTO getTrustedVerifiers() { VerifierDTO verifierDTO = VerifierDTO.builder() .clientId("test-clientId") - .redirectUri(Collections.singletonList("https://test-redirectUri")) + .redirectUris(Collections.singletonList("https://test-redirectUri")) .responseUri(Collections.singletonList("https://test-responseUri")).build(); return VerifiersDTO.builder() diff --git a/src/test/resources/application-test.properties b/src/test/resources/application-test.properties index 8d490757e..2d49a6b00 100644 --- a/src/test/resources/application-test.properties +++ b/src/test/resources/application-test.properties @@ -24,20 +24,20 @@ mosip.oidc.p12.path=certs/ #OpenId4VP related Configuration START #Inji Web Config -mosip.inji.web.host=https://injiweb.dev1.mosip.net -mosip.inji.web.redirect.url=${mosip.inji.web.host}/authorize +mosip.inji.web.url=https://injiweb.dev1.mosip.net +mosip.inji.web.redirect.url=${mosip.inji.web.url}/authorize mosip.inji.qr.data.size.limit=10000 mosip.inji.qr.code.height=650 mosip.inji.qr.code.width=650 #OVP Config -mosip.inji.ovp.qrdata.pattern=INJI_OVP://${mosip.inji.web.host}/authorize?response_type=vp_token&resource=%s&presentation_definition=%s +mosip.inji.ovp.qrdata.pattern=INJI_OVP://${mosip.inji.web.url}/authorize?response_type=vp_token&resource=%s&presentation_definition=%s mosip.inji.ovp.redirect.url.pattern=%s#vp_token=%s&presentation_submission=%s mosip.inji.ovp.error.redirect.url.pattern=%s?error=%s&error_description=%s #DataShare Config -mosip.data.share.host=https://datashare-inji.dev1.mosip.net -mosip.data.share.create.url=${mosip.data.share.host}/v1/datashare/create/static-policyid/static-subscriberid +mosip.data.share.url=https://datashare-inji.dev1.mosip.net +mosip.data.share.create.url=${mosip.data.share.url}/v1/datashare/create/static-policyid/static-subscriberid mosip.data.share.get.url.pattern=http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/* mosip.data.share.create.retry.count=3 From 9af012caccccf2672a15df8ac23ffb6834daf509 Mon Sep 17 00:00:00 2001 From: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> Date: Thu, 3 Oct 2024 11:57:20 +0530 Subject: [PATCH 247/860] MOSIP-36077 - Restructured the config manager (#468) Signed-off-by: Mohanachandran S --- .../apirig/testrunner/MosipTestRunner.java | 22 +- .../apirig/testscripts/AddIdentity.java | 4 +- .../apirig/testscripts/DeleteWithParam.java | 14 +- .../apirig/testscripts/GetWithParam.java | 14 +- .../PostWithAutogenIdWithOtpGenerate.java | 12 +- .../PostWithBodyWithOtpGenerate.java | 6 +- .../PostWithFormDataBodyForPdfDownload.java | 4 +- .../apirig/testscripts/SimplePost.java | 22 +- .../testscripts/SimplePostForAutoGenId.java | 24 +- .../apirig/utils/MimotoConfigManager.java | 31 ++ .../main/resources/config/Kernel.properties | 286 ------------------ .../main/resources/config/mimoto.properties | 1 + 12 files changed, 92 insertions(+), 348 deletions(-) create mode 100644 api-test/src/main/java/io/mosip/testrig/apirig/utils/MimotoConfigManager.java delete mode 100644 api-test/src/main/resources/config/Kernel.properties create mode 100644 api-test/src/main/resources/config/mimoto.properties diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java b/api-test/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java index 751b63fbe..1dcb18855 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java @@ -22,16 +22,13 @@ import com.nimbusds.jose.jwk.RSAKey; import io.mosip.testrig.apirig.dataprovider.BiometricDataProvider; -import io.mosip.testrig.apirig.dbaccess.DBManager; import io.mosip.testrig.apirig.utils.AdminTestUtil; -import io.mosip.testrig.apirig.utils.CertificateGenerationUtil; import io.mosip.testrig.apirig.utils.CertsUtil; -import io.mosip.testrig.apirig.utils.ConfigManager; -import io.mosip.testrig.apirig.utils.EncryptionDecrptionUtil; import io.mosip.testrig.apirig.utils.GlobalConstants; import io.mosip.testrig.apirig.utils.JWKKeyUtil; import io.mosip.testrig.apirig.utils.KeyCloakUserAndAPIKeyGeneration; import io.mosip.testrig.apirig.utils.KeycloakUserManager; +import io.mosip.testrig.apirig.utils.MimotoConfigManager; import io.mosip.testrig.apirig.utils.MispPartnerAndLicenseKeyGeneration; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.PartnerRegistration; @@ -64,14 +61,15 @@ public static void main(String[] arg) { for (String envName : envMap.keySet()) { LOGGER.info(String.format("ENV %s = %s%n", envName, envMap.get(envName))); } + BaseTestCase.setRunContext(getRunType(), jarUrl); ExtractResource.removeOldMosipTestTestResource(); - if (checkRunType().equalsIgnoreCase("JAR")) { + if (getRunType().equalsIgnoreCase("JAR")) { ExtractResource.extractCommonResourceFromJar(); } else { ExtractResource.copyCommonResources(); } - ConfigManager.init(); - BaseTestCase.suiteSetup(); + MimotoConfigManager.init(); + BaseTestCase.suiteSetup(getRunType()); SkipTestCaseHandler.loadTestcaseToBeSkippedList("testCaseSkippedList.txt"); setLogLevels(); @@ -100,7 +98,7 @@ public static void main(String[] arg) { LOGGER.error("Exception " + e.getMessage()); } - MockSMTPListener.bTerminate = true; + OTPListener.bTerminate = true; if (BaseTestCase.isTargetEnvLTS()) HealthChecker.bTerminate = true; @@ -131,7 +129,7 @@ public static void startTestRunner() { List modulesToRun = BaseTestCase.listOfModules; String os = System.getProperty("os.name"); LOGGER.info(os); - if (checkRunType().contains("IDE") || os.toLowerCase().contains("windows")) { + if (getRunType().contains("IDE") || os.toLowerCase().contains("windows")) { homeDir = new File(System.getProperty("user.dir") + "/testNgXmlFiles"); LOGGER.info("IDE :" + homeDir); } else { @@ -179,9 +177,9 @@ public static String getGlobalResourcePath() { } String path = null; - if (checkRunType().equalsIgnoreCase("JAR")) { + if (getRunType().equalsIgnoreCase("JAR")) { path = new File(jarUrl).getParentFile().getAbsolutePath() + "/MosipTestResource/MosipTemporaryTestResource"; - } else if (checkRunType().equalsIgnoreCase("IDE")) { + } else if (getRunType().equalsIgnoreCase("IDE")) { path = new File(MosipTestRunner.class.getClassLoader().getResource("").getPath()).getAbsolutePath() + "/MosipTestResource/MosipTemporaryTestResource"; if (path.contains(GlobalConstants.TESTCLASSES)) @@ -300,7 +298,7 @@ public static Properties getproperty(String path) { * * @return */ - public static String checkRunType() { + public static String getRunType() { if (MosipTestRunner.class.getResource("MosipTestRunner.class").getPath().contains(".jar")) return "JAR"; else diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java b/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java index 744ad7513..120b08e1a 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java @@ -31,9 +31,9 @@ import io.mosip.testrig.apirig.utils.AdminTestException; import io.mosip.testrig.apirig.utils.AdminTestUtil; import io.mosip.testrig.apirig.utils.AuthenticationTestException; -import io.mosip.testrig.apirig.utils.ConfigManager; import io.mosip.testrig.apirig.utils.GlobalConstants; import io.mosip.testrig.apirig.utils.KernelAuthentication; +import io.mosip.testrig.apirig.utils.MimotoConfigManager; import io.mosip.testrig.apirig.utils.MimotoUtil; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; @@ -56,7 +56,7 @@ public String getTestName() { @BeforeClass public static void setLogLevel() { - if (ConfigManager.IsDebugEnabled()) + if (MimotoConfigManager.IsDebugEnabled()) logger.setLevel(Level.ALL); else logger.setLevel(Level.ERROR); diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/DeleteWithParam.java b/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/DeleteWithParam.java index 7592029d7..607a8761b 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/DeleteWithParam.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/DeleteWithParam.java @@ -26,8 +26,8 @@ import io.mosip.testrig.apirig.utils.AdminTestException; import io.mosip.testrig.apirig.utils.AdminTestUtil; import io.mosip.testrig.apirig.utils.AuthenticationTestException; -import io.mosip.testrig.apirig.utils.ConfigManager; import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.MimotoConfigManager; import io.mosip.testrig.apirig.utils.MimotoUtil; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; @@ -40,7 +40,7 @@ public class DeleteWithParam extends AdminTestUtil implements ITest { @BeforeClass public static void setLogLevel() { - if (ConfigManager.IsDebugEnabled()) + if (MimotoConfigManager.IsDebugEnabled()) logger.setLevel(Level.ALL); else logger.setLevel(Level.ERROR); @@ -109,7 +109,7 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad else { if (testCaseName.contains("ESignet_")) { - if (ConfigManager.isInServiceNotDeployedList(GlobalConstants.ESIGNET)) { + if (MimotoConfigManager.isInServiceNotDeployedList(GlobalConstants.ESIGNET)) { throw new SkipException("esignet is not deployed hence skipping the testcase"); } @@ -117,13 +117,13 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad if (testCaseDTO.getEndPoint().startsWith("$SUNBIRDBASEURL$") && testCaseName.contains("SunBirdR")) { - if (ConfigManager.isInServiceNotDeployedList("sunbirdrc")) + if (MimotoConfigManager.isInServiceNotDeployedList("sunbirdrc")) throw new SkipException(GlobalConstants.SERVICE_NOT_DEPLOYED_MESSAGE); - if (ConfigManager.getSunBirdBaseURL() != null && !ConfigManager.getSunBirdBaseURL().isBlank()) - tempUrl = ConfigManager.getSunBirdBaseURL(); + if (MimotoConfigManager.getSunBirdBaseURL() != null && !MimotoConfigManager.getSunBirdBaseURL().isBlank()) + tempUrl = MimotoConfigManager.getSunBirdBaseURL(); //Once sunbird registry is pointing to specific env, remove the above line and uncomment below line - //tempUrl = ApplnURI.replace(GlobalConstants.API_INTERNAL, ConfigManager.getSunBirdBaseURL()); + //tempUrl = ApplnURI.replace(GlobalConstants.API_INTERNAL, MimotoConfigManager.getSunBirdBaseURL()); testCaseDTO.setEndPoint(testCaseDTO.getEndPoint().replace("$SUNBIRDBASEURL$", "")); } diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java b/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java index 5bb9eebe1..3c3a2be68 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java @@ -28,8 +28,8 @@ import io.mosip.testrig.apirig.utils.AdminTestException; import io.mosip.testrig.apirig.utils.AdminTestUtil; import io.mosip.testrig.apirig.utils.AuthenticationTestException; -import io.mosip.testrig.apirig.utils.ConfigManager; import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.MimotoConfigManager; import io.mosip.testrig.apirig.utils.MimotoUtil; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; @@ -44,7 +44,7 @@ public class GetWithParam extends AdminTestUtil implements ITest { @BeforeClass public static void setLogLevel() { - if (ConfigManager.IsDebugEnabled()) + if (MimotoConfigManager.IsDebugEnabled()) logger.setLevel(Level.ALL); else logger.setLevel(Level.ERROR); @@ -134,7 +134,7 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad else { if (testCaseName.contains("ESignet_")) { - if (ConfigManager.isInServiceNotDeployedList(GlobalConstants.ESIGNET)) { + if (MimotoConfigManager.isInServiceNotDeployedList(GlobalConstants.ESIGNET)) { throw new SkipException("esignet is not deployed hence skipping the testcase"); } @@ -142,13 +142,13 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad if (testCaseDTO.getEndPoint().startsWith("$SUNBIRDBASEURL$") && testCaseName.contains("SunBirdR")) { - if (ConfigManager.isInServiceNotDeployedList("sunbirdrc")) + if (MimotoConfigManager.isInServiceNotDeployedList("sunbirdrc")) throw new SkipException(GlobalConstants.SERVICE_NOT_DEPLOYED_MESSAGE); - if (ConfigManager.getSunBirdBaseURL() != null && !ConfigManager.getSunBirdBaseURL().isBlank()) - tempUrl = ConfigManager.getSunBirdBaseURL(); + if (MimotoConfigManager.getSunBirdBaseURL() != null && !MimotoConfigManager.getSunBirdBaseURL().isBlank()) + tempUrl = MimotoConfigManager.getSunBirdBaseURL(); //Once sunbird registry is pointing to specific env, remove the above line and uncomment below line - //tempUrl = ApplnURI.replace(GlobalConstants.API_INTERNAL, ConfigManager.getSunBirdBaseURL()); + //tempUrl = ApplnURI.replace(GlobalConstants.API_INTERNAL, MimotoConfigManager.getSunBirdBaseURL()); testCaseDTO.setEndPoint(testCaseDTO.getEndPoint().replace("$SUNBIRDBASEURL$", "")); } diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java b/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java index 0d10b7bc7..a241f136d 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java @@ -27,8 +27,8 @@ import io.mosip.testrig.apirig.utils.AdminTestException; import io.mosip.testrig.apirig.utils.AdminTestUtil; import io.mosip.testrig.apirig.utils.AuthenticationTestException; -import io.mosip.testrig.apirig.utils.ConfigManager; import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.MimotoConfigManager; import io.mosip.testrig.apirig.utils.MimotoUtil; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; @@ -43,7 +43,7 @@ public class PostWithAutogenIdWithOtpGenerate extends AdminTestUtil implements I @BeforeClass public static void setLogLevel() { - if (ConfigManager.IsDebugEnabled()) + if (MimotoConfigManager.IsDebugEnabled()) logger.setLevel(Level.ALL); else logger.setLevel(Level.ERROR); @@ -119,10 +119,10 @@ public void test(TestCaseDTO testCaseDTO) int currLoopCount = 0; while (currLoopCount < maxLoopCount) { if (testCaseName.contains(GlobalConstants.ESIGNET_)) { - if (ConfigManager.isInServiceNotDeployedList(GlobalConstants.ESIGNET)) { + if (MimotoConfigManager.isInServiceNotDeployedList(GlobalConstants.ESIGNET)) { throw new SkipException("esignet is not deployed hence skipping the testcase"); } - String tempUrl = ConfigManager.getEsignetBaseUrl(); + String tempUrl = MimotoConfigManager.getEsignetBaseUrl(); otpResponse = postRequestWithCookieAuthHeaderAndXsrfToken(tempUrl + sendOtpEndPoint, getJsonFromTemplate(otpReqJson.toString(), sendOtpReqTemplate), COOKIENAME, testCaseDTO.getTestCaseName()); @@ -182,10 +182,10 @@ public void test(TestCaseDTO testCaseDTO) } if (testCaseName.contains(GlobalConstants.ESIGNET_)) { - if (ConfigManager.isInServiceNotDeployedList(GlobalConstants.ESIGNET)) { + if (MimotoConfigManager.isInServiceNotDeployedList(GlobalConstants.ESIGNET)) { throw new SkipException("esignet is not deployed hence skipping the testcase"); } - String tempUrl = ConfigManager.getEsignetBaseUrl(); + String tempUrl = MimotoConfigManager.getEsignetBaseUrl(); response = postRequestWithCookieAuthHeaderAndXsrfTokenForAutoGenId(tempUrl + testCaseDTO.getEndPoint(), getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()), COOKIENAME, testCaseDTO.getTestCaseName(), idKeyName); diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithBodyWithOtpGenerate.java b/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithBodyWithOtpGenerate.java index 40be66959..64b8c1e52 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithBodyWithOtpGenerate.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithBodyWithOtpGenerate.java @@ -26,8 +26,8 @@ import io.mosip.testrig.apirig.utils.AdminTestException; import io.mosip.testrig.apirig.utils.AdminTestUtil; import io.mosip.testrig.apirig.utils.AuthenticationTestException; -import io.mosip.testrig.apirig.utils.ConfigManager; import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.MimotoConfigManager; import io.mosip.testrig.apirig.utils.MimotoUtil; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; @@ -42,7 +42,7 @@ public class PostWithBodyWithOtpGenerate extends AdminTestUtil implements ITest @BeforeClass public static void setLogLevel() { - if (ConfigManager.IsDebugEnabled()) + if (MimotoConfigManager.IsDebugEnabled()) logger.setLevel(Level.ALL); else logger.setLevel(Level.ERROR); @@ -95,7 +95,7 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad testCaseDTO = MimotoUtil.isTestCaseValidForTheExecution(testCaseDTO); testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); auditLogCheck = testCaseDTO.isAuditLogCheck(); - String tempUrl = ConfigManager.getEsignetBaseUrl(); + String tempUrl = MimotoConfigManager.getEsignetBaseUrl(); JSONObject req = new JSONObject(testCaseDTO.getInput()); String otpRequest = null; String sendOtpReqTemplate = null; diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithFormDataBodyForPdfDownload.java b/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithFormDataBodyForPdfDownload.java index b743b89e1..7a1a859f6 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithFormDataBodyForPdfDownload.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithFormDataBodyForPdfDownload.java @@ -27,9 +27,9 @@ import io.mosip.testrig.apirig.utils.AdminTestException; import io.mosip.testrig.apirig.utils.AdminTestUtil; import io.mosip.testrig.apirig.utils.AuthenticationTestException; -import io.mosip.testrig.apirig.utils.ConfigManager; import io.mosip.testrig.apirig.utils.GlobalConstants; import io.mosip.testrig.apirig.utils.GlobalMethods; +import io.mosip.testrig.apirig.utils.MimotoConfigManager; import io.mosip.testrig.apirig.utils.MimotoUtil; import io.restassured.response.Response; @@ -42,7 +42,7 @@ public class PostWithFormDataBodyForPdfDownload extends AdminTestUtil implements @BeforeClass public static void setLogLevel() { - if (ConfigManager.IsDebugEnabled()) + if (MimotoConfigManager.IsDebugEnabled()) logger.setLevel(Level.ALL); else logger.setLevel(Level.ERROR); diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java b/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java index 5ce965a6d..2fed87139 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java @@ -28,8 +28,8 @@ import io.mosip.testrig.apirig.utils.AdminTestException; import io.mosip.testrig.apirig.utils.AdminTestUtil; import io.mosip.testrig.apirig.utils.AuthenticationTestException; -import io.mosip.testrig.apirig.utils.ConfigManager; import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.MimotoConfigManager; import io.mosip.testrig.apirig.utils.MimotoUtil; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; @@ -44,7 +44,7 @@ public class SimplePost extends AdminTestUtil implements ITest { @BeforeClass public static void setLogLevel() { - if (ConfigManager.IsDebugEnabled()) + if (MimotoConfigManager.IsDebugEnabled()) logger.setLevel(Level.ALL); else logger.setLevel(Level.ERROR); @@ -122,7 +122,7 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad else { if (testCaseName.contains("ESignet_")) { - if (ConfigManager.isInServiceNotDeployedList(GlobalConstants.ESIGNET)) { + if (MimotoConfigManager.isInServiceNotDeployedList(GlobalConstants.ESIGNET)) { throw new SkipException("esignet is not deployed hence skipping the testcase"); } @@ -130,13 +130,13 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad if (testCaseDTO.getEndPoint().startsWith("$SUNBIRDBASEURL$") && testCaseName.contains("SunBirdR")) { - if (ConfigManager.isInServiceNotDeployedList("sunbirdrc")) + if (MimotoConfigManager.isInServiceNotDeployedList("sunbirdrc")) throw new SkipException(GlobalConstants.SERVICE_NOT_DEPLOYED_MESSAGE); - if (ConfigManager.getSunBirdBaseURL() != null && !ConfigManager.getSunBirdBaseURL().isBlank()) - tempUrl = ConfigManager.getSunBirdBaseURL(); + if (MimotoConfigManager.getSunBirdBaseURL() != null && !MimotoConfigManager.getSunBirdBaseURL().isBlank()) + tempUrl = MimotoConfigManager.getSunBirdBaseURL(); //Once sunbird registry is pointing to specific env, remove the above line and uncomment below line - //tempUrl = ApplnURI.replace(GlobalConstants.API_INTERNAL, ConfigManager.getSunBirdBaseURL()); + //tempUrl = ApplnURI.replace(GlobalConstants.API_INTERNAL, MimotoConfigManager.getSunBirdBaseURL()); testCaseDTO.setEndPoint(testCaseDTO.getEndPoint().replace("$SUNBIRDBASEURL$", "")); response = postWithBodyAndCookie(tempUrl + testCaseDTO.getEndPoint(), inputJson, auditLogCheck, @@ -144,12 +144,12 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad } else if (testCaseDTO.getEndPoint().startsWith("$ESIGNETMOCKBASEURL$") && testCaseName.contains("SunBirdC")) { - if (ConfigManager.isInServiceNotDeployedList("sunbirdrc")) + if (MimotoConfigManager.isInServiceNotDeployedList("sunbirdrc")) throw new SkipException(GlobalConstants.SERVICE_NOT_DEPLOYED_MESSAGE); - if (ConfigManager.getEsignetMockBaseURL() != null - && !ConfigManager.getEsignetMockBaseURL().isBlank()) - tempUrl = ApplnURI.replace("api-internal.", ConfigManager.getEsignetMockBaseURL()); + if (MimotoConfigManager.getEsignetMockBaseURL() != null + && !MimotoConfigManager.getEsignetMockBaseURL().isBlank()) + tempUrl = ApplnURI.replace("api-internal.", MimotoConfigManager.getEsignetMockBaseURL()); testCaseDTO.setEndPoint(testCaseDTO.getEndPoint().replace("$ESIGNETMOCKBASEURL$", "")); response = postRequestWithCookieAuthHeaderAndXsrfToken(tempUrl + testCaseDTO.getEndPoint(), diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java b/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java index da0edf874..5fab2b305 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java @@ -29,8 +29,8 @@ import io.mosip.testrig.apirig.utils.AdminTestException; import io.mosip.testrig.apirig.utils.AdminTestUtil; import io.mosip.testrig.apirig.utils.AuthenticationTestException; -import io.mosip.testrig.apirig.utils.ConfigManager; import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.MimotoConfigManager; import io.mosip.testrig.apirig.utils.MimotoUtil; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; @@ -46,7 +46,7 @@ public class SimplePostForAutoGenId extends AdminTestUtil implements ITest { @BeforeClass public static void setLogLevel() { - if (ConfigManager.IsDebugEnabled()) + if (MimotoConfigManager.IsDebugEnabled()) logger.setLevel(Level.ALL); else logger.setLevel(Level.ERROR); @@ -131,28 +131,28 @@ public void test(TestCaseDTO testCaseDTO) } } else { if (testCaseName.contains("ESignet_")) { - if (ConfigManager.isInServiceNotDeployedList(GlobalConstants.ESIGNET)) { + if (MimotoConfigManager.isInServiceNotDeployedList(GlobalConstants.ESIGNET)) { throw new SkipException("esignet is not deployed hence skipping the testcase"); } - String tempUrl = ConfigManager.getEsignetBaseUrl(); + String tempUrl = MimotoConfigManager.getEsignetBaseUrl(); if (testCaseDTO.getEndPoint().startsWith("$ESIGNETMOCKBASEURL$") && testCaseName.contains("SunBirdC")) { - if (ConfigManager.isInServiceNotDeployedList("sunbirdrc")) + if (MimotoConfigManager.isInServiceNotDeployedList("sunbirdrc")) throw new SkipException(GlobalConstants.SERVICE_NOT_DEPLOYED_MESSAGE); - if (ConfigManager.getEsignetMockBaseURL() != null - && !ConfigManager.getEsignetMockBaseURL().isBlank()) - tempUrl = ApplnURI.replace("api-internal.", ConfigManager.getEsignetMockBaseURL()); + if (MimotoConfigManager.getEsignetMockBaseURL() != null + && !MimotoConfigManager.getEsignetMockBaseURL().isBlank()) + tempUrl = ApplnURI.replace("api-internal.", MimotoConfigManager.getEsignetMockBaseURL()); testCaseDTO.setEndPoint(testCaseDTO.getEndPoint().replace("$ESIGNETMOCKBASEURL$", "")); } else if (testCaseDTO.getEndPoint().startsWith("$SUNBIRDBASEURL$") && testCaseName.contains("SunBirdR")) { - if (ConfigManager.isInServiceNotDeployedList("sunbirdrc")) + if (MimotoConfigManager.isInServiceNotDeployedList("sunbirdrc")) throw new SkipException(GlobalConstants.SERVICE_NOT_DEPLOYED_MESSAGE); - if (ConfigManager.getSunBirdBaseURL() != null && !ConfigManager.getSunBirdBaseURL().isBlank()) - tempUrl = ConfigManager.getSunBirdBaseURL(); + if (MimotoConfigManager.getSunBirdBaseURL() != null && !MimotoConfigManager.getSunBirdBaseURL().isBlank()) + tempUrl = MimotoConfigManager.getSunBirdBaseURL(); //Once sunbird registry is pointing to specific env, remove the above line and uncomment below line - //tempUrl = ApplnURI.replace(GlobalConstants.API_INTERNAL, ConfigManager.getSunBirdBaseURL()); + //tempUrl = ApplnURI.replace(GlobalConstants.API_INTERNAL, MimotoConfigManager.getSunBirdBaseURL()); testCaseDTO.setEndPoint(testCaseDTO.getEndPoint().replace("$SUNBIRDBASEURL$", "")); } diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/utils/MimotoConfigManager.java b/api-test/src/main/java/io/mosip/testrig/apirig/utils/MimotoConfigManager.java new file mode 100644 index 000000000..437724248 --- /dev/null +++ b/api-test/src/main/java/io/mosip/testrig/apirig/utils/MimotoConfigManager.java @@ -0,0 +1,31 @@ +package io.mosip.testrig.apirig.utils; + +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; + +import org.apache.log4j.Logger; + +import io.mosip.testrig.apirig.testrunner.MosipTestRunner; + +public class MimotoConfigManager extends ConfigManager{ + private static final Logger LOGGER = Logger.getLogger(MimotoConfigManager.class); + + public static void init() { + Map moduleSpecificPropertiesMap = new HashMap<>(); + // Load scope specific properties + try { + String path = MosipTestRunner.getGlobalResourcePath() + "/config/mimoto.properties"; + Properties props = getproperties(path); + // Convert Properties to Map and add to moduleSpecificPropertiesMap + for (String key : props.stringPropertyNames()) { + moduleSpecificPropertiesMap.put(key, props.getProperty(key)); + } + } catch (Exception e) { + LOGGER.error(e.getMessage()); + } + // Add module specific properties as well. + init(moduleSpecificPropertiesMap); + } + +} diff --git a/api-test/src/main/resources/config/Kernel.properties b/api-test/src/main/resources/config/Kernel.properties deleted file mode 100644 index f97a93f7f..000000000 --- a/api-test/src/main/resources/config/Kernel.properties +++ /dev/null @@ -1,286 +0,0 @@ -#---------------------------------- End point(s) relative URLs ----------------------------------# -authclientidsecretkeyURL = /v1/authmanager/authenticate/clientidsecretkey -authentication = /v1/authmanager/authenticate/useridPwd -authenticationInternal = /v1/authmanager/authenticate/internal/useridPwd -keycloakAuthURL = /auth/realms/master/protocol/openid-connect/token -auditLog_URI = /v1/auditmanager/audits -CentetMachineUserMappingToMasterData_uri = /v1/masterdata/registrationmachineusermappings -EmailNotification_URI = /v1/notifier/email/send -encrypt_URI = /v1/keymanager/encrypt -decrypt_URI = /v1/keymanager/decrypt -FetchApplication_URI = /v1/masterdata/applicationtypes -FetchApplication_lang_URI = /v1/masterdata/applicationtypes/{langcode} -FetchApplication_id_lang_URI = /v1/masterdata/applicationtypes/{code}/{langcode} -FetchBiometricAttribute_URI = /v1/masterdata/getbiometricattributesbyauthtype/{langcode}/{biometrictypecode} -FetchBiometricAuthType_URI = /v1/masterdata/biometrictypes/{langcode} -FetchBlackListedWord_URI = /v1/masterdata/blacklistedwords/{langcode} -FetchDevice_lang_URI = /v1/masterdata/devices/{languagecode} -FetchDevice_id_lang_URI = /v1/masterdata/devices/{languagecode}/{deviceType} -FetchDeviceSpec_lang_URI = /v1/masterdata/devicespecifications/{langcode} -FetchDeviceSpec_id_lang_URI = /v1/masterdata/devicespecifications/{langcode}/{devicetypecode} -FetchDocumentCategories_URI = /v1/masterdata/documentcategories/{langcode} -FetchDocumentCategories_URI_withcodeAndLangCode = /v1/masterdata/documentcategories/{code}/{langcode} -FetchDocumentTypes_URI = /v1/masterdata/documenttypes/{documentcategorycode}/{langcode} -FetchGenderType_URI = /v1/masterdata/gendertypes -FetchGenderType_id_lang_URI = /v1/masterdata/gendertypes/{langcode} -FetchHolidays_URI = /v1/masterdata/holidays -FetchHolidays_id_URI = /v1/masterdata/holidays/{holidayid} -FetchHolidays_id_lang_URI = /v1/masterdata/holidays/{holidayid}/{langcode} -FetchIDlist_URI = /v1/masterdata/idtypes/{langcode} -FetchLocationHierarchy_URI_withlangCode = /v1/masterdata/locations/{langcode} -FetchLocationHierarchy_URI_locationcode = /v1/masterdata/locations/{locationcode}/{langcode} -FetchLocationHierarchy_URI_hierarchyname = /v1/masterdata/locations/locationhierarchy/{hierarchyname} -FetchMachine_URI = /v1/masterdata/machines -FetchMachine_lang_URI = /v1/masterdata/machines/{langcode} -FetchMachine_id_lang_URI = /v1/masterdata/machines/{id}/{langcode} -FetchMachineHistory_URI = /v1/masterdata/machineshistories/{id}/{langcode}/{effdatetimes} -FetchRegCent_URI = /v1/masterdata/registrationcenters -FetchRegCent_id_lang_URI = /v1/masterdata/registrationcenters/{id}/{langcode} -FetchRegCent_loc_lang_URI = /v1/masterdata/getlocspecificregistrationcenters/{langcode}/{locationcode} -FetchRegCent_hir_name_lang_URI = /v1/masterdata/registrationcenters/{langcode}/{hierarchylevel}/{name} -FetchRegCent_prox_lang_URI = /v1/masterdata/getcoordinatespecificregistrationcenters/{langcode}/{longitude}/{latitude}/{proximitydistance} -FetchRegCentHistory_URI = /v1/masterdata/registrationcentershistory/{registrationCenterId}/{langcode}/{effectiveDate} -FetchRegCentHolidays_URI = /v1/masterdata/getregistrationcenterholidays/{langcode}/{registrationcenterid}/{year} -FetchRegcentMachUserMaping_URI = /v1/masterdata/getregistrationmachineusermappinghistory/{effdtimes}/{registrationcenterid}/{machineid}/{userid} -FetchRejectionReason_URI = /v1/masterdata/packetrejectionreasons/{reasoncategorycode}/{langcode} -FetchTemplate_URI = /v1/masterdata/templates -FetchTemplate_lang_URI = /v1/masterdata/templates/{langcode} -FetchTemplate_id_lang_URI = /v1/masterdata/templates/{langcode}/{templatetypecode} -FetchTitle_URI = /v1/masterdata/title/{langcode} -fetchAllTemplate = /v1/masterdata/templates/templatetypecodes/{code} -getApplicantType = /v1/masterdata/getApplicantType -fetchDeviceHistory = /v1/masterdata/deviceshistories/{id}/{langcode}/{effdatetimes} -getDocType_DocCatByAppID = /v1/masterdata/applicanttype/{applicantId}/languages -getDocTypeDocCatByLangCode = /v1/masterdata/validdocuments/{languagecode} -fetchImmediateChildLocation = /v1/masterdata/locations/immediatechildren/{locationcode}/{langcode} -getIndividualType = /v1/masterdata/individualtypes -getRoles = /v1/syncdata/roles -fetchRegCenter = /v1/masterdata/registrationcenters/validate/{id}/{langCode}/{timestamp} -fetchRegistrationCenterDeviceHistory = /v1/masterdata/registrationcenterdevicehistory/{regcenterid}/{deviceid}/{effdatetimes} -getusersBasedOnRegCenter = /v1/syncdata/userdetails/{regid} -licKeyGenerator = /v1/keymanager/license/generate -mapLicenseKey = /v1/keymanager/license/permission -fetchmapLicenseKey = /v1/keymanager/license/permission -OTPGeneration = /v1/otpmanager/otp/generate -OTPValidation = /v1/otpmanager/otp/validate -otpNotifier = /v1/otpnotifier/otp/send -RIDGenerator_URI = /v1/ridgenerator/generate/rid/{centerid}/{machineid} -SmsNotification_URI = /v1/notifier/sms/send -syncConf = /v1/syncdata/configs -fetchIncrementalData = /v1/syncjob/syncjobdef -fetchmasterdata = /v1/syncdata/masterdata -fetchmasterdatawithRID = /v1/syncdata/masterdata/{regcenterId} -SyncPublicKeyToRegClient_URI = /v1/keymanager/publickey/ -uingenerator = /v1/idgenerator/uin -validateGenderByName = /v1/masterdata/gendertypes/validate/{gendername} -validateLocationByName = /v1/masterdata/locations/validate/{locationname} -tokenIdGenerator_URI = /v1/keymanager/{uin}/{partnercode} -getRIDByUserId = /v1/authmanager/rid/{appid}/{userid} -syncMdatawithKeyIndex = /v1/syncdata/clientsettings -syncMdatawithRegCentIdKeyIndex = /v1/syncdata/clientsettings/{regcenterid} -uploadpublickey = /v1/syncdata/tpm/publickey -getUserHistory = /v1/masterdata/users/{id}/{eff_dtimes} -sendOtp = /v1/authmanager/authenticate/sendotp -useridOTP = /v1/authmanager/authenticate/useridOTP -preregSendOtp = /preregistration/v1/login/sendOtp/langcode -preregValidateOtp = /preregistration/v1/login/validateOtp -zoneMappingUrl = /v1/masterdata/zoneuser -zoneNameUrl = /v1/masterdata/zones/zonename -zoneMappingActivateUrl = /v1/masterdata/zoneuser -userCenterMappingUrl = /v1/masterdata/usercentermapping -bulkUploadUrl = /v1/admin/bulkupload -currentUserURI=/#/uinservices/viewhistory -actuatorEndpoint=/resident/v1/actuator/env -actuatorAdminEndpoint=/v1/admin/actuator/env -actuatorMasterDataEndpoint=/v1/masterdata/actuator/env -actuatorIDAEndpoint=/idauthentication/v1/actuator/env -actuatorRegprocEndpoint=/registrationprocessor/v1/registrationtransaction/actuator/env -actuatorEsignetEndpoint=/v1/esignet/actuator/env -tokenEndpoint=/v1/esignet/oauth/token -auditActuatorEndpoint=/v1/auditmanager/actuator/info -validateBindingEndpoint=ida-binding -esignetWellKnownEndPoint=/v1/esignet/oidc/.well-known/openid-configuration -signupSettingsEndPoint=/v1/signup/settings -actuatorMimotoEndpoint=/v1/mimoto/actuator/env -esignetActuatorPropertySection=esignet-default.properties - - - -#---------------------------------- APP IDs ----------------------------------# -#-- When test rig ran in docker, these values dervied from the environment ---# -mosip_pms_app_id = partner -mosip_resident_app_id = resident -mosip_idrepo_app_id = idrepo -mosip_regclient_app_id = registrationclient -mosip_hotlist_app_id = hotlist -mosip_regprocclient_app_id = regproc -AuthAppID = resident -mosip_admin_app_id = admin - - - -#---------------------------------- Client IDs -------------------------------# -#-- When test rig ran in docker, these values dervied from the environment ---# -mosip_pms_client_id = mosip-pms-client -mosip_partner_client_id = mosip-partner-client -mosip_resident_client_id = mosip-resident-client -mosip_idrepo_client_id = mosip-idrepo-client -mosip_reg_client_id = mosip-reg-client -mosip_admin_client_id = mosip-admin-client -mosip_hotlist_client_id = mosip-hotlist-client -mosip_regproc_client_id = mosip-regproc-client -mpartner_default_mobile_client_id = mpartner-default-mobile -mosip_testrig_client_id = mosip-testrig-client -AuthClientID = mosip-resident-client - - - -#---------------------------------- Client Secret Keys -----------------------# -#-- When test rig ran in docker, these values dervied from the environment ---# -mosip_partner_client_secret = -mosip_pms_client_secret = -mosip_resident_client_secret = -mosip_idrepo_client_secret = -mosip_reg_client_secret = -mosip_admin_client_secret = -mosip_hotlist_client_secret = -mosip_regproc_client_secret = -mpartner_default_mobile_secret = -mosip_testrig_client_secret = -AuthClientSecret = - - - -#----------------------------- minio proprties ------------------------------# -s3-user-key = minioadmin -s3-user-secret = minioadmin -s3-host = http://minio.minio:9000 -s3-account = automation -s3-region = null -reportExpirationInDays = 3 -s3-account-for-persona-data = personaData -push-reports-to-s3 = yes - - -#-------------------- Keycloak User Creation proprties ----------------------# -#-- When test rig ran in docker,few of below dervied from the environment ---# -new_Resident_User = 111995 -new_Resident_Password = mosip123 -new_Resident_Role = default-roles-mosip,PARTNER_ADMIN -roles.111995 = PARTNER_ADMIN,default-roles-mosip -keycloak_UserName = admin -keycloak_Password = DyWRaJqTFh -keycloak-external-url = https://iam.released.mosip.net -keycloak-realm-id = mosip -iam-users-to-create = 111997,111998,220005,111992,globaladmin,111887,111999 -iam-users-password = mosip123,mosip123,mosip123,mosip123,mosip123 -roles.220005 = GLOBAL_ADMIN,ID_AUTHENTICATION,REGISTRATION_ADMIN,REGISTRATION_SUPERVISOR,ZONAL_ADMIN -roles.111997 = AUTH_PARTNER,PARTNER_ADMIN,PMS_ADMIN,POLICYMANAGER,REGISTRATION_SUPERVISOR -roles.111999 = AUTH_PARTNER,PARTNER_ADMIN,PMS_ADMIN,POLICYMANAGER,REGISTRATION_SUPERVISOR -roles.111887 = AUTH_PARTNER,PARTNER_ADMIN,PMS_ADMIN,REGISTRATION_SUPERVISOR -roles.111998 = POLICYMANAGER -roles.111992 = GLOBAL_ADMIN -roles.globaladmin = GLOBAL_ADMIN,REGISTRATION_ADMIN,uma_authorization,ZONAL_ADMIN,default-roles-mosip - - -#------------------------- DB Connectivity proprties ------------------------# -#-- When test rig ran in docker,few of below dervied from the environment ---# -driver_class=org.postgresql.Driver -pool_size=1 -dialect=org.hibernate.dialect.PostgreSQLDialect -show_sql=true -current_session_context_class=thread -audit_url=jdbc:postgresql://released.mosip.net:5432/mosip_audit -audit_username=postgres -audit_password=WfJpMctLjp -audit_default_schema=audit -DB_PORT= -installation-domain= -partner_url=jdbc:postgresql://released.mosip.net:5432/mosip_ida -partner_username=postgres -partner_password=WfJpMctLjp -partner_default_schema=partner -reportLogPath=automationLogAndReport -postgresqlUser=postgresql -db-port=5432 -db-server=qa-inji.mosip.net -hibernate.connection.driver_class=org.postgresql.Driver -hibernate.connection.pool_size=1 -hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect -hibernate.show_sql=true -hibernate.current_session_context_class=thread -db-su-user=postgres -postgres-password=WfJpMctLjp -pms_db_schema=pms -km_db_schema=keymgr -master_db_schema=master -audit_db_schema=audit -ida_db_schema=ida - - -#------------------------- DSL specific proprties ------------------------# -#------------------------- We need to see how to have DSL specific proprties file ------------------------# -packetUtilityBaseUrl=http://localhost:8080 -mountPathForScenario=D:/centralized/mountvolume -mountPath=/home/mosip/mountvolume -# Add scenarios to skip from automation and server side -# supported values "S-scnearioNumber" for server side and "A-scnearioNumber" for automation -scenariosToSkip= -# Add scenarios to include in the the execution list -# Empty if we want to execute all the scenarios--- -scenariosToExecute= -# supported values yes or no -useExternalScenarioSheet=yes -# supported values are 1 to 8 -threadCount=1 - -#------------------------ Generic properties ------------------------# -enableDebug=yes -preconfiguredOtp=111111 -usePreConfiguredOtp=true -# supported values yes or no. Assume that by Default e-signet is deployed -eSignetDeployed=yes -partnerUrlSuffix=oYf63Lax0DY2QkYMRHnrmDqhmO3RMWQagwm0ftgLlkuin1KOND/666/576732 -reportIgnoredTestCases=no -reportKnownIssueTestCases=no -servicesNotDeployed= -esignetMockBaseURL=esignet-insurance. -sunBirdBaseURL=https://registry.dev1.mosip.net -#Once sunbird registry is pointing to specific env, remove the above line and uncomment below line -#sunBirdBaseURL=registry -slack-webhook-url= -serverErrorsToMonitor=IDA-MLC-018 -pmsAuthInternal=true -partner_password=mosip123 -partner_userName=111997 -partner_revamp_userName=111999 -partner_user_password=mosip123 -policytest_password=mosip123 -policytest_userName=111998 -policytest_without_pmrole_userName=111887 -admin_password=mosip123 -admin_userName=220005 -admin_zone_password=mosip123 -admin_zone_userName=globaladmin -mockNotificationChannel=email,phone -mountPathForReport=/home/mosip/testrig/report - - -#------------------------- Need to check if these are used or not ------------------------# -OTPTimeOut = 181 -attempt = 10 -ConfigParameters=mosip.kernel.rid.length,mosip.kernel.uin.length,mosip.kernel.sms.country.code,mosip.kernel.sms.number.length,mosip.kernel.otp.default-length,mosip.kernel.otp.expiry-time,mosip.kernel.otp.key-freeze-time,mosip.kernel.otp.validation-attempt-threshold,mosip.kernel.otp.min-key-length,mosip.kernel.otp.max-key-length,mosip.kernel.licensekey.length,mosip.supported-languages -# supported values are 0 ,1, 2 based on number of env languages -langselect=0 - - - -#----------------------------------AuthDemoService Host properties----------------------------------------------------------# -#authCertsPath= -authCertsPath=/home/mosip/authcerts - - - - -mosip_components_base_urls= -#auditmanager=api-internal.dev1.mosip.net;idrepository=api-internal.dev1.mosip.net;partnermanager=api-internal.qa-inji.mosip.net;idauthentication=api-internal.qa-inji.mosip.net;policymanager=api-internal.qa-inji.mosip.net \ No newline at end of file diff --git a/api-test/src/main/resources/config/mimoto.properties b/api-test/src/main/resources/config/mimoto.properties new file mode 100644 index 000000000..59e3d9522 --- /dev/null +++ b/api-test/src/main/resources/config/mimoto.properties @@ -0,0 +1 @@ +#---------------------------------- End point(s) relative URLs ----------------------------------# From 48fd5afe0815b8cef6c1e1bb887f04227e972a6b Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Thu, 3 Oct 2024 13:43:01 +0530 Subject: [PATCH 248/860] [Injimob 812] rename redirect_uri and response_uri to redirect_uris and response_uris (#465) * [INJIMOB-812]: expose an api to fetch the list of all trusted verifiers Signed-off-by: Alka Prasad * [INJIMOB-812]: add ngrok url as response uri for testing Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIMOB-812]: revert the response uri back to inji verify redirect url from ngrok url in trusted verifiers file Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIMOB-812]: add unit tests for the trusted verifiers api added Signed-off-by: Alka Prasad * [INJIMOB-812] rename response_uri to response_uris in all places Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIMOB-812] rename redirect_uri to redirect_uris in trusted verifiers file Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIMOB-812] rename responseUri to responseUris in verifiers controller test Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --------- Signed-off-by: Alka Prasad Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Co-authored-by: Alka Prasad --- src/main/java/io/mosip/mimoto/dto/openid/VerifierDTO.java | 6 +++--- src/main/resources/mimoto-trusted-verifiers.json | 8 ++++---- .../mosip/mimoto/controller/VerifiersControllerTest.java | 4 ++-- .../java/io/mosip/mimoto/service/VerifierServiceTest.java | 2 +- src/test/java/io/mosip/mimoto/util/TestUtilities.java | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/dto/openid/VerifierDTO.java b/src/main/java/io/mosip/mimoto/dto/openid/VerifierDTO.java index 5ed8d1e7c..3aad45b8c 100644 --- a/src/main/java/io/mosip/mimoto/dto/openid/VerifierDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/openid/VerifierDTO.java @@ -19,6 +19,6 @@ public class VerifierDTO { @JsonProperty("redirect_uris") List redirectUris; - @JsonProperty("response_uri") - List responseUri; -} + @JsonProperty("response_uris") + List responseUris; +} \ No newline at end of file diff --git a/src/main/resources/mimoto-trusted-verifiers.json b/src/main/resources/mimoto-trusted-verifiers.json index 01d587c7e..523a6c321 100644 --- a/src/main/resources/mimoto-trusted-verifiers.json +++ b/src/main/resources/mimoto-trusted-verifiers.json @@ -2,22 +2,22 @@ "verifiers": [ { "client_id": "https://injiverify.dev2.mosip.net", - "redirect_uri": [ + "redirect_uris": [ "https://injiverify.qa-inji.mosip.net/redirect", "https://injiverify.dev2.mosip.net/redirect" ], - "response_uri": [ + "response_uris": [ "https://injiverify.qa-inji.mosip.net/redirect", "https://injiverify.dev2.mosip.net/redirect" ] }, { "client_id": "https://injiverify.dev1.mosip.net", - "redirect_uri": [ + "redirect_uris": [ "https://injiverify.qa-inji.mosip.net/redirect", "https://injiverify.dev1.mosip.net/redirect" ], - "response_uri": [ + "response_uris": [ "https://injiverify.qa-inji.mosip.net/redirect", "https://injiverify.dev1.mosip.net/redirect" ] diff --git a/src/test/java/io/mosip/mimoto/controller/VerifiersControllerTest.java b/src/test/java/io/mosip/mimoto/controller/VerifiersControllerTest.java index 295c99137..24021a4a9 100644 --- a/src/test/java/io/mosip/mimoto/controller/VerifiersControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/VerifiersControllerTest.java @@ -40,7 +40,7 @@ public void getAllTrustedVerifiers() throws Exception { VerifierDTO verifierDTO = VerifierDTO.builder() .clientId("test-clientId") .redirectUris(Collections.singletonList("https://test-redirectUri")) - .responseUri(Collections.singletonList("https://test-responseUri")).build(); + .responseUris(Collections.singletonList("https://test-responseUri")).build(); VerifiersDTO trustedVerifiers = VerifiersDTO.builder() .verifiers(Collections.singletonList(verifierDTO)).build(); @@ -55,7 +55,7 @@ public void getAllTrustedVerifiers() throws Exception { Matchers.allOf( Matchers.hasKey("client_id"), Matchers.hasKey("redirect_uris"), - Matchers.hasKey("response_uri") + Matchers.hasKey("response_uris") ) ))); } diff --git a/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java b/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java index 99d2d5247..8f7b5f640 100644 --- a/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java @@ -48,7 +48,7 @@ public void shouldReturnAllTrustedIssuers() throws ApiNotAccessibleException, Js VerifierDTO verifierDTO = VerifierDTO.builder() .clientId("test-clientId") .redirectUris(Collections.singletonList("https://test-redirectUri")) - .responseUri(Collections.singletonList("https://test-responseUri")).build(); + .responseUris(Collections.singletonList("https://test-responseUri")).build(); VerifiersDTO expectedTrustedVerifiers = VerifiersDTO.builder() .verifiers(Collections.singletonList(verifierDTO)).build(); diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index 4a2db010d..da9828d64 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -263,7 +263,7 @@ public static VerifiersDTO getTrustedVerifiers() { VerifierDTO verifierDTO = VerifierDTO.builder() .clientId("test-clientId") .redirectUris(Collections.singletonList("https://test-redirectUri")) - .responseUri(Collections.singletonList("https://test-responseUri")).build(); + .responseUris(Collections.singletonList("https://test-responseUri")).build(); return VerifiersDTO.builder() .verifiers(Collections.singletonList(verifierDTO)).build(); From 160cff0f3d1f535edbc4070cdcccc1f9cc9c5c71 Mon Sep 17 00:00:00 2001 From: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> Date: Fri, 4 Oct 2024 18:02:09 +0530 Subject: [PATCH 249/860] MOSIP-35404 | Move component specific test code from common to component api test rigs Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> --- .../java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java | 1 + 1 file changed, 1 insertion(+) diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java b/api-test/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java index 1dcb18855..a3d344fd6 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java @@ -68,6 +68,7 @@ public static void main(String[] arg) { } else { ExtractResource.copyCommonResources(); } + AdminTestUtil.init(); MimotoConfigManager.init(); BaseTestCase.suiteSetup(getRunType()); SkipTestCaseHandler.loadTestcaseToBeSkippedList("testCaseSkippedList.txt"); From 3ed630d334c1224a70e73d06cda3d89cca5a3517 Mon Sep 17 00:00:00 2001 From: Vijay Kumar S <94220135+vijay151096@users.noreply.github.com> Date: Mon, 7 Oct 2024 11:34:19 +0530 Subject: [PATCH 250/860] [INJIWEB-758] : swagger config & Slf4j Logger update (#466) * [INJIWEB-758] : swagger config update Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-758] : swagger config update Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-758] : swagger config update Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-758] : fix failed checks Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> Signed-off-by: Vijay Kumar S <94220135+vijay151096@users.noreply.github.com> --- .../mimoto/MimotoServiceApplication.java | 8 +- .../java/io/mosip/mimoto/config/Config.java | 4 - .../config/IssuersValidationConfig.java | 17 ++- .../io/mosip/mimoto/config/SwaggerConfig.java | 6 +- .../constant/SwaggerExampleConstants.java | 35 ++++++ .../constant/SwaggerLiteralConstants.java | 77 ++++++++++++++ .../AttestationServiceController.java | 26 ++--- .../controller/CommonInjiController.java | 20 +++- .../controller/CredentialShareController.java | 67 ++++++------ .../controller/CredentialsController.java | 49 +++++---- .../mimoto/controller/IdpController.java | 100 +++++++++--------- .../mimoto/controller/IssuersController.java | 48 ++++----- .../controller/PresentationController.java | 29 +++-- .../controller/ResidentServiceController.java | 31 +++--- .../controller/VerifiersController.java | 21 ++-- .../mimoto/core/http/ResponseWrapper.java | 20 ++-- .../java/io/mosip/mimoto/dto/DisplayDTO.java | 6 ++ .../java/io/mosip/mimoto/dto/IssuerDTO.java | 12 +++ .../java/io/mosip/mimoto/dto/IssuersDTO.java | 2 + .../java/io/mosip/mimoto/dto/LogoDTO.java | 3 + .../dto/mimoto/BindingOtpInnerReqDto.java | 4 + .../dto/mimoto/BindingOtpRequestDto.java | 3 + .../dto/mimoto/BindingOtpResponseDto.java | 4 + .../CredentialDefinitionResponseDto.java | 3 + .../mimoto/CredentialDisplayResponseDto.java | 2 + .../CredentialIssuerDisplayResponse.java | 3 + .../CredentialIssuerWellKnownResponse.java | 5 + .../CredentialSupportedDisplayResponse.java | 7 ++ .../mimoto/CredentialsSupportedResponse.java | 9 ++ .../mimoto/dto/mimoto/IdpChallangeDto.java | 4 + .../dto/mimoto/ProofTypesSupported.java | 2 + .../dto/mimoto/WalletBindingInnerReq.java | 7 ++ .../mimoto/WalletBindingInnerRequestDto.java | 6 ++ .../WalletBindingInternalRequestDTO.java | 3 + .../WalletBindingInternalResponseDto.java | 4 + .../dto/mimoto/WalletBindingRequestDTO.java | 4 + .../dto/mimoto/WalletBindingResponseDto.java | 6 ++ .../mosip/mimoto/dto/openid/VerifierDTO.java | 7 +- .../mosip/mimoto/dto/openid/VerifiersDTO.java | 2 + .../datashare/DataShareResponseDTO.java | 11 ++ .../mimoto/exception/ExceptionUtils.java | 19 ++-- .../service/impl/CredentialServiceImpl.java | 6 +- .../impl/CredentialShareServiceImpl.java | 22 ++-- .../service/impl/DataShareServiceImpl.java | 12 +-- .../service/impl/IssuersServiceImpl.java | 3 - .../service/impl/PresentationServiceImpl.java | 10 +- .../service/impl/RestClientServiceImpl.java | 70 ++++++------ .../service/impl/VerifierServiceImpl.java | 5 +- .../mimoto/util/AttestationOfflineVerify.java | 9 +- .../mimoto/util/AttestationOnlineVerify.java | 5 +- .../mimoto/util/AuditLogRequestBuilder.java | 28 +++-- .../mimoto/util/CbeffToBiometricUtil.java | 5 +- .../util/CredentialShareExceptionHandler.java | 7 +- .../io/mosip/mimoto/util/CryptoCoreUtil.java | 25 ++--- .../io/mosip/mimoto/util/DataShareUtil.java | 27 ++--- .../java/io/mosip/mimoto/util/JoseUtil.java | 14 +-- .../mosip/mimoto/util/RequestValidator.java | 8 +- .../io/mosip/mimoto/util/RestApiClient.java | 25 +++-- .../java/io/mosip/mimoto/util/ServerUtil.java | 15 ++- .../mosip/mimoto/util/TokenHandlerUtil.java | 11 +- .../java/io/mosip/mimoto/util/Utilities.java | 21 ++-- .../mimoto/util/WebSubSubscriptionHelper.java | 34 +++--- src/test/resources/responses/InjiConfig.json | 6 +- 63 files changed, 644 insertions(+), 420 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/constant/SwaggerExampleConstants.java create mode 100644 src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java diff --git a/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java b/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java index 68d5a946c..d01d25a2a 100644 --- a/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java +++ b/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java @@ -6,6 +6,7 @@ import io.mosip.kernel.cbeffutil.impl.CbeffImpl; import io.mosip.kernel.core.logger.spi.Logger; import io.mosip.mimoto.util.LoggerUtil; +import lombok.extern.slf4j.Slf4j; import org.json.simple.JSONObject; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -30,12 +31,11 @@ HibernateJpaAutoConfiguration.class, CacheAutoConfiguration.class }) +@Slf4j @EnableScheduling @EnableAsync public class MimotoServiceApplication { - private static Logger logger = LoggerUtil.getLogger(MimotoServiceApplication.class); - @Bean @Primary public CbeffUtil getCbeffUtil() { @@ -57,14 +57,14 @@ public static JSONObject getGitProp() { JSONObject.class ); } catch (Exception e) { - logger.error("Error when trying to read build.json file: " + e); + log.error("Error when trying to read build.json file: " + e); } return new JSONObject(); } public static void main(String[] args) { JSONObject gitProp = getGitProp(); - logger.info( + log.info( String.format( "Mimoto Service version: %s - revision: %s @ branch: %s | build @ %s", gitProp.get("git.build.version"), diff --git a/src/main/java/io/mosip/mimoto/config/Config.java b/src/main/java/io/mosip/mimoto/config/Config.java index ec4fa0f8e..9b83c1832 100644 --- a/src/main/java/io/mosip/mimoto/config/Config.java +++ b/src/main/java/io/mosip/mimoto/config/Config.java @@ -11,9 +11,6 @@ import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; - -import io.mosip.kernel.core.logger.spi.Logger; -import io.mosip.mimoto.util.LoggerUtil; import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; import org.springframework.security.config.annotation.web.configurers.HeadersConfigurer; import org.springframework.security.web.SecurityFilterChain; @@ -26,7 +23,6 @@ @EnableMethodSecurity @Order(1) public class Config { - private Logger logger = LoggerUtil.getLogger(Config.class); @Value("${mosipbox.public.url}") private String baseUrl; diff --git a/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java b/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java index 01b76cd72..dac6ae80a 100644 --- a/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java +++ b/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java @@ -1,9 +1,9 @@ package io.mosip.mimoto.config; -import io.mosip.kernel.core.logger.spi.Logger; + import io.mosip.mimoto.dto.IssuersDTO; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.service.IssuersService; -import io.mosip.mimoto.util.LoggerUtil; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; @@ -17,6 +17,7 @@ import java.util.Set; import java.util.concurrent.atomic.AtomicReference; +@Slf4j @Component public class IssuersValidationConfig implements ApplicationRunner { @Autowired @@ -27,11 +28,9 @@ public class IssuersValidationConfig implements ApplicationRunner { private final String VALIDATION_ERROR_MSG = "\n\nValidation failed in Mimoto-issuers-config.json:"; - private final Logger logger = LoggerUtil.getLogger(IssuersValidationConfig.class); - @Override public void run(ApplicationArguments args) throws ApiNotAccessibleException, IOException { - logger.info("Validation for mimoto-issuers-config.json STARTED"); + log.info("Validation for mimoto-issuers-config.json STARTED"); IssuersDTO issuerDTOList = issuersService.getAllIssuersWithAllFields(); AtomicReference errors = new AtomicReference<>(); @@ -47,11 +46,11 @@ public void run(ApplicationArguments args) throws ApiNotAccessibleException, IOE String[] tokenEndpointArray = issuerDTO.getToken_endpoint().split("/"); Set currentIssuers = credentialIssuers.get(); if (!currentIssuers.add(credentialIssuer)) { - logger.error(VALIDATION_ERROR_MSG + "duplicate value found " + credentialIssuer); + log.error(VALIDATION_ERROR_MSG + "duplicate value found " + credentialIssuer); throw new RuntimeException(VALIDATION_ERROR_MSG); } if (!tokenEndpointArray[tokenEndpointArray.length - 1].equals(credentialIssuer)) { - logger.error(VALIDATION_ERROR_MSG + "TokenEndpoint does not match with the credential issuer " + credentialIssuer); + log.error(VALIDATION_ERROR_MSG + "TokenEndpoint does not match with the credential issuer " + credentialIssuer); throw new RuntimeException(VALIDATION_ERROR_MSG); } credentialIssuers.set(currentIssuers); @@ -64,10 +63,10 @@ public void run(ApplicationArguments args) throws ApiNotAccessibleException, IOE errors.get().getFieldErrors().forEach(error -> { fieldErrors.set(fieldErrors.get() + error.getField() + " " + error.getDefaultMessage() + "\n"); }); - logger.error(VALIDATION_ERROR_MSG + fieldErrors.get()); + log.error(VALIDATION_ERROR_MSG + fieldErrors.get()); throw new RuntimeException(VALIDATION_ERROR_MSG); } - logger.info("Validation for mimoto-issuers-config.json COMPLETED"); + log.info("Validation for mimoto-issuers-config.json COMPLETED"); } } diff --git a/src/main/java/io/mosip/mimoto/config/SwaggerConfig.java b/src/main/java/io/mosip/mimoto/config/SwaggerConfig.java index 9a7d6c827..c2dcf9fbf 100644 --- a/src/main/java/io/mosip/mimoto/config/SwaggerConfig.java +++ b/src/main/java/io/mosip/mimoto/config/SwaggerConfig.java @@ -5,6 +5,7 @@ import io.swagger.v3.oas.models.info.Info; import io.swagger.v3.oas.models.info.License; import io.swagger.v3.oas.models.servers.Server; +import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springdoc.core.models.GroupedOpenApi; @@ -12,11 +13,10 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +@Slf4j @Configuration public class SwaggerConfig { - private static final Logger logger = LoggerFactory.getLogger(SwaggerConfig.class); - @Autowired private OpenApiProperties openApiProperties; @@ -35,7 +35,7 @@ public OpenAPI openApi() { openApiProperties.getService().getServers().forEach(server -> { api.addServersItem(new Server().description(server.getDescription()).url(server.getUrl())); }); - logger.info("swagger open api bean is ready"); + log.info("swagger open api bean is ready"); return api; } diff --git a/src/main/java/io/mosip/mimoto/constant/SwaggerExampleConstants.java b/src/main/java/io/mosip/mimoto/constant/SwaggerExampleConstants.java new file mode 100644 index 000000000..f22d378e6 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/constant/SwaggerExampleConstants.java @@ -0,0 +1,35 @@ +package io.mosip.mimoto.constant; + +public class SwaggerExampleConstants { + + public static final String ALL_PROPERTIES_EXAMPLE = """ + { + "response": { + "modelDownloadMaxRetry": "10", + "audience": "ida-binding", + "datashare.host": "https://datashare-inji.collab.mosip.net", + "allowedInternalAuthType": "otp,bio-Finger,bio-Iris,bio-Face", + "openId4VCIDownloadVCTimeout": "30000", + "qr.code.height": "650", + "ovp.error.redirect.url.pattern": "%s?error=%s&error_description=%s", + "vcDownloadMaxRetry": "10", + "ovp.qrdata.pattern": "INJI_OVP://https://injiweb.collab.mosip.net/authorize?response_type=vp_token&resource=%s&presentation_definition=%s", + "minStorageRequiredForAuditEntry": "2", + "minStorageRequired": "2", + "vcDownloadPoolInterval": "6000", + "issuer": "residentapp", + "ovp.redirect.url.pattern": "%s#vp_token=%s&presentation_submission=%s", + "allowedAuthType": "demo,otp,bio-Finger,bio-Iris,bio-Face", + "allowedEkycAuthType": "demo,otp,bio-Finger,bio-Iris,bio-Face", + "warningDomainName": "https://api.collab.mosip.net", + "qr.code.width": "650", + "web.host": "https://injiweb.collab.mosip.net", + "web.redirect.url": "https://injiweb.collab.mosip.net/authorize", + "aboutInjiUrl": "https://docs.mosip.io/inji/inji-mobile-wallet/overview", + "qr.data.size.limit": "10000", + "faceSdkModelUrl": "https://api.collab.mosip.net/inji" + }, + "errors": [] + } + """; +} diff --git a/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java b/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java new file mode 100644 index 000000000..188471181 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java @@ -0,0 +1,77 @@ +package io.mosip.mimoto.constant; + +public class SwaggerLiteralConstants { + + /* Attestation Controller */ + public static final String ATTESTATION_NAME = "Attestation" ; + public static final String ATTESTATION_DESCRIPTION = "All the attestation related endpoints" ; + + + /* Common Inji Controller */ + public static final String COMMON_INJI_NAME = "Inji Wallet Properties" ; + public static final String COMMON_INJI_DESCRIPTION = "All endpoints related to Inji Wallet properties" ; + public static final String COMMON_INJI_GET_PROPERTIES_SUMMARY = "Retrieve all Inji Wallet properties" ; + public static final String COMMON_INJI_GET_PROPERTIES_DESCRIPTION = "This endpoint allow you to retrieve all the Inji Wallet properties" ; + + /* Credentials Controller */ + public static final String CREDENTIALS_NAME = "Credentials download using OpenId4VCI" ; + public static final String CREDENTIALS_DESCRIPTION = "All the credentials related endpoints" ; + public static final String CREDENTIALS_DOWNLOAD_VC_SUMMARY = "Download credentials as PDF" ; + public static final String CREDENTIALS_DOWNLOAD_VC_DESCRIPTION = "This endpoint allow you to download the credentials as PDF" ; + + /* Credentials Share Controller */ + public static final String CREDENTIALS_SHARE_NAME = "Credential Share" ; + public static final String CREDENTIALS_SHARE_DESCRIPTION = "All the credential download endpoints" ; + public static final String CREDENTIALS_SHARE_HANDLE_SUBSCRIBED_EVENT_SUMMARY = "Notify through web sub once credential is downloaded" ; + public static final String CREDENTIALS_SHARE_HANDLE_SUBSCRIBED_EVENT_DESCRIPTION = "This endpoint allow web sub to callback once the credential is issued" ; + public static final String CREDENTIALS_SHARE_REQUEST_VC_SUMMARY = "request for credential issue" ; + public static final String CREDENTIALS_SHARE_REQUEST_VC_DESCRIPTION = "This endpoint allow you to request for credential issue" ; + public static final String CREDENTIALS_SHARE_REQUEST_VC_STATUS_SUMMARY = "polling for credential issue status" ; + public static final String CREDENTIALS_SHARE_REQUEST_VC_STATUS_DESCRIPTION = "This endpoint allow you to poll for credential issue status" ; + public static final String CREDENTIALS_SHARE_DOWNLOAD_VC_SUMMARY = "Download the credential using OTP Flow" ; + public static final String CREDENTIALS_SHARE_DOWNLOAD_VC_DESCRIPTION = "This endpoint allow you to download credential issued" ; + + /* IDP Controller */ + public static final String IDP_NAME = "Wallet Binding" ; + public static final String IDP_DESCRIPTION = "All the authorization related endpoints" ; + public static final String IDP_BINDING_OTP_SUMMARY = "Invoke OTP request for wallet binding" ; + public static final String IDP_BINDING_OTP_DESCRIPTION = "This endpoint allow you to invoke OTP for wallet binding" ; + public static final String IDP_WALLET_BINDING_SUMMARY = "Wallet Binding" ; + public static final String IDP_WALLET_BINDING_DESCRIPTION = "This endpoint allow you to perform the wallet binding" ; + public static final String IDP_GET_TOKEN_SUMMARY = "Retrieve accessToken for OIDC flow" ; + public static final String IDP_GET_TOKEN_DESCRIPTION = "This endpoint allow you to retrieve the access token in exchange for authorization code" ; + + /* Issuers Controller */ + public static final String ISSUERS_NAME = "Issuers" ; + public static final String ISSUERS_DESCRIPTION = "All the issuers related endpoints" ; + public static final String ISSUERS_GET_ISSUERS_SUMMARY = "Retrieve all onboarded issuers" ; + public static final String ISSUERS_GET_ISSUERS_DESCRIPTION = "This endpoint allow you to retrieve all the onboarded issuers" ; + public static final String ISSUERS_GET_SPECIFIC_ISSUER_SUMMARY = "Retrieve specific issuer's config" ; + public static final String ISSUERS_GET_SPECIFIC_ISSUER_DESCRIPTION = "This endpoint allow you to retrieve the complete configuration of the specific issuer" ; + public static final String ISSUERS_GET_ISSUER_WELLKNOWN_SUMMARY = "Retrieve specific issuer's well known" ; + public static final String ISSUERS_GET_ISSUER_WELLKNOWN_DESCRIPTION = "This endpoint allow you to retrieve the well known of the specific issuer" ; + + /* Prensentation Controller */ + public static final String PRESENTATION_NAME = "Presentation" ; + public static final String PRESENTATION_DESCRIPTION = "All the online sharing related endpoints" ; + public static final String PRESENTATION_AUTHORIZE_SUMMARY = "Perform the authorization" ; + public static final String PRESENTATION_AUTHORIZE_DESCRIPTION = "This endpoint allow you to redirect the token back to the caller post authorization" ; + + /* Resident Service Controller */ + public static final String RESIDENT_NAME = "Resident Service" ; + public static final String RESIDENT_DESCRIPTION = "All the resident service related endpoints" ; + public static final String RESIDENT_REQUEST_OTP_SUMMARY = "Request for OTP" ; + public static final String RESIDENT_REQUEST_OTP_DESCRIPTION = "This endpoint allow you to request OTP for credential download" ; + public static final String RESIDENT_REQUEST_INDIVIDUALID_OTP_SUMMARY = "Request OTP for retrieving Individual Id" ; + public static final String RESIDENT_REQUEST_INDIVIDUALID_OTP_DESCRIPTION = "This endpoint allow you to request OTP to retrieve Individual Id" ; + public static final String RESIDENT_GET_INDIVIDUALID_SUMMARY = "Retrieve Individual Id using AID" ; + public static final String RESIDENT_GET_INDIVIDUALID_DESCRIPTION = "This endpoint allow you to retrieve the Individual Id using AID" ; + + + /* Verifiers Controller */ + public static final String VERIFIERS_NAME = "Verifiers" ; + public static final String VERIFIERS_DESCRIPTION = "All the verifiers related endpoints" ; + public static final String VERIFIERS_GET_VERIFIERS_SUMMARY = "Retrieve all trusted verifiers" ; + public static final String VERIFIERS_GET_VERIFIERS_DESCRIPTION = "This endpoint allow you to retrieve all the trusted verifiers" ; + +} diff --git a/src/main/java/io/mosip/mimoto/controller/AttestationServiceController.java b/src/main/java/io/mosip/mimoto/controller/AttestationServiceController.java index c7741b42f..0209cf191 100644 --- a/src/main/java/io/mosip/mimoto/controller/AttestationServiceController.java +++ b/src/main/java/io/mosip/mimoto/controller/AttestationServiceController.java @@ -1,7 +1,15 @@ package io.mosip.mimoto.controller; +import io.mosip.kernel.core.logger.spi.Logger; +import io.mosip.mimoto.constant.SwaggerLiteralConstants; +import io.mosip.mimoto.dto.mimoto.AttestationStatement; +import io.mosip.mimoto.dto.mimoto.GenericResponseDTO; +import io.mosip.mimoto.util.AttestationOfflineVerify; +import io.mosip.mimoto.util.AttestationOnlineVerify; +import io.mosip.mimoto.util.LoggerUtil; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -10,19 +18,11 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import io.mosip.kernel.core.logger.spi.Logger; -import io.mosip.mimoto.dto.mimoto.AttestationStatement; -import io.mosip.mimoto.dto.mimoto.GenericResponseDTO; -import io.mosip.mimoto.util.AttestationOfflineVerify; -import io.mosip.mimoto.util.AttestationOnlineVerify; -import io.mosip.mimoto.util.LoggerUtil; - @RestController @RequestMapping(value = "/safetynet") +@Tag(name = SwaggerLiteralConstants.ATTESTATION_NAME, description = SwaggerLiteralConstants.ATTESTATION_DESCRIPTION) public class AttestationServiceController { - private final Logger logger = LoggerUtil.getLogger(AttestationServiceController.class); - @Autowired AttestationOfflineVerify attestationOfflineVerify; @@ -35,6 +35,7 @@ public class AttestationServiceController { * @param attestation * @return */ + @Operation(hidden = true) @PostMapping(path = "/offline/verify", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity processOffline(@RequestBody String attestation) { @@ -45,7 +46,7 @@ public ResponseEntity processOffline(@RequestBody String attestation) GenericResponseDTO responseDTO = new GenericResponseDTO(); responseDTO.setStatus("Error"); responseDTO.setMessage(e.getMessage()); - + return new ResponseEntity<>(responseDTO, HttpStatus.OK); } } @@ -56,6 +57,7 @@ public ResponseEntity processOffline(@RequestBody String attestation) * @param attestation * @return */ + @Operation(hidden = true) @PostMapping(path = "/online/verify", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity processOnline(@RequestBody String attestation) { @@ -66,7 +68,7 @@ public ResponseEntity processOnline(@RequestBody String attestation) GenericResponseDTO responseDTO = new GenericResponseDTO(); responseDTO.setStatus("Error"); responseDTO.setMessage(e.getMessage()); - + return new ResponseEntity<>(responseDTO, HttpStatus.OK); } } diff --git a/src/main/java/io/mosip/mimoto/controller/CommonInjiController.java b/src/main/java/io/mosip/mimoto/controller/CommonInjiController.java index 27331e718..4f211d899 100644 --- a/src/main/java/io/mosip/mimoto/controller/CommonInjiController.java +++ b/src/main/java/io/mosip/mimoto/controller/CommonInjiController.java @@ -1,27 +1,37 @@ package io.mosip.mimoto.controller; +import io.mosip.mimoto.constant.SwaggerExampleConstants; +import io.mosip.mimoto.constant.SwaggerLiteralConstants; import io.mosip.mimoto.core.http.ResponseWrapper; -import io.mosip.mimoto.util.DateUtils; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.ExampleObject; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; + import java.util.Map; @RestController +@Tag(name = SwaggerLiteralConstants.COMMON_INJI_NAME, description = SwaggerLiteralConstants.COMMON_INJI_DESCRIPTION) public class CommonInjiController { @Autowired private Map injiConfig; + @Operation( summary = SwaggerLiteralConstants.COMMON_INJI_GET_PROPERTIES_SUMMARY, description = SwaggerLiteralConstants.COMMON_INJI_GET_PROPERTIES_DESCRIPTION) + @ApiResponses({@ApiResponse(responseCode = "200",content = { @Content(schema = @Schema(implementation = ResponseWrapper.class), + examples = @ExampleObject( value = SwaggerExampleConstants.ALL_PROPERTIES_EXAMPLE),mediaType = "application/json") } ) }) @GetMapping(value = "/allProperties", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity getAllProperties() { + public ResponseEntity>> getAllProperties() { ResponseWrapper> responseWrapper = new ResponseWrapper<>(); - responseWrapper.setId("mosip.inji.properties"); - responseWrapper.setVersion("v1"); - responseWrapper.setResponsetime(DateUtils.getRequestTimeString()); responseWrapper.setResponse(injiConfig); return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); } diff --git a/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java b/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java index 7a8f032db..b5eb65bd2 100644 --- a/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java +++ b/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java @@ -1,34 +1,11 @@ package io.mosip.mimoto.controller; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.List; - import com.fasterxml.jackson.databind.JsonNode; import com.google.gson.Gson; - import io.mosip.kernel.core.util.JsonUtils; -import io.mosip.mimoto.util.*; -import org.apache.commons.lang.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.core.env.Environment; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.validation.BindingResult; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import io.mosip.kernel.core.logger.spi.Logger; import io.mosip.kernel.websub.api.annotation.PreAuthenticateContentAndVerifyIntent; import io.mosip.mimoto.constant.ApiName; +import io.mosip.mimoto.constant.SwaggerLiteralConstants; import io.mosip.mimoto.core.http.RequestWrapper; import io.mosip.mimoto.core.http.ResponseWrapper; import io.mosip.mimoto.dto.mimoto.AppCredentialRequestDTO; @@ -41,15 +18,33 @@ import io.mosip.mimoto.model.EventModel; import io.mosip.mimoto.service.RestClientService; import io.mosip.mimoto.service.impl.CredentialShareServiceImpl; +import io.mosip.mimoto.util.*; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.env.Environment; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.*; import javax.validation.Valid; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; @RestController @RequestMapping(value = "/credentialshare") +@Slf4j +@Tag(name = SwaggerLiteralConstants.CREDENTIALS_SHARE_NAME, description = SwaggerLiteralConstants.CREDENTIALS_SHARE_DESCRIPTION) public class CredentialShareController { - private Logger logger = LoggerUtil.getLogger(CredentialShareController.class); - @Autowired private CredentialShareServiceImpl credentialShareService; @@ -88,10 +83,11 @@ public class CredentialShareController { */ @PostMapping(path = "/callback/notify", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @PreAuthenticateContentAndVerifyIntent(secret = "${mosip.event.secret}", callback = "/v1/mimoto/credentialshare/callback/notify", topic = "${mosip.event.topic}") + @Operation(summary = SwaggerLiteralConstants.CREDENTIALS_SHARE_HANDLE_SUBSCRIBED_EVENT_SUMMARY, description = SwaggerLiteralConstants.CREDENTIALS_SHARE_HANDLE_SUBSCRIBED_EVENT_DESCRIPTION) public ResponseEntity handleSubscribeEvent(@RequestBody EventModel eventModel) throws Exception { - logger.info("Received websub event:: transaction id = " + eventModel.getEvent().getTransactionId()); - logger.debug("Received websub event:: " + JsonUtils.javaObjectToJsonString(eventModel)); + log.info("Received websub event:: transaction id = " + eventModel.getEvent().getTransactionId()); + log.debug("Received websub event:: " + JsonUtils.javaObjectToJsonString(eventModel)); GenericResponseDTO responseDTO = new GenericResponseDTO(); Path vcRequestIdPath = Path.of( utilities.getDataPath(), @@ -100,13 +96,13 @@ public ResponseEntity handleSubscribeEvent(@RequestBody Even // Only process event if request id file exists in the storange. if (vcRequestIdPath.toFile().exists()) { boolean documentGenerated = credentialShareService.generateDocuments(eventModel); - logger.info("Credential share process status: {} for event id: {}", documentGenerated, eventModel.getEvent().getId()); + log.info("Credential share process status: {} for event id: {}", documentGenerated, eventModel.getEvent().getId()); } else { - logger.warn("Event transaction id could not found in the storage, skipping..."); + log.warn("Event transaction id could not found in the storage, skipping..."); } responseDTO.setStatus("OK"); responseDTO.setMessage("Successfully issued."); - return new ResponseEntity<>(responseDTO, HttpStatus.OK); + return new ResponseEntity(responseDTO, HttpStatus.OK); } /** @@ -117,11 +113,12 @@ public ResponseEntity handleSubscribeEvent(@RequestBody Even * @throws Exception */ @PostMapping(path = "/request", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity request(@RequestBody AppCredentialRequestDTO requestDTO) + @Operation(summary = SwaggerLiteralConstants.CREDENTIALS_SHARE_REQUEST_VC_SUMMARY, description = SwaggerLiteralConstants.CREDENTIALS_SHARE_REQUEST_VC_DESCRIPTION) + public ResponseEntity request(@RequestBody AppCredentialRequestDTO requestDTO) throws Exception { if (StringUtils.isEmpty(requestDTO.getIndividualId())) { - logger.error("Received empty individual id for transaction id - " + requestDTO.getTransactionID()); + log.error("Received empty individual id for transaction id - " + requestDTO.getTransactionID()); } // Call mosip resident service to issue a new credential @@ -165,8 +162,9 @@ public ResponseEntity request(@RequestBody AppCredentialRequestDTO reque * @throws Exception */ @GetMapping(path = "/request/status/{requestId}", produces = MediaType.APPLICATION_JSON_VALUE) + @Operation(summary = SwaggerLiteralConstants.CREDENTIALS_SHARE_REQUEST_VC_STATUS_SUMMARY, description = SwaggerLiteralConstants.CREDENTIALS_SHARE_REQUEST_VC_STATUS_DESCRIPTION) @SuppressWarnings("unchecked") - public ResponseEntity requestStatus(@PathVariable("requestId") String requestId) + public ResponseEntity> requestStatus(@PathVariable("requestId") String requestId) throws Exception { List pathSegment = new ArrayList(); @@ -187,6 +185,7 @@ public ResponseEntity requestStatus(@PathVariable("requestId") String re * @throws Exception */ @PostMapping(path = "/download", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) + @Operation(summary = SwaggerLiteralConstants.CREDENTIALS_SHARE_DOWNLOAD_VC_SUMMARY, description = SwaggerLiteralConstants.CREDENTIALS_SHARE_DOWNLOAD_VC_DESCRIPTION) public ResponseEntity download(@Valid @RequestBody CredentialDownloadRequestDTO requestDTO, BindingResult result) throws Exception { try { diff --git a/src/main/java/io/mosip/mimoto/controller/CredentialsController.java b/src/main/java/io/mosip/mimoto/controller/CredentialsController.java index f569f1fcc..728a37e39 100644 --- a/src/main/java/io/mosip/mimoto/controller/CredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/CredentialsController.java @@ -1,15 +1,20 @@ package io.mosip.mimoto.controller; -import com.fasterxml.jackson.core.JsonProcessingException; +import io.mosip.mimoto.constant.SwaggerLiteralConstants; import io.mosip.mimoto.core.http.ResponseWrapper; import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; -import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.InvalidCredentialResourceException; import io.mosip.mimoto.exception.VCVerificationException; import io.mosip.mimoto.service.CredentialService; -import io.mosip.mimoto.util.DateUtils; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -18,44 +23,44 @@ import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; import java.io.ByteArrayInputStream; import java.io.IOException; import java.util.List; import java.util.Map; -import static io.mosip.mimoto.exception.PlatformErrorMessages.*; +import static io.mosip.mimoto.exception.PlatformErrorMessages.API_NOT_ACCESSIBLE_EXCEPTION; +import static io.mosip.mimoto.exception.PlatformErrorMessages.MIMOTO_PDF_SIGN_EXCEPTION; @RestController @RequestMapping(value="/credentials") +@Slf4j +@Tag( name = SwaggerLiteralConstants.CREDENTIALS_NAME, description = SwaggerLiteralConstants.CREDENTIALS_DESCRIPTION) public class CredentialsController { - private static final String ID = "mosip.mimoto.credentials"; - private final Logger logger = LoggerFactory.getLogger(CredentialsController.class); - - @Autowired CredentialService credentialService; - + @Operation( summary = SwaggerLiteralConstants.CREDENTIALS_DOWNLOAD_VC_SUMMARY, description = SwaggerLiteralConstants.CREDENTIALS_DOWNLOAD_VC_DESCRIPTION) + @ApiResponses({ + @ApiResponse(responseCode = "200", content = { @Content(mediaType = "application/pdf") }), + @ApiResponse(responseCode = "400",content = { @Content(schema = @Schema(implementation = ResponseWrapper.class), mediaType = "application/json") }) }) @PostMapping("/download") - public ResponseEntity downloadCredentialAsPDF( - @RequestParam Map params) { - + public ResponseEntity downloadCredentialAsPDF(@RequestParam Map params ) { ResponseWrapper responseWrapper = new ResponseWrapper<>(); - responseWrapper.setId(ID); - responseWrapper.setVersion("v1"); - responseWrapper.setResponsetime(DateUtils.getRequestTimeString()); try { String issuerId = params.get("issuer"); String credentialType = params.get("credential"); - logger.info("Initiated Token Call"); + log.info("Initiated Token Call"); TokenResponseDTO response = credentialService.getTokenResponse(params, issuerId); - logger.info("Initiated Download Credential Call"); + log.info("Initiated Download Credential Call"); ByteArrayInputStream inputStream = credentialService.downloadCredentialAsPDF(issuerId, credentialType, response); return ResponseEntity @@ -64,19 +69,19 @@ public ResponseEntity downloadCredentialAsPDF( .header(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, "Content-Disposition") .body(new InputStreamResource(inputStream)); } catch (ApiNotAccessibleException | IOException exception) { - logger.error("Exception occurred while fetching credential types ", exception); + log.error("Exception occurred while fetching credential types ", exception); responseWrapper.setErrors(List.of(new ErrorDTO(API_NOT_ACCESSIBLE_EXCEPTION.getCode(), API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); } catch (InvalidCredentialResourceException invalidCredentialResourceException) { - logger.error("Exception occurred while pushing the data to data share ", invalidCredentialResourceException); + log.error("Exception occurred while pushing the data to data share ", invalidCredentialResourceException); responseWrapper.setErrors(List.of(new ErrorDTO(invalidCredentialResourceException.getErrorCode(), invalidCredentialResourceException.getMessage()))); return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); } catch (VCVerificationException exception) { - logger.error("Exception occurred while verification of the verifiable Credential", exception); + log.error("Exception occurred while verification of the verifiable Credential", exception); responseWrapper.setErrors(List.of(new ErrorDTO(exception.getErrorCode(), exception.getMessage()))); return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); } catch (Exception exception) { - logger.error("Exception occurred while generating pdf ", exception); + log.error("Exception occurred while generating pdf ", exception); responseWrapper.setErrors(List.of(new ErrorDTO(MIMOTO_PDF_SIGN_EXCEPTION.getCode(), exception.getMessage()))); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(responseWrapper); } diff --git a/src/main/java/io/mosip/mimoto/controller/IdpController.java b/src/main/java/io/mosip/mimoto/controller/IdpController.java index 79c3fca84..f02ce2cc4 100644 --- a/src/main/java/io/mosip/mimoto/controller/IdpController.java +++ b/src/main/java/io/mosip/mimoto/controller/IdpController.java @@ -1,9 +1,9 @@ package io.mosip.mimoto.controller; -import com.google.common.collect.Lists; import io.mosip.kernel.core.logger.spi.Logger; import io.mosip.kernel.core.util.JsonUtils; import io.mosip.mimoto.constant.ApiName; +import io.mosip.mimoto.constant.SwaggerLiteralConstants; import io.mosip.mimoto.core.http.ResponseWrapper; import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.IssuerDTO; @@ -14,9 +14,22 @@ import io.mosip.mimoto.service.IdpService; import io.mosip.mimoto.service.IssuersService; import io.mosip.mimoto.service.RestClientService; -import io.mosip.mimoto.util.*; +import io.mosip.mimoto.util.JoseUtil; +import io.mosip.mimoto.util.LoggerUtil; +import io.mosip.mimoto.util.RequestValidator; +import io.mosip.mimoto.util.Utilities; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.*; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; import org.springframework.util.MultiValueMap; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; @@ -26,14 +39,11 @@ import java.util.List; import java.util.Map; -import static io.mosip.mimoto.util.Utilities.handleExceptionWithErrorCode; - @RestController +@Slf4j +@Tag(name = SwaggerLiteralConstants.IDP_NAME, description = SwaggerLiteralConstants.IDP_DESCRIPTION) public class IdpController { - - private final Logger logger = LoggerUtil.getLogger(IdpController.class); private static final boolean USE_BEARER_TOKEN = true; - private static final String ID = "mosip.mimoto.idp"; @Autowired private RestClientService restClientService; @@ -49,37 +59,37 @@ public class IdpController { @Autowired RequestValidator requestValidator; + + @Operation(summary = SwaggerLiteralConstants.IDP_BINDING_OTP_SUMMARY, description = SwaggerLiteralConstants.IDP_BINDING_OTP_DESCRIPTION) @PostMapping(value = "/binding-otp", produces = MediaType.APPLICATION_JSON_VALUE) @SuppressWarnings("unchecked") - public ResponseEntity otpRequest(@Valid @RequestBody BindingOtpRequestDto requestDTO, BindingResult result) throws Exception { - logger.debug("Received binding-otp request : " + JsonUtils.javaObjectToJsonString(requestDTO)); + public ResponseEntity> otpRequest(@Valid @RequestBody BindingOtpRequestDto requestDTO, BindingResult result) throws Exception { + log.debug("Received binding-otp request : " + JsonUtils.javaObjectToJsonString(requestDTO)); requestValidator.validateInputRequest(result); requestValidator.validateNotificationChannel(requestDTO.getRequest().getOtpChannels()); - + ResponseWrapper response = new ResponseWrapper<>(); try { - ResponseWrapper response = null; - response = (ResponseWrapper) restClientService - .postApi(ApiName.BINDING_OTP, - requestDTO, ResponseWrapper.class, USE_BEARER_TOKEN); + response = (ResponseWrapper) restClientService.postApi(ApiName.BINDING_OTP, requestDTO, ResponseWrapper.class, USE_BEARER_TOKEN); if (response == null) throw new IdpException(); - return ResponseEntity.status(HttpStatus.OK).body(response); } catch (Exception e) { - logger.error("Wallet binding otp error occurred.", e); - ResponseWrapper response = getErrorResponse(PlatformErrorMessages.MIMOTO_OTP_BINDING_EXCEPTION.getCode(), e.getMessage()); + log.error("Wallet binding otp error occurred.", e); + List errors = Utilities.getErrors(PlatformErrorMessages.MIMOTO_OTP_BINDING_EXCEPTION.getCode(), e.getMessage()); + response.setErrors(errors); return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(response); } } + @Operation(summary = SwaggerLiteralConstants.IDP_WALLET_BINDING_SUMMARY, description = SwaggerLiteralConstants.IDP_WALLET_BINDING_DESCRIPTION) @PostMapping(path = "/wallet-binding", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity request(@RequestBody WalletBindingRequestDTO requestDTO) + public ResponseEntity> request(@RequestBody WalletBindingRequestDTO requestDTO) throws Exception { - logger.debug("Received wallet-binding request : " + JsonUtils.javaObjectToJsonString(requestDTO)); + log.debug("Received wallet-binding request : " + JsonUtils.javaObjectToJsonString(requestDTO)); + ResponseWrapper responseWrapper = new ResponseWrapper(); try { - ResponseWrapper response = null; WalletBindingInnerRequestDto innerRequestDto = new WalletBindingInnerRequestDto(); innerRequestDto.setChallengeList(requestDTO.getRequest().getChallengeList()); innerRequestDto.setIndividualId(requestDTO.getRequest().getIndividualId()); @@ -96,45 +106,37 @@ public ResponseEntity request(@RequestBody WalletBindingRequestDTO reque if (internalResponse == null) throw new IdpException(); - response = joseUtil.addThumbprintAndKeyId(internalResponse); - return ResponseEntity.status(HttpStatus.OK).body(response); + responseWrapper = joseUtil.addThumbprintAndKeyId(internalResponse); + return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); } catch (Exception e) { - logger.error("Wallet binding error occured for tranaction id " + requestDTO.getRequest().getIndividualId(), e); - ResponseWrapper response = getErrorResponse(PlatformErrorMessages.MIMOTO_WALLET_BINDING_EXCEPTION.getCode(), e.getMessage()); - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(response); + log.error("Wallet binding error occured for tranaction id " + requestDTO.getRequest().getIndividualId(), e); + String[] errorObj = Utilities.handleExceptionWithErrorCode(e); + List errors = Utilities.getErrors(errorObj[0], errorObj[1]); + responseWrapper.setResponse(null); + responseWrapper.setErrors(errors); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); } } + @Operation(summary = SwaggerLiteralConstants.IDP_GET_TOKEN_SUMMARY, description = SwaggerLiteralConstants.IDP_GET_TOKEN_DESCRIPTION) + @ApiResponses({ + @ApiResponse(responseCode = "200", content = { @Content(schema = @Schema(implementation = TokenResponseDTO.class), mediaType = "application/json") }), + @ApiResponse(responseCode = "400", content = { @Content(schema = @Schema(implementation = ResponseWrapper.class), mediaType = "application/json") }) }) @PostMapping(value = {"/get-token/{issuer}"}, consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}, produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity getToken(@RequestParam Map params, @PathVariable(required = true, name= "issuer") String issuer) { - - logger.info("Reached the getToken Controller for Issuer " + issuer); + public ResponseEntity getToken(@RequestParam Map params, @PathVariable(required = true, name= "issuer") String issuer) { + log.info("Reached the getToken Controller for Issuer " + issuer); + ResponseWrapper responseWrapper = new ResponseWrapper<>(); try { IssuerDTO issuerDTO = issuersService.getIssuerConfig(issuer); HttpEntity> request = idpService.constructGetTokenRequest(params, issuerDTO); TokenResponseDTO response = new RestTemplate().postForObject(idpService.getTokenEndpoint(issuerDTO), request, TokenResponseDTO.class); return ResponseEntity.status(HttpStatus.OK).body(response); } catch (Exception ex){ - logger.error("Exception Occurred while Invoking the Token Endpoint : ", ex); - ResponseWrapper response = handleExceptionWithErrorCode(ex); - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(response); + log.error("Exception Occurred while Invoking the Token Endpoint : ", ex); + String[] errorObj = Utilities.handleExceptionWithErrorCode(ex); + List errors = Utilities.getErrors(errorObj[0], errorObj[1]); + responseWrapper.setErrors(errors); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); } } - - public static ResponseWrapper getErrorResponse(String errorCode, String errorMessage) { - - List errors = getErrors(errorCode, errorMessage); - ResponseWrapper responseWrapper = new ResponseWrapper<>(); - responseWrapper.setResponse(null); - responseWrapper.setResponsetime(DateUtils.getRequestTimeString()); - responseWrapper.setId(ID); - responseWrapper.setErrors(errors); - - return responseWrapper; - } - - public static List getErrors(String errorCode, String errorMessage) { - ErrorDTO errorDTO = new ErrorDTO(errorCode, errorMessage); - return Lists.newArrayList(errorDTO); - } } diff --git a/src/main/java/io/mosip/mimoto/controller/IssuersController.java b/src/main/java/io/mosip/mimoto/controller/IssuersController.java index 082e8302b..d1bf9517b 100644 --- a/src/main/java/io/mosip/mimoto/controller/IssuersController.java +++ b/src/main/java/io/mosip/mimoto/controller/IssuersController.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.controller; +import io.mosip.mimoto.constant.SwaggerLiteralConstants; import io.mosip.mimoto.core.http.ResponseWrapper; import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.IssuerDTO; @@ -7,9 +8,10 @@ import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.service.IssuersService; -import io.mosip.mimoto.util.DateUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import io.mosip.mimoto.util.Utilities; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; @@ -21,28 +23,23 @@ import static io.mosip.mimoto.exception.PlatformErrorMessages.API_NOT_ACCESSIBLE_EXCEPTION; import static io.mosip.mimoto.exception.PlatformErrorMessages.INVALID_ISSUER_ID_EXCEPTION; -import static io.mosip.mimoto.util.Utilities.handleExceptionWithErrorCode; @RestController +@Slf4j @RequestMapping(value = "/issuers") +@Tag(name = SwaggerLiteralConstants.ISSUERS_NAME, description = SwaggerLiteralConstants.ISSUERS_DESCRIPTION) public class IssuersController { @Autowired IssuersService issuersService; - private static final String ID = "mosip.mimoto.issuers"; - - private final Logger logger = LoggerFactory.getLogger(IssuersController.class); - + @Operation(summary = SwaggerLiteralConstants.ISSUERS_GET_ISSUERS_SUMMARY, description = SwaggerLiteralConstants.ISSUERS_GET_ISSUERS_DESCRIPTION) @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity getAllIssuers(@RequestParam(required = false, name = "search") String search) { + public ResponseEntity> getAllIssuers(@RequestParam(required = false, name = "search") String search) { ResponseWrapper responseWrapper = new ResponseWrapper<>(); - responseWrapper.setId(ID); - responseWrapper.setVersion("v1"); - responseWrapper.setResponsetime(DateUtils.getRequestTimeString()); try { responseWrapper.setResponse(issuersService.getAllIssuers(search)); } catch (ApiNotAccessibleException | IOException e) { - logger.error("Exception occurred while fetching issuers ", e); + log.error("Exception occurred while fetching issuers ", e); responseWrapper.setErrors(List.of(new ErrorDTO(API_NOT_ACCESSIBLE_EXCEPTION.getCode(), API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); } @@ -50,37 +47,36 @@ public ResponseEntity getAllIssuers(@RequestParam(required = false, name return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); } + @Operation(summary = SwaggerLiteralConstants.ISSUERS_GET_ISSUER_WELLKNOWN_SUMMARY, description = SwaggerLiteralConstants.ISSUERS_GET_ISSUER_WELLKNOWN_DESCRIPTION) @GetMapping(value = "/{issuer-id}/well-known-proxy", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity getIssuerWellknown(@PathVariable("issuer-id") String issuerId) { + public ResponseEntity getIssuerWellknown(@PathVariable("issuer-id") String issuerId) { try { CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = issuersService.getIssuerWellknown(issuerId); return ResponseEntity.status(HttpStatus.OK).body(credentialIssuerWellKnownResponse); } catch (Exception exception) { - logger.error("Exception occurred while fetching issuers wellknown ", exception); + log.error("Exception occurred while fetching issuers wellknown ", exception); return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null); } } + @Operation(summary = SwaggerLiteralConstants.ISSUERS_GET_SPECIFIC_ISSUER_SUMMARY, description = SwaggerLiteralConstants.ISSUERS_GET_SPECIFIC_ISSUER_DESCRIPTION) @GetMapping(value = "/{issuer-id}", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity getIssuerConfig(@PathVariable("issuer-id") String issuerId) { - ResponseWrapper responseWrapper = new ResponseWrapper<>(); - responseWrapper.setId(ID); - responseWrapper.setVersion("v1"); - responseWrapper.setResponsetime(DateUtils.getRequestTimeString()); - + public ResponseEntity> getIssuerConfig(@PathVariable("issuer-id") String issuerId) { + ResponseWrapper responseWrapper = new ResponseWrapper<>(); IssuerDTO issuerConfig; try { issuerConfig = issuersService.getIssuerConfig(issuerId); } catch (Exception exception) { - logger.error("Exception occurred while fetching issuers ", exception); - responseWrapper = handleExceptionWithErrorCode(exception); + log.error("Exception occurred while fetching issuers ", exception); + String[] errorObj = Utilities.handleExceptionWithErrorCode(exception); + List errors = Utilities.getErrors(errorObj[0], errorObj[1]); + responseWrapper.setResponse(null); + responseWrapper.setErrors(errors); return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); } - responseWrapper.setResponse(issuerConfig); - if (issuerConfig == null) { - logger.error("invalid issuer id passed - {}", issuerId); + log.error("invalid issuer id passed - {}", issuerId); responseWrapper.setErrors(List.of(new ErrorDTO(INVALID_ISSUER_ID_EXCEPTION.getCode(), INVALID_ISSUER_ID_EXCEPTION.getMessage()))); return ResponseEntity.status(HttpStatus.NOT_FOUND).body(responseWrapper); } diff --git a/src/main/java/io/mosip/mimoto/controller/PresentationController.java b/src/main/java/io/mosip/mimoto/controller/PresentationController.java index 4d47a442e..074eac0dc 100644 --- a/src/main/java/io/mosip/mimoto/controller/PresentationController.java +++ b/src/main/java/io/mosip/mimoto/controller/PresentationController.java @@ -1,6 +1,7 @@ package io.mosip.mimoto.controller; import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.constant.SwaggerLiteralConstants; import io.mosip.mimoto.dto.openid.presentation.PresentationDefinitionDTO; import io.mosip.mimoto.dto.openid.presentation.PresentationRequestDTO; import io.mosip.mimoto.exception.ErrorConstants; @@ -9,7 +10,14 @@ import io.mosip.mimoto.exception.VPNotCreatedException; import io.mosip.mimoto.service.PresentationService; import io.mosip.mimoto.service.VerifierService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -24,11 +32,12 @@ import java.util.Arrays; @RestController +@Slf4j +@Tag(name = SwaggerLiteralConstants.PRESENTATION_NAME, description = SwaggerLiteralConstants.PRESENTATION_DESCRIPTION) public class PresentationController { @Autowired PresentationService presentationService; - private final Logger logger = LoggerFactory.getLogger(PresentationController.class); @Value("${mosip.inji.ovp.error.redirect.url.pattern}") String injiOvpErrorRedirectUrlPattern; @@ -42,15 +51,17 @@ public class PresentationController { @Autowired ObjectMapper objectMapper; + @Operation( summary = SwaggerLiteralConstants.PRESENTATION_AUTHORIZE_SUMMARY, description = SwaggerLiteralConstants.PRESENTATION_AUTHORIZE_DESCRIPTION) + @ApiResponses({ @ApiResponse(responseCode = "302", content = { @Content(mediaType = "application/text") }) }) @GetMapping("/authorize") public void performAuthorization(HttpServletResponse response, - @RequestParam("response_type") String responseType, - @RequestParam("resource") String resource, - @RequestParam("presentation_definition") String presentationDefinition, - @RequestParam("client_id") String clientId, - @RequestParam("redirect_uri") String redirectUri ) throws IOException { + @RequestParam("response_type") @Schema(description = "Response Type of the Presentation" , defaultValue = "vp_token") String responseType, + @RequestParam("resource") @Schema(description = "URL Encoded Resource url of the Credential ") String resource, + @RequestParam("presentation_definition") @Schema(description = "URL Encoded presentation definition") String presentationDefinition, + @RequestParam("client_id") @Schema(description = "URL Encoded Client Id") String clientId, + @RequestParam("redirect_uri") @Schema(description = "URL Encoded Redirect URI") String redirectUri ) throws IOException { try { - logger.info("Started Presentation Authorization in the controller."); + log.info("Started Presentation Authorization in the controller."); verifierService.validateVerifier(clientId, redirectUri); PresentationDefinitionDTO presentationDefinitionDTO = objectMapper.readValue(presentationDefinition, PresentationDefinitionDTO.class); PresentationRequestDTO presentationRequestDTO = PresentationRequestDTO.builder() @@ -60,7 +71,7 @@ public void performAuthorization(HttpServletResponse response, .clientId(clientId) .redirectUri(redirectUri).build(); String redirectString = presentationService.authorizePresentation(presentationRequestDTO); - logger.info("Completed Presentation Authorization in the controller."); + log.info("Completed Presentation Authorization in the controller."); response.sendRedirect(redirectString); } catch( InvalidVerifierException exception){ sendRedirect(response, injiWebRedirectUrl, exception.getErrorCode(), exception.getErrorText(), exception); @@ -72,7 +83,7 @@ public void performAuthorization(HttpServletResponse response, } private void sendRedirect(HttpServletResponse response, String domain, String code, String message, Exception exception) throws IOException { - logger.error("Exception Occurred in Authorizing the presentation : \n\t code - " + code + "\n\t message - " + message + "\n\t Trace - " + Arrays.toString(exception.getStackTrace())); + log.error("Exception Occurred in Authorizing the presentation : \n\t code - " + code + "\n\t message - " + message + "\n\t Trace - " + Arrays.toString(exception.getStackTrace())); String injiVerifyRedirectString = String.format(injiOvpErrorRedirectUrlPattern, domain, code, diff --git a/src/main/java/io/mosip/mimoto/controller/ResidentServiceController.java b/src/main/java/io/mosip/mimoto/controller/ResidentServiceController.java index ff8fc462d..e0502b088 100644 --- a/src/main/java/io/mosip/mimoto/controller/ResidentServiceController.java +++ b/src/main/java/io/mosip/mimoto/controller/ResidentServiceController.java @@ -1,8 +1,16 @@ package io.mosip.mimoto.controller; +import io.mosip.mimoto.constant.ApiName; +import io.mosip.mimoto.constant.SwaggerLiteralConstants; +import io.mosip.mimoto.core.http.RequestWrapper; +import io.mosip.mimoto.core.http.ResponseWrapper; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.dto.resident.*; +import io.mosip.mimoto.service.RestClientService; +import io.mosip.mimoto.util.DateUtils; import io.mosip.mimoto.util.RequestValidator; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.http.HttpStatus; @@ -13,21 +21,12 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; -import io.mosip.kernel.core.logger.spi.Logger; -import io.mosip.mimoto.constant.ApiName; -import io.mosip.mimoto.core.http.RequestWrapper; -import io.mosip.mimoto.core.http.ResponseWrapper; -import io.mosip.mimoto.service.RestClientService; -import io.mosip.mimoto.util.DateUtils; -import io.mosip.mimoto.util.LoggerUtil; - import javax.validation.Valid; @RestController +@Tag(name = SwaggerLiteralConstants.RESIDENT_NAME, description = SwaggerLiteralConstants.RESIDENT_DESCRIPTION) public class ResidentServiceController { - private final Logger logger = LoggerUtil.getLogger(ResidentServiceController.class); - @Autowired public RestClientService restClientService; @@ -45,8 +44,9 @@ public class ResidentServiceController { * @throws Exception */ @PostMapping("/req/otp") + @Operation(summary = SwaggerLiteralConstants.RESIDENT_REQUEST_OTP_SUMMARY, description = SwaggerLiteralConstants.RESIDENT_REQUEST_OTP_DESCRIPTION) @SuppressWarnings("unchecked") - public ResponseEntity otpRequest(@Valid @RequestBody AppOTPRequestDTO requestDTO, BindingResult result) throws Exception { + public ResponseEntity> otpRequest(@Valid @RequestBody AppOTPRequestDTO requestDTO, BindingResult result) throws Exception { requestValidator.validateInputRequest(result); requestValidator.validateNotificationChannel(requestDTO.getOtpChannel()); OTPRequestDTO mosipOTPRequestPayload = new OTPRequestDTO(); @@ -72,6 +72,7 @@ public ResponseEntity otpRequest(@Valid @RequestBody AppOTPRequestDTO re * @throws Exception */ @PostMapping("/vid") + @Operation(hidden = true) @SuppressWarnings("unchecked") public ResponseEntity vidGenerate(@RequestBody AppVIDGenerateRequestDTO requestDTO) throws Exception { VIDGenerateRequestDTO vidRequestDTO = new VIDGenerateRequestDTO(); @@ -100,6 +101,7 @@ public ResponseEntity vidGenerate(@RequestBody AppVIDGenerateRequestDTO * @throws Exception */ @PostMapping("/req/auth/lock") + @Operation(hidden = true) @SuppressWarnings("unchecked") public ResponseEntity authLock(@RequestBody AuthLockRequestDTO requestDTO) throws Exception { RequestWrapper mosipAuthLockRequestPayload = new RequestWrapper<>(); @@ -121,6 +123,7 @@ public ResponseEntity authLock(@RequestBody AuthLockRequestDTO requestDT * @throws Exception */ @PostMapping("/req/auth/unlock") + @Operation(hidden = true) @SuppressWarnings("unchecked") public ResponseEntity authUnlock(@RequestBody AuthUnlockRequestDTO requestDTO) throws Exception { RequestWrapper mosipAuthUnlockRequestPayload = new RequestWrapper<>(); @@ -136,8 +139,9 @@ public ResponseEntity authUnlock(@RequestBody AuthUnlockRequestDTO reque } @PostMapping("/req/individualId/otp") + @Operation(summary = SwaggerLiteralConstants.RESIDENT_REQUEST_INDIVIDUALID_OTP_SUMMARY, description = SwaggerLiteralConstants.RESIDENT_REQUEST_INDIVIDUALID_OTP_DESCRIPTION) @SuppressWarnings("unchecked") - public ResponseEntity individualIdOtpRequest(@RequestBody IndividualIdOtpRequestDTO requestDTO) throws Exception { + public ResponseEntity individualIdOtpRequest(@RequestBody IndividualIdOtpRequestDTO requestDTO) throws Exception { IndividualIdOTPRequestDTO mosipOTPRequestPayload = new IndividualIdOTPRequestDTO(); mosipOTPRequestPayload.setId("mosip.identity.otp.internal"); mosipOTPRequestPayload.setVersion("1.0"); @@ -153,8 +157,9 @@ public ResponseEntity individualIdOtpRequest(@RequestBody IndividualIdOt } @PostMapping("/aid/get-individual-id") + @Operation(summary = SwaggerLiteralConstants.RESIDENT_GET_INDIVIDUALID_SUMMARY, description = SwaggerLiteralConstants.RESIDENT_GET_INDIVIDUALID_DESCRIPTION) @SuppressWarnings("unchecked") - public ResponseEntity aidGetIndividualId(@RequestBody AidStatusRequestDTO requestDTO) throws Exception { + public ResponseEntity> aidGetIndividualId(@RequestBody AidStatusRequestDTO requestDTO) throws Exception { InternalAidStatusDTO req = new InternalAidStatusDTO(requestDTO.getAid(), requestDTO.getOtp(), requestDTO.getTransactionID()); RequestWrapper mosipAuthLockRequestPayload = new RequestWrapper<>(); mosipAuthLockRequestPayload.setId("mosip.resident.checkstatus"); diff --git a/src/main/java/io/mosip/mimoto/controller/VerifiersController.java b/src/main/java/io/mosip/mimoto/controller/VerifiersController.java index 2f8a0bec2..7ff7d698d 100644 --- a/src/main/java/io/mosip/mimoto/controller/VerifiersController.java +++ b/src/main/java/io/mosip/mimoto/controller/VerifiersController.java @@ -1,13 +1,14 @@ package io.mosip.mimoto.controller; +import io.mosip.mimoto.constant.SwaggerLiteralConstants; import io.mosip.mimoto.core.http.ResponseWrapper; import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.openid.VerifiersDTO; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.service.VerifierService; -import io.mosip.mimoto.util.DateUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; @@ -23,25 +24,21 @@ @RestController @RequestMapping(value = "/verifiers") +@Slf4j +@Tag(name = SwaggerLiteralConstants.VERIFIERS_NAME, description = SwaggerLiteralConstants.VERIFIERS_DESCRIPTION) public class VerifiersController { @Autowired VerifierService verifierService; - private static final String ID = "mosip.mimoto.verifier"; - - private final Logger logger = LoggerFactory.getLogger(VerifiersController.class); - + @Operation(summary = SwaggerLiteralConstants.VERIFIERS_GET_VERIFIERS_SUMMARY, description = SwaggerLiteralConstants.VERIFIERS_GET_VERIFIERS_DESCRIPTION) @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity getAllTrustedVerifiers() { + public ResponseEntity> getAllTrustedVerifiers() { ResponseWrapper responseWrapper = new ResponseWrapper<>(); - responseWrapper.setId(ID); - responseWrapper.setVersion("v1"); - responseWrapper.setResponsetime(DateUtils.getRequestTimeString()); try { responseWrapper.setResponse(verifierService.getTrustedVerifiers()); } catch (ApiNotAccessibleException | IOException e) { - logger.error("Exception occurred while fetching trusted verifiers ", e); + log.error("Exception occurred while fetching trusted verifiers ", e); responseWrapper.setErrors(List.of(new ErrorDTO(API_NOT_ACCESSIBLE_EXCEPTION.getCode(), API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); } diff --git a/src/main/java/io/mosip/mimoto/core/http/ResponseWrapper.java b/src/main/java/io/mosip/mimoto/core/http/ResponseWrapper.java index 14b794e03..68c7b3982 100644 --- a/src/main/java/io/mosip/mimoto/core/http/ResponseWrapper.java +++ b/src/main/java/io/mosip/mimoto/core/http/ResponseWrapper.java @@ -7,19 +7,21 @@ import javax.validation.constraints.NotNull; import io.mosip.mimoto.dto.ErrorDTO; -import lombok.Data; +import lombok.*; @Data +@NoArgsConstructor public class ResponseWrapper { - private String id; - private String version; - String str; - private String responsetime; - private Object metadata; - @NotNull - @Valid private T response; - private List errors = new ArrayList<>(); + public void setResponse(T response) { + this.response = response; + this.errors = null; + } + + public void setErrors(List errors) { + this.errors = errors; + this.response = null; + } } diff --git a/src/main/java/io/mosip/mimoto/dto/DisplayDTO.java b/src/main/java/io/mosip/mimoto/dto/DisplayDTO.java index 17dc858c6..2689a0f1f 100644 --- a/src/main/java/io/mosip/mimoto/dto/DisplayDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/DisplayDTO.java @@ -1,6 +1,7 @@ package io.mosip.mimoto.dto; import com.google.gson.annotations.Expose; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import jakarta.validation.Valid; @@ -10,17 +11,22 @@ public class DisplayDTO { @Expose @NotBlank + @Schema(description = "Display Name of the Issuer") String name; @Expose @Valid + @Schema(description = "Display Logo of the Issuer") LogoDTO logo; @Expose @NotBlank + @Schema(description = "Display title of the Issuer") String title; @Expose @NotBlank + @Schema(description = "Display description of the Issuer") String description; @Expose @NotBlank + @Schema(description = "Display language of the Issuer") String language; } diff --git a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java index 3aa1529a3..b12749ece 100644 --- a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java @@ -5,6 +5,7 @@ import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; import io.mosip.mimoto.model.QRCodeType; +import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.Valid; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotEmpty; @@ -19,41 +20,52 @@ public class IssuerDTO { @Expose @NotBlank + @Schema(description = "Unique Identifier of the Issuer") String credential_issuer; @Expose @NotBlank + @Schema(description = "protocol of the download flow", allowableValues = {"OTP", "OpenId4VCI"}) String protocol; @Expose @Valid @NotEmpty + @Schema(description = "Display Properties of the Issuer") List display; @Expose @NotBlank + @Schema(description = "Client Id of the Onboarded Mimoto OIDC Client") String client_id; @NotBlank @Expose + @Schema(description = "Wellknown endpoint of the credential issuer") String wellknown_endpoint; @Expose @JsonInclude(NON_NULL) @NotBlank + @Schema(description = "Redirect URI configured while creating the OIDC Client") String redirect_uri; @JsonInclude(NON_NULL) @NotBlank + @Schema(description = "Authorization Audience for retrieving Token from token endpoint") String authorization_audience; @Expose @JsonInclude(NON_NULL) + @Schema(description = "Mimoto Token Endpoint Fetching the Token From Authorization Server with Client Assertion") String token_endpoint; @Expose @JsonInclude(NON_NULL) @NotBlank + @Schema(description = "Token Endpoint for Fetching the Token From Authorization Server") String proxy_token_endpoint; @Expose @JsonInclude(NON_NULL) @NotBlank + @Schema(description = "Client Alias of the Issuer in the keyStore file") String client_alias; QRCodeType qr_code_type; @Expose @JsonInclude(NON_NULL) @NotBlank + @Schema(description = "Toggler to Enable / Disable the Issuer", defaultValue = "false") String enabled; } diff --git a/src/main/java/io/mosip/mimoto/dto/IssuersDTO.java b/src/main/java/io/mosip/mimoto/dto/IssuersDTO.java index 5b7dcbe07..f7d5f837b 100644 --- a/src/main/java/io/mosip/mimoto/dto/IssuersDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/IssuersDTO.java @@ -1,6 +1,7 @@ package io.mosip.mimoto.dto; import com.google.gson.annotations.Expose; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import jakarta.validation.Valid; @@ -11,6 +12,7 @@ public class IssuersDTO { @Expose @Valid + @Schema(description = "List of Onboarded Issuers") List issuers; } diff --git a/src/main/java/io/mosip/mimoto/dto/LogoDTO.java b/src/main/java/io/mosip/mimoto/dto/LogoDTO.java index cce525a77..2793edf9e 100644 --- a/src/main/java/io/mosip/mimoto/dto/LogoDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/LogoDTO.java @@ -2,6 +2,7 @@ import com.google.gson.annotations.Expose; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import jakarta.validation.constraints.NotBlank; @@ -12,8 +13,10 @@ public class LogoDTO { @Expose @NotBlank @URL + @Schema(description = "Display logo uri of the Issuer") String url; @Expose @NotBlank + @Schema(description = "Display logo alt text of the Issuer") String alt_text; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpInnerReqDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpInnerReqDto.java index 828a49b12..0e981a24a 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpInnerReqDto.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpInnerReqDto.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.dto.mimoto; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import javax.validation.constraints.NotEmpty; @@ -8,9 +9,12 @@ @Data public class BindingOtpInnerReqDto { + @NotNull + @Schema(description = "Individual ID For Binding OTP") private String individualId; @NotNull @NotEmpty + @Schema(description = "Notifying medium in which OTP is sent", allowableValues = {"PHONE", "EMAIL"}) private List otpChannels; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpRequestDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpRequestDto.java index f9a8bab6a..c4629612b 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpRequestDto.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpRequestDto.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.dto.mimoto; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -11,9 +12,11 @@ @AllArgsConstructor @NoArgsConstructor public class BindingOtpRequestDto { + @Schema(description = "Request Time of the Binding OTP") private String requestTime; @Valid @NotNull + @Schema(description = "Binding OTP Request") private BindingOtpInnerReqDto request; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpResponseDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpResponseDto.java index a1f733c93..13c30dd49 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpResponseDto.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpResponseDto.java @@ -1,10 +1,14 @@ package io.mosip.mimoto.dto.mimoto; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @Data public class BindingOtpResponseDto { + @Schema(description = "Transaction Id of Binding OTP") private String transactionId; + @Schema(description = "Masked Email of Binding OTP") private String maskedEmail; + @Schema(description = "Masked Mobile Number of Binding OTP") private String maskedMobile; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDefinitionResponseDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDefinitionResponseDto.java index ac1bc541f..4181e8245 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDefinitionResponseDto.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDefinitionResponseDto.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.google.gson.annotations.SerializedName; +import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.Valid; import jakarta.validation.constraints.NotEmpty; import lombok.Data; @@ -15,11 +16,13 @@ public class CredentialDefinitionResponseDto { @NotEmpty @SerializedName("type") @JsonProperty("type") + @Schema(description = "Type of the Credential Definition") private List<@NotEmpty String> type; @NotEmpty @Valid @SerializedName("credentialSubject") @JsonProperty("credentialSubject") + @Schema(description = "Credential Subject of the VC") private Map<@NotEmpty String, @Valid CredentialDisplayResponseDto> credentialSubject; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDisplayResponseDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDisplayResponseDto.java index eeec2af82..be330f46c 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDisplayResponseDto.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDisplayResponseDto.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.google.gson.annotations.SerializedName; +import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.Valid; import jakarta.validation.constraints.NotEmpty; import lombok.Data; @@ -15,5 +16,6 @@ public class CredentialDisplayResponseDto { @Valid @SerializedName("display") @JsonProperty("display") + @Schema(description = "Display Properties of the Credential Issuer") private List<@Valid CredentialIssuerDisplayResponse> display; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerDisplayResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerDisplayResponse.java index 0fd6694d5..cff8eb93f 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerDisplayResponse.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerDisplayResponse.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.google.gson.annotations.SerializedName; +import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; import lombok.Data; @@ -11,10 +12,12 @@ public class CredentialIssuerDisplayResponse { @NotBlank @SerializedName("name") @JsonProperty("name") + @Schema(description = "Name of the Credential Issuer") private String name; @NotBlank @SerializedName("locale") @JsonProperty("locale") + @Schema(description = "Locale of the Credential Issuer") private String locale; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerWellKnownResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerWellKnownResponse.java index 17cb26ea2..d4523c3c1 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerWellKnownResponse.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerWellKnownResponse.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.google.gson.annotations.SerializedName; +import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.Valid; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotEmpty; @@ -18,22 +19,26 @@ public class CredentialIssuerWellKnownResponse { @URL @SerializedName("credential_issuer") @JsonProperty("credential_issuer") + @Schema(description = "Unique Identifier of the Credential Issuer") private String credentialIssuer; @NotEmpty @SerializedName("authorization_servers") @JsonProperty("authorization_servers") + @Schema(description = "List of Authorization Server Endpoint") private List<@NotBlank @URL String> authorizationServers; @NotBlank @SerializedName("credential_endpoint") @Pattern(regexp = "https?://.*?/credential$") @JsonProperty("credential_endpoint") + @Schema(description = "Endpoint to download the Credential") private String credentialEndPoint; @NotEmpty @Valid @SerializedName("credential_configurations_supported") @JsonProperty("credential_configurations_supported") + @Schema(description = "List of Credential Configurations Supported") private Map<@NotBlank String, @Valid CredentialsSupportedResponse> credentialConfigurationsSupported; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialSupportedDisplayResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialSupportedDisplayResponse.java index 53d2ea5eb..97a088532 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialSupportedDisplayResponse.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialSupportedDisplayResponse.java @@ -5,6 +5,7 @@ import com.google.gson.annotations.SerializedName; import io.mosip.mimoto.dto.BackgroundImageDTO; import io.mosip.mimoto.dto.LogoDTO; +import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; import lombok.Data; @@ -17,15 +18,18 @@ public class CredentialSupportedDisplayResponse { @Expose @NotBlank + @Schema(description = "Name of the Supported Credential") String name; @Expose @NotBlank + @Schema(description = "Locale of the Supported Credential") String locale; @Expose @NotNull @Valid + @Schema(description = "Logo of the Supported Credential") LogoDTO logo; @JsonProperty("background_image") @@ -33,17 +37,20 @@ public class CredentialSupportedDisplayResponse { @Expose @Valid @NotNull + @Schema(description = "Background Image of the Supported Credential") BackgroundImageDTO backgroundImage; @JsonProperty("background_color") @SerializedName("background_color") @Expose @NotBlank + @Schema(description = "Background Colour of the Supported Credential") String backgroundColor; @JsonProperty("text_color") @SerializedName("text_color") @Expose @NotBlank + @Schema(description = "Text Colour of the Supported Credential") String textColor; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java index 26dee4297..1422567f9 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.google.gson.annotations.SerializedName; +import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.Valid; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotEmpty; @@ -17,33 +18,41 @@ public class CredentialsSupportedResponse { @NotBlank(message = "Format must not be blank") + @Schema(description = "Format of the Credential") private String format; @NotBlank(message = "Scope must not be blank") + @Schema(description = "Scope of the Credential") private String scope; @JsonInclude(NON_NULL) + @Schema(description = "document Type of the Credential") private String doctype; @NotEmpty(message = "Proof types supported must not be empty") @Valid @SerializedName("proof_types_supported") @JsonProperty("proof_types_supported") + @Schema(description = "List of proof types supported") private Map<@NotEmpty String, @Valid ProofTypesSupported> proofTypesSupported; @JsonInclude(NON_NULL) + @Schema(description = "List of Claims") private Map claims; @SerializedName("credential_definition") @JsonProperty("credential_definition") @JsonInclude(NON_NULL) + @Schema(description = "Credential Definition of the VC") private CredentialDefinitionResponseDto credentialDefinition; @NotEmpty(message = "Display information must not be empty") @Valid @SerializedName("display") @JsonProperty("display") + @Schema(description = "Display Properties of the Supported Credential") private List<@Valid CredentialSupportedDisplayResponse> display; + @Schema(description = "Order of the Credentials Subject Render") private List order; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/IdpChallangeDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpChallangeDto.java index a1737c641..31b38274d 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/IdpChallangeDto.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/IdpChallangeDto.java @@ -1,10 +1,14 @@ package io.mosip.mimoto.dto.mimoto; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @Data public class IdpChallangeDto { + @Schema(description = "Auth Factory type", allowableValues = {"OTP"}) private String authFactorType; + @Schema(description = "IDP Challenge") private String challenge; + @Schema(description = "IDP Format", allowableValues = {"jwt"}) private String format; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/ProofTypesSupported.java b/src/main/java/io/mosip/mimoto/dto/mimoto/ProofTypesSupported.java index cdd54087c..faa6a460c 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/ProofTypesSupported.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/ProofTypesSupported.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.google.gson.annotations.SerializedName; +import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; import lombok.Data; @@ -15,5 +16,6 @@ public class ProofTypesSupported { @NotNull @JsonProperty("proof_signing_alg_values_supported") @SerializedName("proof_signing_alg_values_supported") + @Schema(description = "Support Alg for proof Signing") private List proofSigningAlgValuesSupported; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInnerReq.java b/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInnerReq.java index 940b8ffb6..e43998cbd 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInnerReq.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInnerReq.java @@ -1,14 +1,21 @@ package io.mosip.mimoto.dto.mimoto; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.util.List; @Data public class WalletBindingInnerReq { + + @Schema(description = "Individual Id ") private String individualId; + @Schema(description = "List of Challenges") private List challengeList; + @Schema(description = "public key in JWK") private String publicKey; + @Schema(description = "Auth Factory type", allowableValues = {"WLA"}) private String authFactorType; + @Schema(description = "IDP format", allowableValues = {"jwt"}) private String format; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInnerRequestDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInnerRequestDto.java index 690447f78..a0bd3397c 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInnerRequestDto.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInnerRequestDto.java @@ -1,15 +1,21 @@ package io.mosip.mimoto.dto.mimoto; import com.nimbusds.jose.jwk.JWK; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.util.List; @Data public class WalletBindingInnerRequestDto { + @Schema(description = "Individual Id of the Wallet Binding") private String individualId; + @Schema(description = "Challenge List of the Wallet Binding") private List challengeList; + @Schema(description = "Public Key of the Wallet Binding in JWK") private JwkDto publicKey; + @Schema(description = "Auth Factor Type of the Wallet Binding") private String authFactorType; + @Schema(description = "Format of the Wallet Binding") private String format; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInternalRequestDTO.java b/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInternalRequestDTO.java index 066ae184c..3abcebfe8 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInternalRequestDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInternalRequestDTO.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.dto.mimoto; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -8,7 +9,9 @@ @AllArgsConstructor @NoArgsConstructor public class WalletBindingInternalRequestDTO { + @Schema(description = "Request Time of the Wallet Binding") private String requestTime; + @Schema(description = "Body of the Request") private WalletBindingInnerRequestDto request; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInternalResponseDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInternalResponseDto.java index 5559b1f1b..e008fb0e1 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInternalResponseDto.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingInternalResponseDto.java @@ -1,10 +1,14 @@ package io.mosip.mimoto.dto.mimoto; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @Data public class WalletBindingInternalResponseDto { + @Schema(description = "Certificate of the Wallet Binding") private String certificate; + @Schema(description = "Wallet User Id of the Wallet Binding") private String walletUserId; + @Schema(description = "Date Time Expiry of the Wallet Binding") private String expireDateTime; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingRequestDTO.java b/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingRequestDTO.java index 9500a3f90..7473aa0d7 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingRequestDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingRequestDTO.java @@ -1,10 +1,14 @@ package io.mosip.mimoto.dto.mimoto; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @Data public class WalletBindingRequestDTO { + + @Schema(description = "Request time of the wallet binding") private String requestTime; + @Schema(description = "Request of the wallet binding") private WalletBindingInnerReq request; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingResponseDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingResponseDto.java index fd6ad6a7c..b1752ea6b 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingResponseDto.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/WalletBindingResponseDto.java @@ -1,12 +1,18 @@ package io.mosip.mimoto.dto.mimoto; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @Data public class WalletBindingResponseDto { + @Schema(description = "Certificate ID For Wallet Binding ") private String certificate; + @Schema(description = "Encrypted Wallet Binding ID Received in the Binding OTP") private String encryptedWalletBindingId; + @Schema(description = "Date Time of the Expiry") private String expireDateTime; + @Schema(description = "Thumbprint Received in the Binding OTP") private String thumbprint; + @Schema(description = "Key Id for Wallet Binding") private String keyId; } diff --git a/src/main/java/io/mosip/mimoto/dto/openid/VerifierDTO.java b/src/main/java/io/mosip/mimoto/dto/openid/VerifierDTO.java index 3aad45b8c..1785d0a39 100644 --- a/src/main/java/io/mosip/mimoto/dto/openid/VerifierDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/openid/VerifierDTO.java @@ -1,6 +1,7 @@ package io.mosip.mimoto.dto.openid; import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -14,11 +15,15 @@ @Builder public class VerifierDTO { @JsonProperty("client_id") + @Schema(description = "Client Id of the Verifier") String clientId; @JsonProperty("redirect_uris") + @Schema(description = "Redirect URIs of the Verifier") List redirectUris; @JsonProperty("response_uris") + @Schema(description = "Response URIs of the Verifier") List responseUris; -} \ No newline at end of file +} + diff --git a/src/main/java/io/mosip/mimoto/dto/openid/VerifiersDTO.java b/src/main/java/io/mosip/mimoto/dto/openid/VerifiersDTO.java index 36657eb2b..45f1b776f 100644 --- a/src/main/java/io/mosip/mimoto/dto/openid/VerifiersDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/openid/VerifiersDTO.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.dto.openid; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -12,5 +13,6 @@ @AllArgsConstructor @Builder public class VerifiersDTO { + @Schema(description = "Trusted Verifiers List") List verifiers; } diff --git a/src/main/java/io/mosip/mimoto/dto/openid/datashare/DataShareResponseDTO.java b/src/main/java/io/mosip/mimoto/dto/openid/datashare/DataShareResponseDTO.java index 17662916c..0b610ca1c 100644 --- a/src/main/java/io/mosip/mimoto/dto/openid/datashare/DataShareResponseDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/openid/datashare/DataShareResponseDTO.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.dto.openid.datashare; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -10,9 +11,19 @@ @AllArgsConstructor @NoArgsConstructor public class DataShareResponseDTO { + + @Schema(description = "url of the data share") private String url; + + @Schema(description = "The valid for in minutes.") private int validForInMinutes; + + @Schema(description = "The transactions allowed") private int transactionsAllowed; + + @Schema(description = "Static policy id") private String policyId; + + @Schema(description = "Static subscriber id") private String subscriberId; } diff --git a/src/main/java/io/mosip/mimoto/exception/ExceptionUtils.java b/src/main/java/io/mosip/mimoto/exception/ExceptionUtils.java index a5933f004..eff363700 100644 --- a/src/main/java/io/mosip/mimoto/exception/ExceptionUtils.java +++ b/src/main/java/io/mosip/mimoto/exception/ExceptionUtils.java @@ -1,24 +1,21 @@ package io.mosip.mimoto.exception; +import lombok.extern.slf4j.Slf4j; + import java.io.PrintWriter; import java.io.StringWriter; -import com.fasterxml.jackson.databind.JsonNode; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - /** * This utils contains exception utilities. - * + * * @author Shashank Agrawal * @author Ritesh Sinha * @since 1.0.0 * */ +@Slf4j public final class ExceptionUtils { - private static final Logger logger = LoggerFactory.getLogger(ExceptionUtils.class); - private ExceptionUtils() { } @@ -26,7 +23,7 @@ private ExceptionUtils() { /** * Returns an String object that can be used after building the exception stack * trace. - * + * * @param message the exception message * @param cause the cause * @return the exception stack @@ -47,7 +44,7 @@ public static String buildMessage(String message, Throwable cause) { /** * This method returns the stack trace - * + * * @param throwable the exception to be added to the list of exception * @return the stack trace */ @@ -59,7 +56,7 @@ public static String getStackTrace(Throwable throwable) { } public static void logRootCause(Throwable exception) { - logger.error("Exception Root Cause: {} ", exception.getMessage()); - logger.debug("Exception Root Cause:", exception); + log.error("Exception Root Cause: {} ", exception.getMessage()); + log.debug("Exception Root Cause:", exception); } } diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java index 15b74e849..2a0b97a5d 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java @@ -32,6 +32,7 @@ import io.mosip.vercred.CredentialsVerifier; import io.mosip.vercred.exception.*; import jakarta.annotation.PostConstruct; +import lombok.extern.slf4j.Slf4j; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; import org.jetbrains.annotations.NotNull; @@ -54,11 +55,10 @@ import static io.mosip.mimoto.exception.ErrorConstants.*; +@Slf4j @Service public class CredentialServiceImpl implements CredentialService { - private final Logger logger = LoggerUtil.getLogger(CredentialServiceImpl.class); - @Autowired private Utilities utilities; @@ -136,7 +136,7 @@ public ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String cred public VCCredentialResponse downloadCredential(String credentialEndpoint, VCCredentialRequest vcCredentialRequest, String accessToken) throws InvalidCredentialResourceException { VCCredentialResponse vcCredentialResponse = restApiClient.postApi(credentialEndpoint, MediaType.APPLICATION_JSON, vcCredentialRequest, VCCredentialResponse.class, accessToken); - logger.debug("VC Credential Response is -> " + vcCredentialResponse); + log.debug("VC Credential Response is -> " + vcCredentialResponse); if (vcCredentialResponse == null) throw new RuntimeException("VC Credential Issue API not accessible"); return vcCredentialResponse; } diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java index e10e0f26a..e5bb2cdb0 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java @@ -16,6 +16,7 @@ import io.mosip.mimoto.service.CredentialShareService; import io.mosip.mimoto.service.RestClientService; import io.mosip.mimoto.util.*; +import lombok.extern.slf4j.Slf4j; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; @@ -41,6 +42,7 @@ import java.security.spec.InvalidKeySpecException; import java.util.*; +@Slf4j @Service public class CredentialShareServiceImpl implements CredentialShareService { public static final String VC_REQUEST_FILE_NAME = "%s.json"; @@ -81,8 +83,6 @@ public class CredentialShareServiceImpl implements CredentialShareService { /** The Constant UIN_TEXT_FILE. */ public static final String UIN_TEXT_FILE = "textFile"; - private Logger logger = LoggerUtil.getLogger(CredentialShareServiceImpl.class); - @Value("${vercred.type.vid:PCN}") private String vid; @@ -121,7 +121,7 @@ public boolean generateDocuments(EventModel eventModel) throws Exception { Path eventFilePath = Path.of(utilities.getDataPath(), String.format(EVENT_JSON_FILE_NAME, eventModel.getEvent().getTransactionId())); Files.write(eventFilePath, gson.toJson(eventModel).getBytes(), StandardOpenOption.CREATE); - logger.info("Event data saved:: " + eventFilePath.toFile().getAbsolutePath()); + log.info("Event data saved:: " + eventFilePath.toFile().getAbsolutePath()); Map byteMap = new HashMap<>(); String decodedCredential = null; @@ -158,9 +158,9 @@ public boolean generateDocuments(EventModel eventModel) throws Exception { String.format(CARD_JSON_FILE_NAME, eventModel.getEvent().getTransactionId())); Files.deleteIfExists(textFilePath); Files.write(textFilePath, byteMap.get(UIN_TEXT_FILE), StandardOpenOption.CREATE); - logger.info("Generated files from event:: " + textFilePath.toFile().getAbsolutePath()); + log.info("Generated files from event:: " + textFilePath.toFile().getAbsolutePath()); } catch (Exception e){ - logger.error(e.getMessage(), e); + log.error(e.getMessage(), e); return false; } @@ -175,7 +175,7 @@ public org.json.JSONObject decrypt(String credential, String credentialSubject, } catch (Exception e) { description.setMessage(PlatformErrorMessages.MIMOTO_VC_DECRYPTION_FAILED.getMessage()); description.setCode(PlatformErrorMessages.MIMOTO_VC_DECRYPTION_FAILED.getCode()); - logger.error(description.toString(), e); + log.error(description.toString(), e); throw new DocumentGeneratorException(DocumentGeneratorExceptionCodeConstant.VC_DECRYPTION_EXCEPTION.getErrorCode(), e.getMessage() + ExceptionUtils.getStackTrace(e)); } @@ -188,7 +188,7 @@ public Map getDocuments( String credentialType, String requestId, String sign) { - logger.debug(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.REGISTRATIONID.toString(), + log.debug(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.REGISTRATIONID.toString(), "CredentialShareServiceImpl::getDocuments()::entry"); Map byteMap = new HashMap<>(); @@ -214,7 +214,7 @@ else if (credentialJSON.has(vid)) } catch (Exception e) { description.setMessage(PlatformErrorMessages.MIMOTO_DOCUMENT_GENERATION_FAILED.getMessage()); description.setCode(PlatformErrorMessages.MIMOTO_DOCUMENT_GENERATION_FAILED.getCode()); - logger.error(description.toString(), e); + log.error(description.toString(), e); throw new DocumentGeneratorException(DocumentGeneratorExceptionCodeConstant.PDF_EXCEPTION.getErrorCode(), e.getMessage() + ExceptionUtils.getStackTrace(e)); @@ -244,7 +244,7 @@ else if (credentialJSON.has(vid)) auditLogRequestBuilder.createAuditRequestBuilder(description.getMessage(), eventId, eventName, eventType, moduleId, moduleName, id); } - logger.debug(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.REGISTRATIONID.toString(), "", + log.debug(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.REGISTRATIONID.toString(), "", "CredentialShareServiceImpl::getDocuments()::exit"); return byteMap; @@ -304,7 +304,7 @@ public org.json.JSONObject getBiometricsDataJSON(String individualBiometric) { } } } catch (Exception e) { - logger.error("Something wrong when trying to get biometrics data", e); + log.error("Something wrong when trying to get biometrics data", e); } } @@ -402,7 +402,7 @@ public org.json.JSONObject decryptAttribute(org.json.JSONObject data, String enc cryptoWithPinResponseDto = cryptoUtil.decryptWithPin(cryptoWithPinRequestDto); } catch (InvalidKeyException | NoSuchAlgorithmException | InvalidKeySpecException | InvalidAlgorithmParameterException | IllegalBlockSizeException | BadPaddingException e) { - logger.error("Error while decrypting the data", e); + log.error("Error while decrypting the data", e); throw new CryptoManagerException(PlatformErrorMessages.MIMOTO_INVALID_KEY_EXCEPTION.getCode(), PlatformErrorMessages.MIMOTO_INVALID_KEY_EXCEPTION.getMessage(), e); } diff --git a/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java index 3674b3876..b65c50c5a 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java @@ -9,6 +9,7 @@ import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.util.RestApiClient; import jakarta.annotation.PostConstruct; +import lombok.extern.slf4j.Slf4j; import org.apache.oro.text.regex.PatternMatcher; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -25,6 +26,7 @@ import java.net.URL; +@Slf4j @Service public class DataShareServiceImpl { @@ -43,8 +45,6 @@ public class DataShareServiceImpl { @Value("${mosip.data.share.create.retry.count}") Integer maxRetryCount; - private final Logger logger = LoggerFactory.getLogger(DataShareServiceImpl.class); - @Autowired ObjectMapper objectMapper; @@ -69,7 +69,7 @@ public String getFilename() { HttpEntity> requestEntity = new HttpEntity<>(map, headers); DataShareResponseWrapperDTO dataShareResponseWrapperDTO = pushCredentialIntoDataShare(requestEntity); - logger.info("Data pushed into DataShare -> " + dataShareResponseWrapperDTO); + log.info("Data pushed into DataShare -> " + dataShareResponseWrapperDTO); return dataShareResponseWrapperDTO.getDataShare().getUrl(); } @@ -80,7 +80,7 @@ private DataShareResponseWrapperDTO pushCredentialIntoDataShare(HttpEntity " + vcCredentialResponse ); + log.info("Completed Mapping the Credential to Object => " + vcCredentialResponse ); if(vcCredentialResponse.getCredential() == null){ throw new InvalidCredentialResourceException(ErrorConstants.RESOURCE_EXPIRED.getErrorMessage()); } diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index 074c7b4c5..8e6936e6f 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -5,7 +5,6 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.Gson; import com.google.gson.GsonBuilder; -import io.mosip.kernel.core.logger.spi.Logger; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.IssuersDTO; import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; @@ -15,7 +14,6 @@ import io.mosip.mimoto.exception.InvalidWellknownResponseException; import io.mosip.mimoto.service.IssuersService; import io.mosip.mimoto.util.CredentialIssuerWellknownResponseValidator; -import io.mosip.mimoto.util.LoggerUtil; import io.mosip.mimoto.util.RestApiClient; import io.mosip.mimoto.util.Utilities; import jakarta.validation.Validator; @@ -31,7 +29,6 @@ @Service public class IssuersServiceImpl implements IssuersService { - private final Logger logger = LoggerUtil.getLogger(IssuersServiceImpl.class); @Autowired private Utilities utilities; diff --git a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java index 005183e91..409d86224 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java @@ -10,6 +10,7 @@ import io.mosip.mimoto.exception.VPNotCreatedException; import io.mosip.mimoto.service.PresentationService; import io.mosip.mimoto.util.RestApiClient; +import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -23,6 +24,7 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; +@Slf4j @Service public class PresentationServiceImpl implements PresentationService { @@ -44,8 +46,6 @@ public class PresentationServiceImpl implements PresentationService { @Value("${server.tomcat.max-http-response-header-size:65536}") Integer maximumResponseHeaderSize; - private final Logger logger = LoggerFactory.getLogger(PresentationServiceImpl.class); - @Override public String authorizePresentation(PresentationRequestDTO presentationRequestDTO) throws IOException { VCCredentialResponse vcCredentialResponse = dataShareService.downloadCredentialFromDataShare(presentationRequestDTO); @@ -55,7 +55,7 @@ public String authorizePresentation(PresentationRequestDTO presentationRequestDT throw new VPNotCreatedException(ErrorConstants.INVALID_REQUEST.getErrorMessage()); } - logger.info("Started the Constructing VP Token"); + log.info("Started the Constructing VP Token"); String redirectionString = presentationDefinitionDTO.getInputDescriptors() .stream() .findFirst() @@ -64,7 +64,7 @@ public String authorizePresentation(PresentationRequestDTO presentationRequestDT .stream() .anyMatch(proofType -> vcCredentialResponse.getCredential().getProof().getType().equals(proofType)); if (matchingProofTypes) { - logger.info("Started the Construction of VP token"); + log.info("Started the Construction of VP token"); try { VerifiablePresentationDTO verifiablePresentationDTO = constructVerifiablePresentationString(vcCredentialResponse.getCredential()); String presentationSubmission = constructPresentationSubmission(verifiablePresentationDTO, presentationDefinitionDTO, inputDescriptorDTO); @@ -77,7 +77,7 @@ public String authorizePresentation(PresentationRequestDTO presentationRequestDT throw new VPNotCreatedException(ErrorConstants.INVALID_REQUEST.getErrorMessage()); } } - logger.info("No Credentials Matched the VP request."); + log.info("No Credentials Matched the VP request."); throw new VPNotCreatedException(ErrorConstants.INVALID_REQUEST.getErrorMessage()); }).orElseThrow(() -> new VPNotCreatedException(ErrorConstants.INVALID_REQUEST.getErrorMessage())); if(redirectionString.length() > maximumResponseHeaderSize) { diff --git a/src/main/java/io/mosip/mimoto/service/impl/RestClientServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/RestClientServiceImpl.java index 85ca72b86..64712373c 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/RestClientServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/RestClientServiceImpl.java @@ -1,8 +1,12 @@ package io.mosip.mimoto.service.impl; -import java.util.List; - +import io.mosip.mimoto.constant.ApiName; import io.mosip.mimoto.constant.LoggerFileConstant; +import io.mosip.mimoto.exception.ApisResourceAccessException; +import io.mosip.mimoto.exception.PlatformErrorMessages; +import io.mosip.mimoto.service.RestClientService; +import io.mosip.mimoto.util.RestApiClient; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.http.MediaType; @@ -12,25 +16,17 @@ import org.springframework.web.util.UriComponents; import org.springframework.web.util.UriComponentsBuilder; -import io.mosip.kernel.core.logger.spi.Logger; -import io.mosip.mimoto.constant.ApiName; -import io.mosip.mimoto.exception.ApisResourceAccessException; -import io.mosip.mimoto.exception.PlatformErrorMessages; -import io.mosip.mimoto.service.RestClientService; -import io.mosip.mimoto.util.LoggerUtil; -import io.mosip.mimoto.util.RestApiClient; +import java.util.List; /** * The Class RestClientServiceImpl. - * + * * @author Rishabh Keshari */ +@Slf4j @Service public class RestClientServiceImpl implements RestClientService { - /** The logger. */ - Logger logger = LoggerUtil.getLogger(RestClientServiceImpl.class); - /** The rest api client. */ @Autowired private RestApiClient restApiClient; @@ -41,7 +37,7 @@ public class RestClientServiceImpl implements RestClientService { /* * (non-Javadoc) - * + * * @see io.mosip.registration.processor.core.spi.restclient. * RestClientService#getApi(io.mosip.registration. * processor .core.code.ApiName, @@ -51,7 +47,7 @@ public class RestClientServiceImpl implements RestClientService { @Override public Object getApi(ApiName apiName, List pathsegments, String queryParamName, String queryParamValue, Class responseType) throws ApisResourceAccessException { - logger.debug("RestClientServiceImpl::getApi()::entry"); + log.debug("RestClientServiceImpl::getApi()::entry"); Object obj = null; String apiHostIpPort = env.getProperty(apiName.name()); @@ -71,18 +67,18 @@ public Object getApi(ApiName apiName, List pathsegments, String queryPar try { uriComponents = builder.build(false).encode(); - logger.debug(uriComponents.toUri().toString(), "URI"); + log.debug(uriComponents.toUri().toString(), "URI"); obj = restApiClient.getApi(uriComponents.toUri(), responseType); } catch (Exception e) { - logger.error(e.getMessage(), e); + log.error(e.getMessage(), e); throw new ApisResourceAccessException( PlatformErrorMessages.MIMOTO_RCT_UNKNOWN_RESOURCE_EXCEPTION.getCode(), e); } } - logger.debug("RestClientServiceImpl::getApi()::exit"); + log.debug("RestClientServiceImpl::getApi()::exit"); return obj; } @@ -90,7 +86,7 @@ public Object getApi(ApiName apiName, List pathsegments, String queryPar public Object getApi(ApiName apiName, List pathsegments, List queryParamName, List queryParamValue, Class responseType) throws ApisResourceAccessException { - logger.debug("RestClientServiceImpl::getApi()::entry"); + log.debug("RestClientServiceImpl::getApi()::entry"); Object obj = null; String apiHostIpPort = env.getProperty(apiName.name()); @@ -113,24 +109,24 @@ public Object getApi(ApiName apiName, List pathsegments, List qu try { uriComponents = builder.build(false).encode(); - logger.debug(uriComponents.toUri().toString(), "URI"); + log.debug(uriComponents.toUri().toString(), "URI"); obj = restApiClient.getApi(uriComponents.toUri(), responseType); } catch (Exception e) { - logger.error(e.getMessage(), e); + log.error(e.getMessage(), e); throw new ApisResourceAccessException( PlatformErrorMessages.MIMOTO_RCT_UNKNOWN_RESOURCE_EXCEPTION.getCode(), e); } } - logger.debug("RestClientServiceImpl::getApi()::exit"); + log.debug("RestClientServiceImpl::getApi()::exit"); return obj; } public Object postApi(ApiName apiName, String queryParamName, String queryParamValue, Object requestedData, Class responseType, MediaType mediaType) throws ApisResourceAccessException { - logger.debug(LoggerFileConstant.REST_CLIENT_SERVICE_IMPL_POST_API_ENTRY); + log.debug(LoggerFileConstant.REST_CLIENT_SERVICE_IMPL_POST_API_ENTRY); Object obj = null; String apiHostIpPort = env.getProperty(apiName.name()); @@ -147,20 +143,20 @@ public Object postApi(ApiName apiName, String queryParamName, String queryParamV obj = restApiClient.postApi(builder.toUriString(), mediaType, requestedData, responseType); } catch (Exception e) { - logger.error(e.getMessage(), e); + log.error(e.getMessage(), e); throw new ApisResourceAccessException( PlatformErrorMessages.MIMOTO_RCT_UNKNOWN_RESOURCE_EXCEPTION.getMessage(), e); } } - logger.debug(LoggerFileConstant.REST_CLIENT_SERVICE_IMPL_POST_API_EXIT); + log.debug(LoggerFileConstant.REST_CLIENT_SERVICE_IMPL_POST_API_EXIT); return obj; } /* * (non-Javadoc) - * + * * @see io.mosip.registration.processor.core.spi.restclient. * RestClientService#postApi(io.mosip.registration. * processor.core.code.ApiName, @@ -175,7 +171,7 @@ public Object postApi(ApiName apiName, String queryParamName, String queryParamV /* * (non-Javadoc) - * + * * @see io.mosip.registration.processor.core.spi.restclient. * RestClientService#postApi(io.mosip.registration. * processor.core.code.ApiName, java.util.List, java.lang.String, @@ -185,7 +181,7 @@ public Object postApi(ApiName apiName, String queryParamName, String queryParamV public Object postApi(ApiName apiName, List pathsegments, String queryParamName, String queryParamValue, Object requestedData, Class responseType) throws ApisResourceAccessException { - logger.debug(LoggerFileConstant.REST_CLIENT_SERVICE_IMPL_POST_API_ENTRY); + log.debug(LoggerFileConstant.REST_CLIENT_SERVICE_IMPL_POST_API_ENTRY); Object obj = null; String apiHostIpPort = env.getProperty(apiName.name()); UriComponentsBuilder builder = null; @@ -209,14 +205,14 @@ public Object postApi(ApiName apiName, List pathsegments, String queryPa obj = restApiClient.postApi(builder.toUriString(), null, requestedData, responseType); } catch (Exception e) { - logger.error(e.getMessage(), e); + log.error(e.getMessage(), e); throw new ApisResourceAccessException( PlatformErrorMessages.MIMOTO_RCT_UNKNOWN_RESOURCE_EXCEPTION.getMessage(), e); } } - logger.debug(LoggerFileConstant.REST_CLIENT_SERVICE_IMPL_POST_API_EXIT); + log.debug(LoggerFileConstant.REST_CLIENT_SERVICE_IMPL_POST_API_EXIT); return obj; } @@ -225,7 +221,7 @@ public Object postApi(ApiName apiName, MediaType mediaType, List pathseg List queryParamValue, Object requestedData, Class responseType) throws ApisResourceAccessException { - logger.debug(LoggerFileConstant.REST_CLIENT_SERVICE_IMPL_POST_API_ENTRY); + log.debug(LoggerFileConstant.REST_CLIENT_SERVICE_IMPL_POST_API_ENTRY); Object obj = null; String apiHostIpPort = env.getProperty(apiName.name()); UriComponentsBuilder builder = null; @@ -247,14 +243,14 @@ public Object postApi(ApiName apiName, MediaType mediaType, List pathseg obj = restApiClient.postApi(builder.toUriString(), mediaType, requestedData, responseType); } catch (Exception e) { - logger.error(e.getMessage(), e); + log.error(e.getMessage(), e); throw new ApisResourceAccessException( PlatformErrorMessages.MIMOTO_RCT_UNKNOWN_RESOURCE_EXCEPTION.getMessage(), e); } } - logger.debug(LoggerFileConstant.REST_CLIENT_SERVICE_IMPL_POST_API_EXIT); + log.debug(LoggerFileConstant.REST_CLIENT_SERVICE_IMPL_POST_API_EXIT); return obj; } @@ -262,19 +258,19 @@ public Object postApi(ApiName apiName, MediaType mediaType, List pathseg public Object postApi(ApiName apiName, Object requestedData, Class responseType, boolean useBearerToken) throws ApisResourceAccessException { - logger.debug(LoggerFileConstant.REST_CLIENT_SERVICE_IMPL_POST_API_ENTRY); + log.debug(LoggerFileConstant.REST_CLIENT_SERVICE_IMPL_POST_API_ENTRY); Object obj = null; String apiHostIpPort = env.getProperty(apiName.name()); if (apiHostIpPort != null) { try { obj = restApiClient.postApi(apiHostIpPort, MediaType.APPLICATION_JSON, requestedData, responseType, useBearerToken); } catch (Exception e) { - logger.error(e.getMessage(), e); + log.error(e.getMessage(), e); throw new ApisResourceAccessException( PlatformErrorMessages.MIMOTO_RCT_UNKNOWN_RESOURCE_EXCEPTION.getMessage(), e); } } - logger.debug(LoggerFileConstant.REST_CLIENT_SERVICE_IMPL_POST_API_EXIT); + log.debug(LoggerFileConstant.REST_CLIENT_SERVICE_IMPL_POST_API_EXIT); return obj; } @@ -293,4 +289,4 @@ private void addPathSegments(List pathSegments, UriComponentsBuilder bui } } } -} \ No newline at end of file +} diff --git a/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java index 42bdc95a6..dd13c96e8 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java @@ -9,6 +9,7 @@ import io.mosip.mimoto.exception.InvalidVerifierException; import io.mosip.mimoto.service.VerifierService; import io.mosip.mimoto.util.Utilities; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.validator.routines.UrlValidator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -22,7 +23,7 @@ import static org.apache.commons.validator.routines.UrlValidator.ALLOW_ALL_SCHEMES; import static org.apache.commons.validator.routines.UrlValidator.ALLOW_LOCAL_URLS; - +@Slf4j @Service public class VerifierServiceImpl implements VerifierService { @@ -61,7 +62,7 @@ public Optional getVerifierByClientId(String clientId) throws ApiNo @Override public void validateVerifier(String clientId, String redirectUri) throws ApiNotAccessibleException, JsonProcessingException { - logger.info("Started the presentation Validation"); + log.info("Started the presentation Validation"); getVerifierByClientId(clientId).ifPresentOrElse( (verifierDTO) -> { boolean isValidVerifier = verifierDTO.getRedirectUris().stream().anyMatch(registeredRedirectUri -> diff --git a/src/main/java/io/mosip/mimoto/util/AttestationOfflineVerify.java b/src/main/java/io/mosip/mimoto/util/AttestationOfflineVerify.java index 32b2355e6..9c7d1c58f 100644 --- a/src/main/java/io/mosip/mimoto/util/AttestationOfflineVerify.java +++ b/src/main/java/io/mosip/mimoto/util/AttestationOfflineVerify.java @@ -19,6 +19,7 @@ import com.google.api.client.json.jackson2.JacksonFactory; import com.google.api.client.json.webtoken.JsonWebSignature; +import lombok.extern.slf4j.Slf4j; import org.apache.http.conn.ssl.DefaultHostnameVerifier; import org.springframework.stereotype.Component; @@ -33,9 +34,9 @@ /** * Verify the device attestation statement offline. */ +@Slf4j @Component public class AttestationOfflineVerify { - private final Logger logger = LoggerUtil.getLogger(AttestationOfflineVerify.class); private final DefaultHostnameVerifier HOSTNAME_VERIFIER = new DefaultHostnameVerifier(); @@ -64,8 +65,8 @@ public AttestationStatement parseAndVerify(String signedAttestationStatment) thr if (!verifyHostname("attest.android.com", cert)) { throw new Exception("Certificate isn't issued for the hostname attest.android.com."); } - - logger.info("Sucessfully verified the signature of the attestation statement using offline method."); + + log.info("Sucessfully verified the signature of the attestation statement using offline method."); // Extract and use the payload data. AttestationStatement stmt = (AttestationStatement) jws.getPayload(); @@ -88,7 +89,7 @@ private boolean verifyHostname(String hostname, X509Certificate leafCert) { HOSTNAME_VERIFIER.verify(hostname, leafCert); return true; } catch (SSLException e) { - logger.error("Error when verifying hostname", e); + log.error("Error when verifying hostname", e); } return false; diff --git a/src/main/java/io/mosip/mimoto/util/AttestationOnlineVerify.java b/src/main/java/io/mosip/mimoto/util/AttestationOnlineVerify.java index c0e2a5b0c..9d94361ef 100644 --- a/src/main/java/io/mosip/mimoto/util/AttestationOnlineVerify.java +++ b/src/main/java/io/mosip/mimoto/util/AttestationOnlineVerify.java @@ -29,6 +29,7 @@ import com.google.api.client.json.jackson2.JacksonFactory; import com.google.api.client.util.Base64; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @@ -47,8 +48,8 @@ * otherwise all requests will fail. */ @Component +@Slf4j public class AttestationOnlineVerify { - private final Logger logger = LoggerUtil.getLogger(AttestationOnlineVerify.class); private final HttpTransport HTTP_TRANSPORT = new NetHttpTransport(); @@ -118,7 +119,7 @@ public AttestationStatement parseAndVerify(String signedAttestationStatment) thr throw new Exception("The cryptographic signature of the attestation statement couldn't be " + "verified."); } - logger.info("Sucessfully verified the signature of the attestation statement using online method."); + log.info("Sucessfully verified the signature of the attestation statement using online method."); // The signature is valid, extract the data JSON from the JWS signature. byte[] data = extractJwsData(signedAttestationStatment); diff --git a/src/main/java/io/mosip/mimoto/util/AuditLogRequestBuilder.java b/src/main/java/io/mosip/mimoto/util/AuditLogRequestBuilder.java index b76858957..b00255f09 100644 --- a/src/main/java/io/mosip/mimoto/util/AuditLogRequestBuilder.java +++ b/src/main/java/io/mosip/mimoto/util/AuditLogRequestBuilder.java @@ -1,11 +1,5 @@ package io.mosip.mimoto.util; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.env.Environment; -import org.springframework.stereotype.Component; - import io.mosip.mimoto.constant.ApiName; import io.mosip.mimoto.constant.AuditLogConstant; import io.mosip.mimoto.constant.LoggerFileConstant; @@ -15,18 +9,20 @@ import io.mosip.mimoto.dto.AuditResponseDto; import io.mosip.mimoto.exception.ApisResourceAccessException; import io.mosip.mimoto.service.RestClientService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; /** * The Class AuditRequestBuilder. - * + * * @author Rishabh Keshari */ +@Slf4j @Component public class AuditLogRequestBuilder { - /** The logger. */ - private final Logger logger = LoggerFactory.getLogger(AuditLogRequestBuilder.class); - /** The registration processor rest service. */ @Autowired private RestClientService registrationProcessorRestService; @@ -55,7 +51,7 @@ public class AuditLogRequestBuilder { */ @SuppressWarnings("unchecked") public ResponseWrapper createAuditRequestBuilder(String description, String eventId, String eventName, String eventType, String registrationId, ApiName apiname) { - logger.debug(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.REGISTRATIONID.toString(), + log.debug(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.REGISTRATIONID.toString(), registrationId, "AuditLogRequestBuilder:: createAuditRequestBuilder(String description, String eventId, String eventName, String eventType,\r\n String registrationId, ApiName apiname)::entry"); @@ -88,10 +84,10 @@ public ResponseWrapper createAuditRequestBuilder(String descri "", requestWrapper, ResponseWrapper.class); } catch (ApisResourceAccessException arae) { - logger.error(arae.getMessage()); + log.error(arae.getMessage()); } - logger.debug(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.REGISTRATIONID.toString(), + log.debug(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.REGISTRATIONID.toString(), registrationId, "AuditLogRequestBuilder:: createAuditRequestBuilder(String description, String eventId, String eventName, String eventType,\r\n" + " String registrationId, ApiName apiname)::exit"); @@ -102,7 +98,7 @@ public ResponseWrapper createAuditRequestBuilder(String descri @SuppressWarnings("unchecked") public ResponseWrapper createAuditRequestBuilder(String description, String eventId, String eventName, String eventType, String moduleId, String moduleName, String registrationId) { - logger.debug(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.REGISTRATIONID.toString(), + log.debug(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.REGISTRATIONID.toString(), registrationId, "AuditLogRequestBuilder:: createAuditRequestBuilder(String description, String eventId, String eventName, String eventType,String moduleId,String moduleName,\r\n" + " String registrationId)::entry"); @@ -140,10 +136,10 @@ public ResponseWrapper createAuditRequestBuilder(String descri } catch (ApisResourceAccessException arae) { - logger.error(arae.getMessage()); + log.error(arae.getMessage()); } - logger.debug(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.REGISTRATIONID.toString(), + log.debug(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.REGISTRATIONID.toString(), registrationId, "AuditLogRequestBuilder:: createAuditRequestBuilder(String description, String eventId, String eventName, String eventType,String moduleId,String moduleName,\r\n" + " String registrationId)::exit"); diff --git a/src/main/java/io/mosip/mimoto/util/CbeffToBiometricUtil.java b/src/main/java/io/mosip/mimoto/util/CbeffToBiometricUtil.java index c2372f069..1174d03b7 100644 --- a/src/main/java/io/mosip/mimoto/util/CbeffToBiometricUtil.java +++ b/src/main/java/io/mosip/mimoto/util/CbeffToBiometricUtil.java @@ -3,7 +3,6 @@ import io.mosip.kernel.biometrics.constant.BiometricType; import io.mosip.kernel.biometrics.entities.BIR; import io.mosip.kernel.biometrics.spi.CbeffUtil; -import io.mosip.kernel.core.logger.spi.Logger; import org.apache.commons.codec.binary.Base64; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -12,14 +11,12 @@ /** * The Class CbeffToBiometricUtil. - * + * * @author Monobikash Das */ @Component public class CbeffToBiometricUtil { - Logger logger = LoggerUtil.getLogger(CbeffToBiometricUtil.class); - /** The cbeffutil. */ @Autowired private CbeffUtil cbeffutil; diff --git a/src/main/java/io/mosip/mimoto/util/CredentialShareExceptionHandler.java b/src/main/java/io/mosip/mimoto/util/CredentialShareExceptionHandler.java index 934da8823..89ac82138 100644 --- a/src/main/java/io/mosip/mimoto/util/CredentialShareExceptionHandler.java +++ b/src/main/java/io/mosip/mimoto/util/CredentialShareExceptionHandler.java @@ -12,7 +12,6 @@ import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; -import io.mosip.kernel.core.logger.spi.Logger; import io.mosip.mimoto.controller.CredentialShareController; import io.mosip.mimoto.dto.CredentialShareResponse; import io.mosip.mimoto.dto.ErrorDTO; @@ -23,7 +22,7 @@ /** * The Class CredentialShareExceptionHandler. - * + * * @author M1048358 Alok */ @RestControllerAdvice(assignableTypes = CredentialShareController.class) @@ -42,8 +41,6 @@ public class CredentialShareExceptionHandler { @Autowired private Environment env; - private Logger logger = LoggerUtil.getLogger(CredentialShareExceptionHandler.class); - @ExceptionHandler(MethodArgumentNotValidException.class) public ResponseEntity badRequest(MethodArgumentNotValidException ex) { @@ -98,4 +95,4 @@ private ResponseEntity buildApiExceptionResponse(Except return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(response); } -} \ No newline at end of file +} diff --git a/src/main/java/io/mosip/mimoto/util/CryptoCoreUtil.java b/src/main/java/io/mosip/mimoto/util/CryptoCoreUtil.java index 873410d5d..11fe4ad2e 100644 --- a/src/main/java/io/mosip/mimoto/util/CryptoCoreUtil.java +++ b/src/main/java/io/mosip/mimoto/util/CryptoCoreUtil.java @@ -33,6 +33,7 @@ import javax.crypto.spec.PSource.PSpecified; import javax.crypto.spec.SecretKeySpec; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.digest.DigestUtils; import org.bouncycastle.crypto.InvalidCipherTextException; import org.bouncycastle.crypto.digests.SHA256Digest; @@ -47,9 +48,9 @@ import io.mosip.mimoto.exception.CryptoManagerException; import io.mosip.mimoto.exception.PlatformErrorMessages; +@Slf4j @Component public class CryptoCoreUtil { - static Logger logger = LoggerUtil.getLogger(CryptoCoreUtil.class); private final static String RSA_ECB_OAEP_PADDING = "RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING"; @@ -78,7 +79,7 @@ public String decrypt(String data) throws Exception { byte[] data1 = decryptData(dataBytes, privateKeyEntry); decryptedData = new String(data1); }catch (Exception e){ - logger.error( "Not able to decrypt the data", e); + log.error( "Not able to decrypt the data", e); } return decryptedData; } @@ -98,7 +99,7 @@ public PrivateKeyEntry loadP12(String fileName, String alias, String cyptoPasswo ProtectionParameter password = new PasswordProtection(cyptoPassword.toCharArray()); privateKeyEntry = (PrivateKeyEntry) mosipKeyStore.getEntry(alias, password); } catch (UnrecoverableEntryException | CertificateException | KeyStoreException | IOException|NoSuchAlgorithmException e) { - logger.error( "Not able to decrypt the data", e); + log.error( "Not able to decrypt the data", e); } finally { if (keystoreResourceStream != null) { keystoreResourceStream.close(); @@ -147,7 +148,7 @@ public byte[] decryptData(byte[] requestData, PrivateKeyEntry privateKey) throws return symmetricDecrypt(symmetricKey, encryptedData, null); } } catch (Exception e) { - logger.error( "Not able to decrypt the data {}", e); + log.error( "Not able to decrypt the data {}", e); } return null; } @@ -201,7 +202,7 @@ private static byte[] asymmetricDecrypt(PrivateKey privateKey, BigInteger keyMod cipher.init(Cipher.DECRYPT_MODE, privateKey, oaepParams); return cipher.doFinal(data); } catch (java.security.NoSuchAlgorithmException e) { - logger.error("Not able to decrypt the data {}", e); + log.error("Not able to decrypt the data {}", e); throw new NoSuchAlgorithmException(e); } catch (NoSuchPaddingException e) { throw new NoSuchPaddingException(e.getMessage()); @@ -245,34 +246,34 @@ public byte[] symmetricDecrypt(SecretKey key, byte[] data, byte[] nonce, byte[] } output = cipher.doFinal(data, 0, data.length); } catch (InvalidAlgorithmParameterException e) { - logger.error(PlatformErrorMessages.MIMOTO_INVALID_KEY_EXCEPTION.getCode(), + log.error(PlatformErrorMessages.MIMOTO_INVALID_KEY_EXCEPTION.getCode(), PlatformErrorMessages.MIMOTO_INVALID_KEY_EXCEPTION.getMessage(), e); throw new InvalidParamSpecException(PlatformErrorMessages.MIMOTO_INVALID_KEY_EXCEPTION.getCode(), PlatformErrorMessages.MIMOTO_INVALID_KEY_EXCEPTION.getMessage(), e); } catch (IllegalBlockSizeException e) { - logger.error(PlatformErrorMessages.MIMOTO_INVALID_KEY_EXCEPTION.getCode(), + log.error(PlatformErrorMessages.MIMOTO_INVALID_KEY_EXCEPTION.getCode(), PlatformErrorMessages.MIMOTO_INVALID_KEY_EXCEPTION.getMessage(), e); throw new CryptoManagerException(PlatformErrorMessages.MIMOTO_INVALID_KEY_EXCEPTION.getCode(), PlatformErrorMessages.MIMOTO_INVALID_KEY_EXCEPTION.getMessage(), e); } catch (BadPaddingException e) { - logger.error(PlatformErrorMessages.CERTIFICATE_THUMBPRINT_ERROR.getCode(), + log.error(PlatformErrorMessages.CERTIFICATE_THUMBPRINT_ERROR.getCode(), PlatformErrorMessages.CERTIFICATE_THUMBPRINT_ERROR.getMessage(), e); throw new CryptoManagerException(PlatformErrorMessages.CERTIFICATE_THUMBPRINT_ERROR.getCode(), PlatformErrorMessages.CERTIFICATE_THUMBPRINT_ERROR.getMessage(), e); } catch (NoSuchAlgorithmException e) { - logger.error(PlatformErrorMessages.CERTIFICATE_THUMBPRINT_ERROR.getCode(), + log.error(PlatformErrorMessages.CERTIFICATE_THUMBPRINT_ERROR.getCode(), PlatformErrorMessages.CERTIFICATE_THUMBPRINT_ERROR.getMessage(), e); throw new CryptoManagerException(PlatformErrorMessages.CERTIFICATE_THUMBPRINT_ERROR.getCode(), PlatformErrorMessages.CERTIFICATE_THUMBPRINT_ERROR.getMessage(), e); } catch (NoSuchPaddingException e) { - logger.error(PlatformErrorMessages.CERTIFICATE_THUMBPRINT_ERROR.getCode(), + log.error(PlatformErrorMessages.CERTIFICATE_THUMBPRINT_ERROR.getCode(), PlatformErrorMessages.CERTIFICATE_THUMBPRINT_ERROR.getMessage(), e); throw new CryptoManagerException(PlatformErrorMessages.CERTIFICATE_THUMBPRINT_ERROR.getCode(), PlatformErrorMessages.CERTIFICATE_THUMBPRINT_ERROR.getMessage(), e); } catch (InvalidKeyException e) { - logger.error(PlatformErrorMessages.MIMOTO_INVALID_KEY_EXCEPTION.getCode(), + log.error(PlatformErrorMessages.MIMOTO_INVALID_KEY_EXCEPTION.getCode(), PlatformErrorMessages.MIMOTO_INVALID_KEY_EXCEPTION.getMessage(), e); throw new CryptoManagerException(PlatformErrorMessages.MIMOTO_INVALID_KEY_EXCEPTION.getCode(), PlatformErrorMessages.MIMOTO_INVALID_KEY_EXCEPTION.getMessage(), e); @@ -284,7 +285,7 @@ public static byte[] getCertificateThumbprint(Certificate cert) { try { return DigestUtils.sha256(cert.getEncoded()); } catch (java.security.cert.CertificateEncodingException e) { - logger.error(PlatformErrorMessages.CERTIFICATE_THUMBPRINT_ERROR.getCode(), + log.error(PlatformErrorMessages.CERTIFICATE_THUMBPRINT_ERROR.getCode(), PlatformErrorMessages.CERTIFICATE_THUMBPRINT_ERROR.getMessage(), e); throw new CryptoManagerException(PlatformErrorMessages.CERTIFICATE_THUMBPRINT_ERROR.getCode(), PlatformErrorMessages.CERTIFICATE_THUMBPRINT_ERROR.getMessage(), e); diff --git a/src/main/java/io/mosip/mimoto/util/DataShareUtil.java b/src/main/java/io/mosip/mimoto/util/DataShareUtil.java index 68bc8681f..a7456efac 100644 --- a/src/main/java/io/mosip/mimoto/util/DataShareUtil.java +++ b/src/main/java/io/mosip/mimoto/util/DataShareUtil.java @@ -1,9 +1,13 @@ package io.mosip.mimoto.util; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.constant.ApiName; +import io.mosip.mimoto.dto.DataShare; +import io.mosip.mimoto.dto.DataShareResponseDto; +import io.mosip.mimoto.dto.ErrorDTO; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.DataShareException; +import io.mosip.mimoto.service.RestClientService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.ByteArrayResource; import org.springframework.http.HttpEntity; @@ -14,16 +18,9 @@ import org.springframework.web.client.HttpClientErrorException; import org.springframework.web.client.HttpServerErrorException; -import io.mosip.kernel.core.logger.spi.Logger; -import io.mosip.mimoto.constant.ApiName; -import io.mosip.mimoto.dto.DataShare; -import io.mosip.mimoto.dto.DataShareResponseDto; -import io.mosip.mimoto.dto.ErrorDTO; -import io.mosip.mimoto.exception.ApiNotAccessibleException; -import io.mosip.mimoto.exception.DataShareException; -import io.mosip.mimoto.service.RestClientService; - -import com.fasterxml.jackson.databind.ObjectMapper; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; @Component public class DataShareUtil { @@ -34,8 +31,6 @@ public class DataShareUtil { @Autowired private ObjectMapper mapper; - Logger logger = LoggerUtil.getLogger(DataShareUtil.class); - private static final String GET_DATA = "getDataShare"; private static final String DATASHARE = "DataShareUtil"; diff --git a/src/main/java/io/mosip/mimoto/util/JoseUtil.java b/src/main/java/io/mosip/mimoto/util/JoseUtil.java index f5655c0dc..1abee52c1 100644 --- a/src/main/java/io/mosip/mimoto/util/JoseUtil.java +++ b/src/main/java/io/mosip/mimoto/util/JoseUtil.java @@ -12,13 +12,13 @@ import com.nimbusds.jwt.SignedJWT; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; -import io.mosip.kernel.core.logger.spi.Logger; import io.mosip.kernel.core.util.CryptoUtil; import io.mosip.mimoto.core.http.ResponseWrapper; import io.mosip.mimoto.dto.mimoto.JwkDto; import io.mosip.mimoto.dto.mimoto.WalletBindingInternalResponseDto; import io.mosip.mimoto.dto.mimoto.WalletBindingResponseDto; import io.mosip.mimoto.exception.IssuerOnboardingException; +import lombok.extern.slf4j.Slf4j; import org.jose4j.jws.JsonWebSignature; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -38,10 +38,9 @@ import java.util.Map; import java.util.UUID; +@Slf4j @Component public class JoseUtil { - - private final Logger logger = LoggerUtil.getLogger(JoseUtil.class); private static final String BEGIN_KEY = "-----BEGIN PUBLIC KEY-----"; private static final String END_KEY = "-----END PUBLIC KEY-----"; private static final String ALG_RS256 = "RS256"; @@ -98,12 +97,9 @@ private static RSAPublicKeySpec getKeySpecForPublicKey(String publicKeyString) t public ResponseWrapper addThumbprintAndKeyId(ResponseWrapper responseDto) { - logger.debug("Inside addThumbprintAndKeyId "); + log.debug("Inside addThumbprintAndKeyId "); ResponseWrapper responseWrapper = new ResponseWrapper<>(); - responseWrapper.setId(responseDto.getId()); - responseWrapper.setResponsetime(responseDto.getResponsetime()); - responseWrapper.setVersion(responseDto.getVersion()); responseWrapper.setErrors(responseDto.getErrors()); try { @@ -128,7 +124,7 @@ public ResponseWrapper addThumbprintAndKeyId(ResponseW responseWrapper.setResponse(response); } } catch (Exception e) { - logger.error("Exception occured while setting thumbprint ", e); + log.error("Exception occured while setting thumbprint ", e); } return responseWrapper; @@ -150,7 +146,7 @@ public String getJWT(String clientId, String keyStorePath, String fileName, Stri } privateKey = (RSAPrivateKey) privateKeyEntry.getPrivateKey(); } catch (IOException e) { - logger.error("Exception happened while loading the p12 file for invoking token call."); + log.error("Exception happened while loading the p12 file for invoking token call."); throw e; } return JWT.create() diff --git a/src/main/java/io/mosip/mimoto/util/RequestValidator.java b/src/main/java/io/mosip/mimoto/util/RequestValidator.java index e89dc6bc5..3886a4f1b 100644 --- a/src/main/java/io/mosip/mimoto/util/RequestValidator.java +++ b/src/main/java/io/mosip/mimoto/util/RequestValidator.java @@ -4,6 +4,7 @@ import io.mosip.mimoto.dto.mimoto.CredentialDownloadRequestDTO; import io.mosip.mimoto.exception.InvalidInputException; import io.mosip.mimoto.exception.PlatformErrorMessages; +import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; @@ -17,10 +18,9 @@ @Component +@Slf4j public class RequestValidator { - private static Logger logger = LoggerFactory.getLogger(RequestValidator.class); - @Value("${mosip.notificationtype:EMAIL|PHONE}") private String notificationType; public void validateInputRequest(BindingResult result){ @@ -35,13 +35,13 @@ public void validateInputRequest(BindingResult result){ public void validateNotificationChannel(List otpChannelList) { List incorrectNotificationChannel; - logger.info("\n Notification Types from application-default.properties in mosip-config - > {}", notificationType); + log.info("\n Notification Types from application-default.properties in mosip-config - > {}", notificationType); incorrectNotificationChannel = otpChannelList .stream() .filter(otpChannel -> !notificationType.contains(otpChannel)) .collect(Collectors.toList()); if (incorrectNotificationChannel.size() > 0) { - logger.error("Invalid Input is received in otpChannels {}", String.join(",", incorrectNotificationChannel)); + log.error("Invalid Input is received in otpChannels {}", String.join(",", incorrectNotificationChannel)); throw new InvalidInputException(PlatformErrorMessages.MIMOTO_PGS_INVALID_INPUT_PARAMETER.getMessage() + " - " + "otpChannels"); } } diff --git a/src/main/java/io/mosip/mimoto/util/RestApiClient.java b/src/main/java/io/mosip/mimoto/util/RestApiClient.java index 1df44902d..00034444d 100644 --- a/src/main/java/io/mosip/mimoto/util/RestApiClient.java +++ b/src/main/java/io/mosip/mimoto/util/RestApiClient.java @@ -5,6 +5,7 @@ import io.mosip.mimoto.core.http.RequestWrapper; import io.mosip.mimoto.dto.SecretKeyRequest; import io.mosip.mimoto.exception.TokenGenerationFailedException; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.apache.http.Header; import org.apache.http.HttpResponse; @@ -36,15 +37,13 @@ * * @author Rishabh Keshari */ +@Slf4j @Component public class RestApiClient { public static final String TOKEN = "token"; public static final String CONTENT_TYPE = "Content-Type"; - /** - * The logger. - */ - private Logger logger = LoggerUtil.getLogger(RestApiClient.class); + private static final String AUTHORIZATION = "Authorization="; /** * The builder. @@ -98,11 +97,11 @@ public T getApi(URI uri, Class responseType) throws Exception { rt = plainRestTemplate; } try { - logger.info("RestApiClient::getApi()::entry uri: {}", uri); + log.info("RestApiClient::getApi()::entry uri: {}", uri); result = (T) rt.exchange(uri, HttpMethod.GET, setRequestHeader(null, null), responseType) .getBody(); } catch (Exception e) { - logger.error("RestApiClient::getApi()::error uri: {} {} {}", uri, e.getMessage(), e); + log.error("RestApiClient::getApi()::error uri: {} {} {}", uri, e.getMessage(), e); } return result; } @@ -125,7 +124,7 @@ public T getApi(String url, Class responseType) { try { result = (T) rt.getForObject(url, responseType); } catch (Exception e) { - logger.error("RestApiClient::getApi()::error uri:{} {} {}", url, e.getMessage(), e); + log.error("RestApiClient::getApi()::error uri:{} {} {}", url, e.getMessage(), e); } return result; } @@ -149,10 +148,10 @@ public T postApi(String uri, MediaType mediaType, Object requestType, Class< rt = plainRestTemplate; } try { - logger.info("RestApiClient::postApi()::entry uri: {}", uri); + log.info("RestApiClient::postApi()::entry uri: {}", uri); result = (T) rt.postForObject(uri, setRequestHeader(requestType, mediaType), responseClass); } catch (Exception e) { - logger.error("RestApiClient::postApi()::error uri: {} {} {}", uri, e.getMessage(), e); + log.error("RestApiClient::postApi()::error uri: {} {} {}", uri, e.getMessage(), e); } return result; } @@ -160,10 +159,10 @@ public T postApi(String uri, MediaType mediaType, Object requestType, Class< public T postApi(String uri, MediaType mediaType, Object requestType, Class responseClass, boolean useBearerToken) throws Exception { T result = null; try { - logger.info("RestApiClient::postApi()::entry uri: {}", uri); + log.info("RestApiClient::postApi()::entry uri: {}", uri); result = (T) plainRestTemplate.postForObject(uri, setRequestHeader(requestType, mediaType, useBearerToken), responseClass); } catch (Exception e) { - logger.error("RestApiClient::postApi()::error uri: {} {} {}", uri, e.getMessage(), e); + log.error("RestApiClient::postApi()::error uri: {} {} {}", uri, e.getMessage(), e); if (e instanceof HttpClientErrorException) { HttpClientErrorException ex = (HttpClientErrorException)e; if (ex.getStatusCode().value() == 401) { @@ -181,10 +180,10 @@ public T postApi(String uri, MediaType mediaType, Object requestType, Class< public T postApi(String uri, MediaType mediaType, Object requestType, Class responseClass, String bearerToken){ T result = null; try { - logger.info("RestApiClient::postApi()::entry uri: {}", uri); + log.info("RestApiClient::postApi()::entry uri: {}", uri); result = (T) plainRestTemplate.postForObject(uri, setRequestHeader(requestType, mediaType, bearerToken), responseClass); } catch (Exception e) { - logger.error("RestApiClient::postApi()::error uri: {} {} {}", uri, e.getMessage(), e); + log.error("RestApiClient::postApi()::error uri: {} {} {}", uri, e.getMessage(), e); } return result; } diff --git a/src/main/java/io/mosip/mimoto/util/ServerUtil.java b/src/main/java/io/mosip/mimoto/util/ServerUtil.java index 7b60710be..af97f3def 100644 --- a/src/main/java/io/mosip/mimoto/util/ServerUtil.java +++ b/src/main/java/io/mosip/mimoto/util/ServerUtil.java @@ -1,29 +1,26 @@ package io.mosip.mimoto.util; +import lombok.extern.slf4j.Slf4j; + import java.net.InetAddress; import java.net.UnknownHostException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - /** * This class provides Server IP and Name. * * @author Kiran Raj M1048860 */ +@Slf4j public class ServerUtil { /** The server instance. */ private static ServerUtil serverInstance = null; - /** The Constant LOGGER. */ - private static final Logger LOGGER = LoggerFactory.getLogger(ServerUtil.class); - /** The host not found. */ private String noHost = "HOST_NOT_FOUND"; /** - * + * * Instantiates a new server util. */ private ServerUtil() { @@ -57,7 +54,7 @@ public String getServerIp() { try { return InetAddress.getLocalHost().getHostAddress(); } catch (UnknownHostException e) { - LOGGER.error(noHost, e.getMessage()); + log.error(noHost, e.getMessage()); return "UNKNOWN-HOST"; } @@ -73,7 +70,7 @@ public String getServerName() { try { return InetAddress.getLocalHost().getHostName(); } catch (UnknownHostException e) { - LOGGER.error(noHost, e.getMessage()); + log.error(noHost, e.getMessage()); return "UNKNOWN-HOST"; } } diff --git a/src/main/java/io/mosip/mimoto/util/TokenHandlerUtil.java b/src/main/java/io/mosip/mimoto/util/TokenHandlerUtil.java index 6aa061976..e721153e7 100644 --- a/src/main/java/io/mosip/mimoto/util/TokenHandlerUtil.java +++ b/src/main/java/io/mosip/mimoto/util/TokenHandlerUtil.java @@ -3,6 +3,7 @@ import java.time.LocalDateTime; import java.util.Map; +import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -14,13 +15,13 @@ import com.auth0.jwt.interfaces.DecodedJWT; /** - * + * * @author Srinivasan * */ +@Slf4j public class TokenHandlerUtil { - private static Logger LOGGER = LoggerFactory.getLogger(TokenHandlerUtil.class); private TokenHandlerUtil() { @@ -28,7 +29,7 @@ private TokenHandlerUtil() { /** * Validates the token offline based on the Oauth2 standards. - * + * * @param accessToken * - Bearer token * @param issuerUrl @@ -55,10 +56,10 @@ public static boolean isValidBearerToken(String accessToken, String issuerUrl, S return true; } } catch (JWTDecodeException e) { - LOGGER.error("JWT DECODE EXCEPTION ::".concat(e.getMessage()).concat(ExceptionUtils.getStackTrace(e))); + log.error("JWT DECODE EXCEPTION ::".concat(e.getMessage()).concat(ExceptionUtils.getStackTrace(e))); return false; } catch (Exception e) { - LOGGER.error(e.getMessage().concat(ExceptionUtils.getStackTrace(e))); + log.error(e.getMessage().concat(ExceptionUtils.getStackTrace(e))); return false; } diff --git a/src/main/java/io/mosip/mimoto/util/Utilities.java b/src/main/java/io/mosip/mimoto/util/Utilities.java index 1b78bcece..acdf38a79 100644 --- a/src/main/java/io/mosip/mimoto/util/Utilities.java +++ b/src/main/java/io/mosip/mimoto/util/Utilities.java @@ -2,13 +2,16 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.collect.Lists; import io.mosip.kernel.core.logger.spi.Logger; import io.mosip.mimoto.core.http.ResponseWrapper; +import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.exception.ExceptionUtils; import io.mosip.mimoto.exception.PlatformErrorMessages; import io.mosip.mimoto.service.impl.CredentialShareServiceImpl; import jakarta.annotation.PostConstruct; import lombok.Data; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.json.simple.JSONObject; import org.springframework.beans.factory.annotation.Autowired; @@ -29,9 +32,9 @@ import java.util.List; import static io.mosip.mimoto.constant.LoggerFileConstant.DELIMITER; -import static io.mosip.mimoto.controller.IdpController.getErrorResponse; @Component +@Slf4j @Data public class Utilities { private ClassLoader classLoader = Utilities.class.getClassLoader(); @@ -50,9 +53,6 @@ public class Utilities { // Sample VC websub event private String SAMPLE_EVENT = "%s_EVENT.json"; - private Logger logger = LoggerUtil.getLogger(Utilities.class); - - @Autowired private RestApiClient restApiClient; @@ -151,7 +151,7 @@ public void removeCacheData(String requestId) throws IOException { try { Files.delete(filePath); } catch (Exception e) { - logger.error("Cannot delete file: " + filePath, e); + log.error("Cannot delete file: " + filePath, e); } } } @@ -171,7 +171,7 @@ public String getJson(String configString, String resourcePath) { json = restApiClient.getApi(URI.create(configServerFileStorageURL + resourcePath), String.class); } } catch (Exception e) { - logger.error(ExceptionUtils.getStackTrace(e)); + log.error(ExceptionUtils.getStackTrace(e)); } return json; } @@ -185,7 +185,7 @@ public String getTrustedVerifiersJsonValue() { public String getCredentialSupportedTemplateString() { return getJson(credentialTemplateHtmlString, credentialTemplatePath); } - public static ResponseWrapper handleExceptionWithErrorCode(Exception exception) { + public static String[] handleExceptionWithErrorCode(Exception exception) { String errorMessage = exception.getMessage(); String errorCode = PlatformErrorMessages.MIMOTO_IDP_GENERIC_EXCEPTION.getCode(); @@ -194,6 +194,11 @@ public static ResponseWrapper handleExceptionWithErrorCode(Exception exc errorCode = errorSections[0]; errorMessage = errorSections[1]; } - return getErrorResponse(errorCode, errorMessage); + return new String[]{errorCode, errorMessage}; + } + + public static List getErrors(String errorCode, String errorMessage) { + ErrorDTO errorDTO = new ErrorDTO(errorCode, errorMessage); + return Lists.newArrayList(errorDTO); } } diff --git a/src/main/java/io/mosip/mimoto/util/WebSubSubscriptionHelper.java b/src/main/java/io/mosip/mimoto/util/WebSubSubscriptionHelper.java index 591572c50..4396d16ca 100644 --- a/src/main/java/io/mosip/mimoto/util/WebSubSubscriptionHelper.java +++ b/src/main/java/io/mosip/mimoto/util/WebSubSubscriptionHelper.java @@ -1,5 +1,12 @@ package io.mosip.mimoto.util; +import io.mosip.kernel.core.websub.spi.PublisherClient; +import io.mosip.kernel.core.websub.spi.SubscriptionClient; +import io.mosip.kernel.websub.api.exception.WebSubClientException; +import io.mosip.kernel.websub.api.model.SubscriptionChangeRequest; +import io.mosip.kernel.websub.api.model.SubscriptionChangeResponse; +import io.mosip.kernel.websub.api.model.UnsubscriptionRequest; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.cache.annotation.Cacheable; @@ -8,14 +15,7 @@ import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; -import io.mosip.kernel.core.logger.spi.Logger; -import io.mosip.kernel.core.websub.spi.PublisherClient; -import io.mosip.kernel.core.websub.spi.SubscriptionClient; -import io.mosip.kernel.websub.api.exception.WebSubClientException; -import io.mosip.kernel.websub.api.model.SubscriptionChangeRequest; -import io.mosip.kernel.websub.api.model.SubscriptionChangeResponse; -import io.mosip.kernel.websub.api.model.UnsubscriptionRequest; - +@Slf4j @Component public class WebSubSubscriptionHelper { @@ -40,14 +40,12 @@ public class WebSubSubscriptionHelper { @Autowired private PublisherClient pb; - private Logger logger = LoggerUtil.getLogger(WebSubSubscriptionHelper.class); - @Scheduled( fixedDelayString = "${websub-resubscription-delay-millisecs}", initialDelayString = "${mosip.event.delay-millisecs}" ) public void initSubscriptions() { - logger.info("Initializing subscriptions..."); + log.info("Initializing subscriptions..."); subscribeEvent(topic, callBackUrl, webSubSecret); } @@ -57,10 +55,10 @@ public SubscriptionChangeResponse unSubscribeEvent(String topic, String callBack unsubscriptionRequest.setCallbackURL(callBackUrl); unsubscriptionRequest.setHubURL(webSubHubSubUrl); unsubscriptionRequest.setTopic(topic); - logger.info("Unsubscription request : {}", unsubscriptionRequest); + log.info("Unsubscription request : {}", unsubscriptionRequest); return sb.unSubscribe(unsubscriptionRequest); } catch (WebSubClientException e) { - logger.info("Websub unsubscription error: {} ", e.getMessage()); + log.info("Websub unsubscription error: {} ", e.getMessage()); } return null; } @@ -72,10 +70,10 @@ public SubscriptionChangeResponse subscribeEvent(String topic, String callBackUr subscriptionRequest.setHubURL(webSubHubSubUrl); subscriptionRequest.setSecret(secret); subscriptionRequest.setTopic(topic); - logger.info("Subscription request : {}", subscriptionRequest); + log.info("Subscription request : {}", subscriptionRequest); return sb.subscribe(subscriptionRequest); } catch (WebSubClientException e) { - logger.info("Websub subscription error: {}", e.getMessage()); + log.info("Websub subscription error: {}", e.getMessage()); } return null; } @@ -85,7 +83,7 @@ public void publish(String topic, Object payload) { HttpHeaders headers = new HttpHeaders(); pb.publishUpdate(topic, payload, MediaType.APPLICATION_JSON_UTF8_VALUE, headers, webSubHubPubUrl); } catch (WebSubClientException e) { - logger.info("Websub publish update error: {}", e.getMessage()); + log.info("Websub publish update error: {}", e.getMessage()); } } @@ -95,7 +93,7 @@ public void registerTopic(String topic) { try { pb.registerTopic(topic, webSubHubPubUrl); } catch (WebSubClientException e) { - logger.info("Topic already registered: {}", e.getMessage()); + log.info("Topic already registered: {}", e.getMessage()); } } @@ -105,7 +103,7 @@ public void unRegisterTopic(String topic) { try { pb.unregisterTopic(topic, webSubHubPubUrl); } catch (WebSubClientException e) { - logger.info("Topic already unregistered: {}", e.getMessage()); + log.info("Topic already unregistered: {}", e.getMessage()); } } diff --git a/src/test/resources/responses/InjiConfig.json b/src/test/resources/responses/InjiConfig.json index c2d957370..4f59ca4a8 100644 --- a/src/test/resources/responses/InjiConfig.json +++ b/src/test/resources/responses/InjiConfig.json @@ -1,8 +1,4 @@ { - "id": "mosip.inji.properties", - "version": "v1", - "str": null, - "metadata": null, "response": { "allowedAuthType": "demo,otp,bio-Finger,bio-Iris,bio-Face", "allowedEkycAuthType": "demo,otp,bio-Finger,bio-Iris,bio-Face", @@ -12,5 +8,5 @@ "vcDownloadPoolInterval": "6000", "issuer": "residentapp" }, - "errors": [] + "errors": null } From 116d1a3c084882958c1130c7d86cf4d23e140847 Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Mon, 7 Oct 2024 19:17:00 +0530 Subject: [PATCH 251/860] MOSIP-35404 Signed-off-by: Nandhukumar --- .../apirig/testrunner/MosipTestRunner.java | 72 +++++++++---------- 1 file changed, 35 insertions(+), 37 deletions(-) diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java b/api-test/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java index 1dcb18855..ad0b483c2 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java @@ -14,6 +14,7 @@ import java.util.Map; import java.util.Properties; +import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.bouncycastle.openssl.jcajce.JcaPEMWriter; import org.testng.TestNG; @@ -22,7 +23,9 @@ import com.nimbusds.jose.jwk.RSAKey; import io.mosip.testrig.apirig.dataprovider.BiometricDataProvider; +import io.mosip.testrig.apirig.dbaccess.DBManager; import io.mosip.testrig.apirig.utils.AdminTestUtil; +import io.mosip.testrig.apirig.utils.AuthTestsUtil; import io.mosip.testrig.apirig.utils.CertsUtil; import io.mosip.testrig.apirig.utils.GlobalConstants; import io.mosip.testrig.apirig.utils.JWKKeyUtil; @@ -69,7 +72,7 @@ public static void main(String[] arg) { ExtractResource.copyCommonResources(); } MimotoConfigManager.init(); - BaseTestCase.suiteSetup(getRunType()); + suiteSetup(getRunType()); SkipTestCaseHandler.loadTestcaseToBeSkippedList("testCaseSkippedList.txt"); setLogLevels(); @@ -83,7 +86,7 @@ public static void main(String[] arg) { KeycloakUserManager.removeUser(); KeycloakUserManager.createUsers(); KeycloakUserManager.closeKeycloakInstance(); - + // Generate device certificates to be consumed by Mock-MDS PartnerRegistration.deleteCertificates(); AdminTestUtil.createAndPublishPolicy(); @@ -106,6 +109,34 @@ public static void main(String[] arg) { System.exit(0); } + + public static void suiteSetup(String runType) { + if (MimotoConfigManager.IsDebugEnabled()) + LOGGER.setLevel(Level.ALL); + else + LOGGER.info("Test Framework for Mosip api Initialized"); + BaseTestCase.initialize(); + LOGGER.info("Done with BeforeSuite and test case setup! su TEST EXECUTION!\n\n"); + + if (!runType.equalsIgnoreCase("JAR")) { + AuthTestsUtil.removeOldMosipTempTestResource(); + } + BaseTestCase.currentModule = GlobalConstants.MIMOTO; + BaseTestCase.certsForModule = GlobalConstants.MIMOTO; + DBManager.executeDBQueries(MimotoConfigManager.getKMDbUrl(), MimotoConfigManager.getKMDbUser(), + MimotoConfigManager.getKMDbPass(), MimotoConfigManager.getKMDbSchema(), + getGlobalResourcePath() + "/" + "config/keyManagerDataDeleteQueriesForEsignet.txt"); + DBManager.executeDBQueries(MimotoConfigManager.getIdaDbUrl(), MimotoConfigManager.getIdaDbUser(), + MimotoConfigManager.getPMSDbPass(), MimotoConfigManager.getIdaDbSchema(), + getGlobalResourcePath() + "/" + "config/idaDeleteQueriesForEsignet.txt"); + DBManager.executeDBQueries(MimotoConfigManager.getMASTERDbUrl(), MimotoConfigManager.getMasterDbUser(), + MimotoConfigManager.getMasterDbPass(), MimotoConfigManager.getMasterDbSchema(), + getGlobalResourcePath() + "/" + "config/masterDataDeleteQueriesForEsignet.txt"); + BaseTestCase.setReportName(GlobalConstants.MIMOTO); + AdminTestUtil.initiateMimotoTest(); + BaseTestCase.otpListener = new OTPListener(); + BaseTestCase.otpListener.run(); + } private static void setLogLevels() { AdminTestUtil.setLogLevel(); @@ -126,7 +157,6 @@ public static void startTestRunner() { File homeDir = null; TestNG runner = new TestNG(); List suitefiles = new ArrayList<>(); - List modulesToRun = BaseTestCase.listOfModules; String os = System.getProperty("os.name"); LOGGER.info(os); if (getRunType().contains("IDE") || os.toLowerCase().contains("windows")) { @@ -138,12 +168,8 @@ public static void startTestRunner() { LOGGER.info("ELSE :" + homeDir); } for (File file : homeDir.listFiles()) { - for (String fileName : modulesToRun) { - if (file.getName().toLowerCase().contains(fileName)) { - suitefiles.add(file.getAbsolutePath()); - } else if (fileName.equals("all") && file.getName().toLowerCase().contains("testng")) { - suitefiles.add(file.getAbsolutePath()); - } + if (file.getName().toLowerCase().contains(GlobalConstants.MIMOTO)) { + suitefiles.add(file.getAbsolutePath()); } } runner.setTestSuites(suitefiles); @@ -152,25 +178,6 @@ public static void startTestRunner() { runner.run(); } - /** - * The method to return class loader resource path - * - * @return String - * @throws IOException - */ - /* - * public static String getGlobalResourcePath() { if - * (checkRunType().equalsIgnoreCase("JAR")) { return new - * File(jarUrl).getParentFile().getAbsolutePath() + - * "/MosipTestResource/MosipTemporaryTestResource"; } else if - * (checkRunType().equalsIgnoreCase("IDE")) { String path = new - * File(MosipTestRunner.class.getClassLoader().getResource("").getPath()). - * getAbsolutePath() + "/MosipTestResource/MosipTemporaryTestResource"; if - * (path.contains(GlobalConstants.TESTCLASSES)) path = - * path.replace(GlobalConstants.TESTCLASSES, "classes"); return path; } return - * "Global Resource File Path Not Found"; } - */ - public static String getGlobalResourcePath() { if (cachedPath != null) { return cachedPath; @@ -196,15 +203,6 @@ public static String getGlobalResourcePath() { public static String getResourcePath() { return getGlobalResourcePath(); -// if (checkRunType().equalsIgnoreCase("JAR")) { -// return new File(jarUrl).getParentFile().getAbsolutePath(); -// } else if (checkRunType().equalsIgnoreCase("IDE")) { -// String path = new File(MosipTestRunner.class.getClassLoader().getResource("").getPath()).getAbsolutePath(); -// if (path.contains(GlobalConstants.TESTCLASSES)) -// path = path.replace(GlobalConstants.TESTCLASSES, "classes"); -// return path; -// } -// return "Global Resource File Path Not Found"; } public static String generatePulicKey() { From a5c2be6feaf1fbfc94b17af34451bfed09aec4c8 Mon Sep 17 00:00:00 2001 From: Vijay Kumar S <94220135+vijay151096@users.noreply.github.com> Date: Tue, 8 Oct 2024 15:17:02 +0530 Subject: [PATCH 252/860] [INJIWEB-700]: secure time bound storage (#475) * [INJIWEB-700]: secure time bound storage Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-700]: secure time bound storage Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIWEB-700]: secure time bound storage- correct param name Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- .../io/mosip/mimoto/controller/CredentialsController.java | 3 ++- .../java/io/mosip/mimoto/service/CredentialService.java | 2 +- .../mosip/mimoto/service/impl/CredentialServiceImpl.java | 4 ++-- .../mosip/mimoto/service/impl/DataShareServiceImpl.java | 8 ++++---- .../mimoto/controller/CredentialsControllerTest.java | 8 +++++--- .../io/mosip/mimoto/service/DataShareServiceTest.java | 6 +++--- 6 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/CredentialsController.java b/src/main/java/io/mosip/mimoto/controller/CredentialsController.java index 728a37e39..cb33f3185 100644 --- a/src/main/java/io/mosip/mimoto/controller/CredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/CredentialsController.java @@ -56,12 +56,13 @@ public ResponseEntity downloadCredentialAsPDF(@RequestParam Map params, String issuerId) throws ApiNotAccessibleException, IOException; - ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String credentialType, TokenResponseDTO response) throws Exception; + ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String credentialType, TokenResponseDTO response, String credentialValidity) throws Exception; } diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java index 2a0b97a5d..10012746b 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java @@ -118,7 +118,7 @@ public TokenResponseDTO getTokenResponse(Map params, String issu } @Override - public ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String credentialType, TokenResponseDTO response) throws Exception { + public ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String credentialType, TokenResponseDTO response, String credentialValidity) throws Exception { IssuerDTO issuerConfig = issuerService.getIssuerConfig(issuerId); CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = issuerService.getIssuerWellknown(issuerId); CredentialsSupportedResponse credentialsSupportedResponse = issuerService.getIssuerWellknownForCredentialType(issuerId, credentialType); @@ -126,7 +126,7 @@ public ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String cred VCCredentialResponse vcCredentialResponse = downloadCredential(credentialIssuerWellKnownResponse.getCredentialEndPoint(), vcCredentialRequest, response.getAccess_token()); boolean verificationStatus = vcCredentialResponse.getCredential().getProof().getType().equals("RsaSignature2018") ? verifyCredential(vcCredentialResponse) : true; if(verificationStatus) { - String dataShareUrl = QRCodeType.OnlineSharing.equals(issuerConfig.getQr_code_type()) ? dataShareService.storeDataInDataShare(objectMapper.writeValueAsString(vcCredentialResponse)) : ""; + String dataShareUrl = QRCodeType.OnlineSharing.equals(issuerConfig.getQr_code_type()) ? dataShareService.storeDataInDataShare(objectMapper.writeValueAsString(vcCredentialResponse), credentialValidity) : ""; return generatePdfForVerifiableCredentials(vcCredentialResponse, issuerConfig, credentialsSupportedResponse, dataShareUrl); } throw new VCVerificationException(SIGNATURE_VERIFICATION_EXCEPTION.getErrorCode(), diff --git a/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java index b65c50c5a..a62dd52fb 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java @@ -55,7 +55,7 @@ public void setUp(){ pathMatcher = new AntPathMatcher(); } - public String storeDataInDataShare(String data) throws Exception { + public String storeDataInDataShare(String data, String credentialValidity) throws Exception { ByteArrayResource contentsAsResource = new ByteArrayResource(data.getBytes()) { @Override public String getFilename() { @@ -68,17 +68,17 @@ public String getFilename() { headers.setContentType(MediaType.MULTIPART_FORM_DATA); HttpEntity> requestEntity = new HttpEntity<>(map, headers); - DataShareResponseWrapperDTO dataShareResponseWrapperDTO = pushCredentialIntoDataShare(requestEntity); + DataShareResponseWrapperDTO dataShareResponseWrapperDTO = pushCredentialIntoDataShare(requestEntity, credentialValidity); log.info("Data pushed into DataShare -> " + dataShareResponseWrapperDTO); return dataShareResponseWrapperDTO.getDataShare().getUrl(); } - private DataShareResponseWrapperDTO pushCredentialIntoDataShare(HttpEntity> requestEntity) throws Exception { + private DataShareResponseWrapperDTO pushCredentialIntoDataShare(HttpEntity> requestEntity, String credentialValidity) throws Exception { int attempt =0 ; DataShareResponseWrapperDTO dataShareResponseWrapperDTO = null; while(attempt++ < maxRetryCount ){ try { - dataShareResponseWrapperDTO = restApiClient.postApi(dataShareCreateUrl, MediaType.MULTIPART_FORM_DATA, requestEntity, DataShareResponseWrapperDTO.class); + dataShareResponseWrapperDTO = restApiClient.postApi(dataShareCreateUrl + "?usageCountForStandaloneMode=" + credentialValidity, MediaType.MULTIPART_FORM_DATA, requestEntity, DataShareResponseWrapperDTO.class); } catch (Exception e) { log.error(attempt + " attempt to push credential failed"); } diff --git a/src/test/java/io/mosip/mimoto/controller/CredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/CredentialsControllerTest.java index 93116f3b3..948d2837b 100644 --- a/src/test/java/io/mosip/mimoto/controller/CredentialsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/CredentialsControllerTest.java @@ -32,7 +32,6 @@ @EnableWebMvc public class CredentialsControllerTest { - @Autowired private MockMvc mockMvc; @@ -47,7 +46,7 @@ public void downloadPDFSuccessfully() throws Exception { TokenResponseDTO tokenResponseDTO = TestUtilities.getTokenResponseDTO(); ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream("test-data".getBytes()); Mockito.when(credentialService.getTokenResponse(Mockito.anyMap(), Mockito.eq(issuer))).thenReturn(tokenResponseDTO); - Mockito.when(credentialService.downloadCredentialAsPDF(Mockito.eq(issuer), Mockito.eq(credential), Mockito.eq(tokenResponseDTO))).thenReturn(byteArrayInputStream); + Mockito.when(credentialService.downloadCredentialAsPDF(Mockito.eq(issuer), Mockito.eq(credential), Mockito.eq(tokenResponseDTO), Mockito.eq("3"))).thenReturn(byteArrayInputStream); mockMvc.perform(post("/credentials/download") .contentType(MediaType.APPLICATION_FORM_URLENCODED) @@ -57,6 +56,7 @@ public void downloadPDFSuccessfully() throws Exception { new BasicNameValuePair("redirect_uri", "test-redirect_uri"), new BasicNameValuePair("code_verifier", "test-code_verifier"), new BasicNameValuePair("issuer", issuer), + new BasicNameValuePair("vcStorageExpiryLimitInTimes", "3"), new BasicNameValuePair("credential", credential) ))))) .andExpect(status().isOk()) @@ -82,6 +82,7 @@ public void throwExceptionWhenTokenIsNotFetched() throws Exception { new BasicNameValuePair("redirect_uri", "test-redirect_uri"), new BasicNameValuePair("code_verifier", "test-code_verifier"), new BasicNameValuePair("issuer", issuer), + new BasicNameValuePair("vcStorageExpiryLimitInTimes", "3"), new BasicNameValuePair("credential", credential) ))))) .andExpect(status().isBadRequest()) @@ -97,7 +98,7 @@ public void throwExceptionWhenPDFGenerationFailed() throws Exception { String credential = "test-credential"; TokenResponseDTO tokenResponseDTO = TestUtilities.getTokenResponseDTO(); Mockito.when(credentialService.getTokenResponse(Mockito.anyMap(), Mockito.eq(issuer))).thenReturn(tokenResponseDTO); - Mockito.when(credentialService.downloadCredentialAsPDF(Mockito.eq(issuer), Mockito.eq(credential), Mockito.eq(tokenResponseDTO))).thenThrow(ApiNotAccessibleException.class); + Mockito.when(credentialService.downloadCredentialAsPDF(Mockito.eq(issuer), Mockito.eq(credential), Mockito.eq(tokenResponseDTO), Mockito.eq("3") )).thenThrow(ApiNotAccessibleException.class); mockMvc.perform(post("/credentials/download") .contentType(MediaType.APPLICATION_FORM_URLENCODED) @@ -107,6 +108,7 @@ public void throwExceptionWhenPDFGenerationFailed() throws Exception { new BasicNameValuePair("redirect_uri", "test-redirect_uri"), new BasicNameValuePair("code_verifier", "test-code_verifier"), new BasicNameValuePair("issuer", issuer), + new BasicNameValuePair("vcStorageExpiryLimitInTimes", "3"), new BasicNameValuePair("credential", credential) ))))) .andExpect(status().isBadRequest()) diff --git a/src/test/java/io/mosip/mimoto/service/DataShareServiceTest.java b/src/test/java/io/mosip/mimoto/service/DataShareServiceTest.java index 435cc7e2e..def6a4600 100644 --- a/src/test/java/io/mosip/mimoto/service/DataShareServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/DataShareServiceTest.java @@ -46,7 +46,7 @@ public void storeDataInDataShareWhenProperDataIsPassed() throws Exception { DataShareResponseWrapperDTO dataShareResponseWrapperDTO = TestUtilities.getDataShareResponseWrapperDTO(); Mockito.when(restApiClient.postApi(Mockito.anyString(), Mockito.eq(MediaType.MULTIPART_FORM_DATA), Mockito.any(), Mockito.eq(DataShareResponseWrapperDTO.class))) .thenReturn(dataShareResponseWrapperDTO); - String actualDataShareLink = dataShareService.storeDataInDataShare("SampleData"); + String actualDataShareLink = dataShareService.storeDataInDataShare("SampleData", "3"); String expectedDataShareLink = dataShareResponseWrapperDTO.getDataShare().getUrl(); Assert.assertEquals(expectedDataShareLink, actualDataShareLink); } @@ -54,7 +54,7 @@ public void storeDataInDataShareWhenProperDataIsPassed() throws Exception { @Test(expected = InvalidCredentialResourceException.class) public void throwRequestTimedOutExceptionWhenMaxCountIsReached() throws Exception { ReflectionTestUtils.setField(dataShareService, "maxRetryCount", 0); - dataShareService.storeDataInDataShare("SampleData"); + dataShareService.storeDataInDataShare("SampleData", "3"); } @Test(expected = InvalidCredentialResourceException.class) @@ -62,7 +62,7 @@ public void throwServiceUnavailableExceptionWhenCredentialPushIsNotDone() throws ReflectionTestUtils.setField(dataShareService, "maxRetryCount", 1); Mockito.when(restApiClient.postApi(Mockito.anyString(), Mockito.eq(MediaType.MULTIPART_FORM_DATA), Mockito.any(), Mockito.eq(DataShareResponseWrapperDTO.class))) .thenThrow(InvalidCredentialResourceException.class); - dataShareService.storeDataInDataShare("SampleData"); + dataShareService.storeDataInDataShare("SampleData", "3"); } @Test From fd8b16cab19985420aa90fcf64947c33877dc34a Mon Sep 17 00:00:00 2001 From: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> Date: Thu, 10 Oct 2024 17:15:02 +0530 Subject: [PATCH 253/860] MOSIP-36455 - Merge release 0.14.x branch with develop (#482) * MOSIP-36455 - Merge release 0.14.x branch with develop Signed-off-by: Mohanachandran S * MOSIP-36455 - Merge release 0.14.x branch with develop Signed-off-by: Mohanachandran S --------- Signed-off-by: Mohanachandran S --- api-test/pom.xml | 2 +- .../apirig/testrunner/MosipTestRunner.java | 2 +- .../PostWithAutogenIdWithOtpGenerate.java | 5 +- .../testscripts/SimplePostForAutoGenId.java | 16 ++++-- .../testrig/apirig/utils/MimotoUtil.java | 54 ++++++++++++++++++- .../mimoto/BindingOtp/BindingOtp.yml | 4 +- .../DownloadIssuerCredential.yml | 8 +-- .../GetAllCredentialTypes.yml | 50 ----------------- .../GetIssuerWellKnown.hbs} | 0 .../GetIssuerWellKnown/GetIssuerWellKnown.yml | 35 ++++++++++++ .../GetIssuerWellKnownResult.hbs} | 0 .../OAuthDetailsRequestSunBirdC.yml | 2 +- api-test/testNgXmlFiles/mimotoApi.xml | 20 +++---- 13 files changed, 124 insertions(+), 74 deletions(-) delete mode 100644 api-test/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.yml rename api-test/src/main/resources/mimoto/{GetAllCredentialTypes/GetAllCredentialTypes.hbs => GetIssuerWellKnown/GetIssuerWellKnown.hbs} (100%) create mode 100644 api-test/src/main/resources/mimoto/GetIssuerWellKnown/GetIssuerWellKnown.yml rename api-test/src/main/resources/mimoto/{GetAllCredentialTypes/GetAllCredentialTypesResult.hbs => GetIssuerWellKnown/GetIssuerWellKnownResult.hbs} (100%) diff --git a/api-test/pom.xml b/api-test/pom.xml index bcdaa5a17..ea9e7d746 100644 --- a/api-test/pom.xml +++ b/api-test/pom.xml @@ -265,4 +265,4 @@ - + \ No newline at end of file diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java b/api-test/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java index c7d2e0d1a..18bcbfd1e 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java @@ -304,4 +304,4 @@ public static String getRunType() { return "IDE"; } -} +} \ No newline at end of file diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java b/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java index a241f136d..86fdfb573 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java @@ -186,8 +186,11 @@ public void test(TestCaseDTO testCaseDTO) throw new SkipException("esignet is not deployed hence skipping the testcase"); } String tempUrl = MimotoConfigManager.getEsignetBaseUrl(); + String inputJson = getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()); + inputJson = inputJsonKeyWordHandeler(inputJson, testCaseName); + inputJson = MimotoUtil.getOTPFromSMTP(inputJson, testCaseDTO); response = postRequestWithCookieAuthHeaderAndXsrfTokenForAutoGenId(tempUrl + testCaseDTO.getEndPoint(), - getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()), COOKIENAME, + inputJson, COOKIENAME, testCaseDTO.getTestCaseName(), idKeyName); } else { response = postWithBodyAndCookieForAutoGeneratedId(ApplnURI + testCaseDTO.getEndPoint(), diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java b/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java index 5fab2b305..fe7cd339c 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java @@ -157,16 +157,26 @@ public void test(TestCaseDTO testCaseDTO) } if (inputJson.contains("$GETCLIENTIDFROMMIMOTOACTUATOR$")) { + String clientIdSection = MimotoUtil.getClientIdSection(tempUrl); inputJson = replaceKeywordWithValue(inputJson, "$GETCLIENTIDFROMMIMOTOACTUATOR$", - getValueFromMimotoActuator("overrides", "mimoto.oidc.partner.clientid")); + getValueFromMimotoActuator("overrides", clientIdSection)); } if (testCaseName.contains("_AuthorizationCode_")) { response = postRequestWithCookieAuthHeaderAndXsrfTokenForAutoGenId( tempUrl + testCaseDTO.getEndPoint(), inputJson, COOKIENAME, testCaseDTO.getTestCaseName(), idKeyName); } else { - response = postWithBodyAndBearerTokenForAutoGeneratedId(tempUrl + testCaseDTO.getEndPoint(), - inputJson, COOKIENAME, testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), idKeyName); + //Adding the while loop for try creating sunbird policy in registry for 3 times if gets failed + int currLoopCount = 0; + do { + response = postWithBodyAndBearerTokenForAutoGeneratedId(tempUrl + testCaseDTO.getEndPoint(), + inputJson, COOKIENAME, testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), idKeyName); + + if (response != null && !response.asString().contains("UNSUCCESSFUL")) { + break; + } + currLoopCount++; + } while (currLoopCount < 3); } } else { response = postWithBodyAndCookieForAutoGeneratedId(ApplnURI + testCaseDTO.getEndPoint(), inputJson, diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java b/api-test/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java index f4a9b128e..0219d67b6 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java @@ -1,9 +1,11 @@ package io.mosip.testrig.apirig.utils; import org.apache.log4j.Logger; +import org.json.JSONObject; import org.testng.SkipException; import io.mosip.testrig.apirig.dto.TestCaseDTO; +import io.mosip.testrig.apirig.testrunner.OTPListener; public class MimotoUtil extends AdminTestUtil { @@ -39,7 +41,6 @@ public static TestCaseDTO isTestCaseValidForTheExecution(TestCaseDTO testCaseDTO String endpoint = testCaseDTO.getEndPoint(); String inputJson = testCaseDTO.getInput(); - if (isOTPEnabled().equals("false")) { if (testCaseDTO.getEndPoint().contains(GlobalConstants.SEND_OTP_ENDPOINT) || testCaseDTO.getInput().contains(GlobalConstants.SEND_OTP_ENDPOINT) @@ -63,4 +64,55 @@ public static TestCaseDTO isTestCaseValidForTheExecution(TestCaseDTO testCaseDTO return testCaseDTO; } + public static String getOTPFromSMTP(String inputJson, TestCaseDTO testCaseDTO) { + String testCaseName = testCaseDTO.getTestCaseName(); + JSONObject request = new JSONObject(inputJson); + String emailId = null; + String otp = null; + + if (testCaseName.contains("ESignet_AuthenticateUser") && request.has(GlobalConstants.REQUEST)) { + if (request.getJSONObject(GlobalConstants.REQUEST).has(GlobalConstants.CHALLENGELIST)) { + if (request.getJSONObject(GlobalConstants.REQUEST).getJSONArray(GlobalConstants.CHALLENGELIST) + .length() > 0) { + if (request.getJSONObject(GlobalConstants.REQUEST).getJSONArray(GlobalConstants.CHALLENGELIST) + .getJSONObject(0).has(GlobalConstants.CHALLENGE)) { + if (request.getJSONObject(GlobalConstants.REQUEST).getJSONArray(GlobalConstants.CHALLENGELIST) + .getJSONObject(0).getString(GlobalConstants.CHALLENGE) + .endsWith(GlobalConstants.MAILINATOR_COM) + || request.getJSONObject(GlobalConstants.REQUEST) + .getJSONArray(GlobalConstants.CHALLENGELIST).getJSONObject(0) + .getString(GlobalConstants.CHALLENGE).endsWith(GlobalConstants.MOSIP_NET) + || request.getJSONObject(GlobalConstants.REQUEST) + .getJSONArray(GlobalConstants.CHALLENGELIST).getJSONObject(0) + .getString(GlobalConstants.CHALLENGE).endsWith(GlobalConstants.OTP_AS_PHONE)) { + emailId = request.getJSONObject(GlobalConstants.REQUEST) + .getJSONArray(GlobalConstants.CHALLENGELIST).getJSONObject(0) + .getString(GlobalConstants.CHALLENGE); + if (emailId.endsWith(GlobalConstants.OTP_AS_PHONE)) + emailId = emailId.replace(GlobalConstants.OTP_AS_PHONE, ""); + logger.info(emailId); + otp = OTPListener.getOtp(emailId); + request.getJSONObject(GlobalConstants.REQUEST).getJSONArray(GlobalConstants.CHALLENGELIST) + .getJSONObject(0).put(GlobalConstants.CHALLENGE, otp); + inputJson = request.toString(); + return inputJson; + } + } + } + } + } + + return inputJson; + } + + public static String getClientIdSection(String baseURL) { + if (baseURL.contains("esignet-mosipid")) { + return "mimoto.oidc.mosipid.partner.clientid"; + } + if (baseURL.contains("esignet-insurance")) { + return "mimoto.oidc.sunbird.partner.clientid"; + } + + return "mimoto.oidc.partner.clientid"; + } } \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/BindingOtp/BindingOtp.yml b/api-test/src/main/resources/mimoto/BindingOtp/BindingOtp.yml index b74516d92..a8e6ab3ef 100644 --- a/api-test/src/main/resources/mimoto/BindingOtp/BindingOtp.yml +++ b/api-test/src/main/resources/mimoto/BindingOtp/BindingOtp.yml @@ -72,7 +72,7 @@ BindingOtp: output: '{ "errors": [ { - "errorCode": "RESIDENT-APP-011" + "errorCode": "invalid_identifier" } ] }' @@ -429,7 +429,7 @@ BindingOtp: output: '{ "errors": [ { - "errorCode": "RESIDENT-APP-011" + "errorCode": "invalid_identifier" } ] }' diff --git a/api-test/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml b/api-test/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml index 800547680..7a24c1b59 100644 --- a/api-test/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml +++ b/api-test/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml @@ -13,7 +13,7 @@ DownloadIssuerCredential: "redirect_uri": "$INJIREDIRECTURI$", "code_verifier": "$CODEVERIFIER$", "issuer": "Mosip", - "credential": "MOSIPVerifiableCredential" + "credential": "MosipVerifiableCredential" }' output: '{ }' @@ -32,7 +32,7 @@ DownloadIssuerCredential: "redirect_uri": "$INJIREDIRECTURI$", "code_verifier": "$CODEVERIFIER$", "issuer": "MosipInvalid", - "credential": "MOSIPVerifiableCredential" + "credential": "MosipVerifiableCredential" }' output: '{ "errors":[ @@ -80,7 +80,7 @@ DownloadIssuerCredential: "redirect_uri": "$INJIREDIRECTURI$", "code_verifier": "$CODEVERIFIER$", "issuer": "Mosip", - "credential": "MOSIPVerifiableCredentialInvalid" + "credential": "MosipVerifiableCredential" }' output: '{ "errors":[ @@ -105,7 +105,7 @@ DownloadIssuerCredential: "redirect_uri": "$INJIREDIRECTURI$", "code_verifier": "$CODEVERIFIER$", "issuer": "Mosip", - "credential": "MOSIPVerifiableCredentialInvalid" + "credential": "MosipVerifiableCredential" }' output: '{ "errors":[ diff --git a/api-test/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.yml b/api-test/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.yml deleted file mode 100644 index 8f507a6c5..000000000 --- a/api-test/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.yml +++ /dev/null @@ -1,50 +0,0 @@ -GetAllCredentialTypes: - Mimoto_GetAllCredentialTypes_All_Valid_Smoke: - endPoint: /v1/mimoto/issuers/{issuerId}/credentialTypes - description: Generating the credential types with all valid parameters - role: resident - restMethod: get - checkErrorsOnlyInResponse: true - inputTemplate: mimoto/GetAllCredentialTypes/GetAllCredentialTypes - outputTemplate: mimoto/GetAllCredentialTypes/GetAllCredentialTypesResult - input: '{ - "issuerId": "Sunbird", - "credentialType": "$REMOVE$" -}' - output: '{ -}' - - Mimoto_GetAllCredentialTypes_Specific_Issuer_All_Valid_Smoke: - endPoint: /v1/mimoto/issuers/{issuerId}/credentialTypes/?search={credentialType} - description: Generating the specific credential type with all valid parameters - role: resident - restMethod: get - checkErrorsOnlyInResponse: true - inputTemplate: mimoto/GetAllCredentialTypes/GetAllCredentialTypes - outputTemplate: mimoto/GetAllCredentialTypes/GetAllCredentialTypesResult - input: '{ - "issuerId": "Sunbird", - "credentialType": "sunbird" -}' - output: '{ -}' - - Mimoto_GetAllCredentialTypes_Invalid_Issuer_Neg: - endPoint: /v1/mimoto/issuers/{issuerId}/credentialTypes - description: Generating the invalid credential type - role: resident - restMethod: get - checkErrorsOnlyInResponse: true - inputTemplate: mimoto/GetAllCredentialTypes/GetAllCredentialTypes - outputTemplate: mimoto/error - input: '{ - "issuerId": "invalid", - "credentialType": "$REMOVE$" -}' - output: '{ - "errors":[ - { - "errorCode":"RESIDENT-APP-035" - } - ] -}' \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.hbs b/api-test/src/main/resources/mimoto/GetIssuerWellKnown/GetIssuerWellKnown.hbs similarity index 100% rename from api-test/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypes.hbs rename to api-test/src/main/resources/mimoto/GetIssuerWellKnown/GetIssuerWellKnown.hbs diff --git a/api-test/src/main/resources/mimoto/GetIssuerWellKnown/GetIssuerWellKnown.yml b/api-test/src/main/resources/mimoto/GetIssuerWellKnown/GetIssuerWellKnown.yml new file mode 100644 index 000000000..fc32476ce --- /dev/null +++ b/api-test/src/main/resources/mimoto/GetIssuerWellKnown/GetIssuerWellKnown.yml @@ -0,0 +1,35 @@ +GetIssuerWellKnown: + Mimoto_GetIssuerWellKnown_All_Valid_Smoke: + endPoint: /v1/mimoto/issuers/{issuerId}/well-known-proxy + description: Generating the issuer well known with all valid parameters + role: resident + restMethod: get + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/GetIssuerWellKnown/GetIssuerWellKnown + outputTemplate: mimoto/GetIssuerWellKnown/GetIssuerWellKnownResult + input: '{ + "issuerId": "Mosip", + "credentialType": "$REMOVE$" +}' + output: '{ +}' + +# Mimoto_GetIssuerWellKnown_Invalid_Issuer_Neg: +# endPoint: /v1/mimoto/issuers/{issuerId}/well-known-proxy +# description: Generating the invalid issuer well known +# role: resident +# restMethod: get +# checkErrorsOnlyInResponse: true +# inputTemplate: mimoto/GetIssuerWellKnown/GetIssuerWellKnown +# outputTemplate: mimoto/error +# input: '{ +# "issuerId": "invalid", +# "credentialType": "$REMOVE$" +#}' +# output: '{ +# "errors":[ +# { +# "errorCode":"RESIDENT-APP-035" +# } +# ] +#}' \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypesResult.hbs b/api-test/src/main/resources/mimoto/GetIssuerWellKnown/GetIssuerWellKnownResult.hbs similarity index 100% rename from api-test/src/main/resources/mimoto/GetAllCredentialTypes/GetAllCredentialTypesResult.hbs rename to api-test/src/main/resources/mimoto/GetIssuerWellKnown/GetIssuerWellKnownResult.hbs diff --git a/api-test/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml b/api-test/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml index 5123a5f14..d695d11a6 100644 --- a/api-test/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml +++ b/api-test/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml @@ -9,7 +9,7 @@ OAuthDetailsRequestSunBirdC: outputTemplate: mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdCResult input: '{ "requestTime": "$TIMESTAMP$", - "clientId": "esignet-sunbird-partner", + "clientId": "$GETCLIENTIDFROMMIMOTOACTUATOR$", "scope": "sunbird_rc_insurance_vc_ldp", "responseType": "code", "redirectUri": "$INJIREDIRECTURI$", diff --git a/api-test/testNgXmlFiles/mimotoApi.xml b/api-test/testNgXmlFiles/mimotoApi.xml index 2ca5c5a34..ed02172c4 100644 --- a/api-test/testNgXmlFiles/mimotoApi.xml +++ b/api-test/testNgXmlFiles/mimotoApi.xml @@ -1,7 +1,7 @@ - + @@ -111,6 +111,13 @@ + + + + + + - + + value="mimoto/GetIssuerWellKnown/GetIssuerWellKnown.yml" /> - - - - - - Date: Thu, 10 Oct 2024 19:21:40 +0530 Subject: [PATCH 254/860] MOSIP-36077 - Added actuator property (#483) MOSIP-36077 - Added actuator property Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> --- api-test/src/main/resources/config/mimoto.properties | 1 + 1 file changed, 1 insertion(+) diff --git a/api-test/src/main/resources/config/mimoto.properties b/api-test/src/main/resources/config/mimoto.properties index 59e3d9522..962fe3343 100644 --- a/api-test/src/main/resources/config/mimoto.properties +++ b/api-test/src/main/resources/config/mimoto.properties @@ -1 +1,2 @@ #---------------------------------- End point(s) relative URLs ----------------------------------# +actuatorMimotoEndpoint=/v1/mimoto/actuator/env From cc10c19ba5491c97320854c9ddcdf8d2bbe5d8e8 Mon Sep 17 00:00:00 2001 From: Santhosh <102220709+santhoshsunder@users.noreply.github.com> Date: Wed, 16 Oct 2024 13:23:55 +0530 Subject: [PATCH 255/860] Add "uniqueIdentifier" for mimoto api testrig "MOSIP-35958" (#480) * 35958 Signed-off-by: santhoshsunder * MOSIP-35958 Signed-off-by: santhoshsunder * MOSIP-35958 Signed-off-by: santhoshsunder --------- Signed-off-by: santhoshsunder --- .../mimoto/AddIdentity/AddIdentity.yml | 4 + .../AidGetIndividualId/AidGetIndividualId.yml | 5 ++ .../mimoto/AuthLock/createAuthLock.yml | 6 ++ .../mimoto/AuthUnLock/createAuthUnLock.yml | 4 + .../AuthenticateUser/AuthenticateUser.yml | 1 + .../AuthorizationCode/AuthorizationCode.yml | 1 + .../mimoto/BindingOtp/BindingOtp.yml | 36 +++++++++ .../resources/mimoto/CreateVID/CreateVid.yml | 3 + .../CredentialCheckStatus.yml | 3 + .../DownloadCredential/DownloadCredential.yml | 3 + .../DownloadWithReqid/DownloadWithReqid.yml | 2 + .../RequestCredentials/ReqCredential.yml | 6 ++ .../DownloadIssuerCredential.yml | 6 ++ .../mimoto/GenerateVID/createGenerateVID.yml | 6 ++ .../mimoto/GetAllIssuers/GetAllIssuers.yml | 3 + .../OAuthDetailsRequest.yml | 1 + .../main/resources/mimoto/SendOTP/SendOTP.yml | 3 + .../mimoto/SendOTPUIN/createSendOTP.yml | 1 + .../mimoto/SendOtpForVid/createSendOTP.yml | 1 + .../AuthenticateUserSunBirdC.yml | 1 + .../AuthorizationCodeSunBirdC.yml | 1 + .../OAuthDetailsRequestSunBirdC.yml | 1 + .../CreatePolicySunBirdR.yml | 1 + .../DeletePolicySunBirdR.yml | 1 + .../GetPolicySunBirdR/GetPolicySunBirdR.yml | 1 + .../SearchPolicySunBirdR.yml | 1 + .../mimoto/ValidateOTP/ValidateOTP.yml | 12 +++ .../mimoto/WalletBinding/WalletBinding.yml | 78 +++++++++++++++++++ 28 files changed, 192 insertions(+) diff --git a/api-test/src/main/resources/mimoto/AddIdentity/AddIdentity.yml b/api-test/src/main/resources/mimoto/AddIdentity/AddIdentity.yml index d21b4ea28..e37fc7ea7 100644 --- a/api-test/src/main/resources/mimoto/AddIdentity/AddIdentity.yml +++ b/api-test/src/main/resources/mimoto/AddIdentity/AddIdentity.yml @@ -2,6 +2,7 @@ AddIdentity: Mimoto_AddIdentity_withValidParameters_smoke_Pos: endPoint: /idrepository/v1/identity/ description: Creating a new identity with all valid parameters + uniqueIdentifier: TC_Mimoto_AddIdentity_01 role: idrepo restMethod: post inputTemplate: mimoto/AddIdentity/addIdentity_$LANGNUMBER$ @@ -30,6 +31,7 @@ AddIdentity: Mimoto_AddIdentity_Binding_smoke_Pos: endPoint: /idrepository/v1/identity/ description: Creating a new identity with all valid parameters for Binding APIs + uniqueIdentifier: TC_Mimoto_AddIdentity_02 role: idrepo restMethod: post inputTemplate: mimoto/AddIdentity/addIdentity_$LANGNUMBER$ @@ -58,6 +60,7 @@ AddIdentity: Mimoto_AddIdentity_without_FaceDate_CBEFF_smoke_Pos: endPoint: /idrepository/v1/identity/ description: Creating a new identity UIN with out face data + uniqueIdentifier: TC_Mimoto_AddIdentity_03 role: idrepo restMethod: post inputTemplate: mimoto/AddIdentity/addIdentity_$LANGNUMBER$ @@ -90,6 +93,7 @@ AddIdentity: Mimoto_AddIdentity_downloadIssuerCredential_smoke_Pos: endPoint: /idrepository/v1/identity/ description: Creating a new identity for downloading issuer credential + uniqueIdentifier: TC_Mimoto_AddIdentity_04 role: idrepo restMethod: post inputTemplate: mimoto/AddIdentity/addIdentity_$LANGNUMBER$ diff --git a/api-test/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml b/api-test/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml index c4b95501c..88f46f67a 100644 --- a/api-test/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml +++ b/api-test/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml @@ -2,6 +2,7 @@ AidGetIndividualId: Mimoto_AidGetIndividualId_Getting_With_Valid_UIN_All: endPoint: /v1/mimoto/aid/get-individual-id description: Generating AID status with valid AID + uniqueIdentifier: TC_Mimoto_AidGetIndividualId_01 role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -28,6 +29,7 @@ AidGetIndividualId: Mimoto_AidGetIndividualId_Getting_With_Invalid_AID_Neg: endPoint: /v1/mimoto/aid/get-individual-id description: Generating individualID with invalid AID + uniqueIdentifier: TC_Mimoto_AidGetIndividualId_02 role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -58,6 +60,7 @@ AidGetIndividualId: Mimoto_AidGetIndividualId_Getting_With_Invalid_Otp_Neg: endPoint: /v1/mimoto/aid/get-individual-id description: Generating individualID with Invalid OTP + uniqueIdentifier: TC_Mimoto_AidGetIndividualId_03 role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -88,6 +91,7 @@ AidGetIndividualId: Mimoto_AidGetIndividualId_Getting_With_Valid_Otp_All: endPoint: /v1/mimoto/aid/get-individual-id description: Generating individualID with valid OTP + uniqueIdentifier: TC_Mimoto_AidGetIndividualId_04 role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -114,6 +118,7 @@ AidGetIndividualId: Mimoto_AidGetIndividualId_Getting_With_Invalid_lenght_Of_AID_Neg: endPoint: /v1/mimoto/aid/get-individual-id description: Generating individualID with invalid lengh of AID + uniqueIdentifier: TC_Mimoto_AidGetIndividualId_05 role: resident checkErrorsOnlyInResponse: true restMethod: post diff --git a/api-test/src/main/resources/mimoto/AuthLock/createAuthLock.yml b/api-test/src/main/resources/mimoto/AuthLock/createAuthLock.yml index a99f88baa..b5f8c4985 100644 --- a/api-test/src/main/resources/mimoto/AuthLock/createAuthLock.yml +++ b/api-test/src/main/resources/mimoto/AuthLock/createAuthLock.yml @@ -2,6 +2,7 @@ AuthLock: Mimoto_AuthLock_Valid_UIN_All: endPoint: /v1/mimoto/req/auth/lock description: Auth lock a particular UIN with valid parameters + uniqueIdentifier: TC_Mimoto_AuthLock_01 role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -30,6 +31,7 @@ AuthLock: Mimoto_AuthLock_InValid_Otp_All: endPoint: /v1/mimoto/req/auth/lock description: Auth Lock a particular UIN with invalid OTP + uniqueIdentifier: TC_Mimoto_AuthLock_02 role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -63,6 +65,7 @@ AuthLock: Mimoto_AuthLock_with_invalidUIN_Valid_Otp_sid: endPoint: /v1/mimoto/req/auth/lock description: Auth Lock a particular UIN with valid OTP + uniqueIdentifier: TC_Mimoto_AuthLock_03 role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -96,6 +99,7 @@ AuthLock: Mimoto_AuthLock_Valid_VID_All: endPoint: /v1/mimoto/req/auth/lock description: Auth lock a particular VID with valid VID + uniqueIdentifier: TC_Mimoto_AuthLock_04 role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -124,6 +128,7 @@ AuthLock: Mimoto_AuthLock_with_invalidVID_Valid_Otp: endPoint: /v1/mimoto/req/auth/lock description: Auth lock a particular VID with invalid OTP + uniqueIdentifier: TC_Mimoto_AuthLock_05 role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -157,6 +162,7 @@ AuthLock: Mimoto_AuthLock_invalidVID_Valid_Otp: endPoint: /v1/mimoto/req/auth/lock description: Auth lock a particular VID with invalid VID + uniqueIdentifier: TC_Mimoto_AuthLock_06 role: resident checkErrorsOnlyInResponse: true restMethod: post diff --git a/api-test/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml b/api-test/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml index 843798bef..58564a28b 100644 --- a/api-test/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml +++ b/api-test/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml @@ -2,6 +2,7 @@ AuthUnlock: Mimoto_AuthUnLock_Valid_UIN_All: endPoint: /v1/mimoto/req/auth/unlock description: Auth unlock a particular UIN with valid parameters + uniqueIdentifier: TC_Mimoto_AuthLock_07 role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -31,6 +32,7 @@ AuthUnlock: Mimoto_AuthUnLock_Valid_UIN_With_VID_All: endPoint: /v1/mimoto/req/auth/unlock description: Auth unlock a particular VID with valid parameters + uniqueIdentifier: TC_Mimoto_AuthLock_08 role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -60,6 +62,7 @@ AuthUnlock: Mimoto_AuthUnLock_With_InValid_OTP_All: endPoint: /v1/mimoto/req/auth/unlock description: Auth unlock a particular UIN with invalid OTP + uniqueIdentifier: TC_Mimoto_AuthLock_09 role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -94,6 +97,7 @@ AuthUnlock: Mimoto_AuthUnLock_InValid_OTP_With_VID_All: endPoint: /v1/mimoto/req/auth/unlock description: Unlock a particular VID with invalid OTP + uniqueIdentifier: TC_Mimoto_AuthLock_10 role: resident checkErrorsOnlyInResponse: true restMethod: post diff --git a/api-test/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.yml b/api-test/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.yml index 79ce77de8..3059f8921 100644 --- a/api-test/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.yml +++ b/api-test/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.yml @@ -2,6 +2,7 @@ AuthenticateUser: Mimoto_ESignet_AuthenticateUserIDP_uin_Otp_Valid_Smoke: endPoint: /v1/esignet/authorization/authenticate description: Authenticate user to download credentials with all valid parameters + uniqueIdentifier: TC_Mimoto_AuthenticateUser_01 role: resident restMethod: post checkErrorsOnlyInResponse: true diff --git a/api-test/src/main/resources/mimoto/AuthorizationCode/AuthorizationCode.yml b/api-test/src/main/resources/mimoto/AuthorizationCode/AuthorizationCode.yml index 8ab0f1e0c..ff8c224a9 100644 --- a/api-test/src/main/resources/mimoto/AuthorizationCode/AuthorizationCode.yml +++ b/api-test/src/main/resources/mimoto/AuthorizationCode/AuthorizationCode.yml @@ -2,6 +2,7 @@ AuthorizationCode: Mimoto_ESignet_AuthorizationCode_uin_All_Valid_Smoke_sid: endPoint: /v1/esignet/authorization/auth-code description: Generate authorization code to download credential issuer + uniqueIdentifier: TC_Mimoto_AuthorizationCode_01 role: resident restMethod: post checkErrorsOnlyInResponse: true diff --git a/api-test/src/main/resources/mimoto/BindingOtp/BindingOtp.yml b/api-test/src/main/resources/mimoto/BindingOtp/BindingOtp.yml index a8e6ab3ef..3341d8d2a 100644 --- a/api-test/src/main/resources/mimoto/BindingOtp/BindingOtp.yml +++ b/api-test/src/main/resources/mimoto/BindingOtp/BindingOtp.yml @@ -3,6 +3,7 @@ BindingOtp: endPoint: /v1/mimoto/binding-otp role: resident description: Creating OTP for binding a individualID with valid UIN + uniqueIdentifier: TC_Mimoto_BindingOtp_01 checkErrorsOnlyInResponse: true restMethod: post validityCheckRequired: true @@ -20,6 +21,7 @@ BindingOtp: Mimoto_BindingOtp_Valid_vid_All_Smoke: endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with valid VID + uniqueIdentifier: TC_Mimoto_BindingOtp_02 role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -38,6 +40,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Invalid_individualId_Neg: endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with invalid UIN + uniqueIdentifier: TC_Mimoto_BindingOtp_03 role: resident restMethod: post validityCheckRequired: true @@ -59,6 +62,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Missing_individualId_Neg: endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID without individualId attribute + uniqueIdentifier: TC_Mimoto_BindingOtp_04 role: resident restMethod: post validityCheckRequired: true @@ -80,6 +84,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Empty_individualId_Neg: endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with individualId missing + uniqueIdentifier: TC_Mimoto_BindingOtp_05 role: resident restMethod: post validityCheckRequired: true @@ -101,6 +106,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Null_individualId_Neg: endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with individualId value as null + uniqueIdentifier: TC_Mimoto_BindingOtp_06 role: resident restMethod: post validityCheckRequired: true @@ -122,6 +128,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_SpaceSeparated_otpChannels_Neg: endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with OTP channel value been spaced in between + uniqueIdentifier: TC_Mimoto_BindingOtp_07 role: resident restMethod: post validityCheckRequired: true @@ -143,6 +150,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Invalid_OtpChannels_Neg: endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with invalid OTP channel + uniqueIdentifier: TC_Mimoto_BindingOtp_08 role: resident restMethod: post validityCheckRequired: true @@ -164,6 +172,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Missing_OtpChannels_Neg: endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with OTP channel missing + uniqueIdentifier: TC_Mimoto_BindingOtp_09 role: resident restMethod: post validityCheckRequired: true @@ -185,6 +194,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Empty_OtpChannels_Neg: endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with OTP channel being empty + uniqueIdentifier: TC_Mimoto_BindingOtp_10 role: resident restMethod: post validityCheckRequired: true @@ -206,6 +216,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Null_OtpChannels_Neg: endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with OTP channel value being null + uniqueIdentifier: TC_Mimoto_BindingOtp_11 role: resident restMethod: post validityCheckRequired: true @@ -227,6 +238,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Missing_OtpChannel_Neg: endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with OTP channel missing + uniqueIdentifier: TC_Mimoto_BindingOtp_12 role: resident restMethod: post validityCheckRequired: true @@ -248,6 +260,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Empty_OtpChannel_Neg: endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with OTP channel being empty + uniqueIdentifier: TC_Mimoto_BindingOtp_13 role: resident restMethod: post validityCheckRequired: true @@ -269,6 +282,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Null_OtpChannel_Neg: endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with OTP channel being empty + uniqueIdentifier: TC_Mimoto_BindingOtp_14 role: resident restMethod: post validityCheckRequired: true @@ -290,6 +304,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Invalid_RequestTime_Neg: endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with invalid request time + uniqueIdentifier: TC_Mimoto_AuthLock_07 role: resident restMethod: post validityCheckRequired: true @@ -311,6 +326,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Past_RequestTime_Neg: endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with past request time + uniqueIdentifier: TC_Mimoto_BindingOtp_16 role: resident restMethod: post validityCheckRequired: true @@ -332,6 +348,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Future_RequestTime_Neg: endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with future request time + uniqueIdentifier: TC_Mimoto_BindingOtp_17 role: resident restMethod: post validityCheckRequired: true @@ -353,6 +370,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Missing_RequestTime_Neg: endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with missing request time + uniqueIdentifier: TC_Mimoto_BindingOtp_18 role: resident restMethod: post validityCheckRequired: true @@ -374,6 +392,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Empty_RequestTime_Neg: endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with empty request time + uniqueIdentifier: TC_Mimoto_BindingOtp_19 role: resident restMethod: post validityCheckRequired: true @@ -395,6 +414,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Invalid_individualId_Neg: endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with invalid VID + uniqueIdentifier: TC_Mimoto_BindingOtp_20 role: resident restMethod: post validityCheckRequired: true @@ -416,6 +436,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Missing_individualId_Neg: endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with missing VID + uniqueIdentifier: TC_Mimoto_BindingOtp_21 role: resident restMethod: post validityCheckRequired: true @@ -437,6 +458,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Empty_individualId_Neg: endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with empty VID + uniqueIdentifier: TC_Mimoto_BindingOtp_22 role: resident restMethod: post validityCheckRequired: true @@ -458,6 +480,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Null_individualId_Neg: endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a individualID with invalid VID + uniqueIdentifier: TC_Mimoto_BindingOtp_23 role: resident restMethod: post validityCheckRequired: true @@ -479,6 +502,7 @@ BindingOtp: Mimoto_BindingOtp_vid_SpaceSeparated_otpChannels_Neg: endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a VID with OTP channel value been spaced in between + uniqueIdentifier: TC_Mimoto_BindingOtp_24 role: resident restMethod: post validityCheckRequired: true @@ -500,6 +524,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Invalid_OtpChannels_Neg: endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a VID with invalid OTP channel + uniqueIdentifier: TC_Mimoto_BindingOtp_25 role: resident restMethod: post validityCheckRequired: true @@ -521,6 +546,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Missing_OtpChannels_Neg: endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a VID with missing OTP channel values + uniqueIdentifier: TC_Mimoto_BindingOtp_26 role: resident restMethod: post validityCheckRequired: true @@ -542,6 +568,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Empty_OtpChannels_Neg: endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a VID with empty OTP channel values + uniqueIdentifier: TC_Mimoto_BindingOtp_27 role: resident restMethod: post validityCheckRequired: true @@ -563,6 +590,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Null_OtpChannels_Neg: endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a VID with OTP channel values as null + uniqueIdentifier: TC_Mimoto_BindingOtp_28 role: resident restMethod: post validityCheckRequired: true @@ -584,6 +612,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Missing_OtpChannel_Neg: endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a VID with OTP channel values missing + uniqueIdentifier: TC_Mimoto_BindingOtp_29 role: resident restMethod: post validityCheckRequired: true @@ -605,6 +634,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Empty_OtpChannel_Neg: endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a VID with OTP channel values empty + uniqueIdentifier: TC_Mimoto_BindingOtp_30 role: resident restMethod: post validityCheckRequired: true @@ -626,6 +656,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Null_OtpChannel_Neg: endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a VID with OTP channel values as null + uniqueIdentifier: TC_Mimoto_BindingOtp_31 role: resident restMethod: post validityCheckRequired: true @@ -647,6 +678,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Invalid_RequestTime_Neg: endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a VID with invalid request time + uniqueIdentifier: TC_Mimoto_BindingOtp_32 role: resident restMethod: post validityCheckRequired: true @@ -668,6 +700,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Past_RequestTime_Neg: endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a VID with past request time + uniqueIdentifier: TC_Mimoto_BindingOtp_33 role: resident restMethod: post validityCheckRequired: true @@ -689,6 +722,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Future_RequestTime_Neg: endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a VID with future request time + uniqueIdentifier: TC_Mimoto_BindingOtp_34 role: resident restMethod: post validityCheckRequired: true @@ -710,6 +744,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Missing_RequestTime_Neg: endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a VID with request time missing + uniqueIdentifier: TC_Mimoto_BindingOtp_35 role: resident restMethod: post validityCheckRequired: true @@ -731,6 +766,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Empty_RequestTime_Neg: endPoint: /v1/mimoto/binding-otp description: Creating OTP for binding a VID with request time empty + uniqueIdentifier: TC_Mimoto_BindingOtp_36 role: resident restMethod: post validityCheckRequired: true diff --git a/api-test/src/main/resources/mimoto/CreateVID/CreateVid.yml b/api-test/src/main/resources/mimoto/CreateVID/CreateVid.yml index 4571e0476..e9415f533 100644 --- a/api-test/src/main/resources/mimoto/CreateVID/CreateVid.yml +++ b/api-test/src/main/resources/mimoto/CreateVID/CreateVid.yml @@ -2,6 +2,7 @@ CreateVID: Mimoto_Generate_Perpetual_VID_Valid_Smoke_sid: endPoint: /idrepository/v1/vid description: Create perpetual VID with valid details + uniqueIdentifier: TC_Mimoto_GenerateVID_01 role: idrepo restMethod: post inputTemplate: mimoto/CreateVID/createVid @@ -20,6 +21,7 @@ CreateVID: Mimoto_Generate_Temporary_VID_Valid_Smoke_sid: endPoint: /idrepository/v1/vid description: Create temporary VID with valid details + uniqueIdentifier: TC_Mimoto_GenerateVID_04 role: idrepo restMethod: post inputTemplate: mimoto/CreateVID/createVid @@ -38,6 +40,7 @@ CreateVID: Mimoto_Generate_Perpetual_VID_Binding_Valid_Smoke_sid: endPoint: /idrepository/v1/vid description: Create perpetual VID for binding with valid details + uniqueIdentifier: TC_Mimoto_GenerateVID_06 role: idrepo restMethod: post inputTemplate: mimoto/CreateVID/createVid diff --git a/api-test/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml b/api-test/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml index f8d568a8a..e7a88d8c7 100644 --- a/api-test/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml +++ b/api-test/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml @@ -2,6 +2,7 @@ CredentialsStatus: Mimoto_CredentialsStatus_euin_All_Valid_Smoke: endPoint: /v1/mimoto/credentialshare/request/status/{requestId} description: Retrieving credential status with valid UIN + uniqueIdentifier: TC_Mimoto_CredentialsStatus_01 role: resident restMethod: get inputTemplate: mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatus @@ -15,6 +16,7 @@ CredentialsStatus: Mimoto_CredentialsStatus_euin_With_VID_All_Valid_Smoke: endPoint: /v1/mimoto/credentialshare/request/status/{requestId} description: Retrieving credential status with valid VID + uniqueIdentifier: TC_Mimoto_CredentialsStatus_02 role: resident restMethod: get inputTemplate: mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatus @@ -29,6 +31,7 @@ CredentialsStatus: Mimoto_CredentialsStatus_euin_With_Invalid_RequestId_Neg: endPoint: /v1/mimoto/credentialshare/request/status/{requestId} description: Retrieving credential status with invalid requestId + uniqueIdentifier: TC_Mimoto_CreateVID_03 role: resident restMethod: get inputTemplate: mimoto/CredentialIssuance/CredentialCheckStatus/credentialcheckstatus diff --git a/api-test/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml b/api-test/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml index 14d5ae41c..824c0f97e 100644 --- a/api-test/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml +++ b/api-test/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml @@ -2,6 +2,7 @@ DownloadCredential: Mimoto_DownloadCredential_All_Valid_Smoke: endPoint: /v1/mimoto/credentialshare/download description: Downloading credential with all valid parameters + uniqueIdentifier: TC_Mimoto_DownloadCredential_01 role: resident restMethod: post inputTemplate: mimoto/CredentialIssuance/DownloadCredential/downloadCredential @@ -17,6 +18,7 @@ DownloadCredential: Mimoto_DownloadCredential_Invalid_RequestId_Neg: endPoint: /v1/mimoto/credentialshare/download description: Downloading credetial with invalid RequestId + uniqueIdentifier: TC_Mimoto_DownloadCredential_02 role: resident restMethod: post inputTemplate: mimoto/CredentialIssuance/DownloadCredential/downloadCredential @@ -32,6 +34,7 @@ DownloadCredential: Mimoto_DownloadCredential_Invalid_IndividualId_Neg: endPoint: /v1/mimoto/credentialshare/download description: Downloading credetial with invalid IndividualId + uniqueIdentifier: TC_Mimoto_DownloadCredential_03 role: resident restMethod: post inputTemplate: mimoto/CredentialIssuance/DownloadCredential/downloadCredential diff --git a/api-test/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml b/api-test/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml index 6d924b024..b97c68f78 100644 --- a/api-test/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml +++ b/api-test/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml @@ -2,6 +2,7 @@ DownloadCredential: Mimoto_CredentialsStatus_All_Valid_Smoke_euin: endPoint: /v1/mimoto/credentialshare/download description: Checking credential status with all valid parameters + uniqueIdentifier: TC_Mimoto_DownloadCredential_01 role: resident checkErrorsOnlyInResponse: true restMethod: get @@ -17,6 +18,7 @@ DownloadCredential: Mimoto_CredentialsStatus_StatusCode_InValid_Smoke_euin: endPoint: /v1/mimoto/credentialshare/download description: Checking credential status with invalid StatusCode + uniqueIdentifier: TC_Mimoto_DownloadCredential_02 role: resident restMethod: get inputTemplate: mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqid diff --git a/api-test/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml b/api-test/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml index fc551b0b6..0ac780700 100644 --- a/api-test/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml +++ b/api-test/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml @@ -2,6 +2,7 @@ RequestCredentials: Mimoto_RequestCredentials__All_Valid_Smoke_sid: endPoint: /v1/mimoto/credentialshare/request description: requesting credential with all valid parameters + uniqueIdentifier: TC_Mimoto_RequestCredentials_01 role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -30,6 +31,7 @@ RequestCredentials: Mimoto_RequestCredentials_All_Valid_Smoke_with_VID_sid: endPoint: /v1/mimoto/credentialshare/request description: requesting credential with valid VID + uniqueIdentifier: TC_Mimoto_RequestCredentials_02 role: resident restMethod: post checkErrorsOnlyInResponse: true @@ -59,6 +61,7 @@ RequestCredentials: endPoint: /v1/mimoto/credentialshare/request role: resident description: requesting UIN credential with invalid OTP + uniqueIdentifier: TC_Mimoto_RequestCredentials_03 checkErrorsOnlyInResponse: true restMethod: post inputTemplate: mimoto/CredentialIssuance/RequestCredentials/reqCredential @@ -90,6 +93,7 @@ RequestCredentials: Mimoto_RequestCredentials_InValid_TransactionId_sid: endPoint: /v1/mimoto/credentialshare/request description: requesting credential with invalid transactionID + uniqueIdentifier: TC_Mimoto_RequestCredentials_04 role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -123,6 +127,7 @@ RequestCredentials: Mimoto_RequestCredentials_InValid_UIN_sid: endPoint: /v1/mimoto/credentialshare/request description: requesting credential with invalid UIN + uniqueIdentifier: TC_Mimoto_RequestCredentials_05 role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -156,6 +161,7 @@ RequestCredentials: Mimoto_RequestCredentials_Invalid_VID_sid_Neg: endPoint: /v1/mimoto/credentialshare/request description: requesting credential with invalid VID + uniqueIdentifier: TC_Mimoto_RequestCredentials_06 role: resident checkErrorsOnlyInResponse: true restMethod: post diff --git a/api-test/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml b/api-test/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml index 7a24c1b59..257996919 100644 --- a/api-test/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml +++ b/api-test/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml @@ -2,6 +2,7 @@ DownloadIssuerCredential: Mimoto_DownloadIssuerCredential_IssuerMosip_All_Valid_Smoke: endPoint: /v1/mimoto/credentials/download description: Downloading credential with all valid parameters + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredential_01 role: resident restMethod: get checkErrorsOnlyInResponse: true @@ -21,6 +22,7 @@ DownloadIssuerCredential: Mimoto_DownloadIssuerCredential_Invalid_Issuer_Neg: endPoint: /v1/mimoto/credentials/download description: Downloading credential with invalid issuer + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredential_02 role: resident restMethod: get checkErrorsOnlyInResponse: true @@ -45,6 +47,7 @@ DownloadIssuerCredential: Mimoto_DownloadIssuerCredential_Invalid_Credential_Neg: endPoint: /v1/mimoto/credentials/download description: Downloading credential with invalid credential + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredential_03 role: resident restMethod: get checkErrorsOnlyInResponse: true @@ -69,6 +72,7 @@ DownloadIssuerCredential: Mimoto_DownloadIssuerCredential_Invalid_AuthorizationCode_Neg: endPoint: /v1/mimoto/credentials/download description: Downloading credential with invalid credential AuthorizationCode + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredential_04 role: resident restMethod: get checkErrorsOnlyInResponse: true @@ -94,6 +98,7 @@ DownloadIssuerCredential: Mimoto_DownloadIssuerCredential_Reused_AuthorizationCode_Neg: endPoint: /v1/mimoto/credentials/download description: Downloading credential with invalid expired authorizationCode + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredential_05 role: resident restMethod: get checkErrorsOnlyInResponse: true @@ -117,6 +122,7 @@ DownloadIssuerCredential: Mimoto_DownloadIssuerCredential_IssuerSunBird_All_Valid_Smoke: endPoint: /v1/mimoto/credentials/download description: Downloading sunbird credential with valid authorizationCode + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredential_06 role: resident restMethod: get checkErrorsOnlyInResponse: true diff --git a/api-test/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml b/api-test/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml index 71ce03900..067268030 100644 --- a/api-test/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml +++ b/api-test/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml @@ -2,6 +2,7 @@ GenerateVID: Mimoto_Generate_Perpetual_VID_Valid_Smoke_sid: endPoint: /v1/mimoto/vid description: Creating Perpetual VID with all valid parameters + uniqueIdentifier: TC_Mimoto_GenerateVID_01 role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -30,6 +31,7 @@ GenerateVID: Mimoto_Generate_Perpetual_VID_InValid_Otp_sid: endPoint: /v1/mimoto/vid description: Creating Perpetual VID with invalid OTP + uniqueIdentifier: TC_Mimoto_GenerateVID_02 role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -63,6 +65,7 @@ GenerateVID: Mimoto_Generate_Perpetual_VID_with_InvalidUIN_Valid_Otp_sid: endPoint: /v1/mimoto/vid description: Creating Perpetual VID with invalid UIN + uniqueIdentifier: TC_Mimoto_GenerateVID_03 role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -97,6 +100,7 @@ GenerateVID: mimoto_Generate_Temporary_VID_Valid_Smoke_sid: endPoint: /v1/mimoto/vid description: Creating temporary VID with all valid request + uniqueIdentifier: TC_Mimoto_GenerateVID_04 role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -126,6 +130,7 @@ GenerateVID: Mimoto_Generate_Perpetual_VID_Invalid_TransactionId_Neg: endPoint: /v1/mimoto/vid description: Creating perpetual VID with invalid transactionID + uniqueIdentifier: TC_Mimoto_GenerateVID_05 role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -160,6 +165,7 @@ GenerateVID: Mimoto_Generate_Perpetual_VID_Binding_Valid_Smoke_sid: endPoint: /v1/mimoto/vid description: Creating perpetual VID with binding valid request + uniqueIdentifier: TC_Mimoto_GenerateVID_06 role: resident checkErrorsOnlyInResponse: true restMethod: post diff --git a/api-test/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml b/api-test/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml index e4c7010d0..1dcf03e91 100644 --- a/api-test/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml +++ b/api-test/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml @@ -2,6 +2,7 @@ GetAllIssuers: Mimoto_GetAllIssuers_All_Valid_Smoke: endPoint: /v1/mimoto/issuers description: Retrieving issuers with all valid parameters + uniqueIdentifier: TC_Mimoto_GetAllIssuers_01 role: resident restMethod: get checkErrorsOnlyInResponse: true @@ -15,6 +16,7 @@ GetAllIssuers: Mimoto_GetAllIssuers_Specific_Issuer_All_Valid_Smoke: endPoint: /v1/mimoto/issuers/Mosip description: Retrieving all specific issuer with all valid parameters + uniqueIdentifier: TC_Mimoto_GetAllIssuers_02 role: resident restMethod: get checkErrorsOnlyInResponse: true @@ -28,6 +30,7 @@ GetAllIssuers: Mimoto_GetAllIssuers_Invalid_Issuer_Neg: endPoint: /v1/mimoto/issuers/invalid description: Retrieving invalid issuer + uniqueIdentifier: TC_Mimoto_GetAllIssuers_03 role: resident restMethod: get checkErrorsOnlyInResponse: true diff --git a/api-test/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.yml b/api-test/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.yml index 6c28f19f6..aaf157c4a 100644 --- a/api-test/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.yml +++ b/api-test/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.yml @@ -2,6 +2,7 @@ OAuthDetailsRequest: Mimoto_ESignet_OAuthDetailsRequest_all_Valid_Smoke_sid: endPoint: /v1/esignet/authorization/v2/oauth-details description: Creating Oauth's details with all valid parameters + uniqueIdentifier: TC_Mimoto_OAuthDetailsRequest_01 role: resident restMethod: post checkErrorsOnlyInResponse: true diff --git a/api-test/src/main/resources/mimoto/SendOTP/SendOTP.yml b/api-test/src/main/resources/mimoto/SendOTP/SendOTP.yml index fdcb2e60d..53b18ca43 100644 --- a/api-test/src/main/resources/mimoto/SendOTP/SendOTP.yml +++ b/api-test/src/main/resources/mimoto/SendOTP/SendOTP.yml @@ -2,6 +2,7 @@ SendOTP: Resident_SendOTP_Valid_UIN_All_Smoke: endPoint: /resident/v1/req/otp description: Creating resident requesting OTP with valid UIN + uniqueIdentifier: TC_Mimoto_SendOTP_01 role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -21,6 +22,7 @@ SendOTP: Resident_SendOTP_Invalid_UIN_Neg: endPoint: /resident/v1/req/otp description: Creating resident requesting OTP with invalid UIN + uniqueIdentifier: TC_Mimoto_SendOTP_02 role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -40,6 +42,7 @@ SendOTP: Resident_SendOTP_Invalid_VID_Neg: endPoint: /resident/v1/req/otp description: Creating requesting OTP with invalid VID + uniqueIdentifier: TC_Mimoto_SendOTP_03 role: resident restMethod: post inputTemplate: resident/SendOTP/createSendOTP diff --git a/api-test/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml b/api-test/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml index f1a84c686..27b322d44 100644 --- a/api-test/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml +++ b/api-test/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml @@ -2,6 +2,7 @@ individualOTP: Mimoto_individualOTP_All_Valid_Smoke: endPoint: /v1/mimoto/req/individualId/otp description: generating individual OTP with valid parameters + uniqueIdentifier: TC_Mimoto_individualOTP_01 role: resident checkErrorsOnlyInResponse: true restMethod: post diff --git a/api-test/src/main/resources/mimoto/SendOtpForVid/createSendOTP.yml b/api-test/src/main/resources/mimoto/SendOtpForVid/createSendOTP.yml index 497135f01..96e70c538 100644 --- a/api-test/src/main/resources/mimoto/SendOtpForVid/createSendOTP.yml +++ b/api-test/src/main/resources/mimoto/SendOtpForVid/createSendOTP.yml @@ -2,6 +2,7 @@ createSendOTP: Resident_SendOTP_All_Valid_Smoke: endPoint: /idauthentication/v1/otp/v4jO2rTUkDglaG7rCkWDnqIT3WpZaGEW9j3FMXwTA5xXKVaDpx/6001/34536061 description: Generating OTP with all valid parameters + uniqueIdentifier: TC_Mimoto_createSendOTP_01 role: resident restMethod: post inputTemplate: resident/SendOtpForVid/createSendOTP diff --git a/api-test/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml b/api-test/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml index e972a0eb7..a4962b1f8 100644 --- a/api-test/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml +++ b/api-test/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml @@ -2,6 +2,7 @@ AuthenticateUserSunBirdC: Mimoto_ESignet_AuthenticateUser_SunBirdC_Valid_Smoke: endPoint: $ESIGNETMOCKBASEURL$/v1/esignet/authorization/authenticate description: Authenticating user for downloading sunbird credential + uniqueIdentifier: TC_Mimoto_AuthenticateUserSunBirdC_01 role: resident restMethod: post checkErrorsOnlyInResponse: true diff --git a/api-test/src/main/resources/mimoto/SunBirdC/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.yml b/api-test/src/main/resources/mimoto/SunBirdC/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.yml index 3dc5bad81..de0d47b04 100644 --- a/api-test/src/main/resources/mimoto/SunBirdC/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.yml +++ b/api-test/src/main/resources/mimoto/SunBirdC/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.yml @@ -2,6 +2,7 @@ AuthorizationCodeSunBirdC: Mimoto_ESignet_AuthorizationCode_SunBirdC_All_Valid_Smoke_sid: endPoint: $ESIGNETMOCKBASEURL$/v1/esignet/authorization/auth-code description: Generating authorization code for downloading sunbird VC + uniqueIdentifier: TC_Mimoto_AuthorizationCodeSunBirdC_01 role: resident restMethod: post checkErrorsOnlyInResponse: true diff --git a/api-test/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml b/api-test/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml index d695d11a6..4b717219e 100644 --- a/api-test/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml +++ b/api-test/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml @@ -2,6 +2,7 @@ OAuthDetailsRequestSunBirdC: Mimoto_ESignet_OAuthDetailsRequest_SunBirdC_all_Valid_Smoke_sid: endPoint: $ESIGNETMOCKBASEURL$/v1/esignet/authorization/v2/oauth-details description: Getting auth details for downloading sunbird credentials + uniqueIdentifier: TC_Mimoto_OAuthDetailsRequestSunBirdC_01 role: resident restMethod: post checkErrorsOnlyInResponse: true diff --git a/api-test/src/main/resources/mimoto/SunBirdR/CreatePolicySunBirdR/CreatePolicySunBirdR.yml b/api-test/src/main/resources/mimoto/SunBirdR/CreatePolicySunBirdR/CreatePolicySunBirdR.yml index 33235e051..d61bb73c0 100644 --- a/api-test/src/main/resources/mimoto/SunBirdR/CreatePolicySunBirdR/CreatePolicySunBirdR.yml +++ b/api-test/src/main/resources/mimoto/SunBirdR/CreatePolicySunBirdR/CreatePolicySunBirdR.yml @@ -2,6 +2,7 @@ CreatePolicySunBirdR: Mimoto_ESignet_SunBirdR_CreatePolicy_NOAUTH_Valid_Smoke_Sid: endPoint: $SUNBIRDBASEURL$/api/v1/Insurance description: Creating new sunbird policy with valid parameters + uniqueIdentifier: TC_Mimoto_CreatePolicySunBirdR_01 role: resident restMethod: post checkErrorsOnlyInResponse: true diff --git a/api-test/src/main/resources/mimoto/SunBirdR/DeletePolicySunBirdR/DeletePolicySunBirdR.yml b/api-test/src/main/resources/mimoto/SunBirdR/DeletePolicySunBirdR/DeletePolicySunBirdR.yml index 9aa97083e..8596c1c22 100644 --- a/api-test/src/main/resources/mimoto/SunBirdR/DeletePolicySunBirdR/DeletePolicySunBirdR.yml +++ b/api-test/src/main/resources/mimoto/SunBirdR/DeletePolicySunBirdR/DeletePolicySunBirdR.yml @@ -2,6 +2,7 @@ DeletePolicySunBirdR: Mimoto_ESignet_SunBirdR_DeletePolicy_NOAUTH_Valid_Smoke: endPoint: $SUNBIRDBASEURL$/api/v1/Insurance/{insuranceid} description: Deleting Sunbird policy with valid parameters + uniqueIdentifier: TC_Mimoto_DeletePolicySunBirdR_01 role: resident restMethod: delete checkErrorsOnlyInResponse: true diff --git a/api-test/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.yml b/api-test/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.yml index 3f8e5bd0e..f3272c103 100644 --- a/api-test/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.yml +++ b/api-test/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.yml @@ -2,6 +2,7 @@ GetPolicySunBirdR: Mimoto_ESignet_SunBirdR_GetPolicy_NOAUTH_Valid_Smoke: endPoint: $SUNBIRDBASEURL$/api/v1/Insurance/{insuranceid} description: Getting sunbird policy with valid parameters + uniqueIdentifier: TC_Mimoto_GetPolicySunBirdR_01 role: resident restMethod: get checkErrorsOnlyInResponse: true diff --git a/api-test/src/main/resources/mimoto/SunBirdR/SearchPolicySunBirdR/SearchPolicySunBirdR.yml b/api-test/src/main/resources/mimoto/SunBirdR/SearchPolicySunBirdR/SearchPolicySunBirdR.yml index cf10fbb9a..3fcdc3a2a 100644 --- a/api-test/src/main/resources/mimoto/SunBirdR/SearchPolicySunBirdR/SearchPolicySunBirdR.yml +++ b/api-test/src/main/resources/mimoto/SunBirdR/SearchPolicySunBirdR/SearchPolicySunBirdR.yml @@ -2,6 +2,7 @@ SearchPolicySunBirdR: Mimoto_ESignet_SunBirdR_SearchPolicy_NOAUTH_Valid_Smoke: endPoint: $SUNBIRDBASEURL$/api/v1/Insurance/search description: Searching sunbird policy with valid parameters + uniqueIdentifier: TC_Mimoto_SearchPolicySunBirdR_01 role: resident restMethod: post checkErrorsOnlyInResponse: true diff --git a/api-test/src/main/resources/mimoto/ValidateOTP/ValidateOTP.yml b/api-test/src/main/resources/mimoto/ValidateOTP/ValidateOTP.yml index ddbe571d3..85b6245fe 100644 --- a/api-test/src/main/resources/mimoto/ValidateOTP/ValidateOTP.yml +++ b/api-test/src/main/resources/mimoto/ValidateOTP/ValidateOTP.yml @@ -2,6 +2,7 @@ SendOTP: Resident_SendOTP_Valid_UIN_All_Smoke: endPoint: /resident/v1/req/otp description: Generating OTP with valid UIN + uniqueIdentifier: TC_Mimoto_SendOTP_05 role: resident restMethod: post inputTemplate: resident/SendOTP/createSendOTP @@ -18,6 +19,7 @@ SendOTP: Resident_SendOTP_Valid_UIN_Phone_Smoke: endPoint: /resident/v1/req/otp description: Generating OTP with OTP channel as phone + uniqueIdentifier: TC_Mimoto_SendOTP_06 role: resident checkErrorsOnlyInResponse: true restMethod: post @@ -36,6 +38,7 @@ SendOTP: Resident_SendOTP_Valid_UIN_Email_Smoke: endPoint: /resident/v1/req/otp description: Generating OTP with OTP channel as email + uniqueIdentifier: TC_Mimoto_SendOTP_07 role: resident restMethod: post inputTemplate: resident/SendOTP/createSendOTP2 @@ -53,6 +56,7 @@ SendOTP: Resident_SendOTP_RevokedVID_Invalid: endPoint: /resident/v1/req/otp description: Generating OTP with revoked VID + uniqueIdentifier: TC_Mimoto_SendOTP_08 role: resident restMethod: post inputTemplate: resident/SendOTP/createSendOTP @@ -69,6 +73,7 @@ SendOTP: Resident_SendOTP_Valid_UIN_Invalid_empty_otpChannel: endPoint: /resident/v1/req/otp description: Generating OTP with empty OTP channel + uniqueIdentifier: TC_Mimoto_SendOTP_09 role: resident restMethod: post inputTemplate: resident/SendOTP/createSendOTP2 @@ -86,6 +91,7 @@ SendOTP: Resident_SendOTP_InValid_individualId: endPoint: /resident/v1/req/otp description: Generating OTP with invalid individualID + uniqueIdentifier: TC_Mimoto_SendOTP_10 role: resident restMethod: post inputTemplate: resident/SendOTP/createSendOTP @@ -102,6 +108,7 @@ SendOTP: Resident_SendOTP_InValid_Missing_individualId: endPoint: /resident/v1/req/otp description: Generating OTP with missing individualID + uniqueIdentifier: TC_Mimoto_SendOTP_11 role: resident restMethod: post inputTemplate: resident/SendOTP/createSendOTP @@ -118,6 +125,7 @@ SendOTP: Resident_SendOTP_InValid_Empty_transactionID: endPoint: /resident/v1/req/otp description: Generating OTP with empty transactionID + uniqueIdentifier: TC_Mimoto_SendOTP_12 role: resident restMethod: post inputTemplate: resident/SendOTP/createSendOTP @@ -134,6 +142,7 @@ SendOTP: Resident_SendOTP_InValid_transactionID: endPoint: /resident/v1/req/otp description: Generating OTP with invalid transactionID + uniqueIdentifier: TC_Mimoto_SendOTP_13 role: resident restMethod: post inputTemplate: resident/SendOTP/createSendOTP @@ -150,6 +159,7 @@ SendOTP: Resident_SendOTP_InValid_Missing_transactionID: endPoint: /resident/v1/req/otp description: Generating OTP with missing transactionID + uniqueIdentifier: TC_Mimoto_SendOTP_14 role: resident restMethod: post inputTemplate: resident/SendOTP/createSendOTP @@ -166,6 +176,7 @@ SendOTP: Resident_SendOTP_InValid_Empty_requestTime: endPoint: /resident/v1/req/otp description: Generating OTP with empty request time + uniqueIdentifier: TC_Mimoto_SendOTP_15 role: resident restMethod: post inputTemplate: resident/SendOTP/createSendOTP @@ -182,6 +193,7 @@ SendOTP: Resident_SendOTP_InValid_requestTime: endPoint: /resident/v1/req/otp description: Generating OTP with invalid request time + uniqueIdentifier: TC_Mimoto_SendOTP_16 role: resident restMethod: post inputTemplate: resident/SendOTP/createSendOTP diff --git a/api-test/src/main/resources/mimoto/WalletBinding/WalletBinding.yml b/api-test/src/main/resources/mimoto/WalletBinding/WalletBinding.yml index ba2b8596c..db69714f2 100644 --- a/api-test/src/main/resources/mimoto/WalletBinding/WalletBinding.yml +++ b/api-test/src/main/resources/mimoto/WalletBinding/WalletBinding.yml @@ -2,6 +2,7 @@ WalletBinding: Mimoto_WalletBinding_uin_OTP_Valid_Smoke: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with valid UIN + uniqueIdentifier: TC_Mimoto_WalletBinding_01 role: resident validityCheckRequired: true restMethod: post @@ -36,6 +37,7 @@ WalletBinding: Mimoto_WalletBinding_vid_OTP_Valid_Smoke: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with valid VID + uniqueIdentifier: TC_Mimoto_WalletBinding_02 role: resident validityCheckRequired: true restMethod: post @@ -70,6 +72,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_RequestTime_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with invalid request time + uniqueIdentifier: TC_Mimoto_WalletBinding_03 role: resident validityCheckRequired: true restMethod: post @@ -109,6 +112,7 @@ WalletBinding: Mimoto_WalletBinding_uin_PastVal_RequestTime_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with past request time + uniqueIdentifier: TC_Mimoto_WalletBinding_04 role: resident validityCheckRequired: true restMethod: post @@ -148,6 +152,7 @@ WalletBinding: Mimoto_WalletBinding_uin_FutureVal_RequestTime_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with future request time + uniqueIdentifier: TC_Mimoto_WalletBinding_05 role: resident validityCheckRequired: true restMethod: post @@ -187,6 +192,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Empty_RequestTime_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with empty requestime + uniqueIdentifier: TC_Mimoto_WalletBinding_06 role: resident validityCheckRequired: true restMethod: post @@ -226,6 +232,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_RequestTime_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with missing requestime + uniqueIdentifier: TC_Mimoto_WalletBinding_07 role: resident validityCheckRequired: true restMethod: post @@ -265,6 +272,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_IndividualId_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with invalid individualId + uniqueIdentifier: TC_Mimoto_WalletBinding_08 role: resident validityCheckRequired: true restMethod: post @@ -304,6 +312,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Empty_IndividualId_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with empty individualId + uniqueIdentifier: TC_Mimoto_WalletBinding_09 role: resident validityCheckRequired: true restMethod: post @@ -343,6 +352,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Null_IndividualId_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with individualId being null + uniqueIdentifier: TC_Mimoto_WalletBinding_10 role: resident validityCheckRequired: true restMethod: post @@ -382,6 +392,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_IndividualId_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with individualId being missing + uniqueIdentifier: TC_Mimoto_WalletBinding_11 role: resident validityCheckRequired: true restMethod: post @@ -421,6 +432,7 @@ WalletBinding: Mimoto_WalletBinding_uin_SpaceVal_IndividualId_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with individualId value having space + uniqueIdentifier: TC_Mimoto_WalletBinding_12 role: resident validityCheckRequired: true restMethod: post @@ -460,6 +472,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_AuthFactorType_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with invalid authfactortype + uniqueIdentifier: TC_Mimoto_WalletBinding_13 role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -500,6 +513,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Empty_AuthFactorType_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with empty authfactortype + uniqueIdentifier: TC_Mimoto_WalletBinding_14 role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -540,6 +554,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_AuthFactorType_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with missing authfactortype + uniqueIdentifier: TC_Mimoto_WalletBinding_15 role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -580,6 +595,7 @@ WalletBinding: Mimoto_WalletBinding_uin_SpaceVal_AuthFactorType_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with authfactortype value being just space + uniqueIdentifier: TC_Mimoto_WalletBinding_16 role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -620,6 +636,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Null_AuthFactorType_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with authfactortype value being just null + uniqueIdentifier: TC_Mimoto_WalletBinding_17 role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -660,6 +677,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_Challenge_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with invalid challenge + uniqueIdentifier: TC_Mimoto_WalletBinding_18 role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -700,6 +718,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_Challenge_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with missing challenge + uniqueIdentifier: TC_Mimoto_WalletBinding_19 role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -740,6 +759,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Empty_Challenge_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with empty challenge + uniqueIdentifier: TC_Mimoto_WalletBinding_20 role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -780,6 +800,7 @@ WalletBinding: Mimoto_WalletBinding_uin_SpaceVal_Challenge_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with challenge value having space + uniqueIdentifier: TC_Mimoto_WalletBinding_21 role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -820,6 +841,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Null_Challenge_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with challenge value having null + uniqueIdentifier: TC_Mimoto_WalletBinding_22 role: resident validityCheckRequired: true allowedErrorCodes: @@ -860,6 +882,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_Formate_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with invalid formate + uniqueIdentifier: TC_Mimoto_WalletBinding_23 role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -900,6 +923,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_Formate_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with missing formate + uniqueIdentifier: TC_Mimoto_WalletBinding_24 role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -940,6 +964,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Empty_Formate_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with empty formate + uniqueIdentifier: TC_Mimoto_WalletBinding_25 role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -980,6 +1005,7 @@ WalletBinding: Mimoto_WalletBinding_uin_SpaceVal_Formate_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with formate value having space + uniqueIdentifier: TC_Mimoto_WalletBinding_26 role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -1020,6 +1046,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Null_Formate_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with formate value having null + uniqueIdentifier: TC_Mimoto_WalletBinding_27 role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -1060,6 +1087,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_authFactorType1_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with invalid authFactorType1 + uniqueIdentifier: TC_Mimoto_WalletBinding_28 role: resident validityCheckRequired: true restMethod: post @@ -1099,6 +1127,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_authFactorType1_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with missing authFactorType1 + uniqueIdentifier: TC_Mimoto_WalletBinding_29 role: resident validityCheckRequired: true restMethod: post @@ -1138,6 +1167,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Empty_authFactorType1_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with empty authFactorType1 + uniqueIdentifier: TC_Mimoto_WalletBinding_30 role: resident validityCheckRequired: true restMethod: post @@ -1177,6 +1207,7 @@ WalletBinding: Mimoto_WalletBinding_uin_SpaceVal_authFactorType1_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with authFactorType1 value having space + uniqueIdentifier: TC_Mimoto_WalletBinding_31 role: resident validityCheckRequired: true restMethod: post @@ -1216,6 +1247,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Null_authFactorType1_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with authFactorType1 value having null + uniqueIdentifier: TC_Mimoto_WalletBinding_32 role: resident validityCheckRequired: true restMethod: post @@ -1255,6 +1287,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_format1_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with invalid format1 + uniqueIdentifier: TC_Mimoto_WalletBinding_33 role: resident validityCheckRequired: true restMethod: post @@ -1294,6 +1327,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_format1_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with missing format1 + uniqueIdentifier: TC_Mimoto_WalletBinding_34 role: resident validityCheckRequired: true restMethod: post @@ -1333,6 +1367,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Empty_format1_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with empty format1 + uniqueIdentifier: TC_Mimoto_WalletBinding_35 role: resident validityCheckRequired: true restMethod: post @@ -1372,6 +1407,7 @@ WalletBinding: Mimoto_WalletBinding_uin_SpaceVal_format1_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with format1 value having space + uniqueIdentifier: TC_Mimoto_WalletBinding_36 role: resident validityCheckRequired: true restMethod: post @@ -1411,6 +1447,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Null_format1_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with format1 value having null + uniqueIdentifier: TC_Mimoto_WalletBinding_37 role: resident validityCheckRequired: true restMethod: post @@ -1450,6 +1487,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_publicKey_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with invalid publickey + uniqueIdentifier: TC_Mimoto_WalletBinding_38 role: resident validityCheckRequired: true restMethod: post @@ -1489,6 +1527,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Null_publicKey_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with null as publickey + uniqueIdentifier: TC_Mimoto_WalletBinding_39 role: resident validityCheckRequired: true restMethod: post @@ -1528,6 +1567,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_publicKey_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VC with missing publickey + uniqueIdentifier: TC_Mimoto_WalletBinding_40 role: resident validityCheckRequired: true restMethod: post @@ -1567,6 +1607,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_RequestTime_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind vid VC with invalid request time + uniqueIdentifier: TC_Mimoto_WalletBinding_41 role: resident validityCheckRequired: true restMethod: post @@ -1606,6 +1647,7 @@ WalletBinding: Mimoto_WalletBinding_vid_PastVal_RequestTime_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind vid VC with past request time + uniqueIdentifier: TC_Mimoto_WalletBinding_42 role: resident validityCheckRequired: true restMethod: post @@ -1645,6 +1687,7 @@ WalletBinding: Mimoto_WalletBinding_vid_FutureVal_RequestTime_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind vid VC with future request time + uniqueIdentifier: TC_Mimoto_WalletBinding_43 role: resident validityCheckRequired: true restMethod: post @@ -1684,6 +1727,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Empty_RequestTime_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind vid VC with empty request time + uniqueIdentifier: TC_Mimoto_WalletBinding_44 role: resident validityCheckRequired: true restMethod: post @@ -1723,6 +1767,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_RequestTime_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind vid VC with missing request time + uniqueIdentifier: TC_Mimoto_WalletBinding_45 role: resident validityCheckRequired: true restMethod: post @@ -1762,6 +1807,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_IndividualId_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind vid VC with invalid individualId + uniqueIdentifier: TC_Mimoto_WalletBinding_46 role: resident validityCheckRequired: true restMethod: post @@ -1801,6 +1847,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Empty_IndividualId_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind vid VC with empty individualId + uniqueIdentifier: TC_Mimoto_WalletBinding_47 role: resident validityCheckRequired: true restMethod: post @@ -1840,6 +1887,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Null_IndividualId_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind vid VC with null individualId + uniqueIdentifier: TC_Mimoto_WalletBinding_48 role: resident validityCheckRequired: true restMethod: post @@ -1879,6 +1927,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_IndividualId_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind vid VC with missing individualId + uniqueIdentifier: TC_Mimoto_WalletBinding_49 role: resident validityCheckRequired: true restMethod: post @@ -1918,6 +1967,7 @@ WalletBinding: Mimoto_WalletBinding_vid_SpaceVal_IndividualId_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VID VC with individualId value having space + uniqueIdentifier: TC_Mimoto_WalletBinding_50 role: resident validityCheckRequired: true restMethod: post @@ -1957,6 +2007,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_AuthFactorType_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VID VC with invalid authfactortype + uniqueIdentifier: TC_Mimoto_WalletBinding_51 role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -1997,6 +2048,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Empty_AuthFactorType_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VID VC with empty authfactortype + uniqueIdentifier: TC_Mimoto_WalletBinding_52 role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -2037,6 +2089,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_AuthFactorType_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VID VC with missing authfactortype + uniqueIdentifier: TC_Mimoto_WalletBinding_53 role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -2077,6 +2130,7 @@ WalletBinding: Mimoto_WalletBinding_vid_SpaceVal_AuthFactorType_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VID VC with authfactortype value being just space + uniqueIdentifier: TC_Mimoto_WalletBinding_54 role: resident validityCheckRequired: true allowedErrorCodes: invalid_auth_factor_type @@ -2117,6 +2171,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Null_AuthFactorType_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VID VC with authfactortype value being just null + uniqueIdentifier: TC_Mimoto_WalletBinding_55 role: resident validityCheckRequired: true restMethod: post @@ -2156,6 +2211,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_Challenge_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VID VC with invalid challenge + uniqueIdentifier: TC_Mimoto_WalletBinding_56 role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -2196,6 +2252,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_Challenge_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VID VC with missing challenge + uniqueIdentifier: TC_Mimoto_WalletBinding_57 role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -2236,6 +2293,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Empty_Challenge_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VID VC with empty challenge + uniqueIdentifier: TC_Mimoto_WalletBinding_58 role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -2276,6 +2334,7 @@ WalletBinding: Mimoto_WalletBinding_vid_SpaceVal_Challenge_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VID VC with challenge value having space + uniqueIdentifier: TC_Mimoto_WalletBinding_59 role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge @@ -2316,6 +2375,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Null_Challenge_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VID VC with challenge value having null + uniqueIdentifier: TC_Mimoto_WalletBinding_60 role: resident validityCheckRequired: true restMethod: post @@ -2355,6 +2415,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_Formate_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VID VC with invalid formate + uniqueIdentifier: TC_Mimoto_WalletBinding_61 role: resident validityCheckRequired: true restMethod: post @@ -2394,6 +2455,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_Formate_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VID VC with missing formate + uniqueIdentifier: TC_Mimoto_WalletBinding_62 role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -2434,6 +2496,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Empty_Formate_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VID VC with empty formate + uniqueIdentifier: TC_Mimoto_WalletBinding_63 role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -2474,6 +2537,7 @@ WalletBinding: Mimoto_WalletBinding_vid_SpaceVal_Formate_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VID VC with formate value having space + uniqueIdentifier: TC_Mimoto_WalletBinding_64 role: resident validityCheckRequired: true allowedErrorCodes: invalid_challenge_format @@ -2514,6 +2578,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Null_Formate_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VID VC with formate value having null + uniqueIdentifier: TC_Mimoto_WalletBinding_65 role: resident validityCheckRequired: true restMethod: post @@ -2553,6 +2618,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_authFactorType1_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VID VC with invalid authFactorType1 + uniqueIdentifier: TC_Mimoto_WalletBinding_66 role: resident validityCheckRequired: true restMethod: post @@ -2592,6 +2658,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_authFactorType1_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VID VC with missing authFactorType1 + uniqueIdentifier: TC_Mimoto_WalletBinding_67 role: resident validityCheckRequired: true restMethod: post @@ -2631,6 +2698,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Empty_authFactorType1_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VID VC with empty authFactorType1 + uniqueIdentifier: TC_Mimoto_WalletBinding_68 role: resident validityCheckRequired: true restMethod: post @@ -2670,6 +2738,7 @@ WalletBinding: Mimoto_WalletBinding_vid_SpaceVal_authFactorType1_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VID VC with authFactorType1 value having space + uniqueIdentifier: TC_Mimoto_WalletBinding_69 role: resident validityCheckRequired: true restMethod: post @@ -2709,6 +2778,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Null_authFactorType1_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VID VC with authFactorType1 value having null + uniqueIdentifier: TC_Mimoto_WalletBinding_70 role: resident validityCheckRequired: true restMethod: post @@ -2748,6 +2818,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_format1_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VID VC with invalid format1 + uniqueIdentifier: TC_Mimoto_WalletBinding_71 role: resident validityCheckRequired: true restMethod: post @@ -2787,6 +2858,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_format1_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VID VC with missing format1 + uniqueIdentifier: TC_Mimoto_WalletBinding_72 role: resident validityCheckRequired: true restMethod: post @@ -2826,6 +2898,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Empty_format1_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VID VC with empty format1 + uniqueIdentifier: TC_Mimoto_WalletBinding_73 role: resident validityCheckRequired: true restMethod: post @@ -2865,6 +2938,7 @@ WalletBinding: Mimoto_WalletBinding_vid_SpaceVal_format1_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VID VC with format1 value having space + uniqueIdentifier: TC_Mimoto_WalletBinding_74 role: resident validityCheckRequired: true restMethod: post @@ -2904,6 +2978,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Null_format1_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VID VC with format1 value having null + uniqueIdentifier: TC_Mimoto_WalletBinding_75 role: resident validityCheckRequired: true restMethod: post @@ -2943,6 +3018,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_publicKey_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VID VC with invalid publickey + uniqueIdentifier: TC_Mimoto_WalletBinding_76 role: resident validityCheckRequired: true restMethod: post @@ -2982,6 +3058,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Null_publicKey_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VID VC with null as publickey + uniqueIdentifier: TC_Mimoto_WalletBinding_77 role: resident validityCheckRequired: true restMethod: post @@ -3021,6 +3098,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_publicKey_Neg: endPoint: /v1/mimoto/wallet-binding description: Generating OTP to bind VID VC with missing publickey + uniqueIdentifier: TC_Mimoto_WalletBinding_78 role: resident validityCheckRequired: true restMethod: post From 83346ea3aab14b3f19b582a08444e01acc819d1d Mon Sep 17 00:00:00 2001 From: Vijay Kumar S <94220135+vijay151096@users.noreply.github.com> Date: Wed, 16 Oct 2024 18:02:31 +0530 Subject: [PATCH 256/860] [INJWEB-762]&[INJIWEB-910] : update error message for unavailable resource & add credential expiry times disclaimer notes to PDF (#487) * [INJWEB-762]&[INJIWEB-910] : update error message for unavailable resource & add credential expiry times disclaimer notes to PDF Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJWEB-762]&[INJIWEB-910] : add the credential expiry times disclaimer in the PDF Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- .../mimoto/service/impl/CredentialServiceImpl.java | 14 +++++++++----- .../mimoto/service/impl/DataShareServiceImpl.java | 5 ++++- src/main/resources/application-local.properties | 2 +- .../resources/templates/credential-template.html | 3 +++ 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java index 10012746b..1edc2c1c2 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java @@ -127,7 +127,7 @@ public ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String cred boolean verificationStatus = vcCredentialResponse.getCredential().getProof().getType().equals("RsaSignature2018") ? verifyCredential(vcCredentialResponse) : true; if(verificationStatus) { String dataShareUrl = QRCodeType.OnlineSharing.equals(issuerConfig.getQr_code_type()) ? dataShareService.storeDataInDataShare(objectMapper.writeValueAsString(vcCredentialResponse), credentialValidity) : ""; - return generatePdfForVerifiableCredentials(vcCredentialResponse, issuerConfig, credentialsSupportedResponse, dataShareUrl); + return generatePdfForVerifiableCredentials(vcCredentialResponse, issuerConfig, credentialsSupportedResponse, dataShareUrl, credentialValidity); } throw new VCVerificationException(SIGNATURE_VERIFICATION_EXCEPTION.getErrorCode(), SIGNATURE_VERIFICATION_EXCEPTION.getErrorMessage()); @@ -156,16 +156,19 @@ public VCCredentialRequest generateVCCredentialRequest(IssuerDTO issuerDTO, Cred .build(); } - public ByteArrayInputStream generatePdfForVerifiableCredentials(VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String dataShareUrl) throws Exception { + public ByteArrayInputStream generatePdfForVerifiableCredentials(VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String dataShareUrl, String credentialValidity) throws Exception { LinkedHashMap displayProperties = loadDisplayPropertiesFromWellknown(vcCredentialResponse, credentialsSupportedResponse); - Map data = getPdfResourceFromVcProperties(displayProperties, credentialsSupportedResponse, vcCredentialResponse, issuerDTO, dataShareUrl); + Map data = getPdfResourceFromVcProperties(displayProperties, credentialsSupportedResponse, vcCredentialResponse, issuerDTO, dataShareUrl, credentialValidity); return renderVCInCredentialTemplate(data); } public Boolean verifyCredential(VCCredentialResponse vcCredentialResponse) throws VCVerificationException { try { + log.info("Initiated the VC Verification : Started"); String credentialString = objectMapper.writeValueAsString(vcCredentialResponse.getCredential()); - return credentialsVerifier.verifyCredentials(credentialString); + boolean isCredentialVerified = credentialsVerifier.verifyCredentials(credentialString); + log.info("Completed the VC Verification : Completed -> status : " + isCredentialVerified); + return isCredentialVerified; } catch (ProofDocumentNotFoundException | ProofTypeNotSupportedException | SignatureVerificationException | UnknownException | JsonProcessingException | PublicKeyNotFoundException exception ) { String errorCode = UNKNOWN_EXCEPTION.getErrorCode(); @@ -217,7 +220,7 @@ private static LinkedHashMap loadDisplayPropertiesFromWellknown( } - private Map getPdfResourceFromVcProperties(LinkedHashMap displayProperties, CredentialsSupportedResponse credentialsSupportedResponse, VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, String dataShareUrl) throws IOException, WriterException { + private Map getPdfResourceFromVcProperties(LinkedHashMap displayProperties, CredentialsSupportedResponse credentialsSupportedResponse, VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, String dataShareUrl, String credentialValidity) throws IOException, WriterException { Map data = new HashMap<>(); LinkedHashMap rowProperties = new LinkedHashMap<>(); String backgroundColor = credentialsSupportedResponse.getDisplay().get(0).getBackgroundColor(); @@ -246,6 +249,7 @@ private Map getPdfResourceFromVcProperties(LinkedHashMap d.getLogo().getUrl()).findFirst().orElse("")); data.put("rowProperties", rowProperties); data.put("textColor", textColor); diff --git a/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java index a62dd52fb..8be2e20ff 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.dto.DataShareResponseDto; import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; import io.mosip.mimoto.dto.openid.datashare.DataShareResponseWrapperDTO; import io.mosip.mimoto.dto.openid.presentation.PresentationRequestDTO; @@ -108,7 +109,9 @@ public VCCredentialResponse downloadCredentialFromDataShare(PresentationRequest VCCredentialResponse vcCredentialResponse = objectMapper.readValue(vcCredentialResponseString, VCCredentialResponse.class); log.info("Completed Mapping the Credential to Object => " + vcCredentialResponse ); if(vcCredentialResponse.getCredential() == null){ - throw new InvalidCredentialResourceException(ErrorConstants.RESOURCE_EXPIRED.getErrorMessage()); + DataShareResponseDto dataShareResponse = objectMapper.readValue(vcCredentialResponseString, DataShareResponseDto.class); + String errorCode = dataShareResponse.getErrors().get(0).getErrorCode(); + throw new InvalidCredentialResourceException(errorCode.equals("DAT-SER-008") ? ErrorConstants.RESOURCE_NOT_FOUND.getErrorMessage() : ErrorConstants.RESOURCE_EXPIRED.getErrorMessage()); } return vcCredentialResponse; } diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index ac7ab17bd..f4a29350e 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -225,7 +225,7 @@ mosip.inji.ovp.redirect.url.pattern=%s#vp_token=%s&presentation_submission=%s mosip.inji.ovp.error.redirect.url.pattern=%s?error=%s&error_description=%s #DataShare Config -mosip.data.share.url=http://injiweb.datashare-inji +mosip.data.share.url=https://datashare-inji.dev1.mosip.net mosip.data.share.create.url=${mosip.data.share.url}/v1/datashare/create/static-policyid/static-subscriberid mosip.data.share.create.retry.count=3 mosip.data.share.get.url.pattern=http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/* diff --git a/src/main/resources/templates/credential-template.html b/src/main/resources/templates/credential-template.html index b467b1cdc..029d30c98 100644 --- a/src/main/resources/templates/credential-template.html +++ b/src/main/resources/templates/credential-template.html @@ -34,6 +34,9 @@ QR Code +
+
This credential can be verified a total of $credentialValidity times by authorized verifiers.
+
From 7c96a6a11d0cc208b1dd6f17d28491b7199d98a9 Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Thu, 17 Oct 2024 15:46:05 +0530 Subject: [PATCH 257/860] MOSIP-36505 | Split the Testng report into pre-requisite and functional test Signed-off-by: Nandhukumar --- .../apirig/testrunner/MosipTestRunner.java | 25 +++++++++---- .../testrig/apirig/utils/MimotoUtil.java | 5 +++ .../mimotoPrerequisiteSuite.xml | 37 +++++++++++++++++++ .../{mimotoApi.xml => mimotoSuite.xml} | 26 ------------- 4 files changed, 60 insertions(+), 33 deletions(-) create mode 100644 api-test/testNgXmlFiles/mimotoPrerequisiteSuite.xml rename api-test/testNgXmlFiles/{mimotoApi.xml => mimotoSuite.xml} (88%) diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java b/api-test/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java index 18bcbfd1e..4525ae641 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java @@ -24,6 +24,7 @@ import io.mosip.testrig.apirig.dataprovider.BiometricDataProvider; import io.mosip.testrig.apirig.dbaccess.DBManager; +import io.mosip.testrig.apirig.report.EmailableReport; import io.mosip.testrig.apirig.utils.AdminTestUtil; import io.mosip.testrig.apirig.utils.AuthTestsUtil; import io.mosip.testrig.apirig.utils.CertsUtil; @@ -49,6 +50,7 @@ public class MosipTestRunner { public static String jarUrl = MosipTestRunner.class.getProtectionDomain().getCodeSource().getLocation().getPath(); public static List languageList = new ArrayList<>(); + public static boolean skipAll = false; /** * C Main method to start mosip test execution @@ -133,7 +135,6 @@ public static void suiteSetup(String runType) { DBManager.executeDBQueries(MimotoConfigManager.getMASTERDbUrl(), MimotoConfigManager.getMasterDbUser(), MimotoConfigManager.getMasterDbPass(), MimotoConfigManager.getMasterDbSchema(), getGlobalResourcePath() + "/" + "config/masterDataDeleteQueriesForEsignet.txt"); - BaseTestCase.setReportName(GlobalConstants.MIMOTO); AdminTestUtil.initiateMimotoTest(); BaseTestCase.otpListener = new OTPListener(); BaseTestCase.otpListener.run(); @@ -156,8 +157,6 @@ private static void setLogLevels() { */ public static void startTestRunner() { File homeDir = null; - TestNG runner = new TestNG(); - List suitefiles = new ArrayList<>(); String os = System.getProperty("os.name"); LOGGER.info(os); if (getRunType().contains("IDE") || os.toLowerCase().contains("windows")) { @@ -169,14 +168,26 @@ public static void startTestRunner() { LOGGER.info("ELSE :" + homeDir); } for (File file : homeDir.listFiles()) { + TestNG runner = new TestNG(); + List suitefiles = new ArrayList<>(); if (file.getName().toLowerCase().contains(GlobalConstants.MIMOTO)) { + if (file.getName().toLowerCase().contains("prerequisite")) { + BaseTestCase.setReportName(GlobalConstants.MIMOTO + "-prerequisite"); + } else { + // if the prerequisite total skipped/failed count is greater than zero + if (EmailableReport.getFailedCount() > 0 || EmailableReport.getSkippedCount() > 0) { +// skipAll = true; + } + + BaseTestCase.setReportName(GlobalConstants.MIMOTO); + } suitefiles.add(file.getAbsolutePath()); + runner.setTestSuites(suitefiles); + System.getProperties().setProperty("testng.outpur.dir", "testng-report"); + runner.setOutputDirectory("testng-report"); + runner.run(); } } - runner.setTestSuites(suitefiles); - System.getProperties().setProperty("testng.outpur.dir", "testng-report"); - runner.setOutputDirectory("testng-report"); - runner.run(); } public static String getGlobalResourcePath() { diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java b/api-test/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java index 0219d67b6..75ca19e41 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java @@ -5,6 +5,7 @@ import org.testng.SkipException; import io.mosip.testrig.apirig.dto.TestCaseDTO; +import io.mosip.testrig.apirig.testrunner.MosipTestRunner; import io.mosip.testrig.apirig.testrunner.OTPListener; public class MimotoUtil extends AdminTestUtil { @@ -41,6 +42,10 @@ public static TestCaseDTO isTestCaseValidForTheExecution(TestCaseDTO testCaseDTO String endpoint = testCaseDTO.getEndPoint(); String inputJson = testCaseDTO.getInput(); + if (MosipTestRunner.skipAll == true) { + throw new SkipException(GlobalConstants.PRE_REQUISITE_FAILED_MESSAGE); + } + if (isOTPEnabled().equals("false")) { if (testCaseDTO.getEndPoint().contains(GlobalConstants.SEND_OTP_ENDPOINT) || testCaseDTO.getInput().contains(GlobalConstants.SEND_OTP_ENDPOINT) diff --git a/api-test/testNgXmlFiles/mimotoPrerequisiteSuite.xml b/api-test/testNgXmlFiles/mimotoPrerequisiteSuite.xml new file mode 100644 index 000000000..f318fc813 --- /dev/null +++ b/api-test/testNgXmlFiles/mimotoPrerequisiteSuite.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/api-test/testNgXmlFiles/mimotoApi.xml b/api-test/testNgXmlFiles/mimotoSuite.xml similarity index 88% rename from api-test/testNgXmlFiles/mimotoApi.xml rename to api-test/testNgXmlFiles/mimotoSuite.xml index ed02172c4..0684ad3d7 100644 --- a/api-test/testNgXmlFiles/mimotoApi.xml +++ b/api-test/testNgXmlFiles/mimotoSuite.xml @@ -8,32 +8,6 @@
- - - - - - - - - - - - - - - - - - - - - - - From d477eef097d7c4674707b4a08bbff82d9364692b Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Thu, 17 Oct 2024 16:20:47 +0530 Subject: [PATCH 258/860] MOSIP-36505 | Split the Testng report into pre-requisite and functional test Signed-off-by: Nandhukumar --- .../mimoto/AddIdentity/AddIdentity.yml | 33 ------------------- 1 file changed, 33 deletions(-) diff --git a/api-test/src/main/resources/mimoto/AddIdentity/AddIdentity.yml b/api-test/src/main/resources/mimoto/AddIdentity/AddIdentity.yml index e37fc7ea7..9e492a43d 100644 --- a/api-test/src/main/resources/mimoto/AddIdentity/AddIdentity.yml +++ b/api-test/src/main/resources/mimoto/AddIdentity/AddIdentity.yml @@ -57,39 +57,6 @@ AddIdentity: "status":"ACTIVATED" }' - Mimoto_AddIdentity_without_FaceDate_CBEFF_smoke_Pos: - endPoint: /idrepository/v1/identity/ - description: Creating a new identity UIN with out face data - uniqueIdentifier: TC_Mimoto_AddIdentity_03 - role: idrepo - restMethod: post - inputTemplate: mimoto/AddIdentity/addIdentity_$LANGNUMBER$ - outputTemplate: mimoto/error - input: '{ - "value": "$BIOVALUEWITHOUTFACE$", - "id": "mosip.id.create", - "registrationId": "$RID$", - "biometricReferenceId": "23452353", - "UIN": "$UIN$", - "dateOfBirth": "1992/04/15", - "postalCode": "14022", - "email": "Mimoto_AddIdentity_withValidParameters_smoke_Pos@mosip.net", - "phone": "9876543210", - "referenceIdentityNumber": "6789545678878", - "version": "v1", - "introducerRID": "212124324784879", - "introducerUIN": "212124324784879", - "category": "individualBiometrics", - "requesttime": "$TIMESTAMP$" -}' - output: '{ - "errors": [ - { - "errorCode": "IDR-IDC-004" - } - ] -}' - Mimoto_AddIdentity_downloadIssuerCredential_smoke_Pos: endPoint: /idrepository/v1/identity/ description: Creating a new identity for downloading issuer credential From 1ce12f40dfb24376078843c11978f07edacf409c Mon Sep 17 00:00:00 2001 From: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> Date: Thu, 17 Oct 2024 19:07:58 +0530 Subject: [PATCH 259/860] INJIWEB-967 - Updated Automation Tests for Sunbird and eSignet Issues (#493) * MOSIP-36455 - Merge release 0.14.x branch with develop Signed-off-by: Mohanachandran S * MOSIP-36455 - Merge release 0.14.x branch with develop Signed-off-by: Mohanachandran S * INJIWEB-967 - Updated Automation Tests for Sunbird and eSignet Issues Signed-off-by: Mohanachandran S --------- Signed-off-by: Mohanachandran S --- .../testrig/apirig/testscripts/SimplePostForAutoGenId.java | 2 +- api-test/src/main/resources/config/mimoto.properties | 3 +++ api-test/src/main/resources/mimoto/AddIdentity/AddIdentity.yml | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java b/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java index fe7cd339c..993d7e0e1 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java @@ -176,7 +176,7 @@ public void test(TestCaseDTO testCaseDTO) break; } currLoopCount++; - } while (currLoopCount < 3); + } while (currLoopCount < 10); } } else { response = postWithBodyAndCookieForAutoGeneratedId(ApplnURI + testCaseDTO.getEndPoint(), inputJson, diff --git a/api-test/src/main/resources/config/mimoto.properties b/api-test/src/main/resources/config/mimoto.properties index 962fe3343..c226df696 100644 --- a/api-test/src/main/resources/config/mimoto.properties +++ b/api-test/src/main/resources/config/mimoto.properties @@ -1,2 +1,5 @@ #---------------------------------- End point(s) relative URLs ----------------------------------# actuatorMimotoEndpoint=/v1/mimoto/actuator/env +sunBirdBaseURL=https://registry.dev1.mosip.net +#Once sunbird registry is pointing to specific env, remove the above line and uncomment below line +#sunBirdBaseURL=registry \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/AddIdentity/AddIdentity.yml b/api-test/src/main/resources/mimoto/AddIdentity/AddIdentity.yml index 9e492a43d..afbe8186d 100644 --- a/api-test/src/main/resources/mimoto/AddIdentity/AddIdentity.yml +++ b/api-test/src/main/resources/mimoto/AddIdentity/AddIdentity.yml @@ -60,7 +60,7 @@ AddIdentity: Mimoto_AddIdentity_downloadIssuerCredential_smoke_Pos: endPoint: /idrepository/v1/identity/ description: Creating a new identity for downloading issuer credential - uniqueIdentifier: TC_Mimoto_AddIdentity_04 + uniqueIdentifier: TC_Mimoto_AddIdentity_03 role: idrepo restMethod: post inputTemplate: mimoto/AddIdentity/addIdentity_$LANGNUMBER$ From 3a9ba0d2ce33e295868213fbfc7ffcd415655d7c Mon Sep 17 00:00:00 2001 From: Vijay Kumar S <94220135+vijay151096@users.noreply.github.com> Date: Thu, 17 Oct 2024 20:28:10 +0530 Subject: [PATCH 260/860] [INJIWEB-910]: update disclaimer for credential expiry times (#494) Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- docker-compose/config/credential-template.html | 7 +++++++ src/main/resources/templates/credential-template.html | 10 +++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/docker-compose/config/credential-template.html b/docker-compose/config/credential-template.html index 4607e5b04..b1210c9c7 100644 --- a/docker-compose/config/credential-template.html +++ b/docker-compose/config/credential-template.html @@ -35,5 +35,12 @@ QR Code +
+ #if ($credentialValidity != -1) +
Please note: This credential is limited to a maximum of $credentialValidity verifications by authorized verifiers. Once the specified number of verifications has been reached, this credential will no longer be valid for further verification attempts.
+ #else +
Please note: This credential can be used for verification by authorized verifiers without any limit on the number of verifications. It provides continuous, secure access for credential validation.
+ #end +
diff --git a/src/main/resources/templates/credential-template.html b/src/main/resources/templates/credential-template.html index 029d30c98..4632b91c3 100644 --- a/src/main/resources/templates/credential-template.html +++ b/src/main/resources/templates/credential-template.html @@ -34,9 +34,13 @@ QR Code -
-
This credential can be verified a total of $credentialValidity times by authorized verifiers.
-
+ +
+ #if ($credentialValidity != -1) +
Please note: This credential is limited to a maximum of $credentialValidity verifications by authorized verifiers. Once the specified number of verifications has been reached, this credential will no longer be valid for further verification attempts.
+ #else +
Please note: This credential can be used for verification by authorized verifiers without any limit on the number of verifications. It provides continuous, secure access for credential validation.
+ #end
From 3cd2f05652b212d565e4e27b88b572901f5c2249 Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Tue, 22 Oct 2024 12:08:39 +0530 Subject: [PATCH 261/860] [INJIMOB-1862] refactor CredentialIssuerWellknownResponseValidator (#495) * [INJIMOB-1862] refactor make wellknown validator a component Other refactorings include - replace value.equals(constant) with constant.equals(value) to avoid NullPointerException - extract constants for VC formats to avoid magic strings Signed-off-by: KiruthikaJeyashankar * [INJIMOB-1862] replace any with expected param in mocks Signed-off-by: KiruthikaJeyashankar --------- Signed-off-by: KiruthikaJeyashankar --- .../mosip/mimoto/service/impl/IssuersServiceImpl.java | 5 ++++- .../CredentialIssuerWellknownResponseValidator.java | 10 ++++++++-- .../io/mosip/mimoto/service/IssuersServiceTest.java | 7 ++++++- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index 8e6936e6f..07f895db4 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -42,6 +42,9 @@ public class IssuersServiceImpl implements IssuersService { @Autowired private ObjectMapper objectMapper; + @Autowired + private CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator; + @Override public IssuersDTO getAllIssuers(String search) throws ApiNotAccessibleException{ @@ -110,7 +113,7 @@ public CredentialIssuerWellKnownResponse getIssuerWellknown(String issuerId) thr String wellknownResponse = restApiClient.getApi(issuerDTO.getWellknown_endpoint(), String.class); try { CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = objectMapper.readValue(wellknownResponse, CredentialIssuerWellKnownResponse.class); - new CredentialIssuerWellknownResponseValidator().validate(credentialIssuerWellKnownResponse, validator); + credentialIssuerWellknownResponseValidator.validate(credentialIssuerWellKnownResponse, validator); return credentialIssuerWellKnownResponse; } catch (JsonProcessingException | ApiNotAccessibleException | InvalidWellknownResponseException e) { throw new RuntimeException(e); diff --git a/src/main/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidator.java b/src/main/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidator.java index 31189e2a1..7673a75fa 100644 --- a/src/main/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidator.java +++ b/src/main/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidator.java @@ -8,11 +8,17 @@ import jakarta.validation.ConstraintViolation; import jakarta.validation.Validator; import org.apache.commons.lang.StringUtils; +import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import java.util.Set; +@Component public class CredentialIssuerWellknownResponseValidator { + + public static final String MSO_MDOC = "mso_mdoc"; + public static final String LDP_VC = "ldp_vc"; + public void validate(CredentialIssuerWellKnownResponse response, Validator validator) throws ApiNotAccessibleException, InvalidWellknownResponseException { Set> violations = validator.validate(response); if (!violations.isEmpty()) { @@ -25,7 +31,7 @@ public void validate(CredentialIssuerWellKnownResponse response, Validator valid for (CredentialsSupportedResponse supportedCredentialConfiguration : response.getCredentialConfigurationsSupported().values()) { //TODO: Extract the vc specific validations to separate classes - if (supportedCredentialConfiguration.getFormat().equals("mso_mdoc")) { + if (MSO_MDOC.equals(supportedCredentialConfiguration.getFormat())) { if (StringUtils.isBlank(supportedCredentialConfiguration.getDoctype())) { throw new InvalidWellknownResponseException("Mandatory field 'doctype' missing"); } @@ -34,7 +40,7 @@ public void validate(CredentialIssuerWellKnownResponse response, Validator valid } } - if (supportedCredentialConfiguration.getFormat().equals("ldp_vc")) { + if (LDP_VC.equals(supportedCredentialConfiguration.getFormat())) { if (supportedCredentialConfiguration.getCredentialDefinition() == null) { throw new InvalidWellknownResponseException("credentialDefinition: must not be null"); } diff --git a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java index 363212991..30a8fa255 100644 --- a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java @@ -9,6 +9,7 @@ import io.mosip.mimoto.exception.InvalidIssuerIdException; import io.mosip.mimoto.service.impl.CredentialServiceImpl; import io.mosip.mimoto.service.impl.IssuersServiceImpl; +import io.mosip.mimoto.util.CredentialIssuerWellknownResponseValidator; import io.mosip.mimoto.util.RestApiClient; import io.mosip.mimoto.util.Utilities; import jakarta.validation.Validator; @@ -31,6 +32,7 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.lenient; @RunWith(MockitoJUnitRunner.class) public class IssuersServiceTest { @@ -50,6 +52,9 @@ public class IssuersServiceTest { @Mock Utilities utilities; + @Mock + CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator; + @Mock ObjectMapper objectMapper; @@ -105,7 +110,7 @@ public void shouldReturnIssuerWellknownForTheIssuerIdIfExist() throws ApiNotAcce Mockito.when(restApiClient.getApi(wellKnownUrl , String.class)) .thenReturn(getExpectedWellKnownJson()); Mockito.when(objectMapper.readValue(getExpectedWellKnownJson(), CredentialIssuerWellKnownResponse.class)).thenReturn(expextedCredentialIssuerWellKnownResponse); - Mockito.when(validator.validate(any())).thenReturn(Collections.emptySet()); + lenient().when(validator.validate(expextedCredentialIssuerWellKnownResponse)).thenReturn(Collections.emptySet()); CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse=issuersService.getIssuerWellknown(issuerId); assertEquals(expextedCredentialIssuerWellKnownResponse,credentialIssuerWellKnownResponse); From 80e2b43dc521ea2360fc61fdb56f9bdb7078bc0f Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Tue, 22 Oct 2024 17:49:43 +0530 Subject: [PATCH 262/860] MOSIP-36505 Signed-off-by: Nandhukumar --- .../apirig/testrunner/MosipTestRunner.java | 51 ++++++++++++------- .../testrig/apirig/utils/MimotoUtil.java | 7 +++ .../main/resources/config/mimoto.properties | 3 ++ 3 files changed, 44 insertions(+), 17 deletions(-) diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java b/api-test/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java index 4525ae641..a82e547bc 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java @@ -10,6 +10,7 @@ import java.security.PublicKey; import java.security.interfaces.RSAPublicKey; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Properties; @@ -167,26 +168,42 @@ public static void startTestRunner() { homeDir = new File(dir.getParent() + "/mosip/testNgXmlFiles"); LOGGER.info("ELSE :" + homeDir); } - for (File file : homeDir.listFiles()) { - TestNG runner = new TestNG(); - List suitefiles = new ArrayList<>(); - if (file.getName().toLowerCase().contains(GlobalConstants.MIMOTO)) { - if (file.getName().toLowerCase().contains("prerequisite")) { - BaseTestCase.setReportName(GlobalConstants.MIMOTO + "-prerequisite"); - } else { - // if the prerequisite total skipped/failed count is greater than zero - if (EmailableReport.getFailedCount() > 0 || EmailableReport.getSkippedCount() > 0) { -// skipAll = true; + // List and sort the files + File[] files = homeDir.listFiles(); + if (files != null) { + Arrays.sort(files, (f1, f2) -> { + // Customize the comparison based on file names + if (f1.getName().toLowerCase().contains("prerequisite")) { + return -1; // f1 should come before f2 + } else if (f2.getName().toLowerCase().contains("prerequisite")) { + return 1; // f2 comes before f1 + } + return f1.getName().compareTo(f2.getName()); // default alphabetical order + }); + + for (File file : files) { + TestNG runner = new TestNG(); + List suitefiles = new ArrayList<>(); + if (file.getName().toLowerCase().contains(GlobalConstants.MIMOTO)) { + if (file.getName().toLowerCase().contains("prerequisite")) { + BaseTestCase.setReportName(GlobalConstants.MIMOTO + "-prerequisite"); + } else { + // if the prerequisite total skipped/failed count is greater than zero + if (EmailableReport.getFailedCount() > 0 || EmailableReport.getSkippedCount() > 0) { + // skipAll = true; + } + + BaseTestCase.setReportName(GlobalConstants.MIMOTO); } - - BaseTestCase.setReportName(GlobalConstants.MIMOTO); + suitefiles.add(file.getAbsolutePath()); + runner.setTestSuites(suitefiles); + System.getProperties().setProperty("testng.outpur.dir", "testng-report"); + runner.setOutputDirectory("testng-report"); + runner.run(); } - suitefiles.add(file.getAbsolutePath()); - runner.setTestSuites(suitefiles); - System.getProperties().setProperty("testng.outpur.dir", "testng-report"); - runner.setOutputDirectory("testng-report"); - runner.run(); } + } else { + LOGGER.error("No files found in directory: " + homeDir); } } diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java b/api-test/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java index 75ca19e41..508a31394 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java @@ -39,6 +39,13 @@ public static TestCaseDTO changeContextURLByFlag(TestCaseDTO testCaseDTO) { public static TestCaseDTO isTestCaseValidForTheExecution(TestCaseDTO testCaseDTO) { String testCaseName = testCaseDTO.getTestCaseName(); + + int indexof = testCaseName.indexOf("_"); + String modifiedTestCaseName = testCaseName.substring(indexof + 1); + + addTestCaseDetailsToMap(modifiedTestCaseName, testCaseDTO.getUniqueIdentifier()); + + String endpoint = testCaseDTO.getEndPoint(); String inputJson = testCaseDTO.getInput(); diff --git a/api-test/src/main/resources/config/mimoto.properties b/api-test/src/main/resources/config/mimoto.properties index 962fe3343..c226df696 100644 --- a/api-test/src/main/resources/config/mimoto.properties +++ b/api-test/src/main/resources/config/mimoto.properties @@ -1,2 +1,5 @@ #---------------------------------- End point(s) relative URLs ----------------------------------# actuatorMimotoEndpoint=/v1/mimoto/actuator/env +sunBirdBaseURL=https://registry.dev1.mosip.net +#Once sunbird registry is pointing to specific env, remove the above line and uncomment below line +#sunBirdBaseURL=registry \ No newline at end of file From 6e91af74e9100eb954bbecca9e3b5b01aaee1a21 Mon Sep 17 00:00:00 2001 From: Chandra Keshav Mishra Date: Wed, 23 Oct 2024 10:29:08 +0530 Subject: [PATCH 263/860] [MOSIP-36196] updated onboarder install scripts (#497) Signed-off-by: Chandra Keshav Mishra --- partner-onboarder/install.sh | 169 +++++++++++++++++++++------------- partner-onboarder/values.yaml | 49 ++++++---- 2 files changed, 136 insertions(+), 82 deletions(-) mode change 100755 => 100644 partner-onboarder/install.sh diff --git a/partner-onboarder/install.sh b/partner-onboarder/install.sh old mode 100755 new mode 100644 index 9ff045183..1017eddb1 --- a/partner-onboarder/install.sh +++ b/partner-onboarder/install.sh @@ -6,72 +6,109 @@ if [ $# -ge 1 ] ; then export KUBECONFIG=$1 fi -echo "Do you have public domain & valid SSL? (Y/n) " -echo "Y: if you have public domain & valid ssl certificate" -echo "n: if you don't have a public domain and a valid SSL certificate. It will add an ssl certificate in onboarder docker. Only recommended to use in local development environments" -read -p "" flag - -if [ -z "$flag" ]; then - echo "'flag' was provided; EXITING;" - exit 1; -fi -ENABLE_INSECURE='' -if [ "$flag" = "n" ]; then - ENABLE_INSECURE='--set onboarding.configmaps.onboarding.ENABLE_INSECURE=true'; -fi - -NS=mimoto -CHART_VERSION=0.0.1-develop - -echo Create $NS namespace -kubectl create ns $NS - -function installing_onboarder() { - - read -p "Is values.yaml for onboarder chart set correctly as part of Pre-requisites?(Y/n) " yn; - if [ $yn = "Y" ]; then - echo Istio label - kubectl label ns $NS istio-injection=disabled --overwrite - helm repo update - - echo Copy configmaps - kubectl -n $NS --ignore-not-found=true delete cm s3 - sed -i 's/\r$//' copy_cm.sh - ./copy_cm.sh - - echo Copy secrets - sed -i 's/\r$//' copy_secrets.sh - ./copy_secrets.sh - - read -p "Provide onboarder bucket name : " s3_bucket - if [[ -z $s3_bucket ]]; then - echo "s3_bucket not provided; EXITING;"; - exit 1; - fi - if [[ $s3_bucket == *[' !@#$%^&*()+']* ]]; then - echo "s3_bucket should not contain spaces / any special character; EXITING"; - exit 1; - fi - read -p "Provide onboarder s3 bucket region : " s3_region - if [[ $s3_region == *[' !@#$%^&*()+']* ]]; then - echo "s3_region should not contain spaces / any special character; EXITING"; - exit 1; - fi - - read -p "Provide S3 URL : " s3_url - if [[ -z $s3_url ]]; then - echo "s3_url not provided; EXITING;" - exit 1; - fi - - s3_user_key=$( kubectl -n s3 get cm s3 -o json | jq -r '.data."s3-user-key"' ) + function installing_onboarder() { + + read -p "Is values.yaml for onboarder chart set correctly as part of pre-requisites? (Y/n) : " yn; + if [[ $yn = "Y" ]] || [[ $yn = "y" ]] ; then + NFS_OPTION='' + S3_OPTION='' + config_complete=false # flag to check if S3 or NFS is configured + while [ "$config_complete" = false ]; do + read -p "Do you have S3 details for storing Onboarder reports? (Y/n) : " ans + if [[ "$ans" == "y" || "$ans" == "Y" ]]; then + read -p "Please provide S3 host: " s3_host + if [[ -z $s3_host ]]; then + echo "S3 host not provided; EXITING;" + exit 1; + fi + read -p "Please provide S3 region: " s3_region + if [[ $s3_region == *[' !@#$%^&*()+']* ]]; then + echo "S3 region should not contain spaces or special characters; EXITING;" + exit 1; + fi + read -p "Please provide S3 bucket: " s3_bucket + if [[ $s3_bucket == *[' !@#$%^&*()+']* ]]; then + echo "S3 bucket should not contain spaces or special characters; EXITING;" + exit 1; + fi + read -p "Please provide S3 access key: " s3_user_key + if [[ -z $s3_user_key ]]; then + echo "S3 access key not provided; EXITING;" + exit 1; + fi + read -p "Please provide S3 secret key: " s3_secret_key + if [[ -z $s3_secret_key ]]; then + echo "S3 secret key not provided; EXITING;" + exit 1; + fi + S3_OPTION="--set onboarding.configmaps.s3.s3-host=$s3_host --set onboarding.configmaps.s3.s3-user-key=$s3_user_key --set onboarding.configmaps.s3.s3-region=$s3_region --set onboarding.configmaps.s3.s3-bucket-name=$s3_bucket --set onboarding.secrets.s3.s3-user-secret=$s3_secret_key" + push_reports_to_s3=true + config_complete=true + elif [[ "$ans" == "n" || "$ans" == "N" ]]; then + push_reports_to_s3=false + read -p "Since S3 details are not available, do you want to use NFS directory mount for storing reports? (y/n) : " answer + if [[ $answer == "Y" ]] || [[ $answer == "y" ]]; then + read -p "Please provide NFS Server IP: " nfs_server + if [[ -z $nfs_server ]]; then + echo "NFS server not provided; EXITING." + exit 1; + fi + read -p "Please provide NFS directory to store reports from NFS server (e.g. /srv/nfs//onboarder/), make sure permission is 777 for the folder: " nfs_path + if [[ -z $nfs_path ]]; then + echo "NFS Path not provided; EXITING." + exit 1; + fi + NFS_OPTION="--set onboarding.volumes.reports.nfs.server=$nfs_server --set onboarding.volumes.reports.nfs.path=$nfs_path" + config_complete=true + else + echo "Please rerun the script with either S3 or NFS server details." + exit 1; + fi + else + echo "Invalid input. Please respond with Y (yes) or N (no)." + fi + done + + echo "Do you have public domain & valid SSL? (Y/n) " + echo "Y: if you have public domain & valid ssl certificate" + echo "n: if you don't have a public domain and a valid SSL certificate. It will add an ssl certificate in onboarder docker. Only recommended in testing env. + read -p "" flag + + if [ -z "$flag" ]; then + echo "'flag' was not provided; EXITING;" + exit 1; + fi + ENABLE_INSECURE='' + if [ "$flag" = "n" ]; then + ENABLE_INSECURE='--set onboarding.configmaps.onboarding.ENABLE_INSECURE=true'; + fi - echo Onboarding default partners - helm -n $NS install mimoto-partner-onboarder mosip/partner-onboarder \ - --set onboarding.configmaps.s3.s3-host="$s3_url" \ - --set onboarding.configmaps.s3.s3-user-key="$s3_user_key" \ - --set onboarding.configmaps.s3.s3-region="$s3_region" \ - --set onboarding.configmaps.s3.s3-bucket-name="$s3_bucket" \ + NS=mimoto + CHART_VERSION=0.0.1-develop + + echo Create $NS namespace + kubectl create ns $NS || true + + echo Istio label + kubectl label ns $NS istio-injection=disabled --overwrite + helm repo update + + echo Copy configmaps + kubectl -n $NS --ignore-not-found=true delete cm s3 + sed -i 's/\r$//' copy_cm.sh + ./copy_cm.sh + echo Copy secrets + sed -i 's/\r$//' copy_secrets.sh + ./copy_secrets.sh + + echo Onboarding Mimoto OIDC partner + helm -n $NS install mimoto-partner-onboarder mosip/partner-onboarder \ + $NFS_OPTION \ + $S3_OPTION \ + --set onboarding.variables.push_reports_to_s3=$push_reports_to_s3 \ + --set extraEnvVarsCM[0]=global \ + --set extraEnvVarsCM[1]=keycloak-env-vars \ + --set extraEnvVarsCM[2]=keycloak-host \ $ENABLE_INSECURE \ -f values.yaml \ --version $CHART_VERSION \ @@ -102,4 +139,4 @@ set -o errexit ## set -e : exit the script if any statement returns a non-true set -o nounset ## set -u : exit the script if you try to use an uninitialised variable set -o errtrace # trace ERR through 'time command' and other functions set -o pipefail # trace ERR through pipes -installing_onboarder # calling function \ No newline at end of file +installing_onboarder # calling function diff --git a/partner-onboarder/values.yaml b/partner-onboarder/values.yaml index 7e02a6903..0d4e584b1 100644 --- a/partner-onboarder/values.yaml +++ b/partner-onboarder/values.yaml @@ -1,24 +1,41 @@ +#image: +# registry: docker.io +# repository: mosipdev/partner-onboarder +# tag: develop + onboarding: modules: - - name: ida - enabled: false - - name: print - enabled: false - - name: abis - enabled: false - - name: resident - enabled: false - name: mobileid enabled: false - - name: digitalcard - enabled: false - - name: esignet - enabled: false - - name: resident-oidc - enabled: false - - name: demo-oidc - enabled: false - name: mimoto-keybinding enabled: true - name: mimoto-oidc enabled: true + +# configmaps: +# s3: +# s3-host: 'http://minio.minio:9000' +# s3-user-key: 'admin' +# s3-region: '' +# onboarder-namespace: +# ns_mimoto: mimoto +# ns_esignet: esignet +# ns_signup: signup +# secrets: +# s3: +# s3-user-secret: 'password' +# volumes: +# reports: +# name: onboarder-reports +# storageClass: nfs-client +# accessModes: +# - ReadWriteMany +# size: 10Mi +# existingClaim: +# # Dir where config and keys are written inside container +# mountDir: /home/mosip/reports +# nfs: +# path: "/srv/nfs/sandbox/onboarding" # Dir within the nfs server where config repo is cloned/maintained locally. +# server: "nfs-server" # Ip address of nfs server. +# variables: +# push_reports_to_s3: true From 8d1fea2d39e30f027e3e1c937a74e7d295c3ac3a Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Mon, 4 Nov 2024 14:17:05 +0530 Subject: [PATCH 264/860] [INJIMOB-2260] revert responseWrapper change with manual setters (#501) Signed-off-by: KiruthikaJeyashankar --- .../mimoto/core/http/ResponseWrapper.java | 21 +++++++------------ src/test/resources/responses/InjiConfig.json | 2 +- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/core/http/ResponseWrapper.java b/src/main/java/io/mosip/mimoto/core/http/ResponseWrapper.java index 68c7b3982..44a0241c1 100644 --- a/src/main/java/io/mosip/mimoto/core/http/ResponseWrapper.java +++ b/src/main/java/io/mosip/mimoto/core/http/ResponseWrapper.java @@ -1,27 +1,20 @@ package io.mosip.mimoto.core.http; -import java.util.ArrayList; -import java.util.List; - import javax.validation.Valid; import javax.validation.constraints.NotNull; import io.mosip.mimoto.dto.ErrorDTO; -import lombok.*; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.ArrayList; +import java.util.List; @Data @NoArgsConstructor public class ResponseWrapper { + @NotNull + @Valid private T response; private List errors = new ArrayList<>(); - - public void setResponse(T response) { - this.response = response; - this.errors = null; - } - - public void setErrors(List errors) { - this.errors = errors; - this.response = null; - } } diff --git a/src/test/resources/responses/InjiConfig.json b/src/test/resources/responses/InjiConfig.json index 4f59ca4a8..f4590fd90 100644 --- a/src/test/resources/responses/InjiConfig.json +++ b/src/test/resources/responses/InjiConfig.json @@ -8,5 +8,5 @@ "vcDownloadPoolInterval": "6000", "issuer": "residentapp" }, - "errors": null + "errors": [] } From 952dd959cb46d84aed2d0c8739395b613e1ec300 Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Mon, 4 Nov 2024 16:55:21 +0530 Subject: [PATCH 265/860] MOSIP-37137 Signed-off-by: Nandhukumar --- .../apirig/{ => mimoto}/testrunner/MosipTestRunner.java | 8 ++++++-- .../apirig/{ => mimoto}/testscripts/AddIdentity.java | 6 +++--- .../apirig/{ => mimoto}/testscripts/DeleteWithParam.java | 6 +++--- .../apirig/{ => mimoto}/testscripts/GetWithParam.java | 6 +++--- .../testscripts/PostWithAutogenIdWithOtpGenerate.java | 6 +++--- .../testscripts/PostWithBodyWithOtpGenerate.java | 6 +++--- .../testscripts/PostWithFormDataBodyForPdfDownload.java | 6 +++--- .../apirig/{ => mimoto}/testscripts/SimplePost.java | 6 +++--- .../{ => mimoto}/testscripts/SimplePostForAutoGenId.java | 6 +++--- .../apirig/{ => mimoto}/utils/MimotoConfigManager.java | 5 +++-- .../testrig/apirig/{ => mimoto}/utils/MimotoUtil.java | 7 +++++-- 11 files changed, 38 insertions(+), 30 deletions(-) rename api-test/src/main/java/io/mosip/testrig/apirig/{ => mimoto}/testrunner/MosipTestRunner.java (97%) rename api-test/src/main/java/io/mosip/testrig/apirig/{ => mimoto}/testscripts/AddIdentity.java (97%) rename api-test/src/main/java/io/mosip/testrig/apirig/{ => mimoto}/testscripts/DeleteWithParam.java (97%) rename api-test/src/main/java/io/mosip/testrig/apirig/{ => mimoto}/testscripts/GetWithParam.java (97%) rename api-test/src/main/java/io/mosip/testrig/apirig/{ => mimoto}/testscripts/PostWithAutogenIdWithOtpGenerate.java (98%) rename api-test/src/main/java/io/mosip/testrig/apirig/{ => mimoto}/testscripts/PostWithBodyWithOtpGenerate.java (97%) rename api-test/src/main/java/io/mosip/testrig/apirig/{ => mimoto}/testscripts/PostWithFormDataBodyForPdfDownload.java (96%) rename api-test/src/main/java/io/mosip/testrig/apirig/{ => mimoto}/testscripts/SimplePost.java (97%) rename api-test/src/main/java/io/mosip/testrig/apirig/{ => mimoto}/testscripts/SimplePostForAutoGenId.java (98%) rename api-test/src/main/java/io/mosip/testrig/apirig/{ => mimoto}/utils/MimotoConfigManager.java (84%) rename api-test/src/main/java/io/mosip/testrig/apirig/{ => mimoto}/utils/MimotoUtil.java (94%) diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java similarity index 97% rename from api-test/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java rename to api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java index a82e547bc..471b16d8f 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/testrunner/MosipTestRunner.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java @@ -1,4 +1,4 @@ -package io.mosip.testrig.apirig.testrunner; +package io.mosip.testrig.apirig.mimoto.testrunner; import java.io.File; import java.io.FileInputStream; @@ -25,7 +25,12 @@ import io.mosip.testrig.apirig.dataprovider.BiometricDataProvider; import io.mosip.testrig.apirig.dbaccess.DBManager; +import io.mosip.testrig.apirig.mimoto.utils.MimotoConfigManager; import io.mosip.testrig.apirig.report.EmailableReport; +import io.mosip.testrig.apirig.testrunner.BaseTestCase; +import io.mosip.testrig.apirig.testrunner.ExtractResource; +import io.mosip.testrig.apirig.testrunner.HealthChecker; +import io.mosip.testrig.apirig.testrunner.OTPListener; import io.mosip.testrig.apirig.utils.AdminTestUtil; import io.mosip.testrig.apirig.utils.AuthTestsUtil; import io.mosip.testrig.apirig.utils.CertsUtil; @@ -33,7 +38,6 @@ import io.mosip.testrig.apirig.utils.JWKKeyUtil; import io.mosip.testrig.apirig.utils.KeyCloakUserAndAPIKeyGeneration; import io.mosip.testrig.apirig.utils.KeycloakUserManager; -import io.mosip.testrig.apirig.utils.MimotoConfigManager; import io.mosip.testrig.apirig.utils.MispPartnerAndLicenseKeyGeneration; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.PartnerRegistration; diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/AddIdentity.java similarity index 97% rename from api-test/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java rename to api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/AddIdentity.java index 120b08e1a..3053637d7 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/AddIdentity.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/AddIdentity.java @@ -1,4 +1,4 @@ -package io.mosip.testrig.apirig.testscripts; +package io.mosip.testrig.apirig.mimoto.testscripts; import java.lang.reflect.Field; import java.text.DateFormat; @@ -26,6 +26,8 @@ import io.mosip.testrig.apirig.dto.OutputValidationDto; import io.mosip.testrig.apirig.dto.TestCaseDTO; +import io.mosip.testrig.apirig.mimoto.utils.MimotoConfigManager; +import io.mosip.testrig.apirig.mimoto.utils.MimotoUtil; import io.mosip.testrig.apirig.testrunner.HealthChecker; import io.mosip.testrig.apirig.testrunner.JsonPrecondtion; import io.mosip.testrig.apirig.utils.AdminTestException; @@ -33,8 +35,6 @@ import io.mosip.testrig.apirig.utils.AuthenticationTestException; import io.mosip.testrig.apirig.utils.GlobalConstants; import io.mosip.testrig.apirig.utils.KernelAuthentication; -import io.mosip.testrig.apirig.utils.MimotoConfigManager; -import io.mosip.testrig.apirig.utils.MimotoUtil; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; import io.mosip.testrig.apirig.utils.RestClient; diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/DeleteWithParam.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/DeleteWithParam.java similarity index 97% rename from api-test/src/main/java/io/mosip/testrig/apirig/testscripts/DeleteWithParam.java rename to api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/DeleteWithParam.java index 607a8761b..a1c40dfaf 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/DeleteWithParam.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/DeleteWithParam.java @@ -1,4 +1,4 @@ -package io.mosip.testrig.apirig.testscripts; +package io.mosip.testrig.apirig.mimoto.testscripts; import java.lang.reflect.Field; import java.util.ArrayList; @@ -22,13 +22,13 @@ import io.mosip.testrig.apirig.dto.OutputValidationDto; import io.mosip.testrig.apirig.dto.TestCaseDTO; +import io.mosip.testrig.apirig.mimoto.utils.MimotoConfigManager; +import io.mosip.testrig.apirig.mimoto.utils.MimotoUtil; import io.mosip.testrig.apirig.testrunner.HealthChecker; import io.mosip.testrig.apirig.utils.AdminTestException; import io.mosip.testrig.apirig.utils.AdminTestUtil; import io.mosip.testrig.apirig.utils.AuthenticationTestException; import io.mosip.testrig.apirig.utils.GlobalConstants; -import io.mosip.testrig.apirig.utils.MimotoConfigManager; -import io.mosip.testrig.apirig.utils.MimotoUtil; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; import io.restassured.response.Response; diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/GetWithParam.java similarity index 97% rename from api-test/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java rename to api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/GetWithParam.java index 3c3a2be68..a6e3d862f 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/GetWithParam.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/GetWithParam.java @@ -1,4 +1,4 @@ -package io.mosip.testrig.apirig.testscripts; +package io.mosip.testrig.apirig.mimoto.testscripts; import java.lang.reflect.Field; import java.util.ArrayList; @@ -23,14 +23,14 @@ import io.mosip.testrig.apirig.dto.OutputValidationDto; import io.mosip.testrig.apirig.dto.TestCaseDTO; +import io.mosip.testrig.apirig.mimoto.utils.MimotoConfigManager; +import io.mosip.testrig.apirig.mimoto.utils.MimotoUtil; import io.mosip.testrig.apirig.testrunner.BaseTestCase; import io.mosip.testrig.apirig.testrunner.HealthChecker; import io.mosip.testrig.apirig.utils.AdminTestException; import io.mosip.testrig.apirig.utils.AdminTestUtil; import io.mosip.testrig.apirig.utils.AuthenticationTestException; import io.mosip.testrig.apirig.utils.GlobalConstants; -import io.mosip.testrig.apirig.utils.MimotoConfigManager; -import io.mosip.testrig.apirig.utils.MimotoUtil; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; import io.restassured.response.Response; diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java similarity index 98% rename from api-test/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java rename to api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java index 86fdfb573..de901108c 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithAutogenIdWithOtpGenerate.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java @@ -1,4 +1,4 @@ -package io.mosip.testrig.apirig.testscripts; +package io.mosip.testrig.apirig.mimoto.testscripts; import java.lang.reflect.Field; import java.util.List; @@ -22,14 +22,14 @@ import io.mosip.testrig.apirig.dto.OutputValidationDto; import io.mosip.testrig.apirig.dto.TestCaseDTO; +import io.mosip.testrig.apirig.mimoto.utils.MimotoConfigManager; +import io.mosip.testrig.apirig.mimoto.utils.MimotoUtil; import io.mosip.testrig.apirig.testrunner.BaseTestCase; import io.mosip.testrig.apirig.testrunner.HealthChecker; import io.mosip.testrig.apirig.utils.AdminTestException; import io.mosip.testrig.apirig.utils.AdminTestUtil; import io.mosip.testrig.apirig.utils.AuthenticationTestException; import io.mosip.testrig.apirig.utils.GlobalConstants; -import io.mosip.testrig.apirig.utils.MimotoConfigManager; -import io.mosip.testrig.apirig.utils.MimotoUtil; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; import io.restassured.response.Response; diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithBodyWithOtpGenerate.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithBodyWithOtpGenerate.java similarity index 97% rename from api-test/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithBodyWithOtpGenerate.java rename to api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithBodyWithOtpGenerate.java index 64b8c1e52..26f03807d 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithBodyWithOtpGenerate.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithBodyWithOtpGenerate.java @@ -1,4 +1,4 @@ -package io.mosip.testrig.apirig.testscripts; +package io.mosip.testrig.apirig.mimoto.testscripts; import java.lang.reflect.Field; import java.util.List; @@ -21,14 +21,14 @@ import io.mosip.testrig.apirig.dto.OutputValidationDto; import io.mosip.testrig.apirig.dto.TestCaseDTO; +import io.mosip.testrig.apirig.mimoto.utils.MimotoConfigManager; +import io.mosip.testrig.apirig.mimoto.utils.MimotoUtil; import io.mosip.testrig.apirig.testrunner.BaseTestCase; import io.mosip.testrig.apirig.testrunner.HealthChecker; import io.mosip.testrig.apirig.utils.AdminTestException; import io.mosip.testrig.apirig.utils.AdminTestUtil; import io.mosip.testrig.apirig.utils.AuthenticationTestException; import io.mosip.testrig.apirig.utils.GlobalConstants; -import io.mosip.testrig.apirig.utils.MimotoConfigManager; -import io.mosip.testrig.apirig.utils.MimotoUtil; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; import io.restassured.response.Response; diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithFormDataBodyForPdfDownload.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithFormDataBodyForPdfDownload.java similarity index 96% rename from api-test/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithFormDataBodyForPdfDownload.java rename to api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithFormDataBodyForPdfDownload.java index 7a1a859f6..400bf68bb 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/PostWithFormDataBodyForPdfDownload.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithFormDataBodyForPdfDownload.java @@ -1,4 +1,4 @@ -package io.mosip.testrig.apirig.testscripts; +package io.mosip.testrig.apirig.mimoto.testscripts; import java.io.ByteArrayInputStream; import java.io.IOException; @@ -22,6 +22,8 @@ import com.itextpdf.text.pdf.parser.PdfTextExtractor; import io.mosip.testrig.apirig.dto.TestCaseDTO; +import io.mosip.testrig.apirig.mimoto.utils.MimotoConfigManager; +import io.mosip.testrig.apirig.mimoto.utils.MimotoUtil; import io.mosip.testrig.apirig.testrunner.BaseTestCase; import io.mosip.testrig.apirig.testrunner.HealthChecker; import io.mosip.testrig.apirig.utils.AdminTestException; @@ -29,8 +31,6 @@ import io.mosip.testrig.apirig.utils.AuthenticationTestException; import io.mosip.testrig.apirig.utils.GlobalConstants; import io.mosip.testrig.apirig.utils.GlobalMethods; -import io.mosip.testrig.apirig.utils.MimotoConfigManager; -import io.mosip.testrig.apirig.utils.MimotoUtil; import io.restassured.response.Response; public class PostWithFormDataBodyForPdfDownload extends AdminTestUtil implements ITest { diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePost.java similarity index 97% rename from api-test/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java rename to api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePost.java index 2fed87139..24b2cf039 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePost.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePost.java @@ -1,4 +1,4 @@ -package io.mosip.testrig.apirig.testscripts; +package io.mosip.testrig.apirig.mimoto.testscripts; import java.lang.reflect.Field; import java.util.ArrayList; @@ -23,14 +23,14 @@ import io.mosip.testrig.apirig.dto.OutputValidationDto; import io.mosip.testrig.apirig.dto.TestCaseDTO; +import io.mosip.testrig.apirig.mimoto.utils.MimotoConfigManager; +import io.mosip.testrig.apirig.mimoto.utils.MimotoUtil; import io.mosip.testrig.apirig.testrunner.BaseTestCase; import io.mosip.testrig.apirig.testrunner.HealthChecker; import io.mosip.testrig.apirig.utils.AdminTestException; import io.mosip.testrig.apirig.utils.AdminTestUtil; import io.mosip.testrig.apirig.utils.AuthenticationTestException; import io.mosip.testrig.apirig.utils.GlobalConstants; -import io.mosip.testrig.apirig.utils.MimotoConfigManager; -import io.mosip.testrig.apirig.utils.MimotoUtil; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; import io.restassured.response.Response; diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java similarity index 98% rename from api-test/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java rename to api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java index 993d7e0e1..6d32a31dd 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/testscripts/SimplePostForAutoGenId.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java @@ -1,4 +1,4 @@ -package io.mosip.testrig.apirig.testscripts; +package io.mosip.testrig.apirig.mimoto.testscripts; import java.lang.reflect.Field; import java.security.NoSuchAlgorithmException; @@ -24,14 +24,14 @@ import io.mosip.testrig.apirig.dto.OutputValidationDto; import io.mosip.testrig.apirig.dto.TestCaseDTO; +import io.mosip.testrig.apirig.mimoto.utils.MimotoConfigManager; +import io.mosip.testrig.apirig.mimoto.utils.MimotoUtil; import io.mosip.testrig.apirig.testrunner.BaseTestCase; import io.mosip.testrig.apirig.testrunner.HealthChecker; import io.mosip.testrig.apirig.utils.AdminTestException; import io.mosip.testrig.apirig.utils.AdminTestUtil; import io.mosip.testrig.apirig.utils.AuthenticationTestException; import io.mosip.testrig.apirig.utils.GlobalConstants; -import io.mosip.testrig.apirig.utils.MimotoConfigManager; -import io.mosip.testrig.apirig.utils.MimotoUtil; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; import io.restassured.response.Response; diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/utils/MimotoConfigManager.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java similarity index 84% rename from api-test/src/main/java/io/mosip/testrig/apirig/utils/MimotoConfigManager.java rename to api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java index 437724248..ea7190703 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/utils/MimotoConfigManager.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java @@ -1,4 +1,4 @@ -package io.mosip.testrig.apirig.utils; +package io.mosip.testrig.apirig.mimoto.utils; import java.util.HashMap; import java.util.Map; @@ -6,7 +6,8 @@ import org.apache.log4j.Logger; -import io.mosip.testrig.apirig.testrunner.MosipTestRunner; +import io.mosip.testrig.apirig.mimoto.testrunner.MosipTestRunner; +import io.mosip.testrig.apirig.utils.ConfigManager; public class MimotoConfigManager extends ConfigManager{ private static final Logger LOGGER = Logger.getLogger(MimotoConfigManager.class); diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java similarity index 94% rename from api-test/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java rename to api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java index 508a31394..ce29beeb1 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/utils/MimotoUtil.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java @@ -1,12 +1,15 @@ -package io.mosip.testrig.apirig.utils; +package io.mosip.testrig.apirig.mimoto.utils; import org.apache.log4j.Logger; import org.json.JSONObject; import org.testng.SkipException; import io.mosip.testrig.apirig.dto.TestCaseDTO; -import io.mosip.testrig.apirig.testrunner.MosipTestRunner; +import io.mosip.testrig.apirig.mimoto.testrunner.MosipTestRunner; import io.mosip.testrig.apirig.testrunner.OTPListener; +import io.mosip.testrig.apirig.utils.AdminTestUtil; +import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.SkipTestCaseHandler; public class MimotoUtil extends AdminTestUtil { From 6a11729ebab14e60dd2dbc33ef6b583599cdc8cf Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Mon, 4 Nov 2024 17:15:18 +0530 Subject: [PATCH 266/860] MOSIP-37137 Signed-off-by: Nandhukumar --- api-test/testNgXmlFiles/mimotoPrerequisiteSuite.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/api-test/testNgXmlFiles/mimotoPrerequisiteSuite.xml b/api-test/testNgXmlFiles/mimotoPrerequisiteSuite.xml index f318fc813..1c5aa32f7 100644 --- a/api-test/testNgXmlFiles/mimotoPrerequisiteSuite.xml +++ b/api-test/testNgXmlFiles/mimotoPrerequisiteSuite.xml @@ -12,7 +12,7 @@ - +
@@ -21,7 +21,7 @@ + name="io.mosip.testrig.apirig.mimoto.testscripts.PostWithAutogenIdWithOtpGenerate" /> @@ -30,7 +30,7 @@ + name="io.mosip.testrig.apirig.mimoto.testscripts.SimplePostForAutoGenId" /> From 99d75dd5b1456b80de69defa722d05031f3ef219 Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Mon, 4 Nov 2024 17:21:25 +0530 Subject: [PATCH 267/860] MOSIP-37137 Signed-off-by: Nandhukumar --- api-test/testNgXmlFiles/mimotoSuite.xml | 44 ++++++++++++------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/api-test/testNgXmlFiles/mimotoSuite.xml b/api-test/testNgXmlFiles/mimotoSuite.xml index 0684ad3d7..9b1cd2dac 100644 --- a/api-test/testNgXmlFiles/mimotoSuite.xml +++ b/api-test/testNgXmlFiles/mimotoSuite.xml @@ -14,7 +14,7 @@ - + @@ -22,7 +22,7 @@ value="mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.yml" /> - + @@ -30,7 +30,7 @@ value="mimoto/SunBirdR/SearchPolicySunBirdR/SearchPolicySunBirdR.yml" /> - + @@ -39,7 +39,7 @@ - + @@ -47,7 +47,7 @@ value="mimoto/AuthenticateUser/AuthenticateUser.yml" /> - + @@ -56,7 +56,7 @@ - + @@ -65,7 +65,7 @@ - + @@ -73,7 +73,7 @@ value="mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml" /> - + @@ -82,14 +82,14 @@ - + - + @@ -97,14 +97,14 @@ - + - + @@ -113,63 +113,63 @@ value="mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml" /> - + - + - + - + - + - + - + - + - + @@ -179,7 +179,7 @@ - + From a542d830d1e9fb424c9719d3b2cbf9d0c31f3caa Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Tue, 5 Nov 2024 13:26:47 +0530 Subject: [PATCH 268/860] MOSIP-37137 | changed package name Signed-off-by: Nandhukumar --- api-test/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api-test/pom.xml b/api-test/pom.xml index ea9e7d746..2149482e5 100644 --- a/api-test/pom.xml +++ b/api-test/pom.xml @@ -163,7 +163,7 @@ - io.mosip.testrig.apirig.testrunner.MosipTestRunner + io.mosip.testrig.apirig.mimoto.testrunner.MosipTestRunner 1.3.0-beta.1 - 1.3.0-SNAPSHOT - 1.3.0-SNAPSHOT - 1.3.0-SNAPSHOT - 1.3.0-SNAPSHOT + 1.3.0-beta.1 + 1.3.0-beta.1 + 1.3.0-beta.1 + 1.3.0-beta.1 3.9.1 @@ -103,7 +103,7 @@ io.mosip.kernel kernel-bom - 1.2.1-SNAPSHOT + 1.3.0-beta.1 pom import @@ -114,7 +114,7 @@ io.mosip.kernel kernel-core - 1.2.1-SNAPSHOT + 1.3.0-beta.1 org.apache.logging.log4j @@ -432,7 +432,7 @@ io.mosip pixelpass-jar - 0.5.0-SNAPSHOT + 0.5.0 diff --git a/src/main/java/io/mosip/mimoto/util/Utilities.java b/src/main/java/io/mosip/mimoto/util/Utilities.java index acdf38a79..17c2fa19c 100644 --- a/src/main/java/io/mosip/mimoto/util/Utilities.java +++ b/src/main/java/io/mosip/mimoto/util/Utilities.java @@ -187,7 +187,7 @@ public String getCredentialSupportedTemplateString() { } public static String[] handleExceptionWithErrorCode(Exception exception) { String errorMessage = exception.getMessage(); - String errorCode = PlatformErrorMessages.MIMOTO_IDP_GENERIC_EXCEPTION.getCode(); + String errorCode = PlatformErrorMessages.MIMOTO_WALLET_BINDING_EXCEPTION.getCode(); if(errorMessage.contains(DELIMITER)){ String[] errorSections = errorMessage.split(DELIMITER); From c4eef2093dcc7e313bc19f7022b48653e4ee96f2 Mon Sep 17 00:00:00 2001 From: Vijay Kumar S <94220135+vijay151096@users.noreply.github.com> Date: Mon, 18 Nov 2024 17:51:55 +0530 Subject: [PATCH 275/860] [INJIMOB-2262]: fix automation error code mismatch (#511) * [INJIMOB-2262]: fix automation error code mismatch Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIMOB-2262]: fix automation error code mismatch Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIMOB-2262]: fix automation error code mismatch Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * [INJIMOB-2262]: fix automation error code mismatch Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- .github/workflows/push-trigger.yml | 2 +- pom.xml | 16 ++++++++-------- .../java/io/mosip/mimoto/util/Utilities.java | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/push-trigger.yml b/.github/workflows/push-trigger.yml index 851856272..4bf6bed4c 100644 --- a/.github/workflows/push-trigger.yml +++ b/.github/workflows/push-trigger.yml @@ -21,7 +21,7 @@ on: - develop* - MOSIP* - qa-develop - - injiweb-* + - inji*-* jobs: build-mimoto: diff --git a/pom.xml b/pom.xml index 98917b25d..3423a8dbd 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 io.mosip mimoto - 0.13.0-java21-SNAPSHOT + 0.15.0-SNAPSHOT mimoto https://github.com/mosip/mimoto Mobile server backend supporting Inji. @@ -34,10 +34,10 @@ 1.3.0-beta.1 - 1.3.0-SNAPSHOT - 1.3.0-SNAPSHOT - 1.3.0-SNAPSHOT - 1.3.0-SNAPSHOT + 1.3.0-beta.1 + 1.3.0-beta.1 + 1.3.0-beta.1 + 1.3.0-beta.1 3.9.1 @@ -103,7 +103,7 @@ io.mosip.kernel kernel-bom - 1.2.1-SNAPSHOT + 1.3.0-beta.1 pom import @@ -114,7 +114,7 @@ io.mosip.kernel kernel-core - 1.2.1-SNAPSHOT + 1.3.0-beta.1 org.apache.logging.log4j @@ -432,7 +432,7 @@ io.mosip pixelpass-jar - 0.5.0-SNAPSHOT + 0.5.0 diff --git a/src/main/java/io/mosip/mimoto/util/Utilities.java b/src/main/java/io/mosip/mimoto/util/Utilities.java index acdf38a79..17c2fa19c 100644 --- a/src/main/java/io/mosip/mimoto/util/Utilities.java +++ b/src/main/java/io/mosip/mimoto/util/Utilities.java @@ -187,7 +187,7 @@ public String getCredentialSupportedTemplateString() { } public static String[] handleExceptionWithErrorCode(Exception exception) { String errorMessage = exception.getMessage(); - String errorCode = PlatformErrorMessages.MIMOTO_IDP_GENERIC_EXCEPTION.getCode(); + String errorCode = PlatformErrorMessages.MIMOTO_WALLET_BINDING_EXCEPTION.getCode(); if(errorMessage.contains(DELIMITER)){ String[] errorSections = errorMessage.split(DELIMITER); From e4f6afc71222ebec0a0f12e5f7209f0912052aeb Mon Sep 17 00:00:00 2001 From: Praful Rakhade Date: Mon, 18 Nov 2024 18:20:34 +0530 Subject: [PATCH 276/860] Update Dockerfile base image to mosipid/openjdk-21-jre:21.0.4 Signed-off-by: Praful Rakhade --- api-test/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api-test/Dockerfile b/api-test/Dockerfile index 88050db15..5acccb148 100644 --- a/api-test/Dockerfile +++ b/api-test/Dockerfile @@ -1,4 +1,4 @@ -FROM mosipdev/openjdk-21-jre:latest +FROM mosipid/openjdk-21-jre:21.0.4 ARG SOURCE ARG COMMIT_HASH From dc68eb655ca0027f05d0d57dade2c7631d899636 Mon Sep 17 00:00:00 2001 From: Vijay Kumar S <94220135+vijay151096@users.noreply.github.com> Date: Wed, 20 Nov 2024 16:54:38 +0530 Subject: [PATCH 277/860] [INJIWEB-1151]: bypass VC verification for mock issuer (#519) Signed-off-by: Vijay Kumar S <94220135+vijay151096@users.noreply.github.com> --- .../io/mosip/mimoto/service/impl/CredentialServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java index 14db34548..947621c88 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java @@ -123,7 +123,7 @@ public ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String cred CredentialsSupportedResponse credentialsSupportedResponse = issuerService.getIssuerWellknownForCredentialType(issuerId, credentialType); VCCredentialRequest vcCredentialRequest = generateVCCredentialRequest(issuerConfig, credentialIssuerWellKnownResponse, credentialsSupportedResponse, response.getAccess_token()); VCCredentialResponse vcCredentialResponse = downloadCredential(credentialIssuerWellKnownResponse.getCredentialEndPoint(), vcCredentialRequest, response.getAccess_token()); - boolean verificationStatus = verifyCredential(vcCredentialResponse); + boolean verificationStatus = issuerId.toLowerCase().contains("mock") || verifyCredential(vcCredentialResponse); if(verificationStatus) { String dataShareUrl = QRCodeType.OnlineSharing.equals(issuerConfig.getQr_code_type()) ? dataShareService.storeDataInDataShare(objectMapper.writeValueAsString(vcCredentialResponse), credentialValidity) : ""; return generatePdfForVerifiableCredentials(vcCredentialResponse, issuerConfig, credentialsSupportedResponse, dataShareUrl, credentialValidity); From a606256a13e1c66559c7eb3575b21719232c8970 Mon Sep 17 00:00:00 2001 From: Vijay Kumar S <94220135+vijay151096@users.noreply.github.com> Date: Wed, 20 Nov 2024 16:54:56 +0530 Subject: [PATCH 278/860] [INJIWEB-1151]: bypass VC verification for mock issuer (#518) Signed-off-by: Vijay Kumar S <94220135+vijay151096@users.noreply.github.com> --- .../io/mosip/mimoto/service/impl/CredentialServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java index 14db34548..947621c88 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java @@ -123,7 +123,7 @@ public ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String cred CredentialsSupportedResponse credentialsSupportedResponse = issuerService.getIssuerWellknownForCredentialType(issuerId, credentialType); VCCredentialRequest vcCredentialRequest = generateVCCredentialRequest(issuerConfig, credentialIssuerWellKnownResponse, credentialsSupportedResponse, response.getAccess_token()); VCCredentialResponse vcCredentialResponse = downloadCredential(credentialIssuerWellKnownResponse.getCredentialEndPoint(), vcCredentialRequest, response.getAccess_token()); - boolean verificationStatus = verifyCredential(vcCredentialResponse); + boolean verificationStatus = issuerId.toLowerCase().contains("mock") || verifyCredential(vcCredentialResponse); if(verificationStatus) { String dataShareUrl = QRCodeType.OnlineSharing.equals(issuerConfig.getQr_code_type()) ? dataShareService.storeDataInDataShare(objectMapper.writeValueAsString(vcCredentialResponse), credentialValidity) : ""; return generatePdfForVerifiableCredentials(vcCredentialResponse, issuerConfig, credentialsSupportedResponse, dataShareUrl, credentialValidity); From ad86a88ce2c470d47c7a7d5846ac649e4a22a455 Mon Sep 17 00:00:00 2001 From: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> Date: Wed, 27 Nov 2024 09:28:12 +0530 Subject: [PATCH 279/860] MOSIP-37793 - Updated the Readme file Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> --- api-test/README.md | 174 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 172 insertions(+), 2 deletions(-) diff --git a/api-test/README.md b/api-test/README.md index 51b622679..a13fc694a 100644 --- a/api-test/README.md +++ b/api-test/README.md @@ -1,3 +1,173 @@ -# Automation test +# Mimoto API Test Rig -All automation test code. +## Overview + +The **Mimoto API Test Rig** is designed for the execution of module-wise automation API tests for the mimoto module. This test rig utilizes **Java REST Assured** and **TestNG** frameworks to automate testing of the mimoto module API functionalities. The key focus is to validate the Getting Issuers, Download VC, Binding OTP, Wallet OTP and related functionalities provided by the mimoto module. + +--- + +## Test Categories + +- **Smoke**: Contains only positive test scenarios for quick verification. +- **Regression**: Includes all test scenarios, covering both positive and negative cases. + +--- + +## Coverage + +This test rig covers only **external API endpoints** exposed by the mimoto module. + +--- + +## Pre-requisites + +Before running the automation tests, ensure the following software is installed on the machine: + +- **Java 21** ([download here](https://jdk.java.net/)) +- **Maven 3.9.6** or higher ([installation guide](https://maven.apache.org/install.html)) +- **Lombok** (Refer to [Lombok Project](https://projectlombok.org/)) +- **setting.xml** ([download here](https://github.com/mosip/mosip-functional-tests/blob/master/settings.xml)) +- **apitest-commons** library should be cloned and the JAR should be built. Refer to ([README](https://github.com/mosip/mosip-functional-tests/blob/release-1.3.0/apitest-commons/README.md)) + +### For Windows + +- **Git Bash 2.18.0** or higher +- Ensure the `settings.xml` file is present in the `.m2` folder. + +### For Linux + +- The `settings.xml` file should be present in two places: + - In the regular Maven configuration folder (`/conf`) + - Under `/usr/local/maven/conf/` + +--- + +## Access Test Automation Code + +You can access the test automation code using either of the following methods: + +### From Browser + +1. Clone or download the repository as a zip file from [GitHub](https://github.com/mosip/mimoto). +2. Unzip the contents to your local machine. +3. Open a terminal (Linux) or command prompt (Windows) and continue with the following steps. + +### From Git Bash + +1. Copy the Git repository URL: `https://github.com/mosip/mimoto` +2. Open **Git Bash** on your local machine. +3. Run the following command to clone the repository: + ```sh + git clone https://github.com/mosip/mimoto + ``` + +--- + +## Build Test Automation Code + +Once the repository is cloned or downloaded, follow these steps to build and install the test automation code: + +1. Navigate to the project directory: + ```sh + cd api-test + ``` + +2. Build the project using Maven: + ```sh + mvn clean install -Dgpg.skip=true -Dmaven.gitcommitid.skip=true + ``` + +This will download the required dependencies and prepare the test suite for execution. + +--- + +## Execute Test Automation Suite + +You can execute the test automation code using either of the following methods: + +### Using Jar + +To execute the tests using Jar, use the following steps: + +1. Navigate to the `target` directory where the JAR file is generated: + ```sh + cd target/ + ``` + +2. Run the automation test suite JAR file: + ``` + java -jar -Dmodules=mimoto -Denv.user=api-internal. -Denv.endpoint= -Denv.testLevel=smokeAndRegression -jar apitest-mimoto-0.15.0-SNAPSHOT-jar-with-dependencies.jar + ``` + +# Using Eclipse IDE + +To execute the tests using Eclipse IDE, use the following steps: + +## 1. **Install Eclipse (Latest Version)** + - Download and install the latest version of Eclipse IDE from the [Eclipse Downloads](https://www.eclipse.org/downloads/). + +## 2. **Import the Maven Project** + + After Eclipse is installed, follow these steps to import the Maven project: + + - Open Eclipse IDE. + - Go to `File` > `Import`. + - In the **Import** wizard, select `Maven` > `Existing Maven Projects`, then click **Next**. + - Browse to the location where the `api-test` folder is saved (either from the cloned Git repository or downloaded zip). + - Select the folder, and Eclipse will automatically detect the Maven project. Click **Finish** to import the project. + +## 3. **Build the Project** + + - Right-click on the project in the **Project Explorer** and select `Maven` > `Update Project`. + - This will download the required dependencies as defined in the `pom.xml` and ensure everything is correctly set up. + +## 4. **Run the Tests** + + To execute the test automation suite, you need to configure the run parameters in Eclipse: + + - Go to `Run` > `Run Configurations`. + - In the **Run Configurations** window, create a new configuration for your tests: + - Right-click on **Java Application** and select **New**. + - In the **Main** tab, select the project by browsing the location where the `api-test` folder is saved, and select the **Main class** as `io.mosip.testrig.apirig.mimoto.testrunner.MosipTestRunner`. + - In the **Arguments** tab, add the necessary **VM arguments**: + - **VM Arguments**: + ``` + -Dmodules=mimoto -Denv.user=api-internal. -Denv.endpoint= -Denv.testLevel=smokeAndRegression``` + +## 5. **Run the Configuration** + + - Once the configuration is set up, click **Run** to execute the test suite. + - The tests will run, and the results will be shown in the **Console** tab of Eclipse. + + **Note**: You can also run in **Debug Mode** to troubleshoot issues by setting breakpoints in your code and choosing `Debug` instead of `Run`. + +--- + +## 6. **View Test Results** + + - After the tests are executed, you can view the detailed results in the `api-test\testng-report` directory. + - Two reports will gets generated + - First report is for pre-requisite testcases + - Second report is for core testcases + +--- + +## Details of Arguments Used + +- **env.user**: Replace `` with the appropriate environment name (e.g., `dev`, `qa`, etc.). +- **env.endpoint**: The environment where the application under test is deployed. Replace `` with the correct base URL for the environment (e.g., `https://api-internal..mosip.net`). +- **env.testLevel**: Set this to `smoke` to run only smoke test cases, or `smokeAndRegression` to run both smoke and regression tests. +- **jar**: Specify the name of the JAR file to execute. The version will change according to the development code version. For example, the current version may look like `apitest-mimoto-0.15.0-SNAPSHOT-jar-with-dependencies.jar`. + +### Build and Run Info + +To run the tests for both **Smoke** and **Regression**: + +1. Ensure the correct environment and test level parameters are set. +2. Execute the tests as shown in the command above to validate mimoto API functionalities. + +--- + +## License + +This project is licensed under the terms of the [Mozilla Public License 2.0] From db76b42812785040a3fc896db86f7e4893c73a83 Mon Sep 17 00:00:00 2001 From: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> Date: Wed, 27 Nov 2024 09:33:14 +0530 Subject: [PATCH 280/860] MOSIP-37793 - Updated the Readme file Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> --- api-test/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api-test/README.md b/api-test/README.md index a13fc694a..a414add81 100644 --- a/api-test/README.md +++ b/api-test/README.md @@ -170,4 +170,4 @@ To run the tests for both **Smoke** and **Regression**: ## License -This project is licensed under the terms of the [Mozilla Public License 2.0] +This project is licensed under the terms of the [Mozilla Public License 2.0](https://github.com/mosip/mosip-platform/blob/master/LICENSE) From 8142c4bcde479526d28feb7daf5b52bbeb241daf Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Thu, 28 Nov 2024 13:55:57 +0530 Subject: [PATCH 281/860] MOSIP-37888 Signed-off-by: Nandhukumar --- .../testrig/apirig/mimoto/utils/MimotoConfigManager.java | 3 ++- .../io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java | 6 +++--- api-test/src/main/resources/config/mimoto.properties | 5 ++++- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java index ea7190703..54cf07717 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java @@ -20,7 +20,8 @@ public static void init() { Properties props = getproperties(path); // Convert Properties to Map and add to moduleSpecificPropertiesMap for (String key : props.stringPropertyNames()) { - moduleSpecificPropertiesMap.put(key, props.getProperty(key)); + String value = System.getenv(key) == null ? props.getProperty(key) : System.getenv(key); + moduleSpecificPropertiesMap.put(key, value); } } catch (Exception e) { LOGGER.error(e.getMessage()); diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java index ce29beeb1..41a805a08 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java @@ -122,12 +122,12 @@ public static String getOTPFromSMTP(String inputJson, TestCaseDTO testCaseDTO) { public static String getClientIdSection(String baseURL) { if (baseURL.contains("esignet-mosipid")) { - return "mimoto.oidc.mosipid.partner.clientid"; + return MimotoConfigManager.getproperty("mimoto-oidc-mosipid-partner-clientid"); } if (baseURL.contains("esignet-insurance")) { - return "mimoto.oidc.sunbird.partner.clientid"; + return MimotoConfigManager.getproperty("mimoto-oidc-sunbird-partner-clientid"); } - return "mimoto.oidc.partner.clientid"; + return MimotoConfigManager.getproperty("mimoto-oidc-partner-clientid"); } } \ No newline at end of file diff --git a/api-test/src/main/resources/config/mimoto.properties b/api-test/src/main/resources/config/mimoto.properties index c226df696..70d9beb8d 100644 --- a/api-test/src/main/resources/config/mimoto.properties +++ b/api-test/src/main/resources/config/mimoto.properties @@ -2,4 +2,7 @@ actuatorMimotoEndpoint=/v1/mimoto/actuator/env sunBirdBaseURL=https://registry.dev1.mosip.net #Once sunbird registry is pointing to specific env, remove the above line and uncomment below line -#sunBirdBaseURL=registry \ No newline at end of file +#sunBirdBaseURL=registry +mimoto-oidc-mosipid-partner-clientid=mimoto.oidc.mosipid.partner.clientid +mimoto-oidc-sunbird-partner-clientid=mimoto.oidc.sunbird.partner.clientid +mimoto-oidc-partner-clientid=mimoto.oidc.partner.clientid \ No newline at end of file From 2be8ba16a807e587b21b2d6318489c4a70a9c098 Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Thu, 28 Nov 2024 18:38:14 +0530 Subject: [PATCH 282/860] MOSIP-37888 Signed-off-by: Nandhukumar --- .../mosip/testrig/apirig/mimoto/testscripts/SimplePost.java | 6 +++--- .../apirig/mimoto/testscripts/SimplePostForAutoGenId.java | 6 +++--- api-test/src/main/resources/config/mimoto.properties | 3 ++- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePost.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePost.java index 24b2cf039..fc901f4d7 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePost.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePost.java @@ -147,9 +147,9 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad if (MimotoConfigManager.isInServiceNotDeployedList("sunbirdrc")) throw new SkipException(GlobalConstants.SERVICE_NOT_DEPLOYED_MESSAGE); - if (MimotoConfigManager.getEsignetMockBaseURL() != null - && !MimotoConfigManager.getEsignetMockBaseURL().isBlank()) - tempUrl = ApplnURI.replace("api-internal.", MimotoConfigManager.getEsignetMockBaseURL()); + if (MimotoConfigManager.getproperty("esignetSunBirdBaseURL") != null + && !MimotoConfigManager.getproperty("esignetSunBirdBaseURL").isBlank()) + tempUrl = MimotoConfigManager.getproperty("esignetSunBirdBaseURL"); testCaseDTO.setEndPoint(testCaseDTO.getEndPoint().replace("$ESIGNETMOCKBASEURL$", "")); response = postRequestWithCookieAuthHeaderAndXsrfToken(tempUrl + testCaseDTO.getEndPoint(), diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java index 6d32a31dd..5844d5862 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java @@ -140,9 +140,9 @@ public void test(TestCaseDTO testCaseDTO) if (MimotoConfigManager.isInServiceNotDeployedList("sunbirdrc")) throw new SkipException(GlobalConstants.SERVICE_NOT_DEPLOYED_MESSAGE); - if (MimotoConfigManager.getEsignetMockBaseURL() != null - && !MimotoConfigManager.getEsignetMockBaseURL().isBlank()) - tempUrl = ApplnURI.replace("api-internal.", MimotoConfigManager.getEsignetMockBaseURL()); + if (MimotoConfigManager.getproperty("esignetSunBirdBaseURL") != null + && !MimotoConfigManager.getproperty("esignetSunBirdBaseURL").isBlank()) + tempUrl = MimotoConfigManager.getproperty("esignetSunBirdBaseURL"); testCaseDTO.setEndPoint(testCaseDTO.getEndPoint().replace("$ESIGNETMOCKBASEURL$", "")); } else if (testCaseDTO.getEndPoint().startsWith("$SUNBIRDBASEURL$") && testCaseName.contains("SunBirdR")) { diff --git a/api-test/src/main/resources/config/mimoto.properties b/api-test/src/main/resources/config/mimoto.properties index 70d9beb8d..d45591c23 100644 --- a/api-test/src/main/resources/config/mimoto.properties +++ b/api-test/src/main/resources/config/mimoto.properties @@ -5,4 +5,5 @@ sunBirdBaseURL=https://registry.dev1.mosip.net #sunBirdBaseURL=registry mimoto-oidc-mosipid-partner-clientid=mimoto.oidc.mosipid.partner.clientid mimoto-oidc-sunbird-partner-clientid=mimoto.oidc.sunbird.partner.clientid -mimoto-oidc-partner-clientid=mimoto.oidc.partner.clientid \ No newline at end of file +mimoto-oidc-partner-clientid=mimoto.oidc.partner.clientid +esignetSunBirdBaseURL= \ No newline at end of file From 84b30d336aeea62cc6ce2306bb4b03403e0e753c Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Fri, 29 Nov 2024 13:42:19 +0530 Subject: [PATCH 283/860] MOSIP-37942 Signed-off-by: Nandhukumar --- .../testrig/apirig/mimoto/testrunner/MosipTestRunner.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java index 471b16d8f..5e69cb2c1 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java @@ -133,13 +133,13 @@ public static void suiteSetup(String runType) { BaseTestCase.certsForModule = GlobalConstants.MIMOTO; DBManager.executeDBQueries(MimotoConfigManager.getKMDbUrl(), MimotoConfigManager.getKMDbUser(), MimotoConfigManager.getKMDbPass(), MimotoConfigManager.getKMDbSchema(), - getGlobalResourcePath() + "/" + "config/keyManagerDataDeleteQueriesForEsignet.txt"); + getGlobalResourcePath() + "/" + "config/keyManagerCertDataDeleteQueries.txt"); DBManager.executeDBQueries(MimotoConfigManager.getIdaDbUrl(), MimotoConfigManager.getIdaDbUser(), MimotoConfigManager.getPMSDbPass(), MimotoConfigManager.getIdaDbSchema(), - getGlobalResourcePath() + "/" + "config/idaDeleteQueriesForEsignet.txt"); + getGlobalResourcePath() + "/" + "config/idaCertDataDeleteQueries.txt"); DBManager.executeDBQueries(MimotoConfigManager.getMASTERDbUrl(), MimotoConfigManager.getMasterDbUser(), MimotoConfigManager.getMasterDbPass(), MimotoConfigManager.getMasterDbSchema(), - getGlobalResourcePath() + "/" + "config/masterDataDeleteQueriesForEsignet.txt"); + getGlobalResourcePath() + "/" + "config/masterDataCertDataDeleteQueries.txt"); AdminTestUtil.initiateMimotoTest(); BaseTestCase.otpListener = new OTPListener(); BaseTestCase.otpListener.run(); From 36e163da118396870dc1f8b51881eb881b3444c8 Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Mon, 2 Dec 2024 12:17:35 +0530 Subject: [PATCH 284/860] MOSIP-35404 Signed-off-by: Nandhukumar --- api-test/pom.xml | 6 +++--- .../testrig/apirig/mimoto/testrunner/MosipTestRunner.java | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/api-test/pom.xml b/api-test/pom.xml index 2149482e5..75004194c 100644 --- a/api-test/pom.xml +++ b/api-test/pom.xml @@ -8,7 +8,7 @@ apitest-mimoto Parent project of apitest-mimoto https://github.com/mosip/mimoto - 0.15.0-SNAPSHOT + 0.15.0-cleanup-SNAPSHOT @@ -49,14 +49,14 @@ 2.2.1 3.0.1 - apitest-mimoto-0.15.0-SNAPSHOT-jar-with-dependencies + apitest-mimoto-0.15.0-cleanup-SNAPSHOT-jar-with-dependencies io.mosip.testrig.apirig.apitest.commons apitest-commons - 1.2.2-SNAPSHOT + 1.2.2-cleanup-SNAPSHOT diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java index 471b16d8f..42e9188ce 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java @@ -94,6 +94,7 @@ public static void main(String[] arg) { KeycloakUserManager.removeUser(); KeycloakUserManager.createUsers(); KeycloakUserManager.closeKeycloakInstance(); + AdminTestUtil.getRequiredField(); // Generate device certificates to be consumed by Mock-MDS PartnerRegistration.deleteCertificates(); From 20285ce8e8c69c75eb81857de0eb53c414e9c3c9 Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Wed, 4 Dec 2024 00:59:43 +0530 Subject: [PATCH 285/860] MOSIP-35404 Signed-off-by: Nandhukumar --- .../apirig/mimoto/utils/MimotoUtil.java | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java index ce29beeb1..948b0243d 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java @@ -1,14 +1,24 @@ package io.mosip.testrig.apirig.mimoto.utils; +import java.io.StringWriter; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.PublicKey; +import java.util.HashMap; + import org.apache.log4j.Logger; +import org.bouncycastle.openssl.jcajce.JcaPEMWriter; import org.json.JSONObject; import org.testng.SkipException; +import io.mosip.testrig.apirig.dataprovider.BiometricDataProvider; import io.mosip.testrig.apirig.dto.TestCaseDTO; import io.mosip.testrig.apirig.mimoto.testrunner.MosipTestRunner; import io.mosip.testrig.apirig.testrunner.OTPListener; import io.mosip.testrig.apirig.utils.AdminTestUtil; +import io.mosip.testrig.apirig.utils.EncryptionDecrptionUtil; import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.KeycloakUserManager; import io.mosip.testrig.apirig.utils.SkipTestCaseHandler; public class MimotoUtil extends AdminTestUtil { @@ -130,4 +140,89 @@ public static String getClientIdSection(String baseURL) { return "mimoto.oidc.partner.clientid"; } + + public static String inputstringKeyWordHandeler(String jsonString, String testCaseName) { + if (jsonString.contains(GlobalConstants.TIMESTAMP)) { + jsonString = replaceKeywordValue(jsonString, GlobalConstants.TIMESTAMP, generateCurrentUTCTimeStamp()); + } + + if (jsonString.contains("$POLICYNUMBERFORSUNBIRDRC$")) { + jsonString = replaceKeywordValue(jsonString, "$POLICYNUMBERFORSUNBIRDRC$", + properties.getProperty("policyNumberForSunBirdRC")); + } + + if (jsonString.contains("$FULLNAMEFORSUNBIRDRC$")) { + jsonString = replaceKeywordValue(jsonString, "$FULLNAMEFORSUNBIRDRC$", fullNameForSunBirdRC); + } + + if (jsonString.contains("$DOBFORSUNBIRDRC$")) { + jsonString = replaceKeywordValue(jsonString, "$DOBFORSUNBIRDRC$", dobForSunBirdRC); + } + + if (jsonString.contains("$CHALLENGEVALUEFORSUNBIRDC$")) { + + HashMap mapForChallenge = new HashMap(); + mapForChallenge.put(GlobalConstants.FULLNAME, fullNameForSunBirdRC); + mapForChallenge.put(GlobalConstants.DOB, dobForSunBirdRC); + + String challenge = gson.toJson(mapForChallenge); + + String challengeValue = BiometricDataProvider.toBase64Url(challenge); + + jsonString = replaceKeywordValue(jsonString, "$CHALLENGEVALUEFORSUNBIRDC$", challengeValue); + } + + if (jsonString.contains("$PUBLICKEYFORBINDING$")) { + jsonString = replaceKeywordValue(jsonString, "$PUBLICKEYFORBINDING$", + generatePublicKeyForMimoto()); + } + + if (jsonString.contains("$INJIREDIRECTURI$")) { + jsonString = replaceKeywordValue(jsonString, "$INJIREDIRECTURI$", + ApplnURI.replace(GlobalConstants.API_INTERNAL, "injiweb") + "/redirect"); + } + + + return jsonString; + + } + + public static String replaceKeywordValue(String jsonString, String keyword, String value) { + if (value != null && !value.isEmpty()) + return jsonString.replace(keyword, value); + else { + if (keyword.contains("$ID:")) + throw new SkipException("Marking testcase as skipped as required field is empty " + keyword + + " please check the results of testcase: " + getTestCaseIDFromKeyword(keyword)); + else + throw new SkipException("Marking testcase as skipped as required field is empty " + keyword); + + } + } + + public static String generatePublicKeyForMimoto() { + + String vcString = ""; + try { + KeyPairGenerator keyPairGenerator = getKeyPairGeneratorInstance(); + KeyPair keyPair = keyPairGenerator.generateKeyPair(); + PublicKey publicKey = keyPair.getPublic(); + StringWriter stringWriter = new StringWriter(); + try (JcaPEMWriter pemWriter = new JcaPEMWriter(stringWriter)) { + pemWriter.writeObject(publicKey); + pemWriter.flush(); + vcString = stringWriter.toString(); + if (System.getProperty("os.name").toLowerCase().contains("windows")) { + vcString = vcString.replaceAll("\r\n", "\\\\n"); + } else { + vcString = vcString.replaceAll("\n", "\\\\n"); + } + } catch (Exception e) { + throw e; + } + } catch (Exception e) { + logger.error(e.getMessage()); + } + return vcString; + } } \ No newline at end of file From cbc65c17ccaee79531dec528aaa9b0838a34620f Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Wed, 4 Dec 2024 01:03:31 +0530 Subject: [PATCH 286/860] MOSIP-35404 Signed-off-by: Nandhukumar --- .../java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java index 948b0243d..1d28f173e 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java @@ -16,9 +16,7 @@ import io.mosip.testrig.apirig.mimoto.testrunner.MosipTestRunner; import io.mosip.testrig.apirig.testrunner.OTPListener; import io.mosip.testrig.apirig.utils.AdminTestUtil; -import io.mosip.testrig.apirig.utils.EncryptionDecrptionUtil; import io.mosip.testrig.apirig.utils.GlobalConstants; -import io.mosip.testrig.apirig.utils.KeycloakUserManager; import io.mosip.testrig.apirig.utils.SkipTestCaseHandler; public class MimotoUtil extends AdminTestUtil { From 93a66196870ccc25bd519ebef8d3c51c62e52501 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Tue, 10 Dec 2024 17:03:06 +0530 Subject: [PATCH 287/860] [INJIWEB-1202] Remove id from the json if id is null (#530) Signed-off-by: Gurpreet41082 --- .../java/io/mosip/mimoto/dto/mimoto/VCCredentialProperties.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialProperties.java b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialProperties.java index 139e9f988..7c710e730 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialProperties.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialProperties.java @@ -21,6 +21,7 @@ public class VCCredentialProperties { private String issuer; + @JsonInclude(JsonInclude.Include.NON_NULL) private String id; private String issuanceDate; From 1aaba8f255725e6800dbee9830669edf52c08f07 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Wed, 11 Dec 2024 13:05:19 +0530 Subject: [PATCH 288/860] [INJIWEB-1202] Add charset header for downlaod vc (#531) * [INJIWEB-1202] Remove id from the json if id is null Signed-off-by: Gurpreet41082 * [INJIWEB-1202] Fix for wrong characters getting embedded in the VC Signed-off-by: Gurpreet41082 * [INJIWEB-1202] Fix rest api client to have custom headers method Signed-off-by: Gurpreet41082 --------- Signed-off-by: Gurpreet41082 --- .../service/impl/DataShareServiceImpl.java | 59 ++++++++++--------- .../io/mosip/mimoto/util/RestApiClient.java | 17 ++++++ .../mimoto/service/DataShareServiceTest.java | 3 +- 3 files changed, 50 insertions(+), 29 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java index 8be2e20ff..6c694eeb3 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java @@ -6,14 +6,11 @@ import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; import io.mosip.mimoto.dto.openid.datashare.DataShareResponseWrapperDTO; import io.mosip.mimoto.dto.openid.presentation.PresentationRequestDTO; -import io.mosip.mimoto.exception.InvalidCredentialResourceException; import io.mosip.mimoto.exception.ErrorConstants; +import io.mosip.mimoto.exception.InvalidCredentialResourceException; import io.mosip.mimoto.util.RestApiClient; import jakarta.annotation.PostConstruct; import lombok.extern.slf4j.Slf4j; -import org.apache.oro.text.regex.PatternMatcher; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.ByteArrayResource; @@ -25,8 +22,6 @@ import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.PathMatcher; -import java.net.URL; - @Slf4j @Service public class DataShareServiceImpl { @@ -92,28 +87,36 @@ private DataShareResponseWrapperDTO pushCredentialIntoDataShare(HttpEntity " + vcCredentialResponse ); - if(vcCredentialResponse.getCredential() == null){ - DataShareResponseDto dataShareResponse = objectMapper.readValue(vcCredentialResponseString, DataShareResponseDto.class); - String errorCode = dataShareResponse.getErrors().get(0).getErrorCode(); - throw new InvalidCredentialResourceException(errorCode.equals("DAT-SER-008") ? ErrorConstants.RESOURCE_NOT_FOUND.getErrorMessage() : ErrorConstants.RESOURCE_EXPIRED.getErrorMessage()); + public VCCredentialResponse downloadCredentialFromDataShare(PresentationRequestDTO presentationRequestDTO) throws JsonProcessingException { + log.info("Started the Credential Download From DataShare"); + // Create custom headers + HttpHeaders customHeaders = new HttpHeaders(); + customHeaders.add(HttpHeaders.ACCEPT, "application/json"); + customHeaders.add(HttpHeaders.ACCEPT_CHARSET, "UTF-8"); + + // Get the credentials URI and validate it + String credentialsResourceUri = presentationRequestDTO.getResource(); + if (!pathMatcher.match(dataShareGetUrlPattern, credentialsResourceUri)) { + throw new InvalidCredentialResourceException( + ErrorConstants.RESOURCE_INVALID.getErrorCode(), + ErrorConstants.RESOURCE_INVALID.getErrorMessage()); + } + + // Call the API with the custom headers + String vcCredentialResponseString = restApiClient.getApiWithCustomHeaders(credentialsResourceUri, String.class, customHeaders); + if (vcCredentialResponseString == null) { + throw new InvalidCredentialResourceException( + ErrorConstants.SERVER_UNAVAILABLE.getErrorCode(), + ErrorConstants.SERVER_UNAVAILABLE.getErrorMessage()); + } + VCCredentialResponse vcCredentialResponse = objectMapper.readValue(vcCredentialResponseString, VCCredentialResponse.class); + log.info("Completed Mapping the Credential to Object => " + vcCredentialResponse ); + if(vcCredentialResponse.getCredential() == null){ + DataShareResponseDto dataShareResponse = objectMapper.readValue(vcCredentialResponseString, DataShareResponseDto.class); + String errorCode = dataShareResponse.getErrors().get(0).getErrorCode(); + throw new InvalidCredentialResourceException(errorCode.equals("DAT-SER-008") ? ErrorConstants.RESOURCE_NOT_FOUND.getErrorMessage() : ErrorConstants.RESOURCE_EXPIRED.getErrorMessage()); + } + return vcCredentialResponse; } - return vcCredentialResponse; - } } diff --git a/src/main/java/io/mosip/mimoto/util/RestApiClient.java b/src/main/java/io/mosip/mimoto/util/RestApiClient.java index 00034444d..8c33ea6be 100644 --- a/src/main/java/io/mosip/mimoto/util/RestApiClient.java +++ b/src/main/java/io/mosip/mimoto/util/RestApiClient.java @@ -282,4 +282,21 @@ private String getBearerToken() throws IOException { System.setProperty(TOKEN, token); return token; } + + public T getApiWithCustomHeaders(String url, Class responseType, HttpHeaders customHeaders) { + T result = null; + RestTemplate rt = restTemplate; + if (disableSelfTokenRestTemplate) { + rt = plainRestTemplate; + } + try { + log.info("RestApiClient::getApiWithCustomHeaders()::entry url: {}", url); + // Add custom headers to the request + HttpEntity requestEntity = new HttpEntity<>(customHeaders); + result = (T) rt.exchange(url, HttpMethod.GET, requestEntity, responseType).getBody(); + } catch (Exception e) { + log.error("RestApiClient::getApiWithCustomHeaders()::error url:{} {} {}", url, e.getMessage(), e); + } + return result; + } } diff --git a/src/test/java/io/mosip/mimoto/service/DataShareServiceTest.java b/src/test/java/io/mosip/mimoto/service/DataShareServiceTest.java index def6a4600..d8c4be397 100644 --- a/src/test/java/io/mosip/mimoto/service/DataShareServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/DataShareServiceTest.java @@ -16,6 +16,7 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.test.util.ReflectionTestUtils; import org.springframework.util.PathMatcher; @@ -70,7 +71,7 @@ public void downloadCredentialWhenRequestIsProper() throws Exception { PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); VCCredentialResponse vcCredentialResponseDTO = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); String credentialString = TestUtilities.getObjectAsString(vcCredentialResponseDTO); - Mockito.when(restApiClient.getApi(Mockito.eq("http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/test"), Mockito.eq(String.class))) + Mockito.when(restApiClient.getApiWithCustomHeaders(Mockito.eq("http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/test"), Mockito.eq(String.class), Mockito.any(HttpHeaders.class))) .thenReturn(credentialString); Mockito.when(objectMapper.readValue(Mockito.eq(credentialString), Mockito.eq(VCCredentialResponse.class))) .thenReturn(vcCredentialResponseDTO); From 14014158a467c6a8fa3eff6a71d7501279567a6f Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Thu, 12 Dec 2024 15:45:08 +0530 Subject: [PATCH 289/860] Fixed config map with correct identation of verify host (#533) Signed-off-by: Gurpreet41082 --- helm/inji-config-server/values.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/helm/inji-config-server/values.yaml b/helm/inji-config-server/values.yaml index 9372604ab..50c6c4bec 100755 --- a/helm/inji-config-server/values.yaml +++ b/helm/inji-config-server/values.yaml @@ -120,7 +120,7 @@ envVariables: name: global - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_INJIVERIFY_HOST - valueFrom: - configMapKeyRef: - key: mosip-injiverify-host - name: global + valueFrom: + configMapKeyRef: + key: mosip-injiverify-host + name: global From ad432609c776ef862a069d0e69a68c75c0cff6e1 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Fri, 13 Dec 2024 10:18:00 +0530 Subject: [PATCH 290/860] [INJIWEB-1245] Corrected indentation of the config MOSIP_INJIVERIFY_HOST (#532) Signed-off-by: Gurpreet41082 --- helm/inji-config-server/values.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/helm/inji-config-server/values.yaml b/helm/inji-config-server/values.yaml index 9372604ab..50c6c4bec 100755 --- a/helm/inji-config-server/values.yaml +++ b/helm/inji-config-server/values.yaml @@ -120,7 +120,7 @@ envVariables: name: global - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_INJIVERIFY_HOST - valueFrom: - configMapKeyRef: - key: mosip-injiverify-host - name: global + valueFrom: + configMapKeyRef: + key: mosip-injiverify-host + name: global From f4fba595d05aa5f085959decbdfcfbb25add2a8a Mon Sep 17 00:00:00 2001 From: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> Date: Mon, 16 Dec 2024 16:09:23 +0530 Subject: [PATCH 291/860] MOSIP-38392 - updated the apitest commons version (#535) * MOSIP-36455 - Merge release 0.14.x branch with develop Signed-off-by: Mohanachandran S * MOSIP-36455 - Merge release 0.14.x branch with develop Signed-off-by: Mohanachandran S * INJIWEB-967 - Updated Automation Tests for Sunbird and eSignet Issues Signed-off-by: Mohanachandran S * MOSIP-38392 - updated the apitest commons version Signed-off-by: Mohanachandran S * MOSIP-38392 - Updated the issuer name for sunbird Signed-off-by: Mohanachandran S --------- Signed-off-by: Mohanachandran S --- api-test/pom.xml | 4 ++-- .../DownloadIssuerCredential/DownloadIssuerCredential.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/api-test/pom.xml b/api-test/pom.xml index 2149482e5..a630a1547 100644 --- a/api-test/pom.xml +++ b/api-test/pom.xml @@ -54,9 +54,9 @@ - io.mosip.testrig.apirig.apitest.commons + io.mosip.testrig.apitest.commons apitest-commons - 1.2.2-SNAPSHOT + 1.3.0 diff --git a/api-test/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml b/api-test/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml index 257996919..ec695af68 100644 --- a/api-test/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml +++ b/api-test/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml @@ -133,7 +133,7 @@ DownloadIssuerCredential: "code": "$ID:ESignet_AuthorizationCode_SunBirdC_All_Valid_Smoke_sid_code$", "redirect_uri": "$INJIREDIRECTURI$", "code_verifier": "$CODEVERIFIER$", - "issuer": "Sunbird", + "issuer": "StayProtected", "credential": "InsuranceCredential" }' output: '{ From 4e1c549c61d6b848dba57def3b96ecd7b5929bf5 Mon Sep 17 00:00:00 2001 From: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> Date: Mon, 16 Dec 2024 16:10:59 +0530 Subject: [PATCH 292/860] MOSIP-38392 - Merged apitest from develop with release branch (#536) * MOSIP-38392 - Merged apitest from develop with release branch Signed-off-by: Mohanachandran S * MOSIP-38392 - Merged apitest from develop with release branch Signed-off-by: Mohanachandran S --------- Signed-off-by: Mohanachandran S --- api-test/README.md | 174 +++++++++++++++++- api-test/pom.xml | 4 +- .../mimoto/testrunner/MosipTestRunner.java | 6 +- .../apirig/mimoto/testscripts/SimplePost.java | 6 +- .../testscripts/SimplePostForAutoGenId.java | 6 +- .../mimoto/utils/MimotoConfigManager.java | 3 +- .../apirig/mimoto/utils/MimotoUtil.java | 6 +- .../main/resources/config/mimoto.properties | 6 +- .../DownloadIssuerCredential.yml | 2 +- 9 files changed, 194 insertions(+), 19 deletions(-) diff --git a/api-test/README.md b/api-test/README.md index 51b622679..a414add81 100644 --- a/api-test/README.md +++ b/api-test/README.md @@ -1,3 +1,173 @@ -# Automation test +# Mimoto API Test Rig -All automation test code. +## Overview + +The **Mimoto API Test Rig** is designed for the execution of module-wise automation API tests for the mimoto module. This test rig utilizes **Java REST Assured** and **TestNG** frameworks to automate testing of the mimoto module API functionalities. The key focus is to validate the Getting Issuers, Download VC, Binding OTP, Wallet OTP and related functionalities provided by the mimoto module. + +--- + +## Test Categories + +- **Smoke**: Contains only positive test scenarios for quick verification. +- **Regression**: Includes all test scenarios, covering both positive and negative cases. + +--- + +## Coverage + +This test rig covers only **external API endpoints** exposed by the mimoto module. + +--- + +## Pre-requisites + +Before running the automation tests, ensure the following software is installed on the machine: + +- **Java 21** ([download here](https://jdk.java.net/)) +- **Maven 3.9.6** or higher ([installation guide](https://maven.apache.org/install.html)) +- **Lombok** (Refer to [Lombok Project](https://projectlombok.org/)) +- **setting.xml** ([download here](https://github.com/mosip/mosip-functional-tests/blob/master/settings.xml)) +- **apitest-commons** library should be cloned and the JAR should be built. Refer to ([README](https://github.com/mosip/mosip-functional-tests/blob/release-1.3.0/apitest-commons/README.md)) + +### For Windows + +- **Git Bash 2.18.0** or higher +- Ensure the `settings.xml` file is present in the `.m2` folder. + +### For Linux + +- The `settings.xml` file should be present in two places: + - In the regular Maven configuration folder (`/conf`) + - Under `/usr/local/maven/conf/` + +--- + +## Access Test Automation Code + +You can access the test automation code using either of the following methods: + +### From Browser + +1. Clone or download the repository as a zip file from [GitHub](https://github.com/mosip/mimoto). +2. Unzip the contents to your local machine. +3. Open a terminal (Linux) or command prompt (Windows) and continue with the following steps. + +### From Git Bash + +1. Copy the Git repository URL: `https://github.com/mosip/mimoto` +2. Open **Git Bash** on your local machine. +3. Run the following command to clone the repository: + ```sh + git clone https://github.com/mosip/mimoto + ``` + +--- + +## Build Test Automation Code + +Once the repository is cloned or downloaded, follow these steps to build and install the test automation code: + +1. Navigate to the project directory: + ```sh + cd api-test + ``` + +2. Build the project using Maven: + ```sh + mvn clean install -Dgpg.skip=true -Dmaven.gitcommitid.skip=true + ``` + +This will download the required dependencies and prepare the test suite for execution. + +--- + +## Execute Test Automation Suite + +You can execute the test automation code using either of the following methods: + +### Using Jar + +To execute the tests using Jar, use the following steps: + +1. Navigate to the `target` directory where the JAR file is generated: + ```sh + cd target/ + ``` + +2. Run the automation test suite JAR file: + ``` + java -jar -Dmodules=mimoto -Denv.user=api-internal. -Denv.endpoint= -Denv.testLevel=smokeAndRegression -jar apitest-mimoto-0.15.0-SNAPSHOT-jar-with-dependencies.jar + ``` + +# Using Eclipse IDE + +To execute the tests using Eclipse IDE, use the following steps: + +## 1. **Install Eclipse (Latest Version)** + - Download and install the latest version of Eclipse IDE from the [Eclipse Downloads](https://www.eclipse.org/downloads/). + +## 2. **Import the Maven Project** + + After Eclipse is installed, follow these steps to import the Maven project: + + - Open Eclipse IDE. + - Go to `File` > `Import`. + - In the **Import** wizard, select `Maven` > `Existing Maven Projects`, then click **Next**. + - Browse to the location where the `api-test` folder is saved (either from the cloned Git repository or downloaded zip). + - Select the folder, and Eclipse will automatically detect the Maven project. Click **Finish** to import the project. + +## 3. **Build the Project** + + - Right-click on the project in the **Project Explorer** and select `Maven` > `Update Project`. + - This will download the required dependencies as defined in the `pom.xml` and ensure everything is correctly set up. + +## 4. **Run the Tests** + + To execute the test automation suite, you need to configure the run parameters in Eclipse: + + - Go to `Run` > `Run Configurations`. + - In the **Run Configurations** window, create a new configuration for your tests: + - Right-click on **Java Application** and select **New**. + - In the **Main** tab, select the project by browsing the location where the `api-test` folder is saved, and select the **Main class** as `io.mosip.testrig.apirig.mimoto.testrunner.MosipTestRunner`. + - In the **Arguments** tab, add the necessary **VM arguments**: + - **VM Arguments**: + ``` + -Dmodules=mimoto -Denv.user=api-internal. -Denv.endpoint= -Denv.testLevel=smokeAndRegression``` + +## 5. **Run the Configuration** + + - Once the configuration is set up, click **Run** to execute the test suite. + - The tests will run, and the results will be shown in the **Console** tab of Eclipse. + + **Note**: You can also run in **Debug Mode** to troubleshoot issues by setting breakpoints in your code and choosing `Debug` instead of `Run`. + +--- + +## 6. **View Test Results** + + - After the tests are executed, you can view the detailed results in the `api-test\testng-report` directory. + - Two reports will gets generated + - First report is for pre-requisite testcases + - Second report is for core testcases + +--- + +## Details of Arguments Used + +- **env.user**: Replace `` with the appropriate environment name (e.g., `dev`, `qa`, etc.). +- **env.endpoint**: The environment where the application under test is deployed. Replace `` with the correct base URL for the environment (e.g., `https://api-internal..mosip.net`). +- **env.testLevel**: Set this to `smoke` to run only smoke test cases, or `smokeAndRegression` to run both smoke and regression tests. +- **jar**: Specify the name of the JAR file to execute. The version will change according to the development code version. For example, the current version may look like `apitest-mimoto-0.15.0-SNAPSHOT-jar-with-dependencies.jar`. + +### Build and Run Info + +To run the tests for both **Smoke** and **Regression**: + +1. Ensure the correct environment and test level parameters are set. +2. Execute the tests as shown in the command above to validate mimoto API functionalities. + +--- + +## License + +This project is licensed under the terms of the [Mozilla Public License 2.0](https://github.com/mosip/mosip-platform/blob/master/LICENSE) diff --git a/api-test/pom.xml b/api-test/pom.xml index 2149482e5..a630a1547 100644 --- a/api-test/pom.xml +++ b/api-test/pom.xml @@ -54,9 +54,9 @@ - io.mosip.testrig.apirig.apitest.commons + io.mosip.testrig.apitest.commons apitest-commons - 1.2.2-SNAPSHOT + 1.3.0 diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java index 471b16d8f..5e69cb2c1 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java @@ -133,13 +133,13 @@ public static void suiteSetup(String runType) { BaseTestCase.certsForModule = GlobalConstants.MIMOTO; DBManager.executeDBQueries(MimotoConfigManager.getKMDbUrl(), MimotoConfigManager.getKMDbUser(), MimotoConfigManager.getKMDbPass(), MimotoConfigManager.getKMDbSchema(), - getGlobalResourcePath() + "/" + "config/keyManagerDataDeleteQueriesForEsignet.txt"); + getGlobalResourcePath() + "/" + "config/keyManagerCertDataDeleteQueries.txt"); DBManager.executeDBQueries(MimotoConfigManager.getIdaDbUrl(), MimotoConfigManager.getIdaDbUser(), MimotoConfigManager.getPMSDbPass(), MimotoConfigManager.getIdaDbSchema(), - getGlobalResourcePath() + "/" + "config/idaDeleteQueriesForEsignet.txt"); + getGlobalResourcePath() + "/" + "config/idaCertDataDeleteQueries.txt"); DBManager.executeDBQueries(MimotoConfigManager.getMASTERDbUrl(), MimotoConfigManager.getMasterDbUser(), MimotoConfigManager.getMasterDbPass(), MimotoConfigManager.getMasterDbSchema(), - getGlobalResourcePath() + "/" + "config/masterDataDeleteQueriesForEsignet.txt"); + getGlobalResourcePath() + "/" + "config/masterDataCertDataDeleteQueries.txt"); AdminTestUtil.initiateMimotoTest(); BaseTestCase.otpListener = new OTPListener(); BaseTestCase.otpListener.run(); diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePost.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePost.java index 24b2cf039..fc901f4d7 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePost.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePost.java @@ -147,9 +147,9 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad if (MimotoConfigManager.isInServiceNotDeployedList("sunbirdrc")) throw new SkipException(GlobalConstants.SERVICE_NOT_DEPLOYED_MESSAGE); - if (MimotoConfigManager.getEsignetMockBaseURL() != null - && !MimotoConfigManager.getEsignetMockBaseURL().isBlank()) - tempUrl = ApplnURI.replace("api-internal.", MimotoConfigManager.getEsignetMockBaseURL()); + if (MimotoConfigManager.getproperty("esignetSunBirdBaseURL") != null + && !MimotoConfigManager.getproperty("esignetSunBirdBaseURL").isBlank()) + tempUrl = MimotoConfigManager.getproperty("esignetSunBirdBaseURL"); testCaseDTO.setEndPoint(testCaseDTO.getEndPoint().replace("$ESIGNETMOCKBASEURL$", "")); response = postRequestWithCookieAuthHeaderAndXsrfToken(tempUrl + testCaseDTO.getEndPoint(), diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java index 6d32a31dd..5844d5862 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java @@ -140,9 +140,9 @@ public void test(TestCaseDTO testCaseDTO) if (MimotoConfigManager.isInServiceNotDeployedList("sunbirdrc")) throw new SkipException(GlobalConstants.SERVICE_NOT_DEPLOYED_MESSAGE); - if (MimotoConfigManager.getEsignetMockBaseURL() != null - && !MimotoConfigManager.getEsignetMockBaseURL().isBlank()) - tempUrl = ApplnURI.replace("api-internal.", MimotoConfigManager.getEsignetMockBaseURL()); + if (MimotoConfigManager.getproperty("esignetSunBirdBaseURL") != null + && !MimotoConfigManager.getproperty("esignetSunBirdBaseURL").isBlank()) + tempUrl = MimotoConfigManager.getproperty("esignetSunBirdBaseURL"); testCaseDTO.setEndPoint(testCaseDTO.getEndPoint().replace("$ESIGNETMOCKBASEURL$", "")); } else if (testCaseDTO.getEndPoint().startsWith("$SUNBIRDBASEURL$") && testCaseName.contains("SunBirdR")) { diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java index ea7190703..54cf07717 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java @@ -20,7 +20,8 @@ public static void init() { Properties props = getproperties(path); // Convert Properties to Map and add to moduleSpecificPropertiesMap for (String key : props.stringPropertyNames()) { - moduleSpecificPropertiesMap.put(key, props.getProperty(key)); + String value = System.getenv(key) == null ? props.getProperty(key) : System.getenv(key); + moduleSpecificPropertiesMap.put(key, value); } } catch (Exception e) { LOGGER.error(e.getMessage()); diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java index ce29beeb1..41a805a08 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java @@ -122,12 +122,12 @@ public static String getOTPFromSMTP(String inputJson, TestCaseDTO testCaseDTO) { public static String getClientIdSection(String baseURL) { if (baseURL.contains("esignet-mosipid")) { - return "mimoto.oidc.mosipid.partner.clientid"; + return MimotoConfigManager.getproperty("mimoto-oidc-mosipid-partner-clientid"); } if (baseURL.contains("esignet-insurance")) { - return "mimoto.oidc.sunbird.partner.clientid"; + return MimotoConfigManager.getproperty("mimoto-oidc-sunbird-partner-clientid"); } - return "mimoto.oidc.partner.clientid"; + return MimotoConfigManager.getproperty("mimoto-oidc-partner-clientid"); } } \ No newline at end of file diff --git a/api-test/src/main/resources/config/mimoto.properties b/api-test/src/main/resources/config/mimoto.properties index c226df696..d45591c23 100644 --- a/api-test/src/main/resources/config/mimoto.properties +++ b/api-test/src/main/resources/config/mimoto.properties @@ -2,4 +2,8 @@ actuatorMimotoEndpoint=/v1/mimoto/actuator/env sunBirdBaseURL=https://registry.dev1.mosip.net #Once sunbird registry is pointing to specific env, remove the above line and uncomment below line -#sunBirdBaseURL=registry \ No newline at end of file +#sunBirdBaseURL=registry +mimoto-oidc-mosipid-partner-clientid=mimoto.oidc.mosipid.partner.clientid +mimoto-oidc-sunbird-partner-clientid=mimoto.oidc.sunbird.partner.clientid +mimoto-oidc-partner-clientid=mimoto.oidc.partner.clientid +esignetSunBirdBaseURL= \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml b/api-test/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml index 257996919..ec695af68 100644 --- a/api-test/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml +++ b/api-test/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml @@ -133,7 +133,7 @@ DownloadIssuerCredential: "code": "$ID:ESignet_AuthorizationCode_SunBirdC_All_Valid_Smoke_sid_code$", "redirect_uri": "$INJIREDIRECTURI$", "code_verifier": "$CODEVERIFIER$", - "issuer": "Sunbird", + "issuer": "StayProtected", "credential": "InsuranceCredential" }' output: '{ From 4e7abff75e9be254df7340d699b9bacfb2a68260 Mon Sep 17 00:00:00 2001 From: techno-467 Date: Tue, 17 Dec 2024 13:50:29 +0530 Subject: [PATCH 293/860] [MOSIP-38397] Upgraded actions/cache version Signed-off-by: techno-467 --- .github/workflows/sonarqube.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/sonarqube.yml b/.github/workflows/sonarqube.yml index 17785c01c..c92d40377 100644 --- a/.github/workflows/sonarqube.yml +++ b/.github/workflows/sonarqube.yml @@ -30,13 +30,13 @@ jobs: gpg2 --import ./.github/keys/mosipgpgkey_pub.gpg gpg2 --quiet --batch --passphrase=${{secrets.gpg_secret}} --allow-secret-key-import --import ./.github/keys/mosipgpgkey_sec.gpg - name: Cache SonarQube packages - uses: actions/cache@v1 + uses: actions/cache@v4 with: path: ~/.sonar/cache key: ${{ runner.os }}-sonar restore-keys: ${{ runner.os }}-sonar - name: Cache Maven packages - uses: actions/cache@v1 + uses: actions/cache@v4 with: path: ~/.m2 key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} From 2d719f81cdf3e9ba7120c756de23cd3b2c046d63 Mon Sep 17 00:00:00 2001 From: techno-467 Date: Tue, 17 Dec 2024 13:54:16 +0530 Subject: [PATCH 294/860] [MOSIP-38397] Upgraded actions/cache version Signed-off-by: techno-467 --- .github/workflows/sonarqube.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/sonarqube.yml b/.github/workflows/sonarqube.yml index 17785c01c..c92d40377 100644 --- a/.github/workflows/sonarqube.yml +++ b/.github/workflows/sonarqube.yml @@ -30,13 +30,13 @@ jobs: gpg2 --import ./.github/keys/mosipgpgkey_pub.gpg gpg2 --quiet --batch --passphrase=${{secrets.gpg_secret}} --allow-secret-key-import --import ./.github/keys/mosipgpgkey_sec.gpg - name: Cache SonarQube packages - uses: actions/cache@v1 + uses: actions/cache@v4 with: path: ~/.sonar/cache key: ${{ runner.os }}-sonar restore-keys: ${{ runner.os }}-sonar - name: Cache Maven packages - uses: actions/cache@v1 + uses: actions/cache@v4 with: path: ~/.m2 key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} From 8fa93d8d1ee8faf5fb6d37207dd70d98c58dbf36 Mon Sep 17 00:00:00 2001 From: balachandarg-tw <115633327+balachandarg-tw@users.noreply.github.com> Date: Wed, 18 Dec 2024 15:05:24 +0530 Subject: [PATCH 295/860] [INJIMOB: 2452]: Add Credential Issuer Host in IssuerDTO (#534) * [INJIMOB-2452]: Add credential_issuer_identifier to IssuerDTO Signed-off-by: BalachandarG * [INJIMOB-2452]: Update Credential Issuer Identifier to Credential Issuer Host Signed-off-by: BalachandarG * [INJIMOB-2452]: Add issuer host field in local mimoto-issuers-config.json Signed-off-by: BalachandarG * [INJIMOB-2452]: Move enabled field as last attribute Signed-off-by: BalachandarG * [INJIMOB-2452]: Attribute name change for issuer_id Signed-off-by: BalachandarG * [INJIMOB-2452]: Update issuerId variable name Signed-off-by: BalachandarG * [INJIMOB-2452]: Update in TestUtilities. Signed-off-by: BalachandarG --------- Signed-off-by: BalachandarG --- .../config/mimoto-issuers-config.json | 21 ++++++----- docs/api-documentation-openapi.json | 35 +++++++++++-------- .../config/IssuersValidationConfig.java | 10 +++--- .../java/io/mosip/mimoto/dto/IssuerDTO.java | 9 +++-- .../service/impl/IssuersServiceImpl.java | 4 +-- src/main/resources/mimoto-issuers-config.json | 21 ++++++----- .../controller/IssuersControllerTest.java | 2 ++ .../io/mosip/mimoto/util/TestUtilities.java | 6 ++-- 8 files changed, 64 insertions(+), 44 deletions(-) diff --git a/docker-compose/config/mimoto-issuers-config.json b/docker-compose/config/mimoto-issuers-config.json index ff6243994..6c31f3eb1 100644 --- a/docker-compose/config/mimoto-issuers-config.json +++ b/docker-compose/config/mimoto-issuers-config.json @@ -1,7 +1,7 @@ { "issuers": [ { - "credential_issuer": "Mosip", + "issuer_id": "Mosip", "protocol": "OpenId4VCI", "display": [ { @@ -72,11 +72,12 @@ "proxy_token_endpoint": "https://esignet-mosipid.collab.mosip.net/v1/esignet/oauth/v2/token", "client_alias": "mpartner-default-test-mosipid", "qr_code_type": "OnlineSharing", - "enabled": "true", - "wellknown_endpoint": "https://injicertify-mosipid.collab.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer" + "wellknown_endpoint": "https://injicertify-mosipid.collab.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer", + "credential_issuer": "https://injicertify-mosipid.collab.mosip.net", + "enabled": "true" }, { - "credential_issuer": "StayProtected", + "issuer_id": "StayProtected", "protocol": "OpenId4VCI", "display": [ { @@ -97,11 +98,12 @@ "proxy_token_endpoint": "https://esignet-insurance.collab.mosip.net/v1/esignet/oauth/v2/token", "client_alias": "esignet-sunbird-partner", "qr_code_type": "OnlineSharing", - "enabled": "true", - "wellknown_endpoint": "https://injicertify-insurance.collab.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer" + "wellknown_endpoint": "https://injicertify-insurance.collab.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer", + "credential_issuer": "https://injicertify-insurance.collab.mosip.net", + "enabled": "true" }, { - "credential_issuer": "Mock", + "issuer_id": "Mock", "protocol": "OpenId4VCI", "display": [ { @@ -122,8 +124,9 @@ "proxy_token_endpoint": "https://esignet-mock.collab.mosip.net/v1/esignet/oauth/v2/token", "client_alias": "mpartner-mock-testing", "qr_code_type": "OnlineSharing", - "enabled": "true", - "wellknown_endpoint": "https://injicertify-mock.collab.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer" + "wellknown_endpoint": "https://injicertify-mock.collab.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer", + "credential_issuer": "https://injicertify-mock.collab.mosip.net", + "enabled": "true" } ] } diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index 45fcb7e9a..26df249f6 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -1171,7 +1171,7 @@ "properties": { "issuers": [ { - "credential_issuer": "string", + "issuer_id": "string", "protocol": "string", "display": [ { @@ -1205,7 +1205,8 @@ "additionalProp2": "string", "additionalProp3": "string" }, - "wellknown_endpoint": "string" + "wellknown_endpoint": "string", + "credential_issuer": "string" } ] } @@ -1220,7 +1221,7 @@ "response": { "issuers": [ { - "credential_issuer": "MOSIPInsurance", + "issuer_id": "MOSIPInsurance", "protocol": "OpenId4VCI", "display": [ { @@ -1235,10 +1236,11 @@ } ], "client_id": "3yz7-j3xRzU3SODdoNgSGvO_cD8UijH3AIWRDAg1x-M", - ".well-known": "http://localhost:8088/.well-known/openid-credential-issuer" + ".well-known": "http://localhost:8088/.well-known/openid-credential-issuer", + "credential_issuer": "http://localhost:8088" }, { - "credential_issuer": "MOSIPNationalID", + "issuer_id": "MOSIPNationalID", "protocol": "OpenId4VCI", "display": [ { @@ -1253,7 +1255,8 @@ } ], "client_id": "3yz7-j3xRzU3SODdoNgSGvO_cD8UijH3AIWRDAg1x-M", - ".well-known": "http://localhost:8088/.well-known/openid-credential-issuer" + ".well-known": "http://localhost:8088/.well-known/openid-credential-issuer", + "credential_issuer": "http://localhost:8088" } ] } @@ -1271,7 +1274,7 @@ "response": { "issuers": [ { - "credential_issuer": "MOSIPInsurance", + "issuer_id": "MOSIPInsurance", "protocol": "OpenId4VCI", "display": [ { @@ -1286,10 +1289,11 @@ } ], "client_id": "3yz7-j3xRzU3SODdoNgSGvO_cD8UijH3AIWRDAg1x-M", - ".well-known": "http://localhost:8088/.well-known/openid-credential-issuer" + ".well-known": "http://localhost:8088/.well-known/openid-credential-issuer", + "credential_issuer": "http://localhost:8088" }, { - "credential_issuer": "MOSIPNationalID", + "issuer_id": "MOSIPNationalID", "protocol": "OpenId4VCI", "display": [ { @@ -1304,7 +1308,8 @@ } ], "client_id": "3yz7-j3xRzU3SODdoNgSGvO_cD8UijH3AIWRDAg1x-M", - ".well-known": "http://localhost:8088/.well-known/openid-credential-issuer" + ".well-known": "http://localhost:8088/.well-known/openid-credential-issuer", + "credential_issuer": "http://localhost:8088" } ] } @@ -1408,7 +1413,7 @@ "responsetime": "2024-04-25T05:56:55.890Z", "metadata": null, "response": { - "credential_issuer": "ESignet", + "issuer_id": "ESignet", "protocol": "OpenId4VCI", "display": [ { @@ -1491,7 +1496,8 @@ "additional_headers": { "Accept": "application/json" }, - ".well-known": "https://esignet.collab.mosip.net/.well-known/openid-credential-issuer" + ".well-known": "https://esignet.collab.mosip.net/.well-known/openid-credential-issuer", + "credential_issuer": "https://esignet.collab.mosip.net" }, "errors": [] }, @@ -1506,7 +1512,7 @@ "responsetime": "2024-04-25T05:56:55.890Z", "metadata": null, "response": { - "credential_issuer": "ESignet", + "issuer_id": "ESignet", "protocol": "OpenId4VCI", "display": [ { @@ -1589,7 +1595,8 @@ "additional_headers": { "Accept": "application/json" }, - ".well-known": "https://esignet.collab.mosip.net/.well-known/openid-credential-issuer" + ".well-known": "https://esignet.collab.mosip.net/.well-known/openid-credential-issuer", + "credential_issuer": "https://esignet.collab.mosip.net" }, "errors": [] }, diff --git a/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java b/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java index dac6ae80a..6cbe8fe5f 100644 --- a/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java +++ b/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java @@ -42,15 +42,15 @@ public void run(ApplicationArguments args) throws ApiNotAccessibleException, IOE if (!issuerDTO.getProtocol().equals("OTP")) { errors.set(new BeanPropertyBindingResult(issuerDTO, "issuerDTO")); validator.validate(issuerDTO, errors.get()); - String credentialIssuer = issuerDTO.getCredential_issuer(); + String issuerId = issuerDTO.getIssuer_id(); String[] tokenEndpointArray = issuerDTO.getToken_endpoint().split("/"); Set currentIssuers = credentialIssuers.get(); - if (!currentIssuers.add(credentialIssuer)) { - log.error(VALIDATION_ERROR_MSG + "duplicate value found " + credentialIssuer); + if (!currentIssuers.add(issuerId)) { + log.error(VALIDATION_ERROR_MSG + "duplicate value found " + issuerId); throw new RuntimeException(VALIDATION_ERROR_MSG); } - if (!tokenEndpointArray[tokenEndpointArray.length - 1].equals(credentialIssuer)) { - log.error(VALIDATION_ERROR_MSG + "TokenEndpoint does not match with the credential issuer " + credentialIssuer); + if (!tokenEndpointArray[tokenEndpointArray.length - 1].equals(issuerId)) { + log.error(VALIDATION_ERROR_MSG + "TokenEndpoint does not match with the credential issuer " + issuerId); throw new RuntimeException(VALIDATION_ERROR_MSG); } credentialIssuers.set(currentIssuers); diff --git a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java index b12749ece..5f76ba80c 100644 --- a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java @@ -1,9 +1,7 @@ package io.mosip.mimoto.dto; import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; import com.google.gson.annotations.Expose; -import com.google.gson.annotations.SerializedName; import io.mosip.mimoto.model.QRCodeType; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.Valid; @@ -21,7 +19,7 @@ public class IssuerDTO { @Expose @NotBlank @Schema(description = "Unique Identifier of the Issuer") - String credential_issuer; + String issuer_id; @Expose @NotBlank @Schema(description = "protocol of the download flow", allowableValues = {"OTP", "OpenId4VCI"}) @@ -68,4 +66,9 @@ public class IssuerDTO { @NotBlank @Schema(description = "Toggler to Enable / Disable the Issuer", defaultValue = "false") String enabled; + @Expose + @NotBlank + @JsonInclude(NON_NULL) + @Schema(description = "Credential Issuer Host") + String credential_issuer; } diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index 07f895db4..23f6d2eb6 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -95,7 +95,7 @@ public IssuerDTO getIssuerConfig(String issuerId) throws ApiNotAccessibleExcepti } IssuersDTO issuers = new Gson().fromJson(issuersConfigJsonValue, IssuersDTO.class); Optional issuerConfigResp = issuers.getIssuers().stream() - .filter(issuer -> issuer.getCredential_issuer().equals(issuerId)) + .filter(issuer -> issuer.getIssuer_id().equals(issuerId)) .findFirst(); if (issuerConfigResp.isPresent()) issuerDTO = issuerConfigResp.get(); @@ -107,7 +107,7 @@ public IssuerDTO getIssuerConfig(String issuerId) throws ApiNotAccessibleExcepti @Override public CredentialIssuerWellKnownResponse getIssuerWellknown(String issuerId) throws ApiNotAccessibleException, IOException { return getAllIssuersWithAllFields().getIssuers().stream() - .filter(issuer -> issuer.getCredential_issuer().equals(issuerId)) + .filter(issuer -> issuer.getIssuer_id().equals(issuerId)) .findFirst() .map(issuerDTO -> { String wellknownResponse = restApiClient.getApi(issuerDTO.getWellknown_endpoint(), String.class); diff --git a/src/main/resources/mimoto-issuers-config.json b/src/main/resources/mimoto-issuers-config.json index 86a5a4643..6df6e2057 100644 --- a/src/main/resources/mimoto-issuers-config.json +++ b/src/main/resources/mimoto-issuers-config.json @@ -1,7 +1,7 @@ { "issuers": [ { - "credential_issuer": "Mosip", + "issuer_id": "Mosip", "protocol": "OpenId4VCI", "display": [ { @@ -72,11 +72,12 @@ "proxy_token_endpoint": "https://esignet-mosipid.dev1.mosip.net/v1/esignet/oauth/v2/token", "client_alias": "mpartner-default-test-mosipid", "qr_code_type": "OnlineSharing", - "enabled": "true", - "wellknown_endpoint": "https://injicertify-mosipid.dev1.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer" + "wellknown_endpoint": "https://injicertify-mosipid.dev1.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer", + "credential_issuer": "https://injicertify-mosipid.dev1.mosip.net", + "enabled": "true" }, { - "credential_issuer": "StayProtected", + "issuer_id": "StayProtected", "protocol": "OpenId4VCI", "display": [ { @@ -97,11 +98,12 @@ "proxy_token_endpoint": "https://esignet-insurance.dev1.mosip.net/v1/esignet/oauth/v2/token", "client_alias": "esignet-sunbird-partner", "qr_code_type": "OnlineSharing", - "enabled": "true", - "wellknown_endpoint": "https://injicertify-insurance.dev1.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer" + "wellknown_endpoint": "https://injicertify-insurance.dev1.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer", + "credential_issuer": "https://injicertify-insurance.dev1.mosip.net", + "enabled": "true" }, { - "credential_issuer": "Mock", + "issuer_id": "Mock", "protocol": "OpenId4VCI", "display": [ { @@ -122,8 +124,9 @@ "proxy_token_endpoint": "https://esignet-mock.dev1.mosip.net/v1/esignet/oauth/v2/token", "client_alias": "mpartner-mock-testing", "qr_code_type": "OnlineSharing", - "enabled": "true", - "wellknown_endpoint": "https://injicertify-mock.dev1.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer" + "wellknown_endpoint": "https://injicertify-mock.dev1.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer", + "credential_issuer": "https://injicertify-mock.dev1.mosip.net", + "enabled": "true" } ] } diff --git a/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java b/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java index 0fe3280c7..2ecd10b0f 100644 --- a/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java @@ -68,6 +68,7 @@ public void getAllIssuersTest() throws Exception { .andExpect(status().isOk()) .andExpect(jsonPath("$.response.issuers", Matchers.everyItem( Matchers.allOf( + Matchers.hasKey("issuer_id"), Matchers.hasKey("credential_issuer"), Matchers.hasKey("display"), Matchers.hasKey("client_id"), @@ -86,6 +87,7 @@ public void getAllIssuersTest() throws Exception { .andExpect(status().isOk()) .andExpect(jsonPath("$.response.issuers", Matchers.everyItem( Matchers.allOf( + Matchers.hasKey("issuer_id"), Matchers.hasKey("credential_issuer"), Matchers.hasKey("display"), Matchers.hasKey("client_id"), diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index da9828d64..72235d932 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -100,7 +100,8 @@ public static IssuerDTO getIssuerDTO(String issuerName) { display.setLanguage("en"); display.setLogo(logo); IssuerDTO issuer = new IssuerDTO(); - issuer.setCredential_issuer(issuerName + "id"); + issuer.setIssuer_id(issuerName + "id"); + issuer.setCredential_issuer("https://injicertify-mock.dev1.mosip.net"); issuer.setDisplay(Collections.singletonList(display)); issuer.setClient_id("123"); if (issuerName.equals("Issuer1")) issuer.setWellknown_endpoint("/well-known-proxy"); @@ -121,7 +122,8 @@ public static IssuerDTO getIssuerConfigDTO(String issuerName, List nullF display.setLanguage("en"); display.setLogo(logo); IssuerDTO issuer = new IssuerDTO(); - issuer.setCredential_issuer(issuerName + "id"); + issuer.setIssuer_id(issuerName + "id"); + issuer.setCredential_issuer("https://injicertify-mock.dev1.mosip.net"); issuer.setDisplay(Collections.singletonList(display)); issuer.setClient_id("123"); issuer.setEnabled("true"); From 80d1e5761612386a2dc234dd895265cbfea838ca Mon Sep 17 00:00:00 2001 From: Alka Prasad Date: Thu, 19 Dec 2024 12:57:03 +0530 Subject: [PATCH 296/860] [INJIMOB-2468]: add temporary fix to have default value to credential validity for download api (#539) Signed-off-by: Alka Prasad --- .../java/io/mosip/mimoto/controller/CredentialsController.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/io/mosip/mimoto/controller/CredentialsController.java b/src/main/java/io/mosip/mimoto/controller/CredentialsController.java index dc800ce78..86e1887ec 100644 --- a/src/main/java/io/mosip/mimoto/controller/CredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/CredentialsController.java @@ -52,6 +52,8 @@ public class CredentialsController { @PostMapping("/download") public ResponseEntity downloadCredentialAsPDF(@RequestParam Map params ) { ResponseWrapper responseWrapper = new ResponseWrapper<>(); + //TODO: remove this default value after the apitest is updated + params.putIfAbsent("vcStorageExpiryLimitInTimes", "-1"); try { String issuerId = params.get("issuer"); From 76295246ddf03321a38f061d539a72112f7cabcd Mon Sep 17 00:00:00 2001 From: balachandarg-tw <115633327+balachandarg-tw@users.noreply.github.com> Date: Thu, 19 Dec 2024 18:59:45 +0530 Subject: [PATCH 297/860] [INJIMOB-2452]: Add Credential Issuer Host (#540) * [INJIMOB-2452]: Add Credential Issuer Host Signed-off-by: BalachandarG * [INJIMOB-2452]: Update in Test Utilities Signed-off-by: BalachandarG * [INJIMOB-2452]: Update credential_issuer_host in Test Signed-off-by: BalachandarG --------- Signed-off-by: BalachandarG --- docker-compose/config/mimoto-issuers-config.json | 9 ++++++--- src/main/java/io/mosip/mimoto/dto/IssuerDTO.java | 7 ++++++- src/main/resources/mimoto-issuers-config.json | 9 ++++++--- .../mosip/mimoto/controller/IssuersControllerTest.java | 6 ++++-- src/test/java/io/mosip/mimoto/util/TestUtilities.java | 6 ++++-- 5 files changed, 26 insertions(+), 11 deletions(-) diff --git a/docker-compose/config/mimoto-issuers-config.json b/docker-compose/config/mimoto-issuers-config.json index 6c31f3eb1..11e5a1422 100644 --- a/docker-compose/config/mimoto-issuers-config.json +++ b/docker-compose/config/mimoto-issuers-config.json @@ -73,7 +73,8 @@ "client_alias": "mpartner-default-test-mosipid", "qr_code_type": "OnlineSharing", "wellknown_endpoint": "https://injicertify-mosipid.collab.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer", - "credential_issuer": "https://injicertify-mosipid.collab.mosip.net", + "credential_issuer": "Mosip", + "credential_issuer_host": "https://injicertify-mosipid.collab.mosip.net", "enabled": "true" }, { @@ -99,7 +100,8 @@ "client_alias": "esignet-sunbird-partner", "qr_code_type": "OnlineSharing", "wellknown_endpoint": "https://injicertify-insurance.collab.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer", - "credential_issuer": "https://injicertify-insurance.collab.mosip.net", + "credential_issuer": "StayProtected", + "credential_issuer_host": "https://injicertify-insurance.collab.mosip.net", "enabled": "true" }, { @@ -125,7 +127,8 @@ "client_alias": "mpartner-mock-testing", "qr_code_type": "OnlineSharing", "wellknown_endpoint": "https://injicertify-mock.collab.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer", - "credential_issuer": "https://injicertify-mock.collab.mosip.net", + "credential_issuer": "Mock", + "credential_issuer_host": "https://injicertify-mock.collab.mosip.net", "enabled": "true" } ] diff --git a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java index 5f76ba80c..aae0880f6 100644 --- a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java @@ -69,6 +69,11 @@ public class IssuerDTO { @Expose @NotBlank @JsonInclude(NON_NULL) - @Schema(description = "Credential Issuer Host") + @Schema(description = "Unique Identifier of the Issuer") String credential_issuer; + @Expose + @NotBlank + @JsonInclude(NON_NULL) + @Schema(description = "Credential Issuer Host") + String credential_issuer_host; } diff --git a/src/main/resources/mimoto-issuers-config.json b/src/main/resources/mimoto-issuers-config.json index 6df6e2057..6b8924a13 100644 --- a/src/main/resources/mimoto-issuers-config.json +++ b/src/main/resources/mimoto-issuers-config.json @@ -73,7 +73,8 @@ "client_alias": "mpartner-default-test-mosipid", "qr_code_type": "OnlineSharing", "wellknown_endpoint": "https://injicertify-mosipid.dev1.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer", - "credential_issuer": "https://injicertify-mosipid.dev1.mosip.net", + "credential_issuer": "Mosip", + "credential_issuer_host": "https://injicertify-mosipid.dev1.mosip.net", "enabled": "true" }, { @@ -99,7 +100,8 @@ "client_alias": "esignet-sunbird-partner", "qr_code_type": "OnlineSharing", "wellknown_endpoint": "https://injicertify-insurance.dev1.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer", - "credential_issuer": "https://injicertify-insurance.dev1.mosip.net", + "credential_issuer": "StayProtected", + "credential_issuer_host": "https://injicertify-insurance.dev1.mosip.net", "enabled": "true" }, { @@ -125,7 +127,8 @@ "client_alias": "mpartner-mock-testing", "qr_code_type": "OnlineSharing", "wellknown_endpoint": "https://injicertify-mock.dev1.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer", - "credential_issuer": "https://injicertify-mock.dev1.mosip.net", + "credential_issuer": "Mock", + "credential_issuer_host": "https://injicertify-mock.dev1.mosip.net", "enabled": "true" } ] diff --git a/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java b/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java index 2ecd10b0f..b7eaf5ea3 100644 --- a/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java @@ -79,7 +79,8 @@ public void getAllIssuersTest() throws Exception { Matchers.not(Matchers.hasKey("credential_endpoint")), Matchers.not(Matchers.hasKey("credential_audience")), Matchers.not(Matchers.hasKey("additional_headers")), - Matchers.not(Matchers.hasKey("scopes_supported")) + Matchers.not(Matchers.hasKey("scopes_supported")), + Matchers.hasKey("credential_issuer_host") ) ))); @@ -98,7 +99,8 @@ public void getAllIssuersTest() throws Exception { Matchers.not(Matchers.hasKey("credential_endpoint")), Matchers.not(Matchers.hasKey("credential_audience")), Matchers.not(Matchers.hasKey("additional_headers")), - Matchers.not(Matchers.hasKey("scopes_supported")) + Matchers.not(Matchers.hasKey("scopes_supported")), + Matchers.hasKey("credential_issuer_host") ) ))); diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index 72235d932..30d2036f5 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -101,7 +101,8 @@ public static IssuerDTO getIssuerDTO(String issuerName) { display.setLogo(logo); IssuerDTO issuer = new IssuerDTO(); issuer.setIssuer_id(issuerName + "id"); - issuer.setCredential_issuer("https://injicertify-mock.dev1.mosip.net"); + issuer.setCredential_issuer(issuerName + "id"); + issuer.setCredential_issuer_host("https://injicertify-mock.dev1.mosip.net"); issuer.setDisplay(Collections.singletonList(display)); issuer.setClient_id("123"); if (issuerName.equals("Issuer1")) issuer.setWellknown_endpoint("/well-known-proxy"); @@ -123,7 +124,8 @@ public static IssuerDTO getIssuerConfigDTO(String issuerName, List nullF display.setLogo(logo); IssuerDTO issuer = new IssuerDTO(); issuer.setIssuer_id(issuerName + "id"); - issuer.setCredential_issuer("https://injicertify-mock.dev1.mosip.net"); + issuer.setCredential_issuer(issuerName + "id"); + issuer.setCredential_issuer_host("https://injicertify-mock.dev1.mosip.net"); issuer.setDisplay(Collections.singletonList(display)); issuer.setClient_id("123"); issuer.setEnabled("true"); From fe66f1e7f454a5cf1c892cf3cdb6fc65a69464fb Mon Sep 17 00:00:00 2001 From: Kamlesh Singh Bisht Date: Tue, 24 Dec 2024 12:31:28 +0530 Subject: [PATCH 298/860] [INJIWEB-1167]: Multi-lingual support for credential download as pdf added to develop --- .../controller/CredentialsController.java | 4 +-- .../java/io/mosip/mimoto/dto/IssuerDTO.java | 8 ++--- .../mimoto/service/CredentialService.java | 2 +- .../service/impl/CredentialServiceImpl.java | 35 +++++++++++-------- .../java/io/mosip/mimoto/util/Utilities.java | 7 ++-- .../templates/credential-template.html | 2 +- .../controller/CredentialsControllerTest.java | 8 ++--- 7 files changed, 38 insertions(+), 28 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/CredentialsController.java b/src/main/java/io/mosip/mimoto/controller/CredentialsController.java index dc800ce78..0a0638293 100644 --- a/src/main/java/io/mosip/mimoto/controller/CredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/CredentialsController.java @@ -57,13 +57,13 @@ public ResponseEntity downloadCredentialAsPDF(@RequestParam Map params, String issuerId) throws ApiNotAccessibleException, IOException; - ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String credentialType, TokenResponseDTO response, String credentialValidity) throws Exception; + ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String credentialType, TokenResponseDTO response, String credentialValidity, String locale) throws Exception; } diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java index 947621c88..a1f57637c 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java @@ -1,5 +1,7 @@ package io.mosip.mimoto.service.impl; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.zxing.BarcodeFormat; @@ -43,6 +45,8 @@ import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -117,7 +121,7 @@ public TokenResponseDTO getTokenResponse(Map params, String issu } @Override - public ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String credentialType, TokenResponseDTO response, String credentialValidity) throws Exception { + public ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String credentialType, TokenResponseDTO response, String credentialValidity, String locale) throws Exception { IssuerDTO issuerConfig = issuerService.getIssuerConfig(issuerId); CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = issuerService.getIssuerWellknown(issuerId); CredentialsSupportedResponse credentialsSupportedResponse = issuerService.getIssuerWellknownForCredentialType(issuerId, credentialType); @@ -126,7 +130,7 @@ public ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String cred boolean verificationStatus = issuerId.toLowerCase().contains("mock") || verifyCredential(vcCredentialResponse); if(verificationStatus) { String dataShareUrl = QRCodeType.OnlineSharing.equals(issuerConfig.getQr_code_type()) ? dataShareService.storeDataInDataShare(objectMapper.writeValueAsString(vcCredentialResponse), credentialValidity) : ""; - return generatePdfForVerifiableCredentials(vcCredentialResponse, issuerConfig, credentialsSupportedResponse, dataShareUrl, credentialValidity); + return generatePdfForVerifiableCredentials(issuerId, credentialType,vcCredentialResponse, issuerConfig, credentialsSupportedResponse, dataShareUrl, credentialValidity, locale); } throw new VCVerificationException(SIGNATURE_VERIFICATION_EXCEPTION.getErrorCode(), SIGNATURE_VERIFICATION_EXCEPTION.getErrorMessage()); @@ -135,7 +139,6 @@ public ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String cred public VCCredentialResponse downloadCredential(String credentialEndpoint, VCCredentialRequest vcCredentialRequest, String accessToken) throws InvalidCredentialResourceException { VCCredentialResponse vcCredentialResponse = restApiClient.postApi(credentialEndpoint, MediaType.APPLICATION_JSON, vcCredentialRequest, VCCredentialResponse.class, accessToken); - log.debug("VC Credential Response is -> " + vcCredentialResponse); if (vcCredentialResponse == null) throw new RuntimeException("VC Credential Issue API not accessible"); return vcCredentialResponse; } @@ -155,10 +158,10 @@ public VCCredentialRequest generateVCCredentialRequest(IssuerDTO issuerDTO, Cred .build(); } - public ByteArrayInputStream generatePdfForVerifiableCredentials(VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String dataShareUrl, String credentialValidity) throws Exception { - LinkedHashMap displayProperties = loadDisplayPropertiesFromWellknown(vcCredentialResponse, credentialsSupportedResponse); - Map data = getPdfResourceFromVcProperties(displayProperties, credentialsSupportedResponse, vcCredentialResponse, issuerDTO, dataShareUrl, credentialValidity); - return renderVCInCredentialTemplate(data); + public ByteArrayInputStream generatePdfForVerifiableCredentials(String issuerId, String credentialType, VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String dataShareUrl, String credentialValidity, String locale) throws Exception { + LinkedHashMap displayProperties = loadDisplayPropertiesFromWellknown(vcCredentialResponse, credentialsSupportedResponse, locale); + Map data = getPdfResourceFromVcProperties(displayProperties, credentialsSupportedResponse, vcCredentialResponse, issuerDTO, dataShareUrl, credentialValidity, locale); + return renderVCInCredentialTemplate(data, issuerId, credentialType); } public Boolean verifyCredential(VCCredentialResponse vcCredentialResponse) throws VCVerificationException, JsonProcessingException { @@ -173,13 +176,17 @@ public Boolean verifyCredential(VCCredentialResponse vcCredentialResponse) throw } @NotNull - private static LinkedHashMap loadDisplayPropertiesFromWellknown(VCCredentialResponse vcCredentialResponse, CredentialsSupportedResponse credentialsSupportedResponse) { + private static LinkedHashMap loadDisplayPropertiesFromWellknown(VCCredentialResponse vcCredentialResponse, CredentialsSupportedResponse credentialsSupportedResponse, String locale) { LinkedHashMap displayProperties = new LinkedHashMap<>(); Map credentialProperties = vcCredentialResponse.getCredential().getCredentialSubject(); LinkedHashMap vcPropertiesFromWellKnown = new LinkedHashMap<>(); Map credentialSubject = credentialsSupportedResponse.getCredentialDefinition().getCredentialSubject(); - credentialSubject.keySet().forEach(VCProperty -> vcPropertiesFromWellKnown.put(VCProperty, credentialSubject.get(VCProperty).getDisplay().get(0).getName())); + credentialSubject.keySet().forEach(VCProperty -> { + Optional filteredResponse = credentialSubject.get(VCProperty).getDisplay().stream().filter(obj -> obj.getLocale().equals(locale)).findFirst(); + String filteredValue = filteredResponse.isPresent() ? filteredResponse.get().getName() : "" ; + vcPropertiesFromWellKnown.put(VCProperty, filteredValue); + }); List orderProperty = credentialsSupportedResponse.getOrder(); @@ -193,7 +200,7 @@ private static LinkedHashMap loadDisplayPropertiesFromWellknown( } - private Map getPdfResourceFromVcProperties(LinkedHashMap displayProperties, CredentialsSupportedResponse credentialsSupportedResponse, VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, String dataShareUrl, String credentialValidity) throws IOException, WriterException { + private Map getPdfResourceFromVcProperties(LinkedHashMap displayProperties, CredentialsSupportedResponse credentialsSupportedResponse, VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, String dataShareUrl, String credentialValidity, String locale) throws IOException, WriterException { Map data = new HashMap<>(); LinkedHashMap rowProperties = new LinkedHashMap<>(); String backgroundColor = credentialsSupportedResponse.getDisplay().get(0).getBackgroundColor(); @@ -211,7 +218,8 @@ private Map getPdfResourceFromVcProperties(LinkedHashMap) entry.getValue()).get(0) instanceof String) { value = ((List) entry.getValue()).stream().reduce((field1, field2) -> field1 + ", " + field2 ).get(); } else { - value = (String) ((Map) ((List) entry.getValue()).get(0)).get("value"); + Optional> valueMap = ((List>) entry.getValue()).stream().filter(obj -> obj.get("language").equals(locale)).findFirst(); + value = valueMap.isPresent() ? valueMap.get().get("value").toString() : "" ; } rowProperties.put(entry.getKey(), value); } else { @@ -234,9 +242,8 @@ private Map getPdfResourceFromVcProperties(LinkedHashMap data) throws IOException { - String credentialTemplate = utilities.getCredentialSupportedTemplateString(); - + private ByteArrayInputStream renderVCInCredentialTemplate(Map data, String issuerId, String credentialType) throws IOException { + String credentialTemplate = utilities.getCredentialSupportedTemplateString(issuerId, credentialType); Properties props = new Properties(); props.setProperty("resource.loader", "class"); props.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); diff --git a/src/main/java/io/mosip/mimoto/util/Utilities.java b/src/main/java/io/mosip/mimoto/util/Utilities.java index 17c2fa19c..622467651 100644 --- a/src/main/java/io/mosip/mimoto/util/Utilities.java +++ b/src/main/java/io/mosip/mimoto/util/Utilities.java @@ -182,8 +182,11 @@ public String getIssuersConfigJsonValue() { public String getTrustedVerifiersJsonValue() { return getJson(trustedVerifiersJsonString, trustedVerifiersPath); } - public String getCredentialSupportedTemplateString() { - return getJson(credentialTemplateHtmlString, credentialTemplatePath); + public String getCredentialSupportedTemplateString(String issuerId, String credentialType) { + if(activeProfile.equals("local")) { + return credentialTemplateHtmlString; + } + return getJson(configServerFileStorageURL, String.format("%s-%s-template.html", issuerId, credentialType)); } public static String[] handleExceptionWithErrorCode(Exception exception) { String errorMessage = exception.getMessage(); diff --git a/src/main/resources/templates/credential-template.html b/src/main/resources/templates/credential-template.html index 4632b91c3..d0f383380 100644 --- a/src/main/resources/templates/credential-template.html +++ b/src/main/resources/templates/credential-template.html @@ -2,7 +2,7 @@ - Identity Card + New Template Identity Card
diff --git a/src/test/java/io/mosip/mimoto/controller/CredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/CredentialsControllerTest.java index 948d2837b..bf0cd18cb 100644 --- a/src/test/java/io/mosip/mimoto/controller/CredentialsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/CredentialsControllerTest.java @@ -40,13 +40,13 @@ public class CredentialsControllerTest { @Test public void downloadPDFSuccessfully() throws Exception { - + String locale="test-local"; String issuer = "test-issuer"; String credential = "test-credential"; TokenResponseDTO tokenResponseDTO = TestUtilities.getTokenResponseDTO(); ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream("test-data".getBytes()); Mockito.when(credentialService.getTokenResponse(Mockito.anyMap(), Mockito.eq(issuer))).thenReturn(tokenResponseDTO); - Mockito.when(credentialService.downloadCredentialAsPDF(Mockito.eq(issuer), Mockito.eq(credential), Mockito.eq(tokenResponseDTO), Mockito.eq("3"))).thenReturn(byteArrayInputStream); + Mockito.when(credentialService.downloadCredentialAsPDF(Mockito.eq(issuer), Mockito.eq(credential), Mockito.eq(tokenResponseDTO), Mockito.eq("3"), Mockito.eq(locale))).thenReturn(byteArrayInputStream); mockMvc.perform(post("/credentials/download") .contentType(MediaType.APPLICATION_FORM_URLENCODED) @@ -93,12 +93,12 @@ public void throwExceptionWhenTokenIsNotFetched() throws Exception { @Test public void throwExceptionWhenPDFGenerationFailed() throws Exception { - + String locale="test-locale"; String issuer = "test-issuer"; String credential = "test-credential"; TokenResponseDTO tokenResponseDTO = TestUtilities.getTokenResponseDTO(); Mockito.when(credentialService.getTokenResponse(Mockito.anyMap(), Mockito.eq(issuer))).thenReturn(tokenResponseDTO); - Mockito.when(credentialService.downloadCredentialAsPDF(Mockito.eq(issuer), Mockito.eq(credential), Mockito.eq(tokenResponseDTO), Mockito.eq("3") )).thenThrow(ApiNotAccessibleException.class); + Mockito.when(credentialService.downloadCredentialAsPDF(Mockito.eq(issuer), Mockito.eq(credential), Mockito.eq(tokenResponseDTO), Mockito.eq("3"), Mockito.eq(locale))).thenThrow(ApiNotAccessibleException.class); mockMvc.perform(post("/credentials/download") .contentType(MediaType.APPLICATION_FORM_URLENCODED) From 73b09cda65e6b056bb0384e870d567073ed060c5 Mon Sep 17 00:00:00 2001 From: Kamlesh Singh Bisht Date: Tue, 24 Dec 2024 15:23:55 +0530 Subject: [PATCH 299/860] [INJIWEB-1167]: Multi-lingual support for credential download as pdf added to develop, Addressed Comments --- .../mosip/mimoto/controller/CredentialsController.java | 1 - .../mimoto/service/impl/CredentialServiceImpl.java | 10 +++++----- src/main/java/io/mosip/mimoto/util/Utilities.java | 5 +++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/CredentialsController.java b/src/main/java/io/mosip/mimoto/controller/CredentialsController.java index 0a0638293..9249024a0 100644 --- a/src/main/java/io/mosip/mimoto/controller/CredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/CredentialsController.java @@ -58,7 +58,6 @@ public ResponseEntity downloadCredentialAsPDF(@RequestParam Map displayProperties = loadDisplayPropertiesFromWellknown(vcCredentialResponse, credentialsSupportedResponse, locale); Map data = getPdfResourceFromVcProperties(displayProperties, credentialsSupportedResponse, vcCredentialResponse, issuerDTO, dataShareUrl, credentialValidity, locale); - return renderVCInCredentialTemplate(data, issuerId, credentialType); + return renderVCInCredentialTemplate(data); } public Boolean verifyCredential(VCCredentialResponse vcCredentialResponse) throws VCVerificationException, JsonProcessingException { @@ -242,8 +242,8 @@ private Map getPdfResourceFromVcProperties(LinkedHashMap data, String issuerId, String credentialType) throws IOException { - String credentialTemplate = utilities.getCredentialSupportedTemplateString(issuerId, credentialType); + private ByteArrayInputStream renderVCInCredentialTemplate(Map data) throws IOException { + String credentialTemplate = utilities.getCredentialSupportedTemplateString(); Properties props = new Properties(); props.setProperty("resource.loader", "class"); props.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); diff --git a/src/main/java/io/mosip/mimoto/util/Utilities.java b/src/main/java/io/mosip/mimoto/util/Utilities.java index 622467651..0f9cec0ba 100644 --- a/src/main/java/io/mosip/mimoto/util/Utilities.java +++ b/src/main/java/io/mosip/mimoto/util/Utilities.java @@ -182,11 +182,12 @@ public String getIssuersConfigJsonValue() { public String getTrustedVerifiersJsonValue() { return getJson(trustedVerifiersJsonString, trustedVerifiersPath); } - public String getCredentialSupportedTemplateString(String issuerId, String credentialType) { + public String getCredentialSupportedTemplateString() { if(activeProfile.equals("local")) { return credentialTemplateHtmlString; } - return getJson(configServerFileStorageURL, String.format("%s-%s-template.html", issuerId, credentialType)); + return (credentialTemplateHtmlString != null && !credentialTemplateHtmlString.isEmpty()) ? + credentialTemplateHtmlString : getJson(configServerFileStorageURL,credentialTemplatePath ); } public static String[] handleExceptionWithErrorCode(Exception exception) { String errorMessage = exception.getMessage(); From f908841c2377e754cadfaef3394e57513d05075b Mon Sep 17 00:00:00 2001 From: VSIVAKALYAN <103260988+VSIVAKALYAN@users.noreply.github.com> Date: Tue, 24 Dec 2024 16:01:09 +0530 Subject: [PATCH 300/860] [MOSIP-38555] Removing apitestrig from Sonar analysis Signed-off-by: VSIVAKALYAN <103260988+VSIVAKALYAN@users.noreply.github.com> --- .github/workflows/push-trigger.yml | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/.github/workflows/push-trigger.yml b/.github/workflows/push-trigger.yml index 4bf6bed4c..be8f5101a 100644 --- a/.github/workflows/push-trigger.yml +++ b/.github/workflows/push-trigger.yml @@ -216,18 +216,3 @@ jobs: ACTOR_DOCKER_HUB: ${{ secrets.ACTOR_DOCKER_HUB }} RELEASE_DOCKER_HUB: ${{ secrets.RELEASE_DOCKER_HUB }} SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }} - -# sonar_analysis_apitest_mimoto: -# needs: build-maven-apitest-mimoto -# if: "${{ github.event_name != 'pull_request' }}" -# uses: mosip/kattu/.github/workflows/maven-sonar-analysis.yml@master-java21 -# with: -# SERVICE_LOCATION: ./api-test -# secrets: -# SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} -# ORG_KEY: ${{ secrets.ORG_KEY }} -# OSSRH_USER: ${{ secrets.OSSRH_USER }} -# OSSRH_SECRET: ${{ secrets.OSSRH_SECRET }} -# OSSRH_TOKEN: ${{ secrets.OSSRH_TOKEN }} -# GPG_SECRET: ${{ secrets.GPG_SECRET }} -# SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }} From da6c56548dddc520cc727000c7bc1207dff6b8ea Mon Sep 17 00:00:00 2001 From: Kamlesh Singh Bisht Date: Tue, 24 Dec 2024 17:23:55 +0530 Subject: [PATCH 301/860] [INJIWEB-1167]: Fixed CredentialController Tests Signed-off-by: Kamlesh Singh Bisht --- .../mimoto/controller/CredentialsControllerTest.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/test/java/io/mosip/mimoto/controller/CredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/CredentialsControllerTest.java index bf0cd18cb..56fa2cede 100644 --- a/src/test/java/io/mosip/mimoto/controller/CredentialsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/CredentialsControllerTest.java @@ -57,7 +57,8 @@ public void downloadPDFSuccessfully() throws Exception { new BasicNameValuePair("code_verifier", "test-code_verifier"), new BasicNameValuePair("issuer", issuer), new BasicNameValuePair("vcStorageExpiryLimitInTimes", "3"), - new BasicNameValuePair("credential", credential) + new BasicNameValuePair("credential", credential), + new BasicNameValuePair("locale", locale) ))))) .andExpect(status().isOk()) .andExpect(content().contentType(MediaType.APPLICATION_PDF)) @@ -69,7 +70,7 @@ public void downloadPDFSuccessfully() throws Exception { @Test public void throwExceptionWhenTokenIsNotFetched() throws Exception { - + String locale="test-locale"; String issuer = "test-issuer"; String credential = "test-credential"; Mockito.when(credentialService.getTokenResponse(Mockito.anyMap(), Mockito.eq(issuer))).thenThrow(ApiNotAccessibleException.class); @@ -83,7 +84,8 @@ public void throwExceptionWhenTokenIsNotFetched() throws Exception { new BasicNameValuePair("code_verifier", "test-code_verifier"), new BasicNameValuePair("issuer", issuer), new BasicNameValuePair("vcStorageExpiryLimitInTimes", "3"), - new BasicNameValuePair("credential", credential) + new BasicNameValuePair("credential", credential), + new BasicNameValuePair("locale", locale) ))))) .andExpect(status().isBadRequest()) .andReturn() @@ -109,12 +111,12 @@ public void throwExceptionWhenPDFGenerationFailed() throws Exception { new BasicNameValuePair("code_verifier", "test-code_verifier"), new BasicNameValuePair("issuer", issuer), new BasicNameValuePair("vcStorageExpiryLimitInTimes", "3"), - new BasicNameValuePair("credential", credential) + new BasicNameValuePair("credential", credential), + new BasicNameValuePair("locale", locale) ))))) .andExpect(status().isBadRequest()) .andReturn() .getResponse() .getContentAsString(); } - } From de69cbbc11aa48759e7ae418154ca269daa26b92 Mon Sep 17 00:00:00 2001 From: Kamlesh Singh Bisht Date: Tue, 24 Dec 2024 17:28:27 +0530 Subject: [PATCH 302/860] [INJIWEB-1167]:Fixed Issures Raised in Comments Signed-off-by: Kamlesh Singh Bisht --- src/main/java/io/mosip/mimoto/dto/IssuerDTO.java | 8 ++++---- src/main/resources/templates/credential-template.html | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java index 822d2c2b4..aae0880f6 100644 --- a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java @@ -17,11 +17,11 @@ @Data public class IssuerDTO { @Expose -// @NotBlank + @NotBlank @Schema(description = "Unique Identifier of the Issuer") String issuer_id; @Expose -// @NotBlank + @NotBlank @Schema(description = "protocol of the download flow", allowableValues = {"OTP", "OpenId4VCI"}) String protocol; @Expose @@ -67,12 +67,12 @@ public class IssuerDTO { @Schema(description = "Toggler to Enable / Disable the Issuer", defaultValue = "false") String enabled; @Expose -// @NotBlank + @NotBlank @JsonInclude(NON_NULL) @Schema(description = "Unique Identifier of the Issuer") String credential_issuer; @Expose -// @NotBlank + @NotBlank @JsonInclude(NON_NULL) @Schema(description = "Credential Issuer Host") String credential_issuer_host; diff --git a/src/main/resources/templates/credential-template.html b/src/main/resources/templates/credential-template.html index d0f383380..4632b91c3 100644 --- a/src/main/resources/templates/credential-template.html +++ b/src/main/resources/templates/credential-template.html @@ -2,7 +2,7 @@ - New Template Identity Card + Identity Card
From f1bd2b6775cf4a81b2ba42423036ca52f045f7b8 Mon Sep 17 00:00:00 2001 From: Kamlesh Singh Bisht Date: Tue, 24 Dec 2024 17:37:35 +0530 Subject: [PATCH 303/860] [INJIWEB-1167]:Missing Log Readded Signed-off-by: Kamlesh Singh Bisht --- .../java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java index ba1d2e4f7..099699cfb 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java @@ -139,6 +139,7 @@ public ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String cred public VCCredentialResponse downloadCredential(String credentialEndpoint, VCCredentialRequest vcCredentialRequest, String accessToken) throws InvalidCredentialResourceException { VCCredentialResponse vcCredentialResponse = restApiClient.postApi(credentialEndpoint, MediaType.APPLICATION_JSON, vcCredentialRequest, VCCredentialResponse.class, accessToken); + log.debug("VC Credential Response is -> " + vcCredentialResponse); if (vcCredentialResponse == null) throw new RuntimeException("VC Credential Issue API not accessible"); return vcCredentialResponse; } From 733ce1b18a4b19f09add7f65fc401f8296100016 Mon Sep 17 00:00:00 2001 From: Alka Prasad Date: Fri, 3 Jan 2025 11:45:57 +0530 Subject: [PATCH 304/860] [INJIMOB-2468]: add temporary fix to have default value to credential validity for download api (#543) Signed-off-by: Alka Prasad --- .../java/io/mosip/mimoto/controller/CredentialsController.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/io/mosip/mimoto/controller/CredentialsController.java b/src/main/java/io/mosip/mimoto/controller/CredentialsController.java index dc800ce78..14e99d35b 100644 --- a/src/main/java/io/mosip/mimoto/controller/CredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/CredentialsController.java @@ -53,6 +53,9 @@ public class CredentialsController { public ResponseEntity downloadCredentialAsPDF(@RequestParam Map params ) { ResponseWrapper responseWrapper = new ResponseWrapper<>(); + //TODO: remove this default value after the apitest is updated + params.putIfAbsent("vcStorageExpiryLimitInTimes", "-1"); + try { String issuerId = params.get("issuer"); String credentialType = params.get("credential"); From 554a73aa76fdb9429f2a20e7715499504c9fd1b3 Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Fri, 3 Jan 2025 14:01:21 +0530 Subject: [PATCH 305/860] MOSIP-35404 Signed-off-by: Nandhukumar --- .../mimoto/testscripts/AddIdentity.java | 1 + .../mimoto/testscripts/DeleteWithParam.java | 10 ++++--- .../mimoto/testscripts/GetWithParam.java | 24 +++++++++-------- .../PostWithAutogenIdWithOtpGenerate.java | 26 ++++++++++--------- .../PostWithBodyWithOtpGenerate.java | 23 +++++++++------- .../PostWithFormDataBodyForPdfDownload.java | 5 +++- .../apirig/mimoto/testscripts/SimplePost.java | 1 + .../testscripts/SimplePostForAutoGenId.java | 3 ++- .../apirig/mimoto/utils/MimotoUtil.java | 5 ++++ 9 files changed, 60 insertions(+), 38 deletions(-) diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/AddIdentity.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/AddIdentity.java index 3053637d7..5a5b28383 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/AddIdentity.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/AddIdentity.java @@ -124,6 +124,7 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad inputJson = replaceKeywordWithValue(inputJson, "$PHONENUMBERFORIDENTITY$", phoneNumber); inputJson = replaceKeywordWithValue(inputJson, "$EMAILVALUE$", email); } + inputJson = MimotoUtil.inputstringKeyWordHandeler(inputJson, testCaseName); response = postWithBodyAndCookie(ApplnURI + testCaseDTO.getEndPoint(), inputJson, COOKIENAME, testCaseDTO.getRole(), testCaseDTO.getTestCaseName()); diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/DeleteWithParam.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/DeleteWithParam.java index a1c40dfaf..bdec99ce5 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/DeleteWithParam.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/DeleteWithParam.java @@ -107,6 +107,10 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad } else { + + String inputJson = getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()); + + inputJson = MimotoUtil.inputstringKeyWordHandeler(inputJson, testCaseName); if (testCaseName.contains("ESignet_")) { if (MimotoConfigManager.isInServiceNotDeployedList(GlobalConstants.ESIGNET)) { @@ -127,13 +131,11 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad testCaseDTO.setEndPoint(testCaseDTO.getEndPoint().replace("$SUNBIRDBASEURL$", "")); } - response = deleteWithPathParamAndCookie(tempUrl + testCaseDTO.getEndPoint(), - getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()), COOKIENAME, + response = deleteWithPathParamAndCookie(tempUrl + testCaseDTO.getEndPoint(), inputJson, COOKIENAME, testCaseDTO.getRole(), testCaseDTO.getTestCaseName()); } else { - response = deleteWithPathParamAndCookie(ApplnURI + testCaseDTO.getEndPoint(), - getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()), COOKIENAME, + response = deleteWithPathParamAndCookie(ApplnURI + testCaseDTO.getEndPoint(), inputJson, COOKIENAME, testCaseDTO.getRole(), testCaseDTO.getTestCaseName()); } Map> ouputValid = OutputValidationUtil.doJsonOutputValidation( diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/GetWithParam.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/GetWithParam.java index a6e3d862f..440a0124c 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/GetWithParam.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/GetWithParam.java @@ -132,6 +132,9 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad } else { + String inputJson = getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()); + + inputJson = MimotoUtil.inputstringKeyWordHandeler(inputJson, testCaseName); if (testCaseName.contains("ESignet_")) { if (MimotoConfigManager.isInServiceNotDeployedList(GlobalConstants.ESIGNET)) { @@ -148,19 +151,18 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad if (MimotoConfigManager.getSunBirdBaseURL() != null && !MimotoConfigManager.getSunBirdBaseURL().isBlank()) tempUrl = MimotoConfigManager.getSunBirdBaseURL(); //Once sunbird registry is pointing to specific env, remove the above line and uncomment below line - //tempUrl = ApplnURI.replace(GlobalConstants.API_INTERNAL, MimotoConfigManager.getSunBirdBaseURL()); - testCaseDTO.setEndPoint(testCaseDTO.getEndPoint().replace("$SUNBIRDBASEURL$", "")); - } + // tempUrl = ApplnURI.replace(GlobalConstants.API_INTERNAL, + // MimotoConfigManager.getSunBirdBaseURL()); + testCaseDTO.setEndPoint(testCaseDTO.getEndPoint().replace("$SUNBIRDBASEURL$", "")); + } - response = getWithPathParamAndCookie(tempUrl + testCaseDTO.getEndPoint(), - getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()), auditLogCheck, - COOKIENAME, testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), sendEsignetToken); + response = getWithPathParamAndCookie(tempUrl + testCaseDTO.getEndPoint(), inputJson, auditLogCheck, + COOKIENAME, testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), sendEsignetToken); - } else { - response = getWithPathParamAndCookie(ApplnURI + testCaseDTO.getEndPoint(), - getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()), auditLogCheck, - COOKIENAME, testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), sendEsignetToken); - } + } else { + response = getWithPathParamAndCookie(ApplnURI + testCaseDTO.getEndPoint(), inputJson, auditLogCheck, + COOKIENAME, testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), sendEsignetToken); + } Map> ouputValid = null; if (testCaseName.contains("_StatusCode")) { diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java index de901108c..0a8180ebf 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java @@ -113,22 +113,23 @@ public void test(TestCaseDTO testCaseDTO) otpReqJson.remove("sendOtpReqTemplate"); sendOtpEndPoint = otpReqJson.getString("sendOtpEndPoint"); otpReqJson.remove("sendOtpEndPoint"); + + String input = getJsonFromTemplate(otpReqJson.toString(), sendOtpReqTemplate); Response otpResponse = null; int maxLoopCount = Integer.parseInt(properties.getProperty("uinGenMaxLoopCount")); int currLoopCount = 0; while (currLoopCount < maxLoopCount) { + input = MimotoUtil.inputstringKeyWordHandeler(input, testCaseName); if (testCaseName.contains(GlobalConstants.ESIGNET_)) { if (MimotoConfigManager.isInServiceNotDeployedList(GlobalConstants.ESIGNET)) { throw new SkipException("esignet is not deployed hence skipping the testcase"); } String tempUrl = MimotoConfigManager.getEsignetBaseUrl(); - otpResponse = postRequestWithCookieAuthHeaderAndXsrfToken(tempUrl + sendOtpEndPoint, - getJsonFromTemplate(otpReqJson.toString(), sendOtpReqTemplate), COOKIENAME, + otpResponse = postRequestWithCookieAuthHeaderAndXsrfToken(tempUrl + sendOtpEndPoint, input, COOKIENAME, testCaseDTO.getTestCaseName()); } else { - otpResponse = postWithBodyAndCookie(ApplnURI + sendOtpEndPoint, - getJsonFromTemplate(otpReqJson.toString(), sendOtpReqTemplate), COOKIENAME, + otpResponse = postWithBodyAndCookie(ApplnURI + sendOtpEndPoint, input, COOKIENAME, GlobalConstants.RESIDENT, testCaseDTO.getTestCaseName()); } @@ -180,22 +181,23 @@ public void test(TestCaseDTO testCaseDTO) } else { throw new AdminTestException("Invalid otp response"); } - + + String inputJson = getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()); + inputJson = MimotoUtil.inputstringKeyWordHandeler(inputJson, testCaseName); + if (testCaseName.contains(GlobalConstants.ESIGNET_)) { if (MimotoConfigManager.isInServiceNotDeployedList(GlobalConstants.ESIGNET)) { throw new SkipException("esignet is not deployed hence skipping the testcase"); } String tempUrl = MimotoConfigManager.getEsignetBaseUrl(); - String inputJson = getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()); - inputJson = inputJsonKeyWordHandeler(inputJson, testCaseName); +// String inputJson = getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()); +// inputJson = inputJsonKeyWordHandeler(inputJson, testCaseName); inputJson = MimotoUtil.getOTPFromSMTP(inputJson, testCaseDTO); response = postRequestWithCookieAuthHeaderAndXsrfTokenForAutoGenId(tempUrl + testCaseDTO.getEndPoint(), - inputJson, COOKIENAME, - testCaseDTO.getTestCaseName(), idKeyName); + inputJson, COOKIENAME, testCaseDTO.getTestCaseName(), idKeyName); } else { - response = postWithBodyAndCookieForAutoGeneratedId(ApplnURI + testCaseDTO.getEndPoint(), - getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()), auditLogCheck, - COOKIENAME, testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), idKeyName); + response = postWithBodyAndCookieForAutoGeneratedId(ApplnURI + testCaseDTO.getEndPoint(), inputJson, + auditLogCheck, COOKIENAME, testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), idKeyName); } Map> ouputValid = OutputValidationUtil.doJsonOutputValidation( diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithBodyWithOtpGenerate.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithBodyWithOtpGenerate.java index 26f03807d..48178be33 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithBodyWithOtpGenerate.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithBodyWithOtpGenerate.java @@ -110,10 +110,12 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad sendOtpEndPoint = otpReqJson.getString("sendOtpEndPoint"); otpReqJson.remove("sendOtpEndPoint"); Response otpResponse = null; + + String inputReqJson = getJsonFromTemplate(otpReqJson.toString(), sendOtpReqTemplate); + inputReqJson = MimotoUtil.inputstringKeyWordHandeler(inputReqJson, testCaseName); - otpResponse = postWithBodyAndCookie(ApplnURI + sendOtpEndPoint, - getJsonFromTemplate(otpReqJson.toString(), sendOtpReqTemplate), COOKIENAME, GlobalConstants.RESIDENT, - testCaseDTO.getTestCaseName()); + otpResponse = postWithBodyAndCookie(ApplnURI + sendOtpEndPoint, inputReqJson, COOKIENAME, + GlobalConstants.RESIDENT, testCaseDTO.getTestCaseName()); JSONObject res = new JSONObject(testCaseDTO.getOutput()); String sendOtpResp = null, sendOtpResTemplate = null; @@ -147,12 +149,15 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad Thread.currentThread().interrupt(); } } - - response = postRequestWithCookieAndHeader(ApplnURI + testCaseDTO.getEndPoint(), - getJsonFromTemplate(req.toString(), testCaseDTO.getInputTemplate()), COOKIENAME, testCaseDTO.getRole(), - testCaseDTO.getTestCaseName(), sendEsignetToken); - Map> ouputValid = OutputValidationUtil.doJsonOutputValidation( - response.asString(), getJsonFromTemplate(res.toString(), testCaseDTO.getOutputTemplate()), testCaseDTO, + + String inputJson = getJsonFromTemplate(req.toString(), testCaseDTO.getInputTemplate()); + inputJson = MimotoUtil.inputstringKeyWordHandeler(inputJson, testCaseName); + + response = postRequestWithCookieAndHeader(ApplnURI + testCaseDTO.getEndPoint(), inputJson, COOKIENAME, + testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), sendEsignetToken); + Map> ouputValid = OutputValidationUtil + .doJsonOutputValidation(response.asString(), getJsonFromTemplate(res.toString(), + testCaseDTO.getOutputTemplate()), testCaseDTO, response.getStatusCode()); Reporter.log(ReportUtil.getOutputValidationReport(ouputValid)); diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithFormDataBodyForPdfDownload.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithFormDataBodyForPdfDownload.java index 400bf68bb..337c11b1e 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithFormDataBodyForPdfDownload.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithFormDataBodyForPdfDownload.java @@ -94,7 +94,10 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad } } - pdf = postWithFormDataBodyForPdf(ApplnURI + testCaseDTO.getEndPoint(), getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()), COOKIENAME, testCaseDTO.getRole(), testCaseDTO.getTestCaseName()); + String inputJson = getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()); + inputJson = MimotoUtil.inputstringKeyWordHandeler(inputJson, testCaseName); + + pdf = postWithFormDataBodyForPdf(ApplnURI + testCaseDTO.getEndPoint(), inputJson, COOKIENAME, testCaseDTO.getRole(), testCaseDTO.getTestCaseName()); PdfReader pdfReader = null; ByteArrayInputStream bIS = null; diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePost.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePost.java index 24b2cf039..bbb2f37d1 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePost.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePost.java @@ -100,6 +100,7 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad } String inputJson = getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()); + inputJson = MimotoUtil.inputstringKeyWordHandeler(inputJson, testCaseName); if (testCaseDTO.getTemplateFields() != null && templateFields.length > 0) { ArrayList inputtestCases = AdminTestUtil.getInputTestCase(testCaseDTO); diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java index 6d32a31dd..4373cda94 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java @@ -104,7 +104,8 @@ public void test(TestCaseDTO testCaseDTO) String[] templateFields = testCaseDTO.getTemplateFields(); String inputJson = ""; - inputJson = getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()); + inputJson = getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()); + inputJson = MimotoUtil.inputstringKeyWordHandeler(inputJson, testCaseName); String outputJson = getJsonFromTemplate(testCaseDTO.getOutput(), testCaseDTO.getOutputTemplate()); diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java index 1d28f173e..56134c0e7 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java @@ -140,6 +140,11 @@ public static String getClientIdSection(String baseURL) { } public static String inputstringKeyWordHandeler(String jsonString, String testCaseName) { + if (jsonString.contains("$ID:")) { + String autoGenIdFileName = mimotoAutoGeneratedIdPropFileName; + jsonString = replaceIdWithAutogeneratedId(jsonString, "$ID:", autoGenIdFileName); + } + if (jsonString.contains(GlobalConstants.TIMESTAMP)) { jsonString = replaceKeywordValue(jsonString, GlobalConstants.TIMESTAMP, generateCurrentUTCTimeStamp()); } From 0b3ab2d6fee3b2367615477c87e04862969b35ac Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Mon, 6 Jan 2025 16:01:56 +0530 Subject: [PATCH 306/860] MOSIP-35404 Signed-off-by: Nandhukumar --- api-test/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api-test/pom.xml b/api-test/pom.xml index 75004194c..67f9eaefd 100644 --- a/api-test/pom.xml +++ b/api-test/pom.xml @@ -54,7 +54,7 @@ - io.mosip.testrig.apirig.apitest.commons + io.mosip.testrig.apitest.commons apitest-commons 1.2.2-cleanup-SNAPSHOT From f180d95c3208fab2be5cea882417243cfc7ad4e8 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Wed, 8 Jan 2025 09:28:20 +0530 Subject: [PATCH 307/860] [INJIWEB-1349] Fixing config value for authorize endpoint in mimoto Signed-off-by: Gurpreet41082 --- docker-compose/config/mimoto-default.properties | 2 +- docker-compose/config/mimoto-trusted-verifiers.json | 2 +- src/main/resources/application-local.properties | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docker-compose/config/mimoto-default.properties b/docker-compose/config/mimoto-default.properties index 5fff4f959..399b5cf98 100644 --- a/docker-compose/config/mimoto-default.properties +++ b/docker-compose/config/mimoto-default.properties @@ -276,7 +276,7 @@ mosip.inji.qr.code.height=650 mosip.inji.qr.code.width=650 #OVP Config -mosip.inji.ovp.qrdata.pattern=INJI_OVP://https://injiweb.collab.mosip.net/authorize?response_type=vp_token&resource=%s&presentation_definition=%s +mosip.inji.ovp.qrdata.pattern=INJI_OVP://http://localhost:${server.port}/authorize?response_type=vp_token&resource=%s&presentation_definition=%s mosip.inji.ovp.redirect.url.pattern=%s#vp_token=%s&presentation_submission=%s mosip.inji.ovp.error.redirect.url.pattern=%s?error=%s&error_description=%s diff --git a/docker-compose/config/mimoto-trusted-verifiers.json b/docker-compose/config/mimoto-trusted-verifiers.json index 0ae0f141a..15694ddf1 100644 --- a/docker-compose/config/mimoto-trusted-verifiers.json +++ b/docker-compose/config/mimoto-trusted-verifiers.json @@ -2,7 +2,7 @@ "verifiers": [ { "client_id": "https://injiverify.collab.mosip.net", - "redirect_uri": [ + "redirect_uris": [ "https://injiverify.collab.mosip.net/redirect" ] } diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index f4a29350e..d62df109f 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -220,7 +220,7 @@ mosip.inji.qr.code.height=650 mosip.inji.qr.code.width=650 #OVP Config -mosip.inji.ovp.qrdata.pattern=INJI_OVP://${mosip.inji.web.url}/authorize?response_type=vp_token&resource=%s&presentation_definition=%s +mosip.inji.ovp.qrdata.pattern=INJI_OVP://http://localhost:${server.port}/authorize?response_type=vp_token&resource=%s&presentation_definition=%s mosip.inji.ovp.redirect.url.pattern=%s#vp_token=%s&presentation_submission=%s mosip.inji.ovp.error.redirect.url.pattern=%s?error=%s&error_description=%s From 816083682b3cca8e20c55482f2461a3ef4239262 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Wed, 8 Jan 2025 10:21:28 +0530 Subject: [PATCH 308/860] [INJIWEB-1349] Fixed urls to point to mimoto Signed-off-by: Gurpreet41082 --- docker-compose/config/mimoto-default.properties | 2 +- src/main/resources/application-local.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose/config/mimoto-default.properties b/docker-compose/config/mimoto-default.properties index 399b5cf98..220757efa 100644 --- a/docker-compose/config/mimoto-default.properties +++ b/docker-compose/config/mimoto-default.properties @@ -276,7 +276,7 @@ mosip.inji.qr.code.height=650 mosip.inji.qr.code.width=650 #OVP Config -mosip.inji.ovp.qrdata.pattern=INJI_OVP://http://localhost:${server.port}/authorize?response_type=vp_token&resource=%s&presentation_definition=%s +mosip.inji.ovp.qrdata.pattern=INJI_OVP://http://localhost:${server.port}/v1/mimoto/authorize?response_type=vp_token&resource=%s&presentation_definition=%s mosip.inji.ovp.redirect.url.pattern=%s#vp_token=%s&presentation_submission=%s mosip.inji.ovp.error.redirect.url.pattern=%s?error=%s&error_description=%s diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index d62df109f..62cb5dff7 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -220,7 +220,7 @@ mosip.inji.qr.code.height=650 mosip.inji.qr.code.width=650 #OVP Config -mosip.inji.ovp.qrdata.pattern=INJI_OVP://http://localhost:${server.port}/authorize?response_type=vp_token&resource=%s&presentation_definition=%s +mosip.inji.ovp.qrdata.pattern=INJI_OVP://http://localhost:${server.port}/v1/mimoto/authorize?response_type=vp_token&resource=%s&presentation_definition=%s mosip.inji.ovp.redirect.url.pattern=%s#vp_token=%s&presentation_submission=%s mosip.inji.ovp.error.redirect.url.pattern=%s?error=%s&error_description=%s From 67b59a95f64ecc772d73ee0d83b15e7779cb487b Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Wed, 8 Jan 2025 11:26:48 +0530 Subject: [PATCH 309/860] [INJIWEB-1349] Added verifier in the postman collection and fixed printstacktrace sonar warning Signed-off-by: Gurpreet41082 --- .../MIMOTO.postman_collection.json | 26 +++++++++++++++++-- .../java/io/mosip/mimoto/util/Utilities.java | 2 +- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/docs/postman-collections/MIMOTO.postman_collection.json b/docs/postman-collections/MIMOTO.postman_collection.json index 5f3af5579..4ca4845c5 100644 --- a/docs/postman-collections/MIMOTO.postman_collection.json +++ b/docs/postman-collections/MIMOTO.postman_collection.json @@ -15,7 +15,7 @@ "method": "GET", "header": [], "url": { - "raw": "{{HOST}}/issuers", + "raw": "{{HOST}}/issuers/", "host": [ "{{HOST}}" ], @@ -386,6 +386,28 @@ } ] }, + { + "name": "Verifiers", + "item": [ + { + "name": "Get Verifiers List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{HOST}}/verifiers", + "host": [ + "{{HOST}}" + ], + "path": [ + "verifiers" + ] + } + }, + "response": [] + } + ] + }, { "name": "All properties", "request": { @@ -432,4 +454,4 @@ "response": [] } ] -} +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/util/Utilities.java b/src/main/java/io/mosip/mimoto/util/Utilities.java index 17c2fa19c..19864841b 100644 --- a/src/main/java/io/mosip/mimoto/util/Utilities.java +++ b/src/main/java/io/mosip/mimoto/util/Utilities.java @@ -107,7 +107,7 @@ public static String encodeToString(BufferedImage image, String type) { imageString = encoder.encodeToString(imageBytes); bos.close(); } catch (Exception e) { - e.printStackTrace(); + log.error(ExceptionUtils.getStackTrace(e)); } return imageString; } From ebffb5cfaeb626c64b8a0947313e258c22c5cdd5 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Wed, 8 Jan 2025 13:09:55 +0530 Subject: [PATCH 310/860] [INJIWEB-1349] Fixed review comments Signed-off-by: Gurpreet41082 --- docker-compose/config/mimoto-default.properties | 4 ++-- docs/postman-collections/MIMOTO.postman_collection.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docker-compose/config/mimoto-default.properties b/docker-compose/config/mimoto-default.properties index 220757efa..c1056ff95 100644 --- a/docker-compose/config/mimoto-default.properties +++ b/docker-compose/config/mimoto-default.properties @@ -269,8 +269,8 @@ mosip.oidc.p12.path=certs/ mosip.openid.verifiers=mimoto-trusted-verifiers.json #Inji Web Config -mosip.inji.web.url=https://injiweb.collab.mosip.net -mosip.inji.web.redirect.url=https://injiweb.collab.mosip.net/authorize +mosip.inji.web.url=http://localhost:3004 +mosip.inji.web.redirect.url=${mosip.inji.web.url}/authorize mosip.inji.qr.data.size.limit=10000 mosip.inji.qr.code.height=650 mosip.inji.qr.code.width=650 diff --git a/docs/postman-collections/MIMOTO.postman_collection.json b/docs/postman-collections/MIMOTO.postman_collection.json index 4ca4845c5..9956f870e 100644 --- a/docs/postman-collections/MIMOTO.postman_collection.json +++ b/docs/postman-collections/MIMOTO.postman_collection.json @@ -15,7 +15,7 @@ "method": "GET", "header": [], "url": { - "raw": "{{HOST}}/issuers/", + "raw": "{{HOST}}/issuers", "host": [ "{{HOST}}" ], From 8a81b7eedb506bac7e4eb1db4a10b4955a802366 Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Wed, 8 Jan 2025 13:26:04 +0530 Subject: [PATCH 311/860] MOSIP-35404 Signed-off-by: Nandhukumar --- api-test/pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/api-test/pom.xml b/api-test/pom.xml index 67f9eaefd..f560509e0 100644 --- a/api-test/pom.xml +++ b/api-test/pom.xml @@ -8,7 +8,7 @@ apitest-mimoto Parent project of apitest-mimoto https://github.com/mosip/mimoto - 0.15.0-cleanup-SNAPSHOT + 0.15.0-SNAPSHOT @@ -49,14 +49,14 @@ 2.2.1 3.0.1 - apitest-mimoto-0.15.0-cleanup-SNAPSHOT-jar-with-dependencies + apitest-mimoto-0.15.0-SNAPSHOT-jar-with-dependencies io.mosip.testrig.apitest.commons apitest-commons - 1.2.2-cleanup-SNAPSHOT + 1.3.1-SNAPSHOT From 49d93b7412cd305b38349bc4982e9b3cc61b7a93 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Wed, 8 Jan 2025 14:34:50 +0530 Subject: [PATCH 312/860] [INJIWEB-1349] Added keystore file Signed-off-by: Gurpreet41082 --- src/main/resources/keystore.p12 | Bin 0 -> 4380 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/resources/keystore.p12 diff --git a/src/main/resources/keystore.p12 b/src/main/resources/keystore.p12 new file mode 100644 index 0000000000000000000000000000000000000000..5d5fd9a2e908f3bbf387ff74fa019696beca1720 GIT binary patch literal 4380 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 Ju76A1e*wr&PZj_G literal 0 HcmV?d00001 From e5380ecf037c98ad2b2cf95947e6ac33589f13ce Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Wed, 8 Jan 2025 18:05:54 +0530 Subject: [PATCH 313/860] Injiweb 1349 mimoto config (#545) * [INJIWEB-1349] Fixing config value for authorize endpoint in mimoto Signed-off-by: Gurpreet41082 * [INJIWEB-1349] Fixed urls to point to mimoto Signed-off-by: Gurpreet41082 * [INJIWEB-1349] Added verifier in the postman collection and fixed printstacktrace sonar warning Signed-off-by: Gurpreet41082 * [INJIWEB-1349] Fixed review comments Signed-off-by: Gurpreet41082 * [INJIWEB-1349] Added keystore file Signed-off-by: Gurpreet41082 --------- Signed-off-by: Gurpreet41082 --- .../config/mimoto-default.properties | 6 ++--- .../config/mimoto-trusted-verifiers.json | 2 +- .../MIMOTO.postman_collection.json | 24 +++++++++++++++++- .../java/io/mosip/mimoto/util/Utilities.java | 2 +- .../resources/application-local.properties | 2 +- src/main/resources/keystore.p12 | Bin 0 -> 4380 bytes 6 files changed, 29 insertions(+), 7 deletions(-) create mode 100644 src/main/resources/keystore.p12 diff --git a/docker-compose/config/mimoto-default.properties b/docker-compose/config/mimoto-default.properties index 5fff4f959..c1056ff95 100644 --- a/docker-compose/config/mimoto-default.properties +++ b/docker-compose/config/mimoto-default.properties @@ -269,14 +269,14 @@ mosip.oidc.p12.path=certs/ mosip.openid.verifiers=mimoto-trusted-verifiers.json #Inji Web Config -mosip.inji.web.url=https://injiweb.collab.mosip.net -mosip.inji.web.redirect.url=https://injiweb.collab.mosip.net/authorize +mosip.inji.web.url=http://localhost:3004 +mosip.inji.web.redirect.url=${mosip.inji.web.url}/authorize mosip.inji.qr.data.size.limit=10000 mosip.inji.qr.code.height=650 mosip.inji.qr.code.width=650 #OVP Config -mosip.inji.ovp.qrdata.pattern=INJI_OVP://https://injiweb.collab.mosip.net/authorize?response_type=vp_token&resource=%s&presentation_definition=%s +mosip.inji.ovp.qrdata.pattern=INJI_OVP://http://localhost:${server.port}/v1/mimoto/authorize?response_type=vp_token&resource=%s&presentation_definition=%s mosip.inji.ovp.redirect.url.pattern=%s#vp_token=%s&presentation_submission=%s mosip.inji.ovp.error.redirect.url.pattern=%s?error=%s&error_description=%s diff --git a/docker-compose/config/mimoto-trusted-verifiers.json b/docker-compose/config/mimoto-trusted-verifiers.json index 0ae0f141a..15694ddf1 100644 --- a/docker-compose/config/mimoto-trusted-verifiers.json +++ b/docker-compose/config/mimoto-trusted-verifiers.json @@ -2,7 +2,7 @@ "verifiers": [ { "client_id": "https://injiverify.collab.mosip.net", - "redirect_uri": [ + "redirect_uris": [ "https://injiverify.collab.mosip.net/redirect" ] } diff --git a/docs/postman-collections/MIMOTO.postman_collection.json b/docs/postman-collections/MIMOTO.postman_collection.json index 5f3af5579..9956f870e 100644 --- a/docs/postman-collections/MIMOTO.postman_collection.json +++ b/docs/postman-collections/MIMOTO.postman_collection.json @@ -386,6 +386,28 @@ } ] }, + { + "name": "Verifiers", + "item": [ + { + "name": "Get Verifiers List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{HOST}}/verifiers", + "host": [ + "{{HOST}}" + ], + "path": [ + "verifiers" + ] + } + }, + "response": [] + } + ] + }, { "name": "All properties", "request": { @@ -432,4 +454,4 @@ "response": [] } ] -} +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/util/Utilities.java b/src/main/java/io/mosip/mimoto/util/Utilities.java index 17c2fa19c..19864841b 100644 --- a/src/main/java/io/mosip/mimoto/util/Utilities.java +++ b/src/main/java/io/mosip/mimoto/util/Utilities.java @@ -107,7 +107,7 @@ public static String encodeToString(BufferedImage image, String type) { imageString = encoder.encodeToString(imageBytes); bos.close(); } catch (Exception e) { - e.printStackTrace(); + log.error(ExceptionUtils.getStackTrace(e)); } return imageString; } diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index f4a29350e..62cb5dff7 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -220,7 +220,7 @@ mosip.inji.qr.code.height=650 mosip.inji.qr.code.width=650 #OVP Config -mosip.inji.ovp.qrdata.pattern=INJI_OVP://${mosip.inji.web.url}/authorize?response_type=vp_token&resource=%s&presentation_definition=%s +mosip.inji.ovp.qrdata.pattern=INJI_OVP://http://localhost:${server.port}/v1/mimoto/authorize?response_type=vp_token&resource=%s&presentation_definition=%s mosip.inji.ovp.redirect.url.pattern=%s#vp_token=%s&presentation_submission=%s mosip.inji.ovp.error.redirect.url.pattern=%s?error=%s&error_description=%s diff --git a/src/main/resources/keystore.p12 b/src/main/resources/keystore.p12 new file mode 100644 index 0000000000000000000000000000000000000000..5d5fd9a2e908f3bbf387ff74fa019696beca1720 GIT binary patch literal 4380 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 Ju76A1e*wr&PZj_G literal 0 HcmV?d00001 From d7e7f932b78dfec9f628a0d8ddeb968a6b7ca739 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Thu, 9 Jan 2025 09:25:12 +0530 Subject: [PATCH 314/860] [INJIWEB-1349] Updated readme to refer to redirect uris Signed-off-by: Gurpreet41082 --- docker-compose/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose/README.md b/docker-compose/README.md index f0dba6d52..a782d193f 100644 --- a/docker-compose/README.md +++ b/docker-compose/README.md @@ -13,7 +13,7 @@ This is the docker-compose setup to run mimoto which act as BFF for Inji mobile 1. Add Id providers as an issuer in mimoto-issuers-config.json -2. Add verifiers clientId and redirect Uri in mimoto-trusted-verifiers.json for Online Sharing +2. Add verifiers clientId and redirect Uris in mimoto-trusted-verifiers.json for Online Sharing 3. Start esignet services and update esignet host references in mimoto-default.properties and mimoto-issuers-config.json From 1a30db6084f9b6754a73d3bc0eeb1be10a8297a7 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Thu, 9 Jan 2025 13:14:23 +0530 Subject: [PATCH 315/860] [INJIWEB-1359] Enable origin 3004 of injiweb using cors filter in mimoto Signed-off-by: Gurpreet41082 --- .../config/mimoto-default.properties | 2 +- .../java/io/mosip/mimoto/config/Config.java | 20 ++++++++++++++++--- .../resources/application-local.properties | 4 ++++ 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/docker-compose/config/mimoto-default.properties b/docker-compose/config/mimoto-default.properties index c1056ff95..f0f5d6325 100644 --- a/docker-compose/config/mimoto-default.properties +++ b/docker-compose/config/mimoto-default.properties @@ -29,7 +29,7 @@ mosip.inji.warningDomainName=${mosip.api.public.url} #timeout for vc download api via openid4vci flow in milliseconds mosip.inji.openId4VCIDownloadVCTimeout=30000 # inji documentation url -mosip.inji.aboutInjiUrl=https://docs.mosip.io/inji/inji-mobile-wallet/overview +mosip.inji.aboutInjiUrl=https://docs.inji.io/inji-wallet/inji-mobile # minimum storage space required for making audit entry in MB mosip.inji.minStorageRequiredForAuditEntry=2 # minimum storage space required for downloading / receiving vc in MB diff --git a/src/main/java/io/mosip/mimoto/config/Config.java b/src/main/java/io/mosip/mimoto/config/Config.java index 9b83c1832..cb69a53ff 100644 --- a/src/main/java/io/mosip/mimoto/config/Config.java +++ b/src/main/java/io/mosip/mimoto/config/Config.java @@ -1,7 +1,5 @@ package io.mosip.mimoto.config; -import io.mosip.kernel.auth.defaultadapter.filter.AuthFilter; -import io.mosip.kernel.auth.defaultadapter.filter.CorsFilter; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; @@ -14,6 +12,9 @@ import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; import org.springframework.security.config.annotation.web.configurers.HeadersConfigurer; import org.springframework.security.web.SecurityFilterChain; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.CorsConfigurationSource; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import java.util.HashMap; import java.util.Map; @@ -49,7 +50,8 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { } if (isCORSEnable) { - http.addFilterBefore(new CorsFilter(origins), AuthFilter.class); + http.cors(corsCustomizer -> corsCustomizer + .configurationSource(corsConfigurationSource())); } http.headers(headersEntry -> { headersEntry.cacheControl(Customizer.withDefaults()); @@ -60,4 +62,16 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { } + // Define CORS configuration + @Bean + public CorsConfigurationSource corsConfigurationSource() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + CorsConfiguration corsConfiguration = new CorsConfiguration(); + corsConfiguration.addAllowedOrigin(origins); // Allow all origins + corsConfiguration.addAllowedHeader("*"); // Allow all headers + corsConfiguration.addAllowedMethod("*"); // Allow all HTTP methods + source.registerCorsConfiguration("/**", corsConfiguration); + return source; + } + } diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 62cb5dff7..6efd63de3 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -230,4 +230,8 @@ mosip.data.share.create.url=${mosip.data.share.url}/v1/datashare/create/static-p mosip.data.share.create.retry.count=3 mosip.data.share.get.url.pattern=http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/* +mosip.security.cors-enable=true +#comma separated allowed origins +mosip.security.origins=http://localhost:3004 + #OpenId4VP related Configuration END From 543439e2b1f4b2379b3cfc97584860e62513657b Mon Sep 17 00:00:00 2001 From: abhip2565 <74866247+abhip2565@users.noreply.github.com> Date: Fri, 10 Jan 2025 14:14:07 +0530 Subject: [PATCH 316/860] [INJIMOB-1349] add data-share and minio service as part of docker compose (#550) Signed-off-by: Abhishek Paul --- .../config/data-share-inji-default.properties | 64 ++++++++++ .../config/data-share-standalone.properties | 15 +++ .../config/mimoto-default.properties | 8 +- .../config/mimoto-issuers-config.json | 118 ++---------------- docker-compose/docker-compose.yml | 27 ++++ 5 files changed, 119 insertions(+), 113 deletions(-) create mode 100644 docker-compose/config/data-share-inji-default.properties create mode 100644 docker-compose/config/data-share-standalone.properties diff --git a/docker-compose/config/data-share-inji-default.properties b/docker-compose/config/data-share-inji-default.properties new file mode 100644 index 000000000..ac669265a --- /dev/null +++ b/docker-compose/config/data-share-inji-default.properties @@ -0,0 +1,64 @@ +# Follow properites have their values assigned via 'overrides' environment variables of config server docker. +# DO NOT define these in any of the property files. They must be passed as env variables. Refer to config-server +# helm chart: +# keycloak.external.host +# keycloak.external.url +# keycloak.internal.host +# keycloak.internal.url +# mosip.datsha.client.secret +# s3.accesskey +# s3.region +# s3.secretkey + +mosip.data.share.service.id=mosip.data.share +mosip.data.share.service.version=1.0 + +CRYPTOMANAGER_ENCRYPT=${mosip.kernel.keymanager.url}/v1/keymanager/encrypt +KEYMANAGER_JWTSIGN=${mosip.kernel.keymanager.url}/v1/keymanager/jwtSign +PARTNER_POLICY=${mosip.pms.policymanager.url}/v1/policymanager/policies/{policyId}/partner/{partnerId} +KEYBASEDTOKENAPI=${mosip.kernel.authmanager.url}/v1/authmanager/authenticate/clientidsecretkey + + +data.share.application.id=PARTNER +mosip.data.share.datetime.pattern=yyyy-MM-dd'T'HH:mm:ss.SSS'Z' +!-- if value is true then please set servlet path to / --! +mosip.data.share.urlshortner=false +data.share.token.request.appid=datsha +data.share.token.request.clientId=mosip-datsha-client +data.share.token.request.secretKey=${mosip.datsha.client.secret} +data.share.token.request.password= +data.share.token.request.username= +data.share.token.request.version=1.0 +data.share.token.request.id=io.mosip.datashare +data.share.token.request.issuerUrl=${keycloak.internal.url}/auth/realms/mosip +spring.servlet.multipart.max-file-size=14MB +mosip.data.share.protocol=http +mosip.data.share.includeCertificateHash=false +mosip.data.share.includeCertificate=false +mosip.data.share.includePayload=false +mosip.data.share.digest.algorithm=SHA256 +mosip.data.share.prependThumbprint=false +mosip.role.durian.postcreatepolicyidsubscriberid=CREATE_SHARE +auth.server.admin.allowed.audience=mosip-creser-client,mpartner-default-auth,mosip-regproc-client,mosip-reg-client,mosip-syncdata-client,mpartner-default-print,mosip-resident-client,opencrvs-partner,mosip-pms-client,mpartner-default-digitalcard,mosip-admin-client,mosip-abis-client,mpartner-default-mobile + +mosip.auth.filter_disable=false + +# Object store +object.store.s3.accesskey=minioadmin +object.store.s3.secretkey=minioadmin +object.store.s3.url=http://minio-service:9000 +object.store.s3.region=us-east-1 +object.store.s3.readlimit=10000000 + +#specific to Compliance Toolkit, to ABIS DataShare testcases +auth.handle.ctk.flow=true +mosip.api.internal.toolkit.url=https://${mosip.api.internal.host}/v1/toolkit +mosip.compliance.toolkit.saveDataShareToken.url=${mosip.api.internal.toolkit.url}/saveDataShareToken +mosip.compliance.toolkit.invalidateDataShareToken.url=${mosip.api.internal.toolkit.url}/invalidateDataShareToken +mosip.compliance.toolkit.invalidateDataShareToken.testCaseId=ABIS3031 +logging.level.org.springframework.web: DEBUG +#cache schedular +mosip.data.share.policy-cache.expiry-time-millisec=7200000 + +mosip.auth.adapter.impl.basepackage=io.mosip.kernel.auth.defaultadapter +mosip.pms.policymanager.url=http://pms-policy.pms diff --git a/docker-compose/config/data-share-standalone.properties b/docker-compose/config/data-share-standalone.properties new file mode 100644 index 000000000..521347748 --- /dev/null +++ b/docker-compose/config/data-share-standalone.properties @@ -0,0 +1,15 @@ +# Enables the data-share application in standalone mode. +mosip.data.share.standalone.mode.enabled=true +# Defines the policy json which will be taken into consideration if +# "mosip.data.share.standalone.mode.enabled" is set as true. +# If we are using "encryptionType" as "Partner based" then subscriberId must be a valid subscriberId +# i.e. should exist in system. +mosip.data.share.static-policy.policy-json={"typeOfShare":"","transactionsAllowed":"250","shareDomain":"datashare-service:8097","encryptionType":"NONE","source":"","validForInMinutes":"30"} +# Defines the policyId which will be taken into consideration if " +# mosip.data.share.standalone.mode.enabled" is set as true. +mosip.data.share.static-policy.policy-id=static-policyid +# Defines the subscriberId which will be taken into consideration if +# "mosip.data.share.standalone.mode.enabled" is set as true. +mosip.data.share.static-policy.subscriber-id=static-subscriberid +# Disables JWT signature computation while storing object in object store. +mosip.data.share.signature.disabled=true \ No newline at end of file diff --git a/docker-compose/config/mimoto-default.properties b/docker-compose/config/mimoto-default.properties index f0f5d6325..375e9f23d 100644 --- a/docker-compose/config/mimoto-default.properties +++ b/docker-compose/config/mimoto-default.properties @@ -259,7 +259,7 @@ mosip.openid.issuer.credentialSupported=/wellKnownIssuer/Insurance.json mosip.openid.htmlTemplate=credential-template.html mosip.oidc.client.assertion.type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer mosip.oidc.p12.filename=oidckeystore.p12 -mosip.oidc.p12.password=5YBx6QT2wbY8Ls6w +mosip.oidc.p12.password=${oidc_p12_password} mosip.oidc.p12.path=certs/ @@ -281,9 +281,9 @@ mosip.inji.ovp.redirect.url.pattern=%s#vp_token=%s&presentation_submission=%s mosip.inji.ovp.error.redirect.url.pattern=%s?error=%s&error_description=%s #DataShare Config -mosip.data.share.url=https://datashare-inji.collab.mosip.net -mosip.data.share.create.url=https://datashare-inji.collab.mosip.net/v1/datashare/create/static-policyid/static-subscriberid +mosip.data.share.url=http://datashare-service:8097 +mosip.data.share.create.url=http://datashare-service:8097/v1/datashare/create/static-policyid/static-subscriberid +mosip.data.share.get.url.pattern=http://datashare-service:8097/v1/datashare/get/static-policyid/static-subscriberid/* mosip.data.share.create.retry.count=3 -mosip.data.share.get.url.pattern=https://datashare-inji.collab.mosip.net/v1/datashare/get/static-policyid/static-subscriberid/* #OpenId4VP related Configuration END diff --git a/docker-compose/config/mimoto-issuers-config.json b/docker-compose/config/mimoto-issuers-config.json index ff6243994..8e9defa25 100644 --- a/docker-compose/config/mimoto-issuers-config.json +++ b/docker-compose/config/mimoto-issuers-config.json @@ -1,83 +1,7 @@ { "issuers": [ - { - "credential_issuer": "Mosip", - "protocol": "OpenId4VCI", - "display": [ - { - "name": "National Identity Department", - "logo": { - "url": "https://api.collab.mosip.net/inji/mosip-logo.png", - "alt_text": "mosip-logo" - }, - "title": "National Identity Department", - "description": "Download MOSIP National / Foundational Identity Credential", - "language": "en" - }, - { - "name": "دائرة الهوية الوطنية", - "logo": { - "url": "https://api.collab.mosip.net/inji/mosip-logo.png", - "alt_text": "شعار موسيب" - }, - "title": "دائرة الهوية الوطنية", - "description": "قم بتنزيل بيانات اعتماد الهوية الوطنية / التأسيسية MOSIP", - "language": "ar" - }, - { - "name": "राष्ट्रीय पहचान विभाग", - "logo": { - "url": "https://api.collab.mosip.net/inji/mosip-logo.png", - "alt_text": "मोसिप लोगो" - }, - "title": "राष्ट्रीय पहचान विभाग", - "description": "MOSIP नेशनल/फाउंडेशनल आइडेंटिटी क्रेडेंशियल डाउनलोड करेंं", - "language": "hi" - }, - { - "name": "ರಾಷ್ಟ್ರೀಯ ಗುರುತಿನ ಇಲಾಖೆ", - "logo": { - "url": "https://api.collab.mosip.net/inji/mosip-logo.png", - "alt_text": "mosip ಲೋಗೋ" - }, - "title": "ರಾಷ್ಟ್ರೀಯ ಗುರುತಿನ ಇಲಾಖೆ", - "description": "MOSIP ರಾಷ್ಟ್ರೀಯ / ಫೌಂಡೇಶನಲ್ ಐಡೆಂಟಿಟಿ ರುಜುವಾತು ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ", - "language": "kn" - }, - { - "name": "தேசிய அடையாளத் துறை", - "logo": { - "url": "https://api.collab.mosip.net/inji/mosip-logo.png", - "alt_text": "mosip லோகோ" - }, - "title": "தேசிய அடையாளத் துறை", - "description": "MOSIP தேசிய / அடிப்படை அடையாளச் சான்றிதழைப் பதிவிறக்கவும்", - "language": "ta" - }, - { - "name": "National Identity Department", - "logo": { - "url": "https://api.collab.mosip.net/inji/mosip-logo.png", - "alt_text": "logo ng mosip" - }, - "title": "National Identity Department", - "description": "I-download ang MOSIP National / Foundational Identity Credential", - "language": "fil" - } - ], - "client_id": "XusU7P1y10lMr9NA1qnrny_fqynODwV4SCvWPP8cfdY", - "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", - "token_endpoint": "https://api.collab.mosip.net/v1/mimoto/get-token/Mosip", - "authorization_audience": "https://esignet-insurance.collab.mosip.net/v1/esignet/oauth/v2/token", - "proxy_token_endpoint": "https://esignet-mosipid.collab.mosip.net/v1/esignet/oauth/v2/token", - "client_alias": "mpartner-default-test-mosipid", - "qr_code_type": "OnlineSharing", - "enabled": "true", - "wellknown_endpoint": "https://injicertify-mosipid.collab.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer" - }, { "credential_issuer": "StayProtected", - "protocol": "OpenId4VCI", "display": [ { "name": "StayProtected Insurance", @@ -85,45 +9,21 @@ "url": "https://raw.githubusercontent.com/tw-mosip/file-server/master/StayProtectedInsurance.png", "alt_text": "a square logo of a Sunbird" }, + "language": "en", "title": "Download StayProtected Insurance Credentials", - "description": "Download insurance credential", - "language": "en" + "description": "Download insurance credential" } ], - "client_id": "esignet-sunbird-partner", - "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", - "token_endpoint": "https://api.collab.mosip.net/v1/mimoto/get-token/StayProtected", - "authorization_audience": "https://esignet-insurance.collab.mosip.net/v1/esignet/oauth/v2/token", - "proxy_token_endpoint": "https://esignet-insurance.collab.mosip.net/v1/esignet/oauth/v2/token", - "client_alias": "esignet-sunbird-partner", - "qr_code_type": "OnlineSharing", - "enabled": "true", - "wellknown_endpoint": "https://injicertify-insurance.collab.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer" - }, - { - "credential_issuer": "Mock", "protocol": "OpenId4VCI", - "display": [ - { - "name": "Mock Identity", - "logo": { - "url": "https://api.collab.mosip.net/inji/mosip-logo.png", - "alt_text": "mosip-logo" - }, - "title": "Mock Identity", - "description": "Download Mock Identity Credential", - "language": "en" - } - ], - "client_id": "mpartner-mock-testing", + "client_id": "wallet-demo", + "client_alias": "wallet-demo-client", + "wellknown_endpoint": "https://injicertify-insurance.collab.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer", "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", - "token_endpoint": "https://api.collab.mosip.net/v1/mimoto/get-token/Mock", "authorization_audience": "https://esignet-insurance.collab.mosip.net/v1/esignet/oauth/v2/token", - "proxy_token_endpoint": "https://esignet-mock.collab.mosip.net/v1/esignet/oauth/v2/token", - "client_alias": "mpartner-mock-testing", + "token_endpoint": "https://localhost:8099/v1/mimoto/get-token/StayProtected", + "proxy_token_endpoint": "https://esignet-insurance.collab.mosip.net/v1/esignet/oauth/v2/token", "qr_code_type": "OnlineSharing", - "enabled": "true", - "wellknown_endpoint": "https://injicertify-mock.collab.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer" + "enabled": "true" } ] -} +} \ No newline at end of file diff --git a/docker-compose/docker-compose.yml b/docker-compose/docker-compose.yml index 316278b78..375c611e8 100644 --- a/docker-compose/docker-compose.yml +++ b/docker-compose/docker-compose.yml @@ -1,6 +1,32 @@ version: '3.8' services: + + minio: + container_name: 'minio-service' + image: bitnami/minio:2022.2.7-debian-10-r0 + ports: + - "9001:9001" + - "9000:9000" + environment: + MINIO_ROOT_USER: minioadmin # Access Key + MINIO_ROOT_PASSWORD: minioadmin # Secret Key + + datashare: + container_name: 'datashare-service' + image: mosipqa/data-share-service:1.3.x + ports: + - "8097:8097" + environment: + - active_profile_env=inji-default,standalone + - SPRING_CONFIG_NAME=data-share + - SPRING_CONFIG_LOCATION=/home/mosip/ + volumes: + - ./config/data-share-inji-default.properties:/home/mosip/data-share-inji-default.properties + - ./config/data-share-standalone.properties:/home/mosip/data-share-standalone.properties + depends_on: + - minio + nginx: container_name: nginx image: nginx:alpine @@ -22,6 +48,7 @@ services: - active_profile_env=default - SPRING_CONFIG_NAME=mimoto - SPRING_CONFIG_LOCATION=/home/mosip/ + - oidc_p12_password=dummypassword volumes: - ./config/mimoto-default.properties:/home/mosip/mimoto-default.properties - ./config/mimoto-issuers-config.json:/home/mosip/mimoto-issuers-config.json From 66e5c50efabf9105b730e3b0cca1c5df811c9bed Mon Sep 17 00:00:00 2001 From: Kamlesh Singh Bisht Date: Fri, 10 Jan 2025 18:13:16 +0530 Subject: [PATCH 317/860] [INJIWEB-1167]: Removed redundant code in Utilities Signed-off-by: Kamlesh Singh Bisht --- .../java/io/mosip/mimoto/util/Utilities.java | 3 +- src/main/resources/mimoto-issuers-config.json | 135 +++--------------- .../resources/mimoto-trusted-verifiers.json | 21 +-- 3 files changed, 25 insertions(+), 134 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/util/Utilities.java b/src/main/java/io/mosip/mimoto/util/Utilities.java index 0f9cec0ba..0968bbcc8 100644 --- a/src/main/java/io/mosip/mimoto/util/Utilities.java +++ b/src/main/java/io/mosip/mimoto/util/Utilities.java @@ -186,8 +186,7 @@ public String getCredentialSupportedTemplateString() { if(activeProfile.equals("local")) { return credentialTemplateHtmlString; } - return (credentialTemplateHtmlString != null && !credentialTemplateHtmlString.isEmpty()) ? - credentialTemplateHtmlString : getJson(configServerFileStorageURL,credentialTemplatePath ); + return getJson(credentialTemplateHtmlString,credentialTemplatePath ); } public static String[] handleExceptionWithErrorCode(Exception exception) { String errorMessage = exception.getMessage(); diff --git a/src/main/resources/mimoto-issuers-config.json b/src/main/resources/mimoto-issuers-config.json index 6b8924a13..54bf7817b 100644 --- a/src/main/resources/mimoto-issuers-config.json +++ b/src/main/resources/mimoto-issuers-config.json @@ -1,135 +1,40 @@ { "issuers": [ { - "issuer_id": "Mosip", - "protocol": "OpenId4VCI", + "issuer_id": "CAR", + "credential_issuer": "CAR", "display": [ { - "name": "National Identity Department", + "name": "Cadastro Ambiental Rural", "logo": { - "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", - "alt_text": "mosip-logo" + "url": "https://vharsh.github.io/demo/CAR.png", + "alt_text": "car-logo" }, - "title": "National Identity Department", - "description": "Download MOSIP National / Foundational Identity Credential", + "title": "Cadastro Ambiental Rural", + "description": "Baixar credencial CAR", "language": "en" }, { - "name": "دائرة الهوية الوطنية", - "logo": { - "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", - "alt_text": "شعار موسيب" - }, - "title": "دائرة الهوية الوطنية", - "description": "قم بتنزيل بيانات اعتماد الهوية الوطنية / التأسيسية MOSIP", - "language": "ar" - }, - { - "name": "राष्ट्रीय पहचान विभाग", - "logo": { - "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", - "alt_text": "मोसिप लोगो" - }, - "title": "राष्ट्रीय पहचान विभाग", - "description": "MOSIP नेशनल/फाउंडेशनल आइडेंटिटी क्रेडेंशियल डाउनलोड करेंं", - "language": "hi" - }, - { - "name": "ರಾಷ್ಟ್ರೀಯ ಗುರುತಿನ ಇಲಾಖೆ", - "logo": { - "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", - "alt_text": "mosip ಲೋಗೋ" - }, - "title": "ರಾಷ್ಟ್ರೀಯ ಗುರುತಿನ ಇಲಾಖೆ", - "description": "MOSIP ರಾಷ್ಟ್ರೀಯ / ಫೌಂಡೇಶನಲ್ ಐಡೆಂಟಿಟಿ ರುಜುವಾತು ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ", - "language": "kn" - }, - { - "name": "தேசிய அடையாளத் துறை", - "logo": { - "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", - "alt_text": "mosip லோகோ" - }, - "title": "தேசிய அடையாளத் துறை", - "description": "MOSIP தேசிய / அடிப்படை அடையாளச் சான்றிதழைப் பதிவிறக்கவும்", - "language": "ta" - }, - { - "name": "National Identity Department", - "logo": { - "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", - "alt_text": "logo ng mosip" - }, - "title": "National Identity Department", - "description": "I-download ang MOSIP National / Foundational Identity Credential", - "language": "fil" - } - ], - "client_id": "XusU7P1y10lMr9NA1qnrny_fqynODwV4SCvWPP8cfdY", - "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", - "token_endpoint": "https://api.dev1.mosip.net/v1/mimoto/get-token/Mosip", - "authorization_audience": "https://esignet-mosipid.dev1.mosip.net/v1/esignet/oauth/v2/token", - "proxy_token_endpoint": "https://esignet-mosipid.dev1.mosip.net/v1/esignet/oauth/v2/token", - "client_alias": "mpartner-default-test-mosipid", - "qr_code_type": "OnlineSharing", - "wellknown_endpoint": "https://injicertify-mosipid.dev1.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer", - "credential_issuer": "Mosip", - "credential_issuer_host": "https://injicertify-mosipid.dev1.mosip.net", - "enabled": "true" - }, - { - "issuer_id": "StayProtected", - "protocol": "OpenId4VCI", - "display": [ - { - "name": "StayProtected Insurance", + "name": "Cadastro Ambiental Rural", "logo": { - "url": "https://raw.githubusercontent.com/tw-mosip/file-server/master/StayProtectedInsurance.png", - "alt_text": "a square logo of a Sunbird" + "url": "https://vharsh.github.io/demo/CAR.png", + "alt_text": "car-logo" }, - "title": "Download StayProtected Insurance Credentials", - "description": "Download insurance credential", - "language": "en" + "title": "Cadastro Ambiental Rural", + "description": "Baixe a credencial emitida pela autoridade terrestre", + "language": "pt" } ], - "client_id": "esignet-sunbird-partner", - "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", - "token_endpoint": "https://api.dev1.mosip.net/v1/mimoto/get-token/StayProtected", - "authorization_audience": "https://esignet-insurance.dev1.mosip.net/v1/esignet/oauth/v2/token", - "proxy_token_endpoint": "https://esignet-insurance.dev1.mosip.net/v1/esignet/oauth/v2/token", - "client_alias": "esignet-sunbird-partner", - "qr_code_type": "OnlineSharing", - "wellknown_endpoint": "https://injicertify-insurance.dev1.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer", - "credential_issuer": "StayProtected", - "credential_issuer_host": "https://injicertify-insurance.dev1.mosip.net", - "enabled": "true" - }, - { - "issuer_id": "Mock", "protocol": "OpenId4VCI", - "display": [ - { - "name": "Mock Identity", - "logo": { - "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", - "alt_text": "mosip-logo" - }, - "title": "Mock Identity", - "description": "Download Mock Identity Credential", - "language": "en" - } - ], - "client_id": "mpartner-mock-testing", + "client_id": "wallet-demo", + "client_alias": "wallet-demo-client", + "wellknown_endpoint": "https://injicertify-cp1.collab.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer", "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", - "token_endpoint": "https://api.dev1.mosip.net/v1/mimoto/get-token/Mock", - "authorization_audience": "https://esignet-insurance.dev1.mosip.net/v1/esignet/oauth/v2/token", - "proxy_token_endpoint": "https://esignet-mock.dev1.mosip.net/v1/esignet/oauth/v2/token", - "client_alias": "mpartner-mock-testing", + "authorization_audience": "https://esignet-mock.collab.mosip.net/v1/esignet/oauth/v2/token", + "token_endpoint": "https://localhost:8099/v1/mimoto/get-token/CAR", + "proxy_token_endpoint": "https://esignet-mock.collab.mosip.net/v1/esignet/oauth/v2/token", "qr_code_type": "OnlineSharing", - "wellknown_endpoint": "https://injicertify-mock.dev1.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer", - "credential_issuer": "Mock", - "credential_issuer_host": "https://injicertify-mock.dev1.mosip.net", "enabled": "true" } ] -} +} \ No newline at end of file diff --git a/src/main/resources/mimoto-trusted-verifiers.json b/src/main/resources/mimoto-trusted-verifiers.json index 523a6c321..26984feca 100644 --- a/src/main/resources/mimoto-trusted-verifiers.json +++ b/src/main/resources/mimoto-trusted-verifiers.json @@ -1,26 +1,13 @@ { "verifiers": [ { - "client_id": "https://injiverify.dev2.mosip.net", + "client_id": "https://injiverify-cp1.collab.mosip.net", "redirect_uris": [ - "https://injiverify.qa-inji.mosip.net/redirect", - "https://injiverify.dev2.mosip.net/redirect" + "https://injiverify-cp1.collab.mosip.net/redirect" ], "response_uris": [ - "https://injiverify.qa-inji.mosip.net/redirect", - "https://injiverify.dev2.mosip.net/redirect" - ] - }, - { - "client_id": "https://injiverify.dev1.mosip.net", - "redirect_uris": [ - "https://injiverify.qa-inji.mosip.net/redirect", - "https://injiverify.dev1.mosip.net/redirect" - ], - "response_uris": [ - "https://injiverify.qa-inji.mosip.net/redirect", - "https://injiverify.dev1.mosip.net/redirect" + "https://9055-2405-201-c058-b814-81ee-2d4-a331-aa1c.ngrok-free.app/verifier/vp-response" ] } ] -} +} \ No newline at end of file From 9003a6c08e9960433a054a8a25b13bdd6948947f Mon Sep 17 00:00:00 2001 From: Kamlesh Singh Bisht Date: Fri, 10 Jan 2025 18:37:22 +0530 Subject: [PATCH 318/860] [INJIWEB-1167]: Reverting accidental commit of wrong issuers Signed-off-by: Kamlesh Singh Bisht --- src/main/resources/mimoto-issuers-config.json | 135 +++++++++++++++--- .../resources/mimoto-trusted-verifiers.json | 21 ++- 2 files changed, 132 insertions(+), 24 deletions(-) diff --git a/src/main/resources/mimoto-issuers-config.json b/src/main/resources/mimoto-issuers-config.json index 54bf7817b..6b8924a13 100644 --- a/src/main/resources/mimoto-issuers-config.json +++ b/src/main/resources/mimoto-issuers-config.json @@ -1,40 +1,135 @@ { "issuers": [ { - "issuer_id": "CAR", - "credential_issuer": "CAR", + "issuer_id": "Mosip", + "protocol": "OpenId4VCI", "display": [ { - "name": "Cadastro Ambiental Rural", + "name": "National Identity Department", "logo": { - "url": "https://vharsh.github.io/demo/CAR.png", - "alt_text": "car-logo" + "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", + "alt_text": "mosip-logo" }, - "title": "Cadastro Ambiental Rural", - "description": "Baixar credencial CAR", + "title": "National Identity Department", + "description": "Download MOSIP National / Foundational Identity Credential", "language": "en" }, { - "name": "Cadastro Ambiental Rural", + "name": "دائرة الهوية الوطنية", + "logo": { + "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", + "alt_text": "شعار موسيب" + }, + "title": "دائرة الهوية الوطنية", + "description": "قم بتنزيل بيانات اعتماد الهوية الوطنية / التأسيسية MOSIP", + "language": "ar" + }, + { + "name": "राष्ट्रीय पहचान विभाग", + "logo": { + "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", + "alt_text": "मोसिप लोगो" + }, + "title": "राष्ट्रीय पहचान विभाग", + "description": "MOSIP नेशनल/फाउंडेशनल आइडेंटिटी क्रेडेंशियल डाउनलोड करेंं", + "language": "hi" + }, + { + "name": "ರಾಷ್ಟ್ರೀಯ ಗುರುತಿನ ಇಲಾಖೆ", + "logo": { + "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", + "alt_text": "mosip ಲೋಗೋ" + }, + "title": "ರಾಷ್ಟ್ರೀಯ ಗುರುತಿನ ಇಲಾಖೆ", + "description": "MOSIP ರಾಷ್ಟ್ರೀಯ / ಫೌಂಡೇಶನಲ್ ಐಡೆಂಟಿಟಿ ರುಜುವಾತು ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ", + "language": "kn" + }, + { + "name": "தேசிய அடையாளத் துறை", + "logo": { + "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", + "alt_text": "mosip லோகோ" + }, + "title": "தேசிய அடையாளத் துறை", + "description": "MOSIP தேசிய / அடிப்படை அடையாளச் சான்றிதழைப் பதிவிறக்கவும்", + "language": "ta" + }, + { + "name": "National Identity Department", + "logo": { + "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", + "alt_text": "logo ng mosip" + }, + "title": "National Identity Department", + "description": "I-download ang MOSIP National / Foundational Identity Credential", + "language": "fil" + } + ], + "client_id": "XusU7P1y10lMr9NA1qnrny_fqynODwV4SCvWPP8cfdY", + "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", + "token_endpoint": "https://api.dev1.mosip.net/v1/mimoto/get-token/Mosip", + "authorization_audience": "https://esignet-mosipid.dev1.mosip.net/v1/esignet/oauth/v2/token", + "proxy_token_endpoint": "https://esignet-mosipid.dev1.mosip.net/v1/esignet/oauth/v2/token", + "client_alias": "mpartner-default-test-mosipid", + "qr_code_type": "OnlineSharing", + "wellknown_endpoint": "https://injicertify-mosipid.dev1.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer", + "credential_issuer": "Mosip", + "credential_issuer_host": "https://injicertify-mosipid.dev1.mosip.net", + "enabled": "true" + }, + { + "issuer_id": "StayProtected", + "protocol": "OpenId4VCI", + "display": [ + { + "name": "StayProtected Insurance", "logo": { - "url": "https://vharsh.github.io/demo/CAR.png", - "alt_text": "car-logo" + "url": "https://raw.githubusercontent.com/tw-mosip/file-server/master/StayProtectedInsurance.png", + "alt_text": "a square logo of a Sunbird" }, - "title": "Cadastro Ambiental Rural", - "description": "Baixe a credencial emitida pela autoridade terrestre", - "language": "pt" + "title": "Download StayProtected Insurance Credentials", + "description": "Download insurance credential", + "language": "en" } ], + "client_id": "esignet-sunbird-partner", + "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", + "token_endpoint": "https://api.dev1.mosip.net/v1/mimoto/get-token/StayProtected", + "authorization_audience": "https://esignet-insurance.dev1.mosip.net/v1/esignet/oauth/v2/token", + "proxy_token_endpoint": "https://esignet-insurance.dev1.mosip.net/v1/esignet/oauth/v2/token", + "client_alias": "esignet-sunbird-partner", + "qr_code_type": "OnlineSharing", + "wellknown_endpoint": "https://injicertify-insurance.dev1.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer", + "credential_issuer": "StayProtected", + "credential_issuer_host": "https://injicertify-insurance.dev1.mosip.net", + "enabled": "true" + }, + { + "issuer_id": "Mock", "protocol": "OpenId4VCI", - "client_id": "wallet-demo", - "client_alias": "wallet-demo-client", - "wellknown_endpoint": "https://injicertify-cp1.collab.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer", + "display": [ + { + "name": "Mock Identity", + "logo": { + "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", + "alt_text": "mosip-logo" + }, + "title": "Mock Identity", + "description": "Download Mock Identity Credential", + "language": "en" + } + ], + "client_id": "mpartner-mock-testing", "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", - "authorization_audience": "https://esignet-mock.collab.mosip.net/v1/esignet/oauth/v2/token", - "token_endpoint": "https://localhost:8099/v1/mimoto/get-token/CAR", - "proxy_token_endpoint": "https://esignet-mock.collab.mosip.net/v1/esignet/oauth/v2/token", + "token_endpoint": "https://api.dev1.mosip.net/v1/mimoto/get-token/Mock", + "authorization_audience": "https://esignet-insurance.dev1.mosip.net/v1/esignet/oauth/v2/token", + "proxy_token_endpoint": "https://esignet-mock.dev1.mosip.net/v1/esignet/oauth/v2/token", + "client_alias": "mpartner-mock-testing", "qr_code_type": "OnlineSharing", + "wellknown_endpoint": "https://injicertify-mock.dev1.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer", + "credential_issuer": "Mock", + "credential_issuer_host": "https://injicertify-mock.dev1.mosip.net", "enabled": "true" } ] -} \ No newline at end of file +} diff --git a/src/main/resources/mimoto-trusted-verifiers.json b/src/main/resources/mimoto-trusted-verifiers.json index 26984feca..523a6c321 100644 --- a/src/main/resources/mimoto-trusted-verifiers.json +++ b/src/main/resources/mimoto-trusted-verifiers.json @@ -1,13 +1,26 @@ { "verifiers": [ { - "client_id": "https://injiverify-cp1.collab.mosip.net", + "client_id": "https://injiverify.dev2.mosip.net", "redirect_uris": [ - "https://injiverify-cp1.collab.mosip.net/redirect" + "https://injiverify.qa-inji.mosip.net/redirect", + "https://injiverify.dev2.mosip.net/redirect" ], "response_uris": [ - "https://9055-2405-201-c058-b814-81ee-2d4-a331-aa1c.ngrok-free.app/verifier/vp-response" + "https://injiverify.qa-inji.mosip.net/redirect", + "https://injiverify.dev2.mosip.net/redirect" + ] + }, + { + "client_id": "https://injiverify.dev1.mosip.net", + "redirect_uris": [ + "https://injiverify.qa-inji.mosip.net/redirect", + "https://injiverify.dev1.mosip.net/redirect" + ], + "response_uris": [ + "https://injiverify.qa-inji.mosip.net/redirect", + "https://injiverify.dev1.mosip.net/redirect" ] } ] -} \ No newline at end of file +} From a58f29e9b4ce52b8950fe5dd3c0a54cd9d33d72f Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Fri, 10 Jan 2025 18:52:50 +0530 Subject: [PATCH 319/860] [INJIWEB-1359] Updated stoplight documentation for /verifier and /get-token/{issuer} endpoints Signed-off-by: Gurpreet41082 --- docs/api-documentation-openapi.json | 265 +++++++++++++++++++++++++++- 1 file changed, 264 insertions(+), 1 deletion(-) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index 45fcb7e9a..54398f0d2 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -125,6 +125,269 @@ "summary": "Generate Credential - Request Otp" } }, + "/verifiers": { + "get": { + "operationId": "getAllTrustedVerifiers", + "tags": [ + "Verifiers" + ], + "description": "This API retrieves all trusted verifiers in Inji Web.", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "verifiers": [ + { + "client_id": "string", + "redirect_uris": [ + "string" + ], + "response_uris": [ + "string" + ] + } + ] + } + }, + "examples": { + "Success response": { + "value": { + "verifiers": [ + { + "client_id": "https://injiverify.collab.mosip.net", + "redirect_uris": [ + "https://injiverify.cp2.collab.mosip.net/redirect", + "https://injiverify.collab.mosip.net/redirect" + ], + "response_uris": [ + "https://injiverify.cp2.collab.mosip.net/redirect", + "https://injiverify.collab.mosip.net/redirect" + ] + }, + { + "client_id": "https://injiverify.cp1.collab.mosip.net", + "redirect_uris": [ + "https://injiverify.cp2.collab.mosip.net/redirect", + "https://injiverify.cp1.collab.mosip.net/redirect" + ], + "response_uris": [ + "https://injiverify.cp2.collab.mosip.net/redirect", + "https://injiverify.cp1.collab.mosip.net/redirect" + ] + } + ] + } + }, + "Failure response": { + "value": { + "id": null, + "version": "v1", + "responsetime": "2022-10-31T05:07:34.789Z", + "metadata": null, + "response": null, + "errors": [ + { + "errorCode": "VERIFIER-API-26", + "errorMessage": "API not accessible failure" + } + ] + } + } + } + } + } + } + } + } + }, + "/get-token/{issuer}": { + "post": { + "tags": [ + "Wallet Binding" + ], + "summary": "Retrieve accessToken for OIDC flow", + "description": "This endpoint allows you to retrieve the access token in exchange for the authorization code.", + "operationId": "getToken", + "parameters": [ + { + "name": "arg0", + "in": "query", + "required": true, + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + { + "name": "issuer", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "version": { + "type": "string" + }, + "str": { + "type": "string", + "nullable": true + }, + "responsetime": { + "type": "string", + "format": "date-time" + }, + "metadata": { + "type": "object", + "nullable": true + }, + "response": { + "type": "object", + "properties": { + "access_token": { + "type": "string" + }, + "token_type": { + "type": "string" + }, + "expires_in": { + "type": "integer" + }, + "scope": { + "type": "string" + }, + "refresh_token": { + "type": "string", + "nullable": true + } + } + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "errorCode": { + "type": "string" + }, + "errorMessage": { + "type": "string" + } + } + }, + "nullable": true + } + } + }, + "examples": { + "Success response": { + "value": { + "id": "mosip.mimoto.issuers", + "version": "v1", + "str": null, + "responsetime": "2024-04-25T05:56:55.890Z", + "metadata": null, + "response": { + "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", + "token_type": "bearer", + "expires_in": 3600, + "scope": "mosip_identity_vc_ldp", + "refresh_token": "xyz123" + }, + "errors": [] + } + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "version": { + "type": "string" + }, + "str": { + "type": "string", + "nullable": true + }, + "responsetime": { + "type": "string", + "format": "date-time" + }, + "metadata": { + "type": "object", + "nullable": true + }, + "response": { + "type": "object", + "nullable": true + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "errorCode": { + "type": "string" + }, + "errorMessage": { + "type": "string" + } + } + } + } + } + }, + "examples": { + "Failure response": { + "value": { + "id": null, + "version": "v1", + "str": null, + "responsetime": "2022-10-31T05:07:34.789Z", + "metadata": null, + "response": null, + "errors": [ + { + "errorCode": "RESIDENT-APP-26", + "errorMessage": "Api not accessible failure" + } + ] + } + } + } + } + } + } + } + } + }, "/credentialshare/request": { "post": { "operationId": "request", @@ -2765,4 +3028,4 @@ } }, "x-internal": true -} +} \ No newline at end of file From 1072e3b89fb8702c780996944a9d1533cc88c93a Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Fri, 10 Jan 2025 19:04:27 +0530 Subject: [PATCH 320/860] [INJIWEB-1359] Updated stoplight documentation Signed-off-by: Gurpreet41082 --- docs/api-documentation-openapi.json | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index 54398f0d2..65683d263 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -131,7 +131,7 @@ "tags": [ "Verifiers" ], - "description": "This API retrieves all trusted verifiers in Inji Web.", + "description": "This API retrieves all trusted verifiers for Inji Wallet.", "responses": { "200": { "description": "OK", @@ -160,24 +160,11 @@ { "client_id": "https://injiverify.collab.mosip.net", "redirect_uris": [ - "https://injiverify.cp2.collab.mosip.net/redirect", "https://injiverify.collab.mosip.net/redirect" ], "response_uris": [ - "https://injiverify.cp2.collab.mosip.net/redirect", "https://injiverify.collab.mosip.net/redirect" ] - }, - { - "client_id": "https://injiverify.cp1.collab.mosip.net", - "redirect_uris": [ - "https://injiverify.cp2.collab.mosip.net/redirect", - "https://injiverify.cp1.collab.mosip.net/redirect" - ], - "response_uris": [ - "https://injiverify.cp2.collab.mosip.net/redirect", - "https://injiverify.cp1.collab.mosip.net/redirect" - ] } ] } @@ -207,7 +194,7 @@ "/get-token/{issuer}": { "post": { "tags": [ - "Wallet Binding" + "Credentials Download" ], "summary": "Retrieve accessToken for OIDC flow", "description": "This endpoint allows you to retrieve the access token in exchange for the authorization code.", @@ -2712,7 +2699,7 @@ "required": true }, "tags": [ - "Trusted Issuers" + "Credentials Download" ], "description": "This API is responsible for generating PDFs for the received VC content. It fetches display properties from the well-known configuration of the issuer and incorporates them into the predefined template of the PDF file.", "responses": { From 78d027cf07f61fb8b727ecd1f30dde13fc9d9b39 Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Mon, 13 Jan 2025 20:45:48 +0530 Subject: [PATCH 321/860] MOSIP-38651 Signed-off-by: Nandhukumar --- .../mimoto/testrunner/MosipTestRunner.java | 24 ++----------------- .../testNgXmlFiles/mimotoMasterTestSuite.xml | 12 ++++++++++ .../mimotoPrerequisiteSuite.xml | 2 +- api-test/testNgXmlFiles/mimotoSuite.xml | 2 +- 4 files changed, 16 insertions(+), 24 deletions(-) create mode 100644 api-test/testNgXmlFiles/mimotoMasterTestSuite.xml diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java index b04b85137..55a7bc0fe 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java @@ -173,33 +173,13 @@ public static void startTestRunner() { homeDir = new File(dir.getParent() + "/mosip/testNgXmlFiles"); LOGGER.info("ELSE :" + homeDir); } - // List and sort the files File[] files = homeDir.listFiles(); if (files != null) { - Arrays.sort(files, (f1, f2) -> { - // Customize the comparison based on file names - if (f1.getName().toLowerCase().contains("prerequisite")) { - return -1; // f1 should come before f2 - } else if (f2.getName().toLowerCase().contains("prerequisite")) { - return 1; // f2 comes before f1 - } - return f1.getName().compareTo(f2.getName()); // default alphabetical order - }); - for (File file : files) { TestNG runner = new TestNG(); List suitefiles = new ArrayList<>(); - if (file.getName().toLowerCase().contains(GlobalConstants.MIMOTO)) { - if (file.getName().toLowerCase().contains("prerequisite")) { - BaseTestCase.setReportName(GlobalConstants.MIMOTO + "-prerequisite"); - } else { - // if the prerequisite total skipped/failed count is greater than zero - if (EmailableReport.getFailedCount() > 0 || EmailableReport.getSkippedCount() > 0) { - // skipAll = true; - } - - BaseTestCase.setReportName(GlobalConstants.MIMOTO); - } + if (file.getName().toLowerCase().contains("mastertestsuite")) { + BaseTestCase.setReportName(GlobalConstants.MIMOTO); suitefiles.add(file.getAbsolutePath()); runner.setTestSuites(suitefiles); System.getProperties().setProperty("testng.outpur.dir", "testng-report"); diff --git a/api-test/testNgXmlFiles/mimotoMasterTestSuite.xml b/api-test/testNgXmlFiles/mimotoMasterTestSuite.xml new file mode 100644 index 000000000..174bef942 --- /dev/null +++ b/api-test/testNgXmlFiles/mimotoMasterTestSuite.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/api-test/testNgXmlFiles/mimotoPrerequisiteSuite.xml b/api-test/testNgXmlFiles/mimotoPrerequisiteSuite.xml index 1c5aa32f7..5bf235412 100644 --- a/api-test/testNgXmlFiles/mimotoPrerequisiteSuite.xml +++ b/api-test/testNgXmlFiles/mimotoPrerequisiteSuite.xml @@ -1,7 +1,7 @@ - + diff --git a/api-test/testNgXmlFiles/mimotoSuite.xml b/api-test/testNgXmlFiles/mimotoSuite.xml index 9b1cd2dac..dfe44568f 100644 --- a/api-test/testNgXmlFiles/mimotoSuite.xml +++ b/api-test/testNgXmlFiles/mimotoSuite.xml @@ -1,7 +1,7 @@ - + From 9d24b32448387d6f6916065fa6b7a12973e7b8cf Mon Sep 17 00:00:00 2001 From: Chandra Keshav Mishra Date: Wed, 15 Jan 2025 13:31:12 +0530 Subject: [PATCH 322/860] [MOSIP-38411] rename main to master (#554) Signed-off-by: Chandra Keshav Mishra --- .github/workflows/push-trigger.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/push-trigger.yml b/.github/workflows/push-trigger.yml index be8f5101a..8447682fa 100644 --- a/.github/workflows/push-trigger.yml +++ b/.github/workflows/push-trigger.yml @@ -65,7 +65,7 @@ jobs: find ../${{ env.SERVICE_LOCATION }} -path '*/target/*' -name '*.jar' -type f -executable -exec zip ${{ env.NEW_BUILD_ARTIFACT }}.zip {} + - name: Upload the springboot jars - if: ${{ !contains(github.ref, 'master') || !contains(github.ref, 'main') }} + if: ${{ !contains(github.ref, 'master') }} uses: actions/upload-artifact@v3 with: name: ${{ env.NEW_BUILD_ARTIFACT }} @@ -176,12 +176,12 @@ jobs: cp -r ${{ env.SERVICE_LOCATION}}/target/classes/config ${{ env.SERVICE_LOCATION}}/target/config cp -r ${{ env.SERVICE_LOCATION}}/testNgXmlFiles ${{ env.SERVICE_LOCATION}}/target/testNgXmlFiles - name: Ready the springboot artifacts - if: ${{ !contains(github.ref, 'master') || !contains(github.ref, 'main') }} + if: ${{ !contains(github.ref, 'master') }} run: | ## FIND JARS & COPY ONLY EXECUTABLE JARs STORED UNDER TARGET DIRECTORY find ${{ env.SERVICE_LOCATION }} -path '*/target/*' -exec zip ${{ env.BUILD_ARTIFACT }}.zip {} + - name: Upload the springboot jars - if: ${{ !contains(github.ref, 'master') || !contains(github.ref, 'main') }} + if: ${{ !contains(github.ref, 'master') }} uses: actions/upload-artifact@v3 with: name: ${{ env.BUILD_ARTIFACT }} From 8214e3b9765c2dce32b65c65a5c4d6d8725ec434 Mon Sep 17 00:00:00 2001 From: Nitin Hegde <165893206+hegdenitin@users.noreply.github.com> Date: Thu, 16 Jan 2025 20:53:53 +0530 Subject: [PATCH 323/860] MOSIP-38873 verifierList and mockMDL wellknown issuer APIs (#551) Signed-off-by: NitinHegde --- .../GetVerifierList/GetVerifierList.hbs | 1 + .../GetVerifierList/GetVerifierList.yml | 14 ++++++++ .../GetVerifierList/GetVerifierListResult.hbs | 1 + .../GetWellknownIssuerMockMdl.hbs | 1 + .../GetWellknownIssuerMockMdl.yml | 32 +++++++++++++++++++ .../GetWellknownIssuerMockMdlResult.hbs | 1 + api-test/testNgXmlFiles/mimotoSuite.xml | 15 ++++++++- 7 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 api-test/src/main/resources/mimoto/GetVerifierList/GetVerifierList.hbs create mode 100644 api-test/src/main/resources/mimoto/GetVerifierList/GetVerifierList.yml create mode 100644 api-test/src/main/resources/mimoto/GetVerifierList/GetVerifierListResult.hbs create mode 100644 api-test/src/main/resources/mimoto/GetWellknownIssuerMockMdl/GetWellknownIssuerMockMdl.hbs create mode 100644 api-test/src/main/resources/mimoto/GetWellknownIssuerMockMdl/GetWellknownIssuerMockMdl.yml create mode 100644 api-test/src/main/resources/mimoto/GetWellknownIssuerMockMdl/GetWellknownIssuerMockMdlResult.hbs diff --git a/api-test/src/main/resources/mimoto/GetVerifierList/GetVerifierList.hbs b/api-test/src/main/resources/mimoto/GetVerifierList/GetVerifierList.hbs new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/api-test/src/main/resources/mimoto/GetVerifierList/GetVerifierList.hbs @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/GetVerifierList/GetVerifierList.yml b/api-test/src/main/resources/mimoto/GetVerifierList/GetVerifierList.yml new file mode 100644 index 000000000..95e69a28f --- /dev/null +++ b/api-test/src/main/resources/mimoto/GetVerifierList/GetVerifierList.yml @@ -0,0 +1,14 @@ +GetVerifierList: + Mimoto_GetVerifierList_All_Valid_Smoke: + endPoint: /v1/mimoto/verifiers + description: Retrieving verifiers list with all valid parameters + uniqueIdentifier: TC_Mimoto_GetVerifierList_01 + role: resident + restMethod: get + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/GetVerifierList/GetVerifierList + outputTemplate: mimoto/GetVerifierList/GetVerifierListResult + input: '{ +}' + output: '{ +}' \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/GetVerifierList/GetVerifierListResult.hbs b/api-test/src/main/resources/mimoto/GetVerifierList/GetVerifierListResult.hbs new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/api-test/src/main/resources/mimoto/GetVerifierList/GetVerifierListResult.hbs @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/GetWellknownIssuerMockMdl/GetWellknownIssuerMockMdl.hbs b/api-test/src/main/resources/mimoto/GetWellknownIssuerMockMdl/GetWellknownIssuerMockMdl.hbs new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/api-test/src/main/resources/mimoto/GetWellknownIssuerMockMdl/GetWellknownIssuerMockMdl.hbs @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/GetWellknownIssuerMockMdl/GetWellknownIssuerMockMdl.yml b/api-test/src/main/resources/mimoto/GetWellknownIssuerMockMdl/GetWellknownIssuerMockMdl.yml new file mode 100644 index 000000000..bcd471ba8 --- /dev/null +++ b/api-test/src/main/resources/mimoto/GetWellknownIssuerMockMdl/GetWellknownIssuerMockMdl.yml @@ -0,0 +1,32 @@ +GetWellknownIssuerMockMdl: + Mimoto_GetWellknownIssuerMockMdl_All_Valid_Smoke: + endPoint: /v1/mimoto/issuers/MockMdl/well-known-proxy + description: Retrieving verifiers list with all valid parameters + uniqueIdentifier: TC_Mimoto_GetWellknownIssuerMockMdl_01 + role: resident + restMethod: get + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/GetWellknownIssuerMockMdl/GetWellknownIssuerMockMdl + outputTemplate: mimoto/GetWellknownIssuerMockMdl/GetWellknownIssuerMockMdlResult + input: '{ +}' + output: '{ +}' + Mimoto_GetWellknownIssuerMockMdl_With_MockMdl_Removed_From_URL_Neg: + endPoint: /v1/mimoto/issuers/well-known-proxy + description: Retrieving verifiers list with invalid URL + uniqueIdentifier: TC_Mimoto_GetWellknownIssuerMockMdl_02 + role: resident + restMethod: get + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/GetWellknownIssuerMockMdl/GetWellknownIssuerMockMdl + outputTemplate: mimoto/error + input: '{ +}' + output: '{ + "errors":[ + { + "errorCode":"RESIDENT-APP-035" + } + ] +}' \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/GetWellknownIssuerMockMdl/GetWellknownIssuerMockMdlResult.hbs b/api-test/src/main/resources/mimoto/GetWellknownIssuerMockMdl/GetWellknownIssuerMockMdlResult.hbs new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/api-test/src/main/resources/mimoto/GetWellknownIssuerMockMdl/GetWellknownIssuerMockMdlResult.hbs @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/api-test/testNgXmlFiles/mimotoSuite.xml b/api-test/testNgXmlFiles/mimotoSuite.xml index dfe44568f..405a6aa26 100644 --- a/api-test/testNgXmlFiles/mimotoSuite.xml +++ b/api-test/testNgXmlFiles/mimotoSuite.xml @@ -182,5 +182,18 @@ - + + + + + + + + + + + + \ No newline at end of file From ed896839a7a6e4e7e759befabadc0a646c0f0ebd Mon Sep 17 00:00:00 2001 From: Praful Rakhade Date: Mon, 20 Jan 2025 18:45:50 +0530 Subject: [PATCH 324/860] [DSD-] Updated upload and download artifact version push-trigger.yml (#560) Signed-off-by: Praful Rakhade --- .github/workflows/push-trigger.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/push-trigger.yml b/.github/workflows/push-trigger.yml index 8447682fa..b5ce06a2f 100644 --- a/.github/workflows/push-trigger.yml +++ b/.github/workflows/push-trigger.yml @@ -46,7 +46,7 @@ jobs: SERVICE_LOCATION: mimoto steps: - uses: actions/checkout@v3 - - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@v4 if: ${{ ( env.BUILD_ARTIFACT != 'false' ) }} with: name: ${{ env.BUILD_ARTIFACT }} @@ -66,7 +66,7 @@ jobs: - name: Upload the springboot jars if: ${{ !contains(github.ref, 'master') }} - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: ${{ env.NEW_BUILD_ARTIFACT }} path: ${{ env.NEW_BUILD_ARTIFACT }}.zip @@ -182,7 +182,7 @@ jobs: find ${{ env.SERVICE_LOCATION }} -path '*/target/*' -exec zip ${{ env.BUILD_ARTIFACT }}.zip {} + - name: Upload the springboot jars if: ${{ !contains(github.ref, 'master') }} - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: ${{ env.BUILD_ARTIFACT }} path: ${{ env.BUILD_ARTIFACT }}.zip From 7bd727a143498df0a3ad763a527a8e050f2f5fcc Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Tue, 21 Jan 2025 09:56:49 +0530 Subject: [PATCH 325/860] Update develop from release (#561) * [INJIMOB-1349] add data-share and minio service as part of docker compose Signed-off-by: Abhishek Paul * [MOSIP-38411] rename main to master (#553) Signed-off-by: Chandra Keshav Mishra * [INJIWEB-1349] removed endpoint /issuers/{issuer-id}/credentialTypes Signed-off-by: Gurpreet41082 * [INJIWEB-1349] updated mimoto image in docker file Signed-off-by: Gurpreet41082 * [DSD-7079] Updated action/upload artifact version push-trigger.yml (#559) * [DSD-] Updated action/upload artifact version push-trigger.yml Signed-off-by: Praful Rakhade * Updated push-trigger.yml Signed-off-by: Praful Rakhade --------- Signed-off-by: Praful Rakhade --------- Signed-off-by: Abhishek Paul Signed-off-by: Chandra Keshav Mishra Signed-off-by: Gurpreet41082 Signed-off-by: Praful Rakhade Co-authored-by: Abhishek Paul Co-authored-by: Chandra Keshav Mishra Co-authored-by: Praful Rakhade --- docker-compose/docker-compose.yml | 2 +- docs/api-documentation-openapi.json | 458 ---------------------------- 2 files changed, 1 insertion(+), 459 deletions(-) diff --git a/docker-compose/docker-compose.yml b/docker-compose/docker-compose.yml index 375c611e8..6f6761064 100644 --- a/docker-compose/docker-compose.yml +++ b/docker-compose/docker-compose.yml @@ -39,7 +39,7 @@ services: - ./nginx.conf:/etc/nginx/nginx.conf mimoto-service: container_name: 'Mimoto-Service' - image: 'mosipid/mimoto:0.14.0' + image: 'mosipqa/mimoto:0.15.x' user: root ports: - '8099:8099' diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index 810a278d1..5fd38afd5 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -1875,464 +1875,6 @@ } } }, - "/issuers/{issuer-id}/credentialTypes": { - "get": { - "operationId": "getCredentialTypes", - "parameters": [ - { - "name": "issuer-id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "search", - "in": "query", - "required": false, - "schema": { - "type": "string" - } - } - ], - "tags": [ - "Trusted Issuers" - ], - "description": "This API fetches and allows searching for Credential Types offered by the issuer, all sourced from the issuer's well-known configuration.", - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "supportedCredentials": [ - { - "format": "string", - "id": "string", - "scope": "string", - "display": [ - { - "name": "string", - "logo": { - "url": "string", - "alt_text": "string" - }, - "locale": "string", - "background_color": "string", - "text_color": "string" - } - ], - "proof_types_supported": [ - "string" - ], - "credential_definition": { - "type": [ - "string" - ], - "credentialSubject": { - "additionalProp1": { - "display": [ - { - "name": "string", - "locale": "string" - } - ] - }, - "additionalProp2": { - "display": [ - { - "name": "string", - "locale": "string" - } - ] - }, - "additionalProp3": { - "display": [ - { - "name": "string", - "locale": "string" - } - ] - } - } - } - } - ], - "authorization_endpoint": "string" - }, - "errors": { - "type": "null" - } - }, - "x-examples": { - "Example 1": { - "supportedCredentials": [ - { - "format": "ldp_vc", - "id": "InsuranceCredential", - "scope": "sunbird_rc_insurance_vc_ldp", - "display": [ - { - "name": "MOSIP Insurance", - "logo": { - "url": "https://api.collab.mosip.net/inji/mosip-logo.png", - "alt_text": "insurance logo" - }, - "locale": "en", - "background_color": "#fafcff", - "text_color": "#00284d" - } - ], - "proof_types_supported": [ - "jwt" - ], - "credential_definition": { - "type": [ - "VerifiableCredential", - "InsuranceCredential" - ], - "credentialSubject": { - "fullName": { - "display": [ - { - "name": "Full Name", - "locale": "en" - } - ] - }, - "policyName": { - "display": [ - { - "name": "Policy Name", - "locale": "en" - } - ] - }, - "policyNumber": { - "display": [ - { - "name": "Policy Number", - "locale": "en" - } - ] - }, - "gender": { - "display": [ - { - "name": "Gender", - "locale": "en" - } - ] - }, - "expiresOn": { - "display": [ - { - "name": "Expiry Date", - "locale": "en" - } - ] - }, - "dob": { - "display": [ - { - "name": "Date Of Birth", - "locale": "en" - } - ] - } - } - } - }, - { - "format": "ldp_vc", - "id": "LifeInsuranceCredential_ldp", - "scope": "life_insurance_vc_ldp", - "display": [ - { - "name": "Sunbird Life Insurance", - "logo": { - "url": "https://sunbird.org/images/sunbird-logo-new.png", - "alt_text": "Sunbird life insurance logo" - }, - "locale": "en", - "background_color": "#fefcfa", - "text_color": "#7C4616" - } - ], - "proof_types_supported": [ - "jwt" - ], - "credential_definition": { - "type": [ - "VerifiableCredential", - "LifeInsuranceCredential" - ], - "credentialSubject": { - "fullName": { - "display": [ - { - "name": "Full Name", - "locale": "en" - } - ] - }, - "policyName": { - "display": [ - { - "name": "Policy Name", - "locale": "en" - } - ] - }, - "policyNumber": { - "display": [ - { - "name": "Policy Number", - "locale": "en" - } - ] - }, - "gender": { - "display": [ - { - "name": "Gender", - "locale": "en" - } - ] - }, - "policyExpiresOn": { - "display": [ - { - "name": "Expiry Date", - "locale": "en" - } - ] - }, - "dob": { - "display": [ - { - "name": "Date Of Birth", - "locale": "en" - } - ] - } - } - } - } - ], - "authorization_endpoint": "http://localhost:8088/authorize" - } - }, - "examples": { - "Success response": { - "value": { - "id": "mosip.resident.vid", - "version": "v1", - "str": null, - "responsetime": "2022-10-31T05:08:14.846Z", - "metadata": null, - "response": { - "supportedCredentials": [ - { - "format": "ldp_vc", - "id": "InsuranceCredential", - "scope": "sunbird_rc_insurance_vc_ldp", - "display": [ - { - "name": "MOSIP Insurance", - "logo": { - "url": "https://api.collab.mosip.net/inji/mosip-logo.png", - "alt_text": "insurance logo" - }, - "locale": "en", - "background_color": "#fafcff", - "text_color": "#00284d" - } - ], - "proof_types_supported": [ - "jwt" - ], - "credential_definition": { - "type": [ - "VerifiableCredential", - "InsuranceCredential" - ], - "credentialSubject": { - "fullName": { - "display": [ - { - "name": "Full Name", - "locale": "en" - } - ] - }, - "policyName": { - "display": [ - { - "name": "Policy Name", - "locale": "en" - } - ] - }, - "policyNumber": { - "display": [ - { - "name": "Policy Number", - "locale": "en" - } - ] - }, - "gender": { - "display": [ - { - "name": "Gender", - "locale": "en" - } - ] - }, - "expiresOn": { - "display": [ - { - "name": "Expiry Date", - "locale": "en" - } - ] - }, - "dob": { - "display": [ - { - "name": "Date Of Birth", - "locale": "en" - } - ] - } - } - } - }, - { - "format": "ldp_vc", - "id": "LifeInsuranceCredential_ldp", - "scope": "life_insurance_vc_ldp", - "display": [ - { - "name": "Sunbird Life Insurance", - "logo": { - "url": "https://sunbird.org/images/sunbird-logo-new.png", - "alt_text": "Sunbird life insurance logo" - }, - "locale": "en", - "background_color": "#fefcfa", - "text_color": "#7C4616" - } - ], - "proof_types_supported": [ - "jwt" - ], - "credential_definition": { - "type": [ - "VerifiableCredential", - "LifeInsuranceCredential" - ], - "credentialSubject": { - "fullName": { - "display": [ - { - "name": "Full Name", - "locale": "en" - } - ] - }, - "policyName": { - "display": [ - { - "name": "Policy Name", - "locale": "en" - } - ] - }, - "policyNumber": { - "display": [ - { - "name": "Policy Number", - "locale": "en" - } - ] - }, - "gender": { - "display": [ - { - "name": "Gender", - "locale": "en" - } - ] - }, - "policyExpiresOn": { - "display": [ - { - "name": "Expiry Date", - "locale": "en" - } - ] - }, - "dob": { - "display": [ - { - "name": "Date Of Birth", - "locale": "en" - } - ] - } - } - } - } - ], - "authorization_endpoint": "http://localhost:8088/authorize" - }, - "errors": null - } - }, - "Failure response": { - "value": { - "id": null, - "version": "v1", - "str": null, - "responsetime": "2022-10-31T05:07:34.789Z", - "metadata": null, - "response": null, - "errors": [ - { - "errorCode": "RESIDENT-APP-026", - "errorMessage": "Api not accessible failure" - } - ] - } - }, - "Failure response 2": { - "value": { - "id": null, - "version": "v1", - "str": null, - "responsetime": "2022-10-31T05:07:34.789Z", - "metadata": null, - "response": null, - "errors": [ - { - "errorCode": "RESIDENT-APP-035", - "errorMessage": "Invalid issuer ID" - } - ] - } - } - } - } - } - } - } - } - }, "/issuers/{issuer-id}/well-known-proxy": { "get": { "operationId": "getCredentialWellknown", From 8a6df207350f200856c4b73774bf24e1a953f1b2 Mon Sep 17 00:00:00 2001 From: Prafulrakhade Date: Tue, 28 Jan 2025 17:02:58 +0530 Subject: [PATCH 326/860] [MOSIP-39276] saperated helm and deployment script Signed-off-by: techno-467 --- .../copy_cm_func.sh | 0 {helm => deploy}/inji-config-server/README.md | 0 {helm => deploy}/inji-config-server/delete.sh | 0 .../inji-config-server/install.sh | 8 +- .../inji-config-server/restart.sh | 0 .../inji-config-server/values.yaml | 0 deploy/mimoto-apitestrig/README.md | 44 ++++++ deploy/mimoto-apitestrig/delete.sh | 30 ++++ deploy/mimoto-apitestrig/install.sh | 130 ++++++++++++++++++ deploy/mimoto-apitestrig/values.yaml | 55 ++++++++ {helm => deploy}/mimoto/README.md | 0 {helm => deploy}/mimoto/delete.sh | 0 {helm => deploy}/mimoto/install.sh | 19 +-- {helm => deploy}/mimoto/restart.sh | 0 helm/inji-config-server/copy_cm.sh | 17 --- helm/inji-config-server/copy_secrets.sh | 18 --- helm/mimoto/copy_cm.sh | 10 -- helm/mimoto/copy_cm_func.sh | 29 ---- helm/mimoto/copy_secrets.sh | 7 - 19 files changed, 273 insertions(+), 94 deletions(-) rename {helm/inji-config-server => deploy}/copy_cm_func.sh (100%) rename {helm => deploy}/inji-config-server/README.md (100%) rename {helm => deploy}/inji-config-server/delete.sh (100%) rename {helm => deploy}/inji-config-server/install.sh (83%) rename {helm => deploy}/inji-config-server/restart.sh (100%) rename {helm => deploy}/inji-config-server/values.yaml (100%) create mode 100644 deploy/mimoto-apitestrig/README.md create mode 100755 deploy/mimoto-apitestrig/delete.sh create mode 100755 deploy/mimoto-apitestrig/install.sh create mode 100644 deploy/mimoto-apitestrig/values.yaml rename {helm => deploy}/mimoto/README.md (100%) rename {helm => deploy}/mimoto/delete.sh (100%) rename {helm => deploy}/mimoto/install.sh (81%) rename {helm => deploy}/mimoto/restart.sh (100%) delete mode 100755 helm/inji-config-server/copy_cm.sh delete mode 100755 helm/inji-config-server/copy_secrets.sh delete mode 100755 helm/mimoto/copy_cm.sh delete mode 100755 helm/mimoto/copy_cm_func.sh delete mode 100755 helm/mimoto/copy_secrets.sh diff --git a/helm/inji-config-server/copy_cm_func.sh b/deploy/copy_cm_func.sh similarity index 100% rename from helm/inji-config-server/copy_cm_func.sh rename to deploy/copy_cm_func.sh diff --git a/helm/inji-config-server/README.md b/deploy/inji-config-server/README.md similarity index 100% rename from helm/inji-config-server/README.md rename to deploy/inji-config-server/README.md diff --git a/helm/inji-config-server/delete.sh b/deploy/inji-config-server/delete.sh similarity index 100% rename from helm/inji-config-server/delete.sh rename to deploy/inji-config-server/delete.sh diff --git a/helm/inji-config-server/install.sh b/deploy/inji-config-server/install.sh similarity index 83% rename from helm/inji-config-server/install.sh rename to deploy/inji-config-server/install.sh index 670d8e308..9f0fee5eb 100755 --- a/helm/inji-config-server/install.sh +++ b/deploy/inji-config-server/install.sh @@ -24,12 +24,12 @@ CHART_VERSION=0.0.1-develop helm repo update echo Copy configmaps - sed -i 's/\r$//' copy_cm.sh - ./copy_cm.sh + COPY_UTIL=../copy_cm_func.sh + $COPY_UTIL configmap global default $NS echo Copy secrets - sed -i 's/\r$//' copy_secrets.sh - ./copy_secrets.sh + $COPY_UTIL secret db-common-secrets postgres $NS + $COPY_UTIL secret conf-secrets-various conf-secrets $NS echo Installing inji-config-server helm -n $NS install inji-config-server mosip/config-server -f values.yaml --wait --version $CHART_VERSION diff --git a/helm/inji-config-server/restart.sh b/deploy/inji-config-server/restart.sh similarity index 100% rename from helm/inji-config-server/restart.sh rename to deploy/inji-config-server/restart.sh diff --git a/helm/inji-config-server/values.yaml b/deploy/inji-config-server/values.yaml similarity index 100% rename from helm/inji-config-server/values.yaml rename to deploy/inji-config-server/values.yaml diff --git a/deploy/mimoto-apitestrig/README.md b/deploy/mimoto-apitestrig/README.md new file mode 100644 index 000000000..60ba3eaac --- /dev/null +++ b/deploy/mimoto-apitestrig/README.md @@ -0,0 +1,44 @@ +# APITESTRIG + +## Introduction +ApiTestRig will test the working of APIs of the MOSIP modules. + +## Install +* Review `values.yaml` and, Make sure to enable required modules for apitestrig operation. +* Install +```sh +./install.sh +``` +* During the execution of the `install.sh` script, a prompt appears requesting information regarding the presence of a public domain and a valid SSL certificate on the server. +* If the server lacks a public domain and a valid SSL certificate, it is advisable to select the `n` option. Opting it will enable the `init-container` with an `emptyDir` volume and include it in the deployment process. +* The init-container will proceed to download the server's self-signed SSL certificate and mount it to the specified location within the container's Java keystore (i.e., `cacerts`) file. +* This particular functionality caters to scenarios where the script needs to be employed on a server utilizing self-signed SSL certificates. + +## Uninstall +* To uninstall ApiTestRig, run `delete.sh` script. +```sh +./delete.sh +``` + +## Run apitestrig manually + +#### Rancher UI +* Run apitestrig manually via Rancher UI. + ![apitestrig-2.png](../../docs/images/apitestrig-2.png) +* There are two modes of apitestrig `smoke` & `smokeAndRegression`. +* By default, apitestrig will execute with `smokeAndRegression`.
+ If you want to run apitestrig with only `smoke`.
+ You have to update the `apitestrig` configmap and rerun the specific apitestrig job. + +#### CLI +* Download Kubernetes cluster `kubeconfig` file from `rancher dashboard` to your local. + ![apitestrig-1.png](../../docs/images/apitestrig-1.png) +* Install `kubectl` package to your local machine. +* Run apitestrig manually via CLI by creating a new job from an existing k8s cronjob. + ``` + kubectl --kubeconfig= -n apitestrig create job --from=cronjob/ + ``` + example: + ``` + kubectl --kubeconfig=/home/xxx/Downloads/qa4.config -n apitestrig create job --from=cronjob/cronjob-apitestrig-masterdata cronjob-apitestrig-masterdata + ``` \ No newline at end of file diff --git a/deploy/mimoto-apitestrig/delete.sh b/deploy/mimoto-apitestrig/delete.sh new file mode 100755 index 000000000..107900203 --- /dev/null +++ b/deploy/mimoto-apitestrig/delete.sh @@ -0,0 +1,30 @@ +#!/bin/bash +# Uninstalls apitestrig +## Usage: ./delete.sh [kubeconfig] + +if [ $# -ge 1 ] ; then + export KUBECONFIG=$1 +fi + +function deleting_apitestrig() { + NS=mimoto + while true; do + read -p "Are you sure you want to delete apitestrig helm charts?(Y/n) " yn + if [ $yn = "Y" ] + then + helm -n $NS delete apitestrig + break + else + break + fi + done + return 0 +} + +# set commands for error handling. +set -e +set -o errexit ## set -e : exit the script if any statement returns a non-true return value +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errtrace # trace ERR through 'time command' and other functions +set -o pipefail # trace ERR through pipes +deleting_apitestrig # calling function \ No newline at end of file diff --git a/deploy/mimoto-apitestrig/install.sh b/deploy/mimoto-apitestrig/install.sh new file mode 100755 index 000000000..0c461acda --- /dev/null +++ b/deploy/mimoto-apitestrig/install.sh @@ -0,0 +1,130 @@ +#!/bin/bash +# Installs apitestrig +## Usage: ./install.sh [kubeconfig] + +if [ $# -ge 1 ] ; then + export KUBECONFIG=$1 +fi + +NS=mimoto +CHART_VERSION=12.0.1 + +echo Create $NS namespace +kubectl create ns $NS + +function installing_apitestrig() { + echo Istio label + kubectl label ns $NS istio-injection=disabled --overwrite + helm repo update + + echo Copy Configmaps + COPY_UTIL=../copy_cm_func.sh + $COPY_UTIL configmap global default $NS + $COPY_UTIL configmap keycloak-host keycloak $NS + $COPY_UTIL configmap artifactory-share artifactory $NS + $COPY_UTIL configmap config-server-share config-server $NS + + echo echo Copy Secrtes + $COPY_UTIL secret keycloak-client-secrets keycloak $NS + $COPY_UTIL secret s3 s3 $NS + $COPY_UTIL secret postgres-postgresql postgres $NS + + echo "Delete s3, db, & apitestrig configmap if exists" + kubectl -n $NS delete --ignore-not-found=true configmap s3 + kubectl -n $NS delete --ignore-not-found=true configmap db + kubectl -n $NS delete --ignore-not-found=true configmap apitestrig + + DB_HOST=$( kubectl -n default get cm global -o json |jq -r '.data."mosip-api-internal-host"' ) + API_INTERNAL_HOST=$( kubectl -n default get cm global -o json |jq -r '.data."mosip-api-internal-host"' ) + ENV_USER=$( kubectl -n default get cm global -o json |jq -r '.data."mosip-api-internal-host"' | awk -F '.' '/api-internal/{print $1"."$2}') + + read -p "Please enter the time(hr) to run the cronjob every day (time: 0-23) : " time + if [ -z "$time" ]; then + echo "ERROT: Time cannot be empty; EXITING;"; + exit 1; + fi + if ! [ $time -eq $time ] 2>/dev/null; then + echo "ERROR: Time $time is not a number; EXITING;"; + exit 1; + fi + if [ $time -gt 23 ] || [ $time -lt 0 ] ; then + echo "ERROR: Time should be in range ( 0-23 ); EXITING;"; + exit 1; + fi + + echo "Do you have public domain & valid SSL? (Y/n) " + echo "Y: if you have public domain & valid ssl certificate" + echo "n: If you don't have a public domain and a valid SSL certificate. Note: It is recommended to use this option only in development environments." + read -p "" flag + + if [ -z "$flag" ]; then + echo "'flag' was provided; EXITING;" + exit 1; + fi + ENABLE_INSECURE='' + if [ "$flag" = "n" ]; then + ENABLE_INSECURE='--set enable_insecure=true'; + fi + + read -p "Please provide the retention days to remove old reports ( Default: 3 )" reportExpirationInDays + + if [[ -z $reportExpirationInDays ]]; then + reportExpirationInDays=3 + fi + if ! [[ $reportExpirationInDays =~ ^[0-9]+$ ]]; then + echo "The variable \"reportExpirationInDays\" should contain only number; EXITING"; + exit 1; + fi + + read -p "Please provide slack webhook URL to notify server end issues on your slack channel : " slackWebhookUrl + + if [ -z $slackWebhookUrl ]; then + echo "slack webhook URL not provided; EXITING;" + exit 1; + fi + + valid_inputs=("yes" "no") + eSignetDeployed="" + + while [[ ! " ${valid_inputs[@]} " =~ " ${eSignetDeployed} " ]]; do + read -p "Is the eSignet service deployed? (yes/no): " eSignetDeployed + eSignetDeployed=${eSignetDeployed,,} # Convert input to lowercase + done + + if [[ $eSignetDeployed == "yes" ]]; then + echo "eSignet service is deployed. Proceeding with installation..." + else + echo "eSignet service is not deployed. hence will be skipping esignet related test-cases..." + fi + + echo Installing apitestrig + helm -n $NS install apitestrig mosip/apitestrig \ + --set crontime="0 $time * * *" \ + -f values.yaml \ + --version $CHART_VERSION \ + --set apitestrig.configmaps.s3.s3-host='http://minio.minio:9000' \ + --set apitestrig.configmaps.s3.s3-user-key='admin' \ + --set apitestrig.configmaps.s3.s3-region='' \ + --set apitestrig.configmaps.db.db-server="$DB_HOST" \ + --set apitestrig.configmaps.db.db-su-user="postgres" \ + --set apitestrig.configmaps.db.db-port="5432" \ + --set apitestrig.configmaps.apitestrig.ENV_USER="$ENV_USER" \ + --set apitestrig.configmaps.apitestrig.ENV_ENDPOINT="https://$API_INTERNAL_HOST" \ + --set apitestrig.configmaps.apitestrig.ENV_TESTLEVEL="smokeAndRegression" \ + --set apitestrig.configmaps.apitestrig.reportExpirationInDays="$reportExpirationInDays" \ + --set apitestrig.configmaps.apitestrig.slack-webhook-url="$slackWebhookUrl" \ + --set apitestrig.configmaps.apitestrig.eSignetDeployed="$eSignetDeployed" \ + --set apitestrig.configmaps.apitestrig.NS="$NS" \ + $ENABLE_INSECURE + + echo Installed apitestrig. + return 0 +} + +# set commands for error handling. +set -e +set -o errexit ## set -e : exit the script if any statement returns a non-true return value +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errtrace # trace ERR through 'time command' and other functions +set -o pipefail # trace ERR through pipes +installing_apitestrig # calling function diff --git a/deploy/mimoto-apitestrig/values.yaml b/deploy/mimoto-apitestrig/values.yaml new file mode 100644 index 000000000..5ea723dd2 --- /dev/null +++ b/deploy/mimoto-apitestrig/values.yaml @@ -0,0 +1,55 @@ +modules: + mimoto: + enabled: true + image: + repository: mosipid/apitest-mimoto + tag: 0.14.0 + pullPolicy: Always + masterdata: + enabled: false + image: + repository: mosipqa/apitest-masterdata + tag: develop + pullPolicy: Always + prereg: + enabled: false + image: + repository: mosipqa/apitest-prereg + tag: develop + pullPolicy: Always + idrepo: + enabled: false + image: + repository: mosipqa/apitest-idrepo + tag: develop + pullPolicy: Always + partner: + enabled: false + image: + repository: mosipqa/apitest-partner + tag: develop + pullPolicy: Always + resident: + enabled: false + image: + repository: mosipqa/apitest-resident + tag: develop + pullPolicy: Always + auth: + enabled: false + image: + repository: mosipqa/apitest-auth + tag: develop + pullPolicy: Always + esignet: + enabled: false + image: + repository: mosipqa/apitest-esignet + tag: develop + pullPolicy: Always + pms: + enabled: false + image: + repository: mosipqa/apitest-pms + tag: develop + pullPolicy: Always diff --git a/helm/mimoto/README.md b/deploy/mimoto/README.md similarity index 100% rename from helm/mimoto/README.md rename to deploy/mimoto/README.md diff --git a/helm/mimoto/delete.sh b/deploy/mimoto/delete.sh similarity index 100% rename from helm/mimoto/delete.sh rename to deploy/mimoto/delete.sh diff --git a/helm/mimoto/install.sh b/deploy/mimoto/install.sh similarity index 81% rename from helm/mimoto/install.sh rename to deploy/mimoto/install.sh index e20fb5d70..c81d20e6f 100755 --- a/helm/mimoto/install.sh +++ b/deploy/mimoto/install.sh @@ -18,13 +18,14 @@ function installing_mimoto() { helm repo add mosip https://mosip.github.io/mosip-helm helm repo update - echo Copy configmaps - sed -i 's/\r$//' copy_cm.sh - ./copy_cm.sh + echo Copy Configmaps + COPY_UTIL=../copy_cm_func.sh + $COPY_UTIL configmap global default $NS + $COPY_UTIL configmap artifactory-share artifactory $NS + $COPY_UTIL configmap inji-config-server-share config-server $NS - echo Copy secrets - sed -i 's/\r$//' copy_secrets.sh - ./copy_secrets.sh + echo Copy Secrets + $COPY_UTIL secret keycloak-client-secrets keycloak $NS echo "Do you have public domain & valid SSL? (Y/n) " echo "Y: if you have public domain & valid ssl certificate" @@ -41,11 +42,11 @@ function installing_mimoto() { fi echo "Copy secrets to config-server namespace" - ./copy_cm_func.sh secret mimoto-wallet-binding-partner-api-key mimoto config-server - ./copy_cm_func.sh secret mimoto-oidc-partner-clientid mimoto config-server + ../copy_cm_func.sh secret mimoto-wallet-binding-partner-api-key mimoto config-server + ../copy_cm_func.sh secret mimoto-oidc-partner-clientid mimoto config-server echo Updating mimoto-oidc-keystore-password value - ./copy_cm_func.sh secret mimoto-oidc-keystore-password mimoto config-server + ../copy_cm_func.sh secret mimoto-oidc-keystore-password mimoto config-server kubectl -n config-server set env --keys=mimoto-wallet-binding-partner-api-key --from secret/mimoto-wallet-binding-partner-api-key deployment/inji-config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ kubectl -n config-server set env --keys=mimoto-oidc-partner-clientid --from secret/mimoto-oidc-partner-clientid deployment/inji-config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ diff --git a/helm/mimoto/restart.sh b/deploy/mimoto/restart.sh similarity index 100% rename from helm/mimoto/restart.sh rename to deploy/mimoto/restart.sh diff --git a/helm/inji-config-server/copy_cm.sh b/helm/inji-config-server/copy_cm.sh deleted file mode 100755 index 9b6100253..000000000 --- a/helm/inji-config-server/copy_cm.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash -# Copy configmaps from other namespaces - -function copying_cm() { - COPY_UTIL=./copy_cm_func.sh - DST_NS=config-server # DST_NS: Destination namespace - $COPY_UTIL configmap global default $DST_NS - return 0 -} - -# set commands for error handling. -set -e -set -o errexit ## set -e : exit the script if any statement returns a non-true return value -set -o nounset ## set -u : exit the script if you try to use an uninitialised variable -set -o errtrace # trace ERR through 'time command' and other functions -set -o pipefail # trace ERR through pipes -copying_cm # calling function diff --git a/helm/inji-config-server/copy_secrets.sh b/helm/inji-config-server/copy_secrets.sh deleted file mode 100755 index ad391a1f2..000000000 --- a/helm/inji-config-server/copy_secrets.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash -# Copy secrets from other namespaces - -function copying_secrets() { - COPY_UTIL=./copy_cm_func.sh - DST_NS=config-server # DST_NS: Destination namespace - $COPY_UTIL secret db-common-secrets postgres $DST_NS - $COPY_UTIL secret conf-secrets-various conf-secrets $DST_NS - return 0 -} - -# set commands for error handling. -set -e -set -o errexit ## set -e : exit the script if any statement returns a non-true return value -set -o nounset ## set -u : exit the script if you try to use an uninitialised variable -set -o errtrace # trace ERR through 'time command' and other functions -set -o pipefail # trace ERR through pipes -copying_secrets # calling function \ No newline at end of file diff --git a/helm/mimoto/copy_cm.sh b/helm/mimoto/copy_cm.sh deleted file mode 100755 index c2c450d0b..000000000 --- a/helm/mimoto/copy_cm.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash -# Copy configmaps from other namespaces -# DST_NS: Destination namespace - -COPY_UTIL=./copy_cm_func.sh -DST_NS=mimoto - -$COPY_UTIL configmap global default $DST_NS -$COPY_UTIL configmap artifactory-share artifactory $DST_NS -$COPY_UTIL configmap inji-config-server-share config-server $DST_NS diff --git a/helm/mimoto/copy_cm_func.sh b/helm/mimoto/copy_cm_func.sh deleted file mode 100755 index 0ca6a7bf0..000000000 --- a/helm/mimoto/copy_cm_func.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/sh -# Copy configmap and secret from one namespace to another. -# ./copy_cm_func.sh [name] -# Parameters: -# resource: configmap|secret -# name: Optional new name of the configmap or secret in destination namespace. This may be needed if there is -# clash of names - -if [ $1 = "configmap" ] -then - RESOURCE=configmap -elif [ $1 = "secret" ] -then - RESOURCE=secret -else - echo "Incorrect resource $1. Exiting.." - exit 1 -fi - - -if [ $# -ge 5 ] -then - kubectl -n $4 delete --ignore-not-found=true $RESOURCE $5 - kubectl -n $3 get $RESOURCE $2 -o yaml | sed "s/namespace: $3/namespace: $4/g" | sed "s/name: $2/name: $5/g" | kubectl -n $4 create -f - -else - kubectl -n $4 delete --ignore-not-found=true $RESOURCE $2 - kubectl -n $3 get $RESOURCE $2 -o yaml | sed "s/namespace: $3/namespace: $4/g" | kubectl -n $4 create -f - -fi - diff --git a/helm/mimoto/copy_secrets.sh b/helm/mimoto/copy_secrets.sh deleted file mode 100755 index e8b12a5a1..000000000 --- a/helm/mimoto/copy_secrets.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -# Copy secrets from other namespaces -# DST_NS: Destination namespace -COPY_UTIL=./copy_cm_func.sh -DST_NS=mimoto - -$COPY_UTIL secret keycloak-client-secrets keycloak $DST_NS From 97c9ce1f1fea244ca03f0c19182afd26ab081905 Mon Sep 17 00:00:00 2001 From: Prafulrakhade Date: Tue, 28 Jan 2025 17:19:09 +0530 Subject: [PATCH 327/860] [MOSIP-39276] saperated helm and deployment script Signed-off-by: techno-467 --- docs/images/apitestrig-1.png | Bin 0 -> 59628 bytes docs/images/apitestrig-2.png | Bin 0 -> 71183 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/apitestrig-1.png create mode 100644 docs/images/apitestrig-2.png diff --git a/docs/images/apitestrig-1.png b/docs/images/apitestrig-1.png new file mode 100644 index 0000000000000000000000000000000000000000..a7f36f6f0577259996c06017c7dbefd8365e26d3 GIT binary patch literal 59628 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 z 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 literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Default/Registration/Face.iso b/apitest/resource/Profile/Default/Registration/Face.iso new file mode 100644 index 0000000000000000000000000000000000000000..5e84939bda01c0307712609be6b01958ff2c2a81 GIT binary patch literal 67087 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 vAE!{PUUA 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 DtcYSv4v;oaf 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 HdVl}f+iB^F literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Default/Registration/Left_Index.iso b/apitest/resource/Profile/Default/Registration/Left_Index.iso new file mode 100644 index 0000000000000000000000000000000000000000..46c4112fae55248c3b194bf5214b9326185fce8e GIT binary patch literal 98779 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 literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Automatic/Registration/0001Face.iso b/apitest/resource/Profile/Automatic/Registration/0001Face.iso new file mode 100644 index 0000000000000000000000000000000000000000..5e84939bda01c0307712609be6b01958ff2c2a81 GIT binary patch literal 67087 zcmZU(L$EMBumyO1ziZpJZQHhO+qP}nwr$(C?fKt(Q#FeT>hx(iwXz<&@<5k z004r)0RRI0*8o9(!B3&FVJKjL2tof>A^)G@Khxj;kpHg%0s-6u^8e@mKOJ=RKLfO- zJU%`QWEkXsGP0?&hrOjeBmRFf!2gS4|DpMR6xG7q*zvzW{{Q5A0AO(N{}2EG&dAQ% z@qbqU0RJDwbTo0o{|^!WLnGjGfZzX_ARzx~{wJN$pWL4U0Nwwv|5E&4s{bYbKMo8I z2>5^FPa6P+pI=;D{{P0GA^`M%-hhC>|78XIGX{VK0F+kNlay!FV`OCgiwF3hZ2*G2 z{AWwr3-jI2a^{|sb!2dny=%hzVSDf2pte2A#D9S+>tk^+%mm#xyzupi@k@vW>(wGh z2OAlS6p_?U6ios-j1m`#t%PY@7qbluR)fSoMVP4Ul&|PtNd2rz_%#8ie}(y_5en~m zJF%Pz3ywltrB{c7FI-8|789r(sm3H2OCb&6DQh1vCO9dMYN(Z|viT$W$P)I13NPWX zlyt=kK1{LJO9YIYZvGnpVhQ$cMG6=@`$ei6=#UgwSwkdh7-SU6E7Jn6Pv~-mn zd2{wY#MamkcIh)$|7jR=>2P8quPzk^UWK3g{R%gfrkF@wSbQyob?sZQVXz8#=QDs` zV&}@skugJ^SBVRB2}DN);ZEVVX^xs$09w~?>yR3?HgA|2ZpxE3DqE#JrW|e-5p}!% zV0rkqnVH$n@C}{g?$yRI+4BIphT#{ZG%2rt(}Fqyf&sAsERe!*w+YkFX7)R|*Pl3t zHsBBFMuACKIYj+<8LE8+vZ^(MZFJs zp4V(C9SNgEE1BJY{4gL?x2L6kQr*xNwfb|EshRxkaAyx+a;qUKiQw~xUsEl5t+aLd zGr1yOBytcxGT5y0`W7Nux1DDp4#_qg+Vn~5^#_8h6S(eQSH)DU#w@FZB#Xg`ZAv%Ce5MwnL8zXM^z@}3gUWn{H8-+9t zt+0|na$hDWljW#=IroiPlj6C&b=CQlGNjsirr2&4I0> zl`*#zW^q$1{+uYTgPGrcAo?qrN5|}UZeu=Dfd*{h@K4ZV-kRBf;R-5la`ZRSKFM|= ze~~P`q$4XeVDc#X-?y|!Nulqs2fE7|7uW}=xb16a*{A+JJMvv(F2K8M0n>w7JdX(N zWT^wTL^D^{dQFTURgY-DqhGCkhf>FHdF`L%)^1;cQ8H>6#_5oXBCrVE_(h8wQ%!Dy z$dsfx`)iz=>I=_3BU^Rh#rd|kdMg4#KO7xY;Mw^NqrYo?*C}tV`e{2e+lUF*pzht6pM5(tRRJvy_cH^7NFVE;?9J}Weh{b5MV@3zeH^$E9x^_Gz zP+#E&$qYycFTerzohVVf2CeqW6*FMxS^WD_lC&4J9CP8hu>r9rcf8nqi*YbL>a$@2 zJ~h6SU@h{#Ml>9atEtI0YOv~_Tb)Lft_pu3>J@CrKzh|!V1EQ?ktB*oVYU9<$Hk2H z2{1HNZ6DNNq(H)FFwSdi#$)Uz-ydYEHM2$vo>JI~l{3|cKBw0F_z6V^`el@^|C_j( z(26O{KVC}L%XiQuF0~33RBgIX66TE2XYK`YdMlz=vwBCQ^ssL)Of?_*yzO={+#9^` z_eTQtV*9rmmIXj5Z&)wEYp@e}ryVAb)#7P2uPwrSkz|7zg{5>do;z(F3Q`Oit-xpH zvTBAtqcC%S$e6Of=5knR^;10U8 zo?GL}fcqUM%T&)gv=`o)^uCfTPZ!im5FP9LVd4k4PDGhhI;>=_VM2Zj;VUKWgfa6B z?ev`Y_aqQ4qia4;=Mcptyc8HV0YvG3<5lu)7`{c5DUG7fy!n=yYFMmW(=&Y7VX=}7 z=GBKnPf+;~o%-yN2I_y;J_%s3!yT8vj{#?Lt?pUoMZj!%{mq{j0>h;?_MbRhA_54! ze%>*G{4=ChR4VT$*hCb1VS$|JV*5t(dspDRLyF6QlCqV`7_>QfE@7S0$9CavYV%_p zPxX11oENTUj-DJ9_P7LZT%e+F^5DPkqHV;4io7ZRac)!)Hp%luJFR&w=5a0u__z#egs5SF^0GYm4C66$f@fCxw)`E_@`T}P^ zpWCuaw8?6{ef2FTe_4ox>o8Z^qD|ADjB)S?JPy>*b-KasuRXB% z493lK%5^rrhQtlyl93Djk5E-8(Ex&Hg)M909!gA^HWvM_DjBBc2}zJQ#kxO5J&F8W zBN+o7;tDsgw_PBGf~*@vWXzER&SEEKj9hgE{FcIaznn<+x?`WTwPL2NFT6JaPo?lw z-Odb}yNYCzbf$Wz7l7AYh&{fN{LUgDKRM->H3vPV7Br+E5!Pc`w@IrWvpE9tu~Q3n zKDz?cWHysK+CM5a`-ak{v~|s(X%sGDPm>bXgJ{Rl12eduGJ3L zrWVmv8@-ToY65$=V@E!yzSR_`%w$I2q8Z_s%&wfhUa~8#bT%iM zgElOf$HIw`;=EK8Xkt!y@TQaqYggTygKKYY5=}571J=YhT>Q3MA>Ty(YB%m(t0Tr` zzP@O&r*zx{3UdgKe}pf~n1Rw<-FP9uDm1}S&QtCCqKiD{SsDw$XTPm*1A+onMbnUp zap;Nfhu~@`;rF2o%5MSL63{V@sy@HNc+GC$KQ0@)!)Z3vkTy#OhWr+qES>3GM0A$+;}#0YAh+iC3v zOx>)lz6+;8D#g&MJ2|U(@Y`}I(v48a?;7_bvoyi7H^5T-b@% zCzW6Sn1KPKT@Yl8A--lXH>Do+BO*RPfxwK^_4iJ;!NPM*KwMWhG{T|_NHe!!^9KM| z*e-y~!HGv#g|>tVRWQ)X2ujUY`ja^Qk(>xrnIFGf9&hzbi-wl%v)-7Mug+&X3a=kx z+#kjatmcQ$%99n#(sHYv`?fgIIS=fhl>{oNU9}>OV$Z{uA1wJd7yB!Sc-&HB3g(L` zF5*{GWtE3NB`XGwbH1g5|EZOv;7^u9f_j!dr;ezxdu-i&?OEae#PW zEx?hgunhQTU9uQ`VHY8Sai=4*`W;rvkWd!qhS;-YA*9`R)p?nh0&9ad<8%8(A=5Od zbE$a~KU{B4VBEmi^tJVd(};1`^}#jAGH{RpKh|3|7r=LRM)Sdctxz3`f^gJN!zYaQ zt(eNV4X6=b|Mnli>KWJFCTj#d#LiNO)2^1gs|yf}VjoGrswOImw~~4T6MJGzG%;Uf zi`4+t^fs;|t2M34MH@>~45Yi2L*)!MGCJdvH(ZN@VS4W4(zA*2x9aU*Mhq}PY{sAO_}I$2d; zia2a4EY`0yK^Z>iDba*1>#tEcYq!4vHtq6NMo_N0eBh@AADTcXFXvQmqyEQi)u%y!VyfzY{2m|n$6TF8u zAUb--MQS%7X)PES+2-;AX;@MNC=&~hjSyKiHsD3)TmjLk25l^2W>9;dq*RB@mhRCN7qFAcb$OBD zcd=65ta5#>s->|H2)!TZJ!d>KiTx?#SB^cNI%7<8@Y|A*Cub8i7J(tD#GImd?|^I% zfgM~hb;3@_lVCmEYUy*fO1&_MDE0?2YGV>5?Fl`i{^P}{4^c!1-_rj~v+P-+UVAz$ zZ^uxkW;iW-S=^iFWNSXorzWW2pJuUFIbAi`JSotP*}Q654?-I3&$>KfGKw+#uxAbR zoEy%>IdsykX}ERYXKRD>jZ}H0CuT*7Iy_G}g@r1MGv#k8h}ESenF(~5>-!Zk9_xC3~~1$<~Zkgguv%$Vy~=*+?IQ=OrE zdju;e82Ryky#q~4@b?gDEbM0EQQIX)({K>4@@l2C&`)`SExtp;p15QaZ*xIC2ghc4 zME71iro26^i!(uB9n77nyc&2tYbzTO{rU$0g%bOA*deCAbXq zc9fu)&$GJQfYdgS)9?*YC>^7GEQ2Fah=Nb*mvEN-4EEYtxaL&;u7gG}XQs@We7m$^ zs#SPoRCzWq)*g>dKf#vdb@h6@eE+Y023#j|THd=ypnGoZAgkV_1#tMO-aX00gt1(m zv+RY6x!my5C{;+b+6%COt8BS#hamBEe>dr3?^;-KVptf{V6puQH&>urm7-cfGp2S% zk&bxxnd6W!0@`D3)C*8={c7_C_l^YOd(u}iGmgk3!5aEpI`IOvkAz!@f|b!~hV@x;i)F)V?`=XNTQ`RNmB!EA`F3z}#E_7nj{YWcw_uiwDa zr+CoW3kvYr3;6-mTCCh8-LV5gh6wfQq;&uZbZMvia0&QI=Ee)D@;v$-W>$Ar493Fp zW1i^gnoJqTW&Rhb7r2HBY+#e)Y6N{l-)$e;v6t`X8lIOWaYnyV@tA&-TmNT}%iARR zir&Ay&UHHVo1BNdSKDafs6k6y)J&>BF6QWkQQ!vLgKe9VAaGk>QfQvY?RWIV(2KsG z6)xu(BNU^)bDHl*BCQsm8%yDl-wM%^*Ck^!p}ayGZl@{k^J9PmD4;{@onNvR%w*bAnpYw zIwUMH-flrt=G-Hy(^8T%HLs&yrf+~1N@6{bNSfic2W?RuO2RX999K+oo^B}cd^vFN z747DCveOjHQ&ZwaK~e#&HX9bu1Q7}lA@y&|oIE=?tG8~1|FWMFj+4#(qe@5Xq2<2p(jCbGoNmq&u%LuZ?&PFLZrGD=wT=40@0bAD>aj# zZE=n;e>CkdpI6CMroxXM4Fc4vC`=w&YJ+B3@twxqG{$;i=S-&Oe#9WkBnT0sUD8q> z)0G%7PRR!7?NCJOUp>8@L=G_E3x`CHsZ8I1-xw-p;{JnkI->7(A{FITpQL5ay?%uz z%5G05c0q%LJlWi~!?b+PCS0n>$YNvJH2pL}xSFR+=jsxvLptB&?jB^u#x zAQIpv`hI}Vw3^%zq~f!K&fSEKEZ-1mRUEBA zO7I>FUKbJ>^VM_qqR%YJFq6nWlMkO%xE!v>pa5UrJ zHo~(n`K)*A@_dyNKn5EdN8PK)PE|It_3Pp)?41F|G~}*2&MS~|cv~yb0KSVgiIjcT ztgvl%7jHSm2^Sf4V!ea-Nyk*R>!5L8zJKvkDB`sB)OEB&f94800%wEFGM3S4B->ns z8!zYCYQH(hPdLcD@AOHYP4r0B3wUfUwg1rv56w5g$yKx3i$lHg=Yx@JQ)hc!ghHZ? zs#*K9lffV}c0J#@ld>N-0lh2giJKGmuV7ii2)9XKrb3*X>B)8~hAA1OzpIcNeOalzJ}(^fx4o(ujW~Mmokjm32t1L-2RZ?dt!Agw zgn@~ZTH*qc;1{L#!o7N866@a5t;u))n`=mgeC)Kdqz6)VgZB-r5GoB~lRZ1e;1_dn zUL;CHbtfD*u&RiMW8S{A-wW`x_1e!e5oc*r>o?UphjTZ0K1dw%tgvq-$c#FMU?OM-n>KT(TPJs~`~l$OIvgd`lfwBA;2KiU>j9d-`yHMrq3t#n z$wvJLC&pL2;!<@a49Q+t@Ni=A0-CM##R{b)pEIBtQ1-j^m(d!7%o4^mM!y4+e707& z9rYezgKW?DXdqg!Y_%#{YjTa@N&KTCSwMofk-MNXNw>i<3BpxmG(o8VB^^Pj@5;gg zRRAOv)lvaK!MGu)nryuJ2ELHRKlVxA$?(Gpf`9X#gt#dv1`j@Zn`9UM@85PKa^rTQ z4HewKa+GXzdE8c_IlhCsu}#?+~V}Q*XNWWKpuG+Dj~-pI<*v zy_q9-2OZm;WgZ;I&0$moOQ0&OIiXA(kI$K?gbtv`@t^Ob{40aPnA5!d?~i`pd#QR} zQ)xJ{Phl8@`zL!0l;n%krVin0a$J}qf?G>zZKJm%cPWyq72cNuGq35moa`Rp46X*v z?R8ixrTbYcwpw$hsvmAfZAW=76NMG=*4|F!5f>>qxV;qIO%*2tj-;<_&qbB#gn*pL zlZ56xE49%c-(T^pGZ!6Re$*G3E+3;qTVu`=ov=VpPcC0y#5xV{!~70uS3f~yk}A5w zRv6yI$iyNd8o9n&O4`(60))voBr>1t`S2eaF?_)7v;SUPg0PjvW4OG<`q^x9J%G3P zjj5zvGYUQyFU&&%ib)D;q~8u|S;9A83JDLFEnz3oGBd({`=8Rdd7ESd4S)1-Rg>iw zKXu?qa2nA;hh#T2HQ$9e+sAovG9s=0^TzdV_}2HlK@d*k9iH4MfBMM2h#4v$QDi~c z+K=gZW>ip~Hs7J@X-^Gfy{hJ0zn})-jXxeRYBm2qAheG({=_e{Cf6ogRQY+T@-Yz} zLbsV7$DPggkHuXpo}0Lk#Mwe)9#bz4{K;B>FZkWvw-2R;mP`!7CJ~92 zF9Q`wRCBv96Y^uFjsJEjHxN*J(}nW9|2FQL=+)fx;yenv0dQ$ioiD{>e8d~uM`c1OR6X>!x-T=NVcy>s|Kd~b_ES4b7|`?d}lLW)pjQwN+DSS`fF z#p^%%Kg;nb#GwZA^zm*i%8A22hcaMmBrDtNZQ6#pUZ7**i!Vij6g4$6ay*paLih34 z8HpVGh7iJ-yEFpnWMw?Ol)!IeFAj9?)&^NmW!uL-X6_d=va;@=8K)%CX}JUIc9dJ{ zTh&^K+X-GJe3LAWF-Q*UWw}URh!2Vjfenb2SA&)rfyh*6;q7va@x2h6g3Fi3U7#!_ z(na7>&8Jg)QcnPHaiCdo?k^nOG^)0YfBM1h;spd&fNTl&QWm` zH3h>$%}v=kd~DuUOAnE>%;F)ZO_W>IJ&~YOFfn+m9{Hj?jiS^ZY?nNxE6f~nYB+>L zY;gu<%^iqVGD-444saX6H2dNB1lf54gU3~VCjFC;g#fbQnn2(STKSbZ^R|GedJ~i* zXg#cpvf57HjCN=AA=G2E$gG5tYBIaoQRfEbpp@v%DMJn>lzKjTXIs{#|BSyP=AJM>otR)bu!ajC4Z*^JVj%kbT94X{Fn&Qex!C?iV8qwr zsEY(;t$b~Q|9c%O?RoPv7(0ByPY)(Bp>RdbD*R4a;&hk&o=3usNR{MQ+ef_A+rz&M zCM`)QA+g||WJ%9Jw((`88}${Zi>QWBbK--95p$D~i@K%6P?+1wvyeisNkHDMgf|nI zx3Zzb-GL2Fw2RyvsMGk9`cr;0X=n&j*2g=PqZ})U;kX*e@HD?rYshHo3YqrTIJ$4> zy?>MwSkat1@FO&!M2F$nuep#Rn>E3%{$5fj6tw(AnL#tFEF~+6s|THBl!6s;PIP@W&RV>KEXl0_dy{>dLjP?gk+%tgCy^&N>=!uSwf=Ps{!BKe=w3&C6lP!ie1VN6tbO!<7QV z;<*+X2`sC%ZRi{A!ITgR)u*<&5V^BWE4dSxx;k8blIoC=H3WOpdcZ!C9A?Elq%oOu zcetdaf8n-WF99i`^kQE8d3^6+bL-voJ9+(5^@9y={PJ1m3lm-c#huq1Dxg0xDakL; zZ?Bz|Ht#8>Xt{jo6teOFAgeT7xXzn_SO_C1_=ih%QbO)47-#S=XvnsgZD;tH@+81w z_-#fJjb(cY*3s2CIPo#Y)z8({vT0d73p1n&D;ePQiU&~@Ff|yE^V4r6z&-k4%=rAg zGd?#J$AUIW=?|Izp?Cd5d5{(KNrbI1UQ5!0!!|vc0wvunwGp&*h;#6xP02dG6Y43y z>u|cBpW3!8zy~H_isc%#@wHeBD-x$(3xUnW@gEctVAbhsW{;?<_NK7?vG#3NTs~^l zxF#mqNht{ZQzEYMpe@G9Q)L9$4V~>tJuv4sMN`Zlg7D4(EMPHRmK?{ih4!ljf1;$%w0tI-9){`I#=3V6+obi4$sI;DcGhiTUnUw*686 z-DbVC2iNDu`%`2?wTW!WddC@D$1Azo%vox*H+Rwm&kA}$Lr8pWMK8oDlSqvN!1(*9 zP`Qd6Am&1(v&|UQ&9y4h?rODpTM;=>3?yO^|Kzs{`};DoOs+2^CL)}rw)s#}@{-k& z6a+uE_e!dQMv;+*;Bi)U<#k~b6UkSGLM(he=9yIe(iWFV>5OERPCm`Yp||5HDK3F?yW%7i`9 zpB#GK9T-h-b>P|ej@$<4pt1q+R@EPJef=Lq0wu{CnM`=H#r^4vxU7_bK82D>6Z3D5 z_=^7rT`Z$A+4`Ml;ZgS<`-9lA!F+-Yz%av8W*f1YuZ`*ZjYynI7PD{%53;absKDCA|HdM2} zK#N7wRmI>}ExOdrDrRZelm->LoWJEBIlf=8CRv+>7Ec1pyahM=J|v#4Gb03aUQ-77 zkXLdw>86)po}#DB`rwP%*D+q@s-^+Vj9FXFvjkbZ56#t&h`r*~BL#f8BFy(jYp>@M z!VB|DpKf~&z5FTCVA9>1&hhB+udbY%Gk%i=T@TcGiKCqQx4HJ5fw8n~`E29?(bism15#CNU zxRrz0XXcyNu_G`+2YuE@nvf_OdCxUQ^rwqkyiQ+;l`cO{ijYWP)uM>Ovz)=LgUbog5oD@W;w17-WYoW+cKbDh_W^5n~S z_?cqm&r7+hbR;i}pgcRb2~&9Fb!0LJihhB8u()(t;Z;nUsy_DCd#j#ec<|vM&#ymgOsxJiVr(y2HqkqM~`fpL51o(nG z*9)W8O1VJS+blae_}@9R4z<*ckRz|um{I6|L}_f< z@q@xJ4kBvQ2v5QDv4R!DY0TrzMb8Ms!2%cu%jIp-y#iPnzd{aoOsM()n7yoqX)c^m zDXA-k^OVs}iO`*TD=*%zJ%lC%G(=miIEn1g(eY!QoP-~IHXs~{C=@|Y+%ibt+t-K4 z!{p^{o=pm(PNNrIt)rORgk0)fK>RnR8@nOMqpe?#j;xqB;Q{?BH1BsdzzWY~JqKJ` z3d9yTP(FXPMkE*!!mcR_&|y@*9lk7(D;35A=Y_x#SsBzk^&Bq`I}j;FY_ujI#$Xg- z^V13vX@0^L@IKewn_#;k_eP*=sZS zEB48i?1_(}SG5amMT3yty^H;iwF=E7dF$Zw;41Bvm&0Vj?^OyNu<-KLrhwf5^I%eV zhdY~Co%*g!xbeDIdN2BM<9VxM1(#L8g)`+yprs3}#4AhhJM>1lJi9+T*wGkXP{d#7 z0!;H4a*M}6Un${jE?o36bue@|NssL)Y)DYGe>a852gz zn*MX_PIY5ogW!7l3NTx%p1ItkViP-;TgRaDW^EpdC*u!s;Is?}fkg~O=I*&e5C!Q~ zC~$@wsg-((USvM<3BR4o@=ILbi~`%{^IyN14N1ECUTZ2IOEM+vp~ltoV{S%dX5M0U zftcjt&UUz8RBS$UlsW}3?J4dGL}dbRvp3=;X&Vz_vj-y@x-YlR@@)s*O7I9v%!S-LBf>Pt3agV?UfwSShR{Ln55Xvj6^GUjbGHWKzIL(b%q zZ4`ZL>?osgfd=EQ%Rs}xhsJBu5pdPWf59|X3?_9gFIMQrc8h>%&Pxu)(WE1^vt!C9 zqm-5lboh+sI5GRrJEI==wyyj}NdadPEqP98u=0@O#N`6d&A!9XLe7Atf!wAmKf(B# z7}sLOk7+D<@%;i%)DRg=8X@Mzn&V6 zxR(vJA!)N6+p0a1d;%=5iFm0zx~$3i;RM5mABO>Y`W|nWE7F&ulWNg!v(a?IlmX~|;sms$IP@YshhE#3)(ikoyqYq#TPENfIDMqinY znIKUd5dz^evMbmCyHP@skR&YqV%(qdV*dR(YmO`4ZV*qY2#=3pKoMW%!ZUOvger`U z&e@!OwU`0T%npT6oZWJ}Hi!M#<|orUTTACRM@0@K_wQn#~cp>RpEQSWTY6p*zMe!wb1Ku=0pQQ_ekE46xb*@UyKo*$}y{bnn<6oqBCU zf&7~j!jO-FJjRF79jxy!9ZTKz*xa~Mv7UV}Ia$|a4;i&b|E$J(v7Lc*q`!^w(& zj}vdaS*KaqUtA-U4rdPq^#XeHDbt4&4$l-Zk9|hAJHdVY6XJur?!Lau_C~4QgVRWv z>98u>o@^d(H_Mic;mUNXO_f!%nz(vKvG)jbWTkXlqGD17WP~viYvnWlA$4T?abcd` zGEs3lhCUWO11nzwZ5wxrlwe2sU ziJu;s63nNtfo6#^h0!7JMEtg_^b7;W%8!Sq+RAwx6wt=g7F$c5ex$E^Z_JK~4-LFMuuh z141OaZRs)fG~nT=#STDd$cD-jiVz_A<>KtkN9^19#W#kgn&Wq#jGicV)>g3hB}Se{ z(lK0~Wy{_*A;X53ZpPVA1h`lAud|ki+5{-Y4O;X;&S~KZ7z30c^b)55Wx#5RK^1yy z*i7%--+tak*K^fp%wg(oA5D~t6tq3?)cq~Oz8Elm*(|7lQcCacz1S6eWWCiLz!?lT zM_cPR0WN2N-oL{3?(3D?TfHC;%y5*{sd5Rm0MZ-kdWjd>;`w(Xy{ zB>fs~jqX63_{mq|RMw^blvmxl(_~XjtIou7cCr`--mQ1r$XJOWK$=%ABbOLX%4$|j zW(*u9R^>IJ4umW0vqo0F!apm*GRGxa0|DuzCGTzlFfwkkx!xoF6(yxb>p7@lhacRr zK`vrkDM;?gV3Cc?K`IdlAkMI8?R49ww^z~ZXD&1k7c!oWtA2NHx~rMb%d15e*K_pB zn+XSvSf(`wx+K!SfI*ljJO^ZD0JM8#k!8F08GjOMg46a*DQWs z7B$9aL3P$_$)Lmf%o-Ej4^UGg5i1Wc~=nE$JeJ|LARE?roQU_v;PK}JD=9w&UuDt2}Clr?Dd|u$N1P3 z$%V#d&i$e}@yAi-$L0#Xv!@NXUu?t$T|4%2wyn7E`-@_AH{56xCu3o8z z2S*FC0fnbo@$4fWcI+2DR_>|+T3~l5%MJ-+;f0_2ibsFV@La!{0 z1L7|RCjiiSFNQreULynurYyXPXVfD~O%@-WJl@fTN!+2R9@zj@2S*&@$%SKX^M`84 z-Q$`b;HUd;Jnnm<4i_FmQRUmQN|l|_$+>+fHH8r}jp)I(9q4VEAAgnqD)i_U5)fmUnWv`unjfy$ zEO>+y%PO?sbPFu{)a`R$mGn5PA;@I*nGaLnGn4YOtuwKt@ca{F_MF0CR!!r5dfjm5{V~7K~Nk#7scQfu?7W2y_zm zj!^SW8-@^B9s)<{a#hjc!cGt(tg^LQ`_wK1ClwPo0D4zYEHL) zzbju9{YH~GMgCYQXZfeT-&{SG5DX`8PWV`f+R6hO z&^@K2vVa@3p6*?WNr9m(f(gnJ1h?q2Z+-b6RNzTT+qAXQB~!f!KBNz@5mBpaQ{-yU z#6z`8U17z!+|VoB=;jk-MPYS#|IN6(`S#zx<{7qI=*Y8E3L*wOCftamh4+P>JEZlr zm13i~<#{Dbms?WIpiX$BLK;>TZ`}?zv!CkU4#O)m%(c>qxN(1D`pU+Bi>Uc6_7o`r zvn%Aatb-%LLYh^F70EHmp|ekh+0d7wmZXx$`5+EgpiR)u_d*>nw9y$*ga}~VM`U%H z;G4eAV{LTlr0D$dxRn2_q|o7PX`1o*5N{3}4}DD1Z)Pl7_ehIXYRjrXSV~L*5v*HO zoZNJyO&l!4U^lH!l_>^w6-OKn ze{L*hf1Zx0-WyCm`kIrQIpZGRZvMfWWm9%WY-KFG`pLcDS${=9wbXi?pjutimEM)X z#t>I&IR&++!DG!lO<>vu!Ve{uL$qe5YNh{T{tD%@$at)I2{s*^KgBOJd=>{O%9mj5 z%{Wkt`G+V~`I?6MT3I$vZ&&Ymdd&0u`ikb zwrquii@tfaDyn}RzNwJ<=cRptgrH{e8_x4JcJj_)_`(^I2w>~@uqi_GZuqlSf>5)> zB=i1PmU%`8jak2-%VaC%Ou$FBBzx3q2~9TJou{im-+X!o&kL32H1I1OKLU>xE~19M zIO^a#l*3CPLq|&6m;=g@^0`G*I(k@O;Q3ohD-Q1J(8jf)VS`;il@O*`i1*f|6^#k! zIu)O2iYFS~1bTLCK+flTzqv;Ux#Dk8i zd|jd0&NM#idVH_j2g&M0cuH$q(k++ymg8C9EUzV;@mwH2uvxYeFn%*-lXwG8r>N*z zzU?xxUTn${1kh7U?$6SmmV=G6r$f25y;Tl{NoSA;u54%s+8lOcUwteBpO(8yG#(&( zc>cTm%gMW9rLC6C3Ie0&i>P9VupFS3M4QF&V2Mt+TW|z}yeuK7EGSQ-lIS-9T{UD zW0s_yMbRE)oNMGc*wQ^NVGB|3pYTsEu~dv@bt&H5TFtoGKAM>QdK{OESZu)^;IYN& zA4`^(!3U}lHxYrd3k|*X`@3#iU=t)NT@hvF*grh6k>Y(aCRACC%`{-r{Pdy~u7C^w z{COT(!M;{$TY^ALr}=GZp11>W)C(FZh^$W^0c3^sC`G1RK-IJ`u4Bz_LNN{a*@m_^ z)K047o%8bpr9KA8>~E=shU(=keewnPRlSNyUGRIoh(Q3cpCKQ&Gm)sQfy^1m`ECrieXR z$~Y-P&PEc;3o|;oIH704-&8L~6l-;r5TYPTY=yjdqfy#`HbbvCUW%s_bx71yocQbZAhTZ zCCF|Pc8t1ESM$Y6x=tr2ctF>}@8dXuq!hrdXbRo9@AF2z_G|Q#9&lWIw6MD?(LDO$ zX;*s#`0|BL3RQxV73yDywwmg(oN5>{PY^}M@&Hx{m!IJ_0GnXBtBeWNjP~BlhKq$h zgh%E?i<{VnqhjitSacK1-x5(Cb=Ou9cGhZ^FBA1}tD7CYG~AS7E-(AZRzEfedI zXT6@Z7n}WFxeC9tt5>wSH?beBw?Le)#UD*s=@MioqZ_c6^d6<#Vem+K8SfSUTyJT3 zahV$O0lbC?q2&aHG$l8L0^#%cDyrTUZpZc~C60c-Q+5_Io0@I-{M4kByAF|mqBU&j=Y^?tZE6iOV z!Mk+Om^I-uqa`*+Z{X3bBKiB~GJkps6L~H7eD4!p2YRig`w6CF!F5nftJ~R5zgUi# zn}M4OLB&q$F>}$$-w%RfX{LQ56`Z55-UdEe0m;SE{~Rj)=V#wkP@y(trZzRUO8W|} zCP1!l{0W1#p>kvgpBi&cZNa!|go6V>4p4ogJXMq|@fX3L+$RioZMIaYx6h?qwp_CZ z&Z(?Evw_Lal#T9CM(}$)Q0C^MfoinDEFP+ogb~h>uyHne-UhY(?oqNrGbulo(y%4F$dSU3AMf}R70gVuj7!H0c=c%-p0`=Ia@SW zlC+ZgkztX~CU}1osW^CD&%=lqDmZ9yXugi7_KCnY!$>rwic}vYHy8w5DWwG=#sbNH zS;XFQ+Pw^kX+v&+eJJoQjKJ#$n&UPp@Sh(Wn$}?2oUfn^5K#5ypN#<@0m5G+6}w%Z zX0lB(yi$kM@uh;vi4O=rJlBLXW`vUd4~ zHj4aN2I*e?hkucV^3%tm&;_beYN8k799<2A?NnTL%(jHyBF6==Wt<|ZtQ3wH+m~2u zvOK7?55>+6qaGolexYk#J}1*lBAv9n@XSkuKX#6^dNA4fW8$285YIo74A(UoWk%nh z6un_0iu$9lBvzYPR`1mqmstGk!X$f1b5**`_s~7D1JmR>sJPxG+O8MlYm#O*_TPm} zqf~9HgL?P`zcEhgEc0S3LV%{{x;;VYN4)8#@SrNajq$o8;8zBQXcYWpRJsZ2GkG`u zPS!l?*RX(BsuHtI@~Opx!@9qgq@t{!B*O&)+^UV8z%tG}`}!s})i65udQ(XL!H+cF z`WIOKvnJ$VEAHg@uW;1jsY~!I{MXr4($&Tp8Pq-|miYAMsLr7_BdGNMNq{qEVhH?{ z{}hTmq@9>)V$OZ6gZ|%DI6}sMr@7ug?}y#axPT9n-`MW<4mF>=Yz(v=&KSho&*Kj~ z?$EU;PzMm0#=og=+*2)qL0ldO)=7FLblg6D<}W0OXH6rxzZOJut3?`zrk~tQ*R#z&Wy%ot0?81|)hNxl8O6>=tU<)BLA7G@0UrcFxH_yGr<7wT*W18ivA?#{K zeoRV37NO#;rnpl^@|(RaUb#H<&y|Ysic;^^XfHAhq|soU{T8+5;!pBU0D$u_aRXfQ z&7=p5JNNQ)Z{Y;ZJi7)uIP>3EAj?n10y+>g7IQ_6@W{_Z=Oj=Q^^NW5jM7fC&}AU; zm(pmst&J17C1u0S+%m(ydyGbTpWlYK{c3T_x`PGm?1d1jo3Stg`@GW#?M;G`wZqdO zK#6x~?Z|wUp>E6>w8KS&1$T9XmdtxQ#z9L8m^06$?7=Knnx4pS{d6PMeGcQbX9fvR zm1(g(n&-VvR#q1^+2Q+d%Z%wS%ZDEv(*H$A_!TzPKuglt)1&`f@3NRl;R|huA>2PF z?UT?|$<8Q&(SUVW6=Oyhvn~vQs9$^C*B8YQ6y4AC9u*1=Vv6sN92B(;9+xLYoxacq ziofi6c}MMy{6sjCX#X=24>B`4nZYD=ozFpmTe6xOMQ+S-^yybbX{Wq$Un$=ExEb)j z#T`)oUjv0;(<{`R!u2Z`6uu;Hh}%rv?#aBJy)(m|k#kb6aFkXNi}C8bzPXYuR6JHb z&%zQlA~REciUQe5_twKLg%+wVvd^~B-w@qk#%;=`$pgA=*jAj+58jYVZ$p~bw#mp3 zDGHVO4k6w7VoC5SIO$?fJCuCY7snegt{`i6Z{l5bl_WbmwiLK{V;?OPv%F$W3*Ed~ zH<+MzTz2NHVp9x*rpLk*r;`_n(R*eLu_Xqi{lX$PV`R1rwHy^vDRKIM@Yq}3pb zRq8gVL7Di1K7~@RB&^o879P7>=nPFlAi9pD6vX-|)GLaUP%WPp8R=8P?quNyjq;9t z9w&!Hw5f5%nAPnfmTpWwcwx`%_5@PGelm(){Av`}PB2xLH4a%Su?!okW3v=QD2|g= z`tygWyPt|Ki!<#!8gcAAyXESh(HVcao#cMsYW6@xE7OXG9s~5fzR9f1XU34*WJS4- zeib+AiC~I`4A=D*-=efVxw11}SgE@~C$>qQzUux?oMI4F>L;t$*F?InWLmchLLMu`$4Oy`@<04{{hlwM!# zi&P6+sKHt7l{ri#BZ1nkQ5DH+Fb$fiu!pO`1c&A*pG|sRY`P5D%3rip-~;<(Y~tQY z{534{4QZtbI}QWn^cL&Kcr*(tCOXFl;idJPruBp0B5z_EdE%)mDiJ0Qhv!{Tji=WIm-Uk^btn!JazvIj5A* z;vC)5{JS;Il|3AN?)3w)9I^iI|7%3{1_016^$Nk;>&KohtxMT6Fv3_j_&omSS#m;kEM0t(91sOV_}#(ZBeKdB+rUiApcZjh~E&>^ai z#WKfZ_IzG{R33nlh>3zh<`7KeVsPf%-B#3gQ5z4g+>|B|toN%@4AD`3-r!e@ylF%}Sh zbK)5bpON9rhR63lANM|mwb)ET4(ci$ zy{`^5-=${LmQGGxh5S_AwG@ur5(ZZ#Wa`5mwOyn-oob3Evfj(70JmZxsjXiM$kw;U zo=CKLzl?Ec{v5^>ohkXnW8t!2LePV3o-Yr2aIkb0r=TC=#3w~hc&l!V7yaMBGVur6&ePiIf8-r0;Dpl#0n&`Kl1 z{_sT{QIltsI%@v+YNu&Ib$4*L z?(?^!r*uPEY~r-&5B!Xk0LCDf(?qqn5Miex!BL)kz{pp8zJicWJmnDuADha-BDUA;OE<|C$JyR&{ zrnT40x8*+@myynLWIhN(Br<>C4;korDbx7xS;EY*k0o*4!l9=Z6!li@*gFcb4Yy?R4-wEtIdL5_*VB;v|=ias*N*Q#tKwT=EH zpy88hdU*Lba69-P)umUXKPK6^N|(bfAfBSP&D-5mK8XE__Vpe5fD<9WQqb$f^;eKy z;L%~^@rHoe_Kn!L>nr>&bQZ{-;uyGiOcU zjXi-JNb<+v#d*=8)Al2ilX(>w7`ujyLb9rNu}bQOja%zMNDweUWXX!_!e5&#MoXaO zxH~gCVE(0=t>ee~@F<8#2duCfgOIP*geGY*k`5vC zGb+u0ERO=okCNsJI3?7knmrGhL9X9kL9bPW(11}qSLfQe}GsE=s?l>>G0V|{$?Q|h0^vzg(V{pfX zDOt(ERfoJT`i>)@E}=;qa-_QzCdz@}2jjq)ROxyZ??;peq6Uc+0CMkQX(8suTpdI| zMo!As?od`Eit+Fq>4|}Kkt&QY`M}rCBXZzTu>&iV5A8#Yjbz9G@cR(!PEWLjzukPB zBmG%mW#;iZAQ|`X%su#8qPvS?QW^7vMdQL>tI$}A;sHmL3qbl{XO0Uhiq;CRH7|a9 zp?W>6EisG!xH{Bl8fks9Q6p#M8yGS6BHXfn_dV6m#aux1E=tzUjw!)qH>z=yw7}WE zW8Vl`)@eBQ2~3$2L9?&Jm?R^bdFhhNK-kFe`iS{I@aM2Q=kqW*Y z%)YU>`po*6ay2G5CkW@#q{!}|mj3>3iUd_sFbN@cY#PsM3r#Wpse~MCLH5tw?<5;_ zUZ7fX|8V)kJhFeWd9qwTBc?8t(XaEeZjuI6z-2wz&1rzZoAJOz1P{&i^BlPhiTD*hxSdMzI$A zkHv0mRpX_<6S7v*j5}Cw_97YUhzN%J+V&=QaJEI<8N3kuKgpZ4Ii(B|epfK($*9A6 zZ(^&^r4YCK+D(+KhPp+|uQXgJlF}I}BoNwrY^{U4i}5Lxn{n>EOh^xvVSM4}Lxxl*qVFPq)&nO%*9J-CPgD3MZL`x7!|61b2qn(EU_3IP=# zB`@lC!e!sjZ~m(S&0c-2$k{s+#gW8VJu~A=b@%0ko63<9ARg;Z<}pcQp?|Lzfjsny zVtX?w&A1kr;fzx?(udV@{M1+kmcCRVtt^*;MLP2Ev#ty6l$;RQo=2~8gtdX+gTsOy z;tl#hi+y0It1^?y$BR=@EPa!1_5&C70Zj$z&c^0N#rV6(kb0vGclOEB&4NQ!brX)e z?JQ;V_pmEpWwgKodP-vbzACpvk*ydBwD8x=FwWi)$iO$1IJ$If0S zbc@TG+3QYd#KKWRpQX*=cW2T0djKbu5FteJ9xuo?$bovYBrcM!kg9RVa&+YOvu1^7 znHOvVXZwVKy9^)6Q!iM|bwyRQqG1M=%)Oz@<5YkpQvV$QTp5w_<$_n@fZ&n1*o(jdc~hY= zYNv04-26H}B;Mx%c8g$H)O^i!IJelX}e^gZxSw>_0>0Zmk14Oy z_DZ8oatz*oGaiWfdM6U&+@PkE$W}<=sSLo~u{IL@|4bw87Gu{Yf0t}E#bQ%~=ZQ}S zzss^U=w<7&Z-OS$A;d*fh@WI|_gm&m{(YUP^>jH!a`o@fr6fBAQBEw%`4nXJ(G#ZG*hvX@ML>?+x1o94%L16n>I_=jiQk z6T+HTea|SPsD^A?q!_7sW!f_jIm5}iH-v-Z$$g4F7A3-5njY=XKXO*8N#LNZ7XmNQ z9xq!Li8kgCP`DiIOZmuB4qhnfT}`we6$Y&qPH4C5R_diiw1vozlldI==ZlXKcQmG1!Quw;9=H06V3fy0a`lH7s1 z4u|F71@{MXJ+Izc>t77O)!3%5jmT-o(6Thh)EhQepfc;H+I86ztJG>(?dfTi{z}(3 zDluxhQO|8xw!-7OYi6R)QE4pgBpvrpZOJ!Ng z{H4JknvDQ`cJFJ-AOn1j9*O`^fEakB`Gk>+Gp(z7cHQP!hZ<{H?h@I>H6H(H?8$~3 z;3xMEFP+P&O8Hbe!mXKY4vlU!B_A2hK=Hwd+~-uyNBM}fMFLa#?p9G6wQ;4v#Q$G} zw83(7n+OV?4oDcrkN|EBnV!`zE`oY6{N&0X7yFXS^|22RbKT}Wh)5yS=AYX<)I>ze zFqUq8HAZXM-Un~u&ED#efI9?+Pq<_CVItR!F|}hJS%H_K+YbcGlN72qOb^hWvmlIr zANgn!WUwgF>~E`Hqe2b3`rallT^62&RqU|ZGefC9?cU(xhVrDHGyOr&Y*w%Ukg1Aj zk*wf1Qfp5XkVEEqU@$J*KGni21e>aCC#o7-V(>S#q^_f{)WF(~d+$H*Wnqw3j5G%Q zoLg)7mn|P`B6XGC)%cLHs-EB2zerDvYl$*xZ#I_`3 zpB!zq8)qm`)%5R!1QrsVy?aY~gfh5fGL?9KFDhOGj7oi>98L#S zs%XZ0@kic2$c2_cjf(-Fh0i&cG%N|V2N4PvPz3>CB$DSp(HPSB@(B>5<+pTAS_N6b z@pg8}&l?_n)S_tqKO;pD&F%Nx4)>n`8U1vMbr|4FYscgUuO+w{?#l)m8;L3)y_mam zt*Z!MPx!9K08Y~?){(8EYxb1B#&m-L@it@OP;MLs zvEXJap!EX}hh-OH$RCzWV;lrx0Jovq(E!AQwZ%pk>rFr>)*k(;RlJ1qf6!V(0MXlF zVr{fzZI&|^vwhukev})=K=hxlN^e<9{e0L7Me}*txI>Mx))#@V-4MBj=b5uvoqlJHfZq~ z=u!{Qk(91Feg)mGI$e`%y^_}>9~o2sRvt){U`z9+LoBgz#aI2Bg8}_Bk#BJZfX2LY zE@bk*$9a)5+y85ao-XK6bJJp@~A zZdxJb$fIKN$KuKHQlK}!#qR;D*koh@L)x0rVhGR9Zfil%5&=$P$;(Q8Yf z>`{=*Pf0yU7l;*weJfW_fZJcZ3K>U3U)@?5RSbz4SgqXa4i13~VWOA(I@;(i9ukk5SJuDY z05laCY#({atoHV#?Knt*){cnV%the*1PojElls83*Z!ztlZLaFKQ(;tbQ|rVjNcF|{3^@iI1L$kWUp0POD?F}Zjr~?p5UdJT38U81b1RLR z`dTwyW*$iTmVR{v$p^~*^4(_tO88k>zW*@2M+YfWts2a@hQBnu>57Nr0HZ_yU33~} zjO`ZDL>0aQ81fI7q6$UQ?|OpJp~(x**Ooss-O{xi#d%3pB?d)TP^5NS+$Z+W#Az_w z2)qAK6x-jw1e2;ZcW8LBGN7S8r{tFws|!zE&>#x{WhwcBQ^4Xdx44!f=OB#2Q~`a# zT`@*IARs|lthw{C6aHyClVT!+mA4THubb-44@tl{Gc)Ob1zhzdyGTZg+8Wb}|o2)xZ?VZkcgGectCVrWPm z$iwJoBPF9hDSiC;SP46Z%&9T4MTY=(0E!W>_=+HnAy&Kcb*8WEjo%WDje9J@ByC51 zzD{4%#M*=_?QXeF<7uC$9a8fWK8Su#s-OF>Aau1bxv{2UeuQcYj?7q>#4z> zA6r>bAi5$ceAT{Y)w7+(77}=-3dw#%UcZLYX0(l z1sJ`P29P?K+H=qasF*$TQTEU`)^)w1`U0Y2Y-Y1UcxsmhO~<67~-r zr?*?^tMWUJJ=aHjST?p?SwB649TE~LQsDXHje{I_tb+J}iI++|h7&K2B@Nre^sFII zQ&jKth>1MTNT6hcCJMf(NYb=!S3cV36w@!0RnmAZZL%-oEz}Bec-oC#K`Xz`8xupr zyGpXavlr||hRmNgWp&2gp%B>U7@L=Vwr$7`@@tWHPa^yh_O4;@g)bS_Lv32jX%9mm z?0*`dSi-gcYDJ>=n_HOuamEujlwFN4_-0=`f{vKNTS@7-B9jOXk_$|=90MdKhW^wF%f1GRimQ6Gp063NLePM7m^zyfV^ zSH+gtkSTqB389_UAZh!tu{LrSo2rNvw~bt?p+%>@A%#cECk{u@8hIOyg?AF(D3Z}m zpXT1Eskx|<<#L&r`1nZ6+K&l>t-Pv)wj}4kRbS$`dIR8i0kxNe!1wUIhJ;f~D^}IC z7mhPgW-W_DwclBTGu$aICF_0D*1?&Z zb<^Q`&&ds5cPhLJc>Isz*o~Le0smh~>jxWI2RLXJgy44qR!Ihb*SJ5|LGn0*VW0uc zOOgCu-$7mZa9@bV#d(LDO+(IiDyUqxub4LC-J{un>fCJmhuVNxonm{Q3aiF(s|xP$ zbTfhEST^G?>muql-|cAZPPd8*(77|{k#weZu^G7!YIS|23@VwgXaiK~l=&-~Z&fen zKU_MmsMe5HR92ZUe)nrMJyp`KZwJ{r&i8<_)TJb$Bf&YcMwzhj{SEyiXG8mrk z_MrC0T+yNE$U2Yem5JC{XXr=)2PL}@59iPQ`#8t{C7Waeg6>hUk9IYXg7+Yb+V%m- zjI+PmKcD84GVf#+jWbG9wDs}9V{1IR8RcT80Hyp>2?Rdn-JK;&m-C#9b?H|SyMXzZ zH-<*wU=1%P8SWv!R1vV6-xizQS*bQp{>&}H{pR=vBRiARe_|z8T1IiS@%>!0!mPk3 zf(3&n+{XvTr`>4xri*Sp%J!b*Lmdbls80IoEf}vUCa}Bc^?bcpaLa-rWfre^+&tiLJ7`;hp+d3LyMg*w z{8`?J0Iwo)eYYm@jknQmq{pRz&uVoef5jD3F=d5YaAb2O-<(?yOiHy8k6X)vT->gh zkQHaqLH?tpfofwpoX#(&Me9NB1u7uhn!8B+^W-p^%X*C@MA`bsHBm&CdBd7N-w&W4 zehnJ4=MTm!GBjVRu!+kgwv}2!4{;q#7v}MTn@$4u?W~gL`AP9?&WAJfGtb2eBeT`} zxAye*Ok49t*uaj{qkj#30hpWPP}0-P*ptb!ZOjs8xYt6YXdKZL$b3-VvJZPQDe*G(_8lT+kIZM|6AP$eZ8H3 z4vRQ%tGW-{*Cq9O247cTd-Zh%`nOE**Kp~g_OU(HPC#0wh3RdV1JO_%UZfspo* z-dQD7zn(L!V346+wk4y5a`mcbZMyXEN2OLJ#%Z*Vquw&r8{v%T;#TmB@L*B#R$0-Y z9zc`~)%Ng8a^-t2(_RFK_DAkLnHNlP(}uZ2ShU{Y&-c zuc@XTa(ob`%}#LySx!x)EF!@;T%=8ykyx6fo-yhd;Og>wp}iPzHbjga!bkn>NxB(> zev>p7r0E*W7|=(>)iHyvQE!BKen0GPr%U4?xHiv#vD7%TAk}K;(`4(TS=>98z4%v? zb}tES(g2)LNkPrsN@((aqCy3YU66x9yc(-TDqUd?Nf7yui1qx$V18oJq7~}tO5<+5 z*R7xA+WOx$Hwx7!g&C4!U00ZDl?=R}kfy#GcBT8;W-F`Q0$kz`F)}DlKbdNx=~>-( z9gMzqv+7LhvlsqE;a|UfV2bl_vg3FvddqSr?g);EZUNh75ZP?Y4dEbj!dPg;cs{ZY zc|{L26W_#MjWCzr1P+#E2t*|%H)$I zVwV3+OO@9&S9|5h!i4ZRrNQ97wsXIuVY6^;T~e19nhB~=X}2D~-kn*5A-VXw%u*r- zBucN|zjy*B5ERVZUo<78T3`|gfY*BE#nE%VZc&Tu`v8U?EJ75n1F5nOUZCy{8mK&< zVhIfHvPO(kidm3l@o_Zq_?oTM(8%ZDCN~)ySYdy=mplcxIa$$a`vR^f3)D@c$AdT+ zZz0W5Mn(kfYp*&IsI?1yKueFbsrkNOm%t)ckiP)RtLHxp}0{1QJYjvdr@uOQ!hdLCERFqwWr{=6xBrfFF3RPy#KIT*5@OV@Eaq?b#9Bc_!FE zj*bK=@BNv0B443!4WT#*;vYj5fq=)2z_nX7bhjwI9c`UEvB)|pESf7PRLU) zAhZMbL}s*gz=kAhV%n`CXf7MZt(Pt!wMLTPHkx6a)pO9OOnHAkdj-~QK!Ey4G2he1 zxaf8x)*AH>V{I5Ja14wIl$ytHdjNGc<3&4}L0B`N3nkJ3&_d7NcB?Mrn3-KAL?omy z@7!Y)-Wt5}pv;(N7OfvsMBD-a3<(?(b6T$p$RyZvaMwiJpay5e)@lIItM%-!1^NiC zrqp&qVdH`uM1O~SMPzXW+}Ea*mvYH2vS+XN4t>hqlg2RCSwCHzG_*ZWEyR9;keZb4MmSolj-iYdv1a5w z866c2%&<;I<14k zv&ygKZHfeb|rHfPMv?rdlDVe_7WZf!P1 z8#{0>(G#9Y)F6bj_&AY!jtK7~Vz|?4Sps&iKx8AZU zLp{v%EL#z~ohI5f2r>@1(X`E?mJud(7S^7Zp$0~_u?Pp++c*r7tDA07mBan9OLsH& z+K_{#%|NHI{vs%h0gLg!Hx=PhBixhs@p)dVUaILMRaJ~v32mtmTYIJ zC&tQBBPM+Y7Yy+sLm#_@+2VcudQKchUJlvc|S%jjrl2^6)B7y83T~r~Sdp(nut(lOpYuDo_okzoO{)=wt<>7cS8)UmesN zZ&?>Qn?FULo5TN2F>XfaDj0?t*fyAsaUy6#cG>BCdtX_bbo;zQy6l5Hnq{>vvc7i13sZ9FL0gf0h!=DDZOsv>^{6Y4V=)0T z273lF$c!gZ2bqwyRlZnQ$kITB%Z8`*%Q{NwX;J2hGs9_Qa8%stKf^P!J{|V|DERXd zL-@)3mTe5f;|=%0OtM)Ks=Q9}2llM?c5>55?jLbPt{jin>cvwfgU4-a`Po}HgK}HA z?0&D%MbgeAoYS|{&%f2L+$%k4rB_SOWu^D8a@aFUFjVroSF_dE`K(7+H{ZDEAR&YO zhmx+@bKk-Ws9ZT2`-uv6I>QB4AAn*Mlskgv#<9C8zFQTJ9jpY;tsnxe_Jcp@Ew`7% z6=k4kU)}F>crSV+IOy01 z^#6bQ7aUnhGl_7GHBB7BpHB9F`G7{tb+T0lSA6HpE6x977<}%fcXLM;Tb%HM_?5Ax z?Sc~{x2+?yn={_dS@xDxVW$hGq0Z8T&M30c};rPfrXv`_6 zb__)a=Y<0-X_RG@-9p6Bn_IQnSQ^@Ah2+J_g@8SbX5+opNmou1YR9J<>J9xmel#?Zh-k=>+hK5h@c+K0E(E1 z56Q&LCQGx*O^c^Uhp>TsECWbg9@up39j@8!`ghCfl`Mjx{rx*FE)G#{5dDfDPeK@m z&?o`!C@$C-iDZ)t{cc1jvd29Ey%Iy4Pvsz6(WyyBg7CBp3eR3Fg6s+PA5OFM>ve{7 ze}o~I#7_aJ8V7=A_OVH)fm5Rb3t6nMRm0=<-lX(`;VVv%#*z^NLngFnh{m(a-~7{- z*4|1*s64)Olc7Ns+T3L<-DxE{ysh*}{fb+4 zSt{|glk5O_;E3nMQ=v;Zvz5f#rG?68JI5nJ9v=u_A<8xHkma4@zvK0J`G?;<%YGVb zhvTzi&V}EjHrBmJKEwAifX{W59?5QzbgruWk@MIz(Ch<_J}FHXg$;-}YW%_((LO|c z15Zpm)UF70e75k`wMqp0aOB)9A{?=&_d5)~L)>N{0%iIc`Kr}<2(DP@7-f%K$?#5I zhk?w^&b8(mDu7N#I6OKYGNUpCoes@Zs<27_d5}q1I|hX%y{FO)Jq4=f_%RdRi*taE zKRltcWrDcXie$~YlN8ckh>eO(+~j^zgJFifn_GG>E(2=*uhO1;B_&(%(@zif{lAZz zqwOtwhpmaAst{7?xgu+7>N2Df6Faj9P45RnxLdD4YC#8LXkqtujVDy>9sj# z7G}d~HXuzg(w|}m2;o4$Ynt*&kB2g0@L9BX<+-xO*0;(yn>v$kIp>^(d?9=V+m;yG zq?Efgbo5#MOXe*>J?1;vb1_vE$HS0o`RAdOx+qb6`aF*~R)k=TGC%pqG}fqw^E_L8 zj2>@nvC4PpEl%b%LQ1*(h{DEnXU)!MEWm7m$Dst)*5|S|0t!7xhslPy`a;bT`Zu`F z4s`WC8B85y1S|`rgR28@-97E&Rm7Jo63Qb}}=J5jG0JWGLC2f)2rgE;X!KuK&;KHn&%vkhrzsQG;bR6 zx^r2=yd#)yMFFy|Gb%#8FWkvptNgukC1y2p;SSkw0prz z%b+YYX2!RGZKN`(P2?nweOO#T-FMOZfW;l57c+mVs>{T^ZOJm@?(GF=-0-Eo&+%%v zP4P^5)Ncy4Kb^BW;Do@|;!XoggaV-J1l*ebXTOF-mv28D|IFOODP zswht8wh#4a{ImYcI)#-vx?=A*9Gb!yfHzS=H}A=+F}g1065%Xhb_Z0ec^(MwJWTUjtiP%x22ryczofa3b;ZQ~VLbLl=sL?i~C<3f({ zNQ75Cga#F`x=~ega)&n(m>uzWiJiVM>NlTxg2b&~-_d|xRWRl!hKc5OE>O!?Mi}(& ztbTTeS0lb)C-zX5^dxwut#tY-$k4Z2Y8@DFDk~Y$){ldaBGNjx6#oMGpo7T&ZiC^K zob95rT@}+tVX;%m^1i?Wz37x&yDSDYiWIw01tV&qR^i7v(WgblMFCP6-j585eCpS< zN~qdyj+;fK0iIwArT4N|e{IEJn~sC#Oecq}f*gQ;Bt}nB$evh&g_tWB0bJqyO=7*+ zM#o+`ldKEjBk%Rp5egDx3CUe(2ouHvYEtCx=+CVKQ1Q+>%JduQf^*{ZNpato?KW{Yxwnwz_2XD^<5+Y`fonPxHLg`8g1H5MD- zrG)$`vABk|J-WF79e^>}_hwVp((DqHq5<5?nDEb-%;W?>jkdF^taN=eo^nZ7YfD4i zCJIdw)kmCPoCr_ruO(yu5;MjLOXOdD5jg*0)hNpn*2gZX5(HPg$>h;}BF2FIafwS| zce;xQZ#75X~X+9;_9gDJ-KvEm#oT*|@*H$wunk{~Y4`O=l(N zv$OG20ZwFEB9r7*1lb7=s;sKKt%lMB}Q^ifE>siNq+secc#I(Oq?Mi-h*w*lKAZCjJ|?x8 z`4$K?!W4+e(Twa->bk-vk?j}0imxdJG|nwtaX4DUTer}4ZNMNJV+$LFq>oS2wq{i5 zV(mSa)i4~xHld=*@`j5uHMjOdh&UyAFv>H=NRvvVU0O-|&gE!yzS|6!4I zgpj7ZS&4XQq<3^iH~`)zDbfzp9C$eIbnH!HUJbZQ!@AJ&K4jy7>s~q*S{DpUFey*%WyWgVH{SOHaljLVyb<^`K$# zJc9}wYWv>UT1|SW8TD&)#Q#A`1JCCuMl?` z*tXr@O8(DoZhCJ1n=Lnyvlej4NK12u8`cpt>kj{NgS_pl42Hgo#_rZK`C8KtV-v^l zDno{}MfI)(Yc)r7sAgs=NLknRyq*m-ul_z$Hy#R8C>)dQv`s{vO;Y@~`zI%`r~}hQ z1eqjK;YPkloIgN@v^s_M4gnWnA z?QMnHrw~35@ex%tM>4qX-=^S<`HB0a@f}saNIExy;KwixyAVV(oPQV`oN9AcYMma+ zJU^eNB6-8!h*0|h4Tu+t$K@Ui4@FxIi%_$xNdWs4TByQx432^yN;8gi5I!5KFXlbM zQ<{erO)t5C3w5tri8zu-;1@{W0>mI5tUZssle&km8}kaiGc5{embeWYQs(rJ1kiLr)l2QRLWOBhZGxJDEn+Y|i8M^qsZ}JmsZY@lQ2(!yQ2bk4%i&aw5far(OD5qOn^E46ox= zNk(vD9!ZOQxr-gn{Wg@?Y)1(2YwtmkQHuWmHbkU^Q#t-IkKeD979f(hr!41Hd)!s0OkpOrY0a)jQLc_?U0pe0{`Uk>iz}iAaCmVq~K; z6^}q-_@z01vnHoriu45()D?x1f&<@#c)?~7+=K(&(&<Ea1 z&)ml{?Ai9-o}OG#>)v_o&!nK_BDFweu_vXF@b=`=>Ppa5E$YJx4Dn#aL#mYcC2x08 z+sh|+*!dq1iNa8y0rc3V6lP!Ao*X{u4s-aXx6OESr~Uk^m6shuSaoS5JP}0W3_+n@N{S53_};I`((v?3XyWh|UtsS@k3j zPO<$1hN$4$o=DDtuIoUxJmaDZ=lMN^{Nmr0InpSI5;R#w`heYRT{_u0B4rUcBLGE-F99 zePN+w+!@kx?S@?1U0M0KXRrVrkmA?Z3gF_tpu?f29Qb`uF>Mt^=sJQXu3UId?2ewKe+zsI+g4zU@lYhj=<<@{6(b+aijiryb|aP-wRe%!jSFl z;f*ST(}TzOx@vSPT8{;Be-FwrJ-ayCdn9`>9w#%zWYbK9)T?bL@q^vxKf;1>%V9-q zoH#HHY8XODIBt^i4xh;t49ZHnmK5_9cK}5HA$^>&xrP~3XDJ6)hWTh*X|@;m0L?eJ z@*=U;Sf3uS2<1=E9CaFnKpElruc43g!n0j9wyl%Setf6VF}FNSO!FNKw1@eBQ0yJ`!&l*DL(1NW z(UaoikSeXLDDjZlMcH__9 z8B!7|{gfOtCoAB>1Lw?yfHxu9;CUP9mWIa3qcC!2?Ts=)S>g46o$}<7S$|=|kv<6} zY-}^kB%x6YM)U&2YrIQa@q(FQQTQ9FJ79y_tkFp#XrOI@^;yP99PpDs_3U)#S+4z> zkyjRiq=9J7hS>plfZh6;SFNk zGG|$#3L6eOGD*Zu0cFl0a=3_@SL}95rB;bt)TP8()_PySJknt69o2DEw74P2fGkh* z&rDoL_`(xHmH6@pXGZT7n1h(&AWHX(=?#@1nB5^c&B9Z`qGCl{EnjCPRd|6JnT;Mc{EB zDx}=};JcyYN{a`y_0smTw~Q*G+|XAhm=EXKKh1!^v(FZyp{Z?!h!=ux!U5*Z?Y1cH zMU2nI*YMG8u&~Od%m=43J3GT5)`~%KvJaznnG^s<#KZ?T`6*JPZ{>USrC|zIZ~gLF zVtq8NR~=d`lqcI-T3HDEu1;mfnL~yAwseomB7%rxLTF_gw$bJ`~O)Kjw1oU z6HmLM6)s=wqowyQaWT=j7?8pz`O_ELpIYyd#!CTur(gkddBpq2*P;I!b8FCl*HrOv zG_n($x)@%)!Tz)3pZ6z(1hU~8eN>r@szV?plViZdj^0(&sQL z7L*?J%-WdSQL*F=EQ!?|oP+>RBQtjlwQ6kTt*)SX6~;QmR1_1hMFyvi92R-@7Wj zK+i@_8;@R|!53gDX&2LnrJj?p`I^tOy-?`_T??%&OSuU>2uZ-@_%hCLUTd?F5`g}eg}V!mj}26 zOH~$5Bpx)=CTkH>TrJr;K*vwSG`uf(opGJ_O8X3|zRE~PJXTEX7gvPe21e3v4~{!< zj?p!q`Hji``qDdG%>q}nI`H1*Qc~OF)|4{W&uw@T5`V!%KfpNGV<14^wnHe9S$LMJ ze9FkI_TmPxov0sXfQ3duDlG0*&0W}j+;anWSz)?;SB6F(bOn%}lJBp&B=QC!vAhR6 zP21LSwR-C?VlX2HM!SB7!XXX+P>XncDf%k{^Im42gTsgP1tY4vjM#A!}JzfV!eiBpvv9lFvY&pcxm_X z><2zAvM-{-$mL%a!u)}4k#uQo!I7%)ZupzEQ!dVktaaJH)qJC*KJh!p0^6Wq+wq*> zjGEF2aI;^3m;)ZqakgDBbq;8|Pe#?cf3sRxjOE9F7G6I%w&PtWu90zMw&ng=!+sd% zv=#k8?yhlEK!+xkmNXPO&*0@9?H%NobLo%rUfFAE%o2Uk)lbvX*Fv=Ry{UjfKctJl z!RBqaiy2cG0l5o)uU-)oIe~heTj09rdat@nkrwH~0Dg>Srzd~rDb_=KEpg?{2;yYl zYI6^d+VEa0HmrofzO1=9hF=;SlwXB@ug}EOa$l6I<}G9>pE_Z5;jeL5cZGl2DgIri zn$egvCB{^EGTDO|mBN2K>0M%4eZ0?4`X3Y-aC2suRcfw$xHZ_Y<{ETKBBra}maj`- zn((%>LvU@iZrh~)GP&GEoBe9!pimmFIb|*F4!m`DzoaBQ_a!WouEBwfcqlon3pYK= zIXo@;hUwFv-5wX%TfZVxGW*P3pdtMZaApzC=Cn1qWiw*(Ox|3fHQ7Ov_#88@sX5tI zjK|m5-eZL$;BqnjA?`?jNR$tFZr1`flWLxJL5G;+$ z5zY+zZ%Jstc6XsE?GtI@MU?>q0Dz6@if97IDi+S|pVvFhREySdGHe*@Bq5jEQqmng z<#B8~d;vL{_;|Nui^67A4tQ1gZ^=)GuZ!^9{dg#z+^Fz^*@apZ@qD>m;7w7~b>?@1 z-r=vWkEJ4U*VK}1ljZH&TT-3|VJhwdkH$ra<%mEJ{N)c6JY0`(RL~ntP+HfRTdwRy zV5Uu3?zp+seAxn{QM~l|1L?Yx>#+3nP83mn6?x;qQso1tjZi8Dkh13O>5{pNoJhIK zRaDZkuh`?&u<8g$ged*Ct|8UX(t89DWyPt zCzs`N=rOxr=tA^`_tUR{V_9$K8i=49O-E3EKZ%CmKG_)4E27bPwB)nn@zSx)rBr5)$ozR3ek>u?UiS^n&f=?8)*Oi46$vDeC zlb4CfBuawE8U#%3EFSo>N5rokCdFk*R8XNqIG`tEisW;e%yUBjPR%8Gd2P-g(l;%n zNW(Q16}tJh7okyTzHKoM>$6gt1nM}=yk9RvFNrb%(Yxtc$>^X{qs3Z9t2ojzxoS1kzmHuTdz4^zzq7 z1M$XM(ffrEOpq>x>e^L#ZeHT=#tNJnZbcsxc3Qi=XVgCb5Z$hB@UJejozudDRMy-b zg-tKbT6P|ipE>k@>By586%(J$l6Id&`DnDg50cN|_5;5Xqt4UTl}iCWZ(@74O@JNl zAQkD;zsQ$v5Xp)O=s_Pnn(zJnPlB-r->*qN(RvuBPl1(zB}x1$kMN7MA+M%yoXX$Z zil5c7IDTY56&53bOw_*vMB(<1vxntyW}qF5c9XXG`b;f{DUHL(h5GiaNza-h*CU<4 z^heOc25;1~b{A29y#+6Pu*yRrp~W~?`U1%ps0EHQGm7h-c*g3v|M??#$ zI@w%YmD}#!D__f!JsvC$c~-ufbceh}_&t#JY*CnEIR%NsY5?FL-9wtY;EKb&^yAL} zUxs|Iwzpmx7$JgfH^R&*ki7#Al9Hhzx0G#t-Z#`nZ|ZlUv)(qhLj6(%O9+fYoBj2I zGpf8PhxAcBzDOK8cg|EDt+26yss*b z;S&d)nJL3!I?Il7e9xgQXxRWm<=HEKgFRnCC5pysyFvO|d0DnNN>Nl$YXXxG=2gq^ z;v<|N@Wg3ExU!|Is8POtP>6jl&48cAp}%{TyFHT~xZH@%foYgv;;_^o`TWvB+D9ozj|&{_Nh9d>WqMSg9w}&#so=#|<2%4^qY_pn-5Fuz@*zum`C2 zX+Tq=G#&@*s3iY+N$9|7V=lOLVO-6(tEScV{~jx8KP{tA%$RooIV+^3K1^_fXNbzm zx(1{z08-P6SY_OK22TCUX5iav`kZKSyk$_Zgz^+`3TY)n=+z*4^Kiz*7?Aii2}_DM zLvcMa&vR^X4YJjbnX6&v+p#NL-aF-Y5g+*oyJASBlRYqisd*PN#MpzdPBdnR`p3&Gq8DG`iyN7_T${a& zSYS=u{Q1>R%^#9HZOy?Z;9|Yi21dfG7=+{upOVkmiOzmflDtEPS><3EReuXH%ybz3 zV{Ui`WLge#9cb9WIp1lA)BdSp!ZSZVeu>P|%Hm!`4E@Ms=6ep)glZ8X{P%50eTy2m zQCS|$DVbj|ia0P$ru<2xym>R^G9tDihvv(MzV5c8$8C%S*Jy~& z`)Q9YTpIevOY|FyG|GrE)La6yD_A1We2Bk*Wep$?*8e77AJ=W>{LJW@f2t>)b?1C9x;szrK=DQQ zDmGeLW&^=e8Ti(~;;jP*7ynhU>$d>o7fzsKX5>2Wp&x#`>6eQ1&0pkM(qNCtkR6oy z3pn9r$^Q&uLX#HwkOV4C)G>)BY!o7#h}UnFxs+OeRS3Cim@OZ2ht#Zc7}v?E9|&;h zB*u})E;%xEPeQ~=ovILxcAmr(JYd_OsEH$Z;rkZvz7bS+bzF+t9DKt_I%X}W@LW|o zY~FF9PUpI{VGzw@YzPHK;lG&f2W)o&`!l`xIAu)g?$LNo*0TBcurfi_1D5}69&y8> zy?r(Z_sNCRJQSqNSRRc9DM4qn&&)9DR5WU+=c-2hRCk_(I10z!DOuKk_6g2$$QV~{ za@<@ppo{JncNX8h=RI$6^<<1IG`8zC!;)?ndFhXO26|YF7Gk27O8oxOF(-OHY z;rlQG6l0Nohs2kd-P@ow|6bW!=T-|M|0TxO7N#y*Y|0%t<6wHc`|X-6b>BwnOtfsM z<$?4rNJy)oF8ETOYQ^LnrT#JwVFlwuZj)^hG3D&j$rn5u=5GqPAi>|F4fJPXhbYn| zL~7RMJJtsZ@w2v@qzlP@VSPI;>+AlVL~XcHaI0)cV9?7Wc`DcmLNSsp z=qYK~ci4wkJ0y=6K3pQzrV#Q97T-F_Vv_RLl{qOS{i zk-G#mh_8ZlJfq`w5VBJ_cvxlCYqfHjX3G>4^D7&ZmM!2+3FoXTG%hn(h)3JpTV56a z1Ia{L?qSbaUr{374@nY^dYdlqhz{g^>H=Ou6NdPs{NDQg)bcmTb{x3QoQs%ZGO)P6 z?QYEyTfxhd&n=<|hh=VDS2)opaA_;ezjtVzr9sw2?(fu6|2nI0;mlIIUVInJlu!5L zyw(ObV2Im@yvDW>J%rd$iV$cEI8ZXjH`p^XTALi^iJE5}0$~x|RZP}nk~O<>4@aKv zV2A^Tp1-$@mu|B7)o}Gh8p14Xg6UT|&j-P)TS>3;B+}0Fw5}wJ?>#o0F2}cbn@Upp zkldFmgu=}jZ{h$K$R2Z}BD=9cWhaNS`A3CQ;C<8AY(-w!;XqX6Oi2eQHbicd(s^tdS44p2NY}GB{>oT;y1bMeF z&#LIk40mrbsq*PKOds2Gzc+G8k;K=AgLuLzHg+0}7f4wm*$gkOZDwDi7q?}Ye zhfO;}fObtlvNxx(sW``#u~yW;ZKpw8p%~;|B}rxYl0;oKU-yrce23DIAd;HhA>Kd9 zCy7inRT4Ozd*-sRMdIe%!N*8BqAGiI$mogV>Nyj#TE{3N4sk3Dh}orDWwb*J;?PVO zd-rTk<;?s4X+Bc&s~E28rDKn?5Jcjeoy^ZnRvBv;ri(Q1L!;5|mUvY<&3hB;5PG;x zYsT}SBQk)@p#~IGtvJ+;BK48X+>xJ-pFNKhcdBM(BYGnN@RG1=nXk5QTLw1>&1%i~ zeQ45zT!eLWQT>aE-`}~cfW%vNR{iy_mei=az&T|)(ZrJruI0#p^#R2SD#F~zC#>Cs zXXyGr?kI}JOdsHk__29|;QHF7EPjzvQ7^j|S?XU|z_YtZ6c=VyvdA`F=qiV1;4_>* zfb%div%2GBPq`29oq|uoIM~FK?jWb^+^ha;sQUm;i%FDzAp(N%=0GlI@}G7$xsf@@ zc44q~14_ZV{$DArtIkV%Z>c02ZI(Sroe%Mro@dTQw8dZTt606>9u9@W1rWxIkn5CWJ{`Uok|8{RWtS^x^_N8?}Oyb%$p#HOuuK z#W4bX68cps%R)Sc74^2}nb@lc**qktnpouVU%uDL3l^;0hn0FPLSkq@^N_xc3FZf@ zGw#7nC@0k*g7jiw?w&G)f|}OsM82;KdgaoEh~LeVfKqB8u)^Cnj=TK9bcY9G`#z_XJc_FMh zr4Ui>VMe!Y)N&lME89}DHbX7;9@HIm+v-5=Mnc`OwBBOmTabYaYRG2y@%bmA`9D6Y z^g$=m^QSNipe)Jc@P8dPhEmdX1!EyrG2}ug_IOqt;nF!+-Yt4o}JujnINmb0`3v zP>X$1@Cj5s=uf;JzD|G`r9@5bBNpWqq@Cq>x>C}*d+2B<usa=-0rHB{EBcx>7%uH0*9c?VDX|$x5TH<_<1fT zHVY}CHuS%6@&;*$WBO3(Z87q^ZCWi{ptS8Be1yIse5R~v;VW0YpC6sg4kz&B$;&D6 zZL@y~@!1rLpY|z%&&B7^?A!NJ4oj4?__q_6Qit{pYjRZ?PW$_q^JJcDA(!U>_ULJ# z8|_%WL4IT7O$`55$Hgp+pR^C!i2UQ@xMoQg7-G5)SR9TpSbl@)tnl!yDeQARvnb#W zauA4>>^e!~cvak8HBp&uOkZ|Pm}6k#>CNKXV~10i*zbfdE%lCHX?6uuCeT*-Rq`I5 zh-e}{cqHK#6uc1R%Hpu=hnJ1pwC6P*;Z~L>@Mg2 zk~upowo3`0s}1xhxu_?kkkcdkUnY(M<;V8Q%GbkX>+Xf1=UAB6uN28pBlLTkX(T8D z_ub*plFNC0p8WAcdn;}aHC(^Zw-f0C{BTw*F81d%hsJ}+)O}oVn$+ zBc(8<-mRq6+#VqB@K?k3J3I9+`8~|v57giJ{WRYvUAQ;N^(4MeXTP86C48Q*KhNqH z^ZFg&N55}g{cHR7`R~^s`TN`X`y?&b>o4tffKWFr+&MD>C<6C+0ZAB?>~}INNZpUx zK84iz7Sq`OB+!*yEqvbROh4cFxE&%G^7nUj& z3Xc(#A)J}umM{mW@A^iP3Wu$|me^nvm^FcQM)*&v*|&}K3|g1y3y^W{(_K{a+m z_4F-K_wsdn^EOZ-y5P#@4uO=Rgj}RN*D1Wl=ENXbf^pW<4L4;Fc;l!0y+PL4)t zGS&qfW!(AQIN|mP!u1CHT7M}?LCaCak(`yBt+A_%lJt!wRVM~tzYo?@*O3hH0x56y zLf#!0B|IK9fv36USPh_oj*PN>BLVwwyxs3;*7&G!h&aMQG_aIv2QF*vvw-*LwjWP?dPTO3vdGTZcY%a~CQ2H?waLOEbA$WHWlHCBIsMF6Fue^5 zZAB=LVQ%btLOi3>W{SkH6E>P`^d_-YEG`xhiWotKt1h8M(!FSQE%ED2wlPJ`w=Hr<*iFKw-vq9ScpHdq2U~= zq<#`jm7kfL#aj1LM7?vsJ}sG{Ue2-R3w0xxI8;&onEIgvYQgA0zdu779!my$DO3;H z3HGaW5~laz+l)Bd!ZFloScIQ7ou~g{^YfE!nl41O8Icmy=M5jF8#s>67~JQz+-y$X z28T&_89nv`8sz_7_!B0!a+&>Dc$hm=9>f~qMUxQMZKK>XJF7`*#5A@(yecno2)q2zb^t^@JLN$6HU|Tbc~w z__4*kG_!>@>pJ5h-yz=xdA|XI*F^b4lX>TrrBd6})xx)$-gEfBulCb+C#JIiZ$JPW zIVOydafa#K!c*`nlc{R#_t=Uam)+25+D2&000tV%D}l>0S==hlV0nh@q1eWNiUd3E zwkkIqwYx~jHi3w8?UKVNjLqdrV=>8HH1fbAV>~I^SU_b-yfbh^hcFb-aUa>r8u+ut zo(u2ud%(%{z}5~~#zMeX&o`mPVuRW&%nhT;IYDwQR`VnrQuXQ_Oggt=D2sbdaavv; z7IHrh$hc==D((FMauV~yTam2rFDcZ3k&ptrQ6i~5eX$P4JKdEPa`V*Dn|I^{pDO=M zjkeX7(Qk>QwE6|b=Skw#NSMx?`sIvOL@`mog5Y&mT-SGqT>E3~EzR)_vjzQnge9`Z z)!I~{G4~)k+uUzl4Kl{qm-DWlJOjE~tCfQs zgrpq|s+~|7<~I6uV((csapJsUGb?xz#9HiT-cY?0nu*Z|g#E=WY0Zo1K~c_g;JQq$ z`{U5DGA>ekiC}k*nOxhcClUO&HYcK6B+qMpy-3wT7THQW+kPj-C^=0+(v7d-!P6d} zTK6?ZxeC9YlA;p?p<#Evs9O*~oXx99B1rFb^8W1Y{6Bu-e-i>X7(XBK zBiv-}`p@futMVxk3|o}ohAKIpuDx}4%q*X*!8C72VWQoe7s08H*-Y>3?qjO_6bh9b%V4Uynxn;qF{MIka-;2vqp&_`Sb@t^2ZKIF)%n|{19vLzIoQil5~n_Chs`VCijIGtzS!NbQo zg~C9d+jVZZ6)hR++cDx|&VffIBCcI$ViTVDX_lQ8#*{HZLdI9HmMb{EtO;9pLUz%Y z8A$*^B1TlqUgc3As;kZWeH#y6XsjYwP%yWP(nH4`LSgfh!5qNtGS94!tS^aMyT>$= z<9OJp$?m(;KwQ_rhCdw~pa)i6FR>?x4OTc_j>&*RE?8C)kY9?BZJ8(w|u_ohlH{yjCL|T7>^gJ)KQGxjC`kZzu)`QLK{_pob=ywuoNd%JzK6^` z?hf$Gg1WWcPzRXSGD$v>w4SaFeW-tEs2CE@rcbNNNt<&pQ_d0dvoa#peu9FAIeWw= z)n-^mF9tHLw*cExdllm9Y(*d_Cp&-irP`g@1*F7IFoz`Z5UIk3|81a96*^knC$4lE zm*ggA(~yF5fGtF-`SD4;tU(H>7%zvD;ZC8^;7Tw;1!9LAA-M0NFGHQ>0Z)i1FyRw; zuoIw#KkCAbNshXa^2&Y~+3>-eXR*3qRR$DdGk?$tXw4JG^@l^(tT- vAE!{PUUA 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 DtcYSv4v;oaf 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 HdVl}f+iB^F literal 0 HcmV?d00001 diff --git a/apitest/resource/Profile/Automatic/Registration/0001Left_Index.iso b/apitest/resource/Profile/Automatic/Registration/0001Left_Index.iso new file mode 100644 index 0000000000000000000000000000000000000000..46c4112fae55248c3b194bf5214b9326185fce8e GIT binary patch literal 98779 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

yxOLP!GD2%R7Des4ph5;goPLp z1E-I4LQIv-plm)4#E~)F?_J>`m@H`Vs$ z{Y+W>_F-j>=YA)7!YZ@*Ia0gEK;!wT=RC`TuDbRX*36ZW9|-^hu9?jhB@d3!Lgn+i z_;##jG*>Mymevb=iOn+xY#uE`kcc`M`FWoXKX*h5HGTR9Y;%(b@)pCC?>%O-N+rKP?*O`E zxp``xO-wA=0De=m%<*dWdrMIgq>1a7mcF?jC|oQty2CD|q?~P8X2RNq;4(Bi_{zR@ zUCL^uJO6zyT>q^QYf4VYK;k(g28~cg^Q^?Cz8Dr@f1`9vaJUsK(ERzG8mIb?;SYLj z>DOyc^;j#4xKKCiSQe`tDrw?B7)z3rp9RBU0AzA2TcCs#BO_*Xd)jO{O_LI(UpWYn z;HNtGX&i(Uyhif9pQWJzesH1&J#qQ1w{Xa1gX%X|C�O+MPvQ>e*inpM5~)`z*>} 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 z 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≶$7lC8 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 Date: Tue, 28 Jan 2025 17:53:26 +0530 Subject: [PATCH 328/860] Update values.yaml Signed-off-by: Praful Rakhade --- deploy/mimoto-apitestrig/values.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deploy/mimoto-apitestrig/values.yaml b/deploy/mimoto-apitestrig/values.yaml index 5ea723dd2..6a64d95e8 100644 --- a/deploy/mimoto-apitestrig/values.yaml +++ b/deploy/mimoto-apitestrig/values.yaml @@ -2,8 +2,8 @@ modules: mimoto: enabled: true image: - repository: mosipid/apitest-mimoto - tag: 0.14.0 + repository: mosipqa/apitest-mimoto + tag: develop pullPolicy: Always masterdata: enabled: false From 9945db70dbe4140fa740e1cf3e10e6f9f8598edd Mon Sep 17 00:00:00 2001 From: Prafulrakhade Date: Wed, 29 Jan 2025 19:33:00 +0530 Subject: [PATCH 329/860] [MOSIP-39276] updated namespace from mimoto to injiweb Signed-off-by: techno-467 --- .../README.md | 0 .../delete.sh | 10 +++++----- .../install.sh | 8 ++++---- .../restart.sh | 8 ++++---- .../values.yaml | 0 deploy/mimoto-apitestrig/delete.sh | 2 +- deploy/mimoto-apitestrig/install.sh | 2 +- deploy/mimoto/delete.sh | 2 +- deploy/mimoto/install.sh | 20 +++++++++---------- deploy/mimoto/restart.sh | 2 +- partner-onboarder/copy_cm.sh | 2 +- partner-onboarder/copy_secrets.sh | 2 +- partner-onboarder/delete.sh | 2 +- partner-onboarder/install.sh | 18 ++++++++--------- 14 files changed, 39 insertions(+), 39 deletions(-) rename deploy/{inji-config-server => config-server}/README.md (100%) rename deploy/{inji-config-server => config-server}/delete.sh (75%) rename deploy/{inji-config-server => config-server}/install.sh (80%) rename deploy/{inji-config-server => config-server}/restart.sh (79%) rename deploy/{inji-config-server => config-server}/values.yaml (100%) diff --git a/deploy/inji-config-server/README.md b/deploy/config-server/README.md similarity index 100% rename from deploy/inji-config-server/README.md rename to deploy/config-server/README.md diff --git a/deploy/inji-config-server/delete.sh b/deploy/config-server/delete.sh similarity index 75% rename from deploy/inji-config-server/delete.sh rename to deploy/config-server/delete.sh index 16dc86355..f10a7bd8b 100755 --- a/deploy/inji-config-server/delete.sh +++ b/deploy/config-server/delete.sh @@ -1,20 +1,20 @@ #!/bin/bash -# Uninstalls inji config server +# Uninstalls config server ## Usage: ./delete.sh [kubeconfig] if [ $# -ge 1 ] ; then export KUBECONFIG=$1 fi -function inji_config_server() { +function config_server() { NS=config-server while true; do - read -p "Are you sure you want to delete inji-config-server helm charts?(Y/n) " yn + read -p "Are you sure you want to delete config-server helm charts?(Y/n) " yn if [ $yn = "Y" ] then kubectl -n $NS delete configmap global keycloak-host kubectl -n $NS delete secret db-common-secrets keycloak keycloak-client-secrets - helm -n $NS delete inji-config-server + helm -n $NS delete config-server break else break @@ -29,4 +29,4 @@ set -o errexit ## set -e : exit the script if any statement returns a non-true set -o nounset ## set -u : exit the script if you try to use an uninitialised variable set -o errtrace # trace ERR through 'time command' and other functions set -o pipefail # trace ERR through pipes -inji_config_server # calling function +config_server # calling function diff --git a/deploy/inji-config-server/install.sh b/deploy/config-server/install.sh similarity index 80% rename from deploy/inji-config-server/install.sh rename to deploy/config-server/install.sh index 9f0fee5eb..cbcd9feb4 100755 --- a/deploy/inji-config-server/install.sh +++ b/deploy/config-server/install.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Installs inji-config-server +# Installs config-server ## Usage: ./install.sh [kubeconfig] if [ $# -ge 1 ] ; then @@ -31,6 +31,6 @@ CHART_VERSION=0.0.1-develop $COPY_UTIL secret db-common-secrets postgres $NS $COPY_UTIL secret conf-secrets-various conf-secrets $NS - echo Installing inji-config-server - helm -n $NS install inji-config-server mosip/config-server -f values.yaml --wait --version $CHART_VERSION - echo Installed inji-Config-server. + echo Installing config-server + helm -n $NS install config-server mosip/config-server -f values.yaml --wait --version $CHART_VERSION + echo Installed config-server. diff --git a/deploy/inji-config-server/restart.sh b/deploy/config-server/restart.sh similarity index 79% rename from deploy/inji-config-server/restart.sh rename to deploy/config-server/restart.sh index 56d6e90ee..1c5d585a4 100755 --- a/deploy/inji-config-server/restart.sh +++ b/deploy/config-server/restart.sh @@ -1,18 +1,18 @@ #!/bin/bash -# Restart the inji-config-server service +# Restart the config-server service ## Usage: ./restart.sh [kubeconfig] if [ $# -ge 1 ] ; then export KUBECONFIG=$1 fi -function inji_config_server() { +function config_server() { NS=config-server kubectl -n $NS rollout restart deploy kubectl -n $NS get deploy -o name | xargs -n1 -t kubectl -n $NS rollout status - echo Restarted inji-config-server services + echo Restarted config-server services return 0 } @@ -22,4 +22,4 @@ set -o errexit ## set -e : exit the script if any statement returns a non-true set -o nounset ## set -u : exit the script if you try to use an uninitialised variable set -o errtrace # trace ERR through 'time command' and other functions set -o pipefail # trace ERR through pipes -inji_config_server # calling function \ No newline at end of file +config_server # calling function \ No newline at end of file diff --git a/deploy/inji-config-server/values.yaml b/deploy/config-server/values.yaml similarity index 100% rename from deploy/inji-config-server/values.yaml rename to deploy/config-server/values.yaml diff --git a/deploy/mimoto-apitestrig/delete.sh b/deploy/mimoto-apitestrig/delete.sh index 107900203..f458ae576 100755 --- a/deploy/mimoto-apitestrig/delete.sh +++ b/deploy/mimoto-apitestrig/delete.sh @@ -7,7 +7,7 @@ if [ $# -ge 1 ] ; then fi function deleting_apitestrig() { - NS=mimoto + NS=injiweb while true; do read -p "Are you sure you want to delete apitestrig helm charts?(Y/n) " yn if [ $yn = "Y" ] diff --git a/deploy/mimoto-apitestrig/install.sh b/deploy/mimoto-apitestrig/install.sh index 0c461acda..4ef967344 100755 --- a/deploy/mimoto-apitestrig/install.sh +++ b/deploy/mimoto-apitestrig/install.sh @@ -6,7 +6,7 @@ if [ $# -ge 1 ] ; then export KUBECONFIG=$1 fi -NS=mimoto +NS=injiweb CHART_VERSION=12.0.1 echo Create $NS namespace diff --git a/deploy/mimoto/delete.sh b/deploy/mimoto/delete.sh index b1fec08a8..c4f326e54 100755 --- a/deploy/mimoto/delete.sh +++ b/deploy/mimoto/delete.sh @@ -1,7 +1,7 @@ #!/bin/bash # Uninstalls mimoto function deleting_mimoto() { - NS=mimoto + NS=injiweb while true; do read -p "Are you sure you want to delete mimoto helm chart?(Y/n) " yn if [ $yn = "Y" ] diff --git a/deploy/mimoto/install.sh b/deploy/mimoto/install.sh index c81d20e6f..8fa1f30f5 100755 --- a/deploy/mimoto/install.sh +++ b/deploy/mimoto/install.sh @@ -6,7 +6,7 @@ if [ $# -ge 1 ] ; then export KUBECONFIG=$1 fi -NS=mimoto +NS=injiweb MIMOTO_CHART_VERSION=0.0.1-develop echo Create $NS namespace @@ -22,7 +22,7 @@ function installing_mimoto() { COPY_UTIL=../copy_cm_func.sh $COPY_UTIL configmap global default $NS $COPY_UTIL configmap artifactory-share artifactory $NS - $COPY_UTIL configmap inji-config-server-share config-server $NS + $COPY_UTIL configmap config-server-share config-server $NS echo Copy Secrets $COPY_UTIL secret keycloak-client-secrets keycloak $NS @@ -42,18 +42,18 @@ function installing_mimoto() { fi echo "Copy secrets to config-server namespace" - ../copy_cm_func.sh secret mimoto-wallet-binding-partner-api-key mimoto config-server - ../copy_cm_func.sh secret mimoto-oidc-partner-clientid mimoto config-server + ../copy_cm_func.sh secret mimoto-wallet-binding-partner-api-key injiweb config-server + ../copy_cm_func.sh secret mimoto-oidc-partner-clientid injiweb config-server echo Updating mimoto-oidc-keystore-password value - ../copy_cm_func.sh secret mimoto-oidc-keystore-password mimoto config-server + ../copy_cm_func.sh secret mimoto-oidc-keystore-password injiweb config-server - kubectl -n config-server set env --keys=mimoto-wallet-binding-partner-api-key --from secret/mimoto-wallet-binding-partner-api-key deployment/inji-config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ - kubectl -n config-server set env --keys=mimoto-oidc-partner-clientid --from secret/mimoto-oidc-partner-clientid deployment/inji-config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ - kubectl -n config-server set env --keys=mimoto-oidc-keystore-password --from secret/mimoto-oidc-keystore-password deployment/inji-config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ + kubectl -n config-server set env --keys=mimoto-wallet-binding-partner-api-key --from secret/mimoto-wallet-binding-partner-api-key deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ + kubectl -n config-server set env --keys=mimoto-oidc-partner-clientid --from secret/mimoto-oidc-partner-clientid deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ + kubectl -n config-server set env --keys=mimoto-oidc-keystore-password --from secret/mimoto-oidc-keystore-password deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ - kubectl -n config-server rollout restart deployment inji-config-server - kubectl -n config-server rollout status deployment inji-config-server + kubectl -n config-server rollout restart deployment config-server + kubectl -n config-server rollout status deployment config-server echo Installing mimoto helm -n $NS install mimoto mosip/mimoto --version $MIMOTO_CHART_VERSION $ENABLE_INSECURE diff --git a/deploy/mimoto/restart.sh b/deploy/mimoto/restart.sh index 8fa241f6a..399e088cc 100755 --- a/deploy/mimoto/restart.sh +++ b/deploy/mimoto/restart.sh @@ -7,7 +7,7 @@ if [ $# -ge 1 ] ; then fi function Restarting_mimoto() { - NS=mimoto + NS=injiweb kubectl -n $NS rollout restart deploy mimoto kubectl -n $NS get deploy -o name | xargs -n1 -t kubectl -n $NS rollout status diff --git a/partner-onboarder/copy_cm.sh b/partner-onboarder/copy_cm.sh index 3a25f2c41..8070b2c88 100755 --- a/partner-onboarder/copy_cm.sh +++ b/partner-onboarder/copy_cm.sh @@ -3,7 +3,7 @@ # DST_NS: Destination namespace COPY_UTIL=./copy_cm_func.sh -DST_NS=mimoto +DST_NS=injiweb $COPY_UTIL configmap global default $DST_NS $COPY_UTIL configmap keycloak-env-vars keycloak $DST_NS diff --git a/partner-onboarder/copy_secrets.sh b/partner-onboarder/copy_secrets.sh index 429a4c662..c9693c236 100755 --- a/partner-onboarder/copy_secrets.sh +++ b/partner-onboarder/copy_secrets.sh @@ -3,7 +3,7 @@ # DST_NS: Destination namespace COPY_UTIL=./copy_cm_func.sh -DST_NS=mimoto +DST_NS=injiweb $COPY_UTIL secret s3 s3 $DST_NS $COPY_UTIL secret keycloak keycloak $DST_NS diff --git a/partner-onboarder/delete.sh b/partner-onboarder/delete.sh index e807c8bbd..30e2f5fd8 100755 --- a/partner-onboarder/delete.sh +++ b/partner-onboarder/delete.sh @@ -7,7 +7,7 @@ if [ $# -ge 1 ] ; then fi function deleting_onboarder() { - NS=mimoto + NS=injiweb while true; do read -p "Are you sure you want to delete all partner-onboarder ?(Y/n) " yn if [ $yn = "Y" ]; then diff --git a/partner-onboarder/install.sh b/partner-onboarder/install.sh index 1017eddb1..299f01f00 100644 --- a/partner-onboarder/install.sh +++ b/partner-onboarder/install.sh @@ -83,7 +83,7 @@ fi ENABLE_INSECURE='--set onboarding.configmaps.onboarding.ENABLE_INSECURE=true'; fi - NS=mimoto + NS=injiweb CHART_VERSION=0.0.1-develop echo Create $NS namespace @@ -116,17 +116,17 @@ fi echo Updating mimoto-oidc-keystore-password value kubectl -n $NS create secret generic mimoto-oidc-keystore-password --from-literal=mimoto-oidc-keystore-password='mosip123' --dry-run=client -o yaml | kubectl apply -f - - ./copy_cm_func.sh secret mimoto-oidc-keystore-password mimoto config-server + ./copy_cm_func.sh secret mimoto-oidc-keystore-password injiweb config-server echo Updating Mimoto wallet binding partner api key and Mimoto OIDC Partner Client ID - ./copy_cm_func.sh secret mimoto-wallet-binding-partner-api-key mimoto config-server - ./copy_cm_func.sh secret mimoto-oidc-partner-clientid mimoto config-server - kubectl -n config-server set env --keys=mimoto-wallet-binding-partner-api-key --from secret/mimoto-wallet-binding-partner-api-key deployment/inji-config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ - kubectl -n config-server set env --keys=mimoto-oidc-partner-clientid --from secret/mimoto-oidc-partner-clientid deployment/inji-config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ - kubectl -n config-server set env --keys=mimoto-oidc-keystore-password --from secret/mimoto-oidc-keystore-password deployment/inji-config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ + ./copy_cm_func.sh secret mimoto-wallet-binding-partner-api-key injiweb config-server + ./copy_cm_func.sh secret mimoto-oidc-partner-clientid injiweb config-server + kubectl -n config-server set env --keys=mimoto-wallet-binding-partner-api-key --from secret/mimoto-wallet-binding-partner-api-key deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ + kubectl -n config-server set env --keys=mimoto-oidc-partner-clientid --from secret/mimoto-oidc-partner-clientid deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ + kubectl -n config-server set env --keys=mimoto-oidc-keystore-password --from secret/mimoto-oidc-keystore-password deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ - kubectl -n config-server rollout restart deployment inji-config-server - kubectl -n config-server rollout status deployment inji-config-server + kubectl -n config-server rollout restart deployment config-server + kubectl -n config-server rollout status deployment config-server echo Reports are moved to S3 under onboarder bucket return 0 From a3277a6945f596abac3f1cd9fbca8113fd836513 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 3 Feb 2025 13:19:14 +0530 Subject: [PATCH 330/860] [Injiweb 1203] add new api to fetch auth server wellknown and return it as part of the issuer configuration endpoint (#563) * [INJIWEB-1203] add an endpoint to fetch both issuers and authorization server wellknown and return to the caller Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1203] use caffiene cache provider to store the auth server wellknown response into cache and set the expiry time of cache entry in application properties file Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1203] add caffiene cache config in mimoto default properties file to use it when running the app using docker compose Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1203] deprecate the old endpoint of the issuers which is used to get the wellknown and add annotations with detailed info to include it in docs Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1203] use new exception message for auth server invalid wellknown scenario Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1203] in cache along with authorization endpoint and grant types store token endpoint from the auth server wellknown response Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1203] use token endpoint from authorization server wellknown as authorization audience Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1203] remove code related to fetching authorization_audience & proxy_token_endpoint from issuers config as we will be fetching them directly from auth server wellknown Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1203] update issuers test case to use new endpoint configuration and see if it is returning the response as expected Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1203] use custom errors to throw exceptions for authorization server wellknown fetching related scenarios Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1203] write different test cases for authorization server service class Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1203] write test case to check if the getIssuerConfiguration method of issuersServiceImpl is giving the response as expected or not Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1203] add test case to check if validator library is throwing the error or not when authorization_servers in issuer wellknown is null Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1203] use getTokenResponse method of credentialService class in idpController to avoid redundant code Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJWEB-1203] add new test cases in issuerServiceImpl class and udpate AuthorizarionServerService class tests Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1203] update the authorization_servers in getIssuersConfig file to fix the failing tests Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1203] update the issuers endpoints to fetch authorization_audience & proxy_token_endpoint from issuer wellknown and construct issuer wellknown based on credential_issuer_host field Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1203] update issuers configuration endpoint to return the response in a response wrapper and update its test to check if the response is returned properly or not Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1203] add a new test case to check the error scenario of issuers configuration endpoint Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1203] change auth server impl file info log to debug log and add info about new endpoint in openapi json file Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1203] throw entire stack trace in auth server impl file exceptions and udpate the test cases Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1203] remove issuance part when constructing issuer wellknown and add jakarta dependency required for validations Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1203] remove authorization_audience, proxy_token_endpoint & wellknown_endpoint from mimoto issuer config file Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1203] update the issuersDTO with constructed wellknown endpoint in issuers service impl file Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1203] add issuer_id & credential_issuer_host in docker compose issuer config file and replace resource issuers and default properties file with docker compose file contents Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1203] in tests store issuer wellknown and config response in json files and update the tests to fetch response from those files Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1203] add enable configuration annotation in cache config instead of main file Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1203] revert the changes of application-local properties file Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1203] remove unnecessary null checks & refactor the method names, add cache support for issuer wellknown endpoint and update the tests as per the PR comments Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1203] exclude authorization_audience in issuers endpoint response and expose & validate qr_code_type of issuer Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1203] extract getIssuerWellknown into separate class because spring doesn't provide cache support when cacheable method is called within the same class Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1203] update issuer controller and service to remove redundant lines of code and methods and update the test cases accordingly Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1203] use object mapper of jackson library to deserialize issuer class and remove annotations related to gson & remove unused QrCOdeTypeDeserializer and update test cases Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1203] change authorization_audience annotation from url to not blank Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1203] updated open api documentation for issuers endpoints Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1203] remove the logic of remvoing authorization_audience in getIssuers method of issuer service as sending the new field in the response is not an issue and remove unused dependencies Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1203] update getIssuerConfigDTO method of test utilities as we are returning authorization_audience in all endpoints Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --------- Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../config/mimoto-default.properties | 3 + .../config/mimoto-issuers-config.json | 5 +- docs/api-documentation-openapi.json | 418 +++++++++++++++++- pom.xml | 10 + .../mimoto/MimotoServiceApplication.java | 2 - .../io/mosip/mimoto/config/CacheConfig.java | 30 ++ .../config/IssuersValidationConfig.java | 25 +- .../constant/SwaggerLiteralConstants.java | 4 +- .../mimoto/controller/IdpController.java | 16 +- .../mimoto/controller/IssuersController.java | 62 ++- .../java/io/mosip/mimoto/dto/IssuerDTO.java | 31 +- .../AuthorizationServerWellKnownResponse.java | 38 ++ ...CredentialIssuerConfigurationResponse.java | 54 +++ .../CredentialIssuerWellKnownResponse.java | 4 + ...ationServerWellknownResponseException.java | 7 + .../InvalidWellknownResponseException.java | 11 +- .../exception/PlatformErrorMessages.java | 3 +- .../service/AuthorizationServerService.java | 8 + .../mimoto/service/CredentialService.java | 4 +- .../io/mosip/mimoto/service/IdpService.java | 5 +- .../service/IssuerWellknownService.java | 12 + .../mosip/mimoto/service/IssuersService.java | 12 +- .../impl/AuthorizationServerServiceImpl.java | 71 +++ .../service/impl/CredentialServiceImpl.java | 52 +-- .../mimoto/service/impl/IdpServiceImpl.java | 14 +- .../impl/IssuerWellknownServiceImpl.java | 51 +++ .../service/impl/IssuersServiceImpl.java | 152 +++---- .../io/mosip/mimoto/util/RestApiClient.java | 1 + .../resources/application-local.properties | 5 +- src/main/resources/mimoto-issuers-config.json | 123 +----- .../mimoto/controller/IdpControllerTest.java | 4 + .../controller/IssuersControllerTest.java | 146 ++++-- .../AuthorizationServerServiceTest.java | 87 ++++ .../service/IssuerWellknownServiceTest.java | 88 ++++ .../mimoto/service/IssuersServiceTest.java | 170 ++++--- ...lIssuerWellknownResponseValidatorTest.java | 45 +- .../io/mosip/mimoto/util/TestUtilities.java | 140 +++--- .../responses/expectedIssuerConfig.json | 51 +++ .../responses/expectedWellknown.json | 12 +- 39 files changed, 1473 insertions(+), 503 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/config/CacheConfig.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/AuthorizationServerWellKnownResponse.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerConfigurationResponse.java create mode 100644 src/main/java/io/mosip/mimoto/exception/AuthorizationServerWellknownResponseException.java create mode 100644 src/main/java/io/mosip/mimoto/service/AuthorizationServerService.java create mode 100644 src/main/java/io/mosip/mimoto/service/IssuerWellknownService.java create mode 100644 src/main/java/io/mosip/mimoto/service/impl/AuthorizationServerServiceImpl.java create mode 100644 src/main/java/io/mosip/mimoto/service/impl/IssuerWellknownServiceImpl.java create mode 100644 src/test/java/io/mosip/mimoto/service/AuthorizationServerServiceTest.java create mode 100644 src/test/java/io/mosip/mimoto/service/IssuerWellknownServiceTest.java create mode 100644 src/test/resources/responses/expectedIssuerConfig.json diff --git a/docker-compose/config/mimoto-default.properties b/docker-compose/config/mimoto-default.properties index 375e9f23d..f07501f09 100644 --- a/docker-compose/config/mimoto-default.properties +++ b/docker-compose/config/mimoto-default.properties @@ -287,3 +287,6 @@ mosip.data.share.get.url.pattern=http://datashare-service:8097/v1/datashare/get/ mosip.data.share.create.retry.count=3 #OpenId4VP related Configuration END + +#Caffeine cache related configurations +cache.expiry.time.in.min = 60 \ No newline at end of file diff --git a/docker-compose/config/mimoto-issuers-config.json b/docker-compose/config/mimoto-issuers-config.json index 8e9defa25..fa14ac9b5 100644 --- a/docker-compose/config/mimoto-issuers-config.json +++ b/docker-compose/config/mimoto-issuers-config.json @@ -1,6 +1,7 @@ { "issuers": [ { + "issuer_id": "StayProtected", "credential_issuer": "StayProtected", "display": [ { @@ -17,12 +18,10 @@ "protocol": "OpenId4VCI", "client_id": "wallet-demo", "client_alias": "wallet-demo-client", - "wellknown_endpoint": "https://injicertify-insurance.collab.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer", "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", - "authorization_audience": "https://esignet-insurance.collab.mosip.net/v1/esignet/oauth/v2/token", "token_endpoint": "https://localhost:8099/v1/mimoto/get-token/StayProtected", - "proxy_token_endpoint": "https://esignet-insurance.collab.mosip.net/v1/esignet/oauth/v2/token", "qr_code_type": "OnlineSharing", + "credential_issuer_host": "https://injicertify-insurance.collab.mosip.net", "enabled": "true" } ] diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index 5fd38afd5..4e06665cb 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -1441,7 +1441,6 @@ "string" ], "authorization_endpoint": "string", - "authorization_audience": "string", "token_endpoint": "string", "proxy_token_endpoint": "string", "credential_endpoint": "string", @@ -1605,7 +1604,7 @@ "tags": [ "Trusted Issuers" ], - "description": "This API provides the complete configuration details for the specific issuers passed in the path variable", + "description": "This API provides the complete configuration details for the specific issuers passed in the path variable. Since version 0.16.0, this endpoint is deprecated and will be removed in a future release.", "responses": { "200": { "description": "OK", @@ -1891,7 +1890,7 @@ "tags": [ "Trusted Issuers" ], - "description": "This API fetches and allows searching for Credential Types offered by the issuer, all sourced from the issuer's well-known configuration.", + "description": "This API fetches and allows searching for Credential Types offered by the issuer, all sourced from the issuer's well-known configuration. Since version 0.16.0, this endpoint is deprecated and will be removed in a future release. Use issuers new endpoint issuers/{issuer-id}/configuration instead.", "responses": { "200": { "description": "OK", @@ -2209,6 +2208,416 @@ "summary": "Get Issuers Wellknown" } }, + "/issuers/{issuer-id}/configuration": { + "get": { + "operationId": "getCredentialIssuerConfiguration", + "parameters": [ + { + "name": "issuer-id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "Trusted Issuers" + ], + "description": "This endpoint allows you to retrieve the well-known configuration of a specific issuer and its corresponding authorization server.", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "x-examples": { + "Example 1": { + "id": null, + "version": null, + "str": null, + "responsetime": null, + "metadata": null, + "response": { + "credential_issuer": "https://injicertify-insurance.dev1.mosip.net", + "authorization_servers": [ + "https://esignet-insurance.dev1.mosip.net" + ], + "credential_endpoint": "https://injicertify-insurance.dev1.mosip.net/v1/certify/issuance/credential", + "credential_configurations_supported": { + "InsuranceCredential": { + "format": "ldp_vc", + "scope": "sunbird_rc_insurance_vc_ldp", + "order": [ + "fullName", + "dob" + ], + "proof_types_supported": { + "jwt": { + "proof_signing_alg_values_supported": [ + "RS256", + "PS256" + ] + } + }, + "credential_definition": { + "type": [ + "VerifiableCredential", + "InsuranceCredential" + ], + "credentialSubject": { + "fullName": { + "display": [ + { + "name": "Name", + "locale": "en" + } + ] + }, + "dob": { + "display": [ + { + "name": "Date of Birth", + "locale": "en" + } + ] + } + } + }, + "display": [ + { + "name": "Health Insurance", + "locale": "en", + "logo": { + "url": "https://raw.githubusercontent.com/tw-mosip/file-server/master/StayProtectedInsurance.png", + "alt_text": "a square logo of a Veridonia" + }, + "background_image": { + "uri": "https://api.dev1.mosip.net/inji/veridonia-logo.png" + }, + "background_color": "#FDFAF9", + "text_color": "#7C4616" + } + ] + } + }, + "authorization": { + "authorization_endpoint": "https://esignet-insurance.dev1.mosip.net/authorize", + "grant_types_supported": [ + "authorization_code" + ] + } + }, + "errors": [] + } + }, + "properties": { + "version": { + "type": "string", + "nullable": true + }, + "id": { + "type": "string", + "nullable": true + }, + "responsetime": { + "type": "string", + "nullable": true + }, + "metadata": { + "type": "string", + "nullable": true + }, + "response": { + "type": "object", + "properties": { + "credential_issuer": { + "type": "string", + "format": "uri" + }, + "authorization_servers": { + "type": "array", + "items": { + "type": "string", + "format": "uri" + } + }, + "credential_endpoint": { + "type": "string", + "format": "uri" + }, + "credential_configurations_supported": { + "type": "object", + "properties": { + "InsuranceCredential": { + "type": "object", + "properties": { + "format": { + "type": "string" + }, + "scope": { + "type": "string" + }, + "order": { + "type": "array", + "items": { + "type": "string" + } + }, + "proof_types_supported": { + "type": "object", + "properties": { + "jwt": { + "type": "object", + "properties": { + "proof_signing_alg_values_supported": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "credential_definition": { + "type": "object", + "properties": { + "type": { + "type": "array", + "items": { + "type": "string" + } + }, + "credentialSubject": { + "type": "object", + "properties": { + "fullName": { + "$ref": "#/components/schemas/StringNode" + }, + "dob": { + "$ref": "#/components/schemas/StringNode" + } + } + } + } + }, + "display": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "locale": { + "type": "string" + }, + "logo": { + "type": "object", + "properties": { + "url": { + "type": "string", + "format": "uri" + }, + "alt_text": { + "type": "string" + } + } + }, + "background_image": { + "type": "object", + "properties": { + "uri": { + "type": "string", + "format": "uri" + } + } + }, + "background_color": { + "type": "string" + }, + "text_color": { + "type": "string" + } + } + } + } + } + } + } + }, + "authorization": { + "type": "object", + "properties": { + "authorization_endpoint": { + "type": "string", + "format": "uri" + }, + "grant_types_supported": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "errors": { + "type": "array", + "items": { + "type": "object" + } + } + } + }, + "examples": { + "Success response": { + "value": { + "credential_issuer": "https://injicertify-insurance.dev1.mosip.net", + "authorization_servers": [ + "https://esignet-insurance.dev1.mosip.net" + ], + "credential_endpoint": "https://injicertify-insurance.dev1.mosip.net/v1/certify/issuance/credential", + "credential_configurations_supported": { + "InsuranceCredential": { + "format": "ldp_vc", + "scope": "sunbird_rc_insurance_vc_ldp", + "order": [ + "fullName", + "dob" + ], + "proof_types_supported": { + "jwt": { + "proof_signing_alg_values_supported": [ + "RS256", + "PS256" + ] + } + }, + "credential_definition": { + "type": [ + "VerifiableCredential", + "InsuranceCredential" + ], + "credentialSubject": { + "fullName": { + "display": [ + { + "name": "Name", + "locale": "en" + } + ] + }, + "dob": { + "display": [ + { + "name": "Date of Birth", + "locale": "en" + } + ] + } + } + }, + "display": [ + { + "name": "Health Insurance", + "locale": "en", + "logo": { + "url": "https://raw.githubusercontent.com/tw-mosip/file-server/master/StayProtectedInsurance.png", + "alt_text": "a square logo of a Veridonia" + }, + "background_image": { + "uri": "https://api.dev1.mosip.net/inji/veridonia-logo.png" + }, + "background_color": "#FDFAF9", + "text_color": "#7C4616" + } + ] + } + }, + "authorization": { + "authorization_endpoint": "https://esignet-insurance.dev1.mosip.net/authorize", + "grant_types_supported": [ + "authorization_code" + ] + } + } + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "errorCode": { + "type": "string" + }, + "errorMessage": { + "type": "string" + } + } + } + } + } + }, + "examples": { + "FailureResponse1": { + "summary": "Api not accessible failure", + "value": { + "errors": [ + { + "errorCode": "RESIDENT-APP-026", + "errorMessage": "Api not accessible failure" + } + ], + "response": null + } + }, + "FailureResponse2": { + "summary": "Invalid issuer ID", + "value": { + "errors": [ + { + "errorCode": "RESIDENT-APP-035", + "errorMessage": "Invalid issuer ID" + } + ], + "response": null + } + }, + "FailureResponse3": { + "summary": "Invalid Authorization Server well-known endpoint", + "value": { + "errors": [ + { + "errorCode": "RESIDENT-APP-042", + "errorMessage": "Invalid Authorization Server well-known from server:\nAuthorization Server host url cannot be null" + } + ], + "response": null + } + } + } + } + } + } + } + }, + "summary": "Get specific Issuer's and its corresponding Authorization Server well-known config" + }, "/credentials/download": { "post": { "requestBody": { @@ -2482,6 +2891,9 @@ "JsonNode": { "type": "object" }, + "StringNode": { + "type": "string" + }, "Event": { "type": "object", "properties": { diff --git a/pom.xml b/pom.xml index 6540c75fd..8ffc495c8 100644 --- a/pom.xml +++ b/pom.xml @@ -452,7 +452,17 @@ ${kernel.cbeffutil.version} + + com.github.ben-manes.caffeine + caffeine + 3.1.8 + + + jakarta.validation + jakarta.validation-api + 3.0.2 + diff --git a/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java b/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java index d01d25a2a..9d6ab1a8a 100644 --- a/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java +++ b/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java @@ -4,8 +4,6 @@ import io.mosip.kernel.biometrics.spi.CbeffUtil; import io.mosip.kernel.cbeffutil.impl.CbeffImpl; -import io.mosip.kernel.core.logger.spi.Logger; -import io.mosip.mimoto.util.LoggerUtil; import lombok.extern.slf4j.Slf4j; import org.json.simple.JSONObject; import org.springframework.boot.SpringApplication; diff --git a/src/main/java/io/mosip/mimoto/config/CacheConfig.java b/src/main/java/io/mosip/mimoto/config/CacheConfig.java new file mode 100644 index 000000000..3a02fc2a9 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/config/CacheConfig.java @@ -0,0 +1,30 @@ +package io.mosip.mimoto.config; + +import java.util.concurrent.TimeUnit; +import com.github.benmanes.caffeine.cache.Caffeine; +import org.springframework.cache.CacheManager; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.cache.caffeine.CaffeineCacheManager; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.beans.factory.annotation.Value; + +@Configuration +@EnableCaching +public class CacheConfig { + + @Value("${cache.expiry.time.in.min}") + private long cacheExpiryTimeInMin; + + @Bean + public Caffeine caffeineConfig() { + return Caffeine.newBuilder().expireAfterWrite(cacheExpiryTimeInMin, TimeUnit.MINUTES); + } + + @Bean + public CacheManager cacheManager(Caffeine caffeine) { + CaffeineCacheManager cacheManager = new CaffeineCacheManager(); + cacheManager.setCaffeine(caffeine); + return cacheManager; + } +} diff --git a/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java b/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java index 6cbe8fe5f..783a81606 100644 --- a/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java +++ b/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java @@ -2,6 +2,9 @@ import io.mosip.mimoto.dto.IssuersDTO; import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.AuthorizationServerWellknownResponseException; +import io.mosip.mimoto.exception.InvalidWellknownResponseException; +import io.mosip.mimoto.model.QRCodeType; import io.mosip.mimoto.service.IssuersService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -13,9 +16,12 @@ import org.springframework.validation.Validator; import java.io.IOException; +import java.util.Arrays; import java.util.HashSet; import java.util.Set; import java.util.concurrent.atomic.AtomicReference; +import java.util.stream.Collectors; +import com.fasterxml.jackson.databind.exc.InvalidFormatException; @Slf4j @Component @@ -29,15 +35,28 @@ public class IssuersValidationConfig implements ApplicationRunner { private final String VALIDATION_ERROR_MSG = "\n\nValidation failed in Mimoto-issuers-config.json:"; @Override - public void run(ApplicationArguments args) throws ApiNotAccessibleException, IOException { + public void run(ApplicationArguments args) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { log.info("Validation for mimoto-issuers-config.json STARTED"); - IssuersDTO issuerDTOList = issuersService.getAllIssuersWithAllFields(); AtomicReference errors = new AtomicReference<>(); AtomicReference fieldErrors = new AtomicReference<>(""); AtomicReference> credentialIssuers = new AtomicReference<>(new HashSet<>()); - if(issuerDTOList != null){ + IssuersDTO issuerDTOList = null; + try { + issuerDTOList = issuersService.getAllIssuers(); + } catch (InvalidFormatException e) { + String validValues = Arrays.stream(QRCodeType.values()) + .map(Enum::name) + .collect(Collectors.joining(", ")); + log.error(VALIDATION_ERROR_MSG + "qr_code_type value of issuer is invalid. It has to be one of these values : [ " + validValues + " ]"); + throw new RuntimeException(VALIDATION_ERROR_MSG); + } catch (Exception e) { + log.error(VALIDATION_ERROR_MSG + e.toString()); + throw new RuntimeException(VALIDATION_ERROR_MSG); + } + + if (issuerDTOList != null) { issuerDTOList.getIssuers().forEach(issuerDTO -> { if (!issuerDTO.getProtocol().equals("OTP")) { errors.set(new BeanPropertyBindingResult(issuerDTO, "issuerDTO")); diff --git a/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java b/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java index 188471181..761c76c82 100644 --- a/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java +++ b/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java @@ -49,7 +49,9 @@ public class SwaggerLiteralConstants { public static final String ISSUERS_GET_SPECIFIC_ISSUER_SUMMARY = "Retrieve specific issuer's config" ; public static final String ISSUERS_GET_SPECIFIC_ISSUER_DESCRIPTION = "This endpoint allow you to retrieve the complete configuration of the specific issuer" ; public static final String ISSUERS_GET_ISSUER_WELLKNOWN_SUMMARY = "Retrieve specific issuer's well known" ; - public static final String ISSUERS_GET_ISSUER_WELLKNOWN_DESCRIPTION = "This endpoint allow you to retrieve the well known of the specific issuer" ; + public static final String ISSUERS_GET_ISSUER_WELLKNOWN_DESCRIPTION = "This endpoint allow you to retrieve the well known of the specific issuer. Since version 0.16.0, this endpoint is deprecated and will be removed in a future release. Use issuers new endpoint issuers/{issuer-id}/configuration instead."; + public static final String ISSUERS_GET_ISSUER_CONFIGURATION_SUMMARY = "Retrieve specific issuer's and its corresponding authorization server well-known config"; + public static final String ISSUERS_GET_ISSUER_CONFIGURATION_DESCRIPTION = "This endpoint allows you to retrieve the well-known configuration of a specific issuer and its corresponding authorization server"; /* Prensentation Controller */ public static final String PRESENTATION_NAME = "Presentation" ; diff --git a/src/main/java/io/mosip/mimoto/controller/IdpController.java b/src/main/java/io/mosip/mimoto/controller/IdpController.java index f02ce2cc4..da31359cb 100644 --- a/src/main/java/io/mosip/mimoto/controller/IdpController.java +++ b/src/main/java/io/mosip/mimoto/controller/IdpController.java @@ -1,12 +1,10 @@ package io.mosip.mimoto.controller; -import io.mosip.kernel.core.logger.spi.Logger; import io.mosip.kernel.core.util.JsonUtils; import io.mosip.mimoto.constant.ApiName; import io.mosip.mimoto.constant.SwaggerLiteralConstants; import io.mosip.mimoto.core.http.ResponseWrapper; import io.mosip.mimoto.dto.ErrorDTO; -import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.exception.IdpException; @@ -14,8 +12,8 @@ import io.mosip.mimoto.service.IdpService; import io.mosip.mimoto.service.IssuersService; import io.mosip.mimoto.service.RestClientService; +import io.mosip.mimoto.service.impl.CredentialServiceImpl; import io.mosip.mimoto.util.JoseUtil; -import io.mosip.mimoto.util.LoggerUtil; import io.mosip.mimoto.util.RequestValidator; import io.mosip.mimoto.util.Utilities; import io.swagger.v3.oas.annotations.Operation; @@ -26,14 +24,11 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpEntity; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; -import org.springframework.util.MultiValueMap; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; -import org.springframework.web.client.RestTemplate; import javax.validation.Valid; import java.util.List; @@ -60,6 +55,9 @@ public class IdpController { @Autowired RequestValidator requestValidator; + @Autowired + CredentialServiceImpl credentialService; + @Operation(summary = SwaggerLiteralConstants.IDP_BINDING_OTP_SUMMARY, description = SwaggerLiteralConstants.IDP_BINDING_OTP_DESCRIPTION) @PostMapping(value = "/binding-otp", produces = MediaType.APPLICATION_JSON_VALUE) @SuppressWarnings("unchecked") @@ -127,11 +125,9 @@ public ResponseEntity getToken(@RequestParam Map params, log.info("Reached the getToken Controller for Issuer " + issuer); ResponseWrapper responseWrapper = new ResponseWrapper<>(); try { - IssuerDTO issuerDTO = issuersService.getIssuerConfig(issuer); - HttpEntity> request = idpService.constructGetTokenRequest(params, issuerDTO); - TokenResponseDTO response = new RestTemplate().postForObject(idpService.getTokenEndpoint(issuerDTO), request, TokenResponseDTO.class); + TokenResponseDTO response = credentialService.getTokenResponse(params, issuer); return ResponseEntity.status(HttpStatus.OK).body(response); - } catch (Exception ex){ + } catch (Exception ex) { log.error("Exception Occurred while Invoking the Token Endpoint : ", ex); String[] errorObj = Utilities.handleExceptionWithErrorCode(ex); List errors = Utilities.getErrors(errorObj[0], errorObj[1]); diff --git a/src/main/java/io/mosip/mimoto/controller/IssuersController.java b/src/main/java/io/mosip/mimoto/controller/IssuersController.java index d1bf9517b..c5cc5933f 100644 --- a/src/main/java/io/mosip/mimoto/controller/IssuersController.java +++ b/src/main/java/io/mosip/mimoto/controller/IssuersController.java @@ -5,8 +5,12 @@ import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.IssuersDTO; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerConfigurationResponse; import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.AuthorizationServerWellknownResponseException; +import io.mosip.mimoto.exception.InvalidIssuerIdException; +import io.mosip.mimoto.exception.InvalidWellknownResponseException; import io.mosip.mimoto.service.IssuersService; import io.mosip.mimoto.util.Utilities; import io.swagger.v3.oas.annotations.Operation; @@ -32,13 +36,17 @@ public class IssuersController { @Autowired IssuersService issuersService; + @Autowired + Utilities utilities; + @Operation(summary = SwaggerLiteralConstants.ISSUERS_GET_ISSUERS_SUMMARY, description = SwaggerLiteralConstants.ISSUERS_GET_ISSUERS_DESCRIPTION) @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity> getAllIssuers(@RequestParam(required = false, name = "search") String search) { ResponseWrapper responseWrapper = new ResponseWrapper<>(); try { - responseWrapper.setResponse(issuersService.getAllIssuers(search)); - } catch (ApiNotAccessibleException | IOException e) { + responseWrapper.setResponse(issuersService.getIssuers(search)); + } catch (ApiNotAccessibleException | IOException | AuthorizationServerWellknownResponseException | + InvalidWellknownResponseException e) { log.error("Exception occurred while fetching issuers ", e); responseWrapper.setErrors(List.of(new ErrorDTO(API_NOT_ACCESSIBLE_EXCEPTION.getCode(), API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); @@ -47,11 +55,21 @@ public ResponseEntity> getAllIssuers(@RequestParam(r return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); } + /** + * @deprecated Since version 0.16.0, this endpoint is deprecated and will be removed in a future release. + * Please use new endpoint {@link #getIssuerConfiguration(String)} instead. + */ + @Deprecated(since = "0.16.0", forRemoval = true) @Operation(summary = SwaggerLiteralConstants.ISSUERS_GET_ISSUER_WELLKNOWN_SUMMARY, description = SwaggerLiteralConstants.ISSUERS_GET_ISSUER_WELLKNOWN_DESCRIPTION) @GetMapping(value = "/{issuer-id}/well-known-proxy", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity getIssuerWellknown(@PathVariable("issuer-id") String issuerId) { try { - CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = issuersService.getIssuerWellknown(issuerId); + CredentialIssuerConfigurationResponse issuerConfigurationResponse = issuersService.getIssuerConfiguration(issuerId); + CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = new CredentialIssuerWellKnownResponse( + issuerConfigurationResponse.getCredentialIssuer(), + issuerConfigurationResponse.getAuthorizationServers(), + issuerConfigurationResponse.getCredentialEndPoint(), + issuerConfigurationResponse.getCredentialConfigurationsSupported()); return ResponseEntity.status(HttpStatus.OK).body(credentialIssuerWellKnownResponse); } catch (Exception exception) { log.error("Exception occurred while fetching issuers wellknown ", exception); @@ -59,13 +77,23 @@ public ResponseEntity getIssuerWellknown(@Pat } } + /** + * @deprecated Since version 0.16.0, this endpoint is deprecated and will be removed in a future release. + */ + @Deprecated(since = "0.16.0", forRemoval = true) @Operation(summary = SwaggerLiteralConstants.ISSUERS_GET_SPECIFIC_ISSUER_SUMMARY, description = SwaggerLiteralConstants.ISSUERS_GET_SPECIFIC_ISSUER_DESCRIPTION) @GetMapping(value = "/{issuer-id}", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity> getIssuerConfig(@PathVariable("issuer-id") String issuerId) { ResponseWrapper responseWrapper = new ResponseWrapper<>(); - IssuerDTO issuerConfig; + IssuerDTO issuerDTO; try { - issuerConfig = issuersService.getIssuerConfig(issuerId); + issuerDTO = issuersService.getIssuerDetails(issuerId); + responseWrapper.setResponse(issuerDTO); + return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); + } catch (InvalidIssuerIdException exception) { + log.error("invalid issuer id passed - ", issuerId); + responseWrapper.setErrors(List.of(new ErrorDTO(INVALID_ISSUER_ID_EXCEPTION.getCode(), INVALID_ISSUER_ID_EXCEPTION.getMessage()))); + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(responseWrapper); } catch (Exception exception) { log.error("Exception occurred while fetching issuers ", exception); String[] errorObj = Utilities.handleExceptionWithErrorCode(exception); @@ -74,13 +102,23 @@ public ResponseEntity> getIssuerConfig(@PathVariable( responseWrapper.setErrors(errors); return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); } - responseWrapper.setResponse(issuerConfig); - if (issuerConfig == null) { - log.error("invalid issuer id passed - {}", issuerId); - responseWrapper.setErrors(List.of(new ErrorDTO(INVALID_ISSUER_ID_EXCEPTION.getCode(), INVALID_ISSUER_ID_EXCEPTION.getMessage()))); - return ResponseEntity.status(HttpStatus.NOT_FOUND).body(responseWrapper); - } + } - return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); + @Operation(summary = SwaggerLiteralConstants.ISSUERS_GET_ISSUER_CONFIGURATION_SUMMARY, description = SwaggerLiteralConstants.ISSUERS_GET_ISSUER_CONFIGURATION_DESCRIPTION) + @GetMapping(value = "/{issuer-id}/configuration", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity> getIssuerConfiguration(@PathVariable("issuer-id") String issuerId) { + ResponseWrapper responseWrapper = new ResponseWrapper<>(); + try { + CredentialIssuerConfigurationResponse issuerConfigurationResponse = issuersService.getIssuerConfiguration(issuerId); + responseWrapper.setResponse(issuerConfigurationResponse); + return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); + } catch (Exception exception) { + log.error("Exception occurred while fetching issuers configurations - " + exception); + String[] errorObj = Utilities.handleExceptionWithErrorCode(exception); + List errors = Utilities.getErrors(errorObj[0], errorObj[1]); + responseWrapper.setResponse(null); + responseWrapper.setErrors(errors); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); + } } } diff --git a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java index aae0880f6..3a4d1e79d 100644 --- a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java @@ -1,14 +1,13 @@ package io.mosip.mimoto.dto; import com.fasterxml.jackson.annotation.JsonInclude; -import com.google.gson.annotations.Expose; import io.mosip.mimoto.model.QRCodeType; import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.validation.Valid; +import jakarta.validation.*; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotEmpty; import lombok.Data; - +import org.hibernate.validator.constraints.URL; import java.util.List; import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL; @@ -16,29 +15,22 @@ @Data public class IssuerDTO { - @Expose @NotBlank @Schema(description = "Unique Identifier of the Issuer") String issuer_id; - @Expose @NotBlank @Schema(description = "protocol of the download flow", allowableValues = {"OTP", "OpenId4VCI"}) String protocol; - @Expose @Valid @NotEmpty @Schema(description = "Display Properties of the Issuer") List display; - @Expose @NotBlank @Schema(description = "Client Id of the Onboarded Mimoto OIDC Client") String client_id; - @NotBlank - @Expose + @URL @Schema(description = "Wellknown endpoint of the credential issuer") String wellknown_endpoint; - @Expose - @JsonInclude(NON_NULL) @NotBlank @Schema(description = "Redirect URI configured while creating the OIDC Client") String redirect_uri; @@ -46,34 +38,23 @@ public class IssuerDTO { @NotBlank @Schema(description = "Authorization Audience for retrieving Token from token endpoint") String authorization_audience; - @Expose - @JsonInclude(NON_NULL) @Schema(description = "Mimoto Token Endpoint Fetching the Token From Authorization Server with Client Assertion") String token_endpoint; - @Expose - @JsonInclude(NON_NULL) - @NotBlank + @URL @Schema(description = "Token Endpoint for Fetching the Token From Authorization Server") String proxy_token_endpoint; - @Expose - @JsonInclude(NON_NULL) @NotBlank @Schema(description = "Client Alias of the Issuer in the keyStore file") String client_alias; + @Schema(description = "QR code type of issuer is used to decide whether the downloaded Verifiable Credential is allowed for online sharing or not") QRCodeType qr_code_type; - @Expose - @JsonInclude(NON_NULL) @NotBlank - @Schema(description = "Toggler to Enable / Disable the Issuer", defaultValue = "false") + @Schema(description = "Toggle to Enable / Disable the Issuer", defaultValue = "false") String enabled; - @Expose @NotBlank - @JsonInclude(NON_NULL) @Schema(description = "Unique Identifier of the Issuer") String credential_issuer; - @Expose @NotBlank - @JsonInclude(NON_NULL) @Schema(description = "Credential Issuer Host") String credential_issuer_host; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/AuthorizationServerWellKnownResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/AuthorizationServerWellKnownResponse.java new file mode 100644 index 000000000..f21523324 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/AuthorizationServerWellKnownResponse.java @@ -0,0 +1,38 @@ +package io.mosip.mimoto.dto.mimoto; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.google.gson.annotations.SerializedName; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; +import org.hibernate.validator.constraints.URL; +import java.util.List; + + +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class AuthorizationServerWellKnownResponse { + + @NotBlank + @URL + @SerializedName("authorization_endpoint") + @JsonProperty("authorization_endpoint") + @Schema(description = "Endpoint for Authenticating & Authorizing the user") + private String authorizationEndpoint; + + + @NotEmpty + @SerializedName("grant_types_supported") + @JsonProperty("grant_types_supported") + @Schema(description = "List of grant types_supported by Authorization Server") + private List<@NotBlank String> grantTypesSupported; + + @NotBlank + @URL + @SerializedName("token_endpoint") + @JsonProperty(value = "token_endpoint", access = JsonProperty.Access.WRITE_ONLY) + @Schema(description = "Endpoint for getting the token from the authorization server") + private String tokenEndpoint; +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerConfigurationResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerConfigurationResponse.java new file mode 100644 index 000000000..1a8527b2a --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerConfigurationResponse.java @@ -0,0 +1,54 @@ +package io.mosip.mimoto.dto.mimoto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.google.gson.annotations.SerializedName; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.Pattern; +import lombok.AllArgsConstructor; +import lombok.Data; +import org.hibernate.validator.constraints.URL; + +import java.util.List; +import java.util.Map; + +@Data +@AllArgsConstructor +public class CredentialIssuerConfigurationResponse { + @NotBlank + @URL + @SerializedName("credential_issuer") + @JsonProperty("credential_issuer") + @Schema(description = "Unique Identifier of the Credential Issuer") + private String credentialIssuer; + + @NotEmpty + @SerializedName("authorization_servers") + @JsonProperty("authorization_servers") + @Schema(description = "List of Authorization Server Endpoint") + private List<@NotBlank @URL String> authorizationServers; + + @NotBlank + @SerializedName("credential_endpoint") + @Pattern(regexp = "https?://.*?/credential$") + @JsonProperty("credential_endpoint") + @Schema(description = "Endpoint to download the Credential") + private String credentialEndPoint; + + @NotEmpty + @Valid + @SerializedName("credential_configurations_supported") + @JsonProperty("credential_configurations_supported") + @Schema(description = "List of Credential Configurations Supported") + private Map<@NotBlank String, @Valid CredentialsSupportedResponse> credentialConfigurationsSupported; + + @Valid + @SerializedName("authorization") + @JsonProperty("authorization") + @Schema(description = "Authorization Server Configurations") + private AuthorizationServerWellKnownResponse authorizationServerWellKnownResponse; +} + + diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerWellKnownResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerWellKnownResponse.java index d4523c3c1..f6fe6d86b 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerWellKnownResponse.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerWellKnownResponse.java @@ -7,13 +7,17 @@ import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.Pattern; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; import org.hibernate.validator.constraints.URL; import java.util.List; import java.util.Map; @Data +@AllArgsConstructor +@NoArgsConstructor public class CredentialIssuerWellKnownResponse { @NotBlank @URL diff --git a/src/main/java/io/mosip/mimoto/exception/AuthorizationServerWellknownResponseException.java b/src/main/java/io/mosip/mimoto/exception/AuthorizationServerWellknownResponseException.java new file mode 100644 index 000000000..0fbe511ac --- /dev/null +++ b/src/main/java/io/mosip/mimoto/exception/AuthorizationServerWellknownResponseException.java @@ -0,0 +1,7 @@ +package io.mosip.mimoto.exception; + +public class AuthorizationServerWellknownResponseException extends BaseCheckedException { + public AuthorizationServerWellknownResponseException(String message) { + super(PlatformErrorMessages.INVALID_AUTHORIZATION_SERVER_WELLKNOWN_RESPONSE_EXCEPTION.getCode(), PlatformErrorMessages.INVALID_AUTHORIZATION_SERVER_WELLKNOWN_RESPONSE_EXCEPTION.getMessage() + "\n" + message); + } +} diff --git a/src/main/java/io/mosip/mimoto/exception/InvalidWellknownResponseException.java b/src/main/java/io/mosip/mimoto/exception/InvalidWellknownResponseException.java index bbd0b9bff..549a6ef24 100644 --- a/src/main/java/io/mosip/mimoto/exception/InvalidWellknownResponseException.java +++ b/src/main/java/io/mosip/mimoto/exception/InvalidWellknownResponseException.java @@ -3,15 +3,20 @@ public class InvalidWellknownResponseException extends BaseCheckedException { public InvalidWellknownResponseException() { - super(PlatformErrorMessages.INVALID_CREDENTIAL_ISSUER_WELLKNOWN_RESPONSE_EXCEPTION.getCode(),PlatformErrorMessages.INVALID_CREDENTIAL_ISSUER_WELLKNOWN_RESPONSE_EXCEPTION.getMessage()); + super(PlatformErrorMessages.INVALID_CREDENTIAL_ISSUER_WELLKNOWN_RESPONSE_EXCEPTION.getCode(), PlatformErrorMessages.INVALID_CREDENTIAL_ISSUER_WELLKNOWN_RESPONSE_EXCEPTION.getMessage()); } public InvalidWellknownResponseException(String message) { - super(PlatformErrorMessages.INVALID_CREDENTIAL_ISSUER_WELLKNOWN_RESPONSE_EXCEPTION.getCode(),PlatformErrorMessages.INVALID_CREDENTIAL_ISSUER_WELLKNOWN_RESPONSE_EXCEPTION.getMessage()+"\n"+message); + super(PlatformErrorMessages.INVALID_CREDENTIAL_ISSUER_WELLKNOWN_RESPONSE_EXCEPTION.getCode(), PlatformErrorMessages.INVALID_CREDENTIAL_ISSUER_WELLKNOWN_RESPONSE_EXCEPTION.getMessage() + "\n" + message); } public InvalidWellknownResponseException(String message, Throwable cause) { - super(PlatformErrorMessages.INVALID_CREDENTIAL_ISSUER_WELLKNOWN_RESPONSE_EXCEPTION.getCode(),message, cause); + super(PlatformErrorMessages.INVALID_CREDENTIAL_ISSUER_WELLKNOWN_RESPONSE_EXCEPTION.getCode(), message, cause); } + + public InvalidWellknownResponseException(String code, String message) { + super(code, message); + } + } diff --git a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java index cb965e675..cb917a3fb 100644 --- a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java +++ b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java @@ -87,7 +87,8 @@ public enum PlatformErrorMessages { INVALID_VERIFIER_ID_EXCEPTION(PlatformConstants.PREFIX + "038", "Invalid Verifier ClientId"), INVALID_VERIFIER_REDIRECT_URI_EXCEPTION(PlatformConstants.PREFIX + "039", "Invalid Redirect Uri"), INVALID_CREDENTIAL_RESOURCE_URI_EXCEPTION(PlatformConstants.PREFIX + "040", "The Credential Resource is Invalid"), - INVALID_CREDENTIAL_ISSUER_WELLKNOWN_RESPONSE_EXCEPTION(PlatformConstants.PREFIX + "041", "Invalid Wellknown from Issuer"); + INVALID_CREDENTIAL_ISSUER_WELLKNOWN_RESPONSE_EXCEPTION(PlatformConstants.PREFIX + "041", "Invalid Wellknown from Issuer"), + INVALID_AUTHORIZATION_SERVER_WELLKNOWN_RESPONSE_EXCEPTION(PlatformConstants.PREFIX + "042", "Invalid Authorization Server well-known from server:"); /** The error message. */ diff --git a/src/main/java/io/mosip/mimoto/service/AuthorizationServerService.java b/src/main/java/io/mosip/mimoto/service/AuthorizationServerService.java new file mode 100644 index 000000000..1f7d8a0ba --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/AuthorizationServerService.java @@ -0,0 +1,8 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.dto.mimoto.*; +import io.mosip.mimoto.exception.AuthorizationServerWellknownResponseException; + +public interface AuthorizationServerService { + AuthorizationServerWellKnownResponse getWellknown(String authorizationServerHostUrl) throws AuthorizationServerWellknownResponseException; +} diff --git a/src/main/java/io/mosip/mimoto/service/CredentialService.java b/src/main/java/io/mosip/mimoto/service/CredentialService.java index 5c3de9160..5d24cc5c8 100644 --- a/src/main/java/io/mosip/mimoto/service/CredentialService.java +++ b/src/main/java/io/mosip/mimoto/service/CredentialService.java @@ -1,13 +1,15 @@ package io.mosip.mimoto.service; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.AuthorizationServerWellknownResponseException; +import io.mosip.mimoto.exception.InvalidWellknownResponseException; import java.io.ByteArrayInputStream; import java.io.IOException; import java.util.Map; public interface CredentialService { - TokenResponseDTO getTokenResponse(Map params, String issuerId) throws ApiNotAccessibleException, IOException; + TokenResponseDTO getTokenResponse(Map params, String issuerId) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException; ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String credentialType, TokenResponseDTO response, String credentialValidity, String locale) throws Exception; } diff --git a/src/main/java/io/mosip/mimoto/service/IdpService.java b/src/main/java/io/mosip/mimoto/service/IdpService.java index 99971fb8f..086fa83ab 100644 --- a/src/main/java/io/mosip/mimoto/service/IdpService.java +++ b/src/main/java/io/mosip/mimoto/service/IdpService.java @@ -1,6 +1,7 @@ package io.mosip.mimoto.service; import io.mosip.mimoto.dto.IssuerDTO; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerConfigurationResponse; import io.mosip.mimoto.exception.IssuerOnboardingException; import org.springframework.http.HttpEntity; import org.springframework.util.MultiValueMap; @@ -9,7 +10,7 @@ import java.util.Map; public interface IdpService { - HttpEntity> constructGetTokenRequest(Map params, IssuerDTO issuerDTO) throws IOException, IssuerOnboardingException; + HttpEntity> constructGetTokenRequest(Map params, IssuerDTO issuerDTO, String authorizationAudience) throws IOException, IssuerOnboardingException; - String getTokenEndpoint(IssuerDTO issuerDTO); + String getTokenEndpoint(CredentialIssuerConfigurationResponse credentialIssuerConfigurationResponse); } diff --git a/src/main/java/io/mosip/mimoto/service/IssuerWellknownService.java b/src/main/java/io/mosip/mimoto/service/IssuerWellknownService.java new file mode 100644 index 000000000..97ba589a4 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/IssuerWellknownService.java @@ -0,0 +1,12 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.AuthorizationServerWellknownResponseException; +import io.mosip.mimoto.exception.InvalidWellknownResponseException; + +import java.io.IOException; + +public interface IssuerWellknownService { + CredentialIssuerWellKnownResponse getWellknown(String credentialIssuerHost) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException; +} diff --git a/src/main/java/io/mosip/mimoto/service/IssuersService.java b/src/main/java/io/mosip/mimoto/service/IssuersService.java index ab1ef4c04..c78f97e73 100644 --- a/src/main/java/io/mosip/mimoto/service/IssuersService.java +++ b/src/main/java/io/mosip/mimoto/service/IssuersService.java @@ -4,18 +4,18 @@ import io.mosip.mimoto.dto.IssuersDTO; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.AuthorizationServerWellknownResponseException; import io.mosip.mimoto.exception.InvalidIssuerIdException; +import io.mosip.mimoto.exception.InvalidWellknownResponseException; import java.io.IOException; public interface IssuersService { - IssuersDTO getAllIssuers(String search) throws ApiNotAccessibleException, IOException; + IssuersDTO getIssuers(String search) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException; - IssuersDTO getAllIssuersWithAllFields() throws ApiNotAccessibleException, IOException; + IssuerDTO getIssuerDetails(String issuerId) throws ApiNotAccessibleException, IOException, InvalidIssuerIdException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException; - IssuerDTO getIssuerConfig(String issuerId) throws ApiNotAccessibleException, IOException, InvalidIssuerIdException; + IssuersDTO getAllIssuers() throws ApiNotAccessibleException, AuthorizationServerWellknownResponseException, IOException, InvalidWellknownResponseException; - CredentialIssuerWellKnownResponse getIssuerWellknown(String issuerId) throws ApiNotAccessibleException, IOException; - - CredentialsSupportedResponse getIssuerWellknownForCredentialType(String issuerId, String credentialId) throws ApiNotAccessibleException, IOException; + CredentialIssuerConfigurationResponse getIssuerConfiguration(String issuerId) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException; } diff --git a/src/main/java/io/mosip/mimoto/service/impl/AuthorizationServerServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/AuthorizationServerServiceImpl.java new file mode 100644 index 000000000..d1bc79ce7 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/impl/AuthorizationServerServiceImpl.java @@ -0,0 +1,71 @@ +package io.mosip.mimoto.service.impl; + + +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.dto.mimoto.AuthorizationServerWellKnownResponse; +import io.mosip.mimoto.exception.AuthorizationServerWellknownResponseException; +import io.mosip.mimoto.service.AuthorizationServerService; +import io.mosip.mimoto.util.RestApiClient; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Validation; +import jakarta.validation.Validator; +import jakarta.validation.ValidatorFactory; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.Set; + +import org.springframework.cache.annotation.Cacheable; + +@Slf4j +@Service +public class AuthorizationServerServiceImpl implements AuthorizationServerService { + + @Autowired + private Validator validator; + + @Autowired + private RestApiClient restApiClient; + + @Autowired + private ObjectMapper objectMapper; + + @Override + @Cacheable(value = "authServerWellknown", key = "{#authorizationServerHostUrl}") + public AuthorizationServerWellKnownResponse getWellknown(String authorizationServerHostUrl) throws AuthorizationServerWellknownResponseException { + try { + String wellknownEndpoint = authorizationServerHostUrl + "/.well-known/oauth-authorization-server"; + log.debug("fetching Authorization Server Wellknown by calling :: " + wellknownEndpoint); + String wellknownResponse = restApiClient.getApi(wellknownEndpoint, String.class); + if (wellknownResponse == null) { + throw new Exception("well-known api is not accessible"); + } + AuthorizationServerWellKnownResponse authorizationServerWellKnownResponse = objectMapper.readValue(wellknownResponse, AuthorizationServerWellKnownResponse.class); + validate(authorizationServerWellKnownResponse); + + return authorizationServerWellKnownResponse; + } catch (Exception e) { + throw new AuthorizationServerWellknownResponseException(e.toString()); + } + } + + public void validate(AuthorizationServerWellKnownResponse response) throws Exception { + try { + ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); + Validator validator = factory.getValidator(); + Set> violations = validator.validate(response); + if (!violations.isEmpty()) { + StringBuilder sb = new StringBuilder("Validation failed:"); + for (ConstraintViolation violation : violations) { + sb.append("\n").append(violation.getPropertyPath()).append(": ").append(violation.getMessage()); + } + + throw new Exception(sb.toString()); + } + } catch (Exception e) { + throw new Exception(e.toString()); + } + } +} + + diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java index 099699cfb..6a0694869 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java @@ -1,7 +1,5 @@ package io.mosip.mimoto.service.impl; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.zxing.BarcodeFormat; @@ -17,10 +15,7 @@ import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.dto.openid.presentation.PresentationDefinitionDTO; -import io.mosip.mimoto.exception.ApiNotAccessibleException; -import io.mosip.mimoto.exception.IdpException; -import io.mosip.mimoto.exception.InvalidCredentialResourceException; -import io.mosip.mimoto.exception.VCVerificationException; +import io.mosip.mimoto.exception.*; import io.mosip.mimoto.model.QRCodeType; import io.mosip.mimoto.service.CredentialService; import io.mosip.mimoto.service.IdpService; @@ -45,8 +40,6 @@ import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotEmpty; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -72,7 +65,7 @@ public class CredentialServiceImpl implements CredentialService { private RestApiClient restApiClient; @Autowired - IssuersService issuerService; + IssuersService issuersService; @Autowired DataShareServiceImpl dataShareService; @@ -103,6 +96,7 @@ public class CredentialServiceImpl implements CredentialService { PixelPass pixelPass; CredentialsVerifier credentialsVerifier; + @PostConstruct public void init(){ pixelPass = new PixelPass(); @@ -110,11 +104,13 @@ public void init(){ } @Override - public TokenResponseDTO getTokenResponse(Map params, String issuerId) throws ApiNotAccessibleException, IOException { - IssuerDTO issuerDTO = issuerService.getIssuerConfig(issuerId); - HttpEntity> request = idpService.constructGetTokenRequest(params, issuerDTO); - TokenResponseDTO response = restTemplate.postForObject(idpService.getTokenEndpoint(issuerDTO), request, TokenResponseDTO.class); - if(response == null) { + public TokenResponseDTO getTokenResponse(Map params, String issuerId) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { + IssuerDTO issuerDTO = issuersService.getIssuerDetails(issuerId); + CredentialIssuerConfigurationResponse credentialIssuerConfigurationResponse = issuersService.getIssuerConfiguration(issuerId); + String tokenEndpoint = idpService.getTokenEndpoint(credentialIssuerConfigurationResponse); + HttpEntity> request = idpService.constructGetTokenRequest(params, issuerDTO, tokenEndpoint); + TokenResponseDTO response = restTemplate.postForObject(tokenEndpoint, request, TokenResponseDTO.class); + if (response == null) { throw new IdpException("Exception occurred while performing the authorization"); } return response; @@ -122,15 +118,20 @@ public TokenResponseDTO getTokenResponse(Map params, String issu @Override public ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String credentialType, TokenResponseDTO response, String credentialValidity, String locale) throws Exception { - IssuerDTO issuerConfig = issuerService.getIssuerConfig(issuerId); - CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = issuerService.getIssuerWellknown(issuerId); - CredentialsSupportedResponse credentialsSupportedResponse = issuerService.getIssuerWellknownForCredentialType(issuerId, credentialType); - VCCredentialRequest vcCredentialRequest = generateVCCredentialRequest(issuerConfig, credentialIssuerWellKnownResponse, credentialsSupportedResponse, response.getAccess_token()); + IssuerDTO issuerDTO = issuersService.getIssuerDetails(issuerId); + CredentialIssuerConfigurationResponse issuerConfigurationResponse = issuersService.getIssuerConfiguration(issuerDTO.getCredential_issuer_host()); + CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = new CredentialIssuerWellKnownResponse( + issuerConfigurationResponse.getCredentialIssuer(), + issuerConfigurationResponse.getAuthorizationServers(), + issuerConfigurationResponse.getCredentialEndPoint(), + issuerConfigurationResponse.getCredentialConfigurationsSupported()); + CredentialsSupportedResponse credentialsSupportedResponse = credentialIssuerWellKnownResponse.getCredentialConfigurationsSupported().get(credentialType); + VCCredentialRequest vcCredentialRequest = generateVCCredentialRequest(issuerDTO, credentialIssuerWellKnownResponse, credentialsSupportedResponse, response.getAccess_token()); VCCredentialResponse vcCredentialResponse = downloadCredential(credentialIssuerWellKnownResponse.getCredentialEndPoint(), vcCredentialRequest, response.getAccess_token()); boolean verificationStatus = issuerId.toLowerCase().contains("mock") || verifyCredential(vcCredentialResponse); - if(verificationStatus) { - String dataShareUrl = QRCodeType.OnlineSharing.equals(issuerConfig.getQr_code_type()) ? dataShareService.storeDataInDataShare(objectMapper.writeValueAsString(vcCredentialResponse), credentialValidity) : ""; - return generatePdfForVerifiableCredentials(vcCredentialResponse, issuerConfig, credentialsSupportedResponse, dataShareUrl, credentialValidity, locale); + if (verificationStatus) { + String dataShareUrl = QRCodeType.OnlineSharing.equals(issuerDTO.getQr_code_type()) ? dataShareService.storeDataInDataShare(objectMapper.writeValueAsString(vcCredentialResponse), credentialValidity) : ""; + return generatePdfForVerifiableCredentials(vcCredentialResponse, issuerDTO, credentialsSupportedResponse, dataShareUrl, credentialValidity, locale); } throw new VCVerificationException(SIGNATURE_VERIFICATION_EXCEPTION.getErrorCode(), SIGNATURE_VERIFICATION_EXCEPTION.getErrorMessage()); @@ -201,7 +202,7 @@ private static LinkedHashMap loadDisplayPropertiesFromWellknown( } - private Map getPdfResourceFromVcProperties(LinkedHashMap displayProperties, CredentialsSupportedResponse credentialsSupportedResponse, VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, String dataShareUrl, String credentialValidity, String locale) throws IOException, WriterException { + private Map getPdfResourceFromVcProperties(LinkedHashMap displayProperties, CredentialsSupportedResponse credentialsSupportedResponse, VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, String dataShareUrl, String credentialValidity, String locale) throws IOException, WriterException { Map data = new HashMap<>(); LinkedHashMap rowProperties = new LinkedHashMap<>(); String backgroundColor = credentialsSupportedResponse.getDisplay().get(0).getBackgroundColor(); @@ -244,7 +245,7 @@ private Map getPdfResourceFromVcProperties(LinkedHashMap data) throws IOException { - String credentialTemplate = utilities.getCredentialSupportedTemplateString(); + String credentialTemplate = utilities.getCredentialSupportedTemplateString(); Properties props = new Properties(); props.setProperty("resource.loader", "class"); props.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); @@ -276,11 +277,12 @@ private String constructQRCode(String qrData) throws WriterException { private String constructQRCodeWithVCData(VCCredentialResponse vcCredentialResponse) throws JsonProcessingException, WriterException { String qrData = pixelPass.generateQRData(objectMapper.writeValueAsString(vcCredentialResponse.getCredential()), ""); - if(allowedQRDataSizeLimit > qrData.length()){ + if (allowedQRDataSizeLimit > qrData.length()) { return constructQRCode(qrData); } - return ""; + return ""; } + private String constructQRCodeWithAuthorizeRequest(VCCredentialResponse vcCredentialResponse, String dataShareUrl) throws WriterException, JsonProcessingException { PresentationDefinitionDTO presentationDefinitionDTO = presentationService.constructPresentationDefinition(vcCredentialResponse); String presentationString = objectMapper.writeValueAsString(presentationDefinitionDTO); diff --git a/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java index 6181413b6..f6a95fab2 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java @@ -1,6 +1,7 @@ package io.mosip.mimoto.service.impl; import io.mosip.mimoto.dto.IssuerDTO; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerConfigurationResponse; import io.mosip.mimoto.exception.IssuerOnboardingException; import io.mosip.mimoto.service.IdpService; import io.mosip.mimoto.util.JoseUtil; @@ -35,18 +36,17 @@ public class IdpServiceImpl implements IdpService { JoseUtil joseUtil; @Override - public HttpEntity> constructGetTokenRequest(Map params, IssuerDTO issuerDTO) throws IOException, IssuerOnboardingException { + public HttpEntity> constructGetTokenRequest(Map params, IssuerDTO issuerDTO, String authorizationAudience) throws IOException, IssuerOnboardingException { HttpHeaders headers = new HttpHeaders(); - MultiValueMap map= new LinkedMultiValueMap<>(); + MultiValueMap map = new LinkedMultiValueMap<>(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); - String clientAssertion = joseUtil.getJWT(issuerDTO.getClient_id(), keyStorePath, fileName, issuerDTO.getClient_alias(), cyptoPassword, issuerDTO.getAuthorization_audience()); - + String clientAssertion = joseUtil.getJWT(issuerDTO.getClient_id(), keyStorePath, fileName, issuerDTO.getClient_alias(), cyptoPassword, authorizationAudience); map.add("code", params.get("code")); map.add("client_id", issuerDTO.getClient_id()); map.add("grant_type", params.get("grant_type")); map.add("redirect_uri", params.get("redirect_uri")); - map.add("client_assertion", clientAssertion.replace("[","").replace("]","")); + map.add("client_assertion", clientAssertion.replace("[", "").replace("]", "")); map.add("client_assertion_type", clientAssertionType); map.add("code_verifier", params.get("code_verifier")); @@ -54,7 +54,7 @@ public HttpEntity> constructGetTokenRequest(Map issuerConfigResp = issuersDTO.getIssuers().stream() + .filter(issuer -> issuer.getIssuer_id().equals(issuerId)) + .findFirst(); + + IssuerDTO issuerDTO; + if (issuerConfigResp.isPresent()) { + issuerDTO = issuerConfigResp.get(); + } else { + throw new InvalidIssuerIdException(); } - Gson gsonWithIssuerDataOnlyFilter = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); - issuers = gsonWithIssuerDataOnlyFilter.fromJson(issuersConfigJsonValue, IssuersDTO.class); - List enabledIssuers = issuers.getIssuers().stream() + return issuerDTO; + } + + private void getAllEnabledIssuers(IssuersDTO issuersDTO) { + List enabledIssuers = issuersDTO.getIssuers().stream() .filter(issuer -> "true".equals(issuer.getEnabled())) .collect(Collectors.toList()); - issuers.setIssuers(enabledIssuers); + issuersDTO.setIssuers(enabledIssuers); + } - // Filter issuers list with search string + private void getFilteredIssuers(IssuersDTO issuersDTO, String search) { if (!StringUtils.isEmpty(search)) { - List filteredIssuers = issuers.getIssuers().stream() + List filteredIssuers = issuersDTO.getIssuers().stream() .filter(issuer -> issuer.getDisplay().stream() .anyMatch(displayDTO -> displayDTO.getTitle().toLowerCase().contains(search.toLowerCase()))) .collect(Collectors.toList()); - issuers.setIssuers(filteredIssuers); - return issuers; + issuersDTO.setIssuers(filteredIssuers); } - return issuers; } @Override - public IssuersDTO getAllIssuersWithAllFields() throws ApiNotAccessibleException, IOException { - IssuersDTO issuers; + public IssuersDTO getAllIssuers() throws ApiNotAccessibleException, AuthorizationServerWellknownResponseException, IOException, InvalidWellknownResponseException { + + IssuersDTO issuersDTO; String issuersConfigJsonValue = utilities.getIssuersConfigJsonValue(); if (issuersConfigJsonValue == null) { throw new ApiNotAccessibleException(); } - Gson gsonWithIssuerDataOnlyFilter = new GsonBuilder().create(); - issuers = gsonWithIssuerDataOnlyFilter.fromJson(issuersConfigJsonValue, IssuersDTO.class); - - return issuers; - } - - @Override - public IssuerDTO getIssuerConfig(String issuerId) throws ApiNotAccessibleException, IOException { - IssuerDTO issuerDTO = null; - String issuersConfigJsonValue = utilities.getIssuersConfigJsonValue(); - if (issuersConfigJsonValue == null) { - throw new ApiNotAccessibleException(); + try { + issuersDTO = objectMapper.readValue(issuersConfigJsonValue, IssuersDTO.class); + } catch (Exception e) { + throw e; + } + for (IssuerDTO issuerDTO : issuersDTO.getIssuers()) { + updateIssuerWithAuthServerConfig(issuerDTO); } - IssuersDTO issuers = new Gson().fromJson(issuersConfigJsonValue, IssuersDTO.class); - Optional issuerConfigResp = issuers.getIssuers().stream() - .filter(issuer -> issuer.getIssuer_id().equals(issuerId)) - .findFirst(); - if (issuerConfigResp.isPresent()) - issuerDTO = issuerConfigResp.get(); - else - throw new InvalidIssuerIdException(); - return issuerDTO; - } - @Override - public CredentialIssuerWellKnownResponse getIssuerWellknown(String issuerId) throws ApiNotAccessibleException, IOException { - return getAllIssuersWithAllFields().getIssuers().stream() - .filter(issuer -> issuer.getIssuer_id().equals(issuerId)) - .findFirst() - .map(issuerDTO -> { - String wellknownResponse = restApiClient.getApi(issuerDTO.getWellknown_endpoint(), String.class); - try { - CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = objectMapper.readValue(wellknownResponse, CredentialIssuerWellKnownResponse.class); - credentialIssuerWellknownResponseValidator.validate(credentialIssuerWellKnownResponse, validator); - return credentialIssuerWellKnownResponse; - } catch (JsonProcessingException | ApiNotAccessibleException | InvalidWellknownResponseException e) { - throw new RuntimeException(e); - } - }) - .orElseThrow(ApiNotAccessibleException::new); + return issuersDTO; } @Override - public CredentialsSupportedResponse getIssuerWellknownForCredentialType(String issuerId, String credentialId) throws ApiNotAccessibleException, IOException { - CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = getIssuerWellknown(issuerId); - CredentialsSupportedResponse credentialsSupportedResponse = credentialIssuerWellKnownResponse.getCredentialConfigurationsSupported().get(credentialId); - if(credentialsSupportedResponse == null){ - throw new ApiNotAccessibleException(); - } - return credentialsSupportedResponse; + @Cacheable(value = "credentialIssuerConfig", key = "{#issuerId}") + public CredentialIssuerConfigurationResponse getIssuerConfiguration(String issuerId) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { + CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = issuerWellknownService.getWellknown(getIssuerDetails(issuerId).getCredential_issuer_host()); + AuthorizationServerWellKnownResponse authorizationServerWellKnownResponse = authorizationServerService.getWellknown(credentialIssuerWellKnownResponse.getAuthorizationServers().get(0)); + + return new CredentialIssuerConfigurationResponse( + credentialIssuerWellKnownResponse.getCredentialIssuer(), + credentialIssuerWellKnownResponse.getAuthorizationServers(), + credentialIssuerWellKnownResponse.getCredentialEndPoint(), + credentialIssuerWellKnownResponse.getCredentialConfigurationsSupported(), + authorizationServerWellKnownResponse + ); } - -} - - + public void updateIssuerWithAuthServerConfig(IssuerDTO issuerDTO) throws AuthorizationServerWellknownResponseException, ApiNotAccessibleException, IOException, InvalidWellknownResponseException { + CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = issuerWellknownService.getWellknown(issuerDTO.getCredential_issuer_host()); + AuthorizationServerWellKnownResponse authorizationServerWellKnownResponse = authorizationServerService.getWellknown(credentialIssuerWellKnownResponse.getAuthorizationServers().get(0)); + String tokenEndpoint = authorizationServerWellKnownResponse.getTokenEndpoint(); + issuerDTO.setAuthorization_audience(tokenEndpoint); + issuerDTO.setProxy_token_endpoint(tokenEndpoint); + } +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/util/RestApiClient.java b/src/main/java/io/mosip/mimoto/util/RestApiClient.java index 8c33ea6be..caf3677a6 100644 --- a/src/main/java/io/mosip/mimoto/util/RestApiClient.java +++ b/src/main/java/io/mosip/mimoto/util/RestApiClient.java @@ -122,6 +122,7 @@ public T getApi(String url, Class responseType) { rt = plainRestTemplate; } try { + log.info("RestApiClient::getApi()::entry uri: {}", url); result = (T) rt.getForObject(url, responseType); } catch (Exception e) { log.error("RestApiClient::getApi()::error uri:{} {} {}", url, e.getMessage(), e); diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 6efd63de3..432920413 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -1,4 +1,3 @@ - # MOSIP mosipbox.public.url=https://api-internal.dev1.mosip.net public.internet.url=https://api-internal.dev1.mosip.net @@ -235,3 +234,7 @@ mosip.security.cors-enable=true mosip.security.origins=http://localhost:3004 #OpenId4VP related Configuration END + + +#Caffeine cache related configurations +cache.expiry.time.in.min = 60 \ No newline at end of file diff --git a/src/main/resources/mimoto-issuers-config.json b/src/main/resources/mimoto-issuers-config.json index 6b8924a13..fa14ac9b5 100644 --- a/src/main/resources/mimoto-issuers-config.json +++ b/src/main/resources/mimoto-issuers-config.json @@ -1,85 +1,8 @@ { "issuers": [ - { - "issuer_id": "Mosip", - "protocol": "OpenId4VCI", - "display": [ - { - "name": "National Identity Department", - "logo": { - "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", - "alt_text": "mosip-logo" - }, - "title": "National Identity Department", - "description": "Download MOSIP National / Foundational Identity Credential", - "language": "en" - }, - { - "name": "دائرة الهوية الوطنية", - "logo": { - "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", - "alt_text": "شعار موسيب" - }, - "title": "دائرة الهوية الوطنية", - "description": "قم بتنزيل بيانات اعتماد الهوية الوطنية / التأسيسية MOSIP", - "language": "ar" - }, - { - "name": "राष्ट्रीय पहचान विभाग", - "logo": { - "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", - "alt_text": "मोसिप लोगो" - }, - "title": "राष्ट्रीय पहचान विभाग", - "description": "MOSIP नेशनल/फाउंडेशनल आइडेंटिटी क्रेडेंशियल डाउनलोड करेंं", - "language": "hi" - }, - { - "name": "ರಾಷ್ಟ್ರೀಯ ಗುರುತಿನ ಇಲಾಖೆ", - "logo": { - "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", - "alt_text": "mosip ಲೋಗೋ" - }, - "title": "ರಾಷ್ಟ್ರೀಯ ಗುರುತಿನ ಇಲಾಖೆ", - "description": "MOSIP ರಾಷ್ಟ್ರೀಯ / ಫೌಂಡೇಶನಲ್ ಐಡೆಂಟಿಟಿ ರುಜುವಾತು ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ", - "language": "kn" - }, - { - "name": "தேசிய அடையாளத் துறை", - "logo": { - "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", - "alt_text": "mosip லோகோ" - }, - "title": "தேசிய அடையாளத் துறை", - "description": "MOSIP தேசிய / அடிப்படை அடையாளச் சான்றிதழைப் பதிவிறக்கவும்", - "language": "ta" - }, - { - "name": "National Identity Department", - "logo": { - "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", - "alt_text": "logo ng mosip" - }, - "title": "National Identity Department", - "description": "I-download ang MOSIP National / Foundational Identity Credential", - "language": "fil" - } - ], - "client_id": "XusU7P1y10lMr9NA1qnrny_fqynODwV4SCvWPP8cfdY", - "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", - "token_endpoint": "https://api.dev1.mosip.net/v1/mimoto/get-token/Mosip", - "authorization_audience": "https://esignet-mosipid.dev1.mosip.net/v1/esignet/oauth/v2/token", - "proxy_token_endpoint": "https://esignet-mosipid.dev1.mosip.net/v1/esignet/oauth/v2/token", - "client_alias": "mpartner-default-test-mosipid", - "qr_code_type": "OnlineSharing", - "wellknown_endpoint": "https://injicertify-mosipid.dev1.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer", - "credential_issuer": "Mosip", - "credential_issuer_host": "https://injicertify-mosipid.dev1.mosip.net", - "enabled": "true" - }, { "issuer_id": "StayProtected", - "protocol": "OpenId4VCI", + "credential_issuer": "StayProtected", "display": [ { "name": "StayProtected Insurance", @@ -87,49 +10,19 @@ "url": "https://raw.githubusercontent.com/tw-mosip/file-server/master/StayProtectedInsurance.png", "alt_text": "a square logo of a Sunbird" }, + "language": "en", "title": "Download StayProtected Insurance Credentials", - "description": "Download insurance credential", - "language": "en" + "description": "Download insurance credential" } ], - "client_id": "esignet-sunbird-partner", - "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", - "token_endpoint": "https://api.dev1.mosip.net/v1/mimoto/get-token/StayProtected", - "authorization_audience": "https://esignet-insurance.dev1.mosip.net/v1/esignet/oauth/v2/token", - "proxy_token_endpoint": "https://esignet-insurance.dev1.mosip.net/v1/esignet/oauth/v2/token", - "client_alias": "esignet-sunbird-partner", - "qr_code_type": "OnlineSharing", - "wellknown_endpoint": "https://injicertify-insurance.dev1.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer", - "credential_issuer": "StayProtected", - "credential_issuer_host": "https://injicertify-insurance.dev1.mosip.net", - "enabled": "true" - }, - { - "issuer_id": "Mock", "protocol": "OpenId4VCI", - "display": [ - { - "name": "Mock Identity", - "logo": { - "url": "https://api.dev1.mosip.net/inji/mosip-logo.png", - "alt_text": "mosip-logo" - }, - "title": "Mock Identity", - "description": "Download Mock Identity Credential", - "language": "en" - } - ], - "client_id": "mpartner-mock-testing", + "client_id": "wallet-demo", + "client_alias": "wallet-demo-client", "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", - "token_endpoint": "https://api.dev1.mosip.net/v1/mimoto/get-token/Mock", - "authorization_audience": "https://esignet-insurance.dev1.mosip.net/v1/esignet/oauth/v2/token", - "proxy_token_endpoint": "https://esignet-mock.dev1.mosip.net/v1/esignet/oauth/v2/token", - "client_alias": "mpartner-mock-testing", + "token_endpoint": "https://localhost:8099/v1/mimoto/get-token/StayProtected", "qr_code_type": "OnlineSharing", - "wellknown_endpoint": "https://injicertify-mock.dev1.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer", - "credential_issuer": "Mock", - "credential_issuer_host": "https://injicertify-mock.dev1.mosip.net", + "credential_issuer_host": "https://injicertify-insurance.collab.mosip.net", "enabled": "true" } ] -} +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java b/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java index 5ab6d0495..171a14390 100644 --- a/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java @@ -6,6 +6,7 @@ import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.exception.BaseUncheckedException; import io.mosip.mimoto.service.RestClientService; +import io.mosip.mimoto.service.impl.CredentialServiceImpl; import io.mosip.mimoto.service.impl.IdpServiceImpl; import io.mosip.mimoto.service.impl.IssuersServiceImpl; import io.mosip.mimoto.util.DateUtils; @@ -55,6 +56,9 @@ public class IdpControllerTest { @MockBean private IdpServiceImpl idpService; + @MockBean + private CredentialServiceImpl credentialService; + @Test public void otpRequestTest() throws Exception { BindingOtpInnerReqDto innerReqDto = new BindingOtpInnerReqDto(); diff --git a/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java b/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java index b7eaf5ea3..66a62a169 100644 --- a/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java @@ -1,9 +1,16 @@ package io.mosip.mimoto.controller; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; import io.mosip.mimoto.dto.IssuersDTO; -import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerConfigurationResponse; import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.InvalidIssuerIdException; +import io.mosip.mimoto.service.AuthorizationServerService; +import io.mosip.mimoto.service.IssuerWellknownService; import io.mosip.mimoto.service.impl.IssuersServiceImpl; +import io.mosip.mimoto.util.Utilities; import org.hamcrest.Matchers; import org.json.JSONObject; import org.junit.Test; @@ -15,14 +22,12 @@ import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.core.io.ClassPathResource; import org.springframework.http.MediaType; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; -import org.springframework.util.ResourceUtils; import org.springframework.web.servlet.config.annotation.EnableWebMvc; -import java.io.File; -import java.nio.file.Files; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -46,12 +51,23 @@ public class IssuersControllerTest { @MockBean private IssuersServiceImpl issuersService; + @MockBean + private Utilities utilities; + + @MockBean + private IssuerWellknownService issuerWellknownService; + + @MockBean + ObjectMapper objectMapper; + + @MockBean + AuthorizationServerService authorizationServerService; @Test - public void getAllIssuersTest() throws Exception { + public void getIssuersTestForSearchValueNull() throws Exception { IssuersDTO issuers = new IssuersDTO(); - issuers.setIssuers((List.of(getIssuerDTO("Issuer1"), getIssuerDTO("Issuer2")))); - Mockito.when(issuersService.getAllIssuers(null)) + issuers.setIssuers((List.of(getIssuerDTO("Issuer2"), getIssuerDTO("Issuer4")))); + Mockito.when(issuersService.getIssuers(null)) .thenReturn(issuers) .thenThrow(new ApiNotAccessibleException()); @@ -60,7 +76,7 @@ public void getAllIssuersTest() throws Exception { .anyMatch(displayDTO -> displayDTO.getTitle().toLowerCase().contains("Issuer1".toLowerCase()))) .collect(Collectors.toList())); - Mockito.when(issuersService.getAllIssuers("Issuer1")) + Mockito.when(issuersService.getIssuers("Issuer1")) .thenReturn(filteredIssuers) .thenThrow(new ApiNotAccessibleException()); @@ -73,18 +89,41 @@ public void getAllIssuersTest() throws Exception { Matchers.hasKey("display"), Matchers.hasKey("client_id"), Matchers.hasKey("wellknown_endpoint"), + Matchers.hasKey("proxy_token_endpoint"), + Matchers.hasKey("token_endpoint"), + Matchers.hasKey("credential_issuer_host"), Matchers.not(Matchers.hasKey("redirect_url")), Matchers.not(Matchers.hasKey("authorization_endpoint")), - Matchers.not(Matchers.hasKey("token_endpoint")), Matchers.not(Matchers.hasKey("credential_endpoint")), Matchers.not(Matchers.hasKey("credential_audience")), Matchers.not(Matchers.hasKey("additional_headers")), Matchers.not(Matchers.hasKey("scopes_supported")), - Matchers.hasKey("credential_issuer_host") + Matchers.not(Matchers.hasKey("authorization_audience")) ) ))); - mockMvc.perform(get("/issuers?search=Issuer1").accept(MediaType.APPLICATION_JSON_VALUE)) + + mockMvc.perform(get("/issuers").accept(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getCode()))) + .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); + } + + @Test + public void getIssuersTestForSomeSearchValue() throws Exception { + IssuersDTO issuers = new IssuersDTO(); + issuers.setIssuers((List.of(getIssuerDTO("Issuer2"), getIssuerDTO("Issuer3")))); + + IssuersDTO filteredIssuers = new IssuersDTO(); + filteredIssuers.setIssuers(issuers.getIssuers().stream().filter(issuer -> issuer.getDisplay().stream() + .anyMatch(displayDTO -> displayDTO.getTitle().toLowerCase().contains("Issuer2".toLowerCase()))) + .collect(Collectors.toList())); + + Mockito.when(issuersService.getIssuers("Issuer2")) + .thenReturn(filteredIssuers) + .thenThrow(new ApiNotAccessibleException()); + + mockMvc.perform(get("/issuers?search=Issuer2").accept(MediaType.APPLICATION_JSON_VALUE)) .andExpect(status().isOk()) .andExpect(jsonPath("$.response.issuers", Matchers.everyItem( Matchers.allOf( @@ -93,44 +132,34 @@ public void getAllIssuersTest() throws Exception { Matchers.hasKey("display"), Matchers.hasKey("client_id"), Matchers.hasKey("wellknown_endpoint"), + Matchers.hasKey("proxy_token_endpoint"), + Matchers.hasKey("token_endpoint"), + Matchers.hasKey("credential_issuer_host"), Matchers.not(Matchers.hasKey("redirect_url")), Matchers.not(Matchers.hasKey("authorization_endpoint")), - Matchers.not(Matchers.hasKey("token_endpoint")), Matchers.not(Matchers.hasKey("credential_endpoint")), Matchers.not(Matchers.hasKey("credential_audience")), Matchers.not(Matchers.hasKey("additional_headers")), Matchers.not(Matchers.hasKey("scopes_supported")), - Matchers.hasKey("credential_issuer_host") + Matchers.not(Matchers.hasKey("authorization_audience")) ) ))); - mockMvc.perform(get("/issuers").accept(MediaType.APPLICATION_JSON_VALUE)) - .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getCode()))) - .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); - - - mockMvc.perform(get("/issuers?search=Issuer1").accept(MediaType.APPLICATION_JSON_VALUE)) + mockMvc.perform(get("/issuers?search=Issuer2").accept(MediaType.APPLICATION_JSON_VALUE)) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getCode()))) .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); } @Test - public void getIssuerConfigTest() throws Exception { - Mockito.when(issuersService.getIssuerConfig("id1")) + public void getIssuerDetailsTestForValidIssuerId() throws Exception { + Mockito.when(issuersService.getIssuerDetails("id1")) .thenReturn(getIssuerDTO("Issuer1")) .thenThrow(new ApiNotAccessibleException()); - Mockito.when(issuersService.getIssuerConfig("invalidId")).thenReturn(null); mockMvc.perform(get("/issuers/id1").accept(MediaType.APPLICATION_JSON_VALUE)) .andExpect(status().isOk()); - mockMvc.perform(get("/issuers/invalidId").accept(MediaType.APPLICATION_JSON_VALUE)) - .andExpect(status().isNotFound()) - .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is(INVALID_ISSUER_ID_EXCEPTION.getCode()))) - .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(INVALID_ISSUER_ID_EXCEPTION.getMessage()))); - mockMvc.perform(get("/issuers/id1").accept(MediaType.APPLICATION_JSON_VALUE)) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getCode()))) @@ -138,13 +167,21 @@ public void getIssuerConfigTest() throws Exception { } @Test - public void getIssuerWellknownTest() throws Exception { - String issuerId = "id1"; - File file = ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX + "responses/expectedWellknown.json"); - String expectedCredentialIssuerWellknownResponse = new String(Files.readAllBytes(file.toPath())); - CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = getCredentialIssuerWellKnownResponseDto(issuerId, Map.of("CredentialType1", getCredentialSupportedResponse("Credential1"))); - Mockito.when(issuersService.getIssuerWellknown(issuerId)).thenReturn(credentialIssuerWellKnownResponse); + public void getIssuerDetailsTestForInvalidIssuerId() throws Exception { + Mockito.when(issuersService.getIssuerDetails("invalidId")).thenThrow(InvalidIssuerIdException.class); + mockMvc.perform(get("/issuers/invalidId").accept(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isNotFound()) + .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is(INVALID_ISSUER_ID_EXCEPTION.getCode()))) + .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(INVALID_ISSUER_ID_EXCEPTION.getMessage()))); + } + + @Test + public void getIssuerWellknownTest() throws Exception { + String issuerId = "issuer1"; + String expectedCredentialIssuerWellknownResponse = getExpectedWellKnownJson(); + CredentialIssuerConfigurationResponse expectedCredentialIssuerConfigurationResponse = getCredentialIssuerConfigurationResponseDto(issuerId, Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1")), List.of()); + Mockito.when(issuersService.getIssuerConfiguration(issuerId)).thenReturn(expectedCredentialIssuerConfigurationResponse); String actualResponse = mockMvc.perform(get("/issuers/" + issuerId + "/well-known-proxy").accept(MediaType.APPLICATION_JSON_VALUE)) .andExpect(status().isOk()) @@ -152,9 +189,48 @@ public void getIssuerWellknownTest() throws Exception { .getResponse() .getContentAsString(); - JSONAssert.assertEquals(new JSONObject(expectedCredentialIssuerWellknownResponse), new JSONObject(actualResponse), JSONCompareMode.LENIENT); + } + @Test + public void getIssuerConfigurationTest() throws Exception { + String issuerId = "id1"; + + //get the IssuerConfig from the json file expectedIssuerConfig and wrap it inside response to test the response of configuration endpoint response wrapper + ObjectMapper objectMapper = new ObjectMapper(); + JsonNode originalJson = objectMapper.readTree(new ClassPathResource("responses/expectedIssuerConfig.json").getInputStream()); + ObjectNode wrappedJson = objectMapper.createObjectNode(); + wrappedJson.set("response", originalJson); + String expectedJsonString = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(wrappedJson); + if (expectedJsonString.startsWith("\uFEFF")) { + expectedJsonString = expectedJsonString.substring(1); + } + String finalExpectedJsonString = expectedJsonString; + CredentialIssuerConfigurationResponse expectedResponse = getCredentialIssuerConfigurationResponseDto( + issuerId, + Map.of("CredentialType1", getCredentialSupportedResponse("Credential1")), + List.of() + ); + Mockito.when(issuersService.getIssuerConfiguration(issuerId)).thenReturn(expectedResponse); + + mockMvc.perform(get("/issuers/" + issuerId + "/configuration") + .accept(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isOk()) + .andExpect(result -> { + String actualResponse = result.getResponse().getContentAsString().trim(); + JSONAssert.assertEquals(finalExpectedJsonString, actualResponse, JSONCompareMode.LENIENT); + }); } + @Test + public void shouldReturnExceptionInResponseOnGetIssuerConfigIfAnyExceptionOccurredWhenFetchingIssuerWellknown() throws Exception { + String issuerId = "id1"; + Mockito.when(issuersService.getIssuerConfiguration(issuerId)).thenThrow(new ApiNotAccessibleException()); + + mockMvc.perform(get("/issuers/" + issuerId + "/configuration") + .accept(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getCode()))) + .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); + } } diff --git a/src/test/java/io/mosip/mimoto/service/AuthorizationServerServiceTest.java b/src/test/java/io/mosip/mimoto/service/AuthorizationServerServiceTest.java new file mode 100644 index 000000000..1298b7bf4 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/service/AuthorizationServerServiceTest.java @@ -0,0 +1,87 @@ +package io.mosip.mimoto.service; + +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.dto.mimoto.AuthorizationServerWellKnownResponse; +import io.mosip.mimoto.exception.AuthorizationServerWellknownResponseException; +import io.mosip.mimoto.service.impl.AuthorizationServerServiceImpl; +import io.mosip.mimoto.util.RestApiClient; +import lombok.extern.slf4j.Slf4j; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.junit.MockitoJUnitRunner; +import java.net.URI; +import java.util.List; +import static io.mosip.mimoto.util.TestUtilities.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThrows; + +@Slf4j +@RunWith(MockitoJUnitRunner.class) +public class AuthorizationServerServiceTest { + + @InjectMocks + AuthorizationServerServiceImpl authorizationServerService = new AuthorizationServerServiceImpl(); + + @Mock + RestApiClient restApiClient; + + @Mock + ObjectMapper objectMapper; + + String authorizationServerWellknownUrl; + + String authorizationServerHostUrl; + + String exceptionMsgPrefix; + + @Before + public void setUp() { + authorizationServerWellknownUrl = "https://dev/authorize/.well-known/oauth-authorization-server"; + authorizationServerHostUrl = "https://dev/authorize"; + exceptionMsgPrefix = "RESIDENT-APP-042 --> Invalid Authorization Server well-known from server:\n"; + } + + @Test + public void shouldThrowExceptionIfResponseIsNullWhenGettingAuthServerWellknownConfig() throws Exception { + String expectedExceptionMessage = exceptionMsgPrefix + "java.lang.Exception: well-known api is not accessible"; + Mockito.when(restApiClient.getApi(authorizationServerWellknownUrl, String.class)).thenReturn(null); + + AuthorizationServerWellknownResponseException actualException = assertThrows(AuthorizationServerWellknownResponseException.class, () -> { + authorizationServerService.getWellknown(authorizationServerHostUrl); + }); + + assertEquals(expectedExceptionMessage, actualException.getMessage()); + } + + @Test + public void shouldThrowExceptionIfAuthorizationEndpointIsMissingInAuthServerWellknownResponse() throws Exception { + String expectedExceptionMessage = exceptionMsgPrefix + "java.lang.Exception: java.lang.Exception: Validation failed:\n" + "authorizationEndpoint: must not be blank"; + AuthorizationServerWellKnownResponse expectedAuthorizationServerWellKnownResponse = getAuthServerWellknownResponseDto(List.of("authorization_endpoint")); + String expectedIssuersConfigJson = getExpectedIssuersConfigJson(); + Mockito.when(restApiClient.getApi(authorizationServerWellknownUrl, String.class)).thenReturn(expectedIssuersConfigJson); + Mockito.when(objectMapper.readValue(expectedIssuersConfigJson, AuthorizationServerWellKnownResponse.class)).thenReturn(expectedAuthorizationServerWellKnownResponse); + + AuthorizationServerWellknownResponseException actualException = assertThrows(AuthorizationServerWellknownResponseException.class, () -> { + authorizationServerService.getWellknown(authorizationServerHostUrl); + }); + + assertEquals(expectedExceptionMessage, actualException.getMessage()); + } + + @Test + public void shouldReturnResponseIfTheAuthServerHostUrlAndResponseAreValid() throws Exception { + AuthorizationServerWellKnownResponse expectedAuthorizationServerWellKnownResponse = getAuthServerWellknownResponseDto(List.of()); + String expectedIssuersConfigJson = getExpectedIssuersConfigJson(); + Mockito.when(restApiClient.getApi(authorizationServerWellknownUrl, String.class)).thenReturn(expectedIssuersConfigJson); + Mockito.when(objectMapper.readValue(expectedIssuersConfigJson, AuthorizationServerWellKnownResponse.class)).thenReturn(expectedAuthorizationServerWellKnownResponse); + + AuthorizationServerWellKnownResponse actualAuthorizationServerWellKnownResponse = authorizationServerService.getWellknown(authorizationServerHostUrl); + + assertEquals(expectedAuthorizationServerWellKnownResponse, actualAuthorizationServerWellKnownResponse); + } +} + diff --git a/src/test/java/io/mosip/mimoto/service/IssuerWellknownServiceTest.java b/src/test/java/io/mosip/mimoto/service/IssuerWellknownServiceTest.java new file mode 100644 index 000000000..30e9b41ec --- /dev/null +++ b/src/test/java/io/mosip/mimoto/service/IssuerWellknownServiceTest.java @@ -0,0 +1,88 @@ +package io.mosip.mimoto.service; + +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerConfigurationResponse; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.InvalidWellknownResponseException; +import io.mosip.mimoto.service.impl.IssuerWellknownServiceImpl; +import io.mosip.mimoto.util.CredentialIssuerWellknownResponseValidator; +import io.mosip.mimoto.util.RestApiClient; +import jakarta.validation.Validator; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.junit.MockitoJUnitRunner; + +import java.io.IOException; +import java.util.List; +import java.util.Map; + +import static io.mosip.mimoto.util.TestUtilities.*; +import static io.mosip.mimoto.util.TestUtilities.getCredentialSupportedResponse; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThrows; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +@RunWith(MockitoJUnitRunner.class) +public class IssuerWellknownServiceTest { + + @InjectMocks + IssuerWellknownServiceImpl issuerWellknownService = new IssuerWellknownServiceImpl(); + + @Mock + Validator validator; + + @Mock + RestApiClient restApiClient; + + @Mock + CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator; + + @Mock + ObjectMapper objectMapper; + + List issuerConfigRelatedFields = List.of("additional_headers", "authorization_endpoint", "authorization_audience", "credential_endpoint", "credential_audience"); + + String issuerWellKnownUrl, issuerId, credentialIssuerHostUrl, authServerWellknownUrl; + CredentialIssuerConfigurationResponse expectedCredentialIssuerConfigurationResponse; + + CredentialIssuerWellKnownResponse expectedCredentialIssuerWellKnownResponse; + + @Before + public void setUp() throws Exception { + credentialIssuerHostUrl = "https://issuer.env.net"; + issuerWellKnownUrl = "https://issuer.env.net/.well-known/openid-credential-issuer"; + expectedCredentialIssuerWellKnownResponse = getCredentialIssuerWellKnownResponseDto("Issuer1", + Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); + String expectedWellknownJson = getExpectedWellKnownJson(); + Mockito.when(restApiClient.getApi(issuerWellKnownUrl, String.class)) + .thenReturn(expectedWellknownJson); + Mockito.when(objectMapper.readValue(expectedWellknownJson, CredentialIssuerWellKnownResponse.class)).thenReturn(expectedCredentialIssuerWellKnownResponse); + } + + @Test + public void shouldReturnIssuerWellknownForTheRequestedIssuerId() throws ApiNotAccessibleException, IOException, InvalidWellknownResponseException { + CredentialIssuerWellKnownResponse actualCredentialIssuerWellKnownResponse = issuerWellknownService.getWellknown(credentialIssuerHostUrl); + + assertEquals(expectedCredentialIssuerWellKnownResponse, actualCredentialIssuerWellKnownResponse); + verify(restApiClient, times(1)).getApi(issuerWellKnownUrl, String.class); + } + + @Test + public void shouldThrowExceptionIfAnyIssuerOccurredWhileFetchingIssuerWellknown() throws ApiNotAccessibleException, IOException, InvalidWellknownResponseException { + Mockito.when(restApiClient.getApi(issuerWellKnownUrl, String.class)) + .thenReturn(null); + + ApiNotAccessibleException actualException = assertThrows(ApiNotAccessibleException.class, () -> { + issuerWellknownService.getWellknown(credentialIssuerHostUrl); + }); + + assertEquals("RESIDENT-APP-026 --> Api not accessible failure", actualException.getMessage()); + verify(restApiClient, times(1)).getApi(issuerWellKnownUrl, String.class); + } +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java index 30a8fa255..d09831e6a 100644 --- a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java @@ -4,35 +4,36 @@ import com.google.gson.Gson; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.IssuersDTO; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerConfigurationResponse; import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.AuthorizationServerWellknownResponseException; import io.mosip.mimoto.exception.InvalidIssuerIdException; +import io.mosip.mimoto.exception.InvalidWellknownResponseException; import io.mosip.mimoto.service.impl.CredentialServiceImpl; +import io.mosip.mimoto.service.impl.IssuerWellknownServiceImpl; import io.mosip.mimoto.service.impl.IssuersServiceImpl; -import io.mosip.mimoto.util.CredentialIssuerWellknownResponseValidator; -import io.mosip.mimoto.util.RestApiClient; import io.mosip.mimoto.util.Utilities; -import jakarta.validation.Validator; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; +import org.mockito.Spy; import org.mockito.junit.MockitoJUnitRunner; import java.io.IOException; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.Map; import static io.mosip.mimoto.util.TestUtilities.*; +import static io.mosip.mimoto.util.TestUtilities.getCredentialSupportedResponse; import static org.junit.Assert.assertEquals; -import static org.mockito.ArgumentMatchers.any; +import static org.junit.Assert.assertThrows; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.lenient; @RunWith(MockitoJUnitRunner.class) public class IssuersServiceTest { @@ -40,120 +41,167 @@ public class IssuersServiceTest { @InjectMocks IssuersServiceImpl issuersService = new IssuersServiceImpl(); - @Mock - Validator validator; - @InjectMocks CredentialServiceImpl credentialService = new CredentialServiceImpl(); - @Mock - RestApiClient restApiClient; - @Mock Utilities utilities; @Mock - CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator; + IssuerWellknownServiceImpl issuerWellknownService; @Mock + AuthorizationServerService authorizationServerService; + + @Spy ObjectMapper objectMapper; - List issuerConfigRelatedFields11 = List.of("additional_headers", "authorization_endpoint","authorization_audience", "token_endpoint", "proxy_token_endpoint", "credential_endpoint", "credential_audience", "redirect_uri"); - List issuerConfigRelatedFields=List.of("additional_headers", "authorization_endpoint","authorization_audience","credential_endpoint", "credential_audience"); + List issuerConfigRelatedFields = List.of("additional_headers", "authorization_endpoint", "authorization_audience", "credential_endpoint", "credential_audience"); + + String issuerWellKnownUrl, issuerId, credentialIssuerHostUrl, authServerWellknownUrl, issuersConfigJsonValue; + CredentialIssuerConfigurationResponse expectedCredentialIssuerConfigurationResponse; + IssuersDTO issuers = new IssuersDTO(); + + CredentialIssuerWellKnownResponse expectedCredentialIssuerWellKnownResponse; @Before public void setUp() throws Exception { - IssuersDTO issuers = new IssuersDTO(); - issuers.setIssuers(List.of(getIssuerConfigDTO("Issuer1", Collections.emptyList()), getIssuerConfigDTO("Issuer2", Collections.emptyList()))); - Mockito.when(utilities.getIssuersConfigJsonValue()).thenReturn(new Gson().toJson(issuers)); + issuerWellKnownUrl = "https://issuer.env.net/.well-known/openid-credential-issuer"; + authServerWellknownUrl = "https://auth-server.env.net"; + issuerId = "Issuer3id"; + credentialIssuerHostUrl = "https://issuer.env.net"; + + issuers.setIssuers(List.of(getIssuerConfigDTO("Issuer3"), getIssuerConfigDTO("Issuer4"))); + issuersConfigJsonValue = new Gson().toJson(issuers); + Mockito.when(utilities.getIssuersConfigJsonValue()).thenReturn(issuersConfigJsonValue); + Mockito.when(objectMapper.readValue(issuersConfigJsonValue, IssuersDTO.class)).thenReturn(issuers); + + expectedCredentialIssuerWellKnownResponse = getCredentialIssuerWellKnownResponseDto(issuerId, + Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); + Mockito.when(issuerWellknownService.getWellknown(credentialIssuerHostUrl)) + .thenReturn(expectedCredentialIssuerWellKnownResponse); + + expectedCredentialIssuerConfigurationResponse = getCredentialIssuerConfigurationResponseDto(issuerId, Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1")), List.of()); + Mockito.when(authorizationServerService.getWellknown(authServerWellknownUrl)).thenReturn(expectedCredentialIssuerConfigurationResponse.getAuthorizationServerWellKnownResponse()); } @Test - public void shouldReturnIssuersWithIssuerConfigAsNull() throws ApiNotAccessibleException, IOException { + public void shouldReturnAllIssuersWhenSearchValueIsNull() throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { + issuers.setIssuers(List.of(getIssuerConfigDTO("Issuer1"), getIssuerConfigDTO("Issuer2"))); + issuersConfigJsonValue = new Gson().toJson(issuers); + Mockito.when(utilities.getIssuersConfigJsonValue()).thenReturn(issuersConfigJsonValue); + Mockito.when(objectMapper.readValue(issuersConfigJsonValue, IssuersDTO.class)).thenReturn(issuers); IssuersDTO expectedIssuers = new IssuersDTO(); - List issuers = new ArrayList<>(List.of(getIssuerConfigDTO("Issuer1", issuerConfigRelatedFields), getIssuerConfigDTO("Issuer2", issuerConfigRelatedFields))); + List issuers = new ArrayList<>(List.of(getIssuerConfigDTO("Issuer1"), getIssuerConfigDTO("Issuer2"))); expectedIssuers.setIssuers(issuers); + IssuersDTO allIssuers = issuersService.getIssuers(null); + + assertEquals(expectedIssuers, allIssuers); + } + + @Test + public void shouldReturnMatchingIssuersWhenSearchValuePatternMatchesWithIssuerName() throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { + issuers.setIssuers(List.of(getIssuerConfigDTO("Issuer1"), getIssuerConfigDTO("Issuer2"))); + issuersConfigJsonValue = new Gson().toJson(issuers); + Mockito.when(utilities.getIssuersConfigJsonValue()).thenReturn(issuersConfigJsonValue); + Mockito.when(objectMapper.readValue(issuersConfigJsonValue, IssuersDTO.class)).thenReturn(issuers); IssuersDTO expectedFilteredIssuers = new IssuersDTO(); - List filteredIssuersList = new ArrayList<>(List.of(getIssuerConfigDTO("Issuer1", issuerConfigRelatedFields))); + List filteredIssuersList = new ArrayList<>(List.of(getIssuerConfigDTO("Issuer1"))); expectedFilteredIssuers.setIssuers(filteredIssuersList); - IssuersDTO allIssuers = issuersService.getAllIssuers(null); - IssuersDTO filteredIssuers = issuersService.getAllIssuers("Issuer1"); - assertEquals(expectedIssuers, allIssuers); + IssuersDTO filteredIssuers = issuersService.getIssuers("Issuer1"); + assertEquals(expectedFilteredIssuers, filteredIssuers); } @Test(expected = ApiNotAccessibleException.class) - public void shouldThrowApiNotAccessibleExceptionWhenIssuersJsonStringIsNullForGettingAllIssuers() throws IOException, ApiNotAccessibleException { + public void shouldThrowApiNotAccessibleExceptionWhenIssuersJsonStringIsNullForGettingAllIssuers() throws IOException, ApiNotAccessibleException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { Mockito.when(utilities.getIssuersConfigJsonValue()).thenReturn(null); - issuersService.getAllIssuers(null); + issuersService.getIssuers(null); } @Test - public void shouldReturnIssuerDataAndConfigForTheIssuerIdIfExist() throws ApiNotAccessibleException, IOException, InvalidIssuerIdException { - IssuerDTO expectedIssuer = getIssuerConfigDTO("Issuer1", issuerConfigRelatedFields); + public void shouldReturnIssuerDataAndConfigForTheIssuerIdIfExist() throws ApiNotAccessibleException, IOException, InvalidIssuerIdException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { + IssuerDTO expectedIssuer = getIssuerConfigDTO("Issuer3"); - IssuerDTO issuer = issuersService.getIssuerConfig("Issuer1id"); + IssuerDTO issuer = issuersService.getIssuerDetails("Issuer3id"); assertEquals(expectedIssuer, issuer); } @Test - public void shouldReturnIssuerWellknownForTheIssuerIdIfExist() throws ApiNotAccessibleException, IOException { - String issuerId = "Issuer1id"; - String wellKnownUrl = "/well-known-proxy"; - CredentialIssuerWellKnownResponse expextedCredentialIssuerWellKnownResponse=getCredentialIssuerWellKnownResponseDto("Issuer1", - Map.of("CredentialType1",getCredentialSupportedResponse("CredentialType1"))); - - Mockito.when(restApiClient.getApi(wellKnownUrl , String.class)) - .thenReturn(getExpectedWellKnownJson()); - Mockito.when(objectMapper.readValue(getExpectedWellKnownJson(), CredentialIssuerWellKnownResponse.class)).thenReturn(expextedCredentialIssuerWellKnownResponse); - lenient().when(validator.validate(expextedCredentialIssuerWellKnownResponse)).thenReturn(Collections.emptySet()); - - CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse=issuersService.getIssuerWellknown(issuerId); - assertEquals(expextedCredentialIssuerWellKnownResponse,credentialIssuerWellKnownResponse); - verify(restApiClient, times(1)).getApi(wellKnownUrl, String.class); - } - - @Test - public void shouldReturnIssuerDataAndConfigForAllIssuer() throws ApiNotAccessibleException, IOException { + public void shouldReturnIssuerDataAndConfigForAllIssuer() throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { IssuersDTO expectedIssuers = new IssuersDTO(); - List issuers = new ArrayList<>(List.of(getIssuerConfigDTO("Issuer1", new ArrayList<>()), getIssuerConfigDTO("Issuer2", new ArrayList<>()))); + List issuers = new ArrayList<>(List.of(getIssuerConfigDTO("Issuer3"), getIssuerConfigDTO("Issuer4"))); expectedIssuers.setIssuers(issuers); - IssuersDTO issuersDTO = issuersService.getAllIssuersWithAllFields(); + IssuersDTO issuersDTO = issuersService.getAllIssuers(); assertEquals(expectedIssuers, issuersDTO); } @Test(expected = InvalidIssuerIdException.class) - public void shouldThrowExceptionIfTheIssuerIdNotExists() throws ApiNotAccessibleException, IOException, InvalidIssuerIdException { - IssuerDTO issuer = issuersService.getIssuerConfig("Issuer3id"); + public void shouldThrowExceptionIfTheIssuerIdNotExists() throws ApiNotAccessibleException, IOException, InvalidIssuerIdException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { + issuersService.getIssuerDetails("Issuer5id"); } @Test(expected = ApiNotAccessibleException.class) - public void shouldThrowApiNotAccessibleExceptionWhenIssuersJsonStringIsNullForGettingIssuerConfig() throws IOException, ApiNotAccessibleException, InvalidIssuerIdException { + public void shouldThrowApiNotAccessibleExceptionWhenIssuersJsonStringIsNullForGettingIssuerConfig() throws IOException, ApiNotAccessibleException, InvalidIssuerIdException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { Mockito.when(utilities.getIssuersConfigJsonValue()).thenReturn(null); - issuersService.getIssuerConfig("Issuers1id"); + issuersService.getIssuerDetails("Issuers1id"); } + @Test - public void shouldReturnOnlyEnabledIssuers() throws IOException, ApiNotAccessibleException { + public void shouldReturnOnlyEnabledIssuers() throws IOException, ApiNotAccessibleException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { IssuersDTO issuers = new IssuersDTO(); - IssuerDTO enabledIssuer = getIssuerConfigDTO("Issuer1", Collections.emptyList()); - IssuerDTO disbaledIssuer = getIssuerConfigDTO("Issuer2", Collections.emptyList()); - disbaledIssuer.setEnabled("false"); - issuers.setIssuers(List.of(enabledIssuer, disbaledIssuer)); + IssuerDTO enabledIssuer = getIssuerConfigDTO("Issuer1"); + IssuerDTO disabledIssuer = getIssuerConfigDTO("Issuer2"); + disabledIssuer.setEnabled("false"); + issuers.setIssuers(List.of(enabledIssuer, disabledIssuer)); Mockito.when(utilities.getIssuersConfigJsonValue()).thenReturn(new Gson().toJson(issuers)); - IssuersDTO expectedIssuersDTO = new IssuersDTO(); expectedIssuersDTO.setIssuers(List.of(enabledIssuer)); - IssuersDTO actualIssuersDTO = issuersService.getAllIssuers(""); + IssuersDTO actualIssuersDTO = issuersService.getIssuers(""); + assertEquals(expectedIssuersDTO, actualIssuersDTO); assertEquals(actualIssuersDTO.getIssuers().get(0).getEnabled(), "true"); assertEquals(actualIssuersDTO.getIssuers().size(), 1); } -} + + @Test + public void shouldReturnProperCredentialConfigurationsForTheRequestedIssuer() throws AuthorizationServerWellknownResponseException, ApiNotAccessibleException, IOException, InvalidWellknownResponseException { + CredentialIssuerConfigurationResponse actualCredentialIssuerConfigurationResponse = issuersService.getIssuerConfiguration("Issuer3id"); + + assertEquals(expectedCredentialIssuerConfigurationResponse, actualCredentialIssuerConfigurationResponse); + } + + @Test + public void issuersConfigShouldThrowExceptionIfAnyErrorOccurredWhileFetchingIssuersWellknown() throws ApiNotAccessibleException, IOException { + Mockito.when(utilities.getIssuersConfigJsonValue()).thenReturn(null); + + ApiNotAccessibleException actualException = assertThrows(ApiNotAccessibleException.class, () -> { + issuersService.getIssuerConfiguration(issuerId); + }); + + assertEquals("RESIDENT-APP-026 --> Api not accessible failure", actualException.getMessage()); + verify(utilities, times(1)).getIssuersConfigJsonValue(); + } + + + @Test + public void issuersConfigShouldThrowExceptionIfAnyErrorOccurredWhileFetchingIssuersAuthorizationServerWellknown() throws IOException, AuthorizationServerWellknownResponseException { + Mockito.when(authorizationServerService.getWellknown(authServerWellknownUrl)).thenThrow(new AuthorizationServerWellknownResponseException("well-known api is not accessible")); + + AuthorizationServerWellknownResponseException actualException = assertThrows(AuthorizationServerWellknownResponseException.class, () -> { + issuersService.getIssuerConfiguration("Issuer3id"); + }); + + assertEquals("RESIDENT-APP-042 --> Invalid Authorization Server well-known from server:\n" + + "well-known api is not accessible", actualException.getMessage()); + verify(authorizationServerService, times(1)).getWellknown(authServerWellknownUrl); + } +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidatorTest.java b/src/test/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidatorTest.java index dd88da1e3..21c69f7bf 100644 --- a/src/test/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidatorTest.java +++ b/src/test/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidatorTest.java @@ -10,7 +10,6 @@ import jakarta.validation.Validation; import jakarta.validation.Validator; import jakarta.validation.ValidatorFactory; -import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -30,17 +29,18 @@ public class CredentialIssuerWellknownResponseValidatorTest { @Autowired private Validator validator; + CredentialIssuerWellKnownResponse response; + @BeforeEach void setUp() { ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); validator = factory.getValidator(); + response = getCredentialIssuerWellKnownResponseDto("Issuer1", + Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); } @Test public void shouldThrowExceptionWhenCredentialIssuerIsMissingInCredentialIssuerWellknownResponse() throws ApiNotAccessibleException { - CredentialIssuerWellKnownResponse response = getCredentialIssuerWellKnownResponseDto("Issuer1", - Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); - response.setCredentialIssuer(""); response.setCredentialEndPoint("http://example.com/credential"); @@ -56,9 +56,6 @@ public void shouldThrowExceptionWhenCredentialIssuerIsMissingInCredentialIssuerW @Test public void shouldThrowExceptionWhenCredentialEndpointIsIncorrectInCredentialIssuerWellknownResponse() { - CredentialIssuerWellKnownResponse response = getCredentialIssuerWellKnownResponseDto("Issuer1", - Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); - response.setCredentialEndPoint("http://example.com"); // Incorrect because it does not end with "/credential" CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); @@ -73,9 +70,6 @@ public void shouldThrowExceptionWhenCredentialEndpointIsIncorrectInCredentialIss @Test public void shouldThrowExceptionWhenAuthorizationServersIsEmpty() { - CredentialIssuerWellKnownResponse response = getCredentialIssuerWellKnownResponseDto("Issuer1", - Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); - response.setCredentialIssuer("https://valid.url/credential"); response.setAuthorizationServers(Collections.emptyList()); // Invalid empty list @@ -89,11 +83,26 @@ public void shouldThrowExceptionWhenAuthorizationServersIsEmpty() { authorizationServers: must not be empty""", invalidWellknownResponseException.getMessage(), "Exception message should indicate 'authorizationServers' cannot be empty"); } + @Test + public void shouldThrowExceptionWhenAuthorizationServersIsNull() { + response.setCredentialIssuer("https://valid.url/credential"); + response.setAuthorizationServers(null); + + CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); + InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> + credentialIssuerWellknownResponseValidator.validate(response, validator)); + assertEquals("RESIDENT-APP-041", invalidWellknownResponseException.getErrorCode()); + assertEquals(""" + RESIDENT-APP-041 --> Invalid Wellknown from Issuer + Validation failed: + authorizationServers: must not be empty""", invalidWellknownResponseException.getMessage(), "Exception message should indicate 'authorizationServers' cannot be empty"); + } + @Test public void shouldThrowExceptionWhenFormatIsMissingInCredentialsSupported() { CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupportedResponse("CredentialType1"); credentialsSupportedResponse.setFormat(null); - CredentialIssuerWellKnownResponse response = getCredentialIssuerWellKnownResponseDto("Issuer1", + response = getCredentialIssuerWellKnownResponseDto("Issuer1", Map.of("CredentialType1", credentialsSupportedResponse)); @@ -109,8 +118,6 @@ public void shouldThrowExceptionWhenFormatIsMissingInCredentialsSupported() { @Test public void shouldThrowExceptionWhenLogoUrlIsInvalid() { - CredentialIssuerWellKnownResponse response = getCredentialIssuerWellKnownResponseDto("Issuer1", - Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); response.getCredentialConfigurationsSupported().get("CredentialType1").getDisplay().getFirst().getLogo().setUrl("ftp//invalid-url"); // Invalid URL CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); @@ -125,9 +132,6 @@ public void shouldThrowExceptionWhenLogoUrlIsInvalid() { @Test public void shouldThrowExceptionWhenBackgroundImageUrlIsInvalid() { - CredentialIssuerWellKnownResponse response = getCredentialIssuerWellKnownResponseDto("Issuer1", - Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); - response.getCredentialConfigurationsSupported().get("CredentialType1").getDisplay().getFirst().setBackgroundImage(new BackgroundImageDTO("local//imgbasebase64")); CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); @@ -143,9 +147,6 @@ public void shouldThrowExceptionWhenBackgroundImageUrlIsInvalid() { @Test public void shouldDetectMissingMandatoryFields() { - - CredentialIssuerWellKnownResponse response = getCredentialIssuerWellKnownResponseDto("Issuer1", - Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); response.setCredentialEndPoint(null); response.setCredentialConfigurationsSupported(null); response.setAuthorizationServers(null); @@ -165,8 +166,6 @@ public void shouldDetectMissingMandatoryFields() { @Test public void shouldDetectMissingMandatoryFieldsOfCredentialSupportedResponse() { - CredentialIssuerWellKnownResponse response = getCredentialIssuerWellKnownResponseDto("Issuer1", - Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); response.getCredentialConfigurationsSupported().get("CredentialType1").setFormat(null); response.getCredentialConfigurationsSupported().get("CredentialType1").setScope(null); response.getCredentialConfigurationsSupported().get("CredentialType1").setDisplay(null); @@ -188,8 +187,6 @@ public void shouldDetectMissingMandatoryFieldsOfCredentialSupportedResponse() { @Test public void shouldDetectMissingProofAlgorithmsSupported() { - CredentialIssuerWellKnownResponse response = getCredentialIssuerWellKnownResponseDto("Issuer1", - Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); response.getCredentialConfigurationsSupported().get("CredentialType1").getProofTypesSupported().get("jwt").setProofSigningAlgValuesSupported(null); CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); @@ -204,8 +201,6 @@ public void shouldDetectMissingProofAlgorithmsSupported() { @Test public void shouldDetectMissingMandatoryFieldsOfCredentialSupportedDisplayResponse() { // Create a new response object with nested display response details - CredentialIssuerWellKnownResponse response = getCredentialIssuerWellKnownResponseDto("Issuer1", - Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); List credentialSupportedDisplayResponseList = new ArrayList<>(); CredentialSupportedDisplayResponse credentialSupportedDisplayResponse = new CredentialSupportedDisplayResponse(); credentialSupportedDisplayResponse.setLogo(null); diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index 30d2036f5..c477eea14 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -9,7 +9,9 @@ import io.mosip.mimoto.dto.openid.datashare.DataShareResponseDTO; import io.mosip.mimoto.dto.openid.datashare.DataShareResponseWrapperDTO; import io.mosip.mimoto.dto.openid.presentation.*; - +import org.springframework.util.ResourceUtils; +import java.io.IOException; +import java.nio.file.Files; import java.util.*; import java.util.Collections; import java.util.HashMap; @@ -18,7 +20,7 @@ public class TestUtilities { - public static CredentialsSupportedResponse getCredentialSupportedResponse(String credentialSupportedName){ + public static CredentialsSupportedResponse getCredentialSupportedResponse(String credentialSupportedName) { LogoDTO logo = new LogoDTO(); logo.setUrl("https://logo"); logo.setAlt_text("logo-url"); @@ -39,18 +41,18 @@ public static CredentialsSupportedResponse getCredentialSupportedResponse(String credentialDefinitionResponseDto.setCredentialSubject(Map.of("name", credentialDisplayResponseDto)); CredentialsSupportedResponse credentialsSupportedResponse = new CredentialsSupportedResponse(); credentialsSupportedResponse.setFormat("ldp_vc"); - credentialsSupportedResponse.setScope(credentialSupportedName+"_vc_ldp"); + credentialsSupportedResponse.setScope(credentialSupportedName + "_vc_ldp"); credentialsSupportedResponse.setDisplay(Collections.singletonList(credentialSupportedDisplay)); - HashMap proofTypesSupportedHashMap=new HashMap<>(); + HashMap proofTypesSupportedHashMap = new HashMap<>(); ProofTypesSupported proofTypesSupported = new ProofTypesSupported(); proofTypesSupported.setProofSigningAlgValuesSupported(List.of("RS256")); - proofTypesSupportedHashMap.put("jwt",proofTypesSupported); + proofTypesSupportedHashMap.put("jwt", proofTypesSupported); credentialsSupportedResponse.setProofTypesSupported(proofTypesSupportedHashMap); credentialsSupportedResponse.setCredentialDefinition(credentialDefinitionResponseDto); return credentialsSupportedResponse; } - public static CredentialsSupportedResponse getCredentialSupportedResponse(String credentialSupportedName, String format){ + public static CredentialsSupportedResponse getCredentialSupportedResponse(String credentialSupportedName, String format) { LogoDTO logo = new LogoDTO(); logo.setUrl("https://logo"); logo.setAlt_text("logo-url"); @@ -68,27 +70,47 @@ public static CredentialsSupportedResponse getCredentialSupportedResponse(String credentialDisplayResponseDto.setDisplay(Collections.singletonList(credentialIssuerDisplayResponse)); CredentialsSupportedResponse credentialsSupportedResponse = new CredentialsSupportedResponse(); credentialsSupportedResponse.setFormat(format); - credentialsSupportedResponse.setScope(credentialSupportedName+"_vc_"+format); + credentialsSupportedResponse.setScope(credentialSupportedName + "_vc_" + format); credentialsSupportedResponse.setDisplay(Collections.singletonList(credentialSupportedDisplay)); - HashMap proofTypesSupportedHashMap=new HashMap<>(); + HashMap proofTypesSupportedHashMap = new HashMap<>(); ProofTypesSupported proofTypesSupported = new ProofTypesSupported(); proofTypesSupported.setProofSigningAlgValuesSupported(List.of("RS256")); proofTypesSupportedHashMap.put("jwt", proofTypesSupported); credentialsSupportedResponse.setProofTypesSupported(proofTypesSupportedHashMap); credentialsSupportedResponse.setDoctype("org.iso.18018"); - credentialsSupportedResponse.setClaims(Map.of("org.iso.18018", Map.of("given_name",Map.of("display", List.of(Map.of("name","Given Name","locale","en")))))); + credentialsSupportedResponse.setClaims(Map.of("org.iso.18018", Map.of("given_name", Map.of("display", List.of(Map.of("name", "Given Name", "locale", "en")))))); return credentialsSupportedResponse; } - public static CredentialIssuerWellKnownResponse getCredentialIssuerWellKnownResponseDto(String issuerName, Map credentialsSupportedResponses){ - CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = new CredentialIssuerWellKnownResponse(); - credentialIssuerWellKnownResponse.setCredentialIssuer("https://dev/"+issuerName); - credentialIssuerWellKnownResponse.setCredentialEndPoint("https://dev/issuance/credential"); - credentialIssuerWellKnownResponse.setAuthorizationServers(List.of("https://dev.net")); - credentialIssuerWellKnownResponse.setCredentialConfigurationsSupported(credentialsSupportedResponses); + public static CredentialIssuerWellKnownResponse getCredentialIssuerWellKnownResponseDto(String issuerName, Map credentialsSupportedResponses) { + CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = new CredentialIssuerWellKnownResponse( + "https://dev/" + issuerName, + List.of("https://auth-server.env.net"), + "https://dev/issuance/credential", + credentialsSupportedResponses); return credentialIssuerWellKnownResponse; } + public static CredentialIssuerConfigurationResponse getCredentialIssuerConfigurationResponseDto(String issuerName, Map credentialsSupportedResponses, List nullFields) { + AuthorizationServerWellKnownResponse authorizationServerWellKnownResponse = getAuthServerWellknownResponseDto(nullFields); + CredentialIssuerConfigurationResponse credentialIssuerConfigurationResponse = new CredentialIssuerConfigurationResponse("https://dev/" + issuerName, List.of("https://auth-server.env.net"), "https://dev/issuance/credential", credentialsSupportedResponses, authorizationServerWellKnownResponse); + return credentialIssuerConfigurationResponse; + } + + public static AuthorizationServerWellKnownResponse getAuthServerWellknownResponseDto(List nullFields) { + AuthorizationServerWellKnownResponse authorizationServerWellKnownResponse = new AuthorizationServerWellKnownResponse(); + if (!nullFields.contains("authorization_endpoint")) { + authorizationServerWellKnownResponse.setAuthorizationEndpoint("https://dev/authorize"); + } + if (!nullFields.contains("token_endpoint")) { + authorizationServerWellKnownResponse.setTokenEndpoint("https://dev/token"); + } + if (!nullFields.contains("grant_types_supported")) { + authorizationServerWellKnownResponse.setGrantTypesSupported(List.of("authorization_code")); + } + return authorizationServerWellKnownResponse; + } + public static IssuerDTO getIssuerDTO(String issuerName) { LogoDTO logo = new LogoDTO(); logo.setUrl("/logo"); @@ -102,17 +124,18 @@ public static IssuerDTO getIssuerDTO(String issuerName) { IssuerDTO issuer = new IssuerDTO(); issuer.setIssuer_id(issuerName + "id"); issuer.setCredential_issuer(issuerName + "id"); - issuer.setCredential_issuer_host("https://injicertify-mock.dev1.mosip.net"); + issuer.setCredential_issuer_host("https://issuer.env.net"); issuer.setDisplay(Collections.singletonList(display)); issuer.setClient_id("123"); - if (issuerName.equals("Issuer1")) issuer.setWellknown_endpoint("/well-known-proxy"); - else { - issuer.setRedirect_uri(null); - issuer.setToken_endpoint(null); + issuer.setWellknown_endpoint("/well-known-proxy"); + issuer.setProxy_token_endpoint("/well-known-proxy"); + if (!(issuerName.equals("Issuer2") || issuerName.equals("Issuer4"))) { //use it for testing /issuers or /issuers?search=issuer2 endpoints + issuer.setAuthorization_audience("/well-known-proxy"); } return issuer; } - public static IssuerDTO getIssuerConfigDTO(String issuerName, List nullFields) { + + public static IssuerDTO getIssuerConfigDTO(String issuerName) { LogoDTO logo = new LogoDTO(); logo.setUrl("/logo"); logo.setAlt_text("logo-url"); @@ -125,62 +148,25 @@ public static IssuerDTO getIssuerConfigDTO(String issuerName, List nullF IssuerDTO issuer = new IssuerDTO(); issuer.setIssuer_id(issuerName + "id"); issuer.setCredential_issuer(issuerName + "id"); - issuer.setCredential_issuer_host("https://injicertify-mock.dev1.mosip.net"); issuer.setDisplay(Collections.singletonList(display)); issuer.setClient_id("123"); issuer.setEnabled("true"); - if (issuerName.equals("Issuer1")) issuer.setWellknown_endpoint("/well-known-proxy"); - else { - if (!nullFields.contains("redirect_uri")) - issuer.setRedirect_uri("/redirection"); - if (!nullFields.contains("authorization_audience")) - issuer.setAuthorization_audience("/authorization_audience"); - if (!nullFields.contains("redirect_uri")) - issuer.setRedirect_uri("/redirection"); - if (!nullFields.contains("token_endpoint")) - issuer.setToken_endpoint("/token_endpoint"); - if (!nullFields.contains("proxy_token_endpoint")) - issuer.setProxy_token_endpoint("/proxy_token_endpoint"); - } + issuer.setWellknown_endpoint("https://issuer.env.net/.well-known/openid-credential-issuer"); + issuer.setCredential_issuer_host("https://issuer.env.net"); + issuer.setAuthorization_audience("https://dev/token"); + issuer.setProxy_token_endpoint("https://dev/token"); return issuer; } - public static String getExpectedWellKnownJson() { - return "{" - + "\"credential_issuer\": \"Issuer1\"," - + "\"credential_endpoint\": \"/credential_endpoint\"," - + "\"credential_configurations_supported\": {" - + "\"CredentialType1\": {" - + "\"format\": \"ldp_vc\"," - + "\"scope\": \"CredentialType1_vc_ldp\"," - + "\"display\": [{" - + "\"logo\": {" - + "\"url\": \"/logo\"," - + "\"alt_text\": \"logo-url\"" - + "}," - + "\"name\": \"CredentialType1\"," - + "\"locale\": \"en\"," - + "\"text_color\": \"#FFFFFF\"," - + "\"background_color\": \"#B34622\"" - + "}]," - + "\"proof_types_supported\": {}," - + "\"credential_definition\": {" - + "\"type\": [\"VerifiableCredential\", \"CredentialType1\"]," - + "\"credentialSubject\": {" - + "\"name\": {" - + "\"display\": [{" - + "\"name\": \"Given Name\"," - + "\"locale\": \"en\"" - + "}]" - + "}" - + "}" - + "}" - + "}" - + "}" - + "}"; + public static String getExpectedWellKnownJson() throws IOException { + return new String(Files.readAllBytes(ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX + "responses/expectedWellknown.json").toPath())).trim(); + } + + public static String getExpectedIssuersConfigJson() throws IOException { + return new String(Files.readAllBytes(ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX + "responses/expectedIssuerConfig.json").toPath())).trim(); } - public static PresentationRequestDTO getPresentationRequestDTO(){ + public static PresentationRequestDTO getPresentationRequestDTO() { return PresentationRequestDTO.builder() .presentationDefinition(getPresentationDefinitionDTO()) .clientId("test_client_id") @@ -189,7 +175,7 @@ public static PresentationRequestDTO getPresentationRequestDTO(){ .redirectUri("test_redirect_uri").build(); } - public static VCCredentialProperties getVCCredentialPropertiesDTO(String type){ + public static VCCredentialProperties getVCCredentialPropertiesDTO(String type) { ArrayList contextList = new ArrayList<>(); contextList.add("context-1"); @@ -203,7 +189,7 @@ public static VCCredentialProperties getVCCredentialPropertiesDTO(String type){ credentialSubject.put("key1", "value1"); credentialSubject.put("key2", "value2"); - VCCredentialResponseProof vcCredentialResponseProof = VCCredentialResponseProof.builder() + VCCredentialResponseProof vcCredentialResponseProof = VCCredentialResponseProof.builder() .type(type) .proofPurpose("test-proofPurpose") .proofValue("test-proofValue") @@ -221,13 +207,13 @@ public static VCCredentialProperties getVCCredentialPropertiesDTO(String type){ .credentialSubject(credentialSubject).build(); } - public static VCCredentialResponse getVCCredentialResponseDTO(String type){ + public static VCCredentialResponse getVCCredentialResponseDTO(String type) { return VCCredentialResponse.builder() .credential(getVCCredentialPropertiesDTO(type)) .format("ldp_vc").build(); } - public static io.mosip.mimoto.dto.idp.TokenResponseDTO getTokenResponseDTO(){ + public static io.mosip.mimoto.dto.idp.TokenResponseDTO getTokenResponseDTO() { return io.mosip.mimoto.dto.idp.TokenResponseDTO.builder() .id_token("test-id-token") .access_token("test-accesstoken") @@ -237,12 +223,12 @@ public static io.mosip.mimoto.dto.idp.TokenResponseDTO getTokenResponseDTO(){ .build(); } - public static PresentationDefinitionDTO getPresentationDefinitionDTO(){ + public static PresentationDefinitionDTO getPresentationDefinitionDTO() { FilterDTO filterDTO = FilterDTO.builder().type("String").pattern("test-credential").build(); FieldDTO fieldDTO = FieldDTO.builder().path(new String[]{"$.type"}).filter(filterDTO).build(); ConstraintsDTO constraintsDTO = ConstraintsDTO.builder().fields(new FieldDTO[]{fieldDTO}).build(); Map> proofTypes = Map.of("proofTypes", Collections.singletonList("Ed25519Signature2020")); - Map>> format = Map.of("ldpVc", proofTypes ); + Map>> format = Map.of("ldpVc", proofTypes); InputDescriptorDTO inputDescriptorDTO = InputDescriptorDTO.builder().id("test-input-id").format(format).constraints(constraintsDTO).build(); return PresentationDefinitionDTO.builder() @@ -250,7 +236,7 @@ public static PresentationDefinitionDTO getPresentationDefinitionDTO(){ .id("test-id").build(); } - public static VerifiablePresentationDTO getVerifiablePresentationDTO(){ + public static VerifiablePresentationDTO getVerifiablePresentationDTO() { List contextList = new ArrayList<>(); contextList.add("https://www.w3.org/2018/credentials/v1"); @@ -278,7 +264,7 @@ public static String getObjectAsString(Object object) throws JsonProcessingExcep return objectMapper.writeValueAsString(object); } - public static DataShareResponseWrapperDTO getDataShareResponseWrapperDTO(){ + public static DataShareResponseWrapperDTO getDataShareResponseWrapperDTO() { ErrorDTO errorDTO = ErrorDTO.builder().errorCode("test-errorCode").errorMessage("test-errorMessage").build(); DataShareResponseDTO dataShareResponseDTO = DataShareResponseDTO.builder() .url("https://test-url") diff --git a/src/test/resources/responses/expectedIssuerConfig.json b/src/test/resources/responses/expectedIssuerConfig.json new file mode 100644 index 000000000..0780b4a78 --- /dev/null +++ b/src/test/resources/responses/expectedIssuerConfig.json @@ -0,0 +1,51 @@ +{ + "credential_issuer": "https://dev/id1", + "authorization_servers": [ + "https://auth-server.env.net" + ], + "credential_endpoint": "https://dev/issuance/credential", + "credential_configurations_supported": { + "CredentialType1": { + "format": "ldp_vc", + "scope": "Credential1_vc_ldp", + "proof_types_supported": {}, + "credential_definition": { + "type": [ + "VerifiableCredential", + "Credential1" + ], + "credentialSubject": { + "name": { + "display": [ + { + "name": "Given Name", + "locale": "en" + } + ] + } + } + }, + "display": [ + { + "name": "Credential1", + "locale": "en", + "logo": { + "url": "https://logo", + "alt_text": "logo-url" + }, + "background_image": { + "uri": "https://bgimage" + }, + "background_color": "#B34622", + "text_color": "#FFFFFF" + } + ] + } + }, + "authorization": { + "authorization_endpoint": "https://dev/authorize", + "grant_types_supported": [ + "authorization_code" + ] + } +} diff --git a/src/test/resources/responses/expectedWellknown.json b/src/test/resources/responses/expectedWellknown.json index 58e803e62..862274684 100644 --- a/src/test/resources/responses/expectedWellknown.json +++ b/src/test/resources/responses/expectedWellknown.json @@ -1,16 +1,16 @@ { - "credential_issuer": "https://dev/id1", - "authorization_servers": ["https://dev.net"], + "credential_issuer": "https://dev/issuer1", + "authorization_servers": ["https://auth-server.env.net"], "credential_endpoint": "https://dev/issuance/credential", "credential_configurations_supported": { "CredentialType1": { "format": "ldp_vc", - "scope": "Credential1_vc_ldp", + "scope": "CredentialType1_vc_ldp", "proof_types_supported": {}, "credential_definition": { "type": [ "VerifiableCredential", - "Credential1" + "CredentialType1" ], "credentialSubject": { "name": { @@ -25,7 +25,7 @@ }, "display": [ { - "name": "Credential1", + "name": "CredentialType1", "locale": "en", "logo": { "url": "https://logo", @@ -40,4 +40,4 @@ ] } } -} +} \ No newline at end of file From 7ea115fe2cf7d3a2a0406288eb3c6b82e5c2e72e Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 3 Feb 2025 16:03:40 +0530 Subject: [PATCH 331/860] [INJIWEB-1203] update verifiers endpoint to return the empty verifiers list if there is any issue while fetching the verifiers list (#569) Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../controller/VerifiersController.java | 9 ++-- .../java/io/mosip/mimoto/dto/IssuersDTO.java | 5 +++ .../service/impl/IssuersServiceImpl.java | 44 ++++++++----------- 3 files changed, 26 insertions(+), 32 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/VerifiersController.java b/src/main/java/io/mosip/mimoto/controller/VerifiersController.java index 7ff7d698d..1e213cda3 100644 --- a/src/main/java/io/mosip/mimoto/controller/VerifiersController.java +++ b/src/main/java/io/mosip/mimoto/controller/VerifiersController.java @@ -2,7 +2,6 @@ import io.mosip.mimoto.constant.SwaggerLiteralConstants; import io.mosip.mimoto.core.http.ResponseWrapper; -import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.openid.VerifiersDTO; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.service.VerifierService; @@ -18,9 +17,8 @@ import org.springframework.web.bind.annotation.RestController; import java.io.IOException; -import java.util.List; +import java.util.Collections; -import static io.mosip.mimoto.exception.PlatformErrorMessages.API_NOT_ACCESSIBLE_EXCEPTION; @RestController @RequestMapping(value = "/verifiers") @@ -37,12 +35,11 @@ public ResponseEntity> getAllTrustedVerifiers() { ResponseWrapper responseWrapper = new ResponseWrapper<>(); try { responseWrapper.setResponse(verifierService.getTrustedVerifiers()); + return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); } catch (ApiNotAccessibleException | IOException e) { log.error("Exception occurred while fetching trusted verifiers ", e); - responseWrapper.setErrors(List.of(new ErrorDTO(API_NOT_ACCESSIBLE_EXCEPTION.getCode(), API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); + responseWrapper.setResponse(new VerifiersDTO(Collections.emptyList())); return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); } - - return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); } } diff --git a/src/main/java/io/mosip/mimoto/dto/IssuersDTO.java b/src/main/java/io/mosip/mimoto/dto/IssuersDTO.java index f7d5f837b..a3abee216 100644 --- a/src/main/java/io/mosip/mimoto/dto/IssuersDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/IssuersDTO.java @@ -2,12 +2,17 @@ import com.google.gson.annotations.Expose; import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; import lombok.Data; import jakarta.validation.Valid; +import lombok.NoArgsConstructor; + import java.util.List; @Data +@AllArgsConstructor +@NoArgsConstructor public class IssuersDTO { @Expose diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index eb8a752d6..80b8c547a 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -22,7 +22,6 @@ import org.springframework.stereotype.Service; import java.io.IOException; -import java.util.*; import java.util.stream.Collectors; @@ -45,8 +44,8 @@ public class IssuersServiceImpl implements IssuersService { @Override public IssuersDTO getIssuers(String search) throws ApiNotAccessibleException, AuthorizationServerWellknownResponseException, IOException, InvalidWellknownResponseException { IssuersDTO issuersDTO = getAllIssuers(); - getAllEnabledIssuers(issuersDTO); - getFilteredIssuers(issuersDTO, search); + issuersDTO = getAllEnabledIssuers(issuersDTO); + issuersDTO = getFilteredIssuers(issuersDTO, search); return issuersDTO; } @@ -54,36 +53,29 @@ public IssuersDTO getIssuers(String search) throws ApiNotAccessibleException, Au @Override public IssuerDTO getIssuerDetails(String issuerId) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { IssuersDTO issuersDTO = getAllIssuers(); - getAllEnabledIssuers(issuersDTO); + issuersDTO = getAllEnabledIssuers(issuersDTO); - Optional issuerConfigResp = issuersDTO.getIssuers().stream() + return issuersDTO.getIssuers().stream() .filter(issuer -> issuer.getIssuer_id().equals(issuerId)) - .findFirst(); - - IssuerDTO issuerDTO; - if (issuerConfigResp.isPresent()) { - issuerDTO = issuerConfigResp.get(); - } else { - throw new InvalidIssuerIdException(); - } - return issuerDTO; + .findFirst() + .orElseThrow(InvalidIssuerIdException::new); } - private void getAllEnabledIssuers(IssuersDTO issuersDTO) { - List enabledIssuers = issuersDTO.getIssuers().stream() + private IssuersDTO getAllEnabledIssuers(IssuersDTO issuersDTO) { + return new IssuersDTO(issuersDTO.getIssuers().stream() .filter(issuer -> "true".equals(issuer.getEnabled())) - .collect(Collectors.toList()); - issuersDTO.setIssuers(enabledIssuers); + .collect(Collectors.toList())); } - private void getFilteredIssuers(IssuersDTO issuersDTO, String search) { - if (!StringUtils.isEmpty(search)) { - List filteredIssuers = issuersDTO.getIssuers().stream() - .filter(issuer -> issuer.getDisplay().stream() - .anyMatch(displayDTO -> displayDTO.getTitle().toLowerCase().contains(search.toLowerCase()))) - .collect(Collectors.toList()); - issuersDTO.setIssuers(filteredIssuers); + private IssuersDTO getFilteredIssuers(IssuersDTO issuersDTO, String search) { + if (StringUtils.isEmpty(search)) { + return issuersDTO; } + + return new IssuersDTO(issuersDTO.getIssuers().stream() + .filter(issuer -> issuer.getDisplay().stream() + .anyMatch(displayDTO -> displayDTO.getTitle().toLowerCase().contains(search.toLowerCase()))) + .collect(Collectors.toList())); } @Override @@ -122,7 +114,7 @@ public CredentialIssuerConfigurationResponse getIssuerConfiguration(String issue ); } - public void updateIssuerWithAuthServerConfig(IssuerDTO issuerDTO) throws AuthorizationServerWellknownResponseException, ApiNotAccessibleException, IOException, InvalidWellknownResponseException { + private void updateIssuerWithAuthServerConfig(IssuerDTO issuerDTO) throws AuthorizationServerWellknownResponseException, ApiNotAccessibleException, IOException, InvalidWellknownResponseException { CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = issuerWellknownService.getWellknown(issuerDTO.getCredential_issuer_host()); AuthorizationServerWellKnownResponse authorizationServerWellKnownResponse = authorizationServerService.getWellknown(credentialIssuerWellKnownResponse.getAuthorizationServers().get(0)); String tokenEndpoint = authorizationServerWellKnownResponse.getTokenEndpoint(); From d0e9250eb3b2dc8c964cccae0c0d3386d331e722 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 3 Feb 2025 23:32:20 +0530 Subject: [PATCH 332/860] [Injiweb 1203] Ignore issuer and Authorization wellknown call for MosipOtp issuer (#570) * [INJIWEB-1203] ignore fetching wellknown for mosipOtp issuer Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1203] set protocol value for issuers in test utilites Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --------- Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java | 4 +++- src/test/java/io/mosip/mimoto/util/TestUtilities.java | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index 80b8c547a..27472ab60 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -93,7 +93,9 @@ public IssuersDTO getAllIssuers() throws ApiNotAccessibleException, Authorizatio throw e; } for (IssuerDTO issuerDTO : issuersDTO.getIssuers()) { - updateIssuerWithAuthServerConfig(issuerDTO); + if (!issuerDTO.getProtocol().equals("OTP")) { + updateIssuerWithAuthServerConfig(issuerDTO); + } } return issuersDTO; diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index c477eea14..ab2ccd6be 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -151,6 +151,7 @@ public static IssuerDTO getIssuerConfigDTO(String issuerName) { issuer.setDisplay(Collections.singletonList(display)); issuer.setClient_id("123"); issuer.setEnabled("true"); + issuer.setProtocol("OpenId4VCI"); issuer.setWellknown_endpoint("https://issuer.env.net/.well-known/openid-credential-issuer"); issuer.setCredential_issuer_host("https://issuer.env.net"); issuer.setAuthorization_audience("https://dev/token"); From 22a7940c28b28b8905f5aa1b02c89279ad0ca33f Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Tue, 4 Feb 2025 11:42:06 +0530 Subject: [PATCH 333/860] =?UTF-8?q?[INJIWEB-1203]=20Updating=20handling=20?= =?UTF-8?q?of=20wellknown=20APis=20failure=20in=20issuers=E2=80=A6=20(#571?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [INJIWEB-1203] Updating handling of wellknown APis failure in issuers endpoint Signed-off-by: Gurpreet41082 * [INJIWEB-1203] Fixed test case Signed-off-by: Gurpreet41082 --------- Signed-off-by: Gurpreet41082 --- .../java/io/mosip/mimoto/dto/IssuerDTO.java | 1 - .../service/impl/IssuersServiceImpl.java | 21 +++++++++++++------ .../mimoto/service/IssuersServiceTest.java | 2 +- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java index 3a4d1e79d..bf918b08f 100644 --- a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java @@ -35,7 +35,6 @@ public class IssuerDTO { @Schema(description = "Redirect URI configured while creating the OIDC Client") String redirect_uri; @JsonInclude(NON_NULL) - @NotBlank @Schema(description = "Authorization Audience for retrieving Token from token endpoint") String authorization_audience; @Schema(description = "Mimoto Token Endpoint Fetching the Token From Authorization Server with Client Assertion") diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index 27472ab60..f3e86a1c7 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -116,11 +116,20 @@ public CredentialIssuerConfigurationResponse getIssuerConfiguration(String issue ); } - private void updateIssuerWithAuthServerConfig(IssuerDTO issuerDTO) throws AuthorizationServerWellknownResponseException, ApiNotAccessibleException, IOException, InvalidWellknownResponseException { - CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = issuerWellknownService.getWellknown(issuerDTO.getCredential_issuer_host()); - AuthorizationServerWellKnownResponse authorizationServerWellKnownResponse = authorizationServerService.getWellknown(credentialIssuerWellKnownResponse.getAuthorizationServers().get(0)); - String tokenEndpoint = authorizationServerWellKnownResponse.getTokenEndpoint(); - issuerDTO.setAuthorization_audience(tokenEndpoint); - issuerDTO.setProxy_token_endpoint(tokenEndpoint); + private void updateIssuerWithAuthServerConfig(IssuerDTO issuerDTO) { + CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = null; + try { + credentialIssuerWellKnownResponse = issuerWellknownService.getWellknown(issuerDTO.getCredential_issuer_host()); + AuthorizationServerWellKnownResponse authorizationServerWellKnownResponse = authorizationServerService.getWellknown(credentialIssuerWellKnownResponse.getAuthorizationServers().get(0)); + String tokenEndpoint = authorizationServerWellKnownResponse.getTokenEndpoint(); + issuerDTO.setAuthorization_audience(tokenEndpoint); + issuerDTO.setProxy_token_endpoint(tokenEndpoint); + } catch (ApiNotAccessibleException | IOException | AuthorizationServerWellknownResponseException | + InvalidWellknownResponseException e) { + log.error("Exception occurred while fetching issuer wellknown ", e); + issuerDTO.setAuthorization_audience(""); + issuerDTO.setProxy_token_endpoint(""); + } + } } \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java index d09831e6a..1b135a019 100644 --- a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java @@ -202,6 +202,6 @@ public void issuersConfigShouldThrowExceptionIfAnyErrorOccurredWhileFetchingIssu assertEquals("RESIDENT-APP-042 --> Invalid Authorization Server well-known from server:\n" + "well-known api is not accessible", actualException.getMessage()); - verify(authorizationServerService, times(1)).getWellknown(authServerWellknownUrl); + verify(authorizationServerService, times(3)).getWellknown(authServerWellknownUrl); } } \ No newline at end of file From 66ae1ae703a20b3eed8557827b08f19b715963a6 Mon Sep 17 00:00:00 2001 From: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> Date: Tue, 4 Feb 2025 18:43:39 +0530 Subject: [PATCH 334/860] MOSIP-39561 - Added the logic for fetch sunbird url from actuator (#573) * MOSIP-36455 - Merge release 0.14.x branch with develop Signed-off-by: Mohanachandran S * MOSIP-36455 - Merge release 0.14.x branch with develop Signed-off-by: Mohanachandran S * INJIWEB-967 - Updated Automation Tests for Sunbird and eSignet Issues Signed-off-by: Mohanachandran S * MOSIP-38392 - updated the apitest commons version Signed-off-by: Mohanachandran S * MOSIP-38392 - Updated the issuer name for sunbird Signed-off-by: Mohanachandran S * pulled latest changes Signed-off-by: Mohanachandran S * Pulled latest changes Signed-off-by: Mohanachandran S * Pulled latest changes Signed-off-by: Mohanachandran S * updated the sunbird baseurl property Signed-off-by: Mohanachandran S * updated the sunbird baseurl property Signed-off-by: Mohanachandran S * updated the sunbird baseurl property Signed-off-by: Mohanachandran S * updated the sunbird baseurl property Signed-off-by: Mohanachandran S --------- Signed-off-by: Mohanachandran S --- api-test/pom.xml | 2 +- .../testrig/apirig/mimoto/testscripts/DeleteWithParam.java | 4 ++-- .../mosip/testrig/apirig/mimoto/testscripts/GetWithParam.java | 4 ++-- .../mosip/testrig/apirig/mimoto/testscripts/SimplePost.java | 4 ++-- .../apirig/mimoto/testscripts/SimplePostForAutoGenId.java | 4 ++-- .../testrig/apirig/mimoto/utils/MimotoConfigManager.java | 4 ++++ api-test/src/main/resources/config/mimoto.properties | 3 --- 7 files changed, 13 insertions(+), 12 deletions(-) diff --git a/api-test/pom.xml b/api-test/pom.xml index f560509e0..7d73160ed 100644 --- a/api-test/pom.xml +++ b/api-test/pom.xml @@ -56,7 +56,7 @@ io.mosip.testrig.apitest.commons apitest-commons - 1.3.1-SNAPSHOT + 1.3.1 diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/DeleteWithParam.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/DeleteWithParam.java index bdec99ce5..fa83f24ae 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/DeleteWithParam.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/DeleteWithParam.java @@ -124,8 +124,8 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad if (MimotoConfigManager.isInServiceNotDeployedList("sunbirdrc")) throw new SkipException(GlobalConstants.SERVICE_NOT_DEPLOYED_MESSAGE); - if (MimotoConfigManager.getSunBirdBaseURL() != null && !MimotoConfigManager.getSunBirdBaseURL().isBlank()) - tempUrl = MimotoConfigManager.getSunBirdBaseURL(); + if (MimotoConfigManager.getSunbirdBaseURL() != null && !MimotoConfigManager.getSunbirdBaseURL().isBlank()) + tempUrl = MimotoConfigManager.getSunbirdBaseURL(); //Once sunbird registry is pointing to specific env, remove the above line and uncomment below line //tempUrl = ApplnURI.replace(GlobalConstants.API_INTERNAL, MimotoConfigManager.getSunBirdBaseURL()); testCaseDTO.setEndPoint(testCaseDTO.getEndPoint().replace("$SUNBIRDBASEURL$", "")); diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/GetWithParam.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/GetWithParam.java index 440a0124c..7da3058da 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/GetWithParam.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/GetWithParam.java @@ -148,8 +148,8 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad if (MimotoConfigManager.isInServiceNotDeployedList("sunbirdrc")) throw new SkipException(GlobalConstants.SERVICE_NOT_DEPLOYED_MESSAGE); - if (MimotoConfigManager.getSunBirdBaseURL() != null && !MimotoConfigManager.getSunBirdBaseURL().isBlank()) - tempUrl = MimotoConfigManager.getSunBirdBaseURL(); + if (MimotoConfigManager.getSunbirdBaseURL() != null && !MimotoConfigManager.getSunbirdBaseURL().isBlank()) + tempUrl = MimotoConfigManager.getSunbirdBaseURL(); //Once sunbird registry is pointing to specific env, remove the above line and uncomment below line // tempUrl = ApplnURI.replace(GlobalConstants.API_INTERNAL, // MimotoConfigManager.getSunBirdBaseURL()); diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePost.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePost.java index 8c37a90e0..73a98782c 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePost.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePost.java @@ -134,8 +134,8 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad if (MimotoConfigManager.isInServiceNotDeployedList("sunbirdrc")) throw new SkipException(GlobalConstants.SERVICE_NOT_DEPLOYED_MESSAGE); - if (MimotoConfigManager.getSunBirdBaseURL() != null && !MimotoConfigManager.getSunBirdBaseURL().isBlank()) - tempUrl = MimotoConfigManager.getSunBirdBaseURL(); + if (MimotoConfigManager.getSunbirdBaseURL() != null && !MimotoConfigManager.getSunbirdBaseURL().isBlank()) + tempUrl = MimotoConfigManager.getSunbirdBaseURL(); //Once sunbird registry is pointing to specific env, remove the above line and uncomment below line //tempUrl = ApplnURI.replace(GlobalConstants.API_INTERNAL, MimotoConfigManager.getSunBirdBaseURL()); testCaseDTO.setEndPoint(testCaseDTO.getEndPoint().replace("$SUNBIRDBASEURL$", "")); diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java index 1a34c594a..18b6d734f 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java @@ -150,8 +150,8 @@ public void test(TestCaseDTO testCaseDTO) if (MimotoConfigManager.isInServiceNotDeployedList("sunbirdrc")) throw new SkipException(GlobalConstants.SERVICE_NOT_DEPLOYED_MESSAGE); - if (MimotoConfigManager.getSunBirdBaseURL() != null && !MimotoConfigManager.getSunBirdBaseURL().isBlank()) - tempUrl = MimotoConfigManager.getSunBirdBaseURL(); + if (MimotoConfigManager.getSunbirdBaseURL() != null && !MimotoConfigManager.getSunbirdBaseURL().isBlank()) + tempUrl = MimotoConfigManager.getSunbirdBaseURL(); //Once sunbird registry is pointing to specific env, remove the above line and uncomment below line //tempUrl = ApplnURI.replace(GlobalConstants.API_INTERNAL, MimotoConfigManager.getSunBirdBaseURL()); testCaseDTO.setEndPoint(testCaseDTO.getEndPoint().replace("$SUNBIRDBASEURL$", "")); diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java index 54cf07717..3050fe84c 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java @@ -29,5 +29,9 @@ public static void init() { // Add module specific properties as well. init(moduleSpecificPropertiesMap); } + + public static String getSunbirdBaseURL() { + return MimotoUtil.getValueFromMimotoActuator("overrides", "mosip.sunbird.url"); + } } diff --git a/api-test/src/main/resources/config/mimoto.properties b/api-test/src/main/resources/config/mimoto.properties index d45591c23..6e07fb819 100644 --- a/api-test/src/main/resources/config/mimoto.properties +++ b/api-test/src/main/resources/config/mimoto.properties @@ -1,8 +1,5 @@ #---------------------------------- End point(s) relative URLs ----------------------------------# actuatorMimotoEndpoint=/v1/mimoto/actuator/env -sunBirdBaseURL=https://registry.dev1.mosip.net -#Once sunbird registry is pointing to specific env, remove the above line and uncomment below line -#sunBirdBaseURL=registry mimoto-oidc-mosipid-partner-clientid=mimoto.oidc.mosipid.partner.clientid mimoto-oidc-sunbird-partner-clientid=mimoto.oidc.sunbird.partner.clientid mimoto-oidc-partner-clientid=mimoto.oidc.partner.clientid From 6a5626270ab7f737f6c3bc847133e4acfc4da074 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Tue, 4 Feb 2025 18:47:31 +0530 Subject: [PATCH 335/860] Injiweb 1203 handing wellknown caching issues (#577) * [INJIWEB-1203] Updating handling of wellknown APis failure in issuers endpoint Signed-off-by: Gurpreet41082 * [INJIWEB-1203] Fixed test case Signed-off-by: Gurpreet41082 * [INJIWEB-1203] Fixed the keys for the caching Signed-off-by: Gurpreet41082 --------- Signed-off-by: Gurpreet41082 --- .../mimoto/service/impl/AuthorizationServerServiceImpl.java | 2 +- .../mosip/mimoto/service/impl/IssuerWellknownServiceImpl.java | 2 +- .../java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/AuthorizationServerServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/AuthorizationServerServiceImpl.java index d1bc79ce7..b53dbe880 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/AuthorizationServerServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/AuthorizationServerServiceImpl.java @@ -31,7 +31,7 @@ public class AuthorizationServerServiceImpl implements AuthorizationServerServic private ObjectMapper objectMapper; @Override - @Cacheable(value = "authServerWellknown", key = "{#authorizationServerHostUrl}") + @Cacheable(value = "authServerWellknown", key = "#p0") public AuthorizationServerWellKnownResponse getWellknown(String authorizationServerHostUrl) throws AuthorizationServerWellknownResponseException { try { String wellknownEndpoint = authorizationServerHostUrl + "/.well-known/oauth-authorization-server"; diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuerWellknownServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuerWellknownServiceImpl.java index 6d035c029..42de38941 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuerWellknownServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuerWellknownServiceImpl.java @@ -32,7 +32,7 @@ public class IssuerWellknownServiceImpl implements IssuerWellknownService { @Override - @Cacheable(value = "issuerWellknown", key = "{#credentialIssuerHost}") + @Cacheable(value = "issuerWellknown", key = "#p0") public CredentialIssuerWellKnownResponse getWellknown(String credentialIssuerHost) throws ApiNotAccessibleException, IOException, InvalidWellknownResponseException { try { String wellknownEndpoint = credentialIssuerHost + "/.well-known/openid-credential-issuer"; diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index f3e86a1c7..01d83c3d8 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -102,7 +102,7 @@ public IssuersDTO getAllIssuers() throws ApiNotAccessibleException, Authorizatio } @Override - @Cacheable(value = "credentialIssuerConfig", key = "{#issuerId}") + @Cacheable(value = "credentialIssuerConfig", key = "#p0") public CredentialIssuerConfigurationResponse getIssuerConfiguration(String issuerId) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = issuerWellknownService.getWellknown(getIssuerDetails(issuerId).getCredential_issuer_host()); AuthorizationServerWellKnownResponse authorizationServerWellKnownResponse = authorizationServerService.getWellknown(credentialIssuerWellKnownResponse.getAuthorizationServers().get(0)); From aa133d71a8b11fa303bb994f76607bb942d86def Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Thu, 6 Feb 2025 00:16:13 +0530 Subject: [PATCH 336/860] [INJIWEB-1203] In issuers & specific issuer endpoint fetch authorization_audience & proxy_token_endpoint from issuers config rather than fetching from auth server wellknown In issuers validation config file if we fetch these fields from auth server wellknown and if the issuer or auth server wellknown is down then mimoto is throwing the error while launch the service and not starting the mimoto, so to avoid this we will fetch it from config itself Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../service/impl/IssuersServiceImpl.java | 24 +------------------ .../mimoto/service/IssuersServiceTest.java | 2 +- 2 files changed, 2 insertions(+), 24 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index 01d83c3d8..b26df75f2 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -79,7 +79,7 @@ private IssuersDTO getFilteredIssuers(IssuersDTO issuersDTO, String search) { } @Override - public IssuersDTO getAllIssuers() throws ApiNotAccessibleException, AuthorizationServerWellknownResponseException, IOException, InvalidWellknownResponseException { + public IssuersDTO getAllIssuers() throws ApiNotAccessibleException, IOException { IssuersDTO issuersDTO; String issuersConfigJsonValue = utilities.getIssuersConfigJsonValue(); @@ -92,11 +92,6 @@ public IssuersDTO getAllIssuers() throws ApiNotAccessibleException, Authorizatio } catch (Exception e) { throw e; } - for (IssuerDTO issuerDTO : issuersDTO.getIssuers()) { - if (!issuerDTO.getProtocol().equals("OTP")) { - updateIssuerWithAuthServerConfig(issuerDTO); - } - } return issuersDTO; } @@ -115,21 +110,4 @@ public CredentialIssuerConfigurationResponse getIssuerConfiguration(String issue authorizationServerWellKnownResponse ); } - - private void updateIssuerWithAuthServerConfig(IssuerDTO issuerDTO) { - CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = null; - try { - credentialIssuerWellKnownResponse = issuerWellknownService.getWellknown(issuerDTO.getCredential_issuer_host()); - AuthorizationServerWellKnownResponse authorizationServerWellKnownResponse = authorizationServerService.getWellknown(credentialIssuerWellKnownResponse.getAuthorizationServers().get(0)); - String tokenEndpoint = authorizationServerWellKnownResponse.getTokenEndpoint(); - issuerDTO.setAuthorization_audience(tokenEndpoint); - issuerDTO.setProxy_token_endpoint(tokenEndpoint); - } catch (ApiNotAccessibleException | IOException | AuthorizationServerWellknownResponseException | - InvalidWellknownResponseException e) { - log.error("Exception occurred while fetching issuer wellknown ", e); - issuerDTO.setAuthorization_audience(""); - issuerDTO.setProxy_token_endpoint(""); - } - - } } \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java index 1b135a019..d09831e6a 100644 --- a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java @@ -202,6 +202,6 @@ public void issuersConfigShouldThrowExceptionIfAnyErrorOccurredWhileFetchingIssu assertEquals("RESIDENT-APP-042 --> Invalid Authorization Server well-known from server:\n" + "well-known api is not accessible", actualException.getMessage()); - verify(authorizationServerService, times(3)).getWellknown(authServerWellknownUrl); + verify(authorizationServerService, times(1)).getWellknown(authServerWellknownUrl); } } \ No newline at end of file From c192776708b20e4e43c7249d43df9388da598ece Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Thu, 6 Feb 2025 00:45:00 +0530 Subject: [PATCH 337/860] [INJIWEB-1203] update mimoto version Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 8ffc495c8..56ddd951a 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 io.mosip mimoto - 0.15.0-SNAPSHOT + 0.17.0-SNAPSHOT mimoto https://github.com/mosip/mimoto Mobile server backend supporting Inji. From a76fe4d0992274ec19283fbea0efa9b1d64ae25b Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Thu, 6 Feb 2025 01:38:04 +0530 Subject: [PATCH 338/860] [INJIWEB-1203] send issuer id properly to get issuers config method from credential service impl file Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../io/mosip/mimoto/service/impl/CredentialServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java index 6a0694869..478d78563 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java @@ -119,7 +119,7 @@ public TokenResponseDTO getTokenResponse(Map params, String issu @Override public ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String credentialType, TokenResponseDTO response, String credentialValidity, String locale) throws Exception { IssuerDTO issuerDTO = issuersService.getIssuerDetails(issuerId); - CredentialIssuerConfigurationResponse issuerConfigurationResponse = issuersService.getIssuerConfiguration(issuerDTO.getCredential_issuer_host()); + CredentialIssuerConfigurationResponse issuerConfigurationResponse = issuersService.getIssuerConfiguration(issuerId); CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = new CredentialIssuerWellKnownResponse( issuerConfigurationResponse.getCredentialIssuer(), issuerConfigurationResponse.getAuthorizationServers(), From 35b0a0154fa146d78e9bfefc3f9c5ad6f7313bb9 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Thu, 6 Feb 2025 10:21:54 +0530 Subject: [PATCH 339/860] [INJIWEB-1203] add annotations back for wellknown_endpoint,authorization_audience & proxy_token_endpoint and remove catch block in getAllIssuers method of issuers as it will be handled in caller method Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- src/main/java/io/mosip/mimoto/dto/IssuerDTO.java | 4 +++- .../io/mosip/mimoto/service/impl/IssuersServiceImpl.java | 7 +------ .../io/mosip/mimoto/controller/IssuersControllerTest.java | 8 ++++---- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java index bf918b08f..b03b87a97 100644 --- a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java @@ -29,17 +29,19 @@ public class IssuerDTO { @Schema(description = "Client Id of the Onboarded Mimoto OIDC Client") String client_id; @URL + @NotBlank @Schema(description = "Wellknown endpoint of the credential issuer") String wellknown_endpoint; @NotBlank @Schema(description = "Redirect URI configured while creating the OIDC Client") String redirect_uri; - @JsonInclude(NON_NULL) + @NotBlank @Schema(description = "Authorization Audience for retrieving Token from token endpoint") String authorization_audience; @Schema(description = "Mimoto Token Endpoint Fetching the Token From Authorization Server with Client Assertion") String token_endpoint; @URL + @NotBlank @Schema(description = "Token Endpoint for Fetching the Token From Authorization Server") String proxy_token_endpoint; @NotBlank diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index b26df75f2..fc349682a 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -80,18 +80,13 @@ private IssuersDTO getFilteredIssuers(IssuersDTO issuersDTO, String search) { @Override public IssuersDTO getAllIssuers() throws ApiNotAccessibleException, IOException { - IssuersDTO issuersDTO; String issuersConfigJsonValue = utilities.getIssuersConfigJsonValue(); if (issuersConfigJsonValue == null) { throw new ApiNotAccessibleException(); } - try { - issuersDTO = objectMapper.readValue(issuersConfigJsonValue, IssuersDTO.class); - } catch (Exception e) { - throw e; - } + issuersDTO = objectMapper.readValue(issuersConfigJsonValue, IssuersDTO.class); return issuersDTO; } diff --git a/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java b/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java index 66a62a169..83bdf13e3 100644 --- a/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java @@ -92,13 +92,13 @@ public void getIssuersTestForSearchValueNull() throws Exception { Matchers.hasKey("proxy_token_endpoint"), Matchers.hasKey("token_endpoint"), Matchers.hasKey("credential_issuer_host"), + Matchers.hasKey("authorization_audience"), Matchers.not(Matchers.hasKey("redirect_url")), Matchers.not(Matchers.hasKey("authorization_endpoint")), Matchers.not(Matchers.hasKey("credential_endpoint")), Matchers.not(Matchers.hasKey("credential_audience")), Matchers.not(Matchers.hasKey("additional_headers")), - Matchers.not(Matchers.hasKey("scopes_supported")), - Matchers.not(Matchers.hasKey("authorization_audience")) + Matchers.not(Matchers.hasKey("scopes_supported")) ) ))); @@ -134,14 +134,14 @@ public void getIssuersTestForSomeSearchValue() throws Exception { Matchers.hasKey("wellknown_endpoint"), Matchers.hasKey("proxy_token_endpoint"), Matchers.hasKey("token_endpoint"), + Matchers.hasKey("authorization_audience"), Matchers.hasKey("credential_issuer_host"), Matchers.not(Matchers.hasKey("redirect_url")), Matchers.not(Matchers.hasKey("authorization_endpoint")), Matchers.not(Matchers.hasKey("credential_endpoint")), Matchers.not(Matchers.hasKey("credential_audience")), Matchers.not(Matchers.hasKey("additional_headers")), - Matchers.not(Matchers.hasKey("scopes_supported")), - Matchers.not(Matchers.hasKey("authorization_audience")) + Matchers.not(Matchers.hasKey("scopes_supported")) ) ))); From 5b4a96ddee3227737f09bad0d0d60b7d46293ca0 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Fri, 7 Feb 2025 13:50:26 +0530 Subject: [PATCH 340/860] Update in develop from master branch (#581) * [INJIMOB-1349] add data-share and minio service as part of docker compose Signed-off-by: Abhishek Paul * [MOSIP-38411] rename main to master (#553) Signed-off-by: Chandra Keshav Mishra * [INJIWEB-1349] removed endpoint /issuers/{issuer-id}/credentialTypes Signed-off-by: Gurpreet41082 * [INJIWEB-1349] updated mimoto image in docker file Signed-off-by: Gurpreet41082 * [DSD-7079] Updated action/upload artifact version push-trigger.yml (#559) * [DSD-] Updated action/upload artifact version push-trigger.yml Signed-off-by: Praful Rakhade * Updated push-trigger.yml Signed-off-by: Praful Rakhade --------- Signed-off-by: Praful Rakhade * [INJIWEB-1349] Corrected documentation (#558) Signed-off-by: Gurpreet41082 * [MOSIP-39107] Updated scripts for mimoto installation under injiweb ns (#562) Signed-off-by: Abhi * [MOSIP-39276] saperated helm and deployment script Signed-off-by: techno-467 * [MOSIP-39276] saperated helm and deployment script Signed-off-by: techno-467 * Update values.yaml Signed-off-by: Praful Rakhade * [DSD-7131] injiweb 0.11.0 release Signed-off-by: techno-467 * [DSD-7131] injiweb 0.11.0 release Signed-off-by: techno-467 * [DSD-7131] injiweb 0.11.0 release Signed-off-by: techno-467 * [DSD-7131] injiweb 0.11.0 release Signed-off-by: techno-467 * Updated files which need not to change Signed-off-by: Gurpreet41082 * Reverted partner-onboarded file Signed-off-by: Gurpreet41082 --------- Signed-off-by: Abhishek Paul Signed-off-by: Chandra Keshav Mishra Signed-off-by: Gurpreet41082 Signed-off-by: Praful Rakhade Signed-off-by: Abhi Signed-off-by: techno-467 Co-authored-by: Abhishek Paul Co-authored-by: Chandra Keshav Mishra Co-authored-by: Praful Rakhade Co-authored-by: Abhishek S <127825992+abhishek8shankar@users.noreply.github.com> Co-authored-by: Prafulrakhade --- README.md | 10 ++++------ deploy/config-server/README.md | 2 +- docker-compose/README.md | 4 ++-- helm/mimoto/values.yaml | 2 +- pom.xml | 2 +- 5 files changed, 9 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index f4a55c9e7..176be48e0 100644 --- a/README.md +++ b/README.md @@ -10,12 +10,11 @@ This repository contains source code for backend service of Inji Mobile and Inji ## Build & run (for developers) The project requires JDK 21 ### without docker-compose Build & install -1. Navigate to Utilities file, uncomment the constructor at Line# 81 -2. build the jar +1. build the jar ``` mvn clean install -Dgpg.skip=true -Dmaven.javadoc.skip=true -DskipTests=true ``` -3. Run following command +2. Run following command ``` mvn spring-boot:run -Dspring.profiles.active=local ``` @@ -32,15 +31,14 @@ The project requires JDK 21 ### Install -1. Execute inji-config-server install script +1. Execute config-server install script ``` -cd helm/inji-config-server +cd deploy/config-server ./install.sh ``` * Review values.yaml and make sure git repository parameters are as per your installation. 2. Execute Onboarder install script - ``` cd partner-onboarder ./install.sh diff --git a/deploy/config-server/README.md b/deploy/config-server/README.md index 93515ade4..387f46bec 100755 --- a/deploy/config-server/README.md +++ b/deploy/config-server/README.md @@ -1,7 +1,7 @@ # Config server ## Introduction -Inji-Config server serves all properties required by MOSIP modules. This must be installed before any other MOSIP modules. +Config server serves all properties required by MOSIP modules. This must be installed before any other MOSIP modules. ## Install * Review `values.yaml` and make sure git repository parameters are as per your installation. diff --git a/docker-compose/README.md b/docker-compose/README.md index a782d193f..b19ca73e8 100644 --- a/docker-compose/README.md +++ b/docker-compose/README.md @@ -30,8 +30,8 @@ Refer [here](https://docs.mosip.io/inji/inji-mobile-wallet/customization-overvie 7. Access Apis as * http://localhost:8099/v1/mimoto/allProperties * http://localhost:8099/v1/mimoto/issuers - * http://localhost:8099/v1/mimoto/issuers/Sunbird - * http://localhost:8099/v1/mimoto/issuers/Sunbird/well-known-proxy + * http://localhost:8099/v1/mimoto/issuers/StayProtected + * http://localhost:8099/v1/mimoto/issuers/StayProtected/well-known-proxy Note: diff --git a/helm/mimoto/values.yaml b/helm/mimoto/values.yaml index f110e5158..3a0f132de 100644 --- a/helm/mimoto/values.yaml +++ b/helm/mimoto/values.yaml @@ -246,7 +246,7 @@ extraEnvVars: [] ## extraEnvVarsCM: - global - - inji-config-server-share + - config-server-share - artifactory-share ## Secret with extra environment variables diff --git a/pom.xml b/pom.xml index 56ddd951a..209a3e86b 100644 --- a/pom.xml +++ b/pom.xml @@ -142,7 +142,7 @@ io.mosip vcverifier-jar - 1.1.0-SNAPSHOT + 1.1.0-beta.1 io.micrometer From 99cfe240d69e469010ecf53b2e6d302a5c1dfd4c Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Fri, 7 Feb 2025 13:54:45 +0530 Subject: [PATCH 341/860] Injiweb 1246 : changes to support new templates where position of keys needs to be fixed (#580) * [INJIWEB-1246] Files changes for new template Signed-off-by: Gurpreet41082 * [INJIWEB-1246] Updated logic with correct locale Signed-off-by: Gurpreet41082 * Remove mosip and insurance customised templates from the repository Signed-off-by: Gurpreet41082 * [INJIWEB-1246] updated url of user-icon file Signed-off-by: Gurpreet41082 --------- Signed-off-by: Gurpreet41082 --- .../service/impl/CredentialServiceImpl.java | 87 ++++++++++++++----- .../io/mosip/mimoto/util/LocaleUtils.java | 20 +++++ .../java/io/mosip/mimoto/util/Utilities.java | 12 ++- .../templates/credential-template.html | 34 +++++--- 4 files changed, 119 insertions(+), 34 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/util/LocaleUtils.java diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java index 478d78563..858e42645 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java @@ -21,6 +21,7 @@ import io.mosip.mimoto.service.IdpService; import io.mosip.mimoto.service.IssuersService; import io.mosip.mimoto.util.JoseUtil; +import io.mosip.mimoto.util.LocaleUtils; import io.mosip.mimoto.util.RestApiClient; import io.mosip.mimoto.util.Utilities; import io.mosip.pixelpass.PixelPass; @@ -48,6 +49,7 @@ import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.*; +import java.util.stream.Collectors; import static io.mosip.mimoto.exception.ErrorConstants.*; @@ -131,7 +133,7 @@ public ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String cred boolean verificationStatus = issuerId.toLowerCase().contains("mock") || verifyCredential(vcCredentialResponse); if (verificationStatus) { String dataShareUrl = QRCodeType.OnlineSharing.equals(issuerDTO.getQr_code_type()) ? dataShareService.storeDataInDataShare(objectMapper.writeValueAsString(vcCredentialResponse), credentialValidity) : ""; - return generatePdfForVerifiableCredentials(vcCredentialResponse, issuerDTO, credentialsSupportedResponse, dataShareUrl, credentialValidity, locale); + return generatePdfForVerifiableCredentials(credentialType, vcCredentialResponse, issuerDTO, credentialsSupportedResponse, dataShareUrl, credentialValidity, locale); } throw new VCVerificationException(SIGNATURE_VERIFICATION_EXCEPTION.getErrorCode(), SIGNATURE_VERIFICATION_EXCEPTION.getErrorMessage()); @@ -160,10 +162,10 @@ public VCCredentialRequest generateVCCredentialRequest(IssuerDTO issuerDTO, Cred .build(); } - public ByteArrayInputStream generatePdfForVerifiableCredentials(VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String dataShareUrl, String credentialValidity, String locale) throws Exception { + public ByteArrayInputStream generatePdfForVerifiableCredentials(String credentialType, VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String dataShareUrl, String credentialValidity, String locale) throws Exception { LinkedHashMap displayProperties = loadDisplayPropertiesFromWellknown(vcCredentialResponse, credentialsSupportedResponse, locale); Map data = getPdfResourceFromVcProperties(displayProperties, credentialsSupportedResponse, vcCredentialResponse, issuerDTO, dataShareUrl, credentialValidity, locale); - return renderVCInCredentialTemplate(data); + return renderVCInCredentialTemplate(data, issuerDTO.getIssuer_id(), credentialType); } public Boolean verifyCredential(VCCredentialResponse vcCredentialResponse) throws VCVerificationException, JsonProcessingException { @@ -185,7 +187,12 @@ private static LinkedHashMap loadDisplayPropertiesFromWellknown( LinkedHashMap vcPropertiesFromWellKnown = new LinkedHashMap<>(); Map credentialSubject = credentialsSupportedResponse.getCredentialDefinition().getCredentialSubject(); credentialSubject.keySet().forEach(VCProperty -> { - Optional filteredResponse = credentialSubject.get(VCProperty).getDisplay().stream().filter(obj -> obj.getLocale().equals(locale)).findFirst(); + Optional filteredResponse = credentialSubject.get(VCProperty) + .getDisplay().stream() + .filter(obj -> + LocaleUtils.matchesLocale(obj.getLocale(), locale) + ) + .findFirst(); String filteredValue = filteredResponse.isPresent() ? filteredResponse.get().getName() : "" ; vcPropertiesFromWellKnown.put(VCProperty, filteredValue); }); @@ -195,7 +202,7 @@ private static LinkedHashMap loadDisplayPropertiesFromWellknown( List fieldProperties = orderProperty == null ? new ArrayList<>(vcPropertiesFromWellKnown.keySet()) : orderProperty; fieldProperties.forEach(vcProperty -> { if(credentialProperties.get(vcProperty) != null) { - displayProperties.put(vcPropertiesFromWellKnown.get(vcProperty), credentialProperties.get(vcProperty)); + displayProperties.put(vcProperty,Map.of(vcPropertiesFromWellKnown.get(vcProperty), credentialProperties.get(vcProperty))); } }); return displayProperties; @@ -213,22 +220,32 @@ private Map getPdfResourceFromVcProperties(LinkedHashMap { - if(entry.getValue() instanceof Map) { - rowProperties.put(entry.getKey(), ((Map) entry.getValue()).get("value")); - } else if(entry.getValue() instanceof List) { - String value = ""; - if( ((List) entry.getValue()).get(0) instanceof String) { - value = ((List) entry.getValue()).stream().reduce((field1, field2) -> field1 + ", " + field2 ).get(); - } else { - Optional> valueMap = ((List>) entry.getValue()).stream().filter(obj -> obj.get("language").equals(locale)).findFirst(); - value = valueMap.isPresent() ? valueMap.get().get("value").toString() : "" ; - } - rowProperties.put(entry.getKey(), value); - } else { - rowProperties.put(entry.getKey(), entry.getValue()); - } - }); + String originalKey = entry.getKey(); + Object entryValue = entry.getValue(); + + // Process the inner map + ((Map) entryValue).entrySet().stream() + .forEachOrdered(innerEntry -> { + String propertyKey = innerEntry.getKey().toString(); + Object currentValue = innerEntry.getValue(); + String value = ""; + + if (currentValue instanceof Map) { + // If the value is a Map, handle it as a Map + value = handleMap(currentValue); + } else if (currentValue instanceof List) { + // If the value is a List, handle it as a List + value = handleList(currentValue); + } else { + // Otherwise, just convert to string + value = currentValue.toString(); + } + + // Put the result into the rowProperties map + rowProperties.put(originalKey, Map.of(propertyKey, value)); + }); + }); String qrCodeImage = QRCodeType.OnlineSharing.equals(issuerDTO.getQr_code_type()) ? constructQRCodeWithAuthorizeRequest(vcCredentialResponse, dataShareUrl) : QRCodeType.EmbeddedVC.equals(issuerDTO.getQr_code_type()) ? constructQRCodeWithVCData(vcCredentialResponse) : ""; data.put("qrCodeImage", qrCodeImage); @@ -243,9 +260,35 @@ private Map getPdfResourceFromVcProperties(LinkedHashMap castedList = (List) list; + if (castedList.isEmpty()) return ""; + if (castedList.get(0) instanceof String) { + return castedList.stream().map(String.class::cast).collect(Collectors.joining(", ")); + } else if (castedList.get(0) instanceof Map) { + return ((List>) castedList).stream() + .filter(obj -> obj.containsKey("language")) + .map(obj -> obj.get("value").toString()) + .findFirst() + .orElse(""); + } + } + return ""; + } + + private String handleMap(Object map) { + if (map instanceof Map) { + return Optional.ofNullable(((Map) map).get("value")) + .map(Object::toString) + .orElse(""); + } + return ""; + } + @NotNull - private ByteArrayInputStream renderVCInCredentialTemplate(Map data) throws IOException { - String credentialTemplate = utilities.getCredentialSupportedTemplateString(); + private ByteArrayInputStream renderVCInCredentialTemplate(Map data, String issuerId, String credentialType) throws IOException { + String credentialTemplate = utilities.getCredentialSupportedTemplateString(issuerId, credentialType); Properties props = new Properties(); props.setProperty("resource.loader", "class"); props.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); diff --git a/src/main/java/io/mosip/mimoto/util/LocaleUtils.java b/src/main/java/io/mosip/mimoto/util/LocaleUtils.java new file mode 100644 index 000000000..b1fe6deee --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/LocaleUtils.java @@ -0,0 +1,20 @@ +package io.mosip.mimoto.util; + +import java.util.Locale; + +public class LocaleUtils { + // Method to check if the localeString matches the 2-letter or 3-letter code + public static boolean matchesLocale(String localeString1, String localeString2) { + Locale locale1 = Locale.forLanguageTag(localeString1); + + // Check if localeString1 (from the object) matches either the 2-letter or 3-letter code of localeString2 + if (localeString1.length() == 2) { + String iso3Language = locale1.getISO3Language(); // 3-letter code for locale1 + return localeString1.equals(localeString2) || iso3Language.equals(localeString2); + } else if (localeString1.length() == 3) { + String iso2Language = locale1.getLanguage(); // 2-letter code for locale1 + return localeString1.equals(localeString2) || iso2Language.equals(localeString2); + } + return false; + } +} diff --git a/src/main/java/io/mosip/mimoto/util/Utilities.java b/src/main/java/io/mosip/mimoto/util/Utilities.java index 29ffd9d17..b46d8d557 100644 --- a/src/main/java/io/mosip/mimoto/util/Utilities.java +++ b/src/main/java/io/mosip/mimoto/util/Utilities.java @@ -182,11 +182,19 @@ public String getIssuersConfigJsonValue() { public String getTrustedVerifiersJsonValue() { return getJson(trustedVerifiersJsonString, trustedVerifiersPath); } - public String getCredentialSupportedTemplateString() { + public String getCredentialSupportedTemplateString(String issuerId, String credentialType) { + String templateFileName = String.format("%s-%s-template.html", issuerId.toLowerCase(), credentialType.toLowerCase()); if(activeProfile.equals("local")) { + Resource credentialTemplateResource = new ClassPathResource("templates/"+ templateFileName); + try { + return Files.readString(credentialTemplateResource.getFile().toPath()); + } catch (IOException e) { + log.error(ExceptionUtils.getStackTrace(e)); + } return credentialTemplateHtmlString; } - return getJson(credentialTemplateHtmlString,credentialTemplatePath ); + String specificCredentialPDFTemplate = getJson(configServerFileStorageURL, templateFileName); + return !StringUtils.isEmpty(specificCredentialPDFTemplate)? specificCredentialPDFTemplate : getJson(configServerFileStorageURL, credentialTemplatePath); } public static String[] handleExceptionWithErrorCode(Exception exception) { String errorMessage = exception.getMessage(); diff --git a/src/main/resources/templates/credential-template.html b/src/main/resources/templates/credential-template.html index 4632b91c3..3569c81ee 100644 --- a/src/main/resources/templates/credential-template.html +++ b/src/main/resources/templates/credential-template.html @@ -13,7 +13,7 @@
#if (!$face)
- Logo + Logo
#else Logo @@ -22,16 +22,30 @@ Logo
-
- #foreach($entry in $rowProperties.entrySet()) - #if($entry.value) -
-
$entry.key
-
$entry.value
-
- #end - #end + +
+ #foreach($entry in $rowProperties.entrySet()) ## Iterate over the outer map + #if($entry.value) ## Check if the value exists for this entry + #set($nestedMap = $entry.value) ## Get the nested value + #if($nestedMap && $nestedMap.size() > 0) ## Check if nestedMap is a Map with entries + #foreach($nestedEntry in $nestedMap.entrySet()) ## Iterate over the nested map + #if($nestedEntry.value) ## Ensure that there’s a value for this nested entry +
+
$nestedEntry.key
+
$nestedEntry.value
+ #end + #end + #else + ## If the value is not a map, just display it as is +
+
$entry.key
+
$entry.value
+
+ #end + #end + #end +
QR Code From 0f31487ab8114f5425b5810359ef4a7b18443bcb Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 10 Feb 2025 09:52:53 +0530 Subject: [PATCH 342/860] [INJIWEB-1203] log the error message along with the issuer name in issuersValidationConfig Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../java/io/mosip/mimoto/config/IssuersValidationConfig.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java b/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java index 783a81606..307544598 100644 --- a/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java +++ b/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java @@ -62,6 +62,9 @@ public void run(ApplicationArguments args) throws ApiNotAccessibleException, IOE errors.set(new BeanPropertyBindingResult(issuerDTO, "issuerDTO")); validator.validate(issuerDTO, errors.get()); String issuerId = issuerDTO.getIssuer_id(); + if (errors.get() != null && errors.get().hasErrors()) { + log.error("{} for issuer {}: {}", VALIDATION_ERROR_MSG, issuerId, errors.get()); + } String[] tokenEndpointArray = issuerDTO.getToken_endpoint().split("/"); Set currentIssuers = credentialIssuers.get(); if (!currentIssuers.add(issuerId)) { From 3af190a8d0af37a3c6ad7882b338b0f2af426546 Mon Sep 17 00:00:00 2001 From: VSIVAKALYAN <103260988+VSIVAKALYAN@users.noreply.github.com> Date: Mon, 10 Feb 2025 18:40:40 +0530 Subject: [PATCH 343/860] [MOSIP-39658] Update install.sh Signed-off-by: VSIVAKALYAN <103260988+VSIVAKALYAN@users.noreply.github.com> --- partner-onboarder/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/partner-onboarder/install.sh b/partner-onboarder/install.sh index 299f01f00..bdb130dcb 100644 --- a/partner-onboarder/install.sh +++ b/partner-onboarder/install.sh @@ -71,7 +71,7 @@ fi echo "Do you have public domain & valid SSL? (Y/n) " echo "Y: if you have public domain & valid ssl certificate" - echo "n: if you don't have a public domain and a valid SSL certificate. It will add an ssl certificate in onboarder docker. Only recommended in testing env. + echo "n: if you don't have a public domain and a valid SSL certificate. It will add an ssl certificate in onboarder docker. Only recommended in testing env." read -p "" flag if [ -z "$flag" ]; then From 099b5a6732008224abc8f481caf79dd4df63924a Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 10 Feb 2025 02:34:27 +0530 Subject: [PATCH 344/860] [INJIWEB-1429] add test cases for credentialServiceImpl class Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../controller/IssuersControllerTest.java | 8 +- .../mimoto/service/CredentialServiceTest.java | 194 +++++++++++++++++- .../mimoto/service/IssuersServiceTest.java | 2 +- .../io/mosip/mimoto/util/TestUtilities.java | 54 ++++- .../responses/expectedIssuerConfig.json | 6 +- 5 files changed, 244 insertions(+), 20 deletions(-) diff --git a/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java b/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java index 83bdf13e3..63fac58ee 100644 --- a/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java @@ -180,7 +180,7 @@ public void getIssuerDetailsTestForInvalidIssuerId() throws Exception { public void getIssuerWellknownTest() throws Exception { String issuerId = "issuer1"; String expectedCredentialIssuerWellknownResponse = getExpectedWellKnownJson(); - CredentialIssuerConfigurationResponse expectedCredentialIssuerConfigurationResponse = getCredentialIssuerConfigurationResponseDto(issuerId, Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1")), List.of()); + CredentialIssuerConfigurationResponse expectedCredentialIssuerConfigurationResponse = getCredentialIssuerConfigurationResponseDto(issuerId, "CredentialType1", List.of()); Mockito.when(issuersService.getIssuerConfiguration(issuerId)).thenReturn(expectedCredentialIssuerConfigurationResponse); String actualResponse = mockMvc.perform(get("/issuers/" + issuerId + "/well-known-proxy").accept(MediaType.APPLICATION_JSON_VALUE)) @@ -206,11 +206,7 @@ public void getIssuerConfigurationTest() throws Exception { expectedJsonString = expectedJsonString.substring(1); } String finalExpectedJsonString = expectedJsonString; - CredentialIssuerConfigurationResponse expectedResponse = getCredentialIssuerConfigurationResponseDto( - issuerId, - Map.of("CredentialType1", getCredentialSupportedResponse("Credential1")), - List.of() - ); + CredentialIssuerConfigurationResponse expectedResponse = getCredentialIssuerConfigurationResponseDto(issuerId, "CredentialType1", List.of()); Mockito.when(issuersService.getIssuerConfiguration(issuerId)).thenReturn(expectedResponse); mockMvc.perform(get("/issuers/" + issuerId + "/configuration") diff --git a/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java index 2d75ab5fb..0d3eee0dd 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java @@ -2,46 +2,116 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; -import io.mosip.mimoto.exception.VCVerificationException; +import io.mosip.mimoto.dto.IssuerDTO; +import io.mosip.mimoto.dto.idp.TokenResponseDTO; +import io.mosip.mimoto.dto.mimoto.*; +import io.mosip.mimoto.exception.*; +import io.mosip.mimoto.model.QRCodeType; import io.mosip.mimoto.service.impl.CredentialServiceImpl; +import io.mosip.mimoto.service.impl.IdpServiceImpl; +import io.mosip.mimoto.service.impl.IssuersServiceImpl; +import io.mosip.mimoto.util.JoseUtil; +import io.mosip.mimoto.util.RestApiClient; import io.mosip.mimoto.util.TestUtilities; +import io.mosip.mimoto.util.Utilities; import io.mosip.vercred.vcverifier.CredentialsVerifier; import io.mosip.vercred.vcverifier.constants.CredentialFormat; import io.mosip.vercred.vcverifier.data.VerificationResult; +import lombok.extern.slf4j.Slf4j; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; -import org.junit.Ignore; +import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; +import org.mockito.Spy; import org.mockito.junit.MockitoJUnitRunner; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.HttpEntity; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestTemplate; +import java.io.ByteArrayInputStream; import java.io.StringWriter; import java.util.HashMap; +import java.util.List; import java.util.Map; -import static org.junit.Assert.assertTrue; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; +import static io.mosip.mimoto.util.TestUtilities.*; +import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.doReturn; @RunWith(MockitoJUnitRunner.class) @SpringBootTest +@Slf4j public class CredentialServiceTest { @Mock CredentialsVerifier credentialsVerifier; @Mock ObjectMapper objectMapper; + @Spy @InjectMocks CredentialServiceImpl credentialService = new CredentialServiceImpl(); + @Mock + IssuersServiceImpl issuersService; + + @Mock + RestTemplate restTemplate; + + @Mock + IdpServiceImpl idpService; + + @Mock + RestApiClient restApiClient; + + @Mock + JoseUtil joseUtil; + + @Mock + Utilities utilities; + + private Map tokenRequestParams = Map.of( + "grant_type", "client_credentials", + "client_id", "test-client" + ); + + TokenResponseDTO expectedTokenResponse; + String tokenEndpoint, issuerId; + IssuerDTO issuerDTO; + HttpEntity> mockRequest; + CredentialIssuerConfigurationResponse issuerConfig; + + @Before + public void setUp() throws Exception { + issuerId = "issuer1"; + issuerDTO = getIssuerConfigDTO(issuerId); + issuerConfig = getCredentialIssuerConfigurationResponseDto(issuerId, "CredentialType1", List.of()); + + Mockito.when(issuersService.getIssuerDetails(issuerId)).thenReturn(issuerDTO); + Mockito.when(issuersService.getIssuerConfiguration(issuerId)).thenReturn(issuerConfig); + + tokenEndpoint = issuerConfig.getAuthorizationServerWellKnownResponse().getTokenEndpoint(); + mockRequest = new HttpEntity<>(new LinkedMultiValueMap<>(Map.of( + "grant_type", List.of("client_credentials"), + "client_id", List.of("test-client") + ))); + expectedTokenResponse = getTokenResponseDTO(); + + Mockito.when(idpService.constructGetTokenRequest(tokenRequestParams, issuerDTO, tokenEndpoint)) + .thenReturn(mockRequest); + Mockito.when(idpService.getTokenEndpoint(issuerConfig)) + .thenReturn(tokenEndpoint); + Mockito.when(restTemplate.postForObject(tokenEndpoint, mockRequest, TokenResponseDTO.class)) + .thenReturn(expectedTokenResponse); + } @Test - @Ignore public void shouldParseHtmlStringToDocument() { String htmlContent = "

$message

"; Map data = new HashMap<>(); @@ -56,7 +126,6 @@ public void shouldParseHtmlStringToDocument() { @Test - @Ignore public void shouldReturnTrueIfAValidCredentialIsPassedForVerification() throws VCVerificationException, JsonProcessingException { VCCredentialResponse vc = TestUtilities.getVCCredentialResponseDTO("ed25519Signature2020"); VerificationResult verificationResult = new VerificationResult(true, "", ""); @@ -65,4 +134,113 @@ public void shouldReturnTrueIfAValidCredentialIsPassedForVerification() throws V Boolean verificationStatus = credentialService.verifyCredential(vc); assertTrue(verificationStatus); } + + @Test + public void shouldReturnTokenResponseForValidTokenEndpoint() throws Exception { + + TokenResponseDTO actualTokenResponse = credentialService.getTokenResponse(tokenRequestParams, "issuer1"); + + assertEquals(expectedTokenResponse, actualTokenResponse); + } + + @Test + public void shouldThrowExceptionIfResponseIsNullWhenFetchingTokenResponse() throws Exception { + Mockito.when(restTemplate.postForObject(tokenEndpoint, mockRequest, TokenResponseDTO.class)) + .thenReturn(null); + + IdpException actualException = assertThrows(IdpException.class, () -> { + credentialService.getTokenResponse(tokenRequestParams, "issuer1"); + }); + + assertEquals("RESIDENT-APP-034 --> Exception occurred while performing the authorization", actualException.getMessage()); + } + + @Test + public void shouldReturnVCCredentialWhenCallingCredentialEndpointWithCredentialRequest() { + CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupportedResponse("CredentialType1"); + CredentialIssuerWellKnownResponse issuerWellKnownResponse = getCredentialIssuerWellKnownResponseDto(issuerId, Map.of("CredentialType1", credentialsSupportedResponse)); + VCCredentialRequest vcCredentialRequest = getVCCredentialRequestDTO(); + VCCredentialResponse expectedCredentialResponse = getVCCredentialResponseDTO("RSASignature2020"); + Mockito.when(restApiClient.postApi(any(), any(), + any(), any(), any())).thenReturn(expectedCredentialResponse); + + VCCredentialResponse actualCredentialResponse = credentialService.downloadCredential(issuerWellKnownResponse.getCredentialEndPoint(), vcCredentialRequest, "test-access-token"); + + assertEquals(expectedCredentialResponse, actualCredentialResponse); + } + + @Test + public void shouldGenerateVCCredentialRequestForProvidedIssuerAndCredentialType() throws Exception { + CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupportedResponse("CredentialType1"); + CredentialIssuerWellKnownResponse issuerWellKnownResponse = getCredentialIssuerWellKnownResponseDto(issuerId, Map.of("CredentialType1", credentialsSupportedResponse)); + VCCredentialRequest expectedVCCredentialRequest = getVCCredentialRequestDTO(); + Mockito.when(joseUtil.generateJwt(any(String.class), any(String.class), any(String.class))).thenReturn("jwt"); + + VCCredentialRequest actualVCCredentialRequest = credentialService.generateVCCredentialRequest(issuerDTO, issuerWellKnownResponse, credentialsSupportedResponse, "test-access-token"); + + assertEquals(expectedVCCredentialRequest, actualVCCredentialRequest); + } + + @Test + public void shouldThrowExceptionWhenInvalidAlgoIsProvidedForGeneratingJWTDuringCredentialRequestGeneration() throws Exception { + CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupportedResponse("CredentialType1"); + CredentialIssuerWellKnownResponse issuerWellKnownResponse = getCredentialIssuerWellKnownResponseDto(issuerId, Map.of("CredentialType1", credentialsSupportedResponse)); + Mockito.when(joseUtil.generateJwt(any(String.class), any(String.class), any(String.class))).thenThrow(new AssertionError("Unexpected algorithm type: dfs")); + + AssertionError actualError = assertThrows(AssertionError.class, () -> { + credentialService.generateVCCredentialRequest(issuerDTO, issuerWellKnownResponse, credentialsSupportedResponse, "test-access-token"); + }); + + assertEquals("Unexpected algorithm type: dfs", actualError.getMessage()); + } + + @Test + public void shouldThrowExceptionIfDownloadedVCSignatureVerificationFailed() throws Exception { + Mockito.when(issuersService.getIssuerDetails(issuerId)).thenReturn(issuerDTO); + Mockito.when(issuersService.getIssuerConfiguration(issuerId)).thenReturn(issuerConfig); + doReturn(getVCCredentialRequestDTO()).when(credentialService).generateVCCredentialRequest( + any(IssuerDTO.class), + any(CredentialIssuerWellKnownResponse.class), + any(CredentialsSupportedResponse.class), + any(String.class) + ); + VCCredentialResponse vcCredentialResponse = getVCCredentialResponseDTO("CredentialType1"); + doReturn(vcCredentialResponse).when(credentialService).downloadCredential(any(String.class), + any(VCCredentialRequest.class), + any(String.class)); + doReturn(false).when(credentialService).verifyCredential(vcCredentialResponse); + + VCVerificationException actualException = assertThrows(VCVerificationException.class, () -> + credentialService.downloadCredentialAsPDF(issuerId, "CredentialType1", expectedTokenResponse, "once", "en")); + + assertEquals("signature_verification_failed --> Error while doing signature verification", actualException.getMessage()); + } + + @Test + public void shouldReturnDownloadedVCAsPDFIfSignatureVerificationIsSuccessful() throws Exception { + Mockito.when(issuersService.getIssuerDetails(issuerId)).thenReturn(issuerDTO); + Mockito.when(issuersService.getIssuerConfiguration(issuerId)).thenReturn(issuerConfig); + doReturn(getVCCredentialRequestDTO()).when(credentialService).generateVCCredentialRequest( + any(IssuerDTO.class), + any(CredentialIssuerWellKnownResponse.class), + any(CredentialsSupportedResponse.class), + any(String.class) + ); + VCCredentialResponse vcCredentialResponse = getVCCredentialResponseDTO("CredentialType1"); + doReturn(vcCredentialResponse).when(credentialService).downloadCredential(any(String.class), + any(VCCredentialRequest.class), + any(String.class)); + doReturn(true).when(credentialService).verifyCredential(vcCredentialResponse); + issuerDTO.setQr_code_type(QRCodeType.None); + Mockito.when(utilities.getCredentialSupportedTemplateString(issuerDTO.getIssuer_id(), "CredentialType1")).thenReturn("

PDF

"); + ByteArrayInputStream expectedPDFByteArray = generatePdfFromHTML(); + + ByteArrayInputStream actualPDFByteArray = + credentialService.downloadCredentialAsPDF(issuerId, "CredentialType1", expectedTokenResponse, "once", "en"); + + String expectedText = extractTextFromPdf(expectedPDFByteArray); + String actualText = extractTextFromPdf(actualPDFByteArray); + + assertEquals(expectedText, actualText); + } } diff --git a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java index d09831e6a..b95039dfe 100644 --- a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java @@ -81,7 +81,7 @@ public void setUp() throws Exception { Mockito.when(issuerWellknownService.getWellknown(credentialIssuerHostUrl)) .thenReturn(expectedCredentialIssuerWellKnownResponse); - expectedCredentialIssuerConfigurationResponse = getCredentialIssuerConfigurationResponseDto(issuerId, Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1")), List.of()); + expectedCredentialIssuerConfigurationResponse = getCredentialIssuerConfigurationResponseDto(issuerId, "CredentialType1", List.of()); Mockito.when(authorizationServerService.getWellknown(authServerWellknownUrl)).thenReturn(expectedCredentialIssuerConfigurationResponse.getAuthorizationServerWellKnownResponse()); } diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index ab2ccd6be..eadec8e38 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -2,6 +2,12 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import com.itextpdf.html2pdf.ConverterProperties; +import com.itextpdf.html2pdf.HtmlConverter; +import com.itextpdf.html2pdf.resolver.font.DefaultFontProvider; +import com.itextpdf.kernel.pdf.PdfWriter; +import com.itextpdf.kernel.pdf.PdfDocument; +import com.itextpdf.kernel.pdf.PdfReader; import io.mosip.mimoto.dto.*; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.dto.openid.VerifierDTO; @@ -10,6 +16,9 @@ import io.mosip.mimoto.dto.openid.datashare.DataShareResponseWrapperDTO; import io.mosip.mimoto.dto.openid.presentation.*; import org.springframework.util.ResourceUtils; +import java.io.InputStream; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.io.IOException; import java.nio.file.Files; import java.util.*; @@ -17,6 +26,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import com.itextpdf.kernel.pdf.canvas.parser.PdfTextExtractor; public class TestUtilities { @@ -91,8 +101,9 @@ public static CredentialIssuerWellKnownResponse getCredentialIssuerWellKnownResp return credentialIssuerWellKnownResponse; } - public static CredentialIssuerConfigurationResponse getCredentialIssuerConfigurationResponseDto(String issuerName, Map credentialsSupportedResponses, List nullFields) { + public static CredentialIssuerConfigurationResponse getCredentialIssuerConfigurationResponseDto(String issuerName, String credentialType, List nullFields) { AuthorizationServerWellKnownResponse authorizationServerWellKnownResponse = getAuthServerWellknownResponseDto(nullFields); + Map credentialsSupportedResponses = Map.of(credentialType, getCredentialSupportedResponse(credentialType)); CredentialIssuerConfigurationResponse credentialIssuerConfigurationResponse = new CredentialIssuerConfigurationResponse("https://dev/" + issuerName, List.of("https://auth-server.env.net"), "https://dev/issuance/credential", credentialsSupportedResponses, authorizationServerWellKnownResponse); return credentialIssuerConfigurationResponse; } @@ -167,6 +178,30 @@ public static String getExpectedIssuersConfigJson() throws IOException { return new String(Files.readAllBytes(ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX + "responses/expectedIssuerConfig.json").toPath())).trim(); } + public static ByteArrayInputStream generatePdfFromHTML() { + String htmlContent = "

PDF

"; + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + PdfWriter pdfwriter = new PdfWriter(outputStream); + DefaultFontProvider defaultFont = new DefaultFontProvider(true, false, false); + ConverterProperties converterProperties = new ConverterProperties(); + converterProperties.setFontProvider(defaultFont); + HtmlConverter.convertToPdf(htmlContent, pdfwriter, converterProperties); + + return new ByteArrayInputStream(outputStream.toByteArray()); + } + + public static String extractTextFromPdf(InputStream pdfStream) throws IOException { + PdfDocument pdfDocument = new PdfDocument(new PdfReader(pdfStream)); + StringBuilder text = new StringBuilder(); + + for (int i = 1; i <= pdfDocument.getNumberOfPages(); i++) { + text.append(PdfTextExtractor.getTextFromPage(pdfDocument.getPage(i))); + } + + pdfDocument.close(); + return text.toString().trim(); + } + public static PresentationRequestDTO getPresentationRequestDTO() { return PresentationRequestDTO.builder() .presentationDefinition(getPresentationDefinitionDTO()) @@ -187,7 +222,7 @@ public static VCCredentialProperties getVCCredentialPropertiesDTO(String type) { typeList.add("VCTypeCredential"); Map credentialSubject = new HashMap<>(); - credentialSubject.put("key1", "value1"); + credentialSubject.put("name", "Name1"); credentialSubject.put("key2", "value2"); VCCredentialResponseProof vcCredentialResponseProof = VCCredentialResponseProof.builder() @@ -208,6 +243,21 @@ public static VCCredentialProperties getVCCredentialPropertiesDTO(String type) { .credentialSubject(credentialSubject).build(); } + public static VCCredentialRequest getVCCredentialRequestDTO() { + CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupportedResponse("CredentialType1"); + return VCCredentialRequest.builder() + .format(credentialsSupportedResponse.getFormat()) + .proof(VCCredentialRequestProof.builder() + .proofType(credentialsSupportedResponse.getProofTypesSupported().keySet().stream().findFirst().get()) + .jwt("jwt") + .build()) + .credentialDefinition(VCCredentialDefinition.builder() + .type(credentialsSupportedResponse.getCredentialDefinition().getType()) + .context(List.of("https://www.w3.org/2018/credentials/v1")) + .build()) + .build(); + } + public static VCCredentialResponse getVCCredentialResponseDTO(String type) { return VCCredentialResponse.builder() .credential(getVCCredentialPropertiesDTO(type)) diff --git a/src/test/resources/responses/expectedIssuerConfig.json b/src/test/resources/responses/expectedIssuerConfig.json index 0780b4a78..b7cc77425 100644 --- a/src/test/resources/responses/expectedIssuerConfig.json +++ b/src/test/resources/responses/expectedIssuerConfig.json @@ -7,12 +7,12 @@ "credential_configurations_supported": { "CredentialType1": { "format": "ldp_vc", - "scope": "Credential1_vc_ldp", + "scope": "CredentialType1_vc_ldp", "proof_types_supported": {}, "credential_definition": { "type": [ "VerifiableCredential", - "Credential1" + "CredentialType1" ], "credentialSubject": { "name": { @@ -27,7 +27,7 @@ }, "display": [ { - "name": "Credential1", + "name": "CredentialType1", "locale": "en", "logo": { "url": "https://logo", From 817e7c3384a8e8ce7cf47e3ab708e1d035075fa9 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 10 Feb 2025 17:27:26 +0530 Subject: [PATCH 345/860] [INJIWEB-1429] add test case for error scenario of verifiers endpoint Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../mimoto/controller/VerifiersControllerTest.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/test/java/io/mosip/mimoto/controller/VerifiersControllerTest.java b/src/test/java/io/mosip/mimoto/controller/VerifiersControllerTest.java index 24021a4a9..7ca2ce7b3 100644 --- a/src/test/java/io/mosip/mimoto/controller/VerifiersControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/VerifiersControllerTest.java @@ -2,6 +2,7 @@ import io.mosip.mimoto.dto.openid.VerifierDTO; import io.mosip.mimoto.dto.openid.VerifiersDTO; +import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.service.impl.VerifierServiceImpl; import org.hamcrest.Matchers; import org.junit.Test; @@ -59,4 +60,15 @@ public void getAllTrustedVerifiers() throws Exception { ) ))); } + + @Test + public void shouldReturnEmptyResponseIfAnyErrorOccurredWhileFetchingVerifiersList() throws Exception { + Mockito.when(verifierService.getTrustedVerifiers()) + .thenThrow(new ApiNotAccessibleException()); + + mockMvc.perform(get("/verifiers").accept(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.response.verifiers").isArray()) + .andExpect(jsonPath("$.response.verifiers").isEmpty()); + } } From 1f10a1a02a24d2808bef5cb8e8bf8bb915ae8824 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 10 Feb 2025 18:32:51 +0530 Subject: [PATCH 346/860] [INJIWEB-1429] write test cases for idpServiceImpl class Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../service/CredentialShareServiceTest.java | 1 - .../mosip/mimoto/service/IdpServiceTest.java | 97 +++++++++++++++++++ 2 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 src/test/java/io/mosip/mimoto/service/IdpServiceTest.java diff --git a/src/test/java/io/mosip/mimoto/service/CredentialShareServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialShareServiceTest.java index d96a80957..6d913ff78 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialShareServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialShareServiceTest.java @@ -1,7 +1,6 @@ package io.mosip.mimoto.service; import com.google.common.collect.Lists; -import io.mosip.biometrics.util.CommonUtil; import io.mosip.kernel.biometrics.constant.BiometricType; import io.mosip.kernel.biometrics.entities.BDBInfo; import io.mosip.kernel.biometrics.entities.BIR; diff --git a/src/test/java/io/mosip/mimoto/service/IdpServiceTest.java b/src/test/java/io/mosip/mimoto/service/IdpServiceTest.java new file mode 100644 index 000000000..80dc1e08a --- /dev/null +++ b/src/test/java/io/mosip/mimoto/service/IdpServiceTest.java @@ -0,0 +1,97 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.dto.IssuerDTO; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerConfigurationResponse; +import io.mosip.mimoto.exception.IssuerOnboardingException; +import io.mosip.mimoto.service.impl.IdpServiceImpl; +import io.mosip.mimoto.util.JoseUtil; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.util.MultiValueMap; + +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; +import static io.mosip.mimoto.util.TestUtilities.*; + +@RunWith(MockitoJUnitRunner.class) +public class IdpServiceTest { + @InjectMocks + private IdpServiceImpl idpService; + + @Mock + JoseUtil joseUtil; + + private IssuerDTO issuerDTO; + private Map params; + private final String authorizationAudience = "https://example.com/auth"; + + @Before + public void setUp() throws IOException { + issuerDTO = new IssuerDTO(); + issuerDTO.setClient_id("client123"); + issuerDTO.setClient_alias("clientAlias"); + + params = new HashMap<>(); + params.put("code", "sampleCode"); + params.put("grant_type", "authorization_code"); + params.put("redirect_uri", "https://myapp.com/callback"); + params.put("code_verifier", "verifier123"); + } + + @Test + public void shouldConstructTokenRequestForTheValidIssuerAndParams() throws Exception { + when(joseUtil.getJWT(eq("client123"), any(), any(), eq("clientAlias"), any(), eq(authorizationAudience))) + .thenReturn("jwt-token"); + + HttpEntity> httpEntity = + idpService.constructGetTokenRequest(params, issuerDTO, authorizationAudience); + + HttpHeaders headers = httpEntity.getHeaders(); + MultiValueMap body = httpEntity.getBody(); + assertEquals(MediaType.APPLICATION_FORM_URLENCODED, headers.getContentType()); + assertNotNull(body); + assertAll( + () -> assertEquals("sampleCode", body.getFirst("code")), + () -> assertEquals("client123", body.getFirst("client_id")), + () -> assertEquals("authorization_code", body.getFirst("grant_type")), + () -> assertEquals("https://myapp.com/callback", body.getFirst("redirect_uri")), + () -> assertEquals("jwt-token", body.getFirst("client_assertion")), + () -> assertEquals("verifier123", body.getFirst("code_verifier")) + ); + } + + @Test + public void shouldThrowExceptionIfThereIsAnyErrorOccurredWhileFetchingP12File() throws IOException { + String expectedExceptionMsg = "RESIDENT-APP-037 --> Private Key Entry is Missing for the alias clientAlias"; + when(joseUtil.getJWT(eq("client123"), any(), any(), eq("clientAlias"), any(), eq(authorizationAudience))) + .thenThrow(new IssuerOnboardingException("Private Key Entry is Missing for the alias clientAlias")); + + IssuerOnboardingException actualException = assertThrows(IssuerOnboardingException.class, () -> + idpService.constructGetTokenRequest(params, issuerDTO, authorizationAudience)); + + assertEquals(expectedExceptionMsg, actualException.getMessage()); + } + + @Test + public void shouldReturnTokenEndpointFromCredentialIssuerConfigurationResponse() { + CredentialIssuerConfigurationResponse credentialIssuerConfigurationResponse = + getCredentialIssuerConfigurationResponseDto("issuer1", "CredentialType1", List.of()); + String expectedTokenEndpoint = "https://dev/token"; + + String actualTokenEndpoint = idpService.getTokenEndpoint(credentialIssuerConfigurationResponse); + + assertEquals(expectedTokenEndpoint, actualTokenEndpoint); + } +} \ No newline at end of file From 2f7b74a26577703b87bbbd06140a4b2d4de4fa22 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 10 Feb 2025 20:25:19 +0530 Subject: [PATCH 347/860] [INJIWEB-1429] add test case for verification failed scenario Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../mimoto/service/CredentialServiceTest.java | 15 +++++++++++ .../io/mosip/mimoto/util/TestUtilities.java | 25 +++++++++++++------ 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java index 0d3eee0dd..135f86283 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java @@ -135,6 +135,21 @@ public void shouldReturnTrueIfAValidCredentialIsPassedForVerification() throws V assertTrue(verificationStatus); } + @Test + public void shouldThrowExceptionIfInvalidCredentialIsPassedForVerification() throws VCVerificationException, JsonProcessingException { + VCCredentialResponse vc = TestUtilities.getVCCredentialResponseDTO("ed25519Signature2020"); + VerificationResult verificationResult = new VerificationResult(false, "Verification failed for the provided credentials", "Verification Failed!"); + Mockito.when(credentialsVerifier.verify(any(String.class), eq(CredentialFormat.LDP_VC))).thenReturn(verificationResult); + Mockito.when(objectMapper.writeValueAsString(vc.getCredential())).thenReturn("vc"); + String expetcedExceptionMsg = "verification failed! --> Verification failed for the provided credentials"; + + VCVerificationException actualException = assertThrows(VCVerificationException.class, () -> + credentialService.verifyCredential(vc) + ); + + assertEquals(expetcedExceptionMsg,actualException.getMessage()); + } + @Test public void shouldReturnTokenResponseForValidTokenEndpoint() throws Exception { diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index eadec8e38..a4354a41c 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -41,14 +41,22 @@ public static CredentialsSupportedResponse getCredentialSupportedResponse(String credentialSupportedDisplay.setLocale("en"); credentialSupportedDisplay.setTextColor("#FFFFFF"); credentialSupportedDisplay.setBackgroundColor("#B34622"); - CredentialIssuerDisplayResponse credentialIssuerDisplayResponse = new CredentialIssuerDisplayResponse(); - credentialIssuerDisplayResponse.setName("Given Name"); - credentialIssuerDisplayResponse.setLocale("en"); - CredentialDisplayResponseDto credentialDisplayResponseDto = new CredentialDisplayResponseDto(); - credentialDisplayResponseDto.setDisplay(Collections.singletonList(credentialIssuerDisplayResponse)); + + CredentialIssuerDisplayResponse credentialIssuerDisplayResponseForName = new CredentialIssuerDisplayResponse(); + credentialIssuerDisplayResponseForName.setName("Given Name"); + credentialIssuerDisplayResponseForName.setLocale("en"); + CredentialDisplayResponseDto credentialDisplayResponseDtoForName = new CredentialDisplayResponseDto(); + credentialDisplayResponseDtoForName.setDisplay(List.of(credentialIssuerDisplayResponseForName)); + + CredentialIssuerDisplayResponse credentialIssuerDisplayResponseForEmail = new CredentialIssuerDisplayResponse(); + credentialIssuerDisplayResponseForEmail.setName("Given Email"); + credentialIssuerDisplayResponseForEmail.setLocale("pt"); + CredentialDisplayResponseDto credentialDisplayResponseDtoForEmail = new CredentialDisplayResponseDto(); + credentialDisplayResponseDtoForEmail.setDisplay(List.of(credentialIssuerDisplayResponseForEmail)); + CredentialDefinitionResponseDto credentialDefinitionResponseDto = new CredentialDefinitionResponseDto(); credentialDefinitionResponseDto.setType(List.of("VerifiableCredential", credentialSupportedName)); - credentialDefinitionResponseDto.setCredentialSubject(Map.of("name", credentialDisplayResponseDto)); + credentialDefinitionResponseDto.setCredentialSubject(Map.of("name", credentialDisplayResponseDtoForName,"email", credentialDisplayResponseDtoForEmail)); CredentialsSupportedResponse credentialsSupportedResponse = new CredentialsSupportedResponse(); credentialsSupportedResponse.setFormat("ldp_vc"); credentialsSupportedResponse.setScope(credentialSupportedName + "_vc_ldp"); @@ -222,8 +230,9 @@ public static VCCredentialProperties getVCCredentialPropertiesDTO(String type) { typeList.add("VCTypeCredential"); Map credentialSubject = new HashMap<>(); - credentialSubject.put("name", "Name1"); - credentialSubject.put("key2", "value2"); + + credentialSubject.put("name", Map.of("name", "full name", "locale", "en")); + credentialSubject.put("email", Map.of("locale", "en")); VCCredentialResponseProof vcCredentialResponseProof = VCCredentialResponseProof.builder() .type(type) From 8fdd2d99ac329766f91174e61a435d63589f914d Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 10 Feb 2025 22:39:41 +0530 Subject: [PATCH 348/860] [INJIWEB-1429] add and update test cases for idpController Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- pom.xml | 3 +- .../mimoto/controller/IdpController.java | 4 +- .../mimoto/controller/IdpControllerTest.java | 72 ++++++++++++++++++- 3 files changed, 72 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index 209a3e86b..565e7b81a 100644 --- a/pom.xml +++ b/pom.xml @@ -61,8 +61,7 @@ 4.13.1 - 2.23.4 - + 5.15.2 1.2.3 diff --git a/src/main/java/io/mosip/mimoto/controller/IdpController.java b/src/main/java/io/mosip/mimoto/controller/IdpController.java index da31359cb..e24d8d206 100644 --- a/src/main/java/io/mosip/mimoto/controller/IdpController.java +++ b/src/main/java/io/mosip/mimoto/controller/IdpController.java @@ -67,8 +67,8 @@ public ResponseEntity> otpRequest(@Valid requestValidator.validateNotificationChannel(requestDTO.getRequest().getOtpChannels()); ResponseWrapper response = new ResponseWrapper<>(); try { - response = (ResponseWrapper) restClientService.postApi(ApiName.BINDING_OTP, requestDTO, ResponseWrapper.class, USE_BEARER_TOKEN); - if (response == null) + ResponseWrapper internalResponse = (ResponseWrapper) restClientService.postApi(ApiName.BINDING_OTP, requestDTO, ResponseWrapper.class, USE_BEARER_TOKEN); + if (internalResponse == null) throw new IdpException(); return ResponseEntity.status(HttpStatus.OK).body(response); } catch (Exception e) { diff --git a/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java b/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java index 171a14390..ed9c60e25 100644 --- a/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java @@ -4,7 +4,7 @@ import io.mosip.kernel.core.util.JsonUtils; import io.mosip.mimoto.core.http.ResponseWrapper; import io.mosip.mimoto.dto.mimoto.*; -import io.mosip.mimoto.exception.BaseUncheckedException; +import io.mosip.mimoto.exception.*; import io.mosip.mimoto.service.RestClientService; import io.mosip.mimoto.service.impl.CredentialServiceImpl; import io.mosip.mimoto.service.impl.IdpServiceImpl; @@ -13,6 +13,9 @@ import io.mosip.mimoto.util.JoseUtil; import io.mosip.mimoto.util.RequestValidator; import io.mosip.mimoto.util.RestApiClient; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; @@ -25,7 +28,12 @@ import org.springframework.test.web.servlet.MockMvc; import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import static io.mosip.mimoto.util.TestUtilities.*; + +import java.util.Arrays; + import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @RunWith(SpringRunner.class) @@ -70,12 +78,19 @@ public void otpRequestTest() throws Exception { ResponseWrapper response = new ResponseWrapper<>(); Mockito.when(restClientService.postApi(Mockito.any(), - Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(response).thenThrow(new BaseUncheckedException("Exception")); + Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(response).thenReturn(null).thenThrow(new BaseUncheckedException("Exception")); this.mockMvc.perform(post("/binding-otp").contentType(MediaType.APPLICATION_JSON_VALUE) .content(JsonUtils.javaObjectToJsonString(requestDTO))) .andExpect(status().isOk()); + + this.mockMvc.perform(post("/binding-otp").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errors[0].errorCode").value("RESIDENT-APP-029")) + .andExpect(jsonPath("$.errors[0].errorMessage").value("RESIDENT-APP-034 --> Could not get response from server")); + this.mockMvc.perform(post("/binding-otp").contentType(MediaType.APPLICATION_JSON_VALUE) .content(JsonUtils.javaObjectToJsonString(requestDTO))) .andExpect(status().isBadRequest()); @@ -93,15 +108,66 @@ public void walletBindingTest() throws Exception { ResponseWrapper response = new ResponseWrapper<>(); Mockito.when(restClientService.postApi(Mockito.any(), - Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(response).thenThrow(new BaseUncheckedException("Exception")); + Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(response).thenReturn(null).thenThrow(new BaseUncheckedException("Exception")); this.mockMvc.perform(post("/wallet-binding").contentType(MediaType.APPLICATION_JSON_VALUE) .content(JsonUtils.javaObjectToJsonString(requestDTO))) .andExpect(status().isOk()); + this.mockMvc.perform(post("/wallet-binding").contentType(MediaType.APPLICATION_JSON_VALUE) + .content(JsonUtils.javaObjectToJsonString(requestDTO))) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errors[0].errorCode").value("RESIDENT-APP-034")) + .andExpect(jsonPath("$.errors[0].errorMessage").value("Could not get response from server")); + this.mockMvc.perform(post("/wallet-binding").contentType(MediaType.APPLICATION_JSON_VALUE) .content(JsonUtils.javaObjectToJsonString(requestDTO))) .andExpect(status().isBadRequest()); } + @Test + public void shouldReturnTokenResponseForValidIssuerAndParams() throws Exception { + String issuer = "test-issuer"; + Mockito.when(credentialService.getTokenResponse(Mockito.anyMap(), Mockito.eq(issuer))).thenReturn(getTokenResponseDTO()); + + mockMvc.perform(post("/get-token/{issuer}", issuer) + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .content(EntityUtils.toString(new UrlEncodedFormEntity(Arrays.asList( + new BasicNameValuePair("grant_type", "authorization_code"), + new BasicNameValuePair("code", "test-code"), + new BasicNameValuePair("redirect_uri", "test-redirect_uri"), + new BasicNameValuePair("code_verifier", "test-code_verifier"), + new BasicNameValuePair("issuer", issuer), + new BasicNameValuePair("vcStorageExpiryLimitInTimes", "3"), + new BasicNameValuePair("credential", "test-credential"), + new BasicNameValuePair("locale", "test-locale") + ))))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.id_token").value("test-id-token")) + .andExpect(jsonPath("$.access_token").value("test-accesstoken")) + .andExpect(jsonPath("$.expires_in").value(12345)) + .andExpect(jsonPath("$.scope").value("test-scope")) + .andExpect(jsonPath("$.token_type").value("test-token-type")); + } + + @Test + public void shouldReturnBadRequestWithErrorIfTokenResponseIsNull() throws Exception { + String issuer = "test-issuer"; + Mockito.when(credentialService.getTokenResponse(Mockito.anyMap(), Mockito.eq(issuer))) + .thenThrow(new IdpException("Exception occurred while performing the authorization")); + + mockMvc.perform(post("/get-token/{issuer}", issuer) + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .param("grant_type", "authorization_code") + .param("code", "test-code") + .param("redirect_uri", "test-redirect_uri") + .param("code_verifier", "test-code_verifier") + .param("issuer", issuer) + .param("vcStorageExpiryLimitInTimes", "3") + .param("credential", "test-credential") + .param("locale", "test-locale")) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errors[0].errorCode").value("RESIDENT-APP-034")) + .andExpect(jsonPath("$.errors[0].errorMessage").value("Exception occurred while performing the authorization")); + } } \ No newline at end of file From dd326644e6cad2ee08d2805e17338b2bea78d683 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 10 Feb 2025 23:54:41 +0530 Subject: [PATCH 349/860] [INJIWEB-1429] fix the mockito core version in pom.xml file Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 565e7b81a..2efd5dc68 100644 --- a/pom.xml +++ b/pom.xml @@ -61,7 +61,7 @@ 4.13.1 - 5.15.2 + 5.15.2 1.2.3 From 21b2470bc461ae71b45afb1ade9ef95f626d0265 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 11 Feb 2025 12:06:57 +0530 Subject: [PATCH 350/860] [INJIWEB-1429] update handleExceptionWithErrorCode method to use the flow error code if the received exception doesn't have error code Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../mosip/mimoto/controller/IdpController.java | 18 ++++++++++-------- .../mimoto/controller/IssuersController.java | 7 +++---- .../exception/PlatformErrorMessages.java | 5 +++-- .../java/io/mosip/mimoto/util/Utilities.java | 4 ++-- .../mimoto/controller/IdpControllerTest.java | 4 ++-- 5 files changed, 20 insertions(+), 18 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/IdpController.java b/src/main/java/io/mosip/mimoto/controller/IdpController.java index e24d8d206..295911852 100644 --- a/src/main/java/io/mosip/mimoto/controller/IdpController.java +++ b/src/main/java/io/mosip/mimoto/controller/IdpController.java @@ -65,17 +65,19 @@ public ResponseEntity> otpRequest(@Valid log.debug("Received binding-otp request : " + JsonUtils.javaObjectToJsonString(requestDTO)); requestValidator.validateInputRequest(result); requestValidator.validateNotificationChannel(requestDTO.getRequest().getOtpChannels()); - ResponseWrapper response = new ResponseWrapper<>(); + ResponseWrapper responseWrapper = new ResponseWrapper<>(); try { ResponseWrapper internalResponse = (ResponseWrapper) restClientService.postApi(ApiName.BINDING_OTP, requestDTO, ResponseWrapper.class, USE_BEARER_TOKEN); if (internalResponse == null) throw new IdpException(); - return ResponseEntity.status(HttpStatus.OK).body(response); + return ResponseEntity.status(HttpStatus.OK).body(internalResponse); } catch (Exception e) { - log.error("Wallet binding otp error occurred.", e); - List errors = Utilities.getErrors(PlatformErrorMessages.MIMOTO_OTP_BINDING_EXCEPTION.getCode(), e.getMessage()); - response.setErrors(errors); - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(response); + log.error("Wallet binding otp error occurred." + e); + String[] errorObj = Utilities.handleExceptionWithErrorCode(e, PlatformErrorMessages.MIMOTO_OTP_BINDING_EXCEPTION.getCode()); + List errors = Utilities.getErrors(errorObj[0], errorObj[1]); + responseWrapper.setResponse(null); + responseWrapper.setErrors(errors); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); } } @@ -108,7 +110,7 @@ public ResponseEntity> request(@Reques return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); } catch (Exception e) { log.error("Wallet binding error occured for tranaction id " + requestDTO.getRequest().getIndividualId(), e); - String[] errorObj = Utilities.handleExceptionWithErrorCode(e); + String[] errorObj = Utilities.handleExceptionWithErrorCode(e, PlatformErrorMessages.MIMOTO_WALLET_BINDING_EXCEPTION.getCode()); List errors = Utilities.getErrors(errorObj[0], errorObj[1]); responseWrapper.setResponse(null); responseWrapper.setErrors(errors); @@ -129,7 +131,7 @@ public ResponseEntity getToken(@RequestParam Map params, return ResponseEntity.status(HttpStatus.OK).body(response); } catch (Exception ex) { log.error("Exception Occurred while Invoking the Token Endpoint : ", ex); - String[] errorObj = Utilities.handleExceptionWithErrorCode(ex); + String[] errorObj = Utilities.handleExceptionWithErrorCode(ex, PlatformErrorMessages.MIMOTO_FETCHING_TOKEN_EXCEPTION.getCode()); List errors = Utilities.getErrors(errorObj[0], errorObj[1]); responseWrapper.setErrors(errors); return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); diff --git a/src/main/java/io/mosip/mimoto/controller/IssuersController.java b/src/main/java/io/mosip/mimoto/controller/IssuersController.java index c5cc5933f..1385a093f 100644 --- a/src/main/java/io/mosip/mimoto/controller/IssuersController.java +++ b/src/main/java/io/mosip/mimoto/controller/IssuersController.java @@ -25,8 +25,7 @@ import java.io.IOException; import java.util.List; -import static io.mosip.mimoto.exception.PlatformErrorMessages.API_NOT_ACCESSIBLE_EXCEPTION; -import static io.mosip.mimoto.exception.PlatformErrorMessages.INVALID_ISSUER_ID_EXCEPTION; +import static io.mosip.mimoto.exception.PlatformErrorMessages.*; @RestController @Slf4j @@ -96,7 +95,7 @@ public ResponseEntity> getIssuerConfig(@PathVariable( return ResponseEntity.status(HttpStatus.NOT_FOUND).body(responseWrapper); } catch (Exception exception) { log.error("Exception occurred while fetching issuers ", exception); - String[] errorObj = Utilities.handleExceptionWithErrorCode(exception); + String[] errorObj = Utilities.handleExceptionWithErrorCode(exception, INVALID_ISSUER_ID_EXCEPTION.getCode()); List errors = Utilities.getErrors(errorObj[0], errorObj[1]); responseWrapper.setResponse(null); responseWrapper.setErrors(errors); @@ -114,7 +113,7 @@ public ResponseEntity> ge return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); } catch (Exception exception) { log.error("Exception occurred while fetching issuers configurations - " + exception); - String[] errorObj = Utilities.handleExceptionWithErrorCode(exception); + String[] errorObj = Utilities.handleExceptionWithErrorCode(exception, INVALID_ISSUER_ID_CONFIGURATION.getCode()); List errors = Utilities.getErrors(errorObj[0], errorObj[1]); responseWrapper.setResponse(null); responseWrapper.setErrors(errors); diff --git a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java index cb917a3fb..d3647a4ec 100644 --- a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java +++ b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java @@ -82,14 +82,15 @@ public enum PlatformErrorMessages { MIMOTO_IDP_OTP_EXCEPTION(PlatformConstants.PREFIX + "033", "IDP Otp error occured"), MIMOTO_IDP_GENERIC_EXCEPTION(PlatformConstants.PREFIX + "034", "Could not get response from server"), INVALID_ISSUER_ID_EXCEPTION(PlatformConstants.PREFIX + "035", "Invalid issuer ID"), + INVALID_ISSUER_ID_CONFIGURATION(PlatformConstants.PREFIX + "035", "Exception occurred while fetching issuer configuration"), INVALID_CREDENTIAL_TYPE_EXCEPTION(PlatformConstants.PREFIX + "036", "Invalid Credential Type Id"), MIMOTO_ISSUER_ONBOARDING_EXCEPTION(PlatformConstants.PREFIX + "037", "Issuers Onboarding exception occurred "), INVALID_VERIFIER_ID_EXCEPTION(PlatformConstants.PREFIX + "038", "Invalid Verifier ClientId"), INVALID_VERIFIER_REDIRECT_URI_EXCEPTION(PlatformConstants.PREFIX + "039", "Invalid Redirect Uri"), INVALID_CREDENTIAL_RESOURCE_URI_EXCEPTION(PlatformConstants.PREFIX + "040", "The Credential Resource is Invalid"), INVALID_CREDENTIAL_ISSUER_WELLKNOWN_RESPONSE_EXCEPTION(PlatformConstants.PREFIX + "041", "Invalid Wellknown from Issuer"), - INVALID_AUTHORIZATION_SERVER_WELLKNOWN_RESPONSE_EXCEPTION(PlatformConstants.PREFIX + "042", "Invalid Authorization Server well-known from server:"); - + INVALID_AUTHORIZATION_SERVER_WELLKNOWN_RESPONSE_EXCEPTION(PlatformConstants.PREFIX + "042", "Invalid Authorization Server well-known from server:"), + MIMOTO_FETCHING_TOKEN_EXCEPTION(PlatformConstants.PREFIX + "043", "Exception occurred when fetching the Token"); /** The error message. */ private final String errorMessage; diff --git a/src/main/java/io/mosip/mimoto/util/Utilities.java b/src/main/java/io/mosip/mimoto/util/Utilities.java index b46d8d557..86a62db86 100644 --- a/src/main/java/io/mosip/mimoto/util/Utilities.java +++ b/src/main/java/io/mosip/mimoto/util/Utilities.java @@ -196,9 +196,9 @@ public String getCredentialSupportedTemplateString(String issuerId, String crede String specificCredentialPDFTemplate = getJson(configServerFileStorageURL, templateFileName); return !StringUtils.isEmpty(specificCredentialPDFTemplate)? specificCredentialPDFTemplate : getJson(configServerFileStorageURL, credentialTemplatePath); } - public static String[] handleExceptionWithErrorCode(Exception exception) { + public static String[] handleExceptionWithErrorCode(Exception exception, String flowErrorCode) { String errorMessage = exception.getMessage(); - String errorCode = PlatformErrorMessages.MIMOTO_WALLET_BINDING_EXCEPTION.getCode(); + String errorCode = flowErrorCode; if(errorMessage.contains(DELIMITER)){ String[] errorSections = errorMessage.split(DELIMITER); diff --git a/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java b/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java index ed9c60e25..efc949361 100644 --- a/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java @@ -88,8 +88,8 @@ public void otpRequestTest() throws Exception { this.mockMvc.perform(post("/binding-otp").contentType(MediaType.APPLICATION_JSON_VALUE) .content(JsonUtils.javaObjectToJsonString(requestDTO))) .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.errors[0].errorCode").value("RESIDENT-APP-029")) - .andExpect(jsonPath("$.errors[0].errorMessage").value("RESIDENT-APP-034 --> Could not get response from server")); + .andExpect(jsonPath("$.errors[0].errorCode").value("RESIDENT-APP-034")) + .andExpect(jsonPath("$.errors[0].errorMessage").value("Could not get response from server")); this.mockMvc.perform(post("/binding-otp").contentType(MediaType.APPLICATION_JSON_VALUE) .content(JsonUtils.javaObjectToJsonString(requestDTO))) From e2d8ad6856cca2b4320aa57be741f79d729c2b97 Mon Sep 17 00:00:00 2001 From: Chandra Keshav Mishra Date: Tue, 11 Feb 2025 15:10:48 +0530 Subject: [PATCH 351/860] [MOSIP-39656] added google client secret as env variables Signed-off-by: Chandra Keshav Mishra --- deploy/mimoto/install.sh | 24 ++++++++++++++++--- helm/mimoto/templates/clusterrolebinding.yaml | 19 --------------- helm/mimoto/templates/serets.yaml | 24 +++++++++++++++++++ helm/mimoto/values.yaml | 9 ++++++- 4 files changed, 53 insertions(+), 23 deletions(-) delete mode 100644 helm/mimoto/templates/clusterrolebinding.yaml create mode 100644 helm/mimoto/templates/serets.yaml diff --git a/deploy/mimoto/install.sh b/deploy/mimoto/install.sh index 8fa1f30f5..9e279370f 100755 --- a/deploy/mimoto/install.sh +++ b/deploy/mimoto/install.sh @@ -30,10 +30,10 @@ function installing_mimoto() { echo "Do you have public domain & valid SSL? (Y/n) " echo "Y: if you have public domain & valid ssl certificate" echo "n: If you don't have a public domain and a valid SSL certificate. Note: It is recommended to use this option only in development environments." - read -p "" flag + read -p -r "" flag if [ -z "$flag" ]; then - echo "'flag' was provided; EXITING;" + echo "'flag' was not provided; EXITING;" exit 1; fi ENABLE_INSECURE='' @@ -55,8 +55,26 @@ function installing_mimoto() { kubectl -n config-server rollout restart deployment config-server kubectl -n config-server rollout status deployment config-server + echo "Please share relevant google client id "> + read -p -r "" clientId + + if [ -z "$clientId" ]; then + echo "'clientId' was not provided; EXITING;" + exit 1; + fi + echo "Please share relevant google secret key" + read -p -r "" secretKey + + if [ -z "$secretKey" ]; then + echo "'secretKey' was not provided; EXITING;" + exit 1; + fi + + echo Installing mimoto - helm -n $NS install mimoto mosip/mimoto --version $MIMOTO_CHART_VERSION $ENABLE_INSECURE + helm -n $NS install mimoto mosip/mimoto --version $MIMOTO_CHART_VERSION $ENABLE_INSECURE \ + --set mimoto.secrets.googleClient.MOSIP_INJIWEB_GOOGLE_CLIENT_ID="$clientId" \ + --set mimoto.secrets.googleClient.MOSIP_INJIWEB_GOOGLE_CLIENT_SECRET="$secretKey" kubectl -n $NS get deploy -o name | xargs -n1 -t kubectl -n $NS rollout status diff --git a/helm/mimoto/templates/clusterrolebinding.yaml b/helm/mimoto/templates/clusterrolebinding.yaml deleted file mode 100644 index a00045072..000000000 --- a/helm/mimoto/templates/clusterrolebinding.yaml +++ /dev/null @@ -1,19 +0,0 @@ -kind: ClusterRoleBinding -apiVersion: {{ include "common.capabilities.rbac.apiVersion" . }} -metadata: - labels: {{- include "common.labels.standard" . | nindent 4 }} - {{- if .Values.commonLabels }} - {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} - {{- end }} - name: {{ template "common.names.fullname" . }} - {{- if .Values.commonAnnotations }} - annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} - {{- end }} -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: {{ template "common.names.fullname" . }} -subjects: - - kind: ServiceAccount - name: {{ template "mimoto.serviceAccountName" . }} - namespace: {{ .Release.Namespace }} diff --git a/helm/mimoto/templates/serets.yaml b/helm/mimoto/templates/serets.yaml new file mode 100644 index 000000000..667dba388 --- /dev/null +++ b/helm/mimoto/templates/serets.yaml @@ -0,0 +1,24 @@ +{{- if .Values.mimoto.secrets }} +{{- range $secret_name, $secret_value := .Values.mimoto.secrets }} +apiVersion: v1 +kind: Secret +metadata: + name: {{ $secret_name }} + namespace: {{ $.Release.Namespace }} + labels: + {{- include "common.labels.standard" $ | nindent 4 }} + {{- if $.Values.commonLabels }} + {{- include "common.tplvalues.render" ( dict "value" $.Values.commonLabels "context" $ ) | nindent 4 }} + {{- end }} + {{- if $.Values.commonAnnotations }} + annotations: + {{- include "common.tplvalues.render" ( dict "value" $.Values.commonAnnotations "context" $ ) | nindent 4 }} + {{- end }} +type: Opaque +data: + {{- range $key, $value := $secret_value }} + {{ $key }}: {{ $value | b64enc | quote }} + {{- end }} +--- +{{- end }} +{{- end }} diff --git a/helm/mimoto/values.yaml b/helm/mimoto/values.yaml index 3a0f132de..205af39f9 100644 --- a/helm/mimoto/values.yaml +++ b/helm/mimoto/values.yaml @@ -251,7 +251,8 @@ extraEnvVarsCM: ## Secret with extra environment variables ## -extraEnvVarsSecret: [] +extraEnvVarsSecret: + - googleClient ## Extra volumes to add to the deployment ## @@ -468,3 +469,9 @@ volumes: mimotooidc: key: oidckeystore.p12 path: /home/mosip/certs + +mimoto: + secrets: + googleClient: + MOSIP_INJIWEB_GOOGLE_CLIENT_ID: "your-app-google-client-id" + MOSIP_INJIWEB_GOOGLE_CLIENT_SECRET: "your-app-google-client-secret" From c7584c9487032928a0bf5fe935e5906ec81cec35 Mon Sep 17 00:00:00 2001 From: Chandra Keshav Mishra Date: Tue, 11 Feb 2025 15:13:14 +0530 Subject: [PATCH 352/860] [MOSIP-39656] Rename serets.yaml to secrets.yaml Signed-off-by: Chandra Keshav Mishra --- helm/mimoto/templates/{serets.yaml => secrets.yaml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename helm/mimoto/templates/{serets.yaml => secrets.yaml} (100%) diff --git a/helm/mimoto/templates/serets.yaml b/helm/mimoto/templates/secrets.yaml similarity index 100% rename from helm/mimoto/templates/serets.yaml rename to helm/mimoto/templates/secrets.yaml From f429b29ddba5bde05552a3af45152b43ed06da5a Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Tue, 11 Feb 2025 17:33:32 +0530 Subject: [PATCH 353/860] INJIWEB-1246 picking template from config server Signed-off-by: Gurpreet41082 --- src/main/java/io/mosip/mimoto/util/Utilities.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/util/Utilities.java b/src/main/java/io/mosip/mimoto/util/Utilities.java index 86a62db86..ce89b42da 100644 --- a/src/main/java/io/mosip/mimoto/util/Utilities.java +++ b/src/main/java/io/mosip/mimoto/util/Utilities.java @@ -193,8 +193,8 @@ public String getCredentialSupportedTemplateString(String issuerId, String crede } return credentialTemplateHtmlString; } - String specificCredentialPDFTemplate = getJson(configServerFileStorageURL, templateFileName); - return !StringUtils.isEmpty(specificCredentialPDFTemplate)? specificCredentialPDFTemplate : getJson(configServerFileStorageURL, credentialTemplatePath); + String specificCredentialPDFTemplate = getJson("", templateFileName); + return !StringUtils.isEmpty(specificCredentialPDFTemplate)? specificCredentialPDFTemplate : getJson("", credentialTemplatePath); } public static String[] handleExceptionWithErrorCode(Exception exception, String flowErrorCode) { String errorMessage = exception.getMessage(); From da02044826761549fb6b16135961c8f4f6f43c7a Mon Sep 17 00:00:00 2001 From: Nitin Hegde <165893206+hegdenitin@users.noreply.github.com> Date: Tue, 11 Feb 2025 19:28:21 +0530 Subject: [PATCH 354/860] INJIMOB-2857 Updating errorCode as per the latest changes from server side (#588) * MOSIP-38873 verifierList and mockMDL wellknown issuer APIs Signed-off-by: NitinHegde * INJIMOB-2857 Updating errorCode as per the latest changes from server side Signed-off-by: NitinHegde --------- Signed-off-by: NitinHegde --- .../mimoto/AidGetIndividualId/AidGetIndividualId.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api-test/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml b/api-test/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml index 88f46f67a..71ab7636e 100644 --- a/api-test/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml +++ b/api-test/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml @@ -49,7 +49,7 @@ AidGetIndividualId: output: '{ "errors": [ { - "errorCode": "RES-SER-457" + "errorCode": "RES-SER-410" } ], "sendOtpResp":{ @@ -80,7 +80,7 @@ AidGetIndividualId: output: '{ "errors": [ { - "errorCode": "RES-SER-422" + "errorCode": "RES-SER-410" } ], "sendOtpResp":{ From 8f36844d4c5d3f56b4a175707135b1ca5e0842c9 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Wed, 12 Feb 2025 10:18:15 +0530 Subject: [PATCH 355/860] [injiweb-1246] updated credential template files and verfiers config in docker (#590) Signed-off-by: Gurpreet41082 --- .../config/credential-template.html | 26 ++++++++++++++----- .../config/mimoto-trusted-verifiers.json | 5 +++- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/docker-compose/config/credential-template.html b/docker-compose/config/credential-template.html index b1210c9c7..f929453c2 100644 --- a/docker-compose/config/credential-template.html +++ b/docker-compose/config/credential-template.html @@ -13,7 +13,7 @@
#if (!$face)
- Logo + Logo
#else Logo @@ -22,15 +22,29 @@ Logo
+
- #foreach($entry in $rowProperties.entrySet()) - #if($entry.value) + #foreach($entry in $rowProperties.entrySet()) ## Iterate over the outer map + #if($entry.value) ## Check if the value exists for this entry + #set($nestedMap = $entry.value) ## Get the nested value + #if($nestedMap && $nestedMap.size() > 0) ## Check if nestedMap is a Map with entries + #foreach($nestedEntry in $nestedMap.entrySet()) ## Iterate over the nested map + #if($nestedEntry.value) ## Ensure that there’s a value for this nested entry
-
$entry.key
-
$entry.value
+
$nestedEntry.key
+
$nestedEntry.value
#end #end + #else + ## If the value is not a map, just display it as is +
+
$entry.key
+
$entry.value
+
+ #end + #end + #end
QR Code @@ -43,4 +57,4 @@ #end - + \ No newline at end of file diff --git a/docker-compose/config/mimoto-trusted-verifiers.json b/docker-compose/config/mimoto-trusted-verifiers.json index 15694ddf1..a4397d467 100644 --- a/docker-compose/config/mimoto-trusted-verifiers.json +++ b/docker-compose/config/mimoto-trusted-verifiers.json @@ -4,7 +4,10 @@ "client_id": "https://injiverify.collab.mosip.net", "redirect_uris": [ "https://injiverify.collab.mosip.net/redirect" + ], + "response_uris": [ + "https://injiverify.collab.mosip.net/redirect" ] } ] -} +} \ No newline at end of file From b7b666cb45f45503cc99121aa9df3ff44258b7ed Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Wed, 12 Feb 2025 13:26:44 +0530 Subject: [PATCH 356/860] [INJIWEB-1429] validate the template path for path injection attacks before calling the resolved template file Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- src/main/java/io/mosip/mimoto/util/Utilities.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/mosip/mimoto/util/Utilities.java b/src/main/java/io/mosip/mimoto/util/Utilities.java index 86a62db86..219dd61ab 100644 --- a/src/main/java/io/mosip/mimoto/util/Utilities.java +++ b/src/main/java/io/mosip/mimoto/util/Utilities.java @@ -27,6 +27,7 @@ import java.net.URI; import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.Base64; import java.util.List; @@ -185,7 +186,14 @@ public String getTrustedVerifiersJsonValue() { public String getCredentialSupportedTemplateString(String issuerId, String credentialType) { String templateFileName = String.format("%s-%s-template.html", issuerId.toLowerCase(), credentialType.toLowerCase()); if(activeProfile.equals("local")) { - Resource credentialTemplateResource = new ClassPathResource("templates/"+ templateFileName); + Path basePath = Paths.get("templates").toAbsolutePath().normalize(); + Path resolvedPath = basePath.resolve(templateFileName).normalize(); + + if (!resolvedPath.startsWith(basePath)) { + throw new SecurityException("Attempted path traversal attack: " + resolvedPath); + } + + Resource credentialTemplateResource = new ClassPathResource(resolvedPath.toString()); try { return Files.readString(credentialTemplateResource.getFile().toPath()); } catch (IOException e) { From b95d78cd588fe4bc5b43831544de88ba73313137 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Wed, 12 Feb 2025 19:51:30 +0530 Subject: [PATCH 357/860] [INJIWEB-1429] add info about new issuer configuration endpoint in mimoto postman collections and update params list for credentials download endpoint Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- docs/api-documentation-openapi.json | 8 +++++ .../MIMOTO.postman_collection.json | 29 +++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index 4e06665cb..16ac6e5e1 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -2649,6 +2649,14 @@ "credential": { "type": "string", "example": "MosipVerifiableCredential" + }, + "vcStorageExpiryLimitInTimes": { + "type": "string", + "example": "1" + }, + "locale": { + "type": "string", + "example": "en" } } } diff --git a/docs/postman-collections/MIMOTO.postman_collection.json b/docs/postman-collections/MIMOTO.postman_collection.json index 9956f870e..14e640b1d 100644 --- a/docs/postman-collections/MIMOTO.postman_collection.json +++ b/docs/postman-collections/MIMOTO.postman_collection.json @@ -64,6 +64,25 @@ }, "response": [] }, + { + "name": "get Issuers Configuration", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{HOST}}/issuers/StayProtected/configuration", + "host": [ + "{{HOST}}" + ], + "path": [ + "issuers", + "StayProtected", + "configuration" + ] + } + }, + "response": [] + }, { "name": "Search Issuers List", "request": { @@ -124,6 +143,16 @@ "key": "credential", "value": "InsuranceCredential", "type": "text" + }, + { + "key": "vcStorageExpiryLimitInTimes", + "value": "1", + "type": "text" + }, + { + "key": "locale", + "value": "en", + "type": "text" } ] }, From 18017c21e8b00ea3b6807f0cdbe1d65ca611ce92 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Thu, 13 Feb 2025 19:17:40 +0530 Subject: [PATCH 358/860] [INJIWEB-1429] in error scenarios credentialController is sending error code in both error message and separately as error code, fixed this and refactored the code and added test cases Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../controller/CredentialsController.java | 62 ++++---- .../controller/CredentialsControllerTest.java | 143 ++++++++++-------- 2 files changed, 109 insertions(+), 96 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/CredentialsController.java b/src/main/java/io/mosip/mimoto/controller/CredentialsController.java index e1e385160..e612bb52a 100644 --- a/src/main/java/io/mosip/mimoto/controller/CredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/CredentialsController.java @@ -8,6 +8,7 @@ import io.mosip.mimoto.exception.InvalidCredentialResourceException; import io.mosip.mimoto.exception.VCVerificationException; import io.mosip.mimoto.service.CredentialService; +import io.mosip.mimoto.util.Utilities; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; @@ -15,8 +16,6 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.InputStreamResource; import org.springframework.http.HttpHeaders; @@ -33,31 +32,27 @@ import java.util.List; import java.util.Map; -import static io.mosip.mimoto.exception.PlatformErrorMessages.API_NOT_ACCESSIBLE_EXCEPTION; -import static io.mosip.mimoto.exception.PlatformErrorMessages.MIMOTO_PDF_SIGN_EXCEPTION; +import static io.mosip.mimoto.exception.PlatformErrorMessages.*; @RestController -@RequestMapping(value="/credentials") +@RequestMapping(value = "/credentials") @Slf4j -@Tag( name = SwaggerLiteralConstants.CREDENTIALS_NAME, description = SwaggerLiteralConstants.CREDENTIALS_DESCRIPTION) +@Tag(name = SwaggerLiteralConstants.CREDENTIALS_NAME, description = SwaggerLiteralConstants.CREDENTIALS_DESCRIPTION) public class CredentialsController { @Autowired CredentialService credentialService; - @Operation( summary = SwaggerLiteralConstants.CREDENTIALS_DOWNLOAD_VC_SUMMARY, description = SwaggerLiteralConstants.CREDENTIALS_DOWNLOAD_VC_DESCRIPTION) + @Operation(summary = SwaggerLiteralConstants.CREDENTIALS_DOWNLOAD_VC_SUMMARY, description = SwaggerLiteralConstants.CREDENTIALS_DOWNLOAD_VC_DESCRIPTION) @ApiResponses({ - @ApiResponse(responseCode = "200", content = { @Content(mediaType = "application/pdf") }), - @ApiResponse(responseCode = "400",content = { @Content(schema = @Schema(implementation = ResponseWrapper.class), mediaType = "application/json") }) }) + @ApiResponse(responseCode = "200", content = {@Content(mediaType = "application/pdf")}), + @ApiResponse(responseCode = "400", content = {@Content(schema = @Schema(implementation = ResponseWrapper.class), mediaType = "application/json")})}) @PostMapping("/download") - public ResponseEntity downloadCredentialAsPDF(@RequestParam Map params ) { + public ResponseEntity downloadCredentialAsPDF(@RequestParam Map params) { ResponseWrapper responseWrapper = new ResponseWrapper<>(); //TODO: remove this default value after the apitest is updated params.putIfAbsent("vcStorageExpiryLimitInTimes", "-1"); - //TODO: remove this default value after the apitest is updated - params.putIfAbsent("vcStorageExpiryLimitInTimes", "-1"); - try { String issuerId = params.get("issuer"); String credentialType = params.get("credential"); @@ -75,32 +70,31 @@ public ResponseEntity downloadCredentialAsPDF(@RequestParam Map> handleException(Exception exception, ResponseWrapper responseWrapper) { + String errorCode = MIMOTO_PDF_SIGN_EXCEPTION.getCode(); + String[] errorObj = Utilities.handleExceptionWithErrorCode(exception, errorCode); + List errors = Utilities.getErrors(errorObj[0], errorObj[1]); + responseWrapper.setErrors(errors); + + HttpStatus status = exception instanceof ApiNotAccessibleException || exception instanceof IOException || exception instanceof InvalidCredentialResourceException || exception instanceof VCVerificationException + ? HttpStatus.BAD_REQUEST + : HttpStatus.INTERNAL_SERVER_ERROR; + + return ResponseEntity.status(status) + .contentType(MediaType.APPLICATION_JSON) + .body(responseWrapper); + } } diff --git a/src/test/java/io/mosip/mimoto/controller/CredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/CredentialsControllerTest.java index 56fa2cede..5710b0ae2 100644 --- a/src/test/java/io/mosip/mimoto/controller/CredentialsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/CredentialsControllerTest.java @@ -1,12 +1,14 @@ package io.mosip.mimoto.controller; import io.mosip.mimoto.dto.idp.TokenResponseDTO; -import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.*; import io.mosip.mimoto.service.impl.CredentialServiceImpl; import io.mosip.mimoto.util.TestUtilities; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; +import org.hamcrest.Matchers; +import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; @@ -20,11 +22,10 @@ import org.springframework.web.servlet.config.annotation.EnableWebMvc; import java.io.ByteArrayInputStream; -import java.util.Arrays; +import java.util.List; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; @RunWith(SpringRunner.class) @SpringBootTest(classes = CredentialsController.class) @@ -38,85 +39,103 @@ public class CredentialsControllerTest { @MockBean private CredentialServiceImpl credentialService; + private String locale = "test-local", issuer = "test-issuer", credential = "test-credential", requestContent; + private TokenResponseDTO tokenResponseDTO; + + @Before + public void setUp() throws Exception { + tokenResponseDTO = TestUtilities.getTokenResponseDTO(); + Mockito.when(credentialService.getTokenResponse(Mockito.anyMap(), Mockito.eq(issuer))).thenReturn(tokenResponseDTO); + requestContent = EntityUtils.toString(new UrlEncodedFormEntity(List.of( + new BasicNameValuePair("grant_type", "authorization_code"), + new BasicNameValuePair("code", "test-code"), + new BasicNameValuePair("redirect_uri", "test-redirect_uri"), + new BasicNameValuePair("code_verifier", "test-code_verifier"), + new BasicNameValuePair("issuer", issuer), + new BasicNameValuePair("vcStorageExpiryLimitInTimes", "3"), + new BasicNameValuePair("credential", credential), + new BasicNameValuePair("locale", locale) + ))); + } + @Test public void downloadPDFSuccessfully() throws Exception { - String locale="test-local"; - String issuer = "test-issuer"; - String credential = "test-credential"; - TokenResponseDTO tokenResponseDTO = TestUtilities.getTokenResponseDTO(); - ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream("test-data".getBytes()); - Mockito.when(credentialService.getTokenResponse(Mockito.anyMap(), Mockito.eq(issuer))).thenReturn(tokenResponseDTO); - Mockito.when(credentialService.downloadCredentialAsPDF(Mockito.eq(issuer), Mockito.eq(credential), Mockito.eq(tokenResponseDTO), Mockito.eq("3"), Mockito.eq(locale))).thenReturn(byteArrayInputStream); + Mockito.when(credentialService.downloadCredentialAsPDF(issuer, credential, tokenResponseDTO, "3", locale)) + .thenReturn(new ByteArrayInputStream("test-data".getBytes())); mockMvc.perform(post("/credentials/download") .contentType(MediaType.APPLICATION_FORM_URLENCODED) - .content(EntityUtils.toString(new UrlEncodedFormEntity(Arrays.asList( - new BasicNameValuePair("grant_type", "authorization_code"), - new BasicNameValuePair("code", "test-code"), - new BasicNameValuePair("redirect_uri", "test-redirect_uri"), - new BasicNameValuePair("code_verifier", "test-code_verifier"), - new BasicNameValuePair("issuer", issuer), - new BasicNameValuePair("vcStorageExpiryLimitInTimes", "3"), - new BasicNameValuePair("credential", credential), - new BasicNameValuePair("locale", locale) - ))))) + .content(requestContent)) .andExpect(status().isOk()) - .andExpect(content().contentType(MediaType.APPLICATION_PDF)) - .andReturn() - .getResponse() - .getContentAsString(); + .andExpect(content().contentType(MediaType.APPLICATION_PDF)); } + @Test + public void throwExceptionOnFetchingTokenResponseFailure() throws Exception { + Mockito.when(credentialService.getTokenResponse(Mockito.anyMap(), Mockito.eq(issuer))) + .thenThrow(new IdpException("Exception occurred while performing the authorization")); + + mockMvc.perform(post("/credentials/download") + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .content(requestContent)) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is("RESIDENT-APP-034"))) + .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is("Exception occurred while performing the authorization"))); + + } @Test - public void throwExceptionWhenTokenIsNotFetched() throws Exception { - String locale="test-locale"; - String issuer = "test-issuer"; - String credential = "test-credential"; - Mockito.when(credentialService.getTokenResponse(Mockito.anyMap(), Mockito.eq(issuer))).thenThrow(ApiNotAccessibleException.class); + public void throwExceptionOnFetchingIssuerOrAuthServerWellknownFailureDuringTokenGeneration() throws Exception { + Mockito.when(credentialService.getTokenResponse(Mockito.anyMap(), Mockito.eq(issuer))) + .thenThrow(new ApiNotAccessibleException()); mockMvc.perform(post("/credentials/download") .contentType(MediaType.APPLICATION_FORM_URLENCODED) - .content(EntityUtils.toString(new UrlEncodedFormEntity(Arrays.asList( - new BasicNameValuePair("grant_type", "authorization_code"), - new BasicNameValuePair("code", "test-code"), - new BasicNameValuePair("redirect_uri", "test-redirect_uri"), - new BasicNameValuePair("code_verifier", "test-code_verifier"), - new BasicNameValuePair("issuer", issuer), - new BasicNameValuePair("vcStorageExpiryLimitInTimes", "3"), - new BasicNameValuePair("credential", credential), - new BasicNameValuePair("locale", locale) - ))))) + .content(requestContent)) .andExpect(status().isBadRequest()) - .andReturn() - .getResponse() - .getContentAsString(); + .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is("RESIDENT-APP-026"))) + .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is("Api not accessible failure"))); } + @Test public void throwExceptionWhenPDFGenerationFailed() throws Exception { - String locale="test-locale"; - String issuer = "test-issuer"; - String credential = "test-credential"; - TokenResponseDTO tokenResponseDTO = TestUtilities.getTokenResponseDTO(); - Mockito.when(credentialService.getTokenResponse(Mockito.anyMap(), Mockito.eq(issuer))).thenReturn(tokenResponseDTO); - Mockito.when(credentialService.downloadCredentialAsPDF(Mockito.eq(issuer), Mockito.eq(credential), Mockito.eq(tokenResponseDTO), Mockito.eq("3"), Mockito.eq(locale))).thenThrow(ApiNotAccessibleException.class); + Mockito.when(credentialService.downloadCredentialAsPDF(issuer, credential, tokenResponseDTO, "3", locale)) + .thenThrow(new ApiNotAccessibleException()); + + mockMvc.perform(post("/credentials/download") + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .content(requestContent)) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is("RESIDENT-APP-026"))) + .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is("Api not accessible failure"))); + } + + @Test + public void throwExceptionOnInvalidCredentialResource() throws Exception { + Mockito.when(credentialService.downloadCredentialAsPDF(issuer, credential, tokenResponseDTO, "3", locale)) + .thenThrow(new InvalidCredentialResourceException( + ErrorConstants.REQUEST_TIMED_OUT.getErrorCode(), + ErrorConstants.REQUEST_TIMED_OUT.getErrorMessage())); + + mockMvc.perform(post("/credentials/download") + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .content(requestContent)) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is("request_timed_out"))) + .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is("We are unable to process your request right now"))); + } + + @Test + public void throwExceptionOnVCVerificationFailure() throws Exception { + Mockito.when(credentialService.downloadCredentialAsPDF(issuer, credential, tokenResponseDTO, "3", locale)) + .thenThrow(new VCVerificationException("Verification Failed!", "Error occurred when verifying the downloaded credential")); mockMvc.perform(post("/credentials/download") .contentType(MediaType.APPLICATION_FORM_URLENCODED) - .content(EntityUtils.toString(new UrlEncodedFormEntity(Arrays.asList( - new BasicNameValuePair("grant_type", "authorization_code"), - new BasicNameValuePair("code", "test-code"), - new BasicNameValuePair("redirect_uri", "test-redirect_uri"), - new BasicNameValuePair("code_verifier", "test-code_verifier"), - new BasicNameValuePair("issuer", issuer), - new BasicNameValuePair("vcStorageExpiryLimitInTimes", "3"), - new BasicNameValuePair("credential", credential), - new BasicNameValuePair("locale", locale) - ))))) + .content(requestContent)) .andExpect(status().isBadRequest()) - .andReturn() - .getResponse() - .getContentAsString(); + .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is("Verification Failed!"))) + .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is("Error occurred when verifying the downloaded credential"))); } } From 1aa681f314cd86288d54427809dbaea7aadadff4 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Fri, 14 Feb 2025 00:59:48 +0530 Subject: [PATCH 359/860] [INJIWEB-1429] add new tests and update old tests in dataShareServiceTest Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../controller/CredentialShareController.java | 2 +- .../mimoto/service/DataShareServiceTest.java | 45 ++++++++++--------- 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java b/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java index b5eb65bd2..89da9553e 100644 --- a/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java +++ b/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java @@ -93,7 +93,7 @@ public ResponseEntity handleSubscribeEvent(@RequestBody Even utilities.getDataPath(), String.format(CredentialShareServiceImpl.VC_REQUEST_FILE_NAME, eventModel.getEvent().getTransactionId()) ); - // Only process event if request id file exists in the storange. + // Only process event if request id file exists in the storage. if (vcRequestIdPath.toFile().exists()) { boolean documentGenerated = credentialShareService.generateDocuments(eventModel); log.info("Credential share process status: {} for event id: {}", documentGenerated, eventModel.getEvent().getId()); diff --git a/src/test/java/io/mosip/mimoto/service/DataShareServiceTest.java b/src/test/java/io/mosip/mimoto/service/DataShareServiceTest.java index d8c4be397..32b749962 100644 --- a/src/test/java/io/mosip/mimoto/service/DataShareServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/DataShareServiceTest.java @@ -20,6 +20,8 @@ import org.springframework.http.MediaType; import org.springframework.test.util.ReflectionTestUtils; import org.springframework.util.PathMatcher; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThrows; @RunWith(MockitoJUnitRunner.class) @@ -33,6 +35,7 @@ public class DataShareServiceTest { PathMatcher pathMatcher; @InjectMocks DataShareServiceImpl dataShareService; + PresentationRequestDTO presentationRequestDTO; @Before public void setUp(){ @@ -40,6 +43,8 @@ public void setUp(){ ReflectionTestUtils.setField(dataShareService, "dataShareCreateUrl", "https://test-url"); ReflectionTestUtils.setField(dataShareService, "dataShareGetUrlPattern", "http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/*"); ReflectionTestUtils.setField(dataShareService, "maxRetryCount", 1); + presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); + Mockito.when(pathMatcher.match("http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/*", "http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/test")).thenReturn(true); } @Test @@ -68,41 +73,37 @@ public void throwServiceUnavailableExceptionWhenCredentialPushIsNotDone() throws @Test public void downloadCredentialWhenRequestIsProper() throws Exception { - PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); VCCredentialResponse vcCredentialResponseDTO = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); String credentialString = TestUtilities.getObjectAsString(vcCredentialResponseDTO); Mockito.when(restApiClient.getApiWithCustomHeaders(Mockito.eq("http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/test"), Mockito.eq(String.class), Mockito.any(HttpHeaders.class))) .thenReturn(credentialString); - Mockito.when(objectMapper.readValue(Mockito.eq(credentialString), Mockito.eq(VCCredentialResponse.class))) - .thenReturn(vcCredentialResponseDTO); - Mockito.when(pathMatcher.match(Mockito.eq("http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/*"),Mockito.eq("http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/test"))).thenReturn(true); + Mockito.when(objectMapper.readValue(credentialString, VCCredentialResponse.class)) + .thenReturn(vcCredentialResponseDTO); + VCCredentialResponse actualVCCredentialResponse = dataShareService.downloadCredentialFromDataShare(presentationRequestDTO); + Assert.assertEquals(vcCredentialResponseDTO, actualVCCredentialResponse); } - @Test(expected = InvalidCredentialResourceException.class) - public void throwServiceUnavailableExceptionWhenCredentialIsNotFetched() throws Exception { - PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); - dataShareService.downloadCredentialFromDataShare(presentationRequestDTO); - } + @Test + public void throwInvalidResourceExceptionWhenResourceURLDoesNotMatchPattern() { + presentationRequestDTO.setResource("test-resource"); + String expectedExceptionMsg = "invalid_resource --> The requested resource is invalid."; - @Test(expected = InvalidCredentialResourceException.class) - public void throwResourceExpiredExceptionWhenCredentialIsExpired() throws Exception { - PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); - VCCredentialResponse vcCredentialResponseDTO = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); - vcCredentialResponseDTO.setCredential(null); - dataShareService.downloadCredentialFromDataShare(presentationRequestDTO); + InvalidCredentialResourceException actualException = assertThrows(InvalidCredentialResourceException.class, () -> dataShareService.downloadCredentialFromDataShare(presentationRequestDTO)); + assertEquals(expectedExceptionMsg, actualException.getMessage()); } - @Test(expected = InvalidCredentialResourceException.class) - public void throwInvalidResourceExceptionWhenResourceURLDoesnotMatchPattern() throws Exception { - PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); - presentationRequestDTO.setResource("test-resource"); - VCCredentialResponse vcCredentialResponseDTO = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); - vcCredentialResponseDTO.setCredential(null); - dataShareService.downloadCredentialFromDataShare(presentationRequestDTO); + @Test + public void throwInvalidResourceExceptionOnDownloadingCredentialFromDataShareFailure() { + Mockito.when(restApiClient.getApiWithCustomHeaders(Mockito.eq("http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/test"), Mockito.eq(String.class), Mockito.any(HttpHeaders.class))) + .thenReturn(null); + String expectedExceptionMsg = "server_unavailable --> The server is not reachable right now."; + + InvalidCredentialResourceException actualException = assertThrows(InvalidCredentialResourceException.class, () -> dataShareService.downloadCredentialFromDataShare(presentationRequestDTO)); + assertEquals(expectedExceptionMsg, actualException.getMessage()); } } From eaca03bb36c6a62bcdaff4f0960aebe96568da9d Mon Sep 17 00:00:00 2001 From: Rakshith B <79500257+Rakshithb1@users.noreply.github.com> Date: Fri, 14 Feb 2025 11:36:38 +0530 Subject: [PATCH 360/860] [MOSIP-35637] added sqaush layers Signed-off-by: Rakshith B <79500257+Rakshithb1@users.noreply.github.com> --- .github/workflows/push-trigger.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/push-trigger.yml b/.github/workflows/push-trigger.yml index b5ce06a2f..3298202d0 100644 --- a/.github/workflows/push-trigger.yml +++ b/.github/workflows/push-trigger.yml @@ -109,6 +109,7 @@ jobs: - SERVICE_LOCATION: '../mimoto' SERVICE_NAME: 'mimoto' BUILD_ARTIFACT: 'mimoto-recreated' + SQUASH_LAYERS: '8' fail-fast: false uses: mosip/kattu/.github/workflows/docker-build.yml@master-java21 name: ${{ matrix.SERVICE_NAME }} @@ -116,6 +117,7 @@ jobs: SERVICE_LOCATION: ${{ matrix.SERVICE_LOCATION }} SERVICE_NAME: ${{ matrix.SERVICE_NAME }} BUILD_ARTIFACT: ${{ matrix.BUILD_ARTIFACT }} + SQUASH_LAYERS: ${{ matrix.SQUASH_LAYERS }} secrets: DEV_NAMESPACE_DOCKER_HUB: ${{ secrets.DEV_NAMESPACE_DOCKER_HUB }} ACTOR_DOCKER_HUB: ${{ secrets.ACTOR_DOCKER_HUB }} From 99e1a4f83495fd21c5cb34cee5970c307a54029f Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Fri, 14 Feb 2025 15:26:17 +0530 Subject: [PATCH 361/860] [injiweb-1370 basic structure code for login story] Signed-off-by: Gurpreet41082 --- pom.xml | 13 +++- .../mimoto/MimotoServiceApplication.java | 10 +-- .../java/io/mosip/mimoto/config/Config.java | 34 ++++++++- .../mimoto/controller/UserController.java | 38 ++++++++++ .../mosip/mimoto/dbentity/UserMetadata.java | 44 ++++++++++++ .../repository/UserMetadataRepository.java | 13 ++++ .../OAuth2AuthenticationSuccessHandler.java | 44 ++++++++++++ .../mimoto/service/UserMetadataService.java | 69 +++++++++++++++++++ .../resources/application-local.properties | 34 ++++++--- src/main/resources/bootstrap.properties | 2 +- 10 files changed, 286 insertions(+), 15 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/controller/UserController.java create mode 100644 src/main/java/io/mosip/mimoto/dbentity/UserMetadata.java create mode 100644 src/main/java/io/mosip/mimoto/repository/UserMetadataRepository.java create mode 100644 src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java create mode 100644 src/main/java/io/mosip/mimoto/service/UserMetadataService.java diff --git a/pom.xml b/pom.xml index 2efd5dc68..f6e4108fd 100644 --- a/pom.xml +++ b/pom.xml @@ -91,6 +91,7 @@ 2.9.2 1.5.10 0.9.1 + 42.7.2 **/constant/**,**/config/**,**/httpfilter/**,**/cache/**,**/dto/**,**/entity/**,**/model/**,**/exception/**,**/repository/**,**/security/**,**/*Config.java,**/*BootApplication.java,**/*VertxApplication.java,**/cbeffutil/**,**/core.http/**,**/util/** @@ -206,6 +207,11 @@ spring-boot-starter-data-jpa ${spring.boot.version} + + org.springframework.boot + spring-boot-starter-oauth2-client + ${spring.boot.version} + org.junit.vintage junit-vintage-engine @@ -462,7 +468,12 @@ jakarta.validation-api 3.0.2 - + + + org.postgresql + postgresql + ${postgresql.version} + diff --git a/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java b/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java index 9d6ab1a8a..bb34c86fe 100644 --- a/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java +++ b/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java @@ -9,11 +9,13 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration; +import org.springframework.boot.autoconfigure.domain.EntityScan; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration; import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Primary; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; @@ -21,14 +23,14 @@ @SpringBootApplication(scanBasePackages = { "io.mosip.mimoto.*", + "io.mosip.mimoto.dbentity", "io.mosip.kernel.websub.*", "${mosip.auth.adapter.impl.basepackage}" }, exclude = { - SecurityAutoConfiguration.class, - DataSourceAutoConfiguration.class, - HibernateJpaAutoConfiguration.class, - CacheAutoConfiguration.class + SecurityAutoConfiguration.class }) +//@EntityScan(basePackages = "io.mosip.mimoto.dbentity") +//@EnableJpaRepositories(basePackages = "io.mosip.mimoto.repository") @Slf4j @EnableScheduling @EnableAsync diff --git a/src/main/java/io/mosip/mimoto/config/Config.java b/src/main/java/io/mosip/mimoto/config/Config.java index cb69a53ff..7e8e98f0c 100644 --- a/src/main/java/io/mosip/mimoto/config/Config.java +++ b/src/main/java/io/mosip/mimoto/config/Config.java @@ -1,5 +1,7 @@ package io.mosip.mimoto.config; +import io.mosip.mimoto.security.oauth2.OAuth2AuthenticationSuccessHandler; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; @@ -16,6 +18,7 @@ import org.springframework.web.cors.CorsConfigurationSource; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import java.util.Arrays; import java.util.HashMap; import java.util.Map; @@ -37,12 +40,18 @@ public class Config { @Value("${mosip.security.origins:localhost:8088}") private String origins; + + @Value("${mosip.inji.web.url}") + private String injiWebUrl; + @Bean @ConfigurationProperties(prefix = "mosip.inji") public Map injiConfig() { return new HashMap<>(); } + @Autowired + private OAuth2AuthenticationSuccessHandler oAuth2AuthenticationSuccessHandler; @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { if (!isCSRFEnable) { @@ -58,18 +67,41 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { headersEntry.frameOptions(HeadersConfigurer.FrameOptionsConfig::sameOrigin); }); + setupOauth2Config(http); + return http.build(); } + private void setupOauth2Config(HttpSecurity http) throws Exception { + http.oauth2Login((oauth2Login) -> oauth2Login.loginPage(injiWebUrl + "/login") + .authorizationEndpoint(authorization -> authorization.baseUri("/oauth2/authorize") + ) + .redirectionEndpoint(redirect -> redirect.baseUri("/oauth2/callback/*")) + .successHandler(oAuth2AuthenticationSuccessHandler) + ) + .logout(logout -> logout + .logoutUrl("/logout") + .logoutSuccessUrl(injiWebUrl+"/login?logout") // Custom logout success URL + .clearAuthentication(true) // Clear the authentication after logout + .invalidateHttpSession(true) // Invalidate the session + .deleteCookies("JSESSIONID") // Optionally, delete cookies + ).authorizeHttpRequests(authz -> authz + // Define secured endpoints + .requestMatchers("/secure/**").authenticated() // Secure endpoints that require login + // Default authorization rule for all other requests + .anyRequest().permitAll());; + } + // Define CORS configuration @Bean public CorsConfigurationSource corsConfigurationSource() { UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); CorsConfiguration corsConfiguration = new CorsConfiguration(); - corsConfiguration.addAllowedOrigin(origins); // Allow all origins + corsConfiguration.setAllowedOrigins(Arrays.asList(origins.split(","))); // Allow all origins corsConfiguration.addAllowedHeader("*"); // Allow all headers corsConfiguration.addAllowedMethod("*"); // Allow all HTTP methods + corsConfiguration.setAllowCredentials(true);// Allow cookies to be sent source.registerCorsConfiguration("/**", corsConfiguration); return source; } diff --git a/src/main/java/io/mosip/mimoto/controller/UserController.java b/src/main/java/io/mosip/mimoto/controller/UserController.java new file mode 100644 index 000000000..c10c4c1f4 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/controller/UserController.java @@ -0,0 +1,38 @@ +package io.mosip.mimoto.controller; + +import io.mosip.mimoto.dto.ErrorDTO; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.core.Authentication; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; + +@Slf4j +@RestController +@RequestMapping(value = "/secure/user") +public class UserController { + + @GetMapping("/profile") + public ResponseEntity getUserProfile(Authentication authentication) { // Use Authentication object directly + try { + + if (authentication == null || !authentication.isAuthenticated()) { + return ResponseEntity.status(HttpStatus.UNAUTHORIZED) + .body(new ErrorDTO("UNAUTHORIZED", "User is not authenticated.")); + } + + String username = authentication.getName(); // Get username from Authentication + + String jsonResponse = String.format("{\"displayName\": \"%s\", \"profilePictureUrl\": \"%s\"}", username, null); + return ResponseEntity.ok(jsonResponse); + + } catch (Exception exception) { + log.error("Error retrieving user profile", exception); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(new ErrorDTO("INTERNAL_SERVER_ERROR", "An internal server error occurred.")); + } + } +} diff --git a/src/main/java/io/mosip/mimoto/dbentity/UserMetadata.java b/src/main/java/io/mosip/mimoto/dbentity/UserMetadata.java new file mode 100644 index 000000000..98012699d --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dbentity/UserMetadata.java @@ -0,0 +1,44 @@ +package io.mosip.mimoto.dbentity; + +import jakarta.persistence.*; +import lombok.Getter; +import lombok.Setter; +import java.util.UUID; + +@Entity +@Table(name = "user_metadata") +@Getter +@Setter +public class UserMetadata { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private UUID id; + + @Column(name = "provider_subject_id", nullable = false, unique = true) + private String providerSubjectId; + + @Column(name = "identity_provider", nullable = false) + private String identityProvider; + + @Column(name = "display_name", nullable = false) + private String displayName; + + @Column(name = "profile_picture_url") + private String profilePictureUrl; + + @Column(name = "phone_number") + private String phoneNumber; + + @Column(name = "email", nullable = false) + private String email; + + @Column(name = "created_at", updatable = false) + private java.sql.Timestamp createdAt; + + @Column(name = "updated_at") + private java.sql.Timestamp updatedAt; + + // Getters and Setters +} + diff --git a/src/main/java/io/mosip/mimoto/repository/UserMetadataRepository.java b/src/main/java/io/mosip/mimoto/repository/UserMetadataRepository.java new file mode 100644 index 000000000..e73319f41 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/repository/UserMetadataRepository.java @@ -0,0 +1,13 @@ +package io.mosip.mimoto.repository; + +import io.mosip.mimoto.dbentity.UserMetadata; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; +import java.util.UUID; + +@Repository +public interface UserMetadataRepository extends JpaRepository { + Optional findByProviderSubjectId(String providerSubjectId); +} diff --git a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java new file mode 100644 index 000000000..fcb28405c --- /dev/null +++ b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java @@ -0,0 +1,44 @@ +package io.mosip.mimoto.security.oauth2; + +import io.mosip.mimoto.service.UserMetadataService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.Authentication; +import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken; +import org.springframework.security.oauth2.core.user.OAuth2User; +import org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler; +import org.springframework.stereotype.Component; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.web.servlet.mvc.support.RedirectAttributes; + +import java.io.IOException; + +@Component +public class OAuth2AuthenticationSuccessHandler extends SimpleUrlAuthenticationSuccessHandler { + @Autowired + private UserMetadataService userMetadataService; + + @Override + public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { + OAuth2AuthenticationToken oauth2Token = (OAuth2AuthenticationToken) authentication; + OAuth2User oAuth2User = oauth2Token.getPrincipal(); + + // Extracting OAuth2 user information + String providerSubjectId = oAuth2User.getAttribute("sub"); + String identityProvider = oauth2Token.getAuthorizedClientRegistrationId(); + String displayName = oAuth2User.getAttribute("name"); + String profilePictureUrl = oAuth2User.getAttribute("picture"); + String email = oAuth2User.getAttribute("email"); + + // Call the service to update or insert the user metadata in the database + userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); + + response.sendRedirect("http://localhost:3004/login?status=success"); + + } + + + + +} diff --git a/src/main/java/io/mosip/mimoto/service/UserMetadataService.java b/src/main/java/io/mosip/mimoto/service/UserMetadataService.java new file mode 100644 index 000000000..1c4884cbe --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/UserMetadataService.java @@ -0,0 +1,69 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.dbentity.UserMetadata; +import io.mosip.mimoto.repository.UserMetadataRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.sql.Timestamp; +import java.util.Optional; + +@Service +public class UserMetadataService { + + private final UserMetadataRepository userMetadataRepository; + + @Autowired + public UserMetadataService(UserMetadataRepository userMetadataRepository) { + this.userMetadataRepository = userMetadataRepository; + } + + public void updateOrInsertUserMetadata(String providerSubjectId, String identityProvider, + String displayName, String profilePictureUrl, + String email) { + // Check if user exists + Optional existingUser = userMetadataRepository.findByProviderSubjectId(providerSubjectId); + + UserMetadata userMetadata; + + if (existingUser.isPresent()) { + userMetadata = existingUser.get(); + + // Check if any attributes need to be updated + boolean isUpdated = false; + Timestamp now = new Timestamp(System.currentTimeMillis()); + + if (!userMetadata.getDisplayName().equals(displayName)) { + userMetadata.setDisplayName(displayName); + isUpdated = true; + } + if (!userMetadata.getProfilePictureUrl().equals(profilePictureUrl)) { + userMetadata.setProfilePictureUrl(profilePictureUrl); + isUpdated = true; + } + if (!userMetadata.getEmail().equals(email)) { + userMetadata.setEmail(email); + isUpdated = true; + } + + if (isUpdated) { + userMetadata.setUpdatedAt(now); + userMetadataRepository.save(userMetadata); // Update record + } + + } else { + // If the user does not exist, create a new record + userMetadata = new UserMetadata(); + userMetadata.setProviderSubjectId(providerSubjectId); + userMetadata.setIdentityProvider(identityProvider); + userMetadata.setDisplayName(displayName); + userMetadata.setProfilePictureUrl(profilePictureUrl); + userMetadata.setEmail(email); + userMetadata.setCreatedAt(new Timestamp(System.currentTimeMillis())); + userMetadata.setUpdatedAt(new Timestamp(System.currentTimeMillis())); + + userMetadataRepository.save(userMetadata); // Insert new record + } + } +} + diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 432920413..eec3f8712 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -1,8 +1,8 @@ # MOSIP -mosipbox.public.url=https://api-internal.dev1.mosip.net -public.internet.url=https://api-internal.dev1.mosip.net -public.url=https://api.dev1.mosip.net -keycloak.internal.url=https://iam.dev1.mosip.net/ +mosipbox.public.url=https://api-internal.dev2.mosip.net +public.internet.url=https://api-internal.dev2.mosip.net +public.url=https://api.dev2.mosip.net +keycloak.internal.url=https://iam.dev2.mosip.net/ # Resident service mosip.resident.base.url=${mosipbox.public.url}/resident/v1 @@ -205,14 +205,14 @@ mosip.openid.verifiers=mimoto-trusted-verifiers.json mosip.openid.htmlTemplate=credential-template.html mosip.oidc.client.assertion.type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer mosip.oidc.p12.filename=oidckeystore.p12 -mosip.oidc.p12.password=password +mosip.oidc.p12.password=mosip@123 mosip.oidc.p12.path=certs/ #OpenId4VP related Configuration START #Inji Web Config -mosip.inji.web.url=https://injiweb.dev1.mosip.net +mosip.inji.web.url=https://injiweb.dev2.mosip.net mosip.inji.web.redirect.url=${mosip.inji.web.url}/authorize mosip.inji.qr.data.size.limit=2000 mosip.inji.qr.code.height=650 @@ -224,7 +224,7 @@ mosip.inji.ovp.redirect.url.pattern=%s#vp_token=%s&presentation_submission=%s mosip.inji.ovp.error.redirect.url.pattern=%s?error=%s&error_description=%s #DataShare Config -mosip.data.share.url=https://datashare-inji.dev1.mosip.net +mosip.data.share.url=https://datashare-inji.dev2.mosip.net mosip.data.share.create.url=${mosip.data.share.url}/v1/datashare/create/static-policyid/static-subscriberid mosip.data.share.create.retry.count=3 mosip.data.share.get.url.pattern=http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/* @@ -237,4 +237,22 @@ mosip.security.origins=http://localhost:3004 #Caffeine cache related configurations -cache.expiry.time.in.min = 60 \ No newline at end of file +cache.expiry.time.in.min = 60 + +spring.security.oauth2.client.registration.google.client-id= +spring.security.oauth2.client.registration.google.client-secret= +spring.security.oauth2.client.registration.google.scope=profile,email +spring.security.oauth2.client.registration.google.redirect-uri={baseUrl}/oauth2/callback/{registrationId} +spring.security.oauth2.client.registration.google.authorization-grant-type=authorization_code +spring.security.oauth2.client.registration.google.client-name=Google + +spring.security.oauth2.client.provider.google.authorization-uri=https://accounts.google.com/o/oauth2/auth +spring.security.oauth2.client.provider.google.token-uri=https://oauth2.googleapis.com/token +spring.security.oauth2.client.provider.google.user-info-uri=https://www.googleapis.com/oauth2/v3/userinfo + +spring.datasource.url=jdbc:postgresql://localhost:5432/inji_mimoto +spring.datasource.username=postgres +spring.datasource.password=postgres +spring.jpa.hibernate.ddl-auto=update +spring.jpa.show-sql=true +spring.datasource.driver-class-name=org.postgresql.Driver \ No newline at end of file diff --git a/src/main/resources/bootstrap.properties b/src/main/resources/bootstrap.properties index 0c72fa3da..0ab6ea448 100644 --- a/src/main/resources/bootstrap.properties +++ b/src/main/resources/bootstrap.properties @@ -8,7 +8,7 @@ config.server.file.storage.uri=${spring.cloud.config.uri}/print/${spring.profile management.endpoint.health.show-details=always management.endpoints.web.exposure.include=info,health,refresh -server.port=8088 +server.port=8099 server.servlet.context-path=/v1/mimoto server.tomcat.max-http-response-header-size=65536 health.config.enabled=false From bbed57257a42ba4337512339f6bc0bfc3f2eff8f Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Fri, 14 Feb 2025 17:26:45 +0530 Subject: [PATCH 362/860] [INJIWEB-1429] refactor localUtils matchLocale method to handle all use cases of inputs Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../java/io/mosip/mimoto/util/LocaleUtils.java | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/util/LocaleUtils.java b/src/main/java/io/mosip/mimoto/util/LocaleUtils.java index b1fe6deee..a0a4db865 100644 --- a/src/main/java/io/mosip/mimoto/util/LocaleUtils.java +++ b/src/main/java/io/mosip/mimoto/util/LocaleUtils.java @@ -3,18 +3,11 @@ import java.util.Locale; public class LocaleUtils { - // Method to check if the localeString matches the 2-letter or 3-letter code + // Method to convert the input locale strings into 3-letter codes and compare public static boolean matchesLocale(String localeString1, String localeString2) { - Locale locale1 = Locale.forLanguageTag(localeString1); + String locale1Iso3Language = Locale.forLanguageTag(localeString1).getISO3Language(); // 3-letter code for locale1 + String locale2Iso3Language = Locale.forLanguageTag(localeString2).getISO3Language(); // 3-letter code for locale2 - // Check if localeString1 (from the object) matches either the 2-letter or 3-letter code of localeString2 - if (localeString1.length() == 2) { - String iso3Language = locale1.getISO3Language(); // 3-letter code for locale1 - return localeString1.equals(localeString2) || iso3Language.equals(localeString2); - } else if (localeString1.length() == 3) { - String iso2Language = locale1.getLanguage(); // 2-letter code for locale1 - return localeString1.equals(localeString2) || iso2Language.equals(localeString2); - } - return false; + return locale1Iso3Language.equals(locale2Iso3Language); } } From 0e5b7f5429d2ad2f96e1e324cf2c778ed2bba0c9 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Fri, 14 Feb 2025 17:28:44 +0530 Subject: [PATCH 363/860] [INJIWEB-1429] udpate loadDisplayPropsFromWellknown and getPdfResourceFromVcProperties methods of credentialServiceImpl to properly display the field name and values in the generated pdf based on the selected language or default language Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../service/impl/CredentialServiceImpl.java | 61 ++++++++++--------- 1 file changed, 32 insertions(+), 29 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java index 858e42645..b63e19f75 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java @@ -100,7 +100,7 @@ public class CredentialServiceImpl implements CredentialService { CredentialsVerifier credentialsVerifier; @PostConstruct - public void init(){ + public void init() { pixelPass = new PixelPass(); credentialsVerifier = new CredentialsVerifier(); } @@ -163,8 +163,8 @@ public VCCredentialRequest generateVCCredentialRequest(IssuerDTO issuerDTO, Cred } public ByteArrayInputStream generatePdfForVerifiableCredentials(String credentialType, VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String dataShareUrl, String credentialValidity, String locale) throws Exception { - LinkedHashMap displayProperties = loadDisplayPropertiesFromWellknown(vcCredentialResponse, credentialsSupportedResponse, locale); - Map data = getPdfResourceFromVcProperties(displayProperties, credentialsSupportedResponse, vcCredentialResponse, issuerDTO, dataShareUrl, credentialValidity, locale); + LinkedHashMap> displayProperties = loadDisplayPropertiesFromWellknown(vcCredentialResponse, credentialsSupportedResponse, locale); + Map data = getPdfResourceFromVcProperties(displayProperties, credentialsSupportedResponse, vcCredentialResponse, issuerDTO, dataShareUrl, credentialValidity, locale); return renderVCInCredentialTemplate(data, issuerDTO.getIssuer_id(), credentialType); } @@ -172,7 +172,7 @@ public Boolean verifyCredential(VCCredentialResponse vcCredentialResponse) throw log.info("Initiated the VC Verification : Started"); String credentialString = objectMapper.writeValueAsString(vcCredentialResponse.getCredential()); VerificationResult verificationResult = credentialsVerifier.verify(credentialString, CredentialFormat.LDP_VC); - if(!verificationResult.getVerificationStatus()){ + if (!verificationResult.getVerificationStatus()) { throw new VCVerificationException(verificationResult.getVerificationErrorCode().toLowerCase(), verificationResult.getVerificationMessage()); } log.info("Completed the VC Verification : Completed -> result : " + verificationResult); @@ -180,36 +180,36 @@ public Boolean verifyCredential(VCCredentialResponse vcCredentialResponse) throw } @NotNull - private static LinkedHashMap loadDisplayPropertiesFromWellknown(VCCredentialResponse vcCredentialResponse, CredentialsSupportedResponse credentialsSupportedResponse, String locale) { - LinkedHashMap displayProperties = new LinkedHashMap<>(); + private static LinkedHashMap> loadDisplayPropertiesFromWellknown(VCCredentialResponse vcCredentialResponse, CredentialsSupportedResponse credentialsSupportedResponse, String locale) { + LinkedHashMap> displayProperties = new LinkedHashMap<>(); Map credentialProperties = vcCredentialResponse.getCredential().getCredentialSubject(); - - LinkedHashMap vcPropertiesFromWellKnown = new LinkedHashMap<>(); + LinkedHashMap vcPropertiesFromWellKnown = new LinkedHashMap<>(); Map credentialSubject = credentialsSupportedResponse.getCredentialDefinition().getCredentialSubject(); credentialSubject.keySet().forEach(VCProperty -> { Optional filteredResponse = credentialSubject.get(VCProperty) .getDisplay().stream() - .filter(obj -> - LocaleUtils.matchesLocale(obj.getLocale(), locale) - ) + .filter(obj -> "undefined".equals(locale) || LocaleUtils.matchesLocale(obj.getLocale(), locale))// if locale is not undefined use it to fetch the wellknown properties otherwise return the properties of the first display object which has language field .findFirst(); - String filteredValue = filteredResponse.isPresent() ? filteredResponse.get().getName() : "" ; - vcPropertiesFromWellKnown.put(VCProperty, filteredValue); + + if (filteredResponse.isPresent()) { + CredentialIssuerDisplayResponse filteredValue = filteredResponse.get(); + vcPropertiesFromWellKnown.put(VCProperty, filteredValue); + } }); List orderProperty = credentialsSupportedResponse.getOrder(); List fieldProperties = orderProperty == null ? new ArrayList<>(vcPropertiesFromWellKnown.keySet()) : orderProperty; fieldProperties.forEach(vcProperty -> { - if(credentialProperties.get(vcProperty) != null) { - displayProperties.put(vcProperty,Map.of(vcPropertiesFromWellKnown.get(vcProperty), credentialProperties.get(vcProperty))); + if (vcPropertiesFromWellKnown.get(vcProperty) != null && credentialProperties.get(vcProperty) != null) { + displayProperties.put(vcProperty, Map.of(vcPropertiesFromWellKnown.get(vcProperty), credentialProperties.get(vcProperty))); } }); return displayProperties; } - private Map getPdfResourceFromVcProperties(LinkedHashMap displayProperties, CredentialsSupportedResponse credentialsSupportedResponse, VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, String dataShareUrl, String credentialValidity, String locale) throws IOException, WriterException { + private Map getPdfResourceFromVcProperties(LinkedHashMap> displayProperties, CredentialsSupportedResponse credentialsSupportedResponse, VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, String dataShareUrl, String credentialValidity, String locale) throws IOException, WriterException { Map data = new HashMap<>(); LinkedHashMap rowProperties = new LinkedHashMap<>(); String backgroundColor = credentialsSupportedResponse.getDisplay().get(0).getBackgroundColor(); @@ -221,28 +221,31 @@ private Map getPdfResourceFromVcProperties(LinkedHashMap { String originalKey = entry.getKey(); - Object entryValue = entry.getValue(); + Map properties = entry.getValue(); // Process the inner map - ((Map) entryValue).entrySet().stream() + ((Map) properties).entrySet().stream() .forEachOrdered(innerEntry -> { - String propertyKey = innerEntry.getKey().toString(); - Object currentValue = innerEntry.getValue(); + // loadDisplayPropertiesFromWellknown method returns both name and locale field values of the matching display obj in the response + CredentialIssuerDisplayResponse matchingWellknownDisplayObj = innerEntry.getKey(); + String nameFromDisplayObj = matchingWellknownDisplayObj.getName(); + String localeFromDisplayObj = matchingWellknownDisplayObj.getLocale(); + Object propertyValFromDownloadedVcResponse = innerEntry.getValue(); String value = ""; - if (currentValue instanceof Map) { + if (propertyValFromDownloadedVcResponse instanceof Map) { // If the value is a Map, handle it as a Map - value = handleMap(currentValue); - } else if (currentValue instanceof List) { + value = handleMap(propertyValFromDownloadedVcResponse); + } else if (propertyValFromDownloadedVcResponse instanceof List) { // If the value is a List, handle it as a List - value = handleList(currentValue); + value = handleList(propertyValFromDownloadedVcResponse, localeFromDisplayObj); } else { // Otherwise, just convert to string - value = currentValue.toString(); + value = propertyValFromDownloadedVcResponse.toString(); } // Put the result into the rowProperties map - rowProperties.put(originalKey, Map.of(propertyKey, value)); + rowProperties.put(originalKey, Map.of(nameFromDisplayObj, value)); }); }); @@ -260,7 +263,7 @@ private Map getPdfResourceFromVcProperties(LinkedHashMap castedList = (List) list; if (castedList.isEmpty()) return ""; @@ -268,7 +271,7 @@ private String handleList(Object list) { return castedList.stream().map(String.class::cast).collect(Collectors.joining(", ")); } else if (castedList.get(0) instanceof Map) { return ((List>) castedList).stream() - .filter(obj -> obj.containsKey("language")) + .filter(obj -> LocaleUtils.matchesLocale(obj.get("language").toString(), locale)) .map(obj -> obj.get("value").toString()) .findFirst() .orElse(""); @@ -288,7 +291,7 @@ private String handleMap(Object map) { @NotNull private ByteArrayInputStream renderVCInCredentialTemplate(Map data, String issuerId, String credentialType) throws IOException { - String credentialTemplate = utilities.getCredentialSupportedTemplateString(issuerId, credentialType); + String credentialTemplate = utilities.getCredentialSupportedTemplateString(issuerId, credentialType); Properties props = new Properties(); props.setProperty("resource.loader", "class"); props.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); From 2eeded769451c66039d65b8e19aa8bf48e5670fa Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Fri, 14 Feb 2025 20:44:09 +0530 Subject: [PATCH 364/860] [INJIWEB-1429] remove deprecated annotation for issuers/issuer-id endpoint as it is being used by inji web again Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- docs/api-documentation-openapi.json | 2 +- .../java/io/mosip/mimoto/controller/IssuersController.java | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index 16ac6e5e1..c7f6ee266 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -1604,7 +1604,7 @@ "tags": [ "Trusted Issuers" ], - "description": "This API provides the complete configuration details for the specific issuers passed in the path variable. Since version 0.16.0, this endpoint is deprecated and will be removed in a future release.", + "description": "This API provides the complete configuration details for the specific issuers passed in the path variable.", "responses": { "200": { "description": "OK", diff --git a/src/main/java/io/mosip/mimoto/controller/IssuersController.java b/src/main/java/io/mosip/mimoto/controller/IssuersController.java index 1385a093f..f8567d3cd 100644 --- a/src/main/java/io/mosip/mimoto/controller/IssuersController.java +++ b/src/main/java/io/mosip/mimoto/controller/IssuersController.java @@ -76,10 +76,6 @@ public ResponseEntity getIssuerWellknown(@Pat } } - /** - * @deprecated Since version 0.16.0, this endpoint is deprecated and will be removed in a future release. - */ - @Deprecated(since = "0.16.0", forRemoval = true) @Operation(summary = SwaggerLiteralConstants.ISSUERS_GET_SPECIFIC_ISSUER_SUMMARY, description = SwaggerLiteralConstants.ISSUERS_GET_SPECIFIC_ISSUER_DESCRIPTION) @GetMapping(value = "/{issuer-id}", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity> getIssuerConfig(@PathVariable("issuer-id") String issuerId) { From 95c6ccb5db28ac782a8a024dad51b2ea06f5390e Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Fri, 14 Feb 2025 21:14:11 +0530 Subject: [PATCH 365/860] [INJIWEB-1429] add test cases for credential expired and not found scenarios in dataShareServiceImpl file Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../mimoto/dto/DataShareResponseDto.java | 3 +- .../mimoto/service/DataShareServiceTest.java | 36 ++++++++++++++++++- .../io/mosip/mimoto/util/TestUtilities.java | 10 +++++- 3 files changed, 46 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/dto/DataShareResponseDto.java b/src/main/java/io/mosip/mimoto/dto/DataShareResponseDto.java index 05642b351..181b1b795 100644 --- a/src/main/java/io/mosip/mimoto/dto/DataShareResponseDto.java +++ b/src/main/java/io/mosip/mimoto/dto/DataShareResponseDto.java @@ -2,10 +2,11 @@ import java.util.List; +import lombok.Builder; import lombok.Data; -import lombok.EqualsAndHashCode; @Data +@Builder public class DataShareResponseDto extends BaseRestResponseDTO { private static final long serialVersionUID = 1L; diff --git a/src/test/java/io/mosip/mimoto/service/DataShareServiceTest.java b/src/test/java/io/mosip/mimoto/service/DataShareServiceTest.java index 32b749962..76044745b 100644 --- a/src/test/java/io/mosip/mimoto/service/DataShareServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/DataShareServiceTest.java @@ -1,6 +1,8 @@ package io.mosip.mimoto.service; +import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.dto.DataShareResponseDto; import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; import io.mosip.mimoto.dto.openid.datashare.DataShareResponseWrapperDTO; import io.mosip.mimoto.dto.openid.presentation.PresentationRequestDTO; @@ -20,6 +22,7 @@ import org.springframework.http.MediaType; import org.springframework.test.util.ReflectionTestUtils; import org.springframework.util.PathMatcher; +import static io.mosip.mimoto.util.TestUtilities.getDataShareResponseDTO; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThrows; @@ -38,7 +41,7 @@ public class DataShareServiceTest { PresentationRequestDTO presentationRequestDTO; @Before - public void setUp(){ + public void setUp() { ReflectionTestUtils.setField(dataShareService, "dataShareHostUrl", "https://test-url"); ReflectionTestUtils.setField(dataShareService, "dataShareCreateUrl", "https://test-url"); ReflectionTestUtils.setField(dataShareService, "dataShareGetUrlPattern", "http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/*"); @@ -106,4 +109,35 @@ public void throwInvalidResourceExceptionOnDownloadingCredentialFromDataShareFai assertEquals(expectedExceptionMsg, actualException.getMessage()); } + @Test + public void throwResourceExpiredExceptionWhenCredentialIsExpired() throws JsonProcessingException { + VCCredentialResponse vcCredentialResponseDTO = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); + vcCredentialResponseDTO.setCredential(null); + String credentialString = TestUtilities.getObjectAsString(vcCredentialResponseDTO); + Mockito.when(restApiClient.getApiWithCustomHeaders(Mockito.eq("http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/test"), Mockito.eq(String.class), Mockito.any(HttpHeaders.class))) + .thenReturn(credentialString); + Mockito.when(objectMapper.readValue(credentialString, VCCredentialResponse.class)).thenReturn(vcCredentialResponseDTO); + Mockito.when(objectMapper.readValue(credentialString, DataShareResponseDto.class)).thenReturn(getDataShareResponseDTO("")); + String expectedExceptionMsg = "resource_not_found --> The requested resource expired."; + + InvalidCredentialResourceException actualException = assertThrows(InvalidCredentialResourceException.class, () -> dataShareService.downloadCredentialFromDataShare(presentationRequestDTO)); + + assertEquals(expectedExceptionMsg, actualException.getMessage()); + } + + @Test + public void throwResourceNotFoundExceptionWhenCredentialIsNotFoundInDataShare() throws JsonProcessingException { + VCCredentialResponse vcCredentialResponseDTO = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); + vcCredentialResponseDTO.setCredential(null); + String credentialString = TestUtilities.getObjectAsString(vcCredentialResponseDTO); + Mockito.when(restApiClient.getApiWithCustomHeaders(Mockito.eq("http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/test"), Mockito.eq(String.class), Mockito.any(HttpHeaders.class))) + .thenReturn(credentialString); + Mockito.when(objectMapper.readValue(credentialString, VCCredentialResponse.class)).thenReturn(vcCredentialResponseDTO); + Mockito.when(objectMapper.readValue(credentialString, DataShareResponseDto.class)).thenReturn(getDataShareResponseDTO("DAT-SER-008")); + String expectedExceptionMsg = "resource_not_found --> The requested resource doesn’t exist."; + + InvalidCredentialResourceException actualException = assertThrows(InvalidCredentialResourceException.class, () -> dataShareService.downloadCredentialFromDataShare(presentationRequestDTO)); + + assertEquals(expectedExceptionMsg, actualException.getMessage()); + } } diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index a4354a41c..82047fa81 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -56,7 +56,7 @@ public static CredentialsSupportedResponse getCredentialSupportedResponse(String CredentialDefinitionResponseDto credentialDefinitionResponseDto = new CredentialDefinitionResponseDto(); credentialDefinitionResponseDto.setType(List.of("VerifiableCredential", credentialSupportedName)); - credentialDefinitionResponseDto.setCredentialSubject(Map.of("name", credentialDisplayResponseDtoForName,"email", credentialDisplayResponseDtoForEmail)); + credentialDefinitionResponseDto.setCredentialSubject(Map.of("name", credentialDisplayResponseDtoForName, "email", credentialDisplayResponseDtoForEmail)); CredentialsSupportedResponse credentialsSupportedResponse = new CredentialsSupportedResponse(); credentialsSupportedResponse.setFormat("ldp_vc"); credentialsSupportedResponse.setScope(credentialSupportedName + "_vc_ldp"); @@ -273,6 +273,14 @@ public static VCCredentialResponse getVCCredentialResponseDTO(String type) { .format("ldp_vc").build(); } + public static DataShareResponseDto getDataShareResponseDTO(String errorCode) { + return DataShareResponseDto.builder() + .dataShare(new DataShare()) + .errors(List.of(new ErrorDTO(errorCode == "" ? "Expired!" : errorCode, "Download is failed as credential is expired"))) + .build(); + } + + public static io.mosip.mimoto.dto.idp.TokenResponseDTO getTokenResponseDTO() { return io.mosip.mimoto.dto.idp.TokenResponseDTO.builder() .id_token("test-id-token") From 40dbc60f149aa6e32ca1cb60312457f22de47952 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 17 Feb 2025 11:35:46 +0530 Subject: [PATCH 366/860] [INJIWEB-1429] refactor the variable name which stores the exception message and add spaces between lines in few tests according to AAA rule Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../mosip/mimoto/service/CredentialServiceTest.java | 5 +++-- .../mosip/mimoto/service/PresentationServiceTest.java | 11 +++-------- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java index 135f86283..906bc28ce 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java @@ -132,6 +132,7 @@ public void shouldReturnTrueIfAValidCredentialIsPassedForVerification() throws V Mockito.when(credentialsVerifier.verify(any(String.class), eq(CredentialFormat.LDP_VC))).thenReturn(verificationResult); Mockito.when(objectMapper.writeValueAsString(vc.getCredential())).thenReturn("vc"); Boolean verificationStatus = credentialService.verifyCredential(vc); + assertTrue(verificationStatus); } @@ -141,13 +142,13 @@ public void shouldThrowExceptionIfInvalidCredentialIsPassedForVerification() thr VerificationResult verificationResult = new VerificationResult(false, "Verification failed for the provided credentials", "Verification Failed!"); Mockito.when(credentialsVerifier.verify(any(String.class), eq(CredentialFormat.LDP_VC))).thenReturn(verificationResult); Mockito.when(objectMapper.writeValueAsString(vc.getCredential())).thenReturn("vc"); - String expetcedExceptionMsg = "verification failed! --> Verification failed for the provided credentials"; + String expectedExceptionMsg = "verification failed! --> Verification failed for the provided credentials"; VCVerificationException actualException = assertThrows(VCVerificationException.class, () -> credentialService.verifyCredential(vc) ); - assertEquals(expetcedExceptionMsg,actualException.getMessage()); + assertEquals(expectedExceptionMsg, actualException.getMessage()); } @Test diff --git a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java index 4ad22d40a..9f83e54c5 100644 --- a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java @@ -3,10 +3,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; -import io.mosip.mimoto.dto.openid.presentation.PresentationDefinitionDTO; import io.mosip.mimoto.dto.openid.presentation.PresentationRequestDTO; -import io.mosip.mimoto.exception.ApiNotAccessibleException; -import io.mosip.mimoto.exception.InvalidVerifierException; import io.mosip.mimoto.exception.VPNotCreatedException; import io.mosip.mimoto.service.impl.DataShareServiceImpl; import io.mosip.mimoto.service.impl.PresentationServiceImpl; @@ -46,25 +43,23 @@ public void setup() throws JsonProcessingException { ReflectionTestUtils.setField(presentationService, "maximumResponseHeaderSize", 65536); when(objectMapper.writeValueAsString(any())).thenReturn("test-data"); } + @Test public void credentialProofMatchingWithVPRequest() throws Exception { - VCCredentialResponse vcCredentialResponse = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); - when(dataShareService.downloadCredentialFromDataShare(eq(presentationRequestDTO))).thenReturn(vcCredentialResponse); + String expectedRedirectUrl = "test_redirect_uri#vp_token=dGVzdC1kYXRh&presentation_submission=test-data"; String actualRedirectUrl = presentationService.authorizePresentation(TestUtilities.getPresentationRequestDTO()); - String expectedRedirectUrl = "test_redirect_uri#vp_token=dGVzdC1kYXRh&presentation_submission=test-data"; assertEquals(expectedRedirectUrl, actualRedirectUrl); } @Test(expected = VPNotCreatedException.class) - public void credentialProofMismatchWithVPRequest() throws ApiNotAccessibleException, IOException { + public void credentialProofMismatchWithVPRequest() throws IOException { VCCredentialResponse vcCredentialResponse = TestUtilities.getVCCredentialResponseDTO("RSASignature2020"); PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); - when(dataShareService.downloadCredentialFromDataShare(eq(presentationRequestDTO))).thenReturn(vcCredentialResponse); presentationService.authorizePresentation(TestUtilities.getPresentationRequestDTO()); From 18c61a7eca36dd1255daa7829c7952f0aad79064 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 17 Feb 2025 17:21:54 +0530 Subject: [PATCH 367/860] [INJIWEB-1429] add missing test cases for if else conditions in verifierServiceImpl file Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../mimoto/service/VerifierServiceTest.java | 34 ++++++++++++++++--- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java b/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java index 8f7b5f640..d543756d9 100644 --- a/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java @@ -55,7 +55,7 @@ public void shouldReturnAllTrustedIssuers() throws ApiNotAccessibleException, Js VerifiersDTO actualTrustedVerifiers = verifiersService.getTrustedVerifiers(); assertNotNull(actualTrustedVerifiers); - assertEquals(actualTrustedVerifiers,expectedTrustedVerifiers); + assertEquals(actualTrustedVerifiers, expectedTrustedVerifiers); } @Test @@ -71,6 +71,19 @@ public void getNullWhenInvalidClientIdIsPassed() throws ApiNotAccessibleExceptio assertTrue(verifierDTO.isEmpty()); } + + @Test + public void shouldThrowApiNotAccessibleExceptionOnFetchingTrustedVerifiersListFailure() { + when(utilities.getTrustedVerifiersJsonValue()).thenReturn(null); + String expectedExceptionMsg = "RESIDENT-APP-026 --> Api not accessible failure"; + + ApiNotAccessibleException actualException = assertThrows(ApiNotAccessibleException.class, () -> { + verifiersService.getVerifierByClientId("test-clientId2"); + }); + + assertEquals(expectedExceptionMsg, actualException.getMessage()); + } + @Test public void validateTrustedVerifiersAndDoNothing() throws ApiNotAccessibleException, IOException { PresentationRequestDTO presentationRequestDTO = PresentationRequestDTO.builder().clientId("test-clientId").redirectUri("https://test-redirectUri").build(); @@ -83,9 +96,22 @@ public void validateTrustedVerifiersAndThrowInvalidVerifierExceptionWhenClientId verifiersService.validateVerifier(presentationRequestDTO.getClientId(), presentationRequestDTO.getRedirectUri()); } - @Test(expected = InvalidVerifierException.class) - public void validateTrustedVerifiersAndThrowInvalidVerifiersExceptionWhenRedirectUriIsIncorrect() throws ApiNotAccessibleException, IOException { + @Test + public void validateTrustedVerifiersAndThrowInvalidVerifiersExceptionForAInvalidClientId() throws ApiNotAccessibleException, IOException { PresentationRequestDTO presentationRequestDTO = PresentationRequestDTO.builder().clientId("test-clientId2").redirectUri("https://test-redirectUri").build(); - verifiersService.validateVerifier(presentationRequestDTO.getClientId(), presentationRequestDTO.getRedirectUri()); + String expectedExceptionMsg = "invalid_client --> The requested client doesn’t match."; + InvalidVerifierException actualException = assertThrows(InvalidVerifierException.class, () -> verifiersService.validateVerifier(presentationRequestDTO.getClientId(), presentationRequestDTO.getRedirectUri())); + + assertEquals(expectedExceptionMsg, actualException.getMessage()); + } + + @Test + public void validateTrustedVerifiersAndThrowInvalidVerifiersExceptionWhenClientIdIsValidAndRedirectUriIsIncorrect() throws ApiNotAccessibleException, IOException { + PresentationRequestDTO presentationRequestDTO = PresentationRequestDTO.builder().clientId("test-clientId").redirectUri("https://test-redirectUri/invalid-uri").build(); + String expectedExceptionMsg = "invalid_redirect_uri --> The requested redirect uri doesn’t match."; + + InvalidVerifierException actualException = assertThrows(InvalidVerifierException.class, () -> verifiersService.validateVerifier(presentationRequestDTO.getClientId(), presentationRequestDTO.getRedirectUri())); + + assertEquals(expectedExceptionMsg, actualException.getMessage()); } } From 1c95d89f54950b1559e3ccc8a239a685d458613b Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 17 Feb 2025 19:03:51 +0530 Subject: [PATCH 368/860] [INJIWEB-1429] fix the failing test in issuersServiceTest file Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java index b95039dfe..d1a1245f5 100644 --- a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java @@ -160,8 +160,10 @@ public void shouldReturnOnlyEnabledIssuers() throws IOException, ApiNotAccessibl IssuerDTO enabledIssuer = getIssuerConfigDTO("Issuer1"); IssuerDTO disabledIssuer = getIssuerConfigDTO("Issuer2"); disabledIssuer.setEnabled("false"); + issuersConfigJsonValue = new Gson().toJson(issuers); issuers.setIssuers(List.of(enabledIssuer, disabledIssuer)); - Mockito.when(utilities.getIssuersConfigJsonValue()).thenReturn(new Gson().toJson(issuers)); + Mockito.when(utilities.getIssuersConfigJsonValue()).thenReturn(issuersConfigJsonValue); + Mockito.when(objectMapper.readValue(issuersConfigJsonValue, IssuersDTO.class)).thenReturn(issuers); IssuersDTO expectedIssuersDTO = new IssuersDTO(); expectedIssuersDTO.setIssuers(List.of(enabledIssuer)); From 9f6d4adb62257ba1be1a825e3007c2373df8aa89 Mon Sep 17 00:00:00 2001 From: ckm007 Date: Mon, 17 Feb 2025 19:07:28 +0530 Subject: [PATCH 369/860] [MOSIP-39656] added google client secret as env variables Signed-off-by: ckm007 --- deploy/mimoto/install.sh | 12 ++++++------ helm/mimoto/values.yaml | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/deploy/mimoto/install.sh b/deploy/mimoto/install.sh index 9e279370f..8e91a2b97 100755 --- a/deploy/mimoto/install.sh +++ b/deploy/mimoto/install.sh @@ -30,7 +30,7 @@ function installing_mimoto() { echo "Do you have public domain & valid SSL? (Y/n) " echo "Y: if you have public domain & valid ssl certificate" echo "n: If you don't have a public domain and a valid SSL certificate. Note: It is recommended to use this option only in development environments." - read -p -r "" flag + read -p "" flag if [ -z "$flag" ]; then echo "'flag' was not provided; EXITING;" @@ -55,15 +55,15 @@ function installing_mimoto() { kubectl -n config-server rollout restart deployment config-server kubectl -n config-server rollout status deployment config-server - echo "Please share relevant google client id "> - read -p -r "" clientId + echo "Please share relevant google client id " + read -p "" clientId if [ -z "$clientId" ]; then echo "'clientId' was not provided; EXITING;" exit 1; fi echo "Please share relevant google secret key" - read -p -r "" secretKey + read -p "" secretKey if [ -z "$secretKey" ]; then echo "'secretKey' was not provided; EXITING;" @@ -73,8 +73,8 @@ function installing_mimoto() { echo Installing mimoto helm -n $NS install mimoto mosip/mimoto --version $MIMOTO_CHART_VERSION $ENABLE_INSECURE \ - --set mimoto.secrets.googleClient.MOSIP_INJIWEB_GOOGLE_CLIENT_ID="$clientId" \ - --set mimoto.secrets.googleClient.MOSIP_INJIWEB_GOOGLE_CLIENT_SECRET="$secretKey" + --set mimoto.secrets.google-client.MOSIP_INJIWEB_GOOGLE_CLIENT_ID="$clientId" \ + --set mimoto.secrets.google-client.MOSIP_INJIWEB_GOOGLE_CLIENT_SECRET="$secretKey" kubectl -n $NS get deploy -o name | xargs -n1 -t kubectl -n $NS rollout status diff --git a/helm/mimoto/values.yaml b/helm/mimoto/values.yaml index 205af39f9..ba5ded9d2 100644 --- a/helm/mimoto/values.yaml +++ b/helm/mimoto/values.yaml @@ -252,7 +252,7 @@ extraEnvVarsCM: ## Secret with extra environment variables ## extraEnvVarsSecret: - - googleClient + - google-client ## Extra volumes to add to the deployment ## @@ -472,6 +472,6 @@ volumes: mimoto: secrets: - googleClient: + google-client: MOSIP_INJIWEB_GOOGLE_CLIENT_ID: "your-app-google-client-id" MOSIP_INJIWEB_GOOGLE_CLIENT_SECRET: "your-app-google-client-secret" From 92104f9adc61c50f123d7a95b5cadeb477ab630b Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 17 Feb 2025 19:16:49 +0530 Subject: [PATCH 370/860] [INJIWEB-1429] remove redundant logic of fetching trusted verifiers list in getVerifierByClientId method and use getTrustedVerifiers method Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../io/mosip/mimoto/service/impl/VerifierServiceImpl.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java index dd13c96e8..127244e51 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java @@ -52,11 +52,7 @@ public VerifiersDTO getTrustedVerifiers() throws ApiNotAccessibleException, Json } public Optional getVerifierByClientId(String clientId) throws ApiNotAccessibleException, JsonProcessingException { - String trustedVerifiersJsonValue = utilities.getTrustedVerifiersJsonValue(); - if (trustedVerifiersJsonValue == null) { - throw new ApiNotAccessibleException(); - } - VerifiersDTO verifiersDTO = objectMapper.readValue(trustedVerifiersJsonValue, VerifiersDTO.class); + VerifiersDTO verifiersDTO = getTrustedVerifiers(); return verifiersDTO.getVerifiers().stream().filter(verifier -> verifier.getClientId().equals(clientId)).findFirst(); } From 18d114791d5aebfb9d3dea44fcf11788e93a3ca0 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 17 Feb 2025 22:22:34 +0530 Subject: [PATCH 371/860] [INJIWEB-1429] add a test case in credentialServiceTest to test if any error during the credential endpoint call is getting caught or not Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../service/impl/CredentialServiceImpl.java | 25 ++++++------ .../mimoto/service/CredentialServiceTest.java | 25 ++++++++++-- .../io/mosip/mimoto/util/TestUtilities.java | 39 +++++++++++++++++-- 3 files changed, 68 insertions(+), 21 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java index b63e19f75..83e138571 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java @@ -264,20 +264,19 @@ private Map getPdfResourceFromVcProperties(LinkedHashMap castedList = (List) list; - if (castedList.isEmpty()) return ""; - if (castedList.get(0) instanceof String) { - return castedList.stream().map(String.class::cast).collect(Collectors.joining(", ")); - } else if (castedList.get(0) instanceof Map) { - return ((List>) castedList).stream() - .filter(obj -> LocaleUtils.matchesLocale(obj.get("language").toString(), locale)) - .map(obj -> obj.get("value").toString()) - .findFirst() - .orElse(""); - } + List castedList = (List) list; + String response = ""; + if (castedList.isEmpty()) return ""; + if (castedList.get(0) instanceof String) { + response = castedList.stream().map(String.class::cast).collect(Collectors.joining(", ")); + } else if (castedList.get(0) instanceof Map) { + response = ((List>) castedList).stream() + .filter(obj -> LocaleUtils.matchesLocale(obj.get("language").toString(), locale)) + .map(obj -> obj.get("value").toString()) + .findFirst() + .orElse(""); } - return ""; + return response; } private String handleMap(Object map) { diff --git a/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java index 906bc28ce..f0c67f134 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java @@ -30,6 +30,7 @@ import org.mockito.junit.MockitoJUnitRunner; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.HttpEntity; +import org.springframework.http.MediaType; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; @@ -82,7 +83,7 @@ public class CredentialServiceTest { ); TokenResponseDTO expectedTokenResponse; - String tokenEndpoint, issuerId; + String tokenEndpoint, issuerId, expectedExceptionMsg; IssuerDTO issuerDTO; HttpEntity> mockRequest; CredentialIssuerConfigurationResponse issuerConfig; @@ -142,7 +143,7 @@ public void shouldThrowExceptionIfInvalidCredentialIsPassedForVerification() thr VerificationResult verificationResult = new VerificationResult(false, "Verification failed for the provided credentials", "Verification Failed!"); Mockito.when(credentialsVerifier.verify(any(String.class), eq(CredentialFormat.LDP_VC))).thenReturn(verificationResult); Mockito.when(objectMapper.writeValueAsString(vc.getCredential())).thenReturn("vc"); - String expectedExceptionMsg = "verification failed! --> Verification failed for the provided credentials"; + expectedExceptionMsg = "verification failed! --> Verification failed for the provided credentials"; VCVerificationException actualException = assertThrows(VCVerificationException.class, () -> credentialService.verifyCredential(vc) @@ -171,14 +172,30 @@ public void shouldThrowExceptionIfResponseIsNullWhenFetchingTokenResponse() thro assertEquals("RESIDENT-APP-034 --> Exception occurred while performing the authorization", actualException.getMessage()); } + @Test + public void shouldThrowExceptionOnFetchingCredentialFromCredentialEndpointFailure() { + CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupportedResponse("CredentialType1"); + CredentialIssuerWellKnownResponse issuerWellKnownResponse = getCredentialIssuerWellKnownResponseDto(issuerId, Map.of("CredentialType1", credentialsSupportedResponse)); + VCCredentialRequest vcCredentialRequest = getVCCredentialRequestDTO(); + Mockito.when(restApiClient.postApi(issuerWellKnownResponse.getCredentialEndPoint(), MediaType.APPLICATION_JSON, vcCredentialRequest, VCCredentialResponse.class, "test-access-token")).thenReturn(null); + String credentialEndpoint = issuerWellKnownResponse.getCredentialEndPoint(); + expectedExceptionMsg = "VC Credential Issue API not accessible"; + + + RuntimeException actualException = assertThrows(RuntimeException.class, () -> { + credentialService.downloadCredential(credentialEndpoint, vcCredentialRequest, "test-access-token"); + }); + + assertEquals(expectedExceptionMsg, actualException.getMessage()); + } + @Test public void shouldReturnVCCredentialWhenCallingCredentialEndpointWithCredentialRequest() { CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupportedResponse("CredentialType1"); CredentialIssuerWellKnownResponse issuerWellKnownResponse = getCredentialIssuerWellKnownResponseDto(issuerId, Map.of("CredentialType1", credentialsSupportedResponse)); VCCredentialRequest vcCredentialRequest = getVCCredentialRequestDTO(); VCCredentialResponse expectedCredentialResponse = getVCCredentialResponseDTO("RSASignature2020"); - Mockito.when(restApiClient.postApi(any(), any(), - any(), any(), any())).thenReturn(expectedCredentialResponse); + Mockito.when(restApiClient.postApi(issuerWellKnownResponse.getCredentialEndPoint(), MediaType.APPLICATION_JSON, vcCredentialRequest, VCCredentialResponse.class, "test-access-token")).thenReturn(expectedCredentialResponse); VCCredentialResponse actualCredentialResponse = credentialService.downloadCredential(issuerWellKnownResponse.getCredentialEndPoint(), vcCredentialRequest, "test-access-token"); diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index 82047fa81..8e98c60de 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -16,6 +16,7 @@ import io.mosip.mimoto.dto.openid.datashare.DataShareResponseWrapperDTO; import io.mosip.mimoto.dto.openid.presentation.*; import org.springframework.util.ResourceUtils; + import java.io.InputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -26,6 +27,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; + import com.itextpdf.kernel.pdf.canvas.parser.PdfTextExtractor; public class TestUtilities { @@ -54,9 +56,26 @@ public static CredentialsSupportedResponse getCredentialSupportedResponse(String CredentialDisplayResponseDto credentialDisplayResponseDtoForEmail = new CredentialDisplayResponseDto(); credentialDisplayResponseDtoForEmail.setDisplay(List.of(credentialIssuerDisplayResponseForEmail)); + CredentialIssuerDisplayResponse credentialIssuerDisplayResponseForUIN = new CredentialIssuerDisplayResponse(); + credentialIssuerDisplayResponseForUIN.setName("UIN"); + credentialIssuerDisplayResponseForUIN.setLocale("en"); + CredentialDisplayResponseDto credentialDisplayResponseDtoForUIN = new CredentialDisplayResponseDto(); + credentialDisplayResponseDtoForUIN.setDisplay(List.of(credentialIssuerDisplayResponseForUIN)); + + CredentialIssuerDisplayResponse credentialIssuerDisplayResponseForDOB = new CredentialIssuerDisplayResponse(); + credentialIssuerDisplayResponseForDOB.setName("dob"); + credentialIssuerDisplayResponseForDOB.setLocale("en"); + CredentialDisplayResponseDto credentialDisplayResponseDtoForDOB = new CredentialDisplayResponseDto(); + credentialDisplayResponseDtoForDOB.setDisplay(List.of(credentialIssuerDisplayResponseForDOB)); + + CredentialDefinitionResponseDto credentialDefinitionResponseDto = new CredentialDefinitionResponseDto(); credentialDefinitionResponseDto.setType(List.of("VerifiableCredential", credentialSupportedName)); - credentialDefinitionResponseDto.setCredentialSubject(Map.of("name", credentialDisplayResponseDtoForName, "email", credentialDisplayResponseDtoForEmail)); + credentialDefinitionResponseDto.setCredentialSubject(Map.of( + "name", createCredentialDisplayResponse("Given Name", "en"), + "email", createCredentialDisplayResponse("Given Email", "pt"), + "uin", createCredentialDisplayResponse("UIN", "en"), + "dob", createCredentialDisplayResponse("dob", "en"))); CredentialsSupportedResponse credentialsSupportedResponse = new CredentialsSupportedResponse(); credentialsSupportedResponse.setFormat("ldp_vc"); credentialsSupportedResponse.setScope(credentialSupportedName + "_vc_ldp"); @@ -70,6 +89,17 @@ public static CredentialsSupportedResponse getCredentialSupportedResponse(String return credentialsSupportedResponse; } + private static CredentialDisplayResponseDto createCredentialDisplayResponse(String name, String locale) { + CredentialIssuerDisplayResponse issuerDisplayResponse = new CredentialIssuerDisplayResponse(); + issuerDisplayResponse.setName(name); + issuerDisplayResponse.setLocale(locale); + + CredentialDisplayResponseDto displayResponseDto = new CredentialDisplayResponseDto(); + displayResponseDto.setDisplay(List.of(issuerDisplayResponse)); + + return displayResponseDto; + } + public static CredentialsSupportedResponse getCredentialSupportedResponse(String credentialSupportedName, String format) { LogoDTO logo = new LogoDTO(); logo.setUrl("https://logo"); @@ -230,9 +260,10 @@ public static VCCredentialProperties getVCCredentialPropertiesDTO(String type) { typeList.add("VCTypeCredential"); Map credentialSubject = new HashMap<>(); - - credentialSubject.put("name", Map.of("name", "full name", "locale", "en")); - credentialSubject.put("email", Map.of("locale", "en")); + credentialSubject.put("name", List.of(Map.of("value", "full name", "language", "en"))); + credentialSubject.put("email", "@gmail.com"); + credentialSubject.put("uin", "2144641120"); + credentialSubject.put("dob", ""); VCCredentialResponseProof vcCredentialResponseProof = VCCredentialResponseProof.builder() .type(type) From e6b05e874d49b97f3a45ddd0b96c02a62b6118a5 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 18 Feb 2025 00:52:50 +0530 Subject: [PATCH 372/860] [INJIWEB-1429] write test cases for response wrapper class Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../mimoto/core/http/ResponseWrapperTest.java | 160 ++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 src/test/java/io/mosip/mimoto/core/http/ResponseWrapperTest.java diff --git a/src/test/java/io/mosip/mimoto/core/http/ResponseWrapperTest.java b/src/test/java/io/mosip/mimoto/core/http/ResponseWrapperTest.java new file mode 100644 index 000000000..491369366 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/core/http/ResponseWrapperTest.java @@ -0,0 +1,160 @@ +package io.mosip.mimoto.core.http; + +import io.mosip.mimoto.dto.ErrorDTO; +import jakarta.validation.Validator; +import lombok.extern.slf4j.Slf4j; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + + +// Example DTO for testing +class TestDTO { + private String name; + + public TestDTO(String name) { + this.name = name; + } +} + +@RunWith(MockitoJUnitRunner.class) +@SpringBootTest +@Slf4j +public class ResponseWrapperTest { + + @Autowired + private Validator validator; + TestDTO testDTO, testDTO1, testDTO2; + + @Before + public void setUp() { + testDTO = new TestDTO("test-name"); + testDTO1 = new TestDTO("test-name"); + testDTO2 = new TestDTO("test-name"); + } + + @Test + public void testResponseWrapper_withValidResponse() { + ResponseWrapper wrapper = new ResponseWrapper<>(); + wrapper.setResponse(testDTO); + + assertThat(wrapper.getResponse()).isEqualTo(testDTO); + assertThat(wrapper.getErrors()).isEmpty(); + } + + @Test + public void testResponseWrapper_withNullResponse() { + ResponseWrapper wrapper = new ResponseWrapper<>(); + wrapper.setResponse(null); + + assertThrows(NullPointerException.class, () -> validator.validate(wrapper)); + } + + + @Test + public void testResponseWrapper_withErrors() { + ResponseWrapper wrapper = new ResponseWrapper<>(); + ErrorDTO error1 = new ErrorDTO("error code 1", "error message 1"); + ErrorDTO error2 = new ErrorDTO("error code 2", "error message 2"); + wrapper.setErrors(List.of(error1, error2)); + + assertThat(wrapper.getResponse()).isNull(); + assertThat(wrapper.getErrors()).hasSize(2); + assertThat(wrapper.getErrors()).containsExactly(error1, error2); + } + + @Test + public void testResponseWrapper_emptyConstructor() { + ResponseWrapper wrapper = new ResponseWrapper<>(); + + assertThat(wrapper.getErrors()).isEmpty(); + assertThat(wrapper.getResponse()).isNull(); + } + + @Test + public void testHashCodeForEqualObjects() { + ResponseWrapper wrapper1 = new ResponseWrapper<>(); + wrapper1.setResponse(testDTO); + + ResponseWrapper wrapper2 = new ResponseWrapper<>(); + wrapper2.setResponse(testDTO); + + assertThat(wrapper1.hashCode()).isEqualTo(wrapper2.hashCode()); + } + + @Test + public void testHashCodeForDifferentObjects() { + ResponseWrapper wrapper1 = new ResponseWrapper<>(); + wrapper1.setResponse(testDTO1); + + ResponseWrapper wrapper2 = new ResponseWrapper<>(); + wrapper2.setResponse(testDTO2); + + assertThat(wrapper1.hashCode()).isNotEqualTo(wrapper2.hashCode()); + } + + @Test + public void testCanEqual() { + ResponseWrapper wrapper1 = new ResponseWrapper<>(); + wrapper1.setResponse(testDTO1); + + ResponseWrapper wrapper2 = new ResponseWrapper<>(); + wrapper2.setResponse(testDTO2); + + assertThat(wrapper1.canEqual(wrapper2)).isTrue(); + assertThat(wrapper1.canEqual(new Object())).isFalse(); + } + + @Test + public void testEqualsForTwoObjectsWithDifferentContent() { + ResponseWrapper wrapper1 = new ResponseWrapper<>(); + wrapper1.setResponse(testDTO); + + ResponseWrapper wrapper2 = new ResponseWrapper<>(); + wrapper2.setResponse(testDTO); + + assertThat(wrapper1.equals(wrapper2)).isTrue(); + } + + @Test + public void testEqualsForTwoObjectsWithSameContent() { + ResponseWrapper wrapper1 = new ResponseWrapper<>(); + wrapper1.setResponse(testDTO1); + + ResponseWrapper wrapper2 = new ResponseWrapper<>(); + wrapper2.setResponse(testDTO2); + + assertThat(wrapper1.equals(wrapper2)).isFalse(); + } + + @Test + public void testObjectToStringConversionForSuccessScenario() { + ResponseWrapper person = new ResponseWrapper<>(); + person.setResponse("Hello world"); + String expectedString = "ResponseWrapper(response=Hello world, errors=[])"; + + String actualString = person.toString(); + + assertEquals(expectedString, actualString); + } + + @Test + public void testObjectToStringConversionForErrorScenario() { + ResponseWrapper person = new ResponseWrapper<>(); + person.setErrors(List.of(new ErrorDTO("code", "message"))); + String expectedString = "ResponseWrapper(response=null, errors=[ErrorDTO(errorCode=code, errorMessage=message)])"; + + String actualString = person.toString(); + + assertEquals(expectedString, actualString); + } +} \ No newline at end of file From 6e179e797128a05dcb254b22ae9a1cdf38b020eb Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 18 Feb 2025 01:11:44 +0530 Subject: [PATCH 373/860] [INJIWEB-1429] remove logger library import in response wrapper test file Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../java/io/mosip/mimoto/core/http/ResponseWrapperTest.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/test/java/io/mosip/mimoto/core/http/ResponseWrapperTest.java b/src/test/java/io/mosip/mimoto/core/http/ResponseWrapperTest.java index 491369366..a053500f2 100644 --- a/src/test/java/io/mosip/mimoto/core/http/ResponseWrapperTest.java +++ b/src/test/java/io/mosip/mimoto/core/http/ResponseWrapperTest.java @@ -2,16 +2,13 @@ import io.mosip.mimoto.dto.ErrorDTO; import jakarta.validation.Validator; -import lombok.extern.slf4j.Slf4j; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.junit.MockitoJUnitRunner; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; - import java.util.List; - import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -28,7 +25,6 @@ public TestDTO(String name) { @RunWith(MockitoJUnitRunner.class) @SpringBootTest -@Slf4j public class ResponseWrapperTest { @Autowired From 16b3ee613b92e47217ac1ddb733d0d7271a5aad8 Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Tue, 18 Feb 2025 13:04:51 +0530 Subject: [PATCH 374/860] MOSIP-39719 Signed-off-by: Nandhukumar --- api-test/pom.xml | 2 +- .../apirig/mimoto/testrunner/MosipTestRunner.java | 13 +++++++------ .../apirig/mimoto/utils/MimotoConfigManager.java | 4 ++++ .../testrig/apirig/mimoto/utils/MimotoUtil.java | 8 ++++++++ 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/api-test/pom.xml b/api-test/pom.xml index 7d73160ed..cbc8010e4 100644 --- a/api-test/pom.xml +++ b/api-test/pom.xml @@ -56,7 +56,7 @@ io.mosip.testrig.apitest.commons apitest-commons - 1.3.1 + 1.3.2-SNAPSHOT diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java index 55a7bc0fe..05ae7bcd1 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java @@ -26,6 +26,7 @@ import io.mosip.testrig.apirig.dataprovider.BiometricDataProvider; import io.mosip.testrig.apirig.dbaccess.DBManager; import io.mosip.testrig.apirig.mimoto.utils.MimotoConfigManager; +import io.mosip.testrig.apirig.mimoto.utils.MimotoUtil; import io.mosip.testrig.apirig.report.EmailableReport; import io.mosip.testrig.apirig.testrunner.BaseTestCase; import io.mosip.testrig.apirig.testrunner.ExtractResource; @@ -36,6 +37,7 @@ import io.mosip.testrig.apirig.utils.CertsUtil; import io.mosip.testrig.apirig.utils.GlobalConstants; import io.mosip.testrig.apirig.utils.JWKKeyUtil; +import io.mosip.testrig.apirig.utils.KernelAuthentication; import io.mosip.testrig.apirig.utils.KeyCloakUserAndAPIKeyGeneration; import io.mosip.testrig.apirig.utils.KeycloakUserManager; import io.mosip.testrig.apirig.utils.MispPartnerAndLicenseKeyGeneration; @@ -65,12 +67,8 @@ public class MosipTestRunner { public static void main(String[] arg) { try { - - Map envMap = System.getenv(); - LOGGER.info("** ------------- Get ALL ENV varibales --------------------------------------------- **"); - for (String envName : envMap.keySet()) { - LOGGER.info(String.format("ENV %s = %s%n", envName, envMap.get(envName))); - } + LOGGER.info("** ------------- API Test Rig Run Started --------------------------------------------- **"); + BaseTestCase.setRunContext(getRunType(), jarUrl); ExtractResource.removeOldMosipTestTestResource(); if (getRunType().equalsIgnoreCase("JAR")) { @@ -154,6 +152,9 @@ private static void setLogLevels() { MispPartnerAndLicenseKeyGeneration.setLogLevel(); JWKKeyUtil.setLogLevel(); CertsUtil.setLogLevel(); + KernelAuthentication.setLogLevel(); + BaseTestCase.setLogLevel(); + MimotoUtil.setLogLevel(); } /** diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java index 3050fe84c..19b70726f 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java @@ -4,6 +4,7 @@ import java.util.Map; import java.util.Properties; +import org.apache.log4j.Level; import org.apache.log4j.Logger; import io.mosip.testrig.apirig.mimoto.testrunner.MosipTestRunner; @@ -13,6 +14,9 @@ public class MimotoConfigManager extends ConfigManager{ private static final Logger LOGGER = Logger.getLogger(MimotoConfigManager.class); public static void init() { + Logger configManagerLogger = Logger.getLogger(ConfigManager.class); + configManagerLogger.setLevel(Level.WARN); + Map moduleSpecificPropertiesMap = new HashMap<>(); // Load scope specific properties try { diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java index 19661928f..3dcc7863d 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java @@ -6,6 +6,7 @@ import java.security.PublicKey; import java.util.HashMap; +import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.bouncycastle.openssl.jcajce.JcaPEMWriter; import org.json.JSONObject; @@ -23,6 +24,13 @@ public class MimotoUtil extends AdminTestUtil { private static final Logger logger = Logger.getLogger(MimotoUtil.class); private static String otpEnabled = "true"; + + public static void setLogLevel() { + if (MimotoConfigManager.IsDebugEnabled()) + logger.setLevel(Level.ALL); + else + logger.setLevel(Level.ERROR); + } public static String isOTPEnabled() { String value = getValueFromMimotoActuator("/mimoto-default.properties", "mosip.otp.download.enable").isBlank() From f15d28f03cb1cd81eeec3c1135e58216fe327698 Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Tue, 18 Feb 2025 13:57:08 +0530 Subject: [PATCH 375/860] MOSIP-39126 Signed-off-by: Nandhukumar --- .../mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java index 05ae7bcd1..4db69797d 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java @@ -36,6 +36,7 @@ import io.mosip.testrig.apirig.utils.AuthTestsUtil; import io.mosip.testrig.apirig.utils.CertsUtil; import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.GlobalMethods; import io.mosip.testrig.apirig.utils.JWKKeyUtil; import io.mosip.testrig.apirig.utils.KernelAuthentication; import io.mosip.testrig.apirig.utils.KeyCloakUserAndAPIKeyGeneration; @@ -80,6 +81,7 @@ public static void main(String[] arg) { MimotoConfigManager.init(); suiteSetup(getRunType()); SkipTestCaseHandler.loadTestcaseToBeSkippedList("testCaseSkippedList.txt"); + GlobalMethods.setModuleNameAndReCompilePattern(MimotoConfigManager.getproperty("moduleNamePattern")); setLogLevels(); // For now we are not doing health check for qa-115. From d208403781ff2f52a9d488589471d306185cb72a Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 18 Feb 2025 16:38:24 +0530 Subject: [PATCH 376/860] [INJIWEB-1429] add test cases for request wrapper and update response wrapper tests Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../mimoto/core/http/RequestWrapperTest.java | 159 ++++++++++++++++++ .../mimoto/core/http/ResponseWrapperTest.java | 110 ++++-------- .../mimoto/core/http/dto/RequestDTO.java | 11 ++ .../mimoto/core/http/dto/ResponseDTO.java | 10 ++ 4 files changed, 217 insertions(+), 73 deletions(-) create mode 100644 src/test/java/io/mosip/mimoto/core/http/RequestWrapperTest.java create mode 100644 src/test/java/io/mosip/mimoto/core/http/dto/RequestDTO.java create mode 100644 src/test/java/io/mosip/mimoto/core/http/dto/ResponseDTO.java diff --git a/src/test/java/io/mosip/mimoto/core/http/RequestWrapperTest.java b/src/test/java/io/mosip/mimoto/core/http/RequestWrapperTest.java new file mode 100644 index 000000000..6a8e39261 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/core/http/RequestWrapperTest.java @@ -0,0 +1,159 @@ +package io.mosip.mimoto.core.http; + +import io.mosip.mimoto.core.http.dto.RequestDTO; +import jakarta.validation.Validator; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +@RunWith(MockitoJUnitRunner.class) +@SpringBootTest +public class RequestWrapperTest { + @Autowired + private Validator validator; + + RequestDTO requestDTO1, requestDTO2; + String id, version, requestTime; + Object metadata; + + RequestWrapper wrapper1, wrapper2; + + @Before + public void setUp() { + id = "id1"; + version = "v1"; + requestTime = "time1"; + metadata = "metadata1"; + requestDTO1 = new RequestDTO("data"); + wrapper1 = new RequestWrapper<>(); + wrapper1.setRequest(requestDTO1); + wrapper1.setId(id); + wrapper1.setVersion(version); + wrapper1.setRequesttime(requestTime); + wrapper1.setMetadata(metadata); + requestDTO2 = new RequestDTO("data"); + wrapper2 = new RequestWrapper<>(); + wrapper2.setRequest(requestDTO2); + wrapper2.setId(id); + wrapper2.setVersion(version); + wrapper2.setRequesttime(requestTime); + wrapper2.setMetadata(metadata); + } + + @Test + public void testRequestWrapperWithValidData() { + assertThat(wrapper1) + .extracting("id", "version", "requesttime", "metadata", "request") + .containsExactly(id, version, requestTime, metadata, requestDTO1); + } + + @Test + public void testRequestWrapperWithNullRequest() { + wrapper1.setRequesttime(null); + + assertThrows(NullPointerException.class, () -> validator.validate(wrapper1)); + } + + @Test + public void testRequestWrapperEmptyConstructor() { + wrapper1 = new RequestWrapper<>(); + + assertThat(wrapper1) + .extracting("id", "version", "requesttime", "metadata", "request") + .containsExactly(null, null, null, null, null); + } + + @Test + public void testHashCodeForEqualObjects() { + wrapper2.setRequest(requestDTO1); + + assertThat(wrapper1.hashCode()).isEqualTo(wrapper2.hashCode()); + } + + @Test + public void testHashCodeForDifferentObjects() { + assertThat(wrapper1.hashCode()).isNotEqualTo(wrapper2.hashCode()); + } + + @Test + public void testCanEqual() { + assertThat(wrapper1.canEqual(wrapper2)).isTrue(); + assertThat(wrapper1.canEqual(new Object())).isFalse(); + } + + @Test + public void testEqualsForTwoWrapperObjectsWithSameTestDTOs() { + wrapper2.setRequest(requestDTO1); + + assertThat(wrapper1.equals(wrapper2)).isTrue(); + } + + @Test + public void testEqualsForTwoWrapperObjectsWithDifferentTestDTOs() { + assertThat(wrapper1.equals(wrapper2)).isFalse(); + } + + @Test + public void testObjectToStringConversionForSuccessScenario() { + assertThat(wrapper1.toString()) + .isNotNull() + .contains("id=id1") + .contains("version=v1") + .contains("requesttime=time1") + .contains("metadata=metadata1") + .contains("request=io.mosip.mimoto.core.http.dto.RequestDTO@"); + } + + @Test + public void testObjectToStringConversionWhenRequestIsNull() { + wrapper1.setRequest(null); + String expectedString = "RequestWrapper(id=id1, version=v1, requesttime=time1, metadata=metadata1, request=null)"; + + String actualString = wrapper1.toString(); + + assertEquals(expectedString, actualString); + } + + @Test + public void testEqualsForTwoWrapperObjectsWithDifferentRequests() { + assertThat(wrapper1).isNotEqualTo(wrapper2); + } + + @Test + public void testEqualsForTwoWrapperObjectsWithDifferentIds() { + wrapper2.setId("id2"); + wrapper2.setRequest(requestDTO1); + + assertThat(wrapper1).isNotEqualTo(wrapper2); + } + + @Test + public void testEqualsForTwoWrapperObjectsWithDifferentVersions() { + wrapper2.setVersion("v2"); + wrapper2.setRequest(requestDTO1); + + assertThat(wrapper1).isNotEqualTo(wrapper2); + } + + @Test + public void testEqualsForTwoWrapperObjectsWithDifferentRequestTimes() { + wrapper2.setRequesttime("time2"); + wrapper2.setRequest(requestDTO1); + + assertThat(wrapper1).isNotEqualTo(wrapper2); + } + + @Test + public void testEqualsForTwoWrapperObjectsWithDifferentMetadata() { + wrapper2.setMetadata("metadata2"); + wrapper2.setRequest(requestDTO1); + + assertThat(wrapper1).isNotEqualTo(wrapper2); + } +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/core/http/ResponseWrapperTest.java b/src/test/java/io/mosip/mimoto/core/http/ResponseWrapperTest.java index a053500f2..db5cf92a1 100644 --- a/src/test/java/io/mosip/mimoto/core/http/ResponseWrapperTest.java +++ b/src/test/java/io/mosip/mimoto/core/http/ResponseWrapperTest.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.core.http; +import io.mosip.mimoto.core.http.dto.ResponseDTO; import io.mosip.mimoto.dto.ErrorDTO; import jakarta.validation.Validator; import org.junit.Before; @@ -14,142 +15,105 @@ import static org.junit.jupiter.api.Assertions.assertThrows; -// Example DTO for testing -class TestDTO { - private String name; - - public TestDTO(String name) { - this.name = name; - } -} - @RunWith(MockitoJUnitRunner.class) @SpringBootTest public class ResponseWrapperTest { @Autowired private Validator validator; - TestDTO testDTO, testDTO1, testDTO2; + ResponseDTO responseDTO1, responseDTO2; + ResponseWrapper wrapper1, wrapper2; @Before public void setUp() { - testDTO = new TestDTO("test-name"); - testDTO1 = new TestDTO("test-name"); - testDTO2 = new TestDTO("test-name"); + responseDTO1 = new ResponseDTO("test-name"); + responseDTO2 = new ResponseDTO("test-name"); + wrapper1 = new ResponseWrapper<>(); + wrapper1.setResponse(responseDTO1); + wrapper2 = new ResponseWrapper<>(); + wrapper2.setResponse(responseDTO2); } @Test - public void testResponseWrapper_withValidResponse() { - ResponseWrapper wrapper = new ResponseWrapper<>(); - wrapper.setResponse(testDTO); - - assertThat(wrapper.getResponse()).isEqualTo(testDTO); - assertThat(wrapper.getErrors()).isEmpty(); + public void testResponseWrapperWithValidResponse() { + assertThat(wrapper1.getResponse()).isEqualTo(responseDTO1); + assertThat(wrapper1.getErrors()).isEmpty(); } @Test - public void testResponseWrapper_withNullResponse() { - ResponseWrapper wrapper = new ResponseWrapper<>(); - wrapper.setResponse(null); + public void testResponseWrapperWithNullResponse() { + wrapper1.setResponse(null); - assertThrows(NullPointerException.class, () -> validator.validate(wrapper)); + assertThrows(NullPointerException.class, () -> validator.validate(wrapper1)); } @Test - public void testResponseWrapper_withErrors() { - ResponseWrapper wrapper = new ResponseWrapper<>(); + public void testResponseWrapperWithErrors() { + wrapper1.setResponse(null); ErrorDTO error1 = new ErrorDTO("error code 1", "error message 1"); ErrorDTO error2 = new ErrorDTO("error code 2", "error message 2"); - wrapper.setErrors(List.of(error1, error2)); - assertThat(wrapper.getResponse()).isNull(); - assertThat(wrapper.getErrors()).hasSize(2); - assertThat(wrapper.getErrors()).containsExactly(error1, error2); + wrapper1.setErrors(List.of(error1, error2)); + + assertThat(wrapper1.getResponse()).isNull(); + assertThat(wrapper1.getErrors()).hasSize(2); + assertThat(wrapper1.getErrors()).containsExactly(error1, error2); } @Test - public void testResponseWrapper_emptyConstructor() { - ResponseWrapper wrapper = new ResponseWrapper<>(); + public void testResponseWrapperEmptyConstructor() { + wrapper1 = new ResponseWrapper<>(); - assertThat(wrapper.getErrors()).isEmpty(); - assertThat(wrapper.getResponse()).isNull(); + assertThat(wrapper1.getErrors()).isEmpty(); + assertThat(wrapper1.getResponse()).isNull(); } @Test public void testHashCodeForEqualObjects() { - ResponseWrapper wrapper1 = new ResponseWrapper<>(); - wrapper1.setResponse(testDTO); - - ResponseWrapper wrapper2 = new ResponseWrapper<>(); - wrapper2.setResponse(testDTO); + wrapper2.setResponse(responseDTO1); assertThat(wrapper1.hashCode()).isEqualTo(wrapper2.hashCode()); } @Test public void testHashCodeForDifferentObjects() { - ResponseWrapper wrapper1 = new ResponseWrapper<>(); - wrapper1.setResponse(testDTO1); - - ResponseWrapper wrapper2 = new ResponseWrapper<>(); - wrapper2.setResponse(testDTO2); - assertThat(wrapper1.hashCode()).isNotEqualTo(wrapper2.hashCode()); } @Test public void testCanEqual() { - ResponseWrapper wrapper1 = new ResponseWrapper<>(); - wrapper1.setResponse(testDTO1); - - ResponseWrapper wrapper2 = new ResponseWrapper<>(); - wrapper2.setResponse(testDTO2); - assertThat(wrapper1.canEqual(wrapper2)).isTrue(); assertThat(wrapper1.canEqual(new Object())).isFalse(); } @Test - public void testEqualsForTwoObjectsWithDifferentContent() { - ResponseWrapper wrapper1 = new ResponseWrapper<>(); - wrapper1.setResponse(testDTO); - - ResponseWrapper wrapper2 = new ResponseWrapper<>(); - wrapper2.setResponse(testDTO); + public void testEqualsForTwoWrapperObjectsWithSameTestDTOs() { + wrapper2.setResponse(responseDTO1); assertThat(wrapper1.equals(wrapper2)).isTrue(); } @Test - public void testEqualsForTwoObjectsWithSameContent() { - ResponseWrapper wrapper1 = new ResponseWrapper<>(); - wrapper1.setResponse(testDTO1); - - ResponseWrapper wrapper2 = new ResponseWrapper<>(); - wrapper2.setResponse(testDTO2); - + public void testEqualsForTwoWrapperObjectsWithDifferentTestDTOs() { assertThat(wrapper1.equals(wrapper2)).isFalse(); } @Test public void testObjectToStringConversionForSuccessScenario() { - ResponseWrapper person = new ResponseWrapper<>(); - person.setResponse("Hello world"); - String expectedString = "ResponseWrapper(response=Hello world, errors=[])"; - - String actualString = person.toString(); - - assertEquals(expectedString, actualString); + assertThat(wrapper1.toString()) + .isNotNull() + .contains("response") + .contains("errors"); } @Test public void testObjectToStringConversionForErrorScenario() { - ResponseWrapper person = new ResponseWrapper<>(); - person.setErrors(List.of(new ErrorDTO("code", "message"))); + wrapper1.setResponse(null); + wrapper1.setErrors(List.of(new ErrorDTO("code", "message"))); String expectedString = "ResponseWrapper(response=null, errors=[ErrorDTO(errorCode=code, errorMessage=message)])"; - String actualString = person.toString(); + String actualString = wrapper1.toString(); assertEquals(expectedString, actualString); } diff --git a/src/test/java/io/mosip/mimoto/core/http/dto/RequestDTO.java b/src/test/java/io/mosip/mimoto/core/http/dto/RequestDTO.java new file mode 100644 index 000000000..4bfcc4d4c --- /dev/null +++ b/src/test/java/io/mosip/mimoto/core/http/dto/RequestDTO.java @@ -0,0 +1,11 @@ +package io.mosip.mimoto.core.http.dto; + + +public class RequestDTO { + @SuppressWarnings("unused") + private String requestData; + + public RequestDTO(String requestData){ + this.requestData = requestData; + } +} diff --git a/src/test/java/io/mosip/mimoto/core/http/dto/ResponseDTO.java b/src/test/java/io/mosip/mimoto/core/http/dto/ResponseDTO.java new file mode 100644 index 000000000..761bdf189 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/core/http/dto/ResponseDTO.java @@ -0,0 +1,10 @@ +package io.mosip.mimoto.core.http.dto; + +public class ResponseDTO { + @SuppressWarnings("unused") + private String name; + + public ResponseDTO(String name) { + this.name = name; + } +} From 45f079d19239bff89d6619801eca4b7807fcfdf1 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 18 Feb 2025 17:19:07 +0530 Subject: [PATCH 377/860] [INJIWEB-1429] add test cases for response wrapper class Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../mimoto/core/http/ResponseWrapperTest.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/test/java/io/mosip/mimoto/core/http/ResponseWrapperTest.java b/src/test/java/io/mosip/mimoto/core/http/ResponseWrapperTest.java index db5cf92a1..748dc2698 100644 --- a/src/test/java/io/mosip/mimoto/core/http/ResponseWrapperTest.java +++ b/src/test/java/io/mosip/mimoto/core/http/ResponseWrapperTest.java @@ -88,17 +88,32 @@ public void testCanEqual() { } @Test - public void testEqualsForTwoWrapperObjectsWithSameTestDTOs() { + public void testEqualsForTwoWrapperObjectsWithSameRequestDTOs() { wrapper2.setResponse(responseDTO1); assertThat(wrapper1.equals(wrapper2)).isTrue(); } @Test - public void testEqualsForTwoWrapperObjectsWithDifferentTestDTOs() { + public void testEqualsForTwoWrapperObjectsWithDifferentRequestDTOsOfSameContent() { assertThat(wrapper1.equals(wrapper2)).isFalse(); } + @Test + public void testEqualsWithNull() { + assertThat(wrapper1.equals(null)).isFalse(); + } + + @Test + public void testEqualsForWrapperClassAndStringClass() { + assertThat(wrapper1.equals("Hello World!!")).isFalse(); + } + + @Test + public void testEqualsWithSameInstance() { + assertThat(wrapper1.equals(wrapper1)).isTrue(); + } + @Test public void testObjectToStringConversionForSuccessScenario() { assertThat(wrapper1.toString()) From 298461fc8a602c12a304c156ab0e6b6121bb8357 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 18 Feb 2025 17:30:20 +0530 Subject: [PATCH 378/860] [INJIWEB-1429] add missing fields in mimoto issuer config files Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- docker-compose/config/mimoto-issuers-config.json | 3 +++ src/main/resources/mimoto-issuers-config.json | 3 +++ 2 files changed, 6 insertions(+) diff --git a/docker-compose/config/mimoto-issuers-config.json b/docker-compose/config/mimoto-issuers-config.json index fa14ac9b5..9a0221061 100644 --- a/docker-compose/config/mimoto-issuers-config.json +++ b/docker-compose/config/mimoto-issuers-config.json @@ -18,8 +18,11 @@ "protocol": "OpenId4VCI", "client_id": "wallet-demo", "client_alias": "wallet-demo-client", + "wellknown_endpoint": "https://injicertify-insurance.collab.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer", "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", + "authorization_audience": "https://esignet-insurance.collab.mosip.net/v1/esignet/oauth/v2/token", "token_endpoint": "https://localhost:8099/v1/mimoto/get-token/StayProtected", + "proxy_token_endpoint": "https://esignet-insurance.collab.mosip.net/v1/esignet/oauth/v2/token", "qr_code_type": "OnlineSharing", "credential_issuer_host": "https://injicertify-insurance.collab.mosip.net", "enabled": "true" diff --git a/src/main/resources/mimoto-issuers-config.json b/src/main/resources/mimoto-issuers-config.json index fa14ac9b5..9a0221061 100644 --- a/src/main/resources/mimoto-issuers-config.json +++ b/src/main/resources/mimoto-issuers-config.json @@ -18,8 +18,11 @@ "protocol": "OpenId4VCI", "client_id": "wallet-demo", "client_alias": "wallet-demo-client", + "wellknown_endpoint": "https://injicertify-insurance.collab.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer", "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", + "authorization_audience": "https://esignet-insurance.collab.mosip.net/v1/esignet/oauth/v2/token", "token_endpoint": "https://localhost:8099/v1/mimoto/get-token/StayProtected", + "proxy_token_endpoint": "https://esignet-insurance.collab.mosip.net/v1/esignet/oauth/v2/token", "qr_code_type": "OnlineSharing", "credential_issuer_host": "https://injicertify-insurance.collab.mosip.net", "enabled": "true" From ce87d784d8cec8ca362e50f918b8dabedcdfb90a Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Wed, 19 Feb 2025 11:42:34 +0530 Subject: [PATCH 379/860] [INJIWEB-1429] exclude core http folder from sonar analysis and remove all the tests related to it Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- pom.xml | 2 +- .../mimoto/core/http/RequestWrapperTest.java | 159 ------------------ .../mimoto/core/http/ResponseWrapperTest.java | 135 --------------- .../mimoto/core/http/dto/RequestDTO.java | 11 -- .../mimoto/core/http/dto/ResponseDTO.java | 10 -- 5 files changed, 1 insertion(+), 316 deletions(-) delete mode 100644 src/test/java/io/mosip/mimoto/core/http/RequestWrapperTest.java delete mode 100644 src/test/java/io/mosip/mimoto/core/http/ResponseWrapperTest.java delete mode 100644 src/test/java/io/mosip/mimoto/core/http/dto/RequestDTO.java delete mode 100644 src/test/java/io/mosip/mimoto/core/http/dto/ResponseDTO.java diff --git a/pom.xml b/pom.xml index 2efd5dc68..2dd0ae9b7 100644 --- a/pom.xml +++ b/pom.xml @@ -92,7 +92,7 @@ 1.5.10 0.9.1 - **/constant/**,**/config/**,**/httpfilter/**,**/cache/**,**/dto/**,**/entity/**,**/model/**,**/exception/**,**/repository/**,**/security/**,**/*Config.java,**/*BootApplication.java,**/*VertxApplication.java,**/cbeffutil/**,**/core.http/**,**/util/** + **/constant/**,**/config/**,**/httpfilter/**,**/cache/**,**/dto/**,**/entity/**,**/model/**,**/exception/**,**/repository/**,**/security/**,**/*Config.java,**/*BootApplication.java,**/*VertxApplication.java,**/cbeffutil/**,**/core/http/**,**/util/** **/dto/**,**/entity/**,**/config/** diff --git a/src/test/java/io/mosip/mimoto/core/http/RequestWrapperTest.java b/src/test/java/io/mosip/mimoto/core/http/RequestWrapperTest.java deleted file mode 100644 index 6a8e39261..000000000 --- a/src/test/java/io/mosip/mimoto/core/http/RequestWrapperTest.java +++ /dev/null @@ -1,159 +0,0 @@ -package io.mosip.mimoto.core.http; - -import io.mosip.mimoto.core.http.dto.RequestDTO; -import jakarta.validation.Validator; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.junit.MockitoJUnitRunner; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; - -@RunWith(MockitoJUnitRunner.class) -@SpringBootTest -public class RequestWrapperTest { - @Autowired - private Validator validator; - - RequestDTO requestDTO1, requestDTO2; - String id, version, requestTime; - Object metadata; - - RequestWrapper wrapper1, wrapper2; - - @Before - public void setUp() { - id = "id1"; - version = "v1"; - requestTime = "time1"; - metadata = "metadata1"; - requestDTO1 = new RequestDTO("data"); - wrapper1 = new RequestWrapper<>(); - wrapper1.setRequest(requestDTO1); - wrapper1.setId(id); - wrapper1.setVersion(version); - wrapper1.setRequesttime(requestTime); - wrapper1.setMetadata(metadata); - requestDTO2 = new RequestDTO("data"); - wrapper2 = new RequestWrapper<>(); - wrapper2.setRequest(requestDTO2); - wrapper2.setId(id); - wrapper2.setVersion(version); - wrapper2.setRequesttime(requestTime); - wrapper2.setMetadata(metadata); - } - - @Test - public void testRequestWrapperWithValidData() { - assertThat(wrapper1) - .extracting("id", "version", "requesttime", "metadata", "request") - .containsExactly(id, version, requestTime, metadata, requestDTO1); - } - - @Test - public void testRequestWrapperWithNullRequest() { - wrapper1.setRequesttime(null); - - assertThrows(NullPointerException.class, () -> validator.validate(wrapper1)); - } - - @Test - public void testRequestWrapperEmptyConstructor() { - wrapper1 = new RequestWrapper<>(); - - assertThat(wrapper1) - .extracting("id", "version", "requesttime", "metadata", "request") - .containsExactly(null, null, null, null, null); - } - - @Test - public void testHashCodeForEqualObjects() { - wrapper2.setRequest(requestDTO1); - - assertThat(wrapper1.hashCode()).isEqualTo(wrapper2.hashCode()); - } - - @Test - public void testHashCodeForDifferentObjects() { - assertThat(wrapper1.hashCode()).isNotEqualTo(wrapper2.hashCode()); - } - - @Test - public void testCanEqual() { - assertThat(wrapper1.canEqual(wrapper2)).isTrue(); - assertThat(wrapper1.canEqual(new Object())).isFalse(); - } - - @Test - public void testEqualsForTwoWrapperObjectsWithSameTestDTOs() { - wrapper2.setRequest(requestDTO1); - - assertThat(wrapper1.equals(wrapper2)).isTrue(); - } - - @Test - public void testEqualsForTwoWrapperObjectsWithDifferentTestDTOs() { - assertThat(wrapper1.equals(wrapper2)).isFalse(); - } - - @Test - public void testObjectToStringConversionForSuccessScenario() { - assertThat(wrapper1.toString()) - .isNotNull() - .contains("id=id1") - .contains("version=v1") - .contains("requesttime=time1") - .contains("metadata=metadata1") - .contains("request=io.mosip.mimoto.core.http.dto.RequestDTO@"); - } - - @Test - public void testObjectToStringConversionWhenRequestIsNull() { - wrapper1.setRequest(null); - String expectedString = "RequestWrapper(id=id1, version=v1, requesttime=time1, metadata=metadata1, request=null)"; - - String actualString = wrapper1.toString(); - - assertEquals(expectedString, actualString); - } - - @Test - public void testEqualsForTwoWrapperObjectsWithDifferentRequests() { - assertThat(wrapper1).isNotEqualTo(wrapper2); - } - - @Test - public void testEqualsForTwoWrapperObjectsWithDifferentIds() { - wrapper2.setId("id2"); - wrapper2.setRequest(requestDTO1); - - assertThat(wrapper1).isNotEqualTo(wrapper2); - } - - @Test - public void testEqualsForTwoWrapperObjectsWithDifferentVersions() { - wrapper2.setVersion("v2"); - wrapper2.setRequest(requestDTO1); - - assertThat(wrapper1).isNotEqualTo(wrapper2); - } - - @Test - public void testEqualsForTwoWrapperObjectsWithDifferentRequestTimes() { - wrapper2.setRequesttime("time2"); - wrapper2.setRequest(requestDTO1); - - assertThat(wrapper1).isNotEqualTo(wrapper2); - } - - @Test - public void testEqualsForTwoWrapperObjectsWithDifferentMetadata() { - wrapper2.setMetadata("metadata2"); - wrapper2.setRequest(requestDTO1); - - assertThat(wrapper1).isNotEqualTo(wrapper2); - } -} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/core/http/ResponseWrapperTest.java b/src/test/java/io/mosip/mimoto/core/http/ResponseWrapperTest.java deleted file mode 100644 index 748dc2698..000000000 --- a/src/test/java/io/mosip/mimoto/core/http/ResponseWrapperTest.java +++ /dev/null @@ -1,135 +0,0 @@ -package io.mosip.mimoto.core.http; - -import io.mosip.mimoto.core.http.dto.ResponseDTO; -import io.mosip.mimoto.dto.ErrorDTO; -import jakarta.validation.Validator; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.junit.MockitoJUnitRunner; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import java.util.List; -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; - - -@RunWith(MockitoJUnitRunner.class) -@SpringBootTest -public class ResponseWrapperTest { - - @Autowired - private Validator validator; - ResponseDTO responseDTO1, responseDTO2; - ResponseWrapper wrapper1, wrapper2; - - @Before - public void setUp() { - responseDTO1 = new ResponseDTO("test-name"); - responseDTO2 = new ResponseDTO("test-name"); - wrapper1 = new ResponseWrapper<>(); - wrapper1.setResponse(responseDTO1); - wrapper2 = new ResponseWrapper<>(); - wrapper2.setResponse(responseDTO2); - } - - @Test - public void testResponseWrapperWithValidResponse() { - assertThat(wrapper1.getResponse()).isEqualTo(responseDTO1); - assertThat(wrapper1.getErrors()).isEmpty(); - } - - @Test - public void testResponseWrapperWithNullResponse() { - wrapper1.setResponse(null); - - assertThrows(NullPointerException.class, () -> validator.validate(wrapper1)); - } - - - @Test - public void testResponseWrapperWithErrors() { - wrapper1.setResponse(null); - ErrorDTO error1 = new ErrorDTO("error code 1", "error message 1"); - ErrorDTO error2 = new ErrorDTO("error code 2", "error message 2"); - - wrapper1.setErrors(List.of(error1, error2)); - - assertThat(wrapper1.getResponse()).isNull(); - assertThat(wrapper1.getErrors()).hasSize(2); - assertThat(wrapper1.getErrors()).containsExactly(error1, error2); - } - - @Test - public void testResponseWrapperEmptyConstructor() { - wrapper1 = new ResponseWrapper<>(); - - assertThat(wrapper1.getErrors()).isEmpty(); - assertThat(wrapper1.getResponse()).isNull(); - } - - @Test - public void testHashCodeForEqualObjects() { - wrapper2.setResponse(responseDTO1); - - assertThat(wrapper1.hashCode()).isEqualTo(wrapper2.hashCode()); - } - - @Test - public void testHashCodeForDifferentObjects() { - assertThat(wrapper1.hashCode()).isNotEqualTo(wrapper2.hashCode()); - } - - @Test - public void testCanEqual() { - assertThat(wrapper1.canEqual(wrapper2)).isTrue(); - assertThat(wrapper1.canEqual(new Object())).isFalse(); - } - - @Test - public void testEqualsForTwoWrapperObjectsWithSameRequestDTOs() { - wrapper2.setResponse(responseDTO1); - - assertThat(wrapper1.equals(wrapper2)).isTrue(); - } - - @Test - public void testEqualsForTwoWrapperObjectsWithDifferentRequestDTOsOfSameContent() { - assertThat(wrapper1.equals(wrapper2)).isFalse(); - } - - @Test - public void testEqualsWithNull() { - assertThat(wrapper1.equals(null)).isFalse(); - } - - @Test - public void testEqualsForWrapperClassAndStringClass() { - assertThat(wrapper1.equals("Hello World!!")).isFalse(); - } - - @Test - public void testEqualsWithSameInstance() { - assertThat(wrapper1.equals(wrapper1)).isTrue(); - } - - @Test - public void testObjectToStringConversionForSuccessScenario() { - assertThat(wrapper1.toString()) - .isNotNull() - .contains("response") - .contains("errors"); - } - - @Test - public void testObjectToStringConversionForErrorScenario() { - wrapper1.setResponse(null); - wrapper1.setErrors(List.of(new ErrorDTO("code", "message"))); - String expectedString = "ResponseWrapper(response=null, errors=[ErrorDTO(errorCode=code, errorMessage=message)])"; - - String actualString = wrapper1.toString(); - - assertEquals(expectedString, actualString); - } -} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/core/http/dto/RequestDTO.java b/src/test/java/io/mosip/mimoto/core/http/dto/RequestDTO.java deleted file mode 100644 index 4bfcc4d4c..000000000 --- a/src/test/java/io/mosip/mimoto/core/http/dto/RequestDTO.java +++ /dev/null @@ -1,11 +0,0 @@ -package io.mosip.mimoto.core.http.dto; - - -public class RequestDTO { - @SuppressWarnings("unused") - private String requestData; - - public RequestDTO(String requestData){ - this.requestData = requestData; - } -} diff --git a/src/test/java/io/mosip/mimoto/core/http/dto/ResponseDTO.java b/src/test/java/io/mosip/mimoto/core/http/dto/ResponseDTO.java deleted file mode 100644 index 761bdf189..000000000 --- a/src/test/java/io/mosip/mimoto/core/http/dto/ResponseDTO.java +++ /dev/null @@ -1,10 +0,0 @@ -package io.mosip.mimoto.core.http.dto; - -public class ResponseDTO { - @SuppressWarnings("unused") - private String name; - - public ResponseDTO(String name) { - this.name = name; - } -} From 7b474d5de44944b608a13c66f886fcf1c0f97bb1 Mon Sep 17 00:00:00 2001 From: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> Date: Wed, 19 Feb 2025 12:57:51 +0530 Subject: [PATCH 380/860] MOSIP-39931 & MOSIP-39905 - Enhanced the testrig to fetch the esignet url from mimoto actuator and generate the random policy data (#613) * MOSIP-36455 - Merge release 0.14.x branch with develop Signed-off-by: Mohanachandran S * MOSIP-36455 - Merge release 0.14.x branch with develop Signed-off-by: Mohanachandran S * INJIWEB-967 - Updated Automation Tests for Sunbird and eSignet Issues Signed-off-by: Mohanachandran S * MOSIP-38392 - updated the apitest commons version Signed-off-by: Mohanachandran S * MOSIP-38392 - Updated the issuer name for sunbird Signed-off-by: Mohanachandran S * pulled latest changes Signed-off-by: Mohanachandran S * Pulled latest changes Signed-off-by: Mohanachandran S * Pulled latest changes Signed-off-by: Mohanachandran S * updated the sunbird baseurl property Signed-off-by: Mohanachandran S * updated the sunbird baseurl property Signed-off-by: Mohanachandran S * updated the sunbird baseurl property Signed-off-by: Mohanachandran S * updated the sunbird baseurl property Signed-off-by: Mohanachandran S * INJIMOB-2680 - added random data logic for sunbird policy data Signed-off-by: Mohanachandran S * MOSIP-39931 - Updated for fetching the esignet url from actuator Signed-off-by: Mohanachandran S * updated the property Signed-off-by: Mohanachandran S --------- Signed-off-by: Mohanachandran S --- api-test/pom.xml | 5 ++ .../mimoto/testscripts/GetWithParam.java | 6 ++- .../testscripts/SimplePostForAutoGenId.java | 13 ++--- .../mimoto/utils/MimotoConfigManager.java | 15 ++++++ .../apirig/mimoto/utils/MimotoUtil.java | 50 ++++++++++++------- .../main/resources/config/mimoto.properties | 6 +-- .../OAuthDetailsRequest.yml | 2 +- .../OAuthDetailsRequestSunBirdC.yml | 2 +- .../GetPolicySunBirdR/GetPolicySunBirdR.yml | 2 +- 9 files changed, 66 insertions(+), 35 deletions(-) diff --git a/api-test/pom.xml b/api-test/pom.xml index cbc8010e4..cf6432d32 100644 --- a/api-test/pom.xml +++ b/api-test/pom.xml @@ -58,6 +58,11 @@ apitest-commons 1.3.2-SNAPSHOT + + com.github.javafaker + javafaker + 1.0.2 + diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/GetWithParam.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/GetWithParam.java index 7da3058da..902ee0bfa 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/GetWithParam.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/GetWithParam.java @@ -136,6 +136,9 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad inputJson = MimotoUtil.inputstringKeyWordHandeler(inputJson, testCaseName); + String outputJson = getJsonFromTemplate(testCaseDTO.getOutput(), testCaseDTO.getOutputTemplate()); + outputJson = MimotoUtil.inputstringKeyWordHandeler(outputJson, testCaseName); + if (testCaseName.contains("ESignet_")) { if (MimotoConfigManager.isInServiceNotDeployedList(GlobalConstants.ESIGNET)) { throw new SkipException("esignet is not deployed hence skipping the testcase"); @@ -173,8 +176,7 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad ouputValid = new HashMap<>(); ouputValid.put(GlobalConstants.EXPECTED_VS_ACTUAL, List.of(customResponse)); } else { - ouputValid = OutputValidationUtil.doJsonOutputValidation(response.asString(), - getJsonFromTemplate(testCaseDTO.getOutput(), testCaseDTO.getOutputTemplate()), testCaseDTO, + ouputValid = OutputValidationUtil.doJsonOutputValidation(response.asString(), outputJson, testCaseDTO, response.getStatusCode()); } diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java index 18b6d734f..fc7d4274c 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java @@ -141,9 +141,9 @@ public void test(TestCaseDTO testCaseDTO) if (MimotoConfigManager.isInServiceNotDeployedList("sunbirdrc")) throw new SkipException(GlobalConstants.SERVICE_NOT_DEPLOYED_MESSAGE); - if (MimotoConfigManager.getproperty("esignetSunBirdBaseURL") != null - && !MimotoConfigManager.getproperty("esignetSunBirdBaseURL").isBlank()) - tempUrl = MimotoConfigManager.getproperty("esignetSunBirdBaseURL"); + String esignetSunBirdBaseURL = MimotoConfigManager.getEsignetSunBirdBaseURL(); + if (esignetSunBirdBaseURL != null && !esignetSunBirdBaseURL.isBlank()) + tempUrl = esignetSunBirdBaseURL; testCaseDTO.setEndPoint(testCaseDTO.getEndPoint().replace("$ESIGNETMOCKBASEURL$", "")); } else if (testCaseDTO.getEndPoint().startsWith("$SUNBIRDBASEURL$") && testCaseName.contains("SunBirdR")) { @@ -152,16 +152,9 @@ public void test(TestCaseDTO testCaseDTO) if (MimotoConfigManager.getSunbirdBaseURL() != null && !MimotoConfigManager.getSunbirdBaseURL().isBlank()) tempUrl = MimotoConfigManager.getSunbirdBaseURL(); - //Once sunbird registry is pointing to specific env, remove the above line and uncomment below line - //tempUrl = ApplnURI.replace(GlobalConstants.API_INTERNAL, MimotoConfigManager.getSunBirdBaseURL()); testCaseDTO.setEndPoint(testCaseDTO.getEndPoint().replace("$SUNBIRDBASEURL$", "")); } - if (inputJson.contains("$GETCLIENTIDFROMMIMOTOACTUATOR$")) { - String clientIdSection = MimotoUtil.getClientIdSection(tempUrl); - inputJson = replaceKeywordWithValue(inputJson, "$GETCLIENTIDFROMMIMOTOACTUATOR$", - getValueFromMimotoActuator("overrides", clientIdSection)); - } if (testCaseName.contains("_AuthorizationCode_")) { response = postRequestWithCookieAuthHeaderAndXsrfTokenForAutoGenId( tempUrl + testCaseDTO.getEndPoint(), inputJson, COOKIENAME, testCaseDTO.getTestCaseName(), diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java index 19b70726f..f57de9fa1 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java @@ -37,5 +37,20 @@ public static void init() { public static String getSunbirdBaseURL() { return MimotoUtil.getValueFromMimotoActuator("overrides", "mosip.sunbird.url"); } + + public static String getEsignetBaseUrl() { + String esignetBaseUrl = null; + if (getproperty("runPlugin").equals("mosipid")) { + esignetBaseUrl = "https://" + MimotoUtil.getValueFromMimotoActuator("overrides", "mosip.esignet.mosipid.host"); + } else if (getproperty("runPlugin").equals("mockid")) { + esignetBaseUrl = "https://" + MimotoUtil.getValueFromMimotoActuator("overrides", "mosip.esignet.mock.host"); + } + + return esignetBaseUrl; + } + + public static String getEsignetSunBirdBaseURL() { + return "https://" + MimotoUtil.getValueFromMimotoActuator("overrides", getproperty("mosip-esignet-insurance-host")); + } } diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java index 3dcc7863d..9f46de558 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java @@ -4,6 +4,8 @@ import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PublicKey; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.HashMap; import org.apache.log4j.Level; @@ -12,6 +14,8 @@ import org.json.JSONObject; import org.testng.SkipException; +import com.github.javafaker.Faker; + import io.mosip.testrig.apirig.dataprovider.BiometricDataProvider; import io.mosip.testrig.apirig.dto.TestCaseDTO; import io.mosip.testrig.apirig.mimoto.testrunner.MosipTestRunner; @@ -24,6 +28,10 @@ public class MimotoUtil extends AdminTestUtil { private static final Logger logger = Logger.getLogger(MimotoUtil.class); private static String otpEnabled = "true"; + private static Faker faker = new Faker(); + private static String fullNameForSunBirdR = generateFullNameForSunBirdR(); + private static String dobForSunBirdR = generateDobForSunBirdR(); + private static String policyNumberForSunBirdR = generateRandomNumberString(9); public static void setLogLevel() { if (MimotoConfigManager.IsDebugEnabled()) @@ -136,17 +144,6 @@ public static String getOTPFromSMTP(String inputJson, TestCaseDTO testCaseDTO) { return inputJson; } - public static String getClientIdSection(String baseURL) { - if (baseURL.contains("esignet-mosipid")) { - return MimotoConfigManager.getproperty("mimoto-oidc-mosipid-partner-clientid"); - } - if (baseURL.contains("esignet-insurance")) { - return MimotoConfigManager.getproperty("mimoto-oidc-sunbird-partner-clientid"); - } - - return MimotoConfigManager.getproperty("mimoto-oidc-partner-clientid"); - } - public static String inputstringKeyWordHandeler(String jsonString, String testCaseName) { if (jsonString.contains("$ID:")) { String autoGenIdFileName = mimotoAutoGeneratedIdPropFileName; @@ -158,23 +155,22 @@ public static String inputstringKeyWordHandeler(String jsonString, String testCa } if (jsonString.contains("$POLICYNUMBERFORSUNBIRDRC$")) { - jsonString = replaceKeywordValue(jsonString, "$POLICYNUMBERFORSUNBIRDRC$", - properties.getProperty("policyNumberForSunBirdRC")); + jsonString = replaceKeywordValue(jsonString, "$POLICYNUMBERFORSUNBIRDRC$", policyNumberForSunBirdR); } if (jsonString.contains("$FULLNAMEFORSUNBIRDRC$")) { - jsonString = replaceKeywordValue(jsonString, "$FULLNAMEFORSUNBIRDRC$", fullNameForSunBirdRC); + jsonString = replaceKeywordValue(jsonString, "$FULLNAMEFORSUNBIRDRC$", fullNameForSunBirdR); } if (jsonString.contains("$DOBFORSUNBIRDRC$")) { - jsonString = replaceKeywordValue(jsonString, "$DOBFORSUNBIRDRC$", dobForSunBirdRC); + jsonString = replaceKeywordValue(jsonString, "$DOBFORSUNBIRDRC$", dobForSunBirdR); } if (jsonString.contains("$CHALLENGEVALUEFORSUNBIRDC$")) { HashMap mapForChallenge = new HashMap(); - mapForChallenge.put(GlobalConstants.FULLNAME, fullNameForSunBirdRC); - mapForChallenge.put(GlobalConstants.DOB, dobForSunBirdRC); + mapForChallenge.put(GlobalConstants.FULLNAME, fullNameForSunBirdR); + mapForChallenge.put(GlobalConstants.DOB, dobForSunBirdR); String challenge = gson.toJson(mapForChallenge); @@ -193,6 +189,15 @@ public static String inputstringKeyWordHandeler(String jsonString, String testCa ApplnURI.replace(GlobalConstants.API_INTERNAL, "injiweb") + "/redirect"); } + if (jsonString.contains("$GETCLIENTIDFORMOSIPIDFROMMIMOTOACTUATOR$")) { + String clientIdSection = MimotoConfigManager.getproperty("mimoto-oidc-mosipid-partner-clientid"); + jsonString = replaceKeywordWithValue(jsonString, "$GETCLIENTIDFORMOSIPIDFROMMIMOTOACTUATOR$", + getValueFromMimotoActuator("overrides", clientIdSection)); + } else if (jsonString.contains("$GETCLIENTIDFORINSURANCEFROMMIMOTOACTUATOR$")) { + String clientIdSection = MimotoConfigManager.getproperty("mimoto-oidc-sunbird-partner-clientid"); + jsonString = replaceKeywordWithValue(jsonString, "$GETCLIENTIDFORINSURANCEFROMMIMOTOACTUATOR$", + getValueFromMimotoActuator("overrides", clientIdSection)); + } return jsonString; @@ -236,4 +241,15 @@ public static String generatePublicKeyForMimoto() { } return vcString; } + + public static String generateFullNameForSunBirdR() { + return faker.name().fullName(); + } + + public static String generateDobForSunBirdR() { + Faker faker = new Faker(); + LocalDate dob = faker.date().birthday().toInstant().atZone(java.time.ZoneId.systemDefault()).toLocalDate(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + return dob.format(formatter); + } } \ No newline at end of file diff --git a/api-test/src/main/resources/config/mimoto.properties b/api-test/src/main/resources/config/mimoto.properties index 6e07fb819..6d0b37357 100644 --- a/api-test/src/main/resources/config/mimoto.properties +++ b/api-test/src/main/resources/config/mimoto.properties @@ -1,6 +1,6 @@ #---------------------------------- End point(s) relative URLs ----------------------------------# actuatorMimotoEndpoint=/v1/mimoto/actuator/env mimoto-oidc-mosipid-partner-clientid=mimoto.oidc.mosipid.partner.clientid -mimoto-oidc-sunbird-partner-clientid=mimoto.oidc.sunbird.partner.clientid -mimoto-oidc-partner-clientid=mimoto.oidc.partner.clientid -esignetSunBirdBaseURL= \ No newline at end of file +mimoto-oidc-sunbird-partner-clientid=mimoto.oidc.insurance.partner.clientid +mosip-esignet-insurance-host=mosip.esignet.insurance.host +runPlugin=mosipid \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.yml b/api-test/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.yml index aaf157c4a..5352f59a0 100644 --- a/api-test/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.yml +++ b/api-test/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.yml @@ -10,7 +10,7 @@ OAuthDetailsRequest: outputTemplate: mimoto/OAuthDetailsRequest/OAuthDetailsRequestResult input: '{ "requestTime": "$TIMESTAMP$", - "clientId": "$GETCLIENTIDFROMMIMOTOACTUATOR$", + "clientId": "$GETCLIENTIDFORMOSIPIDFROMMIMOTOACTUATOR$", "scope": "mosip_identity_vc_ldp", "responseType": "code", "redirectUri": "$INJIREDIRECTURI$", diff --git a/api-test/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml b/api-test/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml index 4b717219e..c1147b0b3 100644 --- a/api-test/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml +++ b/api-test/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml @@ -10,7 +10,7 @@ OAuthDetailsRequestSunBirdC: outputTemplate: mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdCResult input: '{ "requestTime": "$TIMESTAMP$", - "clientId": "$GETCLIENTIDFROMMIMOTOACTUATOR$", + "clientId": "$GETCLIENTIDFORINSURANCEFROMMIMOTOACTUATOR$", "scope": "sunbird_rc_insurance_vc_ldp", "responseType": "code", "redirectUri": "$INJIREDIRECTURI$", diff --git a/api-test/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.yml b/api-test/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.yml index f3272c103..d1a517eb2 100644 --- a/api-test/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.yml +++ b/api-test/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.yml @@ -13,5 +13,5 @@ GetPolicySunBirdR: "insuranceid": "$ID:ESignet_SunBirdR_CreatePolicy_NOAUTH_Valid_Smoke_Sid_osid$" }' output: '{ - "policyNumber": "326253801" + "policyNumber": "$POLICYNUMBERFORSUNBIRDRC$" }' \ No newline at end of file From 8f1671f5792d4fdde952127c6d1858638cb30ae1 Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Thu, 20 Feb 2025 16:40:29 +0530 Subject: [PATCH 381/860] MOSIP-38542 Signed-off-by: Nandhukumar --- .../java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java index 3dcc7863d..9927d2f96 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java @@ -119,8 +119,10 @@ public static String getOTPFromSMTP(String inputJson, TestCaseDTO testCaseDTO) { emailId = request.getJSONObject(GlobalConstants.REQUEST) .getJSONArray(GlobalConstants.CHALLENGELIST).getJSONObject(0) .getString(GlobalConstants.CHALLENGE); - if (emailId.endsWith(GlobalConstants.OTP_AS_PHONE)) + if (emailId.endsWith(GlobalConstants.OTP_AS_PHONE)) { emailId = emailId.replace(GlobalConstants.OTP_AS_PHONE, ""); + emailId = removeLeadingPlusSigns(emailId); + } logger.info(emailId); otp = OTPListener.getOtp(emailId); request.getJSONObject(GlobalConstants.REQUEST).getJSONArray(GlobalConstants.CHALLENGELIST) From 3c5179628225fce3ea80edc3deaf0ba6154fd234 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Wed, 12 Feb 2025 13:26:44 +0530 Subject: [PATCH 382/860] [INJIWEB-1429] validate the template path for path injection attacks before calling the resolved template file Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- src/main/java/io/mosip/mimoto/util/Utilities.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/mosip/mimoto/util/Utilities.java b/src/main/java/io/mosip/mimoto/util/Utilities.java index ce89b42da..feb826226 100644 --- a/src/main/java/io/mosip/mimoto/util/Utilities.java +++ b/src/main/java/io/mosip/mimoto/util/Utilities.java @@ -27,6 +27,7 @@ import java.net.URI; import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.Base64; import java.util.List; @@ -185,7 +186,14 @@ public String getTrustedVerifiersJsonValue() { public String getCredentialSupportedTemplateString(String issuerId, String credentialType) { String templateFileName = String.format("%s-%s-template.html", issuerId.toLowerCase(), credentialType.toLowerCase()); if(activeProfile.equals("local")) { - Resource credentialTemplateResource = new ClassPathResource("templates/"+ templateFileName); + Path basePath = Paths.get("templates").toAbsolutePath().normalize(); + Path resolvedPath = basePath.resolve(templateFileName).normalize(); + + if (!resolvedPath.startsWith(basePath)) { + throw new SecurityException("Attempted path traversal attack: " + resolvedPath); + } + + Resource credentialTemplateResource = new ClassPathResource(resolvedPath.toString()); try { return Files.readString(credentialTemplateResource.getFile().toPath()); } catch (IOException e) { From 57366faaf8e749578f7daa9c9bc88c9eb30f6458 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Wed, 12 Feb 2025 19:51:30 +0530 Subject: [PATCH 383/860] [INJIWEB-1429] add info about new issuer configuration endpoint in mimoto postman collections and update params list for credentials download endpoint Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- docs/api-documentation-openapi.json | 8 +++++ .../MIMOTO.postman_collection.json | 29 +++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index 4e06665cb..16ac6e5e1 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -2649,6 +2649,14 @@ "credential": { "type": "string", "example": "MosipVerifiableCredential" + }, + "vcStorageExpiryLimitInTimes": { + "type": "string", + "example": "1" + }, + "locale": { + "type": "string", + "example": "en" } } } diff --git a/docs/postman-collections/MIMOTO.postman_collection.json b/docs/postman-collections/MIMOTO.postman_collection.json index 9956f870e..14e640b1d 100644 --- a/docs/postman-collections/MIMOTO.postman_collection.json +++ b/docs/postman-collections/MIMOTO.postman_collection.json @@ -64,6 +64,25 @@ }, "response": [] }, + { + "name": "get Issuers Configuration", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{HOST}}/issuers/StayProtected/configuration", + "host": [ + "{{HOST}}" + ], + "path": [ + "issuers", + "StayProtected", + "configuration" + ] + } + }, + "response": [] + }, { "name": "Search Issuers List", "request": { @@ -124,6 +143,16 @@ "key": "credential", "value": "InsuranceCredential", "type": "text" + }, + { + "key": "vcStorageExpiryLimitInTimes", + "value": "1", + "type": "text" + }, + { + "key": "locale", + "value": "en", + "type": "text" } ] }, From bd5a6da4c37fdc6b95dc45efc28edb8fd1f61cda Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Fri, 21 Feb 2025 01:11:56 +0530 Subject: [PATCH 384/860] [INJIWEB-1370] refactor handleExceptionWithErroCode to return the response entity directly with the receieved status and error details Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../mimoto/controller/IdpController.java | 28 ++++++------------- .../mimoto/controller/IssuersController.java | 12 ++------ .../java/io/mosip/mimoto/util/Utilities.java | 16 +++++++---- 3 files changed, 22 insertions(+), 34 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/IdpController.java b/src/main/java/io/mosip/mimoto/controller/IdpController.java index 295911852..1d26364d5 100644 --- a/src/main/java/io/mosip/mimoto/controller/IdpController.java +++ b/src/main/java/io/mosip/mimoto/controller/IdpController.java @@ -73,11 +73,7 @@ public ResponseEntity> otpRequest(@Valid return ResponseEntity.status(HttpStatus.OK).body(internalResponse); } catch (Exception e) { log.error("Wallet binding otp error occurred." + e); - String[] errorObj = Utilities.handleExceptionWithErrorCode(e, PlatformErrorMessages.MIMOTO_OTP_BINDING_EXCEPTION.getCode()); - List errors = Utilities.getErrors(errorObj[0], errorObj[1]); - responseWrapper.setResponse(null); - responseWrapper.setErrors(errors); - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); + return Utilities.handleErrorResponse(e, PlatformErrorMessages.MIMOTO_OTP_BINDING_EXCEPTION.getCode(), HttpStatus.BAD_REQUEST); } } @@ -110,31 +106,25 @@ public ResponseEntity> request(@Reques return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); } catch (Exception e) { log.error("Wallet binding error occured for tranaction id " + requestDTO.getRequest().getIndividualId(), e); - String[] errorObj = Utilities.handleExceptionWithErrorCode(e, PlatformErrorMessages.MIMOTO_WALLET_BINDING_EXCEPTION.getCode()); - List errors = Utilities.getErrors(errorObj[0], errorObj[1]); - responseWrapper.setResponse(null); - responseWrapper.setErrors(errors); - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); + return Utilities.handleErrorResponse(e, PlatformErrorMessages.MIMOTO_WALLET_BINDING_EXCEPTION.getCode(), HttpStatus.BAD_REQUEST); } } @Operation(summary = SwaggerLiteralConstants.IDP_GET_TOKEN_SUMMARY, description = SwaggerLiteralConstants.IDP_GET_TOKEN_DESCRIPTION) @ApiResponses({ - @ApiResponse(responseCode = "200", content = { @Content(schema = @Schema(implementation = TokenResponseDTO.class), mediaType = "application/json") }), - @ApiResponse(responseCode = "400", content = { @Content(schema = @Schema(implementation = ResponseWrapper.class), mediaType = "application/json") }) }) + @ApiResponse(responseCode = "200", content = {@Content(schema = @Schema(implementation = TokenResponseDTO.class), mediaType = "application/json")}), + @ApiResponse(responseCode = "400", content = {@Content(schema = @Schema(implementation = ResponseWrapper.class), mediaType = "application/json")})}) @PostMapping(value = {"/get-token/{issuer}"}, consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}, produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity getToken(@RequestParam Map params, @PathVariable(required = true, name= "issuer") String issuer) { + public ResponseEntity> getToken(@RequestParam Map params, @PathVariable(required = true, name = "issuer") String issuer) { log.info("Reached the getToken Controller for Issuer " + issuer); ResponseWrapper responseWrapper = new ResponseWrapper<>(); try { - TokenResponseDTO response = credentialService.getTokenResponse(params, issuer); - return ResponseEntity.status(HttpStatus.OK).body(response); + TokenResponseDTO tokenResponse = credentialService.getTokenResponse(params, issuer); + responseWrapper.setResponse(tokenResponse); + return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); } catch (Exception ex) { log.error("Exception Occurred while Invoking the Token Endpoint : ", ex); - String[] errorObj = Utilities.handleExceptionWithErrorCode(ex, PlatformErrorMessages.MIMOTO_FETCHING_TOKEN_EXCEPTION.getCode()); - List errors = Utilities.getErrors(errorObj[0], errorObj[1]); - responseWrapper.setErrors(errors); - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); + return Utilities.handleErrorResponse(ex, PlatformErrorMessages.MIMOTO_FETCHING_TOKEN_EXCEPTION.getCode(), HttpStatus.BAD_REQUEST); } } } diff --git a/src/main/java/io/mosip/mimoto/controller/IssuersController.java b/src/main/java/io/mosip/mimoto/controller/IssuersController.java index 1385a093f..529364089 100644 --- a/src/main/java/io/mosip/mimoto/controller/IssuersController.java +++ b/src/main/java/io/mosip/mimoto/controller/IssuersController.java @@ -95,11 +95,7 @@ public ResponseEntity> getIssuerConfig(@PathVariable( return ResponseEntity.status(HttpStatus.NOT_FOUND).body(responseWrapper); } catch (Exception exception) { log.error("Exception occurred while fetching issuers ", exception); - String[] errorObj = Utilities.handleExceptionWithErrorCode(exception, INVALID_ISSUER_ID_EXCEPTION.getCode()); - List errors = Utilities.getErrors(errorObj[0], errorObj[1]); - responseWrapper.setResponse(null); - responseWrapper.setErrors(errors); - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); + return Utilities.handleErrorResponse(exception, INVALID_ISSUER_ID_EXCEPTION.getCode(), HttpStatus.BAD_REQUEST); } } @@ -113,11 +109,7 @@ public ResponseEntity> ge return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); } catch (Exception exception) { log.error("Exception occurred while fetching issuers configurations - " + exception); - String[] errorObj = Utilities.handleExceptionWithErrorCode(exception, INVALID_ISSUER_ID_CONFIGURATION.getCode()); - List errors = Utilities.getErrors(errorObj[0], errorObj[1]); - responseWrapper.setResponse(null); - responseWrapper.setErrors(errors); - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); + return Utilities.handleErrorResponse(exception, INVALID_ISSUER_ID_CONFIGURATION.getCode(), HttpStatus.BAD_REQUEST); } } } diff --git a/src/main/java/io/mosip/mimoto/util/Utilities.java b/src/main/java/io/mosip/mimoto/util/Utilities.java index feb826226..a00f4ab45 100644 --- a/src/main/java/io/mosip/mimoto/util/Utilities.java +++ b/src/main/java/io/mosip/mimoto/util/Utilities.java @@ -3,11 +3,9 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.Lists; -import io.mosip.kernel.core.logger.spi.Logger; import io.mosip.mimoto.core.http.ResponseWrapper; import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.exception.ExceptionUtils; -import io.mosip.mimoto.exception.PlatformErrorMessages; import io.mosip.mimoto.service.impl.CredentialShareServiceImpl; import jakarta.annotation.PostConstruct; import lombok.Data; @@ -18,6 +16,8 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; import javax.imageio.ImageIO; @@ -204,16 +204,22 @@ public String getCredentialSupportedTemplateString(String issuerId, String crede String specificCredentialPDFTemplate = getJson("", templateFileName); return !StringUtils.isEmpty(specificCredentialPDFTemplate)? specificCredentialPDFTemplate : getJson("", credentialTemplatePath); } - public static String[] handleExceptionWithErrorCode(Exception exception, String flowErrorCode) { + + public static ResponseEntity> handleErrorResponse( + Exception exception, String flowErrorCode, HttpStatus status) { String errorMessage = exception.getMessage(); String errorCode = flowErrorCode; - if(errorMessage.contains(DELIMITER)){ + if (errorMessage.contains(DELIMITER)) { String[] errorSections = errorMessage.split(DELIMITER); errorCode = errorSections[0]; errorMessage = errorSections[1]; } - return new String[]{errorCode, errorMessage}; + + ResponseWrapper responseWrapper = new ResponseWrapper<>(); + responseWrapper.setResponse(null); + responseWrapper.setErrors(Utilities.getErrors(errorCode, errorMessage)); + return ResponseEntity.status(status).body(responseWrapper); } public static List getErrors(String errorCode, String errorMessage) { From 37cbd43953747a487ba4fd7f4ad30df262c355cf Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Fri, 21 Feb 2025 01:22:10 +0530 Subject: [PATCH 385/860] [INJIWEB-1370] make changes to store clientRegisteredId of the identity provider in the session and add configurations to store this session in redis and refactor userController to effectively handle the exceptions Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../mimoto/MimotoServiceApplication.java | 7 +-- .../java/io/mosip/mimoto/config/Config.java | 9 +++- .../mimoto/controller/UserController.java | 54 ++++++++++++++----- .../OAuth2AuthenticationException.java | 17 ++++++ .../exception/PlatformErrorMessages.java | 3 +- .../OAuth2AuthenticationSuccessHandler.java | 9 ++-- 6 files changed, 74 insertions(+), 25 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/exception/OAuth2AuthenticationException.java diff --git a/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java b/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java index bb34c86fe..2ab2ef661 100644 --- a/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java +++ b/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java @@ -8,10 +8,7 @@ import org.json.simple.JSONObject; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration; import org.springframework.boot.autoconfigure.domain.EntityScan; -import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; -import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration; import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Primary; @@ -29,8 +26,8 @@ }, exclude = { SecurityAutoConfiguration.class }) -//@EntityScan(basePackages = "io.mosip.mimoto.dbentity") -//@EnableJpaRepositories(basePackages = "io.mosip.mimoto.repository") +@EntityScan(basePackages = "io.mosip.mimoto.dbentity") +@EnableJpaRepositories(basePackages = "io.mosip.mimoto.repository") @Slf4j @EnableScheduling @EnableAsync diff --git a/src/main/java/io/mosip/mimoto/config/Config.java b/src/main/java/io/mosip/mimoto/config/Config.java index 7e8e98f0c..e8e5a4a44 100644 --- a/src/main/java/io/mosip/mimoto/config/Config.java +++ b/src/main/java/io/mosip/mimoto/config/Config.java @@ -13,7 +13,9 @@ import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; import org.springframework.security.config.annotation.web.configurers.HeadersConfigurer; +import org.springframework.security.config.http.SessionCreationPolicy; import org.springframework.security.web.SecurityFilterChain; +import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.CorsConfigurationSource; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; @@ -25,6 +27,7 @@ @Configuration @EnableWebSecurity @EnableMethodSecurity +@EnableRedisHttpSession @Order(1) public class Config { @@ -52,6 +55,7 @@ public Map injiConfig() { @Autowired private OAuth2AuthenticationSuccessHandler oAuth2AuthenticationSuccessHandler; + @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { if (!isCSRFEnable) { @@ -82,7 +86,7 @@ private void setupOauth2Config(HttpSecurity http) throws Exception { ) .logout(logout -> logout .logoutUrl("/logout") - .logoutSuccessUrl(injiWebUrl+"/login?logout") // Custom logout success URL + .logoutSuccessUrl(injiWebUrl + "/login?logout") // Custom logout success URL .clearAuthentication(true) // Clear the authentication after logout .invalidateHttpSession(true) // Invalidate the session .deleteCookies("JSESSIONID") // Optionally, delete cookies @@ -90,7 +94,8 @@ private void setupOauth2Config(HttpSecurity http) throws Exception { // Define secured endpoints .requestMatchers("/secure/**").authenticated() // Secure endpoints that require login // Default authorization rule for all other requests - .anyRequest().permitAll());; + .anyRequest().permitAll() + ).sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)); } // Define CORS configuration diff --git a/src/main/java/io/mosip/mimoto/controller/UserController.java b/src/main/java/io/mosip/mimoto/controller/UserController.java index c10c4c1f4..0ba3a852a 100644 --- a/src/main/java/io/mosip/mimoto/controller/UserController.java +++ b/src/main/java/io/mosip/mimoto/controller/UserController.java @@ -1,38 +1,68 @@ package io.mosip.mimoto.controller; -import io.mosip.mimoto.dto.ErrorDTO; +import io.mosip.mimoto.core.http.ResponseWrapper; +import io.mosip.mimoto.dbentity.UserMetadata; +import io.mosip.mimoto.exception.OAuth2AuthenticationException; +import io.mosip.mimoto.repository.UserMetadataRepository; +import io.mosip.mimoto.util.Utilities; +import jakarta.servlet.http.HttpSession; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.Authentication; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; - import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import static io.mosip.mimoto.exception.PlatformErrorMessages.OAUTH2_AUTHENTICATION_EXCEPTION; @Slf4j @RestController @RequestMapping(value = "/secure/user") public class UserController { + @Autowired + private UserMetadataRepository userMetadataRepository; + @GetMapping("/profile") - public ResponseEntity getUserProfile(Authentication authentication) { // Use Authentication object directly + public ResponseEntity> getUserProfile(Authentication authentication, HttpSession session) { try { - + ResponseWrapper responseWrapper = new ResponseWrapper<>(); if (authentication == null || !authentication.isAuthenticated()) { - return ResponseEntity.status(HttpStatus.UNAUTHORIZED) - .body(new ErrorDTO("UNAUTHORIZED", "User is not authenticated.")); + throw new OAuth2AuthenticationException("UNAUTHORIZED", "User is not authenticated", HttpStatus.UNAUTHORIZED); + } + + String identityProvider = (String) session.getAttribute("clientRegistrationId"); + if (identityProvider.isEmpty()) { + throw new OAuth2AuthenticationException("BAD_REQUEST", "Identity provider is not available in the received authentication response", HttpStatus.BAD_REQUEST); } - String username = authentication.getName(); // Get username from Authentication + UserMetadata userMetadata = fetchUserMetadata(authentication.getName()); + validateIdentityProvider(userMetadata, identityProvider); - String jsonResponse = String.format("{\"displayName\": \"%s\", \"profilePictureUrl\": \"%s\"}", username, null); - return ResponseEntity.ok(jsonResponse); + String userDetails = String.format("{\"displayName\": \"%s\", \"profilePictureUrl\": \"%s\"}", + userMetadata.getDisplayName(), + userMetadata.getProfilePictureUrl()); + responseWrapper.setResponse(userDetails); + return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); + } catch (OAuth2AuthenticationException exception) { + log.error("Error occurred while retrieving user profile : ", exception); + return Utilities.handleErrorResponse(exception, OAUTH2_AUTHENTICATION_EXCEPTION.getCode(), exception.getStatus()); } catch (Exception exception) { - log.error("Error retrieving user profile", exception); - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) - .body(new ErrorDTO("INTERNAL_SERVER_ERROR", "An internal server error occurred.")); + log.error("Error occurred while retrieving user profile : ", exception); + return Utilities.handleErrorResponse(exception, OAUTH2_AUTHENTICATION_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR); + } + } + + private UserMetadata fetchUserMetadata(String providerSubjectId) throws OAuth2AuthenticationException { + return userMetadataRepository.findByProviderSubjectId(providerSubjectId) + .orElseThrow(() -> new OAuth2AuthenticationException("NOT_FOUND", "User not found", HttpStatus.NOT_FOUND)); + } + + private void validateIdentityProvider(UserMetadata userMetadata, String identityProvider) throws OAuth2AuthenticationException { + if (!userMetadata.getIdentityProvider().equals(identityProvider)) { + throw new OAuth2AuthenticationException("UNAUTHORIZED", "Identity provider mismatch", HttpStatus.UNAUTHORIZED); } } } diff --git a/src/main/java/io/mosip/mimoto/exception/OAuth2AuthenticationException.java b/src/main/java/io/mosip/mimoto/exception/OAuth2AuthenticationException.java new file mode 100644 index 000000000..bf9c9131e --- /dev/null +++ b/src/main/java/io/mosip/mimoto/exception/OAuth2AuthenticationException.java @@ -0,0 +1,17 @@ +package io.mosip.mimoto.exception; + +import org.springframework.http.HttpStatus; + +public class OAuth2AuthenticationException extends BaseCheckedException { + private final HttpStatus status; + + public OAuth2AuthenticationException(String code, String message, HttpStatus status) { + super(code, message); + this.status=status; + } + + public HttpStatus getStatus() { + return status; + } +} + diff --git a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java index d3647a4ec..53b69984b 100644 --- a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java +++ b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java @@ -90,7 +90,8 @@ public enum PlatformErrorMessages { INVALID_CREDENTIAL_RESOURCE_URI_EXCEPTION(PlatformConstants.PREFIX + "040", "The Credential Resource is Invalid"), INVALID_CREDENTIAL_ISSUER_WELLKNOWN_RESPONSE_EXCEPTION(PlatformConstants.PREFIX + "041", "Invalid Wellknown from Issuer"), INVALID_AUTHORIZATION_SERVER_WELLKNOWN_RESPONSE_EXCEPTION(PlatformConstants.PREFIX + "042", "Invalid Authorization Server well-known from server:"), - MIMOTO_FETCHING_TOKEN_EXCEPTION(PlatformConstants.PREFIX + "043", "Exception occurred when fetching the Token"); + MIMOTO_FETCHING_TOKEN_EXCEPTION(PlatformConstants.PREFIX + "043", "Exception occurred when fetching the Token"), + OAUTH2_AUTHENTICATION_EXCEPTION(PlatformConstants.PREFIX + "044", "Failed to authenticate user via OAuth Identity Provider during login"); /** The error message. */ private final String errorMessage; diff --git a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java index fcb28405c..8a63793e1 100644 --- a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java +++ b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java @@ -10,7 +10,6 @@ import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; -import org.springframework.web.servlet.mvc.support.RedirectAttributes; import java.io.IOException; @@ -24,6 +23,10 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo OAuth2AuthenticationToken oauth2Token = (OAuth2AuthenticationToken) authentication; OAuth2User oAuth2User = oauth2Token.getPrincipal(); + // Storing clientRegistrationId in the Redis session to verify it against the one in user metadata during profile retrieval + String clientRegistrationId = oauth2Token.getAuthorizedClientRegistrationId(); + request.getSession().setAttribute("clientRegistrationId", clientRegistrationId); + // Extracting OAuth2 user information String providerSubjectId = oAuth2User.getAttribute("sub"); String identityProvider = oauth2Token.getAuthorizedClientRegistrationId(); @@ -37,8 +40,4 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo response.sendRedirect("http://localhost:3004/login?status=success"); } - - - - } From 528ace6bf8c14c7b138a7fe7059add763844300e Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Sat, 22 Feb 2025 17:17:38 +0530 Subject: [PATCH 386/860] [INJIWEB-1370] add access_type & prompt query params to google authorization url and make changes to store the access token & refresh token in session Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../OAuth2AuthenticationSuccessHandler.java | 15 +++++++++++++-- src/main/resources/application-local.properties | 2 +- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java index 8a63793e1..ce44e66c6 100644 --- a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java +++ b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java @@ -18,14 +18,17 @@ public class OAuth2AuthenticationSuccessHandler extends SimpleUrlAuthenticationS @Autowired private UserMetadataService userMetadataService; + @Autowired + private OAuth2AuthorizedClientService authorizedClientService; + @Override public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { OAuth2AuthenticationToken oauth2Token = (OAuth2AuthenticationToken) authentication; OAuth2User oAuth2User = oauth2Token.getPrincipal(); - + HttpSession session = request.getSession(); // Storing clientRegistrationId in the Redis session to verify it against the one in user metadata during profile retrieval String clientRegistrationId = oauth2Token.getAuthorizedClientRegistrationId(); - request.getSession().setAttribute("clientRegistrationId", clientRegistrationId); + session.setAttribute("clientRegistrationId", clientRegistrationId); // Extracting OAuth2 user information String providerSubjectId = oAuth2User.getAttribute("sub"); @@ -34,6 +37,14 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo String profilePictureUrl = oAuth2User.getAttribute("picture"); String email = oAuth2User.getAttribute("email"); + OAuth2AuthorizedClient authorizedClient = authorizedClientService + .loadAuthorizedClient(oauth2Token.getAuthorizedClientRegistrationId(), authentication.getName()); + + String accessToken = authorizedClient.getAccessToken().getTokenValue(); + String refreshToken = authorizedClient.getRefreshToken().getTokenValue(); + session.setAttribute("accessToken", accessToken); + session.setAttribute("refreshToken", refreshToken); + // Call the service to update or insert the user metadata in the database userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index eec3f8712..ae5f35b8c 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -246,7 +246,7 @@ spring.security.oauth2.client.registration.google.redirect-uri={baseUrl}/oauth2/ spring.security.oauth2.client.registration.google.authorization-grant-type=authorization_code spring.security.oauth2.client.registration.google.client-name=Google -spring.security.oauth2.client.provider.google.authorization-uri=https://accounts.google.com/o/oauth2/auth +spring.security.oauth2.client.provider.google.authorization-uri=https://accounts.google.com/o/oauth2/auth?access_type=offline&prompt=consent spring.security.oauth2.client.provider.google.token-uri=https://oauth2.googleapis.com/token spring.security.oauth2.client.provider.google.user-info-uri=https://www.googleapis.com/oauth2/v3/userinfo From edde82c510a194c0125a6dbd5efdee82e7071867 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 24 Feb 2025 11:53:59 +0530 Subject: [PATCH 387/860] [Injiweb-1436 Fixed the docker compose and vc verifier version] (#616) Signed-off-by: Gurpreet41082 --- docker-compose/docker-compose.yml | 4 ++-- pom.xml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docker-compose/docker-compose.yml b/docker-compose/docker-compose.yml index 6f6761064..1d97e1e5d 100644 --- a/docker-compose/docker-compose.yml +++ b/docker-compose/docker-compose.yml @@ -14,7 +14,7 @@ services: datashare: container_name: 'datashare-service' - image: mosipqa/data-share-service:1.3.x + image: mosipid/data-share-service:1.3.0-beta.2 ports: - "8097:8097" environment: @@ -39,7 +39,7 @@ services: - ./nginx.conf:/etc/nginx/nginx.conf mimoto-service: container_name: 'Mimoto-Service' - image: 'mosipqa/mimoto:0.15.x' + image: 'mosipdev/mimoto:release-0.17.x' user: root ports: - '8099:8099' diff --git a/pom.xml b/pom.xml index 2dd0ae9b7..718ac9fc3 100644 --- a/pom.xml +++ b/pom.xml @@ -141,7 +141,7 @@ io.mosip vcverifier-jar - 1.1.0-beta.1 + 1.1.0 io.micrometer From 624f36c3761a5f589411edbf02b292375739f738 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 24 Feb 2025 13:37:46 +0530 Subject: [PATCH 388/860] [INJIWEB-1436] fix the null value issue observed in locaeUtils file and remove the logic of catching invalid format exception for qr code type and handle all the exceptions in single catch block Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../mimoto/config/IssuersValidationConfig.java | 13 +------------ src/main/java/io/mosip/mimoto/util/LocaleUtils.java | 4 ++++ 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java b/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java index 307544598..1a00503b5 100644 --- a/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java +++ b/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java @@ -4,7 +4,6 @@ import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.AuthorizationServerWellknownResponseException; import io.mosip.mimoto.exception.InvalidWellknownResponseException; -import io.mosip.mimoto.model.QRCodeType; import io.mosip.mimoto.service.IssuersService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -14,14 +13,10 @@ import org.springframework.validation.BeanPropertyBindingResult; import org.springframework.validation.Errors; import org.springframework.validation.Validator; - import java.io.IOException; -import java.util.Arrays; import java.util.HashSet; import java.util.Set; import java.util.concurrent.atomic.AtomicReference; -import java.util.stream.Collectors; -import com.fasterxml.jackson.databind.exc.InvalidFormatException; @Slf4j @Component @@ -45,14 +40,8 @@ public void run(ApplicationArguments args) throws ApiNotAccessibleException, IOE IssuersDTO issuerDTOList = null; try { issuerDTOList = issuersService.getAllIssuers(); - } catch (InvalidFormatException e) { - String validValues = Arrays.stream(QRCodeType.values()) - .map(Enum::name) - .collect(Collectors.joining(", ")); - log.error(VALIDATION_ERROR_MSG + "qr_code_type value of issuer is invalid. It has to be one of these values : [ " + validValues + " ]"); - throw new RuntimeException(VALIDATION_ERROR_MSG); } catch (Exception e) { - log.error(VALIDATION_ERROR_MSG + e.toString()); + log.error(VALIDATION_ERROR_MSG + e); throw new RuntimeException(VALIDATION_ERROR_MSG); } diff --git a/src/main/java/io/mosip/mimoto/util/LocaleUtils.java b/src/main/java/io/mosip/mimoto/util/LocaleUtils.java index a0a4db865..33ae270b6 100644 --- a/src/main/java/io/mosip/mimoto/util/LocaleUtils.java +++ b/src/main/java/io/mosip/mimoto/util/LocaleUtils.java @@ -5,6 +5,10 @@ public class LocaleUtils { // Method to convert the input locale strings into 3-letter codes and compare public static boolean matchesLocale(String localeString1, String localeString2) { + if(localeString1 == null || localeString2 == null){ + return false; + } + String locale1Iso3Language = Locale.forLanguageTag(localeString1).getISO3Language(); // 3-letter code for locale1 String locale2Iso3Language = Locale.forLanguageTag(localeString2).getISO3Language(); // 3-letter code for locale2 From 15c988c160a480a07e8496dc2075a67d660459e5 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 24 Feb 2025 16:42:15 +0530 Subject: [PATCH 389/860] [INJIWEB-1436] set the expiry time separately for different cache names and use the default value for expiry time if the cache name is not regestered in cache manager and update the cache config in application properties file Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../io/mosip/mimoto/config/CacheConfig.java | 29 ++++++++++++++----- .../resources/application-local.properties | 5 +++- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/config/CacheConfig.java b/src/main/java/io/mosip/mimoto/config/CacheConfig.java index 3a02fc2a9..2c5f8a455 100644 --- a/src/main/java/io/mosip/mimoto/config/CacheConfig.java +++ b/src/main/java/io/mosip/mimoto/config/CacheConfig.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.config; +import java.util.Objects; import java.util.concurrent.TimeUnit; import com.github.benmanes.caffeine.cache.Caffeine; import org.springframework.cache.CacheManager; @@ -13,18 +14,32 @@ @EnableCaching public class CacheConfig { - @Value("${cache.expiry.time.in.min}") - private long cacheExpiryTimeInMin; + @Value("${cache.credential.issuer.config.expiry-time-in-min:60}") + private Long issuerConfigExpiryTimeInMin; - @Bean - public Caffeine caffeineConfig() { - return Caffeine.newBuilder().expireAfterWrite(cacheExpiryTimeInMin, TimeUnit.MINUTES); + @Value("${cache.credential.issuer.wellknown.response.expiry-time-in-min:60}") + private Long issuerWellknownExpiryTimeInMin; + + @Value("${cache.credential.issuer.authserver.wellknown.response.expiry-time-in-min:60}") + private Long authServerWellknownExpiryTimeInMin; + + @Value("${cache.default.expiry-time-in-min:0}") + private long defaultCacheExpiryTimeInMin; + + private Caffeine buildCache(Long expiryTime) { + return Caffeine.newBuilder().expireAfterWrite( + Objects.requireNonNullElse(expiryTime, defaultCacheExpiryTimeInMin), TimeUnit.MINUTES + ); } + @Bean - public CacheManager cacheManager(Caffeine caffeine) { + public CacheManager cacheManager() { CaffeineCacheManager cacheManager = new CaffeineCacheManager(); - cacheManager.setCaffeine(caffeine); + cacheManager.registerCustomCache("issuerWellknown", buildCache(issuerWellknownExpiryTimeInMin).build()); + cacheManager.registerCustomCache("authServerWellknown", buildCache(authServerWellknownExpiryTimeInMin).build()); + cacheManager.registerCustomCache("credentialIssuerConfig", buildCache(issuerConfigExpiryTimeInMin).build()); + cacheManager.setCaffeine(buildCache(null)); return cacheManager; } } diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 432920413..09e27bee3 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -237,4 +237,7 @@ mosip.security.origins=http://localhost:3004 #Caffeine cache related configurations -cache.expiry.time.in.min = 60 \ No newline at end of file +cache.credential.issuer.config.expiry-time-in-min = 60 +cache.credential.issuer.wellknown.response.expiry-time-in-min = 60 +cache.credential.issuer.authserver.wellknown.response.expiry-time-in-min = 60 +cache.default.expiry-time-in-min = 60 From 18eff470534ea362b779bd07060a25f1b0385261 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 24 Feb 2025 18:04:42 +0530 Subject: [PATCH 390/860] [INJIWEB-1436] move the wellknown methods of AuthServer and Issuer into IssuerConfigUtil file and udpate the test cases accordingly Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../service/AuthorizationServerService.java | 8 -- .../service/IssuerWellknownService.java | 12 --- .../impl/IssuerWellknownServiceImpl.java | 51 ----------- .../service/impl/IssuersServiceImpl.java | 12 +-- .../IssuerConfigUtil.java} | 48 +++++++--- .../controller/IssuersControllerTest.java | 8 -- .../service/IssuerWellknownServiceTest.java | 88 ------------------- .../mimoto/service/IssuersServiceTest.java | 19 ++-- .../IssuerConfigUtilTest.java} | 76 ++++++++++++---- 9 files changed, 106 insertions(+), 216 deletions(-) delete mode 100644 src/main/java/io/mosip/mimoto/service/AuthorizationServerService.java delete mode 100644 src/main/java/io/mosip/mimoto/service/IssuerWellknownService.java delete mode 100644 src/main/java/io/mosip/mimoto/service/impl/IssuerWellknownServiceImpl.java rename src/main/java/io/mosip/mimoto/{service/impl/AuthorizationServerServiceImpl.java => util/IssuerConfigUtil.java} (60%) delete mode 100644 src/test/java/io/mosip/mimoto/service/IssuerWellknownServiceTest.java rename src/test/java/io/mosip/mimoto/{service/AuthorizationServerServiceTest.java => util/IssuerConfigUtilTest.java} (50%) diff --git a/src/main/java/io/mosip/mimoto/service/AuthorizationServerService.java b/src/main/java/io/mosip/mimoto/service/AuthorizationServerService.java deleted file mode 100644 index 1f7d8a0ba..000000000 --- a/src/main/java/io/mosip/mimoto/service/AuthorizationServerService.java +++ /dev/null @@ -1,8 +0,0 @@ -package io.mosip.mimoto.service; - -import io.mosip.mimoto.dto.mimoto.*; -import io.mosip.mimoto.exception.AuthorizationServerWellknownResponseException; - -public interface AuthorizationServerService { - AuthorizationServerWellKnownResponse getWellknown(String authorizationServerHostUrl) throws AuthorizationServerWellknownResponseException; -} diff --git a/src/main/java/io/mosip/mimoto/service/IssuerWellknownService.java b/src/main/java/io/mosip/mimoto/service/IssuerWellknownService.java deleted file mode 100644 index 97ba589a4..000000000 --- a/src/main/java/io/mosip/mimoto/service/IssuerWellknownService.java +++ /dev/null @@ -1,12 +0,0 @@ -package io.mosip.mimoto.service; - -import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; -import io.mosip.mimoto.exception.ApiNotAccessibleException; -import io.mosip.mimoto.exception.AuthorizationServerWellknownResponseException; -import io.mosip.mimoto.exception.InvalidWellknownResponseException; - -import java.io.IOException; - -public interface IssuerWellknownService { - CredentialIssuerWellKnownResponse getWellknown(String credentialIssuerHost) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException; -} diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuerWellknownServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuerWellknownServiceImpl.java deleted file mode 100644 index 42de38941..000000000 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuerWellknownServiceImpl.java +++ /dev/null @@ -1,51 +0,0 @@ -package io.mosip.mimoto.service.impl; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; -import io.mosip.mimoto.exception.ApiNotAccessibleException; -import io.mosip.mimoto.exception.InvalidWellknownResponseException; -import io.mosip.mimoto.service.IssuerWellknownService; -import io.mosip.mimoto.util.CredentialIssuerWellknownResponseValidator; -import io.mosip.mimoto.util.RestApiClient; -import jakarta.validation.Validator; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.cache.annotation.Cacheable; -import org.springframework.stereotype.Service; - -import java.io.IOException; - -@Service -public class IssuerWellknownServiceImpl implements IssuerWellknownService { - - @Autowired - private RestApiClient restApiClient; - - @Autowired - private CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator; - - @Autowired - ObjectMapper objectMapper; - - @Autowired - private Validator validator; - - - @Override - @Cacheable(value = "issuerWellknown", key = "#p0") - public CredentialIssuerWellKnownResponse getWellknown(String credentialIssuerHost) throws ApiNotAccessibleException, IOException, InvalidWellknownResponseException { - try { - String wellknownEndpoint = credentialIssuerHost + "/.well-known/openid-credential-issuer"; - String wellknownResponse = restApiClient.getApi(wellknownEndpoint, String.class); - if (wellknownResponse == null) { - throw new ApiNotAccessibleException(); - } - CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = objectMapper.readValue(wellknownResponse, CredentialIssuerWellKnownResponse.class); - credentialIssuerWellknownResponseValidator.validate(credentialIssuerWellKnownResponse, validator); - return credentialIssuerWellKnownResponse; - } catch (JsonProcessingException | ApiNotAccessibleException | - InvalidWellknownResponseException e) { - throw e; - } - } -} diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index fc349682a..680622e7c 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -11,9 +11,8 @@ import io.mosip.mimoto.exception.AuthorizationServerWellknownResponseException; import io.mosip.mimoto.exception.InvalidIssuerIdException; import io.mosip.mimoto.exception.InvalidWellknownResponseException; -import io.mosip.mimoto.service.AuthorizationServerService; -import io.mosip.mimoto.service.IssuerWellknownService; import io.mosip.mimoto.service.IssuersService; +import io.mosip.mimoto.util.IssuerConfigUtil; import io.mosip.mimoto.util.Utilities; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; @@ -32,14 +31,11 @@ public class IssuersServiceImpl implements IssuersService { @Autowired private Utilities utilities; - @Autowired - private AuthorizationServerService authorizationServerService; - @Autowired private ObjectMapper objectMapper; @Autowired - private IssuerWellknownService issuerWellknownService; + private IssuerConfigUtil issuersConfigUtil; @Override public IssuersDTO getIssuers(String search) throws ApiNotAccessibleException, AuthorizationServerWellknownResponseException, IOException, InvalidWellknownResponseException { @@ -94,8 +90,8 @@ public IssuersDTO getAllIssuers() throws ApiNotAccessibleException, IOException @Override @Cacheable(value = "credentialIssuerConfig", key = "#p0") public CredentialIssuerConfigurationResponse getIssuerConfiguration(String issuerId) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { - CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = issuerWellknownService.getWellknown(getIssuerDetails(issuerId).getCredential_issuer_host()); - AuthorizationServerWellKnownResponse authorizationServerWellKnownResponse = authorizationServerService.getWellknown(credentialIssuerWellKnownResponse.getAuthorizationServers().get(0)); + CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = issuersConfigUtil.getIssuerWellknown(getIssuerDetails(issuerId).getCredential_issuer_host()); + AuthorizationServerWellKnownResponse authorizationServerWellKnownResponse = issuersConfigUtil.getAuthServerWellknown(credentialIssuerWellKnownResponse.getAuthorizationServers().get(0)); return new CredentialIssuerConfigurationResponse( credentialIssuerWellKnownResponse.getCredentialIssuer(), diff --git a/src/main/java/io/mosip/mimoto/service/impl/AuthorizationServerServiceImpl.java b/src/main/java/io/mosip/mimoto/util/IssuerConfigUtil.java similarity index 60% rename from src/main/java/io/mosip/mimoto/service/impl/AuthorizationServerServiceImpl.java rename to src/main/java/io/mosip/mimoto/util/IssuerConfigUtil.java index b53dbe880..c7d7dd144 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/AuthorizationServerServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/util/IssuerConfigUtil.java @@ -1,38 +1,60 @@ -package io.mosip.mimoto.service.impl; - +package io.mosip.mimoto.util; +import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import io.mosip.mimoto.dto.mimoto.AuthorizationServerWellKnownResponse; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; +import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.AuthorizationServerWellknownResponseException; -import io.mosip.mimoto.service.AuthorizationServerService; -import io.mosip.mimoto.util.RestApiClient; +import io.mosip.mimoto.exception.InvalidWellknownResponseException; import jakarta.validation.ConstraintViolation; import jakarta.validation.Validation; import jakarta.validation.Validator; import jakarta.validation.ValidatorFactory; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; +import java.io.IOException; import java.util.Set; -import org.springframework.cache.annotation.Cacheable; -@Slf4j @Service -public class AuthorizationServerServiceImpl implements AuthorizationServerService { +@Slf4j +public class IssuerConfigUtil { @Autowired - private Validator validator; + private RestApiClient restApiClient; @Autowired - private RestApiClient restApiClient; + private CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator; @Autowired - private ObjectMapper objectMapper; + ObjectMapper objectMapper; + + @Autowired + private Validator validator; + + + @Cacheable(value = "issuerWellknown", key = "#p0") + public CredentialIssuerWellKnownResponse getIssuerWellknown(String credentialIssuerHost) throws ApiNotAccessibleException, IOException, InvalidWellknownResponseException { + try { + String wellknownEndpoint = credentialIssuerHost + "/.well-known/openid-credential-issuer"; + String wellknownResponse = restApiClient.getApi(wellknownEndpoint, String.class); + if (wellknownResponse == null) { + throw new ApiNotAccessibleException(); + } + CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = objectMapper.readValue(wellknownResponse, CredentialIssuerWellKnownResponse.class); + credentialIssuerWellknownResponseValidator.validate(credentialIssuerWellKnownResponse, validator); + return credentialIssuerWellKnownResponse; + } catch (JsonProcessingException | ApiNotAccessibleException | + InvalidWellknownResponseException e) { + throw e; + } + } - @Override @Cacheable(value = "authServerWellknown", key = "#p0") - public AuthorizationServerWellKnownResponse getWellknown(String authorizationServerHostUrl) throws AuthorizationServerWellknownResponseException { + public AuthorizationServerWellKnownResponse getAuthServerWellknown(String authorizationServerHostUrl) throws AuthorizationServerWellknownResponseException { try { String wellknownEndpoint = authorizationServerHostUrl + "/.well-known/oauth-authorization-server"; log.debug("fetching Authorization Server Wellknown by calling :: " + wellknownEndpoint); @@ -67,5 +89,3 @@ public void validate(AuthorizationServerWellKnownResponse response) throws Excep } } } - - diff --git a/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java b/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java index 63fac58ee..030888bf4 100644 --- a/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java @@ -7,8 +7,6 @@ import io.mosip.mimoto.dto.mimoto.CredentialIssuerConfigurationResponse; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.InvalidIssuerIdException; -import io.mosip.mimoto.service.AuthorizationServerService; -import io.mosip.mimoto.service.IssuerWellknownService; import io.mosip.mimoto.service.impl.IssuersServiceImpl; import io.mosip.mimoto.util.Utilities; import org.hamcrest.Matchers; @@ -54,15 +52,9 @@ public class IssuersControllerTest { @MockBean private Utilities utilities; - @MockBean - private IssuerWellknownService issuerWellknownService; - @MockBean ObjectMapper objectMapper; - @MockBean - AuthorizationServerService authorizationServerService; - @Test public void getIssuersTestForSearchValueNull() throws Exception { IssuersDTO issuers = new IssuersDTO(); diff --git a/src/test/java/io/mosip/mimoto/service/IssuerWellknownServiceTest.java b/src/test/java/io/mosip/mimoto/service/IssuerWellknownServiceTest.java deleted file mode 100644 index 30e9b41ec..000000000 --- a/src/test/java/io/mosip/mimoto/service/IssuerWellknownServiceTest.java +++ /dev/null @@ -1,88 +0,0 @@ -package io.mosip.mimoto.service; - -import com.fasterxml.jackson.databind.ObjectMapper; -import io.mosip.mimoto.dto.mimoto.CredentialIssuerConfigurationResponse; -import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; -import io.mosip.mimoto.exception.ApiNotAccessibleException; -import io.mosip.mimoto.exception.InvalidWellknownResponseException; -import io.mosip.mimoto.service.impl.IssuerWellknownServiceImpl; -import io.mosip.mimoto.util.CredentialIssuerWellknownResponseValidator; -import io.mosip.mimoto.util.RestApiClient; -import jakarta.validation.Validator; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Mockito; -import org.mockito.junit.MockitoJUnitRunner; - -import java.io.IOException; -import java.util.List; -import java.util.Map; - -import static io.mosip.mimoto.util.TestUtilities.*; -import static io.mosip.mimoto.util.TestUtilities.getCredentialSupportedResponse; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThrows; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; - -@RunWith(MockitoJUnitRunner.class) -public class IssuerWellknownServiceTest { - - @InjectMocks - IssuerWellknownServiceImpl issuerWellknownService = new IssuerWellknownServiceImpl(); - - @Mock - Validator validator; - - @Mock - RestApiClient restApiClient; - - @Mock - CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator; - - @Mock - ObjectMapper objectMapper; - - List issuerConfigRelatedFields = List.of("additional_headers", "authorization_endpoint", "authorization_audience", "credential_endpoint", "credential_audience"); - - String issuerWellKnownUrl, issuerId, credentialIssuerHostUrl, authServerWellknownUrl; - CredentialIssuerConfigurationResponse expectedCredentialIssuerConfigurationResponse; - - CredentialIssuerWellKnownResponse expectedCredentialIssuerWellKnownResponse; - - @Before - public void setUp() throws Exception { - credentialIssuerHostUrl = "https://issuer.env.net"; - issuerWellKnownUrl = "https://issuer.env.net/.well-known/openid-credential-issuer"; - expectedCredentialIssuerWellKnownResponse = getCredentialIssuerWellKnownResponseDto("Issuer1", - Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); - String expectedWellknownJson = getExpectedWellKnownJson(); - Mockito.when(restApiClient.getApi(issuerWellKnownUrl, String.class)) - .thenReturn(expectedWellknownJson); - Mockito.when(objectMapper.readValue(expectedWellknownJson, CredentialIssuerWellKnownResponse.class)).thenReturn(expectedCredentialIssuerWellKnownResponse); - } - - @Test - public void shouldReturnIssuerWellknownForTheRequestedIssuerId() throws ApiNotAccessibleException, IOException, InvalidWellknownResponseException { - CredentialIssuerWellKnownResponse actualCredentialIssuerWellKnownResponse = issuerWellknownService.getWellknown(credentialIssuerHostUrl); - - assertEquals(expectedCredentialIssuerWellKnownResponse, actualCredentialIssuerWellKnownResponse); - verify(restApiClient, times(1)).getApi(issuerWellKnownUrl, String.class); - } - - @Test - public void shouldThrowExceptionIfAnyIssuerOccurredWhileFetchingIssuerWellknown() throws ApiNotAccessibleException, IOException, InvalidWellknownResponseException { - Mockito.when(restApiClient.getApi(issuerWellKnownUrl, String.class)) - .thenReturn(null); - - ApiNotAccessibleException actualException = assertThrows(ApiNotAccessibleException.class, () -> { - issuerWellknownService.getWellknown(credentialIssuerHostUrl); - }); - - assertEquals("RESIDENT-APP-026 --> Api not accessible failure", actualException.getMessage()); - verify(restApiClient, times(1)).getApi(issuerWellKnownUrl, String.class); - } -} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java index d1a1245f5..cfdd7a627 100644 --- a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java @@ -11,8 +11,8 @@ import io.mosip.mimoto.exception.InvalidIssuerIdException; import io.mosip.mimoto.exception.InvalidWellknownResponseException; import io.mosip.mimoto.service.impl.CredentialServiceImpl; -import io.mosip.mimoto.service.impl.IssuerWellknownServiceImpl; import io.mosip.mimoto.service.impl.IssuersServiceImpl; +import io.mosip.mimoto.util.IssuerConfigUtil; import io.mosip.mimoto.util.Utilities; import org.junit.Before; import org.junit.Test; @@ -48,10 +48,7 @@ public class IssuersServiceTest { Utilities utilities; @Mock - IssuerWellknownServiceImpl issuerWellknownService; - - @Mock - AuthorizationServerService authorizationServerService; + IssuerConfigUtil issuersConfigUtil; @Spy ObjectMapper objectMapper; @@ -78,11 +75,11 @@ public void setUp() throws Exception { expectedCredentialIssuerWellKnownResponse = getCredentialIssuerWellKnownResponseDto(issuerId, Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); - Mockito.when(issuerWellknownService.getWellknown(credentialIssuerHostUrl)) + Mockito.when(issuersConfigUtil.getIssuerWellknown(credentialIssuerHostUrl)) .thenReturn(expectedCredentialIssuerWellKnownResponse); expectedCredentialIssuerConfigurationResponse = getCredentialIssuerConfigurationResponseDto(issuerId, "CredentialType1", List.of()); - Mockito.when(authorizationServerService.getWellknown(authServerWellknownUrl)).thenReturn(expectedCredentialIssuerConfigurationResponse.getAuthorizationServerWellKnownResponse()); + Mockito.when(issuersConfigUtil.getAuthServerWellknown(authServerWellknownUrl)).thenReturn(expectedCredentialIssuerConfigurationResponse.getAuthorizationServerWellKnownResponse()); } @Test @@ -132,7 +129,7 @@ public void shouldReturnIssuerDataAndConfigForTheIssuerIdIfExist() throws ApiNot } @Test - public void shouldReturnIssuerDataAndConfigForAllIssuer() throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { + public void shouldReturnIssuerDataAndConfigForAllIssuer() throws ApiNotAccessibleException, IOException { IssuersDTO expectedIssuers = new IssuersDTO(); List issuers = new ArrayList<>(List.of(getIssuerConfigDTO("Issuer3"), getIssuerConfigDTO("Issuer4"))); expectedIssuers.setIssuers(issuers); @@ -182,7 +179,7 @@ public void shouldReturnProperCredentialConfigurationsForTheRequestedIssuer() th } @Test - public void issuersConfigShouldThrowExceptionIfAnyErrorOccurredWhileFetchingIssuersWellknown() throws ApiNotAccessibleException, IOException { + public void issuersConfigShouldThrowExceptionIfAnyErrorOccurredWhileFetchingIssuersWellknown() { Mockito.when(utilities.getIssuersConfigJsonValue()).thenReturn(null); ApiNotAccessibleException actualException = assertThrows(ApiNotAccessibleException.class, () -> { @@ -196,7 +193,7 @@ public void issuersConfigShouldThrowExceptionIfAnyErrorOccurredWhileFetchingIssu @Test public void issuersConfigShouldThrowExceptionIfAnyErrorOccurredWhileFetchingIssuersAuthorizationServerWellknown() throws IOException, AuthorizationServerWellknownResponseException { - Mockito.when(authorizationServerService.getWellknown(authServerWellknownUrl)).thenThrow(new AuthorizationServerWellknownResponseException("well-known api is not accessible")); + Mockito.when(issuersConfigUtil.getAuthServerWellknown(authServerWellknownUrl)).thenThrow(new AuthorizationServerWellknownResponseException("well-known api is not accessible")); AuthorizationServerWellknownResponseException actualException = assertThrows(AuthorizationServerWellknownResponseException.class, () -> { issuersService.getIssuerConfiguration("Issuer3id"); @@ -204,6 +201,6 @@ public void issuersConfigShouldThrowExceptionIfAnyErrorOccurredWhileFetchingIssu assertEquals("RESIDENT-APP-042 --> Invalid Authorization Server well-known from server:\n" + "well-known api is not accessible", actualException.getMessage()); - verify(authorizationServerService, times(1)).getWellknown(authServerWellknownUrl); + verify(issuersConfigUtil, times(1)).getAuthServerWellknown(authServerWellknownUrl); } } \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/AuthorizationServerServiceTest.java b/src/test/java/io/mosip/mimoto/util/IssuerConfigUtilTest.java similarity index 50% rename from src/test/java/io/mosip/mimoto/service/AuthorizationServerServiceTest.java rename to src/test/java/io/mosip/mimoto/util/IssuerConfigUtilTest.java index 1298b7bf4..a8fbe4951 100644 --- a/src/test/java/io/mosip/mimoto/service/AuthorizationServerServiceTest.java +++ b/src/test/java/io/mosip/mimoto/util/IssuerConfigUtilTest.java @@ -1,10 +1,12 @@ -package io.mosip.mimoto.service; +package io.mosip.mimoto.util; import com.fasterxml.jackson.databind.ObjectMapper; import io.mosip.mimoto.dto.mimoto.AuthorizationServerWellKnownResponse; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; +import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.AuthorizationServerWellknownResponseException; -import io.mosip.mimoto.service.impl.AuthorizationServerServiceImpl; -import io.mosip.mimoto.util.RestApiClient; +import io.mosip.mimoto.exception.InvalidWellknownResponseException; +import jakarta.validation.Validator; import lombok.extern.slf4j.Slf4j; import org.junit.Before; import org.junit.Test; @@ -13,18 +15,21 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; -import java.net.URI; +import java.io.IOException; import java.util.List; +import java.util.Map; import static io.mosip.mimoto.util.TestUtilities.*; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThrows; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; @Slf4j @RunWith(MockitoJUnitRunner.class) -public class AuthorizationServerServiceTest { +public class IssuerConfigUtilTest { @InjectMocks - AuthorizationServerServiceImpl authorizationServerService = new AuthorizationServerServiceImpl(); + IssuerConfigUtil issuersConfigUtil = new IssuerConfigUtil(); @Mock RestApiClient restApiClient; @@ -32,31 +37,48 @@ public class AuthorizationServerServiceTest { @Mock ObjectMapper objectMapper; - String authorizationServerWellknownUrl; + @Mock + Validator validator; + + @Mock + CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator; + + + String authorizationServerWellknownUrl, authorizationServerHostUrl, issuerWellKnownUrl,exceptionMsgPrefix, issuerId, credentialIssuerHostUrl, authServerWellknownUrl; - String authorizationServerHostUrl; + CredentialIssuerWellKnownResponse expectedCredentialIssuerWellKnownResponse; - String exceptionMsgPrefix; @Before - public void setUp() { + public void setUp() throws IOException { + //Auth server wellknown setup authorizationServerWellknownUrl = "https://dev/authorize/.well-known/oauth-authorization-server"; authorizationServerHostUrl = "https://dev/authorize"; exceptionMsgPrefix = "RESIDENT-APP-042 --> Invalid Authorization Server well-known from server:\n"; + + //Issuer wellknown setup + credentialIssuerHostUrl = "https://issuer.env.net"; + issuerWellKnownUrl = "https://issuer.env.net/.well-known/openid-credential-issuer"; + expectedCredentialIssuerWellKnownResponse = getCredentialIssuerWellKnownResponseDto("Issuer1", + Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); + String expectedWellknownJson = getExpectedWellKnownJson(); + Mockito.when(restApiClient.getApi(issuerWellKnownUrl, String.class)) + .thenReturn(expectedWellknownJson); + Mockito.when(objectMapper.readValue(expectedWellknownJson, CredentialIssuerWellKnownResponse.class)).thenReturn(expectedCredentialIssuerWellKnownResponse); } @Test - public void shouldThrowExceptionIfResponseIsNullWhenGettingAuthServerWellknownConfig() throws Exception { + public void shouldThrowExceptionIfResponseIsNullWhenGettingAuthServerWellknownConfig() { String expectedExceptionMessage = exceptionMsgPrefix + "java.lang.Exception: well-known api is not accessible"; Mockito.when(restApiClient.getApi(authorizationServerWellknownUrl, String.class)).thenReturn(null); AuthorizationServerWellknownResponseException actualException = assertThrows(AuthorizationServerWellknownResponseException.class, () -> { - authorizationServerService.getWellknown(authorizationServerHostUrl); + issuersConfigUtil.getAuthServerWellknown(authorizationServerHostUrl); }); assertEquals(expectedExceptionMessage, actualException.getMessage()); } - + @Test public void shouldThrowExceptionIfAuthorizationEndpointIsMissingInAuthServerWellknownResponse() throws Exception { String expectedExceptionMessage = exceptionMsgPrefix + "java.lang.Exception: java.lang.Exception: Validation failed:\n" + "authorizationEndpoint: must not be blank"; @@ -66,22 +88,44 @@ public void shouldThrowExceptionIfAuthorizationEndpointIsMissingInAuthServerWell Mockito.when(objectMapper.readValue(expectedIssuersConfigJson, AuthorizationServerWellKnownResponse.class)).thenReturn(expectedAuthorizationServerWellKnownResponse); AuthorizationServerWellknownResponseException actualException = assertThrows(AuthorizationServerWellknownResponseException.class, () -> { - authorizationServerService.getWellknown(authorizationServerHostUrl); + issuersConfigUtil.getAuthServerWellknown(authorizationServerHostUrl); }); assertEquals(expectedExceptionMessage, actualException.getMessage()); } @Test - public void shouldReturnResponseIfTheAuthServerHostUrlAndResponseAreValid() throws Exception { + public void shouldReturnResponseIfTheAuthServerHostUrlAndWellknownResponseAreValid() throws Exception { AuthorizationServerWellKnownResponse expectedAuthorizationServerWellKnownResponse = getAuthServerWellknownResponseDto(List.of()); String expectedIssuersConfigJson = getExpectedIssuersConfigJson(); Mockito.when(restApiClient.getApi(authorizationServerWellknownUrl, String.class)).thenReturn(expectedIssuersConfigJson); Mockito.when(objectMapper.readValue(expectedIssuersConfigJson, AuthorizationServerWellKnownResponse.class)).thenReturn(expectedAuthorizationServerWellKnownResponse); - AuthorizationServerWellKnownResponse actualAuthorizationServerWellKnownResponse = authorizationServerService.getWellknown(authorizationServerHostUrl); + AuthorizationServerWellKnownResponse actualAuthorizationServerWellKnownResponse = issuersConfigUtil.getAuthServerWellknown(authorizationServerHostUrl); assertEquals(expectedAuthorizationServerWellKnownResponse, actualAuthorizationServerWellKnownResponse); } + + @Test + public void shouldReturnIssuerWellknownForTheRequestedIssuerId() throws ApiNotAccessibleException, IOException, InvalidWellknownResponseException { + CredentialIssuerWellKnownResponse actualCredentialIssuerWellKnownResponse = issuersConfigUtil.getIssuerWellknown(credentialIssuerHostUrl); + + assertEquals(expectedCredentialIssuerWellKnownResponse, actualCredentialIssuerWellKnownResponse); + verify(restApiClient, times(1)).getApi(issuerWellKnownUrl, String.class); + } + + @Test + public void shouldThrowExceptionIfAnyIssuerOccurredWhileFetchingIssuerWellknown() throws ApiNotAccessibleException, IOException, InvalidWellknownResponseException { + Mockito.when(restApiClient.getApi(issuerWellKnownUrl, String.class)) + .thenReturn(null); + + ApiNotAccessibleException actualException = assertThrows(ApiNotAccessibleException.class, () -> { + issuersConfigUtil.getIssuerWellknown(credentialIssuerHostUrl); + }); + + assertEquals("RESIDENT-APP-026 --> Api not accessible failure", actualException.getMessage()); + verify(restApiClient, times(1)).getApi(issuerWellKnownUrl, String.class); + } + } From 8af7744d443fdadd960e77e901d1ffd52c9a3ff7 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 24 Feb 2025 18:47:28 +0530 Subject: [PATCH 391/860] [INJIWEB-1436] remove the unnecessary try catch blocks in idp and issuer controller and config files as we are jsut re-throwing the exception and not doing anything with it Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../mimoto/controller/IdpController.java | 4 +- .../mimoto/controller/IssuersController.java | 2 +- .../mosip/mimoto/util/IssuerConfigUtil.java | 42 ++++++++----------- .../mimoto/util/IssuerConfigUtilTest.java | 2 +- 4 files changed, 21 insertions(+), 29 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/IdpController.java b/src/main/java/io/mosip/mimoto/controller/IdpController.java index 295911852..f8c4a1070 100644 --- a/src/main/java/io/mosip/mimoto/controller/IdpController.java +++ b/src/main/java/io/mosip/mimoto/controller/IdpController.java @@ -72,7 +72,7 @@ public ResponseEntity> otpRequest(@Valid throw new IdpException(); return ResponseEntity.status(HttpStatus.OK).body(internalResponse); } catch (Exception e) { - log.error("Wallet binding otp error occurred." + e); + log.error("Wallet binding otp error occurred.", e); String[] errorObj = Utilities.handleExceptionWithErrorCode(e, PlatformErrorMessages.MIMOTO_OTP_BINDING_EXCEPTION.getCode()); List errors = Utilities.getErrors(errorObj[0], errorObj[1]); responseWrapper.setResponse(null); @@ -109,7 +109,7 @@ public ResponseEntity> request(@Reques responseWrapper = joseUtil.addThumbprintAndKeyId(internalResponse); return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); } catch (Exception e) { - log.error("Wallet binding error occured for tranaction id " + requestDTO.getRequest().getIndividualId(), e); + log.error("Wallet binding error occurred for transaction id " + requestDTO.getRequest().getIndividualId(), e); String[] errorObj = Utilities.handleExceptionWithErrorCode(e, PlatformErrorMessages.MIMOTO_WALLET_BINDING_EXCEPTION.getCode()); List errors = Utilities.getErrors(errorObj[0], errorObj[1]); responseWrapper.setResponse(null); diff --git a/src/main/java/io/mosip/mimoto/controller/IssuersController.java b/src/main/java/io/mosip/mimoto/controller/IssuersController.java index f8567d3cd..61f2e52db 100644 --- a/src/main/java/io/mosip/mimoto/controller/IssuersController.java +++ b/src/main/java/io/mosip/mimoto/controller/IssuersController.java @@ -108,7 +108,7 @@ public ResponseEntity> ge responseWrapper.setResponse(issuerConfigurationResponse); return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); } catch (Exception exception) { - log.error("Exception occurred while fetching issuers configurations - " + exception); + log.error("Exception occurred while fetching issuers configurations - ", exception); String[] errorObj = Utilities.handleExceptionWithErrorCode(exception, INVALID_ISSUER_ID_CONFIGURATION.getCode()); List errors = Utilities.getErrors(errorObj[0], errorObj[1]); responseWrapper.setResponse(null); diff --git a/src/main/java/io/mosip/mimoto/util/IssuerConfigUtil.java b/src/main/java/io/mosip/mimoto/util/IssuerConfigUtil.java index c7d7dd144..30e1babe8 100644 --- a/src/main/java/io/mosip/mimoto/util/IssuerConfigUtil.java +++ b/src/main/java/io/mosip/mimoto/util/IssuerConfigUtil.java @@ -38,19 +38,14 @@ public class IssuerConfigUtil { @Cacheable(value = "issuerWellknown", key = "#p0") public CredentialIssuerWellKnownResponse getIssuerWellknown(String credentialIssuerHost) throws ApiNotAccessibleException, IOException, InvalidWellknownResponseException { - try { - String wellknownEndpoint = credentialIssuerHost + "/.well-known/openid-credential-issuer"; - String wellknownResponse = restApiClient.getApi(wellknownEndpoint, String.class); - if (wellknownResponse == null) { - throw new ApiNotAccessibleException(); - } - CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = objectMapper.readValue(wellknownResponse, CredentialIssuerWellKnownResponse.class); - credentialIssuerWellknownResponseValidator.validate(credentialIssuerWellKnownResponse, validator); - return credentialIssuerWellKnownResponse; - } catch (JsonProcessingException | ApiNotAccessibleException | - InvalidWellknownResponseException e) { - throw e; + String wellknownEndpoint = credentialIssuerHost + "/.well-known/openid-credential-issuer"; + String wellknownResponse = restApiClient.getApi(wellknownEndpoint, String.class); + if (wellknownResponse == null) { + throw new ApiNotAccessibleException(); } + CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = objectMapper.readValue(wellknownResponse, CredentialIssuerWellKnownResponse.class); + credentialIssuerWellknownResponseValidator.validate(credentialIssuerWellKnownResponse, validator); + return credentialIssuerWellKnownResponse; } @Cacheable(value = "authServerWellknown", key = "#p0") @@ -67,25 +62,22 @@ public AuthorizationServerWellKnownResponse getAuthServerWellknown(String author return authorizationServerWellKnownResponse; } catch (Exception e) { + log.error("Exception occurred while fetching Authorization Server wellknown ", e); throw new AuthorizationServerWellknownResponseException(e.toString()); } } public void validate(AuthorizationServerWellKnownResponse response) throws Exception { - try { - ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); - Validator validator = factory.getValidator(); - Set> violations = validator.validate(response); - if (!violations.isEmpty()) { - StringBuilder sb = new StringBuilder("Validation failed:"); - for (ConstraintViolation violation : violations) { - sb.append("\n").append(violation.getPropertyPath()).append(": ").append(violation.getMessage()); - } - - throw new Exception(sb.toString()); + ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); + Validator validator = factory.getValidator(); + Set> violations = validator.validate(response); + if (!violations.isEmpty()) { + StringBuilder sb = new StringBuilder("Validation failed:"); + for (ConstraintViolation violation : violations) { + sb.append("\n").append(violation.getPropertyPath()).append(": ").append(violation.getMessage()); } - } catch (Exception e) { - throw new Exception(e.toString()); + + throw new Exception(sb.toString()); } } } diff --git a/src/test/java/io/mosip/mimoto/util/IssuerConfigUtilTest.java b/src/test/java/io/mosip/mimoto/util/IssuerConfigUtilTest.java index a8fbe4951..24bd3744d 100644 --- a/src/test/java/io/mosip/mimoto/util/IssuerConfigUtilTest.java +++ b/src/test/java/io/mosip/mimoto/util/IssuerConfigUtilTest.java @@ -81,7 +81,7 @@ public void shouldThrowExceptionIfResponseIsNullWhenGettingAuthServerWellknownCo @Test public void shouldThrowExceptionIfAuthorizationEndpointIsMissingInAuthServerWellknownResponse() throws Exception { - String expectedExceptionMessage = exceptionMsgPrefix + "java.lang.Exception: java.lang.Exception: Validation failed:\n" + "authorizationEndpoint: must not be blank"; + String expectedExceptionMessage = exceptionMsgPrefix + "java.lang.Exception: Validation failed:\n" + "authorizationEndpoint: must not be blank"; AuthorizationServerWellKnownResponse expectedAuthorizationServerWellKnownResponse = getAuthServerWellknownResponseDto(List.of("authorization_endpoint")); String expectedIssuersConfigJson = getExpectedIssuersConfigJson(); Mockito.when(restApiClient.getApi(authorizationServerWellknownUrl, String.class)).thenReturn(expectedIssuersConfigJson); From 888eaab339a4e5b32050053e04e628f488b6b7e0 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 25 Feb 2025 01:47:09 +0530 Subject: [PATCH 392/860] [INJIWEB-1436] mark the well-known-proxy endpoint as deprecated by setting the deprecated property to true in openapi document json file Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- docs/api-documentation-openapi.json | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index c7f6ee266..41017982c 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -1890,6 +1890,7 @@ "tags": [ "Trusted Issuers" ], + "deprecated": true, "description": "This API fetches and allows searching for Credential Types offered by the issuer, all sourced from the issuer's well-known configuration. Since version 0.16.0, this endpoint is deprecated and will be removed in a future release. Use issuers new endpoint issuers/{issuer-id}/configuration instead.", "responses": { "200": { From f5e273512c98495f16b2060ec3cb273cedd9f00a Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 25 Feb 2025 13:07:56 +0530 Subject: [PATCH 393/860] [INJIWEB-1436] cache the response of getIssuers method of IssuersServiceImpl class Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- src/main/java/io/mosip/mimoto/config/CacheConfig.java | 6 +++++- .../io/mosip/mimoto/service/impl/IssuersServiceImpl.java | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/mosip/mimoto/config/CacheConfig.java b/src/main/java/io/mosip/mimoto/config/CacheConfig.java index 2c5f8a455..d397b4012 100644 --- a/src/main/java/io/mosip/mimoto/config/CacheConfig.java +++ b/src/main/java/io/mosip/mimoto/config/CacheConfig.java @@ -20,10 +20,13 @@ public class CacheConfig { @Value("${cache.credential.issuer.wellknown.response.expiry-time-in-min:60}") private Long issuerWellknownExpiryTimeInMin; + @Value("${cache.issuers.config.expiry-time-in-min:60}") + private Long issuersConfigExpiryTimeInMin; + @Value("${cache.credential.issuer.authserver.wellknown.response.expiry-time-in-min:60}") private Long authServerWellknownExpiryTimeInMin; - @Value("${cache.default.expiry-time-in-min:0}") + @Value("${cache.default.expiry-time-in-min:60}") private long defaultCacheExpiryTimeInMin; private Caffeine buildCache(Long expiryTime) { @@ -37,6 +40,7 @@ private Caffeine buildCache(Long expiryTime) { public CacheManager cacheManager() { CaffeineCacheManager cacheManager = new CaffeineCacheManager(); cacheManager.registerCustomCache("issuerWellknown", buildCache(issuerWellknownExpiryTimeInMin).build()); + cacheManager.registerCustomCache("issuersConfig", buildCache(issuersConfigExpiryTimeInMin).build()); cacheManager.registerCustomCache("authServerWellknown", buildCache(authServerWellknownExpiryTimeInMin).build()); cacheManager.registerCustomCache("credentialIssuerConfig", buildCache(issuerConfigExpiryTimeInMin).build()); cacheManager.setCaffeine(buildCache(null)); diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index 680622e7c..89371e08d 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -38,6 +38,7 @@ public class IssuersServiceImpl implements IssuersService { private IssuerConfigUtil issuersConfigUtil; @Override + @Cacheable(value = "issuersConfig", key = "#p0 ?: 'allIssuersConfig'") public IssuersDTO getIssuers(String search) throws ApiNotAccessibleException, AuthorizationServerWellknownResponseException, IOException, InvalidWellknownResponseException { IssuersDTO issuersDTO = getAllIssuers(); issuersDTO = getAllEnabledIssuers(issuersDTO); From 6b1ea2576e2c9e6f7afb5cae5d519bba6e384113 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 25 Feb 2025 14:41:14 +0530 Subject: [PATCH 394/860] [INJIWEB-1436] return only authorization server wellknown details and credentialConfigurationsSupported fileds in issuer configuration endpoint and remove all the other fields from response Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../io/mosip/mimoto/config/IssuersValidationConfig.java | 2 +- .../dto/mimoto/CredentialIssuerConfigurationResponse.java | 6 +++--- src/test/resources/responses/expectedIssuerConfig.json | 5 ----- 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java b/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java index 1a00503b5..de18e7b29 100644 --- a/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java +++ b/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java @@ -41,7 +41,7 @@ public void run(ApplicationArguments args) throws ApiNotAccessibleException, IOE try { issuerDTOList = issuersService.getAllIssuers(); } catch (Exception e) { - log.error(VALIDATION_ERROR_MSG + e); + log.error(VALIDATION_ERROR_MSG , e); throw new RuntimeException(VALIDATION_ERROR_MSG); } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerConfigurationResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerConfigurationResponse.java index 1a8527b2a..bb0d5d167 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerConfigurationResponse.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerConfigurationResponse.java @@ -20,20 +20,20 @@ public class CredentialIssuerConfigurationResponse { @NotBlank @URL @SerializedName("credential_issuer") - @JsonProperty("credential_issuer") + @JsonProperty(value = "credential_issuer", access = JsonProperty.Access.WRITE_ONLY) @Schema(description = "Unique Identifier of the Credential Issuer") private String credentialIssuer; @NotEmpty @SerializedName("authorization_servers") - @JsonProperty("authorization_servers") + @JsonProperty(value = "authorization_servers", access = JsonProperty.Access.WRITE_ONLY) @Schema(description = "List of Authorization Server Endpoint") private List<@NotBlank @URL String> authorizationServers; @NotBlank @SerializedName("credential_endpoint") @Pattern(regexp = "https?://.*?/credential$") - @JsonProperty("credential_endpoint") + @JsonProperty(value = "credential_endpoint", access = JsonProperty.Access.WRITE_ONLY) @Schema(description = "Endpoint to download the Credential") private String credentialEndPoint; diff --git a/src/test/resources/responses/expectedIssuerConfig.json b/src/test/resources/responses/expectedIssuerConfig.json index b7cc77425..e81b22557 100644 --- a/src/test/resources/responses/expectedIssuerConfig.json +++ b/src/test/resources/responses/expectedIssuerConfig.json @@ -1,9 +1,4 @@ { - "credential_issuer": "https://dev/id1", - "authorization_servers": [ - "https://auth-server.env.net" - ], - "credential_endpoint": "https://dev/issuance/credential", "credential_configurations_supported": { "CredentialType1": { "format": "ldp_vc", From c5960e09a02c4702931703e87f3b31899c1e05dc Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 25 Feb 2025 14:47:01 +0530 Subject: [PATCH 395/860] [INJIWEB-1436] add expiry cache property for issuers config Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- src/main/java/io/mosip/mimoto/config/CacheConfig.java | 4 ++-- src/main/resources/application-local.properties | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/config/CacheConfig.java b/src/main/java/io/mosip/mimoto/config/CacheConfig.java index d397b4012..833197f53 100644 --- a/src/main/java/io/mosip/mimoto/config/CacheConfig.java +++ b/src/main/java/io/mosip/mimoto/config/CacheConfig.java @@ -15,7 +15,7 @@ public class CacheConfig { @Value("${cache.credential.issuer.config.expiry-time-in-min:60}") - private Long issuerConfigExpiryTimeInMin; + private Long credentialIssuerConfigExpiryTimeInMin; @Value("${cache.credential.issuer.wellknown.response.expiry-time-in-min:60}") private Long issuerWellknownExpiryTimeInMin; @@ -42,7 +42,7 @@ public CacheManager cacheManager() { cacheManager.registerCustomCache("issuerWellknown", buildCache(issuerWellknownExpiryTimeInMin).build()); cacheManager.registerCustomCache("issuersConfig", buildCache(issuersConfigExpiryTimeInMin).build()); cacheManager.registerCustomCache("authServerWellknown", buildCache(authServerWellknownExpiryTimeInMin).build()); - cacheManager.registerCustomCache("credentialIssuerConfig", buildCache(issuerConfigExpiryTimeInMin).build()); + cacheManager.registerCustomCache("credentialIssuerConfig", buildCache(credentialIssuerConfigExpiryTimeInMin).build()); cacheManager.setCaffeine(buildCache(null)); return cacheManager; } diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 09e27bee3..b62cfae66 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -239,5 +239,6 @@ mosip.security.origins=http://localhost:3004 #Caffeine cache related configurations cache.credential.issuer.config.expiry-time-in-min = 60 cache.credential.issuer.wellknown.response.expiry-time-in-min = 60 +cache.issuers.config.expiry-time-in-min = 60 cache.credential.issuer.authserver.wellknown.response.expiry-time-in-min = 60 cache.default.expiry-time-in-min = 60 From f4f2c989926b60591307ecf646f382a41d35cfdf Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 25 Feb 2025 15:08:43 +0530 Subject: [PATCH 396/860] [INJIWEB-1436] add caffiene cache expiry properties in mimoto default properties file of docker compose Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- docker-compose/config/mimoto-default.properties | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docker-compose/config/mimoto-default.properties b/docker-compose/config/mimoto-default.properties index f07501f09..9876f2295 100644 --- a/docker-compose/config/mimoto-default.properties +++ b/docker-compose/config/mimoto-default.properties @@ -289,4 +289,8 @@ mosip.data.share.create.retry.count=3 #OpenId4VP related Configuration END #Caffeine cache related configurations -cache.expiry.time.in.min = 60 \ No newline at end of file +cache.credential.issuer.config.expiry-time-in-min = 60 +cache.credential.issuer.wellknown.response.expiry-time-in-min = 60 +cache.issuers.config.expiry-time-in-min = 60 +cache.credential.issuer.authserver.wellknown.response.expiry-time-in-min = 60 +cache.default.expiry-time-in-min = 60 \ No newline at end of file From aae1b8350f3a3ec7fa825f9eb44c3afaa5eafb4a Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 25 Feb 2025 15:20:33 +0530 Subject: [PATCH 397/860] [INJIWEB-1436] update the introduction message in deploy config server readme file Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- deploy/config-server/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/config-server/README.md b/deploy/config-server/README.md index 387f46bec..a6ced3571 100755 --- a/deploy/config-server/README.md +++ b/deploy/config-server/README.md @@ -1,7 +1,7 @@ # Config server ## Introduction -Config server serves all properties required by MOSIP modules. This must be installed before any other MOSIP modules. +Config server serves all properties required by Inji modules. This must be installed before any other Inji modules. ## Install * Review `values.yaml` and make sure git repository parameters are as per your installation. From dbd7e331a6578a4cebcdc9946a282e432a5a027e Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Tue, 25 Feb 2025 16:15:37 +0530 Subject: [PATCH 398/860] [injiweb-1370] Added encryption and decryption logic Signed-off-by: Gurpreet41082 --- pom.xml | 6 ++ .../mimoto/MimotoServiceApplication.java | 17 +++- .../mosip/mimoto/config/KeyManagerConfig.java | 37 ++++++++ .../mimoto/controller/UserController.java | 8 +- .../mosip/mimoto/dbentity/UserMetadata.java | 6 +- .../OAuth2AuthenticationSuccessHandler.java | 3 + .../mimoto/service/UserMetadataService.java | 88 +++++++++++-------- .../mimoto/util/EncryptionDecryptionUtil.java | 55 ++++++++++++ .../resources/application-local.properties | 34 +++++++ 9 files changed, 208 insertions(+), 46 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/config/KeyManagerConfig.java create mode 100644 src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java diff --git a/pom.xml b/pom.xml index f6e4108fd..9343d4b37 100644 --- a/pom.xml +++ b/pom.xml @@ -474,6 +474,12 @@ postgresql ${postgresql.version} + + io.mosip.kernel + kernel-keymanager-service + 1.3.0-beta.2 + lib + diff --git a/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java b/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java index 2ab2ef661..b4b71121c 100644 --- a/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java +++ b/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java @@ -4,6 +4,7 @@ import io.mosip.kernel.biometrics.spi.CbeffUtil; import io.mosip.kernel.cbeffutil.impl.CbeffImpl; +import io.mosip.kernel.keygenerator.bouncycastle.KeyGenerator; import lombok.extern.slf4j.Slf4j; import org.json.simple.JSONObject; import org.springframework.boot.SpringApplication; @@ -22,12 +23,19 @@ "io.mosip.mimoto.*", "io.mosip.mimoto.dbentity", "io.mosip.kernel.websub.*", + "io.mosip.kernel.cryptomanager.*", + "io.mosip.kernel.keymanager.*", + "io.mosip.kernel.keymanagerservice.helper", + "io.mosip.kernel.keymanagerservice.util", + "io.mosip.kernel.keymanagerservice.service", + "io.mosip.kernel.keymanagerservice.validator", + "io.mosip.kernel.crypto", "${mosip.auth.adapter.impl.basepackage}" }, exclude = { SecurityAutoConfiguration.class }) -@EntityScan(basePackages = "io.mosip.mimoto.dbentity") -@EnableJpaRepositories(basePackages = "io.mosip.mimoto.repository") +@EntityScan(basePackages = {"io.mosip.mimoto.dbentity","io.mosip.kernel.keymanagerservice.entity"}) +@EnableJpaRepositories(basePackages = {"io.mosip.mimoto.repository","io.mosip.kernel.keymanagerservice.repository"}) @Slf4j @EnableScheduling @EnableAsync @@ -47,6 +55,11 @@ public ThreadPoolTaskScheduler taskScheduler() { return threadPoolTaskScheduler; } + @Bean + public KeyGenerator keyGenerator() { + return new KeyGenerator(); + } + public static JSONObject getGitProp() { try { return (new ObjectMapper()).readValue( diff --git a/src/main/java/io/mosip/mimoto/config/KeyManagerConfig.java b/src/main/java/io/mosip/mimoto/config/KeyManagerConfig.java new file mode 100644 index 000000000..ebd80e3cf --- /dev/null +++ b/src/main/java/io/mosip/mimoto/config/KeyManagerConfig.java @@ -0,0 +1,37 @@ +package io.mosip.mimoto.config; + +import io.mosip.kernel.keymanagerservice.dto.KeyPairGenerateRequestDto; +import io.mosip.kernel.keymanagerservice.service.KeymanagerService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +public class KeyManagerConfig implements ApplicationRunner { + + + @Autowired + private KeymanagerService keymanagerService; + + + @Override + public void run(ApplicationArguments args) throws Exception { + log.info("===================== MIMOTOSERVICE ROOT KEY CHECK ========================"); + String objectType = "CSR"; + KeyPairGenerateRequestDto rootKeyRequest = new KeyPairGenerateRequestDto(); + rootKeyRequest.setApplicationId("ROOT"); + // Set the reference id to empty string, as keymanager is expecting the same for initialization + rootKeyRequest.setReferenceId(org.apache.commons.lang3.StringUtils.EMPTY); + keymanagerService.generateMasterKey(objectType, rootKeyRequest); + log.info("===================== MIMOTOSERVICE MASTER KEY CHECK ========================"); + KeyPairGenerateRequestDto masterKeyRequest = new KeyPairGenerateRequestDto(); + masterKeyRequest.setApplicationId("MIMOTO"); + // Set the reference id to empty string, as keymanager is expecting the same for initialization + masterKeyRequest.setReferenceId(org.apache.commons.lang3.StringUtils.EMPTY); + keymanagerService.generateMasterKey(objectType, masterKeyRequest); + log.info("===================== MIMOTO KEY SETUP COMPLETED ========================"); + } +} diff --git a/src/main/java/io/mosip/mimoto/controller/UserController.java b/src/main/java/io/mosip/mimoto/controller/UserController.java index 0ba3a852a..0748ad13f 100644 --- a/src/main/java/io/mosip/mimoto/controller/UserController.java +++ b/src/main/java/io/mosip/mimoto/controller/UserController.java @@ -4,6 +4,7 @@ import io.mosip.mimoto.dbentity.UserMetadata; import io.mosip.mimoto.exception.OAuth2AuthenticationException; import io.mosip.mimoto.repository.UserMetadataRepository; +import io.mosip.mimoto.util.EncryptionDecryptionUtil; import io.mosip.mimoto.util.Utilities; import jakarta.servlet.http.HttpSession; import lombok.extern.slf4j.Slf4j; @@ -24,6 +25,9 @@ public class UserController { @Autowired private UserMetadataRepository userMetadataRepository; + @Autowired + private EncryptionDecryptionUtil encryptionDecryptionUtill; + @GetMapping("/profile") public ResponseEntity> getUserProfile(Authentication authentication, HttpSession session) { try { @@ -41,8 +45,8 @@ public ResponseEntity> getUserProfile(Authentication aut validateIdentityProvider(userMetadata, identityProvider); String userDetails = String.format("{\"displayName\": \"%s\", \"profilePictureUrl\": \"%s\"}", - userMetadata.getDisplayName(), - userMetadata.getProfilePictureUrl()); + encryptionDecryptionUtill.decrypt(userMetadata.getDisplayName(), "user_pii", "", ""), + encryptionDecryptionUtill.decrypt(userMetadata.getProfilePictureUrl(), "user_pii", "", "")); responseWrapper.setResponse(userDetails); return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); diff --git a/src/main/java/io/mosip/mimoto/dbentity/UserMetadata.java b/src/main/java/io/mosip/mimoto/dbentity/UserMetadata.java index 98012699d..a75f89bde 100644 --- a/src/main/java/io/mosip/mimoto/dbentity/UserMetadata.java +++ b/src/main/java/io/mosip/mimoto/dbentity/UserMetadata.java @@ -21,16 +21,16 @@ public class UserMetadata { @Column(name = "identity_provider", nullable = false) private String identityProvider; - @Column(name = "display_name", nullable = false) + @Column(name = "display_name", nullable = false, columnDefinition = "TEXT") private String displayName; - @Column(name = "profile_picture_url") + @Column(name = "profile_picture_url", columnDefinition = "TEXT") private String profilePictureUrl; @Column(name = "phone_number") private String phoneNumber; - @Column(name = "email", nullable = false) + @Column(name = "email", nullable = false, columnDefinition = "TEXT") private String email; @Column(name = "created_at", updatable = false) diff --git a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java index ce44e66c6..64ef0d2ee 100644 --- a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java +++ b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java @@ -1,8 +1,11 @@ package io.mosip.mimoto.security.oauth2; import io.mosip.mimoto.service.UserMetadataService; +import jakarta.servlet.http.HttpSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.Authentication; +import org.springframework.security.oauth2.client.OAuth2AuthorizedClient; +import org.springframework.security.oauth2.client.OAuth2AuthorizedClientService; import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken; import org.springframework.security.oauth2.core.user.OAuth2User; import org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler; diff --git a/src/main/java/io/mosip/mimoto/service/UserMetadataService.java b/src/main/java/io/mosip/mimoto/service/UserMetadataService.java index 1c4884cbe..3903bc849 100644 --- a/src/main/java/io/mosip/mimoto/service/UserMetadataService.java +++ b/src/main/java/io/mosip/mimoto/service/UserMetadataService.java @@ -2,68 +2,78 @@ import io.mosip.mimoto.dbentity.UserMetadata; import io.mosip.mimoto.repository.UserMetadataRepository; +import io.mosip.mimoto.util.EncryptionDecryptionUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.sql.Timestamp; import java.util.Optional; +import java.util.function.Consumer; +import java.util.function.Supplier; @Service public class UserMetadataService { - private final UserMetadataRepository userMetadataRepository; + @Autowired + private UserMetadataRepository userMetadataRepository; @Autowired - public UserMetadataService(UserMetadataRepository userMetadataRepository) { - this.userMetadataRepository = userMetadataRepository; - } + private EncryptionDecryptionUtil encryptionDecryptionUtil; public void updateOrInsertUserMetadata(String providerSubjectId, String identityProvider, String displayName, String profilePictureUrl, String email) { + // Compute current time once + Timestamp now = new Timestamp(System.currentTimeMillis()); + // Check if user exists Optional existingUser = userMetadataRepository.findByProviderSubjectId(providerSubjectId); - UserMetadata userMetadata; - if (existingUser.isPresent()) { - userMetadata = existingUser.get(); - - // Check if any attributes need to be updated - boolean isUpdated = false; - Timestamp now = new Timestamp(System.currentTimeMillis()); + // If user exists, update metadata + updateUserMetadata(existingUser.get(), displayName, profilePictureUrl, email, now); + } else { + // If user does not exist, create new record + createUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email, now); + } + } - if (!userMetadata.getDisplayName().equals(displayName)) { - userMetadata.setDisplayName(displayName); - isUpdated = true; - } - if (!userMetadata.getProfilePictureUrl().equals(profilePictureUrl)) { - userMetadata.setProfilePictureUrl(profilePictureUrl); - isUpdated = true; - } - if (!userMetadata.getEmail().equals(email)) { - userMetadata.setEmail(email); - isUpdated = true; - } + private void updateUserMetadata(UserMetadata userMetadata, String displayName, String profilePictureUrl, + String email, Timestamp now) { + boolean isUpdated = false; - if (isUpdated) { - userMetadata.setUpdatedAt(now); - userMetadataRepository.save(userMetadata); // Update record - } + // Check and update fields if needed + isUpdated |= updateField(userMetadata::getDisplayName, userMetadata::setDisplayName, displayName); + isUpdated |= updateField(userMetadata::getProfilePictureUrl, userMetadata::setProfilePictureUrl, profilePictureUrl); + isUpdated |= updateField(userMetadata::getEmail, userMetadata::setEmail, email); - } else { - // If the user does not exist, create a new record - userMetadata = new UserMetadata(); - userMetadata.setProviderSubjectId(providerSubjectId); - userMetadata.setIdentityProvider(identityProvider); - userMetadata.setDisplayName(displayName); - userMetadata.setProfilePictureUrl(profilePictureUrl); - userMetadata.setEmail(email); - userMetadata.setCreatedAt(new Timestamp(System.currentTimeMillis())); - userMetadata.setUpdatedAt(new Timestamp(System.currentTimeMillis())); + // Save the updated record + if (isUpdated) { + userMetadata.setUpdatedAt(now); + userMetadataRepository.save(userMetadata); + } + } - userMetadataRepository.save(userMetadata); // Insert new record + private boolean updateField(Supplier getter, Consumer setter, String newValue) { + String decryptedValue = encryptionDecryptionUtil.decrypt(getter.get(), "user_pii", "", ""); + if (!decryptedValue.equals(newValue)) { + setter.accept(encryptionDecryptionUtil.encrypt(newValue, "user_pii", "", "")); + return true; } + return false; } -} + private void createUserMetadata(String providerSubjectId, String identityProvider, String displayName, + String profilePictureUrl, String email, Timestamp now) { + UserMetadata userMetadata = new UserMetadata(); + userMetadata.setProviderSubjectId(providerSubjectId); + userMetadata.setIdentityProvider(identityProvider); + userMetadata.setDisplayName(encryptionDecryptionUtil.encrypt(displayName, "user_pii", "", "")); + userMetadata.setProfilePictureUrl(encryptionDecryptionUtil.encrypt(profilePictureUrl, "user_pii", "", "")); + userMetadata.setEmail(encryptionDecryptionUtil.encrypt(email, "user_pii", "", "")); + userMetadata.setCreatedAt(now); + userMetadata.setUpdatedAt(now); + + userMetadataRepository.save(userMetadata); // Insert new record + } +} diff --git a/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java b/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java new file mode 100644 index 000000000..a4700ddc0 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java @@ -0,0 +1,55 @@ +package io.mosip.mimoto.util; + +import io.mosip.kernel.cryptomanager.service.CryptomanagerService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import io.mosip.kernel.cryptomanager.dto.CryptomanagerRequestDto; +import io.mosip.kernel.core.util.CryptoUtil; + +import java.nio.charset.StandardCharsets; + +@Component +@Slf4j +public class EncryptionDecryptionUtil { + /** + * The cryptomanager service. + */ + @Autowired + private CryptomanagerService cryptomanagerService; + private + @Value("${spring.application.name}") + String appId; + + public String encrypt(String dataToEncrypt, String refId, String aad, String saltToEncrypt) { + if (StringUtils.isBlank(dataToEncrypt)) { + return null; + } + CryptomanagerRequestDto request = new CryptomanagerRequestDto(); + request.setApplicationId(appId.toUpperCase()); + request.setTimeStamp(DateUtils.getUTCCurrentDateTime()); + request.setData(CryptoUtil.encodeToURLSafeBase64(dataToEncrypt.getBytes(StandardCharsets.UTF_8))); + request.setReferenceId(refId); + request.setAad(aad); + request.setSalt(saltToEncrypt); + return cryptomanagerService.encrypt(request).getData(); + // return new String(CryptoUtil.decodeURLSafeBase64(encryptedData)); + } + + public String decrypt(String dataToDecrypt, String refId, String aad, String saltToDecrypt) { + if (StringUtils.isBlank(dataToDecrypt)) { + return null; + } + CryptomanagerRequestDto request = new CryptomanagerRequestDto(); + request.setApplicationId(appId.toUpperCase()); + request.setTimeStamp(DateUtils.getUTCCurrentDateTime()); + request.setData(dataToDecrypt); + request.setReferenceId(refId); + request.setAad(aad); + request.setSalt(saltToDecrypt); + return new String(CryptoUtil.decodeURLSafeBase64(cryptomanagerService.decrypt(request).getData())); + } + +} diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index ae5f35b8c..b5f2dc5e0 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -133,6 +133,40 @@ mosip.kernel.pin.length=6 #length of the token id mosip.kernel.tokenid.length=36 +#------------------------------------ Key-manager specific properties -------------------------------------------------- + +#Crypto asymmetric algorithm name +mosip.kernel.crypto.asymmetric-algorithm-name=RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING +#Crypto symmetric algorithm name +mosip.kernel.crypto.symmetric-algorithm-name=AES/GCM/NoPadding +#Encrypted data and encrypted symmetric key separator +mosip.kernel.data-key-splitter=#KEY_SPLITTER# +#GCM tag length +mosip.kernel.crypto.gcm-tag-length=128 +#Hash algo name +mosip.kernel.crypto.hash-algorithm-name=PBKDF2WithHmacSHA512 +#Symmtric key length used in hash +mosip.kernel.crypto.hash-symmetric-key-length=256 +#No of iterations in hash +mosip.kernel.crypto.hash-iteration=100000 +mosip.kernel.keygenerator.symmetric-algorithm-name=AES +mosip.kernel.keygenerator.symmetric-key-length=256 +#Asymmetric algorithm key length +mosip.kernel.keygenerator.asymmetric-key-length=2048 +#Keygenerator asymmetric algorithm name +mosip.kernel.keygenerator.asymmetric-algorithm-name=RSA +mosip.kernel.keymanager.hsm.config-path=/Users/gurpreet.kaur/MOSIP/code/mimoto/certs/oidckeystore.p12 +mosip.kernel.keymanager.hsm.keystore-type=PKCS12 +mosip.kernel.keymanager.hsm.keystore-pass=mosip@123 + + +mosip.kernel.keymanager.certificate.default.common-name=www.example.com +mosip.kernel.keymanager.certificate.default.organizational-unit=EXAMPLE-CENTER +mosip.kernel.keymanager.certificate.default.organization=IIITB +mosip.kernel.keymanager.certificate.default.location=BANGALORE +mosip.kernel.keymanager.certificate.default.state=KA +mosip.kernel.keymanager.certificate.default.country=IN + # log level logging.level.root=WARN logging.level.io.mosip=INFO From 32f8a27a7dd579f1b5a69d5452af965c3395d56a Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Tue, 25 Feb 2025 16:57:16 +0530 Subject: [PATCH 399/860] [injiweb-1370] Added redis dependencies Signed-off-by: Gurpreet41082 --- pom.xml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 9343d4b37..85f1b0755 100644 --- a/pom.xml +++ b/pom.xml @@ -54,7 +54,8 @@ 3.2.3 - + 3.4.0 + 3.4.1 2.1.210 @@ -212,6 +213,16 @@ spring-boot-starter-oauth2-client ${spring.boot.version} + + org.springframework.session + spring-session-data-redis + ${session.redis.version} + + + org.springframework.boot + spring-boot-starter-data-redis + ${starter.redis.version} + org.junit.vintage junit-vintage-engine From 67c7a10d51a4f701e99fd237c7b76dc9f59c42ff Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 25 Feb 2025 20:50:13 +0530 Subject: [PATCH 400/860] [INJIWEB-1436] rename credentialIssuerConfigurationResponse to credentialIssuerConfiguration and added credentialIssuerConfigurationDTO to expose only the required fields in issuer configuration endpoint Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../mimoto/controller/IssuersController.java | 16 +++--- .../mimoto/CredentialIssuerConfiguration.java | 21 ++++++++ .../CredentialIssuerConfigurationDTO.java | 22 ++++++++ ...CredentialIssuerConfigurationResponse.java | 54 ------------------- .../io/mosip/mimoto/service/IdpService.java | 4 +- .../mosip/mimoto/service/IssuersService.java | 2 +- .../service/impl/CredentialServiceImpl.java | 20 +++---- .../mimoto/service/impl/IdpServiceImpl.java | 6 +-- .../service/impl/IssuersServiceImpl.java | 6 +-- .../controller/IssuersControllerTest.java | 11 ++-- .../mimoto/service/CredentialServiceTest.java | 2 +- .../mosip/mimoto/service/IdpServiceTest.java | 6 +-- .../mimoto/service/IssuersServiceTest.java | 12 ++--- .../io/mosip/mimoto/util/TestUtilities.java | 6 +-- 14 files changed, 90 insertions(+), 98 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerConfiguration.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerConfigurationDTO.java delete mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerConfigurationResponse.java diff --git a/src/main/java/io/mosip/mimoto/controller/IssuersController.java b/src/main/java/io/mosip/mimoto/controller/IssuersController.java index 61f2e52db..19e4089ee 100644 --- a/src/main/java/io/mosip/mimoto/controller/IssuersController.java +++ b/src/main/java/io/mosip/mimoto/controller/IssuersController.java @@ -5,7 +5,8 @@ import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.IssuersDTO; -import io.mosip.mimoto.dto.mimoto.CredentialIssuerConfigurationResponse; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerConfiguration; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerConfigurationDTO; import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.AuthorizationServerWellknownResponseException; @@ -63,7 +64,7 @@ public ResponseEntity> getAllIssuers(@RequestParam(r @GetMapping(value = "/{issuer-id}/well-known-proxy", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity getIssuerWellknown(@PathVariable("issuer-id") String issuerId) { try { - CredentialIssuerConfigurationResponse issuerConfigurationResponse = issuersService.getIssuerConfiguration(issuerId); + CredentialIssuerConfiguration issuerConfigurationResponse = issuersService.getIssuerConfiguration(issuerId); CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = new CredentialIssuerWellKnownResponse( issuerConfigurationResponse.getCredentialIssuer(), issuerConfigurationResponse.getAuthorizationServers(), @@ -101,11 +102,14 @@ public ResponseEntity> getIssuerConfig(@PathVariable( @Operation(summary = SwaggerLiteralConstants.ISSUERS_GET_ISSUER_CONFIGURATION_SUMMARY, description = SwaggerLiteralConstants.ISSUERS_GET_ISSUER_CONFIGURATION_DESCRIPTION) @GetMapping(value = "/{issuer-id}/configuration", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity> getIssuerConfiguration(@PathVariable("issuer-id") String issuerId) { - ResponseWrapper responseWrapper = new ResponseWrapper<>(); + public ResponseEntity> getIssuerConfiguration(@PathVariable("issuer-id") String issuerId) { + ResponseWrapper responseWrapper = new ResponseWrapper<>(); try { - CredentialIssuerConfigurationResponse issuerConfigurationResponse = issuersService.getIssuerConfiguration(issuerId); - responseWrapper.setResponse(issuerConfigurationResponse); + CredentialIssuerConfiguration issuerConfiguration = issuersService.getIssuerConfiguration(issuerId); + CredentialIssuerConfigurationDTO credentialIssuerConfigurationDTO = new CredentialIssuerConfigurationDTO( + issuerConfiguration.getCredentialConfigurationsSupported(), + issuerConfiguration.getAuthorizationServerWellKnownResponse()); + responseWrapper.setResponse(credentialIssuerConfigurationDTO); return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); } catch (Exception exception) { log.error("Exception occurred while fetching issuers configurations - ", exception); diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerConfiguration.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerConfiguration.java new file mode 100644 index 000000000..c8b0eef24 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerConfiguration.java @@ -0,0 +1,21 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.util.List; +import java.util.Map; + +@Data +@AllArgsConstructor +public class CredentialIssuerConfiguration { + private String credentialIssuer; + + private List authorizationServers; + + private String credentialEndPoint; + + private Map credentialConfigurationsSupported; + + private AuthorizationServerWellKnownResponse authorizationServerWellKnownResponse; +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerConfigurationDTO.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerConfigurationDTO.java new file mode 100644 index 000000000..954dcabf2 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerConfigurationDTO.java @@ -0,0 +1,22 @@ +package io.mosip.mimoto.dto.mimoto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.google.gson.annotations.SerializedName; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import java.util.Map; + +@Data +@AllArgsConstructor +public class CredentialIssuerConfigurationDTO { + @SerializedName("credential_configurations_supported") + @JsonProperty("credential_configurations_supported") + @Schema(description = "List of Credential types Supported and their configurations") + private Map credentialConfigurationsSupported; + + @SerializedName("authorization") + @JsonProperty("authorization") + @Schema(description = "Authorization Server Configurations") + private AuthorizationServerWellKnownResponse authorizationServerWellKnownResponse; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerConfigurationResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerConfigurationResponse.java deleted file mode 100644 index bb0d5d167..000000000 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerConfigurationResponse.java +++ /dev/null @@ -1,54 +0,0 @@ -package io.mosip.mimoto.dto.mimoto; - -import com.fasterxml.jackson.annotation.JsonProperty; -import com.google.gson.annotations.SerializedName; -import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.validation.Valid; -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.Pattern; -import lombok.AllArgsConstructor; -import lombok.Data; -import org.hibernate.validator.constraints.URL; - -import java.util.List; -import java.util.Map; - -@Data -@AllArgsConstructor -public class CredentialIssuerConfigurationResponse { - @NotBlank - @URL - @SerializedName("credential_issuer") - @JsonProperty(value = "credential_issuer", access = JsonProperty.Access.WRITE_ONLY) - @Schema(description = "Unique Identifier of the Credential Issuer") - private String credentialIssuer; - - @NotEmpty - @SerializedName("authorization_servers") - @JsonProperty(value = "authorization_servers", access = JsonProperty.Access.WRITE_ONLY) - @Schema(description = "List of Authorization Server Endpoint") - private List<@NotBlank @URL String> authorizationServers; - - @NotBlank - @SerializedName("credential_endpoint") - @Pattern(regexp = "https?://.*?/credential$") - @JsonProperty(value = "credential_endpoint", access = JsonProperty.Access.WRITE_ONLY) - @Schema(description = "Endpoint to download the Credential") - private String credentialEndPoint; - - @NotEmpty - @Valid - @SerializedName("credential_configurations_supported") - @JsonProperty("credential_configurations_supported") - @Schema(description = "List of Credential Configurations Supported") - private Map<@NotBlank String, @Valid CredentialsSupportedResponse> credentialConfigurationsSupported; - - @Valid - @SerializedName("authorization") - @JsonProperty("authorization") - @Schema(description = "Authorization Server Configurations") - private AuthorizationServerWellKnownResponse authorizationServerWellKnownResponse; -} - - diff --git a/src/main/java/io/mosip/mimoto/service/IdpService.java b/src/main/java/io/mosip/mimoto/service/IdpService.java index 086fa83ab..1ba04dc25 100644 --- a/src/main/java/io/mosip/mimoto/service/IdpService.java +++ b/src/main/java/io/mosip/mimoto/service/IdpService.java @@ -1,7 +1,7 @@ package io.mosip.mimoto.service; import io.mosip.mimoto.dto.IssuerDTO; -import io.mosip.mimoto.dto.mimoto.CredentialIssuerConfigurationResponse; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerConfiguration; import io.mosip.mimoto.exception.IssuerOnboardingException; import org.springframework.http.HttpEntity; import org.springframework.util.MultiValueMap; @@ -12,5 +12,5 @@ public interface IdpService { HttpEntity> constructGetTokenRequest(Map params, IssuerDTO issuerDTO, String authorizationAudience) throws IOException, IssuerOnboardingException; - String getTokenEndpoint(CredentialIssuerConfigurationResponse credentialIssuerConfigurationResponse); + String getTokenEndpoint(CredentialIssuerConfiguration credentialIssuerConfiguration); } diff --git a/src/main/java/io/mosip/mimoto/service/IssuersService.java b/src/main/java/io/mosip/mimoto/service/IssuersService.java index c78f97e73..467feeee6 100644 --- a/src/main/java/io/mosip/mimoto/service/IssuersService.java +++ b/src/main/java/io/mosip/mimoto/service/IssuersService.java @@ -17,5 +17,5 @@ public interface IssuersService { IssuersDTO getAllIssuers() throws ApiNotAccessibleException, AuthorizationServerWellknownResponseException, IOException, InvalidWellknownResponseException; - CredentialIssuerConfigurationResponse getIssuerConfiguration(String issuerId) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException; + CredentialIssuerConfiguration getIssuerConfiguration(String issuerId) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException; } diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java index 83e138571..4e1150393 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java @@ -108,8 +108,8 @@ public void init() { @Override public TokenResponseDTO getTokenResponse(Map params, String issuerId) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { IssuerDTO issuerDTO = issuersService.getIssuerDetails(issuerId); - CredentialIssuerConfigurationResponse credentialIssuerConfigurationResponse = issuersService.getIssuerConfiguration(issuerId); - String tokenEndpoint = idpService.getTokenEndpoint(credentialIssuerConfigurationResponse); + CredentialIssuerConfiguration credentialIssuerConfiguration = issuersService.getIssuerConfiguration(issuerId); + String tokenEndpoint = idpService.getTokenEndpoint(credentialIssuerConfiguration); HttpEntity> request = idpService.constructGetTokenRequest(params, issuerDTO, tokenEndpoint); TokenResponseDTO response = restTemplate.postForObject(tokenEndpoint, request, TokenResponseDTO.class); if (response == null) { @@ -121,12 +121,12 @@ public TokenResponseDTO getTokenResponse(Map params, String issu @Override public ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String credentialType, TokenResponseDTO response, String credentialValidity, String locale) throws Exception { IssuerDTO issuerDTO = issuersService.getIssuerDetails(issuerId); - CredentialIssuerConfigurationResponse issuerConfigurationResponse = issuersService.getIssuerConfiguration(issuerId); + CredentialIssuerConfiguration credentialIssuerConfiguration = issuersService.getIssuerConfiguration(issuerId); CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = new CredentialIssuerWellKnownResponse( - issuerConfigurationResponse.getCredentialIssuer(), - issuerConfigurationResponse.getAuthorizationServers(), - issuerConfigurationResponse.getCredentialEndPoint(), - issuerConfigurationResponse.getCredentialConfigurationsSupported()); + credentialIssuerConfiguration.getCredentialIssuer(), + credentialIssuerConfiguration.getAuthorizationServers(), + credentialIssuerConfiguration.getCredentialEndPoint(), + credentialIssuerConfiguration.getCredentialConfigurationsSupported()); CredentialsSupportedResponse credentialsSupportedResponse = credentialIssuerWellKnownResponse.getCredentialConfigurationsSupported().get(credentialType); VCCredentialRequest vcCredentialRequest = generateVCCredentialRequest(issuerDTO, credentialIssuerWellKnownResponse, credentialsSupportedResponse, response.getAccess_token()); VCCredentialResponse vcCredentialResponse = downloadCredential(credentialIssuerWellKnownResponse.getCredentialEndPoint(), vcCredentialRequest, response.getAccess_token()); @@ -164,7 +164,7 @@ public VCCredentialRequest generateVCCredentialRequest(IssuerDTO issuerDTO, Cred public ByteArrayInputStream generatePdfForVerifiableCredentials(String credentialType, VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String dataShareUrl, String credentialValidity, String locale) throws Exception { LinkedHashMap> displayProperties = loadDisplayPropertiesFromWellknown(vcCredentialResponse, credentialsSupportedResponse, locale); - Map data = getPdfResourceFromVcProperties(displayProperties, credentialsSupportedResponse, vcCredentialResponse, issuerDTO, dataShareUrl, credentialValidity, locale); + Map data = getPdfResourceFromVcProperties(displayProperties, credentialsSupportedResponse, vcCredentialResponse, issuerDTO, dataShareUrl, credentialValidity); return renderVCInCredentialTemplate(data, issuerDTO.getIssuer_id(), credentialType); } @@ -209,7 +209,7 @@ private static LinkedHashMap getPdfResourceFromVcProperties(LinkedHashMap> displayProperties, CredentialsSupportedResponse credentialsSupportedResponse, VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, String dataShareUrl, String credentialValidity, String locale) throws IOException, WriterException { + private Map getPdfResourceFromVcProperties(LinkedHashMap> displayProperties, CredentialsSupportedResponse credentialsSupportedResponse, VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, String dataShareUrl, String credentialValidity) throws IOException, WriterException { Map data = new HashMap<>(); LinkedHashMap rowProperties = new LinkedHashMap<>(); String backgroundColor = credentialsSupportedResponse.getDisplay().get(0).getBackgroundColor(); @@ -289,7 +289,7 @@ private String handleMap(Object map) { } @NotNull - private ByteArrayInputStream renderVCInCredentialTemplate(Map data, String issuerId, String credentialType) throws IOException { + private ByteArrayInputStream renderVCInCredentialTemplate(Map data, String issuerId, String credentialType) { String credentialTemplate = utilities.getCredentialSupportedTemplateString(issuerId, credentialType); Properties props = new Properties(); props.setProperty("resource.loader", "class"); diff --git a/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java index f6a95fab2..dcddfd081 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java @@ -1,7 +1,7 @@ package io.mosip.mimoto.service.impl; import io.mosip.mimoto.dto.IssuerDTO; -import io.mosip.mimoto.dto.mimoto.CredentialIssuerConfigurationResponse; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerConfiguration; import io.mosip.mimoto.exception.IssuerOnboardingException; import io.mosip.mimoto.service.IdpService; import io.mosip.mimoto.util.JoseUtil; @@ -54,7 +54,7 @@ public HttpEntity> constructGetTokenRequest(Map> mockRequest; - CredentialIssuerConfigurationResponse issuerConfig; + CredentialIssuerConfiguration issuerConfig; @Before public void setUp() throws Exception { diff --git a/src/test/java/io/mosip/mimoto/service/IdpServiceTest.java b/src/test/java/io/mosip/mimoto/service/IdpServiceTest.java index 80dc1e08a..f7a85e5fb 100644 --- a/src/test/java/io/mosip/mimoto/service/IdpServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/IdpServiceTest.java @@ -1,7 +1,7 @@ package io.mosip.mimoto.service; import io.mosip.mimoto.dto.IssuerDTO; -import io.mosip.mimoto.dto.mimoto.CredentialIssuerConfigurationResponse; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerConfiguration; import io.mosip.mimoto.exception.IssuerOnboardingException; import io.mosip.mimoto.service.impl.IdpServiceImpl; import io.mosip.mimoto.util.JoseUtil; @@ -86,11 +86,11 @@ public void shouldThrowExceptionIfThereIsAnyErrorOccurredWhileFetchingP12File() @Test public void shouldReturnTokenEndpointFromCredentialIssuerConfigurationResponse() { - CredentialIssuerConfigurationResponse credentialIssuerConfigurationResponse = + CredentialIssuerConfiguration credentialIssuerConfiguration = getCredentialIssuerConfigurationResponseDto("issuer1", "CredentialType1", List.of()); String expectedTokenEndpoint = "https://dev/token"; - String actualTokenEndpoint = idpService.getTokenEndpoint(credentialIssuerConfigurationResponse); + String actualTokenEndpoint = idpService.getTokenEndpoint(credentialIssuerConfiguration); assertEquals(expectedTokenEndpoint, actualTokenEndpoint); } diff --git a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java index cfdd7a627..6cab5e88a 100644 --- a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java @@ -4,7 +4,7 @@ import com.google.gson.Gson; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.IssuersDTO; -import io.mosip.mimoto.dto.mimoto.CredentialIssuerConfigurationResponse; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerConfiguration; import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.AuthorizationServerWellknownResponseException; @@ -56,7 +56,7 @@ public class IssuersServiceTest { List issuerConfigRelatedFields = List.of("additional_headers", "authorization_endpoint", "authorization_audience", "credential_endpoint", "credential_audience"); String issuerWellKnownUrl, issuerId, credentialIssuerHostUrl, authServerWellknownUrl, issuersConfigJsonValue; - CredentialIssuerConfigurationResponse expectedCredentialIssuerConfigurationResponse; + CredentialIssuerConfiguration expectedCredentialIssuerConfiguration; IssuersDTO issuers = new IssuersDTO(); CredentialIssuerWellKnownResponse expectedCredentialIssuerWellKnownResponse; @@ -78,8 +78,8 @@ public void setUp() throws Exception { Mockito.when(issuersConfigUtil.getIssuerWellknown(credentialIssuerHostUrl)) .thenReturn(expectedCredentialIssuerWellKnownResponse); - expectedCredentialIssuerConfigurationResponse = getCredentialIssuerConfigurationResponseDto(issuerId, "CredentialType1", List.of()); - Mockito.when(issuersConfigUtil.getAuthServerWellknown(authServerWellknownUrl)).thenReturn(expectedCredentialIssuerConfigurationResponse.getAuthorizationServerWellKnownResponse()); + expectedCredentialIssuerConfiguration = getCredentialIssuerConfigurationResponseDto(issuerId, "CredentialType1", List.of()); + Mockito.when(issuersConfigUtil.getAuthServerWellknown(authServerWellknownUrl)).thenReturn(expectedCredentialIssuerConfiguration.getAuthorizationServerWellKnownResponse()); } @Test @@ -173,9 +173,9 @@ public void shouldReturnOnlyEnabledIssuers() throws IOException, ApiNotAccessibl @Test public void shouldReturnProperCredentialConfigurationsForTheRequestedIssuer() throws AuthorizationServerWellknownResponseException, ApiNotAccessibleException, IOException, InvalidWellknownResponseException { - CredentialIssuerConfigurationResponse actualCredentialIssuerConfigurationResponse = issuersService.getIssuerConfiguration("Issuer3id"); + CredentialIssuerConfiguration actualCredentialIssuerConfiguration = issuersService.getIssuerConfiguration("Issuer3id"); - assertEquals(expectedCredentialIssuerConfigurationResponse, actualCredentialIssuerConfigurationResponse); + assertEquals(expectedCredentialIssuerConfiguration, actualCredentialIssuerConfiguration); } @Test diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index 8e98c60de..c99324498 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -139,11 +139,11 @@ public static CredentialIssuerWellKnownResponse getCredentialIssuerWellKnownResp return credentialIssuerWellKnownResponse; } - public static CredentialIssuerConfigurationResponse getCredentialIssuerConfigurationResponseDto(String issuerName, String credentialType, List nullFields) { + public static CredentialIssuerConfiguration getCredentialIssuerConfigurationResponseDto(String issuerName, String credentialType, List nullFields) { AuthorizationServerWellKnownResponse authorizationServerWellKnownResponse = getAuthServerWellknownResponseDto(nullFields); Map credentialsSupportedResponses = Map.of(credentialType, getCredentialSupportedResponse(credentialType)); - CredentialIssuerConfigurationResponse credentialIssuerConfigurationResponse = new CredentialIssuerConfigurationResponse("https://dev/" + issuerName, List.of("https://auth-server.env.net"), "https://dev/issuance/credential", credentialsSupportedResponses, authorizationServerWellKnownResponse); - return credentialIssuerConfigurationResponse; + CredentialIssuerConfiguration credentialIssuerConfiguration = new CredentialIssuerConfiguration("https://dev/" + issuerName, List.of("https://auth-server.env.net"), "https://dev/issuance/credential", credentialsSupportedResponses, authorizationServerWellKnownResponse); + return credentialIssuerConfiguration; } public static AuthorizationServerWellKnownResponse getAuthServerWellknownResponseDto(List nullFields) { From 8409c32223d723273944e6be5a36c442d17bab50 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Wed, 26 Feb 2025 16:56:33 +0530 Subject: [PATCH 401/860] [Injiweb-1436] Changed configuration response to expose limited fields Signed-off-by: Gurpreet41082 --- .../mimoto/controller/IssuersController.java | 33 ++++++++---- .../dto/mimoto/CredentialDisplayResponse.java | 19 +++++++ .../CredentialIssuerConfigurationDTO.java | 22 -------- ...dentialIssuerConfigurationResponseDTO.java | 26 ++++++++++ .../dto/mimoto/CredentialsResponse.java | 23 +++++++++ .../responses/expectedIssuerConfig.json | 51 +++++-------------- 6 files changed, 104 insertions(+), 70 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDisplayResponse.java delete mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerConfigurationDTO.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerConfigurationResponseDTO.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsResponse.java diff --git a/src/main/java/io/mosip/mimoto/controller/IssuersController.java b/src/main/java/io/mosip/mimoto/controller/IssuersController.java index 19e4089ee..71961e3a8 100644 --- a/src/main/java/io/mosip/mimoto/controller/IssuersController.java +++ b/src/main/java/io/mosip/mimoto/controller/IssuersController.java @@ -5,9 +5,7 @@ import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.IssuersDTO; -import io.mosip.mimoto.dto.mimoto.CredentialIssuerConfiguration; -import io.mosip.mimoto.dto.mimoto.CredentialIssuerConfigurationDTO; -import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; +import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.AuthorizationServerWellknownResponseException; import io.mosip.mimoto.exception.InvalidIssuerIdException; @@ -24,7 +22,9 @@ import org.springframework.web.bind.annotation.*; import java.io.IOException; +import java.util.LinkedList; import java.util.List; +import java.util.stream.Collectors; import static io.mosip.mimoto.exception.PlatformErrorMessages.*; @@ -102,14 +102,29 @@ public ResponseEntity> getIssuerConfig(@PathVariable( @Operation(summary = SwaggerLiteralConstants.ISSUERS_GET_ISSUER_CONFIGURATION_SUMMARY, description = SwaggerLiteralConstants.ISSUERS_GET_ISSUER_CONFIGURATION_DESCRIPTION) @GetMapping(value = "/{issuer-id}/configuration", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity> getIssuerConfiguration(@PathVariable("issuer-id") String issuerId) { - ResponseWrapper responseWrapper = new ResponseWrapper<>(); + public ResponseEntity> getIssuerConfiguration(@PathVariable("issuer-id") String issuerId) { + ResponseWrapper responseWrapper = new ResponseWrapper<>(); try { CredentialIssuerConfiguration issuerConfiguration = issuersService.getIssuerConfiguration(issuerId); - CredentialIssuerConfigurationDTO credentialIssuerConfigurationDTO = new CredentialIssuerConfigurationDTO( - issuerConfiguration.getCredentialConfigurationsSupported(), - issuerConfiguration.getAuthorizationServerWellKnownResponse()); - responseWrapper.setResponse(credentialIssuerConfigurationDTO); + List credentials = new LinkedList<>(); + + issuerConfiguration.getCredentialConfigurationsSupported().forEach((key, value) -> { + List display = value.getDisplay().stream() + .map(displayConfig -> new CredentialDisplayResponse( + displayConfig.getName(), + displayConfig.getLocale(), + displayConfig.getLogo().getUrl())) + .collect(Collectors.toList()); + CredentialsResponse credential = new CredentialsResponse(key, + value.getScope(), display); + credentials.add(credential); + }); + + CredentialIssuerConfigurationResponseDTO credentialIssuerConfigurationResponseDTO = new CredentialIssuerConfigurationResponseDTO( + credentials, + issuerConfiguration.getAuthorizationServerWellKnownResponse().getAuthorizationEndpoint(), + issuerConfiguration.getAuthorizationServerWellKnownResponse().getGrantTypesSupported()); + responseWrapper.setResponse(credentialIssuerConfigurationResponseDTO); return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); } catch (Exception exception) { log.error("Exception occurred while fetching issuers configurations - ", exception); diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDisplayResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDisplayResponse.java new file mode 100644 index 000000000..0915e889c --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDisplayResponse.java @@ -0,0 +1,19 @@ +package io.mosip.mimoto.dto.mimoto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class CredentialDisplayResponse { + + @Schema(description = "Name of the Supported Credential") + private String name; + + @Schema(description = "Locale of the Supported Credential") + private String locale; + + @Schema(description = "Logo of the Supported Credential") + private String logo; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerConfigurationDTO.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerConfigurationDTO.java deleted file mode 100644 index 954dcabf2..000000000 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerConfigurationDTO.java +++ /dev/null @@ -1,22 +0,0 @@ -package io.mosip.mimoto.dto.mimoto; - -import com.fasterxml.jackson.annotation.JsonProperty; -import com.google.gson.annotations.SerializedName; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Data; -import java.util.Map; - -@Data -@AllArgsConstructor -public class CredentialIssuerConfigurationDTO { - @SerializedName("credential_configurations_supported") - @JsonProperty("credential_configurations_supported") - @Schema(description = "List of Credential types Supported and their configurations") - private Map credentialConfigurationsSupported; - - @SerializedName("authorization") - @JsonProperty("authorization") - @Schema(description = "Authorization Server Configurations") - private AuthorizationServerWellKnownResponse authorizationServerWellKnownResponse; -} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerConfigurationResponseDTO.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerConfigurationResponseDTO.java new file mode 100644 index 000000000..bd348108f --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerConfigurationResponseDTO.java @@ -0,0 +1,26 @@ +package io.mosip.mimoto.dto.mimoto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.util.List; + +@Data +@AllArgsConstructor +public class CredentialIssuerConfigurationResponseDTO { + + @JsonProperty("credentials_supported") + @Schema(description = "List of Credential types Supported and their configurations") + private List credentials; + + @JsonProperty("authorization_endpoint") + @Schema(description = "Endpoint for Authenticating & Authorizing the user") + private String authorizationEndpoint; + + @JsonProperty("grant_types_supported") + @Schema(description = "List of grant types supported by Authorization Server") + private List grantTypesSupported; + +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsResponse.java new file mode 100644 index 000000000..5158d08dd --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsResponse.java @@ -0,0 +1,23 @@ +package io.mosip.mimoto.dto.mimoto; + +import io.swagger.v3.oas.annotations.media.Schema; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.util.List; + +@Data +@AllArgsConstructor +public class CredentialsResponse { + + @Schema(description = "name of the Credential") + private String name; + + @Schema(description = "Scope of the Credential") + private String scope; + + @JsonProperty("display") + @Schema(description = "Display Properties of the Supported Credential") + private List display; +} diff --git a/src/test/resources/responses/expectedIssuerConfig.json b/src/test/resources/responses/expectedIssuerConfig.json index e81b22557..04e423c31 100644 --- a/src/test/resources/responses/expectedIssuerConfig.json +++ b/src/test/resources/responses/expectedIssuerConfig.json @@ -1,46 +1,19 @@ { - "credential_configurations_supported": { - "CredentialType1": { - "format": "ldp_vc", - "scope": "CredentialType1_vc_ldp", - "proof_types_supported": {}, - "credential_definition": { - "type": [ - "VerifiableCredential", - "CredentialType1" - ], - "credentialSubject": { - "name": { - "display": [ - { - "name": "Given Name", - "locale": "en" - } - ] + "credentials_supported": [ + { + "name": "CredentialType1", + "scope": "CredentialType1_vc_ldp", + "display": [ + { + "name": "CredentialType1", + "locale": "en", + "logo": "https://logo" } - } - }, - "display": [ - { - "name": "CredentialType1", - "locale": "en", - "logo": { - "url": "https://logo", - "alt_text": "logo-url" - }, - "background_image": { - "uri": "https://bgimage" - }, - "background_color": "#B34622", - "text_color": "#FFFFFF" - } - ] - } - }, - "authorization": { + ] + } + ], "authorization_endpoint": "https://dev/authorize", "grant_types_supported": [ "authorization_code" ] - } } From 5918fd3bb2ccabb66c0f00b511733d1149a48076 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Thu, 27 Feb 2025 10:48:08 +0530 Subject: [PATCH 402/860] [Injiweb-1458] removed converting issuer id and credentialtype to lowercase convention Signed-off-by: Gurpreet41082 --- src/main/java/io/mosip/mimoto/util/Utilities.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/mosip/mimoto/util/Utilities.java b/src/main/java/io/mosip/mimoto/util/Utilities.java index feb826226..dba961834 100644 --- a/src/main/java/io/mosip/mimoto/util/Utilities.java +++ b/src/main/java/io/mosip/mimoto/util/Utilities.java @@ -184,7 +184,7 @@ public String getTrustedVerifiersJsonValue() { return getJson(trustedVerifiersJsonString, trustedVerifiersPath); } public String getCredentialSupportedTemplateString(String issuerId, String credentialType) { - String templateFileName = String.format("%s-%s-template.html", issuerId.toLowerCase(), credentialType.toLowerCase()); + String templateFileName = String.format("%s-%s-template.html", issuerId, credentialType); if(activeProfile.equals("local")) { Path basePath = Paths.get("templates").toAbsolutePath().normalize(); Path resolvedPath = basePath.resolve(templateFileName).normalize(); From 98c1f39f457b69778f71163b27134b2f83e58017 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Thu, 27 Feb 2025 16:59:18 +0530 Subject: [PATCH 403/860] [INJIWEB-1436] update schema and examples for issuer configuration endpoint in open api json file Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- docs/api-documentation-openapi.json | 427 +++++++--------------------- 1 file changed, 107 insertions(+), 320 deletions(-) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index 41017982c..9652524da 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -2217,6 +2217,7 @@ "name": "issuer-id", "in": "path", "required": true, + "description": "The unique identifier of the credential issuer.", "schema": { "type": "string" } @@ -2225,326 +2226,39 @@ "tags": [ "Trusted Issuers" ], - "description": "This endpoint allows you to retrieve the well-known configuration of a specific issuer and its corresponding authorization server.", + "description": "Retrieve the well-known configuration of a specific issuer and its authorization server.", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "object", - "x-examples": { - "Example 1": { - "id": null, - "version": null, - "str": null, - "responsetime": null, - "metadata": null, + "$ref": "#/components/schemas/IssuerConfigurationSuccessResponse" + }, + "examples": { + "SuccessResponse": { + "summary": "Issuer Configuration Response", + "value": { "response": { - "credential_issuer": "https://injicertify-insurance.dev1.mosip.net", - "authorization_servers": [ - "https://esignet-insurance.dev1.mosip.net" - ], - "credential_endpoint": "https://injicertify-insurance.dev1.mosip.net/v1/certify/issuance/credential", - "credential_configurations_supported": { - "InsuranceCredential": { - "format": "ldp_vc", + "credentials_supported": [ + { + "name": "InsuranceCredential", "scope": "sunbird_rc_insurance_vc_ldp", - "order": [ - "fullName", - "dob" - ], - "proof_types_supported": { - "jwt": { - "proof_signing_alg_values_supported": [ - "RS256", - "PS256" - ] - } - }, - "credential_definition": { - "type": [ - "VerifiableCredential", - "InsuranceCredential" - ], - "credentialSubject": { - "fullName": { - "display": [ - { - "name": "Name", - "locale": "en" - } - ] - }, - "dob": { - "display": [ - { - "name": "Date of Birth", - "locale": "en" - } - ] - } - } - }, "display": [ { "name": "Health Insurance", "locale": "en", - "logo": { - "url": "https://raw.githubusercontent.com/tw-mosip/file-server/master/StayProtectedInsurance.png", - "alt_text": "a square logo of a Veridonia" - }, - "background_image": { - "uri": "https://api.dev1.mosip.net/inji/veridonia-logo.png" - }, - "background_color": "#FDFAF9", - "text_color": "#7C4616" + "logo": "https://raw.githubusercontent.com/tw-mosip/file-server/master/StayProtectedInsurance.png" } ] } - }, - "authorization": { - "authorization_endpoint": "https://esignet-insurance.dev1.mosip.net/authorize", - "grant_types_supported": [ - "authorization_code" - ] - } - }, - "errors": [] - } - }, - "properties": { - "version": { - "type": "string", - "nullable": true - }, - "id": { - "type": "string", - "nullable": true - }, - "responsetime": { - "type": "string", - "nullable": true - }, - "metadata": { - "type": "string", - "nullable": true - }, - "response": { - "type": "object", - "properties": { - "credential_issuer": { - "type": "string", - "format": "uri" - }, - "authorization_servers": { - "type": "array", - "items": { - "type": "string", - "format": "uri" - } - }, - "credential_endpoint": { - "type": "string", - "format": "uri" - }, - "credential_configurations_supported": { - "type": "object", - "properties": { - "InsuranceCredential": { - "type": "object", - "properties": { - "format": { - "type": "string" - }, - "scope": { - "type": "string" - }, - "order": { - "type": "array", - "items": { - "type": "string" - } - }, - "proof_types_supported": { - "type": "object", - "properties": { - "jwt": { - "type": "object", - "properties": { - "proof_signing_alg_values_supported": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - } - }, - "credential_definition": { - "type": "object", - "properties": { - "type": { - "type": "array", - "items": { - "type": "string" - } - }, - "credentialSubject": { - "type": "object", - "properties": { - "fullName": { - "$ref": "#/components/schemas/StringNode" - }, - "dob": { - "$ref": "#/components/schemas/StringNode" - } - } - } - } - }, - "display": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "locale": { - "type": "string" - }, - "logo": { - "type": "object", - "properties": { - "url": { - "type": "string", - "format": "uri" - }, - "alt_text": { - "type": "string" - } - } - }, - "background_image": { - "type": "object", - "properties": { - "uri": { - "type": "string", - "format": "uri" - } - } - }, - "background_color": { - "type": "string" - }, - "text_color": { - "type": "string" - } - } - } - } - } - } - } - }, - "authorization": { - "type": "object", - "properties": { - "authorization_endpoint": { - "type": "string", - "format": "uri" - }, - "grant_types_supported": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - } - }, - "errors": { - "type": "array", - "items": { - "type": "object" - } - } - } - }, - "examples": { - "Success response": { - "value": { - "credential_issuer": "https://injicertify-insurance.dev1.mosip.net", - "authorization_servers": [ - "https://esignet-insurance.dev1.mosip.net" - ], - "credential_endpoint": "https://injicertify-insurance.dev1.mosip.net/v1/certify/issuance/credential", - "credential_configurations_supported": { - "InsuranceCredential": { - "format": "ldp_vc", - "scope": "sunbird_rc_insurance_vc_ldp", - "order": [ - "fullName", - "dob" - ], - "proof_types_supported": { - "jwt": { - "proof_signing_alg_values_supported": [ - "RS256", - "PS256" - ] - } - }, - "credential_definition": { - "type": [ - "VerifiableCredential", - "InsuranceCredential" - ], - "credentialSubject": { - "fullName": { - "display": [ - { - "name": "Name", - "locale": "en" - } - ] - }, - "dob": { - "display": [ - { - "name": "Date of Birth", - "locale": "en" - } - ] - } - } - }, - "display": [ - { - "name": "Health Insurance", - "locale": "en", - "logo": { - "url": "https://raw.githubusercontent.com/tw-mosip/file-server/master/StayProtectedInsurance.png", - "alt_text": "a square logo of a Veridonia" - }, - "background_image": { - "uri": "https://api.dev1.mosip.net/inji/veridonia-logo.png" - }, - "background_color": "#FDFAF9", - "text_color": "#7C4616" - } - ] - } - }, - "authorization": { + ], "authorization_endpoint": "https://esignet-insurance.dev1.mosip.net/authorize", "grant_types_supported": [ "authorization_code" ] - } + }, + "errors": [] } } } @@ -2556,23 +2270,7 @@ "content": { "application/json": { "schema": { - "type": "object", - "properties": { - "errors": { - "type": "array", - "items": { - "type": "object", - "properties": { - "errorCode": { - "type": "string" - }, - "errorMessage": { - "type": "string" - } - } - } - } - } + "$ref": "#/components/schemas/IssuerConfigurationErrorResponse" }, "examples": { "FailureResponse1": { @@ -2616,8 +2314,7 @@ } } } - }, - "summary": "Get specific Issuer's and its corresponding Authorization Server well-known config" + } }, "/credentials/download": { "post": { @@ -2812,6 +2509,96 @@ }, "components": { "schemas": { + "IssuerConfigurationSuccessResponse": { + "type": "object", + "properties": { + "response": { + "type": "object", + "properties": { + "credentials_supported": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Credential" + } + }, + "authorization_endpoint": { + "type": "string", + "format": "uri" + }, + "grant_types_supported": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "errors": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Error" + }, + "example": [] + } + } + }, + "IssuerConfigurationErrorResponse": { + "type": "object", + "properties": { + "response": { + "type": "object", + "nullable": true + }, + "errors": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "Credential": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "scope": { + "type": "string" + }, + "display": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Display" + } + } + } + }, + "Display": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "locale": { + "type": "string" + }, + "logo": { + "type": "string" + } + } + }, + "Error": { + "type": "object", + "properties": { + "errorCode": { + "type": "string" + }, + "errorMessage": { + "type": "string" + } + } + }, "AppVIDGenerateRequestDTO": { "type": "object", "properties": { From 66ef06e6b0da1f849813dd0d8e54948798c17648 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Thu, 27 Feb 2025 17:10:03 +0530 Subject: [PATCH 404/860] [INJIWEB-1436] update the description for issuer configuration endpoint in open api json file Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- docs/api-documentation-openapi.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index 9652524da..cc0c26a46 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -2226,7 +2226,7 @@ "tags": [ "Trusted Issuers" ], - "description": "Retrieve the well-known configuration of a specific issuer and its authorization server.", + "description": "Retrieve the required configuration details for a specific issuer and its authorization server from their respective well-known endpoints.", "responses": { "200": { "description": "OK", From f93bf1d83055e183e3e3a9556289116c55c9d0d4 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Thu, 27 Feb 2025 17:25:32 +0530 Subject: [PATCH 405/860] [INJIWEB-1436] change the authorization_endpoint env to collab in issuer configuration endpoint success example Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- docs/api-documentation-openapi.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index cc0c26a46..4ed01fb08 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -2253,7 +2253,7 @@ ] } ], - "authorization_endpoint": "https://esignet-insurance.dev1.mosip.net/authorize", + "authorization_endpoint": "https://esignet-insurance.collab.mosip.net/authorize", "grant_types_supported": [ "authorization_code" ] From c6be53c177db7bb3c03af98438338d6fe2699f32 Mon Sep 17 00:00:00 2001 From: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> Date: Fri, 28 Feb 2025 11:07:03 +0530 Subject: [PATCH 406/860] INJIWEB-1428 & INJIWEB-1256 - Removed wellKnownProxyMockMDL and added the configuration endpoint (#622) * MOSIP-36455 - Merge release 0.14.x branch with develop Signed-off-by: Mohanachandran S * MOSIP-36455 - Merge release 0.14.x branch with develop Signed-off-by: Mohanachandran S * INJIWEB-967 - Updated Automation Tests for Sunbird and eSignet Issues Signed-off-by: Mohanachandran S * MOSIP-38392 - updated the apitest commons version Signed-off-by: Mohanachandran S * MOSIP-38392 - Updated the issuer name for sunbird Signed-off-by: Mohanachandran S * pulled latest changes Signed-off-by: Mohanachandran S * Pulled latest changes Signed-off-by: Mohanachandran S * Pulled latest changes Signed-off-by: Mohanachandran S * updated the sunbird baseurl property Signed-off-by: Mohanachandran S * updated the sunbird baseurl property Signed-off-by: Mohanachandran S * updated the sunbird baseurl property Signed-off-by: Mohanachandran S * updated the sunbird baseurl property Signed-off-by: Mohanachandran S * INJIMOB-2680 - added random data logic for sunbird policy data Signed-off-by: Mohanachandran S * MOSIP-39931 - Updated for fetching the esignet url from actuator Signed-off-by: Mohanachandran S * updated the property Signed-off-by: Mohanachandran S * INJIWEB-1428 - Removed wellKnownProxyMockMDL and added the configuration endpoint Signed-off-by: Mohanachandran S * fixed the esignetSunbirdBaseUrl used in authentication Signed-off-by: Mohanachandran S * Added output validation for issuer configuration Signed-off-by: Mohanachandran S --------- Signed-off-by: Mohanachandran S --- .../apirig/mimoto/testscripts/SimplePost.java | 8 ++--- .../DownloadIssuerCredential.hbs | 1 + .../GetIssuerConfiguration.hbs} | 0 .../GetIssuerConfiguration.yml | 32 +++++++++++++++++++ .../GetIssuerConfigurationResult.hbs | 9 ++++++ .../GetWellknownIssuerMockMdl.yml | 32 ------------------- .../GetWellknownIssuerMockMdlResult.hbs | 1 - api-test/testNgXmlFiles/mimotoSuite.xml | 6 ++-- 8 files changed, 48 insertions(+), 41 deletions(-) rename api-test/src/main/resources/mimoto/{GetWellknownIssuerMockMdl/GetWellknownIssuerMockMdl.hbs => GetIssuerConfiguration/GetIssuerConfiguration.hbs} (100%) create mode 100644 api-test/src/main/resources/mimoto/GetIssuerConfiguration/GetIssuerConfiguration.yml create mode 100644 api-test/src/main/resources/mimoto/GetIssuerConfiguration/GetIssuerConfigurationResult.hbs delete mode 100644 api-test/src/main/resources/mimoto/GetWellknownIssuerMockMdl/GetWellknownIssuerMockMdl.yml delete mode 100644 api-test/src/main/resources/mimoto/GetWellknownIssuerMockMdl/GetWellknownIssuerMockMdlResult.hbs diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePost.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePost.java index 73a98782c..97977bdf1 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePost.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePost.java @@ -136,8 +136,6 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad if (MimotoConfigManager.getSunbirdBaseURL() != null && !MimotoConfigManager.getSunbirdBaseURL().isBlank()) tempUrl = MimotoConfigManager.getSunbirdBaseURL(); - //Once sunbird registry is pointing to specific env, remove the above line and uncomment below line - //tempUrl = ApplnURI.replace(GlobalConstants.API_INTERNAL, MimotoConfigManager.getSunBirdBaseURL()); testCaseDTO.setEndPoint(testCaseDTO.getEndPoint().replace("$SUNBIRDBASEURL$", "")); response = postWithBodyAndCookie(tempUrl + testCaseDTO.getEndPoint(), inputJson, auditLogCheck, @@ -148,9 +146,9 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad if (MimotoConfigManager.isInServiceNotDeployedList("sunbirdrc")) throw new SkipException(GlobalConstants.SERVICE_NOT_DEPLOYED_MESSAGE); - if (MimotoConfigManager.getproperty("esignetSunBirdBaseURL") != null - && !MimotoConfigManager.getproperty("esignetSunBirdBaseURL").isBlank()) - tempUrl = MimotoConfigManager.getproperty("esignetSunBirdBaseURL"); + String esignetSunBirdBaseURL = MimotoConfigManager.getEsignetSunBirdBaseURL(); + if (esignetSunBirdBaseURL != null && !esignetSunBirdBaseURL.isBlank()) + tempUrl = esignetSunBirdBaseURL; testCaseDTO.setEndPoint(testCaseDTO.getEndPoint().replace("$ESIGNETMOCKBASEURL$", "")); response = postRequestWithCookieAuthHeaderAndXsrfToken(tempUrl + testCaseDTO.getEndPoint(), diff --git a/api-test/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.hbs b/api-test/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.hbs index 8491d6f96..082575d78 100644 --- a/api-test/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.hbs +++ b/api-test/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.hbs @@ -3,6 +3,7 @@ "code": "{{code}}", "redirect_uri": "{{redirect_uri}}", "code_verifier": "{{code_verifier}}", + "vcStorageExpiryLimitInTimes": 1, "issuer": "{{issuer}}", "credential": "{{credential}}" } \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/GetWellknownIssuerMockMdl/GetWellknownIssuerMockMdl.hbs b/api-test/src/main/resources/mimoto/GetIssuerConfiguration/GetIssuerConfiguration.hbs similarity index 100% rename from api-test/src/main/resources/mimoto/GetWellknownIssuerMockMdl/GetWellknownIssuerMockMdl.hbs rename to api-test/src/main/resources/mimoto/GetIssuerConfiguration/GetIssuerConfiguration.hbs diff --git a/api-test/src/main/resources/mimoto/GetIssuerConfiguration/GetIssuerConfiguration.yml b/api-test/src/main/resources/mimoto/GetIssuerConfiguration/GetIssuerConfiguration.yml new file mode 100644 index 000000000..7209be4f0 --- /dev/null +++ b/api-test/src/main/resources/mimoto/GetIssuerConfiguration/GetIssuerConfiguration.yml @@ -0,0 +1,32 @@ +GetIssuerConfiguration: + Mimoto_GetIssuerConfiguration_Mosip_All_Valid_Smoke: + endPoint: /v1/mimoto/issuers/Mosip/configuration + description: Retrieving verifiers list with all valid parameters + uniqueIdentifier: TC_Mimoto_GetIssuerConfiguration_01 + role: resident + restMethod: get + inputTemplate: mimoto/GetIssuerConfiguration/GetIssuerConfiguration + outputTemplate: mimoto/GetIssuerConfiguration/GetIssuerConfigurationResult + input: '{ +}' + output: '{ + "name": "MosipVerifiableCredential" +}' + Mimoto_GetIssuerConfiguration_With_Issuer_Removed_From_URL_Neg: + endPoint: /v1/mimoto/issuers/configuration + description: Retrieving verifiers list with invalid URL + uniqueIdentifier: TC_Mimoto_GetIssuerConfiguration_02 + role: resident + restMethod: get + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/GetIssuerConfiguration/GetIssuerConfiguration + outputTemplate: mimoto/error + input: '{ +}' + output: '{ + "errors":[ + { + "errorCode":"RESIDENT-APP-035" + } + ] +}' \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/GetIssuerConfiguration/GetIssuerConfigurationResult.hbs b/api-test/src/main/resources/mimoto/GetIssuerConfiguration/GetIssuerConfigurationResult.hbs new file mode 100644 index 000000000..d57337fe0 --- /dev/null +++ b/api-test/src/main/resources/mimoto/GetIssuerConfiguration/GetIssuerConfigurationResult.hbs @@ -0,0 +1,9 @@ +{ + "response": { + "credentials_supported": [ + { + "name": "{{name}}" + } + ] + } +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/GetWellknownIssuerMockMdl/GetWellknownIssuerMockMdl.yml b/api-test/src/main/resources/mimoto/GetWellknownIssuerMockMdl/GetWellknownIssuerMockMdl.yml deleted file mode 100644 index bcd471ba8..000000000 --- a/api-test/src/main/resources/mimoto/GetWellknownIssuerMockMdl/GetWellknownIssuerMockMdl.yml +++ /dev/null @@ -1,32 +0,0 @@ -GetWellknownIssuerMockMdl: - Mimoto_GetWellknownIssuerMockMdl_All_Valid_Smoke: - endPoint: /v1/mimoto/issuers/MockMdl/well-known-proxy - description: Retrieving verifiers list with all valid parameters - uniqueIdentifier: TC_Mimoto_GetWellknownIssuerMockMdl_01 - role: resident - restMethod: get - checkErrorsOnlyInResponse: true - inputTemplate: mimoto/GetWellknownIssuerMockMdl/GetWellknownIssuerMockMdl - outputTemplate: mimoto/GetWellknownIssuerMockMdl/GetWellknownIssuerMockMdlResult - input: '{ -}' - output: '{ -}' - Mimoto_GetWellknownIssuerMockMdl_With_MockMdl_Removed_From_URL_Neg: - endPoint: /v1/mimoto/issuers/well-known-proxy - description: Retrieving verifiers list with invalid URL - uniqueIdentifier: TC_Mimoto_GetWellknownIssuerMockMdl_02 - role: resident - restMethod: get - checkErrorsOnlyInResponse: true - inputTemplate: mimoto/GetWellknownIssuerMockMdl/GetWellknownIssuerMockMdl - outputTemplate: mimoto/error - input: '{ -}' - output: '{ - "errors":[ - { - "errorCode":"RESIDENT-APP-035" - } - ] -}' \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/GetWellknownIssuerMockMdl/GetWellknownIssuerMockMdlResult.hbs b/api-test/src/main/resources/mimoto/GetWellknownIssuerMockMdl/GetWellknownIssuerMockMdlResult.hbs deleted file mode 100644 index 9e26dfeeb..000000000 --- a/api-test/src/main/resources/mimoto/GetWellknownIssuerMockMdl/GetWellknownIssuerMockMdlResult.hbs +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/api-test/testNgXmlFiles/mimotoSuite.xml b/api-test/testNgXmlFiles/mimotoSuite.xml index 405a6aa26..e0489db36 100644 --- a/api-test/testNgXmlFiles/mimotoSuite.xml +++ b/api-test/testNgXmlFiles/mimotoSuite.xml @@ -182,16 +182,16 @@ - + - + + value="mimoto/GetIssuerConfiguration/GetIssuerConfiguration.yml" /> From 8a21c0299c321c88b35590969401d86ab654d6d6 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Fri, 28 Feb 2025 12:48:09 +0530 Subject: [PATCH 407/860] [injiweb-1436] added comment in the confif properties of cache and removed the unnecessary cache Signed-off-by: Gurpreet41082 --- docker-compose/config/mimoto-default.properties | 7 +++++-- src/main/java/io/mosip/mimoto/config/CacheConfig.java | 4 ---- .../io/mosip/mimoto/service/impl/IssuersServiceImpl.java | 1 - src/main/resources/application-local.properties | 8 +++++--- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/docker-compose/config/mimoto-default.properties b/docker-compose/config/mimoto-default.properties index 9876f2295..eef62aa1e 100644 --- a/docker-compose/config/mimoto-default.properties +++ b/docker-compose/config/mimoto-default.properties @@ -289,8 +289,11 @@ mosip.data.share.create.retry.count=3 #OpenId4VP related Configuration END #Caffeine cache related configurations -cache.credential.issuer.config.expiry-time-in-min = 60 +# Cache expiry time in minutes for the issuer's well-known endpoint response. cache.credential.issuer.wellknown.response.expiry-time-in-min = 60 +# Cache expiry time in minutes for issuers configurations read from a config file. cache.issuers.config.expiry-time-in-min = 60 +# Cache expiry time in minutes for the authentication server's well-known endpoint response. cache.credential.issuer.authserver.wellknown.response.expiry-time-in-min = 60 -cache.default.expiry-time-in-min = 60 \ No newline at end of file +# Default cache expiry time in minutes for others cache types +cache.default.expiry-time-in-min = 60 \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/config/CacheConfig.java b/src/main/java/io/mosip/mimoto/config/CacheConfig.java index 833197f53..6c8740a32 100644 --- a/src/main/java/io/mosip/mimoto/config/CacheConfig.java +++ b/src/main/java/io/mosip/mimoto/config/CacheConfig.java @@ -14,9 +14,6 @@ @EnableCaching public class CacheConfig { - @Value("${cache.credential.issuer.config.expiry-time-in-min:60}") - private Long credentialIssuerConfigExpiryTimeInMin; - @Value("${cache.credential.issuer.wellknown.response.expiry-time-in-min:60}") private Long issuerWellknownExpiryTimeInMin; @@ -42,7 +39,6 @@ public CacheManager cacheManager() { cacheManager.registerCustomCache("issuerWellknown", buildCache(issuerWellknownExpiryTimeInMin).build()); cacheManager.registerCustomCache("issuersConfig", buildCache(issuersConfigExpiryTimeInMin).build()); cacheManager.registerCustomCache("authServerWellknown", buildCache(authServerWellknownExpiryTimeInMin).build()); - cacheManager.registerCustomCache("credentialIssuerConfig", buildCache(credentialIssuerConfigExpiryTimeInMin).build()); cacheManager.setCaffeine(buildCache(null)); return cacheManager; } diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index c26a0b865..92df4d408 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -89,7 +89,6 @@ public IssuersDTO getAllIssuers() throws ApiNotAccessibleException, IOException } @Override - @Cacheable(value = "credentialIssuerConfig", key = "#p0") public CredentialIssuerConfiguration getIssuerConfiguration(String issuerId) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = issuersConfigUtil.getIssuerWellknown(getIssuerDetails(issuerId).getCredential_issuer_host()); AuthorizationServerWellKnownResponse authorizationServerWellKnownResponse = issuersConfigUtil.getAuthServerWellknown(credentialIssuerWellKnownResponse.getAuthorizationServers().get(0)); diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index b62cfae66..dc7117310 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -235,10 +235,12 @@ mosip.security.origins=http://localhost:3004 #OpenId4VP related Configuration END - #Caffeine cache related configurations -cache.credential.issuer.config.expiry-time-in-min = 60 +# Cache expiry time in minutes for the issuer's well-known endpoint response. cache.credential.issuer.wellknown.response.expiry-time-in-min = 60 +# Cache expiry time in minutes for issuers configurations read from a config file. cache.issuers.config.expiry-time-in-min = 60 +# Cache expiry time in minutes for the authentication server's well-known endpoint response. cache.credential.issuer.authserver.wellknown.response.expiry-time-in-min = 60 -cache.default.expiry-time-in-min = 60 +# Default cache expiry time in minutes for others cache types +cache.default.expiry-time-in-min = 60 From 56bd05122331c82e871e8978b65e6e8d7ecd4b2d Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Fri, 28 Feb 2025 17:57:09 +0530 Subject: [PATCH 408/860] If locale selected by user is not supported by any of the display property we will fallback to first display property first locale Signed-off-by: Gurpreet41082 --- .../service/impl/CredentialServiceImpl.java | 3 +- .../io/mosip/mimoto/util/LocaleUtils.java | 37 +++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java index 4e1150393..8544e8dc1 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java @@ -180,11 +180,12 @@ public Boolean verifyCredential(VCCredentialResponse vcCredentialResponse) throw } @NotNull - private static LinkedHashMap> loadDisplayPropertiesFromWellknown(VCCredentialResponse vcCredentialResponse, CredentialsSupportedResponse credentialsSupportedResponse, String locale) { + private static LinkedHashMap> loadDisplayPropertiesFromWellknown(VCCredentialResponse vcCredentialResponse, CredentialsSupportedResponse credentialsSupportedResponse, String userLocale) { LinkedHashMap> displayProperties = new LinkedHashMap<>(); Map credentialProperties = vcCredentialResponse.getCredential().getCredentialSubject(); LinkedHashMap vcPropertiesFromWellKnown = new LinkedHashMap<>(); Map credentialSubject = credentialsSupportedResponse.getCredentialDefinition().getCredentialSubject(); + String locale = LocaleUtils.resolveLocaleWithFallback(credentialSubject, userLocale); credentialSubject.keySet().forEach(VCProperty -> { Optional filteredResponse = credentialSubject.get(VCProperty) .getDisplay().stream() diff --git a/src/main/java/io/mosip/mimoto/util/LocaleUtils.java b/src/main/java/io/mosip/mimoto/util/LocaleUtils.java index 33ae270b6..605d63deb 100644 --- a/src/main/java/io/mosip/mimoto/util/LocaleUtils.java +++ b/src/main/java/io/mosip/mimoto/util/LocaleUtils.java @@ -1,6 +1,12 @@ package io.mosip.mimoto.util; +import io.mosip.mimoto.dto.mimoto.CredentialDisplayResponseDto; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerDisplayResponse; + +import java.util.List; import java.util.Locale; +import java.util.Map; +import java.util.Optional; public class LocaleUtils { // Method to convert the input locale strings into 3-letter codes and compare @@ -14,4 +20,35 @@ public static boolean matchesLocale(String localeString1, String localeString2) return locale1Iso3Language.equals(locale2Iso3Language); } + + public static String resolveLocaleWithFallback(Map credentialSubject, String locale) { + String selectedLocale = null; + + // Iterate through the credentials to check if any display object supports the requested locale + for (String VCProperty : credentialSubject.keySet()) { + List displayList = credentialSubject.get(VCProperty).getDisplay(); + // Check if any display object supports the requested locale + Optional filteredResponse = displayList.stream() + .filter(obj -> matchesLocale(obj.getLocale(), locale)) + .findFirst(); + if (filteredResponse.isPresent()) { + selectedLocale = filteredResponse.get().getLocale(); + break; // Break once a matching record is found + } + } + // If no matching locale is found, use the locale of the first display object + if (selectedLocale == null) { + // Fall back to the locale of the first display object if no matching locale is found + for (String VCProperty : credentialSubject.keySet()) { + List displayList = credentialSubject.get(VCProperty).getDisplay(); + if (displayList != null && !displayList.isEmpty()) { + // Get the locale of the first display object in the list + selectedLocale = displayList.get(0).getLocale(); + break; // Use the first locale and exit the loop + } + } + } + return selectedLocale; + } + } From da37d7ea61831c68bdd3a45200b9c1f1b0741892 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 3 Mar 2025 10:28:52 +0530 Subject: [PATCH 409/860] [injiweb-1370 added the dbscripts for inji_mimoto database] Signed-off-by: Gurpreet41082 --- .../inji_mimoto/ddl/mimoto-ca_cert_store.sql | 54 +++++++++++++++++++ .../inji_mimoto/ddl/mimoto-key_alias.sql | 47 ++++++++++++++++ .../inji_mimoto/ddl/mimoto-key_policy_def.sql | 36 +++++++++++++ .../inji_mimoto/ddl/mimoto-key_store.sql | 37 +++++++++++++ .../inji_mimoto/ddl/mimoto-user_metadata.sql | 33 ++++++++++++ .../ddl/mimoto-verifiable_credentials.sql | 30 +++++++++++ db_scripts/inji_mimoto/ddl/mimoto-wallet.sql | 35 ++++++++++++ 7 files changed, 272 insertions(+) create mode 100644 db_scripts/inji_mimoto/ddl/mimoto-ca_cert_store.sql create mode 100644 db_scripts/inji_mimoto/ddl/mimoto-key_alias.sql create mode 100644 db_scripts/inji_mimoto/ddl/mimoto-key_policy_def.sql create mode 100644 db_scripts/inji_mimoto/ddl/mimoto-key_store.sql create mode 100644 db_scripts/inji_mimoto/ddl/mimoto-user_metadata.sql create mode 100644 db_scripts/inji_mimoto/ddl/mimoto-verifiable_credentials.sql create mode 100644 db_scripts/inji_mimoto/ddl/mimoto-wallet.sql diff --git a/db_scripts/inji_mimoto/ddl/mimoto-ca_cert_store.sql b/db_scripts/inji_mimoto/ddl/mimoto-ca_cert_store.sql new file mode 100644 index 000000000..2c9fd9520 --- /dev/null +++ b/db_scripts/inji_mimoto/ddl/mimoto-ca_cert_store.sql @@ -0,0 +1,54 @@ +-- This Source Code Form is subject to the terms of the Mozilla Public +-- License, v. 2.0. If a copy of the MPL was not distributed with this +-- file, You can obtain one at https://mozilla.org/MPL/2.0/. +-- ------------------------------------------------------------------------------------------------- +-- Database Name: inji_mimoto +-- Table Name : ca_cert_store +-- Purpose : Key Store table +-- +-- +-- Modified Date Modified By Comments / Remarks +-- ------------------------------------------------------------------------------------------ +-- ------------------------------------------------------------------------------------------ +CREATE TABLE ca_cert_store( + cert_id character varying(36) NOT NULL, + cert_subject character varying(500) NOT NULL, + cert_issuer character varying(500) NOT NULL, + issuer_id character varying(36) NOT NULL, + cert_not_before timestamp, + cert_not_after timestamp, + crl_uri character varying(120), + cert_data character varying, + cert_thumbprint character varying(100), + cert_serial_no character varying(50), + partner_domain character varying(36), + cr_by character varying(256), + cr_dtimes timestamp, + upd_by character varying(256), + upd_dtimes timestamp, + is_deleted boolean DEFAULT FALSE, + del_dtimes timestamp, + ca_cert_type character varying(25), + CONSTRAINT pk_cacs_id PRIMARY KEY (cert_id), + CONSTRAINT cert_thumbprint_unique UNIQUE (cert_thumbprint,partner_domain) + +); +COMMENT ON TABLE ca_cert_store IS 'Certificate Authority Certificate Store: Store details of all the certificate provided by certificate authority which will be used by MOSIP'; +COMMENT ON COLUMN ca_cert_store.cert_id IS 'Certificate ID: Unique ID (UUID) will be generated and assigned to the uploaded CA/Sub-CA certificate'; +COMMENT ON COLUMN ca_cert_store.cert_subject IS 'Certificate Subject: Subject DN of the certificate'; +COMMENT ON COLUMN ca_cert_store.cert_issuer IS 'Certificate Issuer: Issuer DN of the certificate'; +COMMENT ON COLUMN ca_cert_store.issuer_id IS 'Issuer UUID of the certificate. (Issuer certificate should be available in the DB)'; +COMMENT ON COLUMN ca_cert_store.cert_not_before IS 'Certificate Start Date: Certificate Interval - Validity Start Date & Time'; +COMMENT ON COLUMN ca_cert_store.cert_not_after IS 'Certificate Validity end Date: Certificate Interval - Validity End Date & Time'; +COMMENT ON COLUMN ca_cert_store.crl_uri IS 'CRL URL: CRL URI of the issuer.'; +COMMENT ON COLUMN ca_cert_store.cert_data IS 'Certificate Data: PEM Encoded actual certificate data.'; +COMMENT ON COLUMN ca_cert_store.cert_thumbprint IS 'Certificate Thumb Print: SHA1 generated certificate thumbprint.'; +COMMENT ON COLUMN ca_cert_store.cert_serial_no IS 'Certificate Serial No: Serial Number of the certificate.'; +COMMENT ON COLUMN ca_cert_store.partner_domain IS 'Partner Domain : To add Partner Domain in CA/Sub-CA certificate chain'; +COMMENT ON COLUMN ca_cert_store.cr_by IS 'Created By : ID or name of the user who create / insert record'; +COMMENT ON COLUMN ca_cert_store.cr_dtimes IS 'Created DateTimestamp : Date and Timestamp when the record is created/inserted'; +COMMENT ON COLUMN ca_cert_store.upd_by IS 'Updated By : ID or name of the user who update the record with new values'; +COMMENT ON COLUMN ca_cert_store.upd_dtimes IS 'Updated DateTimestamp : Date and Timestamp when any of the fields in the record is updated with new values.'; +COMMENT ON COLUMN ca_cert_store.is_deleted IS 'IS_Deleted : Flag to mark whether the record is Soft deleted.'; +COMMENT ON COLUMN ca_cert_store.del_dtimes IS 'Deleted DateTimestamp : Date and Timestamp when the record is soft deleted with is_deleted=TRUE'; +COMMENT ON COLUMN ca_cert_store.ca_cert_type IS 'CA Certificate Type : Indicates if the certificate is a ROOT or INTERMEDIATE CA certificate'; diff --git a/db_scripts/inji_mimoto/ddl/mimoto-key_alias.sql b/db_scripts/inji_mimoto/ddl/mimoto-key_alias.sql new file mode 100644 index 000000000..83254481f --- /dev/null +++ b/db_scripts/inji_mimoto/ddl/mimoto-key_alias.sql @@ -0,0 +1,47 @@ +-- This Source Code Form is subject to the terms of the Mozilla Public +-- License, v. 2.0. If a copy of the MPL was not distributed with this +-- file, You can obtain one at https://mozilla.org/MPL/2.0/. +-- ------------------------------------------------------------------------------------------------- +-- Database Name: inji_mimoto +-- Table Name : key_alias +-- Purpose : Key Alias table +-- +-- +-- Modified Date Modified By Comments / Remarks +-- ------------------------------------------------------------------------------------------ +-- ------------------------------------------------------------------------------------------ +CREATE TABLE key_alias( + id character varying(36) NOT NULL, + app_id character varying(36) NOT NULL, + ref_id character varying(128), + key_gen_dtimes timestamp, + key_expire_dtimes timestamp, + status_code character varying(36), + lang_code character varying(3), + cr_by character varying(256) NOT NULL, + cr_dtimes timestamp NOT NULL, + upd_by character varying(256), + upd_dtimes timestamp, + is_deleted boolean DEFAULT FALSE, + del_dtimes timestamp, + cert_thumbprint character varying(100), + uni_ident character varying(50), + CONSTRAINT pk_keymals_id PRIMARY KEY (id), + CONSTRAINT uni_ident_const UNIQUE (uni_ident) +); + +COMMENT ON TABLE key_alias IS 'Contains key alias and metadata of all the keys used in MOSIP system.'; + +COMMENT ON COLUMN key_alias.id IS 'Unique identifier (UUID) used for referencing keys in key_store table and HSM'; +COMMENT ON COLUMN key_alias.app_id IS 'To reference a Module key'; +COMMENT ON COLUMN key_alias.ref_id IS 'To reference a Encryption key '; +COMMENT ON COLUMN key_alias.key_gen_dtimes IS 'Date and time when the key was generated.'; +COMMENT ON COLUMN key_alias.key_expire_dtimes IS 'Date and time when the key will be expired. This will be derived based on the configuration / policy defined in Key policy definition.'; +COMMENT ON COLUMN key_alias.status_code IS 'Status of the key, whether it is active or expired.'; +COMMENT ON COLUMN key_alias.lang_code IS 'For multilanguage implementation this attribute Refers master.language.code. The value of some of the attributes in current record is stored in this respective language. '; +COMMENT ON COLUMN key_alias.cr_by IS 'ID or name of the user who create / insert record'; +COMMENT ON COLUMN key_alias.cr_dtimes IS 'Date and Timestamp when the record is created/inserted'; +COMMENT ON COLUMN key_alias.upd_by IS 'ID or name of the user who update the record with new values'; +COMMENT ON COLUMN key_alias.upd_dtimes IS 'Date and Timestamp when any of the fields in the record is updated with new values.'; +COMMENT ON COLUMN key_alias.is_deleted IS 'Flag to mark whether the record is Soft deleted.'; +COMMENT ON COLUMN key_alias.del_dtimes IS 'Date and Timestamp when the record is soft deleted with is_deleted=TRUE'; \ No newline at end of file diff --git a/db_scripts/inji_mimoto/ddl/mimoto-key_policy_def.sql b/db_scripts/inji_mimoto/ddl/mimoto-key_policy_def.sql new file mode 100644 index 000000000..6fdd9d63a --- /dev/null +++ b/db_scripts/inji_mimoto/ddl/mimoto-key_policy_def.sql @@ -0,0 +1,36 @@ +-- This Source Code Form is subject to the terms of the Mozilla Public +-- License, v. 2.0. If a copy of the MPL was not distributed with this +-- file, You can obtain one at https://mozilla.org/MPL/2.0/. +-- ------------------------------------------------------------------------------------------------- +-- Database Name: inji_mimoto +-- Table Name : key_policy_def +-- Purpose : Key Policy definition table +-- +-- +-- Modified Date Modified By Comments / Remarks +-- ------------------------------------------------------------------------------------------ +-- ------------------------------------------------------------------------------------------ +CREATE TABLE key_policy_def( + app_id character varying(36) NOT NULL, + key_validity_duration smallint, + is_active boolean NOT NULL, + pre_expire_days smallint, + access_allowed character varying(1024), + cr_by character varying(256) NOT NULL, + cr_dtimes timestamp NOT NULL, + upd_by character varying(256), + upd_dtimes timestamp, + is_deleted boolean DEFAULT FALSE, + del_dtimes timestamp, + CONSTRAINT pk_keypdef_id PRIMARY KEY (app_id) +); +COMMENT ON TABLE key_policy_def IS 'Key Policy Defination: Policy related to encryption key management is defined here. For eg. Expiry duration of a key generated.'; +COMMENT ON COLUMN key_policy_def.app_id IS 'Application ID: Application id for which the key policy is defined'; +COMMENT ON COLUMN key_policy_def.key_validity_duration IS 'Key Validity Duration: Duration for which key is valid'; +COMMENT ON COLUMN key_policy_def.is_active IS 'IS_Active : Flag to mark whether the record is Active or In-active'; +COMMENT ON COLUMN key_policy_def.cr_by IS 'Created By : ID or name of the user who create / insert record'; +COMMENT ON COLUMN key_policy_def.cr_dtimes IS 'Created DateTimestamp : Date and Timestamp when the record is created/inserted'; +COMMENT ON COLUMN key_policy_def.upd_by IS 'Updated By : ID or name of the user who update the record with new values'; +COMMENT ON COLUMN key_policy_def.upd_dtimes IS 'Updated DateTimestamp : Date and Timestamp when any of the fields in the record is updated with new values.'; +COMMENT ON COLUMN key_policy_def.is_deleted IS 'IS_Deleted : Flag to mark whether the record is Soft deleted.'; +COMMENT ON COLUMN key_policy_def.del_dtimes IS 'Deleted DateTimestamp : Date and Timestamp when the record is soft deleted with is_deleted=TRUE'; \ No newline at end of file diff --git a/db_scripts/inji_mimoto/ddl/mimoto-key_store.sql b/db_scripts/inji_mimoto/ddl/mimoto-key_store.sql new file mode 100644 index 000000000..654ff760c --- /dev/null +++ b/db_scripts/inji_mimoto/ddl/mimoto-key_store.sql @@ -0,0 +1,37 @@ +-- This Source Code Form is subject to the terms of the Mozilla Public +-- License, v. 2.0. If a copy of the MPL was not distributed with this +-- file, You can obtain one at https://mozilla.org/MPL/2.0/. +-- ------------------------------------------------------------------------------------------------- +-- Database Name: inji_mimoto +-- Table Name : key_store +-- Purpose : Key Store table +-- +-- +-- Modified Date Modified By Comments / Remarks +-- ------------------------------------------------------------------------------------------ +-- ------------------------------------------------------------------------------------------ +CREATE TABLE key_store( + id character varying(36) NOT NULL, + master_key character varying(36) NOT NULL, + private_key character varying(2500) NOT NULL, + certificate_data character varying NOT NULL, + cr_by character varying(256) NOT NULL, + cr_dtimes timestamp NOT NULL, + upd_by character varying(256), + upd_dtimes timestamp, + is_deleted boolean DEFAULT FALSE, + del_dtimes timestamp, + CONSTRAINT pk_keystr_id PRIMARY KEY (id) +); + +COMMENT ON TABLE key_store IS 'Stores Encryption (Base) private keys along with certificates'; +COMMENT ON COLUMN key_store.id IS 'Unique identifier (UUID) for referencing keys'; +COMMENT ON COLUMN key_store.master_key IS 'UUID of the master key used to encrypt this key'; +COMMENT ON COLUMN key_store.private_key IS 'Encrypted private key'; +COMMENT ON COLUMN key_store.certificate_data IS 'X.509 encoded certificate data'; +COMMENT ON COLUMN key_store.cr_by IS 'ID or name of the user who create / insert record'; +COMMENT ON COLUMN key_store.cr_dtimes IS 'Date and Timestamp when the record is created/inserted'; +COMMENT ON COLUMN key_store.upd_by IS 'ID or name of the user who update the record with new values'; +COMMENT ON COLUMN key_store.upd_dtimes IS 'Date and Timestamp when any of the fields in the record is updated with new values.'; +COMMENT ON COLUMN key_store.is_deleted IS 'Flag to mark whether the record is Soft deleted.'; +COMMENT ON COLUMN key_store.del_dtimes IS 'Date and Timestamp when the record is soft deleted with is_deleted=TRUE'; \ No newline at end of file diff --git a/db_scripts/inji_mimoto/ddl/mimoto-user_metadata.sql b/db_scripts/inji_mimoto/ddl/mimoto-user_metadata.sql new file mode 100644 index 000000000..9988fe18e --- /dev/null +++ b/db_scripts/inji_mimoto/ddl/mimoto-user_metadata.sql @@ -0,0 +1,33 @@ +-- ------------------------------------------------------------------------------------------------- +-- Database Name: inji_mimoto +-- Table Name : user_metadata +-- Purpose : User Metadata table +-- +-- +-- Modified Date Modified By Comments / Remarks +-- ------------------------------------------------------------------------------------------ +-- ------------------------------------------------------------------------------------------ + +CREATE TABLE IF NOT EXISTS user_metadata ( + id UUID PRIMARY KEY, -- Primary key for the table + provider_subject_id VARCHAR(255) UNIQUE NOT NULL, -- Unique identifier for the provider subject + identity_provider VARCHAR(255) UNIQUE NOT NULL, -- Unique identifier for the identity provider + display_name TEXT NOT NULL, -- Display name of the user + profile_picture_url TEXT, -- URL of the user's profile picture + phone_number TEXT, -- Phone number of the user + email TEXT NOT NULL, -- Email of the user (Required field) + created_at TIMESTAMP DEFAULT now(), -- Timestamp of record creation (defaults to current time) + updated_at TIMESTAMP DEFAULT now() -- Timestamp of last update (defaults to current time) +); + +COMMENT ON TABLE user_metadata IS 'User Metadata: Contains details about the user such as identity provider, contact details, and display name'; + +COMMENT ON COLUMN user_metadata.id IS 'Primary Key: Unique identifier for the user metadata'; +COMMENT ON COLUMN user_metadata.provider_subject_id IS 'Provider Subject ID: Unique identifier for the subject assigned by the identity provider'; +COMMENT ON COLUMN user_metadata.identity_provider IS 'Identity Provider: The identity provider associated with the user'; +COMMENT ON COLUMN user_metadata.display_name IS 'Display Name: The name shown to other users'; +COMMENT ON COLUMN user_metadata.profile_picture_url IS 'Profile Picture URL: The URL link to the user\'s profile picture'; +COMMENT ON COLUMN user_metadata.phone_number IS 'Phone Number: User\'s phone number, if available'; +COMMENT ON COLUMN user_metadata.email IS 'Email: User\'s email address'; +COMMENT ON COLUMN user_metadata.created_at IS 'Created At: The date and time when the metadata was created'; +COMMENT ON COLUMN user_metadata.updated_at IS 'Updated At: The date and time when the metadata was last updated'; diff --git a/db_scripts/inji_mimoto/ddl/mimoto-verifiable_credentials.sql b/db_scripts/inji_mimoto/ddl/mimoto-verifiable_credentials.sql new file mode 100644 index 000000000..26831f535 --- /dev/null +++ b/db_scripts/inji_mimoto/ddl/mimoto-verifiable_credentials.sql @@ -0,0 +1,30 @@ +-- ------------------------------------------------------------------------------------------------- +-- Database Name: inji_mimoto +-- Table Name : verifiable_credentials +-- Purpose : Stores verifiable credentials related to the user, encrypted with wallet_key +-- +-- +-- Modified Date Modified By Comments / Remarks +-- ------------------------------------------------------------------------------------------ +-- ------------------------------------------------------------------------------------------ + +CREATE TABLE IF NOT EXISTS verifiable_credentials ( + id UUID PRIMARY KEY, -- Primary key for the table + wallet_id UUID NOT NULL, -- Foreign key referring to the wallet table (wallet.id) + credential TEXT NOT NULL, -- Encrypted credential (using wallet_key for encryption/decryption) + credential_format VARCHAR(255) NOT NULL, -- Format of the credential (e.g., JSON, JWT, etc.) + credential_metadata JSON NOT NULL, -- Metadata about the credential + created_at TIMESTAMP DEFAULT now(), -- Timestamp of record creation (defaults to current time) + updated_at TIMESTAMP DEFAULT now(), -- Timestamp of last update (defaults to current time) + + CONSTRAINT fk_wallet_id FOREIGN KEY (wallet_id) REFERENCES wallet (id) ON DELETE CASCADE +); + +COMMENT ON TABLE verifiable_credentials IS 'Verifiable Credentials: Contains user credentials, encrypted using wallet key'; +COMMENT ON COLUMN verifiable_credentials.id IS 'Primary Key: Unique identifier for the verifiable credential record'; +COMMENT ON COLUMN verifiable_credentials.wallet_id IS 'Wallet ID: Foreign key referring to the wallet table, linked to the user\'s wallet'; +COMMENT ON COLUMN verifiable_credentials.credential IS 'Credential: Encrypted credential using the wallet\'s key'; +COMMENT ON COLUMN verifiable_credentials.credential_format IS 'Credential Format: Format of the credential (e.g., JSON, JWT)'; +COMMENT ON COLUMN verifiable_credentials.credential_metadata IS 'Credential Metadata: Additional information about the credential (e.g., issuer, claims)'; +COMMENT ON COLUMN verifiable_credentials.created_at IS 'Created At: The date and time when the credential was created'; +COMMENT ON COLUMN verifiable_credentials.updated_at IS 'Updated At: The date and time when the credential was last updated'; diff --git a/db_scripts/inji_mimoto/ddl/mimoto-wallet.sql b/db_scripts/inji_mimoto/ddl/mimoto-wallet.sql new file mode 100644 index 000000000..5b412b304 --- /dev/null +++ b/db_scripts/inji_mimoto/ddl/mimoto-wallet.sql @@ -0,0 +1,35 @@ +-- ------------------------------------------------------------------------------------------------- +-- Database Name: inji_mimoto +-- Table Name : wallet +-- Purpose : Wallet Information table for user, encrypted with AES256-GCM, including key metadata +-- +-- +-- Modified Date Modified By Comments / Remarks +-- ------------------------------------------------------------------------------------------ +-- ------------------------------------------------------------------------------------------ + +CREATE TABLE IF NOT EXISTS wallet ( + id UUID PRIMARY KEY, -- Primary key for the table + user_id VARCHAR(255) NOT NULL, -- User ID, foreign key referring to the user_metadata table + wallet_key TEXT NOT NULL, -- Encrypted wallet key using AES256-GCM with user’s PIN + public_key TEXT NOT NULL, -- Public key for the wallet + secret_key TEXT NOT NULL, -- Secret key, encrypted with wallet_key + key_metadata JSON NOT NULL, -- Metadata about the public and private keys + wallet_metadata JSON NOT NULL, -- Metadata about the wallet, including encryption info + created_at TIMESTAMP DEFAULT now(), -- Timestamp of record creation (defaults to current time) + updated_at TIMESTAMP DEFAULT now(), -- Timestamp of last update (defaults to current time) + + CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES user_metadata (id) ON DELETE CASCADE +); + +COMMENT ON TABLE wallet IS 'Wallet: Contains information about the user\'s wallet, encrypted keys, and metadata'; + +COMMENT ON COLUMN wallet.id IS 'Primary Key: Unique identifier for the wallet'; +COMMENT ON COLUMN wallet.user_id IS 'User ID: Foreign key referring to the user_metadata table'; +COMMENT ON COLUMN wallet.wallet_key IS 'Wallet Key: Encrypted wallet key using AES256-GCM with the user\'s PIN'; +COMMENT ON COLUMN wallet.public_key IS 'Public Key: The public key of the wallet'; +COMMENT ON COLUMN wallet.secret_key IS 'Secret Key: Encrypted using the wallet_key'; +COMMENT ON COLUMN wallet.key_metadata IS 'Key Metadata: Contains additional information about the public and private keys'; +COMMENT ON COLUMN wallet.wallet_metadata IS 'Wallet Metadata: Contains information about the wallet, including encryption and PIN usage'; +COMMENT ON COLUMN wallet.created_at IS 'Created At: The date and time when the wallet was created'; +COMMENT ON COLUMN wallet.updated_at IS 'Updated At: The date and time when the wallet was last updated'; From 78edf7340a098abdae3db9da8fb7d091d7a8b62f Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 3 Mar 2025 10:52:25 +0530 Subject: [PATCH 410/860] [injiweb-1370 added the dbscripts, dml for inji_mimoto database] Signed-off-by: Gurpreet41082 --- db_scripts/inji_mimoto/dml/mimoto-key_policy_def.csv | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 db_scripts/inji_mimoto/dml/mimoto-key_policy_def.csv diff --git a/db_scripts/inji_mimoto/dml/mimoto-key_policy_def.csv b/db_scripts/inji_mimoto/dml/mimoto-key_policy_def.csv new file mode 100644 index 000000000..88de66fa0 --- /dev/null +++ b/db_scripts/inji_mimoto/dml/mimoto-key_policy_def.csv @@ -0,0 +1,4 @@ +app_id,key_validity_duration,pre_expire_days,access_allowed,is_active,cr_by,cr_dtimes +ROOT,2920,1125,NA,TRUE,mosipadmin,now() +MIMOTO,1095,60,NA,TRUE,mosipadmin,now() +BASE,730,60,NA,TRUE,mosipadmin,now() From bf24a698c0eaf280afee7c5d156400c9f4ad0d05 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 3 Mar 2025 14:53:57 +0530 Subject: [PATCH 411/860] [INJIWEB-1436] remove the redundant for loop iteration logic to check if any of the download response credential subject fields contains the details in received lanugage otherwise use first display object Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../service/impl/CredentialServiceImpl.java | 26 ++++++++++--------- .../io/mosip/mimoto/util/LocaleUtils.java | 19 +++++--------- 2 files changed, 20 insertions(+), 25 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java index 8544e8dc1..8483eba14 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java @@ -185,18 +185,20 @@ private static LinkedHashMap credentialProperties = vcCredentialResponse.getCredential().getCredentialSubject(); LinkedHashMap vcPropertiesFromWellKnown = new LinkedHashMap<>(); Map credentialSubject = credentialsSupportedResponse.getCredentialDefinition().getCredentialSubject(); - String locale = LocaleUtils.resolveLocaleWithFallback(credentialSubject, userLocale); - credentialSubject.keySet().forEach(VCProperty -> { - Optional filteredResponse = credentialSubject.get(VCProperty) - .getDisplay().stream() - .filter(obj -> "undefined".equals(locale) || LocaleUtils.matchesLocale(obj.getLocale(), locale))// if locale is not undefined use it to fetch the wellknown properties otherwise return the properties of the first display object which has language field - .findFirst(); - - if (filteredResponse.isPresent()) { - CredentialIssuerDisplayResponse filteredValue = filteredResponse.get(); - vcPropertiesFromWellKnown.put(VCProperty, filteredValue); - } - }); + String locale = LocaleUtils.resolveLocaleWithFallback(credentialSubject, userLocale); + if (locale != null) { + credentialSubject.keySet().forEach(VCProperty -> { + Optional filteredResponse = credentialSubject.get(VCProperty) + .getDisplay().stream() + .filter(obj -> LocaleUtils.matchesLocale(obj.getLocale(), locale)) + .findFirst(); + + if (filteredResponse.isPresent()) { + CredentialIssuerDisplayResponse filteredValue = filteredResponse.get(); + vcPropertiesFromWellKnown.put(VCProperty, filteredValue); + } + }); + } List orderProperty = credentialsSupportedResponse.getOrder(); diff --git a/src/main/java/io/mosip/mimoto/util/LocaleUtils.java b/src/main/java/io/mosip/mimoto/util/LocaleUtils.java index 605d63deb..cb960360b 100644 --- a/src/main/java/io/mosip/mimoto/util/LocaleUtils.java +++ b/src/main/java/io/mosip/mimoto/util/LocaleUtils.java @@ -24,9 +24,13 @@ public static boolean matchesLocale(String localeString1, String localeString2) public static String resolveLocaleWithFallback(Map credentialSubject, String locale) { String selectedLocale = null; - // Iterate through the credentials to check if any display object supports the requested locale + // Iterate through the credentials to find a display object that supports the requested locale. If none is found, use the first available display object. for (String VCProperty : credentialSubject.keySet()) { List displayList = credentialSubject.get(VCProperty).getDisplay(); + // If no matching locale is found for any of the fields, use the locale of the first display object + if(selectedLocale == null && displayList!=null && !displayList.isEmpty()){ + selectedLocale = displayList.get(0).getLocale(); + } // Check if any display object supports the requested locale Optional filteredResponse = displayList.stream() .filter(obj -> matchesLocale(obj.getLocale(), locale)) @@ -36,18 +40,7 @@ public static String resolveLocaleWithFallback(Map displayList = credentialSubject.get(VCProperty).getDisplay(); - if (displayList != null && !displayList.isEmpty()) { - // Get the locale of the first display object in the list - selectedLocale = displayList.get(0).getLocale(); - break; // Use the first locale and exit the loop - } - } - } + return selectedLocale; } From 25747a4b6db163dd9383c2bc9f735c5c1dc2fcea Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Mon, 3 Mar 2025 19:39:27 +0530 Subject: [PATCH 412/860] Mosip 39047 - Commons cleanup (#627) * MOSIP-39047 Signed-off-by: Nandhukumar * MOSIP-39047 Signed-off-by: Nandhukumar * MOSIP-39047 Signed-off-by: Nandhukumar * MOSIP-39047 Signed-off-by: Nandhukumar * MOSIP-39047 Signed-off-by: Nandhukumar --------- Signed-off-by: Nandhukumar --- .../mimoto/testrunner/MosipTestRunner.java | 27 ++++++--- .../mimoto/testscripts/AddIdentity.java | 2 +- .../mimoto/testscripts/DeleteWithParam.java | 2 +- .../mimoto/testscripts/GetWithParam.java | 2 +- .../PostWithAutogenIdWithOtpGenerate.java | 8 +-- .../PostWithBodyWithOtpGenerate.java | 2 +- .../PostWithFormDataBodyForPdfDownload.java | 2 +- .../apirig/mimoto/testscripts/SimplePost.java | 2 +- .../testscripts/SimplePostForAutoGenId.java | 2 +- .../mimoto/utils/MimotoConfigManager.java | 3 +- .../apirig/mimoto/utils/MimotoUtil.java | 58 ++++++++++++++++++- .../resources/config/application.properties | 30 +++++----- 12 files changed, 102 insertions(+), 38 deletions(-) diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java index 4db69797d..a26425499 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java @@ -85,12 +85,18 @@ public static void main(String[] arg) { setLogLevels(); // For now we are not doing health check for qa-115. - if (BaseTestCase.isTargetEnvLTS()) { - HealthChecker healthcheck = new HealthChecker(); - healthcheck.setCurrentRunningModule(BaseTestCase.currentModule); - Thread trigger = new Thread(healthcheck); - trigger.start(); - } +// if (BaseTestCase.isTargetEnvLTS()) { +// HealthChecker healthcheck = new HealthChecker(); +// healthcheck.setCurrentRunningModule(BaseTestCase.currentModule); +// Thread trigger = new Thread(healthcheck); +// trigger.start(); +// } + + HealthChecker healthcheck = new HealthChecker(); + healthcheck.setCurrentRunningModule(BaseTestCase.currentModule); + Thread trigger = new Thread(healthcheck); + trigger.start(); + KeycloakUserManager.removeUser(); KeycloakUserManager.createUsers(); KeycloakUserManager.closeKeycloakInstance(); @@ -112,8 +118,10 @@ public static void main(String[] arg) { OTPListener.bTerminate = true; - if (BaseTestCase.isTargetEnvLTS()) - HealthChecker.bTerminate = true; +// if (BaseTestCase.isTargetEnvLTS()) +// HealthChecker.bTerminate = true; + + HealthChecker.bTerminate = true; System.exit(0); @@ -157,6 +165,9 @@ private static void setLogLevels() { KernelAuthentication.setLogLevel(); BaseTestCase.setLogLevel(); MimotoUtil.setLogLevel(); + KeycloakUserManager.setLogLevel(); + DBManager.setLogLevel(); + BiometricDataProvider.setLogLevel(); } /** diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/AddIdentity.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/AddIdentity.java index 5a5b28383..f5bd9aeba 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/AddIdentity.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/AddIdentity.java @@ -40,7 +40,7 @@ import io.mosip.testrig.apirig.utils.RestClient; import io.restassured.response.Response; -public class AddIdentity extends AdminTestUtil implements ITest { +public class AddIdentity extends MimotoUtil implements ITest { private static final Logger logger = Logger.getLogger(AddIdentity.class); protected String testCaseName = ""; public Response response = null; diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/DeleteWithParam.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/DeleteWithParam.java index fa83f24ae..cdea225dc 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/DeleteWithParam.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/DeleteWithParam.java @@ -33,7 +33,7 @@ import io.mosip.testrig.apirig.utils.ReportUtil; import io.restassured.response.Response; -public class DeleteWithParam extends AdminTestUtil implements ITest { +public class DeleteWithParam extends MimotoUtil implements ITest { private static final Logger logger = Logger.getLogger(DeleteWithParam.class); protected String testCaseName = ""; public Response response = null; diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/GetWithParam.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/GetWithParam.java index 902ee0bfa..4132aebf4 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/GetWithParam.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/GetWithParam.java @@ -35,7 +35,7 @@ import io.mosip.testrig.apirig.utils.ReportUtil; import io.restassured.response.Response; -public class GetWithParam extends AdminTestUtil implements ITest { +public class GetWithParam extends MimotoUtil implements ITest { private static final Logger logger = Logger.getLogger(GetWithParam.class); protected String testCaseName = ""; public Response response = null; diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java index 0a8180ebf..a7ab03d12 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java @@ -34,7 +34,7 @@ import io.mosip.testrig.apirig.utils.ReportUtil; import io.restassured.response.Response; -public class PostWithAutogenIdWithOtpGenerate extends AdminTestUtil implements ITest { +public class PostWithAutogenIdWithOtpGenerate extends MimotoUtil implements ITest { private static final Logger logger = Logger.getLogger(PostWithAutogenIdWithOtpGenerate.class); protected String testCaseName = ""; public String idKeyName = null; @@ -236,9 +236,9 @@ public void waittime() { && MimotoUtil.isOTPEnabled().equals("true")) { try { long delayTime = Long.parseLong(properties.getProperty("Delaytime")); - if (!BaseTestCase.isTargetEnvLTS()) - delayTime = Long.parseLong(properties.getProperty("uinGenDelayTime")) - * Long.parseLong(properties.getProperty("uinGenMaxLoopCount")); +// if (!BaseTestCase.isTargetEnvLTS()) +// delayTime = Long.parseLong(properties.getProperty("uinGenDelayTime")) +// * Long.parseLong(properties.getProperty("uinGenMaxLoopCount")); logger.info("waiting for " + delayTime + " mili secs after VID Generation In RESIDENT SERVICES"); Thread.sleep(delayTime); } catch (Exception e) { diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithBodyWithOtpGenerate.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithBodyWithOtpGenerate.java index 48178be33..41c3e19a4 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithBodyWithOtpGenerate.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithBodyWithOtpGenerate.java @@ -33,7 +33,7 @@ import io.mosip.testrig.apirig.utils.ReportUtil; import io.restassured.response.Response; -public class PostWithBodyWithOtpGenerate extends AdminTestUtil implements ITest { +public class PostWithBodyWithOtpGenerate extends MimotoUtil implements ITest { private static final Logger logger = Logger.getLogger(PostWithBodyWithOtpGenerate.class); protected String testCaseName = ""; public Response response = null; diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithFormDataBodyForPdfDownload.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithFormDataBodyForPdfDownload.java index 337c11b1e..327537df0 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithFormDataBodyForPdfDownload.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithFormDataBodyForPdfDownload.java @@ -33,7 +33,7 @@ import io.mosip.testrig.apirig.utils.GlobalMethods; import io.restassured.response.Response; -public class PostWithFormDataBodyForPdfDownload extends AdminTestUtil implements ITest { +public class PostWithFormDataBodyForPdfDownload extends MimotoUtil implements ITest { private static final Logger logger = Logger.getLogger(PostWithFormDataBodyForPdfDownload.class); protected String testCaseName = ""; public Response response = null; diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePost.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePost.java index 97977bdf1..d2c29890a 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePost.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePost.java @@ -35,7 +35,7 @@ import io.mosip.testrig.apirig.utils.ReportUtil; import io.restassured.response.Response; -public class SimplePost extends AdminTestUtil implements ITest { +public class SimplePost extends MimotoUtil implements ITest { private static final Logger logger = Logger.getLogger(SimplePost.class); protected String testCaseName = ""; public Response response = null; diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java index fc7d4274c..cd308fde7 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java @@ -36,7 +36,7 @@ import io.mosip.testrig.apirig.utils.ReportUtil; import io.restassured.response.Response; -public class SimplePostForAutoGenId extends AdminTestUtil implements ITest { +public class SimplePostForAutoGenId extends MimotoUtil implements ITest { private static final Logger logger = Logger.getLogger(SimplePostForAutoGenId.class); protected String testCaseName = ""; public String idKeyName = null; diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java index f57de9fa1..93cc35232 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java @@ -24,8 +24,7 @@ public static void init() { Properties props = getproperties(path); // Convert Properties to Map and add to moduleSpecificPropertiesMap for (String key : props.stringPropertyNames()) { - String value = System.getenv(key) == null ? props.getProperty(key) : System.getenv(key); - moduleSpecificPropertiesMap.put(key, value); + moduleSpecificPropertiesMap.put(key, props.getProperty(key)); } } catch (Exception e) { LOGGER.error(e.getMessage()); diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java index 1f9e5bca0..a4ec2fcbe 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java @@ -8,9 +8,12 @@ import java.time.format.DateTimeFormatter; import java.util.HashMap; +import javax.ws.rs.core.MediaType; + import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.bouncycastle.openssl.jcajce.JcaPEMWriter; +import org.json.JSONArray; import org.json.JSONObject; import org.testng.SkipException; @@ -21,8 +24,11 @@ import io.mosip.testrig.apirig.mimoto.testrunner.MosipTestRunner; import io.mosip.testrig.apirig.testrunner.OTPListener; import io.mosip.testrig.apirig.utils.AdminTestUtil; +import io.mosip.testrig.apirig.utils.ConfigManager; import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.RestClient; import io.mosip.testrig.apirig.utils.SkipTestCaseHandler; +import io.restassured.response.Response; public class MimotoUtil extends AdminTestUtil { @@ -148,8 +154,9 @@ public static String getOTPFromSMTP(String inputJson, TestCaseDTO testCaseDTO) { public static String inputstringKeyWordHandeler(String jsonString, String testCaseName) { if (jsonString.contains("$ID:")) { - String autoGenIdFileName = mimotoAutoGeneratedIdPropFileName; - jsonString = replaceIdWithAutogeneratedId(jsonString, "$ID:", autoGenIdFileName); +// String autoGenIdFileName = mimotoAutoGeneratedIdPropFileName; +// jsonString = replaceIdWithAutogeneratedId(jsonString, "$ID:", autoGenIdFileName); + jsonString = replaceIdWithAutogeneratedId(jsonString, "$ID:"); } if (jsonString.contains(GlobalConstants.TIMESTAMP)) { @@ -254,4 +261,51 @@ public static String generateDobForSunBirdR() { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); return dob.format(formatter); } + + public static JSONArray mimotoActuatorResponseArray = null; + + public static String getValueFromMimotoActuator(String section, String key) { + String url = ApplnURI + ConfigManager.getproperty("actuatorMimotoEndpoint"); + if (!(System.getenv("useOldContextURL") == null) + && !(System.getenv("useOldContextURL").isBlank()) + && System.getenv("useOldContextURL").equalsIgnoreCase("true")) { + if (url.contains("/v1/mimoto/")) { + url = url.replace("/v1/mimoto/", "/residentmobileapp/"); + } + } + String actuatorCacheKey = url + section + key; + String value = actuatorValueCache.get(actuatorCacheKey); + if (value != null && !value.isEmpty()) + return value; + + try { + if (mimotoActuatorResponseArray == null) { + Response response = null; + JSONObject responseJson = null; + response = RestClient.getRequest(url, MediaType.APPLICATION_JSON, MediaType.APPLICATION_JSON); + + responseJson = new JSONObject(response.getBody().asString()); + mimotoActuatorResponseArray = responseJson.getJSONArray("propertySources"); + } + for (int i = 0, size = mimotoActuatorResponseArray.length(); i < size; i++) { + JSONObject eachJson = mimotoActuatorResponseArray.getJSONObject(i); + if (eachJson.get("name").toString().contains(section)) { + value = eachJson.getJSONObject(GlobalConstants.PROPERTIES).getJSONObject(key) + .get(GlobalConstants.VALUE).toString(); + if (ConfigManager.IsDebugEnabled()) + logger.info("Actuator: " + url + " key: " + key + " value: " + value); + break; + } + } + actuatorValueCache.put(actuatorCacheKey, value); + + return value; + } catch (Exception e) { + logger.error(GlobalConstants.EXCEPTION_STRING_2 + e); + logger.error("Unable to fetch the value from the actuator. URL = " + url + " section = " + section + " key " + + key); + return ""; + } + + } } \ No newline at end of file diff --git a/api-test/src/main/resources/config/application.properties b/api-test/src/main/resources/config/application.properties index 2da96db1c..0904c5fbb 100644 --- a/api-test/src/main/resources/config/application.properties +++ b/api-test/src/main/resources/config/application.properties @@ -1,6 +1,6 @@ ## End point(s) relative URLs -internalSignEndpoint=/idauthentication/v1/internal/jwtSign -signJsonPath=config/sign.json +#internalSignEndpoint=/idauthentication/v1/internal/jwtSign +#signJsonPath=config/sign.json encryptionPath=v1/identity/encrypt?isInternal=false internalEncryptionPath=v1/identity/encrypt?isInternal=true encodePath=v1/identity/encode @@ -47,19 +47,19 @@ validateSignatureUrl=v1/identity/validateSign vciContextURL=https://www.w3.org/2018/credentials/v1 ## Auto generated properties while running the test rig(s) -adminAutoGeneratedIdPropFileName=/admin/autoGeneratedId.properties -masterDataAutoGeneratedIdPropFileName=/masterdata/autoGeneratedId.properties -syncDataAutoGeneratedIdPropFileName=/syncdata/autoGeneratedId.properties -preregAutoGeneratedIdPropFileName=/preReg/autoGeneratedId.properties -partnerAutoGeneratedIdPropFileName=/partner/autoGeneratedId.properties -idrepoAutoGeneratedIdPropFileName=/idRepository/autoGeneratedId.properties -residentAutoGeneratedIdPropFileName=/resident/autoGeneratedId.properties -esignetAutoGeneratedIdPropFileName=/esignet/autoGeneratedId.properties -mimotoAutoGeneratedIdPropFileName=/mimoto/autoGeneratedId.properties -authAutoGeneratedIdPropFileName=/ida/autoGeneratedId.properties -prerequisiteAutoGeneratedIdPropFileName=/prerequisite/autoGeneratedId.properties -regProcAutoGeneratedIdPropFileName=/regProc/autoGeneratedId.properties -mobileIdAutoGeneratedIdPropFileName=/mobileId/autoGeneratedId.properties +#adminAutoGeneratedIdPropFileName=/admin/autoGeneratedId.properties +#masterDataAutoGeneratedIdPropFileName=/masterdata/autoGeneratedId.properties +#syncDataAutoGeneratedIdPropFileName=/syncdata/autoGeneratedId.properties +#preregAutoGeneratedIdPropFileName=/preReg/autoGeneratedId.properties +#partnerAutoGeneratedIdPropFileName=/partner/autoGeneratedId.properties +#idrepoAutoGeneratedIdPropFileName=/idRepository/autoGeneratedId.properties +#residentAutoGeneratedIdPropFileName=/resident/autoGeneratedId.properties +#esignetAutoGeneratedIdPropFileName=/esignet/autoGeneratedId.properties +#mimotoAutoGeneratedIdPropFileName=/mimoto/autoGeneratedId.properties +#authAutoGeneratedIdPropFileName=/ida/autoGeneratedId.properties +#prerequisiteAutoGeneratedIdPropFileName=/prerequisite/autoGeneratedId.properties +#regProcAutoGeneratedIdPropFileName=/regProc/autoGeneratedId.properties +#mobileIdAutoGeneratedIdPropFileName=/mobileId/autoGeneratedId.properties ## As below are non changble values, move these out from properties file appIdForCertificate=IDA From a026a6bcbf7f19d12f5cd38509a17344b5dcfcef Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 4 Mar 2025 00:15:44 +0530 Subject: [PATCH 413/860] [INJIWEB-1370] use the udpated method for constructing the error responses in the credential controller and fix a test case in idp controller Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../controller/CredentialsController.java | 24 ++++--------------- .../mimoto/controller/IdpController.java | 6 ++--- .../mimoto/controller/IssuersController.java | 4 ++-- .../mimoto/controller/UserController.java | 4 ++-- .../java/io/mosip/mimoto/util/Utilities.java | 9 +++++-- .../mimoto/controller/IdpControllerTest.java | 10 ++++---- 6 files changed, 23 insertions(+), 34 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/CredentialsController.java b/src/main/java/io/mosip/mimoto/controller/CredentialsController.java index e612bb52a..1514d54ca 100644 --- a/src/main/java/io/mosip/mimoto/controller/CredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/CredentialsController.java @@ -2,7 +2,6 @@ import io.mosip.mimoto.constant.SwaggerLiteralConstants; import io.mosip.mimoto.core.http.ResponseWrapper; -import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.InvalidCredentialResourceException; @@ -70,31 +69,16 @@ public ResponseEntity downloadCredentialAsPDF(@RequestParam Map> handleException(Exception exception, ResponseWrapper responseWrapper) { - String errorCode = MIMOTO_PDF_SIGN_EXCEPTION.getCode(); - String[] errorObj = Utilities.handleExceptionWithErrorCode(exception, errorCode); - List errors = Utilities.getErrors(errorObj[0], errorObj[1]); - responseWrapper.setErrors(errors); - - HttpStatus status = exception instanceof ApiNotAccessibleException || exception instanceof IOException || exception instanceof InvalidCredentialResourceException || exception instanceof VCVerificationException - ? HttpStatus.BAD_REQUEST - : HttpStatus.INTERNAL_SERVER_ERROR; - - return ResponseEntity.status(status) - .contentType(MediaType.APPLICATION_JSON) - .body(responseWrapper); - } } diff --git a/src/main/java/io/mosip/mimoto/controller/IdpController.java b/src/main/java/io/mosip/mimoto/controller/IdpController.java index 1d26364d5..ea2958173 100644 --- a/src/main/java/io/mosip/mimoto/controller/IdpController.java +++ b/src/main/java/io/mosip/mimoto/controller/IdpController.java @@ -73,7 +73,7 @@ public ResponseEntity> otpRequest(@Valid return ResponseEntity.status(HttpStatus.OK).body(internalResponse); } catch (Exception e) { log.error("Wallet binding otp error occurred." + e); - return Utilities.handleErrorResponse(e, PlatformErrorMessages.MIMOTO_OTP_BINDING_EXCEPTION.getCode(), HttpStatus.BAD_REQUEST); + return Utilities.handleErrorResponse(e, PlatformErrorMessages.MIMOTO_OTP_BINDING_EXCEPTION.getCode(), HttpStatus.BAD_REQUEST,null); } } @@ -106,7 +106,7 @@ public ResponseEntity> request(@Reques return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); } catch (Exception e) { log.error("Wallet binding error occured for tranaction id " + requestDTO.getRequest().getIndividualId(), e); - return Utilities.handleErrorResponse(e, PlatformErrorMessages.MIMOTO_WALLET_BINDING_EXCEPTION.getCode(), HttpStatus.BAD_REQUEST); + return Utilities.handleErrorResponse(e, PlatformErrorMessages.MIMOTO_WALLET_BINDING_EXCEPTION.getCode(), HttpStatus.BAD_REQUEST,null); } } @@ -124,7 +124,7 @@ public ResponseEntity> getToken(@RequestParam return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); } catch (Exception ex) { log.error("Exception Occurred while Invoking the Token Endpoint : ", ex); - return Utilities.handleErrorResponse(ex, PlatformErrorMessages.MIMOTO_FETCHING_TOKEN_EXCEPTION.getCode(), HttpStatus.BAD_REQUEST); + return Utilities.handleErrorResponse(ex, PlatformErrorMessages.MIMOTO_FETCHING_TOKEN_EXCEPTION.getCode(), HttpStatus.BAD_REQUEST,null); } } } diff --git a/src/main/java/io/mosip/mimoto/controller/IssuersController.java b/src/main/java/io/mosip/mimoto/controller/IssuersController.java index 78ad4715f..b7a54b397 100644 --- a/src/main/java/io/mosip/mimoto/controller/IssuersController.java +++ b/src/main/java/io/mosip/mimoto/controller/IssuersController.java @@ -91,7 +91,7 @@ public ResponseEntity> getIssuerConfig(@PathVariable( return ResponseEntity.status(HttpStatus.NOT_FOUND).body(responseWrapper); } catch (Exception exception) { log.error("Exception occurred while fetching issuers ", exception); - return Utilities.handleErrorResponse(exception, INVALID_ISSUER_ID_EXCEPTION.getCode(), HttpStatus.BAD_REQUEST); + return Utilities.handleErrorResponse(exception, INVALID_ISSUER_ID_EXCEPTION.getCode(), HttpStatus.BAD_REQUEST,null); } } @@ -105,7 +105,7 @@ public ResponseEntity> ge return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); } catch (Exception exception) { log.error("Exception occurred while fetching issuers configurations - " + exception); - return Utilities.handleErrorResponse(exception, INVALID_ISSUER_ID_CONFIGURATION.getCode(), HttpStatus.BAD_REQUEST); + return Utilities.handleErrorResponse(exception, INVALID_ISSUER_ID_CONFIGURATION.getCode(), HttpStatus.BAD_REQUEST,null); } } } diff --git a/src/main/java/io/mosip/mimoto/controller/UserController.java b/src/main/java/io/mosip/mimoto/controller/UserController.java index 0748ad13f..c5204dfae 100644 --- a/src/main/java/io/mosip/mimoto/controller/UserController.java +++ b/src/main/java/io/mosip/mimoto/controller/UserController.java @@ -52,10 +52,10 @@ public ResponseEntity> getUserProfile(Authentication aut } catch (OAuth2AuthenticationException exception) { log.error("Error occurred while retrieving user profile : ", exception); - return Utilities.handleErrorResponse(exception, OAUTH2_AUTHENTICATION_EXCEPTION.getCode(), exception.getStatus()); + return Utilities.handleErrorResponse(exception, OAUTH2_AUTHENTICATION_EXCEPTION.getCode(), exception.getStatus(),null); } catch (Exception exception) { log.error("Error occurred while retrieving user profile : ", exception); - return Utilities.handleErrorResponse(exception, OAUTH2_AUTHENTICATION_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR); + return Utilities.handleErrorResponse(exception, OAUTH2_AUTHENTICATION_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR,null); } } diff --git a/src/main/java/io/mosip/mimoto/util/Utilities.java b/src/main/java/io/mosip/mimoto/util/Utilities.java index a00f4ab45..d2ddb2d7b 100644 --- a/src/main/java/io/mosip/mimoto/util/Utilities.java +++ b/src/main/java/io/mosip/mimoto/util/Utilities.java @@ -17,6 +17,7 @@ import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; @@ -206,7 +207,7 @@ public String getCredentialSupportedTemplateString(String issuerId, String crede } public static ResponseEntity> handleErrorResponse( - Exception exception, String flowErrorCode, HttpStatus status) { + Exception exception, String flowErrorCode, HttpStatus status, MediaType contentType) { String errorMessage = exception.getMessage(); String errorCode = flowErrorCode; @@ -219,7 +220,11 @@ public static ResponseEntity> handleErrorResponse( ResponseWrapper responseWrapper = new ResponseWrapper<>(); responseWrapper.setResponse(null); responseWrapper.setErrors(Utilities.getErrors(errorCode, errorMessage)); - return ResponseEntity.status(status).body(responseWrapper); + ResponseEntity.BodyBuilder responseEntity = ResponseEntity.status(status); + if (contentType != null) { + responseEntity.contentType(contentType); + } + return responseEntity.body(responseWrapper); } public static List getErrors(String errorCode, String errorMessage) { diff --git a/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java b/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java index efc949361..d56aae79e 100644 --- a/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java @@ -143,11 +143,11 @@ public void shouldReturnTokenResponseForValidIssuerAndParams() throws Exception new BasicNameValuePair("locale", "test-locale") ))))) .andExpect(status().isOk()) - .andExpect(jsonPath("$.id_token").value("test-id-token")) - .andExpect(jsonPath("$.access_token").value("test-accesstoken")) - .andExpect(jsonPath("$.expires_in").value(12345)) - .andExpect(jsonPath("$.scope").value("test-scope")) - .andExpect(jsonPath("$.token_type").value("test-token-type")); + .andExpect(jsonPath("$.response.id_token").value("test-id-token")) + .andExpect(jsonPath("$.response.access_token").value("test-accesstoken")) + .andExpect(jsonPath("$.response.expires_in").value(12345)) + .andExpect(jsonPath("$.response.scope").value("test-scope")) + .andExpect(jsonPath("$.response.token_type").value("test-token-type")); } @Test From da70e12c939217e986bb6e75667e85343b179f4d Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 4 Mar 2025 10:18:51 +0530 Subject: [PATCH 414/860] [INJIWEB-1370] add a session controller with an endpoint that will give the status about the session if the session is still valid or expired Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../java/io/mosip/mimoto/config/Config.java | 64 +++++++++++++------ .../mimoto/controller/SessionController.java | 49 ++++++++++++++ .../exception/LoginSessionException.java | 17 +++++ .../exception/PlatformErrorMessages.java | 3 +- .../OAuth2AuthenticationFailureHandler.java | 23 +++++++ .../resources/application-local.properties | 5 +- 6 files changed, 138 insertions(+), 23 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/controller/SessionController.java create mode 100644 src/main/java/io/mosip/mimoto/exception/LoginSessionException.java create mode 100644 src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationFailureHandler.java diff --git a/src/main/java/io/mosip/mimoto/config/Config.java b/src/main/java/io/mosip/mimoto/config/Config.java index e8e5a4a44..b112c4aba 100644 --- a/src/main/java/io/mosip/mimoto/config/Config.java +++ b/src/main/java/io/mosip/mimoto/config/Config.java @@ -1,6 +1,10 @@ package io.mosip.mimoto.config; +import io.mosip.mimoto.security.oauth2.OAuth2AuthenticationFailureHandler; import io.mosip.mimoto.security.oauth2.OAuth2AuthenticationSuccessHandler; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpSession; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; @@ -15,6 +19,7 @@ import org.springframework.security.config.annotation.web.configurers.HeadersConfigurer; import org.springframework.security.config.http.SessionCreationPolicy; import org.springframework.security.web.SecurityFilterChain; +import org.springframework.session.SessionRepository; import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.CorsConfigurationSource; @@ -29,6 +34,7 @@ @EnableMethodSecurity @EnableRedisHttpSession @Order(1) +@Slf4j public class Config { @Value("${mosipbox.public.url}") @@ -56,8 +62,11 @@ public Map injiConfig() { @Autowired private OAuth2AuthenticationSuccessHandler oAuth2AuthenticationSuccessHandler; + @Autowired + private OAuth2AuthenticationFailureHandler oAuth2AuthenticationFailureHandler; + @Bean - public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { + public SecurityFilterChain filterChain(HttpSecurity http, SessionRepository sessionRepository) throws Exception { if (!isCSRFEnable) { http.csrf(AbstractHttpConfigurer::disable); } @@ -71,31 +80,44 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { headersEntry.frameOptions(HeadersConfigurer.FrameOptionsConfig::sameOrigin); }); - setupOauth2Config(http); + setupOauth2Config(http, sessionRepository); return http.build(); } - private void setupOauth2Config(HttpSecurity http) throws Exception { - http.oauth2Login((oauth2Login) -> oauth2Login.loginPage(injiWebUrl + "/login") - .authorizationEndpoint(authorization -> authorization.baseUri("/oauth2/authorize") - ) - .redirectionEndpoint(redirect -> redirect.baseUri("/oauth2/callback/*")) - .successHandler(oAuth2AuthenticationSuccessHandler) - ) - .logout(logout -> logout - .logoutUrl("/logout") - .logoutSuccessUrl(injiWebUrl + "/login?logout") // Custom logout success URL - .clearAuthentication(true) // Clear the authentication after logout - .invalidateHttpSession(true) // Invalidate the session - .deleteCookies("JSESSIONID") // Optionally, delete cookies - ).authorizeHttpRequests(authz -> authz - // Define secured endpoints - .requestMatchers("/secure/**").authenticated() // Secure endpoints that require login - // Default authorization rule for all other requests - .anyRequest().permitAll() - ).sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)); + private void setupOauth2Config(HttpSecurity http, SessionRepository sessionRepository) throws Exception { + http + .oauth2Login((oauth2Login) -> oauth2Login.loginPage(injiWebUrl + "/login") + .authorizationEndpoint(authorization -> authorization.baseUri("/oauth2/authorize") + ) + .redirectionEndpoint(redirect -> redirect.baseUri("/oauth2/callback/*")) + .successHandler(oAuth2AuthenticationSuccessHandler) + .failureHandler(oAuth2AuthenticationFailureHandler) + ) + .logout(logout -> logout + .logoutUrl("/logout") // Ensure this matches the frontend request + .clearAuthentication(true) // Clear authentication + .invalidateHttpSession(true) // Invalidate session + .deleteCookies("JSESSIONID") // Optionally, delete cookies + .logoutSuccessHandler((request, response, authentication) -> { + log.info("inside logout success handler::"); + HttpSession session = request.getSession(false); + log.info("session::" + session); + if (session != null) { + sessionRepository.deleteById(session.getId()); // Remove session from Redis + session.invalidate(); // Invalidate the session + } + response.setStatus(HttpServletResponse.SC_FOUND); // 302 Redirect + response.setHeader("Location", "/login?logout"); // Redirect to login page + }) + ) + .authorizeHttpRequests(authz -> authz + // Define secured endpoints + .requestMatchers("/secure/**").authenticated() // Secure endpoints that require login + // Default authorization rule for all other requests + .anyRequest().permitAll() + ).sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)); } // Define CORS configuration diff --git a/src/main/java/io/mosip/mimoto/controller/SessionController.java b/src/main/java/io/mosip/mimoto/controller/SessionController.java new file mode 100644 index 000000000..e408c75cf --- /dev/null +++ b/src/main/java/io/mosip/mimoto/controller/SessionController.java @@ -0,0 +1,49 @@ +package io.mosip.mimoto.controller; + +import io.mosip.mimoto.core.http.ResponseWrapper; +import io.mosip.mimoto.exception.LoginSessionException; +import io.mosip.mimoto.util.Utilities; +import jakarta.servlet.http.HttpSession; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Enumeration; +import java.util.Map; + +import static io.mosip.mimoto.exception.PlatformErrorMessages.LOGIN_SESSION_EXCEPTION; + +@RestController +@RequestMapping("/session") +@Slf4j +public class SessionController { + @GetMapping("/status") + public ResponseEntity> getSessionStatus(HttpSession httpSession) { + try { + log.info("Session: {}", httpSession); + + if (httpSession == null) { + throw new LoginSessionException("UNAUTHORIZED", "Session is expired, please log in again", HttpStatus.UNAUTHORIZED); + } + + ResponseWrapper responseWrapper = new ResponseWrapper<>(); + responseWrapper.setResponse("Session is active"); + return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); + + } catch (LoginSessionException exception) { + log.error("Error occurred while retrieving session status: ", exception); + return Utilities.handleErrorResponse(exception, LOGIN_SESSION_EXCEPTION.getCode(), exception.getStatus(), null); + } catch (Exception exception) { + log.error("Error occurred while retrieving session status: ", exception); + return Utilities.handleErrorResponse(exception, LOGIN_SESSION_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR, null); + } + } +} + + diff --git a/src/main/java/io/mosip/mimoto/exception/LoginSessionException.java b/src/main/java/io/mosip/mimoto/exception/LoginSessionException.java new file mode 100644 index 000000000..76f2125b2 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/exception/LoginSessionException.java @@ -0,0 +1,17 @@ + +package io.mosip.mimoto.exception; + +import org.springframework.http.HttpStatus; + +public class LoginSessionException extends BaseCheckedException { + private final HttpStatus status; + + public LoginSessionException(String code, String message, HttpStatus status) { + super(code, message); + this.status = status; + } + + public HttpStatus getStatus() { + return status; + } +} diff --git a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java index 53b69984b..c09fd1ed5 100644 --- a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java +++ b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java @@ -91,7 +91,8 @@ public enum PlatformErrorMessages { INVALID_CREDENTIAL_ISSUER_WELLKNOWN_RESPONSE_EXCEPTION(PlatformConstants.PREFIX + "041", "Invalid Wellknown from Issuer"), INVALID_AUTHORIZATION_SERVER_WELLKNOWN_RESPONSE_EXCEPTION(PlatformConstants.PREFIX + "042", "Invalid Authorization Server well-known from server:"), MIMOTO_FETCHING_TOKEN_EXCEPTION(PlatformConstants.PREFIX + "043", "Exception occurred when fetching the Token"), - OAUTH2_AUTHENTICATION_EXCEPTION(PlatformConstants.PREFIX + "044", "Failed to authenticate user via OAuth Identity Provider during login"); + OAUTH2_AUTHENTICATION_EXCEPTION(PlatformConstants.PREFIX + "044", "Failed to authenticate user via OAuth Identity Provider during login"), + LOGIN_SESSION_EXCEPTION(PlatformConstants.PREFIX + "045", "Exception occurred when fetching the login session details"); /** The error message. */ private final String errorMessage; diff --git a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationFailureHandler.java b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationFailureHandler.java new file mode 100644 index 000000000..e269dc0f5 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationFailureHandler.java @@ -0,0 +1,23 @@ +package io.mosip.mimoto.security.oauth2; + +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler; +import org.springframework.stereotype.Component; + +import java.io.IOException; + +@Component +@Slf4j +public class OAuth2AuthenticationFailureHandler extends SimpleUrlAuthenticationFailureHandler { + + @Override + public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) + throws IOException { + log.error("OAuth2 authentication failed: {}", exception.getMessage()); + + getRedirectStrategy().sendRedirect(request, response, "http://localhost:3004/login?status=error"); + } +} \ No newline at end of file diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index b5f2dc5e0..651267bae 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -289,4 +289,7 @@ spring.datasource.username=postgres spring.datasource.password=postgres spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true -spring.datasource.driver-class-name=org.postgresql.Driver \ No newline at end of file +spring.datasource.driver-class-name=org.postgresql.Driver + +#Redis configuration +spring.session.store-type=redis From df647cdfd2784b9925c902188d39f23a8550c16f Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 4 Mar 2025 14:17:57 +0530 Subject: [PATCH 415/860] [INJIWEB-1436] add constuctor annotations on dataShareResponseDto Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- src/main/java/io/mosip/mimoto/dto/DataShareResponseDto.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/io/mosip/mimoto/dto/DataShareResponseDto.java b/src/main/java/io/mosip/mimoto/dto/DataShareResponseDto.java index 181b1b795..96a5a8203 100644 --- a/src/main/java/io/mosip/mimoto/dto/DataShareResponseDto.java +++ b/src/main/java/io/mosip/mimoto/dto/DataShareResponseDto.java @@ -2,11 +2,15 @@ import java.util.List; +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; @Data @Builder +@NoArgsConstructor +@AllArgsConstructor public class DataShareResponseDto extends BaseRestResponseDTO { private static final long serialVersionUID = 1L; From bb9f3f8a1d033b6825bbb374553fca63e453305d Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 4 Mar 2025 17:20:46 +0530 Subject: [PATCH 416/860] [INJIWEB-1436] rename caffiene cache properties name Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- src/main/java/io/mosip/mimoto/config/CacheConfig.java | 6 +++--- src/main/resources/application-local.properties | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/config/CacheConfig.java b/src/main/java/io/mosip/mimoto/config/CacheConfig.java index 6c8740a32..71ba8d35a 100644 --- a/src/main/java/io/mosip/mimoto/config/CacheConfig.java +++ b/src/main/java/io/mosip/mimoto/config/CacheConfig.java @@ -14,13 +14,13 @@ @EnableCaching public class CacheConfig { - @Value("${cache.credential.issuer.wellknown.response.expiry-time-in-min:60}") + @Value("${cache.credential-issuer.wellknown.expiry-time-in-min:60}") private Long issuerWellknownExpiryTimeInMin; - @Value("${cache.issuers.config.expiry-time-in-min:60}") + @Value("${cache.issuers-config.expiry-time-in-min:60}") private Long issuersConfigExpiryTimeInMin; - @Value("${cache.credential.issuer.authserver.wellknown.response.expiry-time-in-min:60}") + @Value("${cache.credential-issuer.authserver-wellknown.expiry-time-in-min:60}") private Long authServerWellknownExpiryTimeInMin; @Value("${cache.default.expiry-time-in-min:60}") diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index dc7117310..b6b54c8a5 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -237,10 +237,10 @@ mosip.security.origins=http://localhost:3004 #Caffeine cache related configurations # Cache expiry time in minutes for the issuer's well-known endpoint response. -cache.credential.issuer.wellknown.response.expiry-time-in-min = 60 +cache.credential-issuer.wellknown.expiry-time-in-min = 60 # Cache expiry time in minutes for issuers configurations read from a config file. -cache.issuers.config.expiry-time-in-min = 60 +cache.issuers-config.expiry-time-in-min = 60 # Cache expiry time in minutes for the authentication server's well-known endpoint response. -cache.credential.issuer.authserver.wellknown.response.expiry-time-in-min = 60 +cache.credential-issuer.authserver-wellknown.expiry-time-in-min = 60 # Default cache expiry time in minutes for others cache types cache.default.expiry-time-in-min = 60 From d00f1722a7750a12e52d833a455af6297dc78444 Mon Sep 17 00:00:00 2001 From: Kamlesh Singh Bisht Date: Tue, 4 Mar 2025 19:12:02 +0530 Subject: [PATCH 417/860] [INJIWEB-1405]: Fix Validation Error in api-documentation-openapi.json Signed-off-by: Kamlesh Singh Bisht --- docs/api-documentation-openapi.json | 678 +++++++++++++++++----------- 1 file changed, 416 insertions(+), 262 deletions(-) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index 4ed01fb08..bcd77cbbb 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -60,13 +60,17 @@ "type": "string" }, "str": { - "type": "null" + "type": "string", + "nullable": true }, "responsetime": { - "type": "null" + "type": "string", + "format": "date-time", + "nullable": true }, "metadata": { - "type": "null" + "type": "object", + "nullable": true }, "response": { "type": "object", @@ -80,7 +84,19 @@ } }, "errors": { - "type": "null" + "type": "array", + "items": { + "type": "object", + "properties": { + "errorCode": { + "type": "string" + }, + "errorMessage": { + "type": "string" + } + } + }, + "nullable": true } }, "x-examples": { @@ -140,17 +156,29 @@ "schema": { "type": "object", "properties": { - "verifiers": [ - { - "client_id": "string", - "redirect_uris": [ - "string" - ], - "response_uris": [ - "string" - ] + "verifiers": { + "type": "array", + "items": { + "type": "object", + "properties": { + "client_id": { + "type": "string" + }, + "redirect_uris": { + "type": "array", + "items": { + "type": "string" + } + }, + "response_uris": { + "type": "array", + "items": { + "type": "string" + } + } + } } - ] + } } }, "examples": { @@ -435,13 +463,17 @@ "type": "string" }, "str": { - "type": "null" + "type": "string", + "nullable": true }, "responsetime": { - "type": "string" + "type": "string", + "format": "date-time", + "nullable": true }, "metadata": { - "type": "null" + "type": "object", + "nullable": true }, "response": { "type": "object", @@ -455,7 +487,19 @@ } }, "errors": { - "type": "null" + "type": "array", + "items": { + "type": "object", + "properties": { + "errorCode": { + "type": "string" + }, + "errorMessage": { + "type": "string" + } + } + }, + "nullable": true } }, "x-examples": { @@ -537,21 +581,6 @@ "schema": { "type": "object", "properties": { - "id": { - "type": "null" - }, - "version": { - "type": "null" - }, - "str": { - "type": "null" - }, - "responsetime": { - "type": "string" - }, - "metadata": { - "type": "null" - }, "response": { "type": "object", "properties": { @@ -563,24 +592,19 @@ }, "statusCode": { "type": "string" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": {} + } } } - }, - "errors": { - "type": "array", - "items": { - "type": "object", - "properties": {} - } } }, "x-examples": { "Example 1": { - "id": null, - "version": null, - "str": null, - "responsetime": "2022-10-31T05:10:58.337Z", - "metadata": null, "response": { "id": "2057135194", "requestId": "2bc3bb7f-6156-46d1-ae03-bf7b76e0c257", @@ -593,11 +617,6 @@ "examples": { "success response": { "value": { - "id": null, - "version": null, - "str": null, - "responsetime": "2022-10-31T05:10:58.337Z", - "metadata": null, "response": { "id": "2057135194", "requestId": "2bc3bb7f-6156-46d1-ae03-bf7b76e0c257", @@ -1310,88 +1329,49 @@ "/allProperties": { "get": { "operationId": "getAllProperties", - "responses": {}, - "description": "get all configurable properties for inji.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "version": { - "type": "string" - }, - "str": { - "type": "null" - }, - "responsetime": { - "type": "string" - }, - "metadata": { - "type": "null" - }, - "response": { - "type": "object", - "properties": { - "internal.auth.types.allowed": { - "type": "string" - }, - "auth.types.allowed": { - "type": "string" - }, - "ekyc.auth.types.allowed": { + "responses": { + "200": { + "description": "Successfully retrieved all configurable properties for Inji.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "response": { + "type": "object", + "additionalProperties": { "type": "string" } - } - }, - "errors": { - "type": "array", - "items": { - "type": "object", - "properties": {} + }, + "errors": { + "type": "array", + "items": { + "type": "object" + } } } }, - "x-examples": { - "Example 1": { - "id": "mosip.inji.properties", - "version": "v1", - "str": null, - "responsetime": "2022-10-31T05:22:21.009Z", - "metadata": null, - "response": { - "internal.auth.types.allowed": "otp,bio-Finger,bio-Iris,bio-Face", - "auth.types.allowed": "demo,otp,bio-Finger,bio-Iris,bio-Face", - "ekyc.auth.types.allowed": "demo,otp,bio-Finger,bio-Iris,bio-Face" - }, - "errors": [] - } - } - }, - "examples": { - "example-1": { - "value": { - "id": "mosip.inji.properties", - "version": "v1", - "str": null, - "responsetime": "2022-10-31T05:22:21.009Z", - "metadata": null, - "response": { - "internal.auth.types.allowed": "otp,bio-Finger,bio-Iris,bio-Face", - "auth.types.allowed": "demo,otp,bio-Finger,bio-Iris,bio-Face", - "ekyc.auth.types.allowed": "demo,otp,bio-Finger,bio-Iris,bio-Face" - }, - "errors": [] + "examples": { + "example-1": { + "value": { + "response": { + "internal.auth.types.allowed": "otp,bio-Finger,bio-Iris,bio-Face", + "auth.types.allowed": "demo,otp,bio-Finger,bio-Iris,bio-Face", + "ekyc.auth.types.allowed": "demo,otp,bio-Finger,bio-Iris,bio-Face" + }, + "errors": [] + } } } } } } }, - "summary": "Get all Inji app properties" + "description": "Get all configurable properties for Inji.", + "summary": "Get all Inji app properties", + "tags": [ + "Inji Config" + ] } }, "/issuers": { @@ -1419,45 +1399,89 @@ "schema": { "type": "object", "properties": { - "issuers": [ - { - "issuer_id": "string", - "protocol": "string", - "display": [ - { - "name": "string", - "logo": { - "url": "string", - "alt_text": "string" - }, - "title": "string", - "description": "string", - "language": "string" + "issuers": { + "type": "array", + "items": { + "type": "object", + "properties": { + "issuer_id": { + "type": "string" + }, + "protocol": { + "type": "string" + }, + "display": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "logo": { + "type": "object", + "properties": { + "url": { + "type": "string" + }, + "alt_text": { + "type": "string" + } + } + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "language": { + "type": "string" + } + } + } + }, + "client_id": { + "type": "string" + }, + "wellknown_endpoint": { + "type": "string" + }, + "redirect_uri": { + "type": "string" + }, + "authorization_audience": { + "type": "string" + }, + "token_endpoint": { + "type": "string" + }, + "proxy_token_endpoint": { + "type": "string" + }, + "client_alias": { + "type": "string" + }, + "qr_code_type": { + "type": "string", + "enum": [ + "OnlineSharing", + "EmbeddedVC", + "None" + ] + }, + "enabled": { + "type": "string" + }, + "credential_issuer": { + "type": "string" + }, + "credential_issuer_host": { + "type": "string" } - ], - "client_id": "string", - "redirect_uri": "string", - "scopes_supported": [ - "string" - ], - "authorization_endpoint": "string", - "token_endpoint": "string", - "proxy_token_endpoint": "string", - "credential_endpoint": "string", - "credential_type": [ - "string" - ], - "credential_audience": "string", - "client_alias": "string", - "additional_headers": { - "additionalProp1": "string", - "additionalProp2": "string", - "additionalProp3": "string" - }, - "wellknown_endpoint": "string", - "credential_issuer": "string" + } } - ] + } } }, "x-examples": { @@ -1470,7 +1494,7 @@ "response": { "issuers": [ { - "issuer_id": "MOSIPInsurance", + "credential_issuer": "MOSIPInsurance", "protocol": "OpenId4VCI", "display": [ { @@ -1485,11 +1509,10 @@ } ], "client_id": "3yz7-j3xRzU3SODdoNgSGvO_cD8UijH3AIWRDAg1x-M", - ".well-known": "http://localhost:8088/.well-known/openid-credential-issuer", - "credential_issuer": "http://localhost:8088" + "wellknown_endpoint": "http://localhost:8088/.well-known/openid-credential-issuer" }, { - "issuer_id": "MOSIPNationalID", + "credential_issuer": "MOSIPNationalID", "protocol": "OpenId4VCI", "display": [ { @@ -1504,13 +1527,12 @@ } ], "client_id": "3yz7-j3xRzU3SODdoNgSGvO_cD8UijH3AIWRDAg1x-M", - ".well-known": "http://localhost:8088/.well-known/openid-credential-issuer", - "credential_issuer": "http://localhost:8088" + "wellknown_endpoint": "http://localhost:8088/.well-known/openid-credential-issuer" } ] - } - }, - "errors": null + }, + "errors": null + } }, "examples": { "Success response": { @@ -1523,7 +1545,7 @@ "response": { "issuers": [ { - "issuer_id": "MOSIPInsurance", + "credential_issuer": "MOSIPInsurance", "protocol": "OpenId4VCI", "display": [ { @@ -1538,11 +1560,10 @@ } ], "client_id": "3yz7-j3xRzU3SODdoNgSGvO_cD8UijH3AIWRDAg1x-M", - ".well-known": "http://localhost:8088/.well-known/openid-credential-issuer", - "credential_issuer": "http://localhost:8088" + ".well-known": "http://localhost:8088/.well-known/openid-credential-issuer" }, { - "issuer_id": "MOSIPNationalID", + "credential_issuer": "MOSIPNationalID", "protocol": "OpenId4VCI", "display": [ { @@ -1557,13 +1578,11 @@ } ], "client_id": "3yz7-j3xRzU3SODdoNgSGvO_cD8UijH3AIWRDAg1x-M", - ".well-known": "http://localhost:8088/.well-known/openid-credential-issuer", - "credential_issuer": "http://localhost:8088" + ".well-known": "http://localhost:8088/.well-known/openid-credential-issuer" } ] } - }, - "errors": null + } }, "Failure response": { "value": { @@ -1604,7 +1623,7 @@ "tags": [ "Trusted Issuers" ], - "description": "This API provides the complete configuration details for the specific issuers passed in the path variable.", + "description": "This API provides the complete configuration details for the specific issuers passed in the path variable", "responses": { "200": { "description": "OK", @@ -1613,54 +1632,104 @@ "schema": { "type": "object", "properties": { - "issuers": [ - { - "credential_issuer": "string", - "protocol": "string", - "display": [ - { - "name": "string", - "logo": { - "url": "string", - "alt_text": "string" - }, - "title": "string", - "description": "string", - "language": "string" + "response": { + "type": "object", + "properties": { + "issuer_id": { + "type": "string" + }, + "protocol": { + "type": "string" + }, + "display": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "logo": { + "type": "object", + "properties": { + "url": { + "type": "string" + }, + "alt_text": { + "type": "string" + } + } + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "language": { + "type": "string" + } + } } - ], - "client_id": "string", - "redirect_uri": "string", - "scopes_supported": [ - "string" - ], - "authorization_endpoint": "string", - "authorization_audience": "string", - "token_endpoint": "string", - "proxy_token_endpoint": "string", - "credential_endpoint": "string", - "credential_type": [ - "string" - ], - "credential_audience": "string", - "client_alias": "string", - "additional_headers": { - "additionalProp1": "string", - "additionalProp2": "string", - "additionalProp3": "string" }, - "wellknown_endpoint": "string" + "client_id": { + "type": "string" + }, + "wellknown_endpoint": { + "type": "string" + }, + "redirect_uri": { + "type": "string" + }, + "authorization_audience": { + "type": "string" + }, + "token_endpoint": { + "type": "string" + }, + "proxy_token_endpoint": { + "type": "string" + }, + "client_alias": { + "type": "string" + }, + "qr_code_type": { + "type": "string", + "enum": [ + "OnlineSharing", + "EmbeddedVC", + "None" + ] + }, + "enabled": { + "type": "boolean" + }, + "credential_issuer": { + "type": "string" + }, + "credential_issuer_host": { + "type": "string" + } + } + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + } } - ] + } } }, "x-examples": { "Example 1": { - "id": "mosip.mimoto.issuers", - "version": "v1", - "str": null, - "responsetime": "2024-04-25T05:56:55.890Z", - "metadata": null, "response": { "issuer_id": "ESignet", "protocol": "OpenId4VCI", @@ -1694,36 +1763,6 @@ "title": "MOSIP क्रेडेंशियल डाउनलोड करेंं", "description": "यूआईएन या वीआईडी प्रदान करके क्रेडेंशियल डाउनलोड करें", "language": "hi" - }, - { - "name": "e-Signet", - "logo": { - "url": "https://api.collab.mosip.net/inji/mosip-logo.png", - "alt_text": "mosip ಲೋಗೋ" - }, - "title": "MOSIP ರುಜುವಾತುಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿ", - "description": "UIN ಅಥವಾ VID ಒದಗಿಸುವ ಮೂಲಕ ರುಜುವಾತುಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿ", - "language": "kn" - }, - { - "name": "e-Signet", - "logo": { - "url": "https://api.collab.mosip.net/inji/mosip-logo.png", - "alt_text": "mosip லோகோ" - }, - "title": "MOSIP சான்றுகளைப் பதிவிறக்கவும்", - "description": "UIN அல்லது VIDஐ வழங்குவதன் மூலம் நற்சான்றிதழ்களைப் பதிவிறக்கவும்", - "language": "ta" - }, - { - "name": "e-Signet", - "logo": { - "url": "https://api.collab.mosip.net/inji/mosip-logo.png", - "alt_text": "logo ng mosip" - }, - "title": "I-download ang Mga Kredensyal ng MOSIP", - "description": "Mag-download ng mga kredensyal sa pamamagitan ng pagbibigay ng UIN o VID", - "language": "fil" } ], "client_id": "*****", @@ -1745,8 +1784,7 @@ "additional_headers": { "Accept": "application/json" }, - ".well-known": "https://esignet.collab.mosip.net/.well-known/openid-credential-issuer", - "credential_issuer": "https://esignet.collab.mosip.net" + "wellknown_endpoint": "https://esignet.collab.mosip.net/.well-known/openid-credential-issuer" }, "errors": [] }, @@ -1761,7 +1799,7 @@ "responsetime": "2024-04-25T05:56:55.890Z", "metadata": null, "response": { - "issuer_id": "ESignet", + "issuer_id": "mosip.mimoto.issuers", "protocol": "OpenId4VCI", "display": [ { @@ -1827,10 +1865,6 @@ ], "client_id": "DEqVWfdKe9cQWikLdjak3vlDF0Pq7jtnwTcGdEXoT1I", "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", - "scopes_supported": [ - "mosip_identity_vc_ldp" - ], - "authorization_endpoint": "https://esignet.collab.mosip.net/authorize", "authorization_audience": "https://esignet.collab.mosip.net/v1/esignet/oauth/v2/token", "token_endpoint": "https://api.collab.mosip.net/v1/mimoto/get-token/ESignet", "proxy_token_endpoint": "https://esignet.collab.mosip.net/v1/esignet/oauth/v2/token", @@ -1844,12 +1878,10 @@ "additional_headers": { "Accept": "application/json" }, - ".well-known": "https://esignet.collab.mosip.net/.well-known/openid-credential-issuer", - "credential_issuer": "https://esignet.collab.mosip.net" + "wellknown_endpoint": "https://esignet.collab.mosip.net/.well-known/openid-credential-issuer" }, "errors": [] - }, - "errors": null + } }, "Failure response": { "value": { @@ -1890,8 +1922,7 @@ "tags": [ "Trusted Issuers" ], - "deprecated": true, - "description": "This API fetches and allows searching for Credential Types offered by the issuer, all sourced from the issuer's well-known configuration. Since version 0.16.0, this endpoint is deprecated and will be removed in a future release. Use issuers new endpoint issuers/{issuer-id}/configuration instead.", + "description": "This API fetches and allows searching for Credential Types offered by the issuer, all sourced from the issuer's well-known configuration.", "responses": { "200": { "description": "OK", @@ -1899,8 +1930,131 @@ "application/json": { "schema": { "type": "object", - "errors": { - "type": "null" + "properties": { + "credential_issuer": { + "type": "string" + }, + "authorization_servers": { + "type": "array", + "items": { + "type": "string" + } + }, + "credential_endpoint": { + "type": "string" + }, + "credential_configurations_supported": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "format": { + "type": "string" + }, + "scope": { + "type": "string" + }, + "doctype": { + "type": "string" + }, + "proof_types_supported": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "proof_signing_alg_values_supported": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "claims": { + "type": "object" + }, + "credential_definition": { + "type": "object", + "properties": { + "type": { + "type": "array", + "items": { + "type": "string" + } + }, + "credentialSubject": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "display": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "locale": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "display": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "locale": { + "type": "string" + }, + "logo": { + "type": "object", + "properties": { + "url": { + "type": "string" + }, + "alt_text": { + "type": "string" + } + } + }, + "background_image": { + "type": "object", + "properties": { + "uri": { + "type": "string" + } + } + }, + "background_color": { + "type": "string" + }, + "text_color": { + "type": "string" + } + } + } + }, + "order": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } } }, "examples": { From e4ae456530c9df1ed894665663572f8e803c8f88 Mon Sep 17 00:00:00 2001 From: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> Date: Wed, 5 Mar 2025 11:05:32 +0530 Subject: [PATCH 418/860] MOSIP-40466 - Modified the rest call loop only for creating policy in sunbird registry (#634) * MOSIP-36455 - Merge release 0.14.x branch with develop Signed-off-by: Mohanachandran S * MOSIP-36455 - Merge release 0.14.x branch with develop Signed-off-by: Mohanachandran S * INJIWEB-967 - Updated Automation Tests for Sunbird and eSignet Issues Signed-off-by: Mohanachandran S * MOSIP-38392 - updated the apitest commons version Signed-off-by: Mohanachandran S * MOSIP-38392 - Updated the issuer name for sunbird Signed-off-by: Mohanachandran S * pulled latest changes Signed-off-by: Mohanachandran S * Pulled latest changes Signed-off-by: Mohanachandran S * Pulled latest changes Signed-off-by: Mohanachandran S * updated the sunbird baseurl property Signed-off-by: Mohanachandran S * updated the sunbird baseurl property Signed-off-by: Mohanachandran S * updated the sunbird baseurl property Signed-off-by: Mohanachandran S * updated the sunbird baseurl property Signed-off-by: Mohanachandran S * INJIMOB-2680 - added random data logic for sunbird policy data Signed-off-by: Mohanachandran S * MOSIP-39931 - Updated for fetching the esignet url from actuator Signed-off-by: Mohanachandran S * updated the property Signed-off-by: Mohanachandran S * INJIWEB-1428 - Removed wellKnownProxyMockMDL and added the configuration endpoint Signed-off-by: Mohanachandran S * fixed the esignetSunbirdBaseUrl used in authentication Signed-off-by: Mohanachandran S * Added output validation for issuer configuration Signed-off-by: Mohanachandran S * MOSIP-40466 - Modified the rest call loop only for creating policy in sunbird registry Signed-off-by: Mohanachandran S --------- Signed-off-by: Mohanachandran S --- .../apirig/mimoto/testscripts/SimplePostForAutoGenId.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java index cd308fde7..cd2420505 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java @@ -159,8 +159,8 @@ public void test(TestCaseDTO testCaseDTO) response = postRequestWithCookieAuthHeaderAndXsrfTokenForAutoGenId( tempUrl + testCaseDTO.getEndPoint(), inputJson, COOKIENAME, testCaseDTO.getTestCaseName(), idKeyName); - } else { - //Adding the while loop for try creating sunbird policy in registry for 3 times if gets failed + } else if (testCaseName.contains("SunBirdR_CreatePolicy_")) { + // Adding the while loop for try creating sunbird policy in registry for 3 times if gets failed int currLoopCount = 0; do { response = postWithBodyAndBearerTokenForAutoGeneratedId(tempUrl + testCaseDTO.getEndPoint(), @@ -171,6 +171,9 @@ public void test(TestCaseDTO testCaseDTO) } currLoopCount++; } while (currLoopCount < 10); + } else { + response = postWithBodyAndBearerTokenForAutoGeneratedId(tempUrl + testCaseDTO.getEndPoint(), + inputJson, COOKIENAME, testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), idKeyName); } } else { response = postWithBodyAndCookieForAutoGeneratedId(ApplnURI + testCaseDTO.getEndPoint(), inputJson, From f95a9d869b13f880a6e3897c80357e55aaa444ba Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Wed, 5 Mar 2025 11:25:39 +0530 Subject: [PATCH 419/860] [INJIWEB-1436] rename caffiene cache properties names in mimoto default properties Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- docker-compose/config/mimoto-default.properties | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docker-compose/config/mimoto-default.properties b/docker-compose/config/mimoto-default.properties index eef62aa1e..ed6f73cf4 100644 --- a/docker-compose/config/mimoto-default.properties +++ b/docker-compose/config/mimoto-default.properties @@ -290,10 +290,10 @@ mosip.data.share.create.retry.count=3 #Caffeine cache related configurations # Cache expiry time in minutes for the issuer's well-known endpoint response. -cache.credential.issuer.wellknown.response.expiry-time-in-min = 60 +cache.credential-issuer.wellknown.expiry-time-in-min = 60 # Cache expiry time in minutes for issuers configurations read from a config file. -cache.issuers.config.expiry-time-in-min = 60 +cache.issuers-config.expiry-time-in-min = 60 # Cache expiry time in minutes for the authentication server's well-known endpoint response. -cache.credential.issuer.authserver.wellknown.response.expiry-time-in-min = 60 +cache.credential-issuer.authserver-wellknown.expiry-time-in-min = 60 # Default cache expiry time in minutes for others cache types cache.default.expiry-time-in-min = 60 \ No newline at end of file From ce9d253be2488b1ae3fd5624fc00e083163c6d89 Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Wed, 5 Mar 2025 15:38:46 +0530 Subject: [PATCH 420/860] MOSIP-39047 (#637) Signed-off-by: Nandhukumar --- api-test/pom.xml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/api-test/pom.xml b/api-test/pom.xml index cf6432d32..cbc8010e4 100644 --- a/api-test/pom.xml +++ b/api-test/pom.xml @@ -58,11 +58,6 @@ apitest-commons 1.3.2-SNAPSHOT - - com.github.javafaker - javafaker - 1.0.2 - From 4260652cc36e362da669088268ef2439658af1c7 Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Fri, 7 Mar 2025 10:53:13 +0530 Subject: [PATCH 421/860] MOSIP-39047 - Commons cleanup (#638) * MOSIP-39047 Signed-off-by: Nandhukumar * MOSIP-39047 Signed-off-by: Nandhukumar * MOSIP-39047 Signed-off-by: Nandhukumar --------- Signed-off-by: Nandhukumar --- .../mimoto/testrunner/MosipTestRunner.java | 11 ----------- .../mimoto/testscripts/DeleteWithParam.java | 2 -- .../apirig/mimoto/testscripts/GetWithParam.java | 10 ++++------ .../PostWithAutogenIdWithOtpGenerate.java | 8 -------- .../testrig/apirig/mimoto/utils/MimotoUtil.java | 2 -- .../resources/config/application.properties | 17 ----------------- .../resources/mimoto/autoGeneratedId.properties | 1 - 7 files changed, 4 insertions(+), 47 deletions(-) delete mode 100644 api-test/src/main/resources/mimoto/autoGeneratedId.properties diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java index a26425499..2c0d6e495 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java @@ -84,14 +84,6 @@ public static void main(String[] arg) { GlobalMethods.setModuleNameAndReCompilePattern(MimotoConfigManager.getproperty("moduleNamePattern")); setLogLevels(); - // For now we are not doing health check for qa-115. -// if (BaseTestCase.isTargetEnvLTS()) { -// HealthChecker healthcheck = new HealthChecker(); -// healthcheck.setCurrentRunningModule(BaseTestCase.currentModule); -// Thread trigger = new Thread(healthcheck); -// trigger.start(); -// } - HealthChecker healthcheck = new HealthChecker(); healthcheck.setCurrentRunningModule(BaseTestCase.currentModule); Thread trigger = new Thread(healthcheck); @@ -118,9 +110,6 @@ public static void main(String[] arg) { OTPListener.bTerminate = true; -// if (BaseTestCase.isTargetEnvLTS()) -// HealthChecker.bTerminate = true; - HealthChecker.bTerminate = true; System.exit(0); diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/DeleteWithParam.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/DeleteWithParam.java index cdea225dc..50773eaad 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/DeleteWithParam.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/DeleteWithParam.java @@ -126,8 +126,6 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad if (MimotoConfigManager.getSunbirdBaseURL() != null && !MimotoConfigManager.getSunbirdBaseURL().isBlank()) tempUrl = MimotoConfigManager.getSunbirdBaseURL(); - //Once sunbird registry is pointing to specific env, remove the above line and uncomment below line - //tempUrl = ApplnURI.replace(GlobalConstants.API_INTERNAL, MimotoConfigManager.getSunBirdBaseURL()); testCaseDTO.setEndPoint(testCaseDTO.getEndPoint().replace("$SUNBIRDBASEURL$", "")); } diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/GetWithParam.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/GetWithParam.java index 4132aebf4..0f5b876f4 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/GetWithParam.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/GetWithParam.java @@ -151,13 +151,11 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad if (MimotoConfigManager.isInServiceNotDeployedList("sunbirdrc")) throw new SkipException(GlobalConstants.SERVICE_NOT_DEPLOYED_MESSAGE); - if (MimotoConfigManager.getSunbirdBaseURL() != null && !MimotoConfigManager.getSunbirdBaseURL().isBlank()) + if (MimotoConfigManager.getSunbirdBaseURL() != null + && !MimotoConfigManager.getSunbirdBaseURL().isBlank()) tempUrl = MimotoConfigManager.getSunbirdBaseURL(); - //Once sunbird registry is pointing to specific env, remove the above line and uncomment below line - // tempUrl = ApplnURI.replace(GlobalConstants.API_INTERNAL, - // MimotoConfigManager.getSunBirdBaseURL()); - testCaseDTO.setEndPoint(testCaseDTO.getEndPoint().replace("$SUNBIRDBASEURL$", "")); - } + testCaseDTO.setEndPoint(testCaseDTO.getEndPoint().replace("$SUNBIRDBASEURL$", "")); + } response = getWithPathParamAndCookie(tempUrl + testCaseDTO.getEndPoint(), inputJson, auditLogCheck, COOKIENAME, testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), sendEsignetToken); diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java index a7ab03d12..d6840b06c 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java @@ -138,8 +138,6 @@ public void test(TestCaseDTO testCaseDTO) + " as UIN not available in database"); try { Thread.sleep(Long.parseLong(properties.getProperty("uinGenDelayTime"))); -// SlackChannelIntegration.sendMessageToSlack("UIN not available in database in :" + ApplnURI + "Env") ; - } catch (NumberFormatException | InterruptedException e) { logger.error(e.getMessage()); Thread.currentThread().interrupt(); @@ -169,7 +167,6 @@ public void test(TestCaseDTO testCaseDTO) if (!OutputValidationUtil.publishOutputResult(ouputValidOtp)) { if (otpResponse.asString().contains("IDA-OTA-001")) { -// SlackChannelIntegration.sendMessageToSlack("Exceeded number of OTP requests in a given time, :" + ApplnURI + "Env") ; throw new AdminTestException( "Exceeded number of OTP requests in a given time, Increase otp.request.flooding.max-count"); } @@ -190,8 +187,6 @@ public void test(TestCaseDTO testCaseDTO) throw new SkipException("esignet is not deployed hence skipping the testcase"); } String tempUrl = MimotoConfigManager.getEsignetBaseUrl(); -// String inputJson = getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()); -// inputJson = inputJsonKeyWordHandeler(inputJson, testCaseName); inputJson = MimotoUtil.getOTPFromSMTP(inputJson, testCaseDTO); response = postRequestWithCookieAuthHeaderAndXsrfTokenForAutoGenId(tempUrl + testCaseDTO.getEndPoint(), inputJson, COOKIENAME, testCaseDTO.getTestCaseName(), idKeyName); @@ -236,9 +231,6 @@ public void waittime() { && MimotoUtil.isOTPEnabled().equals("true")) { try { long delayTime = Long.parseLong(properties.getProperty("Delaytime")); -// if (!BaseTestCase.isTargetEnvLTS()) -// delayTime = Long.parseLong(properties.getProperty("uinGenDelayTime")) -// * Long.parseLong(properties.getProperty("uinGenMaxLoopCount")); logger.info("waiting for " + delayTime + " mili secs after VID Generation In RESIDENT SERVICES"); Thread.sleep(delayTime); } catch (Exception e) { diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java index a4ec2fcbe..fdee04a30 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java @@ -154,8 +154,6 @@ public static String getOTPFromSMTP(String inputJson, TestCaseDTO testCaseDTO) { public static String inputstringKeyWordHandeler(String jsonString, String testCaseName) { if (jsonString.contains("$ID:")) { -// String autoGenIdFileName = mimotoAutoGeneratedIdPropFileName; -// jsonString = replaceIdWithAutogeneratedId(jsonString, "$ID:", autoGenIdFileName); jsonString = replaceIdWithAutogeneratedId(jsonString, "$ID:"); } diff --git a/api-test/src/main/resources/config/application.properties b/api-test/src/main/resources/config/application.properties index 0904c5fbb..e8c7a8616 100644 --- a/api-test/src/main/resources/config/application.properties +++ b/api-test/src/main/resources/config/application.properties @@ -1,6 +1,4 @@ ## End point(s) relative URLs -#internalSignEndpoint=/idauthentication/v1/internal/jwtSign -#signJsonPath=config/sign.json encryptionPath=v1/identity/encrypt?isInternal=false internalEncryptionPath=v1/identity/encrypt?isInternal=true encodePath=v1/identity/encode @@ -46,21 +44,6 @@ appointmentavailabilityurl=/preregistration/v1/appointment/availability/ validateSignatureUrl=v1/identity/validateSign vciContextURL=https://www.w3.org/2018/credentials/v1 -## Auto generated properties while running the test rig(s) -#adminAutoGeneratedIdPropFileName=/admin/autoGeneratedId.properties -#masterDataAutoGeneratedIdPropFileName=/masterdata/autoGeneratedId.properties -#syncDataAutoGeneratedIdPropFileName=/syncdata/autoGeneratedId.properties -#preregAutoGeneratedIdPropFileName=/preReg/autoGeneratedId.properties -#partnerAutoGeneratedIdPropFileName=/partner/autoGeneratedId.properties -#idrepoAutoGeneratedIdPropFileName=/idRepository/autoGeneratedId.properties -#residentAutoGeneratedIdPropFileName=/resident/autoGeneratedId.properties -#esignetAutoGeneratedIdPropFileName=/esignet/autoGeneratedId.properties -#mimotoAutoGeneratedIdPropFileName=/mimoto/autoGeneratedId.properties -#authAutoGeneratedIdPropFileName=/ida/autoGeneratedId.properties -#prerequisiteAutoGeneratedIdPropFileName=/prerequisite/autoGeneratedId.properties -#regProcAutoGeneratedIdPropFileName=/regProc/autoGeneratedId.properties -#mobileIdAutoGeneratedIdPropFileName=/mobileId/autoGeneratedId.properties - ## As below are non changble values, move these out from properties file appIdForCertificate=IDA partnerrefId=PARTNER diff --git a/api-test/src/main/resources/mimoto/autoGeneratedId.properties b/api-test/src/main/resources/mimoto/autoGeneratedId.properties deleted file mode 100644 index f7bbba8b4..000000000 --- a/api-test/src/main/resources/mimoto/autoGeneratedId.properties +++ /dev/null @@ -1 +0,0 @@ -DefinePolicyGroup_All_Valid_Smoke_sid=456789567 \ No newline at end of file From 48beba10716d714c3af4d850b049c20925684777 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 10 Mar 2025 13:07:47 +0530 Subject: [PATCH 422/860] injiweb-1370 fixing compile time issue Signed-off-by: Gurpreet41082 --- .../java/io/mosip/mimoto/util/Utilities.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/main/java/io/mosip/mimoto/util/Utilities.java b/src/main/java/io/mosip/mimoto/util/Utilities.java index f4dd6279d..4b36c2174 100644 --- a/src/main/java/io/mosip/mimoto/util/Utilities.java +++ b/src/main/java/io/mosip/mimoto/util/Utilities.java @@ -207,6 +207,7 @@ public String getCredentialSupportedTemplateString(String issuerId, String crede String specificCredentialPDFTemplate = getJson("", templateFileName); return !StringUtils.isEmpty(specificCredentialPDFTemplate)? specificCredentialPDFTemplate : getJson("", credentialTemplatePath); } + public static String[] handleExceptionWithErrorCode(Exception exception, String flowErrorCode) { String errorMessage = exception.getMessage(); String errorCode = flowErrorCode; @@ -218,6 +219,26 @@ public static String[] handleExceptionWithErrorCode(Exception exception, String } return new String[]{errorCode, errorMessage}; } + public static ResponseEntity> handleErrorResponse( + Exception exception, String flowErrorCode, HttpStatus status, MediaType contentType) { + String errorMessage = exception.getMessage(); + String errorCode = flowErrorCode; + + if (errorMessage.contains(DELIMITER)) { + String[] errorSections = errorMessage.split(DELIMITER); + errorCode = errorSections[0]; + errorMessage = errorSections[1]; + } + + ResponseWrapper responseWrapper = new ResponseWrapper<>(); + responseWrapper.setResponse(null); + responseWrapper.setErrors(Utilities.getErrors(errorCode, errorMessage)); + ResponseEntity.BodyBuilder responseEntity = ResponseEntity.status(status); + if (contentType != null) { + responseEntity.contentType(contentType); + } + return responseEntity.body(responseWrapper); + } public static List getErrors(String errorCode, String errorMessage) { ErrorDTO errorDTO = new ErrorDTO(errorCode, errorMessage); From 8fcfe134d8b7afb321ca456336cb5048c8b241e8 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Tue, 11 Mar 2025 11:11:41 +0530 Subject: [PATCH 423/860] Injiweb-1379 fixed the redis session issue Signed-off-by: Gurpreet41082 --- .../java/io/mosip/mimoto/config/Config.java | 57 +++++++++---------- .../mimoto/controller/SessionController.java | 8 +-- .../OAuth2AuthenticationSuccessHandler.java | 17 +++++- .../mimoto/service/UserMetadataService.java | 26 +++++---- .../resources/application-local.properties | 8 ++- 5 files changed, 63 insertions(+), 53 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/config/Config.java b/src/main/java/io/mosip/mimoto/config/Config.java index b112c4aba..f77a4b255 100644 --- a/src/main/java/io/mosip/mimoto/config/Config.java +++ b/src/main/java/io/mosip/mimoto/config/Config.java @@ -88,36 +88,33 @@ public SecurityFilterChain filterChain(HttpSecurity http, SessionRepository sess private void setupOauth2Config(HttpSecurity http, SessionRepository sessionRepository) throws Exception { http - .oauth2Login((oauth2Login) -> oauth2Login.loginPage(injiWebUrl + "/login") - .authorizationEndpoint(authorization -> authorization.baseUri("/oauth2/authorize") - ) - .redirectionEndpoint(redirect -> redirect.baseUri("/oauth2/callback/*")) - .successHandler(oAuth2AuthenticationSuccessHandler) - .failureHandler(oAuth2AuthenticationFailureHandler) - ) - .logout(logout -> logout - .logoutUrl("/logout") // Ensure this matches the frontend request - .clearAuthentication(true) // Clear authentication - .invalidateHttpSession(true) // Invalidate session - .deleteCookies("JSESSIONID") // Optionally, delete cookies - .logoutSuccessHandler((request, response, authentication) -> { - log.info("inside logout success handler::"); - HttpSession session = request.getSession(false); - log.info("session::" + session); - if (session != null) { - sessionRepository.deleteById(session.getId()); // Remove session from Redis - session.invalidate(); // Invalidate the session - } - response.setStatus(HttpServletResponse.SC_FOUND); // 302 Redirect - response.setHeader("Location", "/login?logout"); // Redirect to login page - }) - ) - .authorizeHttpRequests(authz -> authz - // Define secured endpoints - .requestMatchers("/secure/**").authenticated() // Secure endpoints that require login - // Default authorization rule for all other requests - .anyRequest().permitAll() - ).sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)); + .oauth2Login((oauth2Login) -> oauth2Login.loginPage(injiWebUrl + "/login") + .authorizationEndpoint(authorization -> authorization.baseUri("/oauth2/authorize") + ) + .redirectionEndpoint(redirect -> redirect.baseUri("/oauth2/callback/*")) + .successHandler(oAuth2AuthenticationSuccessHandler) + .failureHandler(oAuth2AuthenticationFailureHandler) + ) + .logout(logout -> logout + .logoutUrl("/logout") + .logoutSuccessHandler((request, response, authentication) -> { + log.info("inside logout success handler::"); + HttpSession session = request.getSession(false); + log.info("session::" + session); + if (session != null) { + sessionRepository.deleteById(session.getId()); // Remove session from Redis + session.invalidate(); // Invalidate the session + } + response.setStatus(HttpServletResponse.SC_FOUND); // 302 Redirect + response.setHeader("Location", "/login?logout"); // Redirect to login page + }) + ) + .authorizeHttpRequests(authz -> authz + // Define secured endpoints + .requestMatchers("/secure/**").authenticated() // Secure endpoints that require login + // Default authorization rule for all other requests + .anyRequest().permitAll() + ).sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)); } // Define CORS configuration diff --git a/src/main/java/io/mosip/mimoto/controller/SessionController.java b/src/main/java/io/mosip/mimoto/controller/SessionController.java index e408c75cf..767a9d68e 100644 --- a/src/main/java/io/mosip/mimoto/controller/SessionController.java +++ b/src/main/java/io/mosip/mimoto/controller/SessionController.java @@ -5,18 +5,12 @@ import io.mosip.mimoto.util.Utilities; import jakarta.servlet.http.HttpSession; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import java.util.Enumeration; -import java.util.Map; - import static io.mosip.mimoto.exception.PlatformErrorMessages.LOGIN_SESSION_EXCEPTION; @RestController @@ -28,7 +22,7 @@ public ResponseEntity> getSessionStatus(HttpSession http try { log.info("Session: {}", httpSession); - if (httpSession == null) { + if (httpSession == null || httpSession.getAttribute("userId") == null) { throw new LoginSessionException("UNAUTHORIZED", "Session is expired, please log in again", HttpStatus.UNAUTHORIZED); } diff --git a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java index 64ef0d2ee..81cb19205 100644 --- a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java +++ b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java @@ -2,7 +2,9 @@ import io.mosip.mimoto.service.UserMetadataService; import jakarta.servlet.http.HttpSession; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.security.core.Authentication; import org.springframework.security.oauth2.client.OAuth2AuthorizedClient; import org.springframework.security.oauth2.client.OAuth2AuthorizedClientService; @@ -15,8 +17,11 @@ import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; +import java.util.Arrays; +import java.util.UUID; @Component +@Slf4j public class OAuth2AuthenticationSuccessHandler extends SimpleUrlAuthenticationSuccessHandler { @Autowired private UserMetadataService userMetadataService; @@ -24,11 +29,16 @@ public class OAuth2AuthenticationSuccessHandler extends SimpleUrlAuthenticationS @Autowired private OAuth2AuthorizedClientService authorizedClientService; + @Value("${mosip.inji.web.url}") + private String injiWebUrl; + @Override public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { OAuth2AuthenticationToken oauth2Token = (OAuth2AuthenticationToken) authentication; OAuth2User oAuth2User = oauth2Token.getPrincipal(); - HttpSession session = request.getSession(); + HttpSession session = request.getSession(false); + log.info("Request Cookies: {}", Arrays.toString(request.getCookies())); + log.info("Session ID after login: {}", session.getId()); // Storing clientRegistrationId in the Redis session to verify it against the one in user metadata during profile retrieval String clientRegistrationId = oauth2Token.getAuthorizedClientRegistrationId(); session.setAttribute("clientRegistrationId", clientRegistrationId); @@ -49,9 +59,10 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo session.setAttribute("refreshToken", refreshToken); // Call the service to update or insert the user metadata in the database - userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); + UUID userId = userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); + session.setAttribute("userId", userId); - response.sendRedirect("http://localhost:3004/login?status=success"); + response.sendRedirect(injiWebUrl +"/login?status=success"); } } diff --git a/src/main/java/io/mosip/mimoto/service/UserMetadataService.java b/src/main/java/io/mosip/mimoto/service/UserMetadataService.java index 3903bc849..cf800197a 100644 --- a/src/main/java/io/mosip/mimoto/service/UserMetadataService.java +++ b/src/main/java/io/mosip/mimoto/service/UserMetadataService.java @@ -10,6 +10,7 @@ import java.util.Optional; import java.util.function.Consumer; import java.util.function.Supplier; +import java.util.UUID; @Service public class UserMetadataService { @@ -20,9 +21,9 @@ public class UserMetadataService { @Autowired private EncryptionDecryptionUtil encryptionDecryptionUtil; - public void updateOrInsertUserMetadata(String providerSubjectId, String identityProvider, - String displayName, String profilePictureUrl, - String email) { + public UUID updateOrInsertUserMetadata(String providerSubjectId, String identityProvider, + String displayName, String profilePictureUrl, + String email) { // Compute current time once Timestamp now = new Timestamp(System.currentTimeMillis()); @@ -30,11 +31,12 @@ public void updateOrInsertUserMetadata(String providerSubjectId, String identity Optional existingUser = userMetadataRepository.findByProviderSubjectId(providerSubjectId); if (existingUser.isPresent()) { - // If user exists, update metadata + // If user exists, update metadata and return the userID updateUserMetadata(existingUser.get(), displayName, profilePictureUrl, email, now); + return existingUser.get().getId(); // Return the userID from the existing user } else { - // If user does not exist, create new record - createUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email, now); + // If user does not exist, create new record and return the userID + return createUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email, now); } } @@ -47,10 +49,10 @@ private void updateUserMetadata(UserMetadata userMetadata, String displayName, S isUpdated |= updateField(userMetadata::getProfilePictureUrl, userMetadata::setProfilePictureUrl, profilePictureUrl); isUpdated |= updateField(userMetadata::getEmail, userMetadata::setEmail, email); - // Save the updated record + // If any field was updated, save the updated record and set the updated timestamp if (isUpdated) { userMetadata.setUpdatedAt(now); - userMetadataRepository.save(userMetadata); + userMetadataRepository.save(userMetadata); // Save the updated record } } @@ -63,8 +65,8 @@ private boolean updateField(Supplier getter, Consumer setter, St return false; } - private void createUserMetadata(String providerSubjectId, String identityProvider, String displayName, - String profilePictureUrl, String email, Timestamp now) { + private UUID createUserMetadata(String providerSubjectId, String identityProvider, String displayName, + String profilePictureUrl, String email, Timestamp now) { UserMetadata userMetadata = new UserMetadata(); userMetadata.setProviderSubjectId(providerSubjectId); userMetadata.setIdentityProvider(identityProvider); @@ -74,6 +76,8 @@ private void createUserMetadata(String providerSubjectId, String identityProvide userMetadata.setCreatedAt(now); userMetadata.setUpdatedAt(now); - userMetadataRepository.save(userMetadata); // Insert new record + UserMetadata savedUserMetadata = userMetadataRepository.save(userMetadata); // Insert new record + return savedUserMetadata.getId(); // Return the userID of the newly created user } + } diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 9c7dd88a3..bec583b9a 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -246,7 +246,7 @@ mosip.oidc.p12.path=certs/ #OpenId4VP related Configuration START #Inji Web Config -mosip.inji.web.url=https://injiweb.dev2.mosip.net +mosip.inji.web.url=http://localhost:3004 mosip.inji.web.redirect.url=${mosip.inji.web.url}/authorize mosip.inji.qr.data.size.limit=2000 mosip.inji.qr.code.height=650 @@ -297,4 +297,8 @@ spring.jpa.show-sql=true spring.datasource.driver-class-name=org.postgresql.Driver #Redis configuration -spring.session.store-type=redis \ No newline at end of file +spring.session.store-type=redis +spring.redis.host=localhost +spring.redis.port=6379 +spring.redis.password= +spring.session.timeout=30m \ No newline at end of file From bb8ce20453f9839eb1af339ab49ea03a8c20a80f Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Tue, 11 Mar 2025 11:27:57 +0530 Subject: [PATCH 424/860] Injiweb-1379 removed the redirection from the backend Signed-off-by: Gurpreet41082 --- src/main/java/io/mosip/mimoto/config/Config.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/config/Config.java b/src/main/java/io/mosip/mimoto/config/Config.java index f77a4b255..b009cc69e 100644 --- a/src/main/java/io/mosip/mimoto/config/Config.java +++ b/src/main/java/io/mosip/mimoto/config/Config.java @@ -105,8 +105,6 @@ private void setupOauth2Config(HttpSecurity http, SessionRepository sessionRepos sessionRepository.deleteById(session.getId()); // Remove session from Redis session.invalidate(); // Invalidate the session } - response.setStatus(HttpServletResponse.SC_FOUND); // 302 Redirect - response.setHeader("Location", "/login?logout"); // Redirect to login page }) ) .authorizeHttpRequests(authz -> authz From 2abdc1df5622b25be170b1b81dbe25f35775cd8c Mon Sep 17 00:00:00 2001 From: Kamlesh Singh Bisht Date: Tue, 11 Mar 2025 12:44:59 +0530 Subject: [PATCH 425/860] [INJIWEB-1405]: Fixed Review Comments Signed-off-by: Kamlesh Singh Bisht --- docs/api-documentation-openapi.json | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index bcd77cbbb..02dcecd53 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -1494,7 +1494,9 @@ "response": { "issuers": [ { + "issuer_id": "MOSIPInsurance", "credential_issuer": "MOSIPInsurance", + "credential_issuer_host": "https://injicertify-insurance.qa-inji1.mosip.net", "protocol": "OpenId4VCI", "display": [ { @@ -1512,7 +1514,9 @@ "wellknown_endpoint": "http://localhost:8088/.well-known/openid-credential-issuer" }, { + "issuer_id": "MOSIPNationalID", "credential_issuer": "MOSIPNationalID", + "credential_issuer_host": "https://injicertify-mosipid.released.mosip.net", "protocol": "OpenId4VCI", "display": [ { @@ -1545,7 +1549,9 @@ "response": { "issuers": [ { + "issuer_id": "MOSIPInsurance", "credential_issuer": "MOSIPInsurance", + "credential_issuer_host": "https://injicertify-insurance.qa-inji1.mosip.net", "protocol": "OpenId4VCI", "display": [ { @@ -1563,7 +1569,9 @@ ".well-known": "http://localhost:8088/.well-known/openid-credential-issuer" }, { + "issuer_id": "MOSIPNationalID", "credential_issuer": "MOSIPNationalID", + "credential_issuer_host": "https://injicertify-mosipid.released.mosip.net", "protocol": "OpenId4VCI", "display": [ { @@ -1922,7 +1930,8 @@ "tags": [ "Trusted Issuers" ], - "description": "This API fetches and allows searching for Credential Types offered by the issuer, all sourced from the issuer's well-known configuration.", + "deprecated": true, + "description": "This API fetches and allows searching for Credential Types offered by the issuer, all sourced from the issuer's well-known configuration. Since version 0.16.0, this endpoint is deprecated and will be removed in a future release. Use issuers new endpoint issuers/{issuer-id}/configuration instead.", "responses": { "200": { "description": "OK", From 9ce0ba58eb46af370b99734ef50d982fad23cdd6 Mon Sep 17 00:00:00 2001 From: Kamlesh Singh Bisht Date: Tue, 11 Mar 2025 13:36:23 +0530 Subject: [PATCH 426/860] [INJIWEB-1405]: Added Collab Reference Signed-off-by: Kamlesh Singh Bisht --- docs/api-documentation-openapi.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index 02dcecd53..0d9793e78 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -1496,7 +1496,7 @@ { "issuer_id": "MOSIPInsurance", "credential_issuer": "MOSIPInsurance", - "credential_issuer_host": "https://injicertify-insurance.qa-inji1.mosip.net", + "credential_issuer_host": "https://injicertify-insurance.collab.mosip.net", "protocol": "OpenId4VCI", "display": [ { @@ -1551,7 +1551,7 @@ { "issuer_id": "MOSIPInsurance", "credential_issuer": "MOSIPInsurance", - "credential_issuer_host": "https://injicertify-insurance.qa-inji1.mosip.net", + "credential_issuer_host": "https://injicertify-insurance.collab.mosip.net", "protocol": "OpenId4VCI", "display": [ { From 4d131fcbefe87936925534cfbfc2247ab0e6fa67 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Wed, 12 Mar 2025 17:22:46 +0530 Subject: [PATCH 427/860] injiweb-1392 corrected and added db related files Signed-off-by: Gurpreet41082 --- db_scripts/db.sql | 17 ++++++++++++++ db_scripts/ddl.sql | 9 ++++++++ db_scripts/dml.sql | 23 +++++++++++++++++++ db_scripts/drop_db.sql | 7 ++++++ db_scripts/drop_role.sql | 6 +++++ db_scripts/grants.sql | 22 ++++++++++++++++++ .../inji_mimoto/ddl/mimoto-user_metadata.sql | 6 ++--- .../ddl/mimoto-verifiable_credentials.sql | 4 ++-- db_scripts/inji_mimoto/ddl/mimoto-wallet.sql | 12 +++++----- db_scripts/role_dbuser.sql | 9 ++++++++ 10 files changed, 104 insertions(+), 11 deletions(-) create mode 100644 db_scripts/db.sql create mode 100644 db_scripts/ddl.sql create mode 100644 db_scripts/dml.sql create mode 100644 db_scripts/drop_db.sql create mode 100644 db_scripts/drop_role.sql create mode 100644 db_scripts/grants.sql create mode 100644 db_scripts/role_dbuser.sql diff --git a/db_scripts/db.sql b/db_scripts/db.sql new file mode 100644 index 000000000..477b47a16 --- /dev/null +++ b/db_scripts/db.sql @@ -0,0 +1,17 @@ +CREATE DATABASE inji_mimoto + ENCODING = 'UTF8' + LC_COLLATE = 'en_US.UTF-8' + LC_CTYPE = 'en_US.UTF-8' + TABLESPACE = pg_default + OWNER = postgres + TEMPLATE = template0; + +COMMENT ON DATABASE mosip_idp IS 'mimoto related data is stored in this database'; + +\c inji_mimoto postgres + +DROP SCHEMA IF EXISTS mimoto CASCADE; +CREATE SCHEMA mimoto; +ALTER SCHEMA mimoto OWNER TO postgres; +ALTER DATABASE inji_mimoto SET search_path TO mimoto,pg_catalog,public; + diff --git a/db_scripts/ddl.sql b/db_scripts/ddl.sql new file mode 100644 index 000000000..cba20bd6a --- /dev/null +++ b/db_scripts/ddl.sql @@ -0,0 +1,9 @@ +\c inji_mimoto + +\ir ddl/mimoto-key_alias.sql +\ir ddl/mimoto-key_policy_def.sql +\ir ddl/mimoto-key_store.sql +\ir ddl/mimoto-ca_cert_store.sql +\ir ddl/mimoto-user_metadata.sql +\ir ddl/mimoto-wallet.sql +\ir ddl/mimoto-verifiable_credentials.sql diff --git a/db_scripts/dml.sql b/db_scripts/dml.sql new file mode 100644 index 000000000..77f39b405 --- /dev/null +++ b/db_scripts/dml.sql @@ -0,0 +1,23 @@ +-- This Source Code Form is subject to the terms of the Mozilla Public +-- License, v. 2.0. If a copy of the MPL was not distributed with this +-- file, You can obtain one at https://mozilla.org/MPL/2.0/. +-- ------------------------------------------------------------------------------------------------- + +\c inji_mimoto + +\COPY mimoto.key_policy_def (APP_ID,KEY_VALIDITY_DURATION,PRE_EXPIRE_DAYS,ACCESS_ALLOWED,IS_ACTIVE,CR_BY,CR_DTIMES) FROM './dml/mimoto-key_policy_def.csv' delimiter ',' HEADER csv; + + + + + + + + + + + + + + + diff --git a/db_scripts/drop_db.sql b/db_scripts/drop_db.sql new file mode 100644 index 000000000..73d434700 --- /dev/null +++ b/db_scripts/drop_db.sql @@ -0,0 +1,7 @@ +-- This Source Code Form is subject to the terms of the Mozilla Public +-- License, v. 2.0. If a copy of the MPL was not distributed with this +-- file, You can obtain one at https://mozilla.org/MPL/2.0/. +-- ------------------------------------------------------------------------------------------------- + +DROP DATABASE IF EXISTS inji_mimoto; + diff --git a/db_scripts/drop_role.sql b/db_scripts/drop_role.sql new file mode 100644 index 000000000..4b2e8776a --- /dev/null +++ b/db_scripts/drop_role.sql @@ -0,0 +1,6 @@ +-- This Source Code Form is subject to the terms of the Mozilla Public +-- License, v. 2.0. If a copy of the MPL was not distributed with this +-- file, You can obtain one at https://mozilla.org/MPL/2.0/. +-- ------------------------------------------------------------------------------------------------- + +drop role if exists mimotouser; diff --git a/db_scripts/grants.sql b/db_scripts/grants.sql new file mode 100644 index 000000000..b9d52fa56 --- /dev/null +++ b/db_scripts/grants.sql @@ -0,0 +1,22 @@ +-- This Source Code Form is subject to the terms of the Mozilla Public +-- License, v. 2.0. If a copy of the MPL was not distributed with this +-- file, You can obtain one at https://mozilla.org/MPL/2.0/. +-- ------------------------------------------------------------------------------------------------- + +\c inji_mimoto + +GRANT CONNECT + ON DATABASE inji_mimoto + TO mimotouser; + +GRANT USAGE + ON SCHEMA mimoto + TO mimotouser; + +GRANT SELECT,INSERT,UPDATE,DELETE,TRUNCATE,REFERENCES + ON ALL TABLES IN SCHEMA mimoto + TO mimotouser; + +ALTER DEFAULT PRIVILEGES IN SCHEMA mimoto + GRANT SELECT,INSERT,UPDATE,DELETE,REFERENCES ON TABLES TO mimotouser; + diff --git a/db_scripts/inji_mimoto/ddl/mimoto-user_metadata.sql b/db_scripts/inji_mimoto/ddl/mimoto-user_metadata.sql index 9988fe18e..0a08a4c27 100644 --- a/db_scripts/inji_mimoto/ddl/mimoto-user_metadata.sql +++ b/db_scripts/inji_mimoto/ddl/mimoto-user_metadata.sql @@ -26,8 +26,8 @@ COMMENT ON COLUMN user_metadata.id IS 'Primary Key: Unique identifier for the us COMMENT ON COLUMN user_metadata.provider_subject_id IS 'Provider Subject ID: Unique identifier for the subject assigned by the identity provider'; COMMENT ON COLUMN user_metadata.identity_provider IS 'Identity Provider: The identity provider associated with the user'; COMMENT ON COLUMN user_metadata.display_name IS 'Display Name: The name shown to other users'; -COMMENT ON COLUMN user_metadata.profile_picture_url IS 'Profile Picture URL: The URL link to the user\'s profile picture'; -COMMENT ON COLUMN user_metadata.phone_number IS 'Phone Number: User\'s phone number, if available'; -COMMENT ON COLUMN user_metadata.email IS 'Email: User\'s email address'; +COMMENT ON COLUMN user_metadata.profile_picture_url IS 'Profile Picture URL: The URL link to the user''s profile picture'; +COMMENT ON COLUMN user_metadata.phone_number IS 'Phone Number: User''s phone number, if available'; +COMMENT ON COLUMN user_metadata.email IS 'Email: User''s email address'; COMMENT ON COLUMN user_metadata.created_at IS 'Created At: The date and time when the metadata was created'; COMMENT ON COLUMN user_metadata.updated_at IS 'Updated At: The date and time when the metadata was last updated'; diff --git a/db_scripts/inji_mimoto/ddl/mimoto-verifiable_credentials.sql b/db_scripts/inji_mimoto/ddl/mimoto-verifiable_credentials.sql index 26831f535..bc756c45b 100644 --- a/db_scripts/inji_mimoto/ddl/mimoto-verifiable_credentials.sql +++ b/db_scripts/inji_mimoto/ddl/mimoto-verifiable_credentials.sql @@ -22,8 +22,8 @@ CREATE TABLE IF NOT EXISTS verifiable_credentials ( COMMENT ON TABLE verifiable_credentials IS 'Verifiable Credentials: Contains user credentials, encrypted using wallet key'; COMMENT ON COLUMN verifiable_credentials.id IS 'Primary Key: Unique identifier for the verifiable credential record'; -COMMENT ON COLUMN verifiable_credentials.wallet_id IS 'Wallet ID: Foreign key referring to the wallet table, linked to the user\'s wallet'; -COMMENT ON COLUMN verifiable_credentials.credential IS 'Credential: Encrypted credential using the wallet\'s key'; +COMMENT ON COLUMN verifiable_credentials.wallet_id IS 'Wallet ID: Foreign key referring to the wallet table, linked to the user''s wallet'; +COMMENT ON COLUMN verifiable_credentials.credential IS 'Credential: Encrypted credential using the wallet''s key'; COMMENT ON COLUMN verifiable_credentials.credential_format IS 'Credential Format: Format of the credential (e.g., JSON, JWT)'; COMMENT ON COLUMN verifiable_credentials.credential_metadata IS 'Credential Metadata: Additional information about the credential (e.g., issuer, claims)'; COMMENT ON COLUMN verifiable_credentials.created_at IS 'Created At: The date and time when the credential was created'; diff --git a/db_scripts/inji_mimoto/ddl/mimoto-wallet.sql b/db_scripts/inji_mimoto/ddl/mimoto-wallet.sql index 5b412b304..6fcce8dc8 100644 --- a/db_scripts/inji_mimoto/ddl/mimoto-wallet.sql +++ b/db_scripts/inji_mimoto/ddl/mimoto-wallet.sql @@ -10,9 +10,9 @@ CREATE TABLE IF NOT EXISTS wallet ( id UUID PRIMARY KEY, -- Primary key for the table - user_id VARCHAR(255) NOT NULL, -- User ID, foreign key referring to the user_metadata table - wallet_key TEXT NOT NULL, -- Encrypted wallet key using AES256-GCM with user’s PIN - public_key TEXT NOT NULL, -- Public key for the wallet + user_id UUID NOT NULL, -- Foreign key referencing user_metadata (long-based) + wallet_key TEXT NOT NULL, -- Encrypted wallet key + public_key TEXT NOT NULL, -- Public key for wallet secret_key TEXT NOT NULL, -- Secret key, encrypted with wallet_key key_metadata JSON NOT NULL, -- Metadata about the public and private keys wallet_metadata JSON NOT NULL, -- Metadata about the wallet, including encryption info @@ -22,14 +22,14 @@ CREATE TABLE IF NOT EXISTS wallet ( CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES user_metadata (id) ON DELETE CASCADE ); -COMMENT ON TABLE wallet IS 'Wallet: Contains information about the user\'s wallet, encrypted keys, and metadata'; +COMMENT ON TABLE wallet IS 'Wallet: Contains information about the user''s wallet, encrypted keys, and metadata'; COMMENT ON COLUMN wallet.id IS 'Primary Key: Unique identifier for the wallet'; COMMENT ON COLUMN wallet.user_id IS 'User ID: Foreign key referring to the user_metadata table'; -COMMENT ON COLUMN wallet.wallet_key IS 'Wallet Key: Encrypted wallet key using AES256-GCM with the user\'s PIN'; +COMMENT ON COLUMN wallet.wallet_key IS 'Wallet Key: Encrypted wallet key'; COMMENT ON COLUMN wallet.public_key IS 'Public Key: The public key of the wallet'; COMMENT ON COLUMN wallet.secret_key IS 'Secret Key: Encrypted using the wallet_key'; COMMENT ON COLUMN wallet.key_metadata IS 'Key Metadata: Contains additional information about the public and private keys'; COMMENT ON COLUMN wallet.wallet_metadata IS 'Wallet Metadata: Contains information about the wallet, including encryption and PIN usage'; COMMENT ON COLUMN wallet.created_at IS 'Created At: The date and time when the wallet was created'; -COMMENT ON COLUMN wallet.updated_at IS 'Updated At: The date and time when the wallet was last updated'; +COMMENT ON COLUMN wallet.updated_at IS 'Updated At: The date and time when the wallet was last updated'; \ No newline at end of file diff --git a/db_scripts/role_dbuser.sql b/db_scripts/role_dbuser.sql new file mode 100644 index 000000000..6093042c5 --- /dev/null +++ b/db_scripts/role_dbuser.sql @@ -0,0 +1,9 @@ +-- This Source Code Form is subject to the terms of the Mozilla Public +-- License, v. 2.0. If a copy of the MPL was not distributed with this +-- file, You can obtain one at https://mozilla.org/MPL/2.0/. +-- ------------------------------------------------------------------------------------------------- + +CREATE ROLE mimotouser WITH + INHERIT + LOGIN + PASSWORD :dbuserpwd; From 1ace830f978ae042b1a60bb3f30e07ef65cfdf35 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Sat, 15 Mar 2025 19:04:49 +0530 Subject: [PATCH 428/860] [INJIWEB-1370] update updatedAt field value if user is logged into the system with the same account Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../mimoto/service/UserMetadataService.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/service/UserMetadataService.java b/src/main/java/io/mosip/mimoto/service/UserMetadataService.java index cf800197a..63901a34a 100644 --- a/src/main/java/io/mosip/mimoto/service/UserMetadataService.java +++ b/src/main/java/io/mosip/mimoto/service/UserMetadataService.java @@ -45,9 +45,10 @@ private void updateUserMetadata(UserMetadata userMetadata, String displayName, S boolean isUpdated = false; // Check and update fields if needed - isUpdated |= updateField(userMetadata::getDisplayName, userMetadata::setDisplayName, displayName); - isUpdated |= updateField(userMetadata::getProfilePictureUrl, userMetadata::setProfilePictureUrl, profilePictureUrl); - isUpdated |= updateField(userMetadata::getEmail, userMetadata::setEmail, email); + isUpdated |= updateEncryptedField(userMetadata::getDisplayName, userMetadata::setDisplayName, displayName); + isUpdated |= updateEncryptedField(userMetadata::getProfilePictureUrl, userMetadata::setProfilePictureUrl, profilePictureUrl); + isUpdated |= updateEncryptedField(userMetadata::getEmail, userMetadata::setEmail, email); + isUpdated |= updateField(userMetadata::getUpdatedAt, userMetadata::setUpdatedAt, now); // If any field was updated, save the updated record and set the updated timestamp if (isUpdated) { @@ -56,7 +57,7 @@ private void updateUserMetadata(UserMetadata userMetadata, String displayName, S } } - private boolean updateField(Supplier getter, Consumer setter, String newValue) { + private boolean updateEncryptedField(Supplier getter, Consumer setter, String newValue) { String decryptedValue = encryptionDecryptionUtil.decrypt(getter.get(), "user_pii", "", ""); if (!decryptedValue.equals(newValue)) { setter.accept(encryptionDecryptionUtil.encrypt(newValue, "user_pii", "", "")); @@ -65,6 +66,15 @@ private boolean updateField(Supplier getter, Consumer setter, St return false; } + private boolean updateField(Supplier getter, Consumer setter, T newValue) { + T value = (T) getter.get(); + if (!value.equals(newValue)) { + setter.accept((T) newValue); + return true; + } + return false; + } + private UUID createUserMetadata(String providerSubjectId, String identityProvider, String displayName, String profilePictureUrl, String email, Timestamp now) { UserMetadata userMetadata = new UserMetadata(); From 193510fa5f2a28b2137ee2f227eba1ba5bbf7088 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 17 Mar 2025 10:41:15 +0530 Subject: [PATCH 429/860] [INJIWEB-1370] update the logic to remove the session from redis based on the sessionId and in session controller status endpoint update logic to check if session is available or not and to avoid creating new session if old session is not available Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../java/io/mosip/mimoto/config/Config.java | 22 ++++++++++++------- .../mimoto/controller/SessionController.java | 4 +++- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/config/Config.java b/src/main/java/io/mosip/mimoto/config/Config.java index b009cc69e..784ec084b 100644 --- a/src/main/java/io/mosip/mimoto/config/Config.java +++ b/src/main/java/io/mosip/mimoto/config/Config.java @@ -2,8 +2,7 @@ import io.mosip.mimoto.security.oauth2.OAuth2AuthenticationFailureHandler; import io.mosip.mimoto.security.oauth2.OAuth2AuthenticationSuccessHandler; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.servlet.http.HttpSession; +import jakarta.servlet.http.Cookie; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -26,6 +25,7 @@ import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import java.util.Arrays; +import java.util.Base64; import java.util.HashMap; import java.util.Map; @@ -98,14 +98,20 @@ private void setupOauth2Config(HttpSecurity http, SessionRepository sessionRepos .logout(logout -> logout .logoutUrl("/logout") .logoutSuccessHandler((request, response, authentication) -> { - log.info("inside logout success handler::"); - HttpSession session = request.getSession(false); - log.info("session::" + session); - if (session != null) { - sessionRepository.deleteById(session.getId()); // Remove session from Redis - session.invalidate(); // Invalidate the session + Cookie[] cookies = request.getCookies(); + if (cookies != null) { + for (Cookie cookie : cookies) { + if ("SESSION".equals(cookie.getName())) { + String encodedSessionId = cookie.getValue(); + String sessionId = new String(Base64.getUrlDecoder().decode(encodedSessionId)); + if (sessionId != null) { + sessionRepository.deleteById(sessionId); + } + } + } } }) + .clearAuthentication(true) ) .authorizeHttpRequests(authz -> authz // Define secured endpoints diff --git a/src/main/java/io/mosip/mimoto/controller/SessionController.java b/src/main/java/io/mosip/mimoto/controller/SessionController.java index 767a9d68e..a9582388c 100644 --- a/src/main/java/io/mosip/mimoto/controller/SessionController.java +++ b/src/main/java/io/mosip/mimoto/controller/SessionController.java @@ -3,6 +3,7 @@ import io.mosip.mimoto.core.http.ResponseWrapper; import io.mosip.mimoto.exception.LoginSessionException; import io.mosip.mimoto.util.Utilities; +import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpSession; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; @@ -18,8 +19,9 @@ @Slf4j public class SessionController { @GetMapping("/status") - public ResponseEntity> getSessionStatus(HttpSession httpSession) { + public ResponseEntity> getSessionStatus(HttpServletRequest request) { try { + HttpSession httpSession = request.getSession(false); log.info("Session: {}", httpSession); if (httpSession == null || httpSession.getAttribute("userId") == null) { From d14456ab8c8cde1c6843994af734416c12c5e489 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 17 Mar 2025 22:35:48 +0530 Subject: [PATCH 430/860] [INJIWEB-1379] remove enableRedisHttpSession to allow the spring to apply the timeout property to the session stored in redis Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- src/main/java/io/mosip/mimoto/config/Config.java | 1 - src/main/resources/application-local.properties | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/config/Config.java b/src/main/java/io/mosip/mimoto/config/Config.java index 784ec084b..0c91d2746 100644 --- a/src/main/java/io/mosip/mimoto/config/Config.java +++ b/src/main/java/io/mosip/mimoto/config/Config.java @@ -32,7 +32,6 @@ @Configuration @EnableWebSecurity @EnableMethodSecurity -@EnableRedisHttpSession @Order(1) @Slf4j public class Config { diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index bec583b9a..aed7ff1e8 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -301,4 +301,4 @@ spring.session.store-type=redis spring.redis.host=localhost spring.redis.port=6379 spring.redis.password= -spring.session.timeout=30m \ No newline at end of file +server.servlet.session.timeout=30m \ No newline at end of file From d6772e58f9aa8f544493eaf262396cace53b2092 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 18 Mar 2025 21:04:55 +0530 Subject: [PATCH 431/860] [INJIWEB-1370] handle different error scenarios for session expiration, deletion during logout flow and session status check flow Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../java/io/mosip/mimoto/config/Config.java | 52 +++++++++++++++---- .../mimoto/controller/SessionController.java | 2 +- .../exception/PlatformErrorMessages.java | 6 ++- 3 files changed, 49 insertions(+), 11 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/config/Config.java b/src/main/java/io/mosip/mimoto/config/Config.java index 0c91d2746..9fda8480e 100644 --- a/src/main/java/io/mosip/mimoto/config/Config.java +++ b/src/main/java/io/mosip/mimoto/config/Config.java @@ -1,8 +1,13 @@ package io.mosip.mimoto.config; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.core.http.ResponseWrapper; +import io.mosip.mimoto.exception.OAuth2AuthenticationException; import io.mosip.mimoto.security.oauth2.OAuth2AuthenticationFailureHandler; import io.mosip.mimoto.security.oauth2.OAuth2AuthenticationSuccessHandler; +import io.mosip.mimoto.util.Utilities; import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpSession; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -10,6 +15,8 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.annotation.Order; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.security.config.Customizer; import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; @@ -19,7 +26,6 @@ import org.springframework.security.config.http.SessionCreationPolicy; import org.springframework.security.web.SecurityFilterChain; import org.springframework.session.SessionRepository; -import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.CorsConfigurationSource; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; @@ -28,6 +34,7 @@ import java.util.Base64; import java.util.HashMap; import java.util.Map; +import static io.mosip.mimoto.exception.PlatformErrorMessages.LOGIN_SESSION_INVALIDATE_EXCEPTION; @Configuration @EnableWebSecurity @@ -95,19 +102,46 @@ private void setupOauth2Config(HttpSecurity http, SessionRepository sessionRepos .failureHandler(oAuth2AuthenticationFailureHandler) ) .logout(logout -> logout + .invalidateHttpSession(false) + .clearAuthentication(false) .logoutUrl("/logout") .logoutSuccessHandler((request, response, authentication) -> { - Cookie[] cookies = request.getCookies(); - if (cookies != null) { - for (Cookie cookie : cookies) { - if ("SESSION".equals(cookie.getName())) { - String encodedSessionId = cookie.getValue(); - String sessionId = new String(Base64.getUrlDecoder().decode(encodedSessionId)); - if (sessionId != null) { - sessionRepository.deleteById(sessionId); + try { + Cookie[] cookies = request.getCookies(); + if (cookies != null) { + for (Cookie cookie : cookies) { + if ("SESSION".equals(cookie.getName())) { + String encodedSessionId = cookie.getValue(); + String sessionId = new String(Base64.getUrlDecoder().decode(encodedSessionId)); + if (sessionRepository.findById(sessionId) != null) { + sessionRepository.deleteById(sessionId); + } else { + throw new OAuth2AuthenticationException("NOT_FOUND", "Logout request was sent for an invalid or expired session", HttpStatus.NOT_FOUND); + } } } } + + HttpSession session = request.getSession(false); + if (session != null) { + session.invalidate(); // Explicitly invalidate the session + } + } catch (OAuth2AuthenticationException exception) { + ResponseEntity> responseEntity = Utilities.handleErrorResponse(exception, LOGIN_SESSION_INVALIDATE_EXCEPTION.getCode(), exception.getStatus(), null); + response.setStatus(responseEntity.getStatusCodeValue()); + response.setContentType("application/json"); + + ObjectMapper objectMapper = new ObjectMapper(); + String jsonResponse = objectMapper.writeValueAsString(responseEntity.getBody()); + response.getWriter().write(jsonResponse); + } catch (Exception exception) { + ResponseEntity> responseEntity = Utilities.handleErrorResponse(exception, LOGIN_SESSION_INVALIDATE_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR, null); + response.setStatus(responseEntity.getStatusCodeValue()); + response.setContentType("application/json"); + + ObjectMapper objectMapper = new ObjectMapper(); + String jsonResponse = objectMapper.writeValueAsString(responseEntity.getBody()); + response.getWriter().write(jsonResponse); } }) .clearAuthentication(true) diff --git a/src/main/java/io/mosip/mimoto/controller/SessionController.java b/src/main/java/io/mosip/mimoto/controller/SessionController.java index a9582388c..8ca5ca160 100644 --- a/src/main/java/io/mosip/mimoto/controller/SessionController.java +++ b/src/main/java/io/mosip/mimoto/controller/SessionController.java @@ -25,7 +25,7 @@ public ResponseEntity> getSessionStatus(HttpServletReque log.info("Session: {}", httpSession); if (httpSession == null || httpSession.getAttribute("userId") == null) { - throw new LoginSessionException("UNAUTHORIZED", "Session is expired, please log in again", HttpStatus.UNAUTHORIZED); + throw new LoginSessionException("NOT_FOUND", "The session is invalid or expired due to inactivity", HttpStatus.NOT_FOUND); } ResponseWrapper responseWrapper = new ResponseWrapper<>(); diff --git a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java index c09fd1ed5..49091a599 100644 --- a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java +++ b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java @@ -92,7 +92,11 @@ public enum PlatformErrorMessages { INVALID_AUTHORIZATION_SERVER_WELLKNOWN_RESPONSE_EXCEPTION(PlatformConstants.PREFIX + "042", "Invalid Authorization Server well-known from server:"), MIMOTO_FETCHING_TOKEN_EXCEPTION(PlatformConstants.PREFIX + "043", "Exception occurred when fetching the Token"), OAUTH2_AUTHENTICATION_EXCEPTION(PlatformConstants.PREFIX + "044", "Failed to authenticate user via OAuth Identity Provider during login"), - LOGIN_SESSION_EXCEPTION(PlatformConstants.PREFIX + "045", "Exception occurred when fetching the login session details"); + LOGIN_SESSION_EXCEPTION(PlatformConstants.PREFIX + "045", "Exception occurred when fetching the login session details"), + LOGIN_SESSION_INVALIDATE_EXCEPTION(PlatformConstants.PREFIX + "046", "Exception occurred when invalidating the session from redis"), + DATABASE_CONNECTION_EXCEPTION(PlatformConstants.PREFIX + "047", "Failed to connect to the shared database"), + USER_METADATA_STORAGE_EXCEPTION(PlatformConstants.PREFIX + "048", "Failed to store the User metadata into database"), + USER_METADATA_FETCH_EXCEPTION(PlatformConstants.PREFIX + "049", "Failed to fetch the User metadata from database"); /** The error message. */ private final String errorMessage; From 09408bedfc726618944592ea093e3f7be636e0da Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Wed, 19 Mar 2025 00:30:50 +0530 Subject: [PATCH 432/860] [INJIWEB-1370] send any error occured during the database connection or when storing the user data into databse in the redirect url as query params Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../OAuth2AuthenticationSuccessHandler.java | 29 ++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java index 81cb19205..4e8b1a261 100644 --- a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java +++ b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java @@ -5,6 +5,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.dao.DataAccessResourceFailureException; import org.springframework.security.core.Authentication; import org.springframework.security.oauth2.client.OAuth2AuthorizedClient; import org.springframework.security.oauth2.client.OAuth2AuthorizedClientService; @@ -17,8 +18,11 @@ import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.UUID; +import static io.mosip.mimoto.exception.PlatformErrorMessages.*; @Component @Slf4j @@ -59,10 +63,27 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo session.setAttribute("refreshToken", refreshToken); // Call the service to update or insert the user metadata in the database - UUID userId = userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); - session.setAttribute("userId", userId); - - response.sendRedirect(injiWebUrl +"/login?status=success"); + try { + UUID userId = userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); + session.setAttribute("userId", userId); + response.sendRedirect(injiWebUrl + "/login?status=success"); + } catch (DataAccessResourceFailureException exception) { + log.error("Exception occurred while connecting to the database to store user data:", exception); + String errorMessage = String.format( + "status=error&error_code=%s&error_message=%s", + URLEncoder.encode(DATABASE_CONNECTION_EXCEPTION.getCode(), StandardCharsets.UTF_8), + URLEncoder.encode(DATABASE_CONNECTION_EXCEPTION.getMessage(), StandardCharsets.UTF_8) + ); + response.sendRedirect(injiWebUrl + "/login?" + errorMessage); + } catch (Exception exception) { + log.error("Exception occurred while saving or updating user data in the database:", exception); + String errorMessage = String.format( + "status=error&error_code=%s&error_message=%s", + URLEncoder.encode(USER_METADATA_STORAGE_EXCEPTION.getCode(),StandardCharsets.UTF_8), + URLEncoder.encode(USER_METADATA_STORAGE_EXCEPTION.getMessage(), StandardCharsets.UTF_8) + ); + response.sendRedirect(injiWebUrl + "/login?" + errorMessage); + } } } From c4790120480185309b6e0dfc7a941d97d20ca3c0 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Wed, 19 Mar 2025 00:52:54 +0530 Subject: [PATCH 433/860] [INJIWEB-1370] return proper errors if there is any issue occured while connecting to database to fetch the user details Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../mimoto/controller/UserController.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/UserController.java b/src/main/java/io/mosip/mimoto/controller/UserController.java index c5204dfae..b9419a9d4 100644 --- a/src/main/java/io/mosip/mimoto/controller/UserController.java +++ b/src/main/java/io/mosip/mimoto/controller/UserController.java @@ -9,13 +9,14 @@ import jakarta.servlet.http.HttpSession; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessResourceFailureException; import org.springframework.security.core.Authentication; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import static io.mosip.mimoto.exception.PlatformErrorMessages.OAUTH2_AUTHENTICATION_EXCEPTION; +import static io.mosip.mimoto.exception.PlatformErrorMessages.*; @Slf4j @RestController @@ -49,19 +50,25 @@ public ResponseEntity> getUserProfile(Authentication aut encryptionDecryptionUtill.decrypt(userMetadata.getProfilePictureUrl(), "user_pii", "", "")); responseWrapper.setResponse(userDetails); return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); - } catch (OAuth2AuthenticationException exception) { log.error("Error occurred while retrieving user profile : ", exception); - return Utilities.handleErrorResponse(exception, OAUTH2_AUTHENTICATION_EXCEPTION.getCode(), exception.getStatus(),null); + return Utilities.handleErrorResponse(exception, USER_METADATA_FETCH_EXCEPTION.getCode(), exception.getStatus(), null); } catch (Exception exception) { log.error("Error occurred while retrieving user profile : ", exception); - return Utilities.handleErrorResponse(exception, OAUTH2_AUTHENTICATION_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR,null); + return Utilities.handleErrorResponse(exception, USER_METADATA_FETCH_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR, null); } + } private UserMetadata fetchUserMetadata(String providerSubjectId) throws OAuth2AuthenticationException { - return userMetadataRepository.findByProviderSubjectId(providerSubjectId) - .orElseThrow(() -> new OAuth2AuthenticationException("NOT_FOUND", "User not found", HttpStatus.NOT_FOUND)); + try { + return userMetadataRepository.findByProviderSubjectId(providerSubjectId) + .orElseThrow(() -> new OAuth2AuthenticationException("NOT_FOUND", "User not found. Please check your credentials or register.", HttpStatus.NOT_FOUND)); + } catch (DataAccessResourceFailureException exception) { + throw new OAuth2AuthenticationException(DATABASE_CONNECTION_EXCEPTION.getCode(), DATABASE_CONNECTION_EXCEPTION.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); + } catch (Exception exception) { + throw new OAuth2AuthenticationException(USER_METADATA_FETCH_EXCEPTION.getCode(), USER_METADATA_FETCH_EXCEPTION.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); + } } private void validateIdentityProvider(UserMetadata userMetadata, String identityProvider) throws OAuth2AuthenticationException { From 7b933e3dd756e89f4a93f868686698bf4258c767 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Wed, 19 Mar 2025 01:19:49 +0530 Subject: [PATCH 434/860] [INJIWEB-1379] send error message in the redirect uri if the user has denied giving the access to the IDP for sharing the account details to the app Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../OAuth2AuthenticationFailureHandler.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationFailureHandler.java b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationFailureHandler.java index e269dc0f5..7cace2219 100644 --- a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationFailureHandler.java +++ b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationFailureHandler.java @@ -8,6 +8,8 @@ import org.springframework.stereotype.Component; import java.io.IOException; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; @Component @Slf4j @@ -16,8 +18,17 @@ public class OAuth2AuthenticationFailureHandler extends SimpleUrlAuthenticationF @Override public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException { - log.error("OAuth2 authentication failed: {}", exception.getMessage()); + String error = request.getParameter("error"); + String errorMessage; - getRedirectStrategy().sendRedirect(request, response, "http://localhost:3004/login?status=error"); + if ("access_denied".equals(error)) { + errorMessage = "Access Denied. Please try again."; + } else { + errorMessage = "Authentication failed. Please try again."; + } + + String encodedErrorMessage = URLEncoder.encode(errorMessage, StandardCharsets.UTF_8); + String redirectUrl = "http://localhost:3004/login?status=error&error_message=" + encodedErrorMessage; + getRedirectStrategy().sendRedirect(request, response, redirectUrl); } } \ No newline at end of file From b46592e0970a2474312c269524bd09883a71f816 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Wed, 19 Mar 2025 09:47:55 +0530 Subject: [PATCH 435/860] [INJIWEB-1370] handle the connection and timeout scenarios during connecting with the IDP flow Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../OAuth2AuthenticationFailureHandler.java | 29 ++++++++++++++----- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationFailureHandler.java b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationFailureHandler.java index 7cace2219..50cbd3962 100644 --- a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationFailureHandler.java +++ b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationFailureHandler.java @@ -3,7 +3,9 @@ import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; import org.springframework.security.core.AuthenticationException; +import org.springframework.security.oauth2.core.OAuth2AuthenticationException; import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler; import org.springframework.stereotype.Component; @@ -15,20 +17,33 @@ @Slf4j public class OAuth2AuthenticationFailureHandler extends SimpleUrlAuthenticationFailureHandler { + @Value("${mosip.inji.web.url}") + private String injiWebUrl; + @Override public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException { - String error = request.getParameter("error"); - String errorMessage; + String errorMessage = ""; - if ("access_denied".equals(error)) { - errorMessage = "Access Denied. Please try again."; - } else { - errorMessage = "Authentication failed. Please try again."; + if (exception != null) { + if (exception instanceof OAuth2AuthenticationException) { + Throwable cause = exception.getCause(); + if (cause instanceof java.net.SocketTimeoutException) { + errorMessage = "Timeout while connecting to the IDP for authorization."; + } else if (cause instanceof java.net.ConnectException) { + errorMessage = "Could not connect to the IDP for authorization."; + } else if (exception.getMessage().contains("access_denied")) { + errorMessage = "Access Denied. Please try again."; + } else { + errorMessage = "IDP login is failed due to: " + exception.getMessage(); + } + } else { + errorMessage = "IDP login is failed due to: " + exception.getMessage(); + } } String encodedErrorMessage = URLEncoder.encode(errorMessage, StandardCharsets.UTF_8); - String redirectUrl = "http://localhost:3004/login?status=error&error_message=" + encodedErrorMessage; + String redirectUrl = injiWebUrl + "/login?status=error&error_message=" + encodedErrorMessage; getRedirectStrategy().sendRedirect(request, response, redirectUrl); } } \ No newline at end of file From 86eab0b2c76bf7b094a3638e745be3c5ff0ee354 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Wed, 19 Mar 2025 13:19:24 +0530 Subject: [PATCH 436/860] [INJIWEB-1370] update error messages in the oauth2AuthenticaionFailure method Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../security/oauth2/OAuth2AuthenticationFailureHandler.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationFailureHandler.java b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationFailureHandler.java index 50cbd3962..4a0cd6aa7 100644 --- a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationFailureHandler.java +++ b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationFailureHandler.java @@ -35,10 +35,10 @@ public void onAuthenticationFailure(HttpServletRequest request, HttpServletRespo } else if (exception.getMessage().contains("access_denied")) { errorMessage = "Access Denied. Please try again."; } else { - errorMessage = "IDP login is failed due to: " + exception.getMessage(); + errorMessage = "Login is failed due to: " + exception.getMessage(); } } else { - errorMessage = "IDP login is failed due to: " + exception.getMessage(); + errorMessage = "Login is failed due to: " + exception.getMessage(); } } From de2826896e96f25aa3af2be3c11789e29346b6e6 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Wed, 19 Mar 2025 13:38:53 +0530 Subject: [PATCH 437/860] [INJIWEB-1370] fix the failing test case in idpController test by properly reading the response params Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../io/mosip/mimoto/controller/IdpControllerTest.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java b/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java index d56aae79e..efc949361 100644 --- a/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java @@ -143,11 +143,11 @@ public void shouldReturnTokenResponseForValidIssuerAndParams() throws Exception new BasicNameValuePair("locale", "test-locale") ))))) .andExpect(status().isOk()) - .andExpect(jsonPath("$.response.id_token").value("test-id-token")) - .andExpect(jsonPath("$.response.access_token").value("test-accesstoken")) - .andExpect(jsonPath("$.response.expires_in").value(12345)) - .andExpect(jsonPath("$.response.scope").value("test-scope")) - .andExpect(jsonPath("$.response.token_type").value("test-token-type")); + .andExpect(jsonPath("$.id_token").value("test-id-token")) + .andExpect(jsonPath("$.access_token").value("test-accesstoken")) + .andExpect(jsonPath("$.expires_in").value(12345)) + .andExpect(jsonPath("$.scope").value("test-scope")) + .andExpect(jsonPath("$.token_type").value("test-token-type")); } @Test From 5fccaddbcded6624448d719589e7e4d5619b29c2 Mon Sep 17 00:00:00 2001 From: BalachandarG Date: Fri, 14 Mar 2025 15:56:27 +0530 Subject: [PATCH 438/860] [INJIWEB-1471]: Update Pixelpass version to 0.7.0-SNAPSHOT and datashare url updates Signed-off-by: BalachandarG --- pom.xml | 2 +- src/main/resources/application-local.properties | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 718ac9fc3..f437bc70d 100644 --- a/pom.xml +++ b/pom.xml @@ -431,7 +431,7 @@ io.mosip pixelpass-jar - 0.5.0 + 0.7.0-SNAPSHOT diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index b6b54c8a5..82bd1fd05 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -224,10 +224,10 @@ mosip.inji.ovp.redirect.url.pattern=%s#vp_token=%s&presentation_submission=%s mosip.inji.ovp.error.redirect.url.pattern=%s?error=%s&error_description=%s #DataShare Config -mosip.data.share.url=https://datashare-inji.dev1.mosip.net +mosip.data.share.url=http://localhost:8097 mosip.data.share.create.url=${mosip.data.share.url}/v1/datashare/create/static-policyid/static-subscriberid mosip.data.share.create.retry.count=3 -mosip.data.share.get.url.pattern=http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/* +mosip.data.share.get.url.pattern=${mosip.data.share.url}/v1/datashare/get/static-policyid/static-subscriberid/* mosip.security.cors-enable=true #comma separated allowed origins From 3fa205fd11c4de1bde4f3cba77485b734ced20d7 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Wed, 19 Mar 2025 22:37:49 +0530 Subject: [PATCH 439/860] [INJIWEB-1370] write test cases for sessionController Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../java/io/mosip/mimoto/OAuthLoginTestBootApplication.java | 2 ++ .../java/io/mosip/mimoto/controller/SessionControllerTest.java | 2 ++ .../java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java | 2 ++ 3 files changed, 6 insertions(+) create mode 100644 src/test/java/io/mosip/mimoto/OAuthLoginTestBootApplication.java create mode 100644 src/test/java/io/mosip/mimoto/controller/SessionControllerTest.java create mode 100644 src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java diff --git a/src/test/java/io/mosip/mimoto/OAuthLoginTestBootApplication.java b/src/test/java/io/mosip/mimoto/OAuthLoginTestBootApplication.java new file mode 100644 index 000000000..8ca5c56d3 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/OAuthLoginTestBootApplication.java @@ -0,0 +1,2 @@ +package io.mosip.mimoto;public class OAuthLoginTestBootApplication { +} diff --git a/src/test/java/io/mosip/mimoto/controller/SessionControllerTest.java b/src/test/java/io/mosip/mimoto/controller/SessionControllerTest.java new file mode 100644 index 000000000..79a433c2f --- /dev/null +++ b/src/test/java/io/mosip/mimoto/controller/SessionControllerTest.java @@ -0,0 +1,2 @@ +package io.mosip.mimoto.controller;public class SessionControllerTest { +} diff --git a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java new file mode 100644 index 000000000..b4f566fda --- /dev/null +++ b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java @@ -0,0 +1,2 @@ +package io.mosip.mimoto.security.oauth2;public class OAuth2LoginTests { +} From 3efddb01906b017f458046b557227889e0eff72e Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Thu, 20 Mar 2025 00:26:28 +0530 Subject: [PATCH 440/860] [INJIWEB-1370] write test cases for sessionController and user controller classes and udpate the error code for some of the error scenarios Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../mimoto/controller/SessionController.java | 2 +- .../mimoto/controller/UserController.java | 25 ++-- .../controller/SessionControllerTest.java | 67 ++++++++- .../mimoto/controller/UserControllerTest.java | 135 ++++++++++++++++++ 4 files changed, 212 insertions(+), 17 deletions(-) create mode 100644 src/test/java/io/mosip/mimoto/controller/UserControllerTest.java diff --git a/src/main/java/io/mosip/mimoto/controller/SessionController.java b/src/main/java/io/mosip/mimoto/controller/SessionController.java index 8ca5ca160..6958b85c5 100644 --- a/src/main/java/io/mosip/mimoto/controller/SessionController.java +++ b/src/main/java/io/mosip/mimoto/controller/SessionController.java @@ -25,7 +25,7 @@ public ResponseEntity> getSessionStatus(HttpServletReque log.info("Session: {}", httpSession); if (httpSession == null || httpSession.getAttribute("userId") == null) { - throw new LoginSessionException("NOT_FOUND", "The session is invalid or expired due to inactivity", HttpStatus.NOT_FOUND); + throw new LoginSessionException(LOGIN_SESSION_EXCEPTION.getCode(), "The session is invalid or expired due to inactivity", HttpStatus.NOT_FOUND); } ResponseWrapper responseWrapper = new ResponseWrapper<>(); diff --git a/src/main/java/io/mosip/mimoto/controller/UserController.java b/src/main/java/io/mosip/mimoto/controller/UserController.java index b9419a9d4..2dd71bcab 100644 --- a/src/main/java/io/mosip/mimoto/controller/UserController.java +++ b/src/main/java/io/mosip/mimoto/controller/UserController.java @@ -33,13 +33,9 @@ public class UserController { public ResponseEntity> getUserProfile(Authentication authentication, HttpSession session) { try { ResponseWrapper responseWrapper = new ResponseWrapper<>(); - if (authentication == null || !authentication.isAuthenticated()) { - throw new OAuth2AuthenticationException("UNAUTHORIZED", "User is not authenticated", HttpStatus.UNAUTHORIZED); - } - String identityProvider = (String) session.getAttribute("clientRegistrationId"); if (identityProvider.isEmpty()) { - throw new OAuth2AuthenticationException("BAD_REQUEST", "Identity provider is not available in the received authentication response", HttpStatus.BAD_REQUEST); + throw new OAuth2AuthenticationException(USER_METADATA_FETCH_EXCEPTION.getCode(), "The Identity provider in the authentication object is invalid", HttpStatus.BAD_REQUEST); } UserMetadata userMetadata = fetchUserMetadata(authentication.getName()); @@ -53,27 +49,26 @@ public ResponseEntity> getUserProfile(Authentication aut } catch (OAuth2AuthenticationException exception) { log.error("Error occurred while retrieving user profile : ", exception); return Utilities.handleErrorResponse(exception, USER_METADATA_FETCH_EXCEPTION.getCode(), exception.getStatus(), null); + } catch (DataAccessResourceFailureException exception) { + log.error("Error occurred while connecting to the database : ", exception); + OAuth2AuthenticationException authenticationException = new OAuth2AuthenticationException(DATABASE_CONNECTION_EXCEPTION.getCode(), DATABASE_CONNECTION_EXCEPTION.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); + return Utilities.handleErrorResponse(authenticationException, USER_METADATA_FETCH_EXCEPTION.getCode(), authenticationException.getStatus(), null); } catch (Exception exception) { log.error("Error occurred while retrieving user profile : ", exception); - return Utilities.handleErrorResponse(exception, USER_METADATA_FETCH_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR, null); + OAuth2AuthenticationException authenticationException = new OAuth2AuthenticationException(USER_METADATA_FETCH_EXCEPTION.getCode(), USER_METADATA_FETCH_EXCEPTION.getMessage() + " due to : " + exception.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); + return Utilities.handleErrorResponse(authenticationException, USER_METADATA_FETCH_EXCEPTION.getCode(), authenticationException.getStatus(), null); } } private UserMetadata fetchUserMetadata(String providerSubjectId) throws OAuth2AuthenticationException { - try { - return userMetadataRepository.findByProviderSubjectId(providerSubjectId) - .orElseThrow(() -> new OAuth2AuthenticationException("NOT_FOUND", "User not found. Please check your credentials or register.", HttpStatus.NOT_FOUND)); - } catch (DataAccessResourceFailureException exception) { - throw new OAuth2AuthenticationException(DATABASE_CONNECTION_EXCEPTION.getCode(), DATABASE_CONNECTION_EXCEPTION.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); - } catch (Exception exception) { - throw new OAuth2AuthenticationException(USER_METADATA_FETCH_EXCEPTION.getCode(), USER_METADATA_FETCH_EXCEPTION.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); - } + return userMetadataRepository.findByProviderSubjectId(providerSubjectId) + .orElseThrow(() -> new OAuth2AuthenticationException(USER_METADATA_FETCH_EXCEPTION.getCode(), "User not found. Please check your credentials or register", HttpStatus.NOT_FOUND)); } private void validateIdentityProvider(UserMetadata userMetadata, String identityProvider) throws OAuth2AuthenticationException { if (!userMetadata.getIdentityProvider().equals(identityProvider)) { - throw new OAuth2AuthenticationException("UNAUTHORIZED", "Identity provider mismatch", HttpStatus.UNAUTHORIZED); + throw new OAuth2AuthenticationException(USER_METADATA_FETCH_EXCEPTION.getCode(), "Identity provider in session and user database doesn't match", HttpStatus.INTERNAL_SERVER_ERROR); } } } diff --git a/src/test/java/io/mosip/mimoto/controller/SessionControllerTest.java b/src/test/java/io/mosip/mimoto/controller/SessionControllerTest.java index 79a433c2f..978efe66d 100644 --- a/src/test/java/io/mosip/mimoto/controller/SessionControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/SessionControllerTest.java @@ -1,2 +1,67 @@ -package io.mosip.mimoto.controller;public class SessionControllerTest { +package io.mosip.mimoto.controller; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; +import org.springframework.mock.web.MockHttpSession; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import jakarta.servlet.http.HttpServletRequest; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = SessionController.class) +@AutoConfigureMockMvc(addFilters = false) +@EnableWebMvc +public class SessionControllerTest { + + @Autowired + private MockMvc mockMvc; + + @InjectMocks + private SessionController sessionController; + + @MockBean + private HttpServletRequest request; + + @MockBean + private ObjectMapper objectMapper; + + @Test + public void shouldReturnSuccessResponseForValidSessionAndUserId() throws Exception { + MockHttpSession mockSession = new MockHttpSession(); + mockSession.setAttribute("userId", "123"); + + this.mockMvc.perform(get("/session/status").session(mockSession).accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.response").value("Session is active")); + } + + @Test + public void shouldReturnProperErrorResponseWhenSessionIsNull() throws Exception { + this.mockMvc.perform(get("/session/status").accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isNotFound()) + .andExpect(jsonPath("$.errors[0].errorCode").value("RESIDENT-APP-045")) + .andExpect(jsonPath("$.errors[0].errorMessage").value("The session is invalid or expired due to inactivity")); + } + + + @Test + public void shouldReturnProperErrorResponseWhenTheUserIdInSessionIsNull() throws Exception { + MockHttpSession mockSession = new MockHttpSession(); + + this.mockMvc.perform(get("/session/status").session(mockSession).accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isNotFound()) + .andExpect(jsonPath("$.errors[0].errorCode").value("RESIDENT-APP-045")) + .andExpect(jsonPath("$.errors[0].errorMessage").value("The session is invalid or expired due to inactivity")); + } } diff --git a/src/test/java/io/mosip/mimoto/controller/UserControllerTest.java b/src/test/java/io/mosip/mimoto/controller/UserControllerTest.java new file mode 100644 index 000000000..df0885047 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/controller/UserControllerTest.java @@ -0,0 +1,135 @@ +package io.mosip.mimoto.controller; + +import io.mosip.mimoto.dbentity.UserMetadata; +import io.mosip.mimoto.repository.UserMetadataRepository; +import io.mosip.mimoto.util.EncryptionDecryptionUtil; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; +import org.springframework.mock.web.MockHttpSession; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import org.springframework.test.web.servlet.result.MockMvcResultMatchers; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; + +import java.util.Optional; + +import static org.mockito.Mockito.*; +import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = UserController.class) +@AutoConfigureMockMvc +@EnableWebMvc +@EnableWebSecurity +public class UserControllerTest { + + @Autowired + private MockMvc mockMvc; + + @MockBean + private UserMetadataRepository userMetadataRepository; + + @MockBean + private EncryptionDecryptionUtil encryptionDecryptionUtil; + + @Autowired + private WebApplicationContext context; + + private UserMetadata userMetadata; + + MockHttpSession mockSession; + @Before + public void setUp() { + userMetadata = new UserMetadata(); + userMetadata.setIdentityProvider("google"); + userMetadata.setDisplayName("encryptedName"); + userMetadata.setProfilePictureUrl("encryptedUrl"); + mockMvc = MockMvcBuilders.webAppContextSetup(context) + .apply(springSecurity()) + .build(); + mockSession = new MockHttpSession(); + mockSession.setAttribute("clientRegistrationId", "google"); + } + + @Test + public void shouldReturnTheUserDataForValidValues() throws Exception { + when(userMetadataRepository.findByProviderSubjectId("user123")).thenReturn(Optional.of(userMetadata)); + when(encryptionDecryptionUtil.decrypt("encryptedName", "user_pii", "", "")).thenReturn("Name 123"); + when(encryptionDecryptionUtil.decrypt("encryptedUrl", "user_pii", "", "")).thenReturn("https://profile.com/pic.jpg"); + + mockMvc.perform(MockMvcRequestBuilders.get("/secure/user/profile").accept(MediaType.APPLICATION_JSON) + .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")).session(mockSession)) + .andExpect(MockMvcResultMatchers.status().isOk()) + .andExpect(MockMvcResultMatchers.jsonPath("$.response").value("{\"displayName\": \"Name 123\", \"profilePictureUrl\": \"https://profile.com/pic.jpg\"}")); + } + + @Test + public void shouldThrowExceptionIfIdentityProviderIsEmpty() throws Exception { + mockSession.setAttribute("clientRegistrationId", ""); + + when(userMetadataRepository.findByProviderSubjectId("user123")).thenReturn(Optional.of(userMetadata)); + when(encryptionDecryptionUtil.decrypt("encryptedName", "user_pii", "", "")).thenReturn("Name 123"); + when(encryptionDecryptionUtil.decrypt("encryptedUrl", "user_pii", "", "")).thenReturn("https://profile.com/pic.jpg"); + + mockMvc.perform(MockMvcRequestBuilders.get("/secure/user/profile").accept(MediaType.APPLICATION_JSON) + .session(mockSession) + .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")).session(mockSession)) + .andExpect(MockMvcResultMatchers.status().isBadRequest()) + .andExpect(jsonPath("$.errors[0].errorCode").value("RESIDENT-APP-049")) + .andExpect(jsonPath("$.errors[0].errorMessage").value("The Identity provider in the authentication object is invalid")); + } + + + @Test + public void shouldThrowExceptionForAInvalidUser() throws Exception { + when(userMetadataRepository.findByProviderSubjectId("user123")).thenReturn(Optional.empty()); + + mockMvc.perform(MockMvcRequestBuilders.get("/secure/user/profile").accept(MediaType.APPLICATION_JSON) + .session(mockSession) + .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")).session(mockSession)) + .andExpect(MockMvcResultMatchers.status().isNotFound()) + .andExpect(jsonPath("$.errors[0].errorCode").value("RESIDENT-APP-049")) + .andExpect(jsonPath("$.errors[0].errorMessage").value("User not found. Please check your credentials or register")); + } + + @Test + public void shouldThrowExceptionIfAnyOtherErrorOccurredWhileFetchingUserData() throws Exception { + when(userMetadataRepository.findByProviderSubjectId("user123")).thenReturn(Optional.of(userMetadata)); + when(encryptionDecryptionUtil.decrypt("encryptedName", "user_pii", "", "")).thenThrow(new RuntimeException("Failure occurred while decrypting the name")); + + mockMvc.perform(MockMvcRequestBuilders.get("/secure/user/profile").accept(MediaType.APPLICATION_JSON) + .session(mockSession) + .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")).session(mockSession)) + .andExpect(MockMvcResultMatchers.status().isInternalServerError()) + .andExpect(jsonPath("$.errors[0].errorCode").value("RESIDENT-APP-049")) + .andExpect(jsonPath("$.errors[0].errorMessage").value("Failed to fetch the User metadata from database due to : Failure occurred while decrypting the name")); + } + + @Test + public void shouldThrowExceptionIfIdentityProviderInSessionMismatchWithValueStoredInUserRecord() throws Exception { + mockSession.setAttribute("clientRegistrationId", "facebook"); + + when(userMetadataRepository.findByProviderSubjectId("user123")).thenReturn(Optional.of(userMetadata)); + when(encryptionDecryptionUtil.decrypt("encryptedName", "user_pii", "", "")).thenReturn("Name 123"); + when(encryptionDecryptionUtil.decrypt("encryptedUrl", "user_pii", "", "")).thenReturn("https://profile.com/pic.jpg"); + + mockMvc.perform(MockMvcRequestBuilders.get("/secure/user/profile").accept(MediaType.APPLICATION_JSON) + .session(mockSession) + .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")).session(mockSession)) + .andExpect(MockMvcResultMatchers.status().isInternalServerError()) + .andExpect(jsonPath("$.errors[0].errorCode").value("RESIDENT-APP-049")) + .andExpect(jsonPath("$.errors[0].errorMessage").value("Identity provider in session and user database doesn't match")); + } +} \ No newline at end of file From 531fe2a7c555a1526ddc2e7c7f93c34438c5fa40 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Thu, 20 Mar 2025 01:28:40 +0530 Subject: [PATCH 441/860] [INJIWEB-1370] write test cases for userMetadataService class and remove the redundant method of updating the udpateAt field as we will update it irrespective of whether any field has change or not Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../mimoto/service/UserMetadataService.java | 28 ++--- .../service/UserMetadataServiceTest.java | 117 ++++++++++++++++++ 2 files changed, 124 insertions(+), 21 deletions(-) create mode 100644 src/test/java/io/mosip/mimoto/service/UserMetadataServiceTest.java diff --git a/src/main/java/io/mosip/mimoto/service/UserMetadataService.java b/src/main/java/io/mosip/mimoto/service/UserMetadataService.java index 63901a34a..59d50a87a 100644 --- a/src/main/java/io/mosip/mimoto/service/UserMetadataService.java +++ b/src/main/java/io/mosip/mimoto/service/UserMetadataService.java @@ -29,7 +29,6 @@ public UUID updateOrInsertUserMetadata(String providerSubjectId, String identity // Check if user exists Optional existingUser = userMetadataRepository.findByProviderSubjectId(providerSubjectId); - if (existingUser.isPresent()) { // If user exists, update metadata and return the userID updateUserMetadata(existingUser.get(), displayName, profilePictureUrl, email, now); @@ -42,22 +41,18 @@ public UUID updateOrInsertUserMetadata(String providerSubjectId, String identity private void updateUserMetadata(UserMetadata userMetadata, String displayName, String profilePictureUrl, String email, Timestamp now) { - boolean isUpdated = false; // Check and update fields if needed - isUpdated |= updateEncryptedField(userMetadata::getDisplayName, userMetadata::setDisplayName, displayName); - isUpdated |= updateEncryptedField(userMetadata::getProfilePictureUrl, userMetadata::setProfilePictureUrl, profilePictureUrl); - isUpdated |= updateEncryptedField(userMetadata::getEmail, userMetadata::setEmail, email); - isUpdated |= updateField(userMetadata::getUpdatedAt, userMetadata::setUpdatedAt, now); + checkAndUpdateEncryptedField(userMetadata::getDisplayName, userMetadata::setDisplayName, displayName); + checkAndUpdateEncryptedField(userMetadata::getProfilePictureUrl, userMetadata::setProfilePictureUrl, profilePictureUrl); + checkAndUpdateEncryptedField(userMetadata::getEmail, userMetadata::setEmail, email); - // If any field was updated, save the updated record and set the updated timestamp - if (isUpdated) { - userMetadata.setUpdatedAt(now); - userMetadataRepository.save(userMetadata); // Save the updated record - } + // update the timestamp even if there is no change in details as we want to track the last time the user has logged in + userMetadata.setUpdatedAt(now); + userMetadataRepository.save(userMetadata); // Save the updated record } - private boolean updateEncryptedField(Supplier getter, Consumer setter, String newValue) { + private boolean checkAndUpdateEncryptedField(Supplier getter, Consumer setter, String newValue) { String decryptedValue = encryptionDecryptionUtil.decrypt(getter.get(), "user_pii", "", ""); if (!decryptedValue.equals(newValue)) { setter.accept(encryptionDecryptionUtil.encrypt(newValue, "user_pii", "", "")); @@ -66,15 +61,6 @@ private boolean updateEncryptedField(Supplier getter, Consumer s return false; } - private boolean updateField(Supplier getter, Consumer setter, T newValue) { - T value = (T) getter.get(); - if (!value.equals(newValue)) { - setter.accept((T) newValue); - return true; - } - return false; - } - private UUID createUserMetadata(String providerSubjectId, String identityProvider, String displayName, String profilePictureUrl, String email, Timestamp now) { UserMetadata userMetadata = new UserMetadata(); diff --git a/src/test/java/io/mosip/mimoto/service/UserMetadataServiceTest.java b/src/test/java/io/mosip/mimoto/service/UserMetadataServiceTest.java new file mode 100644 index 000000000..de6df4c9e --- /dev/null +++ b/src/test/java/io/mosip/mimoto/service/UserMetadataServiceTest.java @@ -0,0 +1,117 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.controller.SessionController; +import io.mosip.mimoto.dbentity.UserMetadata; +import io.mosip.mimoto.repository.UserMetadataRepository; +import io.mosip.mimoto.util.EncryptionDecryptionUtil; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import java.sql.Timestamp; +import java.util.Optional; +import java.util.UUID; +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = SessionController.class) +@AutoConfigureMockMvc(addFilters = false) +@EnableWebMvc +public class UserMetadataServiceTest { + + @Mock + private UserMetadataRepository userMetadataRepository; + + @Mock + private EncryptionDecryptionUtil encryptionDecryptionUtil; + + @InjectMocks + private UserMetadataService userMetadataService; + + private String providerSubjectId,identityProvider,displayName,profilePictureUrl,email; + private Timestamp now; + private UserMetadata userMetadata; + private UUID userId; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + providerSubjectId = "provider123"; + identityProvider = "google"; + displayName = "Name 123"; + profilePictureUrl = "http://profile.pic"; + email = "name.123@example.com"; + now = new Timestamp(System.currentTimeMillis()); + userId = UUID.randomUUID(); + + userMetadata = new UserMetadata(); + userMetadata.setId(userId); + userMetadata.setProviderSubjectId(providerSubjectId); + userMetadata.setIdentityProvider(identityProvider); + userMetadata.setDisplayName(displayName); + userMetadata.setProfilePictureUrl(profilePictureUrl); + userMetadata.setEmail(email); + userMetadata.setCreatedAt(now); + userMetadata.setUpdatedAt(now); + } + + @Test + public void shouldUpdateUserMetadataForSameProviderSubjectIdAndDifferentDisplayName() { + String updatedDisplayName = "Name 124"; + when(userMetadataRepository.findByProviderSubjectId(providerSubjectId)).thenReturn(Optional.of(userMetadata)); + when(encryptionDecryptionUtil.decrypt(anyString(), any(), any(), any())).thenReturn(displayName, profilePictureUrl, email); + when(encryptionDecryptionUtil.encrypt(anyString(), any(), any(), any())).thenReturn(updatedDisplayName, profilePictureUrl, email); + + UUID result = userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, updatedDisplayName, profilePictureUrl, email); + + assertEquals(userId, result); + assertEquals(userMetadata.getDisplayName(),updatedDisplayName); + verify(userMetadataRepository, times(1)).save(userMetadata); + } + + @Test + public void shouldCreateNewUserMetadataIfUserRecordIsNotAvailableForReceivedProviderSubjectId() { + when(userMetadataRepository.findByProviderSubjectId(providerSubjectId)).thenReturn(Optional.empty()); + when(encryptionDecryptionUtil.encrypt(anyString(), any(), any(), any())).thenReturn(displayName, profilePictureUrl, email); + when(userMetadataRepository.save(any(UserMetadata.class))).thenAnswer(invocation -> { + UserMetadata savedUser = invocation.getArgument(0); + savedUser.setId(userId); + return savedUser; + }); + + UUID result = userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); + + assertEquals(userId, result); + verify(userMetadataRepository, times(1)).save(any(UserMetadata.class)); + } + + @Test + public void shouldUpdateTheUpdatedFieldEvenIfNoChangesInMetadataObserved() { + Timestamp timestampBeforeUpdate = userMetadata.getUpdatedAt(); + String updatedDisplayName = "Name 123"; + String updatedProfilePictureUrl = "http://profile.pic"; + String updatedEmail = "name.123@example.com"; + when(userMetadataRepository.findByProviderSubjectId(providerSubjectId)).thenReturn(Optional.of(userMetadata)); + when(encryptionDecryptionUtil.decrypt(anyString(), any(), any(), any())).thenReturn(displayName, profilePictureUrl, email); + when(encryptionDecryptionUtil.encrypt(anyString(), any(), any(), any())).thenReturn(displayName, profilePictureUrl, email); + UUID result = userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); + + ArgumentCaptor userMetadataCaptor = ArgumentCaptor.forClass(UserMetadata.class); + verify(userMetadataRepository).save(userMetadataCaptor.capture()); + + UserMetadata capturedUserMetadata = userMetadataCaptor.getValue(); + assertEquals(updatedDisplayName, capturedUserMetadata.getDisplayName()); + assertEquals(updatedProfilePictureUrl, capturedUserMetadata.getProfilePictureUrl()); + assertEquals(updatedEmail, capturedUserMetadata.getEmail()); + assertNotEquals(timestampBeforeUpdate, capturedUserMetadata.getUpdatedAt()); + assertEquals(userId, result); + } +} From 9f2062e3cff919b0cdf08612d3bd003f083b83c7 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Thu, 20 Mar 2025 13:25:06 +0530 Subject: [PATCH 442/860] [INJIWEB-1370] update user metadata script to store the id as string and return email also in the user profile response and update the test cases Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../inji_mimoto/ddl/mimoto-user_metadata.sql | 2 +- .../mimoto/controller/UserController.java | 12 +++---- .../mosip/mimoto/dbentity/UserMetadata.java | 10 +++--- .../repository/UserMetadataRepository.java | 4 +-- .../OAuth2AuthenticationSuccessHandler.java | 2 +- .../mimoto/service/UserMetadataService.java | 5 ++- .../mimoto/controller/UserControllerTest.java | 33 ++++--------------- .../service/UserMetadataServiceTest.java | 25 +++++++------- 8 files changed, 35 insertions(+), 58 deletions(-) diff --git a/db_scripts/inji_mimoto/ddl/mimoto-user_metadata.sql b/db_scripts/inji_mimoto/ddl/mimoto-user_metadata.sql index 9988fe18e..efcf16b95 100644 --- a/db_scripts/inji_mimoto/ddl/mimoto-user_metadata.sql +++ b/db_scripts/inji_mimoto/ddl/mimoto-user_metadata.sql @@ -9,7 +9,7 @@ -- ------------------------------------------------------------------------------------------ CREATE TABLE IF NOT EXISTS user_metadata ( - id UUID PRIMARY KEY, -- Primary key for the table + id VARCHAR(36) PRIMARY KEY, -- Primary key for the table provider_subject_id VARCHAR(255) UNIQUE NOT NULL, -- Unique identifier for the provider subject identity_provider VARCHAR(255) UNIQUE NOT NULL, -- Unique identifier for the identity provider display_name TEXT NOT NULL, -- Display name of the user diff --git a/src/main/java/io/mosip/mimoto/controller/UserController.java b/src/main/java/io/mosip/mimoto/controller/UserController.java index 2dd71bcab..9113a22ea 100644 --- a/src/main/java/io/mosip/mimoto/controller/UserController.java +++ b/src/main/java/io/mosip/mimoto/controller/UserController.java @@ -34,16 +34,14 @@ public ResponseEntity> getUserProfile(Authentication aut try { ResponseWrapper responseWrapper = new ResponseWrapper<>(); String identityProvider = (String) session.getAttribute("clientRegistrationId"); - if (identityProvider.isEmpty()) { - throw new OAuth2AuthenticationException(USER_METADATA_FETCH_EXCEPTION.getCode(), "The Identity provider in the authentication object is invalid", HttpStatus.BAD_REQUEST); - } UserMetadata userMetadata = fetchUserMetadata(authentication.getName()); validateIdentityProvider(userMetadata, identityProvider); - String userDetails = String.format("{\"displayName\": \"%s\", \"profilePictureUrl\": \"%s\"}", + String userDetails = String.format("{\"displayName\": \"%s\", \"profilePictureUrl\": \"%s\", \"email\": \"%s\"}", encryptionDecryptionUtill.decrypt(userMetadata.getDisplayName(), "user_pii", "", ""), - encryptionDecryptionUtill.decrypt(userMetadata.getProfilePictureUrl(), "user_pii", "", "")); + encryptionDecryptionUtill.decrypt(userMetadata.getProfilePictureUrl(), "user_pii", "", ""), + encryptionDecryptionUtill.decrypt(userMetadata.getEmail(), "user_pii", "", "")); responseWrapper.setResponse(userDetails); return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); } catch (OAuth2AuthenticationException exception) { @@ -61,8 +59,8 @@ public ResponseEntity> getUserProfile(Authentication aut } - private UserMetadata fetchUserMetadata(String providerSubjectId) throws OAuth2AuthenticationException { - return userMetadataRepository.findByProviderSubjectId(providerSubjectId) + private UserMetadata fetchUserMetadata(String userId) throws OAuth2AuthenticationException { + return userMetadataRepository.findByProviderSubjectId(userId) .orElseThrow(() -> new OAuth2AuthenticationException(USER_METADATA_FETCH_EXCEPTION.getCode(), "User not found. Please check your credentials or register", HttpStatus.NOT_FOUND)); } diff --git a/src/main/java/io/mosip/mimoto/dbentity/UserMetadata.java b/src/main/java/io/mosip/mimoto/dbentity/UserMetadata.java index a75f89bde..bd0374762 100644 --- a/src/main/java/io/mosip/mimoto/dbentity/UserMetadata.java +++ b/src/main/java/io/mosip/mimoto/dbentity/UserMetadata.java @@ -3,7 +3,7 @@ import jakarta.persistence.*; import lombok.Getter; import lombok.Setter; -import java.util.UUID; +import org.hibernate.annotations.GenericGenerator; @Entity @Table(name = "user_metadata") @@ -12,8 +12,10 @@ public class UserMetadata { @Id - @GeneratedValue(strategy = GenerationType.AUTO) - private UUID id; + @GeneratedValue(generator = "uuid") + @GenericGenerator(name = "uuid", strategy = "org.hibernate.id.UUIDGenerator") + @Column(length = 36, updatable = false, nullable = false) + private String id; @Column(name = "provider_subject_id", nullable = false, unique = true) private String providerSubjectId; @@ -38,7 +40,5 @@ public class UserMetadata { @Column(name = "updated_at") private java.sql.Timestamp updatedAt; - - // Getters and Setters } diff --git a/src/main/java/io/mosip/mimoto/repository/UserMetadataRepository.java b/src/main/java/io/mosip/mimoto/repository/UserMetadataRepository.java index e73319f41..1007141ab 100644 --- a/src/main/java/io/mosip/mimoto/repository/UserMetadataRepository.java +++ b/src/main/java/io/mosip/mimoto/repository/UserMetadataRepository.java @@ -3,11 +3,9 @@ import io.mosip.mimoto.dbentity.UserMetadata; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; - import java.util.Optional; -import java.util.UUID; @Repository -public interface UserMetadataRepository extends JpaRepository { +public interface UserMetadataRepository extends JpaRepository { Optional findByProviderSubjectId(String providerSubjectId); } diff --git a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java index 4e8b1a261..6dc1e02df 100644 --- a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java +++ b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java @@ -64,7 +64,7 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo // Call the service to update or insert the user metadata in the database try { - UUID userId = userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); + String userId = userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); session.setAttribute("userId", userId); response.sendRedirect(injiWebUrl + "/login?status=success"); } catch (DataAccessResourceFailureException exception) { diff --git a/src/main/java/io/mosip/mimoto/service/UserMetadataService.java b/src/main/java/io/mosip/mimoto/service/UserMetadataService.java index 59d50a87a..ac1b96ada 100644 --- a/src/main/java/io/mosip/mimoto/service/UserMetadataService.java +++ b/src/main/java/io/mosip/mimoto/service/UserMetadataService.java @@ -10,7 +10,6 @@ import java.util.Optional; import java.util.function.Consumer; import java.util.function.Supplier; -import java.util.UUID; @Service public class UserMetadataService { @@ -21,7 +20,7 @@ public class UserMetadataService { @Autowired private EncryptionDecryptionUtil encryptionDecryptionUtil; - public UUID updateOrInsertUserMetadata(String providerSubjectId, String identityProvider, + public String updateOrInsertUserMetadata(String providerSubjectId, String identityProvider, String displayName, String profilePictureUrl, String email) { // Compute current time once @@ -61,7 +60,7 @@ private boolean checkAndUpdateEncryptedField(Supplier getter, Consumer userMetadataCaptor = ArgumentCaptor.forClass(UserMetadata.class); verify(userMetadataRepository).save(userMetadataCaptor.capture()); UserMetadata capturedUserMetadata = userMetadataCaptor.getValue(); + Timestamp after = capturedUserMetadata.getUpdatedAt(); assertEquals(updatedDisplayName, capturedUserMetadata.getDisplayName()); assertEquals(updatedProfilePictureUrl, capturedUserMetadata.getProfilePictureUrl()); assertEquals(updatedEmail, capturedUserMetadata.getEmail()); - assertNotEquals(timestampBeforeUpdate, capturedUserMetadata.getUpdatedAt()); - assertEquals(userId, result); + assertNotEquals(timestampBeforeUpdate, after); + assertEquals(userId, storedUserId); } } From a87ef627ae5a567bdee1470c0eacfbf7457b8bf2 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Thu, 20 Mar 2025 16:49:01 +0530 Subject: [PATCH 443/860] [INJIWEB-1370] use the combination of providerSubjectId and idenityProvider to decide whether the new user entry should be created in the database or not and udpate test cases and the db_script for the same Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../inji_mimoto/ddl/mimoto-user_metadata.sql | 4 ++-- .../mimoto/controller/UserController.java | 13 +++------- .../mosip/mimoto/dbentity/UserMetadata.java | 2 +- .../repository/UserMetadataRepository.java | 2 +- .../mimoto/service/UserMetadataService.java | 2 +- .../mimoto/controller/UserControllerTest.java | 24 +++++++------------ .../service/UserMetadataServiceTest.java | 6 ++--- 7 files changed, 19 insertions(+), 34 deletions(-) diff --git a/db_scripts/inji_mimoto/ddl/mimoto-user_metadata.sql b/db_scripts/inji_mimoto/ddl/mimoto-user_metadata.sql index efcf16b95..12244bb0b 100644 --- a/db_scripts/inji_mimoto/ddl/mimoto-user_metadata.sql +++ b/db_scripts/inji_mimoto/ddl/mimoto-user_metadata.sql @@ -10,8 +10,8 @@ CREATE TABLE IF NOT EXISTS user_metadata ( id VARCHAR(36) PRIMARY KEY, -- Primary key for the table - provider_subject_id VARCHAR(255) UNIQUE NOT NULL, -- Unique identifier for the provider subject - identity_provider VARCHAR(255) UNIQUE NOT NULL, -- Unique identifier for the identity provider + provider_subject_id VARCHAR(255) NOT NULL, -- Unique identifier for the provider subject + identity_provider VARCHAR(255) NOT NULL, -- Unique identifier for the identity provider display_name TEXT NOT NULL, -- Display name of the user profile_picture_url TEXT, -- URL of the user's profile picture phone_number TEXT, -- Phone number of the user diff --git a/src/main/java/io/mosip/mimoto/controller/UserController.java b/src/main/java/io/mosip/mimoto/controller/UserController.java index 9113a22ea..3c0288311 100644 --- a/src/main/java/io/mosip/mimoto/controller/UserController.java +++ b/src/main/java/io/mosip/mimoto/controller/UserController.java @@ -35,8 +35,7 @@ public ResponseEntity> getUserProfile(Authentication aut ResponseWrapper responseWrapper = new ResponseWrapper<>(); String identityProvider = (String) session.getAttribute("clientRegistrationId"); - UserMetadata userMetadata = fetchUserMetadata(authentication.getName()); - validateIdentityProvider(userMetadata, identityProvider); + UserMetadata userMetadata = fetchUserMetadata(authentication.getName(), identityProvider); String userDetails = String.format("{\"displayName\": \"%s\", \"profilePictureUrl\": \"%s\", \"email\": \"%s\"}", encryptionDecryptionUtill.decrypt(userMetadata.getDisplayName(), "user_pii", "", ""), @@ -59,14 +58,8 @@ public ResponseEntity> getUserProfile(Authentication aut } - private UserMetadata fetchUserMetadata(String userId) throws OAuth2AuthenticationException { - return userMetadataRepository.findByProviderSubjectId(userId) + private UserMetadata fetchUserMetadata(String providerSubjectId, String identityProvider) throws OAuth2AuthenticationException { + return userMetadataRepository.findByProviderSubjectIdAndIdentityProvider(providerSubjectId, identityProvider) .orElseThrow(() -> new OAuth2AuthenticationException(USER_METADATA_FETCH_EXCEPTION.getCode(), "User not found. Please check your credentials or register", HttpStatus.NOT_FOUND)); } - - private void validateIdentityProvider(UserMetadata userMetadata, String identityProvider) throws OAuth2AuthenticationException { - if (!userMetadata.getIdentityProvider().equals(identityProvider)) { - throw new OAuth2AuthenticationException(USER_METADATA_FETCH_EXCEPTION.getCode(), "Identity provider in session and user database doesn't match", HttpStatus.INTERNAL_SERVER_ERROR); - } - } } diff --git a/src/main/java/io/mosip/mimoto/dbentity/UserMetadata.java b/src/main/java/io/mosip/mimoto/dbentity/UserMetadata.java index bd0374762..5f824a157 100644 --- a/src/main/java/io/mosip/mimoto/dbentity/UserMetadata.java +++ b/src/main/java/io/mosip/mimoto/dbentity/UserMetadata.java @@ -17,7 +17,7 @@ public class UserMetadata { @Column(length = 36, updatable = false, nullable = false) private String id; - @Column(name = "provider_subject_id", nullable = false, unique = true) + @Column(name = "provider_subject_id", nullable = false) private String providerSubjectId; @Column(name = "identity_provider", nullable = false) diff --git a/src/main/java/io/mosip/mimoto/repository/UserMetadataRepository.java b/src/main/java/io/mosip/mimoto/repository/UserMetadataRepository.java index 1007141ab..639eddd21 100644 --- a/src/main/java/io/mosip/mimoto/repository/UserMetadataRepository.java +++ b/src/main/java/io/mosip/mimoto/repository/UserMetadataRepository.java @@ -7,5 +7,5 @@ @Repository public interface UserMetadataRepository extends JpaRepository { - Optional findByProviderSubjectId(String providerSubjectId); + Optional findByProviderSubjectIdAndIdentityProvider(String providerSubjectId, String identityProvider); } diff --git a/src/main/java/io/mosip/mimoto/service/UserMetadataService.java b/src/main/java/io/mosip/mimoto/service/UserMetadataService.java index ac1b96ada..1ab8345ba 100644 --- a/src/main/java/io/mosip/mimoto/service/UserMetadataService.java +++ b/src/main/java/io/mosip/mimoto/service/UserMetadataService.java @@ -27,7 +27,7 @@ public String updateOrInsertUserMetadata(String providerSubjectId, String identi Timestamp now = new Timestamp(System.currentTimeMillis()); // Check if user exists - Optional existingUser = userMetadataRepository.findByProviderSubjectId(providerSubjectId); + Optional existingUser = userMetadataRepository.findByProviderSubjectIdAndIdentityProvider(providerSubjectId,identityProvider); if (existingUser.isPresent()) { // If user exists, update metadata and return the userID updateUserMetadata(existingUser.get(), displayName, profilePictureUrl, email, now); diff --git a/src/test/java/io/mosip/mimoto/controller/UserControllerTest.java b/src/test/java/io/mosip/mimoto/controller/UserControllerTest.java index a687b1969..0dd9e5eed 100644 --- a/src/test/java/io/mosip/mimoto/controller/UserControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/UserControllerTest.java @@ -50,10 +50,14 @@ public class UserControllerTest { private UserMetadata userMetadata; MockHttpSession mockSession; + + String identityProvider; + @Before public void setUp() { + identityProvider = "google"; userMetadata = new UserMetadata(); - userMetadata.setIdentityProvider("google"); + userMetadata.setIdentityProvider(identityProvider); userMetadata.setDisplayName("encryptedName"); userMetadata.setProfilePictureUrl("encryptedUrl"); userMetadata.setEmail("encryptedEmail"); @@ -63,7 +67,7 @@ public void setUp() { mockSession = new MockHttpSession(); mockSession.setAttribute("clientRegistrationId", "google"); mockSession.setAttribute("userId", "user123"); - when(userMetadataRepository.findByProviderSubjectId("user123")).thenReturn(Optional.of(userMetadata)); + when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider("user123",identityProvider)).thenReturn(Optional.of(userMetadata)); when(encryptionDecryptionUtil.decrypt("encryptedName", "user_pii", "", "")).thenReturn("Name 123"); when(encryptionDecryptionUtil.decrypt("encryptedUrl", "user_pii", "", "")).thenReturn("https://profile.com/pic.jpg"); when(encryptionDecryptionUtil.decrypt("encryptedEmail", "user_pii", "", "")).thenReturn("name123@gmail.com"); @@ -79,7 +83,7 @@ public void shouldReturnTheUserDataForValidValues() throws Exception { @Test public void shouldThrowExceptionForAInvalidUser() throws Exception { - when(userMetadataRepository.findByProviderSubjectId("user123")).thenReturn(Optional.empty()); + when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider("user123",identityProvider)).thenReturn(Optional.empty()); mockMvc.perform(MockMvcRequestBuilders.get("/secure/user/profile").accept(MediaType.APPLICATION_JSON) .session(mockSession) @@ -91,7 +95,7 @@ public void shouldThrowExceptionForAInvalidUser() throws Exception { @Test public void shouldThrowExceptionIfAnyOtherErrorOccurredWhileFetchingUserData() throws Exception { - when(userMetadataRepository.findByProviderSubjectId("user123")).thenReturn(Optional.of(userMetadata)); + when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider("user123",identityProvider)).thenReturn(Optional.of(userMetadata)); when(encryptionDecryptionUtil.decrypt("encryptedName", "user_pii", "", "")).thenThrow(new RuntimeException("Failure occurred while decrypting the name")); mockMvc.perform(MockMvcRequestBuilders.get("/secure/user/profile").accept(MediaType.APPLICATION_JSON) @@ -101,16 +105,4 @@ public void shouldThrowExceptionIfAnyOtherErrorOccurredWhileFetchingUserData() t .andExpect(jsonPath("$.errors[0].errorCode").value("RESIDENT-APP-049")) .andExpect(jsonPath("$.errors[0].errorMessage").value("Failed to fetch the User metadata from database due to : Failure occurred while decrypting the name")); } - - @Test - public void shouldThrowExceptionIfIdentityProviderInSessionMismatchWithValueStoredInUserRecord() throws Exception { - mockSession.setAttribute("clientRegistrationId", "facebook"); - - mockMvc.perform(MockMvcRequestBuilders.get("/secure/user/profile").accept(MediaType.APPLICATION_JSON) - .session(mockSession) - .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")).session(mockSession)) - .andExpect(MockMvcResultMatchers.status().isInternalServerError()) - .andExpect(jsonPath("$.errors[0].errorCode").value("RESIDENT-APP-049")) - .andExpect(jsonPath("$.errors[0].errorMessage").value("Identity provider in session and user database doesn't match")); - } } \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/UserMetadataServiceTest.java b/src/test/java/io/mosip/mimoto/service/UserMetadataServiceTest.java index 3566e3536..29defa900 100644 --- a/src/test/java/io/mosip/mimoto/service/UserMetadataServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/UserMetadataServiceTest.java @@ -65,7 +65,7 @@ public void setUp() { @Test public void shouldUpdateUserMetadataForSameProviderSubjectIdAndDifferentDisplayName() { String updatedDisplayName = "Name 124"; - when(userMetadataRepository.findByProviderSubjectId(providerSubjectId)).thenReturn(Optional.of(userMetadata)); + when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider(providerSubjectId, identityProvider)).thenReturn(Optional.of(userMetadata)); when(encryptionDecryptionUtil.decrypt(anyString(), any(), any(), any())).thenReturn(displayName, profilePictureUrl, email); when(encryptionDecryptionUtil.encrypt(anyString(), any(), any(), any())).thenReturn(updatedDisplayName, profilePictureUrl, email); @@ -78,7 +78,7 @@ public void shouldUpdateUserMetadataForSameProviderSubjectIdAndDifferentDisplayN @Test public void shouldCreateNewUserMetadataIfUserRecordIsNotAvailableForReceivedProviderSubjectId() { - when(userMetadataRepository.findByProviderSubjectId(providerSubjectId)).thenReturn(Optional.empty()); + when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider(providerSubjectId, identityProvider)).thenReturn(Optional.empty()); when(encryptionDecryptionUtil.encrypt(anyString(), any(), any(), any())).thenReturn(displayName, profilePictureUrl, email); when(userMetadataRepository.save(any(UserMetadata.class))).thenAnswer(invocation -> { UserMetadata savedUser = invocation.getArgument(0); @@ -98,7 +98,7 @@ public void shouldUpdateTheUpdatedFieldEvenIfNoChangesInMetadataObserved() throw String updatedDisplayName = "Name 123"; String updatedProfilePictureUrl = "http://profile.pic"; String updatedEmail = "name.123@example.com"; - when(userMetadataRepository.findByProviderSubjectId(providerSubjectId)).thenReturn(Optional.of(userMetadata)); + when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider(providerSubjectId, identityProvider)).thenReturn(Optional.of(userMetadata)); when(encryptionDecryptionUtil.decrypt(anyString(), any(), any(), any())).thenReturn(displayName, profilePictureUrl, email); when(encryptionDecryptionUtil.encrypt(anyString(), any(), any(), any())).thenReturn(displayName, profilePictureUrl, email); Thread.sleep(1); From 830cfe519494964ce9a1128cae3666ef9dfc889b Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Fri, 21 Mar 2025 14:33:23 +0530 Subject: [PATCH 444/860] MOSIP-40887 - Remove keycloak user post execution (#646) * MOSIP-39047 Signed-off-by: Nandhukumar * MOSIP-39047 Signed-off-by: Nandhukumar * MOSIP-39047 Signed-off-by: Nandhukumar * MOSIP-40887 Signed-off-by: Nandhukumar --------- Signed-off-by: Nandhukumar --- .../testrig/apirig/mimoto/testrunner/MosipTestRunner.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java index 2c0d6e495..8a1ebeaef 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java @@ -107,6 +107,9 @@ public static void main(String[] arg) { } catch (Exception e) { LOGGER.error("Exception " + e.getMessage()); } + + KeycloakUserManager.removeUser(); + KeycloakUserManager.closeKeycloakInstance(); OTPListener.bTerminate = true; From ecd44cf375fe023ea3339d0f00a20d31fafc80a4 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 24 Mar 2025 09:38:33 +0530 Subject: [PATCH 445/860] [INJIMOB-3140] generate the id of each user as uuid and store it as a string in the java layer itself Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- src/main/java/io/mosip/mimoto/dbentity/UserMetadata.java | 3 --- .../java/io/mosip/mimoto/service/UserMetadataService.java | 5 ++++- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/dbentity/UserMetadata.java b/src/main/java/io/mosip/mimoto/dbentity/UserMetadata.java index 5f824a157..ba0f54d64 100644 --- a/src/main/java/io/mosip/mimoto/dbentity/UserMetadata.java +++ b/src/main/java/io/mosip/mimoto/dbentity/UserMetadata.java @@ -3,7 +3,6 @@ import jakarta.persistence.*; import lombok.Getter; import lombok.Setter; -import org.hibernate.annotations.GenericGenerator; @Entity @Table(name = "user_metadata") @@ -12,8 +11,6 @@ public class UserMetadata { @Id - @GeneratedValue(generator = "uuid") - @GenericGenerator(name = "uuid", strategy = "org.hibernate.id.UUIDGenerator") @Column(length = 36, updatable = false, nullable = false) private String id; diff --git a/src/main/java/io/mosip/mimoto/service/UserMetadataService.java b/src/main/java/io/mosip/mimoto/service/UserMetadataService.java index 1ab8345ba..af52e35b3 100644 --- a/src/main/java/io/mosip/mimoto/service/UserMetadataService.java +++ b/src/main/java/io/mosip/mimoto/service/UserMetadataService.java @@ -8,6 +8,7 @@ import java.sql.Timestamp; import java.util.Optional; +import java.util.UUID; import java.util.function.Consumer; import java.util.function.Supplier; @@ -27,7 +28,7 @@ public String updateOrInsertUserMetadata(String providerSubjectId, String identi Timestamp now = new Timestamp(System.currentTimeMillis()); // Check if user exists - Optional existingUser = userMetadataRepository.findByProviderSubjectIdAndIdentityProvider(providerSubjectId,identityProvider); + Optional existingUser = userMetadataRepository.findByProviderSubjectIdAndIdentityProvider(providerSubjectId, identityProvider); if (existingUser.isPresent()) { // If user exists, update metadata and return the userID updateUserMetadata(existingUser.get(), displayName, profilePictureUrl, email, now); @@ -63,6 +64,8 @@ private boolean checkAndUpdateEncryptedField(Supplier getter, Consumer Date: Mon, 24 Mar 2025 13:38:19 +0530 Subject: [PATCH 446/860] [INJIWEB-1370] change the user profile endpoint to return response as json and update the test cases Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../java/io/mosip/mimoto/config/Config.java | 12 ++++++---- .../mimoto/controller/UserController.java | 11 +++++----- .../mimoto/dto/mimoto/UserMetadataDTO.java | 22 +++++++++++++++++++ .../mimoto/controller/UserControllerTest.java | 8 ++++++- 4 files changed, 43 insertions(+), 10 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/UserMetadataDTO.java diff --git a/src/main/java/io/mosip/mimoto/config/Config.java b/src/main/java/io/mosip/mimoto/config/Config.java index 9fda8480e..9b563db16 100644 --- a/src/main/java/io/mosip/mimoto/config/Config.java +++ b/src/main/java/io/mosip/mimoto/config/Config.java @@ -147,10 +147,14 @@ private void setupOauth2Config(HttpSecurity http, SessionRepository sessionRepos .clearAuthentication(true) ) .authorizeHttpRequests(authz -> authz - // Define secured endpoints - .requestMatchers("/secure/**").authenticated() // Secure endpoints that require login - // Default authorization rule for all other requests - .anyRequest().permitAll() + // make existing endpoints public + .requestMatchers("/safetynet/**", "/allProperties", "/credentials/**", + "/credentialshare/**","/binding-otp","/wallet-binding","/get-token/**", + "/issuers","/issuers/**","/authorize","/req/otp","/vid","/req/auth/**", + "/req/individualId/otp","/aid/get-individual-id","/session/status", + "/verifiers").permitAll() + // Apply the default authorization rule to all other requests, ensuring authentication is required. + .anyRequest().authenticated() ).sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)); } diff --git a/src/main/java/io/mosip/mimoto/controller/UserController.java b/src/main/java/io/mosip/mimoto/controller/UserController.java index 3c0288311..25c25e6d5 100644 --- a/src/main/java/io/mosip/mimoto/controller/UserController.java +++ b/src/main/java/io/mosip/mimoto/controller/UserController.java @@ -2,6 +2,7 @@ import io.mosip.mimoto.core.http.ResponseWrapper; import io.mosip.mimoto.dbentity.UserMetadata; +import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; import io.mosip.mimoto.exception.OAuth2AuthenticationException; import io.mosip.mimoto.repository.UserMetadataRepository; import io.mosip.mimoto.util.EncryptionDecryptionUtil; @@ -30,18 +31,18 @@ public class UserController { private EncryptionDecryptionUtil encryptionDecryptionUtill; @GetMapping("/profile") - public ResponseEntity> getUserProfile(Authentication authentication, HttpSession session) { + public ResponseEntity> getUserProfile(Authentication authentication, HttpSession session) { try { - ResponseWrapper responseWrapper = new ResponseWrapper<>(); + ResponseWrapper responseWrapper = new ResponseWrapper<>(); String identityProvider = (String) session.getAttribute("clientRegistrationId"); UserMetadata userMetadata = fetchUserMetadata(authentication.getName(), identityProvider); - String userDetails = String.format("{\"displayName\": \"%s\", \"profilePictureUrl\": \"%s\", \"email\": \"%s\"}", - encryptionDecryptionUtill.decrypt(userMetadata.getDisplayName(), "user_pii", "", ""), + UserMetadataDTO userMetadataDTO = new UserMetadataDTO(encryptionDecryptionUtill.decrypt(userMetadata.getDisplayName(), "user_pii", "", ""), encryptionDecryptionUtill.decrypt(userMetadata.getProfilePictureUrl(), "user_pii", "", ""), encryptionDecryptionUtill.decrypt(userMetadata.getEmail(), "user_pii", "", "")); - responseWrapper.setResponse(userDetails); + responseWrapper.setResponse(userMetadataDTO); + return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); } catch (OAuth2AuthenticationException exception) { log.error("Error occurred while retrieving user profile : ", exception); diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/UserMetadataDTO.java b/src/main/java/io/mosip/mimoto/dto/mimoto/UserMetadataDTO.java new file mode 100644 index 000000000..bfa0321fe --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/UserMetadataDTO.java @@ -0,0 +1,22 @@ +package io.mosip.mimoto.dto.mimoto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class UserMetadataDTO { + @JsonProperty("display_name") + @Schema(description = "Display name of the user provided by the Identity Provider") + private String displayName; + + @JsonProperty("profile_picture_url") + @Schema(description = "Profile picture of the user provided by the Identity Provider") + private String profilePictureUrl; + + @JsonProperty("email") + @Schema(description = "Email of the user provided by the Identity Provider") + private String email; +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/controller/UserControllerTest.java b/src/test/java/io/mosip/mimoto/controller/UserControllerTest.java index 0dd9e5eed..fc9679163 100644 --- a/src/test/java/io/mosip/mimoto/controller/UserControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/UserControllerTest.java @@ -3,6 +3,7 @@ import io.mosip.mimoto.dbentity.UserMetadata; import io.mosip.mimoto.repository.UserMetadataRepository; import io.mosip.mimoto.util.EncryptionDecryptionUtil; +import lombok.extern.slf4j.Slf4j; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -78,7 +79,11 @@ public void shouldReturnTheUserDataForValidValues() throws Exception { mockMvc.perform(MockMvcRequestBuilders.get("/secure/user/profile").accept(MediaType.APPLICATION_JSON) .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")).session(mockSession)) .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.jsonPath("$.response").value("{\"displayName\": \"Name 123\", \"profilePictureUrl\": \"https://profile.com/pic.jpg\", \"email\": \"name123@gmail.com\"}")); + .andExpect(MockMvcResultMatchers.jsonPath("$.response.display_name").value("Name 123")) + .andExpect(MockMvcResultMatchers.jsonPath("$.response.profile_picture_url").value("https://profile.com/pic.jpg")) + .andExpect(MockMvcResultMatchers.jsonPath("$.response.email").value("name123@gmail.com")) + .andExpect(jsonPath("$.errors").isArray()) + .andExpect(jsonPath("$.errors").isEmpty()); } @Test @@ -89,6 +94,7 @@ public void shouldThrowExceptionForAInvalidUser() throws Exception { .session(mockSession) .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")).session(mockSession)) .andExpect(MockMvcResultMatchers.status().isNotFound()) + .andExpect(jsonPath("$.response").doesNotExist()) .andExpect(jsonPath("$.errors[0].errorCode").value("RESIDENT-APP-049")) .andExpect(jsonPath("$.errors[0].errorMessage").value("User not found. Please check your credentials or register")); } From e74852ba1f1a1b695febe6681697cc7072d1cf65 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 24 Mar 2025 15:54:18 +0530 Subject: [PATCH 447/860] [INJIMOB-3140] update logic in issuersValidConfig file to stop the validation as soon as an error is found for any issuer (#648) * [INJIMOB-3140] in issuersValiationConfig file throw the exception immediately if any validations fail for an issuer rather than proceeding further to check for other issuers Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIMOB-3140] add missing annotations in the issuerDTO file and write test cases for issuerValidationConfig file Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --------- Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../config/IssuersValidationConfig.java | 66 +++++++++------- .../java/io/mosip/mimoto/dto/IssuerDTO.java | 3 + .../config/IssuersValidationConfigTest.java | 75 +++++++++++++++++++ .../io/mosip/mimoto/util/TestUtilities.java | 41 +++++++++- 4 files changed, 156 insertions(+), 29 deletions(-) create mode 100644 src/test/java/io/mosip/mimoto/config/IssuersValidationConfigTest.java diff --git a/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java b/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java index de18e7b29..b706846b1 100644 --- a/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java +++ b/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.config; +import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.IssuersDTO; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.AuthorizationServerWellknownResponseException; @@ -12,10 +13,10 @@ import org.springframework.stereotype.Component; import org.springframework.validation.BeanPropertyBindingResult; import org.springframework.validation.Errors; +import org.springframework.validation.FieldError; import org.springframework.validation.Validator; import java.io.IOException; -import java.util.HashSet; -import java.util.Set; +import java.util.*; import java.util.concurrent.atomic.AtomicReference; @Slf4j @@ -23,61 +24,74 @@ public class IssuersValidationConfig implements ApplicationRunner { @Autowired IssuersService issuersService; - @Autowired private Validator validator; - private final String VALIDATION_ERROR_MSG = "\n\nValidation failed in Mimoto-issuers-config.json:"; - @Override public void run(ApplicationArguments args) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { log.info("Validation for mimoto-issuers-config.json STARTED"); - AtomicReference errors = new AtomicReference<>(); - AtomicReference fieldErrors = new AtomicReference<>(""); + List allErrors = new ArrayList<>(); AtomicReference> credentialIssuers = new AtomicReference<>(new HashSet<>()); IssuersDTO issuerDTOList = null; try { issuerDTOList = issuersService.getAllIssuers(); } catch (Exception e) { - log.error(VALIDATION_ERROR_MSG , e); + log.error(VALIDATION_ERROR_MSG, e); throw new RuntimeException(VALIDATION_ERROR_MSG); } if (issuerDTOList != null) { - issuerDTOList.getIssuers().forEach(issuerDTO -> { + for (int index = 0; index < issuerDTOList.getIssuers().size(); index++) { + IssuerDTO issuerDTO = issuerDTOList.getIssuers().get(index); if (!issuerDTO.getProtocol().equals("OTP")) { - errors.set(new BeanPropertyBindingResult(issuerDTO, "issuerDTO")); - validator.validate(issuerDTO, errors.get()); + Errors errors = new BeanPropertyBindingResult(issuerDTO, "issuerDTO"); + validator.validate(issuerDTO, errors); String issuerId = issuerDTO.getIssuer_id(); - if (errors.get() != null && errors.get().hasErrors()) { - log.error("{} for issuer {}: {}", VALIDATION_ERROR_MSG, issuerId, errors.get()); + boolean issuerHasErrors = false; + + StringBuilder issuerErrors = new StringBuilder(); + issuerErrors.append(String.format("Errors for issuer at index: %d with issuerId - %s%n", index, issuerId)); + + if (errors.hasErrors()) { + issuerHasErrors = true; + errors.getFieldErrors().stream() + .sorted(Comparator.comparing(FieldError::getField)) + .forEach(error -> issuerErrors.append(String.format("- %s %s%n", error.getField(), error.getDefaultMessage()))); + } + String[] tokenEndpointArray = issuerDTO.getToken_endpoint().split("/"); Set currentIssuers = credentialIssuers.get(); + if (!currentIssuers.add(issuerId)) { - log.error(VALIDATION_ERROR_MSG + "duplicate value found " + issuerId); - throw new RuntimeException(VALIDATION_ERROR_MSG); + issuerHasErrors = true; + issuerErrors.append("- Duplicate value found for the issuerId. More than one issuer is having the same issuerId").append("\n"); } + if (!tokenEndpointArray[tokenEndpointArray.length - 1].equals(issuerId)) { - log.error(VALIDATION_ERROR_MSG + "TokenEndpoint does not match with the credential issuer " + issuerId); - throw new RuntimeException(VALIDATION_ERROR_MSG); + issuerHasErrors = true; + issuerErrors.append("- TokenEndpoint does not match with the credential issuerId").append("\n"); + } + + if (issuerHasErrors) { + allErrors.add(issuerErrors.toString()); } + credentialIssuers.set(currentIssuers); } - }); + }; } - - if (errors.get() != null && errors.get().hasErrors()) { - errors.get().getFieldErrors().forEach(error -> { - fieldErrors.set(fieldErrors.get() + error.getField() + " " + error.getDefaultMessage() + "\n"); - }); - log.error(VALIDATION_ERROR_MSG + fieldErrors.get()); - throw new RuntimeException(VALIDATION_ERROR_MSG); + if (!allErrors.isEmpty()) { + StringBuilder fieldErrorsBuilder = new StringBuilder(); + allErrors.forEach(fieldErrorsBuilder::append); + String fieldErrorsString = VALIDATION_ERROR_MSG + "\n" + fieldErrorsBuilder; + log.error(fieldErrorsString); + throw new RuntimeException(fieldErrorsString); } log.info("Validation for mimoto-issuers-config.json COMPLETED"); } -} +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java index b03b87a97..665314815 100644 --- a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java @@ -38,6 +38,8 @@ public class IssuerDTO { @NotBlank @Schema(description = "Authorization Audience for retrieving Token from token endpoint") String authorization_audience; + @URL + @NotBlank @Schema(description = "Mimoto Token Endpoint Fetching the Token From Authorization Server with Client Assertion") String token_endpoint; @URL @@ -55,6 +57,7 @@ public class IssuerDTO { @NotBlank @Schema(description = "Unique Identifier of the Issuer") String credential_issuer; + @URL @NotBlank @Schema(description = "Credential Issuer Host") String credential_issuer_host; diff --git a/src/test/java/io/mosip/mimoto/config/IssuersValidationConfigTest.java b/src/test/java/io/mosip/mimoto/config/IssuersValidationConfigTest.java new file mode 100644 index 000000000..fb9adce03 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/config/IssuersValidationConfigTest.java @@ -0,0 +1,75 @@ +package io.mosip.mimoto.config; + +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.dto.IssuersDTO; +import io.mosip.mimoto.service.impl.IssuersServiceImpl; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; +import java.util.List; + +import static io.mosip.mimoto.util.TestUtilities.*; +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = {IssuersValidationConfig.class, LocalValidatorFactoryBean.class, ObjectMapper.class}) +public class IssuersValidationConfigTest { + + @Autowired + private IssuersValidationConfig issuersValidationConfig; + + @MockBean + private IssuersServiceImpl issuersService; + + IssuersDTO issuers = new IssuersDTO(); + + @Test + public void shouldNotThrowAnyExceptionForValidIssuersConfig() { + try { + issuers.setIssuers(List.of(getIssuerConfigDTO("Issuer8"), getIssuerConfigDTO("Issuer7"))); + when(issuersService.getAllIssuers()).thenReturn(issuers); + + issuersValidationConfig.run(mock(ApplicationArguments.class)); + } catch (Exception e) { + Assert.fail("Exception message: " + e.getMessage()); + } + } + + @Test + public void shouldThrowExceptionIfTheFieldValuesOfIssuerAreNotSatisfyingNotBlankAnnotation() { + try { + issuers.setIssuers(List.of(getIssuerConfigDTOWithInvalidFieldValues("Issuer1", true, false), getIssuerConfigDTOWithInvalidFieldValues("Issuer2",true,false))); + when(issuersService.getAllIssuers()).thenReturn(issuers); + + issuersValidationConfig.run(mock(ApplicationArguments.class)); + } catch (Exception exception) { + String expectedErrorMsg = "\n\nValidation failed in Mimoto-issuers-config.json:\nErrors for issuer at index: 0 with issuerId - \n- authorization_audience must not be blank\n- client_alias must not be blank\n- client_id must not be blank\n- credential_issuer must not be blank\n- credential_issuer_host must not be blank\n- display[0].description must not be blank\n- display[0].language must not be blank\n- display[0].logo.url must be a valid URL\n- display[0].name must not be blank\n- display[0].title must not be blank\n- enabled must not be blank\n- issuer_id must not be blank\n- protocol must not be blank\n- proxy_token_endpoint must not be blank\n- redirect_uri must not be blank\n- token_endpoint must not be blank\n- wellknown_endpoint must not be blank\nErrors for issuer at index: 1 with issuerId - \n- authorization_audience must not be blank\n- client_alias must not be blank\n- client_id must not be blank\n- credential_issuer must not be blank\n- credential_issuer_host must not be blank\n- display[0].description must not be blank\n- display[0].language must not be blank\n- display[0].logo.url must be a valid URL\n- display[0].name must not be blank\n- display[0].title must not be blank\n- enabled must not be blank\n- issuer_id must not be blank\n- protocol must not be blank\n- proxy_token_endpoint must not be blank\n- redirect_uri must not be blank\n- token_endpoint must not be blank\n- wellknown_endpoint must not be blank\n- Duplicate value found for the issuerId. More than one issuer is having the same issuerId\n"; + String actualErrorMsg = exception.getMessage(); + + assertEquals(expectedErrorMsg, actualErrorMsg); + } + } + + @Test + public void shouldThrowExceptionIfTheFieldValuesOfIssuerAreNotSatisfyingUrlAnnotation() { + try { + issuers.setIssuers(List.of(getIssuerConfigDTOWithInvalidFieldValues("Issuer1", false, true), getIssuerConfigDTOWithInvalidFieldValues("Issuer2",false,true))); + when(issuersService.getAllIssuers()).thenReturn(issuers); + + issuersValidationConfig.run(mock(ApplicationArguments.class)); + } catch (Exception exception) { + String expectedErrorMsg = "\n\nValidation failed in Mimoto-issuers-config.json:\nErrors for issuer at index: 0 with issuerId - Issuer1id\n- credential_issuer_host must be a valid URL\n- proxy_token_endpoint must be a valid URL\n- token_endpoint must be a valid URL\n- wellknown_endpoint must be a valid URL\n- TokenEndpoint does not match with the credential issuerId\nErrors for issuer at index: 1 with issuerId - Issuer2id\n- credential_issuer_host must be a valid URL\n- proxy_token_endpoint must be a valid URL\n- token_endpoint must be a valid URL\n- wellknown_endpoint must be a valid URL\n- TokenEndpoint does not match with the credential issuerId\n"; + String actualErrorMsg = exception.getMessage(); + + assertEquals(expectedErrorMsg, actualErrorMsg); + } + } +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index c99324498..0d0a9da11 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -186,7 +186,7 @@ public static IssuerDTO getIssuerDTO(String issuerName) { public static IssuerDTO getIssuerConfigDTO(String issuerName) { LogoDTO logo = new LogoDTO(); - logo.setUrl("/logo"); + logo.setUrl("https://logo"); logo.setAlt_text("logo-url"); DisplayDTO display = new DisplayDTO(); display.setName(issuerName); @@ -199,12 +199,47 @@ public static IssuerDTO getIssuerConfigDTO(String issuerName) { issuer.setCredential_issuer(issuerName + "id"); issuer.setDisplay(Collections.singletonList(display)); issuer.setClient_id("123"); + issuer.setClient_alias("test-client-alias"); + issuer.setRedirect_uri("https://oauthredirect"); issuer.setEnabled("true"); issuer.setProtocol("OpenId4VCI"); issuer.setWellknown_endpoint("https://issuer.env.net/.well-known/openid-credential-issuer"); issuer.setCredential_issuer_host("https://issuer.env.net"); - issuer.setAuthorization_audience("https://dev/token"); - issuer.setProxy_token_endpoint("https://dev/token"); + issuer.setToken_endpoint("https://dev/" + issuerName + "id"); + issuer.setAuthorization_audience("https://dev/auth-server/token"); + issuer.setProxy_token_endpoint("https://dev/auth-server/token"); + return issuer; + } + + public static IssuerDTO getIssuerConfigDTOWithInvalidFieldValues(String issuerName, boolean emptyValues, boolean invalidUrls) { + LogoDTO logo = new LogoDTO(); + logo.setUrl(emptyValues ? "/logo" : "https://logo"); + logo.setAlt_text("logo-url"); + + DisplayDTO display = new DisplayDTO(); + display.setName(emptyValues ? "" : issuerName); + display.setTitle(emptyValues ? "" : "Download via " + issuerName); + display.setDescription(emptyValues ? "" : issuerName + " description"); + display.setLanguage(emptyValues ? "" : "en"); + display.setLogo(logo); + + IssuerDTO issuer = new IssuerDTO(); + issuer.setIssuer_id(emptyValues ? "" : issuerName + "id"); + issuer.setCredential_issuer(emptyValues ? "" : issuerName + "id"); + issuer.setDisplay(Collections.singletonList(display)); + issuer.setClient_id(emptyValues ? "" : "123"); + issuer.setClient_alias(emptyValues ? "" : "test-client-alias"); + issuer.setRedirect_uri(emptyValues ? "" : "https://oauthredirect"); + issuer.setEnabled(emptyValues ? "" : "true"); + issuer.setProtocol(emptyValues ? "" : "OpenId4VCI"); + + // Handle valid and invalid URLs + issuer.setWellknown_endpoint(emptyValues ? "" : (invalidUrls ? "ht//issuer.env.net/.well-known/openid-credential-issuer" : "https://issuer.env.net/.well-known/openid-credential-issuer")); + issuer.setCredential_issuer_host(emptyValues ? "" : (invalidUrls ? "https//issuer.env.net" : "https://issuer.env.net")); + issuer.setToken_endpoint(emptyValues ? "" : (invalidUrls ? "h://dev/token" : "https://dev/token")); + issuer.setAuthorization_audience(emptyValues ? "" : (invalidUrls ? "htt://dev/auth-server/token" : "https://dev/auth-server/token")); + issuer.setProxy_token_endpoint(emptyValues ? "" : (invalidUrls ? "htp://dev/auth-server/token" : "https://dev/auth-server/token")); + return issuer; } From d03c0e080811c6fe95acbacb795cd65614996b0c Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 24 Mar 2025 16:08:55 +0530 Subject: [PATCH 448/860] [INJIWEB-1370] write test cases for logout and accessing the secured endpoint with and without authentication scenarios in login flow Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../OAuth2AuthenticationFailureHandler.java | 6 +- .../security/oauth2/OAuth2LoginTests.java | 177 +++++++++++++++++- 2 files changed, 178 insertions(+), 5 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationFailureHandler.java b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationFailureHandler.java index 4a0cd6aa7..179013c19 100644 --- a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationFailureHandler.java +++ b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationFailureHandler.java @@ -29,11 +29,11 @@ public void onAuthenticationFailure(HttpServletRequest request, HttpServletRespo if (exception instanceof OAuth2AuthenticationException) { Throwable cause = exception.getCause(); if (cause instanceof java.net.SocketTimeoutException) { - errorMessage = "Timeout while connecting to the IDP for authorization."; + errorMessage = "Timeout while connecting to the IDP for authorization"; } else if (cause instanceof java.net.ConnectException) { - errorMessage = "Could not connect to the IDP for authorization."; + errorMessage = "Could not connect to the IDP for authorization"; } else if (exception.getMessage().contains("access_denied")) { - errorMessage = "Access Denied. Please try again."; + errorMessage = "Access Denied. Please try again"; } else { errorMessage = "Login is failed due to: " + exception.getMessage(); } diff --git a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java index b4f566fda..e8a65d463 100644 --- a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java +++ b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java @@ -1,2 +1,175 @@ -package io.mosip.mimoto.security.oauth2;public class OAuth2LoginTests { -} +package io.mosip.mimoto.security.oauth2; + +import io.mosip.mimoto.config.Config; +import io.mosip.mimoto.controller.UserController; +import io.mosip.mimoto.dbentity.UserMetadata; +import io.mosip.mimoto.repository.UserMetadataRepository; +import io.mosip.mimoto.util.EncryptionDecryptionUtil; +import jakarta.servlet.http.Cookie; +import lombok.extern.slf4j.Slf4j; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.annotation.Import; +import org.springframework.mock.web.MockHttpSession; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken; +import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository; +import org.springframework.security.oauth2.core.user.DefaultOAuth2User; +import org.springframework.security.oauth2.core.user.OAuth2User; +import org.springframework.session.Session; +import org.springframework.session.SessionRepository; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.result.MockMvcResultMatchers; +import java.sql.Timestamp; +import java.util.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.*; +import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.oauth2Login; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +@RunWith(SpringRunner.class) +@ContextConfiguration(classes = Config.class) +@WebMvcTest(Config.class) +@AutoConfigureMockMvc +@Import({UserController.class}) +@Slf4j +public class OAuth2LoginTests { + @Autowired + private MockMvc mockMvc; + + @MockBean + private OAuth2AuthenticationSuccessHandler oAuth2AuthenticationSuccessHandler; + + @MockBean + private OAuth2AuthenticationFailureHandler oAuth2AuthenticationFailureHandler; + + @MockBean + private UserMetadataRepository userMetadataRepository; + + @MockBean + private EncryptionDecryptionUtil encryptionDecryptionUtil; + + @MockBean + private ClientRegistrationRepository clientRegistrationRepository; + + @MockBean + private SessionRepository sessionRepository; + + private String providerSubjectId, identityProvider, displayName, profilePictureUrl, email, userId; + private Timestamp now; + private UserMetadata userMetadata; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + providerSubjectId = "user123"; + identityProvider = "google"; + displayName = "user_123"; + profilePictureUrl = "https://example.com/profile.jpg"; + email = "user.123@example.com"; + now = new Timestamp(System.currentTimeMillis()); + userId = UUID.randomUUID().toString(); + + userMetadata = new UserMetadata(); + userMetadata.setId(userId); + userMetadata.setProviderSubjectId(providerSubjectId); + userMetadata.setIdentityProvider(identityProvider); + userMetadata.setDisplayName(displayName); + userMetadata.setProfilePictureUrl(profilePictureUrl); + userMetadata.setEmail(email); + userMetadata.setCreatedAt(now); + userMetadata.setUpdatedAt(now); + } + + @Test + public void shouldBeRedirectedToRedirectEndpointOnUnauthenticatedAccessToProtectedEndpoint() throws Exception { + mockMvc.perform(get("/secure/user/profile")) + .andExpect(status().is3xxRedirection()) + .andExpect(redirectedUrl("https://injiweb.dev1.mosip.net/login")); + } + + @Test + public void shouldBeAbleToAccessProtectedEndpointWhenUserIsAuthenticatedUsingOAuth2() throws Exception { + Mockito.when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider("user123", "google")).thenReturn(Optional.of(userMetadata)); + when(encryptionDecryptionUtil.decrypt(anyString(), any(), any(), any())).thenReturn(displayName, profilePictureUrl, email); + MockHttpSession mockSession = new MockHttpSession(); + mockSession.setAttribute("clientRegistrationId", "google"); + + // Create a mock OAuth2User with the necessary attributes, including the name. + Map attributes = new HashMap<>(); + attributes.put("sub", "user123"); + attributes.put("name", "user_123"); + OAuth2User oauth2User = new DefaultOAuth2User(Collections.emptyList(), attributes, "sub"); + + // Create an OAuth2AuthenticationToken. + OAuth2AuthenticationToken authenticationToken = new OAuth2AuthenticationToken( + oauth2User, + Collections.emptyList(), + "google" + ); + + // Set the authentication token in the security context. + SecurityContext securityContext = SecurityContextHolder.getContext(); + securityContext.setAuthentication(authenticationToken); + + mockMvc.perform(get("/secure/user/profile") + .session(mockSession) + .with(oauth2Login().oauth2User(oauth2User))) + .andExpect(status().isOk()) + .andExpect(MockMvcResultMatchers.jsonPath("$.response.display_name").value("user_123")) + .andExpect(MockMvcResultMatchers.jsonPath("$.response.profile_picture_url").value("https://example.com/profile.jpg")) + .andExpect(MockMvcResultMatchers.jsonPath("$.response.email").value("user.123@example.com")) + .andExpect(jsonPath("$.errors").isArray()) + .andExpect(jsonPath("$.errors").isEmpty()); + } + + @Test + public void shouldThrowExceptionWhenLogoutRequestWasSentForInvalidSession() throws Exception { + MockHttpSession mockSession = new MockHttpSession(); + String sessionId = "mockSessionId"; + String encodedSessionId = Base64.getUrlEncoder().encodeToString(sessionId.getBytes()); + Cookie sessionCookie = new Cookie("SESSION", encodedSessionId); + mockSession.setAttribute("clientRegistrationId", "google"); + when(sessionRepository.findById(sessionId)).thenReturn(null); + + mockMvc.perform(post("/logout") + .session(mockSession).cookie(sessionCookie)) + .andExpect(status().isNotFound()) + .andExpect(jsonPath("$.errors[0].errorCode").value("NOT_FOUND")) + .andExpect(jsonPath("$.errors[0].errorMessage").value("Logout request was sent for an invalid or expired session")); + + verify(sessionRepository, times(1)).findById(sessionId); + verify(sessionRepository, never()).deleteById(sessionId); + } + + @Test + public void shouldPerformLogoutSuccessfullyForaValidSession() throws Exception { + MockHttpSession mockSession = new MockHttpSession(); + String sessionId = "mockSessionId"; + String encodedSessionId = Base64.getUrlEncoder().encodeToString(sessionId.getBytes()); + Cookie sessionCookie = new Cookie("SESSION", encodedSessionId); + mockSession.setAttribute("clientRegistrationId", "google"); + Session mockSessionFromRepo = Mockito.mock(Session.class); + when(sessionRepository.findById(sessionId)).thenReturn(mockSessionFromRepo); + + mockMvc.perform(post("/logout") + .session(mockSession).cookie(sessionCookie)) + .andExpect(status().isOk()); + + verify(sessionRepository, times(1)).findById(sessionId); + verify(sessionRepository, times(1)).deleteById(sessionId); + } +} \ No newline at end of file From 38766920237ce4f5062472904ede3e74f45ebcdd Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 24 Mar 2025 17:11:50 +0530 Subject: [PATCH 449/860] [INJIWEB-1370] remove unnecessary logs and the logic of storing the access token and refresh token into session as we are not relying on them to check if the user is authenticated or not Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../oauth2/OAuth2AuthenticationSuccessHandler.java | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java index 6dc1e02df..9dd26cd7b 100644 --- a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java +++ b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java @@ -41,8 +41,7 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo OAuth2AuthenticationToken oauth2Token = (OAuth2AuthenticationToken) authentication; OAuth2User oAuth2User = oauth2Token.getPrincipal(); HttpSession session = request.getSession(false); - log.info("Request Cookies: {}", Arrays.toString(request.getCookies())); - log.info("Session ID after login: {}", session.getId()); + // Storing clientRegistrationId in the Redis session to verify it against the one in user metadata during profile retrieval String clientRegistrationId = oauth2Token.getAuthorizedClientRegistrationId(); session.setAttribute("clientRegistrationId", clientRegistrationId); @@ -54,14 +53,6 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo String profilePictureUrl = oAuth2User.getAttribute("picture"); String email = oAuth2User.getAttribute("email"); - OAuth2AuthorizedClient authorizedClient = authorizedClientService - .loadAuthorizedClient(oauth2Token.getAuthorizedClientRegistrationId(), authentication.getName()); - - String accessToken = authorizedClient.getAccessToken().getTokenValue(); - String refreshToken = authorizedClient.getRefreshToken().getTokenValue(); - session.setAttribute("accessToken", accessToken); - session.setAttribute("refreshToken", refreshToken); - // Call the service to update or insert the user metadata in the database try { String userId = userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); From 9a0cacf1a6b983a90ec37f16574974178d52c6a1 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 17 Mar 2025 14:51:44 +0530 Subject: [PATCH 450/860] [injiweb-1392] corrected the json fields datatype to jsonb Signed-off-by: Gurpreet41082 --- db_scripts/inji_mimoto/ddl/mimoto-verifiable_credentials.sql | 2 +- db_scripts/inji_mimoto/ddl/mimoto-wallet.sql | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/db_scripts/inji_mimoto/ddl/mimoto-verifiable_credentials.sql b/db_scripts/inji_mimoto/ddl/mimoto-verifiable_credentials.sql index bc756c45b..5f244ec20 100644 --- a/db_scripts/inji_mimoto/ddl/mimoto-verifiable_credentials.sql +++ b/db_scripts/inji_mimoto/ddl/mimoto-verifiable_credentials.sql @@ -13,7 +13,7 @@ CREATE TABLE IF NOT EXISTS verifiable_credentials ( wallet_id UUID NOT NULL, -- Foreign key referring to the wallet table (wallet.id) credential TEXT NOT NULL, -- Encrypted credential (using wallet_key for encryption/decryption) credential_format VARCHAR(255) NOT NULL, -- Format of the credential (e.g., JSON, JWT, etc.) - credential_metadata JSON NOT NULL, -- Metadata about the credential + credential_metadata JSONB NOT NULL, -- Metadata about the credential created_at TIMESTAMP DEFAULT now(), -- Timestamp of record creation (defaults to current time) updated_at TIMESTAMP DEFAULT now(), -- Timestamp of last update (defaults to current time) diff --git a/db_scripts/inji_mimoto/ddl/mimoto-wallet.sql b/db_scripts/inji_mimoto/ddl/mimoto-wallet.sql index 6fcce8dc8..fa7359f48 100644 --- a/db_scripts/inji_mimoto/ddl/mimoto-wallet.sql +++ b/db_scripts/inji_mimoto/ddl/mimoto-wallet.sql @@ -14,8 +14,8 @@ CREATE TABLE IF NOT EXISTS wallet ( wallet_key TEXT NOT NULL, -- Encrypted wallet key public_key TEXT NOT NULL, -- Public key for wallet secret_key TEXT NOT NULL, -- Secret key, encrypted with wallet_key - key_metadata JSON NOT NULL, -- Metadata about the public and private keys - wallet_metadata JSON NOT NULL, -- Metadata about the wallet, including encryption info + key_metadata JSONB NOT NULL, -- Metadata about the public and private keys + wallet_metadata JSONB NOT NULL, -- Metadata about the wallet, including encryption info created_at TIMESTAMP DEFAULT now(), -- Timestamp of record creation (defaults to current time) updated_at TIMESTAMP DEFAULT now(), -- Timestamp of last update (defaults to current time) From 29dc81d88a5d4d1025a83760d0352fa94f42d221 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 17 Mar 2025 15:02:11 +0530 Subject: [PATCH 451/860] [injiweb-1392] added the database entity Signed-off-by: Gurpreet41082 --- .../io/mosip/mimoto/dbentity/KeyMetadata.java | 7 +++ .../mimoto/dbentity/VerifiableCredential.java | 40 ++++++++++++++ .../java/io/mosip/mimoto/dbentity/Wallet.java | 52 +++++++++++++++++++ .../mosip/mimoto/dbentity/WalletMetadata.java | 10 ++++ 4 files changed, 109 insertions(+) create mode 100644 src/main/java/io/mosip/mimoto/dbentity/KeyMetadata.java create mode 100644 src/main/java/io/mosip/mimoto/dbentity/VerifiableCredential.java create mode 100644 src/main/java/io/mosip/mimoto/dbentity/Wallet.java create mode 100644 src/main/java/io/mosip/mimoto/dbentity/WalletMetadata.java diff --git a/src/main/java/io/mosip/mimoto/dbentity/KeyMetadata.java b/src/main/java/io/mosip/mimoto/dbentity/KeyMetadata.java new file mode 100644 index 000000000..992879975 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dbentity/KeyMetadata.java @@ -0,0 +1,7 @@ +package io.mosip.mimoto.dbentity; + +import lombok.Data; +@Data +public class KeyMetadata { + private String algorithmName; +} diff --git a/src/main/java/io/mosip/mimoto/dbentity/VerifiableCredential.java b/src/main/java/io/mosip/mimoto/dbentity/VerifiableCredential.java new file mode 100644 index 000000000..a9e05ee0a --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dbentity/VerifiableCredential.java @@ -0,0 +1,40 @@ +package io.mosip.mimoto.dbentity; + +import jakarta.persistence.*; +import lombok.Getter; +import lombok.Setter; +import java.time.Instant; + +@Entity +@Getter +@Setter +public class VerifiableCredential { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + + @ManyToOne + @JoinColumn(name = "wallet_id", nullable = false) // Foreign key reference to wallet table + private Wallet wallet; + + @Column(nullable = false, columnDefinition = "TEXT") + private String credential; // Encrypted credential + + @Column(nullable = false, length = 255) + private String credentialFormat; // Format of the credential (JSON, JWT, etc.) + + @Column(nullable = false, columnDefinition = "jsonb") + private String credentialMetadata; // Additional metadata for the credential + + @Column(nullable = false, updatable = false) + private Instant createdAt = Instant.now(); + + @Column(nullable = false) + private Instant updatedAt = Instant.now(); + + @PreUpdate + public void preUpdate() { + this.updatedAt = Instant.now(); + } +} diff --git a/src/main/java/io/mosip/mimoto/dbentity/Wallet.java b/src/main/java/io/mosip/mimoto/dbentity/Wallet.java new file mode 100644 index 000000000..0499e0f2d --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dbentity/Wallet.java @@ -0,0 +1,52 @@ +package io.mosip.mimoto.dbentity; + +import jakarta.persistence.*; +import lombok.Getter; +import lombok.Setter; +import org.hibernate.annotations.JdbcTypeCode; +import org.hibernate.type.SqlTypes; + +import java.time.Instant; +import java.util.UUID; + +@Entity +@Getter +@Setter +public class Wallet { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private UUID id; + + @Column(nullable = false) + private UUID userId; // Foreign key reference to user_metadata (long-based) + + @Column(nullable = false) + private String walletKey; // Encrypted wallet key using AES256-GCM + + @Column(nullable = false) + private String publicKey; + + @Column(nullable = false) + private String secretKey; // Encrypted with walletKey + + @JdbcTypeCode(SqlTypes.JSON) + @Column(columnDefinition = "jsonb") + private KeyMetadata keyMetadata; + + @JdbcTypeCode(SqlTypes.JSON) + @Column(columnDefinition = "jsonb") + private WalletMetadata walletMetadata; + + @Column(nullable = false, updatable = false) + private Instant createdAt = Instant.now(); + + @Column(nullable = false) + private Instant updatedAt = Instant.now(); + + @PreUpdate + public void preUpdate() { + this.updatedAt = Instant.now(); + } +} + diff --git a/src/main/java/io/mosip/mimoto/dbentity/WalletMetadata.java b/src/main/java/io/mosip/mimoto/dbentity/WalletMetadata.java new file mode 100644 index 000000000..a73bb59f2 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dbentity/WalletMetadata.java @@ -0,0 +1,10 @@ +package io.mosip.mimoto.dbentity; + +import lombok.Data; +@Data +public class WalletMetadata { + + private String encryptionAlgo; + private String encryptionType; + +} From 53591b74712324d6ca2b29bb311977a7494334ae Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 17 Mar 2025 15:04:39 +0530 Subject: [PATCH 452/860] [injiweb-1392] added the request object Signed-off-by: Gurpreet41082 --- .../java/io/mosip/mimoto/dto/WalletRequestDto.java | 12 ++++++++++++ .../mosip/mimoto/util/EncryptionDecryptionUtil.java | 1 - 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 src/main/java/io/mosip/mimoto/dto/WalletRequestDto.java diff --git a/src/main/java/io/mosip/mimoto/dto/WalletRequestDto.java b/src/main/java/io/mosip/mimoto/dto/WalletRequestDto.java new file mode 100644 index 000000000..82574f47f --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/WalletRequestDto.java @@ -0,0 +1,12 @@ +package io.mosip.mimoto.dto; + +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.ToString; + +@Data +@ToString +@ApiModel(description = "Model representing a user wallet request") +public class WalletRequestDto { + String pin; +} diff --git a/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java b/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java index a4700ddc0..046eb353e 100644 --- a/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java +++ b/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java @@ -35,7 +35,6 @@ public String encrypt(String dataToEncrypt, String refId, String aad, String sal request.setAad(aad); request.setSalt(saltToEncrypt); return cryptomanagerService.encrypt(request).getData(); - // return new String(CryptoUtil.decodeURLSafeBase64(encryptedData)); } public String decrypt(String dataToDecrypt, String refId, String aad, String saltToDecrypt) { From 2370005430e418e87cc746310446e94a70a007fe Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 17 Mar 2025 18:05:39 +0530 Subject: [PATCH 453/860] [injiweb-1392] added main code for wallet key generation Signed-off-by: Gurpreet41082 --- .../exception/PlatformErrorMessages.java | 4 +- .../mimoto/repository/WalletRepository.java | 17 +++ .../mosip/mimoto/service/WalletService.java | 13 ++ .../service/impl/WalletServiceImpl.java | 43 +++++++ .../mimoto/util/EncryptionDecryptionUtil.java | 27 ++++ .../java/io/mosip/mimoto/util/WalletUtil.java | 84 +++++++++++++ .../io/mosip/mimoto/util/WalletUtilTest.java | 117 ++++++++++++++++++ 7 files changed, 304 insertions(+), 1 deletion(-) create mode 100644 src/main/java/io/mosip/mimoto/repository/WalletRepository.java create mode 100644 src/main/java/io/mosip/mimoto/service/WalletService.java create mode 100644 src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java create mode 100644 src/main/java/io/mosip/mimoto/util/WalletUtil.java create mode 100644 src/test/java/io/mosip/mimoto/util/WalletUtilTest.java diff --git a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java index 49091a599..88c8e7b15 100644 --- a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java +++ b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java @@ -96,7 +96,9 @@ public enum PlatformErrorMessages { LOGIN_SESSION_INVALIDATE_EXCEPTION(PlatformConstants.PREFIX + "046", "Exception occurred when invalidating the session from redis"), DATABASE_CONNECTION_EXCEPTION(PlatformConstants.PREFIX + "047", "Failed to connect to the shared database"), USER_METADATA_STORAGE_EXCEPTION(PlatformConstants.PREFIX + "048", "Failed to store the User metadata into database"), - USER_METADATA_FETCH_EXCEPTION(PlatformConstants.PREFIX + "049", "Failed to fetch the User metadata from database"); + USER_METADATA_FETCH_EXCEPTION(PlatformConstants.PREFIX + "049", "Failed to fetch the User metadata from database"), + USER_WALLET_CREATION_EXCEPTION(PlatformConstants.PREFIX + "050", "Exception occurred when creating the wallet for user"), + USER_WALLET_RETRIEVAL_EXCEPTION(PlatformConstants.PREFIX + "051", "Exception occurred when creating the wallet for user"); /** The error message. */ private final String errorMessage; diff --git a/src/main/java/io/mosip/mimoto/repository/WalletRepository.java b/src/main/java/io/mosip/mimoto/repository/WalletRepository.java new file mode 100644 index 000000000..880bdbd58 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/repository/WalletRepository.java @@ -0,0 +1,17 @@ +package io.mosip.mimoto.repository; + +import io.mosip.mimoto.dbentity.Wallet; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.repository.query.Param; + +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +public interface WalletRepository extends JpaRepository { + @Query("SELECT w.id FROM Wallet w WHERE w.userId = :userId") + List findWalletIdByUserId(@Param("userId") UUID userId); + + Optional findByUserIdAndId(UUID userId, UUID walletId); +} diff --git a/src/main/java/io/mosip/mimoto/service/WalletService.java b/src/main/java/io/mosip/mimoto/service/WalletService.java new file mode 100644 index 000000000..9aed85f88 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/WalletService.java @@ -0,0 +1,13 @@ +package io.mosip.mimoto.service; + +import java.security.NoSuchAlgorithmException; +import java.util.List; +import java.util.UUID; + +public interface WalletService { + public UUID createWallet(UUID userId, String pin) throws NoSuchAlgorithmException, Exception; + + String getWalletKey(UUID userId, UUID walletId, String pin); + + List getWallets(UUID userId); +} diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java new file mode 100644 index 000000000..fbfc2d507 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java @@ -0,0 +1,43 @@ +package io.mosip.mimoto.service.impl; + +import io.mosip.mimoto.dbentity.Wallet; +import io.mosip.mimoto.repository.WalletRepository; +import io.mosip.mimoto.service.WalletService; +import io.mosip.mimoto.util.WalletUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.security.NoSuchAlgorithmException; +import java.util.List; +import java.util.Optional; +import java.util.UUID; + + +@Slf4j +@Service +public class WalletServiceImpl implements WalletService { + + @Autowired + private WalletRepository walletRepository; + + @Autowired + private WalletUtil walletHelper; + @Override + public UUID createWallet(UUID userId, String pin) throws Exception { + // Create a new wallet for the user + return walletHelper.createEd25519AlgoWallet(userId, pin); + } + + @Override + public String getWalletKey(UUID userId, UUID walletId, String pin) { + Optional existingWallet = walletRepository.findByUserIdAndId(userId, walletId); + // Decrypt wallet key using the user's PIN + return existingWallet.map(wallet -> walletHelper.decryptWalletKey(wallet.getWalletKey(), pin)).orElse(null); + } + + @Override + public List getWallets(UUID userId) { + return walletRepository.findWalletIdByUserId(userId); + } +} diff --git a/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java b/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java index 046eb353e..b2d83a636 100644 --- a/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java +++ b/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java @@ -9,7 +9,14 @@ import io.mosip.kernel.cryptomanager.dto.CryptomanagerRequestDto; import io.mosip.kernel.core.util.CryptoUtil; +import javax.crypto.Cipher; +import javax.crypto.KeyGenerator; +import javax.crypto.SecretKey; import java.nio.charset.StandardCharsets; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.NoSuchAlgorithmException; +import java.util.Base64; @Component @Slf4j @@ -51,4 +58,24 @@ public String decrypt(String dataToDecrypt, String refId, String aad, String sal return new String(CryptoUtil.decodeURLSafeBase64(cryptomanagerService.decrypt(request).getData())); } + public static SecretKey generateEncryptionKey(String algorithm, int keysize) throws NoSuchAlgorithmException { + KeyGenerator keyGenerator = KeyGenerator.getInstance(algorithm); + keyGenerator.init(keysize); + return keyGenerator.generateKey(); + } + + // Helper method to generate ED25519 key pair + public static KeyPair generateKeyPair(String algorithm) throws NoSuchAlgorithmException { + KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(algorithm); + return keyPairGenerator.generateKeyPair(); + } + + // Helper method to encrypt the private key using the AES key + public static String encryptPrivateKeyWithAES(SecretKey aesKey, java.security.PrivateKey privateKey) throws Exception { + Cipher cipher = Cipher.getInstance("AES"); + cipher.init(Cipher.ENCRYPT_MODE, aesKey); + byte[] encryptedPrivateKey = cipher.doFinal(privateKey.getEncoded()); + return Base64.getEncoder().encodeToString(encryptedPrivateKey); + } + } diff --git a/src/main/java/io/mosip/mimoto/util/WalletUtil.java b/src/main/java/io/mosip/mimoto/util/WalletUtil.java new file mode 100644 index 000000000..eba037874 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/WalletUtil.java @@ -0,0 +1,84 @@ +package io.mosip.mimoto.util; + +import io.mosip.kernel.cryptomanager.dto.CryptoWithPinRequestDto; +import io.mosip.kernel.cryptomanager.dto.CryptoWithPinResponseDto; +import io.mosip.kernel.cryptomanager.service.CryptomanagerService; +import io.mosip.mimoto.dbentity.KeyMetadata; +import io.mosip.mimoto.dbentity.Wallet; +import io.mosip.mimoto.dbentity.WalletMetadata; +import io.mosip.mimoto.repository.WalletRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.crypto.SecretKey; +import java.security.KeyPair; +import java.util.Base64; +import java.util.UUID; + +@Component +public class WalletUtil { + + @Autowired + private WalletRepository walletRepository; + + @Autowired + private CryptomanagerService cryptomanagerService; + + + // Method to decrypt the wallet key using the PIN + public String decryptWalletKey(String encryptedWalletKey, String pin) { + // Prepare the request DTO + CryptoWithPinRequestDto requestDto = new CryptoWithPinRequestDto(); + requestDto.setUserPin(pin); + requestDto.setData(encryptedWalletKey); + + // Call the decryptWithPin method of CryptomanagerService + CryptoWithPinResponseDto responseDto = cryptomanagerService.decryptWithPin(requestDto); + + // Return the decrypted wallet key + return responseDto.getData(); + } + + public UUID createNewWallet(UUID userId, String pin, KeyPair keyPair, SecretKey encryptionKey, String encryptionAlgorithm, String encryptionType) throws Exception { + + // Encrypt the private key with the encryption key + String encryptedPrivateKey = EncryptionDecryptionUtil.encryptPrivateKeyWithAES(encryptionKey, keyPair.getPrivate()); + + // Create wallet record + UUID walletId = UUID.randomUUID(); + Wallet newWallet = new Wallet(); + newWallet.setId(walletId); + newWallet.setUserId(userId); + KeyMetadata keyMetadata = new KeyMetadata(); + keyMetadata.setAlgorithmName(keyPair.getPublic().getAlgorithm()); + newWallet.setKeyMetadata(keyMetadata); + newWallet.setPublicKey(Base64.getEncoder().encodeToString(keyPair.getPublic().getEncoded())); + newWallet.setSecretKey(encryptedPrivateKey); + + // Encrypt the encryption key using the user's PIN before storing into database + CryptoWithPinRequestDto requestDto = new CryptoWithPinRequestDto(); + requestDto.setUserPin(pin); + String dataAsString = Base64.getEncoder().encodeToString(encryptionKey.getEncoded()); + requestDto.setData(dataAsString); + String encryptedWalletKey = cryptomanagerService.encryptWithPin(requestDto).getData(); + + newWallet.setWalletKey(encryptedWalletKey); + WalletMetadata walletMetadata = new WalletMetadata(); + walletMetadata.setEncryptionAlgo(encryptionAlgorithm); + walletMetadata.setEncryptionType(encryptionType); + newWallet.setWalletMetadata(walletMetadata); + + // Save wallet to database + walletRepository.save(newWallet); + return walletId; + } + + + // Default method for Ed25519 and AES + public UUID createEd25519AlgoWallet(UUID userId, String pin) throws Exception { + SecretKey encryptionKey = EncryptionDecryptionUtil.generateEncryptionKey("AES", 256); + KeyPair keyPair = EncryptionDecryptionUtil.generateKeyPair("Ed25519"); + return createNewWallet(userId, pin, keyPair, encryptionKey, "AES", "encryptWithPin"); + } + +} diff --git a/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java b/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java new file mode 100644 index 000000000..3629275ad --- /dev/null +++ b/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java @@ -0,0 +1,117 @@ +package io.mosip.mimoto.util; + +import io.mosip.kernel.cryptomanager.dto.CryptoWithPinRequestDto; +import io.mosip.kernel.cryptomanager.dto.CryptoWithPinResponseDto; +import io.mosip.kernel.cryptomanager.service.CryptomanagerService; +import io.mosip.mimoto.dbentity.KeyMetadata; +import io.mosip.mimoto.dbentity.Wallet; +import io.mosip.mimoto.dbentity.WalletMetadata; +import io.mosip.mimoto.repository.WalletRepository; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.ArgumentCaptor; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import javax.crypto.SecretKey; +import java.security.KeyPair; +import java.util.Base64; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +class WalletUtilTest { + + @Mock + private WalletRepository walletRepository; + + @Mock + private CryptomanagerService cryptomanagerService; + + @InjectMocks + private WalletUtil walletUtil; + + private String pin; + private UUID userId; + private KeyPair keyPair; + private SecretKey encryptionKey; + private String encryptedPrivateKey; + private String encryptedWalletKey; + private String decryptedWalletKey; + private String publicKeyBase64; + private String encryptionAlgorithm; + private String encryptionType; + private CryptoWithPinResponseDto cryptoResponseDto; + + @BeforeEach + void setUp() throws Exception { + pin = "1234"; + userId = UUID.randomUUID(); + keyPair = EncryptionDecryptionUtil.generateKeyPair("Ed25519"); + encryptionKey = EncryptionDecryptionUtil.generateEncryptionKey("AES", 256); + encryptedPrivateKey = EncryptionDecryptionUtil.encryptPrivateKeyWithAES(encryptionKey, keyPair.getPrivate()); + encryptedWalletKey = "encryptedWalletKey"; + decryptedWalletKey = Base64.getEncoder().encodeToString(encryptionKey.getEncoded()); + publicKeyBase64 = Base64.getEncoder().encodeToString(keyPair.getPublic().getEncoded()); + encryptionAlgorithm = "AES"; + encryptionType = "encryptWithPin"; + cryptoResponseDto = new CryptoWithPinResponseDto(); + } + + @Test + void decryptWalletKey_shouldDecryptSuccessfully() { + cryptoResponseDto.setData(decryptedWalletKey); + when(cryptomanagerService.decryptWithPin(any(CryptoWithPinRequestDto.class))).thenReturn(cryptoResponseDto); + + String decrypted = walletUtil.decryptWalletKey(encryptedWalletKey, pin); + + assertEquals(decryptedWalletKey, decrypted); + } + + @Test + void createNewWallet_shouldCreateWalletSuccessfully() throws Exception { + cryptoResponseDto.setData(encryptedWalletKey); + when(cryptomanagerService.encryptWithPin(any(CryptoWithPinRequestDto.class))).thenReturn(cryptoResponseDto); + UUID walletId = walletUtil.createNewWallet(userId, pin, keyPair, encryptionKey, encryptionAlgorithm, encryptionType); + + assertNotNull(walletId); + } + + @Test + void createEd25519AlgoWallet_shouldCreateEd25519WalletSuccessfully() throws Exception { + cryptoResponseDto.setData(encryptedWalletKey); + when(cryptomanagerService.encryptWithPin(any(CryptoWithPinRequestDto.class))).thenReturn(cryptoResponseDto); + UUID walletId = walletUtil.createEd25519AlgoWallet(userId, pin); + + assertNotNull(walletId); + } + + + @Test + void createNewWallet_verifyWalletObject() throws Exception { + cryptoResponseDto.setData(encryptedWalletKey); + when(cryptomanagerService.encryptWithPin(any(CryptoWithPinRequestDto.class))).thenReturn(cryptoResponseDto); + UUID walletId = walletUtil.createNewWallet(userId, pin, keyPair, encryptionKey, encryptionAlgorithm, encryptionType); + + ArgumentCaptor walletCaptor = ArgumentCaptor.forClass(Wallet.class); + verify(walletRepository).save(walletCaptor.capture()); + + Wallet savedWallet = walletCaptor.getValue(); + + assertEquals(walletId, savedWallet.getId()); + assertEquals(userId, savedWallet.getUserId()); + assertEquals(keyPair.getPublic().getAlgorithm(), savedWallet.getKeyMetadata().getAlgorithmName()); + assertEquals(publicKeyBase64, savedWallet.getPublicKey()); + assertEquals(encryptedPrivateKey, savedWallet.getSecretKey()); + assertEquals(encryptedWalletKey, savedWallet.getWalletKey()); + assertEquals(encryptionAlgorithm, savedWallet.getWalletMetadata().getEncryptionAlgo()); + assertEquals(encryptionType, savedWallet.getWalletMetadata().getEncryptionType()); + } +} \ No newline at end of file From 9dfe7797fb5a4fcdadf8aa4c167dbf0f2cbac054 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 17 Mar 2025 18:08:08 +0530 Subject: [PATCH 454/860] [injiweb-1392] added api for wallet Signed-off-by: Gurpreet41082 --- .../mimoto/controller/UserController.java | 59 +++++++++++++++++-- 1 file changed, 55 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/UserController.java b/src/main/java/io/mosip/mimoto/controller/UserController.java index 25c25e6d5..93a6468b8 100644 --- a/src/main/java/io/mosip/mimoto/controller/UserController.java +++ b/src/main/java/io/mosip/mimoto/controller/UserController.java @@ -3,20 +3,26 @@ import io.mosip.mimoto.core.http.ResponseWrapper; import io.mosip.mimoto.dbentity.UserMetadata; import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; +import io.mosip.mimoto.dto.WalletRequestDto; import io.mosip.mimoto.exception.OAuth2AuthenticationException; import io.mosip.mimoto.repository.UserMetadataRepository; +import io.mosip.mimoto.service.WalletService; import io.mosip.mimoto.util.EncryptionDecryptionUtil; import io.mosip.mimoto.util.Utilities; import jakarta.servlet.http.HttpSession; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessResourceFailureException; -import org.springframework.security.core.Authentication; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; +import org.springframework.security.core.Authentication; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + import static io.mosip.mimoto.exception.PlatformErrorMessages.*; @Slf4j @@ -30,6 +36,9 @@ public class UserController { @Autowired private EncryptionDecryptionUtil encryptionDecryptionUtill; + @Autowired + private WalletService walletService; + @GetMapping("/profile") public ResponseEntity> getUserProfile(Authentication authentication, HttpSession session) { try { @@ -63,4 +72,46 @@ private UserMetadata fetchUserMetadata(String providerSubjectId, String identity return userMetadataRepository.findByProviderSubjectIdAndIdentityProvider(providerSubjectId, identityProvider) .orElseThrow(() -> new OAuth2AuthenticationException(USER_METADATA_FETCH_EXCEPTION.getCode(), "User not found. Please check your credentials or register", HttpStatus.NOT_FOUND)); } + + @PostMapping("/wallets") + public ResponseEntity> createWallet(@RequestBody WalletRequestDto wallet, HttpSession httpSession) { + try { + ResponseWrapper responseWrapper = new ResponseWrapper<>(); + responseWrapper.setResponse(walletService.createWallet((UUID) httpSession.getAttribute("userId"), wallet.getPin())); + return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); + } catch (Exception exception) { + log.error("Error occurred while creating user wallets : ", exception); + return Utilities.handleErrorResponse(exception, USER_WALLET_CREATION_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR,MediaType.APPLICATION_JSON); + } + } + + @GetMapping("/wallets") + public ResponseEntity>> getWallets(HttpSession httpSession) { + try { + ResponseWrapper> responseWrapper = new ResponseWrapper<>(); + List list = new ArrayList<>(); + list.addAll(walletService.getWallets((UUID) httpSession.getAttribute("userId"))); + responseWrapper.setResponse(list); + return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); + } catch (Exception exception) { + log.error("Error occurred while retrieving user wallets : ", exception); + return Utilities.handleErrorResponse(exception, USER_WALLET_RETRIEVAL_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR,MediaType.APPLICATION_JSON); + } + } + + @PostMapping("/wallets/{walletId}") + public ResponseEntity> getWallet(@PathVariable("walletId") UUID walletId, @RequestBody WalletRequestDto wallet, HttpSession httpSession) { + try { + // If wallet_key does not exist in the session, fetch it and set it in the session + String walletKey = walletService.getWalletKey((UUID) httpSession.getAttribute("userId"), walletId, wallet.getPin()); + httpSession.setAttribute("wallet_key", walletKey); + + ResponseWrapper responseWrapper = new ResponseWrapper<>(); + responseWrapper.setResponse(walletId); + return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); + } catch (Exception exception) { + log.error("Error occurred while retrieving user wallet ", exception); + return Utilities.handleErrorResponse(exception, USER_WALLET_RETRIEVAL_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR,MediaType.APPLICATION_JSON); + } + } } From e4993439f462cb1f12e557e9c5ec05f6b61a3018 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Wed, 19 Mar 2025 00:52:54 +0530 Subject: [PATCH 455/860] [INJIWEB-1370] return proper errors if there is any issue occured while connecting to database to fetch the user details Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- src/main/java/io/mosip/mimoto/controller/UserController.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/io/mosip/mimoto/controller/UserController.java b/src/main/java/io/mosip/mimoto/controller/UserController.java index 93a6468b8..7d4b06e3d 100644 --- a/src/main/java/io/mosip/mimoto/controller/UserController.java +++ b/src/main/java/io/mosip/mimoto/controller/UserController.java @@ -13,6 +13,8 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessResourceFailureException; +import org.springframework.security.core.Authentication; +import org.springframework.web.bind.annotation.*; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; From f96c96b8c72a60385650e79bdab933940534c373 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 17 Mar 2025 18:08:08 +0530 Subject: [PATCH 456/860] [injiweb-1392] added api for wallet Signed-off-by: Gurpreet41082 --- .../mimoto/service/WalletServiceTest.java | 109 ++++++++++++++++++ .../util/EncryptionDecryptionUtilTest.java | 109 ++++++++++++++++++ 2 files changed, 218 insertions(+) create mode 100644 src/test/java/io/mosip/mimoto/service/WalletServiceTest.java create mode 100644 src/test/java/io/mosip/mimoto/util/EncryptionDecryptionUtilTest.java diff --git a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java new file mode 100644 index 000000000..de1691b4b --- /dev/null +++ b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java @@ -0,0 +1,109 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.dbentity.Wallet; +import io.mosip.mimoto.repository.WalletRepository; +import io.mosip.mimoto.service.impl.WalletServiceImpl; +import io.mosip.mimoto.util.WalletUtil; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; + +import java.util.Arrays; +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.when; + +@RunWith(MockitoJUnitRunner.class) +public class WalletServiceTest { + + @Mock + private WalletRepository walletRepository; + + @Mock + private WalletUtil walletHelper; + + @InjectMocks + private WalletServiceImpl walletService; + + private UUID userId; + private UUID walletId; + private String pin; + private Wallet wallet; + private String encryptedWalletKey; + private String decryptedWalletKey; + + @Before + public void setUp() { + userId = UUID.randomUUID(); + walletId = UUID.randomUUID(); + pin = "1234"; + encryptedWalletKey = "encryptedKey"; + decryptedWalletKey = "decryptedKey"; + + wallet = new Wallet(); + wallet.setId(walletId); + wallet.setUserId(userId); + wallet.setWalletKey(encryptedWalletKey); + } + + @Test + public void createWallet_shouldCreateWalletSuccessfully() throws Exception { + UUID newWalletId = UUID.randomUUID(); + when(walletHelper.createEd25519AlgoWallet(userId, pin)).thenReturn(newWalletId); + + UUID result = walletService.createWallet(userId, pin); + + assertEquals(newWalletId, result); + } + + @Test + public void getWalletKey_shouldDecryptWalletKeySuccessfully() { + when(walletRepository.findByUserIdAndId(userId, walletId)).thenReturn(Optional.of(wallet)); + when(walletHelper.decryptWalletKey(encryptedWalletKey, pin)).thenReturn(decryptedWalletKey); + + String result = walletService.getWalletKey(userId, walletId, pin); + + assertEquals(decryptedWalletKey, result); + } + + @Test + public void getWalletKey_shouldReturnNullIfWalletNotFound() { + when(walletRepository.findByUserIdAndId(userId, walletId)).thenReturn(Optional.empty()); + + String result = walletService.getWalletKey(userId, walletId, pin); + + assertNull(result); + } + + @Test + public void getWallets_shouldReturnListOfWalletIds() { + List walletIds = Arrays.asList(UUID.randomUUID(), UUID.randomUUID()); + when(walletRepository.findWalletIdByUserId(userId)).thenReturn(walletIds); + + List result = walletService.getWallets(userId); + + assertEquals(walletIds, result); + } + + @Test + public void getWallets_shouldReturnEmptyListIfNoWalletsFound() { + when(walletRepository.findWalletIdByUserId(userId)).thenReturn(List.of()); + + List result = walletService.getWallets(userId); + + assertTrue(result.isEmpty()); + } + + @Test(expected = Exception.class) + public void createWallet_shouldThrowException() throws Exception { + when(walletHelper.createEd25519AlgoWallet(userId, pin)).thenThrow(new Exception("Test Exception")); + + walletService.createWallet(userId, pin); + } +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/util/EncryptionDecryptionUtilTest.java b/src/test/java/io/mosip/mimoto/util/EncryptionDecryptionUtilTest.java new file mode 100644 index 000000000..6aa7a74da --- /dev/null +++ b/src/test/java/io/mosip/mimoto/util/EncryptionDecryptionUtilTest.java @@ -0,0 +1,109 @@ +package io.mosip.mimoto.util; + +import io.mosip.kernel.cryptomanager.dto.CryptomanagerRequestDto; +import io.mosip.kernel.cryptomanager.dto.CryptomanagerResponseDto; +import io.mosip.kernel.cryptomanager.service.CryptomanagerService; +import io.mosip.kernel.core.util.CryptoUtil; +import org.apache.commons.lang3.StringUtils; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.test.util.ReflectionTestUtils; + +import javax.crypto.SecretKey; +import java.nio.charset.StandardCharsets; +import java.security.KeyPair; + +import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +@RunWith(MockitoJUnitRunner.class) +public class EncryptionDecryptionUtilTest { + + @Mock + private CryptomanagerService cryptomanagerService; + + @InjectMocks + private EncryptionDecryptionUtil encryptionDecryptionUtil; + + private final String refId = "ref123"; + private final String aad = "aad123"; + private final String salt = "salt123"; + private final String encryptedData = "encryptedData"; + + + @Before + public void setUp() { + String appId = "MIMOTO"; + ReflectionTestUtils.setField(encryptionDecryptionUtil, "appId", appId); + } + + @Test + public void encrypt_shouldEncryptData() { + CryptomanagerResponseDto responseDto = new CryptomanagerResponseDto(); + responseDto.setData(encryptedData); + when(cryptomanagerService.encrypt(any(CryptomanagerRequestDto.class))).thenReturn(responseDto); + + String data = "testData"; + String result = encryptionDecryptionUtil.encrypt(data, refId, aad, salt); + + assertEquals(encryptedData, result); + } + + @Test + public void encrypt_shouldReturnNullForBlankData() { + String result = encryptionDecryptionUtil.encrypt(null, refId, aad, salt); + + assertNull(result); + } + + @Test + public void decrypt_shouldDecryptData() { + CryptomanagerResponseDto responseDto = new CryptomanagerResponseDto(); + String decryptedData = "testData"; + responseDto.setData(CryptoUtil.encodeToURLSafeBase64(decryptedData.getBytes(StandardCharsets.UTF_8))); + when(cryptomanagerService.decrypt(any(CryptomanagerRequestDto.class))).thenReturn(responseDto); + + String result = encryptionDecryptionUtil.decrypt(encryptedData, refId, aad, salt); + + assertEquals(decryptedData, result); + } + + @Test + public void decrypt_shouldReturnNullForBlankData() { + String result = encryptionDecryptionUtil.decrypt(null, refId, aad, salt); + + assertNull(result); + } + + @Test + public void generateEncryptionKey_shouldGenerateKey() throws Exception { + SecretKey key = EncryptionDecryptionUtil.generateEncryptionKey("AES", 256); + + assertNotNull(key); + assertEquals("AES", key.getAlgorithm()); + } + + @Test + public void generateKeyPair_shouldGenerateKeyPair() throws Exception { + KeyPair keyPair = EncryptionDecryptionUtil.generateKeyPair("Ed25519"); + + assertNotNull(keyPair); + assertEquals("EdDSA", keyPair.getPublic().getAlgorithm()); + } + + @Test + public void encryptPrivateKeyWithAES_shouldEncryptPrivateKey() throws Exception { + SecretKey aesKey = EncryptionDecryptionUtil.generateEncryptionKey("AES", 256); + KeyPair keyPair = EncryptionDecryptionUtil.generateKeyPair("Ed25519"); + + String encryptedPrivateKey = EncryptionDecryptionUtil.encryptPrivateKeyWithAES(aesKey, keyPair.getPrivate()); + + assertNotNull(encryptedPrivateKey); + assertFalse(StringUtils.isBlank(encryptedPrivateKey)); + } +} From 09eacb11e1a5d16596eaa3855200f18fb3a69949 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Thu, 20 Mar 2025 00:26:28 +0530 Subject: [PATCH 457/860] [INJIWEB-1370] write test cases for sessionController and user controller classes and udpate the error code for some of the error scenarios Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../java/io/mosip/mimoto/controller/UserControllerTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/io/mosip/mimoto/controller/UserControllerTest.java b/src/test/java/io/mosip/mimoto/controller/UserControllerTest.java index fc9679163..5e234caf1 100644 --- a/src/test/java/io/mosip/mimoto/controller/UserControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/UserControllerTest.java @@ -51,7 +51,7 @@ public class UserControllerTest { private UserMetadata userMetadata; MockHttpSession mockSession; - + String identityProvider; @Before From 7c0b75cb60071df63fb5160a6d094161df1c0f82 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Thu, 20 Mar 2025 13:47:52 +0530 Subject: [PATCH 458/860] injiweb-1392 updated the sql file with the schema changed from uuid to varchar Signed-off-by: Gurpreet41082 --- db_scripts/inji_mimoto/ddl/mimoto-user_metadata.sql | 6 +++--- .../inji_mimoto/ddl/mimoto-verifiable_credentials.sql | 6 +++--- db_scripts/inji_mimoto/ddl/mimoto-wallet.sql | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/db_scripts/inji_mimoto/ddl/mimoto-user_metadata.sql b/db_scripts/inji_mimoto/ddl/mimoto-user_metadata.sql index bfe423f93..c652d0261 100644 --- a/db_scripts/inji_mimoto/ddl/mimoto-user_metadata.sql +++ b/db_scripts/inji_mimoto/ddl/mimoto-user_metadata.sql @@ -9,9 +9,9 @@ -- ------------------------------------------------------------------------------------------ CREATE TABLE IF NOT EXISTS user_metadata ( - id VARCHAR(36) PRIMARY KEY, -- Primary key for the table - provider_subject_id VARCHAR(255) NOT NULL, -- Unique identifier for the provider subject - identity_provider VARCHAR(255) NOT NULL, -- Unique identifier for the identity provider + id character varying(36) PRIMARY KEY, -- Primary key for the table + provider_subject_id character varying(255) NOT NULL, -- Unique identifier for the provider subject + identity_provider character varying(255) NOT NULL, -- Unique identifier for the identity provider display_name TEXT NOT NULL, -- Display name of the user profile_picture_url TEXT, -- URL of the user's profile picture phone_number TEXT, -- Phone number of the user diff --git a/db_scripts/inji_mimoto/ddl/mimoto-verifiable_credentials.sql b/db_scripts/inji_mimoto/ddl/mimoto-verifiable_credentials.sql index 5f244ec20..acf20a3a8 100644 --- a/db_scripts/inji_mimoto/ddl/mimoto-verifiable_credentials.sql +++ b/db_scripts/inji_mimoto/ddl/mimoto-verifiable_credentials.sql @@ -9,10 +9,10 @@ -- ------------------------------------------------------------------------------------------ CREATE TABLE IF NOT EXISTS verifiable_credentials ( - id UUID PRIMARY KEY, -- Primary key for the table - wallet_id UUID NOT NULL, -- Foreign key referring to the wallet table (wallet.id) + id character varying(36) PRIMARY KEY, -- Primary key for the table + wallet_id character varying(36) NOT NULL, -- Foreign key referring to the wallet table (wallet.id) credential TEXT NOT NULL, -- Encrypted credential (using wallet_key for encryption/decryption) - credential_format VARCHAR(255) NOT NULL, -- Format of the credential (e.g., JSON, JWT, etc.) + credential_format character varying(255) NOT NULL, -- Format of the credential (e.g., JSON, JWT, etc.) credential_metadata JSONB NOT NULL, -- Metadata about the credential created_at TIMESTAMP DEFAULT now(), -- Timestamp of record creation (defaults to current time) updated_at TIMESTAMP DEFAULT now(), -- Timestamp of last update (defaults to current time) diff --git a/db_scripts/inji_mimoto/ddl/mimoto-wallet.sql b/db_scripts/inji_mimoto/ddl/mimoto-wallet.sql index fa7359f48..52e7afec3 100644 --- a/db_scripts/inji_mimoto/ddl/mimoto-wallet.sql +++ b/db_scripts/inji_mimoto/ddl/mimoto-wallet.sql @@ -9,8 +9,8 @@ -- ------------------------------------------------------------------------------------------ CREATE TABLE IF NOT EXISTS wallet ( - id UUID PRIMARY KEY, -- Primary key for the table - user_id UUID NOT NULL, -- Foreign key referencing user_metadata (long-based) + id character varying(36) PRIMARY KEY, -- Primary key for the table + user_id character varying(36) NOT NULL, -- Foreign key referencing user_metadata (long-based) wallet_key TEXT NOT NULL, -- Encrypted wallet key public_key TEXT NOT NULL, -- Public key for wallet secret_key TEXT NOT NULL, -- Secret key, encrypted with wallet_key From 454be5b6f6d7f6517c613c336a22788600d30557 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Thu, 20 Mar 2025 17:58:53 +0530 Subject: [PATCH 459/860] injiweb-1392 changed the uuid field to string Signed-off-by: Gurpreet41082 --- pom.xml | 2 +- .../mimoto/controller/UserController.java | 20 +++++++++---------- .../mimoto/dbentity/VerifiableCredential.java | 6 ++++-- .../java/io/mosip/mimoto/dbentity/Wallet.java | 7 ++++--- .../mimoto/repository/WalletRepository.java | 4 ++-- .../mosip/mimoto/service/WalletService.java | 6 +++--- .../service/impl/WalletServiceImpl.java | 6 +++--- .../java/io/mosip/mimoto/util/WalletUtil.java | 6 +++--- .../mimoto/service/WalletServiceTest.java | 18 ++++++++--------- .../io/mosip/mimoto/util/WalletUtilTest.java | 10 +++++----- 10 files changed, 44 insertions(+), 41 deletions(-) diff --git a/pom.xml b/pom.xml index 6ab23366c..346d4397a 100644 --- a/pom.xml +++ b/pom.xml @@ -94,7 +94,7 @@ 0.9.1 42.7.2 - **/constant/**,**/config/**,**/httpfilter/**,**/cache/**,**/dto/**,**/entity/**,**/model/**,**/exception/**,**/repository/**,**/security/**,**/*Config.java,**/*BootApplication.java,**/*VertxApplication.java,**/cbeffutil/**,**/core/http/**,**/util/** + **/constant/**,**/config/**,**/httpfilter/**,**/cache/**,**/dto/**,**/entity/**,**/dbentity/**,**/model/**,**/exception/**,**/repository/**,**/security/**,**/*Config.java,**/*BootApplication.java,**/*VertxApplication.java,**/cbeffutil/**,**/core/http/**,**/util/** **/dto/**,**/entity/**,**/config/** diff --git a/src/main/java/io/mosip/mimoto/controller/UserController.java b/src/main/java/io/mosip/mimoto/controller/UserController.java index 7d4b06e3d..27e9a0b5b 100644 --- a/src/main/java/io/mosip/mimoto/controller/UserController.java +++ b/src/main/java/io/mosip/mimoto/controller/UserController.java @@ -76,10 +76,10 @@ private UserMetadata fetchUserMetadata(String providerSubjectId, String identity } @PostMapping("/wallets") - public ResponseEntity> createWallet(@RequestBody WalletRequestDto wallet, HttpSession httpSession) { + public ResponseEntity> createWallet(@RequestBody WalletRequestDto wallet, HttpSession httpSession) { try { - ResponseWrapper responseWrapper = new ResponseWrapper<>(); - responseWrapper.setResponse(walletService.createWallet((UUID) httpSession.getAttribute("userId"), wallet.getPin())); + ResponseWrapper responseWrapper = new ResponseWrapper<>(); + responseWrapper.setResponse(walletService.createWallet((String) httpSession.getAttribute("userId"), wallet.getPin())); return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); } catch (Exception exception) { log.error("Error occurred while creating user wallets : ", exception); @@ -88,11 +88,11 @@ public ResponseEntity> createWallet(@RequestBody WalletReq } @GetMapping("/wallets") - public ResponseEntity>> getWallets(HttpSession httpSession) { + public ResponseEntity>> getWallets(HttpSession httpSession) { try { - ResponseWrapper> responseWrapper = new ResponseWrapper<>(); - List list = new ArrayList<>(); - list.addAll(walletService.getWallets((UUID) httpSession.getAttribute("userId"))); + ResponseWrapper> responseWrapper = new ResponseWrapper<>(); + List list = new ArrayList<>(); + list.addAll(walletService.getWallets((String) httpSession.getAttribute("userId"))); responseWrapper.setResponse(list); return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); } catch (Exception exception) { @@ -102,13 +102,13 @@ public ResponseEntity>> getWallets(HttpSession httpSe } @PostMapping("/wallets/{walletId}") - public ResponseEntity> getWallet(@PathVariable("walletId") UUID walletId, @RequestBody WalletRequestDto wallet, HttpSession httpSession) { + public ResponseEntity> getWallet(@PathVariable("walletId") String walletId, @RequestBody WalletRequestDto wallet, HttpSession httpSession) { try { // If wallet_key does not exist in the session, fetch it and set it in the session - String walletKey = walletService.getWalletKey((UUID) httpSession.getAttribute("userId"), walletId, wallet.getPin()); + String walletKey = walletService.getWalletKey((String) httpSession.getAttribute("userId"), walletId, wallet.getPin()); httpSession.setAttribute("wallet_key", walletKey); - ResponseWrapper responseWrapper = new ResponseWrapper<>(); + ResponseWrapper responseWrapper = new ResponseWrapper<>(); responseWrapper.setResponse(walletId); return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); } catch (Exception exception) { diff --git a/src/main/java/io/mosip/mimoto/dbentity/VerifiableCredential.java b/src/main/java/io/mosip/mimoto/dbentity/VerifiableCredential.java index a9e05ee0a..bd4b42ba5 100644 --- a/src/main/java/io/mosip/mimoto/dbentity/VerifiableCredential.java +++ b/src/main/java/io/mosip/mimoto/dbentity/VerifiableCredential.java @@ -3,6 +3,8 @@ import jakarta.persistence.*; import lombok.Getter; import lombok.Setter; +import org.hibernate.annotations.GenericGenerator; + import java.time.Instant; @Entity @@ -11,8 +13,8 @@ public class VerifiableCredential { @Id - @GeneratedValue(strategy = GenerationType.AUTO) - private Long id; + @Column(length = 36, updatable = false, nullable = false) + private String id; @ManyToOne @JoinColumn(name = "wallet_id", nullable = false) // Foreign key reference to wallet table diff --git a/src/main/java/io/mosip/mimoto/dbentity/Wallet.java b/src/main/java/io/mosip/mimoto/dbentity/Wallet.java index 0499e0f2d..adc5b19bb 100644 --- a/src/main/java/io/mosip/mimoto/dbentity/Wallet.java +++ b/src/main/java/io/mosip/mimoto/dbentity/Wallet.java @@ -3,6 +3,7 @@ import jakarta.persistence.*; import lombok.Getter; import lombok.Setter; +import org.hibernate.annotations.GenericGenerator; import org.hibernate.annotations.JdbcTypeCode; import org.hibernate.type.SqlTypes; @@ -15,11 +16,11 @@ public class Wallet { @Id - @GeneratedValue(strategy = GenerationType.AUTO) - private UUID id; + @Column(length = 36, updatable = false, nullable = false) + private String id; @Column(nullable = false) - private UUID userId; // Foreign key reference to user_metadata (long-based) + private String userId; // Foreign key reference to user_metadata @Column(nullable = false) private String walletKey; // Encrypted wallet key using AES256-GCM diff --git a/src/main/java/io/mosip/mimoto/repository/WalletRepository.java b/src/main/java/io/mosip/mimoto/repository/WalletRepository.java index 880bdbd58..4e0d61b39 100644 --- a/src/main/java/io/mosip/mimoto/repository/WalletRepository.java +++ b/src/main/java/io/mosip/mimoto/repository/WalletRepository.java @@ -11,7 +11,7 @@ public interface WalletRepository extends JpaRepository { @Query("SELECT w.id FROM Wallet w WHERE w.userId = :userId") - List findWalletIdByUserId(@Param("userId") UUID userId); + List findWalletIdByUserId(@Param("userId") String userId); - Optional findByUserIdAndId(UUID userId, UUID walletId); + Optional findByUserIdAndId(String userId, String walletId); } diff --git a/src/main/java/io/mosip/mimoto/service/WalletService.java b/src/main/java/io/mosip/mimoto/service/WalletService.java index 9aed85f88..63917c2dd 100644 --- a/src/main/java/io/mosip/mimoto/service/WalletService.java +++ b/src/main/java/io/mosip/mimoto/service/WalletService.java @@ -5,9 +5,9 @@ import java.util.UUID; public interface WalletService { - public UUID createWallet(UUID userId, String pin) throws NoSuchAlgorithmException, Exception; + public String createWallet(String userId, String pin) throws NoSuchAlgorithmException, Exception; - String getWalletKey(UUID userId, UUID walletId, String pin); + String getWalletKey(String userId, String walletId, String pin); - List getWallets(UUID userId); + List getWallets(String userId); } diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java index fbfc2d507..974d57847 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java @@ -24,20 +24,20 @@ public class WalletServiceImpl implements WalletService { @Autowired private WalletUtil walletHelper; @Override - public UUID createWallet(UUID userId, String pin) throws Exception { + public String createWallet(String userId, String pin) throws Exception { // Create a new wallet for the user return walletHelper.createEd25519AlgoWallet(userId, pin); } @Override - public String getWalletKey(UUID userId, UUID walletId, String pin) { + public String getWalletKey(String userId, String walletId, String pin) { Optional existingWallet = walletRepository.findByUserIdAndId(userId, walletId); // Decrypt wallet key using the user's PIN return existingWallet.map(wallet -> walletHelper.decryptWalletKey(wallet.getWalletKey(), pin)).orElse(null); } @Override - public List getWallets(UUID userId) { + public List getWallets(String userId) { return walletRepository.findWalletIdByUserId(userId); } } diff --git a/src/main/java/io/mosip/mimoto/util/WalletUtil.java b/src/main/java/io/mosip/mimoto/util/WalletUtil.java index eba037874..a3d5aceb0 100644 --- a/src/main/java/io/mosip/mimoto/util/WalletUtil.java +++ b/src/main/java/io/mosip/mimoto/util/WalletUtil.java @@ -39,13 +39,13 @@ public String decryptWalletKey(String encryptedWalletKey, String pin) { return responseDto.getData(); } - public UUID createNewWallet(UUID userId, String pin, KeyPair keyPair, SecretKey encryptionKey, String encryptionAlgorithm, String encryptionType) throws Exception { + public String createNewWallet(String userId, String pin, KeyPair keyPair, SecretKey encryptionKey, String encryptionAlgorithm, String encryptionType) throws Exception { // Encrypt the private key with the encryption key String encryptedPrivateKey = EncryptionDecryptionUtil.encryptPrivateKeyWithAES(encryptionKey, keyPair.getPrivate()); // Create wallet record - UUID walletId = UUID.randomUUID(); + String walletId = UUID.randomUUID().toString(); Wallet newWallet = new Wallet(); newWallet.setId(walletId); newWallet.setUserId(userId); @@ -75,7 +75,7 @@ public UUID createNewWallet(UUID userId, String pin, KeyPair keyPair, SecretKey // Default method for Ed25519 and AES - public UUID createEd25519AlgoWallet(UUID userId, String pin) throws Exception { + public String createEd25519AlgoWallet(String userId, String pin) throws Exception { SecretKey encryptionKey = EncryptionDecryptionUtil.generateEncryptionKey("AES", 256); KeyPair keyPair = EncryptionDecryptionUtil.generateKeyPair("Ed25519"); return createNewWallet(userId, pin, keyPair, encryptionKey, "AES", "encryptWithPin"); diff --git a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java index de1691b4b..d8c8ad03b 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java @@ -31,8 +31,8 @@ public class WalletServiceTest { @InjectMocks private WalletServiceImpl walletService; - private UUID userId; - private UUID walletId; + private String userId; + private String walletId; private String pin; private Wallet wallet; private String encryptedWalletKey; @@ -40,8 +40,8 @@ public class WalletServiceTest { @Before public void setUp() { - userId = UUID.randomUUID(); - walletId = UUID.randomUUID(); + userId = UUID.randomUUID().toString(); + walletId = UUID.randomUUID().toString(); pin = "1234"; encryptedWalletKey = "encryptedKey"; decryptedWalletKey = "decryptedKey"; @@ -54,10 +54,10 @@ public void setUp() { @Test public void createWallet_shouldCreateWalletSuccessfully() throws Exception { - UUID newWalletId = UUID.randomUUID(); + String newWalletId = UUID.randomUUID().toString(); when(walletHelper.createEd25519AlgoWallet(userId, pin)).thenReturn(newWalletId); - UUID result = walletService.createWallet(userId, pin); + String result = walletService.createWallet(userId, pin); assertEquals(newWalletId, result); } @@ -83,10 +83,10 @@ public void getWalletKey_shouldReturnNullIfWalletNotFound() { @Test public void getWallets_shouldReturnListOfWalletIds() { - List walletIds = Arrays.asList(UUID.randomUUID(), UUID.randomUUID()); + List walletIds = Arrays.asList(UUID.randomUUID().toString(), UUID.randomUUID().toString()); when(walletRepository.findWalletIdByUserId(userId)).thenReturn(walletIds); - List result = walletService.getWallets(userId); + List result = walletService.getWallets(userId); assertEquals(walletIds, result); } @@ -95,7 +95,7 @@ public void getWallets_shouldReturnListOfWalletIds() { public void getWallets_shouldReturnEmptyListIfNoWalletsFound() { when(walletRepository.findWalletIdByUserId(userId)).thenReturn(List.of()); - List result = walletService.getWallets(userId); + List result = walletService.getWallets(userId); assertTrue(result.isEmpty()); } diff --git a/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java b/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java index 3629275ad..7730c8ce8 100644 --- a/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java +++ b/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java @@ -39,7 +39,7 @@ class WalletUtilTest { private WalletUtil walletUtil; private String pin; - private UUID userId; + private String userId; private KeyPair keyPair; private SecretKey encryptionKey; private String encryptedPrivateKey; @@ -53,7 +53,7 @@ class WalletUtilTest { @BeforeEach void setUp() throws Exception { pin = "1234"; - userId = UUID.randomUUID(); + userId = UUID.randomUUID().toString(); keyPair = EncryptionDecryptionUtil.generateKeyPair("Ed25519"); encryptionKey = EncryptionDecryptionUtil.generateEncryptionKey("AES", 256); encryptedPrivateKey = EncryptionDecryptionUtil.encryptPrivateKeyWithAES(encryptionKey, keyPair.getPrivate()); @@ -79,7 +79,7 @@ void decryptWalletKey_shouldDecryptSuccessfully() { void createNewWallet_shouldCreateWalletSuccessfully() throws Exception { cryptoResponseDto.setData(encryptedWalletKey); when(cryptomanagerService.encryptWithPin(any(CryptoWithPinRequestDto.class))).thenReturn(cryptoResponseDto); - UUID walletId = walletUtil.createNewWallet(userId, pin, keyPair, encryptionKey, encryptionAlgorithm, encryptionType); + String walletId = walletUtil.createNewWallet(userId, pin, keyPair, encryptionKey, encryptionAlgorithm, encryptionType); assertNotNull(walletId); } @@ -88,7 +88,7 @@ void createNewWallet_shouldCreateWalletSuccessfully() throws Exception { void createEd25519AlgoWallet_shouldCreateEd25519WalletSuccessfully() throws Exception { cryptoResponseDto.setData(encryptedWalletKey); when(cryptomanagerService.encryptWithPin(any(CryptoWithPinRequestDto.class))).thenReturn(cryptoResponseDto); - UUID walletId = walletUtil.createEd25519AlgoWallet(userId, pin); + String walletId = walletUtil.createEd25519AlgoWallet(userId, pin); assertNotNull(walletId); } @@ -98,7 +98,7 @@ void createEd25519AlgoWallet_shouldCreateEd25519WalletSuccessfully() throws Exce void createNewWallet_verifyWalletObject() throws Exception { cryptoResponseDto.setData(encryptedWalletKey); when(cryptomanagerService.encryptWithPin(any(CryptoWithPinRequestDto.class))).thenReturn(cryptoResponseDto); - UUID walletId = walletUtil.createNewWallet(userId, pin, keyPair, encryptionKey, encryptionAlgorithm, encryptionType); + String walletId = walletUtil.createNewWallet(userId, pin, keyPair, encryptionKey, encryptionAlgorithm, encryptionType); ArgumentCaptor walletCaptor = ArgumentCaptor.forClass(Wallet.class); verify(walletRepository).save(walletCaptor.capture()); From 490d080e1eb261812cf6b64130d5ec9077d0b595 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Tue, 25 Mar 2025 15:41:40 +0530 Subject: [PATCH 460/860] injiweb-1392 added the wallet name too in the wallet table Signed-off-by: Gurpreet41082 --- db_scripts/inji_mimoto/ddl/mimoto-wallet.sql | 1 + .../io/mosip/mimoto/controller/UserController.java | 6 +++--- src/main/java/io/mosip/mimoto/dbentity/Wallet.java | 3 +++ .../java/io/mosip/mimoto/dto/WalletRequestDto.java | 1 + .../java/io/mosip/mimoto/service/WalletService.java | 2 +- .../mosip/mimoto/service/impl/WalletServiceImpl.java | 4 ++-- src/main/java/io/mosip/mimoto/util/WalletUtil.java | 7 ++++--- src/main/resources/application-local.properties | 4 ++-- .../io/mosip/mimoto/service/WalletServiceTest.java | 10 ++++++---- src/test/java/io/mosip/mimoto/util/WalletUtilTest.java | 8 +++++--- 10 files changed, 28 insertions(+), 18 deletions(-) diff --git a/db_scripts/inji_mimoto/ddl/mimoto-wallet.sql b/db_scripts/inji_mimoto/ddl/mimoto-wallet.sql index 52e7afec3..e086ae2ac 100644 --- a/db_scripts/inji_mimoto/ddl/mimoto-wallet.sql +++ b/db_scripts/inji_mimoto/ddl/mimoto-wallet.sql @@ -10,6 +10,7 @@ CREATE TABLE IF NOT EXISTS wallet ( id character varying(36) PRIMARY KEY, -- Primary key for the table + name TEXT NOT NULL, -- wallet name user_id character varying(36) NOT NULL, -- Foreign key referencing user_metadata (long-based) wallet_key TEXT NOT NULL, -- Encrypted wallet key public_key TEXT NOT NULL, -- Public key for wallet diff --git a/src/main/java/io/mosip/mimoto/controller/UserController.java b/src/main/java/io/mosip/mimoto/controller/UserController.java index 27e9a0b5b..59cb89b01 100644 --- a/src/main/java/io/mosip/mimoto/controller/UserController.java +++ b/src/main/java/io/mosip/mimoto/controller/UserController.java @@ -29,7 +29,7 @@ @Slf4j @RestController -@RequestMapping(value = "/secure/user") +@RequestMapping(value = "/users/me") public class UserController { @Autowired @@ -41,7 +41,7 @@ public class UserController { @Autowired private WalletService walletService; - @GetMapping("/profile") + @GetMapping public ResponseEntity> getUserProfile(Authentication authentication, HttpSession session) { try { ResponseWrapper responseWrapper = new ResponseWrapper<>(); @@ -79,7 +79,7 @@ private UserMetadata fetchUserMetadata(String providerSubjectId, String identity public ResponseEntity> createWallet(@RequestBody WalletRequestDto wallet, HttpSession httpSession) { try { ResponseWrapper responseWrapper = new ResponseWrapper<>(); - responseWrapper.setResponse(walletService.createWallet((String) httpSession.getAttribute("userId"), wallet.getPin())); + responseWrapper.setResponse(walletService.createWallet((String) httpSession.getAttribute("userId"), wallet.getName(), wallet.getPin())); return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); } catch (Exception exception) { log.error("Error occurred while creating user wallets : ", exception); diff --git a/src/main/java/io/mosip/mimoto/dbentity/Wallet.java b/src/main/java/io/mosip/mimoto/dbentity/Wallet.java index adc5b19bb..88ae67b18 100644 --- a/src/main/java/io/mosip/mimoto/dbentity/Wallet.java +++ b/src/main/java/io/mosip/mimoto/dbentity/Wallet.java @@ -19,6 +19,9 @@ public class Wallet { @Column(length = 36, updatable = false, nullable = false) private String id; + @Column(nullable = false) + private String name; + @Column(nullable = false) private String userId; // Foreign key reference to user_metadata diff --git a/src/main/java/io/mosip/mimoto/dto/WalletRequestDto.java b/src/main/java/io/mosip/mimoto/dto/WalletRequestDto.java index 82574f47f..4dcbb0052 100644 --- a/src/main/java/io/mosip/mimoto/dto/WalletRequestDto.java +++ b/src/main/java/io/mosip/mimoto/dto/WalletRequestDto.java @@ -9,4 +9,5 @@ @ApiModel(description = "Model representing a user wallet request") public class WalletRequestDto { String pin; + String name; } diff --git a/src/main/java/io/mosip/mimoto/service/WalletService.java b/src/main/java/io/mosip/mimoto/service/WalletService.java index 63917c2dd..4dcc34707 100644 --- a/src/main/java/io/mosip/mimoto/service/WalletService.java +++ b/src/main/java/io/mosip/mimoto/service/WalletService.java @@ -5,7 +5,7 @@ import java.util.UUID; public interface WalletService { - public String createWallet(String userId, String pin) throws NoSuchAlgorithmException, Exception; + public String createWallet(String userId, String pin, String walletName) throws NoSuchAlgorithmException, Exception; String getWalletKey(String userId, String walletId, String pin); diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java index 974d57847..d6c41bacd 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java @@ -24,9 +24,9 @@ public class WalletServiceImpl implements WalletService { @Autowired private WalletUtil walletHelper; @Override - public String createWallet(String userId, String pin) throws Exception { + public String createWallet(String userId, String walletName, String pin) throws Exception { // Create a new wallet for the user - return walletHelper.createEd25519AlgoWallet(userId, pin); + return walletHelper.createEd25519AlgoWallet(userId, walletName, pin); } @Override diff --git a/src/main/java/io/mosip/mimoto/util/WalletUtil.java b/src/main/java/io/mosip/mimoto/util/WalletUtil.java index a3d5aceb0..4cb4bde01 100644 --- a/src/main/java/io/mosip/mimoto/util/WalletUtil.java +++ b/src/main/java/io/mosip/mimoto/util/WalletUtil.java @@ -39,7 +39,7 @@ public String decryptWalletKey(String encryptedWalletKey, String pin) { return responseDto.getData(); } - public String createNewWallet(String userId, String pin, KeyPair keyPair, SecretKey encryptionKey, String encryptionAlgorithm, String encryptionType) throws Exception { + public String createNewWallet(String userId, String walletName, String pin, KeyPair keyPair, SecretKey encryptionKey, String encryptionAlgorithm, String encryptionType) throws Exception { // Encrypt the private key with the encryption key String encryptedPrivateKey = EncryptionDecryptionUtil.encryptPrivateKeyWithAES(encryptionKey, keyPair.getPrivate()); @@ -48,6 +48,7 @@ public String createNewWallet(String userId, String pin, KeyPair keyPair, Secret String walletId = UUID.randomUUID().toString(); Wallet newWallet = new Wallet(); newWallet.setId(walletId); + newWallet.setName(walletName); newWallet.setUserId(userId); KeyMetadata keyMetadata = new KeyMetadata(); keyMetadata.setAlgorithmName(keyPair.getPublic().getAlgorithm()); @@ -75,10 +76,10 @@ public String createNewWallet(String userId, String pin, KeyPair keyPair, Secret // Default method for Ed25519 and AES - public String createEd25519AlgoWallet(String userId, String pin) throws Exception { + public String createEd25519AlgoWallet(String userId, String walletName, String pin) throws Exception { SecretKey encryptionKey = EncryptionDecryptionUtil.generateEncryptionKey("AES", 256); KeyPair keyPair = EncryptionDecryptionUtil.generateKeyPair("Ed25519"); - return createNewWallet(userId, pin, keyPair, encryptionKey, "AES", "encryptWithPin"); + return createNewWallet(userId, walletName, pin, keyPair, encryptionKey, "AES", "encryptWithPin"); } } diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index e08a07476..fbc87e250 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -148,7 +148,7 @@ mosip.kernel.crypto.hash-algorithm-name=PBKDF2WithHmacSHA512 #Symmtric key length used in hash mosip.kernel.crypto.hash-symmetric-key-length=256 #No of iterations in hash -mosip.kernel.crypto.hash-iteration=100000 +mosip.kernel.crypto.hash-iteration=10000 mosip.kernel.keygenerator.symmetric-algorithm-name=AES mosip.kernel.keygenerator.symmetric-key-length=256 #Asymmetric algorithm key length @@ -292,7 +292,7 @@ spring.security.oauth2.client.provider.google.user-info-uri=https://www.googleap spring.datasource.url=jdbc:postgresql://localhost:5432/inji_mimoto spring.datasource.username=postgres spring.datasource.password=postgres -spring.jpa.hibernate.ddl-auto=update +spring.jpa.hibernate.ddl-auto=none spring.jpa.show-sql=true spring.datasource.driver-class-name=org.postgresql.Driver diff --git a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java index d8c8ad03b..204c33ec3 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java @@ -32,6 +32,7 @@ public class WalletServiceTest { private WalletServiceImpl walletService; private String userId; + private String name; private String walletId; private String pin; private Wallet wallet; @@ -43,6 +44,7 @@ public void setUp() { userId = UUID.randomUUID().toString(); walletId = UUID.randomUUID().toString(); pin = "1234"; + name = "default"; encryptedWalletKey = "encryptedKey"; decryptedWalletKey = "decryptedKey"; @@ -55,9 +57,9 @@ public void setUp() { @Test public void createWallet_shouldCreateWalletSuccessfully() throws Exception { String newWalletId = UUID.randomUUID().toString(); - when(walletHelper.createEd25519AlgoWallet(userId, pin)).thenReturn(newWalletId); + when(walletHelper.createEd25519AlgoWallet(userId, name, pin)).thenReturn(newWalletId); - String result = walletService.createWallet(userId, pin); + String result = walletService.createWallet(userId, name, pin); assertEquals(newWalletId, result); } @@ -102,8 +104,8 @@ public void getWallets_shouldReturnEmptyListIfNoWalletsFound() { @Test(expected = Exception.class) public void createWallet_shouldThrowException() throws Exception { - when(walletHelper.createEd25519AlgoWallet(userId, pin)).thenThrow(new Exception("Test Exception")); + when(walletHelper.createEd25519AlgoWallet(userId, name, pin)).thenThrow(new Exception("Test Exception")); - walletService.createWallet(userId, pin); + walletService.createWallet(userId, name, pin); } } \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java b/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java index 7730c8ce8..66a98bf1d 100644 --- a/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java +++ b/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java @@ -39,6 +39,7 @@ class WalletUtilTest { private WalletUtil walletUtil; private String pin; + private String name; private String userId; private KeyPair keyPair; private SecretKey encryptionKey; @@ -53,6 +54,7 @@ class WalletUtilTest { @BeforeEach void setUp() throws Exception { pin = "1234"; + name = "default"; userId = UUID.randomUUID().toString(); keyPair = EncryptionDecryptionUtil.generateKeyPair("Ed25519"); encryptionKey = EncryptionDecryptionUtil.generateEncryptionKey("AES", 256); @@ -79,7 +81,7 @@ void decryptWalletKey_shouldDecryptSuccessfully() { void createNewWallet_shouldCreateWalletSuccessfully() throws Exception { cryptoResponseDto.setData(encryptedWalletKey); when(cryptomanagerService.encryptWithPin(any(CryptoWithPinRequestDto.class))).thenReturn(cryptoResponseDto); - String walletId = walletUtil.createNewWallet(userId, pin, keyPair, encryptionKey, encryptionAlgorithm, encryptionType); + String walletId = walletUtil.createNewWallet(userId, pin, name, keyPair, encryptionKey, encryptionAlgorithm, encryptionType); assertNotNull(walletId); } @@ -88,7 +90,7 @@ void createNewWallet_shouldCreateWalletSuccessfully() throws Exception { void createEd25519AlgoWallet_shouldCreateEd25519WalletSuccessfully() throws Exception { cryptoResponseDto.setData(encryptedWalletKey); when(cryptomanagerService.encryptWithPin(any(CryptoWithPinRequestDto.class))).thenReturn(cryptoResponseDto); - String walletId = walletUtil.createEd25519AlgoWallet(userId, pin); + String walletId = walletUtil.createEd25519AlgoWallet(userId, name, pin); assertNotNull(walletId); } @@ -98,7 +100,7 @@ void createEd25519AlgoWallet_shouldCreateEd25519WalletSuccessfully() throws Exce void createNewWallet_verifyWalletObject() throws Exception { cryptoResponseDto.setData(encryptedWalletKey); when(cryptomanagerService.encryptWithPin(any(CryptoWithPinRequestDto.class))).thenReturn(cryptoResponseDto); - String walletId = walletUtil.createNewWallet(userId, pin, keyPair, encryptionKey, encryptionAlgorithm, encryptionType); + String walletId = walletUtil.createNewWallet(userId, pin, name, keyPair, encryptionKey, encryptionAlgorithm, encryptionType); ArgumentCaptor walletCaptor = ArgumentCaptor.forClass(Wallet.class); verify(walletRepository).save(walletCaptor.capture()); From cb095c0c492bd14048303148f515e9249fd208b1 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 25 Mar 2025 15:06:22 +0530 Subject: [PATCH 461/860] [INJIWEB-1370] add prefix to all the sessions that are being stored into redis as part of login flow Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- src/main/resources/application-local.properties | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index fbc87e250..3919e5563 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -301,4 +301,5 @@ spring.session.store-type=redis spring.redis.host=localhost spring.redis.port=6379 spring.redis.password= -server.servlet.session.timeout=30m \ No newline at end of file +server.servlet.session.timeout=30m +spring.session.redis.namespace=injiweb:session: \ No newline at end of file From 0f026405987c0bb684ee031f620cf80c397e640e Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 25 Mar 2025 15:14:37 +0530 Subject: [PATCH 462/860] [INJIWEB-1370] add test cases for access denied and client registration id not found scenarios in authentication failure handler file Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../security/oauth2/OAuth2LoginTests.java | 89 ++++++++++++++++++- 1 file changed, 85 insertions(+), 4 deletions(-) diff --git a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java index e8a65d463..cf16c707d 100644 --- a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java +++ b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java @@ -4,6 +4,7 @@ import io.mosip.mimoto.controller.UserController; import io.mosip.mimoto.dbentity.UserMetadata; import io.mosip.mimoto.repository.UserMetadataRepository; +import io.mosip.mimoto.service.UserMetadataService; import io.mosip.mimoto.util.EncryptionDecryptionUtil; import jakarta.servlet.http.Cookie; import lombok.extern.slf4j.Slf4j; @@ -13,6 +14,7 @@ import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.boot.test.mock.mockito.MockBean; @@ -20,8 +22,14 @@ import org.springframework.mock.web.MockHttpSession; import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.oauth2.client.OAuth2AuthorizedClientService; import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken; +import org.springframework.security.oauth2.client.registration.ClientRegistration; import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository; +import org.springframework.security.oauth2.client.web.HttpSessionOAuth2AuthorizationRequestRepository; +import org.springframework.security.oauth2.core.AuthorizationGrantType; +import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationRequest; +import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames; import org.springframework.security.oauth2.core.user.DefaultOAuth2User; import org.springframework.security.oauth2.core.user.OAuth2User; import org.springframework.session.Session; @@ -44,16 +52,20 @@ @ContextConfiguration(classes = Config.class) @WebMvcTest(Config.class) @AutoConfigureMockMvc -@Import({UserController.class}) +@Import({UserController.class, OAuth2AuthenticationSuccessHandler.class, OAuth2AuthenticationFailureHandler.class, HttpSessionOAuth2AuthorizationRequestRepository.class}) @Slf4j public class OAuth2LoginTests { + + @Value("${mosip.inji.web.url}") + private String injiWebUrl; + @Autowired private MockMvc mockMvc; - @MockBean + @Autowired private OAuth2AuthenticationSuccessHandler oAuth2AuthenticationSuccessHandler; - @MockBean + @Autowired private OAuth2AuthenticationFailureHandler oAuth2AuthenticationFailureHandler; @MockBean @@ -68,6 +80,12 @@ public class OAuth2LoginTests { @MockBean private SessionRepository sessionRepository; + @MockBean + private UserMetadataService userMetadataService; + + @MockBean + private OAuth2AuthorizedClientService oAuth2AuthorizedClientService; + private String providerSubjectId, identityProvider, displayName, profilePictureUrl, email, userId; private Timestamp now; private UserMetadata userMetadata; @@ -92,13 +110,26 @@ public void setUp() { userMetadata.setEmail(email); userMetadata.setCreatedAt(now); userMetadata.setUpdatedAt(now); + + ClientRegistration googleClient = ClientRegistration.withRegistrationId("google") + .clientId("test-client-id") + .clientSecret("test-client-secret") + .authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE) + .redirectUri("https://injiweb.dev1.mosip.net/login/oauth2/callback/google") + .tokenUri("https://oauth2.googleapis.com/token") + .authorizationUri("https://accounts.google.com/o/oauth2/auth") + .userInfoUri("https://www.googleapis.com/oauth2/v3/userinfo") + .clientName("Google") + .build(); + + when(clientRegistrationRepository.findByRegistrationId("google")).thenReturn(googleClient); } @Test public void shouldBeRedirectedToRedirectEndpointOnUnauthenticatedAccessToProtectedEndpoint() throws Exception { mockMvc.perform(get("/secure/user/profile")) .andExpect(status().is3xxRedirection()) - .andExpect(redirectedUrl("https://injiweb.dev1.mosip.net/login")); + .andExpect(redirectedUrl(injiWebUrl+"/login")); } @Test @@ -172,4 +203,54 @@ public void shouldPerformLogoutSuccessfullyForaValidSession() throws Exception { verify(sessionRepository, times(1)).findById(sessionId); verify(sessionRepository, times(1)).deleteById(sessionId); } + + @Test + public void shouldSendTheCustomErrorInRedirectUrlWhenUserDeniesConsentDuringLogin() throws Exception { + MockHttpSession mockSession = new MockHttpSession(); + + OAuth2AuthorizationRequest authRequest = OAuth2AuthorizationRequest.authorizationCode() + .authorizationUri("https://accounts.google.com/o/oauth2/auth") + .clientId("test-client-id") + .redirectUri("https://yourapp.com/oauth2/callback/google") + .scopes(Collections.singleton("profile")) + .state("test-state") + .attributes(Map.of(OAuth2ParameterNames.REGISTRATION_ID, "google")) + .build(); + + // Store in session under the expected key + mockSession.setAttribute(HttpSessionOAuth2AuthorizationRequestRepository.class.getName() + ".AUTHORIZATION_REQUEST", authRequest); + + mockMvc.perform(get("/oauth2/callback/google") + .session(mockSession) + .param("error", "access_denied") // Simulating the user clicking "Deny or Cancel" button in the consent + .param("state", "test-state") + .param("registration_id", "google")) + .andExpect(status().is3xxRedirection()) + .andExpect(redirectedUrl("https://injiweb.dev1.mosip.net/login?status=error&error_message=Consent+was+denied+to+share+the+details+with+the+application.+Please+give+consent+and+try+again")); + } + + @Test + public void shouldThrowTheCustomErrorInRedirectUrlWhenAnyExceptionOccurredDuringLogin() throws Exception { + MockHttpSession mockSession = new MockHttpSession(); + + //registration_id is not sent in the auth request + OAuth2AuthorizationRequest authRequest = OAuth2AuthorizationRequest.authorizationCode() + .authorizationUri("https://accounts.google.com/o/oauth2/auth") + .clientId("test-client-id") + .redirectUri("https://yourapp.com/oauth2/callback/google") + .scopes(Collections.singleton("profile")) + .state("test-state") + .build(); + + // Store in session under the expected key + mockSession.setAttribute(HttpSessionOAuth2AuthorizationRequestRepository.class.getName() + ".AUTHORIZATION_REQUEST", authRequest); + + mockMvc.perform(get("/oauth2/callback/google") + .session(mockSession) + .param("error", "access_denied") + .param("state", "test-state") + .param("registration_id", "google")) + .andExpect(status().is3xxRedirection()) + .andExpect(redirectedUrl(injiWebUrl+"/login?status=error&error_message=Login+is+failed+due+to+%3A+%5Bclient_registration_not_found%5D+Client+Registration+not+found+with+Id%3A+null")); + } } \ No newline at end of file From 9a1a2cdf1abd26e2789b82c977ce91923b7a614c Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 25 Mar 2025 15:41:44 +0530 Subject: [PATCH 463/860] [INJIWEB-1370] update the access denied error message in authentication failure handler to make it more meaningful Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../security/oauth2/OAuth2AuthenticationFailureHandler.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationFailureHandler.java b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationFailureHandler.java index 179013c19..74cc0e6d8 100644 --- a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationFailureHandler.java +++ b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationFailureHandler.java @@ -33,12 +33,12 @@ public void onAuthenticationFailure(HttpServletRequest request, HttpServletRespo } else if (cause instanceof java.net.ConnectException) { errorMessage = "Could not connect to the IDP for authorization"; } else if (exception.getMessage().contains("access_denied")) { - errorMessage = "Access Denied. Please try again"; + errorMessage = "Consent was denied to share the details with the application. Please give consent and try again"; } else { - errorMessage = "Login is failed due to: " + exception.getMessage(); + errorMessage = "Login is failed due to : " + exception.getMessage(); } } else { - errorMessage = "Login is failed due to: " + exception.getMessage(); + errorMessage = "Login is failed due to : " + exception.getMessage(); } } From dc90610cf5551662e2c58af7444ed73e0c42365d Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 25 Mar 2025 17:11:24 +0530 Subject: [PATCH 464/860] [INJIWEB-1370] mock the wallet service and update the user profile endpoint url in user controller and oauth login tests Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../mosip/mimoto/controller/UserControllerTest.java | 11 +++++++---- .../mimoto/security/oauth2/OAuth2LoginTests.java | 8 ++++++-- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/test/java/io/mosip/mimoto/controller/UserControllerTest.java b/src/test/java/io/mosip/mimoto/controller/UserControllerTest.java index 5e234caf1..5b396ab38 100644 --- a/src/test/java/io/mosip/mimoto/controller/UserControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/UserControllerTest.java @@ -2,8 +2,8 @@ import io.mosip.mimoto.dbentity.UserMetadata; import io.mosip.mimoto.repository.UserMetadataRepository; +import io.mosip.mimoto.service.WalletService; import io.mosip.mimoto.util.EncryptionDecryptionUtil; -import lombok.extern.slf4j.Slf4j; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -48,6 +48,9 @@ public class UserControllerTest { @Autowired private WebApplicationContext context; + @MockBean + private WalletService walletService; + private UserMetadata userMetadata; MockHttpSession mockSession; @@ -76,7 +79,7 @@ public void setUp() { @Test public void shouldReturnTheUserDataForValidValues() throws Exception { - mockMvc.perform(MockMvcRequestBuilders.get("/secure/user/profile").accept(MediaType.APPLICATION_JSON) + mockMvc.perform(MockMvcRequestBuilders.get("/users/me").accept(MediaType.APPLICATION_JSON) .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")).session(mockSession)) .andExpect(MockMvcResultMatchers.status().isOk()) .andExpect(MockMvcResultMatchers.jsonPath("$.response.display_name").value("Name 123")) @@ -90,7 +93,7 @@ public void shouldReturnTheUserDataForValidValues() throws Exception { public void shouldThrowExceptionForAInvalidUser() throws Exception { when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider("user123",identityProvider)).thenReturn(Optional.empty()); - mockMvc.perform(MockMvcRequestBuilders.get("/secure/user/profile").accept(MediaType.APPLICATION_JSON) + mockMvc.perform(MockMvcRequestBuilders.get("/users/me").accept(MediaType.APPLICATION_JSON) .session(mockSession) .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")).session(mockSession)) .andExpect(MockMvcResultMatchers.status().isNotFound()) @@ -104,7 +107,7 @@ public void shouldThrowExceptionIfAnyOtherErrorOccurredWhileFetchingUserData() t when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider("user123",identityProvider)).thenReturn(Optional.of(userMetadata)); when(encryptionDecryptionUtil.decrypt("encryptedName", "user_pii", "", "")).thenThrow(new RuntimeException("Failure occurred while decrypting the name")); - mockMvc.perform(MockMvcRequestBuilders.get("/secure/user/profile").accept(MediaType.APPLICATION_JSON) + mockMvc.perform(MockMvcRequestBuilders.get("/users/me").accept(MediaType.APPLICATION_JSON) .session(mockSession) .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")).session(mockSession)) .andExpect(MockMvcResultMatchers.status().isInternalServerError()) diff --git a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java index cf16c707d..1c1de5861 100644 --- a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java +++ b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java @@ -5,6 +5,7 @@ import io.mosip.mimoto.dbentity.UserMetadata; import io.mosip.mimoto.repository.UserMetadataRepository; import io.mosip.mimoto.service.UserMetadataService; +import io.mosip.mimoto.service.WalletService; import io.mosip.mimoto.util.EncryptionDecryptionUtil; import jakarta.servlet.http.Cookie; import lombok.extern.slf4j.Slf4j; @@ -71,6 +72,9 @@ public class OAuth2LoginTests { @MockBean private UserMetadataRepository userMetadataRepository; + @MockBean + private WalletService walletService; + @MockBean private EncryptionDecryptionUtil encryptionDecryptionUtil; @@ -127,7 +131,7 @@ public void setUp() { @Test public void shouldBeRedirectedToRedirectEndpointOnUnauthenticatedAccessToProtectedEndpoint() throws Exception { - mockMvc.perform(get("/secure/user/profile")) + mockMvc.perform(get("/users/me")) .andExpect(status().is3xxRedirection()) .andExpect(redirectedUrl(injiWebUrl+"/login")); } @@ -156,7 +160,7 @@ public void shouldBeAbleToAccessProtectedEndpointWhenUserIsAuthenticatedUsingOAu SecurityContext securityContext = SecurityContextHolder.getContext(); securityContext.setAuthentication(authenticationToken); - mockMvc.perform(get("/secure/user/profile") + mockMvc.perform(get("/users/me") .session(mockSession) .with(oauth2Login().oauth2User(oauth2User))) .andExpect(status().isOk()) From ec4f8caa8b94d1ccbf90380f97043cda04935ccf Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 25 Mar 2025 17:52:38 +0530 Subject: [PATCH 465/860] [INJIWEB-1370] remove access type query param as we are not using access and refresh tokens and set prompt param to select_account to not to show the consent screen if the same account is used for subsequent logins and consent is not revoked Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- src/main/resources/application-local.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 3919e5563..7752861cd 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -285,7 +285,7 @@ spring.security.oauth2.client.registration.google.scope=profile,email spring.security.oauth2.client.registration.google.redirect-uri={baseUrl}/oauth2/callback/{registrationId} spring.security.oauth2.client.registration.google.authorization-grant-type=authorization_code spring.security.oauth2.client.registration.google.client-name=Google -spring.security.oauth2.client.provider.google.authorization-uri=https://accounts.google.com/o/oauth2/auth?access_type=offline&prompt=consent +spring.security.oauth2.client.provider.google.authorization-uri=https://accounts.google.com/o/oauth2/auth?prompt=select_account spring.security.oauth2.client.provider.google.token-uri=https://oauth2.googleapis.com/token spring.security.oauth2.client.provider.google.user-info-uri=https://www.googleapis.com/oauth2/v3/userinfo From d29d79e2c10588e7c0607a170cd3e32bb0bae4fb Mon Sep 17 00:00:00 2001 From: Rakshith B <79500257+rakshithb1@users.noreply.github.com> Date: Wed, 26 Mar 2025 11:49:21 +0530 Subject: [PATCH 466/860] [MOSIP-40792] inji restructure Signed-off-by: Rakshithb1 --- README.md | 34 ----- deploy/README.md | 79 +++++++++++ deploy/artifactory/README.md | 6 + deploy/artifactory/delete.sh | 30 ++++ deploy/artifactory/install.sh | 35 +++++ deploy/artifactory/restart.sh | 25 ++++ deploy/conf-secrets/README.md | 40 ++++++ deploy/conf-secrets/delete.sh | 37 +++++ deploy/conf-secrets/install.sh | 31 ++++ deploy/config-server/install.sh | 6 +- deploy/config-server/values.yaml | 52 ++----- deploy/inji-global-cm.yaml.sample | 21 +++ deploy/mimoto/install.sh | 3 +- deploy/object-store/README.md | 12 ++ deploy/object-store/cred.sh | 59 ++++++++ deploy/object-store/minio/README.md | 108 ++++++++++++++ deploy/object-store/minio/chart/README.md | 1 + .../minio/chart/istio-addons/.helmignore | 23 +++ .../minio/chart/istio-addons/Chart.yaml | 6 + .../chart/istio-addons/templates/gateway.yaml | 20 +++ .../chart/istio-addons/templates/vs.yaml | 27 ++++ .../minio/chart/istio-addons/values.yaml | 1 + deploy/object-store/minio/delete.sh | 31 ++++ .../minio/images/minio-dashboard.png | Bin 0 -> 73396 bytes deploy/object-store/minio/install.sh | 35 +++++ deploy/object-store/minio/operator/README.md | 132 ++++++++++++++++++ deploy/object-store/minio/run.sh | 13 ++ deploy/object-store/minio/values.yaml | 9 ++ deploy/object-store/s3/README.md | 14 ++ partner-onboarder/README.md | 12 ++ 30 files changed, 823 insertions(+), 79 deletions(-) create mode 100644 deploy/README.md create mode 100644 deploy/artifactory/README.md create mode 100644 deploy/artifactory/delete.sh create mode 100644 deploy/artifactory/install.sh create mode 100644 deploy/artifactory/restart.sh create mode 100644 deploy/conf-secrets/README.md create mode 100644 deploy/conf-secrets/delete.sh create mode 100644 deploy/conf-secrets/install.sh create mode 100644 deploy/inji-global-cm.yaml.sample create mode 100644 deploy/object-store/README.md create mode 100644 deploy/object-store/cred.sh create mode 100644 deploy/object-store/minio/README.md create mode 100644 deploy/object-store/minio/chart/README.md create mode 100644 deploy/object-store/minio/chart/istio-addons/.helmignore create mode 100644 deploy/object-store/minio/chart/istio-addons/Chart.yaml create mode 100644 deploy/object-store/minio/chart/istio-addons/templates/gateway.yaml create mode 100644 deploy/object-store/minio/chart/istio-addons/templates/vs.yaml create mode 100644 deploy/object-store/minio/chart/istio-addons/values.yaml create mode 100644 deploy/object-store/minio/delete.sh create mode 100644 deploy/object-store/minio/images/minio-dashboard.png create mode 100644 deploy/object-store/minio/install.sh create mode 100644 deploy/object-store/minio/operator/README.md create mode 100644 deploy/object-store/minio/run.sh create mode 100644 deploy/object-store/minio/values.yaml create mode 100644 deploy/object-store/s3/README.md diff --git a/README.md b/README.md index 176be48e0..ef2c11b73 100644 --- a/README.md +++ b/README.md @@ -27,40 +27,6 @@ The project requires JDK 21 ```docker build -t .``` * Use newly built docker image in docker-compose file -## Deployment - -### Install - -1. Execute config-server install script -``` -cd deploy/config-server -./install.sh -``` -* Review values.yaml and make sure git repository parameters are as per your installation. - -2. Execute Onboarder install script -``` -cd partner-onboarder -./install.sh -``` -* During the execution of the `install.sh` script, a prompt appears requesting information for the S3 bucket, including its name and URL. -* Once the job is completed, log in to S3 and check the reports. There should not be any failures. - -3. Execute mimoto install script - -``` -cd helm/mimoto -./install.sh -``` -* During the execution of the `install.sh` script, a prompt appears requesting information regarding the presence of a public domain and a valid SSL certificate on the server. -* If the server lacks a public domain and a valid SSL certificate, it is advisable to select the `n` option. Opting it will enable the `init-container` with an `emptyDir` volume and include it in the deployment process. -* The init-container will proceed to download the server's self-signed SSL certificate and mount it to the specified location within the container's Java keystore (i.e., `cacerts`) file. -* This particular functionality caters to scenarios where the script needs to be employed on a server utilizing self-signed SSL certificates. - -### For Onboarding new Issuer for VCI: - -- create a folder "certs" in the root and a file "oidckeystore.p12" inside certs and store the keys as different aliases for every issuers. for more details refer [here](https://docs.mosip.io/inji/inji-mobile-wallet/customization-overview/credential_providers) - ## Credits Credits listed [here](/Credits.md) diff --git a/deploy/README.md b/deploy/README.md new file mode 100644 index 000000000..f40baa61d --- /dev/null +++ b/deploy/README.md @@ -0,0 +1,79 @@ +# inji Deployment in Kubernetes Environment +## Overview +* This guide will walk you through the deployment process of the Esignet application. +* The setup involves creating + * Kubernetes cluster + * Setting up Nginx + * Installing Istio + * Configuring storage class + * Configuring the necessary dependent services + * Deploying Esignet services +## Deployment +### K8 cluster +* Kubernetes cluster should be ready with storage class and ingress configured properly. +* Below is the document containing steps to create and configure K8 cluster. + * __Onprem RKE CLuster__ : Create RKE K8 cluster using mentioned [steps](https://github.com/mosip/k8s-infra/tree/v1.2.0.2/mosip/on-prem#mosip-k8s-cluster-setup-using-rke). + * __Persistence__ : Setup storage class as per [steps](https://github.com/mosip/k8s-infra/tree/v1.2.0.1/mosip/on-prem#storage-classes). + * __Istio service mesh__ : Setup Istio service mesh using [steps](https://github.com/mosip/k8s-infra/tree/v1.2.0.2/mosip/on-prem#istio-for-service-discovery-and-ingress). + * __Nginx__ : Setup and configure nginx as per [steps](https://github.com/mosip/k8s-infra/blob/v1.2.0.2/mosip/on-prem/nginx). + * __Logging__ : Setup logging as per [steps](https://github.com/mosip/k8s-infra/tree/v1.2.0.2/logging). + * __Monitoring__ : Setup monitoring consisting elasticsearch, kibana, grafana using [steps](https://github.com/mosip/k8s-infra/tree/v1.2.0.2/monitoring). + * __AWS EKS cluster__ : Create AWS EKS cluster using mentioned [steps](https://github.com/mosip/k8s-infra/tree/main/mosip/aws#mosip-cluster-on-amazon-eks). + * __Persistence__ : Setup storage class as per [steps](https://github.com/mosip/k8s-infra/tree/main/mosip/aws#persistence). + * __Ingress and Loadbalancer__ : Setup nginx and configure NLB for exposing services outside using [steps](https://github.com/mosip/k8s-infra/tree/main/mosip/aws#ingress-and-load-balancer-lb). + * __Logging__ : Setup logging as per [steps](https://github.com/mosip/k8s-infra/tree/v1.2.0.2/logging). + * __Monitoring__ : Setup monitoring consisting elasticsearch, kibana, grafana using [steps](https://github.com/mosip/k8s-infra/tree/v1.2.0.2/monitoring). + +### Install Pre-requisites +* `inji-global` configmap: For inji K8's env, `inji-global` configmap in `default` namespace contains Domain related information. Follow below steps to add domain details for `inji-global` configmap. + * Copy `inji-global-cm.yaml.sample` to `inji-global-cm.yaml`. + * Update the domain names in `inji-global-cm.yaml` correctly for your environment. + +* Install minio + * Execute minio install script + ``` + cd deploy/object-store/minio + ./install.sh + ``` + * Create secrets for config server + ``` + cd .. + ./cred.sh + ``` +### Install artifactory + ``` + cd deploy/artifactory + ./install.sh + ``` +### Install config server +* Execute config-server install script + ``` + cd deploy/config-server + ./install.sh + ``` + * Review values.yaml and make sure git repository parameters are as per your installation. + +### install Onboarder +* Execute Onboarder install script + ``` + cd partner-onboarder + ./install.sh + ``` +* During the execution of the `install.sh` script, a prompt appears requesting information for the S3 bucket, including its name and URL. +* Once the job is completed, log in to S3 / NFS and check the reports. There should not be any failures. + +### install mimoto +* Execute mimoto install script + + ``` + cd helm/mimoto + ./install.sh + ``` +* During the execution of the `install.sh` script, a prompt appears requesting information regarding the presence of a public domain and a valid SSL certificate on the server. +* If the server lacks a public domain and a valid SSL certificate, it is advisable to select the `n` option. Opting it will enable the `init-container` with an `emptyDir` volume and include it in the deployment process. +* The init-container will proceed to download the server's self-signed SSL certificate and mount it to the specified location within the container's Java keystore (i.e., `cacerts`) file. +* This particular functionality caters to scenarios where the script needs to be employed on a server utilizing self-signed SSL certificates. + +### For Onboarding new Issuer for VCI: + +- create a folder "certs" in the root and a file "oidckeystore.p12" inside certs and store the keys as different aliases for every issuers. for more details refer [here](https://docs.mosip.io/inji/inji-mobile-wallet/customization-overview/credential_providers) diff --git a/deploy/artifactory/README.md b/deploy/artifactory/README.md new file mode 100644 index 000000000..bff9e01fd --- /dev/null +++ b/deploy/artifactory/README.md @@ -0,0 +1,6 @@ +# Artifactory + +## Install +```sh +./install.sh +``` diff --git a/deploy/artifactory/delete.sh b/deploy/artifactory/delete.sh new file mode 100644 index 000000000..ffd65f8cd --- /dev/null +++ b/deploy/artifactory/delete.sh @@ -0,0 +1,30 @@ +#!/bin/bash +# Uninstalls artifactory +# Usage: ./delete.sh [kubeconfig] + +if [ $# -ge 1 ] ; then + export KUBECONFIG=$1 +fi + +function deleting_artifactory() { + NS=artifactory + while true; do + read -p "Are you sure you want to delete artifactory helm chart?(Y/n) " yn + if [ $yn = "Y" ] + then + helm -n $NS delete artifactory + break + else + break + fi + done + return 0 +} + +# set commands for error handling. +set -e +set -o errexit ## set -e : exit the script if any statement returns a non-true return value +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errtrace # trace ERR through 'time command' and other functions +set -o pipefail # trace ERR through pipes +deleting_artifactory # calling function diff --git a/deploy/artifactory/install.sh b/deploy/artifactory/install.sh new file mode 100644 index 000000000..9c41154a1 --- /dev/null +++ b/deploy/artifactory/install.sh @@ -0,0 +1,35 @@ +#!/bin/bash +# Installs artifactory +## Usage: ./install.sh [kubeconfig] + +if [ $# -ge 1 ] ; then + export KUBECONFIG=$1 +fi + +NS=artifactory +CHART_VERSION=0.0.1-develop + +echo Create $NS namespace +kubectl create ns $NS + +function installing_artifactory() { + echo Istio label + kubectl label ns $NS istio-injection=enabled --overwrite + helm repo update + + echo Installing artifactory + helm -n $NS install artifactory mosip/artifactory --version $CHART_VERSION + + kubectl -n $NS get deploy -o name | xargs -n1 -t kubectl -n $NS rollout status + + echo Installed artifactory service + return 0 +} + +# set commands for error handling. +set -e +set -o errexit ## set -e : exit the script if any statement returns a non-true return value +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errtrace # trace ERR through 'time command' and other functions +set -o pipefail # trace ERR through pipes +installing_artifactory # calling function diff --git a/deploy/artifactory/restart.sh b/deploy/artifactory/restart.sh new file mode 100644 index 000000000..b82a3d039 --- /dev/null +++ b/deploy/artifactory/restart.sh @@ -0,0 +1,25 @@ +#!/bin/bash +# Restart the artifactory service +## Usage: ./restart.sh [kubeconfig] + +if [ $# -ge 1 ] ; then + export KUBECONFIG=$1 +fi + +function Restarting_artifactory() { + NS=artifactory + kubectl -n $NS rollout restart deploy + + kubectl -n $NS get deploy -o name | xargs -n1 -t kubectl -n $NS rollout status + + echo Restarted Artifactory services + return 0 +} + +# set commands for error handling. +set -e +set -o errexit ## set -e : exit the script if any statement returns a non-true return value +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errtrace # trace ERR through 'time command' and other functions +set -o pipefail # trace ERR through pipes +Restarting_artifactory # calling function diff --git a/deploy/conf-secrets/README.md b/deploy/conf-secrets/README.md new file mode 100644 index 000000000..46a97d9b1 --- /dev/null +++ b/deploy/conf-secrets/README.md @@ -0,0 +1,40 @@ +# Config Server Secrets + +This module generates and install secrets required by config-server. + +Note: +* The conf-secrets must not be deleted in any case of re-deployment, upgrade or migration process as we have separated the conf-secrets from config-server to ensure conf-secrets are not deleted. +* Incase if you have a scenario where you have to delete the conf-secrets from the environment make sure to run `delete.sh` script as the script delete's the helm chart and takes the backup of the existing `conf-secrets-various` secret. + + +## Install +```sh +./install.sh [kubeconfig] +``` + +## Delete +``` +./delete.sh [kubeconfig] +``` + +## Secrets to be updated for Migartion scenerios +### 1.1.5.5-P1 to 1.2.0.1 +* After installing Conf secrets in 1.2.0.1 update below mentioned keys with values from V2 configuration files. +* | Property file (V2 conf) | Property file (V3 conf) | parameters | keys (Conf-screts) | + |---------------------------------|--------------------------------------|--|--| + | id-authentication-mz.properties | id-authentication-default.properties | ida-websub-authtype-callback-secret | ida-websub-authtype-callback-secret | + | id-authentication-mz.properties | id-authentication-default.properties | ida-websub-ca-certificate-callback-secret | ida-websub-ca-certificate-callback-secret | + | id-authentication-mz.properties | id-authentication-default.properties | ida-websub-credential-issue-callback-secret | ida-websub-credential-issue-callback-secret | + | id-authentication-mz.properties | id-authentication-default.properties | ida-websub-hotlist-callback-secret | ida-websub-hotlist-callback-secret | + | id-authentication-mz.properties | id-authentication-default.properties | ida-websub-partner-service-callback-secret | ida-websub-partner-service-callback-secret | + | mimoto-mz.properties | mimoto-default.properties | mosip.partner.crypto.p12.password | mosip-partner-crypto-p12-password | + | print-mz.properties | print-default.properties | mosip.event.secret | print-websub-hub-secret | + | id-authentication-mz.properties | id-authentication-default.properties | mosip.ida.kyc.token.secret | mosip-ida-kyc-token-secret | + | mimoto-mz.properties | mimoto-default.properties | wallet.binding.partner.api.key | mimoto-wallet-binding-partner-api-key | + | id-authentication-mz.properties | id-authentication-default.properties | mosip-kernel-tokenid-uin-salt | mosip-kernel-tokenid-uin-salt | + | id-authentication-mz.properties | id-authentication-default.properties | mosip.kernel.tokenid.partnercode.salt | mosip-kernel-tokenid-partnercode-salt | + | resident-mz.properties | resident-default.properties | resident.websub.authtype.status.secret | resident-websub-authtype-status-secret | + | resident-mz.properties | resident-default.properties | resident.websub.credential.status.update.secret | resident-websub-credential-status-update-secret | + | resident-mz.properties | resident-default.properties | resident.websub.auth.transaction.status.secret | resident-websub-auth-transaction-status-secret | + | id-authentication-mz.properties | id-authentication-default.properties | ida-websub-masterdata-templates-callback-secret | ida-websub-masterdata-templates-callback-secret | + | id-repository-mz.properties | id-repository-default.properties | mosip.idrepo.websub.vid-credential-update.secret | idrepo-websub-vid-credential-update-secret | diff --git a/deploy/conf-secrets/delete.sh b/deploy/conf-secrets/delete.sh new file mode 100644 index 000000000..0c982fcd3 --- /dev/null +++ b/deploy/conf-secrets/delete.sh @@ -0,0 +1,37 @@ +#!/bin/bash +# Uninstalls the conf-secrets helm chart +## Usage: ./delete.sh [kubeconfig] + +if [ $# -ge 1 ] ; then + export KUBECONFIG=$1 +fi + +function deleting_conf_secrets() { + NS=conf-secrets + SECRET_NAME=conf-secrets-various + BACKUP_DIR=./conf_secrets_backup + mkdir -p $BACKUP_DIR + while true; do + read -p "Are you sure you want to delete the conf-secrets helm chart?(Y/n) " yn + if [ $yn = "Y" ] + then + # Backup the conf-secrets + kubectl get secret $SECRET_NAME -n $NS -o yaml > $BACKUP_DIR/$SECRET_NAME.yaml + helm -n $NS delete conf-secrets + echo "deleted conf-secrets helm chart" + echo "Backup of conf-secrets is taken and stored in conf_secrets_backup directory." + break + else + break + fi + done + return 0 +} + +# set commands for error handling. +set -e +set -o errexit ## set -e : exit the script if any statement returns a non-true return value +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errtrace # trace ERR through 'time command' and other functions +set -o pipefail # trace ERR through pipes +deleting_conf_secrets # calling function \ No newline at end of file diff --git a/deploy/conf-secrets/install.sh b/deploy/conf-secrets/install.sh new file mode 100644 index 000000000..3c1c2e2bf --- /dev/null +++ b/deploy/conf-secrets/install.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash +# Installs config-server secrets +## Usage: ./install_secrets.sh [kubeconfig] + +if [ $# -ge 1 ] ; then + export KUBECONFIG=$1 +fi + +NS=conf-secrets +CHART_VERSION=0.0.1-develop + +echo Create $NS namespace +kubectl create ns $NS + +function config_secrets() { + echo Istio label + kubectl label ns $NS istio-injection=enabled --overwrite + helm repo update + + echo "Installing Secrets required by config-server" + helm -n $NS install conf-secrets mosip/conf-secrets --version $CHART_VERSION --wait + return 0 +} + +# set commands for error handling. +set -e +set -o errexit ## set -e : exit the script if any statement returns a non-true return value +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errtrace # trace ERR through 'time command' and other functions +set -o pipefail # trace ERR through pipes +config_secrets # calling function diff --git a/deploy/config-server/install.sh b/deploy/config-server/install.sh index cbcd9feb4..9fccf4f33 100755 --- a/deploy/config-server/install.sh +++ b/deploy/config-server/install.sh @@ -7,7 +7,7 @@ if [ $# -ge 1 ] ; then fi NS=config-server -CHART_VERSION=0.0.1-develop +CHART_VERSION=0.0.2-develop echo Create $NS namespace kubectl create ns $NS @@ -25,10 +25,10 @@ CHART_VERSION=0.0.1-develop echo Copy configmaps COPY_UTIL=../copy_cm_func.sh - $COPY_UTIL configmap global default $NS + $COPY_UTIL configmap inji-global default $NS echo Copy secrets - $COPY_UTIL secret db-common-secrets postgres $NS + #$COPY_UTIL secret db-common-secrets postgres $NS $COPY_UTIL secret conf-secrets-various conf-secrets $NS echo Installing config-server diff --git a/deploy/config-server/values.yaml b/deploy/config-server/values.yaml index 50c6c4bec..d48fd4369 100755 --- a/deploy/config-server/values.yaml +++ b/deploy/config-server/values.yaml @@ -1,6 +1,6 @@ gitRepo: uri: https://github.com/mosip/inji-config - version: develop + version: injistack ## Folders within the base repo where properties may be found. searchFolders: "" private: false @@ -31,38 +31,7 @@ envVariables: enabled: true - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MPARTNER_DEFAULT_MOBILE_SECRET - valueFrom: - secretKeyRef: - key: mpartner_default_mobile_secret - name: keycloak-client-secrets - enabled: true - - - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_KEYCLOAK_INTERNAL_URL - valueFrom: - configMapKeyRef: - name: keycloak-host - key: keycloak-internal-url - enabled: true - - - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_KEYCLOAK_EXTERNAL_URL - valueFrom: - configMapKeyRef: - name: keycloak-host - key: keycloak-external-url - enabled: true - - - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_KEYCLOAK_INTERNAL_HOST - valueFrom: - configMapKeyRef: - name: keycloak-host - key: keycloak-internal-host - enabled: true - - - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_KEYCLOAK_EXTERNAL_HOST - valueFrom: - configMapKeyRef: - name: keycloak-host - key: keycloak-external-host + value: WXFvqo48eLCSBpRa enabled: true - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_DB_DBUSER_PASSWORD @@ -70,7 +39,7 @@ envVariables: secretKeyRef: name: db-common-secrets key: db-dbuser-password - enabled: true + enabled: false - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_S3_ACCESSKEY valueFrom: @@ -97,30 +66,33 @@ envVariables: valueFrom: configMapKeyRef: key: mosip-esignet-host - name: global + name: inji-global enabled: true - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_ESIGNET_INSURANCE_HOST valueFrom: configMapKeyRef: key: mosip-esignet-insurance-host - name: global - enabled: true + name: inji-global + enabled: false - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_INJI_DATASHARE_HOST valueFrom: configMapKeyRef: key: mosip-inji-datashare-host - name: global + name: inji-global + enabled: true - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_INJIWEB_HOST valueFrom: configMapKeyRef: key: mosip-injiweb-host - name: global + name: inji-global + enabled: true - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_INJIVERIFY_HOST valueFrom: configMapKeyRef: key: mosip-injiverify-host - name: global + name: inji-global + enabled: true diff --git a/deploy/inji-global-cm.yaml.sample b/deploy/inji-global-cm.yaml.sample new file mode 100644 index 000000000..f954983cd --- /dev/null +++ b/deploy/inji-global-cm.yaml.sample @@ -0,0 +1,21 @@ +## The data here is of generic interest to modules in different namespaces hence this is marked as global. +## Replace your domain names here. +## mosip-api-host: External public access. (Typically required only in production rollouts). +## mosip-api-internal-host: Internal secure access over Wireguard. +## By default all domains and subdomains listed below point to mosip-api-internal-host. Modify this default behavior ONLY in production rollout as follows: +apiVersion: v1 +kind: ConfigMap +metadata: + name: inji-global + namespace: default +data: + mosip-version: develop + installation-domain: sandbox.xyz.net + mosip-api-host: api.sandbox.xyz.net + mosip-iam-external-host: iam.sandbox.xyz.net + mosip-api-internal-host: api-internal.sandbox.xyz.net + mosip-esignet-host: esignet.sandbox.xyz.net + mosip-inji-datashare-host: inji-datashare.sandbox.xyz.net + mosip-injiweb-host: injiweb.sandbox.xyz.net + mosip-injiverify-host: injiverify.sandbox.xyz.net + mosip-postgres-host: postgres.sandbox.xyz.net diff --git a/deploy/mimoto/install.sh b/deploy/mimoto/install.sh index 8e91a2b97..6fb8e64dc 100755 --- a/deploy/mimoto/install.sh +++ b/deploy/mimoto/install.sh @@ -52,8 +52,7 @@ function installing_mimoto() { kubectl -n config-server set env --keys=mimoto-oidc-partner-clientid --from secret/mimoto-oidc-partner-clientid deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ kubectl -n config-server set env --keys=mimoto-oidc-keystore-password --from secret/mimoto-oidc-keystore-password deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ - kubectl -n config-server rollout restart deployment config-server - kubectl -n config-server rollout status deployment config-server + kubectl -n config-server get deploy -o name | xargs -n1 -t kubectl -n config-server rollout status echo "Please share relevant google client id " read -p "" clientId diff --git a/deploy/object-store/README.md b/deploy/object-store/README.md new file mode 100644 index 000000000..120ded7bf --- /dev/null +++ b/deploy/object-store/README.md @@ -0,0 +1,12 @@ +# Object store + +## Overview + +MOSIP uses S3 API compliant object store for storing biometric and other data. + +For on-prem, install [minio](minio/README.md) which is S3 API compliant object store. + +For AWS, create [S3 credentials](s3/README.md) + +## Configuration +Configuration parameters for object store are located in [application-default.properties](https://github.com/mosip/mosip-config/blob/develop3-v3/application-default.properties). The paramemters are automatically configured in this installation. However, in production you need to point to your object store installation. diff --git a/deploy/object-store/cred.sh b/deploy/object-store/cred.sh new file mode 100644 index 000000000..271deb58b --- /dev/null +++ b/deploy/object-store/cred.sh @@ -0,0 +1,59 @@ +#!/bin/bash +# Creates configmap and secrets for S3/Minio +# Specific "" for region for minio local installation +## Usage: ./install.sh [kubeconfig] + +if [ $# -ge 3 ] ; then + export KUBECONFIG=$4 +fi + +NS=s3 + +echo Create $NS namespace +kubectl create ns $NS + +function installing_Cred() { + echo Istio label + kubectl label ns $NS istio-injection=enabled --overwrite + + echo Select the type of object-store to be used: + echo 1: For minio native using helm charts + echo 2: For any other s3 object store like AWS + while read -p "Please choose the correct option as mentioned above(1/2)" choice + do + if [ $choice = "1" ] + then + read -p "Please provide pretext value : " PRETEXT_VALUE + echo Creating secrets as per Minio native installation + USER=$(kubectl -n minio get secret minio -o jsonpath='{.data.root-user}' | base64 --decode) + PASS=$(kubectl -n minio get secret minio -o jsonpath='{.data.root-password}' | base64 --decode) + kubectl -n s3 create configmap s3 --from-literal=s3-user-key=$USER --from-literal=s3-region="" --dry-run=client -o yaml | kubectl apply -f - + kubectl -n s3 create secret generic s3 --from-literal=s3-user-secret=$PASS --from-literal=s3-pretext-value=$PRETEXT_VALUE --dry-run=client -o yaml | kubectl apply -f - + echo object-store secret and config map is set now. + break + elif [ $choice = "2" ] + then + read -p "Enter the S3 user key " USER + read -p "Enter the S3 secret key" PASS + read -p "Enter the S3 region" REGION + read -p "Please provide pretext value : " PRETEXT_VALUE + kubectl -n s3 create configmap s3 --from-literal=s3-user-key=$USER --from-literal=s3-region=$REGION --dry-run=client -o yaml | kubectl apply -f - + kubectl -n s3 create secret generic s3 --from-literal=s3-user-secret=$PASS --from-literal=s3-pretext-value=$PRETEXT_VALUE --dry-run=client -o yaml | kubectl apply -f - + echo object-store secret and config map is set now. + break + else + echo You entered wrong choice + kill -9 `ps --pid $$ -oppid=`; exit + break + fi + done + return 0 +} + +# set commands for error handling. +set -e +set -o errexit ## set -e : exit the script if any statement returns a non-true return value +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errtrace # trace ERR through 'time command' and other functions +set -o pipefail # trace ERR through pipes +installing_Cred # calling function diff --git a/deploy/object-store/minio/README.md b/deploy/object-store/minio/README.md new file mode 100644 index 000000000..b67e5c41b --- /dev/null +++ b/deploy/object-store/minio/README.md @@ -0,0 +1,108 @@ +# MinIO + +## Introduction +MinIO is a High Performance Object Storage released under GNU Affero General Public License v3.0. It is API compatible with Amazon S3 cloud storage service. MinIO is required for on-prem setups. If you are installing MOSIP on cloud you need explore cloud native options that support S3 API. On AWS, it would be S3. + +## Helm chart based install +Recommended for sandbox installations: +* Install helm chart +``` +./install.sh +``` +* Create secrets for config server +``` +cd .. +./cred.sh +``` +## Operator based installation +Recommended for multi-tenant production based installation. +See [MinIO Operator Based Installation Guide](operator/README.md). + +## Install MinIO client +To install the MinIO client, follow the procedure from [here](https://docs.min.io/docs/minio-client-complete-guide.html). + +## MinIO Clone +* Set `alias` for MinIO servers. + ``` + mc alias set : --api S3v2 ( old version ) + mc alias set : --api S3v2 ( latest versions ) + mc alias ls + ``` +* Clone MINIO buckets from one MinIO server to another MinIO server. + ``` + mc mirror + ``` + +## Backup and restore MinIO + +* Set `alias` for MinIO servers using mc command line tool. +* The below commands is creating an alias named "" for a MinIO server located at ":" with the username "" and password "", using the S3 API version 2. + +### Note: +* Make sure to replace , :, and with your original values before exicuting the below commands. +* --api S3v2: This specifies the API version being used. In this case, it's specifying version 2 of the S3 API, which is used for interacting with object storage systems like MinIO. +* Set `alias` for MinIO servers. + + + ``` + mc alias set : --api S3v4 ( old version ) + mc alias set : --api S3v4 ( latest versions ) + mc alias ls + ``` + +#### Backup +* Create a backup directory. + ``` + mkdir -p + ``` +* Backup all MinIO buckets to `` directory. + ``` + mc mirror + ``` + +#### Note: +* the above mirror command is used to initiate the mirroring process. +* So, essentially, when you execute the above command, it will start mirroring data from the source location specified by to the destination location specified by . +* do update your and with the alias name you've set and then run the command. + +#### Restore + +* Set `MINIO_SERVER` and `MINIO_BACKUP_DIR`. + ``` + MINIO_SERVER= + MINIO_BACKUP_DIR= + ``` + +* Run below command to restore MinIO buckets from ``. + ``` + for bucket in $( ls $MINIO_BACKUP_DIR ); do + echo $MINIO_SERVER/$bucket; + mc mb --ignore-existing $MINIO_SERVER/$bucket; + mc mirror $MINIO_BACKUP_DIR/$bucket $MINIO_SERVER/$bucket; + done + ``` + +#### Connecting Minio to Prometheus +Prometheus needs to scrape data from minio buckets for continuous monitoring. + +Service monitor should be enabled in values.yaml script for prometheus to scrape the data from minio. + +Then the minio dashboard should display the metrics that are scraped by prometheus. + +The following environmental variables needs to be mapped for the same. + +```MINIO_PROMETHEUS_URL - http://rancher-monitoring-prometheus.cattle-monitoring-system:9090``` + +```MINIO_PROMETHEUS_JOB_ID - minio``` + +![minio-dashboard.png](images/minio-dashboard.png) + +The above mentioned changes are taken care in values.yaml script. + + +## Troubleshoot +* If you encounter the following error while attempting to access MinIO. + ``` + mc: Unable to list folder. The request signature we calculated does not match the signature you provided. Check your key and signing method + ``` + Then, ensure that you provide the appropriate API version, either `--api S3v2` or `--api S3v4`, when executing the `mc set alias` command. diff --git a/deploy/object-store/minio/chart/README.md b/deploy/object-store/minio/chart/README.md new file mode 100644 index 000000000..e19bd815f --- /dev/null +++ b/deploy/object-store/minio/chart/README.md @@ -0,0 +1 @@ +Local helm chart to install istio components. diff --git a/deploy/object-store/minio/chart/istio-addons/.helmignore b/deploy/object-store/minio/chart/istio-addons/.helmignore new file mode 100644 index 000000000..0e8a0eb36 --- /dev/null +++ b/deploy/object-store/minio/chart/istio-addons/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/deploy/object-store/minio/chart/istio-addons/Chart.yaml b/deploy/object-store/minio/chart/istio-addons/Chart.yaml new file mode 100644 index 000000000..e8e3605d5 --- /dev/null +++ b/deploy/object-store/minio/chart/istio-addons/Chart.yaml @@ -0,0 +1,6 @@ +apiVersion: v2 +name: istio-addons +description: A Helm chart for MOSIP minio istio +type: application +version: 1.2.0 +appVersion: "1.2.0" diff --git a/deploy/object-store/minio/chart/istio-addons/templates/gateway.yaml b/deploy/object-store/minio/chart/istio-addons/templates/gateway.yaml new file mode 100644 index 000000000..9f54e28f7 --- /dev/null +++ b/deploy/object-store/minio/chart/istio-addons/templates/gateway.yaml @@ -0,0 +1,20 @@ +apiVersion: networking.istio.io/v1alpha3 +kind: Gateway +metadata: + name: minio +spec: + selector: + istio: ingressgateway-internal + servers: + - port: + number: 80 + name: http + protocol: HTTP + hosts: + - {{ .Values.externalHost }} + - port: + name: minio + number: 9000 + protocol: HTTP + hosts: + - {{ .Values.externalHost }} diff --git a/deploy/object-store/minio/chart/istio-addons/templates/vs.yaml b/deploy/object-store/minio/chart/istio-addons/templates/vs.yaml new file mode 100644 index 000000000..157a1fe5b --- /dev/null +++ b/deploy/object-store/minio/chart/istio-addons/templates/vs.yaml @@ -0,0 +1,27 @@ +apiVersion: networking.istio.io/v1alpha3 +kind: VirtualService +metadata: + name: minio +spec: + hosts: + - "*" + gateways: + - minio + http: + - name: minio + match: + - port: 9000 + route: + - destination: + host: minio + port: + number: 9000 + - name: http + match: + - uri: + prefix: "/" + route: + - destination: + host: minio + port: + number: 9001 diff --git a/deploy/object-store/minio/chart/istio-addons/values.yaml b/deploy/object-store/minio/chart/istio-addons/values.yaml new file mode 100644 index 000000000..6607d06fe --- /dev/null +++ b/deploy/object-store/minio/chart/istio-addons/values.yaml @@ -0,0 +1 @@ +externalHost: minio.sandbox.xyz.net diff --git a/deploy/object-store/minio/delete.sh b/deploy/object-store/minio/delete.sh new file mode 100644 index 000000000..a8176bf47 --- /dev/null +++ b/deploy/object-store/minio/delete.sh @@ -0,0 +1,31 @@ +#!/bin/bash +# Uninstalls Minio running inside the cluster +## Usage: ./delete.sh [kubeconfig] + +if [ $# -ge 1 ] ; then + export KUBECONFIG=$1 +fi + +function deleting_Minio() { + NS=minio + while true; do + read -p "Are you sure you want to delete minio helm charts? Note: this will erase your object store data.(Y/n) " yn + if [ $yn = "Y" ] + then + helm -n $NS delete minio + helm -n $NS delete istio-addons + break + else + break + fi + done + return 0 +} + +# set commands for error handling. +set -e +set -o errexit ## set -e : exit the script if any statement returns a non-true return value +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errtrace # trace ERR through 'time command' and other functions +set -o pipefail # trace ERR through pipes +deleting_Minio # calling function diff --git a/deploy/object-store/minio/images/minio-dashboard.png b/deploy/object-store/minio/images/minio-dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..d55566ff1bfa40af94da6176b657a43e68a834a2 GIT binary patch literal 73396 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

iuWdK7r~NiUyPNzn@k%3 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 literal 0 HcmV?d00001 diff --git a/deploy/object-store/minio/install.sh b/deploy/object-store/minio/install.sh new file mode 100644 index 000000000..e0db36b6c --- /dev/null +++ b/deploy/object-store/minio/install.sh @@ -0,0 +1,35 @@ +#!/bin/bash +# Installs MinIO using helm chart inside MOSIP cluster +## Usage: ./install.sh [kubeconfig] + +if [ $# -ge 1 ] ; then + export KUBECONFIG=$1 +fi + +NS=minio + +echo Create $NS namespace +kubectl create ns $NS +kubectl label ns $NS istio-injection=enabled --overwrite + +function installing_minio() { + echo Installing minio + helm -n minio install minio mosip/minio -f values.yaml --version 10.1.6 + + echo Installing gateways and virtualservice + EXTERNAL_HOST=$(kubectl get cm global -o jsonpath={.data.mosip-minio-host}) + + echo host: $EXTERNAL_HOST + helm -n $NS install istio-addons chart/istio-addons --set externalHost=$EXTERNAL_HOST + + echo Helm installed. Next step is to execute the cred.sh to update secrets in s3 namespace + return 0 +} + +# set commands for error handling. +set -e +set -o errexit ## set -e : exit the script if any statement returns a non-true return value +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errtrace # trace ERR through 'time command' and other functions +set -o pipefail # trace ERR through pipes +installing_minio # calling function diff --git a/deploy/object-store/minio/operator/README.md b/deploy/object-store/minio/operator/README.md new file mode 100644 index 000000000..9587adc0a --- /dev/null +++ b/deploy/object-store/minio/operator/README.md @@ -0,0 +1,132 @@ +# MinIO Operator Based Installation Guide + +## Introduction +MinIO is a High Performance Object Storage released under GNU Affero General Public License v3.0. It is API compatible with Amazon S3 cloud storage service. MinIO is required for on-prem setups. If you are installing MOSIP on cloud you need explore cloud native options that support S3 API. On AWS, it would be S3. + +For production deployments it is recommended that MinIO Operator is used to deploy MinIO on Kubernetes. MinIO Operator supports deploying MinIO Tenants onto private and public cloud infrastructures ("Hybrid" Cloud). + +## Prerequisites +- Kubernetes version 1.19.0 or later. + +- Cluster contains a [namespace](https://github.com/minio/operator/blob/master/README.md#minio-tenant-namespace) for + the MinIO Tenant. + +- Cluster contains a [`StorageClass`](https://github.com/minio/operator/blob/master/README.md#default-storage-class) + for the MinIO Tenant Persistent Volumes (`PV`). The `StorageClass` *must* have `volumeBindingMode: WaitForFirstConsumer` + +- [Kubernetes `krew`](https://github.com/kubernetes-sigs/krew) + plugin manager available on the client machine. See the [`krew` installation documentation](https://krew.sigs.k8s.io/docs/user-guide/setup/install/). + +- Minio Operator will deploy CertifiateSigningRequest (CSRs) and k8s needs to issue certificates for these CSRs. On an on-prem setup, if using RKE for k8s, to get k8s to issue CSRs, add the following in `cluster.yaml`. + ``` + services: + kube-controller: + extra_args: + cluster-signing-cert-file: "/etc/kubernetes/ssl/kube-ca.pem" + cluster-signing-key-file: "/etc/kubernetes/ssl/kube-ca-key.pem" + ``` + Then run `rke up`, to sync these changes. + +## Deploy MinIO Cluster + +### Install the MinIO Operator + +Run the following command to install the MinIO Operator and Plugin using `krew`: + +```sh + kubectl krew update + kubectl krew install minio +``` + +Run the following command to initialize the Operator: + +```sh +kubectl minio init +``` + +### Create a New Tenant + +The following `kubectl minio` command creates a MinIO Tenant with 1 node, 4 volumes, and a total capacity of 8Gi. This configuration requires +*at least* 4 [Persistent Volumes](https://github.com/minio/operator#Local-Persistent-Volumes). + +```sh + kubectl minio tenant create minio-tenant-1 \ + --servers 1 \ + --volumes 4 \ + --capacity 8Gi \ + --namespace minio-tenant-1 \ + --storage-class local-storage +``` + +The above command, by default, deploys with TLS enabled. To change this behaviour here is what needs to be done: +- Write the tenant to a file without actually deploying it. Like the following +```sh + kubectl minio tenant create minio-tenant-1 \ + --servers 1 \ + --volumes 4 \ + --capacity 8Gi \ + --namespace minio-tenant-1 \ + --storage-class local-storage \ + -o > minio-tenant-1.yaml +``` +- Now change the following line in the tenant file. +``` +requestAutoCert: false +``` +- Then deploy the tenant. +```sh +kubectl apply -f minio-tenant-1.yaml +``` + +### Connect to the Tenant + +MinIO outputs credentials for connecting to the MinIO Tenant as part of the creation +process: + +```sh + +Tenant 'minio-tenant-1' created in 'minio-tenant-1' Namespace + Username: admin + Password: dbc978c2-bfbe-41bf-9dc6-699c76bafcd0 ++-------------+------------------------+------------------+--------------+-----------------+ +| APPLICATION | SERVICE NAME | NAMESPACE | SERVICE TYPE | SERVICE PORT(S) | ++-------------+------------------------+------------------+--------------+-----------------+ +| MinIO | minio | minio-tenant-1 | ClusterIP | 443 | +| Console | minio-tenant-1-console | minio-tenant-1 | ClusterIP | 9090,9443 | ++-------------+------------------------+------------------+--------------+-----------------+ + +``` + +Copy the credentials to a secure location, such as a password protected key manager. +MinIO does *not* display these credentials again. + +You can use the `kubectl port-forward` command to temporarily forward traffic from the local host to the MinIO Tenant. + +- The `minio` service provides access to MinIO Object Storage operations. Port forward to localhost +port 9000 using the below command: + + +```sh + kubectl port-forward svc/minio 9000:443 -n minio-tenant-1 +``` + +- The `minio-tenant-1-console` service provides access to the MinIO Console. The + MinIO Console supports GUI administration of the MinIO Tenant. Port forward to localhost +port 9001 using the below command: + +```sh + kubectl port-forward svc/minio-tenant-1-console 9001:9443 -n minio-tenant-1 +``` + +For production workloads and applications *external* to the Kubernetes cluster, you must configure +[Ingress](https://kubernetes.io/docs/concepts/services-networking/ingress/) or a +[Load Balancer](https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer) to +expose the MinIO Tenant services. + + +## Create configmap and secret +Run the script and pass the access key and secret. For region specify "". +```sh +cd ../ +./cred.sh +``` diff --git a/deploy/object-store/minio/run.sh b/deploy/object-store/minio/run.sh new file mode 100644 index 000000000..bdffcc837 --- /dev/null +++ b/deploy/object-store/minio/run.sh @@ -0,0 +1,13 @@ +# set commands for error handling. +set -e +set -o errexit ## set -e : exit the script if any statement returns a non-true return value +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errtrace # trace ERR through 'time command' and other functions +set -o pipefail # trace ERR through pipes + +kubectl minio tenant create minio-tenant-1 \ + --servers 1 \ + --volumes 4 \ + --capacity 8Gi \ + --namespace minio-tenant-1 \ + --storage-class gp2 diff --git a/deploy/object-store/minio/values.yaml b/deploy/object-store/minio/values.yaml new file mode 100644 index 000000000..7dbf1a22c --- /dev/null +++ b/deploy/object-store/minio/values.yaml @@ -0,0 +1,9 @@ +metrics: + serviceMonitor: + enabled: true + +extraEnvVars: + - name: MINIO_PROMETHEUS_URL + value: "http://rancher-monitoring-prometheus.cattle-monitoring-system:9090" + - name: MINIO_PROMETHEUS_JOB_ID + value: "minio" diff --git a/deploy/object-store/s3/README.md b/deploy/object-store/s3/README.md new file mode 100644 index 000000000..0a125f1b8 --- /dev/null +++ b/deploy/object-store/s3/README.md @@ -0,0 +1,14 @@ +# S3 Credentials + +## Credentials +1. Create a new IAM user on AWS, say, "mosips3user" +1. Deny this user Admin Console access +1. Create a user group, say, 'S3Group' with full access to S3. +1. Assign the group to the user + +## Secrets +1. Create configmap and secrets by running this script: +```sh +cd ../ +./cred.sh +``` diff --git a/partner-onboarder/README.md b/partner-onboarder/README.md index f757cd409..f2e68f827 100644 --- a/partner-onboarder/README.md +++ b/partner-onboarder/README.md @@ -4,6 +4,18 @@ * Upload certificate for default partners. Refer [mosip-onboarding repo](https://github.com/mosip/mosip-onboarding). ## Install +* Create a directory for onboarder on the NFS server at `/srv/nfs//onboarder/`: +``` +mkdir -p /srv/nfs/mosip//onboarder/ +``` +* Ensure the directory has 777 permissions: +``` +chmod 777 /srv/nfs/mosip//onboarder +``` +* Add the following entry to the /etc/exports file: +``` +/srv/nfs/mosip//onboarder *(ro,sync,no_root_squash,no_all_squash,insecure,subtree_check) +``` * Set `values.yaml` to run onboarder for specific modules. * run `./install.sh`. ``` From 78826e7edb703da392552ff1228cf0d0c887343d Mon Sep 17 00:00:00 2001 From: Rakshithb1 Date: Wed, 26 Mar 2025 12:20:45 +0530 Subject: [PATCH 467/860] [MOSIP-40792] inji restructure Signed-off-by: Rakshithb1 --- deploy/config-server/values.yaml | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/deploy/config-server/values.yaml b/deploy/config-server/values.yaml index d48fd4369..7f3b08433 100755 --- a/deploy/config-server/values.yaml +++ b/deploy/config-server/values.yaml @@ -1,6 +1,6 @@ gitRepo: uri: https://github.com/mosip/inji-config - version: injistack + version: develop ## Folders within the base repo where properties may be found. searchFolders: "" private: false @@ -34,6 +34,22 @@ envVariables: value: WXFvqo48eLCSBpRa enabled: true + - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_KEYCLOAK_INTERNAL_URL + value: http://keycloak.keycloak + enabled: true + + - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_KEYCLOAK_EXTERNAL_URL + value: https://iam.sanbox.mosip.net + enabled: true + + - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_KEYCLOAK_INTERNAL_HOST + value: keycloak.keycloak + enabled: true + + - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_KEYCLOAK_EXTERNAL_HOST + value: iam.sanbox.mosip.net + enabled: true + - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_DB_DBUSER_PASSWORD valueFrom: secretKeyRef: From a084d0b2984dbf74611c070433da9513612d9613 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Wed, 26 Mar 2025 15:25:37 +0530 Subject: [PATCH 468/860] injiweb-1392 added validation for the pin and name of wallet Signed-off-by: Gurpreet41082 --- .../mimoto/controller/UserController.java | 10 ++- .../io/mosip/mimoto/util/WalletValidator.java | 33 +++++++++ .../resources/application-local.properties | 3 +- .../mimoto/util/WalletValidatorTest.java | 71 +++++++++++++++++++ .../resources/application-test.properties | 2 + 5 files changed, 117 insertions(+), 2 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/util/WalletValidator.java create mode 100644 src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java diff --git a/src/main/java/io/mosip/mimoto/controller/UserController.java b/src/main/java/io/mosip/mimoto/controller/UserController.java index 59cb89b01..3b6e33d33 100644 --- a/src/main/java/io/mosip/mimoto/controller/UserController.java +++ b/src/main/java/io/mosip/mimoto/controller/UserController.java @@ -9,6 +9,7 @@ import io.mosip.mimoto.service.WalletService; import io.mosip.mimoto.util.EncryptionDecryptionUtil; import io.mosip.mimoto.util.Utilities; +import io.mosip.mimoto.util.WalletValidator; import jakarta.servlet.http.HttpSession; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -41,6 +42,9 @@ public class UserController { @Autowired private WalletService walletService; + @Autowired + private WalletValidator walletValidator; + @GetMapping public ResponseEntity> getUserProfile(Authentication authentication, HttpSession session) { try { @@ -78,10 +82,14 @@ private UserMetadata fetchUserMetadata(String providerSubjectId, String identity @PostMapping("/wallets") public ResponseEntity> createWallet(@RequestBody WalletRequestDto wallet, HttpSession httpSession) { try { + walletValidator.validateWalletRequest(wallet); ResponseWrapper responseWrapper = new ResponseWrapper<>(); responseWrapper.setResponse(walletService.createWallet((String) httpSession.getAttribute("userId"), wallet.getName(), wallet.getPin())); return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); - } catch (Exception exception) { + } catch (IllegalArgumentException exception) { + log.error("Error occurred while creating user wallets : ", exception); + return Utilities.handleErrorResponse(exception, USER_WALLET_CREATION_EXCEPTION.getCode(), HttpStatus.BAD_REQUEST, MediaType.APPLICATION_JSON); + } catch (Exception exception) { log.error("Error occurred while creating user wallets : ", exception); return Utilities.handleErrorResponse(exception, USER_WALLET_CREATION_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR,MediaType.APPLICATION_JSON); } diff --git a/src/main/java/io/mosip/mimoto/util/WalletValidator.java b/src/main/java/io/mosip/mimoto/util/WalletValidator.java new file mode 100644 index 000000000..f1bb848e8 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/WalletValidator.java @@ -0,0 +1,33 @@ +package io.mosip.mimoto.util; + +import io.mosip.mimoto.dto.WalletRequestDto; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.test.context.TestPropertySource; + +@Component +public class WalletValidator { + + @Value("${mosip.inji.user.wallet.pin.validation.regex}") + private String pinRegex; + + @Value("${mosip.inji.user.wallet.name.validation.regex}") + private String walletNameRegex; + + private void validatePin(String pin) { + if (!pin.matches(pinRegex)) { + throw new IllegalArgumentException("Pin should be numeric with 4 or 6 digits."); + } + } + + private void validateWalletName(String walletName) { + if (!walletName.matches(walletNameRegex)) { + throw new IllegalArgumentException("Wallet name should be alphanumeric with spaces and a few allowed special characters."); + } + } + public void validateWalletRequest(WalletRequestDto walletRequest) { + // Validate both PIN and wallet name + validatePin(walletRequest.getPin()); + validateWalletName(walletRequest.getName()); + } +} diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 3919e5563..76d8c54fa 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -251,7 +251,8 @@ mosip.inji.web.redirect.url=${mosip.inji.web.url}/authorize mosip.inji.qr.data.size.limit=2000 mosip.inji.qr.code.height=650 mosip.inji.qr.code.width=650 - +mosip.inji.user.wallet.pin.validation.regex=^\\d{4,6}$ +mosip.inji.user.wallet.name.validation.regex=^[A-Za-z0-9 _.-]{1,50}$ #OVP Config mosip.inji.ovp.qrdata.pattern=INJI_OVP://http://localhost:${server.port}/v1/mimoto/authorize?response_type=vp_token&resource=%s&presentation_definition=%s mosip.inji.ovp.redirect.url.pattern=%s#vp_token=%s&presentation_submission=%s diff --git a/src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java b/src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java new file mode 100644 index 000000000..8c9ac1a79 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java @@ -0,0 +1,71 @@ +package io.mosip.mimoto.util; + +import io.mosip.mimoto.dto.WalletRequestDto; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.Mockito.when; + +@ExtendWith(SpringExtension.class) +@SpringBootTest(classes = WalletValidator.class) +@TestPropertySource(locations = "classpath:application-test.properties") +public class WalletValidatorTest { + + @Autowired + private WalletValidator walletValidator; + + @Mock + private WalletRequestDto walletRequestDto; + + @BeforeEach + void setUp() { + when(walletRequestDto.getPin()).thenReturn("1234"); + when(walletRequestDto.getName()).thenReturn("My Wallet"); + } + + @Test + void testValidateWalletRequest_validData() { + walletValidator.validateWalletRequest(walletRequestDto); + } + + @Test + void testValidatePin_invalidPin() { + when(walletRequestDto.getPin()).thenReturn("12"); + + IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> { + walletValidator.validateWalletRequest(walletRequestDto); + }); + + assertEquals("Pin should be numeric with 4 or 6 digits.", exception.getMessage()); + } + + @Test + void testValidateWalletName_invalidName() { + // Ensure valid pin for wallet name test + when(walletRequestDto.getPin()).thenReturn("1234"); + when(walletRequestDto.getName()).thenReturn("My Wallet!@"); + + IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> { + walletValidator.validateWalletRequest(walletRequestDto); + }); + + assertEquals("Wallet name should be alphanumeric with spaces and a few allowed special characters.", exception.getMessage()); + } + + @Test + void testValidateWalletName_validName() { + // Ensure valid pin for wallet name test + when(walletRequestDto.getPin()).thenReturn("123456"); + when(walletRequestDto.getName()).thenReturn("Valid Wallet 123"); + + walletValidator.validateWalletRequest(walletRequestDto); + } +} diff --git a/src/test/resources/application-test.properties b/src/test/resources/application-test.properties index 2d49a6b00..7c07de4b7 100644 --- a/src/test/resources/application-test.properties +++ b/src/test/resources/application-test.properties @@ -11,6 +11,8 @@ mosip.inji.vcDownloadMaxRetry=10 mosip.inji.vcDownloadPoolInterval=6000 mosip.inji.issuer=residentapp mosip.inji.openId4VCIDownloadVCTimeout=30000 +mosip.inji.user.wallet.pin.validation.regex=^\\d{4,6}$ +mosip.inji.user.wallet.name.validation.regex=^[A-Za-z0-9 _.-]{1,50}$ mosipbox.public.url=https://api.dev1.mosip.net public.url=https://api.dev1.mosip.net From d1f23f57829ed2e370736b302e957530687656df Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Wed, 26 Mar 2025 15:53:25 +0530 Subject: [PATCH 469/860] injiweb-1392 Fixed test cases Signed-off-by: Gurpreet41082 --- .../java/io/mosip/mimoto/controller/UserControllerTest.java | 4 ++++ .../io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/test/java/io/mosip/mimoto/controller/UserControllerTest.java b/src/test/java/io/mosip/mimoto/controller/UserControllerTest.java index 5b396ab38..4ad71cb41 100644 --- a/src/test/java/io/mosip/mimoto/controller/UserControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/UserControllerTest.java @@ -4,6 +4,7 @@ import io.mosip.mimoto.repository.UserMetadataRepository; import io.mosip.mimoto.service.WalletService; import io.mosip.mimoto.util.EncryptionDecryptionUtil; +import io.mosip.mimoto.util.WalletValidator; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -45,6 +46,9 @@ public class UserControllerTest { @MockBean private EncryptionDecryptionUtil encryptionDecryptionUtil; + @MockBean + private WalletValidator walletValidator; + @Autowired private WebApplicationContext context; diff --git a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java index 1c1de5861..e4764cca9 100644 --- a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java +++ b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java @@ -7,6 +7,7 @@ import io.mosip.mimoto.service.UserMetadataService; import io.mosip.mimoto.service.WalletService; import io.mosip.mimoto.util.EncryptionDecryptionUtil; +import io.mosip.mimoto.util.WalletValidator; import jakarta.servlet.http.Cookie; import lombok.extern.slf4j.Slf4j; import org.junit.Before; @@ -75,6 +76,9 @@ public class OAuth2LoginTests { @MockBean private WalletService walletService; + @MockBean + private WalletValidator walletValidator; + @MockBean private EncryptionDecryptionUtil encryptionDecryptionUtil; From 9ce154524563e4bf77156366aadda8535045d6bb Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Wed, 26 Mar 2025 16:24:18 +0530 Subject: [PATCH 470/860] [INJIWEB-1370] update the session controller endpoint to return the response without response wrapper and update the tests accordingly Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../mimoto/controller/SessionController.java | 12 ++++-------- .../java/io/mosip/mimoto/util/Utilities.java | 18 ++++++++++++++++++ .../controller/SessionControllerTest.java | 14 +++++++------- 3 files changed, 29 insertions(+), 15 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/SessionController.java b/src/main/java/io/mosip/mimoto/controller/SessionController.java index 6958b85c5..6f9c6e715 100644 --- a/src/main/java/io/mosip/mimoto/controller/SessionController.java +++ b/src/main/java/io/mosip/mimoto/controller/SessionController.java @@ -1,6 +1,5 @@ package io.mosip.mimoto.controller; -import io.mosip.mimoto.core.http.ResponseWrapper; import io.mosip.mimoto.exception.LoginSessionException; import io.mosip.mimoto.util.Utilities; import jakarta.servlet.http.HttpServletRequest; @@ -19,25 +18,22 @@ @Slf4j public class SessionController { @GetMapping("/status") - public ResponseEntity> getSessionStatus(HttpServletRequest request) { + public ResponseEntity getSessionStatus(HttpServletRequest request) { try { HttpSession httpSession = request.getSession(false); - log.info("Session: {}", httpSession); if (httpSession == null || httpSession.getAttribute("userId") == null) { throw new LoginSessionException(LOGIN_SESSION_EXCEPTION.getCode(), "The session is invalid or expired due to inactivity", HttpStatus.NOT_FOUND); } - ResponseWrapper responseWrapper = new ResponseWrapper<>(); - responseWrapper.setResponse("Session is active"); - return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); + return ResponseEntity.status(HttpStatus.OK).body("The session is valid and active"); } catch (LoginSessionException exception) { log.error("Error occurred while retrieving session status: ", exception); - return Utilities.handleErrorResponse(exception, LOGIN_SESSION_EXCEPTION.getCode(), exception.getStatus(), null); + return Utilities.getErrorResponseEntityWithoutWrapper(exception, LOGIN_SESSION_EXCEPTION.getCode(), exception.getStatus(), null); } catch (Exception exception) { log.error("Error occurred while retrieving session status: ", exception); - return Utilities.handleErrorResponse(exception, LOGIN_SESSION_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR, null); + return Utilities.getErrorResponseEntityWithoutWrapper(exception, LOGIN_SESSION_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR, null); } } } diff --git a/src/main/java/io/mosip/mimoto/util/Utilities.java b/src/main/java/io/mosip/mimoto/util/Utilities.java index 4b36c2174..aef3b6f38 100644 --- a/src/main/java/io/mosip/mimoto/util/Utilities.java +++ b/src/main/java/io/mosip/mimoto/util/Utilities.java @@ -240,6 +240,24 @@ public static ResponseEntity> handleErrorResponse( return responseEntity.body(responseWrapper); } + public static ResponseEntity getErrorResponseEntityWithoutWrapper( + Exception exception, String flowErrorCode, HttpStatus status, MediaType contentType) { + String errorMessage = exception.getMessage(); + String errorCode = flowErrorCode; + + if (errorMessage.contains(DELIMITER)) { + String[] errorSections = errorMessage.split(DELIMITER); + errorCode = errorSections[0]; + errorMessage = errorSections[1]; + } + + ResponseEntity.BodyBuilder responseEntity = ResponseEntity.status(status); + if (contentType != null) { + responseEntity.contentType(contentType); + } + return responseEntity.body(new ErrorDTO(errorCode, errorMessage)); + } + public static List getErrors(String errorCode, String errorMessage) { ErrorDTO errorDTO = new ErrorDTO(errorCode, errorMessage); return Lists.newArrayList(errorDTO); diff --git a/src/test/java/io/mosip/mimoto/controller/SessionControllerTest.java b/src/test/java/io/mosip/mimoto/controller/SessionControllerTest.java index 978efe66d..b5e17c8cb 100644 --- a/src/test/java/io/mosip/mimoto/controller/SessionControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/SessionControllerTest.java @@ -14,8 +14,8 @@ import org.springframework.test.web.servlet.MockMvc; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + import jakarta.servlet.http.HttpServletRequest; @RunWith(SpringRunner.class) @@ -43,15 +43,15 @@ public void shouldReturnSuccessResponseForValidSessionAndUserId() throws Excepti this.mockMvc.perform(get("/session/status").session(mockSession).accept(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) - .andExpect(jsonPath("$.response").value("Session is active")); + .andExpect(content().string("The session is valid and active")); } @Test public void shouldReturnProperErrorResponseWhenSessionIsNull() throws Exception { this.mockMvc.perform(get("/session/status").accept(MediaType.APPLICATION_JSON)) .andExpect(status().isNotFound()) - .andExpect(jsonPath("$.errors[0].errorCode").value("RESIDENT-APP-045")) - .andExpect(jsonPath("$.errors[0].errorMessage").value("The session is invalid or expired due to inactivity")); + .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-045")) + .andExpect(jsonPath("$.errorMessage").value("The session is invalid or expired due to inactivity")); } @@ -61,7 +61,7 @@ public void shouldReturnProperErrorResponseWhenTheUserIdInSessionIsNull() throws this.mockMvc.perform(get("/session/status").session(mockSession).accept(MediaType.APPLICATION_JSON)) .andExpect(status().isNotFound()) - .andExpect(jsonPath("$.errors[0].errorCode").value("RESIDENT-APP-045")) - .andExpect(jsonPath("$.errors[0].errorMessage").value("The session is invalid or expired due to inactivity")); + .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-045")) + .andExpect(jsonPath("$.errorMessage").value("The session is invalid or expired due to inactivity")); } } From 61ad0eeb2507d90cb70294ecdcaca3271015366b Mon Sep 17 00:00:00 2001 From: Rakshithb1 Date: Wed, 26 Mar 2025 17:05:52 +0530 Subject: [PATCH 471/860] [MOSIP-40792] inji restructure Signed-off-by: Rakshithb1 --- deploy/README.md | 23 +++++++++++++---------- deploy/config-server/install.sh | 2 +- deploy/config-server/values.yaml | 14 ++++---------- deploy/inji-global-cm.yaml.sample | 3 +-- partner-onboarder/copy_cm.sh | 2 +- 5 files changed, 20 insertions(+), 24 deletions(-) diff --git a/deploy/README.md b/deploy/README.md index f40baa61d..6358a0af4 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -25,14 +25,16 @@ * __Monitoring__ : Setup monitoring consisting elasticsearch, kibana, grafana using [steps](https://github.com/mosip/k8s-infra/tree/v1.2.0.2/monitoring). ### Install Pre-requisites -* `inji-global` configmap: For inji K8's env, `inji-global` configmap in `default` namespace contains Domain related information. Follow below steps to add domain details for `inji-global` configmap. - * Copy `inji-global-cm.yaml.sample` to `inji-global-cm.yaml`. - * Update the domain names in `inji-global-cm.yaml` correctly for your environment. - +* `global` configmap: For inji K8's env, `global` configmap in `default` namespace contains Domain related information. Follow below steps to add domain details for `global` configmap. + * Copy `global-cm.yaml.sample` to `global-cm.yaml`. + * Update the domain names in `global-cm.yaml` correctly for your environment. + ```` + kubectl -n default apply -f global-cm.yaml + ```` * Install minio * Execute minio install script ``` - cd deploy/object-store/minio + cd object-store/minio ./install.sh ``` * Create secrets for config server @@ -41,14 +43,15 @@ ./cred.sh ``` ### Install artifactory - ``` - cd deploy/artifactory + + ``` + cd artifactory ./install.sh - ``` + ``` ### Install config server * Execute config-server install script ``` - cd deploy/config-server + cd config-server ./install.sh ``` * Review values.yaml and make sure git repository parameters are as per your installation. @@ -66,7 +69,7 @@ * Execute mimoto install script ``` - cd helm/mimoto + cd mimoto ./install.sh ``` * During the execution of the `install.sh` script, a prompt appears requesting information regarding the presence of a public domain and a valid SSL certificate on the server. diff --git a/deploy/config-server/install.sh b/deploy/config-server/install.sh index 9fccf4f33..55d082660 100755 --- a/deploy/config-server/install.sh +++ b/deploy/config-server/install.sh @@ -25,7 +25,7 @@ CHART_VERSION=0.0.2-develop echo Copy configmaps COPY_UTIL=../copy_cm_func.sh - $COPY_UTIL configmap inji-global default $NS + $COPY_UTIL configmap global default $NS echo Copy secrets #$COPY_UTIL secret db-common-secrets postgres $NS diff --git a/deploy/config-server/values.yaml b/deploy/config-server/values.yaml index 7f3b08433..193ff1172 100755 --- a/deploy/config-server/values.yaml +++ b/deploy/config-server/values.yaml @@ -82,33 +82,27 @@ envVariables: valueFrom: configMapKeyRef: key: mosip-esignet-host - name: inji-global + name: global enabled: true - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_ESIGNET_INSURANCE_HOST valueFrom: configMapKeyRef: key: mosip-esignet-insurance-host - name: inji-global + name: global enabled: false - - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_INJI_DATASHARE_HOST - valueFrom: - configMapKeyRef: - key: mosip-inji-datashare-host - name: inji-global - enabled: true - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_INJIWEB_HOST valueFrom: configMapKeyRef: key: mosip-injiweb-host - name: inji-global + name: global enabled: true - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_INJIVERIFY_HOST valueFrom: configMapKeyRef: key: mosip-injiverify-host - name: inji-global + name: global enabled: true diff --git a/deploy/inji-global-cm.yaml.sample b/deploy/inji-global-cm.yaml.sample index f954983cd..663fc9ab7 100644 --- a/deploy/inji-global-cm.yaml.sample +++ b/deploy/inji-global-cm.yaml.sample @@ -6,7 +6,7 @@ apiVersion: v1 kind: ConfigMap metadata: - name: inji-global + name: global namespace: default data: mosip-version: develop @@ -15,7 +15,6 @@ data: mosip-iam-external-host: iam.sandbox.xyz.net mosip-api-internal-host: api-internal.sandbox.xyz.net mosip-esignet-host: esignet.sandbox.xyz.net - mosip-inji-datashare-host: inji-datashare.sandbox.xyz.net mosip-injiweb-host: injiweb.sandbox.xyz.net mosip-injiverify-host: injiverify.sandbox.xyz.net mosip-postgres-host: postgres.sandbox.xyz.net diff --git a/partner-onboarder/copy_cm.sh b/partner-onboarder/copy_cm.sh index 8070b2c88..fc5e2a912 100755 --- a/partner-onboarder/copy_cm.sh +++ b/partner-onboarder/copy_cm.sh @@ -5,6 +5,6 @@ COPY_UTIL=./copy_cm_func.sh DST_NS=injiweb -$COPY_UTIL configmap global default $DST_NS +$COPY_UTIL configmap inji-global default $DST_NS $COPY_UTIL configmap keycloak-env-vars keycloak $DST_NS $COPY_UTIL configmap keycloak-host keycloak $DST_NS From 6b9e0b6bca1432ef65f836e1a6990de3b9f72880 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Thu, 27 Mar 2025 00:06:20 +0530 Subject: [PATCH 472/860] [INJIWEB-1370] update the user controller endpoints to return the success and failure responses without wrapper and update the test cases and add new test cases for wallet endpoints Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- pom.xml | 7 +- .../mimoto/controller/UserController.java | 39 ++--- .../java/io/mosip/mimoto/util/Utilities.java | 4 +- .../mimoto/controller/UserControllerTest.java | 148 +++++++++++++++--- .../security/oauth2/OAuth2LoginTests.java | 20 +-- 5 files changed, 161 insertions(+), 57 deletions(-) diff --git a/pom.xml b/pom.xml index 346d4397a..6be7ff73c 100644 --- a/pom.xml +++ b/pom.xml @@ -202,7 +202,12 @@ test - + + org.springframework.security + spring-security-test + 6.4.2 + test + org.springframework.boot spring-boot-starter-data-jpa diff --git a/src/main/java/io/mosip/mimoto/controller/UserController.java b/src/main/java/io/mosip/mimoto/controller/UserController.java index 3b6e33d33..96446513b 100644 --- a/src/main/java/io/mosip/mimoto/controller/UserController.java +++ b/src/main/java/io/mosip/mimoto/controller/UserController.java @@ -46,9 +46,8 @@ public class UserController { private WalletValidator walletValidator; @GetMapping - public ResponseEntity> getUserProfile(Authentication authentication, HttpSession session) { + public ResponseEntity getUserProfile(Authentication authentication, HttpSession session) { try { - ResponseWrapper responseWrapper = new ResponseWrapper<>(); String identityProvider = (String) session.getAttribute("clientRegistrationId"); UserMetadata userMetadata = fetchUserMetadata(authentication.getName(), identityProvider); @@ -56,20 +55,19 @@ public ResponseEntity> getUserProfile(Authentic UserMetadataDTO userMetadataDTO = new UserMetadataDTO(encryptionDecryptionUtill.decrypt(userMetadata.getDisplayName(), "user_pii", "", ""), encryptionDecryptionUtill.decrypt(userMetadata.getProfilePictureUrl(), "user_pii", "", ""), encryptionDecryptionUtill.decrypt(userMetadata.getEmail(), "user_pii", "", "")); - responseWrapper.setResponse(userMetadataDTO); - return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); + return ResponseEntity.status(HttpStatus.OK).body(userMetadataDTO); } catch (OAuth2AuthenticationException exception) { log.error("Error occurred while retrieving user profile : ", exception); - return Utilities.handleErrorResponse(exception, USER_METADATA_FETCH_EXCEPTION.getCode(), exception.getStatus(), null); + return Utilities.getErrorResponseEntityWithoutWrapper(exception, USER_METADATA_FETCH_EXCEPTION.getCode(), exception.getStatus(), null); } catch (DataAccessResourceFailureException exception) { log.error("Error occurred while connecting to the database : ", exception); OAuth2AuthenticationException authenticationException = new OAuth2AuthenticationException(DATABASE_CONNECTION_EXCEPTION.getCode(), DATABASE_CONNECTION_EXCEPTION.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); - return Utilities.handleErrorResponse(authenticationException, USER_METADATA_FETCH_EXCEPTION.getCode(), authenticationException.getStatus(), null); + return Utilities.getErrorResponseEntityWithoutWrapper(authenticationException, USER_METADATA_FETCH_EXCEPTION.getCode(), authenticationException.getStatus(), null); } catch (Exception exception) { log.error("Error occurred while retrieving user profile : ", exception); OAuth2AuthenticationException authenticationException = new OAuth2AuthenticationException(USER_METADATA_FETCH_EXCEPTION.getCode(), USER_METADATA_FETCH_EXCEPTION.getMessage() + " due to : " + exception.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); - return Utilities.handleErrorResponse(authenticationException, USER_METADATA_FETCH_EXCEPTION.getCode(), authenticationException.getStatus(), null); + return Utilities.getErrorResponseEntityWithoutWrapper(authenticationException, USER_METADATA_FETCH_EXCEPTION.getCode(), authenticationException.getStatus(), null); } } @@ -80,48 +78,43 @@ private UserMetadata fetchUserMetadata(String providerSubjectId, String identity } @PostMapping("/wallets") - public ResponseEntity> createWallet(@RequestBody WalletRequestDto wallet, HttpSession httpSession) { + public ResponseEntity createWallet(@RequestBody WalletRequestDto wallet, HttpSession httpSession) { try { walletValidator.validateWalletRequest(wallet); - ResponseWrapper responseWrapper = new ResponseWrapper<>(); - responseWrapper.setResponse(walletService.createWallet((String) httpSession.getAttribute("userId"), wallet.getName(), wallet.getPin())); - return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); + return ResponseEntity.status(HttpStatus.OK).body(walletService.createWallet((String) httpSession.getAttribute("userId"), wallet.getName(), wallet.getPin())); } catch (IllegalArgumentException exception) { log.error("Error occurred while creating user wallets : ", exception); - return Utilities.handleErrorResponse(exception, USER_WALLET_CREATION_EXCEPTION.getCode(), HttpStatus.BAD_REQUEST, MediaType.APPLICATION_JSON); + return Utilities.getErrorResponseEntityWithoutWrapper(exception, USER_WALLET_CREATION_EXCEPTION.getCode(), HttpStatus.BAD_REQUEST, MediaType.APPLICATION_JSON); } catch (Exception exception) { log.error("Error occurred while creating user wallets : ", exception); - return Utilities.handleErrorResponse(exception, USER_WALLET_CREATION_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR,MediaType.APPLICATION_JSON); + return Utilities.getErrorResponseEntityWithoutWrapper(exception, USER_WALLET_CREATION_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR,MediaType.APPLICATION_JSON); } } @GetMapping("/wallets") - public ResponseEntity>> getWallets(HttpSession httpSession) { + public ResponseEntity> getWallets(HttpSession httpSession) { try { - ResponseWrapper> responseWrapper = new ResponseWrapper<>(); List list = new ArrayList<>(); list.addAll(walletService.getWallets((String) httpSession.getAttribute("userId"))); - responseWrapper.setResponse(list); - return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); + + return ResponseEntity.status(HttpStatus.OK).body(list); } catch (Exception exception) { log.error("Error occurred while retrieving user wallets : ", exception); - return Utilities.handleErrorResponse(exception, USER_WALLET_RETRIEVAL_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR,MediaType.APPLICATION_JSON); + return Utilities.getErrorResponseEntityWithoutWrapper(exception, USER_WALLET_RETRIEVAL_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR,MediaType.APPLICATION_JSON); } } @PostMapping("/wallets/{walletId}") - public ResponseEntity> getWallet(@PathVariable("walletId") String walletId, @RequestBody WalletRequestDto wallet, HttpSession httpSession) { + public ResponseEntity getWallet(@PathVariable("walletId") String walletId, @RequestBody WalletRequestDto wallet, HttpSession httpSession) { try { // If wallet_key does not exist in the session, fetch it and set it in the session String walletKey = walletService.getWalletKey((String) httpSession.getAttribute("userId"), walletId, wallet.getPin()); httpSession.setAttribute("wallet_key", walletKey); - ResponseWrapper responseWrapper = new ResponseWrapper<>(); - responseWrapper.setResponse(walletId); - return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); + return ResponseEntity.status(HttpStatus.OK).body(walletId); } catch (Exception exception) { log.error("Error occurred while retrieving user wallet ", exception); - return Utilities.handleErrorResponse(exception, USER_WALLET_RETRIEVAL_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR,MediaType.APPLICATION_JSON); + return Utilities.getErrorResponseEntityWithoutWrapper(exception, USER_WALLET_RETRIEVAL_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR,MediaType.APPLICATION_JSON); } } } diff --git a/src/main/java/io/mosip/mimoto/util/Utilities.java b/src/main/java/io/mosip/mimoto/util/Utilities.java index aef3b6f38..601ebbe94 100644 --- a/src/main/java/io/mosip/mimoto/util/Utilities.java +++ b/src/main/java/io/mosip/mimoto/util/Utilities.java @@ -240,7 +240,7 @@ public static ResponseEntity> handleErrorResponse( return responseEntity.body(responseWrapper); } - public static ResponseEntity getErrorResponseEntityWithoutWrapper( + public static ResponseEntity getErrorResponseEntityWithoutWrapper( Exception exception, String flowErrorCode, HttpStatus status, MediaType contentType) { String errorMessage = exception.getMessage(); String errorCode = flowErrorCode; @@ -255,7 +255,7 @@ public static ResponseEntity getErrorResponseEntityWithoutWrapper( if (contentType != null) { responseEntity.contentType(contentType); } - return responseEntity.body(new ErrorDTO(errorCode, errorMessage)); + return (ResponseEntity) responseEntity.body(new ErrorDTO(errorCode, errorMessage)); } public static List getErrors(String errorCode, String errorMessage) { diff --git a/src/test/java/io/mosip/mimoto/controller/UserControllerTest.java b/src/test/java/io/mosip/mimoto/controller/UserControllerTest.java index 4ad71cb41..96619a5ff 100644 --- a/src/test/java/io/mosip/mimoto/controller/UserControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/UserControllerTest.java @@ -1,6 +1,8 @@ package io.mosip.mimoto.controller; +import com.fasterxml.jackson.databind.ObjectMapper; import io.mosip.mimoto.dbentity.UserMetadata; +import io.mosip.mimoto.dto.WalletRequestDto; import io.mosip.mimoto.repository.UserMetadataRepository; import io.mosip.mimoto.service.WalletService; import io.mosip.mimoto.util.EncryptionDecryptionUtil; @@ -18,17 +20,21 @@ import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import static org.junit.Assert.assertEquals; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import org.springframework.test.web.servlet.MvcResult; import org.springframework.test.web.servlet.result.MockMvcResultMatchers; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import java.util.List; import java.util.Optional; import static org.mockito.Mockito.*; import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; @RunWith(SpringRunner.class) @SpringBootTest(classes = UserController.class) @@ -59,7 +65,9 @@ public class UserControllerTest { MockHttpSession mockSession; - String identityProvider; + String identityProvider, userId; + + WalletRequestDto walletRequestDto; @Before public void setUp() { @@ -75,47 +83,149 @@ public void setUp() { mockSession = new MockHttpSession(); mockSession.setAttribute("clientRegistrationId", "google"); mockSession.setAttribute("userId", "user123"); - when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider("user123",identityProvider)).thenReturn(Optional.of(userMetadata)); + userId = (String) mockSession.getAttribute("userId"); + when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider("user123", identityProvider)).thenReturn(Optional.of(userMetadata)); when(encryptionDecryptionUtil.decrypt("encryptedName", "user_pii", "", "")).thenReturn("Name 123"); when(encryptionDecryptionUtil.decrypt("encryptedUrl", "user_pii", "", "")).thenReturn("https://profile.com/pic.jpg"); when(encryptionDecryptionUtil.decrypt("encryptedEmail", "user_pii", "", "")).thenReturn("name123@gmail.com"); + + walletRequestDto = new WalletRequestDto(); + walletRequestDto.setName("My Wallet"); + walletRequestDto.setPin("1234"); } @Test public void shouldReturnTheUserDataForValidValues() throws Exception { - mockMvc.perform(MockMvcRequestBuilders.get("/users/me").accept(MediaType.APPLICATION_JSON) + mockMvc.perform(get("/users/me").accept(MediaType.APPLICATION_JSON) .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")).session(mockSession)) .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.jsonPath("$.response.display_name").value("Name 123")) - .andExpect(MockMvcResultMatchers.jsonPath("$.response.profile_picture_url").value("https://profile.com/pic.jpg")) - .andExpect(MockMvcResultMatchers.jsonPath("$.response.email").value("name123@gmail.com")) - .andExpect(jsonPath("$.errors").isArray()) - .andExpect(jsonPath("$.errors").isEmpty()); + .andExpect(MockMvcResultMatchers.jsonPath("$.display_name").value("Name 123")) + .andExpect(MockMvcResultMatchers.jsonPath("$.profile_picture_url").value("https://profile.com/pic.jpg")) + .andExpect(MockMvcResultMatchers.jsonPath("$.email").value("name123@gmail.com")) + .andExpect(jsonPath("$.errorCode").doesNotExist()) + .andExpect(jsonPath("$.errorMessage").doesNotExist()); } @Test public void shouldThrowExceptionForAInvalidUser() throws Exception { - when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider("user123",identityProvider)).thenReturn(Optional.empty()); + when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider("user123", identityProvider)).thenReturn(Optional.empty()); - mockMvc.perform(MockMvcRequestBuilders.get("/users/me").accept(MediaType.APPLICATION_JSON) + mockMvc.perform(get("/users/me").accept(MediaType.APPLICATION_JSON) .session(mockSession) .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")).session(mockSession)) .andExpect(MockMvcResultMatchers.status().isNotFound()) - .andExpect(jsonPath("$.response").doesNotExist()) - .andExpect(jsonPath("$.errors[0].errorCode").value("RESIDENT-APP-049")) - .andExpect(jsonPath("$.errors[0].errorMessage").value("User not found. Please check your credentials or register")); + .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-049")) + .andExpect(jsonPath("$.errorMessage").value("User not found. Please check your credentials or register")); } @Test public void shouldThrowExceptionIfAnyOtherErrorOccurredWhileFetchingUserData() throws Exception { - when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider("user123",identityProvider)).thenReturn(Optional.of(userMetadata)); + when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider("user123", identityProvider)).thenReturn(Optional.of(userMetadata)); when(encryptionDecryptionUtil.decrypt("encryptedName", "user_pii", "", "")).thenThrow(new RuntimeException("Failure occurred while decrypting the name")); - mockMvc.perform(MockMvcRequestBuilders.get("/users/me").accept(MediaType.APPLICATION_JSON) + mockMvc.perform(get("/users/me").accept(MediaType.APPLICATION_JSON) .session(mockSession) .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")).session(mockSession)) .andExpect(MockMvcResultMatchers.status().isInternalServerError()) - .andExpect(jsonPath("$.errors[0].errorCode").value("RESIDENT-APP-049")) - .andExpect(jsonPath("$.errors[0].errorMessage").value("Failed to fetch the User metadata from database due to : Failure occurred while decrypting the name")); + .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-049")) + .andExpect(jsonPath("$.errorMessage").value("Failed to fetch the User metadata from database due to : Failure occurred while decrypting the name")); + } + + @Test + public void shouldReturnWalletIdForSuccessfulWalletCreation() throws Exception { + when(walletService.createWallet(userId, "My Wallet", "1234")).thenReturn("walletId123"); + + mockMvc.perform(post("/users/me/wallets") + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON) + .content(new ObjectMapper().writeValueAsString(walletRequestDto)) + .session(mockSession) + .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")) + .with(SecurityMockMvcRequestPostProcessors.csrf())) + .andExpect(status().isOk()) + .andExpect(content().string("walletId123")); + } + + @Test + public void shouldThrowExceptionIfAnyErrorOccurredWhenCreatingWallet() throws Exception { + when(walletService.createWallet(userId, "My Wallet", "1234")) + .thenThrow(new RuntimeException("Exception occurred when creating Wallet for given userId")); + + mockMvc.perform(post("/users/me/wallets") + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON) + .content(new ObjectMapper().writeValueAsString(walletRequestDto)) + .session(mockSession) + .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")) + .with(SecurityMockMvcRequestPostProcessors.csrf())) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-050")) + .andExpect(jsonPath("$.errorMessage").value("Exception occurred when creating Wallet for given userId")); + } + + + @Test + public void shouldReturnListOfWalletIDsForValidUserId() throws Exception { + List wallets = List.of("wallet1", "wallet2"); + when(walletService.getWallets(userId)).thenReturn(wallets); + + mockMvc.perform(get("/users/me/wallets") + .accept(MediaType.APPLICATION_JSON) + .session(mockSession) + .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")) + .with(SecurityMockMvcRequestPostProcessors.csrf())) + .andExpect(status().isOk()) + .andExpect(content().string("[\"wallet1\",\"wallet2\"]")); + } + + @Test + public void shouldThrowExceptionIfAnyErrorOccurredWhileFetchingWalletsForGivenUserId() throws Exception { + when(walletService.getWallets(userId)).thenThrow(new RuntimeException("Exception occurred when fetching the wallets for given userId")); + + mockMvc.perform(get("/users/me/wallets") + .session(mockSession) + .accept(MediaType.APPLICATION_JSON) + .session(mockSession) + .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")) + .with(SecurityMockMvcRequestPostProcessors.csrf())) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-051")) + .andExpect(jsonPath("$.errorMessage").value("Exception occurred when fetching the wallets for given userId")); + } + + @Test + public void shouldReturnTheWalletIDAndStoreWalletKeyInSessionForValidUserAndWalletId() throws Exception { + when(walletService.getWalletKey(userId, "walletId123", "1234")).thenReturn("walletId123"); + String expectedWalletKey = "walletId123"; + + MvcResult result = mockMvc.perform(post("/users/me/wallets/walletId123") + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON) + .content(new ObjectMapper().writeValueAsString(walletRequestDto)) + .session(mockSession) + .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")) + .with(SecurityMockMvcRequestPostProcessors.csrf())) + .andExpect(status().isOk()) + .andExpect(content().string("walletId123")) + .andReturn(); + + String actualWalletKey = result.getRequest().getSession().getAttribute("wallet_key").toString(); + assertEquals(expectedWalletKey, actualWalletKey); + } + + @Test + public void shouldThrowExceptionIfAnyErrorOccurredWhileFetchingWalletDataForGivenUserIdAndWalletId() throws Exception { + when(walletService.getWalletKey(userId, "walletId123", "1234")).thenThrow(new RuntimeException("Exception occurred when fetching the wallet data for given walletId and userId")); + + mockMvc.perform(post("/users/me/wallets/walletId123") + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON) + .content(new ObjectMapper().writeValueAsString(walletRequestDto)) + .session(mockSession) + .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")) + .with(SecurityMockMvcRequestPostProcessors.csrf())) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-051")) + .andExpect(jsonPath("$.errorMessage").value("Exception occurred when fetching the wallet data for given walletId and userId")); } } \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java index e4764cca9..892540dae 100644 --- a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java +++ b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java @@ -98,6 +98,8 @@ public class OAuth2LoginTests { private Timestamp now; private UserMetadata userMetadata; + MockHttpSession mockSession; + @Before public void setUp() { MockitoAnnotations.initMocks(this); @@ -131,6 +133,7 @@ public void setUp() { .build(); when(clientRegistrationRepository.findByRegistrationId("google")).thenReturn(googleClient); + mockSession = new MockHttpSession(); } @Test @@ -144,7 +147,6 @@ public void shouldBeRedirectedToRedirectEndpointOnUnauthenticatedAccessToProtect public void shouldBeAbleToAccessProtectedEndpointWhenUserIsAuthenticatedUsingOAuth2() throws Exception { Mockito.when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider("user123", "google")).thenReturn(Optional.of(userMetadata)); when(encryptionDecryptionUtil.decrypt(anyString(), any(), any(), any())).thenReturn(displayName, profilePictureUrl, email); - MockHttpSession mockSession = new MockHttpSession(); mockSession.setAttribute("clientRegistrationId", "google"); // Create a mock OAuth2User with the necessary attributes, including the name. @@ -168,16 +170,15 @@ public void shouldBeAbleToAccessProtectedEndpointWhenUserIsAuthenticatedUsingOAu .session(mockSession) .with(oauth2Login().oauth2User(oauth2User))) .andExpect(status().isOk()) - .andExpect(MockMvcResultMatchers.jsonPath("$.response.display_name").value("user_123")) - .andExpect(MockMvcResultMatchers.jsonPath("$.response.profile_picture_url").value("https://example.com/profile.jpg")) - .andExpect(MockMvcResultMatchers.jsonPath("$.response.email").value("user.123@example.com")) - .andExpect(jsonPath("$.errors").isArray()) - .andExpect(jsonPath("$.errors").isEmpty()); + .andExpect(MockMvcResultMatchers.jsonPath("$.display_name").value("user_123")) + .andExpect(MockMvcResultMatchers.jsonPath("$.profile_picture_url").value("https://example.com/profile.jpg")) + .andExpect(MockMvcResultMatchers.jsonPath("$.email").value("user.123@example.com")) + .andExpect(jsonPath("$.errorCode").doesNotExist()) + .andExpect(jsonPath("$.errorMessage").doesNotExist()); } @Test public void shouldThrowExceptionWhenLogoutRequestWasSentForInvalidSession() throws Exception { - MockHttpSession mockSession = new MockHttpSession(); String sessionId = "mockSessionId"; String encodedSessionId = Base64.getUrlEncoder().encodeToString(sessionId.getBytes()); Cookie sessionCookie = new Cookie("SESSION", encodedSessionId); @@ -196,7 +197,6 @@ public void shouldThrowExceptionWhenLogoutRequestWasSentForInvalidSession() thro @Test public void shouldPerformLogoutSuccessfullyForaValidSession() throws Exception { - MockHttpSession mockSession = new MockHttpSession(); String sessionId = "mockSessionId"; String encodedSessionId = Base64.getUrlEncoder().encodeToString(sessionId.getBytes()); Cookie sessionCookie = new Cookie("SESSION", encodedSessionId); @@ -214,8 +214,6 @@ public void shouldPerformLogoutSuccessfullyForaValidSession() throws Exception { @Test public void shouldSendTheCustomErrorInRedirectUrlWhenUserDeniesConsentDuringLogin() throws Exception { - MockHttpSession mockSession = new MockHttpSession(); - OAuth2AuthorizationRequest authRequest = OAuth2AuthorizationRequest.authorizationCode() .authorizationUri("https://accounts.google.com/o/oauth2/auth") .clientId("test-client-id") @@ -239,8 +237,6 @@ public void shouldSendTheCustomErrorInRedirectUrlWhenUserDeniesConsentDuringLogi @Test public void shouldThrowTheCustomErrorInRedirectUrlWhenAnyExceptionOccurredDuringLogin() throws Exception { - MockHttpSession mockSession = new MockHttpSession(); - //registration_id is not sent in the auth request OAuth2AuthorizationRequest authRequest = OAuth2AuthorizationRequest.authorizationCode() .authorizationUri("https://accounts.google.com/o/oauth2/auth") From 7230fb9d660dd22758b83408fa905cb59b6a5c32 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Thu, 27 Mar 2025 17:08:33 +0530 Subject: [PATCH 473/860] injiweb-1392 added the signing keys table to store all keys Signed-off-by: Gurpreet41082 --- db_scripts/inji_mimoto/ddl/mimoto-wallet.sql | 17 ++----- .../inji_mimoto/ddl/mimoto-wallet_keys.sql | 30 +++++++++++++ .../mimoto/dbentity/ProofSigningKey.java | 44 +++++++++++++++++++ .../java/io/mosip/mimoto/dbentity/Wallet.java | 19 ++------ .../mosip/mimoto/dbentity/WalletMetadata.java | 2 + .../java/io/mosip/mimoto/util/WalletUtil.java | 42 ++++++++++++++---- .../io/mosip/mimoto/util/WalletValidator.java | 5 ++- 7 files changed, 121 insertions(+), 38 deletions(-) create mode 100644 db_scripts/inji_mimoto/ddl/mimoto-wallet_keys.sql create mode 100644 src/main/java/io/mosip/mimoto/dbentity/ProofSigningKey.java diff --git a/db_scripts/inji_mimoto/ddl/mimoto-wallet.sql b/db_scripts/inji_mimoto/ddl/mimoto-wallet.sql index e086ae2ac..f827bcd98 100644 --- a/db_scripts/inji_mimoto/ddl/mimoto-wallet.sql +++ b/db_scripts/inji_mimoto/ddl/mimoto-wallet.sql @@ -7,15 +7,10 @@ -- Modified Date Modified By Comments / Remarks -- ------------------------------------------------------------------------------------------ -- ------------------------------------------------------------------------------------------ - CREATE TABLE IF NOT EXISTS wallet ( id character varying(36) PRIMARY KEY, -- Primary key for the table - name TEXT NOT NULL, -- wallet name - user_id character varying(36) NOT NULL, -- Foreign key referencing user_metadata (long-based) - wallet_key TEXT NOT NULL, -- Encrypted wallet key - public_key TEXT NOT NULL, -- Public key for wallet - secret_key TEXT NOT NULL, -- Secret key, encrypted with wallet_key - key_metadata JSONB NOT NULL, -- Metadata about the public and private keys + user_id character varying(36) NOT NULL, -- Foreign key referencing user_metadata + wallet_key TEXT NOT NULL, -- Encrypted wallet key (retained here) wallet_metadata JSONB NOT NULL, -- Metadata about the wallet, including encryption info created_at TIMESTAMP DEFAULT now(), -- Timestamp of record creation (defaults to current time) updated_at TIMESTAMP DEFAULT now(), -- Timestamp of last update (defaults to current time) @@ -23,14 +18,10 @@ CREATE TABLE IF NOT EXISTS wallet ( CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES user_metadata (id) ON DELETE CASCADE ); -COMMENT ON TABLE wallet IS 'Wallet: Contains information about the user''s wallet, encrypted keys, and metadata'; - +COMMENT ON TABLE wallet IS 'Wallet: Contains general information about the user''s wallet and metadata'; COMMENT ON COLUMN wallet.id IS 'Primary Key: Unique identifier for the wallet'; COMMENT ON COLUMN wallet.user_id IS 'User ID: Foreign key referring to the user_metadata table'; -COMMENT ON COLUMN wallet.wallet_key IS 'Wallet Key: Encrypted wallet key'; -COMMENT ON COLUMN wallet.public_key IS 'Public Key: The public key of the wallet'; -COMMENT ON COLUMN wallet.secret_key IS 'Secret Key: Encrypted using the wallet_key'; -COMMENT ON COLUMN wallet.key_metadata IS 'Key Metadata: Contains additional information about the public and private keys'; +COMMENT ON COLUMN wallet.wallet_key IS 'Wallet Key: Encrypted wallet key used to encrypt secret keys in wallet_keys'; COMMENT ON COLUMN wallet.wallet_metadata IS 'Wallet Metadata: Contains information about the wallet, including encryption and PIN usage'; COMMENT ON COLUMN wallet.created_at IS 'Created At: The date and time when the wallet was created'; COMMENT ON COLUMN wallet.updated_at IS 'Updated At: The date and time when the wallet was last updated'; \ No newline at end of file diff --git a/db_scripts/inji_mimoto/ddl/mimoto-wallet_keys.sql b/db_scripts/inji_mimoto/ddl/mimoto-wallet_keys.sql new file mode 100644 index 000000000..3ae51b065 --- /dev/null +++ b/db_scripts/inji_mimoto/ddl/mimoto-wallet_keys.sql @@ -0,0 +1,30 @@ +-- ------------------------------------------------------------------------------------------------- +-- Database Name: inji_mimoto +-- Table Name : proof_signing_key +-- Purpose : Stores wallet key-related information, including encrypted secret keys and metadata +-- +-- +-- Modified Date Modified By Comments / Remarks +-- ------------------------------------------------------------------------------------------ +-- 2025-03-27 User Initial table creation, referencing wallet for proof_signing_key encryption +-- ------------------------------------------------------------------------------------------ +CREATE TABLE IF NOT EXISTS proof_signing_key ( + id character varying(36) PRIMARY KEY, -- Primary key for the table + wallet_id character varying(36) NOT NULL, -- Foreign key referencing the wallet table + public_key TEXT NOT NULL, -- Public key for wallet + secret_key TEXT NOT NULL, -- Secret key, encrypted using proof_signing_key + key_metadata JSONB NOT NULL, -- Metadata about the public and private keys + created_at TIMESTAMP DEFAULT now(), -- Timestamp of record creation (defaults to current time) + updated_at TIMESTAMP DEFAULT now(), -- Timestamp of last update (defaults to current time) + + CONSTRAINT fk_wallet_id FOREIGN KEY (wallet_id) REFERENCES wallet (id) ON DELETE CASCADE +); + +COMMENT ON TABLE proof_signing_key IS 'Wallet Keys: Contains information about the wallet keys, including encrypted keys and metadata'; +COMMENT ON COLUMN proof_signing_key.id IS 'Primary Key: Unique identifier for the key'; +COMMENT ON COLUMN proof_signing_key.wallet_id IS 'Wallet ID: Foreign key referring to the wallet table'; +COMMENT ON COLUMN proof_signing_key.public_key IS 'Public Key: The public key of the wallet'; +COMMENT ON COLUMN proof_signing_key.secret_key IS 'Secret Key: Encrypted using the proof_signing_key from wallet table'; +COMMENT ON COLUMN proof_signing_key.key_metadata IS 'Key Metadata: Contains additional information about the public and private keys'; +COMMENT ON COLUMN proof_signing_key.created_at IS 'Created At: The date and time when the key information was created'; +COMMENT ON COLUMN proof_signing_key.updated_at IS 'Updated At: The date and time when the key information was last updated'; \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/dbentity/ProofSigningKey.java b/src/main/java/io/mosip/mimoto/dbentity/ProofSigningKey.java new file mode 100644 index 000000000..4d616121c --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dbentity/ProofSigningKey.java @@ -0,0 +1,44 @@ +package io.mosip.mimoto.dbentity; + +import jakarta.persistence.*; +import lombok.Getter; +import lombok.Setter; + +import org.hibernate.annotations.JdbcTypeCode; +import org.hibernate.type.SqlTypes; + +import java.time.Instant; +@Entity +@Getter +@Setter +public class ProofSigningKey { + + @Id + @Column(length = 36, updatable = false, nullable = false) + private String id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "wallet_id", nullable = false) + private Wallet wallet; // Foreign key reference to the wallet table + + @Column(nullable = false) + private String publicKey; // Public key for wallet + + @Column(nullable = false) + private String secretKey; // Secret key, encrypted using walletKey + + @JdbcTypeCode(SqlTypes.JSON) + @Column(columnDefinition = "jsonb") + private KeyMetadata keyMetadata; // Metadata about the public and private keys + + @Column(nullable = false, updatable = false) + private Instant createdAt = Instant.now(); + + @Column(nullable = false) + private Instant updatedAt = Instant.now(); + + @PreUpdate + public void preUpdate() { + this.updatedAt = Instant.now(); + } +} diff --git a/src/main/java/io/mosip/mimoto/dbentity/Wallet.java b/src/main/java/io/mosip/mimoto/dbentity/Wallet.java index 88ae67b18..41c347416 100644 --- a/src/main/java/io/mosip/mimoto/dbentity/Wallet.java +++ b/src/main/java/io/mosip/mimoto/dbentity/Wallet.java @@ -3,12 +3,11 @@ import jakarta.persistence.*; import lombok.Getter; import lombok.Setter; -import org.hibernate.annotations.GenericGenerator; import org.hibernate.annotations.JdbcTypeCode; import org.hibernate.type.SqlTypes; import java.time.Instant; -import java.util.UUID; +import java.util.List; @Entity @Getter @@ -19,28 +18,18 @@ public class Wallet { @Column(length = 36, updatable = false, nullable = false) private String id; - @Column(nullable = false) - private String name; - @Column(nullable = false) private String userId; // Foreign key reference to user_metadata @Column(nullable = false) private String walletKey; // Encrypted wallet key using AES256-GCM - @Column(nullable = false) - private String publicKey; - - @Column(nullable = false) - private String secretKey; // Encrypted with walletKey - @JdbcTypeCode(SqlTypes.JSON) @Column(columnDefinition = "jsonb") - private KeyMetadata keyMetadata; + private WalletMetadata walletMetadata; // Metadata about the wallet, including encryption info - @JdbcTypeCode(SqlTypes.JSON) - @Column(columnDefinition = "jsonb") - private WalletMetadata walletMetadata; + @OneToMany(mappedBy = "wallet", cascade = CascadeType.ALL, fetch = FetchType.LAZY) + private List proofSigningKeys; // One wallet can have many keys @Column(nullable = false, updatable = false) private Instant createdAt = Instant.now(); diff --git a/src/main/java/io/mosip/mimoto/dbentity/WalletMetadata.java b/src/main/java/io/mosip/mimoto/dbentity/WalletMetadata.java index a73bb59f2..7583ae93e 100644 --- a/src/main/java/io/mosip/mimoto/dbentity/WalletMetadata.java +++ b/src/main/java/io/mosip/mimoto/dbentity/WalletMetadata.java @@ -1,10 +1,12 @@ package io.mosip.mimoto.dbentity; +import jakarta.persistence.Column; import lombok.Data; @Data public class WalletMetadata { private String encryptionAlgo; private String encryptionType; + private String name; } diff --git a/src/main/java/io/mosip/mimoto/util/WalletUtil.java b/src/main/java/io/mosip/mimoto/util/WalletUtil.java index 4cb4bde01..d1ce2f054 100644 --- a/src/main/java/io/mosip/mimoto/util/WalletUtil.java +++ b/src/main/java/io/mosip/mimoto/util/WalletUtil.java @@ -5,6 +5,7 @@ import io.mosip.kernel.cryptomanager.service.CryptomanagerService; import io.mosip.mimoto.dbentity.KeyMetadata; import io.mosip.mimoto.dbentity.Wallet; +import io.mosip.mimoto.dbentity.ProofSigningKey; import io.mosip.mimoto.dbentity.WalletMetadata; import io.mosip.mimoto.repository.WalletRepository; import org.springframework.beans.factory.annotation.Autowired; @@ -12,7 +13,10 @@ import javax.crypto.SecretKey; import java.security.KeyPair; +import java.time.Instant; +import java.util.ArrayList; import java.util.Base64; +import java.util.List; import java.util.UUID; @Component @@ -48,13 +52,7 @@ public String createNewWallet(String userId, String walletName, String pin, KeyP String walletId = UUID.randomUUID().toString(); Wallet newWallet = new Wallet(); newWallet.setId(walletId); - newWallet.setName(walletName); newWallet.setUserId(userId); - KeyMetadata keyMetadata = new KeyMetadata(); - keyMetadata.setAlgorithmName(keyPair.getPublic().getAlgorithm()); - newWallet.setKeyMetadata(keyMetadata); - newWallet.setPublicKey(Base64.getEncoder().encodeToString(keyPair.getPublic().getEncoded())); - newWallet.setSecretKey(encryptedPrivateKey); // Encrypt the encryption key using the user's PIN before storing into database CryptoWithPinRequestDto requestDto = new CryptoWithPinRequestDto(); @@ -63,14 +61,40 @@ public String createNewWallet(String userId, String walletName, String pin, KeyP requestDto.setData(dataAsString); String encryptedWalletKey = cryptomanagerService.encryptWithPin(requestDto).getData(); - newWallet.setWalletKey(encryptedWalletKey); + // Set wallet metadata (encryption settings) WalletMetadata walletMetadata = new WalletMetadata(); walletMetadata.setEncryptionAlgo(encryptionAlgorithm); walletMetadata.setEncryptionType(encryptionType); + walletMetadata.setName(walletName); newWallet.setWalletMetadata(walletMetadata); - // Save wallet to database - walletRepository.save(newWallet); + // Set the wallet encryption key (encrypted wallet key) + newWallet.setWalletKey(encryptedWalletKey); + + // Create the WalletKey entity (this will hold the actual keys) + ProofSigningKey proofSigningKey = new ProofSigningKey(); + proofSigningKey.setId(UUID.randomUUID().toString()); // Generate a unique ID for the WalletKey + proofSigningKey.setPublicKey(Base64.getEncoder().encodeToString(keyPair.getPublic().getEncoded())); + proofSigningKey.setSecretKey(encryptedPrivateKey); // The private key is encrypted using the wallet's encryption key + + // Create and set the key metadata for the WalletKey + KeyMetadata keyMetadata = new KeyMetadata(); + keyMetadata.setAlgorithmName(keyPair.getPublic().getAlgorithm()); + proofSigningKey.setKeyMetadata(keyMetadata); // Associate the key metadata with the WalletKey + + // Associate the WalletKey with the Wallet + proofSigningKey.setWallet(newWallet); // Set the wallet for the key + proofSigningKey.setCreatedAt(Instant.now()); + proofSigningKey.setUpdatedAt(Instant.now()); + + // Add the WalletKey to the Wallet's list of keys + List proofSigningKeys = new ArrayList<>(); + proofSigningKeys.add(proofSigningKey); + newWallet.setProofSigningKeys(proofSigningKeys); + + // Save the wallet and its associated keys to the database + walletRepository.save(newWallet); // This will cascade and save the WalletKey as well + return walletId; } diff --git a/src/main/java/io/mosip/mimoto/util/WalletValidator.java b/src/main/java/io/mosip/mimoto/util/WalletValidator.java index f1bb848e8..66cb6e014 100644 --- a/src/main/java/io/mosip/mimoto/util/WalletValidator.java +++ b/src/main/java/io/mosip/mimoto/util/WalletValidator.java @@ -1,6 +1,7 @@ package io.mosip.mimoto.util; import io.mosip.mimoto.dto.WalletRequestDto; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.test.context.TestPropertySource; @@ -28,6 +29,8 @@ private void validateWalletName(String walletName) { public void validateWalletRequest(WalletRequestDto walletRequest) { // Validate both PIN and wallet name validatePin(walletRequest.getPin()); - validateWalletName(walletRequest.getName()); + if (!StringUtils.isEmpty(walletRequest.getName())) { + validateWalletName(walletRequest.getName()); + } } } From f07717c11680900bcdfc4f67731ab07470dd80b1 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Thu, 27 Mar 2025 17:16:02 +0530 Subject: [PATCH 474/860] injiweb-1392 fixed test cases for signing keys Signed-off-by: Gurpreet41082 --- src/test/java/io/mosip/mimoto/util/WalletUtilTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java b/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java index 66a98bf1d..a03dbe9e9 100644 --- a/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java +++ b/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java @@ -109,9 +109,9 @@ void createNewWallet_verifyWalletObject() throws Exception { assertEquals(walletId, savedWallet.getId()); assertEquals(userId, savedWallet.getUserId()); - assertEquals(keyPair.getPublic().getAlgorithm(), savedWallet.getKeyMetadata().getAlgorithmName()); - assertEquals(publicKeyBase64, savedWallet.getPublicKey()); - assertEquals(encryptedPrivateKey, savedWallet.getSecretKey()); + assertEquals(keyPair.getPublic().getAlgorithm(), savedWallet.getProofSigningKeys().get(0).getKeyMetadata().getAlgorithmName()); + assertEquals(publicKeyBase64, savedWallet.getProofSigningKeys().get(0).getPublicKey()); + assertEquals(encryptedPrivateKey, savedWallet.getProofSigningKeys().get(0).getSecretKey()); assertEquals(encryptedWalletKey, savedWallet.getWalletKey()); assertEquals(encryptionAlgorithm, savedWallet.getWalletMetadata().getEncryptionAlgo()); assertEquals(encryptionType, savedWallet.getWalletMetadata().getEncryptionType()); From 8627b0e24c2c64da6147cee474beddc70de1a715 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Thu, 27 Mar 2025 17:24:07 +0530 Subject: [PATCH 475/860] [INJIWEB-1370] write test cases for oauth2AuthenticationFailureHandler file Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- ...Auth2AuthenticationSuccessHandlerTest.java | 187 ++++++++++++++++++ .../security/oauth2/OAuth2LoginTests.java | 18 +- 2 files changed, 192 insertions(+), 13 deletions(-) create mode 100644 src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java diff --git a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java new file mode 100644 index 000000000..4ca7d8434 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java @@ -0,0 +1,187 @@ +package io.mosip.mimoto.security.oauth2; + +import io.mosip.mimoto.config.Config; +import io.mosip.mimoto.controller.UserController; +import io.mosip.mimoto.repository.UserMetadataRepository; +import io.mosip.mimoto.service.UserMetadataService; +import io.mosip.mimoto.service.WalletService; +import io.mosip.mimoto.util.EncryptionDecryptionUtil; +import io.mosip.mimoto.util.WalletValidator; +import lombok.extern.slf4j.Slf4j; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.annotation.Import; +import org.springframework.dao.DataAccessResourceFailureException; +import org.springframework.mock.web.MockHttpSession; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.oauth2.client.OAuth2AuthorizedClientService; +import org.springframework.security.oauth2.client.endpoint.OAuth2AccessTokenResponseClient; +import org.springframework.security.oauth2.client.endpoint.OAuth2AuthorizationCodeGrantRequest; +import org.springframework.security.oauth2.client.registration.ClientRegistration; +import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository; +import org.springframework.security.oauth2.client.userinfo.OAuth2UserRequest; +import org.springframework.security.oauth2.client.userinfo.OAuth2UserService; +import org.springframework.security.oauth2.client.web.HttpSessionOAuth2AuthorizationRequestRepository; +import org.springframework.security.oauth2.core.AuthorizationGrantType; +import org.springframework.security.oauth2.core.OAuth2AccessToken; +import org.springframework.security.oauth2.core.endpoint.OAuth2AccessTokenResponse; +import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationRequest; +import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames; +import org.springframework.security.oauth2.core.user.DefaultOAuth2User; +import org.springframework.security.oauth2.core.user.OAuth2User; +import org.springframework.session.SessionRepository; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import java.util.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +@RunWith(SpringRunner.class) +@ContextConfiguration(classes = Config.class) +@WebMvcTest(Config.class) +@AutoConfigureMockMvc +@Import({UserController.class, OAuth2AuthenticationSuccessHandler.class}) +@Slf4j +public class OAuth2AuthenticationSuccessHandlerTest { + @Autowired + private MockMvc mockMvc; + @MockBean + private OAuth2AccessTokenResponseClient accessTokenResponseClient; + + @MockBean + private OAuth2AuthenticationFailureHandler oAuth2AuthenticationFailureHandler; + + @MockBean + private SessionRepository sessionRepository; + + @MockBean + private UserMetadataRepository userMetadataRepository; + + @MockBean + private EncryptionDecryptionUtil encryptionDecryptionUtil; + + @MockBean + private WalletService walletService; + + @MockBean + private WalletValidator walletValidator; + + @MockBean + private OAuth2AuthorizedClientService oAuth2AuthorizedClientService; + + @MockBean + private ClientRegistrationRepository clientRegistrationRepository; + + @MockBean + private OAuth2UserService oauth2UserService; + + @MockBean + private UserMetadataService userMetadataService; + + private String providerSubjectId, identityProvider, displayName, profilePictureUrl, email, userId; + + MockHttpSession mockSession; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + providerSubjectId = "123456789"; + identityProvider = "google"; + displayName = "user_123"; + profilePictureUrl = "https://example.com/profile.jpg"; + email = "user.123@example.com"; + userId = UUID.randomUUID().toString(); + + ClientRegistration googleClient = ClientRegistration.withRegistrationId("google") + .clientId("test-client-id") + .clientSecret("test-client-secret") + .authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE) + .redirectUri("https://injiweb.dev1.mosip.net/login/oauth2/callback/google") + .tokenUri("https://oauth2.googleapis.com/token") + .authorizationUri("https://accounts.google.com/o/oauth2/auth") + .userInfoUri("https://www.googleapis.com/oauth2/v3/userinfo") + .clientName("Google") + .build(); + + when(clientRegistrationRepository.findByRegistrationId("google")).thenReturn(googleClient); + + OAuth2AuthorizationCodeGrantRequest grantRequest = Mockito.any(); + OAuth2AccessTokenResponse tokenResponse = OAuth2AccessTokenResponse.withToken("mock-access-token") + .tokenType(OAuth2AccessToken.TokenType.BEARER) + .expiresIn(3600) + .build(); + + when(accessTokenResponseClient.getTokenResponse(grantRequest)).thenReturn(tokenResponse); + OAuth2User mockOAuth2User = new DefaultOAuth2User( + Collections.singleton(new SimpleGrantedAuthority("ROLE_USER")), + Map.of( + "sub", providerSubjectId, + "name", displayName, + "email", email, + "picture", profilePictureUrl + ), + "sub" + ); + when(oauth2UserService.loadUser(any(OAuth2UserRequest.class))) + .thenReturn(mockOAuth2User); + + OAuth2AuthorizationRequest authRequest = OAuth2AuthorizationRequest.authorizationCode() + .authorizationUri("https://accounts.google.com/o/oauth2/auth") + .clientId("test-client-id") + .redirectUri("https://yourapp.com/oauth2/callback/google") + .scopes(Collections.singleton("profile")) + .state("test-state") + .attributes(Map.of(OAuth2ParameterNames.REGISTRATION_ID, "google")) + .build(); + + mockSession = new MockHttpSession(); + mockSession.setAttribute(HttpSessionOAuth2AuthorizationRequestRepository.class.getName() + ".AUTHORIZATION_REQUEST", authRequest); + } + + @Test + public void shouldReturnRedirectUrlWithSuccessStatusQueryParamIfLoginIsSuccessful() throws Exception { + mockMvc.perform(get("/oauth2/callback/google") + .session(mockSession) + .param("code", "test-authorization-code") + .param("state", "test-state")) + .andExpect(status().is3xxRedirection()) + .andExpect(redirectedUrl("https://injiweb.dev1.mosip.net/login?status=success")); + } + + @Test + public void shouldSendCustomErrorInRedirectUrlWhenLoginIsSuccessfulButAnErrorOccurredInAuthenticationSuccessHandler() throws Exception { + when(userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, + email)).thenThrow(new RuntimeException("Failed to store the user metadata")); + + mockMvc.perform(get("/oauth2/callback/google") + .session(mockSession) + .param("code", "test-authorization-code") + .param("state", "test-state")) + .andExpect(status().is3xxRedirection()) + .andExpect(redirectedUrl("https://injiweb.dev1.mosip.net/login?status=error&error_code=RESIDENT-APP-048&error_message=Failed+to+store+the+User+metadata+into+database")); + } + + @Test + public void shouldSendCustomErrorInRedirectUrlWhenLoginIsSuccessfulButDatabaseIsNotConnectedToStoreUserData() throws Exception { + when(userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, + email)).thenThrow(new DataAccessResourceFailureException("Failed to connect to the database")); + + mockMvc.perform(get("/oauth2/callback/google") + .session(mockSession) + .param("code", "test-authorization-code") + .param("state", "test-state")) + .andExpect(status().is3xxRedirection()) + .andExpect(redirectedUrl("https://injiweb.dev1.mosip.net/login?status=error&error_code=RESIDENT-APP-047&error_message=Failed+to+connect+to+the+shared+database")); + } +} + diff --git a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java index 892540dae..017f15976 100644 --- a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java +++ b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java @@ -4,7 +4,6 @@ import io.mosip.mimoto.controller.UserController; import io.mosip.mimoto.dbentity.UserMetadata; import io.mosip.mimoto.repository.UserMetadataRepository; -import io.mosip.mimoto.service.UserMetadataService; import io.mosip.mimoto.service.WalletService; import io.mosip.mimoto.util.EncryptionDecryptionUtil; import io.mosip.mimoto.util.WalletValidator; @@ -64,7 +63,7 @@ public class OAuth2LoginTests { @Autowired private MockMvc mockMvc; - @Autowired + @MockBean private OAuth2AuthenticationSuccessHandler oAuth2AuthenticationSuccessHandler; @Autowired @@ -88,9 +87,6 @@ public class OAuth2LoginTests { @MockBean private SessionRepository sessionRepository; - @MockBean - private UserMetadataService userMetadataService; - @MockBean private OAuth2AuthorizedClientService oAuth2AuthorizedClientService; @@ -140,7 +136,7 @@ public void setUp() { public void shouldBeRedirectedToRedirectEndpointOnUnauthenticatedAccessToProtectedEndpoint() throws Exception { mockMvc.perform(get("/users/me")) .andExpect(status().is3xxRedirection()) - .andExpect(redirectedUrl(injiWebUrl+"/login")); + .andExpect(redirectedUrl(injiWebUrl + "/login")); } @Test @@ -223,14 +219,12 @@ public void shouldSendTheCustomErrorInRedirectUrlWhenUserDeniesConsentDuringLogi .attributes(Map.of(OAuth2ParameterNames.REGISTRATION_ID, "google")) .build(); - // Store in session under the expected key mockSession.setAttribute(HttpSessionOAuth2AuthorizationRequestRepository.class.getName() + ".AUTHORIZATION_REQUEST", authRequest); mockMvc.perform(get("/oauth2/callback/google") .session(mockSession) .param("error", "access_denied") // Simulating the user clicking "Deny or Cancel" button in the consent - .param("state", "test-state") - .param("registration_id", "google")) + .param("state", "test-state")) .andExpect(status().is3xxRedirection()) .andExpect(redirectedUrl("https://injiweb.dev1.mosip.net/login?status=error&error_message=Consent+was+denied+to+share+the+details+with+the+application.+Please+give+consent+and+try+again")); } @@ -246,15 +240,13 @@ public void shouldThrowTheCustomErrorInRedirectUrlWhenAnyExceptionOccurredDuring .state("test-state") .build(); - // Store in session under the expected key mockSession.setAttribute(HttpSessionOAuth2AuthorizationRequestRepository.class.getName() + ".AUTHORIZATION_REQUEST", authRequest); mockMvc.perform(get("/oauth2/callback/google") .session(mockSession) .param("error", "access_denied") - .param("state", "test-state") - .param("registration_id", "google")) + .param("state", "test-state")) .andExpect(status().is3xxRedirection()) - .andExpect(redirectedUrl(injiWebUrl+"/login?status=error&error_message=Login+is+failed+due+to+%3A+%5Bclient_registration_not_found%5D+Client+Registration+not+found+with+Id%3A+null")); + .andExpect(redirectedUrl(injiWebUrl + "/login?status=error&error_message=Login+is+failed+due+to+%3A+%5Bclient_registration_not_found%5D+Client+Registration+not+found+with+Id%3A+null")); } } \ No newline at end of file From f0afd5ec05f9ed7223e5c78c69cc693fed7c5dfe Mon Sep 17 00:00:00 2001 From: Rakshithb1 Date: Thu, 27 Mar 2025 17:53:14 +0530 Subject: [PATCH 476/860] [MOSIP-40792] inji restructure Signed-off-by: Rakshithb1 --- deploy/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/deploy/README.md b/deploy/README.md index 6358a0af4..7d113871f 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -26,10 +26,10 @@ ### Install Pre-requisites * `global` configmap: For inji K8's env, `global` configmap in `default` namespace contains Domain related information. Follow below steps to add domain details for `global` configmap. - * Copy `global-cm.yaml.sample` to `global-cm.yaml`. - * Update the domain names in `global-cm.yaml` correctly for your environment. + * Copy `inji-global-cm.yaml.sample` to `inji-global-cm.yaml`. + * Update the domain names in `inji-global-cm.yaml` correctly for your environment. ```` - kubectl -n default apply -f global-cm.yaml + kubectl -n default apply -f inji-global-cm.yaml ```` * Install minio * Execute minio install script From 6b07bc0a999bb674154f90bc7575b30823358d57 Mon Sep 17 00:00:00 2001 From: Rakshithb1 Date: Thu, 27 Mar 2025 21:56:06 +0530 Subject: [PATCH 477/860] [MOSIP-40792] inji restructure Signed-off-by: Rakshithb1 --- deploy/README.md | 20 ++++++++----- deploy/artifactory/install.sh | 2 +- deploy/config-server/README.md | 24 +++++++++++++-- deploy/config-server/delete.sh | 4 +-- deploy/config-server/install.sh | 2 ++ deploy/config-server/values.yaml | 51 ++++++++++++++++++-------------- deploy/mimoto/install.sh | 4 +-- 7 files changed, 70 insertions(+), 37 deletions(-) diff --git a/deploy/README.md b/deploy/README.md index 7d113871f..7160550fa 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -45,31 +45,37 @@ ### Install artifactory ``` - cd artifactory + cd ../artifactory ./install.sh - ``` + ``` +### Install artifactory + + ``` + cd ../conf-secrets + ./install.sh + ``` ### Install config server * Execute config-server install script ``` - cd config-server + cd ../config-server ./install.sh ``` * Review values.yaml and make sure git repository parameters are as per your installation. -### install Onboarder +### Install Onboarder * Execute Onboarder install script ``` - cd partner-onboarder + cd ../partner-onboarder ./install.sh ``` * During the execution of the `install.sh` script, a prompt appears requesting information for the S3 bucket, including its name and URL. * Once the job is completed, log in to S3 / NFS and check the reports. There should not be any failures. -### install mimoto +### Install mimoto * Execute mimoto install script ``` - cd mimoto + cd ../mimoto ./install.sh ``` * During the execution of the `install.sh` script, a prompt appears requesting information regarding the presence of a public domain and a valid SSL certificate on the server. diff --git a/deploy/artifactory/install.sh b/deploy/artifactory/install.sh index 9c41154a1..0c9271c44 100644 --- a/deploy/artifactory/install.sh +++ b/deploy/artifactory/install.sh @@ -18,7 +18,7 @@ function installing_artifactory() { helm repo update echo Installing artifactory - helm -n $NS install artifactory mosip/artifactory --version $CHART_VERSION + helm -n $NS install artifactory mosip/artifactory --set image.repository=mosipid/artifactory-server --set image.tag=0.10.0-INJI --version $CHART_VERSION kubectl -n $NS get deploy -o name | xargs -n1 -t kubectl -n $NS rollout status diff --git a/deploy/config-server/README.md b/deploy/config-server/README.md index a6ced3571..fd784869b 100755 --- a/deploy/config-server/README.md +++ b/deploy/config-server/README.md @@ -1,11 +1,31 @@ # Config server ## Introduction -Config server serves all properties required by Inji modules. This must be installed before any other Inji modules. +Config server serves all properties required by MOSIP modules. This must be installed before any other MOSIP modules. + +## Pre-requisites +* `conf-secrets` MOSIP module. ## Install * Review `values.yaml` and make sure git repository parameters are as per your installation. * Install ```sh ./install.sh -``` \ No newline at end of file +``` + +## Delete +* To delete config-server. +```sh +./delete.sh +``` + +## Enable config-server to pull configurations from local git repository. + +Enable Config-server to Pull Configurations from Local Repository: +* While running the install script the user will be prompted to decide whether the config-server should pull configurations from a local repository (NFS). +* If the user choose to use local git repository then the user will be asked to provide the NFS path(Dir where local repository is cloned) and the NFS server IP. +* If the user choose to not to pull configurations from a local repository (NFS) then the configurations will be pulled from remote repository which is defined in values.yaml file. + +Note: +* Before choosing to pull configurations from a local repository (NFS) the user must clone the config-server repository manually into the nfs server where the configurations can be maintained. +* And checkout to the specific branch from where the configurations need to be taken. diff --git a/deploy/config-server/delete.sh b/deploy/config-server/delete.sh index f10a7bd8b..a2f939c5b 100755 --- a/deploy/config-server/delete.sh +++ b/deploy/config-server/delete.sh @@ -12,8 +12,8 @@ function config_server() { read -p "Are you sure you want to delete config-server helm charts?(Y/n) " yn if [ $yn = "Y" ] then - kubectl -n $NS delete configmap global keycloak-host - kubectl -n $NS delete secret db-common-secrets keycloak keycloak-client-secrets + kubectl -n $NS delete configmap global s3 + kubectl -n $NS delete secret conf-secrets-various s3 helm -n $NS delete config-server break else diff --git a/deploy/config-server/install.sh b/deploy/config-server/install.sh index 55d082660..0769ed8c8 100755 --- a/deploy/config-server/install.sh +++ b/deploy/config-server/install.sh @@ -26,10 +26,12 @@ CHART_VERSION=0.0.2-develop echo Copy configmaps COPY_UTIL=../copy_cm_func.sh $COPY_UTIL configmap global default $NS + $COPY_UTIL configmap s3 s3 $NS echo Copy secrets #$COPY_UTIL secret db-common-secrets postgres $NS $COPY_UTIL secret conf-secrets-various conf-secrets $NS + $COPY_UTIL secret s3 s3 $NS echo Installing config-server helm -n $NS install config-server mosip/config-server -f values.yaml --wait --version $CHART_VERSION diff --git a/deploy/config-server/values.yaml b/deploy/config-server/values.yaml index 193ff1172..e18ffca95 100755 --- a/deploy/config-server/values.yaml +++ b/deploy/config-server/values.yaml @@ -1,6 +1,6 @@ gitRepo: uri: https://github.com/mosip/inji-config - version: develop + version: injistack ## Folders within the base repo where properties may be found. searchFolders: "" private: false @@ -8,6 +8,18 @@ gitRepo: username: "" token: "" +spring_profiles: + enabled: true + spring_compositeRepos: + # Based on the user requiremnt the number of multiple sources from where configuration needs to be pulled can be updated below as mentioned. + - type: git + uri: https://github.com/mosip/inji-config + version: injistack + spring_cloud_config_server_git_cloneOnStart: true + spring_cloud_config_server_git_force_pull: true + spring_cloud_config_server_git_refreshRate: 5 + spring_fail_on_composite_error: false + envVariables: - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_API_PUBLIC_HOST valueFrom: @@ -30,26 +42,6 @@ envVariables: name: conf-secrets-various enabled: true - - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MPARTNER_DEFAULT_MOBILE_SECRET - value: WXFvqo48eLCSBpRa - enabled: true - - - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_KEYCLOAK_INTERNAL_URL - value: http://keycloak.keycloak - enabled: true - - - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_KEYCLOAK_EXTERNAL_URL - value: https://iam.sanbox.mosip.net - enabled: true - - - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_KEYCLOAK_INTERNAL_HOST - value: keycloak.keycloak - enabled: true - - - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_KEYCLOAK_EXTERNAL_HOST - value: iam.sanbox.mosip.net - enabled: true - - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_DB_DBUSER_PASSWORD valueFrom: secretKeyRef: @@ -92,7 +84,6 @@ envVariables: name: global enabled: false - - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_INJIWEB_HOST valueFrom: configMapKeyRef: @@ -106,3 +97,19 @@ envVariables: key: mosip-injiverify-host name: global enabled: true + +extraEnvVars: + - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MPARTNER_DEFAULT_MOBILE_SECRET + value: WXFvqo48eLCSBpRa + + - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_KEYCLOAK_INTERNAL_URL + value: http://keycloak.keycloak + + - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_KEYCLOAK_EXTERNAL_URL + value: https://iam.sanbox.mosip.net + + - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_KEYCLOAK_INTERNAL_HOST + value: keycloak.keycloak + + - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_KEYCLOAK_EXTERNAL_HOST + value: iam.sanbox.mosip.net diff --git a/deploy/mimoto/install.sh b/deploy/mimoto/install.sh index 6fb8e64dc..77e211a41 100755 --- a/deploy/mimoto/install.sh +++ b/deploy/mimoto/install.sh @@ -24,8 +24,6 @@ function installing_mimoto() { $COPY_UTIL configmap artifactory-share artifactory $NS $COPY_UTIL configmap config-server-share config-server $NS - echo Copy Secrets - $COPY_UTIL secret keycloak-client-secrets keycloak $NS echo "Do you have public domain & valid SSL? (Y/n) " echo "Y: if you have public domain & valid ssl certificate" @@ -52,7 +50,7 @@ function installing_mimoto() { kubectl -n config-server set env --keys=mimoto-oidc-partner-clientid --from secret/mimoto-oidc-partner-clientid deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ kubectl -n config-server set env --keys=mimoto-oidc-keystore-password --from secret/mimoto-oidc-keystore-password deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ - kubectl -n config-server get deploy -o name | xargs -n1 -t kubectl -n config-server rollout status + # kubectl -n config-server get deploy -o name | xargs -n1 -t kubectl -n config-server rollout status echo "Please share relevant google client id " read -p "" clientId From fa31abb6d7864b79dbb91144245c05c50fff509a Mon Sep 17 00:00:00 2001 From: Rakshithb1 Date: Thu, 27 Mar 2025 22:08:33 +0530 Subject: [PATCH 478/860] [MOSIP-40792] inji restructure Signed-off-by: Rakshithb1 --- deploy/config-server/README.md | 2 +- deploy/config-server/values.yaml | 4 ++-- partner-onboarder/copy_cm.sh | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/deploy/config-server/README.md b/deploy/config-server/README.md index fd784869b..0f84016d9 100755 --- a/deploy/config-server/README.md +++ b/deploy/config-server/README.md @@ -1,7 +1,7 @@ # Config server ## Introduction -Config server serves all properties required by MOSIP modules. This must be installed before any other MOSIP modules. +Config server serves all properties required by Inji modules. This must be installed before any other MOSIP modules. ## Pre-requisites * `conf-secrets` MOSIP module. diff --git a/deploy/config-server/values.yaml b/deploy/config-server/values.yaml index e18ffca95..2d9f10c93 100755 --- a/deploy/config-server/values.yaml +++ b/deploy/config-server/values.yaml @@ -1,6 +1,6 @@ gitRepo: uri: https://github.com/mosip/inji-config - version: injistack + version: develop ## Folders within the base repo where properties may be found. searchFolders: "" private: false @@ -14,7 +14,7 @@ spring_profiles: # Based on the user requiremnt the number of multiple sources from where configuration needs to be pulled can be updated below as mentioned. - type: git uri: https://github.com/mosip/inji-config - version: injistack + version: develop spring_cloud_config_server_git_cloneOnStart: true spring_cloud_config_server_git_force_pull: true spring_cloud_config_server_git_refreshRate: 5 diff --git a/partner-onboarder/copy_cm.sh b/partner-onboarder/copy_cm.sh index fc5e2a912..8070b2c88 100755 --- a/partner-onboarder/copy_cm.sh +++ b/partner-onboarder/copy_cm.sh @@ -5,6 +5,6 @@ COPY_UTIL=./copy_cm_func.sh DST_NS=injiweb -$COPY_UTIL configmap inji-global default $DST_NS +$COPY_UTIL configmap global default $DST_NS $COPY_UTIL configmap keycloak-env-vars keycloak $DST_NS $COPY_UTIL configmap keycloak-host keycloak $DST_NS From 6432ea15884d83f5defad36f953208e749e36f56 Mon Sep 17 00:00:00 2001 From: Abhi Date: Fri, 28 Mar 2025 16:48:04 +0530 Subject: [PATCH 479/860] [MOSIP-39715] Updated db_scripts for mimoto Signed-off-by: Abhi --- db_scripts/copy_cm_func.sh | 31 +++++++++++++ db_scripts/init_db.sh | 41 ++++++++++++++++++ db_scripts/init_values.yaml | 15 +++++++ db_scripts/{ => inji_mimoto}/db.sql | 0 db_scripts/{ => inji_mimoto}/ddl.sql | 1 + ...keys.sql => mimoto-proof_signing_keys.sql} | 0 db_scripts/inji_mimoto/deploy.properties | 6 +++ db_scripts/inji_mimoto/deploy.sh | 43 +++++++++++++++++++ db_scripts/{ => inji_mimoto}/dml.sql | 0 db_scripts/{ => inji_mimoto}/drop_db.sql | 0 db_scripts/{ => inji_mimoto}/drop_role.sql | 0 db_scripts/{ => inji_mimoto}/grants.sql | 0 db_scripts/{ => inji_mimoto}/role_dbuser.sql | 0 13 files changed, 137 insertions(+) create mode 100755 db_scripts/copy_cm_func.sh create mode 100755 db_scripts/init_db.sh create mode 100644 db_scripts/init_values.yaml rename db_scripts/{ => inji_mimoto}/db.sql (100%) rename db_scripts/{ => inji_mimoto}/ddl.sql (86%) rename db_scripts/inji_mimoto/ddl/{mimoto-wallet_keys.sql => mimoto-proof_signing_keys.sql} (100%) create mode 100644 db_scripts/inji_mimoto/deploy.properties create mode 100755 db_scripts/inji_mimoto/deploy.sh rename db_scripts/{ => inji_mimoto}/dml.sql (100%) rename db_scripts/{ => inji_mimoto}/drop_db.sql (100%) rename db_scripts/{ => inji_mimoto}/drop_role.sql (100%) rename db_scripts/{ => inji_mimoto}/grants.sql (100%) rename db_scripts/{ => inji_mimoto}/role_dbuser.sql (100%) diff --git a/db_scripts/copy_cm_func.sh b/db_scripts/copy_cm_func.sh new file mode 100755 index 000000000..691f1dbf5 --- /dev/null +++ b/db_scripts/copy_cm_func.sh @@ -0,0 +1,31 @@ +#!/bin/sh +# Copy configmap and secret from one namespace to another. +# ./copy_cm_func.sh [name] +# Parameters: +# resource: configmap|secret +# name: Optional new name of the configmap or secret in destination namespace. This may be needed if there is +# clash of names + +if [ $1 = "configmap" ] +then + RESOURCE=configmap +elif [ $1 = "secret" ] +then + RESOURCE=secret +else + echo "Incorrect resource $1. Exiting.." + exit 1 +fi + + +if [ $# -ge 5 ] +then + kubectl -n $4 delete --ignore-not-found=true $RESOURCE $5 + kubectl -n $3 get $RESOURCE $2 -o yaml | sed "s/namespace: $3/namespace: $4/g" | sed "s/name: $2/name: $5/g" | kubectl -n $4 create -f - +else + kubectl -n $4 delete --ignore-not-found=true $RESOURCE $2 + kubectl -n $3 get $RESOURCE $2 -o yaml | sed "s/namespace: $3/namespace: $4/g" | kubectl -n $4 create -f - +fi + + + diff --git a/db_scripts/init_db.sh b/db_scripts/init_db.sh new file mode 100755 index 000000000..410711b72 --- /dev/null +++ b/db_scripts/init_db.sh @@ -0,0 +1,41 @@ +#!/bin/sh +# Script to initialize mimoto DB. +## Usage: ./init_db.sh [kubeconfig] + +if [ $# -ge 1 ] ; then + export KUBECONFIG=$1 +fi + +NS=injiweb +CHART_VERSION=0.0.1-develop + +helm repo add mosip https://mosip.github.io/mosip-helm +helm repo update + +while true; do + read -p "CAUTION: Do we already have Postgres installed? Also make sure the mimoto DB is backed up as the same will be overriden. Do you still want to continue?" yn + if [ $yn = "Y" ] + then + DB_USER_PASSWORD=$( kubectl -n postgres get secrets db-common-secrets -o jsonpath={.data.db-dbuser-password} | base64 -d ) + + kubectl create ns $NS + + echo Removing existing inji_mimoto DB installation + helm -n $NS delete postgres-init-mimoto + + echo Copy Postgres secrets + ./copy_cm_func.sh secret postgres-postgresql postgres $NS + + echo Delete existing DB common sets + kubectl -n $NS delete secret db-common-secrets + + echo Initializing DB + helm -n $NS install postgres-init-mimoto mosip/postgres-init -f init_values.yaml \ + --version $CHART_VERSION \ + --set dbUserPasswords.dbuserPassword="$DB_USER_PASSWORD" \ + --wait --wait-for-jobs + break + else + break + fi +done \ No newline at end of file diff --git a/db_scripts/init_values.yaml b/db_scripts/init_values.yaml new file mode 100644 index 000000000..0bcb34b17 --- /dev/null +++ b/db_scripts/init_values.yaml @@ -0,0 +1,15 @@ +dbUserPasswords: + dbuserPassword: "" + +databases: + inji_mimoto: + enabled: true + host: "postgres-postgresql.postgres" + port: 5432 + su: + user: postgres + secret: + name: postgres-postgresql + key: postgres-password + dml: 1 + branch: develop \ No newline at end of file diff --git a/db_scripts/db.sql b/db_scripts/inji_mimoto/db.sql similarity index 100% rename from db_scripts/db.sql rename to db_scripts/inji_mimoto/db.sql diff --git a/db_scripts/ddl.sql b/db_scripts/inji_mimoto/ddl.sql similarity index 86% rename from db_scripts/ddl.sql rename to db_scripts/inji_mimoto/ddl.sql index cba20bd6a..8464f8043 100644 --- a/db_scripts/ddl.sql +++ b/db_scripts/inji_mimoto/ddl.sql @@ -6,4 +6,5 @@ \ir ddl/mimoto-ca_cert_store.sql \ir ddl/mimoto-user_metadata.sql \ir ddl/mimoto-wallet.sql +\ir ddl/mimoto-proof_signing_keys.sql \ir ddl/mimoto-verifiable_credentials.sql diff --git a/db_scripts/inji_mimoto/ddl/mimoto-wallet_keys.sql b/db_scripts/inji_mimoto/ddl/mimoto-proof_signing_keys.sql similarity index 100% rename from db_scripts/inji_mimoto/ddl/mimoto-wallet_keys.sql rename to db_scripts/inji_mimoto/ddl/mimoto-proof_signing_keys.sql diff --git a/db_scripts/inji_mimoto/deploy.properties b/db_scripts/inji_mimoto/deploy.properties new file mode 100644 index 000000000..1c60735db --- /dev/null +++ b/db_scripts/inji_mimoto/deploy.properties @@ -0,0 +1,6 @@ +DB_SERVERIP= +DB_PORT=5432 +SU_USER=postgres +DEFAULT_DB_NAME=postgres +MOSIP_DB_NAME=inji_mimoto +DML_FLAG=1 \ No newline at end of file diff --git a/db_scripts/inji_mimoto/deploy.sh b/db_scripts/inji_mimoto/deploy.sh new file mode 100755 index 000000000..2ea7f8274 --- /dev/null +++ b/db_scripts/inji_mimoto/deploy.sh @@ -0,0 +1,43 @@ + +## Properties file +set -e +properties_file="$1" +echo `date "+%m/%d/%Y %H:%M:%S"` ": $properties_file" +if [ -f "$properties_file" ] +then + echo `date "+%m/%d/%Y %H:%M:%S"` ": Property file \"$properties_file\" found." + while IFS='=' read -r key value + do + key=$(echo $key | tr '.' '_') + eval ${key}=\${value} + done < "$properties_file" +else + echo `date "+%m/%d/%Y %H:%M:%S"` ": Property file not found, Pass property file name as argument." +fi + +## Terminate existing connections +echo "Terminating active connections" +CONN=$(PGPASSWORD=$SU_USER_PWD psql -v ON_ERROR_STOP=1 --username=$SU_USER --host=$DB_SERVERIP --port=$DB_PORT --dbname=$DEFAULT_DB_NAME -t -c "SELECT count(pg_terminate_backend(pg_stat_activity.pid)) FROM pg_stat_activity WHERE datname = '$MOSIP_DB_NAME' AND pid <> pg_backend_pid()";exit;) +echo "Terminated connections" + +## Drop db and role +PGPASSWORD=$SU_USER_PWD psql -v ON_ERROR_STOP=1 --username=$SU_USER --host=$DB_SERVERIP --port=$DB_PORT --dbname=$DEFAULT_DB_NAME -f drop_db.sql +PGPASSWORD=$SU_USER_PWD psql -v ON_ERROR_STOP=1 --username=$SU_USER --host=$DB_SERVERIP --port=$DB_PORT --dbname=$DEFAULT_DB_NAME -f drop_role.sql + +## Create users +echo `date "+%m/%d/%Y %H:%M:%S"` ": Creating database users" | tee +PGPASSWORD=$SU_USER_PWD psql -v ON_ERROR_STOP=1 --username=$SU_USER --host=$DB_SERVERIP --port=$DB_PORT --dbname=$DEFAULT_DB_NAME -f role_dbuser.sql -v dbuserpwd=\'$DBUSER_PWD\' + +## Create DB +PGPASSWORD=$SU_USER_PWD psql -v ON_ERROR_STOP=1 --username=$SU_USER --host=$DB_SERVERIP --port=$DB_PORT --dbname=$DEFAULT_DB_NAME -f db.sql +PGPASSWORD=$SU_USER_PWD psql -v ON_ERROR_STOP=1 --username=$SU_USER --host=$DB_SERVERIP --port=$DB_PORT --dbname=$DEFAULT_DB_NAME -f ddl.sql + +## Grants +PGPASSWORD=$SU_USER_PWD psql -v ON_ERROR_STOP=1 --username=$SU_USER --host=$DB_SERVERIP --port=$DB_PORT --dbname=$DEFAULT_DB_NAME -f grants.sql + +## Populate tables +if [ ${DML_FLAG} == 1 ] +then + echo `date "+%m/%d/%Y %H:%M:%S"` ": Deploying DML for ${MOSIP_DB_NAME} database" + PGPASSWORD=$SU_USER_PWD psql -v ON_ERROR_STOP=1 --username=$SU_USER --host=$DB_SERVERIP --port=$DB_PORT --dbname=$DEFAULT_DB_NAME -a -b -f dml.sql +fi \ No newline at end of file diff --git a/db_scripts/dml.sql b/db_scripts/inji_mimoto/dml.sql similarity index 100% rename from db_scripts/dml.sql rename to db_scripts/inji_mimoto/dml.sql diff --git a/db_scripts/drop_db.sql b/db_scripts/inji_mimoto/drop_db.sql similarity index 100% rename from db_scripts/drop_db.sql rename to db_scripts/inji_mimoto/drop_db.sql diff --git a/db_scripts/drop_role.sql b/db_scripts/inji_mimoto/drop_role.sql similarity index 100% rename from db_scripts/drop_role.sql rename to db_scripts/inji_mimoto/drop_role.sql diff --git a/db_scripts/grants.sql b/db_scripts/inji_mimoto/grants.sql similarity index 100% rename from db_scripts/grants.sql rename to db_scripts/inji_mimoto/grants.sql diff --git a/db_scripts/role_dbuser.sql b/db_scripts/inji_mimoto/role_dbuser.sql similarity index 100% rename from db_scripts/role_dbuser.sql rename to db_scripts/inji_mimoto/role_dbuser.sql From d8e971aa5f8c81a876d0efc42e404ff98a160e24 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 31 Mar 2025 14:58:31 +0530 Subject: [PATCH 480/860] Updating read me for local database setup of mimoto (#665) * Updating read me for local database setup of mimoto Signed-off-by: Gurpreet41082 * Updated the local developer setup readme file Signed-off-by: Gurpreet41082 * Updated the database usage in the readme file Signed-off-by: Gurpreet41082 --------- Signed-off-by: Gurpreet41082 --- README.md | 29 ++++++++++++++++++++++------- db_scripts/README.md | 29 +++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 7 deletions(-) create mode 100644 db_scripts/README.md diff --git a/README.md b/README.md index 176be48e0..5980c1003 100644 --- a/README.md +++ b/README.md @@ -8,16 +8,31 @@ This repository contains source code for backend service of Inji Mobile and Inji ## Build & run (for developers) -The project requires JDK 21 +The project requires JDK 21, postgres, redis and google client credentials ### without docker-compose Build & install -1. build the jar -``` +1. Install pgadmin, redis and update application-local.properties file with values + ``` + spring.datasource.username= + spring.datasource.password= + spring.redis.password= + ``` +2. Create google client credentials from https://console.cloud.google.com/ and update below properties in application-local.properties + ``` + spring.security.oauth2.client.registration.google.client-id= + spring.security.oauth2.client.registration.google.client-secret= + ``` +3. Run the SQLs using /deploy.sh script. from [db_scripts folder](db_scripts/inji_mimoto) + ``` + ./deploy.sh deploy.properties + ``` +4. Build the jar + ``` mvn clean install -Dgpg.skip=true -Dmaven.javadoc.skip=true -DskipTests=true -``` -2. Run following command -``` + ``` +5. Run following command + ``` mvn spring-boot:run -Dspring.profiles.active=local -``` + ``` ### with docker-compose 1. To simplify running mimoto in local for developers we have added [Docker Compose Setup](docker-compose/README.md). This docker-compose includes mimoto service and nginx service to server static data. 2. Follow the below steps to use custom build image in docker-compose diff --git a/db_scripts/README.md b/db_scripts/README.md new file mode 100644 index 000000000..23fdf5e09 --- /dev/null +++ b/db_scripts/README.md @@ -0,0 +1,29 @@ +# Mimoto Database +Mimoto Database acts as a centralized data repository, ensuring that both Inji Mobile and Inji Web applications can access consistent and up-to-date information + +## Overview +This folder contains SQL scripts to create databases and tables in postgres. The table structure is described under the `/ddl/` folder. Default data populated in the tables can be found in the `/dml` folder. + +## Prerequisites +Before starting the installation, ensure the following: + +1. **Command line utilities**: + - `kubectl`: Kubernetes command-line tool. + - `helm`: Kubernetes package manager. + +2. **Helm Repositories**: + Add the required Helm repositories to your environment: + ```sh + helm repo add bitnami https://charts.bitnami.com/bitnami + helm repo add mosip https://mosip.github.io/mosip-helm +## Install in existing MOSIP K8 Cluster +These scripts are automatically run with below mentioned script in existing k8 cluster with Postgres installed. +### Install +* Set your kube_config file or kube_config variable on PC. +* Update `init_values.yaml` with db-common-password from the postgres namespace in the required field `dbUserPasswords.dbuserPassword` and ensure `databases.inji_mimoto` is enabled. + ``` + ./init_db.sh` + ``` + +## Install for developers +Developers may run the SQLs using `/deploy.sh` script. \ No newline at end of file From b8bf1ff0501f6aace9864c00f9de9b655c11f55b Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Tue, 1 Apr 2025 10:25:32 +0530 Subject: [PATCH 481/860] injiweb-1510 fixed urls of the api based on vishwa comment Signed-off-by: Gurpreet41082 --- .../mimoto/controller/SessionController.java | 41 ----- ...erController.java => UsersController.java} | 69 ++------- .../mimoto/controller/WalletsController.java | 73 +++++++++ .../io/mosip/mimoto/dto/WalletRequestDto.java | 4 +- .../mosip/mimoto/dto/WalletResponseDto.java | 11 ++ .../mimoto/dto/mimoto/UserMetadataDTO.java | 7 +- .../exception/PlatformErrorMessages.java | 3 +- .../OAuth2AuthenticationSuccessHandler.java | 5 + .../mosip/mimoto/service/WalletService.java | 4 +- .../service/impl/WalletServiceImpl.java | 9 +- .../io/mosip/mimoto/util/WalletValidator.java | 7 +- .../controller/SessionControllerTest.java | 67 -------- .../controller/UsersControllerTest.java | 145 ++++++++++++++++++ ...erTest.java => WalletsControllerTest.java} | 118 +++----------- ...Auth2AuthenticationSuccessHandlerTest.java | 4 +- .../security/oauth2/OAuth2LoginTests.java | 6 +- .../service/UserMetadataServiceTest.java | 15 +- .../mimoto/service/WalletServiceTest.java | 12 +- .../mimoto/util/WalletValidatorTest.java | 14 +- 19 files changed, 325 insertions(+), 289 deletions(-) delete mode 100644 src/main/java/io/mosip/mimoto/controller/SessionController.java rename src/main/java/io/mosip/mimoto/controller/{UserController.java => UsersController.java} (55%) create mode 100644 src/main/java/io/mosip/mimoto/controller/WalletsController.java create mode 100644 src/main/java/io/mosip/mimoto/dto/WalletResponseDto.java delete mode 100644 src/test/java/io/mosip/mimoto/controller/SessionControllerTest.java create mode 100644 src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java rename src/test/java/io/mosip/mimoto/controller/{UserControllerTest.java => WalletsControllerTest.java} (58%) diff --git a/src/main/java/io/mosip/mimoto/controller/SessionController.java b/src/main/java/io/mosip/mimoto/controller/SessionController.java deleted file mode 100644 index 6f9c6e715..000000000 --- a/src/main/java/io/mosip/mimoto/controller/SessionController.java +++ /dev/null @@ -1,41 +0,0 @@ -package io.mosip.mimoto.controller; - -import io.mosip.mimoto.exception.LoginSessionException; -import io.mosip.mimoto.util.Utilities; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpSession; -import lombok.extern.slf4j.Slf4j; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import static io.mosip.mimoto.exception.PlatformErrorMessages.LOGIN_SESSION_EXCEPTION; - -@RestController -@RequestMapping("/session") -@Slf4j -public class SessionController { - @GetMapping("/status") - public ResponseEntity getSessionStatus(HttpServletRequest request) { - try { - HttpSession httpSession = request.getSession(false); - - if (httpSession == null || httpSession.getAttribute("userId") == null) { - throw new LoginSessionException(LOGIN_SESSION_EXCEPTION.getCode(), "The session is invalid or expired due to inactivity", HttpStatus.NOT_FOUND); - } - - return ResponseEntity.status(HttpStatus.OK).body("The session is valid and active"); - - } catch (LoginSessionException exception) { - log.error("Error occurred while retrieving session status: ", exception); - return Utilities.getErrorResponseEntityWithoutWrapper(exception, LOGIN_SESSION_EXCEPTION.getCode(), exception.getStatus(), null); - } catch (Exception exception) { - log.error("Error occurred while retrieving session status: ", exception); - return Utilities.getErrorResponseEntityWithoutWrapper(exception, LOGIN_SESSION_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR, null); - } - } -} - - diff --git a/src/main/java/io/mosip/mimoto/controller/UserController.java b/src/main/java/io/mosip/mimoto/controller/UsersController.java similarity index 55% rename from src/main/java/io/mosip/mimoto/controller/UserController.java rename to src/main/java/io/mosip/mimoto/controller/UsersController.java index 96446513b..79bdbfd74 100644 --- a/src/main/java/io/mosip/mimoto/controller/UserController.java +++ b/src/main/java/io/mosip/mimoto/controller/UsersController.java @@ -1,37 +1,29 @@ package io.mosip.mimoto.controller; -import io.mosip.mimoto.core.http.ResponseWrapper; import io.mosip.mimoto.dbentity.UserMetadata; import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; -import io.mosip.mimoto.dto.WalletRequestDto; +import io.mosip.mimoto.exception.LoginSessionException; import io.mosip.mimoto.exception.OAuth2AuthenticationException; import io.mosip.mimoto.repository.UserMetadataRepository; -import io.mosip.mimoto.service.WalletService; import io.mosip.mimoto.util.EncryptionDecryptionUtil; import io.mosip.mimoto.util.Utilities; -import io.mosip.mimoto.util.WalletValidator; import jakarta.servlet.http.HttpSession; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessResourceFailureException; -import org.springframework.security.core.Authentication; -import org.springframework.web.bind.annotation.*; import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.security.core.Authentication; -import org.springframework.web.bind.annotation.*; - -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import static io.mosip.mimoto.exception.PlatformErrorMessages.*; @Slf4j @RestController @RequestMapping(value = "/users/me") -public class UserController { +public class UsersController { @Autowired private UserMetadataRepository userMetadataRepository; @@ -39,13 +31,7 @@ public class UserController { @Autowired private EncryptionDecryptionUtil encryptionDecryptionUtill; - @Autowired - private WalletService walletService; - - @Autowired - private WalletValidator walletValidator; - - @GetMapping + @GetMapping("/db") public ResponseEntity getUserProfile(Authentication authentication, HttpSession session) { try { String identityProvider = (String) session.getAttribute("clientRegistrationId"); @@ -77,44 +63,19 @@ private UserMetadata fetchUserMetadata(String providerSubjectId, String identity .orElseThrow(() -> new OAuth2AuthenticationException(USER_METADATA_FETCH_EXCEPTION.getCode(), "User not found. Please check your credentials or register", HttpStatus.NOT_FOUND)); } - @PostMapping("/wallets") - public ResponseEntity createWallet(@RequestBody WalletRequestDto wallet, HttpSession httpSession) { + @GetMapping("/cache") + public ResponseEntity getUserProfileFromCache(Authentication authentication, HttpSession session) { try { - walletValidator.validateWalletRequest(wallet); - return ResponseEntity.status(HttpStatus.OK).body(walletService.createWallet((String) httpSession.getAttribute("userId"), wallet.getName(), wallet.getPin())); - } catch (IllegalArgumentException exception) { - log.error("Error occurred while creating user wallets : ", exception); - return Utilities.getErrorResponseEntityWithoutWrapper(exception, USER_WALLET_CREATION_EXCEPTION.getCode(), HttpStatus.BAD_REQUEST, MediaType.APPLICATION_JSON); + UserMetadataDTO userMetadataDTO = (UserMetadataDTO) session.getAttribute("userMetadata"); + if (userMetadataDTO == null) { + throw new LoginSessionException(USER_METADATA_CACHE_FETCH_EXCEPTION.getCode(), "No user metadata present in cache", HttpStatus.INTERNAL_SERVER_ERROR); + } + return ResponseEntity.status(HttpStatus.OK).body(userMetadataDTO); } catch (Exception exception) { - log.error("Error occurred while creating user wallets : ", exception); - return Utilities.getErrorResponseEntityWithoutWrapper(exception, USER_WALLET_CREATION_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR,MediaType.APPLICATION_JSON); + log.error("Error occurred while retrieving user profile from cache : ", exception); + return Utilities.getErrorResponseEntityWithoutWrapper(exception, USER_METADATA_CACHE_FETCH_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR, null); } - } - @GetMapping("/wallets") - public ResponseEntity> getWallets(HttpSession httpSession) { - try { - List list = new ArrayList<>(); - list.addAll(walletService.getWallets((String) httpSession.getAttribute("userId"))); - - return ResponseEntity.status(HttpStatus.OK).body(list); - } catch (Exception exception) { - log.error("Error occurred while retrieving user wallets : ", exception); - return Utilities.getErrorResponseEntityWithoutWrapper(exception, USER_WALLET_RETRIEVAL_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR,MediaType.APPLICATION_JSON); - } } - @PostMapping("/wallets/{walletId}") - public ResponseEntity getWallet(@PathVariable("walletId") String walletId, @RequestBody WalletRequestDto wallet, HttpSession httpSession) { - try { - // If wallet_key does not exist in the session, fetch it and set it in the session - String walletKey = walletService.getWalletKey((String) httpSession.getAttribute("userId"), walletId, wallet.getPin()); - httpSession.setAttribute("wallet_key", walletKey); - - return ResponseEntity.status(HttpStatus.OK).body(walletId); - } catch (Exception exception) { - log.error("Error occurred while retrieving user wallet ", exception); - return Utilities.getErrorResponseEntityWithoutWrapper(exception, USER_WALLET_RETRIEVAL_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR,MediaType.APPLICATION_JSON); - } - } } diff --git a/src/main/java/io/mosip/mimoto/controller/WalletsController.java b/src/main/java/io/mosip/mimoto/controller/WalletsController.java new file mode 100644 index 000000000..24cdeb96c --- /dev/null +++ b/src/main/java/io/mosip/mimoto/controller/WalletsController.java @@ -0,0 +1,73 @@ +package io.mosip.mimoto.controller; + +import io.mosip.mimoto.dto.WalletRequestDto; +import io.mosip.mimoto.dto.WalletResponseDto; +import io.mosip.mimoto.service.WalletService; +import io.mosip.mimoto.util.Utilities; +import io.mosip.mimoto.util.WalletValidator; +import jakarta.servlet.http.HttpSession; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +import static io.mosip.mimoto.exception.PlatformErrorMessages.USER_WALLET_CREATION_EXCEPTION; +import static io.mosip.mimoto.exception.PlatformErrorMessages.USER_WALLET_RETRIEVAL_EXCEPTION; + +@Slf4j +@RestController +@RequestMapping(value = "/wallets") +public class WalletsController { + + + @Autowired + private WalletService walletService; + + @Autowired + private WalletValidator walletValidator; + + @PostMapping + public ResponseEntity createWallet(@RequestBody WalletRequestDto wallet, HttpSession httpSession) { + try { + walletValidator.validateWalletRequest(wallet); + return ResponseEntity.status(HttpStatus.OK).body(walletService.createWallet((String) httpSession.getAttribute("userId"), wallet.getWalletName(), wallet.getWalletPin())); + } catch (IllegalArgumentException exception) { + log.error("Error occurred while creating user wallets : ", exception); + return Utilities.getErrorResponseEntityWithoutWrapper(exception, USER_WALLET_CREATION_EXCEPTION.getCode(), HttpStatus.BAD_REQUEST, MediaType.APPLICATION_JSON); + } catch (Exception exception) { + log.error("Error occurred while creating user wallets : ", exception); + return Utilities.getErrorResponseEntityWithoutWrapper(exception, USER_WALLET_CREATION_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR,MediaType.APPLICATION_JSON); + } + } + + + @GetMapping + public ResponseEntity> getWallets(HttpSession httpSession) { + try { + List response = walletService.getWallets((String) httpSession.getAttribute("userId")); + + return ResponseEntity.status(HttpStatus.OK).body(response); + } catch (Exception exception) { + log.error("Error occurred while retrieving user wallets : ", exception); + return Utilities.getErrorResponseEntityWithoutWrapper(exception, USER_WALLET_RETRIEVAL_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR,MediaType.APPLICATION_JSON); + } + } + + @PostMapping("/{walletId}/unlock") + public ResponseEntity unlockWallet(@PathVariable("walletId") String walletId, @RequestBody WalletRequestDto wallet, HttpSession httpSession) { + try { + // If wallet_key does not exist in the session, fetch it and set it in the session + String walletKey = walletService.getWalletKey((String) httpSession.getAttribute("userId"), walletId, wallet.getWalletPin()); + httpSession.setAttribute("wallet_key", walletKey); + WalletResponseDto response = new WalletResponseDto(walletId); + return ResponseEntity.status(HttpStatus.OK).body(response); + } catch (Exception exception) { + log.error("Error occurred while retrieving user wallet ", exception); + return Utilities.getErrorResponseEntityWithoutWrapper(exception, USER_WALLET_RETRIEVAL_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR,MediaType.APPLICATION_JSON); + } + } +} diff --git a/src/main/java/io/mosip/mimoto/dto/WalletRequestDto.java b/src/main/java/io/mosip/mimoto/dto/WalletRequestDto.java index 4dcbb0052..75ca74a2e 100644 --- a/src/main/java/io/mosip/mimoto/dto/WalletRequestDto.java +++ b/src/main/java/io/mosip/mimoto/dto/WalletRequestDto.java @@ -8,6 +8,6 @@ @ToString @ApiModel(description = "Model representing a user wallet request") public class WalletRequestDto { - String pin; - String name; + String walletPin; + String walletName; } diff --git a/src/main/java/io/mosip/mimoto/dto/WalletResponseDto.java b/src/main/java/io/mosip/mimoto/dto/WalletResponseDto.java new file mode 100644 index 000000000..7ebe7ac67 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/WalletResponseDto.java @@ -0,0 +1,11 @@ +package io.mosip.mimoto.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class WalletResponseDto { + String walletId; + +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/UserMetadataDTO.java b/src/main/java/io/mosip/mimoto/dto/mimoto/UserMetadataDTO.java index bfa0321fe..f4b42eea4 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/UserMetadataDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/UserMetadataDTO.java @@ -5,9 +5,14 @@ import lombok.AllArgsConstructor; import lombok.Data; +import java.io.Serializable; + @Data @AllArgsConstructor -public class UserMetadataDTO { +public class UserMetadataDTO implements Serializable { + + private static final long serialVersionUID = 1L; + @JsonProperty("display_name") @Schema(description = "Display name of the user provided by the Identity Provider") private String displayName; diff --git a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java index 88c8e7b15..6fd4ff091 100644 --- a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java +++ b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java @@ -98,7 +98,8 @@ public enum PlatformErrorMessages { USER_METADATA_STORAGE_EXCEPTION(PlatformConstants.PREFIX + "048", "Failed to store the User metadata into database"), USER_METADATA_FETCH_EXCEPTION(PlatformConstants.PREFIX + "049", "Failed to fetch the User metadata from database"), USER_WALLET_CREATION_EXCEPTION(PlatformConstants.PREFIX + "050", "Exception occurred when creating the wallet for user"), - USER_WALLET_RETRIEVAL_EXCEPTION(PlatformConstants.PREFIX + "051", "Exception occurred when creating the wallet for user"); + USER_WALLET_RETRIEVAL_EXCEPTION(PlatformConstants.PREFIX + "051", "Exception occurred when creating the wallet for user"), + USER_METADATA_CACHE_FETCH_EXCEPTION(PlatformConstants.PREFIX + "052", "Failed to fetch the User metadata from cache"); /** The error message. */ private final String errorMessage; diff --git a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java index 9dd26cd7b..ca6589f95 100644 --- a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java +++ b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.security.oauth2; +import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; import io.mosip.mimoto.service.UserMetadataService; import jakarta.servlet.http.HttpSession; import lombok.extern.slf4j.Slf4j; @@ -56,6 +57,10 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo // Call the service to update or insert the user metadata in the database try { String userId = userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); + UserMetadataDTO userMetadataDTO = new UserMetadataDTO(displayName, + profilePictureUrl, + email); + session.setAttribute("userMetadata", userMetadataDTO); session.setAttribute("userId", userId); response.sendRedirect(injiWebUrl + "/login?status=success"); } catch (DataAccessResourceFailureException exception) { diff --git a/src/main/java/io/mosip/mimoto/service/WalletService.java b/src/main/java/io/mosip/mimoto/service/WalletService.java index 4dcc34707..3e3655d18 100644 --- a/src/main/java/io/mosip/mimoto/service/WalletService.java +++ b/src/main/java/io/mosip/mimoto/service/WalletService.java @@ -1,5 +1,7 @@ package io.mosip.mimoto.service; +import io.mosip.mimoto.dto.WalletResponseDto; + import java.security.NoSuchAlgorithmException; import java.util.List; import java.util.UUID; @@ -9,5 +11,5 @@ public interface WalletService { String getWalletKey(String userId, String walletId, String pin); - List getWallets(String userId); + List getWallets(String userId); } diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java index d6c41bacd..a9f013c55 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java @@ -1,6 +1,7 @@ package io.mosip.mimoto.service.impl; import io.mosip.mimoto.dbentity.Wallet; +import io.mosip.mimoto.dto.WalletResponseDto; import io.mosip.mimoto.repository.WalletRepository; import io.mosip.mimoto.service.WalletService; import io.mosip.mimoto.util.WalletUtil; @@ -12,6 +13,7 @@ import java.util.List; import java.util.Optional; import java.util.UUID; +import java.util.stream.Collectors; @Slf4j @@ -37,7 +39,10 @@ public String getWalletKey(String userId, String walletId, String pin) { } @Override - public List getWallets(String userId) { - return walletRepository.findWalletIdByUserId(userId); + public List getWallets(String userId) { + List walletIds = walletRepository.findWalletIdByUserId(userId); + return walletIds.stream() + .map(walletId -> new WalletResponseDto(walletId)) + .collect(Collectors.toList()); } } diff --git a/src/main/java/io/mosip/mimoto/util/WalletValidator.java b/src/main/java/io/mosip/mimoto/util/WalletValidator.java index 66cb6e014..878c48ed2 100644 --- a/src/main/java/io/mosip/mimoto/util/WalletValidator.java +++ b/src/main/java/io/mosip/mimoto/util/WalletValidator.java @@ -4,7 +4,6 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; -import org.springframework.test.context.TestPropertySource; @Component public class WalletValidator { @@ -28,9 +27,9 @@ private void validateWalletName(String walletName) { } public void validateWalletRequest(WalletRequestDto walletRequest) { // Validate both PIN and wallet name - validatePin(walletRequest.getPin()); - if (!StringUtils.isEmpty(walletRequest.getName())) { - validateWalletName(walletRequest.getName()); + validatePin(walletRequest.getWalletPin()); + if (!StringUtils.isEmpty(walletRequest.getWalletName())) { + validateWalletName(walletRequest.getWalletName()); } } } diff --git a/src/test/java/io/mosip/mimoto/controller/SessionControllerTest.java b/src/test/java/io/mosip/mimoto/controller/SessionControllerTest.java deleted file mode 100644 index b5e17c8cb..000000000 --- a/src/test/java/io/mosip/mimoto/controller/SessionControllerTest.java +++ /dev/null @@ -1,67 +0,0 @@ -package io.mosip.mimoto.controller; - -import com.fasterxml.jackson.databind.ObjectMapper; -import org.junit.runner.RunWith; -import org.mockito.InjectMocks; -import org.junit.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.http.MediaType; -import org.springframework.mock.web.MockHttpSession; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -import jakarta.servlet.http.HttpServletRequest; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = SessionController.class) -@AutoConfigureMockMvc(addFilters = false) -@EnableWebMvc -public class SessionControllerTest { - - @Autowired - private MockMvc mockMvc; - - @InjectMocks - private SessionController sessionController; - - @MockBean - private HttpServletRequest request; - - @MockBean - private ObjectMapper objectMapper; - - @Test - public void shouldReturnSuccessResponseForValidSessionAndUserId() throws Exception { - MockHttpSession mockSession = new MockHttpSession(); - mockSession.setAttribute("userId", "123"); - - this.mockMvc.perform(get("/session/status").session(mockSession).accept(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andExpect(content().string("The session is valid and active")); - } - - @Test - public void shouldReturnProperErrorResponseWhenSessionIsNull() throws Exception { - this.mockMvc.perform(get("/session/status").accept(MediaType.APPLICATION_JSON)) - .andExpect(status().isNotFound()) - .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-045")) - .andExpect(jsonPath("$.errorMessage").value("The session is invalid or expired due to inactivity")); - } - - - @Test - public void shouldReturnProperErrorResponseWhenTheUserIdInSessionIsNull() throws Exception { - MockHttpSession mockSession = new MockHttpSession(); - - this.mockMvc.perform(get("/session/status").session(mockSession).accept(MediaType.APPLICATION_JSON)) - .andExpect(status().isNotFound()) - .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-045")) - .andExpect(jsonPath("$.errorMessage").value("The session is invalid or expired due to inactivity")); - } -} diff --git a/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java b/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java new file mode 100644 index 000000000..8b5c1d2a7 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java @@ -0,0 +1,145 @@ +package io.mosip.mimoto.controller; + +import io.mosip.mimoto.dbentity.UserMetadata; +import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; +import io.mosip.mimoto.repository.UserMetadataRepository; +import io.mosip.mimoto.util.EncryptionDecryptionUtil; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; +import org.springframework.mock.web.MockHttpSession; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.result.MockMvcResultMatchers; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; + +import java.util.Optional; + +import static org.mockito.Mockito.when; +import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = UsersController.class) +@AutoConfigureMockMvc +@EnableWebMvc +@EnableWebSecurity +public class UsersControllerTest { + + @Autowired + private MockMvc mockMvc; + + @MockBean + private UserMetadataRepository userMetadataRepository; + + @MockBean + private EncryptionDecryptionUtil encryptionDecryptionUtil; + + @Autowired + private WebApplicationContext context; + + private UserMetadata userMetadata; + + MockHttpSession mockSession; + + String identityProvider, userId; + + @Before + public void setUp() { + identityProvider = "google"; + userMetadata = new UserMetadata(); + userMetadata.setIdentityProvider(identityProvider); + userMetadata.setDisplayName("encryptedName"); + userMetadata.setProfilePictureUrl("encryptedUrl"); + userMetadata.setEmail("encryptedEmail"); + mockMvc = MockMvcBuilders.webAppContextSetup(context) + .apply(springSecurity()) + .build(); + mockSession = new MockHttpSession(); + mockSession.setAttribute("clientRegistrationId", "google"); + mockSession.setAttribute("userId", "user123"); + userId = (String) mockSession.getAttribute("userId"); + when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider("user123", identityProvider)).thenReturn(Optional.of(userMetadata)); + when(encryptionDecryptionUtil.decrypt("encryptedName", "user_pii", "", "")).thenReturn("Name 123"); + when(encryptionDecryptionUtil.decrypt("encryptedUrl", "user_pii", "", "")).thenReturn("https://profile.com/pic.jpg"); + when(encryptionDecryptionUtil.decrypt("encryptedEmail", "user_pii", "", "")).thenReturn("name123@gmail.com"); + + } + + @Test + public void shouldReturnTheUserDataForValidValues() throws Exception { + mockMvc.perform(get("/users/me/db").accept(MediaType.APPLICATION_JSON) + .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")).session(mockSession)) + .andExpect(status().isOk()) + .andExpect(MockMvcResultMatchers.jsonPath("$.display_name").value("Name 123")) + .andExpect(MockMvcResultMatchers.jsonPath("$.profile_picture_url").value("https://profile.com/pic.jpg")) + .andExpect(MockMvcResultMatchers.jsonPath("$.email").value("name123@gmail.com")) + .andExpect(jsonPath("$.errorCode").doesNotExist()) + .andExpect(jsonPath("$.errorMessage").doesNotExist()); + } + + @Test + public void shouldThrowExceptionForAInvalidUser() throws Exception { + when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider("user123", identityProvider)).thenReturn(Optional.empty()); + + mockMvc.perform(get("/users/me/db").accept(MediaType.APPLICATION_JSON) + .session(mockSession) + .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")).session(mockSession)) + .andExpect(status().isNotFound()) + .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-049")) + .andExpect(jsonPath("$.errorMessage").value("User not found. Please check your credentials or register")); + } + + @Test + public void shouldThrowExceptionIfAnyOtherErrorOccurredWhileFetchingUserData() throws Exception { + when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider("user123", identityProvider)).thenReturn(Optional.of(userMetadata)); + when(encryptionDecryptionUtil.decrypt("encryptedName", "user_pii", "", "")).thenThrow(new RuntimeException("Failure occurred while decrypting the name")); + + mockMvc.perform(get("/users/me/db").accept(MediaType.APPLICATION_JSON) + .session(mockSession) + .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")).session(mockSession)) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-049")) + .andExpect(jsonPath("$.errorMessage").value("Failed to fetch the User metadata from database due to : Failure occurred while decrypting the name")); + } + + @Test + public void shouldReturnUserProfileFromCacheForValidSession() throws Exception { + UserMetadataDTO userMetadataDTO = new UserMetadataDTO("Name 123", "https://profile.com/pic.jpg", "name123@gmail.com"); + mockSession.setAttribute("userMetadata", userMetadataDTO); + + mockMvc.perform(get("/users/me/cache") + .accept(MediaType.APPLICATION_JSON) + .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")) + .session(mockSession)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.display_name").value("Name 123")) + .andExpect(jsonPath("$.profile_picture_url").value("https://profile.com/pic.jpg")) + .andExpect(jsonPath("$.email").value("name123@gmail.com")); + } + + @Test + public void shouldReturnInternalServerErrorForCacheError() throws Exception { + mockSession.setAttribute("userMetadata", null); + + mockMvc.perform(get("/users/me/cache") + .accept(MediaType.APPLICATION_JSON) + .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")) + .session(mockSession)) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-052")) + .andExpect(jsonPath("$.errorMessage").value("No user metadata present in cache")); + } + +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/controller/UserControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java similarity index 58% rename from src/test/java/io/mosip/mimoto/controller/UserControllerTest.java rename to src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java index 96619a5ff..b8618c614 100644 --- a/src/test/java/io/mosip/mimoto/controller/UserControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java @@ -1,11 +1,9 @@ package io.mosip.mimoto.controller; import com.fasterxml.jackson.databind.ObjectMapper; -import io.mosip.mimoto.dbentity.UserMetadata; import io.mosip.mimoto.dto.WalletRequestDto; -import io.mosip.mimoto.repository.UserMetadataRepository; +import io.mosip.mimoto.dto.WalletResponseDto; import io.mosip.mimoto.service.WalletService; -import io.mosip.mimoto.util.EncryptionDecryptionUtil; import io.mosip.mimoto.util.WalletValidator; import org.junit.Before; import org.junit.Test; @@ -20,122 +18,55 @@ import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; -import static org.junit.Assert.assertEquals; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import org.springframework.test.web.servlet.MvcResult; -import org.springframework.test.web.servlet.result.MockMvcResultMatchers; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import org.springframework.web.context.WebApplicationContext; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import java.util.List; -import java.util.Optional; -import static org.mockito.Mockito.*; -import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity; +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; @RunWith(SpringRunner.class) -@SpringBootTest(classes = UserController.class) +@SpringBootTest(classes = WalletsController.class) @AutoConfigureMockMvc @EnableWebMvc @EnableWebSecurity -public class UserControllerTest { - - @Autowired - private MockMvc mockMvc; - - @MockBean - private UserMetadataRepository userMetadataRepository; - - @MockBean - private EncryptionDecryptionUtil encryptionDecryptionUtil; - +public class WalletsControllerTest { @MockBean private WalletValidator walletValidator; @Autowired - private WebApplicationContext context; + private MockMvc mockMvc; @MockBean private WalletService walletService; - private UserMetadata userMetadata; + WalletRequestDto walletRequestDto; MockHttpSession mockSession; - String identityProvider, userId; - - WalletRequestDto walletRequestDto; + String userId; @Before public void setUp() { - identityProvider = "google"; - userMetadata = new UserMetadata(); - userMetadata.setIdentityProvider(identityProvider); - userMetadata.setDisplayName("encryptedName"); - userMetadata.setProfilePictureUrl("encryptedUrl"); - userMetadata.setEmail("encryptedEmail"); - mockMvc = MockMvcBuilders.webAppContextSetup(context) - .apply(springSecurity()) - .build(); + walletRequestDto = new WalletRequestDto(); + walletRequestDto.setWalletName("My Wallet"); + walletRequestDto.setWalletPin("1234"); mockSession = new MockHttpSession(); mockSession.setAttribute("clientRegistrationId", "google"); mockSession.setAttribute("userId", "user123"); userId = (String) mockSession.getAttribute("userId"); - when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider("user123", identityProvider)).thenReturn(Optional.of(userMetadata)); - when(encryptionDecryptionUtil.decrypt("encryptedName", "user_pii", "", "")).thenReturn("Name 123"); - when(encryptionDecryptionUtil.decrypt("encryptedUrl", "user_pii", "", "")).thenReturn("https://profile.com/pic.jpg"); - when(encryptionDecryptionUtil.decrypt("encryptedEmail", "user_pii", "", "")).thenReturn("name123@gmail.com"); - - walletRequestDto = new WalletRequestDto(); - walletRequestDto.setName("My Wallet"); - walletRequestDto.setPin("1234"); - } - - @Test - public void shouldReturnTheUserDataForValidValues() throws Exception { - mockMvc.perform(get("/users/me").accept(MediaType.APPLICATION_JSON) - .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")).session(mockSession)) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.jsonPath("$.display_name").value("Name 123")) - .andExpect(MockMvcResultMatchers.jsonPath("$.profile_picture_url").value("https://profile.com/pic.jpg")) - .andExpect(MockMvcResultMatchers.jsonPath("$.email").value("name123@gmail.com")) - .andExpect(jsonPath("$.errorCode").doesNotExist()) - .andExpect(jsonPath("$.errorMessage").doesNotExist()); - } - - @Test - public void shouldThrowExceptionForAInvalidUser() throws Exception { - when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider("user123", identityProvider)).thenReturn(Optional.empty()); - - mockMvc.perform(get("/users/me").accept(MediaType.APPLICATION_JSON) - .session(mockSession) - .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")).session(mockSession)) - .andExpect(MockMvcResultMatchers.status().isNotFound()) - .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-049")) - .andExpect(jsonPath("$.errorMessage").value("User not found. Please check your credentials or register")); - } - - @Test - public void shouldThrowExceptionIfAnyOtherErrorOccurredWhileFetchingUserData() throws Exception { - when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider("user123", identityProvider)).thenReturn(Optional.of(userMetadata)); - when(encryptionDecryptionUtil.decrypt("encryptedName", "user_pii", "", "")).thenThrow(new RuntimeException("Failure occurred while decrypting the name")); - - mockMvc.perform(get("/users/me").accept(MediaType.APPLICATION_JSON) - .session(mockSession) - .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")).session(mockSession)) - .andExpect(MockMvcResultMatchers.status().isInternalServerError()) - .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-049")) - .andExpect(jsonPath("$.errorMessage").value("Failed to fetch the User metadata from database due to : Failure occurred while decrypting the name")); } @Test public void shouldReturnWalletIdForSuccessfulWalletCreation() throws Exception { when(walletService.createWallet(userId, "My Wallet", "1234")).thenReturn("walletId123"); - mockMvc.perform(post("/users/me/wallets") + mockMvc.perform(post("/wallets") .contentType(MediaType.APPLICATION_JSON) .accept(MediaType.APPLICATION_JSON) .content(new ObjectMapper().writeValueAsString(walletRequestDto)) @@ -151,7 +82,7 @@ public void shouldThrowExceptionIfAnyErrorOccurredWhenCreatingWallet() throws Ex when(walletService.createWallet(userId, "My Wallet", "1234")) .thenThrow(new RuntimeException("Exception occurred when creating Wallet for given userId")); - mockMvc.perform(post("/users/me/wallets") + mockMvc.perform(post("/wallets") .contentType(MediaType.APPLICATION_JSON) .accept(MediaType.APPLICATION_JSON) .content(new ObjectMapper().writeValueAsString(walletRequestDto)) @@ -166,23 +97,24 @@ public void shouldThrowExceptionIfAnyErrorOccurredWhenCreatingWallet() throws Ex @Test public void shouldReturnListOfWalletIDsForValidUserId() throws Exception { - List wallets = List.of("wallet1", "wallet2"); + List wallets = List.of(new WalletResponseDto("wallet1"), + new WalletResponseDto("wallet2")); when(walletService.getWallets(userId)).thenReturn(wallets); - mockMvc.perform(get("/users/me/wallets") + mockMvc.perform(get("/wallets") .accept(MediaType.APPLICATION_JSON) .session(mockSession) .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")) .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isOk()) - .andExpect(content().string("[\"wallet1\",\"wallet2\"]")); + .andExpect(content().string("[{\"walletId\":\"wallet1\"},{\"walletId\":\"wallet2\"}]")); } @Test public void shouldThrowExceptionIfAnyErrorOccurredWhileFetchingWalletsForGivenUserId() throws Exception { when(walletService.getWallets(userId)).thenThrow(new RuntimeException("Exception occurred when fetching the wallets for given userId")); - mockMvc.perform(get("/users/me/wallets") + mockMvc.perform(get("/wallets") .session(mockSession) .accept(MediaType.APPLICATION_JSON) .session(mockSession) @@ -198,7 +130,7 @@ public void shouldReturnTheWalletIDAndStoreWalletKeyInSessionForValidUserAndWall when(walletService.getWalletKey(userId, "walletId123", "1234")).thenReturn("walletId123"); String expectedWalletKey = "walletId123"; - MvcResult result = mockMvc.perform(post("/users/me/wallets/walletId123") + MvcResult result = mockMvc.perform(post("/wallets/walletId123/unlock") .contentType(MediaType.APPLICATION_JSON) .accept(MediaType.APPLICATION_JSON) .content(new ObjectMapper().writeValueAsString(walletRequestDto)) @@ -206,7 +138,7 @@ public void shouldReturnTheWalletIDAndStoreWalletKeyInSessionForValidUserAndWall .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")) .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isOk()) - .andExpect(content().string("walletId123")) + .andExpect(content().string("{\"walletId\":\"walletId123\"}")) .andReturn(); String actualWalletKey = result.getRequest().getSession().getAttribute("wallet_key").toString(); @@ -217,7 +149,7 @@ public void shouldReturnTheWalletIDAndStoreWalletKeyInSessionForValidUserAndWall public void shouldThrowExceptionIfAnyErrorOccurredWhileFetchingWalletDataForGivenUserIdAndWalletId() throws Exception { when(walletService.getWalletKey(userId, "walletId123", "1234")).thenThrow(new RuntimeException("Exception occurred when fetching the wallet data for given walletId and userId")); - mockMvc.perform(post("/users/me/wallets/walletId123") + mockMvc.perform(post("/wallets/walletId123/unlock") .contentType(MediaType.APPLICATION_JSON) .accept(MediaType.APPLICATION_JSON) .content(new ObjectMapper().writeValueAsString(walletRequestDto)) @@ -228,4 +160,4 @@ public void shouldThrowExceptionIfAnyErrorOccurredWhileFetchingWalletDataForGive .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-051")) .andExpect(jsonPath("$.errorMessage").value("Exception occurred when fetching the wallet data for given walletId and userId")); } -} \ No newline at end of file +} diff --git a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java index 4ca7d8434..0846f6e14 100644 --- a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java +++ b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java @@ -1,7 +1,7 @@ package io.mosip.mimoto.security.oauth2; import io.mosip.mimoto.config.Config; -import io.mosip.mimoto.controller.UserController; +import io.mosip.mimoto.controller.UsersController; import io.mosip.mimoto.repository.UserMetadataRepository; import io.mosip.mimoto.service.UserMetadataService; import io.mosip.mimoto.service.WalletService; @@ -50,7 +50,7 @@ @ContextConfiguration(classes = Config.class) @WebMvcTest(Config.class) @AutoConfigureMockMvc -@Import({UserController.class, OAuth2AuthenticationSuccessHandler.class}) +@Import({UsersController.class, OAuth2AuthenticationSuccessHandler.class}) @Slf4j public class OAuth2AuthenticationSuccessHandlerTest { @Autowired diff --git a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java index 017f15976..1950e5019 100644 --- a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java +++ b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java @@ -1,7 +1,7 @@ package io.mosip.mimoto.security.oauth2; import io.mosip.mimoto.config.Config; -import io.mosip.mimoto.controller.UserController; +import io.mosip.mimoto.controller.UsersController; import io.mosip.mimoto.dbentity.UserMetadata; import io.mosip.mimoto.repository.UserMetadataRepository; import io.mosip.mimoto.service.WalletService; @@ -53,7 +53,7 @@ @ContextConfiguration(classes = Config.class) @WebMvcTest(Config.class) @AutoConfigureMockMvc -@Import({UserController.class, OAuth2AuthenticationSuccessHandler.class, OAuth2AuthenticationFailureHandler.class, HttpSessionOAuth2AuthorizationRequestRepository.class}) +@Import({UsersController.class, OAuth2AuthenticationSuccessHandler.class, OAuth2AuthenticationFailureHandler.class, HttpSessionOAuth2AuthorizationRequestRepository.class}) @Slf4j public class OAuth2LoginTests { @@ -162,7 +162,7 @@ public void shouldBeAbleToAccessProtectedEndpointWhenUserIsAuthenticatedUsingOAu SecurityContext securityContext = SecurityContextHolder.getContext(); securityContext.setAuthentication(authenticationToken); - mockMvc.perform(get("/users/me") + mockMvc.perform(get("/users/me/db") .session(mockSession) .with(oauth2Login().oauth2User(oauth2User))) .andExpect(status().isOk()) diff --git a/src/test/java/io/mosip/mimoto/service/UserMetadataServiceTest.java b/src/test/java/io/mosip/mimoto/service/UserMetadataServiceTest.java index 29defa900..aa7c2370c 100644 --- a/src/test/java/io/mosip/mimoto/service/UserMetadataServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/UserMetadataServiceTest.java @@ -1,6 +1,6 @@ package io.mosip.mimoto.service; -import io.mosip.mimoto.controller.SessionController; +import io.mosip.mimoto.controller.UsersController; import io.mosip.mimoto.dbentity.UserMetadata; import io.mosip.mimoto.repository.UserMetadataRepository; import io.mosip.mimoto.util.EncryptionDecryptionUtil; @@ -11,20 +11,22 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import org.mockito.junit.MockitoJUnitRunner; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.web.servlet.config.annotation.EnableWebMvc; + import java.sql.Timestamp; import java.util.Optional; import java.util.UUID; -import static org.junit.Assert.*; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; import static org.mockito.Mockito.*; -@RunWith(SpringRunner.class) -@SpringBootTest(classes = SessionController.class) -@AutoConfigureMockMvc(addFilters = false) -@EnableWebMvc + +@RunWith(MockitoJUnitRunner.class) public class UserMetadataServiceTest { @Mock @@ -100,7 +102,6 @@ public void shouldUpdateTheUpdatedFieldEvenIfNoChangesInMetadataObserved() throw String updatedEmail = "name.123@example.com"; when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider(providerSubjectId, identityProvider)).thenReturn(Optional.of(userMetadata)); when(encryptionDecryptionUtil.decrypt(anyString(), any(), any(), any())).thenReturn(displayName, profilePictureUrl, email); - when(encryptionDecryptionUtil.encrypt(anyString(), any(), any(), any())).thenReturn(displayName, profilePictureUrl, email); Thread.sleep(1); storedUserId = userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); diff --git a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java index 204c33ec3..89eb1c024 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java @@ -1,6 +1,7 @@ package io.mosip.mimoto.service; import io.mosip.mimoto.dbentity.Wallet; +import io.mosip.mimoto.dto.WalletResponseDto; import io.mosip.mimoto.repository.WalletRepository; import io.mosip.mimoto.service.impl.WalletServiceImpl; import io.mosip.mimoto.util.WalletUtil; @@ -84,20 +85,23 @@ public void getWalletKey_shouldReturnNullIfWalletNotFound() { } @Test - public void getWallets_shouldReturnListOfWalletIds() { + public void getWallets_shouldReturnListOfWalletResponseDtos() { List walletIds = Arrays.asList(UUID.randomUUID().toString(), UUID.randomUUID().toString()); when(walletRepository.findWalletIdByUserId(userId)).thenReturn(walletIds); - List result = walletService.getWallets(userId); + List result = walletService.getWallets(userId); - assertEquals(walletIds, result); + assertEquals(walletIds.size(), result.size()); + for (int i = 0; i < walletIds.size(); i++) { + assertEquals(walletIds.get(i), result.get(i).getWalletId()); + } } @Test public void getWallets_shouldReturnEmptyListIfNoWalletsFound() { when(walletRepository.findWalletIdByUserId(userId)).thenReturn(List.of()); - List result = walletService.getWallets(userId); + List result = walletService.getWallets(userId); assertTrue(result.isEmpty()); } diff --git a/src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java b/src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java index 8c9ac1a79..7135ca9f8 100644 --- a/src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java +++ b/src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java @@ -27,8 +27,8 @@ public class WalletValidatorTest { @BeforeEach void setUp() { - when(walletRequestDto.getPin()).thenReturn("1234"); - when(walletRequestDto.getName()).thenReturn("My Wallet"); + when(walletRequestDto.getWalletPin()).thenReturn("1234"); + when(walletRequestDto.getWalletName()).thenReturn("My Wallet"); } @Test @@ -38,7 +38,7 @@ void testValidateWalletRequest_validData() { @Test void testValidatePin_invalidPin() { - when(walletRequestDto.getPin()).thenReturn("12"); + when(walletRequestDto.getWalletPin()).thenReturn("12"); IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> { walletValidator.validateWalletRequest(walletRequestDto); @@ -50,8 +50,8 @@ void testValidatePin_invalidPin() { @Test void testValidateWalletName_invalidName() { // Ensure valid pin for wallet name test - when(walletRequestDto.getPin()).thenReturn("1234"); - when(walletRequestDto.getName()).thenReturn("My Wallet!@"); + when(walletRequestDto.getWalletPin()).thenReturn("1234"); + when(walletRequestDto.getWalletName()).thenReturn("My Wallet!@"); IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> { walletValidator.validateWalletRequest(walletRequestDto); @@ -63,8 +63,8 @@ void testValidateWalletName_invalidName() { @Test void testValidateWalletName_validName() { // Ensure valid pin for wallet name test - when(walletRequestDto.getPin()).thenReturn("123456"); - when(walletRequestDto.getName()).thenReturn("Valid Wallet 123"); + when(walletRequestDto.getWalletPin()).thenReturn("123456"); + when(walletRequestDto.getWalletName()).thenReturn("Valid Wallet 123"); walletValidator.validateWalletRequest(walletRequestDto); } From e61a69aa5860eb04a093788dfe9a043b345fc053 Mon Sep 17 00:00:00 2001 From: Rakshith B <79500257+Rakshithb1@users.noreply.github.com> Date: Tue, 1 Apr 2025 13:13:53 +0530 Subject: [PATCH 482/860] [[MOSIP-40792]] Rename inji-global-cm.yaml.sample to inji-stack-cm.yaml.sample Signed-off-by: Rakshith B <79500257+Rakshithb1@users.noreply.github.com> --- deploy/{inji-global-cm.yaml.sample => inji-stack-cm.yaml.sample} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename deploy/{inji-global-cm.yaml.sample => inji-stack-cm.yaml.sample} (100%) diff --git a/deploy/inji-global-cm.yaml.sample b/deploy/inji-stack-cm.yaml.sample similarity index 100% rename from deploy/inji-global-cm.yaml.sample rename to deploy/inji-stack-cm.yaml.sample From ca04061ed3e271f5e8c2cd990e03c0f41ed5ca45 Mon Sep 17 00:00:00 2001 From: Rakshithb1 Date: Tue, 1 Apr 2025 19:50:29 +0530 Subject: [PATCH 483/860] [MOSIP-40792] inji restructure Signed-off-by: Rakshithb1 --- deploy/README.md | 36 ++++++++--------- deploy/artifactory/delete.sh | 2 +- deploy/artifactory/install.sh | 2 +- deploy/artifactory/restart.sh | 2 +- deploy/conf-secrets/README.md | 40 ------------------- deploy/conf-secrets/delete.sh | 37 ----------------- deploy/conf-secrets/install.sh | 31 -------------- deploy/config-server/README.md | 2 +- deploy/config-server/install.sh | 2 +- deploy/config-server/values.yaml | 5 ++- ....yaml.sample => inji-stack-cm.yaml.sample} | 2 + deploy/object-store/README.md | 2 +- partner-onboarder/values.yaml | 13 ++++++ 13 files changed, 41 insertions(+), 135 deletions(-) delete mode 100644 deploy/conf-secrets/README.md delete mode 100644 deploy/conf-secrets/delete.sh delete mode 100644 deploy/conf-secrets/install.sh rename deploy/{inji-global-cm.yaml.sample => inji-stack-cm.yaml.sample} (90%) diff --git a/deploy/README.md b/deploy/README.md index 7160550fa..da1127eca 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -7,31 +7,31 @@ * Installing Istio * Configuring storage class * Configuring the necessary dependent services - * Deploying Esignet services + * Deploying inji services ## Deployment ### K8 cluster * Kubernetes cluster should be ready with storage class and ingress configured properly. * Below is the document containing steps to create and configure K8 cluster. - * __Onprem RKE CLuster__ : Create RKE K8 cluster using mentioned [steps](https://github.com/mosip/k8s-infra/tree/v1.2.0.2/mosip/on-prem#mosip-k8s-cluster-setup-using-rke). - * __Persistence__ : Setup storage class as per [steps](https://github.com/mosip/k8s-infra/tree/v1.2.0.1/mosip/on-prem#storage-classes). - * __Istio service mesh__ : Setup Istio service mesh using [steps](https://github.com/mosip/k8s-infra/tree/v1.2.0.2/mosip/on-prem#istio-for-service-discovery-and-ingress). - * __Nginx__ : Setup and configure nginx as per [steps](https://github.com/mosip/k8s-infra/blob/v1.2.0.2/mosip/on-prem/nginx). - * __Logging__ : Setup logging as per [steps](https://github.com/mosip/k8s-infra/tree/v1.2.0.2/logging). - * __Monitoring__ : Setup monitoring consisting elasticsearch, kibana, grafana using [steps](https://github.com/mosip/k8s-infra/tree/v1.2.0.2/monitoring). + * __Onprem RKE CLuster__ : Create RKE K8 cluster using mentioned [steps](https://github.com/mosip/k8s-infra/tree/main/mosip/on-prem#mosip-k8s-cluster-setup-using-rke). + * __Persistence__ : Setup storage class as per [steps](https://github.com/mosip/k8s-infra/tree/main/mosip/on-prem#storage-classes). + * __Istio service mesh__ : Setup Istio service mesh using [steps](https://github.com/mosip/k8s-infra/tree/main/mosip/on-prem#istio-for-service-discovery-and-ingress). + * __Nginx__ : Setup and configure nginx as per [steps](https://github.com/mosip/k8s-infra/blob/main/mosip/on-prem/nginx). + * __Logging__ : Setup logging as per [steps](https://github.com/mosip/k8s-infra/tree/main/logging). + * __Monitoring__ : Setup monitoring consisting elasticsearch, kibana, grafana using [steps](https://github.com/mosip/k8s-infra/tree/main/monitoring). * __AWS EKS cluster__ : Create AWS EKS cluster using mentioned [steps](https://github.com/mosip/k8s-infra/tree/main/mosip/aws#mosip-cluster-on-amazon-eks). * __Persistence__ : Setup storage class as per [steps](https://github.com/mosip/k8s-infra/tree/main/mosip/aws#persistence). * __Ingress and Loadbalancer__ : Setup nginx and configure NLB for exposing services outside using [steps](https://github.com/mosip/k8s-infra/tree/main/mosip/aws#ingress-and-load-balancer-lb). - * __Logging__ : Setup logging as per [steps](https://github.com/mosip/k8s-infra/tree/v1.2.0.2/logging). - * __Monitoring__ : Setup monitoring consisting elasticsearch, kibana, grafana using [steps](https://github.com/mosip/k8s-infra/tree/v1.2.0.2/monitoring). + * __Logging__ : Setup logging as per [steps](https://github.com/mosip/k8s-infra/tree/main/logging). + * __Monitoring__ : Setup monitoring consisting elasticsearch, kibana, grafana using [steps](https://github.com/mosip/k8s-infra/tree/main/monitoring). ### Install Pre-requisites * `global` configmap: For inji K8's env, `global` configmap in `default` namespace contains Domain related information. Follow below steps to add domain details for `global` configmap. - * Copy `inji-global-cm.yaml.sample` to `inji-global-cm.yaml`. - * Update the domain names in `inji-global-cm.yaml` correctly for your environment. + * Copy `inji-stack-cm.yaml.sample` to `inji-stack-cm.yaml`. + * Update the domain names in `inji-stack-cm.yaml` correctly for your environment, ensuring that only new domain names are added (remove existing domains). ```` - kubectl -n default apply -f inji-global-cm.yaml + kubectl -n default apply -f inji-stack-cm.yaml ```` -* Install minio +* Install minio (Skip this step if minio is already installed) * Execute minio install script ``` cd object-store/minio @@ -48,14 +48,10 @@ cd ../artifactory ./install.sh ``` -### Install artifactory - ``` - cd ../conf-secrets - ./install.sh - ``` -### Install config server -* Execute config-server install script +### Install config server +* If the config server is already installed, update the environment variables and composite repository in deployment accordingly. +* Otherwise, execute config-server install script ``` cd ../config-server ./install.sh diff --git a/deploy/artifactory/delete.sh b/deploy/artifactory/delete.sh index ffd65f8cd..5d5e368e3 100644 --- a/deploy/artifactory/delete.sh +++ b/deploy/artifactory/delete.sh @@ -7,7 +7,7 @@ if [ $# -ge 1 ] ; then fi function deleting_artifactory() { - NS=artifactory + NS=injiweb while true; do read -p "Are you sure you want to delete artifactory helm chart?(Y/n) " yn if [ $yn = "Y" ] diff --git a/deploy/artifactory/install.sh b/deploy/artifactory/install.sh index 0c9271c44..2d925eadc 100644 --- a/deploy/artifactory/install.sh +++ b/deploy/artifactory/install.sh @@ -6,7 +6,7 @@ if [ $# -ge 1 ] ; then export KUBECONFIG=$1 fi -NS=artifactory +NS=injiweb CHART_VERSION=0.0.1-develop echo Create $NS namespace diff --git a/deploy/artifactory/restart.sh b/deploy/artifactory/restart.sh index b82a3d039..f7066db38 100644 --- a/deploy/artifactory/restart.sh +++ b/deploy/artifactory/restart.sh @@ -7,7 +7,7 @@ if [ $# -ge 1 ] ; then fi function Restarting_artifactory() { - NS=artifactory + NS=injiweb kubectl -n $NS rollout restart deploy kubectl -n $NS get deploy -o name | xargs -n1 -t kubectl -n $NS rollout status diff --git a/deploy/conf-secrets/README.md b/deploy/conf-secrets/README.md deleted file mode 100644 index 46a97d9b1..000000000 --- a/deploy/conf-secrets/README.md +++ /dev/null @@ -1,40 +0,0 @@ -# Config Server Secrets - -This module generates and install secrets required by config-server. - -Note: -* The conf-secrets must not be deleted in any case of re-deployment, upgrade or migration process as we have separated the conf-secrets from config-server to ensure conf-secrets are not deleted. -* Incase if you have a scenario where you have to delete the conf-secrets from the environment make sure to run `delete.sh` script as the script delete's the helm chart and takes the backup of the existing `conf-secrets-various` secret. - - -## Install -```sh -./install.sh [kubeconfig] -``` - -## Delete -``` -./delete.sh [kubeconfig] -``` - -## Secrets to be updated for Migartion scenerios -### 1.1.5.5-P1 to 1.2.0.1 -* After installing Conf secrets in 1.2.0.1 update below mentioned keys with values from V2 configuration files. -* | Property file (V2 conf) | Property file (V3 conf) | parameters | keys (Conf-screts) | - |---------------------------------|--------------------------------------|--|--| - | id-authentication-mz.properties | id-authentication-default.properties | ida-websub-authtype-callback-secret | ida-websub-authtype-callback-secret | - | id-authentication-mz.properties | id-authentication-default.properties | ida-websub-ca-certificate-callback-secret | ida-websub-ca-certificate-callback-secret | - | id-authentication-mz.properties | id-authentication-default.properties | ida-websub-credential-issue-callback-secret | ida-websub-credential-issue-callback-secret | - | id-authentication-mz.properties | id-authentication-default.properties | ida-websub-hotlist-callback-secret | ida-websub-hotlist-callback-secret | - | id-authentication-mz.properties | id-authentication-default.properties | ida-websub-partner-service-callback-secret | ida-websub-partner-service-callback-secret | - | mimoto-mz.properties | mimoto-default.properties | mosip.partner.crypto.p12.password | mosip-partner-crypto-p12-password | - | print-mz.properties | print-default.properties | mosip.event.secret | print-websub-hub-secret | - | id-authentication-mz.properties | id-authentication-default.properties | mosip.ida.kyc.token.secret | mosip-ida-kyc-token-secret | - | mimoto-mz.properties | mimoto-default.properties | wallet.binding.partner.api.key | mimoto-wallet-binding-partner-api-key | - | id-authentication-mz.properties | id-authentication-default.properties | mosip-kernel-tokenid-uin-salt | mosip-kernel-tokenid-uin-salt | - | id-authentication-mz.properties | id-authentication-default.properties | mosip.kernel.tokenid.partnercode.salt | mosip-kernel-tokenid-partnercode-salt | - | resident-mz.properties | resident-default.properties | resident.websub.authtype.status.secret | resident-websub-authtype-status-secret | - | resident-mz.properties | resident-default.properties | resident.websub.credential.status.update.secret | resident-websub-credential-status-update-secret | - | resident-mz.properties | resident-default.properties | resident.websub.auth.transaction.status.secret | resident-websub-auth-transaction-status-secret | - | id-authentication-mz.properties | id-authentication-default.properties | ida-websub-masterdata-templates-callback-secret | ida-websub-masterdata-templates-callback-secret | - | id-repository-mz.properties | id-repository-default.properties | mosip.idrepo.websub.vid-credential-update.secret | idrepo-websub-vid-credential-update-secret | diff --git a/deploy/conf-secrets/delete.sh b/deploy/conf-secrets/delete.sh deleted file mode 100644 index 0c982fcd3..000000000 --- a/deploy/conf-secrets/delete.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/bash -# Uninstalls the conf-secrets helm chart -## Usage: ./delete.sh [kubeconfig] - -if [ $# -ge 1 ] ; then - export KUBECONFIG=$1 -fi - -function deleting_conf_secrets() { - NS=conf-secrets - SECRET_NAME=conf-secrets-various - BACKUP_DIR=./conf_secrets_backup - mkdir -p $BACKUP_DIR - while true; do - read -p "Are you sure you want to delete the conf-secrets helm chart?(Y/n) " yn - if [ $yn = "Y" ] - then - # Backup the conf-secrets - kubectl get secret $SECRET_NAME -n $NS -o yaml > $BACKUP_DIR/$SECRET_NAME.yaml - helm -n $NS delete conf-secrets - echo "deleted conf-secrets helm chart" - echo "Backup of conf-secrets is taken and stored in conf_secrets_backup directory." - break - else - break - fi - done - return 0 -} - -# set commands for error handling. -set -e -set -o errexit ## set -e : exit the script if any statement returns a non-true return value -set -o nounset ## set -u : exit the script if you try to use an uninitialised variable -set -o errtrace # trace ERR through 'time command' and other functions -set -o pipefail # trace ERR through pipes -deleting_conf_secrets # calling function \ No newline at end of file diff --git a/deploy/conf-secrets/install.sh b/deploy/conf-secrets/install.sh deleted file mode 100644 index 3c1c2e2bf..000000000 --- a/deploy/conf-secrets/install.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash -# Installs config-server secrets -## Usage: ./install_secrets.sh [kubeconfig] - -if [ $# -ge 1 ] ; then - export KUBECONFIG=$1 -fi - -NS=conf-secrets -CHART_VERSION=0.0.1-develop - -echo Create $NS namespace -kubectl create ns $NS - -function config_secrets() { - echo Istio label - kubectl label ns $NS istio-injection=enabled --overwrite - helm repo update - - echo "Installing Secrets required by config-server" - helm -n $NS install conf-secrets mosip/conf-secrets --version $CHART_VERSION --wait - return 0 -} - -# set commands for error handling. -set -e -set -o errexit ## set -e : exit the script if any statement returns a non-true return value -set -o nounset ## set -u : exit the script if you try to use an uninitialised variable -set -o errtrace # trace ERR through 'time command' and other functions -set -o pipefail # trace ERR through pipes -config_secrets # calling function diff --git a/deploy/config-server/README.md b/deploy/config-server/README.md index 0f84016d9..ae13c7556 100755 --- a/deploy/config-server/README.md +++ b/deploy/config-server/README.md @@ -1,7 +1,7 @@ # Config server ## Introduction -Config server serves all properties required by Inji modules. This must be installed before any other MOSIP modules. +Config server serves all properties required by inji modules. This must be installed before any other MOSIP modules. ## Pre-requisites * `conf-secrets` MOSIP module. diff --git a/deploy/config-server/install.sh b/deploy/config-server/install.sh index 0769ed8c8..38055bc9c 100755 --- a/deploy/config-server/install.sh +++ b/deploy/config-server/install.sh @@ -30,7 +30,7 @@ CHART_VERSION=0.0.2-develop echo Copy secrets #$COPY_UTIL secret db-common-secrets postgres $NS - $COPY_UTIL secret conf-secrets-various conf-secrets $NS + #$COPY_UTIL secret conf-secrets-various conf-secrets $NS $COPY_UTIL secret s3 s3 $NS echo Installing config-server diff --git a/deploy/config-server/values.yaml b/deploy/config-server/values.yaml index 2d9f10c93..288879110 100755 --- a/deploy/config-server/values.yaml +++ b/deploy/config-server/values.yaml @@ -40,7 +40,7 @@ envVariables: secretKeyRef: key: mosip-partner-crypto-p12-password name: conf-secrets-various - enabled: true + enabled: false - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_DB_DBUSER_PASSWORD valueFrom: @@ -99,6 +99,9 @@ envVariables: enabled: true extraEnvVars: + - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_PARTNER_CRYPTO_P12_PASSWORD + value: abc123 + - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MPARTNER_DEFAULT_MOBILE_SECRET value: WXFvqo48eLCSBpRa diff --git a/deploy/inji-global-cm.yaml.sample b/deploy/inji-stack-cm.yaml.sample similarity index 90% rename from deploy/inji-global-cm.yaml.sample rename to deploy/inji-stack-cm.yaml.sample index 663fc9ab7..f799dec28 100644 --- a/deploy/inji-global-cm.yaml.sample +++ b/deploy/inji-stack-cm.yaml.sample @@ -17,4 +17,6 @@ data: mosip-esignet-host: esignet.sandbox.xyz.net mosip-injiweb-host: injiweb.sandbox.xyz.net mosip-injiverify-host: injiverify.sandbox.xyz.net + mosip-injicertify-host: injicertify.sandbox.xyz.net mosip-postgres-host: postgres.sandbox.xyz.net + mosip-minio-host: minio.sandbox.mosip.net diff --git a/deploy/object-store/README.md b/deploy/object-store/README.md index 120ded7bf..867369c90 100644 --- a/deploy/object-store/README.md +++ b/deploy/object-store/README.md @@ -2,7 +2,7 @@ ## Overview -MOSIP uses S3 API compliant object store for storing biometric and other data. +Inji uses S3 API compliant object store for storing VC. For on-prem, install [minio](minio/README.md) which is S3 API compliant object store. diff --git a/partner-onboarder/values.yaml b/partner-onboarder/values.yaml index 0d4e584b1..76d402648 100644 --- a/partner-onboarder/values.yaml +++ b/partner-onboarder/values.yaml @@ -3,6 +3,19 @@ # repository: mosipdev/partner-onboarder # tag: develop +extraEnvVarsCM: + - global +extraEnvVarsSecret: [] +extraEnvVars: + - name: keycloak-external-url + value: iam.sandbox.mosip.net + - name: KEYCLOAK_ADMIN_USER + value: admin + - name: admin-password + value: DKttMoRdu9 + - name: mosip_pms_client_secret + value: TvPNOeVUJm1oAjYH + onboarding: modules: - name: mobileid From c10675e36b5131ab78ff9a366601dfe3b90d4965 Mon Sep 17 00:00:00 2001 From: Rakshithb1 Date: Tue, 1 Apr 2025 19:54:16 +0530 Subject: [PATCH 484/860] [MOSIP-40792] inji restructure Signed-off-by: Rakshithb1 --- partner-onboarder/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/partner-onboarder/README.md b/partner-onboarder/README.md index f2e68f827..1ef9f8d24 100644 --- a/partner-onboarder/README.md +++ b/partner-onboarder/README.md @@ -3,7 +3,7 @@ ## Overview * Upload certificate for default partners. Refer [mosip-onboarding repo](https://github.com/mosip/mosip-onboarding). -## Install +## Install * Create a directory for onboarder on the NFS server at `/srv/nfs//onboarder/`: ``` mkdir -p /srv/nfs/mosip//onboarder/ From b8d619d1715cdc30050f4006fc7408a2c2ab0776 Mon Sep 17 00:00:00 2001 From: Rakshith B <79500257+Rakshithb1@users.noreply.github.com> Date: Tue, 1 Apr 2025 20:02:32 +0530 Subject: [PATCH 485/860] [[MOSIP-40257]] Updated values.yaml Signed-off-by: Rakshith B <79500257+Rakshithb1@users.noreply.github.com> --- partner-onboarder/values.yaml | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/partner-onboarder/values.yaml b/partner-onboarder/values.yaml index 76d402648..0d4e584b1 100644 --- a/partner-onboarder/values.yaml +++ b/partner-onboarder/values.yaml @@ -3,19 +3,6 @@ # repository: mosipdev/partner-onboarder # tag: develop -extraEnvVarsCM: - - global -extraEnvVarsSecret: [] -extraEnvVars: - - name: keycloak-external-url - value: iam.sandbox.mosip.net - - name: KEYCLOAK_ADMIN_USER - value: admin - - name: admin-password - value: DKttMoRdu9 - - name: mosip_pms_client_secret - value: TvPNOeVUJm1oAjYH - onboarding: modules: - name: mobileid From b40a8e32a69a4785cde7e91bd254aaa808605c04 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Wed, 2 Apr 2025 16:16:55 +0530 Subject: [PATCH 486/860] [INJIWEB-1418] add endpoints and write implementation to download and store credentials and to fetch all the credentials of a specified wallet and extract the common methods of normal and login download flows into a separate file and update the tests for the same Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../ddl/mimoto-verifiable_credentials.sql | 2 - .../controller/CredentialsController.java | 8 +- .../mimoto/controller/IdpController.java | 6 +- .../mimoto/controller/UsersController.java | 9 +- .../WalletCredentialsController.java | 82 ++++++++ .../mimoto/dbentity/CredentialMetadata.java | 10 + .../mimoto/dbentity/VerifiableCredential.java | 18 +- .../VerifiableCredentialResponseDTO.java | 30 +++ .../DatabaseConnectionException.java | 19 ++ .../exception/PlatformErrorMessages.java | 4 +- .../io/mosip/mimoto/model/DatabaseEntity.java | 16 ++ .../mosip/mimoto/model/DatabaseOperation.java | 15 ++ .../WalletCredentialsRepository.java | 11 + .../mimoto/service/CredentialService.java | 8 - .../service/WalletCredentialService.java | 11 + .../service/impl/CredentialServiceImpl.java | 77 +------ .../impl/WalletCredentialServiceImpl.java | 198 ++++++++++++++++++ .../mimoto/util/CredentialUtilService.java | 100 +++++++++ .../io/mosip/mimoto/util/LocaleUtils.java | 24 +++ .../controller/CredentialsControllerTest.java | 10 +- .../mimoto/controller/IdpControllerTest.java | 12 +- .../mimoto/service/CredentialServiceTest.java | 158 ++------------ .../service/CredentialUtilServiceTest.java | 196 +++++++++++++++++ 23 files changed, 773 insertions(+), 251 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java create mode 100644 src/main/java/io/mosip/mimoto/dbentity/CredentialMetadata.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/VerifiableCredentialResponseDTO.java create mode 100644 src/main/java/io/mosip/mimoto/exception/DatabaseConnectionException.java create mode 100644 src/main/java/io/mosip/mimoto/model/DatabaseEntity.java create mode 100644 src/main/java/io/mosip/mimoto/model/DatabaseOperation.java create mode 100644 src/main/java/io/mosip/mimoto/repository/WalletCredentialsRepository.java create mode 100644 src/main/java/io/mosip/mimoto/service/WalletCredentialService.java create mode 100644 src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java create mode 100644 src/main/java/io/mosip/mimoto/util/CredentialUtilService.java create mode 100644 src/test/java/io/mosip/mimoto/service/CredentialUtilServiceTest.java diff --git a/db_scripts/inji_mimoto/ddl/mimoto-verifiable_credentials.sql b/db_scripts/inji_mimoto/ddl/mimoto-verifiable_credentials.sql index acf20a3a8..961c47dae 100644 --- a/db_scripts/inji_mimoto/ddl/mimoto-verifiable_credentials.sql +++ b/db_scripts/inji_mimoto/ddl/mimoto-verifiable_credentials.sql @@ -7,12 +7,10 @@ -- Modified Date Modified By Comments / Remarks -- ------------------------------------------------------------------------------------------ -- ------------------------------------------------------------------------------------------ - CREATE TABLE IF NOT EXISTS verifiable_credentials ( id character varying(36) PRIMARY KEY, -- Primary key for the table wallet_id character varying(36) NOT NULL, -- Foreign key referring to the wallet table (wallet.id) credential TEXT NOT NULL, -- Encrypted credential (using wallet_key for encryption/decryption) - credential_format character varying(255) NOT NULL, -- Format of the credential (e.g., JSON, JWT, etc.) credential_metadata JSONB NOT NULL, -- Metadata about the credential created_at TIMESTAMP DEFAULT now(), -- Timestamp of record creation (defaults to current time) updated_at TIMESTAMP DEFAULT now(), -- Timestamp of last update (defaults to current time) diff --git a/src/main/java/io/mosip/mimoto/controller/CredentialsController.java b/src/main/java/io/mosip/mimoto/controller/CredentialsController.java index 1514d54ca..63bca38d5 100644 --- a/src/main/java/io/mosip/mimoto/controller/CredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/CredentialsController.java @@ -7,6 +7,7 @@ import io.mosip.mimoto.exception.InvalidCredentialResourceException; import io.mosip.mimoto.exception.VCVerificationException; import io.mosip.mimoto.service.CredentialService; +import io.mosip.mimoto.util.CredentialUtilService; import io.mosip.mimoto.util.Utilities; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; @@ -28,7 +29,6 @@ import java.io.ByteArrayInputStream; import java.io.IOException; -import java.util.List; import java.util.Map; import static io.mosip.mimoto.exception.PlatformErrorMessages.*; @@ -42,13 +42,15 @@ public class CredentialsController { @Autowired CredentialService credentialService; + @Autowired + CredentialUtilService credentialUtilService; + @Operation(summary = SwaggerLiteralConstants.CREDENTIALS_DOWNLOAD_VC_SUMMARY, description = SwaggerLiteralConstants.CREDENTIALS_DOWNLOAD_VC_DESCRIPTION) @ApiResponses({ @ApiResponse(responseCode = "200", content = {@Content(mediaType = "application/pdf")}), @ApiResponse(responseCode = "400", content = {@Content(schema = @Schema(implementation = ResponseWrapper.class), mediaType = "application/json")})}) @PostMapping("/download") public ResponseEntity downloadCredentialAsPDF(@RequestParam Map params) { - ResponseWrapper responseWrapper = new ResponseWrapper<>(); //TODO: remove this default value after the apitest is updated params.putIfAbsent("vcStorageExpiryLimitInTimes", "-1"); @@ -58,7 +60,7 @@ public ResponseEntity downloadCredentialAsPDF(@RequestParam Map getToken(@RequestParam Map params, log.info("Reached the getToken Controller for Issuer " + issuer); ResponseWrapper responseWrapper = new ResponseWrapper<>(); try { - TokenResponseDTO response = credentialService.getTokenResponse(params, issuer); + TokenResponseDTO response = credentialUtilService.getTokenResponse(params, issuer); return ResponseEntity.status(HttpStatus.OK).body(response); } catch (Exception ex) { log.error("Exception Occurred while Invoking the Token Endpoint : ", ex); diff --git a/src/main/java/io/mosip/mimoto/controller/UsersController.java b/src/main/java/io/mosip/mimoto/controller/UsersController.java index 79bdbfd74..909ded11a 100644 --- a/src/main/java/io/mosip/mimoto/controller/UsersController.java +++ b/src/main/java/io/mosip/mimoto/controller/UsersController.java @@ -3,7 +3,10 @@ import io.mosip.mimoto.dbentity.UserMetadata; import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; import io.mosip.mimoto.exception.LoginSessionException; +import io.mosip.mimoto.exception.DatabaseConnectionException; import io.mosip.mimoto.exception.OAuth2AuthenticationException; +import io.mosip.mimoto.model.DatabaseEntity; +import io.mosip.mimoto.model.DatabaseOperation; import io.mosip.mimoto.repository.UserMetadataRepository; import io.mosip.mimoto.util.EncryptionDecryptionUtil; import io.mosip.mimoto.util.Utilities; @@ -17,7 +20,6 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; - import static io.mosip.mimoto.exception.PlatformErrorMessages.*; @Slf4j @@ -48,14 +50,13 @@ public ResponseEntity getUserProfile(Authentication authenticat return Utilities.getErrorResponseEntityWithoutWrapper(exception, USER_METADATA_FETCH_EXCEPTION.getCode(), exception.getStatus(), null); } catch (DataAccessResourceFailureException exception) { log.error("Error occurred while connecting to the database : ", exception); - OAuth2AuthenticationException authenticationException = new OAuth2AuthenticationException(DATABASE_CONNECTION_EXCEPTION.getCode(), DATABASE_CONNECTION_EXCEPTION.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); - return Utilities.getErrorResponseEntityWithoutWrapper(authenticationException, USER_METADATA_FETCH_EXCEPTION.getCode(), authenticationException.getStatus(), null); + DatabaseConnectionException connectionException = new DatabaseConnectionException(DATABASE_CONNECTION_EXCEPTION.getCode(), DATABASE_CONNECTION_EXCEPTION.getMessage(), DatabaseEntity.USERMETADATA, DatabaseOperation.FETCHING, HttpStatus.INTERNAL_SERVER_ERROR); + return Utilities.getErrorResponseEntityWithoutWrapper(connectionException, USER_METADATA_FETCH_EXCEPTION.getCode(), connectionException.getStatus(), null); } catch (Exception exception) { log.error("Error occurred while retrieving user profile : ", exception); OAuth2AuthenticationException authenticationException = new OAuth2AuthenticationException(USER_METADATA_FETCH_EXCEPTION.getCode(), USER_METADATA_FETCH_EXCEPTION.getMessage() + " due to : " + exception.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); return Utilities.getErrorResponseEntityWithoutWrapper(authenticationException, USER_METADATA_FETCH_EXCEPTION.getCode(), authenticationException.getStatus(), null); } - } private UserMetadata fetchUserMetadata(String providerSubjectId, String identityProvider) throws OAuth2AuthenticationException { diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java new file mode 100644 index 000000000..15541860d --- /dev/null +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -0,0 +1,82 @@ +package io.mosip.mimoto.controller; + +import io.mosip.mimoto.dto.idp.TokenResponseDTO; +import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; +import io.mosip.mimoto.exception.*; +import io.mosip.mimoto.model.DatabaseEntity; +import io.mosip.mimoto.model.DatabaseOperation; +import io.mosip.mimoto.service.WalletCredentialService; +import io.mosip.mimoto.util.CredentialUtilService; +import io.mosip.mimoto.util.Utilities; +import jakarta.servlet.http.HttpSession; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessResourceFailureException; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import java.io.IOException; +import java.util.List; +import java.util.Map; +import static io.mosip.mimoto.exception.PlatformErrorMessages.*; + +@Slf4j +@RestController +@RequestMapping(value = "/wallets/{walletId}/credentials") +public class WalletCredentialsController { + @Autowired + WalletCredentialService walletCredentialService; + + @Autowired + CredentialUtilService credentialUtilService; + + @PostMapping + public ResponseEntity downloadCredential(@PathVariable("walletId") String walletId, @RequestParam Map params, HttpSession httpSession) { + //TODO: remove this default value after the apitest is updated + params.putIfAbsent("vcStorageExpiryLimitInTimes", "-1"); + + try { + String issuerId = params.get("issuer"); + String credentialType = params.get("credential"); + String credentialValidity = params.get("vcStorageExpiryLimitInTimes"); + String locale = params.get("locale"); + log.info("Initiated Token Call"); + TokenResponseDTO response = credentialUtilService.getTokenResponse(params, issuerId); + String walletKey = httpSession.getAttribute("wallet_key").toString(); + + log.info("Initiated fetching Verifiable Credential and storing it in the database Call"); + VerifiableCredentialResponseDTO credentialResponseDTO = walletCredentialService.fetchAndStoreCredential( + issuerId, credentialType, response, credentialValidity, locale, walletId, walletKey); + + return ResponseEntity.status(HttpStatus.OK).body(credentialResponseDTO); + } catch (ApiNotAccessibleException | IOException exception) { + log.error("Exception occurred while fetching credential types ", exception); + return Utilities.getErrorResponseEntityWithoutWrapper(exception, LOGIN_CREDENTIAL_DOWNLOAD_EXCEPTION.getCode(), HttpStatus.BAD_REQUEST, MediaType.APPLICATION_JSON); + } catch (DataAccessResourceFailureException exception) { + log.error("Exception occurred while connecting to the database to store downloaded Verifiable Credential:", exception); + DatabaseConnectionException connectionException = new DatabaseConnectionException(DATABASE_CONNECTION_EXCEPTION.getCode(), DATABASE_CONNECTION_EXCEPTION.getMessage(), DatabaseEntity.VERIFIABLECREDENTIAL, DatabaseOperation.STORING, HttpStatus.INTERNAL_SERVER_ERROR); + return Utilities.getErrorResponseEntityWithoutWrapper(connectionException, LOGIN_CREDENTIAL_DOWNLOAD_EXCEPTION.getCode(), connectionException.getStatus(), MediaType.APPLICATION_JSON); + } catch (Exception exception) { + log.error("Exception occurred while downloading or saving the Verifiable Credential:", exception); + return Utilities.getErrorResponseEntityWithoutWrapper(exception, LOGIN_CREDENTIAL_DOWNLOAD_EXCEPTION.getCode(), HttpStatus.BAD_REQUEST, MediaType.APPLICATION_JSON); + } + } + + @GetMapping + public ResponseEntity fetchAllCredentialsForGivenWallet(@PathVariable("walletId") String walletId, @RequestParam("locale") String locale, HttpSession httpSession) { + try { + log.info("Fetching all credentials for walletId: {}", walletId); + String walletKey = httpSession.getAttribute("wallet_key").toString(); + List credentials = walletCredentialService.fetchAllCredentialsForWallet(walletId, walletKey, locale); + return ResponseEntity.status(HttpStatus.OK).body(credentials); + } catch (DataAccessResourceFailureException exception) { + log.error("Exception occurred while connecting to the database to fetch all credentials for walletId: {}", walletId, exception); + DatabaseConnectionException connectionException = new DatabaseConnectionException(DATABASE_CONNECTION_EXCEPTION.getCode(), DATABASE_CONNECTION_EXCEPTION.getMessage(), DatabaseEntity.VERIFIABLECREDENTIAL, DatabaseOperation.FETCHING, HttpStatus.INTERNAL_SERVER_ERROR); + return Utilities.getErrorResponseEntityWithoutWrapper(connectionException, DATABASE_CONNECTION_EXCEPTION.getCode(), connectionException.getStatus(), MediaType.APPLICATION_JSON); + } catch (Exception exception) { + log.error("Exception occurred while downloading or saving the Verifiable Credential:", exception); + return Utilities.getErrorResponseEntityWithoutWrapper(exception, CREDENTIALS_FETCH_EXCEPTION.getCode(), HttpStatus.BAD_REQUEST, MediaType.APPLICATION_JSON); + } + } +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/dbentity/CredentialMetadata.java b/src/main/java/io/mosip/mimoto/dbentity/CredentialMetadata.java new file mode 100644 index 000000000..30b29a2fa --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dbentity/CredentialMetadata.java @@ -0,0 +1,10 @@ +package io.mosip.mimoto.dbentity; + +import lombok.Data; + +@Data +public class CredentialMetadata { + private Boolean isVerified; + private String issuerId; + private String credentialType; +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/dbentity/VerifiableCredential.java b/src/main/java/io/mosip/mimoto/dbentity/VerifiableCredential.java index bd4b42ba5..4c624af8b 100644 --- a/src/main/java/io/mosip/mimoto/dbentity/VerifiableCredential.java +++ b/src/main/java/io/mosip/mimoto/dbentity/VerifiableCredential.java @@ -3,11 +3,12 @@ import jakarta.persistence.*; import lombok.Getter; import lombok.Setter; -import org.hibernate.annotations.GenericGenerator; - +import org.hibernate.annotations.JdbcTypeCode; +import org.hibernate.type.SqlTypes; import java.time.Instant; @Entity +@Table(name = "verifiable_credentials") @Getter @Setter public class VerifiableCredential { @@ -16,18 +17,15 @@ public class VerifiableCredential { @Column(length = 36, updatable = false, nullable = false) private String id; - @ManyToOne - @JoinColumn(name = "wallet_id", nullable = false) // Foreign key reference to wallet table - private Wallet wallet; + @Column(name = "wallet_id", nullable = false) + private String walletId; @Column(nullable = false, columnDefinition = "TEXT") - private String credential; // Encrypted credential - - @Column(nullable = false, length = 255) - private String credentialFormat; // Format of the credential (JSON, JWT, etc.) + private String credential; + @JdbcTypeCode(SqlTypes.JSON) @Column(nullable = false, columnDefinition = "jsonb") - private String credentialMetadata; // Additional metadata for the credential + private CredentialMetadata credentialMetadata; @Column(nullable = false, updatable = false) private Instant createdAt = Instant.now(); diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/VerifiableCredentialResponseDTO.java b/src/main/java/io/mosip/mimoto/dto/mimoto/VerifiableCredentialResponseDTO.java new file mode 100644 index 000000000..1e3f68eed --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/VerifiableCredentialResponseDTO.java @@ -0,0 +1,30 @@ +package io.mosip.mimoto.dto.mimoto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class VerifiableCredentialResponseDTO { + @JsonProperty("issuer_name") + @Schema(description = "Name of the issuer") + private String issuerName; + + @JsonProperty("issuer_logo") + @Schema(description = "logo of the issuer") + private String issuerLogo; + + @JsonProperty("credential_type") + @Schema(description = "Name of the credential type") + private String credentialType; + + @JsonProperty("credential_type_logo") + @Schema(description = "logo of the credential type") + private String credentialTypeLogo; + + @JsonProperty("credential_id") + @Schema(description = "Unique Identifier of the Credential in database") + private String credentialId; +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/exception/DatabaseConnectionException.java b/src/main/java/io/mosip/mimoto/exception/DatabaseConnectionException.java new file mode 100644 index 000000000..9ea1b9031 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/exception/DatabaseConnectionException.java @@ -0,0 +1,19 @@ +package io.mosip.mimoto.exception; + +import io.mosip.mimoto.model.DatabaseEntity; +import io.mosip.mimoto.model.DatabaseOperation; +import org.springframework.http.HttpStatus; + +public class DatabaseConnectionException extends BaseCheckedException { + private final HttpStatus status; + + public DatabaseConnectionException(String code, String message, DatabaseEntity entity, DatabaseOperation flow, HttpStatus status) { + super(code, String.format("%s while %s %s data into the database", message, flow.getValue(), entity.getValue())); + this.status = status; + } + + public HttpStatus getStatus() { + return status; + } +} + diff --git a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java index 6fd4ff091..478c19005 100644 --- a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java +++ b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java @@ -99,7 +99,9 @@ public enum PlatformErrorMessages { USER_METADATA_FETCH_EXCEPTION(PlatformConstants.PREFIX + "049", "Failed to fetch the User metadata from database"), USER_WALLET_CREATION_EXCEPTION(PlatformConstants.PREFIX + "050", "Exception occurred when creating the wallet for user"), USER_WALLET_RETRIEVAL_EXCEPTION(PlatformConstants.PREFIX + "051", "Exception occurred when creating the wallet for user"), - USER_METADATA_CACHE_FETCH_EXCEPTION(PlatformConstants.PREFIX + "052", "Failed to fetch the User metadata from cache"); + USER_METADATA_CACHE_FETCH_EXCEPTION(PlatformConstants.PREFIX + "052", "Failed to fetch the User metadata from cache"), + LOGIN_CREDENTIAL_DOWNLOAD_EXCEPTION(PlatformConstants.PREFIX + "052", "Exception occurred when downloading and storing the credential"), + CREDENTIALS_FETCH_EXCEPTION(PlatformConstants.PREFIX + "053", "Exception occurred when fetch credentials for the specified wallet"); /** The error message. */ private final String errorMessage; diff --git a/src/main/java/io/mosip/mimoto/model/DatabaseEntity.java b/src/main/java/io/mosip/mimoto/model/DatabaseEntity.java new file mode 100644 index 000000000..350b2a882 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/model/DatabaseEntity.java @@ -0,0 +1,16 @@ +package io.mosip.mimoto.model; + +public enum DatabaseEntity { + USERMETADATA("User Metadata"), + VERIFIABLECREDENTIAL("Verifiable Credential"); + + private final String value; + + DatabaseEntity(String value) { + this.value = value; + } + + public String getValue() { + return value; + } +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/model/DatabaseOperation.java b/src/main/java/io/mosip/mimoto/model/DatabaseOperation.java new file mode 100644 index 000000000..5fd0b9684 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/model/DatabaseOperation.java @@ -0,0 +1,15 @@ +package io.mosip.mimoto.model; + +public enum DatabaseOperation { + FETCHING("Fetching"), + STORING("Storing"); + private final String operation; + + DatabaseOperation(String operation) { + this.operation = operation; + } + + public String getValue() { + return operation; + } +} diff --git a/src/main/java/io/mosip/mimoto/repository/WalletCredentialsRepository.java b/src/main/java/io/mosip/mimoto/repository/WalletCredentialsRepository.java new file mode 100644 index 000000000..ce5c265ea --- /dev/null +++ b/src/main/java/io/mosip/mimoto/repository/WalletCredentialsRepository.java @@ -0,0 +1,11 @@ +package io.mosip.mimoto.repository; + +import io.mosip.mimoto.dbentity.VerifiableCredential; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; +import java.util.List; + +@Repository +public interface WalletCredentialsRepository extends JpaRepository { + List findByWalletId(String walletId); +} diff --git a/src/main/java/io/mosip/mimoto/service/CredentialService.java b/src/main/java/io/mosip/mimoto/service/CredentialService.java index 5d24cc5c8..fc867c80d 100644 --- a/src/main/java/io/mosip/mimoto/service/CredentialService.java +++ b/src/main/java/io/mosip/mimoto/service/CredentialService.java @@ -1,15 +1,7 @@ package io.mosip.mimoto.service; import io.mosip.mimoto.dto.idp.TokenResponseDTO; -import io.mosip.mimoto.exception.ApiNotAccessibleException; -import io.mosip.mimoto.exception.AuthorizationServerWellknownResponseException; -import io.mosip.mimoto.exception.InvalidWellknownResponseException; - import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.util.Map; public interface CredentialService { - TokenResponseDTO getTokenResponse(Map params, String issuerId) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException; - ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String credentialType, TokenResponseDTO response, String credentialValidity, String locale) throws Exception; } diff --git a/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java b/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java new file mode 100644 index 000000000..d36fea29e --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java @@ -0,0 +1,11 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.dto.idp.TokenResponseDTO; +import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; +import java.util.List; + +public interface WalletCredentialService { + VerifiableCredentialResponseDTO fetchAndStoreCredential(String issuerId, String credentialType, TokenResponseDTO response, String credentialValidity, String locale, String walletId, String walletKey) throws Exception; + + List fetchAllCredentialsForWallet(String walletId, String walletKey, String locale); +} diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java index 8483eba14..373125370 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java @@ -18,16 +18,10 @@ import io.mosip.mimoto.exception.*; import io.mosip.mimoto.model.QRCodeType; import io.mosip.mimoto.service.CredentialService; -import io.mosip.mimoto.service.IdpService; import io.mosip.mimoto.service.IssuersService; -import io.mosip.mimoto.util.JoseUtil; -import io.mosip.mimoto.util.LocaleUtils; -import io.mosip.mimoto.util.RestApiClient; -import io.mosip.mimoto.util.Utilities; +import io.mosip.mimoto.util.*; import io.mosip.pixelpass.PixelPass; import io.mosip.vercred.vcverifier.CredentialsVerifier; -import io.mosip.vercred.vcverifier.constants.CredentialFormat; -import io.mosip.vercred.vcverifier.data.VerificationResult; import jakarta.annotation.PostConstruct; import lombok.extern.slf4j.Slf4j; import org.apache.velocity.VelocityContext; @@ -35,12 +29,8 @@ import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.http.HttpEntity; -import org.springframework.http.MediaType; import org.springframework.stereotype.Service; -import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; - import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -50,7 +40,6 @@ import java.nio.charset.StandardCharsets; import java.util.*; import java.util.stream.Collectors; - import static io.mosip.mimoto.exception.ErrorConstants.*; @Slf4j @@ -60,11 +49,6 @@ public class CredentialServiceImpl implements CredentialService { @Autowired private Utilities utilities; - @Autowired - private JoseUtil joseUtil; - - @Autowired - private RestApiClient restApiClient; @Autowired IssuersService issuersService; @@ -75,9 +59,6 @@ public class CredentialServiceImpl implements CredentialService { @Autowired ObjectMapper objectMapper; - @Autowired - IdpService idpService; - @Autowired RestTemplate restTemplate; @@ -99,25 +80,15 @@ public class CredentialServiceImpl implements CredentialService { PixelPass pixelPass; CredentialsVerifier credentialsVerifier; + @Autowired + private CredentialUtilService credentialUtilService; + @PostConstruct public void init() { pixelPass = new PixelPass(); credentialsVerifier = new CredentialsVerifier(); } - @Override - public TokenResponseDTO getTokenResponse(Map params, String issuerId) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { - IssuerDTO issuerDTO = issuersService.getIssuerDetails(issuerId); - CredentialIssuerConfiguration credentialIssuerConfiguration = issuersService.getIssuerConfiguration(issuerId); - String tokenEndpoint = idpService.getTokenEndpoint(credentialIssuerConfiguration); - HttpEntity> request = idpService.constructGetTokenRequest(params, issuerDTO, tokenEndpoint); - TokenResponseDTO response = restTemplate.postForObject(tokenEndpoint, request, TokenResponseDTO.class); - if (response == null) { - throw new IdpException("Exception occurred while performing the authorization"); - } - return response; - } - @Override public ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String credentialType, TokenResponseDTO response, String credentialValidity, String locale) throws Exception { IssuerDTO issuerDTO = issuersService.getIssuerDetails(issuerId); @@ -128,9 +99,9 @@ public ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String cred credentialIssuerConfiguration.getCredentialEndPoint(), credentialIssuerConfiguration.getCredentialConfigurationsSupported()); CredentialsSupportedResponse credentialsSupportedResponse = credentialIssuerWellKnownResponse.getCredentialConfigurationsSupported().get(credentialType); - VCCredentialRequest vcCredentialRequest = generateVCCredentialRequest(issuerDTO, credentialIssuerWellKnownResponse, credentialsSupportedResponse, response.getAccess_token()); - VCCredentialResponse vcCredentialResponse = downloadCredential(credentialIssuerWellKnownResponse.getCredentialEndPoint(), vcCredentialRequest, response.getAccess_token()); - boolean verificationStatus = issuerId.toLowerCase().contains("mock") || verifyCredential(vcCredentialResponse); + VCCredentialRequest vcCredentialRequest = credentialUtilService.generateVCCredentialRequest(issuerDTO, credentialIssuerWellKnownResponse, credentialsSupportedResponse, response.getAccess_token()); + VCCredentialResponse vcCredentialResponse = credentialUtilService.downloadCredential(credentialIssuerWellKnownResponse.getCredentialEndPoint(), vcCredentialRequest, response.getAccess_token()); + boolean verificationStatus = issuerId.toLowerCase().contains("mock") || credentialUtilService.verifyCredential(vcCredentialResponse); if (verificationStatus) { String dataShareUrl = QRCodeType.OnlineSharing.equals(issuerDTO.getQr_code_type()) ? dataShareService.storeDataInDataShare(objectMapper.writeValueAsString(vcCredentialResponse), credentialValidity) : ""; return generatePdfForVerifiableCredentials(credentialType, vcCredentialResponse, issuerDTO, credentialsSupportedResponse, dataShareUrl, credentialValidity, locale); @@ -139,46 +110,12 @@ public ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String cred SIGNATURE_VERIFICATION_EXCEPTION.getErrorMessage()); } - public VCCredentialResponse downloadCredential(String credentialEndpoint, VCCredentialRequest vcCredentialRequest, String accessToken) throws InvalidCredentialResourceException { - VCCredentialResponse vcCredentialResponse = restApiClient.postApi(credentialEndpoint, MediaType.APPLICATION_JSON, - vcCredentialRequest, VCCredentialResponse.class, accessToken); - log.debug("VC Credential Response is -> " + vcCredentialResponse); - if (vcCredentialResponse == null) throw new RuntimeException("VC Credential Issue API not accessible"); - return vcCredentialResponse; - } - - public VCCredentialRequest generateVCCredentialRequest(IssuerDTO issuerDTO, CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse, CredentialsSupportedResponse credentialsSupportedResponse, String accessToken) throws Exception { - String jwt = joseUtil.generateJwt(credentialIssuerWellKnownResponse.getCredentialIssuer(), issuerDTO.getClient_id(), accessToken); - return VCCredentialRequest.builder() - .format(credentialsSupportedResponse.getFormat()) - .proof(VCCredentialRequestProof.builder() - .proofType(credentialsSupportedResponse.getProofTypesSupported().keySet().stream().findFirst().get()) - .jwt(jwt) - .build()) - .credentialDefinition(VCCredentialDefinition.builder() - .type(credentialsSupportedResponse.getCredentialDefinition().getType()) - .context(List.of("https://www.w3.org/2018/credentials/v1")) - .build()) - .build(); - } - public ByteArrayInputStream generatePdfForVerifiableCredentials(String credentialType, VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String dataShareUrl, String credentialValidity, String locale) throws Exception { LinkedHashMap> displayProperties = loadDisplayPropertiesFromWellknown(vcCredentialResponse, credentialsSupportedResponse, locale); Map data = getPdfResourceFromVcProperties(displayProperties, credentialsSupportedResponse, vcCredentialResponse, issuerDTO, dataShareUrl, credentialValidity); return renderVCInCredentialTemplate(data, issuerDTO.getIssuer_id(), credentialType); } - public Boolean verifyCredential(VCCredentialResponse vcCredentialResponse) throws VCVerificationException, JsonProcessingException { - log.info("Initiated the VC Verification : Started"); - String credentialString = objectMapper.writeValueAsString(vcCredentialResponse.getCredential()); - VerificationResult verificationResult = credentialsVerifier.verify(credentialString, CredentialFormat.LDP_VC); - if (!verificationResult.getVerificationStatus()) { - throw new VCVerificationException(verificationResult.getVerificationErrorCode().toLowerCase(), verificationResult.getVerificationMessage()); - } - log.info("Completed the VC Verification : Completed -> result : " + verificationResult); - return true; - } - @NotNull private static LinkedHashMap> loadDisplayPropertiesFromWellknown(VCCredentialResponse vcCredentialResponse, CredentialsSupportedResponse credentialsSupportedResponse, String userLocale) { LinkedHashMap> displayProperties = new LinkedHashMap<>(); diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java new file mode 100644 index 000000000..e6a895343 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java @@ -0,0 +1,198 @@ +package io.mosip.mimoto.service.impl; + +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.kernel.cryptomanager.dto.CryptoWithPinRequestDto; +import io.mosip.kernel.cryptomanager.service.CryptomanagerService; +import io.mosip.mimoto.dbentity.CredentialMetadata; +import io.mosip.mimoto.dbentity.VerifiableCredential; +import io.mosip.mimoto.dto.DisplayDTO; +import io.mosip.mimoto.dto.IssuerDTO; +import io.mosip.mimoto.dto.idp.TokenResponseDTO; +import io.mosip.mimoto.dto.mimoto.*; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.AuthorizationServerWellknownResponseException; +import io.mosip.mimoto.exception.InvalidWellknownResponseException; +import io.mosip.mimoto.repository.WalletCredentialsRepository; +import io.mosip.mimoto.service.IdpService; +import io.mosip.mimoto.service.IssuersService; +import io.mosip.mimoto.service.WalletCredentialService; +import io.mosip.mimoto.util.*; +import io.mosip.pixelpass.PixelPass; +import io.mosip.vercred.vcverifier.CredentialsVerifier; +import jakarta.annotation.PostConstruct; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; + +import java.io.IOException; +import java.util.List; +import java.util.UUID; + +import static io.mosip.mimoto.util.LocaleUtils.getCredentialDisplayDTOBasedOnLocale; +import static io.mosip.mimoto.util.LocaleUtils.getIssuerDisplayDTOBasedOnLocale; + +@Slf4j +@Service +public class WalletCredentialServiceImpl implements WalletCredentialService { + @Autowired + IssuersService issuersService; + + @Autowired + DataShareServiceImpl dataShareService; + + @Autowired + ObjectMapper objectMapper; + + @Autowired + IdpService idpService; + + @Autowired + RestTemplate restTemplate; + + @Value("${mosip.inji.ovp.qrdata.pattern}") + String ovpQRDataPattern; + + @Value("${mosip.inji.qr.code.height:500}") + Integer qrCodeHeight; + + @Value("${mosip.inji.qr.code.width:500}") + Integer qrCodeWidth; + + @Value("${mosip.inji.qr.data.size.limit:2000}") + Integer allowedQRDataSizeLimit; + + @Autowired + PresentationServiceImpl presentationService; + + @Autowired + private CryptomanagerService cryptomanagerService; + + @Autowired + private WalletCredentialsRepository walletCredentialsRepository; + + @Autowired + private CredentialUtilService credentialUtilService; + + PixelPass pixelPass; + CredentialsVerifier credentialsVerifier; + + @PostConstruct + public void init() { + pixelPass = new PixelPass(); + credentialsVerifier = new CredentialsVerifier(); + } + + @Override + public VerifiableCredentialResponseDTO fetchAndStoreCredential( + String issuerId, String credentialType, TokenResponseDTO response, + String credentialValidity, String locale, String walletId, String walletKey) throws Exception { + + // Fetch issuer configuration + IssuerDTO issuerDTO = issuersService.getIssuerDetails(issuerId); + CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = getIssuerWellKnownResponse(issuerId); + CredentialsSupportedResponse credentialsSupportedResponse = credentialIssuerWellKnownResponse.getCredentialConfigurationsSupported().get(credentialType); + + // Generate credential request and download credential + VCCredentialRequest vcCredentialRequest = credentialUtilService.generateVCCredentialRequest(issuerDTO, credentialIssuerWellKnownResponse, credentialsSupportedResponse, response.getAccess_token()); + VCCredentialResponse vcCredentialResponse = credentialUtilService.downloadCredential(credentialIssuerWellKnownResponse.getCredentialEndPoint(), vcCredentialRequest, response.getAccess_token()); + boolean verificationStatus = issuerId.toLowerCase().contains("mock") || credentialUtilService.verifyCredential(vcCredentialResponse); + + // Encrypt and store credential response into database + String encryptedCredentialData = encryptCredential(vcCredentialResponse.toString(), walletKey); + VerifiableCredential savedCredential = saveCredential(walletId, encryptedCredentialData, verificationStatus, issuerId, credentialType ); + + // Build and return response DTO + return buildCredentialResponseDTO(issuerDTO, credentialsSupportedResponse, locale, savedCredential.getId()); + } + + @Override + public List fetchAllCredentialsForWallet(String walletId, String walletKey, String locale) { + List credentials = walletCredentialsRepository.findByWalletId(walletId); + + return credentials.stream().map(credentialRecord -> { + try { + String issuerId = credentialRecord.getCredentialMetadata().getIssuerId(); + IssuerDTO issuerDTO = issuersService.getIssuerDetails(issuerId); + CredentialIssuerWellKnownResponse wellKnownResponse = getIssuerWellKnownResponse(issuerId); + CredentialsSupportedResponse credentialsSupportedResponse = wellKnownResponse + .getCredentialConfigurationsSupported() + .get(credentialRecord.getCredentialMetadata().getCredentialType()); + + return buildCredentialResponseDTO(issuerDTO, credentialsSupportedResponse, locale, credentialRecord.getId()); + } catch (Exception e) { + log.info("Error occurred while fetching configuration of issuerId : {} for credentialId: {}", + credentialRecord.getCredentialMetadata().getIssuerId(), credentialRecord.getId(), e); + return buildCredentialResponseDTO(null, null, locale, credentialRecord.getId()); + } + }).toList(); + } + + + private CredentialIssuerWellKnownResponse getIssuerWellKnownResponse(String issuerId) throws AuthorizationServerWellknownResponseException, ApiNotAccessibleException, IOException, InvalidWellknownResponseException { + CredentialIssuerConfiguration credentialIssuerConfiguration = issuersService.getIssuerConfiguration(issuerId); + return new CredentialIssuerWellKnownResponse( + credentialIssuerConfiguration.getCredentialIssuer(), + credentialIssuerConfiguration.getAuthorizationServers(), + credentialIssuerConfiguration.getCredentialEndPoint(), + credentialIssuerConfiguration.getCredentialConfigurationsSupported() + ); + } + + private String encryptCredential(String credentialData, String walletKey) { + CryptoWithPinRequestDto requestDto = new CryptoWithPinRequestDto(); + requestDto.setUserPin(walletKey); + requestDto.setData(credentialData); + return cryptomanagerService.encryptWithPin(requestDto).getData(); + } + + private String decryptCredential(String encryptedCredentialData, String walletKey) { + CryptoWithPinRequestDto requestDto = new CryptoWithPinRequestDto(); + requestDto.setUserPin(walletKey); + requestDto.setData(encryptedCredentialData); + return cryptomanagerService.decryptWithPin(requestDto).getData(); + } + + private VerifiableCredential saveCredential(String walletId, String encryptedCredential, boolean isVerified, String issuerId, String credentialType) { + CredentialMetadata credentialMetadata = new CredentialMetadata(); + credentialMetadata.setIsVerified(isVerified); + credentialMetadata.setIssuerId(issuerId); + credentialMetadata.setCredentialType(credentialType); + + VerifiableCredential verifiableCredential = new VerifiableCredential(); + verifiableCredential.setId(UUID.randomUUID().toString()); + verifiableCredential.setWalletId(walletId); + verifiableCredential.setCredential(encryptedCredential); + verifiableCredential.setCredentialMetadata(credentialMetadata); + + return walletCredentialsRepository.save(verifiableCredential); + } + + private VerifiableCredentialResponseDTO buildCredentialResponseDTO(IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, + String locale, String credentialId) { + String issuerName = "", issuerLogo = "", credentialType = "", credentialTypeLogo = ""; + DisplayDTO issuerDisplayDTO; + CredentialSupportedDisplayResponse credentialTypeDisplayDTO; + + if (issuerDTO != null) { + issuerDisplayDTO = getIssuerDisplayDTOBasedOnLocale(issuerDTO.getDisplay(), locale); + issuerName = issuerDisplayDTO.getName(); + issuerLogo = issuerDisplayDTO.getLogo().getUrl(); + } + if (credentialsSupportedResponse != null) { + credentialTypeDisplayDTO = getCredentialDisplayDTOBasedOnLocale( + credentialsSupportedResponse.getDisplay(), locale); + credentialType = credentialTypeDisplayDTO.getName(); + credentialTypeLogo = credentialTypeDisplayDTO.getLogo().getUrl(); + } + + return VerifiableCredentialResponseDTO.builder() + .issuerName(issuerName) + .issuerLogo(issuerLogo) + .credentialType(credentialType) + .credentialTypeLogo(credentialTypeLogo) + .credentialId(credentialId) + .build(); + } +} diff --git a/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java b/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java new file mode 100644 index 000000000..4c0b0de4a --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java @@ -0,0 +1,100 @@ +package io.mosip.mimoto.util; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.dto.IssuerDTO; +import io.mosip.mimoto.dto.idp.TokenResponseDTO; +import io.mosip.mimoto.dto.mimoto.*; +import io.mosip.mimoto.exception.*; +import io.mosip.mimoto.service.IdpService; +import io.mosip.mimoto.service.IssuersService; +import io.mosip.vercred.vcverifier.CredentialsVerifier; +import io.mosip.vercred.vcverifier.constants.CredentialFormat; +import io.mosip.vercred.vcverifier.data.VerificationResult; +import jakarta.annotation.PostConstruct; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpEntity; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Service; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestTemplate; +import java.io.IOException; +import java.util.List; +import java.util.Map; + +@Slf4j +@Service +public class CredentialUtilService { + @Autowired + IdpService idpService; + + @Autowired + RestTemplate restTemplate; + + @Autowired + IssuersService issuersService; + + @Autowired + RestApiClient restApiClient; + + @Autowired + JoseUtil joseUtil; + + CredentialsVerifier credentialsVerifier; + + @PostConstruct + public void init() { + credentialsVerifier = new CredentialsVerifier(); + } + + @Autowired + ObjectMapper objectMapper; + + public TokenResponseDTO getTokenResponse(Map params, String issuerId) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { + IssuerDTO issuerDTO = issuersService.getIssuerDetails(issuerId); + CredentialIssuerConfiguration credentialIssuerConfiguration = issuersService.getIssuerConfiguration(issuerId); + String tokenEndpoint = idpService.getTokenEndpoint(credentialIssuerConfiguration); + HttpEntity> request = idpService.constructGetTokenRequest(params, issuerDTO, tokenEndpoint); + TokenResponseDTO response = restTemplate.postForObject(tokenEndpoint, request, TokenResponseDTO.class); + if (response == null) { + throw new IdpException("Exception occurred while performing the authorization"); + } + return response; + } + + public VCCredentialResponse downloadCredential(String credentialEndpoint, VCCredentialRequest vcCredentialRequest, String accessToken) throws InvalidCredentialResourceException { + VCCredentialResponse vcCredentialResponse = restApiClient.postApi(credentialEndpoint, MediaType.APPLICATION_JSON, + vcCredentialRequest, VCCredentialResponse.class, accessToken); + log.debug("VC Credential Response is -> " + vcCredentialResponse); + if (vcCredentialResponse == null) throw new RuntimeException("VC Credential Issue API not accessible"); + return vcCredentialResponse; + } + + public VCCredentialRequest generateVCCredentialRequest(IssuerDTO issuerDTO, CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse, CredentialsSupportedResponse credentialsSupportedResponse, String accessToken) throws Exception { + String jwt = joseUtil.generateJwt(credentialIssuerWellKnownResponse.getCredentialIssuer(), issuerDTO.getClient_id(), accessToken); + return VCCredentialRequest.builder() + .format(credentialsSupportedResponse.getFormat()) + .proof(VCCredentialRequestProof.builder() + .proofType(credentialsSupportedResponse.getProofTypesSupported().keySet().stream().findFirst().get()) + .jwt(jwt) + .build()) + .credentialDefinition(VCCredentialDefinition.builder() + .type(credentialsSupportedResponse.getCredentialDefinition().getType()) + .context(List.of("https://www.w3.org/2018/credentials/v1")) + .build()) + .build(); + } + + public Boolean verifyCredential(VCCredentialResponse vcCredentialResponse) throws VCVerificationException, JsonProcessingException { + log.info("Initiated the VC Verification : Started"); + String credentialString = objectMapper.writeValueAsString(vcCredentialResponse.getCredential()); + VerificationResult verificationResult = credentialsVerifier.verify(credentialString, CredentialFormat.LDP_VC); + if (!verificationResult.getVerificationStatus()) { + throw new VCVerificationException(verificationResult.getVerificationErrorCode().toLowerCase(), verificationResult.getVerificationMessage()); + } + log.info("Completed the VC Verification : Completed -> result : " + verificationResult); + return true; + } +} + diff --git a/src/main/java/io/mosip/mimoto/util/LocaleUtils.java b/src/main/java/io/mosip/mimoto/util/LocaleUtils.java index cb960360b..0c8ceff54 100644 --- a/src/main/java/io/mosip/mimoto/util/LocaleUtils.java +++ b/src/main/java/io/mosip/mimoto/util/LocaleUtils.java @@ -1,7 +1,9 @@ package io.mosip.mimoto.util; +import io.mosip.mimoto.dto.DisplayDTO; import io.mosip.mimoto.dto.mimoto.CredentialDisplayResponseDto; import io.mosip.mimoto.dto.mimoto.CredentialIssuerDisplayResponse; +import io.mosip.mimoto.dto.mimoto.CredentialSupportedDisplayResponse; import java.util.List; import java.util.Locale; @@ -44,4 +46,26 @@ public static String resolveLocaleWithFallback(Map displayDTOList, String locale) { + if (displayDTOList == null || displayDTOList.isEmpty()) { + return null; + } + + return displayDTOList.stream() + .filter(obj -> matchesLocale(obj.getLanguage(), locale)) + .findFirst() + .orElse(displayDTOList.get(0)); // Return first display object if no match is found for the received locale + } + + public static CredentialSupportedDisplayResponse getCredentialDisplayDTOBasedOnLocale(List displayDTOList, String locale) { + if (displayDTOList == null || displayDTOList.isEmpty()) { + return null; + } + + return displayDTOList.stream() + .filter(obj -> matchesLocale(obj.getLocale(), locale)) + .findFirst() + .orElse(displayDTOList.get(0)); // Return first display object if no match is found for the received locale + } } diff --git a/src/test/java/io/mosip/mimoto/controller/CredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/CredentialsControllerTest.java index 5710b0ae2..d75359087 100644 --- a/src/test/java/io/mosip/mimoto/controller/CredentialsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/CredentialsControllerTest.java @@ -3,6 +3,7 @@ import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.exception.*; import io.mosip.mimoto.service.impl.CredentialServiceImpl; +import io.mosip.mimoto.util.CredentialUtilService; import io.mosip.mimoto.util.TestUtilities; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.message.BasicNameValuePair; @@ -39,13 +40,16 @@ public class CredentialsControllerTest { @MockBean private CredentialServiceImpl credentialService; + @MockBean + private CredentialUtilService credentialUtilService; + private String locale = "test-local", issuer = "test-issuer", credential = "test-credential", requestContent; private TokenResponseDTO tokenResponseDTO; @Before public void setUp() throws Exception { tokenResponseDTO = TestUtilities.getTokenResponseDTO(); - Mockito.when(credentialService.getTokenResponse(Mockito.anyMap(), Mockito.eq(issuer))).thenReturn(tokenResponseDTO); + Mockito.when(credentialUtilService.getTokenResponse(Mockito.anyMap(), Mockito.eq(issuer))).thenReturn(tokenResponseDTO); requestContent = EntityUtils.toString(new UrlEncodedFormEntity(List.of( new BasicNameValuePair("grant_type", "authorization_code"), new BasicNameValuePair("code", "test-code"), @@ -72,7 +76,7 @@ public void downloadPDFSuccessfully() throws Exception { @Test public void throwExceptionOnFetchingTokenResponseFailure() throws Exception { - Mockito.when(credentialService.getTokenResponse(Mockito.anyMap(), Mockito.eq(issuer))) + Mockito.when(credentialUtilService.getTokenResponse(Mockito.anyMap(), Mockito.eq(issuer))) .thenThrow(new IdpException("Exception occurred while performing the authorization")); mockMvc.perform(post("/credentials/download") @@ -86,7 +90,7 @@ public void throwExceptionOnFetchingTokenResponseFailure() throws Exception { @Test public void throwExceptionOnFetchingIssuerOrAuthServerWellknownFailureDuringTokenGeneration() throws Exception { - Mockito.when(credentialService.getTokenResponse(Mockito.anyMap(), Mockito.eq(issuer))) + Mockito.when(credentialUtilService.getTokenResponse(Mockito.anyMap(), Mockito.eq(issuer))) .thenThrow(new ApiNotAccessibleException()); mockMvc.perform(post("/credentials/download") diff --git a/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java b/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java index efc949361..1347dd301 100644 --- a/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java @@ -9,10 +9,7 @@ import io.mosip.mimoto.service.impl.CredentialServiceImpl; import io.mosip.mimoto.service.impl.IdpServiceImpl; import io.mosip.mimoto.service.impl.IssuersServiceImpl; -import io.mosip.mimoto.util.DateUtils; -import io.mosip.mimoto.util.JoseUtil; -import io.mosip.mimoto.util.RequestValidator; -import io.mosip.mimoto.util.RestApiClient; +import io.mosip.mimoto.util.*; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; @@ -65,7 +62,8 @@ public class IdpControllerTest { private IdpServiceImpl idpService; @MockBean - private CredentialServiceImpl credentialService; + private CredentialUtilService credentialUtilService; + @Test public void otpRequestTest() throws Exception { @@ -128,7 +126,7 @@ public void walletBindingTest() throws Exception { @Test public void shouldReturnTokenResponseForValidIssuerAndParams() throws Exception { String issuer = "test-issuer"; - Mockito.when(credentialService.getTokenResponse(Mockito.anyMap(), Mockito.eq(issuer))).thenReturn(getTokenResponseDTO()); + Mockito.when(credentialUtilService.getTokenResponse(Mockito.anyMap(), Mockito.eq(issuer))).thenReturn(getTokenResponseDTO()); mockMvc.perform(post("/get-token/{issuer}", issuer) .contentType(MediaType.APPLICATION_FORM_URLENCODED) @@ -153,7 +151,7 @@ public void shouldReturnTokenResponseForValidIssuerAndParams() throws Exception @Test public void shouldReturnBadRequestWithErrorIfTokenResponseIsNull() throws Exception { String issuer = "test-issuer"; - Mockito.when(credentialService.getTokenResponse(Mockito.anyMap(), Mockito.eq(issuer))) + Mockito.when(credentialUtilService.getTokenResponse(Mockito.anyMap(), Mockito.eq(issuer))) .thenThrow(new IdpException("Exception occurred while performing the authorization")); mockMvc.perform(post("/get-token/{issuer}", issuer) diff --git a/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java index 8786f60d2..02eb63e29 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java @@ -1,6 +1,5 @@ package io.mosip.mimoto.service; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; @@ -10,13 +9,8 @@ import io.mosip.mimoto.service.impl.CredentialServiceImpl; import io.mosip.mimoto.service.impl.IdpServiceImpl; import io.mosip.mimoto.service.impl.IssuersServiceImpl; -import io.mosip.mimoto.util.JoseUtil; -import io.mosip.mimoto.util.RestApiClient; -import io.mosip.mimoto.util.TestUtilities; -import io.mosip.mimoto.util.Utilities; +import io.mosip.mimoto.util.*; import io.mosip.vercred.vcverifier.CredentialsVerifier; -import io.mosip.vercred.vcverifier.constants.CredentialFormat; -import io.mosip.vercred.vcverifier.data.VerificationResult; import lombok.extern.slf4j.Slf4j; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; @@ -30,7 +24,6 @@ import org.mockito.junit.MockitoJUnitRunner; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.HttpEntity; -import org.springframework.http.MediaType; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; @@ -44,7 +37,7 @@ import static io.mosip.mimoto.util.TestUtilities.*; import static org.junit.Assert.*; import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) @SpringBootTest @@ -53,11 +46,15 @@ public class CredentialServiceTest { @Mock CredentialsVerifier credentialsVerifier; + @Mock ObjectMapper objectMapper; - @Spy + @InjectMocks - CredentialServiceImpl credentialService = new CredentialServiceImpl(); + CredentialServiceImpl credentialService; + + @Mock + CredentialUtilService credentialUtilService; @Mock IssuersServiceImpl issuersService; @@ -77,11 +74,6 @@ public class CredentialServiceTest { @Mock Utilities utilities; - private Map tokenRequestParams = Map.of( - "grant_type", "client_credentials", - "client_id", "test-client" - ); - TokenResponseDTO expectedTokenResponse; String tokenEndpoint, issuerId, expectedExceptionMsg; IssuerDTO issuerDTO; @@ -103,13 +95,6 @@ public void setUp() throws Exception { "client_id", List.of("test-client") ))); expectedTokenResponse = getTokenResponseDTO(); - - Mockito.when(idpService.constructGetTokenRequest(tokenRequestParams, issuerDTO, tokenEndpoint)) - .thenReturn(mockRequest); - Mockito.when(idpService.getTokenEndpoint(issuerConfig)) - .thenReturn(tokenEndpoint); - Mockito.when(restTemplate.postForObject(tokenEndpoint, mockRequest, TokenResponseDTO.class)) - .thenReturn(expectedTokenResponse); } @Test @@ -125,124 +110,19 @@ public void shouldParseHtmlStringToDocument() { assertTrue(mergedHtml.contains("PDF")); } - - @Test - public void shouldReturnTrueIfAValidCredentialIsPassedForVerification() throws VCVerificationException, JsonProcessingException { - VCCredentialResponse vc = TestUtilities.getVCCredentialResponseDTO("ed25519Signature2020"); - VerificationResult verificationResult = new VerificationResult(true, "", ""); - Mockito.when(credentialsVerifier.verify(any(String.class), eq(CredentialFormat.LDP_VC))).thenReturn(verificationResult); - Mockito.when(objectMapper.writeValueAsString(vc.getCredential())).thenReturn("vc"); - Boolean verificationStatus = credentialService.verifyCredential(vc); - - assertTrue(verificationStatus); - } - - @Test - public void shouldThrowExceptionIfInvalidCredentialIsPassedForVerification() throws VCVerificationException, JsonProcessingException { - VCCredentialResponse vc = TestUtilities.getVCCredentialResponseDTO("ed25519Signature2020"); - VerificationResult verificationResult = new VerificationResult(false, "Verification failed for the provided credentials", "Verification Failed!"); - Mockito.when(credentialsVerifier.verify(any(String.class), eq(CredentialFormat.LDP_VC))).thenReturn(verificationResult); - Mockito.when(objectMapper.writeValueAsString(vc.getCredential())).thenReturn("vc"); - expectedExceptionMsg = "verification failed! --> Verification failed for the provided credentials"; - - VCVerificationException actualException = assertThrows(VCVerificationException.class, () -> - credentialService.verifyCredential(vc) - ); - - assertEquals(expectedExceptionMsg, actualException.getMessage()); - } - - @Test - public void shouldReturnTokenResponseForValidTokenEndpoint() throws Exception { - - TokenResponseDTO actualTokenResponse = credentialService.getTokenResponse(tokenRequestParams, "issuer1"); - - assertEquals(expectedTokenResponse, actualTokenResponse); - } - - @Test - public void shouldThrowExceptionIfResponseIsNullWhenFetchingTokenResponse() throws Exception { - Mockito.when(restTemplate.postForObject(tokenEndpoint, mockRequest, TokenResponseDTO.class)) - .thenReturn(null); - - IdpException actualException = assertThrows(IdpException.class, () -> { - credentialService.getTokenResponse(tokenRequestParams, "issuer1"); - }); - - assertEquals("RESIDENT-APP-034 --> Exception occurred while performing the authorization", actualException.getMessage()); - } - - @Test - public void shouldThrowExceptionOnFetchingCredentialFromCredentialEndpointFailure() { - CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupportedResponse("CredentialType1"); - CredentialIssuerWellKnownResponse issuerWellKnownResponse = getCredentialIssuerWellKnownResponseDto(issuerId, Map.of("CredentialType1", credentialsSupportedResponse)); - VCCredentialRequest vcCredentialRequest = getVCCredentialRequestDTO(); - Mockito.when(restApiClient.postApi(issuerWellKnownResponse.getCredentialEndPoint(), MediaType.APPLICATION_JSON, vcCredentialRequest, VCCredentialResponse.class, "test-access-token")).thenReturn(null); - String credentialEndpoint = issuerWellKnownResponse.getCredentialEndPoint(); - expectedExceptionMsg = "VC Credential Issue API not accessible"; - - - RuntimeException actualException = assertThrows(RuntimeException.class, () -> { - credentialService.downloadCredential(credentialEndpoint, vcCredentialRequest, "test-access-token"); - }); - - assertEquals(expectedExceptionMsg, actualException.getMessage()); - } - - @Test - public void shouldReturnVCCredentialWhenCallingCredentialEndpointWithCredentialRequest() { - CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupportedResponse("CredentialType1"); - CredentialIssuerWellKnownResponse issuerWellKnownResponse = getCredentialIssuerWellKnownResponseDto(issuerId, Map.of("CredentialType1", credentialsSupportedResponse)); - VCCredentialRequest vcCredentialRequest = getVCCredentialRequestDTO(); - VCCredentialResponse expectedCredentialResponse = getVCCredentialResponseDTO("RSASignature2020"); - Mockito.when(restApiClient.postApi(issuerWellKnownResponse.getCredentialEndPoint(), MediaType.APPLICATION_JSON, vcCredentialRequest, VCCredentialResponse.class, "test-access-token")).thenReturn(expectedCredentialResponse); - - VCCredentialResponse actualCredentialResponse = credentialService.downloadCredential(issuerWellKnownResponse.getCredentialEndPoint(), vcCredentialRequest, "test-access-token"); - - assertEquals(expectedCredentialResponse, actualCredentialResponse); - } - - @Test - public void shouldGenerateVCCredentialRequestForProvidedIssuerAndCredentialType() throws Exception { - CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupportedResponse("CredentialType1"); - CredentialIssuerWellKnownResponse issuerWellKnownResponse = getCredentialIssuerWellKnownResponseDto(issuerId, Map.of("CredentialType1", credentialsSupportedResponse)); - VCCredentialRequest expectedVCCredentialRequest = getVCCredentialRequestDTO(); - Mockito.when(joseUtil.generateJwt(any(String.class), any(String.class), any(String.class))).thenReturn("jwt"); - - VCCredentialRequest actualVCCredentialRequest = credentialService.generateVCCredentialRequest(issuerDTO, issuerWellKnownResponse, credentialsSupportedResponse, "test-access-token"); - - assertEquals(expectedVCCredentialRequest, actualVCCredentialRequest); - } - - @Test - public void shouldThrowExceptionWhenInvalidAlgoIsProvidedForGeneratingJWTDuringCredentialRequestGeneration() throws Exception { - CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupportedResponse("CredentialType1"); - CredentialIssuerWellKnownResponse issuerWellKnownResponse = getCredentialIssuerWellKnownResponseDto(issuerId, Map.of("CredentialType1", credentialsSupportedResponse)); - Mockito.when(joseUtil.generateJwt(any(String.class), any(String.class), any(String.class))).thenThrow(new AssertionError("Unexpected algorithm type: dfs")); - - AssertionError actualError = assertThrows(AssertionError.class, () -> { - credentialService.generateVCCredentialRequest(issuerDTO, issuerWellKnownResponse, credentialsSupportedResponse, "test-access-token"); - }); - - assertEquals("Unexpected algorithm type: dfs", actualError.getMessage()); - } - @Test public void shouldThrowExceptionIfDownloadedVCSignatureVerificationFailed() throws Exception { Mockito.when(issuersService.getIssuerDetails(issuerId)).thenReturn(issuerDTO); Mockito.when(issuersService.getIssuerConfiguration(issuerId)).thenReturn(issuerConfig); - doReturn(getVCCredentialRequestDTO()).when(credentialService).generateVCCredentialRequest( - any(IssuerDTO.class), + when(credentialUtilService.generateVCCredentialRequest(any(IssuerDTO.class), any(CredentialIssuerWellKnownResponse.class), any(CredentialsSupportedResponse.class), - any(String.class) - ); + any(String.class))).thenReturn(getVCCredentialRequestDTO()); VCCredentialResponse vcCredentialResponse = getVCCredentialResponseDTO("CredentialType1"); - doReturn(vcCredentialResponse).when(credentialService).downloadCredential(any(String.class), + when(credentialUtilService.downloadCredential(any(String.class), any(VCCredentialRequest.class), - any(String.class)); - doReturn(false).when(credentialService).verifyCredential(vcCredentialResponse); - + any(String.class))).thenReturn(vcCredentialResponse); + when(credentialUtilService.verifyCredential(vcCredentialResponse)).thenReturn(false); VCVerificationException actualException = assertThrows(VCVerificationException.class, () -> credentialService.downloadCredentialAsPDF(issuerId, "CredentialType1", expectedTokenResponse, "once", "en")); @@ -253,17 +133,15 @@ public void shouldThrowExceptionIfDownloadedVCSignatureVerificationFailed() thro public void shouldReturnDownloadedVCAsPDFIfSignatureVerificationIsSuccessful() throws Exception { Mockito.when(issuersService.getIssuerDetails(issuerId)).thenReturn(issuerDTO); Mockito.when(issuersService.getIssuerConfiguration(issuerId)).thenReturn(issuerConfig); - doReturn(getVCCredentialRequestDTO()).when(credentialService).generateVCCredentialRequest( - any(IssuerDTO.class), + when(credentialUtilService.generateVCCredentialRequest(any(IssuerDTO.class), any(CredentialIssuerWellKnownResponse.class), any(CredentialsSupportedResponse.class), - any(String.class) - ); + any(String.class))).thenReturn(getVCCredentialRequestDTO()); VCCredentialResponse vcCredentialResponse = getVCCredentialResponseDTO("CredentialType1"); - doReturn(vcCredentialResponse).when(credentialService).downloadCredential(any(String.class), + when(credentialUtilService.downloadCredential(any(String.class), any(VCCredentialRequest.class), - any(String.class)); - doReturn(true).when(credentialService).verifyCredential(vcCredentialResponse); + any(String.class))).thenReturn(vcCredentialResponse); + when(credentialUtilService.verifyCredential(vcCredentialResponse)).thenReturn(true); issuerDTO.setQr_code_type(QRCodeType.None); Mockito.when(utilities.getCredentialSupportedTemplateString(issuerDTO.getIssuer_id(), "CredentialType1")).thenReturn("

PDF

"); ByteArrayInputStream expectedPDFByteArray = generatePdfFromHTML(); diff --git a/src/test/java/io/mosip/mimoto/service/CredentialUtilServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialUtilServiceTest.java new file mode 100644 index 000000000..b8d253acd --- /dev/null +++ b/src/test/java/io/mosip/mimoto/service/CredentialUtilServiceTest.java @@ -0,0 +1,196 @@ +package io.mosip.mimoto.service; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.dto.IssuerDTO; +import io.mosip.mimoto.dto.idp.TokenResponseDTO; +import io.mosip.mimoto.dto.mimoto.*; +import io.mosip.mimoto.exception.IdpException; +import io.mosip.mimoto.exception.VCVerificationException; +import io.mosip.mimoto.service.impl.IdpServiceImpl; +import io.mosip.mimoto.service.impl.IssuersServiceImpl; +import io.mosip.mimoto.util.CredentialUtilService; +import io.mosip.mimoto.util.JoseUtil; +import io.mosip.mimoto.util.RestApiClient; +import io.mosip.mimoto.util.TestUtilities; +import io.mosip.vercred.vcverifier.CredentialsVerifier; +import io.mosip.vercred.vcverifier.constants.CredentialFormat; +import io.mosip.vercred.vcverifier.data.VerificationResult; +import lombok.extern.slf4j.Slf4j; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.HttpEntity; +import org.springframework.http.MediaType; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestTemplate; +import java.util.List; +import java.util.Map; +import static io.mosip.mimoto.util.TestUtilities.*; +import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; + +@RunWith(MockitoJUnitRunner.class) +@SpringBootTest +@Slf4j +public class CredentialUtilServiceTest { + @InjectMocks + private CredentialUtilService credentialUtilService; + @Mock + RestTemplate restTemplate; + @Mock + IssuersServiceImpl issuersService; + @Mock + IdpServiceImpl idpService; + @Mock + RestApiClient restApiClient; + @Mock + JoseUtil joseUtil; + @Mock + CredentialsVerifier credentialsVerifier; + @Mock + ObjectMapper objectMapper; + + private Map tokenRequestParams = Map.of( + "grant_type", "client_credentials", + "client_id", "test-client" + ); + IssuerDTO issuerDTO; + TokenResponseDTO expectedTokenResponse; + CredentialIssuerConfiguration issuerConfig; + String tokenEndpoint, issuerId, expectedExceptionMsg; + HttpEntity> mockRequest; + + @Before + public void setUp() throws Exception { + issuerId = "issuer1"; + issuerDTO = getIssuerConfigDTO(issuerId); + issuerConfig = getCredentialIssuerConfigurationResponseDto(issuerId, "CredentialType1", List.of()); + + Mockito.when(issuersService.getIssuerDetails(issuerId)).thenReturn(issuerDTO); + Mockito.when(issuersService.getIssuerConfiguration(issuerId)).thenReturn(issuerConfig); + + tokenEndpoint = issuerConfig.getAuthorizationServerWellKnownResponse().getTokenEndpoint(); + mockRequest = new HttpEntity<>(new LinkedMultiValueMap<>(Map.of( + "grant_type", List.of("client_credentials"), + "client_id", List.of("test-client") + ))); + expectedTokenResponse = getTokenResponseDTO(); + + Mockito.when(idpService.constructGetTokenRequest(tokenRequestParams, issuerDTO, tokenEndpoint)) + .thenReturn(mockRequest); + Mockito.when(idpService.getTokenEndpoint(issuerConfig)) + .thenReturn(tokenEndpoint); + Mockito.when(restTemplate.postForObject(tokenEndpoint, mockRequest, TokenResponseDTO.class)) + .thenReturn(expectedTokenResponse); + } + + @Test + public void shouldReturnTokenResponseForValidTokenEndpoint() throws Exception { + TokenResponseDTO actualTokenResponse = credentialUtilService.getTokenResponse(tokenRequestParams, issuerId); + + assertEquals(expectedTokenResponse, actualTokenResponse); + } + + @Test + public void shouldThrowExceptionIfResponseIsNullWhenFetchingTokenResponse() throws Exception { + Mockito.when(restTemplate.postForObject(tokenEndpoint, mockRequest, TokenResponseDTO.class)) + .thenReturn(null); + + IdpException actualException = assertThrows(IdpException.class, () -> { + credentialUtilService.getTokenResponse(tokenRequestParams, issuerId); + }); + + assertEquals("RESIDENT-APP-034 --> Exception occurred while performing the authorization", actualException.getMessage()); + } + + @Test + public void shouldThrowExceptionOnFetchingCredentialFromCredentialEndpointFailure() { + CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupportedResponse("CredentialType1"); + CredentialIssuerWellKnownResponse issuerWellKnownResponse = getCredentialIssuerWellKnownResponseDto(issuerId, Map.of("CredentialType1", credentialsSupportedResponse)); + VCCredentialRequest vcCredentialRequest = getVCCredentialRequestDTO(); + Mockito.when(restApiClient.postApi(issuerWellKnownResponse.getCredentialEndPoint(), MediaType.APPLICATION_JSON, vcCredentialRequest, VCCredentialResponse.class, "test-access-token")).thenReturn(null); + String credentialEndpoint = issuerWellKnownResponse.getCredentialEndPoint(); + expectedExceptionMsg = "VC Credential Issue API not accessible"; + + + RuntimeException actualException = assertThrows(RuntimeException.class, () -> { + credentialUtilService.downloadCredential(credentialEndpoint, vcCredentialRequest, "test-access-token"); + }); + + assertEquals(expectedExceptionMsg, actualException.getMessage()); + } + + @Test + public void shouldReturnVCCredentialWhenCallingCredentialEndpointWithCredentialRequest() { + CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupportedResponse("CredentialType1"); + CredentialIssuerWellKnownResponse issuerWellKnownResponse = getCredentialIssuerWellKnownResponseDto(issuerId, Map.of("CredentialType1", credentialsSupportedResponse)); + VCCredentialRequest vcCredentialRequest = getVCCredentialRequestDTO(); + VCCredentialResponse expectedCredentialResponse = getVCCredentialResponseDTO("RSASignature2020"); + Mockito.when(restApiClient.postApi(issuerWellKnownResponse.getCredentialEndPoint(), MediaType.APPLICATION_JSON, vcCredentialRequest, VCCredentialResponse.class, "test-access-token")).thenReturn(expectedCredentialResponse); + + VCCredentialResponse actualCredentialResponse = credentialUtilService.downloadCredential(issuerWellKnownResponse.getCredentialEndPoint(), vcCredentialRequest, "test-access-token"); + + assertEquals(expectedCredentialResponse, actualCredentialResponse); + } + + @Test + public void shouldGenerateVCCredentialRequestForProvidedIssuerAndCredentialType() throws Exception { + CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupportedResponse("CredentialType1"); + CredentialIssuerWellKnownResponse issuerWellKnownResponse = getCredentialIssuerWellKnownResponseDto(issuerId, Map.of("CredentialType1", credentialsSupportedResponse)); + VCCredentialRequest expectedVCCredentialRequest = getVCCredentialRequestDTO(); + Mockito.when(joseUtil.generateJwt(any(String.class), any(String.class), any(String.class))).thenReturn("jwt"); + + VCCredentialRequest actualVCCredentialRequest = credentialUtilService.generateVCCredentialRequest(issuerDTO, issuerWellKnownResponse, credentialsSupportedResponse, "test-access-token"); + + assertEquals(expectedVCCredentialRequest, actualVCCredentialRequest); + } + + @Test + public void shouldThrowExceptionWhenInvalidAlgoIsProvidedForGeneratingJWTDuringCredentialRequestGeneration() throws Exception { + CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupportedResponse("CredentialType1"); + CredentialIssuerWellKnownResponse issuerWellKnownResponse = getCredentialIssuerWellKnownResponseDto(issuerId, Map.of("CredentialType1", credentialsSupportedResponse)); + Mockito.when(joseUtil.generateJwt(any(String.class), any(String.class), any(String.class))).thenThrow(new AssertionError("Unexpected algorithm type: dfs")); + + AssertionError actualError = assertThrows(AssertionError.class, () -> { + credentialUtilService.generateVCCredentialRequest(issuerDTO, issuerWellKnownResponse, credentialsSupportedResponse, "test-access-token"); + }); + + assertEquals("Unexpected algorithm type: dfs", actualError.getMessage()); + } + + @Test + public void shouldReturnTrueIfAValidCredentialIsPassedForVerification() throws VCVerificationException, JsonProcessingException { + VCCredentialResponse vc = TestUtilities.getVCCredentialResponseDTO("ed25519Signature2020"); + VerificationResult verificationResult = new VerificationResult(true, "", ""); + Mockito.when(credentialsVerifier.verify(any(String.class), eq(CredentialFormat.LDP_VC))).thenReturn(verificationResult); + Mockito.when(objectMapper.writeValueAsString(vc.getCredential())).thenReturn("vc"); + + Boolean verificationStatus = credentialUtilService.verifyCredential(vc); + + assertTrue(verificationStatus); + } + + @Test + public void shouldThrowExceptionIfInvalidCredentialIsPassedForVerification() throws VCVerificationException, JsonProcessingException { + VCCredentialResponse vc = TestUtilities.getVCCredentialResponseDTO("ed25519Signature2020"); + VerificationResult verificationResult = new VerificationResult(false, "Verification failed for the provided credentials", "Verification Failed!"); + Mockito.when(credentialsVerifier.verify(any(String.class), eq(CredentialFormat.LDP_VC))).thenReturn(verificationResult); + Mockito.when(objectMapper.writeValueAsString(vc.getCredential())).thenReturn("vc"); + expectedExceptionMsg = "verification failed! --> Verification failed for the provided credentials"; + + VCVerificationException actualException = assertThrows(VCVerificationException.class, () -> + credentialUtilService.verifyCredential(vc) + ); + + assertEquals(expectedExceptionMsg, actualException.getMessage()); + } + +} From a74a779895acdb098194548b87f7a3b48a011154 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Thu, 3 Apr 2025 16:39:34 +0530 Subject: [PATCH 487/860] injiweb-1510 added multiple signing keys Signed-off-by: Gurpreet41082 --- .../mimoto/dbentity/ProofSigningKey.java | 9 +- .../java/io/mosip/mimoto/dbentity/Wallet.java | 6 + .../service/impl/WalletServiceImpl.java | 4 +- .../mimoto/util/EncryptionDecryptionUtil.java | 41 +++---- .../mosip/mimoto/util/KeyGenerationUtil.java | 63 ++++++++++ .../mimoto/util/ProofSigningKeyFactory.java | 29 +++++ .../java/io/mosip/mimoto/util/WalletUtil.java | 109 ++++++------------ .../mimoto/service/WalletServiceTest.java | 16 +-- .../util/EncryptionDecryptionUtilTest.java | 34 ++---- .../mimoto/util/KeyGenerationUtilTest.java | 63 ++++++++++ .../io/mosip/mimoto/util/WalletUtilTest.java | 58 ++++------ 11 files changed, 267 insertions(+), 165 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/util/KeyGenerationUtil.java create mode 100644 src/main/java/io/mosip/mimoto/util/ProofSigningKeyFactory.java create mode 100644 src/test/java/io/mosip/mimoto/util/KeyGenerationUtilTest.java diff --git a/src/main/java/io/mosip/mimoto/dbentity/ProofSigningKey.java b/src/main/java/io/mosip/mimoto/dbentity/ProofSigningKey.java index 4d616121c..1919417c7 100644 --- a/src/main/java/io/mosip/mimoto/dbentity/ProofSigningKey.java +++ b/src/main/java/io/mosip/mimoto/dbentity/ProofSigningKey.java @@ -3,10 +3,10 @@ import jakarta.persistence.*; import lombok.Getter; import lombok.Setter; - import org.hibernate.annotations.JdbcTypeCode; import org.hibernate.type.SqlTypes; +import java.security.PrivateKey; import java.time.Instant; @Entity @Getter @@ -24,8 +24,11 @@ public class ProofSigningKey { @Column(nullable = false) private String publicKey; // Public key for wallet - @Column(nullable = false) - private String secretKey; // Secret key, encrypted using walletKey + @Column(name = "secret_key", nullable = false) + private String encryptedSecretKey; // Secret key, encrypted using walletKey + + @Transient + private PrivateKey secretKey; @JdbcTypeCode(SqlTypes.JSON) @Column(columnDefinition = "jsonb") diff --git a/src/main/java/io/mosip/mimoto/dbentity/Wallet.java b/src/main/java/io/mosip/mimoto/dbentity/Wallet.java index 41c347416..abe17df6c 100644 --- a/src/main/java/io/mosip/mimoto/dbentity/Wallet.java +++ b/src/main/java/io/mosip/mimoto/dbentity/Wallet.java @@ -1,7 +1,10 @@ package io.mosip.mimoto.dbentity; import jakarta.persistence.*; +import lombok.Builder; import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; import lombok.Setter; import org.hibernate.annotations.JdbcTypeCode; import org.hibernate.type.SqlTypes; @@ -12,6 +15,9 @@ @Entity @Getter @Setter +@Builder +@NoArgsConstructor +@AllArgsConstructor public class Wallet { @Id diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java index a9f013c55..7d3d62ba1 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java @@ -9,10 +9,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.security.NoSuchAlgorithmException; import java.util.List; import java.util.Optional; -import java.util.UUID; import java.util.stream.Collectors; @@ -28,7 +26,7 @@ public class WalletServiceImpl implements WalletService { @Override public String createWallet(String userId, String walletName, String pin) throws Exception { // Create a new wallet for the user - return walletHelper.createEd25519AlgoWallet(userId, walletName, pin); + return walletHelper.createWallet(userId, walletName, pin); } @Override diff --git a/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java b/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java index b2d83a636..0fe66f72d 100644 --- a/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java +++ b/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java @@ -1,21 +1,19 @@ package io.mosip.mimoto.util; +import io.mosip.kernel.core.util.CryptoUtil; +import io.mosip.kernel.cryptomanager.dto.CryptoWithPinRequestDto; +import io.mosip.kernel.cryptomanager.dto.CryptoWithPinResponseDto; +import io.mosip.kernel.cryptomanager.dto.CryptomanagerRequestDto; import io.mosip.kernel.cryptomanager.service.CryptomanagerService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; -import io.mosip.kernel.cryptomanager.dto.CryptomanagerRequestDto; -import io.mosip.kernel.core.util.CryptoUtil; import javax.crypto.Cipher; -import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import java.nio.charset.StandardCharsets; -import java.security.KeyPair; -import java.security.KeyPairGenerator; -import java.security.NoSuchAlgorithmException; import java.util.Base64; @Component @@ -58,24 +56,27 @@ public String decrypt(String dataToDecrypt, String refId, String aad, String sal return new String(CryptoUtil.decodeURLSafeBase64(cryptomanagerService.decrypt(request).getData())); } - public static SecretKey generateEncryptionKey(String algorithm, int keysize) throws NoSuchAlgorithmException { - KeyGenerator keyGenerator = KeyGenerator.getInstance(algorithm); - keyGenerator.init(keysize); - return keyGenerator.generateKey(); - } - - // Helper method to generate ED25519 key pair - public static KeyPair generateKeyPair(String algorithm) throws NoSuchAlgorithmException { - KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(algorithm); - return keyPairGenerator.generateKeyPair(); - } - - // Helper method to encrypt the private key using the AES key - public static String encryptPrivateKeyWithAES(SecretKey aesKey, java.security.PrivateKey privateKey) throws Exception { + public String encryptPrivateKeyWithAES(SecretKey aesKey, java.security.PrivateKey privateKey) throws Exception { Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.ENCRYPT_MODE, aesKey); byte[] encryptedPrivateKey = cipher.doFinal(privateKey.getEncoded()); return Base64.getEncoder().encodeToString(encryptedPrivateKey); } + public String decryptWithPin(String encryptedString, String pin) { + CryptoWithPinRequestDto requestDto = new CryptoWithPinRequestDto(); + requestDto.setUserPin(pin); + requestDto.setData(encryptedString); + CryptoWithPinResponseDto responseDto = cryptomanagerService.decryptWithPin(requestDto); + return responseDto.getData(); + } + + public String encryptKeyWithPin(SecretKey encryptionKey, String pin) { + CryptoWithPinRequestDto requestDto = new CryptoWithPinRequestDto(); + requestDto.setUserPin(pin); + String dataAsString = Base64.getEncoder().encodeToString(encryptionKey.getEncoded()); + requestDto.setData(dataAsString); + return cryptomanagerService.encryptWithPin(requestDto).getData(); + } + } diff --git a/src/main/java/io/mosip/mimoto/util/KeyGenerationUtil.java b/src/main/java/io/mosip/mimoto/util/KeyGenerationUtil.java new file mode 100644 index 000000000..e1ee15cd2 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/KeyGenerationUtil.java @@ -0,0 +1,63 @@ +package io.mosip.mimoto.util; + +import javax.crypto.KeyGenerator; +import javax.crypto.SecretKey; +import java.security.*; +import java.security.spec.ECGenParameterSpec; + +public class KeyGenerationUtil { + + /** + * Generates a key pair for the given algorithm. + * + * @param algorithm The algorithm to use (e.g., "RS256", "ES256", "ES256K", "Ed25519"). + * @return KeyPair object. + * @throws NoSuchAlgorithmException + * @throws InvalidAlgorithmParameterException + * @throws NoSuchProviderException + */ + public static KeyPair generateKeyPair(String algorithm) throws NoSuchAlgorithmException, InvalidAlgorithmParameterException, NoSuchProviderException { + KeyPairGenerator keyPairGenerator; + + switch (algorithm) { + case "RS256": + keyPairGenerator = KeyPairGenerator.getInstance("RSA"); + keyPairGenerator.initialize(2048); + break; + case "ES256": + keyPairGenerator = KeyPairGenerator.getInstance("EC"); + ECGenParameterSpec ecGenParameterSpec = new ECGenParameterSpec("secp256r1"); + keyPairGenerator.initialize(ecGenParameterSpec); + break; + case "ES256K": + keyPairGenerator = KeyPairGenerator.getInstance("EC", "BC"); + ECGenParameterSpec ecGenParameterSpecK = new ECGenParameterSpec("secp256k1"); + keyPairGenerator.initialize(ecGenParameterSpecK); + break; + case "Ed25519": + keyPairGenerator = KeyPairGenerator.getInstance("Ed25519"); + break; + default: + throw new IllegalArgumentException("Unsupported algorithm: " + algorithm); + } + + return keyPairGenerator.generateKeyPair(); + } + + + /** + * Generates a secret key for the given algorithm and key size. + * + * @param algorithm The algorithm to use (e.g., "AES"). + * @param keysize The key size in bits. + * @return SecretKey object. + * @throws NoSuchAlgorithmException + */ + public static SecretKey generateEncryptionKey(String algorithm, int keysize) throws NoSuchAlgorithmException { + KeyGenerator keyGenerator = KeyGenerator.getInstance(algorithm); + keyGenerator.init(keysize); + return keyGenerator.generateKey(); + } + + +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/util/ProofSigningKeyFactory.java b/src/main/java/io/mosip/mimoto/util/ProofSigningKeyFactory.java new file mode 100644 index 000000000..53bd1624f --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/ProofSigningKeyFactory.java @@ -0,0 +1,29 @@ +package io.mosip.mimoto.util; + +import io.mosip.mimoto.dbentity.KeyMetadata; +import io.mosip.mimoto.dbentity.ProofSigningKey; + +import java.security.KeyPair; +import java.time.Instant; +import java.util.Base64; +import java.util.UUID; + +public class ProofSigningKeyFactory { + + public static ProofSigningKey createProofSigningKey(String algorithm) throws Exception { + KeyPair keyPair = KeyGenerationUtil.generateKeyPair(algorithm); + + KeyMetadata keyMetadata = new KeyMetadata(); + keyMetadata.setAlgorithmName(algorithm); + + ProofSigningKey proofSigningKey = new ProofSigningKey(); + proofSigningKey.setId(UUID.randomUUID().toString()); + proofSigningKey.setPublicKey(Base64.getEncoder().encodeToString(keyPair.getPublic().getEncoded())); + proofSigningKey.setSecretKey(keyPair.getPrivate()); + proofSigningKey.setKeyMetadata(keyMetadata); + proofSigningKey.setCreatedAt(Instant.now()); + proofSigningKey.setUpdatedAt(Instant.now()); + + return proofSigningKey; + } +} diff --git a/src/main/java/io/mosip/mimoto/util/WalletUtil.java b/src/main/java/io/mosip/mimoto/util/WalletUtil.java index d1ce2f054..aecb21afe 100644 --- a/src/main/java/io/mosip/mimoto/util/WalletUtil.java +++ b/src/main/java/io/mosip/mimoto/util/WalletUtil.java @@ -1,21 +1,14 @@ package io.mosip.mimoto.util; -import io.mosip.kernel.cryptomanager.dto.CryptoWithPinRequestDto; -import io.mosip.kernel.cryptomanager.dto.CryptoWithPinResponseDto; -import io.mosip.kernel.cryptomanager.service.CryptomanagerService; -import io.mosip.mimoto.dbentity.KeyMetadata; -import io.mosip.mimoto.dbentity.Wallet; import io.mosip.mimoto.dbentity.ProofSigningKey; +import io.mosip.mimoto.dbentity.Wallet; import io.mosip.mimoto.dbentity.WalletMetadata; import io.mosip.mimoto.repository.WalletRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.crypto.SecretKey; -import java.security.KeyPair; -import java.time.Instant; import java.util.ArrayList; -import java.util.Base64; import java.util.List; import java.util.UUID; @@ -26,84 +19,54 @@ public class WalletUtil { private WalletRepository walletRepository; @Autowired - private CryptomanagerService cryptomanagerService; - + private EncryptionDecryptionUtil encryptionDecryptionUtil; - // Method to decrypt the wallet key using the PIN public String decryptWalletKey(String encryptedWalletKey, String pin) { - // Prepare the request DTO - CryptoWithPinRequestDto requestDto = new CryptoWithPinRequestDto(); - requestDto.setUserPin(pin); - requestDto.setData(encryptedWalletKey); - - // Call the decryptWithPin method of CryptomanagerService - CryptoWithPinResponseDto responseDto = cryptomanagerService.decryptWithPin(requestDto); - - // Return the decrypted wallet key - return responseDto.getData(); + return encryptionDecryptionUtil.decryptWithPin(encryptedWalletKey, pin); } - public String createNewWallet(String userId, String walletName, String pin, KeyPair keyPair, SecretKey encryptionKey, String encryptionAlgorithm, String encryptionType) throws Exception { + public String createWallet(String userId, String walletName, String pin) throws Exception { + SecretKey encryptionKey = KeyGenerationUtil.generateEncryptionKey("AES", 256); + return saveWallet(userId, walletName, pin, encryptionKey, "AES", "encryptWithPin"); + } - // Encrypt the private key with the encryption key - String encryptedPrivateKey = EncryptionDecryptionUtil.encryptPrivateKeyWithAES(encryptionKey, keyPair.getPrivate()); + public String saveWallet(String userId, String walletName, String walletPin, SecretKey encryptionKey, String encryptionAlgorithm, String encryptionType) throws Exception { - // Create wallet record String walletId = UUID.randomUUID().toString(); - Wallet newWallet = new Wallet(); - newWallet.setId(walletId); - newWallet.setUserId(userId); + WalletMetadata walletMetadata = createWalletMetadata(walletName, encryptionAlgorithm, encryptionType); + String walletKey = encryptionDecryptionUtil.encryptKeyWithPin(encryptionKey, walletPin); + Wallet newWallet = Wallet.builder() + .id(walletId) + .userId(userId) + .walletMetadata(walletMetadata) + .walletKey(walletKey) + .build(); + + List proofSigningKeys = createProofSigningKeys(encryptionKey, newWallet); + newWallet.setProofSigningKeys(proofSigningKeys); - // Encrypt the encryption key using the user's PIN before storing into database - CryptoWithPinRequestDto requestDto = new CryptoWithPinRequestDto(); - requestDto.setUserPin(pin); - String dataAsString = Base64.getEncoder().encodeToString(encryptionKey.getEncoded()); - requestDto.setData(dataAsString); - String encryptedWalletKey = cryptomanagerService.encryptWithPin(requestDto).getData(); + walletRepository.save(newWallet); + return walletId; + } - // Set wallet metadata (encryption settings) + private WalletMetadata createWalletMetadata(String walletName, String encryptionAlgorithm, String encryptionType) { WalletMetadata walletMetadata = new WalletMetadata(); walletMetadata.setEncryptionAlgo(encryptionAlgorithm); walletMetadata.setEncryptionType(encryptionType); walletMetadata.setName(walletName); - newWallet.setWalletMetadata(walletMetadata); - - // Set the wallet encryption key (encrypted wallet key) - newWallet.setWalletKey(encryptedWalletKey); - - // Create the WalletKey entity (this will hold the actual keys) - ProofSigningKey proofSigningKey = new ProofSigningKey(); - proofSigningKey.setId(UUID.randomUUID().toString()); // Generate a unique ID for the WalletKey - proofSigningKey.setPublicKey(Base64.getEncoder().encodeToString(keyPair.getPublic().getEncoded())); - proofSigningKey.setSecretKey(encryptedPrivateKey); // The private key is encrypted using the wallet's encryption key - - // Create and set the key metadata for the WalletKey - KeyMetadata keyMetadata = new KeyMetadata(); - keyMetadata.setAlgorithmName(keyPair.getPublic().getAlgorithm()); - proofSigningKey.setKeyMetadata(keyMetadata); // Associate the key metadata with the WalletKey - - // Associate the WalletKey with the Wallet - proofSigningKey.setWallet(newWallet); // Set the wallet for the key - proofSigningKey.setCreatedAt(Instant.now()); - proofSigningKey.setUpdatedAt(Instant.now()); - - // Add the WalletKey to the Wallet's list of keys - List proofSigningKeys = new ArrayList<>(); - proofSigningKeys.add(proofSigningKey); - newWallet.setProofSigningKeys(proofSigningKeys); - - // Save the wallet and its associated keys to the database - walletRepository.save(newWallet); // This will cascade and save the WalletKey as well - - return walletId; + return walletMetadata; } - - // Default method for Ed25519 and AES - public String createEd25519AlgoWallet(String userId, String walletName, String pin) throws Exception { - SecretKey encryptionKey = EncryptionDecryptionUtil.generateEncryptionKey("AES", 256); - KeyPair keyPair = EncryptionDecryptionUtil.generateKeyPair("Ed25519"); - return createNewWallet(userId, walletName, pin, keyPair, encryptionKey, "AES", "encryptWithPin"); + private List createProofSigningKeys(SecretKey encryptionKey, Wallet wallet) throws Exception { + List proofSigningKeys = new ArrayList<>(); + List algorithms = List.of("RS256", "ES256", "ES256K", "Ed25519"); + for (String algorithm : algorithms) { + ProofSigningKey signingKey = ProofSigningKeyFactory.createProofSigningKey(algorithm); + signingKey.setWallet(wallet); + signingKey.setEncryptedSecretKey(encryptionDecryptionUtil.encryptPrivateKeyWithAES(encryptionKey, + signingKey.getSecretKey())); + proofSigningKeys.add(signingKey); + } + return proofSigningKeys; } - -} +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java index 89eb1c024..d0258c484 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java @@ -56,9 +56,9 @@ public void setUp() { } @Test - public void createWallet_shouldCreateWalletSuccessfully() throws Exception { + public void shouldCreateWalletSuccessfully() throws Exception { String newWalletId = UUID.randomUUID().toString(); - when(walletHelper.createEd25519AlgoWallet(userId, name, pin)).thenReturn(newWalletId); + when(walletHelper.createWallet(userId, name, pin)).thenReturn(newWalletId); String result = walletService.createWallet(userId, name, pin); @@ -66,7 +66,7 @@ public void createWallet_shouldCreateWalletSuccessfully() throws Exception { } @Test - public void getWalletKey_shouldDecryptWalletKeySuccessfully() { + public void shouldDecryptWalletKeySuccessfully() { when(walletRepository.findByUserIdAndId(userId, walletId)).thenReturn(Optional.of(wallet)); when(walletHelper.decryptWalletKey(encryptedWalletKey, pin)).thenReturn(decryptedWalletKey); @@ -76,7 +76,7 @@ public void getWalletKey_shouldDecryptWalletKeySuccessfully() { } @Test - public void getWalletKey_shouldReturnNullIfWalletNotFound() { + public void shouldReturnNullIfWalletNotFoundForGivenUserIdAndWalletId() { when(walletRepository.findByUserIdAndId(userId, walletId)).thenReturn(Optional.empty()); String result = walletService.getWalletKey(userId, walletId, pin); @@ -85,7 +85,7 @@ public void getWalletKey_shouldReturnNullIfWalletNotFound() { } @Test - public void getWallets_shouldReturnListOfWalletResponseDtos() { + public void shouldReturnListOfWalletResponseDtosForGivenUserId() { List walletIds = Arrays.asList(UUID.randomUUID().toString(), UUID.randomUUID().toString()); when(walletRepository.findWalletIdByUserId(userId)).thenReturn(walletIds); @@ -98,7 +98,7 @@ public void getWallets_shouldReturnListOfWalletResponseDtos() { } @Test - public void getWallets_shouldReturnEmptyListIfNoWalletsFound() { + public void shouldReturnEmptyListIfNoWalletsFoundForGivenUserId() { when(walletRepository.findWalletIdByUserId(userId)).thenReturn(List.of()); List result = walletService.getWallets(userId); @@ -107,8 +107,8 @@ public void getWallets_shouldReturnEmptyListIfNoWalletsFound() { } @Test(expected = Exception.class) - public void createWallet_shouldThrowException() throws Exception { - when(walletHelper.createEd25519AlgoWallet(userId, name, pin)).thenThrow(new Exception("Test Exception")); + public void shouldThrowExceptionIfAnyErrorOccurredWhileCreatingWallet() throws Exception { + when(walletHelper.createWallet(userId, name, pin)).thenThrow(new Exception("Test Exception")); walletService.createWallet(userId, name, pin); } diff --git a/src/test/java/io/mosip/mimoto/util/EncryptionDecryptionUtilTest.java b/src/test/java/io/mosip/mimoto/util/EncryptionDecryptionUtilTest.java index 6aa7a74da..add956e9b 100644 --- a/src/test/java/io/mosip/mimoto/util/EncryptionDecryptionUtilTest.java +++ b/src/test/java/io/mosip/mimoto/util/EncryptionDecryptionUtilTest.java @@ -43,7 +43,7 @@ public void setUp() { } @Test - public void encrypt_shouldEncryptData() { + public void shouldEncryptDataSuccessfully() { CryptomanagerResponseDto responseDto = new CryptomanagerResponseDto(); responseDto.setData(encryptedData); when(cryptomanagerService.encrypt(any(CryptomanagerRequestDto.class))).thenReturn(responseDto); @@ -55,14 +55,14 @@ public void encrypt_shouldEncryptData() { } @Test - public void encrypt_shouldReturnNullForBlankData() { + public void shouldReturnNullIfDataToEncryptIsNull() { String result = encryptionDecryptionUtil.encrypt(null, refId, aad, salt); assertNull(result); } @Test - public void decrypt_shouldDecryptData() { + public void shouldDecryptDataSuccessfully() { CryptomanagerResponseDto responseDto = new CryptomanagerResponseDto(); String decryptedData = "testData"; responseDto.setData(CryptoUtil.encodeToURLSafeBase64(decryptedData.getBytes(StandardCharsets.UTF_8))); @@ -74,36 +74,20 @@ public void decrypt_shouldDecryptData() { } @Test - public void decrypt_shouldReturnNullForBlankData() { + public void shouldReturnNullIfDataToDecryptIsNull() { String result = encryptionDecryptionUtil.decrypt(null, refId, aad, salt); - assertNull(result); } - @Test - public void generateEncryptionKey_shouldGenerateKey() throws Exception { - SecretKey key = EncryptionDecryptionUtil.generateEncryptionKey("AES", 256); - - assertNotNull(key); - assertEquals("AES", key.getAlgorithm()); - } - - @Test - public void generateKeyPair_shouldGenerateKeyPair() throws Exception { - KeyPair keyPair = EncryptionDecryptionUtil.generateKeyPair("Ed25519"); - - assertNotNull(keyPair); - assertEquals("EdDSA", keyPair.getPublic().getAlgorithm()); - } @Test - public void encryptPrivateKeyWithAES_shouldEncryptPrivateKey() throws Exception { - SecretKey aesKey = EncryptionDecryptionUtil.generateEncryptionKey("AES", 256); - KeyPair keyPair = EncryptionDecryptionUtil.generateKeyPair("Ed25519"); + public void shouldEncryptPrivateKeyWithAESSuccessfully() throws Exception { + SecretKey aesKey = KeyGenerationUtil.generateEncryptionKey("AES", 256); + KeyPair keyPair = KeyGenerationUtil.generateKeyPair("Ed25519"); - String encryptedPrivateKey = EncryptionDecryptionUtil.encryptPrivateKeyWithAES(aesKey, keyPair.getPrivate()); + String encryptedPrivateKey = encryptionDecryptionUtil.encryptPrivateKeyWithAES(aesKey, keyPair.getPrivate()); assertNotNull(encryptedPrivateKey); assertFalse(StringUtils.isBlank(encryptedPrivateKey)); } -} +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/util/KeyGenerationUtilTest.java b/src/test/java/io/mosip/mimoto/util/KeyGenerationUtilTest.java new file mode 100644 index 000000000..c436897e4 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/util/KeyGenerationUtilTest.java @@ -0,0 +1,63 @@ +package io.mosip.mimoto.util; + +import org.junit.Test; + +import javax.crypto.SecretKey; +import java.security.KeyPair; +import java.security.NoSuchAlgorithmException; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +public class KeyGenerationUtilTest { + + @Test + public void shouldGenerateEncryptionKeySuccessfully() throws Exception { + SecretKey key = KeyGenerationUtil.generateEncryptionKey("AES", 256); + + assertNotNull(key); + assertEquals("AES", key.getAlgorithm()); + } + + @Test + public void shouldGenerateKeyPairSuccessfully() throws Exception { + KeyPair keyPair = KeyGenerationUtil.generateKeyPair("Ed25519"); + + assertNotNull(keyPair); + assertEquals("EdDSA", keyPair.getPublic().getAlgorithm()); + } + + @Test + public void shouldGenerateRSAKeyPairSuccessfully() throws Exception { + KeyPair keyPair = KeyGenerationUtil.generateKeyPair("RS256"); + + assertNotNull(keyPair); + assertEquals("RSA", keyPair.getPublic().getAlgorithm()); + } + + @Test + public void shouldGenerateECKeyPairWithP256Successfully() throws Exception { + KeyPair keyPair = KeyGenerationUtil.generateKeyPair("ES256"); + + assertNotNull(keyPair); + assertEquals("EC", keyPair.getPublic().getAlgorithm()); + } + + @Test + public void shouldGenerateECKeyPairWithSecp256k1Successfully() throws Exception { + KeyPair keyPair = KeyGenerationUtil.generateKeyPair("ES256K"); + + assertNotNull(keyPair); + assertEquals("EC", keyPair.getPublic().getAlgorithm()); + } + + @Test(expected = IllegalArgumentException.class) + public void shouldThrowExceptionForUnsupportedAlgorithm() throws Exception { + KeyGenerationUtil.generateKeyPair("unsupportedAlgorithm"); + } + + @Test(expected = NoSuchAlgorithmException.class) + public void shouldThrowExceptionForUnsupportedEncryptionAlgorithm() throws Exception { + KeyGenerationUtil.generateEncryptionKey("unsupportedAlgorithm", 256); + } +} diff --git a/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java b/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java index a03dbe9e9..293cbdd6f 100644 --- a/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java +++ b/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java @@ -1,11 +1,6 @@ package io.mosip.mimoto.util; -import io.mosip.kernel.cryptomanager.dto.CryptoWithPinRequestDto; -import io.mosip.kernel.cryptomanager.dto.CryptoWithPinResponseDto; -import io.mosip.kernel.cryptomanager.service.CryptomanagerService; -import io.mosip.mimoto.dbentity.KeyMetadata; import io.mosip.mimoto.dbentity.Wallet; -import io.mosip.mimoto.dbentity.WalletMetadata; import io.mosip.mimoto.repository.WalletRepository; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -17,7 +12,9 @@ import javax.crypto.SecretKey; import java.security.KeyPair; +import java.util.ArrayList; import java.util.Base64; +import java.util.List; import java.util.UUID; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -33,7 +30,7 @@ class WalletUtilTest { private WalletRepository walletRepository; @Mock - private CryptomanagerService cryptomanagerService; + private EncryptionDecryptionUtil encryptionDecryptionUtil; @InjectMocks private WalletUtil walletUtil; @@ -41,36 +38,29 @@ class WalletUtilTest { private String pin; private String name; private String userId; - private KeyPair keyPair; private SecretKey encryptionKey; private String encryptedPrivateKey; private String encryptedWalletKey; private String decryptedWalletKey; - private String publicKeyBase64; private String encryptionAlgorithm; private String encryptionType; - private CryptoWithPinResponseDto cryptoResponseDto; @BeforeEach void setUp() throws Exception { pin = "1234"; name = "default"; userId = UUID.randomUUID().toString(); - keyPair = EncryptionDecryptionUtil.generateKeyPair("Ed25519"); - encryptionKey = EncryptionDecryptionUtil.generateEncryptionKey("AES", 256); - encryptedPrivateKey = EncryptionDecryptionUtil.encryptPrivateKeyWithAES(encryptionKey, keyPair.getPrivate()); + encryptionKey = KeyGenerationUtil.generateEncryptionKey("AES", 256); + encryptedPrivateKey = "encryptedPrivateKey"; encryptedWalletKey = "encryptedWalletKey"; decryptedWalletKey = Base64.getEncoder().encodeToString(encryptionKey.getEncoded()); - publicKeyBase64 = Base64.getEncoder().encodeToString(keyPair.getPublic().getEncoded()); encryptionAlgorithm = "AES"; encryptionType = "encryptWithPin"; - cryptoResponseDto = new CryptoWithPinResponseDto(); } @Test - void decryptWalletKey_shouldDecryptSuccessfully() { - cryptoResponseDto.setData(decryptedWalletKey); - when(cryptomanagerService.decryptWithPin(any(CryptoWithPinRequestDto.class))).thenReturn(cryptoResponseDto); + void shouldDecryptWalletKeySuccessfully() { + when(encryptionDecryptionUtil.decryptWithPin(encryptedWalletKey, pin)).thenReturn(decryptedWalletKey); String decrypted = walletUtil.decryptWalletKey(encryptedWalletKey, pin); @@ -78,29 +68,31 @@ void decryptWalletKey_shouldDecryptSuccessfully() { } @Test - void createNewWallet_shouldCreateWalletSuccessfully() throws Exception { - cryptoResponseDto.setData(encryptedWalletKey); - when(cryptomanagerService.encryptWithPin(any(CryptoWithPinRequestDto.class))).thenReturn(cryptoResponseDto); - String walletId = walletUtil.createNewWallet(userId, pin, name, keyPair, encryptionKey, encryptionAlgorithm, encryptionType); + void shouldCreateNewWalletSuccessfully() throws Exception { + when(encryptionDecryptionUtil.encryptKeyWithPin(any(SecretKey.class), any(String.class))).thenReturn(encryptedWalletKey); + when(encryptionDecryptionUtil.encryptPrivateKeyWithAES(any(SecretKey.class), any(java.security.PrivateKey.class))).thenReturn(encryptedPrivateKey); + + String walletId = walletUtil.saveWallet(userId, name, pin, encryptionKey, encryptionAlgorithm, encryptionType); assertNotNull(walletId); } @Test - void createEd25519AlgoWallet_shouldCreateEd25519WalletSuccessfully() throws Exception { - cryptoResponseDto.setData(encryptedWalletKey); - when(cryptomanagerService.encryptWithPin(any(CryptoWithPinRequestDto.class))).thenReturn(cryptoResponseDto); - String walletId = walletUtil.createEd25519AlgoWallet(userId, name, pin); + void shouldCreateEd25519WalletSuccessfully() throws Exception { + when(encryptionDecryptionUtil.encryptKeyWithPin(any(SecretKey.class), any(String.class))).thenReturn(encryptedWalletKey); + when(encryptionDecryptionUtil.encryptPrivateKeyWithAES(any(SecretKey.class), any(java.security.PrivateKey.class))).thenReturn(encryptedPrivateKey); + + String walletId = walletUtil.createWallet(userId, name, pin); assertNotNull(walletId); } - @Test - void createNewWallet_verifyWalletObject() throws Exception { - cryptoResponseDto.setData(encryptedWalletKey); - when(cryptomanagerService.encryptWithPin(any(CryptoWithPinRequestDto.class))).thenReturn(cryptoResponseDto); - String walletId = walletUtil.createNewWallet(userId, pin, name, keyPair, encryptionKey, encryptionAlgorithm, encryptionType); + void shouldVerifyWalletObjectOnCreateNewWallet() throws Exception { + when(encryptionDecryptionUtil.encryptKeyWithPin(any(SecretKey.class), any(String.class))).thenReturn(encryptedWalletKey); + when(encryptionDecryptionUtil.encryptPrivateKeyWithAES(any(SecretKey.class), any(java.security.PrivateKey.class))).thenReturn(encryptedPrivateKey); + + String walletId = walletUtil.saveWallet(userId, name, pin, encryptionKey, encryptionAlgorithm, encryptionType); ArgumentCaptor walletCaptor = ArgumentCaptor.forClass(Wallet.class); verify(walletRepository).save(walletCaptor.capture()); @@ -109,11 +101,11 @@ void createNewWallet_verifyWalletObject() throws Exception { assertEquals(walletId, savedWallet.getId()); assertEquals(userId, savedWallet.getUserId()); - assertEquals(keyPair.getPublic().getAlgorithm(), savedWallet.getProofSigningKeys().get(0).getKeyMetadata().getAlgorithmName()); - assertEquals(publicKeyBase64, savedWallet.getProofSigningKeys().get(0).getPublicKey()); - assertEquals(encryptedPrivateKey, savedWallet.getProofSigningKeys().get(0).getSecretKey()); + assertEquals(name, savedWallet.getWalletMetadata().getName()); assertEquals(encryptedWalletKey, savedWallet.getWalletKey()); assertEquals(encryptionAlgorithm, savedWallet.getWalletMetadata().getEncryptionAlgo()); assertEquals(encryptionType, savedWallet.getWalletMetadata().getEncryptionType()); + assertNotNull(savedWallet.getProofSigningKeys()); + assertEquals(4, savedWallet.getProofSigningKeys().size()); } } \ No newline at end of file From 259c97cbbd1e6987ebb6bf091a04fa660a712523 Mon Sep 17 00:00:00 2001 From: Rakshithb1 Date: Thu, 3 Apr 2025 18:19:14 +0530 Subject: [PATCH 488/860] [MOSIP-40792] updated onboarder for a separate inji cluster Signed-off-by: Rakshithb1 --- deploy/README.md | 1 + partner-onboarder/copy_cm.sh | 4 ++-- partner-onboarder/copy_secrets.sh | 6 +++--- partner-onboarder/install.sh | 3 --- partner-onboarder/values.yaml | 34 ++++++++++++++++++++----------- 5 files changed, 28 insertions(+), 20 deletions(-) diff --git a/deploy/README.md b/deploy/README.md index da1127eca..c086762ff 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -66,6 +66,7 @@ ``` * During the execution of the `install.sh` script, a prompt appears requesting information for the S3 bucket, including its name and URL. * Once the job is completed, log in to S3 / NFS and check the reports. There should not be any failures. +* Note: If you are running the Onboarder in a separate INJI cluster, update the extraEnvVars section accordingly in [values.yaml](partner-onboarder/values.yaml). ### Install mimoto * Execute mimoto install script diff --git a/partner-onboarder/copy_cm.sh b/partner-onboarder/copy_cm.sh index 8070b2c88..fb26a4774 100755 --- a/partner-onboarder/copy_cm.sh +++ b/partner-onboarder/copy_cm.sh @@ -6,5 +6,5 @@ COPY_UTIL=./copy_cm_func.sh DST_NS=injiweb $COPY_UTIL configmap global default $DST_NS -$COPY_UTIL configmap keycloak-env-vars keycloak $DST_NS -$COPY_UTIL configmap keycloak-host keycloak $DST_NS +$COPY_UTIL configmap keycloak-env-vars keycloak $DST_NS || { echo "Ignore the error if Keycloak values have been added to values.yaml."; true; } +$COPY_UTIL configmap keycloak-host keycloak $DST_NS || { echo "Ignore the error if Keycloak values have been added to values.yaml."; true; } diff --git a/partner-onboarder/copy_secrets.sh b/partner-onboarder/copy_secrets.sh index c9693c236..bb7a35913 100755 --- a/partner-onboarder/copy_secrets.sh +++ b/partner-onboarder/copy_secrets.sh @@ -5,6 +5,6 @@ COPY_UTIL=./copy_cm_func.sh DST_NS=injiweb -$COPY_UTIL secret s3 s3 $DST_NS -$COPY_UTIL secret keycloak keycloak $DST_NS -$COPY_UTIL secret keycloak-client-secrets keycloak $DST_NS +#$COPY_UTIL secret s3 s3 $DST_NS +$COPY_UTIL secret keycloak keycloak $DST_NS || { echo "Ignore the error if Keycloak values have been added to values.yaml."; true; } +$COPY_UTIL secret keycloak-client-secrets keycloak $DST_NS || { echo "Ignore the error if Keycloak values have been added to values.yaml."; true; } diff --git a/partner-onboarder/install.sh b/partner-onboarder/install.sh index bdb130dcb..9aeb66c50 100644 --- a/partner-onboarder/install.sh +++ b/partner-onboarder/install.sh @@ -106,9 +106,6 @@ fi $NFS_OPTION \ $S3_OPTION \ --set onboarding.variables.push_reports_to_s3=$push_reports_to_s3 \ - --set extraEnvVarsCM[0]=global \ - --set extraEnvVarsCM[1]=keycloak-env-vars \ - --set extraEnvVarsCM[2]=keycloak-host \ $ENABLE_INSECURE \ -f values.yaml \ --version $CHART_VERSION \ diff --git a/partner-onboarder/values.yaml b/partner-onboarder/values.yaml index 76d402648..a73ce5528 100644 --- a/partner-onboarder/values.yaml +++ b/partner-onboarder/values.yaml @@ -3,18 +3,28 @@ # repository: mosipdev/partner-onboarder # tag: develop -extraEnvVarsCM: - - global -extraEnvVarsSecret: [] -extraEnvVars: - - name: keycloak-external-url - value: iam.sandbox.mosip.net - - name: KEYCLOAK_ADMIN_USER - value: admin - - name: admin-password - value: DKttMoRdu9 - - name: mosip_pms_client_secret - value: TvPNOeVUJm1oAjYH +### If you are running Mimoto Onboarder in a separate inji cluster where PMS or Keycloak doesn't exist, +### then uncomment lines 8 to 25 and update the values accordingly. +#extraEnvVarsCM: [] +#extraEnvVarsSecret: [] +#extraEnvVars: +# - name: installation-domain +# value: dev.mosip.net +# - name: mosip-api-host +# value: api.dev.mosip.net + ##### pms domain +# - name: mosip-api-internal-host +# value: api-internal.dev.mosip.net +# - name: keycloak-external-url +# value: https://iam.dev.mosip.net +# - name: KEYCLOAK_ADMIN_USER +# value: admin +# - name: admin-password +# value: 5kPBi5DjET +# - name: mosip_pms_client_secret +# value: FvKNOiDSJm4yAjEB +# - name: mosip-esignet-host +# value: esignet.dev.mosip.net onboarding: modules: From 07085b7a3eb8ca40dbc33c08c5973ed826aa297f Mon Sep 17 00:00:00 2001 From: Rakshithb1 Date: Thu, 3 Apr 2025 18:32:38 +0530 Subject: [PATCH 489/860] [MOSIP-40792] updated onboarder for a separate inji cluster Signed-off-by: Rakshithb1 --- partner-onboarder/values.yaml | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/partner-onboarder/values.yaml b/partner-onboarder/values.yaml index 76d402648..448d0409f 100644 --- a/partner-onboarder/values.yaml +++ b/partner-onboarder/values.yaml @@ -3,18 +3,29 @@ # repository: mosipdev/partner-onboarder # tag: develop -extraEnvVarsCM: - - global -extraEnvVarsSecret: [] -extraEnvVars: - - name: keycloak-external-url - value: iam.sandbox.mosip.net - - name: KEYCLOAK_ADMIN_USER - value: admin - - name: admin-password - value: DKttMoRdu9 - - name: mosip_pms_client_secret - value: TvPNOeVUJm1oAjYH +### If you are running Mimoto Onboarder in a separate inji cluster where PMS or Keycloak doesn't exist, +### then uncomment lines 8 to 25 and update the values accordingly. +#extraEnvVarsCM: [] +#extraEnvVarsSecret: [] +#extraEnvVars: +# - name: installation-domain +# value: dev.mosip.net +# - name: mosip-api-host +# value: api.dev.mosip.net + #### pms domain +# - name: mosip-api-internal-host +# value: api-internal.dev.mosip.net +# - name: keycloak-external-url +# value: https://iam.dev.mosip.net +# - name: KEYCLOAK_ADMIN_USER +# value: admin + ###keycloak admin password +# - name: admin-password +# value: 5wIOk3DgKW +# - name: mosip_pms_client_secret +# value: GnUMOiUSJm9oKjYE +# - name: mosip-esignet-host +# value: esignet.dev.mosip.net onboarding: modules: From 1c56344c89703d68de2518cede7ec061da70675b Mon Sep 17 00:00:00 2001 From: Rakshithb1 Date: Thu, 3 Apr 2025 18:35:34 +0530 Subject: [PATCH 490/860] [MOSIP-40792] updated onboarder for a separate inji cluster Signed-off-by: Rakshithb1 --- deploy/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/README.md b/deploy/README.md index c086762ff..34a15185d 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -66,7 +66,7 @@ ``` * During the execution of the `install.sh` script, a prompt appears requesting information for the S3 bucket, including its name and URL. * Once the job is completed, log in to S3 / NFS and check the reports. There should not be any failures. -* Note: If you are running the Onboarder in a separate INJI cluster, update the extraEnvVars section accordingly in [values.yaml](partner-onboarder/values.yaml). +* Note: If you are running the Onboarder in a separate INJI cluster, update the extraEnvVars section accordingly in [values.yaml](../partner-onboarder/values.yaml). ### Install mimoto * Execute mimoto install script From 78a2cdb14b3f55a62c0625a6450d47812b102149 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Thu, 3 Apr 2025 19:50:03 +0530 Subject: [PATCH 491/860] [INJIWEB-1418] write different util functions to encrypt and decrypt the secret key and credential response when storing and fetchig the data into or from the database Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../repository/ProofSigningKeyRepository.java | 14 +++ .../mimoto/repository/WalletRepository.java | 1 - .../impl/WalletCredentialServiceImpl.java | 25 +++--- .../mimoto/util/EncryptionDecryptionUtil.java | 89 ++++++++++++++++--- .../java/io/mosip/mimoto/util/WalletUtil.java | 2 +- .../util/EncryptionDecryptionUtilTest.java | 2 +- .../io/mosip/mimoto/util/WalletUtilTest.java | 33 +++++-- 7 files changed, 133 insertions(+), 33 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/repository/ProofSigningKeyRepository.java diff --git a/src/main/java/io/mosip/mimoto/repository/ProofSigningKeyRepository.java b/src/main/java/io/mosip/mimoto/repository/ProofSigningKeyRepository.java new file mode 100644 index 000000000..ead2f9b1d --- /dev/null +++ b/src/main/java/io/mosip/mimoto/repository/ProofSigningKeyRepository.java @@ -0,0 +1,14 @@ +package io.mosip.mimoto.repository; + +import io.mosip.mimoto.dbentity.ProofSigningKey; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; +import java.util.Optional; + +@Repository +public interface ProofSigningKeyRepository extends JpaRepository { + @Query(value = "SELECT * FROM proof_signing_key p WHERE p.wallet_id = :walletId AND p.key_metadata->>'algorithmName' = :algorithmName", nativeQuery = true) + Optional findByWalletIdAndAlgorithm(@Param("walletId") String walletId, @Param("algorithmName") String algorithmName); +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/repository/WalletRepository.java b/src/main/java/io/mosip/mimoto/repository/WalletRepository.java index 4e0d61b39..6b8d55fab 100644 --- a/src/main/java/io/mosip/mimoto/repository/WalletRepository.java +++ b/src/main/java/io/mosip/mimoto/repository/WalletRepository.java @@ -7,7 +7,6 @@ import java.util.List; import java.util.Optional; -import java.util.UUID; public interface WalletRepository extends JpaRepository { @Query("SELECT w.id FROM Wallet w WHERE w.userId = :userId") diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java index e6a895343..5e630a03a 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java @@ -26,7 +26,9 @@ import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; +import javax.crypto.SecretKey; import java.io.IOException; +import java.util.Base64; import java.util.List; import java.util.UUID; @@ -140,18 +142,16 @@ private CredentialIssuerWellKnownResponse getIssuerWellKnownResponse(String issu ); } - private String encryptCredential(String credentialData, String walletKey) { - CryptoWithPinRequestDto requestDto = new CryptoWithPinRequestDto(); - requestDto.setUserPin(walletKey); - requestDto.setData(credentialData); - return cryptomanagerService.encryptWithPin(requestDto).getData(); + private String encryptCredential(String credentialData, String base64EncodedWalletKey) throws Exception { + byte[] decodedWalletKey = Base64.getDecoder().decode(base64EncodedWalletKey); + SecretKey walletKey = EncryptionDecryptionUtil.bytesToSecretKey(decodedWalletKey); + return EncryptionDecryptionUtil.encrypt(walletKey, EncryptionDecryptionUtil.stringToBytes(credentialData)); } - private String decryptCredential(String encryptedCredentialData, String walletKey) { - CryptoWithPinRequestDto requestDto = new CryptoWithPinRequestDto(); - requestDto.setUserPin(walletKey); - requestDto.setData(encryptedCredentialData); - return cryptomanagerService.decryptWithPin(requestDto).getData(); + private String decryptCredential(String encryptedCredentialData, String base64EncodedWalletKey) throws Exception { + byte[] decodedWalletKey = Base64.getDecoder().decode(base64EncodedWalletKey); + SecretKey walletKey = EncryptionDecryptionUtil.bytesToSecretKey(decodedWalletKey); + return EncryptionDecryptionUtil.bytesToString(EncryptionDecryptionUtil.decrypt(walletKey, encryptedCredentialData)); } private VerifiableCredential saveCredential(String walletId, String encryptedCredential, boolean isVerified, String issuerId, String credentialType) { @@ -171,7 +171,10 @@ private VerifiableCredential saveCredential(String walletId, String encryptedCre private VerifiableCredentialResponseDTO buildCredentialResponseDTO(IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String locale, String credentialId) { - String issuerName = "", issuerLogo = "", credentialType = "", credentialTypeLogo = ""; + String issuerName = ""; + String issuerLogo = ""; + String credentialType = ""; + String credentialTypeLogo = ""; DisplayDTO issuerDisplayDTO; CredentialSupportedDisplayResponse credentialTypeDisplayDTO; diff --git a/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java b/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java index b2d83a636..264b67430 100644 --- a/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java +++ b/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java @@ -1,7 +1,6 @@ package io.mosip.mimoto.util; import io.mosip.kernel.cryptomanager.service.CryptomanagerService; -import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -12,18 +11,21 @@ import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; +import javax.crypto.spec.GCMParameterSpec; import java.nio.charset.StandardCharsets; -import java.security.KeyPair; -import java.security.KeyPairGenerator; -import java.security.NoSuchAlgorithmException; +import java.security.*; +import java.security.spec.PKCS8EncodedKeySpec; import java.util.Base64; @Component -@Slf4j public class EncryptionDecryptionUtil { /** * The cryptomanager service. */ + + private static final int GCM_IV_LENGTH = 12; // 12-byte IV for GCM + private static final int GCM_TAG_LENGTH = 128; // 128-bit authentication tag + @Autowired private CryptomanagerService cryptomanagerService; private @@ -70,12 +72,75 @@ public static KeyPair generateKeyPair(String algorithm) throws NoSuchAlgorithmEx return keyPairGenerator.generateKeyPair(); } - // Helper method to encrypt the private key using the AES key - public static String encryptPrivateKeyWithAES(SecretKey aesKey, java.security.PrivateKey privateKey) throws Exception { - Cipher cipher = Cipher.getInstance("AES"); - cipher.init(Cipher.ENCRYPT_MODE, aesKey); - byte[] encryptedPrivateKey = cipher.doFinal(privateKey.getEncoded()); - return Base64.getEncoder().encodeToString(encryptedPrivateKey); + /** + * Encrypts the given data using AES-GCM. + * + * @param aesKey The AES secret key + * @param data The data to encrypt (as byte[]) + * @return Base64 encoded string of (IV + encryptedData) + */ + public static String encrypt(SecretKey aesKey, byte[] data) throws Exception { + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + + // Generate a secure random IV + byte[] iv = new byte[GCM_IV_LENGTH]; + SecureRandom secureRandom = new SecureRandom(); + secureRandom.nextBytes(iv); + + // Initialize cipher with AES key & IV + GCMParameterSpec gcmSpec = new GCMParameterSpec(GCM_TAG_LENGTH, iv); + cipher.init(Cipher.ENCRYPT_MODE, aesKey, gcmSpec); + + // Encrypt the data + byte[] encryptedData = cipher.doFinal(data); + + // Combine IV + Encrypted Data + byte[] finalEncryptedData = new byte[GCM_IV_LENGTH + encryptedData.length]; + System.arraycopy(iv, 0, finalEncryptedData, 0, GCM_IV_LENGTH); + System.arraycopy(encryptedData, 0, finalEncryptedData, GCM_IV_LENGTH, encryptedData.length); + + return Base64.getEncoder().encodeToString(finalEncryptedData); } -} + /** + * Decrypts the given Base64 encoded data using AES-GCM. + * + * @param aesKey The AES secret key + * @param base64EncodedData Base64 encoded string of (IV + encryptedData) + * @return Decrypted data as byte[] + */ + public static byte[] decrypt(SecretKey aesKey, String base64EncodedData) throws Exception { + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + byte[] decodedData = Base64.getDecoder().decode(base64EncodedData); + + // Extract IV and Encrypted Data + byte[] iv = new byte[GCM_IV_LENGTH]; + byte[] encryptedData = new byte[decodedData.length - GCM_IV_LENGTH]; + + System.arraycopy(decodedData, 0, iv, 0, GCM_IV_LENGTH); + System.arraycopy(decodedData, GCM_IV_LENGTH, encryptedData, 0, encryptedData.length); + + // Initialize cipher with AES key & extracted IV + GCMParameterSpec gcmSpec = new GCMParameterSpec(GCM_TAG_LENGTH, iv); + cipher.init(Cipher.DECRYPT_MODE, aesKey, gcmSpec); + + return cipher.doFinal(encryptedData); + } + + public static byte[] stringToBytes(String data) { + return data.getBytes(StandardCharsets.UTF_8); + } + + public static String bytesToString(byte[] data) { + return new String(data, StandardCharsets.UTF_8); + } + + public static SecretKey bytesToSecretKey(byte[] keyBytes) { + return new javax.crypto.spec.SecretKeySpec(keyBytes, "AES"); + } + public static PrivateKey bytesToPrivateKey(byte[] privateKeyBytes, String algorithmName) throws Exception { + PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKeyBytes); + KeyFactory keyFactory = KeyFactory.getInstance(algorithmName); + return keyFactory.generatePrivate(keySpec); + } +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/util/WalletUtil.java b/src/main/java/io/mosip/mimoto/util/WalletUtil.java index d1ce2f054..2b7100b23 100644 --- a/src/main/java/io/mosip/mimoto/util/WalletUtil.java +++ b/src/main/java/io/mosip/mimoto/util/WalletUtil.java @@ -46,7 +46,7 @@ public String decryptWalletKey(String encryptedWalletKey, String pin) { public String createNewWallet(String userId, String walletName, String pin, KeyPair keyPair, SecretKey encryptionKey, String encryptionAlgorithm, String encryptionType) throws Exception { // Encrypt the private key with the encryption key - String encryptedPrivateKey = EncryptionDecryptionUtil.encryptPrivateKeyWithAES(encryptionKey, keyPair.getPrivate()); + String encryptedPrivateKey = EncryptionDecryptionUtil.encrypt(encryptionKey, keyPair.getPrivate().getEncoded()); // Create wallet record String walletId = UUID.randomUUID().toString(); diff --git a/src/test/java/io/mosip/mimoto/util/EncryptionDecryptionUtilTest.java b/src/test/java/io/mosip/mimoto/util/EncryptionDecryptionUtilTest.java index 6aa7a74da..c33c112b4 100644 --- a/src/test/java/io/mosip/mimoto/util/EncryptionDecryptionUtilTest.java +++ b/src/test/java/io/mosip/mimoto/util/EncryptionDecryptionUtilTest.java @@ -101,7 +101,7 @@ public void encryptPrivateKeyWithAES_shouldEncryptPrivateKey() throws Exception SecretKey aesKey = EncryptionDecryptionUtil.generateEncryptionKey("AES", 256); KeyPair keyPair = EncryptionDecryptionUtil.generateKeyPair("Ed25519"); - String encryptedPrivateKey = EncryptionDecryptionUtil.encryptPrivateKeyWithAES(aesKey, keyPair.getPrivate()); + String encryptedPrivateKey = EncryptionDecryptionUtil.encrypt(aesKey, keyPair.getPrivate().getEncoded()); assertNotNull(encryptedPrivateKey); assertFalse(StringUtils.isBlank(encryptedPrivateKey)); diff --git a/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java b/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java index a03dbe9e9..5eda7bb1f 100644 --- a/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java +++ b/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java @@ -3,10 +3,9 @@ import io.mosip.kernel.cryptomanager.dto.CryptoWithPinRequestDto; import io.mosip.kernel.cryptomanager.dto.CryptoWithPinResponseDto; import io.mosip.kernel.cryptomanager.service.CryptomanagerService; -import io.mosip.mimoto.dbentity.KeyMetadata; import io.mosip.mimoto.dbentity.Wallet; -import io.mosip.mimoto.dbentity.WalletMetadata; import io.mosip.mimoto.repository.WalletRepository; +import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -17,16 +16,18 @@ import javax.crypto.SecretKey; import java.security.KeyPair; +import java.security.PrivateKey; +import java.util.Arrays; import java.util.Base64; import java.util.UUID; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) +@Slf4j class WalletUtilTest { @Mock @@ -43,7 +44,6 @@ class WalletUtilTest { private String userId; private KeyPair keyPair; private SecretKey encryptionKey; - private String encryptedPrivateKey; private String encryptedWalletKey; private String decryptedWalletKey; private String publicKeyBase64; @@ -58,7 +58,6 @@ void setUp() throws Exception { userId = UUID.randomUUID().toString(); keyPair = EncryptionDecryptionUtil.generateKeyPair("Ed25519"); encryptionKey = EncryptionDecryptionUtil.generateEncryptionKey("AES", 256); - encryptedPrivateKey = EncryptionDecryptionUtil.encryptPrivateKeyWithAES(encryptionKey, keyPair.getPrivate()); encryptedWalletKey = "encryptedWalletKey"; decryptedWalletKey = Base64.getEncoder().encodeToString(encryptionKey.getEncoded()); publicKeyBase64 = Base64.getEncoder().encodeToString(keyPair.getPublic().getEncoded()); @@ -111,9 +110,29 @@ void createNewWallet_verifyWalletObject() throws Exception { assertEquals(userId, savedWallet.getUserId()); assertEquals(keyPair.getPublic().getAlgorithm(), savedWallet.getProofSigningKeys().get(0).getKeyMetadata().getAlgorithmName()); assertEquals(publicKeyBase64, savedWallet.getProofSigningKeys().get(0).getPublicKey()); - assertEquals(encryptedPrivateKey, savedWallet.getProofSigningKeys().get(0).getSecretKey()); + assertFalse(savedWallet.getProofSigningKeys().get(0).getSecretKey().isEmpty(), "Encrypted private key should not be empty"); assertEquals(encryptedWalletKey, savedWallet.getWalletKey()); assertEquals(encryptionAlgorithm, savedWallet.getWalletMetadata().getEncryptionAlgo()); assertEquals(encryptionType, savedWallet.getWalletMetadata().getEncryptionType()); } + + @Test + void testIVChangesButCiphertextRemainsSameForSameEncryptionKeyAndSecretKey() throws Exception { + String encryptedPrivateKey1 = EncryptionDecryptionUtil.encrypt(encryptionKey, keyPair.getPrivate().getEncoded()); + String encryptedPrivateKey2 = EncryptionDecryptionUtil.encrypt(encryptionKey, keyPair.getPrivate().getEncoded()); + + byte[] encryptedBytes1 = Base64.getDecoder().decode(encryptedPrivateKey1); + byte[] encryptedBytes2 = Base64.getDecoder().decode(encryptedPrivateKey2); + + byte[] iv1 = Arrays.copyOfRange(encryptedBytes1, 0, 12); + byte[] iv2 = Arrays.copyOfRange(encryptedBytes2, 0, 12); + + byte[] decryptedPrivateKey1Bytes = EncryptionDecryptionUtil.decrypt(encryptionKey, encryptedPrivateKey1); + byte[] decryptedPrivateKey2Bytes = EncryptionDecryptionUtil.decrypt(encryptionKey, encryptedPrivateKey2); + PrivateKey decryptedPrivateKey1 = EncryptionDecryptionUtil.bytesToPrivateKey(decryptedPrivateKey1Bytes, "ed25519"); + PrivateKey decryptedPrivateKey2 = EncryptionDecryptionUtil.bytesToPrivateKey(decryptedPrivateKey2Bytes,"ed25519"); + + assertFalse(Arrays.equals(iv1, iv2), "IVs should be different"); + assertEquals(decryptedPrivateKey1, decryptedPrivateKey2); + } } \ No newline at end of file From 80cbb1e32d442bccf340d74f63fadf367a918365 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Fri, 4 Apr 2025 09:12:06 +0530 Subject: [PATCH 492/860] injiweb-1510 added BouncyCastleProvider Signed-off-by: Gurpreet41082 --- src/main/java/io/mosip/mimoto/util/KeyGenerationUtil.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/io/mosip/mimoto/util/KeyGenerationUtil.java b/src/main/java/io/mosip/mimoto/util/KeyGenerationUtil.java index e1ee15cd2..cd5b3689d 100644 --- a/src/main/java/io/mosip/mimoto/util/KeyGenerationUtil.java +++ b/src/main/java/io/mosip/mimoto/util/KeyGenerationUtil.java @@ -1,5 +1,7 @@ package io.mosip.mimoto.util; +import org.bouncycastle.jce.provider.BouncyCastleProvider; + import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import java.security.*; @@ -7,6 +9,12 @@ public class KeyGenerationUtil { + static { + if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null) { + Security.addProvider(new BouncyCastleProvider()); + } + } + /** * Generates a key pair for the given algorithm. * From 82913de96d952b79d2e9f5dff12ea536503b5fdd Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Fri, 4 Apr 2025 12:51:12 +0530 Subject: [PATCH 493/860] [INJIWEB-1418] rename encrypt and decrypte with aes method names and update the tests accordingly Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../impl/WalletCredentialServiceImpl.java | 8 +++-- .../mimoto/util/EncryptionDecryptionUtil.java | 4 +-- .../java/io/mosip/mimoto/util/WalletUtil.java | 5 ++- .../util/EncryptionDecryptionUtilTest.java | 35 +++++++++++++++++-- .../io/mosip/mimoto/util/WalletUtilTest.java | 31 +++++----------- 5 files changed, 52 insertions(+), 31 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java index 5e630a03a..40c28c4a9 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java @@ -1,7 +1,6 @@ package io.mosip.mimoto.service.impl; import com.fasterxml.jackson.databind.ObjectMapper; -import io.mosip.kernel.cryptomanager.dto.CryptoWithPinRequestDto; import io.mosip.kernel.cryptomanager.service.CryptomanagerService; import io.mosip.mimoto.dbentity.CredentialMetadata; import io.mosip.mimoto.dbentity.VerifiableCredential; @@ -77,6 +76,9 @@ public class WalletCredentialServiceImpl implements WalletCredentialService { @Autowired private CredentialUtilService credentialUtilService; + @Autowired + private EncryptionDecryptionUtil encryptionDecryptionUtil; + PixelPass pixelPass; CredentialsVerifier credentialsVerifier; @@ -145,13 +147,13 @@ private CredentialIssuerWellKnownResponse getIssuerWellKnownResponse(String issu private String encryptCredential(String credentialData, String base64EncodedWalletKey) throws Exception { byte[] decodedWalletKey = Base64.getDecoder().decode(base64EncodedWalletKey); SecretKey walletKey = EncryptionDecryptionUtil.bytesToSecretKey(decodedWalletKey); - return EncryptionDecryptionUtil.encrypt(walletKey, EncryptionDecryptionUtil.stringToBytes(credentialData)); + return encryptionDecryptionUtil.encryptWithAES(walletKey, EncryptionDecryptionUtil.stringToBytes(credentialData)); } private String decryptCredential(String encryptedCredentialData, String base64EncodedWalletKey) throws Exception { byte[] decodedWalletKey = Base64.getDecoder().decode(base64EncodedWalletKey); SecretKey walletKey = EncryptionDecryptionUtil.bytesToSecretKey(decodedWalletKey); - return EncryptionDecryptionUtil.bytesToString(EncryptionDecryptionUtil.decrypt(walletKey, encryptedCredentialData)); + return EncryptionDecryptionUtil.bytesToString(encryptionDecryptionUtil.decryptWithAES(walletKey, encryptedCredentialData)); } private VerifiableCredential saveCredential(String walletId, String encryptedCredential, boolean isVerified, String issuerId, String credentialType) { diff --git a/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java b/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java index 264b67430..c783e9ac3 100644 --- a/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java +++ b/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java @@ -79,7 +79,7 @@ public static KeyPair generateKeyPair(String algorithm) throws NoSuchAlgorithmEx * @param data The data to encrypt (as byte[]) * @return Base64 encoded string of (IV + encryptedData) */ - public static String encrypt(SecretKey aesKey, byte[] data) throws Exception { + public String encryptWithAES(SecretKey aesKey, byte[] data) throws Exception { Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); // Generate a secure random IV @@ -109,7 +109,7 @@ public static String encrypt(SecretKey aesKey, byte[] data) throws Exception { * @param base64EncodedData Base64 encoded string of (IV + encryptedData) * @return Decrypted data as byte[] */ - public static byte[] decrypt(SecretKey aesKey, String base64EncodedData) throws Exception { + public byte[] decryptWithAES(SecretKey aesKey, String base64EncodedData) throws Exception { Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); byte[] decodedData = Base64.getDecoder().decode(base64EncodedData); diff --git a/src/main/java/io/mosip/mimoto/util/WalletUtil.java b/src/main/java/io/mosip/mimoto/util/WalletUtil.java index 2b7100b23..86c51b3d5 100644 --- a/src/main/java/io/mosip/mimoto/util/WalletUtil.java +++ b/src/main/java/io/mosip/mimoto/util/WalletUtil.java @@ -28,6 +28,9 @@ public class WalletUtil { @Autowired private CryptomanagerService cryptomanagerService; + @Autowired + private EncryptionDecryptionUtil encryptionDecryptionUtil; + // Method to decrypt the wallet key using the PIN public String decryptWalletKey(String encryptedWalletKey, String pin) { @@ -46,7 +49,7 @@ public String decryptWalletKey(String encryptedWalletKey, String pin) { public String createNewWallet(String userId, String walletName, String pin, KeyPair keyPair, SecretKey encryptionKey, String encryptionAlgorithm, String encryptionType) throws Exception { // Encrypt the private key with the encryption key - String encryptedPrivateKey = EncryptionDecryptionUtil.encrypt(encryptionKey, keyPair.getPrivate().getEncoded()); + String encryptedPrivateKey = encryptionDecryptionUtil.encryptWithAES(encryptionKey, keyPair.getPrivate().getEncoded()); // Create wallet record String walletId = UUID.randomUUID().toString(); diff --git a/src/test/java/io/mosip/mimoto/util/EncryptionDecryptionUtilTest.java b/src/test/java/io/mosip/mimoto/util/EncryptionDecryptionUtilTest.java index c33c112b4..8d98acbf2 100644 --- a/src/test/java/io/mosip/mimoto/util/EncryptionDecryptionUtilTest.java +++ b/src/test/java/io/mosip/mimoto/util/EncryptionDecryptionUtilTest.java @@ -16,8 +16,14 @@ import javax.crypto.SecretKey; import java.nio.charset.StandardCharsets; import java.security.KeyPair; +import java.security.NoSuchAlgorithmException; +import java.security.PrivateKey; +import java.util.Arrays; +import java.util.Base64; import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; @@ -34,12 +40,17 @@ public class EncryptionDecryptionUtilTest { private final String aad = "aad123"; private final String salt = "salt123"; private final String encryptedData = "encryptedData"; + private KeyPair keyPair; + + private SecretKey encryptionKey; @Before - public void setUp() { + public void setUp() throws NoSuchAlgorithmException { String appId = "MIMOTO"; ReflectionTestUtils.setField(encryptionDecryptionUtil, "appId", appId); + encryptionKey = EncryptionDecryptionUtil.generateEncryptionKey("AES", 256); + keyPair = EncryptionDecryptionUtil.generateKeyPair("Ed25519"); } @Test @@ -101,9 +112,29 @@ public void encryptPrivateKeyWithAES_shouldEncryptPrivateKey() throws Exception SecretKey aesKey = EncryptionDecryptionUtil.generateEncryptionKey("AES", 256); KeyPair keyPair = EncryptionDecryptionUtil.generateKeyPair("Ed25519"); - String encryptedPrivateKey = EncryptionDecryptionUtil.encrypt(aesKey, keyPair.getPrivate().getEncoded()); + String encryptedPrivateKey = encryptionDecryptionUtil.encryptWithAES(aesKey, keyPair.getPrivate().getEncoded()); assertNotNull(encryptedPrivateKey); assertFalse(StringUtils.isBlank(encryptedPrivateKey)); } + + @Test + public void testIVChangesButCiphertextRemainsSameForSameEncryptionKeyAndSecretKey() throws Exception { + String encryptedPrivateKey1 = encryptionDecryptionUtil.encryptWithAES(encryptionKey, keyPair.getPrivate().getEncoded()); + String encryptedPrivateKey2 = encryptionDecryptionUtil.encryptWithAES(encryptionKey, keyPair.getPrivate().getEncoded()); + + byte[] encryptedBytes1 = Base64.getDecoder().decode(encryptedPrivateKey1); + byte[] encryptedBytes2 = Base64.getDecoder().decode(encryptedPrivateKey2); + + byte[] iv1 = Arrays.copyOfRange(encryptedBytes1, 0, 12); + byte[] iv2 = Arrays.copyOfRange(encryptedBytes2, 0, 12); + + byte[] decryptedPrivateKey1Bytes = encryptionDecryptionUtil.decryptWithAES(encryptionKey, encryptedPrivateKey1); + byte[] decryptedPrivateKey2Bytes = encryptionDecryptionUtil.decryptWithAES(encryptionKey, encryptedPrivateKey2); + PrivateKey decryptedPrivateKey1 = EncryptionDecryptionUtil.bytesToPrivateKey(decryptedPrivateKey1Bytes, "ed25519"); + PrivateKey decryptedPrivateKey2 = EncryptionDecryptionUtil.bytesToPrivateKey(decryptedPrivateKey2Bytes,"ed25519"); + + assertFalse(Arrays.equals(iv1, iv2), "IVs should be different"); + assertEquals(decryptedPrivateKey1, decryptedPrivateKey2); + } } diff --git a/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java b/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java index 5eda7bb1f..b2fc3b7eb 100644 --- a/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java +++ b/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java @@ -16,8 +16,6 @@ import javax.crypto.SecretKey; import java.security.KeyPair; -import java.security.PrivateKey; -import java.util.Arrays; import java.util.Base64; import java.util.UUID; @@ -39,6 +37,9 @@ class WalletUtilTest { @InjectMocks private WalletUtil walletUtil; + @Mock + private EncryptionDecryptionUtil encryptionDecryptionUtil; + private String pin; private String name; private String userId; @@ -97,6 +98,9 @@ void createEd25519AlgoWallet_shouldCreateEd25519WalletSuccessfully() throws Exce @Test void createNewWallet_verifyWalletObject() throws Exception { + String encryptedSecretKey = "encrypted-secret-key"; + when(encryptionDecryptionUtil.encryptWithAES(any(SecretKey.class), any(byte[].class))).thenReturn(encryptedSecretKey); + cryptoResponseDto.setData(encryptedWalletKey); when(cryptomanagerService.encryptWithPin(any(CryptoWithPinRequestDto.class))).thenReturn(cryptoResponseDto); String walletId = walletUtil.createNewWallet(userId, pin, name, keyPair, encryptionKey, encryptionAlgorithm, encryptionType); @@ -110,29 +114,10 @@ void createNewWallet_verifyWalletObject() throws Exception { assertEquals(userId, savedWallet.getUserId()); assertEquals(keyPair.getPublic().getAlgorithm(), savedWallet.getProofSigningKeys().get(0).getKeyMetadata().getAlgorithmName()); assertEquals(publicKeyBase64, savedWallet.getProofSigningKeys().get(0).getPublicKey()); - assertFalse(savedWallet.getProofSigningKeys().get(0).getSecretKey().isEmpty(), "Encrypted private key should not be empty"); + assertNotNull(savedWallet.getProofSigningKeys()); + assertEquals(encryptedSecretKey,savedWallet.getProofSigningKeys().get(0).getSecretKey()); assertEquals(encryptedWalletKey, savedWallet.getWalletKey()); assertEquals(encryptionAlgorithm, savedWallet.getWalletMetadata().getEncryptionAlgo()); assertEquals(encryptionType, savedWallet.getWalletMetadata().getEncryptionType()); } - - @Test - void testIVChangesButCiphertextRemainsSameForSameEncryptionKeyAndSecretKey() throws Exception { - String encryptedPrivateKey1 = EncryptionDecryptionUtil.encrypt(encryptionKey, keyPair.getPrivate().getEncoded()); - String encryptedPrivateKey2 = EncryptionDecryptionUtil.encrypt(encryptionKey, keyPair.getPrivate().getEncoded()); - - byte[] encryptedBytes1 = Base64.getDecoder().decode(encryptedPrivateKey1); - byte[] encryptedBytes2 = Base64.getDecoder().decode(encryptedPrivateKey2); - - byte[] iv1 = Arrays.copyOfRange(encryptedBytes1, 0, 12); - byte[] iv2 = Arrays.copyOfRange(encryptedBytes2, 0, 12); - - byte[] decryptedPrivateKey1Bytes = EncryptionDecryptionUtil.decrypt(encryptionKey, encryptedPrivateKey1); - byte[] decryptedPrivateKey2Bytes = EncryptionDecryptionUtil.decrypt(encryptionKey, encryptedPrivateKey2); - PrivateKey decryptedPrivateKey1 = EncryptionDecryptionUtil.bytesToPrivateKey(decryptedPrivateKey1Bytes, "ed25519"); - PrivateKey decryptedPrivateKey2 = EncryptionDecryptionUtil.bytesToPrivateKey(decryptedPrivateKey2Bytes,"ed25519"); - - assertFalse(Arrays.equals(iv1, iv2), "IVs should be different"); - assertEquals(decryptedPrivateKey1, decryptedPrivateKey2); - } } \ No newline at end of file From 51a8f584924c04166b3e0f9130fba2da4bb612c7 Mon Sep 17 00:00:00 2001 From: Rakshithb1 Date: Fri, 4 Apr 2025 14:10:31 +0530 Subject: [PATCH 494/860] [MOSIP-40792] updated to inji-stack-config Signed-off-by: Rakshithb1 --- deploy/README.md | 2 +- deploy/config-server/delete.sh | 2 +- deploy/config-server/install.sh | 2 +- deploy/config-server/values.yaml | 12 ++++++------ deploy/inji-stack-cm.yaml.sample | 4 ++-- deploy/mimoto-apitestrig/install.sh | 8 ++++---- deploy/mimoto/install.sh | 4 ++-- deploy/object-store/minio/install.sh | 2 +- partner-onboarder/copy_cm.sh | 2 +- 9 files changed, 19 insertions(+), 19 deletions(-) diff --git a/deploy/README.md b/deploy/README.md index 34a15185d..7ddea7772 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -25,7 +25,7 @@ * __Monitoring__ : Setup monitoring consisting elasticsearch, kibana, grafana using [steps](https://github.com/mosip/k8s-infra/tree/main/monitoring). ### Install Pre-requisites -* `global` configmap: For inji K8's env, `global` configmap in `default` namespace contains Domain related information. Follow below steps to add domain details for `global` configmap. +* `inji-stack-config` configmap: For inji K8's env, `inji-stack-config` configmap in `default` namespace contains Domain related information. Follow below steps to add domain details for `inji-stack-config` configmap. * Copy `inji-stack-cm.yaml.sample` to `inji-stack-cm.yaml`. * Update the domain names in `inji-stack-cm.yaml` correctly for your environment, ensuring that only new domain names are added (remove existing domains). ```` diff --git a/deploy/config-server/delete.sh b/deploy/config-server/delete.sh index a2f939c5b..3a1c3d900 100755 --- a/deploy/config-server/delete.sh +++ b/deploy/config-server/delete.sh @@ -12,7 +12,7 @@ function config_server() { read -p "Are you sure you want to delete config-server helm charts?(Y/n) " yn if [ $yn = "Y" ] then - kubectl -n $NS delete configmap global s3 + kubectl -n $NS delete configmap inji-stack-config s3 kubectl -n $NS delete secret conf-secrets-various s3 helm -n $NS delete config-server break diff --git a/deploy/config-server/install.sh b/deploy/config-server/install.sh index 38055bc9c..f32b0e40c 100755 --- a/deploy/config-server/install.sh +++ b/deploy/config-server/install.sh @@ -25,7 +25,7 @@ CHART_VERSION=0.0.2-develop echo Copy configmaps COPY_UTIL=../copy_cm_func.sh - $COPY_UTIL configmap global default $NS + $COPY_UTIL configmap inji-stack-config default $NS $COPY_UTIL configmap s3 s3 $NS echo Copy secrets diff --git a/deploy/config-server/values.yaml b/deploy/config-server/values.yaml index 288879110..b6a0c3c51 100755 --- a/deploy/config-server/values.yaml +++ b/deploy/config-server/values.yaml @@ -24,14 +24,14 @@ envVariables: - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_API_PUBLIC_HOST valueFrom: configMapKeyRef: - name: global + name: inji-stack-config key: mosip-api-host enabled: true - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_API_INTERNAL_HOST valueFrom: configMapKeyRef: - name: global + name: inji-stack-config key: mosip-api-internal-host enabled: true @@ -74,28 +74,28 @@ envVariables: valueFrom: configMapKeyRef: key: mosip-esignet-host - name: global + name: inji-stack-config enabled: true - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_ESIGNET_INSURANCE_HOST valueFrom: configMapKeyRef: key: mosip-esignet-insurance-host - name: global + name: inji-stack-config enabled: false - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_INJIWEB_HOST valueFrom: configMapKeyRef: key: mosip-injiweb-host - name: global + name: inji-stack-config enabled: true - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_INJIVERIFY_HOST valueFrom: configMapKeyRef: key: mosip-injiverify-host - name: global + name: inji-stack-config enabled: true extraEnvVars: diff --git a/deploy/inji-stack-cm.yaml.sample b/deploy/inji-stack-cm.yaml.sample index f799dec28..98a8bb48f 100644 --- a/deploy/inji-stack-cm.yaml.sample +++ b/deploy/inji-stack-cm.yaml.sample @@ -1,4 +1,4 @@ -## The data here is of generic interest to modules in different namespaces hence this is marked as global. +## The data here is of generic interest to modules in different namespaces hence this is marked as inji-stack-config. ## Replace your domain names here. ## mosip-api-host: External public access. (Typically required only in production rollouts). ## mosip-api-internal-host: Internal secure access over Wireguard. @@ -6,7 +6,7 @@ apiVersion: v1 kind: ConfigMap metadata: - name: global + name: inji-stack-config namespace: default data: mosip-version: develop diff --git a/deploy/mimoto-apitestrig/install.sh b/deploy/mimoto-apitestrig/install.sh index 4ef967344..4cdc56636 100755 --- a/deploy/mimoto-apitestrig/install.sh +++ b/deploy/mimoto-apitestrig/install.sh @@ -19,7 +19,7 @@ function installing_apitestrig() { echo Copy Configmaps COPY_UTIL=../copy_cm_func.sh - $COPY_UTIL configmap global default $NS + $COPY_UTIL configmap inji-stack-config default $NS $COPY_UTIL configmap keycloak-host keycloak $NS $COPY_UTIL configmap artifactory-share artifactory $NS $COPY_UTIL configmap config-server-share config-server $NS @@ -34,9 +34,9 @@ function installing_apitestrig() { kubectl -n $NS delete --ignore-not-found=true configmap db kubectl -n $NS delete --ignore-not-found=true configmap apitestrig - DB_HOST=$( kubectl -n default get cm global -o json |jq -r '.data."mosip-api-internal-host"' ) - API_INTERNAL_HOST=$( kubectl -n default get cm global -o json |jq -r '.data."mosip-api-internal-host"' ) - ENV_USER=$( kubectl -n default get cm global -o json |jq -r '.data."mosip-api-internal-host"' | awk -F '.' '/api-internal/{print $1"."$2}') + DB_HOST=$( kubectl -n default get cm inji-stack-config -o json |jq -r '.data."mosip-api-internal-host"' ) + API_INTERNAL_HOST=$( kubectl -n default get cm inji-stack-config -o json |jq -r '.data."mosip-api-internal-host"' ) + ENV_USER=$( kubectl -n default get cm inji-stack-config -o json |jq -r '.data."mosip-api-internal-host"' | awk -F '.' '/api-internal/{print $1"."$2}') read -p "Please enter the time(hr) to run the cronjob every day (time: 0-23) : " time if [ -z "$time" ]; then diff --git a/deploy/mimoto/install.sh b/deploy/mimoto/install.sh index 77e211a41..702394d30 100755 --- a/deploy/mimoto/install.sh +++ b/deploy/mimoto/install.sh @@ -20,7 +20,7 @@ function installing_mimoto() { echo Copy Configmaps COPY_UTIL=../copy_cm_func.sh - $COPY_UTIL configmap global default $NS + $COPY_UTIL configmap inji-stack-config default $NS $COPY_UTIL configmap artifactory-share artifactory $NS $COPY_UTIL configmap config-server-share config-server $NS @@ -50,7 +50,7 @@ function installing_mimoto() { kubectl -n config-server set env --keys=mimoto-oidc-partner-clientid --from secret/mimoto-oidc-partner-clientid deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ kubectl -n config-server set env --keys=mimoto-oidc-keystore-password --from secret/mimoto-oidc-keystore-password deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ - # kubectl -n config-server get deploy -o name | xargs -n1 -t kubectl -n config-server rollout status + kubectl -n config-server get deploy -o name | xargs -n1 -t kubectl -n config-server rollout status echo "Please share relevant google client id " read -p "" clientId diff --git a/deploy/object-store/minio/install.sh b/deploy/object-store/minio/install.sh index e0db36b6c..30b5632f8 100644 --- a/deploy/object-store/minio/install.sh +++ b/deploy/object-store/minio/install.sh @@ -17,7 +17,7 @@ function installing_minio() { helm -n minio install minio mosip/minio -f values.yaml --version 10.1.6 echo Installing gateways and virtualservice - EXTERNAL_HOST=$(kubectl get cm global -o jsonpath={.data.mosip-minio-host}) + EXTERNAL_HOST=$(kubectl get cm inji-stack-config -o jsonpath={.data.mosip-minio-host}) echo host: $EXTERNAL_HOST helm -n $NS install istio-addons chart/istio-addons --set externalHost=$EXTERNAL_HOST diff --git a/partner-onboarder/copy_cm.sh b/partner-onboarder/copy_cm.sh index fb26a4774..8c2072dd8 100755 --- a/partner-onboarder/copy_cm.sh +++ b/partner-onboarder/copy_cm.sh @@ -5,6 +5,6 @@ COPY_UTIL=./copy_cm_func.sh DST_NS=injiweb -$COPY_UTIL configmap global default $DST_NS +$COPY_UTIL configmap inji-stack-config default $DST_NS $COPY_UTIL configmap keycloak-env-vars keycloak $DST_NS || { echo "Ignore the error if Keycloak values have been added to values.yaml."; true; } $COPY_UTIL configmap keycloak-host keycloak $DST_NS || { echo "Ignore the error if Keycloak values have been added to values.yaml."; true; } From 958e1348cded7e5d1c5d17391a9a643a6ad10510 Mon Sep 17 00:00:00 2001 From: Rakshithb1 Date: Fri, 4 Apr 2025 14:16:16 +0530 Subject: [PATCH 495/860] [MOSIP-40792] updated to inji-stack-config Signed-off-by: Rakshithb1 --- deploy/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/README.md b/deploy/README.md index 7ddea7772..7ca680e8b 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -27,7 +27,7 @@ ### Install Pre-requisites * `inji-stack-config` configmap: For inji K8's env, `inji-stack-config` configmap in `default` namespace contains Domain related information. Follow below steps to add domain details for `inji-stack-config` configmap. * Copy `inji-stack-cm.yaml.sample` to `inji-stack-cm.yaml`. - * Update the domain names in `inji-stack-cm.yaml` correctly for your environment, ensuring that only new domain names are added (remove existing domains). + * Update the domain names in `inji-stack-cm.yaml` correctly for your environment. ```` kubectl -n default apply -f inji-stack-cm.yaml ```` From 14c00c0cf733ec39e0948564341bfb6409ac135d Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Fri, 4 Apr 2025 14:31:08 +0530 Subject: [PATCH 496/860] [INJIWEB-1418] move the logic of generating the wallet credential response dto into separate factory class Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../exception/PlatformErrorMessages.java | 2 +- .../WalletCredentialsRepository.java | 8 +++ .../impl/WalletCredentialServiceImpl.java | 54 +++++++------------ .../WalletCredentialResponseDTOFactory.java | 40 ++++++++++++++ 4 files changed, 67 insertions(+), 37 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/util/WalletCredentialResponseDTOFactory.java diff --git a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java index 478c19005..af8738f95 100644 --- a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java +++ b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java @@ -100,7 +100,7 @@ public enum PlatformErrorMessages { USER_WALLET_CREATION_EXCEPTION(PlatformConstants.PREFIX + "050", "Exception occurred when creating the wallet for user"), USER_WALLET_RETRIEVAL_EXCEPTION(PlatformConstants.PREFIX + "051", "Exception occurred when creating the wallet for user"), USER_METADATA_CACHE_FETCH_EXCEPTION(PlatformConstants.PREFIX + "052", "Failed to fetch the User metadata from cache"), - LOGIN_CREDENTIAL_DOWNLOAD_EXCEPTION(PlatformConstants.PREFIX + "052", "Exception occurred when downloading and storing the credential"), + LOGIN_CREDENTIAL_DOWNLOAD_EXCEPTION(PlatformConstants.PREFIX + "052", "Failed to download and store the credential"), CREDENTIALS_FETCH_EXCEPTION(PlatformConstants.PREFIX + "053", "Exception occurred when fetch credentials for the specified wallet"); /** The error message. */ diff --git a/src/main/java/io/mosip/mimoto/repository/WalletCredentialsRepository.java b/src/main/java/io/mosip/mimoto/repository/WalletCredentialsRepository.java index ce5c265ea..4e6fa6ae1 100644 --- a/src/main/java/io/mosip/mimoto/repository/WalletCredentialsRepository.java +++ b/src/main/java/io/mosip/mimoto/repository/WalletCredentialsRepository.java @@ -2,10 +2,18 @@ import io.mosip.mimoto.dbentity.VerifiableCredential; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import java.util.List; +import java.util.Optional; @Repository public interface WalletCredentialsRepository extends JpaRepository { List findByWalletId(String walletId); + Optional findById(String id); + + @Query(value = "SELECT EXISTS (SELECT 1 FROM verifiable_credentials WHERE credential_metadata->>'issuerId' = :issuerId AND credential_metadata->>'credentialType' = :credentialType)", nativeQuery = true) + boolean existsByIssuerIdAndCredentialType(@Param("issuerId") String issuerId, @Param("credentialType") String credentialType); + } diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java index 40c28c4a9..63a6d4467 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java @@ -29,10 +29,9 @@ import java.io.IOException; import java.util.Base64; import java.util.List; +import java.util.Set; import java.util.UUID; -import static io.mosip.mimoto.util.LocaleUtils.getCredentialDisplayDTOBasedOnLocale; -import static io.mosip.mimoto.util.LocaleUtils.getIssuerDisplayDTOBasedOnLocale; @Slf4j @Service @@ -93,6 +92,8 @@ public VerifiableCredentialResponseDTO fetchAndStoreCredential( String issuerId, String credentialType, TokenResponseDTO response, String credentialValidity, String locale, String walletId, String walletKey) throws Exception { + shouldInitiateDownloadRequest(issuerId,credentialType); + // Fetch issuer configuration IssuerDTO issuerDTO = issuersService.getIssuerDetails(issuerId); CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = getIssuerWellKnownResponse(issuerId); @@ -105,10 +106,21 @@ public VerifiableCredentialResponseDTO fetchAndStoreCredential( // Encrypt and store credential response into database String encryptedCredentialData = encryptCredential(vcCredentialResponse.toString(), walletKey); - VerifiableCredential savedCredential = saveCredential(walletId, encryptedCredentialData, verificationStatus, issuerId, credentialType ); + VerifiableCredential savedCredential = saveCredential(walletId, encryptedCredentialData, verificationStatus, issuerId, credentialType); // Build and return response DTO - return buildCredentialResponseDTO(issuerDTO, credentialsSupportedResponse, locale, savedCredential.getId()); + return WalletCredentialResponseDTOFactory.buildCredentialResponseDTO(issuerDTO, credentialsSupportedResponse, locale, savedCredential.getId()); + } + + public void shouldInitiateDownloadRequest(String issuerId, String credentialType) { + Set issuers = Set.of("Mosip"); + if (issuers.contains(issuerId) && alreadyDownloaded(issuerId, credentialType)) { + throw new RuntimeException("A credential is already downloaded for the selected Issuer and Credential Type. Only one is allowed, so download will not be initiated"); + } + } + + private boolean alreadyDownloaded(String issuerId, String credentialType) { + return walletCredentialsRepository.existsByIssuerIdAndCredentialType(issuerId, credentialType); } @Override @@ -124,11 +136,11 @@ public List fetchAllCredentialsForWallet(String .getCredentialConfigurationsSupported() .get(credentialRecord.getCredentialMetadata().getCredentialType()); - return buildCredentialResponseDTO(issuerDTO, credentialsSupportedResponse, locale, credentialRecord.getId()); + return WalletCredentialResponseDTOFactory.buildCredentialResponseDTO(issuerDTO, credentialsSupportedResponse, locale, credentialRecord.getId()); } catch (Exception e) { log.info("Error occurred while fetching configuration of issuerId : {} for credentialId: {}", credentialRecord.getCredentialMetadata().getIssuerId(), credentialRecord.getId(), e); - return buildCredentialResponseDTO(null, null, locale, credentialRecord.getId()); + return WalletCredentialResponseDTOFactory.buildCredentialResponseDTO(null, null, locale, credentialRecord.getId()); } }).toList(); } @@ -170,34 +182,4 @@ private VerifiableCredential saveCredential(String walletId, String encryptedCre return walletCredentialsRepository.save(verifiableCredential); } - - private VerifiableCredentialResponseDTO buildCredentialResponseDTO(IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, - String locale, String credentialId) { - String issuerName = ""; - String issuerLogo = ""; - String credentialType = ""; - String credentialTypeLogo = ""; - DisplayDTO issuerDisplayDTO; - CredentialSupportedDisplayResponse credentialTypeDisplayDTO; - - if (issuerDTO != null) { - issuerDisplayDTO = getIssuerDisplayDTOBasedOnLocale(issuerDTO.getDisplay(), locale); - issuerName = issuerDisplayDTO.getName(); - issuerLogo = issuerDisplayDTO.getLogo().getUrl(); - } - if (credentialsSupportedResponse != null) { - credentialTypeDisplayDTO = getCredentialDisplayDTOBasedOnLocale( - credentialsSupportedResponse.getDisplay(), locale); - credentialType = credentialTypeDisplayDTO.getName(); - credentialTypeLogo = credentialTypeDisplayDTO.getLogo().getUrl(); - } - - return VerifiableCredentialResponseDTO.builder() - .issuerName(issuerName) - .issuerLogo(issuerLogo) - .credentialType(credentialType) - .credentialTypeLogo(credentialTypeLogo) - .credentialId(credentialId) - .build(); - } } diff --git a/src/main/java/io/mosip/mimoto/util/WalletCredentialResponseDTOFactory.java b/src/main/java/io/mosip/mimoto/util/WalletCredentialResponseDTOFactory.java new file mode 100644 index 000000000..deba6bcb4 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/WalletCredentialResponseDTOFactory.java @@ -0,0 +1,40 @@ +package io.mosip.mimoto.util; + +import io.mosip.mimoto.dto.DisplayDTO; +import io.mosip.mimoto.dto.IssuerDTO; +import io.mosip.mimoto.dto.mimoto.*; + +import static io.mosip.mimoto.util.LocaleUtils.getCredentialDisplayDTOBasedOnLocale; +import static io.mosip.mimoto.util.LocaleUtils.getIssuerDisplayDTOBasedOnLocale; + +public class WalletCredentialResponseDTOFactory { + public static VerifiableCredentialResponseDTO buildCredentialResponseDTO(IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, + String locale, String credentialId) { + String issuerName = ""; + String issuerLogo = ""; + String credentialType = ""; + String credentialTypeLogo = ""; + DisplayDTO issuerDisplayDTO; + CredentialSupportedDisplayResponse credentialTypeDisplayDTO; + + if (issuerDTO != null) { + issuerDisplayDTO = getIssuerDisplayDTOBasedOnLocale(issuerDTO.getDisplay(), locale); + issuerName = issuerDisplayDTO.getName(); + issuerLogo = issuerDisplayDTO.getLogo().getUrl(); + } + if (credentialsSupportedResponse != null) { + credentialTypeDisplayDTO = getCredentialDisplayDTOBasedOnLocale( + credentialsSupportedResponse.getDisplay(), locale); + credentialType = credentialTypeDisplayDTO.getName(); + credentialTypeLogo = credentialTypeDisplayDTO.getLogo().getUrl(); + } + + return VerifiableCredentialResponseDTO.builder() + .issuerName(issuerName) + .issuerLogo(issuerLogo) + .credentialType(credentialType) + .credentialTypeLogo(credentialTypeLogo) + .credentialId(credentialId) + .build(); + } +} \ No newline at end of file From 0499b6f6fe52e23b19128d53abe47e53d174259c Mon Sep 17 00:00:00 2001 From: Rakshithb1 Date: Fri, 4 Apr 2025 16:19:41 +0530 Subject: [PATCH 497/860] [MOSIP-40792] updated to inji-stack-config Signed-off-by: Rakshithb1 --- helm/mimoto/values.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helm/mimoto/values.yaml b/helm/mimoto/values.yaml index ba5ded9d2..f41347ac2 100644 --- a/helm/mimoto/values.yaml +++ b/helm/mimoto/values.yaml @@ -245,7 +245,7 @@ extraEnvVars: [] ## ConfigMap with extra environment variables that used ## extraEnvVarsCM: - - global + - inji-stack-config - config-server-share - artifactory-share From d803f53834a9fb0c6573e0c80e6415a997dedfc7 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Fri, 4 Apr 2025 17:23:44 +0530 Subject: [PATCH 498/860] [INJIWEB-1418] update the updateAt field in userMetadata table only if any of the encrypted fields are updated Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../mimoto/service/UserMetadataService.java | 15 +++-- .../service/UserMetadataServiceTest.java | 60 +++++++++---------- 2 files changed, 39 insertions(+), 36 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/service/UserMetadataService.java b/src/main/java/io/mosip/mimoto/service/UserMetadataService.java index af52e35b3..90511e1b1 100644 --- a/src/main/java/io/mosip/mimoto/service/UserMetadataService.java +++ b/src/main/java/io/mosip/mimoto/service/UserMetadataService.java @@ -41,15 +41,18 @@ public String updateOrInsertUserMetadata(String providerSubjectId, String identi private void updateUserMetadata(UserMetadata userMetadata, String displayName, String profilePictureUrl, String email, Timestamp now) { + boolean isUpdated = false; // Check and update fields if needed - checkAndUpdateEncryptedField(userMetadata::getDisplayName, userMetadata::setDisplayName, displayName); - checkAndUpdateEncryptedField(userMetadata::getProfilePictureUrl, userMetadata::setProfilePictureUrl, profilePictureUrl); - checkAndUpdateEncryptedField(userMetadata::getEmail, userMetadata::setEmail, email); + isUpdated |= checkAndUpdateEncryptedField(userMetadata::getDisplayName, userMetadata::setDisplayName, displayName); + isUpdated |= checkAndUpdateEncryptedField(userMetadata::getProfilePictureUrl, userMetadata::setProfilePictureUrl, profilePictureUrl); + isUpdated |= checkAndUpdateEncryptedField(userMetadata::getEmail, userMetadata::setEmail, email); - // update the timestamp even if there is no change in details as we want to track the last time the user has logged in - userMetadata.setUpdatedAt(now); - userMetadataRepository.save(userMetadata); // Save the updated record + // If any field was updated, save the updated record and set the updated timestamp + if (isUpdated) { + userMetadata.setUpdatedAt(now); + userMetadataRepository.save(userMetadata); + } } private boolean checkAndUpdateEncryptedField(Supplier getter, Consumer setter, String newValue) { diff --git a/src/test/java/io/mosip/mimoto/service/UserMetadataServiceTest.java b/src/test/java/io/mosip/mimoto/service/UserMetadataServiceTest.java index aa7c2370c..2de770984 100644 --- a/src/test/java/io/mosip/mimoto/service/UserMetadataServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/UserMetadataServiceTest.java @@ -1,6 +1,5 @@ package io.mosip.mimoto.service; -import io.mosip.mimoto.controller.UsersController; import io.mosip.mimoto.dbentity.UserMetadata; import io.mosip.mimoto.repository.UserMetadataRepository; import io.mosip.mimoto.util.EncryptionDecryptionUtil; @@ -12,10 +11,6 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.mockito.junit.MockitoJUnitRunner; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; import java.sql.Timestamp; import java.util.Optional; @@ -65,7 +60,7 @@ public void setUp() { } @Test - public void shouldUpdateUserMetadataForSameProviderSubjectIdAndDifferentDisplayName() { + public void shouldUpdateUserMetadataForSameProviderSubjectIdAndSameIdentityProviderButWithDifferentDisplayName() { String updatedDisplayName = "Name 124"; when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider(providerSubjectId, identityProvider)).thenReturn(Optional.of(userMetadata)); when(encryptionDecryptionUtil.decrypt(anyString(), any(), any(), any())).thenReturn(displayName, profilePictureUrl, email); @@ -79,41 +74,46 @@ public void shouldUpdateUserMetadataForSameProviderSubjectIdAndDifferentDisplayN } @Test - public void shouldCreateNewUserMetadataIfUserRecordIsNotAvailableForReceivedProviderSubjectId() { + public void shouldCreateNewUserMetadataForSameProviderSubjectIdAndDifferentIdentityProvider() { + String identityProvider = "facebook"; when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider(providerSubjectId, identityProvider)).thenReturn(Optional.empty()); when(encryptionDecryptionUtil.encrypt(anyString(), any(), any(), any())).thenReturn(displayName, profilePictureUrl, email); - when(userMetadataRepository.save(any(UserMetadata.class))).thenAnswer(invocation -> { - UserMetadata savedUser = invocation.getArgument(0); - savedUser.setId(userId); - return savedUser; - }); + when(userMetadataRepository.save(any(UserMetadata.class))).thenReturn(userMetadata); - storedUserId = userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); + userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); - assertEquals(userId, storedUserId); - verify(userMetadataRepository, times(1)).save(any(UserMetadata.class)); + ArgumentCaptor userMetadataCaptor = ArgumentCaptor.forClass(UserMetadata.class); + verify(userMetadataRepository).save(userMetadataCaptor.capture()); + + UserMetadata capturedUserMetadata = userMetadataCaptor.getValue(); + String storedUserId = capturedUserMetadata.getId(); + assertNotEquals(userId, storedUserId); } @Test - public void shouldUpdateTheUpdatedFieldEvenIfNoChangesInMetadataObserved() throws InterruptedException { - Timestamp timestampBeforeUpdate = userMetadata.getUpdatedAt(); - String updatedDisplayName = "Name 123"; - String updatedProfilePictureUrl = "http://profile.pic"; - String updatedEmail = "name.123@example.com"; - when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider(providerSubjectId, identityProvider)).thenReturn(Optional.of(userMetadata)); - when(encryptionDecryptionUtil.decrypt(anyString(), any(), any(), any())).thenReturn(displayName, profilePictureUrl, email); - Thread.sleep(1); - storedUserId = userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); + public void shouldCreateNewUserMetadataForDifferentProviderSubjectIdAndSameIdentityProvider() { + String providerSubjectId = "provider124"; + when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider(providerSubjectId, identityProvider)).thenReturn(Optional.empty()); + when(encryptionDecryptionUtil.encrypt(anyString(), any(), any(), any())).thenReturn(displayName, profilePictureUrl, email); + when(userMetadataRepository.save(any(UserMetadata.class))).thenReturn(userMetadata); + + userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); ArgumentCaptor userMetadataCaptor = ArgumentCaptor.forClass(UserMetadata.class); verify(userMetadataRepository).save(userMetadataCaptor.capture()); UserMetadata capturedUserMetadata = userMetadataCaptor.getValue(); - Timestamp after = capturedUserMetadata.getUpdatedAt(); - assertEquals(updatedDisplayName, capturedUserMetadata.getDisplayName()); - assertEquals(updatedProfilePictureUrl, capturedUserMetadata.getProfilePictureUrl()); - assertEquals(updatedEmail, capturedUserMetadata.getEmail()); - assertNotEquals(timestampBeforeUpdate, after); - assertEquals(userId, storedUserId); + String storedUserId = capturedUserMetadata.getId(); + assertNotEquals(userId, storedUserId); + } + + @Test + public void shouldNotCreateNewUserMetadataForSameProviderSubjectIdAndSameIdentityProvider() { + when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider(providerSubjectId, identityProvider)).thenReturn(Optional.of(userMetadata)); + when(encryptionDecryptionUtil.decrypt(anyString(), any(), any(), any())).thenReturn(displayName, profilePictureUrl, email); + + userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); + + verify(userMetadataRepository,times(0)).save(any(UserMetadata.class)); } } From ba85451965087f627bc8a4285c4bfdefe87a452f Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Fri, 4 Apr 2025 19:33:14 +0530 Subject: [PATCH 499/860] [INJIWEB-1418] if wallet key is not available in session during download or fetching credentials then throw the error Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../controller/WalletCredentialsController.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index 15541860d..95d457789 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -37,13 +37,17 @@ public ResponseEntity downloadCredential(@PathVariable("walletId") String wal params.putIfAbsent("vcStorageExpiryLimitInTimes", "-1"); try { + Object walletKeyObj = httpSession.getAttribute("wallet_key"); + if (walletKeyObj == null) { + throw new RuntimeException("Wallet key is missing in session"); + } + String walletKey = walletKeyObj.toString(); String issuerId = params.get("issuer"); String credentialType = params.get("credential"); String credentialValidity = params.get("vcStorageExpiryLimitInTimes"); String locale = params.get("locale"); log.info("Initiated Token Call"); TokenResponseDTO response = credentialUtilService.getTokenResponse(params, issuerId); - String walletKey = httpSession.getAttribute("wallet_key").toString(); log.info("Initiated fetching Verifiable Credential and storing it in the database Call"); VerifiableCredentialResponseDTO credentialResponseDTO = walletCredentialService.fetchAndStoreCredential( @@ -67,7 +71,12 @@ public ResponseEntity downloadCredential(@PathVariable("walletId") String wal public ResponseEntity fetchAllCredentialsForGivenWallet(@PathVariable("walletId") String walletId, @RequestParam("locale") String locale, HttpSession httpSession) { try { log.info("Fetching all credentials for walletId: {}", walletId); - String walletKey = httpSession.getAttribute("wallet_key").toString(); + Object walletKeyObj = httpSession.getAttribute("wallet_key"); + if (walletKeyObj == null) { + throw new RuntimeException("Wallet key is missing in session"); + } + + String walletKey = walletKeyObj.toString(); List credentials = walletCredentialService.fetchAllCredentialsForWallet(walletId, walletKey, locale); return ResponseEntity.status(HttpStatus.OK).body(credentials); } catch (DataAccessResourceFailureException exception) { From 4f32dd4a0a714989dde62521d0515bfc4c737e21 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 7 Apr 2025 08:43:22 +0530 Subject: [PATCH 500/860] [INJIWEB-1418] add functions and make changes to fetch the signing keys from the DB to sign the JWT in credential request except for rsa Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../WalletCredentialsController.java | 9 +- .../exception/PlatformErrorMessages.java | 2 +- .../mosip/mimoto/model/SigningAlgorithm.java | 37 +++++ .../repository/ProofSigningKeyRepository.java | 2 + .../service/WalletCredentialService.java | 4 +- .../service/impl/CredentialServiceImpl.java | 3 +- .../impl/WalletCredentialServiceImpl.java | 8 +- .../mimoto/util/CredentialUtilService.java | 30 +++- .../mosip/mimoto/util/JwtGeneratorUtil.java | 148 ++++++++++++++++++ .../mosip/mimoto/util/KeyGenerationUtil.java | 32 ++-- .../mimoto/util/ProofSigningKeyFactory.java | 5 +- .../java/io/mosip/mimoto/util/WalletUtil.java | 5 +- .../mimoto/service/CredentialServiceTest.java | 8 +- .../service/CredentialUtilServiceTest.java | 10 +- .../util/EncryptionDecryptionUtilTest.java | 5 +- .../mimoto/util/KeyGenerationUtilTest.java | 11 +- 16 files changed, 272 insertions(+), 47 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/model/SigningAlgorithm.java create mode 100644 src/main/java/io/mosip/mimoto/util/JwtGeneratorUtil.java diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index 95d457789..7cd446bbc 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -5,6 +5,7 @@ import io.mosip.mimoto.exception.*; import io.mosip.mimoto.model.DatabaseEntity; import io.mosip.mimoto.model.DatabaseOperation; +import io.mosip.mimoto.model.SigningAlgorithm; import io.mosip.mimoto.service.WalletCredentialService; import io.mosip.mimoto.util.CredentialUtilService; import io.mosip.mimoto.util.Utilities; @@ -41,7 +42,7 @@ public ResponseEntity downloadCredential(@PathVariable("walletId") String wal if (walletKeyObj == null) { throw new RuntimeException("Wallet key is missing in session"); } - String walletKey = walletKeyObj.toString(); + String base64EncodedWalletKey = walletKeyObj.toString(); String issuerId = params.get("issuer"); String credentialType = params.get("credential"); String credentialValidity = params.get("vcStorageExpiryLimitInTimes"); @@ -51,7 +52,7 @@ public ResponseEntity downloadCredential(@PathVariable("walletId") String wal log.info("Initiated fetching Verifiable Credential and storing it in the database Call"); VerifiableCredentialResponseDTO credentialResponseDTO = walletCredentialService.fetchAndStoreCredential( - issuerId, credentialType, response, credentialValidity, locale, walletId, walletKey); + issuerId, credentialType, response, credentialValidity, locale, walletId, base64EncodedWalletKey, SigningAlgorithm.fromString("es256k")); return ResponseEntity.status(HttpStatus.OK).body(credentialResponseDTO); } catch (ApiNotAccessibleException | IOException exception) { @@ -63,7 +64,7 @@ public ResponseEntity downloadCredential(@PathVariable("walletId") String wal return Utilities.getErrorResponseEntityWithoutWrapper(connectionException, LOGIN_CREDENTIAL_DOWNLOAD_EXCEPTION.getCode(), connectionException.getStatus(), MediaType.APPLICATION_JSON); } catch (Exception exception) { log.error("Exception occurred while downloading or saving the Verifiable Credential:", exception); - return Utilities.getErrorResponseEntityWithoutWrapper(exception, LOGIN_CREDENTIAL_DOWNLOAD_EXCEPTION.getCode(), HttpStatus.BAD_REQUEST, MediaType.APPLICATION_JSON); + return Utilities.getErrorResponseEntityWithoutWrapper(exception, LOGIN_CREDENTIAL_DOWNLOAD_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); } } @@ -85,7 +86,7 @@ public ResponseEntity fetchAllCredentialsForGivenWallet(@PathVariable("wallet return Utilities.getErrorResponseEntityWithoutWrapper(connectionException, DATABASE_CONNECTION_EXCEPTION.getCode(), connectionException.getStatus(), MediaType.APPLICATION_JSON); } catch (Exception exception) { log.error("Exception occurred while downloading or saving the Verifiable Credential:", exception); - return Utilities.getErrorResponseEntityWithoutWrapper(exception, CREDENTIALS_FETCH_EXCEPTION.getCode(), HttpStatus.BAD_REQUEST, MediaType.APPLICATION_JSON); + return Utilities.getErrorResponseEntityWithoutWrapper(exception, CREDENTIALS_FETCH_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); } } } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java index af8738f95..c6b4da3ff 100644 --- a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java +++ b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java @@ -101,7 +101,7 @@ public enum PlatformErrorMessages { USER_WALLET_RETRIEVAL_EXCEPTION(PlatformConstants.PREFIX + "051", "Exception occurred when creating the wallet for user"), USER_METADATA_CACHE_FETCH_EXCEPTION(PlatformConstants.PREFIX + "052", "Failed to fetch the User metadata from cache"), LOGIN_CREDENTIAL_DOWNLOAD_EXCEPTION(PlatformConstants.PREFIX + "052", "Failed to download and store the credential"), - CREDENTIALS_FETCH_EXCEPTION(PlatformConstants.PREFIX + "053", "Exception occurred when fetch credentials for the specified wallet"); + CREDENTIALS_FETCH_EXCEPTION(PlatformConstants.PREFIX + "053", "Exception occurred when fetching credentials for the specified wallet"); /** The error message. */ private final String errorMessage; diff --git a/src/main/java/io/mosip/mimoto/model/SigningAlgorithm.java b/src/main/java/io/mosip/mimoto/model/SigningAlgorithm.java new file mode 100644 index 000000000..9e83ace17 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/model/SigningAlgorithm.java @@ -0,0 +1,37 @@ +package io.mosip.mimoto.model; + +import com.nimbusds.jose.JWSAlgorithm; + +public enum SigningAlgorithm { + RS256(JWSAlgorithm.RS256, "RSA"), + ES256(JWSAlgorithm.ES256, "EC"), + ES256K(JWSAlgorithm.ES256K, "EC"), + ED25519(JWSAlgorithm.EdDSA, "Ed25519"); + + private final JWSAlgorithm jwsAlgorithm; + private final String keyFactoryAlgorithm; + + SigningAlgorithm(JWSAlgorithm jwsAlgorithm, String keyFactoryAlgorithm) { + this.jwsAlgorithm = jwsAlgorithm; + this.keyFactoryAlgorithm = keyFactoryAlgorithm; + } + + public JWSAlgorithm getJWSAlgorithm() { + return jwsAlgorithm; + } + + public String getKeyFactoryAlgorithm() { + return keyFactoryAlgorithm; + } + + public static SigningAlgorithm fromString(String value) { + return switch (value.toUpperCase()) { + case "RS256" -> RS256; + case "ES256" -> ES256; + case "ES256K" -> ES256K; + case "ED25519" -> ED25519; + default -> throw new IllegalArgumentException("Unsupported signing algorithm: " + value); + }; + } + +} diff --git a/src/main/java/io/mosip/mimoto/repository/ProofSigningKeyRepository.java b/src/main/java/io/mosip/mimoto/repository/ProofSigningKeyRepository.java index ead2f9b1d..af58a0138 100644 --- a/src/main/java/io/mosip/mimoto/repository/ProofSigningKeyRepository.java +++ b/src/main/java/io/mosip/mimoto/repository/ProofSigningKeyRepository.java @@ -11,4 +11,6 @@ public interface ProofSigningKeyRepository extends JpaRepository { @Query(value = "SELECT * FROM proof_signing_key p WHERE p.wallet_id = :walletId AND p.key_metadata->>'algorithmName' = :algorithmName", nativeQuery = true) Optional findByWalletIdAndAlgorithm(@Param("walletId") String walletId, @Param("algorithmName") String algorithmName); + + Optional findByWalletId(String walletId); } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java b/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java index d36fea29e..e2ad3d168 100644 --- a/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java +++ b/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java @@ -2,10 +2,12 @@ import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; +import io.mosip.mimoto.model.SigningAlgorithm; + import java.util.List; public interface WalletCredentialService { - VerifiableCredentialResponseDTO fetchAndStoreCredential(String issuerId, String credentialType, TokenResponseDTO response, String credentialValidity, String locale, String walletId, String walletKey) throws Exception; + VerifiableCredentialResponseDTO fetchAndStoreCredential(String issuerId, String credentialType, TokenResponseDTO response, String credentialValidity, String locale, String walletId, String base64EncodedWalletKey, SigningAlgorithm algorithm) throws Exception; List fetchAllCredentialsForWallet(String walletId, String walletKey, String locale); } diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java index 373125370..d0e84f22f 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java @@ -16,6 +16,7 @@ import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.dto.openid.presentation.PresentationDefinitionDTO; import io.mosip.mimoto.exception.*; +import io.mosip.mimoto.model.SigningAlgorithm; import io.mosip.mimoto.model.QRCodeType; import io.mosip.mimoto.service.CredentialService; import io.mosip.mimoto.service.IssuersService; @@ -99,7 +100,7 @@ public ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String cred credentialIssuerConfiguration.getCredentialEndPoint(), credentialIssuerConfiguration.getCredentialConfigurationsSupported()); CredentialsSupportedResponse credentialsSupportedResponse = credentialIssuerWellKnownResponse.getCredentialConfigurationsSupported().get(credentialType); - VCCredentialRequest vcCredentialRequest = credentialUtilService.generateVCCredentialRequest(issuerDTO, credentialIssuerWellKnownResponse, credentialsSupportedResponse, response.getAccess_token()); + VCCredentialRequest vcCredentialRequest = credentialUtilService.generateVCCredentialRequest(issuerDTO, credentialIssuerWellKnownResponse, credentialsSupportedResponse, response.getAccess_token(), SigningAlgorithm.fromString("RS256"), null, null); VCCredentialResponse vcCredentialResponse = credentialUtilService.downloadCredential(credentialIssuerWellKnownResponse.getCredentialEndPoint(), vcCredentialRequest, response.getAccess_token()); boolean verificationStatus = issuerId.toLowerCase().contains("mock") || credentialUtilService.verifyCredential(vcCredentialResponse); if (verificationStatus) { diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java index 63a6d4467..6f19a3286 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java @@ -4,13 +4,13 @@ import io.mosip.kernel.cryptomanager.service.CryptomanagerService; import io.mosip.mimoto.dbentity.CredentialMetadata; import io.mosip.mimoto.dbentity.VerifiableCredential; -import io.mosip.mimoto.dto.DisplayDTO; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.AuthorizationServerWellknownResponseException; import io.mosip.mimoto.exception.InvalidWellknownResponseException; +import io.mosip.mimoto.model.SigningAlgorithm; import io.mosip.mimoto.repository.WalletCredentialsRepository; import io.mosip.mimoto.service.IdpService; import io.mosip.mimoto.service.IssuersService; @@ -90,7 +90,7 @@ public void init() { @Override public VerifiableCredentialResponseDTO fetchAndStoreCredential( String issuerId, String credentialType, TokenResponseDTO response, - String credentialValidity, String locale, String walletId, String walletKey) throws Exception { + String credentialValidity, String locale, String walletId, String base64EncodedWalletKey, SigningAlgorithm algorithm) throws Exception { shouldInitiateDownloadRequest(issuerId,credentialType); @@ -100,12 +100,12 @@ public VerifiableCredentialResponseDTO fetchAndStoreCredential( CredentialsSupportedResponse credentialsSupportedResponse = credentialIssuerWellKnownResponse.getCredentialConfigurationsSupported().get(credentialType); // Generate credential request and download credential - VCCredentialRequest vcCredentialRequest = credentialUtilService.generateVCCredentialRequest(issuerDTO, credentialIssuerWellKnownResponse, credentialsSupportedResponse, response.getAccess_token()); + VCCredentialRequest vcCredentialRequest = credentialUtilService.generateVCCredentialRequest(issuerDTO, credentialIssuerWellKnownResponse, credentialsSupportedResponse, response.getAccess_token(), algorithm, walletId, base64EncodedWalletKey); VCCredentialResponse vcCredentialResponse = credentialUtilService.downloadCredential(credentialIssuerWellKnownResponse.getCredentialEndPoint(), vcCredentialRequest, response.getAccess_token()); boolean verificationStatus = issuerId.toLowerCase().contains("mock") || credentialUtilService.verifyCredential(vcCredentialResponse); // Encrypt and store credential response into database - String encryptedCredentialData = encryptCredential(vcCredentialResponse.toString(), walletKey); + String encryptedCredentialData = encryptCredential(vcCredentialResponse.toString(), base64EncodedWalletKey); VerifiableCredential savedCredential = saveCredential(walletId, encryptedCredentialData, verificationStatus, issuerId, credentialType); // Build and return response DTO diff --git a/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java b/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java index 4c0b0de4a..4e1f4fee2 100644 --- a/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java +++ b/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java @@ -2,10 +2,13 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.dbentity.ProofSigningKey; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.exception.*; +import io.mosip.mimoto.model.SigningAlgorithm; +import io.mosip.mimoto.repository.ProofSigningKeyRepository; import io.mosip.mimoto.service.IdpService; import io.mosip.mimoto.service.IssuersService; import io.mosip.vercred.vcverifier.CredentialsVerifier; @@ -19,9 +22,10 @@ import org.springframework.stereotype.Service; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; + +import javax.crypto.SecretKey; import java.io.IOException; -import java.util.List; -import java.util.Map; +import java.util.*; @Slf4j @Service @@ -41,6 +45,12 @@ public class CredentialUtilService { @Autowired JoseUtil joseUtil; + @Autowired + private EncryptionDecryptionUtil encryptionDecryptionUtil; + + @Autowired + private ProofSigningKeyRepository proofSigningKeyRepository; + CredentialsVerifier credentialsVerifier; @PostConstruct @@ -71,8 +81,20 @@ public VCCredentialResponse downloadCredential(String credentialEndpoint, VCCred return vcCredentialResponse; } - public VCCredentialRequest generateVCCredentialRequest(IssuerDTO issuerDTO, CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse, CredentialsSupportedResponse credentialsSupportedResponse, String accessToken) throws Exception { - String jwt = joseUtil.generateJwt(credentialIssuerWellKnownResponse.getCredentialIssuer(), issuerDTO.getClient_id(), accessToken); + public VCCredentialRequest generateVCCredentialRequest(IssuerDTO issuerDTO, CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse, CredentialsSupportedResponse credentialsSupportedResponse, String accessToken, SigningAlgorithm algorithm, String walletId, String base64EncodedWalletKey) throws Exception { + String jwt; + + if (Objects.equals(algorithm, SigningAlgorithm.RS256)) { + jwt = joseUtil.generateJwt(credentialIssuerWellKnownResponse.getCredentialIssuer(), issuerDTO.getClient_id(), accessToken); + } else { + Optional proofSigningKey = proofSigningKeyRepository.findByWalletIdAndAlgorithm(walletId, algorithm.name()); + byte[] decodedWalletKey = Base64.getDecoder().decode(base64EncodedWalletKey); + SecretKey walletKey = EncryptionDecryptionUtil.bytesToSecretKey(decodedWalletKey); + byte[] publicKeyBytes = Base64.getDecoder().decode(proofSigningKey.get().getPublicKey()); + byte[] privateKeyInBytes = encryptionDecryptionUtil.decryptWithAES(walletKey, proofSigningKey.get().getEncryptedSecretKey()); + jwt = JwtGeneratorUtil.generateJwtUsingDBKeys(algorithm, credentialIssuerWellKnownResponse.getCredentialIssuer(), issuerDTO.getClient_id(), accessToken, publicKeyBytes, privateKeyInBytes); + } + return VCCredentialRequest.builder() .format(credentialsSupportedResponse.getFormat()) .proof(VCCredentialRequestProof.builder() diff --git a/src/main/java/io/mosip/mimoto/util/JwtGeneratorUtil.java b/src/main/java/io/mosip/mimoto/util/JwtGeneratorUtil.java new file mode 100644 index 000000000..d426328af --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/JwtGeneratorUtil.java @@ -0,0 +1,148 @@ +package io.mosip.mimoto.util; + +import com.nimbusds.jose.*; +import com.nimbusds.jose.crypto.*; +import com.nimbusds.jose.jca.JCAContext; +import com.nimbusds.jose.jwk.*; +import com.nimbusds.jose.jwk.ECKey; +import com.nimbusds.jose.jwk.RSAKey; +import com.nimbusds.jwt.*; +import com.nimbusds.jose.util.Base64URL; +import io.mosip.mimoto.model.SigningAlgorithm; +import lombok.extern.slf4j.Slf4j; +import org.bouncycastle.jce.provider.BouncyCastleProvider; + +import java.security.*; +import java.security.interfaces.*; +import java.util.*; +import java.util.Arrays; + + +@Slf4j +public class JwtGeneratorUtil { + + private static final Provider BC_PROVIDER = new BouncyCastleProvider(); + + static { + if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null) { + Security.addProvider(BC_PROVIDER); + } + } + + public static String generateJwtUsingDBKeys(SigningAlgorithm algorithm, String audience, String clientId, String accessToken, byte[] publicKeyBytes, byte[] privateKeyBytes) throws Exception { + KeyPair keyPair = KeyGenerationUtil.getKeyPairFromDBStoredKeys(algorithm, publicKeyBytes, privateKeyBytes); + JWK jwk = generateJwk(algorithm, keyPair); + JWSSigner signer = createSigner(algorithm, jwk); + + JWTClaimsSet claimsSet = createClaims(clientId, audience, accessToken); + JWSHeader header = new JWSHeader.Builder(algorithm.getJWSAlgorithm()) + .type(new JOSEObjectType("openid4vci-proof+jwt")) + .jwk(jwk.toPublicJWK()) + .build(); + + SignedJWT signedJWT = new SignedJWT(header, claimsSet); + signedJWT.sign(signer); + return signedJWT.serialize(); + } + + private static JWTClaimsSet createClaims(String clientId, String audience, String accessToken) throws java.text.ParseException { + Date now = new Date(); + Date expiry = new Date(now.getTime() + 120000000L); + String nonce = SignedJWT.parse(accessToken).getJWTClaimsSet().getStringClaim("c_nonce"); + + return new JWTClaimsSet.Builder() + .subject(clientId) + .audience(audience) + .issuer(clientId) + .issueTime(now) + .expirationTime(expiry) + .claim("nonce", nonce) + .build(); + } + + + private static JWK generateJwk(SigningAlgorithm algorithm, KeyPair keyPair) { + PublicKey publicKey = keyPair.getPublic(); + PrivateKey privateKey = keyPair.getPrivate(); + + return switch (algorithm) { + case RS256 -> new RSAKey.Builder((RSAPublicKey) publicKey) + .privateKey((RSAPrivateKey) privateKey) + .algorithm(JWSAlgorithm.RS256) + .keyUse(KeyUse.SIGNATURE) + .build(); + + case ES256 -> new ECKey.Builder(Curve.P_256, (ECPublicKey) publicKey) + .privateKey((ECPrivateKey) privateKey) + .algorithm(JWSAlgorithm.ES256) + .keyUse(KeyUse.SIGNATURE) + .build(); + + case ES256K -> new ECKey.Builder(Curve.SECP256K1, (ECPublicKey) publicKey) + .privateKey((ECPrivateKey) privateKey) + .algorithm(JWSAlgorithm.ES256K) + .keyUse(KeyUse.SIGNATURE) + .build(); + + case ED25519 -> { + EdECPublicKey edECPublicKey = (EdECPublicKey) publicKey; + EdECPrivateKey edECPrivateKey = (EdECPrivateKey) privateKey; + + byte[] x = Arrays.copyOfRange(edECPublicKey.getEncoded(), edECPublicKey.getEncoded().length - 32, edECPublicKey.getEncoded().length); + byte[] d = Arrays.copyOfRange(edECPrivateKey.getEncoded(), edECPrivateKey.getEncoded().length - 32, edECPrivateKey.getEncoded().length); + + yield new OctetKeyPair.Builder(Curve.Ed25519, Base64URL.encode(x)) + .d(Base64URL.encode(d)) + .algorithm(JWSAlgorithm.EdDSA) + .keyUse(KeyUse.SIGNATURE) + .build(); + } + }; + } + + private static JWSSigner createSigner(SigningAlgorithm algorithm, JWK jwk) throws JOSEException { + return switch (algorithm) { + case RS256 -> { + RSASSASigner signer = new RSASSASigner((RSAKey) jwk); + signer.getJCAContext().setProvider(BC_PROVIDER); + yield signer; + } + case ES256, ES256K -> { + ECDSASigner signer = new ECDSASigner((ECKey) jwk); + signer.getJCAContext().setProvider(BC_PROVIDER); + yield signer; + } + case ED25519 -> createEd25519Signer((OctetKeyPair) jwk); + }; + } + + private static JWSSigner createEd25519Signer(OctetKeyPair jwk) { + byte[] privateKeyBytes = jwk.getD().decode(); + return new JWSSigner() { + private final JCAContext jcaContext = new JCAContext(); + + @Override + public Base64URL sign(JWSHeader header, byte[] input) throws JOSEException { + try { + var signer = new org.bouncycastle.crypto.signers.Ed25519Signer(); + signer.init(true, new org.bouncycastle.crypto.params.Ed25519PrivateKeyParameters(privateKeyBytes, 0)); + signer.update(input, 0, input.length); + return Base64URL.encode(signer.generateSignature()); + } catch (Exception e) { + throw new JOSEException("Ed25519 signing failed", e); + } + } + + @Override + public Set supportedJWSAlgorithms() { + return Collections.singleton(JWSAlgorithm.EdDSA); + } + + @Override + public JCAContext getJCAContext() { + return jcaContext; + } + }; + } +} + diff --git a/src/main/java/io/mosip/mimoto/util/KeyGenerationUtil.java b/src/main/java/io/mosip/mimoto/util/KeyGenerationUtil.java index cd5b3689d..d8282c087 100644 --- a/src/main/java/io/mosip/mimoto/util/KeyGenerationUtil.java +++ b/src/main/java/io/mosip/mimoto/util/KeyGenerationUtil.java @@ -1,11 +1,14 @@ package io.mosip.mimoto.util; +import io.mosip.mimoto.model.SigningAlgorithm; import org.bouncycastle.jce.provider.BouncyCastleProvider; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import java.security.*; import java.security.spec.ECGenParameterSpec; +import java.security.spec.PKCS8EncodedKeySpec; +import java.security.spec.X509EncodedKeySpec; public class KeyGenerationUtil { @@ -24,35 +27,46 @@ public class KeyGenerationUtil { * @throws InvalidAlgorithmParameterException * @throws NoSuchProviderException */ - public static KeyPair generateKeyPair(String algorithm) throws NoSuchAlgorithmException, InvalidAlgorithmParameterException, NoSuchProviderException { - KeyPairGenerator keyPairGenerator; + public static KeyPair generateKeyPair(SigningAlgorithm algorithm) throws NoSuchAlgorithmException, InvalidAlgorithmParameterException, NoSuchProviderException { + KeyPairGenerator keyPairGenerator = null; switch (algorithm) { - case "RS256": + case RS256: keyPairGenerator = KeyPairGenerator.getInstance("RSA"); keyPairGenerator.initialize(2048); break; - case "ES256": + case ES256: keyPairGenerator = KeyPairGenerator.getInstance("EC"); ECGenParameterSpec ecGenParameterSpec = new ECGenParameterSpec("secp256r1"); keyPairGenerator.initialize(ecGenParameterSpec); break; - case "ES256K": + case ES256K: keyPairGenerator = KeyPairGenerator.getInstance("EC", "BC"); ECGenParameterSpec ecGenParameterSpecK = new ECGenParameterSpec("secp256k1"); keyPairGenerator.initialize(ecGenParameterSpecK); break; - case "Ed25519": + case ED25519: keyPairGenerator = KeyPairGenerator.getInstance("Ed25519"); break; - default: - throw new IllegalArgumentException("Unsupported algorithm: " + algorithm); } return keyPairGenerator.generateKeyPair(); } + public static KeyPair getKeyPairFromDBStoredKeys(SigningAlgorithm algorithm, byte[] publicKeyBytes, byte[] privateKeyBytes) throws Exception { + KeyFactory keyFactory = switch (algorithm) { + case ES256K -> KeyFactory.getInstance(algorithm.getKeyFactoryAlgorithm(), "BC"); + default -> KeyFactory.getInstance(algorithm.getKeyFactoryAlgorithm()); + }; + + PublicKey publicKey = keyFactory.generatePublic(new X509EncodedKeySpec(publicKeyBytes)); + PrivateKey privateKey = keyFactory.generatePrivate(new PKCS8EncodedKeySpec(privateKeyBytes)); + + return new KeyPair(publicKey, privateKey); + } + + /** * Generates a secret key for the given algorithm and key size. * @@ -66,6 +80,4 @@ public static SecretKey generateEncryptionKey(String algorithm, int keysize) thr keyGenerator.init(keysize); return keyGenerator.generateKey(); } - - } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/util/ProofSigningKeyFactory.java b/src/main/java/io/mosip/mimoto/util/ProofSigningKeyFactory.java index 53bd1624f..0bb783aa0 100644 --- a/src/main/java/io/mosip/mimoto/util/ProofSigningKeyFactory.java +++ b/src/main/java/io/mosip/mimoto/util/ProofSigningKeyFactory.java @@ -2,6 +2,7 @@ import io.mosip.mimoto.dbentity.KeyMetadata; import io.mosip.mimoto.dbentity.ProofSigningKey; +import io.mosip.mimoto.model.SigningAlgorithm; import java.security.KeyPair; import java.time.Instant; @@ -10,11 +11,11 @@ public class ProofSigningKeyFactory { - public static ProofSigningKey createProofSigningKey(String algorithm) throws Exception { + public static ProofSigningKey createProofSigningKey(SigningAlgorithm algorithm) throws Exception { KeyPair keyPair = KeyGenerationUtil.generateKeyPair(algorithm); KeyMetadata keyMetadata = new KeyMetadata(); - keyMetadata.setAlgorithmName(algorithm); + keyMetadata.setAlgorithmName(algorithm.name()); ProofSigningKey proofSigningKey = new ProofSigningKey(); proofSigningKey.setId(UUID.randomUUID().toString()); diff --git a/src/main/java/io/mosip/mimoto/util/WalletUtil.java b/src/main/java/io/mosip/mimoto/util/WalletUtil.java index 70249f4f3..04b88b431 100644 --- a/src/main/java/io/mosip/mimoto/util/WalletUtil.java +++ b/src/main/java/io/mosip/mimoto/util/WalletUtil.java @@ -3,6 +3,7 @@ import io.mosip.mimoto.dbentity.ProofSigningKey; import io.mosip.mimoto.dbentity.Wallet; import io.mosip.mimoto.dbentity.WalletMetadata; +import io.mosip.mimoto.model.SigningAlgorithm; import io.mosip.mimoto.repository.WalletRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -59,8 +60,8 @@ private WalletMetadata createWalletMetadata(String walletName, String encryption private List createProofSigningKeys(SecretKey encryptionKey, Wallet wallet) throws Exception { List proofSigningKeys = new ArrayList<>(); - List algorithms = List.of("RS256", "ES256", "ES256K", "Ed25519"); - for (String algorithm : algorithms) { + List algorithms = List.of(SigningAlgorithm.RS256, SigningAlgorithm.ES256, SigningAlgorithm.ES256K, SigningAlgorithm.ED25519); + for (SigningAlgorithm algorithm : algorithms) { ProofSigningKey signingKey = ProofSigningKeyFactory.createProofSigningKey(algorithm); signingKey.setWallet(wallet); signingKey.setEncryptedSecretKey(encryptionDecryptionUtil.encryptWithAES(encryptionKey, diff --git a/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java index 02eb63e29..47c583027 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java @@ -6,12 +6,12 @@ import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.exception.*; import io.mosip.mimoto.model.QRCodeType; +import io.mosip.mimoto.model.SigningAlgorithm; import io.mosip.mimoto.service.impl.CredentialServiceImpl; import io.mosip.mimoto.service.impl.IdpServiceImpl; import io.mosip.mimoto.service.impl.IssuersServiceImpl; import io.mosip.mimoto.util.*; import io.mosip.vercred.vcverifier.CredentialsVerifier; -import lombok.extern.slf4j.Slf4j; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; import org.junit.Before; @@ -20,7 +20,6 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; -import org.mockito.Spy; import org.mockito.junit.MockitoJUnitRunner; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.HttpEntity; @@ -41,7 +40,6 @@ @RunWith(MockitoJUnitRunner.class) @SpringBootTest -@Slf4j public class CredentialServiceTest { @Mock @@ -117,7 +115,7 @@ public void shouldThrowExceptionIfDownloadedVCSignatureVerificationFailed() thro when(credentialUtilService.generateVCCredentialRequest(any(IssuerDTO.class), any(CredentialIssuerWellKnownResponse.class), any(CredentialsSupportedResponse.class), - any(String.class))).thenReturn(getVCCredentialRequestDTO()); + any(String.class), any(SigningAlgorithm.class), any(), any())).thenReturn(getVCCredentialRequestDTO()); VCCredentialResponse vcCredentialResponse = getVCCredentialResponseDTO("CredentialType1"); when(credentialUtilService.downloadCredential(any(String.class), any(VCCredentialRequest.class), @@ -136,7 +134,7 @@ public void shouldReturnDownloadedVCAsPDFIfSignatureVerificationIsSuccessful() t when(credentialUtilService.generateVCCredentialRequest(any(IssuerDTO.class), any(CredentialIssuerWellKnownResponse.class), any(CredentialsSupportedResponse.class), - any(String.class))).thenReturn(getVCCredentialRequestDTO()); + any(String.class), any(SigningAlgorithm.class),any(),any())).thenReturn(getVCCredentialRequestDTO()); VCCredentialResponse vcCredentialResponse = getVCCredentialResponseDTO("CredentialType1"); when(credentialUtilService.downloadCredential(any(String.class), any(VCCredentialRequest.class), diff --git a/src/test/java/io/mosip/mimoto/service/CredentialUtilServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialUtilServiceTest.java index b8d253acd..f3538bee6 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialUtilServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialUtilServiceTest.java @@ -7,12 +7,10 @@ import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.exception.IdpException; import io.mosip.mimoto.exception.VCVerificationException; +import io.mosip.mimoto.model.SigningAlgorithm; import io.mosip.mimoto.service.impl.IdpServiceImpl; import io.mosip.mimoto.service.impl.IssuersServiceImpl; -import io.mosip.mimoto.util.CredentialUtilService; -import io.mosip.mimoto.util.JoseUtil; -import io.mosip.mimoto.util.RestApiClient; -import io.mosip.mimoto.util.TestUtilities; +import io.mosip.mimoto.util.*; import io.mosip.vercred.vcverifier.CredentialsVerifier; import io.mosip.vercred.vcverifier.constants.CredentialFormat; import io.mosip.vercred.vcverifier.data.VerificationResult; @@ -148,7 +146,7 @@ public void shouldGenerateVCCredentialRequestForProvidedIssuerAndCredentialType( VCCredentialRequest expectedVCCredentialRequest = getVCCredentialRequestDTO(); Mockito.when(joseUtil.generateJwt(any(String.class), any(String.class), any(String.class))).thenReturn("jwt"); - VCCredentialRequest actualVCCredentialRequest = credentialUtilService.generateVCCredentialRequest(issuerDTO, issuerWellKnownResponse, credentialsSupportedResponse, "test-access-token"); + VCCredentialRequest actualVCCredentialRequest = credentialUtilService.generateVCCredentialRequest(issuerDTO, issuerWellKnownResponse, credentialsSupportedResponse, "test-access-token", SigningAlgorithm.fromString("RS256"), "walletId","walletKey"); assertEquals(expectedVCCredentialRequest, actualVCCredentialRequest); } @@ -160,7 +158,7 @@ public void shouldThrowExceptionWhenInvalidAlgoIsProvidedForGeneratingJWTDuringC Mockito.when(joseUtil.generateJwt(any(String.class), any(String.class), any(String.class))).thenThrow(new AssertionError("Unexpected algorithm type: dfs")); AssertionError actualError = assertThrows(AssertionError.class, () -> { - credentialUtilService.generateVCCredentialRequest(issuerDTO, issuerWellKnownResponse, credentialsSupportedResponse, "test-access-token"); + credentialUtilService.generateVCCredentialRequest(issuerDTO, issuerWellKnownResponse, credentialsSupportedResponse, "test-access-token", SigningAlgorithm.fromString("RS256"), "walletId","walletKey"); }); assertEquals("Unexpected algorithm type: dfs", actualError.getMessage()); diff --git a/src/test/java/io/mosip/mimoto/util/EncryptionDecryptionUtilTest.java b/src/test/java/io/mosip/mimoto/util/EncryptionDecryptionUtilTest.java index 52d8d4097..3bee69a0d 100644 --- a/src/test/java/io/mosip/mimoto/util/EncryptionDecryptionUtilTest.java +++ b/src/test/java/io/mosip/mimoto/util/EncryptionDecryptionUtilTest.java @@ -4,6 +4,7 @@ import io.mosip.kernel.cryptomanager.dto.CryptomanagerResponseDto; import io.mosip.kernel.cryptomanager.service.CryptomanagerService; import io.mosip.kernel.core.util.CryptoUtil; +import io.mosip.mimoto.model.SigningAlgorithm; import org.apache.commons.lang3.StringUtils; import org.junit.Before; import org.junit.Test; @@ -48,7 +49,7 @@ public void setUp() throws NoSuchAlgorithmException, InvalidAlgorithmParameterEx String appId = "MIMOTO"; ReflectionTestUtils.setField(encryptionDecryptionUtil, "appId", appId); encryptionKey = KeyGenerationUtil.generateEncryptionKey("AES", 256); - keyPair = KeyGenerationUtil.generateKeyPair("Ed25519"); + keyPair = KeyGenerationUtil.generateKeyPair(SigningAlgorithm.ED25519); } @Test @@ -92,7 +93,7 @@ public void shouldReturnNullIfDataToDecryptIsNull() { @Test public void shouldEncryptPrivateKeyWithAESSuccessfully() throws Exception { SecretKey aesKey = KeyGenerationUtil.generateEncryptionKey("AES", 256); - KeyPair keyPair = KeyGenerationUtil.generateKeyPair("Ed25519"); + KeyPair keyPair = KeyGenerationUtil.generateKeyPair(SigningAlgorithm.ED25519); String encryptedPrivateKey = encryptionDecryptionUtil.encryptWithAES(aesKey, keyPair.getPrivate().getEncoded()); diff --git a/src/test/java/io/mosip/mimoto/util/KeyGenerationUtilTest.java b/src/test/java/io/mosip/mimoto/util/KeyGenerationUtilTest.java index c436897e4..08c84aaf6 100644 --- a/src/test/java/io/mosip/mimoto/util/KeyGenerationUtilTest.java +++ b/src/test/java/io/mosip/mimoto/util/KeyGenerationUtilTest.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.util; +import io.mosip.mimoto.model.SigningAlgorithm; import org.junit.Test; import javax.crypto.SecretKey; @@ -21,7 +22,7 @@ public void shouldGenerateEncryptionKeySuccessfully() throws Exception { @Test public void shouldGenerateKeyPairSuccessfully() throws Exception { - KeyPair keyPair = KeyGenerationUtil.generateKeyPair("Ed25519"); + KeyPair keyPair = KeyGenerationUtil.generateKeyPair(SigningAlgorithm.ED25519); assertNotNull(keyPair); assertEquals("EdDSA", keyPair.getPublic().getAlgorithm()); @@ -29,7 +30,7 @@ public void shouldGenerateKeyPairSuccessfully() throws Exception { @Test public void shouldGenerateRSAKeyPairSuccessfully() throws Exception { - KeyPair keyPair = KeyGenerationUtil.generateKeyPair("RS256"); + KeyPair keyPair = KeyGenerationUtil.generateKeyPair(SigningAlgorithm.RS256); assertNotNull(keyPair); assertEquals("RSA", keyPair.getPublic().getAlgorithm()); @@ -37,7 +38,7 @@ public void shouldGenerateRSAKeyPairSuccessfully() throws Exception { @Test public void shouldGenerateECKeyPairWithP256Successfully() throws Exception { - KeyPair keyPair = KeyGenerationUtil.generateKeyPair("ES256"); + KeyPair keyPair = KeyGenerationUtil.generateKeyPair(SigningAlgorithm.ES256); assertNotNull(keyPair); assertEquals("EC", keyPair.getPublic().getAlgorithm()); @@ -45,7 +46,7 @@ public void shouldGenerateECKeyPairWithP256Successfully() throws Exception { @Test public void shouldGenerateECKeyPairWithSecp256k1Successfully() throws Exception { - KeyPair keyPair = KeyGenerationUtil.generateKeyPair("ES256K"); + KeyPair keyPair = KeyGenerationUtil.generateKeyPair(SigningAlgorithm.ES256K); assertNotNull(keyPair); assertEquals("EC", keyPair.getPublic().getAlgorithm()); @@ -53,7 +54,7 @@ public void shouldGenerateECKeyPairWithSecp256k1Successfully() throws Exception @Test(expected = IllegalArgumentException.class) public void shouldThrowExceptionForUnsupportedAlgorithm() throws Exception { - KeyGenerationUtil.generateKeyPair("unsupportedAlgorithm"); + KeyGenerationUtil.generateKeyPair(SigningAlgorithm.fromString("unsupportedAlgorithm")); } @Test(expected = NoSuchAlgorithmException.class) From 0e91098cdde93a683049e2b627d6740779f19a47 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 7 Apr 2025 08:46:12 +0530 Subject: [PATCH 501/860] [INJIWEB-1418] write test cases for the wallet credential controller Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../WalletCredentialsControllerTest.java | 222 ++++++++++++++++++ 1 file changed, 222 insertions(+) create mode 100644 src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java diff --git a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java new file mode 100644 index 000000000..825938da4 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java @@ -0,0 +1,222 @@ +package io.mosip.mimoto.controller; + +import io.mosip.mimoto.dto.idp.TokenResponseDTO; +import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.IdpException; +import io.mosip.mimoto.model.SigningAlgorithm; +import io.mosip.mimoto.service.impl.WalletCredentialServiceImpl; +import io.mosip.mimoto.util.CredentialUtilService; +import jakarta.servlet.http.HttpSession; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; +import org.hamcrest.Matchers; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.dao.DataAccessResourceFailureException; +import org.springframework.http.MediaType; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; + +import java.io.IOException; +import java.util.*; + +import static org.mockito.Mockito.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = WalletCredentialsController.class) +@AutoConfigureMockMvc(addFilters = false) +@EnableWebMvc +public class WalletCredentialsControllerTest { + + @InjectMocks + private WalletCredentialsController controller; + + @MockBean + private WalletCredentialServiceImpl walletCredentialService; + + @MockBean + private CredentialUtilService credentialUtilService; + + @MockBean + private HttpSession httpSession; + + @Autowired + private MockMvc mockMvc; + + VerifiableCredentialResponseDTO verifiableCredentialResponseDTO; + String postRequestContent, getRequestContent, mockWalletKey = "mock-wallet-key" , walletId = "wallet123", locale = "test-local", credential = "test-credential", issuer = "test-issuer"; + + @Before + public void setup() throws IOException { + MockitoAnnotations.openMocks(this); + verifiableCredentialResponseDTO = VerifiableCredentialResponseDTO.builder() + .issuerName("issuerName123") + .issuerLogo("issuerLogo") + .credentialType("credentialType123") + .credentialTypeLogo("credentialTypeLogo") + .credentialId("credentialId123") + .build(); + postRequestContent = EntityUtils.toString(new UrlEncodedFormEntity(List.of( + new BasicNameValuePair("grant_type", "authorization_code"), + new BasicNameValuePair("code", "test-code"), + new BasicNameValuePair("redirect_uri", "test-redirect_uri"), + new BasicNameValuePair("code_verifier", "test-code_verifier"), + new BasicNameValuePair("issuer", issuer), + new BasicNameValuePair("vcStorageExpiryLimitInTimes", "3"), + new BasicNameValuePair("credential", credential), + new BasicNameValuePair("locale", locale) + ))); + getRequestContent = EntityUtils.toString(new UrlEncodedFormEntity(List.of( + new BasicNameValuePair("locale", locale) + ))); + } + + @Test + public void shouldDownloadCredentialForValidWalletAndDetails() throws Exception { + when(credentialUtilService.getTokenResponse(anyMap(), eq(issuer))).thenReturn(new TokenResponseDTO()); + when(walletCredentialService.fetchAndStoreCredential(anyString(), anyString(), any(), anyString(), anyString(), anyString(), anyString(), any(SigningAlgorithm.class))) + .thenReturn(verifiableCredentialResponseDTO); + + mockMvc.perform(post(String.format("/wallets/%s/credentials",walletId)) + .accept(MediaType.APPLICATION_JSON) + .sessionAttr("wallet_key", "mockWalletKey") + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .content(postRequestContent)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.issuer_name").value("issuerName123")) + .andExpect(jsonPath("$.issuer_logo").value("issuerLogo")) + .andExpect(jsonPath("$.credential_type").value("credentialType123")) + .andExpect(jsonPath("$.credential_type_logo").value("credentialTypeLogo")) + .andExpect(jsonPath("$.credential_id").value("credentialId123")); + } + + @Test + public void shouldThrowMissingWalletKeyWhileDownloadingCredentialsIfWalletKeyIsMissing() throws Exception { + mockMvc.perform(post(String.format("/wallets/%s/credentials",walletId)) + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .content(postRequestContent)) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-052")) + .andExpect(jsonPath("$.errorMessage").value("Wallet key is missing in session")); + } + + @Test + public void shouldThrowExceptionOnFetchingTokenResponseFailure() throws Exception { + when(credentialUtilService.getTokenResponse(anyMap(), eq(issuer))) + .thenThrow(new IdpException("Exception occurred while performing the authorization")); + + mockMvc.perform(post(String.format("/wallets/%s/credentials",walletId)) + .sessionAttr("wallet_key", mockWalletKey) + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .content(postRequestContent)) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-034")) + .andExpect(jsonPath("$.errorMessage").value("Exception occurred while performing the authorization")); + } + + @Test + public void shouldThrowExceptionOnFetchingIssuerOrAuthServerWellknownFailureDuringTokenGeneration() throws Exception { + Mockito.when(credentialUtilService.getTokenResponse(Mockito.anyMap(), eq(issuer))) + .thenThrow(new ApiNotAccessibleException()); + + mockMvc.perform(post(String.format("/wallets/%s/credentials",walletId)) + .sessionAttr("wallet_key", mockWalletKey) + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .content(postRequestContent)) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errorCode", Matchers.is("RESIDENT-APP-026"))) + .andExpect(jsonPath("$.errorMessage", Matchers.is("Api not accessible failure"))); + } + + @Test + public void shouldThrowExceptionOnDatabaseConnectionFailureDuringCredentialDownload() throws Exception { + when(credentialUtilService.getTokenResponse(anyMap(), eq(issuer))).thenReturn(new TokenResponseDTO()); + when(walletCredentialService.fetchAndStoreCredential(anyString(), anyString(), any(), anyString(), anyString(), anyString(), anyString(), any())) + .thenThrow(new DataAccessResourceFailureException("Exception occurred when connecting to the database to store the credential response")); + + mockMvc.perform(post(String.format("/wallets/%s/credentials",walletId)) + .sessionAttr("wallet_key", mockWalletKey) + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .content(postRequestContent)) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-047")) + .andExpect(jsonPath("$.errorMessage").value("Failed to connect to the shared database while Storing Verifiable Credential data into the database")); + } + + @Test + public void shouldThrowExceptionOnAnyErrorOccurredDuringCredentialDownload() throws Exception { + when(httpSession.getAttribute("wallet_key")).thenReturn(mockWalletKey); + when(credentialUtilService.getTokenResponse(anyMap(), anyString())).thenThrow(new RuntimeException("Unexpected error occurred while downloading credential")); + + mockMvc.perform(post(String.format("/wallets/%s/credentials",walletId)) + .sessionAttr("wallet_key", mockWalletKey) + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .content(postRequestContent)) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-052")) + .andExpect(jsonPath("$.errorMessage").value("Unexpected error occurred while downloading credential")); + } + + @Test + public void shouldFetchAllCredentialsForValidWalletAndDetails() throws Exception { + List mockList = Collections.singletonList(verifiableCredentialResponseDTO); + + when(walletCredentialService.fetchAllCredentialsForWallet(walletId, mockWalletKey, locale)).thenReturn(mockList); + + mockMvc.perform(get(String.format("/wallets/%s/credentials",walletId)) + .sessionAttr("wallet_key", mockWalletKey) + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .content(getRequestContent)) + .andExpect(status().isOk()); + } + + @Test + public void shouldThrowMissingWalletKeyWhileFetchingAllCredentialsIfWalletKeyIsMissing() throws Exception { + mockMvc.perform(get(String.format("/wallets/%s/credentials",walletId)) + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .content(getRequestContent)) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-053")) + .andExpect(jsonPath("$.errorMessage").value("Wallet key is missing in session")); + } + + @Test + public void shouldThrowExceptionOnDatabaseConnectionFailureWhileFetchingCredentials() throws Exception { + when(walletCredentialService.fetchAllCredentialsForWallet(walletId, mockWalletKey, locale)) + .thenThrow(new DataAccessResourceFailureException("Exception occurred when connecting to the database to store the credential response")); + + mockMvc.perform(get(String.format("/wallets/%s/credentials",walletId)) + .sessionAttr("wallet_key", mockWalletKey) + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .content(getRequestContent)) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-047")) + .andExpect(jsonPath("$.errorMessage").value("Failed to connect to the shared database while Fetching Verifiable Credential data into the database")); + } + + @Test + public void shouldThrowExceptionOnAnyErrorOccurredWhileFetchingCredentials() throws Exception { + when(httpSession.getAttribute("wallet_key")).thenReturn(mockWalletKey); + when(walletCredentialService.fetchAllCredentialsForWallet(anyString(), anyString(), anyString())) + .thenThrow(new RuntimeException("Unexpected error occurred while fetching wallet credentials")); + + mockMvc.perform(get(String.format("/wallets/%s/credentials",walletId)) + .sessionAttr("wallet_key", "mockWalletKey") + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .content(getRequestContent)) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-053")) + .andExpect(jsonPath("$.errorMessage").value("Unexpected error occurred while fetching wallet credentials")); + } +} From ac973414958a60ee980fd144792b68f984bfa79a Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 7 Apr 2025 16:00:21 +0530 Subject: [PATCH 502/860] [INJIWEB-1418] make changes to get the first supported proof signing algorithm of a issuer directly in credentialUtilService file Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../WalletCredentialsController.java | 5 ++--- .../service/WalletCredentialService.java | 3 +-- .../service/impl/CredentialServiceImpl.java | 2 +- .../impl/WalletCredentialServiceImpl.java | 10 +++------- .../mimoto/util/CredentialUtilService.java | 10 +++++++++- .../WalletCredentialsControllerTest.java | 5 ++--- .../mimoto/service/CredentialServiceTest.java | 8 ++++---- .../service/CredentialUtilServiceTest.java | 18 ++++++++++++++++-- 8 files changed, 38 insertions(+), 23 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index 7cd446bbc..aac8ef1aa 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -5,7 +5,6 @@ import io.mosip.mimoto.exception.*; import io.mosip.mimoto.model.DatabaseEntity; import io.mosip.mimoto.model.DatabaseOperation; -import io.mosip.mimoto.model.SigningAlgorithm; import io.mosip.mimoto.service.WalletCredentialService; import io.mosip.mimoto.util.CredentialUtilService; import io.mosip.mimoto.util.Utilities; @@ -52,13 +51,13 @@ public ResponseEntity downloadCredential(@PathVariable("walletId") String wal log.info("Initiated fetching Verifiable Credential and storing it in the database Call"); VerifiableCredentialResponseDTO credentialResponseDTO = walletCredentialService.fetchAndStoreCredential( - issuerId, credentialType, response, credentialValidity, locale, walletId, base64EncodedWalletKey, SigningAlgorithm.fromString("es256k")); + issuerId, credentialType, response, credentialValidity, locale, walletId, base64EncodedWalletKey); return ResponseEntity.status(HttpStatus.OK).body(credentialResponseDTO); } catch (ApiNotAccessibleException | IOException exception) { log.error("Exception occurred while fetching credential types ", exception); return Utilities.getErrorResponseEntityWithoutWrapper(exception, LOGIN_CREDENTIAL_DOWNLOAD_EXCEPTION.getCode(), HttpStatus.BAD_REQUEST, MediaType.APPLICATION_JSON); - } catch (DataAccessResourceFailureException exception) { + } catch (DataAccessResourceFailureException exception) { log.error("Exception occurred while connecting to the database to store downloaded Verifiable Credential:", exception); DatabaseConnectionException connectionException = new DatabaseConnectionException(DATABASE_CONNECTION_EXCEPTION.getCode(), DATABASE_CONNECTION_EXCEPTION.getMessage(), DatabaseEntity.VERIFIABLECREDENTIAL, DatabaseOperation.STORING, HttpStatus.INTERNAL_SERVER_ERROR); return Utilities.getErrorResponseEntityWithoutWrapper(connectionException, LOGIN_CREDENTIAL_DOWNLOAD_EXCEPTION.getCode(), connectionException.getStatus(), MediaType.APPLICATION_JSON); diff --git a/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java b/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java index e2ad3d168..eaa31551f 100644 --- a/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java +++ b/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java @@ -2,12 +2,11 @@ import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; -import io.mosip.mimoto.model.SigningAlgorithm; import java.util.List; public interface WalletCredentialService { - VerifiableCredentialResponseDTO fetchAndStoreCredential(String issuerId, String credentialType, TokenResponseDTO response, String credentialValidity, String locale, String walletId, String base64EncodedWalletKey, SigningAlgorithm algorithm) throws Exception; + VerifiableCredentialResponseDTO fetchAndStoreCredential(String issuerId, String credentialType, TokenResponseDTO response, String credentialValidity, String locale, String walletId, String base64EncodedWalletKey) throws Exception; List fetchAllCredentialsForWallet(String walletId, String walletKey, String locale); } diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java index d0e84f22f..d8452bdf8 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java @@ -100,7 +100,7 @@ public ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String cred credentialIssuerConfiguration.getCredentialEndPoint(), credentialIssuerConfiguration.getCredentialConfigurationsSupported()); CredentialsSupportedResponse credentialsSupportedResponse = credentialIssuerWellKnownResponse.getCredentialConfigurationsSupported().get(credentialType); - VCCredentialRequest vcCredentialRequest = credentialUtilService.generateVCCredentialRequest(issuerDTO, credentialIssuerWellKnownResponse, credentialsSupportedResponse, response.getAccess_token(), SigningAlgorithm.fromString("RS256"), null, null); + VCCredentialRequest vcCredentialRequest = credentialUtilService.generateVCCredentialRequest(issuerDTO, credentialIssuerWellKnownResponse, credentialsSupportedResponse, response.getAccess_token(), null, null); VCCredentialResponse vcCredentialResponse = credentialUtilService.downloadCredential(credentialIssuerWellKnownResponse.getCredentialEndPoint(), vcCredentialRequest, response.getAccess_token()); boolean verificationStatus = issuerId.toLowerCase().contains("mock") || credentialUtilService.verifyCredential(vcCredentialResponse); if (verificationStatus) { diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java index 6f19a3286..e6b386e6c 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java @@ -10,7 +10,6 @@ import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.AuthorizationServerWellknownResponseException; import io.mosip.mimoto.exception.InvalidWellknownResponseException; -import io.mosip.mimoto.model.SigningAlgorithm; import io.mosip.mimoto.repository.WalletCredentialsRepository; import io.mosip.mimoto.service.IdpService; import io.mosip.mimoto.service.IssuersService; @@ -27,10 +26,7 @@ import javax.crypto.SecretKey; import java.io.IOException; -import java.util.Base64; -import java.util.List; -import java.util.Set; -import java.util.UUID; +import java.util.*; @Slf4j @@ -90,7 +86,7 @@ public void init() { @Override public VerifiableCredentialResponseDTO fetchAndStoreCredential( String issuerId, String credentialType, TokenResponseDTO response, - String credentialValidity, String locale, String walletId, String base64EncodedWalletKey, SigningAlgorithm algorithm) throws Exception { + String credentialValidity, String locale, String walletId, String base64EncodedWalletKey) throws Exception { shouldInitiateDownloadRequest(issuerId,credentialType); @@ -100,7 +96,7 @@ public VerifiableCredentialResponseDTO fetchAndStoreCredential( CredentialsSupportedResponse credentialsSupportedResponse = credentialIssuerWellKnownResponse.getCredentialConfigurationsSupported().get(credentialType); // Generate credential request and download credential - VCCredentialRequest vcCredentialRequest = credentialUtilService.generateVCCredentialRequest(issuerDTO, credentialIssuerWellKnownResponse, credentialsSupportedResponse, response.getAccess_token(), algorithm, walletId, base64EncodedWalletKey); + VCCredentialRequest vcCredentialRequest = credentialUtilService.generateVCCredentialRequest(issuerDTO, credentialIssuerWellKnownResponse, credentialsSupportedResponse, response.getAccess_token(), walletId, base64EncodedWalletKey); VCCredentialResponse vcCredentialResponse = credentialUtilService.downloadCredential(credentialIssuerWellKnownResponse.getCredentialEndPoint(), vcCredentialRequest, response.getAccess_token()); boolean verificationStatus = issuerId.toLowerCase().contains("mock") || credentialUtilService.verifyCredential(vcCredentialResponse); diff --git a/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java b/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java index 4e1f4fee2..3c05f4370 100644 --- a/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java +++ b/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java @@ -81,9 +81,17 @@ public VCCredentialResponse downloadCredential(String credentialEndpoint, VCCred return vcCredentialResponse; } - public VCCredentialRequest generateVCCredentialRequest(IssuerDTO issuerDTO, CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse, CredentialsSupportedResponse credentialsSupportedResponse, String accessToken, SigningAlgorithm algorithm, String walletId, String base64EncodedWalletKey) throws Exception { + public VCCredentialRequest generateVCCredentialRequest(IssuerDTO issuerDTO, CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse, CredentialsSupportedResponse credentialsSupportedResponse, String accessToken, String walletId, String base64EncodedWalletKey) throws Exception { String jwt; + Map proofTypesSupported = credentialsSupportedResponse.getProofTypesSupported(); + SigningAlgorithm algorithm; + if(proofTypesSupported.containsKey("jwt")){ + algorithm = SigningAlgorithm.fromString(proofTypesSupported.get("jwt").getProofSigningAlgValuesSupported().get(0)); + }else { + algorithm= SigningAlgorithm.RS256; + } + if (Objects.equals(algorithm, SigningAlgorithm.RS256)) { jwt = joseUtil.generateJwt(credentialIssuerWellKnownResponse.getCredentialIssuer(), issuerDTO.getClient_id(), accessToken); } else { diff --git a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java index 825938da4..95815cb2d 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java @@ -4,7 +4,6 @@ import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.IdpException; -import io.mosip.mimoto.model.SigningAlgorithm; import io.mosip.mimoto.service.impl.WalletCredentialServiceImpl; import io.mosip.mimoto.util.CredentialUtilService; import jakarta.servlet.http.HttpSession; @@ -85,7 +84,7 @@ public void setup() throws IOException { @Test public void shouldDownloadCredentialForValidWalletAndDetails() throws Exception { when(credentialUtilService.getTokenResponse(anyMap(), eq(issuer))).thenReturn(new TokenResponseDTO()); - when(walletCredentialService.fetchAndStoreCredential(anyString(), anyString(), any(), anyString(), anyString(), anyString(), anyString(), any(SigningAlgorithm.class))) + when(walletCredentialService.fetchAndStoreCredential(anyString(), anyString(), any(), anyString(), anyString(), anyString(), anyString())) .thenReturn(verifiableCredentialResponseDTO); mockMvc.perform(post(String.format("/wallets/%s/credentials",walletId)) @@ -142,7 +141,7 @@ public void shouldThrowExceptionOnFetchingIssuerOrAuthServerWellknownFailureDuri @Test public void shouldThrowExceptionOnDatabaseConnectionFailureDuringCredentialDownload() throws Exception { when(credentialUtilService.getTokenResponse(anyMap(), eq(issuer))).thenReturn(new TokenResponseDTO()); - when(walletCredentialService.fetchAndStoreCredential(anyString(), anyString(), any(), anyString(), anyString(), anyString(), anyString(), any())) + when(walletCredentialService.fetchAndStoreCredential(anyString(), anyString(), any(), anyString(), anyString(), anyString(), anyString())) .thenThrow(new DataAccessResourceFailureException("Exception occurred when connecting to the database to store the credential response")); mockMvc.perform(post(String.format("/wallets/%s/credentials",walletId)) diff --git a/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java index 47c583027..da3958027 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java @@ -44,10 +44,10 @@ public class CredentialServiceTest { @Mock CredentialsVerifier credentialsVerifier; - + @Mock ObjectMapper objectMapper; - + @InjectMocks CredentialServiceImpl credentialService; @@ -115,7 +115,7 @@ public void shouldThrowExceptionIfDownloadedVCSignatureVerificationFailed() thro when(credentialUtilService.generateVCCredentialRequest(any(IssuerDTO.class), any(CredentialIssuerWellKnownResponse.class), any(CredentialsSupportedResponse.class), - any(String.class), any(SigningAlgorithm.class), any(), any())).thenReturn(getVCCredentialRequestDTO()); + any(String.class), any(), any())).thenReturn(getVCCredentialRequestDTO()); VCCredentialResponse vcCredentialResponse = getVCCredentialResponseDTO("CredentialType1"); when(credentialUtilService.downloadCredential(any(String.class), any(VCCredentialRequest.class), @@ -134,7 +134,7 @@ public void shouldReturnDownloadedVCAsPDFIfSignatureVerificationIsSuccessful() t when(credentialUtilService.generateVCCredentialRequest(any(IssuerDTO.class), any(CredentialIssuerWellKnownResponse.class), any(CredentialsSupportedResponse.class), - any(String.class), any(SigningAlgorithm.class),any(),any())).thenReturn(getVCCredentialRequestDTO()); + any(String.class), any(), any())).thenReturn(getVCCredentialRequestDTO()); VCCredentialResponse vcCredentialResponse = getVCCredentialResponseDTO("CredentialType1"); when(credentialUtilService.downloadCredential(any(String.class), any(VCCredentialRequest.class), diff --git a/src/test/java/io/mosip/mimoto/service/CredentialUtilServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialUtilServiceTest.java index f3538bee6..296fd1cb9 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialUtilServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialUtilServiceTest.java @@ -146,7 +146,7 @@ public void shouldGenerateVCCredentialRequestForProvidedIssuerAndCredentialType( VCCredentialRequest expectedVCCredentialRequest = getVCCredentialRequestDTO(); Mockito.when(joseUtil.generateJwt(any(String.class), any(String.class), any(String.class))).thenReturn("jwt"); - VCCredentialRequest actualVCCredentialRequest = credentialUtilService.generateVCCredentialRequest(issuerDTO, issuerWellKnownResponse, credentialsSupportedResponse, "test-access-token", SigningAlgorithm.fromString("RS256"), "walletId","walletKey"); + VCCredentialRequest actualVCCredentialRequest = credentialUtilService.generateVCCredentialRequest(issuerDTO, issuerWellKnownResponse, credentialsSupportedResponse, "test-access-token", "walletId", "walletKey"); assertEquals(expectedVCCredentialRequest, actualVCCredentialRequest); } @@ -158,7 +158,7 @@ public void shouldThrowExceptionWhenInvalidAlgoIsProvidedForGeneratingJWTDuringC Mockito.when(joseUtil.generateJwt(any(String.class), any(String.class), any(String.class))).thenThrow(new AssertionError("Unexpected algorithm type: dfs")); AssertionError actualError = assertThrows(AssertionError.class, () -> { - credentialUtilService.generateVCCredentialRequest(issuerDTO, issuerWellKnownResponse, credentialsSupportedResponse, "test-access-token", SigningAlgorithm.fromString("RS256"), "walletId","walletKey"); + credentialUtilService.generateVCCredentialRequest(issuerDTO, issuerWellKnownResponse, credentialsSupportedResponse, "test-access-token", "walletId", "walletKey"); }); assertEquals("Unexpected algorithm type: dfs", actualError.getMessage()); @@ -191,4 +191,18 @@ public void shouldThrowExceptionIfInvalidCredentialIsPassedForVerification() thr assertEquals(expectedExceptionMsg, actualException.getMessage()); } + @Test + public void shouldThrowExceptionIfDownloadedResponseContainsSigningAlgoNotSupportedByMimoto() { + CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupportedResponse("CredentialType1"); + ProofTypesSupported proofTypesSupported = new ProofTypesSupported(); + proofTypesSupported.setProofSigningAlgValuesSupported(List.of("ps256")); + credentialsSupportedResponse.setProofTypesSupported(Map.of("jwt", proofTypesSupported)); + CredentialIssuerWellKnownResponse issuerWellKnownResponse = getCredentialIssuerWellKnownResponseDto(issuerId, Map.of("CredentialType1", credentialsSupportedResponse)); + + IllegalArgumentException actualError = assertThrows(IllegalArgumentException.class, () -> { + credentialUtilService.generateVCCredentialRequest(issuerDTO, issuerWellKnownResponse, credentialsSupportedResponse, "test-access-token", "walletId", "walletKey"); + }); + + assertEquals("Unsupported signing algorithm: ps256", actualError.getMessage()); + } } From ed0b6e42d742121373261a55067c5156631c8626 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 7 Apr 2025 21:28:01 +0530 Subject: [PATCH 503/860] [INJIWEB-1418] make changes to use the old jwt function with rsa algorithm to generate key pair for signing and verifying the jwt of credential request in without login flow and for login flow use the keys from db for all algorithms Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../mimoto/service/impl/CredentialServiceImpl.java | 3 ++- .../service/impl/WalletCredentialServiceImpl.java | 2 +- .../io/mosip/mimoto/util/CredentialUtilService.java | 10 +++++----- .../io/mosip/mimoto/service/CredentialServiceTest.java | 4 ++-- .../mimoto/service/CredentialUtilServiceTest.java | 6 +++--- 5 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java index d8452bdf8..b71f4563d 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java @@ -100,7 +100,8 @@ public ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String cred credentialIssuerConfiguration.getCredentialEndPoint(), credentialIssuerConfiguration.getCredentialConfigurationsSupported()); CredentialsSupportedResponse credentialsSupportedResponse = credentialIssuerWellKnownResponse.getCredentialConfigurationsSupported().get(credentialType); - VCCredentialRequest vcCredentialRequest = credentialUtilService.generateVCCredentialRequest(issuerDTO, credentialIssuerWellKnownResponse, credentialsSupportedResponse, response.getAccess_token(), null, null); + VCCredentialRequest vcCredentialRequest = credentialUtilService.generateVCCredentialRequest(issuerDTO, credentialIssuerWellKnownResponse, credentialsSupportedResponse, response.getAccess_token(), null, null, false + ); VCCredentialResponse vcCredentialResponse = credentialUtilService.downloadCredential(credentialIssuerWellKnownResponse.getCredentialEndPoint(), vcCredentialRequest, response.getAccess_token()); boolean verificationStatus = issuerId.toLowerCase().contains("mock") || credentialUtilService.verifyCredential(vcCredentialResponse); if (verificationStatus) { diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java index e6b386e6c..6f10b5287 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java @@ -96,7 +96,7 @@ public VerifiableCredentialResponseDTO fetchAndStoreCredential( CredentialsSupportedResponse credentialsSupportedResponse = credentialIssuerWellKnownResponse.getCredentialConfigurationsSupported().get(credentialType); // Generate credential request and download credential - VCCredentialRequest vcCredentialRequest = credentialUtilService.generateVCCredentialRequest(issuerDTO, credentialIssuerWellKnownResponse, credentialsSupportedResponse, response.getAccess_token(), walletId, base64EncodedWalletKey); + VCCredentialRequest vcCredentialRequest = credentialUtilService.generateVCCredentialRequest(issuerDTO, credentialIssuerWellKnownResponse, credentialsSupportedResponse, response.getAccess_token(), walletId, base64EncodedWalletKey, true); VCCredentialResponse vcCredentialResponse = credentialUtilService.downloadCredential(credentialIssuerWellKnownResponse.getCredentialEndPoint(), vcCredentialRequest, response.getAccess_token()); boolean verificationStatus = issuerId.toLowerCase().contains("mock") || credentialUtilService.verifyCredential(vcCredentialResponse); diff --git a/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java b/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java index 3c05f4370..7ca392b1f 100644 --- a/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java +++ b/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java @@ -81,18 +81,18 @@ public VCCredentialResponse downloadCredential(String credentialEndpoint, VCCred return vcCredentialResponse; } - public VCCredentialRequest generateVCCredentialRequest(IssuerDTO issuerDTO, CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse, CredentialsSupportedResponse credentialsSupportedResponse, String accessToken, String walletId, String base64EncodedWalletKey) throws Exception { + public VCCredentialRequest generateVCCredentialRequest(IssuerDTO issuerDTO, CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse, CredentialsSupportedResponse credentialsSupportedResponse, String accessToken, String walletId, String base64EncodedWalletKey,Boolean isLoginFlow) throws Exception { String jwt; Map proofTypesSupported = credentialsSupportedResponse.getProofTypesSupported(); SigningAlgorithm algorithm; - if(proofTypesSupported.containsKey("jwt")){ + if (proofTypesSupported.containsKey("jwt")) { algorithm = SigningAlgorithm.fromString(proofTypesSupported.get("jwt").getProofSigningAlgValuesSupported().get(0)); - }else { - algorithm= SigningAlgorithm.RS256; + } else { + algorithm = SigningAlgorithm.RS256; } - if (Objects.equals(algorithm, SigningAlgorithm.RS256)) { + if (!isLoginFlow) { jwt = joseUtil.generateJwt(credentialIssuerWellKnownResponse.getCredentialIssuer(), issuerDTO.getClient_id(), accessToken); } else { Optional proofSigningKey = proofSigningKeyRepository.findByWalletIdAndAlgorithm(walletId, algorithm.name()); diff --git a/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java index da3958027..2a9454bb7 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java @@ -115,7 +115,7 @@ public void shouldThrowExceptionIfDownloadedVCSignatureVerificationFailed() thro when(credentialUtilService.generateVCCredentialRequest(any(IssuerDTO.class), any(CredentialIssuerWellKnownResponse.class), any(CredentialsSupportedResponse.class), - any(String.class), any(), any())).thenReturn(getVCCredentialRequestDTO()); + any(String.class), any(), any(), eq(false))).thenReturn(getVCCredentialRequestDTO()); VCCredentialResponse vcCredentialResponse = getVCCredentialResponseDTO("CredentialType1"); when(credentialUtilService.downloadCredential(any(String.class), any(VCCredentialRequest.class), @@ -134,7 +134,7 @@ public void shouldReturnDownloadedVCAsPDFIfSignatureVerificationIsSuccessful() t when(credentialUtilService.generateVCCredentialRequest(any(IssuerDTO.class), any(CredentialIssuerWellKnownResponse.class), any(CredentialsSupportedResponse.class), - any(String.class), any(), any())).thenReturn(getVCCredentialRequestDTO()); + any(String.class), any(), any(),eq(false))).thenReturn(getVCCredentialRequestDTO()); VCCredentialResponse vcCredentialResponse = getVCCredentialResponseDTO("CredentialType1"); when(credentialUtilService.downloadCredential(any(String.class), any(VCCredentialRequest.class), diff --git a/src/test/java/io/mosip/mimoto/service/CredentialUtilServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialUtilServiceTest.java index 296fd1cb9..d1209cec0 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialUtilServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialUtilServiceTest.java @@ -146,7 +146,7 @@ public void shouldGenerateVCCredentialRequestForProvidedIssuerAndCredentialType( VCCredentialRequest expectedVCCredentialRequest = getVCCredentialRequestDTO(); Mockito.when(joseUtil.generateJwt(any(String.class), any(String.class), any(String.class))).thenReturn("jwt"); - VCCredentialRequest actualVCCredentialRequest = credentialUtilService.generateVCCredentialRequest(issuerDTO, issuerWellKnownResponse, credentialsSupportedResponse, "test-access-token", "walletId", "walletKey"); + VCCredentialRequest actualVCCredentialRequest = credentialUtilService.generateVCCredentialRequest(issuerDTO, issuerWellKnownResponse, credentialsSupportedResponse, "test-access-token", "walletId", "walletKey", false); assertEquals(expectedVCCredentialRequest, actualVCCredentialRequest); } @@ -158,7 +158,7 @@ public void shouldThrowExceptionWhenInvalidAlgoIsProvidedForGeneratingJWTDuringC Mockito.when(joseUtil.generateJwt(any(String.class), any(String.class), any(String.class))).thenThrow(new AssertionError("Unexpected algorithm type: dfs")); AssertionError actualError = assertThrows(AssertionError.class, () -> { - credentialUtilService.generateVCCredentialRequest(issuerDTO, issuerWellKnownResponse, credentialsSupportedResponse, "test-access-token", "walletId", "walletKey"); + credentialUtilService.generateVCCredentialRequest(issuerDTO, issuerWellKnownResponse, credentialsSupportedResponse, "test-access-token", "walletId", "walletKey", false); }); assertEquals("Unexpected algorithm type: dfs", actualError.getMessage()); @@ -200,7 +200,7 @@ public void shouldThrowExceptionIfDownloadedResponseContainsSigningAlgoNotSuppor CredentialIssuerWellKnownResponse issuerWellKnownResponse = getCredentialIssuerWellKnownResponseDto(issuerId, Map.of("CredentialType1", credentialsSupportedResponse)); IllegalArgumentException actualError = assertThrows(IllegalArgumentException.class, () -> { - credentialUtilService.generateVCCredentialRequest(issuerDTO, issuerWellKnownResponse, credentialsSupportedResponse, "test-access-token", "walletId", "walletKey"); + credentialUtilService.generateVCCredentialRequest(issuerDTO, issuerWellKnownResponse, credentialsSupportedResponse, "test-access-token", "walletId", "walletKey", true); }); assertEquals("Unsupported signing algorithm: ps256", actualError.getMessage()); From b4f60017e5a6bd88c1dfb198aecb8f8d1450b8d4 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 7 Apr 2025 23:58:36 +0530 Subject: [PATCH 504/860] [INJIWEB-1418] write test cases for wallet credential service file Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../impl/WalletCredentialServiceImpl.java | 6 +- .../service/WalletCredentialServiceTest.java | 180 ++++++++++++++++++ .../io/mosip/mimoto/util/TestUtilities.java | 25 +++ 3 files changed, 206 insertions(+), 5 deletions(-) create mode 100644 src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java index 6f10b5287..256111e8c 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java @@ -90,25 +90,21 @@ public VerifiableCredentialResponseDTO fetchAndStoreCredential( shouldInitiateDownloadRequest(issuerId,credentialType); - // Fetch issuer configuration IssuerDTO issuerDTO = issuersService.getIssuerDetails(issuerId); CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = getIssuerWellKnownResponse(issuerId); CredentialsSupportedResponse credentialsSupportedResponse = credentialIssuerWellKnownResponse.getCredentialConfigurationsSupported().get(credentialType); - // Generate credential request and download credential VCCredentialRequest vcCredentialRequest = credentialUtilService.generateVCCredentialRequest(issuerDTO, credentialIssuerWellKnownResponse, credentialsSupportedResponse, response.getAccess_token(), walletId, base64EncodedWalletKey, true); VCCredentialResponse vcCredentialResponse = credentialUtilService.downloadCredential(credentialIssuerWellKnownResponse.getCredentialEndPoint(), vcCredentialRequest, response.getAccess_token()); boolean verificationStatus = issuerId.toLowerCase().contains("mock") || credentialUtilService.verifyCredential(vcCredentialResponse); - // Encrypt and store credential response into database String encryptedCredentialData = encryptCredential(vcCredentialResponse.toString(), base64EncodedWalletKey); VerifiableCredential savedCredential = saveCredential(walletId, encryptedCredentialData, verificationStatus, issuerId, credentialType); - // Build and return response DTO return WalletCredentialResponseDTOFactory.buildCredentialResponseDTO(issuerDTO, credentialsSupportedResponse, locale, savedCredential.getId()); } - public void shouldInitiateDownloadRequest(String issuerId, String credentialType) { + private void shouldInitiateDownloadRequest(String issuerId, String credentialType) { Set issuers = Set.of("Mosip"); if (issuers.contains(issuerId) && alreadyDownloaded(issuerId, credentialType)) { throw new RuntimeException("A credential is already downloaded for the selected Issuer and Credential Type. Only one is allowed, so download will not be initiated"); diff --git a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java new file mode 100644 index 000000000..b7ed91929 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java @@ -0,0 +1,180 @@ +package io.mosip.mimoto.service; + +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.kernel.cryptomanager.service.CryptomanagerService; +import io.mosip.mimoto.dbentity.VerifiableCredential; +import io.mosip.mimoto.dto.*; +import io.mosip.mimoto.dto.idp.TokenResponseDTO; +import io.mosip.mimoto.dto.mimoto.*; +import io.mosip.mimoto.exception.*; +import io.mosip.mimoto.repository.WalletCredentialsRepository; +import io.mosip.mimoto.service.impl.*; +import io.mosip.mimoto.util.*; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.*; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.web.client.RestTemplate; + +import java.util.*; +import static io.mosip.mimoto.util.TestUtilities.*; +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; + +@RunWith(SpringRunner.class) +public class WalletCredentialServiceTest { + + @InjectMocks + private WalletCredentialServiceImpl walletCredentialService; + + @Mock + private IssuersService issuersService; + @Mock + private DataShareServiceImpl dataShareService; + @Mock + private ObjectMapper objectMapper; + @Mock + private IdpService idpService; + @Mock + private RestTemplate restTemplate; + @Mock + private PresentationServiceImpl presentationService; + @Mock + private CryptomanagerService cryptomanagerService; + @Mock + private WalletCredentialsRepository walletCredentialsRepository; + @Mock + private CredentialUtilService credentialUtilService; + @Mock + private EncryptionDecryptionUtil encryptionDecryptionUtil; + + private final String walletId = "wallet123"; + private final String issuerId = "issuer123"; + private final String credentialType = "CredentialType1"; + private final String accessToken = "accessToken"; + private final String base64Key = Base64.getEncoder().encodeToString("dummykey12345678".getBytes()); + + private CredentialIssuerConfiguration issuerConfig; + private VCCredentialRequest vcRequest; + TokenResponseDTO tokenResponse; + + @Before + public void setUp() { + walletCredentialService.init(); + issuerConfig = getCredentialIssuerConfigurationResponseDto(issuerId, credentialType, List.of()); + vcRequest = getVCCredentialRequestDTO(); + tokenResponse = new TokenResponseDTO(); + tokenResponse.setAccess_token(accessToken); + } + + private IssuerDTO getMockIssuerDTO() { + DisplayDTO display = new DisplayDTO(); + display.setName("issuer name"); + display.setDescription("issuer description"); + display.setLanguage("en"); + + LogoDTO logoDTO = new LogoDTO(); + logoDTO.setUrl("https://issuer_logo_url"); + logoDTO.setAlt_text("issuerLogo"); + display.setLogo(logoDTO); + + IssuerDTO dto = new IssuerDTO(); + dto.setDisplay(List.of(display)); + dto.setIssuer_id(issuerId); + return dto; + } + + @Test + public void shouldFetchAndStoreCredentialSuccessfully() throws Exception { + VCCredentialResponse vcResponse = new VCCredentialResponse(); + String encryptedCredential = "encryptedCredential"; + + VerifiableCredential vc = getVerifiableCredential("vc-id-123", walletId, "encryptedCredential", issuerId, credentialType); + VerifiableCredentialResponseDTO expectedVerifiableCredentialResponseDTO = getVerifiableCredentialResponseDTO("issuer name", "https://issuer_logo_url", credentialType, "https://logo", "vc-id-123"); + + when(issuersService.getIssuerDetails(issuerId)).thenReturn(getMockIssuerDTO()); + when(issuersService.getIssuerConfiguration(issuerId)).thenReturn(issuerConfig); + when(credentialUtilService.generateVCCredentialRequest(any(), any(), any(), eq(accessToken), eq(walletId), eq(base64Key), eq(true))).thenReturn(vcRequest); + when(credentialUtilService.downloadCredential(anyString(), eq(vcRequest), eq(accessToken))).thenReturn(vcResponse); + when(credentialUtilService.verifyCredential(any())).thenReturn(true); + when(encryptionDecryptionUtil.encryptWithAES(any(), any())).thenReturn(encryptedCredential); + when(walletCredentialsRepository.save(any())).thenReturn(vc); + + VerifiableCredentialResponseDTO actualVerifiableCredentialResponseDTO = walletCredentialService.fetchAndStoreCredential( + issuerId, credentialType, tokenResponse, "1", "en", walletId, base64Key + ); + + assertEquals(expectedVerifiableCredentialResponseDTO, actualVerifiableCredentialResponseDTO); + } + + @Test + public void shouldThrowExceptionWhenDuplicateCredentialExists() { + when(walletCredentialsRepository.existsByIssuerIdAndCredentialType("Mosip", credentialType)).thenReturn(true); + + RuntimeException exception = assertThrows(RuntimeException.class, () -> + walletCredentialService.fetchAndStoreCredential("Mosip", credentialType, tokenResponse, "1", "en", walletId, base64Key) + ); + + assertEquals("A credential is already downloaded for the selected Issuer and Credential Type. Only one is allowed, so download will not be initiated", exception.getMessage()); + } + + @Test + public void shouldFetchAllCredentialsForWalletSuccessfully() throws Exception { + VerifiableCredential vc = getVerifiableCredential("vc-id-123", walletId, "encryptedCredential", issuerId, credentialType); + when(walletCredentialsRepository.findByWalletId(walletId)).thenReturn(List.of(vc)); + when(issuersService.getIssuerDetails(issuerId)).thenReturn(getMockIssuerDTO()); + when(issuersService.getIssuerConfiguration(issuerId)).thenReturn(issuerConfig); + List expectedCredentialsList = List.of(getVerifiableCredentialResponseDTO("issuer name", "https://issuer_logo_url", credentialType, "https://logo", "vc-id-123")); + + List actualCredentialsList = walletCredentialService.fetchAllCredentialsForWallet(walletId, base64Key, "en"); + + assertEquals(1, actualCredentialsList.size()); + assertEquals(expectedCredentialsList, actualCredentialsList); + } + + @Test + public void shouldIncludeEmptyCredentialDetailsInResponseIfAnyErrorOccurredWhileFetchingDetails() throws Exception { + VerifiableCredential vc1 = getVerifiableCredential("vc-id-123", walletId, "encryptedCredential", issuerId, credentialType); + VerifiableCredential vc2 = getVerifiableCredential("vc-id-124", walletId, "encryptedCredential", "issuer234", credentialType); + when(walletCredentialsRepository.findByWalletId(walletId)).thenReturn(List.of(vc1, vc2)); + when(issuersService.getIssuerDetails(issuerId)).thenReturn(getMockIssuerDTO()); + when(issuersService.getIssuerDetails("issuer234")).thenThrow(new ApiNotAccessibleException()); + when(issuersService.getIssuerConfiguration(issuerId)).thenReturn(issuerConfig); + List expectedCredentialsList = List.of(getVerifiableCredentialResponseDTO("issuer name", "https://issuer_logo_url", credentialType, "https://logo", "vc-id-123"), getVerifiableCredentialResponseDTO("", "", "", "", "vc-id-124")); + + List actualCredentialList = walletCredentialService.fetchAllCredentialsForWallet(walletId, base64Key, "en"); + + assertEquals(2, actualCredentialList.size()); + assertEquals(expectedCredentialsList, actualCredentialList); + } + + @Test + public void shouldNotThrowExceptionOnVerificationFailureDuringVCDownloaded() throws Exception { + VCCredentialResponse vcResponse = new VCCredentialResponse(); + String encryptedCredential = "encryptedCredential"; + + VerifiableCredential vc = getVerifiableCredential("vc-id-123", walletId, "encryptedCredential", issuerId, credentialType); + VerifiableCredentialResponseDTO expectedVerifiableCredentialResponseDTO = getVerifiableCredentialResponseDTO("issuer name", "https://issuer_logo_url", credentialType, "https://logo", "vc-id-123"); + + when(issuersService.getIssuerDetails(issuerId)).thenReturn(getMockIssuerDTO()); + when(issuersService.getIssuerConfiguration(issuerId)).thenReturn(issuerConfig); + when(credentialUtilService.generateVCCredentialRequest(any(), any(), any(), eq(accessToken), eq(walletId), eq(base64Key), eq(true))).thenReturn(vcRequest); + when(credentialUtilService.downloadCredential(anyString(), eq(vcRequest), eq(accessToken))).thenReturn(vcResponse); + when(credentialUtilService.verifyCredential(any())).thenReturn(false); + when(encryptionDecryptionUtil.encryptWithAES(any(), any())).thenReturn(encryptedCredential); + when(walletCredentialsRepository.save(any())).thenReturn(vc); + + VerifiableCredentialResponseDTO actualVerifiableCredentialResponseDTO = walletCredentialService.fetchAndStoreCredential( + issuerId, credentialType, tokenResponse, "1", "en", walletId, base64Key + ); + + ArgumentCaptor verifiableCredentialArgumentCaptor = ArgumentCaptor.forClass(VerifiableCredential.class); + verify(walletCredentialsRepository).save(verifiableCredentialArgumentCaptor.capture()); + + VerifiableCredential captureVerifiableCredential = verifiableCredentialArgumentCaptor.getValue(); + + assertEquals(expectedVerifiableCredentialResponseDTO, actualVerifiableCredentialResponseDTO); + assertEquals(false, captureVerifiableCredential.getCredentialMetadata().getIsVerified()); + } +} diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index 0d0a9da11..894234428 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -8,6 +8,8 @@ import com.itextpdf.kernel.pdf.PdfWriter; import com.itextpdf.kernel.pdf.PdfDocument; import com.itextpdf.kernel.pdf.PdfReader; +import io.mosip.mimoto.dbentity.CredentialMetadata; +import io.mosip.mimoto.dbentity.VerifiableCredential; import io.mosip.mimoto.dto.*; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.dto.openid.VerifierDTO; @@ -414,4 +416,27 @@ public static DataShareResponseWrapperDTO getDataShareResponseWrapperDTO() { .dataShare(dataShareResponseDTO) .errors(Collections.singletonList(errorDTO)).build(); } + + public static VerifiableCredential getVerifiableCredential(String id, String walletId, String credential, String issuerId, String credentialType) { + VerifiableCredential verifiableCredential = new VerifiableCredential(); + verifiableCredential.setId(id); + verifiableCredential.setWalletId(walletId); + verifiableCredential.setCredential(credential); + + CredentialMetadata metadata = new CredentialMetadata(); + metadata.setIssuerId(issuerId); + metadata.setCredentialType(credentialType); + verifiableCredential.setCredentialMetadata(metadata); + return verifiableCredential; + } + + public static VerifiableCredentialResponseDTO getVerifiableCredentialResponseDTO(String issuerName, String issuerLogo, String credentialType, String credentialTypeLogo, String credentialId) { + return VerifiableCredentialResponseDTO.builder() + .issuerName(issuerName) + .issuerLogo(issuerLogo) + .credentialType(credentialType) + .credentialTypeLogo(credentialTypeLogo) + .credentialId(credentialId) + .build(); + } } From d403d687678bf06a4892240bc8ab315476eabd1e Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 8 Apr 2025 00:54:34 +0530 Subject: [PATCH 505/860] [INJIWEB-1418] keep the difference between issuedAt and expiredAt claims in jwt of credential request to 5 hours and write tests for jwtGeneratorUtil file Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../mosip/mimoto/util/JwtGeneratorUtil.java | 9 +- .../mimoto/util/JwtGeneratorUtilTest.java | 164 ++++++++++++++++++ 2 files changed, 169 insertions(+), 4 deletions(-) create mode 100644 src/test/java/io/mosip/mimoto/util/JwtGeneratorUtilTest.java diff --git a/src/main/java/io/mosip/mimoto/util/JwtGeneratorUtil.java b/src/main/java/io/mosip/mimoto/util/JwtGeneratorUtil.java index d426328af..1d956fb21 100644 --- a/src/main/java/io/mosip/mimoto/util/JwtGeneratorUtil.java +++ b/src/main/java/io/mosip/mimoto/util/JwtGeneratorUtil.java @@ -46,16 +46,17 @@ public static String generateJwtUsingDBKeys(SigningAlgorithm algorithm, String a } private static JWTClaimsSet createClaims(String clientId, String audience, String accessToken) throws java.text.ParseException { - Date now = new Date(); - Date expiry = new Date(now.getTime() + 120000000L); + long nowSeconds = System.currentTimeMillis() / 1000; + Date issuedAt = new Date(nowSeconds * 1000); + Date expiresAt = new Date((nowSeconds + 18000) * 1000); String nonce = SignedJWT.parse(accessToken).getJWTClaimsSet().getStringClaim("c_nonce"); return new JWTClaimsSet.Builder() .subject(clientId) .audience(audience) .issuer(clientId) - .issueTime(now) - .expirationTime(expiry) + .issueTime(issuedAt) + .expirationTime(expiresAt) .claim("nonce", nonce) .build(); } diff --git a/src/test/java/io/mosip/mimoto/util/JwtGeneratorUtilTest.java b/src/test/java/io/mosip/mimoto/util/JwtGeneratorUtilTest.java new file mode 100644 index 000000000..c47d3ea55 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/util/JwtGeneratorUtilTest.java @@ -0,0 +1,164 @@ +package io.mosip.mimoto.util; + +import com.nimbusds.jwt.SignedJWT; +import io.mosip.mimoto.model.SigningAlgorithm; +import lombok.extern.slf4j.Slf4j; +import org.bouncycastle.jce.provider.BouncyCastleProvider; +import org.junit.BeforeClass; +import org.junit.Test; +import java.security.*; +import java.security.spec.ECGenParameterSpec; +import java.util.Arrays; +import java.util.Base64; +import java.util.Date; +import java.util.List; +import static org.junit.Assert.*; + +@Slf4j +public class JwtGeneratorUtilTest { + + @BeforeClass + public static void setupProvider() { + if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null) { + Security.addProvider(new BouncyCastleProvider()); + } + } + + private String createAccessTokenWithNonce(String nonce) throws Exception { + String header = Base64.getUrlEncoder().withoutPadding().encodeToString("{\"alg\":\"HS256\"}".getBytes()); + String payload = Base64.getUrlEncoder().withoutPadding().encodeToString(("{\"c_nonce\":\"" + nonce + "\"}").getBytes()); + String signature = Base64.getUrlEncoder().withoutPadding().encodeToString("dummy".getBytes()); + return header + "." + payload + "." + signature; + } + + @Test + public void shouldGenerateJWTForRS256Successfully() throws Exception { + KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA"); + generator.initialize(2048); + KeyPair keyPair = generator.generateKeyPair(); + String accessToken = createAccessTokenWithNonce("nonce-rs256"); + List expectedClaims = Arrays.asList("client-id", "audience", "nonce-rs256"); + + String jwt = JwtGeneratorUtil.generateJwtUsingDBKeys( + SigningAlgorithm.RS256, + "audience", + "client-id", + accessToken, + keyPair.getPublic().getEncoded(), + keyPair.getPrivate().getEncoded() + ); + + SignedJWT signedJWT = SignedJWT.parse(jwt); + List actualClaims = Arrays.asList( + signedJWT.getJWTClaimsSet().getSubject(), + signedJWT.getJWTClaimsSet().getAudience().get(0), + signedJWT.getJWTClaimsSet().getStringClaim("nonce") + ); + + assertEquals(expectedClaims, actualClaims); + assertEquals(18000, diffInSeconds(signedJWT.getJWTClaimsSet().getIssueTime(), signedJWT.getJWTClaimsSet().getExpirationTime())); + } + + @Test + public void shouldGenerateJWTForES256Successfully() throws Exception { + KeyPairGenerator generator = KeyPairGenerator.getInstance("EC"); + generator.initialize(new ECGenParameterSpec("secp256r1")); + KeyPair keyPair = generator.generateKeyPair(); + String accessToken = createAccessTokenWithNonce("nonce-es256"); + List expectedClaims = Arrays.asList("client-id", "audience", "nonce-es256"); + + String jwt = JwtGeneratorUtil.generateJwtUsingDBKeys( + SigningAlgorithm.ES256, + "audience", + "client-id", + accessToken, + keyPair.getPublic().getEncoded(), + keyPair.getPrivate().getEncoded() + ); + + SignedJWT signedJWT = SignedJWT.parse(jwt); + List actualClaims = Arrays.asList( + signedJWT.getJWTClaimsSet().getSubject(), + signedJWT.getJWTClaimsSet().getAudience().get(0), + signedJWT.getJWTClaimsSet().getStringClaim("nonce") + ); + + assertEquals(expectedClaims, actualClaims); + assertEquals(18000, diffInSeconds(signedJWT.getJWTClaimsSet().getIssueTime(), signedJWT.getJWTClaimsSet().getExpirationTime())); + } + + @Test + public void shouldGenerateJWTForES256kSuccessfully() throws Exception { + KeyPairGenerator generator = KeyPairGenerator.getInstance("EC", "BC"); + generator.initialize(new ECGenParameterSpec("secp256k1")); + KeyPair keyPair = generator.generateKeyPair(); + String accessToken = createAccessTokenWithNonce("nonce-es256k"); + List expectedClaims = Arrays.asList("client-id", "audience", "nonce-es256k"); + + String jwt = JwtGeneratorUtil.generateJwtUsingDBKeys( + SigningAlgorithm.ES256K, + "audience", + "client-id", + accessToken, + keyPair.getPublic().getEncoded(), + keyPair.getPrivate().getEncoded() + ); + + SignedJWT signedJWT = SignedJWT.parse(jwt); + List actualClaims = Arrays.asList( + signedJWT.getJWTClaimsSet().getSubject(), + signedJWT.getJWTClaimsSet().getAudience().get(0), + signedJWT.getJWTClaimsSet().getStringClaim("nonce") + ); + + assertEquals(expectedClaims, actualClaims); + assertEquals(18000, diffInSeconds(signedJWT.getJWTClaimsSet().getIssueTime(), signedJWT.getJWTClaimsSet().getExpirationTime())); + } + + @Test + public void shouldGenerateJWTForED25519Successfully() throws Exception { + KeyPairGenerator generator = KeyPairGenerator.getInstance("Ed25519", "BC"); + KeyPair keyPair = generator.generateKeyPair(); + String accessToken = createAccessTokenWithNonce("nonce-ed25519"); + List expectedClaims = Arrays.asList("client-id", "audience", "nonce-ed25519"); + + String jwt = JwtGeneratorUtil.generateJwtUsingDBKeys( + SigningAlgorithm.ED25519, + "audience", + "client-id", + accessToken, + keyPair.getPublic().getEncoded(), + keyPair.getPrivate().getEncoded() + ); + + SignedJWT signedJWT = SignedJWT.parse(jwt); + List actualClaims = Arrays.asList( + signedJWT.getJWTClaimsSet().getSubject(), + signedJWT.getJWTClaimsSet().getAudience().get(0), + signedJWT.getJWTClaimsSet().getStringClaim("nonce") + ); + + assertEquals(expectedClaims, actualClaims); + assertEquals(18000, diffInSeconds(signedJWT.getJWTClaimsSet().getIssueTime(), signedJWT.getJWTClaimsSet().getExpirationTime())); + } + + @Test(expected = Exception.class) + public void shouldThrowExceptionIfAccessTokenIsNotInJWTFormat() throws Exception { + KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA"); + generator.initialize(2048); + KeyPair keyPair = generator.generateKeyPair(); + + JwtGeneratorUtil.generateJwtUsingDBKeys( + SigningAlgorithm.RS256, + "aud", + "client", + "invalid-nonce", + keyPair.getPublic().getEncoded(), + keyPair.getPrivate().getEncoded() + ); + } + + public long diffInSeconds(Date issuedAt, Date expiresAt) { + return (expiresAt.getTime() - issuedAt.getTime()) / 1000; + } +} From 1ab6f4d6172a5d4ae9f6be8637f85765b444ab5b Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 8 Apr 2025 13:49:10 +0530 Subject: [PATCH 506/860] [INJIWEB-1418] add info about new user profile endpoints in openapi documentation file and also update the incorrect platform error codes for some scenarios and udpate the test cases for the same Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- docs/api-documentation-openapi.json | 165 ++++++++++++++++++ .../mimoto/controller/UsersController.java | 2 +- .../DatabaseConnectionException.java | 2 +- .../exception/PlatformErrorMessages.java | 4 +- .../controller/UsersControllerTest.java | 2 +- .../WalletCredentialsControllerTest.java | 8 +- 6 files changed, 174 insertions(+), 9 deletions(-) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index 0d9793e78..7bfb22fd9 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -2668,10 +2668,175 @@ } ] } + }, + "/users/me/db": { + "get": { + "tags": [ + "Users" + ], + "summary": "Retrieve user metadata from the database", + "description": "This API is secured using session-based authentication. When a request is made, the server retrieves the session ID from the Cookie header and uses it to fetch session details from Redis. From the session, it extracts the user's unique identifier (typically the sub field provided by the identity provider) along with the clientRegistrationId. These values are then used to retrieve the user's metadata from the database. If successful, the API returns the user's profile information. If any issue occurs such as an invalid session, missing user data, or server error then an appropriate error response is returned.", + "operationId": "getUserProfileFromDB", + "security": [ + { + "SessionAuth": [] + } + ], + "responses": { + "200": { + "description": "User profile retrieved successfully from the Database", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserMetadataDTO" + }, + "examples": { + "Success response": { + "value": { + "display_name": "John Doe", + "profile_picture_url": "https://example.com/profile.jpg", + "email": "john.doe@example.com" + } + } + } + } + } + }, + "404": { + "description": "User not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "User not found in the Database": { + "value": { + "errorCode": "RESIDENT-APP-049", + "errorMessage": "User not found. Please check your credentials or login again" + } + } + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "Database connection failure": { + "value": { + "errorCode": "RESIDENT-APP-047", + "errorMessage": "Failed to connect to the shared database while fetching User Metadata data from the database" + } + }, + "Unexpected server error": { + "value": { + "errorCode": "RESIDENT-APP-049", + "errorMessage": "An unexpected error occurred while downloading and storing user metadata into database" + } + } + } + } + } + } + } + } + }, + "/users/me/cache": { + "get": { + "tags": [ + "Users" + ], + "summary": "Retrieve user metadata from the stored redis session", + "description": "This API is secured using session-based authentication. When a request is made, the server retrieves the session ID from the Cookie header and uses it to fetch session details from Redis. It then attempts to retrieve the user's metadata directly from the session. If the metadata is available, the API returns the user's profile information otherwise an appropriate error response is returned.", + "operationId": "getUserProfileFromCache", + "security": [ + { + "SessionAuth": [] + } + ], + "responses": { + "200": { + "description": "User profile retrieved successfully from the session", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserMetadataDTO" + }, + "examples": { + "Success response": { + "value": { + "display_name": "John Doe", + "profile_picture_url": "https://example.com/profile.jpg", + "email": "john.doe@example.com" + } + } + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "User metadata not found in cache": { + "value": { + "errorCode": "RESIDENT-APP-052", + "errorMessage": "No user metadata present in cache" + } + }, + "Unexpected server error": { + "value": { + "errorCode": "RESIDENT-APP-052", + "errorMessage": "An unexpected error occurred while retrieving user metadata from cache" + } + } + } + } + } + } + } + } } }, "components": { + "securitySchemes": { + "SessionAuth": { + "type": "apiKey", + "in": "cookie", + "name": "JSESSIONID", + "description": "Session ID for authentication, provided within the cookie (e.g., JSESSIONID=" + } + }, "schemas": { + "UserMetadataDTO": { + "type": "object", + "properties": { + "displayName": { + "type": "string", + "description": "The display name of the user provided by the Identity Provider" + }, + "profilePictureUrl": { + "type": "string", + "format": "uri", + "description": "The URL of the user's profile picture provided by the Identity Provider" + }, + "email": { + "type": "string", + "format": "email", + "description": "The email address of the user provided by the Identity Provider" + } + } + }, "IssuerConfigurationSuccessResponse": { "type": "object", "properties": { diff --git a/src/main/java/io/mosip/mimoto/controller/UsersController.java b/src/main/java/io/mosip/mimoto/controller/UsersController.java index 909ded11a..df59c63bd 100644 --- a/src/main/java/io/mosip/mimoto/controller/UsersController.java +++ b/src/main/java/io/mosip/mimoto/controller/UsersController.java @@ -61,7 +61,7 @@ public ResponseEntity getUserProfile(Authentication authenticat private UserMetadata fetchUserMetadata(String providerSubjectId, String identityProvider) throws OAuth2AuthenticationException { return userMetadataRepository.findByProviderSubjectIdAndIdentityProvider(providerSubjectId, identityProvider) - .orElseThrow(() -> new OAuth2AuthenticationException(USER_METADATA_FETCH_EXCEPTION.getCode(), "User not found. Please check your credentials or register", HttpStatus.NOT_FOUND)); + .orElseThrow(() -> new OAuth2AuthenticationException(USER_METADATA_FETCH_EXCEPTION.getCode(), "User not found. Please check your credentials or login again", HttpStatus.NOT_FOUND)); } @GetMapping("/cache") diff --git a/src/main/java/io/mosip/mimoto/exception/DatabaseConnectionException.java b/src/main/java/io/mosip/mimoto/exception/DatabaseConnectionException.java index 9ea1b9031..97a09f8c8 100644 --- a/src/main/java/io/mosip/mimoto/exception/DatabaseConnectionException.java +++ b/src/main/java/io/mosip/mimoto/exception/DatabaseConnectionException.java @@ -8,7 +8,7 @@ public class DatabaseConnectionException extends BaseCheckedException { private final HttpStatus status; public DatabaseConnectionException(String code, String message, DatabaseEntity entity, DatabaseOperation flow, HttpStatus status) { - super(code, String.format("%s while %s %s data into the database", message, flow.getValue(), entity.getValue())); + super(code, String.format("%s while %s %s data %s the database", message, flow.getValue(), entity.getValue(), flow.getValue()=="fetching"? "from" : "into")); this.status = status; } diff --git a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java index c6b4da3ff..1e714d78c 100644 --- a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java +++ b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java @@ -100,8 +100,8 @@ public enum PlatformErrorMessages { USER_WALLET_CREATION_EXCEPTION(PlatformConstants.PREFIX + "050", "Exception occurred when creating the wallet for user"), USER_WALLET_RETRIEVAL_EXCEPTION(PlatformConstants.PREFIX + "051", "Exception occurred when creating the wallet for user"), USER_METADATA_CACHE_FETCH_EXCEPTION(PlatformConstants.PREFIX + "052", "Failed to fetch the User metadata from cache"), - LOGIN_CREDENTIAL_DOWNLOAD_EXCEPTION(PlatformConstants.PREFIX + "052", "Failed to download and store the credential"), - CREDENTIALS_FETCH_EXCEPTION(PlatformConstants.PREFIX + "053", "Exception occurred when fetching credentials for the specified wallet"); + LOGIN_CREDENTIAL_DOWNLOAD_EXCEPTION(PlatformConstants.PREFIX + "053", "Failed to download and store the credential"), + CREDENTIALS_FETCH_EXCEPTION(PlatformConstants.PREFIX + "054", "Exception occurred when fetching credentials for the specified wallet"); /** The error message. */ private final String errorMessage; diff --git a/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java b/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java index 8b5c1d2a7..2a55f151e 100644 --- a/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java @@ -98,7 +98,7 @@ public void shouldThrowExceptionForAInvalidUser() throws Exception { .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")).session(mockSession)) .andExpect(status().isNotFound()) .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-049")) - .andExpect(jsonPath("$.errorMessage").value("User not found. Please check your credentials or register")); + .andExpect(jsonPath("$.errorMessage").value("User not found. Please check your credentials or login again")); } @Test diff --git a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java index 95815cb2d..d5312fc7d 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java @@ -106,7 +106,7 @@ public void shouldThrowMissingWalletKeyWhileDownloadingCredentialsIfWalletKeyIsM .contentType(MediaType.APPLICATION_FORM_URLENCODED) .content(postRequestContent)) .andExpect(status().isInternalServerError()) - .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-052")) + .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-053")) .andExpect(jsonPath("$.errorMessage").value("Wallet key is missing in session")); } @@ -163,7 +163,7 @@ public void shouldThrowExceptionOnAnyErrorOccurredDuringCredentialDownload() thr .contentType(MediaType.APPLICATION_FORM_URLENCODED) .content(postRequestContent)) .andExpect(status().isInternalServerError()) - .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-052")) + .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-053")) .andExpect(jsonPath("$.errorMessage").value("Unexpected error occurred while downloading credential")); } @@ -186,7 +186,7 @@ public void shouldThrowMissingWalletKeyWhileFetchingAllCredentialsIfWalletKeyIsM .contentType(MediaType.APPLICATION_FORM_URLENCODED) .content(getRequestContent)) .andExpect(status().isInternalServerError()) - .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-053")) + .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-054")) .andExpect(jsonPath("$.errorMessage").value("Wallet key is missing in session")); } @@ -215,7 +215,7 @@ public void shouldThrowExceptionOnAnyErrorOccurredWhileFetchingCredentials() thr .contentType(MediaType.APPLICATION_FORM_URLENCODED) .content(getRequestContent)) .andExpect(status().isInternalServerError()) - .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-053")) + .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-054")) .andExpect(jsonPath("$.errorMessage").value("Unexpected error occurred while fetching wallet credentials")); } } From 29352de43a457f594555112dc263c9ae5b49e73b Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 8 Apr 2025 15:12:24 +0530 Subject: [PATCH 507/860] [INJIWEB-1418] add info about new wallet credential endpoints in openapi documentation file Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- docs/api-documentation-openapi.json | 284 +++++++++++++++++++++++++++- 1 file changed, 282 insertions(+), 2 deletions(-) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index 7bfb22fd9..ee02cf1fd 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -2806,6 +2806,261 @@ } } } + }, + "/wallets/{walletId}/credentials": { + "post": { + "tags": [ + "Wallet Credentials" + ], + "summary": "Download and store a Verifiable Credential under a specific Wallet", + "description": "This API is secured using session-based authentication. Upon receiving a request, the session ID is extracted from the Cookie header and used to retrieve session details from Redis for authentication. It then retrieves the wallet key from the session and use it to decrypt the signing algorithm's secret key and encrypt the downloaded Verifiable Credential. If the process completes successfully, the credential is stored in the database and returned in the response. In case of any issues, an appropriate error response is returned.", + "operationId": "downloadCredential", + "security": [ + { + "SessionAuth": [] + } + ], + "parameters": [ + { + "name": "walletId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier of the user's wallet where the credential will be stored" + } + ], + "requestBody": { + "required": true, + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "grant_type": { + "type": "string", + "description": "OAuth 2.0 grant type, typically 'authorization_code'" + }, + "code": { + "type": "string", + "description": "Authorization code received from the identity provider" + }, + "redirect_uri": { + "type": "string", + "description": "Redirect URI used in the OAuth 2.0 flow" + }, + "code_verifier": { + "type": "string", + "description": "PKCE code verifier associated with the authorization code" + }, + "issuer": { + "type": "string", + "description": "Unique identifier of the credential Issuer" + }, + "credential": { + "type": "string", + "description": "Type of the credential to be downloaded" + }, + "vcStorageExpiryLimitInTimes": { + "type": "string", + "description": "Optional limit for how many times the user is allowed to share the Verifiable Credential. If not provided, it defaults to -1" + }, + "locale": { + "type": "string", + "description": "Language preference in which the user expects the Verifiable Credential to be rendered" + } + }, + "required": [ + "grant_type", + "code", + "redirect_uri", + "code_verifier", + "issuer", + "credential", + "locale" + ] + }, + "examples": { + "Default Example": { + "value": { + "grant_type": "authorization_code", + "code": "abc123", + "redirect_uri": "https://example.com/redirect", + "code_verifier": "xyz-secret-verifier", + "issuer": "Mosip", + "credential": "MosipVerifiableCredential", + "vcStorageExpiryLimitInTimes": "1", + "locale": "en" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Verifiable Credential downloaded and stored successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VerifiableCredentialResponseDTO" + }, + "examples": { + "Success response": { + "value": { + "issuer_name": "Mosip", + "issuer_logo": "https://example.com/logo.png", + "credential_type": "MosipVerifiableCredential", + "credential_type_logo": "https://example.com/credential-logo.png", + "credential_id": "1234567890" + } + } + } + } + } + }, + "400": { + "description": "Bad request - API not accessible or request parameters invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "Invalid Auth Server Token API access": { + "value": { + "errorCode": "RESIDENT-APP-026", + "errorMessage": "Api not accessible failure" + } + } + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "Wallet Key missing in session": { + "value": { + "errorCode": "RESIDENT-APP-053", + "errorMessage": "Wallet key is missing in session" + } + }, + "Database connection failure": { + "value": { + "errorCode": "RESIDENT-APP-047", + "errorMessage": "Failed to connect to the shared database while storing Verifiable Credential data into the database" + } + }, + "Unexpected Server Error": { + "value": { + "errorCode": "RESIDENT-APP-053", + "errorMessage": "Unexpected error occurred while downloading and storing Verifiable Credential" + } + } + } + } + } + } + } + }, + "get": { + "tags": [ + "Wallet Credentials" + ], + "summary": "Fetch all credentials for the given wallet", + "description": "This API is secured using session-based authentication. When a request is made, the session ID is extracted from the Cookie header and used to fetch session details from Redis for authentication. It then retrieves the wallet key from the session and uses it to decrypt all stored Verifiable Credentials for the given wallet. If successful, it returns a list of credentials; otherwise, an appropriate error is returned.", + "operationId": "fetchAllCredentialsForWallet", + "security": [ + { + "SessionAuth": [] + } + ], + "parameters": [ + { + "name": "walletId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier of the user's wallet from where the credential will be fetched" + }, + { + "name": "locale", + "in": "query", + "required": true, + "schema": { + "type": "string" + }, + "description": "Locale to determine the language in which credentials should be rendered" + } + ], + "responses": { + "200": { + "description": "Credentials retrieved successfully", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/VerifiableCredentialResponseDTO" + } + }, + "examples": { + "Success response": { + "value": [ + { + "issuer_name": "Mosip", + "issuer_logo": "https://example.com/logo.png", + "credential_type": "MosipVerifiableCredential", + "credential_type_logo": "https://example.com/credential-logo.png", + "credential_id": "1234567890" + } + ] + } + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "Wallet Key missing in session": { + "value": { + "errorCode": "RESIDENT-APP-053", + "errorMessage": "Wallet key is missing in session" + } + }, + "Database connection failure": { + "value": { + "errorCode": "RESIDENT-APP-047", + "errorMessage": "Failed to connect to the shared database while fetching Verifiable Credential from the database" + } + }, + "Unexpected Server Error": { + "value": { + "errorCode": "RESIDENT-APP-054", + "errorMessage": "Unexpected error occurred while fetching Verifiable Credential" + } + } + } + } + } + } + } + } } }, "components": { @@ -2821,11 +3076,11 @@ "UserMetadataDTO": { "type": "object", "properties": { - "displayName": { + "display_name": { "type": "string", "description": "The display name of the user provided by the Identity Provider" }, - "profilePictureUrl": { + "profile_picture_url": { "type": "string", "format": "uri", "description": "The URL of the user's profile picture provided by the Identity Provider" @@ -2837,6 +3092,31 @@ } } }, + "VerifiableCredentialResponseDTO": { + "type": "object", + "properties": { + "issuer_name": { + "type": "string", + "description": "Name of the Issuer" + }, + "issuer_logo": { + "type": "string", + "description": "Logo of the Issuer" + }, + "credential_type": { + "type": "string", + "description": "The name of the Credential Type issued by the Issuer" + }, + "credential_type_logo": { + "type": "string", + "description": "Logo of the Credential Type" + }, + "credential_id": { + "type": "string", + "description": "Unique Identifier of the Credential in the database" + } + } + }, "IssuerConfigurationSuccessResponse": { "type": "object", "properties": { From bb6d2d8adf4ed65724abd3bb903c96a090521fc2 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 8 Apr 2025 16:59:01 +0530 Subject: [PATCH 508/860] [INJIWEB-1418] add info about new wallet endpoints in openapi documentation file and update some descriptions Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- docs/api-documentation-openapi.json | 268 ++++++++++++++++++++++++++-- 1 file changed, 258 insertions(+), 10 deletions(-) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index ee02cf1fd..4f1c24383 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -2675,7 +2675,7 @@ "Users" ], "summary": "Retrieve user metadata from the database", - "description": "This API is secured using session-based authentication. When a request is made, the server retrieves the session ID from the Cookie header and uses it to fetch session details from Redis. From the session, it extracts the user's unique identifier (typically the sub field provided by the identity provider) along with the clientRegistrationId. These values are then used to retrieve the user's metadata from the database. If successful, the API returns the user's profile information. If any issue occurs such as an invalid session, missing user data, or server error then an appropriate error response is returned.", + "description": "This API is secured using session-based authentication. When a request is made, the server retrieves the session ID from the Cookie header and uses it to fetch session details from Redis. From the session, it extracts the user's unique identifier (typically the sub field provided by the identity provider) along with the clientRegistrationId. These values are then used to retrieve the user's metadata from the database. If successful, the API returns the user's profile information. If any issue occurs such as missing user data or server error then an appropriate error response is returned.", "operationId": "getUserProfileFromDB", "security": [ { @@ -2788,7 +2788,7 @@ "$ref": "#/components/schemas/Error" }, "examples": { - "User metadata not found in cache": { + "User metadata not found in session": { "value": { "errorCode": "RESIDENT-APP-052", "errorMessage": "No user metadata present in cache" @@ -2813,7 +2813,7 @@ "Wallet Credentials" ], "summary": "Download and store a Verifiable Credential under a specific Wallet", - "description": "This API is secured using session-based authentication. Upon receiving a request, the session ID is extracted from the Cookie header and used to retrieve session details from Redis for authentication. It then retrieves the wallet key from the session and use it to decrypt the signing algorithm's secret key and encrypt the downloaded Verifiable Credential. If the process completes successfully, the credential is stored in the database and returned in the response. In case of any issues, an appropriate error response is returned.", + "description": "This API is secured using session-based authentication. Upon receiving a request, the session ID is extracted from the Cookie header and used to retrieve session details from Redis for authentication. It then retrieves the wallet key from the session and use it to decrypt the signing algorithm's secret key(which is used for signing the JWT in credential request) and encrypt the downloaded Verifiable Credential. If the process completes successfully, the credential is stored in the database and certain fields will be returned in the response. In case of any issues, an appropriate error response is returned.", "operationId": "downloadCredential", "security": [ { @@ -2975,7 +2975,7 @@ "Wallet Credentials" ], "summary": "Fetch all credentials for the given wallet", - "description": "This API is secured using session-based authentication. When a request is made, the session ID is extracted from the Cookie header and used to fetch session details from Redis for authentication. It then retrieves the wallet key from the session and uses it to decrypt all stored Verifiable Credentials for the given wallet. If successful, it returns a list of credentials; otherwise, an appropriate error is returned.", + "description": "This API is secured using session-based authentication. When a request is made, the session ID is extracted from the Cookie header and used to fetch session details from Redis for authentication. It then retrieves the wallet key from the session and uses it to decrypt all stored Verifiable Credentials for the given wallet. If successful, it returns a list of credentials otherwise an appropriate error is returned.", "operationId": "fetchAllCredentialsForWallet", "security": [ { @@ -2999,7 +2999,7 @@ "schema": { "type": "string" }, - "description": "Locale to determine the language in which credentials should be rendered" + "description": "Locale is used to determine the language in which credentials should be rendered" } ], "responses": { @@ -3039,7 +3039,7 @@ "examples": { "Wallet Key missing in session": { "value": { - "errorCode": "RESIDENT-APP-053", + "errorCode": "RESIDENT-APP-054", "errorMessage": "Wallet key is missing in session" } }, @@ -3061,6 +3061,225 @@ } } } + }, + "/wallets": { + "post": { + "tags": [ + "Wallets" + ], + "summary": "Create a new wallet", + "description": "This API is secured using session-based authentication. The session ID is extracted from the Cookie header and used to retrieve session details from Redis for authentication. The user ID is then obtained from the session and along with the provided wallet name and PIN is used to create a new wallet in the database. If the wallet is created successfully, a unique identifier for the wallet is returned otherwise an appropriate error response is provided.", + "operationId": "createWallet", + "security": [ + { + "SessionAuth": [] + } + ], + "requestBody": { + "required": true, + "description": "Wallet creation request containing the wallet name and wallet PIN", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WalletRequestDto" + }, + "examples": { + "Create wallet request": { + "value": { + "walletName": "wallet 123", + "walletPin": "1234" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Wallet created successfully", + "content": { + "application/json": { + "schema": { + "type": "string", + "description": "Unique identifier of the Wallet stored in the database" + }, + "examples": { + "Success response": { + "value": "d94a2e70-1234-4f2f-9eae-98765" + } + } + } + } + }, + "400": { + "description": "Invalid wallet creation request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "Invalid request": { + "value": { + "errorCode": "RESIDENT-APP-050", + "errorMessage": "Pin should be numeric with 4 or 6 digits." + } + } + } + } + } + }, + "500": { + "description": "Internal server error while creating wallet", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "Unexpected server error": { + "value": { + "errorCode": "RESIDENT-APP-050", + "errorMessage": "An unexpected error occurred while creating the wallet" + } + } + } + } + } + } + } + }, + "get": { + "tags": [ + "Wallets" + ], + "summary": "Retrieve all wallets for the user", + "description": "This API is secured using session-based authentication. Upon receiving a request, the session is first retrieved using the session ID extracted from the Cookie header to authenticate the user. Once authenticated, the user's ID is obtained from the session stored in Redis. Using this user ID, the API fetches all wallets associated with the user from the database and returns them. If an error occurs while retrieving the wallets, an appropriate error response is returned.", + "operationId": "getWallets", + "security": [ + { + "SessionAuth": [] + } + ], + "responses": { + "200": { + "description": "List of wallets retrieved successfully", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WalletResponseDto" + } + }, + "examples": { + "Success response": { + "value": [ + { + "walletId": "123e4567-e89b-12d3-a456-426614174000" + }, + { + "walletId": "223e4567-e89b-12d3-a456-426614174001" + } + ] + } + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "Unexpected server error": { + "value": { + "errorCode": "RESIDENT-APP-051", + "errorMessage": "An unexpected error occurred while retrieving user wallets" + } + } + } + } + } + } + } + } + }, + "/wallets/{walletId}/unlock": { + "post": { + "tags": [ + "Wallets" + ], + "summary": "Unlock a Wallet", + "description": "This API is secured using session-based authentication. Upon receiving a request, the session is first retrieved using the session ID extracted from the Cookie header to authenticate the user. Once authenticated, the user's ID is obtained from the session stored in Redis. Using this user ID along with the provided wallet ID and PIN, the corresponding wallet key is fetched and stored in the session. If successful then the API returns a response containing the wallet ID otherwise an appropriate error response is returned.", + "operationId": "unlockWallet", + "security": [ + { + "SessionAuth": [] + } + ], + "parameters": [ + { + "name": "walletId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier of the wallet to be unlocked" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WalletRequestDto" + } + } + } + }, + "responses": { + "200": { + "description": "Wallet unlocked successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WalletResponseDto" + }, + "examples": { + "Success response": { + "value": { + "walletId": "123e4567-e89b-12d3-a456-426614174000" + } + } + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "Unexpected server error": { + "value": { + "errorCode": "RESIDENT-APP-051", + "errorMessage": "An unexpected error occurred while retrieving the wallet details" + } + } + } + } + } + } + } + } } }, "components": { @@ -3068,8 +3287,8 @@ "SessionAuth": { "type": "apiKey", "in": "cookie", - "name": "JSESSIONID", - "description": "Session ID for authentication, provided within the cookie (e.g., JSESSIONID=" + "name": "SESSION", + "description": "Session-based authentication using a session ID stored in the cookie. The client must send the 'SESSION' cookie (e.g., SESSION=) with each request." } }, "schemas": { @@ -3117,6 +3336,32 @@ } } }, + "WalletRequestDto": { + "type": "object", + "properties": { + "walletName": { + "type": "string", + "description": "Name of the Wallet" + }, + "walletPin": { + "type": "string", + "description": "PIN used to unlock the Wallet" + } + }, + "required": [ + "walletPin", + "walletName" + ] + }, + "WalletResponseDto": { + "type": "object", + "properties": { + "walletId": { + "type": "string", + "description": "Unique identifier of the Wallet" + } + } + }, "IssuerConfigurationSuccessResponse": { "type": "object", "properties": { @@ -3200,13 +3445,16 @@ "type": "object", "properties": { "errorCode": { - "type": "string" + "type": "string", + "description": "It represents the type or category of the error" }, "errorMessage": { - "type": "string" + "type": "string", + "description": "A human-readable message providing more details about the error" } } }, + "AppVIDGenerateRequestDTO": { "type": "object", "properties": { From 1b0bf72da6c2f36ead86e626f73b22bc928a4553 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Wed, 9 Apr 2025 13:24:53 +0530 Subject: [PATCH 509/860] injiweb-1461 added the docker setup as per login feature Signed-off-by: Gurpreet41082 --- .../config/mimoto-default.properties | 69 ++++++++- docker-compose/docker-compose.yml | 31 +++- docker-compose/mimoto_init.sql | 142 ++++++++++++++++++ pom.xml | 2 +- .../resources/application-local.properties | 6 +- 5 files changed, 242 insertions(+), 8 deletions(-) create mode 100644 docker-compose/mimoto_init.sql diff --git a/docker-compose/config/mimoto-default.properties b/docker-compose/config/mimoto-default.properties index ed6f73cf4..ea730c218 100644 --- a/docker-compose/config/mimoto-default.properties +++ b/docker-compose/config/mimoto-default.properties @@ -193,13 +193,47 @@ mosip.kernel.pin.length=6 #length of the token id mosip.kernel.tokenid.length=36 +#------------------------------------ Key-manager specific properties -------------------------------------------------- + +#Crypto asymmetric algorithm name +mosip.kernel.crypto.asymmetric-algorithm-name=RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING +#Crypto symmetric algorithm name +mosip.kernel.crypto.symmetric-algorithm-name=AES/GCM/NoPadding +#Encrypted data and encrypted symmetric key separator +mosip.kernel.data-key-splitter=#KEY_SPLITTER# +#GCM tag length +mosip.kernel.crypto.gcm-tag-length=128 +#Hash algo name +mosip.kernel.crypto.hash-algorithm-name=PBKDF2WithHmacSHA512 +#Symmtric key length used in hash +mosip.kernel.crypto.hash-symmetric-key-length=256 +#No of iterations in hash +mosip.kernel.crypto.hash-iteration=10000 +mosip.kernel.keygenerator.symmetric-algorithm-name=AES +mosip.kernel.keygenerator.symmetric-key-length=256 +#Asymmetric algorithm key length +mosip.kernel.keygenerator.asymmetric-key-length=2048 +#Keygenerator asymmetric algorithm name +mosip.kernel.keygenerator.asymmetric-algorithm-name=RSA +mosip.kernel.keymanager.hsm.config-path=${SPRING_CONFIG_LOCATION}certs/oidckeystore.p12 +mosip.kernel.keymanager.hsm.keystore-type=PKCS12 +mosip.kernel.keymanager.hsm.keystore-pass=${oidc_p12_password} + + +mosip.kernel.keymanager.certificate.default.common-name=www.example.com +mosip.kernel.keymanager.certificate.default.organizational-unit=EXAMPLE-CENTER +mosip.kernel.keymanager.certificate.default.organization=IIITB +mosip.kernel.keymanager.certificate.default.location=BANGALORE +mosip.kernel.keymanager.certificate.default.state=KA +mosip.kernel.keymanager.certificate.default.country=IN + # log level logging.level.root=WARN logging.level.io.mosip=INFO # logging.level.io.mosip.kernel.auth.defaultadapter.filter=INFO logging.level.io.mosip.kernel.auth.defaultadapter=DEBUG logging.level.org.springframework.http.client=DEBUG -logging.level.io.mosip.residentapp=INFO +logging.level.io.mosip.mimoto=INFO logging.level.reactor.netty.http.client=INFO # tomcat access logs server.tomcat.accesslog.enabled=true @@ -215,7 +249,7 @@ registration.processor.unMaskedUin.length=5 IDSchema.Version=1.0 registration.processor.identityjson=identity-mapping.json registration.processor.demographic.identity=identity -CREATEDATASHARE=${mosip.datashare.url}/v1/datashare/create +CREATEDATASHARE=${mosip.injiweb.datashare.url}/v1/datashare/create DECRYPTPINBASSED=${mosip.kernel.keymanager.url}/v1/keymanager/decryptWithPin @@ -274,6 +308,8 @@ mosip.inji.web.redirect.url=${mosip.inji.web.url}/authorize mosip.inji.qr.data.size.limit=10000 mosip.inji.qr.code.height=650 mosip.inji.qr.code.width=650 +mosip.inji.user.wallet.pin.validation.regex=^\\d{4,6}$ +mosip.inji.user.wallet.name.validation.regex=^[A-Za-z0-9 _.-]{1,50}$ #OVP Config mosip.inji.ovp.qrdata.pattern=INJI_OVP://http://localhost:${server.port}/v1/mimoto/authorize?response_type=vp_token&resource=%s&presentation_definition=%s @@ -296,4 +332,31 @@ cache.issuers-config.expiry-time-in-min = 60 # Cache expiry time in minutes for the authentication server's well-known endpoint response. cache.credential-issuer.authserver-wellknown.expiry-time-in-min = 60 # Default cache expiry time in minutes for others cache types -cache.default.expiry-time-in-min = 60 \ No newline at end of file +cache.default.expiry-time-in-min = 60 + +#oauth2 config +spring.security.oauth2.client.registration.google.client-id=${GOOGLE_OAUTH_CLIENT_ID} +spring.security.oauth2.client.registration.google.client-secret=${GOOGLE_OAUTH_CLIENT_SECRET} +spring.security.oauth2.client.registration.google.scope=profile,email +spring.security.oauth2.client.registration.google.redirect-uri={baseUrl}/oauth2/callback/{registrationId} +spring.security.oauth2.client.registration.google.authorization-grant-type=authorization_code +spring.security.oauth2.client.registration.google.client-name=Google +spring.security.oauth2.client.provider.google.authorization-uri=https://accounts.google.com/o/oauth2/auth?prompt=select_account +spring.security.oauth2.client.provider.google.token-uri=https://oauth2.googleapis.com/token +spring.security.oauth2.client.provider.google.user-info-uri=https://www.googleapis.com/oauth2/v3/userinfo + +#database config +spring.datasource.url=${SPRING_DATASOURCE_URL} +spring.datasource.username=postgres +spring.datasource.password=postgres +spring.jpa.hibernate.ddl-auto=none +spring.jpa.show-sql=true +spring.datasource.driver-class-name=org.postgresql.Driver + +#Redis config +spring.session.store-type=redis +spring.data.redis.host=${SPRING_REDIS_HOST} +spring.data.redis.port=${SPRING_REDIS_PORT} +server.servlet.session.timeout=30m +spring.session.redis.namespace=injiweb:session: + diff --git a/docker-compose/docker-compose.yml b/docker-compose/docker-compose.yml index 1d97e1e5d..aa56e01ff 100644 --- a/docker-compose/docker-compose.yml +++ b/docker-compose/docker-compose.yml @@ -37,6 +37,24 @@ services: - ./config/mimoto-trusted-verifiers.json:/config/server/mimoto-trusted-verifiers.json - ./config/credential-template.html:/config/server/credential-template.html - ./nginx.conf:/etc/nginx/nginx.conf + + postgres: + image: 'postgres:latest' + environment: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + ports: + - "5432:5432" + volumes: + - postgres-data:/var/lib/postgresql/data + - ./mimoto_init.sql:/docker-entrypoint-initdb.d/mimoto_init.sql + + redis: + image: redis:alpine + ports: + - "6379:6379" + volumes: + - redis-data:/data mimoto-service: container_name: 'Mimoto-Service' image: 'mosipdev/mimoto:release-0.17.x' @@ -49,10 +67,21 @@ services: - SPRING_CONFIG_NAME=mimoto - SPRING_CONFIG_LOCATION=/home/mosip/ - oidc_p12_password=dummypassword + - SPRING_DATASOURCE_URL=jdbc:postgresql://postgres:5432/inji_mimoto # Add Postgres + - SPRING_REDIS_HOST=redis + - SPRING_REDIS_PORT=6379 + - GOOGLE_OAUTH_CLIENT_ID=clientId + - GOOGLE_OAUTH_CLIENT_SECRET=clientSecret volumes: - ./config/mimoto-default.properties:/home/mosip/mimoto-default.properties - ./config/mimoto-issuers-config.json:/home/mosip/mimoto-issuers-config.json - ./config/mimoto-trusted-verifiers.json:/home/mosip/mimoto-trusted-verifiers.json - ./certs/oidckeystore.p12:/home/mosip/certs/oidckeystore.p12 depends_on: - - nginx + - datashare + - postgres + - redis + +volumes: + postgres-data: + redis-data: \ No newline at end of file diff --git a/docker-compose/mimoto_init.sql b/docker-compose/mimoto_init.sql new file mode 100644 index 000000000..75c310b08 --- /dev/null +++ b/docker-compose/mimoto_init.sql @@ -0,0 +1,142 @@ +CREATE DATABASE inji_mimoto + ENCODING = 'UTF8' + LC_COLLATE = 'en_US.UTF-8' + LC_CTYPE = 'en_US.UTF-8' + TABLESPACE = pg_default + OWNER = postgres + TEMPLATE = template0; + +COMMENT ON DATABASE inji_mimoto IS 'mimoto related data is stored in this database'; + +\c inji_mimoto postgres + +DROP SCHEMA IF EXISTS mimoto CASCADE; +CREATE SCHEMA mimoto; +ALTER SCHEMA mimoto OWNER TO postgres; +ALTER DATABASE inji_mimoto SET search_path TO mimoto,pg_catalog,public; + +--- keymanager specific DB changes --- +CREATE TABLE mimoto.key_alias( + id character varying(36) NOT NULL, + app_id character varying(36) NOT NULL, + ref_id character varying(128), + key_gen_dtimes timestamp, + key_expire_dtimes timestamp, + status_code character varying(36), + lang_code character varying(3), + cr_by character varying(256) NOT NULL, + cr_dtimes timestamp NOT NULL, + upd_by character varying(256), + upd_dtimes timestamp, + is_deleted boolean DEFAULT FALSE, + del_dtimes timestamp, + cert_thumbprint character varying(100), + uni_ident character varying(50), + CONSTRAINT pk_keymals_id PRIMARY KEY (id), + CONSTRAINT uni_ident_const UNIQUE (uni_ident) +); + +CREATE TABLE mimoto.key_policy_def( + app_id character varying(36) NOT NULL, + key_validity_duration smallint, + is_active boolean NOT NULL, + pre_expire_days smallint, + access_allowed character varying(1024), + cr_by character varying(256) NOT NULL, + cr_dtimes timestamp NOT NULL, + upd_by character varying(256), + upd_dtimes timestamp, + is_deleted boolean DEFAULT FALSE, + del_dtimes timestamp, + CONSTRAINT pk_keypdef_id PRIMARY KEY (app_id) +); + +CREATE TABLE mimoto.key_store( + id character varying(36) NOT NULL, + master_key character varying(36) NOT NULL, + private_key character varying(2500) NOT NULL, + certificate_data character varying NOT NULL, + cr_by character varying(256) NOT NULL, + cr_dtimes timestamp NOT NULL, + upd_by character varying(256), + upd_dtimes timestamp, + is_deleted boolean DEFAULT FALSE, + del_dtimes timestamp, + CONSTRAINT pk_keystr_id PRIMARY KEY (id) +); + +CREATE TABLE mimoto.ca_cert_store( + cert_id character varying(36) NOT NULL, + cert_subject character varying(500) NOT NULL, + cert_issuer character varying(500) NOT NULL, + issuer_id character varying(36) NOT NULL, + cert_not_before timestamp, + cert_not_after timestamp, + crl_uri character varying(120), + cert_data character varying, + cert_thumbprint character varying(100), + cert_serial_no character varying(50), + partner_domain character varying(36), + cr_by character varying(256), + cr_dtimes timestamp, + upd_by character varying(256), + upd_dtimes timestamp, + is_deleted boolean DEFAULT FALSE, + del_dtimes timestamp, + ca_cert_type character varying(25), + CONSTRAINT pk_cacs_id PRIMARY KEY (cert_id), + CONSTRAINT cert_thumbprint_unique UNIQUE (cert_thumbprint,partner_domain) + +); + +CREATE TABLE IF NOT EXISTS user_metadata ( + id character varying(36) PRIMARY KEY, -- Primary key for the table + provider_subject_id character varying(255) NOT NULL, -- Unique identifier for the provider subject + identity_provider character varying(255) NOT NULL, -- Unique identifier for the identity provider + display_name TEXT NOT NULL, -- Display name of the user + profile_picture_url TEXT, -- URL of the user's profile picture + phone_number TEXT, -- Phone number of the user + email TEXT NOT NULL, -- Email of the user (Required field) + created_at TIMESTAMP DEFAULT now(), -- Timestamp of record creation (defaults to current time) + updated_at TIMESTAMP DEFAULT now() -- Timestamp of last update (defaults to current time) +); + +CREATE TABLE IF NOT EXISTS wallet ( + id character varying(36) PRIMARY KEY, -- Primary key for the table + user_id character varying(36) NOT NULL, -- Foreign key referencing user_metadata + wallet_key TEXT NOT NULL, -- Encrypted wallet key (retained here) + wallet_metadata JSONB NOT NULL, -- Metadata about the wallet, including encryption info + created_at TIMESTAMP DEFAULT now(), -- Timestamp of record creation (defaults to current time) + updated_at TIMESTAMP DEFAULT now(), -- Timestamp of last update (defaults to current time) + + CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES user_metadata (id) ON DELETE CASCADE +); + +CREATE TABLE IF NOT EXISTS verifiable_credentials ( + id character varying(36) PRIMARY KEY, -- Primary key for the table + wallet_id character varying(36) NOT NULL, -- Foreign key referring to the wallet table (wallet.id) + credential TEXT NOT NULL, -- Encrypted credential (using wallet_key for encryption/decryption) + credential_metadata JSONB NOT NULL, -- Metadata about the credential + created_at TIMESTAMP DEFAULT now(), -- Timestamp of record creation (defaults to current time) + updated_at TIMESTAMP DEFAULT now(), -- Timestamp of last update (defaults to current time) + + CONSTRAINT fk_wallet_id FOREIGN KEY (wallet_id) REFERENCES wallet (id) ON DELETE CASCADE +); + +CREATE TABLE IF NOT EXISTS proof_signing_key ( + id character varying(36) PRIMARY KEY, -- Primary key for the table + wallet_id character varying(36) NOT NULL, -- Foreign key referencing the wallet table + public_key TEXT NOT NULL, -- Public key for wallet + secret_key TEXT NOT NULL, -- Secret key, encrypted using proof_signing_key + key_metadata JSONB NOT NULL, -- Metadata about the public and private keys + created_at TIMESTAMP DEFAULT now(), -- Timestamp of record creation (defaults to current time) + updated_at TIMESTAMP DEFAULT now(), -- Timestamp of last update (defaults to current time) + + CONSTRAINT fk_wallet_id FOREIGN KEY (wallet_id) REFERENCES wallet (id) ON DELETE CASCADE +); + +INSERT INTO mimoto.key_policy_def(APP_ID,KEY_VALIDITY_DURATION,PRE_EXPIRE_DAYS,ACCESS_ALLOWED,IS_ACTIVE,CR_BY,CR_DTIMES) VALUES('ROOT', 2920, 1125, 'NA', true, 'mosipadmin', now()); +INSERT INTO mimoto.key_policy_def(APP_ID,KEY_VALIDITY_DURATION,PRE_EXPIRE_DAYS,ACCESS_ALLOWED,IS_ACTIVE,CR_BY,CR_DTIMES) VALUES('BASE', 1095, 60, 'NA', true, 'mosipadmin', now()); +INSERT INTO mimoto.key_policy_def(APP_ID,KEY_VALIDITY_DURATION,PRE_EXPIRE_DAYS,ACCESS_ALLOWED,IS_ACTIVE,CR_BY,CR_DTIMES) VALUES('MIMOTO', 1095, 60, 'NA', true, 'mosipadmin', now()); + + diff --git a/pom.xml b/pom.xml index 6be7ff73c..fc04b4e50 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 io.mosip mimoto - 0.17.0-SNAPSHOT + 0.18.0-SNAPSHOT mimoto https://github.com/mosip/mimoto Mobile server backend supporting Inji. diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 5b48845fd..0d0c51903 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -299,8 +299,8 @@ spring.datasource.driver-class-name=org.postgresql.Driver #Redis configuration spring.session.store-type=redis -spring.redis.host=localhost -spring.redis.port=6379 -spring.redis.password= +spring.data.redis.host=localhost +spring.data.redis.port=6379 +spring.data.redis.password= server.servlet.session.timeout=30m spring.session.redis.namespace=injiweb:session: \ No newline at end of file From d98f2a57e57f3751839d8d1079661eba16ad4e60 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Wed, 9 Apr 2025 13:28:24 +0530 Subject: [PATCH 510/860] updated readme file for docker compose Signed-off-by: Gurpreet41082 --- docker-compose/README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/docker-compose/README.md b/docker-compose/README.md index b19ca73e8..91375db26 100644 --- a/docker-compose/README.md +++ b/docker-compose/README.md @@ -23,11 +23,14 @@ This is the docker-compose setup to run mimoto which act as BFF for Inji mobile Refer [here](https://docs.mosip.io/inji/inji-mobile-wallet/customization-overview/credential_providers) to create client * Update client_id and client_alias as per onboarding in mimoto-issuers-config.json file. -5. Start the docker-compose file +6. Create google client credentials from https://console.cloud.google.com/ and replace + GOOGLE_OAUTH_CLIENT_ID and GOOGLE_OAUTH_CLIENT_SECRET properties in docker-compose.yml + +7. Start the docker-compose file > docker-compose up -7. Access Apis as +8. Access Apis as * http://localhost:8099/v1/mimoto/allProperties * http://localhost:8099/v1/mimoto/issuers * http://localhost:8099/v1/mimoto/issuers/StayProtected From 05cab9b04c798dab6fd32c83de6458af3d6bd0fa Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Wed, 9 Apr 2025 13:58:24 +0530 Subject: [PATCH 511/860] [INJIWEB-1418] fix the issue of DML_FLAG property not being read form deploy properties file and remove an invalid comment in verifiable credentials table Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- db_scripts/inji_mimoto/ddl/mimoto-verifiable_credentials.sql | 1 - db_scripts/inji_mimoto/deploy.sh | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/db_scripts/inji_mimoto/ddl/mimoto-verifiable_credentials.sql b/db_scripts/inji_mimoto/ddl/mimoto-verifiable_credentials.sql index 961c47dae..7535addd6 100644 --- a/db_scripts/inji_mimoto/ddl/mimoto-verifiable_credentials.sql +++ b/db_scripts/inji_mimoto/ddl/mimoto-verifiable_credentials.sql @@ -22,7 +22,6 @@ COMMENT ON TABLE verifiable_credentials IS 'Verifiable Credentials: Contains use COMMENT ON COLUMN verifiable_credentials.id IS 'Primary Key: Unique identifier for the verifiable credential record'; COMMENT ON COLUMN verifiable_credentials.wallet_id IS 'Wallet ID: Foreign key referring to the wallet table, linked to the user''s wallet'; COMMENT ON COLUMN verifiable_credentials.credential IS 'Credential: Encrypted credential using the wallet''s key'; -COMMENT ON COLUMN verifiable_credentials.credential_format IS 'Credential Format: Format of the credential (e.g., JSON, JWT)'; COMMENT ON COLUMN verifiable_credentials.credential_metadata IS 'Credential Metadata: Additional information about the credential (e.g., issuer, claims)'; COMMENT ON COLUMN verifiable_credentials.created_at IS 'Created At: The date and time when the credential was created'; COMMENT ON COLUMN verifiable_credentials.updated_at IS 'Updated At: The date and time when the credential was last updated'; diff --git a/db_scripts/inji_mimoto/deploy.sh b/db_scripts/inji_mimoto/deploy.sh index 2ea7f8274..e15eecbef 100755 --- a/db_scripts/inji_mimoto/deploy.sh +++ b/db_scripts/inji_mimoto/deploy.sh @@ -6,7 +6,7 @@ echo `date "+%m/%d/%Y %H:%M:%S"` ": $properties_file" if [ -f "$properties_file" ] then echo `date "+%m/%d/%Y %H:%M:%S"` ": Property file \"$properties_file\" found." - while IFS='=' read -r key value + while IFS='=' read -r key value || [ -n "$key" ] do key=$(echo $key | tr '.' '_') eval ${key}=\${value} From 2a0e57ba532f2b82c14e2fc7b6250c0ebe83016c Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Wed, 9 Apr 2025 17:56:08 +0530 Subject: [PATCH 512/860] [INJIWEB-1418] udpate the logic of checking whether credential is already downloaded or not for particular issuers to check it based on walletId, issuer and credentialType Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../mimoto/repository/WalletCredentialsRepository.java | 5 ++--- .../service/impl/WalletCredentialServiceImpl.java | 10 +++++----- .../mimoto/service/WalletCredentialServiceTest.java | 2 +- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/repository/WalletCredentialsRepository.java b/src/main/java/io/mosip/mimoto/repository/WalletCredentialsRepository.java index 4e6fa6ae1..342d44b48 100644 --- a/src/main/java/io/mosip/mimoto/repository/WalletCredentialsRepository.java +++ b/src/main/java/io/mosip/mimoto/repository/WalletCredentialsRepository.java @@ -13,7 +13,6 @@ public interface WalletCredentialsRepository extends JpaRepository findByWalletId(String walletId); Optional findById(String id); - @Query(value = "SELECT EXISTS (SELECT 1 FROM verifiable_credentials WHERE credential_metadata->>'issuerId' = :issuerId AND credential_metadata->>'credentialType' = :credentialType)", nativeQuery = true) - boolean existsByIssuerIdAndCredentialType(@Param("issuerId") String issuerId, @Param("credentialType") String credentialType); - + @Query(value = "SELECT EXISTS (SELECT 1 FROM verifiable_credentials WHERE credential_metadata->>'issuerId' = :issuerId AND credential_metadata->>'credentialType' = :credentialType AND wallet_id = :walletId)", nativeQuery = true) + boolean existsByIssuerIdAndCredentialTypeAndWalletId(@Param("issuerId") String issuerId, @Param("credentialType") String credentialType, @Param("walletId") String walletId); } diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java index 256111e8c..5a2e7cdd1 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java @@ -88,7 +88,7 @@ public VerifiableCredentialResponseDTO fetchAndStoreCredential( String issuerId, String credentialType, TokenResponseDTO response, String credentialValidity, String locale, String walletId, String base64EncodedWalletKey) throws Exception { - shouldInitiateDownloadRequest(issuerId,credentialType); + shouldInitiateDownloadRequest(issuerId, credentialType, walletId); IssuerDTO issuerDTO = issuersService.getIssuerDetails(issuerId); CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = getIssuerWellKnownResponse(issuerId); @@ -104,15 +104,15 @@ public VerifiableCredentialResponseDTO fetchAndStoreCredential( return WalletCredentialResponseDTOFactory.buildCredentialResponseDTO(issuerDTO, credentialsSupportedResponse, locale, savedCredential.getId()); } - private void shouldInitiateDownloadRequest(String issuerId, String credentialType) { + private void shouldInitiateDownloadRequest(String issuerId, String credentialType, String walletId) { Set issuers = Set.of("Mosip"); - if (issuers.contains(issuerId) && alreadyDownloaded(issuerId, credentialType)) { + if (issuers.contains(issuerId) && alreadyDownloaded(issuerId, credentialType, walletId)) { throw new RuntimeException("A credential is already downloaded for the selected Issuer and Credential Type. Only one is allowed, so download will not be initiated"); } } - private boolean alreadyDownloaded(String issuerId, String credentialType) { - return walletCredentialsRepository.existsByIssuerIdAndCredentialType(issuerId, credentialType); + private boolean alreadyDownloaded(String issuerId, String credentialType, String walletId) { + return walletCredentialsRepository.existsByIssuerIdAndCredentialTypeAndWalletId(issuerId, credentialType, walletId); } @Override diff --git a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java index b7ed91929..450657dfd 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java @@ -110,7 +110,7 @@ public void shouldFetchAndStoreCredentialSuccessfully() throws Exception { @Test public void shouldThrowExceptionWhenDuplicateCredentialExists() { - when(walletCredentialsRepository.existsByIssuerIdAndCredentialType("Mosip", credentialType)).thenReturn(true); + when(walletCredentialsRepository.existsByIssuerIdAndCredentialTypeAndWalletId("Mosip", credentialType, walletId)).thenReturn(true); RuntimeException exception = assertThrows(RuntimeException.class, () -> walletCredentialService.fetchAndStoreCredential("Mosip", credentialType, tokenResponse, "1", "en", walletId, base64Key) From f50c8e2e084f16740a1492ea1b8356eac1b45414 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Wed, 9 Apr 2025 18:35:09 +0530 Subject: [PATCH 513/860] Release17 update develop (#678) * Adding release 17 documentation (#670) * Adding release 17 documentation Signed-off-by: Gurpreet41082 * corrected the file in which cache properties are present Signed-off-by: Gurpreet41082 --------- Signed-off-by: Gurpreet41082 * [INJIMOB-3140] update logic in issuersValidConfig file to stop the validation as soon as an error is found for any issuer (#647) * [INJIMOB-3140] in issuersValiationConfig file throw the exception immediately if any validations fail for an issuer rather than proceeding further to check for other issuers Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIMOB-3140] update the validation logic in issuersValidationConfig file to accumulate all the issuers errors and then throw the error in the end Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIMOB-3140] add missing annotations in the issuerDTO file and write test cases for issuerValidationConfig file Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --------- Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * updated readme from release branch Signed-off-by: Gurpreet41082 --------- Signed-off-by: Gurpreet41082 Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Co-authored-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- docker-compose/README.md | 2 +- docs/InjiCustomTemplateFeature.md | 41 +++++++++++++++ docs/InjiIssuerConfigurationFeature.md | 71 ++++++++++++++++++++++++++ 3 files changed, 113 insertions(+), 1 deletion(-) create mode 100644 docs/InjiCustomTemplateFeature.md create mode 100644 docs/InjiIssuerConfigurationFeature.md diff --git a/docker-compose/README.md b/docker-compose/README.md index 91375db26..3783ba038 100644 --- a/docker-compose/README.md +++ b/docker-compose/README.md @@ -11,7 +11,7 @@ This is the docker-compose setup to run mimoto which act as BFF for Inji mobile ## How to run this setup? -1. Add Id providers as an issuer in mimoto-issuers-config.json +1. Add Id providers as issuers in mimoto-issuers-config.json. For each provider, include the token_endpoint property, which should be an HTTPS URL. This can either be an exposed domain or, for local setups, an ngrok URL if you're using mimoto for local testing with the Inji mobile wallet. 2. Add verifiers clientId and redirect Uris in mimoto-trusted-verifiers.json for Online Sharing diff --git a/docs/InjiCustomTemplateFeature.md b/docs/InjiCustomTemplateFeature.md new file mode 100644 index 000000000..14b4dbc25 --- /dev/null +++ b/docs/InjiCustomTemplateFeature.md @@ -0,0 +1,41 @@ +# Download Custom Credential Templates + +## Overview +This feature provides option to download a Verifiable Credential (VC) as a PDF using custom templates. +The templates is fetched from a configuration server. Code first tries to find a template using the pattern `issuerId-credentialType-template.html`. +If this specific template is not found, it will use `credential-template.html`. + +## Sequence Diagram + +```mermaid +sequenceDiagram +participant Client +participant CredentialsController +participant Utilities +participant ConfigServer + + Client->>+CredentialsController: POST /download + CredentialsController->>+Utilities: getCredentialSupportedTemplateString(issuerId, credentialType) + alt Template found in Config Server + Utilities->>+ConfigServer: Fetch template (issuerId-credentialType-template.html) + ConfigServer-->>-Utilities: Return custom template + else Template not found + Utilities->>+ConfigServer: Fetch default template (credential-template.html) + ConfigServer-->>-Utilities: Return default template + end + Utilities-->>-CredentialsController: Return template + CredentialsController->>CredentialsController: Generate PDF using template + CredentialsController-->>Client: Return PDF (200 OK) + CredentialsController->>+Utilities: handleExceptionWithErrorCode(exception, errorCode) + Utilities-->>-CredentialsController: Return error details + CredentialsController-->>-Client: ResponseEntity with error (400 Bad Request) +``` + +## Custom Template Samples + +Below are the links to the custom template samples that you can use: + +- [Stay Protected Insurance Credential Template](https://github.com/mosip/inji-config/blob/release-0.7.x/StayProtected-InsuranceCredential-template.html) +- [Mosip Verifiable Credential Template](https://github.com/mosip/inji-config/blob/release-0.7.x/Mosip-MosipVerifiableCredential-template.html) + +You can view and download the templates from the links above. Feel free to explore and customize them as per your requirements. \ No newline at end of file diff --git a/docs/InjiIssuerConfigurationFeature.md b/docs/InjiIssuerConfigurationFeature.md new file mode 100644 index 000000000..cac23429d --- /dev/null +++ b/docs/InjiIssuerConfigurationFeature.md @@ -0,0 +1,71 @@ +# Issuer Configuration Feature + +## Overview + +This feature offers an endpoint to fetch the configuration of a credential issuer. +The configuration is retrieved from both the issuer's well-known endpoint and the authorization server's well-known +endpoint. To enhance performance and minimize the load on external services, the results are cached using Caffeine. +This endpoint is invoked in inji-web when an issuer is selected, allowing its configurations to be retrieved. + +## Sequence Diagram + +The following sequence diagram illustrates the flow of the `getIssuerConfiguration` method in the `IssuersController` class, +including interactions with the `IssuersService`, `IssuerConfigUtil`, `Utilities` and caching mechanisms. + +```mermaid +sequenceDiagram + participant Client + participant IssuersController + participant IssuersService + participant IssuerConfigUtil + participant Cache + participant Utilities + + Client->>+IssuersController: GET /issuers/{issuer-id}/configuration + IssuersController->>+IssuersService: getIssuerConfiguration(issuerId) + alt Cache hit + IssuersService->>+Cache: Check cache for issuer configuration (Caffeine) + Cache-->>-IssuersService: Return cached configuration + else Cache miss + IssuersService->>+IssuersService: getIssuerDetails(issuerId) + IssuersService->>+IssuerConfigUtil: getIssuerWellknown(issuerDetails.getCredential_issuer_host()) + IssuerConfigUtil-->>-IssuersService: CredentialIssuerWellKnownResponse + IssuersService->>+IssuerConfigUtil: getAuthServerWellknown(credentialIssuerWellKnownResponse.getAuthorizationServers().get(0)) + IssuerConfigUtil-->>-IssuersService: AuthorizationServerWellKnownResponse + IssuersService->>+Cache: Store configuration in cache (expiry: 60 min) + end + IssuersService-->>-IssuersController: Return issuer configuration + IssuersController->>+Utilities: handleExceptionWithErrorCode(exception, errorCode) + Utilities-->>-IssuersController: Return error details + IssuersController-->>-Client: ResponseEntity with configuration or error +``` + +## Configuration + +### Cache Configuration + +The caching mechanism used in this project is Caffeine. Cache timeout properties are defined in the +`application-local.properties` file for the local setup, and in the `mimoto-default.properties` file for the environment setup. + +#### Cache Timeout Properties + +- `cache.credential-issuer.wellknown.expiry-time-in-min`: Cache expiry time in minutes for the issuer's well-known endpoint response. +- `cache.issuers-config.expiry-time-in-min`: Cache expiry time in minutes for issuers configurations read from a config file. +- `cache.credential-issuer.authserver-wellknown.expiry-time-in-min`: Cache expiry time in minutes for the authentication server's well-known endpoint response. +- `cache.default.expiry-time-in-min`: Default cache expiry time in minutes for other cache types. + +### Increasing Cache Time + +To increase the cache time, you can modify the properties in the `application-local.properties` or +`mimoto-default.properties` file. For example, to set the cache expiry time to 120 minutes, update the properties as follows: + +```properties +# Cache expiry time in minutes for the issuer's well-known endpoint response. +cache.credential-issuer.wellknown.expiry-time-in-min = 120 +# Cache expiry time in minutes for issuers configurations read from a config file. +cache.issuers-config.expiry-time-in-min = 120 +# Cache expiry time in minutes for the authentication server's well-known endpoint response. +cache.credential-issuer.authserver-wellknown.expiry-time-in-min = 120 +# Default cache expiry time in minutes for other cache types. +cache.default.expiry-time-in-min = 120 +``` \ No newline at end of file From b8b3473ef2449bac639301d8c8f39b63bd34845c Mon Sep 17 00:00:00 2001 From: Kamlesh Date: Thu, 10 Apr 2025 17:14:16 +0530 Subject: [PATCH 514/860] [INJIWEB-1505]: Added jti field Signed-off-by: Kamlesh --- src/main/java/io/mosip/mimoto/util/JoseUtil.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/io/mosip/mimoto/util/JoseUtil.java b/src/main/java/io/mosip/mimoto/util/JoseUtil.java index 1abee52c1..9e7c6fb59 100644 --- a/src/main/java/io/mosip/mimoto/util/JoseUtil.java +++ b/src/main/java/io/mosip/mimoto/util/JoseUtil.java @@ -156,6 +156,7 @@ public String getJWT(String clientId, String keyStorePath, String fileName, Stri .withAudience(audience) .withExpiresAt(expiresAt) .withIssuedAt(issuedAt) + .withClaim("jti", UUID.randomUUID().toString()) .sign(Algorithm.RSA256(null, privateKey)); } @@ -188,6 +189,7 @@ public String generateJwt(String audience, String clientId, String accessToken) payload.put("iss", clientId); payload.put("exp", expiresAt.toInstant().getEpochSecond()); payload.put("iat", issuedAt.toInstant().getEpochSecond()); + payload.put("jti", UUID.randomUUID().toString()); return Jwts.builder() .setHeader(header) From fba099fe14e4dae1a60649637ed26464495d2dd2 Mon Sep 17 00:00:00 2001 From: Praful Rakhade Date: Fri, 11 Apr 2025 13:09:43 +0530 Subject: [PATCH 515/860] [DSD-7833] removed mimoto-apitest publish-to-nexus job from push-trigger.yml Signed-off-by: Praful Rakhade --- .github/workflows/push-trigger.yml | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/.github/workflows/push-trigger.yml b/.github/workflows/push-trigger.yml index 3298202d0..87fe430f0 100644 --- a/.github/workflows/push-trigger.yml +++ b/.github/workflows/push-trigger.yml @@ -136,20 +136,6 @@ jobs: GPG_SECRET: ${{ secrets.GPG_SECRET }} SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }} - publish_to_nexus_apitest_mimoto: - if: "${{ !contains(github.ref, 'master') && github.event_name != 'pull_request' && github.event_name != 'release' && github.event_name != 'prerelease' && github.event_name != 'publish' }}" - needs: build-maven-apitest-mimoto - uses: mosip/kattu/.github/workflows/maven-publish-to-nexus.yml@master-java21 - with: - SERVICE_LOCATION: ./api-test - secrets: - OSSRH_USER: ${{ secrets.OSSRH_USER }} - OSSRH_SECRET: ${{ secrets.OSSRH_SECRET }} - OSSRH_URL: ${{ secrets.OSSRH_SNAPSHOT_URL }} - OSSRH_TOKEN: ${{ secrets.OSSRH_TOKEN }} - GPG_SECRET: ${{ secrets.GPG_SECRET }} - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }} - build-apitest-mimoto-local: needs: build-maven-apitest-mimoto runs-on: ubuntu-latest From d4d1e7dfaae9c9f3496552669e3b1c5402526ebf Mon Sep 17 00:00:00 2001 From: Rakshithb1 Date: Wed, 16 Apr 2025 17:35:29 +0530 Subject: [PATCH 516/860] [MOSIP-40792] removed Signed-off-by: Rakshithb1 --- deploy/README.md | 65 +-------- deploy/artifactory/README.md | 6 - deploy/artifactory/delete.sh | 30 ---- deploy/artifactory/install.sh | 35 ----- deploy/artifactory/restart.sh | 25 ---- deploy/config-server/README.md | 31 ---- deploy/config-server/delete.sh | 32 ----- deploy/config-server/install.sh | 38 ----- deploy/config-server/restart.sh | 25 ---- deploy/config-server/values.yaml | 118 ---------------- deploy/inji-stack-cm.yaml.sample | 22 --- deploy/object-store/README.md | 12 -- deploy/object-store/cred.sh | 59 -------- deploy/object-store/minio/README.md | 108 -------------- deploy/object-store/minio/chart/README.md | 1 - .../minio/chart/istio-addons/.helmignore | 23 --- .../minio/chart/istio-addons/Chart.yaml | 6 - .../chart/istio-addons/templates/gateway.yaml | 20 --- .../chart/istio-addons/templates/vs.yaml | 27 ---- .../minio/chart/istio-addons/values.yaml | 1 - deploy/object-store/minio/delete.sh | 31 ---- .../minio/images/minio-dashboard.png | Bin 73396 -> 0 bytes deploy/object-store/minio/install.sh | 35 ----- deploy/object-store/minio/operator/README.md | 132 ------------------ deploy/object-store/minio/run.sh | 13 -- deploy/object-store/minio/values.yaml | 9 -- deploy/object-store/s3/README.md | 14 -- partner-onboarder/copy_cm.sh | 4 +- partner-onboarder/copy_secrets.sh | 4 +- 29 files changed, 7 insertions(+), 919 deletions(-) delete mode 100644 deploy/artifactory/README.md delete mode 100644 deploy/artifactory/delete.sh delete mode 100644 deploy/artifactory/install.sh delete mode 100644 deploy/artifactory/restart.sh delete mode 100755 deploy/config-server/README.md delete mode 100755 deploy/config-server/delete.sh delete mode 100755 deploy/config-server/install.sh delete mode 100755 deploy/config-server/restart.sh delete mode 100755 deploy/config-server/values.yaml delete mode 100644 deploy/inji-stack-cm.yaml.sample delete mode 100644 deploy/object-store/README.md delete mode 100644 deploy/object-store/cred.sh delete mode 100644 deploy/object-store/minio/README.md delete mode 100644 deploy/object-store/minio/chart/README.md delete mode 100644 deploy/object-store/minio/chart/istio-addons/.helmignore delete mode 100644 deploy/object-store/minio/chart/istio-addons/Chart.yaml delete mode 100644 deploy/object-store/minio/chart/istio-addons/templates/gateway.yaml delete mode 100644 deploy/object-store/minio/chart/istio-addons/templates/vs.yaml delete mode 100644 deploy/object-store/minio/chart/istio-addons/values.yaml delete mode 100644 deploy/object-store/minio/delete.sh delete mode 100644 deploy/object-store/minio/images/minio-dashboard.png delete mode 100644 deploy/object-store/minio/install.sh delete mode 100644 deploy/object-store/minio/operator/README.md delete mode 100644 deploy/object-store/minio/run.sh delete mode 100644 deploy/object-store/minio/values.yaml delete mode 100644 deploy/object-store/s3/README.md diff --git a/deploy/README.md b/deploy/README.md index 7ca680e8b..812d74eb8 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -1,64 +1,5 @@ -# inji Deployment in Kubernetes Environment -## Overview -* This guide will walk you through the deployment process of the Esignet application. -* The setup involves creating - * Kubernetes cluster - * Setting up Nginx - * Installing Istio - * Configuring storage class - * Configuring the necessary dependent services - * Deploying inji services -## Deployment -### K8 cluster -* Kubernetes cluster should be ready with storage class and ingress configured properly. -* Below is the document containing steps to create and configure K8 cluster. - * __Onprem RKE CLuster__ : Create RKE K8 cluster using mentioned [steps](https://github.com/mosip/k8s-infra/tree/main/mosip/on-prem#mosip-k8s-cluster-setup-using-rke). - * __Persistence__ : Setup storage class as per [steps](https://github.com/mosip/k8s-infra/tree/main/mosip/on-prem#storage-classes). - * __Istio service mesh__ : Setup Istio service mesh using [steps](https://github.com/mosip/k8s-infra/tree/main/mosip/on-prem#istio-for-service-discovery-and-ingress). - * __Nginx__ : Setup and configure nginx as per [steps](https://github.com/mosip/k8s-infra/blob/main/mosip/on-prem/nginx). - * __Logging__ : Setup logging as per [steps](https://github.com/mosip/k8s-infra/tree/main/logging). - * __Monitoring__ : Setup monitoring consisting elasticsearch, kibana, grafana using [steps](https://github.com/mosip/k8s-infra/tree/main/monitoring). - * __AWS EKS cluster__ : Create AWS EKS cluster using mentioned [steps](https://github.com/mosip/k8s-infra/tree/main/mosip/aws#mosip-cluster-on-amazon-eks). - * __Persistence__ : Setup storage class as per [steps](https://github.com/mosip/k8s-infra/tree/main/mosip/aws#persistence). - * __Ingress and Loadbalancer__ : Setup nginx and configure NLB for exposing services outside using [steps](https://github.com/mosip/k8s-infra/tree/main/mosip/aws#ingress-and-load-balancer-lb). - * __Logging__ : Setup logging as per [steps](https://github.com/mosip/k8s-infra/tree/main/logging). - * __Monitoring__ : Setup monitoring consisting elasticsearch, kibana, grafana using [steps](https://github.com/mosip/k8s-infra/tree/main/monitoring). -### Install Pre-requisites -* `inji-stack-config` configmap: For inji K8's env, `inji-stack-config` configmap in `default` namespace contains Domain related information. Follow below steps to add domain details for `inji-stack-config` configmap. - * Copy `inji-stack-cm.yaml.sample` to `inji-stack-cm.yaml`. - * Update the domain names in `inji-stack-cm.yaml` correctly for your environment. - ```` - kubectl -n default apply -f inji-stack-cm.yaml - ```` -* Install minio (Skip this step if minio is already installed) - * Execute minio install script - ``` - cd object-store/minio - ./install.sh - ``` - * Create secrets for config server - ``` - cd .. - ./cred.sh - ``` -### Install artifactory - - ``` - cd ../artifactory - ./install.sh - ``` - -### Install config server -* If the config server is already installed, update the environment variables and composite repository in deployment accordingly. -* Otherwise, execute config-server install script - ``` - cd ../config-server - ./install.sh - ``` - * Review values.yaml and make sure git repository parameters are as per your installation. - -### Install Onboarder +# Install Onboarder * Execute Onboarder install script ``` cd ../partner-onboarder @@ -68,7 +9,7 @@ * Once the job is completed, log in to S3 / NFS and check the reports. There should not be any failures. * Note: If you are running the Onboarder in a separate INJI cluster, update the extraEnvVars section accordingly in [values.yaml](../partner-onboarder/values.yaml). -### Install mimoto +# Install mimoto * Execute mimoto install script ``` @@ -80,6 +21,6 @@ * The init-container will proceed to download the server's self-signed SSL certificate and mount it to the specified location within the container's Java keystore (i.e., `cacerts`) file. * This particular functionality caters to scenarios where the script needs to be employed on a server utilizing self-signed SSL certificates. -### For Onboarding new Issuer for VCI: +## For Onboarding new Issuer for VCI: - create a folder "certs" in the root and a file "oidckeystore.p12" inside certs and store the keys as different aliases for every issuers. for more details refer [here](https://docs.mosip.io/inji/inji-mobile-wallet/customization-overview/credential_providers) diff --git a/deploy/artifactory/README.md b/deploy/artifactory/README.md deleted file mode 100644 index bff9e01fd..000000000 --- a/deploy/artifactory/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# Artifactory - -## Install -```sh -./install.sh -``` diff --git a/deploy/artifactory/delete.sh b/deploy/artifactory/delete.sh deleted file mode 100644 index 5d5e368e3..000000000 --- a/deploy/artifactory/delete.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash -# Uninstalls artifactory -# Usage: ./delete.sh [kubeconfig] - -if [ $# -ge 1 ] ; then - export KUBECONFIG=$1 -fi - -function deleting_artifactory() { - NS=injiweb - while true; do - read -p "Are you sure you want to delete artifactory helm chart?(Y/n) " yn - if [ $yn = "Y" ] - then - helm -n $NS delete artifactory - break - else - break - fi - done - return 0 -} - -# set commands for error handling. -set -e -set -o errexit ## set -e : exit the script if any statement returns a non-true return value -set -o nounset ## set -u : exit the script if you try to use an uninitialised variable -set -o errtrace # trace ERR through 'time command' and other functions -set -o pipefail # trace ERR through pipes -deleting_artifactory # calling function diff --git a/deploy/artifactory/install.sh b/deploy/artifactory/install.sh deleted file mode 100644 index 2d925eadc..000000000 --- a/deploy/artifactory/install.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash -# Installs artifactory -## Usage: ./install.sh [kubeconfig] - -if [ $# -ge 1 ] ; then - export KUBECONFIG=$1 -fi - -NS=injiweb -CHART_VERSION=0.0.1-develop - -echo Create $NS namespace -kubectl create ns $NS - -function installing_artifactory() { - echo Istio label - kubectl label ns $NS istio-injection=enabled --overwrite - helm repo update - - echo Installing artifactory - helm -n $NS install artifactory mosip/artifactory --set image.repository=mosipid/artifactory-server --set image.tag=0.10.0-INJI --version $CHART_VERSION - - kubectl -n $NS get deploy -o name | xargs -n1 -t kubectl -n $NS rollout status - - echo Installed artifactory service - return 0 -} - -# set commands for error handling. -set -e -set -o errexit ## set -e : exit the script if any statement returns a non-true return value -set -o nounset ## set -u : exit the script if you try to use an uninitialised variable -set -o errtrace # trace ERR through 'time command' and other functions -set -o pipefail # trace ERR through pipes -installing_artifactory # calling function diff --git a/deploy/artifactory/restart.sh b/deploy/artifactory/restart.sh deleted file mode 100644 index f7066db38..000000000 --- a/deploy/artifactory/restart.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash -# Restart the artifactory service -## Usage: ./restart.sh [kubeconfig] - -if [ $# -ge 1 ] ; then - export KUBECONFIG=$1 -fi - -function Restarting_artifactory() { - NS=injiweb - kubectl -n $NS rollout restart deploy - - kubectl -n $NS get deploy -o name | xargs -n1 -t kubectl -n $NS rollout status - - echo Restarted Artifactory services - return 0 -} - -# set commands for error handling. -set -e -set -o errexit ## set -e : exit the script if any statement returns a non-true return value -set -o nounset ## set -u : exit the script if you try to use an uninitialised variable -set -o errtrace # trace ERR through 'time command' and other functions -set -o pipefail # trace ERR through pipes -Restarting_artifactory # calling function diff --git a/deploy/config-server/README.md b/deploy/config-server/README.md deleted file mode 100755 index ae13c7556..000000000 --- a/deploy/config-server/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# Config server - -## Introduction -Config server serves all properties required by inji modules. This must be installed before any other MOSIP modules. - -## Pre-requisites -* `conf-secrets` MOSIP module. - -## Install -* Review `values.yaml` and make sure git repository parameters are as per your installation. -* Install -```sh -./install.sh -``` - -## Delete -* To delete config-server. -```sh -./delete.sh -``` - -## Enable config-server to pull configurations from local git repository. - -Enable Config-server to Pull Configurations from Local Repository: -* While running the install script the user will be prompted to decide whether the config-server should pull configurations from a local repository (NFS). -* If the user choose to use local git repository then the user will be asked to provide the NFS path(Dir where local repository is cloned) and the NFS server IP. -* If the user choose to not to pull configurations from a local repository (NFS) then the configurations will be pulled from remote repository which is defined in values.yaml file. - -Note: -* Before choosing to pull configurations from a local repository (NFS) the user must clone the config-server repository manually into the nfs server where the configurations can be maintained. -* And checkout to the specific branch from where the configurations need to be taken. diff --git a/deploy/config-server/delete.sh b/deploy/config-server/delete.sh deleted file mode 100755 index 3a1c3d900..000000000 --- a/deploy/config-server/delete.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/bash -# Uninstalls config server -## Usage: ./delete.sh [kubeconfig] - -if [ $# -ge 1 ] ; then - export KUBECONFIG=$1 -fi - -function config_server() { - NS=config-server - while true; do - read -p "Are you sure you want to delete config-server helm charts?(Y/n) " yn - if [ $yn = "Y" ] - then - kubectl -n $NS delete configmap inji-stack-config s3 - kubectl -n $NS delete secret conf-secrets-various s3 - helm -n $NS delete config-server - break - else - break - fi - done - return 0 -} - -# set commands for error handling. -set -e -set -o errexit ## set -e : exit the script if any statement returns a non-true return value -set -o nounset ## set -u : exit the script if you try to use an uninitialised variable -set -o errtrace # trace ERR through 'time command' and other functions -set -o pipefail # trace ERR through pipes -config_server # calling function diff --git a/deploy/config-server/install.sh b/deploy/config-server/install.sh deleted file mode 100755 index f32b0e40c..000000000 --- a/deploy/config-server/install.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash -# Installs config-server -## Usage: ./install.sh [kubeconfig] - -if [ $# -ge 1 ] ; then - export KUBECONFIG=$1 -fi - -NS=config-server -CHART_VERSION=0.0.2-develop - - echo Create $NS namespace - kubectl create ns $NS - - # set commands for error handling. - set -e - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - set -o errtrace # trace ERR through 'time command' and other functions - set -o pipefail # trace ERR through pipes - - echo Istio label - kubectl label ns $NS istio-injection=enabled --overwrite - helm repo update - - echo Copy configmaps - COPY_UTIL=../copy_cm_func.sh - $COPY_UTIL configmap inji-stack-config default $NS - $COPY_UTIL configmap s3 s3 $NS - - echo Copy secrets - #$COPY_UTIL secret db-common-secrets postgres $NS - #$COPY_UTIL secret conf-secrets-various conf-secrets $NS - $COPY_UTIL secret s3 s3 $NS - - echo Installing config-server - helm -n $NS install config-server mosip/config-server -f values.yaml --wait --version $CHART_VERSION - echo Installed config-server. diff --git a/deploy/config-server/restart.sh b/deploy/config-server/restart.sh deleted file mode 100755 index 1c5d585a4..000000000 --- a/deploy/config-server/restart.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash -# Restart the config-server service -## Usage: ./restart.sh [kubeconfig] - -if [ $# -ge 1 ] ; then - export KUBECONFIG=$1 -fi - -function config_server() { - NS=config-server - kubectl -n $NS rollout restart deploy - - kubectl -n $NS get deploy -o name | xargs -n1 -t kubectl -n $NS rollout status - - echo Restarted config-server services - return 0 -} - -# set commands for error handling. -set -e -set -o errexit ## set -e : exit the script if any statement returns a non-true return value -set -o nounset ## set -u : exit the script if you try to use an uninitialised variable -set -o errtrace # trace ERR through 'time command' and other functions -set -o pipefail # trace ERR through pipes -config_server # calling function \ No newline at end of file diff --git a/deploy/config-server/values.yaml b/deploy/config-server/values.yaml deleted file mode 100755 index b6a0c3c51..000000000 --- a/deploy/config-server/values.yaml +++ /dev/null @@ -1,118 +0,0 @@ -gitRepo: - uri: https://github.com/mosip/inji-config - version: develop - ## Folders within the base repo where properties may be found. - searchFolders: "" - private: false - ## User name of user who has access to the private repo. Ignore for public repo - username: "" - token: "" - -spring_profiles: - enabled: true - spring_compositeRepos: - # Based on the user requiremnt the number of multiple sources from where configuration needs to be pulled can be updated below as mentioned. - - type: git - uri: https://github.com/mosip/inji-config - version: develop - spring_cloud_config_server_git_cloneOnStart: true - spring_cloud_config_server_git_force_pull: true - spring_cloud_config_server_git_refreshRate: 5 - spring_fail_on_composite_error: false - -envVariables: - - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_API_PUBLIC_HOST - valueFrom: - configMapKeyRef: - name: inji-stack-config - key: mosip-api-host - enabled: true - - - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_API_INTERNAL_HOST - valueFrom: - configMapKeyRef: - name: inji-stack-config - key: mosip-api-internal-host - enabled: true - - - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_PARTNER_CRYPTO_P12_PASSWORD - valueFrom: - secretKeyRef: - key: mosip-partner-crypto-p12-password - name: conf-secrets-various - enabled: false - - - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_DB_DBUSER_PASSWORD - valueFrom: - secretKeyRef: - name: db-common-secrets - key: db-dbuser-password - enabled: false - - - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_S3_ACCESSKEY - valueFrom: - configMapKeyRef: - name: s3 - key: s3-user-key - enabled: true - - - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_S3_REGION - valueFrom: - configMapKeyRef: - name: s3 - key: s3-region - enabled: true - - - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_S3_SECRETKEY - valueFrom: - secretKeyRef: - name: s3 - key: s3-user-secret - enabled: true - - - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_ESIGNET_HOST - valueFrom: - configMapKeyRef: - key: mosip-esignet-host - name: inji-stack-config - enabled: true - - - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_ESIGNET_INSURANCE_HOST - valueFrom: - configMapKeyRef: - key: mosip-esignet-insurance-host - name: inji-stack-config - enabled: false - - - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_INJIWEB_HOST - valueFrom: - configMapKeyRef: - key: mosip-injiweb-host - name: inji-stack-config - enabled: true - - - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_INJIVERIFY_HOST - valueFrom: - configMapKeyRef: - key: mosip-injiverify-host - name: inji-stack-config - enabled: true - -extraEnvVars: - - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MOSIP_PARTNER_CRYPTO_P12_PASSWORD - value: abc123 - - - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_MPARTNER_DEFAULT_MOBILE_SECRET - value: WXFvqo48eLCSBpRa - - - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_KEYCLOAK_INTERNAL_URL - value: http://keycloak.keycloak - - - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_KEYCLOAK_EXTERNAL_URL - value: https://iam.sanbox.mosip.net - - - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_KEYCLOAK_INTERNAL_HOST - value: keycloak.keycloak - - - name: SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_KEYCLOAK_EXTERNAL_HOST - value: iam.sanbox.mosip.net diff --git a/deploy/inji-stack-cm.yaml.sample b/deploy/inji-stack-cm.yaml.sample deleted file mode 100644 index 98a8bb48f..000000000 --- a/deploy/inji-stack-cm.yaml.sample +++ /dev/null @@ -1,22 +0,0 @@ -## The data here is of generic interest to modules in different namespaces hence this is marked as inji-stack-config. -## Replace your domain names here. -## mosip-api-host: External public access. (Typically required only in production rollouts). -## mosip-api-internal-host: Internal secure access over Wireguard. -## By default all domains and subdomains listed below point to mosip-api-internal-host. Modify this default behavior ONLY in production rollout as follows: -apiVersion: v1 -kind: ConfigMap -metadata: - name: inji-stack-config - namespace: default -data: - mosip-version: develop - installation-domain: sandbox.xyz.net - mosip-api-host: api.sandbox.xyz.net - mosip-iam-external-host: iam.sandbox.xyz.net - mosip-api-internal-host: api-internal.sandbox.xyz.net - mosip-esignet-host: esignet.sandbox.xyz.net - mosip-injiweb-host: injiweb.sandbox.xyz.net - mosip-injiverify-host: injiverify.sandbox.xyz.net - mosip-injicertify-host: injicertify.sandbox.xyz.net - mosip-postgres-host: postgres.sandbox.xyz.net - mosip-minio-host: minio.sandbox.mosip.net diff --git a/deploy/object-store/README.md b/deploy/object-store/README.md deleted file mode 100644 index 867369c90..000000000 --- a/deploy/object-store/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# Object store - -## Overview - -Inji uses S3 API compliant object store for storing VC. - -For on-prem, install [minio](minio/README.md) which is S3 API compliant object store. - -For AWS, create [S3 credentials](s3/README.md) - -## Configuration -Configuration parameters for object store are located in [application-default.properties](https://github.com/mosip/mosip-config/blob/develop3-v3/application-default.properties). The paramemters are automatically configured in this installation. However, in production you need to point to your object store installation. diff --git a/deploy/object-store/cred.sh b/deploy/object-store/cred.sh deleted file mode 100644 index 271deb58b..000000000 --- a/deploy/object-store/cred.sh +++ /dev/null @@ -1,59 +0,0 @@ -#!/bin/bash -# Creates configmap and secrets for S3/Minio -# Specific "" for region for minio local installation -## Usage: ./install.sh [kubeconfig] - -if [ $# -ge 3 ] ; then - export KUBECONFIG=$4 -fi - -NS=s3 - -echo Create $NS namespace -kubectl create ns $NS - -function installing_Cred() { - echo Istio label - kubectl label ns $NS istio-injection=enabled --overwrite - - echo Select the type of object-store to be used: - echo 1: For minio native using helm charts - echo 2: For any other s3 object store like AWS - while read -p "Please choose the correct option as mentioned above(1/2)" choice - do - if [ $choice = "1" ] - then - read -p "Please provide pretext value : " PRETEXT_VALUE - echo Creating secrets as per Minio native installation - USER=$(kubectl -n minio get secret minio -o jsonpath='{.data.root-user}' | base64 --decode) - PASS=$(kubectl -n minio get secret minio -o jsonpath='{.data.root-password}' | base64 --decode) - kubectl -n s3 create configmap s3 --from-literal=s3-user-key=$USER --from-literal=s3-region="" --dry-run=client -o yaml | kubectl apply -f - - kubectl -n s3 create secret generic s3 --from-literal=s3-user-secret=$PASS --from-literal=s3-pretext-value=$PRETEXT_VALUE --dry-run=client -o yaml | kubectl apply -f - - echo object-store secret and config map is set now. - break - elif [ $choice = "2" ] - then - read -p "Enter the S3 user key " USER - read -p "Enter the S3 secret key" PASS - read -p "Enter the S3 region" REGION - read -p "Please provide pretext value : " PRETEXT_VALUE - kubectl -n s3 create configmap s3 --from-literal=s3-user-key=$USER --from-literal=s3-region=$REGION --dry-run=client -o yaml | kubectl apply -f - - kubectl -n s3 create secret generic s3 --from-literal=s3-user-secret=$PASS --from-literal=s3-pretext-value=$PRETEXT_VALUE --dry-run=client -o yaml | kubectl apply -f - - echo object-store secret and config map is set now. - break - else - echo You entered wrong choice - kill -9 `ps --pid $$ -oppid=`; exit - break - fi - done - return 0 -} - -# set commands for error handling. -set -e -set -o errexit ## set -e : exit the script if any statement returns a non-true return value -set -o nounset ## set -u : exit the script if you try to use an uninitialised variable -set -o errtrace # trace ERR through 'time command' and other functions -set -o pipefail # trace ERR through pipes -installing_Cred # calling function diff --git a/deploy/object-store/minio/README.md b/deploy/object-store/minio/README.md deleted file mode 100644 index b67e5c41b..000000000 --- a/deploy/object-store/minio/README.md +++ /dev/null @@ -1,108 +0,0 @@ -# MinIO - -## Introduction -MinIO is a High Performance Object Storage released under GNU Affero General Public License v3.0. It is API compatible with Amazon S3 cloud storage service. MinIO is required for on-prem setups. If you are installing MOSIP on cloud you need explore cloud native options that support S3 API. On AWS, it would be S3. - -## Helm chart based install -Recommended for sandbox installations: -* Install helm chart -``` -./install.sh -``` -* Create secrets for config server -``` -cd .. -./cred.sh -``` -## Operator based installation -Recommended for multi-tenant production based installation. -See [MinIO Operator Based Installation Guide](operator/README.md). - -## Install MinIO client -To install the MinIO client, follow the procedure from [here](https://docs.min.io/docs/minio-client-complete-guide.html). - -## MinIO Clone -* Set `alias` for MinIO servers. - ``` - mc alias set : --api S3v2 ( old version ) - mc alias set : --api S3v2 ( latest versions ) - mc alias ls - ``` -* Clone MINIO buckets from one MinIO server to another MinIO server. - ``` - mc mirror - ``` - -## Backup and restore MinIO - -* Set `alias` for MinIO servers using mc command line tool. -* The below commands is creating an alias named "" for a MinIO server located at ":" with the username "" and password "", using the S3 API version 2. - -### Note: -* Make sure to replace , :, and with your original values before exicuting the below commands. -* --api S3v2: This specifies the API version being used. In this case, it's specifying version 2 of the S3 API, which is used for interacting with object storage systems like MinIO. -* Set `alias` for MinIO servers. - - - ``` - mc alias set : --api S3v4 ( old version ) - mc alias set : --api S3v4 ( latest versions ) - mc alias ls - ``` - -#### Backup -* Create a backup directory. - ``` - mkdir -p - ``` -* Backup all MinIO buckets to `` directory. - ``` - mc mirror - ``` - -#### Note: -* the above mirror command is used to initiate the mirroring process. -* So, essentially, when you execute the above command, it will start mirroring data from the source location specified by to the destination location specified by . -* do update your and with the alias name you've set and then run the command. - -#### Restore - -* Set `MINIO_SERVER` and `MINIO_BACKUP_DIR`. - ``` - MINIO_SERVER= - MINIO_BACKUP_DIR= - ``` - -* Run below command to restore MinIO buckets from ``. - ``` - for bucket in $( ls $MINIO_BACKUP_DIR ); do - echo $MINIO_SERVER/$bucket; - mc mb --ignore-existing $MINIO_SERVER/$bucket; - mc mirror $MINIO_BACKUP_DIR/$bucket $MINIO_SERVER/$bucket; - done - ``` - -#### Connecting Minio to Prometheus -Prometheus needs to scrape data from minio buckets for continuous monitoring. - -Service monitor should be enabled in values.yaml script for prometheus to scrape the data from minio. - -Then the minio dashboard should display the metrics that are scraped by prometheus. - -The following environmental variables needs to be mapped for the same. - -```MINIO_PROMETHEUS_URL - http://rancher-monitoring-prometheus.cattle-monitoring-system:9090``` - -```MINIO_PROMETHEUS_JOB_ID - minio``` - -![minio-dashboard.png](images/minio-dashboard.png) - -The above mentioned changes are taken care in values.yaml script. - - -## Troubleshoot -* If you encounter the following error while attempting to access MinIO. - ``` - mc: Unable to list folder. The request signature we calculated does not match the signature you provided. Check your key and signing method - ``` - Then, ensure that you provide the appropriate API version, either `--api S3v2` or `--api S3v4`, when executing the `mc set alias` command. diff --git a/deploy/object-store/minio/chart/README.md b/deploy/object-store/minio/chart/README.md deleted file mode 100644 index e19bd815f..000000000 --- a/deploy/object-store/minio/chart/README.md +++ /dev/null @@ -1 +0,0 @@ -Local helm chart to install istio components. diff --git a/deploy/object-store/minio/chart/istio-addons/.helmignore b/deploy/object-store/minio/chart/istio-addons/.helmignore deleted file mode 100644 index 0e8a0eb36..000000000 --- a/deploy/object-store/minio/chart/istio-addons/.helmignore +++ /dev/null @@ -1,23 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*.orig -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ diff --git a/deploy/object-store/minio/chart/istio-addons/Chart.yaml b/deploy/object-store/minio/chart/istio-addons/Chart.yaml deleted file mode 100644 index e8e3605d5..000000000 --- a/deploy/object-store/minio/chart/istio-addons/Chart.yaml +++ /dev/null @@ -1,6 +0,0 @@ -apiVersion: v2 -name: istio-addons -description: A Helm chart for MOSIP minio istio -type: application -version: 1.2.0 -appVersion: "1.2.0" diff --git a/deploy/object-store/minio/chart/istio-addons/templates/gateway.yaml b/deploy/object-store/minio/chart/istio-addons/templates/gateway.yaml deleted file mode 100644 index 9f54e28f7..000000000 --- a/deploy/object-store/minio/chart/istio-addons/templates/gateway.yaml +++ /dev/null @@ -1,20 +0,0 @@ -apiVersion: networking.istio.io/v1alpha3 -kind: Gateway -metadata: - name: minio -spec: - selector: - istio: ingressgateway-internal - servers: - - port: - number: 80 - name: http - protocol: HTTP - hosts: - - {{ .Values.externalHost }} - - port: - name: minio - number: 9000 - protocol: HTTP - hosts: - - {{ .Values.externalHost }} diff --git a/deploy/object-store/minio/chart/istio-addons/templates/vs.yaml b/deploy/object-store/minio/chart/istio-addons/templates/vs.yaml deleted file mode 100644 index 157a1fe5b..000000000 --- a/deploy/object-store/minio/chart/istio-addons/templates/vs.yaml +++ /dev/null @@ -1,27 +0,0 @@ -apiVersion: networking.istio.io/v1alpha3 -kind: VirtualService -metadata: - name: minio -spec: - hosts: - - "*" - gateways: - - minio - http: - - name: minio - match: - - port: 9000 - route: - - destination: - host: minio - port: - number: 9000 - - name: http - match: - - uri: - prefix: "/" - route: - - destination: - host: minio - port: - number: 9001 diff --git a/deploy/object-store/minio/chart/istio-addons/values.yaml b/deploy/object-store/minio/chart/istio-addons/values.yaml deleted file mode 100644 index 6607d06fe..000000000 --- a/deploy/object-store/minio/chart/istio-addons/values.yaml +++ /dev/null @@ -1 +0,0 @@ -externalHost: minio.sandbox.xyz.net diff --git a/deploy/object-store/minio/delete.sh b/deploy/object-store/minio/delete.sh deleted file mode 100644 index a8176bf47..000000000 --- a/deploy/object-store/minio/delete.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash -# Uninstalls Minio running inside the cluster -## Usage: ./delete.sh [kubeconfig] - -if [ $# -ge 1 ] ; then - export KUBECONFIG=$1 -fi - -function deleting_Minio() { - NS=minio - while true; do - read -p "Are you sure you want to delete minio helm charts? Note: this will erase your object store data.(Y/n) " yn - if [ $yn = "Y" ] - then - helm -n $NS delete minio - helm -n $NS delete istio-addons - break - else - break - fi - done - return 0 -} - -# set commands for error handling. -set -e -set -o errexit ## set -e : exit the script if any statement returns a non-true return value -set -o nounset ## set -u : exit the script if you try to use an uninitialised variable -set -o errtrace # trace ERR through 'time command' and other functions -set -o pipefail # trace ERR through pipes -deleting_Minio # calling function diff --git a/deploy/object-store/minio/images/minio-dashboard.png b/deploy/object-store/minio/images/minio-dashboard.png deleted file mode 100644 index d55566ff1bfa40af94da6176b657a43e68a834a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73396 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

iuWdK7r~NiUyPNzn@k%3 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 diff --git a/deploy/object-store/minio/install.sh b/deploy/object-store/minio/install.sh deleted file mode 100644 index 30b5632f8..000000000 --- a/deploy/object-store/minio/install.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash -# Installs MinIO using helm chart inside MOSIP cluster -## Usage: ./install.sh [kubeconfig] - -if [ $# -ge 1 ] ; then - export KUBECONFIG=$1 -fi - -NS=minio - -echo Create $NS namespace -kubectl create ns $NS -kubectl label ns $NS istio-injection=enabled --overwrite - -function installing_minio() { - echo Installing minio - helm -n minio install minio mosip/minio -f values.yaml --version 10.1.6 - - echo Installing gateways and virtualservice - EXTERNAL_HOST=$(kubectl get cm inji-stack-config -o jsonpath={.data.mosip-minio-host}) - - echo host: $EXTERNAL_HOST - helm -n $NS install istio-addons chart/istio-addons --set externalHost=$EXTERNAL_HOST - - echo Helm installed. Next step is to execute the cred.sh to update secrets in s3 namespace - return 0 -} - -# set commands for error handling. -set -e -set -o errexit ## set -e : exit the script if any statement returns a non-true return value -set -o nounset ## set -u : exit the script if you try to use an uninitialised variable -set -o errtrace # trace ERR through 'time command' and other functions -set -o pipefail # trace ERR through pipes -installing_minio # calling function diff --git a/deploy/object-store/minio/operator/README.md b/deploy/object-store/minio/operator/README.md deleted file mode 100644 index 9587adc0a..000000000 --- a/deploy/object-store/minio/operator/README.md +++ /dev/null @@ -1,132 +0,0 @@ -# MinIO Operator Based Installation Guide - -## Introduction -MinIO is a High Performance Object Storage released under GNU Affero General Public License v3.0. It is API compatible with Amazon S3 cloud storage service. MinIO is required for on-prem setups. If you are installing MOSIP on cloud you need explore cloud native options that support S3 API. On AWS, it would be S3. - -For production deployments it is recommended that MinIO Operator is used to deploy MinIO on Kubernetes. MinIO Operator supports deploying MinIO Tenants onto private and public cloud infrastructures ("Hybrid" Cloud). - -## Prerequisites -- Kubernetes version 1.19.0 or later. - -- Cluster contains a [namespace](https://github.com/minio/operator/blob/master/README.md#minio-tenant-namespace) for - the MinIO Tenant. - -- Cluster contains a [`StorageClass`](https://github.com/minio/operator/blob/master/README.md#default-storage-class) - for the MinIO Tenant Persistent Volumes (`PV`). The `StorageClass` *must* have `volumeBindingMode: WaitForFirstConsumer` - -- [Kubernetes `krew`](https://github.com/kubernetes-sigs/krew) - plugin manager available on the client machine. See the [`krew` installation documentation](https://krew.sigs.k8s.io/docs/user-guide/setup/install/). - -- Minio Operator will deploy CertifiateSigningRequest (CSRs) and k8s needs to issue certificates for these CSRs. On an on-prem setup, if using RKE for k8s, to get k8s to issue CSRs, add the following in `cluster.yaml`. - ``` - services: - kube-controller: - extra_args: - cluster-signing-cert-file: "/etc/kubernetes/ssl/kube-ca.pem" - cluster-signing-key-file: "/etc/kubernetes/ssl/kube-ca-key.pem" - ``` - Then run `rke up`, to sync these changes. - -## Deploy MinIO Cluster - -### Install the MinIO Operator - -Run the following command to install the MinIO Operator and Plugin using `krew`: - -```sh - kubectl krew update - kubectl krew install minio -``` - -Run the following command to initialize the Operator: - -```sh -kubectl minio init -``` - -### Create a New Tenant - -The following `kubectl minio` command creates a MinIO Tenant with 1 node, 4 volumes, and a total capacity of 8Gi. This configuration requires -*at least* 4 [Persistent Volumes](https://github.com/minio/operator#Local-Persistent-Volumes). - -```sh - kubectl minio tenant create minio-tenant-1 \ - --servers 1 \ - --volumes 4 \ - --capacity 8Gi \ - --namespace minio-tenant-1 \ - --storage-class local-storage -``` - -The above command, by default, deploys with TLS enabled. To change this behaviour here is what needs to be done: -- Write the tenant to a file without actually deploying it. Like the following -```sh - kubectl minio tenant create minio-tenant-1 \ - --servers 1 \ - --volumes 4 \ - --capacity 8Gi \ - --namespace minio-tenant-1 \ - --storage-class local-storage \ - -o > minio-tenant-1.yaml -``` -- Now change the following line in the tenant file. -``` -requestAutoCert: false -``` -- Then deploy the tenant. -```sh -kubectl apply -f minio-tenant-1.yaml -``` - -### Connect to the Tenant - -MinIO outputs credentials for connecting to the MinIO Tenant as part of the creation -process: - -```sh - -Tenant 'minio-tenant-1' created in 'minio-tenant-1' Namespace - Username: admin - Password: dbc978c2-bfbe-41bf-9dc6-699c76bafcd0 -+-------------+------------------------+------------------+--------------+-----------------+ -| APPLICATION | SERVICE NAME | NAMESPACE | SERVICE TYPE | SERVICE PORT(S) | -+-------------+------------------------+------------------+--------------+-----------------+ -| MinIO | minio | minio-tenant-1 | ClusterIP | 443 | -| Console | minio-tenant-1-console | minio-tenant-1 | ClusterIP | 9090,9443 | -+-------------+------------------------+------------------+--------------+-----------------+ - -``` - -Copy the credentials to a secure location, such as a password protected key manager. -MinIO does *not* display these credentials again. - -You can use the `kubectl port-forward` command to temporarily forward traffic from the local host to the MinIO Tenant. - -- The `minio` service provides access to MinIO Object Storage operations. Port forward to localhost -port 9000 using the below command: - - -```sh - kubectl port-forward svc/minio 9000:443 -n minio-tenant-1 -``` - -- The `minio-tenant-1-console` service provides access to the MinIO Console. The - MinIO Console supports GUI administration of the MinIO Tenant. Port forward to localhost -port 9001 using the below command: - -```sh - kubectl port-forward svc/minio-tenant-1-console 9001:9443 -n minio-tenant-1 -``` - -For production workloads and applications *external* to the Kubernetes cluster, you must configure -[Ingress](https://kubernetes.io/docs/concepts/services-networking/ingress/) or a -[Load Balancer](https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer) to -expose the MinIO Tenant services. - - -## Create configmap and secret -Run the script and pass the access key and secret. For region specify "". -```sh -cd ../ -./cred.sh -``` diff --git a/deploy/object-store/minio/run.sh b/deploy/object-store/minio/run.sh deleted file mode 100644 index bdffcc837..000000000 --- a/deploy/object-store/minio/run.sh +++ /dev/null @@ -1,13 +0,0 @@ -# set commands for error handling. -set -e -set -o errexit ## set -e : exit the script if any statement returns a non-true return value -set -o nounset ## set -u : exit the script if you try to use an uninitialised variable -set -o errtrace # trace ERR through 'time command' and other functions -set -o pipefail # trace ERR through pipes - -kubectl minio tenant create minio-tenant-1 \ - --servers 1 \ - --volumes 4 \ - --capacity 8Gi \ - --namespace minio-tenant-1 \ - --storage-class gp2 diff --git a/deploy/object-store/minio/values.yaml b/deploy/object-store/minio/values.yaml deleted file mode 100644 index 7dbf1a22c..000000000 --- a/deploy/object-store/minio/values.yaml +++ /dev/null @@ -1,9 +0,0 @@ -metrics: - serviceMonitor: - enabled: true - -extraEnvVars: - - name: MINIO_PROMETHEUS_URL - value: "http://rancher-monitoring-prometheus.cattle-monitoring-system:9090" - - name: MINIO_PROMETHEUS_JOB_ID - value: "minio" diff --git a/deploy/object-store/s3/README.md b/deploy/object-store/s3/README.md deleted file mode 100644 index 0a125f1b8..000000000 --- a/deploy/object-store/s3/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# S3 Credentials - -## Credentials -1. Create a new IAM user on AWS, say, "mosips3user" -1. Deny this user Admin Console access -1. Create a user group, say, 'S3Group' with full access to S3. -1. Assign the group to the user - -## Secrets -1. Create configmap and secrets by running this script: -```sh -cd ../ -./cred.sh -``` diff --git a/partner-onboarder/copy_cm.sh b/partner-onboarder/copy_cm.sh index 8c2072dd8..ebf540243 100755 --- a/partner-onboarder/copy_cm.sh +++ b/partner-onboarder/copy_cm.sh @@ -6,5 +6,5 @@ COPY_UTIL=./copy_cm_func.sh DST_NS=injiweb $COPY_UTIL configmap inji-stack-config default $DST_NS -$COPY_UTIL configmap keycloak-env-vars keycloak $DST_NS || { echo "Ignore the error if Keycloak values have been added to values.yaml."; true; } -$COPY_UTIL configmap keycloak-host keycloak $DST_NS || { echo "Ignore the error if Keycloak values have been added to values.yaml."; true; } +$COPY_UTIL configmap keycloak-env-vars keycloak $DST_NS || { echo "Ignore the error if Keycloak is deployed externally and details of the same have been added to values.yaml."; true; } +$COPY_UTIL configmap keycloak-host keycloak $DST_NS || { echo "Ignore the error if Keycloak is deployed externally and details of the same have been added to values.yaml."; true; } diff --git a/partner-onboarder/copy_secrets.sh b/partner-onboarder/copy_secrets.sh index bb7a35913..c9b1185ee 100755 --- a/partner-onboarder/copy_secrets.sh +++ b/partner-onboarder/copy_secrets.sh @@ -6,5 +6,5 @@ COPY_UTIL=./copy_cm_func.sh DST_NS=injiweb #$COPY_UTIL secret s3 s3 $DST_NS -$COPY_UTIL secret keycloak keycloak $DST_NS || { echo "Ignore the error if Keycloak values have been added to values.yaml."; true; } -$COPY_UTIL secret keycloak-client-secrets keycloak $DST_NS || { echo "Ignore the error if Keycloak values have been added to values.yaml."; true; } +$COPY_UTIL secret keycloak keycloak $DST_NS || { echo "Ignore the error if Keycloak is deployed externally and details of the same have been added to values.yaml."; true; } +$COPY_UTIL secret keycloak-client-secrets keycloak $DST_NS || { echo "Ignore the error if Keycloak is deployed externally and details of the same have been added to values.yaml."; true; } From 913905ee3b86827bdaa3bee40ebfe836f199854d Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Wed, 16 Apr 2025 19:33:22 +0530 Subject: [PATCH 517/860] Allowing actuator endpoint to by pass the authentication Signed-off-by: Gurpreet41082 --- src/main/java/io/mosip/mimoto/config/Config.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/mosip/mimoto/config/Config.java b/src/main/java/io/mosip/mimoto/config/Config.java index 9b563db16..6dc29a6d0 100644 --- a/src/main/java/io/mosip/mimoto/config/Config.java +++ b/src/main/java/io/mosip/mimoto/config/Config.java @@ -148,7 +148,7 @@ private void setupOauth2Config(HttpSecurity http, SessionRepository sessionRepos ) .authorizeHttpRequests(authz -> authz // make existing endpoints public - .requestMatchers("/safetynet/**", "/allProperties", "/credentials/**", + .requestMatchers("/safetynet/**", "/actuator/**", "/allProperties", "/credentials/**", "/credentialshare/**","/binding-otp","/wallet-binding","/get-token/**", "/issuers","/issuers/**","/authorize","/req/otp","/vid","/req/auth/**", "/req/individualId/otp","/aid/get-individual-id","/session/status", From 497b5eaeb59575fd2bcd4968da9281eb71498b2c Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Thu, 17 Apr 2025 10:03:21 +0530 Subject: [PATCH 518/860] Classnotfound exception in pod Signed-off-by: Gurpreet41082 --- pom.xml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index fc04b4e50..82f86e4fe 100644 --- a/pom.xml +++ b/pom.xml @@ -490,12 +490,17 @@ postgresql ${postgresql.version} - + io.mosip.kernel kernel-keymanager-service 1.3.0-beta.2 lib + + io.vertx + vertx-web + 3.9.13 + From bce15f154e275df535a4cdaad3f0d5c9ef271a38 Mon Sep 17 00:00:00 2001 From: Rakshithb1 Date: Thu, 17 Apr 2025 11:57:06 +0530 Subject: [PATCH 519/860] [MOSIP-40792] Signed-off-by: Rakshithb1 --- deploy/mimoto-apitestrig/install.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/deploy/mimoto-apitestrig/install.sh b/deploy/mimoto-apitestrig/install.sh index 4cdc56636..2d75be177 100755 --- a/deploy/mimoto-apitestrig/install.sh +++ b/deploy/mimoto-apitestrig/install.sh @@ -34,9 +34,9 @@ function installing_apitestrig() { kubectl -n $NS delete --ignore-not-found=true configmap db kubectl -n $NS delete --ignore-not-found=true configmap apitestrig - DB_HOST=$( kubectl -n default get cm inji-stack-config -o json |jq -r '.data."mosip-api-internal-host"' ) - API_INTERNAL_HOST=$( kubectl -n default get cm inji-stack-config -o json |jq -r '.data."mosip-api-internal-host"' ) - ENV_USER=$( kubectl -n default get cm inji-stack-config -o json |jq -r '.data."mosip-api-internal-host"' | awk -F '.' '/api-internal/{print $1"."$2}') + DB_HOST=$( kubectl -n default get cm inji-stack-config -o json |jq -r '.data."api-internal-host"' ) + API_INTERNAL_HOST=$( kubectl -n default get cm inji-stack-config -o json |jq -r '.data."api-internal-host"' ) + ENV_USER=$( kubectl -n default get cm inji-stack-config -o json |jq -r '.data."api-internal-host"' | awk -F '.' '/api-internal/{print $1"."$2}') read -p "Please enter the time(hr) to run the cronjob every day (time: 0-23) : " time if [ -z "$time" ]; then From 1f3f6f1b2a99a73989b56b46a26c2f34cd056090 Mon Sep 17 00:00:00 2001 From: Rakshithb1 Date: Thu, 17 Apr 2025 18:34:04 +0530 Subject: [PATCH 520/860] [MOSIP-40792] Signed-off-by: Rakshithb1 --- partner-onboarder/copy_cm.sh | 4 ++-- partner-onboarder/copy_secrets.sh | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/partner-onboarder/copy_cm.sh b/partner-onboarder/copy_cm.sh index ebf540243..62da2c31d 100755 --- a/partner-onboarder/copy_cm.sh +++ b/partner-onboarder/copy_cm.sh @@ -6,5 +6,5 @@ COPY_UTIL=./copy_cm_func.sh DST_NS=injiweb $COPY_UTIL configmap inji-stack-config default $DST_NS -$COPY_UTIL configmap keycloak-env-vars keycloak $DST_NS || { echo "Ignore the error if Keycloak is deployed externally and details of the same have been added to values.yaml."; true; } -$COPY_UTIL configmap keycloak-host keycloak $DST_NS || { echo "Ignore the error if Keycloak is deployed externally and details of the same have been added to values.yaml."; true; } +$COPY_UTIL configmap keycloak-env-vars keycloak $DST_NS || { echo "Ignore this error if Keycloak is deployed externally and its details have been added to values.yaml. If not, please update values.yaml as per the instructions in README.md."; true; } +$COPY_UTIL configmap keycloak-host keycloak $DST_NS || { echo "Ignore this error if Keycloak is deployed externally and its details have been added to values.yaml. If not, please update values.yaml as per the instructions in README.md."; true; } diff --git a/partner-onboarder/copy_secrets.sh b/partner-onboarder/copy_secrets.sh index c9b1185ee..4409973d0 100755 --- a/partner-onboarder/copy_secrets.sh +++ b/partner-onboarder/copy_secrets.sh @@ -6,5 +6,5 @@ COPY_UTIL=./copy_cm_func.sh DST_NS=injiweb #$COPY_UTIL secret s3 s3 $DST_NS -$COPY_UTIL secret keycloak keycloak $DST_NS || { echo "Ignore the error if Keycloak is deployed externally and details of the same have been added to values.yaml."; true; } -$COPY_UTIL secret keycloak-client-secrets keycloak $DST_NS || { echo "Ignore the error if Keycloak is deployed externally and details of the same have been added to values.yaml."; true; } +$COPY_UTIL secret keycloak keycloak $DST_NS || { echo "Ignore this error if Keycloak is deployed externally and its details have been added to values.yaml. If not, please update values.yaml as per the instructions in README.md."; true; } +$COPY_UTIL secret keycloak-client-secrets keycloak $DST_NS || { echo "Ignore this error if Keycloak is deployed externally and its details have been added to values.yaml. If not, please update values.yaml as per the instructions in README.md."; true; } From 003635ccb7986c9a6de7345ae4e0ecafb0f0138e Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Fri, 18 Apr 2025 11:15:17 +0530 Subject: [PATCH 521/860] Injiweb 1512 add download VC endpoint (#684) * [INJIWEB-1512] add a endpoint for returning the pdf template of a credential in bytes format as a response to the caller when request is receieved to fetch the credentials details Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1512] made changes in the download credential and fetching all the credentials of the wallet to check if th walletId received in the request is matching with the walletId stored in session during the wallet unlock Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1512] set the content type to pdf in getVerifiableCredential method for browser to understand the type properly and show it in pdf preview properly Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1512] pass walletId to getVerifiableCredential controller method and move this into walletCredentials controller and service files itself as we need walletId to check if the walletKey belongs to this walletId and walletId belongs to userId or not Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * Added test case for the WalletCredentialService Signed-off-by: Gurpreet41082 * adding wallet id too while fetching credential Signed-off-by: Gurpreet41082 * Added view/download api to stoplight documentation Signed-off-by: Gurpreet41082 * Corrected the string comparison Signed-off-by: Gurpreet41082 * injiweb-1512 test cases fixing after adding wallet check Signed-off-by: Gurpreet41082 * update the docker-compose read me Signed-off-by: Gurpreet41082 * updating point of google credentials Signed-off-by: Gurpreet41082 --------- Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Signed-off-by: Gurpreet41082 Co-authored-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- docker-compose/README.md | 39 ++- docs/api-documentation-openapi.json | 106 ++++++++- .../WalletCredentialsController.java | 60 +++-- .../mimoto/controller/WalletsController.java | 1 + .../mimoto/dbentity/CredentialMetadata.java | 3 +- .../resident/WalletCredentialResponseDTO.java | 20 ++ .../DatabaseConnectionException.java | 2 +- .../exception/PlatformErrorMessages.java | 3 +- .../WalletCredentialsRepository.java | 2 +- .../service/WalletCredentialService.java | 3 + .../service/impl/CredentialServiceImpl.java | 225 +----------------- .../service/impl/PresentationServiceImpl.java | 5 +- .../impl/WalletCredentialServiceImpl.java | 67 ++++-- .../mimoto/util/CredentialUtilService.java | 214 ++++++++++++++++- .../mimoto/util/EncryptionDecryptionUtil.java | 14 ++ .../java/io/mosip/mimoto/util/WalletUtil.java | 19 ++ .../WalletCredentialsControllerTest.java | 186 +++++++++++++-- .../mimoto/service/CredentialServiceTest.java | 15 +- .../service/CredentialUtilServiceTest.java | 26 +- .../service/WalletCredentialServiceTest.java | 171 ++++++++++++- 20 files changed, 879 insertions(+), 302 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/dto/resident/WalletCredentialResponseDTO.java diff --git a/docker-compose/README.md b/docker-compose/README.md index 3783ba038..2e953dbce 100644 --- a/docker-compose/README.md +++ b/docker-compose/README.md @@ -23,8 +23,8 @@ This is the docker-compose setup to run mimoto which act as BFF for Inji mobile Refer [here](https://docs.mosip.io/inji/inji-mobile-wallet/customization-overview/credential_providers) to create client * Update client_id and client_alias as per onboarding in mimoto-issuers-config.json file. -6. Create google client credentials from https://console.cloud.google.com/ and replace - GOOGLE_OAUTH_CLIENT_ID and GOOGLE_OAUTH_CLIENT_SECRET properties in docker-compose.yml +6. Refer to the [How to create Google Client Credentials](#how-to-create-google-client-credentials) section to create + Google client credentials and replace the `GOOGLE_OAUTH_CLIENT_ID` and `GOOGLE_OAUTH_CLIENT_SECRET` properties in `docker-compose.yml`. 7. Start the docker-compose file @@ -36,6 +36,41 @@ Refer [here](https://docs.mosip.io/inji/inji-mobile-wallet/customization-overvie * http://localhost:8099/v1/mimoto/issuers/StayProtected * http://localhost:8099/v1/mimoto/issuers/StayProtected/well-known-proxy +## How to create Google Client Credentials + +To enable Google OAuth2.0 authentication, follow these steps: + +1. **Go to the Google Cloud Console**: + - Visit [Google Cloud Console](https://console.cloud.google.com/). + +2. **Create a New Project**: + - If you don’t already have a project, create a new one by clicking on the project dropdown and selecting "New Project". + +3. **Enable the OAuth Consent Screen**: + - Navigate to "APIs & Services" > "OAuth consent screen". + - Select "External" for the user type and configure the required fields (e.g., app name, support email, etc.). + - Save the changes. +4. **Create OAuth 2.0 Credentials**: + - Navigate to "APIs & Services" > "Credentials". + - Click "Create Credentials" > "OAuth 2.0 Client IDs". + - Select "Web application" as the application type. + +5. **Configure Authorized JavaScript Origins**: + - Add `http://localhost:8099` to the "Authorized JavaScript origins". + +6. **Configure Authorized Redirect URIs**: + - Add `http://localhost:8099/v1/mimoto/oauth2/callback/google` to the "Authorized redirect URIs". + +7. **Save and Retrieve Client Credentials**: + - After saving, you will receive a `Client ID` and `Client Secret`. + +8. **Update `docker-compose.yml`**: + - Replace the placeholders in the `docker-compose.yml` file with the generated credentials: + + ```yaml + environment: + - GOOGLE_OAUTH_CLIENT_ID= + - GOOGLE_OAUTH_CLIENT_SECRET= Note: - Replace mosipbox.public.url, mosip.api.public.url with your public accessible domain. For dev or local env [ngrok](https://ngrok.com/docs/getting-started/) is recommended. diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index 4f1c24383..3f4f7a2b8 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -3062,7 +3062,111 @@ } } }, - "/wallets": { + "/wallets/{walletId}/credentials/{credentialId}": { + "get": { + "tags": ["Wallet Credentials"], + "summary": "Fetch a Verifiable Credential by ID", + "description": "This API retrieves a specific Verifiable Credential for the provided wallet ID and credential ID. It uses session-based authentication. The session ID is extracted from the Cookie header and used to validate the session and retrieve the wallet encryption key. Depending on the action (inline or download), the response disposition will change. On success, it returns a PDF file as response content.", + "operationId": "fetchCredentialById", + "security": [ + { + "SessionAuth": [] + } + ], + "parameters": [ + { + "name": "walletId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier of the user's wallet" + }, + { + "name": "credentialId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier of the credential to be retrieved" + }, + { + "name": "locale", + "in": "query", + "required": true, + "schema": { + "type": "string" + }, + "description": "Language preference for rendering the Verifiable Credential" + }, + { + "name": "action", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": ["inline", "download"], + "default": "inline" + }, + "description": "Controls how the credential should be displayed (inline or as a download)" + } + ], + "responses": { + "200": { + "description": "Verifiable Credential fetched successfully", + "headers": { + "Content-Disposition": { + "description": "Indicates if the file is displayed inline or downloaded", + "schema": { + "type": "string" + } + } + }, + "content": { + "application/pdf": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "Wallet Key missing in session": { + "value": { + "errorCode": "RESIDENT-APP-054", + "errorMessage": "Wallet key is missing in session" + } + }, + "Database connection failure": { + "value": { + "errorCode": "RESIDENT-APP-047", + "errorMessage": "Failed to connect to the shared database while fetching Verifiable Credential from the database" + } + }, + "Unexpected Server Error": { + "value": { + "errorCode": "RESIDENT-APP-054", + "errorMessage": "Unexpected error occurred while fetching Verifiable Credential" + } + } + } + } + } + } + } + } + }, +"/wallets": { "post": { "tags": [ "Wallets" diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index aac8ef1aa..56ceaa5e8 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -2,23 +2,28 @@ import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; +import io.mosip.mimoto.dto.resident.WalletCredentialResponseDTO; import io.mosip.mimoto.exception.*; import io.mosip.mimoto.model.DatabaseEntity; import io.mosip.mimoto.model.DatabaseOperation; import io.mosip.mimoto.service.WalletCredentialService; import io.mosip.mimoto.util.CredentialUtilService; import io.mosip.mimoto.util.Utilities; +import io.mosip.mimoto.util.WalletUtil; import jakarta.servlet.http.HttpSession; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessResourceFailureException; +import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; + import java.io.IOException; import java.util.List; import java.util.Map; + import static io.mosip.mimoto.exception.PlatformErrorMessages.*; @Slf4j @@ -26,10 +31,10 @@ @RequestMapping(value = "/wallets/{walletId}/credentials") public class WalletCredentialsController { @Autowired - WalletCredentialService walletCredentialService; + private WalletCredentialService walletCredentialService; @Autowired - CredentialUtilService credentialUtilService; + private CredentialUtilService credentialUtilService; @PostMapping public ResponseEntity downloadCredential(@PathVariable("walletId") String walletId, @RequestParam Map params, HttpSession httpSession) { @@ -37,11 +42,9 @@ public ResponseEntity downloadCredential(@PathVariable("walletId") String wal params.putIfAbsent("vcStorageExpiryLimitInTimes", "-1"); try { - Object walletKeyObj = httpSession.getAttribute("wallet_key"); - if (walletKeyObj == null) { - throw new RuntimeException("Wallet key is missing in session"); - } - String base64EncodedWalletKey = walletKeyObj.toString(); + WalletUtil.validateWalletId(httpSession, walletId); + String base64EncodedWalletKey = WalletUtil.getSessionWalletKey(httpSession); + String issuerId = params.get("issuer"); String credentialType = params.get("credential"); String credentialValidity = params.get("vcStorageExpiryLimitInTimes"); @@ -49,7 +52,7 @@ public ResponseEntity downloadCredential(@PathVariable("walletId") String wal log.info("Initiated Token Call"); TokenResponseDTO response = credentialUtilService.getTokenResponse(params, issuerId); - log.info("Initiated fetching Verifiable Credential and storing it in the database Call"); + log.info("Initiated call for fetching and storing Verifiable Credential in the database for walletId: {}", walletId); VerifiableCredentialResponseDTO credentialResponseDTO = walletCredentialService.fetchAndStoreCredential( issuerId, credentialType, response, credentialValidity, locale, walletId, base64EncodedWalletKey); @@ -71,13 +74,11 @@ public ResponseEntity downloadCredential(@PathVariable("walletId") String wal public ResponseEntity fetchAllCredentialsForGivenWallet(@PathVariable("walletId") String walletId, @RequestParam("locale") String locale, HttpSession httpSession) { try { log.info("Fetching all credentials for walletId: {}", walletId); - Object walletKeyObj = httpSession.getAttribute("wallet_key"); - if (walletKeyObj == null) { - throw new RuntimeException("Wallet key is missing in session"); - } - String walletKey = walletKeyObj.toString(); - List credentials = walletCredentialService.fetchAllCredentialsForWallet(walletId, walletKey, locale); + WalletUtil.validateWalletId(httpSession, walletId); + String base64EncodedWalletKey = WalletUtil.getSessionWalletKey(httpSession); + + List credentials = walletCredentialService.fetchAllCredentialsForWallet(walletId, base64EncodedWalletKey, locale); return ResponseEntity.status(HttpStatus.OK).body(credentials); } catch (DataAccessResourceFailureException exception) { log.error("Exception occurred while connecting to the database to fetch all credentials for walletId: {}", walletId, exception); @@ -88,4 +89,35 @@ public ResponseEntity fetchAllCredentialsForGivenWallet(@PathVariable("wallet return Utilities.getErrorResponseEntityWithoutWrapper(exception, CREDENTIALS_FETCH_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); } } + + @GetMapping("/{credentialId}") + public ResponseEntity getVerifiableCredential(@PathVariable("walletId") String walletId, @PathVariable("credentialId") String credentialId, @RequestParam("locale") String locale, @RequestParam(value = "action", defaultValue = "inline") String action, HttpSession httpSession) { + try { + log.info("Fetching credentialId: {} from walletId: {}", credentialId, walletId); + + WalletUtil.validateWalletId(httpSession, walletId); + String base64EncodedWalletKey = WalletUtil.getSessionWalletKey(httpSession); + + WalletCredentialResponseDTO walletCredentialResponseDTO = walletCredentialService.fetchVerifiableCredential(walletId, + credentialId, base64EncodedWalletKey, locale); + + String dispositionType = "download".equalsIgnoreCase(action) ? "attachment" : "inline"; + String contentDisposition = String.format("%s; filename=\"%s\"", + dispositionType, walletCredentialResponseDTO.getFileName()); + + return ResponseEntity.ok() + .header(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, HttpHeaders.CONTENT_DISPOSITION) + .header(HttpHeaders.CONTENT_DISPOSITION, contentDisposition) + .contentType(MediaType.APPLICATION_PDF) + .body(walletCredentialResponseDTO.getFileContentStream()); + + } catch (DataAccessResourceFailureException exception) { + log.error("Exception occurred while connecting to the database to fetch the Verifiable Credential:", exception); + DatabaseConnectionException connectionException = new DatabaseConnectionException(DATABASE_CONNECTION_EXCEPTION.getCode(), DATABASE_CONNECTION_EXCEPTION.getMessage(), DatabaseEntity.VERIFIABLECREDENTIAL, DatabaseOperation.FETCHING, HttpStatus.INTERNAL_SERVER_ERROR); + return Utilities.getErrorResponseEntityWithoutWrapper(connectionException, LOGIN_CREDENTIAL_DOWNLOAD_EXCEPTION.getCode(), connectionException.getStatus(), MediaType.APPLICATION_JSON); + } catch (Exception exception) { + log.error("Error occurred while fetching the Verifiable Credential : ", exception); + return Utilities.getErrorResponseEntityWithoutWrapper(exception, CREDENTIAL_FETCH_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); + } + } } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/controller/WalletsController.java b/src/main/java/io/mosip/mimoto/controller/WalletsController.java index 24cdeb96c..6865d6be4 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletsController.java @@ -63,6 +63,7 @@ public ResponseEntity unlockWallet(@PathVariable("walletId") // If wallet_key does not exist in the session, fetch it and set it in the session String walletKey = walletService.getWalletKey((String) httpSession.getAttribute("userId"), walletId, wallet.getWalletPin()); httpSession.setAttribute("wallet_key", walletKey); + httpSession.setAttribute("wallet_id", walletId); WalletResponseDto response = new WalletResponseDto(walletId); return ResponseEntity.status(HttpStatus.OK).body(response); } catch (Exception exception) { diff --git a/src/main/java/io/mosip/mimoto/dbentity/CredentialMetadata.java b/src/main/java/io/mosip/mimoto/dbentity/CredentialMetadata.java index 30b29a2fa..7e4e98db3 100644 --- a/src/main/java/io/mosip/mimoto/dbentity/CredentialMetadata.java +++ b/src/main/java/io/mosip/mimoto/dbentity/CredentialMetadata.java @@ -4,7 +4,8 @@ @Data public class CredentialMetadata { - private Boolean isVerified; private String issuerId; private String credentialType; + private String dataShareUrl; + private String credentialValidity; } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/dto/resident/WalletCredentialResponseDTO.java b/src/main/java/io/mosip/mimoto/dto/resident/WalletCredentialResponseDTO.java new file mode 100644 index 000000000..0bdb9e692 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/resident/WalletCredentialResponseDTO.java @@ -0,0 +1,20 @@ +package io.mosip.mimoto.dto.resident; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import org.springframework.core.io.InputStreamResource; + +@Data +@AllArgsConstructor +public class WalletCredentialResponseDTO { + + @JsonProperty("file_content_stream") + @Schema(description = "This is a PDF input stream containing the requested credential data in byte format") + InputStreamResource fileContentStream; + + @JsonProperty("file_name") + @Schema(description = " Name of the PDF file") + String fileName; +} diff --git a/src/main/java/io/mosip/mimoto/exception/DatabaseConnectionException.java b/src/main/java/io/mosip/mimoto/exception/DatabaseConnectionException.java index 97a09f8c8..93ec576a4 100644 --- a/src/main/java/io/mosip/mimoto/exception/DatabaseConnectionException.java +++ b/src/main/java/io/mosip/mimoto/exception/DatabaseConnectionException.java @@ -8,7 +8,7 @@ public class DatabaseConnectionException extends BaseCheckedException { private final HttpStatus status; public DatabaseConnectionException(String code, String message, DatabaseEntity entity, DatabaseOperation flow, HttpStatus status) { - super(code, String.format("%s while %s %s data %s the database", message, flow.getValue(), entity.getValue(), flow.getValue()=="fetching"? "from" : "into")); + super(code, String.format("%s while %s %s data %s the database", message, flow.getValue(), entity.getValue(), "fetching".equals(flow.getValue()) ? "from" : "into")); this.status = status; } diff --git a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java index 1e714d78c..f0cdc3316 100644 --- a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java +++ b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java @@ -101,7 +101,8 @@ public enum PlatformErrorMessages { USER_WALLET_RETRIEVAL_EXCEPTION(PlatformConstants.PREFIX + "051", "Exception occurred when creating the wallet for user"), USER_METADATA_CACHE_FETCH_EXCEPTION(PlatformConstants.PREFIX + "052", "Failed to fetch the User metadata from cache"), LOGIN_CREDENTIAL_DOWNLOAD_EXCEPTION(PlatformConstants.PREFIX + "053", "Failed to download and store the credential"), - CREDENTIALS_FETCH_EXCEPTION(PlatformConstants.PREFIX + "054", "Exception occurred when fetching credentials for the specified wallet"); + CREDENTIALS_FETCH_EXCEPTION(PlatformConstants.PREFIX + "054", "Exception occurred when fetching credentials for the specified wallet"), + CREDENTIAL_FETCH_EXCEPTION(PlatformConstants.PREFIX + "055", "Exception occurred when fetching Verifiable Credential"); /** The error message. */ private final String errorMessage; diff --git a/src/main/java/io/mosip/mimoto/repository/WalletCredentialsRepository.java b/src/main/java/io/mosip/mimoto/repository/WalletCredentialsRepository.java index 342d44b48..1e934428b 100644 --- a/src/main/java/io/mosip/mimoto/repository/WalletCredentialsRepository.java +++ b/src/main/java/io/mosip/mimoto/repository/WalletCredentialsRepository.java @@ -11,7 +11,7 @@ @Repository public interface WalletCredentialsRepository extends JpaRepository { List findByWalletId(String walletId); - Optional findById(String id); + Optional findByIdAndWalletId(String id, String walletId); @Query(value = "SELECT EXISTS (SELECT 1 FROM verifiable_credentials WHERE credential_metadata->>'issuerId' = :issuerId AND credential_metadata->>'credentialType' = :credentialType AND wallet_id = :walletId)", nativeQuery = true) boolean existsByIssuerIdAndCredentialTypeAndWalletId(@Param("issuerId") String issuerId, @Param("credentialType") String credentialType, @Param("walletId") String walletId); diff --git a/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java b/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java index eaa31551f..144e003e9 100644 --- a/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java +++ b/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java @@ -2,6 +2,7 @@ import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; +import io.mosip.mimoto.dto.resident.WalletCredentialResponseDTO; import java.util.List; @@ -9,4 +10,6 @@ public interface WalletCredentialService { VerifiableCredentialResponseDTO fetchAndStoreCredential(String issuerId, String credentialType, TokenResponseDTO response, String credentialValidity, String locale, String walletId, String base64EncodedWalletKey) throws Exception; List fetchAllCredentialsForWallet(String walletId, String walletKey, String locale); + + WalletCredentialResponseDTO fetchVerifiableCredential(String walletId, String credentialId, String base64EncodedWalletKey, String locale) throws Exception; } diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java index b71f4563d..f51595c13 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java @@ -1,56 +1,24 @@ package io.mosip.mimoto.service.impl; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.zxing.BarcodeFormat; -import com.google.zxing.WriterException; -import com.google.zxing.client.j2se.MatrixToImageWriter; -import com.google.zxing.common.BitMatrix; -import com.google.zxing.qrcode.QRCodeWriter; -import com.itextpdf.html2pdf.ConverterProperties; -import com.itextpdf.html2pdf.HtmlConverter; -import com.itextpdf.html2pdf.resolver.font.DefaultFontProvider; -import com.itextpdf.kernel.pdf.PdfWriter; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.*; -import io.mosip.mimoto.dto.openid.presentation.PresentationDefinitionDTO; import io.mosip.mimoto.exception.*; -import io.mosip.mimoto.model.SigningAlgorithm; import io.mosip.mimoto.model.QRCodeType; import io.mosip.mimoto.service.CredentialService; import io.mosip.mimoto.service.IssuersService; import io.mosip.mimoto.util.*; -import io.mosip.pixelpass.PixelPass; -import io.mosip.vercred.vcverifier.CredentialsVerifier; -import jakarta.annotation.PostConstruct; import lombok.extern.slf4j.Slf4j; -import org.apache.velocity.VelocityContext; -import org.apache.velocity.app.Velocity; -import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; -import org.springframework.web.client.RestTemplate; -import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.StringWriter; -import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; -import java.util.*; -import java.util.stream.Collectors; import static io.mosip.mimoto.exception.ErrorConstants.*; @Slf4j @Service public class CredentialServiceImpl implements CredentialService { - @Autowired - private Utilities utilities; - - @Autowired IssuersService issuersService; @@ -60,35 +28,9 @@ public class CredentialServiceImpl implements CredentialService { @Autowired ObjectMapper objectMapper; - @Autowired - RestTemplate restTemplate; - - @Value("${mosip.inji.ovp.qrdata.pattern}") - String ovpQRDataPattern; - - @Value("${mosip.inji.qr.code.height:500}") - Integer qrCodeHeight; - - @Value("${mosip.inji.qr.code.width:500}") - Integer qrCodeWidth; - - @Value("${mosip.inji.qr.data.size.limit:2000}") - Integer allowedQRDataSizeLimit; - - @Autowired - PresentationServiceImpl presentationService; - - PixelPass pixelPass; - CredentialsVerifier credentialsVerifier; - @Autowired private CredentialUtilService credentialUtilService; - @PostConstruct - public void init() { - pixelPass = new PixelPass(); - credentialsVerifier = new CredentialsVerifier(); - } @Override public ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String credentialType, TokenResponseDTO response, String credentialValidity, String locale) throws Exception { @@ -106,174 +48,9 @@ public ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String cred boolean verificationStatus = issuerId.toLowerCase().contains("mock") || credentialUtilService.verifyCredential(vcCredentialResponse); if (verificationStatus) { String dataShareUrl = QRCodeType.OnlineSharing.equals(issuerDTO.getQr_code_type()) ? dataShareService.storeDataInDataShare(objectMapper.writeValueAsString(vcCredentialResponse), credentialValidity) : ""; - return generatePdfForVerifiableCredentials(credentialType, vcCredentialResponse, issuerDTO, credentialsSupportedResponse, dataShareUrl, credentialValidity, locale); + return credentialUtilService.generatePdfForVerifiableCredentials(credentialType, vcCredentialResponse, issuerDTO, credentialsSupportedResponse, dataShareUrl, credentialValidity, locale); } throw new VCVerificationException(SIGNATURE_VERIFICATION_EXCEPTION.getErrorCode(), SIGNATURE_VERIFICATION_EXCEPTION.getErrorMessage()); } - - public ByteArrayInputStream generatePdfForVerifiableCredentials(String credentialType, VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String dataShareUrl, String credentialValidity, String locale) throws Exception { - LinkedHashMap> displayProperties = loadDisplayPropertiesFromWellknown(vcCredentialResponse, credentialsSupportedResponse, locale); - Map data = getPdfResourceFromVcProperties(displayProperties, credentialsSupportedResponse, vcCredentialResponse, issuerDTO, dataShareUrl, credentialValidity); - return renderVCInCredentialTemplate(data, issuerDTO.getIssuer_id(), credentialType); - } - - @NotNull - private static LinkedHashMap> loadDisplayPropertiesFromWellknown(VCCredentialResponse vcCredentialResponse, CredentialsSupportedResponse credentialsSupportedResponse, String userLocale) { - LinkedHashMap> displayProperties = new LinkedHashMap<>(); - Map credentialProperties = vcCredentialResponse.getCredential().getCredentialSubject(); - LinkedHashMap vcPropertiesFromWellKnown = new LinkedHashMap<>(); - Map credentialSubject = credentialsSupportedResponse.getCredentialDefinition().getCredentialSubject(); - String locale = LocaleUtils.resolveLocaleWithFallback(credentialSubject, userLocale); - if (locale != null) { - credentialSubject.keySet().forEach(VCProperty -> { - Optional filteredResponse = credentialSubject.get(VCProperty) - .getDisplay().stream() - .filter(obj -> LocaleUtils.matchesLocale(obj.getLocale(), locale)) - .findFirst(); - - if (filteredResponse.isPresent()) { - CredentialIssuerDisplayResponse filteredValue = filteredResponse.get(); - vcPropertiesFromWellKnown.put(VCProperty, filteredValue); - } - }); - } - - List orderProperty = credentialsSupportedResponse.getOrder(); - - List fieldProperties = orderProperty == null ? new ArrayList<>(vcPropertiesFromWellKnown.keySet()) : orderProperty; - fieldProperties.forEach(vcProperty -> { - if (vcPropertiesFromWellKnown.get(vcProperty) != null && credentialProperties.get(vcProperty) != null) { - displayProperties.put(vcProperty, Map.of(vcPropertiesFromWellKnown.get(vcProperty), credentialProperties.get(vcProperty))); - } - }); - return displayProperties; - } - - - private Map getPdfResourceFromVcProperties(LinkedHashMap> displayProperties, CredentialsSupportedResponse credentialsSupportedResponse, VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, String dataShareUrl, String credentialValidity) throws IOException, WriterException { - Map data = new HashMap<>(); - LinkedHashMap rowProperties = new LinkedHashMap<>(); - String backgroundColor = credentialsSupportedResponse.getDisplay().get(0).getBackgroundColor(); - String backgroundImage = credentialsSupportedResponse.getDisplay().get(0).getBackgroundImage().getUri(); - String textColor = credentialsSupportedResponse.getDisplay().get(0).getTextColor(); - String credentialSupportedType = credentialsSupportedResponse.getDisplay().get(0).getName(); - String face = vcCredentialResponse.getCredential().getCredentialSubject().get("face") != null ? (String) vcCredentialResponse.getCredential().getCredentialSubject().get("face") : null; - - displayProperties.entrySet().stream() - .forEachOrdered(entry -> { - String originalKey = entry.getKey(); - Map properties = entry.getValue(); - - // Process the inner map - ((Map) properties).entrySet().stream() - .forEachOrdered(innerEntry -> { - // loadDisplayPropertiesFromWellknown method returns both name and locale field values of the matching display obj in the response - CredentialIssuerDisplayResponse matchingWellknownDisplayObj = innerEntry.getKey(); - String nameFromDisplayObj = matchingWellknownDisplayObj.getName(); - String localeFromDisplayObj = matchingWellknownDisplayObj.getLocale(); - Object propertyValFromDownloadedVcResponse = innerEntry.getValue(); - String value = ""; - - if (propertyValFromDownloadedVcResponse instanceof Map) { - // If the value is a Map, handle it as a Map - value = handleMap(propertyValFromDownloadedVcResponse); - } else if (propertyValFromDownloadedVcResponse instanceof List) { - // If the value is a List, handle it as a List - value = handleList(propertyValFromDownloadedVcResponse, localeFromDisplayObj); - } else { - // Otherwise, just convert to string - value = propertyValFromDownloadedVcResponse.toString(); - } - - // Put the result into the rowProperties map - rowProperties.put(originalKey, Map.of(nameFromDisplayObj, value)); - }); - - }); - String qrCodeImage = QRCodeType.OnlineSharing.equals(issuerDTO.getQr_code_type()) ? constructQRCodeWithAuthorizeRequest(vcCredentialResponse, dataShareUrl) : - QRCodeType.EmbeddedVC.equals(issuerDTO.getQr_code_type()) ? constructQRCodeWithVCData(vcCredentialResponse) : ""; - data.put("qrCodeImage", qrCodeImage); - data.put("credentialValidity", credentialValidity); - data.put("logoUrl", issuerDTO.getDisplay().stream().map(d -> d.getLogo().getUrl()).findFirst().orElse("")); - data.put("rowProperties", rowProperties); - data.put("textColor", textColor); - data.put("backgroundColor", backgroundColor); - data.put("backgroundImage", backgroundImage); - data.put("titleName", credentialSupportedType); - data.put("face", face); - return data; - } - - private String handleList(Object list, String locale) { - List castedList = (List) list; - String response = ""; - if (castedList.isEmpty()) return ""; - if (castedList.get(0) instanceof String) { - response = castedList.stream().map(String.class::cast).collect(Collectors.joining(", ")); - } else if (castedList.get(0) instanceof Map) { - response = ((List>) castedList).stream() - .filter(obj -> LocaleUtils.matchesLocale(obj.get("language").toString(), locale)) - .map(obj -> obj.get("value").toString()) - .findFirst() - .orElse(""); - } - return response; - } - - private String handleMap(Object map) { - if (map instanceof Map) { - return Optional.ofNullable(((Map) map).get("value")) - .map(Object::toString) - .orElse(""); - } - return ""; - } - - @NotNull - private ByteArrayInputStream renderVCInCredentialTemplate(Map data, String issuerId, String credentialType) { - String credentialTemplate = utilities.getCredentialSupportedTemplateString(issuerId, credentialType); - Properties props = new Properties(); - props.setProperty("resource.loader", "class"); - props.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); - Velocity.init(props); - VelocityContext velocityContext = new VelocityContext(data); - - // Merge the context with the template - StringWriter writer = new StringWriter(); - Velocity.evaluate(velocityContext, writer, "Credential Template", credentialTemplate); - - // Get the merged HTML string - String mergedHtml = writer.toString(); - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - - PdfWriter pdfwriter = new PdfWriter(outputStream); - DefaultFontProvider defaultFont = new DefaultFontProvider(true, false, false); - ConverterProperties converterProperties = new ConverterProperties(); - converterProperties.setFontProvider(defaultFont); - HtmlConverter.convertToPdf(mergedHtml, pdfwriter, converterProperties); - return new ByteArrayInputStream(outputStream.toByteArray()); - } - - private String constructQRCode(String qrData) throws WriterException { - QRCodeWriter qrCodeWriter = new QRCodeWriter(); - BitMatrix bitMatrix = qrCodeWriter.encode(qrData, BarcodeFormat.QR_CODE, qrCodeWidth, qrCodeHeight); - BufferedImage qrImage = MatrixToImageWriter.toBufferedImage(bitMatrix); - return Utilities.encodeToString(qrImage, "png"); - } - - private String constructQRCodeWithVCData(VCCredentialResponse vcCredentialResponse) throws JsonProcessingException, WriterException { - String qrData = pixelPass.generateQRData(objectMapper.writeValueAsString(vcCredentialResponse.getCredential()), ""); - if (allowedQRDataSizeLimit > qrData.length()) { - return constructQRCode(qrData); - } - return ""; - } - - private String constructQRCodeWithAuthorizeRequest(VCCredentialResponse vcCredentialResponse, String dataShareUrl) throws WriterException, JsonProcessingException { - PresentationDefinitionDTO presentationDefinitionDTO = presentationService.constructPresentationDefinition(vcCredentialResponse); - String presentationString = objectMapper.writeValueAsString(presentationDefinitionDTO); - String qrData = String.format(ovpQRDataPattern, URLEncoder.encode(dataShareUrl, StandardCharsets.UTF_8), URLEncoder.encode(presentationString, StandardCharsets.UTF_8)); - return constructQRCode(qrData); - } } diff --git a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java index 409d86224..897bcf8bc 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java @@ -5,14 +5,11 @@ import io.mosip.mimoto.dto.mimoto.VCCredentialProperties; import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; import io.mosip.mimoto.dto.openid.presentation.*; -import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.exception.VPNotCreatedException; import io.mosip.mimoto.service.PresentationService; import io.mosip.mimoto.util.RestApiClient; import lombok.extern.slf4j.Slf4j; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -111,7 +108,7 @@ private String constructPresentationSubmission(VerifiablePresentationDTO verifia return objectMapper.writeValueAsString(presentationSubmissionDTO); } - PresentationDefinitionDTO constructPresentationDefinition(VCCredentialResponse vcCredentialResponse){ + public PresentationDefinitionDTO constructPresentationDefinition(VCCredentialResponse vcCredentialResponse){ FilterDTO filterDTO = FilterDTO.builder().type("String").pattern(vcCredentialResponse.getCredential().getType().getLast()).build(); FieldDTO fieldDTO = FieldDTO.builder().path(new String[]{"$.type"}).filter(filterDTO).build(); ConstraintsDTO constraintsDTO = ConstraintsDTO.builder().fields(new FieldDTO[]{fieldDTO}).build(); diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java index 5a2e7cdd1..58236e25d 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java @@ -7,9 +7,12 @@ import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.*; +import io.mosip.mimoto.dto.resident.WalletCredentialResponseDTO; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.AuthorizationServerWellknownResponseException; import io.mosip.mimoto.exception.InvalidWellknownResponseException; +import io.mosip.mimoto.exception.VCVerificationException; +import io.mosip.mimoto.model.QRCodeType; import io.mosip.mimoto.repository.WalletCredentialsRepository; import io.mosip.mimoto.service.IdpService; import io.mosip.mimoto.service.IssuersService; @@ -21,13 +24,17 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.io.InputStreamResource; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; -import javax.crypto.SecretKey; +import java.io.ByteArrayInputStream; import java.io.IOException; import java.util.*; +import static io.mosip.mimoto.exception.ErrorConstants.SIGNATURE_VERIFICATION_EXCEPTION; +import static io.mosip.mimoto.util.LocaleUtils.getCredentialDisplayDTOBasedOnLocale; + @Slf4j @Service @@ -98,8 +105,15 @@ public VerifiableCredentialResponseDTO fetchAndStoreCredential( VCCredentialResponse vcCredentialResponse = credentialUtilService.downloadCredential(credentialIssuerWellKnownResponse.getCredentialEndPoint(), vcCredentialRequest, response.getAccess_token()); boolean verificationStatus = issuerId.toLowerCase().contains("mock") || credentialUtilService.verifyCredential(vcCredentialResponse); - String encryptedCredentialData = encryptCredential(vcCredentialResponse.toString(), base64EncodedWalletKey); - VerifiableCredential savedCredential = saveCredential(walletId, encryptedCredentialData, verificationStatus, issuerId, credentialType); + if (!verificationStatus) { + throw new VCVerificationException(SIGNATURE_VERIFICATION_EXCEPTION.getErrorCode(), + SIGNATURE_VERIFICATION_EXCEPTION.getErrorMessage()); + } + + String dataShareUrl = QRCodeType.OnlineSharing.equals(issuerDTO.getQr_code_type()) ? dataShareService.storeDataInDataShare(objectMapper.writeValueAsString(vcCredentialResponse), credentialValidity) : ""; + String vcResponseAsJsonString = objectMapper.writeValueAsString(vcCredentialResponse); + String encryptedCredentialData = encryptionDecryptionUtil.encryptCredential(vcResponseAsJsonString, base64EncodedWalletKey); + VerifiableCredential savedCredential = saveCredential(walletId, encryptedCredentialData, issuerId, credentialType, dataShareUrl, credentialValidity); return WalletCredentialResponseDTOFactory.buildCredentialResponseDTO(issuerDTO, credentialsSupportedResponse, locale, savedCredential.getId()); } @@ -137,6 +151,36 @@ public List fetchAllCredentialsForWallet(String }).toList(); } + @Override + public WalletCredentialResponseDTO fetchVerifiableCredential(String walletId, String credentialId, String base64EncodedWalletKey, String locale) throws Exception { + Optional verifiableCredentialObj = walletCredentialsRepository.findByIdAndWalletId(credentialId, walletId); + VerifiableCredential verifiableCredential; + if (verifiableCredentialObj.isPresent()) { + verifiableCredential = verifiableCredentialObj.get(); + } else { + throw new RuntimeException("Credential not found"); + } + + String decryptCredentialResponse = encryptionDecryptionUtil.decryptCredential(verifiableCredential.getCredential(), base64EncodedWalletKey); + String issuerId = verifiableCredential.getCredentialMetadata().getIssuerId(); + String credentialType = verifiableCredential.getCredentialMetadata().getCredentialType(); + String dataShareUrl = verifiableCredential.getCredentialMetadata().getDataShareUrl(); + String credentialValidity = verifiableCredential.getCredentialMetadata().getCredentialValidity(); + IssuerDTO issuerDTO = issuersService.getIssuerDetails(issuerId); + CredentialIssuerConfiguration credentialIssuerConfiguration = issuersService.getIssuerConfiguration(issuerId); + CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = new CredentialIssuerWellKnownResponse( + credentialIssuerConfiguration.getCredentialIssuer(), + credentialIssuerConfiguration.getAuthorizationServers(), + credentialIssuerConfiguration.getCredentialEndPoint(), + credentialIssuerConfiguration.getCredentialConfigurationsSupported()); + CredentialsSupportedResponse credentialsSupportedResponse = credentialIssuerWellKnownResponse.getCredentialConfigurationsSupported().get(credentialType); + + VCCredentialResponse vcCredentialResponse = objectMapper.readValue(decryptCredentialResponse, VCCredentialResponse.class); + ByteArrayInputStream byteArrayInputStream = credentialUtilService.generatePdfForVerifiableCredentials(credentialType, vcCredentialResponse, issuerDTO, credentialsSupportedResponse, dataShareUrl, credentialValidity, locale); + String fileName = getCredentialDisplayDTOBasedOnLocale(credentialsSupportedResponse.getDisplay(), locale).getName(); + + return new WalletCredentialResponseDTO(new InputStreamResource(byteArrayInputStream), fileName); + } private CredentialIssuerWellKnownResponse getIssuerWellKnownResponse(String issuerId) throws AuthorizationServerWellknownResponseException, ApiNotAccessibleException, IOException, InvalidWellknownResponseException { CredentialIssuerConfiguration credentialIssuerConfiguration = issuersService.getIssuerConfiguration(issuerId); @@ -148,23 +192,12 @@ private CredentialIssuerWellKnownResponse getIssuerWellKnownResponse(String issu ); } - private String encryptCredential(String credentialData, String base64EncodedWalletKey) throws Exception { - byte[] decodedWalletKey = Base64.getDecoder().decode(base64EncodedWalletKey); - SecretKey walletKey = EncryptionDecryptionUtil.bytesToSecretKey(decodedWalletKey); - return encryptionDecryptionUtil.encryptWithAES(walletKey, EncryptionDecryptionUtil.stringToBytes(credentialData)); - } - - private String decryptCredential(String encryptedCredentialData, String base64EncodedWalletKey) throws Exception { - byte[] decodedWalletKey = Base64.getDecoder().decode(base64EncodedWalletKey); - SecretKey walletKey = EncryptionDecryptionUtil.bytesToSecretKey(decodedWalletKey); - return EncryptionDecryptionUtil.bytesToString(encryptionDecryptionUtil.decryptWithAES(walletKey, encryptedCredentialData)); - } - - private VerifiableCredential saveCredential(String walletId, String encryptedCredential, boolean isVerified, String issuerId, String credentialType) { + private VerifiableCredential saveCredential(String walletId, String encryptedCredential, String issuerId, String credentialType, String dataShareUrl, String credentialValidity) { CredentialMetadata credentialMetadata = new CredentialMetadata(); - credentialMetadata.setIsVerified(isVerified); credentialMetadata.setIssuerId(issuerId); credentialMetadata.setCredentialType(credentialType); + credentialMetadata.setDataShareUrl(dataShareUrl); + credentialMetadata.setCredentialValidity(credentialValidity); VerifiableCredential verifiableCredential = new VerifiableCredential(); verifiableCredential.setId(UUID.randomUUID().toString()); diff --git a/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java b/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java index 7ca392b1f..a7f1ffcf7 100644 --- a/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java +++ b/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java @@ -2,21 +2,38 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.zxing.BarcodeFormat; +import com.google.zxing.WriterException; +import com.google.zxing.client.j2se.MatrixToImageWriter; +import com.google.zxing.common.BitMatrix; +import com.google.zxing.qrcode.QRCodeWriter; +import com.itextpdf.html2pdf.ConverterProperties; +import com.itextpdf.html2pdf.HtmlConverter; +import com.itextpdf.html2pdf.resolver.font.DefaultFontProvider; +import com.itextpdf.kernel.pdf.PdfWriter; import io.mosip.mimoto.dbentity.ProofSigningKey; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.*; +import io.mosip.mimoto.dto.openid.presentation.PresentationDefinitionDTO; import io.mosip.mimoto.exception.*; +import io.mosip.mimoto.model.QRCodeType; import io.mosip.mimoto.model.SigningAlgorithm; import io.mosip.mimoto.repository.ProofSigningKeyRepository; import io.mosip.mimoto.service.IdpService; import io.mosip.mimoto.service.IssuersService; +import io.mosip.mimoto.service.impl.PresentationServiceImpl; +import io.mosip.pixelpass.PixelPass; import io.mosip.vercred.vcverifier.CredentialsVerifier; import io.mosip.vercred.vcverifier.constants.CredentialFormat; import io.mosip.vercred.vcverifier.data.VerificationResult; import jakarta.annotation.PostConstruct; import lombok.extern.slf4j.Slf4j; +import org.apache.velocity.VelocityContext; +import org.apache.velocity.app.Velocity; +import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpEntity; import org.springframework.http.MediaType; import org.springframework.stereotype.Service; @@ -24,8 +41,15 @@ import org.springframework.web.client.RestTemplate; import javax.crypto.SecretKey; +import java.awt.image.BufferedImage; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.io.StringWriter; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import java.util.*; +import java.util.stream.Collectors; @Slf4j @Service @@ -53,14 +77,34 @@ public class CredentialUtilService { CredentialsVerifier credentialsVerifier; + @Autowired + ObjectMapper objectMapper; + + @Value("${mosip.inji.ovp.qrdata.pattern}") + String ovpQRDataPattern; + + @Value("${mosip.inji.qr.code.height:500}") + Integer qrCodeHeight; + + @Value("${mosip.inji.qr.code.width:500}") + Integer qrCodeWidth; + + @Value("${mosip.inji.qr.data.size.limit:2000}") + Integer allowedQRDataSizeLimit; + + @Autowired + PresentationServiceImpl presentationService; + + @Autowired + private Utilities utilities; + PixelPass pixelPass; + @PostConstruct public void init() { credentialsVerifier = new CredentialsVerifier(); + pixelPass = new PixelPass(); } - @Autowired - ObjectMapper objectMapper; - public TokenResponseDTO getTokenResponse(Map params, String issuerId) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { IssuerDTO issuerDTO = issuersService.getIssuerDetails(issuerId); CredentialIssuerConfiguration credentialIssuerConfiguration = issuersService.getIssuerConfiguration(issuerId); @@ -126,5 +170,169 @@ public Boolean verifyCredential(VCCredentialResponse vcCredentialResponse) throw log.info("Completed the VC Verification : Completed -> result : " + verificationResult); return true; } + + @NotNull + public static LinkedHashMap> loadDisplayPropertiesFromWellknown(VCCredentialResponse vcCredentialResponse, CredentialsSupportedResponse credentialsSupportedResponse, String userLocale) { + LinkedHashMap> displayProperties = new LinkedHashMap<>(); + Map credentialProperties = vcCredentialResponse.getCredential().getCredentialSubject(); + LinkedHashMap vcPropertiesFromWellKnown = new LinkedHashMap<>(); + Map credentialSubject = credentialsSupportedResponse.getCredentialDefinition().getCredentialSubject(); + String locale = LocaleUtils.resolveLocaleWithFallback(credentialSubject, userLocale); + if (locale != null) { + credentialSubject.keySet().forEach(VCProperty -> { + Optional filteredResponse = credentialSubject.get(VCProperty) + .getDisplay().stream() + .filter(obj -> LocaleUtils.matchesLocale(obj.getLocale(), locale)) + .findFirst(); + + if (filteredResponse.isPresent()) { + CredentialIssuerDisplayResponse filteredValue = filteredResponse.get(); + vcPropertiesFromWellKnown.put(VCProperty, filteredValue); + } + }); + } + + List orderProperty = credentialsSupportedResponse.getOrder(); + + List fieldProperties = orderProperty == null ? new ArrayList<>(vcPropertiesFromWellKnown.keySet()) : orderProperty; + fieldProperties.forEach(vcProperty -> { + if (vcPropertiesFromWellKnown.get(vcProperty) != null && credentialProperties.get(vcProperty) != null) { + displayProperties.put(vcProperty, Map.of(vcPropertiesFromWellKnown.get(vcProperty), credentialProperties.get(vcProperty))); + } + }); + return displayProperties; + } + + public Map getPdfResourceFromVcProperties(LinkedHashMap> displayProperties, CredentialsSupportedResponse credentialsSupportedResponse, VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, String dataShareUrl, String credentialValidity) throws IOException, WriterException { + Map data = new HashMap<>(); + LinkedHashMap rowProperties = new LinkedHashMap<>(); + String backgroundColor = credentialsSupportedResponse.getDisplay().get(0).getBackgroundColor(); + String backgroundImage = credentialsSupportedResponse.getDisplay().get(0).getBackgroundImage().getUri(); + String textColor = credentialsSupportedResponse.getDisplay().get(0).getTextColor(); + String credentialSupportedType = credentialsSupportedResponse.getDisplay().get(0).getName(); + String face = vcCredentialResponse.getCredential().getCredentialSubject().get("face") != null ? (String) vcCredentialResponse.getCredential().getCredentialSubject().get("face") : null; + + displayProperties.entrySet().stream() + .forEachOrdered(entry -> { + String originalKey = entry.getKey(); + Map properties = entry.getValue(); + + // Process the inner map + ((Map) properties).entrySet().stream() + .forEachOrdered(innerEntry -> { + // loadDisplayPropertiesFromWellknown method returns both name and locale field values of the matching display obj in the response + CredentialIssuerDisplayResponse matchingWellknownDisplayObj = innerEntry.getKey(); + String nameFromDisplayObj = matchingWellknownDisplayObj.getName(); + String localeFromDisplayObj = matchingWellknownDisplayObj.getLocale(); + Object propertyValFromDownloadedVcResponse = innerEntry.getValue(); + String value = ""; + + if (propertyValFromDownloadedVcResponse instanceof Map) { + // If the value is a Map, handle it as a Map + value = handleMap(propertyValFromDownloadedVcResponse); + } else if (propertyValFromDownloadedVcResponse instanceof List) { + // If the value is a List, handle it as a List + value = handleList(propertyValFromDownloadedVcResponse, localeFromDisplayObj); + } else { + // Otherwise, just convert to string + value = propertyValFromDownloadedVcResponse.toString(); + } + + // Put the result into the rowProperties map + rowProperties.put(originalKey, Map.of(nameFromDisplayObj, value)); + }); + + }); + String qrCodeImage = QRCodeType.OnlineSharing.equals(issuerDTO.getQr_code_type()) ? constructQRCodeWithAuthorizeRequest(vcCredentialResponse, dataShareUrl) : + QRCodeType.EmbeddedVC.equals(issuerDTO.getQr_code_type()) ? constructQRCodeWithVCData(vcCredentialResponse) : ""; + data.put("qrCodeImage", qrCodeImage); + data.put("credentialValidity", credentialValidity); + data.put("logoUrl", issuerDTO.getDisplay().stream().map(d -> d.getLogo().getUrl()).findFirst().orElse("")); + data.put("rowProperties", rowProperties); + data.put("textColor", textColor); + data.put("backgroundColor", backgroundColor); + data.put("backgroundImage", backgroundImage); + data.put("titleName", credentialSupportedType); + data.put("face", face); + return data; + } + + public ByteArrayInputStream generatePdfForVerifiableCredentials(String credentialType, VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String dataShareUrl, String credentialValidity, String locale) throws Exception { + LinkedHashMap> displayProperties = loadDisplayPropertiesFromWellknown(vcCredentialResponse, credentialsSupportedResponse, locale); + Map data = getPdfResourceFromVcProperties(displayProperties, credentialsSupportedResponse, vcCredentialResponse, issuerDTO, dataShareUrl, credentialValidity); + return renderVCInCredentialTemplate(data, issuerDTO.getIssuer_id(), credentialType); + } + + @NotNull + private ByteArrayInputStream renderVCInCredentialTemplate(Map data, String issuerId, String credentialType) { + String credentialTemplate = utilities.getCredentialSupportedTemplateString(issuerId, credentialType); + Properties props = new Properties(); + props.setProperty("resource.loader", "class"); + props.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); + Velocity.init(props); + VelocityContext velocityContext = new VelocityContext(data); + + // Merge the context with the template + StringWriter writer = new StringWriter(); + Velocity.evaluate(velocityContext, writer, "Credential Template", credentialTemplate); + + // Get the merged HTML string + String mergedHtml = writer.toString(); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + + PdfWriter pdfwriter = new PdfWriter(outputStream); + DefaultFontProvider defaultFont = new DefaultFontProvider(true, false, false); + ConverterProperties converterProperties = new ConverterProperties(); + converterProperties.setFontProvider(defaultFont); + HtmlConverter.convertToPdf(mergedHtml, pdfwriter, converterProperties); + return new ByteArrayInputStream(outputStream.toByteArray()); + } + + private String handleList(Object list, String locale) { + List castedList = (List) list; + String response = ""; + if (castedList.isEmpty()) return ""; + if (castedList.get(0) instanceof String) { + response = castedList.stream().map(String.class::cast).collect(Collectors.joining(", ")); + } else if (castedList.get(0) instanceof Map) { + response = ((List>) castedList).stream() + .filter(obj -> LocaleUtils.matchesLocale(obj.get("language").toString(), locale)) + .map(obj -> obj.get("value").toString()) + .findFirst() + .orElse(""); + } + return response; + } + + private String handleMap(Object map) { + if (map instanceof Map) { + return Optional.ofNullable(((Map) map).get("value")) + .map(Object::toString) + .orElse(""); + } + return ""; + } + + private String constructQRCodeWithVCData(VCCredentialResponse vcCredentialResponse) throws JsonProcessingException, WriterException { + String qrData = pixelPass.generateQRData(objectMapper.writeValueAsString(vcCredentialResponse.getCredential()), ""); + if (allowedQRDataSizeLimit > qrData.length()) { + return constructQRCode(qrData); + } + return ""; + } + + private String constructQRCodeWithAuthorizeRequest(VCCredentialResponse vcCredentialResponse, String dataShareUrl) throws WriterException, JsonProcessingException { + PresentationDefinitionDTO presentationDefinitionDTO = presentationService.constructPresentationDefinition(vcCredentialResponse); + String presentationString = objectMapper.writeValueAsString(presentationDefinitionDTO); + String qrData = String.format(ovpQRDataPattern, URLEncoder.encode(dataShareUrl, StandardCharsets.UTF_8), URLEncoder.encode(presentationString, StandardCharsets.UTF_8)); + return constructQRCode(qrData); + } + + private String constructQRCode(String qrData) throws WriterException { + QRCodeWriter qrCodeWriter = new QRCodeWriter(); + BitMatrix bitMatrix = qrCodeWriter.encode(qrData, BarcodeFormat.QR_CODE, qrCodeWidth, qrCodeHeight); + BufferedImage qrImage = MatrixToImageWriter.toBufferedImage(bitMatrix); + return Utilities.encodeToString(qrImage, "png"); + } } diff --git a/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java b/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java index 412a7e42f..049b77638 100644 --- a/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java +++ b/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java @@ -148,4 +148,18 @@ public String encryptKeyWithPin(SecretKey encryptionKey, String pin) { requestDto.setData(dataAsString); return cryptomanagerService.encryptWithPin(requestDto).getData(); } + + public String encryptCredential(String credentialData, String base64EncodedWalletKey) throws Exception { + byte[] decodedWalletKey = Base64.getDecoder().decode(base64EncodedWalletKey); + SecretKey walletKey = bytesToSecretKey(decodedWalletKey); + return encryptWithAES(walletKey, stringToBytes(credentialData)); + } + + public String decryptCredential(String encryptedCredentialData, String base64EncodedWalletKey) throws Exception { + byte[] decodedWalletKey = Base64.getDecoder().decode(base64EncodedWalletKey); + SecretKey walletKey = bytesToSecretKey(decodedWalletKey); + return bytesToString(decryptWithAES(walletKey, encryptedCredentialData)); + } + + } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/util/WalletUtil.java b/src/main/java/io/mosip/mimoto/util/WalletUtil.java index 04b88b431..d7b4c70f6 100644 --- a/src/main/java/io/mosip/mimoto/util/WalletUtil.java +++ b/src/main/java/io/mosip/mimoto/util/WalletUtil.java @@ -5,6 +5,7 @@ import io.mosip.mimoto.dbentity.WalletMetadata; import io.mosip.mimoto.model.SigningAlgorithm; import io.mosip.mimoto.repository.WalletRepository; +import jakarta.servlet.http.HttpSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -15,6 +16,8 @@ @Component public class WalletUtil { + private static final String SESSION_WALLET_KEY = "wallet_key"; + private static final String SESSION_WALLET_ID = "wallet_id"; @Autowired private WalletRepository walletRepository; @@ -70,4 +73,20 @@ private List createProofSigningKeys(SecretKey encryptionKey, Wa } return proofSigningKeys; } + + public static String getSessionWalletKey(HttpSession session) { + Object key = session.getAttribute(SESSION_WALLET_KEY); + if (key == null) throw new RuntimeException("Wallet Key is missing in session"); + return key.toString(); + } + + public static void validateWalletId(HttpSession session, String walletIdFromRequest) { + Object sessionWalletId = session.getAttribute(SESSION_WALLET_ID); + if (sessionWalletId == null) throw new RuntimeException("Wallet Id is missing in session"); + + String walletIdInSession = sessionWalletId.toString(); + if (!walletIdInSession.equals(walletIdFromRequest)) { + throw new RuntimeException("Invalid Wallet Id. Session and request Wallet Id do not match"); + } + } } \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java index d5312fc7d..cc5b13cfe 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java @@ -2,6 +2,7 @@ import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; +import io.mosip.mimoto.dto.resident.WalletCredentialResponseDTO; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.IdpException; import io.mosip.mimoto.service.impl.WalletCredentialServiceImpl; @@ -19,12 +20,16 @@ import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.core.io.InputStreamResource; import org.springframework.dao.DataAccessResourceFailureException; +import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; +import org.springframework.mock.web.MockHttpSession; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import java.io.ByteArrayInputStream; import java.io.IOException; import java.util.*; @@ -54,7 +59,9 @@ public class WalletCredentialsControllerTest { private MockMvc mockMvc; VerifiableCredentialResponseDTO verifiableCredentialResponseDTO; - String postRequestContent, getRequestContent, mockWalletKey = "mock-wallet-key" , walletId = "wallet123", locale = "test-local", credential = "test-credential", issuer = "test-issuer"; + String postRequestContent, getRequestContent, mockWalletKey = "mock-wallet-key", walletId = "wallet123", locale = "test-local", credential = "test-credential", issuer = "test-issuer", credentialId = "cred123", fileName = "credential.pdf"; + byte[] fileBytes = "Sample PDF".getBytes(); + WalletCredentialResponseDTO responseDTO; @Before public void setup() throws IOException { @@ -79,6 +86,7 @@ public void setup() throws IOException { getRequestContent = EntityUtils.toString(new UrlEncodedFormEntity(List.of( new BasicNameValuePair("locale", locale) ))); + responseDTO = new WalletCredentialResponseDTO(new InputStreamResource(new ByteArrayInputStream(fileBytes)), fileName); } @Test @@ -87,9 +95,10 @@ public void shouldDownloadCredentialForValidWalletAndDetails() throws Exception when(walletCredentialService.fetchAndStoreCredential(anyString(), anyString(), any(), anyString(), anyString(), anyString(), anyString())) .thenReturn(verifiableCredentialResponseDTO); - mockMvc.perform(post(String.format("/wallets/%s/credentials",walletId)) + mockMvc.perform(post(String.format("/wallets/%s/credentials", walletId)) .accept(MediaType.APPLICATION_JSON) .sessionAttr("wallet_key", "mockWalletKey") + .sessionAttr("wallet_id", walletId) .contentType(MediaType.APPLICATION_FORM_URLENCODED) .content(postRequestContent)) .andExpect(status().isOk()) @@ -101,22 +110,46 @@ public void shouldDownloadCredentialForValidWalletAndDetails() throws Exception } @Test - public void shouldThrowMissingWalletKeyWhileDownloadingCredentialsIfWalletKeyIsMissing() throws Exception { - mockMvc.perform(post(String.format("/wallets/%s/credentials",walletId)) + public void shouldThrowExceptionIfWalletIdIsMissingWhileDownloadingCredential() throws Exception { + mockMvc.perform(get(String.format("/wallets/%s/credentials", walletId)) + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .content(getRequestContent)) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-054")) + .andExpect(jsonPath("$.errorMessage").value("Wallet Id is missing in session")); + } + + @Test + public void shouldThrowExceptionIfReceivedWalletIdAndSessionWalletIdMismatchWhileDownloadCredential() throws Exception { + mockMvc.perform(get(String.format("/wallets/%s/credentials", walletId)) + .sessionAttr("wallet_id", "wallet124") + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .content(getRequestContent)) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-054")) + .andExpect(jsonPath("$.errorMessage").value("Invalid Wallet Id. Session and request Wallet Id do not match")); + } + + @Test + public void shouldThrowExceptionIfWalletKeyIsMissingWhileDownloadingCredential() throws Exception { + mockMvc.perform(post(String.format("/wallets/%s/credentials", walletId)) + .sessionAttr("wallet_id", walletId) .contentType(MediaType.APPLICATION_FORM_URLENCODED) .content(postRequestContent)) .andExpect(status().isInternalServerError()) .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-053")) - .andExpect(jsonPath("$.errorMessage").value("Wallet key is missing in session")); + .andExpect(jsonPath("$.errorMessage").value("Wallet Key is missing in session")); } + @Test public void shouldThrowExceptionOnFetchingTokenResponseFailure() throws Exception { when(credentialUtilService.getTokenResponse(anyMap(), eq(issuer))) .thenThrow(new IdpException("Exception occurred while performing the authorization")); - mockMvc.perform(post(String.format("/wallets/%s/credentials",walletId)) + mockMvc.perform(post(String.format("/wallets/%s/credentials", walletId)) .sessionAttr("wallet_key", mockWalletKey) + .sessionAttr("wallet_id", walletId) .contentType(MediaType.APPLICATION_FORM_URLENCODED) .content(postRequestContent)) .andExpect(status().isInternalServerError()) @@ -129,8 +162,9 @@ public void shouldThrowExceptionOnFetchingIssuerOrAuthServerWellknownFailureDuri Mockito.when(credentialUtilService.getTokenResponse(Mockito.anyMap(), eq(issuer))) .thenThrow(new ApiNotAccessibleException()); - mockMvc.perform(post(String.format("/wallets/%s/credentials",walletId)) + mockMvc.perform(post(String.format("/wallets/%s/credentials", walletId)) .sessionAttr("wallet_key", mockWalletKey) + .sessionAttr("wallet_id", walletId) .contentType(MediaType.APPLICATION_FORM_URLENCODED) .content(postRequestContent)) .andExpect(status().isBadRequest()) @@ -144,8 +178,9 @@ public void shouldThrowExceptionOnDatabaseConnectionFailureDuringCredentialDownl when(walletCredentialService.fetchAndStoreCredential(anyString(), anyString(), any(), anyString(), anyString(), anyString(), anyString())) .thenThrow(new DataAccessResourceFailureException("Exception occurred when connecting to the database to store the credential response")); - mockMvc.perform(post(String.format("/wallets/%s/credentials",walletId)) + mockMvc.perform(post(String.format("/wallets/%s/credentials", walletId)) .sessionAttr("wallet_key", mockWalletKey) + .sessionAttr("wallet_id", walletId) .contentType(MediaType.APPLICATION_FORM_URLENCODED) .content(postRequestContent)) .andExpect(status().isInternalServerError()) @@ -158,8 +193,9 @@ public void shouldThrowExceptionOnAnyErrorOccurredDuringCredentialDownload() thr when(httpSession.getAttribute("wallet_key")).thenReturn(mockWalletKey); when(credentialUtilService.getTokenResponse(anyMap(), anyString())).thenThrow(new RuntimeException("Unexpected error occurred while downloading credential")); - mockMvc.perform(post(String.format("/wallets/%s/credentials",walletId)) + mockMvc.perform(post(String.format("/wallets/%s/credentials", walletId)) .sessionAttr("wallet_key", mockWalletKey) + .sessionAttr("wallet_id", walletId) .contentType(MediaType.APPLICATION_FORM_URLENCODED) .content(postRequestContent)) .andExpect(status().isInternalServerError()) @@ -173,21 +209,44 @@ public void shouldFetchAllCredentialsForValidWalletAndDetails() throws Exception when(walletCredentialService.fetchAllCredentialsForWallet(walletId, mockWalletKey, locale)).thenReturn(mockList); - mockMvc.perform(get(String.format("/wallets/%s/credentials",walletId)) + mockMvc.perform(get(String.format("/wallets/%s/credentials", walletId)) .sessionAttr("wallet_key", mockWalletKey) + .sessionAttr("wallet_id", walletId) .contentType(MediaType.APPLICATION_FORM_URLENCODED) .content(getRequestContent)) .andExpect(status().isOk()); } @Test - public void shouldThrowMissingWalletKeyWhileFetchingAllCredentialsIfWalletKeyIsMissing() throws Exception { - mockMvc.perform(get(String.format("/wallets/%s/credentials",walletId)) + public void shouldThrowExceptionIfWalletIdIsMissingWhileFetchingAllCredentials() throws Exception { + mockMvc.perform(get(String.format("/wallets/%s/credentials", walletId)) + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .content(getRequestContent)) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-054")) + .andExpect(jsonPath("$.errorMessage").value("Wallet Id is missing in session")); + } + + @Test + public void shouldThrowExceptionIfReceivedWalletIdAndSessionWalletIdMismatchWhileFetchingAllCredentials() throws Exception { + mockMvc.perform(get(String.format("/wallets/%s/credentials", walletId)) + .sessionAttr("wallet_id", "wallet124") + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .content(getRequestContent)) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-054")) + .andExpect(jsonPath("$.errorMessage").value("Invalid Wallet Id. Session and request Wallet Id do not match")); + } + + @Test + public void shouldThrowExceptionIfWalletKeyIsMissingWhileFetchingAllCredentials() throws Exception { + mockMvc.perform(get(String.format("/wallets/%s/credentials", walletId)) + .sessionAttr("wallet_id", walletId) .contentType(MediaType.APPLICATION_FORM_URLENCODED) .content(getRequestContent)) .andExpect(status().isInternalServerError()) .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-054")) - .andExpect(jsonPath("$.errorMessage").value("Wallet key is missing in session")); + .andExpect(jsonPath("$.errorMessage").value("Wallet Key is missing in session")); } @Test @@ -195,8 +254,9 @@ public void shouldThrowExceptionOnDatabaseConnectionFailureWhileFetchingCredenti when(walletCredentialService.fetchAllCredentialsForWallet(walletId, mockWalletKey, locale)) .thenThrow(new DataAccessResourceFailureException("Exception occurred when connecting to the database to store the credential response")); - mockMvc.perform(get(String.format("/wallets/%s/credentials",walletId)) + mockMvc.perform(get(String.format("/wallets/%s/credentials", walletId)) .sessionAttr("wallet_key", mockWalletKey) + .sessionAttr("wallet_id", walletId) .contentType(MediaType.APPLICATION_FORM_URLENCODED) .content(getRequestContent)) .andExpect(status().isInternalServerError()) @@ -210,12 +270,108 @@ public void shouldThrowExceptionOnAnyErrorOccurredWhileFetchingCredentials() thr when(walletCredentialService.fetchAllCredentialsForWallet(anyString(), anyString(), anyString())) .thenThrow(new RuntimeException("Unexpected error occurred while fetching wallet credentials")); - mockMvc.perform(get(String.format("/wallets/%s/credentials",walletId)) + mockMvc.perform(get(String.format("/wallets/%s/credentials", walletId)) .sessionAttr("wallet_key", "mockWalletKey") + .sessionAttr("wallet_id", walletId) .contentType(MediaType.APPLICATION_FORM_URLENCODED) .content(getRequestContent)) .andExpect(status().isInternalServerError()) .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-054")) .andExpect(jsonPath("$.errorMessage").value("Unexpected error occurred while fetching wallet credentials")); } + + + @Test + public void shouldReturnPDFByteStreamWithInlineContentDispositionInHeaderForValidRequestWithActionAsPreview() throws Exception { + Mockito.when(walletCredentialService.fetchVerifiableCredential(walletId, credentialId, mockWalletKey, "en")) + .thenReturn(responseDTO); + + mockMvc.perform(get(String.format("/wallets/%s/credentials/%s", walletId, credentialId)) + .param("locale", "en") + .param("action", "preview") + .sessionAttr("wallet_key", mockWalletKey) + .sessionAttr("wallet_id", walletId)) + .andExpect(status().isOk()) + .andExpect(header().string(HttpHeaders.CONTENT_DISPOSITION, "inline; filename=\"credential.pdf\"")) + .andExpect(content().contentType(MediaType.APPLICATION_PDF)); + } + + @Test + public void shouldReturnPDFByteStreamWithAttachmentContentDispositionInHeaderForValidRequestWithActionAsDownload() throws Exception { + Mockito.when(walletCredentialService.fetchVerifiableCredential(walletId, credentialId, mockWalletKey, "en")) + .thenReturn(responseDTO); + + mockMvc.perform(get(String.format("/wallets/%s/credentials/%s", walletId, credentialId)) + .param("locale", "en") + .param("action", "download") + .sessionAttr("wallet_key", mockWalletKey) + .sessionAttr("wallet_id", walletId)) + .andExpect(status().isOk()) + .andExpect(header().string(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"credential.pdf\"")) + .andExpect(content().contentType(MediaType.APPLICATION_PDF)); + } + + @Test + public void shouldThrowExceptionIfWalletIdIsMissingWhileFetchingCredential() throws Exception { + mockMvc.perform(get(String.format("/wallets/%s/credentials/%s", walletId, credentialId)) + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .content(getRequestContent)) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-055")) + .andExpect(jsonPath("$.errorMessage").value("Wallet Id is missing in session")); + } + + @Test + public void shouldThrowExceptionIfReceivedWalletIdAndSessionWalletIdMismatchWhileFetchingCredential() throws Exception { + mockMvc.perform(get(String.format("/wallets/%s/credentials/%s", walletId, credentialId)) + .sessionAttr("wallet_id", "wallet124") + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .content(getRequestContent)) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-055")) + .andExpect(jsonPath("$.errorMessage").value("Invalid Wallet Id. Session and request Wallet Id do not match")); + } + + @Test + public void shouldThrowExceptionIfWalletKeyIsMissingWhileFetchingAllCredential() throws Exception { + mockMvc.perform(get(String.format("/wallets/%s/credentials/%s", walletId, credentialId)) + .sessionAttr("wallet_id", walletId) + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .content(getRequestContent)) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-055")) + .andExpect(jsonPath("$.errorMessage").value("Wallet Key is missing in session")); + } + + @Test + public void shouldThrowExceptionOnDatabaseConnectionFailureWhileFetchingCredential() throws Exception { + Mockito.when(walletCredentialService.fetchVerifiableCredential(eq(walletId), eq(credentialId), anyString(), eq("en"))) + .thenThrow(new DataAccessResourceFailureException("Exception occurred when connecting to the database to fetch the Verifiable credential")); + + mockMvc.perform(get(String.format("/wallets/%s/credentials/%s", walletId, credentialId)) + .param("locale", "en") + .param("action", "download") + .sessionAttr("wallet_key", mockWalletKey) + .sessionAttr("wallet_id", walletId)) + .andExpect(status().isInternalServerError()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON)) + .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-047")) + .andExpect(jsonPath("$.errorMessage").value("Failed to connect to the shared database while Fetching Verifiable Credential data into the database")); + } + + @Test + public void shouldThrowExceptionOnAnyErrorOccurredWhileFetchingCredential() throws Exception { + Mockito.when(walletCredentialService.fetchVerifiableCredential(eq(walletId), eq(credentialId), anyString(), eq("en"))) + .thenThrow(new RuntimeException("Unexpected error occurred while fetching wallet credentials")); + + mockMvc.perform(get(String.format("/wallets/%s/credentials/%s", walletId, credentialId)) + .param("locale", "en") + .param("action", "download") + .sessionAttr("wallet_key", mockWalletKey) + .sessionAttr("wallet_id", walletId)) + .andExpect(status().isInternalServerError()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON)) + .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-055")) + .andExpect(jsonPath("$.errorMessage").value("Unexpected error occurred while fetching wallet credentials")); + } } diff --git a/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java index 2a9454bb7..86f73b636 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java @@ -6,8 +6,8 @@ import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.exception.*; import io.mosip.mimoto.model.QRCodeType; -import io.mosip.mimoto.model.SigningAlgorithm; import io.mosip.mimoto.service.impl.CredentialServiceImpl; +import io.mosip.mimoto.service.impl.DataShareServiceImpl; import io.mosip.mimoto.service.impl.IdpServiceImpl; import io.mosip.mimoto.service.impl.IssuersServiceImpl; import io.mosip.mimoto.util.*; @@ -72,6 +72,9 @@ public class CredentialServiceTest { @Mock Utilities utilities; + @Mock + DataShareServiceImpl dataShareService; + TokenResponseDTO expectedTokenResponse; String tokenEndpoint, issuerId, expectedExceptionMsg; IssuerDTO issuerDTO; @@ -134,22 +137,20 @@ public void shouldReturnDownloadedVCAsPDFIfSignatureVerificationIsSuccessful() t when(credentialUtilService.generateVCCredentialRequest(any(IssuerDTO.class), any(CredentialIssuerWellKnownResponse.class), any(CredentialsSupportedResponse.class), - any(String.class), any(), any(),eq(false))).thenReturn(getVCCredentialRequestDTO()); + any(String.class), any(), any(), eq(false))).thenReturn(getVCCredentialRequestDTO()); VCCredentialResponse vcCredentialResponse = getVCCredentialResponseDTO("CredentialType1"); when(credentialUtilService.downloadCredential(any(String.class), any(VCCredentialRequest.class), any(String.class))).thenReturn(vcCredentialResponse); when(credentialUtilService.verifyCredential(vcCredentialResponse)).thenReturn(true); issuerDTO.setQr_code_type(QRCodeType.None); - Mockito.when(utilities.getCredentialSupportedTemplateString(issuerDTO.getIssuer_id(), "CredentialType1")).thenReturn("

PDF

"); + ByteArrayInputStream expectedPDFByteArray = generatePdfFromHTML(); + Mockito.when(credentialUtilService.generatePdfForVerifiableCredentials("CredentialType1", vcCredentialResponse, issuerDTO, issuerConfig.getCredentialConfigurationsSupported().get("CredentialType1"), "", "once", "en")).thenReturn(expectedPDFByteArray); ByteArrayInputStream actualPDFByteArray = credentialService.downloadCredentialAsPDF(issuerId, "CredentialType1", expectedTokenResponse, "once", "en"); - String expectedText = extractTextFromPdf(expectedPDFByteArray); - String actualText = extractTextFromPdf(actualPDFByteArray); - - assertEquals(expectedText, actualText); + assertEquals(expectedPDFByteArray, actualPDFByteArray); } } diff --git a/src/test/java/io/mosip/mimoto/service/CredentialUtilServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialUtilServiceTest.java index d1209cec0..12692c1ca 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialUtilServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialUtilServiceTest.java @@ -7,7 +7,7 @@ import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.exception.IdpException; import io.mosip.mimoto.exception.VCVerificationException; -import io.mosip.mimoto.model.SigningAlgorithm; +import io.mosip.mimoto.model.QRCodeType; import io.mosip.mimoto.service.impl.IdpServiceImpl; import io.mosip.mimoto.service.impl.IssuersServiceImpl; import io.mosip.mimoto.util.*; @@ -28,8 +28,11 @@ import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; + +import java.io.ByteArrayInputStream; import java.util.List; import java.util.Map; + import static io.mosip.mimoto.util.TestUtilities.*; import static org.junit.Assert.*; import static org.mockito.ArgumentMatchers.any; @@ -40,7 +43,7 @@ @Slf4j public class CredentialUtilServiceTest { @InjectMocks - private CredentialUtilService credentialUtilService; + CredentialUtilService credentialUtilService; @Mock RestTemplate restTemplate; @Mock @@ -56,6 +59,9 @@ public class CredentialUtilServiceTest { @Mock ObjectMapper objectMapper; + @Mock + Utilities utilities; + private Map tokenRequestParams = Map.of( "grant_type", "client_credentials", "client_id", "test-client" @@ -205,4 +211,20 @@ public void shouldThrowExceptionIfDownloadedResponseContainsSigningAlgoNotSuppor assertEquals("Unsupported signing algorithm: ps256", actualError.getMessage()); } + + @Test + public void shouldSuccessfullyGeneratePdfForVerifiableCredential() throws Exception { + VCCredentialResponse vcCredentialResponse = getVCCredentialResponseDTO("CredentialType1"); + issuerDTO.setQr_code_type(QRCodeType.None); + Mockito.when(utilities.getCredentialSupportedTemplateString(issuerDTO.getIssuer_id(), "CredentialType1")).thenReturn("

PDF

"); + ByteArrayInputStream expectedPDFByteArray = generatePdfFromHTML(); + + ByteArrayInputStream actualPDFByteArray = + credentialUtilService.generatePdfForVerifiableCredentials("CredentialType1", vcCredentialResponse, issuerDTO, issuerConfig.getCredentialConfigurationsSupported().get("CredentialType1"), "https://datashare_url", "once", "en"); + + String expectedText = extractTextFromPdf(expectedPDFByteArray); + String actualText = extractTextFromPdf(actualPDFByteArray); + + assertEquals(expectedText, actualText); + } } diff --git a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java index 450657dfd..a02f70d6a 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java @@ -6,6 +6,7 @@ import io.mosip.mimoto.dto.*; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.*; +import io.mosip.mimoto.dto.resident.WalletCredentialResponseDTO; import io.mosip.mimoto.exception.*; import io.mosip.mimoto.repository.WalletCredentialsRepository; import io.mosip.mimoto.service.impl.*; @@ -17,7 +18,10 @@ import org.springframework.test.context.junit4.SpringRunner; import org.springframework.web.client.RestTemplate; +import java.io.ByteArrayInputStream; import java.util.*; + +import static io.mosip.mimoto.exception.ErrorConstants.SIGNATURE_VERIFICATION_EXCEPTION; import static io.mosip.mimoto.util.TestUtilities.*; import static org.junit.Assert.*; import static org.mockito.Mockito.*; @@ -150,12 +154,12 @@ public void shouldIncludeEmptyCredentialDetailsInResponseIfAnyErrorOccurredWhile } @Test - public void shouldNotThrowExceptionOnVerificationFailureDuringVCDownloaded() throws Exception { + public void shouldThrowExceptionOnVerificationFailureDuringVCDownloaded() throws Exception { VCCredentialResponse vcResponse = new VCCredentialResponse(); String encryptedCredential = "encryptedCredential"; - + VCVerificationException expectedException = new VCVerificationException(SIGNATURE_VERIFICATION_EXCEPTION.getErrorCode(), + SIGNATURE_VERIFICATION_EXCEPTION.getErrorMessage()); VerifiableCredential vc = getVerifiableCredential("vc-id-123", walletId, "encryptedCredential", issuerId, credentialType); - VerifiableCredentialResponseDTO expectedVerifiableCredentialResponseDTO = getVerifiableCredentialResponseDTO("issuer name", "https://issuer_logo_url", credentialType, "https://logo", "vc-id-123"); when(issuersService.getIssuerDetails(issuerId)).thenReturn(getMockIssuerDTO()); when(issuersService.getIssuerConfiguration(issuerId)).thenReturn(issuerConfig); @@ -165,16 +169,165 @@ public void shouldNotThrowExceptionOnVerificationFailureDuringVCDownloaded() thr when(encryptionDecryptionUtil.encryptWithAES(any(), any())).thenReturn(encryptedCredential); when(walletCredentialsRepository.save(any())).thenReturn(vc); - VerifiableCredentialResponseDTO actualVerifiableCredentialResponseDTO = walletCredentialService.fetchAndStoreCredential( + VCVerificationException actualException = assertThrows(VCVerificationException.class, () -> walletCredentialService.fetchAndStoreCredential( issuerId, credentialType, tokenResponse, "1", "en", walletId, base64Key + )); + + assertEquals(expectedException.getErrorCode(), actualException.getErrorCode()); + assertEquals(expectedException.getErrorText(), actualException.getErrorText()); + } + + @Test + public void shouldFetchVerifiableCredentialSuccessfully() throws Exception { + String credentialId = "cred123"; + String base64Key = Base64.getEncoder().encodeToString("dummykey12345678".getBytes()); + String locale = "en"; + String issuerId = "issuer123"; + String credentialType = "CredentialType1"; + String dataShareUrl = "https://datashare.url"; + String credentialValidity = "1"; + String encryptedCredential = "encryptedCredential"; + String decryptedCredential = "{\"credential\":\"test\"}"; + byte[] pdfBytes = "PDF Content".getBytes(); // Dummy PDF content + ByteArrayInputStream inputStream = new ByteArrayInputStream(pdfBytes); + + VerifiableCredential verifiableCredential = getVerifiableCredential(credentialId, walletId, encryptedCredential, issuerId, credentialType); + verifiableCredential.getCredentialMetadata().setDataShareUrl(dataShareUrl); + verifiableCredential.getCredentialMetadata().setCredentialValidity(credentialValidity); + + VCCredentialResponse vcResponse = new VCCredentialResponse(); + CredentialIssuerConfiguration issuerConfig = getCredentialIssuerConfigurationResponseDto(issuerId, credentialType, List.of()); + + // Create proper display objects + CredentialSupportedDisplayResponse display = new CredentialSupportedDisplayResponse(); + display.setName(credentialType); + display.setLocale(locale); + + CredentialsSupportedResponse credentialsSupportedResponse = new CredentialsSupportedResponse(); + credentialsSupportedResponse.setDisplay(List.of(display)); + + // Create proper issuer well-known response + CredentialIssuerWellKnownResponse wellKnownResponse = new CredentialIssuerWellKnownResponse(); + Map configs = new HashMap<>(); + configs.put(credentialType, credentialsSupportedResponse); + wellKnownResponse.setCredentialConfigurationsSupported(configs); + + when(walletCredentialsRepository.findByIdAndWalletId(credentialId, walletId)).thenReturn(Optional.of(verifiableCredential)); + when(encryptionDecryptionUtil.decryptCredential(encryptedCredential, base64Key)).thenReturn(decryptedCredential); + when(issuersService.getIssuerDetails(issuerId)).thenReturn(getMockIssuerDTO()); + when(issuersService.getIssuerConfiguration(issuerId)).thenReturn(issuerConfig); + when(objectMapper.readValue(decryptedCredential, VCCredentialResponse.class)).thenReturn(vcResponse); + when(credentialUtilService.generatePdfForVerifiableCredentials( + anyString(), // credentialType + any(VCCredentialResponse.class), // vcResponse + any(IssuerDTO.class), // issuerDTO + any(CredentialsSupportedResponse.class), // credentialsSupportedResponse + anyString(), // dataShareUrl + anyString(), // credentialValidity + anyString() // locale + )).thenReturn(inputStream); + + WalletCredentialResponseDTO response = walletCredentialService.fetchVerifiableCredential(walletId, credentialId, base64Key, locale); + + assertNotNull(response); + assertNotNull(response.getFileContentStream()); + assertEquals(credentialType, response.getFileName()); + } + + @Test + public void shouldThrowExceptionWhenCredentialNotFound() { + String credentialId = "nonExistentCredential"; + String base64Key = Base64.getEncoder().encodeToString("dummykey12345678".getBytes()); + String locale = "en"; + + when(walletCredentialsRepository.findById(credentialId)).thenReturn(Optional.empty()); + + RuntimeException exception = assertThrows(RuntimeException.class, () -> + walletCredentialService.fetchVerifiableCredential(walletId, credentialId, base64Key, locale) ); - ArgumentCaptor verifiableCredentialArgumentCaptor = ArgumentCaptor.forClass(VerifiableCredential.class); - verify(walletCredentialsRepository).save(verifiableCredentialArgumentCaptor.capture()); + assertEquals("Credential not found", exception.getMessage()); + } - VerifiableCredential captureVerifiableCredential = verifiableCredentialArgumentCaptor.getValue(); + @Test + public void shouldThrowExceptionWhenDecryptionFails() throws Exception { + String credentialId = "cred123"; + String base64Key = Base64.getEncoder().encodeToString("dummykey12345678".getBytes()); + String locale = "en"; + String encryptedCredential = "encryptedCredential"; - assertEquals(expectedVerifiableCredentialResponseDTO, actualVerifiableCredentialResponseDTO); - assertEquals(false, captureVerifiableCredential.getCredentialMetadata().getIsVerified()); + VerifiableCredential verifiableCredential = getVerifiableCredential(credentialId, walletId, encryptedCredential, issuerId, credentialType); + + when(walletCredentialsRepository.findByIdAndWalletId(credentialId, walletId)).thenReturn(Optional.of(verifiableCredential)); + when(encryptionDecryptionUtil.decryptCredential(encryptedCredential, base64Key)) + .thenThrow(new RuntimeException("Decryption failed")); + + RuntimeException exception = assertThrows(RuntimeException.class, () -> + walletCredentialService.fetchVerifiableCredential(walletId, credentialId, base64Key, locale) + ); + + assertEquals("Decryption failed", exception.getMessage()); + } + + @Test + public void shouldThrowExceptionWhenIssuerConfigurationRetrievalFails() throws Exception { + String credentialId = "cred123"; + String base64Key = Base64.getEncoder().encodeToString("dummykey12345678".getBytes()); + String locale = "en"; + String encryptedCredential = "encryptedCredential"; + String decryptedCredential = "{\"credential\":\"test\"}"; + + VerifiableCredential verifiableCredential = getVerifiableCredential(credentialId, walletId, encryptedCredential, issuerId, credentialType); + + when(walletCredentialsRepository.findByIdAndWalletId(credentialId, walletId)).thenReturn(Optional.of(verifiableCredential)); + when(encryptionDecryptionUtil.decryptCredential(encryptedCredential, base64Key)).thenReturn(decryptedCredential); + when(issuersService.getIssuerDetails(issuerId)).thenThrow(new ApiNotAccessibleException()); + + ApiNotAccessibleException exception = assertThrows(ApiNotAccessibleException.class, () -> + walletCredentialService.fetchVerifiableCredential(walletId, credentialId, base64Key, locale) + ); + + assertNotNull(exception); + } + + @Test + public void shouldThrowExceptionWhenPdfGenerationFails() throws Exception { + String credentialId = "cred123"; + String base64Key = Base64.getEncoder().encodeToString("dummykey12345678".getBytes()); + String locale = "en"; + String encryptedCredential = "encryptedCredential"; + String decryptedCredential = "{\"credential\":\"test\"}"; + String issuerId = "issuer123"; + String credentialType = "CredentialType1"; + String dataShareUrl = "https://datashare.url"; + String credentialValidity = "1"; + + VerifiableCredential verifiableCredential = getVerifiableCredential(credentialId, walletId, encryptedCredential, issuerId, credentialType); + verifiableCredential.getCredentialMetadata().setDataShareUrl(dataShareUrl); + verifiableCredential.getCredentialMetadata().setCredentialValidity(credentialValidity); + + VCCredentialResponse vcResponse = new VCCredentialResponse(); + CredentialIssuerConfiguration issuerConfig = getCredentialIssuerConfigurationResponseDto(issuerId, credentialType, List.of()); + + when(walletCredentialsRepository.findByIdAndWalletId(credentialId, walletId)).thenReturn(Optional.of(verifiableCredential)); + when(encryptionDecryptionUtil.decryptCredential(encryptedCredential, base64Key)).thenReturn(decryptedCredential); + when(issuersService.getIssuerDetails(issuerId)).thenReturn(getMockIssuerDTO()); + when(issuersService.getIssuerConfiguration(issuerId)).thenReturn(issuerConfig); + when(objectMapper.readValue(decryptedCredential, VCCredentialResponse.class)).thenReturn(vcResponse); + when(credentialUtilService.generatePdfForVerifiableCredentials( + anyString(), // credentialType + any(VCCredentialResponse.class), // vcCredentialResponse + any(IssuerDTO.class), // issuerDTO + any(CredentialsSupportedResponse.class), // credentialsSupportedResponse + anyString(), // dataShareUrl + anyString(), // credentialValidity + anyString() // locale + )).thenThrow(new RuntimeException("PDF generation failed")); + + RuntimeException exception = assertThrows(RuntimeException.class, () -> + walletCredentialService.fetchVerifiableCredential(walletId, credentialId, base64Key, locale) + ); + + assertEquals("PDF generation failed", exception.getMessage()); } } From 89962084ced1582db03e5cc4fed39db439a666df Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 14 Apr 2025 17:29:20 +0530 Subject: [PATCH 522/860] injiweb-1518 added new endpoint to authenticate from postman Signed-off-by: Gurpreet41082 --- .../MIMOTO.postman_collection.json | 382 +++++++++++------- .../java/io/mosip/mimoto/config/Config.java | 11 +- .../controller/TokenAuthController.java | 41 ++ .../mimoto/controller/WalletsController.java | 12 +- .../OAuth2AuthenticationSuccessHandler.java | 17 +- .../service/SecurityContextService.java | 22 + .../io/mosip/mimoto/service/TokenService.java | 8 + .../service/impl/GoogleTokenService.java | 102 +++++ 8 files changed, 442 insertions(+), 153 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/controller/TokenAuthController.java create mode 100644 src/main/java/io/mosip/mimoto/service/SecurityContextService.java create mode 100644 src/main/java/io/mosip/mimoto/service/TokenService.java create mode 100644 src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java diff --git a/docs/postman-collections/MIMOTO.postman_collection.json b/docs/postman-collections/MIMOTO.postman_collection.json index 14e640b1d..d114c07a7 100644 --- a/docs/postman-collections/MIMOTO.postman_collection.json +++ b/docs/postman-collections/MIMOTO.postman_collection.json @@ -1,9 +1,9 @@ { "info": { - "_postman_id": "070c5a99-ffc3-48fb-9259-d9170916c728", + "_postman_id": "a2fb8c1d-d7ac-42a5-9587-aeae9a216ba0", "name": "MIMOTO", - "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json", - "_exporter_id": "26539037" + "schema": "https://schema.getpostman.com/json/collection/v2.0.0/collection.json", + "_exporter_id": "10750965" }, "item": [ { @@ -14,16 +14,7 @@ "request": { "method": "GET", "header": [], - "url": { - "raw": "{{HOST}}/issuers", - "host": [ - "{{HOST}}" - ], - "path": [ - "issuers", - "" - ] - } + "url": "{{HOST}}/issuers/" }, "response": [] }, @@ -32,16 +23,7 @@ "request": { "method": "GET", "header": [], - "url": { - "raw": "{{HOST}}/issuers/StayProtected", - "host": [ - "{{HOST}}" - ], - "path": [ - "issuers", - "StayProtected" - ] - } + "url": "{{HOST}}/issuers/StayProtected" }, "response": [] }, @@ -50,17 +32,7 @@ "request": { "method": "GET", "header": [], - "url": { - "raw": "{{HOST}}/issuers/StayProtected/well-known-proxy", - "host": [ - "{{HOST}}" - ], - "path": [ - "issuers", - "StayProtected", - "well-known-proxy" - ] - } + "url": "{{HOST}}/issuers/StayProtected/well-known-proxy" }, "response": [] }, @@ -69,17 +41,7 @@ "request": { "method": "GET", "header": [], - "url": { - "raw": "{{HOST}}/issuers/StayProtected/configuration", - "host": [ - "{{HOST}}" - ], - "path": [ - "issuers", - "StayProtected", - "configuration" - ] - } + "url": "{{HOST}}/issuers/StayProtected/configuration" }, "response": [] }, @@ -156,16 +118,7 @@ } ] }, - "url": { - "raw": "{{HOST}}/credentials/download", - "host": [ - "{{HOST}}" - ], - "path": [ - "credentials", - "download" - ] - } + "url": "{{HOST}}/credentials/download" }, "response": [] }, @@ -227,16 +180,7 @@ } } }, - "url": { - "raw": "{{HOST}}/req/otp", - "host": [ - "{{HOST}}" - ], - "path": [ - "req", - "otp" - ] - } + "url": "{{HOST}}/req/otp" }, "response": [] }, @@ -265,16 +209,7 @@ } } }, - "url": { - "raw": "{{HOST}}/credentialshare/request", - "host": [ - "{{HOST}}" - ], - "path": [ - "credentialshare", - "request" - ] - } + "url": "{{HOST}}/credentialshare/request" }, "response": [] }, @@ -295,18 +230,7 @@ } } }, - "url": { - "raw": "{{HOST}}/credentialshare/request/status/c0fc00ae-6fc7-4e9f-b818-f51827582c2f", - "host": [ - "{{HOST}}" - ], - "path": [ - "credentialshare", - "request", - "status", - "c0fc00ae-6fc7-4e9f-b818-f51827582c2f" - ] - } + "url": "{{HOST}}/credentialshare/request/status/c0fc00ae-6fc7-4e9f-b818-f51827582c2f" }, "response": [] }, @@ -335,16 +259,7 @@ } } }, - "url": { - "raw": "{{HOST}}/credentialshare/download", - "host": [ - "{{HOST}}" - ], - "path": [ - "credentialshare", - "download" - ] - } + "url": "{{HOST}}/credentialshare/download" }, "response": [] } @@ -371,15 +286,7 @@ "mode": "raw", "raw": "{\n \"requestTime\": \"{{$isoTimestamp}}\",\n \"request\": {\n \"individualId\": \"4536710485\",\n \"otpChannels\": [\n \"EMAIL\",\n \"PHONE\"\n ]\n }\n}" }, - "url": { - "raw": "{{HOST}}/binding-otp", - "host": [ - "{{HOST}}" - ], - "path": [ - "binding-otp" - ] - } + "url": "{{HOST}}/binding-otp" }, "response": [] }, @@ -401,15 +308,7 @@ "mode": "raw", "raw": "{\n \"requestTime\": \"{{$isoTimestamp}}\",\n \"request\": {\n \"individualId\": \"6148072053\",\n \"challengeList\": [\n {\n \"authFactorType\": \"OTP\",\n \"challenge\": \"111111\",\n \"format\": \"alpha-numeric\"\n }\n ],\n \"publicKey\": \"-----BEGIN RSA PUBLIC KEY-----\\nMIICCgKCAgEArk/N6Us8TkfH+r1UGCqTGWegJ3UzqHXmj49uE3l9ygIPrTB7Hee8\\ntiVnlNKcQR/7EipumAcNzOFzaysUUIX8rh/QSdlwYYXvC4OT9fLg5tmToYc5x3pN\\nO1k7qg9fnMb/Ksr4D95xUUxQjMLlbojBNWjLhvdP4da1gWUeAdfjIfyLjZGYiD8r\\nUqsVqOfmrec9Y0nLsIsUq735NVl2WIP9mMfjXuRId4MgEE3mN6x/Gj9Ov0AWfb48\\n22wLgybggTdIJZlCBAnPn/n+oiowqUdXADAB4CIaVH8hDJ1fz3Ag2RetriqwrcLF\\nVSK+PyVuLD261BhIeQrgyHdKC6qilVBOYIMqtXjazCdjGICNFoEa1nVP6mu85RN1\\ny8TTS+4ATUTm44++TFSNfsEEpagvd6O/BWlj6mJNGB9dmtEohowwR5fcSHgKbGtP\\ng5J49fKeSDapEln2A/xL7Ubk8KFzzgcQvPWttGaazs7tqdOE4iOMkI72XFbyvIVz\\nzwQEB7vOuRJRclP30SkcR81u694vCtXJ2t2pFUMQVJXat9ypg5BtiZMwBtAnc0Pz\\nDWdGCR5LIpJIaDISmPumHGAzeeRfREbsoVaCdi99vORoxBjuscpEOa5+MgYDKM3S\\nsJZWl2E2/7Kt9KCRVJoqeEkFFKq696zKVD3qbhbZJG3TjBcgYfbN2jMCAwEAAQ==\\n-----END RSA PUBLIC KEY-----\\n\",\n \"authFactorType\": \"WLA\",\n \"format\": \"jwt\"\n }\n}" }, - "url": { - "raw": "{{HOST}}/wallet-binding", - "host": [ - "{{HOST}}" - ], - "path": [ - "wallet-binding" - ] - } + "url": "{{HOST}}/wallet-binding" }, "response": [] } @@ -420,16 +319,206 @@ "item": [ { "name": "Get Verifiers List", + "request": { + "method": "GET", + "header": [], + "url": "{{HOST}}/verifiers" + }, + "response": [] + } + ] + }, + { + "name": "Wallets", + "item": [ + { + "name": "Create Wallet", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\"walletName\" : \"default\",\n\"walletPin\":123456}" + }, + "url": "{{HOST}}/wallets" + }, + "response": [] + }, + { + "name": "Get Wallets", + "request": { + "method": "GET", + "header": [], + "url": "{{HOST}}/wallets" + }, + "response": [] + }, + { + "name": "Unlock Wallet", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"walletPin\": \"\"\n}" + }, + "url": "{{HOST}}/wallets//unlock" + }, + "response": [] + } + ] + }, + { + "name": "Users", + "item": [ + { + "name": "Get User Profile (DB)", + "request": { + "method": "GET", + "header": [], + "url": "{{HOST}}/users/me/db" + }, + "response": [] + }, + { + "name": "Get User Profile (Cache)", + "request": { + "method": "GET", + "header": [ + { + "key": "Cookie", + "value": "SESSION={{SESSION_TOKEN}}", + "type": "text" + } + ], + "url": "{{HOST}}/users/me/cache" + }, + "response": [] + } + ] + }, + { + "name": "Wallet Credentials", + "item": [ + { + "name": "Save Credential", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "grant_type", + "value": "authorization_code", + "type": "text" + }, + { + "key": "code", + "value": "GL9N1V-zW_OFgLSa2VBANv8qz6XOxh3yBkoaonjplms", + "type": "text" + }, + { + "key": "redirect_uri", + "value": "https://injiweb.dev1.mosip.net/redirect", + "type": "text" + }, + { + "key": "code_verifier", + "value": "Sq6nZNToevtx8LX-H2LI_~_Ds9vZGAImDKYjXw70LCJ", + "type": "text" + }, + { + "key": "issuer", + "value": "StayProtected", + "type": "text" + }, + { + "key": "credential", + "value": "InsuranceCredential", + "type": "text" + }, + { + "key": "vcStorageExpiryLimitInTimes", + "value": "1", + "type": "text" + }, + { + "key": "locale", + "value": "en", + "type": "text" + } + ] + }, + "url": "{{HOST}}/wallets//credentials" + }, + "response": [] + }, + { + "name": "Fetch All Credentials", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{HOST}}/wallets/2c72ae02-14ea-4fea-a280-2adc2588cb8b/credentials?locale=", + "host": [ + "{{HOST}}" + ], + "path": [ + "wallets", + "2c72ae02-14ea-4fea-a280-2adc2588cb8b", + "credentials" + ], + "query": [ + { + "key": "locale", + "value": "" + } + ] + } + }, + "response": [] + }, + { + "name": "View or Save Credential", "request": { "method": "GET", "header": [], "url": { - "raw": "{{HOST}}/verifiers", + "raw": "{{HOST}}/wallets//credentials/?locale=en&action=inline", "host": [ "{{HOST}}" ], "path": [ - "verifiers" + "wallets", + "", + "credentials", + "" + ], + "query": [ + { + "key": "locale", + "value": "en" + }, + { + "key": "action", + "value": "inline" + } ] } }, @@ -437,20 +526,49 @@ } ] }, + { + "name": "Authentication", + "item": [ + { + "name": "Token login", + "request": { + "auth": { + "type": "oauth2", + "oauth2": { + "accessTokenUrl": "https://oauth2.googleapis.com/token", + "scope": "profile email", + "clientSecret": "", + "clientId": "", + "redirect_uri": "http://localhost:8099/v1/mimoto/oauth2/callback/google", + "useBrowser": false, + "authUrl": "https://accounts.google.com/o/oauth2/auth?prompt=select_account", + "tokenName": "AuthToken", + "addTokenTo": "header" + } + }, + "method": "POST", + "header": [], + "url": "{{HOST}}/auth/google/token-login" + }, + "response": [] + }, + { + "name": "Logout", + "request": { + "method": "POST", + "header": [], + "url": "{{HOST}}/logout" + }, + "response": [] + } + ] + }, { "name": "All properties", "request": { "method": "GET", "header": [], - "url": { - "raw": "{{HOST}}/allProperties", - "host": [ - "{{HOST}}" - ], - "path": [ - "allProperties" - ] - } + "url": "{{HOST}}/allProperties" }, "response": [] }, @@ -468,17 +586,7 @@ } } }, - "url": { - "raw": "{{HOST}}/req/individualId/otp", - "host": [ - "{{HOST}}" - ], - "path": [ - "req", - "individualId", - "otp" - ] - } + "url": "{{HOST}}/req/individualId/otp" }, "response": [] } diff --git a/src/main/java/io/mosip/mimoto/config/Config.java b/src/main/java/io/mosip/mimoto/config/Config.java index 6dc29a6d0..9b619efac 100644 --- a/src/main/java/io/mosip/mimoto/config/Config.java +++ b/src/main/java/io/mosip/mimoto/config/Config.java @@ -9,6 +9,7 @@ import jakarta.servlet.http.Cookie; import jakarta.servlet.http.HttpSession; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; @@ -24,6 +25,8 @@ import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; import org.springframework.security.config.annotation.web.configurers.HeadersConfigurer; import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.oauth2.jwt.JwtDecoder; +import org.springframework.security.oauth2.jwt.NimbusJwtDecoder; import org.springframework.security.web.SecurityFilterChain; import org.springframework.session.SessionRepository; import org.springframework.web.cors.CorsConfiguration; @@ -152,7 +155,7 @@ private void setupOauth2Config(HttpSecurity http, SessionRepository sessionRepos "/credentialshare/**","/binding-otp","/wallet-binding","/get-token/**", "/issuers","/issuers/**","/authorize","/req/otp","/vid","/req/auth/**", "/req/individualId/otp","/aid/get-individual-id","/session/status", - "/verifiers").permitAll() + "/verifiers", "/auth/*/token-login").permitAll() // Apply the default authorization rule to all other requests, ensuring authentication is required. .anyRequest().authenticated() ).sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)); @@ -171,4 +174,10 @@ public CorsConfigurationSource corsConfigurationSource() { return source; } + @Bean + @Qualifier("googleJwtDecoder") + public JwtDecoder googleIdTokenDecoder(@Value("${spring.security.oauth2.client.provider.google.jwk-set-uri}") String jwkSetUri) { + return NimbusJwtDecoder.withJwkSetUri(jwkSetUri).build(); + } + } diff --git a/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java b/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java new file mode 100644 index 000000000..39ffb4813 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java @@ -0,0 +1,41 @@ +package io.mosip.mimoto.controller; + +import io.mosip.mimoto.service.TokenService; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Map; + +@RestController +public class TokenAuthController { + + @Autowired + private Map tokenServices; // Map of provider name to TokenService + + @PostMapping("/auth/{provider}/token-login") + public ResponseEntity createSessionFromIdToken(@RequestHeader("Authorization") String authorization, + @PathVariable("provider") String provider, + HttpServletRequest request, HttpServletResponse response) { + if (authorization != null && authorization.startsWith("Bearer ")) { + String idTokenString = authorization.substring(7); + try { + TokenService tokenService = tokenServices.get(provider); // Select TokenService by provider + if (tokenService == null) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Unsupported provider: " + provider); + } + tokenService.processToken(idTokenString, provider, request, response); + return ResponseEntity.ok(provider + " session created."); + } catch (Exception e) { + return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("Invalid or expired ID token: " + e.getMessage()); + } + } + return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("Bearer ID token required."); + } +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/controller/WalletsController.java b/src/main/java/io/mosip/mimoto/controller/WalletsController.java index 6865d6be4..e7d9ca859 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletsController.java @@ -62,10 +62,14 @@ public ResponseEntity unlockWallet(@PathVariable("walletId") try { // If wallet_key does not exist in the session, fetch it and set it in the session String walletKey = walletService.getWalletKey((String) httpSession.getAttribute("userId"), walletId, wallet.getWalletPin()); - httpSession.setAttribute("wallet_key", walletKey); - httpSession.setAttribute("wallet_id", walletId); - WalletResponseDto response = new WalletResponseDto(walletId); - return ResponseEntity.status(HttpStatus.OK).body(response); + + if (null != walletKey) { + httpSession.setAttribute("wallet_key", walletKey); + httpSession.setAttribute("wallet_id", walletId); + WalletResponseDto response = new WalletResponseDto(walletId); + return ResponseEntity.status(HttpStatus.OK).body(response); + } + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null); } catch (Exception exception) { log.error("Error occurred while retrieving user wallet ", exception); return Utilities.getErrorResponseEntityWithoutWrapper(exception, USER_WALLET_RETRIEVAL_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR,MediaType.APPLICATION_JSON); diff --git a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java index ca6589f95..53e2d0d11 100644 --- a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java +++ b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java @@ -2,28 +2,26 @@ import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; import io.mosip.mimoto.service.UserMetadataService; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpSession; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.dao.DataAccessResourceFailureException; import org.springframework.security.core.Authentication; -import org.springframework.security.oauth2.client.OAuth2AuthorizedClient; -import org.springframework.security.oauth2.client.OAuth2AuthorizedClientService; import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken; import org.springframework.security.oauth2.core.user.OAuth2User; import org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler; import org.springframework.stereotype.Component; -import jakarta.servlet.ServletException; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; -import java.util.Arrays; -import java.util.UUID; -import static io.mosip.mimoto.exception.PlatformErrorMessages.*; + +import static io.mosip.mimoto.exception.PlatformErrorMessages.DATABASE_CONNECTION_EXCEPTION; +import static io.mosip.mimoto.exception.PlatformErrorMessages.USER_METADATA_STORAGE_EXCEPTION; @Component @Slf4j @@ -31,9 +29,6 @@ public class OAuth2AuthenticationSuccessHandler extends SimpleUrlAuthenticationS @Autowired private UserMetadataService userMetadataService; - @Autowired - private OAuth2AuthorizedClientService authorizedClientService; - @Value("${mosip.inji.web.url}") private String injiWebUrl; diff --git a/src/main/java/io/mosip/mimoto/service/SecurityContextService.java b/src/main/java/io/mosip/mimoto/service/SecurityContextService.java new file mode 100644 index 000000000..792a9457d --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/SecurityContextService.java @@ -0,0 +1,22 @@ +package io.mosip.mimoto.service; + +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken; +import org.springframework.security.web.context.HttpSessionSecurityContextRepository; +import org.springframework.security.web.context.SecurityContextRepository; +import org.springframework.stereotype.Service; + +@Service +public class SecurityContextService { + + private final SecurityContextRepository securityContextRepository = new HttpSessionSecurityContextRepository(); + + public void setupSecurityContext(OAuth2AuthenticationToken oauth2AuthenticationToken, HttpServletRequest request, HttpServletResponse response) { + SecurityContext context = SecurityContextHolder.getContext(); + context.setAuthentication(oauth2AuthenticationToken); + securityContextRepository.saveContext(context, request, response); + } +} diff --git a/src/main/java/io/mosip/mimoto/service/TokenService.java b/src/main/java/io/mosip/mimoto/service/TokenService.java new file mode 100644 index 000000000..4f015d613 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/TokenService.java @@ -0,0 +1,8 @@ +package io.mosip.mimoto.service; + +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + +public interface TokenService { + void processToken(String idToken, String provider, HttpServletRequest request, HttpServletResponse response) throws Exception; +} diff --git a/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java b/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java new file mode 100644 index 000000000..54a67aeac --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java @@ -0,0 +1,102 @@ +package io.mosip.mimoto.service.impl; + +import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; +import io.mosip.mimoto.service.SecurityContextService; +import io.mosip.mimoto.service.TokenService; +import io.mosip.mimoto.service.UserMetadataService; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpSession; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken; +import org.springframework.security.oauth2.core.user.DefaultOAuth2User; +import org.springframework.security.oauth2.core.user.OAuth2User; +import org.springframework.security.oauth2.jwt.Jwt; +import org.springframework.security.oauth2.jwt.JwtDecoder; +import org.springframework.stereotype.Service; + +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service("google") +public class GoogleTokenService implements TokenService { + + @Autowired + @Qualifier("googleJwtDecoder") + private JwtDecoder googleIdTokenDecoder; + + @Autowired + private UserMetadataService userMetadataService; + + @Autowired + private SecurityContextService securityContextService; + + @Value("${spring.security.oauth2.client.registration.google.client-id}") + private String googleClientId; + + @Override + public void processToken(String idToken, String provider, HttpServletRequest request, HttpServletResponse response) throws Exception { + Jwt jwt = decodeAndValidateToken(idToken); + + String email = extractClaim(jwt, "email"); + String name = extractClaim(jwt, "name"); + String picture = extractClaim(jwt, "picture"); + String sub = extractClaim(jwt, "sub"); + + if (email != null) { + String userId = userMetadataService.updateOrInsertUserMetadata(sub, provider, name, picture, email); + setupSession(request, provider, name, picture, email, userId); + setupSecurityContext(provider, sub, name, picture, email, request, response); + } else { + throw new Exception("Could not extract user information from ID token."); + } + } + + private Jwt decodeAndValidateToken(String idToken) throws Exception { + Jwt jwt = googleIdTokenDecoder.decode(idToken); + + String issuer = jwt.getIssuer().toString(); + if (!issuer.equals("https://accounts.google.com") && !issuer.equals("accounts.google.com")) { + throw new Exception("Invalid ID token issuer: " + issuer); + } + + String audience = jwt.getAudience().stream().findFirst().orElse(null); + if (!googleClientId.equals(audience)) { + throw new Exception("Invalid ID token audience: " + audience); + } + + return jwt; + } + + private String extractClaim(Jwt jwt, String claimName) { + return (String) jwt.getClaims().get(claimName); + } + + private void setupSession(HttpServletRequest request, String provider, String name, String picture, String email, String userId) { + HttpSession session = request.getSession(true); + UserMetadataDTO userMetadataDTO = new UserMetadataDTO(name, picture, email); + session.setAttribute("clientRegistrationId", provider); + session.setAttribute("userMetadata", userMetadataDTO); + session.setAttribute("userId", userId); + } + + private void setupSecurityContext(String provider, String sub, String name, String picture, String email, HttpServletRequest request, HttpServletResponse response) { + Map attributes = new HashMap<>(); + attributes.put("sub", sub); + attributes.put("name", name); + attributes.put("picture", picture); + attributes.put("email", email); + + List authorities = Collections.singletonList(new SimpleGrantedAuthority("ROLE_USER")); + OAuth2User oAuth2User = new DefaultOAuth2User(authorities, attributes, "sub"); + OAuth2AuthenticationToken oauth2AuthenticationToken = new OAuth2AuthenticationToken(oAuth2User, authorities, provider); + + securityContextService.setupSecurityContext(oauth2AuthenticationToken, request, response); + } +} From 27f4421f071bbc353d62427d1ff8bc456eb54f3f Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Tue, 15 Apr 2025 10:21:58 +0530 Subject: [PATCH 523/860] Fixed the error codes for apis Signed-off-by: Gurpreet41082 --- src/main/java/io/mosip/mimoto/config/Config.java | 6 ++++++ .../mosip/mimoto/controller/TokenAuthController.java | 2 +- .../mosip/mimoto/controller/WalletsController.java | 7 ++++++- .../mimoto/exception/PlatformErrorMessages.java | 2 +- src/main/java/io/mosip/mimoto/util/Utilities.java | 12 ++++++++++++ 5 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/config/Config.java b/src/main/java/io/mosip/mimoto/config/Config.java index 9b619efac..6359f0b6e 100644 --- a/src/main/java/io/mosip/mimoto/config/Config.java +++ b/src/main/java/io/mosip/mimoto/config/Config.java @@ -28,6 +28,7 @@ import org.springframework.security.oauth2.jwt.JwtDecoder; import org.springframework.security.oauth2.jwt.NimbusJwtDecoder; import org.springframework.security.web.SecurityFilterChain; +import org.springframework.security.web.authentication.HttpStatusEntryPoint; import org.springframework.session.SessionRepository; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.CorsConfigurationSource; @@ -91,6 +92,11 @@ public SecurityFilterChain filterChain(HttpSecurity http, SessionRepository sess setupOauth2Config(http, sessionRepository); + http.exceptionHandling(exceptionHandling -> + exceptionHandling.authenticationEntryPoint(new HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED)) + ); + + return http.build(); } diff --git a/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java b/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java index 39ffb4813..977ba734f 100644 --- a/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java +++ b/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java @@ -31,7 +31,7 @@ public ResponseEntity createSessionFromIdToken(@RequestHeader("Authoriza return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Unsupported provider: " + provider); } tokenService.processToken(idTokenString, provider, request, response); - return ResponseEntity.ok(provider + " session created."); + return ResponseEntity.ok(" Session created."); } catch (Exception e) { return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("Invalid or expired ID token: " + e.getMessage()); } diff --git a/src/main/java/io/mosip/mimoto/controller/WalletsController.java b/src/main/java/io/mosip/mimoto/controller/WalletsController.java index e7d9ca859..f82416f0e 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletsController.java @@ -1,5 +1,7 @@ package io.mosip.mimoto.controller; +import io.mosip.kernel.core.crypto.exception.InvalidDataException; +import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.WalletRequestDto; import io.mosip.mimoto.dto.WalletResponseDto; import io.mosip.mimoto.service.WalletService; @@ -70,9 +72,12 @@ public ResponseEntity unlockWallet(@PathVariable("walletId") return ResponseEntity.status(HttpStatus.OK).body(response); } return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null); + } catch (InvalidDataException exception) { + log.error("Incorrect pin to unlock the wallet ", exception); + return Utilities.getErrorResponseEntityFromPlatformErrorMessage(USER_WALLET_RETRIEVAL_EXCEPTION, HttpStatus.UNAUTHORIZED, MediaType.APPLICATION_JSON); } catch (Exception exception) { log.error("Error occurred while retrieving user wallet ", exception); - return Utilities.getErrorResponseEntityWithoutWrapper(exception, USER_WALLET_RETRIEVAL_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR,MediaType.APPLICATION_JSON); + return Utilities.getErrorResponseEntityWithoutWrapper(exception, USER_WALLET_RETRIEVAL_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); } } } diff --git a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java index f0cdc3316..c94af5cf7 100644 --- a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java +++ b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java @@ -98,7 +98,7 @@ public enum PlatformErrorMessages { USER_METADATA_STORAGE_EXCEPTION(PlatformConstants.PREFIX + "048", "Failed to store the User metadata into database"), USER_METADATA_FETCH_EXCEPTION(PlatformConstants.PREFIX + "049", "Failed to fetch the User metadata from database"), USER_WALLET_CREATION_EXCEPTION(PlatformConstants.PREFIX + "050", "Exception occurred when creating the wallet for user"), - USER_WALLET_RETRIEVAL_EXCEPTION(PlatformConstants.PREFIX + "051", "Exception occurred when creating the wallet for user"), + USER_WALLET_RETRIEVAL_EXCEPTION(PlatformConstants.PREFIX + "051", "Exception occurred due to an incorrect pin to unlock the wallet"), USER_METADATA_CACHE_FETCH_EXCEPTION(PlatformConstants.PREFIX + "052", "Failed to fetch the User metadata from cache"), LOGIN_CREDENTIAL_DOWNLOAD_EXCEPTION(PlatformConstants.PREFIX + "053", "Failed to download and store the credential"), CREDENTIALS_FETCH_EXCEPTION(PlatformConstants.PREFIX + "054", "Exception occurred when fetching credentials for the specified wallet"), diff --git a/src/main/java/io/mosip/mimoto/util/Utilities.java b/src/main/java/io/mosip/mimoto/util/Utilities.java index 601ebbe94..514ebcfc5 100644 --- a/src/main/java/io/mosip/mimoto/util/Utilities.java +++ b/src/main/java/io/mosip/mimoto/util/Utilities.java @@ -258,6 +258,18 @@ public static ResponseEntity getErrorResponseEntityWithoutWrapper( return (ResponseEntity) responseEntity.body(new ErrorDTO(errorCode, errorMessage)); } + public static ResponseEntity getErrorResponseEntityFromPlatformErrorMessage( + PlatformErrorMessages message, HttpStatus status, MediaType contentType) { + String errorMessage = message.getMessage(); + String errorCode = message.getCode(); + + ResponseEntity.BodyBuilder responseEntity = ResponseEntity.status(status); + if (contentType != null) { + responseEntity.contentType(contentType); + } + return (ResponseEntity) responseEntity.body(new ErrorDTO(errorCode, errorMessage)); + } + public static List getErrors(String errorCode, String errorMessage) { ErrorDTO errorDTO = new ErrorDTO(errorCode, errorMessage); return Lists.newArrayList(errorDTO); From 33f98b60cbe5a17f0a0a89eb08ba99a25da26ca3 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Tue, 15 Apr 2025 16:32:08 +0530 Subject: [PATCH 524/860] injiweb-1518 added properties in test file Signed-off-by: Gurpreet41082 --- src/test/resources/application-test.properties | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/test/resources/application-test.properties b/src/test/resources/application-test.properties index 7c07de4b7..a6db0a576 100644 --- a/src/test/resources/application-test.properties +++ b/src/test/resources/application-test.properties @@ -44,3 +44,5 @@ mosip.data.share.get.url.pattern=http://datashare.datashare/v1/datashare/get/sta mosip.data.share.create.retry.count=3 #OpenId4VP related Configuration END + +spring.security.oauth2.client.provider.google.jwk-set-uri=https://www.googleapis.com/oauth2/v3/certs From af841cef35cf9cdbc4919924d9b000385f581ffb Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Tue, 15 Apr 2025 16:36:14 +0530 Subject: [PATCH 525/860] injiweb-1518 updated test case as sending 401 instead of login page redirection Signed-off-by: Gurpreet41082 --- .../io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java index 1950e5019..cb1033133 100644 --- a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java +++ b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java @@ -133,10 +133,9 @@ public void setUp() { } @Test - public void shouldBeRedirectedToRedirectEndpointOnUnauthenticatedAccessToProtectedEndpoint() throws Exception { + public void shouldReturn401OnUnauthenticatedAccessToProtectedEndpoint() throws Exception { mockMvc.perform(get("/users/me")) - .andExpect(status().is3xxRedirection()) - .andExpect(redirectedUrl(injiWebUrl + "/login")); + .andExpect(status().is4xxClientError()); } @Test From 6c5e7d9337b4037a5a2667e9d1381e944ef3a736 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Thu, 17 Apr 2025 15:35:59 +0530 Subject: [PATCH 526/860] Adding property to have all ignored url for authentication Signed-off-by: Gurpreet41082 --- docker-compose/config/mimoto-default.properties | 4 ++++ src/main/java/io/mosip/mimoto/config/Config.java | 10 ++++------ .../io/mosip/mimoto/controller/UsersController.java | 2 +- src/main/resources/application-local.properties | 4 ++++ 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/docker-compose/config/mimoto-default.properties b/docker-compose/config/mimoto-default.properties index ea730c218..765fafdff 100644 --- a/docker-compose/config/mimoto-default.properties +++ b/docker-compose/config/mimoto-default.properties @@ -360,3 +360,7 @@ spring.data.redis.port=${SPRING_REDIS_PORT} server.servlet.session.timeout=30m spring.session.redis.namespace=injiweb:session: +mosip.security.ignore-auth-urls=/safetynet/**,/actuator/**,/swagger-ui/**,/v3/api-docs,\ + /allProperties,/credentials/**,/credentialshare/**,/binding-otp,/wallet-binding,/get-token/**,\ + /issuers,/issuers/**,/authorize,/req/otp,/vid,/req/auth/**,/req/individualId/otp,/aid/get-individual-id,/users/me/cache,\ + /verifiers, /auth/*/token-login diff --git a/src/main/java/io/mosip/mimoto/config/Config.java b/src/main/java/io/mosip/mimoto/config/Config.java index 6359f0b6e..8a0557a01 100644 --- a/src/main/java/io/mosip/mimoto/config/Config.java +++ b/src/main/java/io/mosip/mimoto/config/Config.java @@ -59,6 +59,8 @@ public class Config { @Value("${mosip.security.origins:localhost:8088}") private String origins; + @Value("${mosip.security.ignore-auth-urls}") + private String[] ignoreAuthUrls; @Value("${mosip.inji.web.url}") private String injiWebUrl; @@ -156,12 +158,8 @@ private void setupOauth2Config(HttpSecurity http, SessionRepository sessionRepos .clearAuthentication(true) ) .authorizeHttpRequests(authz -> authz - // make existing endpoints public - .requestMatchers("/safetynet/**", "/actuator/**", "/allProperties", "/credentials/**", - "/credentialshare/**","/binding-otp","/wallet-binding","/get-token/**", - "/issuers","/issuers/**","/authorize","/req/otp","/vid","/req/auth/**", - "/req/individualId/otp","/aid/get-individual-id","/session/status", - "/verifiers", "/auth/*/token-login").permitAll() + // make following endpoints public + .requestMatchers(ignoreAuthUrls).permitAll() // Apply the default authorization rule to all other requests, ensuring authentication is required. .anyRequest().authenticated() ).sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)); diff --git a/src/main/java/io/mosip/mimoto/controller/UsersController.java b/src/main/java/io/mosip/mimoto/controller/UsersController.java index df59c63bd..d4bb50cbe 100644 --- a/src/main/java/io/mosip/mimoto/controller/UsersController.java +++ b/src/main/java/io/mosip/mimoto/controller/UsersController.java @@ -69,7 +69,7 @@ public ResponseEntity getUserProfileFromCache(Authentication au try { UserMetadataDTO userMetadataDTO = (UserMetadataDTO) session.getAttribute("userMetadata"); if (userMetadataDTO == null) { - throw new LoginSessionException(USER_METADATA_CACHE_FETCH_EXCEPTION.getCode(), "No user metadata present in cache", HttpStatus.INTERNAL_SERVER_ERROR); + throw new LoginSessionException(USER_METADATA_CACHE_FETCH_EXCEPTION.getCode(), "No user metadata present in cache", HttpStatus.UNAUTHORIZED); } return ResponseEntity.status(HttpStatus.OK).body(userMetadataDTO); } catch (Exception exception) { diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 0d0c51903..686220508 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -267,6 +267,10 @@ mosip.data.share.get.url.pattern=${mosip.data.share.url}/v1/datashare/get/static mosip.security.cors-enable=true #comma separated allowed origins mosip.security.origins=http://localhost:3004 +mosip.security.ignore-auth-urls=/safetynet/**,/actuator/**,/swagger-ui/**,/v3/api-docs,\ + /allProperties,/credentials/**,/credentialshare/**,/binding-otp,/wallet-binding,/get-token/**,\ + /issuers,/issuers/**,/authorize,/req/otp,/vid,/req/auth/**,/req/individualId/otp,/aid/get-individual-id,/users/me/cache,\ + /verifiers, /auth/*/token-login #OpenId4VP related Configuration END From 2d754468530ee8d8f7d9c4b5d1137ef2b053763e Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Fri, 18 Apr 2025 12:24:34 +0530 Subject: [PATCH 527/860] injiweb-1512 fix nullpointer issue Signed-off-by: Gurpreet41082 --- .../mosip/mimoto/exception/KeyGenerationException.java | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 src/main/java/io/mosip/mimoto/exception/KeyGenerationException.java diff --git a/src/main/java/io/mosip/mimoto/exception/KeyGenerationException.java b/src/main/java/io/mosip/mimoto/exception/KeyGenerationException.java new file mode 100644 index 000000000..52e6c7997 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/exception/KeyGenerationException.java @@ -0,0 +1,9 @@ +package io.mosip.mimoto.exception; + +public class KeyGenerationException extends BaseCheckedException { + + public KeyGenerationException(String code, String message) { + super(code, message); + } + +} \ No newline at end of file From 93977a1ed835d76c3238ab6d9b13e5f5aafbc4be Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 21 Apr 2025 11:54:55 +0530 Subject: [PATCH 528/860] Fixing sonar issues in latest development Signed-off-by: Gurpreet41082 --- .../config/mimoto-default.properties | 1 + .../java/io/mosip/mimoto/config/Config.java | 117 ++++++++---------- .../io/mosip/mimoto/config/JwtConfig.java | 18 +++ .../exception/GlobalExceptionHandler.java | 21 ++++ .../mosip/mimoto/service/LogoutService.java | 46 +++++++ .../mosip/mimoto/util/KeyGenerationUtil.java | 4 + .../resources/application-local.properties | 5 +- ...Auth2AuthenticationSuccessHandlerTest.java | 48 +++---- .../security/oauth2/OAuth2LoginTests.java | 24 ++-- 9 files changed, 182 insertions(+), 102 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/config/JwtConfig.java create mode 100644 src/main/java/io/mosip/mimoto/exception/GlobalExceptionHandler.java create mode 100644 src/main/java/io/mosip/mimoto/service/LogoutService.java diff --git a/docker-compose/config/mimoto-default.properties b/docker-compose/config/mimoto-default.properties index 765fafdff..36970837f 100644 --- a/docker-compose/config/mimoto-default.properties +++ b/docker-compose/config/mimoto-default.properties @@ -344,6 +344,7 @@ spring.security.oauth2.client.registration.google.client-name=Google spring.security.oauth2.client.provider.google.authorization-uri=https://accounts.google.com/o/oauth2/auth?prompt=select_account spring.security.oauth2.client.provider.google.token-uri=https://oauth2.googleapis.com/token spring.security.oauth2.client.provider.google.user-info-uri=https://www.googleapis.com/oauth2/v3/userinfo +spring.security.oauth2.client.provider.google.jwk-set-uri=https://www.googleapis.com/oauth2/v3/certs #database config spring.datasource.url=${SPRING_DATASOURCE_URL} diff --git a/src/main/java/io/mosip/mimoto/config/Config.java b/src/main/java/io/mosip/mimoto/config/Config.java index 8a0557a01..bbc48554e 100644 --- a/src/main/java/io/mosip/mimoto/config/Config.java +++ b/src/main/java/io/mosip/mimoto/config/Config.java @@ -5,8 +5,10 @@ import io.mosip.mimoto.exception.OAuth2AuthenticationException; import io.mosip.mimoto.security.oauth2.OAuth2AuthenticationFailureHandler; import io.mosip.mimoto.security.oauth2.OAuth2AuthenticationSuccessHandler; +import io.mosip.mimoto.service.LogoutService; import io.mosip.mimoto.util.Utilities; import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpSession; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Qualifier; @@ -65,6 +67,9 @@ public class Config { @Value("${mosip.inji.web.url}") private String injiWebUrl; + @Autowired + private LogoutService logoutService; + @Bean @ConfigurationProperties(prefix = "mosip.inji") public Map injiConfig() { @@ -104,65 +109,53 @@ public SecurityFilterChain filterChain(HttpSecurity http, SessionRepository sess } private void setupOauth2Config(HttpSecurity http, SessionRepository sessionRepository) throws Exception { - http - .oauth2Login((oauth2Login) -> oauth2Login.loginPage(injiWebUrl + "/login") - .authorizationEndpoint(authorization -> authorization.baseUri("/oauth2/authorize") - ) - .redirectionEndpoint(redirect -> redirect.baseUri("/oauth2/callback/*")) - .successHandler(oAuth2AuthenticationSuccessHandler) - .failureHandler(oAuth2AuthenticationFailureHandler) - ) - .logout(logout -> logout - .invalidateHttpSession(false) - .clearAuthentication(false) - .logoutUrl("/logout") - .logoutSuccessHandler((request, response, authentication) -> { - try { - Cookie[] cookies = request.getCookies(); - if (cookies != null) { - for (Cookie cookie : cookies) { - if ("SESSION".equals(cookie.getName())) { - String encodedSessionId = cookie.getValue(); - String sessionId = new String(Base64.getUrlDecoder().decode(encodedSessionId)); - if (sessionRepository.findById(sessionId) != null) { - sessionRepository.deleteById(sessionId); - } else { - throw new OAuth2AuthenticationException("NOT_FOUND", "Logout request was sent for an invalid or expired session", HttpStatus.NOT_FOUND); - } - } - } - } - - HttpSession session = request.getSession(false); - if (session != null) { - session.invalidate(); // Explicitly invalidate the session - } - } catch (OAuth2AuthenticationException exception) { - ResponseEntity> responseEntity = Utilities.handleErrorResponse(exception, LOGIN_SESSION_INVALIDATE_EXCEPTION.getCode(), exception.getStatus(), null); - response.setStatus(responseEntity.getStatusCodeValue()); - response.setContentType("application/json"); - - ObjectMapper objectMapper = new ObjectMapper(); - String jsonResponse = objectMapper.writeValueAsString(responseEntity.getBody()); - response.getWriter().write(jsonResponse); - } catch (Exception exception) { - ResponseEntity> responseEntity = Utilities.handleErrorResponse(exception, LOGIN_SESSION_INVALIDATE_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR, null); - response.setStatus(responseEntity.getStatusCodeValue()); - response.setContentType("application/json"); - - ObjectMapper objectMapper = new ObjectMapper(); - String jsonResponse = objectMapper.writeValueAsString(responseEntity.getBody()); - response.getWriter().write(jsonResponse); - } - }) - .clearAuthentication(true) - ) - .authorizeHttpRequests(authz -> authz - // make following endpoints public - .requestMatchers(ignoreAuthUrls).permitAll() - // Apply the default authorization rule to all other requests, ensuring authentication is required. - .anyRequest().authenticated() - ).sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)); + configureOAuth2Login(http); + configureLogout(http, sessionRepository); + configureAuthorization(http); + configureSessionManagement(http); + } + + private void configureOAuth2Login(HttpSecurity http) throws Exception { + http.oauth2Login(oauth2Login -> oauth2Login + .loginPage(injiWebUrl + "/login") + .authorizationEndpoint(authorization -> authorization.baseUri("/oauth2/authorize")) + .redirectionEndpoint(redirect -> redirect.baseUri("/oauth2/callback/*")) + .successHandler(oAuth2AuthenticationSuccessHandler) + .failureHandler(oAuth2AuthenticationFailureHandler) + ); + } + + private void configureLogout(HttpSecurity http, SessionRepository sessionRepository) throws Exception { + http.logout(logout -> logout + .invalidateHttpSession(false) + .clearAuthentication(false) + .logoutUrl("/logout") + .logoutSuccessHandler((request, response, authentication) -> { + try { + logoutService.handleLogout(request, response, sessionRepository); + } catch (OAuth2AuthenticationException e) { + response.setStatus(e.getStatus().value()); + response.setContentType("application/json"); + String jsonResponse = String.format("{\"errors\":[{\"errorCode\":\"%s\",\"errorMessage\":\"%s\"}]}", + LOGIN_SESSION_INVALIDATE_EXCEPTION.getCode(), + LOGIN_SESSION_INVALIDATE_EXCEPTION.getMessage()); + response.getWriter().write(jsonResponse); + } + }) + .clearAuthentication(true) + ); + } + + + private void configureAuthorization(HttpSecurity http) throws Exception { + http.authorizeHttpRequests(authz -> authz + .requestMatchers(ignoreAuthUrls).permitAll() + .anyRequest().authenticated() + ); + } + + private void configureSessionManagement(HttpSecurity http) throws Exception { + http.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)); } // Define CORS configuration @@ -178,10 +171,4 @@ public CorsConfigurationSource corsConfigurationSource() { return source; } - @Bean - @Qualifier("googleJwtDecoder") - public JwtDecoder googleIdTokenDecoder(@Value("${spring.security.oauth2.client.provider.google.jwk-set-uri}") String jwkSetUri) { - return NimbusJwtDecoder.withJwkSetUri(jwkSetUri).build(); - } - } diff --git a/src/main/java/io/mosip/mimoto/config/JwtConfig.java b/src/main/java/io/mosip/mimoto/config/JwtConfig.java new file mode 100644 index 000000000..bcbec0233 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/config/JwtConfig.java @@ -0,0 +1,18 @@ +package io.mosip.mimoto.config; + +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.oauth2.jwt.JwtDecoder; +import org.springframework.security.oauth2.jwt.NimbusJwtDecoder; + +@Configuration +public class JwtConfig { + + @Bean + @Qualifier("googleJwtDecoder") + public JwtDecoder googleIdTokenDecoder(@Value("${spring.security.oauth2.client.provider.google.jwk-set-uri}") String jwkSetUri) { + return NimbusJwtDecoder.withJwkSetUri(jwkSetUri).build(); + } +} diff --git a/src/main/java/io/mosip/mimoto/exception/GlobalExceptionHandler.java b/src/main/java/io/mosip/mimoto/exception/GlobalExceptionHandler.java new file mode 100644 index 000000000..5f9641d73 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/exception/GlobalExceptionHandler.java @@ -0,0 +1,21 @@ +package io.mosip.mimoto.exception; + +import io.mosip.mimoto.dto.ErrorDTO; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ControllerAdvice +@ResponseBody +@Slf4j +public class GlobalExceptionHandler { + @ExceptionHandler(Throwable.class) // Catch-all for unexpected exceptions + @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) + public ErrorDTO handleGenericException(Exception ex) { + log.error("An unexpected error occurred: {}", ex.getMessage(), ex); // Log the full error + return new ErrorDTO(HttpStatus.INTERNAL_SERVER_ERROR.name(), "An unexpected server error occurred."); + } +} diff --git a/src/main/java/io/mosip/mimoto/service/LogoutService.java b/src/main/java/io/mosip/mimoto/service/LogoutService.java new file mode 100644 index 000000000..88ac2092b --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/LogoutService.java @@ -0,0 +1,46 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.exception.OAuth2AuthenticationException; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpSession; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.session.SessionRepository; +import org.springframework.stereotype.Service; + +import java.util.Base64; + +@Service +@Slf4j +public class LogoutService { + + public void handleLogout(HttpServletRequest request, HttpServletResponse response, SessionRepository sessionRepository) throws OAuth2AuthenticationException { + + Cookie[] cookies = request.getCookies(); + if (cookies != null) { + for (Cookie cookie : cookies) { + if ("SESSION".equals(cookie.getName())) { + String encodedSessionId = cookie.getValue(); + String sessionId = new String(Base64.getUrlDecoder().decode(encodedSessionId)); + if (sessionRepository.findById(sessionId) != null) { + sessionRepository.deleteById(sessionId); + } else { + throw new OAuth2AuthenticationException("NOT_FOUND", + "Logout request was sent for an invalid or expired session", + HttpStatus.NOT_FOUND); + } + } + } + } + + HttpSession session = request.getSession(false); + if (session != null) { + session.invalidate(); + } + + } + + +} diff --git a/src/main/java/io/mosip/mimoto/util/KeyGenerationUtil.java b/src/main/java/io/mosip/mimoto/util/KeyGenerationUtil.java index d8282c087..7ba1cfc9b 100644 --- a/src/main/java/io/mosip/mimoto/util/KeyGenerationUtil.java +++ b/src/main/java/io/mosip/mimoto/util/KeyGenerationUtil.java @@ -50,6 +50,10 @@ public static KeyPair generateKeyPair(SigningAlgorithm algorithm) throws NoSuchA break; } + if (keyPairGenerator == null) { + throw new IllegalArgumentException("Unsupported algorithm: " + algorithm); + } + return keyPairGenerator.generateKeyPair(); } diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 686220508..e27470aa1 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -293,6 +293,8 @@ spring.security.oauth2.client.registration.google.client-name=Google spring.security.oauth2.client.provider.google.authorization-uri=https://accounts.google.com/o/oauth2/auth?prompt=select_account spring.security.oauth2.client.provider.google.token-uri=https://oauth2.googleapis.com/token spring.security.oauth2.client.provider.google.user-info-uri=https://www.googleapis.com/oauth2/v3/userinfo +spring.security.oauth2.client.provider.google.jwk-set-uri=https://www.googleapis.com/oauth2/v3/certs + spring.datasource.url=jdbc:postgresql://localhost:5432/inji_mimoto spring.datasource.username=postgres @@ -307,4 +309,5 @@ spring.data.redis.host=localhost spring.data.redis.port=6379 spring.data.redis.password= server.servlet.session.timeout=30m -spring.session.redis.namespace=injiweb:session: \ No newline at end of file +spring.session.redis.namespace=injiweb:session: +spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java index 0846f6e14..141e97b50 100644 --- a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java +++ b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java @@ -1,12 +1,8 @@ package io.mosip.mimoto.security.oauth2; import io.mosip.mimoto.config.Config; -import io.mosip.mimoto.controller.UsersController; -import io.mosip.mimoto.repository.UserMetadataRepository; +import io.mosip.mimoto.service.LogoutService; import io.mosip.mimoto.service.UserMetadataService; -import io.mosip.mimoto.service.WalletService; -import io.mosip.mimoto.util.EncryptionDecryptionUtil; -import io.mosip.mimoto.util.WalletValidator; import lombok.extern.slf4j.Slf4j; import org.junit.Before; import org.junit.Test; @@ -21,7 +17,6 @@ import org.springframework.dao.DataAccessResourceFailureException; import org.springframework.mock.web.MockHttpSession; import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.oauth2.client.OAuth2AuthorizedClientService; import org.springframework.security.oauth2.client.endpoint.OAuth2AccessTokenResponseClient; import org.springframework.security.oauth2.client.endpoint.OAuth2AuthorizationCodeGrantRequest; import org.springframework.security.oauth2.client.registration.ClientRegistration; @@ -40,17 +35,22 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; -import java.util.*; + +import java.util.Collections; +import java.util.Map; +import java.util.UUID; + import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.*; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.redirectedUrl; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @RunWith(SpringRunner.class) -@ContextConfiguration(classes = Config.class) +@ContextConfiguration(classes = {Config.class}) @WebMvcTest(Config.class) @AutoConfigureMockMvc -@Import({UsersController.class, OAuth2AuthenticationSuccessHandler.class}) +@Import({OAuth2AuthenticationSuccessHandler.class}) @Slf4j public class OAuth2AuthenticationSuccessHandlerTest { @Autowired @@ -65,19 +65,10 @@ public class OAuth2AuthenticationSuccessHandlerTest { private SessionRepository sessionRepository; @MockBean - private UserMetadataRepository userMetadataRepository; - - @MockBean - private EncryptionDecryptionUtil encryptionDecryptionUtil; - - @MockBean - private WalletService walletService; - - @MockBean - private WalletValidator walletValidator; + private LogoutService logoutService; @MockBean - private OAuth2AuthorizedClientService oAuth2AuthorizedClientService; + private UserMetadataService userMetadataService; @MockBean private ClientRegistrationRepository clientRegistrationRepository; @@ -85,9 +76,6 @@ public class OAuth2AuthenticationSuccessHandlerTest { @MockBean private OAuth2UserService oauth2UserService; - @MockBean - private UserMetadataService userMetadataService; - private String providerSubjectId, identityProvider, displayName, profilePictureUrl, email, userId; MockHttpSession mockSession; @@ -160,8 +148,8 @@ public void shouldReturnRedirectUrlWithSuccessStatusQueryParamIfLoginIsSuccessfu @Test public void shouldSendCustomErrorInRedirectUrlWhenLoginIsSuccessfulButAnErrorOccurredInAuthenticationSuccessHandler() throws Exception { - when(userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, - email)).thenThrow(new RuntimeException("Failed to store the user metadata")); + when(userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email)) + .thenThrow(new RuntimeException("Failed to store the user metadata")); mockMvc.perform(get("/oauth2/callback/google") .session(mockSession) @@ -169,12 +157,14 @@ public void shouldSendCustomErrorInRedirectUrlWhenLoginIsSuccessfulButAnErrorOcc .param("state", "test-state")) .andExpect(status().is3xxRedirection()) .andExpect(redirectedUrl("https://injiweb.dev1.mosip.net/login?status=error&error_code=RESIDENT-APP-048&error_message=Failed+to+store+the+User+metadata+into+database")); + + verify(userMetadataService, times(1)).updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); } @Test public void shouldSendCustomErrorInRedirectUrlWhenLoginIsSuccessfulButDatabaseIsNotConnectedToStoreUserData() throws Exception { - when(userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, - email)).thenThrow(new DataAccessResourceFailureException("Failed to connect to the database")); + when(userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email)) + .thenThrow(new DataAccessResourceFailureException("Failed to connect to the database")); mockMvc.perform(get("/oauth2/callback/google") .session(mockSession) @@ -182,6 +172,8 @@ public void shouldSendCustomErrorInRedirectUrlWhenLoginIsSuccessfulButDatabaseIs .param("state", "test-state")) .andExpect(status().is3xxRedirection()) .andExpect(redirectedUrl("https://injiweb.dev1.mosip.net/login?status=error&error_code=RESIDENT-APP-047&error_message=Failed+to+connect+to+the+shared+database")); + + verify(userMetadataService, times(1)).updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); } } diff --git a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java index cb1033133..7fa3460e9 100644 --- a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java +++ b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java @@ -3,11 +3,15 @@ import io.mosip.mimoto.config.Config; import io.mosip.mimoto.controller.UsersController; import io.mosip.mimoto.dbentity.UserMetadata; +import io.mosip.mimoto.exception.OAuth2AuthenticationException; import io.mosip.mimoto.repository.UserMetadataRepository; +import io.mosip.mimoto.service.LogoutService; import io.mosip.mimoto.service.WalletService; import io.mosip.mimoto.util.EncryptionDecryptionUtil; import io.mosip.mimoto.util.WalletValidator; import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.junit.Before; import org.junit.Test; @@ -20,6 +24,7 @@ import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.Import; +import org.springframework.http.HttpStatus; import org.springframework.mock.web.MockHttpSession; import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; @@ -72,6 +77,9 @@ public class OAuth2LoginTests { @MockBean private UserMetadataRepository userMetadataRepository; + @MockBean + private LogoutService logoutService; + @MockBean private WalletService walletService; @@ -178,16 +186,19 @@ public void shouldThrowExceptionWhenLogoutRequestWasSentForInvalidSession() thro String encodedSessionId = Base64.getUrlEncoder().encodeToString(sessionId.getBytes()); Cookie sessionCookie = new Cookie("SESSION", encodedSessionId); mockSession.setAttribute("clientRegistrationId", "google"); - when(sessionRepository.findById(sessionId)).thenReturn(null); + + doThrow(new OAuth2AuthenticationException("NOT_FOUND", + "Logout request was sent for an invalid or expired session", + HttpStatus.NOT_FOUND)) + .when(logoutService).handleLogout(any(HttpServletRequest.class), any(HttpServletResponse.class), eq(sessionRepository)); + mockMvc.perform(post("/logout") .session(mockSession).cookie(sessionCookie)) .andExpect(status().isNotFound()) - .andExpect(jsonPath("$.errors[0].errorCode").value("NOT_FOUND")) - .andExpect(jsonPath("$.errors[0].errorMessage").value("Logout request was sent for an invalid or expired session")); + .andExpect(jsonPath("$.errors[0].errorCode").value("RESIDENT-APP-046")) + .andExpect(jsonPath("$.errors[0].errorMessage").value("Exception occurred when invalidating the session from redis")); - verify(sessionRepository, times(1)).findById(sessionId); - verify(sessionRepository, never()).deleteById(sessionId); } @Test @@ -202,9 +213,6 @@ public void shouldPerformLogoutSuccessfullyForaValidSession() throws Exception { mockMvc.perform(post("/logout") .session(mockSession).cookie(sessionCookie)) .andExpect(status().isOk()); - - verify(sessionRepository, times(1)).findById(sessionId); - verify(sessionRepository, times(1)).deleteById(sessionId); } @Test From 539803ba9c41f8521a38c36b5b8b76dffd762910 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 21 Apr 2025 13:24:48 +0530 Subject: [PATCH 529/860] Removed the hardcoded strings Signed-off-by: Gurpreet41082 --- .../java/io/mosip/mimoto/constant/SessionKeys.java | 8 ++++++++ .../mosip/mimoto/controller/UsersController.java | 14 ++++++++++---- .../controller/WalletCredentialsController.java | 7 ++++--- .../mosip/mimoto/controller/WalletsController.java | 11 ++++++----- .../oauth2/OAuth2AuthenticationSuccessHandler.java | 5 +++-- .../mosip/mimoto/service/UserMetadataService.java | 10 +++++----- .../mimoto/service/impl/GoogleTokenService.java | 5 +++-- .../mimoto/util/EncryptionDecryptionUtil.java | 2 ++ src/main/java/io/mosip/mimoto/util/WalletUtil.java | 7 +++---- .../mimoto/controller/UsersControllerTest.java | 9 +++++---- .../mimoto/controller/WalletsControllerTest.java | 5 +++-- 11 files changed, 52 insertions(+), 31 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/constant/SessionKeys.java diff --git a/src/main/java/io/mosip/mimoto/constant/SessionKeys.java b/src/main/java/io/mosip/mimoto/constant/SessionKeys.java new file mode 100644 index 000000000..581671419 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/constant/SessionKeys.java @@ -0,0 +1,8 @@ +package io.mosip.mimoto.constant; + +public class SessionKeys { + public static final String USER_ID = "userId"; + public static final String USER_METADATA = "userMetadata"; + public static final String WALLET_KEY = "wallet_key"; + public static final String WALLET_ID = "wallet_id"; +} diff --git a/src/main/java/io/mosip/mimoto/controller/UsersController.java b/src/main/java/io/mosip/mimoto/controller/UsersController.java index d4bb50cbe..cf2d79623 100644 --- a/src/main/java/io/mosip/mimoto/controller/UsersController.java +++ b/src/main/java/io/mosip/mimoto/controller/UsersController.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.controller; +import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.dbentity.UserMetadata; import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; import io.mosip.mimoto.exception.LoginSessionException; @@ -27,6 +28,8 @@ @RequestMapping(value = "/users/me") public class UsersController { + + @Autowired private UserMetadataRepository userMetadataRepository; @@ -40,9 +43,12 @@ public ResponseEntity getUserProfile(Authentication authenticat UserMetadata userMetadata = fetchUserMetadata(authentication.getName(), identityProvider); - UserMetadataDTO userMetadataDTO = new UserMetadataDTO(encryptionDecryptionUtill.decrypt(userMetadata.getDisplayName(), "user_pii", "", ""), - encryptionDecryptionUtill.decrypt(userMetadata.getProfilePictureUrl(), "user_pii", "", ""), - encryptionDecryptionUtill.decrypt(userMetadata.getEmail(), "user_pii", "", "")); + UserMetadataDTO userMetadataDTO = new UserMetadataDTO(encryptionDecryptionUtill.decrypt(userMetadata.getDisplayName(), + EncryptionDecryptionUtil.USER_PII_KEY_REFERENCE_ID, "", ""), + encryptionDecryptionUtill.decrypt(userMetadata.getProfilePictureUrl(), + EncryptionDecryptionUtil.USER_PII_KEY_REFERENCE_ID, "", ""), + encryptionDecryptionUtill.decrypt(userMetadata.getEmail(), EncryptionDecryptionUtil.USER_PII_KEY_REFERENCE_ID, + "", "")); return ResponseEntity.status(HttpStatus.OK).body(userMetadataDTO); } catch (OAuth2AuthenticationException exception) { @@ -67,7 +73,7 @@ private UserMetadata fetchUserMetadata(String providerSubjectId, String identity @GetMapping("/cache") public ResponseEntity getUserProfileFromCache(Authentication authentication, HttpSession session) { try { - UserMetadataDTO userMetadataDTO = (UserMetadataDTO) session.getAttribute("userMetadata"); + UserMetadataDTO userMetadataDTO = (UserMetadataDTO) session.getAttribute(SessionKeys.USER_METADATA); if (userMetadataDTO == null) { throw new LoginSessionException(USER_METADATA_CACHE_FETCH_EXCEPTION.getCode(), "No user metadata present in cache", HttpStatus.UNAUTHORIZED); } diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index 56ceaa5e8..8d2449ed1 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -13,6 +13,7 @@ import jakarta.servlet.http.HttpSession; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.InputStreamResource; import org.springframework.dao.DataAccessResourceFailureException; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; @@ -37,7 +38,7 @@ public class WalletCredentialsController { private CredentialUtilService credentialUtilService; @PostMapping - public ResponseEntity downloadCredential(@PathVariable("walletId") String walletId, @RequestParam Map params, HttpSession httpSession) { + public ResponseEntity downloadCredential(@PathVariable("walletId") String walletId, @RequestParam Map params, HttpSession httpSession) { //TODO: remove this default value after the apitest is updated params.putIfAbsent("vcStorageExpiryLimitInTimes", "-1"); @@ -71,7 +72,7 @@ public ResponseEntity downloadCredential(@PathVariable("walletId") String wal } @GetMapping - public ResponseEntity fetchAllCredentialsForGivenWallet(@PathVariable("walletId") String walletId, @RequestParam("locale") String locale, HttpSession httpSession) { + public ResponseEntity> fetchAllCredentialsForGivenWallet(@PathVariable("walletId") String walletId, @RequestParam("locale") String locale, HttpSession httpSession) { try { log.info("Fetching all credentials for walletId: {}", walletId); @@ -91,7 +92,7 @@ public ResponseEntity fetchAllCredentialsForGivenWallet(@PathVariable("wallet } @GetMapping("/{credentialId}") - public ResponseEntity getVerifiableCredential(@PathVariable("walletId") String walletId, @PathVariable("credentialId") String credentialId, @RequestParam("locale") String locale, @RequestParam(value = "action", defaultValue = "inline") String action, HttpSession httpSession) { + public ResponseEntity getVerifiableCredential(@PathVariable("walletId") String walletId, @PathVariable("credentialId") String credentialId, @RequestParam("locale") String locale, @RequestParam(value = "action", defaultValue = "inline") String action, HttpSession httpSession) { try { log.info("Fetching credentialId: {} from walletId: {}", credentialId, walletId); diff --git a/src/main/java/io/mosip/mimoto/controller/WalletsController.java b/src/main/java/io/mosip/mimoto/controller/WalletsController.java index f82416f0e..feeeb56bf 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletsController.java @@ -1,6 +1,7 @@ package io.mosip.mimoto.controller; import io.mosip.kernel.core.crypto.exception.InvalidDataException; +import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.WalletRequestDto; import io.mosip.mimoto.dto.WalletResponseDto; @@ -36,7 +37,7 @@ public class WalletsController { public ResponseEntity createWallet(@RequestBody WalletRequestDto wallet, HttpSession httpSession) { try { walletValidator.validateWalletRequest(wallet); - return ResponseEntity.status(HttpStatus.OK).body(walletService.createWallet((String) httpSession.getAttribute("userId"), wallet.getWalletName(), wallet.getWalletPin())); + return ResponseEntity.status(HttpStatus.OK).body(walletService.createWallet((String) httpSession.getAttribute(SessionKeys.USER_ID), wallet.getWalletName(), wallet.getWalletPin())); } catch (IllegalArgumentException exception) { log.error("Error occurred while creating user wallets : ", exception); return Utilities.getErrorResponseEntityWithoutWrapper(exception, USER_WALLET_CREATION_EXCEPTION.getCode(), HttpStatus.BAD_REQUEST, MediaType.APPLICATION_JSON); @@ -50,7 +51,7 @@ public ResponseEntity createWallet(@RequestBody WalletRequestDto wallet, @GetMapping public ResponseEntity> getWallets(HttpSession httpSession) { try { - List response = walletService.getWallets((String) httpSession.getAttribute("userId")); + List response = walletService.getWallets((String) httpSession.getAttribute(SessionKeys.USER_ID)); return ResponseEntity.status(HttpStatus.OK).body(response); } catch (Exception exception) { @@ -63,11 +64,11 @@ public ResponseEntity> getWallets(HttpSession httpSessio public ResponseEntity unlockWallet(@PathVariable("walletId") String walletId, @RequestBody WalletRequestDto wallet, HttpSession httpSession) { try { // If wallet_key does not exist in the session, fetch it and set it in the session - String walletKey = walletService.getWalletKey((String) httpSession.getAttribute("userId"), walletId, wallet.getWalletPin()); + String walletKey = walletService.getWalletKey((String) httpSession.getAttribute(SessionKeys.USER_ID), walletId, wallet.getWalletPin()); if (null != walletKey) { - httpSession.setAttribute("wallet_key", walletKey); - httpSession.setAttribute("wallet_id", walletId); + httpSession.setAttribute(SessionKeys.WALLET_KEY, walletKey); + httpSession.setAttribute(SessionKeys.WALLET_ID, walletId); WalletResponseDto response = new WalletResponseDto(walletId); return ResponseEntity.status(HttpStatus.OK).body(response); } diff --git a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java index 53e2d0d11..83fa362de 100644 --- a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java +++ b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.security.oauth2; +import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; import io.mosip.mimoto.service.UserMetadataService; import jakarta.servlet.ServletException; @@ -55,8 +56,8 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo UserMetadataDTO userMetadataDTO = new UserMetadataDTO(displayName, profilePictureUrl, email); - session.setAttribute("userMetadata", userMetadataDTO); - session.setAttribute("userId", userId); + session.setAttribute(SessionKeys.USER_METADATA, userMetadataDTO); + session.setAttribute(SessionKeys.USER_ID, userId); response.sendRedirect(injiWebUrl + "/login?status=success"); } catch (DataAccessResourceFailureException exception) { log.error("Exception occurred while connecting to the database to store user data:", exception); diff --git a/src/main/java/io/mosip/mimoto/service/UserMetadataService.java b/src/main/java/io/mosip/mimoto/service/UserMetadataService.java index 90511e1b1..1d32bda5b 100644 --- a/src/main/java/io/mosip/mimoto/service/UserMetadataService.java +++ b/src/main/java/io/mosip/mimoto/service/UserMetadataService.java @@ -56,9 +56,9 @@ private void updateUserMetadata(UserMetadata userMetadata, String displayName, S } private boolean checkAndUpdateEncryptedField(Supplier getter, Consumer setter, String newValue) { - String decryptedValue = encryptionDecryptionUtil.decrypt(getter.get(), "user_pii", "", ""); + String decryptedValue = encryptionDecryptionUtil.decrypt(getter.get(), EncryptionDecryptionUtil.USER_PII_KEY_REFERENCE_ID, "", ""); if (!decryptedValue.equals(newValue)) { - setter.accept(encryptionDecryptionUtil.encrypt(newValue, "user_pii", "", "")); + setter.accept(encryptionDecryptionUtil.encrypt(newValue, EncryptionDecryptionUtil.USER_PII_KEY_REFERENCE_ID, "", "")); return true; } return false; @@ -71,9 +71,9 @@ private String createUserMetadata(String providerSubjectId, String identityProvi userMetadata.setId(userId); userMetadata.setProviderSubjectId(providerSubjectId); userMetadata.setIdentityProvider(identityProvider); - userMetadata.setDisplayName(encryptionDecryptionUtil.encrypt(displayName, "user_pii", "", "")); - userMetadata.setProfilePictureUrl(encryptionDecryptionUtil.encrypt(profilePictureUrl, "user_pii", "", "")); - userMetadata.setEmail(encryptionDecryptionUtil.encrypt(email, "user_pii", "", "")); + userMetadata.setDisplayName(encryptionDecryptionUtil.encrypt(displayName, EncryptionDecryptionUtil.USER_PII_KEY_REFERENCE_ID, "", "")); + userMetadata.setProfilePictureUrl(encryptionDecryptionUtil.encrypt(profilePictureUrl, EncryptionDecryptionUtil.USER_PII_KEY_REFERENCE_ID, "", "")); + userMetadata.setEmail(encryptionDecryptionUtil.encrypt(email, EncryptionDecryptionUtil.USER_PII_KEY_REFERENCE_ID, "", "")); userMetadata.setCreatedAt(now); userMetadata.setUpdatedAt(now); diff --git a/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java b/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java index 54a67aeac..11783bad4 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java +++ b/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.service.impl; +import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; import io.mosip.mimoto.service.SecurityContextService; import io.mosip.mimoto.service.TokenService; @@ -82,8 +83,8 @@ private void setupSession(HttpServletRequest request, String provider, String na HttpSession session = request.getSession(true); UserMetadataDTO userMetadataDTO = new UserMetadataDTO(name, picture, email); session.setAttribute("clientRegistrationId", provider); - session.setAttribute("userMetadata", userMetadataDTO); - session.setAttribute("userId", userId); + session.setAttribute(SessionKeys.USER_METADATA, userMetadataDTO); + session.setAttribute(SessionKeys.USER_ID, userId); } private void setupSecurityContext(String provider, String sub, String name, String picture, String email, HttpServletRequest request, HttpServletResponse response) { diff --git a/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java b/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java index 049b77638..d00862046 100644 --- a/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java +++ b/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java @@ -27,6 +27,8 @@ public class EncryptionDecryptionUtil { private static final int GCM_IV_LENGTH = 12; // 12-byte IV for GCM private static final int GCM_TAG_LENGTH = 128; // 128-bit authentication tag + public static final String USER_PII_KEY_REFERENCE_ID = "user_pii"; + @Autowired private CryptomanagerService cryptomanagerService; private diff --git a/src/main/java/io/mosip/mimoto/util/WalletUtil.java b/src/main/java/io/mosip/mimoto/util/WalletUtil.java index d7b4c70f6..ef9a28b1c 100644 --- a/src/main/java/io/mosip/mimoto/util/WalletUtil.java +++ b/src/main/java/io/mosip/mimoto/util/WalletUtil.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.util; +import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.dbentity.ProofSigningKey; import io.mosip.mimoto.dbentity.Wallet; import io.mosip.mimoto.dbentity.WalletMetadata; @@ -16,8 +17,6 @@ @Component public class WalletUtil { - private static final String SESSION_WALLET_KEY = "wallet_key"; - private static final String SESSION_WALLET_ID = "wallet_id"; @Autowired private WalletRepository walletRepository; @@ -75,13 +74,13 @@ private List createProofSigningKeys(SecretKey encryptionKey, Wa } public static String getSessionWalletKey(HttpSession session) { - Object key = session.getAttribute(SESSION_WALLET_KEY); + Object key = session.getAttribute(SessionKeys.WALLET_KEY); if (key == null) throw new RuntimeException("Wallet Key is missing in session"); return key.toString(); } public static void validateWalletId(HttpSession session, String walletIdFromRequest) { - Object sessionWalletId = session.getAttribute(SESSION_WALLET_ID); + Object sessionWalletId = session.getAttribute(SessionKeys.WALLET_ID); if (sessionWalletId == null) throw new RuntimeException("Wallet Id is missing in session"); String walletIdInSession = sessionWalletId.toString(); diff --git a/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java b/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java index 2a55f151e..f1744442b 100644 --- a/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.controller; +import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.dbentity.UserMetadata; import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; import io.mosip.mimoto.repository.UserMetadataRepository; @@ -68,8 +69,8 @@ public void setUp() { .build(); mockSession = new MockHttpSession(); mockSession.setAttribute("clientRegistrationId", "google"); - mockSession.setAttribute("userId", "user123"); - userId = (String) mockSession.getAttribute("userId"); + mockSession.setAttribute(SessionKeys.USER_ID, "user123"); + userId = (String) mockSession.getAttribute(SessionKeys.USER_ID); when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider("user123", identityProvider)).thenReturn(Optional.of(userMetadata)); when(encryptionDecryptionUtil.decrypt("encryptedName", "user_pii", "", "")).thenReturn("Name 123"); when(encryptionDecryptionUtil.decrypt("encryptedUrl", "user_pii", "", "")).thenReturn("https://profile.com/pic.jpg"); @@ -117,7 +118,7 @@ public void shouldThrowExceptionIfAnyOtherErrorOccurredWhileFetchingUserData() t @Test public void shouldReturnUserProfileFromCacheForValidSession() throws Exception { UserMetadataDTO userMetadataDTO = new UserMetadataDTO("Name 123", "https://profile.com/pic.jpg", "name123@gmail.com"); - mockSession.setAttribute("userMetadata", userMetadataDTO); + mockSession.setAttribute(SessionKeys.USER_METADATA, userMetadataDTO); mockMvc.perform(get("/users/me/cache") .accept(MediaType.APPLICATION_JSON) @@ -131,7 +132,7 @@ public void shouldReturnUserProfileFromCacheForValidSession() throws Exception { @Test public void shouldReturnInternalServerErrorForCacheError() throws Exception { - mockSession.setAttribute("userMetadata", null); + mockSession.setAttribute(SessionKeys.USER_METADATA, null); mockMvc.perform(get("/users/me/cache") .accept(MediaType.APPLICATION_JSON) diff --git a/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java index b8618c614..4620cfe14 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java @@ -1,6 +1,7 @@ package io.mosip.mimoto.controller; import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.dto.WalletRequestDto; import io.mosip.mimoto.dto.WalletResponseDto; import io.mosip.mimoto.service.WalletService; @@ -58,8 +59,8 @@ public void setUp() { walletRequestDto.setWalletPin("1234"); mockSession = new MockHttpSession(); mockSession.setAttribute("clientRegistrationId", "google"); - mockSession.setAttribute("userId", "user123"); - userId = (String) mockSession.getAttribute("userId"); + mockSession.setAttribute(SessionKeys.USER_ID, "user123"); + userId = (String) mockSession.getAttribute(SessionKeys.USER_ID); } @Test From 0c2b60385bd98d541d230b8a950cce3617c614f8 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 21 Apr 2025 13:46:20 +0530 Subject: [PATCH 530/860] [INJIWEB-1512] update the description and error codes and examples for fetch credential by ID of specific wallet endpoint in openapi documentation json file Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- docs/api-documentation-openapi.json | 189 ++++++++++++++-------------- 1 file changed, 98 insertions(+), 91 deletions(-) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index 3f4f7a2b8..3299faf86 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -3062,101 +3062,109 @@ } } }, - "/wallets/{walletId}/credentials/{credentialId}": { - "get": { - "tags": ["Wallet Credentials"], - "summary": "Fetch a Verifiable Credential by ID", - "description": "This API retrieves a specific Verifiable Credential for the provided wallet ID and credential ID. It uses session-based authentication. The session ID is extracted from the Cookie header and used to validate the session and retrieve the wallet encryption key. Depending on the action (inline or download), the response disposition will change. On success, it returns a PDF file as response content.", - "operationId": "fetchCredentialById", - "security": [ - { - "SessionAuth": [] - } - ], - "parameters": [ - { - "name": "walletId", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "description": "Unique identifier of the user's wallet" - }, - { - "name": "credentialId", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "description": "Unique identifier of the credential to be retrieved" - }, - { - "name": "locale", - "in": "query", - "required": true, - "schema": { - "type": "string" + "/wallets/{walletId}/credentials/{credentialId}": { + "get": { + "tags": [ + "Wallet Credentials" + ], + "summary": "Fetch a Verifiable Credential by ID to either preview it or download it based on the requirement", + "description": "This API is protected using session-based authentication. When a request is received, the session ID is extracted from the Cookie header and used to fetch session data from Redis for user authentication. Upon successful authentication, the wallet key is retrieved from the session and used to decrypt the credential data obtained from the database.\n\nThe API retrieves a specific Verifiable Credential based on the provided wallet ID and credential ID. Depending on the action query parameter (inline or download) received in the request, the Content-Disposition header in the response is adjusted to either display the credential in the browser or prompt a file download. On success, the API returns the credential as a PDF byte stream. In case of any errors, an appropriate error response is returned.", + "operationId": "fetchVerifiableCredentialById", + "security": [ + { + "SessionAuth": [] + } + ], + "parameters": [ + { + "name": "walletId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier of the user's wallet" }, - "description": "Language preference for rendering the Verifiable Credential" - }, - { - "name": "action", - "in": "query", - "required": false, - "schema": { - "type": "string", - "enum": ["inline", "download"], - "default": "inline" + { + "name": "credentialId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier of the Verifiable Credential to be retrieved" }, - "description": "Controls how the credential should be displayed (inline or as a download)" - } - ], - "responses": { - "200": { - "description": "Verifiable Credential fetched successfully", - "headers": { - "Content-Disposition": { - "description": "Indicates if the file is displayed inline or downloaded", - "schema": { - "type": "string" - } - } + { + "name": "locale", + "in": "query", + "required": true, + "schema": { + "type": "string" + }, + "description": "Language preference in which the user expects the Verifiable Credential to be rendered" }, - "content": { - "application/pdf": { - "schema": { - "type": "string", - "format": "binary" - } - } + { + "name": "action", + "in": "query", + "required": false, + "schema": { + "type": "string", + "default": "inline" + }, + "description": "Controls how the credential should be displayed. If it is sent as download, the response will include a header to download the file. For any other value or if not provided, it defaults to inline to preview the file in the browser." } - }, - "500": { - "description": "Internal server error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - }, - "examples": { - "Wallet Key missing in session": { - "value": { - "errorCode": "RESIDENT-APP-054", - "errorMessage": "Wallet key is missing in session" - } + ], + "responses": { + "200": { + "description": "Verifiable Credential fetched successfully", + "headers": { + "Content-Disposition": { + "description": "Indicates if the verifiable credential is displayed inline or downloaded", + "schema": { + "type": "string", + "example": "inline; filename=\"credential.pdf\"" + } + } + }, + "content": { + "application/pdf": { + "schema": { + "type": "string", + "format": "binary" }, - "Database connection failure": { - "value": { - "errorCode": "RESIDENT-APP-047", - "errorMessage": "Failed to connect to the shared database while fetching Verifiable Credential from the database" + "examples": { + "Success response": { + "value": "PDF content in Binary Format" } + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" }, - "Unexpected Server Error": { - "value": { - "errorCode": "RESIDENT-APP-054", - "errorMessage": "Unexpected error occurred while fetching Verifiable Credential" + "examples": { + "Wallet Key missing in session": { + "value": { + "errorCode": "RESIDENT-APP-055", + "errorMessage": "Wallet key is missing in session" + } + }, + "Database connection failure": { + "value": { + "errorCode": "RESIDENT-APP-047", + "errorMessage": "Failed to connect to the shared database while fetching Verifiable Credential from the database" + } + }, + "Unexpected Server Error": { + "value": { + "errorCode": "RESIDENT-APP-055", + "errorMessage": "Unexpected error occurred while fetching Verifiable Credential" + } } } } @@ -3164,9 +3172,8 @@ } } } - } - }, -"/wallets": { + }, + "/wallets": { "post": { "tags": [ "Wallets" From c1f8bde35d21e1bf423d4cd90cd8f14f4a0c6be9 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 21 Apr 2025 15:14:40 +0530 Subject: [PATCH 531/860] [INJIWEB-1512] add details about new endpoint login with oauth2 ID provider ID token in openapi json documentation Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- docs/api-documentation-openapi.json | 94 +++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index 3299faf86..e88e7a802 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -3391,6 +3391,94 @@ } } } + }, + "/auth/{provider}/token-login": { + "post": { + "tags": ["OAuth2 Authentication"], + "summary": "Login and create session using OAuth2 ID token", + "description": "Accepts an OAuth2 ID token in the Authorization header and establishes a session by populating Spring Security context.\n\nFetch the ID token from a supported OAuth2 provider (such as Google or Microsoft) and provide it in the request as a Bearer token.", + "operationId": "loginWithOAuth2IdToken", + "security": [ + { + "bearerAuth": [] + } + ], + "parameters": [ + { + "name": "provider", + "in": "path", + "required": true, + "schema": { + "type": "string", + "example": "google" + }, + "description": "The OAuth2 provider to use for login. Example values: 'google', 'microsoft', 'facebook'." + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string", + "example": "Bearer " + }, + "description": "The OAuth2 ID token that must be provided in the 'Authorization' header, prefixed with 'Bearer '." + } + ], + "responses": { + "200": { + "description": "Successfully logged in and session created", + "content": { + "application/json": { + "schema": { + "type": "string", + "description": "Success message indicating that the session has been created" + }, + "examples": { + "Success response": { + "value": "Session created." + } + } + } + } + }, + "401": { + "description": "Unauthorized - invalid or expired token", + "content": { + "application/json": { + "schema": { + "type": "string", + "description": "Error message explaining why the session is not created" + }, + "examples": { + "Invalid token response": { + "value": "Invalid or expired ID token: please provide a valid token" + }, + "Token not provided": { + "value": "Bearer ID token required" + } + } + } + } + }, + "400": { + "description": "Bad Request - Unsupported provider", + "content": { + "application/json": { + "schema": { + "type": "string", + "description": "Error message explaining why the session is not created" + }, + "examples": { + "Unsupported provider response": { + "value": "Unsupported provider: provider123" + } + } + } + } + } + } + } } }, "components": { @@ -3400,6 +3488,12 @@ "in": "cookie", "name": "SESSION", "description": "Session-based authentication using a session ID stored in the cookie. The client must send the 'SESSION' cookie (e.g., SESSION=) with each request." + }, + "bearerAuth": { + "type": "http", + "scheme": "bearer", + "bearerFormat": "JWT", + "description": "JWT-based authentication. Use a valid OAuth2 ID token (e.g., from Google or Microsoft) in the Authorization header as a Bearer token. Example: 'Authorization: Bearer eyJhbGciOi...'. This token will be used to authenticate the user and establish a session." } }, "schemas": { From 16317aae7af4c6590b9150901f76f2e7268bc15d Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 21 Apr 2025 15:30:22 +0530 Subject: [PATCH 532/860] [INJIWEB-1512] add examples for missing error codes in openapi json documentation file for different oauth2 login endpoints Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- docs/api-documentation-openapi.json | 36 ++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index e88e7a802..47c1eeb01 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -2780,8 +2780,8 @@ } } }, - "500": { - "description": "Internal server error", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -2793,7 +2793,19 @@ "errorCode": "RESIDENT-APP-052", "errorMessage": "No user metadata present in cache" } - }, + } + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { "Unexpected server error": { "value": { "errorCode": "RESIDENT-APP-052", @@ -3371,6 +3383,24 @@ } } }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "Invalid PIN": { + "value": { + "errorCode": "RESIDENT-APP-051", + "errorMessage": "Exception occurred due to an incorrect pin to unlock the wallet" + } + } + } + } + } + }, "500": { "description": "Internal Server Error", "content": { From 87cfd6bed1e7cf84b9f95a17e99f48928120fea4 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 21 Apr 2025 15:39:13 +0530 Subject: [PATCH 533/860] Added test case for GoogleTokenService Signed-off-by: Gurpreet41082 --- .../controller/TokenAuthController.java | 3 +- .../io/mosip/mimoto/service/TokenService.java | 3 +- .../service/impl/GoogleTokenService.java | 19 +- .../service/GoogleTokenServiceTest.java | 187 ++++++++++++++++++ 4 files changed, 205 insertions(+), 7 deletions(-) create mode 100644 src/test/java/io/mosip/mimoto/service/GoogleTokenServiceTest.java diff --git a/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java b/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java index 977ba734f..d8c3dee5f 100644 --- a/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java +++ b/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.controller; +import io.mosip.mimoto.exception.OAuth2AuthenticationException; import io.mosip.mimoto.service.TokenService; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; @@ -32,7 +33,7 @@ public ResponseEntity createSessionFromIdToken(@RequestHeader("Authoriza } tokenService.processToken(idTokenString, provider, request, response); return ResponseEntity.ok(" Session created."); - } catch (Exception e) { + } catch (OAuth2AuthenticationException e) { return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("Invalid or expired ID token: " + e.getMessage()); } } diff --git a/src/main/java/io/mosip/mimoto/service/TokenService.java b/src/main/java/io/mosip/mimoto/service/TokenService.java index 4f015d613..e039f99eb 100644 --- a/src/main/java/io/mosip/mimoto/service/TokenService.java +++ b/src/main/java/io/mosip/mimoto/service/TokenService.java @@ -1,8 +1,9 @@ package io.mosip.mimoto.service; +import io.mosip.mimoto.exception.OAuth2AuthenticationException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; public interface TokenService { - void processToken(String idToken, String provider, HttpServletRequest request, HttpServletResponse response) throws Exception; + void processToken(String idToken, String provider, HttpServletRequest request, HttpServletResponse response) throws OAuth2AuthenticationException; } diff --git a/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java b/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java index 11783bad4..b5b8d3026 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java +++ b/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java @@ -2,15 +2,18 @@ import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; +import io.mosip.mimoto.exception.OAuth2AuthenticationException; import io.mosip.mimoto.service.SecurityContextService; import io.mosip.mimoto.service.TokenService; import io.mosip.mimoto.service.UserMetadataService; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpSession; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpStatus; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken; @@ -25,7 +28,10 @@ import java.util.List; import java.util.Map; +import static io.mosip.mimoto.exception.PlatformErrorMessages.OAUTH2_AUTHENTICATION_EXCEPTION; + @Service("google") +@Slf4j public class GoogleTokenService implements TokenService { @Autowired @@ -42,7 +48,7 @@ public class GoogleTokenService implements TokenService { private String googleClientId; @Override - public void processToken(String idToken, String provider, HttpServletRequest request, HttpServletResponse response) throws Exception { + public void processToken(String idToken, String provider, HttpServletRequest request, HttpServletResponse response) throws OAuth2AuthenticationException { Jwt jwt = decodeAndValidateToken(idToken); String email = extractClaim(jwt, "email"); @@ -55,21 +61,24 @@ public void processToken(String idToken, String provider, HttpServletRequest req setupSession(request, provider, name, picture, email, userId); setupSecurityContext(provider, sub, name, picture, email, request, response); } else { - throw new Exception("Could not extract user information from ID token."); + log.error("Could not extract user information from ID token "); + throw new OAuth2AuthenticationException(OAUTH2_AUTHENTICATION_EXCEPTION.getCode(),OAUTH2_AUTHENTICATION_EXCEPTION.getMessage(), HttpStatus.UNAUTHORIZED); } } - private Jwt decodeAndValidateToken(String idToken) throws Exception { + private Jwt decodeAndValidateToken(String idToken) throws OAuth2AuthenticationException { Jwt jwt = googleIdTokenDecoder.decode(idToken); String issuer = jwt.getIssuer().toString(); if (!issuer.equals("https://accounts.google.com") && !issuer.equals("accounts.google.com")) { - throw new Exception("Invalid ID token issuer: " + issuer); + log.error("Invalid ID token issuer: " + issuer); + throw new OAuth2AuthenticationException(OAUTH2_AUTHENTICATION_EXCEPTION.getCode(),OAUTH2_AUTHENTICATION_EXCEPTION.getMessage(), HttpStatus.UNAUTHORIZED); } String audience = jwt.getAudience().stream().findFirst().orElse(null); if (!googleClientId.equals(audience)) { - throw new Exception("Invalid ID token audience: " + audience); + log.error("Invalid ID token audience: " + audience); + throw new OAuth2AuthenticationException(OAUTH2_AUTHENTICATION_EXCEPTION.getCode(),OAUTH2_AUTHENTICATION_EXCEPTION.getMessage(), HttpStatus.UNAUTHORIZED); } return jwt; diff --git a/src/test/java/io/mosip/mimoto/service/GoogleTokenServiceTest.java b/src/test/java/io/mosip/mimoto/service/GoogleTokenServiceTest.java new file mode 100644 index 000000000..1beb557f1 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/service/GoogleTokenServiceTest.java @@ -0,0 +1,187 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.constant.SessionKeys; +import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; +import io.mosip.mimoto.service.impl.GoogleTokenService; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpSession; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.security.oauth2.jwt.Jwt; +import org.springframework.security.oauth2.jwt.JwtDecoder; +import org.springframework.test.util.ReflectionTestUtils; + +import java.time.Instant; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class GoogleTokenServiceTest { + + @Mock + private JwtDecoder googleIdTokenDecoder; + + @Mock + private UserMetadataService userMetadataService; + + @Mock + private SecurityContextService securityContextService; + + @Mock + private HttpServletRequest request; + + @Mock + private HttpServletResponse response; + + @Mock + private HttpSession session; + + @InjectMocks + private GoogleTokenService googleTokenService; + + @Captor + private ArgumentCaptor userMetadataDTOArgumentCaptor; + + private String idToken; + private String provider; + private Jwt validJwt; + private Map claims; + + @BeforeEach + void setUp() throws Exception { + idToken = "dummyIdToken"; + provider = "google"; + + // Mock the googleClientId value + ReflectionTestUtils.setField(googleTokenService, "googleClientId", "google-client-id"); + + claims = new HashMap<>(); + claims.put("email", "test@example.com"); + claims.put("name", "Test User"); + claims.put("picture", "http://example.com/picture.jpg"); + claims.put("sub", "google-subject-id"); + claims.put("iss", "https://accounts.google.com"); + claims.put("aud", "google-client-id"); + claims.put("exp", Instant.now().plusSeconds(3600).getEpochSecond()); + + validJwt = Jwt.withTokenValue(idToken) + .header("alg", "RS256") + .claims(claimsMap -> claimsMap.putAll(claims)) + .issuer("https://accounts.google.com") + .audience(Collections.singletonList("google-client-id")) + .issuedAt(Instant.now()) + .expiresAt(Instant.now().plusSeconds(3600)) + .build(); + + } + + @Test + void processTokenValidTokenShouldCallDependenciesAndSetSessionAndSecurityContext() throws Exception { + when(googleIdTokenDecoder.decode(idToken)).thenReturn(validJwt); + when(request.getSession(true)).thenReturn(session); + when(userMetadataService.updateOrInsertUserMetadata(anyString(), anyString(), anyString(), anyString(), anyString())).thenReturn("test-user-id"); + + googleTokenService.processToken(idToken, provider, request, response); + + verify(googleIdTokenDecoder).decode(idToken); + verify(userMetadataService).updateOrInsertUserMetadata("google-subject-id", provider, "Test User", "http://example.com/picture.jpg", "test@example.com"); + verify(session).setAttribute("clientRegistrationId", provider); + verify(session).setAttribute(SessionKeys.USER_ID, "test-user-id"); + verify(session).setAttribute(eq(SessionKeys.USER_METADATA), userMetadataDTOArgumentCaptor.capture()); + + UserMetadataDTO capturedUserMetadata = userMetadataDTOArgumentCaptor.getValue(); + assertEquals("Test User", capturedUserMetadata.getDisplayName()); + assertEquals("http://example.com/picture.jpg", capturedUserMetadata.getProfilePictureUrl()); + assertEquals("test@example.com", capturedUserMetadata.getEmail()); + + verify(securityContextService).setupSecurityContext(any(), eq(request), eq(response)); + } + + @Test + void processTokenInvalidIssuerShouldThrowException() throws Exception { + Jwt invalidIssuerJwt = Jwt.withTokenValue(idToken) + .header("alg", "RS256") + .claims(claimsMap -> claimsMap.putAll(claims)) + .issuer("https://invalid.com") + .audience(Collections.singletonList("google-client-id")) + .issuedAt(Instant.now()) + .expiresAt(Instant.now().plusSeconds(3600)) + .build(); + + when(googleIdTokenDecoder.decode(idToken)).thenReturn(invalidIssuerJwt); + + assertThrows(Exception.class, () -> googleTokenService.processToken(idToken, provider, request, response)); + + verify(googleIdTokenDecoder).decode(idToken); + verifyNoInteractions(userMetadataService, session, securityContextService); + } + + @Test + void processTokenInvalidAudienceShouldThrowException() throws Exception { + Jwt invalidAudienceJwt = Jwt.withTokenValue(idToken) + .header("alg", "RS256") + .claims(claimsMap -> claimsMap.putAll(claims)) + .issuer("https://accounts.google.com") + .audience(Collections.singletonList("invalid-client-id")) + .issuedAt(Instant.now()) + .expiresAt(Instant.now().plusSeconds(3600)) + .build(); + + when(googleIdTokenDecoder.decode(idToken)).thenReturn(invalidAudienceJwt); + + assertThrows(Exception.class, () -> googleTokenService.processToken(idToken, provider, request, response)); + + verify(googleIdTokenDecoder).decode(idToken); + verifyNoInteractions(userMetadataService, session, securityContextService); + } + + @Test + void processTokenMissingEmailClaimShouldThrowException() throws Exception { + Map claimsWithoutEmail = new HashMap<>(claims); + claimsWithoutEmail.remove("email"); + Jwt jwtWithoutEmail = Jwt.withTokenValue(idToken) + .header("alg", "RS256") + .claims(claimsMap -> claimsMap.putAll(claimsWithoutEmail)) + .issuer("https://accounts.google.com") + .audience(Collections.singletonList("google-client-id")) + .issuedAt(Instant.now()) + .expiresAt(Instant.now().plusSeconds(3600)) + .build(); + + when(googleIdTokenDecoder.decode(idToken)).thenReturn(jwtWithoutEmail); + + assertThrows(Exception.class, () -> googleTokenService.processToken(idToken, provider, request, response)); + + verify(googleIdTokenDecoder).decode(idToken); + verifyNoInteractions(userMetadataService, session, securityContextService); + } + + @Test + void processTokenEmptyTokenShouldThrowException() { + assertThrows(Exception.class, () -> googleTokenService.processToken("", provider, request, response)); + + verifyNoInteractions(userMetadataService, session, securityContextService); + } + + @Test + void processTokenInvalidTokenFormatShouldThrowException() throws Exception { + when(googleIdTokenDecoder.decode(idToken)).thenThrow(new IllegalArgumentException("Invalid token format")); + + assertThrows(Exception.class, () -> googleTokenService.processToken(idToken, provider, request, response)); + + verify(googleIdTokenDecoder).decode(idToken); + verifyNoInteractions(userMetadataService, session, securityContextService); + } +} From 221734c4461ea07cc97e52fc69260f58bec8e253 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 21 Apr 2025 18:52:57 +0530 Subject: [PATCH 534/860] [INJIWEB-1512] add openapi annotations for all the oauth2 login endpoints to properly show the details in the documentation Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- docs/api-documentation-openapi.json | 2 +- .../mimoto/MimotoServiceApplication.java | 14 +++- .../constant/SwaggerExampleConstants.java | 73 ++++++++++++------- .../constant/SwaggerLiteralConstants.java | 11 +++ .../controller/TokenAuthController.java | 16 +++- .../mimoto/controller/UsersController.java | 30 ++++++-- .../WalletCredentialsController.java | 41 ++++++++--- .../mimoto/controller/WalletsController.java | 32 +++++++- 8 files changed, 163 insertions(+), 56 deletions(-) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index 47c1eeb01..7a1f6024a 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -3336,7 +3336,7 @@ "tags": [ "Wallets" ], - "summary": "Unlock a Wallet", + "summary": "Unlock an existing Wallet", "description": "This API is secured using session-based authentication. Upon receiving a request, the session is first retrieved using the session ID extracted from the Cookie header to authenticate the user. Once authenticated, the user's ID is obtained from the session stored in Redis. Using this user ID along with the provided wallet ID and PIN, the corresponding wallet key is fetched and stored in the session. If successful then the API returns a response containing the wallet ID otherwise an appropriate error response is returned.", "operationId": "unlockWallet", "security": [ diff --git a/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java b/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java index b4b71121c..613423b32 100644 --- a/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java +++ b/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java @@ -5,6 +5,9 @@ import io.mosip.kernel.biometrics.spi.CbeffUtil; import io.mosip.kernel.cbeffutil.impl.CbeffImpl; import io.mosip.kernel.keygenerator.bouncycastle.KeyGenerator; +import io.swagger.v3.oas.annotations.enums.SecuritySchemeIn; +import io.swagger.v3.oas.annotations.enums.SecuritySchemeType; +import io.swagger.v3.oas.annotations.security.SecurityScheme; import lombok.extern.slf4j.Slf4j; import org.json.simple.JSONObject; import org.springframework.boot.SpringApplication; @@ -34,11 +37,18 @@ }, exclude = { SecurityAutoConfiguration.class }) -@EntityScan(basePackages = {"io.mosip.mimoto.dbentity","io.mosip.kernel.keymanagerservice.entity"}) -@EnableJpaRepositories(basePackages = {"io.mosip.mimoto.repository","io.mosip.kernel.keymanagerservice.repository"}) +@EntityScan(basePackages = {"io.mosip.mimoto.dbentity", "io.mosip.kernel.keymanagerservice.entity"}) +@EnableJpaRepositories(basePackages = {"io.mosip.mimoto.repository", "io.mosip.kernel.keymanagerservice.repository"}) @Slf4j @EnableScheduling @EnableAsync +@SecurityScheme( + name = "SessionAuth", + type = SecuritySchemeType.APIKEY, + in = SecuritySchemeIn.COOKIE, + paramName = "SESSION", + description = "Session-based authentication using a session ID stored in the cookie. The client must send the 'SESSION' cookie (e.g., SESSION=) with each request." +) public class MimotoServiceApplication { @Bean diff --git a/src/main/java/io/mosip/mimoto/constant/SwaggerExampleConstants.java b/src/main/java/io/mosip/mimoto/constant/SwaggerExampleConstants.java index f22d378e6..11a7790e9 100644 --- a/src/main/java/io/mosip/mimoto/constant/SwaggerExampleConstants.java +++ b/src/main/java/io/mosip/mimoto/constant/SwaggerExampleConstants.java @@ -3,33 +3,52 @@ public class SwaggerExampleConstants { public static final String ALL_PROPERTIES_EXAMPLE = """ + { + "response": { + "modelDownloadMaxRetry": "10", + "audience": "ida-binding", + "datashare.host": "https://datashare-inji.collab.mosip.net", + "allowedInternalAuthType": "otp,bio-Finger,bio-Iris,bio-Face", + "openId4VCIDownloadVCTimeout": "30000", + "qr.code.height": "650", + "ovp.error.redirect.url.pattern": "%s?error=%s&error_description=%s", + "vcDownloadMaxRetry": "10", + "ovp.qrdata.pattern": "INJI_OVP://https://injiweb.collab.mosip.net/authorize?response_type=vp_token&resource=%s&presentation_definition=%s", + "minStorageRequiredForAuditEntry": "2", + "minStorageRequired": "2", + "vcDownloadPoolInterval": "6000", + "issuer": "residentapp", + "ovp.redirect.url.pattern": "%s#vp_token=%s&presentation_submission=%s", + "allowedAuthType": "demo,otp,bio-Finger,bio-Iris,bio-Face", + "allowedEkycAuthType": "demo,otp,bio-Finger,bio-Iris,bio-Face", + "warningDomainName": "https://api.collab.mosip.net", + "qr.code.width": "650", + "web.host": "https://injiweb.collab.mosip.net", + "web.redirect.url": "https://injiweb.collab.mosip.net/authorize", + "aboutInjiUrl": "https://docs.mosip.io/inji/inji-mobile-wallet/overview", + "qr.data.size.limit": "10000", + "faceSdkModelUrl": "https://api.collab.mosip.net/inji" + }, + "errors": [] + } + """; + + public static final String FETCH_USER_PROFILE_SUCCESS = """ + { + "display_name": "John Doe", + "profile_picture_url": "https://example.com/profile.jpg", + "email": "john.doe@example.com" + } + """; + + public static final String FETCH_ALL_WALLETS_OF_USER_SUCCESS = """ + [ + { + "walletId": "123e4567-e89b-12d3-a456-426614174000" + }, { - "response": { - "modelDownloadMaxRetry": "10", - "audience": "ida-binding", - "datashare.host": "https://datashare-inji.collab.mosip.net", - "allowedInternalAuthType": "otp,bio-Finger,bio-Iris,bio-Face", - "openId4VCIDownloadVCTimeout": "30000", - "qr.code.height": "650", - "ovp.error.redirect.url.pattern": "%s?error=%s&error_description=%s", - "vcDownloadMaxRetry": "10", - "ovp.qrdata.pattern": "INJI_OVP://https://injiweb.collab.mosip.net/authorize?response_type=vp_token&resource=%s&presentation_definition=%s", - "minStorageRequiredForAuditEntry": "2", - "minStorageRequired": "2", - "vcDownloadPoolInterval": "6000", - "issuer": "residentapp", - "ovp.redirect.url.pattern": "%s#vp_token=%s&presentation_submission=%s", - "allowedAuthType": "demo,otp,bio-Finger,bio-Iris,bio-Face", - "allowedEkycAuthType": "demo,otp,bio-Finger,bio-Iris,bio-Face", - "warningDomainName": "https://api.collab.mosip.net", - "qr.code.width": "650", - "web.host": "https://injiweb.collab.mosip.net", - "web.redirect.url": "https://injiweb.collab.mosip.net/authorize", - "aboutInjiUrl": "https://docs.mosip.io/inji/inji-mobile-wallet/overview", - "qr.data.size.limit": "10000", - "faceSdkModelUrl": "https://api.collab.mosip.net/inji" - }, - "errors": [] + "walletId": "223e4567-e89b-12d3-a456-426614174001" } - """; + ] + """; } diff --git a/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java b/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java index 761c76c82..3bd52f50a 100644 --- a/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java +++ b/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java @@ -76,4 +76,15 @@ public class SwaggerLiteralConstants { public static final String VERIFIERS_GET_VERIFIERS_SUMMARY = "Retrieve all trusted verifiers" ; public static final String VERIFIERS_GET_VERIFIERS_DESCRIPTION = "This endpoint allow you to retrieve all the trusted verifiers" ; + /* Users Controller */ + public static final String USERS_NAME = "Users" ; + public static final String USERS_DESCRIPTION = "All the User Profile related endpoints" ; + + /* Wallets Controller */ + public static final String WALLETS_NAME = "Wallets" ; + public static final String WALLETS_DESCRIPTION = "All the Wallet related endpoints" ; + + /* Wallet Credentials Controller */ + public static final String WALLET_CREDENTIALS_NAME = "Wallet Credentials" ; + public static final String WALLET_CREDENTIALS_DESCRIPTION = "All the Wallet Credentials related endpoints" ; } diff --git a/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java b/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java index 977ba734f..0c8f39cb1 100644 --- a/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java +++ b/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java @@ -1,6 +1,8 @@ package io.mosip.mimoto.controller; import io.mosip.mimoto.service.TokenService; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.ExampleObject; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; @@ -10,6 +12,12 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RestController; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import io.swagger.v3.oas.annotations.responses.ApiResponse; import java.util.Map; @@ -19,10 +27,12 @@ public class TokenAuthController { @Autowired private Map tokenServices; // Map of provider name to TokenService + @Operation(summary = "Login and create session using OAuth2 ID token", description = "Accepts an OAuth2 ID token in the Authorization header and establishes a session by populating Spring Security context.\n\nFetch the ID token from a supported OAuth2 provider (such as Google or Microsoft) and provide it in the request as a Bearer token.", operationId = "loginWithOAuth2IdToken", security = @SecurityRequirement(name = "bearerAuth"), parameters = {@Parameter(name = "provider", in = ParameterIn.PATH, required = true, description = "The OAuth2 provider to use for login. Example values: 'google', 'microsoft', 'facebook'.", schema = @Schema(type = "string", example = "google")), @Parameter(name = "Authorization", in = ParameterIn.HEADER, required = true, description = "The OAuth2 ID token that must be provided in the 'Authorization' header, prefixed with 'Bearer '.", schema = @Schema(type = "string", example = "Bearer "))}) + @ApiResponse(responseCode = "200", description = "Successfully logged in and session created", content = @Content(mediaType = "application/json", schema = @Schema(type = "string", description = "Success message indicating that the session has been created"), examples = @ExampleObject(value = "\"Session created.\""))) + @ApiResponse(responseCode = "401", description = "Unauthorized - invalid or expired token", content = @Content(mediaType = "application/json", schema = @Schema(type = "string", description = "Error message explaining why the session is not created"), examples = {@ExampleObject(value = "\"Invalid or expired ID token: please provide a valid token\""), @ExampleObject(value = "\"Bearer ID token required\"")})) + @ApiResponse(responseCode = "400", description = "Bad Request - Unsupported provider", content = @Content(mediaType = "application/json", schema = @Schema(type = "string", description = "Error message explaining why the session is not created"), examples = @ExampleObject(value = "\"Unsupported provider: provider123\""))) @PostMapping("/auth/{provider}/token-login") - public ResponseEntity createSessionFromIdToken(@RequestHeader("Authorization") String authorization, - @PathVariable("provider") String provider, - HttpServletRequest request, HttpServletResponse response) { + public ResponseEntity createSessionFromIdToken(@RequestHeader("Authorization") String authorization, @PathVariable("provider") String provider, HttpServletRequest request, HttpServletResponse response) { if (authorization != null && authorization.startsWith("Bearer ")) { String idTokenString = authorization.substring(7); try { diff --git a/src/main/java/io/mosip/mimoto/controller/UsersController.java b/src/main/java/io/mosip/mimoto/controller/UsersController.java index d4bb50cbe..97cc61bbe 100644 --- a/src/main/java/io/mosip/mimoto/controller/UsersController.java +++ b/src/main/java/io/mosip/mimoto/controller/UsersController.java @@ -1,6 +1,9 @@ package io.mosip.mimoto.controller; +import io.mosip.mimoto.constant.SwaggerExampleConstants; +import io.mosip.mimoto.constant.SwaggerLiteralConstants; import io.mosip.mimoto.dbentity.UserMetadata; +import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; import io.mosip.mimoto.exception.LoginSessionException; import io.mosip.mimoto.exception.DatabaseConnectionException; @@ -10,6 +13,13 @@ import io.mosip.mimoto.repository.UserMetadataRepository; import io.mosip.mimoto.util.EncryptionDecryptionUtil; import io.mosip.mimoto.util.Utilities; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.ExampleObject; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpSession; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -20,11 +30,13 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; + import static io.mosip.mimoto.exception.PlatformErrorMessages.*; @Slf4j @RestController @RequestMapping(value = "/users/me") +@Tag(name = SwaggerLiteralConstants.USERS_NAME, description = SwaggerLiteralConstants.USERS_DESCRIPTION) public class UsersController { @Autowired @@ -33,6 +45,10 @@ public class UsersController { @Autowired private EncryptionDecryptionUtil encryptionDecryptionUtill; + @Operation(summary = "Retrieve user metadata from the database", description = "This API is secured using session-based authentication. When a request is made, the server retrieves the session ID from the Cookie header and uses it to fetch session details from Redis. From the session, it extracts the user's unique identifier (typically the sub field provided by the identity provider) along with the clientRegistrationId. These values are then used to retrieve the user's metadata from the database. If successful, the API returns the user's profile information. If any issue occurs such as missing user data or server error then an appropriate error response is returned.", operationId = "getUserProfileFromDB", security = @SecurityRequirement(name = "SessionAuth")) + @ApiResponse(responseCode = "200", description = "User profile retrieved successfully from the Database", content = @Content(mediaType = "application/json", schema = @Schema(implementation = UserMetadataDTO.class), examples = @ExampleObject(name = "Success response", value = SwaggerExampleConstants.FETCH_USER_PROFILE_SUCCESS))) + @ApiResponse(responseCode = "404", description = "User not found", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "User not found in the Database", value = "{\"errorCode\": \"RESIDENT-APP-049\", \"errorMessage\": \"User not found. Please check your credentials or login again\"}"))) + @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "Database connection failure", value = "{\"errorCode\": \"RESIDENT-APP-047\", \"errorMessage\": \"Failed to connect to the shared database while fetching User Metadata data from the database\"}"), @ExampleObject(name = "Unexpected server error", value = "{\"errorCode\": \"RESIDENT-APP-049\", \"errorMessage\": \"An unexpected error occurred while retrieving user profile from the database\"}"), @ExampleObject(name = "User metadata not found in the Database", value = "{\"errorCode\": \"RESIDENT-APP-049\", \"errorMessage\": \"An unexpected error occurred while downloading and storing user metadata into database\"}")})) @GetMapping("/db") public ResponseEntity getUserProfile(Authentication authentication, HttpSession session) { try { @@ -40,9 +56,7 @@ public ResponseEntity getUserProfile(Authentication authenticat UserMetadata userMetadata = fetchUserMetadata(authentication.getName(), identityProvider); - UserMetadataDTO userMetadataDTO = new UserMetadataDTO(encryptionDecryptionUtill.decrypt(userMetadata.getDisplayName(), "user_pii", "", ""), - encryptionDecryptionUtill.decrypt(userMetadata.getProfilePictureUrl(), "user_pii", "", ""), - encryptionDecryptionUtill.decrypt(userMetadata.getEmail(), "user_pii", "", "")); + UserMetadataDTO userMetadataDTO = new UserMetadataDTO(encryptionDecryptionUtill.decrypt(userMetadata.getDisplayName(), "user_pii", "", ""), encryptionDecryptionUtill.decrypt(userMetadata.getProfilePictureUrl(), "user_pii", "", ""), encryptionDecryptionUtill.decrypt(userMetadata.getEmail(), "user_pii", "", "")); return ResponseEntity.status(HttpStatus.OK).body(userMetadataDTO); } catch (OAuth2AuthenticationException exception) { @@ -60,10 +74,13 @@ public ResponseEntity getUserProfile(Authentication authenticat } private UserMetadata fetchUserMetadata(String providerSubjectId, String identityProvider) throws OAuth2AuthenticationException { - return userMetadataRepository.findByProviderSubjectIdAndIdentityProvider(providerSubjectId, identityProvider) - .orElseThrow(() -> new OAuth2AuthenticationException(USER_METADATA_FETCH_EXCEPTION.getCode(), "User not found. Please check your credentials or login again", HttpStatus.NOT_FOUND)); + return userMetadataRepository.findByProviderSubjectIdAndIdentityProvider(providerSubjectId, identityProvider).orElseThrow(() -> new OAuth2AuthenticationException(USER_METADATA_FETCH_EXCEPTION.getCode(), "User not found. Please check your credentials or login again", HttpStatus.NOT_FOUND)); } + @Operation(summary = "Retrieve user metadata from the stored redis session", description = "This API is secured using session-based authentication. When a request is made, the server retrieves the session ID from the Cookie header and uses it to fetch session details from Redis. It then attempts to retrieve the user's metadata directly from the session. If the metadata is available, the API returns the user's profile information otherwise an appropriate error response is returned.", operationId = "getUserProfileFromCache", security = @SecurityRequirement(name = "SessionAuth")) + @ApiResponse(responseCode = "200", description = "User profile retrieved successfully from the session", content = @Content(mediaType = "application/json", schema = @Schema(implementation = UserMetadataDTO.class), examples = @ExampleObject(name = "Success response", value = SwaggerExampleConstants.FETCH_USER_PROFILE_SUCCESS))) + @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "User metadata not found in session",value = "{\"errorCode\": \"RESIDENT-APP-052\", \"errorMessage\": \"No user metadata present in cache\"}"))) + @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected server error", value = "{\"errorCode\": \"RESIDENT-APP-052\", \"errorMessage\": \"An unexpected error occurred while retrieving user metadata from cache\"}"))) @GetMapping("/cache") public ResponseEntity getUserProfileFromCache(Authentication authentication, HttpSession session) { try { @@ -72,11 +89,10 @@ public ResponseEntity getUserProfileFromCache(Authentication au throw new LoginSessionException(USER_METADATA_CACHE_FETCH_EXCEPTION.getCode(), "No user metadata present in cache", HttpStatus.UNAUTHORIZED); } return ResponseEntity.status(HttpStatus.OK).body(userMetadataDTO); - } catch (Exception exception) { + } catch (Exception exception) { log.error("Error occurred while retrieving user profile from cache : ", exception); return Utilities.getErrorResponseEntityWithoutWrapper(exception, USER_METADATA_CACHE_FETCH_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR, null); } - } } diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index 56ceaa5e8..7a8768182 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.controller; +import io.mosip.mimoto.constant.SwaggerLiteralConstants; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; import io.mosip.mimoto.dto.resident.WalletCredentialResponseDTO; @@ -19,6 +20,16 @@ import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.ExampleObject; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.parameters.RequestBody; import java.io.IOException; import java.util.List; @@ -29,6 +40,7 @@ @Slf4j @RestController @RequestMapping(value = "/wallets/{walletId}/credentials") +@Tag(name = SwaggerLiteralConstants.WALLET_CREDENTIALS_NAME, description = SwaggerLiteralConstants.WALLET_CREDENTIALS_DESCRIPTION) public class WalletCredentialsController { @Autowired private WalletCredentialService walletCredentialService; @@ -36,6 +48,10 @@ public class WalletCredentialsController { @Autowired private CredentialUtilService credentialUtilService; + @Operation(summary = "Download a Verifiable Credential", description = "This API allows the user to download a Verifiable Credential by providing the wallet ID and various query parameters such as issuer, credential type, storage expiry, and locale. The user's session is authenticated, and the requested credential is fetched and stored in the wallet. If successful, the API returns the Verifiable Credential details, otherwise, an appropriate error response is returned.", operationId = "downloadCredential", security = @SecurityRequirement(name = "SessionAuth"), parameters = {@Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet from which the credential will be downloaded", schema = @Schema(type = "string")), @Parameter(name = "issuer", in = ParameterIn.QUERY, required = false, description = "The identifier of the issuer of the credential", schema = @Schema(type = "string")), @Parameter(name = "credential", in = ParameterIn.QUERY, required = false, description = "The type of the credential to be downloaded", schema = @Schema(type = "string")), @Parameter(name = "vcStorageExpiryLimitInTimes", in = ParameterIn.QUERY, required = false, description = "The expiration limit for the Verifiable Credential storage", schema = @Schema(type = "string", defaultValue = "-1")), @Parameter(name = "locale", in = ParameterIn.QUERY, required = false, description = "The locale for the Verifiable Credential", schema = @Schema(type = "string"))}, requestBody = @RequestBody()) + @ApiResponse(responseCode = "200", description = "Verifiable Credential downloaded successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = VerifiableCredentialResponseDTO.class))) + @ApiResponse(responseCode = "400", description = "Bad Request - Invalid parameters or session", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-052\", \"errorMessage\": \"Exception occurred while fetching credential types\"}"))) + @ApiResponse(responseCode = "500", description = "Internal Server Error - Error occurred while fetching or storing the credential", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-052\", \"errorMessage\": \"Exception occurred while saving the credential\"}"))) @PostMapping public ResponseEntity downloadCredential(@PathVariable("walletId") String walletId, @RequestParam Map params, HttpSession httpSession) { //TODO: remove this default value after the apitest is updated @@ -53,8 +69,7 @@ public ResponseEntity downloadCredential(@PathVariable("walletId") String wal TokenResponseDTO response = credentialUtilService.getTokenResponse(params, issuerId); log.info("Initiated call for fetching and storing Verifiable Credential in the database for walletId: {}", walletId); - VerifiableCredentialResponseDTO credentialResponseDTO = walletCredentialService.fetchAndStoreCredential( - issuerId, credentialType, response, credentialValidity, locale, walletId, base64EncodedWalletKey); + VerifiableCredentialResponseDTO credentialResponseDTO = walletCredentialService.fetchAndStoreCredential(issuerId, credentialType, response, credentialValidity, locale, walletId, base64EncodedWalletKey); return ResponseEntity.status(HttpStatus.OK).body(credentialResponseDTO); } catch (ApiNotAccessibleException | IOException exception) { @@ -70,6 +85,10 @@ public ResponseEntity downloadCredential(@PathVariable("walletId") String wal } } + @Operation(summary = "Fetch all credentials for a given wallet", description = "This API retrieves all credentials associated with the specified wallet. The wallet is identified using its unique wallet ID, and the credentials are returned based on the provided locale. The user's session is authenticated to ensure access to the wallet. If successful, the API returns a list of Verifiable Credentials. Otherwise, an appropriate error response is returned.", operationId = "fetchAllCredentialsForGivenWallet", security = @SecurityRequirement(name = "SessionAuth"), parameters = {@Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet for which credentials will be fetched", schema = @Schema(type = "string")), @Parameter(name = "locale", in = ParameterIn.QUERY, required = true, description = "The locale to be used for credential retrieval", schema = @Schema(type = "string"))}) + @ApiResponse(responseCode = "200", description = "Successfully retrieved all credentials for the wallet", content = @Content(mediaType = "application/json", schema = @Schema(implementation = VerifiableCredentialResponseDTO.class))) + @ApiResponse(responseCode = "400", description = "Bad Request - Invalid wallet ID or missing parameters", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-053\", \"errorMessage\": \"Invalid wallet ID or missing parameters\"}"))) + @ApiResponse(responseCode = "500", description = "Internal Server Error - Error occurred while fetching credentials from the database", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-054\", \"errorMessage\": \"Error occurred while fetching credentials for wallet\"}"))) @GetMapping public ResponseEntity fetchAllCredentialsForGivenWallet(@PathVariable("walletId") String walletId, @RequestParam("locale") String locale, HttpSession httpSession) { try { @@ -90,6 +109,10 @@ public ResponseEntity fetchAllCredentialsForGivenWallet(@PathVariable("wallet } } + @Operation(summary = "Fetch a specific Verifiable Credential", description = "This API retrieves a specific Verifiable Credential from the given wallet. The wallet and credential are identified by their respective IDs, and the locale parameter is used for localization. The action parameter determines whether the credential should be displayed inline or downloaded. The user's session is authenticated to ensure access to the wallet. If successful, the credential is returned as a PDF file. Otherwise, an appropriate error response is returned.", operationId = "getVerifiableCredential", security = @SecurityRequirement(name = "SessionAuth"), parameters = {@Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet from which the credential will be fetched", schema = @Schema(type = "string")), @Parameter(name = "credentialId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the Verifiable Credential to be fetched", schema = @Schema(type = "string")), @Parameter(name = "locale", in = ParameterIn.QUERY, required = true, description = "The locale to be used for credential retrieval", schema = @Schema(type = "string")), @Parameter(name = "action", in = ParameterIn.QUERY, required = false, description = "Determines whether the credential is displayed inline or downloaded. Default is inline.", schema = @Schema(type = "string", defaultValue = "inline"))}) + @ApiResponse(responseCode = "200", description = "Successfully fetched the Verifiable Credential", content = @Content(mediaType = "application/pdf", examples = @ExampleObject(value = "{ \"credentialId\": \"123e4567-e89b-12d3-a456-426614174000\", \"fileName\": \"credential.pdf\" }"))) + @ApiResponse(responseCode = "400", description = "Bad Request - Invalid wallet ID, credential ID or missing parameters", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-053\", \"errorMessage\": \"Invalid wallet or credential ID\"}"))) + @ApiResponse(responseCode = "500", description = "Internal Server Error - Error occurred while fetching the Verifiable Credential", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-054\", \"errorMessage\": \"Error occurred while fetching the Verifiable Credential\"}"))) @GetMapping("/{credentialId}") public ResponseEntity getVerifiableCredential(@PathVariable("walletId") String walletId, @PathVariable("credentialId") String credentialId, @RequestParam("locale") String locale, @RequestParam(value = "action", defaultValue = "inline") String action, HttpSession httpSession) { try { @@ -98,18 +121,12 @@ public ResponseEntity getVerifiableCredential(@PathVariable("walletId") Strin WalletUtil.validateWalletId(httpSession, walletId); String base64EncodedWalletKey = WalletUtil.getSessionWalletKey(httpSession); - WalletCredentialResponseDTO walletCredentialResponseDTO = walletCredentialService.fetchVerifiableCredential(walletId, - credentialId, base64EncodedWalletKey, locale); + WalletCredentialResponseDTO walletCredentialResponseDTO = walletCredentialService.fetchVerifiableCredential(walletId, credentialId, base64EncodedWalletKey, locale); String dispositionType = "download".equalsIgnoreCase(action) ? "attachment" : "inline"; - String contentDisposition = String.format("%s; filename=\"%s\"", - dispositionType, walletCredentialResponseDTO.getFileName()); - - return ResponseEntity.ok() - .header(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, HttpHeaders.CONTENT_DISPOSITION) - .header(HttpHeaders.CONTENT_DISPOSITION, contentDisposition) - .contentType(MediaType.APPLICATION_PDF) - .body(walletCredentialResponseDTO.getFileContentStream()); + String contentDisposition = String.format("%s; filename=\"%s\"", dispositionType, walletCredentialResponseDTO.getFileName()); + + return ResponseEntity.ok().header(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, HttpHeaders.CONTENT_DISPOSITION).header(HttpHeaders.CONTENT_DISPOSITION, contentDisposition).contentType(MediaType.APPLICATION_PDF).body(walletCredentialResponseDTO.getFileContentStream()); } catch (DataAccessResourceFailureException exception) { log.error("Exception occurred while connecting to the database to fetch the Verifiable Credential:", exception); diff --git a/src/main/java/io/mosip/mimoto/controller/WalletsController.java b/src/main/java/io/mosip/mimoto/controller/WalletsController.java index f82416f0e..e3efb2267 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletsController.java @@ -1,12 +1,23 @@ package io.mosip.mimoto.controller; import io.mosip.kernel.core.crypto.exception.InvalidDataException; +import io.mosip.mimoto.constant.SwaggerExampleConstants; +import io.mosip.mimoto.constant.SwaggerLiteralConstants; import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.WalletRequestDto; import io.mosip.mimoto.dto.WalletResponseDto; import io.mosip.mimoto.service.WalletService; import io.mosip.mimoto.util.Utilities; import io.mosip.mimoto.util.WalletValidator; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.ExampleObject; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpSession; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -14,6 +25,8 @@ import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.parameters.RequestBody; import java.util.List; @@ -23,15 +36,19 @@ @Slf4j @RestController @RequestMapping(value = "/wallets") +@Tag(name = SwaggerLiteralConstants.WALLETS_NAME, description = SwaggerLiteralConstants.WALLETS_DESCRIPTION) public class WalletsController { - @Autowired private WalletService walletService; @Autowired private WalletValidator walletValidator; + @Operation(summary = "Create a new wallet", description = "This API is secured using session-based authentication. The session ID is extracted from the Cookie header and used to retrieve session details from Redis for authentication. The user ID is then obtained from the session and along with the provided wallet name and PIN is used to create a new wallet in the database. If the wallet is created successfully, a unique identifier for the wallet is returned otherwise an appropriate error response is provided.", operationId = "createWallet", security = @SecurityRequirement(name = "SessionAuth")) + @ApiResponse(responseCode = "200", description = "Wallet created successfully", content = @Content(mediaType = "application/json", schema = @Schema(type = "string", description = "Unique identifier of the Wallet stored in the database"), examples = @ExampleObject(name = "Success response", value = "d94a2e70-1234-4f2f-9eae-98765"))) + @ApiResponse(responseCode = "400", description = "Invalid wallet creation request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Invalid request", value = "{\"errorCode\": \"RESIDENT-APP-050\", \"errorMessage\": \"Pin should be numeric with 4 or 6 digits.\"}"))) + @ApiResponse(responseCode = "500", description = "Internal server error while creating wallet", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected server error", value = "{\"errorCode\": \"RESIDENT-APP-050\", \"errorMessage\": \"An unexpected error occurred while creating the wallet\"}"))) @PostMapping public ResponseEntity createWallet(@RequestBody WalletRequestDto wallet, HttpSession httpSession) { try { @@ -40,13 +57,16 @@ public ResponseEntity createWallet(@RequestBody WalletRequestDto wallet, } catch (IllegalArgumentException exception) { log.error("Error occurred while creating user wallets : ", exception); return Utilities.getErrorResponseEntityWithoutWrapper(exception, USER_WALLET_CREATION_EXCEPTION.getCode(), HttpStatus.BAD_REQUEST, MediaType.APPLICATION_JSON); - } catch (Exception exception) { + } catch (Exception exception) { log.error("Error occurred while creating user wallets : ", exception); - return Utilities.getErrorResponseEntityWithoutWrapper(exception, USER_WALLET_CREATION_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR,MediaType.APPLICATION_JSON); + return Utilities.getErrorResponseEntityWithoutWrapper(exception, USER_WALLET_CREATION_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); } } + @Operation(summary = "Retrieve all wallets for the user", description = "This API is secured using session-based authentication. Upon receiving a request, the session is first retrieved using the session ID extracted from the Cookie header to authenticate the user. Once authenticated, the user's ID is obtained from the session stored in Redis. Using this user ID, the API fetches all wallets associated with the user from the database and returns them. If an error occurs while retrieving the wallets, an appropriate error response is returned.", operationId = "getWallets", security = @SecurityRequirement(name = "SessionAuth")) + @ApiResponse(responseCode = "200", description = "List of wallets retrieved successfully", content = @Content(mediaType = "application/json", array = @ArraySchema(schema = @Schema(implementation = WalletResponseDto.class)), examples = @ExampleObject(name = "Success response", value = SwaggerExampleConstants.FETCH_ALL_WALLETS_OF_USER_SUCCESS))) + @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected server error", value = "{\"errorCode\": \"RESIDENT-APP-051\", \"errorMessage\": \"An unexpected error occurred while retrieving user wallets\"}"))) @GetMapping public ResponseEntity> getWallets(HttpSession httpSession) { try { @@ -55,10 +75,14 @@ public ResponseEntity> getWallets(HttpSession httpSessio return ResponseEntity.status(HttpStatus.OK).body(response); } catch (Exception exception) { log.error("Error occurred while retrieving user wallets : ", exception); - return Utilities.getErrorResponseEntityWithoutWrapper(exception, USER_WALLET_RETRIEVAL_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR,MediaType.APPLICATION_JSON); + return Utilities.getErrorResponseEntityWithoutWrapper(exception, USER_WALLET_RETRIEVAL_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); } } + @Operation(summary = "Unlock an existing Wallet", description = "This API is secured using session-based authentication. Upon receiving a request, the session is first retrieved using the session ID extracted from the Cookie header to authenticate the user. Once authenticated, the user's ID is obtained from the session stored in Redis. Using this user ID along with the provided wallet ID and PIN, the corresponding wallet key is fetched and stored in the session. If successful, the API returns a response containing the wallet ID; otherwise, an appropriate error response is returned.", operationId = "unlockWallet", security = @SecurityRequirement(name = "SessionAuth"), parameters = {@Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet to be unlocked", schema = @Schema(type = "string"))}, requestBody = @RequestBody(required = true, content = @Content(mediaType = "application/json", schema = @Schema(implementation = WalletRequestDto.class)))) + @ApiResponse(responseCode = "200", description = "Wallet unlocked successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = WalletResponseDto.class), examples = @ExampleObject(value = "{\"walletId\": \"123e4567-e89b-12d3-a456-426614174000\"}"))) + @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-051\", \"errorMessage\": \"Exception occurred due to an incorrect pin to unlock the wallet\"}"))) + @ApiResponse(responseCode = "500", description = "Internal Server Error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-051\", \"errorMessage\": \"An unexpected error occurred while retrieving the wallet details\"}"))) @PostMapping("/{walletId}/unlock") public ResponseEntity unlockWallet(@PathVariable("walletId") String walletId, @RequestBody WalletRequestDto wallet, HttpSession httpSession) { try { From dc73c7ffc3f42193d47cab434ff0064ef27f0b39 Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Mon, 21 Apr 2025 20:05:27 +0530 Subject: [PATCH 535/860] [INJIMOB-2857] create data directory for storing OTP flow json files (#694) Signed-off-by: KiruthikaJeyashankar --- Dockerfile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Dockerfile b/Dockerfile index 21ddf0bd9..f83100aa6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -65,6 +65,9 @@ WORKDIR /home/${container_user} ENV work_dir=/home/${container_user} +# create directory - data under working directory to store JSON files in OTP flow credential download +RUN mkdir -p ${work_dir}/data + # change volume to whichever storage directory you want to use for this container. VOLUME ${work_dir}/logs ${work_dir}/Glowroot From e24be89921fe508e85d6263730ebb041a3e29fc4 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 22 Apr 2025 11:11:51 +0530 Subject: [PATCH 536/860] [INJIWEB-1512] use fully qualified name for open api swagger RequestBody annotation in walletsController file Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- src/main/java/io/mosip/mimoto/controller/WalletsController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/mosip/mimoto/controller/WalletsController.java b/src/main/java/io/mosip/mimoto/controller/WalletsController.java index dbf9a8852..c53cba440 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletsController.java @@ -80,7 +80,7 @@ public ResponseEntity> getWallets(HttpSession httpSessio } } - @Operation(summary = "Unlock an existing Wallet", description = "This API is secured using session-based authentication. Upon receiving a request, the session is first retrieved using the session ID extracted from the Cookie header to authenticate the user. Once authenticated, the user's ID is obtained from the session stored in Redis. Using this user ID along with the provided wallet ID and PIN, the corresponding wallet key is fetched and stored in the session. If successful, the API returns a response containing the wallet ID; otherwise, an appropriate error response is returned.", operationId = "unlockWallet", security = @SecurityRequirement(name = "SessionAuth"), parameters = {@Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet to be unlocked", schema = @Schema(type = "string"))}, requestBody = @RequestBody(required = true, content = @Content(mediaType = "application/json", schema = @Schema(implementation = WalletRequestDto.class)))) + @Operation(summary = "Unlock an existing Wallet", description = "This API is secured using session-based authentication. Upon receiving a request, the session is first retrieved using the session ID extracted from the Cookie header to authenticate the user. Once authenticated, the user's ID is obtained from the session stored in Redis. Using this user ID along with the provided wallet ID and PIN, the corresponding wallet key is fetched and stored in the session. If successful, the API returns a response containing the wallet ID; otherwise, an appropriate error response is returned.", operationId = "unlockWallet", security = @SecurityRequirement(name = "SessionAuth"), parameters = {@Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet to be unlocked", schema = @Schema(type = "string"))}, requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody(required = true, content = @Content(mediaType = "application/json", schema = @Schema(implementation = WalletRequestDto.class)))) @ApiResponse(responseCode = "200", description = "Wallet unlocked successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = WalletResponseDto.class), examples = @ExampleObject(value = "{\"walletId\": \"123e4567-e89b-12d3-a456-426614174000\"}"))) @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-051\", \"errorMessage\": \"Exception occurred due to an incorrect pin to unlock the wallet\"}"))) @ApiResponse(responseCode = "500", description = "Internal Server Error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-051\", \"errorMessage\": \"An unexpected error occurred while retrieving the wallet details\"}"))) From bb93ea3d0bf1d0a33e10a217962e932db28c19ce Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 22 Apr 2025 11:56:52 +0530 Subject: [PATCH 537/860] [INJIWEB-1512] update imports in oauth2 login files Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- docs/api-documentation-openapi.json | 2 +- .../constant/SwaggerLiteralConstants.java | 4 ++++ .../controller/TokenAuthController.java | 5 ++++- .../mimoto/controller/UsersController.java | 5 +---- .../WalletCredentialsController.java | 20 +++++++++---------- .../mimoto/controller/WalletsController.java | 2 -- .../resources/application-local.properties | 2 +- 7 files changed, 21 insertions(+), 19 deletions(-) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index 7a1f6024a..ef3923407 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -3426,7 +3426,7 @@ "post": { "tags": ["OAuth2 Authentication"], "summary": "Login and create session using OAuth2 ID token", - "description": "Accepts an OAuth2 ID token in the Authorization header and establishes a session by populating Spring Security context.\n\nFetch the ID token from a supported OAuth2 provider (such as Google or Microsoft) and provide it in the request as a Bearer token.", + "description": "This API accepts an OAuth2 ID token in the Authorization header and establishes a session by populating Spring Security context.\n\nFetch the ID token from a supported OAuth2 provider (such as Google or Microsoft) and provide it in the request as a Bearer token.", "operationId": "loginWithOAuth2IdToken", "security": [ { diff --git a/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java b/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java index 3bd52f50a..b25f0c07b 100644 --- a/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java +++ b/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java @@ -87,4 +87,8 @@ public class SwaggerLiteralConstants { /* Wallet Credentials Controller */ public static final String WALLET_CREDENTIALS_NAME = "Wallet Credentials" ; public static final String WALLET_CREDENTIALS_DESCRIPTION = "All the Wallet Credentials related endpoints" ; + + /* OAuth2 ID Token Authentication Controller */ + public static final String ID_TOKEN_AUTHENTICATION_NAME = "OAuth2 ID Token Authentication" ; + public static final String ID_TOKEN_AUTHENTICATION_DESCRIPTION = "All the OAuth2 ID Token Authentication related endpoints" ; } diff --git a/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java b/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java index f998cc553..a667569bf 100644 --- a/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java +++ b/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.controller; +import io.mosip.mimoto.constant.SwaggerLiteralConstants; import io.mosip.mimoto.exception.OAuth2AuthenticationException; import io.mosip.mimoto.service.TokenService; import io.swagger.v3.oas.annotations.media.Content; @@ -19,16 +20,18 @@ import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; import java.util.Map; @RestController +@Tag(name = SwaggerLiteralConstants.ID_TOKEN_AUTHENTICATION_NAME, description = SwaggerLiteralConstants.ID_TOKEN_AUTHENTICATION_DESCRIPTION) public class TokenAuthController { @Autowired private Map tokenServices; // Map of provider name to TokenService - @Operation(summary = "Login and create session using OAuth2 ID token", description = "Accepts an OAuth2 ID token in the Authorization header and establishes a session by populating Spring Security context.\n\nFetch the ID token from a supported OAuth2 provider (such as Google or Microsoft) and provide it in the request as a Bearer token.", operationId = "loginWithOAuth2IdToken", security = @SecurityRequirement(name = "bearerAuth"), parameters = {@Parameter(name = "provider", in = ParameterIn.PATH, required = true, description = "The OAuth2 provider to use for login. Example values: 'google', 'microsoft', 'facebook'.", schema = @Schema(type = "string", example = "google")), @Parameter(name = "Authorization", in = ParameterIn.HEADER, required = true, description = "The OAuth2 ID token that must be provided in the 'Authorization' header, prefixed with 'Bearer '.", schema = @Schema(type = "string", example = "Bearer "))}) + @Operation(summary = "Login and create session using OAuth2 ID token", description = "This API accepts an OAuth2 ID token in the Authorization header and establishes a session by populating Spring Security context.\n\nFetch the ID token from a supported OAuth2 provider (such as Google or Microsoft) and provide it in the request as a Bearer token.", operationId = "loginWithOAuth2IdToken", security = @SecurityRequirement(name = "bearerAuth"), parameters = {@Parameter(name = "provider", in = ParameterIn.PATH, required = true, description = "The OAuth2 provider to use for login. Example values: 'google', 'microsoft', 'facebook'.", schema = @Schema(type = "string", example = "google")), @Parameter(name = "Authorization", in = ParameterIn.HEADER, required = true, description = "The OAuth2 ID token that must be provided in the 'Authorization' header, prefixed with 'Bearer '.", schema = @Schema(type = "string", example = "Bearer "))}) @ApiResponse(responseCode = "200", description = "Successfully logged in and session created", content = @Content(mediaType = "application/json", schema = @Schema(type = "string", description = "Success message indicating that the session has been created"), examples = @ExampleObject(value = "\"Session created.\""))) @ApiResponse(responseCode = "401", description = "Unauthorized - invalid or expired token", content = @Content(mediaType = "application/json", schema = @Schema(type = "string", description = "Error message explaining why the session is not created"), examples = {@ExampleObject(value = "\"Invalid or expired ID token: please provide a valid token\""), @ExampleObject(value = "\"Bearer ID token required\"")})) @ApiResponse(responseCode = "400", description = "Bad Request - Unsupported provider", content = @Content(mediaType = "application/json", schema = @Schema(type = "string", description = "Error message explaining why the session is not created"), examples = @ExampleObject(value = "\"Unsupported provider: provider123\""))) diff --git a/src/main/java/io/mosip/mimoto/controller/UsersController.java b/src/main/java/io/mosip/mimoto/controller/UsersController.java index 278bf58fb..28f6c7415 100644 --- a/src/main/java/io/mosip/mimoto/controller/UsersController.java +++ b/src/main/java/io/mosip/mimoto/controller/UsersController.java @@ -39,9 +39,6 @@ @RequestMapping(value = "/users/me") @Tag(name = SwaggerLiteralConstants.USERS_NAME, description = SwaggerLiteralConstants.USERS_DESCRIPTION) public class UsersController { - - - @Autowired private UserMetadataRepository userMetadataRepository; @@ -87,7 +84,7 @@ private UserMetadata fetchUserMetadata(String providerSubjectId, String identity @Operation(summary = "Retrieve user metadata from the stored redis session", description = "This API is secured using session-based authentication. When a request is made, the server retrieves the session ID from the Cookie header and uses it to fetch session details from Redis. It then attempts to retrieve the user's metadata directly from the session. If the metadata is available, the API returns the user's profile information otherwise an appropriate error response is returned.", operationId = "getUserProfileFromCache", security = @SecurityRequirement(name = "SessionAuth")) @ApiResponse(responseCode = "200", description = "User profile retrieved successfully from the session", content = @Content(mediaType = "application/json", schema = @Schema(implementation = UserMetadataDTO.class), examples = @ExampleObject(name = "Success response", value = SwaggerExampleConstants.FETCH_USER_PROFILE_SUCCESS))) - @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "User metadata not found in session",value = "{\"errorCode\": \"RESIDENT-APP-052\", \"errorMessage\": \"No user metadata present in cache\"}"))) + @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "User metadata not found in session", value = "{\"errorCode\": \"RESIDENT-APP-052\", \"errorMessage\": \"No user metadata present in cache\"}"))) @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected server error", value = "{\"errorCode\": \"RESIDENT-APP-052\", \"errorMessage\": \"An unexpected error occurred while retrieving user metadata from cache\"}"))) @GetMapping("/cache") public ResponseEntity getUserProfileFromCache(Authentication authentication, HttpSession session) { diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index fa021b55d..050c5e27a 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -11,16 +11,6 @@ import io.mosip.mimoto.util.CredentialUtilService; import io.mosip.mimoto.util.Utilities; import io.mosip.mimoto.util.WalletUtil; -import jakarta.servlet.http.HttpSession; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.io.InputStreamResource; -import org.springframework.dao.DataAccessResourceFailureException; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.enums.ParameterIn; @@ -31,6 +21,16 @@ import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.parameters.RequestBody; +import jakarta.servlet.http.HttpSession; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.InputStreamResource; +import org.springframework.dao.DataAccessResourceFailureException; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; import java.io.IOException; import java.util.List; diff --git a/src/main/java/io/mosip/mimoto/controller/WalletsController.java b/src/main/java/io/mosip/mimoto/controller/WalletsController.java index c53cba440..ef436077f 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletsController.java @@ -27,7 +27,6 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.parameters.RequestBody; import java.util.List; @@ -64,7 +63,6 @@ public ResponseEntity createWallet(@RequestBody WalletRequestDto wallet, } } - @Operation(summary = "Retrieve all wallets for the user", description = "This API is secured using session-based authentication. Upon receiving a request, the session is first retrieved using the session ID extracted from the Cookie header to authenticate the user. Once authenticated, the user's ID is obtained from the session stored in Redis. Using this user ID, the API fetches all wallets associated with the user from the database and returns them. If an error occurs while retrieving the wallets, an appropriate error response is returned.", operationId = "getWallets", security = @SecurityRequirement(name = "SessionAuth")) @ApiResponse(responseCode = "200", description = "List of wallets retrieved successfully", content = @Content(mediaType = "application/json", array = @ArraySchema(schema = @Schema(implementation = WalletResponseDto.class)), examples = @ExampleObject(name = "Success response", value = SwaggerExampleConstants.FETCH_ALL_WALLETS_OF_USER_SUCCESS))) @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected server error", value = "{\"errorCode\": \"RESIDENT-APP-051\", \"errorMessage\": \"An unexpected error occurred while retrieving user wallets\"}"))) diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index e27470aa1..e02d5839c 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -267,7 +267,7 @@ mosip.data.share.get.url.pattern=${mosip.data.share.url}/v1/datashare/get/static mosip.security.cors-enable=true #comma separated allowed origins mosip.security.origins=http://localhost:3004 -mosip.security.ignore-auth-urls=/safetynet/**,/actuator/**,/swagger-ui/**,/v3/api-docs,\ +mosip.security.ignore-auth-urls=/safetynet/**,/actuator/**,/swagger-ui/**,/v3/api-docs/**,\ /allProperties,/credentials/**,/credentialshare/**,/binding-otp,/wallet-binding,/get-token/**,\ /issuers,/issuers/**,/authorize,/req/otp,/vid,/req/auth/**,/req/individualId/otp,/aid/get-individual-id,/users/me/cache,\ /verifiers, /auth/*/token-login From 2559d1db013f5fd591fd8b85b625ecb208765c98 Mon Sep 17 00:00:00 2001 From: Rakshith B <79500257+Rakshithb1@users.noreply.github.com> Date: Tue, 22 Apr 2025 13:41:45 +0530 Subject: [PATCH 538/860] [DSD-7896] disabled istio sidecar Signed-off-by: Rakshith B <79500257+Rakshithb1@users.noreply.github.com> --- deploy/mimoto-apitestrig/install.sh | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/deploy/mimoto-apitestrig/install.sh b/deploy/mimoto-apitestrig/install.sh index 2d75be177..46adb0f4c 100755 --- a/deploy/mimoto-apitestrig/install.sh +++ b/deploy/mimoto-apitestrig/install.sh @@ -7,14 +7,12 @@ if [ $# -ge 1 ] ; then fi NS=injiweb -CHART_VERSION=12.0.1 +CHART_VERSION=0.0.1-develop echo Create $NS namespace kubectl create ns $NS function installing_apitestrig() { - echo Istio label - kubectl label ns $NS istio-injection=disabled --overwrite helm repo update echo Copy Configmaps From 5a6765b131fc92e169df4d796914ec217fb9dce5 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Wed, 23 Apr 2025 14:04:40 +0530 Subject: [PATCH 539/860] Improved the readme and added default properties file Signed-off-by: Gurpreet41082 --- README.md | 3 +- docker-compose/README.md | 35 +++++++++++++------ .../config/mimoto-default.properties | 4 +-- docker-compose/docker-compose.yml | 2 +- pom.xml | 10 ------ .../java/io/mosip/mimoto/util/Utilities.java | 4 +-- src/main/resources/bootstrap.properties | 2 +- 7 files changed, 32 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index 918a6e1f0..5d873a7f5 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,8 @@ The project requires JDK 21, postgres, redis and google client credentials spring.datasource.password= spring.redis.password= ``` -2. Create google client credentials from https://console.cloud.google.com/ and update below properties in application-local.properties +2. Refer to the [How to create Google Client Credentials](docker-compose/README.md#how-to-create-google-client-credentials) section to create + Google client credentials and update below properties in `application-local.properties`. ``` spring.security.oauth2.client.registration.google.client-id= spring.security.oauth2.client.registration.google.client-secret= diff --git a/docker-compose/README.md b/docker-compose/README.md index 2e953dbce..306985a22 100644 --- a/docker-compose/README.md +++ b/docker-compose/README.md @@ -24,7 +24,13 @@ Refer [here](https://docs.mosip.io/inji/inji-mobile-wallet/customization-overvie * Update client_id and client_alias as per onboarding in mimoto-issuers-config.json file. 6. Refer to the [How to create Google Client Credentials](#how-to-create-google-client-credentials) section to create - Google client credentials and replace the `GOOGLE_OAUTH_CLIENT_ID` and `GOOGLE_OAUTH_CLIENT_SECRET` properties in `docker-compose.yml`. + Google client credentials. + - Replace the placeholders in the `docker-compose.yml` file with the generated credentials: + + ```yaml + environment: + - GOOGLE_OAUTH_CLIENT_ID= + - GOOGLE_OAUTH_CLIENT_SECRET= 7. Start the docker-compose file @@ -56,21 +62,28 @@ To enable Google OAuth2.0 authentication, follow these steps: - Select "Web application" as the application type. 5. **Configure Authorized JavaScript Origins**: - - Add `http://localhost:8099` to the "Authorized JavaScript origins". + Depending on your environment, use the following values: + + - **Local or Docker**: + ``` + http://localhost:8099 + ``` + - **Deployed domain (e.g., collab.mosip.net)**: + ``` + https://collab.mosip.net 6. **Configure Authorized Redirect URIs**: - - Add `http://localhost:8099/v1/mimoto/oauth2/callback/google` to the "Authorized redirect URIs". + - **Local or Docker**: + ``` + http://localhost:8099/v1/mimoto/oauth2/callback/google + ``` + - **Deployed domain (e.g., collab.mosip.net)**: + ``` + https://collab.mosip.net/v1/mimoto/oauth2/callback/google + ``` 7. **Save and Retrieve Client Credentials**: - After saving, you will receive a `Client ID` and `Client Secret`. -8. **Update `docker-compose.yml`**: - - Replace the placeholders in the `docker-compose.yml` file with the generated credentials: - - ```yaml - environment: - - GOOGLE_OAUTH_CLIENT_ID= - - GOOGLE_OAUTH_CLIENT_SECRET= - Note: - Replace mosipbox.public.url, mosip.api.public.url with your public accessible domain. For dev or local env [ngrok](https://ngrok.com/docs/getting-started/) is recommended. diff --git a/docker-compose/config/mimoto-default.properties b/docker-compose/config/mimoto-default.properties index 36970837f..24e715eea 100644 --- a/docker-compose/config/mimoto-default.properties +++ b/docker-compose/config/mimoto-default.properties @@ -338,7 +338,7 @@ cache.default.expiry-time-in-min = 60 spring.security.oauth2.client.registration.google.client-id=${GOOGLE_OAUTH_CLIENT_ID} spring.security.oauth2.client.registration.google.client-secret=${GOOGLE_OAUTH_CLIENT_SECRET} spring.security.oauth2.client.registration.google.scope=profile,email -spring.security.oauth2.client.registration.google.redirect-uri={baseUrl}/oauth2/callback/{registrationId} +spring.security.oauth2.client.registration.google.redirect-uri=http://localhost:8099/v1/mimoto/oauth2/callback/google spring.security.oauth2.client.registration.google.authorization-grant-type=authorization_code spring.security.oauth2.client.registration.google.client-name=Google spring.security.oauth2.client.provider.google.authorization-uri=https://accounts.google.com/o/oauth2/auth?prompt=select_account @@ -361,7 +361,7 @@ spring.data.redis.port=${SPRING_REDIS_PORT} server.servlet.session.timeout=30m spring.session.redis.namespace=injiweb:session: -mosip.security.ignore-auth-urls=/safetynet/**,/actuator/**,/swagger-ui/**,/v3/api-docs,\ +mosip.security.ignore-auth-urls=/safetynet/**,/actuator/**,/swagger-ui/**,/v3/api-docs/**,\ /allProperties,/credentials/**,/credentialshare/**,/binding-otp,/wallet-binding,/get-token/**,\ /issuers,/issuers/**,/authorize,/req/otp,/vid,/req/auth/**,/req/individualId/otp,/aid/get-individual-id,/users/me/cache,\ /verifiers, /auth/*/token-login diff --git a/docker-compose/docker-compose.yml b/docker-compose/docker-compose.yml index aa56e01ff..03e9ff792 100644 --- a/docker-compose/docker-compose.yml +++ b/docker-compose/docker-compose.yml @@ -57,7 +57,7 @@ services: - redis-data:/data mimoto-service: container_name: 'Mimoto-Service' - image: 'mosipdev/mimoto:release-0.17.x' + image: 'mosipdev/mimoto:develop' user: root ports: - '8099:8099' diff --git a/pom.xml b/pom.xml index 82f86e4fe..6091b2ae9 100644 --- a/pom.xml +++ b/pom.xml @@ -149,16 +149,6 @@ io.micrometer micrometer-registry-prometheus - - io.springfox - springfox-swagger2 - ${swagger.version} - - - io.springfox - springfox-swagger-ui - ${swagger.version} - org.springdoc springdoc-openapi-starter-webmvc-ui diff --git a/src/main/java/io/mosip/mimoto/util/Utilities.java b/src/main/java/io/mosip/mimoto/util/Utilities.java index 514ebcfc5..23325bcdb 100644 --- a/src/main/java/io/mosip/mimoto/util/Utilities.java +++ b/src/main/java/io/mosip/mimoto/util/Utilities.java @@ -89,7 +89,7 @@ public class Utilities { @PostConstruct public void setUp() throws IOException { - if(activeProfile.equals("local")) { + if(activeProfile.contains("local")) { Resource resource = new ClassPathResource(issuersConfigPath); Resource trustedVerifiersResource = new ClassPathResource(trustedVerifiersPath); Resource credentialTemplateResource = new ClassPathResource("templates/"+ credentialTemplatePath); @@ -188,7 +188,7 @@ public String getTrustedVerifiersJsonValue() { } public String getCredentialSupportedTemplateString(String issuerId, String credentialType) { String templateFileName = String.format("%s-%s-template.html", issuerId, credentialType); - if(activeProfile.equals("local")) { + if(activeProfile.contains("local")) { Path basePath = Paths.get("templates").toAbsolutePath().normalize(); Path resolvedPath = basePath.resolve(templateFileName).normalize(); diff --git a/src/main/resources/bootstrap.properties b/src/main/resources/bootstrap.properties index 0ab6ea448..d5834548f 100644 --- a/src/main/resources/bootstrap.properties +++ b/src/main/resources/bootstrap.properties @@ -1,6 +1,6 @@ spring.cloud.config.uri=localhost spring.cloud.config.label=develop -spring.profiles.active=local +spring.profiles.active=default,local spring.cloud.config.name=mimoto,inji spring.application.name=mimoto config.server.file.storage.uri=${spring.cloud.config.uri}/print/${spring.profiles.active}/${spring.cloud.config.label}/ From f12131e7f1c2685688530405668acc4d0a2c886d Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Wed, 23 Apr 2025 14:52:45 +0530 Subject: [PATCH 540/860] INJIWEB-1461 added default properties Signed-off-by: Gurpreet41082 --- .../resources/application-default.properties | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 src/main/resources/application-default.properties diff --git a/src/main/resources/application-default.properties b/src/main/resources/application-default.properties new file mode 100644 index 000000000..6b40cd34b --- /dev/null +++ b/src/main/resources/application-default.properties @@ -0,0 +1,51 @@ +#Google OAuth2 configuration +spring.security.oauth2.client.registration.google.client-id=${mosip.injiweb.google.client.id} +spring.security.oauth2.client.registration.google.client-secret=${mosip.injiweb.google.client.secret} +spring.security.oauth2.client.registration.google.scope=profile,email +spring.security.oauth2.client.registration.google.redirect-uri={baseUrl}/oauth2/callback/{registrationId} +spring.security.oauth2.client.registration.google.authorization-grant-type=authorization_code +spring.security.oauth2.client.registration.google.client-name=Google +spring.security.oauth2.client.provider.google.authorization-uri=https://accounts.google.com/o/oauth2/auth?prompt=select_account +spring.security.oauth2.client.provider.google.token-uri=https://oauth2.googleapis.com/token +spring.security.oauth2.client.provider.google.user-info-uri=https://www.googleapis.com/oauth2/v3/userinfo +spring.security.oauth2.client.provider.google.jwk-set-uri=https://www.googleapis.com/oauth2/v3/certs + +#Database config +spring.datasource.url=jdbc:postgresql://${mosip.mimoto.database.hostname}:${mosip.mimoto.database.port}/inji_mimoto +spring.datasource.username=mimotouser +spring.datasource.password=${db.dbuser.password} +spring.jpa.hibernate.ddl-auto=none +spring.jpa.show-sql=true +spring.datasource.driver-class-name=org.postgresql.Driver +hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect +hibernate.hbm2ddl.auto=none +hibernate.jdbc.lob.non_contextual_creation=true +hibernate.show_sql=false +hibernate.format_sql=false +hibernate.connection.charSet=utf8 +hibernate.cache.use_second_level_cache=false +hibernate.cache.use_query_cache=false +hibernate.cache.use_structured_entries=false +hibernate.generate_statistics=false +hibernate.current_session_context_class=org.springframework.orm.hibernate5.SpringSessionContext + +# keymanager database properties +keymanager.persistence.jdbc.driver=org.postgresql.Driver +keymanager_database_url = jdbc:postgresql://${mosip.mimoto.database.hostname}:${mosip.mimoto.database.port}/inji_mimoto +keymanager_database_password=${db.dbuser.password} +keymanager_database_username= mimotouser +keymanager.persistence.jdbc.schema=mimoto + +#Redis configuration +spring.session.store-type=redis +spring.data.redis.host=${redis.host} +spring.data.redis.port=${redis.port} +spring.data.redis.password=${redis.password} +server.servlet.session.timeout=30m +spring.session.redis.namespace=injiweb:session: + +mosip.security.ignore-auth-urls=/safetynet/**,/actuator/**,/swagger-ui/**,/v3/api-docs/**,\ + /allProperties,/credentials/**,/credentialshare/**,/binding-otp,/wallet-binding,/get-token/**,\ + /issuers,/issuers/**,/authorize,/req/otp,/vid,/req/auth/**,/req/individualId/otp,/aid/get-individual-id,/users/me/cache,\ + /verifiers, /auth/*/token-login + From 7b4bd8622e0b9eb4bb1b9f50dfea32a3811af822 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Wed, 23 Apr 2025 19:08:14 +0530 Subject: [PATCH 541/860] Improved exception handling Signed-off-by: Gurpreet41082 --- .../java/io/mosip/mimoto/config/Config.java | 17 +--- .../mimoto/controller/UsersController.java | 66 ++++++------- .../WalletCredentialsController.java | 93 ++++++++----------- .../mimoto/controller/WalletsController.java | 56 +++-------- .../CorruptedEncryptedDataException.java | 16 ++++ .../CredentialPdfGenerationException.java | 20 ++++ .../mimoto/exception/DecryptionException.java | 20 ++++ .../mimoto/exception/EncryptionException.java | 14 +++ .../mimoto/exception/ErrorConstants.java | 12 ++- .../ExternalServiceUnavailableException.java | 20 ++++ .../exception/GlobalExceptionHandler.java | 27 +++++- .../exception/KeyGenerationException.java | 6 +- .../exception/PlatformErrorMessages.java | 14 +-- .../OAuth2AuthenticationSuccessHandler.java | 35 ++----- .../service/WalletCredentialService.java | 5 +- .../mosip/mimoto/service/WalletService.java | 2 +- .../service/impl/GoogleTokenService.java | 8 +- .../impl/WalletCredentialServiceImpl.java | 45 ++++++--- .../service/impl/WalletServiceImpl.java | 4 +- .../mimoto/util/EncryptionDecryptionUtil.java | 59 +++++++----- .../mosip/mimoto/util/KeyGenerationUtil.java | 13 ++- .../mimoto/util/ProofSigningKeyFactory.java | 37 +++++--- .../java/io/mosip/mimoto/util/Utilities.java | 7 +- .../java/io/mosip/mimoto/util/WalletUtil.java | 15 +-- 24 files changed, 354 insertions(+), 257 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/exception/CorruptedEncryptedDataException.java create mode 100644 src/main/java/io/mosip/mimoto/exception/CredentialPdfGenerationException.java create mode 100644 src/main/java/io/mosip/mimoto/exception/DecryptionException.java create mode 100644 src/main/java/io/mosip/mimoto/exception/EncryptionException.java create mode 100644 src/main/java/io/mosip/mimoto/exception/ExternalServiceUnavailableException.java diff --git a/src/main/java/io/mosip/mimoto/config/Config.java b/src/main/java/io/mosip/mimoto/config/Config.java index bbc48554e..480bcce19 100644 --- a/src/main/java/io/mosip/mimoto/config/Config.java +++ b/src/main/java/io/mosip/mimoto/config/Config.java @@ -1,17 +1,10 @@ package io.mosip.mimoto.config; -import com.fasterxml.jackson.databind.ObjectMapper; -import io.mosip.mimoto.core.http.ResponseWrapper; import io.mosip.mimoto.exception.OAuth2AuthenticationException; import io.mosip.mimoto.security.oauth2.OAuth2AuthenticationFailureHandler; import io.mosip.mimoto.security.oauth2.OAuth2AuthenticationSuccessHandler; import io.mosip.mimoto.service.LogoutService; -import io.mosip.mimoto.util.Utilities; -import jakarta.servlet.http.Cookie; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.servlet.http.HttpSession; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; @@ -19,7 +12,6 @@ import org.springframework.context.annotation.Configuration; import org.springframework.core.annotation.Order; import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; import org.springframework.security.config.Customizer; import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; @@ -27,8 +19,6 @@ import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; import org.springframework.security.config.annotation.web.configurers.HeadersConfigurer; import org.springframework.security.config.http.SessionCreationPolicy; -import org.springframework.security.oauth2.jwt.JwtDecoder; -import org.springframework.security.oauth2.jwt.NimbusJwtDecoder; import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.HttpStatusEntryPoint; import org.springframework.session.SessionRepository; @@ -37,10 +27,9 @@ import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import java.util.Arrays; -import java.util.Base64; import java.util.HashMap; import java.util.Map; -import static io.mosip.mimoto.exception.PlatformErrorMessages.LOGIN_SESSION_INVALIDATE_EXCEPTION; +import static io.mosip.mimoto.exception.ErrorConstants.LOGIN_SESSION_INVALIDATE_EXCEPTION; @Configuration @EnableWebSecurity @@ -137,8 +126,8 @@ private void configureLogout(HttpSecurity http, SessionRepository sessionRepo response.setStatus(e.getStatus().value()); response.setContentType("application/json"); String jsonResponse = String.format("{\"errors\":[{\"errorCode\":\"%s\",\"errorMessage\":\"%s\"}]}", - LOGIN_SESSION_INVALIDATE_EXCEPTION.getCode(), - LOGIN_SESSION_INVALIDATE_EXCEPTION.getMessage()); + LOGIN_SESSION_INVALIDATE_EXCEPTION.getErrorCode(), + LOGIN_SESSION_INVALIDATE_EXCEPTION.getErrorMessage()); response.getWriter().write(jsonResponse); } }) diff --git a/src/main/java/io/mosip/mimoto/controller/UsersController.java b/src/main/java/io/mosip/mimoto/controller/UsersController.java index 28f6c7415..066c6feb0 100644 --- a/src/main/java/io/mosip/mimoto/controller/UsersController.java +++ b/src/main/java/io/mosip/mimoto/controller/UsersController.java @@ -6,11 +6,8 @@ import io.mosip.mimoto.dbentity.UserMetadata; import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; -import io.mosip.mimoto.exception.LoginSessionException; -import io.mosip.mimoto.exception.DatabaseConnectionException; +import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.exception.OAuth2AuthenticationException; -import io.mosip.mimoto.model.DatabaseEntity; -import io.mosip.mimoto.model.DatabaseOperation; import io.mosip.mimoto.repository.UserMetadataRepository; import io.mosip.mimoto.util.EncryptionDecryptionUtil; import io.mosip.mimoto.util.Utilities; @@ -24,15 +21,16 @@ import jakarta.servlet.http.HttpSession; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.dao.DataAccessResourceFailureException; import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.security.core.Authentication; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import static io.mosip.mimoto.exception.PlatformErrorMessages.*; +import static io.mosip.mimoto.exception.ErrorConstants.SESSION_EXPIRED_OR_INVALID; +import static io.mosip.mimoto.util.Utilities.getErrorResponseEntityFromPlatformErrorMessage; @Slf4j @RestController @@ -51,35 +49,29 @@ public class UsersController { @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "Database connection failure", value = "{\"errorCode\": \"RESIDENT-APP-047\", \"errorMessage\": \"Failed to connect to the shared database while fetching User Metadata data from the database\"}"), @ExampleObject(name = "Unexpected server error", value = "{\"errorCode\": \"RESIDENT-APP-049\", \"errorMessage\": \"An unexpected error occurred while retrieving user profile from the database\"}"), @ExampleObject(name = "User metadata not found in the Database", value = "{\"errorCode\": \"RESIDENT-APP-049\", \"errorMessage\": \"An unexpected error occurred while downloading and storing user metadata into database\"}")})) @GetMapping("/db") public ResponseEntity getUserProfile(Authentication authentication, HttpSession session) { - try { - String identityProvider = (String) session.getAttribute("clientRegistrationId"); - - UserMetadata userMetadata = fetchUserMetadata(authentication.getName(), identityProvider); - - UserMetadataDTO userMetadataDTO = new UserMetadataDTO(encryptionDecryptionUtill.decrypt(userMetadata.getDisplayName(), - EncryptionDecryptionUtil.USER_PII_KEY_REFERENCE_ID, "", ""), - encryptionDecryptionUtill.decrypt(userMetadata.getProfilePictureUrl(), - EncryptionDecryptionUtil.USER_PII_KEY_REFERENCE_ID, "", ""), - encryptionDecryptionUtill.decrypt(userMetadata.getEmail(), EncryptionDecryptionUtil.USER_PII_KEY_REFERENCE_ID, - "", "")); - return ResponseEntity.status(HttpStatus.OK).body(userMetadataDTO); + String identityProvider = (String) session.getAttribute("clientRegistrationId"); + UserMetadata userMetadata = null; + try { + userMetadata = fetchUserMetadata(authentication.getName(), identityProvider); } catch (OAuth2AuthenticationException exception) { log.error("Error occurred while retrieving user profile : ", exception); - return Utilities.getErrorResponseEntityWithoutWrapper(exception, USER_METADATA_FETCH_EXCEPTION.getCode(), exception.getStatus(), null); - } catch (DataAccessResourceFailureException exception) { - log.error("Error occurred while connecting to the database : ", exception); - DatabaseConnectionException connectionException = new DatabaseConnectionException(DATABASE_CONNECTION_EXCEPTION.getCode(), DATABASE_CONNECTION_EXCEPTION.getMessage(), DatabaseEntity.USERMETADATA, DatabaseOperation.FETCHING, HttpStatus.INTERNAL_SERVER_ERROR); - return Utilities.getErrorResponseEntityWithoutWrapper(connectionException, USER_METADATA_FETCH_EXCEPTION.getCode(), connectionException.getStatus(), null); - } catch (Exception exception) { - log.error("Error occurred while retrieving user profile : ", exception); - OAuth2AuthenticationException authenticationException = new OAuth2AuthenticationException(USER_METADATA_FETCH_EXCEPTION.getCode(), USER_METADATA_FETCH_EXCEPTION.getMessage() + " due to : " + exception.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); - return Utilities.getErrorResponseEntityWithoutWrapper(authenticationException, USER_METADATA_FETCH_EXCEPTION.getCode(), authenticationException.getStatus(), null); + return Utilities.getErrorResponseEntityWithoutWrapper(exception, ErrorConstants.INVALID_USER.getErrorCode(), exception.getStatus(), null); } + + UserMetadataDTO userMetadataDTO = new UserMetadataDTO(encryptionDecryptionUtill.decrypt(userMetadata.getDisplayName(), + EncryptionDecryptionUtil.USER_PII_KEY_REFERENCE_ID, "", ""), + encryptionDecryptionUtill.decrypt(userMetadata.getProfilePictureUrl(), + EncryptionDecryptionUtil.USER_PII_KEY_REFERENCE_ID, "", ""), + encryptionDecryptionUtill.decrypt(userMetadata.getEmail(), EncryptionDecryptionUtil.USER_PII_KEY_REFERENCE_ID, + "", "")); + + return ResponseEntity.status(HttpStatus.OK).body(userMetadataDTO); + } private UserMetadata fetchUserMetadata(String providerSubjectId, String identityProvider) throws OAuth2AuthenticationException { - return userMetadataRepository.findByProviderSubjectIdAndIdentityProvider(providerSubjectId, identityProvider).orElseThrow(() -> new OAuth2AuthenticationException(USER_METADATA_FETCH_EXCEPTION.getCode(), "User not found. Please check your credentials or login again", HttpStatus.NOT_FOUND)); + return userMetadataRepository.findByProviderSubjectIdAndIdentityProvider(providerSubjectId, identityProvider).orElseThrow(() -> new OAuth2AuthenticationException(ErrorConstants.INVALID_USER.getErrorCode(), "User not found. Please check your credentials or login again", HttpStatus.NOT_FOUND)); } @Operation(summary = "Retrieve user metadata from the stored redis session", description = "This API is secured using session-based authentication. When a request is made, the server retrieves the session ID from the Cookie header and uses it to fetch session details from Redis. It then attempts to retrieve the user's metadata directly from the session. If the metadata is available, the API returns the user's profile information otherwise an appropriate error response is returned.", operationId = "getUserProfileFromCache", security = @SecurityRequirement(name = "SessionAuth")) @@ -87,17 +79,15 @@ private UserMetadata fetchUserMetadata(String providerSubjectId, String identity @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "User metadata not found in session", value = "{\"errorCode\": \"RESIDENT-APP-052\", \"errorMessage\": \"No user metadata present in cache\"}"))) @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected server error", value = "{\"errorCode\": \"RESIDENT-APP-052\", \"errorMessage\": \"An unexpected error occurred while retrieving user metadata from cache\"}"))) @GetMapping("/cache") - public ResponseEntity getUserProfileFromCache(Authentication authentication, HttpSession session) { - try { - UserMetadataDTO userMetadataDTO = (UserMetadataDTO) session.getAttribute(SessionKeys.USER_METADATA); - if (userMetadataDTO == null) { - throw new LoginSessionException(USER_METADATA_CACHE_FETCH_EXCEPTION.getCode(), "No user metadata present in cache", HttpStatus.UNAUTHORIZED); - } - return ResponseEntity.status(HttpStatus.OK).body(userMetadataDTO); - } catch (Exception exception) { - log.error("Error occurred while retrieving user profile from cache : ", exception); - return Utilities.getErrorResponseEntityWithoutWrapper(exception, USER_METADATA_CACHE_FETCH_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR, null); + public ResponseEntity getUserProfileFromCache(HttpSession session) { + + UserMetadataDTO userMetadataDTO = (UserMetadataDTO) session.getAttribute(SessionKeys.USER_METADATA); + if (userMetadataDTO == null) { + log.error("User info is not present in the session"); + return getErrorResponseEntityFromPlatformErrorMessage(SESSION_EXPIRED_OR_INVALID, HttpStatus.UNAUTHORIZED, MediaType.APPLICATION_JSON); } + return ResponseEntity.status(HttpStatus.OK).body(userMetadataDTO); + } } diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index 050c5e27a..2091c7d8e 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -5,8 +5,6 @@ import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; import io.mosip.mimoto.dto.resident.WalletCredentialResponseDTO; import io.mosip.mimoto.exception.*; -import io.mosip.mimoto.model.DatabaseEntity; -import io.mosip.mimoto.model.DatabaseOperation; import io.mosip.mimoto.service.WalletCredentialService; import io.mosip.mimoto.util.CredentialUtilService; import io.mosip.mimoto.util.Utilities; @@ -25,7 +23,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.InputStreamResource; -import org.springframework.dao.DataAccessResourceFailureException; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; @@ -36,8 +33,6 @@ import java.util.List; import java.util.Map; -import static io.mosip.mimoto.exception.PlatformErrorMessages.*; - @Slf4j @RestController @RequestMapping(value = "/wallets/{walletId}/credentials") @@ -58,31 +53,31 @@ public ResponseEntity downloadCredential(@PathV //TODO: remove this default value after the apitest is updated params.putIfAbsent("vcStorageExpiryLimitInTimes", "-1"); + WalletUtil.validateWalletId(httpSession, walletId); + String base64EncodedWalletKey = WalletUtil.getSessionWalletKey(httpSession); + String issuerId = params.get("issuer"); + String credentialType = params.get("credential"); + String credentialValidity = params.get("vcStorageExpiryLimitInTimes"); + String locale = params.get("locale"); + TokenResponseDTO response = null; try { - WalletUtil.validateWalletId(httpSession, walletId); - String base64EncodedWalletKey = WalletUtil.getSessionWalletKey(httpSession); - - String issuerId = params.get("issuer"); - String credentialType = params.get("credential"); - String credentialValidity = params.get("vcStorageExpiryLimitInTimes"); - String locale = params.get("locale"); log.info("Initiated Token Call"); - TokenResponseDTO response = credentialUtilService.getTokenResponse(params, issuerId); - - log.info("Initiated call for fetching and storing Verifiable Credential in the database for walletId: {}", walletId); - VerifiableCredentialResponseDTO credentialResponseDTO = walletCredentialService.fetchAndStoreCredential(issuerId, credentialType, response, credentialValidity, locale, walletId, base64EncodedWalletKey); - - return ResponseEntity.status(HttpStatus.OK).body(credentialResponseDTO); - } catch (ApiNotAccessibleException | IOException exception) { - log.error("Exception occurred while fetching credential types ", exception); - return Utilities.getErrorResponseEntityWithoutWrapper(exception, LOGIN_CREDENTIAL_DOWNLOAD_EXCEPTION.getCode(), HttpStatus.BAD_REQUEST, MediaType.APPLICATION_JSON); - } catch (DataAccessResourceFailureException exception) { - log.error("Exception occurred while connecting to the database to store downloaded Verifiable Credential:", exception); - DatabaseConnectionException connectionException = new DatabaseConnectionException(DATABASE_CONNECTION_EXCEPTION.getCode(), DATABASE_CONNECTION_EXCEPTION.getMessage(), DatabaseEntity.VERIFIABLECREDENTIAL, DatabaseOperation.STORING, HttpStatus.INTERNAL_SERVER_ERROR); - return Utilities.getErrorResponseEntityWithoutWrapper(connectionException, LOGIN_CREDENTIAL_DOWNLOAD_EXCEPTION.getCode(), connectionException.getStatus(), MediaType.APPLICATION_JSON); - } catch (Exception exception) { - log.error("Exception occurred while downloading or saving the Verifiable Credential:", exception); - return Utilities.getErrorResponseEntityWithoutWrapper(exception, LOGIN_CREDENTIAL_DOWNLOAD_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); + response = credentialUtilService.getTokenResponse(params, issuerId); + } catch (ApiNotAccessibleException | IOException | AuthorizationServerWellknownResponseException | + InvalidWellknownResponseException e) { + log.error("Error occurred while fetching token response: {}", issuerId, e); + throw new ExternalServiceUnavailableException( + ErrorConstants.SERVER_UNAVAILABLE.getErrorCode(), + ErrorConstants.SERVER_UNAVAILABLE.getErrorMessage()); + } + try { + log.info("Initiated call for fetching and storing Verifiable Credential in the database for walletId: {}", walletId); + VerifiableCredentialResponseDTO credentialResponseDTO = walletCredentialService.fetchAndStoreCredential(issuerId, credentialType, response, credentialValidity, locale, walletId, base64EncodedWalletKey); + + return ResponseEntity.status(HttpStatus.OK).body(credentialResponseDTO); + } catch (Exception ex) { + log.error("Exception occurred while saving the credential ", ex); + return Utilities.getErrorResponseEntityWithoutWrapper(ex, ErrorConstants.CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); } } @@ -92,7 +87,6 @@ public ResponseEntity downloadCredential(@PathV @ApiResponse(responseCode = "500", description = "Internal Server Error - Error occurred while fetching credentials from the database", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-054\", \"errorMessage\": \"Error occurred while fetching credentials for wallet\"}"))) @GetMapping public ResponseEntity> fetchAllCredentialsForGivenWallet(@PathVariable("walletId") String walletId, @RequestParam("locale") String locale, HttpSession httpSession) { - try { log.info("Fetching all credentials for walletId: {}", walletId); WalletUtil.validateWalletId(httpSession, walletId); @@ -100,14 +94,7 @@ public ResponseEntity> fetchAllCredentials List credentials = walletCredentialService.fetchAllCredentialsForWallet(walletId, base64EncodedWalletKey, locale); return ResponseEntity.status(HttpStatus.OK).body(credentials); - } catch (DataAccessResourceFailureException exception) { - log.error("Exception occurred while connecting to the database to fetch all credentials for walletId: {}", walletId, exception); - DatabaseConnectionException connectionException = new DatabaseConnectionException(DATABASE_CONNECTION_EXCEPTION.getCode(), DATABASE_CONNECTION_EXCEPTION.getMessage(), DatabaseEntity.VERIFIABLECREDENTIAL, DatabaseOperation.FETCHING, HttpStatus.INTERNAL_SERVER_ERROR); - return Utilities.getErrorResponseEntityWithoutWrapper(connectionException, DATABASE_CONNECTION_EXCEPTION.getCode(), connectionException.getStatus(), MediaType.APPLICATION_JSON); - } catch (Exception exception) { - log.error("Exception occurred while downloading or saving the Verifiable Credential:", exception); - return Utilities.getErrorResponseEntityWithoutWrapper(exception, CREDENTIALS_FETCH_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); - } + } @Operation(summary = "Fetch a specific Verifiable Credential", description = "This API retrieves a specific Verifiable Credential from the given wallet. The wallet and credential are identified by their respective IDs, and the locale parameter is used for localization. The action parameter determines whether the credential should be displayed inline or downloaded. The user's session is authenticated to ensure access to the wallet. If successful, the credential is returned as a PDF file. Otherwise, an appropriate error response is returned.", operationId = "getVerifiableCredential", security = @SecurityRequirement(name = "SessionAuth"), parameters = {@Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet from which the credential will be fetched", schema = @Schema(type = "string")), @Parameter(name = "credentialId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the Verifiable Credential to be fetched", schema = @Schema(type = "string")), @Parameter(name = "locale", in = ParameterIn.QUERY, required = true, description = "The locale to be used for credential retrieval", schema = @Schema(type = "string")), @Parameter(name = "action", in = ParameterIn.QUERY, required = false, description = "Determines whether the credential is displayed inline or downloaded. Default is inline.", schema = @Schema(type = "string", defaultValue = "inline"))}) @@ -116,26 +103,26 @@ public ResponseEntity> fetchAllCredentials @ApiResponse(responseCode = "500", description = "Internal Server Error - Error occurred while fetching the Verifiable Credential", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-054\", \"errorMessage\": \"Error occurred while fetching the Verifiable Credential\"}"))) @GetMapping("/{credentialId}") public ResponseEntity getVerifiableCredential(@PathVariable("walletId") String walletId, @PathVariable("credentialId") String credentialId, @RequestParam("locale") String locale, @RequestParam(value = "action", defaultValue = "inline") String action, HttpSession httpSession) { - try { - log.info("Fetching credentialId: {} from walletId: {}", credentialId, walletId); - WalletUtil.validateWalletId(httpSession, walletId); - String base64EncodedWalletKey = WalletUtil.getSessionWalletKey(httpSession); + log.info("Fetching credentialId: {} from walletId: {}", credentialId, walletId); + + WalletUtil.validateWalletId(httpSession, walletId); + String base64EncodedWalletKey = WalletUtil.getSessionWalletKey(httpSession); - WalletCredentialResponseDTO walletCredentialResponseDTO = walletCredentialService.fetchVerifiableCredential(walletId, credentialId, base64EncodedWalletKey, locale); + WalletCredentialResponseDTO walletCredentialResponseDTO = null; + try { + walletCredentialResponseDTO = walletCredentialService.fetchVerifiableCredential(walletId, credentialId, base64EncodedWalletKey, locale); + } catch (DecryptionException e) { + return Utilities.getErrorResponseEntityWithoutWrapper(e, e.getErrorCode(), HttpStatus.BAD_REQUEST, MediaType.APPLICATION_JSON); + } catch (CorruptedEncryptedDataException e) { + return Utilities.getErrorResponseEntityWithoutWrapper(e, e.getErrorCode(), HttpStatus.UNPROCESSABLE_ENTITY, MediaType.APPLICATION_JSON); + } - String dispositionType = "download".equalsIgnoreCase(action) ? "attachment" : "inline"; - String contentDisposition = String.format("%s; filename=\"%s\"", dispositionType, walletCredentialResponseDTO.getFileName()); + String dispositionType = "download".equalsIgnoreCase(action) ? "attachment" : "inline"; + String contentDisposition = String.format("%s; filename=\"%s\"", dispositionType, walletCredentialResponseDTO.getFileName()); + + return ResponseEntity.ok().header(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, HttpHeaders.CONTENT_DISPOSITION).header(HttpHeaders.CONTENT_DISPOSITION, contentDisposition).contentType(MediaType.APPLICATION_PDF).body(walletCredentialResponseDTO.getFileContentStream()); - return ResponseEntity.ok().header(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, HttpHeaders.CONTENT_DISPOSITION).header(HttpHeaders.CONTENT_DISPOSITION, contentDisposition).contentType(MediaType.APPLICATION_PDF).body(walletCredentialResponseDTO.getFileContentStream()); - } catch (DataAccessResourceFailureException exception) { - log.error("Exception occurred while connecting to the database to fetch the Verifiable Credential:", exception); - DatabaseConnectionException connectionException = new DatabaseConnectionException(DATABASE_CONNECTION_EXCEPTION.getCode(), DATABASE_CONNECTION_EXCEPTION.getMessage(), DatabaseEntity.VERIFIABLECREDENTIAL, DatabaseOperation.FETCHING, HttpStatus.INTERNAL_SERVER_ERROR); - return Utilities.getErrorResponseEntityWithoutWrapper(connectionException, LOGIN_CREDENTIAL_DOWNLOAD_EXCEPTION.getCode(), connectionException.getStatus(), MediaType.APPLICATION_JSON); - } catch (Exception exception) { - log.error("Error occurred while fetching the Verifiable Credential : ", exception); - return Utilities.getErrorResponseEntityWithoutWrapper(exception, CREDENTIAL_FETCH_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); - } } } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/controller/WalletsController.java b/src/main/java/io/mosip/mimoto/controller/WalletsController.java index ef436077f..db202750c 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletsController.java @@ -1,14 +1,12 @@ package io.mosip.mimoto.controller; -import io.mosip.kernel.core.crypto.exception.InvalidDataException; +import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.constant.SwaggerExampleConstants; import io.mosip.mimoto.constant.SwaggerLiteralConstants; -import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.WalletRequestDto; import io.mosip.mimoto.dto.WalletResponseDto; import io.mosip.mimoto.service.WalletService; -import io.mosip.mimoto.util.Utilities; import io.mosip.mimoto.util.WalletValidator; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -17,21 +15,18 @@ import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpSession; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; -import io.swagger.v3.oas.annotations.responses.ApiResponse; import java.util.List; -import static io.mosip.mimoto.exception.PlatformErrorMessages.USER_WALLET_CREATION_EXCEPTION; -import static io.mosip.mimoto.exception.PlatformErrorMessages.USER_WALLET_RETRIEVAL_EXCEPTION; @Slf4j @RestController @@ -51,16 +46,8 @@ public class WalletsController { @ApiResponse(responseCode = "500", description = "Internal server error while creating wallet", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected server error", value = "{\"errorCode\": \"RESIDENT-APP-050\", \"errorMessage\": \"An unexpected error occurred while creating the wallet\"}"))) @PostMapping public ResponseEntity createWallet(@RequestBody WalletRequestDto wallet, HttpSession httpSession) { - try { - walletValidator.validateWalletRequest(wallet); - return ResponseEntity.status(HttpStatus.OK).body(walletService.createWallet((String) httpSession.getAttribute(SessionKeys.USER_ID), wallet.getWalletName(), wallet.getWalletPin())); - } catch (IllegalArgumentException exception) { - log.error("Error occurred while creating user wallets : ", exception); - return Utilities.getErrorResponseEntityWithoutWrapper(exception, USER_WALLET_CREATION_EXCEPTION.getCode(), HttpStatus.BAD_REQUEST, MediaType.APPLICATION_JSON); - } catch (Exception exception) { - log.error("Error occurred while creating user wallets : ", exception); - return Utilities.getErrorResponseEntityWithoutWrapper(exception, USER_WALLET_CREATION_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); - } + walletValidator.validateWalletRequest(wallet); + return ResponseEntity.status(HttpStatus.OK).body(walletService.createWallet((String) httpSession.getAttribute(SessionKeys.USER_ID), wallet.getWalletName(), wallet.getWalletPin())); } @Operation(summary = "Retrieve all wallets for the user", description = "This API is secured using session-based authentication. Upon receiving a request, the session is first retrieved using the session ID extracted from the Cookie header to authenticate the user. Once authenticated, the user's ID is obtained from the session stored in Redis. Using this user ID, the API fetches all wallets associated with the user from the database and returns them. If an error occurs while retrieving the wallets, an appropriate error response is returned.", operationId = "getWallets", security = @SecurityRequirement(name = "SessionAuth")) @@ -68,14 +55,8 @@ public ResponseEntity createWallet(@RequestBody WalletRequestDto wallet, @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected server error", value = "{\"errorCode\": \"RESIDENT-APP-051\", \"errorMessage\": \"An unexpected error occurred while retrieving user wallets\"}"))) @GetMapping public ResponseEntity> getWallets(HttpSession httpSession) { - try { - List response = walletService.getWallets((String) httpSession.getAttribute(SessionKeys.USER_ID)); - - return ResponseEntity.status(HttpStatus.OK).body(response); - } catch (Exception exception) { - log.error("Error occurred while retrieving user wallets : ", exception); - return Utilities.getErrorResponseEntityWithoutWrapper(exception, USER_WALLET_RETRIEVAL_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); - } + List response = walletService.getWallets((String) httpSession.getAttribute(SessionKeys.USER_ID)); + return ResponseEntity.status(HttpStatus.OK).body(response); } @Operation(summary = "Unlock an existing Wallet", description = "This API is secured using session-based authentication. Upon receiving a request, the session is first retrieved using the session ID extracted from the Cookie header to authenticate the user. Once authenticated, the user's ID is obtained from the session stored in Redis. Using this user ID along with the provided wallet ID and PIN, the corresponding wallet key is fetched and stored in the session. If successful, the API returns a response containing the wallet ID; otherwise, an appropriate error response is returned.", operationId = "unlockWallet", security = @SecurityRequirement(name = "SessionAuth"), parameters = {@Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet to be unlocked", schema = @Schema(type = "string"))}, requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody(required = true, content = @Content(mediaType = "application/json", schema = @Schema(implementation = WalletRequestDto.class)))) @@ -84,23 +65,16 @@ public ResponseEntity> getWallets(HttpSession httpSessio @ApiResponse(responseCode = "500", description = "Internal Server Error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-051\", \"errorMessage\": \"An unexpected error occurred while retrieving the wallet details\"}"))) @PostMapping("/{walletId}/unlock") public ResponseEntity unlockWallet(@PathVariable("walletId") String walletId, @RequestBody WalletRequestDto wallet, HttpSession httpSession) { - try { - // If wallet_key does not exist in the session, fetch it and set it in the session - String walletKey = walletService.getWalletKey((String) httpSession.getAttribute(SessionKeys.USER_ID), walletId, wallet.getWalletPin()); + // If wallet_key does not exist in the session, fetch it and set it in the session + String walletKey = walletService.getWalletKey((String) httpSession.getAttribute(SessionKeys.USER_ID), walletId, wallet.getWalletPin()); - if (null != walletKey) { - httpSession.setAttribute(SessionKeys.WALLET_KEY, walletKey); - httpSession.setAttribute(SessionKeys.WALLET_ID, walletId); - WalletResponseDto response = new WalletResponseDto(walletId); - return ResponseEntity.status(HttpStatus.OK).body(response); - } - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null); - } catch (InvalidDataException exception) { - log.error("Incorrect pin to unlock the wallet ", exception); - return Utilities.getErrorResponseEntityFromPlatformErrorMessage(USER_WALLET_RETRIEVAL_EXCEPTION, HttpStatus.UNAUTHORIZED, MediaType.APPLICATION_JSON); - } catch (Exception exception) { - log.error("Error occurred while retrieving user wallet ", exception); - return Utilities.getErrorResponseEntityWithoutWrapper(exception, USER_WALLET_RETRIEVAL_EXCEPTION.getCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); + if (null != walletKey) { + httpSession.setAttribute(SessionKeys.WALLET_KEY, walletKey); + httpSession.setAttribute(SessionKeys.WALLET_ID, walletId); + WalletResponseDto response = new WalletResponseDto(walletId); + return ResponseEntity.status(HttpStatus.OK).body(response); } + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null); + } } diff --git a/src/main/java/io/mosip/mimoto/exception/CorruptedEncryptedDataException.java b/src/main/java/io/mosip/mimoto/exception/CorruptedEncryptedDataException.java new file mode 100644 index 000000000..661224a26 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/exception/CorruptedEncryptedDataException.java @@ -0,0 +1,16 @@ +package io.mosip.mimoto.exception; + +public class CorruptedEncryptedDataException extends BaseCheckedException { + private static final long serialVersionUID = 1L; + + + public CorruptedEncryptedDataException(String errorCode, String errorMessage) { + super(errorCode, errorMessage); + + } + + public CorruptedEncryptedDataException(String errorCode, String errorMessage, Throwable cause) { + super(errorCode, errorMessage, cause); + + } +} diff --git a/src/main/java/io/mosip/mimoto/exception/CredentialPdfGenerationException.java b/src/main/java/io/mosip/mimoto/exception/CredentialPdfGenerationException.java new file mode 100644 index 000000000..eef1f4eb5 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/exception/CredentialPdfGenerationException.java @@ -0,0 +1,20 @@ +package io.mosip.mimoto.exception; + +public class CredentialPdfGenerationException extends BaseUncheckedException { + /** The Constant serialVersionUID. */ + private static final long serialVersionUID = 1L; + + public CredentialPdfGenerationException() { + super(); + } + + public CredentialPdfGenerationException(String errorCode, String errorMessage) { + super(errorCode, errorMessage); + + } + + public CredentialPdfGenerationException(String errorCode, String errorMessage, Throwable cause) { + super(errorCode, errorMessage, cause); + + } +} diff --git a/src/main/java/io/mosip/mimoto/exception/DecryptionException.java b/src/main/java/io/mosip/mimoto/exception/DecryptionException.java new file mode 100644 index 000000000..79dfc8398 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/exception/DecryptionException.java @@ -0,0 +1,20 @@ +package io.mosip.mimoto.exception; + +public class DecryptionException extends BaseCheckedException { + + /** + * + */ + private static final long serialVersionUID = 1L; + + + public DecryptionException(String errorCode, String errorMessage) { + super(errorCode, errorMessage); + + } + + public DecryptionException(String errorCode, String errorMessage, Throwable cause) { + super(errorCode, errorMessage, cause); + + } +} diff --git a/src/main/java/io/mosip/mimoto/exception/EncryptionException.java b/src/main/java/io/mosip/mimoto/exception/EncryptionException.java new file mode 100644 index 000000000..a3b12ce95 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/exception/EncryptionException.java @@ -0,0 +1,14 @@ +package io.mosip.mimoto.exception; + +import java.io.Serial; + +public class EncryptionException extends BaseUncheckedException { + + @Serial + private static final long serialVersionUID = 1L; + + public EncryptionException(String errorCode, String errorMessage, Throwable cause) { + super(errorCode, errorMessage, cause); + + } +} diff --git a/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java b/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java index 1bf3d2b38..288082e91 100644 --- a/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java +++ b/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java @@ -24,8 +24,16 @@ public enum ErrorConstants { JSON_PARSING_EXCEPTION("json_parsing_failed", "Given data couldn't be parsed to JSON string" ), UNKNOWN_EXCEPTION("unknown_exception", "Error while doing verification of verifiable credential" ), PROOF_DOCUMENT_NOT_FOUND_EXCEPTION("proof_document_not_found", "Proof document is not available in the received credentials" ), - PUBLIC_KEY_NOT_FOUND_EXCEPTION("public_key_not_found", "Proof document is not available in the received credentials"); - + PUBLIC_KEY_NOT_FOUND_EXCEPTION("public_key_not_found", "Proof document is not available in the received credentials"), + OAUTH2_AUTHENTICATION_EXCEPTION( "user_authentication_error", "Failed to authenticate user via OAuth Identity Provider during login"), + LOGIN_SESSION_INVALIDATE_EXCEPTION("user_logout_error", "Exception occurred when invalidating the session of a user"), + SESSION_EXPIRED_OR_INVALID( "session_invalid_or_expired", "User session is missing or expired. Please log in again."), + DATABASE_CONNECTION_EXCEPTION( "database_unavailable", "Failed to connect to the database"), + ENCRYPTION_FAILED( "encryption_failed", "Failed to encrypt the data"), + DECRYPTION_FAILED( "decryption_failed", "Failed to decrypt the data"), + SCHEMA_MISMATCH( "schema_mismatch", "Failed to restored the stored data"), + INVALID_USER("invalid_user", "User does not exist in database"), + CREDENTIAL_DOWNLOAD_EXCEPTION( "credential_download_error", "Failed to download and store the credential"); private final String errorCode; private final String errorMessage; diff --git a/src/main/java/io/mosip/mimoto/exception/ExternalServiceUnavailableException.java b/src/main/java/io/mosip/mimoto/exception/ExternalServiceUnavailableException.java new file mode 100644 index 000000000..073695539 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/exception/ExternalServiceUnavailableException.java @@ -0,0 +1,20 @@ +package io.mosip.mimoto.exception; + +public class ExternalServiceUnavailableException extends BaseUncheckedException { + /** The Constant serialVersionUID. */ + private static final long serialVersionUID = 1L; + + public ExternalServiceUnavailableException() { + super(); + } + + public ExternalServiceUnavailableException(String errorCode, String errorMessage) { + super(errorCode, errorMessage); + + } + + public ExternalServiceUnavailableException(String errorCode, String errorMessage, Throwable cause) { + super(errorCode, errorMessage, cause); + + } +} diff --git a/src/main/java/io/mosip/mimoto/exception/GlobalExceptionHandler.java b/src/main/java/io/mosip/mimoto/exception/GlobalExceptionHandler.java index 5f9641d73..abe2dd287 100644 --- a/src/main/java/io/mosip/mimoto/exception/GlobalExceptionHandler.java +++ b/src/main/java/io/mosip/mimoto/exception/GlobalExceptionHandler.java @@ -2,6 +2,7 @@ import io.mosip.mimoto.dto.ErrorDTO; import lombok.extern.slf4j.Slf4j; +import org.springframework.dao.DataAccessResourceFailureException; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; @@ -15,7 +16,29 @@ public class GlobalExceptionHandler { @ExceptionHandler(Throwable.class) // Catch-all for unexpected exceptions @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) public ErrorDTO handleGenericException(Exception ex) { - log.error("An unexpected error occurred: {}", ex.getMessage(), ex); // Log the full error - return new ErrorDTO(HttpStatus.INTERNAL_SERVER_ERROR.name(), "An unexpected server error occurred."); + log.error("An unexpected error occurred: {}", ex.getMessage(), ex); + return new ErrorDTO(ErrorConstants.INTERNAL_SERVER_ERROR.getErrorCode(), ErrorConstants.INTERNAL_SERVER_ERROR.getErrorMessage()); } + + @ExceptionHandler(DataAccessResourceFailureException.class) // Catch-all for unexpected exceptions + @ResponseStatus(HttpStatus.SERVICE_UNAVAILABLE) + public ErrorDTO handleDatabaseException(Exception ex) { + log.error("Database error occurred: {}", ex.getMessage(), ex); + return new ErrorDTO(ErrorConstants.DATABASE_CONNECTION_EXCEPTION.getErrorCode(), ErrorConstants.DATABASE_CONNECTION_EXCEPTION.getErrorMessage()); + } + + @ExceptionHandler(ExternalServiceUnavailableException.class) + @ResponseStatus(HttpStatus.SERVICE_UNAVAILABLE) + public ErrorDTO handleExternalServiceUnavailable(ExternalServiceUnavailableException ex) { + log.error("Connection to external service failed: {}", ex.getMessage(), ex); + return new ErrorDTO(ex.getErrorCode(), ex.getMessage()); + } + + @ExceptionHandler(InvalidInputException.class) + @ResponseStatus(HttpStatus.BAD_REQUEST) + public ErrorDTO handleExternalServiceUnavailable(InvalidInputException ex) { + log.error("Connection to external service failed: {}", ex.getMessage(), ex); + return new ErrorDTO(ex.getErrorCode(), ex.getMessage()); + } + } diff --git a/src/main/java/io/mosip/mimoto/exception/KeyGenerationException.java b/src/main/java/io/mosip/mimoto/exception/KeyGenerationException.java index 52e6c7997..a231e940b 100644 --- a/src/main/java/io/mosip/mimoto/exception/KeyGenerationException.java +++ b/src/main/java/io/mosip/mimoto/exception/KeyGenerationException.java @@ -1,9 +1,13 @@ package io.mosip.mimoto.exception; -public class KeyGenerationException extends BaseCheckedException { +public class KeyGenerationException extends BaseUncheckedException { public KeyGenerationException(String code, String message) { super(code, message); } + public KeyGenerationException(String code, String message, Throwable rootCause) { + super(code, message, rootCause); + } + } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java index c94af5cf7..d3647a4ec 100644 --- a/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java +++ b/src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java @@ -90,19 +90,7 @@ public enum PlatformErrorMessages { INVALID_CREDENTIAL_RESOURCE_URI_EXCEPTION(PlatformConstants.PREFIX + "040", "The Credential Resource is Invalid"), INVALID_CREDENTIAL_ISSUER_WELLKNOWN_RESPONSE_EXCEPTION(PlatformConstants.PREFIX + "041", "Invalid Wellknown from Issuer"), INVALID_AUTHORIZATION_SERVER_WELLKNOWN_RESPONSE_EXCEPTION(PlatformConstants.PREFIX + "042", "Invalid Authorization Server well-known from server:"), - MIMOTO_FETCHING_TOKEN_EXCEPTION(PlatformConstants.PREFIX + "043", "Exception occurred when fetching the Token"), - OAUTH2_AUTHENTICATION_EXCEPTION(PlatformConstants.PREFIX + "044", "Failed to authenticate user via OAuth Identity Provider during login"), - LOGIN_SESSION_EXCEPTION(PlatformConstants.PREFIX + "045", "Exception occurred when fetching the login session details"), - LOGIN_SESSION_INVALIDATE_EXCEPTION(PlatformConstants.PREFIX + "046", "Exception occurred when invalidating the session from redis"), - DATABASE_CONNECTION_EXCEPTION(PlatformConstants.PREFIX + "047", "Failed to connect to the shared database"), - USER_METADATA_STORAGE_EXCEPTION(PlatformConstants.PREFIX + "048", "Failed to store the User metadata into database"), - USER_METADATA_FETCH_EXCEPTION(PlatformConstants.PREFIX + "049", "Failed to fetch the User metadata from database"), - USER_WALLET_CREATION_EXCEPTION(PlatformConstants.PREFIX + "050", "Exception occurred when creating the wallet for user"), - USER_WALLET_RETRIEVAL_EXCEPTION(PlatformConstants.PREFIX + "051", "Exception occurred due to an incorrect pin to unlock the wallet"), - USER_METADATA_CACHE_FETCH_EXCEPTION(PlatformConstants.PREFIX + "052", "Failed to fetch the User metadata from cache"), - LOGIN_CREDENTIAL_DOWNLOAD_EXCEPTION(PlatformConstants.PREFIX + "053", "Failed to download and store the credential"), - CREDENTIALS_FETCH_EXCEPTION(PlatformConstants.PREFIX + "054", "Exception occurred when fetching credentials for the specified wallet"), - CREDENTIAL_FETCH_EXCEPTION(PlatformConstants.PREFIX + "055", "Exception occurred when fetching Verifiable Credential"); + MIMOTO_FETCHING_TOKEN_EXCEPTION(PlatformConstants.PREFIX + "043", "Exception occurred when fetching the Token"); /** The error message. */ private final String errorMessage; diff --git a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java index 83fa362de..cfc54f38b 100644 --- a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java +++ b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java @@ -10,7 +10,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.dao.DataAccessResourceFailureException; import org.springframework.security.core.Authentication; import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken; import org.springframework.security.oauth2.core.user.OAuth2User; @@ -18,11 +17,6 @@ import org.springframework.stereotype.Component; import java.io.IOException; -import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; - -import static io.mosip.mimoto.exception.PlatformErrorMessages.DATABASE_CONNECTION_EXCEPTION; -import static io.mosip.mimoto.exception.PlatformErrorMessages.USER_METADATA_STORAGE_EXCEPTION; @Component @Slf4j @@ -51,31 +45,14 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo String email = oAuth2User.getAttribute("email"); // Call the service to update or insert the user metadata in the database - try { - String userId = userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); - UserMetadataDTO userMetadataDTO = new UserMetadataDTO(displayName, + + String userId = userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); + UserMetadataDTO userMetadataDTO = new UserMetadataDTO(displayName, profilePictureUrl, email); - session.setAttribute(SessionKeys.USER_METADATA, userMetadataDTO); - session.setAttribute(SessionKeys.USER_ID, userId); - response.sendRedirect(injiWebUrl + "/login?status=success"); - } catch (DataAccessResourceFailureException exception) { - log.error("Exception occurred while connecting to the database to store user data:", exception); - String errorMessage = String.format( - "status=error&error_code=%s&error_message=%s", - URLEncoder.encode(DATABASE_CONNECTION_EXCEPTION.getCode(), StandardCharsets.UTF_8), - URLEncoder.encode(DATABASE_CONNECTION_EXCEPTION.getMessage(), StandardCharsets.UTF_8) + session.setAttribute(SessionKeys.USER_METADATA, userMetadataDTO); + session.setAttribute(SessionKeys.USER_ID, userId); + response.sendRedirect(injiWebUrl + "/login?status=success"); - ); - response.sendRedirect(injiWebUrl + "/login?" + errorMessage); - } catch (Exception exception) { - log.error("Exception occurred while saving or updating user data in the database:", exception); - String errorMessage = String.format( - "status=error&error_code=%s&error_message=%s", - URLEncoder.encode(USER_METADATA_STORAGE_EXCEPTION.getCode(),StandardCharsets.UTF_8), - URLEncoder.encode(USER_METADATA_STORAGE_EXCEPTION.getMessage(), StandardCharsets.UTF_8) - ); - response.sendRedirect(injiWebUrl + "/login?" + errorMessage); - } } } diff --git a/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java b/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java index 144e003e9..8ca7b989e 100644 --- a/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java +++ b/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java @@ -3,6 +3,9 @@ import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; import io.mosip.mimoto.dto.resident.WalletCredentialResponseDTO; +import io.mosip.mimoto.exception.CorruptedEncryptedDataException; +import io.mosip.mimoto.exception.DecryptionException; +import io.mosip.mimoto.exception.InvalidCredentialResourceException; import java.util.List; @@ -11,5 +14,5 @@ public interface WalletCredentialService { List fetchAllCredentialsForWallet(String walletId, String walletKey, String locale); - WalletCredentialResponseDTO fetchVerifiableCredential(String walletId, String credentialId, String base64EncodedWalletKey, String locale) throws Exception; + WalletCredentialResponseDTO fetchVerifiableCredential(String walletId, String credentialId, String base64EncodedWalletKey, String locale) throws DecryptionException, CorruptedEncryptedDataException; } diff --git a/src/main/java/io/mosip/mimoto/service/WalletService.java b/src/main/java/io/mosip/mimoto/service/WalletService.java index 3e3655d18..fe8f8ff15 100644 --- a/src/main/java/io/mosip/mimoto/service/WalletService.java +++ b/src/main/java/io/mosip/mimoto/service/WalletService.java @@ -7,7 +7,7 @@ import java.util.UUID; public interface WalletService { - public String createWallet(String userId, String pin, String walletName) throws NoSuchAlgorithmException, Exception; + public String createWallet(String userId, String pin, String walletName) ; String getWalletKey(String userId, String walletId, String pin); diff --git a/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java b/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java index b5b8d3026..c76ba5295 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java +++ b/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java @@ -28,7 +28,7 @@ import java.util.List; import java.util.Map; -import static io.mosip.mimoto.exception.PlatformErrorMessages.OAUTH2_AUTHENTICATION_EXCEPTION; +import static io.mosip.mimoto.exception.ErrorConstants.OAUTH2_AUTHENTICATION_EXCEPTION; @Service("google") @Slf4j @@ -62,7 +62,7 @@ public void processToken(String idToken, String provider, HttpServletRequest req setupSecurityContext(provider, sub, name, picture, email, request, response); } else { log.error("Could not extract user information from ID token "); - throw new OAuth2AuthenticationException(OAUTH2_AUTHENTICATION_EXCEPTION.getCode(),OAUTH2_AUTHENTICATION_EXCEPTION.getMessage(), HttpStatus.UNAUTHORIZED); + throw new OAuth2AuthenticationException(OAUTH2_AUTHENTICATION_EXCEPTION.getErrorCode(),OAUTH2_AUTHENTICATION_EXCEPTION.getErrorMessage(), HttpStatus.UNAUTHORIZED); } } @@ -72,13 +72,13 @@ private Jwt decodeAndValidateToken(String idToken) throws OAuth2AuthenticationEx String issuer = jwt.getIssuer().toString(); if (!issuer.equals("https://accounts.google.com") && !issuer.equals("accounts.google.com")) { log.error("Invalid ID token issuer: " + issuer); - throw new OAuth2AuthenticationException(OAUTH2_AUTHENTICATION_EXCEPTION.getCode(),OAUTH2_AUTHENTICATION_EXCEPTION.getMessage(), HttpStatus.UNAUTHORIZED); + throw new OAuth2AuthenticationException(OAUTH2_AUTHENTICATION_EXCEPTION.getErrorCode(),OAUTH2_AUTHENTICATION_EXCEPTION.getErrorMessage(), HttpStatus.UNAUTHORIZED); } String audience = jwt.getAudience().stream().findFirst().orElse(null); if (!googleClientId.equals(audience)) { log.error("Invalid ID token audience: " + audience); - throw new OAuth2AuthenticationException(OAUTH2_AUTHENTICATION_EXCEPTION.getCode(),OAUTH2_AUTHENTICATION_EXCEPTION.getMessage(), HttpStatus.UNAUTHORIZED); + throw new OAuth2AuthenticationException(OAUTH2_AUTHENTICATION_EXCEPTION.getErrorCode(),OAUTH2_AUTHENTICATION_EXCEPTION.getErrorMessage(), HttpStatus.UNAUTHORIZED); } return jwt; diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java index 58236e25d..8245717fa 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.service.impl; +import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import io.mosip.kernel.cryptomanager.service.CryptomanagerService; import io.mosip.mimoto.dbentity.CredentialMetadata; @@ -8,10 +9,7 @@ import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.dto.resident.WalletCredentialResponseDTO; -import io.mosip.mimoto.exception.ApiNotAccessibleException; -import io.mosip.mimoto.exception.AuthorizationServerWellknownResponseException; -import io.mosip.mimoto.exception.InvalidWellknownResponseException; -import io.mosip.mimoto.exception.VCVerificationException; +import io.mosip.mimoto.exception.*; import io.mosip.mimoto.model.QRCodeType; import io.mosip.mimoto.repository.WalletCredentialsRepository; import io.mosip.mimoto.service.IdpService; @@ -32,7 +30,7 @@ import java.io.IOException; import java.util.*; -import static io.mosip.mimoto.exception.ErrorConstants.SIGNATURE_VERIFICATION_EXCEPTION; +import static io.mosip.mimoto.exception.ErrorConstants.*; import static io.mosip.mimoto.util.LocaleUtils.getCredentialDisplayDTOBasedOnLocale; @@ -152,13 +150,13 @@ public List fetchAllCredentialsForWallet(String } @Override - public WalletCredentialResponseDTO fetchVerifiableCredential(String walletId, String credentialId, String base64EncodedWalletKey, String locale) throws Exception { + public WalletCredentialResponseDTO fetchVerifiableCredential(String walletId, String credentialId, String base64EncodedWalletKey, String locale) throws DecryptionException, CorruptedEncryptedDataException { Optional verifiableCredentialObj = walletCredentialsRepository.findByIdAndWalletId(credentialId, walletId); VerifiableCredential verifiableCredential; if (verifiableCredentialObj.isPresent()) { verifiableCredential = verifiableCredentialObj.get(); } else { - throw new RuntimeException("Credential not found"); + throw new InvalidInputException(INVALID_REQUEST.getErrorCode(), "Credential not found"); } String decryptCredentialResponse = encryptionDecryptionUtil.decryptCredential(verifiableCredential.getCredential(), base64EncodedWalletKey); @@ -166,8 +164,20 @@ public WalletCredentialResponseDTO fetchVerifiableCredential(String walletId, St String credentialType = verifiableCredential.getCredentialMetadata().getCredentialType(); String dataShareUrl = verifiableCredential.getCredentialMetadata().getDataShareUrl(); String credentialValidity = verifiableCredential.getCredentialMetadata().getCredentialValidity(); - IssuerDTO issuerDTO = issuersService.getIssuerDetails(issuerId); - CredentialIssuerConfiguration credentialIssuerConfiguration = issuersService.getIssuerConfiguration(issuerId); + IssuerDTO issuerDTO = null; + CredentialIssuerConfiguration credentialIssuerConfiguration = null; + try { + issuerDTO = issuersService.getIssuerDetails(issuerId); + credentialIssuerConfiguration = issuersService.getIssuerConfiguration(issuerId); + } catch (ApiNotAccessibleException | IOException | AuthorizationServerWellknownResponseException | + InvalidWellknownResponseException e) { + log.error("Error occurred while fetching issuer configuration for issuerId: {}", issuerId, e); + throw new ExternalServiceUnavailableException( + ErrorConstants.SERVER_UNAVAILABLE.getErrorCode(), + ErrorConstants.SERVER_UNAVAILABLE.getErrorMessage()); + } + + CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = new CredentialIssuerWellKnownResponse( credentialIssuerConfiguration.getCredentialIssuer(), credentialIssuerConfiguration.getAuthorizationServers(), @@ -175,8 +185,21 @@ public WalletCredentialResponseDTO fetchVerifiableCredential(String walletId, St credentialIssuerConfiguration.getCredentialConfigurationsSupported()); CredentialsSupportedResponse credentialsSupportedResponse = credentialIssuerWellKnownResponse.getCredentialConfigurationsSupported().get(credentialType); - VCCredentialResponse vcCredentialResponse = objectMapper.readValue(decryptCredentialResponse, VCCredentialResponse.class); - ByteArrayInputStream byteArrayInputStream = credentialUtilService.generatePdfForVerifiableCredentials(credentialType, vcCredentialResponse, issuerDTO, credentialsSupportedResponse, dataShareUrl, credentialValidity, locale); + VCCredentialResponse vcCredentialResponse = null; + try { + vcCredentialResponse = objectMapper.readValue(decryptCredentialResponse, VCCredentialResponse.class); + } catch (JsonProcessingException e) { + throw new CorruptedEncryptedDataException(SCHEMA_MISMATCH.getErrorCode(), SCHEMA_MISMATCH.getErrorMessage(), e); + } + ByteArrayInputStream byteArrayInputStream = null; + try { + byteArrayInputStream = credentialUtilService.generatePdfForVerifiableCredentials(credentialType, vcCredentialResponse, issuerDTO, credentialsSupportedResponse, dataShareUrl, credentialValidity, locale); + } catch (Exception e) { + log.error("Error occurred while creating pdf", e); + throw new CredentialPdfGenerationException( + ErrorConstants.SERVER_UNAVAILABLE.getErrorCode(), + ErrorConstants.SERVER_UNAVAILABLE.getErrorMessage()); + } String fileName = getCredentialDisplayDTOBasedOnLocale(credentialsSupportedResponse.getDisplay(), locale).getName(); return new WalletCredentialResponseDTO(new InputStreamResource(byteArrayInputStream), fileName); diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java index 7d3d62ba1..a7621288f 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java @@ -24,7 +24,7 @@ public class WalletServiceImpl implements WalletService { @Autowired private WalletUtil walletHelper; @Override - public String createWallet(String userId, String walletName, String pin) throws Exception { + public String createWallet(String userId, String walletName, String pin) { // Create a new wallet for the user return walletHelper.createWallet(userId, walletName, pin); } @@ -40,7 +40,7 @@ public String getWalletKey(String userId, String walletId, String pin) { public List getWallets(String userId) { List walletIds = walletRepository.findWalletIdByUserId(userId); return walletIds.stream() - .map(walletId -> new WalletResponseDto(walletId)) + .map(WalletResponseDto::new) .collect(Collectors.toList()); } } diff --git a/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java b/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java index d00862046..34cef52cf 100644 --- a/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java +++ b/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java @@ -5,19 +5,24 @@ import io.mosip.kernel.cryptomanager.dto.CryptoWithPinResponseDto; import io.mosip.kernel.cryptomanager.dto.CryptomanagerRequestDto; import io.mosip.kernel.cryptomanager.service.CryptomanagerService; +import io.mosip.mimoto.exception.DecryptionException; +import io.mosip.mimoto.exception.EncryptionException; import org.apache.commons.lang3.StringUtils; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; -import javax.crypto.Cipher; -import javax.crypto.SecretKey; +import javax.crypto.*; import javax.crypto.spec.GCMParameterSpec; import java.nio.charset.StandardCharsets; import java.security.*; import java.security.spec.PKCS8EncodedKeySpec; import java.util.Base64; +import static io.mosip.mimoto.exception.ErrorConstants.DECRYPTION_FAILED; +import static io.mosip.mimoto.exception.ErrorConstants.ENCRYPTION_FAILED; + @Component public class EncryptionDecryptionUtil { /** @@ -70,7 +75,8 @@ public String decrypt(String dataToDecrypt, String refId, String aad, String sal * @param data The data to encrypt (as byte[]) * @return Base64 encoded string of (IV + encryptedData) */ - public String encryptWithAES(SecretKey aesKey, byte[] data) throws Exception { + public String encryptWithAES(SecretKey aesKey, byte[] data) throws EncryptionException { + try { Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); // Generate a secure random IV @@ -91,6 +97,11 @@ public String encryptWithAES(SecretKey aesKey, byte[] data) throws Exception { System.arraycopy(encryptedData, 0, finalEncryptedData, GCM_IV_LENGTH, encryptedData.length); return Base64.getEncoder().encodeToString(finalEncryptedData); + } catch (NoSuchAlgorithmException | NoSuchPaddingException | + InvalidKeyException | InvalidAlgorithmParameterException | + IllegalBlockSizeException | BadPaddingException e) { + throw new EncryptionException(ENCRYPTION_FAILED.getErrorCode(), ENCRYPTION_FAILED.getErrorMessage(), e); + } } /** @@ -100,22 +111,28 @@ public String encryptWithAES(SecretKey aesKey, byte[] data) throws Exception { * @param base64EncodedData Base64 encoded string of (IV + encryptedData) * @return Decrypted data as byte[] */ - public byte[] decryptWithAES(SecretKey aesKey, String base64EncodedData) throws Exception { - Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); - byte[] decodedData = Base64.getDecoder().decode(base64EncodedData); - - // Extract IV and Encrypted Data - byte[] iv = new byte[GCM_IV_LENGTH]; - byte[] encryptedData = new byte[decodedData.length - GCM_IV_LENGTH]; - - System.arraycopy(decodedData, 0, iv, 0, GCM_IV_LENGTH); - System.arraycopy(decodedData, GCM_IV_LENGTH, encryptedData, 0, encryptedData.length); - - // Initialize cipher with AES key & extracted IV - GCMParameterSpec gcmSpec = new GCMParameterSpec(GCM_TAG_LENGTH, iv); - cipher.init(Cipher.DECRYPT_MODE, aesKey, gcmSpec); - - return cipher.doFinal(encryptedData); + public byte[] decryptWithAES(SecretKey aesKey, String base64EncodedData) throws DecryptionException { + try { + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + byte[] decodedData = Base64.getDecoder().decode(base64EncodedData); + + // Extract IV and Encrypted Data + byte[] iv = new byte[GCM_IV_LENGTH]; + byte[] encryptedData = new byte[decodedData.length - GCM_IV_LENGTH]; + + System.arraycopy(decodedData, 0, iv, 0, GCM_IV_LENGTH); + System.arraycopy(decodedData, GCM_IV_LENGTH, encryptedData, 0, encryptedData.length); + + // Initialize cipher with AES key & extracted IV + GCMParameterSpec gcmSpec = new GCMParameterSpec(GCM_TAG_LENGTH, iv); + cipher.init(Cipher.DECRYPT_MODE, aesKey, gcmSpec); + + return cipher.doFinal(encryptedData); + } catch (NoSuchAlgorithmException | NoSuchPaddingException | + InvalidKeyException | InvalidAlgorithmParameterException | + IllegalBlockSizeException | BadPaddingException e) { + throw new DecryptionException(DECRYPTION_FAILED.getErrorCode(), DECRYPTION_FAILED.getErrorMessage(), e); + } } public static byte[] stringToBytes(String data) { @@ -151,13 +168,13 @@ public String encryptKeyWithPin(SecretKey encryptionKey, String pin) { return cryptomanagerService.encryptWithPin(requestDto).getData(); } - public String encryptCredential(String credentialData, String base64EncodedWalletKey) throws Exception { + public String encryptCredential(String credentialData, String base64EncodedWalletKey) throws EncryptionException { byte[] decodedWalletKey = Base64.getDecoder().decode(base64EncodedWalletKey); SecretKey walletKey = bytesToSecretKey(decodedWalletKey); return encryptWithAES(walletKey, stringToBytes(credentialData)); } - public String decryptCredential(String encryptedCredentialData, String base64EncodedWalletKey) throws Exception { + public String decryptCredential(String encryptedCredentialData, String base64EncodedWalletKey) throws DecryptionException { byte[] decodedWalletKey = Base64.getDecoder().decode(base64EncodedWalletKey); SecretKey walletKey = bytesToSecretKey(decodedWalletKey); return bytesToString(decryptWithAES(walletKey, encryptedCredentialData)); diff --git a/src/main/java/io/mosip/mimoto/util/KeyGenerationUtil.java b/src/main/java/io/mosip/mimoto/util/KeyGenerationUtil.java index 7ba1cfc9b..24f7ddea4 100644 --- a/src/main/java/io/mosip/mimoto/util/KeyGenerationUtil.java +++ b/src/main/java/io/mosip/mimoto/util/KeyGenerationUtil.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.util; +import io.mosip.mimoto.exception.KeyGenerationException; import io.mosip.mimoto.model.SigningAlgorithm; import org.bouncycastle.jce.provider.BouncyCastleProvider; @@ -10,6 +11,8 @@ import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; +import static io.mosip.mimoto.exception.ErrorConstants.ENCRYPTION_FAILED; + public class KeyGenerationUtil { static { @@ -77,10 +80,14 @@ public static KeyPair getKeyPairFromDBStoredKeys(SigningAlgorithm algorithm, byt * @param algorithm The algorithm to use (e.g., "AES"). * @param keysize The key size in bits. * @return SecretKey object. - * @throws NoSuchAlgorithmException */ - public static SecretKey generateEncryptionKey(String algorithm, int keysize) throws NoSuchAlgorithmException { - KeyGenerator keyGenerator = KeyGenerator.getInstance(algorithm); + public static SecretKey generateEncryptionKey(String algorithm, int keysize) { + KeyGenerator keyGenerator = null; + try { + keyGenerator = KeyGenerator.getInstance(algorithm); + } catch (NoSuchAlgorithmException e) { + throw new KeyGenerationException(ENCRYPTION_FAILED.getErrorCode(), ENCRYPTION_FAILED.getErrorMessage(), e); + } keyGenerator.init(keysize); return keyGenerator.generateKey(); } diff --git a/src/main/java/io/mosip/mimoto/util/ProofSigningKeyFactory.java b/src/main/java/io/mosip/mimoto/util/ProofSigningKeyFactory.java index 0bb783aa0..a6fb0c30b 100644 --- a/src/main/java/io/mosip/mimoto/util/ProofSigningKeyFactory.java +++ b/src/main/java/io/mosip/mimoto/util/ProofSigningKeyFactory.java @@ -2,29 +2,42 @@ import io.mosip.mimoto.dbentity.KeyMetadata; import io.mosip.mimoto.dbentity.ProofSigningKey; +import io.mosip.mimoto.exception.KeyGenerationException; import io.mosip.mimoto.model.SigningAlgorithm; +import lombok.extern.slf4j.Slf4j; +import java.security.InvalidAlgorithmParameterException; import java.security.KeyPair; +import java.security.NoSuchAlgorithmException; +import java.security.NoSuchProviderException; import java.time.Instant; import java.util.Base64; import java.util.UUID; +import static io.mosip.mimoto.exception.ErrorConstants.ENCRYPTION_FAILED; + +@Slf4j public class ProofSigningKeyFactory { - public static ProofSigningKey createProofSigningKey(SigningAlgorithm algorithm) throws Exception { - KeyPair keyPair = KeyGenerationUtil.generateKeyPair(algorithm); + public static ProofSigningKey createProofSigningKey(SigningAlgorithm algorithm) { + try { + KeyPair keyPair = KeyGenerationUtil.generateKeyPair(algorithm); - KeyMetadata keyMetadata = new KeyMetadata(); - keyMetadata.setAlgorithmName(algorithm.name()); + KeyMetadata keyMetadata = new KeyMetadata(); + keyMetadata.setAlgorithmName(algorithm.name()); - ProofSigningKey proofSigningKey = new ProofSigningKey(); - proofSigningKey.setId(UUID.randomUUID().toString()); - proofSigningKey.setPublicKey(Base64.getEncoder().encodeToString(keyPair.getPublic().getEncoded())); - proofSigningKey.setSecretKey(keyPair.getPrivate()); - proofSigningKey.setKeyMetadata(keyMetadata); - proofSigningKey.setCreatedAt(Instant.now()); - proofSigningKey.setUpdatedAt(Instant.now()); + ProofSigningKey proofSigningKey = new ProofSigningKey(); + proofSigningKey.setId(UUID.randomUUID().toString()); + proofSigningKey.setPublicKey(Base64.getEncoder().encodeToString(keyPair.getPublic().getEncoded())); + proofSigningKey.setSecretKey(keyPair.getPrivate()); + proofSigningKey.setKeyMetadata(keyMetadata); + proofSigningKey.setCreatedAt(Instant.now()); + proofSigningKey.setUpdatedAt(Instant.now()); - return proofSigningKey; + return proofSigningKey; + } catch (NoSuchAlgorithmException | InvalidAlgorithmParameterException | NoSuchProviderException e) { + log.error("Error while generating key",e); + throw new KeyGenerationException(ENCRYPTION_FAILED.getErrorCode(), "Failed to generate proof signing key for algorithm: " + algorithm); + } } } diff --git a/src/main/java/io/mosip/mimoto/util/Utilities.java b/src/main/java/io/mosip/mimoto/util/Utilities.java index 23325bcdb..d550fd44d 100644 --- a/src/main/java/io/mosip/mimoto/util/Utilities.java +++ b/src/main/java/io/mosip/mimoto/util/Utilities.java @@ -6,6 +6,7 @@ import io.mosip.kernel.core.logger.spi.Logger; import io.mosip.mimoto.core.http.ResponseWrapper; import io.mosip.mimoto.dto.ErrorDTO; +import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.exception.ExceptionUtils; import io.mosip.mimoto.exception.PlatformErrorMessages; import io.mosip.mimoto.service.impl.CredentialShareServiceImpl; @@ -259,9 +260,9 @@ public static ResponseEntity getErrorResponseEntityWithoutWrapper( } public static ResponseEntity getErrorResponseEntityFromPlatformErrorMessage( - PlatformErrorMessages message, HttpStatus status, MediaType contentType) { - String errorMessage = message.getMessage(); - String errorCode = message.getCode(); + ErrorConstants message, HttpStatus status, MediaType contentType) { + String errorMessage = message.getErrorMessage(); + String errorCode = message.getErrorCode(); ResponseEntity.BodyBuilder responseEntity = ResponseEntity.status(status); if (contentType != null) { diff --git a/src/main/java/io/mosip/mimoto/util/WalletUtil.java b/src/main/java/io/mosip/mimoto/util/WalletUtil.java index ef9a28b1c..8b9036010 100644 --- a/src/main/java/io/mosip/mimoto/util/WalletUtil.java +++ b/src/main/java/io/mosip/mimoto/util/WalletUtil.java @@ -4,6 +4,7 @@ import io.mosip.mimoto.dbentity.ProofSigningKey; import io.mosip.mimoto.dbentity.Wallet; import io.mosip.mimoto.dbentity.WalletMetadata; +import io.mosip.mimoto.exception.InvalidInputException; import io.mosip.mimoto.model.SigningAlgorithm; import io.mosip.mimoto.repository.WalletRepository; import jakarta.servlet.http.HttpSession; @@ -15,6 +16,8 @@ import java.util.List; import java.util.UUID; +import static io.mosip.mimoto.exception.ErrorConstants.INVALID_REQUEST; + @Component public class WalletUtil { @@ -28,12 +31,12 @@ public String decryptWalletKey(String encryptedWalletKey, String pin) { return encryptionDecryptionUtil.decryptWithPin(encryptedWalletKey, pin); } - public String createWallet(String userId, String walletName, String pin) throws Exception { + public String createWallet(String userId, String walletName, String pin) { SecretKey encryptionKey = KeyGenerationUtil.generateEncryptionKey("AES", 256); return saveWallet(userId, walletName, pin, encryptionKey, "AES", "encryptWithPin"); } - public String saveWallet(String userId, String walletName, String walletPin, SecretKey encryptionKey, String encryptionAlgorithm, String encryptionType) throws Exception { + public String saveWallet(String userId, String walletName, String walletPin, SecretKey encryptionKey, String encryptionAlgorithm, String encryptionType) { String walletId = UUID.randomUUID().toString(); WalletMetadata walletMetadata = createWalletMetadata(walletName, encryptionAlgorithm, encryptionType); @@ -60,7 +63,7 @@ private WalletMetadata createWalletMetadata(String walletName, String encryption return walletMetadata; } - private List createProofSigningKeys(SecretKey encryptionKey, Wallet wallet) throws Exception { + private List createProofSigningKeys(SecretKey encryptionKey, Wallet wallet) { List proofSigningKeys = new ArrayList<>(); List algorithms = List.of(SigningAlgorithm.RS256, SigningAlgorithm.ES256, SigningAlgorithm.ES256K, SigningAlgorithm.ED25519); for (SigningAlgorithm algorithm : algorithms) { @@ -75,17 +78,17 @@ private List createProofSigningKeys(SecretKey encryptionKey, Wa public static String getSessionWalletKey(HttpSession session) { Object key = session.getAttribute(SessionKeys.WALLET_KEY); - if (key == null) throw new RuntimeException("Wallet Key is missing in session"); + if (key == null) throw new InvalidInputException(INVALID_REQUEST.getErrorCode(), "Wallet Key is missing in session"); return key.toString(); } public static void validateWalletId(HttpSession session, String walletIdFromRequest) { Object sessionWalletId = session.getAttribute(SessionKeys.WALLET_ID); - if (sessionWalletId == null) throw new RuntimeException("Wallet Id is missing in session"); + if (sessionWalletId == null) throw new InvalidInputException(INVALID_REQUEST.getErrorCode(), "Wallet Id is missing in session"); String walletIdInSession = sessionWalletId.toString(); if (!walletIdInSession.equals(walletIdFromRequest)) { - throw new RuntimeException("Invalid Wallet Id. Session and request Wallet Id do not match"); + throw new InvalidInputException(INVALID_REQUEST.getErrorCode(), "Invalid Wallet Id. Session and request Wallet Id do not match"); } } } \ No newline at end of file From 7fdbd51724b789da5914382ac4fd6ec4ece9fd4f Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Thu, 24 Apr 2025 16:32:04 +0530 Subject: [PATCH 542/860] injiweb-1518 fixing the test cases after changes due to exception handling Signed-off-by: Gurpreet41082 --- pom.xml | 18 +- .../WalletCredentialsController.java | 2 + .../VerifiableCredentialResponseDTO.java | 4 + .../resident/WalletCredentialResponseDTO.java | 2 + .../CredentialNotFoundException.java | 16 + .../exception/GlobalExceptionHandler.java | 6 +- .../exception/InvalidRequestException.java | 17 + .../OAuth2AuthenticationSuccessHandler.java | 4 + .../impl/WalletCredentialServiceImpl.java | 4 +- .../java/io/mosip/mimoto/util/WalletUtil.java | 8 +- .../controller/UsersControllerTest.java | 21 +- .../WalletCredentialsControllerTest.java | 568 ++++++++---------- .../controller/WalletsControllerTest.java | 15 +- .../exception/GlobalExceptionHandlerTest.java | 112 ++++ ...ticationSuccessHandlerIntegrationTest.java | 181 ++++++ ...Auth2AuthenticationSuccessHandlerTest.java | 298 ++++----- .../security/oauth2/OAuth2LoginTests.java | 4 +- .../service/WalletCredentialServiceTest.java | 6 +- .../mimoto/util/KeyGenerationUtilTest.java | 7 +- 19 files changed, 779 insertions(+), 514 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/exception/CredentialNotFoundException.java create mode 100644 src/main/java/io/mosip/mimoto/exception/InvalidRequestException.java create mode 100644 src/test/java/io/mosip/mimoto/exception/GlobalExceptionHandlerTest.java create mode 100644 src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerIntegrationTest.java diff --git a/pom.xml b/pom.xml index 6091b2ae9..eef84b75f 100644 --- a/pom.xml +++ b/pom.xml @@ -192,12 +192,6 @@ test - - org.springframework.security - spring-security-test - 6.4.2 - test - org.springframework.boot spring-boot-starter-data-jpa @@ -234,6 +228,12 @@ io.mosip.kernel kernel-auth-adapter ${mosip.kernel.auth.adapter.version} + + + org.springframework.security + spring-security-test + + @@ -485,6 +485,12 @@ kernel-keymanager-service 1.3.0-beta.2 lib + + + org.springframework.security + spring-security-test + + io.vertx diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index 2091c7d8e..38974a050 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -112,6 +112,8 @@ public ResponseEntity getVerifiableCredential(@PathVariable WalletCredentialResponseDTO walletCredentialResponseDTO = null; try { walletCredentialResponseDTO = walletCredentialService.fetchVerifiableCredential(walletId, credentialId, base64EncodedWalletKey, locale); + } catch (CredentialNotFoundException e) { + return Utilities.getErrorResponseEntityWithoutWrapper(e, e.getErrorCode(), HttpStatus.NOT_FOUND, MediaType.APPLICATION_JSON); } catch (DecryptionException e) { return Utilities.getErrorResponseEntityWithoutWrapper(e, e.getErrorCode(), HttpStatus.BAD_REQUEST, MediaType.APPLICATION_JSON); } catch (CorruptedEncryptedDataException e) { diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/VerifiableCredentialResponseDTO.java b/src/main/java/io/mosip/mimoto/dto/mimoto/VerifiableCredentialResponseDTO.java index 1e3f68eed..823772d9a 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/VerifiableCredentialResponseDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/VerifiableCredentialResponseDTO.java @@ -2,11 +2,15 @@ import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; @Data @Builder +@NoArgsConstructor +@AllArgsConstructor public class VerifiableCredentialResponseDTO { @JsonProperty("issuer_name") @Schema(description = "Name of the issuer") diff --git a/src/main/java/io/mosip/mimoto/dto/resident/WalletCredentialResponseDTO.java b/src/main/java/io/mosip/mimoto/dto/resident/WalletCredentialResponseDTO.java index 0bdb9e692..bf073f499 100644 --- a/src/main/java/io/mosip/mimoto/dto/resident/WalletCredentialResponseDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/resident/WalletCredentialResponseDTO.java @@ -4,10 +4,12 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; import org.springframework.core.io.InputStreamResource; @Data @AllArgsConstructor +@NoArgsConstructor public class WalletCredentialResponseDTO { @JsonProperty("file_content_stream") diff --git a/src/main/java/io/mosip/mimoto/exception/CredentialNotFoundException.java b/src/main/java/io/mosip/mimoto/exception/CredentialNotFoundException.java new file mode 100644 index 000000000..64df89eea --- /dev/null +++ b/src/main/java/io/mosip/mimoto/exception/CredentialNotFoundException.java @@ -0,0 +1,16 @@ +package io.mosip.mimoto.exception; + +import java.io.Serial; + +public class CredentialNotFoundException extends BaseUncheckedException { + @Serial + private static final long serialVersionUID = 1L; + + public CredentialNotFoundException(String errorCode, String errorMessage, Throwable cause) { + super(errorCode, errorMessage, cause); + } + + public CredentialNotFoundException(String errorCode, String errorMessage) { + super(errorCode, errorMessage); + } +} diff --git a/src/main/java/io/mosip/mimoto/exception/GlobalExceptionHandler.java b/src/main/java/io/mosip/mimoto/exception/GlobalExceptionHandler.java index abe2dd287..a144f845f 100644 --- a/src/main/java/io/mosip/mimoto/exception/GlobalExceptionHandler.java +++ b/src/main/java/io/mosip/mimoto/exception/GlobalExceptionHandler.java @@ -34,10 +34,10 @@ public ErrorDTO handleExternalServiceUnavailable(ExternalServiceUnavailableExcep return new ErrorDTO(ex.getErrorCode(), ex.getMessage()); } - @ExceptionHandler(InvalidInputException.class) + @ExceptionHandler(InvalidRequestException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) - public ErrorDTO handleExternalServiceUnavailable(InvalidInputException ex) { - log.error("Connection to external service failed: {}", ex.getMessage(), ex); + public ErrorDTO handleInvalidRequest(InvalidRequestException ex) { + log.error("Invalid request parameters: {}", ex.getMessage(), ex); return new ErrorDTO(ex.getErrorCode(), ex.getMessage()); } diff --git a/src/main/java/io/mosip/mimoto/exception/InvalidRequestException.java b/src/main/java/io/mosip/mimoto/exception/InvalidRequestException.java new file mode 100644 index 000000000..e7e3eb006 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/exception/InvalidRequestException.java @@ -0,0 +1,17 @@ +package io.mosip.mimoto.exception; + +import java.io.Serial; + +public class InvalidRequestException extends BaseUncheckedException { + + @Serial + private static final long serialVersionUID = 1L; + + public InvalidRequestException(String errorCode, String errorMessage, Throwable cause) { + super(errorCode, errorMessage, cause); + } + + public InvalidRequestException(String errorCode, String errorMessage) { + super(errorCode, errorMessage); + } +} diff --git a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java index cfc54f38b..dbe861c32 100644 --- a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java +++ b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java @@ -32,6 +32,10 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo OAuth2AuthenticationToken oauth2Token = (OAuth2AuthenticationToken) authentication; OAuth2User oAuth2User = oauth2Token.getPrincipal(); HttpSession session = request.getSession(false); + if (session == null) { + log.error("Session not available"); + throw new ServletException("Session not available"); + } // Storing clientRegistrationId in the Redis session to verify it against the one in user metadata during profile retrieval String clientRegistrationId = oauth2Token.getAuthorizedClientRegistrationId(); diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java index 8245717fa..7b5a69db3 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java @@ -156,7 +156,8 @@ public WalletCredentialResponseDTO fetchVerifiableCredential(String walletId, St if (verifiableCredentialObj.isPresent()) { verifiableCredential = verifiableCredentialObj.get(); } else { - throw new InvalidInputException(INVALID_REQUEST.getErrorCode(), "Credential not found"); + log.error("Credential not found for walletId: {} and credentialId: {}", walletId, credentialId); + throw new CredentialNotFoundException(RESOURCE_NOT_FOUND.getErrorCode(), RESOURCE_NOT_FOUND.getErrorMessage()); } String decryptCredentialResponse = encryptionDecryptionUtil.decryptCredential(verifiableCredential.getCredential(), base64EncodedWalletKey); @@ -189,6 +190,7 @@ public WalletCredentialResponseDTO fetchVerifiableCredential(String walletId, St try { vcCredentialResponse = objectMapper.readValue(decryptCredentialResponse, VCCredentialResponse.class); } catch (JsonProcessingException e) { + log.error("Error occurred while parsing the decrypted credential response", e); throw new CorruptedEncryptedDataException(SCHEMA_MISMATCH.getErrorCode(), SCHEMA_MISMATCH.getErrorMessage(), e); } ByteArrayInputStream byteArrayInputStream = null; diff --git a/src/main/java/io/mosip/mimoto/util/WalletUtil.java b/src/main/java/io/mosip/mimoto/util/WalletUtil.java index 8b9036010..f75ebf835 100644 --- a/src/main/java/io/mosip/mimoto/util/WalletUtil.java +++ b/src/main/java/io/mosip/mimoto/util/WalletUtil.java @@ -4,7 +4,7 @@ import io.mosip.mimoto.dbentity.ProofSigningKey; import io.mosip.mimoto.dbentity.Wallet; import io.mosip.mimoto.dbentity.WalletMetadata; -import io.mosip.mimoto.exception.InvalidInputException; +import io.mosip.mimoto.exception.InvalidRequestException; import io.mosip.mimoto.model.SigningAlgorithm; import io.mosip.mimoto.repository.WalletRepository; import jakarta.servlet.http.HttpSession; @@ -78,17 +78,17 @@ private List createProofSigningKeys(SecretKey encryptionKey, Wa public static String getSessionWalletKey(HttpSession session) { Object key = session.getAttribute(SessionKeys.WALLET_KEY); - if (key == null) throw new InvalidInputException(INVALID_REQUEST.getErrorCode(), "Wallet Key is missing in session"); + if (key == null) throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Wallet Key is missing in session"); return key.toString(); } public static void validateWalletId(HttpSession session, String walletIdFromRequest) { Object sessionWalletId = session.getAttribute(SessionKeys.WALLET_ID); - if (sessionWalletId == null) throw new InvalidInputException(INVALID_REQUEST.getErrorCode(), "Wallet Id is missing in session"); + if (sessionWalletId == null) throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Wallet Id is missing in session"); String walletIdInSession = sessionWalletId.toString(); if (!walletIdInSession.equals(walletIdFromRequest)) { - throw new InvalidInputException(INVALID_REQUEST.getErrorCode(), "Invalid Wallet Id. Session and request Wallet Id do not match"); + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Invalid Wallet Id. Session and request Wallet Id do not match"); } } } \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java b/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java index f1744442b..0b9757d4d 100644 --- a/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java @@ -3,6 +3,7 @@ import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.dbentity.UserMetadata; import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; +import io.mosip.mimoto.exception.GlobalExceptionHandler; import io.mosip.mimoto.repository.UserMetadataRepository; import io.mosip.mimoto.util.EncryptionDecryptionUtil; import org.junit.Before; @@ -19,20 +20,18 @@ import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.result.MockMvcResultMatchers; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import java.util.Optional; import static org.mockito.Mockito.when; -import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @RunWith(SpringRunner.class) -@SpringBootTest(classes = UsersController.class) +@SpringBootTest(classes = {UsersController.class, GlobalExceptionHandler.class}) @AutoConfigureMockMvc @EnableWebMvc @EnableWebSecurity @@ -64,9 +63,6 @@ public void setUp() { userMetadata.setDisplayName("encryptedName"); userMetadata.setProfilePictureUrl("encryptedUrl"); userMetadata.setEmail("encryptedEmail"); - mockMvc = MockMvcBuilders.webAppContextSetup(context) - .apply(springSecurity()) - .build(); mockSession = new MockHttpSession(); mockSession.setAttribute("clientRegistrationId", "google"); mockSession.setAttribute(SessionKeys.USER_ID, "user123"); @@ -75,7 +71,6 @@ public void setUp() { when(encryptionDecryptionUtil.decrypt("encryptedName", "user_pii", "", "")).thenReturn("Name 123"); when(encryptionDecryptionUtil.decrypt("encryptedUrl", "user_pii", "", "")).thenReturn("https://profile.com/pic.jpg"); when(encryptionDecryptionUtil.decrypt("encryptedEmail", "user_pii", "", "")).thenReturn("name123@gmail.com"); - } @Test @@ -98,7 +93,7 @@ public void shouldThrowExceptionForAInvalidUser() throws Exception { .session(mockSession) .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")).session(mockSession)) .andExpect(status().isNotFound()) - .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-049")) + .andExpect(jsonPath("$.errorCode").value("invalid_user")) .andExpect(jsonPath("$.errorMessage").value("User not found. Please check your credentials or login again")); } @@ -111,8 +106,8 @@ public void shouldThrowExceptionIfAnyOtherErrorOccurredWhileFetchingUserData() t .session(mockSession) .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")).session(mockSession)) .andExpect(status().isInternalServerError()) - .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-049")) - .andExpect(jsonPath("$.errorMessage").value("Failed to fetch the User metadata from database due to : Failure occurred while decrypting the name")); + .andExpect(jsonPath("$.errorCode").value("internal_server_error")) + .andExpect(jsonPath("$.errorMessage").value("We are unable to process request now")); } @Test @@ -138,9 +133,9 @@ public void shouldReturnInternalServerErrorForCacheError() throws Exception { .accept(MediaType.APPLICATION_JSON) .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")) .session(mockSession)) - .andExpect(status().isInternalServerError()) - .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-052")) - .andExpect(jsonPath("$.errorMessage").value("No user metadata present in cache")); + .andExpect(status().isUnauthorized()) + .andExpect(jsonPath("$.errorCode").value("session_invalid_or_expired")) + .andExpect(jsonPath("$.errorMessage").value("User session is missing or expired. Please log in again.")); } } \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java index cc5b13cfe..08d39de8c 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java @@ -3,375 +3,293 @@ import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; import io.mosip.mimoto.dto.resident.WalletCredentialResponseDTO; -import io.mosip.mimoto.exception.ApiNotAccessibleException; -import io.mosip.mimoto.exception.IdpException; -import io.mosip.mimoto.service.impl.WalletCredentialServiceImpl; +import io.mosip.mimoto.exception.*; +import io.mosip.mimoto.service.WalletCredentialService; import io.mosip.mimoto.util.CredentialUtilService; +import io.mosip.mimoto.util.WalletUtil; import jakarta.servlet.http.HttpSession; -import org.apache.http.client.entity.UrlEncodedFormEntity; -import org.apache.http.message.BasicNameValuePair; -import org.apache.http.util.EntityUtils; -import org.hamcrest.Matchers; -import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.*; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; import org.springframework.core.io.InputStreamResource; -import org.springframework.dao.DataAccessResourceFailureException; -import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; -import org.springframework.mock.web.MockHttpSession; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.http.ResponseEntity; import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.util.*; - +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; -@RunWith(SpringRunner.class) -@SpringBootTest(classes = WalletCredentialsController.class) -@AutoConfigureMockMvc(addFilters = false) -@EnableWebMvc +@RunWith(MockitoJUnitRunner.class) public class WalletCredentialsControllerTest { @InjectMocks - private WalletCredentialsController controller; + private WalletCredentialsController walletCredentialsController; - @MockBean - private WalletCredentialServiceImpl walletCredentialService; + @Mock + private WalletCredentialService walletCredentialService; - @MockBean + @Mock private CredentialUtilService credentialUtilService; - @MockBean + @Mock private HttpSession httpSession; - @Autowired - private MockMvc mockMvc; - - VerifiableCredentialResponseDTO verifiableCredentialResponseDTO; - String postRequestContent, getRequestContent, mockWalletKey = "mock-wallet-key", walletId = "wallet123", locale = "test-local", credential = "test-credential", issuer = "test-issuer", credentialId = "cred123", fileName = "credential.pdf"; - byte[] fileBytes = "Sample PDF".getBytes(); - WalletCredentialResponseDTO responseDTO; - - @Before - public void setup() throws IOException { - MockitoAnnotations.openMocks(this); - verifiableCredentialResponseDTO = VerifiableCredentialResponseDTO.builder() - .issuerName("issuerName123") - .issuerLogo("issuerLogo") - .credentialType("credentialType123") - .credentialTypeLogo("credentialTypeLogo") - .credentialId("credentialId123") - .build(); - postRequestContent = EntityUtils.toString(new UrlEncodedFormEntity(List.of( - new BasicNameValuePair("grant_type", "authorization_code"), - new BasicNameValuePair("code", "test-code"), - new BasicNameValuePair("redirect_uri", "test-redirect_uri"), - new BasicNameValuePair("code_verifier", "test-code_verifier"), - new BasicNameValuePair("issuer", issuer), - new BasicNameValuePair("vcStorageExpiryLimitInTimes", "3"), - new BasicNameValuePair("credential", credential), - new BasicNameValuePair("locale", locale) - ))); - getRequestContent = EntityUtils.toString(new UrlEncodedFormEntity(List.of( - new BasicNameValuePair("locale", locale) - ))); - responseDTO = new WalletCredentialResponseDTO(new InputStreamResource(new ByteArrayInputStream(fileBytes)), fileName); - } - - @Test - public void shouldDownloadCredentialForValidWalletAndDetails() throws Exception { - when(credentialUtilService.getTokenResponse(anyMap(), eq(issuer))).thenReturn(new TokenResponseDTO()); - when(walletCredentialService.fetchAndStoreCredential(anyString(), anyString(), any(), anyString(), anyString(), anyString(), anyString())) - .thenReturn(verifiableCredentialResponseDTO); - - mockMvc.perform(post(String.format("/wallets/%s/credentials", walletId)) - .accept(MediaType.APPLICATION_JSON) - .sessionAttr("wallet_key", "mockWalletKey") - .sessionAttr("wallet_id", walletId) - .contentType(MediaType.APPLICATION_FORM_URLENCODED) - .content(postRequestContent)) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.issuer_name").value("issuerName123")) - .andExpect(jsonPath("$.issuer_logo").value("issuerLogo")) - .andExpect(jsonPath("$.credential_type").value("credentialType123")) - .andExpect(jsonPath("$.credential_type_logo").value("credentialTypeLogo")) - .andExpect(jsonPath("$.credential_id").value("credentialId123")); - } - - @Test - public void shouldThrowExceptionIfWalletIdIsMissingWhileDownloadingCredential() throws Exception { - mockMvc.perform(get(String.format("/wallets/%s/credentials", walletId)) - .contentType(MediaType.APPLICATION_FORM_URLENCODED) - .content(getRequestContent)) - .andExpect(status().isInternalServerError()) - .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-054")) - .andExpect(jsonPath("$.errorMessage").value("Wallet Id is missing in session")); - } - - @Test - public void shouldThrowExceptionIfReceivedWalletIdAndSessionWalletIdMismatchWhileDownloadCredential() throws Exception { - mockMvc.perform(get(String.format("/wallets/%s/credentials", walletId)) - .sessionAttr("wallet_id", "wallet124") - .contentType(MediaType.APPLICATION_FORM_URLENCODED) - .content(getRequestContent)) - .andExpect(status().isInternalServerError()) - .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-054")) - .andExpect(jsonPath("$.errorMessage").value("Invalid Wallet Id. Session and request Wallet Id do not match")); - } - - @Test - public void shouldThrowExceptionIfWalletKeyIsMissingWhileDownloadingCredential() throws Exception { - mockMvc.perform(post(String.format("/wallets/%s/credentials", walletId)) - .sessionAttr("wallet_id", walletId) - .contentType(MediaType.APPLICATION_FORM_URLENCODED) - .content(postRequestContent)) - .andExpect(status().isInternalServerError()) - .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-053")) - .andExpect(jsonPath("$.errorMessage").value("Wallet Key is missing in session")); - } - - - @Test - public void shouldThrowExceptionOnFetchingTokenResponseFailure() throws Exception { - when(credentialUtilService.getTokenResponse(anyMap(), eq(issuer))) - .thenThrow(new IdpException("Exception occurred while performing the authorization")); - - mockMvc.perform(post(String.format("/wallets/%s/credentials", walletId)) - .sessionAttr("wallet_key", mockWalletKey) - .sessionAttr("wallet_id", walletId) - .contentType(MediaType.APPLICATION_FORM_URLENCODED) - .content(postRequestContent)) - .andExpect(status().isInternalServerError()) - .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-034")) - .andExpect(jsonPath("$.errorMessage").value("Exception occurred while performing the authorization")); - } - - @Test - public void shouldThrowExceptionOnFetchingIssuerOrAuthServerWellknownFailureDuringTokenGeneration() throws Exception { - Mockito.when(credentialUtilService.getTokenResponse(Mockito.anyMap(), eq(issuer))) - .thenThrow(new ApiNotAccessibleException()); - - mockMvc.perform(post(String.format("/wallets/%s/credentials", walletId)) - .sessionAttr("wallet_key", mockWalletKey) - .sessionAttr("wallet_id", walletId) - .contentType(MediaType.APPLICATION_FORM_URLENCODED) - .content(postRequestContent)) - .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.errorCode", Matchers.is("RESIDENT-APP-026"))) - .andExpect(jsonPath("$.errorMessage", Matchers.is("Api not accessible failure"))); - } - - @Test - public void shouldThrowExceptionOnDatabaseConnectionFailureDuringCredentialDownload() throws Exception { - when(credentialUtilService.getTokenResponse(anyMap(), eq(issuer))).thenReturn(new TokenResponseDTO()); - when(walletCredentialService.fetchAndStoreCredential(anyString(), anyString(), any(), anyString(), anyString(), anyString(), anyString())) - .thenThrow(new DataAccessResourceFailureException("Exception occurred when connecting to the database to store the credential response")); - - mockMvc.perform(post(String.format("/wallets/%s/credentials", walletId)) - .sessionAttr("wallet_key", mockWalletKey) - .sessionAttr("wallet_id", walletId) - .contentType(MediaType.APPLICATION_FORM_URLENCODED) - .content(postRequestContent)) - .andExpect(status().isInternalServerError()) - .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-047")) - .andExpect(jsonPath("$.errorMessage").value("Failed to connect to the shared database while Storing Verifiable Credential data into the database")); - } - - @Test - public void shouldThrowExceptionOnAnyErrorOccurredDuringCredentialDownload() throws Exception { - when(httpSession.getAttribute("wallet_key")).thenReturn(mockWalletKey); - when(credentialUtilService.getTokenResponse(anyMap(), anyString())).thenThrow(new RuntimeException("Unexpected error occurred while downloading credential")); - - mockMvc.perform(post(String.format("/wallets/%s/credentials", walletId)) - .sessionAttr("wallet_key", mockWalletKey) - .sessionAttr("wallet_id", walletId) - .contentType(MediaType.APPLICATION_FORM_URLENCODED) - .content(postRequestContent)) - .andExpect(status().isInternalServerError()) - .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-053")) - .andExpect(jsonPath("$.errorMessage").value("Unexpected error occurred while downloading credential")); - } - - @Test - public void shouldFetchAllCredentialsForValidWalletAndDetails() throws Exception { - List mockList = Collections.singletonList(verifiableCredentialResponseDTO); - - when(walletCredentialService.fetchAllCredentialsForWallet(walletId, mockWalletKey, locale)).thenReturn(mockList); - - mockMvc.perform(get(String.format("/wallets/%s/credentials", walletId)) - .sessionAttr("wallet_key", mockWalletKey) - .sessionAttr("wallet_id", walletId) - .contentType(MediaType.APPLICATION_FORM_URLENCODED) - .content(getRequestContent)) - .andExpect(status().isOk()); - } + private static final String WALLET_ID = "wallet123"; + private static final String CREDENTIAL_ID = "cred456"; + private static final String BASE64_ENCODED_WALLET_KEY = "encodedKey"; + private static final String ISSUER_ID = "issuer1"; + private static final String CREDENTIAL_TYPE = "type1"; + private static final String LOCALE = "en"; + private static final String VC_STORAGE_EXPIRY = "-1"; @Test - public void shouldThrowExceptionIfWalletIdIsMissingWhileFetchingAllCredentials() throws Exception { - mockMvc.perform(get(String.format("/wallets/%s/credentials", walletId)) - .contentType(MediaType.APPLICATION_FORM_URLENCODED) - .content(getRequestContent)) - .andExpect(status().isInternalServerError()) - .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-054")) - .andExpect(jsonPath("$.errorMessage").value("Wallet Id is missing in session")); + public void downloadCredentialSuccess() throws Exception { + + try (var walletUtilMock = mockStatic(WalletUtil.class)) { + walletUtilMock.when(() -> WalletUtil.validateWalletId(httpSession, WALLET_ID)).thenAnswer(invocation -> null); + walletUtilMock.when(() -> WalletUtil.getSessionWalletKey(httpSession)).thenReturn(BASE64_ENCODED_WALLET_KEY); + + Map params = new HashMap<>(); + params.put("issuer", ISSUER_ID); + params.put("credential", CREDENTIAL_TYPE); + params.put("locale", LOCALE); + params.put("vcStorageExpiryLimitInTimes", VC_STORAGE_EXPIRY); + + TokenResponseDTO tokenResponse = new TokenResponseDTO(); + VerifiableCredentialResponseDTO responseDTO = new VerifiableCredentialResponseDTO(); + + when(credentialUtilService.getTokenResponse(params, ISSUER_ID)).thenReturn(tokenResponse); + when(walletCredentialService.fetchAndStoreCredential(eq(ISSUER_ID), eq(CREDENTIAL_TYPE), eq(tokenResponse), + eq(VC_STORAGE_EXPIRY), eq(LOCALE), eq(WALLET_ID), eq(BASE64_ENCODED_WALLET_KEY))) + .thenReturn(responseDTO); + + + ResponseEntity response = walletCredentialsController + .downloadCredential(WALLET_ID, params, httpSession); + + + assertEquals(HttpStatus.OK, response.getStatusCode()); + assertEquals(responseDTO, response.getBody()); + walletUtilMock.verify(() -> WalletUtil.validateWalletId(httpSession, WALLET_ID)); + walletUtilMock.verify(() -> WalletUtil.getSessionWalletKey(httpSession)); + verify(credentialUtilService).getTokenResponse(params, ISSUER_ID); + verify(walletCredentialService).fetchAndStoreCredential(eq(ISSUER_ID), eq(CREDENTIAL_TYPE), eq(tokenResponse), + eq(VC_STORAGE_EXPIRY), eq(LOCALE), eq(WALLET_ID), eq(BASE64_ENCODED_WALLET_KEY)); + } } @Test - public void shouldThrowExceptionIfReceivedWalletIdAndSessionWalletIdMismatchWhileFetchingAllCredentials() throws Exception { - mockMvc.perform(get(String.format("/wallets/%s/credentials", walletId)) - .sessionAttr("wallet_id", "wallet124") - .contentType(MediaType.APPLICATION_FORM_URLENCODED) - .content(getRequestContent)) - .andExpect(status().isInternalServerError()) - .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-054")) - .andExpect(jsonPath("$.errorMessage").value("Invalid Wallet Id. Session and request Wallet Id do not match")); + public void downloadCredentialTokenFetchFailureThrowsExternalServiceUnavailableException() throws Exception { + + try (var walletUtilMock = mockStatic(WalletUtil.class)) { + walletUtilMock.when(() -> WalletUtil.validateWalletId(httpSession, WALLET_ID)).thenAnswer(invocation -> null); + walletUtilMock.when(() -> WalletUtil.getSessionWalletKey(httpSession)).thenReturn(BASE64_ENCODED_WALLET_KEY); + + Map params = new HashMap<>(); + params.put("issuer", ISSUER_ID); + params.put("credential", CREDENTIAL_TYPE); + + when(credentialUtilService.getTokenResponse(params, ISSUER_ID)) + .thenThrow(new ApiNotAccessibleException("API Error")); + + + try { + walletCredentialsController.downloadCredential(WALLET_ID, params, httpSession); + fail("Expected ExternalServiceUnavailableException"); + } catch (ExternalServiceUnavailableException e) { + // Expected + } + walletUtilMock.verify(() -> WalletUtil.validateWalletId(httpSession, WALLET_ID)); + verify(credentialUtilService).getTokenResponse(params, ISSUER_ID); + verify(walletCredentialService, never()).fetchAndStoreCredential(any(), any(), any(), any(), any(), any(), any()); + } } @Test - public void shouldThrowExceptionIfWalletKeyIsMissingWhileFetchingAllCredentials() throws Exception { - mockMvc.perform(get(String.format("/wallets/%s/credentials", walletId)) - .sessionAttr("wallet_id", walletId) - .contentType(MediaType.APPLICATION_FORM_URLENCODED) - .content(getRequestContent)) - .andExpect(status().isInternalServerError()) - .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-054")) - .andExpect(jsonPath("$.errorMessage").value("Wallet Key is missing in session")); - } - - @Test - public void shouldThrowExceptionOnDatabaseConnectionFailureWhileFetchingCredentials() throws Exception { - when(walletCredentialService.fetchAllCredentialsForWallet(walletId, mockWalletKey, locale)) - .thenThrow(new DataAccessResourceFailureException("Exception occurred when connecting to the database to store the credential response")); - - mockMvc.perform(get(String.format("/wallets/%s/credentials", walletId)) - .sessionAttr("wallet_key", mockWalletKey) - .sessionAttr("wallet_id", walletId) - .contentType(MediaType.APPLICATION_FORM_URLENCODED) - .content(getRequestContent)) - .andExpect(status().isInternalServerError()) - .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-047")) - .andExpect(jsonPath("$.errorMessage").value("Failed to connect to the shared database while Fetching Verifiable Credential data into the database")); - } - - @Test - public void shouldThrowExceptionOnAnyErrorOccurredWhileFetchingCredentials() throws Exception { - when(httpSession.getAttribute("wallet_key")).thenReturn(mockWalletKey); - when(walletCredentialService.fetchAllCredentialsForWallet(anyString(), anyString(), anyString())) - .thenThrow(new RuntimeException("Unexpected error occurred while fetching wallet credentials")); - - mockMvc.perform(get(String.format("/wallets/%s/credentials", walletId)) - .sessionAttr("wallet_key", "mockWalletKey") - .sessionAttr("wallet_id", walletId) - .contentType(MediaType.APPLICATION_FORM_URLENCODED) - .content(getRequestContent)) - .andExpect(status().isInternalServerError()) - .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-054")) - .andExpect(jsonPath("$.errorMessage").value("Unexpected error occurred while fetching wallet credentials")); - } - - - @Test - public void shouldReturnPDFByteStreamWithInlineContentDispositionInHeaderForValidRequestWithActionAsPreview() throws Exception { - Mockito.when(walletCredentialService.fetchVerifiableCredential(walletId, credentialId, mockWalletKey, "en")) - .thenReturn(responseDTO); - - mockMvc.perform(get(String.format("/wallets/%s/credentials/%s", walletId, credentialId)) - .param("locale", "en") - .param("action", "preview") - .sessionAttr("wallet_key", mockWalletKey) - .sessionAttr("wallet_id", walletId)) - .andExpect(status().isOk()) - .andExpect(header().string(HttpHeaders.CONTENT_DISPOSITION, "inline; filename=\"credential.pdf\"")) - .andExpect(content().contentType(MediaType.APPLICATION_PDF)); + public void downloadCredentialServiceExceptionReturnsInternalServerError() throws Exception { + + try (var walletUtilMock = mockStatic(WalletUtil.class)) { + walletUtilMock.when(() -> WalletUtil.validateWalletId(httpSession, WALLET_ID)).thenAnswer(invocation -> null); + walletUtilMock.when(() -> WalletUtil.getSessionWalletKey(httpSession)).thenReturn(BASE64_ENCODED_WALLET_KEY); + + Map params = new HashMap<>(); + params.put("issuer", ISSUER_ID); + params.put("credential", CREDENTIAL_TYPE); + + TokenResponseDTO tokenResponse = new TokenResponseDTO(); + when(credentialUtilService.getTokenResponse(params, ISSUER_ID)).thenReturn(tokenResponse); + when(walletCredentialService.fetchAndStoreCredential(any(), any(), any(), any(), any(), any(), any())) + .thenThrow(new RuntimeException("Service Error")); + + + ResponseEntity response = walletCredentialsController + .downloadCredential(WALLET_ID, params, httpSession); + + + assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode()); + walletUtilMock.verify(() -> WalletUtil.validateWalletId(httpSession, WALLET_ID)); + walletUtilMock.verify(() -> WalletUtil.getSessionWalletKey(httpSession)); + verify(credentialUtilService).getTokenResponse(params, ISSUER_ID); + verify(walletCredentialService).fetchAndStoreCredential(any(), any(), any(), any(), any(), any(), any()); + } } @Test - public void shouldReturnPDFByteStreamWithAttachmentContentDispositionInHeaderForValidRequestWithActionAsDownload() throws Exception { - Mockito.when(walletCredentialService.fetchVerifiableCredential(walletId, credentialId, mockWalletKey, "en")) - .thenReturn(responseDTO); - - mockMvc.perform(get(String.format("/wallets/%s/credentials/%s", walletId, credentialId)) - .param("locale", "en") - .param("action", "download") - .sessionAttr("wallet_key", mockWalletKey) - .sessionAttr("wallet_id", walletId)) - .andExpect(status().isOk()) - .andExpect(header().string(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"credential.pdf\"")) - .andExpect(content().contentType(MediaType.APPLICATION_PDF)); + public void fetchAllCredentialsForGivenWalletSuccess() { + + try (var walletUtilMock = mockStatic(WalletUtil.class)) { + walletUtilMock.when(() -> WalletUtil.validateWalletId(httpSession, WALLET_ID)).thenAnswer(invocation -> null); + walletUtilMock.when(() -> WalletUtil.getSessionWalletKey(httpSession)).thenReturn(BASE64_ENCODED_WALLET_KEY); + + List credentials = Arrays.asList(new VerifiableCredentialResponseDTO()); + when(walletCredentialService.fetchAllCredentialsForWallet(WALLET_ID, BASE64_ENCODED_WALLET_KEY, LOCALE)) + .thenReturn(credentials); + + + ResponseEntity> response = walletCredentialsController + .fetchAllCredentialsForGivenWallet(WALLET_ID, LOCALE, httpSession); + + + assertEquals(HttpStatus.OK, response.getStatusCode()); + assertEquals(credentials, response.getBody()); + walletUtilMock.verify(() -> WalletUtil.validateWalletId(httpSession, WALLET_ID)); + walletUtilMock.verify(() -> WalletUtil.getSessionWalletKey(httpSession)); + verify(walletCredentialService).fetchAllCredentialsForWallet(WALLET_ID, BASE64_ENCODED_WALLET_KEY, LOCALE); + } } @Test - public void shouldThrowExceptionIfWalletIdIsMissingWhileFetchingCredential() throws Exception { - mockMvc.perform(get(String.format("/wallets/%s/credentials/%s", walletId, credentialId)) - .contentType(MediaType.APPLICATION_FORM_URLENCODED) - .content(getRequestContent)) - .andExpect(status().isInternalServerError()) - .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-055")) - .andExpect(jsonPath("$.errorMessage").value("Wallet Id is missing in session")); + public void getVerifiableCredentialSuccessInline() throws Exception { + + try (var walletUtilMock = mockStatic(WalletUtil.class)) { + walletUtilMock.when(() -> WalletUtil.validateWalletId(httpSession, WALLET_ID)).thenAnswer(invocation -> null); + walletUtilMock.when(() -> WalletUtil.getSessionWalletKey(httpSession)).thenReturn(BASE64_ENCODED_WALLET_KEY); + + WalletCredentialResponseDTO responseDTO = new WalletCredentialResponseDTO(); + responseDTO.setFileName("credential.pdf"); + responseDTO.setFileContentStream(new InputStreamResource(new ByteArrayInputStream(new byte[0]))); + + when(walletCredentialService.fetchVerifiableCredential(WALLET_ID, CREDENTIAL_ID, BASE64_ENCODED_WALLET_KEY, LOCALE)) + .thenReturn(responseDTO); + + + ResponseEntity response = walletCredentialsController + .getVerifiableCredential(WALLET_ID, CREDENTIAL_ID, LOCALE, "inline", httpSession); + + + assertEquals(HttpStatus.OK, response.getStatusCode()); + assertEquals(MediaType.APPLICATION_PDF, response.getHeaders().getContentType()); + assertEquals("inline; filename=\"credential.pdf\"", response.getHeaders().getFirst("Content-Disposition")); + assertNotNull(response.getBody()); + walletUtilMock.verify(() -> WalletUtil.validateWalletId(httpSession, WALLET_ID)); + walletUtilMock.verify(() -> WalletUtil.getSessionWalletKey(httpSession)); + verify(walletCredentialService).fetchVerifiableCredential(WALLET_ID, CREDENTIAL_ID, BASE64_ENCODED_WALLET_KEY, LOCALE); + } } @Test - public void shouldThrowExceptionIfReceivedWalletIdAndSessionWalletIdMismatchWhileFetchingCredential() throws Exception { - mockMvc.perform(get(String.format("/wallets/%s/credentials/%s", walletId, credentialId)) - .sessionAttr("wallet_id", "wallet124") - .contentType(MediaType.APPLICATION_FORM_URLENCODED) - .content(getRequestContent)) - .andExpect(status().isInternalServerError()) - .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-055")) - .andExpect(jsonPath("$.errorMessage").value("Invalid Wallet Id. Session and request Wallet Id do not match")); + public void getVerifiableCredentialSuccessDownload() throws Exception { + + try (var walletUtilMock = mockStatic(WalletUtil.class)) { + walletUtilMock.when(() -> WalletUtil.validateWalletId(httpSession, WALLET_ID)).thenAnswer(invocation -> null); + walletUtilMock.when(() -> WalletUtil.getSessionWalletKey(httpSession)).thenReturn(BASE64_ENCODED_WALLET_KEY); + + WalletCredentialResponseDTO responseDTO = new WalletCredentialResponseDTO(); + responseDTO.setFileName("credential.pdf"); + responseDTO.setFileContentStream(new InputStreamResource(new ByteArrayInputStream(new byte[0]))); + + when(walletCredentialService.fetchVerifiableCredential(WALLET_ID, CREDENTIAL_ID, BASE64_ENCODED_WALLET_KEY, LOCALE)) + .thenReturn(responseDTO); + + + ResponseEntity response = walletCredentialsController + .getVerifiableCredential(WALLET_ID, CREDENTIAL_ID, LOCALE, "download", httpSession); + + + assertEquals(HttpStatus.OK, response.getStatusCode()); + assertEquals("attachment; filename=\"credential.pdf\"", response.getHeaders().getFirst("Content-Disposition")); + walletUtilMock.verify(() -> WalletUtil.validateWalletId(httpSession, WALLET_ID)); + walletUtilMock.verify(() -> WalletUtil.getSessionWalletKey(httpSession)); + verify(walletCredentialService).fetchVerifiableCredential(WALLET_ID, CREDENTIAL_ID, BASE64_ENCODED_WALLET_KEY, LOCALE); + } } @Test - public void shouldThrowExceptionIfWalletKeyIsMissingWhileFetchingAllCredential() throws Exception { - mockMvc.perform(get(String.format("/wallets/%s/credentials/%s", walletId, credentialId)) - .sessionAttr("wallet_id", walletId) - .contentType(MediaType.APPLICATION_FORM_URLENCODED) - .content(getRequestContent)) - .andExpect(status().isInternalServerError()) - .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-055")) - .andExpect(jsonPath("$.errorMessage").value("Wallet Key is missing in session")); + public void getVerifiableCredentialDecryptionExceptionReturnsBadRequest() throws Exception { + + try (var walletUtilMock = mockStatic(WalletUtil.class)) { + walletUtilMock.when(() -> WalletUtil.validateWalletId(httpSession, WALLET_ID)).thenAnswer(invocation -> null); + walletUtilMock.when(() -> WalletUtil.getSessionWalletKey(httpSession)).thenReturn(BASE64_ENCODED_WALLET_KEY); + + when(walletCredentialService.fetchVerifiableCredential(WALLET_ID, CREDENTIAL_ID, BASE64_ENCODED_WALLET_KEY, LOCALE)) + .thenThrow(new DecryptionException("DECRYPTION_ERROR", "Decryption failed")); + + + ResponseEntity response = walletCredentialsController + .getVerifiableCredential(WALLET_ID, CREDENTIAL_ID, LOCALE, "inline", httpSession); + + + assertEquals(HttpStatus.BAD_REQUEST, response.getStatusCode()); + assertEquals(MediaType.APPLICATION_JSON, response.getHeaders().getContentType()); + walletUtilMock.verify(() -> WalletUtil.validateWalletId(httpSession, WALLET_ID)); + walletUtilMock.verify(() -> WalletUtil.getSessionWalletKey(httpSession)); + verify(walletCredentialService).fetchVerifiableCredential(WALLET_ID, CREDENTIAL_ID, BASE64_ENCODED_WALLET_KEY, LOCALE); + } } @Test - public void shouldThrowExceptionOnDatabaseConnectionFailureWhileFetchingCredential() throws Exception { - Mockito.when(walletCredentialService.fetchVerifiableCredential(eq(walletId), eq(credentialId), anyString(), eq("en"))) - .thenThrow(new DataAccessResourceFailureException("Exception occurred when connecting to the database to fetch the Verifiable credential")); - - mockMvc.perform(get(String.format("/wallets/%s/credentials/%s", walletId, credentialId)) - .param("locale", "en") - .param("action", "download") - .sessionAttr("wallet_key", mockWalletKey) - .sessionAttr("wallet_id", walletId)) - .andExpect(status().isInternalServerError()) - .andExpect(content().contentType(MediaType.APPLICATION_JSON)) - .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-047")) - .andExpect(jsonPath("$.errorMessage").value("Failed to connect to the shared database while Fetching Verifiable Credential data into the database")); + public void getVerifiableCredentialCorruptedEncryptedDataExceptionReturnsUnprocessableEntity() throws Exception { + + try (var walletUtilMock = mockStatic(WalletUtil.class)) { + walletUtilMock.when(() -> WalletUtil.validateWalletId(httpSession, WALLET_ID)).thenAnswer(invocation -> null); + walletUtilMock.when(() -> WalletUtil.getSessionWalletKey(httpSession)).thenReturn(BASE64_ENCODED_WALLET_KEY); + + when(walletCredentialService.fetchVerifiableCredential(WALLET_ID, CREDENTIAL_ID, BASE64_ENCODED_WALLET_KEY, LOCALE)) + .thenThrow(new CorruptedEncryptedDataException("CORRUPTED_DATA", "Corrupted data")); + + + ResponseEntity response = walletCredentialsController + .getVerifiableCredential(WALLET_ID, CREDENTIAL_ID, LOCALE, "inline", httpSession); + + + assertEquals(HttpStatus.UNPROCESSABLE_ENTITY, response.getStatusCode()); + assertEquals(MediaType.APPLICATION_JSON, response.getHeaders().getContentType()); + walletUtilMock.verify(() -> WalletUtil.validateWalletId(httpSession, WALLET_ID)); + walletUtilMock.verify(() -> WalletUtil.getSessionWalletKey(httpSession)); + verify(walletCredentialService).fetchVerifiableCredential(WALLET_ID, CREDENTIAL_ID, BASE64_ENCODED_WALLET_KEY, LOCALE); + } } @Test - public void shouldThrowExceptionOnAnyErrorOccurredWhileFetchingCredential() throws Exception { - Mockito.when(walletCredentialService.fetchVerifiableCredential(eq(walletId), eq(credentialId), anyString(), eq("en"))) - .thenThrow(new RuntimeException("Unexpected error occurred while fetching wallet credentials")); - - mockMvc.perform(get(String.format("/wallets/%s/credentials/%s", walletId, credentialId)) - .param("locale", "en") - .param("action", "download") - .sessionAttr("wallet_key", mockWalletKey) - .sessionAttr("wallet_id", walletId)) - .andExpect(status().isInternalServerError()) - .andExpect(content().contentType(MediaType.APPLICATION_JSON)) - .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-055")) - .andExpect(jsonPath("$.errorMessage").value("Unexpected error occurred while fetching wallet credentials")); + public void downloadCredentialInvalidWalletIdThrowsInvalidRequestException() { + + try (var walletUtilMock = mockStatic(WalletUtil.class)) { + walletUtilMock.when(() -> WalletUtil.validateWalletId(httpSession, WALLET_ID)) + .thenThrow(new InvalidRequestException("INVALID_REQUEST", "Invalid Wallet Id")); + + Map params = new HashMap<>(); + params.put("issuer", ISSUER_ID); + params.put("credential", CREDENTIAL_TYPE); + + + try { + walletCredentialsController.downloadCredential(WALLET_ID, params, httpSession); + fail("Expected InvalidRequestException"); + } catch (InvalidRequestException e) { + // Expected + } + walletUtilMock.verify(() -> WalletUtil.validateWalletId(httpSession, WALLET_ID)); + verifyNoInteractions(credentialUtilService, walletCredentialService); + } } } diff --git a/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java index 4620cfe14..b120d17ad 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java @@ -4,6 +4,7 @@ import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.dto.WalletRequestDto; import io.mosip.mimoto.dto.WalletResponseDto; +import io.mosip.mimoto.exception.GlobalExceptionHandler; import io.mosip.mimoto.service.WalletService; import io.mosip.mimoto.util.WalletValidator; import org.junit.Before; @@ -32,7 +33,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; @RunWith(SpringRunner.class) -@SpringBootTest(classes = WalletsController.class) +@SpringBootTest(classes = {WalletsController.class, GlobalExceptionHandler.class}) @AutoConfigureMockMvc @EnableWebMvc @EnableWebSecurity @@ -91,8 +92,8 @@ public void shouldThrowExceptionIfAnyErrorOccurredWhenCreatingWallet() throws Ex .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")) .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isInternalServerError()) - .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-050")) - .andExpect(jsonPath("$.errorMessage").value("Exception occurred when creating Wallet for given userId")); + .andExpect(jsonPath("$.errorCode").value("internal_server_error")) + .andExpect(jsonPath("$.errorMessage").value("We are unable to process request now")); } @@ -122,8 +123,8 @@ public void shouldThrowExceptionIfAnyErrorOccurredWhileFetchingWalletsForGivenUs .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")) .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isInternalServerError()) - .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-051")) - .andExpect(jsonPath("$.errorMessage").value("Exception occurred when fetching the wallets for given userId")); + .andExpect(jsonPath("$.errorCode").value("internal_server_error")) + .andExpect(jsonPath("$.errorMessage").value("We are unable to process request now")); } @Test @@ -158,7 +159,7 @@ public void shouldThrowExceptionIfAnyErrorOccurredWhileFetchingWalletDataForGive .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")) .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isInternalServerError()) - .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-051")) - .andExpect(jsonPath("$.errorMessage").value("Exception occurred when fetching the wallet data for given walletId and userId")); + .andExpect(jsonPath("$.errorCode").value("internal_server_error")) + .andExpect(jsonPath("$.errorMessage").value("We are unable to process request now")); } } diff --git a/src/test/java/io/mosip/mimoto/exception/GlobalExceptionHandlerTest.java b/src/test/java/io/mosip/mimoto/exception/GlobalExceptionHandlerTest.java new file mode 100644 index 000000000..d83e792c0 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/exception/GlobalExceptionHandlerTest.java @@ -0,0 +1,112 @@ +package io.mosip.mimoto.exception; + +import io.mosip.mimoto.dto.ErrorDTO; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.dao.DataAccessResourceFailureException; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +import java.lang.reflect.Method; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; + +@RunWith(MockitoJUnitRunner.class) +public class GlobalExceptionHandlerTest { + + @InjectMocks + private GlobalExceptionHandler globalExceptionHandler; + + @Before + public void setUp() { + // Initialize any mocks if needed + } + + @Test + public void handleGenericExceptionReturnsInternalServerError() throws Exception { + // Arrange + Exception ex = new RuntimeException("Unexpected error"); + String expectedErrorCode = ErrorConstants.INTERNAL_SERVER_ERROR.getErrorCode(); + String expectedErrorMessage = ErrorConstants.INTERNAL_SERVER_ERROR.getErrorMessage(); + + // Act + ErrorDTO result = globalExceptionHandler.handleGenericException(ex); + + // Assert + assertEquals(expectedErrorCode, result.getErrorCode()); + assertEquals(expectedErrorMessage, result.getErrorMessage()); + + // Verify ResponseStatus annotation + Method method = GlobalExceptionHandler.class.getMethod("handleGenericException", Exception.class); + ResponseStatus responseStatus = method.getAnnotation(ResponseStatus.class); + assertNotNull(responseStatus); + assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, responseStatus.value()); + } + + @Test + public void handleDatabaseExceptionReturnsServiceUnavailable() throws Exception { + // Arrange + DataAccessResourceFailureException ex = new DataAccessResourceFailureException("Database connection failed"); + String expectedErrorCode = ErrorConstants.DATABASE_CONNECTION_EXCEPTION.getErrorCode(); + String expectedErrorMessage = ErrorConstants.DATABASE_CONNECTION_EXCEPTION.getErrorMessage(); + + // Act + ErrorDTO result = globalExceptionHandler.handleDatabaseException(ex); + + // Assert + assertEquals(expectedErrorCode, result.getErrorCode()); + assertEquals(expectedErrorMessage, result.getErrorMessage()); + + // Verify ResponseStatus annotation + Method method = GlobalExceptionHandler.class.getMethod("handleDatabaseException", Exception.class); + ResponseStatus responseStatus = method.getAnnotation(ResponseStatus.class); + assertNotNull(responseStatus); + assertEquals(HttpStatus.SERVICE_UNAVAILABLE, responseStatus.value()); + } + + @Test + public void handleExternalServiceUnavailableReturnsServiceUnavailable() throws Exception { + // Arrange + String errorCode = "EXT_SERVICE_ERROR"; + String errorMessage = "EXT_SERVICE_ERROR --> External service unavailable"; + ExternalServiceUnavailableException ex = new ExternalServiceUnavailableException(errorCode, errorMessage); + + // Act + ErrorDTO result = globalExceptionHandler.handleExternalServiceUnavailable(ex); + + // Assert + assertEquals(errorCode, result.getErrorCode()); + assertEquals(errorCode + " --> " + errorMessage, result.getErrorMessage()); + + // Verify ResponseStatus annotation + Method method = GlobalExceptionHandler.class.getMethod("handleExternalServiceUnavailable", ExternalServiceUnavailableException.class); + ResponseStatus responseStatus = method.getAnnotation(ResponseStatus.class); + assertNotNull(responseStatus); + assertEquals(HttpStatus.SERVICE_UNAVAILABLE, responseStatus.value()); + } + + @Test + public void handleInvalidRequestReturnsBadRequest() throws Exception { + // Arrange + String errorCode = "INVALID_REQUEST"; + String errorMessage = "Invalid input provided"; + InvalidRequestException ex = new InvalidRequestException(errorCode, errorMessage); + + // Act + ErrorDTO result = globalExceptionHandler.handleInvalidRequest(ex); + + // Assert + assertEquals(errorCode, result.getErrorCode()); + assertEquals(errorCode + " --> " + errorMessage, result.getErrorMessage()); + + // Verify ResponseStatus annotation + Method method = GlobalExceptionHandler.class.getMethod("handleInvalidRequest", InvalidRequestException.class); + ResponseStatus responseStatus = method.getAnnotation(ResponseStatus.class); + assertNotNull(responseStatus); + assertEquals(HttpStatus.BAD_REQUEST, responseStatus.value()); + } +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerIntegrationTest.java b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerIntegrationTest.java new file mode 100644 index 000000000..0c0a74401 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerIntegrationTest.java @@ -0,0 +1,181 @@ +package io.mosip.mimoto.security.oauth2; + +import io.mosip.mimoto.config.Config; +import io.mosip.mimoto.exception.GlobalExceptionHandler; +import io.mosip.mimoto.service.LogoutService; +import io.mosip.mimoto.service.UserMetadataService; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.dao.DataAccessResourceFailureException; +import org.springframework.mock.web.MockHttpSession; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.oauth2.client.endpoint.OAuth2AccessTokenResponseClient; +import org.springframework.security.oauth2.client.endpoint.OAuth2AuthorizationCodeGrantRequest; +import org.springframework.security.oauth2.client.registration.ClientRegistration; +import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository; +import org.springframework.security.oauth2.client.userinfo.OAuth2UserRequest; +import org.springframework.security.oauth2.client.userinfo.OAuth2UserService; +import org.springframework.security.oauth2.client.web.HttpSessionOAuth2AuthorizationRequestRepository; +import org.springframework.security.oauth2.core.AuthorizationGrantType; +import org.springframework.security.oauth2.core.OAuth2AccessToken; +import org.springframework.security.oauth2.core.endpoint.OAuth2AccessTokenResponse; +import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationRequest; +import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames; +import org.springframework.security.oauth2.core.user.DefaultOAuth2User; +import org.springframework.security.oauth2.core.user.OAuth2User; +import org.springframework.session.SessionRepository; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; + +import java.util.Collections; +import java.util.Map; +import java.util.UUID; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.redirectedUrl; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@WebMvcTest({OAuth2AuthenticationSuccessHandler.class, GlobalExceptionHandler.class}) +@ContextConfiguration(classes = {Config.class}) // Include any necessary configuration +@TestPropertySource(properties = "mosip.inji.web.url=https://injiweb.dev1.mosip.net") +@EnableWebMvc +public class OAuth2AuthenticationSuccessHandlerIntegrationTest { + + @Autowired + private MockMvc mockMvc; + @MockBean + private OAuth2AccessTokenResponseClient accessTokenResponseClient; + + @MockBean + private OAuth2AuthenticationFailureHandler oAuth2AuthenticationFailureHandler; + + @MockBean + private SessionRepository sessionRepository; + + @MockBean + private LogoutService logoutService; + + @MockBean + private UserMetadataService userMetadataService; + + @MockBean + private ClientRegistrationRepository clientRegistrationRepository; + + @MockBean + private OAuth2UserService oauth2UserService; + + private String providerSubjectId, identityProvider, displayName, profilePictureUrl, email, userId; + + MockHttpSession mockSession; + + @Before + public void setUp() { + MockitoAnnotations.openMocks(this); + // MockitoAnnotations.initMocks(this); + providerSubjectId = "123456789"; + identityProvider = "google"; + displayName = "user_123"; + profilePictureUrl = "https://example.com/profile.jpg"; + email = "user.123@example.com"; + userId = UUID.randomUUID().toString(); + + ClientRegistration googleClient = ClientRegistration.withRegistrationId("google") + .clientId("test-client-id") + .clientSecret("test-client-secret") + .authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE) + .redirectUri("https://injiweb.dev1.mosip.net/login/oauth2/callback/google") + .tokenUri("https://oauth2.googleapis.com/token") + .authorizationUri("https://accounts.google.com/o/oauth2/auth") + .userInfoUri("https://www.googleapis.com/oauth2/v3/userinfo") + .clientName("Google") + .build(); + + when(clientRegistrationRepository.findByRegistrationId("google")).thenReturn(googleClient); + + OAuth2AuthorizationCodeGrantRequest grantRequest = Mockito.any(); + OAuth2AccessTokenResponse tokenResponse = OAuth2AccessTokenResponse.withToken("mock-access-token") + .tokenType(OAuth2AccessToken.TokenType.BEARER) + .expiresIn(3600) + .build(); + + when(accessTokenResponseClient.getTokenResponse(grantRequest)).thenReturn(tokenResponse); + OAuth2User mockOAuth2User = new DefaultOAuth2User( + Collections.singleton(new SimpleGrantedAuthority("ROLE_USER")), + Map.of( + "sub", providerSubjectId, + "name", displayName, + "email", email, + "picture", profilePictureUrl + ), + "sub" + ); + when(oauth2UserService.loadUser(any(OAuth2UserRequest.class))) + .thenReturn(mockOAuth2User); + + OAuth2AuthorizationRequest authRequest = OAuth2AuthorizationRequest.authorizationCode() + .authorizationUri("https://accounts.google.com/o/oauth2/auth") + .clientId("test-client-id") + .redirectUri("https://yourapp.com/oauth2/callback/google") + .scopes(Collections.singleton("profile")) + .state("test-state") + .attributes(Map.of(OAuth2ParameterNames.REGISTRATION_ID, "google")) + .build(); + + mockSession = new MockHttpSession(); + mockSession.setAttribute(HttpSessionOAuth2AuthorizationRequestRepository.class.getName() + ".AUTHORIZATION_REQUEST", authRequest); + } + + @Test + public void shouldReturnRedirectUrlWithSuccessStatusQueryParamIfLoginIsSuccessful() throws Exception { + mockMvc.perform(get("/oauth2/callback/google") + .session(mockSession) + .param("code", "test-authorization-code") + .param("state", "test-state")) + .andExpect(status().is3xxRedirection()) + .andExpect(redirectedUrl("https://injiweb.dev1.mosip.net/login?status=success")); + } + + @Test + public void shouldSendCustomErrorInRedirectUrlWhenLoginIsSuccessfulButAnErrorOccurredInAuthenticationSuccessHandler() throws Exception { + when(userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email)) + .thenThrow(new RuntimeException("Failed to store the user metadata")); + + mockMvc.perform(get("/oauth2/callback/google") + .session(mockSession) + .param("code", "test-authorization-code") + .param("state", "test-state")) + .andExpect(status().is3xxRedirection()) + .andExpect(redirectedUrl("https://injiweb.dev1.mosip.net/login?status=error&error_code=RESIDENT-APP-048&error_message=Failed+to+store+the+User+metadata+into+database")); + + verify(userMetadataService, times(1)).updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); + } + + @Test + public void shouldSendCustomErrorInRedirectUrlWhenLoginIsSuccessfulButDatabaseIsNotConnectedToStoreUserData() throws Exception { + when(userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email)) + .thenThrow(new DataAccessResourceFailureException("Failed to connect to the database")); + + mockMvc.perform(get("/oauth2/callback/google") + .session(mockSession) + .param("code", "test-authorization-code") + .param("state", "test-state")) + .andExpect(status().is3xxRedirection()) + .andExpect(redirectedUrl("https://injiweb.dev1.mosip.net/login?status=error&error_code=RESIDENT-APP-047&error_message=Failed+to+connect+to+the+shared+database")); + + verify(userMetadataService, times(1)).updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); + } +} + diff --git a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java index 141e97b50..dbac8b977 100644 --- a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java +++ b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java @@ -1,179 +1,183 @@ package io.mosip.mimoto.security.oauth2; -import io.mosip.mimoto.config.Config; -import io.mosip.mimoto.service.LogoutService; +import io.mosip.mimoto.constant.SessionKeys; +import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; +import io.mosip.mimoto.exception.InvalidRequestException; import io.mosip.mimoto.service.UserMetadataService; -import lombok.extern.slf4j.Slf4j; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpSession; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.Mockito; -import org.mockito.MockitoAnnotations; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; -import org.springframework.dao.DataAccessResourceFailureException; -import org.springframework.mock.web.MockHttpSession; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.oauth2.client.endpoint.OAuth2AccessTokenResponseClient; -import org.springframework.security.oauth2.client.endpoint.OAuth2AuthorizationCodeGrantRequest; -import org.springframework.security.oauth2.client.registration.ClientRegistration; -import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository; -import org.springframework.security.oauth2.client.userinfo.OAuth2UserRequest; -import org.springframework.security.oauth2.client.userinfo.OAuth2UserService; -import org.springframework.security.oauth2.client.web.HttpSessionOAuth2AuthorizationRequestRepository; -import org.springframework.security.oauth2.core.AuthorizationGrantType; -import org.springframework.security.oauth2.core.OAuth2AccessToken; -import org.springframework.security.oauth2.core.endpoint.OAuth2AccessTokenResponse; -import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationRequest; -import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames; -import org.springframework.security.oauth2.core.user.DefaultOAuth2User; +import org.mockito.ArgumentCaptor; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken; import org.springframework.security.oauth2.core.user.OAuth2User; -import org.springframework.session.SessionRepository; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.test.web.servlet.MockMvc; -import java.util.Collections; -import java.util.Map; -import java.util.UUID; +import java.io.IOException; +import java.lang.reflect.Field; -import static org.mockito.ArgumentMatchers.any; +import static org.junit.Assert.*; import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.redirectedUrl; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - -@RunWith(SpringRunner.class) -@ContextConfiguration(classes = {Config.class}) -@WebMvcTest(Config.class) -@AutoConfigureMockMvc -@Import({OAuth2AuthenticationSuccessHandler.class}) -@Slf4j + +@RunWith(MockitoJUnitRunner.class) public class OAuth2AuthenticationSuccessHandlerTest { - @Autowired - private MockMvc mockMvc; - @MockBean - private OAuth2AccessTokenResponseClient accessTokenResponseClient; - @MockBean - private OAuth2AuthenticationFailureHandler oAuth2AuthenticationFailureHandler; + @InjectMocks + private OAuth2AuthenticationSuccessHandler successHandler; - @MockBean - private SessionRepository sessionRepository; + @Mock + private UserMetadataService userMetadataService; - @MockBean - private LogoutService logoutService; + @Mock + private HttpServletRequest request; - @MockBean - private UserMetadataService userMetadataService; + @Mock + private HttpServletResponse response; - @MockBean - private ClientRegistrationRepository clientRegistrationRepository; + @Mock + private HttpSession session; - @MockBean - private OAuth2UserService oauth2UserService; + @Mock + private OAuth2AuthenticationToken oauth2Token; - private String providerSubjectId, identityProvider, displayName, profilePictureUrl, email, userId; + @Mock + private OAuth2User oauth2User; - MockHttpSession mockSession; + private static final String INJI_WEB_URL = "https://example.com"; + private static final String CLIENT_REGISTRATION_ID = "google"; + private static final String PROVIDER_SUBJECT_ID = "sub123"; + private static final String DISPLAY_NAME = "John Doe"; + private static final String PROFILE_PICTURE_URL = "https://example.com/profile.jpg"; + private static final String EMAIL = "john.doe@example.com"; + private static final String USER_ID = "user456"; @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - providerSubjectId = "123456789"; - identityProvider = "google"; - displayName = "user_123"; - profilePictureUrl = "https://example.com/profile.jpg"; - email = "user.123@example.com"; - userId = UUID.randomUUID().toString(); - - ClientRegistration googleClient = ClientRegistration.withRegistrationId("google") - .clientId("test-client-id") - .clientSecret("test-client-secret") - .authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE) - .redirectUri("https://injiweb.dev1.mosip.net/login/oauth2/callback/google") - .tokenUri("https://oauth2.googleapis.com/token") - .authorizationUri("https://accounts.google.com/o/oauth2/auth") - .userInfoUri("https://www.googleapis.com/oauth2/v3/userinfo") - .clientName("Google") - .build(); - - when(clientRegistrationRepository.findByRegistrationId("google")).thenReturn(googleClient); - - OAuth2AuthorizationCodeGrantRequest grantRequest = Mockito.any(); - OAuth2AccessTokenResponse tokenResponse = OAuth2AccessTokenResponse.withToken("mock-access-token") - .tokenType(OAuth2AccessToken.TokenType.BEARER) - .expiresIn(3600) - .build(); - - when(accessTokenResponseClient.getTokenResponse(grantRequest)).thenReturn(tokenResponse); - OAuth2User mockOAuth2User = new DefaultOAuth2User( - Collections.singleton(new SimpleGrantedAuthority("ROLE_USER")), - Map.of( - "sub", providerSubjectId, - "name", displayName, - "email", email, - "picture", profilePictureUrl - ), - "sub" - ); - when(oauth2UserService.loadUser(any(OAuth2UserRequest.class))) - .thenReturn(mockOAuth2User); - - OAuth2AuthorizationRequest authRequest = OAuth2AuthorizationRequest.authorizationCode() - .authorizationUri("https://accounts.google.com/o/oauth2/auth") - .clientId("test-client-id") - .redirectUri("https://yourapp.com/oauth2/callback/google") - .scopes(Collections.singleton("profile")) - .state("test-state") - .attributes(Map.of(OAuth2ParameterNames.REGISTRATION_ID, "google")) - .build(); - - mockSession = new MockHttpSession(); - mockSession.setAttribute(HttpSessionOAuth2AuthorizationRequestRepository.class.getName() + ".AUTHORIZATION_REQUEST", authRequest); + public void setUp() throws Exception { + // Set the injiWebUrl field using reflection to simulate @Value injection + Field injiWebUrlField = OAuth2AuthenticationSuccessHandler.class.getDeclaredField("injiWebUrl"); + injiWebUrlField.setAccessible(true); + injiWebUrlField.set(successHandler, INJI_WEB_URL); + + // Mock session behavior + when(request.getSession(false)).thenReturn(session); } @Test - public void shouldReturnRedirectUrlWithSuccessStatusQueryParamIfLoginIsSuccessful() throws Exception { - mockMvc.perform(get("/oauth2/callback/google") - .session(mockSession) - .param("code", "test-authorization-code") - .param("state", "test-state")) - .andExpect(status().is3xxRedirection()) - .andExpect(redirectedUrl("https://injiweb.dev1.mosip.net/login?status=success")); + public void onAuthenticationSuccessSetsSessionAttributesAndRedirects() throws IOException, ServletException { + // Arrange + when(oauth2Token.getAuthorizedClientRegistrationId()).thenReturn(CLIENT_REGISTRATION_ID); + when(oauth2Token.getPrincipal()).thenReturn(oauth2User); + when(oauth2User.getAttribute("sub")).thenReturn(PROVIDER_SUBJECT_ID); + when(oauth2User.getAttribute("name")).thenReturn(DISPLAY_NAME); + when(oauth2User.getAttribute("picture")).thenReturn(PROFILE_PICTURE_URL); + when(oauth2User.getAttribute("email")).thenReturn(EMAIL); + when(userMetadataService.updateOrInsertUserMetadata( + eq(PROVIDER_SUBJECT_ID), eq(CLIENT_REGISTRATION_ID), eq(DISPLAY_NAME), + eq(PROFILE_PICTURE_URL), eq(EMAIL))) + .thenReturn(USER_ID); + + // Act + successHandler.onAuthenticationSuccess(request, response, oauth2Token); + + // Assert + verify(session).setAttribute(eq("clientRegistrationId"), eq(CLIENT_REGISTRATION_ID)); + verify(session).setAttribute(eq(SessionKeys.USER_ID), eq(USER_ID)); + verify(response).sendRedirect(eq(INJI_WEB_URL + "/login?status=success")); + verify(userMetadataService).updateOrInsertUserMetadata( + eq(PROVIDER_SUBJECT_ID), eq(CLIENT_REGISTRATION_ID), eq(DISPLAY_NAME), + eq(PROFILE_PICTURE_URL), eq(EMAIL)); + + // Verify UserMetadataDTO using ArgumentCaptor + ArgumentCaptor captor = ArgumentCaptor.forClass(UserMetadataDTO.class); + verify(session).setAttribute(eq(SessionKeys.USER_METADATA), captor.capture()); + UserMetadataDTO userMetadataDTO = captor.getValue(); + assertEquals(DISPLAY_NAME, userMetadataDTO.getDisplayName()); + assertEquals(PROFILE_PICTURE_URL, userMetadataDTO.getProfilePictureUrl()); + assertEquals(EMAIL, userMetadataDTO.getEmail()); } @Test - public void shouldSendCustomErrorInRedirectUrlWhenLoginIsSuccessfulButAnErrorOccurredInAuthenticationSuccessHandler() throws Exception { - when(userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email)) - .thenThrow(new RuntimeException("Failed to store the user metadata")); - - mockMvc.perform(get("/oauth2/callback/google") - .session(mockSession) - .param("code", "test-authorization-code") - .param("state", "test-state")) - .andExpect(status().is3xxRedirection()) - .andExpect(redirectedUrl("https://injiweb.dev1.mosip.net/login?status=error&error_code=RESIDENT-APP-048&error_message=Failed+to+store+the+User+metadata+into+database")); - - verify(userMetadataService, times(1)).updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); + public void onAuthenticationSuccessWithNullAttributesSetsSessionAttributesAndRedirects() throws IOException, ServletException { + // Arrange + when(oauth2Token.getAuthorizedClientRegistrationId()).thenReturn(CLIENT_REGISTRATION_ID); + when(oauth2Token.getPrincipal()).thenReturn(oauth2User); + when(oauth2User.getAttribute("sub")).thenReturn(PROVIDER_SUBJECT_ID); + when(oauth2User.getAttribute("name")).thenReturn(null); + when(oauth2User.getAttribute("picture")).thenReturn(null); + when(oauth2User.getAttribute("email")).thenReturn(null); + when(userMetadataService.updateOrInsertUserMetadata( + eq(PROVIDER_SUBJECT_ID), eq(CLIENT_REGISTRATION_ID), isNull(), + isNull(), isNull())) + .thenReturn(USER_ID); + + // Act + successHandler.onAuthenticationSuccess(request, response, oauth2Token); + + // Assert + verify(session).setAttribute(eq("clientRegistrationId"), eq(CLIENT_REGISTRATION_ID)); + verify(session).setAttribute(eq(SessionKeys.USER_ID), eq(USER_ID)); + verify(response).sendRedirect(eq(INJI_WEB_URL + "/login?status=success")); + verify(userMetadataService).updateOrInsertUserMetadata( + eq(PROVIDER_SUBJECT_ID), eq(CLIENT_REGISTRATION_ID), isNull(), + isNull(), isNull()); + + // Verify UserMetadataDTO using ArgumentCaptor + ArgumentCaptor captor = ArgumentCaptor.forClass(UserMetadataDTO.class); + verify(session).setAttribute(eq(SessionKeys.USER_METADATA), captor.capture()); + UserMetadataDTO userMetadataDTO = captor.getValue(); + assertNull(userMetadataDTO.getDisplayName()); + assertNull(userMetadataDTO.getProfilePictureUrl()); + assertNull(userMetadataDTO.getEmail()); } @Test - public void shouldSendCustomErrorInRedirectUrlWhenLoginIsSuccessfulButDatabaseIsNotConnectedToStoreUserData() throws Exception { - when(userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email)) - .thenThrow(new DataAccessResourceFailureException("Failed to connect to the database")); - - mockMvc.perform(get("/oauth2/callback/google") - .session(mockSession) - .param("code", "test-authorization-code") - .param("state", "test-state")) - .andExpect(status().is3xxRedirection()) - .andExpect(redirectedUrl("https://injiweb.dev1.mosip.net/login?status=error&error_code=RESIDENT-APP-047&error_message=Failed+to+connect+to+the+shared+database")); - - verify(userMetadataService, times(1)).updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); + public void onAuthenticationSuccessWithNullSessionThrowsServletException() throws IOException { + // Arrange + when(request.getSession(false)).thenReturn(null); + + // Act & Assert + try { + successHandler.onAuthenticationSuccess(request, response, oauth2Token); + fail("Expected ServletException"); + } catch (ServletException e) { + assertEquals("Session not available", e.getMessage()); + } + verifyNoInteractions(userMetadataService, session); + verify(response, never()).sendRedirect(anyString()); } -} + @Test + public void onAuthenticationSuccessWithServiceFailureThrowsIOException() throws IOException, ServletException { + // Arrange + when(oauth2Token.getAuthorizedClientRegistrationId()).thenReturn(CLIENT_REGISTRATION_ID); + when(oauth2Token.getPrincipal()).thenReturn(oauth2User); + when(oauth2User.getAttribute("sub")).thenReturn(PROVIDER_SUBJECT_ID); + when(oauth2User.getAttribute("name")).thenReturn(DISPLAY_NAME); + when(oauth2User.getAttribute("picture")).thenReturn(PROFILE_PICTURE_URL); + when(oauth2User.getAttribute("email")).thenReturn(EMAIL); + when(userMetadataService.updateOrInsertUserMetadata( + eq(PROVIDER_SUBJECT_ID), eq(CLIENT_REGISTRATION_ID), eq(DISPLAY_NAME), + eq(PROFILE_PICTURE_URL), eq(EMAIL))) + .thenThrow(new RuntimeException("Service failure")); + + // Act & Assert + try { + successHandler.onAuthenticationSuccess(request, response, oauth2Token); + fail("Expected IOException"); + } catch (RuntimeException e) { + assertEquals("Service failure", e.getMessage()); + } + verify(session).setAttribute(eq("clientRegistrationId"), eq(CLIENT_REGISTRATION_ID)); + verify(userMetadataService).updateOrInsertUserMetadata( + eq(PROVIDER_SUBJECT_ID), eq(CLIENT_REGISTRATION_ID), eq(DISPLAY_NAME), + eq(PROFILE_PICTURE_URL), eq(EMAIL)); + verify(session, never()).setAttribute(eq(SessionKeys.USER_METADATA), any()); + verify(session, never()).setAttribute(eq(SessionKeys.USER_ID), any()); + verify(response, never()).sendRedirect(anyString()); + } +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java index 7fa3460e9..e71ff922c 100644 --- a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java +++ b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java @@ -196,8 +196,8 @@ public void shouldThrowExceptionWhenLogoutRequestWasSentForInvalidSession() thro mockMvc.perform(post("/logout") .session(mockSession).cookie(sessionCookie)) .andExpect(status().isNotFound()) - .andExpect(jsonPath("$.errors[0].errorCode").value("RESIDENT-APP-046")) - .andExpect(jsonPath("$.errors[0].errorMessage").value("Exception occurred when invalidating the session from redis")); + .andExpect(jsonPath("$.errors[0].errorCode").value("user_logout_error")) + .andExpect(jsonPath("$.errors[0].errorMessage").value("Exception occurred when invalidating the session of a user")); } diff --git a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java index a02f70d6a..a50fca655 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java @@ -246,7 +246,7 @@ public void shouldThrowExceptionWhenCredentialNotFound() { walletCredentialService.fetchVerifiableCredential(walletId, credentialId, base64Key, locale) ); - assertEquals("Credential not found", exception.getMessage()); + assertEquals("resource_not_found --> The requested resource doesn’t exist.", exception.getMessage()); } @Test @@ -283,7 +283,7 @@ public void shouldThrowExceptionWhenIssuerConfigurationRetrievalFails() throws E when(encryptionDecryptionUtil.decryptCredential(encryptedCredential, base64Key)).thenReturn(decryptedCredential); when(issuersService.getIssuerDetails(issuerId)).thenThrow(new ApiNotAccessibleException()); - ApiNotAccessibleException exception = assertThrows(ApiNotAccessibleException.class, () -> + ExternalServiceUnavailableException exception = assertThrows(ExternalServiceUnavailableException.class, () -> walletCredentialService.fetchVerifiableCredential(walletId, credentialId, base64Key, locale) ); @@ -328,6 +328,6 @@ public void shouldThrowExceptionWhenPdfGenerationFails() throws Exception { walletCredentialService.fetchVerifiableCredential(walletId, credentialId, base64Key, locale) ); - assertEquals("PDF generation failed", exception.getMessage()); + assertEquals("server_unavailable --> The server is not reachable right now.", exception.getMessage()); } } diff --git a/src/test/java/io/mosip/mimoto/util/KeyGenerationUtilTest.java b/src/test/java/io/mosip/mimoto/util/KeyGenerationUtilTest.java index 08c84aaf6..810c83642 100644 --- a/src/test/java/io/mosip/mimoto/util/KeyGenerationUtilTest.java +++ b/src/test/java/io/mosip/mimoto/util/KeyGenerationUtilTest.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.util; +import io.mosip.mimoto.exception.KeyGenerationException; import io.mosip.mimoto.model.SigningAlgorithm; import org.junit.Test; @@ -13,7 +14,7 @@ public class KeyGenerationUtilTest { @Test - public void shouldGenerateEncryptionKeySuccessfully() throws Exception { + public void shouldGenerateEncryptionKeySuccessfully() { SecretKey key = KeyGenerationUtil.generateEncryptionKey("AES", 256); assertNotNull(key); @@ -57,8 +58,8 @@ public void shouldThrowExceptionForUnsupportedAlgorithm() throws Exception { KeyGenerationUtil.generateKeyPair(SigningAlgorithm.fromString("unsupportedAlgorithm")); } - @Test(expected = NoSuchAlgorithmException.class) - public void shouldThrowExceptionForUnsupportedEncryptionAlgorithm() throws Exception { + @Test(expected = KeyGenerationException.class) + public void shouldThrowExceptionForUnsupportedEncryptionAlgorithm() { KeyGenerationUtil.generateEncryptionKey("unsupportedAlgorithm", 256); } } From 6aeff84be2737848cc6e59402ec93af3cfea0216 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Thu, 24 Apr 2025 17:28:14 +0530 Subject: [PATCH 543/860] injiweb-1518 correcting error code when decryption fails Signed-off-by: Gurpreet41082 --- .../WalletCredentialsController.java | 12 +- .../DatabaseConnectionException.java | 19 -- .../mosip/mimoto/model/DatabaseOperation.java | 15 -- .../WalletCredentialsControllerTest.java | 2 +- ...ticationSuccessHandlerIntegrationTest.java | 181 ------------------ 5 files changed, 7 insertions(+), 222 deletions(-) delete mode 100644 src/main/java/io/mosip/mimoto/exception/DatabaseConnectionException.java delete mode 100644 src/main/java/io/mosip/mimoto/model/DatabaseOperation.java delete mode 100644 src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerIntegrationTest.java diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index 38974a050..203299d3b 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -87,13 +87,13 @@ public ResponseEntity downloadCredential(@PathV @ApiResponse(responseCode = "500", description = "Internal Server Error - Error occurred while fetching credentials from the database", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-054\", \"errorMessage\": \"Error occurred while fetching credentials for wallet\"}"))) @GetMapping public ResponseEntity> fetchAllCredentialsForGivenWallet(@PathVariable("walletId") String walletId, @RequestParam("locale") String locale, HttpSession httpSession) { - log.info("Fetching all credentials for walletId: {}", walletId); + log.info("Fetching all credentials for walletId: {}", walletId); - WalletUtil.validateWalletId(httpSession, walletId); - String base64EncodedWalletKey = WalletUtil.getSessionWalletKey(httpSession); + WalletUtil.validateWalletId(httpSession, walletId); + String base64EncodedWalletKey = WalletUtil.getSessionWalletKey(httpSession); - List credentials = walletCredentialService.fetchAllCredentialsForWallet(walletId, base64EncodedWalletKey, locale); - return ResponseEntity.status(HttpStatus.OK).body(credentials); + List credentials = walletCredentialService.fetchAllCredentialsForWallet(walletId, base64EncodedWalletKey, locale); + return ResponseEntity.status(HttpStatus.OK).body(credentials); } @@ -115,7 +115,7 @@ public ResponseEntity getVerifiableCredential(@PathVariable } catch (CredentialNotFoundException e) { return Utilities.getErrorResponseEntityWithoutWrapper(e, e.getErrorCode(), HttpStatus.NOT_FOUND, MediaType.APPLICATION_JSON); } catch (DecryptionException e) { - return Utilities.getErrorResponseEntityWithoutWrapper(e, e.getErrorCode(), HttpStatus.BAD_REQUEST, MediaType.APPLICATION_JSON); + return Utilities.getErrorResponseEntityWithoutWrapper(e, e.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); } catch (CorruptedEncryptedDataException e) { return Utilities.getErrorResponseEntityWithoutWrapper(e, e.getErrorCode(), HttpStatus.UNPROCESSABLE_ENTITY, MediaType.APPLICATION_JSON); } diff --git a/src/main/java/io/mosip/mimoto/exception/DatabaseConnectionException.java b/src/main/java/io/mosip/mimoto/exception/DatabaseConnectionException.java deleted file mode 100644 index 93ec576a4..000000000 --- a/src/main/java/io/mosip/mimoto/exception/DatabaseConnectionException.java +++ /dev/null @@ -1,19 +0,0 @@ -package io.mosip.mimoto.exception; - -import io.mosip.mimoto.model.DatabaseEntity; -import io.mosip.mimoto.model.DatabaseOperation; -import org.springframework.http.HttpStatus; - -public class DatabaseConnectionException extends BaseCheckedException { - private final HttpStatus status; - - public DatabaseConnectionException(String code, String message, DatabaseEntity entity, DatabaseOperation flow, HttpStatus status) { - super(code, String.format("%s while %s %s data %s the database", message, flow.getValue(), entity.getValue(), "fetching".equals(flow.getValue()) ? "from" : "into")); - this.status = status; - } - - public HttpStatus getStatus() { - return status; - } -} - diff --git a/src/main/java/io/mosip/mimoto/model/DatabaseOperation.java b/src/main/java/io/mosip/mimoto/model/DatabaseOperation.java deleted file mode 100644 index 5fd0b9684..000000000 --- a/src/main/java/io/mosip/mimoto/model/DatabaseOperation.java +++ /dev/null @@ -1,15 +0,0 @@ -package io.mosip.mimoto.model; - -public enum DatabaseOperation { - FETCHING("Fetching"), - STORING("Storing"); - private final String operation; - - DatabaseOperation(String operation) { - this.operation = operation; - } - - public String getValue() { - return operation; - } -} diff --git a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java index 08d39de8c..5621ab949 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java @@ -239,7 +239,7 @@ public void getVerifiableCredentialDecryptionExceptionReturnsBadRequest() throws .getVerifiableCredential(WALLET_ID, CREDENTIAL_ID, LOCALE, "inline", httpSession); - assertEquals(HttpStatus.BAD_REQUEST, response.getStatusCode()); + assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, response.getHeaders().getContentType()); walletUtilMock.verify(() -> WalletUtil.validateWalletId(httpSession, WALLET_ID)); walletUtilMock.verify(() -> WalletUtil.getSessionWalletKey(httpSession)); diff --git a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerIntegrationTest.java b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerIntegrationTest.java deleted file mode 100644 index 0c0a74401..000000000 --- a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerIntegrationTest.java +++ /dev/null @@ -1,181 +0,0 @@ -package io.mosip.mimoto.security.oauth2; - -import io.mosip.mimoto.config.Config; -import io.mosip.mimoto.exception.GlobalExceptionHandler; -import io.mosip.mimoto.service.LogoutService; -import io.mosip.mimoto.service.UserMetadataService; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mockito; -import org.mockito.MockitoAnnotations; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.dao.DataAccessResourceFailureException; -import org.springframework.mock.web.MockHttpSession; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.oauth2.client.endpoint.OAuth2AccessTokenResponseClient; -import org.springframework.security.oauth2.client.endpoint.OAuth2AuthorizationCodeGrantRequest; -import org.springframework.security.oauth2.client.registration.ClientRegistration; -import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository; -import org.springframework.security.oauth2.client.userinfo.OAuth2UserRequest; -import org.springframework.security.oauth2.client.userinfo.OAuth2UserService; -import org.springframework.security.oauth2.client.web.HttpSessionOAuth2AuthorizationRequestRepository; -import org.springframework.security.oauth2.core.AuthorizationGrantType; -import org.springframework.security.oauth2.core.OAuth2AccessToken; -import org.springframework.security.oauth2.core.endpoint.OAuth2AccessTokenResponse; -import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationRequest; -import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames; -import org.springframework.security.oauth2.core.user.DefaultOAuth2User; -import org.springframework.security.oauth2.core.user.OAuth2User; -import org.springframework.session.SessionRepository; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; - -import java.util.Collections; -import java.util.Map; -import java.util.UUID; - -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.redirectedUrl; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - -@WebMvcTest({OAuth2AuthenticationSuccessHandler.class, GlobalExceptionHandler.class}) -@ContextConfiguration(classes = {Config.class}) // Include any necessary configuration -@TestPropertySource(properties = "mosip.inji.web.url=https://injiweb.dev1.mosip.net") -@EnableWebMvc -public class OAuth2AuthenticationSuccessHandlerIntegrationTest { - - @Autowired - private MockMvc mockMvc; - @MockBean - private OAuth2AccessTokenResponseClient accessTokenResponseClient; - - @MockBean - private OAuth2AuthenticationFailureHandler oAuth2AuthenticationFailureHandler; - - @MockBean - private SessionRepository sessionRepository; - - @MockBean - private LogoutService logoutService; - - @MockBean - private UserMetadataService userMetadataService; - - @MockBean - private ClientRegistrationRepository clientRegistrationRepository; - - @MockBean - private OAuth2UserService oauth2UserService; - - private String providerSubjectId, identityProvider, displayName, profilePictureUrl, email, userId; - - MockHttpSession mockSession; - - @Before - public void setUp() { - MockitoAnnotations.openMocks(this); - // MockitoAnnotations.initMocks(this); - providerSubjectId = "123456789"; - identityProvider = "google"; - displayName = "user_123"; - profilePictureUrl = "https://example.com/profile.jpg"; - email = "user.123@example.com"; - userId = UUID.randomUUID().toString(); - - ClientRegistration googleClient = ClientRegistration.withRegistrationId("google") - .clientId("test-client-id") - .clientSecret("test-client-secret") - .authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE) - .redirectUri("https://injiweb.dev1.mosip.net/login/oauth2/callback/google") - .tokenUri("https://oauth2.googleapis.com/token") - .authorizationUri("https://accounts.google.com/o/oauth2/auth") - .userInfoUri("https://www.googleapis.com/oauth2/v3/userinfo") - .clientName("Google") - .build(); - - when(clientRegistrationRepository.findByRegistrationId("google")).thenReturn(googleClient); - - OAuth2AuthorizationCodeGrantRequest grantRequest = Mockito.any(); - OAuth2AccessTokenResponse tokenResponse = OAuth2AccessTokenResponse.withToken("mock-access-token") - .tokenType(OAuth2AccessToken.TokenType.BEARER) - .expiresIn(3600) - .build(); - - when(accessTokenResponseClient.getTokenResponse(grantRequest)).thenReturn(tokenResponse); - OAuth2User mockOAuth2User = new DefaultOAuth2User( - Collections.singleton(new SimpleGrantedAuthority("ROLE_USER")), - Map.of( - "sub", providerSubjectId, - "name", displayName, - "email", email, - "picture", profilePictureUrl - ), - "sub" - ); - when(oauth2UserService.loadUser(any(OAuth2UserRequest.class))) - .thenReturn(mockOAuth2User); - - OAuth2AuthorizationRequest authRequest = OAuth2AuthorizationRequest.authorizationCode() - .authorizationUri("https://accounts.google.com/o/oauth2/auth") - .clientId("test-client-id") - .redirectUri("https://yourapp.com/oauth2/callback/google") - .scopes(Collections.singleton("profile")) - .state("test-state") - .attributes(Map.of(OAuth2ParameterNames.REGISTRATION_ID, "google")) - .build(); - - mockSession = new MockHttpSession(); - mockSession.setAttribute(HttpSessionOAuth2AuthorizationRequestRepository.class.getName() + ".AUTHORIZATION_REQUEST", authRequest); - } - - @Test - public void shouldReturnRedirectUrlWithSuccessStatusQueryParamIfLoginIsSuccessful() throws Exception { - mockMvc.perform(get("/oauth2/callback/google") - .session(mockSession) - .param("code", "test-authorization-code") - .param("state", "test-state")) - .andExpect(status().is3xxRedirection()) - .andExpect(redirectedUrl("https://injiweb.dev1.mosip.net/login?status=success")); - } - - @Test - public void shouldSendCustomErrorInRedirectUrlWhenLoginIsSuccessfulButAnErrorOccurredInAuthenticationSuccessHandler() throws Exception { - when(userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email)) - .thenThrow(new RuntimeException("Failed to store the user metadata")); - - mockMvc.perform(get("/oauth2/callback/google") - .session(mockSession) - .param("code", "test-authorization-code") - .param("state", "test-state")) - .andExpect(status().is3xxRedirection()) - .andExpect(redirectedUrl("https://injiweb.dev1.mosip.net/login?status=error&error_code=RESIDENT-APP-048&error_message=Failed+to+store+the+User+metadata+into+database")); - - verify(userMetadataService, times(1)).updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); - } - - @Test - public void shouldSendCustomErrorInRedirectUrlWhenLoginIsSuccessfulButDatabaseIsNotConnectedToStoreUserData() throws Exception { - when(userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email)) - .thenThrow(new DataAccessResourceFailureException("Failed to connect to the database")); - - mockMvc.perform(get("/oauth2/callback/google") - .session(mockSession) - .param("code", "test-authorization-code") - .param("state", "test-state")) - .andExpect(status().is3xxRedirection()) - .andExpect(redirectedUrl("https://injiweb.dev1.mosip.net/login?status=error&error_code=RESIDENT-APP-047&error_message=Failed+to+connect+to+the+shared+database")); - - verify(userMetadataService, times(1)).updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); - } -} - From 242ad6b18a7be1928ef3b2e7cf818640d41a2f19 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Fri, 25 Apr 2025 09:34:09 +0530 Subject: [PATCH 544/860] injiweb-1518 bring spring-security-test dependency back Signed-off-by: Gurpreet41082 --- pom.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pom.xml b/pom.xml index eef84b75f..31b76ace1 100644 --- a/pom.xml +++ b/pom.xml @@ -192,6 +192,11 @@ test + + org.springframework.security + spring-security-core + test + org.springframework.boot spring-boot-starter-data-jpa From 4a421ee4037cd667f7c0854a7a1a89c7fc4a6f34 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Fri, 25 Apr 2025 10:18:01 +0530 Subject: [PATCH 545/860] injiweb-1518 fixed redis timeout Signed-off-by: Gurpreet41082 --- .../mosip/mimoto/exception/ErrorConstants.java | 1 + .../exception/GlobalExceptionHandler.java | 18 +++++++++++++----- .../resources/application-default.properties | 1 + .../resources/application-local.properties | 1 + 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java b/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java index 288082e91..999300f96 100644 --- a/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java +++ b/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java @@ -29,6 +29,7 @@ public enum ErrorConstants { LOGIN_SESSION_INVALIDATE_EXCEPTION("user_logout_error", "Exception occurred when invalidating the session of a user"), SESSION_EXPIRED_OR_INVALID( "session_invalid_or_expired", "User session is missing or expired. Please log in again."), DATABASE_CONNECTION_EXCEPTION( "database_unavailable", "Failed to connect to the database"), + REDIS_CONNECTION_EXCEPTION( "redis_unavailable", "Failed to connect to the redis"), ENCRYPTION_FAILED( "encryption_failed", "Failed to encrypt the data"), DECRYPTION_FAILED( "decryption_failed", "Failed to decrypt the data"), SCHEMA_MISMATCH( "schema_mismatch", "Failed to restored the stored data"), diff --git a/src/main/java/io/mosip/mimoto/exception/GlobalExceptionHandler.java b/src/main/java/io/mosip/mimoto/exception/GlobalExceptionHandler.java index a144f845f..81314f151 100644 --- a/src/main/java/io/mosip/mimoto/exception/GlobalExceptionHandler.java +++ b/src/main/java/io/mosip/mimoto/exception/GlobalExceptionHandler.java @@ -3,6 +3,7 @@ import io.mosip.mimoto.dto.ErrorDTO; import lombok.extern.slf4j.Slf4j; import org.springframework.dao.DataAccessResourceFailureException; +import org.springframework.data.redis.RedisConnectionFailureException; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; @@ -16,28 +17,35 @@ public class GlobalExceptionHandler { @ExceptionHandler(Throwable.class) // Catch-all for unexpected exceptions @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) public ErrorDTO handleGenericException(Exception ex) { - log.error("An unexpected error occurred: {}", ex.getMessage(), ex); + log.error("An unexpected error occurred: ", ex); return new ErrorDTO(ErrorConstants.INTERNAL_SERVER_ERROR.getErrorCode(), ErrorConstants.INTERNAL_SERVER_ERROR.getErrorMessage()); } - @ExceptionHandler(DataAccessResourceFailureException.class) // Catch-all for unexpected exceptions + @ExceptionHandler(DataAccessResourceFailureException.class) @ResponseStatus(HttpStatus.SERVICE_UNAVAILABLE) public ErrorDTO handleDatabaseException(Exception ex) { - log.error("Database error occurred: {}", ex.getMessage(), ex); + log.error("Database error occurred:", ex); return new ErrorDTO(ErrorConstants.DATABASE_CONNECTION_EXCEPTION.getErrorCode(), ErrorConstants.DATABASE_CONNECTION_EXCEPTION.getErrorMessage()); } + @ExceptionHandler(RedisConnectionFailureException.class) + @ResponseStatus(HttpStatus.SERVICE_UNAVAILABLE) + public ErrorDTO handleRedisConnectionException(Exception ex) { + log.error("Redis error occurred: ", ex); + return new ErrorDTO(ErrorConstants.REDIS_CONNECTION_EXCEPTION.getErrorCode(), ErrorConstants.REDIS_CONNECTION_EXCEPTION.getErrorMessage()); + } + @ExceptionHandler(ExternalServiceUnavailableException.class) @ResponseStatus(HttpStatus.SERVICE_UNAVAILABLE) public ErrorDTO handleExternalServiceUnavailable(ExternalServiceUnavailableException ex) { - log.error("Connection to external service failed: {}", ex.getMessage(), ex); + log.error("Connection to external service failed: ", ex); return new ErrorDTO(ex.getErrorCode(), ex.getMessage()); } @ExceptionHandler(InvalidRequestException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) public ErrorDTO handleInvalidRequest(InvalidRequestException ex) { - log.error("Invalid request parameters: {}", ex.getMessage(), ex); + log.error("Invalid request parameters: ", ex); return new ErrorDTO(ex.getErrorCode(), ex.getMessage()); } diff --git a/src/main/resources/application-default.properties b/src/main/resources/application-default.properties index 6b40cd34b..03906705e 100644 --- a/src/main/resources/application-default.properties +++ b/src/main/resources/application-default.properties @@ -43,6 +43,7 @@ spring.data.redis.port=${redis.port} spring.data.redis.password=${redis.password} server.servlet.session.timeout=30m spring.session.redis.namespace=injiweb:session: +spring.data.redis.connect-timeout=10s mosip.security.ignore-auth-urls=/safetynet/**,/actuator/**,/swagger-ui/**,/v3/api-docs/**,\ /allProperties,/credentials/**,/credentialshare/**,/binding-otp,/wallet-binding,/get-token/**,\ diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index e02d5839c..c8d64377e 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -308,6 +308,7 @@ spring.session.store-type=redis spring.data.redis.host=localhost spring.data.redis.port=6379 spring.data.redis.password= +spring.data.redis.connect-timeout=10s server.servlet.session.timeout=30m spring.session.redis.namespace=injiweb:session: spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect \ No newline at end of file From a2122f3aacac97d20077efdb802e3e5ab89981fa Mon Sep 17 00:00:00 2001 From: PRAFUL RAKHADE <99539100+prafulrakhade@users.noreply.github.com> Date: Fri, 25 Apr 2025 10:47:46 +0530 Subject: [PATCH 546/860] [MOSIP-39939] & [MOSIP-41033], Added volume for encryptionkeystore.p12 also added redis deployment script for mimoto. Signed-off-by: techno-467 --- deploy/README.md | 8 ++- deploy/mimoto/README.md | 5 +- deploy/mimoto/install.sh | 73 ++++++++++++++++++------ deploy/mimoto/values.yaml | 25 +++++++++ deploy/redis/README.md | 13 +++++ deploy/redis/delete.sh | 31 ++++++++++ deploy/redis/install.sh | 63 +++++++++++++++++++++ deploy/redis/redis-config.yaml | 10 ++++ helm/mimoto/templates/deployment.yaml | 81 +++++++++++++++++---------- helm/mimoto/templates/pvc.yaml | 40 +++++++++++-- helm/mimoto/values.yaml | 68 ++++++++++++++-------- 11 files changed, 339 insertions(+), 78 deletions(-) create mode 100644 deploy/mimoto/values.yaml create mode 100644 deploy/redis/README.md create mode 100755 deploy/redis/delete.sh create mode 100755 deploy/redis/install.sh create mode 100644 deploy/redis/redis-config.yaml diff --git a/deploy/README.md b/deploy/README.md index 812d74eb8..1f676c70c 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -1,8 +1,14 @@ # Install Onboarder + +* Execute redis install script +``` +cd ../redis +./install.sh +``` * Execute Onboarder install script ``` - cd ../partner-onboarder + cd partner-onboarder ./install.sh ``` * During the execution of the `install.sh` script, a prompt appears requesting information for the S3 bucket, including its name and URL. diff --git a/deploy/mimoto/README.md b/deploy/mimoto/README.md index 360296351..d88adc4f0 100644 --- a/deploy/mimoto/README.md +++ b/deploy/mimoto/README.md @@ -8,4 +8,7 @@ Helm chart for installing MOSIP mimoto Application. $ helm repo add mosip https://mosip.github.io $ helm install my-release mosip/mimoto ``` - +* Before installing Mimoto, please ensure that the database host and port are correctly configured in the values.yaml file. +```console +install.sh +``` \ No newline at end of file diff --git a/deploy/mimoto/install.sh b/deploy/mimoto/install.sh index 702394d30..a44707fe6 100755 --- a/deploy/mimoto/install.sh +++ b/deploy/mimoto/install.sh @@ -7,7 +7,8 @@ if [ $# -ge 1 ] ; then fi NS=injiweb -MIMOTO_CHART_VERSION=0.0.1-develop +CHART_VERSION=0.0.1-develop +KEYGEN_CHART_VERSION=1.3.0-beta.2 echo Create $NS namespace kubectl create ns $NS @@ -22,8 +23,12 @@ function installing_mimoto() { COPY_UTIL=../copy_cm_func.sh $COPY_UTIL configmap inji-stack-config default $NS $COPY_UTIL configmap artifactory-share artifactory $NS - $COPY_UTIL configmap config-server-share config-server $NS + $COPY_UTIL configmap config-server1 config-server $NS + $COPY_UTIL configmap redis-config redis $NS + echo Copy Secrets + $COPY_UTIL secret redis redis $NS + $COPY_UTIL secret db-common-secrets postgres $NS echo "Do you have public domain & valid SSL? (Y/n) " echo "Y: if you have public domain & valid ssl certificate" @@ -40,27 +45,61 @@ function installing_mimoto() { fi echo "Copy secrets to config-server namespace" - ../copy_cm_func.sh secret mimoto-wallet-binding-partner-api-key injiweb config-server - ../copy_cm_func.sh secret mimoto-oidc-partner-clientid injiweb config-server +# ../copy_cm_func.sh secret mimoto-wallet-binding-partner-api-key injiweb config-server +# ../copy_cm_func.sh secret mimoto-oidc-partner-clientid injiweb config-server echo Updating mimoto-oidc-keystore-password value - ../copy_cm_func.sh secret mimoto-oidc-keystore-password injiweb config-server - - kubectl -n config-server set env --keys=mimoto-wallet-binding-partner-api-key --from secret/mimoto-wallet-binding-partner-api-key deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ - kubectl -n config-server set env --keys=mimoto-oidc-partner-clientid --from secret/mimoto-oidc-partner-clientid deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ - kubectl -n config-server set env --keys=mimoto-oidc-keystore-password --from secret/mimoto-oidc-keystore-password deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ - - kubectl -n config-server get deploy -o name | xargs -n1 -t kubectl -n config-server rollout status - - echo "Please share relevant google client id " - read -p "" clientId +# ../copy_cm_func.sh secret mimoto-oidc-keystore-password injiweb config-server + +# kubectl -n config-server set env --keys=mimoto-wallet-binding-partner-api-key --from secret/mimoto-wallet-binding-partner-api-key deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ +# kubectl -n config-server set env --keys=mimoto-oidc-partner-clientid --from secret/mimoto-oidc-partner-clientid deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ +# kubectl -n config-server set env --keys=mimoto-oidc-keystore-password --from secret/mimoto-oidc-keystore-password deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ + +# kubectl -n config-server get deploy -o name | xargs -n1 -t kubectl -n config-server rollout status + + default_enable_volume=true # Default to true for mimoto + read -p "Would you like to enable volume (true/false) : [ default : true ] : " enable_volume + enable_volume=${enable_volume:-$default_enable_volume} + MIMOTO_KEYGEN_HELM_ARGS='--set springConfigNameEnv="mimoto"' + MIMOTO_HELM_ARGS='' + + if [[ $enable_volume == 'true' ]]; then + default_volume_size=200M + read -p "Provide the size for volume [ default : 200M ]" volume_size + volume_size=${volume_size:-$default_volume_size} + volume_mount_path='/home/mosip/encryption' + PVC_CLAIM_NAME='mimoto-keygen-keymanager' + + # Check if PVC already exists + if kubectl -n $NS get pvc "$PVC_CLAIM_NAME" >/dev/null 2>&1; then + echo "PVC $PVC_CLAIM_NAME already exists. Skipping keygen job." + # Verify if the keystore file exists in the PVC (this would require a temporary pod to check) + # For simplicity, we'll assume if PVC exists, the keystore is there + else + echo "Creating new PVC and running keygen job" + MIMOTO_KEYGEN_HELM_ARGS="--set persistence.enabled=true \ + --set volumePermissions.enabled=true \ + --set persistence.size=$volume_size \ + --set persistence.mountDir=\"$volume_mount_path\" \ + --set springConfigNameEnv='mimoto' \ + --set persistence.pvc_claim_name=\"$PVC_CLAIM_NAME\" \ + --set keysDir=\"$volume_mount_path\" \ + --set keyStore.fileName=\"encryptionkeystore.p12\" \ + --set skipIfFileExists=true" # Add this flag to skip if file exists + + echo "MIMOTO KEYGEN HELM ARGS $MIMOTO_KEYGEN_HELM_ARGS" + echo "Running mimoto keygen" + helm -n $NS install mimoto-keygen mosip/keygen $MIMOTO_KEYGEN_HELM_ARGS --wait --wait-for-jobs --version $KEYGEN_CHART_VERSION + fi + fi + echo "Please proceed with generating the Google Client ID and Secret Key required for integration." + read -p "Please enter the Google Client ID: " clientId if [ -z "$clientId" ]; then echo "'clientId' was not provided; EXITING;" exit 1; fi - echo "Please share relevant google secret key" - read -p "" secretKey + read -p "Please enter the Google Secret Key: " secretKey if [ -z "$secretKey" ]; then echo "'secretKey' was not provided; EXITING;" @@ -69,7 +108,7 @@ function installing_mimoto() { echo Installing mimoto - helm -n $NS install mimoto mosip/mimoto --version $MIMOTO_CHART_VERSION $ENABLE_INSECURE \ + helm -n $NS install mimoto mosip/mimoto --version $CHART_VERSION -f values.yaml $ENABLE_INSECURE \ --set mimoto.secrets.google-client.MOSIP_INJIWEB_GOOGLE_CLIENT_ID="$clientId" \ --set mimoto.secrets.google-client.MOSIP_INJIWEB_GOOGLE_CLIENT_SECRET="$secretKey" diff --git a/deploy/mimoto/values.yaml b/deploy/mimoto/values.yaml new file mode 100644 index 000000000..ffab8e700 --- /dev/null +++ b/deploy/mimoto/values.yaml @@ -0,0 +1,25 @@ +extraEnvVars: + - name: REDIS_HOST + valueFrom: + configMapKeyRef: + name: redis-config + key: redis-host + - name: REDIS_PORT + valueFrom: + configMapKeyRef: + name: redis-config + key: redis-port + - name: REDIS_PASSWORD + valueFrom: + secretKeyRef: + name: redis + key: redis-password + - name: DB_DBUSER_PASSWORD + valueFrom: + secretKeyRef: + name: db-common-secrets + key: db-dbuser-password + - name: MOSIP_MIMOTO_DATABASE_HOSTNAME + value: postgres-postgresql.postgres + - name: MOSIP_MIMOTO_DATABASE_PORT + value: "5432" diff --git a/deploy/redis/README.md b/deploy/redis/README.md new file mode 100644 index 000000000..bd81c8f73 --- /dev/null +++ b/deploy/redis/README.md @@ -0,0 +1,13 @@ +# Redis + +* The open source, in-memory data store used by millions of developers as a database, cache, streaming engine, and message broker. +* In mimoto we are using Redis as a cache store. + +## Install +``` +$ ./install.sh +``` +## Delete +``` +$ ./delete.sh +``` diff --git a/deploy/redis/delete.sh b/deploy/redis/delete.sh new file mode 100755 index 000000000..79199627d --- /dev/null +++ b/deploy/redis/delete.sh @@ -0,0 +1,31 @@ +#!/bin/bash +# Deleted Redis helm chart +## Usage: ./delete.sh [kubeconfig] + +if [ $# -ge 1 ] ; then + export KUBECONFIG=$1 +fi + +function Deleting_redis() { + NS=redis + while true; do + read -p "Are you sure you want to delete redis helm chart? Y/n ?" yn + if [ $yn = "Y" ] + then + helm -n $NS delete redis + echo Deleted Redis services. + break + else + break + fi + done + return 0 +} + +# set commands for error handling. +set -e +set -o errexit ## set -e : exit the script if any statement returns a non-true return value +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errtrace # trace ERR through 'time command' and other functions +set -o pipefail # trace ERR through pipes +Deleting_redis # calling function diff --git a/deploy/redis/install.sh b/deploy/redis/install.sh new file mode 100755 index 000000000..9bf297b73 --- /dev/null +++ b/deploy/redis/install.sh @@ -0,0 +1,63 @@ +#!/bin/bash +# Installs redis helm chart +## Usage: ./install.sh [kubeconfig] + +if [ $# -ge 1 ] ; then + export KUBECONFIG=$1 +fi + +function installing_redis() { + + while true; do + read -p "Do you want to install Redis in redis namespace? (y/n) :" ans + if [ "$ans" = "n" ] || [ "$ans" = "N" ]; then + read -p "Please confirm if redis-config is already present in redis namespace. (y/n):" response + if [ "$response" = "Y" ] || [ "$response" = "y" ]; then + echo "Skipping Redis installation as well as redis-config creation." + exit 1 + elif [ "$response" = "N" ] || [ "$response" = "n" ]; then + echo "Skipping Redis installation and continuing with redis-config creation." + kubectl apply -f redis-config.yaml + echo "redis-config configmap creation completed." + exit 1 + else + echo "Incorrect response. Please re-execute the redis installation script." + exit 1 + fi + elif [ "$ans" = "y" ] || [ "$ans" = "Y" ]; then + break + else + echo "Please provide a correct option (Y or N)" + fi + done + + NS=redis + CHART_VERSION=17.3.14 + + echo Create $NS namespace + kubectl create ns $NS || true + + echo Istio label + kubectl label ns $NS istio-injection=enabled --overwrite + + echo Updating helm repos + helm repo add bitnami https://charts.bitnami.com/bitnami + helm repo update + + echo Installing redis + helm -n $NS install redis bitnami/redis --wait --version $CHART_VERSION + + echo Installed redis service + + kubectl apply -f redis-config.yaml + + return 0 +} + +# set commands for error handling. +set -e +set -o errexit ## set -e : exit the script if any statement returns a non-true return value +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errtrace # trace ERR through 'time command' and other functions +set -o pipefail # trace ERR through pipes +installing_redis # calling function diff --git a/deploy/redis/redis-config.yaml b/deploy/redis/redis-config.yaml new file mode 100644 index 000000000..c828fb86e --- /dev/null +++ b/deploy/redis/redis-config.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: redis-config + namespace: redis + labels: + app: redis +data: + redis-host: "redis-master-0.redis-headless.redis.svc.cluster.local" + redis-port: "6379" diff --git a/helm/mimoto/templates/deployment.yaml b/helm/mimoto/templates/deployment.yaml index 9ca07eb7f..21225ee56 100644 --- a/helm/mimoto/templates/deployment.yaml +++ b/helm/mimoto/templates/deployment.yaml @@ -8,8 +8,8 @@ metadata: name: {{ template "common.names.fullname" . }} annotations: {{- if .Values.commonAnnotations }} - {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} - {{- end }} + {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} + {{- end }} spec: replicas: {{ .Values.replicaCount }} {{- if .Values.updateStrategy }} @@ -21,8 +21,8 @@ spec: metadata: annotations: {{- if or .Values.podAnnotations .Values.metrics.enabled }} - {{- include "mimoto.podAnnotations" . | nindent 8 }} - {{- end }} + {{- include "mimoto.podAnnotations" . | nindent 8 }} + {{- end }} labels: {{- include "common.labels.standard" . | nindent 8 }} {{- if .Values.podLabels }} {{- include "common.tplvalues.render" (dict "value" .Values.podLabels "context" $) | nindent 8 }} @@ -51,37 +51,50 @@ spec: priorityClassName: {{ .Values.priorityClassName | quote }} {{- end }} {{- if .Values.podSecurityContext.enabled }} - securityContext: {{- omit .Values.podSecurityContext "enabled" | toYaml | nindent 8 }} + securityContext: + {{- toYaml .Values.podSecurityContext | nindent 8 }} {{- end }} initContainers: - {{- if and .Values.volumePermissions.enabled .Values.persistence.enabled }} + {{- if and .Values.volumePermissions.enabled .Values.extraVolumeMounts }} - name: volume-permissions - image: {{ include "mimoto.volumePermissions.image" . }} + image: "{{ .Values.volumePermissions.image.registry }}/{{ .Values.volumePermissions.image.repository }}:{{ .Values.volumePermissions.image.tag }}" imagePullPolicy: {{ .Values.volumePermissions.image.pullPolicy | quote }} command: - - %%commands%% + - /bin/bash + - -c + - | + {{- range .Values.extraVolumeMounts }} + mkdir -p {{ .mountPath }} + chown -R {{ $.Values.podSecurityContext.fsGroup }}:{{ $.Values.podSecurityContext.fsGroup }} {{ .mountPath }} + chmod -R 775 {{ .mountPath }} + {{- end }} securityContext: runAsUser: 0 {{- if .Values.volumePermissions.resources }} resources: {{- toYaml .Values.volumePermissions.resources | nindent 12 }} {{- end }} volumeMounts: - - name: foo - mountPath: bar + {{- toYaml .Values.extraVolumeMounts | nindent 12 }} {{- end }} {{- if .Values.enable_insecure }} - {{- include "common.tplvalues.render" (dict "value" .Values.initContainers "context" $) | nindent 8 }} + {{- include "common.tplvalues.render" (dict "value" .Values.initContainers "context" $) | nindent 8 }} {{- end }} containers: - - name: mimoto + - name: {{ .Chart.Name }} image: {{ template "mimoto.image" . }} imagePullPolicy: {{ .Values.image.pullPolicy }} {{- if .Values.lifecycleHooks }} lifecycle: {{- include "common.tplvalues.render" (dict "value" .Values.lifecycleHooks "context" $) | nindent 12 }} {{- end }} {{- if .Values.containerSecurityContext.enabled }} - securityContext: {{- omit .Values.containerSecurityContext "enabled" | toYaml | nindent 12 }} - {{- end }} + securityContext: + runAsUser: {{ .Values.containerSecurityContext.runAsUser }} + runAsNonRoot: {{ .Values.containerSecurityContext.runAsNonRoot }} + {{- with .Values.containerSecurityContext.capabilities }} + capabilities: + {{- toYaml . | nindent 14 }} + {{- end }} + {{- end }} {{- if .Values.command }} command: {{- include "common.tplvalues.render" (dict "value" .Values.command "context" $) | nindent 12 }} {{- end }} @@ -90,27 +103,27 @@ spec: {{- end }} env: - name: container_user - value: {{ .Values.containerSecurityContext.runAsUser }} + value: {{ .Values.containerSecurityContext.runAsUser | quote }} - name: JDK_JAVA_OPTIONS - value: {{ .Values.additionalResources.javaOpts }} + value: {{ .Values.additionalResources.javaOpts | quote }} - name: KEYSTORE_P12_PATH - value: {{ .Values.volumes.secrets.mimotooidc.path }} + value: {{ .Values.volumes.secrets.mimotooidc.path | quote }} {{- if .Values.extraEnvVars }} {{- include "common.tplvalues.render" (dict "value" .Values.extraEnvVars "context" $) | nindent 12 }} {{- end }} envFrom: {{- if .Values.extraEnvVarsCM }} - {{- range .Values.extraEnvVarsCM }} - - configMapRef: - name: {{ . }} - {{- end }} - {{- end }} - {{- if .Values.extraEnvVarsSecret }} - {{- range .Values.extraEnvVarsSecret }} - - secretRef: - name: {{ . }} - {{- end }} - {{- end }} + {{- range .Values.extraEnvVarsCM }} + - configMapRef: + name: {{ . | quote }} + {{- end }} + {{- end }} + {{- if .Values.extraEnvVarsSecret }} + {{- range .Values.extraEnvVarsSecret }} + - secretRef: + name: {{ . | quote }} + {{- end }} + {{- end }} volumeMounts: - name: landing-folder mountPath: {{ .Values.persistence.mountDir }} @@ -125,6 +138,9 @@ spec: name: cacerts subPath: cacerts {{- end }} + {{- with .Values.extraVolumeMounts }} + {{- toYaml . | nindent 12 }} + {{- end }} ports: [] {{- if .Values.resources }} resources: {{- toYaml .Values.resources | nindent 12 }} @@ -144,9 +160,9 @@ spec: {{- else if .Values.customReadinessProbe }} readinessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.customReadinessProbe "context" $) | nindent 12 }} {{- end }} - {{- if .Values.sidecars }} - {{- include "common.tplvalues.render" ( dict "value" .Values.sidecars "context" $) | nindent 8 }} - {{- end }} + {{- if .Values.sidecars }} + {{- include "common.tplvalues.render" ( dict "value" .Values.sidecars "context" $) | nindent 8 }} + {{- end }} volumes: - name: landing-folder {{- if .Values.persistence.enabled }} @@ -166,3 +182,6 @@ spec: - name: cacerts emptyDir: {} {{- end }} + {{- if .Values.extraVolumes }} + {{- toYaml .Values.extraVolumes | nindent 8 }} + {{- end }} \ No newline at end of file diff --git a/helm/mimoto/templates/pvc.yaml b/helm/mimoto/templates/pvc.yaml index 7db9bc8a7..6fb903db1 100644 --- a/helm/mimoto/templates/pvc.yaml +++ b/helm/mimoto/templates/pvc.yaml @@ -10,17 +10,17 @@ metadata: {{- end }} annotations: {{- if .Values.commonAnnotations }} - {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} - {{- end }} - "helm.sh/resource-policy": keep + {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} + {{- end }} + "helm.sh/resource-policy": keep spec: accessModes: {{- if not (empty .Values.persistence.accessModes) }} {{- range .Values.persistence.accessModes }} - - {{ . | quote }} + - {{ . | quote }} {{- end }} {{- else }} - - {{ .Values.persistence.accessMode | quote }} + - {{ .Values.persistence.accessMode | quote }} {{- end }} resources: requests: @@ -29,4 +29,32 @@ spec: {{- if .Values.persistence.dataSource }} dataSource: {{- include "common.tplvalues.render" (dict "value" .Values.persistence.dataSource "context" $) | nindent 4 }} {{- end }} -{{- end }} + {{- end }} + {{- if .Values.extraVolumes }} + {{- range .Values.extraVolumes }} + {{- if and (eq .kind "persistentVolumeClaim") (eq .name "mimoto-encryption-volume") (not .persistentVolumeClaim.claimName) }} +--- +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: mimoto-keygen-keymanager + namespace: {{ $.Release.Namespace | quote }} + labels: {{- include "common.labels.standard" $ | nindent 4 }} + {{- if $.Values.commonLabels }} + {{- include "common.tplvalues.render" ( dict "value" $.Values.commonLabels "context" $ ) | nindent 4 }} + {{- end }} + annotations: + {{- if $.Values.commonAnnotations }} + {{- include "common.tplvalues.render" ( dict "value" $.Values.commonAnnotations "context" $ ) | nindent 4 }} + {{- end }} + "helm.sh/resource-policy": keep +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: {{ $.Values.encryption.volume.size | default "1Gi" | quote }} + {{- include "common.storage.class" (dict "persistence" $.Values.persistence "global" $.Values.global) | nindent 2 }} + {{- end }} + {{- end }} + {{- end }} \ No newline at end of file diff --git a/helm/mimoto/values.yaml b/helm/mimoto/values.yaml index f41347ac2..bfd9ced36 100644 --- a/helm/mimoto/values.yaml +++ b/helm/mimoto/values.yaml @@ -32,7 +32,7 @@ replicaCount: 1 service: type: ClusterIP port: 80 - containerPort: 8088 + containerPort: 8099 ## loadBalancerIP for the SuiteCRM Service (optional, cloud specific) ## ref: http://kubernetes.io/docs/user-guide/services/#type-loadbalancer ## @@ -53,7 +53,7 @@ service: image: registry: docker.io - repository: mosipqa/mimoto + repository: mosipdev/mimoto tag: develop ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' @@ -69,14 +69,14 @@ image: ## Configure extra options for liveness and readiness probes ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#configure-probes -## + ## TODO: enable probes once health urls are available startupProbe: enabled: true httpGet: path: /v1/mimoto/actuator/health - port: 8088 + port: 8099 initialDelaySeconds: 0 periodSeconds: 10 timeoutSeconds: 5 @@ -87,7 +87,7 @@ livenessProbe: enabled: true httpGet: path: /v1/mimoto/actuator/health - port: 8088 + port: 8099 initialDelaySeconds: 120 periodSeconds: 10 timeoutSeconds: 5 @@ -98,7 +98,7 @@ readinessProbe: enabled: true httpGet: path: /v1/mimoto/actuator/health - port: 8088 + port: 8099 initialDelaySeconds: 30 periodSeconds: 10 timeoutSeconds: 5 @@ -126,11 +126,11 @@ resources: # resources, such as Minikube. If you do want to specify resources, uncomment the following # lines, adjust them as necessary, and remove the curly braces after 'resources:'. limits: - cpu: 500m - memory: 3000Mi + cpu: 1000m + memory: 5000Mi requests: - cpu: 100m - memory: 1000Mi + cpu: 200m + memory: 2000Mi additionalResources: ## Specify any JAVA_OPTS string here. These typically will be specified in conjunction with above resources @@ -236,11 +236,30 @@ updateStrategy: ## Additional environment variables to set ## Example: -## extraEnvVars: -## - name: FOO -## value: "bar" -## extraEnvVars: [] +# - name: REDIS_HOST +# valueFrom: +# configMapKeyRef: +# name: redis-config +# key: redis-host +# - name: REDIS_PORT +# valueFrom: +# configMapKeyRef: +# name: redis-config +# key: redis-port +# - name: REDIS_PASSWORD +# valueFrom: +# secretKeyRef: +# name: redis +# key: redis-password +# - name: DB_DBUSER_PASSWORD +# valueFrom: +# secretKeyRef: +# name: db-common-secrets +# key: db-dbuser-password +# - name: MOSIP_MIMOTO_DATABASE_HOSTNAME +# value: postgres-postgresql.postgres + ## ConfigMap with extra environment variables that used ## @@ -256,11 +275,17 @@ extraEnvVarsSecret: ## Extra volumes to add to the deployment ## -extraVolumes: [] +extraVolumes: + - name: mimoto-encryption-volume + persistentVolumeClaim: + claimName: mimoto-keygen-keymanager ## Extra volume mounts to add to the container ## -extraVolumeMounts: [] +extraVolumeMounts: + - name: mimoto-encryption-volume + mountPath: /home/mosip/encryption/encryptionkeystore.p12 + subPath: encryptionkeystore.p12 ## Add init containers to the pods. ## Example: @@ -319,7 +344,7 @@ sidecars: {} persistence: enabled: false - storageClass: longhorn + storageClass: nfs-csi ## If defined, storageClassName: ## If set to "-", storageClassName: "", which disables dynamic provisioning ## If undefined (the default) or set to null, no storageClassName spec is @@ -350,7 +375,7 @@ persistence: ## volumePermissions: Change the owner and group of the persistent volume mountpoint to runAsUser:fsGroup values from the securityContext section. ## volumePermissions: - enabled: false + enabled: true image: registry: docker.io repository: bitnami/bitnami-shell @@ -456,10 +481,9 @@ metrics: istio: enabled: true gateways: - - istio-system/internal - - istio-system/public - prefix1: /residentmobileapp - prefix2: /v1/mimoto + - inji-web-gateway + prefix1: /v1/mimoto + prefix2: /residentmobileapp rewrite: /v1/mimoto enable_insecure: false From 62a3f99b19ae70acf3d96dcb53817a3d5fdf1009 Mon Sep 17 00:00:00 2001 From: techno-467 Date: Fri, 25 Apr 2025 11:02:58 +0530 Subject: [PATCH 547/860] [MOSIP-39939] & [MOSIP-41033], Added volume for encryptionkeystore.p12 also added redis deployment script for mimoto. Signed-off-by: techno-467 --- deploy/mimoto/install.sh | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/deploy/mimoto/install.sh b/deploy/mimoto/install.sh index a44707fe6..6e3ade105 100755 --- a/deploy/mimoto/install.sh +++ b/deploy/mimoto/install.sh @@ -24,7 +24,7 @@ function installing_mimoto() { $COPY_UTIL configmap inji-stack-config default $NS $COPY_UTIL configmap artifactory-share artifactory $NS $COPY_UTIL configmap config-server1 config-server $NS - $COPY_UTIL configmap redis-config redis $NS + $COPY_UTIL configmap redis-config redis $NS echo Copy Secrets $COPY_UTIL secret redis redis $NS @@ -45,17 +45,17 @@ function installing_mimoto() { fi echo "Copy secrets to config-server namespace" -# ../copy_cm_func.sh secret mimoto-wallet-binding-partner-api-key injiweb config-server -# ../copy_cm_func.sh secret mimoto-oidc-partner-clientid injiweb config-server + ../copy_cm_func.sh secret mimoto-wallet-binding-partner-api-key injiweb config-server + ../copy_cm_func.sh secret mimoto-oidc-partner-clientid injiweb config-server echo Updating mimoto-oidc-keystore-password value -# ../copy_cm_func.sh secret mimoto-oidc-keystore-password injiweb config-server + ../copy_cm_func.sh secret mimoto-oidc-keystore-password injiweb config-server -# kubectl -n config-server set env --keys=mimoto-wallet-binding-partner-api-key --from secret/mimoto-wallet-binding-partner-api-key deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ -# kubectl -n config-server set env --keys=mimoto-oidc-partner-clientid --from secret/mimoto-oidc-partner-clientid deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ -# kubectl -n config-server set env --keys=mimoto-oidc-keystore-password --from secret/mimoto-oidc-keystore-password deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ + kubectl -n config-server set env --keys=mimoto-wallet-binding-partner-api-key --from secret/mimoto-wallet-binding-partner-api-key deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ + kubectl -n config-server set env --keys=mimoto-oidc-partner-clientid --from secret/mimoto-oidc-partner-clientid deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ + kubectl -n config-server set env --keys=mimoto-oidc-keystore-password --from secret/mimoto-oidc-keystore-password deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ -# kubectl -n config-server get deploy -o name | xargs -n1 -t kubectl -n config-server rollout status + kubectl -n config-server get deploy -o name | xargs -n1 -t kubectl -n config-server rollout status default_enable_volume=true # Default to true for mimoto read -p "Would you like to enable volume (true/false) : [ default : true ] : " enable_volume From 46423d2a022933b3d74a55964cc9bc73e0e84e9d Mon Sep 17 00:00:00 2001 From: techno-467 Date: Fri, 25 Apr 2025 11:08:58 +0530 Subject: [PATCH 548/860] [MOSIP-39939] & [MOSIP-41033], Added volume for encryptionkeystore.p12 also added redis deployment script for mimoto. Signed-off-by: techno-467 --- helm/mimoto/values.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/helm/mimoto/values.yaml b/helm/mimoto/values.yaml index bfd9ced36..c7d5c66a2 100644 --- a/helm/mimoto/values.yaml +++ b/helm/mimoto/values.yaml @@ -259,7 +259,6 @@ extraEnvVars: [] # key: db-dbuser-password # - name: MOSIP_MIMOTO_DATABASE_HOSTNAME # value: postgres-postgresql.postgres - ## ConfigMap with extra environment variables that used ## From c274704a77ed032aea23ecd792c954fa99754b64 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Fri, 25 Apr 2025 11:24:29 +0530 Subject: [PATCH 549/860] injiweb-1518 fixed redis timeout properties Signed-off-by: Gurpreet41082 --- .../mimoto/{exception => util}/GlobalExceptionHandlerTest.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/test/java/io/mosip/mimoto/{exception => util}/GlobalExceptionHandlerTest.java (100%) diff --git a/src/test/java/io/mosip/mimoto/exception/GlobalExceptionHandlerTest.java b/src/test/java/io/mosip/mimoto/util/GlobalExceptionHandlerTest.java similarity index 100% rename from src/test/java/io/mosip/mimoto/exception/GlobalExceptionHandlerTest.java rename to src/test/java/io/mosip/mimoto/util/GlobalExceptionHandlerTest.java From 5bdbbc2c4509a736b39c9e6a73c06dd3c05562e1 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Fri, 25 Apr 2025 11:28:31 +0530 Subject: [PATCH 550/860] injiweb-1516 moved globalexception handler to util package Signed-off-by: Gurpreet41082 --- .../mimoto/service/impl/GoogleTokenService.java | 10 +++++++++- .../{exception => util}/GlobalExceptionHandler.java | 12 ++++-------- src/main/resources/application-default.properties | 1 + .../mosip/mimoto/controller/UsersControllerTest.java | 2 +- .../mimoto/controller/WalletsControllerTest.java | 2 +- .../mimoto/util/GlobalExceptionHandlerTest.java | 6 ++++-- 6 files changed, 20 insertions(+), 13 deletions(-) rename src/main/java/io/mosip/mimoto/{exception => util}/GlobalExceptionHandler.java (82%) diff --git a/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java b/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java index c76ba5295..97a9edf48 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java +++ b/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java @@ -2,6 +2,7 @@ import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; +import io.mosip.mimoto.exception.InvalidRequestException; import io.mosip.mimoto.exception.OAuth2AuthenticationException; import io.mosip.mimoto.service.SecurityContextService; import io.mosip.mimoto.service.TokenService; @@ -21,6 +22,7 @@ import org.springframework.security.oauth2.core.user.OAuth2User; import org.springframework.security.oauth2.jwt.Jwt; import org.springframework.security.oauth2.jwt.JwtDecoder; +import org.springframework.security.oauth2.jwt.JwtException; import org.springframework.stereotype.Service; import java.util.Collections; @@ -28,6 +30,7 @@ import java.util.List; import java.util.Map; +import static io.mosip.mimoto.exception.ErrorConstants.INVALID_REQUEST; import static io.mosip.mimoto.exception.ErrorConstants.OAUTH2_AUTHENTICATION_EXCEPTION; @Service("google") @@ -67,7 +70,12 @@ public void processToken(String idToken, String provider, HttpServletRequest req } private Jwt decodeAndValidateToken(String idToken) throws OAuth2AuthenticationException { - Jwt jwt = googleIdTokenDecoder.decode(idToken); + Jwt jwt = null; + try { + jwt = googleIdTokenDecoder.decode(idToken); + } catch (JwtException e) { + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), e.getMessage(), e); + } String issuer = jwt.getIssuer().toString(); if (!issuer.equals("https://accounts.google.com") && !issuer.equals("accounts.google.com")) { diff --git a/src/main/java/io/mosip/mimoto/exception/GlobalExceptionHandler.java b/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java similarity index 82% rename from src/main/java/io/mosip/mimoto/exception/GlobalExceptionHandler.java rename to src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java index 81314f151..7257edaeb 100644 --- a/src/main/java/io/mosip/mimoto/exception/GlobalExceptionHandler.java +++ b/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java @@ -1,6 +1,9 @@ -package io.mosip.mimoto.exception; +package io.mosip.mimoto.util; import io.mosip.mimoto.dto.ErrorDTO; +import io.mosip.mimoto.exception.ErrorConstants; +import io.mosip.mimoto.exception.ExternalServiceUnavailableException; +import io.mosip.mimoto.exception.InvalidRequestException; import lombok.extern.slf4j.Slf4j; import org.springframework.dao.DataAccessResourceFailureException; import org.springframework.data.redis.RedisConnectionFailureException; @@ -28,13 +31,6 @@ public ErrorDTO handleDatabaseException(Exception ex) { return new ErrorDTO(ErrorConstants.DATABASE_CONNECTION_EXCEPTION.getErrorCode(), ErrorConstants.DATABASE_CONNECTION_EXCEPTION.getErrorMessage()); } - @ExceptionHandler(RedisConnectionFailureException.class) - @ResponseStatus(HttpStatus.SERVICE_UNAVAILABLE) - public ErrorDTO handleRedisConnectionException(Exception ex) { - log.error("Redis error occurred: ", ex); - return new ErrorDTO(ErrorConstants.REDIS_CONNECTION_EXCEPTION.getErrorCode(), ErrorConstants.REDIS_CONNECTION_EXCEPTION.getErrorMessage()); - } - @ExceptionHandler(ExternalServiceUnavailableException.class) @ResponseStatus(HttpStatus.SERVICE_UNAVAILABLE) public ErrorDTO handleExternalServiceUnavailable(ExternalServiceUnavailableException ex) { diff --git a/src/main/resources/application-default.properties b/src/main/resources/application-default.properties index 03906705e..5e516dc0c 100644 --- a/src/main/resources/application-default.properties +++ b/src/main/resources/application-default.properties @@ -43,6 +43,7 @@ spring.data.redis.port=${redis.port} spring.data.redis.password=${redis.password} server.servlet.session.timeout=30m spring.session.redis.namespace=injiweb:session: +spring.data.redis.timeout=10s spring.data.redis.connect-timeout=10s mosip.security.ignore-auth-urls=/safetynet/**,/actuator/**,/swagger-ui/**,/v3/api-docs/**,\ diff --git a/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java b/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java index 0b9757d4d..619d3b1dc 100644 --- a/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java @@ -3,7 +3,7 @@ import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.dbentity.UserMetadata; import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; -import io.mosip.mimoto.exception.GlobalExceptionHandler; +import io.mosip.mimoto.util.GlobalExceptionHandler; import io.mosip.mimoto.repository.UserMetadataRepository; import io.mosip.mimoto.util.EncryptionDecryptionUtil; import org.junit.Before; diff --git a/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java index b120d17ad..f7b0d042a 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java @@ -4,7 +4,7 @@ import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.dto.WalletRequestDto; import io.mosip.mimoto.dto.WalletResponseDto; -import io.mosip.mimoto.exception.GlobalExceptionHandler; +import io.mosip.mimoto.util.GlobalExceptionHandler; import io.mosip.mimoto.service.WalletService; import io.mosip.mimoto.util.WalletValidator; import org.junit.Before; diff --git a/src/test/java/io/mosip/mimoto/util/GlobalExceptionHandlerTest.java b/src/test/java/io/mosip/mimoto/util/GlobalExceptionHandlerTest.java index d83e792c0..dea3905fa 100644 --- a/src/test/java/io/mosip/mimoto/util/GlobalExceptionHandlerTest.java +++ b/src/test/java/io/mosip/mimoto/util/GlobalExceptionHandlerTest.java @@ -1,6 +1,9 @@ -package io.mosip.mimoto.exception; +package io.mosip.mimoto.util; import io.mosip.mimoto.dto.ErrorDTO; +import io.mosip.mimoto.exception.ErrorConstants; +import io.mosip.mimoto.exception.ExternalServiceUnavailableException; +import io.mosip.mimoto.exception.InvalidRequestException; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -13,7 +16,6 @@ import java.lang.reflect.Method; import static org.junit.Assert.*; -import static org.mockito.Mockito.*; @RunWith(MockitoJUnitRunner.class) public class GlobalExceptionHandlerTest { From 4a12acc77ad42a42e109fcbea21bbf6beae0137e Mon Sep 17 00:00:00 2001 From: techno-467 Date: Fri, 25 Apr 2025 11:34:34 +0530 Subject: [PATCH 551/860] [MOSIP-39939] & [MOSIP-41033], Added volume for encryptionkeystore.p12 also added redis deployment script for mimoto. Signed-off-by: techno-467 --- deploy/README.md | 16 ++++++++-------- deploy/mimoto/README.md | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/deploy/README.md b/deploy/README.md index 1f676c70c..f00ac5e67 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -3,14 +3,14 @@ * Execute redis install script ``` -cd ../redis +cd redis ./install.sh ``` * Execute Onboarder install script - ``` - cd partner-onboarder - ./install.sh - ``` +``` +cd ../partner-onboarder +./install.sh + ``` * During the execution of the `install.sh` script, a prompt appears requesting information for the S3 bucket, including its name and URL. * Once the job is completed, log in to S3 / NFS and check the reports. There should not be any failures. * Note: If you are running the Onboarder in a separate INJI cluster, update the extraEnvVars section accordingly in [values.yaml](../partner-onboarder/values.yaml). @@ -18,9 +18,9 @@ cd ../redis # Install mimoto * Execute mimoto install script - ``` - cd ../mimoto - ./install.sh +``` +cd mimoto +./install.sh ``` * During the execution of the `install.sh` script, a prompt appears requesting information regarding the presence of a public domain and a valid SSL certificate on the server. * If the server lacks a public domain and a valid SSL certificate, it is advisable to select the `n` option. Opting it will enable the `init-container` with an `emptyDir` volume and include it in the deployment process. diff --git a/deploy/mimoto/README.md b/deploy/mimoto/README.md index d88adc4f0..84a0f841e 100644 --- a/deploy/mimoto/README.md +++ b/deploy/mimoto/README.md @@ -10,5 +10,5 @@ $ helm install my-release mosip/mimoto ``` * Before installing Mimoto, please ensure that the database host and port are correctly configured in the values.yaml file. ```console -install.sh +./install.sh ``` \ No newline at end of file From bfe676c5a3791dd9e19967ce94b593bbf0b7b6bd Mon Sep 17 00:00:00 2001 From: techno-467 Date: Fri, 25 Apr 2025 11:53:32 +0530 Subject: [PATCH 552/860] [MOSIP-39939] & [MOSIP-41033], Added volume for encryptionkeystore.p12 also added redis deployment script for mimoto. Signed-off-by: techno-467 --- deploy/mimoto/install.sh | 2 +- deploy/redis/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/deploy/mimoto/install.sh b/deploy/mimoto/install.sh index 6e3ade105..3ee4dd3d0 100755 --- a/deploy/mimoto/install.sh +++ b/deploy/mimoto/install.sh @@ -23,7 +23,7 @@ function installing_mimoto() { COPY_UTIL=../copy_cm_func.sh $COPY_UTIL configmap inji-stack-config default $NS $COPY_UTIL configmap artifactory-share artifactory $NS - $COPY_UTIL configmap config-server1 config-server $NS + $COPY_UTIL configmap config-server-share config-server $NS $COPY_UTIL configmap redis-config redis $NS echo Copy Secrets diff --git a/deploy/redis/README.md b/deploy/redis/README.md index bd81c8f73..7bad74511 100644 --- a/deploy/redis/README.md +++ b/deploy/redis/README.md @@ -1,6 +1,6 @@ # Redis -* The open source, in-memory data store used by millions of developers as a database, cache, streaming engine, and message broker. +* Redis is an open-source, in-memory data store widely used by developers as a database, cache, streaming engine, and message broker. In Mimoto, Redis is utilized as a cache store to enhance performance and speed up data retrieval. * In mimoto we are using Redis as a cache store. ## Install From e0ea6b67d1c37b3f780dcbfb25a81f98d1fc37ae Mon Sep 17 00:00:00 2001 From: techno-467 Date: Fri, 25 Apr 2025 11:53:50 +0530 Subject: [PATCH 553/860] [MOSIP-39939] & [MOSIP-41033], Added volume for encryptionkeystore.p12 also added redis deployment script for mimoto. Signed-off-by: techno-467 --- helm/mimoto/values.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helm/mimoto/values.yaml b/helm/mimoto/values.yaml index c7d5c66a2..56e5f7501 100644 --- a/helm/mimoto/values.yaml +++ b/helm/mimoto/values.yaml @@ -53,7 +53,7 @@ service: image: registry: docker.io - repository: mosipdev/mimoto + repository: mosipqa/mimoto tag: develop ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' From d9779b42038f79a97365efe493c814f0c85325f3 Mon Sep 17 00:00:00 2001 From: techno-467 Date: Fri, 25 Apr 2025 11:58:21 +0530 Subject: [PATCH 554/860] [MOSIP-39939] & [MOSIP-41033], Added volume for encryptionkeystore.p12 also added redis deployment script for mimoto. Signed-off-by: techno-467 --- deploy/redis/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deploy/redis/README.md b/deploy/redis/README.md index 7bad74511..74c4649e5 100644 --- a/deploy/redis/README.md +++ b/deploy/redis/README.md @@ -1,7 +1,7 @@ # Redis -* Redis is an open-source, in-memory data store widely used by developers as a database, cache, streaming engine, and message broker. In Mimoto, Redis is utilized as a cache store to enhance performance and speed up data retrieval. -* In mimoto we are using Redis as a cache store. +* Redis is an open-source, in-memory data store widely used by developers as a database, cache, streaming engine, and message broker. +* In Mimoto, Redis is utilized as a cache store to enhance performance and speed up data retrieval. ## Install ``` From 472fc56e73c09ebef21ee9bbd578fd10d80d8bd4 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Fri, 25 Apr 2025 12:01:32 +0530 Subject: [PATCH 555/860] injiweb-1516 fixed the bad request scenarios Signed-off-by: Gurpreet41082 --- .../mimoto/util/GlobalExceptionHandler.java | 23 ++++++++++++++++ .../util/GlobalExceptionHandlerTest.java | 26 +++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java b/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java index 7257edaeb..9d9b400e1 100644 --- a/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java +++ b/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java @@ -8,6 +8,7 @@ import org.springframework.dao.DataAccessResourceFailureException; import org.springframework.data.redis.RedisConnectionFailureException; import org.springframework.http.HttpStatus; +import org.springframework.http.converter.HttpMessageNotReadableException; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; @@ -45,4 +46,26 @@ public ErrorDTO handleInvalidRequest(InvalidRequestException ex) { return new ErrorDTO(ex.getErrorCode(), ex.getMessage()); } + @ExceptionHandler(HttpMessageNotReadableException.class) + @ResponseStatus(HttpStatus.BAD_REQUEST) + public ErrorDTO handleHttpMessageNotReadableException(HttpMessageNotReadableException ex) { + log.error("Invalid request body: {}", ex.getMessage(), ex); + String errorCode = ErrorConstants.INVALID_REQUEST.getErrorCode(); + String errorMessage; + + if (ex.getCause() instanceof com.fasterxml.jackson.core.JsonParseException) { + errorMessage = "Invalid JSON format in request body"; + } else if (ex.getCause() instanceof com.fasterxml.jackson.databind.JsonMappingException) { + errorMessage = "Request body does not match expected structure"; + } else if (ex.getMessage().contains("Required request body is missing")) { + errorMessage = "Required request body is missing"; + } else if (ex.getMessage().contains("Content type")) { + errorMessage = "Unsupported content type in request"; + } else { + errorMessage = "Unable to process request body"; + } + + return new ErrorDTO(errorCode, errorMessage); + } + } diff --git a/src/test/java/io/mosip/mimoto/util/GlobalExceptionHandlerTest.java b/src/test/java/io/mosip/mimoto/util/GlobalExceptionHandlerTest.java index dea3905fa..1f0b88080 100644 --- a/src/test/java/io/mosip/mimoto/util/GlobalExceptionHandlerTest.java +++ b/src/test/java/io/mosip/mimoto/util/GlobalExceptionHandlerTest.java @@ -4,6 +4,8 @@ import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.exception.ExternalServiceUnavailableException; import io.mosip.mimoto.exception.InvalidRequestException; +import jakarta.servlet.http.HttpServletRequest; +import org.apache.struts.mock.MockHttpServletRequest; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -11,6 +13,8 @@ import org.mockito.junit.MockitoJUnitRunner; import org.springframework.dao.DataAccessResourceFailureException; import org.springframework.http.HttpStatus; +import org.springframework.http.converter.HttpMessageNotReadableException; +import org.springframework.http.server.ServletServerHttpRequest; import org.springframework.web.bind.annotation.ResponseStatus; import java.lang.reflect.Method; @@ -111,4 +115,26 @@ public void handleInvalidRequestReturnsBadRequest() throws Exception { assertNotNull(responseStatus); assertEquals(HttpStatus.BAD_REQUEST, responseStatus.value()); } + + @Test + public void handleHttpMessageNotReadableExceptionReturnsBadRequest() throws Exception { + // Arrange + HttpMessageNotReadableException ex = new HttpMessageNotReadableException("Invalid JSON format"); + String expectedErrorCode = ErrorConstants.INVALID_REQUEST.getErrorCode(); + String expectedErrorMessage = "Unable to process request body"; + + // Act + ErrorDTO result = globalExceptionHandler.handleHttpMessageNotReadableException(ex); + + // Assert + assertEquals(expectedErrorCode, result.getErrorCode()); + assertEquals(expectedErrorMessage, result.getErrorMessage()); + + // Verify ResponseStatus annotation + Method method = GlobalExceptionHandler.class.getMethod("handleHttpMessageNotReadableException", HttpMessageNotReadableException.class); + ResponseStatus responseStatus = method.getAnnotation(ResponseStatus.class); + assertNotNull(responseStatus); + assertEquals(HttpStatus.BAD_REQUEST, responseStatus.value()); + } + } \ No newline at end of file From 669224323a3d4012b74e668837d73915145a8d60 Mon Sep 17 00:00:00 2001 From: techno-467 Date: Fri, 25 Apr 2025 12:20:20 +0530 Subject: [PATCH 556/860] [MOSIP-39939] & [MOSIP-41033], Added volume for encryptionkeystore.p12 also added redis deployment script for mimoto. Signed-off-by: techno-467 --- deploy/README.md | 4 ++-- deploy/mimoto/README.md | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/deploy/README.md b/deploy/README.md index f00ac5e67..b098c88ce 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -17,11 +17,11 @@ cd ../partner-onboarder # Install mimoto * Execute mimoto install script - +* Before installing Mimoto, please ensure that the database host and port are correctly configured in the values.yaml file. ``` cd mimoto ./install.sh - ``` + ``` * During the execution of the `install.sh` script, a prompt appears requesting information regarding the presence of a public domain and a valid SSL certificate on the server. * If the server lacks a public domain and a valid SSL certificate, it is advisable to select the `n` option. Opting it will enable the `init-container` with an `emptyDir` volume and include it in the deployment process. * The init-container will proceed to download the server's self-signed SSL certificate and mount it to the specified location within the container's Java keystore (i.e., `cacerts`) file. diff --git a/deploy/mimoto/README.md b/deploy/mimoto/README.md index 84a0f841e..c94aa6ada 100644 --- a/deploy/mimoto/README.md +++ b/deploy/mimoto/README.md @@ -8,7 +8,10 @@ Helm chart for installing MOSIP mimoto Application. $ helm repo add mosip https://mosip.github.io $ helm install my-release mosip/mimoto ``` -* Before installing Mimoto, please ensure that the database host and port are correctly configured in the values.yaml file. ```console ./install.sh +``` +``` +```console +./delete.sh ``` \ No newline at end of file From 0724cb426acdbdfba1d2408a9e1f6e88577ceca7 Mon Sep 17 00:00:00 2001 From: techno-467 Date: Fri, 25 Apr 2025 12:23:22 +0530 Subject: [PATCH 557/860] [MOSIP-39939] & [MOSIP-41033], Added volume for encryptionkeystore.p12 also added redis deployment script for mimoto. Signed-off-by: techno-467 --- deploy/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/README.md b/deploy/README.md index b098c88ce..e83e3fd38 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -17,7 +17,7 @@ cd ../partner-onboarder # Install mimoto * Execute mimoto install script -* Before installing Mimoto, please ensure that the database host and port are correctly configured in the values.yaml file. +* Before installing Mimoto, please ensure that the database host and port are correctly configured in the [values.yaml](mimoto/values.yaml) file. ``` cd mimoto ./install.sh From 7d2fedbfddbd789c8d28573e02cef0a6061e8221 Mon Sep 17 00:00:00 2001 From: techno-467 Date: Fri, 25 Apr 2025 12:27:27 +0530 Subject: [PATCH 558/860] [MOSIP-39939] & [MOSIP-41033], Added volume for encryptionkeystore.p12 also added redis deployment script for mimoto. Signed-off-by: techno-467 --- deploy/mimoto/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/deploy/mimoto/README.md b/deploy/mimoto/README.md index c94aa6ada..f8a4a0515 100644 --- a/deploy/mimoto/README.md +++ b/deploy/mimoto/README.md @@ -11,7 +11,9 @@ $ helm install my-release mosip/mimoto ```console ./install.sh ``` -``` ```console ./delete.sh +``` +```console +./restart.sh ``` \ No newline at end of file From 8ce274427ae2d93272d05eeee2285757ddcad5c9 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Fri, 25 Apr 2025 17:02:31 +0530 Subject: [PATCH 559/860] injiweb-1517 fixed the error codes Signed-off-by: Gurpreet41082 --- .../WalletCredentialsController.java | 25 +-- .../mosip/mimoto/dto/mimoto/IssuerConfig.java | 11 ++ .../CredentialProcessingException.java | 16 ++ .../ExternalServiceUnavailableException.java | 2 +- .../service/WalletCredentialService.java | 5 +- .../impl/WalletCredentialServiceImpl.java | 182 ++++++++---------- .../mimoto/util/CredentialProcessor.java | 143 ++++++++++++++ .../mimoto/util/CredentialUtilService.java | 2 +- .../WalletCredentialsControllerTest.java | 43 +---- .../service/CredentialUtilServiceTest.java | 2 +- .../service/WalletCredentialServiceTest.java | 33 +--- 11 files changed, 278 insertions(+), 186 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/IssuerConfig.java create mode 100644 src/main/java/io/mosip/mimoto/exception/CredentialProcessingException.java create mode 100644 src/main/java/io/mosip/mimoto/util/CredentialProcessor.java diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index 203299d3b..fea106835 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -66,19 +66,19 @@ public ResponseEntity downloadCredential(@PathV } catch (ApiNotAccessibleException | IOException | AuthorizationServerWellknownResponseException | InvalidWellknownResponseException e) { log.error("Error occurred while fetching token response: {}", issuerId, e); - throw new ExternalServiceUnavailableException( - ErrorConstants.SERVER_UNAVAILABLE.getErrorCode(), - ErrorConstants.SERVER_UNAVAILABLE.getErrorMessage()); + return Utilities.getErrorResponseEntityWithoutWrapper( + e, ErrorConstants.SERVER_UNAVAILABLE.getErrorCode(), HttpStatus.SERVICE_UNAVAILABLE, MediaType.APPLICATION_JSON); } - try { - log.info("Initiated call for fetching and storing Verifiable Credential in the database for walletId: {}", walletId); - VerifiableCredentialResponseDTO credentialResponseDTO = walletCredentialService.fetchAndStoreCredential(issuerId, credentialType, response, credentialValidity, locale, walletId, base64EncodedWalletKey); - - return ResponseEntity.status(HttpStatus.OK).body(credentialResponseDTO); - } catch (Exception ex) { - log.error("Exception occurred while saving the credential ", ex); - return Utilities.getErrorResponseEntityWithoutWrapper(ex, ErrorConstants.CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); + + log.info("Initiated call for fetching and storing Verifiable Credential in the database for walletId: {}", walletId); + try { + VerifiableCredentialResponseDTO credentialResponseDTO = walletCredentialService.fetchAndStoreCredential(issuerId, credentialType, response, credentialValidity, locale, walletId, base64EncodedWalletKey); + return ResponseEntity.status(HttpStatus.OK).body(credentialResponseDTO); + } catch (ExternalServiceUnavailableException e) { + return Utilities.getErrorResponseEntityWithoutWrapper( + e, e.getErrorCode(), HttpStatus.SERVICE_UNAVAILABLE, MediaType.APPLICATION_JSON); } + } @Operation(summary = "Fetch all credentials for a given wallet", description = "This API retrieves all credentials associated with the specified wallet. The wallet is identified using its unique wallet ID, and the credentials are returned based on the provided locale. The user's session is authenticated to ensure access to the wallet. If successful, the API returns a list of Verifiable Credentials. Otherwise, an appropriate error response is returned.", operationId = "fetchAllCredentialsForGivenWallet", security = @SecurityRequirement(name = "SessionAuth"), parameters = {@Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet for which credentials will be fetched", schema = @Schema(type = "string")), @Parameter(name = "locale", in = ParameterIn.QUERY, required = true, description = "The locale to be used for credential retrieval", schema = @Schema(type = "string"))}) @@ -118,6 +118,9 @@ public ResponseEntity getVerifiableCredential(@PathVariable return Utilities.getErrorResponseEntityWithoutWrapper(e, e.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); } catch (CorruptedEncryptedDataException e) { return Utilities.getErrorResponseEntityWithoutWrapper(e, e.getErrorCode(), HttpStatus.UNPROCESSABLE_ENTITY, MediaType.APPLICATION_JSON); + } catch (ExternalServiceUnavailableException e) { + return Utilities.getErrorResponseEntityWithoutWrapper( + e, e.getErrorCode(), HttpStatus.SERVICE_UNAVAILABLE, MediaType.APPLICATION_JSON); } String dispositionType = "download".equalsIgnoreCase(action) ? "attachment" : "inline"; diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/IssuerConfig.java b/src/main/java/io/mosip/mimoto/dto/mimoto/IssuerConfig.java new file mode 100644 index 000000000..0073a8ad4 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/IssuerConfig.java @@ -0,0 +1,11 @@ +package io.mosip.mimoto.dto.mimoto; + +import io.mosip.mimoto.dto.IssuerDTO; +import lombok.Data; + +@Data +public class IssuerConfig { + private final IssuerDTO issuerDTO; + private final CredentialIssuerWellKnownResponse wellKnownResponse; + private final CredentialsSupportedResponse credentialsSupportedResponse; +} diff --git a/src/main/java/io/mosip/mimoto/exception/CredentialProcessingException.java b/src/main/java/io/mosip/mimoto/exception/CredentialProcessingException.java new file mode 100644 index 000000000..45f332e32 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/exception/CredentialProcessingException.java @@ -0,0 +1,16 @@ +package io.mosip.mimoto.exception; + +public class CredentialProcessingException extends BaseUncheckedException { + /** The Constant serialVersionUID. */ + private static final long serialVersionUID = 1L; + + public CredentialProcessingException(String errorCode, String errorMessage, Throwable cause) { + super(errorCode, errorMessage, cause); + + } + + public CredentialProcessingException(String errorCode, String errorMessage) { + super(errorCode, errorMessage); + + } +} diff --git a/src/main/java/io/mosip/mimoto/exception/ExternalServiceUnavailableException.java b/src/main/java/io/mosip/mimoto/exception/ExternalServiceUnavailableException.java index 073695539..b21a425dc 100644 --- a/src/main/java/io/mosip/mimoto/exception/ExternalServiceUnavailableException.java +++ b/src/main/java/io/mosip/mimoto/exception/ExternalServiceUnavailableException.java @@ -1,6 +1,6 @@ package io.mosip.mimoto.exception; -public class ExternalServiceUnavailableException extends BaseUncheckedException { +public class ExternalServiceUnavailableException extends BaseCheckedException { /** The Constant serialVersionUID. */ private static final long serialVersionUID = 1L; diff --git a/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java b/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java index 8ca7b989e..6c07a8cd8 100644 --- a/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java +++ b/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java @@ -5,14 +5,15 @@ import io.mosip.mimoto.dto.resident.WalletCredentialResponseDTO; import io.mosip.mimoto.exception.CorruptedEncryptedDataException; import io.mosip.mimoto.exception.DecryptionException; +import io.mosip.mimoto.exception.ExternalServiceUnavailableException; import io.mosip.mimoto.exception.InvalidCredentialResourceException; import java.util.List; public interface WalletCredentialService { - VerifiableCredentialResponseDTO fetchAndStoreCredential(String issuerId, String credentialType, TokenResponseDTO response, String credentialValidity, String locale, String walletId, String base64EncodedWalletKey) throws Exception; + VerifiableCredentialResponseDTO fetchAndStoreCredential(String issuerId, String credentialType, TokenResponseDTO response, String credentialValidity, String locale, String walletId, String base64EncodedWalletKey) throws ExternalServiceUnavailableException; List fetchAllCredentialsForWallet(String walletId, String walletKey, String locale); - WalletCredentialResponseDTO fetchVerifiableCredential(String walletId, String credentialId, String base64EncodedWalletKey, String locale) throws DecryptionException, CorruptedEncryptedDataException; + WalletCredentialResponseDTO fetchVerifiableCredential(String walletId, String credentialId, String base64EncodedWalletKey, String locale) throws DecryptionException, CorruptedEncryptedDataException, ExternalServiceUnavailableException; } diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java index 7b5a69db3..feef5efa2 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java @@ -3,69 +3,55 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import io.mosip.kernel.cryptomanager.service.CryptomanagerService; -import io.mosip.mimoto.dbentity.CredentialMetadata; import io.mosip.mimoto.dbentity.VerifiableCredential; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.dto.resident.WalletCredentialResponseDTO; import io.mosip.mimoto.exception.*; -import io.mosip.mimoto.model.QRCodeType; import io.mosip.mimoto.repository.WalletCredentialsRepository; import io.mosip.mimoto.service.IdpService; import io.mosip.mimoto.service.IssuersService; import io.mosip.mimoto.service.WalletCredentialService; -import io.mosip.mimoto.util.*; -import io.mosip.pixelpass.PixelPass; -import io.mosip.vercred.vcverifier.CredentialsVerifier; -import jakarta.annotation.PostConstruct; +import io.mosip.mimoto.util.CredentialProcessor; +import io.mosip.mimoto.util.CredentialUtilService; +import io.mosip.mimoto.util.EncryptionDecryptionUtil; +import io.mosip.mimoto.util.WalletCredentialResponseDTOFactory; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.InputStreamResource; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; import java.io.ByteArrayInputStream; import java.io.IOException; -import java.util.*; +import java.util.List; +import java.util.Optional; +import java.util.Set; import static io.mosip.mimoto.exception.ErrorConstants.*; import static io.mosip.mimoto.util.LocaleUtils.getCredentialDisplayDTOBasedOnLocale; - @Slf4j @Service public class WalletCredentialServiceImpl implements WalletCredentialService { @Autowired - IssuersService issuersService; + private IssuersService issuersService; @Autowired - DataShareServiceImpl dataShareService; + private DataShareServiceImpl dataShareService; @Autowired - ObjectMapper objectMapper; + private ObjectMapper objectMapper; @Autowired - IdpService idpService; + private IdpService idpService; @Autowired - RestTemplate restTemplate; - - @Value("${mosip.inji.ovp.qrdata.pattern}") - String ovpQRDataPattern; - - @Value("${mosip.inji.qr.code.height:500}") - Integer qrCodeHeight; - - @Value("${mosip.inji.qr.code.width:500}") - Integer qrCodeWidth; - - @Value("${mosip.inji.qr.data.size.limit:2000}") - Integer allowedQRDataSizeLimit; + private RestTemplate restTemplate; @Autowired - PresentationServiceImpl presentationService; + private PresentationServiceImpl presentationService; @Autowired private CryptomanagerService cryptomanagerService; @@ -79,47 +65,32 @@ public class WalletCredentialServiceImpl implements WalletCredentialService { @Autowired private EncryptionDecryptionUtil encryptionDecryptionUtil; - PixelPass pixelPass; - CredentialsVerifier credentialsVerifier; - - @PostConstruct - public void init() { - pixelPass = new PixelPass(); - credentialsVerifier = new CredentialsVerifier(); - } + @Autowired + private CredentialProcessor credentialProcessor; @Override public VerifiableCredentialResponseDTO fetchAndStoreCredential( String issuerId, String credentialType, TokenResponseDTO response, - String credentialValidity, String locale, String walletId, String base64EncodedWalletKey) throws Exception { + String credentialValidity, String locale, String walletId, String base64EncodedWalletKey) throws ExternalServiceUnavailableException { shouldInitiateDownloadRequest(issuerId, credentialType, walletId); - IssuerDTO issuerDTO = issuersService.getIssuerDetails(issuerId); - CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = getIssuerWellKnownResponse(issuerId); - CredentialsSupportedResponse credentialsSupportedResponse = credentialIssuerWellKnownResponse.getCredentialConfigurationsSupported().get(credentialType); - - VCCredentialRequest vcCredentialRequest = credentialUtilService.generateVCCredentialRequest(issuerDTO, credentialIssuerWellKnownResponse, credentialsSupportedResponse, response.getAccess_token(), walletId, base64EncodedWalletKey, true); - VCCredentialResponse vcCredentialResponse = credentialUtilService.downloadCredential(credentialIssuerWellKnownResponse.getCredentialEndPoint(), vcCredentialRequest, response.getAccess_token()); - boolean verificationStatus = issuerId.toLowerCase().contains("mock") || credentialUtilService.verifyCredential(vcCredentialResponse); - - if (!verificationStatus) { - throw new VCVerificationException(SIGNATURE_VERIFICATION_EXCEPTION.getErrorCode(), - SIGNATURE_VERIFICATION_EXCEPTION.getErrorMessage()); - } + IssuerConfig issuerConfig = fetchIssuerConfig(issuerId, credentialType); - String dataShareUrl = QRCodeType.OnlineSharing.equals(issuerDTO.getQr_code_type()) ? dataShareService.storeDataInDataShare(objectMapper.writeValueAsString(vcCredentialResponse), credentialValidity) : ""; - String vcResponseAsJsonString = objectMapper.writeValueAsString(vcCredentialResponse); - String encryptedCredentialData = encryptionDecryptionUtil.encryptCredential(vcResponseAsJsonString, base64EncodedWalletKey); - VerifiableCredential savedCredential = saveCredential(walletId, encryptedCredentialData, issuerId, credentialType, dataShareUrl, credentialValidity); + VerifiableCredential savedCredential = credentialProcessor.processAndStoreCredential( + issuerConfig, response.getAccess_token(), credentialType, walletId, + base64EncodedWalletKey, credentialValidity, issuerId); - return WalletCredentialResponseDTOFactory.buildCredentialResponseDTO(issuerDTO, credentialsSupportedResponse, locale, savedCredential.getId()); + return WalletCredentialResponseDTOFactory.buildCredentialResponseDTO( + issuerConfig.getIssuerDTO(), issuerConfig.getCredentialsSupportedResponse(), locale, savedCredential.getId()); } private void shouldInitiateDownloadRequest(String issuerId, String credentialType, String walletId) { Set issuers = Set.of("Mosip"); if (issuers.contains(issuerId) && alreadyDownloaded(issuerId, credentialType, walletId)) { - throw new RuntimeException("A credential is already downloaded for the selected Issuer and Credential Type. Only one is allowed, so download will not be initiated"); + throw new InvalidRequestException( + INVALID_REQUEST.getErrorCode(), + "A credential is already downloaded for the selected Issuer and Credential Type. Only one is allowed"); } } @@ -127,6 +98,37 @@ private boolean alreadyDownloaded(String issuerId, String credentialType, String return walletCredentialsRepository.existsByIssuerIdAndCredentialTypeAndWalletId(issuerId, credentialType, walletId); } + private IssuerConfig fetchIssuerConfig(String issuerId, String credentialType) throws ExternalServiceUnavailableException { + IssuerDTO issuerDTO; + try { + issuerDTO = issuersService.getIssuerDetails(issuerId); + } catch (ApiNotAccessibleException | IOException | AuthorizationServerWellknownResponseException | + InvalidWellknownResponseException e) { + log.error("Failed to fetch issuer details for issuerId: {}", issuerId, e); + throw new ExternalServiceUnavailableException(SERVER_UNAVAILABLE.getErrorCode(), "Unable to fetch issuer details due to a service error", e); + } catch (InvalidIssuerIdException e) { + log.error("Invalid issuerId: {}", issuerId, e); + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), e.getMessage(), e); + } + + CredentialIssuerWellKnownResponse wellKnownResponse; + try { + wellKnownResponse = getIssuerWellKnownResponse(issuerId); + } catch (AuthorizationServerWellknownResponseException | ApiNotAccessibleException | IOException | + InvalidWellknownResponseException e) { + log.error("Failed to fetch issuer well-known response for issuerId: {}", issuerId, e); + throw new ExternalServiceUnavailableException(SERVER_UNAVAILABLE.getErrorCode(), "Unable to fetch issuer configuration", e); + } + + CredentialsSupportedResponse credentialsSupportedResponse = wellKnownResponse.getCredentialConfigurationsSupported().get(credentialType); + if (credentialsSupportedResponse == null) { + log.error("Credential type {} not supported for issuerId: {}", credentialType, issuerId); + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), String.format("Credential type %s is not supported by issuer %s", credentialType, issuerId)); + } + + return new IssuerConfig(issuerDTO, wellKnownResponse, credentialsSupportedResponse); + } + @Override public List fetchAllCredentialsForWallet(String walletId, String walletKey, String locale) { List credentials = walletCredentialsRepository.findByWalletId(walletId); @@ -134,15 +136,11 @@ public List fetchAllCredentialsForWallet(String return credentials.stream().map(credentialRecord -> { try { String issuerId = credentialRecord.getCredentialMetadata().getIssuerId(); - IssuerDTO issuerDTO = issuersService.getIssuerDetails(issuerId); - CredentialIssuerWellKnownResponse wellKnownResponse = getIssuerWellKnownResponse(issuerId); - CredentialsSupportedResponse credentialsSupportedResponse = wellKnownResponse - .getCredentialConfigurationsSupported() - .get(credentialRecord.getCredentialMetadata().getCredentialType()); - - return WalletCredentialResponseDTOFactory.buildCredentialResponseDTO(issuerDTO, credentialsSupportedResponse, locale, credentialRecord.getId()); + IssuerConfig issuerConfig = fetchIssuerConfig(issuerId, credentialRecord.getCredentialMetadata().getCredentialType()); + return WalletCredentialResponseDTOFactory.buildCredentialResponseDTO( + issuerConfig.getIssuerDTO(), issuerConfig.getCredentialsSupportedResponse(), locale, credentialRecord.getId()); } catch (Exception e) { - log.info("Error occurred while fetching configuration of issuerId : {} for credentialId: {}", + log.info("Error occurred while fetching configuration of issuerId: {} for credentialId: {}", credentialRecord.getCredentialMetadata().getIssuerId(), credentialRecord.getId(), e); return WalletCredentialResponseDTOFactory.buildCredentialResponseDTO(null, null, locale, credentialRecord.getId()); } @@ -150,59 +148,44 @@ public List fetchAllCredentialsForWallet(String } @Override - public WalletCredentialResponseDTO fetchVerifiableCredential(String walletId, String credentialId, String base64EncodedWalletKey, String locale) throws DecryptionException, CorruptedEncryptedDataException { + public WalletCredentialResponseDTO fetchVerifiableCredential(String walletId, String credentialId, String base64EncodedWalletKey, String locale) + throws DecryptionException, CorruptedEncryptedDataException, ExternalServiceUnavailableException { Optional verifiableCredentialObj = walletCredentialsRepository.findByIdAndWalletId(credentialId, walletId); VerifiableCredential verifiableCredential; - if (verifiableCredentialObj.isPresent()) { - verifiableCredential = verifiableCredentialObj.get(); - } else { + if (verifiableCredentialObj.isEmpty()) { log.error("Credential not found for walletId: {} and credentialId: {}", walletId, credentialId); throw new CredentialNotFoundException(RESOURCE_NOT_FOUND.getErrorCode(), RESOURCE_NOT_FOUND.getErrorMessage()); } + verifiableCredential = verifiableCredentialObj.get(); String decryptCredentialResponse = encryptionDecryptionUtil.decryptCredential(verifiableCredential.getCredential(), base64EncodedWalletKey); String issuerId = verifiableCredential.getCredentialMetadata().getIssuerId(); String credentialType = verifiableCredential.getCredentialMetadata().getCredentialType(); String dataShareUrl = verifiableCredential.getCredentialMetadata().getDataShareUrl(); String credentialValidity = verifiableCredential.getCredentialMetadata().getCredentialValidity(); - IssuerDTO issuerDTO = null; - CredentialIssuerConfiguration credentialIssuerConfiguration = null; - try { - issuerDTO = issuersService.getIssuerDetails(issuerId); - credentialIssuerConfiguration = issuersService.getIssuerConfiguration(issuerId); - } catch (ApiNotAccessibleException | IOException | AuthorizationServerWellknownResponseException | - InvalidWellknownResponseException e) { - log.error("Error occurred while fetching issuer configuration for issuerId: {}", issuerId, e); - throw new ExternalServiceUnavailableException( - ErrorConstants.SERVER_UNAVAILABLE.getErrorCode(), - ErrorConstants.SERVER_UNAVAILABLE.getErrorMessage()); - } - - CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = new CredentialIssuerWellKnownResponse( - credentialIssuerConfiguration.getCredentialIssuer(), - credentialIssuerConfiguration.getAuthorizationServers(), - credentialIssuerConfiguration.getCredentialEndPoint(), - credentialIssuerConfiguration.getCredentialConfigurationsSupported()); - CredentialsSupportedResponse credentialsSupportedResponse = credentialIssuerWellKnownResponse.getCredentialConfigurationsSupported().get(credentialType); + IssuerConfig issuerConfig = fetchIssuerConfig(issuerId, credentialType); - VCCredentialResponse vcCredentialResponse = null; + VCCredentialResponse vcCredentialResponse; try { vcCredentialResponse = objectMapper.readValue(decryptCredentialResponse, VCCredentialResponse.class); } catch (JsonProcessingException e) { log.error("Error occurred while parsing the decrypted credential response", e); throw new CorruptedEncryptedDataException(SCHEMA_MISMATCH.getErrorCode(), SCHEMA_MISMATCH.getErrorMessage(), e); } - ByteArrayInputStream byteArrayInputStream = null; + + ByteArrayInputStream byteArrayInputStream; try { - byteArrayInputStream = credentialUtilService.generatePdfForVerifiableCredentials(credentialType, vcCredentialResponse, issuerDTO, credentialsSupportedResponse, dataShareUrl, credentialValidity, locale); + byteArrayInputStream = credentialUtilService.generatePdfForVerifiableCredentials( + credentialType, vcCredentialResponse, issuerConfig.getIssuerDTO(), + issuerConfig.getCredentialsSupportedResponse(), dataShareUrl, credentialValidity, locale); } catch (Exception e) { log.error("Error occurred while creating pdf", e); throw new CredentialPdfGenerationException( - ErrorConstants.SERVER_UNAVAILABLE.getErrorCode(), - ErrorConstants.SERVER_UNAVAILABLE.getErrorMessage()); + SERVER_UNAVAILABLE.getErrorCode(), + SERVER_UNAVAILABLE.getErrorMessage()); } - String fileName = getCredentialDisplayDTOBasedOnLocale(credentialsSupportedResponse.getDisplay(), locale).getName(); + String fileName = getCredentialDisplayDTOBasedOnLocale(issuerConfig.getCredentialsSupportedResponse().getDisplay(), locale).getName(); return new WalletCredentialResponseDTO(new InputStreamResource(byteArrayInputStream), fileName); } @@ -217,19 +200,4 @@ private CredentialIssuerWellKnownResponse getIssuerWellKnownResponse(String issu ); } - private VerifiableCredential saveCredential(String walletId, String encryptedCredential, String issuerId, String credentialType, String dataShareUrl, String credentialValidity) { - CredentialMetadata credentialMetadata = new CredentialMetadata(); - credentialMetadata.setIssuerId(issuerId); - credentialMetadata.setCredentialType(credentialType); - credentialMetadata.setDataShareUrl(dataShareUrl); - credentialMetadata.setCredentialValidity(credentialValidity); - - VerifiableCredential verifiableCredential = new VerifiableCredential(); - verifiableCredential.setId(UUID.randomUUID().toString()); - verifiableCredential.setWalletId(walletId); - verifiableCredential.setCredential(encryptedCredential); - verifiableCredential.setCredentialMetadata(credentialMetadata); - - return walletCredentialsRepository.save(verifiableCredential); - } -} +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java b/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java new file mode 100644 index 000000000..797429fd0 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java @@ -0,0 +1,143 @@ +package io.mosip.mimoto.util; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.dbentity.CredentialMetadata; +import io.mosip.mimoto.dbentity.VerifiableCredential; +import io.mosip.mimoto.dto.mimoto.IssuerConfig; +import io.mosip.mimoto.dto.mimoto.VCCredentialRequest; +import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; +import io.mosip.mimoto.exception.CredentialProcessingException; +import io.mosip.mimoto.exception.ExternalServiceUnavailableException; +import io.mosip.mimoto.exception.VCVerificationException; +import io.mosip.mimoto.model.QRCodeType; +import io.mosip.mimoto.repository.WalletCredentialsRepository; +import io.mosip.mimoto.service.impl.DataShareServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.UUID; + +import static io.mosip.mimoto.exception.ErrorConstants.*; + +@Slf4j +@Component +public class CredentialProcessor { + @Autowired + private CredentialUtilService credentialUtilService; + + @Autowired + private DataShareServiceImpl dataShareService; + + @Autowired + private ObjectMapper objectMapper; + + @Autowired + private EncryptionDecryptionUtil encryptionDecryptionUtil; + + @Autowired + private WalletCredentialsRepository walletCredentialsRepository; + + public VerifiableCredential processAndStoreCredential( + IssuerConfig issuerConfig, String accessToken, String credentialType, + String walletId, String base64EncodedWalletKey, String credentialValidity, String issuerId) throws ExternalServiceUnavailableException { + + // Generate credential request + VCCredentialRequest vcCredentialRequest; + try { + vcCredentialRequest = credentialUtilService.generateVCCredentialRequest( + issuerConfig.getIssuerDTO(), issuerConfig.getWellKnownResponse(), + issuerConfig.getCredentialsSupportedResponse(), accessToken, walletId, base64EncodedWalletKey, true); + } catch (Exception e) { + log.error("Failed to generate VC credential request for issuerId: {}, credentialType: {}", issuerId, credentialType, e); + throw new CredentialProcessingException( + CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), + "Unable to generate credential request", e); + } + + // Download credential + VCCredentialResponse vcCredentialResponse; + try { + vcCredentialResponse = credentialUtilService.downloadCredential( + issuerConfig.getWellKnownResponse().getCredentialEndPoint(), + vcCredentialRequest, accessToken); + } catch (Exception e) { + log.error("Failed to download credential for issuerId: {}, credentialType: {}", issuerId, credentialType, e); + throw new ExternalServiceUnavailableException( + SERVER_UNAVAILABLE.getErrorCode(), + "Unable to download credential from issuer", e); + } + + // Verify credential + boolean verificationStatus; + try { + verificationStatus = issuerId.toLowerCase().contains("mock") || + credentialUtilService.verifyCredential(vcCredentialResponse); + } catch (VCVerificationException | JsonProcessingException e) { + log.error("Credential verification failed for issuerId: {}, credentialType: {}", issuerId, credentialType, e); + throw new VCVerificationException( + SIGNATURE_VERIFICATION_EXCEPTION.getErrorCode(), + "Credential verification failed"); + } + + if (!verificationStatus) { + log.error("Signature verification failed for issuerId: {}, credentialType: {}", issuerId, credentialType); + throw new VCVerificationException( + SIGNATURE_VERIFICATION_EXCEPTION.getErrorCode(), + SIGNATURE_VERIFICATION_EXCEPTION.getErrorMessage()); + } + + // Serialize and store credential + String vcResponseAsJsonString; + try { + vcResponseAsJsonString = objectMapper.writeValueAsString(vcCredentialResponse); + } catch (JsonProcessingException e) { + log.error("Failed to serialize credential response for issuerId: {}, credentialType: {}", issuerId, credentialType, e); + throw new CredentialProcessingException( + CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), + "Unable to serialize credential response", e); + } + + String dataShareUrl; + try { + dataShareUrl = QRCodeType.OnlineSharing.equals(issuerConfig.getIssuerDTO().getQr_code_type()) + ? dataShareService.storeDataInDataShare(vcResponseAsJsonString, credentialValidity) + : ""; + } catch (Exception e) { + log.error("Failed to store credential in data share for issuerId: {}, credentialType: {}", issuerId, credentialType, e); + throw new CredentialProcessingException( + CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), + "Unable to store credential in datashare", e); + } + + String encryptedCredentialData; + try { + encryptedCredentialData = encryptionDecryptionUtil.encryptCredential(vcResponseAsJsonString, base64EncodedWalletKey); + } catch (Exception e) { + log.error("Failed to encrypt credential for issuerId: {}, credentialType: {}", issuerId, credentialType, e); + throw new CredentialProcessingException( + CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), + "Unable to encrypt credential data", e); + } + + return saveCredential(walletId, encryptedCredentialData, issuerId, credentialType, dataShareUrl, credentialValidity); + } + + private VerifiableCredential saveCredential(String walletId, String encryptedCredential, String issuerId, + String credentialType, String dataShareUrl, String credentialValidity) { + CredentialMetadata credentialMetadata = new CredentialMetadata(); + credentialMetadata.setIssuerId(issuerId); + credentialMetadata.setCredentialType(credentialType); + credentialMetadata.setDataShareUrl(dataShareUrl); + credentialMetadata.setCredentialValidity(credentialValidity); + + VerifiableCredential verifiableCredential = new VerifiableCredential(); + verifiableCredential.setId(UUID.randomUUID().toString()); + verifiableCredential.setWalletId(walletId); + verifiableCredential.setCredential(encryptedCredential); + verifiableCredential.setCredentialMetadata(credentialMetadata); + + return walletCredentialsRepository.save(verifiableCredential); + } +} diff --git a/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java b/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java index a7f1ffcf7..9f657a933 100644 --- a/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java +++ b/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java @@ -121,7 +121,7 @@ public VCCredentialResponse downloadCredential(String credentialEndpoint, VCCred VCCredentialResponse vcCredentialResponse = restApiClient.postApi(credentialEndpoint, MediaType.APPLICATION_JSON, vcCredentialRequest, VCCredentialResponse.class, accessToken); log.debug("VC Credential Response is -> " + vcCredentialResponse); - if (vcCredentialResponse == null) throw new RuntimeException("VC Credential Issue API not accessible"); + if (vcCredentialResponse == null) throw new InvalidCredentialResourceException("VC Credential Issue API not accessible"); return vcCredentialResponse; } diff --git a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java index 5621ab949..9a7dcfd50 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java @@ -3,7 +3,10 @@ import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; import io.mosip.mimoto.dto.resident.WalletCredentialResponseDTO; -import io.mosip.mimoto.exception.*; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.CorruptedEncryptedDataException; +import io.mosip.mimoto.exception.DecryptionException; +import io.mosip.mimoto.exception.InvalidRequestException; import io.mosip.mimoto.service.WalletCredentialService; import io.mosip.mimoto.util.CredentialUtilService; import io.mosip.mimoto.util.WalletUtil; @@ -102,48 +105,16 @@ public void downloadCredentialTokenFetchFailureThrowsExternalServiceUnavailableE when(credentialUtilService.getTokenResponse(params, ISSUER_ID)) .thenThrow(new ApiNotAccessibleException("API Error")); - - try { - walletCredentialsController.downloadCredential(WALLET_ID, params, httpSession); - fail("Expected ExternalServiceUnavailableException"); - } catch (ExternalServiceUnavailableException e) { - // Expected - } - walletUtilMock.verify(() -> WalletUtil.validateWalletId(httpSession, WALLET_ID)); - verify(credentialUtilService).getTokenResponse(params, ISSUER_ID); - verify(walletCredentialService, never()).fetchAndStoreCredential(any(), any(), any(), any(), any(), any(), any()); - } - } - @Test - public void downloadCredentialServiceExceptionReturnsInternalServerError() throws Exception { - - try (var walletUtilMock = mockStatic(WalletUtil.class)) { - walletUtilMock.when(() -> WalletUtil.validateWalletId(httpSession, WALLET_ID)).thenAnswer(invocation -> null); - walletUtilMock.when(() -> WalletUtil.getSessionWalletKey(httpSession)).thenReturn(BASE64_ENCODED_WALLET_KEY); + walletCredentialsController.downloadCredential(WALLET_ID, params, httpSession); - Map params = new HashMap<>(); - params.put("issuer", ISSUER_ID); - params.put("credential", CREDENTIAL_TYPE); - - TokenResponseDTO tokenResponse = new TokenResponseDTO(); - when(credentialUtilService.getTokenResponse(params, ISSUER_ID)).thenReturn(tokenResponse); - when(walletCredentialService.fetchAndStoreCredential(any(), any(), any(), any(), any(), any(), any())) - .thenThrow(new RuntimeException("Service Error")); - - - ResponseEntity response = walletCredentialsController - .downloadCredential(WALLET_ID, params, httpSession); - - - assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode()); walletUtilMock.verify(() -> WalletUtil.validateWalletId(httpSession, WALLET_ID)); - walletUtilMock.verify(() -> WalletUtil.getSessionWalletKey(httpSession)); verify(credentialUtilService).getTokenResponse(params, ISSUER_ID); - verify(walletCredentialService).fetchAndStoreCredential(any(), any(), any(), any(), any(), any(), any()); + verify(walletCredentialService, never()).fetchAndStoreCredential(any(), any(), any(), any(), any(), any(), any()); } } + @Test public void fetchAllCredentialsForGivenWalletSuccess() { diff --git a/src/test/java/io/mosip/mimoto/service/CredentialUtilServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialUtilServiceTest.java index 12692c1ca..2fb76895b 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialUtilServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialUtilServiceTest.java @@ -122,7 +122,7 @@ public void shouldThrowExceptionOnFetchingCredentialFromCredentialEndpointFailur VCCredentialRequest vcCredentialRequest = getVCCredentialRequestDTO(); Mockito.when(restApiClient.postApi(issuerWellKnownResponse.getCredentialEndPoint(), MediaType.APPLICATION_JSON, vcCredentialRequest, VCCredentialResponse.class, "test-access-token")).thenReturn(null); String credentialEndpoint = issuerWellKnownResponse.getCredentialEndPoint(); - expectedExceptionMsg = "VC Credential Issue API not accessible"; + expectedExceptionMsg = "resource_not_found --> VC Credential Issue API not accessible"; RuntimeException actualException = assertThrows(RuntimeException.class, () -> { diff --git a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java index a50fca655..1865e2552 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java @@ -15,6 +15,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.*; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.web.client.RestTemplate; @@ -25,6 +26,7 @@ import static io.mosip.mimoto.util.TestUtilities.*; import static org.junit.Assert.*; import static org.mockito.Mockito.*; +import static org.mockito.Mockito.when; @RunWith(SpringRunner.class) public class WalletCredentialServiceTest { @@ -35,7 +37,8 @@ public class WalletCredentialServiceTest { @Mock private IssuersService issuersService; @Mock - private DataShareServiceImpl dataShareService; + private CredentialProcessor credentialProcessor; + @Mock private ObjectMapper objectMapper; @Mock @@ -65,7 +68,6 @@ public class WalletCredentialServiceTest { @Before public void setUp() { - walletCredentialService.init(); issuerConfig = getCredentialIssuerConfigurationResponseDto(issuerId, credentialType, List.of()); vcRequest = getVCCredentialRequestDTO(); tokenResponse = new TokenResponseDTO(); @@ -104,6 +106,7 @@ public void shouldFetchAndStoreCredentialSuccessfully() throws Exception { when(credentialUtilService.verifyCredential(any())).thenReturn(true); when(encryptionDecryptionUtil.encryptWithAES(any(), any())).thenReturn(encryptedCredential); when(walletCredentialsRepository.save(any())).thenReturn(vc); + when(credentialProcessor.processAndStoreCredential(any(),eq(accessToken), eq(credentialType), eq(walletId), eq(base64Key), any(), eq(issuerId))).thenReturn(vc); VerifiableCredentialResponseDTO actualVerifiableCredentialResponseDTO = walletCredentialService.fetchAndStoreCredential( issuerId, credentialType, tokenResponse, "1", "en", walletId, base64Key @@ -120,7 +123,7 @@ public void shouldThrowExceptionWhenDuplicateCredentialExists() { walletCredentialService.fetchAndStoreCredential("Mosip", credentialType, tokenResponse, "1", "en", walletId, base64Key) ); - assertEquals("A credential is already downloaded for the selected Issuer and Credential Type. Only one is allowed, so download will not be initiated", exception.getMessage()); + assertEquals("invalid_request --> A credential is already downloaded for the selected Issuer and Credential Type. Only one is allowed", exception.getMessage()); } @Test @@ -153,30 +156,6 @@ public void shouldIncludeEmptyCredentialDetailsInResponseIfAnyErrorOccurredWhile assertEquals(expectedCredentialsList, actualCredentialList); } - @Test - public void shouldThrowExceptionOnVerificationFailureDuringVCDownloaded() throws Exception { - VCCredentialResponse vcResponse = new VCCredentialResponse(); - String encryptedCredential = "encryptedCredential"; - VCVerificationException expectedException = new VCVerificationException(SIGNATURE_VERIFICATION_EXCEPTION.getErrorCode(), - SIGNATURE_VERIFICATION_EXCEPTION.getErrorMessage()); - VerifiableCredential vc = getVerifiableCredential("vc-id-123", walletId, "encryptedCredential", issuerId, credentialType); - - when(issuersService.getIssuerDetails(issuerId)).thenReturn(getMockIssuerDTO()); - when(issuersService.getIssuerConfiguration(issuerId)).thenReturn(issuerConfig); - when(credentialUtilService.generateVCCredentialRequest(any(), any(), any(), eq(accessToken), eq(walletId), eq(base64Key), eq(true))).thenReturn(vcRequest); - when(credentialUtilService.downloadCredential(anyString(), eq(vcRequest), eq(accessToken))).thenReturn(vcResponse); - when(credentialUtilService.verifyCredential(any())).thenReturn(false); - when(encryptionDecryptionUtil.encryptWithAES(any(), any())).thenReturn(encryptedCredential); - when(walletCredentialsRepository.save(any())).thenReturn(vc); - - VCVerificationException actualException = assertThrows(VCVerificationException.class, () -> walletCredentialService.fetchAndStoreCredential( - issuerId, credentialType, tokenResponse, "1", "en", walletId, base64Key - )); - - assertEquals(expectedException.getErrorCode(), actualException.getErrorCode()); - assertEquals(expectedException.getErrorText(), actualException.getErrorText()); - } - @Test public void shouldFetchVerifiableCredentialSuccessfully() throws Exception { String credentialId = "cred123"; From 4d834911f99d4ebdd8324befc664be97d6cc50b6 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 28 Apr 2025 10:56:57 +0530 Subject: [PATCH 560/860] INJIWEB-1528 fixed the error codes and refactored code Signed-off-by: Gurpreet41082 --- .../controller/TokenAuthController.java | 43 +- .../mimoto/controller/UsersController.java | 21 +- .../WalletCredentialsController.java | 209 ++++++--- .../mimoto/controller/WalletsController.java | 98 +++- .../mosip/mimoto/dto/WalletResponseDto.java | 2 + .../resident/WalletCredentialResponseDTO.java | 2 + .../mimoto/exception/EncryptionException.java | 5 + .../mimoto/exception/ErrorConstants.java | 3 +- .../OAuth2AuthenticationSuccessHandler.java | 10 +- .../mimoto/service/EncryptionService.java | 9 + .../mosip/mimoto/service/IssuersService.java | 2 + .../io/mosip/mimoto/service/TokenDecoder.java | 8 + .../mimoto/service/TokenServiceFactory.java | 31 ++ .../mimoto/service/UserMetadataService.java | 89 ++-- .../service/WalletCredentialService.java | 54 ++- .../mosip/mimoto/service/WalletService.java | 36 +- .../service/impl/EncryptionServiceImpl.java | 32 ++ .../service/impl/GoogleTokenDecoder.java | 31 ++ .../service/impl/GoogleTokenService.java | 107 +++-- .../service/impl/IssuersServiceImpl.java | 29 +- .../service/impl/SecurityContextManager.java | 25 + .../mimoto/service/impl/SessionManager.java | 17 + .../impl/WalletCredentialServiceImpl.java | 217 +++------ .../service/impl/WalletServiceImpl.java | 51 +- .../mimoto/util/CredentialProcessor.java | 124 ++++- .../mimoto/util/CredentialUtilService.java | 54 +++ .../mimoto/util/EncryptionDecryptionUtil.java | 424 ++++++++++++----- .../WalletCredentialResponseDTOFactory.java | 27 +- .../java/io/mosip/mimoto/util/WalletUtil.java | 1 + .../io/mosip/mimoto/util/WalletValidator.java | 47 +- .../resources/application-default.properties | 4 + .../controller/UsersControllerTest.java | 250 +++++----- .../WalletCredentialsControllerTest.java | 441 +++++++++++------- ...Auth2AuthenticationSuccessHandlerTest.java | 8 +- .../security/oauth2/OAuth2LoginTests.java | 259 ---------- .../service/GoogleTokenServiceTest.java | 117 +++-- .../service/TokenServiceFactoryTest.java | 96 ++++ .../service/UserMetadataServiceTest.java | 134 ++++-- .../service/WalletCredentialServiceTest.java | 381 +++++++-------- .../mimoto/service/WalletServiceTest.java | 38 +- .../io/mosip/mimoto/util/WalletUtilTest.java | 3 +- .../mimoto/util/WalletValidatorTest.java | 33 +- 42 files changed, 2132 insertions(+), 1440 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/service/EncryptionService.java create mode 100644 src/main/java/io/mosip/mimoto/service/TokenDecoder.java create mode 100644 src/main/java/io/mosip/mimoto/service/TokenServiceFactory.java create mode 100644 src/main/java/io/mosip/mimoto/service/impl/EncryptionServiceImpl.java create mode 100644 src/main/java/io/mosip/mimoto/service/impl/GoogleTokenDecoder.java create mode 100644 src/main/java/io/mosip/mimoto/service/impl/SecurityContextManager.java create mode 100644 src/main/java/io/mosip/mimoto/service/impl/SessionManager.java delete mode 100644 src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java create mode 100644 src/test/java/io/mosip/mimoto/service/TokenServiceFactoryTest.java diff --git a/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java b/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java index a667569bf..7a52d3323 100644 --- a/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java +++ b/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java @@ -3,6 +3,7 @@ import io.mosip.mimoto.constant.SwaggerLiteralConstants; import io.mosip.mimoto.exception.OAuth2AuthenticationException; import io.mosip.mimoto.service.TokenService; +import io.mosip.mimoto.service.TokenServiceFactory; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.ExampleObject; import jakarta.servlet.http.HttpServletRequest; @@ -28,8 +29,18 @@ @Tag(name = SwaggerLiteralConstants.ID_TOKEN_AUTHENTICATION_NAME, description = SwaggerLiteralConstants.ID_TOKEN_AUTHENTICATION_DESCRIPTION) public class TokenAuthController { + private static final String BEARER_PREFIX = "Bearer "; + private static final String SESSION_CREATED = "Session created."; + private static final String INVALID_TOKEN_MESSAGE = "Bearer ID token required."; + private static final String UNSUPPORTED_PROVIDER_MESSAGE = "Unsupported provider: %s"; + private static final String INVALID_TOKEN_ERROR = "Invalid or expired ID token: %s"; + + private final TokenServiceFactory tokenServiceFactory; + @Autowired - private Map tokenServices; // Map of provider name to TokenService + public TokenAuthController(TokenServiceFactory tokenServiceFactory) { + this.tokenServiceFactory = tokenServiceFactory; + } @Operation(summary = "Login and create session using OAuth2 ID token", description = "This API accepts an OAuth2 ID token in the Authorization header and establishes a session by populating Spring Security context.\n\nFetch the ID token from a supported OAuth2 provider (such as Google or Microsoft) and provide it in the request as a Bearer token.", operationId = "loginWithOAuth2IdToken", security = @SecurityRequirement(name = "bearerAuth"), parameters = {@Parameter(name = "provider", in = ParameterIn.PATH, required = true, description = "The OAuth2 provider to use for login. Example values: 'google', 'microsoft', 'facebook'.", schema = @Schema(type = "string", example = "google")), @Parameter(name = "Authorization", in = ParameterIn.HEADER, required = true, description = "The OAuth2 ID token that must be provided in the 'Authorization' header, prefixed with 'Bearer '.", schema = @Schema(type = "string", example = "Bearer "))}) @ApiResponse(responseCode = "200", description = "Successfully logged in and session created", content = @Content(mediaType = "application/json", schema = @Schema(type = "string", description = "Success message indicating that the session has been created"), examples = @ExampleObject(value = "\"Session created.\""))) @@ -37,19 +48,23 @@ public class TokenAuthController { @ApiResponse(responseCode = "400", description = "Bad Request - Unsupported provider", content = @Content(mediaType = "application/json", schema = @Schema(type = "string", description = "Error message explaining why the session is not created"), examples = @ExampleObject(value = "\"Unsupported provider: provider123\""))) @PostMapping("/auth/{provider}/token-login") public ResponseEntity createSessionFromIdToken(@RequestHeader("Authorization") String authorization, @PathVariable("provider") String provider, HttpServletRequest request, HttpServletResponse response) { - if (authorization != null && authorization.startsWith("Bearer ")) { - String idTokenString = authorization.substring(7); - try { - TokenService tokenService = tokenServices.get(provider); // Select TokenService by provider - if (tokenService == null) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Unsupported provider: " + provider); - } - tokenService.processToken(idTokenString, provider, request, response); - return ResponseEntity.ok(" Session created."); - } catch (OAuth2AuthenticationException e) { - return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("Invalid or expired ID token: " + e.getMessage()); - } + if (!tokenServiceFactory.isSupportedProvider(provider)) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(String.format(UNSUPPORTED_PROVIDER_MESSAGE, provider)); + } + if (authorization == null || !authorization.startsWith(BEARER_PREFIX)) { + return ResponseEntity.status(HttpStatus.UNAUTHORIZED) + .body(INVALID_TOKEN_MESSAGE); + } + + String idToken = authorization.substring(BEARER_PREFIX.length()); + try { + TokenService tokenService = tokenServiceFactory.getTokenService(provider); + tokenService.processToken(idToken, provider, request, response); + return ResponseEntity.ok(SESSION_CREATED); + } catch (OAuth2AuthenticationException e) { + return ResponseEntity.status(HttpStatus.UNAUTHORIZED) + .body(String.format(INVALID_TOKEN_ERROR, e.getMessage())); } - return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("Bearer ID token required."); } } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/controller/UsersController.java b/src/main/java/io/mosip/mimoto/controller/UsersController.java index 066c6feb0..7afc66357 100644 --- a/src/main/java/io/mosip/mimoto/controller/UsersController.java +++ b/src/main/java/io/mosip/mimoto/controller/UsersController.java @@ -1,15 +1,16 @@ package io.mosip.mimoto.controller; +import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.constant.SwaggerExampleConstants; import io.mosip.mimoto.constant.SwaggerLiteralConstants; -import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.dbentity.UserMetadata; import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; +import io.mosip.mimoto.exception.DecryptionException; import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.exception.OAuth2AuthenticationException; import io.mosip.mimoto.repository.UserMetadataRepository; -import io.mosip.mimoto.util.EncryptionDecryptionUtil; +import io.mosip.mimoto.service.EncryptionService; import io.mosip.mimoto.util.Utilities; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; @@ -41,7 +42,7 @@ public class UsersController { private UserMetadataRepository userMetadataRepository; @Autowired - private EncryptionDecryptionUtil encryptionDecryptionUtill; + private EncryptionService encryptionService; @Operation(summary = "Retrieve user metadata from the database", description = "This API is secured using session-based authentication. When a request is made, the server retrieves the session ID from the Cookie header and uses it to fetch session details from Redis. From the session, it extracts the user's unique identifier (typically the sub field provided by the identity provider) along with the clientRegistrationId. These values are then used to retrieve the user's metadata from the database. If successful, the API returns the user's profile information. If any issue occurs such as missing user data or server error then an appropriate error response is returned.", operationId = "getUserProfileFromDB", security = @SecurityRequirement(name = "SessionAuth")) @ApiResponse(responseCode = "200", description = "User profile retrieved successfully from the Database", content = @Content(mediaType = "application/json", schema = @Schema(implementation = UserMetadataDTO.class), examples = @ExampleObject(name = "Success response", value = SwaggerExampleConstants.FETCH_USER_PROFILE_SUCCESS))) @@ -59,12 +60,14 @@ public ResponseEntity getUserProfile(Authentication authenticat return Utilities.getErrorResponseEntityWithoutWrapper(exception, ErrorConstants.INVALID_USER.getErrorCode(), exception.getStatus(), null); } - UserMetadataDTO userMetadataDTO = new UserMetadataDTO(encryptionDecryptionUtill.decrypt(userMetadata.getDisplayName(), - EncryptionDecryptionUtil.USER_PII_KEY_REFERENCE_ID, "", ""), - encryptionDecryptionUtill.decrypt(userMetadata.getProfilePictureUrl(), - EncryptionDecryptionUtil.USER_PII_KEY_REFERENCE_ID, "", ""), - encryptionDecryptionUtill.decrypt(userMetadata.getEmail(), EncryptionDecryptionUtil.USER_PII_KEY_REFERENCE_ID, - "", "")); + UserMetadataDTO userMetadataDTO = null; + try { + userMetadataDTO = new UserMetadataDTO(encryptionService.decrypt(userMetadata.getDisplayName()), + encryptionService.decrypt(userMetadata.getProfilePictureUrl()), + encryptionService.decrypt(userMetadata.getEmail())); + } catch (DecryptionException e) { + throw new RuntimeException(e); + } return ResponseEntity.status(HttpStatus.OK).body(userMetadataDTO); diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index fea106835..8188547cf 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -1,6 +1,8 @@ package io.mosip.mimoto.controller; +import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.constant.SwaggerLiteralConstants; +import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; import io.mosip.mimoto.dto.resident.WalletCredentialResponseDTO; @@ -8,18 +10,19 @@ import io.mosip.mimoto.service.WalletCredentialService; import io.mosip.mimoto.util.CredentialUtilService; import io.mosip.mimoto.util.Utilities; -import io.mosip.mimoto.util.WalletUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.media.ArraySchema; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.parameters.RequestBody; import jakarta.servlet.http.HttpSession; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Pattern; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.InputStreamResource; @@ -33,101 +36,191 @@ import java.util.List; import java.util.Map; +import static io.mosip.mimoto.exception.ErrorConstants.CREDENTIAL_DOWNLOAD_EXCEPTION; + +/** + * REST controller for managing wallet credentials. + */ @Slf4j @RestController @RequestMapping(value = "/wallets/{walletId}/credentials") @Tag(name = SwaggerLiteralConstants.WALLET_CREDENTIALS_NAME, description = SwaggerLiteralConstants.WALLET_CREDENTIALS_DESCRIPTION) public class WalletCredentialsController { - @Autowired - private WalletCredentialService walletCredentialService; + + private final WalletCredentialService walletCredentialService; + private final CredentialUtilService credentialUtilService; @Autowired - private CredentialUtilService credentialUtilService; + public WalletCredentialsController(WalletCredentialService walletCredentialService, + CredentialUtilService credentialUtilService) { + this.walletCredentialService = walletCredentialService; + this.credentialUtilService = credentialUtilService; + } - @Operation(summary = "Download a Verifiable Credential", description = "This API allows the user to download a Verifiable Credential by providing the wallet ID and various query parameters such as issuer, credential type, storage expiry, and locale. The user's session is authenticated, and the requested credential is fetched and stored in the wallet. If successful, the API returns the Verifiable Credential details, otherwise, an appropriate error response is returned.", operationId = "downloadCredential", security = @SecurityRequirement(name = "SessionAuth"), parameters = {@Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet from which the credential will be downloaded", schema = @Schema(type = "string")), @Parameter(name = "issuer", in = ParameterIn.QUERY, required = false, description = "The identifier of the issuer of the credential", schema = @Schema(type = "string")), @Parameter(name = "credential", in = ParameterIn.QUERY, required = false, description = "The type of the credential to be downloaded", schema = @Schema(type = "string")), @Parameter(name = "vcStorageExpiryLimitInTimes", in = ParameterIn.QUERY, required = false, description = "The expiration limit for the Verifiable Credential storage", schema = @Schema(type = "string", defaultValue = "-1")), @Parameter(name = "locale", in = ParameterIn.QUERY, required = false, description = "The locale for the Verifiable Credential", schema = @Schema(type = "string"))}, requestBody = @RequestBody()) + /** + * Downloads and stores a Verifiable Credential in the specified wallet. + * + * @param walletId The unique identifier of the wallet. + * @param params Query parameters including issuer, credential type, storage expiry, and locale. + * @param httpSession The HTTP session containing wallet key and ID. + * @return The stored Verifiable Credential details. + * @throws InvalidRequestException If input parameters or session are invalid. + * @throws CredentialProcessingException If credential processing fails. + */ + @Operation(summary = "Download a Verifiable Credential", description = "This API allows downloading a Verifiable Credential by providing the wallet ID and query parameters such as issuer, credential type, storage expiry, and locale. The user's session is authenticated, and the credential is fetched and stored in the wallet. If successful, the Verifiable Credential details are returned; otherwise, an appropriate error response is provided.", operationId = "downloadCredential", security = @SecurityRequirement(name = "SessionAuth"), parameters = { + @Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet", schema = @Schema(type = "string")), + @Parameter(name = "issuer", in = ParameterIn.QUERY, required = true, description = "The identifier of the issuer", schema = @Schema(type = "string")), + @Parameter(name = "credential", in = ParameterIn.QUERY, required = true, description = "The type of the credential", schema = @Schema(type = "string")), + @Parameter(name = "vcStorageExpiryLimitInTimes", in = ParameterIn.QUERY, required = false, description = "The expiration limit for the Verifiable Credential storage", schema = @Schema(type = "string", defaultValue = "-1")), + @Parameter(name = "locale", in = ParameterIn.QUERY, required = false, description = "The locale for the Verifiable Credential", schema = @Schema(type = "string", defaultValue = "en")) + }) @ApiResponse(responseCode = "200", description = "Verifiable Credential downloaded successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = VerifiableCredentialResponseDTO.class))) - @ApiResponse(responseCode = "400", description = "Bad Request - Invalid parameters or session", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-052\", \"errorMessage\": \"Exception occurred while fetching credential types\"}"))) - @ApiResponse(responseCode = "500", description = "Internal Server Error - Error occurred while fetching or storing the credential", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-052\", \"errorMessage\": \"Exception occurred while saving the credential\"}"))) + @ApiResponse(responseCode = "400", description = "Bad Request - Invalid parameters or session", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-052\", \"errorMessage\": \"Invalid wallet ID or missing parameters\"}"))) + @ApiResponse(responseCode = "500", description = "Internal Server Error - Error occurred while processing credential", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-054\", \"errorMessage\": \"Error occurred while saving the credential\"}"))) + @ApiResponse(responseCode = "503", description = "Service Unavailable - Error occurred while fetching token", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-052\", \"errorMessage\": \"Failed to fetch token response\"}"))) @PostMapping - public ResponseEntity downloadCredential(@PathVariable("walletId") String walletId, @RequestParam Map params, HttpSession httpSession) { - //TODO: remove this default value after the apitest is updated + public ResponseEntity downloadCredential( + @PathVariable("walletId") @NotBlank(message = "Wallet ID cannot be blank") String walletId, + @RequestParam Map params, + HttpSession httpSession) throws InvalidRequestException, CredentialProcessingException { params.putIfAbsent("vcStorageExpiryLimitInTimes", "-1"); + params.putIfAbsent("locale", "en"); + + String storedWalletId = (String) httpSession.getAttribute(SessionKeys.WALLET_ID); + if (!walletId.equals(storedWalletId)) { + log.error("Wallet ID mismatch: provided {}, stored {}", walletId, storedWalletId); + throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Wallet ID mismatch"); + } + String base64EncodedWalletKey = (String) httpSession.getAttribute(SessionKeys.WALLET_KEY); + if (base64EncodedWalletKey == null) { + log.error("Wallet key not found in session"); + throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Wallet key not found in session"); + } - WalletUtil.validateWalletId(httpSession, walletId); - String base64EncodedWalletKey = WalletUtil.getSessionWalletKey(httpSession); String issuerId = params.get("issuer"); String credentialType = params.get("credential"); String credentialValidity = params.get("vcStorageExpiryLimitInTimes"); String locale = params.get("locale"); - TokenResponseDTO response = null; + + if (issuerId == null || issuerId.isBlank() || credentialType == null || credentialType.isBlank()) { + log.error("Missing required parameters: issuer or credential"); + throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Issuer and credential type are required"); + } + + log.info("Initiating token call for issuer: {}", issuerId); + TokenResponseDTO tokenResponse; try { - log.info("Initiated Token Call"); - response = credentialUtilService.getTokenResponse(params, issuerId); + tokenResponse = credentialUtilService.getTokenResponse(params, issuerId); } catch (ApiNotAccessibleException | IOException | AuthorizationServerWellknownResponseException | InvalidWellknownResponseException e) { - log.error("Error occurred while fetching token response: {}", issuerId, e); - return Utilities.getErrorResponseEntityWithoutWrapper( - e, ErrorConstants.SERVER_UNAVAILABLE.getErrorCode(), HttpStatus.SERVICE_UNAVAILABLE, MediaType.APPLICATION_JSON); + log.error("Error fetching token response for issuer: {}", issuerId, e); + return Utilities.getErrorResponseEntityFromPlatformErrorMessage( + CREDENTIAL_DOWNLOAD_EXCEPTION, HttpStatus.SERVICE_UNAVAILABLE, MediaType.APPLICATION_JSON); } - log.info("Initiated call for fetching and storing Verifiable Credential in the database for walletId: {}", walletId); + log.info("Fetching and storing Verifiable Credential for walletId: {}", walletId); + VerifiableCredentialResponseDTO credentialResponseDTO = null; try { - VerifiableCredentialResponseDTO credentialResponseDTO = walletCredentialService.fetchAndStoreCredential(issuerId, credentialType, response, credentialValidity, locale, walletId, base64EncodedWalletKey); - return ResponseEntity.status(HttpStatus.OK).body(credentialResponseDTO); + credentialResponseDTO = walletCredentialService.fetchAndStoreCredential( + issuerId, credentialType, tokenResponse, credentialValidity, locale, walletId, base64EncodedWalletKey); } catch (ExternalServiceUnavailableException e) { return Utilities.getErrorResponseEntityWithoutWrapper( e, e.getErrorCode(), HttpStatus.SERVICE_UNAVAILABLE, MediaType.APPLICATION_JSON); } - + return ResponseEntity.status(HttpStatus.OK).body(credentialResponseDTO); } - @Operation(summary = "Fetch all credentials for a given wallet", description = "This API retrieves all credentials associated with the specified wallet. The wallet is identified using its unique wallet ID, and the credentials are returned based on the provided locale. The user's session is authenticated to ensure access to the wallet. If successful, the API returns a list of Verifiable Credentials. Otherwise, an appropriate error response is returned.", operationId = "fetchAllCredentialsForGivenWallet", security = @SecurityRequirement(name = "SessionAuth"), parameters = {@Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet for which credentials will be fetched", schema = @Schema(type = "string")), @Parameter(name = "locale", in = ParameterIn.QUERY, required = true, description = "The locale to be used for credential retrieval", schema = @Schema(type = "string"))}) - @ApiResponse(responseCode = "200", description = "Successfully retrieved all credentials for the wallet", content = @Content(mediaType = "application/json", schema = @Schema(implementation = VerifiableCredentialResponseDTO.class))) - @ApiResponse(responseCode = "400", description = "Bad Request - Invalid wallet ID or missing parameters", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-053\", \"errorMessage\": \"Invalid wallet ID or missing parameters\"}"))) - @ApiResponse(responseCode = "500", description = "Internal Server Error - Error occurred while fetching credentials from the database", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-054\", \"errorMessage\": \"Error occurred while fetching credentials for wallet\"}"))) + /** + * Fetches all credentials for a given wallet. + * + * @param walletId The unique identifier of the wallet. + * @param locale The locale for credential retrieval. + * @param httpSession The HTTP session containing wallet key and ID. + * @return List of Verifiable Credential details. + * @throws InvalidRequestException If session or wallet ID is invalid. + * @throws CredentialProcessingException If fetching credentials fails. + */ + @Operation(summary = "Fetch all credentials for a given wallet", description = "This API retrieves all credentials associated with the specified wallet, identified by its unique wallet ID. The credentials are returned based on the provided locale. The user's session is authenticated to ensure access to the wallet. If successful, a list of Verifiable Credentials is returned; otherwise, an appropriate error response is returned.", operationId = "fetchAllCredentialsForGivenWallet", security = @SecurityRequirement(name = "SessionAuth"), parameters = { + @Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet", schema = @Schema(type = "string")), + @Parameter(name = "locale", in = ParameterIn.QUERY, required = false, description = "The locale for credential retrieval", schema = @Schema(type = "string", defaultValue = "en")) + }) + @ApiResponse(responseCode = "200", description = "Successfully retrieved all credentials for the wallet", content = @Content(mediaType = "application/json", array = @ArraySchema(schema = @Schema(implementation = VerifiableCredentialResponseDTO.class)))) + @ApiResponse(responseCode = "400", description = "Bad Request - Invalid wallet ID or session", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-053\", \"errorMessage\": \"Invalid wallet ID or missing parameters\"}"))) + @ApiResponse(responseCode = "500", description = "Internal Server Error - Error occurred while fetching credentials", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-054\", \"errorMessage\": \"Error occurred while fetching credentials for wallet\"}"))) @GetMapping - public ResponseEntity> fetchAllCredentialsForGivenWallet(@PathVariable("walletId") String walletId, @RequestParam("locale") String locale, HttpSession httpSession) { - log.info("Fetching all credentials for walletId: {}", walletId); - - WalletUtil.validateWalletId(httpSession, walletId); - String base64EncodedWalletKey = WalletUtil.getSessionWalletKey(httpSession); + public ResponseEntity> fetchAllCredentialsForGivenWallet( + @PathVariable("walletId") @NotBlank(message = "Wallet ID cannot be blank") String walletId, + @RequestParam(value = "locale", defaultValue = "en") @Pattern(regexp = "^[a-z]{2}$", message = "Locale must be a 2-letter code") String locale, + HttpSession httpSession) throws InvalidRequestException, CredentialProcessingException { + String storedWalletId = (String) httpSession.getAttribute(SessionKeys.WALLET_ID); + if (!walletId.equals(storedWalletId)) { + log.error("Wallet ID mismatch: provided {}, stored {}", walletId, storedWalletId); + throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Wallet ID mismatch"); + } + String base64EncodedWalletKey = (String) httpSession.getAttribute(SessionKeys.WALLET_KEY); + if (base64EncodedWalletKey == null) { + log.error("Wallet key not found in session"); + throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Wallet key not found in session"); + } - List credentials = walletCredentialService.fetchAllCredentialsForWallet(walletId, base64EncodedWalletKey, locale); + log.info("Fetching all credentials for walletId: {}", walletId); + List credentials = walletCredentialService.fetchAllCredentialsForWallet( + walletId, base64EncodedWalletKey, locale); return ResponseEntity.status(HttpStatus.OK).body(credentials); - } - @Operation(summary = "Fetch a specific Verifiable Credential", description = "This API retrieves a specific Verifiable Credential from the given wallet. The wallet and credential are identified by their respective IDs, and the locale parameter is used for localization. The action parameter determines whether the credential should be displayed inline or downloaded. The user's session is authenticated to ensure access to the wallet. If successful, the credential is returned as a PDF file. Otherwise, an appropriate error response is returned.", operationId = "getVerifiableCredential", security = @SecurityRequirement(name = "SessionAuth"), parameters = {@Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet from which the credential will be fetched", schema = @Schema(type = "string")), @Parameter(name = "credentialId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the Verifiable Credential to be fetched", schema = @Schema(type = "string")), @Parameter(name = "locale", in = ParameterIn.QUERY, required = true, description = "The locale to be used for credential retrieval", schema = @Schema(type = "string")), @Parameter(name = "action", in = ParameterIn.QUERY, required = false, description = "Determines whether the credential is displayed inline or downloaded. Default is inline.", schema = @Schema(type = "string", defaultValue = "inline"))}) + /** + * Fetches a specific Verifiable Credential as a PDF. + * + * @param walletId The unique identifier of the wallet. + * @param credentialId The unique identifier of the credential. + * @param locale The locale for credential retrieval. + * @param action The action (inline or download) for PDF display. + * @param httpSession The HTTP session containing wallet key and ID. + * @return The Verifiable Credential as a PDF stream. + * @throws InvalidRequestException If session or parameters are invalid. + * @throws CredentialNotFoundException If the credential is not found. + * @throws CredentialProcessingException If processing fails. + */ + @Operation(summary = "Fetch a specific Verifiable Credential", description = "This API retrieves a specific Verifiable Credential from the given wallet, identified by wallet and credential IDs. The locale parameter is used for localization, and the action parameter determines whether the credential is displayed inline or downloaded as a PDF. The user's session is authenticated to ensure access. If successful, the credential is returned as a PDF file; otherwise, an appropriate error response is returned.", operationId = "getVerifiableCredential", security = @SecurityRequirement(name = "SessionAuth"), parameters = { + @Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet", schema = @Schema(type = "string")), + @Parameter(name = "credentialId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the Verifiable Credential", schema = @Schema(type = "string")), + @Parameter(name = "locale", in = ParameterIn.QUERY, required = false, description = "The locale for credential retrieval", schema = @Schema(type = "string", defaultValue = "en")), + @Parameter(name = "action", in = ParameterIn.QUERY, required = false, description = "Determines whether the credential is displayed inline or downloaded. Default is inline.", schema = @Schema(type = "string", defaultValue = "inline")) + }) @ApiResponse(responseCode = "200", description = "Successfully fetched the Verifiable Credential", content = @Content(mediaType = "application/pdf", examples = @ExampleObject(value = "{ \"credentialId\": \"123e4567-e89b-12d3-a456-426614174000\", \"fileName\": \"credential.pdf\" }"))) - @ApiResponse(responseCode = "400", description = "Bad Request - Invalid wallet ID, credential ID or missing parameters", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-053\", \"errorMessage\": \"Invalid wallet or credential ID\"}"))) - @ApiResponse(responseCode = "500", description = "Internal Server Error - Error occurred while fetching the Verifiable Credential", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-054\", \"errorMessage\": \"Error occurred while fetching the Verifiable Credential\"}"))) + @ApiResponse(responseCode = "400", description = "Bad Request - Invalid wallet ID, credential ID, or session", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-053\", \"errorMessage\": \"Invalid wallet or credential ID\"}"))) + @ApiResponse(responseCode = "404", description = "Credential not found", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-053\", \"errorMessage\": \"Credential not found\"}"))) + @ApiResponse(responseCode = "500", description = "Internal Server Error - Error occurred while processing credential", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-054\", \"errorMessage\": \"Error occurred while fetching the Verifiable Credential\"}"))) @GetMapping("/{credentialId}") - public ResponseEntity getVerifiableCredential(@PathVariable("walletId") String walletId, @PathVariable("credentialId") String credentialId, @RequestParam("locale") String locale, @RequestParam(value = "action", defaultValue = "inline") String action, HttpSession httpSession) { + public ResponseEntity getVerifiableCredential( + @PathVariable("walletId") @NotBlank(message = "Wallet ID cannot be blank") String walletId, + @PathVariable("credentialId") @NotBlank(message = "Credential ID cannot be blank") String credentialId, + @RequestParam(value = "locale", defaultValue = "en") @Pattern(regexp = "^[a-z]{2}$", message = "Locale must be a 2-letter code") String locale, + @RequestParam(value = "action", defaultValue = "inline") @Pattern(regexp = "^(inline|download)$", message = "Action must be 'inline' or 'download'") String action, + HttpSession httpSession) throws InvalidRequestException, CredentialNotFoundException, CredentialProcessingException { + String storedWalletId = (String) httpSession.getAttribute(SessionKeys.WALLET_ID); + if (!walletId.equals(storedWalletId)) { + log.error("Wallet ID mismatch: provided {}, stored {}", walletId, storedWalletId); + throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Wallet ID mismatch"); + } + String base64EncodedWalletKey = (String) httpSession.getAttribute(SessionKeys.WALLET_KEY); + if (base64EncodedWalletKey == null) { + log.error("Wallet key not found in session"); + throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Wallet key not found in session"); + } log.info("Fetching credentialId: {} from walletId: {}", credentialId, walletId); - - WalletUtil.validateWalletId(httpSession, walletId); - String base64EncodedWalletKey = WalletUtil.getSessionWalletKey(httpSession); - - WalletCredentialResponseDTO walletCredentialResponseDTO = null; - try { - walletCredentialResponseDTO = walletCredentialService.fetchVerifiableCredential(walletId, credentialId, base64EncodedWalletKey, locale); - } catch (CredentialNotFoundException e) { - return Utilities.getErrorResponseEntityWithoutWrapper(e, e.getErrorCode(), HttpStatus.NOT_FOUND, MediaType.APPLICATION_JSON); - } catch (DecryptionException e) { - return Utilities.getErrorResponseEntityWithoutWrapper(e, e.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); - } catch (CorruptedEncryptedDataException e) { - return Utilities.getErrorResponseEntityWithoutWrapper(e, e.getErrorCode(), HttpStatus.UNPROCESSABLE_ENTITY, MediaType.APPLICATION_JSON); - } catch (ExternalServiceUnavailableException e) { - return Utilities.getErrorResponseEntityWithoutWrapper( - e, e.getErrorCode(), HttpStatus.SERVICE_UNAVAILABLE, MediaType.APPLICATION_JSON); - } + WalletCredentialResponseDTO walletCredentialResponseDTO = walletCredentialService.fetchVerifiableCredential( + walletId, credentialId, base64EncodedWalletKey, locale); String dispositionType = "download".equalsIgnoreCase(action) ? "attachment" : "inline"; String contentDisposition = String.format("%s; filename=\"%s\"", dispositionType, walletCredentialResponseDTO.getFileName()); - return ResponseEntity.ok().header(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, HttpHeaders.CONTENT_DISPOSITION).header(HttpHeaders.CONTENT_DISPOSITION, contentDisposition).contentType(MediaType.APPLICATION_PDF).body(walletCredentialResponseDTO.getFileContentStream()); - - + return ResponseEntity.ok() + .header(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, HttpHeaders.CONTENT_DISPOSITION) + .header(HttpHeaders.CONTENT_DISPOSITION, contentDisposition) + .contentType(MediaType.APPLICATION_PDF) + .body(walletCredentialResponseDTO.getFileContentStream()); } } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/controller/WalletsController.java b/src/main/java/io/mosip/mimoto/controller/WalletsController.java index db202750c..be1891f51 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletsController.java @@ -6,8 +6,9 @@ import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.WalletRequestDto; import io.mosip.mimoto.dto.WalletResponseDto; +import io.mosip.mimoto.exception.ErrorConstants; +import io.mosip.mimoto.exception.InvalidRequestException; import io.mosip.mimoto.service.WalletService; -import io.mosip.mimoto.util.WalletValidator; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.enums.ParameterIn; @@ -19,6 +20,8 @@ import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpSession; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; @@ -28,53 +31,98 @@ import java.util.List; +/** + * REST controller for managing wallets. + */ @Slf4j @RestController @RequestMapping(value = "/wallets") @Tag(name = SwaggerLiteralConstants.WALLETS_NAME, description = SwaggerLiteralConstants.WALLETS_DESCRIPTION) public class WalletsController { - @Autowired - private WalletService walletService; + private final WalletService walletService; @Autowired - private WalletValidator walletValidator; + public WalletsController(WalletService walletService) { + this.walletService = walletService; + } - @Operation(summary = "Create a new wallet", description = "This API is secured using session-based authentication. The session ID is extracted from the Cookie header and used to retrieve session details from Redis for authentication. The user ID is then obtained from the session and along with the provided wallet name and PIN is used to create a new wallet in the database. If the wallet is created successfully, a unique identifier for the wallet is returned otherwise an appropriate error response is provided.", operationId = "createWallet", security = @SecurityRequirement(name = "SessionAuth")) + /** + * Creates a new wallet for a user. + * + * @param wallet The wallet creation request containing name and PIN. + * @param httpSession The HTTP session containing user details. + * @return The unique identifier of the created wallet. + * @throws InvalidRequestException If the request is invalid. + */ + @Operation(summary = "Create a new wallet", description = "This API is secured using session-based authentication. The session ID is extracted from the Cookie header and used to retrieve session details from Redis for authentication. The user ID is obtained from the session and used with the provided wallet name and PIN to create a new wallet in the database. If successful, a unique identifier for the wallet is returned; otherwise, an appropriate error response is provided.", operationId = "createWallet", security = @SecurityRequirement(name = "SessionAuth")) @ApiResponse(responseCode = "200", description = "Wallet created successfully", content = @Content(mediaType = "application/json", schema = @Schema(type = "string", description = "Unique identifier of the Wallet stored in the database"), examples = @ExampleObject(name = "Success response", value = "d94a2e70-1234-4f2f-9eae-98765"))) @ApiResponse(responseCode = "400", description = "Invalid wallet creation request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Invalid request", value = "{\"errorCode\": \"RESIDENT-APP-050\", \"errorMessage\": \"Pin should be numeric with 4 or 6 digits.\"}"))) @ApiResponse(responseCode = "500", description = "Internal server error while creating wallet", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected server error", value = "{\"errorCode\": \"RESIDENT-APP-050\", \"errorMessage\": \"An unexpected error occurred while creating the wallet\"}"))) @PostMapping - public ResponseEntity createWallet(@RequestBody WalletRequestDto wallet, HttpSession httpSession) { - walletValidator.validateWalletRequest(wallet); - return ResponseEntity.status(HttpStatus.OK).body(walletService.createWallet((String) httpSession.getAttribute(SessionKeys.USER_ID), wallet.getWalletName(), wallet.getWalletPin())); + public ResponseEntity createWallet( + @RequestBody @Valid WalletRequestDto wallet, + HttpSession httpSession) throws InvalidRequestException { + String userId = (String) httpSession.getAttribute(SessionKeys.USER_ID); + if (userId == null) { + log.error("User ID not found in session"); + throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "User ID not found in session"); + } + log.info("Creating wallet for user: {}, name: {}", userId, wallet.getWalletName()); + String walletId = walletService.createWallet(userId, wallet.getWalletName(), wallet.getWalletPin()); + return ResponseEntity.status(HttpStatus.OK).body(walletId); } - @Operation(summary = "Retrieve all wallets for the user", description = "This API is secured using session-based authentication. Upon receiving a request, the session is first retrieved using the session ID extracted from the Cookie header to authenticate the user. Once authenticated, the user's ID is obtained from the session stored in Redis. Using this user ID, the API fetches all wallets associated with the user from the database and returns them. If an error occurs while retrieving the wallets, an appropriate error response is returned.", operationId = "getWallets", security = @SecurityRequirement(name = "SessionAuth")) + /** + * Retrieves all wallets for the authenticated user. + * + * @param httpSession The HTTP session containing user details. + * @return List of wallet details. + * @throws InvalidRequestException If the request fails. + */ + @Operation(summary = "Retrieve all wallets for the user", description = "This API is secured using session-based authentication. The session ID is extracted from the Cookie header to authenticate the user. The user's ID is obtained from the session stored in Redis, and all wallets associated with the user are fetched from the database. If successful, the list of wallets is returned; otherwise, an appropriate error response is returned.", operationId = "getWallets", security = @SecurityRequirement(name = "SessionAuth")) @ApiResponse(responseCode = "200", description = "List of wallets retrieved successfully", content = @Content(mediaType = "application/json", array = @ArraySchema(schema = @Schema(implementation = WalletResponseDto.class)), examples = @ExampleObject(name = "Success response", value = SwaggerExampleConstants.FETCH_ALL_WALLETS_OF_USER_SUCCESS))) @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected server error", value = "{\"errorCode\": \"RESIDENT-APP-051\", \"errorMessage\": \"An unexpected error occurred while retrieving user wallets\"}"))) @GetMapping - public ResponseEntity> getWallets(HttpSession httpSession) { - List response = walletService.getWallets((String) httpSession.getAttribute(SessionKeys.USER_ID)); + public ResponseEntity> getWallets(HttpSession httpSession) throws InvalidRequestException { + String userId = (String) httpSession.getAttribute(SessionKeys.USER_ID); + if (userId == null) { + log.error("User ID not found in session"); + throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "User ID not found in session"); + } + log.info("Retrieving wallets for user: {}", userId); + List response = walletService.getWallets(userId); return ResponseEntity.status(HttpStatus.OK).body(response); } - @Operation(summary = "Unlock an existing Wallet", description = "This API is secured using session-based authentication. Upon receiving a request, the session is first retrieved using the session ID extracted from the Cookie header to authenticate the user. Once authenticated, the user's ID is obtained from the session stored in Redis. Using this user ID along with the provided wallet ID and PIN, the corresponding wallet key is fetched and stored in the session. If successful, the API returns a response containing the wallet ID; otherwise, an appropriate error response is returned.", operationId = "unlockWallet", security = @SecurityRequirement(name = "SessionAuth"), parameters = {@Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet to be unlocked", schema = @Schema(type = "string"))}, requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody(required = true, content = @Content(mediaType = "application/json", schema = @Schema(implementation = WalletRequestDto.class)))) + /** + * Unlocks an existing wallet by retrieving its key and storing it in the session. + * + * @param walletId The unique identifier of the wallet. + * @param wallet The request containing the wallet PIN. + * @param httpSession The HTTP session containing user details. + * @return The wallet details if unlocked successfully. + * @throws InvalidRequestException If the wallet or PIN is invalid. + */ + @Operation(summary = "Unlock an existing Wallet", description = "This API is secured using session-based authentication. The session ID is extracted from the Cookie header to authenticate the user. The user's ID is obtained from the session, and the provided wallet ID and PIN are used to fetch the wallet key, which is stored in the session. If successful, the wallet ID is returned; otherwise, an appropriate error response is returned.", operationId = "unlockWallet", security = @SecurityRequirement(name = "SessionAuth"), parameters = {@Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet to be unlocked", schema = @Schema(type = "string"))}, requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody(required = true, content = @Content(mediaType = "application/json", schema = @Schema(implementation = WalletRequestDto.class)))) @ApiResponse(responseCode = "200", description = "Wallet unlocked successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = WalletResponseDto.class), examples = @ExampleObject(value = "{\"walletId\": \"123e4567-e89b-12d3-a456-426614174000\"}"))) - @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-051\", \"errorMessage\": \"Exception occurred due to an incorrect pin to unlock the wallet\"}"))) - @ApiResponse(responseCode = "500", description = "Internal Server Error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Error.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-051\", \"errorMessage\": \"An unexpected error occurred while retrieving the wallet details\"}"))) + @ApiResponse(responseCode = "400", description = "Invalid wallet ID or PIN", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-051\", \"errorMessage\": \"Exception occurred due to an incorrect pin to unlock the wallet\"}"))) + @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected server error", value = "{\"errorCode\": \"RESIDENT-APP-051\", \"errorMessage\": \"An unexpected error occurred while retrieving the wallet details\"}"))) @PostMapping("/{walletId}/unlock") - public ResponseEntity unlockWallet(@PathVariable("walletId") String walletId, @RequestBody WalletRequestDto wallet, HttpSession httpSession) { - // If wallet_key does not exist in the session, fetch it and set it in the session - String walletKey = walletService.getWalletKey((String) httpSession.getAttribute(SessionKeys.USER_ID), walletId, wallet.getWalletPin()); - - if (null != walletKey) { - httpSession.setAttribute(SessionKeys.WALLET_KEY, walletKey); - httpSession.setAttribute(SessionKeys.WALLET_ID, walletId); - WalletResponseDto response = new WalletResponseDto(walletId); - return ResponseEntity.status(HttpStatus.OK).body(response); + public ResponseEntity unlockWallet( + @PathVariable("walletId") @NotBlank(message = "Wallet ID cannot be blank") String walletId, + @RequestBody @Valid WalletRequestDto wallet, + HttpSession httpSession) throws InvalidRequestException { + String userId = (String) httpSession.getAttribute(SessionKeys.USER_ID); + if (userId == null) { + log.error("User ID not found in session"); + throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "User ID not found in session"); } - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null); - + log.info("Unlocking wallet: {} for user: {}", walletId, userId); + String walletKey = walletService.getWalletKey(userId, walletId, wallet.getWalletPin()); + httpSession.setAttribute(SessionKeys.WALLET_KEY, walletKey); + httpSession.setAttribute(SessionKeys.WALLET_ID, walletId); + WalletResponseDto response = WalletResponseDto.builder().walletId(walletId).build(); + return ResponseEntity.status(HttpStatus.OK).body(response); } } diff --git a/src/main/java/io/mosip/mimoto/dto/WalletResponseDto.java b/src/main/java/io/mosip/mimoto/dto/WalletResponseDto.java index 7ebe7ac67..4758eaa58 100644 --- a/src/main/java/io/mosip/mimoto/dto/WalletResponseDto.java +++ b/src/main/java/io/mosip/mimoto/dto/WalletResponseDto.java @@ -1,10 +1,12 @@ package io.mosip.mimoto.dto; import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; @Data @AllArgsConstructor +@Builder public class WalletResponseDto { String walletId; diff --git a/src/main/java/io/mosip/mimoto/dto/resident/WalletCredentialResponseDTO.java b/src/main/java/io/mosip/mimoto/dto/resident/WalletCredentialResponseDTO.java index bf073f499..ed13dd79d 100644 --- a/src/main/java/io/mosip/mimoto/dto/resident/WalletCredentialResponseDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/resident/WalletCredentialResponseDTO.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.core.io.InputStreamResource; @@ -10,6 +11,7 @@ @Data @AllArgsConstructor @NoArgsConstructor +@Builder public class WalletCredentialResponseDTO { @JsonProperty("file_content_stream") diff --git a/src/main/java/io/mosip/mimoto/exception/EncryptionException.java b/src/main/java/io/mosip/mimoto/exception/EncryptionException.java index a3b12ce95..967c906fc 100644 --- a/src/main/java/io/mosip/mimoto/exception/EncryptionException.java +++ b/src/main/java/io/mosip/mimoto/exception/EncryptionException.java @@ -11,4 +11,9 @@ public EncryptionException(String errorCode, String errorMessage, Throwable caus super(errorCode, errorMessage, cause); } + + public EncryptionException(String errorCode, String errorMessage) { + super(errorCode, errorMessage); + + } } diff --git a/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java b/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java index 999300f96..d9b372c4f 100644 --- a/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java +++ b/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java @@ -34,7 +34,8 @@ public enum ErrorConstants { DECRYPTION_FAILED( "decryption_failed", "Failed to decrypt the data"), SCHEMA_MISMATCH( "schema_mismatch", "Failed to restored the stored data"), INVALID_USER("invalid_user", "User does not exist in database"), - CREDENTIAL_DOWNLOAD_EXCEPTION( "credential_download_error", "Failed to download and store the credential"); + CREDENTIAL_DOWNLOAD_EXCEPTION( "credential_download_error", "Failed to download and store the credential"), + CREDENTIAL_FETCH_EXCEPTION( "credential_fetch_error", "Failed to fetch the credential"); private final String errorCode; private final String errorMessage; diff --git a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java index dbe861c32..bf79e0387 100644 --- a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java +++ b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java @@ -2,6 +2,7 @@ import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; +import io.mosip.mimoto.exception.DecryptionException; import io.mosip.mimoto.service.UserMetadataService; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; @@ -50,7 +51,14 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo // Call the service to update or insert the user metadata in the database - String userId = userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); + String userId = null; + try { + userId = userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); + } catch (DecryptionException e) { + log.error("Failed to store the user info in the database", e); + String redirectUrl = injiWebUrl + "/login?status=error&error_message=" + "database_error"; + response.sendRedirect(redirectUrl); + } UserMetadataDTO userMetadataDTO = new UserMetadataDTO(displayName, profilePictureUrl, email); diff --git a/src/main/java/io/mosip/mimoto/service/EncryptionService.java b/src/main/java/io/mosip/mimoto/service/EncryptionService.java new file mode 100644 index 000000000..bece16f57 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/EncryptionService.java @@ -0,0 +1,9 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.exception.EncryptionException; +import io.mosip.mimoto.exception.DecryptionException; + +public interface EncryptionService { + String encrypt(String data) throws EncryptionException; + String decrypt(String data) throws DecryptionException; +} diff --git a/src/main/java/io/mosip/mimoto/service/IssuersService.java b/src/main/java/io/mosip/mimoto/service/IssuersService.java index 467feeee6..9cd58c252 100644 --- a/src/main/java/io/mosip/mimoto/service/IssuersService.java +++ b/src/main/java/io/mosip/mimoto/service/IssuersService.java @@ -18,4 +18,6 @@ public interface IssuersService { IssuersDTO getAllIssuers() throws ApiNotAccessibleException, AuthorizationServerWellknownResponseException, IOException, InvalidWellknownResponseException; CredentialIssuerConfiguration getIssuerConfiguration(String issuerId) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException; + + IssuerConfig getIssuerConfig(String issuerId, String credentialType) throws ApiNotAccessibleException, IOException, InvalidIssuerIdException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException; } diff --git a/src/main/java/io/mosip/mimoto/service/TokenDecoder.java b/src/main/java/io/mosip/mimoto/service/TokenDecoder.java new file mode 100644 index 000000000..f932a85d5 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/TokenDecoder.java @@ -0,0 +1,8 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.exception.OAuth2AuthenticationException; +import org.springframework.security.oauth2.jwt.Jwt; + +public interface TokenDecoder { + Jwt decode(String idToken) throws OAuth2AuthenticationException; +} diff --git a/src/main/java/io/mosip/mimoto/service/TokenServiceFactory.java b/src/main/java/io/mosip/mimoto/service/TokenServiceFactory.java new file mode 100644 index 000000000..61e61e8ea --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/TokenServiceFactory.java @@ -0,0 +1,31 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.exception.ErrorConstants; +import io.mosip.mimoto.exception.OAuth2AuthenticationException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Component; + +import java.util.Map; + +@Component +public class TokenServiceFactory { + private final Map tokenServices; + + @Autowired + public TokenServiceFactory(Map tokenServices) { + this.tokenServices = tokenServices; + } + + public TokenService getTokenService(String provider) throws OAuth2AuthenticationException { + TokenService service = tokenServices.get(provider.toLowerCase()); + if (service == null) { + throw new OAuth2AuthenticationException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Unsupported provider: " + provider, HttpStatus.BAD_REQUEST); + } + return service; + } + + public boolean isSupportedProvider(String provider) { + return tokenServices.containsKey(provider.toLowerCase()); + } +} diff --git a/src/main/java/io/mosip/mimoto/service/UserMetadataService.java b/src/main/java/io/mosip/mimoto/service/UserMetadataService.java index 1d32bda5b..7102377b0 100644 --- a/src/main/java/io/mosip/mimoto/service/UserMetadataService.java +++ b/src/main/java/io/mosip/mimoto/service/UserMetadataService.java @@ -1,8 +1,9 @@ package io.mosip.mimoto.service; import io.mosip.mimoto.dbentity.UserMetadata; +import io.mosip.mimoto.exception.DecryptionException; +import io.mosip.mimoto.exception.EncryptionException; import io.mosip.mimoto.repository.UserMetadataRepository; -import io.mosip.mimoto.util.EncryptionDecryptionUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -14,71 +15,61 @@ @Service public class UserMetadataService { + private final UserMetadataRepository repository; + private final EncryptionService encryptionService; @Autowired - private UserMetadataRepository userMetadataRepository; - - @Autowired - private EncryptionDecryptionUtil encryptionDecryptionUtil; + public UserMetadataService(UserMetadataRepository repository, EncryptionService encryptionService) { + this.repository = repository; + this.encryptionService = encryptionService; + } public String updateOrInsertUserMetadata(String providerSubjectId, String identityProvider, - String displayName, String profilePictureUrl, - String email) { - // Compute current time once + String displayName, String profilePictureUrl, String email) + throws EncryptionException, DecryptionException { Timestamp now = new Timestamp(System.currentTimeMillis()); - - // Check if user exists - Optional existingUser = userMetadataRepository.findByProviderSubjectIdAndIdentityProvider(providerSubjectId, identityProvider); + Optional existingUser = repository.findByProviderSubjectIdAndIdentityProvider(providerSubjectId, identityProvider); if (existingUser.isPresent()) { - // If user exists, update metadata and return the userID - updateUserMetadata(existingUser.get(), displayName, profilePictureUrl, email, now); - return existingUser.get().getId(); // Return the userID from the existing user + return updateUser(existingUser.get(), displayName, profilePictureUrl, email, now); } else { - // If user does not exist, create new record and return the userID - return createUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email, now); + return createUser(providerSubjectId, identityProvider, displayName, profilePictureUrl, email, now); } } - private void updateUserMetadata(UserMetadata userMetadata, String displayName, String profilePictureUrl, - String email, Timestamp now) { - boolean isUpdated = false; - - // Check and update fields if needed - isUpdated |= checkAndUpdateEncryptedField(userMetadata::getDisplayName, userMetadata::setDisplayName, displayName); - isUpdated |= checkAndUpdateEncryptedField(userMetadata::getProfilePictureUrl, userMetadata::setProfilePictureUrl, profilePictureUrl); - isUpdated |= checkAndUpdateEncryptedField(userMetadata::getEmail, userMetadata::setEmail, email); - - // If any field was updated, save the updated record and set the updated timestamp - if (isUpdated) { - userMetadata.setUpdatedAt(now); - userMetadataRepository.save(userMetadata); + private String updateUser(UserMetadata user, String displayName, String profilePictureUrl, String email, Timestamp now) + throws EncryptionException, DecryptionException { + boolean updated = updateIfChanged(user::getDisplayName, user::setDisplayName, displayName) + || updateIfChanged(user::getProfilePictureUrl, user::setProfilePictureUrl, profilePictureUrl) + || updateIfChanged(user::getEmail, user::setEmail, email); + if (updated) { + user.setUpdatedAt(now); + repository.save(user); } + return user.getId(); } - private boolean checkAndUpdateEncryptedField(Supplier getter, Consumer setter, String newValue) { - String decryptedValue = encryptionDecryptionUtil.decrypt(getter.get(), EncryptionDecryptionUtil.USER_PII_KEY_REFERENCE_ID, "", ""); - if (!decryptedValue.equals(newValue)) { - setter.accept(encryptionDecryptionUtil.encrypt(newValue, EncryptionDecryptionUtil.USER_PII_KEY_REFERENCE_ID, "", "")); + private boolean updateIfChanged(Supplier getter, Consumer setter, String newValue) + throws EncryptionException, DecryptionException { + String current = encryptionService.decrypt(getter.get()); + if (!current.equals(newValue)) { + setter.accept(encryptionService.encrypt(newValue)); return true; } return false; } - private String createUserMetadata(String providerSubjectId, String identityProvider, String displayName, - String profilePictureUrl, String email, Timestamp now) { - UserMetadata userMetadata = new UserMetadata(); - String userId = UUID.randomUUID().toString(); - userMetadata.setId(userId); - userMetadata.setProviderSubjectId(providerSubjectId); - userMetadata.setIdentityProvider(identityProvider); - userMetadata.setDisplayName(encryptionDecryptionUtil.encrypt(displayName, EncryptionDecryptionUtil.USER_PII_KEY_REFERENCE_ID, "", "")); - userMetadata.setProfilePictureUrl(encryptionDecryptionUtil.encrypt(profilePictureUrl, EncryptionDecryptionUtil.USER_PII_KEY_REFERENCE_ID, "", "")); - userMetadata.setEmail(encryptionDecryptionUtil.encrypt(email, EncryptionDecryptionUtil.USER_PII_KEY_REFERENCE_ID, "", "")); - userMetadata.setCreatedAt(now); - userMetadata.setUpdatedAt(now); - - UserMetadata savedUserMetadata = userMetadataRepository.save(userMetadata); // Insert new record - return savedUserMetadata.getId(); // Return the userID of the newly created user + private String createUser(String providerSubjectId, String identityProvider, String displayName, + String profilePictureUrl, String email, Timestamp now) + throws EncryptionException { + UserMetadata user = new UserMetadata(); + user.setId(UUID.randomUUID().toString()); + user.setProviderSubjectId(providerSubjectId); + user.setIdentityProvider(identityProvider); + user.setDisplayName(encryptionService.encrypt(displayName)); + user.setProfilePictureUrl(encryptionService.encrypt(profilePictureUrl)); + user.setEmail(encryptionService.encrypt(email)); + user.setCreatedAt(now); + user.setUpdatedAt(now); + return repository.save(user).getId(); } - } diff --git a/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java b/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java index 6c07a8cd8..f934f1d15 100644 --- a/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java +++ b/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java @@ -3,17 +3,57 @@ import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; import io.mosip.mimoto.dto.resident.WalletCredentialResponseDTO; -import io.mosip.mimoto.exception.CorruptedEncryptedDataException; -import io.mosip.mimoto.exception.DecryptionException; -import io.mosip.mimoto.exception.ExternalServiceUnavailableException; -import io.mosip.mimoto.exception.InvalidCredentialResourceException; +import io.mosip.mimoto.exception.*; import java.util.List; +/** + * Service interface for managing wallet credentials. + */ public interface WalletCredentialService { - VerifiableCredentialResponseDTO fetchAndStoreCredential(String issuerId, String credentialType, TokenResponseDTO response, String credentialValidity, String locale, String walletId, String base64EncodedWalletKey) throws ExternalServiceUnavailableException; - List fetchAllCredentialsForWallet(String walletId, String walletKey, String locale); + /** + * Fetches and stores a credential for a wallet. + * + * @param issuerId The issuer ID. + * @param credentialType The type of credential. + * @param tokenResponse The token response containing the access token. + * @param credentialValidity The validity period of the credential. + * @param locale The locale for display purposes. + * @param walletId The wallet ID. + * @param base64Key The base64-encoded key for encryption. + * @return The stored credential response. + * @throws CredentialProcessingException If processing fails. + */ + VerifiableCredentialResponseDTO fetchAndStoreCredential(String issuerId, String credentialType, + TokenResponseDTO tokenResponse, String credentialValidity, + String locale, String walletId, String base64Key) + throws CredentialProcessingException, ExternalServiceUnavailableException; - WalletCredentialResponseDTO fetchVerifiableCredential(String walletId, String credentialId, String base64EncodedWalletKey, String locale) throws DecryptionException, CorruptedEncryptedDataException, ExternalServiceUnavailableException; + /** + * Fetches all credentials for a wallet. + * + * @param walletId The wallet ID. + * @param base64Key The base64-encoded key for decryption. + * @param locale The locale for display purposes. + * @return List of credential responses. + * @throws CredentialProcessingException If processing fails. + */ + List fetchAllCredentialsForWallet(String walletId, String base64Key, String locale) + throws CredentialProcessingException; + + /** + * Fetches a single verifiable credential by ID. + * + * @param walletId The wallet ID. + * @param credentialId The credential ID. + * @param base64Key The base64-encoded key for decryption. + * @param locale The locale for display purposes. + * @return The credential response with PDF stream. + * @throws CredentialNotFoundException If the credential is not found. + * @throws CredentialProcessingException If processing fails. + */ + WalletCredentialResponseDTO fetchVerifiableCredential(String walletId, String credentialId, String base64Key, + String locale) + throws CredentialNotFoundException, CredentialProcessingException; } diff --git a/src/main/java/io/mosip/mimoto/service/WalletService.java b/src/main/java/io/mosip/mimoto/service/WalletService.java index fe8f8ff15..e0da2c218 100644 --- a/src/main/java/io/mosip/mimoto/service/WalletService.java +++ b/src/main/java/io/mosip/mimoto/service/WalletService.java @@ -1,15 +1,45 @@ package io.mosip.mimoto.service; import io.mosip.mimoto.dto.WalletResponseDto; +import io.mosip.mimoto.exception.InvalidRequestException; import java.security.NoSuchAlgorithmException; import java.util.List; import java.util.UUID; +/** + * Service interface for managing wallets. + */ public interface WalletService { - public String createWallet(String userId, String pin, String walletName) ; - String getWalletKey(String userId, String walletId, String pin); + /** + * Creates a new wallet for a user. + * + * @param userId The user ID. + * @param name The wallet name. + * @param pin The wallet PIN. + * @return The created wallet ID. + * @throws InvalidRequestException If the request is invalid. + */ + String createWallet(String userId, String name, String pin) throws InvalidRequestException; - List getWallets(String userId); + /** + * Retrieves the decrypted wallet key. + * + * @param userId The user ID. + * @param walletId The wallet ID. + * @param pin The wallet PIN. + * @return The decrypted wallet key. + * @throws InvalidRequestException If the wallet is not found or PIN is invalid. + */ + String getWalletKey(String userId, String walletId, String pin) throws InvalidRequestException; + + /** + * Retrieves all wallets for a user. + * + * @param userId The user ID. + * @return List of wallet responses. + * @throws InvalidRequestException If the request fails. + */ + List getWallets(String userId) throws InvalidRequestException; } diff --git a/src/main/java/io/mosip/mimoto/service/impl/EncryptionServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/EncryptionServiceImpl.java new file mode 100644 index 000000000..e8a79d4dd --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/impl/EncryptionServiceImpl.java @@ -0,0 +1,32 @@ +package io.mosip.mimoto.service.impl; + +import io.mosip.mimoto.exception.EncryptionException; +import io.mosip.mimoto.exception.DecryptionException; +import io.mosip.mimoto.service.EncryptionService; +import io.mosip.mimoto.util.EncryptionDecryptionUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class EncryptionServiceImpl implements EncryptionService { + private static final String USER_PII_KEY_REFERENCE_ID = "user_pii"; + private static final String EMPTY_AAD = ""; + private static final String EMPTY_SALT = ""; + + private final EncryptionDecryptionUtil encryptionUtil; + + @Autowired + public EncryptionServiceImpl(EncryptionDecryptionUtil encryptionUtil) { + this.encryptionUtil = encryptionUtil; + } + + @Override + public String encrypt(String data) throws EncryptionException { + return encryptionUtil.encrypt(data, USER_PII_KEY_REFERENCE_ID, EMPTY_AAD, EMPTY_SALT); + } + + @Override + public String decrypt(String data) throws DecryptionException { + return encryptionUtil.decrypt(data, USER_PII_KEY_REFERENCE_ID, EMPTY_AAD, EMPTY_SALT); + } +} diff --git a/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenDecoder.java b/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenDecoder.java new file mode 100644 index 000000000..adc36beb7 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenDecoder.java @@ -0,0 +1,31 @@ +package io.mosip.mimoto.service.impl; + +import io.mosip.mimoto.exception.InvalidRequestException; +import io.mosip.mimoto.exception.OAuth2AuthenticationException; +import io.mosip.mimoto.service.TokenDecoder; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.security.oauth2.jwt.Jwt; +import org.springframework.security.oauth2.jwt.JwtDecoder; +import org.springframework.security.oauth2.jwt.JwtException; +import org.springframework.stereotype.Component; + +@Component +@Qualifier("googleJwtDecoder") +public class GoogleTokenDecoder implements TokenDecoder { + private final JwtDecoder jwtDecoder; + + @Autowired + public GoogleTokenDecoder(@Qualifier("googleJwtDecoder") JwtDecoder jwtDecoder) { + this.jwtDecoder = jwtDecoder; + } + + @Override + public Jwt decode(String idToken) throws OAuth2AuthenticationException { + try { + return jwtDecoder.decode(idToken); + } catch (JwtException e) { + throw new InvalidRequestException("invalid_token", e.getMessage(), e); + } + } +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java b/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java index 97a9edf48..cb4e9bbf5 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java +++ b/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java @@ -2,9 +2,11 @@ import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; +import io.mosip.mimoto.exception.DecryptionException; import io.mosip.mimoto.exception.InvalidRequestException; import io.mosip.mimoto.exception.OAuth2AuthenticationException; import io.mosip.mimoto.service.SecurityContextService; +import io.mosip.mimoto.service.TokenDecoder; import io.mosip.mimoto.service.TokenService; import io.mosip.mimoto.service.UserMetadataService; import jakarta.servlet.http.HttpServletRequest; @@ -25,6 +27,7 @@ import org.springframework.security.oauth2.jwt.JwtException; import org.springframework.stereotype.Service; +import java.time.Instant; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -36,59 +39,73 @@ @Service("google") @Slf4j public class GoogleTokenService implements TokenService { + private static final String MISSING_EMAIL_ERROR = "Missing email in ID token"; + private static final String INVALID_ISSUER_ERROR = "Invalid issuer"; + private static final String INVALID_AUDIENCE_ERROR = "Invalid audience"; + private static final String TOKEN_EXPIRED_ERROR = "Token expired"; + + private final TokenDecoder tokenDecoder; + private final UserMetadataService userMetadataService; + private final SecurityContextManager securityContextManager; + private final SessionManager sessionManager; + private final String expectedIssuer; + private final String expectedAudience; @Autowired - @Qualifier("googleJwtDecoder") - private JwtDecoder googleIdTokenDecoder; - - @Autowired - private UserMetadataService userMetadataService; - - @Autowired - private SecurityContextService securityContextService; - - @Value("${spring.security.oauth2.client.registration.google.client-id}") - private String googleClientId; + public GoogleTokenService( + @Qualifier("googleJwtDecoder") TokenDecoder tokenDecoder, + UserMetadataService userMetadataService, + SecurityContextManager securityContextManager, + SessionManager sessionManager, + @Value("${spring.security.oauth2.client.registration.google.client-id}") String clientId, + @Value("${google.issuer:https://accounts.google.com}") String issuer) { + this.tokenDecoder = tokenDecoder; + this.userMetadataService = userMetadataService; + this.securityContextManager = securityContextManager; + this.sessionManager = sessionManager; + this.expectedAudience = clientId; + this.expectedIssuer = issuer; + } @Override - public void processToken(String idToken, String provider, HttpServletRequest request, HttpServletResponse response) throws OAuth2AuthenticationException { - Jwt jwt = decodeAndValidateToken(idToken); - + public void processToken(String idToken, String provider, HttpServletRequest request, HttpServletResponse response) + throws OAuth2AuthenticationException { + Jwt jwt = validateToken(idToken); String email = extractClaim(jwt, "email"); + if (email == null) { + log.error(MISSING_EMAIL_ERROR); + throw new OAuth2AuthenticationException("missing_email", MISSING_EMAIL_ERROR, HttpStatus.UNAUTHORIZED); + } + String name = extractClaim(jwt, "name"); String picture = extractClaim(jwt, "picture"); String sub = extractClaim(jwt, "sub"); - if (email != null) { - String userId = userMetadataService.updateOrInsertUserMetadata(sub, provider, name, picture, email); - setupSession(request, provider, name, picture, email, userId); - setupSecurityContext(provider, sub, name, picture, email, request, response); - } else { - log.error("Could not extract user information from ID token "); - throw new OAuth2AuthenticationException(OAUTH2_AUTHENTICATION_EXCEPTION.getErrorCode(),OAUTH2_AUTHENTICATION_EXCEPTION.getErrorMessage(), HttpStatus.UNAUTHORIZED); + String userId = null; + try { + userId = userMetadataService.updateOrInsertUserMetadata(sub, provider, name, picture, email); + } catch (DecryptionException e) { + log.error("Failed to store the user info in the database", e); + throw new RuntimeException(); } + sessionManager.setupSession(request, provider, new UserMetadataDTO(name, picture, email), userId); + securityContextManager.setupSecurityContext(createOAuth2Token(provider, sub, name, picture, email), request, response); } - private Jwt decodeAndValidateToken(String idToken) throws OAuth2AuthenticationException { - Jwt jwt = null; - try { - jwt = googleIdTokenDecoder.decode(idToken); - } catch (JwtException e) { - throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), e.getMessage(), e); + private Jwt validateToken(String idToken) throws OAuth2AuthenticationException { + Jwt jwt = tokenDecoder.decode(idToken); + if (!expectedIssuer.equals(jwt.getIssuer().toString())) { + log.error("Invalid issuer: {}", jwt.getIssuer()); + throw new OAuth2AuthenticationException("invalid_issuer", INVALID_ISSUER_ERROR, HttpStatus.UNAUTHORIZED); } - - String issuer = jwt.getIssuer().toString(); - if (!issuer.equals("https://accounts.google.com") && !issuer.equals("accounts.google.com")) { - log.error("Invalid ID token issuer: " + issuer); - throw new OAuth2AuthenticationException(OAUTH2_AUTHENTICATION_EXCEPTION.getErrorCode(),OAUTH2_AUTHENTICATION_EXCEPTION.getErrorMessage(), HttpStatus.UNAUTHORIZED); + if (!expectedAudience.equals(jwt.getAudience().stream().findFirst().orElse(null))) { + log.error("Invalid audience: {}", jwt.getAudience()); + throw new OAuth2AuthenticationException("invalid_audience", INVALID_AUDIENCE_ERROR, HttpStatus.UNAUTHORIZED); } - - String audience = jwt.getAudience().stream().findFirst().orElse(null); - if (!googleClientId.equals(audience)) { - log.error("Invalid ID token audience: " + audience); - throw new OAuth2AuthenticationException(OAUTH2_AUTHENTICATION_EXCEPTION.getErrorCode(),OAUTH2_AUTHENTICATION_EXCEPTION.getErrorMessage(), HttpStatus.UNAUTHORIZED); + if (jwt.getExpiresAt() == null || jwt.getExpiresAt().isBefore(Instant.now())) { + log.error("Token expired"); + throw new OAuth2AuthenticationException("token_expired", TOKEN_EXPIRED_ERROR, HttpStatus.UNAUTHORIZED); } - return jwt; } @@ -96,15 +113,7 @@ private String extractClaim(Jwt jwt, String claimName) { return (String) jwt.getClaims().get(claimName); } - private void setupSession(HttpServletRequest request, String provider, String name, String picture, String email, String userId) { - HttpSession session = request.getSession(true); - UserMetadataDTO userMetadataDTO = new UserMetadataDTO(name, picture, email); - session.setAttribute("clientRegistrationId", provider); - session.setAttribute(SessionKeys.USER_METADATA, userMetadataDTO); - session.setAttribute(SessionKeys.USER_ID, userId); - } - - private void setupSecurityContext(String provider, String sub, String name, String picture, String email, HttpServletRequest request, HttpServletResponse response) { + private OAuth2AuthenticationToken createOAuth2Token(String provider, String sub, String name, String picture, String email) { Map attributes = new HashMap<>(); attributes.put("sub", sub); attributes.put("name", name); @@ -113,8 +122,6 @@ private void setupSecurityContext(String provider, String sub, String name, Stri List authorities = Collections.singletonList(new SimpleGrantedAuthority("ROLE_USER")); OAuth2User oAuth2User = new DefaultOAuth2User(authorities, attributes, "sub"); - OAuth2AuthenticationToken oauth2AuthenticationToken = new OAuth2AuthenticationToken(oAuth2User, authorities, provider); - - securityContextService.setupSecurityContext(oauth2AuthenticationToken, request, response); + return new OAuth2AuthenticationToken(oAuth2User, authorities, provider); } } diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index 92df4d408..5deb367f3 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -4,16 +4,12 @@ import com.fasterxml.jackson.databind.ObjectMapper; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.IssuersDTO; -import io.mosip.mimoto.dto.mimoto.AuthorizationServerWellKnownResponse; -import io.mosip.mimoto.dto.mimoto.CredentialIssuerConfiguration; -import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; -import io.mosip.mimoto.exception.ApiNotAccessibleException; -import io.mosip.mimoto.exception.AuthorizationServerWellknownResponseException; -import io.mosip.mimoto.exception.InvalidIssuerIdException; -import io.mosip.mimoto.exception.InvalidWellknownResponseException; +import io.mosip.mimoto.dto.mimoto.*; +import io.mosip.mimoto.exception.*; import io.mosip.mimoto.service.IssuersService; import io.mosip.mimoto.util.IssuerConfigUtil; import io.mosip.mimoto.util.Utilities; +import jakarta.validation.constraints.NotBlank; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -101,4 +97,23 @@ public CredentialIssuerConfiguration getIssuerConfiguration(String issuerId) thr authorizationServerWellKnownResponse ); } + + public IssuerConfig getIssuerConfig(String issuerId, @NotBlank String credentialType) throws ApiNotAccessibleException, IOException, InvalidIssuerIdException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { + log.info("Fetching issuer config for issuerId: {}", issuerId); + try { + IssuerDTO issuerDTO = getIssuerDetails(issuerId); + CredentialIssuerWellKnownResponse wellKnownResponse = issuersConfigUtil.getIssuerWellknown(issuerDTO.getCredential_issuer_host()); + return new IssuerConfig( + issuerDTO, + wellKnownResponse, + wellKnownResponse.getCredentialConfigurationsSupported().get(credentialType) + ); + } catch (Exception e) { + log.error("Failed to fetch issuer config for issuerId: {}", issuerId, e); + if (e instanceof InvalidIssuerIdException) { + throw (InvalidIssuerIdException) e; + } + throw new ApiNotAccessibleException("Unable to fetch issuer configuration for issuerId: " + issuerId, e); + } + } } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/impl/SecurityContextManager.java b/src/main/java/io/mosip/mimoto/service/impl/SecurityContextManager.java new file mode 100644 index 000000000..6430f15fe --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/impl/SecurityContextManager.java @@ -0,0 +1,25 @@ +package io.mosip.mimoto.service.impl; + +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken; +import org.springframework.security.web.context.HttpSessionSecurityContextRepository; +import org.springframework.security.web.context.SecurityContextRepository; +import org.springframework.stereotype.Service; + +@Service +public class SecurityContextManager { + private final SecurityContextRepository securityContextRepository; + + public SecurityContextManager() { + this.securityContextRepository = new HttpSessionSecurityContextRepository(); + } + + public void setupSecurityContext(OAuth2AuthenticationToken oauth2AuthenticationToken, HttpServletRequest request, HttpServletResponse response) { + SecurityContext context = SecurityContextHolder.getContext(); + context.setAuthentication(oauth2AuthenticationToken); + securityContextRepository.saveContext(context, request, response); + } +} diff --git a/src/main/java/io/mosip/mimoto/service/impl/SessionManager.java b/src/main/java/io/mosip/mimoto/service/impl/SessionManager.java new file mode 100644 index 000000000..1ec335200 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/impl/SessionManager.java @@ -0,0 +1,17 @@ +package io.mosip.mimoto.service.impl; + +import io.mosip.mimoto.constant.SessionKeys; +import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; +import org.springframework.stereotype.Component; + +@Component +public class SessionManager { + public void setupSession(HttpServletRequest request, String provider, UserMetadataDTO userMetadata, String userId) { + HttpSession session = request.getSession(true); + session.setAttribute("clientRegistrationId", provider); + session.setAttribute(SessionKeys.USER_METADATA, userMetadata); + session.setAttribute(SessionKeys.USER_ID, userId); + } +} diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java index feef5efa2..45c278ed8 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java @@ -1,16 +1,13 @@ package io.mosip.mimoto.service.impl; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import io.mosip.kernel.cryptomanager.service.CryptomanagerService; import io.mosip.mimoto.dbentity.VerifiableCredential; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; -import io.mosip.mimoto.dto.mimoto.*; +import io.mosip.mimoto.dto.mimoto.IssuerConfig; +import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; import io.mosip.mimoto.dto.resident.WalletCredentialResponseDTO; import io.mosip.mimoto.exception.*; import io.mosip.mimoto.repository.WalletCredentialsRepository; -import io.mosip.mimoto.service.IdpService; import io.mosip.mimoto.service.IssuersService; import io.mosip.mimoto.service.WalletCredentialService; import io.mosip.mimoto.util.CredentialProcessor; @@ -19,185 +16,107 @@ import io.mosip.mimoto.util.WalletCredentialResponseDTOFactory; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.io.InputStreamResource; import org.springframework.stereotype.Service; -import org.springframework.web.client.RestTemplate; -import java.io.ByteArrayInputStream; import java.io.IOException; import java.util.List; -import java.util.Optional; import java.util.Set; +import java.util.stream.Collectors; import static io.mosip.mimoto.exception.ErrorConstants.*; -import static io.mosip.mimoto.util.LocaleUtils.getCredentialDisplayDTOBasedOnLocale; +/** + * Implementation of {@link WalletCredentialService} for managing wallet credentials. + */ @Slf4j @Service public class WalletCredentialServiceImpl implements WalletCredentialService { - @Autowired - private IssuersService issuersService; - - @Autowired - private DataShareServiceImpl dataShareService; - - @Autowired - private ObjectMapper objectMapper; - - @Autowired - private IdpService idpService; - - @Autowired - private RestTemplate restTemplate; - - @Autowired - private PresentationServiceImpl presentationService; + private final WalletCredentialsRepository repository; + private final IssuersService issuersService; + private final CredentialProcessor credentialProcessor; + private final CredentialUtilService credentialUtilService; + private final EncryptionDecryptionUtil encryptionDecryptionUtil; @Autowired - private CryptomanagerService cryptomanagerService; - - @Autowired - private WalletCredentialsRepository walletCredentialsRepository; - - @Autowired - private CredentialUtilService credentialUtilService; - - @Autowired - private EncryptionDecryptionUtil encryptionDecryptionUtil; - - @Autowired - private CredentialProcessor credentialProcessor; + public WalletCredentialServiceImpl(WalletCredentialsRepository repository, + IssuersService issuersService, + CredentialProcessor credentialProcessor, + CredentialUtilService credentialUtilService, + EncryptionDecryptionUtil encryptionDecryptionUtil) { + this.repository = repository; + this.issuersService = issuersService; + this.credentialProcessor = credentialProcessor; + this.credentialUtilService = credentialUtilService; + this.encryptionDecryptionUtil = encryptionDecryptionUtil; + } @Override - public VerifiableCredentialResponseDTO fetchAndStoreCredential( - String issuerId, String credentialType, TokenResponseDTO response, - String credentialValidity, String locale, String walletId, String base64EncodedWalletKey) throws ExternalServiceUnavailableException { - - shouldInitiateDownloadRequest(issuerId, credentialType, walletId); - - IssuerConfig issuerConfig = fetchIssuerConfig(issuerId, credentialType); + public VerifiableCredentialResponseDTO fetchAndStoreCredential(String issuerId, String credentialType, + TokenResponseDTO tokenResponse, String credentialValidity, + String locale, String walletId, String base64Key) + throws CredentialProcessingException, ExternalServiceUnavailableException { + log.info("Fetching and storing credential for wallet: {}, issuer: {}, type: {}", walletId, issuerId, credentialType); - VerifiableCredential savedCredential = credentialProcessor.processAndStoreCredential( - issuerConfig, response.getAccess_token(), credentialType, walletId, - base64EncodedWalletKey, credentialValidity, issuerId); - - return WalletCredentialResponseDTOFactory.buildCredentialResponseDTO( - issuerConfig.getIssuerDTO(), issuerConfig.getCredentialsSupportedResponse(), locale, savedCredential.getId()); - } - - private void shouldInitiateDownloadRequest(String issuerId, String credentialType, String walletId) { Set issuers = Set.of("Mosip"); - if (issuers.contains(issuerId) && alreadyDownloaded(issuerId, credentialType, walletId)) { - throw new InvalidRequestException( - INVALID_REQUEST.getErrorCode(), - "A credential is already downloaded for the selected Issuer and Credential Type. Only one is allowed"); + if (issuers.contains(issuerId)){ + if (repository.existsByIssuerIdAndCredentialTypeAndWalletId(issuerId, credentialType, walletId)) { + log.warn("Duplicate credential found for issuer: {}, type: {}, wallet: {}", issuerId, credentialType, walletId); + throw new CredentialProcessingException(CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), "Duplicate credential for issuer and type"); + } } - } - private boolean alreadyDownloaded(String issuerId, String credentialType, String walletId) { - return walletCredentialsRepository.existsByIssuerIdAndCredentialTypeAndWalletId(issuerId, credentialType, walletId); - } + VerifiableCredentialResponseDTO credential = null; - private IssuerConfig fetchIssuerConfig(String issuerId, String credentialType) throws ExternalServiceUnavailableException { - IssuerDTO issuerDTO; - try { - issuerDTO = issuersService.getIssuerDetails(issuerId); - } catch (ApiNotAccessibleException | IOException | AuthorizationServerWellknownResponseException | - InvalidWellknownResponseException e) { - log.error("Failed to fetch issuer details for issuerId: {}", issuerId, e); - throw new ExternalServiceUnavailableException(SERVER_UNAVAILABLE.getErrorCode(), "Unable to fetch issuer details due to a service error", e); - } catch (InvalidIssuerIdException e) { - log.error("Invalid issuerId: {}", issuerId, e); - throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), e.getMessage(), e); - } - - CredentialIssuerWellKnownResponse wellKnownResponse; - try { - wellKnownResponse = getIssuerWellKnownResponse(issuerId); - } catch (AuthorizationServerWellknownResponseException | ApiNotAccessibleException | IOException | - InvalidWellknownResponseException e) { - log.error("Failed to fetch issuer well-known response for issuerId: {}", issuerId, e); - throw new ExternalServiceUnavailableException(SERVER_UNAVAILABLE.getErrorCode(), "Unable to fetch issuer configuration", e); - } + credential = credentialProcessor.processAndStoreCredential( + tokenResponse, credentialType, walletId, base64Key, credentialValidity, issuerId, locale); - CredentialsSupportedResponse credentialsSupportedResponse = wellKnownResponse.getCredentialConfigurationsSupported().get(credentialType); - if (credentialsSupportedResponse == null) { - log.error("Credential type {} not supported for issuerId: {}", credentialType, issuerId); - throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), String.format("Credential type %s is not supported by issuer %s", credentialType, issuerId)); - } + log.debug("Credential stored successfully: {}", credential.getCredentialId()); + return credential; - return new IssuerConfig(issuerDTO, wellKnownResponse, credentialsSupportedResponse); } @Override - public List fetchAllCredentialsForWallet(String walletId, String walletKey, String locale) { - List credentials = walletCredentialsRepository.findByWalletId(walletId); + public List fetchAllCredentialsForWallet(String walletId, String base64Key, String locale) throws CredentialProcessingException { + log.info("Fetching all credentials for wallet: {}", walletId); + + List credentials = repository.findByWalletId(walletId); - return credentials.stream().map(credentialRecord -> { + return credentials.stream().map(credential -> { + String issuerId = credential.getCredentialMetadata().getIssuerId(); + IssuerConfig issuerConfig = null; try { - String issuerId = credentialRecord.getCredentialMetadata().getIssuerId(); - IssuerConfig issuerConfig = fetchIssuerConfig(issuerId, credentialRecord.getCredentialMetadata().getCredentialType()); - return WalletCredentialResponseDTOFactory.buildCredentialResponseDTO( - issuerConfig.getIssuerDTO(), issuerConfig.getCredentialsSupportedResponse(), locale, credentialRecord.getId()); - } catch (Exception e) { - log.info("Error occurred while fetching configuration of issuerId: {} for credentialId: {}", - credentialRecord.getCredentialMetadata().getIssuerId(), credentialRecord.getId(), e); - return WalletCredentialResponseDTOFactory.buildCredentialResponseDTO(null, null, locale, credentialRecord.getId()); + issuerConfig = issuersService.getIssuerConfig(issuerId, credential.getCredentialMetadata().getCredentialType()); + } catch (ApiNotAccessibleException | IOException | AuthorizationServerWellknownResponseException | + InvalidWellknownResponseException e) { + log.error("Failed to fetch issuer details for issuerId: {}", issuerId, e); } - }).toList(); + return WalletCredentialResponseDTOFactory.buildCredentialResponseDTO(issuerConfig, locale, credential.getId()); + }).collect(Collectors.toList()); + } @Override - public WalletCredentialResponseDTO fetchVerifiableCredential(String walletId, String credentialId, String base64EncodedWalletKey, String locale) - throws DecryptionException, CorruptedEncryptedDataException, ExternalServiceUnavailableException { - Optional verifiableCredentialObj = walletCredentialsRepository.findByIdAndWalletId(credentialId, walletId); - VerifiableCredential verifiableCredential; - if (verifiableCredentialObj.isEmpty()) { - log.error("Credential not found for walletId: {} and credentialId: {}", walletId, credentialId); - throw new CredentialNotFoundException(RESOURCE_NOT_FOUND.getErrorCode(), RESOURCE_NOT_FOUND.getErrorMessage()); - } - verifiableCredential = verifiableCredentialObj.get(); - - String decryptCredentialResponse = encryptionDecryptionUtil.decryptCredential(verifiableCredential.getCredential(), base64EncodedWalletKey); - String issuerId = verifiableCredential.getCredentialMetadata().getIssuerId(); - String credentialType = verifiableCredential.getCredentialMetadata().getCredentialType(); - String dataShareUrl = verifiableCredential.getCredentialMetadata().getDataShareUrl(); - String credentialValidity = verifiableCredential.getCredentialMetadata().getCredentialValidity(); - - IssuerConfig issuerConfig = fetchIssuerConfig(issuerId, credentialType); + public WalletCredentialResponseDTO fetchVerifiableCredential(String walletId, String credentialId, + String base64Key, String locale) + throws CredentialNotFoundException, CredentialProcessingException { + log.info("Fetching credential: {} for wallet: {}", credentialId, walletId); + VerifiableCredential credential = repository.findByIdAndWalletId(credentialId, walletId) + .orElseThrow(() -> { + log.warn("Credential not found: {} for wallet: {}", credentialId, walletId); + return new CredentialNotFoundException(RESOURCE_NOT_FOUND.getErrorCode(), RESOURCE_NOT_FOUND.getErrorMessage()); + }); - VCCredentialResponse vcCredentialResponse; try { - vcCredentialResponse = objectMapper.readValue(decryptCredentialResponse, VCCredentialResponse.class); - } catch (JsonProcessingException e) { - log.error("Error occurred while parsing the decrypted credential response", e); - throw new CorruptedEncryptedDataException(SCHEMA_MISMATCH.getErrorCode(), SCHEMA_MISMATCH.getErrorMessage(), e); + String decryptedCredential = encryptionDecryptionUtil.decryptCredential(credential.getCredential(), base64Key); + WalletCredentialResponseDTO response = credentialUtilService.generateCredentialResponse( + decryptedCredential, credential.getCredentialMetadata(), locale); + log.debug("Credential fetched successfully: {}", credentialId); + return response; + } catch (DecryptionException e) { + log.error("Decryption failed for credential: {}", credentialId, e); + throw new CredentialProcessingException(CREDENTIAL_FETCH_EXCEPTION.getErrorCode(), "Decryption failed", e); } - - ByteArrayInputStream byteArrayInputStream; - try { - byteArrayInputStream = credentialUtilService.generatePdfForVerifiableCredentials( - credentialType, vcCredentialResponse, issuerConfig.getIssuerDTO(), - issuerConfig.getCredentialsSupportedResponse(), dataShareUrl, credentialValidity, locale); - } catch (Exception e) { - log.error("Error occurred while creating pdf", e); - throw new CredentialPdfGenerationException( - SERVER_UNAVAILABLE.getErrorCode(), - SERVER_UNAVAILABLE.getErrorMessage()); - } - String fileName = getCredentialDisplayDTOBasedOnLocale(issuerConfig.getCredentialsSupportedResponse().getDisplay(), locale).getName(); - - return new WalletCredentialResponseDTO(new InputStreamResource(byteArrayInputStream), fileName); } - private CredentialIssuerWellKnownResponse getIssuerWellKnownResponse(String issuerId) throws AuthorizationServerWellknownResponseException, ApiNotAccessibleException, IOException, InvalidWellknownResponseException { - CredentialIssuerConfiguration credentialIssuerConfiguration = issuersService.getIssuerConfiguration(issuerId); - return new CredentialIssuerWellKnownResponse( - credentialIssuerConfiguration.getCredentialIssuer(), - credentialIssuerConfiguration.getAuthorizationServers(), - credentialIssuerConfiguration.getCredentialEndPoint(), - credentialIssuerConfiguration.getCredentialConfigurationsSupported() - ); - } } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java index a7621288f..05a6ff3b0 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java @@ -2,9 +2,12 @@ import io.mosip.mimoto.dbentity.Wallet; import io.mosip.mimoto.dto.WalletResponseDto; +import io.mosip.mimoto.exception.ErrorConstants; +import io.mosip.mimoto.exception.InvalidRequestException; import io.mosip.mimoto.repository.WalletRepository; import io.mosip.mimoto.service.WalletService; import io.mosip.mimoto.util.WalletUtil; +import io.mosip.mimoto.util.WalletValidator; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -13,34 +16,56 @@ import java.util.Optional; import java.util.stream.Collectors; - +/** + * Implementation of {@link WalletService} for managing wallets. + */ @Slf4j @Service public class WalletServiceImpl implements WalletService { - @Autowired - private WalletRepository walletRepository; + private final WalletRepository repository; + private final WalletUtil walletUtil; + private final WalletValidator validator; @Autowired - private WalletUtil walletHelper; + public WalletServiceImpl(WalletRepository repository, WalletUtil walletUtil, WalletValidator validator) { + this.repository = repository; + this.walletUtil = walletUtil; + this.validator = validator; + } + @Override - public String createWallet(String userId, String walletName, String pin) { - // Create a new wallet for the user - return walletHelper.createWallet(userId, walletName, pin); + public String createWallet(String userId, String name, String pin) throws InvalidRequestException { + log.info("Creating wallet for user: {}, name: {}", userId, name); + validator.validateWalletRequest(userId, name, pin); + + String walletId = walletUtil.createWallet(userId, name, pin); + log.debug("Wallet created successfully: {}", walletId); + return walletId; + } @Override - public String getWalletKey(String userId, String walletId, String pin) { - Optional existingWallet = walletRepository.findByUserIdAndId(userId, walletId); - // Decrypt wallet key using the user's PIN - return existingWallet.map(wallet -> walletHelper.decryptWalletKey(wallet.getWalletKey(), pin)).orElse(null); + public String getWalletKey(String userId, String walletId, String pin) throws InvalidRequestException { + log.info("Retrieving wallet key for user: {}, wallet: {}", userId, walletId); + + return repository.findByUserIdAndId(userId, walletId) + .map(wallet -> walletUtil.decryptWalletKey(wallet.getWalletKey(), pin)) + .orElseThrow(() -> { + log.warn("Wallet not found: {} for user: {}", walletId, userId); + return new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Wallet not found"); + }); + } @Override public List getWallets(String userId) { - List walletIds = walletRepository.findWalletIdByUserId(userId); + log.info("Retrieving wallets for user: {}", userId); + + List walletIds = repository.findWalletIdByUserId(userId); return walletIds.stream() - .map(WalletResponseDto::new) + .map(id -> WalletResponseDto.builder().walletId(id).build()) .collect(Collectors.toList()); + } } diff --git a/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java b/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java index 797429fd0..57d48ff55 100644 --- a/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java +++ b/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java @@ -4,14 +4,16 @@ import com.fasterxml.jackson.databind.ObjectMapper; import io.mosip.mimoto.dbentity.CredentialMetadata; import io.mosip.mimoto.dbentity.VerifiableCredential; + +import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.IssuerConfig; import io.mosip.mimoto.dto.mimoto.VCCredentialRequest; import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; -import io.mosip.mimoto.exception.CredentialProcessingException; -import io.mosip.mimoto.exception.ExternalServiceUnavailableException; -import io.mosip.mimoto.exception.VCVerificationException; +import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; +import io.mosip.mimoto.exception.*; import io.mosip.mimoto.model.QRCodeType; import io.mosip.mimoto.repository.WalletCredentialsRepository; +import io.mosip.mimoto.service.IssuersService; import io.mosip.mimoto.service.impl.DataShareServiceImpl; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -21,34 +23,95 @@ import static io.mosip.mimoto.exception.ErrorConstants.*; +/** + * Utility class for processing and storing credentials. + */ @Slf4j @Component public class CredentialProcessor { - @Autowired - private CredentialUtilService credentialUtilService; - - @Autowired - private DataShareServiceImpl dataShareService; - @Autowired - private ObjectMapper objectMapper; + private final CredentialUtilService credentialUtilService; + private final DataShareServiceImpl dataShareService; + private final ObjectMapper objectMapper; + private final EncryptionDecryptionUtil encryptionDecryptionUtil; + private final WalletCredentialsRepository walletCredentialsRepository; + private final IssuersService issuersService; @Autowired - private EncryptionDecryptionUtil encryptionDecryptionUtil; + public CredentialProcessor( + CredentialUtilService credentialUtilService, + DataShareServiceImpl dataShareService, + ObjectMapper objectMapper, + EncryptionDecryptionUtil encryptionDecryptionUtil, + WalletCredentialsRepository walletCredentialsRepository, + IssuersService issuersService) { + this.credentialUtilService = credentialUtilService; + this.dataShareService = dataShareService; + this.objectMapper = objectMapper; + this.encryptionDecryptionUtil = encryptionDecryptionUtil; + this.walletCredentialsRepository = walletCredentialsRepository; + this.issuersService = issuersService; + } - @Autowired - private WalletCredentialsRepository walletCredentialsRepository; + /** + * Processes and stores a credential using the provided token and parameters. + * + * @param tokenResponse The token response containing the access token. + * @param credentialType The type of the credential. + * @param walletId The ID of the wallet. + * @param base64Key The Base64-encoded wallet key. + * @param credentialValidity The validity period of the credential. + * @param issuerId The ID of the issuer. + * @return The stored VerifiableCredential. + * @throws InvalidRequestException If input parameters are invalid. + * @throws CredentialProcessingException If processing fails. + * @throws ExternalServiceUnavailableException If an external service is unavailable. + * @throws VCVerificationException If credential verification fails. + */ + public VerifiableCredentialResponseDTO processAndStoreCredential( + TokenResponseDTO tokenResponse, String credentialType, String walletId, + String base64Key, String credentialValidity, String issuerId, String locale) + throws InvalidRequestException, CredentialProcessingException, ExternalServiceUnavailableException, VCVerificationException { + // Validate inputs + if (tokenResponse == null || tokenResponse.getAccess_token() == null) { + log.error("Invalid token response: null or missing access token"); + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Token response or access token cannot be null"); + } + if (credentialType == null || credentialType.isBlank()) { + log.error("Invalid credential type: null or blank"); + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Credential type cannot be null or blank"); + } + if (walletId == null || walletId.isBlank()) { + log.error("Invalid wallet ID: null or blank"); + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Wallet ID cannot be null or blank"); + } + if (base64Key == null || base64Key.isBlank()) { + log.error("Invalid wallet key: null or blank"); + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Wallet key cannot be null or blank"); + } + if (issuerId == null || issuerId.isBlank()) { + log.error("Invalid issuer ID: null or blank"); + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Issuer ID cannot be null or blank"); + } - public VerifiableCredential processAndStoreCredential( - IssuerConfig issuerConfig, String accessToken, String credentialType, - String walletId, String base64EncodedWalletKey, String credentialValidity, String issuerId) throws ExternalServiceUnavailableException { + // Fetch issuer configuration + IssuerConfig issuerConfig; + try { + issuerConfig = issuersService.getIssuerConfig(issuerId, credentialType); + } catch (Exception e) { + log.error("Failed to fetch issuer config for issuerId: {}", issuerId, e); + throw new CredentialProcessingException( + CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), + "Unable to fetch issuer configuration", e); + } // Generate credential request VCCredentialRequest vcCredentialRequest; try { vcCredentialRequest = credentialUtilService.generateVCCredentialRequest( issuerConfig.getIssuerDTO(), issuerConfig.getWellKnownResponse(), - issuerConfig.getCredentialsSupportedResponse(), accessToken, walletId, base64EncodedWalletKey, true); + issuerConfig.getCredentialsSupportedResponse(), tokenResponse.getAccess_token(), + walletId, base64Key, true); } catch (Exception e) { log.error("Failed to generate VC credential request for issuerId: {}, credentialType: {}", issuerId, credentialType, e); throw new CredentialProcessingException( @@ -61,7 +124,7 @@ public VerifiableCredential processAndStoreCredential( try { vcCredentialResponse = credentialUtilService.downloadCredential( issuerConfig.getWellKnownResponse().getCredentialEndPoint(), - vcCredentialRequest, accessToken); + vcCredentialRequest, tokenResponse.getAccess_token()); } catch (Exception e) { log.error("Failed to download credential for issuerId: {}, credentialType: {}", issuerId, credentialType, e); throw new ExternalServiceUnavailableException( @@ -113,7 +176,7 @@ public VerifiableCredential processAndStoreCredential( String encryptedCredentialData; try { - encryptedCredentialData = encryptionDecryptionUtil.encryptCredential(vcResponseAsJsonString, base64EncodedWalletKey); + encryptedCredentialData = encryptionDecryptionUtil.encryptCredential(vcResponseAsJsonString, base64Key); } catch (Exception e) { log.error("Failed to encrypt credential for issuerId: {}, credentialType: {}", issuerId, credentialType, e); throw new CredentialProcessingException( @@ -121,9 +184,21 @@ public VerifiableCredential processAndStoreCredential( "Unable to encrypt credential data", e); } - return saveCredential(walletId, encryptedCredentialData, issuerId, credentialType, dataShareUrl, credentialValidity); + VerifiableCredential savedCredential = saveCredential(walletId, encryptedCredentialData, issuerId, credentialType, dataShareUrl, credentialValidity); + return WalletCredentialResponseDTOFactory.buildCredentialResponseDTO(issuerConfig, locale, savedCredential.getId()); } + /** + * Saves the credential to the repository. + * + * @param walletId The wallet ID. + * @param encryptedCredential The encrypted credential data. + * @param issuerId The issuer ID. + * @param credentialType The credential type. + * @param dataShareUrl The data share URL. + * @param credentialValidity The credential validity. + * @return The stored VerifiableCredential. + */ private VerifiableCredential saveCredential(String walletId, String encryptedCredential, String issuerId, String credentialType, String dataShareUrl, String credentialValidity) { CredentialMetadata credentialMetadata = new CredentialMetadata(); @@ -138,6 +213,13 @@ private VerifiableCredential saveCredential(String walletId, String encryptedCre verifiableCredential.setCredential(encryptedCredential); verifiableCredential.setCredentialMetadata(credentialMetadata); - return walletCredentialsRepository.save(verifiableCredential); + try { + return walletCredentialsRepository.save(verifiableCredential); + } catch (Exception e) { + log.error("Failed to save credential for walletId: {}, issuerId: {}, credentialType: {}", walletId, issuerId, credentialType, e); + throw new CredentialProcessingException( + CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), + "Unable to save credential to database", e); + } } } diff --git a/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java b/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java index 9f657a933..948b57083 100644 --- a/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java +++ b/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java @@ -11,11 +11,13 @@ import com.itextpdf.html2pdf.HtmlConverter; import com.itextpdf.html2pdf.resolver.font.DefaultFontProvider; import com.itextpdf.kernel.pdf.PdfWriter; +import io.mosip.mimoto.dbentity.CredentialMetadata; import io.mosip.mimoto.dbentity.ProofSigningKey; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.dto.openid.presentation.PresentationDefinitionDTO; +import io.mosip.mimoto.dto.resident.WalletCredentialResponseDTO; import io.mosip.mimoto.exception.*; import io.mosip.mimoto.model.QRCodeType; import io.mosip.mimoto.model.SigningAlgorithm; @@ -34,6 +36,7 @@ import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.io.InputStreamResource; import org.springframework.http.HttpEntity; import org.springframework.http.MediaType; import org.springframework.stereotype.Service; @@ -51,6 +54,8 @@ import java.util.*; import java.util.stream.Collectors; +import static io.mosip.mimoto.exception.ErrorConstants.CREDENTIAL_FETCH_EXCEPTION; + @Slf4j @Service public class CredentialUtilService { @@ -334,5 +339,54 @@ private String constructQRCode(String qrData) throws WriterException { BufferedImage qrImage = MatrixToImageWriter.toBufferedImage(bitMatrix); return Utilities.encodeToString(qrImage, "png"); } + + public WalletCredentialResponseDTO generateCredentialResponse(String decryptedCredential, CredentialMetadata credentialMetadata, String locale) throws CredentialProcessingException { + log.info("Generating credential response for issuerId: {}, credentialType: {}", credentialMetadata.getIssuerId(), credentialMetadata.getCredentialType()); + try { + // Parse decrypted credential + VCCredentialResponse vcCredentialResponse = objectMapper.readValue(decryptedCredential, VCCredentialResponse.class); + + // Fetch issuer details + IssuerDTO issuerDTO = issuersService.getIssuerDetails(credentialMetadata.getIssuerId()); + + // Fetch issuer configuration + IssuerConfig issuerConfig = issuersService.getIssuerConfig(credentialMetadata.getIssuerId(), credentialMetadata.getCredentialType()); + + // Find credentials supported response for the credential type + CredentialsSupportedResponse credentialsSupportedResponse = issuerConfig.getCredentialsSupportedResponse(); + if (credentialsSupportedResponse == null || !credentialsSupportedResponse.getCredentialDefinition().getType().contains(credentialMetadata.getCredentialType())) { + log.error("Credentials supported response not found for credentialType: {}", credentialMetadata.getCredentialType()); + throw new CredentialProcessingException(CREDENTIAL_FETCH_EXCEPTION.getErrorCode(), "Invalid credential type configuration"); + } + + // Generate PDF + ByteArrayInputStream pdfStream = generatePdfForVerifiableCredentials( + credentialMetadata.getCredentialType(), + vcCredentialResponse, + issuerDTO, + credentialsSupportedResponse, + credentialMetadata.getDataShareUrl(), + credentialMetadata.getCredentialValidity(), + locale + ); + + // Construct response + String fileName = String.format("%s_credential.pdf", credentialMetadata.getCredentialType()); + return WalletCredentialResponseDTO.builder() + .fileName(fileName) + .fileContentStream(new InputStreamResource(pdfStream)) + .build(); + } catch (JsonProcessingException e) { + log.error("Failed to parse decrypted credential for issuerId: {}, credentialType: {}", credentialMetadata.getIssuerId(), credentialMetadata.getCredentialType(), e); + throw new CredentialProcessingException(CREDENTIAL_FETCH_EXCEPTION.getErrorCode(), "Failed to parse decrypted credential"); + } catch (ApiNotAccessibleException | IOException | AuthorizationServerWellknownResponseException | InvalidWellknownResponseException | InvalidIssuerIdException e) { + log.error("Failed to fetch issuer details or configuration for issuerId: {}", credentialMetadata.getIssuerId(), e); + throw new CredentialProcessingException(CREDENTIAL_FETCH_EXCEPTION.getErrorCode(), "Failed to fetch issuer configuration"); + } catch (Exception e) { + log.error("Failed to generate PDF for credentialType: {}", credentialMetadata.getCredentialType(), e); + throw new CredentialProcessingException(CREDENTIAL_FETCH_EXCEPTION.getErrorCode(), "Failed to generate credential PDF"); + } + } } + diff --git a/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java b/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java index 34cef52cf..56afb1c0a 100644 --- a/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java +++ b/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java @@ -4,181 +4,379 @@ import io.mosip.kernel.cryptomanager.dto.CryptoWithPinRequestDto; import io.mosip.kernel.cryptomanager.dto.CryptoWithPinResponseDto; import io.mosip.kernel.cryptomanager.dto.CryptomanagerRequestDto; +import io.mosip.kernel.cryptomanager.dto.CryptomanagerResponseDto; import io.mosip.kernel.cryptomanager.service.CryptomanagerService; import io.mosip.mimoto.exception.DecryptionException; import io.mosip.mimoto.exception.EncryptionException; -import org.apache.commons.lang3.StringUtils; - +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; -import javax.crypto.*; +import javax.crypto.Cipher; +import javax.crypto.SecretKey; import javax.crypto.spec.GCMParameterSpec; import java.nio.charset.StandardCharsets; -import java.security.*; +import java.security.KeyFactory; +import java.security.PrivateKey; +import java.security.SecureRandom; import java.security.spec.PKCS8EncodedKeySpec; import java.util.Base64; import static io.mosip.mimoto.exception.ErrorConstants.DECRYPTION_FAILED; import static io.mosip.mimoto.exception.ErrorConstants.ENCRYPTION_FAILED; +/** + * Utility class for encryption and decryption operations. + */ +@Slf4j @Component public class EncryptionDecryptionUtil { - /** - * The cryptomanager service. - */ + private static final String AES_ALGORITHM = "AES/GCM/NoPadding"; + private static final int NONCE_LENGTH = 12; // Recommended nonce length for GCM + private static final int TAG_LENGTH = 128; // Authentication tag length in bits (16 bytes) + public static final String USER_PII_KEY_REFERENCE_ID = "user_pii"; - private static final int GCM_IV_LENGTH = 12; // 12-byte IV for GCM - private static final int GCM_TAG_LENGTH = 128; // 128-bit authentication tag + private final CryptomanagerService cryptomanagerService; - public static final String USER_PII_KEY_REFERENCE_ID = "user_pii"; + @Value("${mosip.inji.app.id:MIMOTO}") + private String appId; @Autowired - private CryptomanagerService cryptomanagerService; - private - @Value("${spring.application.name}") - String appId; + public EncryptionDecryptionUtil(CryptomanagerService cryptomanagerService) { + this.cryptomanagerService = cryptomanagerService; + } - public String encrypt(String dataToEncrypt, String refId, String aad, String saltToEncrypt) { - if (StringUtils.isBlank(dataToEncrypt)) { + /** + * Encrypts data using the provided reference ID, AAD, and salt. + * + * @param data The data to encrypt. + * @param refId The reference ID. + * @param aad The additional authentication data. + * @param salt The salt for encryption. + * @return The encrypted data. + */ + public String encrypt(String data, String refId, String aad, String salt) { + if (data == null) { + log.warn("Encryption skipped: Input data is null"); return null; } - CryptomanagerRequestDto request = new CryptomanagerRequestDto(); - request.setApplicationId(appId.toUpperCase()); - request.setTimeStamp(DateUtils.getUTCCurrentDateTime()); - request.setData(CryptoUtil.encodeToURLSafeBase64(dataToEncrypt.getBytes(StandardCharsets.UTF_8))); - request.setReferenceId(refId); - request.setAad(aad); - request.setSalt(saltToEncrypt); - return cryptomanagerService.encrypt(request).getData(); + try { + CryptomanagerRequestDto request = new CryptomanagerRequestDto(); + request.setApplicationId(appId); + request.setReferenceId(refId); + request.setData(CryptoUtil.encodeToURLSafeBase64(data.getBytes(StandardCharsets.UTF_8))); + request.setAad(aad); + request.setSalt(salt); + CryptomanagerResponseDto response = cryptomanagerService.encrypt(request); + log.debug("Data encrypted successfully for refId: {}", refId); + return response.getData(); + } catch (Exception e) { + log.error("Encryption failed for refId: {}", refId, e); + throw new RuntimeException("Failed to encrypt data", e); + } } - public String decrypt(String dataToDecrypt, String refId, String aad, String saltToDecrypt) { - if (StringUtils.isBlank(dataToDecrypt)) { + /** + * Decrypts data using the provided reference ID, AAD, and salt. + * + * @param data The data to decrypt. + * @param refId The reference ID. + * @param aad The additional authentication data. + * @param salt The salt for decryption. + * @return The decrypted data. + */ + public String decrypt(String data, String refId, String aad, String salt) { + if (data == null) { + log.warn("Decryption skipped: Input data is null"); return null; } - CryptomanagerRequestDto request = new CryptomanagerRequestDto(); - request.setApplicationId(appId.toUpperCase()); - request.setTimeStamp(DateUtils.getUTCCurrentDateTime()); - request.setData(dataToDecrypt); - request.setReferenceId(refId); - request.setAad(aad); - request.setSalt(saltToDecrypt); - return new String(CryptoUtil.decodeURLSafeBase64(cryptomanagerService.decrypt(request).getData())); + try { + CryptomanagerRequestDto request = new CryptomanagerRequestDto(); + request.setApplicationId(appId); + request.setReferenceId(refId); + request.setData(data); + request.setAad(aad); + request.setSalt(salt); + CryptomanagerResponseDto response = cryptomanagerService.decrypt(request); + String decryptedData = new String(CryptoUtil.decodeURLSafeBase64(response.getData()), StandardCharsets.UTF_8); + log.debug("Data decrypted successfully for refId: {}", refId); + return decryptedData; + } catch (Exception e) { + log.error("Decryption failed for refId: {}", refId, e); + throw new RuntimeException("Failed to decrypt data", e); + } } - /** - * Encrypts the given data using AES-GCM. + /** + * Encrypts data with AES/GCM/NoPadding using the provided key. * - * @param aesKey The AES secret key - * @param data The data to encrypt (as byte[]) - * @return Base64 encoded string of (IV + encryptedData) + * @param key The AES key. + * @param data The data to encrypt. + * @return The encrypted data, including the nonce prepended, encoded in Base64. */ - public String encryptWithAES(SecretKey aesKey, byte[] data) throws EncryptionException { + public String encryptWithAES(SecretKey key, byte[] data) { + if (data == null || data.length == 0) { + log.warn("AES encryption skipped: Input data is null or empty"); + return null; + } try { - Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); - - // Generate a secure random IV - byte[] iv = new byte[GCM_IV_LENGTH]; - SecureRandom secureRandom = new SecureRandom(); - secureRandom.nextBytes(iv); + // Generate a random nonce + byte[] nonce = new byte[NONCE_LENGTH]; + SecureRandom secureRandom = new SecureRandom(); + secureRandom.nextBytes(nonce); + GCMParameterSpec gcmSpec = new GCMParameterSpec(TAG_LENGTH, nonce); - // Initialize cipher with AES key & IV - GCMParameterSpec gcmSpec = new GCMParameterSpec(GCM_TAG_LENGTH, iv); - cipher.init(Cipher.ENCRYPT_MODE, aesKey, gcmSpec); + // Initialize cipher + Cipher cipher = Cipher.getInstance(AES_ALGORITHM); + cipher.init(Cipher.ENCRYPT_MODE, key, gcmSpec); - // Encrypt the data - byte[] encryptedData = cipher.doFinal(data); + // Encrypt data + byte[] encryptedData = cipher.doFinal(data); - // Combine IV + Encrypted Data - byte[] finalEncryptedData = new byte[GCM_IV_LENGTH + encryptedData.length]; - System.arraycopy(iv, 0, finalEncryptedData, 0, GCM_IV_LENGTH); - System.arraycopy(encryptedData, 0, finalEncryptedData, GCM_IV_LENGTH, encryptedData.length); + // Prepend nonce to encrypted data (nonce + ciphertext + tag) + byte[] combined = new byte[nonce.length + encryptedData.length]; + System.arraycopy(nonce, 0, combined, 0, nonce.length); + System.arraycopy(encryptedData, 0, combined, nonce.length, encryptedData.length); - return Base64.getEncoder().encodeToString(finalEncryptedData); - } catch (NoSuchAlgorithmException | NoSuchPaddingException | - InvalidKeyException | InvalidAlgorithmParameterException | - IllegalBlockSizeException | BadPaddingException e) { - throw new EncryptionException(ENCRYPTION_FAILED.getErrorCode(), ENCRYPTION_FAILED.getErrorMessage(), e); + // Encode to Base64 + String result = Base64.getEncoder().encodeToString(combined); + log.debug("AES/GCM encryption successful, data length: {}", data.length); + return result; + } catch (Exception e) { + log.error("AES/GCM encryption failed", e); + throw new RuntimeException("Failed to encrypt with AES/GCM", e); } } /** - * Decrypts the given Base64 encoded data using AES-GCM. + * Decrypts data with AES/GCM/NoPadding using the provided key. * - * @param aesKey The AES secret key - * @param base64EncodedData Base64 encoded string of (IV + encryptedData) - * @return Decrypted data as byte[] + * @param key The AES key. + * @param data The encrypted data (Base64-encoded, with nonce prepended). + * @return The decrypted data. */ - public byte[] decryptWithAES(SecretKey aesKey, String base64EncodedData) throws DecryptionException { + public byte[] decryptWithAES(SecretKey key, String data) { + if (data == null || data.isEmpty()) { + log.warn("AES decryption skipped: Input data is null or empty"); + return null; + } try { - Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); - byte[] decodedData = Base64.getDecoder().decode(base64EncodedData); - - // Extract IV and Encrypted Data - byte[] iv = new byte[GCM_IV_LENGTH]; - byte[] encryptedData = new byte[decodedData.length - GCM_IV_LENGTH]; + // Decode Base64 data + byte[] decodedData = Base64.getDecoder().decode(data); - System.arraycopy(decodedData, 0, iv, 0, GCM_IV_LENGTH); - System.arraycopy(decodedData, GCM_IV_LENGTH, encryptedData, 0, encryptedData.length); + // Extract nonce and encrypted data + if (decodedData.length < NONCE_LENGTH) { + log.error("Invalid encrypted data: too short"); + throw new IllegalArgumentException("Invalid encrypted data length"); + } + byte[] nonce = new byte[NONCE_LENGTH]; + byte[] encryptedData = new byte[decodedData.length - NONCE_LENGTH]; + System.arraycopy(decodedData, 0, nonce, 0, NONCE_LENGTH); + System.arraycopy(decodedData, NONCE_LENGTH, encryptedData, 0, encryptedData.length); - // Initialize cipher with AES key & extracted IV - GCMParameterSpec gcmSpec = new GCMParameterSpec(GCM_TAG_LENGTH, iv); - cipher.init(Cipher.DECRYPT_MODE, aesKey, gcmSpec); + // Initialize cipher + GCMParameterSpec gcmSpec = new GCMParameterSpec(TAG_LENGTH, nonce); + Cipher cipher = Cipher.getInstance(AES_ALGORITHM); + cipher.init(Cipher.DECRYPT_MODE, key, gcmSpec); - return cipher.doFinal(encryptedData); - } catch (NoSuchAlgorithmException | NoSuchPaddingException | - InvalidKeyException | InvalidAlgorithmParameterException | - IllegalBlockSizeException | BadPaddingException e) { - throw new DecryptionException(DECRYPTION_FAILED.getErrorCode(), DECRYPTION_FAILED.getErrorMessage(), e); + // Decrypt data + byte[] decryptedData = cipher.doFinal(encryptedData); + log.debug("AES/GCM decryption successful, decrypted length: {}", decryptedData.length); + return decryptedData; + } catch (Exception e) { + log.error("AES/GCM decryption failed", e); + throw new RuntimeException("Failed to decrypt with AES/GCM", e); } } - public static byte[] stringToBytes(String data) { - return data.getBytes(StandardCharsets.UTF_8); - } - - public static String bytesToString(byte[] data) { - return new String(data, StandardCharsets.UTF_8); - } - + /** + * Converts a byte array to a SecretKey for AES. + * + * @param keyBytes The byte array representing the key. + * @return The SecretKey. + */ public static SecretKey bytesToSecretKey(byte[] keyBytes) { - return new javax.crypto.spec.SecretKeySpec(keyBytes, "AES"); + if (keyBytes == null || keyBytes.length == 0) { + log.error("Invalid key bytes: null or empty"); + throw new IllegalArgumentException("Key bytes cannot be null or empty"); + } + try { + return new javax.crypto.spec.SecretKeySpec(keyBytes, "AES"); + } catch (Exception e) { + log.error("Failed to convert bytes to SecretKey", e); + throw new RuntimeException("Failed to create SecretKey", e); + } } + + /** + * Converts a byte array to a PrivateKey for the specified algorithm. + * + * @param privateKeyBytes The byte array representing the private key. + * @param algorithmName The algorithm name (e.g., RSA, EC). + * @return The PrivateKey. + * @throws Exception If key conversion fails. + */ public static PrivateKey bytesToPrivateKey(byte[] privateKeyBytes, String algorithmName) throws Exception { - PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKeyBytes); - KeyFactory keyFactory = KeyFactory.getInstance(algorithmName); - return keyFactory.generatePrivate(keySpec); - } - - public String decryptWithPin(String encryptedString, String pin) { - CryptoWithPinRequestDto requestDto = new CryptoWithPinRequestDto(); - requestDto.setUserPin(pin); - requestDto.setData(encryptedString); - CryptoWithPinResponseDto responseDto = cryptomanagerService.decryptWithPin(requestDto); - return responseDto.getData(); + if (privateKeyBytes == null || privateKeyBytes.length == 0) { + log.error("Invalid private key bytes: null or empty"); + throw new IllegalArgumentException("Private key bytes cannot be null or empty"); + } + if (algorithmName == null || algorithmName.isEmpty()) { + log.error("Invalid algorithm name: null or empty"); + throw new IllegalArgumentException("Algorithm name cannot be null or empty"); + } + try { + PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKeyBytes); + KeyFactory keyFactory = KeyFactory.getInstance(algorithmName); + return keyFactory.generatePrivate(keySpec); + } catch (Exception e) { + log.error("Failed to convert bytes to PrivateKey for algorithm: {}", algorithmName, e); + throw new Exception("Failed to create PrivateKey", e); + } } + /** + * Encrypts a SecretKey with a user PIN. + * + * @param encryptionKey The SecretKey to encrypt. + * @param pin The user PIN. + * @return The encrypted key data. + */ public String encryptKeyWithPin(SecretKey encryptionKey, String pin) { - CryptoWithPinRequestDto requestDto = new CryptoWithPinRequestDto(); - requestDto.setUserPin(pin); - String dataAsString = Base64.getEncoder().encodeToString(encryptionKey.getEncoded()); - requestDto.setData(dataAsString); - return cryptomanagerService.encryptWithPin(requestDto).getData(); + if (encryptionKey == null) { + log.error("Encryption key is null"); + throw new IllegalArgumentException("Encryption key cannot be null"); + } + if (pin == null || pin.isEmpty()) { + log.error("PIN is null or empty"); + throw new IllegalArgumentException("PIN cannot be null or empty"); + } + try { + CryptoWithPinRequestDto requestDto = new CryptoWithPinRequestDto(); + requestDto.setUserPin(pin); + String dataAsString = Base64.getEncoder().encodeToString(encryptionKey.getEncoded()); + requestDto.setData(dataAsString); + CryptoWithPinResponseDto responseDto = cryptomanagerService.encryptWithPin(requestDto); + log.debug("Key encrypted with PIN successfully"); + return responseDto.getData(); + } catch (Exception e) { + log.error("Failed to encrypt key with PIN", e); + throw new RuntimeException("Failed to encrypt key with PIN", e); + } } - public String encryptCredential(String credentialData, String base64EncodedWalletKey) throws EncryptionException { - byte[] decodedWalletKey = Base64.getDecoder().decode(base64EncodedWalletKey); - SecretKey walletKey = bytesToSecretKey(decodedWalletKey); - return encryptWithAES(walletKey, stringToBytes(credentialData)); + /** + * Decrypts data using a user PIN. + * + * @param encryptedString The encrypted data. + * @param pin The user PIN. + * @return The decrypted data. + */ + public String decryptWithPin(String encryptedString, String pin) { + if (encryptedString == null || encryptedString.isEmpty()) { + log.error("Encrypted string is null or empty"); + throw new IllegalArgumentException("Encrypted string cannot be null or empty"); + } + if (pin == null || pin.isEmpty()) { + log.error("PIN is null or empty"); + throw new IllegalArgumentException("PIN cannot be null or empty"); + } + try { + CryptoWithPinRequestDto requestDto = new CryptoWithPinRequestDto(); + requestDto.setUserPin(pin); + requestDto.setData(encryptedString); + CryptoWithPinResponseDto responseDto = cryptomanagerService.decryptWithPin(requestDto); + log.debug("Data decrypted with PIN successfully"); + return responseDto.getData(); + } catch (Exception e) { + log.error("Failed to decrypt with PIN", e); + throw new RuntimeException("Failed to decrypt with PIN", e); + } } + /** + * Encrypts credential data using a wallet key. + * + * @param credentialData The credential data to encrypt. + * @param base64EncodedWalletKey The Base64-encoded wallet key. + * @return The encrypted credential data. + * @throws EncryptionException If encryption fails. + */ + public String encryptCredential(String credentialData, String base64EncodedWalletKey) throws EncryptionException { + if (credentialData == null || credentialData.isEmpty()) { + log.error("Credential data is null or empty"); + throw new EncryptionException(ENCRYPTION_FAILED.getErrorCode(), "Credential data cannot be null or empty"); + } + if (base64EncodedWalletKey == null || base64EncodedWalletKey.isEmpty()) { + log.error("Wallet key is null or empty"); + throw new EncryptionException(ENCRYPTION_FAILED.getErrorCode(), "Wallet key cannot be null or empty"); + } + try { + byte[] decodedWalletKey = Base64.getDecoder().decode(base64EncodedWalletKey); + SecretKey walletKey = bytesToSecretKey(decodedWalletKey); + String encryptedData = encryptWithAES(walletKey, stringToBytes(credentialData)); + log.debug("Credential encrypted successfully"); + return encryptedData; + } catch (Exception e) { + log.error("Failed to encrypt credential", e); + throw new EncryptionException(ENCRYPTION_FAILED.getErrorCode(), "Failed to encrypt credential", e); + } + } + + /** + * Decrypts credential data using a wallet key. + * + * @param encryptedCredentialData The encrypted credential data. + * @param base64EncodedWalletKey The Base64-encoded wallet key. + * @return The decrypted credential data. + * @throws DecryptionException If decryption fails. + */ public String decryptCredential(String encryptedCredentialData, String base64EncodedWalletKey) throws DecryptionException { - byte[] decodedWalletKey = Base64.getDecoder().decode(base64EncodedWalletKey); - SecretKey walletKey = bytesToSecretKey(decodedWalletKey); - return bytesToString(decryptWithAES(walletKey, encryptedCredentialData)); + if (encryptedCredentialData == null || encryptedCredentialData.isEmpty()) { + log.error("Encrypted credential data is null or empty"); + throw new DecryptionException(DECRYPTION_FAILED.getErrorCode() , "Encrypted credential data cannot be null or empty"); + } + if (base64EncodedWalletKey == null || base64EncodedWalletKey.isEmpty()) { + log.error("Wallet key is null or empty"); + throw new DecryptionException(DECRYPTION_FAILED.getErrorCode(), "Wallet key cannot be null or empty"); + } + try { + byte[] decodedWalletKey = Base64.getDecoder().decode(base64EncodedWalletKey); + SecretKey walletKey = bytesToSecretKey(decodedWalletKey); + byte[] decryptedData = decryptWithAES(walletKey, encryptedCredentialData); + String result = bytesToString(decryptedData); + log.debug("Credential decrypted successfully"); + return result; + } catch (Exception e) { + log.error("Failed to decrypt credential", e); + throw new DecryptionException(DECRYPTION_FAILED.getErrorCode(), "Failed to decrypt credential", e); + } } + /** + * Converts a string to a byte array using UTF-8 encoding. + * + * @param data The input string. + * @return The byte array. + */ + private static byte[] stringToBytes(String data) { + if (data == null) { + return null; + } + return data.getBytes(StandardCharsets.UTF_8); + } + /** + * Converts a byte array to a string using UTF-8 encoding. + * + * @param data The byte array. + * @return The string. + */ + private static String bytesToString(byte[] data) { + if (data == null) { + return null; + } + return new String(data, StandardCharsets.UTF_8); + } } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/util/WalletCredentialResponseDTOFactory.java b/src/main/java/io/mosip/mimoto/util/WalletCredentialResponseDTOFactory.java index deba6bcb4..2184f4233 100644 --- a/src/main/java/io/mosip/mimoto/util/WalletCredentialResponseDTOFactory.java +++ b/src/main/java/io/mosip/mimoto/util/WalletCredentialResponseDTOFactory.java @@ -8,7 +8,7 @@ import static io.mosip.mimoto.util.LocaleUtils.getIssuerDisplayDTOBasedOnLocale; public class WalletCredentialResponseDTOFactory { - public static VerifiableCredentialResponseDTO buildCredentialResponseDTO(IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, + public static VerifiableCredentialResponseDTO buildCredentialResponseDTO(IssuerConfig issuerConfig, String locale, String credentialId) { String issuerName = ""; String issuerLogo = ""; @@ -16,17 +16,20 @@ public static VerifiableCredentialResponseDTO buildCredentialResponseDTO(IssuerD String credentialTypeLogo = ""; DisplayDTO issuerDisplayDTO; CredentialSupportedDisplayResponse credentialTypeDisplayDTO; - - if (issuerDTO != null) { - issuerDisplayDTO = getIssuerDisplayDTOBasedOnLocale(issuerDTO.getDisplay(), locale); - issuerName = issuerDisplayDTO.getName(); - issuerLogo = issuerDisplayDTO.getLogo().getUrl(); - } - if (credentialsSupportedResponse != null) { - credentialTypeDisplayDTO = getCredentialDisplayDTOBasedOnLocale( - credentialsSupportedResponse.getDisplay(), locale); - credentialType = credentialTypeDisplayDTO.getName(); - credentialTypeLogo = credentialTypeDisplayDTO.getLogo().getUrl(); + if (null != issuerConfig) { + IssuerDTO issuerDTO = issuerConfig.getIssuerDTO(); + CredentialsSupportedResponse credentialsSupportedResponse = issuerConfig.getCredentialsSupportedResponse(); + if (issuerDTO != null) { + issuerDisplayDTO = getIssuerDisplayDTOBasedOnLocale(issuerDTO.getDisplay(), locale); + issuerName = issuerDisplayDTO.getName(); + issuerLogo = issuerDisplayDTO.getLogo().getUrl(); + } + if (credentialsSupportedResponse != null) { + credentialTypeDisplayDTO = getCredentialDisplayDTOBasedOnLocale( + credentialsSupportedResponse.getDisplay(), locale); + credentialType = credentialTypeDisplayDTO.getName(); + credentialTypeLogo = credentialTypeDisplayDTO.getLogo().getUrl(); + } } return VerifiableCredentialResponseDTO.builder() diff --git a/src/main/java/io/mosip/mimoto/util/WalletUtil.java b/src/main/java/io/mosip/mimoto/util/WalletUtil.java index f75ebf835..9081528d2 100644 --- a/src/main/java/io/mosip/mimoto/util/WalletUtil.java +++ b/src/main/java/io/mosip/mimoto/util/WalletUtil.java @@ -4,6 +4,7 @@ import io.mosip.mimoto.dbentity.ProofSigningKey; import io.mosip.mimoto.dbentity.Wallet; import io.mosip.mimoto.dbentity.WalletMetadata; +import io.mosip.mimoto.exception.DecryptionException; import io.mosip.mimoto.exception.InvalidRequestException; import io.mosip.mimoto.model.SigningAlgorithm; import io.mosip.mimoto.repository.WalletRepository; diff --git a/src/main/java/io/mosip/mimoto/util/WalletValidator.java b/src/main/java/io/mosip/mimoto/util/WalletValidator.java index 878c48ed2..8b31669c5 100644 --- a/src/main/java/io/mosip/mimoto/util/WalletValidator.java +++ b/src/main/java/io/mosip/mimoto/util/WalletValidator.java @@ -1,35 +1,50 @@ package io.mosip.mimoto.util; import io.mosip.mimoto.dto.WalletRequestDto; +import io.mosip.mimoto.exception.ErrorConstants; +import io.mosip.mimoto.exception.InvalidRequestException; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; +/** + * Utility class for validating wallet-related requests. + */ +@Slf4j @Component public class WalletValidator { - @Value("${mosip.inji.user.wallet.pin.validation.regex}") + @Value("${mosip.inji.user.wallet.pin.validation.regex:^\\d{4,6}$}") private String pinRegex; - @Value("${mosip.inji.user.wallet.name.validation.regex}") - private String walletNameRegex; + @Value("${mosip.inji.user.wallet.name.validation.regex:^[A-Za-z0-9 _.-]{1,50}$}") + private String nameRegex; - private void validatePin(String pin) { - if (!pin.matches(pinRegex)) { - throw new IllegalArgumentException("Pin should be numeric with 4 or 6 digits."); + /** + * Validates a wallet creation request. + * + * @param userId The user ID. + * @param name The wallet name. + * @param pin The wallet PIN. + * @throws InvalidRequestException If the request is invalid. + */ + public void validateWalletRequest(String userId, String name, String pin) throws InvalidRequestException { + log.debug("Validating wallet request for user: {}, name: {}", userId, name); + + if (userId == null || userId.trim().isEmpty()) { + log.warn("Invalid user ID: null or empty"); + throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "User ID cannot be null or empty"); } - } - private void validateWalletName(String walletName) { - if (!walletName.matches(walletNameRegex)) { - throw new IllegalArgumentException("Wallet name should be alphanumeric with spaces and a few allowed special characters."); + if (name == null || !name.matches(nameRegex)) { + log.warn("Invalid wallet name: {}", name); + throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Wallet name must be alphanumeric with allowed special characters"); } - } - public void validateWalletRequest(WalletRequestDto walletRequest) { - // Validate both PIN and wallet name - validatePin(walletRequest.getWalletPin()); - if (!StringUtils.isEmpty(walletRequest.getWalletName())) { - validateWalletName(walletRequest.getWalletName()); + + if (pin == null || !pin.matches(pinRegex)) { + log.warn("Invalid PIN: {}", pin); + throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "PIN must be numeric with 4 or 6 digits"); } } } diff --git a/src/main/resources/application-default.properties b/src/main/resources/application-default.properties index 5e516dc0c..be45ee0ff 100644 --- a/src/main/resources/application-default.properties +++ b/src/main/resources/application-default.properties @@ -51,3 +51,7 @@ mosip.security.ignore-auth-urls=/safetynet/**,/actuator/**,/swagger-ui/**,/v3/ap /issuers,/issuers/**,/authorize,/req/otp,/vid,/req/auth/**,/req/individualId/otp,/aid/get-individual-id,/users/me/cache,\ /verifiers, /auth/*/token-login +mosip.inji.app.id=MIMOTO +mosip.inji.encryption.algorithm=AES +mosip.inji.encryption.key.size=256 +mosip.inji.jwt.default.algorithm=RS256 diff --git a/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java b/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java index 619d3b1dc..ef31f056d 100644 --- a/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java @@ -2,140 +2,174 @@ import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.dbentity.UserMetadata; +import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; -import io.mosip.mimoto.util.GlobalExceptionHandler; +import io.mosip.mimoto.exception.DecryptionException; +import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.repository.UserMetadataRepository; -import io.mosip.mimoto.util.EncryptionDecryptionUtil; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.http.MediaType; -import org.springframework.mock.web.MockHttpSession; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.result.MockMvcResultMatchers; -import org.springframework.web.context.WebApplicationContext; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import io.mosip.mimoto.service.EncryptionService; +import jakarta.servlet.http.HttpSession; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.security.core.Authentication; import java.util.Optional; +import static io.mosip.mimoto.exception.ErrorConstants.SESSION_EXPIRED_OR_INVALID; +import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.when; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; -@RunWith(SpringRunner.class) -@SpringBootTest(classes = {UsersController.class, GlobalExceptionHandler.class}) -@AutoConfigureMockMvc -@EnableWebMvc -@EnableWebSecurity -public class UsersControllerTest { +class UsersControllerTest { - @Autowired - private MockMvc mockMvc; + @InjectMocks + private UsersController usersController; - @MockBean + @Mock private UserMetadataRepository userMetadataRepository; - @MockBean - private EncryptionDecryptionUtil encryptionDecryptionUtil; - - @Autowired - private WebApplicationContext context; - - private UserMetadata userMetadata; - - MockHttpSession mockSession; - - String identityProvider, userId; - - @Before - public void setUp() { - identityProvider = "google"; - userMetadata = new UserMetadata(); - userMetadata.setIdentityProvider(identityProvider); - userMetadata.setDisplayName("encryptedName"); - userMetadata.setProfilePictureUrl("encryptedUrl"); - userMetadata.setEmail("encryptedEmail"); - mockSession = new MockHttpSession(); - mockSession.setAttribute("clientRegistrationId", "google"); - mockSession.setAttribute(SessionKeys.USER_ID, "user123"); - userId = (String) mockSession.getAttribute(SessionKeys.USER_ID); - when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider("user123", identityProvider)).thenReturn(Optional.of(userMetadata)); - when(encryptionDecryptionUtil.decrypt("encryptedName", "user_pii", "", "")).thenReturn("Name 123"); - when(encryptionDecryptionUtil.decrypt("encryptedUrl", "user_pii", "", "")).thenReturn("https://profile.com/pic.jpg"); - when(encryptionDecryptionUtil.decrypt("encryptedEmail", "user_pii", "", "")).thenReturn("name123@gmail.com"); + @Mock + private EncryptionService encryptionService; + + @Mock + private Authentication authentication; + + @Mock + private HttpSession session; + + private static final String PROVIDER_SUBJECT_ID = "test-user"; + private static final String IDENTITY_PROVIDER = "test-provider"; + private static final String ENCRYPTED_DISPLAY_NAME = "encrypted-name"; + private static final String ENCRYPTED_PROFILE_PIC = "encrypted-pic"; + private static final String ENCRYPTED_EMAIL = "encrypted-email"; + private static final String DECRYPTED_DISPLAY_NAME = "Test User"; + private static final String DECRYPTED_PROFILE_PIC = "http://test.com/pic.jpg"; + private static final String DECRYPTED_EMAIL = "test@example.com"; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); } + // Tests for getUserProfile (Database) @Test - public void shouldReturnTheUserDataForValidValues() throws Exception { - mockMvc.perform(get("/users/me/db").accept(MediaType.APPLICATION_JSON) - .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")).session(mockSession)) - .andExpect(status().isOk()) - .andExpect(MockMvcResultMatchers.jsonPath("$.display_name").value("Name 123")) - .andExpect(MockMvcResultMatchers.jsonPath("$.profile_picture_url").value("https://profile.com/pic.jpg")) - .andExpect(MockMvcResultMatchers.jsonPath("$.email").value("name123@gmail.com")) - .andExpect(jsonPath("$.errorCode").doesNotExist()) - .andExpect(jsonPath("$.errorMessage").doesNotExist()); + void getUserProfileSuccess() throws Exception { + // Arrange + UserMetadata userMetadata = new UserMetadata(); + userMetadata.setDisplayName(ENCRYPTED_DISPLAY_NAME); + userMetadata.setProfilePictureUrl(ENCRYPTED_PROFILE_PIC); + userMetadata.setEmail(ENCRYPTED_EMAIL); + + when(authentication.getName()).thenReturn(PROVIDER_SUBJECT_ID); + when(session.getAttribute("clientRegistrationId")).thenReturn(IDENTITY_PROVIDER); + when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider(PROVIDER_SUBJECT_ID, IDENTITY_PROVIDER)) + .thenReturn(Optional.of(userMetadata)); + when(encryptionService.decrypt(ENCRYPTED_DISPLAY_NAME)).thenReturn(DECRYPTED_DISPLAY_NAME); + when(encryptionService.decrypt(ENCRYPTED_PROFILE_PIC)).thenReturn(DECRYPTED_PROFILE_PIC); + when(encryptionService.decrypt(ENCRYPTED_EMAIL)).thenReturn(DECRYPTED_EMAIL); + + // Act + ResponseEntity response = usersController.getUserProfile(authentication, session); + + // Assert + assertEquals(HttpStatus.OK, response.getStatusCode()); + UserMetadataDTO result = response.getBody(); + assertNotNull(result); + assertEquals(DECRYPTED_DISPLAY_NAME, result.getDisplayName()); + assertEquals(DECRYPTED_PROFILE_PIC, result.getProfilePictureUrl()); + assertEquals(DECRYPTED_EMAIL, result.getEmail()); } @Test - public void shouldThrowExceptionForAInvalidUser() throws Exception { - when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider("user123", identityProvider)).thenReturn(Optional.empty()); - - mockMvc.perform(get("/users/me/db").accept(MediaType.APPLICATION_JSON) - .session(mockSession) - .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")).session(mockSession)) - .andExpect(status().isNotFound()) - .andExpect(jsonPath("$.errorCode").value("invalid_user")) - .andExpect(jsonPath("$.errorMessage").value("User not found. Please check your credentials or login again")); + void getUserProfileUserNotFound() { + // Arrange + when(authentication.getName()).thenReturn(PROVIDER_SUBJECT_ID); + when(session.getAttribute("clientRegistrationId")).thenReturn(IDENTITY_PROVIDER); + when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider(PROVIDER_SUBJECT_ID, IDENTITY_PROVIDER)) + .thenReturn(Optional.empty()); + + // Act + ResponseEntity response = usersController.getUserProfile(authentication, session); + + // Assert + assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode()); + ErrorDTO error = (ErrorDTO) response.getBody(); + assertNotNull(error); + assertEquals(ErrorConstants.INVALID_USER.getErrorCode(), error.getErrorCode()); + assertEquals("User not found. Please check your credentials or login again", error.getErrorMessage()); } @Test - public void shouldThrowExceptionIfAnyOtherErrorOccurredWhileFetchingUserData() throws Exception { - when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider("user123", identityProvider)).thenReturn(Optional.of(userMetadata)); - when(encryptionDecryptionUtil.decrypt("encryptedName", "user_pii", "", "")).thenThrow(new RuntimeException("Failure occurred while decrypting the name")); - - mockMvc.perform(get("/users/me/db").accept(MediaType.APPLICATION_JSON) - .session(mockSession) - .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")).session(mockSession)) - .andExpect(status().isInternalServerError()) - .andExpect(jsonPath("$.errorCode").value("internal_server_error")) - .andExpect(jsonPath("$.errorMessage").value("We are unable to process request now")); + void getUserProfileDecryptionException() throws Exception { + // Arrange + UserMetadata userMetadata = new UserMetadata(); + userMetadata.setDisplayName(ENCRYPTED_DISPLAY_NAME); + userMetadata.setProfilePictureUrl(ENCRYPTED_PROFILE_PIC); + userMetadata.setEmail(ENCRYPTED_EMAIL); + + when(authentication.getName()).thenReturn(PROVIDER_SUBJECT_ID); + when(session.getAttribute("clientRegistrationId")).thenReturn(IDENTITY_PROVIDER); + when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider(PROVIDER_SUBJECT_ID, IDENTITY_PROVIDER)) + .thenReturn(Optional.of(userMetadata)); + when(encryptionService.decrypt(ENCRYPTED_DISPLAY_NAME)).thenThrow(new DecryptionException("DECRYPTION_ERROR", "Decryption failed")); + + // Act & Assert + RuntimeException exception = assertThrows(RuntimeException.class, + () -> usersController.getUserProfile(authentication, session)); + assertTrue(exception.getCause() instanceof DecryptionException); } + // Tests for getUserProfileFromCache @Test - public void shouldReturnUserProfileFromCacheForValidSession() throws Exception { - UserMetadataDTO userMetadataDTO = new UserMetadataDTO("Name 123", "https://profile.com/pic.jpg", "name123@gmail.com"); - mockSession.setAttribute(SessionKeys.USER_METADATA, userMetadataDTO); - - mockMvc.perform(get("/users/me/cache") - .accept(MediaType.APPLICATION_JSON) - .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")) - .session(mockSession)) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.display_name").value("Name 123")) - .andExpect(jsonPath("$.profile_picture_url").value("https://profile.com/pic.jpg")) - .andExpect(jsonPath("$.email").value("name123@gmail.com")); + void getUserProfileFromCacheSuccess() { + // Arrange + UserMetadataDTO userMetadataDTO = new UserMetadataDTO(DECRYPTED_DISPLAY_NAME, DECRYPTED_PROFILE_PIC, DECRYPTED_EMAIL); + when(session.getAttribute(SessionKeys.USER_METADATA)).thenReturn(userMetadataDTO); + + // Act + ResponseEntity response = usersController.getUserProfileFromCache(session); + + // Assert + assertEquals(HttpStatus.OK, response.getStatusCode()); + UserMetadataDTO result = response.getBody(); + assertNotNull(result); + assertEquals(DECRYPTED_DISPLAY_NAME, result.getDisplayName()); + assertEquals(DECRYPTED_PROFILE_PIC, result.getProfilePictureUrl()); + assertEquals(DECRYPTED_EMAIL, result.getEmail()); } @Test - public void shouldReturnInternalServerErrorForCacheError() throws Exception { - mockSession.setAttribute(SessionKeys.USER_METADATA, null); - - mockMvc.perform(get("/users/me/cache") - .accept(MediaType.APPLICATION_JSON) - .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")) - .session(mockSession)) - .andExpect(status().isUnauthorized()) - .andExpect(jsonPath("$.errorCode").value("session_invalid_or_expired")) - .andExpect(jsonPath("$.errorMessage").value("User session is missing or expired. Please log in again.")); + void getUserProfileFromCacheNoMetadataInSession() { + // Arrange + when(session.getAttribute(SessionKeys.USER_METADATA)).thenReturn(null); + + // Act + ResponseEntity response = usersController.getUserProfileFromCache(session); + + // Assert + assertEquals(HttpStatus.UNAUTHORIZED, response.getStatusCode()); + ErrorDTO error = (ErrorDTO) response.getBody(); + assertNotNull(error); + assertEquals(SESSION_EXPIRED_OR_INVALID.getErrorCode(), error.getErrorCode()); + assertEquals(SESSION_EXPIRED_OR_INVALID.getErrorMessage(), error.getErrorMessage()); } + @Test + void getUserProfileFromCacheNullSession() { + // Arrange + when(session.getAttribute(SessionKeys.USER_METADATA)).thenReturn(null); + + // Act + ResponseEntity response = usersController.getUserProfileFromCache(session); + + // Assert + assertEquals(HttpStatus.UNAUTHORIZED, response.getStatusCode()); + ErrorDTO error = (ErrorDTO) response.getBody(); + assertNotNull(error); + assertEquals(SESSION_EXPIRED_OR_INVALID.getErrorCode(), error.getErrorCode()); + } } \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java index 9a7dcfd50..451b82958 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java @@ -1,22 +1,21 @@ package io.mosip.mimoto.controller; +import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; import io.mosip.mimoto.dto.resident.WalletCredentialResponseDTO; -import io.mosip.mimoto.exception.ApiNotAccessibleException; -import io.mosip.mimoto.exception.CorruptedEncryptedDataException; -import io.mosip.mimoto.exception.DecryptionException; -import io.mosip.mimoto.exception.InvalidRequestException; +import io.mosip.mimoto.exception.*; import io.mosip.mimoto.service.WalletCredentialService; import io.mosip.mimoto.util.CredentialUtilService; -import io.mosip.mimoto.util.WalletUtil; import jakarta.servlet.http.HttpSession; +import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; import org.springframework.core.io.InputStreamResource; +import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -55,212 +54,306 @@ public class WalletCredentialsControllerTest { private static final String LOCALE = "en"; private static final String VC_STORAGE_EXPIRY = "-1"; + @Before + public void setUp() { + when(httpSession.getAttribute(SessionKeys.WALLET_ID)).thenReturn(WALLET_ID); + when(httpSession.getAttribute(SessionKeys.WALLET_KEY)).thenReturn(BASE64_ENCODED_WALLET_KEY); + } + @Test public void downloadCredentialSuccess() throws Exception { - - try (var walletUtilMock = mockStatic(WalletUtil.class)) { - walletUtilMock.when(() -> WalletUtil.validateWalletId(httpSession, WALLET_ID)).thenAnswer(invocation -> null); - walletUtilMock.when(() -> WalletUtil.getSessionWalletKey(httpSession)).thenReturn(BASE64_ENCODED_WALLET_KEY); - - Map params = new HashMap<>(); - params.put("issuer", ISSUER_ID); - params.put("credential", CREDENTIAL_TYPE); - params.put("locale", LOCALE); - params.put("vcStorageExpiryLimitInTimes", VC_STORAGE_EXPIRY); - - TokenResponseDTO tokenResponse = new TokenResponseDTO(); - VerifiableCredentialResponseDTO responseDTO = new VerifiableCredentialResponseDTO(); - - when(credentialUtilService.getTokenResponse(params, ISSUER_ID)).thenReturn(tokenResponse); - when(walletCredentialService.fetchAndStoreCredential(eq(ISSUER_ID), eq(CREDENTIAL_TYPE), eq(tokenResponse), - eq(VC_STORAGE_EXPIRY), eq(LOCALE), eq(WALLET_ID), eq(BASE64_ENCODED_WALLET_KEY))) - .thenReturn(responseDTO); - - - ResponseEntity response = walletCredentialsController - .downloadCredential(WALLET_ID, params, httpSession); - - - assertEquals(HttpStatus.OK, response.getStatusCode()); - assertEquals(responseDTO, response.getBody()); - walletUtilMock.verify(() -> WalletUtil.validateWalletId(httpSession, WALLET_ID)); - walletUtilMock.verify(() -> WalletUtil.getSessionWalletKey(httpSession)); - verify(credentialUtilService).getTokenResponse(params, ISSUER_ID); - verify(walletCredentialService).fetchAndStoreCredential(eq(ISSUER_ID), eq(CREDENTIAL_TYPE), eq(tokenResponse), - eq(VC_STORAGE_EXPIRY), eq(LOCALE), eq(WALLET_ID), eq(BASE64_ENCODED_WALLET_KEY)); - } + Map params = new HashMap<>(); + params.put("issuer", ISSUER_ID); + params.put("credential", CREDENTIAL_TYPE); + params.put("locale", LOCALE); + params.put("vcStorageExpiryLimitInTimes", VC_STORAGE_EXPIRY); + + TokenResponseDTO tokenResponse = new TokenResponseDTO(); + VerifiableCredentialResponseDTO responseDTO = new VerifiableCredentialResponseDTO(); + + when(credentialUtilService.getTokenResponse(params, ISSUER_ID)).thenReturn(tokenResponse); + when(walletCredentialService.fetchAndStoreCredential(eq(ISSUER_ID), eq(CREDENTIAL_TYPE), eq(tokenResponse), + eq(VC_STORAGE_EXPIRY), eq(LOCALE), eq(WALLET_ID), eq(BASE64_ENCODED_WALLET_KEY))) + .thenReturn(responseDTO); + + ResponseEntity response = walletCredentialsController + .downloadCredential(WALLET_ID, params, httpSession); + + assertEquals(HttpStatus.OK, response.getStatusCode()); + assertEquals(responseDTO, response.getBody()); + verify(httpSession).getAttribute(SessionKeys.WALLET_ID); + verify(httpSession).getAttribute(SessionKeys.WALLET_KEY); + verify(credentialUtilService).getTokenResponse(params, ISSUER_ID); + verify(walletCredentialService).fetchAndStoreCredential(eq(ISSUER_ID), eq(CREDENTIAL_TYPE), eq(tokenResponse), + eq(VC_STORAGE_EXPIRY), eq(LOCALE), eq(WALLET_ID), eq(BASE64_ENCODED_WALLET_KEY)); } @Test - public void downloadCredentialTokenFetchFailureThrowsExternalServiceUnavailableException() throws Exception { - - try (var walletUtilMock = mockStatic(WalletUtil.class)) { - walletUtilMock.when(() -> WalletUtil.validateWalletId(httpSession, WALLET_ID)).thenAnswer(invocation -> null); - walletUtilMock.when(() -> WalletUtil.getSessionWalletKey(httpSession)).thenReturn(BASE64_ENCODED_WALLET_KEY); + public void downloadCredentialInvalidWalletIdThrowsInvalidRequestException() { + when(httpSession.getAttribute(SessionKeys.WALLET_ID)).thenReturn("differentWalletId"); - Map params = new HashMap<>(); - params.put("issuer", ISSUER_ID); - params.put("credential", CREDENTIAL_TYPE); + Map params = new HashMap<>(); + params.put("issuer", ISSUER_ID); + params.put("credential", CREDENTIAL_TYPE); - when(credentialUtilService.getTokenResponse(params, ISSUER_ID)) - .thenThrow(new ApiNotAccessibleException("API Error")); + try { + walletCredentialsController.downloadCredential(WALLET_ID, params, httpSession); + fail("Expected InvalidRequestException"); + } catch (InvalidRequestException e) { + assertEquals(ErrorConstants.INVALID_REQUEST.getErrorCode(), e.getErrorCode()); + assertEquals("invalid_request --> Wallet ID mismatch", e.getMessage()); + } + verify(httpSession).getAttribute(SessionKeys.WALLET_ID); + verifyNoMoreInteractions(credentialUtilService, walletCredentialService); + } + + @Test + public void downloadCredentialMissingWalletKeyThrowsInvalidRequestException() { + when(httpSession.getAttribute(SessionKeys.WALLET_KEY)).thenReturn(null); + Map params = new HashMap<>(); + params.put("issuer", ISSUER_ID); + params.put("credential", CREDENTIAL_TYPE); + try { walletCredentialsController.downloadCredential(WALLET_ID, params, httpSession); + fail("Expected InvalidRequestException"); + } catch (InvalidRequestException e) { + assertEquals(ErrorConstants.INVALID_REQUEST.getErrorCode(), e.getErrorCode()); + assertEquals("invalid_request --> Wallet key not found in session", e.getMessage()); + } + verify(httpSession).getAttribute(SessionKeys.WALLET_ID); + verify(httpSession).getAttribute(SessionKeys.WALLET_KEY); + verifyNoInteractions(credentialUtilService, walletCredentialService); + } + + @Test + public void downloadCredentialMissingIssuerThrowsInvalidRequestException() { + Map params = new HashMap<>(); + params.put("credential", CREDENTIAL_TYPE); - walletUtilMock.verify(() -> WalletUtil.validateWalletId(httpSession, WALLET_ID)); - verify(credentialUtilService).getTokenResponse(params, ISSUER_ID); - verify(walletCredentialService, never()).fetchAndStoreCredential(any(), any(), any(), any(), any(), any(), any()); + try { + walletCredentialsController.downloadCredential(WALLET_ID, params, httpSession); + fail("Expected InvalidRequestException"); + } catch (InvalidRequestException e) { + assertEquals(ErrorConstants.INVALID_REQUEST.getErrorCode(), e.getErrorCode()); + assertEquals("invalid_request --> Issuer and credential type are required", e.getMessage()); } + verify(httpSession).getAttribute(SessionKeys.WALLET_ID); + verify(httpSession).getAttribute(SessionKeys.WALLET_KEY); + verifyNoInteractions(credentialUtilService, walletCredentialService); } + @Test + public void downloadCredentialTokenFetchFailureReturnsServiceUnavailable() throws Exception { + Map params = new HashMap<>(); + params.put("issuer", ISSUER_ID); + params.put("credential", CREDENTIAL_TYPE); + + when(credentialUtilService.getTokenResponse(params, ISSUER_ID)) + .thenThrow(new ApiNotAccessibleException("API Error")); + + ResponseEntity response = walletCredentialsController + .downloadCredential(WALLET_ID, params, httpSession); + + assertEquals(HttpStatus.SERVICE_UNAVAILABLE, response.getStatusCode()); + assertEquals(MediaType.APPLICATION_JSON, response.getHeaders().getContentType()); + verify(httpSession).getAttribute(SessionKeys.WALLET_ID); + verify(httpSession).getAttribute(SessionKeys.WALLET_KEY); + verify(credentialUtilService).getTokenResponse(params, ISSUER_ID); + verifyNoInteractions(walletCredentialService); + } @Test public void fetchAllCredentialsForGivenWalletSuccess() { - - try (var walletUtilMock = mockStatic(WalletUtil.class)) { - walletUtilMock.when(() -> WalletUtil.validateWalletId(httpSession, WALLET_ID)).thenAnswer(invocation -> null); - walletUtilMock.when(() -> WalletUtil.getSessionWalletKey(httpSession)).thenReturn(BASE64_ENCODED_WALLET_KEY); - - List credentials = Arrays.asList(new VerifiableCredentialResponseDTO()); - when(walletCredentialService.fetchAllCredentialsForWallet(WALLET_ID, BASE64_ENCODED_WALLET_KEY, LOCALE)) - .thenReturn(credentials); - - - ResponseEntity> response = walletCredentialsController - .fetchAllCredentialsForGivenWallet(WALLET_ID, LOCALE, httpSession); - - - assertEquals(HttpStatus.OK, response.getStatusCode()); - assertEquals(credentials, response.getBody()); - walletUtilMock.verify(() -> WalletUtil.validateWalletId(httpSession, WALLET_ID)); - walletUtilMock.verify(() -> WalletUtil.getSessionWalletKey(httpSession)); - verify(walletCredentialService).fetchAllCredentialsForWallet(WALLET_ID, BASE64_ENCODED_WALLET_KEY, LOCALE); + List credentials = Arrays.asList(new VerifiableCredentialResponseDTO()); + when(walletCredentialService.fetchAllCredentialsForWallet(WALLET_ID, BASE64_ENCODED_WALLET_KEY, LOCALE)) + .thenReturn(credentials); + + ResponseEntity> response = walletCredentialsController + .fetchAllCredentialsForGivenWallet(WALLET_ID, LOCALE, httpSession); + + assertEquals(HttpStatus.OK, response.getStatusCode()); + assertEquals(credentials, response.getBody()); + verify(httpSession).getAttribute(SessionKeys.WALLET_ID); + verify(httpSession).getAttribute(SessionKeys.WALLET_KEY); + verify(walletCredentialService).fetchAllCredentialsForWallet(WALLET_ID, BASE64_ENCODED_WALLET_KEY, LOCALE); + } + + @Test + public void fetchAllCredentialsInvalidWalletIdThrowsInvalidRequestException() { + when(httpSession.getAttribute(SessionKeys.WALLET_ID)).thenReturn("differentWalletId"); + + try { + walletCredentialsController.fetchAllCredentialsForGivenWallet(WALLET_ID, LOCALE, httpSession); + fail("Expected InvalidRequestException"); + } catch (InvalidRequestException e) { + assertEquals(ErrorConstants.INVALID_REQUEST.getErrorCode(), e.getErrorCode()); + assertEquals("invalid_request --> Wallet ID mismatch", e.getMessage()); } + verify(httpSession).getAttribute(SessionKeys.WALLET_ID); + verifyNoInteractions(walletCredentialService); } @Test - public void getVerifiableCredentialSuccessInline() throws Exception { - - try (var walletUtilMock = mockStatic(WalletUtil.class)) { - walletUtilMock.when(() -> WalletUtil.validateWalletId(httpSession, WALLET_ID)).thenAnswer(invocation -> null); - walletUtilMock.when(() -> WalletUtil.getSessionWalletKey(httpSession)).thenReturn(BASE64_ENCODED_WALLET_KEY); - - WalletCredentialResponseDTO responseDTO = new WalletCredentialResponseDTO(); - responseDTO.setFileName("credential.pdf"); - responseDTO.setFileContentStream(new InputStreamResource(new ByteArrayInputStream(new byte[0]))); - - when(walletCredentialService.fetchVerifiableCredential(WALLET_ID, CREDENTIAL_ID, BASE64_ENCODED_WALLET_KEY, LOCALE)) - .thenReturn(responseDTO); - - - ResponseEntity response = walletCredentialsController - .getVerifiableCredential(WALLET_ID, CREDENTIAL_ID, LOCALE, "inline", httpSession); - - - assertEquals(HttpStatus.OK, response.getStatusCode()); - assertEquals(MediaType.APPLICATION_PDF, response.getHeaders().getContentType()); - assertEquals("inline; filename=\"credential.pdf\"", response.getHeaders().getFirst("Content-Disposition")); - assertNotNull(response.getBody()); - walletUtilMock.verify(() -> WalletUtil.validateWalletId(httpSession, WALLET_ID)); - walletUtilMock.verify(() -> WalletUtil.getSessionWalletKey(httpSession)); - verify(walletCredentialService).fetchVerifiableCredential(WALLET_ID, CREDENTIAL_ID, BASE64_ENCODED_WALLET_KEY, LOCALE); + public void fetchAllCredentialsMissingWalletKeyThrowsInvalidRequestException() { + when(httpSession.getAttribute(SessionKeys.WALLET_KEY)).thenReturn(null); + + try { + walletCredentialsController.fetchAllCredentialsForGivenWallet(WALLET_ID, LOCALE, httpSession); + fail("Expected InvalidRequestException"); + } catch (InvalidRequestException e) { + assertEquals(ErrorConstants.INVALID_REQUEST.getErrorCode(), e.getErrorCode()); + assertEquals("invalid_request --> Wallet key not found in session", e.getMessage()); } + verify(httpSession).getAttribute(SessionKeys.WALLET_ID); + verify(httpSession).getAttribute(SessionKeys.WALLET_KEY); + verifyNoInteractions(walletCredentialService); + } + + @Test + public void getVerifiableCredentialSuccessInline() throws Exception { + WalletCredentialResponseDTO responseDTO = new WalletCredentialResponseDTO(); + responseDTO.setFileName("credential.pdf"); + responseDTO.setFileContentStream(new InputStreamResource(new ByteArrayInputStream(new byte[0]))); + + when(walletCredentialService.fetchVerifiableCredential(WALLET_ID, CREDENTIAL_ID, BASE64_ENCODED_WALLET_KEY, LOCALE)) + .thenReturn(responseDTO); + + ResponseEntity response = walletCredentialsController + .getVerifiableCredential(WALLET_ID, CREDENTIAL_ID, LOCALE, "inline", httpSession); + + assertEquals(HttpStatus.OK, response.getStatusCode()); + assertEquals(MediaType.APPLICATION_PDF, response.getHeaders().getContentType()); + assertEquals("inline; filename=\"credential.pdf\"", response.getHeaders().getFirst(HttpHeaders.CONTENT_DISPOSITION)); + assertNotNull(response.getBody()); + verify(httpSession).getAttribute(SessionKeys.WALLET_ID); + verify(httpSession).getAttribute(SessionKeys.WALLET_KEY); + verify(walletCredentialService).fetchVerifiableCredential(WALLET_ID, CREDENTIAL_ID, BASE64_ENCODED_WALLET_KEY, LOCALE); } @Test public void getVerifiableCredentialSuccessDownload() throws Exception { - - try (var walletUtilMock = mockStatic(WalletUtil.class)) { - walletUtilMock.when(() -> WalletUtil.validateWalletId(httpSession, WALLET_ID)).thenAnswer(invocation -> null); - walletUtilMock.when(() -> WalletUtil.getSessionWalletKey(httpSession)).thenReturn(BASE64_ENCODED_WALLET_KEY); - - WalletCredentialResponseDTO responseDTO = new WalletCredentialResponseDTO(); - responseDTO.setFileName("credential.pdf"); - responseDTO.setFileContentStream(new InputStreamResource(new ByteArrayInputStream(new byte[0]))); - - when(walletCredentialService.fetchVerifiableCredential(WALLET_ID, CREDENTIAL_ID, BASE64_ENCODED_WALLET_KEY, LOCALE)) - .thenReturn(responseDTO); - - - ResponseEntity response = walletCredentialsController - .getVerifiableCredential(WALLET_ID, CREDENTIAL_ID, LOCALE, "download", httpSession); - - - assertEquals(HttpStatus.OK, response.getStatusCode()); - assertEquals("attachment; filename=\"credential.pdf\"", response.getHeaders().getFirst("Content-Disposition")); - walletUtilMock.verify(() -> WalletUtil.validateWalletId(httpSession, WALLET_ID)); - walletUtilMock.verify(() -> WalletUtil.getSessionWalletKey(httpSession)); - verify(walletCredentialService).fetchVerifiableCredential(WALLET_ID, CREDENTIAL_ID, BASE64_ENCODED_WALLET_KEY, LOCALE); + WalletCredentialResponseDTO responseDTO = new WalletCredentialResponseDTO(); + responseDTO.setFileName("credential.pdf"); + responseDTO.setFileContentStream(new InputStreamResource(new ByteArrayInputStream(new byte[0]))); + + when(walletCredentialService.fetchVerifiableCredential(WALLET_ID, CREDENTIAL_ID, BASE64_ENCODED_WALLET_KEY, LOCALE)) + .thenReturn(responseDTO); + + ResponseEntity response = walletCredentialsController + .getVerifiableCredential(WALLET_ID, CREDENTIAL_ID, LOCALE, "download", httpSession); + + assertEquals(HttpStatus.OK, response.getStatusCode()); + assertEquals(MediaType.APPLICATION_PDF, response.getHeaders().getContentType()); + assertEquals("attachment; filename=\"credential.pdf\"", response.getHeaders().getFirst(HttpHeaders.CONTENT_DISPOSITION)); + assertNotNull(response.getBody()); + verify(httpSession).getAttribute(SessionKeys.WALLET_ID); + verify(httpSession).getAttribute(SessionKeys.WALLET_KEY); + verify(walletCredentialService).fetchVerifiableCredential(WALLET_ID, CREDENTIAL_ID, BASE64_ENCODED_WALLET_KEY, LOCALE); + } + + @Test + public void getVerifiableCredentialInvalidWalletIdThrowsInvalidRequestException() { + when(httpSession.getAttribute(SessionKeys.WALLET_ID)).thenReturn("differentWalletId"); + + try { + walletCredentialsController.getVerifiableCredential(WALLET_ID, CREDENTIAL_ID, LOCALE, "inline", httpSession); + fail("Expected InvalidRequestException"); + } catch (InvalidRequestException e) { + assertEquals(ErrorConstants.INVALID_REQUEST.getErrorCode(), e.getErrorCode()); + assertEquals("invalid_request --> Wallet ID mismatch", e.getMessage()); } + verify(httpSession).getAttribute(SessionKeys.WALLET_ID); + verifyNoInteractions(walletCredentialService); } @Test - public void getVerifiableCredentialDecryptionExceptionReturnsBadRequest() throws Exception { - - try (var walletUtilMock = mockStatic(WalletUtil.class)) { - walletUtilMock.when(() -> WalletUtil.validateWalletId(httpSession, WALLET_ID)).thenAnswer(invocation -> null); - walletUtilMock.when(() -> WalletUtil.getSessionWalletKey(httpSession)).thenReturn(BASE64_ENCODED_WALLET_KEY); - - when(walletCredentialService.fetchVerifiableCredential(WALLET_ID, CREDENTIAL_ID, BASE64_ENCODED_WALLET_KEY, LOCALE)) - .thenThrow(new DecryptionException("DECRYPTION_ERROR", "Decryption failed")); - - - ResponseEntity response = walletCredentialsController - .getVerifiableCredential(WALLET_ID, CREDENTIAL_ID, LOCALE, "inline", httpSession); - - - assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode()); - assertEquals(MediaType.APPLICATION_JSON, response.getHeaders().getContentType()); - walletUtilMock.verify(() -> WalletUtil.validateWalletId(httpSession, WALLET_ID)); - walletUtilMock.verify(() -> WalletUtil.getSessionWalletKey(httpSession)); - verify(walletCredentialService).fetchVerifiableCredential(WALLET_ID, CREDENTIAL_ID, BASE64_ENCODED_WALLET_KEY, LOCALE); + public void getVerifiableCredentialMissingWalletKeyThrowsInvalidRequestException() { + when(httpSession.getAttribute(SessionKeys.WALLET_KEY)).thenReturn(null); + + try { + walletCredentialsController.getVerifiableCredential(WALLET_ID, CREDENTIAL_ID, LOCALE, "inline", httpSession); + fail("Expected InvalidRequestException"); + } catch (InvalidRequestException e) { + assertEquals(ErrorConstants.INVALID_REQUEST.getErrorCode(), e.getErrorCode()); + assertEquals("invalid_request --> Wallet key not found in session", e.getMessage()); } + verify(httpSession).getAttribute(SessionKeys.WALLET_ID); + verify(httpSession).getAttribute(SessionKeys.WALLET_KEY); + verifyNoInteractions(walletCredentialService); } @Test - public void getVerifiableCredentialCorruptedEncryptedDataExceptionReturnsUnprocessableEntity() throws Exception { - - try (var walletUtilMock = mockStatic(WalletUtil.class)) { - walletUtilMock.when(() -> WalletUtil.validateWalletId(httpSession, WALLET_ID)).thenAnswer(invocation -> null); - walletUtilMock.when(() -> WalletUtil.getSessionWalletKey(httpSession)).thenReturn(BASE64_ENCODED_WALLET_KEY); - - when(walletCredentialService.fetchVerifiableCredential(WALLET_ID, CREDENTIAL_ID, BASE64_ENCODED_WALLET_KEY, LOCALE)) - .thenThrow(new CorruptedEncryptedDataException("CORRUPTED_DATA", "Corrupted data")); - - - ResponseEntity response = walletCredentialsController - .getVerifiableCredential(WALLET_ID, CREDENTIAL_ID, LOCALE, "inline", httpSession); - - - assertEquals(HttpStatus.UNPROCESSABLE_ENTITY, response.getStatusCode()); - assertEquals(MediaType.APPLICATION_JSON, response.getHeaders().getContentType()); - walletUtilMock.verify(() -> WalletUtil.validateWalletId(httpSession, WALLET_ID)); - walletUtilMock.verify(() -> WalletUtil.getSessionWalletKey(httpSession)); - verify(walletCredentialService).fetchVerifiableCredential(WALLET_ID, CREDENTIAL_ID, BASE64_ENCODED_WALLET_KEY, LOCALE); + public void getVerifiableCredentialNotFoundThrowsCredentialNotFoundException() throws Exception { + when(walletCredentialService.fetchVerifiableCredential(WALLET_ID, CREDENTIAL_ID, BASE64_ENCODED_WALLET_KEY, LOCALE)) + .thenThrow(new CredentialNotFoundException("CREDENTIAL_NOT_FOUND", "Credential not found")); + + try { + walletCredentialsController.getVerifiableCredential(WALLET_ID, CREDENTIAL_ID, LOCALE, "inline", httpSession); + fail("Expected CredentialNotFoundException"); + } catch (CredentialNotFoundException e) { + assertEquals("CREDENTIAL_NOT_FOUND", e.getErrorCode()); + assertEquals("CREDENTIAL_NOT_FOUND --> Credential not found", e.getMessage()); } + verify(httpSession).getAttribute(SessionKeys.WALLET_ID); + verify(httpSession).getAttribute(SessionKeys.WALLET_KEY); + verify(walletCredentialService).fetchVerifiableCredential(WALLET_ID, CREDENTIAL_ID, BASE64_ENCODED_WALLET_KEY, LOCALE); } @Test - public void downloadCredentialInvalidWalletIdThrowsInvalidRequestException() { - - try (var walletUtilMock = mockStatic(WalletUtil.class)) { - walletUtilMock.when(() -> WalletUtil.validateWalletId(httpSession, WALLET_ID)) - .thenThrow(new InvalidRequestException("INVALID_REQUEST", "Invalid Wallet Id")); - - Map params = new HashMap<>(); - params.put("issuer", ISSUER_ID); - params.put("credential", CREDENTIAL_TYPE); - - - try { - walletCredentialsController.downloadCredential(WALLET_ID, params, httpSession); - fail("Expected InvalidRequestException"); - } catch (InvalidRequestException e) { - // Expected - } - walletUtilMock.verify(() -> WalletUtil.validateWalletId(httpSession, WALLET_ID)); - verifyNoInteractions(credentialUtilService, walletCredentialService); + public void getVerifiableCredentialDecryptionExceptionThrowsProcessingException() throws Exception { + when(walletCredentialService.fetchVerifiableCredential(WALLET_ID, CREDENTIAL_ID, BASE64_ENCODED_WALLET_KEY, LOCALE)) + .thenThrow(new CredentialProcessingException("DECRYPTION_ERROR", "Decryption failed")); + + try { + walletCredentialsController.getVerifiableCredential(WALLET_ID, CREDENTIAL_ID, LOCALE, "inline", httpSession); + fail("Expected CredentialProcessingException"); + } catch (CredentialProcessingException e) { + assertEquals("DECRYPTION_ERROR", e.getErrorCode()); + assertEquals("DECRYPTION_ERROR --> Decryption failed", e.getMessage()); + } + verify(httpSession).getAttribute(SessionKeys.WALLET_ID); + verify(httpSession).getAttribute(SessionKeys.WALLET_KEY); + verify(walletCredentialService).fetchVerifiableCredential(WALLET_ID, CREDENTIAL_ID, BASE64_ENCODED_WALLET_KEY, LOCALE); + } + @Test + public void getVerifiableCredentialCorruptedEncryptedDataExceptionThrowsProcessingException() throws Exception { + when(walletCredentialService.fetchVerifiableCredential(WALLET_ID, CREDENTIAL_ID, BASE64_ENCODED_WALLET_KEY, LOCALE)) + .thenThrow(new CredentialProcessingException("CORRUPTED_DATA", "Corrupted data")); + + try { + walletCredentialsController.getVerifiableCredential(WALLET_ID, CREDENTIAL_ID, LOCALE, "inline", httpSession); + fail("Expected CredentialProcessingException"); + } catch (CredentialProcessingException e) { + assertEquals("CORRUPTED_DATA", e.getErrorCode()); + assertEquals("CORRUPTED_DATA --> Corrupted data", e.getMessage()); } + verify(httpSession).getAttribute(SessionKeys.WALLET_ID); + verify(httpSession).getAttribute(SessionKeys.WALLET_KEY); + verify(walletCredentialService).fetchVerifiableCredential(WALLET_ID, CREDENTIAL_ID, BASE64_ENCODED_WALLET_KEY, LOCALE); + } + + @Test + public void downloadCredentialExternalServiceUnavailableReturnsServiceUnavailable() throws Exception { + Map params = new HashMap<>(); + params.put("issuer", ISSUER_ID); + params.put("credential", CREDENTIAL_TYPE); + + TokenResponseDTO tokenResponse = new TokenResponseDTO(); + when(credentialUtilService.getTokenResponse(params, ISSUER_ID)).thenReturn(tokenResponse); + when(walletCredentialService.fetchAndStoreCredential(any(), any(), any(), any(), any(), any(), any())) + .thenThrow(new ExternalServiceUnavailableException("SERVICE_UNAVAILABLE", "Service unavailable")); + + ResponseEntity response = walletCredentialsController + .downloadCredential(WALLET_ID, params, httpSession); + + assertEquals(HttpStatus.SERVICE_UNAVAILABLE, response.getStatusCode()); + assertEquals(MediaType.APPLICATION_JSON, response.getHeaders().getContentType()); + verify(httpSession).getAttribute(SessionKeys.WALLET_ID); + verify(httpSession).getAttribute(SessionKeys.WALLET_KEY); + verify(credentialUtilService).getTokenResponse(params, ISSUER_ID); + verify(walletCredentialService).fetchAndStoreCredential(eq(ISSUER_ID), eq(CREDENTIAL_TYPE), eq(tokenResponse), + eq(VC_STORAGE_EXPIRY), eq(LOCALE), eq(WALLET_ID), eq(BASE64_ENCODED_WALLET_KEY)); } -} +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java index dbac8b977..54f35509c 100644 --- a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java +++ b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java @@ -2,7 +2,7 @@ import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; -import io.mosip.mimoto.exception.InvalidRequestException; +import io.mosip.mimoto.exception.DecryptionException; import io.mosip.mimoto.service.UserMetadataService; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; @@ -68,7 +68,7 @@ public void setUp() throws Exception { } @Test - public void onAuthenticationSuccessSetsSessionAttributesAndRedirects() throws IOException, ServletException { + public void onAuthenticationSuccessSetsSessionAttributesAndRedirects() throws IOException, ServletException, DecryptionException { // Arrange when(oauth2Token.getAuthorizedClientRegistrationId()).thenReturn(CLIENT_REGISTRATION_ID); when(oauth2Token.getPrincipal()).thenReturn(oauth2User); @@ -102,7 +102,7 @@ public void onAuthenticationSuccessSetsSessionAttributesAndRedirects() throws IO } @Test - public void onAuthenticationSuccessWithNullAttributesSetsSessionAttributesAndRedirects() throws IOException, ServletException { + public void onAuthenticationSuccessWithNullAttributesSetsSessionAttributesAndRedirects() throws IOException, ServletException, DecryptionException { // Arrange when(oauth2Token.getAuthorizedClientRegistrationId()).thenReturn(CLIENT_REGISTRATION_ID); when(oauth2Token.getPrincipal()).thenReturn(oauth2User); @@ -152,7 +152,7 @@ public void onAuthenticationSuccessWithNullSessionThrowsServletException() throw } @Test - public void onAuthenticationSuccessWithServiceFailureThrowsIOException() throws IOException, ServletException { + public void onAuthenticationSuccessWithServiceFailureThrowsIOException() throws IOException, ServletException, DecryptionException { // Arrange when(oauth2Token.getAuthorizedClientRegistrationId()).thenReturn(CLIENT_REGISTRATION_ID); when(oauth2Token.getPrincipal()).thenReturn(oauth2User); diff --git a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java deleted file mode 100644 index e71ff922c..000000000 --- a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2LoginTests.java +++ /dev/null @@ -1,259 +0,0 @@ -package io.mosip.mimoto.security.oauth2; - -import io.mosip.mimoto.config.Config; -import io.mosip.mimoto.controller.UsersController; -import io.mosip.mimoto.dbentity.UserMetadata; -import io.mosip.mimoto.exception.OAuth2AuthenticationException; -import io.mosip.mimoto.repository.UserMetadataRepository; -import io.mosip.mimoto.service.LogoutService; -import io.mosip.mimoto.service.WalletService; -import io.mosip.mimoto.util.EncryptionDecryptionUtil; -import io.mosip.mimoto.util.WalletValidator; -import jakarta.servlet.http.Cookie; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import lombok.extern.slf4j.Slf4j; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mockito; -import org.mockito.MockitoAnnotations; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; -import org.springframework.http.HttpStatus; -import org.springframework.mock.web.MockHttpSession; -import org.springframework.security.core.context.SecurityContext; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.oauth2.client.OAuth2AuthorizedClientService; -import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken; -import org.springframework.security.oauth2.client.registration.ClientRegistration; -import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository; -import org.springframework.security.oauth2.client.web.HttpSessionOAuth2AuthorizationRequestRepository; -import org.springframework.security.oauth2.core.AuthorizationGrantType; -import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationRequest; -import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames; -import org.springframework.security.oauth2.core.user.DefaultOAuth2User; -import org.springframework.security.oauth2.core.user.OAuth2User; -import org.springframework.session.Session; -import org.springframework.session.SessionRepository; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.result.MockMvcResultMatchers; -import java.sql.Timestamp; -import java.util.*; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.*; -import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.oauth2Login; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -@RunWith(SpringRunner.class) -@ContextConfiguration(classes = Config.class) -@WebMvcTest(Config.class) -@AutoConfigureMockMvc -@Import({UsersController.class, OAuth2AuthenticationSuccessHandler.class, OAuth2AuthenticationFailureHandler.class, HttpSessionOAuth2AuthorizationRequestRepository.class}) -@Slf4j -public class OAuth2LoginTests { - - @Value("${mosip.inji.web.url}") - private String injiWebUrl; - - @Autowired - private MockMvc mockMvc; - - @MockBean - private OAuth2AuthenticationSuccessHandler oAuth2AuthenticationSuccessHandler; - - @Autowired - private OAuth2AuthenticationFailureHandler oAuth2AuthenticationFailureHandler; - - @MockBean - private UserMetadataRepository userMetadataRepository; - - @MockBean - private LogoutService logoutService; - - @MockBean - private WalletService walletService; - - @MockBean - private WalletValidator walletValidator; - - @MockBean - private EncryptionDecryptionUtil encryptionDecryptionUtil; - - @MockBean - private ClientRegistrationRepository clientRegistrationRepository; - - @MockBean - private SessionRepository sessionRepository; - - @MockBean - private OAuth2AuthorizedClientService oAuth2AuthorizedClientService; - - private String providerSubjectId, identityProvider, displayName, profilePictureUrl, email, userId; - private Timestamp now; - private UserMetadata userMetadata; - - MockHttpSession mockSession; - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - providerSubjectId = "user123"; - identityProvider = "google"; - displayName = "user_123"; - profilePictureUrl = "https://example.com/profile.jpg"; - email = "user.123@example.com"; - now = new Timestamp(System.currentTimeMillis()); - userId = UUID.randomUUID().toString(); - - userMetadata = new UserMetadata(); - userMetadata.setId(userId); - userMetadata.setProviderSubjectId(providerSubjectId); - userMetadata.setIdentityProvider(identityProvider); - userMetadata.setDisplayName(displayName); - userMetadata.setProfilePictureUrl(profilePictureUrl); - userMetadata.setEmail(email); - userMetadata.setCreatedAt(now); - userMetadata.setUpdatedAt(now); - - ClientRegistration googleClient = ClientRegistration.withRegistrationId("google") - .clientId("test-client-id") - .clientSecret("test-client-secret") - .authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE) - .redirectUri("https://injiweb.dev1.mosip.net/login/oauth2/callback/google") - .tokenUri("https://oauth2.googleapis.com/token") - .authorizationUri("https://accounts.google.com/o/oauth2/auth") - .userInfoUri("https://www.googleapis.com/oauth2/v3/userinfo") - .clientName("Google") - .build(); - - when(clientRegistrationRepository.findByRegistrationId("google")).thenReturn(googleClient); - mockSession = new MockHttpSession(); - } - - @Test - public void shouldReturn401OnUnauthenticatedAccessToProtectedEndpoint() throws Exception { - mockMvc.perform(get("/users/me")) - .andExpect(status().is4xxClientError()); - } - - @Test - public void shouldBeAbleToAccessProtectedEndpointWhenUserIsAuthenticatedUsingOAuth2() throws Exception { - Mockito.when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider("user123", "google")).thenReturn(Optional.of(userMetadata)); - when(encryptionDecryptionUtil.decrypt(anyString(), any(), any(), any())).thenReturn(displayName, profilePictureUrl, email); - mockSession.setAttribute("clientRegistrationId", "google"); - - // Create a mock OAuth2User with the necessary attributes, including the name. - Map attributes = new HashMap<>(); - attributes.put("sub", "user123"); - attributes.put("name", "user_123"); - OAuth2User oauth2User = new DefaultOAuth2User(Collections.emptyList(), attributes, "sub"); - - // Create an OAuth2AuthenticationToken. - OAuth2AuthenticationToken authenticationToken = new OAuth2AuthenticationToken( - oauth2User, - Collections.emptyList(), - "google" - ); - - // Set the authentication token in the security context. - SecurityContext securityContext = SecurityContextHolder.getContext(); - securityContext.setAuthentication(authenticationToken); - - mockMvc.perform(get("/users/me/db") - .session(mockSession) - .with(oauth2Login().oauth2User(oauth2User))) - .andExpect(status().isOk()) - .andExpect(MockMvcResultMatchers.jsonPath("$.display_name").value("user_123")) - .andExpect(MockMvcResultMatchers.jsonPath("$.profile_picture_url").value("https://example.com/profile.jpg")) - .andExpect(MockMvcResultMatchers.jsonPath("$.email").value("user.123@example.com")) - .andExpect(jsonPath("$.errorCode").doesNotExist()) - .andExpect(jsonPath("$.errorMessage").doesNotExist()); - } - - @Test - public void shouldThrowExceptionWhenLogoutRequestWasSentForInvalidSession() throws Exception { - String sessionId = "mockSessionId"; - String encodedSessionId = Base64.getUrlEncoder().encodeToString(sessionId.getBytes()); - Cookie sessionCookie = new Cookie("SESSION", encodedSessionId); - mockSession.setAttribute("clientRegistrationId", "google"); - - doThrow(new OAuth2AuthenticationException("NOT_FOUND", - "Logout request was sent for an invalid or expired session", - HttpStatus.NOT_FOUND)) - .when(logoutService).handleLogout(any(HttpServletRequest.class), any(HttpServletResponse.class), eq(sessionRepository)); - - - mockMvc.perform(post("/logout") - .session(mockSession).cookie(sessionCookie)) - .andExpect(status().isNotFound()) - .andExpect(jsonPath("$.errors[0].errorCode").value("user_logout_error")) - .andExpect(jsonPath("$.errors[0].errorMessage").value("Exception occurred when invalidating the session of a user")); - - } - - @Test - public void shouldPerformLogoutSuccessfullyForaValidSession() throws Exception { - String sessionId = "mockSessionId"; - String encodedSessionId = Base64.getUrlEncoder().encodeToString(sessionId.getBytes()); - Cookie sessionCookie = new Cookie("SESSION", encodedSessionId); - mockSession.setAttribute("clientRegistrationId", "google"); - Session mockSessionFromRepo = Mockito.mock(Session.class); - when(sessionRepository.findById(sessionId)).thenReturn(mockSessionFromRepo); - - mockMvc.perform(post("/logout") - .session(mockSession).cookie(sessionCookie)) - .andExpect(status().isOk()); - } - - @Test - public void shouldSendTheCustomErrorInRedirectUrlWhenUserDeniesConsentDuringLogin() throws Exception { - OAuth2AuthorizationRequest authRequest = OAuth2AuthorizationRequest.authorizationCode() - .authorizationUri("https://accounts.google.com/o/oauth2/auth") - .clientId("test-client-id") - .redirectUri("https://yourapp.com/oauth2/callback/google") - .scopes(Collections.singleton("profile")) - .state("test-state") - .attributes(Map.of(OAuth2ParameterNames.REGISTRATION_ID, "google")) - .build(); - - mockSession.setAttribute(HttpSessionOAuth2AuthorizationRequestRepository.class.getName() + ".AUTHORIZATION_REQUEST", authRequest); - - mockMvc.perform(get("/oauth2/callback/google") - .session(mockSession) - .param("error", "access_denied") // Simulating the user clicking "Deny or Cancel" button in the consent - .param("state", "test-state")) - .andExpect(status().is3xxRedirection()) - .andExpect(redirectedUrl("https://injiweb.dev1.mosip.net/login?status=error&error_message=Consent+was+denied+to+share+the+details+with+the+application.+Please+give+consent+and+try+again")); - } - - @Test - public void shouldThrowTheCustomErrorInRedirectUrlWhenAnyExceptionOccurredDuringLogin() throws Exception { - //registration_id is not sent in the auth request - OAuth2AuthorizationRequest authRequest = OAuth2AuthorizationRequest.authorizationCode() - .authorizationUri("https://accounts.google.com/o/oauth2/auth") - .clientId("test-client-id") - .redirectUri("https://yourapp.com/oauth2/callback/google") - .scopes(Collections.singleton("profile")) - .state("test-state") - .build(); - - mockSession.setAttribute(HttpSessionOAuth2AuthorizationRequestRepository.class.getName() + ".AUTHORIZATION_REQUEST", authRequest); - - mockMvc.perform(get("/oauth2/callback/google") - .session(mockSession) - .param("error", "access_denied") - .param("state", "test-state")) - .andExpect(status().is3xxRedirection()) - .andExpect(redirectedUrl(injiWebUrl + "/login?status=error&error_message=Login+is+failed+due+to+%3A+%5Bclient_registration_not_found%5D+Client+Registration+not+found+with+Id%3A+null")); - } -} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/GoogleTokenServiceTest.java b/src/test/java/io/mosip/mimoto/service/GoogleTokenServiceTest.java index 1beb557f1..b8712992e 100644 --- a/src/test/java/io/mosip/mimoto/service/GoogleTokenServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/GoogleTokenServiceTest.java @@ -1,11 +1,13 @@ package io.mosip.mimoto.service; -import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; +import io.mosip.mimoto.exception.InvalidRequestException; +import io.mosip.mimoto.exception.OAuth2AuthenticationException; import io.mosip.mimoto.service.impl.GoogleTokenService; +import io.mosip.mimoto.service.impl.SecurityContextManager; +import io.mosip.mimoto.service.impl.SessionManager; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; -import jakarta.servlet.http.HttpSession; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -14,15 +16,16 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken; import org.springframework.security.oauth2.jwt.Jwt; -import org.springframework.security.oauth2.jwt.JwtDecoder; -import org.springframework.test.util.ReflectionTestUtils; +import org.springframework.security.oauth2.jwt.JwtException; import java.time.Instant; import java.util.Collections; import java.util.HashMap; import java.util.Map; +import static io.mosip.mimoto.exception.ErrorConstants.INVALID_REQUEST; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.Mockito.*; @@ -31,22 +34,22 @@ class GoogleTokenServiceTest { @Mock - private JwtDecoder googleIdTokenDecoder; + private TokenDecoder tokenDecoder; @Mock private UserMetadataService userMetadataService; @Mock - private SecurityContextService securityContextService; + private SecurityContextManager securityContextManager; @Mock - private HttpServletRequest request; + private SessionManager sessionManager; @Mock - private HttpServletResponse response; + private HttpServletRequest request; @Mock - private HttpSession session; + private HttpServletResponse response; @InjectMocks private GoogleTokenService googleTokenService; @@ -54,18 +57,21 @@ class GoogleTokenServiceTest { @Captor private ArgumentCaptor userMetadataDTOArgumentCaptor; + @Captor + private ArgumentCaptor oauth2TokenCaptor; + private String idToken; private String provider; private Jwt validJwt; private Map claims; @BeforeEach - void setUp() throws Exception { + void setUp() { idToken = "dummyIdToken"; provider = "google"; - // Mock the googleClientId value - ReflectionTestUtils.setField(googleTokenService, "googleClientId", "google-client-id"); + // Set expectedIssuer and expectedAudience via constructor injection simulation + googleTokenService = new GoogleTokenService(tokenDecoder, userMetadataService, securityContextManager, sessionManager, "google-client-id", "https://accounts.google.com"); claims = new HashMap<>(); claims.put("email", "test@example.com"); @@ -78,110 +84,123 @@ void setUp() throws Exception { validJwt = Jwt.withTokenValue(idToken) .header("alg", "RS256") - .claims(claimsMap -> claimsMap.putAll(claims)) + .claims(claimsMap -> claimsMap.putAll(claims)) .issuer("https://accounts.google.com") .audience(Collections.singletonList("google-client-id")) .issuedAt(Instant.now()) .expiresAt(Instant.now().plusSeconds(3600)) .build(); - } @Test void processTokenValidTokenShouldCallDependenciesAndSetSessionAndSecurityContext() throws Exception { - when(googleIdTokenDecoder.decode(idToken)).thenReturn(validJwt); - when(request.getSession(true)).thenReturn(session); - when(userMetadataService.updateOrInsertUserMetadata(anyString(), anyString(), anyString(), anyString(), anyString())).thenReturn("test-user-id"); + when(tokenDecoder.decode(idToken)).thenReturn(validJwt); + when(userMetadataService.updateOrInsertUserMetadata("google-subject-id", provider, "Test User", "http://example.com/picture.jpg", "test@example.com")).thenReturn("test-user-id"); googleTokenService.processToken(idToken, provider, request, response); - verify(googleIdTokenDecoder).decode(idToken); + verify(tokenDecoder).decode(idToken); verify(userMetadataService).updateOrInsertUserMetadata("google-subject-id", provider, "Test User", "http://example.com/picture.jpg", "test@example.com"); - verify(session).setAttribute("clientRegistrationId", provider); - verify(session).setAttribute(SessionKeys.USER_ID, "test-user-id"); - verify(session).setAttribute(eq(SessionKeys.USER_METADATA), userMetadataDTOArgumentCaptor.capture()); + verify(sessionManager).setupSession(eq(request), eq(provider), userMetadataDTOArgumentCaptor.capture(), eq("test-user-id")); + verify(securityContextManager).setupSecurityContext(oauth2TokenCaptor.capture(), eq(request), eq(response)); UserMetadataDTO capturedUserMetadata = userMetadataDTOArgumentCaptor.getValue(); assertEquals("Test User", capturedUserMetadata.getDisplayName()); assertEquals("http://example.com/picture.jpg", capturedUserMetadata.getProfilePictureUrl()); assertEquals("test@example.com", capturedUserMetadata.getEmail()); - verify(securityContextService).setupSecurityContext(any(), eq(request), eq(response)); + OAuth2AuthenticationToken capturedToken = oauth2TokenCaptor.getValue(); + assertEquals(provider, capturedToken.getAuthorizedClientRegistrationId()); + assertEquals("google-subject-id", capturedToken.getPrincipal().getAttribute("sub")); } @Test - void processTokenInvalidIssuerShouldThrowException() throws Exception { + void processTokenInvalidIssuerShouldThrowException() throws OAuth2AuthenticationException { Jwt invalidIssuerJwt = Jwt.withTokenValue(idToken) .header("alg", "RS256") - .claims(claimsMap -> claimsMap.putAll(claims)) + .claims(claimsMap -> claimsMap.putAll(claims)) .issuer("https://invalid.com") .audience(Collections.singletonList("google-client-id")) .issuedAt(Instant.now()) .expiresAt(Instant.now().plusSeconds(3600)) .build(); - when(googleIdTokenDecoder.decode(idToken)).thenReturn(invalidIssuerJwt); + when(tokenDecoder.decode(idToken)).thenReturn(invalidIssuerJwt); - assertThrows(Exception.class, () -> googleTokenService.processToken(idToken, provider, request, response)); + OAuth2AuthenticationException exception = assertThrows(OAuth2AuthenticationException.class, () -> + googleTokenService.processToken(idToken, provider, request, response)); - verify(googleIdTokenDecoder).decode(idToken); - verifyNoInteractions(userMetadataService, session, securityContextService); + assertEquals("invalid_issuer", exception.getErrorCode()); + verify(tokenDecoder).decode(idToken); + verifyNoInteractions(userMetadataService, sessionManager, securityContextManager); } @Test - void processTokenInvalidAudienceShouldThrowException() throws Exception { + void processTokenInvalidAudienceShouldThrowException() throws OAuth2AuthenticationException { Jwt invalidAudienceJwt = Jwt.withTokenValue(idToken) .header("alg", "RS256") - .claims(claimsMap -> claimsMap.putAll(claims)) + .claims(claimsMap -> claimsMap.putAll(claims)) .issuer("https://accounts.google.com") .audience(Collections.singletonList("invalid-client-id")) .issuedAt(Instant.now()) .expiresAt(Instant.now().plusSeconds(3600)) .build(); - when(googleIdTokenDecoder.decode(idToken)).thenReturn(invalidAudienceJwt); + when(tokenDecoder.decode(idToken)).thenReturn(invalidAudienceJwt); - assertThrows(Exception.class, () -> googleTokenService.processToken(idToken, provider, request, response)); + OAuth2AuthenticationException exception = assertThrows(OAuth2AuthenticationException.class, () -> + googleTokenService.processToken(idToken, provider, request, response)); - verify(googleIdTokenDecoder).decode(idToken); - verifyNoInteractions(userMetadataService, session, securityContextService); + assertEquals("invalid_audience", exception.getErrorCode()); + verify(tokenDecoder).decode(idToken); + verifyNoInteractions(userMetadataService, sessionManager, securityContextManager); } @Test - void processTokenMissingEmailClaimShouldThrowException() throws Exception { + void processTokenMissingEmailClaimShouldThrowException() throws OAuth2AuthenticationException { Map claimsWithoutEmail = new HashMap<>(claims); claimsWithoutEmail.remove("email"); Jwt jwtWithoutEmail = Jwt.withTokenValue(idToken) .header("alg", "RS256") - .claims(claimsMap -> claimsMap.putAll(claimsWithoutEmail)) + .claims(claimsMap -> claimsMap.putAll(claimsWithoutEmail)) .issuer("https://accounts.google.com") .audience(Collections.singletonList("google-client-id")) .issuedAt(Instant.now()) .expiresAt(Instant.now().plusSeconds(3600)) .build(); - when(googleIdTokenDecoder.decode(idToken)).thenReturn(jwtWithoutEmail); + when(tokenDecoder.decode(idToken)).thenReturn(jwtWithoutEmail); - assertThrows(Exception.class, () -> googleTokenService.processToken(idToken, provider, request, response)); + OAuth2AuthenticationException exception = assertThrows(OAuth2AuthenticationException.class, () -> + googleTokenService.processToken(idToken, provider, request, response)); - verify(googleIdTokenDecoder).decode(idToken); - verifyNoInteractions(userMetadataService, session, securityContextService); + assertEquals("missing_email", exception.getErrorCode()); + verify(tokenDecoder).decode(idToken); + verifyNoInteractions(userMetadataService, sessionManager, securityContextManager); } @Test - void processTokenEmptyTokenShouldThrowException() { - assertThrows(Exception.class, () -> googleTokenService.processToken("", provider, request, response)); + void processTokenEmptyTokenShouldThrowException() throws OAuth2AuthenticationException { + // Stub tokenDecoder.decode to throw a JwtException for an empty token + when(tokenDecoder.decode("")).thenThrow(new InvalidRequestException("invalid_request","Empty token")); + + InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> + googleTokenService.processToken("", provider, request, response)); - verifyNoInteractions(userMetadataService, session, securityContextService); + assertEquals(INVALID_REQUEST.getErrorCode(), exception.getErrorCode()); + verifyNoInteractions(userMetadataService, sessionManager, securityContextManager); + verify(tokenDecoder).decode(""); } @Test - void processTokenInvalidTokenFormatShouldThrowException() throws Exception { - when(googleIdTokenDecoder.decode(idToken)).thenThrow(new IllegalArgumentException("Invalid token format")); + void processTokenInvalidTokenFormatShouldThrowException() throws OAuth2AuthenticationException { + when(tokenDecoder.decode(idToken)).thenThrow(new InvalidRequestException("invalid_token", "Invalid token format")); - assertThrows(Exception.class, () -> googleTokenService.processToken(idToken, provider, request, response)); + InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> + googleTokenService.processToken(idToken, provider, request, response)); - verify(googleIdTokenDecoder).decode(idToken); - verifyNoInteractions(userMetadataService, session, securityContextService); + assertEquals("invalid_token", exception.getErrorCode()); + verify(tokenDecoder).decode(idToken); + verifyNoInteractions(userMetadataService, sessionManager, securityContextManager); } -} +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/TokenServiceFactoryTest.java b/src/test/java/io/mosip/mimoto/service/TokenServiceFactoryTest.java new file mode 100644 index 000000000..0389f7c05 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/service/TokenServiceFactoryTest.java @@ -0,0 +1,96 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.exception.ErrorConstants; +import io.mosip.mimoto.exception.OAuth2AuthenticationException; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.http.HttpStatus; + +import java.util.HashMap; +import java.util.Map; + +import static org.junit.Assert.*; + +@RunWith(MockitoJUnitRunner.class) +public class TokenServiceFactoryTest { + + @InjectMocks + private TokenServiceFactory tokenServiceFactory; + + @Mock + private TokenService googleTokenService; + + private Map tokenServices; + + @Before + public void setUp() { + tokenServices = new HashMap<>(); + tokenServices.put("google", googleTokenService); + tokenServiceFactory = new TokenServiceFactory(tokenServices); + } + + @Test + public void testGetTokenService_ValidProvider_ReturnsService() throws OAuth2AuthenticationException { + // Act + TokenService result = tokenServiceFactory.getTokenService("google"); + + // Assert + assertNotNull(result); + assertEquals(googleTokenService, result); + } + + @Test + public void testGetTokenService_CaseInsensitiveProvider_ReturnsService() throws OAuth2AuthenticationException { + // Act + TokenService result = tokenServiceFactory.getTokenService("GOOGLE"); + + // Assert + assertNotNull(result); + assertEquals(googleTokenService, result); + } + + @Test + public void testGetTokenService_UnsupportedProvider_ThrowsException() { + // Arrange + String invalidProvider = "facebook"; + + // Act & Assert + OAuth2AuthenticationException exception = assertThrows(OAuth2AuthenticationException.class, + () -> tokenServiceFactory.getTokenService(invalidProvider)); + + assertEquals(ErrorConstants.INVALID_REQUEST.getErrorCode(), exception.getErrorCode()); + assertEquals("invalid_request --> Unsupported provider: " + invalidProvider, exception.getMessage()); + assertEquals(HttpStatus.BAD_REQUEST, exception.getStatus()); + } + + @Test + public void testIsSupportedProvider_ValidProvider_ReturnsTrue() { + // Act + boolean result = tokenServiceFactory.isSupportedProvider("google"); + + // Assert + assertTrue(result); + } + + @Test + public void testIsSupportedProvider_CaseInsensitiveProvider_ReturnsTrue() { + // Act + boolean result = tokenServiceFactory.isSupportedProvider("GOOGLE"); + + // Assert + assertTrue(result); + } + + @Test + public void testIsSupportedProvider_UnsupportedProvider_ReturnsFalse() { + // Act + boolean result = tokenServiceFactory.isSupportedProvider("facebook"); + + // Assert + assertFalse(result); + } +} diff --git a/src/test/java/io/mosip/mimoto/service/UserMetadataServiceTest.java b/src/test/java/io/mosip/mimoto/service/UserMetadataServiceTest.java index 2de770984..45465652e 100644 --- a/src/test/java/io/mosip/mimoto/service/UserMetadataServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/UserMetadataServiceTest.java @@ -1,15 +1,15 @@ package io.mosip.mimoto.service; import io.mosip.mimoto.dbentity.UserMetadata; +import io.mosip.mimoto.exception.DecryptionException; +import io.mosip.mimoto.exception.EncryptionException; import io.mosip.mimoto.repository.UserMetadataRepository; -import io.mosip.mimoto.util.EncryptionDecryptionUtil; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.InjectMocks; import org.mockito.Mock; -import org.mockito.MockitoAnnotations; import org.mockito.junit.MockitoJUnitRunner; import java.sql.Timestamp; @@ -20,7 +20,6 @@ import static org.junit.Assert.assertNotEquals; import static org.mockito.Mockito.*; - @RunWith(MockitoJUnitRunner.class) public class UserMetadataServiceTest { @@ -28,18 +27,17 @@ public class UserMetadataServiceTest { private UserMetadataRepository userMetadataRepository; @Mock - private EncryptionDecryptionUtil encryptionDecryptionUtil; + private EncryptionService encryptionService; @InjectMocks private UserMetadataService userMetadataService; - private String providerSubjectId, identityProvider, displayName, profilePictureUrl, email, userId, storedUserId; + private String providerSubjectId, identityProvider, displayName, profilePictureUrl, email, userId; private Timestamp now; private UserMetadata userMetadata; @Before public void setUp() { - MockitoAnnotations.initMocks(this); providerSubjectId = "provider123"; identityProvider = "google"; displayName = "Name 123"; @@ -52,68 +50,120 @@ public void setUp() { userMetadata.setId(userId); userMetadata.setProviderSubjectId(providerSubjectId); userMetadata.setIdentityProvider(identityProvider); - userMetadata.setDisplayName(displayName); - userMetadata.setProfilePictureUrl(profilePictureUrl); - userMetadata.setEmail(email); + userMetadata.setDisplayName("encryptedDisplayName"); + userMetadata.setProfilePictureUrl("encryptedProfilePictureUrl"); + userMetadata.setEmail("encryptedEmail"); userMetadata.setCreatedAt(now); userMetadata.setUpdatedAt(now); } @Test - public void shouldUpdateUserMetadataForSameProviderSubjectIdAndSameIdentityProviderButWithDifferentDisplayName() { + public void shouldUpdateUserMetadataForSameProviderSubjectIdAndSameIdentityProviderButWithDifferentDisplayName() throws DecryptionException, EncryptionException { String updatedDisplayName = "Name 124"; + String encryptedUpdatedDisplayName = "encryptedUpdatedDisplayName"; + Timestamp updatedTimestamp = new Timestamp(System.currentTimeMillis() + 1000); + when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider(providerSubjectId, identityProvider)).thenReturn(Optional.of(userMetadata)); - when(encryptionDecryptionUtil.decrypt(anyString(), any(), any(), any())).thenReturn(displayName, profilePictureUrl, email); - when(encryptionDecryptionUtil.encrypt(anyString(), any(), any(), any())).thenReturn(updatedDisplayName, profilePictureUrl, email); + when(encryptionService.decrypt("encryptedDisplayName")).thenReturn(displayName); + when(encryptionService.encrypt(updatedDisplayName)).thenReturn(encryptedUpdatedDisplayName); + when(userMetadataRepository.save(any(UserMetadata.class))).thenReturn(userMetadata); - storedUserId = userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, updatedDisplayName, profilePictureUrl, email); + String storedUserId = userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, updatedDisplayName, profilePictureUrl, email); assertEquals(userId, storedUserId); - assertEquals(userMetadata.getDisplayName(), updatedDisplayName); - verify(userMetadataRepository, times(1)).save(userMetadata); + ArgumentCaptor userMetadataCaptor = ArgumentCaptor.forClass(UserMetadata.class); + verify(userMetadataRepository).save(userMetadataCaptor.capture()); + UserMetadata savedUserMetadata = userMetadataCaptor.getValue(); + assertEquals(encryptedUpdatedDisplayName, savedUserMetadata.getDisplayName()); + assertEquals("encryptedProfilePictureUrl", savedUserMetadata.getProfilePictureUrl()); + assertEquals("encryptedEmail", savedUserMetadata.getEmail()); + verify(encryptionService).decrypt("encryptedDisplayName"); + verify(encryptionService).encrypt(updatedDisplayName); + verifyNoMoreInteractions(encryptionService); } @Test - public void shouldCreateNewUserMetadataForSameProviderSubjectIdAndDifferentIdentityProvider() { - String identityProvider = "facebook"; - when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider(providerSubjectId, identityProvider)).thenReturn(Optional.empty()); - when(encryptionDecryptionUtil.encrypt(anyString(), any(), any(), any())).thenReturn(displayName, profilePictureUrl, email); - when(userMetadataRepository.save(any(UserMetadata.class))).thenReturn(userMetadata); - - userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); - + public void shouldCreateNewUserMetadataForSameProviderSubjectIdAndDifferentIdentityProvider() throws DecryptionException, EncryptionException { + String newIdentityProvider = "facebook"; + String newUserId = UUID.randomUUID().toString(); + UserMetadata newUserMetadata = new UserMetadata(); + newUserMetadata.setId(newUserId); + newUserMetadata.setProviderSubjectId(providerSubjectId); + newUserMetadata.setIdentityProvider(newIdentityProvider); + newUserMetadata.setDisplayName("encryptedDisplayName"); + newUserMetadata.setProfilePictureUrl("encryptedProfilePictureUrl"); + newUserMetadata.setEmail("encryptedEmail"); + newUserMetadata.setCreatedAt(now); + newUserMetadata.setUpdatedAt(now); + + when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider(providerSubjectId, newIdentityProvider)).thenReturn(Optional.empty()); + when(encryptionService.encrypt(displayName)).thenReturn("encryptedDisplayName"); + when(encryptionService.encrypt(profilePictureUrl)).thenReturn("encryptedProfilePictureUrl"); + when(encryptionService.encrypt(email)).thenReturn("encryptedEmail"); + when(userMetadataRepository.save(any(UserMetadata.class))).thenReturn(newUserMetadata); + + String storedUserId = userMetadataService.updateOrInsertUserMetadata(providerSubjectId, newIdentityProvider, displayName, profilePictureUrl, email); + + assertEquals(newUserId, storedUserId); ArgumentCaptor userMetadataCaptor = ArgumentCaptor.forClass(UserMetadata.class); verify(userMetadataRepository).save(userMetadataCaptor.capture()); - UserMetadata capturedUserMetadata = userMetadataCaptor.getValue(); - String storedUserId = capturedUserMetadata.getId(); - assertNotEquals(userId, storedUserId); + assertEquals(providerSubjectId, capturedUserMetadata.getProviderSubjectId()); + assertEquals(newIdentityProvider, capturedUserMetadata.getIdentityProvider()); + assertEquals("encryptedDisplayName", capturedUserMetadata.getDisplayName()); + assertEquals("encryptedProfilePictureUrl", capturedUserMetadata.getProfilePictureUrl()); + assertEquals("encryptedEmail", capturedUserMetadata.getEmail()); + verify(encryptionService, times(3)).encrypt(anyString()); } @Test - public void shouldCreateNewUserMetadataForDifferentProviderSubjectIdAndSameIdentityProvider() { - String providerSubjectId = "provider124"; - when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider(providerSubjectId, identityProvider)).thenReturn(Optional.empty()); - when(encryptionDecryptionUtil.encrypt(anyString(), any(), any(), any())).thenReturn(displayName, profilePictureUrl, email); - when(userMetadataRepository.save(any(UserMetadata.class))).thenReturn(userMetadata); - - userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); - + public void shouldCreateNewUserMetadataForDifferentProviderSubjectIdAndSameIdentityProvider() throws DecryptionException, EncryptionException { + String newProviderSubjectId = "provider124"; + String newUserId = UUID.randomUUID().toString(); + UserMetadata newUserMetadata = new UserMetadata(); + newUserMetadata.setId(newUserId); + newUserMetadata.setProviderSubjectId(newProviderSubjectId); + newUserMetadata.setIdentityProvider(identityProvider); + newUserMetadata.setDisplayName("encryptedDisplayName"); + newUserMetadata.setProfilePictureUrl("encryptedProfilePictureUrl"); + newUserMetadata.setEmail("encryptedEmail"); + newUserMetadata.setCreatedAt(now); + newUserMetadata.setUpdatedAt(now); + + when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider(newProviderSubjectId, identityProvider)).thenReturn(Optional.empty()); + when(encryptionService.encrypt(displayName)).thenReturn("encryptedDisplayName"); + when(encryptionService.encrypt(profilePictureUrl)).thenReturn("encryptedProfilePictureUrl"); + when(encryptionService.encrypt(email)).thenReturn("encryptedEmail"); + when(userMetadataRepository.save(any(UserMetadata.class))).thenReturn(newUserMetadata); + + String storedUserId = userMetadataService.updateOrInsertUserMetadata(newProviderSubjectId, identityProvider, displayName, profilePictureUrl, email); + + assertEquals(newUserId, storedUserId); ArgumentCaptor userMetadataCaptor = ArgumentCaptor.forClass(UserMetadata.class); verify(userMetadataRepository).save(userMetadataCaptor.capture()); - UserMetadata capturedUserMetadata = userMetadataCaptor.getValue(); - String storedUserId = capturedUserMetadata.getId(); - assertNotEquals(userId, storedUserId); + assertEquals(newProviderSubjectId, capturedUserMetadata.getProviderSubjectId()); + assertEquals(identityProvider, capturedUserMetadata.getIdentityProvider()); + assertEquals("encryptedDisplayName", capturedUserMetadata.getDisplayName()); + assertEquals("encryptedProfilePictureUrl", capturedUserMetadata.getProfilePictureUrl()); + assertEquals("encryptedEmail", capturedUserMetadata.getEmail()); + verify(encryptionService, times(3)).encrypt(anyString()); } @Test - public void shouldNotCreateNewUserMetadataForSameProviderSubjectIdAndSameIdentityProvider() { + public void shouldNotCreateNewUserMetadataForSameProviderSubjectIdAndSameIdentityProvider() throws DecryptionException, EncryptionException { when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider(providerSubjectId, identityProvider)).thenReturn(Optional.of(userMetadata)); - when(encryptionDecryptionUtil.decrypt(anyString(), any(), any(), any())).thenReturn(displayName, profilePictureUrl, email); + when(encryptionService.decrypt(userMetadata.getDisplayName())).thenReturn(displayName); + when(encryptionService.decrypt(userMetadata.getProfilePictureUrl())).thenReturn(profilePictureUrl); + when(encryptionService.decrypt(userMetadata.getEmail())).thenReturn(email); - userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); + String storedUserId = userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); - verify(userMetadataRepository,times(0)).save(any(UserMetadata.class)); + assertEquals(userId, storedUserId); + verify(userMetadataRepository, times(0)).save(any(UserMetadata.class)); + verify(encryptionService).decrypt(userMetadata.getDisplayName()); + verify(encryptionService).decrypt(userMetadata.getProfilePictureUrl()); + verify(encryptionService).decrypt(userMetadata.getEmail()); + verify(encryptionService, times(0)).encrypt(anyString()); } -} +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java index 1865e2552..e1c728033 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java @@ -1,312 +1,249 @@ package io.mosip.mimoto.service; -import com.fasterxml.jackson.databind.ObjectMapper; -import io.mosip.kernel.cryptomanager.service.CryptomanagerService; +import io.mosip.mimoto.dbentity.CredentialMetadata; import io.mosip.mimoto.dbentity.VerifiableCredential; -import io.mosip.mimoto.dto.*; +import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; -import io.mosip.mimoto.dto.mimoto.*; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; +import io.mosip.mimoto.dto.mimoto.CredentialsSupportedResponse; +import io.mosip.mimoto.dto.mimoto.IssuerConfig; +import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; import io.mosip.mimoto.dto.resident.WalletCredentialResponseDTO; import io.mosip.mimoto.exception.*; import io.mosip.mimoto.repository.WalletCredentialsRepository; -import io.mosip.mimoto.service.impl.*; -import io.mosip.mimoto.util.*; +import io.mosip.mimoto.service.impl.WalletCredentialServiceImpl; +import io.mosip.mimoto.util.CredentialProcessor; +import io.mosip.mimoto.util.CredentialUtilService; +import io.mosip.mimoto.util.EncryptionDecryptionUtil; +import io.mosip.mimoto.util.WalletCredentialResponseDTOFactory; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.*; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.web.client.RestTemplate; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockedStatic; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.core.io.InputStreamResource; import java.io.ByteArrayInputStream; -import java.util.*; +import java.time.Instant; +import java.util.List; +import java.util.Optional; -import static io.mosip.mimoto.exception.ErrorConstants.SIGNATURE_VERIFICATION_EXCEPTION; -import static io.mosip.mimoto.util.TestUtilities.*; +import static io.mosip.mimoto.exception.ErrorConstants.*; import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; -import static org.mockito.Mockito.when; -@RunWith(SpringRunner.class) +@RunWith(MockitoJUnitRunner.class) public class WalletCredentialServiceTest { @InjectMocks private WalletCredentialServiceImpl walletCredentialService; + @Mock + private WalletCredentialsRepository walletCredentialsRepository; + @Mock private IssuersService issuersService; + @Mock private CredentialProcessor credentialProcessor; - @Mock - private ObjectMapper objectMapper; - @Mock - private IdpService idpService; - @Mock - private RestTemplate restTemplate; - @Mock - private PresentationServiceImpl presentationService; - @Mock - private CryptomanagerService cryptomanagerService; - @Mock - private WalletCredentialsRepository walletCredentialsRepository; @Mock private CredentialUtilService credentialUtilService; + @Mock private EncryptionDecryptionUtil encryptionDecryptionUtil; private final String walletId = "wallet123"; private final String issuerId = "issuer123"; private final String credentialType = "CredentialType1"; - private final String accessToken = "accessToken"; - private final String base64Key = Base64.getEncoder().encodeToString("dummykey12345678".getBytes()); + private final String credentialId = "cred123"; + private final String base64Key = "ZHVtbXlrZXkxMjM0NTY3OA=="; // Base64 of "dummykey12345678" + private final String locale = "en"; + private final String credentialValidity = "1"; - private CredentialIssuerConfiguration issuerConfig; - private VCCredentialRequest vcRequest; - TokenResponseDTO tokenResponse; + private TokenResponseDTO tokenResponse; + private VerifiableCredential verifiableCredential; + private IssuerConfig issuerConfig; @Before public void setUp() { - issuerConfig = getCredentialIssuerConfigurationResponseDto(issuerId, credentialType, List.of()); - vcRequest = getVCCredentialRequestDTO(); tokenResponse = new TokenResponseDTO(); - tokenResponse.setAccess_token(accessToken); - } - - private IssuerDTO getMockIssuerDTO() { - DisplayDTO display = new DisplayDTO(); - display.setName("issuer name"); - display.setDescription("issuer description"); - display.setLanguage("en"); - - LogoDTO logoDTO = new LogoDTO(); - logoDTO.setUrl("https://issuer_logo_url"); - logoDTO.setAlt_text("issuerLogo"); - display.setLogo(logoDTO); - - IssuerDTO dto = new IssuerDTO(); - dto.setDisplay(List.of(display)); - dto.setIssuer_id(issuerId); - return dto; + tokenResponse.setAccess_token("accessToken"); + + verifiableCredential = new VerifiableCredential(); + verifiableCredential.setId(credentialId); + verifiableCredential.setWalletId(walletId); + verifiableCredential.setCredential("encryptedCredential"); + CredentialMetadata metadata = new CredentialMetadata(); + metadata.setIssuerId(issuerId); + metadata.setCredentialType(credentialType); + verifiableCredential.setCredentialMetadata(metadata); + verifiableCredential.setCreatedAt(Instant.now()); + verifiableCredential.setUpdatedAt(Instant.now()); + + IssuerDTO issuerDTO = new IssuerDTO(); + issuerDTO.setIssuer_id(issuerId); + CredentialIssuerWellKnownResponse wellKnownResponse = new CredentialIssuerWellKnownResponse(); + CredentialsSupportedResponse credentialsSupportedResponse = new CredentialsSupportedResponse(); + issuerConfig = new IssuerConfig(issuerDTO, wellKnownResponse, credentialsSupportedResponse); } @Test public void shouldFetchAndStoreCredentialSuccessfully() throws Exception { - VCCredentialResponse vcResponse = new VCCredentialResponse(); - String encryptedCredential = "encryptedCredential"; - - VerifiableCredential vc = getVerifiableCredential("vc-id-123", walletId, "encryptedCredential", issuerId, credentialType); - VerifiableCredentialResponseDTO expectedVerifiableCredentialResponseDTO = getVerifiableCredentialResponseDTO("issuer name", "https://issuer_logo_url", credentialType, "https://logo", "vc-id-123"); - - when(issuersService.getIssuerDetails(issuerId)).thenReturn(getMockIssuerDTO()); - when(issuersService.getIssuerConfiguration(issuerId)).thenReturn(issuerConfig); - when(credentialUtilService.generateVCCredentialRequest(any(), any(), any(), eq(accessToken), eq(walletId), eq(base64Key), eq(true))).thenReturn(vcRequest); - when(credentialUtilService.downloadCredential(anyString(), eq(vcRequest), eq(accessToken))).thenReturn(vcResponse); - when(credentialUtilService.verifyCredential(any())).thenReturn(true); - when(encryptionDecryptionUtil.encryptWithAES(any(), any())).thenReturn(encryptedCredential); - when(walletCredentialsRepository.save(any())).thenReturn(vc); - when(credentialProcessor.processAndStoreCredential(any(),eq(accessToken), eq(credentialType), eq(walletId), eq(base64Key), any(), eq(issuerId))).thenReturn(vc); - - VerifiableCredentialResponseDTO actualVerifiableCredentialResponseDTO = walletCredentialService.fetchAndStoreCredential( - issuerId, credentialType, tokenResponse, "1", "en", walletId, base64Key - ); - - assertEquals(expectedVerifiableCredentialResponseDTO, actualVerifiableCredentialResponseDTO); - } + String mosipIssuerId = "Mosip"; + VerifiableCredentialResponseDTO expectedResponse = new VerifiableCredentialResponseDTO(); + expectedResponse.setCredentialId(credentialId); - @Test - public void shouldThrowExceptionWhenDuplicateCredentialExists() { - when(walletCredentialsRepository.existsByIssuerIdAndCredentialTypeAndWalletId("Mosip", credentialType, walletId)).thenReturn(true); + when(walletCredentialsRepository.existsByIssuerIdAndCredentialTypeAndWalletId(mosipIssuerId, credentialType, walletId)).thenReturn(false); + when(credentialProcessor.processAndStoreCredential(eq(tokenResponse), eq(credentialType), eq(walletId), eq(base64Key), eq(credentialValidity), eq(mosipIssuerId), eq(locale))) + .thenReturn(expectedResponse); - RuntimeException exception = assertThrows(RuntimeException.class, () -> - walletCredentialService.fetchAndStoreCredential("Mosip", credentialType, tokenResponse, "1", "en", walletId, base64Key) - ); + VerifiableCredentialResponseDTO actualResponse = walletCredentialService.fetchAndStoreCredential( + mosipIssuerId, credentialType, tokenResponse, credentialValidity, locale, walletId, base64Key); - assertEquals("invalid_request --> A credential is already downloaded for the selected Issuer and Credential Type. Only one is allowed", exception.getMessage()); + assertEquals(expectedResponse, actualResponse); + verify(walletCredentialsRepository).existsByIssuerIdAndCredentialTypeAndWalletId(mosipIssuerId, credentialType, walletId); + verify(credentialProcessor).processAndStoreCredential(eq(tokenResponse), eq(credentialType), eq(walletId), eq(base64Key), eq(credentialValidity), eq(mosipIssuerId), eq(locale)); } @Test - public void shouldFetchAllCredentialsForWalletSuccessfully() throws Exception { - VerifiableCredential vc = getVerifiableCredential("vc-id-123", walletId, "encryptedCredential", issuerId, credentialType); - when(walletCredentialsRepository.findByWalletId(walletId)).thenReturn(List.of(vc)); - when(issuersService.getIssuerDetails(issuerId)).thenReturn(getMockIssuerDTO()); - when(issuersService.getIssuerConfiguration(issuerId)).thenReturn(issuerConfig); - List expectedCredentialsList = List.of(getVerifiableCredentialResponseDTO("issuer name", "https://issuer_logo_url", credentialType, "https://logo", "vc-id-123")); + public void shouldThrowDuplicateCredentialExceptionForMosipIssuer() { + when(walletCredentialsRepository.existsByIssuerIdAndCredentialTypeAndWalletId("Mosip", credentialType, walletId)).thenReturn(true); - List actualCredentialsList = walletCredentialService.fetchAllCredentialsForWallet(walletId, base64Key, "en"); + CredentialProcessingException exception = assertThrows(CredentialProcessingException.class, () -> + walletCredentialService.fetchAndStoreCredential("Mosip", credentialType, tokenResponse, credentialValidity, locale, walletId, base64Key)); - assertEquals(1, actualCredentialsList.size()); - assertEquals(expectedCredentialsList, actualCredentialsList); + assertEquals(CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), exception.getErrorCode()); + assertEquals("credential_download_error --> Duplicate credential for issuer and type", exception.getMessage()); + verify(walletCredentialsRepository).existsByIssuerIdAndCredentialTypeAndWalletId("Mosip", credentialType, walletId); + verifyNoInteractions(credentialProcessor); } @Test - public void shouldIncludeEmptyCredentialDetailsInResponseIfAnyErrorOccurredWhileFetchingDetails() throws Exception { - VerifiableCredential vc1 = getVerifiableCredential("vc-id-123", walletId, "encryptedCredential", issuerId, credentialType); - VerifiableCredential vc2 = getVerifiableCredential("vc-id-124", walletId, "encryptedCredential", "issuer234", credentialType); - when(walletCredentialsRepository.findByWalletId(walletId)).thenReturn(List.of(vc1, vc2)); - when(issuersService.getIssuerDetails(issuerId)).thenReturn(getMockIssuerDTO()); - when(issuersService.getIssuerDetails("issuer234")).thenThrow(new ApiNotAccessibleException()); - when(issuersService.getIssuerConfiguration(issuerId)).thenReturn(issuerConfig); - List expectedCredentialsList = List.of(getVerifiableCredentialResponseDTO("issuer name", "https://issuer_logo_url", credentialType, "https://logo", "vc-id-123"), getVerifiableCredentialResponseDTO("", "", "", "", "vc-id-124")); - - List actualCredentialList = walletCredentialService.fetchAllCredentialsForWallet(walletId, base64Key, "en"); - - assertEquals(2, actualCredentialList.size()); - assertEquals(expectedCredentialsList, actualCredentialList); - } + public void shouldFetchAndStoreNonMosipIssuerCredential() throws Exception { + VerifiableCredentialResponseDTO expectedResponse = new VerifiableCredentialResponseDTO(); + expectedResponse.setCredentialId(credentialId); - @Test - public void shouldFetchVerifiableCredentialSuccessfully() throws Exception { - String credentialId = "cred123"; - String base64Key = Base64.getEncoder().encodeToString("dummykey12345678".getBytes()); - String locale = "en"; - String issuerId = "issuer123"; - String credentialType = "CredentialType1"; - String dataShareUrl = "https://datashare.url"; - String credentialValidity = "1"; - String encryptedCredential = "encryptedCredential"; - String decryptedCredential = "{\"credential\":\"test\"}"; - byte[] pdfBytes = "PDF Content".getBytes(); // Dummy PDF content - ByteArrayInputStream inputStream = new ByteArrayInputStream(pdfBytes); + when(credentialProcessor.processAndStoreCredential(eq(tokenResponse), eq(credentialType), eq(walletId), eq(base64Key), eq(credentialValidity), eq(issuerId), eq(locale))) + .thenReturn(expectedResponse); - VerifiableCredential verifiableCredential = getVerifiableCredential(credentialId, walletId, encryptedCredential, issuerId, credentialType); - verifiableCredential.getCredentialMetadata().setDataShareUrl(dataShareUrl); - verifiableCredential.getCredentialMetadata().setCredentialValidity(credentialValidity); + VerifiableCredentialResponseDTO actualResponse = walletCredentialService.fetchAndStoreCredential( + issuerId, credentialType, tokenResponse, credentialValidity, locale, walletId, base64Key); - VCCredentialResponse vcResponse = new VCCredentialResponse(); - CredentialIssuerConfiguration issuerConfig = getCredentialIssuerConfigurationResponseDto(issuerId, credentialType, List.of()); + assertEquals(expectedResponse, actualResponse); + verify(credentialProcessor).processAndStoreCredential(eq(tokenResponse), eq(credentialType), eq(walletId), eq(base64Key), eq(credentialValidity), eq(issuerId), eq(locale)); + } - // Create proper display objects - CredentialSupportedDisplayResponse display = new CredentialSupportedDisplayResponse(); - display.setName(credentialType); - display.setLocale(locale); + @Test + public void shouldThrowExternalServiceUnavailableException() throws Exception { + String mosipIssuerId = "Mosip"; // Use Mosip to trigger repository check - CredentialsSupportedResponse credentialsSupportedResponse = new CredentialsSupportedResponse(); - credentialsSupportedResponse.setDisplay(List.of(display)); + when(walletCredentialsRepository.existsByIssuerIdAndCredentialTypeAndWalletId(mosipIssuerId, credentialType, walletId)).thenReturn(false); + when(credentialProcessor.processAndStoreCredential(any(), anyString(), anyString(), anyString(), anyString(), anyString(), anyString())) + .thenThrow(new ExternalServiceUnavailableException("SERVICE_UNAVAILABLE", "Service unavailable")); - // Create proper issuer well-known response - CredentialIssuerWellKnownResponse wellKnownResponse = new CredentialIssuerWellKnownResponse(); - Map configs = new HashMap<>(); - configs.put(credentialType, credentialsSupportedResponse); - wellKnownResponse.setCredentialConfigurationsSupported(configs); + ExternalServiceUnavailableException exception = assertThrows(ExternalServiceUnavailableException.class, () -> + walletCredentialService.fetchAndStoreCredential(mosipIssuerId, credentialType, tokenResponse, credentialValidity, locale, walletId, base64Key)); - when(walletCredentialsRepository.findByIdAndWalletId(credentialId, walletId)).thenReturn(Optional.of(verifiableCredential)); - when(encryptionDecryptionUtil.decryptCredential(encryptedCredential, base64Key)).thenReturn(decryptedCredential); - when(issuersService.getIssuerDetails(issuerId)).thenReturn(getMockIssuerDTO()); - when(issuersService.getIssuerConfiguration(issuerId)).thenReturn(issuerConfig); - when(objectMapper.readValue(decryptedCredential, VCCredentialResponse.class)).thenReturn(vcResponse); - when(credentialUtilService.generatePdfForVerifiableCredentials( - anyString(), // credentialType - any(VCCredentialResponse.class), // vcResponse - any(IssuerDTO.class), // issuerDTO - any(CredentialsSupportedResponse.class), // credentialsSupportedResponse - anyString(), // dataShareUrl - anyString(), // credentialValidity - anyString() // locale - )).thenReturn(inputStream); - - WalletCredentialResponseDTO response = walletCredentialService.fetchVerifiableCredential(walletId, credentialId, base64Key, locale); - - assertNotNull(response); - assertNotNull(response.getFileContentStream()); - assertEquals(credentialType, response.getFileName()); + assertEquals("SERVICE_UNAVAILABLE", exception.getErrorCode()); + assertEquals("SERVICE_UNAVAILABLE --> Service unavailable", exception.getMessage()); + verify(walletCredentialsRepository).existsByIssuerIdAndCredentialTypeAndWalletId(mosipIssuerId, credentialType, walletId); + verify(credentialProcessor).processAndStoreCredential(eq(tokenResponse), eq(credentialType), eq(walletId), eq(base64Key), eq(credentialValidity), eq(mosipIssuerId), eq(locale)); } @Test - public void shouldThrowExceptionWhenCredentialNotFound() { - String credentialId = "nonExistentCredential"; - String base64Key = Base64.getEncoder().encodeToString("dummykey12345678".getBytes()); - String locale = "en"; + public void shouldFetchAllCredentialsForWalletSuccessfully() throws Exception { + VerifiableCredentialResponseDTO responseDTO = new VerifiableCredentialResponseDTO(); + responseDTO.setCredentialId(credentialId); - when(walletCredentialsRepository.findById(credentialId)).thenReturn(Optional.empty()); + when(walletCredentialsRepository.findByWalletId(walletId)).thenReturn(List.of(verifiableCredential)); + when(issuersService.getIssuerConfig(issuerId, credentialType)).thenReturn(issuerConfig); - RuntimeException exception = assertThrows(RuntimeException.class, () -> - walletCredentialService.fetchVerifiableCredential(walletId, credentialId, base64Key, locale) - ); + try (MockedStatic factoryMock = mockStatic(WalletCredentialResponseDTOFactory.class)) { + factoryMock.when(() -> WalletCredentialResponseDTOFactory.buildCredentialResponseDTO(issuerConfig, locale, credentialId)) + .thenReturn(responseDTO); - assertEquals("resource_not_found --> The requested resource doesn’t exist.", exception.getMessage()); + List actualCredentials = walletCredentialService.fetchAllCredentialsForWallet(walletId, base64Key, locale); + + assertEquals(1, actualCredentials.size()); + assertEquals(responseDTO, actualCredentials.get(0)); + verify(walletCredentialsRepository).findByWalletId(walletId); + verify(issuersService).getIssuerConfig(issuerId, credentialType); + factoryMock.verify(() -> WalletCredentialResponseDTOFactory.buildCredentialResponseDTO(issuerConfig, locale, credentialId)); + } } @Test - public void shouldThrowExceptionWhenDecryptionFails() throws Exception { - String credentialId = "cred123"; - String base64Key = Base64.getEncoder().encodeToString("dummykey12345678".getBytes()); - String locale = "en"; - String encryptedCredential = "encryptedCredential"; + public void shouldHandleIssuerConfigFetchFailure() throws Exception { + VerifiableCredentialResponseDTO responseDTO = new VerifiableCredentialResponseDTO(); + responseDTO.setCredentialId(credentialId); - VerifiableCredential verifiableCredential = getVerifiableCredential(credentialId, walletId, encryptedCredential, issuerId, credentialType); + when(walletCredentialsRepository.findByWalletId(walletId)).thenReturn(List.of(verifiableCredential)); + when(issuersService.getIssuerConfig(issuerId, credentialType)).thenThrow(new ApiNotAccessibleException("API error")); - when(walletCredentialsRepository.findByIdAndWalletId(credentialId, walletId)).thenReturn(Optional.of(verifiableCredential)); - when(encryptionDecryptionUtil.decryptCredential(encryptedCredential, base64Key)) - .thenThrow(new RuntimeException("Decryption failed")); + try (MockedStatic factoryMock = mockStatic(WalletCredentialResponseDTOFactory.class)) { + factoryMock.when(() -> WalletCredentialResponseDTOFactory.buildCredentialResponseDTO(null, locale, credentialId)) + .thenReturn(responseDTO); - RuntimeException exception = assertThrows(RuntimeException.class, () -> - walletCredentialService.fetchVerifiableCredential(walletId, credentialId, base64Key, locale) - ); + List actualCredentials = walletCredentialService.fetchAllCredentialsForWallet(walletId, base64Key, locale); - assertEquals("Decryption failed", exception.getMessage()); + assertEquals(1, actualCredentials.size()); + assertEquals(responseDTO, actualCredentials.get(0)); + verify(walletCredentialsRepository).findByWalletId(walletId); + verify(issuersService).getIssuerConfig(issuerId, credentialType); + factoryMock.verify(() -> WalletCredentialResponseDTOFactory.buildCredentialResponseDTO(null, locale, credentialId)); + } } @Test - public void shouldThrowExceptionWhenIssuerConfigurationRetrievalFails() throws Exception { - String credentialId = "cred123"; - String base64Key = Base64.getEncoder().encodeToString("dummykey12345678".getBytes()); - String locale = "en"; - String encryptedCredential = "encryptedCredential"; + public void shouldFetchVerifiableCredentialSuccessfully() throws Exception { String decryptedCredential = "{\"credential\":\"test\"}"; - - VerifiableCredential verifiableCredential = getVerifiableCredential(credentialId, walletId, encryptedCredential, issuerId, credentialType); + WalletCredentialResponseDTO expectedResponse = new WalletCredentialResponseDTO(); + expectedResponse.setFileName(credentialType); + expectedResponse.setFileContentStream(new InputStreamResource(new ByteArrayInputStream("PDF Content".getBytes()))); when(walletCredentialsRepository.findByIdAndWalletId(credentialId, walletId)).thenReturn(Optional.of(verifiableCredential)); - when(encryptionDecryptionUtil.decryptCredential(encryptedCredential, base64Key)).thenReturn(decryptedCredential); - when(issuersService.getIssuerDetails(issuerId)).thenThrow(new ApiNotAccessibleException()); + when(encryptionDecryptionUtil.decryptCredential("encryptedCredential", base64Key)).thenReturn(decryptedCredential); + when(credentialUtilService.generateCredentialResponse(eq(decryptedCredential), any(), eq(locale))).thenReturn(expectedResponse); - ExternalServiceUnavailableException exception = assertThrows(ExternalServiceUnavailableException.class, () -> - walletCredentialService.fetchVerifiableCredential(walletId, credentialId, base64Key, locale) - ); + WalletCredentialResponseDTO actualResponse = walletCredentialService.fetchVerifiableCredential(walletId, credentialId, base64Key, locale); - assertNotNull(exception); + assertNotNull(actualResponse); + assertEquals(expectedResponse, actualResponse); + assertEquals(credentialType, actualResponse.getFileName()); + verify(walletCredentialsRepository).findByIdAndWalletId(credentialId, walletId); + verify(encryptionDecryptionUtil).decryptCredential("encryptedCredential", base64Key); + verify(credentialUtilService).generateCredentialResponse(eq(decryptedCredential), any(), eq(locale)); } @Test - public void shouldThrowExceptionWhenPdfGenerationFails() throws Exception { - String credentialId = "cred123"; - String base64Key = Base64.getEncoder().encodeToString("dummykey12345678".getBytes()); - String locale = "en"; - String encryptedCredential = "encryptedCredential"; - String decryptedCredential = "{\"credential\":\"test\"}"; - String issuerId = "issuer123"; - String credentialType = "CredentialType1"; - String dataShareUrl = "https://datashare.url"; - String credentialValidity = "1"; + public void shouldThrowCredentialNotFoundException() { + when(walletCredentialsRepository.findByIdAndWalletId(credentialId, walletId)).thenReturn(Optional.empty()); - VerifiableCredential verifiableCredential = getVerifiableCredential(credentialId, walletId, encryptedCredential, issuerId, credentialType); - verifiableCredential.getCredentialMetadata().setDataShareUrl(dataShareUrl); - verifiableCredential.getCredentialMetadata().setCredentialValidity(credentialValidity); + CredentialNotFoundException exception = assertThrows(CredentialNotFoundException.class, () -> + walletCredentialService.fetchVerifiableCredential(walletId, credentialId, base64Key, locale)); - VCCredentialResponse vcResponse = new VCCredentialResponse(); - CredentialIssuerConfiguration issuerConfig = getCredentialIssuerConfigurationResponseDto(issuerId, credentialType, List.of()); + assertEquals(RESOURCE_NOT_FOUND.getErrorCode(), exception.getErrorCode()); + assertEquals(RESOURCE_NOT_FOUND.getErrorCode() +" --> "+RESOURCE_NOT_FOUND.getErrorMessage(), exception.getMessage()); + verify(walletCredentialsRepository).findByIdAndWalletId(credentialId, walletId); + verifyNoInteractions(encryptionDecryptionUtil, credentialUtilService); + } + @Test + public void shouldThrowCredentialProcessingExceptionOnDecryptionFailure() throws Exception { when(walletCredentialsRepository.findByIdAndWalletId(credentialId, walletId)).thenReturn(Optional.of(verifiableCredential)); - when(encryptionDecryptionUtil.decryptCredential(encryptedCredential, base64Key)).thenReturn(decryptedCredential); - when(issuersService.getIssuerDetails(issuerId)).thenReturn(getMockIssuerDTO()); - when(issuersService.getIssuerConfiguration(issuerId)).thenReturn(issuerConfig); - when(objectMapper.readValue(decryptedCredential, VCCredentialResponse.class)).thenReturn(vcResponse); - when(credentialUtilService.generatePdfForVerifiableCredentials( - anyString(), // credentialType - any(VCCredentialResponse.class), // vcCredentialResponse - any(IssuerDTO.class), // issuerDTO - any(CredentialsSupportedResponse.class), // credentialsSupportedResponse - anyString(), // dataShareUrl - anyString(), // credentialValidity - anyString() // locale - )).thenThrow(new RuntimeException("PDF generation failed")); - - RuntimeException exception = assertThrows(RuntimeException.class, () -> - walletCredentialService.fetchVerifiableCredential(walletId, credentialId, base64Key, locale) - ); - - assertEquals("server_unavailable --> The server is not reachable right now.", exception.getMessage()); + when(encryptionDecryptionUtil.decryptCredential("encryptedCredential", base64Key)) + .thenThrow(new DecryptionException("DECRYPTION_ERROR", "Decryption failed")); + + CredentialProcessingException exception = assertThrows(CredentialProcessingException.class, () -> + walletCredentialService.fetchVerifiableCredential(walletId, credentialId, base64Key, locale)); + + assertEquals(CREDENTIAL_FETCH_EXCEPTION.getErrorCode(), exception.getErrorCode()); + verify(walletCredentialsRepository).findByIdAndWalletId(credentialId, walletId); + verify(encryptionDecryptionUtil).decryptCredential("encryptedCredential", base64Key); + verifyNoInteractions(credentialUtilService); } -} +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java index d0258c484..02a632ee7 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java @@ -2,9 +2,11 @@ import io.mosip.mimoto.dbentity.Wallet; import io.mosip.mimoto.dto.WalletResponseDto; +import io.mosip.mimoto.exception.InvalidRequestException; import io.mosip.mimoto.repository.WalletRepository; import io.mosip.mimoto.service.impl.WalletServiceImpl; import io.mosip.mimoto.util.WalletUtil; +import io.mosip.mimoto.util.WalletValidator; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -18,7 +20,7 @@ import java.util.UUID; import static org.junit.Assert.*; -import static org.mockito.Mockito.when; +import static org.mockito.Mockito.*; @RunWith(MockitoJUnitRunner.class) public class WalletServiceTest { @@ -29,6 +31,9 @@ public class WalletServiceTest { @Mock private WalletUtil walletHelper; + @Mock + private WalletValidator walletValidator; + @InjectMocks private WalletServiceImpl walletService; @@ -63,25 +68,33 @@ public void shouldCreateWalletSuccessfully() throws Exception { String result = walletService.createWallet(userId, name, pin); assertEquals(newWalletId, result); + verify(walletValidator).validateWalletRequest(userId, name, pin); + verify(walletHelper).createWallet(userId, name, pin); } @Test - public void shouldDecryptWalletKeySuccessfully() { + public void shouldDecryptWalletKeySuccessfully() throws Exception { when(walletRepository.findByUserIdAndId(userId, walletId)).thenReturn(Optional.of(wallet)); when(walletHelper.decryptWalletKey(encryptedWalletKey, pin)).thenReturn(decryptedWalletKey); String result = walletService.getWalletKey(userId, walletId, pin); assertEquals(decryptedWalletKey, result); + verify(walletRepository).findByUserIdAndId(userId, walletId); + verify(walletHelper).decryptWalletKey(encryptedWalletKey, pin); } @Test - public void shouldReturnNullIfWalletNotFoundForGivenUserIdAndWalletId() { + public void shouldThrowInvalidRequestExceptionIfWalletNotFoundForGivenUserIdAndWalletId() { when(walletRepository.findByUserIdAndId(userId, walletId)).thenReturn(Optional.empty()); - String result = walletService.getWalletKey(userId, walletId, pin); + InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> + walletService.getWalletKey(userId, walletId, pin)); - assertNull(result); + assertEquals("invalid_request", exception.getErrorCode()); + assertEquals("invalid_request --> Wallet not found", exception.getMessage()); + verify(walletRepository).findByUserIdAndId(userId, walletId); + verifyNoInteractions(walletHelper); } @Test @@ -95,6 +108,7 @@ public void shouldReturnListOfWalletResponseDtosForGivenUserId() { for (int i = 0; i < walletIds.size(); i++) { assertEquals(walletIds.get(i), result.get(i).getWalletId()); } + verify(walletRepository).findWalletIdByUserId(userId); } @Test @@ -104,12 +118,18 @@ public void shouldReturnEmptyListIfNoWalletsFoundForGivenUserId() { List result = walletService.getWallets(userId); assertTrue(result.isEmpty()); + verify(walletRepository).findWalletIdByUserId(userId); } - @Test(expected = Exception.class) - public void shouldThrowExceptionIfAnyErrorOccurredWhileCreatingWallet() throws Exception { - when(walletHelper.createWallet(userId, name, pin)).thenThrow(new Exception("Test Exception")); + @Test + public void shouldThrowInvalidRequestExceptionIfAnyErrorOccurredWhileCreatingWallet() throws Exception { + when(walletHelper.createWallet(userId, name, pin)).thenThrow(new InvalidRequestException("INVALID_REQUEST", "Test Exception")); + + InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> + walletService.createWallet(userId, name, pin)); - walletService.createWallet(userId, name, pin); + assertEquals("INVALID_REQUEST", exception.getErrorCode()); + assertEquals("INVALID_REQUEST --> Test Exception", exception.getMessage()); + verify(walletHelper).createWallet(userId, name, pin); } } \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java b/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java index 02d04cec1..f8c85c0f6 100644 --- a/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java +++ b/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java @@ -1,6 +1,7 @@ package io.mosip.mimoto.util; import io.mosip.mimoto.dbentity.Wallet; +import io.mosip.mimoto.exception.DecryptionException; import io.mosip.mimoto.repository.WalletRepository; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.BeforeEach; @@ -59,7 +60,7 @@ void setUp() throws Exception { } @Test - void shouldDecryptWalletKeySuccessfully() { + void shouldDecryptWalletKeySuccessfully() throws DecryptionException { when(encryptionDecryptionUtil.decryptWithPin(encryptedWalletKey, pin)).thenReturn(decryptedWalletKey); String decrypted = walletUtil.decryptWalletKey(encryptedWalletKey, pin); diff --git a/src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java b/src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java index 7135ca9f8..e007005bd 100644 --- a/src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java +++ b/src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java @@ -1,6 +1,7 @@ package io.mosip.mimoto.util; import io.mosip.mimoto.dto.WalletRequestDto; +import io.mosip.mimoto.exception.InvalidRequestException; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -22,50 +23,34 @@ public class WalletValidatorTest { @Autowired private WalletValidator walletValidator; - @Mock - private WalletRequestDto walletRequestDto; - - @BeforeEach - void setUp() { - when(walletRequestDto.getWalletPin()).thenReturn("1234"); - when(walletRequestDto.getWalletName()).thenReturn("My Wallet"); - } - @Test void testValidateWalletRequest_validData() { - walletValidator.validateWalletRequest(walletRequestDto); + walletValidator.validateWalletRequest("user1", "wallet1", "123456"); } @Test void testValidatePin_invalidPin() { - when(walletRequestDto.getWalletPin()).thenReturn("12"); - IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> { - walletValidator.validateWalletRequest(walletRequestDto); + InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> { + walletValidator.validateWalletRequest("user1", "My Wallet", "12"); }); - assertEquals("Pin should be numeric with 4 or 6 digits.", exception.getMessage()); + assertEquals("invalid_request --> PIN must be numeric with 4 or 6 digits", exception.getMessage()); } @Test void testValidateWalletName_invalidName() { - // Ensure valid pin for wallet name test - when(walletRequestDto.getWalletPin()).thenReturn("1234"); - when(walletRequestDto.getWalletName()).thenReturn("My Wallet!@"); - IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> { - walletValidator.validateWalletRequest(walletRequestDto); + InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> { + walletValidator.validateWalletRequest("user1", "My Wallet!@", "123456"); }); - assertEquals("Wallet name should be alphanumeric with spaces and a few allowed special characters.", exception.getMessage()); + assertEquals("invalid_request --> Wallet name must be alphanumeric with allowed special characters", exception.getMessage()); } @Test void testValidateWalletName_validName() { - // Ensure valid pin for wallet name test - when(walletRequestDto.getWalletPin()).thenReturn("123456"); - when(walletRequestDto.getWalletName()).thenReturn("Valid Wallet 123"); - walletValidator.validateWalletRequest(walletRequestDto); + walletValidator.validateWalletRequest("user1", "wallet1", "123456"); } } From 69a7e22df3ab6391355dd31ca73671aab242d593 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 28 Apr 2025 14:33:10 +0530 Subject: [PATCH 561/860] injiweb-1528 added test cases Signed-off-by: Gurpreet41082 --- .../WalletCredentialsController.java | 42 +- .../CredentialNotFoundException.java | 2 +- .../mimoto/util/GlobalExceptionHandler.java | 17 + .../controller/TokenAuthControllerTest.java | 139 +++++ .../WalletCredentialsControllerTest.java | 527 +++++++++--------- 5 files changed, 437 insertions(+), 290 deletions(-) create mode 100644 src/test/java/io/mosip/mimoto/controller/TokenAuthControllerTest.java diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index 8188547cf..4d7adba7b 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -65,7 +65,6 @@ public WalletCredentialsController(WalletCredentialService walletCredentialServi * @param httpSession The HTTP session containing wallet key and ID. * @return The stored Verifiable Credential details. * @throws InvalidRequestException If input parameters or session are invalid. - * @throws CredentialProcessingException If credential processing fails. */ @Operation(summary = "Download a Verifiable Credential", description = "This API allows downloading a Verifiable Credential by providing the wallet ID and query parameters such as issuer, credential type, storage expiry, and locale. The user's session is authenticated, and the credential is fetched and stored in the wallet. If successful, the Verifiable Credential details are returned; otherwise, an appropriate error response is provided.", operationId = "downloadCredential", security = @SecurityRequirement(name = "SessionAuth"), parameters = { @Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet", schema = @Schema(type = "string")), @@ -82,7 +81,7 @@ public WalletCredentialsController(WalletCredentialService walletCredentialServi public ResponseEntity downloadCredential( @PathVariable("walletId") @NotBlank(message = "Wallet ID cannot be blank") String walletId, @RequestParam Map params, - HttpSession httpSession) throws InvalidRequestException, CredentialProcessingException { + HttpSession httpSession) throws InvalidRequestException { params.putIfAbsent("vcStorageExpiryLimitInTimes", "-1"); params.putIfAbsent("locale", "en"); @@ -126,6 +125,10 @@ public ResponseEntity downloadCredential( } catch (ExternalServiceUnavailableException e) { return Utilities.getErrorResponseEntityWithoutWrapper( e, e.getErrorCode(), HttpStatus.SERVICE_UNAVAILABLE, MediaType.APPLICATION_JSON); + } catch (CredentialProcessingException e) { + log.error("Error processing credential download for walletId: {} ", walletId, e); + return Utilities.getErrorResponseEntityWithoutWrapper( + e, e.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); } return ResponseEntity.status(HttpStatus.OK).body(credentialResponseDTO); } @@ -138,7 +141,6 @@ public ResponseEntity downloadCredential( * @param httpSession The HTTP session containing wallet key and ID. * @return List of Verifiable Credential details. * @throws InvalidRequestException If session or wallet ID is invalid. - * @throws CredentialProcessingException If fetching credentials fails. */ @Operation(summary = "Fetch all credentials for a given wallet", description = "This API retrieves all credentials associated with the specified wallet, identified by its unique wallet ID. The credentials are returned based on the provided locale. The user's session is authenticated to ensure access to the wallet. If successful, a list of Verifiable Credentials is returned; otherwise, an appropriate error response is returned.", operationId = "fetchAllCredentialsForGivenWallet", security = @SecurityRequirement(name = "SessionAuth"), parameters = { @Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet", schema = @Schema(type = "string")), @@ -151,7 +153,7 @@ public ResponseEntity downloadCredential( public ResponseEntity> fetchAllCredentialsForGivenWallet( @PathVariable("walletId") @NotBlank(message = "Wallet ID cannot be blank") String walletId, @RequestParam(value = "locale", defaultValue = "en") @Pattern(regexp = "^[a-z]{2}$", message = "Locale must be a 2-letter code") String locale, - HttpSession httpSession) throws InvalidRequestException, CredentialProcessingException { + HttpSession httpSession) throws InvalidRequestException { String storedWalletId = (String) httpSession.getAttribute(SessionKeys.WALLET_ID); if (!walletId.equals(storedWalletId)) { log.error("Wallet ID mismatch: provided {}, stored {}", walletId, storedWalletId); @@ -164,9 +166,16 @@ public ResponseEntity> fetchAllCredentials } log.info("Fetching all credentials for walletId: {}", walletId); - List credentials = walletCredentialService.fetchAllCredentialsForWallet( + try { + List credentials = walletCredentialService.fetchAllCredentialsForWallet( walletId, base64EncodedWalletKey, locale); - return ResponseEntity.status(HttpStatus.OK).body(credentials); + return ResponseEntity.status(HttpStatus.OK).body(credentials); + } catch (CredentialProcessingException e) { + log.error("Error processing credentials for walletId: {} ", walletId, e); + return Utilities.getErrorResponseEntityWithoutWrapper( + e, e.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); + } + } /** @@ -179,8 +188,6 @@ public ResponseEntity> fetchAllCredentials * @param httpSession The HTTP session containing wallet key and ID. * @return The Verifiable Credential as a PDF stream. * @throws InvalidRequestException If session or parameters are invalid. - * @throws CredentialNotFoundException If the credential is not found. - * @throws CredentialProcessingException If processing fails. */ @Operation(summary = "Fetch a specific Verifiable Credential", description = "This API retrieves a specific Verifiable Credential from the given wallet, identified by wallet and credential IDs. The locale parameter is used for localization, and the action parameter determines whether the credential is displayed inline or downloaded as a PDF. The user's session is authenticated to ensure access. If successful, the credential is returned as a PDF file; otherwise, an appropriate error response is returned.", operationId = "getVerifiableCredential", security = @SecurityRequirement(name = "SessionAuth"), parameters = { @Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet", schema = @Schema(type = "string")), @@ -198,7 +205,7 @@ public ResponseEntity getVerifiableCredential( @PathVariable("credentialId") @NotBlank(message = "Credential ID cannot be blank") String credentialId, @RequestParam(value = "locale", defaultValue = "en") @Pattern(regexp = "^[a-z]{2}$", message = "Locale must be a 2-letter code") String locale, @RequestParam(value = "action", defaultValue = "inline") @Pattern(regexp = "^(inline|download)$", message = "Action must be 'inline' or 'download'") String action, - HttpSession httpSession) throws InvalidRequestException, CredentialNotFoundException, CredentialProcessingException { + HttpSession httpSession) throws InvalidRequestException { String storedWalletId = (String) httpSession.getAttribute(SessionKeys.WALLET_ID); if (!walletId.equals(storedWalletId)) { log.error("Wallet ID mismatch: provided {}, stored {}", walletId, storedWalletId); @@ -211,10 +218,21 @@ public ResponseEntity getVerifiableCredential( } log.info("Fetching credentialId: {} from walletId: {}", credentialId, walletId); - WalletCredentialResponseDTO walletCredentialResponseDTO = walletCredentialService.fetchVerifiableCredential( - walletId, credentialId, base64EncodedWalletKey, locale); + WalletCredentialResponseDTO walletCredentialResponseDTO = null; + try { + walletCredentialResponseDTO = walletCredentialService.fetchVerifiableCredential( + walletId, credentialId, base64EncodedWalletKey, locale); + } catch (CredentialNotFoundException e) { + log.error("Credential not found for walletId: {} and credentialId: {}", walletId, credentialId, e); + return Utilities.getErrorResponseEntityWithoutWrapper( + e, e.getErrorCode(), HttpStatus.NOT_FOUND, MediaType.APPLICATION_JSON); + } catch (CredentialProcessingException e) { + log.error("Error processing credential for walletId: {} and credentialId: {}", walletId, credentialId, e); + return Utilities.getErrorResponseEntityWithoutWrapper( + e, e.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); + } - String dispositionType = "download".equalsIgnoreCase(action) ? "attachment" : "inline"; + String dispositionType = "download".equalsIgnoreCase(action) ? "attachment" : "inline"; String contentDisposition = String.format("%s; filename=\"%s\"", dispositionType, walletCredentialResponseDTO.getFileName()); return ResponseEntity.ok() diff --git a/src/main/java/io/mosip/mimoto/exception/CredentialNotFoundException.java b/src/main/java/io/mosip/mimoto/exception/CredentialNotFoundException.java index 64df89eea..828a07cd1 100644 --- a/src/main/java/io/mosip/mimoto/exception/CredentialNotFoundException.java +++ b/src/main/java/io/mosip/mimoto/exception/CredentialNotFoundException.java @@ -2,7 +2,7 @@ import java.io.Serial; -public class CredentialNotFoundException extends BaseUncheckedException { +public class CredentialNotFoundException extends BaseCheckedException { @Serial private static final long serialVersionUID = 1L; diff --git a/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java b/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java index 9d9b400e1..7e8c16394 100644 --- a/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java +++ b/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java @@ -13,6 +13,8 @@ import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.method.annotation.HandlerMethodValidationException; +import org.springframework.web.servlet.NoHandlerFoundException; @ControllerAdvice @ResponseBody @@ -68,4 +70,19 @@ public ErrorDTO handleHttpMessageNotReadableException(HttpMessageNotReadableExce return new ErrorDTO(errorCode, errorMessage); } + @ExceptionHandler(NoHandlerFoundException.class) + @ResponseStatus(HttpStatus.NOT_FOUND) + public ErrorDTO handleNoHandlerFoundException(NoHandlerFoundException ex) { + log.error("No handler found for request: {} {}", ex.getHttpMethod(), ex.getRequestURL()); + return new ErrorDTO(ErrorConstants.RESOURCE_NOT_FOUND.getErrorCode(), ErrorConstants.RESOURCE_NOT_FOUND.getErrorMessage()); + } + + @ExceptionHandler(HandlerMethodValidationException.class) + @ResponseStatus(HttpStatus.BAD_REQUEST) + public ErrorDTO handleHandlerMethodValidationException(HandlerMethodValidationException ex) { + log.error("Validation error in handler method: {}", ex.getMessage()); + // You might want to extract more detailed information if available in this exception + return new ErrorDTO(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Validation error in request parameters"); + } + } diff --git a/src/test/java/io/mosip/mimoto/controller/TokenAuthControllerTest.java b/src/test/java/io/mosip/mimoto/controller/TokenAuthControllerTest.java new file mode 100644 index 000000000..aa016ea7a --- /dev/null +++ b/src/test/java/io/mosip/mimoto/controller/TokenAuthControllerTest.java @@ -0,0 +1,139 @@ +package io.mosip.mimoto.controller; + +import io.mosip.mimoto.exception.OAuth2AuthenticationException; +import io.mosip.mimoto.service.TokenService; +import io.mosip.mimoto.service.TokenServiceFactory; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; + +import static org.hamcrest.Matchers.is; +import static org.mockito.Mockito.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = {TokenAuthController.class}) +@AutoConfigureMockMvc +public class TokenAuthControllerTest { + + @Autowired + private MockMvc mockMvc; + + @MockBean + private TokenServiceFactory tokenServiceFactory; + + @MockBean + private TokenService tokenService; + + private String provider; + private String idToken; + private String authorizationHeader; + + @Before + public void setUp() { + provider = "google"; + idToken = "dummyIdToken"; + authorizationHeader = "Bearer " + idToken; + } + + @Test + public void shouldReturnSuccessForValidTokenAndProvider() throws Exception { + when(tokenServiceFactory.isSupportedProvider(eq(provider))).thenReturn(true); + when(tokenServiceFactory.getTokenService(eq(provider))).thenReturn(tokenService); + doNothing().when(tokenService).processToken(eq(idToken), eq(provider), any(), any()); + + mockMvc.perform(post("/auth/{provider}/token-login", provider) + .header("Authorization", authorizationHeader) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON) + .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")) + .with(SecurityMockMvcRequestPostProcessors.csrf())) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON)) + .andExpect(jsonPath("$", is("Session created."))); + + verify(tokenServiceFactory).isSupportedProvider(eq(provider)); + verify(tokenServiceFactory).getTokenService(eq(provider)); + verify(tokenService).processToken(eq(idToken), eq(provider), any(), any()); + } + + @Test + public void shouldReturnBadRequestForUnsupportedProvider() throws Exception { + when(tokenServiceFactory.isSupportedProvider(eq(provider))).thenReturn(false); + + mockMvc.perform(post("/auth/{provider}/token-login", provider) + .header("Authorization", authorizationHeader) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON) + .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")) + .with(SecurityMockMvcRequestPostProcessors.csrf())) + .andExpect(status().isBadRequest()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON)) + .andExpect(jsonPath("$", is(String.format("Unsupported provider: %s", provider)))); + + verify(tokenServiceFactory).isSupportedProvider(eq(provider)); + verifyNoMoreInteractions(tokenServiceFactory); + verifyNoInteractions(tokenService); + } + + @Test + public void shouldReturnUnauthorizedForMissingAuthorizationHeader() throws Exception { + when(tokenServiceFactory.isSupportedProvider(eq(provider))).thenReturn(true); + mockMvc.perform(post("/auth/google/token-login", provider) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON) + .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")) + .with(SecurityMockMvcRequestPostProcessors.csrf())) + .andExpect(status().isBadRequest()); + + verifyNoInteractions(tokenServiceFactory, tokenService); + } + + @Test + public void shouldReturnUnauthorizedForInvalidAuthorizationHeader() throws Exception { + when(tokenServiceFactory.isSupportedProvider(eq(provider))).thenReturn(true); + String invalidAuthorizationHeader = "InvalidToken"; + + mockMvc.perform(post("/auth/google/token-login", provider) + .header("Authorization", invalidAuthorizationHeader) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON) + .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")) + .with(SecurityMockMvcRequestPostProcessors.csrf())) + .andExpect(status().isUnauthorized()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON)) + .andExpect(jsonPath("$", is("Bearer ID token required."))); + } + + @Test + public void shouldReturnUnauthorizedForInvalidToken() throws Exception { + when(tokenServiceFactory.isSupportedProvider(eq(provider))).thenReturn(true); + when(tokenServiceFactory.getTokenService(eq(provider))).thenReturn(tokenService); + OAuth2AuthenticationException exception = new OAuth2AuthenticationException("invalid_token", "Invalid token format", HttpStatus.BAD_REQUEST); + doThrow(exception).when(tokenService).processToken(eq(idToken), eq(provider), any(), any()); + + mockMvc.perform(post("/auth/{provider}/token-login", provider) + .header("Authorization", authorizationHeader) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON) + .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")) + .with(SecurityMockMvcRequestPostProcessors.csrf())) + .andExpect(status().isUnauthorized()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON)) + .andExpect(jsonPath("$", is("Invalid or expired ID token: invalid_token --> Invalid token format"))); + + verify(tokenServiceFactory).isSupportedProvider(eq(provider)); + verify(tokenServiceFactory).getTokenService(eq(provider)); + verify(tokenService).processToken(eq(idToken), eq(provider), any(), any()); + } +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java index 451b82958..ee0cceabb 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java @@ -1,359 +1,332 @@ package io.mosip.mimoto.controller; -import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; import io.mosip.mimoto.dto.resident.WalletCredentialResponseDTO; import io.mosip.mimoto.exception.*; import io.mosip.mimoto.service.WalletCredentialService; import io.mosip.mimoto.util.CredentialUtilService; +import io.mosip.mimoto.util.GlobalExceptionHandler; import jakarta.servlet.http.HttpSession; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; -import org.mockito.junit.MockitoJUnitRunner; +import org.mockito.MockitoAnnotations; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.core.io.InputStreamResource; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; import java.io.ByteArrayInputStream; -import java.util.Arrays; -import java.util.HashMap; +import java.util.Collections; import java.util.List; -import java.util.Map; -import static org.junit.Assert.*; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.*; - -@RunWith(MockitoJUnitRunner.class) +import static io.mosip.mimoto.exception.ErrorConstants.CREDENTIAL_FETCH_EXCEPTION; +import static io.mosip.mimoto.exception.ErrorConstants.RESOURCE_NOT_FOUND; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = {WalletCredentialsController.class, GlobalExceptionHandler.class}) +@AutoConfigureMockMvc(addFilters = false) +@EnableWebMvc public class WalletCredentialsControllerTest { @InjectMocks - private WalletCredentialsController walletCredentialsController; + private WalletCredentialsController controller; - @Mock + @MockBean private WalletCredentialService walletCredentialService; - @Mock + @MockBean private CredentialUtilService credentialUtilService; @Mock private HttpSession httpSession; - private static final String WALLET_ID = "wallet123"; - private static final String CREDENTIAL_ID = "cred456"; - private static final String BASE64_ENCODED_WALLET_KEY = "encodedKey"; - private static final String ISSUER_ID = "issuer1"; - private static final String CREDENTIAL_TYPE = "type1"; - private static final String LOCALE = "en"; - private static final String VC_STORAGE_EXPIRY = "-1"; + @Autowired + private MockMvc mockMvc; + + private VerifiableCredentialResponseDTO verifiableCredentialResponseDTO; + private WalletCredentialResponseDTO walletCredentialResponseDTO; + private String walletId = "wallet123"; + private String credentialId = "cred456"; + private String walletKey = "encodedKey"; + private String issuer = "issuer1"; + private String credentialType = "type1"; + private String locale = "en"; + private String vcStorageExpiryLimit = "-1"; @Before - public void setUp() { - when(httpSession.getAttribute(SessionKeys.WALLET_ID)).thenReturn(WALLET_ID); - when(httpSession.getAttribute(SessionKeys.WALLET_KEY)).thenReturn(BASE64_ENCODED_WALLET_KEY); + public void setup() { + MockitoAnnotations.openMocks(this); + verifiableCredentialResponseDTO = VerifiableCredentialResponseDTO.builder() + .issuerName("issuerName123") + .issuerLogo("issuerLogo") + .credentialType("credentialType123") + .credentialTypeLogo("credentialTypeLogo") + .credentialId("credentialId123") + .build(); + + walletCredentialResponseDTO = new WalletCredentialResponseDTO(); + walletCredentialResponseDTO.setFileName("credential.pdf"); + walletCredentialResponseDTO.setFileContentStream(new InputStreamResource(new ByteArrayInputStream("test-pdf".getBytes()))); + + when(httpSession.getAttribute("wallet_id")).thenReturn(walletId); + when(httpSession.getAttribute("wallet_key")).thenReturn(walletKey); } + // Tests for downloadCredential @Test - public void downloadCredentialSuccess() throws Exception { - Map params = new HashMap<>(); - params.put("issuer", ISSUER_ID); - params.put("credential", CREDENTIAL_TYPE); - params.put("locale", LOCALE); - params.put("vcStorageExpiryLimitInTimes", VC_STORAGE_EXPIRY); - - TokenResponseDTO tokenResponse = new TokenResponseDTO(); - VerifiableCredentialResponseDTO responseDTO = new VerifiableCredentialResponseDTO(); - - when(credentialUtilService.getTokenResponse(params, ISSUER_ID)).thenReturn(tokenResponse); - when(walletCredentialService.fetchAndStoreCredential(eq(ISSUER_ID), eq(CREDENTIAL_TYPE), eq(tokenResponse), - eq(VC_STORAGE_EXPIRY), eq(LOCALE), eq(WALLET_ID), eq(BASE64_ENCODED_WALLET_KEY))) - .thenReturn(responseDTO); - - ResponseEntity response = walletCredentialsController - .downloadCredential(WALLET_ID, params, httpSession); - - assertEquals(HttpStatus.OK, response.getStatusCode()); - assertEquals(responseDTO, response.getBody()); - verify(httpSession).getAttribute(SessionKeys.WALLET_ID); - verify(httpSession).getAttribute(SessionKeys.WALLET_KEY); - verify(credentialUtilService).getTokenResponse(params, ISSUER_ID); - verify(walletCredentialService).fetchAndStoreCredential(eq(ISSUER_ID), eq(CREDENTIAL_TYPE), eq(tokenResponse), - eq(VC_STORAGE_EXPIRY), eq(LOCALE), eq(WALLET_ID), eq(BASE64_ENCODED_WALLET_KEY)); + public void shouldDownloadCredentialSuccessfully() throws Exception { + when(credentialUtilService.getTokenResponse(anyMap(), eq(issuer))).thenReturn(new TokenResponseDTO()); + when(walletCredentialService.fetchAndStoreCredential(eq(issuer), eq(credentialType), any(), eq(vcStorageExpiryLimit), eq(locale), eq(walletId), eq(walletKey))) + .thenReturn(verifiableCredentialResponseDTO); + + mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .accept(MediaType.APPLICATION_JSON) + .param("issuer", issuer) + .param("credential", credentialType) + .param("vcStorageExpiryLimitInTimes", vcStorageExpiryLimit) + .param("locale", locale) + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.issuer_name").value("issuerName123")) + .andExpect(jsonPath("$.credential_id").value("credentialId123")); } @Test - public void downloadCredentialInvalidWalletIdThrowsInvalidRequestException() { - when(httpSession.getAttribute(SessionKeys.WALLET_ID)).thenReturn("differentWalletId"); - - Map params = new HashMap<>(); - params.put("issuer", ISSUER_ID); - params.put("credential", CREDENTIAL_TYPE); - - try { - walletCredentialsController.downloadCredential(WALLET_ID, params, httpSession); - fail("Expected InvalidRequestException"); - } catch (InvalidRequestException e) { - assertEquals(ErrorConstants.INVALID_REQUEST.getErrorCode(), e.getErrorCode()); - assertEquals("invalid_request --> Wallet ID mismatch", e.getMessage()); - } - verify(httpSession).getAttribute(SessionKeys.WALLET_ID); - verifyNoMoreInteractions(credentialUtilService, walletCredentialService); + public void shouldThrowInvalidRequestForWalletIdMismatch() throws Exception { + when(httpSession.getAttribute("wallet_id")).thenReturn("differentWalletId"); + + mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) + .accept(MediaType.APPLICATION_JSON) + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .param("issuer", issuer) + .param("credential", credentialType) + .sessionAttr("wallet_id", "differentWalletId") + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errorCode").value("invalid_request")) + .andExpect(jsonPath("$.errorMessage").value("invalid_request --> Wallet ID mismatch")); } @Test - public void downloadCredentialMissingWalletKeyThrowsInvalidRequestException() { - when(httpSession.getAttribute(SessionKeys.WALLET_KEY)).thenReturn(null); - - Map params = new HashMap<>(); - params.put("issuer", ISSUER_ID); - params.put("credential", CREDENTIAL_TYPE); - - try { - walletCredentialsController.downloadCredential(WALLET_ID, params, httpSession); - fail("Expected InvalidRequestException"); - } catch (InvalidRequestException e) { - assertEquals(ErrorConstants.INVALID_REQUEST.getErrorCode(), e.getErrorCode()); - assertEquals("invalid_request --> Wallet key not found in session", e.getMessage()); - } - verify(httpSession).getAttribute(SessionKeys.WALLET_ID); - verify(httpSession).getAttribute(SessionKeys.WALLET_KEY); - verifyNoInteractions(credentialUtilService, walletCredentialService); + public void shouldThrowInvalidRequestForMissingWalletKey() throws Exception { + when(httpSession.getAttribute("wallet_key")).thenReturn(null); + + mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) + .accept(MediaType.APPLICATION_JSON) + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .param("issuer", issuer) + .param("credential", credentialType) + .sessionAttr("wallet_id", walletId)) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errorCode").value("invalid_request")) + .andExpect(jsonPath("$.errorMessage").value("invalid_request --> Wallet key not found in session")); } @Test - public void downloadCredentialMissingIssuerThrowsInvalidRequestException() { - Map params = new HashMap<>(); - params.put("credential", CREDENTIAL_TYPE); - - try { - walletCredentialsController.downloadCredential(WALLET_ID, params, httpSession); - fail("Expected InvalidRequestException"); - } catch (InvalidRequestException e) { - assertEquals(ErrorConstants.INVALID_REQUEST.getErrorCode(), e.getErrorCode()); - assertEquals("invalid_request --> Issuer and credential type are required", e.getMessage()); - } - verify(httpSession).getAttribute(SessionKeys.WALLET_ID); - verify(httpSession).getAttribute(SessionKeys.WALLET_KEY); - verifyNoInteractions(credentialUtilService, walletCredentialService); + public void shouldThrowInvalidRequestForMissingIssuerOrCredential() throws Exception { + mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) + .accept(MediaType.APPLICATION_JSON) + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .param("locale", locale) + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errorCode").value("invalid_request")) + .andExpect(jsonPath("$.errorMessage").value("invalid_request --> Issuer and credential type are required")); } @Test - public void downloadCredentialTokenFetchFailureReturnsServiceUnavailable() throws Exception { - Map params = new HashMap<>(); - params.put("issuer", ISSUER_ID); - params.put("credential", CREDENTIAL_TYPE); - - when(credentialUtilService.getTokenResponse(params, ISSUER_ID)) - .thenThrow(new ApiNotAccessibleException("API Error")); - - ResponseEntity response = walletCredentialsController - .downloadCredential(WALLET_ID, params, httpSession); - - assertEquals(HttpStatus.SERVICE_UNAVAILABLE, response.getStatusCode()); - assertEquals(MediaType.APPLICATION_JSON, response.getHeaders().getContentType()); - verify(httpSession).getAttribute(SessionKeys.WALLET_ID); - verify(httpSession).getAttribute(SessionKeys.WALLET_KEY); - verify(credentialUtilService).getTokenResponse(params, ISSUER_ID); - verifyNoInteractions(walletCredentialService); + public void shouldThrowServiceUnavailableForTokenResponseFailure() throws Exception { + when(credentialUtilService.getTokenResponse(anyMap(), eq(issuer))) + .thenThrow(new ApiNotAccessibleException("API not accessible")); + + mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .param("issuer", issuer) + .param("credential", credentialType) + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isServiceUnavailable()) + .andExpect(jsonPath("$.errorCode").value("credential_download_error")); } @Test - public void fetchAllCredentialsForGivenWalletSuccess() { - List credentials = Arrays.asList(new VerifiableCredentialResponseDTO()); - when(walletCredentialService.fetchAllCredentialsForWallet(WALLET_ID, BASE64_ENCODED_WALLET_KEY, LOCALE)) - .thenReturn(credentials); - - ResponseEntity> response = walletCredentialsController - .fetchAllCredentialsForGivenWallet(WALLET_ID, LOCALE, httpSession); - - assertEquals(HttpStatus.OK, response.getStatusCode()); - assertEquals(credentials, response.getBody()); - verify(httpSession).getAttribute(SessionKeys.WALLET_ID); - verify(httpSession).getAttribute(SessionKeys.WALLET_KEY); - verify(walletCredentialService).fetchAllCredentialsForWallet(WALLET_ID, BASE64_ENCODED_WALLET_KEY, LOCALE); + public void shouldThrowServiceUnavailableForExternalServiceFailure() throws Exception { + when(credentialUtilService.getTokenResponse(anyMap(), eq(issuer))).thenReturn(new TokenResponseDTO()); + when(walletCredentialService.fetchAndStoreCredential(anyString(), anyString(), any(), anyString(), anyString(), anyString(), anyString())) + .thenThrow(new ExternalServiceUnavailableException("Service unavailable", "Service unavailable")); + + mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .param("issuer", issuer) + .param("credential", credentialType) + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isServiceUnavailable()) + .andExpect(jsonPath("$.errorCode").value("Service unavailable")) + .andExpect(jsonPath("$.errorMessage").value("Service unavailable")); } + // Tests for fetchAllCredentialsForGivenWallet @Test - public void fetchAllCredentialsInvalidWalletIdThrowsInvalidRequestException() { - when(httpSession.getAttribute(SessionKeys.WALLET_ID)).thenReturn("differentWalletId"); - - try { - walletCredentialsController.fetchAllCredentialsForGivenWallet(WALLET_ID, LOCALE, httpSession); - fail("Expected InvalidRequestException"); - } catch (InvalidRequestException e) { - assertEquals(ErrorConstants.INVALID_REQUEST.getErrorCode(), e.getErrorCode()); - assertEquals("invalid_request --> Wallet ID mismatch", e.getMessage()); - } - verify(httpSession).getAttribute(SessionKeys.WALLET_ID); - verifyNoInteractions(walletCredentialService); + public void shouldFetchAllCredentialsSuccessfully() throws Exception { + List credentials = Collections.singletonList(verifiableCredentialResponseDTO); + when(walletCredentialService.fetchAllCredentialsForWallet(walletId, walletKey, locale)).thenReturn(credentials); + + mockMvc.perform(get("/wallets/{walletId}/credentials", walletId) + .accept(MediaType.APPLICATION_JSON) + .param("locale", locale) + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$[0].issuer_name").value("issuerName123")); } @Test - public void fetchAllCredentialsMissingWalletKeyThrowsInvalidRequestException() { - when(httpSession.getAttribute(SessionKeys.WALLET_KEY)).thenReturn(null); - - try { - walletCredentialsController.fetchAllCredentialsForGivenWallet(WALLET_ID, LOCALE, httpSession); - fail("Expected InvalidRequestException"); - } catch (InvalidRequestException e) { - assertEquals(ErrorConstants.INVALID_REQUEST.getErrorCode(), e.getErrorCode()); - assertEquals("invalid_request --> Wallet key not found in session", e.getMessage()); - } - verify(httpSession).getAttribute(SessionKeys.WALLET_ID); - verify(httpSession).getAttribute(SessionKeys.WALLET_KEY); - verifyNoInteractions(walletCredentialService); + public void shouldThrowInvalidRequestForInvalidLocale() throws Exception { + mockMvc.perform(get("/wallets/{walletId}/credentials", walletId) + .param("locale", "invalid") + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isBadRequest()); } @Test - public void getVerifiableCredentialSuccessInline() throws Exception { - WalletCredentialResponseDTO responseDTO = new WalletCredentialResponseDTO(); - responseDTO.setFileName("credential.pdf"); - responseDTO.setFileContentStream(new InputStreamResource(new ByteArrayInputStream(new byte[0]))); - - when(walletCredentialService.fetchVerifiableCredential(WALLET_ID, CREDENTIAL_ID, BASE64_ENCODED_WALLET_KEY, LOCALE)) - .thenReturn(responseDTO); - - ResponseEntity response = walletCredentialsController - .getVerifiableCredential(WALLET_ID, CREDENTIAL_ID, LOCALE, "inline", httpSession); - - assertEquals(HttpStatus.OK, response.getStatusCode()); - assertEquals(MediaType.APPLICATION_PDF, response.getHeaders().getContentType()); - assertEquals("inline; filename=\"credential.pdf\"", response.getHeaders().getFirst(HttpHeaders.CONTENT_DISPOSITION)); - assertNotNull(response.getBody()); - verify(httpSession).getAttribute(SessionKeys.WALLET_ID); - verify(httpSession).getAttribute(SessionKeys.WALLET_KEY); - verify(walletCredentialService).fetchVerifiableCredential(WALLET_ID, CREDENTIAL_ID, BASE64_ENCODED_WALLET_KEY, LOCALE); + public void shouldThrowInvalidRequestForMissingWalletKeyInFetchAll() throws Exception { + when(httpSession.getAttribute("wallet_key")).thenReturn(null); + + mockMvc.perform(get("/wallets/{walletId}/credentials", walletId) + .param("locale", locale) + .accept(MediaType.APPLICATION_JSON) + .sessionAttr("wallet_id", walletId)) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errorCode").value("invalid_request")) + .andExpect(jsonPath("$.errorMessage").value("invalid_request --> Wallet key not found in session")); } @Test - public void getVerifiableCredentialSuccessDownload() throws Exception { - WalletCredentialResponseDTO responseDTO = new WalletCredentialResponseDTO(); - responseDTO.setFileName("credential.pdf"); - responseDTO.setFileContentStream(new InputStreamResource(new ByteArrayInputStream(new byte[0]))); - - when(walletCredentialService.fetchVerifiableCredential(WALLET_ID, CREDENTIAL_ID, BASE64_ENCODED_WALLET_KEY, LOCALE)) - .thenReturn(responseDTO); - - ResponseEntity response = walletCredentialsController - .getVerifiableCredential(WALLET_ID, CREDENTIAL_ID, LOCALE, "download", httpSession); - - assertEquals(HttpStatus.OK, response.getStatusCode()); - assertEquals(MediaType.APPLICATION_PDF, response.getHeaders().getContentType()); - assertEquals("attachment; filename=\"credential.pdf\"", response.getHeaders().getFirst(HttpHeaders.CONTENT_DISPOSITION)); - assertNotNull(response.getBody()); - verify(httpSession).getAttribute(SessionKeys.WALLET_ID); - verify(httpSession).getAttribute(SessionKeys.WALLET_KEY); - verify(walletCredentialService).fetchVerifiableCredential(WALLET_ID, CREDENTIAL_ID, BASE64_ENCODED_WALLET_KEY, LOCALE); + public void shouldThrowInvalidRequestForWalletIdMismatchInFetchAll() throws Exception { + when(httpSession.getAttribute("wallet_id")).thenReturn("differentWalletId"); + + mockMvc.perform(get("/wallets/{walletId}/credentials", walletId) + .param("locale", locale) + .accept(MediaType.APPLICATION_JSON) + .sessionAttr("wallet_id", "differentWalletId") + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errorCode").value("invalid_request")) + .andExpect(jsonPath("$.errorMessage").value("invalid_request --> Wallet ID mismatch")); } + // Tests for getVerifiableCredential @Test - public void getVerifiableCredentialInvalidWalletIdThrowsInvalidRequestException() { - when(httpSession.getAttribute(SessionKeys.WALLET_ID)).thenReturn("differentWalletId"); - - try { - walletCredentialsController.getVerifiableCredential(WALLET_ID, CREDENTIAL_ID, LOCALE, "inline", httpSession); - fail("Expected InvalidRequestException"); - } catch (InvalidRequestException e) { - assertEquals(ErrorConstants.INVALID_REQUEST.getErrorCode(), e.getErrorCode()); - assertEquals("invalid_request --> Wallet ID mismatch", e.getMessage()); - } - verify(httpSession).getAttribute(SessionKeys.WALLET_ID); - verifyNoInteractions(walletCredentialService); + public void shouldFetchVerifiableCredentialAsPdfSuccessfullyInline() throws Exception { + when(walletCredentialService.fetchVerifiableCredential(walletId, credentialId, walletKey, locale)) + .thenReturn(walletCredentialResponseDTO); + + mockMvc.perform(get("/wallets/{walletId}/credentials/{credentialId}", walletId, credentialId) + .param("locale", locale) + .param("action", "inline") + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isOk()) + .andExpect(header().string("Content-Disposition", "inline; filename=\"credential.pdf\"")) + .andExpect(content().contentType(MediaType.APPLICATION_PDF)); } @Test - public void getVerifiableCredentialMissingWalletKeyThrowsInvalidRequestException() { - when(httpSession.getAttribute(SessionKeys.WALLET_KEY)).thenReturn(null); - - try { - walletCredentialsController.getVerifiableCredential(WALLET_ID, CREDENTIAL_ID, LOCALE, "inline", httpSession); - fail("Expected InvalidRequestException"); - } catch (InvalidRequestException e) { - assertEquals(ErrorConstants.INVALID_REQUEST.getErrorCode(), e.getErrorCode()); - assertEquals("invalid_request --> Wallet key not found in session", e.getMessage()); - } - verify(httpSession).getAttribute(SessionKeys.WALLET_ID); - verify(httpSession).getAttribute(SessionKeys.WALLET_KEY); - verifyNoInteractions(walletCredentialService); + public void shouldFetchVerifiableCredentialAsDownload() throws Exception { + when(walletCredentialService.fetchVerifiableCredential(walletId, credentialId, walletKey, locale)) + .thenReturn(walletCredentialResponseDTO); + + mockMvc.perform(get("/wallets/{walletId}/credentials/{credentialId}", walletId, credentialId) + .param("locale", locale) + .param("action", "download") + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isOk()) + .andExpect(header().string("Content-Disposition", "attachment; filename=\"credential.pdf\"")) + .andExpect(content().contentType(MediaType.APPLICATION_PDF)); } @Test - public void getVerifiableCredentialNotFoundThrowsCredentialNotFoundException() throws Exception { - when(walletCredentialService.fetchVerifiableCredential(WALLET_ID, CREDENTIAL_ID, BASE64_ENCODED_WALLET_KEY, LOCALE)) - .thenThrow(new CredentialNotFoundException("CREDENTIAL_NOT_FOUND", "Credential not found")); - - try { - walletCredentialsController.getVerifiableCredential(WALLET_ID, CREDENTIAL_ID, LOCALE, "inline", httpSession); - fail("Expected CredentialNotFoundException"); - } catch (CredentialNotFoundException e) { - assertEquals("CREDENTIAL_NOT_FOUND", e.getErrorCode()); - assertEquals("CREDENTIAL_NOT_FOUND --> Credential not found", e.getMessage()); - } - verify(httpSession).getAttribute(SessionKeys.WALLET_ID); - verify(httpSession).getAttribute(SessionKeys.WALLET_KEY); - verify(walletCredentialService).fetchVerifiableCredential(WALLET_ID, CREDENTIAL_ID, BASE64_ENCODED_WALLET_KEY, LOCALE); + public void shouldThrowInvalidRequestForInvalidAction() throws Exception { + mockMvc.perform(get("/wallets/{walletId}/credentials/{credentialId}", walletId, credentialId) + .accept(MediaType.APPLICATION_JSON) + .param("locale", locale) + .param("action", "invalid") + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isBadRequest()); } @Test - public void getVerifiableCredentialDecryptionExceptionThrowsProcessingException() throws Exception { - when(walletCredentialService.fetchVerifiableCredential(WALLET_ID, CREDENTIAL_ID, BASE64_ENCODED_WALLET_KEY, LOCALE)) - .thenThrow(new CredentialProcessingException("DECRYPTION_ERROR", "Decryption failed")); - - try { - walletCredentialsController.getVerifiableCredential(WALLET_ID, CREDENTIAL_ID, LOCALE, "inline", httpSession); - fail("Expected CredentialProcessingException"); - } catch (CredentialProcessingException e) { - assertEquals("DECRYPTION_ERROR", e.getErrorCode()); - assertEquals("DECRYPTION_ERROR --> Decryption failed", e.getMessage()); - } - verify(httpSession).getAttribute(SessionKeys.WALLET_ID); - verify(httpSession).getAttribute(SessionKeys.WALLET_KEY); - verify(walletCredentialService).fetchVerifiableCredential(WALLET_ID, CREDENTIAL_ID, BASE64_ENCODED_WALLET_KEY, LOCALE); + public void shouldThrowCredentialNotFoundException() throws Exception { + when(walletCredentialService.fetchVerifiableCredential(walletId, credentialId, walletKey, locale)) + .thenThrow(new CredentialNotFoundException(RESOURCE_NOT_FOUND.getErrorCode(), RESOURCE_NOT_FOUND.getErrorMessage())); + + mockMvc.perform(get("/wallets/{walletId}/credentials/{credentialId}", walletId, credentialId) + .accept(MediaType.APPLICATION_JSON) + .param("locale", locale) + .param("action", "inline") + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isNotFound()) + .andExpect(jsonPath("$.errorCode").value("resource_not_found")) + .andExpect(jsonPath("$.errorMessage").value("The requested resource doesn’t exist.")); } + + @Test + public void shouldThrowInvalidRequestForMissingCredentialId() throws Exception { + mockMvc.perform(get("/wallets/{walletId}/credentials/{credentialId}", walletId, "")) + .andExpect(status().isNotFound()); + } + @Test - public void getVerifiableCredentialCorruptedEncryptedDataExceptionThrowsProcessingException() throws Exception { - when(walletCredentialService.fetchVerifiableCredential(WALLET_ID, CREDENTIAL_ID, BASE64_ENCODED_WALLET_KEY, LOCALE)) - .thenThrow(new CredentialProcessingException("CORRUPTED_DATA", "Corrupted data")); - - try { - walletCredentialsController.getVerifiableCredential(WALLET_ID, CREDENTIAL_ID, LOCALE, "inline", httpSession); - fail("Expected CredentialProcessingException"); - } catch (CredentialProcessingException e) { - assertEquals("CORRUPTED_DATA", e.getErrorCode()); - assertEquals("CORRUPTED_DATA --> Corrupted data", e.getMessage()); - } - verify(httpSession).getAttribute(SessionKeys.WALLET_ID); - verify(httpSession).getAttribute(SessionKeys.WALLET_KEY); - verify(walletCredentialService).fetchVerifiableCredential(WALLET_ID, CREDENTIAL_ID, BASE64_ENCODED_WALLET_KEY, LOCALE); + public void shouldThrowCredentialProcessingExceptionForDecryptionError() throws Exception { + when(walletCredentialService.fetchVerifiableCredential(walletId, credentialId, walletKey, locale)) + .thenThrow(new CredentialProcessingException(CREDENTIAL_FETCH_EXCEPTION.getErrorCode(), "Decryption failed")); + + mockMvc.perform(get("/wallets/{walletId}/credentials/{credentialId}", walletId, credentialId) + .accept(MediaType.APPLICATION_JSON) + .param("locale", locale) + .param("action", "inline") + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errorCode").value("credential_fetch_error")) + .andExpect(jsonPath("$.errorMessage").value("Decryption failed")); } @Test - public void downloadCredentialExternalServiceUnavailableReturnsServiceUnavailable() throws Exception { - Map params = new HashMap<>(); - params.put("issuer", ISSUER_ID); - params.put("credential", CREDENTIAL_TYPE); - - TokenResponseDTO tokenResponse = new TokenResponseDTO(); - when(credentialUtilService.getTokenResponse(params, ISSUER_ID)).thenReturn(tokenResponse); - when(walletCredentialService.fetchAndStoreCredential(any(), any(), any(), any(), any(), any(), any())) - .thenThrow(new ExternalServiceUnavailableException("SERVICE_UNAVAILABLE", "Service unavailable")); - - ResponseEntity response = walletCredentialsController - .downloadCredential(WALLET_ID, params, httpSession); - - assertEquals(HttpStatus.SERVICE_UNAVAILABLE, response.getStatusCode()); - assertEquals(MediaType.APPLICATION_JSON, response.getHeaders().getContentType()); - verify(httpSession).getAttribute(SessionKeys.WALLET_ID); - verify(httpSession).getAttribute(SessionKeys.WALLET_KEY); - verify(credentialUtilService).getTokenResponse(params, ISSUER_ID); - verify(walletCredentialService).fetchAndStoreCredential(eq(ISSUER_ID), eq(CREDENTIAL_TYPE), eq(tokenResponse), - eq(VC_STORAGE_EXPIRY), eq(LOCALE), eq(WALLET_ID), eq(BASE64_ENCODED_WALLET_KEY)); + public void shouldThrowCredentialProcessingExceptionForCorruptedData() throws Exception { + when(walletCredentialService.fetchVerifiableCredential(walletId, credentialId, walletKey, locale)) + .thenThrow(new CredentialProcessingException(CREDENTIAL_FETCH_EXCEPTION.getErrorCode(), "CORRUPTED_DATA")); + + mockMvc.perform(get("/wallets/{walletId}/credentials/{credentialId}", walletId, credentialId) + .accept(MediaType.APPLICATION_JSON) + .param("locale", locale) + .param("action", "inline") + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errorCode").value(CREDENTIAL_FETCH_EXCEPTION.getErrorCode())) + .andExpect(jsonPath("$.errorMessage").value("CORRUPTED_DATA")); } } \ No newline at end of file From 11d8378d0ff0b8574ad24b8de5cea3ad869c3ba1 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 28 Apr 2025 14:45:32 +0530 Subject: [PATCH 562/860] injiweb-1528 added logout service test cases Signed-off-by: Gurpreet41082 --- .../mimoto/service/LogoutServiceTest.java | 189 ++++++++++++++++++ 1 file changed, 189 insertions(+) create mode 100644 src/test/java/io/mosip/mimoto/service/LogoutServiceTest.java diff --git a/src/test/java/io/mosip/mimoto/service/LogoutServiceTest.java b/src/test/java/io/mosip/mimoto/service/LogoutServiceTest.java new file mode 100644 index 000000000..12c80cada --- /dev/null +++ b/src/test/java/io/mosip/mimoto/service/LogoutServiceTest.java @@ -0,0 +1,189 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.exception.OAuth2AuthenticationException; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpSession; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.http.HttpStatus; +import org.springframework.session.Session; +import org.springframework.session.SessionRepository; + +import java.util.Base64; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +public class LogoutServiceTest { + + @InjectMocks + private LogoutService logoutService; + + @Mock + private HttpServletRequest request; + + @Mock + private HttpServletResponse response; + + @Mock + private SessionRepository sessionRepository; + + @Mock + private HttpSession session; + + @Mock + private Session springSession; + + private String sessionId = "test-session-id"; + private String encodedSessionId; + + @BeforeEach + public void setup() { + encodedSessionId = Base64.getUrlEncoder().encodeToString(sessionId.getBytes()); + } + + @Test + void shouldSuccessfullyHandleLogoutWithValidSessionCookieAndSession() throws OAuth2AuthenticationException { + // Arrange + Cookie sessionCookie = new Cookie("SESSION", encodedSessionId); + when(request.getCookies()).thenReturn(new Cookie[]{sessionCookie}); + when(sessionRepository.findById(sessionId)).thenReturn(springSession); + when(request.getSession(false)).thenReturn(session); + + // Act + logoutService.handleLogout(request, response, sessionRepository); + + // Assert + verify(sessionRepository).findById(sessionId); + verify(sessionRepository).deleteById(sessionId); + verify(session).invalidate(); + verifyNoInteractions(response); + } + + @Test + void shouldThrowOAuth2AuthenticationExceptionForInvalidSessionId() { + // Arrange + Cookie sessionCookie = new Cookie("SESSION", encodedSessionId); + when(request.getCookies()).thenReturn(new Cookie[]{sessionCookie}); + when(sessionRepository.findById(sessionId)).thenReturn(null); + + // Act & Assert + OAuth2AuthenticationException exception = assertThrows(OAuth2AuthenticationException.class, + () -> logoutService.handleLogout(request, response, sessionRepository)); + + assertEquals("NOT_FOUND", exception.getErrorCode()); + assertEquals("NOT_FOUND --> Logout request was sent for an invalid or expired session", exception.getMessage()); + assertEquals(HttpStatus.NOT_FOUND, exception.getStatus()); + verify(sessionRepository).findById(sessionId); + verify(sessionRepository, never()).deleteById(anyString()); + verify(request, never()).getSession(false); + verifyNoInteractions(response, session); + } + + @Test + void shouldHandleLogoutWithNoSessionCookie() throws OAuth2AuthenticationException { + // Arrange + when(request.getCookies()).thenReturn(new Cookie[]{new Cookie("OTHER_COOKIE", "value")}); + when(request.getSession(false)).thenReturn(session); + + // Act + logoutService.handleLogout(request, response, sessionRepository); + + // Assert + verify(sessionRepository, never()).findById(anyString()); + verify(sessionRepository, never()).deleteById(anyString()); + verify(session).invalidate(); + verifyNoInteractions(response); + } + + @Test + void shouldHandleLogoutWithNullCookies() throws OAuth2AuthenticationException { + // Arrange + when(request.getCookies()).thenReturn(null); + when(request.getSession(false)).thenReturn(session); + + // Act + logoutService.handleLogout(request, response, sessionRepository); + + // Assert + verify(sessionRepository, never()).findById(anyString()); + verify(sessionRepository, never()).deleteById(anyString()); + verify(session).invalidate(); + verifyNoInteractions(response); + } + + @Test + void shouldHandleLogoutWithNoHttpSession() throws OAuth2AuthenticationException { + // Arrange + Cookie sessionCookie = new Cookie("SESSION", encodedSessionId); + when(request.getCookies()).thenReturn(new Cookie[]{sessionCookie}); + when(sessionRepository.findById(sessionId)).thenReturn(springSession); + when(request.getSession(false)).thenReturn(null); + + // Act + logoutService.handleLogout(request, response, sessionRepository); + + // Assert + verify(sessionRepository).findById(sessionId); + verify(sessionRepository).deleteById(sessionId); + verify(request).getSession(false); + verifyNoInteractions(session, response); + } + + @Test + void shouldHandleLogoutWithEmptyCookiesArray() throws OAuth2AuthenticationException { + // Arrange + when(request.getCookies()).thenReturn(new Cookie[]{}); + when(request.getSession(false)).thenReturn(session); + + // Act + logoutService.handleLogout(request, response, sessionRepository); + + // Assert + verify(sessionRepository, never()).findById(anyString()); + verify(sessionRepository, never()).deleteById(anyString()); + verify(session).invalidate(); + verifyNoInteractions(response); + } + + @Test + void shouldThrowOAuth2AuthenticationExceptionForInvalidBase64SessionId() { + // Arrange + Cookie sessionCookie = new Cookie("SESSION", "invalid-base64"); + when(request.getCookies()).thenReturn(new Cookie[]{sessionCookie}); + + // Act & Assert + assertThrows(OAuth2AuthenticationException.class, + () -> logoutService.handleLogout(request, response, sessionRepository)); + + verify(sessionRepository, never()).deleteById(anyString()); + verify(request, never()).getSession(false); + verifyNoInteractions(response, session); + } + + @Test + void shouldHandleMultipleCookiesWithValidSessionCookie() throws OAuth2AuthenticationException { + // Arrange + Cookie sessionCookie = new Cookie("SESSION", encodedSessionId); + Cookie otherCookie = new Cookie("OTHER_COOKIE", "value"); + when(request.getCookies()).thenReturn(new Cookie[]{otherCookie, sessionCookie}); + when(sessionRepository.findById(sessionId)).thenReturn(springSession); + when(request.getSession(false)).thenReturn(session); + + // Act + logoutService.handleLogout(request, response, sessionRepository); + + // Assert + verify(sessionRepository).findById(sessionId); + verify(sessionRepository).deleteById(sessionId); + verify(session).invalidate(); + verifyNoInteractions(response); + } +} \ No newline at end of file From 63b6e13965155052085f42223a279cc5714acee0 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 28 Apr 2025 17:05:32 +0530 Subject: [PATCH 563/860] injiweb-1518 used the util method instead of validation Signed-off-by: Gurpreet41082 --- .../WalletCredentialsController.java | 80 +++++-------- .../service/impl/IssuersServiceImpl.java | 2 + .../java/io/mosip/mimoto/util/WalletUtil.java | 2 +- .../WalletCredentialsControllerTest.java | 4 +- .../mimoto/service/IssuersServiceTest.java | 110 ++++++++++++++++-- 5 files changed, 134 insertions(+), 64 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index 4d7adba7b..30127da82 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -10,6 +10,7 @@ import io.mosip.mimoto.service.WalletCredentialService; import io.mosip.mimoto.util.CredentialUtilService; import io.mosip.mimoto.util.Utilities; +import io.mosip.mimoto.util.WalletUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.enums.ParameterIn; @@ -38,9 +39,6 @@ import static io.mosip.mimoto.exception.ErrorConstants.CREDENTIAL_DOWNLOAD_EXCEPTION; -/** - * REST controller for managing wallet credentials. - */ @Slf4j @RestController @RequestMapping(value = "/wallets/{walletId}/credentials") @@ -85,16 +83,8 @@ public ResponseEntity downloadCredential( params.putIfAbsent("vcStorageExpiryLimitInTimes", "-1"); params.putIfAbsent("locale", "en"); - String storedWalletId = (String) httpSession.getAttribute(SessionKeys.WALLET_ID); - if (!walletId.equals(storedWalletId)) { - log.error("Wallet ID mismatch: provided {}, stored {}", walletId, storedWalletId); - throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Wallet ID mismatch"); - } - String base64EncodedWalletKey = (String) httpSession.getAttribute(SessionKeys.WALLET_KEY); - if (base64EncodedWalletKey == null) { - log.error("Wallet key not found in session"); - throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Wallet key not found in session"); - } + WalletUtil.validateWalletId(httpSession, walletId); + String base64EncodedWalletKey = WalletUtil.getSessionWalletKey(httpSession); String issuerId = params.get("issuer"); String credentialType = params.get("credential"); @@ -118,19 +108,19 @@ public ResponseEntity downloadCredential( } log.info("Fetching and storing Verifiable Credential for walletId: {}", walletId); - VerifiableCredentialResponseDTO credentialResponseDTO = null; + try { - credentialResponseDTO = walletCredentialService.fetchAndStoreCredential( + VerifiableCredentialResponseDTO credentialResponseDTO = walletCredentialService.fetchAndStoreCredential( issuerId, credentialType, tokenResponse, credentialValidity, locale, walletId, base64EncodedWalletKey); + return ResponseEntity.status(HttpStatus.OK).body(credentialResponseDTO); } catch (ExternalServiceUnavailableException e) { return Utilities.getErrorResponseEntityWithoutWrapper( e, e.getErrorCode(), HttpStatus.SERVICE_UNAVAILABLE, MediaType.APPLICATION_JSON); - } catch (CredentialProcessingException e) { - log.error("Error processing credential download for walletId: {} ", walletId, e); + } catch (CredentialProcessingException e) { + log.error("Error processing credential download for walletId: {}", walletId, e); return Utilities.getErrorResponseEntityWithoutWrapper( e, e.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); } - return ResponseEntity.status(HttpStatus.OK).body(credentialResponseDTO); } /** @@ -154,28 +144,20 @@ public ResponseEntity> fetchAllCredentials @PathVariable("walletId") @NotBlank(message = "Wallet ID cannot be blank") String walletId, @RequestParam(value = "locale", defaultValue = "en") @Pattern(regexp = "^[a-z]{2}$", message = "Locale must be a 2-letter code") String locale, HttpSession httpSession) throws InvalidRequestException { - String storedWalletId = (String) httpSession.getAttribute(SessionKeys.WALLET_ID); - if (!walletId.equals(storedWalletId)) { - log.error("Wallet ID mismatch: provided {}, stored {}", walletId, storedWalletId); - throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Wallet ID mismatch"); - } - String base64EncodedWalletKey = (String) httpSession.getAttribute(SessionKeys.WALLET_KEY); - if (base64EncodedWalletKey == null) { - log.error("Wallet key not found in session"); - throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Wallet key not found in session"); - } + + WalletUtil.validateWalletId(httpSession, walletId); + String base64EncodedWalletKey = WalletUtil.getSessionWalletKey(httpSession); log.info("Fetching all credentials for walletId: {}", walletId); try { List credentials = walletCredentialService.fetchAllCredentialsForWallet( - walletId, base64EncodedWalletKey, locale); + walletId, base64EncodedWalletKey, locale); return ResponseEntity.status(HttpStatus.OK).body(credentials); } catch (CredentialProcessingException e) { - log.error("Error processing credentials for walletId: {} ", walletId, e); + log.error("Error processing credentials for walletId: {}", walletId, e); return Utilities.getErrorResponseEntityWithoutWrapper( e, e.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); } - } /** @@ -206,22 +188,23 @@ public ResponseEntity getVerifiableCredential( @RequestParam(value = "locale", defaultValue = "en") @Pattern(regexp = "^[a-z]{2}$", message = "Locale must be a 2-letter code") String locale, @RequestParam(value = "action", defaultValue = "inline") @Pattern(regexp = "^(inline|download)$", message = "Action must be 'inline' or 'download'") String action, HttpSession httpSession) throws InvalidRequestException { - String storedWalletId = (String) httpSession.getAttribute(SessionKeys.WALLET_ID); - if (!walletId.equals(storedWalletId)) { - log.error("Wallet ID mismatch: provided {}, stored {}", walletId, storedWalletId); - throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Wallet ID mismatch"); - } - String base64EncodedWalletKey = (String) httpSession.getAttribute(SessionKeys.WALLET_KEY); - if (base64EncodedWalletKey == null) { - log.error("Wallet key not found in session"); - throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Wallet key not found in session"); - } + + WalletUtil.validateWalletId(httpSession, walletId); + String base64EncodedWalletKey = WalletUtil.getSessionWalletKey(httpSession); log.info("Fetching credentialId: {} from walletId: {}", credentialId, walletId); - WalletCredentialResponseDTO walletCredentialResponseDTO = null; try { - walletCredentialResponseDTO = walletCredentialService.fetchVerifiableCredential( + WalletCredentialResponseDTO walletCredentialResponseDTO = walletCredentialService.fetchVerifiableCredential( walletId, credentialId, base64EncodedWalletKey, locale); + + String dispositionType = "download".equalsIgnoreCase(action) ? "attachment" : "inline"; + String contentDisposition = String.format("%s; filename=\"%s\"", dispositionType, walletCredentialResponseDTO.getFileName()); + + return ResponseEntity.ok() + .header(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, HttpHeaders.CONTENT_DISPOSITION) + .header(HttpHeaders.CONTENT_DISPOSITION, contentDisposition) + .contentType(MediaType.APPLICATION_PDF) + .body(walletCredentialResponseDTO.getFileContentStream()); } catch (CredentialNotFoundException e) { log.error("Credential not found for walletId: {} and credentialId: {}", walletId, credentialId, e); return Utilities.getErrorResponseEntityWithoutWrapper( @@ -231,14 +214,5 @@ public ResponseEntity getVerifiableCredential( return Utilities.getErrorResponseEntityWithoutWrapper( e, e.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); } - - String dispositionType = "download".equalsIgnoreCase(action) ? "attachment" : "inline"; - String contentDisposition = String.format("%s; filename=\"%s\"", dispositionType, walletCredentialResponseDTO.getFileName()); - - return ResponseEntity.ok() - .header(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, HttpHeaders.CONTENT_DISPOSITION) - .header(HttpHeaders.CONTENT_DISPOSITION, contentDisposition) - .contentType(MediaType.APPLICATION_PDF) - .body(walletCredentialResponseDTO.getFileContentStream()); } -} \ No newline at end of file +} diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index 5deb367f3..f4767fe2a 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -15,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; import java.io.IOException; import java.util.stream.Collectors; @@ -22,6 +23,7 @@ @Service @Slf4j +@Validated public class IssuersServiceImpl implements IssuersService { @Autowired diff --git a/src/main/java/io/mosip/mimoto/util/WalletUtil.java b/src/main/java/io/mosip/mimoto/util/WalletUtil.java index 9081528d2..7f737aeb1 100644 --- a/src/main/java/io/mosip/mimoto/util/WalletUtil.java +++ b/src/main/java/io/mosip/mimoto/util/WalletUtil.java @@ -79,7 +79,7 @@ private List createProofSigningKeys(SecretKey encryptionKey, Wa public static String getSessionWalletKey(HttpSession session) { Object key = session.getAttribute(SessionKeys.WALLET_KEY); - if (key == null) throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Wallet Key is missing in session"); + if (key == null) throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Wallet key not found in session"); return key.toString(); } diff --git a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java index ee0cceabb..c5c9332cd 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java @@ -120,7 +120,7 @@ public void shouldThrowInvalidRequestForWalletIdMismatch() throws Exception { .sessionAttr("wallet_key", walletKey)) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.errorCode").value("invalid_request")) - .andExpect(jsonPath("$.errorMessage").value("invalid_request --> Wallet ID mismatch")); + .andExpect(jsonPath("$.errorMessage").value("invalid_request --> Invalid Wallet Id. Session and request Wallet Id do not match")); } @Test @@ -231,7 +231,7 @@ public void shouldThrowInvalidRequestForWalletIdMismatchInFetchAll() throws Exce .sessionAttr("wallet_key", walletKey)) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.errorCode").value("invalid_request")) - .andExpect(jsonPath("$.errorMessage").value("invalid_request --> Wallet ID mismatch")); + .andExpect(jsonPath("$.errorMessage").value("invalid_request --> Invalid Wallet Id. Session and request Wallet Id do not match")); } // Tests for getVerifiableCredential diff --git a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java index 6cab5e88a..8776a6e21 100644 --- a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java @@ -6,11 +6,11 @@ import io.mosip.mimoto.dto.IssuersDTO; import io.mosip.mimoto.dto.mimoto.CredentialIssuerConfiguration; import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; +import io.mosip.mimoto.dto.mimoto.IssuerConfig; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.AuthorizationServerWellknownResponseException; import io.mosip.mimoto.exception.InvalidIssuerIdException; import io.mosip.mimoto.exception.InvalidWellknownResponseException; -import io.mosip.mimoto.service.impl.CredentialServiceImpl; import io.mosip.mimoto.service.impl.IssuersServiceImpl; import io.mosip.mimoto.util.IssuerConfigUtil; import io.mosip.mimoto.util.Utilities; @@ -29,20 +29,15 @@ import java.util.Map; import static io.mosip.mimoto.util.TestUtilities.*; -import static io.mosip.mimoto.util.TestUtilities.getCredentialSupportedResponse; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThrows; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.*; @RunWith(MockitoJUnitRunner.class) public class IssuersServiceTest { @InjectMocks - IssuersServiceImpl issuersService = new IssuersServiceImpl(); - - @InjectMocks - CredentialServiceImpl credentialService = new CredentialServiceImpl(); + IssuersServiceImpl issuersService; @Mock Utilities utilities; @@ -203,4 +198,103 @@ public void issuersConfigShouldThrowExceptionIfAnyErrorOccurredWhileFetchingIssu "well-known api is not accessible", actualException.getMessage()); verify(issuersConfigUtil, times(1)).getAuthServerWellknown(authServerWellknownUrl); } + + // Existing imports and class setup remain unchanged +// Add these test cases to the existing IssuersServiceTest class + + @Test + public void shouldReturnIssuerConfigForValidIssuerIdAndCredentialType() throws ApiNotAccessibleException, IOException, InvalidIssuerIdException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { + // Arrange + String issuerId = "Issuer3id"; + String credentialType = "CredentialType1"; + IssuerDTO expectedIssuerDTO = getIssuerConfigDTO("Issuer3"); + CredentialIssuerWellKnownResponse wellKnownResponse = getCredentialIssuerWellKnownResponseDto( + issuerId, Map.of(credentialType, getCredentialSupportedResponse(credentialType))); + IssuerConfig expectedIssuerConfig = new IssuerConfig( + expectedIssuerDTO, + wellKnownResponse, + wellKnownResponse.getCredentialConfigurationsSupported().get(credentialType) + ); + + // Act + IssuerConfig actualIssuerConfig = issuersService.getIssuerConfig(issuerId, credentialType); + + // Assert + assertEquals(expectedIssuerConfig, actualIssuerConfig); + assertEquals(expectedIssuerDTO, actualIssuerConfig.getIssuerDTO()); + assertEquals(wellKnownResponse, actualIssuerConfig.getWellKnownResponse()); + assertEquals(wellKnownResponse.getCredentialConfigurationsSupported().get(credentialType), + actualIssuerConfig.getCredentialsSupportedResponse()); + verify(issuersConfigUtil, times(1)).getIssuerWellknown(credentialIssuerHostUrl); + verify(utilities, times(1)).getIssuersConfigJsonValue(); + } + + @Test + public void shouldThrowInvalidIssuerIdExceptionForNonExistentIssuerId() throws ApiNotAccessibleException, IOException, InvalidWellknownResponseException { + // Arrange + String issuerId = "InvalidIssuerId"; + String credentialType = "CredentialType1"; + + // Act & Assert + InvalidIssuerIdException exception = assertThrows(InvalidIssuerIdException.class, + () -> issuersService.getIssuerConfig(issuerId, credentialType)); + + assertEquals("RESIDENT-APP-035 --> Invalid issuer ID", exception.getMessage()); + verify(utilities, times(1)).getIssuersConfigJsonValue(); + verify(issuersConfigUtil, never()).getIssuerWellknown(anyString()); + } + + @Test + public void shouldThrowApiNotAccessibleExceptionWhenIssuersConfigJsonIsNull() throws ApiNotAccessibleException, IOException, InvalidWellknownResponseException { + // Arrange + String issuerId = "Issuer3id"; + String credentialType = "CredentialType1"; + Mockito.when(utilities.getIssuersConfigJsonValue()).thenReturn(null); + + // Act & Assert + ApiNotAccessibleException exception = assertThrows(ApiNotAccessibleException.class, + () -> issuersService.getIssuerConfig(issuerId, credentialType)); + + assertEquals("RESIDENT-APP-026 --> Unable to fetch issuer configuration for issuerId: Issuer3id; \n" + + "nested exception is io.mosip.mimoto.exception.ApiNotAccessibleException: RESIDENT-APP-026 --> Api not accessible failure", exception.getMessage()); + verify(utilities, times(1)).getIssuersConfigJsonValue(); + verify(issuersConfigUtil, never()).getIssuerWellknown(anyString()); + } + + @Test + public void shouldThrowApiNotAccessibleExceptionWhenGetIssuerWellknownFails() throws IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException, ApiNotAccessibleException { + // Arrange + String issuerId = "Issuer3id"; + String credentialType = "CredentialType1"; + Mockito.when(issuersConfigUtil.getIssuerWellknown(credentialIssuerHostUrl)) + .thenThrow(new ApiNotAccessibleException("Well-known endpoint inaccessible")); + + // Act & Assert + ApiNotAccessibleException exception = assertThrows(ApiNotAccessibleException.class, + () -> issuersService.getIssuerConfig(issuerId, credentialType)); + + assertEquals("RESIDENT-APP-026 --> Unable to fetch issuer configuration for issuerId: Issuer3id; \n" + + "nested exception is io.mosip.mimoto.exception.ApiNotAccessibleException: RESIDENT-APP-026 --> Well-known endpoint inaccessible", exception.getMessage()); + verify(utilities, times(1)).getIssuersConfigJsonValue(); + verify(issuersConfigUtil, times(1)).getIssuerWellknown(credentialIssuerHostUrl); + } + + @Test + public void shouldLogErrorWhenApiNotAccessibleExceptionOccurs() throws IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException, ApiNotAccessibleException { + // Arrange + String issuerId = "Issuer3id"; + String credentialType = "CredentialType1"; + ApiNotAccessibleException apiException = new ApiNotAccessibleException("Well-known endpoint inaccessible"); + Mockito.when(issuersConfigUtil.getIssuerWellknown(credentialIssuerHostUrl)).thenThrow(apiException); + + // Act & Assert + ApiNotAccessibleException exception = assertThrows(ApiNotAccessibleException.class, + () -> issuersService.getIssuerConfig(issuerId, credentialType)); + + assertEquals("RESIDENT-APP-026 --> Unable to fetch issuer configuration for issuerId: Issuer3id; \n" + + "nested exception is io.mosip.mimoto.exception.ApiNotAccessibleException: RESIDENT-APP-026 --> Well-known endpoint inaccessible", exception.getMessage()); + verify(utilities, times(1)).getIssuersConfigJsonValue(); + verify(issuersConfigUtil, times(1)).getIssuerWellknown(credentialIssuerHostUrl); + // Note: Logging verification requires a logging framework setup (e.g., Logback with ListAppender) + } } \ No newline at end of file From df067639c036c828d0e6917a375a4c3690537448 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 28 Apr 2025 17:16:24 +0530 Subject: [PATCH 564/860] injiweb-1518 adding documentation on controller class Signed-off-by: Gurpreet41082 --- .../mosip/mimoto/controller/WalletCredentialsController.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index 30127da82..0f9b6246d 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -1,6 +1,5 @@ package io.mosip.mimoto.controller; -import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.constant.SwaggerLiteralConstants; import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; @@ -39,6 +38,9 @@ import static io.mosip.mimoto.exception.ErrorConstants.CREDENTIAL_DOWNLOAD_EXCEPTION; +/** + * REST controller for managing wallet credentials. + */ @Slf4j @RestController @RequestMapping(value = "/wallets/{walletId}/credentials") From c40d51b49e9d039236124c34581a58f5979ed410 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 28 Apr 2025 19:15:35 +0530 Subject: [PATCH 565/860] injiweb-1518 removed the exception not required Signed-off-by: Gurpreet41082 --- .../controller/WalletCredentialsController.java | 14 +++++--------- .../mimoto/service/WalletCredentialService.java | 4 +--- .../service/impl/WalletCredentialServiceImpl.java | 2 +- 3 files changed, 7 insertions(+), 13 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index 0f9b6246d..6cfdffb1a 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -151,15 +151,11 @@ public ResponseEntity> fetchAllCredentials String base64EncodedWalletKey = WalletUtil.getSessionWalletKey(httpSession); log.info("Fetching all credentials for walletId: {}", walletId); - try { - List credentials = walletCredentialService.fetchAllCredentialsForWallet( - walletId, base64EncodedWalletKey, locale); - return ResponseEntity.status(HttpStatus.OK).body(credentials); - } catch (CredentialProcessingException e) { - log.error("Error processing credentials for walletId: {}", walletId, e); - return Utilities.getErrorResponseEntityWithoutWrapper( - e, e.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); - } + + List credentials = walletCredentialService.fetchAllCredentialsForWallet( + walletId, base64EncodedWalletKey, locale); + return ResponseEntity.status(HttpStatus.OK).body(credentials); + } /** diff --git a/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java b/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java index f934f1d15..0c31ada91 100644 --- a/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java +++ b/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java @@ -37,10 +37,8 @@ VerifiableCredentialResponseDTO fetchAndStoreCredential(String issuerId, String * @param base64Key The base64-encoded key for decryption. * @param locale The locale for display purposes. * @return List of credential responses. - * @throws CredentialProcessingException If processing fails. */ - List fetchAllCredentialsForWallet(String walletId, String base64Key, String locale) - throws CredentialProcessingException; + List fetchAllCredentialsForWallet(String walletId, String base64Key, String locale); /** * Fetches a single verifiable credential by ID. diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java index 45c278ed8..d271cf85d 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java @@ -76,7 +76,7 @@ public VerifiableCredentialResponseDTO fetchAndStoreCredential(String issuerId, } @Override - public List fetchAllCredentialsForWallet(String walletId, String base64Key, String locale) throws CredentialProcessingException { + public List fetchAllCredentialsForWallet(String walletId, String base64Key, String locale) { log.info("Fetching all credentials for wallet: {}", walletId); List credentials = repository.findByWalletId(walletId); From 2c02d7ffd039d0f4b1ad554fe6facc32dc31884a Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 29 Apr 2025 00:20:06 +0530 Subject: [PATCH 566/860] [INJIWEB-1528] update error codes in openapi documentation and swagger annotations for all the endpoints in login flow Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- docs/api-documentation-openapi.json | 388 +++++++++++++++--- .../constant/SwaggerExampleConstants.java | 36 +- .../controller/TokenAuthController.java | 9 +- .../mimoto/controller/UsersController.java | 10 +- .../WalletCredentialsController.java | 57 +-- .../mimoto/controller/WalletsController.java | 13 +- .../mosip/mimoto/service/WalletService.java | 2 +- .../java/io/mosip/mimoto/util/WalletUtil.java | 4 +- .../WalletCredentialsControllerTest.java | 4 +- 9 files changed, 409 insertions(+), 114 deletions(-) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index ef3923407..149868bef 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -2703,7 +2703,7 @@ } }, "404": { - "description": "User not found", + "description": "User data not found in the database", "content": { "application/json": { "schema": { @@ -2712,7 +2712,7 @@ "examples": { "User not found in the Database": { "value": { - "errorCode": "RESIDENT-APP-049", + "errorCode": "invalid_user", "errorMessage": "User not found. Please check your credentials or login again" } } @@ -2790,8 +2790,8 @@ "examples": { "User metadata not found in session": { "value": { - "errorCode": "RESIDENT-APP-052", - "errorMessage": "No user metadata present in cache" + "errorCode": "session_invalid_or_expired", + "errorMessage": "User session is missing or expired. Please log in again." } } } @@ -2806,10 +2806,10 @@ "$ref": "#/components/schemas/Error" }, "examples": { - "Unexpected server error": { + "Unexpected Server Error": { "value": { - "errorCode": "RESIDENT-APP-052", - "errorMessage": "An unexpected error occurred while retrieving user metadata from cache" + "errorCode": "internal_server_error", + "errorMessage": "We are unable to process request now" } } } @@ -2933,17 +2933,41 @@ } }, "400": { - "description": "Bad request - API not accessible or request parameters invalid", + "description": "Bad request - Wallet key is null / blank or Wallet ID is null / blank / mismatch with session Wallet ID or required params are missing / invalid", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" }, "examples": { - "Invalid Auth Server Token API access": { + "Invalid Wallet Id": { + "value": { + "errorCode": "invalid_request", + "errorMessage": "Invalid Wallet ID. Session and request Wallet ID do not match" + } + }, + "Wallet key not found in session": { + "value": { + "errorCode": "invalid_request", + "errorMessage": "Wallet key not found in session" + } + }, + "Missing required params": { + "value": { + "errorCode": "invalid_request", + "errorMessage": "Issuer and credential type are required" + } + }, + "Wallet ID is null or blank": { + "value": { + "errorCode": "invalid_request", + "errorMessage": "Wallet ID cannot be null or blank" + } + }, + "Issuer ID is null or blank": { "value": { - "errorCode": "RESIDENT-APP-026", - "errorMessage": "Api not accessible failure" + "errorCode": "invalid_request", + "errorMessage": "Issuer ID cannot be null or blank" } } } @@ -2951,29 +2975,71 @@ } }, "500": { - "description": "Internal server error", + "description": "Internal server error - along with below examples it will return this status code when error occurred while serializing the VC response or unable to store the response in data share or unable to encrypt the credential", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" }, "examples": { - "Wallet Key missing in session": { + "Credential already exists for given Issuer and Credential Type": { "value": { - "errorCode": "RESIDENT-APP-053", - "errorMessage": "Wallet key is missing in session" + "errorCode": "credential_download_error", + "errorMessage": "Duplicate credential for issuer and type" } }, - "Database connection failure": { + "Exception occurred while fetching Issuer config": { "value": { - "errorCode": "RESIDENT-APP-047", - "errorMessage": "Failed to connect to the shared database while storing Verifiable Credential data into the database" + "errorCode": "credential_download_error", + "errorMessage": "Unable to fetch issuer configuration" + } + }, + "Failed to generate VC Credential request": { + "value": { + "errorCode": "credential_download_error", + "errorMessage": "Unable to generate credential request" + } + }, + "Signature verification failed for downloaded Credential": { + "value": { + "errorCode": "internal_server_error", + "errorMessage": "We are unable to process request now" } }, "Unexpected Server Error": { "value": { - "errorCode": "RESIDENT-APP-053", - "errorMessage": "Unexpected error occurred while downloading and storing Verifiable Credential" + "errorCode": "internal_server_error", + "errorMessage": "We are unable to process request now" + } + } + } + } + } + }, + "503": { + "description": "Service unavailable - along with below examples it will return this status code when any error occurred while fetching Issuer wellknown or Auth Server wellknown", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "API is not accessible": { + "value": { + "errorCode": "credential_download_error", + "errorMessage": "Failed to download and store the credential" + } + }, + "Failed to download credential from Issuer": { + "value": { + "errorCode": "server_unavailable", + "errorMessage": "Unable to download credential from issuer" + } + }, + "Database connection failure": { + "value": { + "errorCode": "database_unavailable", + "errorMessage": "Failed to connect to the database" } } } @@ -3041,30 +3107,60 @@ } } }, - "500": { - "description": "Internal server error", + "400": { + "description": "Bad request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" }, "examples": { - "Wallet Key missing in session": { + "Invalid Wallet Id": { "value": { - "errorCode": "RESIDENT-APP-054", - "errorMessage": "Wallet key is missing in session" + "errorCode": "invalid_request", + "errorMessage": "Invalid Wallet ID. Session and request Wallet ID do not match" } }, - "Database connection failure": { + "Wallet key not found in session": { "value": { - "errorCode": "RESIDENT-APP-047", - "errorMessage": "Failed to connect to the shared database while fetching Verifiable Credential from the database" + "errorCode": "invalid_request", + "errorMessage": "Wallet key not found in session" } - }, + } + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { "Unexpected Server Error": { "value": { - "errorCode": "RESIDENT-APP-054", - "errorMessage": "Unexpected error occurred while fetching Verifiable Credential" + "errorCode": "internal_server_error", + "errorMessage": "We are unable to process request now" + } + } + } + } + } + }, + "503": { + "description": "Service unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "Database connection failure": { + "value": { + "errorCode": "database_unavailable", + "errorMessage": "Failed to connect to the database" } } } @@ -3152,6 +3248,48 @@ } } }, + "400": { + "description": "Bad request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "Invalid Wallet Id": { + "value": { + "errorCode": "invalid_request", + "errorMessage": "Invalid Wallet ID. Session and request Wallet ID do not match" + } + }, + "Wallet key not found in session": { + "value": { + "errorCode": "invalid_request", + "errorMessage": "Wallet key not found in session" + } + } + } + } + } + }, + "404": { + "description": "Not Found - Credential not found for given Wallet ID and Credential ID", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "No credentials found for the given Credential ID and Wallet ID": { + "value": { + "errorCode": "resource_not_found", + "errorMessage": "The requested resource doesn’t exist." + } + } + } + } + } + }, "500": { "description": "Internal server error", "content": { @@ -3160,22 +3298,52 @@ "$ref": "#/components/schemas/Error" }, "examples": { - "Wallet Key missing in session": { + "Failed to decrypt the Credential": { "value": { - "errorCode": "RESIDENT-APP-055", - "errorMessage": "Wallet key is missing in session" + "errorCode": "credential_fetch_error", + "errorMessage": "Decryption failed" } }, - "Database connection failure": { + "Credential Type is invalid": { "value": { - "errorCode": "RESIDENT-APP-047", - "errorMessage": "Failed to connect to the shared database while fetching Verifiable Credential from the database" + "errorCode": "credential_fetch_error", + "errorMessage": "Invalid credential type configuration" + } + }, + "Exception occurred while fetching Issuer config": { + "value": { + "errorCode": "credential_download_error", + "errorMessage": "Unable to fetch issuer configuration" + } + }, + "Exception occurred when generating PDF": { + "value": { + "errorCode": "credential_download_error", + "errorMessage": "Failed to generate credential PDF" } }, "Unexpected Server Error": { "value": { - "errorCode": "RESIDENT-APP-055", - "errorMessage": "Unexpected error occurred while fetching Verifiable Credential" + "errorCode": "internal_server_error", + "errorMessage": "We are unable to process request now" + } + } + } + } + } + }, + "503": { + "description": "Service unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "Database connection failure": { + "value": { + "errorCode": "database_unavailable", + "errorMessage": "Failed to connect to the database" } } } @@ -3242,10 +3410,28 @@ "$ref": "#/components/schemas/Error" }, "examples": { - "Invalid request": { + "User ID is not present in session": { + "value": { + "errorCode": "invalid_request", + "errorMessage": "User ID not found in session" + } + }, + "Invalid User ID": { + "value": { + "errorCode": "invalid_request", + "errorMessage": "User ID cannot be null or empty" + } + }, + "Invalid Wallet name": { + "value": { + "errorCode": "invalid_request", + "errorMessage": "Wallet name must be alphanumeric with allowed special characters" + } + }, + "Invalid Wallet Pin": { "value": { - "errorCode": "RESIDENT-APP-050", - "errorMessage": "Pin should be numeric with 4 or 6 digits." + "errorCode": "invalid_request", + "errorMessage": "PIN must be numeric with 4 or 6 digits" } } } @@ -3253,17 +3439,35 @@ } }, "500": { - "description": "Internal server error while creating wallet", + "description": "Internal server error while creating Wallet - error occurred while generating Wallet key or encrypting it with Wallet PIN", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" }, "examples": { - "Unexpected server error": { + "Unexpected Server Error": { "value": { - "errorCode": "RESIDENT-APP-050", - "errorMessage": "An unexpected error occurred while creating the wallet" + "errorCode": "internal_server_error", + "errorMessage": "We are unable to process request now" + } + } + } + } + } + }, + "503": { + "description": "Service unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "Database connection failure": { + "value": { + "errorCode": "database_unavailable", + "errorMessage": "Failed to connect to the database" } } } @@ -3310,6 +3514,24 @@ } } }, + "400": { + "description": "Invalid Wallets fetching request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "User ID is not present in session": { + "value": { + "errorCode": "invalid_request", + "errorMessage": "User ID not found in session" + } + } + } + } + } + }, "500": { "description": "Internal server error", "content": { @@ -3318,10 +3540,28 @@ "$ref": "#/components/schemas/Error" }, "examples": { - "Unexpected server error": { + "Unexpected Server Error": { "value": { - "errorCode": "RESIDENT-APP-051", - "errorMessage": "An unexpected error occurred while retrieving user wallets" + "errorCode": "internal_server_error", + "errorMessage": "We are unable to process request now" + } + } + } + } + } + }, + "503": { + "description": "Service unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "Database connection failure": { + "value": { + "errorCode": "database_unavailable", + "errorMessage": "Failed to connect to the database" } } } @@ -3383,6 +3623,30 @@ } } }, + "400": { + "description": "Invalid Wallets fetching request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "User ID is not present in session": { + "value": { + "errorCode": "invalid_request", + "errorMessage": "User ID not found in session" + } + }, + "Wallet not found": { + "value": { + "errorCode": "invalid_request", + "errorMessage": "Wallet not found" + } + } + } + } + } + }, "401": { "description": "Unauthorized", "content": { @@ -3402,17 +3666,35 @@ } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" }, "examples": { - "Unexpected server error": { + "Unexpected Server Error": { "value": { - "errorCode": "RESIDENT-APP-051", - "errorMessage": "An unexpected error occurred while retrieving the wallet details" + "errorCode": "internal_server_error", + "errorMessage": "We are unable to process request now" + } + } + } + } + } + }, + "503": { + "description": "Service unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "Database connection failure": { + "value": { + "errorCode": "database_unavailable", + "errorMessage": "Failed to connect to the database" } } } diff --git a/src/main/java/io/mosip/mimoto/constant/SwaggerExampleConstants.java b/src/main/java/io/mosip/mimoto/constant/SwaggerExampleConstants.java index 11a7790e9..1752fef94 100644 --- a/src/main/java/io/mosip/mimoto/constant/SwaggerExampleConstants.java +++ b/src/main/java/io/mosip/mimoto/constant/SwaggerExampleConstants.java @@ -34,21 +34,33 @@ public class SwaggerExampleConstants { """; public static final String FETCH_USER_PROFILE_SUCCESS = """ + { + "display_name": "John Doe", + "profile_picture_url": "https://example.com/profile.jpg", + "email": "john.doe@example.com" + } + """; + + public static final String FETCH_ALL_WALLETS_OF_USER_SUCCESS = """ + [ { - "display_name": "John Doe", - "profile_picture_url": "https://example.com/profile.jpg", - "email": "john.doe@example.com" + "walletId": "123e4567-e89b-12d3-a456-426614174000" + }, + { + "walletId": "223e4567-e89b-12d3-a456-426614174001" } + ] """; - public static final String FETCH_ALL_WALLETS_OF_USER_SUCCESS = """ - [ - { - "walletId": "123e4567-e89b-12d3-a456-426614174000" - }, - { - "walletId": "223e4567-e89b-12d3-a456-426614174001" - } - ] + public static final String FETCH_ALL_CREDENTIALS_OF_WALLET_SUCCESS = """ + [ + { + "issuer_name": "Mosip", + "issuer_logo": "https://example.com/logo.png", + "credential_type": "MosipVerifiableCredential", + "credential_type_logo": "https://example.com/credential-logo.png", + "credential_id": "1234567890" + } + ] """; } diff --git a/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java b/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java index 7a52d3323..2ca38ec43 100644 --- a/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java +++ b/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java @@ -49,12 +49,10 @@ public TokenAuthController(TokenServiceFactory tokenServiceFactory) { @PostMapping("/auth/{provider}/token-login") public ResponseEntity createSessionFromIdToken(@RequestHeader("Authorization") String authorization, @PathVariable("provider") String provider, HttpServletRequest request, HttpServletResponse response) { if (!tokenServiceFactory.isSupportedProvider(provider)) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(String.format(UNSUPPORTED_PROVIDER_MESSAGE, provider)); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(String.format(UNSUPPORTED_PROVIDER_MESSAGE, provider)); } if (authorization == null || !authorization.startsWith(BEARER_PREFIX)) { - return ResponseEntity.status(HttpStatus.UNAUTHORIZED) - .body(INVALID_TOKEN_MESSAGE); + return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(INVALID_TOKEN_MESSAGE); } String idToken = authorization.substring(BEARER_PREFIX.length()); @@ -63,8 +61,7 @@ public ResponseEntity createSessionFromIdToken(@RequestHeader("Authoriza tokenService.processToken(idToken, provider, request, response); return ResponseEntity.ok(SESSION_CREATED); } catch (OAuth2AuthenticationException e) { - return ResponseEntity.status(HttpStatus.UNAUTHORIZED) - .body(String.format(INVALID_TOKEN_ERROR, e.getMessage())); + return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(String.format(INVALID_TOKEN_ERROR, e.getMessage())); } } } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/controller/UsersController.java b/src/main/java/io/mosip/mimoto/controller/UsersController.java index 7afc66357..295aa2967 100644 --- a/src/main/java/io/mosip/mimoto/controller/UsersController.java +++ b/src/main/java/io/mosip/mimoto/controller/UsersController.java @@ -46,7 +46,7 @@ public class UsersController { @Operation(summary = "Retrieve user metadata from the database", description = "This API is secured using session-based authentication. When a request is made, the server retrieves the session ID from the Cookie header and uses it to fetch session details from Redis. From the session, it extracts the user's unique identifier (typically the sub field provided by the identity provider) along with the clientRegistrationId. These values are then used to retrieve the user's metadata from the database. If successful, the API returns the user's profile information. If any issue occurs such as missing user data or server error then an appropriate error response is returned.", operationId = "getUserProfileFromDB", security = @SecurityRequirement(name = "SessionAuth")) @ApiResponse(responseCode = "200", description = "User profile retrieved successfully from the Database", content = @Content(mediaType = "application/json", schema = @Schema(implementation = UserMetadataDTO.class), examples = @ExampleObject(name = "Success response", value = SwaggerExampleConstants.FETCH_USER_PROFILE_SUCCESS))) - @ApiResponse(responseCode = "404", description = "User not found", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "User not found in the Database", value = "{\"errorCode\": \"RESIDENT-APP-049\", \"errorMessage\": \"User not found. Please check your credentials or login again\"}"))) + @ApiResponse(responseCode = "404", description = "User data not found in the database", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "User not found in the Database", value = "{\"errorCode\": \"invalid_user\", \"errorMessage\": \"User not found. Please check your credentials or login again\"}"))) @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "Database connection failure", value = "{\"errorCode\": \"RESIDENT-APP-047\", \"errorMessage\": \"Failed to connect to the shared database while fetching User Metadata data from the database\"}"), @ExampleObject(name = "Unexpected server error", value = "{\"errorCode\": \"RESIDENT-APP-049\", \"errorMessage\": \"An unexpected error occurred while retrieving user profile from the database\"}"), @ExampleObject(name = "User metadata not found in the Database", value = "{\"errorCode\": \"RESIDENT-APP-049\", \"errorMessage\": \"An unexpected error occurred while downloading and storing user metadata into database\"}")})) @GetMapping("/db") public ResponseEntity getUserProfile(Authentication authentication, HttpSession session) { @@ -79,18 +79,16 @@ private UserMetadata fetchUserMetadata(String providerSubjectId, String identity @Operation(summary = "Retrieve user metadata from the stored redis session", description = "This API is secured using session-based authentication. When a request is made, the server retrieves the session ID from the Cookie header and uses it to fetch session details from Redis. It then attempts to retrieve the user's metadata directly from the session. If the metadata is available, the API returns the user's profile information otherwise an appropriate error response is returned.", operationId = "getUserProfileFromCache", security = @SecurityRequirement(name = "SessionAuth")) @ApiResponse(responseCode = "200", description = "User profile retrieved successfully from the session", content = @Content(mediaType = "application/json", schema = @Schema(implementation = UserMetadataDTO.class), examples = @ExampleObject(name = "Success response", value = SwaggerExampleConstants.FETCH_USER_PROFILE_SUCCESS))) - @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "User metadata not found in session", value = "{\"errorCode\": \"RESIDENT-APP-052\", \"errorMessage\": \"No user metadata present in cache\"}"))) - @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected server error", value = "{\"errorCode\": \"RESIDENT-APP-052\", \"errorMessage\": \"An unexpected error occurred while retrieving user metadata from cache\"}"))) + @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "User metadata not found in session", value = "{\"errorCode\": \"session_invalid_or_expired\", \"errorMessage\": \"User session is missing or expired. Please log in again.\"}"))) + @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"))) @GetMapping("/cache") public ResponseEntity getUserProfileFromCache(HttpSession session) { UserMetadataDTO userMetadataDTO = (UserMetadataDTO) session.getAttribute(SessionKeys.USER_METADATA); if (userMetadataDTO == null) { log.error("User info is not present in the session"); - return getErrorResponseEntityFromPlatformErrorMessage(SESSION_EXPIRED_OR_INVALID, HttpStatus.UNAUTHORIZED, MediaType.APPLICATION_JSON); + return getErrorResponseEntityFromPlatformErrorMessage(SESSION_EXPIRED_OR_INVALID, HttpStatus.UNAUTHORIZED, MediaType.APPLICATION_JSON); } return ResponseEntity.status(HttpStatus.OK).body(userMetadataDTO); - } - } diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index 0f9b6246d..eb27e95d8 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.controller; +import io.mosip.mimoto.constant.SwaggerExampleConstants; import io.mosip.mimoto.constant.SwaggerLiteralConstants; import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; @@ -13,6 +14,7 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.headers.Header; import io.swagger.v3.oas.annotations.media.ArraySchema; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.ExampleObject; @@ -66,17 +68,16 @@ public WalletCredentialsController(WalletCredentialService walletCredentialServi * @return The stored Verifiable Credential details. * @throws InvalidRequestException If input parameters or session are invalid. */ - @Operation(summary = "Download a Verifiable Credential", description = "This API allows downloading a Verifiable Credential by providing the wallet ID and query parameters such as issuer, credential type, storage expiry, and locale. The user's session is authenticated, and the credential is fetched and stored in the wallet. If successful, the Verifiable Credential details are returned; otherwise, an appropriate error response is provided.", operationId = "downloadCredential", security = @SecurityRequirement(name = "SessionAuth"), parameters = { - @Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet", schema = @Schema(type = "string")), - @Parameter(name = "issuer", in = ParameterIn.QUERY, required = true, description = "The identifier of the issuer", schema = @Schema(type = "string")), - @Parameter(name = "credential", in = ParameterIn.QUERY, required = true, description = "The type of the credential", schema = @Schema(type = "string")), - @Parameter(name = "vcStorageExpiryLimitInTimes", in = ParameterIn.QUERY, required = false, description = "The expiration limit for the Verifiable Credential storage", schema = @Schema(type = "string", defaultValue = "-1")), - @Parameter(name = "locale", in = ParameterIn.QUERY, required = false, description = "The locale for the Verifiable Credential", schema = @Schema(type = "string", defaultValue = "en")) - }) - @ApiResponse(responseCode = "200", description = "Verifiable Credential downloaded successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = VerifiableCredentialResponseDTO.class))) - @ApiResponse(responseCode = "400", description = "Bad Request - Invalid parameters or session", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-052\", \"errorMessage\": \"Invalid wallet ID or missing parameters\"}"))) - @ApiResponse(responseCode = "500", description = "Internal Server Error - Error occurred while processing credential", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-054\", \"errorMessage\": \"Error occurred while saving the credential\"}"))) - @ApiResponse(responseCode = "503", description = "Service Unavailable - Error occurred while fetching token", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-052\", \"errorMessage\": \"Failed to fetch token response\"}"))) + @Operation(summary = "Download and store a Verifiable Credential under a specific Wallet", description = "This API is secured using session-based authentication. Upon receiving a request, the session ID is extracted from the Cookie header and used to retrieve session details from Redis for authentication. It then retrieves the wallet key from the session and use it to decrypt the signing algorithm's secret key(which is used for signing the JWT in credential request) and encrypt the downloaded Verifiable Credential. If the process completes successfully, the credential is stored in the database and certain fields will be returned in the response. In case of any issues, an appropriate error response is returned.", operationId = "downloadCredential", security = @SecurityRequirement(name = "SessionAuth"), parameters = { + @Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet", schema = @Schema(type = "string")), + @Parameter(name = "issuer", in = ParameterIn.QUERY, required = true, description = "The identifier of the issuer", schema = @Schema(type = "string")), + @Parameter(name = "credential", in = ParameterIn.QUERY, required = true, description = "The type of the credential", schema = @Schema(type = "string")), + @Parameter(name = "vcStorageExpiryLimitInTimes", in = ParameterIn.QUERY, required = false, description = "The expiration limit for the Verifiable Credential storage", schema = @Schema(type = "string", defaultValue = "-1")), + @Parameter(name = "locale", in = ParameterIn.QUERY, required = false, description = "The locale for the Verifiable Credential", schema = @Schema(type = "string", defaultValue = "en"))}) + @ApiResponse(responseCode = "200", description = "Verifiable Credential downloaded and stored successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = VerifiableCredentialResponseDTO.class))) + @ApiResponse(responseCode = "400", description = "Bad request - Wallet key is null / blank or Wallet ID is null / blank / mismatch with session Wallet ID or required params are missing / invalid", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "Invalid Wallet Id", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Invalid Wallet ID. Session and request Wallet ID do not match\"}"), @ExampleObject(name = "Wallet key not found in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet key not found in session\"}"), @ExampleObject(name = "Missing required params", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Issuer and credential type are required\"}"), @ExampleObject(name = "Wallet ID is null or blank", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet ID cannot be null or blank\"}"), @ExampleObject(name = "Issuer ID is null or blank", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Issuer ID cannot be null or blank\"}")})) + @ApiResponse(responseCode = "500", description = "Internal server error - error occurred while serializing the VC response, encrypting the credential, or storing it", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "Credential already exists", value = "{\"errorCode\": \"credential_download_error\", \"errorMessage\": \"Duplicate credential for issuer and type\"}"), @ExampleObject(name = "Issuer config error", value = "{\"errorCode\": \"credential_download_error\", \"errorMessage\": \"Unable to fetch issuer configuration\"}"), @ExampleObject(name = "Failed to generate VC request", value = "{\"errorCode\": \"credential_download_error\", \"errorMessage\": \"Unable to generate credential request\"}"), @ExampleObject(name = "Signature verification failed", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"), @ExampleObject(name = "Unexpected server error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}")})) + @ApiResponse(responseCode = "503", description = "Service unavailable - error while fetching issuer or auth server wellknown, downloading credential, or DB connection failure", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "API is not accessible", value = "{\"errorCode\": \"credential_download_error\", \"errorMessage\": \"Failed to download and store the credential\"}"), @ExampleObject(name = "Failed to download credential", value = "{\"errorCode\": \"server_unavailable\", \"errorMessage\": \"Unable to download credential from issuer\"}"), @ExampleObject(name = "Database connection failure", value = "{\"errorCode\": \"database_unavailable\", \"errorMessage\": \"Failed to connect to the database\"}")})) @PostMapping public ResponseEntity downloadCredential( @PathVariable("walletId") @NotBlank(message = "Wallet ID cannot be blank") String walletId, @@ -134,13 +135,13 @@ public ResponseEntity downloadCredential( * @return List of Verifiable Credential details. * @throws InvalidRequestException If session or wallet ID is invalid. */ - @Operation(summary = "Fetch all credentials for a given wallet", description = "This API retrieves all credentials associated with the specified wallet, identified by its unique wallet ID. The credentials are returned based on the provided locale. The user's session is authenticated to ensure access to the wallet. If successful, a list of Verifiable Credentials is returned; otherwise, an appropriate error response is returned.", operationId = "fetchAllCredentialsForGivenWallet", security = @SecurityRequirement(name = "SessionAuth"), parameters = { - @Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet", schema = @Schema(type = "string")), - @Parameter(name = "locale", in = ParameterIn.QUERY, required = false, description = "The locale for credential retrieval", schema = @Schema(type = "string", defaultValue = "en")) - }) - @ApiResponse(responseCode = "200", description = "Successfully retrieved all credentials for the wallet", content = @Content(mediaType = "application/json", array = @ArraySchema(schema = @Schema(implementation = VerifiableCredentialResponseDTO.class)))) - @ApiResponse(responseCode = "400", description = "Bad Request - Invalid wallet ID or session", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-053\", \"errorMessage\": \"Invalid wallet ID or missing parameters\"}"))) - @ApiResponse(responseCode = "500", description = "Internal Server Error - Error occurred while fetching credentials", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-054\", \"errorMessage\": \"Error occurred while fetching credentials for wallet\"}"))) + @Operation(summary = "Fetch all credentials for the given wallet", description = "This API is secured using session-based authentication. When a request is made, the session ID is extracted from the Cookie header and used to fetch session details from Redis for authentication. It then retrieves the wallet key from the session and uses it to decrypt all stored Verifiable Credentials for the given wallet. If successful, it returns a list of credentials otherwise an appropriate error is returned.", operationId = "fetchAllCredentialsForWallet", security = @SecurityRequirement(name = "SessionAuth"), parameters = { + @Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the user's wallet from where the credential will be fetched", schema = @Schema(type = "string")), + @Parameter(name = "locale", in = ParameterIn.QUERY, required = true, description = "Locale is used to determine the language in which credentials should be rendered", schema = @Schema(type = "string"))}) + @ApiResponse(responseCode = "200", description = "Credentials retrieved successfully", content = @Content(mediaType = "application/json", array = @ArraySchema(schema = @Schema(implementation = VerifiableCredentialResponseDTO.class)), examples = @ExampleObject(value = SwaggerExampleConstants.FETCH_ALL_CREDENTIALS_OF_WALLET_SUCCESS))) + @ApiResponse(responseCode = "400", description = "Bad request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "Invalid Wallet Id", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Invalid Wallet ID. Session and request Wallet ID do not match\"}"), @ExampleObject(name = "Wallet key not found in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet key not found in session\"}")})) + @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"))) + @ApiResponse(responseCode = "503", description = "Service unavailable", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Database connection failure", value = "{\"errorCode\": \"database_unavailable\", \"errorMessage\": \"Failed to connect to the database\"}"))) @GetMapping public ResponseEntity> fetchAllCredentialsForGivenWallet( @PathVariable("walletId") @NotBlank(message = "Wallet ID cannot be blank") String walletId, @@ -173,16 +174,16 @@ public ResponseEntity> fetchAllCredentials * @return The Verifiable Credential as a PDF stream. * @throws InvalidRequestException If session or parameters are invalid. */ - @Operation(summary = "Fetch a specific Verifiable Credential", description = "This API retrieves a specific Verifiable Credential from the given wallet, identified by wallet and credential IDs. The locale parameter is used for localization, and the action parameter determines whether the credential is displayed inline or downloaded as a PDF. The user's session is authenticated to ensure access. If successful, the credential is returned as a PDF file; otherwise, an appropriate error response is returned.", operationId = "getVerifiableCredential", security = @SecurityRequirement(name = "SessionAuth"), parameters = { - @Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet", schema = @Schema(type = "string")), - @Parameter(name = "credentialId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the Verifiable Credential", schema = @Schema(type = "string")), - @Parameter(name = "locale", in = ParameterIn.QUERY, required = false, description = "The locale for credential retrieval", schema = @Schema(type = "string", defaultValue = "en")), - @Parameter(name = "action", in = ParameterIn.QUERY, required = false, description = "Determines whether the credential is displayed inline or downloaded. Default is inline.", schema = @Schema(type = "string", defaultValue = "inline")) - }) - @ApiResponse(responseCode = "200", description = "Successfully fetched the Verifiable Credential", content = @Content(mediaType = "application/pdf", examples = @ExampleObject(value = "{ \"credentialId\": \"123e4567-e89b-12d3-a456-426614174000\", \"fileName\": \"credential.pdf\" }"))) - @ApiResponse(responseCode = "400", description = "Bad Request - Invalid wallet ID, credential ID, or session", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-053\", \"errorMessage\": \"Invalid wallet or credential ID\"}"))) - @ApiResponse(responseCode = "404", description = "Credential not found", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-053\", \"errorMessage\": \"Credential not found\"}"))) - @ApiResponse(responseCode = "500", description = "Internal Server Error - Error occurred while processing credential", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-054\", \"errorMessage\": \"Error occurred while fetching the Verifiable Credential\"}"))) + @Operation(summary = "Fetch a specific Verifiable Credential", description = "This API is protected using session-based authentication. When a request is received, the session ID is extracted from the Cookie header and used to fetch session data from Redis for user authentication. Upon successful authentication, the wallet key is retrieved from the session and used to decrypt the credential data obtained from the database.\n\nThe API retrieves a specific Verifiable Credential based on the provided wallet ID and credential ID. Depending on the action query parameter (inline or download) received in the request, the Content-Disposition header in the response is adjusted to either display the credential in the browser or prompt a file download. On success, the API returns the credential as a PDF byte stream. In case of any errors, an appropriate error response is returned.", operationId = "fetchVerifiableCredentialById", security = @SecurityRequirement(name = "SessionAuth"), parameters = { + @Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the user's wallet", schema = @Schema(type = "string")), + @Parameter(name = "credentialId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the Verifiable Credential to be retrieved", schema = @Schema(type = "string")), + @Parameter(name = "locale", in = ParameterIn.QUERY, required = true, description = "Language preference in which the user expects the Verifiable Credential to be rendered", schema = @Schema(type = "string")), + @Parameter(name = "action", in = ParameterIn.QUERY, required = false, description = "Controls how the credential should be displayed. If sent as download, the response will include a header to download the file. Defaults to inline.", schema = @Schema(type = "string", defaultValue = "inline"))}) + @ApiResponse(responseCode = "200", description = "Verifiable Credential fetched successfully", headers = @Header(name = HttpHeaders.CONTENT_DISPOSITION, description = "Indicates if the verifiable credential is displayed inline or downloaded", schema = @Schema(type = "string", example = "inline; filename=\"credential.pdf\"")), content = @Content(mediaType = "application/pdf", schema = @Schema(type = "string", format = "binary"), examples = @ExampleObject(value = "PDF content in Binary Format"))) + @ApiResponse(responseCode = "400", description = "Bad request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "Invalid Wallet Id", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Invalid Wallet ID. Session and request Wallet ID do not match\"}"), @ExampleObject(name = "Wallet key not found in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet key not found in session\"}")})) + @ApiResponse(responseCode = "404", description = "Not Found - Credential not found for given Wallet ID and Credential ID", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "No credentials found", value = "{\"errorCode\": \"resource_not_found\", \"errorMessage\": \"The requested resource doesn’t exist.\"}"))) + @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "Failed to decrypt the Credential", value = "{\"errorCode\": \"credential_fetch_error\", \"errorMessage\": \"Decryption failed\"}"), @ExampleObject(name = "Credential Type is invalid", value = "{\"errorCode\": \"credential_fetch_error\", \"errorMessage\": \"Invalid credential type configuration\"}"), @ExampleObject(name = "Exception occurred while fetching Issuer config", value = "{\"errorCode\": \"credential_download_error\", \"errorMessage\": \"Unable to fetch issuer configuration\"}"), @ExampleObject(name = "Exception occurred when generating PDF", value = "{\"errorCode\": \"credential_download_error\", \"errorMessage\": \"Failed to generate credential PDF\"}"), @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}")})) + @ApiResponse(responseCode = "503", description = "Service unavailable", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Database connection failure", value = "{\"errorCode\": \"database_unavailable\", \"errorMessage\": \"Failed to connect to the database\"}"))) @GetMapping("/{credentialId}") public ResponseEntity getVerifiableCredential( @PathVariable("walletId") @NotBlank(message = "Wallet ID cannot be blank") String walletId, diff --git a/src/main/java/io/mosip/mimoto/controller/WalletsController.java b/src/main/java/io/mosip/mimoto/controller/WalletsController.java index be1891f51..63cf01fde 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletsController.java @@ -57,8 +57,9 @@ public WalletsController(WalletService walletService) { */ @Operation(summary = "Create a new wallet", description = "This API is secured using session-based authentication. The session ID is extracted from the Cookie header and used to retrieve session details from Redis for authentication. The user ID is obtained from the session and used with the provided wallet name and PIN to create a new wallet in the database. If successful, a unique identifier for the wallet is returned; otherwise, an appropriate error response is provided.", operationId = "createWallet", security = @SecurityRequirement(name = "SessionAuth")) @ApiResponse(responseCode = "200", description = "Wallet created successfully", content = @Content(mediaType = "application/json", schema = @Schema(type = "string", description = "Unique identifier of the Wallet stored in the database"), examples = @ExampleObject(name = "Success response", value = "d94a2e70-1234-4f2f-9eae-98765"))) - @ApiResponse(responseCode = "400", description = "Invalid wallet creation request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Invalid request", value = "{\"errorCode\": \"RESIDENT-APP-050\", \"errorMessage\": \"Pin should be numeric with 4 or 6 digits.\"}"))) - @ApiResponse(responseCode = "500", description = "Internal server error while creating wallet", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected server error", value = "{\"errorCode\": \"RESIDENT-APP-050\", \"errorMessage\": \"An unexpected error occurred while creating the wallet\"}"))) + @ApiResponse(responseCode = "400", description = "Invalid wallet creation request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "User ID is not present in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"User ID not found in session\"}"), @ExampleObject(name = "Invalid User ID", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"User ID cannot be null or empty\"}"), @ExampleObject(name = "Invalid Wallet name", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet name must be alphanumeric with allowed special characters\"}"), @ExampleObject(name = "Invalid Wallet Pin", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"PIN must be numeric with 4 or 6 digits\"}")})) + @ApiResponse(responseCode = "500", description = "Internal server error while creating wallet", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"))) + @ApiResponse(responseCode = "503", description = "Service unavailable", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Database connection failure", value = "{\"errorCode\": \"database_unavailable\", \"errorMessage\": \"Failed to connect to the database\"}"))) @PostMapping public ResponseEntity createWallet( @RequestBody @Valid WalletRequestDto wallet, @@ -81,8 +82,10 @@ public ResponseEntity createWallet( * @throws InvalidRequestException If the request fails. */ @Operation(summary = "Retrieve all wallets for the user", description = "This API is secured using session-based authentication. The session ID is extracted from the Cookie header to authenticate the user. The user's ID is obtained from the session stored in Redis, and all wallets associated with the user are fetched from the database. If successful, the list of wallets is returned; otherwise, an appropriate error response is returned.", operationId = "getWallets", security = @SecurityRequirement(name = "SessionAuth")) - @ApiResponse(responseCode = "200", description = "List of wallets retrieved successfully", content = @Content(mediaType = "application/json", array = @ArraySchema(schema = @Schema(implementation = WalletResponseDto.class)), examples = @ExampleObject(name = "Success response", value = SwaggerExampleConstants.FETCH_ALL_WALLETS_OF_USER_SUCCESS))) - @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected server error", value = "{\"errorCode\": \"RESIDENT-APP-051\", \"errorMessage\": \"An unexpected error occurred while retrieving user wallets\"}"))) + @ApiResponse(responseCode = "200", description = "List of wallets retrieved successfully", content = @Content(mediaType = "application/json", array = @ArraySchema(schema = @Schema(implementation = WalletResponseDto.class)), examples = @ExampleObject(name = "Success response", value = "[{\"walletId\": \"123e4567-e89b-12d3-a456-426614174000\"}, {\"walletId\": \"223e4567-e89b-12d3-a456-426614174001\"}]"))) + @ApiResponse(responseCode = "400", description = "Invalid Wallets fetching request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "User ID is not present in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"User ID not found in session\"}"))) + @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"))) + @ApiResponse(responseCode = "503", description = "Service unavailable", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Database connection failure", value = "{\"errorCode\": \"database_unavailable\", \"errorMessage\": \"Failed to connect to the database\"}"))) @GetMapping public ResponseEntity> getWallets(HttpSession httpSession) throws InvalidRequestException { String userId = (String) httpSession.getAttribute(SessionKeys.USER_ID); @@ -107,7 +110,9 @@ public ResponseEntity> getWallets(HttpSession httpSessio @Operation(summary = "Unlock an existing Wallet", description = "This API is secured using session-based authentication. The session ID is extracted from the Cookie header to authenticate the user. The user's ID is obtained from the session, and the provided wallet ID and PIN are used to fetch the wallet key, which is stored in the session. If successful, the wallet ID is returned; otherwise, an appropriate error response is returned.", operationId = "unlockWallet", security = @SecurityRequirement(name = "SessionAuth"), parameters = {@Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet to be unlocked", schema = @Schema(type = "string"))}, requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody(required = true, content = @Content(mediaType = "application/json", schema = @Schema(implementation = WalletRequestDto.class)))) @ApiResponse(responseCode = "200", description = "Wallet unlocked successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = WalletResponseDto.class), examples = @ExampleObject(value = "{\"walletId\": \"123e4567-e89b-12d3-a456-426614174000\"}"))) @ApiResponse(responseCode = "400", description = "Invalid wallet ID or PIN", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-051\", \"errorMessage\": \"Exception occurred due to an incorrect pin to unlock the wallet\"}"))) + @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-051\", \"errorMessage\": \"Exception occurred due to an incorrect pin to unlock the wallet\"}"))) @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected server error", value = "{\"errorCode\": \"RESIDENT-APP-051\", \"errorMessage\": \"An unexpected error occurred while retrieving the wallet details\"}"))) + @ApiResponse(responseCode = "503", description = "Service unavailable", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(value = "{\"errorCode\": \"database_unavailable\", \"errorMessage\": \"Failed to connect to the database\"}"))) @PostMapping("/{walletId}/unlock") public ResponseEntity unlockWallet( @PathVariable("walletId") @NotBlank(message = "Wallet ID cannot be blank") String walletId, diff --git a/src/main/java/io/mosip/mimoto/service/WalletService.java b/src/main/java/io/mosip/mimoto/service/WalletService.java index e0da2c218..c07839329 100644 --- a/src/main/java/io/mosip/mimoto/service/WalletService.java +++ b/src/main/java/io/mosip/mimoto/service/WalletService.java @@ -41,5 +41,5 @@ public interface WalletService { * @return List of wallet responses. * @throws InvalidRequestException If the request fails. */ - List getWallets(String userId) throws InvalidRequestException; + List getWallets(String userId); } diff --git a/src/main/java/io/mosip/mimoto/util/WalletUtil.java b/src/main/java/io/mosip/mimoto/util/WalletUtil.java index 7f737aeb1..dd548acc9 100644 --- a/src/main/java/io/mosip/mimoto/util/WalletUtil.java +++ b/src/main/java/io/mosip/mimoto/util/WalletUtil.java @@ -85,11 +85,11 @@ public static String getSessionWalletKey(HttpSession session) { public static void validateWalletId(HttpSession session, String walletIdFromRequest) { Object sessionWalletId = session.getAttribute(SessionKeys.WALLET_ID); - if (sessionWalletId == null) throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Wallet Id is missing in session"); + if (sessionWalletId == null) throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Wallet ID is missing in session"); String walletIdInSession = sessionWalletId.toString(); if (!walletIdInSession.equals(walletIdFromRequest)) { - throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Invalid Wallet Id. Session and request Wallet Id do not match"); + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Invalid Wallet ID. Session and request Wallet ID do not match"); } } } \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java index c5c9332cd..992c18ded 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java @@ -120,7 +120,7 @@ public void shouldThrowInvalidRequestForWalletIdMismatch() throws Exception { .sessionAttr("wallet_key", walletKey)) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.errorCode").value("invalid_request")) - .andExpect(jsonPath("$.errorMessage").value("invalid_request --> Invalid Wallet Id. Session and request Wallet Id do not match")); + .andExpect(jsonPath("$.errorMessage").value("invalid_request --> Invalid Wallet ID. Session and request Wallet ID do not match")); } @Test @@ -231,7 +231,7 @@ public void shouldThrowInvalidRequestForWalletIdMismatchInFetchAll() throws Exce .sessionAttr("wallet_key", walletKey)) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.errorCode").value("invalid_request")) - .andExpect(jsonPath("$.errorMessage").value("invalid_request --> Invalid Wallet Id. Session and request Wallet Id do not match")); + .andExpect(jsonPath("$.errorMessage").value("invalid_request --> Invalid Wallet ID. Session and request Wallet ID do not match")); } // Tests for getVerifiableCredential From dc04f65504b4fca9ca9fd7617715e1a5cd920abd Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 29 Apr 2025 12:04:18 +0530 Subject: [PATCH 567/860] [INJIWEB-1528] update error codes in openapi documentation and swagger annotations for storing user data into db endpoint in login flow Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- docs/api-documentation-openapi.json | 28 +++++++++++++------ .../mimoto/controller/UsersController.java | 3 +- .../mosip/mimoto/service/IssuersService.java | 3 +- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index 149868bef..4d3a4b055 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -2721,23 +2721,35 @@ } }, "500": { - "description": "Internal server error", + "description": "Internal server error - any error occurred while decrypting the data or fetching the data from the database", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" }, "examples": { - "Database connection failure": { + "Unexpected Server Error": { "value": { - "errorCode": "RESIDENT-APP-047", - "errorMessage": "Failed to connect to the shared database while fetching User Metadata data from the database" + "errorCode": "internal_server_error", + "errorMessage": "We are unable to process request now" } - }, - "Unexpected server error": { + } + } + } + } + }, + "503": { + "description": "Service unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "Database connection failure": { "value": { - "errorCode": "RESIDENT-APP-049", - "errorMessage": "An unexpected error occurred while downloading and storing user metadata into database" + "errorCode": "database_unavailable", + "errorMessage": "Failed to connect to the database" } } } diff --git a/src/main/java/io/mosip/mimoto/controller/UsersController.java b/src/main/java/io/mosip/mimoto/controller/UsersController.java index 295aa2967..71d2ef6eb 100644 --- a/src/main/java/io/mosip/mimoto/controller/UsersController.java +++ b/src/main/java/io/mosip/mimoto/controller/UsersController.java @@ -47,7 +47,8 @@ public class UsersController { @Operation(summary = "Retrieve user metadata from the database", description = "This API is secured using session-based authentication. When a request is made, the server retrieves the session ID from the Cookie header and uses it to fetch session details from Redis. From the session, it extracts the user's unique identifier (typically the sub field provided by the identity provider) along with the clientRegistrationId. These values are then used to retrieve the user's metadata from the database. If successful, the API returns the user's profile information. If any issue occurs such as missing user data or server error then an appropriate error response is returned.", operationId = "getUserProfileFromDB", security = @SecurityRequirement(name = "SessionAuth")) @ApiResponse(responseCode = "200", description = "User profile retrieved successfully from the Database", content = @Content(mediaType = "application/json", schema = @Schema(implementation = UserMetadataDTO.class), examples = @ExampleObject(name = "Success response", value = SwaggerExampleConstants.FETCH_USER_PROFILE_SUCCESS))) @ApiResponse(responseCode = "404", description = "User data not found in the database", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "User not found in the Database", value = "{\"errorCode\": \"invalid_user\", \"errorMessage\": \"User not found. Please check your credentials or login again\"}"))) - @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "Database connection failure", value = "{\"errorCode\": \"RESIDENT-APP-047\", \"errorMessage\": \"Failed to connect to the shared database while fetching User Metadata data from the database\"}"), @ExampleObject(name = "Unexpected server error", value = "{\"errorCode\": \"RESIDENT-APP-049\", \"errorMessage\": \"An unexpected error occurred while retrieving user profile from the database\"}"), @ExampleObject(name = "User metadata not found in the Database", value = "{\"errorCode\": \"RESIDENT-APP-049\", \"errorMessage\": \"An unexpected error occurred while downloading and storing user metadata into database\"}")})) + @ApiResponse(responseCode = "500", description = "Internal server error - any error occurred while decrypting the data or fetching the data from the database", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"))) + @ApiResponse(responseCode = "503", description = "Service unavailable", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Database connection failure", value = "{\"errorCode\": \"database_unavailable\", \"errorMessage\": \"Failed to connect to the database\"}"))) @GetMapping("/db") public ResponseEntity getUserProfile(Authentication authentication, HttpSession session) { diff --git a/src/main/java/io/mosip/mimoto/service/IssuersService.java b/src/main/java/io/mosip/mimoto/service/IssuersService.java index 9cd58c252..a205826ce 100644 --- a/src/main/java/io/mosip/mimoto/service/IssuersService.java +++ b/src/main/java/io/mosip/mimoto/service/IssuersService.java @@ -7,6 +7,7 @@ import io.mosip.mimoto.exception.AuthorizationServerWellknownResponseException; import io.mosip.mimoto.exception.InvalidIssuerIdException; import io.mosip.mimoto.exception.InvalidWellknownResponseException; +import jakarta.validation.constraints.NotBlank; import java.io.IOException; @@ -19,5 +20,5 @@ public interface IssuersService { CredentialIssuerConfiguration getIssuerConfiguration(String issuerId) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException; - IssuerConfig getIssuerConfig(String issuerId, String credentialType) throws ApiNotAccessibleException, IOException, InvalidIssuerIdException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException; + IssuerConfig getIssuerConfig(String issuerId, @NotBlank String credentialType) throws ApiNotAccessibleException, IOException, InvalidIssuerIdException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException; } From 50a526c02607ce2583e6bf6cf512cd6d493f53af Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 29 Apr 2025 12:58:10 +0530 Subject: [PATCH 568/860] [INJIWEB-1528] update error codes in openapi documentation and swagger annotations for wallet unlock endpoint in login flow and update walletValidator file for better reusability Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../config/mimoto-default.properties | 2 +- docs/api-documentation-openapi.json | 31 ++++++---------- .../mimoto/controller/WalletsController.java | 9 ++--- .../service/impl/WalletServiceImpl.java | 10 +++-- .../io/mosip/mimoto/util/WalletValidator.java | 37 +++++++++++++------ .../mimoto/service/WalletServiceTest.java | 5 ++- .../mimoto/util/WalletValidatorTest.java | 19 ++++++---- .../resources/application-test.properties | 2 +- 8 files changed, 66 insertions(+), 49 deletions(-) diff --git a/docker-compose/config/mimoto-default.properties b/docker-compose/config/mimoto-default.properties index 24e715eea..aa308b411 100644 --- a/docker-compose/config/mimoto-default.properties +++ b/docker-compose/config/mimoto-default.properties @@ -309,7 +309,7 @@ mosip.inji.qr.data.size.limit=10000 mosip.inji.qr.code.height=650 mosip.inji.qr.code.width=650 mosip.inji.user.wallet.pin.validation.regex=^\\d{4,6}$ -mosip.inji.user.wallet.name.validation.regex=^[A-Za-z0-9 _.-]{1,50}$ +mosip.inji.user.wallet.name.validation.regex=^[A-Za-z0-9 _.-]{0,50}$ #OVP Config mosip.inji.ovp.qrdata.pattern=INJI_OVP://http://localhost:${server.port}/v1/mimoto/authorize?response_type=vp_token&resource=%s&presentation_definition=%s diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index 4d3a4b055..23a60986e 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -3654,23 +3654,17 @@ "errorCode": "invalid_request", "errorMessage": "Wallet not found" } - } - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - }, - "examples": { - "Invalid PIN": { + }, + "Invalid User ID": { + "value": { + "errorCode": "invalid_request", + "errorMessage": "User ID cannot be null or empty" + } + }, + "Invalid Wallet Pin": { "value": { - "errorCode": "RESIDENT-APP-051", - "errorMessage": "Exception occurred due to an incorrect pin to unlock the wallet" + "errorCode": "invalid_request", + "errorMessage": "PIN must be numeric with 4 or 6 digits" } } } @@ -3678,7 +3672,7 @@ } }, "500": { - "description": "Internal server error", + "description": "Internal server error - any error occurred while decrypting the Wallet key with Wallet PIN or when fetching Wallet details from the database", "content": { "application/json": { "schema": { @@ -3878,8 +3872,7 @@ } }, "required": [ - "walletPin", - "walletName" + "walletPin" ] }, "WalletResponseDto": { diff --git a/src/main/java/io/mosip/mimoto/controller/WalletsController.java b/src/main/java/io/mosip/mimoto/controller/WalletsController.java index 63cf01fde..45c68236f 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletsController.java @@ -108,11 +108,10 @@ public ResponseEntity> getWallets(HttpSession httpSessio * @throws InvalidRequestException If the wallet or PIN is invalid. */ @Operation(summary = "Unlock an existing Wallet", description = "This API is secured using session-based authentication. The session ID is extracted from the Cookie header to authenticate the user. The user's ID is obtained from the session, and the provided wallet ID and PIN are used to fetch the wallet key, which is stored in the session. If successful, the wallet ID is returned; otherwise, an appropriate error response is returned.", operationId = "unlockWallet", security = @SecurityRequirement(name = "SessionAuth"), parameters = {@Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet to be unlocked", schema = @Schema(type = "string"))}, requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody(required = true, content = @Content(mediaType = "application/json", schema = @Schema(implementation = WalletRequestDto.class)))) - @ApiResponse(responseCode = "200", description = "Wallet unlocked successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = WalletResponseDto.class), examples = @ExampleObject(value = "{\"walletId\": \"123e4567-e89b-12d3-a456-426614174000\"}"))) - @ApiResponse(responseCode = "400", description = "Invalid wallet ID or PIN", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-051\", \"errorMessage\": \"Exception occurred due to an incorrect pin to unlock the wallet\"}"))) - @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(value = "{\"errorCode\": \"RESIDENT-APP-051\", \"errorMessage\": \"Exception occurred due to an incorrect pin to unlock the wallet\"}"))) - @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected server error", value = "{\"errorCode\": \"RESIDENT-APP-051\", \"errorMessage\": \"An unexpected error occurred while retrieving the wallet details\"}"))) - @ApiResponse(responseCode = "503", description = "Service unavailable", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(value = "{\"errorCode\": \"database_unavailable\", \"errorMessage\": \"Failed to connect to the database\"}"))) + @ApiResponse(responseCode = "200", description = "Wallet unlocked successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = WalletResponseDto.class), examples = @ExampleObject(name = "Success response", value = "{\"walletId\": \"123e4567-e89b-12d3-a456-426614174000\"}"))) + @ApiResponse(responseCode = "400", description = "Invalid Wallets fetching request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "User ID is not present in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"User ID not found in session\"}"), @ExampleObject(name = "Wallet not found", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet not found\"}"), @ExampleObject(name = "Invalid User ID", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"User ID cannot be null or empty\"}"), @ExampleObject(name = "Invalid Wallet Pin", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"PIN must be numeric with 4 or 6 digits\"}")})) + @ApiResponse(responseCode = "500", description = "Internal server error - any error occurred while decrypting the Wallet key with Wallet PIN or when fetching Wallet details from the database", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"))) + @ApiResponse(responseCode = "503", description = "Service unavailable", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Database connection failure", value = "{\"errorCode\": \"database_unavailable\", \"errorMessage\": \"Failed to connect to the database\"}"))) @PostMapping("/{walletId}/unlock") public ResponseEntity unlockWallet( @PathVariable("walletId") @NotBlank(message = "Wallet ID cannot be blank") String walletId, diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java index 05a6ff3b0..7deda4c79 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java @@ -1,6 +1,5 @@ package io.mosip.mimoto.service.impl; -import io.mosip.mimoto.dbentity.Wallet; import io.mosip.mimoto.dto.WalletResponseDto; import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.exception.InvalidRequestException; @@ -13,7 +12,6 @@ import org.springframework.stereotype.Service; import java.util.List; -import java.util.Optional; import java.util.stream.Collectors; /** @@ -37,7 +35,10 @@ public WalletServiceImpl(WalletRepository repository, WalletUtil walletUtil, Wal @Override public String createWallet(String userId, String name, String pin) throws InvalidRequestException { log.info("Creating wallet for user: {}, name: {}", userId, name); - validator.validateWalletRequest(userId, name, pin); + + validator.validateUserId(userId); + validator.validateWalletName(name); + validator.validateWalletPin(pin); String walletId = walletUtil.createWallet(userId, name, pin); log.debug("Wallet created successfully: {}", walletId); @@ -49,6 +50,9 @@ public String createWallet(String userId, String name, String pin) throws Invali public String getWalletKey(String userId, String walletId, String pin) throws InvalidRequestException { log.info("Retrieving wallet key for user: {}, wallet: {}", userId, walletId); + validator.validateUserId(userId); + validator.validateWalletPin(pin); + return repository.findByUserIdAndId(userId, walletId) .map(wallet -> walletUtil.decryptWalletKey(wallet.getWalletKey(), pin)) .orElseThrow(() -> { diff --git a/src/main/java/io/mosip/mimoto/util/WalletValidator.java b/src/main/java/io/mosip/mimoto/util/WalletValidator.java index 8b31669c5..226907639 100644 --- a/src/main/java/io/mosip/mimoto/util/WalletValidator.java +++ b/src/main/java/io/mosip/mimoto/util/WalletValidator.java @@ -1,10 +1,8 @@ package io.mosip.mimoto.util; -import io.mosip.mimoto.dto.WalletRequestDto; import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.exception.InvalidRequestException; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @@ -18,30 +16,45 @@ public class WalletValidator { @Value("${mosip.inji.user.wallet.pin.validation.regex:^\\d{4,6}$}") private String pinRegex; - @Value("${mosip.inji.user.wallet.name.validation.regex:^[A-Za-z0-9 _.-]{1,50}$}") + @Value("${mosip.inji.user.wallet.name.validation.regex:^[A-Za-z0-9 _.-]{0,50}$}") private String nameRegex; /** - * Validates a wallet creation request. + * Validates the user ID. * * @param userId The user ID. - * @param name The wallet name. - * @param pin The wallet PIN. - * @throws InvalidRequestException If the request is invalid. + * @throws InvalidRequestException If the User ID is invalid. */ - public void validateWalletRequest(String userId, String name, String pin) throws InvalidRequestException { - log.debug("Validating wallet request for user: {}, name: {}", userId, name); - + public void validateUserId(String userId) throws InvalidRequestException { + log.debug("Validating User: {}", userId); if (userId == null || userId.trim().isEmpty()) { log.warn("Invalid user ID: null or empty"); throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "User ID cannot be null or empty"); } + } - if (name == null || !name.matches(nameRegex)) { - log.warn("Invalid wallet name: {}", name); + /** + * Validates the Wallet name. + * + * @param name The Wallet name. + * @throws InvalidRequestException If the Wallet name is invalid. + */ + public void validateWalletName(String name) throws InvalidRequestException { + log.debug("Validating Wallet name: {}", name); + if (name != null && !name.matches(nameRegex)) { + log.warn("Invalid Wallet name: {}", name); throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Wallet name must be alphanumeric with allowed special characters"); } + } + /** + * Validates the Wallet PIN. + * + * @param pin The Wallet PIN. + * @throws InvalidRequestException If the Wallet PIN is invalid. + */ + public void validateWalletPin(String pin) throws InvalidRequestException { + log.debug("Validating Wallet PIN: {}", pin); if (pin == null || !pin.matches(pinRegex)) { log.warn("Invalid PIN: {}", pin); throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "PIN must be numeric with 4 or 6 digits"); diff --git a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java index 02a632ee7..a1c802d4a 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java @@ -68,7 +68,10 @@ public void shouldCreateWalletSuccessfully() throws Exception { String result = walletService.createWallet(userId, name, pin); assertEquals(newWalletId, result); - verify(walletValidator).validateWalletRequest(userId, name, pin); + verify(walletValidator).validateUserId(userId); + verify(walletValidator).validateWalletName(name); + verify(walletValidator).validateWalletPin(pin); + verify(walletHelper).createWallet(userId, name, pin); } diff --git a/src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java b/src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java index e007005bd..f7bc04c94 100644 --- a/src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java +++ b/src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java @@ -25,14 +25,17 @@ public class WalletValidatorTest { @Test void testValidateWalletRequest_validData() { - walletValidator.validateWalletRequest("user1", "wallet1", "123456"); + walletValidator.validateUserId("user1"); + walletValidator.validateWalletName("wallet1"); + walletValidator.validateWalletPin("123456"); } @Test void testValidatePin_invalidPin() { - InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> { - walletValidator.validateWalletRequest("user1", "My Wallet", "12"); + walletValidator.validateUserId("user1"); + walletValidator.validateWalletName("My Wallet"); + walletValidator.validateWalletPin("12"); }); assertEquals("invalid_request --> PIN must be numeric with 4 or 6 digits", exception.getMessage()); @@ -40,9 +43,10 @@ void testValidatePin_invalidPin() { @Test void testValidateWalletName_invalidName() { - InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> { - walletValidator.validateWalletRequest("user1", "My Wallet!@", "123456"); + walletValidator.validateUserId("user1"); + walletValidator.validateWalletName("My Wallet!@"); + walletValidator.validateWalletPin("123456"); }); assertEquals("invalid_request --> Wallet name must be alphanumeric with allowed special characters", exception.getMessage()); @@ -50,7 +54,8 @@ void testValidateWalletName_invalidName() { @Test void testValidateWalletName_validName() { - - walletValidator.validateWalletRequest("user1", "wallet1", "123456"); + walletValidator.validateUserId("user1"); + walletValidator.validateWalletName("wallet1"); + walletValidator.validateWalletPin("123456"); } } diff --git a/src/test/resources/application-test.properties b/src/test/resources/application-test.properties index a6db0a576..801a67b4c 100644 --- a/src/test/resources/application-test.properties +++ b/src/test/resources/application-test.properties @@ -12,7 +12,7 @@ mosip.inji.vcDownloadPoolInterval=6000 mosip.inji.issuer=residentapp mosip.inji.openId4VCIDownloadVCTimeout=30000 mosip.inji.user.wallet.pin.validation.regex=^\\d{4,6}$ -mosip.inji.user.wallet.name.validation.regex=^[A-Za-z0-9 _.-]{1,50}$ +mosip.inji.user.wallet.name.validation.regex=^[A-Za-z0-9 _.-]{0,50}$ mosipbox.public.url=https://api.dev1.mosip.net public.url=https://api.dev1.mosip.net From cde5fe4f8f08e4cf2f5188143900e680e6cfada7 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 29 Apr 2025 13:44:17 +0530 Subject: [PATCH 569/860] [INJIWEB-1528] add missing schema annoatations for the some of the request or response or error objects used in login flow Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- src/main/java/io/mosip/mimoto/dto/ErrorDTO.java | 3 +++ src/main/java/io/mosip/mimoto/dto/WalletRequestDto.java | 4 ++++ src/main/java/io/mosip/mimoto/dto/WalletResponseDto.java | 2 ++ 3 files changed, 9 insertions(+) diff --git a/src/main/java/io/mosip/mimoto/dto/ErrorDTO.java b/src/main/java/io/mosip/mimoto/dto/ErrorDTO.java index 4d6a3e894..9afae3488 100644 --- a/src/main/java/io/mosip/mimoto/dto/ErrorDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/ErrorDTO.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonAlias; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -26,8 +27,10 @@ public class ErrorDTO implements Serializable { private static final long serialVersionUID = 2452990684776944908L; /** The errorcode. */ + @Schema(description = "It represents the type or category of the error") private String errorCode; + @Schema(description = "A human-readable message providing more details about the error") /** The message. */ @JsonAlias("message") private String errorMessage; diff --git a/src/main/java/io/mosip/mimoto/dto/WalletRequestDto.java b/src/main/java/io/mosip/mimoto/dto/WalletRequestDto.java index 75ca74a2e..a8bfc88ca 100644 --- a/src/main/java/io/mosip/mimoto/dto/WalletRequestDto.java +++ b/src/main/java/io/mosip/mimoto/dto/WalletRequestDto.java @@ -1,13 +1,17 @@ package io.mosip.mimoto.dto; import io.swagger.annotations.ApiModel; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.ToString; @Data @ToString @ApiModel(description = "Model representing a user wallet request") +@Schema(description = "Wallet Request DTO", requiredProperties = {"walletPin"}) public class WalletRequestDto { + @Schema(description = "Name of the Wallet") String walletPin; + @Schema(description = "PIN used to unlock the Wallet") String walletName; } diff --git a/src/main/java/io/mosip/mimoto/dto/WalletResponseDto.java b/src/main/java/io/mosip/mimoto/dto/WalletResponseDto.java index 4758eaa58..895464bab 100644 --- a/src/main/java/io/mosip/mimoto/dto/WalletResponseDto.java +++ b/src/main/java/io/mosip/mimoto/dto/WalletResponseDto.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.dto; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -8,6 +9,7 @@ @AllArgsConstructor @Builder public class WalletResponseDto { + @Schema(description = "Unique identifier of the Wallet") String walletId; } From c6dfd4049b7696efbefca937318e8ffc7e1b9855 Mon Sep 17 00:00:00 2001 From: Praful Rakhade <99539100+prafulrakhade@users.noreply.github.com> Date: Tue, 29 Apr 2025 16:26:05 +0530 Subject: [PATCH 570/860] [MOSIP-39939] & [MOSIP-41033], Added volume for encryptionkeystore.p12 also added redis deployment script for mimoto. Signed-off-by: techno-467 --- deploy/mimoto/install.sh | 88 +++++++++++++++++++------------ deploy/mimoto/softhsm-values.yaml | 7 +++ 2 files changed, 60 insertions(+), 35 deletions(-) create mode 100644 deploy/mimoto/softhsm-values.yaml diff --git a/deploy/mimoto/install.sh b/deploy/mimoto/install.sh index 3ee4dd3d0..b11c43e2c 100755 --- a/deploy/mimoto/install.sh +++ b/deploy/mimoto/install.sh @@ -9,6 +9,8 @@ fi NS=injiweb CHART_VERSION=0.0.1-develop KEYGEN_CHART_VERSION=1.3.0-beta.2 +SOFTHSM_NS=softhsm +SOFTHSM_CHART_VERSION=1.3.0-beta.2 echo Create $NS namespace kubectl create ns $NS @@ -44,6 +46,57 @@ function installing_mimoto() { ENABLE_INSECURE='--set enable_insecure=true'; fi + echo "Do you want to use SoftHSM or .p12 keystore for key management?" + echo "1) SoftHSM" + echo "2) .p12 keystore" + read -p "Enter 1 or 2 [default: 2]: " keystore_choice + keystore_choice=${keystore_choice:-2} + + if [[ $keystore_choice == 1 ]]; then + echo Installing SoftHSM + helm -n $SOFTHSM_NS install softhsm-mimoto mosip/softhsm -f softhsm-values.yaml --version $SOFTHSM_CHART_VERSION --wait + + echo Copy SoftHSM configMap and Secret to $NS and config-server + $COPY_UTIL configmap softhsm-mimoto-share softhsm $NS + $COPY_UTIL secret softhsm-mimoto softhsm config-server + $COPY_UTIL secret softhsm-mimoto softhsm $NS + kubectl -n config-server set env --keys=security-pin --from secret/softhsm-mimoto deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_SOFTHSM_MIMOTO_ + else + default_enable_volume=true # Default to true for mimoto + read -p "Would you like to enable volume (true/false) : [ default : true ] : " enable_volume + enable_volume=${enable_volume:-$default_enable_volume} + MIMOTO_KEYGEN_HELM_ARGS='--set springConfigNameEnv="mimoto"' + MIMOTO_HELM_ARGS='' + + if [[ $enable_volume == 'true' ]]; then + default_volume_size=200M + read -p "Provide the size for volume [ default : 200M ]" volume_size + volume_size=${volume_size:-$default_volume_size} + volume_mount_path='/home/mosip/encryption' + PVC_CLAIM_NAME='mimoto-keygen-keymanager' + + # Check if PVC already exists + if kubectl -n $NS get pvc "$PVC_CLAIM_NAME" >/dev/null 2>&1; then + echo "PVC $PVC_CLAIM_NAME already exists. Skipping keygen job." + else + echo "Creating new PVC and running keygen job" + MIMOTO_KEYGEN_HELM_ARGS="--set persistence.enabled=true \ + --set volumePermissions.enabled=true \ + --set persistence.size=$volume_size \ + --set persistence.mountDir=\"$volume_mount_path\" \ + --set springConfigNameEnv='mimoto' \ + --set persistence.pvc_claim_name=\"$PVC_CLAIM_NAME\" \ + --set keysDir=\"$volume_mount_path\" \ + --set keyStore.fileName=\"encryptionkeystore.p12\" \ + --set skipIfFileExists=true" + + echo "MIMOTO KEYGEN HELM ARGS $MIMOTO_KEYGEN_HELM_ARGS" + echo "Running mimoto keygen" + helm -n $NS install mimoto-keygen mosip/keygen $MIMOTO_KEYGEN_HELM_ARGS --wait --wait-for-jobs --version $KEYGEN_CHART_VERSION + fi + fi + fi + echo "Copy secrets to config-server namespace" ../copy_cm_func.sh secret mimoto-wallet-binding-partner-api-key injiweb config-server ../copy_cm_func.sh secret mimoto-oidc-partner-clientid injiweb config-server @@ -57,41 +110,6 @@ function installing_mimoto() { kubectl -n config-server get deploy -o name | xargs -n1 -t kubectl -n config-server rollout status - default_enable_volume=true # Default to true for mimoto - read -p "Would you like to enable volume (true/false) : [ default : true ] : " enable_volume - enable_volume=${enable_volume:-$default_enable_volume} - MIMOTO_KEYGEN_HELM_ARGS='--set springConfigNameEnv="mimoto"' - MIMOTO_HELM_ARGS='' - - if [[ $enable_volume == 'true' ]]; then - default_volume_size=200M - read -p "Provide the size for volume [ default : 200M ]" volume_size - volume_size=${volume_size:-$default_volume_size} - volume_mount_path='/home/mosip/encryption' - PVC_CLAIM_NAME='mimoto-keygen-keymanager' - - # Check if PVC already exists - if kubectl -n $NS get pvc "$PVC_CLAIM_NAME" >/dev/null 2>&1; then - echo "PVC $PVC_CLAIM_NAME already exists. Skipping keygen job." - # Verify if the keystore file exists in the PVC (this would require a temporary pod to check) - # For simplicity, we'll assume if PVC exists, the keystore is there - else - echo "Creating new PVC and running keygen job" - MIMOTO_KEYGEN_HELM_ARGS="--set persistence.enabled=true \ - --set volumePermissions.enabled=true \ - --set persistence.size=$volume_size \ - --set persistence.mountDir=\"$volume_mount_path\" \ - --set springConfigNameEnv='mimoto' \ - --set persistence.pvc_claim_name=\"$PVC_CLAIM_NAME\" \ - --set keysDir=\"$volume_mount_path\" \ - --set keyStore.fileName=\"encryptionkeystore.p12\" \ - --set skipIfFileExists=true" # Add this flag to skip if file exists - - echo "MIMOTO KEYGEN HELM ARGS $MIMOTO_KEYGEN_HELM_ARGS" - echo "Running mimoto keygen" - helm -n $NS install mimoto-keygen mosip/keygen $MIMOTO_KEYGEN_HELM_ARGS --wait --wait-for-jobs --version $KEYGEN_CHART_VERSION - fi - fi echo "Please proceed with generating the Google Client ID and Secret Key required for integration." read -p "Please enter the Google Client ID: " clientId diff --git a/deploy/mimoto/softhsm-values.yaml b/deploy/mimoto/softhsm-values.yaml new file mode 100644 index 000000000..581bbd139 --- /dev/null +++ b/deploy/mimoto/softhsm-values.yaml @@ -0,0 +1,7 @@ +resources: + limits: {} + # cpu: 250m + # memory: 1Gi + requests: + cpu: 100m + memory: 20Mi From e710d9b6a29b631d27e29ae41a653d8a6cef3db8 Mon Sep 17 00:00:00 2001 From: Praful Rakhade <99539100+prafulrakhade@users.noreply.github.com> Date: Tue, 29 Apr 2025 18:31:45 +0530 Subject: [PATCH 571/860] [MOSIP-39939] & [MOSIP-41033], Added volume for encryptionkeystore.p12 also added redis deployment script for mimoto. Signed-off-by: techno-467 --- deploy/mimoto/install.sh | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/deploy/mimoto/install.sh b/deploy/mimoto/install.sh index b11c43e2c..89819c878 100755 --- a/deploy/mimoto/install.sh +++ b/deploy/mimoto/install.sh @@ -49,7 +49,8 @@ function installing_mimoto() { echo "Do you want to use SoftHSM or .p12 keystore for key management?" echo "1) SoftHSM" echo "2) .p12 keystore" - read -p "Enter 1 or 2 [default: 2]: " keystore_choice + echo "3) External HSM" + read -p "Enter 1, 2 or 3 [default: 2]: " keystore_choice keystore_choice=${keystore_choice:-2} if [[ $keystore_choice == 1 ]]; then @@ -61,6 +62,19 @@ function installing_mimoto() { $COPY_UTIL secret softhsm-mimoto softhsm config-server $COPY_UTIL secret softhsm-mimoto softhsm $NS kubectl -n config-server set env --keys=security-pin --from secret/softhsm-mimoto deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_SOFTHSM_MIMOTO_ + elif [[ $keystore_choice == 3 ]]; then + echo "Setting up External HSM configuration" + read -p "Please provide the URL where externalhsm client zip is located: " externalhsmclient + read -p "Please provide the host URL for externalhsm: " externalhsmhosturl + read -p "Please provide the password for the externalhsm: " externalhsmpassword + + # Create configmap and secret for external HSM + kubectl create configmap softhsm-mimoto-share --from-literal=hsm_client_zip_url_env="$externalhsmclient" --from-literal=PKCS11_PROXY_SOCKET="$externalhsmhosturl" -n softhsm --dry-run=client -o yaml | kubectl apply -f - + kubectl create secret generic softhsm-mimoto --from-literal=security-pin="$externalhsmpassword" -n softhsm --dry-run=client -o yaml | kubectl apply -f - + $COPY_UTIL configmap softhsm-mimoto-share softhsm $NS + $COPY_UTIL secret softhsm-mimoto softhsm config-server + $COPY_UTIL secret softhsm-mimoto softhsm $NS + kubectl -n config-server set env --keys=security-pin --from secret/softhsm-mimoto deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_SOFTHSM_MIMOTO_ else default_enable_volume=true # Default to true for mimoto read -p "Would you like to enable volume (true/false) : [ default : true ] : " enable_volume From 0db83fbd263a850fbd7e26677dd1bcb5109aa233 Mon Sep 17 00:00:00 2001 From: Kamlesh Date: Fri, 2 May 2025 15:40:13 +0530 Subject: [PATCH 572/860] [INJIWEB-1528] Fix TokenAuthController Signed-off-by: Kamlesh --- docs/api-documentation-openapi.json | 33 ++++--- .../controller/TokenAuthController.java | 93 ++++++++++++++++--- .../java/io/mosip/mimoto/util/Utilities.java | 9 +- .../controller/TokenAuthControllerTest.java | 23 +++-- 4 files changed, 123 insertions(+), 35 deletions(-) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index 23a60986e..44c207721 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -3761,35 +3761,42 @@ } }, "401": { - "description": "Unauthorized - invalid or expired token", + "description": "Unauthorized - Invalid or expired token.", "content": { "application/json": { "schema": { - "type": "string", - "description": "Error message explaining why the session is not created" + "$ref": "#/components/schemas/Error" }, "examples": { - "Invalid token response": { - "value": "Invalid or expired ID token: please provide a valid token" - }, - "Token not provided": { - "value": "Bearer ID token required" + "InvalidToken": { + "value": { + "errorCode": "invalid_token", + "errorMessage": "Invalid token format" + } } } } } }, "400": { - "description": "Bad Request - Unsupported provider", + "description": "Bad Request - Missing/invalid header or unsupported provider.", "content": { "application/json": { "schema": { - "type": "string", - "description": "Error message explaining why the session is not created" + "$ref": "#/components/schemas/Error" }, "examples": { - "Unsupported provider response": { - "value": "Unsupported provider: provider123" + "UnsupportedProvider": { + "value": { + "errorCode": "INVALID_REQUEST", + "errorMessage": "Unsupported provider: provider123" + } + }, + "MissingToken": { + "value": { + "errorCode": "INVALID_REQUEST", + "errorMessage": "Bearer ID token required." + } } } } diff --git a/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java b/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java index 2ca38ec43..c8463eaa1 100644 --- a/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java +++ b/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java @@ -1,15 +1,18 @@ package io.mosip.mimoto.controller; import io.mosip.mimoto.constant.SwaggerLiteralConstants; +import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.exception.OAuth2AuthenticationException; import io.mosip.mimoto.service.TokenService; import io.mosip.mimoto.service.TokenServiceFactory; +import io.mosip.mimoto.util.Utilities; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.ExampleObject; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; @@ -23,8 +26,6 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; -import java.util.Map; - @RestController @Tag(name = SwaggerLiteralConstants.ID_TOKEN_AUTHENTICATION_NAME, description = SwaggerLiteralConstants.ID_TOKEN_AUTHENTICATION_DESCRIPTION) public class TokenAuthController { @@ -33,7 +34,6 @@ public class TokenAuthController { private static final String SESSION_CREATED = "Session created."; private static final String INVALID_TOKEN_MESSAGE = "Bearer ID token required."; private static final String UNSUPPORTED_PROVIDER_MESSAGE = "Unsupported provider: %s"; - private static final String INVALID_TOKEN_ERROR = "Invalid or expired ID token: %s"; private final TokenServiceFactory tokenServiceFactory; @@ -42,17 +42,88 @@ public TokenAuthController(TokenServiceFactory tokenServiceFactory) { this.tokenServiceFactory = tokenServiceFactory; } - @Operation(summary = "Login and create session using OAuth2 ID token", description = "This API accepts an OAuth2 ID token in the Authorization header and establishes a session by populating Spring Security context.\n\nFetch the ID token from a supported OAuth2 provider (such as Google or Microsoft) and provide it in the request as a Bearer token.", operationId = "loginWithOAuth2IdToken", security = @SecurityRequirement(name = "bearerAuth"), parameters = {@Parameter(name = "provider", in = ParameterIn.PATH, required = true, description = "The OAuth2 provider to use for login. Example values: 'google', 'microsoft', 'facebook'.", schema = @Schema(type = "string", example = "google")), @Parameter(name = "Authorization", in = ParameterIn.HEADER, required = true, description = "The OAuth2 ID token that must be provided in the 'Authorization' header, prefixed with 'Bearer '.", schema = @Schema(type = "string", example = "Bearer "))}) - @ApiResponse(responseCode = "200", description = "Successfully logged in and session created", content = @Content(mediaType = "application/json", schema = @Schema(type = "string", description = "Success message indicating that the session has been created"), examples = @ExampleObject(value = "\"Session created.\""))) - @ApiResponse(responseCode = "401", description = "Unauthorized - invalid or expired token", content = @Content(mediaType = "application/json", schema = @Schema(type = "string", description = "Error message explaining why the session is not created"), examples = {@ExampleObject(value = "\"Invalid or expired ID token: please provide a valid token\""), @ExampleObject(value = "\"Bearer ID token required\"")})) - @ApiResponse(responseCode = "400", description = "Bad Request - Unsupported provider", content = @Content(mediaType = "application/json", schema = @Schema(type = "string", description = "Error message explaining why the session is not created"), examples = @ExampleObject(value = "\"Unsupported provider: provider123\""))) + @Operation( + summary = "Login and create session using OAuth2 ID token", + description = """ + This API accepts an OAuth2 ID token in the Authorization header and establishes a session + by populating the Spring Security context. + + Fetch the ID token from a supported OAuth2 provider (such as Google or Microsoft) and provide + it in the request as a Bearer token. + """, + operationId = "loginWithOAuth2IdToken", + security = @SecurityRequirement(name = "bearerAuth"), + parameters = { + @Parameter( + name = "provider", + in = ParameterIn.PATH, + required = true, + description = "OAuth2 provider name. Example values: 'google', 'microsoft', 'facebook'.", + schema = @Schema(type = "string", example = "google") + ), + @Parameter( + name = "Authorization", + in = ParameterIn.HEADER, + required = true, + description = "OAuth2 ID token prefixed with 'Bearer '.", + schema = @Schema(type = "string", example = "Bearer eyJhbGciOi...") + ) + }, + responses = { + @ApiResponse( + responseCode = "200", + description = "Successfully logged in and session created.", + content = @Content( + mediaType = MediaType.APPLICATION_JSON_VALUE, + schema = @Schema(type = "string"), + examples = @ExampleObject(value = "Session created.") + ) + ), + @ApiResponse( + responseCode = "400", + description = "Bad Request - Missing/invalid header or unsupported provider.", + content = @Content( + mediaType = MediaType.APPLICATION_JSON_VALUE, + schema = @Schema(implementation = io.mosip.mimoto.dto.ErrorDTO.class), + examples = { + @ExampleObject(name = "UnsupportedProvider", value = """ + { + "errorCode": "INVALID_REQUEST", + "errorMessage": "Unsupported provider: provider123" + } + """), + @ExampleObject(name = "MissingToken", value = """ + { + "errorCode": "INVALID_REQUEST", + "errorMessage": "Bearer ID token required." + } + """) + } + ) + ), + @ApiResponse( + responseCode = "401", + description = "Unauthorized - Invalid or expired token.", + content = @Content( + mediaType = MediaType.APPLICATION_JSON_VALUE, + schema = @Schema(implementation = io.mosip.mimoto.dto.ErrorDTO.class), + examples = @ExampleObject(name = "InvalidToken", value = """ + { + "errorCode": "invalid_token", + "errorMessage": "Invalid token format" + } + """) + ) + ) + } + ) @PostMapping("/auth/{provider}/token-login") - public ResponseEntity createSessionFromIdToken(@RequestHeader("Authorization") String authorization, @PathVariable("provider") String provider, HttpServletRequest request, HttpServletResponse response) { + public ResponseEntity createSessionFromIdToken(@RequestHeader(value = "Authorization", required = false) String authorization, @PathVariable("provider") String provider, HttpServletRequest request, HttpServletResponse response) { if (!tokenServiceFactory.isSupportedProvider(provider)) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(String.format(UNSUPPORTED_PROVIDER_MESSAGE, provider)); + return Utilities.buildErrorResponse(HttpStatus.BAD_REQUEST, ErrorConstants.INVALID_REQUEST.getErrorCode(), String.format(UNSUPPORTED_PROVIDER_MESSAGE, provider)); } if (authorization == null || !authorization.startsWith(BEARER_PREFIX)) { - return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(INVALID_TOKEN_MESSAGE); + return Utilities.buildErrorResponse(HttpStatus.BAD_REQUEST, ErrorConstants.INVALID_REQUEST.getErrorCode(), INVALID_TOKEN_MESSAGE); } String idToken = authorization.substring(BEARER_PREFIX.length()); @@ -61,7 +132,7 @@ public ResponseEntity createSessionFromIdToken(@RequestHeader("Authoriza tokenService.processToken(idToken, provider, request, response); return ResponseEntity.ok(SESSION_CREATED); } catch (OAuth2AuthenticationException e) { - return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(String.format(INVALID_TOKEN_ERROR, e.getMessage())); + return Utilities.getErrorResponseEntityWithoutWrapper(e, e.getErrorCode(), HttpStatus.UNAUTHORIZED, MediaType.APPLICATION_JSON); } } } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/util/Utilities.java b/src/main/java/io/mosip/mimoto/util/Utilities.java index d550fd44d..327582e91 100644 --- a/src/main/java/io/mosip/mimoto/util/Utilities.java +++ b/src/main/java/io/mosip/mimoto/util/Utilities.java @@ -3,12 +3,10 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.Lists; -import io.mosip.kernel.core.logger.spi.Logger; import io.mosip.mimoto.core.http.ResponseWrapper; import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.exception.ExceptionUtils; -import io.mosip.mimoto.exception.PlatformErrorMessages; import io.mosip.mimoto.service.impl.CredentialShareServiceImpl; import jakarta.annotation.PostConstruct; import lombok.Data; @@ -271,6 +269,13 @@ public static ResponseEntity getErrorResponseEntityFromPlatformErrorMessa return (ResponseEntity) responseEntity.body(new ErrorDTO(errorCode, errorMessage)); } + public static ResponseEntity buildErrorResponse(HttpStatus status, String errorCode, String message) { + return ResponseEntity + .status(status) + .contentType(MediaType.APPLICATION_JSON) + .body(new ErrorDTO(errorCode, message)); + } + public static List getErrors(String errorCode, String errorMessage) { ErrorDTO errorDTO = new ErrorDTO(errorCode, errorMessage); return Lists.newArrayList(errorDTO); diff --git a/src/test/java/io/mosip/mimoto/controller/TokenAuthControllerTest.java b/src/test/java/io/mosip/mimoto/controller/TokenAuthControllerTest.java index aa016ea7a..eb9eea271 100644 --- a/src/test/java/io/mosip/mimoto/controller/TokenAuthControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/TokenAuthControllerTest.java @@ -1,8 +1,10 @@ package io.mosip.mimoto.controller; +import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.OAuth2AuthenticationException; import io.mosip.mimoto.service.TokenService; import io.mosip.mimoto.service.TokenServiceFactory; +import io.mosip.mimoto.util.GlobalExceptionHandler; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -15,6 +17,7 @@ import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; import static org.hamcrest.Matchers.is; import static org.mockito.Mockito.*; @@ -22,8 +25,9 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; @RunWith(SpringRunner.class) -@SpringBootTest(classes = {TokenAuthController.class}) -@AutoConfigureMockMvc +@SpringBootTest(classes = {TokenAuthController.class, GlobalExceptionHandler.class}) +@AutoConfigureMockMvc(addFilters = false) +@EnableWebMvc public class TokenAuthControllerTest { @Autowired @@ -79,7 +83,7 @@ public void shouldReturnBadRequestForUnsupportedProvider() throws Exception { .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isBadRequest()) .andExpect(content().contentType(MediaType.APPLICATION_JSON)) - .andExpect(jsonPath("$", is(String.format("Unsupported provider: %s", provider)))); + .andExpect(jsonPath("$.errorMessage", is(String.format("Unsupported provider: %s", provider)))); verify(tokenServiceFactory).isSupportedProvider(eq(provider)); verifyNoMoreInteractions(tokenServiceFactory); @@ -87,7 +91,7 @@ public void shouldReturnBadRequestForUnsupportedProvider() throws Exception { } @Test - public void shouldReturnUnauthorizedForMissingAuthorizationHeader() throws Exception { + public void shouldReturnBadRequestForMissingAuthorizationHeader() throws Exception { when(tokenServiceFactory.isSupportedProvider(eq(provider))).thenReturn(true); mockMvc.perform(post("/auth/google/token-login", provider) .contentType(MediaType.APPLICATION_JSON) @@ -96,11 +100,11 @@ public void shouldReturnUnauthorizedForMissingAuthorizationHeader() throws Excep .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isBadRequest()); - verifyNoInteractions(tokenServiceFactory, tokenService); + verifyNoInteractions(tokenService); } @Test - public void shouldReturnUnauthorizedForInvalidAuthorizationHeader() throws Exception { + public void shouldReturnBadRequestForInvalidAuthorizationHeader() throws Exception { when(tokenServiceFactory.isSupportedProvider(eq(provider))).thenReturn(true); String invalidAuthorizationHeader = "InvalidToken"; @@ -110,9 +114,9 @@ public void shouldReturnUnauthorizedForInvalidAuthorizationHeader() throws Excep .accept(MediaType.APPLICATION_JSON) .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")) .with(SecurityMockMvcRequestPostProcessors.csrf())) - .andExpect(status().isUnauthorized()) + .andExpect(status().isBadRequest()) .andExpect(content().contentType(MediaType.APPLICATION_JSON)) - .andExpect(jsonPath("$", is("Bearer ID token required."))); + .andExpect(jsonPath("$.errorMessage", is("Bearer ID token required."))); } @Test @@ -130,7 +134,8 @@ public void shouldReturnUnauthorizedForInvalidToken() throws Exception { .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isUnauthorized()) .andExpect(content().contentType(MediaType.APPLICATION_JSON)) - .andExpect(jsonPath("$", is("Invalid or expired ID token: invalid_token --> Invalid token format"))); + .andExpect(jsonPath("$.errorCode", is("invalid_token"))) + .andExpect(jsonPath("$.errorMessage", is("Invalid token format"))); verify(tokenServiceFactory).isSupportedProvider(eq(provider)); verify(tokenServiceFactory).getTokenService(eq(provider)); From 83ff2d0064559d39ed412834155cee94defc3dd3 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Fri, 2 May 2025 17:35:09 +0530 Subject: [PATCH 573/860] injiweb-1117 frontend need to know if wallet has been unlocked or not Signed-off-by: Gurpreet41082 --- docs/api-documentation-openapi.json | 27 ++++++++++++++- .../constant/SwaggerExampleConstants.java | 8 +++++ .../mimoto/controller/UsersController.java | 19 +++++++++-- .../dto/mimoto/CachedUserMetadataDTO.java | 33 +++++++++++++++++++ .../controller/UsersControllerTest.java | 28 ++++++++++++++-- 5 files changed, 109 insertions(+), 6 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/CachedUserMetadataDTO.java diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index 44c207721..0ab58be94 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -2785,7 +2785,8 @@ "value": { "display_name": "John Doe", "profile_picture_url": "https://example.com/profile.jpg", - "email": "john.doe@example.com" + "email": "john.doe@example.com", + "walletId": "123e4567-e89b-12d3-a456-426614174000" } } } @@ -3841,6 +3842,30 @@ } } }, + "CachedUserMetadataDTO": { + "type": "object", + "properties": { + "display_name": { + "type": "string", + "description": "The display name of the user provided by the Identity Provider" + }, + "profile_picture_url": { + "type": "string", + "format": "uri", + "description": "The URL of the user's profile picture provided by the Identity Provider" + }, + "email": { + "type": "string", + "format": "email", + "description": "The email address of the user provided by the Identity Provider" + }, + "wallet_id": { + "type": "string", + "format": "uuid", + "description": "The active wallet id of the user" + } + } + }, "VerifiableCredentialResponseDTO": { "type": "object", "properties": { diff --git a/src/main/java/io/mosip/mimoto/constant/SwaggerExampleConstants.java b/src/main/java/io/mosip/mimoto/constant/SwaggerExampleConstants.java index 1752fef94..97b51c1f9 100644 --- a/src/main/java/io/mosip/mimoto/constant/SwaggerExampleConstants.java +++ b/src/main/java/io/mosip/mimoto/constant/SwaggerExampleConstants.java @@ -40,6 +40,14 @@ public class SwaggerExampleConstants { "email": "john.doe@example.com" } """; + public static final String FETCH_USER_CACHE_PROFILE_SUCCESS = """ + { + "display_name": "John Doe", + "profile_picture_url": "https://example.com/profile.jpg", + "email": "john.doe@example.com", + "walletId": "123e4567-e89b-12d3-a456-426614174000" + } + """; public static final String FETCH_ALL_WALLETS_OF_USER_SUCCESS = """ [ diff --git a/src/main/java/io/mosip/mimoto/controller/UsersController.java b/src/main/java/io/mosip/mimoto/controller/UsersController.java index 71d2ef6eb..80888571d 100644 --- a/src/main/java/io/mosip/mimoto/controller/UsersController.java +++ b/src/main/java/io/mosip/mimoto/controller/UsersController.java @@ -5,6 +5,7 @@ import io.mosip.mimoto.constant.SwaggerLiteralConstants; import io.mosip.mimoto.dbentity.UserMetadata; import io.mosip.mimoto.dto.ErrorDTO; +import io.mosip.mimoto.dto.mimoto.CachedUserMetadataDTO; import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; import io.mosip.mimoto.exception.DecryptionException; import io.mosip.mimoto.exception.ErrorConstants; @@ -79,17 +80,29 @@ private UserMetadata fetchUserMetadata(String providerSubjectId, String identity } @Operation(summary = "Retrieve user metadata from the stored redis session", description = "This API is secured using session-based authentication. When a request is made, the server retrieves the session ID from the Cookie header and uses it to fetch session details from Redis. It then attempts to retrieve the user's metadata directly from the session. If the metadata is available, the API returns the user's profile information otherwise an appropriate error response is returned.", operationId = "getUserProfileFromCache", security = @SecurityRequirement(name = "SessionAuth")) - @ApiResponse(responseCode = "200", description = "User profile retrieved successfully from the session", content = @Content(mediaType = "application/json", schema = @Schema(implementation = UserMetadataDTO.class), examples = @ExampleObject(name = "Success response", value = SwaggerExampleConstants.FETCH_USER_PROFILE_SUCCESS))) + @ApiResponse(responseCode = "200", description = "User profile retrieved successfully from the session", content = @Content(mediaType = "application/json", schema = @Schema(implementation = CachedUserMetadataDTO.class), examples = @ExampleObject(name = "Success response", value = SwaggerExampleConstants.FETCH_USER_CACHE_PROFILE_SUCCESS))) @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "User metadata not found in session", value = "{\"errorCode\": \"session_invalid_or_expired\", \"errorMessage\": \"User session is missing or expired. Please log in again.\"}"))) @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"))) @GetMapping("/cache") - public ResponseEntity getUserProfileFromCache(HttpSession session) { + public ResponseEntity getUserProfileFromCache(HttpSession session) { UserMetadataDTO userMetadataDTO = (UserMetadataDTO) session.getAttribute(SessionKeys.USER_METADATA); if (userMetadataDTO == null) { log.error("User info is not present in the session"); return getErrorResponseEntityFromPlatformErrorMessage(SESSION_EXPIRED_OR_INVALID, HttpStatus.UNAUTHORIZED, MediaType.APPLICATION_JSON); } - return ResponseEntity.status(HttpStatus.OK).body(userMetadataDTO); + + CachedUserMetadataDTO cachedUserMetadataDTO = new CachedUserMetadataDTO(); + cachedUserMetadataDTO.setDisplayName(userMetadataDTO.getDisplayName()); + cachedUserMetadataDTO.setEmail(userMetadataDTO.getEmail()); + cachedUserMetadataDTO.setProfilePictureUrl(userMetadataDTO.getProfilePictureUrl()); + Object walletIdObj = session.getAttribute(SessionKeys.WALLET_ID); + if (walletIdObj instanceof String walletId) { + cachedUserMetadataDTO.setWalletId(walletId); + } else { + cachedUserMetadataDTO.setWalletId(null); + } + + return ResponseEntity.status(HttpStatus.OK).body(cachedUserMetadataDTO); } } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CachedUserMetadataDTO.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CachedUserMetadataDTO.java new file mode 100644 index 000000000..70397d0ba --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CachedUserMetadataDTO.java @@ -0,0 +1,33 @@ +package io.mosip.mimoto.dto.mimoto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class CachedUserMetadataDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @JsonProperty("display_name") + @Schema(description = "Display name of the user provided by the Identity Provider") + private String displayName; + + @JsonProperty("profile_picture_url") + @Schema(description = "Profile picture of the user provided by the Identity Provider") + private String profilePictureUrl; + + @JsonProperty("email") + @Schema(description = "Email of the user provided by the Identity Provider") + private String email; + + @JsonProperty("wallet_id") + @Schema(description = "Wallet id of the user in use") + private String walletId; +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java b/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java index ef31f056d..c065e6148 100644 --- a/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java @@ -3,6 +3,7 @@ import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.dbentity.UserMetadata; import io.mosip.mimoto.dto.ErrorDTO; +import io.mosip.mimoto.dto.mimoto.CachedUserMetadataDTO; import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; import io.mosip.mimoto.exception.DecryptionException; import io.mosip.mimoto.exception.ErrorConstants; @@ -131,11 +132,11 @@ void getUserProfileFromCacheSuccess() { when(session.getAttribute(SessionKeys.USER_METADATA)).thenReturn(userMetadataDTO); // Act - ResponseEntity response = usersController.getUserProfileFromCache(session); + ResponseEntity response = usersController.getUserProfileFromCache(session); // Assert assertEquals(HttpStatus.OK, response.getStatusCode()); - UserMetadataDTO result = response.getBody(); + CachedUserMetadataDTO result = response.getBody(); assertNotNull(result); assertEquals(DECRYPTED_DISPLAY_NAME, result.getDisplayName()); assertEquals(DECRYPTED_PROFILE_PIC, result.getProfilePictureUrl()); @@ -171,5 +172,28 @@ void getUserProfileFromCacheNullSession() { ErrorDTO error = (ErrorDTO) response.getBody(); assertNotNull(error); assertEquals(SESSION_EXPIRED_OR_INVALID.getErrorCode(), error.getErrorCode()); + assertEquals(SESSION_EXPIRED_OR_INVALID.getErrorMessage(), error.getErrorMessage()); } + + @Test + void getUserProfileFromCacheMissingWalletId() { + // Arrange + UserMetadataDTO userMetadataDTO = new UserMetadataDTO(DECRYPTED_DISPLAY_NAME, DECRYPTED_PROFILE_PIC, DECRYPTED_EMAIL); + when(session.getAttribute(SessionKeys.USER_METADATA)).thenReturn(userMetadataDTO); + when(session.getAttribute(SessionKeys.WALLET_ID)).thenReturn(null); + + // Act + ResponseEntity response = usersController.getUserProfileFromCache(session); + + // Assert + assertEquals(HttpStatus.OK, response.getStatusCode()); + CachedUserMetadataDTO result = response.getBody(); + assertNotNull(result); + assertEquals(DECRYPTED_DISPLAY_NAME, result.getDisplayName()); + assertEquals(DECRYPTED_PROFILE_PIC, result.getProfilePictureUrl()); + assertEquals(DECRYPTED_EMAIL, result.getEmail()); + assertNull(result.getWalletId()); + } + + } \ No newline at end of file From 9c878f73c9c867f99b7328dc9a92ef0abf7547b1 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Fri, 2 May 2025 18:43:18 +0530 Subject: [PATCH 574/860] injiweb-1117 fetching wallets based on creation time so frontend can use first wallet Signed-off-by: Gurpreet41082 --- src/main/java/io/mosip/mimoto/dbentity/Wallet.java | 11 +++++++++-- .../io/mosip/mimoto/repository/WalletRepository.java | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/dbentity/Wallet.java b/src/main/java/io/mosip/mimoto/dbentity/Wallet.java index abe17df6c..728e274cb 100644 --- a/src/main/java/io/mosip/mimoto/dbentity/Wallet.java +++ b/src/main/java/io/mosip/mimoto/dbentity/Wallet.java @@ -38,10 +38,17 @@ public class Wallet { private List proofSigningKeys; // One wallet can have many keys @Column(nullable = false, updatable = false) - private Instant createdAt = Instant.now(); + private Instant createdAt; @Column(nullable = false) - private Instant updatedAt = Instant.now(); + private Instant updatedAt; + + @PrePersist + public void prePersist() { + Instant now = Instant.now(); + this.createdAt = now; + this.updatedAt = now; + } @PreUpdate public void preUpdate() { diff --git a/src/main/java/io/mosip/mimoto/repository/WalletRepository.java b/src/main/java/io/mosip/mimoto/repository/WalletRepository.java index 6b8d55fab..7aaae5be3 100644 --- a/src/main/java/io/mosip/mimoto/repository/WalletRepository.java +++ b/src/main/java/io/mosip/mimoto/repository/WalletRepository.java @@ -9,7 +9,7 @@ import java.util.Optional; public interface WalletRepository extends JpaRepository { - @Query("SELECT w.id FROM Wallet w WHERE w.userId = :userId") + @Query("SELECT w.id FROM Wallet w WHERE w.userId = :userId ORDER BY w.createdAt ASC" ) List findWalletIdByUserId(@Param("userId") String userId); Optional findByUserIdAndId(String userId, String walletId); From 0163040f6919d99bd107b864396ccb42385139b9 Mon Sep 17 00:00:00 2001 From: Praful Rakhade <99539100+prafulrakhade@users.noreply.github.com> Date: Mon, 12 May 2025 12:27:40 +0530 Subject: [PATCH 575/860] [MOSIP-39939] & [MOSIP-41033], Added volume for encryptionkeystore.p12 also added redis deployment script for mimoto. Signed-off-by: techno-467 --- deploy/mimoto/install.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/deploy/mimoto/install.sh b/deploy/mimoto/install.sh index 89819c878..a24b23561 100755 --- a/deploy/mimoto/install.sh +++ b/deploy/mimoto/install.sh @@ -77,7 +77,6 @@ function installing_mimoto() { kubectl -n config-server set env --keys=security-pin --from secret/softhsm-mimoto deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_SOFTHSM_MIMOTO_ else default_enable_volume=true # Default to true for mimoto - read -p "Would you like to enable volume (true/false) : [ default : true ] : " enable_volume enable_volume=${enable_volume:-$default_enable_volume} MIMOTO_KEYGEN_HELM_ARGS='--set springConfigNameEnv="mimoto"' MIMOTO_HELM_ARGS='' From e35425ed85a788016042b0206fe6414c28ea2f24 Mon Sep 17 00:00:00 2001 From: Praful Rakhade <99539100+prafulrakhade@users.noreply.github.com> Date: Mon, 12 May 2025 16:04:41 +0530 Subject: [PATCH 576/860] [MOSIP-39939] & [MOSIP-41033], Added volume for encryptionkeystore.p12 also added redis deployment script for mimoto. Signed-off-by: techno-467 --- deploy/mimoto/install.sh | 66 +++++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 35 deletions(-) diff --git a/deploy/mimoto/install.sh b/deploy/mimoto/install.sh index a24b23561..66d28d263 100755 --- a/deploy/mimoto/install.sh +++ b/deploy/mimoto/install.sh @@ -53,7 +53,7 @@ function installing_mimoto() { read -p "Enter 1, 2 or 3 [default: 2]: " keystore_choice keystore_choice=${keystore_choice:-2} - if [[ $keystore_choice == 1 ]]; then + if [[ "$keystore_choice" == "1" ]]; then echo Installing SoftHSM helm -n $SOFTHSM_NS install softhsm-mimoto mosip/softhsm -f softhsm-values.yaml --version $SOFTHSM_CHART_VERSION --wait @@ -62,13 +62,39 @@ function installing_mimoto() { $COPY_UTIL secret softhsm-mimoto softhsm config-server $COPY_UTIL secret softhsm-mimoto softhsm $NS kubectl -n config-server set env --keys=security-pin --from secret/softhsm-mimoto deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_SOFTHSM_MIMOTO_ - elif [[ $keystore_choice == 3 ]]; then + + elif [[ "$keystore_choice" == "2" ]]; then + volume_size=200M + volume_mount_path='/home/mosip/encryption' + PVC_CLAIM_NAME='mimoto-keygen-keymanager' + MIMOTO_KEYGEN_HELM_ARGS='--set springConfigNameEnv="mimoto"' + MIMOTO_HELM_ARGS='' + + if kubectl -n $NS get pvc "$PVC_CLAIM_NAME" >/dev/null 2>&1; then + echo "PVC $PVC_CLAIM_NAME already exists. Skipping keygen job." + else + echo "Creating new PVC and running keygen job" + MIMOTO_KEYGEN_HELM_ARGS="--set persistence.enabled=true \ + --set volumePermissions.enabled=true \ + --set persistence.size=$volume_size \ + --set persistence.mountDir=\"$volume_mount_path\" \ + --set springConfigNameEnv='mimoto' \ + --set persistence.pvc_claim_name=\"$PVC_CLAIM_NAME\" \ + --set keysDir=\"$volume_mount_path\" \ + --set keyStore.fileName=\"encryptionkeystore.p12\" \ + --set skipIfFileExists=true" + + echo "MIMOTO KEYGEN HELM ARGS $MIMOTO_KEYGEN_HELM_ARGS" + echo "Running mimoto keygen" + helm -n $NS install mimoto-keygen mosip/keygen $MIMOTO_KEYGEN_HELM_ARGS --wait --wait-for-jobs --version $KEYGEN_CHART_VERSION + fi + + elif [[ "$keystore_choice" == "3" ]]; then echo "Setting up External HSM configuration" read -p "Please provide the URL where externalhsm client zip is located: " externalhsmclient read -p "Please provide the host URL for externalhsm: " externalhsmhosturl read -p "Please provide the password for the externalhsm: " externalhsmpassword - # Create configmap and secret for external HSM kubectl create configmap softhsm-mimoto-share --from-literal=hsm_client_zip_url_env="$externalhsmclient" --from-literal=PKCS11_PROXY_SOCKET="$externalhsmhosturl" -n softhsm --dry-run=client -o yaml | kubectl apply -f - kubectl create secret generic softhsm-mimoto --from-literal=security-pin="$externalhsmpassword" -n softhsm --dry-run=client -o yaml | kubectl apply -f - $COPY_UTIL configmap softhsm-mimoto-share softhsm $NS @@ -76,38 +102,8 @@ function installing_mimoto() { $COPY_UTIL secret softhsm-mimoto softhsm $NS kubectl -n config-server set env --keys=security-pin --from secret/softhsm-mimoto deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_SOFTHSM_MIMOTO_ else - default_enable_volume=true # Default to true for mimoto - enable_volume=${enable_volume:-$default_enable_volume} - MIMOTO_KEYGEN_HELM_ARGS='--set springConfigNameEnv="mimoto"' - MIMOTO_HELM_ARGS='' - - if [[ $enable_volume == 'true' ]]; then - default_volume_size=200M - read -p "Provide the size for volume [ default : 200M ]" volume_size - volume_size=${volume_size:-$default_volume_size} - volume_mount_path='/home/mosip/encryption' - PVC_CLAIM_NAME='mimoto-keygen-keymanager' - - # Check if PVC already exists - if kubectl -n $NS get pvc "$PVC_CLAIM_NAME" >/dev/null 2>&1; then - echo "PVC $PVC_CLAIM_NAME already exists. Skipping keygen job." - else - echo "Creating new PVC and running keygen job" - MIMOTO_KEYGEN_HELM_ARGS="--set persistence.enabled=true \ - --set volumePermissions.enabled=true \ - --set persistence.size=$volume_size \ - --set persistence.mountDir=\"$volume_mount_path\" \ - --set springConfigNameEnv='mimoto' \ - --set persistence.pvc_claim_name=\"$PVC_CLAIM_NAME\" \ - --set keysDir=\"$volume_mount_path\" \ - --set keyStore.fileName=\"encryptionkeystore.p12\" \ - --set skipIfFileExists=true" - - echo "MIMOTO KEYGEN HELM ARGS $MIMOTO_KEYGEN_HELM_ARGS" - echo "Running mimoto keygen" - helm -n $NS install mimoto-keygen mosip/keygen $MIMOTO_KEYGEN_HELM_ARGS --wait --wait-for-jobs --version $KEYGEN_CHART_VERSION - fi - fi + echo "Invalid option. Please choose 1, 2, or 3." + exit 1 fi echo "Copy secrets to config-server namespace" From a9a686cc6727aed54e5f73ca8cacc308b6d515ab Mon Sep 17 00:00:00 2001 From: Mohanachandran S Date: Tue, 13 May 2025 12:27:30 +0530 Subject: [PATCH 577/860] MOSIP-41420 - Updated the apitest commons version Signed-off-by: Mohanachandran S --- api-test/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api-test/pom.xml b/api-test/pom.xml index cbc8010e4..f9254735f 100644 --- a/api-test/pom.xml +++ b/api-test/pom.xml @@ -56,7 +56,7 @@ io.mosip.testrig.apitest.commons apitest-commons - 1.3.2-SNAPSHOT + 1.3.2 From 3684c90492c44ae3f01428f694c68c45e4e5efd2 Mon Sep 17 00:00:00 2001 From: CodeBLUW Date: Mon, 5 May 2025 10:20:51 +0530 Subject: [PATCH 578/860] inji-web 1521 - code for delete api Signed-off-by: CodeBLUW --- certs/oidckeystore.p12 | Bin 0 -> 43456 bytes docs/api-documentation-openapi.json | 169 +++++++++++++++++ .../MIMOTO.postman_collection.json | 18 ++ .../constant/SwaggerLiteralConstants.java | 174 +++++++++--------- .../WalletCredentialsController.java | 35 ++++ .../mimoto/controller/WalletsController.java | 37 +++- .../service/WalletCredentialService.java | 3 + .../mosip/mimoto/service/WalletService.java | 2 + .../impl/WalletCredentialServiceImpl.java | 14 ++ .../service/impl/WalletServiceImpl.java | 14 ++ .../WalletCredentialsControllerTest.java | 36 +++- .../controller/WalletsControllerTest.java | 39 ++++ .../service/WalletCredentialServiceTest.java | 23 +++ .../mimoto/service/WalletServiceTest.java | 25 +++ 14 files changed, 499 insertions(+), 90 deletions(-) create mode 100644 certs/oidckeystore.p12 diff --git a/certs/oidckeystore.p12 b/certs/oidckeystore.p12 new file mode 100644 index 0000000000000000000000000000000000000000..7b6c252d6c9c8f31cd3302f2ae3d4adfd6f6eae6 GIT binary patch literal 43456 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 J*y#cS2mqV-XbJ!T literal 0 HcmV?d00001 diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index 0ab58be94..e9e216c36 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -3582,6 +3582,175 @@ } } } + }, + "delete": { + "tags": [ + "Wallet Credentials" + ], + "summary": "Delete a credential from a wallet", + "description": "This endpoint allows you to delete a specific credential from a wallet. The API is secured using session-based authentication. The session ID is extracted from the Cookie header to authenticate the user. The wallet ID is validated against the session to ensure the user has access to the wallet. If the credential is successfully deleted, a 200 OK response is returned.", + "operationId": "deleteCredential", + "security": [ + { + "SessionAuth": [] + } + ], + "parameters": [ + { + "name": "walletId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier of the wallet containing the credential" + }, + { + "name": "credentialId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier of the credential to be deleted" + } + ], + "responses": { + "200": { + "description": "Credential successfully deleted" + }, + "403": { + "description": "Unauthorized access to wallet", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "Invalid Wallet Id": { + "value": { + "errorCode": "invalid_request", + "errorMessage": "Invalid Wallet ID. Session and request Wallet ID do not match" + } + } + } + } + } + }, + "404": { + "description": "Credential not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "Credential not found": { + "value": { + "errorCode": "resource_not_found", + "errorMessage": "The requested resource doesn't exist." + } + } + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "Unexpected Server Error": { + "value": { + "errorCode": "internal_server_error", + "errorMessage": "We are unable to process request now" + } + } + } + } + } + } + } + } + }, + "/wallets/{walletId}": { + "delete": { + "tags": [ + "Wallets" + ], + "summary": "Delete a wallet", + "description": "This endpoint allows you to delete a specific wallet. The API is secured using session-based authentication. The session ID is extracted from the Cookie header to authenticate the user. The user's ID is obtained from the session and used to validate ownership of the wallet before deletion. If the wallet is successfully deleted, a 200 OK response is returned.", + "operationId": "deleteWallet", + "security": [ + { + "SessionAuth": [] + } + ], + "parameters": [ + { + "name": "walletId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier of the wallet to be deleted" + } + ], + "responses": { + "200": { + "description": "Wallet successfully deleted" + }, + "401": { + "description": "Unauthorized access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Wallet not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "Wallet not found": { + "value": { + "errorCode": "invalid_request", + "errorMessage": "Wallet not found" + } + } + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "Unexpected Server Error": { + "value": { + "errorCode": "internal_server_error", + "errorMessage": "We are unable to process request now" + } + } + } + } + } + } + } } }, "/wallets/{walletId}/unlock": { diff --git a/docs/postman-collections/MIMOTO.postman_collection.json b/docs/postman-collections/MIMOTO.postman_collection.json index d114c07a7..3d46e53a5 100644 --- a/docs/postman-collections/MIMOTO.postman_collection.json +++ b/docs/postman-collections/MIMOTO.postman_collection.json @@ -375,6 +375,15 @@ "url": "{{HOST}}/wallets//unlock" }, "response": [] + }, + { + "name": "Delete Wallet", + "request": { + "method": "DELETE", + "header": [], + "url": "{{HOST}}/wallets/" + }, + "response": [] } ] }, @@ -523,6 +532,15 @@ } }, "response": [] + }, + { + "name": "Delete Credential", + "request": { + "method": "DELETE", + "header": [], + "url": "{{HOST}}/wallets//credentials/" + }, + "response": [] } ] }, diff --git a/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java b/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java index b25f0c07b..4c492a96e 100644 --- a/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java +++ b/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java @@ -2,93 +2,97 @@ public class SwaggerLiteralConstants { - /* Attestation Controller */ - public static final String ATTESTATION_NAME = "Attestation" ; - public static final String ATTESTATION_DESCRIPTION = "All the attestation related endpoints" ; - - - /* Common Inji Controller */ - public static final String COMMON_INJI_NAME = "Inji Wallet Properties" ; - public static final String COMMON_INJI_DESCRIPTION = "All endpoints related to Inji Wallet properties" ; - public static final String COMMON_INJI_GET_PROPERTIES_SUMMARY = "Retrieve all Inji Wallet properties" ; - public static final String COMMON_INJI_GET_PROPERTIES_DESCRIPTION = "This endpoint allow you to retrieve all the Inji Wallet properties" ; - - /* Credentials Controller */ - public static final String CREDENTIALS_NAME = "Credentials download using OpenId4VCI" ; - public static final String CREDENTIALS_DESCRIPTION = "All the credentials related endpoints" ; - public static final String CREDENTIALS_DOWNLOAD_VC_SUMMARY = "Download credentials as PDF" ; - public static final String CREDENTIALS_DOWNLOAD_VC_DESCRIPTION = "This endpoint allow you to download the credentials as PDF" ; - - /* Credentials Share Controller */ - public static final String CREDENTIALS_SHARE_NAME = "Credential Share" ; - public static final String CREDENTIALS_SHARE_DESCRIPTION = "All the credential download endpoints" ; - public static final String CREDENTIALS_SHARE_HANDLE_SUBSCRIBED_EVENT_SUMMARY = "Notify through web sub once credential is downloaded" ; - public static final String CREDENTIALS_SHARE_HANDLE_SUBSCRIBED_EVENT_DESCRIPTION = "This endpoint allow web sub to callback once the credential is issued" ; - public static final String CREDENTIALS_SHARE_REQUEST_VC_SUMMARY = "request for credential issue" ; - public static final String CREDENTIALS_SHARE_REQUEST_VC_DESCRIPTION = "This endpoint allow you to request for credential issue" ; - public static final String CREDENTIALS_SHARE_REQUEST_VC_STATUS_SUMMARY = "polling for credential issue status" ; - public static final String CREDENTIALS_SHARE_REQUEST_VC_STATUS_DESCRIPTION = "This endpoint allow you to poll for credential issue status" ; - public static final String CREDENTIALS_SHARE_DOWNLOAD_VC_SUMMARY = "Download the credential using OTP Flow" ; - public static final String CREDENTIALS_SHARE_DOWNLOAD_VC_DESCRIPTION = "This endpoint allow you to download credential issued" ; - - /* IDP Controller */ - public static final String IDP_NAME = "Wallet Binding" ; - public static final String IDP_DESCRIPTION = "All the authorization related endpoints" ; - public static final String IDP_BINDING_OTP_SUMMARY = "Invoke OTP request for wallet binding" ; - public static final String IDP_BINDING_OTP_DESCRIPTION = "This endpoint allow you to invoke OTP for wallet binding" ; - public static final String IDP_WALLET_BINDING_SUMMARY = "Wallet Binding" ; - public static final String IDP_WALLET_BINDING_DESCRIPTION = "This endpoint allow you to perform the wallet binding" ; - public static final String IDP_GET_TOKEN_SUMMARY = "Retrieve accessToken for OIDC flow" ; - public static final String IDP_GET_TOKEN_DESCRIPTION = "This endpoint allow you to retrieve the access token in exchange for authorization code" ; - - /* Issuers Controller */ - public static final String ISSUERS_NAME = "Issuers" ; - public static final String ISSUERS_DESCRIPTION = "All the issuers related endpoints" ; - public static final String ISSUERS_GET_ISSUERS_SUMMARY = "Retrieve all onboarded issuers" ; - public static final String ISSUERS_GET_ISSUERS_DESCRIPTION = "This endpoint allow you to retrieve all the onboarded issuers" ; - public static final String ISSUERS_GET_SPECIFIC_ISSUER_SUMMARY = "Retrieve specific issuer's config" ; - public static final String ISSUERS_GET_SPECIFIC_ISSUER_DESCRIPTION = "This endpoint allow you to retrieve the complete configuration of the specific issuer" ; - public static final String ISSUERS_GET_ISSUER_WELLKNOWN_SUMMARY = "Retrieve specific issuer's well known" ; + /* Attestation Controller */ + public static final String ATTESTATION_NAME = "Attestation"; + public static final String ATTESTATION_DESCRIPTION = "All the attestation related endpoints"; + + /* Common Inji Controller */ + public static final String COMMON_INJI_NAME = "Inji Wallet Properties"; + public static final String COMMON_INJI_DESCRIPTION = "All endpoints related to Inji Wallet properties"; + public static final String COMMON_INJI_GET_PROPERTIES_SUMMARY = "Retrieve all Inji Wallet properties"; + public static final String COMMON_INJI_GET_PROPERTIES_DESCRIPTION = "This endpoint allow you to retrieve all the Inji Wallet properties"; + + /* Credentials Controller */ + public static final String CREDENTIALS_NAME = "Credentials download using OpenId4VCI"; + public static final String CREDENTIALS_DESCRIPTION = "All the credentials related endpoints"; + public static final String CREDENTIALS_DOWNLOAD_VC_SUMMARY = "Download credentials as PDF"; + public static final String CREDENTIALS_DOWNLOAD_VC_DESCRIPTION = "This endpoint allow you to download the credentials as PDF"; + + /* Credentials Share Controller */ + public static final String CREDENTIALS_SHARE_NAME = "Credential Share"; + public static final String CREDENTIALS_SHARE_DESCRIPTION = "All the credential download endpoints"; + public static final String CREDENTIALS_SHARE_HANDLE_SUBSCRIBED_EVENT_SUMMARY = "Notify through web sub once credential is downloaded"; + public static final String CREDENTIALS_SHARE_HANDLE_SUBSCRIBED_EVENT_DESCRIPTION = "This endpoint allow web sub to callback once the credential is issued"; + public static final String CREDENTIALS_SHARE_REQUEST_VC_SUMMARY = "request for credential issue"; + public static final String CREDENTIALS_SHARE_REQUEST_VC_DESCRIPTION = "This endpoint allow you to request for credential issue"; + public static final String CREDENTIALS_SHARE_REQUEST_VC_STATUS_SUMMARY = "polling for credential issue status"; + public static final String CREDENTIALS_SHARE_REQUEST_VC_STATUS_DESCRIPTION = "This endpoint allow you to poll for credential issue status"; + public static final String CREDENTIALS_SHARE_DOWNLOAD_VC_SUMMARY = "Download the credential using OTP Flow"; + public static final String CREDENTIALS_SHARE_DOWNLOAD_VC_DESCRIPTION = "This endpoint allow you to download credential issued"; + + /* IDP Controller */ + public static final String IDP_NAME = "Wallet Binding"; + public static final String IDP_DESCRIPTION = "All the authorization related endpoints"; + public static final String IDP_BINDING_OTP_SUMMARY = "Invoke OTP request for wallet binding"; + public static final String IDP_BINDING_OTP_DESCRIPTION = "This endpoint allow you to invoke OTP for wallet binding"; + public static final String IDP_WALLET_BINDING_SUMMARY = "Wallet Binding"; + public static final String IDP_WALLET_BINDING_DESCRIPTION = "This endpoint allow you to perform the wallet binding"; + public static final String IDP_GET_TOKEN_SUMMARY = "Retrieve accessToken for OIDC flow"; + public static final String IDP_GET_TOKEN_DESCRIPTION = "This endpoint allow you to retrieve the access token in exchange for authorization code"; + + /* Issuers Controller */ + public static final String ISSUERS_NAME = "Issuers"; + public static final String ISSUERS_DESCRIPTION = "All the issuers related endpoints"; + public static final String ISSUERS_GET_ISSUERS_SUMMARY = "Retrieve all onboarded issuers"; + public static final String ISSUERS_GET_ISSUERS_DESCRIPTION = "This endpoint allow you to retrieve all the onboarded issuers"; + public static final String ISSUERS_GET_SPECIFIC_ISSUER_SUMMARY = "Retrieve specific issuer's config"; + public static final String ISSUERS_GET_SPECIFIC_ISSUER_DESCRIPTION = "This endpoint allow you to retrieve the complete configuration of the specific issuer"; + public static final String ISSUERS_GET_ISSUER_WELLKNOWN_SUMMARY = "Retrieve specific issuer's well known"; public static final String ISSUERS_GET_ISSUER_WELLKNOWN_DESCRIPTION = "This endpoint allow you to retrieve the well known of the specific issuer. Since version 0.16.0, this endpoint is deprecated and will be removed in a future release. Use issuers new endpoint issuers/{issuer-id}/configuration instead."; public static final String ISSUERS_GET_ISSUER_CONFIGURATION_SUMMARY = "Retrieve specific issuer's and its corresponding authorization server well-known config"; public static final String ISSUERS_GET_ISSUER_CONFIGURATION_DESCRIPTION = "This endpoint allows you to retrieve the well-known configuration of a specific issuer and its corresponding authorization server"; - /* Prensentation Controller */ - public static final String PRESENTATION_NAME = "Presentation" ; - public static final String PRESENTATION_DESCRIPTION = "All the online sharing related endpoints" ; - public static final String PRESENTATION_AUTHORIZE_SUMMARY = "Perform the authorization" ; - public static final String PRESENTATION_AUTHORIZE_DESCRIPTION = "This endpoint allow you to redirect the token back to the caller post authorization" ; - - /* Resident Service Controller */ - public static final String RESIDENT_NAME = "Resident Service" ; - public static final String RESIDENT_DESCRIPTION = "All the resident service related endpoints" ; - public static final String RESIDENT_REQUEST_OTP_SUMMARY = "Request for OTP" ; - public static final String RESIDENT_REQUEST_OTP_DESCRIPTION = "This endpoint allow you to request OTP for credential download" ; - public static final String RESIDENT_REQUEST_INDIVIDUALID_OTP_SUMMARY = "Request OTP for retrieving Individual Id" ; - public static final String RESIDENT_REQUEST_INDIVIDUALID_OTP_DESCRIPTION = "This endpoint allow you to request OTP to retrieve Individual Id" ; - public static final String RESIDENT_GET_INDIVIDUALID_SUMMARY = "Retrieve Individual Id using AID" ; - public static final String RESIDENT_GET_INDIVIDUALID_DESCRIPTION = "This endpoint allow you to retrieve the Individual Id using AID" ; - - - /* Verifiers Controller */ - public static final String VERIFIERS_NAME = "Verifiers" ; - public static final String VERIFIERS_DESCRIPTION = "All the verifiers related endpoints" ; - public static final String VERIFIERS_GET_VERIFIERS_SUMMARY = "Retrieve all trusted verifiers" ; - public static final String VERIFIERS_GET_VERIFIERS_DESCRIPTION = "This endpoint allow you to retrieve all the trusted verifiers" ; - - /* Users Controller */ - public static final String USERS_NAME = "Users" ; - public static final String USERS_DESCRIPTION = "All the User Profile related endpoints" ; - - /* Wallets Controller */ - public static final String WALLETS_NAME = "Wallets" ; - public static final String WALLETS_DESCRIPTION = "All the Wallet related endpoints" ; - - /* Wallet Credentials Controller */ - public static final String WALLET_CREDENTIALS_NAME = "Wallet Credentials" ; - public static final String WALLET_CREDENTIALS_DESCRIPTION = "All the Wallet Credentials related endpoints" ; - - /* OAuth2 ID Token Authentication Controller */ - public static final String ID_TOKEN_AUTHENTICATION_NAME = "OAuth2 ID Token Authentication" ; - public static final String ID_TOKEN_AUTHENTICATION_DESCRIPTION = "All the OAuth2 ID Token Authentication related endpoints" ; + /* Prensentation Controller */ + public static final String PRESENTATION_NAME = "Presentation"; + public static final String PRESENTATION_DESCRIPTION = "All the online sharing related endpoints"; + public static final String PRESENTATION_AUTHORIZE_SUMMARY = "Perform the authorization"; + public static final String PRESENTATION_AUTHORIZE_DESCRIPTION = "This endpoint allow you to redirect the token back to the caller post authorization"; + + /* Resident Service Controller */ + public static final String RESIDENT_NAME = "Resident Service"; + public static final String RESIDENT_DESCRIPTION = "All the resident service related endpoints"; + public static final String RESIDENT_REQUEST_OTP_SUMMARY = "Request for OTP"; + public static final String RESIDENT_REQUEST_OTP_DESCRIPTION = "This endpoint allow you to request OTP for credential download"; + public static final String RESIDENT_REQUEST_INDIVIDUALID_OTP_SUMMARY = "Request OTP for retrieving Individual Id"; + public static final String RESIDENT_REQUEST_INDIVIDUALID_OTP_DESCRIPTION = "This endpoint allow you to request OTP to retrieve Individual Id"; + public static final String RESIDENT_GET_INDIVIDUALID_SUMMARY = "Retrieve Individual Id using AID"; + public static final String RESIDENT_GET_INDIVIDUALID_DESCRIPTION = "This endpoint allow you to retrieve the Individual Id using AID"; + + /* Verifiers Controller */ + public static final String VERIFIERS_NAME = "Verifiers"; + public static final String VERIFIERS_DESCRIPTION = "All the verifiers related endpoints"; + public static final String VERIFIERS_GET_VERIFIERS_SUMMARY = "Retrieve all trusted verifiers"; + public static final String VERIFIERS_GET_VERIFIERS_DESCRIPTION = "This endpoint allow you to retrieve all the trusted verifiers"; + + /* Users Controller */ + public static final String USERS_NAME = "Users"; + public static final String USERS_DESCRIPTION = "All the User Profile related endpoints"; + + /* Wallets Controller */ + public static final String WALLETS_NAME = "Wallets"; + public static final String WALLETS_DESCRIPTION = "All the Wallet related endpoints"; + public static final String WALLETS_DELETE_SUMMARY = "Delete a wallet"; + public static final String WALLETS_DELETE_DESCRIPTION = "This endpoint allows you to delete a specific wallet"; + + /* Wallet Credentials Controller */ + public static final String WALLET_CREDENTIALS_NAME = "Wallet Credentials"; + public static final String WALLET_CREDENTIALS_DESCRIPTION = "All the Wallet Credentials related endpoints"; + public static final String WALLET_CREDENTIALS_DELETE_SUMMARY = "Delete a credential from a wallet"; + public static final String WALLET_CREDENTIALS_DELETE_DESCRIPTION = "This endpoint allows you to delete a specific credential from a wallet"; + public static final String WALLET_CREDENTIALS_FETCH_ALL_SUMMARY = "Fetch all credentials for a wallet"; + public static final String WALLET_CREDENTIALS_FETCH_ALL_DESCRIPTION = "This endpoint allows you to retrieve all credentials for a specific wallet"; + + /* OAuth2 ID Token Authentication Controller */ + public static final String ID_TOKEN_AUTHENTICATION_NAME = "OAuth2 ID Token Authentication"; + public static final String ID_TOKEN_AUTHENTICATION_DESCRIPTION = "All the OAuth2 ID Token Authentication related endpoints"; } diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index 806f0944d..357a47173 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -20,6 +20,7 @@ import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpSession; @@ -214,4 +215,38 @@ public ResponseEntity getVerifiableCredential( e, e.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); } } + /** + * Deletes a credential by its ID + * + * @param walletId The ID of the wallet that owns the credential + * @param credentialId The ID of the credential to delete + * @return ResponseEntity with HTTP status 200 if successful, 404 if credential not found, or 500 for other errors + */ + @Operation(summary = SwaggerLiteralConstants.WALLET_CREDENTIALS_DELETE_SUMMARY, description = SwaggerLiteralConstants.WALLET_CREDENTIALS_DELETE_DESCRIPTION) + @ApiResponses({ + @ApiResponse(responseCode = "200", description = "Credential successfully deleted"), + @ApiResponse(responseCode = "403", description = "Unauthorized access to wallet"), + @ApiResponse(responseCode = "404", description = "Credential not found"), + @ApiResponse(responseCode = "500", description = "Internal server error", content = {@Content(mediaType = "application/json")})}) + @DeleteMapping("/{credentialId}") + public ResponseEntity deleteCredential(@PathVariable("walletId") String walletId, + @PathVariable("credentialId") String credentialId, + HttpSession httpSession) { + try { + log.info("Deleting credential with ID: {} for walletId: {}", credentialId, walletId); + + WalletUtil.validateWalletId(httpSession, walletId); + + // Delete the credential + walletCredentialService.deleteCredential(credentialId, walletId); + return ResponseEntity.status(HttpStatus.OK).build(); + } catch (CredentialNotFoundException exception) { + log.error("Credential not found: {}", exception.getMessage()); + return Utilities.getErrorResponseEntityWithoutWrapper( + exception, + exception.getErrorCode(), + HttpStatus.NOT_FOUND, + MediaType.APPLICATION_JSON); + } + } } diff --git a/src/main/java/io/mosip/mimoto/controller/WalletsController.java b/src/main/java/io/mosip/mimoto/controller/WalletsController.java index 45c68236f..edea54a6d 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletsController.java @@ -1,7 +1,6 @@ package io.mosip.mimoto.controller; import io.mosip.mimoto.constant.SessionKeys; -import io.mosip.mimoto.constant.SwaggerExampleConstants; import io.mosip.mimoto.constant.SwaggerLiteralConstants; import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.WalletRequestDto; @@ -50,7 +49,7 @@ public WalletsController(WalletService walletService) { /** * Creates a new wallet for a user. * - * @param wallet The wallet creation request containing name and PIN. + * @param wallet The wallet creation request containing name and PIN. * @param httpSession The HTTP session containing user details. * @return The unique identifier of the created wallet. * @throws InvalidRequestException If the request is invalid. @@ -101,8 +100,8 @@ public ResponseEntity> getWallets(HttpSession httpSessio /** * Unlocks an existing wallet by retrieving its key and storing it in the session. * - * @param walletId The unique identifier of the wallet. - * @param wallet The request containing the wallet PIN. + * @param walletId The unique identifier of the wallet. + * @param wallet The request containing the wallet PIN. * @param httpSession The HTTP session containing user details. * @return The wallet details if unlocked successfully. * @throws InvalidRequestException If the wallet or PIN is invalid. @@ -129,4 +128,34 @@ public ResponseEntity unlockWallet( WalletResponseDto response = WalletResponseDto.builder().walletId(walletId).build(); return ResponseEntity.status(HttpStatus.OK).body(response); } + + /** + * Deletes a wallet by its ID + * + * @param walletId The ID of the wallet to delete + * @param httpSession The HTTP session containing user details + * @return ResponseEntity with HTTP status 200 if successful, 401 if unauthorized + */ + @Operation(summary = SwaggerLiteralConstants.WALLETS_DELETE_SUMMARY, description = SwaggerLiteralConstants.WALLETS_DELETE_DESCRIPTION, operationId = "deleteWallet", security = @SecurityRequirement(name = "SessionAuth"), parameters = {@Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet to be deleted", schema = @Schema(type = "string"))}) + @ApiResponse(responseCode = "200", description = "Wallet successfully deleted") + @ApiResponse(responseCode = "401", description = "Unauthorized access", content = @Content(mediaType = "application/json")) + @ApiResponse(responseCode = "404", description = "Wallet not found", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Wallet not found", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet not found\"}"))) + @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"))) + @DeleteMapping("/{walletId}") + public ResponseEntity deleteWallet(@PathVariable("walletId") String walletId, HttpSession httpSession) { + String userId = (String) httpSession.getAttribute(SessionKeys.USER_ID); + if (userId == null) { + log.error("User ID is missing in session"); + return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); + } + walletService.deleteWallet(userId, walletId); // sessionWalletId is not needed from client, pass walletId for validation + + String sessionWalletId = (String) httpSession.getAttribute(SessionKeys.WALLET_ID); + if (sessionWalletId != null && sessionWalletId.equals(walletId)) { + httpSession.removeAttribute(SessionKeys.WALLET_KEY); + httpSession.removeAttribute(SessionKeys.WALLET_ID); + log.info("Cleared wallet session attributes for walletId: {}", walletId); + } + return ResponseEntity.ok().build(); + } } diff --git a/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java b/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java index 0c31ada91..bf5fd5b74 100644 --- a/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java +++ b/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java @@ -54,4 +54,7 @@ VerifiableCredentialResponseDTO fetchAndStoreCredential(String issuerId, String WalletCredentialResponseDTO fetchVerifiableCredential(String walletId, String credentialId, String base64Key, String locale) throws CredentialNotFoundException, CredentialProcessingException; + + void deleteCredential(String credentialId, String walletId) throws CredentialNotFoundException; + } diff --git a/src/main/java/io/mosip/mimoto/service/WalletService.java b/src/main/java/io/mosip/mimoto/service/WalletService.java index c07839329..90c529002 100644 --- a/src/main/java/io/mosip/mimoto/service/WalletService.java +++ b/src/main/java/io/mosip/mimoto/service/WalletService.java @@ -42,4 +42,6 @@ public interface WalletService { * @throws InvalidRequestException If the request fails. */ List getWallets(String userId); + + void deleteWallet(String userId, String walletId) throws InvalidRequestException; } diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java index d271cf85d..46c3cd4bc 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java @@ -20,6 +20,7 @@ import java.io.IOException; import java.util.List; +import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; @@ -118,5 +119,18 @@ public WalletCredentialResponseDTO fetchVerifiableCredential(String walletId, St } } + @Override + public void deleteCredential(String credentialId, String walletId) throws CredentialNotFoundException { + log.info("Deleting credential with ID: {} for wallet: {}", credentialId, walletId); + + VerifiableCredential credential = repository.findByIdAndWalletId(credentialId, walletId) + .orElseThrow(() -> { + log.warn("Credential not found: {} for wallet: {}", credentialId, walletId); + return new CredentialNotFoundException(RESOURCE_NOT_FOUND.getErrorCode(), RESOURCE_NOT_FOUND.getErrorMessage()); + }); + // Delete the credential + repository.deleteById(credentialId); + log.info("Successfully deleted credential with ID: {}", credentialId); + } } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java index 7deda4c79..5b3b5ac33 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.service.impl; +import io.mosip.mimoto.dbentity.Wallet; import io.mosip.mimoto.dto.WalletResponseDto; import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.exception.InvalidRequestException; @@ -72,4 +73,17 @@ public List getWallets(String userId) { .collect(Collectors.toList()); } + + @Override + public void deleteWallet(String userId, String walletId) throws InvalidRequestException{ + validator.validateUserId(userId); + Wallet existingWallet = repository.findByUserIdAndId(userId, walletId) + .orElseThrow(() -> { + log.warn("Wallet not found: {} for user: {}", walletId, userId); + return new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Wallet not found"); + }); + repository.delete(existingWallet); + log.info("Successfully deleted wallet with ID: {} for user: {}", walletId, userId); + + } } diff --git a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java index 992c18ded..2e8a3e9e3 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java @@ -31,7 +31,7 @@ import static io.mosip.mimoto.exception.ErrorConstants.CREDENTIAL_FETCH_EXCEPTION; import static io.mosip.mimoto.exception.ErrorConstants.RESOURCE_NOT_FOUND; import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.when; +import static org.mockito.Mockito.*; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; @@ -329,4 +329,38 @@ public void shouldThrowCredentialProcessingExceptionForCorruptedData() throws Ex .andExpect(jsonPath("$.errorCode").value(CREDENTIAL_FETCH_EXCEPTION.getErrorCode())) .andExpect(jsonPath("$.errorMessage").value("CORRUPTED_DATA")); } + + // Tests for deleteCredential + @Test + public void shouldDeleteCredentialSuccessfully() throws Exception { + mockMvc.perform(org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete("/wallets/{walletId}/credentials/{credentialId}", walletId, credentialId) + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isOk()); + } + + @Test + public void shouldThrowCredentialNotFoundExceptionWhenDeletingNonExistentCredential() throws Exception { + doThrow(new CredentialNotFoundException(RESOURCE_NOT_FOUND.getErrorCode(), RESOURCE_NOT_FOUND.getErrorMessage())) + .when(walletCredentialService).deleteCredential(credentialId, walletId); + + mockMvc.perform(org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete("/wallets/{walletId}/credentials/{credentialId}", walletId, credentialId) + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isNotFound()) + .andExpect(jsonPath("$.errorCode").value("resource_not_found")) + .andExpect(jsonPath("$.errorMessage").value("The requested resource doesn't exist.")); + } + + @Test + public void shouldThrowInvalidRequestForWalletIdMismatchInDeleteCredential() throws Exception { + when(httpSession.getAttribute("wallet_id")).thenReturn("differentWalletId"); + + mockMvc.perform(org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete("/wallets/{walletId}/credentials/{credentialId}", walletId, credentialId) + .sessionAttr("wallet_id", "differentWalletId") + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errorCode").value("invalid_request")) + .andExpect(jsonPath("$.errorMessage").value("invalid_request --> Invalid Wallet ID. Session and request Wallet ID do not match")); + } } \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java index f7b0d042a..2f9b219eb 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java @@ -162,4 +162,43 @@ public void shouldThrowExceptionIfAnyErrorOccurredWhileFetchingWalletDataForGive .andExpect(jsonPath("$.errorCode").value("internal_server_error")) .andExpect(jsonPath("$.errorMessage").value("We are unable to process request now")); } + + @Test + public void shouldDeleteWalletSuccessfully() throws Exception { + mockMvc.perform(org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete("/wallets/walletId123") + .accept(MediaType.APPLICATION_JSON) + .session(mockSession) + .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")) + .with(SecurityMockMvcRequestPostProcessors.csrf())) + .andExpect(status().isOk()); + } + + @Test + public void shouldClearSessionAttributesWhenDeletingCurrentWallet() throws Exception { + mockSession.setAttribute(SessionKeys.WALLET_ID, "walletId123"); + mockSession.setAttribute(SessionKeys.WALLET_KEY, "walletKey123"); + + mockMvc.perform(org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete("/wallets/walletId123") + .accept(MediaType.APPLICATION_JSON) + .session(mockSession) + .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")) + .with(SecurityMockMvcRequestPostProcessors.csrf())) + .andExpect(status().isOk()); + + // Session attributes should be cleared + assertEquals(null, mockSession.getAttribute(SessionKeys.WALLET_ID)); + assertEquals(null, mockSession.getAttribute(SessionKeys.WALLET_KEY)); + } + + @Test + public void shouldReturnUnauthorizedWhenUserIdIsMissingForDeleteWallet() throws Exception { + MockHttpSession sessionWithoutUserId = new MockHttpSession(); + + mockMvc.perform(org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete("/wallets/walletId123") + .accept(MediaType.APPLICATION_JSON) + .session(sessionWithoutUserId) + .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")) + .with(SecurityMockMvcRequestPostProcessors.csrf())) + .andExpect(status().isUnauthorized()); + } } diff --git a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java index e1c728033..978566345 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java @@ -246,4 +246,27 @@ public void shouldThrowCredentialProcessingExceptionOnDecryptionFailure() throws verify(encryptionDecryptionUtil).decryptCredential("encryptedCredential", base64Key); verifyNoInteractions(credentialUtilService); } + + @Test + public void shouldDeleteCredentialSuccessfully() throws Exception { + when(walletCredentialsRepository.findByIdAndWalletId(credentialId, walletId)).thenReturn(Optional.of(verifiableCredential)); + + walletCredentialService.deleteCredential(credentialId, walletId); + + verify(walletCredentialsRepository).findByIdAndWalletId(credentialId, walletId); + verify(walletCredentialsRepository).deleteById(credentialId); + } + + @Test + public void shouldThrowCredentialNotFoundExceptionWhenDeletingNonExistentCredential() { + when(walletCredentialsRepository.findByIdAndWalletId(credentialId, walletId)).thenReturn(Optional.empty()); + + CredentialNotFoundException exception = assertThrows(CredentialNotFoundException.class, () -> + walletCredentialService.deleteCredential(credentialId, walletId)); + + assertEquals(RESOURCE_NOT_FOUND.getErrorCode(), exception.getErrorCode()); + assertEquals(RESOURCE_NOT_FOUND.getErrorCode() + " --> " + RESOURCE_NOT_FOUND.getErrorMessage(), exception.getMessage()); + verify(walletCredentialsRepository).findByIdAndWalletId(credentialId, walletId); + verify(walletCredentialsRepository, never()).deleteById(anyString()); + } } \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java index a1c802d4a..2f97a11ae 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java @@ -135,4 +135,29 @@ public void shouldThrowInvalidRequestExceptionIfAnyErrorOccurredWhileCreatingWal assertEquals("INVALID_REQUEST --> Test Exception", exception.getMessage()); verify(walletHelper).createWallet(userId, name, pin); } + + @Test + public void shouldDeleteWalletSuccessfully() { + when(walletRepository.findByUserIdAndId(userId, walletId)).thenReturn(Optional.of(wallet)); + + walletService.deleteWallet(userId, walletId); + + verify(walletValidator).validateUserId(userId); + verify(walletRepository).findByUserIdAndId(userId, walletId); + verify(walletRepository).delete(wallet); + } + + @Test + public void shouldThrowInvalidRequestExceptionWhenDeletingNonExistentWallet() { + when(walletRepository.findByUserIdAndId(userId, walletId)).thenReturn(Optional.empty()); + + InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> + walletService.deleteWallet(userId, walletId)); + + assertEquals("invalid_request", exception.getErrorCode()); + assertEquals("invalid_request --> Wallet not found", exception.getMessage()); + verify(walletValidator).validateUserId(userId); + verify(walletRepository).findByUserIdAndId(userId, walletId); + verify(walletRepository, never()).delete(any(Wallet.class)); + } } \ No newline at end of file From cc35d3b5e1f48fef0135856212481a684038dccf Mon Sep 17 00:00:00 2001 From: CodeBLUW Date: Mon, 5 May 2025 12:38:00 +0530 Subject: [PATCH 579/860] inji-web 1521 - code for delete api Signed-off-by: CodeBLUW --- .../mimoto/controller/WalletCredentialsController.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index 357a47173..0abd618be 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -240,6 +240,13 @@ public ResponseEntity deleteCredential(@PathVariable("walletId") String walle // Delete the credential walletCredentialService.deleteCredential(credentialId, walletId); return ResponseEntity.status(HttpStatus.OK).build(); + } catch (InvalidRequestException exception) { + log.error("Invalid request: {}", exception.getMessage()); + return Utilities.getErrorResponseEntityWithoutWrapper( + exception, + exception.getErrorCode(), + HttpStatus.BAD_REQUEST, + MediaType.APPLICATION_JSON); } catch (CredentialNotFoundException exception) { log.error("Credential not found: {}", exception.getMessage()); return Utilities.getErrorResponseEntityWithoutWrapper( From 5cf9456c3ab60d9be3982997feb8e0393bc7544d Mon Sep 17 00:00:00 2001 From: CodeBLUW Date: Mon, 5 May 2025 12:48:21 +0530 Subject: [PATCH 580/860] inji-web 1521 - code for delete api Signed-off-by: CodeBLUW --- docs/api-documentation-openapi.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index e9e216c36..e38b6db1d 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -3648,7 +3648,7 @@ "Credential not found": { "value": { "errorCode": "resource_not_found", - "errorMessage": "The requested resource doesn't exist." + "errorMessage": "The requested resource doesn’t exist." } } } From 46a7e3f6e37dc7e3e08118bdf2b185df22cb748c Mon Sep 17 00:00:00 2001 From: CodeBLUW Date: Mon, 5 May 2025 13:03:56 +0530 Subject: [PATCH 581/860] inji-web 1521 - correted the controller test error message Signed-off-by: CodeBLUW --- .../mimoto/controller/WalletCredentialsControllerTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java index 2e8a3e9e3..9dac35a23 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java @@ -349,7 +349,7 @@ public void shouldThrowCredentialNotFoundExceptionWhenDeletingNonExistentCredent .sessionAttr("wallet_key", walletKey)) .andExpect(status().isNotFound()) .andExpect(jsonPath("$.errorCode").value("resource_not_found")) - .andExpect(jsonPath("$.errorMessage").value("The requested resource doesn't exist.")); + .andExpect(jsonPath("$.errorMessage").value("The requested resource doesn’t exist.")); } @Test @@ -361,6 +361,6 @@ public void shouldThrowInvalidRequestForWalletIdMismatchInDeleteCredential() thr .sessionAttr("wallet_key", walletKey)) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.errorCode").value("invalid_request")) - .andExpect(jsonPath("$.errorMessage").value("invalid_request --> Invalid Wallet ID. Session and request Wallet ID do not match")); + .andExpect(jsonPath("$.errorMessage").value("Invalid Wallet ID. Session and request Wallet ID do not match")); } } \ No newline at end of file From 694f2c4c9db1259252708aa9a05a8572185f0e08 Mon Sep 17 00:00:00 2001 From: CodeBLUW Date: Tue, 13 May 2025 09:32:35 +0530 Subject: [PATCH 582/860] injiweb-1521 Signed-off-by: CodeBLUW --- .../mimoto/controller/WalletCredentialsControllerTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java index 9dac35a23..2e8a3e9e3 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java @@ -349,7 +349,7 @@ public void shouldThrowCredentialNotFoundExceptionWhenDeletingNonExistentCredent .sessionAttr("wallet_key", walletKey)) .andExpect(status().isNotFound()) .andExpect(jsonPath("$.errorCode").value("resource_not_found")) - .andExpect(jsonPath("$.errorMessage").value("The requested resource doesn’t exist.")); + .andExpect(jsonPath("$.errorMessage").value("The requested resource doesn't exist.")); } @Test @@ -361,6 +361,6 @@ public void shouldThrowInvalidRequestForWalletIdMismatchInDeleteCredential() thr .sessionAttr("wallet_key", walletKey)) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.errorCode").value("invalid_request")) - .andExpect(jsonPath("$.errorMessage").value("Invalid Wallet ID. Session and request Wallet ID do not match")); + .andExpect(jsonPath("$.errorMessage").value("invalid_request --> Invalid Wallet ID. Session and request Wallet ID do not match")); } } \ No newline at end of file From 5d2f1a0dddc3838eee33601076df552bf9982493 Mon Sep 17 00:00:00 2001 From: CodeBLUW Date: Tue, 13 May 2025 09:44:13 +0530 Subject: [PATCH 583/860] injiweb-1521 fixed test cases expected error messages Signed-off-by: CodeBLUW --- .../mimoto/controller/WalletCredentialsControllerTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java index 2e8a3e9e3..9dac35a23 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java @@ -349,7 +349,7 @@ public void shouldThrowCredentialNotFoundExceptionWhenDeletingNonExistentCredent .sessionAttr("wallet_key", walletKey)) .andExpect(status().isNotFound()) .andExpect(jsonPath("$.errorCode").value("resource_not_found")) - .andExpect(jsonPath("$.errorMessage").value("The requested resource doesn't exist.")); + .andExpect(jsonPath("$.errorMessage").value("The requested resource doesn’t exist.")); } @Test @@ -361,6 +361,6 @@ public void shouldThrowInvalidRequestForWalletIdMismatchInDeleteCredential() thr .sessionAttr("wallet_key", walletKey)) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.errorCode").value("invalid_request")) - .andExpect(jsonPath("$.errorMessage").value("invalid_request --> Invalid Wallet ID. Session and request Wallet ID do not match")); + .andExpect(jsonPath("$.errorMessage").value("Invalid Wallet ID. Session and request Wallet ID do not match")); } } \ No newline at end of file From 8d1ae426e947b1d34f46c0d4c5326f610c3385b6 Mon Sep 17 00:00:00 2001 From: Kamlesh Date: Tue, 13 May 2025 17:59:34 +0530 Subject: [PATCH 584/860] [INJIWEB-1117]: Google Login Redirect URLs Fixed Signed-off-by: Kamlesh --- .../OAuth2AuthenticationFailureHandler.java | 2 +- .../OAuth2AuthenticationSuccessHandler.java | 57 ++++++++++++------- 2 files changed, 37 insertions(+), 22 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationFailureHandler.java b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationFailureHandler.java index 74cc0e6d8..15cd5e61c 100644 --- a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationFailureHandler.java +++ b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationFailureHandler.java @@ -43,7 +43,7 @@ public void onAuthenticationFailure(HttpServletRequest request, HttpServletRespo } String encodedErrorMessage = URLEncoder.encode(errorMessage, StandardCharsets.UTF_8); - String redirectUrl = injiWebUrl + "/login?status=error&error_message=" + encodedErrorMessage; + String redirectUrl = injiWebUrl + "/?status=error&error_message=" + encodedErrorMessage; getRedirectStrategy().sendRedirect(request, response, redirectUrl); } } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java index bf79e0387..fe86724be 100644 --- a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java +++ b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java @@ -1,23 +1,29 @@ package io.mosip.mimoto.security.oauth2; -import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; -import io.mosip.mimoto.exception.DecryptionException; import io.mosip.mimoto.service.UserMetadataService; -import jakarta.servlet.ServletException; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpSession; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.dao.DataAccessResourceFailureException; import org.springframework.security.core.Authentication; +import org.springframework.security.oauth2.client.OAuth2AuthorizedClient; +import org.springframework.security.oauth2.client.OAuth2AuthorizedClientService; import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken; import org.springframework.security.oauth2.core.user.OAuth2User; import org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler; import org.springframework.stereotype.Component; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.Arrays; +import java.util.UUID; +import static io.mosip.mimoto.exception.PlatformErrorMessages.*; @Component @Slf4j @@ -25,6 +31,9 @@ public class OAuth2AuthenticationSuccessHandler extends SimpleUrlAuthenticationS @Autowired private UserMetadataService userMetadataService; + @Autowired + private OAuth2AuthorizedClientService authorizedClientService; + @Value("${mosip.inji.web.url}") private String injiWebUrl; @@ -33,10 +42,6 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo OAuth2AuthenticationToken oauth2Token = (OAuth2AuthenticationToken) authentication; OAuth2User oAuth2User = oauth2Token.getPrincipal(); HttpSession session = request.getSession(false); - if (session == null) { - log.error("Session not available"); - throw new ServletException("Session not available"); - } // Storing clientRegistrationId in the Redis session to verify it against the one in user metadata during profile retrieval String clientRegistrationId = oauth2Token.getAuthorizedClientRegistrationId(); @@ -50,21 +55,31 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo String email = oAuth2User.getAttribute("email"); // Call the service to update or insert the user metadata in the database - - String userId = null; try { - userId = userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); - } catch (DecryptionException e) { - log.error("Failed to store the user info in the database", e); - String redirectUrl = injiWebUrl + "/login?status=error&error_message=" + "database_error"; - response.sendRedirect(redirectUrl); - } - UserMetadataDTO userMetadataDTO = new UserMetadataDTO(displayName, + String userId = userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); + UserMetadataDTO userMetadataDTO = new UserMetadataDTO(displayName, profilePictureUrl, email); - session.setAttribute(SessionKeys.USER_METADATA, userMetadataDTO); - session.setAttribute(SessionKeys.USER_ID, userId); - response.sendRedirect(injiWebUrl + "/login?status=success"); + session.setAttribute("userMetadata", userMetadataDTO); + session.setAttribute("userId", userId); + response.sendRedirect(injiWebUrl + "/pin"); + } catch (DataAccessResourceFailureException exception) { + log.error("Exception occurred while connecting to the database to store user data:", exception); + String errorMessage = String.format( + "status=error&error_code=%s&error_message=%s", + URLEncoder.encode(DATABASE_CONNECTION_EXCEPTION.getCode(), StandardCharsets.UTF_8), + URLEncoder.encode(DATABASE_CONNECTION_EXCEPTION.getMessage(), StandardCharsets.UTF_8) + ); + response.sendRedirect(injiWebUrl + "/?status=error&error_message=" + errorMessage); + } catch (Exception exception) { + log.error("Exception occurred while saving or updating user data in the database:", exception); + String errorMessage = String.format( + "status=error&error_code=%s&error_message=%s", + URLEncoder.encode(USER_METADATA_STORAGE_EXCEPTION.getCode(),StandardCharsets.UTF_8), + URLEncoder.encode(USER_METADATA_STORAGE_EXCEPTION.getMessage(), StandardCharsets.UTF_8) + ); + response.sendRedirect(injiWebUrl + "/?status=error&error_message=" + errorMessage); + } } } From 811fc175735be8ef337cf62660fa018e9ce82fc4 Mon Sep 17 00:00:00 2001 From: Kamlesh Date: Wed, 14 May 2025 22:19:39 +0530 Subject: [PATCH 585/860] [INJIWEB-1117]: Changed OAuth Success Handler Route Signed-off-by: Kamlesh --- .../OAuth2AuthenticationSuccessHandler.java | 61 +++++++------------ 1 file changed, 23 insertions(+), 38 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java index fe86724be..74dc932c8 100644 --- a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java +++ b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java @@ -1,29 +1,23 @@ package io.mosip.mimoto.security.oauth2; +import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; +import io.mosip.mimoto.exception.DecryptionException; import io.mosip.mimoto.service.UserMetadataService; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpSession; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.dao.DataAccessResourceFailureException; import org.springframework.security.core.Authentication; -import org.springframework.security.oauth2.client.OAuth2AuthorizedClient; -import org.springframework.security.oauth2.client.OAuth2AuthorizedClientService; import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken; import org.springframework.security.oauth2.core.user.OAuth2User; import org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler; import org.springframework.stereotype.Component; -import jakarta.servlet.ServletException; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; -import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; -import java.util.Arrays; -import java.util.UUID; -import static io.mosip.mimoto.exception.PlatformErrorMessages.*; @Component @Slf4j @@ -31,9 +25,6 @@ public class OAuth2AuthenticationSuccessHandler extends SimpleUrlAuthenticationS @Autowired private UserMetadataService userMetadataService; - @Autowired - private OAuth2AuthorizedClientService authorizedClientService; - @Value("${mosip.inji.web.url}") private String injiWebUrl; @@ -42,6 +33,10 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo OAuth2AuthenticationToken oauth2Token = (OAuth2AuthenticationToken) authentication; OAuth2User oAuth2User = oauth2Token.getPrincipal(); HttpSession session = request.getSession(false); + if (session == null) { + log.error("Session not available"); + throw new ServletException("Session not available"); + } // Storing clientRegistrationId in the Redis session to verify it against the one in user metadata during profile retrieval String clientRegistrationId = oauth2Token.getAuthorizedClientRegistrationId(); @@ -55,31 +50,21 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo String email = oAuth2User.getAttribute("email"); // Call the service to update or insert the user metadata in the database - try { - String userId = userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); - UserMetadataDTO userMetadataDTO = new UserMetadataDTO(displayName, - profilePictureUrl, - email); - session.setAttribute("userMetadata", userMetadataDTO); - session.setAttribute("userId", userId); - response.sendRedirect(injiWebUrl + "/pin"); - } catch (DataAccessResourceFailureException exception) { - log.error("Exception occurred while connecting to the database to store user data:", exception); - String errorMessage = String.format( - "status=error&error_code=%s&error_message=%s", - URLEncoder.encode(DATABASE_CONNECTION_EXCEPTION.getCode(), StandardCharsets.UTF_8), - URLEncoder.encode(DATABASE_CONNECTION_EXCEPTION.getMessage(), StandardCharsets.UTF_8) - ); - response.sendRedirect(injiWebUrl + "/?status=error&error_message=" + errorMessage); - } catch (Exception exception) { - log.error("Exception occurred while saving or updating user data in the database:", exception); - String errorMessage = String.format( - "status=error&error_code=%s&error_message=%s", - URLEncoder.encode(USER_METADATA_STORAGE_EXCEPTION.getCode(),StandardCharsets.UTF_8), - URLEncoder.encode(USER_METADATA_STORAGE_EXCEPTION.getMessage(), StandardCharsets.UTF_8) - ); - response.sendRedirect(injiWebUrl + "/?status=error&error_message=" + errorMessage); + String userId = null; + try { + userId = userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); + } catch (DecryptionException e) { + log.error("Failed to store the user info in the database", e); + String redirectUrl = injiWebUrl + "/?status=error&error_message=" + "database_error"; + response.sendRedirect(redirectUrl); } + UserMetadataDTO userMetadataDTO = new UserMetadataDTO(displayName, + profilePictureUrl, + email); + session.setAttribute(SessionKeys.USER_METADATA, userMetadataDTO); + session.setAttribute(SessionKeys.USER_ID, userId); + response.sendRedirect(injiWebUrl + "/pin"); + } } From 870d9e6838c1f7a4ffc4d1bc4c017f1dfd523cb6 Mon Sep 17 00:00:00 2001 From: Kamlesh Date: Thu, 15 May 2025 14:08:35 +0530 Subject: [PATCH 586/860] [INJIWEB-1117]: Fix OAuthSuccessHandler Test Signed-off-by: Kamlesh --- .../oauth2/OAuth2AuthenticationSuccessHandlerTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java index 54f35509c..047fb4217 100644 --- a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java +++ b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java @@ -87,7 +87,7 @@ public void onAuthenticationSuccessSetsSessionAttributesAndRedirects() throws IO // Assert verify(session).setAttribute(eq("clientRegistrationId"), eq(CLIENT_REGISTRATION_ID)); verify(session).setAttribute(eq(SessionKeys.USER_ID), eq(USER_ID)); - verify(response).sendRedirect(eq(INJI_WEB_URL + "/login?status=success")); + verify(response).sendRedirect(eq(INJI_WEB_URL + "/pin")); verify(userMetadataService).updateOrInsertUserMetadata( eq(PROVIDER_SUBJECT_ID), eq(CLIENT_REGISTRATION_ID), eq(DISPLAY_NAME), eq(PROFILE_PICTURE_URL), eq(EMAIL)); @@ -121,7 +121,7 @@ public void onAuthenticationSuccessWithNullAttributesSetsSessionAttributesAndRed // Assert verify(session).setAttribute(eq("clientRegistrationId"), eq(CLIENT_REGISTRATION_ID)); verify(session).setAttribute(eq(SessionKeys.USER_ID), eq(USER_ID)); - verify(response).sendRedirect(eq(INJI_WEB_URL + "/login?status=success")); + verify(response).sendRedirect(eq(INJI_WEB_URL + "/pin")); verify(userMetadataService).updateOrInsertUserMetadata( eq(PROVIDER_SUBJECT_ID), eq(CLIENT_REGISTRATION_ID), isNull(), isNull(), isNull()); From 3dd791d72d968433ee3dbf9f4289de9470c707bc Mon Sep 17 00:00:00 2001 From: Praful Rakhade Date: Fri, 16 May 2025 10:36:34 +0530 Subject: [PATCH 587/860] [DSD-8027] Created keygen-mimoto.yaml Signed-off-by: Praful Rakhade --- deploy/mimoto/keygen-mimoto.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 deploy/mimoto/keygen-mimoto.yaml diff --git a/deploy/mimoto/keygen-mimoto.yaml b/deploy/mimoto/keygen-mimoto.yaml new file mode 100644 index 000000000..ceb6fe335 --- /dev/null +++ b/deploy/mimoto/keygen-mimoto.yaml @@ -0,0 +1,10 @@ +extraEnvVars: + - name: DB_DBUSER_PASSWORD + valueFrom: + secretKeyRef: + name: db-common-secrets + key: db-dbuser-password + - name: MOSIP_MIMOTO_DATABASE_HOSTNAME + value: postgres-postresql.postgres + - name: MOSIP_MIMOTO_DATABASE_PORT + value: "5432" From 3ffa6897b37f011970df378ade4bb0df40fbe023 Mon Sep 17 00:00:00 2001 From: Praful Rakhade Date: Fri, 16 May 2025 10:40:25 +0530 Subject: [PATCH 588/860] [DSD-8027] Updated install.sh Signed-off-by: Praful Rakhade --- deploy/mimoto/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/mimoto/install.sh b/deploy/mimoto/install.sh index 66d28d263..3607d3211 100755 --- a/deploy/mimoto/install.sh +++ b/deploy/mimoto/install.sh @@ -86,7 +86,7 @@ function installing_mimoto() { echo "MIMOTO KEYGEN HELM ARGS $MIMOTO_KEYGEN_HELM_ARGS" echo "Running mimoto keygen" - helm -n $NS install mimoto-keygen mosip/keygen $MIMOTO_KEYGEN_HELM_ARGS --wait --wait-for-jobs --version $KEYGEN_CHART_VERSION + helm -n $NS install mimoto-keygen mosip/keygen -f keygen-mimoto.yaml $MIMOTO_KEYGEN_HELM_ARGS --wait --wait-for-jobs --version $KEYGEN_CHART_VERSION fi elif [[ "$keystore_choice" == "3" ]]; then From 693ea8c04b97fd4592221bb9abac6a992c462ebf Mon Sep 17 00:00:00 2001 From: Nandeesh778 <144665029+Nandeesh778@users.noreply.github.com> Date: Fri, 16 May 2025 17:37:06 +0530 Subject: [PATCH 589/860] Add support for w3c data model 2.0 (#708) * Modified the mimoto code to support 2.0 data model. Signed-off-by: Nandeesh * Data model 2.0 support - deriving the context from the request. Signed-off-by: Nandeesh * fix: add fallback to VC v1 context and reverted the testcase change. Signed-off-by: Nandeesh * updated the io.mosip.testrig.apitest.commons dependency. Signed-off-by: Nandeesh * Added the unit tests with context generation scenarios. Signed-off-by: Nandeesh * Removed the print statements in the unit tests. Signed-off-by: Nandeesh * Removed the unwanted annotation at unittests and refactored the context creation code. Signed-off-by: Nandeesh --------- Signed-off-by: Nandeesh --- .../CredentialDefinitionResponseDto.java | 5 + .../dto/mimoto/VCCredentialProperties.java | 11 +- .../mimoto/util/CredentialUtilService.java | 7 +- ...dentialServiceVCCredentialRequestTest.java | 113 ++++++++++++++++++ 4 files changed, 134 insertions(+), 2 deletions(-) create mode 100644 src/test/java/io/mosip/mimoto/service/CredentialServiceVCCredentialRequestTest.java diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDefinitionResponseDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDefinitionResponseDto.java index 4181e8245..6210a81fc 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDefinitionResponseDto.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDefinitionResponseDto.java @@ -25,4 +25,9 @@ public class CredentialDefinitionResponseDto { @JsonProperty("credentialSubject") @Schema(description = "Credential Subject of the VC") private Map<@NotEmpty String, @Valid CredentialDisplayResponseDto> credentialSubject; + + @SerializedName("context") + @JsonProperty("context") + @Schema(description = "context of the Credential Definition") + private List<@NotEmpty String> context; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialProperties.java b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialProperties.java index 7c710e730..4f88506c6 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialProperties.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialProperties.java @@ -14,7 +14,7 @@ import java.util.Map; @Data -@JsonPropertyOrder({"@context", "credentialSubject", "expirationDate", "id", "issuanceDate", "issuer", "proof", "type"}) +@JsonPropertyOrder({"@context", "credentialSubject", "validUntil", "id", "validFrom", "issuer", "proof", "type", "issuanceDate", "expirationDate"}) @NoArgsConstructor @AllArgsConstructor @Builder @@ -24,8 +24,15 @@ public class VCCredentialProperties { @JsonInclude(JsonInclude.Include.NON_NULL) private String id; + @JsonInclude(JsonInclude.Include.NON_NULL) + private String validFrom; + + @JsonInclude(JsonInclude.Include.NON_NULL) private String issuanceDate; + @JsonInclude(JsonInclude.Include.NON_NULL) + private String validUntil; + @JsonInclude(JsonInclude.Include.NON_NULL) private String expirationDate; @@ -38,4 +45,6 @@ public class VCCredentialProperties { @NotEmpty private List<@NotBlank String> type; + + private Map credentialStatus; } diff --git a/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java b/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java index 948b57083..20be4525e 100644 --- a/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java +++ b/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java @@ -151,6 +151,11 @@ public VCCredentialRequest generateVCCredentialRequest(IssuerDTO issuerDTO, Cred byte[] privateKeyInBytes = encryptionDecryptionUtil.decryptWithAES(walletKey, proofSigningKey.get().getEncryptedSecretKey()); jwt = JwtGeneratorUtil.generateJwtUsingDBKeys(algorithm, credentialIssuerWellKnownResponse.getCredentialIssuer(), issuerDTO.getClient_id(), accessToken, publicKeyBytes, privateKeyInBytes); } + List credentialContext = credentialsSupportedResponse.getCredentialDefinition().getContext(); + + if (credentialContext == null || credentialContext.isEmpty()) { + credentialContext = List.of("https://www.w3.org/2018/credentials/v1"); + } return VCCredentialRequest.builder() .format(credentialsSupportedResponse.getFormat()) @@ -160,7 +165,7 @@ public VCCredentialRequest generateVCCredentialRequest(IssuerDTO issuerDTO, Cred .build()) .credentialDefinition(VCCredentialDefinition.builder() .type(credentialsSupportedResponse.getCredentialDefinition().getType()) - .context(List.of("https://www.w3.org/2018/credentials/v1")) + .context(credentialContext) .build()) .build(); } diff --git a/src/test/java/io/mosip/mimoto/service/CredentialServiceVCCredentialRequestTest.java b/src/test/java/io/mosip/mimoto/service/CredentialServiceVCCredentialRequestTest.java new file mode 100644 index 000000000..ce65a0d2b --- /dev/null +++ b/src/test/java/io/mosip/mimoto/service/CredentialServiceVCCredentialRequestTest.java @@ -0,0 +1,113 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.dto.IssuerDTO; +import io.mosip.mimoto.dto.mimoto.*; +import io.mosip.mimoto.util.*; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.junit.MockitoJUnitRunner; + +import java.util.List; +import static io.mosip.mimoto.util.TestUtilities.*; +import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.any; + +@RunWith(MockitoJUnitRunner.class) +public class CredentialServiceVCCredentialRequestTest { + @InjectMocks + CredentialUtilService credentialUtilService; + + @Mock + JoseUtil joseUtil; + + IssuerDTO issuerDTO; + String issuerId; + + @Before + public void setUp() throws Exception { + issuerId = "issuer1"; + issuerDTO = getIssuerConfigDTO(issuerId); + } + + @Test + public void shouldHandleNullContextInCredentialSupportedResponse() throws Exception { + CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupportedResponse("CredentialType1"); + credentialsSupportedResponse.getCredentialDefinition().setContext(null); + + CredentialIssuerWellKnownResponse issuerWellKnownResponse = new CredentialIssuerWellKnownResponse(); + issuerWellKnownResponse.setCredentialIssuer("https://example-issuer.com"); + + Mockito.when(joseUtil.generateJwt(any(), any(), any())).thenReturn("jwt"); + + VCCredentialRequest result = credentialUtilService.generateVCCredentialRequest( + issuerDTO, + issuerWellKnownResponse, + credentialsSupportedResponse, + "test-access-token", + "walletId", + "walletKey", + false + ); + + assertNotNull(result.getCredentialDefinition().getContext()); + assertEquals("https://www.w3.org/2018/credentials/v1", result.getCredentialDefinition().getContext().get(0)); + } + + @Test + public void shouldHandleEmptyContextInCredentialSupportedResponse() throws Exception { + CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupportedResponse("CredentialType1"); + + // Set an empty list as context + credentialsSupportedResponse.getCredentialDefinition().setContext(List.of()); + + CredentialIssuerWellKnownResponse issuerWellKnownResponse = new CredentialIssuerWellKnownResponse(); + issuerWellKnownResponse.setCredentialIssuer("https://example-issuer.com"); + + Mockito.when(joseUtil.generateJwt(any(), any(), any())).thenReturn("jwt"); + + VCCredentialRequest result = credentialUtilService.generateVCCredentialRequest( + issuerDTO, + issuerWellKnownResponse, + credentialsSupportedResponse, + "test-access-token", + "walletId", + "walletKey", + false + ); + + assertNotNull(result.getCredentialDefinition().getContext()); + assertEquals("https://www.w3.org/2018/credentials/v1", result.getCredentialDefinition().getContext().get(0)); + } + + + @Test + public void shouldHandleExistingContextWithSpecificValue() throws Exception { + CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupportedResponse("CredentialType1"); + + // Set context with a specific value + credentialsSupportedResponse.getCredentialDefinition().setContext(List.of("https://www.w3.org/ns/credentials/v2")); + + CredentialIssuerWellKnownResponse issuerWellKnownResponse = new CredentialIssuerWellKnownResponse(); + issuerWellKnownResponse.setCredentialIssuer("https://example-issuer.com"); + + Mockito.when(joseUtil.generateJwt(any(), any(), any())).thenReturn("jwt"); + + VCCredentialRequest result = credentialUtilService.generateVCCredentialRequest( + issuerDTO, + issuerWellKnownResponse, + credentialsSupportedResponse, + "test-access-token", + "walletId", + "walletKey", + false + ); + + assertNotNull(result.getCredentialDefinition().getContext()); + assertEquals("https://www.w3.org/ns/credentials/v2", result.getCredentialDefinition().getContext().get(0)); + } + +} \ No newline at end of file From fecc3fee00309c53af9086d2e7ecc33d69d313af Mon Sep 17 00:00:00 2001 From: SradhaMohanty5899 Date: Mon, 19 May 2025 13:57:31 +0530 Subject: [PATCH 590/860] MOSIP-40258 Signed-off-by: SradhaMohanty5899 --- api-test/pom.xml | 2 +- .../mosip/testrig/apirig/mimoto/testscripts/AddIdentity.java | 3 ++- .../testrig/apirig/mimoto/testscripts/DeleteWithParam.java | 3 ++- .../mosip/testrig/apirig/mimoto/testscripts/GetWithParam.java | 3 ++- .../mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java | 3 ++- .../apirig/mimoto/testscripts/PostWithBodyWithOtpGenerate.java | 3 ++- .../io/mosip/testrig/apirig/mimoto/testscripts/SimplePost.java | 3 ++- .../apirig/mimoto/testscripts/SimplePostForAutoGenId.java | 3 ++- 8 files changed, 15 insertions(+), 8 deletions(-) diff --git a/api-test/pom.xml b/api-test/pom.xml index cbc8010e4..e20dbf9c3 100644 --- a/api-test/pom.xml +++ b/api-test/pom.xml @@ -56,7 +56,7 @@ io.mosip.testrig.apitest.commons apitest-commons - 1.3.2-SNAPSHOT + 1.3.3-SNAPSHOT diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/AddIdentity.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/AddIdentity.java index f5bd9aeba..e0eed492b 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/AddIdentity.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/AddIdentity.java @@ -38,6 +38,7 @@ import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; import io.mosip.testrig.apirig.utils.RestClient; +import io.mosip.testrig.apirig.utils.SecurityXSSException; import io.restassured.response.Response; public class AddIdentity extends MimotoUtil implements ITest { @@ -84,7 +85,7 @@ public Object[] getTestCaseList(ITestContext context) { * @throws AdminTestException */ @Test(dataProvider = "testcaselist") - public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException { + public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException, SecurityXSSException { testCaseName = testCaseDTO.getTestCaseName(); if (HealthChecker.signalTerminateExecution) { throw new SkipException( diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/DeleteWithParam.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/DeleteWithParam.java index 50773eaad..ff91a401b 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/DeleteWithParam.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/DeleteWithParam.java @@ -31,6 +31,7 @@ import io.mosip.testrig.apirig.utils.GlobalConstants; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; +import io.mosip.testrig.apirig.utils.SecurityXSSException; import io.restassured.response.Response; public class DeleteWithParam extends MimotoUtil implements ITest { @@ -76,7 +77,7 @@ public Object[] getTestCaseList(ITestContext context) { * @throws AdminTestException */ @Test(dataProvider = "testcaselist") - public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException { + public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException, SecurityXSSException { testCaseName = testCaseDTO.getTestCaseName(); testCaseDTO = MimotoUtil.isTestCaseValidForTheExecution(testCaseDTO); testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/GetWithParam.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/GetWithParam.java index 0f5b876f4..ff5614a58 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/GetWithParam.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/GetWithParam.java @@ -33,6 +33,7 @@ import io.mosip.testrig.apirig.utils.GlobalConstants; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; +import io.mosip.testrig.apirig.utils.SecurityXSSException; import io.restassured.response.Response; public class GetWithParam extends MimotoUtil implements ITest { @@ -81,7 +82,7 @@ public Object[] getTestCaseList(ITestContext context) { * @throws AdminTestException */ @Test(dataProvider = "testcaselist") - public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException { + public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException, SecurityXSSException { testCaseName = testCaseDTO.getTestCaseName(); testCaseDTO = MimotoUtil.isTestCaseValidForTheExecution(testCaseDTO); testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java index d6840b06c..d7c7914f4 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java @@ -32,6 +32,7 @@ import io.mosip.testrig.apirig.utils.GlobalConstants; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; +import io.mosip.testrig.apirig.utils.SecurityXSSException; import io.restassured.response.Response; public class PostWithAutogenIdWithOtpGenerate extends MimotoUtil implements ITest { @@ -83,7 +84,7 @@ public Object[] getTestCaseList(ITestContext context) { */ @Test(dataProvider = "testcaselist") public void test(TestCaseDTO testCaseDTO) - throws AuthenticationTestException, AdminTestException, NumberFormatException, InterruptedException { + throws AuthenticationTestException, AdminTestException, NumberFormatException, InterruptedException, SecurityXSSException { testCaseName = testCaseDTO.getTestCaseName(); if (HealthChecker.signalTerminateExecution) { throw new SkipException( diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithBodyWithOtpGenerate.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithBodyWithOtpGenerate.java index 41c3e19a4..e480e4c19 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithBodyWithOtpGenerate.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithBodyWithOtpGenerate.java @@ -31,6 +31,7 @@ import io.mosip.testrig.apirig.utils.GlobalConstants; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; +import io.mosip.testrig.apirig.utils.SecurityXSSException; import io.restassured.response.Response; public class PostWithBodyWithOtpGenerate extends MimotoUtil implements ITest { @@ -79,7 +80,7 @@ public Object[] getTestCaseList(ITestContext context) { * @throws AdminTestException */ @Test(dataProvider = "testcaselist") - public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException { + public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException, SecurityXSSException { testCaseName = testCaseDTO.getTestCaseName(); if (HealthChecker.signalTerminateExecution) { throw new SkipException( diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePost.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePost.java index d2c29890a..a773a1103 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePost.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePost.java @@ -33,6 +33,7 @@ import io.mosip.testrig.apirig.utils.GlobalConstants; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; +import io.mosip.testrig.apirig.utils.SecurityXSSException; import io.restassured.response.Response; public class SimplePost extends MimotoUtil implements ITest { @@ -81,7 +82,7 @@ public Object[] getTestCaseList(ITestContext context) { * @throws AdminTestException */ @Test(dataProvider = "testcaselist") - public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException { + public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException, SecurityXSSException { testCaseName = testCaseDTO.getTestCaseName(); testCaseDTO = MimotoUtil.isTestCaseValidForTheExecution(testCaseDTO); testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java index cd2420505..ce29b8094 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java @@ -34,6 +34,7 @@ import io.mosip.testrig.apirig.utils.GlobalConstants; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; +import io.mosip.testrig.apirig.utils.SecurityXSSException; import io.restassured.response.Response; public class SimplePostForAutoGenId extends MimotoUtil implements ITest { @@ -86,7 +87,7 @@ public Object[] getTestCaseList(ITestContext context) { */ @Test(dataProvider = "testcaselist") public void test(TestCaseDTO testCaseDTO) - throws AuthenticationTestException, AdminTestException, NoSuchAlgorithmException { + throws AuthenticationTestException, AdminTestException, NoSuchAlgorithmException, SecurityXSSException { testCaseName = testCaseDTO.getTestCaseName(); if (HealthChecker.signalTerminateExecution) { throw new SkipException( From d60d437af7f7d2200ef4257e5e1111f55acc79d8 Mon Sep 17 00:00:00 2001 From: SradhaMohanty5899 Date: Mon, 19 May 2025 19:58:42 +0530 Subject: [PATCH 591/860] MOSIP-40258 Signed-off-by: SradhaMohanty5899 --- .../mimoto/testscripts/PostWithFormDataBodyForPdfDownload.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithFormDataBodyForPdfDownload.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithFormDataBodyForPdfDownload.java index 327537df0..680ed9424 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithFormDataBodyForPdfDownload.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithFormDataBodyForPdfDownload.java @@ -31,6 +31,7 @@ import io.mosip.testrig.apirig.utils.AuthenticationTestException; import io.mosip.testrig.apirig.utils.GlobalConstants; import io.mosip.testrig.apirig.utils.GlobalMethods; +import io.mosip.testrig.apirig.utils.SecurityXSSException; import io.restassured.response.Response; public class PostWithFormDataBodyForPdfDownload extends MimotoUtil implements ITest { @@ -79,7 +80,7 @@ public Object[] getTestCaseList(ITestContext context) { * @throws AdminTestException */ @Test(dataProvider = "testcaselist") - public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException { + public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException, SecurityXSSException { testCaseName = testCaseDTO.getTestCaseName(); testCaseDTO = MimotoUtil.isTestCaseValidForTheExecution(testCaseDTO); testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); From 9ee6c657bcec8ab3144349448ca4bf9850403e36 Mon Sep 17 00:00:00 2001 From: Sradha Mohanty <134414554+SradhaMohanty5899@users.noreply.github.com> Date: Wed, 21 May 2025 13:09:04 +0530 Subject: [PATCH 592/860] MOSIP-40258: Standardized XSS Exception Handling in apitest-mimoto Module (#718) * MOSIP-40258 Signed-off-by: SradhaMohanty5899 * MOSIP-40258 Signed-off-by: SradhaMohanty5899 --------- Signed-off-by: SradhaMohanty5899 --- api-test/pom.xml | 2 +- .../mosip/testrig/apirig/mimoto/testscripts/AddIdentity.java | 3 ++- .../testrig/apirig/mimoto/testscripts/DeleteWithParam.java | 3 ++- .../mosip/testrig/apirig/mimoto/testscripts/GetWithParam.java | 3 ++- .../mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java | 3 ++- .../apirig/mimoto/testscripts/PostWithBodyWithOtpGenerate.java | 3 ++- .../mimoto/testscripts/PostWithFormDataBodyForPdfDownload.java | 3 ++- .../io/mosip/testrig/apirig/mimoto/testscripts/SimplePost.java | 3 ++- .../apirig/mimoto/testscripts/SimplePostForAutoGenId.java | 3 ++- 9 files changed, 17 insertions(+), 9 deletions(-) diff --git a/api-test/pom.xml b/api-test/pom.xml index f9254735f..e20dbf9c3 100644 --- a/api-test/pom.xml +++ b/api-test/pom.xml @@ -56,7 +56,7 @@ io.mosip.testrig.apitest.commons apitest-commons - 1.3.2 + 1.3.3-SNAPSHOT diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/AddIdentity.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/AddIdentity.java index f5bd9aeba..e0eed492b 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/AddIdentity.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/AddIdentity.java @@ -38,6 +38,7 @@ import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; import io.mosip.testrig.apirig.utils.RestClient; +import io.mosip.testrig.apirig.utils.SecurityXSSException; import io.restassured.response.Response; public class AddIdentity extends MimotoUtil implements ITest { @@ -84,7 +85,7 @@ public Object[] getTestCaseList(ITestContext context) { * @throws AdminTestException */ @Test(dataProvider = "testcaselist") - public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException { + public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException, SecurityXSSException { testCaseName = testCaseDTO.getTestCaseName(); if (HealthChecker.signalTerminateExecution) { throw new SkipException( diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/DeleteWithParam.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/DeleteWithParam.java index 50773eaad..ff91a401b 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/DeleteWithParam.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/DeleteWithParam.java @@ -31,6 +31,7 @@ import io.mosip.testrig.apirig.utils.GlobalConstants; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; +import io.mosip.testrig.apirig.utils.SecurityXSSException; import io.restassured.response.Response; public class DeleteWithParam extends MimotoUtil implements ITest { @@ -76,7 +77,7 @@ public Object[] getTestCaseList(ITestContext context) { * @throws AdminTestException */ @Test(dataProvider = "testcaselist") - public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException { + public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException, SecurityXSSException { testCaseName = testCaseDTO.getTestCaseName(); testCaseDTO = MimotoUtil.isTestCaseValidForTheExecution(testCaseDTO); testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/GetWithParam.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/GetWithParam.java index 0f5b876f4..ff5614a58 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/GetWithParam.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/GetWithParam.java @@ -33,6 +33,7 @@ import io.mosip.testrig.apirig.utils.GlobalConstants; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; +import io.mosip.testrig.apirig.utils.SecurityXSSException; import io.restassured.response.Response; public class GetWithParam extends MimotoUtil implements ITest { @@ -81,7 +82,7 @@ public Object[] getTestCaseList(ITestContext context) { * @throws AdminTestException */ @Test(dataProvider = "testcaselist") - public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException { + public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException, SecurityXSSException { testCaseName = testCaseDTO.getTestCaseName(); testCaseDTO = MimotoUtil.isTestCaseValidForTheExecution(testCaseDTO); testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java index d6840b06c..d7c7914f4 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java @@ -32,6 +32,7 @@ import io.mosip.testrig.apirig.utils.GlobalConstants; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; +import io.mosip.testrig.apirig.utils.SecurityXSSException; import io.restassured.response.Response; public class PostWithAutogenIdWithOtpGenerate extends MimotoUtil implements ITest { @@ -83,7 +84,7 @@ public Object[] getTestCaseList(ITestContext context) { */ @Test(dataProvider = "testcaselist") public void test(TestCaseDTO testCaseDTO) - throws AuthenticationTestException, AdminTestException, NumberFormatException, InterruptedException { + throws AuthenticationTestException, AdminTestException, NumberFormatException, InterruptedException, SecurityXSSException { testCaseName = testCaseDTO.getTestCaseName(); if (HealthChecker.signalTerminateExecution) { throw new SkipException( diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithBodyWithOtpGenerate.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithBodyWithOtpGenerate.java index 41c3e19a4..e480e4c19 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithBodyWithOtpGenerate.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithBodyWithOtpGenerate.java @@ -31,6 +31,7 @@ import io.mosip.testrig.apirig.utils.GlobalConstants; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; +import io.mosip.testrig.apirig.utils.SecurityXSSException; import io.restassured.response.Response; public class PostWithBodyWithOtpGenerate extends MimotoUtil implements ITest { @@ -79,7 +80,7 @@ public Object[] getTestCaseList(ITestContext context) { * @throws AdminTestException */ @Test(dataProvider = "testcaselist") - public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException { + public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException, SecurityXSSException { testCaseName = testCaseDTO.getTestCaseName(); if (HealthChecker.signalTerminateExecution) { throw new SkipException( diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithFormDataBodyForPdfDownload.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithFormDataBodyForPdfDownload.java index 327537df0..680ed9424 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithFormDataBodyForPdfDownload.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithFormDataBodyForPdfDownload.java @@ -31,6 +31,7 @@ import io.mosip.testrig.apirig.utils.AuthenticationTestException; import io.mosip.testrig.apirig.utils.GlobalConstants; import io.mosip.testrig.apirig.utils.GlobalMethods; +import io.mosip.testrig.apirig.utils.SecurityXSSException; import io.restassured.response.Response; public class PostWithFormDataBodyForPdfDownload extends MimotoUtil implements ITest { @@ -79,7 +80,7 @@ public Object[] getTestCaseList(ITestContext context) { * @throws AdminTestException */ @Test(dataProvider = "testcaselist") - public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException { + public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException, SecurityXSSException { testCaseName = testCaseDTO.getTestCaseName(); testCaseDTO = MimotoUtil.isTestCaseValidForTheExecution(testCaseDTO); testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePost.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePost.java index d2c29890a..a773a1103 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePost.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePost.java @@ -33,6 +33,7 @@ import io.mosip.testrig.apirig.utils.GlobalConstants; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; +import io.mosip.testrig.apirig.utils.SecurityXSSException; import io.restassured.response.Response; public class SimplePost extends MimotoUtil implements ITest { @@ -81,7 +82,7 @@ public Object[] getTestCaseList(ITestContext context) { * @throws AdminTestException */ @Test(dataProvider = "testcaselist") - public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException { + public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException, SecurityXSSException { testCaseName = testCaseDTO.getTestCaseName(); testCaseDTO = MimotoUtil.isTestCaseValidForTheExecution(testCaseDTO); testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java index cd2420505..ce29b8094 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java @@ -34,6 +34,7 @@ import io.mosip.testrig.apirig.utils.GlobalConstants; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; +import io.mosip.testrig.apirig.utils.SecurityXSSException; import io.restassured.response.Response; public class SimplePostForAutoGenId extends MimotoUtil implements ITest { @@ -86,7 +87,7 @@ public Object[] getTestCaseList(ITestContext context) { */ @Test(dataProvider = "testcaselist") public void test(TestCaseDTO testCaseDTO) - throws AuthenticationTestException, AdminTestException, NoSuchAlgorithmException { + throws AuthenticationTestException, AdminTestException, NoSuchAlgorithmException, SecurityXSSException { testCaseName = testCaseDTO.getTestCaseName(); if (HealthChecker.signalTerminateExecution) { throw new SkipException( From c40d8e697bea90015d769d92fcad83f33dd7d407 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Wed, 21 May 2025 14:07:07 +0530 Subject: [PATCH 593/860] [INJIWEB-1546] add properties so any oauth2 mapping can be read (#717) Signed-off-by: Gurpreet41082 --- .../java/io/mosip/mimoto/config/Config.java | 5 + .../mimoto/dto/OAuth2ProviderProperties.java | 28 ++ .../mosip/mimoto/dto/ProviderDataConfig.java | 20 ++ .../oauth2/CustomOAuth2UserService.java | 125 +++++++++ .../OAuth2AuthenticationSuccessHandler.java | 28 +- .../resources/application-default.properties | 5 + .../oauth2/CustomOAuth2UserServiceTest.java | 253 ++++++++++++++++++ ...Auth2AuthenticationSuccessHandlerTest.java | 114 ++------ 8 files changed, 467 insertions(+), 111 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/dto/OAuth2ProviderProperties.java create mode 100644 src/main/java/io/mosip/mimoto/dto/ProviderDataConfig.java create mode 100644 src/main/java/io/mosip/mimoto/security/oauth2/CustomOAuth2UserService.java create mode 100644 src/test/java/io/mosip/mimoto/security/oauth2/CustomOAuth2UserServiceTest.java diff --git a/src/main/java/io/mosip/mimoto/config/Config.java b/src/main/java/io/mosip/mimoto/config/Config.java index 480bcce19..e6ca6250d 100644 --- a/src/main/java/io/mosip/mimoto/config/Config.java +++ b/src/main/java/io/mosip/mimoto/config/Config.java @@ -1,6 +1,7 @@ package io.mosip.mimoto.config; import io.mosip.mimoto.exception.OAuth2AuthenticationException; +import io.mosip.mimoto.security.oauth2.CustomOAuth2UserService; import io.mosip.mimoto.security.oauth2.OAuth2AuthenticationFailureHandler; import io.mosip.mimoto.security.oauth2.OAuth2AuthenticationSuccessHandler; import io.mosip.mimoto.service.LogoutService; @@ -71,6 +72,9 @@ public Map injiConfig() { @Autowired private OAuth2AuthenticationFailureHandler oAuth2AuthenticationFailureHandler; + @Autowired + private CustomOAuth2UserService customOAuth2UserService; + @Bean public SecurityFilterChain filterChain(HttpSecurity http, SessionRepository sessionRepository) throws Exception { if (!isCSRFEnable) { @@ -109,6 +113,7 @@ private void configureOAuth2Login(HttpSecurity http) throws Exception { .loginPage(injiWebUrl + "/login") .authorizationEndpoint(authorization -> authorization.baseUri("/oauth2/authorize")) .redirectionEndpoint(redirect -> redirect.baseUri("/oauth2/callback/*")) + .userInfoEndpoint(userInfo -> userInfo.userService(customOAuth2UserService)) .successHandler(oAuth2AuthenticationSuccessHandler) .failureHandler(oAuth2AuthenticationFailureHandler) ); diff --git a/src/main/java/io/mosip/mimoto/dto/OAuth2ProviderProperties.java b/src/main/java/io/mosip/mimoto/dto/OAuth2ProviderProperties.java new file mode 100644 index 000000000..f2989ca4e --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/OAuth2ProviderProperties.java @@ -0,0 +1,28 @@ +package io.mosip.mimoto.dto; + +import jakarta.annotation.PostConstruct; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +import java.util.Map; + +@Configuration +@ConfigurationProperties(prefix = "spring.security.oauth2.client") +@Slf4j +@Data +public class OAuth2ProviderProperties { + private Map provider; + + @PostConstruct + public void logProviders() { + if (provider == null || provider.isEmpty()) { + log.warn("No OAuth2 providers configured under 'spring.security.oauth2.client.provider'"); + } else { + log.info("Loaded OAuth2 providers: {}", provider.keySet()); + provider.forEach((key, prov) -> log.debug("Provider {}: {}", key, prov)); + } + } + +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/dto/ProviderDataConfig.java b/src/main/java/io/mosip/mimoto/dto/ProviderDataConfig.java new file mode 100644 index 000000000..d1cc9b630 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/ProviderDataConfig.java @@ -0,0 +1,20 @@ +package io.mosip.mimoto.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * The ProviderDataConfig class represents a configuration for provider data attributes. + * It contains fields for various attributes such as username, name, email, picture, and phone number. + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ProviderDataConfig { + private String userNameAttribute; + private String nameAttribute; + private String emailAttribute; + private String pictureAttribute; + private String phoneNumberAttribute; +} diff --git a/src/main/java/io/mosip/mimoto/security/oauth2/CustomOAuth2UserService.java b/src/main/java/io/mosip/mimoto/security/oauth2/CustomOAuth2UserService.java new file mode 100644 index 000000000..db91e808f --- /dev/null +++ b/src/main/java/io/mosip/mimoto/security/oauth2/CustomOAuth2UserService.java @@ -0,0 +1,125 @@ +package io.mosip.mimoto.security.oauth2; + +import io.mosip.mimoto.constant.SessionKeys; +import io.mosip.mimoto.dto.OAuth2ProviderProperties; +import io.mosip.mimoto.dto.ProviderDataConfig; +import io.mosip.mimoto.exception.DecryptionException; +import io.mosip.mimoto.service.UserMetadataService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.security.oauth2.client.userinfo.DefaultOAuth2UserService; +import org.springframework.security.oauth2.client.userinfo.OAuth2UserRequest; +import org.springframework.security.oauth2.core.user.DefaultOAuth2User; +import org.springframework.security.oauth2.core.user.OAuth2User; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; + +/** + * Custom implementation of the {@link DefaultOAuth2UserService} to handle + * user information retrieval and processing for OAuth2 authentication. + * + * This service customizes the loading of user details from an OAuth2 provider + * by enriching the user attributes, updating user metadata, and handling + * provider-specific configurations. + */ +@Service +@Slf4j +public class CustomOAuth2UserService extends DefaultOAuth2UserService { + + private final Map providers; + private final UserMetadataService userMetadataService; + + public CustomOAuth2UserService(OAuth2ProviderProperties providerProperties, + UserMetadataService userMetadataService) { + this.providers = providerProperties.getProvider(); + this.userMetadataService = userMetadataService; + } + + @Override + public OAuth2User loadUser(OAuth2UserRequest userRequest) { + OAuth2User oAuth2User = loadFromProvider(userRequest); + String registrationId = userRequest.getClientRegistration().getRegistrationId(); + ProviderDataConfig provider = getProviderConfig(registrationId); + + Map attributes = extractAttributes(oAuth2User, provider); + String userId = updateUserMetadata(attributes, provider, registrationId); + enrichAttributes(attributes, userId); + + String userNameAttribute = StringUtils.defaultIfBlank(provider.getUserNameAttribute(), "sub"); + return new DefaultOAuth2User(oAuth2User.getAuthorities(), attributes, userNameAttribute); + } + + private ProviderDataConfig getProviderConfig(String registrationId) { + ProviderDataConfig provider = providers.get(registrationId); + if (provider == null) { + log.error("Missing OAuth2 provider config for: {}", registrationId); + throw new IllegalArgumentException("Missing OAuth2 provider config for: " + registrationId); + } + return provider; + } + + private Map extractAttributes(OAuth2User oAuth2User, ProviderDataConfig provider) { + Map attributes = new HashMap<>(oAuth2User.getAttributes()); + attributes.put("name", safeGet(attributes, provider.getNameAttribute())); + attributes.put("email", safeGet(attributes, provider.getEmailAttribute())); + attributes.put("phone", safeGet(attributes, provider.getPhoneNumberAttribute())); + attributes.put("picture", extractProfilePicture(attributes, provider.getPictureAttribute())); + return attributes; + } + + private String extractProfilePicture(Map attributes, String pictureAttribute) { + if (StringUtils.isBlank(pictureAttribute) || !attributes.containsKey(pictureAttribute)) { + return null; + } + + Object picture = attributes.get(pictureAttribute); + if (picture instanceof Map picMap) { + Object data = picMap.get("data"); + if (data instanceof Map dataMap) { + Object url = dataMap.get("url"); + return url != null ? url.toString() : null; + } + } else if (picture instanceof String picUrl) { + return picUrl; + } + + return null; + } + + private String updateUserMetadata(Map attributes, ProviderDataConfig provider, String registrationId) { + String providerSubjectId = safeGet(attributes, StringUtils.defaultIfBlank(provider.getUserNameAttribute(), "sub")); + try { + return userMetadataService.updateOrInsertUserMetadata( + providerSubjectId, + registrationId, + safeGet(attributes, "name"), + safeGet(attributes, "picture"), + safeGet(attributes, "email") + ); + } catch (DecryptionException e) { + log.error("Error updating user metadata", e); + throw new RuntimeException("Metadata update failed", e); + } + } + + private void enrichAttributes(Map attributes, String userId) { + attributes.put(SessionKeys.USER_ID, userId); + } + + private String safeGet(Map attributes, String key) { + if (StringUtils.isBlank(key)) { + return null; + } + Object value = attributes.get(key); + if (value == null) { + return null; + } + return value.toString(); + } + + protected OAuth2User loadFromProvider(OAuth2UserRequest userRequest) { + return super.loadUser(userRequest); + } +} diff --git a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java index bf79e0387..a5c635883 100644 --- a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java +++ b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java @@ -2,14 +2,11 @@ import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; -import io.mosip.mimoto.exception.DecryptionException; -import io.mosip.mimoto.service.UserMetadataService; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpSession; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.security.core.Authentication; import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken; @@ -22,8 +19,6 @@ @Component @Slf4j public class OAuth2AuthenticationSuccessHandler extends SimpleUrlAuthenticationSuccessHandler { - @Autowired - private UserMetadataService userMetadataService; @Value("${mosip.inji.web.url}") private String injiWebUrl; @@ -32,39 +27,26 @@ public class OAuth2AuthenticationSuccessHandler extends SimpleUrlAuthenticationS public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { OAuth2AuthenticationToken oauth2Token = (OAuth2AuthenticationToken) authentication; OAuth2User oAuth2User = oauth2Token.getPrincipal(); + HttpSession session = request.getSession(false); if (session == null) { log.error("Session not available"); throw new ServletException("Session not available"); } - // Storing clientRegistrationId in the Redis session to verify it against the one in user metadata during profile retrieval String clientRegistrationId = oauth2Token.getAuthorizedClientRegistrationId(); session.setAttribute("clientRegistrationId", clientRegistrationId); - // Extracting OAuth2 user information - String providerSubjectId = oAuth2User.getAttribute("sub"); - String identityProvider = oauth2Token.getAuthorizedClientRegistrationId(); + // Add user info to session for UI String displayName = oAuth2User.getAttribute("name"); String profilePictureUrl = oAuth2User.getAttribute("picture"); String email = oAuth2User.getAttribute("email"); - // Call the service to update or insert the user metadata in the database + session.setAttribute(SessionKeys.USER_METADATA, new UserMetadataDTO(displayName, profilePictureUrl, email)); - String userId = null; - try { - userId = userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); - } catch (DecryptionException e) { - log.error("Failed to store the user info in the database", e); - String redirectUrl = injiWebUrl + "/login?status=error&error_message=" + "database_error"; - response.sendRedirect(redirectUrl); - } - UserMetadataDTO userMetadataDTO = new UserMetadataDTO(displayName, - profilePictureUrl, - email); - session.setAttribute(SessionKeys.USER_METADATA, userMetadataDTO); + String userId = oAuth2User.getAttribute("userId"); session.setAttribute(SessionKeys.USER_ID, userId); - response.sendRedirect(injiWebUrl + "/login?status=success"); + response.sendRedirect(injiWebUrl + "/login?status=success"); } } diff --git a/src/main/resources/application-default.properties b/src/main/resources/application-default.properties index be45ee0ff..8b6873c4a 100644 --- a/src/main/resources/application-default.properties +++ b/src/main/resources/application-default.properties @@ -9,6 +9,11 @@ spring.security.oauth2.client.provider.google.authorization-uri=https://accounts spring.security.oauth2.client.provider.google.token-uri=https://oauth2.googleapis.com/token spring.security.oauth2.client.provider.google.user-info-uri=https://www.googleapis.com/oauth2/v3/userinfo spring.security.oauth2.client.provider.google.jwk-set-uri=https://www.googleapis.com/oauth2/v3/certs +spring.security.oauth2.client.provider.google.userNameAttribute=sub +spring.security.oauth2.client.provider.google.nameAttribute=name +spring.security.oauth2.client.provider.google.emailAttribute=email +spring.security.oauth2.client.provider.google.pictureAttribute=picture +spring.security.oauth2.client.provider.google.phoneNumberAttribute=phone_number #Database config spring.datasource.url=jdbc:postgresql://${mosip.mimoto.database.hostname}:${mosip.mimoto.database.port}/inji_mimoto diff --git a/src/test/java/io/mosip/mimoto/security/oauth2/CustomOAuth2UserServiceTest.java b/src/test/java/io/mosip/mimoto/security/oauth2/CustomOAuth2UserServiceTest.java new file mode 100644 index 000000000..4b632f5f5 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/security/oauth2/CustomOAuth2UserServiceTest.java @@ -0,0 +1,253 @@ +package io.mosip.mimoto.security.oauth2; + +import io.mosip.mimoto.constant.SessionKeys; +import io.mosip.mimoto.dto.OAuth2ProviderProperties; +import io.mosip.mimoto.dto.ProviderDataConfig; +import io.mosip.mimoto.exception.DecryptionException; +import io.mosip.mimoto.exception.ErrorConstants; +import io.mosip.mimoto.service.UserMetadataService; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.oauth2.client.registration.ClientRegistration; +import org.springframework.security.oauth2.client.userinfo.OAuth2UserRequest; +import org.springframework.security.oauth2.core.AuthorizationGrantType; +import org.springframework.security.oauth2.core.OAuth2AccessToken; +import org.springframework.security.oauth2.core.user.DefaultOAuth2User; +import org.springframework.security.oauth2.core.user.OAuth2User; + +import java.time.Instant; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class CustomOAuth2UserServiceTest { + + @Mock + private OAuth2ProviderProperties providerProperties; + + @Mock + private UserMetadataService userMetadataService; + + private CustomOAuth2UserService customOAuth2UserService; + + private ClientRegistration clientRegistration; + private OAuth2AccessToken accessToken; + private OAuth2UserRequest oAuth2UserRequest; + private Map providersConfig; + + private static class TestableOAuth2UserService extends CustomOAuth2UserService { + private final OAuth2User testUser; + + public TestableOAuth2UserService(OAuth2ProviderProperties properties, UserMetadataService service, OAuth2User testUser) { + super(properties, service); + this.testUser = testUser; + } + + @Override + protected OAuth2User loadFromProvider(OAuth2UserRequest userRequest) { + return testUser; + } + } + + @BeforeEach + void setUp() { + clientRegistration = ClientRegistration.withRegistrationId("test-provider") + .clientId("test-client-id") + .clientSecret("test-client-secret") + .authorizationUri("https://example.com/oauth/authorize") + .tokenUri("https://example.com/oauth/token") + .userInfoUri("https://example.com/oauth/userinfo") + .userNameAttributeName("sub") + .clientName("Test Provider") + .redirectUri("{baseUrl}/oauth2/callback/{registrationId}") + .authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE) + .build(); + + accessToken = new OAuth2AccessToken( + OAuth2AccessToken.TokenType.BEARER, + "test-token", + Instant.now(), + Instant.now().plusSeconds(3600) + ); + + oAuth2UserRequest = new OAuth2UserRequest(clientRegistration, accessToken); + providersConfig = new HashMap<>(); + } + + @Test + void testLoadUserSuccessfulFlow() throws DecryptionException { + // Arrange + Map userAttributes = new HashMap<>(); + userAttributes.put("sub", "test-subject"); + userAttributes.put("name", "Test User"); + userAttributes.put("email", "test@example.com"); + userAttributes.put("phone", "123-456-7890"); + userAttributes.put("picture", "https://example.com/avatar.jpg"); + + OAuth2User defaultUser = new DefaultOAuth2User( + Collections.singletonList(new SimpleGrantedAuthority("ROLE_USER")), + userAttributes, + "sub" + ); + + ProviderDataConfig providerConfig = new ProviderDataConfig(); + providerConfig.setUserNameAttribute("sub"); + providerConfig.setNameAttribute("name"); + providerConfig.setEmailAttribute("email"); + providerConfig.setPhoneNumberAttribute("phone"); + providerConfig.setPictureAttribute("picture"); + + providersConfig.put("test-provider", providerConfig); + when(providerProperties.getProvider()).thenReturn(providersConfig); + when(userMetadataService.updateOrInsertUserMetadata(anyString(), anyString(), anyString(), anyString(), anyString())) + .thenReturn("test-user-id"); + + customOAuth2UserService = new TestableOAuth2UserService(providerProperties, userMetadataService, defaultUser); + + // Act + OAuth2User actualUser = customOAuth2UserService.loadUser(oAuth2UserRequest); + + // Assert + assertNotNull(actualUser); + assertEquals("Test User", actualUser.getAttributes().get("name")); + assertEquals("test@example.com", actualUser.getAttributes().get("email")); + assertEquals("123-456-7890", actualUser.getAttributes().get("phone")); + assertEquals("https://example.com/avatar.jpg", actualUser.getAttributes().get("picture")); + assertEquals("test-user-id", actualUser.getAttributes().get(SessionKeys.USER_ID)); + + verify(userMetadataService).updateOrInsertUserMetadata( + "test-subject", + "test-provider", + "Test User", + "https://example.com/avatar.jpg", + "test@example.com" + ); + } + + @Test + void testLoadUserWithNestedPictureData() throws DecryptionException { + // Arrange + Map pictureMap = new HashMap<>(); + Map dataMap = new HashMap<>(); + dataMap.put("url", "https://example.com/nested.jpg"); + pictureMap.put("data", dataMap); + + Map userAttributes = new HashMap<>(); + userAttributes.put("sub", "nested-subject"); + userAttributes.put("name", "Nested User"); + userAttributes.put("email", "nested@example.com"); + userAttributes.put("phone", "9999999999"); + userAttributes.put("picture", pictureMap); + + OAuth2User nestedPictureUser = new DefaultOAuth2User( + Collections.singletonList(new SimpleGrantedAuthority("ROLE_USER")), + userAttributes, + "sub" + ); + + ProviderDataConfig providerConfig = new ProviderDataConfig(); + providerConfig.setUserNameAttribute("sub"); + providerConfig.setNameAttribute("name"); + providerConfig.setEmailAttribute("email"); + providerConfig.setPhoneNumberAttribute("phone"); + providerConfig.setPictureAttribute("picture"); + + providersConfig.put("test-provider", providerConfig); + when(providerProperties.getProvider()).thenReturn(providersConfig); + when(userMetadataService.updateOrInsertUserMetadata(anyString(), anyString(), anyString(), anyString(), anyString())) + .thenReturn("nested-user-id"); + + customOAuth2UserService = new TestableOAuth2UserService(providerProperties, userMetadataService, nestedPictureUser); + + // Act + OAuth2User actualUser = customOAuth2UserService.loadUser(oAuth2UserRequest); + + // Assert + assertEquals("https://example.com/nested.jpg", actualUser.getAttributes().get("picture")); + assertEquals("nested-user-id", actualUser.getAttributes().get(SessionKeys.USER_ID)); + } + + @Test + void testLoadUserThrowsRuntimeExceptionOnDecryptionFailure() throws DecryptionException { + // Arrange + Map userAttributes = new HashMap<>(); + userAttributes.put("sub", "error-subject"); + userAttributes.put("name", "Error User"); + userAttributes.put("email", "error@example.com"); + userAttributes.put("phone", "0000000000"); + userAttributes.put("picture", "https://example.com/error.jpg"); + + OAuth2User errorUser = new DefaultOAuth2User( + Collections.singletonList(new SimpleGrantedAuthority("ROLE_USER")), + userAttributes, + "sub" + ); + + ProviderDataConfig providerConfig = new ProviderDataConfig(); + providerConfig.setUserNameAttribute("sub"); + providerConfig.setNameAttribute("name"); + providerConfig.setEmailAttribute("email"); + providerConfig.setPhoneNumberAttribute("phone"); + providerConfig.setPictureAttribute("picture"); + + providersConfig.put("test-provider", providerConfig); + when(providerProperties.getProvider()).thenReturn(providersConfig); + when(userMetadataService.updateOrInsertUserMetadata(any(), any(), any(), any(), any())) + .thenThrow(new DecryptionException(ErrorConstants.DECRYPTION_FAILED.getErrorCode(), "Decryption failed")); + + customOAuth2UserService = new TestableOAuth2UserService(providerProperties, userMetadataService, errorUser); + + // Act & Assert + RuntimeException exception = assertThrows(RuntimeException.class, + () -> customOAuth2UserService.loadUser(oAuth2UserRequest)); + + assertTrue(exception.getCause() instanceof DecryptionException); + assertEquals("Metadata update failed", exception.getMessage()); + } + + @Test + void testLoadUserWithMissingOptionalAttributes() throws DecryptionException { + // Arrange + Map userAttributes = new HashMap<>(); + userAttributes.put("sub", "minimal-subject"); + userAttributes.put("name", "Minimal User"); + + OAuth2User minimalUser = new DefaultOAuth2User( + Collections.singletonList(new SimpleGrantedAuthority("ROLE_USER")), + userAttributes, + "sub" + ); + + ProviderDataConfig providerConfig = new ProviderDataConfig(); + providerConfig.setUserNameAttribute("sub"); + providerConfig.setNameAttribute("name"); + providerConfig.setEmailAttribute("email"); + providerConfig.setPhoneNumberAttribute("phone"); + providerConfig.setPictureAttribute("picture"); + + providersConfig.put("test-provider", providerConfig); + when(providerProperties.getProvider()).thenReturn(providersConfig); + when(userMetadataService.updateOrInsertUserMetadata(any(), any(), any(), any(), any())) + .thenReturn("minimal-user-id"); + + customOAuth2UserService = new TestableOAuth2UserService(providerProperties, userMetadataService, minimalUser); + + // Act + OAuth2User actualUser = customOAuth2UserService.loadUser(oAuth2UserRequest); + + // Assert + assertEquals("Minimal User", actualUser.getAttributes().get("name")); + assertNull(actualUser.getAttributes().get("email")); + assertNull(actualUser.getAttributes().get("phone")); + assertNull(actualUser.getAttributes().get("picture")); + } +} diff --git a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java index 54f35509c..1aa74ed9a 100644 --- a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java +++ b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java @@ -2,8 +2,6 @@ import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; -import io.mosip.mimoto.exception.DecryptionException; -import io.mosip.mimoto.service.UserMetadataService; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; @@ -30,9 +28,6 @@ public class OAuth2AuthenticationSuccessHandlerTest { @InjectMocks private OAuth2AuthenticationSuccessHandler successHandler; - @Mock - private UserMetadataService userMetadataService; - @Mock private HttpServletRequest request; @@ -50,7 +45,6 @@ public class OAuth2AuthenticationSuccessHandlerTest { private static final String INJI_WEB_URL = "https://example.com"; private static final String CLIENT_REGISTRATION_ID = "google"; - private static final String PROVIDER_SUBJECT_ID = "sub123"; private static final String DISPLAY_NAME = "John Doe"; private static final String PROFILE_PICTURE_URL = "https://example.com/profile.jpg"; private static final String EMAIL = "john.doe@example.com"; @@ -58,126 +52,70 @@ public class OAuth2AuthenticationSuccessHandlerTest { @Before public void setUp() throws Exception { - // Set the injiWebUrl field using reflection to simulate @Value injection Field injiWebUrlField = OAuth2AuthenticationSuccessHandler.class.getDeclaredField("injiWebUrl"); injiWebUrlField.setAccessible(true); injiWebUrlField.set(successHandler, INJI_WEB_URL); - // Mock session behavior when(request.getSession(false)).thenReturn(session); } @Test - public void onAuthenticationSuccessSetsSessionAttributesAndRedirects() throws IOException, ServletException, DecryptionException { - // Arrange + public void testOnAuthenticationSuccessSetsAttributesAndRedirects() throws Exception { when(oauth2Token.getAuthorizedClientRegistrationId()).thenReturn(CLIENT_REGISTRATION_ID); when(oauth2Token.getPrincipal()).thenReturn(oauth2User); - when(oauth2User.getAttribute("sub")).thenReturn(PROVIDER_SUBJECT_ID); when(oauth2User.getAttribute("name")).thenReturn(DISPLAY_NAME); when(oauth2User.getAttribute("picture")).thenReturn(PROFILE_PICTURE_URL); when(oauth2User.getAttribute("email")).thenReturn(EMAIL); - when(userMetadataService.updateOrInsertUserMetadata( - eq(PROVIDER_SUBJECT_ID), eq(CLIENT_REGISTRATION_ID), eq(DISPLAY_NAME), - eq(PROFILE_PICTURE_URL), eq(EMAIL))) - .thenReturn(USER_ID); + when(oauth2User.getAttribute("userId")).thenReturn(USER_ID); - // Act successHandler.onAuthenticationSuccess(request, response, oauth2Token); - // Assert - verify(session).setAttribute(eq("clientRegistrationId"), eq(CLIENT_REGISTRATION_ID)); - verify(session).setAttribute(eq(SessionKeys.USER_ID), eq(USER_ID)); - verify(response).sendRedirect(eq(INJI_WEB_URL + "/login?status=success")); - verify(userMetadataService).updateOrInsertUserMetadata( - eq(PROVIDER_SUBJECT_ID), eq(CLIENT_REGISTRATION_ID), eq(DISPLAY_NAME), - eq(PROFILE_PICTURE_URL), eq(EMAIL)); + verify(session).setAttribute("clientRegistrationId", CLIENT_REGISTRATION_ID); + verify(session).setAttribute(SessionKeys.USER_ID, USER_ID); + verify(response).sendRedirect(INJI_WEB_URL + "/login?status=success"); - // Verify UserMetadataDTO using ArgumentCaptor ArgumentCaptor captor = ArgumentCaptor.forClass(UserMetadataDTO.class); verify(session).setAttribute(eq(SessionKeys.USER_METADATA), captor.capture()); - UserMetadataDTO userMetadataDTO = captor.getValue(); - assertEquals(DISPLAY_NAME, userMetadataDTO.getDisplayName()); - assertEquals(PROFILE_PICTURE_URL, userMetadataDTO.getProfilePictureUrl()); - assertEquals(EMAIL, userMetadataDTO.getEmail()); + + UserMetadataDTO dto = captor.getValue(); + assertEquals(DISPLAY_NAME, dto.getDisplayName()); + assertEquals(PROFILE_PICTURE_URL, dto.getProfilePictureUrl()); + assertEquals(EMAIL, dto.getEmail()); } @Test - public void onAuthenticationSuccessWithNullAttributesSetsSessionAttributesAndRedirects() throws IOException, ServletException, DecryptionException { - // Arrange + public void testOnAuthenticationSuccessWithNullAttributes() throws Exception { when(oauth2Token.getAuthorizedClientRegistrationId()).thenReturn(CLIENT_REGISTRATION_ID); when(oauth2Token.getPrincipal()).thenReturn(oauth2User); - when(oauth2User.getAttribute("sub")).thenReturn(PROVIDER_SUBJECT_ID); when(oauth2User.getAttribute("name")).thenReturn(null); when(oauth2User.getAttribute("picture")).thenReturn(null); when(oauth2User.getAttribute("email")).thenReturn(null); - when(userMetadataService.updateOrInsertUserMetadata( - eq(PROVIDER_SUBJECT_ID), eq(CLIENT_REGISTRATION_ID), isNull(), - isNull(), isNull())) - .thenReturn(USER_ID); + when(oauth2User.getAttribute("userId")).thenReturn(USER_ID); - // Act successHandler.onAuthenticationSuccess(request, response, oauth2Token); - // Assert - verify(session).setAttribute(eq("clientRegistrationId"), eq(CLIENT_REGISTRATION_ID)); - verify(session).setAttribute(eq(SessionKeys.USER_ID), eq(USER_ID)); - verify(response).sendRedirect(eq(INJI_WEB_URL + "/login?status=success")); - verify(userMetadataService).updateOrInsertUserMetadata( - eq(PROVIDER_SUBJECT_ID), eq(CLIENT_REGISTRATION_ID), isNull(), - isNull(), isNull()); + verify(session).setAttribute("clientRegistrationId", CLIENT_REGISTRATION_ID); + verify(session).setAttribute(SessionKeys.USER_ID, USER_ID); + verify(response).sendRedirect(INJI_WEB_URL + "/login?status=success"); - // Verify UserMetadataDTO using ArgumentCaptor ArgumentCaptor captor = ArgumentCaptor.forClass(UserMetadataDTO.class); verify(session).setAttribute(eq(SessionKeys.USER_METADATA), captor.capture()); - UserMetadataDTO userMetadataDTO = captor.getValue(); - assertNull(userMetadataDTO.getDisplayName()); - assertNull(userMetadataDTO.getProfilePictureUrl()); - assertNull(userMetadataDTO.getEmail()); + + UserMetadataDTO dto = captor.getValue(); + assertNull(dto.getDisplayName()); + assertNull(dto.getProfilePictureUrl()); + assertNull(dto.getEmail()); } @Test - public void onAuthenticationSuccessWithNullSessionThrowsServletException() throws IOException { - // Arrange + public void testOnAuthenticationSuccessWithNullSessionThrows() throws IOException { when(request.getSession(false)).thenReturn(null); - // Act & Assert - try { - successHandler.onAuthenticationSuccess(request, response, oauth2Token); - fail("Expected ServletException"); - } catch (ServletException e) { - assertEquals("Session not available", e.getMessage()); - } - verifyNoInteractions(userMetadataService, session); - verify(response, never()).sendRedirect(anyString()); - } + ServletException thrown = assertThrows(ServletException.class, () -> + successHandler.onAuthenticationSuccess(request, response, oauth2Token) + ); - @Test - public void onAuthenticationSuccessWithServiceFailureThrowsIOException() throws IOException, ServletException, DecryptionException { - // Arrange - when(oauth2Token.getAuthorizedClientRegistrationId()).thenReturn(CLIENT_REGISTRATION_ID); - when(oauth2Token.getPrincipal()).thenReturn(oauth2User); - when(oauth2User.getAttribute("sub")).thenReturn(PROVIDER_SUBJECT_ID); - when(oauth2User.getAttribute("name")).thenReturn(DISPLAY_NAME); - when(oauth2User.getAttribute("picture")).thenReturn(PROFILE_PICTURE_URL); - when(oauth2User.getAttribute("email")).thenReturn(EMAIL); - when(userMetadataService.updateOrInsertUserMetadata( - eq(PROVIDER_SUBJECT_ID), eq(CLIENT_REGISTRATION_ID), eq(DISPLAY_NAME), - eq(PROFILE_PICTURE_URL), eq(EMAIL))) - .thenThrow(new RuntimeException("Service failure")); - - // Act & Assert - try { - successHandler.onAuthenticationSuccess(request, response, oauth2Token); - fail("Expected IOException"); - } catch (RuntimeException e) { - assertEquals("Service failure", e.getMessage()); - } - verify(session).setAttribute(eq("clientRegistrationId"), eq(CLIENT_REGISTRATION_ID)); - verify(userMetadataService).updateOrInsertUserMetadata( - eq(PROVIDER_SUBJECT_ID), eq(CLIENT_REGISTRATION_ID), eq(DISPLAY_NAME), - eq(PROFILE_PICTURE_URL), eq(EMAIL)); - verify(session, never()).setAttribute(eq(SessionKeys.USER_METADATA), any()); - verify(session, never()).setAttribute(eq(SessionKeys.USER_ID), any()); + assertEquals("Session not available", thrown.getMessage()); verify(response, never()).sendRedirect(anyString()); } -} \ No newline at end of file +} From d166cb9359dcb6278dd7570912e2bd8542400268 Mon Sep 17 00:00:00 2001 From: Kamlesh Date: Wed, 21 May 2025 14:27:56 +0530 Subject: [PATCH 594/860] [INJIWEB-1117]: Merge Develop Signed-off-by: Kamlesh --- .../security/oauth2/OAuth2AuthenticationSuccessHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java index a5c635883..8110ee12b 100644 --- a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java +++ b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java @@ -47,6 +47,6 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo String userId = oAuth2User.getAttribute("userId"); session.setAttribute(SessionKeys.USER_ID, userId); - response.sendRedirect(injiWebUrl + "/login?status=success"); + response.sendRedirect(injiWebUrl + "/pin"); } } From 3b1eb30aaff0acdcfe3420af34078e83549726ae Mon Sep 17 00:00:00 2001 From: Kamlesh Date: Thu, 22 May 2025 10:57:13 +0530 Subject: [PATCH 595/860] [INJIWEB-1117]: Fix build failure Signed-off-by: Kamlesh --- .../security/oauth2/OAuth2AuthenticationSuccessHandler.java | 2 +- .../oauth2/OAuth2AuthenticationSuccessHandlerTest.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java index 8110ee12b..05cc9712e 100644 --- a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java +++ b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java @@ -49,4 +49,4 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo response.sendRedirect(injiWebUrl + "/pin"); } -} +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java index 1aa74ed9a..e3d3fe614 100644 --- a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java +++ b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java @@ -72,7 +72,7 @@ public void testOnAuthenticationSuccessSetsAttributesAndRedirects() throws Excep verify(session).setAttribute("clientRegistrationId", CLIENT_REGISTRATION_ID); verify(session).setAttribute(SessionKeys.USER_ID, USER_ID); - verify(response).sendRedirect(INJI_WEB_URL + "/login?status=success"); + verify(response).sendRedirect(INJI_WEB_URL + "/pin"); ArgumentCaptor captor = ArgumentCaptor.forClass(UserMetadataDTO.class); verify(session).setAttribute(eq(SessionKeys.USER_METADATA), captor.capture()); @@ -96,7 +96,7 @@ public void testOnAuthenticationSuccessWithNullAttributes() throws Exception { verify(session).setAttribute("clientRegistrationId", CLIENT_REGISTRATION_ID); verify(session).setAttribute(SessionKeys.USER_ID, USER_ID); - verify(response).sendRedirect(INJI_WEB_URL + "/login?status=success"); + verify(response).sendRedirect(INJI_WEB_URL + "/pin"); ArgumentCaptor captor = ArgumentCaptor.forClass(UserMetadataDTO.class); verify(session).setAttribute(eq(SessionKeys.USER_METADATA), captor.capture()); @@ -118,4 +118,4 @@ public void testOnAuthenticationSuccessWithNullSessionThrows() throws IOExceptio assertEquals("Session not available", thrown.getMessage()); verify(response, never()).sendRedirect(anyString()); } -} +} \ No newline at end of file From 6025cf36dafc005fb95b1a5d47257cadb9f4fd04 Mon Sep 17 00:00:00 2001 From: Kamlesh Date: Thu, 22 May 2025 13:54:57 +0530 Subject: [PATCH 596/860] [INJIWEB-1117]: Change Login URL in Config Signed-off-by: Kamlesh --- src/main/java/io/mosip/mimoto/config/Config.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/mosip/mimoto/config/Config.java b/src/main/java/io/mosip/mimoto/config/Config.java index e6ca6250d..5d452e2a9 100644 --- a/src/main/java/io/mosip/mimoto/config/Config.java +++ b/src/main/java/io/mosip/mimoto/config/Config.java @@ -110,7 +110,7 @@ private void setupOauth2Config(HttpSecurity http, SessionRepository sessionRepos private void configureOAuth2Login(HttpSecurity http) throws Exception { http.oauth2Login(oauth2Login -> oauth2Login - .loginPage(injiWebUrl + "/login") + .loginPage(injiWebUrl + "/") .authorizationEndpoint(authorization -> authorization.baseUri("/oauth2/authorize")) .redirectionEndpoint(redirect -> redirect.baseUri("/oauth2/callback/*")) .userInfoEndpoint(userInfo -> userInfo.userService(customOAuth2UserService)) From 4e6d0cc13e1baedf5a21dbe25448a9875baf33b0 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Thu, 22 May 2025 18:38:12 +0530 Subject: [PATCH 597/860] [INJIWEB-1513] make changes in create wallet endpoint to receive wallet pin and wallet confirm pin and perform the validations to check if they both match or not and then write test cases for the same and update the documentation and postman collection Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .talismanrc | 9 +- docs/api-documentation-openapi.json | 46 ++++++++-- .../MIMOTO.postman_collection.json | 2 +- .../mimoto/controller/WalletsController.java | 21 +++-- .../mimoto/dto/CreateWalletRequestDto.java | 21 +++++ ...stDto.java => UnlockWalletRequestDto.java} | 11 +-- .../mosip/mimoto/service/WalletService.java | 3 +- .../service/impl/WalletServiceImpl.java | 8 +- .../controller/WalletsControllerTest.java | 84 ++++++++++++------- .../mimoto/service/WalletServiceTest.java | 50 ++++++----- .../mimoto/util/WalletValidatorTest.java | 4 - 11 files changed, 184 insertions(+), 75 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/dto/CreateWalletRequestDto.java rename src/main/java/io/mosip/mimoto/dto/{WalletRequestDto.java => UnlockWalletRequestDto.java} (62%) diff --git a/.talismanrc b/.talismanrc index 6bb31fd6e..ca0e3dcce 100644 --- a/.talismanrc +++ b/.talismanrc @@ -74,4 +74,11 @@ fileignoreconfig: - filename: docker-compose/docker-compose.yml checksum: 857f5dcebdef810161b9ef09ad078c091c7d9969035bc45132975b296675dac9 - filename: docker-compose/config/mimoto-default.properties - checksum: 746b60fa10a8c2c10c00bd35313407186db7aef0762f99e919bbc42fdc597824 \ No newline at end of file + checksum: 746b60fa10a8c2c10c00bd35313407186db7aef0762f99e919bbc42fdc597824 +- filename: src/test/java/io/mosip/mimoto/service/WalletServiceTest.java + checksum: 3656cc4e0c335d86f95fa6579929ecbc127b475a4fc7b4b1b32595e50af62d26 +- filename: src/main/java/io/mosip/mimoto/controller/WalletsController.java + checksum: f54bbacbba3af5e0beff7761245c6aa40cdc676e55b557e1aa0dd157a4eda03a +- filename: src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java + checksum: 63a4620f43c88a39771ec5e492dc860e9c6cd62ab895243bb284dd04c5be6937 +version: "" \ No newline at end of file diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index e38b6db1d..7db11a093 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -3385,13 +3385,14 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/WalletRequestDto" + "$ref": "#/components/schemas/CreateWalletRequestDto" }, "examples": { "Create wallet request": { "value": { - "walletName": "wallet 123", - "walletPin": "1234" + "walletPin": "1234", + "confirmWalletPin": "1234", + "walletName": "wallet 123" } } } @@ -3446,6 +3447,12 @@ "errorCode": "invalid_request", "errorMessage": "PIN must be numeric with 4 or 6 digits" } + }, + "Wallet Pin and confirm Pin Mismatch": { + "value": { + "errorCode": "invalid_request", + "errorMessage": "Entered PIN and confirmation PIN do not match" + } } } } @@ -3782,7 +3789,14 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/WalletRequestDto" + "$ref": "#/components/schemas/UnlockWalletRequestDto" + }, + "examples": { + "Unlock wallet request": { + "value": { + "walletPin": "1234" + } + } } } } @@ -4060,7 +4074,28 @@ } } }, - "WalletRequestDto": { + "CreateWalletRequestDto": { + "type": "object", + "properties": { + "walletPin": { + "type": "string", + "description": "PIN used to unlock the Wallet" + }, + "confirmWalletPin": { + "type": "string", + "description": "Re-entered PIN used to confirm the Wallet PIN" + }, + "walletName": { + "type": "string", + "description": "Name of the Wallet" + } + }, + "required": [ + "walletPin", + "confirmWalletPin" + ] + }, + "UnlockWalletRequestDto": { "type": "object", "properties": { "walletName": { @@ -4177,7 +4212,6 @@ } } }, - "AppVIDGenerateRequestDTO": { "type": "object", "properties": { diff --git a/docs/postman-collections/MIMOTO.postman_collection.json b/docs/postman-collections/MIMOTO.postman_collection.json index 3d46e53a5..6de8c7c0f 100644 --- a/docs/postman-collections/MIMOTO.postman_collection.json +++ b/docs/postman-collections/MIMOTO.postman_collection.json @@ -343,7 +343,7 @@ ], "body": { "mode": "raw", - "raw": "{\"walletName\" : \"default\",\n\"walletPin\":123456}" + "raw": "{\"walletName\" : \"default\",\n\"walletPin\":123456,\n\"confirmWalletPin\":123456}" }, "url": "{{HOST}}/wallets" }, diff --git a/src/main/java/io/mosip/mimoto/controller/WalletsController.java b/src/main/java/io/mosip/mimoto/controller/WalletsController.java index edea54a6d..5befbedfd 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletsController.java @@ -3,7 +3,8 @@ import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.constant.SwaggerLiteralConstants; import io.mosip.mimoto.dto.ErrorDTO; -import io.mosip.mimoto.dto.WalletRequestDto; +import io.mosip.mimoto.dto.CreateWalletRequestDto; +import io.mosip.mimoto.dto.UnlockWalletRequestDto; import io.mosip.mimoto.dto.WalletResponseDto; import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.exception.InvalidRequestException; @@ -53,15 +54,21 @@ public WalletsController(WalletService walletService) { * @param httpSession The HTTP session containing user details. * @return The unique identifier of the created wallet. * @throws InvalidRequestException If the request is invalid. + * Example: Wallet PIN and Confirm Wallet PIN received in request don't match */ - @Operation(summary = "Create a new wallet", description = "This API is secured using session-based authentication. The session ID is extracted from the Cookie header and used to retrieve session details from Redis for authentication. The user ID is obtained from the session and used with the provided wallet name and PIN to create a new wallet in the database. If successful, a unique identifier for the wallet is returned; otherwise, an appropriate error response is provided.", operationId = "createWallet", security = @SecurityRequirement(name = "SessionAuth")) + @Operation(summary = "Create a new wallet", description = "This API is secured using session-based authentication. The session ID is extracted from the Cookie header and used to retrieve session details from Redis for authentication. The user ID is obtained from the session and used with the provided wallet name and PIN to create a new wallet in the database. If successful, a unique identifier for the wallet is returned; otherwise, an appropriate error response is provided.", operationId = "createWallet", security = @SecurityRequirement(name = "SessionAuth"), requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody(required = true, description = "Details required to create a wallet", content = @Content(mediaType = "application/json", schema = @Schema(implementation = CreateWalletRequestDto.class), examples = @ExampleObject(name = "Valid Request", value = "{ \"walletPin\": \"1234\", \"confirmWalletPin\": \"1234\", \"walletName\": \"MyWallet\" }")))) @ApiResponse(responseCode = "200", description = "Wallet created successfully", content = @Content(mediaType = "application/json", schema = @Schema(type = "string", description = "Unique identifier of the Wallet stored in the database"), examples = @ExampleObject(name = "Success response", value = "d94a2e70-1234-4f2f-9eae-98765"))) - @ApiResponse(responseCode = "400", description = "Invalid wallet creation request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "User ID is not present in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"User ID not found in session\"}"), @ExampleObject(name = "Invalid User ID", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"User ID cannot be null or empty\"}"), @ExampleObject(name = "Invalid Wallet name", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet name must be alphanumeric with allowed special characters\"}"), @ExampleObject(name = "Invalid Wallet Pin", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"PIN must be numeric with 4 or 6 digits\"}")})) + @ApiResponse(responseCode = "400", description = "Invalid wallet creation request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = { + @ExampleObject(name = "User ID is not present in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"User ID not found in session\"}"), + @ExampleObject(name = "Invalid User ID", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"User ID cannot be null or empty\"}"), + @ExampleObject(name = "Invalid Wallet name", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet name must be alphanumeric with allowed special characters\"}"), + @ExampleObject(name = "Invalid Wallet Pin", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"PIN must be numeric with 4 or 6 digits\"}"), + @ExampleObject(name = "Wallet Pin and confirm Pin Mismatch", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Entered PIN and confirmation PIN do not match\"}")})) @ApiResponse(responseCode = "500", description = "Internal server error while creating wallet", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"))) @ApiResponse(responseCode = "503", description = "Service unavailable", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Database connection failure", value = "{\"errorCode\": \"database_unavailable\", \"errorMessage\": \"Failed to connect to the database\"}"))) @PostMapping public ResponseEntity createWallet( - @RequestBody @Valid WalletRequestDto wallet, + @RequestBody @Valid CreateWalletRequestDto wallet, HttpSession httpSession) throws InvalidRequestException { String userId = (String) httpSession.getAttribute(SessionKeys.USER_ID); if (userId == null) { @@ -69,7 +76,7 @@ public ResponseEntity createWallet( throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "User ID not found in session"); } log.info("Creating wallet for user: {}, name: {}", userId, wallet.getWalletName()); - String walletId = walletService.createWallet(userId, wallet.getWalletName(), wallet.getWalletPin()); + String walletId = walletService.createWallet(userId, wallet.getWalletName(), wallet.getWalletPin(), wallet.getConfirmWalletPin()); return ResponseEntity.status(HttpStatus.OK).body(walletId); } @@ -106,7 +113,7 @@ public ResponseEntity> getWallets(HttpSession httpSessio * @return The wallet details if unlocked successfully. * @throws InvalidRequestException If the wallet or PIN is invalid. */ - @Operation(summary = "Unlock an existing Wallet", description = "This API is secured using session-based authentication. The session ID is extracted from the Cookie header to authenticate the user. The user's ID is obtained from the session, and the provided wallet ID and PIN are used to fetch the wallet key, which is stored in the session. If successful, the wallet ID is returned; otherwise, an appropriate error response is returned.", operationId = "unlockWallet", security = @SecurityRequirement(name = "SessionAuth"), parameters = {@Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet to be unlocked", schema = @Schema(type = "string"))}, requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody(required = true, content = @Content(mediaType = "application/json", schema = @Schema(implementation = WalletRequestDto.class)))) + @Operation(summary = "Unlock an existing Wallet", description = "This API is secured using session-based authentication. The session ID is extracted from the Cookie header to authenticate the user. The user's ID is obtained from the session, and the provided wallet ID and PIN are used to fetch the wallet key, which is stored in the session. If successful, the wallet ID is returned; otherwise, an appropriate error response is returned.", operationId = "unlockWallet", security = @SecurityRequirement(name = "SessionAuth"), parameters = {@Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet to be unlocked", schema = @Schema(type = "string"))}, requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody(required = true, content = @Content(mediaType = "application/json", schema = @Schema(implementation = UnlockWalletRequestDto.class), examples = @ExampleObject(name = "Unlock Wallet Request", value = "{\"walletPin\": \"1234\"}")))) @ApiResponse(responseCode = "200", description = "Wallet unlocked successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = WalletResponseDto.class), examples = @ExampleObject(name = "Success response", value = "{\"walletId\": \"123e4567-e89b-12d3-a456-426614174000\"}"))) @ApiResponse(responseCode = "400", description = "Invalid Wallets fetching request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "User ID is not present in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"User ID not found in session\"}"), @ExampleObject(name = "Wallet not found", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet not found\"}"), @ExampleObject(name = "Invalid User ID", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"User ID cannot be null or empty\"}"), @ExampleObject(name = "Invalid Wallet Pin", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"PIN must be numeric with 4 or 6 digits\"}")})) @ApiResponse(responseCode = "500", description = "Internal server error - any error occurred while decrypting the Wallet key with Wallet PIN or when fetching Wallet details from the database", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"))) @@ -114,7 +121,7 @@ public ResponseEntity> getWallets(HttpSession httpSessio @PostMapping("/{walletId}/unlock") public ResponseEntity unlockWallet( @PathVariable("walletId") @NotBlank(message = "Wallet ID cannot be blank") String walletId, - @RequestBody @Valid WalletRequestDto wallet, + @RequestBody @Valid UnlockWalletRequestDto wallet, HttpSession httpSession) throws InvalidRequestException { String userId = (String) httpSession.getAttribute(SessionKeys.USER_ID); if (userId == null) { diff --git a/src/main/java/io/mosip/mimoto/dto/CreateWalletRequestDto.java b/src/main/java/io/mosip/mimoto/dto/CreateWalletRequestDto.java new file mode 100644 index 000000000..6b226097c --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/CreateWalletRequestDto.java @@ -0,0 +1,21 @@ +package io.mosip.mimoto.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.ToString; + +@Data +@ToString +@ApiModel(description = "Model representing a create user wallet request") +@Schema(description = "Create Wallet Request DTO", requiredProperties = {"walletPin", "confirmWalletPin"}) +public class CreateWalletRequestDto { + @Schema(description = "PIN used to unlock the Wallet") + String walletPin; + + @Schema(description = "Re-entered PIN used to confirm the Wallet PIN") + String confirmWalletPin; + + @Schema(description = "Name of the Wallet") + String walletName; +} diff --git a/src/main/java/io/mosip/mimoto/dto/WalletRequestDto.java b/src/main/java/io/mosip/mimoto/dto/UnlockWalletRequestDto.java similarity index 62% rename from src/main/java/io/mosip/mimoto/dto/WalletRequestDto.java rename to src/main/java/io/mosip/mimoto/dto/UnlockWalletRequestDto.java index a8bfc88ca..b8f91ec95 100644 --- a/src/main/java/io/mosip/mimoto/dto/WalletRequestDto.java +++ b/src/main/java/io/mosip/mimoto/dto/UnlockWalletRequestDto.java @@ -7,11 +7,12 @@ @Data @ToString -@ApiModel(description = "Model representing a user wallet request") -@Schema(description = "Wallet Request DTO", requiredProperties = {"walletPin"}) -public class WalletRequestDto { - @Schema(description = "Name of the Wallet") - String walletPin; +@ApiModel(description = "Model representing a unlock user wallet request") +@Schema(description = "Unlock Wallet Request DTO", requiredProperties = {"walletPin"}) +public class UnlockWalletRequestDto { @Schema(description = "PIN used to unlock the Wallet") + String walletPin; + + @Schema(description = "Name of the Wallet") String walletName; } diff --git a/src/main/java/io/mosip/mimoto/service/WalletService.java b/src/main/java/io/mosip/mimoto/service/WalletService.java index 90c529002..326843172 100644 --- a/src/main/java/io/mosip/mimoto/service/WalletService.java +++ b/src/main/java/io/mosip/mimoto/service/WalletService.java @@ -20,8 +20,9 @@ public interface WalletService { * @param pin The wallet PIN. * @return The created wallet ID. * @throws InvalidRequestException If the request is invalid. + * Example: Wallet PIN and Confirm Wallet PIN received in request don't match */ - String createWallet(String userId, String name, String pin) throws InvalidRequestException; + String createWallet(String userId, String name, String pin, String confirmPin) throws InvalidRequestException; /** * Retrieves the decrypted wallet key. diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java index 5b3b5ac33..8efb0bcbd 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java @@ -34,12 +34,18 @@ public WalletServiceImpl(WalletRepository repository, WalletUtil walletUtil, Wal } @Override - public String createWallet(String userId, String name, String pin) throws InvalidRequestException { + public String createWallet(String userId, String name, String pin, String confirmPin) throws InvalidRequestException { log.info("Creating wallet for user: {}, name: {}", userId, name); validator.validateUserId(userId); validator.validateWalletName(name); validator.validateWalletPin(pin); + validator.validateWalletPin(confirmPin); + + if (!pin.equals(confirmPin)) { + log.warn("Wallet PIN and confirm PIN are not matching: {}", userId); + throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Entered PIN and confirmation PIN do not match"); + } String walletId = walletUtil.createWallet(userId, name, pin); log.debug("Wallet created successfully: {}", walletId); diff --git a/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java index 2f9b219eb..bb8fb52bb 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java @@ -2,8 +2,10 @@ import com.fasterxml.jackson.databind.ObjectMapper; import io.mosip.mimoto.constant.SessionKeys; -import io.mosip.mimoto.dto.WalletRequestDto; +import io.mosip.mimoto.dto.CreateWalletRequestDto; import io.mosip.mimoto.dto.WalletResponseDto; +import io.mosip.mimoto.exception.ErrorConstants; +import io.mosip.mimoto.exception.InvalidRequestException; import io.mosip.mimoto.util.GlobalExceptionHandler; import io.mosip.mimoto.service.WalletService; import io.mosip.mimoto.util.WalletValidator; @@ -47,17 +49,22 @@ public class WalletsControllerTest { @MockBean private WalletService walletService; - WalletRequestDto walletRequestDto; + CreateWalletRequestDto createWalletRequestDto; MockHttpSession mockSession; - String userId; + String userId, walletName, walletPin, confirmWalletPin, walletId; @Before public void setUp() { - walletRequestDto = new WalletRequestDto(); - walletRequestDto.setWalletName("My Wallet"); - walletRequestDto.setWalletPin("1234"); + walletName = "My Wallet"; + walletPin = "1234"; + confirmWalletPin = "1234"; + walletId = "walletId123"; + createWalletRequestDto = new CreateWalletRequestDto(); + createWalletRequestDto.setWalletName(walletName); + createWalletRequestDto.setWalletPin(walletPin); + createWalletRequestDto.setConfirmWalletPin(confirmWalletPin); mockSession = new MockHttpSession(); mockSession.setAttribute("clientRegistrationId", "google"); mockSession.setAttribute(SessionKeys.USER_ID, "user123"); @@ -66,36 +73,53 @@ public void setUp() { @Test public void shouldReturnWalletIdForSuccessfulWalletCreation() throws Exception { - when(walletService.createWallet(userId, "My Wallet", "1234")).thenReturn("walletId123"); + when(walletService.createWallet(userId, walletName, walletPin, confirmWalletPin)).thenReturn(walletId); mockMvc.perform(post("/wallets") .contentType(MediaType.APPLICATION_JSON) .accept(MediaType.APPLICATION_JSON) - .content(new ObjectMapper().writeValueAsString(walletRequestDto)) + .content(new ObjectMapper().writeValueAsString(createWalletRequestDto)) .session(mockSession) - .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")) + .with(SecurityMockMvcRequestPostProcessors.user(userId).roles("USER")) .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isOk()) - .andExpect(content().string("walletId123")); + .andExpect(content().string(walletId)); } @Test public void shouldThrowExceptionIfAnyErrorOccurredWhenCreatingWallet() throws Exception { - when(walletService.createWallet(userId, "My Wallet", "1234")) + when(walletService.createWallet(userId, walletName, walletPin, confirmWalletPin)) .thenThrow(new RuntimeException("Exception occurred when creating Wallet for given userId")); mockMvc.perform(post("/wallets") .contentType(MediaType.APPLICATION_JSON) .accept(MediaType.APPLICATION_JSON) - .content(new ObjectMapper().writeValueAsString(walletRequestDto)) + .content(new ObjectMapper().writeValueAsString(createWalletRequestDto)) .session(mockSession) - .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")) + .with(SecurityMockMvcRequestPostProcessors.user(userId).roles("USER")) .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isInternalServerError()) .andExpect(jsonPath("$.errorCode").value("internal_server_error")) .andExpect(jsonPath("$.errorMessage").value("We are unable to process request now")); } + @Test + public void shouldThrowExceptionIfReceivedPINAndConfirmPINDoNotMatch() throws Exception { + createWalletRequestDto.setConfirmWalletPin("2345"); + when(walletService.createWallet(userId, walletName, walletPin, "2345")) + .thenThrow(new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Entered PIN and confirmation PIN do not match")); + + mockMvc.perform(post("/wallets") + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON) + .content(new ObjectMapper().writeValueAsString(createWalletRequestDto)) + .session(mockSession) + .with(SecurityMockMvcRequestPostProcessors.user(userId).roles("USER")) + .with(SecurityMockMvcRequestPostProcessors.csrf())) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errorCode").value("invalid_request")) + .andExpect(jsonPath("$.errorMessage").value("invalid_request --> Entered PIN and confirmation PIN do not match")); + } @Test public void shouldReturnListOfWalletIDsForValidUserId() throws Exception { @@ -106,7 +130,7 @@ public void shouldReturnListOfWalletIDsForValidUserId() throws Exception { mockMvc.perform(get("/wallets") .accept(MediaType.APPLICATION_JSON) .session(mockSession) - .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")) + .with(SecurityMockMvcRequestPostProcessors.user(userId).roles("USER")) .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isOk()) .andExpect(content().string("[{\"walletId\":\"wallet1\"},{\"walletId\":\"wallet2\"}]")); @@ -120,7 +144,7 @@ public void shouldThrowExceptionIfAnyErrorOccurredWhileFetchingWalletsForGivenUs .session(mockSession) .accept(MediaType.APPLICATION_JSON) .session(mockSession) - .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")) + .with(SecurityMockMvcRequestPostProcessors.user(userId).roles("USER")) .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isInternalServerError()) .andExpect(jsonPath("$.errorCode").value("internal_server_error")) @@ -129,15 +153,15 @@ public void shouldThrowExceptionIfAnyErrorOccurredWhileFetchingWalletsForGivenUs @Test public void shouldReturnTheWalletIDAndStoreWalletKeyInSessionForValidUserAndWalletId() throws Exception { - when(walletService.getWalletKey(userId, "walletId123", "1234")).thenReturn("walletId123"); + when(walletService.getWalletKey(userId, walletId, walletPin)).thenReturn(walletId); String expectedWalletKey = "walletId123"; - MvcResult result = mockMvc.perform(post("/wallets/walletId123/unlock") + MvcResult result = mockMvc.perform(post(String.format("/wallets/%s/unlock", walletId)) .contentType(MediaType.APPLICATION_JSON) .accept(MediaType.APPLICATION_JSON) - .content(new ObjectMapper().writeValueAsString(walletRequestDto)) + .content(new ObjectMapper().writeValueAsString(createWalletRequestDto)) .session(mockSession) - .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")) + .with(SecurityMockMvcRequestPostProcessors.user(userId).roles("USER")) .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isOk()) .andExpect(content().string("{\"walletId\":\"walletId123\"}")) @@ -149,14 +173,14 @@ public void shouldReturnTheWalletIDAndStoreWalletKeyInSessionForValidUserAndWall @Test public void shouldThrowExceptionIfAnyErrorOccurredWhileFetchingWalletDataForGivenUserIdAndWalletId() throws Exception { - when(walletService.getWalletKey(userId, "walletId123", "1234")).thenThrow(new RuntimeException("Exception occurred when fetching the wallet data for given walletId and userId")); + when(walletService.getWalletKey(userId, walletId, walletPin)).thenThrow(new RuntimeException("Exception occurred when fetching the wallet data for given walletId and userId")); - mockMvc.perform(post("/wallets/walletId123/unlock") + mockMvc.perform(post(String.format("/wallets/%s/unlock", walletId)) .contentType(MediaType.APPLICATION_JSON) .accept(MediaType.APPLICATION_JSON) - .content(new ObjectMapper().writeValueAsString(walletRequestDto)) + .content(new ObjectMapper().writeValueAsString(createWalletRequestDto)) .session(mockSession) - .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")) + .with(SecurityMockMvcRequestPostProcessors.user(userId).roles("USER")) .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isInternalServerError()) .andExpect(jsonPath("$.errorCode").value("internal_server_error")) @@ -165,23 +189,23 @@ public void shouldThrowExceptionIfAnyErrorOccurredWhileFetchingWalletDataForGive @Test public void shouldDeleteWalletSuccessfully() throws Exception { - mockMvc.perform(org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete("/wallets/walletId123") + mockMvc.perform(org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete(String.format("/wallets/%s", walletId)) .accept(MediaType.APPLICATION_JSON) .session(mockSession) - .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")) + .with(SecurityMockMvcRequestPostProcessors.user(userId).roles("USER")) .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isOk()); } @Test public void shouldClearSessionAttributesWhenDeletingCurrentWallet() throws Exception { - mockSession.setAttribute(SessionKeys.WALLET_ID, "walletId123"); + mockSession.setAttribute(SessionKeys.WALLET_ID, walletId); mockSession.setAttribute(SessionKeys.WALLET_KEY, "walletKey123"); - mockMvc.perform(org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete("/wallets/walletId123") + mockMvc.perform(org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete(String.format("/wallets/%s", walletId)) .accept(MediaType.APPLICATION_JSON) .session(mockSession) - .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")) + .with(SecurityMockMvcRequestPostProcessors.user(userId).roles("USER")) .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isOk()); @@ -194,10 +218,10 @@ public void shouldClearSessionAttributesWhenDeletingCurrentWallet() throws Excep public void shouldReturnUnauthorizedWhenUserIdIsMissingForDeleteWallet() throws Exception { MockHttpSession sessionWithoutUserId = new MockHttpSession(); - mockMvc.perform(org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete("/wallets/walletId123") + mockMvc.perform(org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete(String.format("/wallets/%s", walletId)) .accept(MediaType.APPLICATION_JSON) .session(sessionWithoutUserId) - .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")) + .with(SecurityMockMvcRequestPostProcessors.user(userId).roles("USER")) .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isUnauthorized()); } diff --git a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java index 2f97a11ae..5085a9083 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java @@ -10,6 +10,7 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; @@ -21,6 +22,8 @@ import static org.junit.Assert.*; import static org.mockito.Mockito.*; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsInAnyOrder; @RunWith(MockitoJUnitRunner.class) public class WalletServiceTest { @@ -37,19 +40,14 @@ public class WalletServiceTest { @InjectMocks private WalletServiceImpl walletService; - private String userId; - private String name; - private String walletId; - private String pin; + private String userId, name, walletId, walletPin, walletConfirmPin, encryptedWalletKey, decryptedWalletKey; private Wallet wallet; - private String encryptedWalletKey; - private String decryptedWalletKey; - @Before public void setUp() { userId = UUID.randomUUID().toString(); walletId = UUID.randomUUID().toString(); - pin = "1234"; + walletPin = "1234"; + walletConfirmPin = "1234"; name = "default"; encryptedWalletKey = "encryptedKey"; decryptedWalletKey = "decryptedKey"; @@ -63,28 +61,31 @@ public void setUp() { @Test public void shouldCreateWalletSuccessfully() throws Exception { String newWalletId = UUID.randomUUID().toString(); - when(walletHelper.createWallet(userId, name, pin)).thenReturn(newWalletId); + when(walletHelper.createWallet(userId, name, walletPin)).thenReturn(newWalletId); - String result = walletService.createWallet(userId, name, pin); + String result = walletService.createWallet(userId, name, walletPin, walletConfirmPin); assertEquals(newWalletId, result); verify(walletValidator).validateUserId(userId); verify(walletValidator).validateWalletName(name); - verify(walletValidator).validateWalletPin(pin); - verify(walletHelper).createWallet(userId, name, pin); + ArgumentCaptor captor = ArgumentCaptor.forClass(String.class); + verify(walletValidator, times(2)).validateWalletPin(captor.capture()); + List capturedPins = captor.getAllValues(); + + assertThat(capturedPins, containsInAnyOrder(walletPin, walletConfirmPin)); } @Test public void shouldDecryptWalletKeySuccessfully() throws Exception { when(walletRepository.findByUserIdAndId(userId, walletId)).thenReturn(Optional.of(wallet)); - when(walletHelper.decryptWalletKey(encryptedWalletKey, pin)).thenReturn(decryptedWalletKey); + when(walletHelper.decryptWalletKey(encryptedWalletKey, walletPin)).thenReturn(decryptedWalletKey); - String result = walletService.getWalletKey(userId, walletId, pin); + String result = walletService.getWalletKey(userId, walletId, walletPin); assertEquals(decryptedWalletKey, result); verify(walletRepository).findByUserIdAndId(userId, walletId); - verify(walletHelper).decryptWalletKey(encryptedWalletKey, pin); + verify(walletHelper).decryptWalletKey(encryptedWalletKey, walletPin); } @Test @@ -92,7 +93,7 @@ public void shouldThrowInvalidRequestExceptionIfWalletNotFoundForGivenUserIdAndW when(walletRepository.findByUserIdAndId(userId, walletId)).thenReturn(Optional.empty()); InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> - walletService.getWalletKey(userId, walletId, pin)); + walletService.getWalletKey(userId, walletId, walletPin)); assertEquals("invalid_request", exception.getErrorCode()); assertEquals("invalid_request --> Wallet not found", exception.getMessage()); @@ -126,14 +127,25 @@ public void shouldReturnEmptyListIfNoWalletsFoundForGivenUserId() { @Test public void shouldThrowInvalidRequestExceptionIfAnyErrorOccurredWhileCreatingWallet() throws Exception { - when(walletHelper.createWallet(userId, name, pin)).thenThrow(new InvalidRequestException("INVALID_REQUEST", "Test Exception")); + when(walletHelper.createWallet(userId, name, walletPin)).thenThrow(new InvalidRequestException("INVALID_REQUEST", "Test Exception")); InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> - walletService.createWallet(userId, name, pin)); + walletService.createWallet(userId, name, walletPin, walletConfirmPin)); assertEquals("INVALID_REQUEST", exception.getErrorCode()); assertEquals("INVALID_REQUEST --> Test Exception", exception.getMessage()); - verify(walletHelper).createWallet(userId, name, pin); + verify(walletHelper).createWallet(userId, name, walletPin); + } + + @Test + public void shouldThrowInvalidRequestExceptionIfReceivedPINAndConfirmPINDoNotMatch() throws Exception { + walletConfirmPin = "2345"; + + InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> + walletService.createWallet(userId, name, walletPin, walletConfirmPin)); + + assertEquals("invalid_request", exception.getErrorCode()); + assertEquals("invalid_request --> Entered PIN and confirmation PIN do not match", exception.getMessage()); } @Test diff --git a/src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java b/src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java index f7bc04c94..82e8352b6 100644 --- a/src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java +++ b/src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java @@ -1,11 +1,8 @@ package io.mosip.mimoto.util; -import io.mosip.mimoto.dto.WalletRequestDto; import io.mosip.mimoto.exception.InvalidRequestException; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.Mock; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.TestPropertySource; @@ -13,7 +10,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.Mockito.when; @ExtendWith(SpringExtension.class) @SpringBootTest(classes = WalletValidator.class) From b943382daeab29ad44b5d3a44d1a698df37c71ec Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Thu, 22 May 2025 19:29:52 +0530 Subject: [PATCH 598/860] [INJIWEB-1513] make changes in pin validation logic to ensure the pin is of length 6 and numeric and rename pin to passcode in error messages to keep it consistent with UI Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .talismanrc | 4 +++- docker-compose/config/mimoto-default.properties | 2 +- docs/api-documentation-openapi.json | 12 ++++++------ .../mosip/mimoto/controller/WalletsController.java | 6 +++--- .../mosip/mimoto/service/impl/WalletServiceImpl.java | 2 +- .../java/io/mosip/mimoto/util/WalletValidator.java | 4 ++-- .../mimoto/controller/WalletsControllerTest.java | 4 ++-- .../io/mosip/mimoto/service/WalletServiceTest.java | 2 +- .../io/mosip/mimoto/util/WalletValidatorTest.java | 2 +- src/test/resources/application-test.properties | 2 +- 10 files changed, 21 insertions(+), 19 deletions(-) diff --git a/.talismanrc b/.talismanrc index ca0e3dcce..2bad5a143 100644 --- a/.talismanrc +++ b/.talismanrc @@ -76,9 +76,11 @@ fileignoreconfig: - filename: docker-compose/config/mimoto-default.properties checksum: 746b60fa10a8c2c10c00bd35313407186db7aef0762f99e919bbc42fdc597824 - filename: src/test/java/io/mosip/mimoto/service/WalletServiceTest.java - checksum: 3656cc4e0c335d86f95fa6579929ecbc127b475a4fc7b4b1b32595e50af62d26 + checksum: cd48690314dcb0f1153b52e95cc96fd5766a123dbe90ce7247be9a7da2d1a676 - filename: src/main/java/io/mosip/mimoto/controller/WalletsController.java checksum: f54bbacbba3af5e0beff7761245c6aa40cdc676e55b557e1aa0dd157a4eda03a - filename: src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java checksum: 63a4620f43c88a39771ec5e492dc860e9c6cd62ab895243bb284dd04c5be6937 +- filename: src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java + checksum: 90dce7daa19f0eb9050194a3c77a88d449a83c337d9041bfdeb7bfded3bbd12c version: "" \ No newline at end of file diff --git a/docker-compose/config/mimoto-default.properties b/docker-compose/config/mimoto-default.properties index aa308b411..05528ba4c 100644 --- a/docker-compose/config/mimoto-default.properties +++ b/docker-compose/config/mimoto-default.properties @@ -308,7 +308,7 @@ mosip.inji.web.redirect.url=${mosip.inji.web.url}/authorize mosip.inji.qr.data.size.limit=10000 mosip.inji.qr.code.height=650 mosip.inji.qr.code.width=650 -mosip.inji.user.wallet.pin.validation.regex=^\\d{4,6}$ +mosip.inji.user.wallet.pin.validation.regex=^\\d{6}$ mosip.inji.user.wallet.name.validation.regex=^[A-Za-z0-9 _.-]{0,50}$ #OVP Config diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index 7db11a093..c1ce2834b 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -3442,16 +3442,16 @@ "errorMessage": "Wallet name must be alphanumeric with allowed special characters" } }, - "Invalid Wallet Pin": { + "Invalid Wallet Passcode": { "value": { "errorCode": "invalid_request", - "errorMessage": "PIN must be numeric with 4 or 6 digits" + "errorMessage": "Passcode must be numeric with 6 digits" } }, - "Wallet Pin and confirm Pin Mismatch": { + "Entered Passcode and Confirm Passcode Mismatch": { "value": { "errorCode": "invalid_request", - "errorMessage": "Entered PIN and confirmation PIN do not match" + "errorMessage": "Entered Passcode and Confirm Passcode do not match" } } } @@ -3845,10 +3845,10 @@ "errorMessage": "User ID cannot be null or empty" } }, - "Invalid Wallet Pin": { + "Invalid Wallet Passcode": { "value": { "errorCode": "invalid_request", - "errorMessage": "PIN must be numeric with 4 or 6 digits" + "errorMessage": "Passcode must be numeric with 6 digits" } } } diff --git a/src/main/java/io/mosip/mimoto/controller/WalletsController.java b/src/main/java/io/mosip/mimoto/controller/WalletsController.java index 5befbedfd..baa44d072 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletsController.java @@ -62,8 +62,8 @@ public WalletsController(WalletService walletService) { @ExampleObject(name = "User ID is not present in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"User ID not found in session\"}"), @ExampleObject(name = "Invalid User ID", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"User ID cannot be null or empty\"}"), @ExampleObject(name = "Invalid Wallet name", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet name must be alphanumeric with allowed special characters\"}"), - @ExampleObject(name = "Invalid Wallet Pin", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"PIN must be numeric with 4 or 6 digits\"}"), - @ExampleObject(name = "Wallet Pin and confirm Pin Mismatch", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Entered PIN and confirmation PIN do not match\"}")})) + @ExampleObject(name = "Invalid Wallet Pin", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"\"}"), + @ExampleObject(name = "Wallet Pin and confirm Pin Mismatch", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Entered Passcode and Confirm Passcode do not match\"}")})) @ApiResponse(responseCode = "500", description = "Internal server error while creating wallet", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"))) @ApiResponse(responseCode = "503", description = "Service unavailable", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Database connection failure", value = "{\"errorCode\": \"database_unavailable\", \"errorMessage\": \"Failed to connect to the database\"}"))) @PostMapping @@ -115,7 +115,7 @@ public ResponseEntity> getWallets(HttpSession httpSessio */ @Operation(summary = "Unlock an existing Wallet", description = "This API is secured using session-based authentication. The session ID is extracted from the Cookie header to authenticate the user. The user's ID is obtained from the session, and the provided wallet ID and PIN are used to fetch the wallet key, which is stored in the session. If successful, the wallet ID is returned; otherwise, an appropriate error response is returned.", operationId = "unlockWallet", security = @SecurityRequirement(name = "SessionAuth"), parameters = {@Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet to be unlocked", schema = @Schema(type = "string"))}, requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody(required = true, content = @Content(mediaType = "application/json", schema = @Schema(implementation = UnlockWalletRequestDto.class), examples = @ExampleObject(name = "Unlock Wallet Request", value = "{\"walletPin\": \"1234\"}")))) @ApiResponse(responseCode = "200", description = "Wallet unlocked successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = WalletResponseDto.class), examples = @ExampleObject(name = "Success response", value = "{\"walletId\": \"123e4567-e89b-12d3-a456-426614174000\"}"))) - @ApiResponse(responseCode = "400", description = "Invalid Wallets fetching request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "User ID is not present in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"User ID not found in session\"}"), @ExampleObject(name = "Wallet not found", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet not found\"}"), @ExampleObject(name = "Invalid User ID", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"User ID cannot be null or empty\"}"), @ExampleObject(name = "Invalid Wallet Pin", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"PIN must be numeric with 4 or 6 digits\"}")})) + @ApiResponse(responseCode = "400", description = "Invalid Wallets fetching request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "User ID is not present in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"User ID not found in session\"}"), @ExampleObject(name = "Wallet not found", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet not found\"}"), @ExampleObject(name = "Invalid User ID", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"User ID cannot be null or empty\"}"), @ExampleObject(name = "Invalid Wallet Pin", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Passcode must be numeric with 6 digits\"}")})) @ApiResponse(responseCode = "500", description = "Internal server error - any error occurred while decrypting the Wallet key with Wallet PIN or when fetching Wallet details from the database", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"))) @ApiResponse(responseCode = "503", description = "Service unavailable", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Database connection failure", value = "{\"errorCode\": \"database_unavailable\", \"errorMessage\": \"Failed to connect to the database\"}"))) @PostMapping("/{walletId}/unlock") diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java index 8efb0bcbd..36632df7e 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java @@ -44,7 +44,7 @@ public String createWallet(String userId, String name, String pin, String confir if (!pin.equals(confirmPin)) { log.warn("Wallet PIN and confirm PIN are not matching: {}", userId); - throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Entered PIN and confirmation PIN do not match"); + throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Entered Passcode and Confirm Passcode do not match"); } String walletId = walletUtil.createWallet(userId, name, pin); diff --git a/src/main/java/io/mosip/mimoto/util/WalletValidator.java b/src/main/java/io/mosip/mimoto/util/WalletValidator.java index 226907639..db150f059 100644 --- a/src/main/java/io/mosip/mimoto/util/WalletValidator.java +++ b/src/main/java/io/mosip/mimoto/util/WalletValidator.java @@ -13,7 +13,7 @@ @Component public class WalletValidator { - @Value("${mosip.inji.user.wallet.pin.validation.regex:^\\d{4,6}$}") + @Value("${mosip.inji.user.wallet.pin.validation.regex:^\\d{6}$}") private String pinRegex; @Value("${mosip.inji.user.wallet.name.validation.regex:^[A-Za-z0-9 _.-]{0,50}$}") @@ -57,7 +57,7 @@ public void validateWalletPin(String pin) throws InvalidRequestException { log.debug("Validating Wallet PIN: {}", pin); if (pin == null || !pin.matches(pinRegex)) { log.warn("Invalid PIN: {}", pin); - throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "PIN must be numeric with 4 or 6 digits"); + throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Passcode must be numeric with 6 digits"); } } } diff --git a/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java index bb8fb52bb..862ec8e87 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java @@ -107,7 +107,7 @@ public void shouldThrowExceptionIfAnyErrorOccurredWhenCreatingWallet() throws Ex public void shouldThrowExceptionIfReceivedPINAndConfirmPINDoNotMatch() throws Exception { createWalletRequestDto.setConfirmWalletPin("2345"); when(walletService.createWallet(userId, walletName, walletPin, "2345")) - .thenThrow(new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Entered PIN and confirmation PIN do not match")); + .thenThrow(new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Entered Passcode and Confirm Passcode do not match")); mockMvc.perform(post("/wallets") .contentType(MediaType.APPLICATION_JSON) @@ -118,7 +118,7 @@ public void shouldThrowExceptionIfReceivedPINAndConfirmPINDoNotMatch() throws Ex .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.errorCode").value("invalid_request")) - .andExpect(jsonPath("$.errorMessage").value("invalid_request --> Entered PIN and confirmation PIN do not match")); + .andExpect(jsonPath("$.errorMessage").value("invalid_request --> Entered Passcode and Confirm Passcode do not match")); } @Test diff --git a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java index 5085a9083..3d6096594 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java @@ -145,7 +145,7 @@ public void shouldThrowInvalidRequestExceptionIfReceivedPINAndConfirmPINDoNotMat walletService.createWallet(userId, name, walletPin, walletConfirmPin)); assertEquals("invalid_request", exception.getErrorCode()); - assertEquals("invalid_request --> Entered PIN and confirmation PIN do not match", exception.getMessage()); + assertEquals("invalid_request --> Entered Passcode and Confirm Passcode do not match", exception.getMessage()); } @Test diff --git a/src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java b/src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java index 82e8352b6..0d7109d4b 100644 --- a/src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java +++ b/src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java @@ -34,7 +34,7 @@ void testValidatePin_invalidPin() { walletValidator.validateWalletPin("12"); }); - assertEquals("invalid_request --> PIN must be numeric with 4 or 6 digits", exception.getMessage()); + assertEquals("invalid_request --> Passcode must be numeric with 6 digits", exception.getMessage()); } @Test diff --git a/src/test/resources/application-test.properties b/src/test/resources/application-test.properties index 801a67b4c..58b7367bc 100644 --- a/src/test/resources/application-test.properties +++ b/src/test/resources/application-test.properties @@ -11,7 +11,7 @@ mosip.inji.vcDownloadMaxRetry=10 mosip.inji.vcDownloadPoolInterval=6000 mosip.inji.issuer=residentapp mosip.inji.openId4VCIDownloadVCTimeout=30000 -mosip.inji.user.wallet.pin.validation.regex=^\\d{4,6}$ +mosip.inji.user.wallet.pin.validation.regex=^\\d{6}$ mosip.inji.user.wallet.name.validation.regex=^[A-Za-z0-9 _.-]{0,50}$ mosipbox.public.url=https://api.dev1.mosip.net From b4584e603fe6b46d393e2bac35ba67e7f55b9ffd Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Thu, 22 May 2025 19:46:21 +0530 Subject: [PATCH 599/860] [INJIWEB-1513] revert renaming pin to passcode changes Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- docs/api-documentation-openapi.json | 10 +++++----- .../io/mosip/mimoto/controller/WalletsController.java | 4 ++-- .../mosip/mimoto/service/impl/WalletServiceImpl.java | 2 +- .../java/io/mosip/mimoto/util/WalletValidator.java | 2 +- .../mosip/mimoto/controller/WalletsControllerTest.java | 4 ++-- .../io/mosip/mimoto/service/WalletServiceTest.java | 2 +- .../java/io/mosip/mimoto/util/WalletValidatorTest.java | 2 +- 7 files changed, 13 insertions(+), 13 deletions(-) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index c1ce2834b..e69f69c05 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -3442,16 +3442,16 @@ "errorMessage": "Wallet name must be alphanumeric with allowed special characters" } }, - "Invalid Wallet Passcode": { + "Invalid Wallet PIN": { "value": { "errorCode": "invalid_request", - "errorMessage": "Passcode must be numeric with 6 digits" + "errorMessage": "PIN must be numeric with 6 digits" } }, "Entered Passcode and Confirm Passcode Mismatch": { "value": { "errorCode": "invalid_request", - "errorMessage": "Entered Passcode and Confirm Passcode do not match" + "errorMessage": "Entered PIN and Confirm PIN do not match" } } } @@ -3845,10 +3845,10 @@ "errorMessage": "User ID cannot be null or empty" } }, - "Invalid Wallet Passcode": { + "Invalid Wallet PIN": { "value": { "errorCode": "invalid_request", - "errorMessage": "Passcode must be numeric with 6 digits" + "errorMessage": "PIN must be numeric with 6 digits" } } } diff --git a/src/main/java/io/mosip/mimoto/controller/WalletsController.java b/src/main/java/io/mosip/mimoto/controller/WalletsController.java index baa44d072..9a54a9341 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletsController.java @@ -63,7 +63,7 @@ public WalletsController(WalletService walletService) { @ExampleObject(name = "Invalid User ID", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"User ID cannot be null or empty\"}"), @ExampleObject(name = "Invalid Wallet name", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet name must be alphanumeric with allowed special characters\"}"), @ExampleObject(name = "Invalid Wallet Pin", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"\"}"), - @ExampleObject(name = "Wallet Pin and confirm Pin Mismatch", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Entered Passcode and Confirm Passcode do not match\"}")})) + @ExampleObject(name = "Wallet Pin and confirm Pin Mismatch", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Entered PIN and Confirm PIN do not match\"}")})) @ApiResponse(responseCode = "500", description = "Internal server error while creating wallet", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"))) @ApiResponse(responseCode = "503", description = "Service unavailable", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Database connection failure", value = "{\"errorCode\": \"database_unavailable\", \"errorMessage\": \"Failed to connect to the database\"}"))) @PostMapping @@ -115,7 +115,7 @@ public ResponseEntity> getWallets(HttpSession httpSessio */ @Operation(summary = "Unlock an existing Wallet", description = "This API is secured using session-based authentication. The session ID is extracted from the Cookie header to authenticate the user. The user's ID is obtained from the session, and the provided wallet ID and PIN are used to fetch the wallet key, which is stored in the session. If successful, the wallet ID is returned; otherwise, an appropriate error response is returned.", operationId = "unlockWallet", security = @SecurityRequirement(name = "SessionAuth"), parameters = {@Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet to be unlocked", schema = @Schema(type = "string"))}, requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody(required = true, content = @Content(mediaType = "application/json", schema = @Schema(implementation = UnlockWalletRequestDto.class), examples = @ExampleObject(name = "Unlock Wallet Request", value = "{\"walletPin\": \"1234\"}")))) @ApiResponse(responseCode = "200", description = "Wallet unlocked successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = WalletResponseDto.class), examples = @ExampleObject(name = "Success response", value = "{\"walletId\": \"123e4567-e89b-12d3-a456-426614174000\"}"))) - @ApiResponse(responseCode = "400", description = "Invalid Wallets fetching request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "User ID is not present in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"User ID not found in session\"}"), @ExampleObject(name = "Wallet not found", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet not found\"}"), @ExampleObject(name = "Invalid User ID", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"User ID cannot be null or empty\"}"), @ExampleObject(name = "Invalid Wallet Pin", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Passcode must be numeric with 6 digits\"}")})) + @ApiResponse(responseCode = "400", description = "Invalid Wallets fetching request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "User ID is not present in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"User ID not found in session\"}"), @ExampleObject(name = "Wallet not found", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet not found\"}"), @ExampleObject(name = "Invalid User ID", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"User ID cannot be null or empty\"}"), @ExampleObject(name = "Invalid Wallet Pin", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"PIN must be numeric with 6 digits\"}")})) @ApiResponse(responseCode = "500", description = "Internal server error - any error occurred while decrypting the Wallet key with Wallet PIN or when fetching Wallet details from the database", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"))) @ApiResponse(responseCode = "503", description = "Service unavailable", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Database connection failure", value = "{\"errorCode\": \"database_unavailable\", \"errorMessage\": \"Failed to connect to the database\"}"))) @PostMapping("/{walletId}/unlock") diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java index 36632df7e..8b90877a6 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java @@ -44,7 +44,7 @@ public String createWallet(String userId, String name, String pin, String confir if (!pin.equals(confirmPin)) { log.warn("Wallet PIN and confirm PIN are not matching: {}", userId); - throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Entered Passcode and Confirm Passcode do not match"); + throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Entered PIN and Confirm PIN do not match"); } String walletId = walletUtil.createWallet(userId, name, pin); diff --git a/src/main/java/io/mosip/mimoto/util/WalletValidator.java b/src/main/java/io/mosip/mimoto/util/WalletValidator.java index db150f059..b3838117f 100644 --- a/src/main/java/io/mosip/mimoto/util/WalletValidator.java +++ b/src/main/java/io/mosip/mimoto/util/WalletValidator.java @@ -57,7 +57,7 @@ public void validateWalletPin(String pin) throws InvalidRequestException { log.debug("Validating Wallet PIN: {}", pin); if (pin == null || !pin.matches(pinRegex)) { log.warn("Invalid PIN: {}", pin); - throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Passcode must be numeric with 6 digits"); + throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "PIN must be numeric with 6 digits"); } } } diff --git a/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java index 862ec8e87..9ada5f49c 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java @@ -107,7 +107,7 @@ public void shouldThrowExceptionIfAnyErrorOccurredWhenCreatingWallet() throws Ex public void shouldThrowExceptionIfReceivedPINAndConfirmPINDoNotMatch() throws Exception { createWalletRequestDto.setConfirmWalletPin("2345"); when(walletService.createWallet(userId, walletName, walletPin, "2345")) - .thenThrow(new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Entered Passcode and Confirm Passcode do not match")); + .thenThrow(new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Entered PIN and Confirm PIN do not match")); mockMvc.perform(post("/wallets") .contentType(MediaType.APPLICATION_JSON) @@ -118,7 +118,7 @@ public void shouldThrowExceptionIfReceivedPINAndConfirmPINDoNotMatch() throws Ex .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.errorCode").value("invalid_request")) - .andExpect(jsonPath("$.errorMessage").value("invalid_request --> Entered Passcode and Confirm Passcode do not match")); + .andExpect(jsonPath("$.errorMessage").value("invalid_request --> Entered PIN and Confirm PIN do not match")); } @Test diff --git a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java index 3d6096594..796ed3d34 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java @@ -145,7 +145,7 @@ public void shouldThrowInvalidRequestExceptionIfReceivedPINAndConfirmPINDoNotMat walletService.createWallet(userId, name, walletPin, walletConfirmPin)); assertEquals("invalid_request", exception.getErrorCode()); - assertEquals("invalid_request --> Entered Passcode and Confirm Passcode do not match", exception.getMessage()); + assertEquals("invalid_request --> Entered PIN and Confirm PIN do not match", exception.getMessage()); } @Test diff --git a/src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java b/src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java index 0d7109d4b..7d09f47e1 100644 --- a/src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java +++ b/src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java @@ -34,7 +34,7 @@ void testValidatePin_invalidPin() { walletValidator.validateWalletPin("12"); }); - assertEquals("invalid_request --> Passcode must be numeric with 6 digits", exception.getMessage()); + assertEquals("invalid_request --> PIN must be numeric with 6 digits", exception.getMessage()); } @Test From fdc61c489977c13db79eeb07e0899cd01a111638 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 26 May 2025 00:26:57 +0530 Subject: [PATCH 600/860] [INJIWEB-1513] change passcode to pin in documentation file for create wallet endpoint Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- docs/api-documentation-openapi.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index e69f69c05..6c9f20f39 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -3448,7 +3448,7 @@ "errorMessage": "PIN must be numeric with 6 digits" } }, - "Entered Passcode and Confirm Passcode Mismatch": { + "Entered Pin and Confirm Pin Mismatch": { "value": { "errorCode": "invalid_request", "errorMessage": "Entered PIN and Confirm PIN do not match" From 6e5992867b88af2563d18d0ddfd1a588f0c6a27f Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 26 May 2025 10:38:02 +0530 Subject: [PATCH 601/860] [INJIWEB-1513] remove validation on confirmPin in walletServiceImpl file to immediately return the error message to the user if pin and confirmPin don't match instead of checking the pin validations to reduce the number of steps Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../io/mosip/mimoto/service/impl/WalletServiceImpl.java | 1 - .../java/io/mosip/mimoto/service/WalletServiceTest.java | 7 ++----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java index 8b90877a6..22633b84d 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java @@ -40,7 +40,6 @@ public String createWallet(String userId, String name, String pin, String confir validator.validateUserId(userId); validator.validateWalletName(name); validator.validateWalletPin(pin); - validator.validateWalletPin(confirmPin); if (!pin.equals(confirmPin)) { log.warn("Wallet PIN and confirm PIN are not matching: {}", userId); diff --git a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java index 796ed3d34..8c4dea3af 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java @@ -69,11 +69,8 @@ public void shouldCreateWalletSuccessfully() throws Exception { verify(walletValidator).validateUserId(userId); verify(walletValidator).validateWalletName(name); - ArgumentCaptor captor = ArgumentCaptor.forClass(String.class); - verify(walletValidator, times(2)).validateWalletPin(captor.capture()); - List capturedPins = captor.getAllValues(); - - assertThat(capturedPins, containsInAnyOrder(walletPin, walletConfirmPin)); + verify(walletValidator).validateWalletPin(walletPin); + verify(walletHelper).createWallet(userId, name, walletPin); } @Test From 06b913b1a37e03f22f0f8805601301249ca71cb4 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 26 May 2025 10:39:47 +0530 Subject: [PATCH 602/860] [INJIWEB-1513] remove extra space between verify statements in code Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- src/test/java/io/mosip/mimoto/service/WalletServiceTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java index 8c4dea3af..dd3cff6bf 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java @@ -68,7 +68,6 @@ public void shouldCreateWalletSuccessfully() throws Exception { assertEquals(newWalletId, result); verify(walletValidator).validateUserId(userId); verify(walletValidator).validateWalletName(name); - verify(walletValidator).validateWalletPin(walletPin); verify(walletHelper).createWallet(userId, name, walletPin); } From e564db769e2c6d4805abc6ccdc5f0d162cfff857 Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Mon, 19 May 2025 13:12:05 +0530 Subject: [PATCH 603/860] [INJIWEB-1541] modify /wallets/{walletId}/credentials input param Signed-off-by: KiruthikaJeyashankar --- docs/api-documentation-openapi.json | 2 +- .../WalletCredentialsController.java | 12 +++---- .../service/WalletCredentialService.java | 4 +-- .../impl/WalletCredentialServiceImpl.java | 10 +++--- .../mimoto/util/CredentialProcessor.java | 24 +++++++------- .../WalletCredentialsControllerTest.java | 32 +++++++++++++------ 6 files changed, 49 insertions(+), 35 deletions(-) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index 6c9f20f39..b1bf3be36 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -2968,7 +2968,7 @@ "Missing required params": { "value": { "errorCode": "invalid_request", - "errorMessage": "Issuer and credential type are required" + "errorMessage": "Issuer and credentialConfiguration are required" } }, "Wallet ID is null or blank": { diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index 0abd618be..965e05393 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -72,11 +72,11 @@ public WalletCredentialsController(WalletCredentialService walletCredentialServi @Operation(summary = "Download and store a Verifiable Credential under a specific Wallet", description = "This API is secured using session-based authentication. Upon receiving a request, the session ID is extracted from the Cookie header and used to retrieve session details from Redis for authentication. It then retrieves the wallet key from the session and use it to decrypt the signing algorithm's secret key(which is used for signing the JWT in credential request) and encrypt the downloaded Verifiable Credential. If the process completes successfully, the credential is stored in the database and certain fields will be returned in the response. In case of any issues, an appropriate error response is returned.", operationId = "downloadCredential", security = @SecurityRequirement(name = "SessionAuth"), parameters = { @Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet", schema = @Schema(type = "string")), @Parameter(name = "issuer", in = ParameterIn.QUERY, required = true, description = "The identifier of the issuer", schema = @Schema(type = "string")), - @Parameter(name = "credential", in = ParameterIn.QUERY, required = true, description = "The type of the credential", schema = @Schema(type = "string")), + @Parameter(name = "credentialConfigurationId", in = ParameterIn.QUERY, required = true, description = "The type of the credential", schema = @Schema(type = "string")), @Parameter(name = "vcStorageExpiryLimitInTimes", in = ParameterIn.QUERY, required = false, description = "The expiration limit for the Verifiable Credential storage", schema = @Schema(type = "string", defaultValue = "-1")), @Parameter(name = "locale", in = ParameterIn.QUERY, required = false, description = "The locale for the Verifiable Credential", schema = @Schema(type = "string", defaultValue = "en"))}) @ApiResponse(responseCode = "200", description = "Verifiable Credential downloaded and stored successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = VerifiableCredentialResponseDTO.class))) - @ApiResponse(responseCode = "400", description = "Bad request - Wallet key is null / blank or Wallet ID is null / blank / mismatch with session Wallet ID or required params are missing / invalid", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "Invalid Wallet Id", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Invalid Wallet ID. Session and request Wallet ID do not match\"}"), @ExampleObject(name = "Wallet key not found in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet key not found in session\"}"), @ExampleObject(name = "Missing required params", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Issuer and credential type are required\"}"), @ExampleObject(name = "Wallet ID is null or blank", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet ID cannot be null or blank\"}"), @ExampleObject(name = "Issuer ID is null or blank", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Issuer ID cannot be null or blank\"}")})) + @ApiResponse(responseCode = "400", description = "Bad request - Wallet key is null / blank or Wallet ID is null / blank / mismatch with session Wallet ID or required params are missing / invalid", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "Invalid Wallet Id", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Invalid Wallet ID. Session and request Wallet ID do not match\"}"), @ExampleObject(name = "Wallet key not found in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet key not found in session\"}"), @ExampleObject(name = "Missing required params", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Issuer and credentialConfigurationId are required\"}"), @ExampleObject(name = "Wallet ID is null or blank", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet ID cannot be null or blank\"}"), @ExampleObject(name = "Issuer ID is null or blank", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Issuer ID cannot be null or blank\"}")})) @ApiResponse(responseCode = "500", description = "Internal server error - error occurred while serializing the VC response, encrypting the credential, or storing it", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "Credential already exists", value = "{\"errorCode\": \"credential_download_error\", \"errorMessage\": \"Duplicate credential for issuer and type\"}"), @ExampleObject(name = "Issuer config error", value = "{\"errorCode\": \"credential_download_error\", \"errorMessage\": \"Unable to fetch issuer configuration\"}"), @ExampleObject(name = "Failed to generate VC request", value = "{\"errorCode\": \"credential_download_error\", \"errorMessage\": \"Unable to generate credential request\"}"), @ExampleObject(name = "Signature verification failed", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"), @ExampleObject(name = "Unexpected server error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}")})) @ApiResponse(responseCode = "503", description = "Service unavailable - error while fetching issuer or auth server wellknown, downloading credential, or DB connection failure", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "API is not accessible", value = "{\"errorCode\": \"credential_download_error\", \"errorMessage\": \"Failed to download and store the credential\"}"), @ExampleObject(name = "Failed to download credential", value = "{\"errorCode\": \"server_unavailable\", \"errorMessage\": \"Unable to download credential from issuer\"}"), @ExampleObject(name = "Database connection failure", value = "{\"errorCode\": \"database_unavailable\", \"errorMessage\": \"Failed to connect to the database\"}")})) @PostMapping @@ -91,13 +91,13 @@ public ResponseEntity downloadCredential( String base64EncodedWalletKey = WalletUtil.getSessionWalletKey(httpSession); String issuerId = params.get("issuer"); - String credentialType = params.get("credential"); + String credentialConfigurationId = params.get("credentialConfigurationId"); String credentialValidity = params.get("vcStorageExpiryLimitInTimes"); String locale = params.get("locale"); - if (issuerId == null || issuerId.isBlank() || credentialType == null || credentialType.isBlank()) { + if (issuerId == null || issuerId.isBlank() || credentialConfigurationId == null || credentialConfigurationId.isBlank()) { log.error("Missing required parameters: issuer or credential"); - throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Issuer and credential type are required"); + throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Issuer and credentialConfigurationId are required"); } log.info("Initiating token call for issuer: {}", issuerId); @@ -115,7 +115,7 @@ public ResponseEntity downloadCredential( try { VerifiableCredentialResponseDTO credentialResponseDTO = walletCredentialService.fetchAndStoreCredential( - issuerId, credentialType, tokenResponse, credentialValidity, locale, walletId, base64EncodedWalletKey); + issuerId, credentialConfigurationId, tokenResponse, credentialValidity, locale, walletId, base64EncodedWalletKey); return ResponseEntity.status(HttpStatus.OK).body(credentialResponseDTO); } catch (ExternalServiceUnavailableException e) { return Utilities.getErrorResponseEntityWithoutWrapper( diff --git a/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java b/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java index bf5fd5b74..44be490f8 100644 --- a/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java +++ b/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java @@ -16,7 +16,7 @@ public interface WalletCredentialService { * Fetches and stores a credential for a wallet. * * @param issuerId The issuer ID. - * @param credentialType The type of credential. + * @param credentialConfigurationId The type of credential. * @param tokenResponse The token response containing the access token. * @param credentialValidity The validity period of the credential. * @param locale The locale for display purposes. @@ -25,7 +25,7 @@ public interface WalletCredentialService { * @return The stored credential response. * @throws CredentialProcessingException If processing fails. */ - VerifiableCredentialResponseDTO fetchAndStoreCredential(String issuerId, String credentialType, + VerifiableCredentialResponseDTO fetchAndStoreCredential(String issuerId, String credentialConfigurationId, TokenResponseDTO tokenResponse, String credentialValidity, String locale, String walletId, String base64Key) throws CredentialProcessingException, ExternalServiceUnavailableException; diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java index 46c3cd4bc..375a191e7 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java @@ -52,16 +52,16 @@ public WalletCredentialServiceImpl(WalletCredentialsRepository repository, } @Override - public VerifiableCredentialResponseDTO fetchAndStoreCredential(String issuerId, String credentialType, + public VerifiableCredentialResponseDTO fetchAndStoreCredential(String issuerId, String credentialConfigurationId, TokenResponseDTO tokenResponse, String credentialValidity, String locale, String walletId, String base64Key) throws CredentialProcessingException, ExternalServiceUnavailableException { - log.info("Fetching and storing credential for wallet: {}, issuer: {}, type: {}", walletId, issuerId, credentialType); + log.info("Fetching and storing credential for wallet: {}, issuer: {}, type: {}", walletId, issuerId, credentialConfigurationId); Set issuers = Set.of("Mosip"); if (issuers.contains(issuerId)){ - if (repository.existsByIssuerIdAndCredentialTypeAndWalletId(issuerId, credentialType, walletId)) { - log.warn("Duplicate credential found for issuer: {}, type: {}, wallet: {}", issuerId, credentialType, walletId); + if (repository.existsByIssuerIdAndCredentialTypeAndWalletId(issuerId, credentialConfigurationId, walletId)) { + log.warn("Duplicate credential found for issuer: {}, type: {}, wallet: {}", issuerId, credentialConfigurationId, walletId); throw new CredentialProcessingException(CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), "Duplicate credential for issuer and type"); } } @@ -69,7 +69,7 @@ public VerifiableCredentialResponseDTO fetchAndStoreCredential(String issuerId, VerifiableCredentialResponseDTO credential = null; credential = credentialProcessor.processAndStoreCredential( - tokenResponse, credentialType, walletId, base64Key, credentialValidity, issuerId, locale); + tokenResponse, credentialConfigurationId, walletId, base64Key, credentialValidity, issuerId, locale); log.debug("Credential stored successfully: {}", credential.getCredentialId()); return credential; diff --git a/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java b/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java index 57d48ff55..498732014 100644 --- a/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java +++ b/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java @@ -57,7 +57,7 @@ public CredentialProcessor( * Processes and stores a credential using the provided token and parameters. * * @param tokenResponse The token response containing the access token. - * @param credentialType The type of the credential. + * @param credentialConfigurationId The type of the credential. * @param walletId The ID of the wallet. * @param base64Key The Base64-encoded wallet key. * @param credentialValidity The validity period of the credential. @@ -69,7 +69,7 @@ public CredentialProcessor( * @throws VCVerificationException If credential verification fails. */ public VerifiableCredentialResponseDTO processAndStoreCredential( - TokenResponseDTO tokenResponse, String credentialType, String walletId, + TokenResponseDTO tokenResponse, String credentialConfigurationId, String walletId, String base64Key, String credentialValidity, String issuerId, String locale) throws InvalidRequestException, CredentialProcessingException, ExternalServiceUnavailableException, VCVerificationException { // Validate inputs @@ -77,7 +77,7 @@ public VerifiableCredentialResponseDTO processAndStoreCredential( log.error("Invalid token response: null or missing access token"); throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Token response or access token cannot be null"); } - if (credentialType == null || credentialType.isBlank()) { + if (credentialConfigurationId == null || credentialConfigurationId.isBlank()) { log.error("Invalid credential type: null or blank"); throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Credential type cannot be null or blank"); } @@ -97,7 +97,7 @@ public VerifiableCredentialResponseDTO processAndStoreCredential( // Fetch issuer configuration IssuerConfig issuerConfig; try { - issuerConfig = issuersService.getIssuerConfig(issuerId, credentialType); + issuerConfig = issuersService.getIssuerConfig(issuerId, credentialConfigurationId); } catch (Exception e) { log.error("Failed to fetch issuer config for issuerId: {}", issuerId, e); throw new CredentialProcessingException( @@ -113,7 +113,7 @@ public VerifiableCredentialResponseDTO processAndStoreCredential( issuerConfig.getCredentialsSupportedResponse(), tokenResponse.getAccess_token(), walletId, base64Key, true); } catch (Exception e) { - log.error("Failed to generate VC credential request for issuerId: {}, credentialType: {}", issuerId, credentialType, e); + log.error("Failed to generate VC credential request for issuerId: {}, credentialConfigurationId: {}", issuerId, credentialConfigurationId, e); throw new CredentialProcessingException( CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), "Unable to generate credential request", e); @@ -126,7 +126,7 @@ public VerifiableCredentialResponseDTO processAndStoreCredential( issuerConfig.getWellKnownResponse().getCredentialEndPoint(), vcCredentialRequest, tokenResponse.getAccess_token()); } catch (Exception e) { - log.error("Failed to download credential for issuerId: {}, credentialType: {}", issuerId, credentialType, e); + log.error("Failed to download credential for issuerId: {}, credentialConfigurationId: {}", issuerId, credentialConfigurationId, e); throw new ExternalServiceUnavailableException( SERVER_UNAVAILABLE.getErrorCode(), "Unable to download credential from issuer", e); @@ -138,14 +138,14 @@ public VerifiableCredentialResponseDTO processAndStoreCredential( verificationStatus = issuerId.toLowerCase().contains("mock") || credentialUtilService.verifyCredential(vcCredentialResponse); } catch (VCVerificationException | JsonProcessingException e) { - log.error("Credential verification failed for issuerId: {}, credentialType: {}", issuerId, credentialType, e); + log.error("Credential verification failed for issuerId: {}, credentialConfigurationId: {}", issuerId, credentialConfigurationId, e); throw new VCVerificationException( SIGNATURE_VERIFICATION_EXCEPTION.getErrorCode(), "Credential verification failed"); } if (!verificationStatus) { - log.error("Signature verification failed for issuerId: {}, credentialType: {}", issuerId, credentialType); + log.error("Signature verification failed for issuerId: {}, credentialConfigurationId: {}", issuerId, credentialConfigurationId); throw new VCVerificationException( SIGNATURE_VERIFICATION_EXCEPTION.getErrorCode(), SIGNATURE_VERIFICATION_EXCEPTION.getErrorMessage()); @@ -156,7 +156,7 @@ public VerifiableCredentialResponseDTO processAndStoreCredential( try { vcResponseAsJsonString = objectMapper.writeValueAsString(vcCredentialResponse); } catch (JsonProcessingException e) { - log.error("Failed to serialize credential response for issuerId: {}, credentialType: {}", issuerId, credentialType, e); + log.error("Failed to serialize credential response for issuerId: {}, credentialConfigurationId: {}", issuerId, credentialConfigurationId, e); throw new CredentialProcessingException( CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), "Unable to serialize credential response", e); @@ -168,7 +168,7 @@ public VerifiableCredentialResponseDTO processAndStoreCredential( ? dataShareService.storeDataInDataShare(vcResponseAsJsonString, credentialValidity) : ""; } catch (Exception e) { - log.error("Failed to store credential in data share for issuerId: {}, credentialType: {}", issuerId, credentialType, e); + log.error("Failed to store credential in data share for issuerId: {}, credentialConfigurationId: {}", issuerId, credentialConfigurationId, e); throw new CredentialProcessingException( CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), "Unable to store credential in datashare", e); @@ -178,13 +178,13 @@ public VerifiableCredentialResponseDTO processAndStoreCredential( try { encryptedCredentialData = encryptionDecryptionUtil.encryptCredential(vcResponseAsJsonString, base64Key); } catch (Exception e) { - log.error("Failed to encrypt credential for issuerId: {}, credentialType: {}", issuerId, credentialType, e); + log.error("Failed to encrypt credential for issuerId: {}, credentialConfigurationId: {}", issuerId, credentialConfigurationId, e); throw new CredentialProcessingException( CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), "Unable to encrypt credential data", e); } - VerifiableCredential savedCredential = saveCredential(walletId, encryptedCredentialData, issuerId, credentialType, dataShareUrl, credentialValidity); + VerifiableCredential savedCredential = saveCredential(walletId, encryptedCredentialData, issuerId, credentialConfigurationId, dataShareUrl, credentialValidity); return WalletCredentialResponseDTOFactory.buildCredentialResponseDTO(issuerConfig, locale, savedCredential.getId()); } diff --git a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java index 9dac35a23..25518c7c2 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java @@ -63,7 +63,7 @@ public class WalletCredentialsControllerTest { private String credentialId = "cred456"; private String walletKey = "encodedKey"; private String issuer = "issuer1"; - private String credentialType = "type1"; + private String credentialConfigurationId = "type1"; private String locale = "en"; private String vcStorageExpiryLimit = "-1"; @@ -90,14 +90,14 @@ public void setup() { @Test public void shouldDownloadCredentialSuccessfully() throws Exception { when(credentialUtilService.getTokenResponse(anyMap(), eq(issuer))).thenReturn(new TokenResponseDTO()); - when(walletCredentialService.fetchAndStoreCredential(eq(issuer), eq(credentialType), any(), eq(vcStorageExpiryLimit), eq(locale), eq(walletId), eq(walletKey))) + when(walletCredentialService.fetchAndStoreCredential(eq(issuer), eq(credentialConfigurationId), any(), eq(vcStorageExpiryLimit), eq(locale), eq(walletId), eq(walletKey))) .thenReturn(verifiableCredentialResponseDTO); mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) .contentType(MediaType.APPLICATION_FORM_URLENCODED) .accept(MediaType.APPLICATION_JSON) .param("issuer", issuer) - .param("credential", credentialType) + .param("credentialConfigurationId", credentialConfigurationId) .param("vcStorageExpiryLimitInTimes", vcStorageExpiryLimit) .param("locale", locale) .sessionAttr("wallet_id", walletId) @@ -115,7 +115,7 @@ public void shouldThrowInvalidRequestForWalletIdMismatch() throws Exception { .accept(MediaType.APPLICATION_JSON) .contentType(MediaType.APPLICATION_FORM_URLENCODED) .param("issuer", issuer) - .param("credential", credentialType) + .param("credentialConfigurationId", credentialConfigurationId) .sessionAttr("wallet_id", "differentWalletId") .sessionAttr("wallet_key", walletKey)) .andExpect(status().isBadRequest()) @@ -131,7 +131,7 @@ public void shouldThrowInvalidRequestForMissingWalletKey() throws Exception { .accept(MediaType.APPLICATION_JSON) .contentType(MediaType.APPLICATION_FORM_URLENCODED) .param("issuer", issuer) - .param("credential", credentialType) + .param("credentialConfigurationId", credentialConfigurationId) .sessionAttr("wallet_id", walletId)) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.errorCode").value("invalid_request")) @@ -139,7 +139,7 @@ public void shouldThrowInvalidRequestForMissingWalletKey() throws Exception { } @Test - public void shouldThrowInvalidRequestForMissingIssuerOrCredential() throws Exception { + public void shouldThrowInvalidRequestForMissingIssuerOrCredentialConfigurationId() throws Exception { mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) .accept(MediaType.APPLICATION_JSON) .contentType(MediaType.APPLICATION_FORM_URLENCODED) @@ -148,7 +148,21 @@ public void shouldThrowInvalidRequestForMissingIssuerOrCredential() throws Excep .sessionAttr("wallet_key", walletKey)) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.errorCode").value("invalid_request")) - .andExpect(jsonPath("$.errorMessage").value("invalid_request --> Issuer and credential type are required")); + .andExpect(jsonPath("$.errorMessage").value("invalid_request --> Issuer and credentialConfigurationId are required")); + } + + @Test + public void shouldThrowInvalidRequestForMissingCredentialConfigurationId() throws Exception { + mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) + .accept(MediaType.APPLICATION_JSON) + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .param("issuer", issuer) + .param("locale", locale) + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errorCode").value("invalid_request")) + .andExpect(jsonPath("$.errorMessage").value("invalid_request --> Issuer and credentialConfigurationId are required")); } @Test @@ -159,7 +173,7 @@ public void shouldThrowServiceUnavailableForTokenResponseFailure() throws Except mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) .contentType(MediaType.APPLICATION_FORM_URLENCODED) .param("issuer", issuer) - .param("credential", credentialType) + .param("credentialConfigurationId", credentialConfigurationId) .sessionAttr("wallet_id", walletId) .sessionAttr("wallet_key", walletKey)) .andExpect(status().isServiceUnavailable()) @@ -175,7 +189,7 @@ public void shouldThrowServiceUnavailableForExternalServiceFailure() throws Exce mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) .contentType(MediaType.APPLICATION_FORM_URLENCODED) .param("issuer", issuer) - .param("credential", credentialType) + .param("credentialConfigurationId", credentialConfigurationId) .sessionAttr("wallet_id", walletId) .sessionAttr("wallet_key", walletKey)) .andExpect(status().isServiceUnavailable()) From 35b4afd33ec63cf3da5c33cd39dad890c95b5446 Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Mon, 19 May 2025 16:52:40 +0530 Subject: [PATCH 604/860] [INJIWEB-1541] modify /wallets/{walletId}/credentials to accept locale via header Signed-off-by: KiruthikaJeyashankar --- .../WalletCredentialsController.java | 12 +-- .../mimoto/util/GlobalExceptionHandler.java | 2 +- .../WalletCredentialsControllerTest.java | 98 +++++++++++++++---- 3 files changed, 83 insertions(+), 29 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index 965e05393..0b7b69870 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -74,26 +74,24 @@ public WalletCredentialsController(WalletCredentialService walletCredentialServi @Parameter(name = "issuer", in = ParameterIn.QUERY, required = true, description = "The identifier of the issuer", schema = @Schema(type = "string")), @Parameter(name = "credentialConfigurationId", in = ParameterIn.QUERY, required = true, description = "The type of the credential", schema = @Schema(type = "string")), @Parameter(name = "vcStorageExpiryLimitInTimes", in = ParameterIn.QUERY, required = false, description = "The expiration limit for the Verifiable Credential storage", schema = @Schema(type = "string", defaultValue = "-1")), - @Parameter(name = "locale", in = ParameterIn.QUERY, required = false, description = "The locale for the Verifiable Credential", schema = @Schema(type = "string", defaultValue = "en"))}) + @Parameter(name = "locale", in = ParameterIn.HEADER, required = false, description = "The locale for the Verifiable Credential. It follows 2 letter language code", schema = @Schema(type = "string", defaultValue = "en"))}) @ApiResponse(responseCode = "200", description = "Verifiable Credential downloaded and stored successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = VerifiableCredentialResponseDTO.class))) @ApiResponse(responseCode = "400", description = "Bad request - Wallet key is null / blank or Wallet ID is null / blank / mismatch with session Wallet ID or required params are missing / invalid", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "Invalid Wallet Id", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Invalid Wallet ID. Session and request Wallet ID do not match\"}"), @ExampleObject(name = "Wallet key not found in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet key not found in session\"}"), @ExampleObject(name = "Missing required params", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Issuer and credentialConfigurationId are required\"}"), @ExampleObject(name = "Wallet ID is null or blank", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet ID cannot be null or blank\"}"), @ExampleObject(name = "Issuer ID is null or blank", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Issuer ID cannot be null or blank\"}")})) @ApiResponse(responseCode = "500", description = "Internal server error - error occurred while serializing the VC response, encrypting the credential, or storing it", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "Credential already exists", value = "{\"errorCode\": \"credential_download_error\", \"errorMessage\": \"Duplicate credential for issuer and type\"}"), @ExampleObject(name = "Issuer config error", value = "{\"errorCode\": \"credential_download_error\", \"errorMessage\": \"Unable to fetch issuer configuration\"}"), @ExampleObject(name = "Failed to generate VC request", value = "{\"errorCode\": \"credential_download_error\", \"errorMessage\": \"Unable to generate credential request\"}"), @ExampleObject(name = "Signature verification failed", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"), @ExampleObject(name = "Unexpected server error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}")})) @ApiResponse(responseCode = "503", description = "Service unavailable - error while fetching issuer or auth server wellknown, downloading credential, or DB connection failure", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "API is not accessible", value = "{\"errorCode\": \"credential_download_error\", \"errorMessage\": \"Failed to download and store the credential\"}"), @ExampleObject(name = "Failed to download credential", value = "{\"errorCode\": \"server_unavailable\", \"errorMessage\": \"Unable to download credential from issuer\"}"), @ExampleObject(name = "Database connection failure", value = "{\"errorCode\": \"database_unavailable\", \"errorMessage\": \"Failed to connect to the database\"}")})) @PostMapping public ResponseEntity downloadCredential( + @RequestHeader(value = "Accept-Language", required = false, defaultValue = "en") @Pattern(regexp = "^[a-z]{2}$", message = "Locale must be a 2-letter code") String locale, @PathVariable("walletId") @NotBlank(message = "Wallet ID cannot be blank") String walletId, @RequestParam Map params, HttpSession httpSession) throws InvalidRequestException { - params.putIfAbsent("vcStorageExpiryLimitInTimes", "-1"); - params.putIfAbsent("locale", "en"); WalletUtil.validateWalletId(httpSession, walletId); String base64EncodedWalletKey = WalletUtil.getSessionWalletKey(httpSession); String issuerId = params.get("issuer"); String credentialConfigurationId = params.get("credentialConfigurationId"); - String credentialValidity = params.get("vcStorageExpiryLimitInTimes"); - String locale = params.get("locale"); + String credentialValidity = params.getOrDefault("vcStorageExpiryLimitInTimes", "-1"); if (issuerId == null || issuerId.isBlank() || credentialConfigurationId == null || credentialConfigurationId.isBlank()) { log.error("Missing required parameters: issuer or credential"); @@ -138,7 +136,7 @@ public ResponseEntity downloadCredential( */ @Operation(summary = "Fetch all credentials for the given wallet", description = "This API is secured using session-based authentication. When a request is made, the session ID is extracted from the Cookie header and used to fetch session details from Redis for authentication. It then retrieves the wallet key from the session and uses it to decrypt all stored Verifiable Credentials for the given wallet. If successful, it returns a list of credentials otherwise an appropriate error is returned.", operationId = "fetchAllCredentialsForWallet", security = @SecurityRequirement(name = "SessionAuth"), parameters = { @Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the user's wallet from where the credential will be fetched", schema = @Schema(type = "string")), - @Parameter(name = "locale", in = ParameterIn.QUERY, required = true, description = "Locale is used to determine the language in which credentials should be rendered", schema = @Schema(type = "string"))}) + @Parameter(name = "locale", in = ParameterIn.HEADER, required = false, description = "Locale is used to determine the language in which credentials should be rendered. It follows 2 letter language code", schema = @Schema(type = "string"))}) @ApiResponse(responseCode = "200", description = "Credentials retrieved successfully", content = @Content(mediaType = "application/json", array = @ArraySchema(schema = @Schema(implementation = VerifiableCredentialResponseDTO.class)), examples = @ExampleObject(value = SwaggerExampleConstants.FETCH_ALL_CREDENTIALS_OF_WALLET_SUCCESS))) @ApiResponse(responseCode = "400", description = "Bad request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "Invalid Wallet Id", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Invalid Wallet ID. Session and request Wallet ID do not match\"}"), @ExampleObject(name = "Wallet key not found in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet key not found in session\"}")})) @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"))) @@ -146,7 +144,7 @@ public ResponseEntity downloadCredential( @GetMapping public ResponseEntity> fetchAllCredentialsForGivenWallet( @PathVariable("walletId") @NotBlank(message = "Wallet ID cannot be blank") String walletId, - @RequestParam(value = "locale", defaultValue = "en") @Pattern(regexp = "^[a-z]{2}$", message = "Locale must be a 2-letter code") String locale, + @RequestHeader(value = "Accept-Language", defaultValue = "en") @Pattern(regexp = "^[a-z]{2}$", message = "Locale must be a 2-letter code") String locale, HttpSession httpSession) throws InvalidRequestException { WalletUtil.validateWalletId(httpSession, walletId); diff --git a/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java b/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java index 7e8c16394..956b1b458 100644 --- a/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java +++ b/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java @@ -81,7 +81,7 @@ public ErrorDTO handleNoHandlerFoundException(NoHandlerFoundException ex) { @ResponseStatus(HttpStatus.BAD_REQUEST) public ErrorDTO handleHandlerMethodValidationException(HandlerMethodValidationException ex) { log.error("Validation error in handler method: {}", ex.getMessage()); - // You might want to extract more detailed information if available in this exception + //TODO: You might want to extract more detailed information if available in this exception return new ErrorDTO(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Validation error in request parameters"); } diff --git a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java index 25518c7c2..5985b3607 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java @@ -3,7 +3,10 @@ import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; import io.mosip.mimoto.dto.resident.WalletCredentialResponseDTO; -import io.mosip.mimoto.exception.*; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.CredentialNotFoundException; +import io.mosip.mimoto.exception.CredentialProcessingException; +import io.mosip.mimoto.exception.ExternalServiceUnavailableException; import io.mosip.mimoto.service.WalletCredentialService; import io.mosip.mimoto.util.CredentialUtilService; import io.mosip.mimoto.util.GlobalExceptionHandler; @@ -59,13 +62,13 @@ public class WalletCredentialsControllerTest { private VerifiableCredentialResponseDTO verifiableCredentialResponseDTO; private WalletCredentialResponseDTO walletCredentialResponseDTO; - private String walletId = "wallet123"; - private String credentialId = "cred456"; - private String walletKey = "encodedKey"; - private String issuer = "issuer1"; - private String credentialConfigurationId = "type1"; - private String locale = "en"; - private String vcStorageExpiryLimit = "-1"; + private final String walletId = "wallet123"; + private final String credentialId = "cred456"; + private final String walletKey = "encodedKey"; + private final String issuer = "issuer1"; + private final String credentialConfigurationId = "type1"; + private final String locale = "en"; + private final String vcStorageExpiryLimit = "-1"; @Before public void setup() { @@ -96,10 +99,10 @@ public void shouldDownloadCredentialSuccessfully() throws Exception { mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) .contentType(MediaType.APPLICATION_FORM_URLENCODED) .accept(MediaType.APPLICATION_JSON) + .header("Accept-Language", locale) .param("issuer", issuer) .param("credentialConfigurationId", credentialConfigurationId) .param("vcStorageExpiryLimitInTimes", vcStorageExpiryLimit) - .param("locale", locale) .sessionAttr("wallet_id", walletId) .sessionAttr("wallet_key", walletKey)) .andExpect(status().isOk()) @@ -107,6 +110,56 @@ public void shouldDownloadCredentialSuccessfully() throws Exception { .andExpect(jsonPath("$.credential_id").value("credentialId123")); } + @Test + public void shouldCallServiceWithCorrectParameters() throws Exception { + mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .accept(MediaType.APPLICATION_JSON) + .header("Accept-Language", "fr") + .param("issuer", issuer) + .param("credentialConfigurationId", credentialConfigurationId) + .param("vcStorageExpiryLimitInTimes", vcStorageExpiryLimit) + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)); + + verify(credentialUtilService).getTokenResponse(argThat(params -> params.get("issuer").equals(issuer) && + params.get("credentialConfigurationId").equals(credentialConfigurationId) && + params.get("vcStorageExpiryLimitInTimes").equals(vcStorageExpiryLimit) + ), eq(issuer)); + verify(walletCredentialService + ).fetchAndStoreCredential(eq(issuer), eq(credentialConfigurationId), any(), eq(vcStorageExpiryLimit), eq("fr"), eq(walletId), eq(walletKey)); + } + + @Test + public void shouldSetDefaultAndProceedWhenOptionalRequestParametersAreNotPassed() throws Exception { + mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .accept(MediaType.APPLICATION_JSON) + .param("issuer", issuer) + .param("credentialConfigurationId", credentialConfigurationId) + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)); + + // Default value for vcStorageExpiryLimit is -1 and locale is "en" + verify(walletCredentialService).fetchAndStoreCredential(any(), any(), any(), eq("-1"), eq("en"), eq(walletId), eq(walletKey)); + } + + @Test + public void shouldThrowExceptionWhenInvalidLocaleIsPassed() throws Exception { + mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .accept(MediaType.APPLICATION_JSON) + .header("Accept-Language", "eng") // Three letter language code passed which is not valid + .param("issuer", issuer) + .param("credentialConfigurationId", credentialConfigurationId) + .header("Accept-Language", "invalid") + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errorCode").value("invalid_request")) + .andExpect(jsonPath("$.errorMessage").value("Validation error in request parameters")); + } + @Test public void shouldThrowInvalidRequestForWalletIdMismatch() throws Exception { when(httpSession.getAttribute("wallet_id")).thenReturn("differentWalletId"); @@ -143,7 +196,7 @@ public void shouldThrowInvalidRequestForMissingIssuerOrCredentialConfigurationId mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) .accept(MediaType.APPLICATION_JSON) .contentType(MediaType.APPLICATION_FORM_URLENCODED) - .param("locale", locale) + .header("Accept-Language", "fr") .sessionAttr("wallet_id", walletId) .sessionAttr("wallet_key", walletKey)) .andExpect(status().isBadRequest()) @@ -157,7 +210,7 @@ public void shouldThrowInvalidRequestForMissingCredentialConfigurationId() throw .accept(MediaType.APPLICATION_JSON) .contentType(MediaType.APPLICATION_FORM_URLENCODED) .param("issuer", issuer) - .param("locale", locale) + .header("Accept-Language", "fr") .sessionAttr("wallet_id", walletId) .sessionAttr("wallet_key", walletKey)) .andExpect(status().isBadRequest()) @@ -198,6 +251,7 @@ public void shouldThrowServiceUnavailableForExternalServiceFailure() throws Exce } // Tests for fetchAllCredentialsForGivenWallet + @Test public void shouldFetchAllCredentialsSuccessfully() throws Exception { List credentials = Collections.singletonList(verifiableCredentialResponseDTO); @@ -205,7 +259,7 @@ public void shouldFetchAllCredentialsSuccessfully() throws Exception { mockMvc.perform(get("/wallets/{walletId}/credentials", walletId) .accept(MediaType.APPLICATION_JSON) - .param("locale", locale) + .header("Accept-Language", locale) .sessionAttr("wallet_id", walletId) .sessionAttr("wallet_key", walletKey)) .andExpect(status().isOk()) @@ -215,7 +269,9 @@ public void shouldFetchAllCredentialsSuccessfully() throws Exception { @Test public void shouldThrowInvalidRequestForInvalidLocale() throws Exception { mockMvc.perform(get("/wallets/{walletId}/credentials", walletId) - .param("locale", "invalid") + .header("Accept-Language", "invalid") + .param("issuer", issuer) + .param("credentialConfigurationId", credentialConfigurationId) .sessionAttr("wallet_id", walletId) .sessionAttr("wallet_key", walletKey)) .andExpect(status().isBadRequest()); @@ -226,7 +282,7 @@ public void shouldThrowInvalidRequestForMissingWalletKeyInFetchAll() throws Exce when(httpSession.getAttribute("wallet_key")).thenReturn(null); mockMvc.perform(get("/wallets/{walletId}/credentials", walletId) - .param("locale", locale) + .header("Accept-Language", locale) .accept(MediaType.APPLICATION_JSON) .sessionAttr("wallet_id", walletId)) .andExpect(status().isBadRequest()) @@ -239,7 +295,7 @@ public void shouldThrowInvalidRequestForWalletIdMismatchInFetchAll() throws Exce when(httpSession.getAttribute("wallet_id")).thenReturn("differentWalletId"); mockMvc.perform(get("/wallets/{walletId}/credentials", walletId) - .param("locale", locale) + .header("Accept-Language", locale) .accept(MediaType.APPLICATION_JSON) .sessionAttr("wallet_id", "differentWalletId") .sessionAttr("wallet_key", walletKey)) @@ -255,7 +311,7 @@ public void shouldFetchVerifiableCredentialAsPdfSuccessfullyInline() throws Exce .thenReturn(walletCredentialResponseDTO); mockMvc.perform(get("/wallets/{walletId}/credentials/{credentialId}", walletId, credentialId) - .param("locale", locale) + .header("Accept-Language", locale) .param("action", "inline") .sessionAttr("wallet_id", walletId) .sessionAttr("wallet_key", walletKey)) @@ -270,7 +326,7 @@ public void shouldFetchVerifiableCredentialAsDownload() throws Exception { .thenReturn(walletCredentialResponseDTO); mockMvc.perform(get("/wallets/{walletId}/credentials/{credentialId}", walletId, credentialId) - .param("locale", locale) + .header("Accept-Language", locale) .param("action", "download") .sessionAttr("wallet_id", walletId) .sessionAttr("wallet_key", walletKey)) @@ -283,7 +339,7 @@ public void shouldFetchVerifiableCredentialAsDownload() throws Exception { public void shouldThrowInvalidRequestForInvalidAction() throws Exception { mockMvc.perform(get("/wallets/{walletId}/credentials/{credentialId}", walletId, credentialId) .accept(MediaType.APPLICATION_JSON) - .param("locale", locale) + .header("Accept-Language", locale) .param("action", "invalid") .sessionAttr("wallet_id", walletId) .sessionAttr("wallet_key", walletKey)) @@ -297,7 +353,7 @@ public void shouldThrowCredentialNotFoundException() throws Exception { mockMvc.perform(get("/wallets/{walletId}/credentials/{credentialId}", walletId, credentialId) .accept(MediaType.APPLICATION_JSON) - .param("locale", locale) + .header("Accept-Language", locale) .param("action", "inline") .sessionAttr("wallet_id", walletId) .sessionAttr("wallet_key", walletKey)) @@ -319,7 +375,7 @@ public void shouldThrowCredentialProcessingExceptionForDecryptionError() throws mockMvc.perform(get("/wallets/{walletId}/credentials/{credentialId}", walletId, credentialId) .accept(MediaType.APPLICATION_JSON) - .param("locale", locale) + .header("Accept-Language", locale) .param("action", "inline") .sessionAttr("wallet_id", walletId) .sessionAttr("wallet_key", walletKey)) @@ -335,7 +391,7 @@ public void shouldThrowCredentialProcessingExceptionForCorruptedData() throws Ex mockMvc.perform(get("/wallets/{walletId}/credentials/{credentialId}", walletId, credentialId) .accept(MediaType.APPLICATION_JSON) - .param("locale", locale) + .header("Accept-Language", locale) .param("action", "inline") .sessionAttr("wallet_id", walletId) .sessionAttr("wallet_key", walletKey)) From dd2b756f43485d2cb48c0ae60c0badbfc66e30cb Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Mon, 19 May 2025 16:58:34 +0530 Subject: [PATCH 605/860] [INJIWEB-1541] modify /wallets/{walletId}/credentials response param names 1. issuer_name -> issuer_display_name 2. credential_type -> credential_type_display_name Signed-off-by: KiruthikaJeyashankar --- .../dto/mimoto/VerifiableCredentialResponseDTO.java | 8 ++++---- .../mimoto/util/WalletCredentialResponseDTOFactory.java | 4 ++-- .../controller/WalletCredentialsControllerTest.java | 9 +++++---- src/test/java/io/mosip/mimoto/util/TestUtilities.java | 4 ++-- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/VerifiableCredentialResponseDTO.java b/src/main/java/io/mosip/mimoto/dto/mimoto/VerifiableCredentialResponseDTO.java index 823772d9a..19e7fc155 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/VerifiableCredentialResponseDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/VerifiableCredentialResponseDTO.java @@ -12,17 +12,17 @@ @NoArgsConstructor @AllArgsConstructor public class VerifiableCredentialResponseDTO { - @JsonProperty("issuer_name") + @JsonProperty("issuer_display_name") @Schema(description = "Name of the issuer") - private String issuerName; + private String issuerDisplayName; @JsonProperty("issuer_logo") @Schema(description = "logo of the issuer") private String issuerLogo; - @JsonProperty("credential_type") + @JsonProperty("credential_type_display_name") @Schema(description = "Name of the credential type") - private String credentialType; + private String credentialTypeDisplayName; @JsonProperty("credential_type_logo") @Schema(description = "logo of the credential type") diff --git a/src/main/java/io/mosip/mimoto/util/WalletCredentialResponseDTOFactory.java b/src/main/java/io/mosip/mimoto/util/WalletCredentialResponseDTOFactory.java index 2184f4233..2d3992c56 100644 --- a/src/main/java/io/mosip/mimoto/util/WalletCredentialResponseDTOFactory.java +++ b/src/main/java/io/mosip/mimoto/util/WalletCredentialResponseDTOFactory.java @@ -33,9 +33,9 @@ public static VerifiableCredentialResponseDTO buildCredentialResponseDTO(IssuerC } return VerifiableCredentialResponseDTO.builder() - .issuerName(issuerName) + .issuerDisplayName(issuerName) .issuerLogo(issuerLogo) - .credentialType(credentialType) + .credentialTypeDisplayName(credentialType) .credentialTypeLogo(credentialTypeLogo) .credentialId(credentialId) .build(); diff --git a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java index 5985b3607..06d08a797 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java @@ -74,9 +74,9 @@ public class WalletCredentialsControllerTest { public void setup() { MockitoAnnotations.openMocks(this); verifiableCredentialResponseDTO = VerifiableCredentialResponseDTO.builder() - .issuerName("issuerName123") + .issuerDisplayName("issuerName123") .issuerLogo("issuerLogo") - .credentialType("credentialType123") + .credentialTypeDisplayName("credentialType123") .credentialTypeLogo("credentialTypeLogo") .credentialId("credentialId123") .build(); @@ -106,7 +106,7 @@ public void shouldDownloadCredentialSuccessfully() throws Exception { .sessionAttr("wallet_id", walletId) .sessionAttr("wallet_key", walletKey)) .andExpect(status().isOk()) - .andExpect(jsonPath("$.issuer_name").value("issuerName123")) + .andExpect(jsonPath("$.issuer_display_name").value("issuerName123")) .andExpect(jsonPath("$.credential_id").value("credentialId123")); } @@ -263,7 +263,8 @@ public void shouldFetchAllCredentialsSuccessfully() throws Exception { .sessionAttr("wallet_id", walletId) .sessionAttr("wallet_key", walletKey)) .andExpect(status().isOk()) - .andExpect(jsonPath("$[0].issuer_name").value("issuerName123")); + .andExpect(jsonPath("$[0].issuer_display_name").value("issuerName123")) + .andExpect(jsonPath("$[0].credential_type_display_name").value("credentialType123")); } @Test diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index 894234428..a68df529b 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -432,9 +432,9 @@ public static VerifiableCredential getVerifiableCredential(String id, String wal public static VerifiableCredentialResponseDTO getVerifiableCredentialResponseDTO(String issuerName, String issuerLogo, String credentialType, String credentialTypeLogo, String credentialId) { return VerifiableCredentialResponseDTO.builder() - .issuerName(issuerName) + .issuerDisplayName(issuerName) .issuerLogo(issuerLogo) - .credentialType(credentialType) + .credentialTypeDisplayName(credentialType) .credentialTypeLogo(credentialTypeLogo) .credentialId(credentialId) .build(); From 0924f3cb24f994ddd248c394535e6759ba3e006d Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Mon, 19 May 2025 17:56:31 +0530 Subject: [PATCH 606/860] [INJIMOB-1541] make get specific vc api to accept only pdf header Signed-off-by: KiruthikaJeyashankar --- .../WalletCredentialsController.java | 13 +++++++++++- .../WalletCredentialsControllerTest.java | 21 ++++++++++++++++--- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index 0b7b69870..ff51f79e4 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -38,6 +38,7 @@ import java.io.IOException; import java.util.List; import java.util.Map; +import java.util.Objects; import static io.mosip.mimoto.exception.ErrorConstants.CREDENTIAL_DOWNLOAD_EXCEPTION; @@ -78,7 +79,7 @@ public WalletCredentialsController(WalletCredentialService walletCredentialServi @ApiResponse(responseCode = "200", description = "Verifiable Credential downloaded and stored successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = VerifiableCredentialResponseDTO.class))) @ApiResponse(responseCode = "400", description = "Bad request - Wallet key is null / blank or Wallet ID is null / blank / mismatch with session Wallet ID or required params are missing / invalid", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "Invalid Wallet Id", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Invalid Wallet ID. Session and request Wallet ID do not match\"}"), @ExampleObject(name = "Wallet key not found in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet key not found in session\"}"), @ExampleObject(name = "Missing required params", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Issuer and credentialConfigurationId are required\"}"), @ExampleObject(name = "Wallet ID is null or blank", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet ID cannot be null or blank\"}"), @ExampleObject(name = "Issuer ID is null or blank", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Issuer ID cannot be null or blank\"}")})) @ApiResponse(responseCode = "500", description = "Internal server error - error occurred while serializing the VC response, encrypting the credential, or storing it", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "Credential already exists", value = "{\"errorCode\": \"credential_download_error\", \"errorMessage\": \"Duplicate credential for issuer and type\"}"), @ExampleObject(name = "Issuer config error", value = "{\"errorCode\": \"credential_download_error\", \"errorMessage\": \"Unable to fetch issuer configuration\"}"), @ExampleObject(name = "Failed to generate VC request", value = "{\"errorCode\": \"credential_download_error\", \"errorMessage\": \"Unable to generate credential request\"}"), @ExampleObject(name = "Signature verification failed", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"), @ExampleObject(name = "Unexpected server error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}")})) - @ApiResponse(responseCode = "503", description = "Service unavailable - error while fetching issuer or auth server wellknown, downloading credential, or DB connection failure", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "API is not accessible", value = "{\"errorCode\": \"credential_download_error\", \"errorMessage\": \"Failed to download and store the credential\"}"), @ExampleObject(name = "Failed to download credential", value = "{\"errorCode\": \"server_unavailable\", \"errorMessage\": \"Unable to download credential from issuer\"}"), @ExampleObject(name = "Database connection failure", value = "{\"errorCode\": \"database_unavailable\", \"errorMessage\": \"Failed to connect to the database\"}")})) + @ApiResponse(responseCode = "503", description = "Service unavailable - error while fetching issuer or auth server well-known, downloading credential, or DB connection failure", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "API is not accessible", value = "{\"errorCode\": \"credential_download_error\", \"errorMessage\": \"Failed to download and store the credential\"}"), @ExampleObject(name = "Failed to download credential", value = "{\"errorCode\": \"server_unavailable\", \"errorMessage\": \"Unable to download credential from issuer\"}"), @ExampleObject(name = "Database connection failure", value = "{\"errorCode\": \"database_unavailable\", \"errorMessage\": \"Failed to connect to the database\"}")})) @PostMapping public ResponseEntity downloadCredential( @RequestHeader(value = "Accept-Language", required = false, defaultValue = "en") @Pattern(regexp = "^[a-z]{2}$", message = "Locale must be a 2-letter code") String locale, @@ -183,9 +184,19 @@ public ResponseEntity> fetchAllCredentials public ResponseEntity getVerifiableCredential( @PathVariable("walletId") @NotBlank(message = "Wallet ID cannot be blank") String walletId, @PathVariable("credentialId") @NotBlank(message = "Credential ID cannot be blank") String credentialId, + @RequestHeader(value = "Accept", required = true) String accept, @RequestParam(value = "locale", defaultValue = "en") @Pattern(regexp = "^[a-z]{2}$", message = "Locale must be a 2-letter code") String locale, @RequestParam(value = "action", defaultValue = "inline") @Pattern(regexp = "^(inline|download)$", message = "Action must be 'inline' or 'download'") String action, HttpSession httpSession) throws InvalidRequestException { + if(!Objects.equals(accept, "application/pdf")) { + System.out.println("Invalid Accept header"); + log.error("Invalid Accept header: {}", accept); + return Utilities.getErrorResponseEntityWithoutWrapper( + new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Accept header must be application/pdf"), + ErrorConstants.INVALID_REQUEST.getErrorCode(), + HttpStatus.BAD_REQUEST, + MediaType.APPLICATION_JSON); + } WalletUtil.validateWalletId(httpSession, walletId); String base64EncodedWalletKey = WalletUtil.getSessionWalletKey(httpSession); diff --git a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java index 06d08a797..080005175 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java @@ -312,6 +312,7 @@ public void shouldFetchVerifiableCredentialAsPdfSuccessfullyInline() throws Exce .thenReturn(walletCredentialResponseDTO); mockMvc.perform(get("/wallets/{walletId}/credentials/{credentialId}", walletId, credentialId) + .accept(MediaType.APPLICATION_PDF) .header("Accept-Language", locale) .param("action", "inline") .sessionAttr("wallet_id", walletId) @@ -327,6 +328,7 @@ public void shouldFetchVerifiableCredentialAsDownload() throws Exception { .thenReturn(walletCredentialResponseDTO); mockMvc.perform(get("/wallets/{walletId}/credentials/{credentialId}", walletId, credentialId) + .accept(MediaType.APPLICATION_PDF) .header("Accept-Language", locale) .param("action", "download") .sessionAttr("wallet_id", walletId) @@ -336,6 +338,19 @@ public void shouldFetchVerifiableCredentialAsDownload() throws Exception { .andExpect(content().contentType(MediaType.APPLICATION_PDF)); } + @Test + public void shouldThrowInvalidRequestForInvalidAcceptHeader() throws Exception { + mockMvc.perform(get("/wallets/{walletId}/credentials/{credentialId}", walletId, credentialId) + .header("Accept-Language", locale) + .param("Accept", "application/json") + .accept(MediaType.APPLICATION_JSON) + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errorCode").value("invalid_request")) + .andExpect(jsonPath("$.errorMessage").value("Accept header must be application/pdf")); + } + @Test public void shouldThrowInvalidRequestForInvalidAction() throws Exception { mockMvc.perform(get("/wallets/{walletId}/credentials/{credentialId}", walletId, credentialId) @@ -353,7 +368,7 @@ public void shouldThrowCredentialNotFoundException() throws Exception { .thenThrow(new CredentialNotFoundException(RESOURCE_NOT_FOUND.getErrorCode(), RESOURCE_NOT_FOUND.getErrorMessage())); mockMvc.perform(get("/wallets/{walletId}/credentials/{credentialId}", walletId, credentialId) - .accept(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_PDF) .header("Accept-Language", locale) .param("action", "inline") .sessionAttr("wallet_id", walletId) @@ -375,7 +390,7 @@ public void shouldThrowCredentialProcessingExceptionForDecryptionError() throws .thenThrow(new CredentialProcessingException(CREDENTIAL_FETCH_EXCEPTION.getErrorCode(), "Decryption failed")); mockMvc.perform(get("/wallets/{walletId}/credentials/{credentialId}", walletId, credentialId) - .accept(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_PDF) .header("Accept-Language", locale) .param("action", "inline") .sessionAttr("wallet_id", walletId) @@ -391,7 +406,7 @@ public void shouldThrowCredentialProcessingExceptionForCorruptedData() throws Ex .thenThrow(new CredentialProcessingException(CREDENTIAL_FETCH_EXCEPTION.getErrorCode(), "CORRUPTED_DATA")); mockMvc.perform(get("/wallets/{walletId}/credentials/{credentialId}", walletId, credentialId) - .accept(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_PDF) .header("Accept-Language", locale) .param("action", "inline") .sessionAttr("wallet_id", walletId) From d9184549d9bf2951896353634f720f911c23c9f9 Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Fri, 23 May 2025 10:38:28 +0530 Subject: [PATCH 607/860] [INJIWEB-1541] modify fetchVerifiableCredentialById api to accept locale via header Signed-off-by: KiruthikaJeyashankar --- .../controller/WalletCredentialsController.java | 4 ++-- .../WalletCredentialsControllerTest.java | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index ff51f79e4..75a3685a1 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -84,6 +84,7 @@ public WalletCredentialsController(WalletCredentialService walletCredentialServi public ResponseEntity downloadCredential( @RequestHeader(value = "Accept-Language", required = false, defaultValue = "en") @Pattern(regexp = "^[a-z]{2}$", message = "Locale must be a 2-letter code") String locale, @PathVariable("walletId") @NotBlank(message = "Wallet ID cannot be blank") String walletId, + // TODO: Extract params map to DTO to handle validation internally @RequestParam Map params, HttpSession httpSession) throws InvalidRequestException { @@ -185,11 +186,10 @@ public ResponseEntity getVerifiableCredential( @PathVariable("walletId") @NotBlank(message = "Wallet ID cannot be blank") String walletId, @PathVariable("credentialId") @NotBlank(message = "Credential ID cannot be blank") String credentialId, @RequestHeader(value = "Accept", required = true) String accept, - @RequestParam(value = "locale", defaultValue = "en") @Pattern(regexp = "^[a-z]{2}$", message = "Locale must be a 2-letter code") String locale, + @RequestHeader(value = "Accept-Language", defaultValue = "en") @Pattern(regexp = "^[a-z]{2}$", message = "Locale must be a 2-letter code") String locale, @RequestParam(value = "action", defaultValue = "inline") @Pattern(regexp = "^(inline|download)$", message = "Action must be 'inline' or 'download'") String action, HttpSession httpSession) throws InvalidRequestException { if(!Objects.equals(accept, "application/pdf")) { - System.out.println("Invalid Accept header"); log.error("Invalid Accept header: {}", accept); return Utilities.getErrorResponseEntityWithoutWrapper( new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Accept header must be application/pdf"), diff --git a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java index 080005175..d8f023a6b 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java @@ -110,6 +110,21 @@ public void shouldDownloadCredentialSuccessfully() throws Exception { .andExpect(jsonPath("$.credential_id").value("credentialId123")); } + @Test + public void shouldReturnErrorResponseWhenSessionDoesNotHaveWalletIdAndKey() throws Exception { + mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .accept(MediaType.APPLICATION_JSON) + .header("Accept-Language", locale) + .param("issuer", issuer) + .param("credentialConfigurationId", credentialConfigurationId) + .param("vcStorageExpiryLimitInTimes", vcStorageExpiryLimit) + ) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errorCode").value("wallet_locked")) + .andExpect(jsonPath("$.errorMessage").value("wallet_locked --> Wallet is locked")); + } + @Test public void shouldCallServiceWithCorrectParameters() throws Exception { mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) From bb46fd2d82c338bf471676cb112afdff49fbf4e8 Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Fri, 23 May 2025 10:47:04 +0530 Subject: [PATCH 608/860] [INJIWEB-1541] return walletName in response in create and get wallets api Signed-off-by: KiruthikaJeyashankar --- .../mimoto/controller/WalletsController.java | 68 +++++++++++++------ .../mosip/mimoto/dbentity/WalletMetadata.java | 1 - .../mosip/mimoto/dto/WalletResponseDto.java | 3 +- .../mimoto/repository/WalletRepository.java | 4 +- .../mosip/mimoto/service/WalletService.java | 4 +- .../service/impl/WalletServiceImpl.java | 20 +++--- .../java/io/mosip/mimoto/util/WalletUtil.java | 12 +++- .../controller/WalletsControllerTest.java | 13 ++-- .../mimoto/service/WalletServiceTest.java | 47 +++++++++++-- .../io/mosip/mimoto/util/WalletUtilTest.java | 23 +++++-- 10 files changed, 137 insertions(+), 58 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/WalletsController.java b/src/main/java/io/mosip/mimoto/controller/WalletsController.java index 9a54a9341..e6daa3ae5 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletsController.java @@ -6,9 +6,10 @@ import io.mosip.mimoto.dto.CreateWalletRequestDto; import io.mosip.mimoto.dto.UnlockWalletRequestDto; import io.mosip.mimoto.dto.WalletResponseDto; -import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.exception.InvalidRequestException; import io.mosip.mimoto.service.WalletService; +import io.mosip.mimoto.util.Utilities; +import io.mosip.mimoto.util.WalletUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.enums.ParameterIn; @@ -25,6 +26,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -56,8 +58,21 @@ public WalletsController(WalletService walletService) { * @throws InvalidRequestException If the request is invalid. * Example: Wallet PIN and Confirm Wallet PIN received in request don't match */ - @Operation(summary = "Create a new wallet", description = "This API is secured using session-based authentication. The session ID is extracted from the Cookie header and used to retrieve session details from Redis for authentication. The user ID is obtained from the session and used with the provided wallet name and PIN to create a new wallet in the database. If successful, a unique identifier for the wallet is returned; otherwise, an appropriate error response is provided.", operationId = "createWallet", security = @SecurityRequirement(name = "SessionAuth"), requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody(required = true, description = "Details required to create a wallet", content = @Content(mediaType = "application/json", schema = @Schema(implementation = CreateWalletRequestDto.class), examples = @ExampleObject(name = "Valid Request", value = "{ \"walletPin\": \"1234\", \"confirmWalletPin\": \"1234\", \"walletName\": \"MyWallet\" }")))) - @ApiResponse(responseCode = "200", description = "Wallet created successfully", content = @Content(mediaType = "application/json", schema = @Schema(type = "string", description = "Unique identifier of the Wallet stored in the database"), examples = @ExampleObject(name = "Success response", value = "d94a2e70-1234-4f2f-9eae-98765"))) + @Operation( + summary = "Create a new wallet", + description = "This API is secured using session-based authentication. The session ID is extracted from the Cookie header and used to retrieve session details from Redis for authentication. The user ID is obtained from the session and used with the provided wallet name and PIN to create a new wallet in the database. If successful, a unique identifier for the wallet is returned; otherwise, an appropriate error response is provided.", + operationId = "createWallet", + security = @SecurityRequirement(name = "SessionAuth"), + requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody( + required = true, + description = "Wallet creation request containing the wallet name and PIN", + content = @Content( + mediaType = "application/json", + schema = @Schema(implementation = CreateWalletRequestDto.class), + examples = @ExampleObject(value = "{\"walletName\": \"My Personal Wallet\", \"walletPin\": \"123456\"}")) + ) + ) + @ApiResponse(responseCode = "200", description = "Wallet created successfully", content = @Content(mediaType = "application/json", schema = @Schema(type = "string", description = "Unique identifier of the Wallet stored in the database"), examples = @ExampleObject(name = "Success response", value = "{\"walletId\":\"d94a2e70-1234-4f2f-9eae-98765\", \"walletName\":\"My Wallet\"}"))) @ApiResponse(responseCode = "400", description = "Invalid wallet creation request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = { @ExampleObject(name = "User ID is not present in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"User ID not found in session\"}"), @ExampleObject(name = "Invalid User ID", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"User ID cannot be null or empty\"}"), @@ -67,17 +82,14 @@ public WalletsController(WalletService walletService) { @ApiResponse(responseCode = "500", description = "Internal server error while creating wallet", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"))) @ApiResponse(responseCode = "503", description = "Service unavailable", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Database connection failure", value = "{\"errorCode\": \"database_unavailable\", \"errorMessage\": \"Failed to connect to the database\"}"))) @PostMapping - public ResponseEntity createWallet( + public ResponseEntity createWallet( @RequestBody @Valid CreateWalletRequestDto wallet, HttpSession httpSession) throws InvalidRequestException { String userId = (String) httpSession.getAttribute(SessionKeys.USER_ID); - if (userId == null) { - log.error("User ID not found in session"); - throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "User ID not found in session"); - } + WalletUtil.validateUserId(userId); log.info("Creating wallet for user: {}, name: {}", userId, wallet.getWalletName()); - String walletId = walletService.createWallet(userId, wallet.getWalletName(), wallet.getWalletPin(), wallet.getConfirmWalletPin()); - return ResponseEntity.status(HttpStatus.OK).body(walletId); + WalletResponseDto walletResponseDto = walletService.createWallet(userId, wallet.getWalletName(), wallet.getWalletPin(), wallet.getConfirmWalletPin()); + return ResponseEntity.status(HttpStatus.OK).body(walletResponseDto); } /** @@ -87,7 +99,12 @@ public ResponseEntity createWallet( * @return List of wallet details. * @throws InvalidRequestException If the request fails. */ - @Operation(summary = "Retrieve all wallets for the user", description = "This API is secured using session-based authentication. The session ID is extracted from the Cookie header to authenticate the user. The user's ID is obtained from the session stored in Redis, and all wallets associated with the user are fetched from the database. If successful, the list of wallets is returned; otherwise, an appropriate error response is returned.", operationId = "getWallets", security = @SecurityRequirement(name = "SessionAuth")) + @Operation( + summary = "Retrieve all wallets for the user", + description = "This API is secured using session-based authentication. The session ID is extracted from the Cookie header to authenticate the user. The user's ID is obtained from the session stored in Redis, and all wallets associated with the user are fetched from the database. If successful, the list of wallets is returned; otherwise, an appropriate error response is returned.", + operationId = "getWallets", + security = @SecurityRequirement(name = "SessionAuth") + ) @ApiResponse(responseCode = "200", description = "List of wallets retrieved successfully", content = @Content(mediaType = "application/json", array = @ArraySchema(schema = @Schema(implementation = WalletResponseDto.class)), examples = @ExampleObject(name = "Success response", value = "[{\"walletId\": \"123e4567-e89b-12d3-a456-426614174000\"}, {\"walletId\": \"223e4567-e89b-12d3-a456-426614174001\"}]"))) @ApiResponse(responseCode = "400", description = "Invalid Wallets fetching request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "User ID is not present in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"User ID not found in session\"}"))) @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"))) @@ -95,10 +112,7 @@ public ResponseEntity createWallet( @GetMapping public ResponseEntity> getWallets(HttpSession httpSession) throws InvalidRequestException { String userId = (String) httpSession.getAttribute(SessionKeys.USER_ID); - if (userId == null) { - log.error("User ID not found in session"); - throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "User ID not found in session"); - } + WalletUtil.validateUserId(userId); log.info("Retrieving wallets for user: {}", userId); List response = walletService.getWallets(userId); return ResponseEntity.status(HttpStatus.OK).body(response); @@ -113,7 +127,14 @@ public ResponseEntity> getWallets(HttpSession httpSessio * @return The wallet details if unlocked successfully. * @throws InvalidRequestException If the wallet or PIN is invalid. */ - @Operation(summary = "Unlock an existing Wallet", description = "This API is secured using session-based authentication. The session ID is extracted from the Cookie header to authenticate the user. The user's ID is obtained from the session, and the provided wallet ID and PIN are used to fetch the wallet key, which is stored in the session. If successful, the wallet ID is returned; otherwise, an appropriate error response is returned.", operationId = "unlockWallet", security = @SecurityRequirement(name = "SessionAuth"), parameters = {@Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet to be unlocked", schema = @Schema(type = "string"))}, requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody(required = true, content = @Content(mediaType = "application/json", schema = @Schema(implementation = UnlockWalletRequestDto.class), examples = @ExampleObject(name = "Unlock Wallet Request", value = "{\"walletPin\": \"1234\"}")))) + @Operation( + summary = "Unlock an existing Wallet", + description = "This API is secured using session-based authentication. The session ID is extracted from the Cookie header to authenticate the user. The user's ID is obtained from the session, and the provided wallet ID and PIN are used to fetch the wallet key, which is stored in the session. If successful, the wallet ID is returned; otherwise, an appropriate error response is returned.", + operationId = "unlockWallet", + security = @SecurityRequirement(name = "SessionAuth"), + parameters = {@Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet to be unlocked", schema = @Schema(type = "string"))}, + requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody(required = true, content = @Content(mediaType = "application/json", schema = @Schema(implementation = UnlockWalletRequestDto.class))) + ) @ApiResponse(responseCode = "200", description = "Wallet unlocked successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = WalletResponseDto.class), examples = @ExampleObject(name = "Success response", value = "{\"walletId\": \"123e4567-e89b-12d3-a456-426614174000\"}"))) @ApiResponse(responseCode = "400", description = "Invalid Wallets fetching request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "User ID is not present in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"User ID not found in session\"}"), @ExampleObject(name = "Wallet not found", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet not found\"}"), @ExampleObject(name = "Invalid User ID", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"User ID cannot be null or empty\"}"), @ExampleObject(name = "Invalid Wallet Pin", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"PIN must be numeric with 6 digits\"}")})) @ApiResponse(responseCode = "500", description = "Internal server error - any error occurred while decrypting the Wallet key with Wallet PIN or when fetching Wallet details from the database", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"))) @@ -124,10 +145,7 @@ public ResponseEntity unlockWallet( @RequestBody @Valid UnlockWalletRequestDto wallet, HttpSession httpSession) throws InvalidRequestException { String userId = (String) httpSession.getAttribute(SessionKeys.USER_ID); - if (userId == null) { - log.error("User ID not found in session"); - throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "User ID not found in session"); - } + WalletUtil.validateUserId(userId); log.info("Unlocking wallet: {} for user: {}", walletId, userId); String walletKey = walletService.getWalletKey(userId, walletId, wallet.getWalletPin()); httpSession.setAttribute(SessionKeys.WALLET_KEY, walletKey); @@ -139,11 +157,17 @@ public ResponseEntity unlockWallet( /** * Deletes a wallet by its ID * - * @param walletId The ID of the wallet to delete + * @param walletId The ID of the wallet to delete * @param httpSession The HTTP session containing user details * @return ResponseEntity with HTTP status 200 if successful, 401 if unauthorized */ - @Operation(summary = SwaggerLiteralConstants.WALLETS_DELETE_SUMMARY, description = SwaggerLiteralConstants.WALLETS_DELETE_DESCRIPTION, operationId = "deleteWallet", security = @SecurityRequirement(name = "SessionAuth"), parameters = {@Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet to be deleted", schema = @Schema(type = "string"))}) + @Operation( + summary = SwaggerLiteralConstants.WALLETS_DELETE_SUMMARY, + description = SwaggerLiteralConstants.WALLETS_DELETE_DESCRIPTION, + operationId = "deleteWallet", + security = @SecurityRequirement(name = "SessionAuth"), + parameters = {@Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet to be deleted", schema = @Schema(type = "string"))} + ) @ApiResponse(responseCode = "200", description = "Wallet successfully deleted") @ApiResponse(responseCode = "401", description = "Unauthorized access", content = @Content(mediaType = "application/json")) @ApiResponse(responseCode = "404", description = "Wallet not found", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Wallet not found", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet not found\"}"))) diff --git a/src/main/java/io/mosip/mimoto/dbentity/WalletMetadata.java b/src/main/java/io/mosip/mimoto/dbentity/WalletMetadata.java index 7583ae93e..b4434fe20 100644 --- a/src/main/java/io/mosip/mimoto/dbentity/WalletMetadata.java +++ b/src/main/java/io/mosip/mimoto/dbentity/WalletMetadata.java @@ -1,6 +1,5 @@ package io.mosip.mimoto.dbentity; -import jakarta.persistence.Column; import lombok.Data; @Data public class WalletMetadata { diff --git a/src/main/java/io/mosip/mimoto/dto/WalletResponseDto.java b/src/main/java/io/mosip/mimoto/dto/WalletResponseDto.java index 895464bab..ca3491eae 100644 --- a/src/main/java/io/mosip/mimoto/dto/WalletResponseDto.java +++ b/src/main/java/io/mosip/mimoto/dto/WalletResponseDto.java @@ -11,5 +11,6 @@ public class WalletResponseDto { @Schema(description = "Unique identifier of the Wallet") String walletId; - + @Schema(description = "Wallet name provided by user") + String walletName; } diff --git a/src/main/java/io/mosip/mimoto/repository/WalletRepository.java b/src/main/java/io/mosip/mimoto/repository/WalletRepository.java index 7aaae5be3..1ee204f60 100644 --- a/src/main/java/io/mosip/mimoto/repository/WalletRepository.java +++ b/src/main/java/io/mosip/mimoto/repository/WalletRepository.java @@ -9,8 +9,8 @@ import java.util.Optional; public interface WalletRepository extends JpaRepository { - @Query("SELECT w.id FROM Wallet w WHERE w.userId = :userId ORDER BY w.createdAt ASC" ) - List findWalletIdByUserId(@Param("userId") String userId); + @Query("SELECT w FROM Wallet w WHERE w.userId = :userId ORDER BY w.createdAt ASC") + List findWalletByUserId(@Param("userId") String userId); Optional findByUserIdAndId(String userId, String walletId); } diff --git a/src/main/java/io/mosip/mimoto/service/WalletService.java b/src/main/java/io/mosip/mimoto/service/WalletService.java index 326843172..f912b38f0 100644 --- a/src/main/java/io/mosip/mimoto/service/WalletService.java +++ b/src/main/java/io/mosip/mimoto/service/WalletService.java @@ -3,9 +3,7 @@ import io.mosip.mimoto.dto.WalletResponseDto; import io.mosip.mimoto.exception.InvalidRequestException; -import java.security.NoSuchAlgorithmException; import java.util.List; -import java.util.UUID; /** * Service interface for managing wallets. @@ -22,7 +20,7 @@ public interface WalletService { * @throws InvalidRequestException If the request is invalid. * Example: Wallet PIN and Confirm Wallet PIN received in request don't match */ - String createWallet(String userId, String name, String pin, String confirmPin) throws InvalidRequestException; + WalletResponseDto createWallet(String userId, String name, String pin, String confirmPin) throws InvalidRequestException; /** * Retrieves the decrypted wallet key. diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java index 22633b84d..063c34efe 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java @@ -13,7 +13,6 @@ import org.springframework.stereotype.Service; import java.util.List; -import java.util.stream.Collectors; /** * Implementation of {@link WalletService} for managing wallets. @@ -34,7 +33,7 @@ public WalletServiceImpl(WalletRepository repository, WalletUtil walletUtil, Wal } @Override - public String createWallet(String userId, String name, String pin, String confirmPin) throws InvalidRequestException { + public WalletResponseDto createWallet(String userId, String name, String pin, String confirmPin) throws InvalidRequestException { log.info("Creating wallet for user: {}, name: {}", userId, name); validator.validateUserId(userId); @@ -48,8 +47,7 @@ public String createWallet(String userId, String name, String pin, String confir String walletId = walletUtil.createWallet(userId, name, pin); log.debug("Wallet created successfully: {}", walletId); - return walletId; - + return new WalletResponseDto(walletId, name); } @Override @@ -72,15 +70,17 @@ public String getWalletKey(String userId, String walletId, String pin) throws In public List getWallets(String userId) { log.info("Retrieving wallets for user: {}", userId); - List walletIds = repository.findWalletIdByUserId(userId); - return walletIds.stream() - .map(id -> WalletResponseDto.builder().walletId(id).build()) - .collect(Collectors.toList()); - + List wallets = repository.findWalletByUserId(userId); + return wallets.stream() + .map(wallet -> WalletResponseDto.builder() + .walletId(wallet.getId()) + .walletName(wallet.getWalletMetadata().getName()) + .build()) + .toList(); } @Override - public void deleteWallet(String userId, String walletId) throws InvalidRequestException{ + public void deleteWallet(String userId, String walletId) throws InvalidRequestException { validator.validateUserId(userId); Wallet existingWallet = repository.findByUserIdAndId(userId, walletId) .orElseThrow(() -> { diff --git a/src/main/java/io/mosip/mimoto/util/WalletUtil.java b/src/main/java/io/mosip/mimoto/util/WalletUtil.java index dd548acc9..1b4f4b088 100644 --- a/src/main/java/io/mosip/mimoto/util/WalletUtil.java +++ b/src/main/java/io/mosip/mimoto/util/WalletUtil.java @@ -4,11 +4,11 @@ import io.mosip.mimoto.dbentity.ProofSigningKey; import io.mosip.mimoto.dbentity.Wallet; import io.mosip.mimoto.dbentity.WalletMetadata; -import io.mosip.mimoto.exception.DecryptionException; import io.mosip.mimoto.exception.InvalidRequestException; import io.mosip.mimoto.model.SigningAlgorithm; import io.mosip.mimoto.repository.WalletRepository; import jakarta.servlet.http.HttpSession; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -20,6 +20,7 @@ import static io.mosip.mimoto.exception.ErrorConstants.INVALID_REQUEST; @Component +@Slf4j public class WalletUtil { @Autowired @@ -28,6 +29,13 @@ public class WalletUtil { @Autowired private EncryptionDecryptionUtil encryptionDecryptionUtil; + public static void validateUserId(String userId) { + if (userId == null) { + log.error("User ID not found in session."); + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "User ID not found in session"); + } + } + public String decryptWalletKey(String encryptedWalletKey, String pin) { return encryptionDecryptionUtil.decryptWithPin(encryptedWalletKey, pin); } @@ -85,7 +93,7 @@ public static String getSessionWalletKey(HttpSession session) { public static void validateWalletId(HttpSession session, String walletIdFromRequest) { Object sessionWalletId = session.getAttribute(SessionKeys.WALLET_ID); - if (sessionWalletId == null) throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Wallet ID is missing in session"); + if (sessionWalletId == null) throw new InvalidRequestException("wallet_locked", "Wallet is locked"); String walletIdInSession = sessionWalletId.toString(); if (!walletIdInSession.equals(walletIdFromRequest)) { diff --git a/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java index 9ada5f49c..4148d4ab5 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java @@ -28,6 +28,7 @@ import java.util.List; import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.when; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; @@ -73,7 +74,7 @@ public void setUp() { @Test public void shouldReturnWalletIdForSuccessfulWalletCreation() throws Exception { - when(walletService.createWallet(userId, walletName, walletPin, confirmWalletPin)).thenReturn(walletId); + when(walletService.createWallet(userId, walletName, walletPin, confirmWalletPin)).thenReturn(new WalletResponseDto(walletId, walletName)); mockMvc.perform(post("/wallets") .contentType(MediaType.APPLICATION_JSON) @@ -83,7 +84,7 @@ public void shouldReturnWalletIdForSuccessfulWalletCreation() throws Exception { .with(SecurityMockMvcRequestPostProcessors.user(userId).roles("USER")) .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isOk()) - .andExpect(content().string(walletId)); + .andExpect(content().json("{\"walletId\": \"walletId123\",\"walletName\": \"My Wallet\"}", true)); } @Test @@ -123,8 +124,8 @@ public void shouldThrowExceptionIfReceivedPINAndConfirmPINDoNotMatch() throws Ex @Test public void shouldReturnListOfWalletIDsForValidUserId() throws Exception { - List wallets = List.of(new WalletResponseDto("wallet1"), - new WalletResponseDto("wallet2")); + List wallets = List.of(new WalletResponseDto("wallet1", "Wallet1"), + new WalletResponseDto("wallet2", "Wallet2")); when(walletService.getWallets(userId)).thenReturn(wallets); mockMvc.perform(get("/wallets") @@ -133,7 +134,7 @@ public void shouldReturnListOfWalletIDsForValidUserId() throws Exception { .with(SecurityMockMvcRequestPostProcessors.user(userId).roles("USER")) .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isOk()) - .andExpect(content().string("[{\"walletId\":\"wallet1\"},{\"walletId\":\"wallet2\"}]")); + .andExpect(content().string("[{\"walletId\":\"wallet1\",\"walletName\":\"Wallet1\"},{\"walletId\":\"wallet2\",\"walletName\":\"Wallet2\"}]")); } @Test @@ -164,7 +165,7 @@ public void shouldReturnTheWalletIDAndStoreWalletKeyInSessionForValidUserAndWall .with(SecurityMockMvcRequestPostProcessors.user(userId).roles("USER")) .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isOk()) - .andExpect(content().string("{\"walletId\":\"walletId123\"}")) + .andExpect(content().string("{\"walletId\":\"walletId123\",\"walletName\":null}")) .andReturn(); String actualWalletKey = result.getRequest().getSession().getAttribute("wallet_key").toString(); diff --git a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java index dd3cff6bf..29c6bc218 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java @@ -1,6 +1,7 @@ package io.mosip.mimoto.service; import io.mosip.mimoto.dbentity.Wallet; +import io.mosip.mimoto.dbentity.WalletMetadata; import io.mosip.mimoto.dto.WalletResponseDto; import io.mosip.mimoto.exception.InvalidRequestException; import io.mosip.mimoto.repository.WalletRepository; @@ -15,6 +16,7 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; +import java.time.Instant; import java.util.Arrays; import java.util.List; import java.util.Optional; @@ -63,15 +65,32 @@ public void shouldCreateWalletSuccessfully() throws Exception { String newWalletId = UUID.randomUUID().toString(); when(walletHelper.createWallet(userId, name, walletPin)).thenReturn(newWalletId); - String result = walletService.createWallet(userId, name, walletPin, walletConfirmPin); + WalletResponseDto result = walletService.createWallet(userId, name, walletPin, walletConfirmPin); - assertEquals(newWalletId, result); + assertEquals(newWalletId, result.getWalletId()); + assertEquals("default", result.getWalletName()); verify(walletValidator).validateUserId(userId); verify(walletValidator).validateWalletName(name); verify(walletValidator).validateWalletPin(walletPin); verify(walletHelper).createWallet(userId, name, walletPin); } + @Test + public void shouldCreateWalletSuccessfullyIfWalletNameIsNotProvided() throws Exception { + String newWalletId = UUID.randomUUID().toString(); + when(walletHelper.createWallet(userId, null, walletPin)).thenReturn(newWalletId); + + WalletResponseDto result = walletService.createWallet(userId, null, walletPin, walletConfirmPin); + + assertEquals(newWalletId, result.getWalletId()); + assertNull(result.getWalletName()); + verify(walletValidator).validateUserId(userId); + verify(walletValidator).validateWalletName(null); + verify(walletValidator).validateWalletPin(walletPin); + + verify(walletHelper).createWallet(userId, null, walletPin); + } + @Test public void shouldDecryptWalletKeySuccessfully() throws Exception { when(walletRepository.findByUserIdAndId(userId, walletId)).thenReturn(Optional.of(wallet)); @@ -99,26 +118,40 @@ public void shouldThrowInvalidRequestExceptionIfWalletNotFoundForGivenUserIdAndW @Test public void shouldReturnListOfWalletResponseDtosForGivenUserId() { - List walletIds = Arrays.asList(UUID.randomUUID().toString(), UUID.randomUUID().toString()); - when(walletRepository.findWalletIdByUserId(userId)).thenReturn(walletIds); + String walletId1 = UUID.randomUUID().toString(); + String walletId2 = UUID.randomUUID().toString(); + WalletMetadata walletMetadata = new WalletMetadata(); + walletMetadata.setEncryptionAlgo("AES"); + walletMetadata.setEncryptionType("symmetric"); + walletMetadata.setName("Test Wallet"); + List walletIds = Arrays.asList(walletId1, walletId2); + List walletNames = Arrays.asList(null, "Test Wallet"); + Wallet wallet1 = new Wallet( + walletId1, "mock-user-id", "mock-encrypted-key", new WalletMetadata(), List.of(), Instant.now(), Instant.now() + ); + Wallet wallet2 = new Wallet( + walletId2, "mock-user-id-2", "mock-encrypted-key", walletMetadata, List.of(), Instant.now(), Instant.now() + ); + when(walletRepository.findWalletByUserId(userId)).thenReturn(List.of(wallet1, wallet2)); List result = walletService.getWallets(userId); assertEquals(walletIds.size(), result.size()); for (int i = 0; i < walletIds.size(); i++) { assertEquals(walletIds.get(i), result.get(i).getWalletId()); + assertEquals(walletNames.get(i), result.get(i).getWalletName()); } - verify(walletRepository).findWalletIdByUserId(userId); + verify(walletRepository).findWalletByUserId(userId); } @Test public void shouldReturnEmptyListIfNoWalletsFoundForGivenUserId() { - when(walletRepository.findWalletIdByUserId(userId)).thenReturn(List.of()); + when(walletRepository.findWalletByUserId(userId)).thenReturn(List.of()); List result = walletService.getWallets(userId); assertTrue(result.isEmpty()); - verify(walletRepository).findWalletIdByUserId(userId); + verify(walletRepository).findWalletByUserId(userId); } @Test diff --git a/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java b/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java index f8c85c0f6..a33c14fdc 100644 --- a/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java +++ b/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java @@ -1,8 +1,11 @@ package io.mosip.mimoto.util; +import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.dbentity.Wallet; import io.mosip.mimoto.exception.DecryptionException; +import io.mosip.mimoto.exception.InvalidRequestException; import io.mosip.mimoto.repository.WalletRepository; +import jakarta.servlet.http.HttpSession; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -13,15 +16,13 @@ import org.mockito.junit.jupiter.MockitoExtension; import javax.crypto.SecretKey; -import java.util.ArrayList; import java.util.Base64; -import java.util.List; import java.util.UUID; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; +import static org.mockito.Mockito.*; +import static org.mockito.Mockito.mock; @ExtendWith(MockitoExtension.class) @Slf4j @@ -109,4 +110,18 @@ void shouldVerifyWalletObjectOnCreateNewWallet() throws Exception { assertNotNull(savedWallet.getProofSigningKeys()); assertEquals(4, savedWallet.getProofSigningKeys().size()); } + + // Tests for validateUserId + @Test + void testValidUserId() { + assertDoesNotThrow(() -> WalletUtil.validateUserId("validUserId")); + } + + @Test + void testNullUserId() { + InvalidRequestException ex = assertThrows(InvalidRequestException.class, () -> WalletUtil.validateUserId(null)); + + assertEquals("invalid_request", ex.getErrorCode()); + assertEquals("invalid_request --> User ID not found in session", ex.getMessage()); + } } \ No newline at end of file From b1de23c368e53d77b55e88d11940c0bb7e6936e1 Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Fri, 23 May 2025 11:18:37 +0530 Subject: [PATCH 609/860] [INJIWEB-1541] update wallet credential api swagger doc Signed-off-by: KiruthikaJeyashankar --- .../mimoto/controller/WalletCredentialsController.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index 75a3685a1..0db57176f 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -75,7 +75,7 @@ public WalletCredentialsController(WalletCredentialService walletCredentialServi @Parameter(name = "issuer", in = ParameterIn.QUERY, required = true, description = "The identifier of the issuer", schema = @Schema(type = "string")), @Parameter(name = "credentialConfigurationId", in = ParameterIn.QUERY, required = true, description = "The type of the credential", schema = @Schema(type = "string")), @Parameter(name = "vcStorageExpiryLimitInTimes", in = ParameterIn.QUERY, required = false, description = "The expiration limit for the Verifiable Credential storage", schema = @Schema(type = "string", defaultValue = "-1")), - @Parameter(name = "locale", in = ParameterIn.HEADER, required = false, description = "The locale for the Verifiable Credential. It follows 2 letter language code", schema = @Schema(type = "string", defaultValue = "en"))}) + @Parameter(name = "Accept-Language", in = ParameterIn.HEADER, required = false, description = "The locale for the Verifiable Credential. It follows 2 letter language code", schema = @Schema(type = "string", defaultValue = "en"))}) @ApiResponse(responseCode = "200", description = "Verifiable Credential downloaded and stored successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = VerifiableCredentialResponseDTO.class))) @ApiResponse(responseCode = "400", description = "Bad request - Wallet key is null / blank or Wallet ID is null / blank / mismatch with session Wallet ID or required params are missing / invalid", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "Invalid Wallet Id", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Invalid Wallet ID. Session and request Wallet ID do not match\"}"), @ExampleObject(name = "Wallet key not found in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet key not found in session\"}"), @ExampleObject(name = "Missing required params", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Issuer and credentialConfigurationId are required\"}"), @ExampleObject(name = "Wallet ID is null or blank", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet ID cannot be null or blank\"}"), @ExampleObject(name = "Issuer ID is null or blank", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Issuer ID cannot be null or blank\"}")})) @ApiResponse(responseCode = "500", description = "Internal server error - error occurred while serializing the VC response, encrypting the credential, or storing it", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "Credential already exists", value = "{\"errorCode\": \"credential_download_error\", \"errorMessage\": \"Duplicate credential for issuer and type\"}"), @ExampleObject(name = "Issuer config error", value = "{\"errorCode\": \"credential_download_error\", \"errorMessage\": \"Unable to fetch issuer configuration\"}"), @ExampleObject(name = "Failed to generate VC request", value = "{\"errorCode\": \"credential_download_error\", \"errorMessage\": \"Unable to generate credential request\"}"), @ExampleObject(name = "Signature verification failed", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"), @ExampleObject(name = "Unexpected server error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}")})) @@ -138,7 +138,7 @@ public ResponseEntity downloadCredential( */ @Operation(summary = "Fetch all credentials for the given wallet", description = "This API is secured using session-based authentication. When a request is made, the session ID is extracted from the Cookie header and used to fetch session details from Redis for authentication. It then retrieves the wallet key from the session and uses it to decrypt all stored Verifiable Credentials for the given wallet. If successful, it returns a list of credentials otherwise an appropriate error is returned.", operationId = "fetchAllCredentialsForWallet", security = @SecurityRequirement(name = "SessionAuth"), parameters = { @Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the user's wallet from where the credential will be fetched", schema = @Schema(type = "string")), - @Parameter(name = "locale", in = ParameterIn.HEADER, required = false, description = "Locale is used to determine the language in which credentials should be rendered. It follows 2 letter language code", schema = @Schema(type = "string"))}) + @Parameter(name = "Accept-Language", in = ParameterIn.HEADER, required = false, description = "Locale is used to determine the language in which credentials should be rendered. It follows 2 letter language code", schema = @Schema(type = "string"))}) @ApiResponse(responseCode = "200", description = "Credentials retrieved successfully", content = @Content(mediaType = "application/json", array = @ArraySchema(schema = @Schema(implementation = VerifiableCredentialResponseDTO.class)), examples = @ExampleObject(value = SwaggerExampleConstants.FETCH_ALL_CREDENTIALS_OF_WALLET_SUCCESS))) @ApiResponse(responseCode = "400", description = "Bad request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "Invalid Wallet Id", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Invalid Wallet ID. Session and request Wallet ID do not match\"}"), @ExampleObject(name = "Wallet key not found in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet key not found in session\"}")})) @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"))) @@ -174,7 +174,7 @@ public ResponseEntity> fetchAllCredentials @Operation(summary = "Fetch a specific Verifiable Credential", description = "This API is protected using session-based authentication. When a request is received, the session ID is extracted from the Cookie header and used to fetch session data from Redis for user authentication. Upon successful authentication, the wallet key is retrieved from the session and used to decrypt the credential data obtained from the database.\n\nThe API retrieves a specific Verifiable Credential based on the provided wallet ID and credential ID. Depending on the action query parameter (inline or download) received in the request, the Content-Disposition header in the response is adjusted to either display the credential in the browser or prompt a file download. On success, the API returns the credential as a PDF byte stream. In case of any errors, an appropriate error response is returned.", operationId = "fetchVerifiableCredentialById", security = @SecurityRequirement(name = "SessionAuth"), parameters = { @Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the user's wallet", schema = @Schema(type = "string")), @Parameter(name = "credentialId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the Verifiable Credential to be retrieved", schema = @Schema(type = "string")), - @Parameter(name = "locale", in = ParameterIn.QUERY, required = true, description = "Language preference in which the user expects the Verifiable Credential to be rendered", schema = @Schema(type = "string")), + @Parameter(name = "Accept-Language", in = ParameterIn.QUERY, required = true, description = "Language preference in which the user expects the Verifiable Credential to be rendered", schema = @Schema(type = "string")), @Parameter(name = "action", in = ParameterIn.QUERY, required = false, description = "Controls how the credential should be displayed. If sent as download, the response will include a header to download the file. Defaults to inline.", schema = @Schema(type = "string", defaultValue = "inline"))}) @ApiResponse(responseCode = "200", description = "Verifiable Credential fetched successfully", headers = @Header(name = HttpHeaders.CONTENT_DISPOSITION, description = "Indicates if the verifiable credential is displayed inline or downloaded", schema = @Schema(type = "string", example = "inline; filename=\"credential.pdf\"")), content = @Content(mediaType = "application/pdf", schema = @Schema(type = "string", format = "binary"), examples = @ExampleObject(value = "PDF content in Binary Format"))) @ApiResponse(responseCode = "400", description = "Bad request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "Invalid Wallet Id", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Invalid Wallet ID. Session and request Wallet ID do not match\"}"), @ExampleObject(name = "Wallet key not found in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet key not found in session\"}")})) From f6667751d6ef3ef1bee840cf32dd160107d1d8ae Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Fri, 23 May 2025 12:06:44 +0530 Subject: [PATCH 610/860] [INJIWEB-1541] move error to ErrorConstants Signed-off-by: KiruthikaJeyashankar --- certs/oidckeystore.p12 | Bin 43456 -> 0 bytes .../mosip/mimoto/exception/ErrorConstants.java | 3 ++- .../java/io/mosip/mimoto/util/WalletUtil.java | 3 ++- 3 files changed, 4 insertions(+), 2 deletions(-) delete mode 100644 certs/oidckeystore.p12 diff --git a/certs/oidckeystore.p12 b/certs/oidckeystore.p12 deleted file mode 100644 index 7b6c252d6c9c8f31cd3302f2ae3d4adfd6f6eae6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43456 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 J*y#cS2mqV-XbJ!T diff --git a/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java b/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java index d9b372c4f..1f3844e20 100644 --- a/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java +++ b/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java @@ -35,8 +35,9 @@ public enum ErrorConstants { SCHEMA_MISMATCH( "schema_mismatch", "Failed to restored the stored data"), INVALID_USER("invalid_user", "User does not exist in database"), CREDENTIAL_DOWNLOAD_EXCEPTION( "credential_download_error", "Failed to download and store the credential"), - CREDENTIAL_FETCH_EXCEPTION( "credential_fetch_error", "Failed to fetch the credential"); + CREDENTIAL_FETCH_EXCEPTION( "credential_fetch_error", "Failed to fetch the credential"), + WALLET_LOCKED("wallet_locked", "Wallet is locked"); private final String errorCode; private final String errorMessage; diff --git a/src/main/java/io/mosip/mimoto/util/WalletUtil.java b/src/main/java/io/mosip/mimoto/util/WalletUtil.java index 1b4f4b088..c79a9fe96 100644 --- a/src/main/java/io/mosip/mimoto/util/WalletUtil.java +++ b/src/main/java/io/mosip/mimoto/util/WalletUtil.java @@ -18,6 +18,7 @@ import java.util.UUID; import static io.mosip.mimoto.exception.ErrorConstants.INVALID_REQUEST; +import static io.mosip.mimoto.exception.ErrorConstants.WALLET_LOCKED; @Component @Slf4j @@ -93,7 +94,7 @@ public static String getSessionWalletKey(HttpSession session) { public static void validateWalletId(HttpSession session, String walletIdFromRequest) { Object sessionWalletId = session.getAttribute(SessionKeys.WALLET_ID); - if (sessionWalletId == null) throw new InvalidRequestException("wallet_locked", "Wallet is locked"); + if (sessionWalletId == null) throw new InvalidRequestException(WALLET_LOCKED.getErrorCode(), WALLET_LOCKED.getErrorMessage()); String walletIdInSession = sessionWalletId.toString(); if (!walletIdInSession.equals(walletIdFromRequest)) { From 4ff36ef5ffcdb864e190d3707a0967d0171c070d Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Fri, 23 May 2025 12:11:10 +0530 Subject: [PATCH 611/860] [INJIWEB-1541] use library to check for valid input in downloadCredential API Signed-off-by: KiruthikaJeyashankar --- .../io/mosip/mimoto/controller/WalletCredentialsController.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index 0db57176f..9a0b9bd34 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -27,6 +27,7 @@ import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Pattern; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.InputStreamResource; import org.springframework.http.HttpHeaders; From 2a3513ae2f05de3506986aa7524d0531980174bd Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Fri, 23 May 2025 12:15:22 +0530 Subject: [PATCH 612/860] [INJIWEB-1541] update openapi doc Signed-off-by: KiruthikaJeyashankar --- docs/api-documentation-openapi.json | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index b1bf3be36..dc7883867 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -2968,7 +2968,7 @@ "Missing required params": { "value": { "errorCode": "invalid_request", - "errorMessage": "Issuer and credentialConfiguration are required" + "errorMessage": "Issuer and credentialConfigurationId are required" } }, "Wallet ID is null or blank": { @@ -3410,7 +3410,10 @@ }, "examples": { "Success response": { - "value": "d94a2e70-1234-4f2f-9eae-98765" + "value": { + "walletId": "d94a2e70-1234-4f2f-9eae-98765", + "walletName": "wallet 123" + } } } } @@ -3523,10 +3526,12 @@ "Success response": { "value": [ { - "walletId": "123e4567-e89b-12d3-a456-426614174000" + "walletId": "123e4567-e89b-12d3-a456-426614174000", + "walletName": "Wallet 123" }, { - "walletId": "223e4567-e89b-12d3-a456-426614174001" + "walletId": "223e4567-e89b-12d3-a456-426614174001", + "walletName": "Wallet Main" } ] } @@ -4117,6 +4122,10 @@ "walletId": { "type": "string", "description": "Unique identifier of the Wallet" + }, + "walletName" : { + "type": "string", + "description": "Wallet name provided by the user" } } }, From 0c7563dfdc663053e3ed7f4ceaf9efbe67df75ef Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Mon, 26 May 2025 13:23:01 +0530 Subject: [PATCH 613/860] [INJIWEB-1541] refactor - extract duplicate blocks Detailed changes - extract functions for duplicate blocks - optimize imports - remove redundant default params specified - remove redundant equals check in test verify or mock calls Signed-off-by: KiruthikaJeyashankar --- .../WalletCredentialsController.java | 11 +++-- .../mimoto/controller/WalletsController.java | 2 - .../impl/WalletCredentialServiceImpl.java | 43 +++++++++---------- .../service/impl/WalletServiceImpl.java | 19 ++++---- .../mimoto/util/CredentialUtilService.java | 14 +++--- .../service/WalletCredentialServiceTest.java | 14 +++--- 6 files changed, 51 insertions(+), 52 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index 9a0b9bd34..a1c220d19 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -27,7 +27,6 @@ import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Pattern; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.InputStreamResource; import org.springframework.http.HttpHeaders; @@ -75,8 +74,8 @@ public WalletCredentialsController(WalletCredentialService walletCredentialServi @Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet", schema = @Schema(type = "string")), @Parameter(name = "issuer", in = ParameterIn.QUERY, required = true, description = "The identifier of the issuer", schema = @Schema(type = "string")), @Parameter(name = "credentialConfigurationId", in = ParameterIn.QUERY, required = true, description = "The type of the credential", schema = @Schema(type = "string")), - @Parameter(name = "vcStorageExpiryLimitInTimes", in = ParameterIn.QUERY, required = false, description = "The expiration limit for the Verifiable Credential storage", schema = @Schema(type = "string", defaultValue = "-1")), - @Parameter(name = "Accept-Language", in = ParameterIn.HEADER, required = false, description = "The locale for the Verifiable Credential. It follows 2 letter language code", schema = @Schema(type = "string", defaultValue = "en"))}) + @Parameter(name = "vcStorageExpiryLimitInTimes", in = ParameterIn.QUERY, description = "The expiration limit for the Verifiable Credential storage", schema = @Schema(type = "string", defaultValue = "-1")), + @Parameter(name = "Accept-Language", in = ParameterIn.HEADER, description = "The locale for the Verifiable Credential. It follows 2 letter language code", schema = @Schema(type = "string", defaultValue = "en"))}) @ApiResponse(responseCode = "200", description = "Verifiable Credential downloaded and stored successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = VerifiableCredentialResponseDTO.class))) @ApiResponse(responseCode = "400", description = "Bad request - Wallet key is null / blank or Wallet ID is null / blank / mismatch with session Wallet ID or required params are missing / invalid", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "Invalid Wallet Id", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Invalid Wallet ID. Session and request Wallet ID do not match\"}"), @ExampleObject(name = "Wallet key not found in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet key not found in session\"}"), @ExampleObject(name = "Missing required params", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Issuer and credentialConfigurationId are required\"}"), @ExampleObject(name = "Wallet ID is null or blank", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet ID cannot be null or blank\"}"), @ExampleObject(name = "Issuer ID is null or blank", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Issuer ID cannot be null or blank\"}")})) @ApiResponse(responseCode = "500", description = "Internal server error - error occurred while serializing the VC response, encrypting the credential, or storing it", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "Credential already exists", value = "{\"errorCode\": \"credential_download_error\", \"errorMessage\": \"Duplicate credential for issuer and type\"}"), @ExampleObject(name = "Issuer config error", value = "{\"errorCode\": \"credential_download_error\", \"errorMessage\": \"Unable to fetch issuer configuration\"}"), @ExampleObject(name = "Failed to generate VC request", value = "{\"errorCode\": \"credential_download_error\", \"errorMessage\": \"Unable to generate credential request\"}"), @ExampleObject(name = "Signature verification failed", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"), @ExampleObject(name = "Unexpected server error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}")})) @@ -139,7 +138,7 @@ public ResponseEntity downloadCredential( */ @Operation(summary = "Fetch all credentials for the given wallet", description = "This API is secured using session-based authentication. When a request is made, the session ID is extracted from the Cookie header and used to fetch session details from Redis for authentication. It then retrieves the wallet key from the session and uses it to decrypt all stored Verifiable Credentials for the given wallet. If successful, it returns a list of credentials otherwise an appropriate error is returned.", operationId = "fetchAllCredentialsForWallet", security = @SecurityRequirement(name = "SessionAuth"), parameters = { @Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the user's wallet from where the credential will be fetched", schema = @Schema(type = "string")), - @Parameter(name = "Accept-Language", in = ParameterIn.HEADER, required = false, description = "Locale is used to determine the language in which credentials should be rendered. It follows 2 letter language code", schema = @Schema(type = "string"))}) + @Parameter(name = "Accept-Language", in = ParameterIn.HEADER, description = "Locale is used to determine the language in which credentials should be rendered. It follows 2 letter language code", schema = @Schema(type = "string"))}) @ApiResponse(responseCode = "200", description = "Credentials retrieved successfully", content = @Content(mediaType = "application/json", array = @ArraySchema(schema = @Schema(implementation = VerifiableCredentialResponseDTO.class)), examples = @ExampleObject(value = SwaggerExampleConstants.FETCH_ALL_CREDENTIALS_OF_WALLET_SUCCESS))) @ApiResponse(responseCode = "400", description = "Bad request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "Invalid Wallet Id", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Invalid Wallet ID. Session and request Wallet ID do not match\"}"), @ExampleObject(name = "Wallet key not found in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet key not found in session\"}")})) @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"))) @@ -176,7 +175,7 @@ public ResponseEntity> fetchAllCredentials @Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the user's wallet", schema = @Schema(type = "string")), @Parameter(name = "credentialId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the Verifiable Credential to be retrieved", schema = @Schema(type = "string")), @Parameter(name = "Accept-Language", in = ParameterIn.QUERY, required = true, description = "Language preference in which the user expects the Verifiable Credential to be rendered", schema = @Schema(type = "string")), - @Parameter(name = "action", in = ParameterIn.QUERY, required = false, description = "Controls how the credential should be displayed. If sent as download, the response will include a header to download the file. Defaults to inline.", schema = @Schema(type = "string", defaultValue = "inline"))}) + @Parameter(name = "action", in = ParameterIn.QUERY, description = "Controls how the credential should be displayed. If sent as download, the response will include a header to download the file. Defaults to inline.", schema = @Schema(type = "string", defaultValue = "inline"))}) @ApiResponse(responseCode = "200", description = "Verifiable Credential fetched successfully", headers = @Header(name = HttpHeaders.CONTENT_DISPOSITION, description = "Indicates if the verifiable credential is displayed inline or downloaded", schema = @Schema(type = "string", example = "inline; filename=\"credential.pdf\"")), content = @Content(mediaType = "application/pdf", schema = @Schema(type = "string", format = "binary"), examples = @ExampleObject(value = "PDF content in Binary Format"))) @ApiResponse(responseCode = "400", description = "Bad request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "Invalid Wallet Id", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Invalid Wallet ID. Session and request Wallet ID do not match\"}"), @ExampleObject(name = "Wallet key not found in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet key not found in session\"}")})) @ApiResponse(responseCode = "404", description = "Not Found - Credential not found for given Wallet ID and Credential ID", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "No credentials found", value = "{\"errorCode\": \"resource_not_found\", \"errorMessage\": \"The requested resource doesn’t exist.\"}"))) @@ -186,7 +185,7 @@ public ResponseEntity> fetchAllCredentials public ResponseEntity getVerifiableCredential( @PathVariable("walletId") @NotBlank(message = "Wallet ID cannot be blank") String walletId, @PathVariable("credentialId") @NotBlank(message = "Credential ID cannot be blank") String credentialId, - @RequestHeader(value = "Accept", required = true) String accept, + @RequestHeader(value = "Accept") String accept, @RequestHeader(value = "Accept-Language", defaultValue = "en") @Pattern(regexp = "^[a-z]{2}$", message = "Locale must be a 2-letter code") String locale, @RequestParam(value = "action", defaultValue = "inline") @Pattern(regexp = "^(inline|download)$", message = "Action must be 'inline' or 'download'") String action, HttpSession httpSession) throws InvalidRequestException { diff --git a/src/main/java/io/mosip/mimoto/controller/WalletsController.java b/src/main/java/io/mosip/mimoto/controller/WalletsController.java index e6daa3ae5..4d0c18df5 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletsController.java @@ -8,7 +8,6 @@ import io.mosip.mimoto.dto.WalletResponseDto; import io.mosip.mimoto.exception.InvalidRequestException; import io.mosip.mimoto.service.WalletService; -import io.mosip.mimoto.util.Utilities; import io.mosip.mimoto.util.WalletUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -26,7 +25,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java index 375a191e7..ff7a6145a 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java @@ -1,7 +1,6 @@ package io.mosip.mimoto.service.impl; import io.mosip.mimoto.dbentity.VerifiableCredential; -import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.IssuerConfig; import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; @@ -15,14 +14,14 @@ import io.mosip.mimoto.util.EncryptionDecryptionUtil; import io.mosip.mimoto.util.WalletCredentialResponseDTOFactory; import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.io.IOException; import java.util.List; -import java.util.Optional; import java.util.Set; -import java.util.stream.Collectors; +import java.util.function.Supplier; import static io.mosip.mimoto.exception.ErrorConstants.*; @@ -59,20 +58,19 @@ public VerifiableCredentialResponseDTO fetchAndStoreCredential(String issuerId, log.info("Fetching and storing credential for wallet: {}, issuer: {}, type: {}", walletId, issuerId, credentialConfigurationId); Set issuers = Set.of("Mosip"); - if (issuers.contains(issuerId)){ - if (repository.existsByIssuerIdAndCredentialTypeAndWalletId(issuerId, credentialConfigurationId, walletId)) { - log.warn("Duplicate credential found for issuer: {}, type: {}, wallet: {}", issuerId, credentialConfigurationId, walletId); - throw new CredentialProcessingException(CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), "Duplicate credential for issuer and type"); - } + if (issuers.contains(issuerId) && repository.existsByIssuerIdAndCredentialTypeAndWalletId(issuerId, credentialConfigurationId, walletId)) { + log.warn("Duplicate credential found for issuer: {}, type: {}, wallet: {}", issuerId, credentialConfigurationId, walletId); + throw new CredentialProcessingException(CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), "Duplicate credential for issuer and type"); } - VerifiableCredentialResponseDTO credential = null; - credential = credentialProcessor.processAndStoreCredential( - tokenResponse, credentialConfigurationId, walletId, base64Key, credentialValidity, issuerId, locale); + VerifiableCredentialResponseDTO credential; + + credential = credentialProcessor.processAndStoreCredential( + tokenResponse, credentialConfigurationId, walletId, base64Key, credentialValidity, issuerId, locale); log.debug("Credential stored successfully: {}", credential.getCredentialId()); - return credential; + return credential; } @@ -92,7 +90,7 @@ public List fetchAllCredentialsForWallet(String log.error("Failed to fetch issuer details for issuerId: {}", issuerId, e); } return WalletCredentialResponseDTOFactory.buildCredentialResponseDTO(issuerConfig, locale, credential.getId()); - }).collect(Collectors.toList()); + }).toList(); } @@ -102,10 +100,7 @@ public WalletCredentialResponseDTO fetchVerifiableCredential(String walletId, St throws CredentialNotFoundException, CredentialProcessingException { log.info("Fetching credential: {} for wallet: {}", credentialId, walletId); VerifiableCredential credential = repository.findByIdAndWalletId(credentialId, walletId) - .orElseThrow(() -> { - log.warn("Credential not found: {} for wallet: {}", credentialId, walletId); - return new CredentialNotFoundException(RESOURCE_NOT_FOUND.getErrorCode(), RESOURCE_NOT_FOUND.getErrorMessage()); - }); + .orElseThrow(getCredentialNotFoundExceptionSupplier(walletId, credentialId)); try { String decryptedCredential = encryptionDecryptionUtil.decryptCredential(credential.getCredential(), base64Key); @@ -123,14 +118,18 @@ public WalletCredentialResponseDTO fetchVerifiableCredential(String walletId, St public void deleteCredential(String credentialId, String walletId) throws CredentialNotFoundException { log.info("Deleting credential with ID: {} for wallet: {}", credentialId, walletId); - VerifiableCredential credential = repository.findByIdAndWalletId(credentialId, walletId) - .orElseThrow(() -> { - log.warn("Credential not found: {} for wallet: {}", credentialId, walletId); - return new CredentialNotFoundException(RESOURCE_NOT_FOUND.getErrorCode(), RESOURCE_NOT_FOUND.getErrorMessage()); - }); + repository.findByIdAndWalletId(credentialId, walletId) + .orElseThrow(getCredentialNotFoundExceptionSupplier(walletId, credentialId)); // Delete the credential repository.deleteById(credentialId); log.info("Successfully deleted credential with ID: {}", credentialId); } + @NotNull + private static Supplier getCredentialNotFoundExceptionSupplier(String walletId, String credentialId) { + return () -> { + log.warn("Credential not found: {} for wallet: {}", credentialId, walletId); + return new CredentialNotFoundException(RESOURCE_NOT_FOUND.getErrorCode(), RESOURCE_NOT_FOUND.getErrorMessage()); + }; + } } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java index 063c34efe..a723f140b 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java @@ -9,10 +9,12 @@ import io.mosip.mimoto.util.WalletUtil; import io.mosip.mimoto.util.WalletValidator; import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; +import java.util.function.Supplier; /** * Implementation of {@link WalletService} for managing wallets. @@ -59,10 +61,7 @@ public String getWalletKey(String userId, String walletId, String pin) throws In return repository.findByUserIdAndId(userId, walletId) .map(wallet -> walletUtil.decryptWalletKey(wallet.getWalletKey(), pin)) - .orElseThrow(() -> { - log.warn("Wallet not found: {} for user: {}", walletId, userId); - return new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Wallet not found"); - }); + .orElseThrow(getWalletNotFoundExceptionSupplier(userId, walletId)); } @@ -83,12 +82,16 @@ public List getWallets(String userId) { public void deleteWallet(String userId, String walletId) throws InvalidRequestException { validator.validateUserId(userId); Wallet existingWallet = repository.findByUserIdAndId(userId, walletId) - .orElseThrow(() -> { - log.warn("Wallet not found: {} for user: {}", walletId, userId); - return new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Wallet not found"); - }); + .orElseThrow(getWalletNotFoundExceptionSupplier(userId, walletId)); repository.delete(existingWallet); log.info("Successfully deleted wallet with ID: {} for user: {}", walletId, userId); + } + @NotNull + private static Supplier getWalletNotFoundExceptionSupplier(String userId, String walletId) { + return () -> { + log.warn("Wallet not found: {} for user: {}", walletId, userId); + return new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Wallet not found"); + }; } } diff --git a/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java b/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java index 20be4525e..aa91a5383 100644 --- a/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java +++ b/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java @@ -136,7 +136,7 @@ public VCCredentialRequest generateVCCredentialRequest(IssuerDTO issuerDTO, Cred Map proofTypesSupported = credentialsSupportedResponse.getProofTypesSupported(); SigningAlgorithm algorithm; if (proofTypesSupported.containsKey("jwt")) { - algorithm = SigningAlgorithm.fromString(proofTypesSupported.get("jwt").getProofSigningAlgValuesSupported().get(0)); + algorithm = SigningAlgorithm.fromString(proofTypesSupported.get("jwt").getProofSigningAlgValuesSupported().getFirst()); } else { algorithm = SigningAlgorithm.RS256; } @@ -216,10 +216,10 @@ public static LinkedHashMap public Map getPdfResourceFromVcProperties(LinkedHashMap> displayProperties, CredentialsSupportedResponse credentialsSupportedResponse, VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, String dataShareUrl, String credentialValidity) throws IOException, WriterException { Map data = new HashMap<>(); LinkedHashMap rowProperties = new LinkedHashMap<>(); - String backgroundColor = credentialsSupportedResponse.getDisplay().get(0).getBackgroundColor(); - String backgroundImage = credentialsSupportedResponse.getDisplay().get(0).getBackgroundImage().getUri(); - String textColor = credentialsSupportedResponse.getDisplay().get(0).getTextColor(); - String credentialSupportedType = credentialsSupportedResponse.getDisplay().get(0).getName(); + String backgroundColor = credentialsSupportedResponse.getDisplay().getFirst().getBackgroundColor(); + String backgroundImage = credentialsSupportedResponse.getDisplay().getFirst().getBackgroundImage().getUri(); + String textColor = credentialsSupportedResponse.getDisplay().getFirst().getTextColor(); + String credentialSupportedType = credentialsSupportedResponse.getDisplay().getFirst().getName(); String face = vcCredentialResponse.getCredential().getCredentialSubject().get("face") != null ? (String) vcCredentialResponse.getCredential().getCredentialSubject().get("face") : null; displayProperties.entrySet().stream() @@ -302,9 +302,9 @@ private String handleList(Object list, String locale) { List castedList = (List) list; String response = ""; if (castedList.isEmpty()) return ""; - if (castedList.get(0) instanceof String) { + if (castedList.getFirst() instanceof String) { response = castedList.stream().map(String.class::cast).collect(Collectors.joining(", ")); - } else if (castedList.get(0) instanceof Map) { + } else if (castedList.getFirst() instanceof Map) { response = ((List>) castedList).stream() .filter(obj -> LocaleUtils.matchesLocale(obj.get("language").toString(), locale)) .map(obj -> obj.get("value").toString()) diff --git a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java index 978566345..d3d9d6d80 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java @@ -98,7 +98,7 @@ public void shouldFetchAndStoreCredentialSuccessfully() throws Exception { expectedResponse.setCredentialId(credentialId); when(walletCredentialsRepository.existsByIssuerIdAndCredentialTypeAndWalletId(mosipIssuerId, credentialType, walletId)).thenReturn(false); - when(credentialProcessor.processAndStoreCredential(eq(tokenResponse), eq(credentialType), eq(walletId), eq(base64Key), eq(credentialValidity), eq(mosipIssuerId), eq(locale))) + when(credentialProcessor.processAndStoreCredential(tokenResponse, credentialType, walletId, base64Key, credentialValidity, mosipIssuerId, locale)) .thenReturn(expectedResponse); VerifiableCredentialResponseDTO actualResponse = walletCredentialService.fetchAndStoreCredential( @@ -106,7 +106,7 @@ public void shouldFetchAndStoreCredentialSuccessfully() throws Exception { assertEquals(expectedResponse, actualResponse); verify(walletCredentialsRepository).existsByIssuerIdAndCredentialTypeAndWalletId(mosipIssuerId, credentialType, walletId); - verify(credentialProcessor).processAndStoreCredential(eq(tokenResponse), eq(credentialType), eq(walletId), eq(base64Key), eq(credentialValidity), eq(mosipIssuerId), eq(locale)); + verify(credentialProcessor).processAndStoreCredential(tokenResponse, credentialType, walletId, base64Key, credentialValidity, mosipIssuerId, locale); } @Test @@ -127,14 +127,14 @@ public void shouldFetchAndStoreNonMosipIssuerCredential() throws Exception { VerifiableCredentialResponseDTO expectedResponse = new VerifiableCredentialResponseDTO(); expectedResponse.setCredentialId(credentialId); - when(credentialProcessor.processAndStoreCredential(eq(tokenResponse), eq(credentialType), eq(walletId), eq(base64Key), eq(credentialValidity), eq(issuerId), eq(locale))) + when(credentialProcessor.processAndStoreCredential(tokenResponse, credentialType, walletId, base64Key, credentialValidity, issuerId, locale)) .thenReturn(expectedResponse); VerifiableCredentialResponseDTO actualResponse = walletCredentialService.fetchAndStoreCredential( issuerId, credentialType, tokenResponse, credentialValidity, locale, walletId, base64Key); assertEquals(expectedResponse, actualResponse); - verify(credentialProcessor).processAndStoreCredential(eq(tokenResponse), eq(credentialType), eq(walletId), eq(base64Key), eq(credentialValidity), eq(issuerId), eq(locale)); + verify(credentialProcessor).processAndStoreCredential(tokenResponse, credentialType, walletId, base64Key, credentialValidity, issuerId, locale); } @Test @@ -151,7 +151,7 @@ public void shouldThrowExternalServiceUnavailableException() throws Exception { assertEquals("SERVICE_UNAVAILABLE", exception.getErrorCode()); assertEquals("SERVICE_UNAVAILABLE --> Service unavailable", exception.getMessage()); verify(walletCredentialsRepository).existsByIssuerIdAndCredentialTypeAndWalletId(mosipIssuerId, credentialType, walletId); - verify(credentialProcessor).processAndStoreCredential(eq(tokenResponse), eq(credentialType), eq(walletId), eq(base64Key), eq(credentialValidity), eq(mosipIssuerId), eq(locale)); + verify(credentialProcessor).processAndStoreCredential(tokenResponse, credentialType, walletId, base64Key, credentialValidity, mosipIssuerId, locale); } @Test @@ -169,7 +169,7 @@ public void shouldFetchAllCredentialsForWalletSuccessfully() throws Exception { List actualCredentials = walletCredentialService.fetchAllCredentialsForWallet(walletId, base64Key, locale); assertEquals(1, actualCredentials.size()); - assertEquals(responseDTO, actualCredentials.get(0)); + assertEquals(responseDTO, actualCredentials.getFirst()); verify(walletCredentialsRepository).findByWalletId(walletId); verify(issuersService).getIssuerConfig(issuerId, credentialType); factoryMock.verify(() -> WalletCredentialResponseDTOFactory.buildCredentialResponseDTO(issuerConfig, locale, credentialId)); @@ -191,7 +191,7 @@ public void shouldHandleIssuerConfigFetchFailure() throws Exception { List actualCredentials = walletCredentialService.fetchAllCredentialsForWallet(walletId, base64Key, locale); assertEquals(1, actualCredentials.size()); - assertEquals(responseDTO, actualCredentials.get(0)); + assertEquals(responseDTO, actualCredentials.getFirst()); verify(walletCredentialsRepository).findByWalletId(walletId); verify(issuersService).getIssuerConfig(issuerId, credentialType); factoryMock.verify(() -> WalletCredentialResponseDTOFactory.buildCredentialResponseDTO(null, locale, credentialId)); From fbfd7c2be5b5f8a5dedab70b1f4219d1b8427831 Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Mon, 26 May 2025 16:31:26 +0530 Subject: [PATCH 614/860] [INJIWEB-1541] add test for unlock wallet api Signed-off-by: KiruthikaJeyashankar --- .../controller/WalletsControllerTest.java | 108 ++++++++++++++++++ .../io/mosip/mimoto/util/TestUtilities.java | 4 + 2 files changed, 112 insertions(+) diff --git a/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java index 4148d4ab5..4bb275189 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.dto.CreateWalletRequestDto; +import io.mosip.mimoto.dto.UnlockWalletRequestDto; import io.mosip.mimoto.dto.WalletResponseDto; import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.exception.InvalidRequestException; @@ -226,4 +227,111 @@ public void shouldReturnUnauthorizedWhenUserIdIsMissingForDeleteWallet() throws .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isUnauthorized()); } + + // Unlock wallet tests + + @Test + public void shouldUnlockWalletSuccessfully() throws Exception { + UnlockWalletRequestDto unlockRequest = new UnlockWalletRequestDto(); + unlockRequest.setWalletPin(walletPin); + + when(walletService.getWalletKey(userId, walletId, walletPin)).thenReturn("walletKey123"); + + MvcResult result = mockMvc.perform(post("/wallets/{walletId}/unlock", walletId) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON) + .content(createRequestBody(unlockRequest)) + .session(mockSession) + .with(SecurityMockMvcRequestPostProcessors.user(userId).roles("USER")) + .with(SecurityMockMvcRequestPostProcessors.csrf())) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.walletId").value(walletId)) + .andReturn(); + + // Verify session attributes were set correctly + assertEquals(walletId, result.getRequest().getSession().getAttribute(SessionKeys.WALLET_ID)); + assertEquals("walletKey123", result.getRequest().getSession().getAttribute(SessionKeys.WALLET_KEY)); + } + + @Test + public void shouldThrowExceptionWhenUserIdIsMissingForUnlockWallet() throws Exception { + UnlockWalletRequestDto unlockRequest = new UnlockWalletRequestDto(); + unlockRequest.setWalletPin("1234"); + + MockHttpSession sessionWithoutUserId = new MockHttpSession(); + sessionWithoutUserId.setAttribute("clientRegistrationId", "google"); + + mockMvc.perform(post("/wallets/{walletId}/unlock", walletId) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON) + .content(createRequestBody(unlockRequest)) + .session(sessionWithoutUserId) + .with(SecurityMockMvcRequestPostProcessors.user(userId).roles("USER")) + .with(SecurityMockMvcRequestPostProcessors.csrf())) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errorCode").value("invalid_request")) + .andExpect(jsonPath("$.errorMessage").value("invalid_request --> User ID not found in session")); + } + + @Test + public void shouldThrowExceptionWhenWalletNotFoundForUnlock() throws Exception { + String nonExistentWalletId = "nonExistentWalletId"; + UnlockWalletRequestDto unlockRequest = new UnlockWalletRequestDto(); + unlockRequest.setWalletPin(walletPin); + + when(walletService.getWalletKey(userId, nonExistentWalletId, walletPin)) + .thenThrow(new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Wallet not found")); + + mockMvc.perform(post("/wallets/{walletId}/unlock", nonExistentWalletId) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON) + .content(createRequestBody(unlockRequest)) + .session(mockSession) + .with(SecurityMockMvcRequestPostProcessors.user(userId).roles("USER")) + .with(SecurityMockMvcRequestPostProcessors.csrf())) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errorCode").value("invalid_request")) + .andExpect(jsonPath("$.errorMessage").value("invalid_request --> Wallet not found")); + } + + @Test + public void shouldThrowExceptionWhenInvalidPinProvidedForUnlock() throws Exception { + String invalidPin = "invalidPin"; + UnlockWalletRequestDto unlockRequest = new UnlockWalletRequestDto(); + unlockRequest.setWalletPin(invalidPin); + + when(walletService.getWalletKey(userId, walletId, invalidPin)) + .thenThrow(new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Invalid PIN provided")); + + mockMvc.perform(post("/wallets/{walletId}/unlock", walletId) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON) + .content(createRequestBody(unlockRequest)) + .session(mockSession) + .with(SecurityMockMvcRequestPostProcessors.user(userId).roles("USER")) + .with(SecurityMockMvcRequestPostProcessors.csrf())) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errorCode").value("invalid_request")) + .andExpect(jsonPath("$.errorMessage").value("invalid_request --> Invalid PIN provided")); + } + + @Test + public void shouldThrowExceptionForServerErrorDuringUnlock() throws Exception { + UnlockWalletRequestDto unlockRequest = new UnlockWalletRequestDto(); + unlockRequest.setWalletPin(walletPin); + + when(walletService.getWalletKey(userId, walletId, walletPin)) + .thenThrow(new RuntimeException("Error decrypting wallet key")); + + mockMvc.perform(post("/wallets/{walletId}/unlock", walletId) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON) + .content(createRequestBody(unlockRequest)) + .session(mockSession) + .with(SecurityMockMvcRequestPostProcessors.user(userId).roles("USER")) + .with(SecurityMockMvcRequestPostProcessors.csrf())) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errorCode").value("internal_server_error")) + .andExpect(jsonPath("$.errorMessage").value("We are unable to process request now")); + } } diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index a68df529b..80a46d1c0 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -439,4 +439,8 @@ public static VerifiableCredentialResponseDTO getVerifiableCredentialResponseDTO .credentialId(credentialId) .build(); } + + public static String createRequestBody(Object request) throws JsonProcessingException { + return new ObjectMapper().writeValueAsString(request); + } } From 26636219c4e842853b16ccf848465ada689fadb5 Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Mon, 26 May 2025 18:21:39 +0530 Subject: [PATCH 615/860] [INJIWEB-1541] change api response to camelCase for consistency Signed-off-by: KiruthikaJeyashankar --- .../controller/WalletCredentialsController.java | 2 +- .../mimoto/VerifiableCredentialResponseDTO.java | 8 ++------ .../WalletCredentialsControllerTest.java | 14 ++++++++++---- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index a1c220d19..d6ac7aa5d 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -95,7 +95,7 @@ public ResponseEntity downloadCredential( String credentialConfigurationId = params.get("credentialConfigurationId"); String credentialValidity = params.getOrDefault("vcStorageExpiryLimitInTimes", "-1"); - if (issuerId == null || issuerId.isBlank() || credentialConfigurationId == null || credentialConfigurationId.isBlank()) { + if (StringUtils.isBlank(issuerId) || StringUtils.isBlank(credentialConfigurationId)) { log.error("Missing required parameters: issuer or credential"); throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Issuer and credentialConfigurationId are required"); } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/VerifiableCredentialResponseDTO.java b/src/main/java/io/mosip/mimoto/dto/mimoto/VerifiableCredentialResponseDTO.java index 19e7fc155..37a8fb7c4 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/VerifiableCredentialResponseDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/VerifiableCredentialResponseDTO.java @@ -1,6 +1,5 @@ package io.mosip.mimoto.dto.mimoto; -import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; @@ -11,24 +10,21 @@ @Builder @NoArgsConstructor @AllArgsConstructor + +// Holds details related to credential UUID as per stored in DB and other metadata to display in wallet public class VerifiableCredentialResponseDTO { - @JsonProperty("issuer_display_name") @Schema(description = "Name of the issuer") private String issuerDisplayName; - @JsonProperty("issuer_logo") @Schema(description = "logo of the issuer") private String issuerLogo; - @JsonProperty("credential_type_display_name") @Schema(description = "Name of the credential type") private String credentialTypeDisplayName; - @JsonProperty("credential_type_logo") @Schema(description = "logo of the credential type") private String credentialTypeLogo; - @JsonProperty("credential_id") @Schema(description = "Unique Identifier of the Credential in database") private String credentialId; } \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java index d8f023a6b..79eb79376 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java @@ -106,8 +106,11 @@ public void shouldDownloadCredentialSuccessfully() throws Exception { .sessionAttr("wallet_id", walletId) .sessionAttr("wallet_key", walletKey)) .andExpect(status().isOk()) - .andExpect(jsonPath("$.issuer_display_name").value("issuerName123")) - .andExpect(jsonPath("$.credential_id").value("credentialId123")); + .andExpect(jsonPath("$.issuerDisplayName").value("issuerName123")) + .andExpect(jsonPath("$.issuerLogo").value("issuerLogo")) + .andExpect(jsonPath("$.credentialTypeDisplayName").value("credentialType123")) + .andExpect(jsonPath("$.credentialTypeLogo").value("credentialTypeLogo")) + .andExpect(jsonPath("$.credentialId").value("credentialId123")); } @Test @@ -278,8 +281,11 @@ public void shouldFetchAllCredentialsSuccessfully() throws Exception { .sessionAttr("wallet_id", walletId) .sessionAttr("wallet_key", walletKey)) .andExpect(status().isOk()) - .andExpect(jsonPath("$[0].issuer_display_name").value("issuerName123")) - .andExpect(jsonPath("$[0].credential_type_display_name").value("credentialType123")); + .andExpect(jsonPath("$[0].issuerDisplayName").value("issuerName123")) + .andExpect(jsonPath("$[0].issuerLogo").value("issuerLogo")) + .andExpect(jsonPath("$[0].credentialTypeDisplayName").value("credentialType123")) + .andExpect(jsonPath("$[0].credentialId").value("credentialId123")) + .andExpect(jsonPath("$[0].credentialTypeLogo").value("credentialTypeLogo")); } @Test From 80afee34cfaee460dd286478270ec1e825068966 Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Mon, 26 May 2025 18:38:08 +0530 Subject: [PATCH 616/860] [INJIWEB-1541] remove passing credential validity in downloadCredential CredentialMetadata's datashareUrl and credentialValidity fields are removed as resultant Signed-off-by: KiruthikaJeyashankar --- .../WalletCredentialsController.java | 3 +- .../mimoto/dbentity/CredentialMetadata.java | 2 - .../service/WalletCredentialService.java | 13 +++--- .../impl/WalletCredentialServiceImpl.java | 6 +-- .../mimoto/util/CredentialProcessor.java | 44 ++++++------------- .../mimoto/util/CredentialUtilService.java | 14 +++--- .../service/WalletCredentialServiceTest.java | 21 +++++---- 7 files changed, 43 insertions(+), 60 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index d6ac7aa5d..27b41edd4 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -27,6 +27,7 @@ import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Pattern; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.InputStreamResource; import org.springframework.http.HttpHeaders; @@ -115,7 +116,7 @@ public ResponseEntity downloadCredential( try { VerifiableCredentialResponseDTO credentialResponseDTO = walletCredentialService.fetchAndStoreCredential( - issuerId, credentialConfigurationId, tokenResponse, credentialValidity, locale, walletId, base64EncodedWalletKey); + issuerId, credentialConfigurationId, tokenResponse, locale, walletId, base64EncodedWalletKey); return ResponseEntity.status(HttpStatus.OK).body(credentialResponseDTO); } catch (ExternalServiceUnavailableException e) { return Utilities.getErrorResponseEntityWithoutWrapper( diff --git a/src/main/java/io/mosip/mimoto/dbentity/CredentialMetadata.java b/src/main/java/io/mosip/mimoto/dbentity/CredentialMetadata.java index 7e4e98db3..b709bcd23 100644 --- a/src/main/java/io/mosip/mimoto/dbentity/CredentialMetadata.java +++ b/src/main/java/io/mosip/mimoto/dbentity/CredentialMetadata.java @@ -6,6 +6,4 @@ public class CredentialMetadata { private String issuerId; private String credentialType; - private String dataShareUrl; - private String credentialValidity; } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java b/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java index 44be490f8..3da199af1 100644 --- a/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java +++ b/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java @@ -15,18 +15,17 @@ public interface WalletCredentialService { /** * Fetches and stores a credential for a wallet. * - * @param issuerId The issuer ID. + * @param issuerId The issuer ID. * @param credentialConfigurationId The type of credential. - * @param tokenResponse The token response containing the access token. - * @param credentialValidity The validity period of the credential. - * @param locale The locale for display purposes. - * @param walletId The wallet ID. - * @param base64Key The base64-encoded key for encryption. + * @param tokenResponse The token response containing the access token. + * @param locale The locale for display purposes. + * @param walletId The wallet ID. + * @param base64Key The base64-encoded key for encryption. * @return The stored credential response. * @throws CredentialProcessingException If processing fails. */ VerifiableCredentialResponseDTO fetchAndStoreCredential(String issuerId, String credentialConfigurationId, - TokenResponseDTO tokenResponse, String credentialValidity, + TokenResponseDTO tokenResponse, String locale, String walletId, String base64Key) throws CredentialProcessingException, ExternalServiceUnavailableException; diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java index ff7a6145a..2f21a10a4 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java @@ -52,7 +52,7 @@ public WalletCredentialServiceImpl(WalletCredentialsRepository repository, @Override public VerifiableCredentialResponseDTO fetchAndStoreCredential(String issuerId, String credentialConfigurationId, - TokenResponseDTO tokenResponse, String credentialValidity, + TokenResponseDTO tokenResponse, String locale, String walletId, String base64Key) throws CredentialProcessingException, ExternalServiceUnavailableException { log.info("Fetching and storing credential for wallet: {}, issuer: {}, type: {}", walletId, issuerId, credentialConfigurationId); @@ -66,8 +66,8 @@ public VerifiableCredentialResponseDTO fetchAndStoreCredential(String issuerId, VerifiableCredentialResponseDTO credential; - credential = credentialProcessor.processAndStoreCredential( - tokenResponse, credentialConfigurationId, walletId, base64Key, credentialValidity, issuerId, locale); + credential = credentialProcessor.processAndStoreCredential( + tokenResponse, credentialConfigurationId, walletId, base64Key, issuerId, locale); log.debug("Credential stored successfully: {}", credential.getCredentialId()); return credential; diff --git a/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java b/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java index 498732014..ef17f5220 100644 --- a/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java +++ b/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java @@ -11,7 +11,6 @@ import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; import io.mosip.mimoto.exception.*; -import io.mosip.mimoto.model.QRCodeType; import io.mosip.mimoto.repository.WalletCredentialsRepository; import io.mosip.mimoto.service.IssuersService; import io.mosip.mimoto.service.impl.DataShareServiceImpl; @@ -56,21 +55,20 @@ public CredentialProcessor( /** * Processes and stores a credential using the provided token and parameters. * - * @param tokenResponse The token response containing the access token. + * @param tokenResponse The token response containing the access token. * @param credentialConfigurationId The type of the credential. - * @param walletId The ID of the wallet. - * @param base64Key The Base64-encoded wallet key. - * @param credentialValidity The validity period of the credential. - * @param issuerId The ID of the issuer. + * @param walletId The ID of the wallet. + * @param base64Key The Base64-encoded wallet key. + * @param issuerId The ID of the issuer. * @return The stored VerifiableCredential. - * @throws InvalidRequestException If input parameters are invalid. - * @throws CredentialProcessingException If processing fails. + * @throws InvalidRequestException If input parameters are invalid. + * @throws CredentialProcessingException If processing fails. * @throws ExternalServiceUnavailableException If an external service is unavailable. - * @throws VCVerificationException If credential verification fails. + * @throws VCVerificationException If credential verification fails. */ public VerifiableCredentialResponseDTO processAndStoreCredential( TokenResponseDTO tokenResponse, String credentialConfigurationId, String walletId, - String base64Key, String credentialValidity, String issuerId, String locale) + String base64Key, String issuerId, String locale) throws InvalidRequestException, CredentialProcessingException, ExternalServiceUnavailableException, VCVerificationException { // Validate inputs if (tokenResponse == null || tokenResponse.getAccess_token() == null) { @@ -162,18 +160,6 @@ public VerifiableCredentialResponseDTO processAndStoreCredential( "Unable to serialize credential response", e); } - String dataShareUrl; - try { - dataShareUrl = QRCodeType.OnlineSharing.equals(issuerConfig.getIssuerDTO().getQr_code_type()) - ? dataShareService.storeDataInDataShare(vcResponseAsJsonString, credentialValidity) - : ""; - } catch (Exception e) { - log.error("Failed to store credential in data share for issuerId: {}, credentialConfigurationId: {}", issuerId, credentialConfigurationId, e); - throw new CredentialProcessingException( - CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), - "Unable to store credential in datashare", e); - } - String encryptedCredentialData; try { encryptedCredentialData = encryptionDecryptionUtil.encryptCredential(vcResponseAsJsonString, base64Key); @@ -184,28 +170,24 @@ public VerifiableCredentialResponseDTO processAndStoreCredential( "Unable to encrypt credential data", e); } - VerifiableCredential savedCredential = saveCredential(walletId, encryptedCredentialData, issuerId, credentialConfigurationId, dataShareUrl, credentialValidity); + VerifiableCredential savedCredential = saveCredential(walletId, encryptedCredentialData, issuerId, credentialConfigurationId); return WalletCredentialResponseDTOFactory.buildCredentialResponseDTO(issuerConfig, locale, savedCredential.getId()); } /** * Saves the credential to the repository. * - * @param walletId The wallet ID. + * @param walletId The wallet ID. * @param encryptedCredential The encrypted credential data. - * @param issuerId The issuer ID. - * @param credentialType The credential type. - * @param dataShareUrl The data share URL. - * @param credentialValidity The credential validity. + * @param issuerId The issuer ID. + * @param credentialType The credential type. * @return The stored VerifiableCredential. */ private VerifiableCredential saveCredential(String walletId, String encryptedCredential, String issuerId, - String credentialType, String dataShareUrl, String credentialValidity) { + String credentialType) { CredentialMetadata credentialMetadata = new CredentialMetadata(); credentialMetadata.setIssuerId(issuerId); credentialMetadata.setCredentialType(credentialType); - credentialMetadata.setDataShareUrl(dataShareUrl); - credentialMetadata.setCredentialValidity(credentialValidity); VerifiableCredential verifiableCredential = new VerifiableCredential(); verifiableCredential.setId(UUID.randomUUID().toString()); diff --git a/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java b/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java index aa91a5383..75deeeea0 100644 --- a/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java +++ b/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java @@ -126,11 +126,12 @@ public VCCredentialResponse downloadCredential(String credentialEndpoint, VCCred VCCredentialResponse vcCredentialResponse = restApiClient.postApi(credentialEndpoint, MediaType.APPLICATION_JSON, vcCredentialRequest, VCCredentialResponse.class, accessToken); log.debug("VC Credential Response is -> " + vcCredentialResponse); - if (vcCredentialResponse == null) throw new InvalidCredentialResourceException("VC Credential Issue API not accessible"); + if (vcCredentialResponse == null) + throw new InvalidCredentialResourceException("VC Credential Issue API not accessible"); return vcCredentialResponse; } - public VCCredentialRequest generateVCCredentialRequest(IssuerDTO issuerDTO, CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse, CredentialsSupportedResponse credentialsSupportedResponse, String accessToken, String walletId, String base64EncodedWalletKey,Boolean isLoginFlow) throws Exception { + public VCCredentialRequest generateVCCredentialRequest(IssuerDTO issuerDTO, CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse, CredentialsSupportedResponse credentialsSupportedResponse, String accessToken, String walletId, String base64EncodedWalletKey, Boolean isLoginFlow) throws Exception { String jwt; Map proofTypesSupported = credentialsSupportedResponse.getProofTypesSupported(); @@ -365,13 +366,15 @@ public WalletCredentialResponseDTO generateCredentialResponse(String decryptedCr } // Generate PDF + // keep the datashare url and credential validity as defaults in downloading VC as PDF as logged-in user + // This is because generatePdfForVerifiableCredentials will be used by both logged-in and non-logged-in users ByteArrayInputStream pdfStream = generatePdfForVerifiableCredentials( credentialMetadata.getCredentialType(), vcCredentialResponse, issuerDTO, credentialsSupportedResponse, - credentialMetadata.getDataShareUrl(), - credentialMetadata.getCredentialValidity(), + "", + "-1", locale ); @@ -384,7 +387,8 @@ public WalletCredentialResponseDTO generateCredentialResponse(String decryptedCr } catch (JsonProcessingException e) { log.error("Failed to parse decrypted credential for issuerId: {}, credentialType: {}", credentialMetadata.getIssuerId(), credentialMetadata.getCredentialType(), e); throw new CredentialProcessingException(CREDENTIAL_FETCH_EXCEPTION.getErrorCode(), "Failed to parse decrypted credential"); - } catch (ApiNotAccessibleException | IOException | AuthorizationServerWellknownResponseException | InvalidWellknownResponseException | InvalidIssuerIdException e) { + } catch (ApiNotAccessibleException | IOException | AuthorizationServerWellknownResponseException | + InvalidWellknownResponseException | InvalidIssuerIdException e) { log.error("Failed to fetch issuer details or configuration for issuerId: {}", credentialMetadata.getIssuerId(), e); throw new CredentialProcessingException(CREDENTIAL_FETCH_EXCEPTION.getErrorCode(), "Failed to fetch issuer configuration"); } catch (Exception e) { diff --git a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java index d3d9d6d80..4541b8be6 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java @@ -62,7 +62,6 @@ public class WalletCredentialServiceTest { private final String credentialId = "cred123"; private final String base64Key = "ZHVtbXlrZXkxMjM0NTY3OA=="; // Base64 of "dummykey12345678" private final String locale = "en"; - private final String credentialValidity = "1"; private TokenResponseDTO tokenResponse; private VerifiableCredential verifiableCredential; @@ -98,15 +97,15 @@ public void shouldFetchAndStoreCredentialSuccessfully() throws Exception { expectedResponse.setCredentialId(credentialId); when(walletCredentialsRepository.existsByIssuerIdAndCredentialTypeAndWalletId(mosipIssuerId, credentialType, walletId)).thenReturn(false); - when(credentialProcessor.processAndStoreCredential(tokenResponse, credentialType, walletId, base64Key, credentialValidity, mosipIssuerId, locale)) + when(credentialProcessor.processAndStoreCredential(tokenResponse, credentialType, walletId, base64Key, mosipIssuerId, locale)) .thenReturn(expectedResponse); VerifiableCredentialResponseDTO actualResponse = walletCredentialService.fetchAndStoreCredential( - mosipIssuerId, credentialType, tokenResponse, credentialValidity, locale, walletId, base64Key); + mosipIssuerId, credentialType, tokenResponse, locale, walletId, base64Key); assertEquals(expectedResponse, actualResponse); verify(walletCredentialsRepository).existsByIssuerIdAndCredentialTypeAndWalletId(mosipIssuerId, credentialType, walletId); - verify(credentialProcessor).processAndStoreCredential(tokenResponse, credentialType, walletId, base64Key, credentialValidity, mosipIssuerId, locale); + verify(credentialProcessor).processAndStoreCredential(tokenResponse, credentialType, walletId, base64Key, mosipIssuerId, locale); } @Test @@ -114,7 +113,7 @@ public void shouldThrowDuplicateCredentialExceptionForMosipIssuer() { when(walletCredentialsRepository.existsByIssuerIdAndCredentialTypeAndWalletId("Mosip", credentialType, walletId)).thenReturn(true); CredentialProcessingException exception = assertThrows(CredentialProcessingException.class, () -> - walletCredentialService.fetchAndStoreCredential("Mosip", credentialType, tokenResponse, credentialValidity, locale, walletId, base64Key)); + walletCredentialService.fetchAndStoreCredential("Mosip", credentialType, tokenResponse, locale, walletId, base64Key)); assertEquals(CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), exception.getErrorCode()); assertEquals("credential_download_error --> Duplicate credential for issuer and type", exception.getMessage()); @@ -127,14 +126,14 @@ public void shouldFetchAndStoreNonMosipIssuerCredential() throws Exception { VerifiableCredentialResponseDTO expectedResponse = new VerifiableCredentialResponseDTO(); expectedResponse.setCredentialId(credentialId); - when(credentialProcessor.processAndStoreCredential(tokenResponse, credentialType, walletId, base64Key, credentialValidity, issuerId, locale)) + when(credentialProcessor.processAndStoreCredential(tokenResponse, credentialType, walletId, base64Key, issuerId, locale)) .thenReturn(expectedResponse); VerifiableCredentialResponseDTO actualResponse = walletCredentialService.fetchAndStoreCredential( - issuerId, credentialType, tokenResponse, credentialValidity, locale, walletId, base64Key); + issuerId, credentialType, tokenResponse, locale, walletId, base64Key); assertEquals(expectedResponse, actualResponse); - verify(credentialProcessor).processAndStoreCredential(tokenResponse, credentialType, walletId, base64Key, credentialValidity, issuerId, locale); + verify(credentialProcessor).processAndStoreCredential(tokenResponse, credentialType, walletId, base64Key, issuerId, locale); } @Test @@ -142,16 +141,16 @@ public void shouldThrowExternalServiceUnavailableException() throws Exception { String mosipIssuerId = "Mosip"; // Use Mosip to trigger repository check when(walletCredentialsRepository.existsByIssuerIdAndCredentialTypeAndWalletId(mosipIssuerId, credentialType, walletId)).thenReturn(false); - when(credentialProcessor.processAndStoreCredential(any(), anyString(), anyString(), anyString(), anyString(), anyString(), anyString())) + when(credentialProcessor.processAndStoreCredential(any(), anyString(), anyString(), anyString(), anyString(), anyString())) .thenThrow(new ExternalServiceUnavailableException("SERVICE_UNAVAILABLE", "Service unavailable")); ExternalServiceUnavailableException exception = assertThrows(ExternalServiceUnavailableException.class, () -> - walletCredentialService.fetchAndStoreCredential(mosipIssuerId, credentialType, tokenResponse, credentialValidity, locale, walletId, base64Key)); + walletCredentialService.fetchAndStoreCredential(mosipIssuerId, credentialType, tokenResponse, locale, walletId, base64Key)); assertEquals("SERVICE_UNAVAILABLE", exception.getErrorCode()); assertEquals("SERVICE_UNAVAILABLE --> Service unavailable", exception.getMessage()); verify(walletCredentialsRepository).existsByIssuerIdAndCredentialTypeAndWalletId(mosipIssuerId, credentialType, walletId); - verify(credentialProcessor).processAndStoreCredential(tokenResponse, credentialType, walletId, base64Key, credentialValidity, mosipIssuerId, locale); + verify(credentialProcessor).processAndStoreCredential(tokenResponse, credentialType, walletId, base64Key, mosipIssuerId, locale); } @Test From 3d517532d8705d53358477d14a5f08c9f84547bb Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Mon, 26 May 2025 18:41:01 +0530 Subject: [PATCH 617/860] [INJIWEB-1541] accept info as request body JSON in downloadCredential Signed-off-by: KiruthikaJeyashankar --- .../WalletCredentialsController.java | 13 +-- .../dto/VerifiableCredentialRequestDTO.java | 18 +++ .../mimoto/util/CredentialUtilService.java | 15 +++ .../WalletCredentialsControllerTest.java | 105 ++++++++++-------- 4 files changed, 95 insertions(+), 56 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/dto/VerifiableCredentialRequestDTO.java diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index 27b41edd4..a97cc9bd6 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -3,6 +3,7 @@ import io.mosip.mimoto.constant.SwaggerExampleConstants; import io.mosip.mimoto.constant.SwaggerLiteralConstants; import io.mosip.mimoto.dto.ErrorDTO; +import io.mosip.mimoto.dto.VerifiableCredentialRequestDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; import io.mosip.mimoto.dto.resident.WalletCredentialResponseDTO; @@ -66,7 +67,7 @@ public WalletCredentialsController(WalletCredentialService walletCredentialServi * Downloads and stores a Verifiable Credential in the specified wallet. * * @param walletId The unique identifier of the wallet. - * @param params Query parameters including issuer, credential type, storage expiry, and locale. + * @param verifiableCredentialRequestDTO Request body parameters including issuer, credential type, storage expiry, and locale. * @param httpSession The HTTP session containing wallet key and ID. * @return The stored Verifiable Credential details. * @throws InvalidRequestException If input parameters or session are invalid. @@ -85,16 +86,14 @@ public WalletCredentialsController(WalletCredentialService walletCredentialServi public ResponseEntity downloadCredential( @RequestHeader(value = "Accept-Language", required = false, defaultValue = "en") @Pattern(regexp = "^[a-z]{2}$", message = "Locale must be a 2-letter code") String locale, @PathVariable("walletId") @NotBlank(message = "Wallet ID cannot be blank") String walletId, - // TODO: Extract params map to DTO to handle validation internally - @RequestParam Map params, + @RequestBody VerifiableCredentialRequestDTO verifiableCredentialRequestDTO, HttpSession httpSession) throws InvalidRequestException { WalletUtil.validateWalletId(httpSession, walletId); String base64EncodedWalletKey = WalletUtil.getSessionWalletKey(httpSession); - String issuerId = params.get("issuer"); - String credentialConfigurationId = params.get("credentialConfigurationId"); - String credentialValidity = params.getOrDefault("vcStorageExpiryLimitInTimes", "-1"); + String issuerId = verifiableCredentialRequestDTO.getIssuer(); + String credentialConfigurationId = verifiableCredentialRequestDTO.getCredentialConfigurationId(); if (StringUtils.isBlank(issuerId) || StringUtils.isBlank(credentialConfigurationId)) { log.error("Missing required parameters: issuer or credential"); @@ -104,7 +103,7 @@ public ResponseEntity downloadCredential( log.info("Initiating token call for issuer: {}", issuerId); TokenResponseDTO tokenResponse; try { - tokenResponse = credentialUtilService.getTokenResponse(params, issuerId); + tokenResponse = credentialUtilService.getTokenResponse(verifiableCredentialRequestDTO, issuerId); } catch (ApiNotAccessibleException | IOException | AuthorizationServerWellknownResponseException | InvalidWellknownResponseException e) { log.error("Error fetching token response for issuer: {}", issuerId, e); diff --git a/src/main/java/io/mosip/mimoto/dto/VerifiableCredentialRequestDTO.java b/src/main/java/io/mosip/mimoto/dto/VerifiableCredentialRequestDTO.java new file mode 100644 index 000000000..db74b3b23 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/VerifiableCredentialRequestDTO.java @@ -0,0 +1,18 @@ +package io.mosip.mimoto.dto; + +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +@Data +@Getter +@Setter +public class VerifiableCredentialRequestDTO { + //TODO: Add schema definition + String issuer; + String credentialConfigurationId; + String code; + String grantType; + String redirectUri; + String codeVerifier; +} diff --git a/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java b/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java index 75deeeea0..b97c8a8c9 100644 --- a/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java +++ b/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java @@ -14,6 +14,7 @@ import io.mosip.mimoto.dbentity.CredentialMetadata; import io.mosip.mimoto.dbentity.ProofSigningKey; import io.mosip.mimoto.dto.IssuerDTO; +import io.mosip.mimoto.dto.VerifiableCredentialRequestDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.dto.openid.presentation.PresentationDefinitionDTO; @@ -110,6 +111,10 @@ public void init() { pixelPass = new PixelPass(); } + public TokenResponseDTO getTokenResponse(VerifiableCredentialRequestDTO verifiableCredentialRequest, String issuerId) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { + return getTokenResponse(convertVerifiableCredentialRequestToMap(verifiableCredentialRequest), issuerId); + } + public TokenResponseDTO getTokenResponse(Map params, String issuerId) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { IssuerDTO issuerDTO = issuersService.getIssuerDetails(issuerId); CredentialIssuerConfiguration credentialIssuerConfiguration = issuersService.getIssuerConfiguration(issuerId); @@ -396,6 +401,16 @@ public WalletCredentialResponseDTO generateCredentialResponse(String decryptedCr throw new CredentialProcessingException(CREDENTIAL_FETCH_EXCEPTION.getErrorCode(), "Failed to generate credential PDF"); } } + + private Map convertVerifiableCredentialRequestToMap(VerifiableCredentialRequestDTO verifiableCredentialRequest) { + Map params = new HashMap<>(); + params.put("code", verifiableCredentialRequest.getCode()); + params.put("redirect_uri", verifiableCredentialRequest.getRedirectUri()); + params.put("grant_type", verifiableCredentialRequest.getGrantType()); + params.put("code_verifier", verifiableCredentialRequest.getCodeVerifier()); + + return params; + } } diff --git a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java index 79eb79376..daaa95b96 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.controller; +import io.mosip.mimoto.dto.VerifiableCredentialRequestDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; import io.mosip.mimoto.dto.resident.WalletCredentialResponseDTO; @@ -33,6 +34,7 @@ import static io.mosip.mimoto.exception.ErrorConstants.CREDENTIAL_FETCH_EXCEPTION; import static io.mosip.mimoto.exception.ErrorConstants.RESOURCE_NOT_FOUND; +import static io.mosip.mimoto.util.TestUtilities.createRequestBody; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; @@ -68,11 +70,13 @@ public class WalletCredentialsControllerTest { private final String issuer = "issuer1"; private final String credentialConfigurationId = "type1"; private final String locale = "en"; - private final String vcStorageExpiryLimit = "-1"; + VerifiableCredentialRequestDTO verifiableCredentialRequest; @Before public void setup() { MockitoAnnotations.openMocks(this); + verifiableCredentialRequest = new VerifiableCredentialRequestDTO(); + verifiableCredentialResponseDTO = VerifiableCredentialResponseDTO.builder() .issuerDisplayName("issuerName123") .issuerLogo("issuerLogo") @@ -92,17 +96,16 @@ public void setup() { // Tests for downloadCredential @Test public void shouldDownloadCredentialSuccessfully() throws Exception { - when(credentialUtilService.getTokenResponse(anyMap(), eq(issuer))).thenReturn(new TokenResponseDTO()); - when(walletCredentialService.fetchAndStoreCredential(eq(issuer), eq(credentialConfigurationId), any(), eq(vcStorageExpiryLimit), eq(locale), eq(walletId), eq(walletKey))) + setIssuerAndCredentialConfigurationId(issuer, credentialConfigurationId); + when(credentialUtilService.getTokenResponse(eq(verifiableCredentialRequest), eq(issuer))).thenReturn(new TokenResponseDTO()); + when(walletCredentialService.fetchAndStoreCredential(eq(issuer), eq(credentialConfigurationId), any(), eq(locale), eq(walletId), eq(walletKey))) .thenReturn(verifiableCredentialResponseDTO); mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) - .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .contentType(MediaType.APPLICATION_JSON) .accept(MediaType.APPLICATION_JSON) .header("Accept-Language", locale) - .param("issuer", issuer) - .param("credentialConfigurationId", credentialConfigurationId) - .param("vcStorageExpiryLimitInTimes", vcStorageExpiryLimit) + .content(createRequestBody(verifiableCredentialRequest)) .sessionAttr("wallet_id", walletId) .sessionAttr("wallet_key", walletKey)) .andExpect(status().isOk()) @@ -115,14 +118,13 @@ public void shouldDownloadCredentialSuccessfully() throws Exception { @Test public void shouldReturnErrorResponseWhenSessionDoesNotHaveWalletIdAndKey() throws Exception { + setIssuerAndCredentialConfigurationId(issuer, credentialConfigurationId); mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) - .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .contentType(MediaType.APPLICATION_JSON) .accept(MediaType.APPLICATION_JSON) .header("Accept-Language", locale) - .param("issuer", issuer) - .param("credentialConfigurationId", credentialConfigurationId) - .param("vcStorageExpiryLimitInTimes", vcStorageExpiryLimit) - ) + .content(createRequestBody(verifiableCredentialRequest)) + ) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.errorCode").value("wallet_locked")) .andExpect(jsonPath("$.errorMessage").value("wallet_locked --> Wallet is locked")); @@ -130,47 +132,44 @@ public void shouldReturnErrorResponseWhenSessionDoesNotHaveWalletIdAndKey() thro @Test public void shouldCallServiceWithCorrectParameters() throws Exception { + setIssuerAndCredentialConfigurationId(issuer, credentialConfigurationId); mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) - .contentType(MediaType.APPLICATION_FORM_URLENCODED) - .accept(MediaType.APPLICATION_JSON) - .header("Accept-Language", "fr") - .param("issuer", issuer) - .param("credentialConfigurationId", credentialConfigurationId) - .param("vcStorageExpiryLimitInTimes", vcStorageExpiryLimit) - .sessionAttr("wallet_id", walletId) - .sessionAttr("wallet_key", walletKey)); + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON) + .header("Accept-Language", "fr") + .content(createRequestBody(verifiableCredentialRequest)) + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)); - verify(credentialUtilService).getTokenResponse(argThat(params -> params.get("issuer").equals(issuer) && - params.get("credentialConfigurationId").equals(credentialConfigurationId) && - params.get("vcStorageExpiryLimitInTimes").equals(vcStorageExpiryLimit) - ), eq(issuer)); + verify(credentialUtilService).getTokenResponse(eq(verifiableCredentialRequest), eq(issuer)); verify(walletCredentialService - ).fetchAndStoreCredential(eq(issuer), eq(credentialConfigurationId), any(), eq(vcStorageExpiryLimit), eq("fr"), eq(walletId), eq(walletKey)); + ).fetchAndStoreCredential(eq(issuer), eq(credentialConfigurationId), any(), eq("fr"), eq(walletId), eq(walletKey)); } @Test public void shouldSetDefaultAndProceedWhenOptionalRequestParametersAreNotPassed() throws Exception { + setIssuerAndCredentialConfigurationId(issuer, credentialConfigurationId); mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) - .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .contentType(MediaType.APPLICATION_JSON) .accept(MediaType.APPLICATION_JSON) - .param("issuer", issuer) - .param("credentialConfigurationId", credentialConfigurationId) + .content(createRequestBody(verifiableCredentialRequest)) .sessionAttr("wallet_id", walletId) .sessionAttr("wallet_key", walletKey)); // Default value for vcStorageExpiryLimit is -1 and locale is "en" - verify(walletCredentialService).fetchAndStoreCredential(any(), any(), any(), eq("-1"), eq("en"), eq(walletId), eq(walletKey)); + verify(walletCredentialService).fetchAndStoreCredential(any(), any(), any(), eq("en"), eq(walletId), eq(walletKey)); } @Test public void shouldThrowExceptionWhenInvalidLocaleIsPassed() throws Exception { + setIssuerAndCredentialConfigurationId(issuer, credentialConfigurationId); + mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) - .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .contentType(MediaType.APPLICATION_JSON) .accept(MediaType.APPLICATION_JSON) .header("Accept-Language", "eng") // Three letter language code passed which is not valid - .param("issuer", issuer) - .param("credentialConfigurationId", credentialConfigurationId) .header("Accept-Language", "invalid") + .content(createRequestBody(verifiableCredentialRequest)) .sessionAttr("wallet_id", walletId) .sessionAttr("wallet_key", walletKey)) .andExpect(status().isBadRequest()) @@ -181,12 +180,12 @@ public void shouldThrowExceptionWhenInvalidLocaleIsPassed() throws Exception { @Test public void shouldThrowInvalidRequestForWalletIdMismatch() throws Exception { when(httpSession.getAttribute("wallet_id")).thenReturn("differentWalletId"); + setIssuerAndCredentialConfigurationId(issuer, credentialConfigurationId); mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) .accept(MediaType.APPLICATION_JSON) - .contentType(MediaType.APPLICATION_FORM_URLENCODED) - .param("issuer", issuer) - .param("credentialConfigurationId", credentialConfigurationId) + .contentType(MediaType.APPLICATION_JSON) + .content(createRequestBody(verifiableCredentialRequest)) .sessionAttr("wallet_id", "differentWalletId") .sessionAttr("wallet_key", walletKey)) .andExpect(status().isBadRequest()) @@ -197,12 +196,12 @@ public void shouldThrowInvalidRequestForWalletIdMismatch() throws Exception { @Test public void shouldThrowInvalidRequestForMissingWalletKey() throws Exception { when(httpSession.getAttribute("wallet_key")).thenReturn(null); + setIssuerAndCredentialConfigurationId(issuer, credentialConfigurationId); mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) .accept(MediaType.APPLICATION_JSON) - .contentType(MediaType.APPLICATION_FORM_URLENCODED) - .param("issuer", issuer) - .param("credentialConfigurationId", credentialConfigurationId) + .contentType(MediaType.APPLICATION_JSON) + .content(createRequestBody(verifiableCredentialRequest)) .sessionAttr("wallet_id", walletId)) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.errorCode").value("invalid_request")) @@ -211,10 +210,12 @@ public void shouldThrowInvalidRequestForMissingWalletKey() throws Exception { @Test public void shouldThrowInvalidRequestForMissingIssuerOrCredentialConfigurationId() throws Exception { + setIssuerAndCredentialConfigurationId(null, null); mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) .accept(MediaType.APPLICATION_JSON) - .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .contentType(MediaType.APPLICATION_JSON) .header("Accept-Language", "fr") + .content(createRequestBody(verifiableCredentialRequest)) .sessionAttr("wallet_id", walletId) .sessionAttr("wallet_key", walletKey)) .andExpect(status().isBadRequest()) @@ -224,10 +225,11 @@ public void shouldThrowInvalidRequestForMissingIssuerOrCredentialConfigurationId @Test public void shouldThrowInvalidRequestForMissingCredentialConfigurationId() throws Exception { + setIssuerAndCredentialConfigurationId(issuer, null); mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) .accept(MediaType.APPLICATION_JSON) - .contentType(MediaType.APPLICATION_FORM_URLENCODED) - .param("issuer", issuer) + .contentType(MediaType.APPLICATION_JSON) + .content(createRequestBody(verifiableCredentialRequest)) .header("Accept-Language", "fr") .sessionAttr("wallet_id", walletId) .sessionAttr("wallet_key", walletKey)) @@ -238,13 +240,13 @@ public void shouldThrowInvalidRequestForMissingCredentialConfigurationId() throw @Test public void shouldThrowServiceUnavailableForTokenResponseFailure() throws Exception { - when(credentialUtilService.getTokenResponse(anyMap(), eq(issuer))) + setIssuerAndCredentialConfigurationId(issuer, credentialConfigurationId); + when(credentialUtilService.getTokenResponse(eq(verifiableCredentialRequest), eq(issuer))) .thenThrow(new ApiNotAccessibleException("API not accessible")); mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) - .contentType(MediaType.APPLICATION_FORM_URLENCODED) - .param("issuer", issuer) - .param("credentialConfigurationId", credentialConfigurationId) + .contentType(MediaType.APPLICATION_JSON) + .content(createRequestBody(verifiableCredentialRequest)) .sessionAttr("wallet_id", walletId) .sessionAttr("wallet_key", walletKey)) .andExpect(status().isServiceUnavailable()) @@ -253,14 +255,14 @@ public void shouldThrowServiceUnavailableForTokenResponseFailure() throws Except @Test public void shouldThrowServiceUnavailableForExternalServiceFailure() throws Exception { + setIssuerAndCredentialConfigurationId(issuer, credentialConfigurationId); when(credentialUtilService.getTokenResponse(anyMap(), eq(issuer))).thenReturn(new TokenResponseDTO()); - when(walletCredentialService.fetchAndStoreCredential(anyString(), anyString(), any(), anyString(), anyString(), anyString(), anyString())) + when(walletCredentialService.fetchAndStoreCredential(anyString(), anyString(), any(), anyString(), anyString(), anyString())) .thenThrow(new ExternalServiceUnavailableException("Service unavailable", "Service unavailable")); mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) - .contentType(MediaType.APPLICATION_FORM_URLENCODED) - .param("issuer", issuer) - .param("credentialConfigurationId", credentialConfigurationId) + .contentType(MediaType.APPLICATION_JSON) + .content(createRequestBody(verifiableCredentialRequest)) .sessionAttr("wallet_id", walletId) .sessionAttr("wallet_key", walletKey)) .andExpect(status().isServiceUnavailable()) @@ -470,4 +472,9 @@ public void shouldThrowInvalidRequestForWalletIdMismatchInDeleteCredential() thr .andExpect(jsonPath("$.errorCode").value("invalid_request")) .andExpect(jsonPath("$.errorMessage").value("Invalid Wallet ID. Session and request Wallet ID do not match")); } + + private void setIssuerAndCredentialConfigurationId(String issuer, String credentialConfigurationId) { + verifiableCredentialRequest.setIssuer(issuer); + verifiableCredentialRequest.setCredentialConfigurationId(credentialConfigurationId); + } } \ No newline at end of file From c549a52b01aca716abd7c216eddb22b656423391 Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Mon, 26 May 2025 19:16:18 +0530 Subject: [PATCH 618/860] [INJIWEB-1541] move validation of downloadCredentials requestbody to VerifiableCredentialRequestDTO GlobalExceptionHandler handleHandlerMethodValidationException method will return error_message as per the customized error message Signed-off-by: KiruthikaJeyashankar --- .../controller/WalletCredentialsController.java | 10 ++-------- .../mimoto/dto/VerifiableCredentialRequestDTO.java | 3 +++ .../mosip/mimoto/util/GlobalExceptionHandler.java | 13 +++++++++---- .../controller/WalletCredentialsControllerTest.java | 8 ++++---- 4 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index a97cc9bd6..bf6d3a891 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -25,10 +25,10 @@ import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpSession; +import jakarta.validation.Valid; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Pattern; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.InputStreamResource; import org.springframework.http.HttpHeaders; @@ -39,7 +39,6 @@ import java.io.IOException; import java.util.List; -import java.util.Map; import java.util.Objects; import static io.mosip.mimoto.exception.ErrorConstants.CREDENTIAL_DOWNLOAD_EXCEPTION; @@ -86,7 +85,7 @@ public WalletCredentialsController(WalletCredentialService walletCredentialServi public ResponseEntity downloadCredential( @RequestHeader(value = "Accept-Language", required = false, defaultValue = "en") @Pattern(regexp = "^[a-z]{2}$", message = "Locale must be a 2-letter code") String locale, @PathVariable("walletId") @NotBlank(message = "Wallet ID cannot be blank") String walletId, - @RequestBody VerifiableCredentialRequestDTO verifiableCredentialRequestDTO, + @RequestBody @Valid VerifiableCredentialRequestDTO verifiableCredentialRequestDTO, HttpSession httpSession) throws InvalidRequestException { WalletUtil.validateWalletId(httpSession, walletId); @@ -95,11 +94,6 @@ public ResponseEntity downloadCredential( String issuerId = verifiableCredentialRequestDTO.getIssuer(); String credentialConfigurationId = verifiableCredentialRequestDTO.getCredentialConfigurationId(); - if (StringUtils.isBlank(issuerId) || StringUtils.isBlank(credentialConfigurationId)) { - log.error("Missing required parameters: issuer or credential"); - throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Issuer and credentialConfigurationId are required"); - } - log.info("Initiating token call for issuer: {}", issuerId); TokenResponseDTO tokenResponse; try { diff --git a/src/main/java/io/mosip/mimoto/dto/VerifiableCredentialRequestDTO.java b/src/main/java/io/mosip/mimoto/dto/VerifiableCredentialRequestDTO.java index db74b3b23..b2392ce95 100644 --- a/src/main/java/io/mosip/mimoto/dto/VerifiableCredentialRequestDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/VerifiableCredentialRequestDTO.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.dto; +import jakarta.validation.constraints.NotBlank; import lombok.Data; import lombok.Getter; import lombok.Setter; @@ -9,7 +10,9 @@ @Setter public class VerifiableCredentialRequestDTO { //TODO: Add schema definition + @NotBlank(message = "Missing required parameters: issuerId") String issuer; + @NotBlank(message = "Missing required parameters: credentialConfigurationId") String credentialConfigurationId; String code; String grantType; diff --git a/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java b/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java index 956b1b458..3870357a5 100644 --- a/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java +++ b/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java @@ -5,8 +5,8 @@ import io.mosip.mimoto.exception.ExternalServiceUnavailableException; import io.mosip.mimoto.exception.InvalidRequestException; import lombok.extern.slf4j.Slf4j; +import org.springframework.context.MessageSourceResolvable; import org.springframework.dao.DataAccessResourceFailureException; -import org.springframework.data.redis.RedisConnectionFailureException; import org.springframework.http.HttpStatus; import org.springframework.http.converter.HttpMessageNotReadableException; import org.springframework.web.bind.annotation.ControllerAdvice; @@ -16,6 +16,8 @@ import org.springframework.web.method.annotation.HandlerMethodValidationException; import org.springframework.web.servlet.NoHandlerFoundException; +import java.util.stream.Collectors; + @ControllerAdvice @ResponseBody @Slf4j @@ -81,8 +83,11 @@ public ErrorDTO handleNoHandlerFoundException(NoHandlerFoundException ex) { @ResponseStatus(HttpStatus.BAD_REQUEST) public ErrorDTO handleHandlerMethodValidationException(HandlerMethodValidationException ex) { log.error("Validation error in handler method: {}", ex.getMessage()); - //TODO: You might want to extract more detailed information if available in this exception - return new ErrorDTO(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Validation error in request parameters"); + String errorMessage = ex.getAllValidationResults() + .stream() + .flatMap(r -> r.getResolvableErrors().stream()) + .map(MessageSourceResolvable::getDefaultMessage) + .collect(Collectors.joining(", ")); + return new ErrorDTO(ErrorConstants.INVALID_REQUEST.getErrorCode(), errorMessage); } - } diff --git a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java index daaa95b96..88a1bb6ac 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java @@ -174,7 +174,7 @@ public void shouldThrowExceptionWhenInvalidLocaleIsPassed() throws Exception { .sessionAttr("wallet_key", walletKey)) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.errorCode").value("invalid_request")) - .andExpect(jsonPath("$.errorMessage").value("Validation error in request parameters")); + .andExpect(jsonPath("$.errorMessage").value("Locale must be a 2-letter code")); } @Test @@ -209,7 +209,7 @@ public void shouldThrowInvalidRequestForMissingWalletKey() throws Exception { } @Test - public void shouldThrowInvalidRequestForMissingIssuerOrCredentialConfigurationId() throws Exception { + public void shouldThrowInvalidRequestForMissingIssuerAndCredentialConfigurationId() throws Exception { setIssuerAndCredentialConfigurationId(null, null); mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) .accept(MediaType.APPLICATION_JSON) @@ -220,7 +220,7 @@ public void shouldThrowInvalidRequestForMissingIssuerOrCredentialConfigurationId .sessionAttr("wallet_key", walletKey)) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.errorCode").value("invalid_request")) - .andExpect(jsonPath("$.errorMessage").value("invalid_request --> Issuer and credentialConfigurationId are required")); + .andExpect(jsonPath("$.errorMessage").value("Missing required parameters: issuerId, Missing required parameters: credentialConfigurationId")); } @Test @@ -235,7 +235,7 @@ public void shouldThrowInvalidRequestForMissingCredentialConfigurationId() throw .sessionAttr("wallet_key", walletKey)) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.errorCode").value("invalid_request")) - .andExpect(jsonPath("$.errorMessage").value("invalid_request --> Issuer and credentialConfigurationId are required")); + .andExpect(jsonPath("$.errorMessage").value("Missing required parameters: credentialConfigurationId")); } @Test From dd8939af894c2a8ea9f8e7cd9b95270acf7ea31a Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Mon, 26 May 2025 19:25:04 +0530 Subject: [PATCH 619/860] [INJIWEB-1541] update downloadCredentials api doc GlobalExceptionHandler handleHandlerMethodValidationException method will return error_message as per the customized error message Signed-off-by: KiruthikaJeyashankar --- .../WalletCredentialsController.java | 53 +++++++++++-------- .../WalletCredentialsControllerTest.java | 14 ++++- 2 files changed, 45 insertions(+), 22 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index bf6d3a891..a6d7ea65f 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -65,18 +65,28 @@ public WalletCredentialsController(WalletCredentialService walletCredentialServi /** * Downloads and stores a Verifiable Credential in the specified wallet. * - * @param walletId The unique identifier of the wallet. + * @param walletId The unique identifier of the wallet. * @param verifiableCredentialRequestDTO Request body parameters including issuer, credential type, storage expiry, and locale. - * @param httpSession The HTTP session containing wallet key and ID. + * @param httpSession The HTTP session containing wallet key and ID. * @return The stored Verifiable Credential details. * @throws InvalidRequestException If input parameters or session are invalid. */ @Operation(summary = "Download and store a Verifiable Credential under a specific Wallet", description = "This API is secured using session-based authentication. Upon receiving a request, the session ID is extracted from the Cookie header and used to retrieve session details from Redis for authentication. It then retrieves the wallet key from the session and use it to decrypt the signing algorithm's secret key(which is used for signing the JWT in credential request) and encrypt the downloaded Verifiable Credential. If the process completes successfully, the credential is stored in the database and certain fields will be returned in the response. In case of any issues, an appropriate error response is returned.", operationId = "downloadCredential", security = @SecurityRequirement(name = "SessionAuth"), parameters = { - @Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet", schema = @Schema(type = "string")), - @Parameter(name = "issuer", in = ParameterIn.QUERY, required = true, description = "The identifier of the issuer", schema = @Schema(type = "string")), - @Parameter(name = "credentialConfigurationId", in = ParameterIn.QUERY, required = true, description = "The type of the credential", schema = @Schema(type = "string")), - @Parameter(name = "vcStorageExpiryLimitInTimes", in = ParameterIn.QUERY, description = "The expiration limit for the Verifiable Credential storage", schema = @Schema(type = "string", defaultValue = "-1")), - @Parameter(name = "Accept-Language", in = ParameterIn.HEADER, description = "The locale for the Verifiable Credential. It follows 2 letter language code", schema = @Schema(type = "string", defaultValue = "en"))}) + @Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet", schema = @Schema(type = "string")), + @Parameter(name = "Accept-Language", in = ParameterIn.HEADER, description = "The locale for the Verifiable Credential. It follows 2 letter language code", schema = @Schema(type = "string", defaultValue = "en"))}, + requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody( + required = true, + description = "Request body parameters including issuer, credential type, storage expiry, and locale.", + content = @Content( + mediaType = "application/json", + schema = @Schema(implementation = VerifiableCredentialRequestDTO.class), + examples = @ExampleObject( + name = "VerifiableCredentialRequest Example", + value = "{ \"issuer\": \"issuerId\", \"credentialConfigurationId\": \"MockVerifiableCredential\", \"code\": \"authCode\", \"grantType\": \"authorization_code\", \"redirectUri\": \"https://example.com/cb\", \"codeVerifier\": \"verifier\" }" + ) + ) + ) + ) @ApiResponse(responseCode = "200", description = "Verifiable Credential downloaded and stored successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = VerifiableCredentialResponseDTO.class))) @ApiResponse(responseCode = "400", description = "Bad request - Wallet key is null / blank or Wallet ID is null / blank / mismatch with session Wallet ID or required params are missing / invalid", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "Invalid Wallet Id", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Invalid Wallet ID. Session and request Wallet ID do not match\"}"), @ExampleObject(name = "Wallet key not found in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet key not found in session\"}"), @ExampleObject(name = "Missing required params", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Issuer and credentialConfigurationId are required\"}"), @ExampleObject(name = "Wallet ID is null or blank", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet ID cannot be null or blank\"}"), @ExampleObject(name = "Issuer ID is null or blank", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Issuer ID cannot be null or blank\"}")})) @ApiResponse(responseCode = "500", description = "Internal server error - error occurred while serializing the VC response, encrypting the credential, or storing it", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "Credential already exists", value = "{\"errorCode\": \"credential_download_error\", \"errorMessage\": \"Duplicate credential for issuer and type\"}"), @ExampleObject(name = "Issuer config error", value = "{\"errorCode\": \"credential_download_error\", \"errorMessage\": \"Unable to fetch issuer configuration\"}"), @ExampleObject(name = "Failed to generate VC request", value = "{\"errorCode\": \"credential_download_error\", \"errorMessage\": \"Unable to generate credential request\"}"), @ExampleObject(name = "Signature verification failed", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"), @ExampleObject(name = "Unexpected server error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}")})) @@ -124,15 +134,15 @@ public ResponseEntity downloadCredential( /** * Fetches all credentials for a given wallet. * - * @param walletId The unique identifier of the wallet. - * @param locale The locale for credential retrieval. + * @param walletId The unique identifier of the wallet. + * @param locale The locale for credential retrieval. * @param httpSession The HTTP session containing wallet key and ID. * @return List of Verifiable Credential details. * @throws InvalidRequestException If session or wallet ID is invalid. */ @Operation(summary = "Fetch all credentials for the given wallet", description = "This API is secured using session-based authentication. When a request is made, the session ID is extracted from the Cookie header and used to fetch session details from Redis for authentication. It then retrieves the wallet key from the session and uses it to decrypt all stored Verifiable Credentials for the given wallet. If successful, it returns a list of credentials otherwise an appropriate error is returned.", operationId = "fetchAllCredentialsForWallet", security = @SecurityRequirement(name = "SessionAuth"), parameters = { - @Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the user's wallet from where the credential will be fetched", schema = @Schema(type = "string")), - @Parameter(name = "Accept-Language", in = ParameterIn.HEADER, description = "Locale is used to determine the language in which credentials should be rendered. It follows 2 letter language code", schema = @Schema(type = "string"))}) + @Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the user's wallet from where the credential will be fetched", schema = @Schema(type = "string")), + @Parameter(name = "Accept-Language", in = ParameterIn.HEADER, description = "Locale is used to determine the language in which credentials should be rendered. It follows 2 letter language code", schema = @Schema(type = "string"))}) @ApiResponse(responseCode = "200", description = "Credentials retrieved successfully", content = @Content(mediaType = "application/json", array = @ArraySchema(schema = @Schema(implementation = VerifiableCredentialResponseDTO.class)), examples = @ExampleObject(value = SwaggerExampleConstants.FETCH_ALL_CREDENTIALS_OF_WALLET_SUCCESS))) @ApiResponse(responseCode = "400", description = "Bad request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "Invalid Wallet Id", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Invalid Wallet ID. Session and request Wallet ID do not match\"}"), @ExampleObject(name = "Wallet key not found in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet key not found in session\"}")})) @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"))) @@ -157,19 +167,19 @@ public ResponseEntity> fetchAllCredentials /** * Fetches a specific Verifiable Credential as a PDF. * - * @param walletId The unique identifier of the wallet. + * @param walletId The unique identifier of the wallet. * @param credentialId The unique identifier of the credential. - * @param locale The locale for credential retrieval. - * @param action The action (inline or download) for PDF display. - * @param httpSession The HTTP session containing wallet key and ID. + * @param locale The locale for credential retrieval. + * @param action The action (inline or download) for PDF display. + * @param httpSession The HTTP session containing wallet key and ID. * @return The Verifiable Credential as a PDF stream. * @throws InvalidRequestException If session or parameters are invalid. */ @Operation(summary = "Fetch a specific Verifiable Credential", description = "This API is protected using session-based authentication. When a request is received, the session ID is extracted from the Cookie header and used to fetch session data from Redis for user authentication. Upon successful authentication, the wallet key is retrieved from the session and used to decrypt the credential data obtained from the database.\n\nThe API retrieves a specific Verifiable Credential based on the provided wallet ID and credential ID. Depending on the action query parameter (inline or download) received in the request, the Content-Disposition header in the response is adjusted to either display the credential in the browser or prompt a file download. On success, the API returns the credential as a PDF byte stream. In case of any errors, an appropriate error response is returned.", operationId = "fetchVerifiableCredentialById", security = @SecurityRequirement(name = "SessionAuth"), parameters = { - @Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the user's wallet", schema = @Schema(type = "string")), - @Parameter(name = "credentialId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the Verifiable Credential to be retrieved", schema = @Schema(type = "string")), - @Parameter(name = "Accept-Language", in = ParameterIn.QUERY, required = true, description = "Language preference in which the user expects the Verifiable Credential to be rendered", schema = @Schema(type = "string")), - @Parameter(name = "action", in = ParameterIn.QUERY, description = "Controls how the credential should be displayed. If sent as download, the response will include a header to download the file. Defaults to inline.", schema = @Schema(type = "string", defaultValue = "inline"))}) + @Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the user's wallet", schema = @Schema(type = "string")), + @Parameter(name = "credentialId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the Verifiable Credential to be retrieved", schema = @Schema(type = "string")), + @Parameter(name = "Accept-Language", in = ParameterIn.QUERY, required = true, description = "Language preference in which the user expects the Verifiable Credential to be rendered", schema = @Schema(type = "string")), + @Parameter(name = "action", in = ParameterIn.QUERY, description = "Controls how the credential should be displayed. If sent as download, the response will include a header to download the file. Defaults to inline.", schema = @Schema(type = "string", defaultValue = "inline"))}) @ApiResponse(responseCode = "200", description = "Verifiable Credential fetched successfully", headers = @Header(name = HttpHeaders.CONTENT_DISPOSITION, description = "Indicates if the verifiable credential is displayed inline or downloaded", schema = @Schema(type = "string", example = "inline; filename=\"credential.pdf\"")), content = @Content(mediaType = "application/pdf", schema = @Schema(type = "string", format = "binary"), examples = @ExampleObject(value = "PDF content in Binary Format"))) @ApiResponse(responseCode = "400", description = "Bad request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "Invalid Wallet Id", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Invalid Wallet ID. Session and request Wallet ID do not match\"}"), @ExampleObject(name = "Wallet key not found in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet key not found in session\"}")})) @ApiResponse(responseCode = "404", description = "Not Found - Credential not found for given Wallet ID and Credential ID", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "No credentials found", value = "{\"errorCode\": \"resource_not_found\", \"errorMessage\": \"The requested resource doesn’t exist.\"}"))) @@ -183,7 +193,7 @@ public ResponseEntity getVerifiableCredential( @RequestHeader(value = "Accept-Language", defaultValue = "en") @Pattern(regexp = "^[a-z]{2}$", message = "Locale must be a 2-letter code") String locale, @RequestParam(value = "action", defaultValue = "inline") @Pattern(regexp = "^(inline|download)$", message = "Action must be 'inline' or 'download'") String action, HttpSession httpSession) throws InvalidRequestException { - if(!Objects.equals(accept, "application/pdf")) { + if (!Objects.equals(accept, "application/pdf")) { log.error("Invalid Accept header: {}", accept); return Utilities.getErrorResponseEntityWithoutWrapper( new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Accept header must be application/pdf"), @@ -218,10 +228,11 @@ public ResponseEntity getVerifiableCredential( e, e.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); } } + /** * Deletes a credential by its ID * - * @param walletId The ID of the wallet that owns the credential + * @param walletId The ID of the wallet that owns the credential * @param credentialId The ID of the credential to delete * @return ResponseEntity with HTTP status 200 if successful, 404 if credential not found, or 500 for other errors */ diff --git a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java index 88a1bb6ac..840e35074 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.controller; +import com.jayway.jsonpath.JsonPath; import io.mosip.mimoto.dto.VerifiableCredentialRequestDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; @@ -35,6 +36,8 @@ import static io.mosip.mimoto.exception.ErrorConstants.CREDENTIAL_FETCH_EXCEPTION; import static io.mosip.mimoto.exception.ErrorConstants.RESOURCE_NOT_FOUND; import static io.mosip.mimoto.util.TestUtilities.createRequestBody; +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; @@ -220,7 +223,16 @@ public void shouldThrowInvalidRequestForMissingIssuerAndCredentialConfigurationI .sessionAttr("wallet_key", walletKey)) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.errorCode").value("invalid_request")) - .andExpect(jsonPath("$.errorMessage").value("Missing required parameters: issuerId, Missing required parameters: credentialConfigurationId")); + .andExpect(result -> { + String errorMessage = JsonPath.read(result.getResponse().getContentAsString(), "$.errorMessage"); + String[] messages = errorMessage.split(",\\s*"); + + assertEquals(2, messages.length); + assertThat(messages).anySatisfy(msg -> + assertThat(msg.trim()).isEqualTo("Missing required parameters: issuerId")); + assertThat(messages).anySatisfy(msg -> + assertThat(msg.trim()).isEqualTo("Missing required parameters: credentialConfigurationId")); + }); } @Test From e36435be0de73bd73bf1c79b6c0e16e7afe71b92 Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Mon, 26 May 2025 22:35:31 +0530 Subject: [PATCH 620/860] [INJIWEB-1541] add users/me api functionality: Retrieves user profile information, first checking the cache and then the database if needed Signed-off-by: KiruthikaJeyashankar --- .../config/mimoto-default.properties | 2 +- .../mimoto/controller/UsersController.java | 101 ++++---- .../resources/application-default.properties | 2 +- .../resources/application-local.properties | 2 +- .../controller/UsersControllerTest.java | 215 +++++++----------- 5 files changed, 137 insertions(+), 185 deletions(-) diff --git a/docker-compose/config/mimoto-default.properties b/docker-compose/config/mimoto-default.properties index 05528ba4c..bf45d120d 100644 --- a/docker-compose/config/mimoto-default.properties +++ b/docker-compose/config/mimoto-default.properties @@ -363,5 +363,5 @@ spring.session.redis.namespace=injiweb:session: mosip.security.ignore-auth-urls=/safetynet/**,/actuator/**,/swagger-ui/**,/v3/api-docs/**,\ /allProperties,/credentials/**,/credentialshare/**,/binding-otp,/wallet-binding,/get-token/**,\ - /issuers,/issuers/**,/authorize,/req/otp,/vid,/req/auth/**,/req/individualId/otp,/aid/get-individual-id,/users/me/cache,\ + /issuers,/issuers/**,/authorize,/req/otp,/vid,/req/auth/**,/req/individualId/otp,/aid/get-individual-id,\ /verifiers, /auth/*/token-login diff --git a/src/main/java/io/mosip/mimoto/controller/UsersController.java b/src/main/java/io/mosip/mimoto/controller/UsersController.java index 80888571d..739f947d9 100644 --- a/src/main/java/io/mosip/mimoto/controller/UsersController.java +++ b/src/main/java/io/mosip/mimoto/controller/UsersController.java @@ -5,7 +5,6 @@ import io.mosip.mimoto.constant.SwaggerLiteralConstants; import io.mosip.mimoto.dbentity.UserMetadata; import io.mosip.mimoto.dto.ErrorDTO; -import io.mosip.mimoto.dto.mimoto.CachedUserMetadataDTO; import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; import io.mosip.mimoto.exception.DecryptionException; import io.mosip.mimoto.exception.ErrorConstants; @@ -31,9 +30,6 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import static io.mosip.mimoto.exception.ErrorConstants.SESSION_EXPIRED_OR_INVALID; -import static io.mosip.mimoto.util.Utilities.getErrorResponseEntityFromPlatformErrorMessage; - @Slf4j @RestController @RequestMapping(value = "/users/me") @@ -45,64 +41,61 @@ public class UsersController { @Autowired private EncryptionService encryptionService; - @Operation(summary = "Retrieve user metadata from the database", description = "This API is secured using session-based authentication. When a request is made, the server retrieves the session ID from the Cookie header and uses it to fetch session details from Redis. From the session, it extracts the user's unique identifier (typically the sub field provided by the identity provider) along with the clientRegistrationId. These values are then used to retrieve the user's metadata from the database. If successful, the API returns the user's profile information. If any issue occurs such as missing user data or server error then an appropriate error response is returned.", operationId = "getUserProfileFromDB", security = @SecurityRequirement(name = "SessionAuth")) - @ApiResponse(responseCode = "200", description = "User profile retrieved successfully from the Database", content = @Content(mediaType = "application/json", schema = @Schema(implementation = UserMetadataDTO.class), examples = @ExampleObject(name = "Success response", value = SwaggerExampleConstants.FETCH_USER_PROFILE_SUCCESS))) - @ApiResponse(responseCode = "404", description = "User data not found in the database", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "User not found in the Database", value = "{\"errorCode\": \"invalid_user\", \"errorMessage\": \"User not found. Please check your credentials or login again\"}"))) - @ApiResponse(responseCode = "500", description = "Internal server error - any error occurred while decrypting the data or fetching the data from the database", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"))) - @ApiResponse(responseCode = "503", description = "Service unavailable", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Database connection failure", value = "{\"errorCode\": \"database_unavailable\", \"errorMessage\": \"Failed to connect to the database\"}"))) - @GetMapping("/db") - public ResponseEntity getUserProfile(Authentication authentication, HttpSession session) { + /** + * Retrieves user profile information, first checking the cache and then the database if needed + * + * @param authentication The authentication object containing user information + * @param session The HTTP session + * @return ResponseEntity containing user metadata + */ + @Operation(summary = "Retrieve user metadata", description = "First attempts to retrieve user metadata from the session cache. If not available, fetches from the database. This API is secured using session-based authentication.", operationId = "getUserProfile", security = @SecurityRequirement(name = "SessionAuth")) + @ApiResponse(responseCode = "200", description = "User profile retrieved successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = UserMetadataDTO.class), examples = @ExampleObject(name = "Success response", value = SwaggerExampleConstants.FETCH_USER_PROFILE_SUCCESS))) + @ApiResponse(responseCode = "404", description = "User data not found", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "User not found", value = "{\"errorCode\": \"invalid_user\", \"errorMessage\": \"User not found. Please check your credentials or login again\"}"))) + @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"))) + @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity getUserProfileInfo(Authentication authentication, HttpSession session) { + UserMetadataDTO userMetadataDTO = (UserMetadataDTO) session.getAttribute(SessionKeys.USER_METADATA); - String identityProvider = (String) session.getAttribute("clientRegistrationId"); - UserMetadata userMetadata = null; - try { - userMetadata = fetchUserMetadata(authentication.getName(), identityProvider); - } catch (OAuth2AuthenticationException exception) { - log.error("Error occurred while retrieving user profile : ", exception); - return Utilities.getErrorResponseEntityWithoutWrapper(exception, ErrorConstants.INVALID_USER.getErrorCode(), exception.getStatus(), null); - } + if (userMetadataDTO == null) { + log.info("User metadata not found in cache, fetching from database"); + String identityProvider = (String) session.getAttribute("clientRegistrationId"); + UserMetadata userMetadata; + try { + userMetadata = fetchUserMetadata(authentication.getName(), identityProvider); - UserMetadataDTO userMetadataDTO = null; - try { - userMetadataDTO = new UserMetadataDTO(encryptionService.decrypt(userMetadata.getDisplayName()), - encryptionService.decrypt(userMetadata.getProfilePictureUrl()), - encryptionService.decrypt(userMetadata.getEmail())); - } catch (DecryptionException e) { - throw new RuntimeException(e); + userMetadataDTO = new UserMetadataDTO( + encryptionService.decrypt(userMetadata.getDisplayName()), + encryptionService.decrypt(userMetadata.getProfilePictureUrl()), + encryptionService.decrypt(userMetadata.getEmail()) + ); + + // Store in session for future use + session.setAttribute(SessionKeys.USER_METADATA, userMetadataDTO); + } catch (OAuth2AuthenticationException exception) { + log.error("Error occurred while retrieving user profile: ", exception); + return Utilities.getErrorResponseEntityWithoutWrapper( + exception, + ErrorConstants.INVALID_USER.getErrorCode(), + exception.getStatus(), + MediaType.APPLICATION_JSON + ); + } catch (DecryptionException e) { + log.error("Error occurred while decrypting user data: ", e); + return Utilities.getErrorResponseEntityWithoutWrapper( + new RuntimeException("Failed to process user data"), + ErrorConstants.INTERNAL_SERVER_ERROR.getErrorCode(), + HttpStatus.INTERNAL_SERVER_ERROR, + MediaType.APPLICATION_JSON + ); + } + } else { + log.info("Retrieved user metadata from cache"); } return ResponseEntity.status(HttpStatus.OK).body(userMetadataDTO); - } private UserMetadata fetchUserMetadata(String providerSubjectId, String identityProvider) throws OAuth2AuthenticationException { return userMetadataRepository.findByProviderSubjectIdAndIdentityProvider(providerSubjectId, identityProvider).orElseThrow(() -> new OAuth2AuthenticationException(ErrorConstants.INVALID_USER.getErrorCode(), "User not found. Please check your credentials or login again", HttpStatus.NOT_FOUND)); } - - @Operation(summary = "Retrieve user metadata from the stored redis session", description = "This API is secured using session-based authentication. When a request is made, the server retrieves the session ID from the Cookie header and uses it to fetch session details from Redis. It then attempts to retrieve the user's metadata directly from the session. If the metadata is available, the API returns the user's profile information otherwise an appropriate error response is returned.", operationId = "getUserProfileFromCache", security = @SecurityRequirement(name = "SessionAuth")) - @ApiResponse(responseCode = "200", description = "User profile retrieved successfully from the session", content = @Content(mediaType = "application/json", schema = @Schema(implementation = CachedUserMetadataDTO.class), examples = @ExampleObject(name = "Success response", value = SwaggerExampleConstants.FETCH_USER_CACHE_PROFILE_SUCCESS))) - @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "User metadata not found in session", value = "{\"errorCode\": \"session_invalid_or_expired\", \"errorMessage\": \"User session is missing or expired. Please log in again.\"}"))) - @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"))) - @GetMapping("/cache") - public ResponseEntity getUserProfileFromCache(HttpSession session) { - - UserMetadataDTO userMetadataDTO = (UserMetadataDTO) session.getAttribute(SessionKeys.USER_METADATA); - if (userMetadataDTO == null) { - log.error("User info is not present in the session"); - return getErrorResponseEntityFromPlatformErrorMessage(SESSION_EXPIRED_OR_INVALID, HttpStatus.UNAUTHORIZED, MediaType.APPLICATION_JSON); - } - - CachedUserMetadataDTO cachedUserMetadataDTO = new CachedUserMetadataDTO(); - cachedUserMetadataDTO.setDisplayName(userMetadataDTO.getDisplayName()); - cachedUserMetadataDTO.setEmail(userMetadataDTO.getEmail()); - cachedUserMetadataDTO.setProfilePictureUrl(userMetadataDTO.getProfilePictureUrl()); - Object walletIdObj = session.getAttribute(SessionKeys.WALLET_ID); - if (walletIdObj instanceof String walletId) { - cachedUserMetadataDTO.setWalletId(walletId); - } else { - cachedUserMetadataDTO.setWalletId(null); - } - - return ResponseEntity.status(HttpStatus.OK).body(cachedUserMetadataDTO); - } } diff --git a/src/main/resources/application-default.properties b/src/main/resources/application-default.properties index 8b6873c4a..f98e925fc 100644 --- a/src/main/resources/application-default.properties +++ b/src/main/resources/application-default.properties @@ -53,7 +53,7 @@ spring.data.redis.connect-timeout=10s mosip.security.ignore-auth-urls=/safetynet/**,/actuator/**,/swagger-ui/**,/v3/api-docs/**,\ /allProperties,/credentials/**,/credentialshare/**,/binding-otp,/wallet-binding,/get-token/**,\ - /issuers,/issuers/**,/authorize,/req/otp,/vid,/req/auth/**,/req/individualId/otp,/aid/get-individual-id,/users/me/cache,\ + /issuers,/issuers/**,/authorize,/req/otp,/vid,/req/auth/**,/req/individualId/otp,/aid/get-individual-id,\ /verifiers, /auth/*/token-login mosip.inji.app.id=MIMOTO diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index c8d64377e..a97c41190 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -269,7 +269,7 @@ mosip.security.cors-enable=true mosip.security.origins=http://localhost:3004 mosip.security.ignore-auth-urls=/safetynet/**,/actuator/**,/swagger-ui/**,/v3/api-docs/**,\ /allProperties,/credentials/**,/credentialshare/**,/binding-otp,/wallet-binding,/get-token/**,\ - /issuers,/issuers/**,/authorize,/req/otp,/vid,/req/auth/**,/req/individualId/otp,/aid/get-individual-id,/users/me/cache,\ + /issuers,/issuers/**,/authorize,/req/otp,/vid,/req/auth/**,/req/individualId/otp,/aid/get-individual-id,\ /verifiers, /auth/*/token-login #OpenId4VP related Configuration END diff --git a/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java b/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java index c065e6148..c35d21c94 100644 --- a/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java @@ -2,45 +2,54 @@ import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.dbentity.UserMetadata; -import io.mosip.mimoto.dto.ErrorDTO; -import io.mosip.mimoto.dto.mimoto.CachedUserMetadataDTO; import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; import io.mosip.mimoto.exception.DecryptionException; import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.repository.UserMetadataRepository; import io.mosip.mimoto.service.EncryptionService; -import jakarta.servlet.http.HttpSession; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; +import org.junit.runner.RunWith; import org.mockito.MockitoAnnotations; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.security.core.Authentication; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.mock.web.MockHttpSession; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; import java.util.Optional; -import static io.mosip.mimoto.exception.ErrorConstants.SESSION_EXPIRED_OR_INVALID; -import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.when; +import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors; -class UsersControllerTest { +import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - @InjectMocks - private UsersController usersController; +@RunWith(SpringRunner.class) +@SpringBootTest(classes = UsersController.class) +@AutoConfigureMockMvc(addFilters = false) +@EnableWebMvc +class UsersControllerTest { + @Autowired + private MockMvc mockMvc; - @Mock + @MockBean private UserMetadataRepository userMetadataRepository; - @Mock + @MockBean private EncryptionService encryptionService; - @Mock - private Authentication authentication; + @Autowired + private WebApplicationContext context; - @Mock - private HttpSession session; + private MockHttpSession mockHttpSession; private static final String PROVIDER_SUBJECT_ID = "test-user"; private static final String IDENTITY_PROVIDER = "test-provider"; @@ -48,152 +57,102 @@ class UsersControllerTest { private static final String ENCRYPTED_PROFILE_PIC = "encrypted-pic"; private static final String ENCRYPTED_EMAIL = "encrypted-email"; private static final String DECRYPTED_DISPLAY_NAME = "Test User"; - private static final String DECRYPTED_PROFILE_PIC = "http://test.com/pic.jpg"; + private static final String DECRYPTED_PROFILE_PIC = "https://test.com/pic.jpg"; private static final String DECRYPTED_EMAIL = "test@example.com"; @BeforeEach void setUp() { + mockMvc = MockMvcBuilders.webAppContextSetup(context) + .apply(springSecurity()) + .build(); + MockitoAnnotations.openMocks(this); + mockHttpSession = new MockHttpSession(); + } - // Tests for getUserProfile (Database) @Test - void getUserProfileSuccess() throws Exception { - // Arrange + void getUserProfileOnlyFromCacheSuccessWithMockMvc() throws Exception { + UserMetadataDTO userMetadataDTO = new UserMetadataDTO(DECRYPTED_DISPLAY_NAME, DECRYPTED_PROFILE_PIC, DECRYPTED_EMAIL); + mockHttpSession.setAttribute(SessionKeys.USER_METADATA, userMetadataDTO); + + mockMvc.perform(get("/users/me") + .with(SecurityMockMvcRequestPostProcessors.user(DECRYPTED_DISPLAY_NAME).roles("USER")) + .session(mockHttpSession)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.displayName").value(DECRYPTED_DISPLAY_NAME)) + .andExpect(jsonPath("$.profilePictureUrl").value(DECRYPTED_PROFILE_PIC)) + .andExpect(jsonPath("$.email").value(DECRYPTED_EMAIL)); + } + + @Test + void getUserProfileOnlyFromDatabaseSuccessWithMockMvc() throws Exception { UserMetadata userMetadata = new UserMetadata(); userMetadata.setDisplayName(ENCRYPTED_DISPLAY_NAME); userMetadata.setProfilePictureUrl(ENCRYPTED_PROFILE_PIC); userMetadata.setEmail(ENCRYPTED_EMAIL); - - when(authentication.getName()).thenReturn(PROVIDER_SUBJECT_ID); - when(session.getAttribute("clientRegistrationId")).thenReturn(IDENTITY_PROVIDER); + mockHttpSession.setAttribute(SessionKeys.USER_METADATA, null); + mockHttpSession.setAttribute("clientRegistrationId", IDENTITY_PROVIDER); when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider(PROVIDER_SUBJECT_ID, IDENTITY_PROVIDER)) .thenReturn(Optional.of(userMetadata)); when(encryptionService.decrypt(ENCRYPTED_DISPLAY_NAME)).thenReturn(DECRYPTED_DISPLAY_NAME); when(encryptionService.decrypt(ENCRYPTED_PROFILE_PIC)).thenReturn(DECRYPTED_PROFILE_PIC); when(encryptionService.decrypt(ENCRYPTED_EMAIL)).thenReturn(DECRYPTED_EMAIL); - // Act - ResponseEntity response = usersController.getUserProfile(authentication, session); - - // Assert - assertEquals(HttpStatus.OK, response.getStatusCode()); - UserMetadataDTO result = response.getBody(); - assertNotNull(result); - assertEquals(DECRYPTED_DISPLAY_NAME, result.getDisplayName()); - assertEquals(DECRYPTED_PROFILE_PIC, result.getProfilePictureUrl()); - assertEquals(DECRYPTED_EMAIL, result.getEmail()); + mockMvc.perform(get("/users/me") + .with(SecurityMockMvcRequestPostProcessors.user(PROVIDER_SUBJECT_ID).roles("USER")) + .session(mockHttpSession)) + .andExpect(status().isOk()) + .andExpect(result -> result.getResponse().getContentAsString()) + .andExpect(jsonPath("$.displayName").value(DECRYPTED_DISPLAY_NAME)) + .andExpect(jsonPath("$.profilePictureUrl").value(DECRYPTED_PROFILE_PIC)) + .andExpect(jsonPath("$.email").value(DECRYPTED_EMAIL)); } @Test - void getUserProfileUserNotFound() { - // Arrange - when(authentication.getName()).thenReturn(PROVIDER_SUBJECT_ID); - when(session.getAttribute("clientRegistrationId")).thenReturn(IDENTITY_PROVIDER); + void getUserProfileOnlyUserNotFoundWithMockMvc() throws Exception { + mockHttpSession.setAttribute(SessionKeys.USER_METADATA, null); + mockHttpSession.setAttribute("clientRegistrationId", IDENTITY_PROVIDER); when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider(PROVIDER_SUBJECT_ID, IDENTITY_PROVIDER)) .thenReturn(Optional.empty()); - // Act - ResponseEntity response = usersController.getUserProfile(authentication, session); - - // Assert - assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode()); - ErrorDTO error = (ErrorDTO) response.getBody(); - assertNotNull(error); - assertEquals(ErrorConstants.INVALID_USER.getErrorCode(), error.getErrorCode()); - assertEquals("User not found. Please check your credentials or login again", error.getErrorMessage()); + mockMvc.perform(get("/users/me") + .with(SecurityMockMvcRequestPostProcessors.user(DECRYPTED_DISPLAY_NAME).roles("USER")) + .session(mockHttpSession)) + .andExpect(status().isNotFound()) + .andExpect(jsonPath("$.errorCode").value(ErrorConstants.INVALID_USER.getErrorCode())) + .andExpect(jsonPath("$.errorMessage").value("User not found. Please check your credentials or login again")); } @Test - void getUserProfileDecryptionException() throws Exception { - // Arrange + void getUserProfileOnlyDecryptionExceptionWithMockMvc() throws Exception { UserMetadata userMetadata = new UserMetadata(); userMetadata.setDisplayName(ENCRYPTED_DISPLAY_NAME); userMetadata.setProfilePictureUrl(ENCRYPTED_PROFILE_PIC); userMetadata.setEmail(ENCRYPTED_EMAIL); - - when(authentication.getName()).thenReturn(PROVIDER_SUBJECT_ID); - when(session.getAttribute("clientRegistrationId")).thenReturn(IDENTITY_PROVIDER); + mockHttpSession.setAttribute(SessionKeys.USER_METADATA, null); + mockHttpSession.setAttribute("clientRegistrationId", IDENTITY_PROVIDER); when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider(PROVIDER_SUBJECT_ID, IDENTITY_PROVIDER)) .thenReturn(Optional.of(userMetadata)); when(encryptionService.decrypt(ENCRYPTED_DISPLAY_NAME)).thenThrow(new DecryptionException("DECRYPTION_ERROR", "Decryption failed")); - // Act & Assert - RuntimeException exception = assertThrows(RuntimeException.class, - () -> usersController.getUserProfile(authentication, session)); - assertTrue(exception.getCause() instanceof DecryptionException); + mockMvc.perform(get("/users/me") + .with(SecurityMockMvcRequestPostProcessors.user(PROVIDER_SUBJECT_ID).roles("USER")) + .session(mockHttpSession)) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errorCode").value(ErrorConstants.INTERNAL_SERVER_ERROR.getErrorCode())) + .andExpect(jsonPath("$.errorMessage").value("Failed to process user data")); } - // Tests for getUserProfileFromCache @Test - void getUserProfileFromCacheSuccess() { - // Arrange - UserMetadataDTO userMetadataDTO = new UserMetadataDTO(DECRYPTED_DISPLAY_NAME, DECRYPTED_PROFILE_PIC, DECRYPTED_EMAIL); - when(session.getAttribute(SessionKeys.USER_METADATA)).thenReturn(userMetadataDTO); - - // Act - ResponseEntity response = usersController.getUserProfileFromCache(session); - - // Assert - assertEquals(HttpStatus.OK, response.getStatusCode()); - CachedUserMetadataDTO result = response.getBody(); - assertNotNull(result); - assertEquals(DECRYPTED_DISPLAY_NAME, result.getDisplayName()); - assertEquals(DECRYPTED_PROFILE_PIC, result.getProfilePictureUrl()); - assertEquals(DECRYPTED_EMAIL, result.getEmail()); + void getUserProfileOnlyMissingIdentityProviderWithMockMvc() throws Exception { + mockHttpSession.setAttribute(SessionKeys.USER_METADATA, null); + mockHttpSession.setAttribute("clientRegistrationId", null); + + mockMvc.perform(get("/users/me") + .with(SecurityMockMvcRequestPostProcessors.user(DECRYPTED_DISPLAY_NAME).roles("USER")) + .session(mockHttpSession)) + .andExpect(status().isNotFound()) + .andExpect(jsonPath("$.errorCode").value(ErrorConstants.INVALID_USER.getErrorCode())); } - - @Test - void getUserProfileFromCacheNoMetadataInSession() { - // Arrange - when(session.getAttribute(SessionKeys.USER_METADATA)).thenReturn(null); - - // Act - ResponseEntity response = usersController.getUserProfileFromCache(session); - - // Assert - assertEquals(HttpStatus.UNAUTHORIZED, response.getStatusCode()); - ErrorDTO error = (ErrorDTO) response.getBody(); - assertNotNull(error); - assertEquals(SESSION_EXPIRED_OR_INVALID.getErrorCode(), error.getErrorCode()); - assertEquals(SESSION_EXPIRED_OR_INVALID.getErrorMessage(), error.getErrorMessage()); - } - - @Test - void getUserProfileFromCacheNullSession() { - // Arrange - when(session.getAttribute(SessionKeys.USER_METADATA)).thenReturn(null); - - // Act - ResponseEntity response = usersController.getUserProfileFromCache(session); - - // Assert - assertEquals(HttpStatus.UNAUTHORIZED, response.getStatusCode()); - ErrorDTO error = (ErrorDTO) response.getBody(); - assertNotNull(error); - assertEquals(SESSION_EXPIRED_OR_INVALID.getErrorCode(), error.getErrorCode()); - assertEquals(SESSION_EXPIRED_OR_INVALID.getErrorMessage(), error.getErrorMessage()); - } - - @Test - void getUserProfileFromCacheMissingWalletId() { - // Arrange - UserMetadataDTO userMetadataDTO = new UserMetadataDTO(DECRYPTED_DISPLAY_NAME, DECRYPTED_PROFILE_PIC, DECRYPTED_EMAIL); - when(session.getAttribute(SessionKeys.USER_METADATA)).thenReturn(userMetadataDTO); - when(session.getAttribute(SessionKeys.WALLET_ID)).thenReturn(null); - - // Act - ResponseEntity response = usersController.getUserProfileFromCache(session); - - // Assert - assertEquals(HttpStatus.OK, response.getStatusCode()); - CachedUserMetadataDTO result = response.getBody(); - assertNotNull(result); - assertEquals(DECRYPTED_DISPLAY_NAME, result.getDisplayName()); - assertEquals(DECRYPTED_PROFILE_PIC, result.getProfilePictureUrl()); - assertEquals(DECRYPTED_EMAIL, result.getEmail()); - assertNull(result.getWalletId()); - } - - } \ No newline at end of file From 83a78846ce1ae54780de42822aba308817676573 Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Mon, 26 May 2025 22:38:55 +0530 Subject: [PATCH 621/860] [INJIWEB-1541] modify api response to be in camelCase for getUserInfo API Signed-off-by: KiruthikaJeyashankar --- src/main/java/io/mosip/mimoto/dto/mimoto/UserMetadataDTO.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/UserMetadataDTO.java b/src/main/java/io/mosip/mimoto/dto/mimoto/UserMetadataDTO.java index f4b42eea4..487fc35e3 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/UserMetadataDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/UserMetadataDTO.java @@ -13,15 +13,12 @@ public class UserMetadataDTO implements Serializable { private static final long serialVersionUID = 1L; - @JsonProperty("display_name") @Schema(description = "Display name of the user provided by the Identity Provider") private String displayName; - @JsonProperty("profile_picture_url") @Schema(description = "Profile picture of the user provided by the Identity Provider") private String profilePictureUrl; - @JsonProperty("email") @Schema(description = "Email of the user provided by the Identity Provider") private String email; } \ No newline at end of file From cbc50851c6a059cf1ec927be1a3cef38d02ddcc1 Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Mon, 26 May 2025 22:39:23 +0530 Subject: [PATCH 622/860] [INJIWEB-1541] add scheme description for VerifiableCredentialRequestDTO Signed-off-by: KiruthikaJeyashankar --- .../mimoto/dto/VerifiableCredentialRequestDTO.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/mosip/mimoto/dto/VerifiableCredentialRequestDTO.java b/src/main/java/io/mosip/mimoto/dto/VerifiableCredentialRequestDTO.java index b2392ce95..6091d0c25 100644 --- a/src/main/java/io/mosip/mimoto/dto/VerifiableCredentialRequestDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/VerifiableCredentialRequestDTO.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.dto; +import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; import lombok.Data; import lombok.Getter; @@ -9,13 +10,23 @@ @Getter @Setter public class VerifiableCredentialRequestDTO { - //TODO: Add schema definition + @Schema(description = "The unique identifier of the issuer") @NotBlank(message = "Missing required parameters: issuerId") String issuer; + + @Schema(description = "The unique identifier of the credential type from the issuer well-known configuration") @NotBlank(message = "Missing required parameters: credentialConfigurationId") String credentialConfigurationId; + + @Schema(description = "The authorization code received from the authorization server") String code; + + @Schema(description = "The grant type for the authorization request") String grantType; + + @Schema(description = "The redirect URI for the authorization request") String redirectUri; + + @Schema(description = "The code verifier used for PKCE (Proof Key for Code Exchange)") String codeVerifier; } From a0e31fab70ca0fa4f58af8bbbb8478bf94a206dc Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Tue, 27 May 2025 07:42:47 +0530 Subject: [PATCH 623/860] [INJIWEB-1541] remove redudant validation of user id in wallet APIs Signed-off-by: KiruthikaJeyashankar --- .../mimoto/controller/WalletsController.java | 12 +- .../java/io/mosip/mimoto/util/WalletUtil.java | 19 ++-- .../controller/WalletsControllerTest.java | 104 +++++++++--------- .../io/mosip/mimoto/util/WalletUtilTest.java | 34 ++++-- 4 files changed, 89 insertions(+), 80 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/WalletsController.java b/src/main/java/io/mosip/mimoto/controller/WalletsController.java index 4d0c18df5..830ecb87d 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletsController.java @@ -2,13 +2,12 @@ import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.constant.SwaggerLiteralConstants; -import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.CreateWalletRequestDto; +import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.UnlockWalletRequestDto; import io.mosip.mimoto.dto.WalletResponseDto; import io.mosip.mimoto.exception.InvalidRequestException; import io.mosip.mimoto.service.WalletService; -import io.mosip.mimoto.util.WalletUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.enums.ParameterIn; @@ -54,7 +53,7 @@ public WalletsController(WalletService walletService) { * @param httpSession The HTTP session containing user details. * @return The unique identifier of the created wallet. * @throws InvalidRequestException If the request is invalid. - * Example: Wallet PIN and Confirm Wallet PIN received in request don't match + * Example: Wallet PIN and Confirm Wallet PIN received in request don't match */ @Operation( summary = "Create a new wallet", @@ -84,7 +83,6 @@ public ResponseEntity createWallet( @RequestBody @Valid CreateWalletRequestDto wallet, HttpSession httpSession) throws InvalidRequestException { String userId = (String) httpSession.getAttribute(SessionKeys.USER_ID); - WalletUtil.validateUserId(userId); log.info("Creating wallet for user: {}, name: {}", userId, wallet.getWalletName()); WalletResponseDto walletResponseDto = walletService.createWallet(userId, wallet.getWalletName(), wallet.getWalletPin(), wallet.getConfirmWalletPin()); return ResponseEntity.status(HttpStatus.OK).body(walletResponseDto); @@ -110,7 +108,6 @@ public ResponseEntity createWallet( @GetMapping public ResponseEntity> getWallets(HttpSession httpSession) throws InvalidRequestException { String userId = (String) httpSession.getAttribute(SessionKeys.USER_ID); - WalletUtil.validateUserId(userId); log.info("Retrieving wallets for user: {}", userId); List response = walletService.getWallets(userId); return ResponseEntity.status(HttpStatus.OK).body(response); @@ -143,7 +140,6 @@ public ResponseEntity unlockWallet( @RequestBody @Valid UnlockWalletRequestDto wallet, HttpSession httpSession) throws InvalidRequestException { String userId = (String) httpSession.getAttribute(SessionKeys.USER_ID); - WalletUtil.validateUserId(userId); log.info("Unlocking wallet: {} for user: {}", walletId, userId); String walletKey = walletService.getWalletKey(userId, walletId, wallet.getWalletPin()); httpSession.setAttribute(SessionKeys.WALLET_KEY, walletKey); @@ -173,10 +169,6 @@ public ResponseEntity unlockWallet( @DeleteMapping("/{walletId}") public ResponseEntity deleteWallet(@PathVariable("walletId") String walletId, HttpSession httpSession) { String userId = (String) httpSession.getAttribute(SessionKeys.USER_ID); - if (userId == null) { - log.error("User ID is missing in session"); - return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); - } walletService.deleteWallet(userId, walletId); // sessionWalletId is not needed from client, pass walletId for validation String sessionWalletId = (String) httpSession.getAttribute(SessionKeys.WALLET_ID); diff --git a/src/main/java/io/mosip/mimoto/util/WalletUtil.java b/src/main/java/io/mosip/mimoto/util/WalletUtil.java index c79a9fe96..3d480b832 100644 --- a/src/main/java/io/mosip/mimoto/util/WalletUtil.java +++ b/src/main/java/io/mosip/mimoto/util/WalletUtil.java @@ -30,15 +30,12 @@ public class WalletUtil { @Autowired private EncryptionDecryptionUtil encryptionDecryptionUtil; - public static void validateUserId(String userId) { - if (userId == null) { - log.error("User ID not found in session."); - throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "User ID not found in session"); - } - } - public String decryptWalletKey(String encryptedWalletKey, String pin) { - return encryptionDecryptionUtil.decryptWithPin(encryptedWalletKey, pin); + try { + return encryptionDecryptionUtil.decryptWithPin(encryptedWalletKey, pin); + } catch (Exception e) { + throw new InvalidRequestException("invalid_pin", "Invalid PIN or wallet key provided " + e); + } } public String createWallet(String userId, String walletName, String pin) { @@ -88,13 +85,15 @@ private List createProofSigningKeys(SecretKey encryptionKey, Wa public static String getSessionWalletKey(HttpSession session) { Object key = session.getAttribute(SessionKeys.WALLET_KEY); - if (key == null) throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Wallet key not found in session"); + if (key == null) + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Wallet key not found in session"); return key.toString(); } public static void validateWalletId(HttpSession session, String walletIdFromRequest) { Object sessionWalletId = session.getAttribute(SessionKeys.WALLET_ID); - if (sessionWalletId == null) throw new InvalidRequestException(WALLET_LOCKED.getErrorCode(), WALLET_LOCKED.getErrorMessage()); + if (sessionWalletId == null) + throw new InvalidRequestException(WALLET_LOCKED.getErrorCode(), WALLET_LOCKED.getErrorMessage()); String walletIdInSession = sessionWalletId.toString(); if (!walletIdInSession.equals(walletIdFromRequest)) { diff --git a/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java index 4bb275189..2b0dafcde 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java @@ -7,9 +7,8 @@ import io.mosip.mimoto.dto.WalletResponseDto; import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.exception.InvalidRequestException; -import io.mosip.mimoto.util.GlobalExceptionHandler; import io.mosip.mimoto.service.WalletService; -import io.mosip.mimoto.util.WalletValidator; +import io.mosip.mimoto.util.GlobalExceptionHandler; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -27,14 +26,14 @@ import org.springframework.web.servlet.config.annotation.EnableWebMvc; import java.util.List; +import java.util.Objects; +import static io.mosip.mimoto.util.TestUtilities.createRequestBody; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.when; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; @RunWith(SpringRunner.class) @SpringBootTest(classes = {WalletsController.class, GlobalExceptionHandler.class}) @@ -42,9 +41,6 @@ @EnableWebMvc @EnableWebSecurity public class WalletsControllerTest { - @MockBean - private WalletValidator walletValidator; - @Autowired private MockMvc mockMvc; @@ -153,45 +149,11 @@ public void shouldThrowExceptionIfAnyErrorOccurredWhileFetchingWalletsForGivenUs .andExpect(jsonPath("$.errorMessage").value("We are unable to process request now")); } - @Test - public void shouldReturnTheWalletIDAndStoreWalletKeyInSessionForValidUserAndWalletId() throws Exception { - when(walletService.getWalletKey(userId, walletId, walletPin)).thenReturn(walletId); - String expectedWalletKey = "walletId123"; - - MvcResult result = mockMvc.perform(post(String.format("/wallets/%s/unlock", walletId)) - .contentType(MediaType.APPLICATION_JSON) - .accept(MediaType.APPLICATION_JSON) - .content(new ObjectMapper().writeValueAsString(createWalletRequestDto)) - .session(mockSession) - .with(SecurityMockMvcRequestPostProcessors.user(userId).roles("USER")) - .with(SecurityMockMvcRequestPostProcessors.csrf())) - .andExpect(status().isOk()) - .andExpect(content().string("{\"walletId\":\"walletId123\",\"walletName\":null}")) - .andReturn(); - - String actualWalletKey = result.getRequest().getSession().getAttribute("wallet_key").toString(); - assertEquals(expectedWalletKey, actualWalletKey); - } - - @Test - public void shouldThrowExceptionIfAnyErrorOccurredWhileFetchingWalletDataForGivenUserIdAndWalletId() throws Exception { - when(walletService.getWalletKey(userId, walletId, walletPin)).thenThrow(new RuntimeException("Exception occurred when fetching the wallet data for given walletId and userId")); - - mockMvc.perform(post(String.format("/wallets/%s/unlock", walletId)) - .contentType(MediaType.APPLICATION_JSON) - .accept(MediaType.APPLICATION_JSON) - .content(new ObjectMapper().writeValueAsString(createWalletRequestDto)) - .session(mockSession) - .with(SecurityMockMvcRequestPostProcessors.user(userId).roles("USER")) - .with(SecurityMockMvcRequestPostProcessors.csrf())) - .andExpect(status().isInternalServerError()) - .andExpect(jsonPath("$.errorCode").value("internal_server_error")) - .andExpect(jsonPath("$.errorMessage").value("We are unable to process request now")); - } + // Test for deleting a wallet @Test public void shouldDeleteWalletSuccessfully() throws Exception { - mockMvc.perform(org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete(String.format("/wallets/%s", walletId)) + mockMvc.perform(delete(String.format("/wallets/%s", walletId)) .accept(MediaType.APPLICATION_JSON) .session(mockSession) .with(SecurityMockMvcRequestPostProcessors.user(userId).roles("USER")) @@ -204,7 +166,7 @@ public void shouldClearSessionAttributesWhenDeletingCurrentWallet() throws Excep mockSession.setAttribute(SessionKeys.WALLET_ID, walletId); mockSession.setAttribute(SessionKeys.WALLET_KEY, "walletKey123"); - mockMvc.perform(org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete(String.format("/wallets/%s", walletId)) + mockMvc.perform(delete(String.format("/wallets/%s", walletId)) .accept(MediaType.APPLICATION_JSON) .session(mockSession) .with(SecurityMockMvcRequestPostProcessors.user(userId).roles("USER")) @@ -218,14 +180,32 @@ public void shouldClearSessionAttributesWhenDeletingCurrentWallet() throws Excep @Test public void shouldReturnUnauthorizedWhenUserIdIsMissingForDeleteWallet() throws Exception { - MockHttpSession sessionWithoutUserId = new MockHttpSession(); + mockSession.clearAttributes(); + MockHttpSession sessionWithoutUserId = mockSession; + doThrow(new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "User ID cannot be null or empty")).when(walletService).deleteWallet(null,walletId); - mockMvc.perform(org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete(String.format("/wallets/%s", walletId)) + mockMvc.perform(delete(String.format("/wallets/%s", walletId)) .accept(MediaType.APPLICATION_JSON) .session(sessionWithoutUserId) .with(SecurityMockMvcRequestPostProcessors.user(userId).roles("USER")) .with(SecurityMockMvcRequestPostProcessors.csrf())) - .andExpect(status().isUnauthorized()); + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errorCode").value("invalid_request")) + .andExpect(jsonPath("$.errorMessage").value("invalid_request --> User ID cannot be null or empty")); + } + + @Test + public void shouldReturnBadRequestWhenInvalidRequestExceptionIsThrownByService() throws Exception { + doThrow(new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Wallet not found")).when(walletService).deleteWallet(userId,walletId); + + mockMvc.perform(delete("/wallets/"+walletId) + .accept(MediaType.APPLICATION_JSON) + .session(mockSession) + .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")) + .with(SecurityMockMvcRequestPostProcessors.csrf())) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errorCode").value("invalid_request")) + .andExpect(jsonPath("$.errorMessage").value("invalid_request --> Wallet not found")); } // Unlock wallet tests @@ -249,16 +229,18 @@ public void shouldUnlockWalletSuccessfully() throws Exception { .andReturn(); // Verify session attributes were set correctly - assertEquals(walletId, result.getRequest().getSession().getAttribute(SessionKeys.WALLET_ID)); + assertEquals(walletId, Objects.requireNonNull(result.getRequest().getSession()).getAttribute(SessionKeys.WALLET_ID)); assertEquals("walletKey123", result.getRequest().getSession().getAttribute(SessionKeys.WALLET_KEY)); } @Test public void shouldThrowExceptionWhenUserIdIsMissingForUnlockWallet() throws Exception { UnlockWalletRequestDto unlockRequest = new UnlockWalletRequestDto(); - unlockRequest.setWalletPin("1234"); - - MockHttpSession sessionWithoutUserId = new MockHttpSession(); + unlockRequest.setWalletPin(walletPin); + when(walletService.getWalletKey(null, walletId, walletPin)) + .thenThrow(new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "User ID cannot be null or empty")); + mockSession.clearAttributes(); + MockHttpSession sessionWithoutUserId = mockSession; sessionWithoutUserId.setAttribute("clientRegistrationId", "google"); mockMvc.perform(post("/wallets/{walletId}/unlock", walletId) @@ -270,7 +252,7 @@ public void shouldThrowExceptionWhenUserIdIsMissingForUnlockWallet() throws Exce .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.errorCode").value("invalid_request")) - .andExpect(jsonPath("$.errorMessage").value("invalid_request --> User ID not found in session")); + .andExpect(jsonPath("$.errorMessage").value("invalid_request --> User ID cannot be null or empty")); } @Test @@ -334,4 +316,20 @@ public void shouldThrowExceptionForServerErrorDuringUnlock() throws Exception { .andExpect(jsonPath("$.errorCode").value("internal_server_error")) .andExpect(jsonPath("$.errorMessage").value("We are unable to process request now")); } + + @Test + public void shouldThrowExceptionIfAnyErrorOccurredWhileFetchingWalletDataForGivenUserIdAndWalletId() throws Exception { + when(walletService.getWalletKey(userId, walletId, walletPin)).thenThrow(new RuntimeException("Exception occurred when fetching the wallet data for given walletId and userId")); + + mockMvc.perform(post(String.format("/wallets/%s/unlock", walletId)) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON) + .content(new ObjectMapper().writeValueAsString(createWalletRequestDto)) + .session(mockSession) + .with(SecurityMockMvcRequestPostProcessors.user(userId).roles("USER")) + .with(SecurityMockMvcRequestPostProcessors.csrf())) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errorCode").value("internal_server_error")) + .andExpect(jsonPath("$.errorMessage").value("We are unable to process request now")); + } } diff --git a/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java b/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java index a33c14fdc..e7a59705e 100644 --- a/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java +++ b/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java @@ -111,17 +111,37 @@ void shouldVerifyWalletObjectOnCreateNewWallet() throws Exception { assertEquals(4, savedWallet.getProofSigningKeys().size()); } - // Tests for validateUserId @Test - void testValidUserId() { - assertDoesNotThrow(() -> WalletUtil.validateUserId("validUserId")); + void testValidWalletId() { + HttpSession session = mock(HttpSession.class); + when(session.getAttribute(SessionKeys.WALLET_ID)).thenReturn("wallet-123"); + assertDoesNotThrow(() -> WalletUtil.validateWalletId(session, "wallet-123")); } @Test - void testNullUserId() { - InvalidRequestException ex = assertThrows(InvalidRequestException.class, () -> WalletUtil.validateUserId(null)); + void testMissingWalletIdInSession() { + HttpSession session = mock(HttpSession.class); + when(session.getAttribute(SessionKeys.WALLET_ID)).thenReturn(null); + InvalidRequestException ex = assertThrows(InvalidRequestException.class, + () -> WalletUtil.validateWalletId(session, "wallet-123")); + assertEquals("wallet_locked", ex.getErrorCode()); + assertEquals("wallet_locked --> Wallet is locked", ex.getMessage()); + } + @Test + void testMismatchedWalletId() { + HttpSession session = mock(HttpSession.class); + when(session.getAttribute(SessionKeys.WALLET_ID)).thenReturn("wallet-abc"); + InvalidRequestException ex = assertThrows(InvalidRequestException.class, + () -> WalletUtil.validateWalletId(session, "wallet-123")); assertEquals("invalid_request", ex.getErrorCode()); - assertEquals("invalid_request --> User ID not found in session", ex.getMessage()); + assertEquals("invalid_request --> Invalid Wallet ID. Session and request Wallet ID do not match", ex.getMessage()); + } + + @Test + void testNonStringWalletIdInSession() { + HttpSession session = mock(HttpSession.class); + when(session.getAttribute(SessionKeys.WALLET_ID)).thenReturn(12345); + assertDoesNotThrow(() -> WalletUtil.validateWalletId(session, "12345")); } -} \ No newline at end of file +} From 1ddb8e1da66895dc2aa689b933676e72d924ea38 Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Tue, 27 May 2025 07:46:16 +0530 Subject: [PATCH 624/860] [INJIWEB-1541] modify GlobalExceptionHandler to return error message with only errText Signed-off-by: KiruthikaJeyashankar --- .../io/mosip/mimoto/util/GlobalExceptionHandler.java | 2 +- .../controller/WalletCredentialsControllerTest.java | 10 +++++----- .../mimoto/controller/WalletsControllerTest.java | 12 ++++++------ .../mimoto/util/GlobalExceptionHandlerTest.java | 8 +++----- 4 files changed, 15 insertions(+), 17 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java b/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java index 3870357a5..4bdd7dca6 100644 --- a/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java +++ b/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java @@ -47,7 +47,7 @@ public ErrorDTO handleExternalServiceUnavailable(ExternalServiceUnavailableExcep @ResponseStatus(HttpStatus.BAD_REQUEST) public ErrorDTO handleInvalidRequest(InvalidRequestException ex) { log.error("Invalid request parameters: ", ex); - return new ErrorDTO(ex.getErrorCode(), ex.getMessage()); + return new ErrorDTO(ex.getErrorCode(), ex.getErrorText()); } @ExceptionHandler(HttpMessageNotReadableException.class) diff --git a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java index 840e35074..df0adaab8 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java @@ -130,7 +130,7 @@ public void shouldReturnErrorResponseWhenSessionDoesNotHaveWalletIdAndKey() thro ) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.errorCode").value("wallet_locked")) - .andExpect(jsonPath("$.errorMessage").value("wallet_locked --> Wallet is locked")); + .andExpect(jsonPath("$.errorMessage").value("Wallet is locked")); } @Test @@ -193,7 +193,7 @@ public void shouldThrowInvalidRequestForWalletIdMismatch() throws Exception { .sessionAttr("wallet_key", walletKey)) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.errorCode").value("invalid_request")) - .andExpect(jsonPath("$.errorMessage").value("invalid_request --> Invalid Wallet ID. Session and request Wallet ID do not match")); + .andExpect(jsonPath("$.errorMessage").value("Invalid Wallet ID. Session and request Wallet ID do not match")); } @Test @@ -208,7 +208,7 @@ public void shouldThrowInvalidRequestForMissingWalletKey() throws Exception { .sessionAttr("wallet_id", walletId)) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.errorCode").value("invalid_request")) - .andExpect(jsonPath("$.errorMessage").value("invalid_request --> Wallet key not found in session")); + .andExpect(jsonPath("$.errorMessage").value("Wallet key not found in session")); } @Test @@ -323,7 +323,7 @@ public void shouldThrowInvalidRequestForMissingWalletKeyInFetchAll() throws Exce .sessionAttr("wallet_id", walletId)) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.errorCode").value("invalid_request")) - .andExpect(jsonPath("$.errorMessage").value("invalid_request --> Wallet key not found in session")); + .andExpect(jsonPath("$.errorMessage").value("Wallet key not found in session")); } @Test @@ -337,7 +337,7 @@ public void shouldThrowInvalidRequestForWalletIdMismatchInFetchAll() throws Exce .sessionAttr("wallet_key", walletKey)) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.errorCode").value("invalid_request")) - .andExpect(jsonPath("$.errorMessage").value("invalid_request --> Invalid Wallet ID. Session and request Wallet ID do not match")); + .andExpect(jsonPath("$.errorMessage").value("Invalid Wallet ID. Session and request Wallet ID do not match")); } // Tests for getVerifiableCredential diff --git a/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java index 2b0dafcde..219193df6 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java @@ -116,7 +116,7 @@ public void shouldThrowExceptionIfReceivedPINAndConfirmPINDoNotMatch() throws Ex .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.errorCode").value("invalid_request")) - .andExpect(jsonPath("$.errorMessage").value("invalid_request --> Entered PIN and Confirm PIN do not match")); + .andExpect(jsonPath("$.errorMessage").value("Entered PIN and Confirm PIN do not match")); } @Test @@ -191,7 +191,7 @@ public void shouldReturnUnauthorizedWhenUserIdIsMissingForDeleteWallet() throws .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.errorCode").value("invalid_request")) - .andExpect(jsonPath("$.errorMessage").value("invalid_request --> User ID cannot be null or empty")); + .andExpect(jsonPath("$.errorMessage").value("User ID cannot be null or empty")); } @Test @@ -205,7 +205,7 @@ public void shouldReturnBadRequestWhenInvalidRequestExceptionIsThrownByService() .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.errorCode").value("invalid_request")) - .andExpect(jsonPath("$.errorMessage").value("invalid_request --> Wallet not found")); + .andExpect(jsonPath("$.errorMessage").value("Wallet not found")); } // Unlock wallet tests @@ -252,7 +252,7 @@ public void shouldThrowExceptionWhenUserIdIsMissingForUnlockWallet() throws Exce .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.errorCode").value("invalid_request")) - .andExpect(jsonPath("$.errorMessage").value("invalid_request --> User ID cannot be null or empty")); + .andExpect(jsonPath("$.errorMessage").value("User ID cannot be null or empty")); } @Test @@ -273,7 +273,7 @@ public void shouldThrowExceptionWhenWalletNotFoundForUnlock() throws Exception { .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.errorCode").value("invalid_request")) - .andExpect(jsonPath("$.errorMessage").value("invalid_request --> Wallet not found")); + .andExpect(jsonPath("$.errorMessage").value("Wallet not found")); } @Test @@ -294,7 +294,7 @@ public void shouldThrowExceptionWhenInvalidPinProvidedForUnlock() throws Excepti .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.errorCode").value("invalid_request")) - .andExpect(jsonPath("$.errorMessage").value("invalid_request --> Invalid PIN provided")); + .andExpect(jsonPath("$.errorMessage").value("Invalid PIN provided")); } @Test diff --git a/src/test/java/io/mosip/mimoto/util/GlobalExceptionHandlerTest.java b/src/test/java/io/mosip/mimoto/util/GlobalExceptionHandlerTest.java index 1f0b88080..33fd24b94 100644 --- a/src/test/java/io/mosip/mimoto/util/GlobalExceptionHandlerTest.java +++ b/src/test/java/io/mosip/mimoto/util/GlobalExceptionHandlerTest.java @@ -4,8 +4,6 @@ import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.exception.ExternalServiceUnavailableException; import io.mosip.mimoto.exception.InvalidRequestException; -import jakarta.servlet.http.HttpServletRequest; -import org.apache.struts.mock.MockHttpServletRequest; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -14,12 +12,12 @@ import org.springframework.dao.DataAccessResourceFailureException; import org.springframework.http.HttpStatus; import org.springframework.http.converter.HttpMessageNotReadableException; -import org.springframework.http.server.ServletServerHttpRequest; import org.springframework.web.bind.annotation.ResponseStatus; import java.lang.reflect.Method; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; @RunWith(MockitoJUnitRunner.class) public class GlobalExceptionHandlerTest { @@ -107,7 +105,7 @@ public void handleInvalidRequestReturnsBadRequest() throws Exception { // Assert assertEquals(errorCode, result.getErrorCode()); - assertEquals(errorCode + " --> " + errorMessage, result.getErrorMessage()); + assertEquals(errorMessage, result.getErrorMessage()); // Verify ResponseStatus annotation Method method = GlobalExceptionHandler.class.getMethod("handleInvalidRequest", InvalidRequestException.class); From cedf53f4534bcff63b47362bd8f46d61d345ca8a Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Tue, 27 May 2025 08:07:54 +0530 Subject: [PATCH 625/860] [INJIWEB-1541] return invalid_pin exception when unlock is called with invalidPin Signed-off-by: KiruthikaJeyashankar --- .../mimoto/exception/ErrorConstants.java | 32 ++++++++++--------- .../service/impl/WalletServiceImpl.java | 4 ++- .../java/io/mosip/mimoto/util/WalletUtil.java | 5 ++- .../controller/WalletsControllerTest.java | 12 +++---- .../mimoto/service/WalletServiceTest.java | 28 +++++++++++----- .../io/mosip/mimoto/util/WalletUtilTest.java | 23 +++++++++---- 6 files changed, 64 insertions(+), 40 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java b/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java index 1f3844e20..9a5101c72 100644 --- a/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java +++ b/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java @@ -19,25 +19,27 @@ public enum ErrorConstants { INVALID_REDIRECT_URI("invalid_redirect_uri", "The requested redirect uri doesn’t match."), INTERNAL_SERVER_ERROR("internal_server_error", "We are unable to process request now"), - PROOF_TYPE_NOT_SUPPORTED_EXCEPTION("proof_type_not_supported", "Proof Type available in received credentials is not matching with supported proof terms" ), - SIGNATURE_VERIFICATION_EXCEPTION("signature_verification_failed", "Error while doing signature verification" ), - JSON_PARSING_EXCEPTION("json_parsing_failed", "Given data couldn't be parsed to JSON string" ), - UNKNOWN_EXCEPTION("unknown_exception", "Error while doing verification of verifiable credential" ), - PROOF_DOCUMENT_NOT_FOUND_EXCEPTION("proof_document_not_found", "Proof document is not available in the received credentials" ), + PROOF_TYPE_NOT_SUPPORTED_EXCEPTION("proof_type_not_supported", "Proof Type available in received credentials is not matching with supported proof terms"), + SIGNATURE_VERIFICATION_EXCEPTION("signature_verification_failed", "Error while doing signature verification"), + JSON_PARSING_EXCEPTION("json_parsing_failed", "Given data couldn't be parsed to JSON string"), + UNKNOWN_EXCEPTION("unknown_exception", "Error while doing verification of verifiable credential"), + PROOF_DOCUMENT_NOT_FOUND_EXCEPTION("proof_document_not_found", "Proof document is not available in the received credentials"), PUBLIC_KEY_NOT_FOUND_EXCEPTION("public_key_not_found", "Proof document is not available in the received credentials"), - OAUTH2_AUTHENTICATION_EXCEPTION( "user_authentication_error", "Failed to authenticate user via OAuth Identity Provider during login"), + OAUTH2_AUTHENTICATION_EXCEPTION("user_authentication_error", "Failed to authenticate user via OAuth Identity Provider during login"), LOGIN_SESSION_INVALIDATE_EXCEPTION("user_logout_error", "Exception occurred when invalidating the session of a user"), - SESSION_EXPIRED_OR_INVALID( "session_invalid_or_expired", "User session is missing or expired. Please log in again."), - DATABASE_CONNECTION_EXCEPTION( "database_unavailable", "Failed to connect to the database"), - REDIS_CONNECTION_EXCEPTION( "redis_unavailable", "Failed to connect to the redis"), - ENCRYPTION_FAILED( "encryption_failed", "Failed to encrypt the data"), - DECRYPTION_FAILED( "decryption_failed", "Failed to decrypt the data"), - SCHEMA_MISMATCH( "schema_mismatch", "Failed to restored the stored data"), + SESSION_EXPIRED_OR_INVALID("session_invalid_or_expired", "User session is missing or expired. Please log in again."), + DATABASE_CONNECTION_EXCEPTION("database_unavailable", "Failed to connect to the database"), + REDIS_CONNECTION_EXCEPTION("redis_unavailable", "Failed to connect to the redis"), + ENCRYPTION_FAILED("encryption_failed", "Failed to encrypt the data"), + DECRYPTION_FAILED("decryption_failed", "Failed to decrypt the data"), + SCHEMA_MISMATCH("schema_mismatch", "Failed to restored the stored data"), INVALID_USER("invalid_user", "User does not exist in database"), - CREDENTIAL_DOWNLOAD_EXCEPTION( "credential_download_error", "Failed to download and store the credential"), - CREDENTIAL_FETCH_EXCEPTION( "credential_fetch_error", "Failed to fetch the credential"), + CREDENTIAL_DOWNLOAD_EXCEPTION("credential_download_error", "Failed to download and store the credential"), + CREDENTIAL_FETCH_EXCEPTION("credential_fetch_error", "Failed to fetch the credential"), + + WALLET_LOCKED("wallet_locked", "Wallet is locked"), + INVALID_PIN("invalid_pin", "Invalid PIN or wallet key provided"); - WALLET_LOCKED("wallet_locked", "Wallet is locked"); private final String errorCode; private final String errorMessage; diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java index a723f140b..ce9e9f09d 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java @@ -62,11 +62,13 @@ public String getWalletKey(String userId, String walletId, String pin) throws In return repository.findByUserIdAndId(userId, walletId) .map(wallet -> walletUtil.decryptWalletKey(wallet.getWalletKey(), pin)) .orElseThrow(getWalletNotFoundExceptionSupplier(userId, walletId)); - } @Override public List getWallets(String userId) { + log.debug("validating user ID provided"); + validator.validateUserId(userId); + log.info("Retrieving wallets for user: {}", userId); List wallets = repository.findWalletByUserId(userId); diff --git a/src/main/java/io/mosip/mimoto/util/WalletUtil.java b/src/main/java/io/mosip/mimoto/util/WalletUtil.java index 3d480b832..14fbee62e 100644 --- a/src/main/java/io/mosip/mimoto/util/WalletUtil.java +++ b/src/main/java/io/mosip/mimoto/util/WalletUtil.java @@ -17,8 +17,7 @@ import java.util.List; import java.util.UUID; -import static io.mosip.mimoto.exception.ErrorConstants.INVALID_REQUEST; -import static io.mosip.mimoto.exception.ErrorConstants.WALLET_LOCKED; +import static io.mosip.mimoto.exception.ErrorConstants.*; @Component @Slf4j @@ -34,7 +33,7 @@ public String decryptWalletKey(String encryptedWalletKey, String pin) { try { return encryptionDecryptionUtil.decryptWithPin(encryptedWalletKey, pin); } catch (Exception e) { - throw new InvalidRequestException("invalid_pin", "Invalid PIN or wallet key provided " + e); + throw new InvalidRequestException(INVALID_PIN.getErrorCode(), INVALID_PIN.getErrorMessage() + " " + e); } } diff --git a/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java index 219193df6..0608b943e 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java @@ -182,7 +182,7 @@ public void shouldClearSessionAttributesWhenDeletingCurrentWallet() throws Excep public void shouldReturnUnauthorizedWhenUserIdIsMissingForDeleteWallet() throws Exception { mockSession.clearAttributes(); MockHttpSession sessionWithoutUserId = mockSession; - doThrow(new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "User ID cannot be null or empty")).when(walletService).deleteWallet(null,walletId); + doThrow(new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "User ID cannot be null or empty")).when(walletService).deleteWallet(null, walletId); mockMvc.perform(delete(String.format("/wallets/%s", walletId)) .accept(MediaType.APPLICATION_JSON) @@ -196,9 +196,9 @@ public void shouldReturnUnauthorizedWhenUserIdIsMissingForDeleteWallet() throws @Test public void shouldReturnBadRequestWhenInvalidRequestExceptionIsThrownByService() throws Exception { - doThrow(new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Wallet not found")).when(walletService).deleteWallet(userId,walletId); + doThrow(new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Wallet not found")).when(walletService).deleteWallet(userId, walletId); - mockMvc.perform(delete("/wallets/"+walletId) + mockMvc.perform(delete("/wallets/" + walletId) .accept(MediaType.APPLICATION_JSON) .session(mockSession) .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")) @@ -283,7 +283,7 @@ public void shouldThrowExceptionWhenInvalidPinProvidedForUnlock() throws Excepti unlockRequest.setWalletPin(invalidPin); when(walletService.getWalletKey(userId, walletId, invalidPin)) - .thenThrow(new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Invalid PIN provided")); + .thenThrow(new InvalidRequestException("invalid_pin", "Invalid PIN or wallet key provided")); mockMvc.perform(post("/wallets/{walletId}/unlock", walletId) .contentType(MediaType.APPLICATION_JSON) @@ -293,8 +293,8 @@ public void shouldThrowExceptionWhenInvalidPinProvidedForUnlock() throws Excepti .with(SecurityMockMvcRequestPostProcessors.user(userId).roles("USER")) .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.errorCode").value("invalid_request")) - .andExpect(jsonPath("$.errorMessage").value("Invalid PIN provided")); + .andExpect(jsonPath("$.errorCode").value("invalid_pin")) + .andExpect(jsonPath("$.errorMessage").value("Invalid PIN or wallet key provided")); } @Test diff --git a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java index 29c6bc218..0b8905b11 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java @@ -11,7 +11,6 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.ArgumentCaptor; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; @@ -24,8 +23,6 @@ import static org.junit.Assert.*; import static org.mockito.Mockito.*; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.containsInAnyOrder; @RunWith(MockitoJUnitRunner.class) public class WalletServiceTest { @@ -44,6 +41,7 @@ public class WalletServiceTest { private String userId, name, walletId, walletPin, walletConfirmPin, encryptedWalletKey, decryptedWalletKey; private Wallet wallet; + @Before public void setUp() { userId = UUID.randomUUID().toString(); @@ -61,7 +59,7 @@ public void setUp() { } @Test - public void shouldCreateWalletSuccessfully() throws Exception { + public void shouldCreateWalletSuccessfully() { String newWalletId = UUID.randomUUID().toString(); when(walletHelper.createWallet(userId, name, walletPin)).thenReturn(newWalletId); @@ -76,7 +74,7 @@ public void shouldCreateWalletSuccessfully() throws Exception { } @Test - public void shouldCreateWalletSuccessfullyIfWalletNameIsNotProvided() throws Exception { + public void shouldCreateWalletSuccessfullyIfWalletNameIsNotProvided() { String newWalletId = UUID.randomUUID().toString(); when(walletHelper.createWallet(userId, null, walletPin)).thenReturn(newWalletId); @@ -92,7 +90,7 @@ public void shouldCreateWalletSuccessfullyIfWalletNameIsNotProvided() throws Exc } @Test - public void shouldDecryptWalletKeySuccessfully() throws Exception { + public void shouldDecryptWalletKeySuccessfully() { when(walletRepository.findByUserIdAndId(userId, walletId)).thenReturn(Optional.of(wallet)); when(walletHelper.decryptWalletKey(encryptedWalletKey, walletPin)).thenReturn(decryptedWalletKey); @@ -116,6 +114,20 @@ public void shouldThrowInvalidRequestExceptionIfWalletNotFoundForGivenUserIdAndW verifyNoInteractions(walletHelper); } + @Test + public void shouldThrowInvalidPinErrorCodeExceptionWhenDecryptingWalletKeyWithInvalidPin() { + String invalidPin = "wrongPin"; + when(walletRepository.findByUserIdAndId(userId, walletId)).thenReturn(Optional.of(wallet)); + when(walletHelper.decryptWalletKey(encryptedWalletKey, invalidPin)).thenThrow(new InvalidRequestException("invalid_pin", "Invalid PIN or wallet key provided")); + + InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> + walletService.getWalletKey(userId, walletId, invalidPin)); + + verify(walletRepository).findByUserIdAndId(userId, walletId); + assertEquals("invalid_pin", exception.getErrorCode()); + assertEquals("invalid_pin --> Invalid PIN or wallet key provided", exception.getMessage()); + } + @Test public void shouldReturnListOfWalletResponseDtosForGivenUserId() { String walletId1 = UUID.randomUUID().toString(); @@ -155,7 +167,7 @@ public void shouldReturnEmptyListIfNoWalletsFoundForGivenUserId() { } @Test - public void shouldThrowInvalidRequestExceptionIfAnyErrorOccurredWhileCreatingWallet() throws Exception { + public void shouldThrowInvalidRequestExceptionIfAnyErrorOccurredWhileCreatingWallet() { when(walletHelper.createWallet(userId, name, walletPin)).thenThrow(new InvalidRequestException("INVALID_REQUEST", "Test Exception")); InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> @@ -167,7 +179,7 @@ public void shouldThrowInvalidRequestExceptionIfAnyErrorOccurredWhileCreatingWal } @Test - public void shouldThrowInvalidRequestExceptionIfReceivedPINAndConfirmPINDoNotMatch() throws Exception { + public void shouldThrowInvalidRequestExceptionIfReceivedPINAndConfirmPINDoNotMatch() { walletConfirmPin = "2345"; InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> diff --git a/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java b/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java index e7a59705e..4333bdaea 100644 --- a/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java +++ b/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java @@ -2,7 +2,6 @@ import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.dbentity.Wallet; -import io.mosip.mimoto.exception.DecryptionException; import io.mosip.mimoto.exception.InvalidRequestException; import io.mosip.mimoto.repository.WalletRepository; import jakarta.servlet.http.HttpSession; @@ -22,7 +21,6 @@ import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.*; -import static org.mockito.Mockito.mock; @ExtendWith(MockitoExtension.class) @Slf4j @@ -48,7 +46,7 @@ class WalletUtilTest { private String encryptionType; @BeforeEach - void setUp() throws Exception { + void setUp() { pin = "1234"; name = "default"; userId = UUID.randomUUID().toString(); @@ -61,7 +59,7 @@ void setUp() throws Exception { } @Test - void shouldDecryptWalletKeySuccessfully() throws DecryptionException { + void shouldDecryptWalletKeySuccessfully() { when(encryptionDecryptionUtil.decryptWithPin(encryptedWalletKey, pin)).thenReturn(decryptedWalletKey); String decrypted = walletUtil.decryptWalletKey(encryptedWalletKey, pin); @@ -70,7 +68,18 @@ void shouldDecryptWalletKeySuccessfully() throws DecryptionException { } @Test - void shouldCreateNewWalletSuccessfully() throws Exception { + void shouldThrowErrorWhenDecryptionOfWalletKeyFails() { + when(encryptionDecryptionUtil.decryptWithPin(encryptedWalletKey, pin)).thenThrow(new RuntimeException("Failed to decrypt with PIN")); + + InvalidRequestException ex = assertThrows(InvalidRequestException.class, + () -> walletUtil.decryptWalletKey(encryptedWalletKey, pin)); + assertEquals("invalid_pin", ex.getErrorCode()); + assertEquals("invalid_pin --> Invalid PIN or wallet key provided java.lang.RuntimeException: Failed to decrypt with PIN", ex.getMessage()); + } + + + @Test + void shouldCreateNewWalletSuccessfully() { when(encryptionDecryptionUtil.encryptKeyWithPin(any(SecretKey.class), any(String.class))).thenReturn(encryptedWalletKey); when(encryptionDecryptionUtil.encryptWithAES(any(SecretKey.class), any(byte[].class))).thenReturn(encryptedPrivateKey); @@ -80,7 +89,7 @@ void shouldCreateNewWalletSuccessfully() throws Exception { } @Test - void shouldCreateEd25519WalletSuccessfully() throws Exception { + void shouldCreateEd25519WalletSuccessfully() { when(encryptionDecryptionUtil.encryptKeyWithPin(any(SecretKey.class), any(String.class))).thenReturn(encryptedWalletKey); when(encryptionDecryptionUtil.encryptWithAES(any(SecretKey.class), any(byte[].class))).thenReturn(encryptedPrivateKey); @@ -90,7 +99,7 @@ void shouldCreateEd25519WalletSuccessfully() throws Exception { } @Test - void shouldVerifyWalletObjectOnCreateNewWallet() throws Exception { + void shouldVerifyWalletObjectOnCreateNewWallet() { when(encryptionDecryptionUtil.encryptKeyWithPin(any(SecretKey.class), any(String.class))).thenReturn(encryptedWalletKey); when(encryptionDecryptionUtil.encryptWithAES(any(SecretKey.class), any(byte[].class))).thenReturn(encryptedPrivateKey); From 65f0117d75367c3624ab87272c4ac53525bc4e4d Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Tue, 27 May 2025 08:54:51 +0530 Subject: [PATCH 626/860] [INJIWEB-1541] return wallet_locked response walletId is not available in session Its applicable for unlock wallet API and wallet credentials related APIs Signed-off-by: KiruthikaJeyashankar --- .../WalletCredentialsController.java | 22 ++++--- .../mimoto/controller/WalletsController.java | 2 +- .../mosip/mimoto/service/WalletService.java | 12 ++-- .../service/impl/WalletServiceImpl.java | 4 +- .../WalletCredentialsControllerTest.java | 58 ++++++++++++++++--- .../controller/WalletsControllerTest.java | 32 +++++++--- .../mimoto/service/WalletServiceTest.java | 15 ++++- 7 files changed, 113 insertions(+), 32 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index a6d7ea65f..c0da693ad 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -42,6 +42,7 @@ import java.util.Objects; import static io.mosip.mimoto.exception.ErrorConstants.CREDENTIAL_DOWNLOAD_EXCEPTION; +import static io.mosip.mimoto.util.WalletUtil.validateWalletId; /** * REST controller for managing wallet credentials. @@ -98,7 +99,7 @@ public ResponseEntity downloadCredential( @RequestBody @Valid VerifiableCredentialRequestDTO verifiableCredentialRequestDTO, HttpSession httpSession) throws InvalidRequestException { - WalletUtil.validateWalletId(httpSession, walletId); + validateWalletId(httpSession, walletId); String base64EncodedWalletKey = WalletUtil.getSessionWalletKey(httpSession); String issuerId = verifiableCredentialRequestDTO.getIssuer(); @@ -153,7 +154,7 @@ public ResponseEntity> fetchAllCredentials @RequestHeader(value = "Accept-Language", defaultValue = "en") @Pattern(regexp = "^[a-z]{2}$", message = "Locale must be a 2-letter code") String locale, HttpSession httpSession) throws InvalidRequestException { - WalletUtil.validateWalletId(httpSession, walletId); + validateWalletId(httpSession, walletId); String base64EncodedWalletKey = WalletUtil.getSessionWalletKey(httpSession); log.info("Fetching all credentials for walletId: {}", walletId); @@ -193,7 +194,7 @@ public ResponseEntity getVerifiableCredential( @RequestHeader(value = "Accept-Language", defaultValue = "en") @Pattern(regexp = "^[a-z]{2}$", message = "Locale must be a 2-letter code") String locale, @RequestParam(value = "action", defaultValue = "inline") @Pattern(regexp = "^(inline|download)$", message = "Action must be 'inline' or 'download'") String action, HttpSession httpSession) throws InvalidRequestException { - if (!Objects.equals(accept, "application/pdf")) { + if (!Objects.equals(accept, MediaType.APPLICATION_PDF_VALUE)) { log.error("Invalid Accept header: {}", accept); return Utilities.getErrorResponseEntityWithoutWrapper( new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Accept header must be application/pdf"), @@ -202,11 +203,12 @@ public ResponseEntity getVerifiableCredential( MediaType.APPLICATION_JSON); } - WalletUtil.validateWalletId(httpSession, walletId); - String base64EncodedWalletKey = WalletUtil.getSessionWalletKey(httpSession); - - log.info("Fetching credentialId: {} from walletId: {}", credentialId, walletId); try { + validateWalletId(httpSession, walletId); + String base64EncodedWalletKey = WalletUtil.getSessionWalletKey(httpSession); + + log.info("Fetching credentialId: {} from walletId: {}", credentialId, walletId); + WalletCredentialResponseDTO walletCredentialResponseDTO = walletCredentialService.fetchVerifiableCredential( walletId, credentialId, base64EncodedWalletKey, locale); @@ -226,6 +228,10 @@ public ResponseEntity getVerifiableCredential( log.error("Error processing credential for walletId: {} and credentialId: {}", walletId, credentialId, e); return Utilities.getErrorResponseEntityWithoutWrapper( e, e.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); + } catch (InvalidRequestException exception) { + log.error("Error processing credential for walletId: {} and credentialId: {}", walletId, credentialId, exception); + return Utilities.getErrorResponseEntityWithoutWrapper( + exception, exception.getErrorCode(), HttpStatus.BAD_REQUEST, MediaType.APPLICATION_JSON); } } @@ -249,7 +255,7 @@ public ResponseEntity deleteCredential(@PathVariable("walletId") String walle try { log.info("Deleting credential with ID: {} for walletId: {}", credentialId, walletId); - WalletUtil.validateWalletId(httpSession, walletId); + validateWalletId(httpSession, walletId); // Delete the credential walletCredentialService.deleteCredential(credentialId, walletId); diff --git a/src/main/java/io/mosip/mimoto/controller/WalletsController.java b/src/main/java/io/mosip/mimoto/controller/WalletsController.java index 830ecb87d..af47f8cd4 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletsController.java @@ -141,7 +141,7 @@ public ResponseEntity unlockWallet( HttpSession httpSession) throws InvalidRequestException { String userId = (String) httpSession.getAttribute(SessionKeys.USER_ID); log.info("Unlocking wallet: {} for user: {}", walletId, userId); - String walletKey = walletService.getWalletKey(userId, walletId, wallet.getWalletPin()); + String walletKey = walletService.getWalletKey(userId, walletId, wallet.getWalletPin(), httpSession); httpSession.setAttribute(SessionKeys.WALLET_KEY, walletKey); httpSession.setAttribute(SessionKeys.WALLET_ID, walletId); WalletResponseDto response = WalletResponseDto.builder().walletId(walletId).build(); diff --git a/src/main/java/io/mosip/mimoto/service/WalletService.java b/src/main/java/io/mosip/mimoto/service/WalletService.java index f912b38f0..7d5f43879 100644 --- a/src/main/java/io/mosip/mimoto/service/WalletService.java +++ b/src/main/java/io/mosip/mimoto/service/WalletService.java @@ -2,6 +2,7 @@ import io.mosip.mimoto.dto.WalletResponseDto; import io.mosip.mimoto.exception.InvalidRequestException; +import jakarta.servlet.http.HttpSession; import java.util.List; @@ -18,20 +19,21 @@ public interface WalletService { * @param pin The wallet PIN. * @return The created wallet ID. * @throws InvalidRequestException If the request is invalid. - * Example: Wallet PIN and Confirm Wallet PIN received in request don't match + * Example: Wallet PIN and Confirm Wallet PIN received in request don't match */ WalletResponseDto createWallet(String userId, String name, String pin, String confirmPin) throws InvalidRequestException; /** * Retrieves the decrypted wallet key. * - * @param userId The user ID. - * @param walletId The wallet ID. - * @param pin The wallet PIN. + * @param userId The user ID. + * @param walletId The wallet ID. + * @param pin The wallet PIN. + * @param httpSession * @return The decrypted wallet key. * @throws InvalidRequestException If the wallet is not found or PIN is invalid. */ - String getWalletKey(String userId, String walletId, String pin) throws InvalidRequestException; + String getWalletKey(String userId, String walletId, String pin, HttpSession httpSession) throws InvalidRequestException; /** * Retrieves all wallets for a user. diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java index ce9e9f09d..33530ecd3 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java @@ -8,6 +8,7 @@ import io.mosip.mimoto.service.WalletService; import io.mosip.mimoto.util.WalletUtil; import io.mosip.mimoto.util.WalletValidator; +import jakarta.servlet.http.HttpSession; import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; @@ -53,9 +54,10 @@ public WalletResponseDto createWallet(String userId, String name, String pin, St } @Override - public String getWalletKey(String userId, String walletId, String pin) throws InvalidRequestException { + public String getWalletKey(String userId, String walletId, String pin, HttpSession httpSession) throws InvalidRequestException { log.info("Retrieving wallet key for user: {}, wallet: {}", userId, walletId); + WalletUtil.validateWalletId(httpSession, walletId); validator.validateUserId(userId); validator.validateWalletPin(pin); diff --git a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java index df0adaab8..e90e61c16 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java @@ -40,8 +40,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; @RunWith(SpringRunner.class) @@ -227,7 +226,7 @@ public void shouldThrowInvalidRequestForMissingIssuerAndCredentialConfigurationI String errorMessage = JsonPath.read(result.getResponse().getContentAsString(), "$.errorMessage"); String[] messages = errorMessage.split(",\\s*"); - assertEquals(2, messages.length); + assertEquals(2, messages.length); assertThat(messages).anySatisfy(msg -> assertThat(msg.trim()).isEqualTo("Missing required parameters: issuerId")); assertThat(messages).anySatisfy(msg -> @@ -313,6 +312,21 @@ public void shouldThrowInvalidRequestForInvalidLocale() throws Exception { .andExpect(status().isBadRequest()); } + @Test + public void shouldReturnErrorResponseOnFetchAllCredentialsForGivenWalletWhenSessionDoesNotHaveWalletId() throws Exception { + setIssuerAndCredentialConfigurationId(issuer, credentialConfigurationId); + mockMvc.perform(get("/wallets/{walletId}/credentials", walletId) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON) + .header("Accept-Language", locale) + .sessionAttr("wallet_key", walletKey) + .content(createRequestBody(verifiableCredentialRequest)) + ) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errorCode").value("wallet_locked")) + .andExpect(jsonPath("$.errorMessage").value("Wallet is locked")); + } + @Test public void shouldThrowInvalidRequestForMissingWalletKeyInFetchAll() throws Exception { when(httpSession.getAttribute("wallet_key")).thenReturn(null); @@ -377,7 +391,6 @@ public void shouldFetchVerifiableCredentialAsDownload() throws Exception { public void shouldThrowInvalidRequestForInvalidAcceptHeader() throws Exception { mockMvc.perform(get("/wallets/{walletId}/credentials/{credentialId}", walletId, credentialId) .header("Accept-Language", locale) - .param("Accept", "application/json") .accept(MediaType.APPLICATION_JSON) .sessionAttr("wallet_id", walletId) .sessionAttr("wallet_key", walletKey)) @@ -386,6 +399,28 @@ public void shouldThrowInvalidRequestForInvalidAcceptHeader() throws Exception { .andExpect(jsonPath("$.errorMessage").value("Accept header must be application/pdf")); } + @Test + public void shouldReturnErrorResponseOnGetVerifiableCredentialWhenSessionDoesNotHaveWalletId() throws Exception { + mockMvc.perform(get("/wallets/{walletId}/credentials/{credentialId}", walletId, credentialId) + .header("Accept-Language", locale) + .accept(MediaType.APPLICATION_PDF) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errorCode").value("wallet_locked")) + .andExpect(jsonPath("$.errorMessage").value("Wallet is locked")); + } + + @Test + public void shouldReturnErrorResponseOnGetVerifiableCredentialWhenSessionDoesNotHaveWalletKey() throws Exception { + mockMvc.perform(get("/wallets/{walletId}/credentials/{credentialId}", walletId, credentialId) + .header("Accept-Language", locale) + .accept(MediaType.APPLICATION_PDF) + .sessionAttr("wallet_id", walletId)) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errorCode").value("invalid_request")) + .andExpect(jsonPath("$.errorMessage").value("Wallet key not found in session")); + } + @Test public void shouldThrowInvalidRequestForInvalidAction() throws Exception { mockMvc.perform(get("/wallets/{walletId}/credentials/{credentialId}", walletId, credentialId) @@ -454,18 +489,27 @@ public void shouldThrowCredentialProcessingExceptionForCorruptedData() throws Ex // Tests for deleteCredential @Test public void shouldDeleteCredentialSuccessfully() throws Exception { - mockMvc.perform(org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete("/wallets/{walletId}/credentials/{credentialId}", walletId, credentialId) + mockMvc.perform(delete("/wallets/{walletId}/credentials/{credentialId}", walletId, credentialId) .sessionAttr("wallet_id", walletId) .sessionAttr("wallet_key", walletKey)) .andExpect(status().isOk()); } + @Test + public void shouldReturnErrorResponseOnDeleteCredentialWhenSessionDoesNotHaveWalletId() throws Exception { + mockMvc.perform(delete("/wallets/{walletId}/credentials/{credentialId}", walletId, credentialId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errorCode").value("wallet_locked")) + .andExpect(jsonPath("$.errorMessage").value("Wallet is locked")); + } + @Test public void shouldThrowCredentialNotFoundExceptionWhenDeletingNonExistentCredential() throws Exception { doThrow(new CredentialNotFoundException(RESOURCE_NOT_FOUND.getErrorCode(), RESOURCE_NOT_FOUND.getErrorMessage())) .when(walletCredentialService).deleteCredential(credentialId, walletId); - mockMvc.perform(org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete("/wallets/{walletId}/credentials/{credentialId}", walletId, credentialId) + mockMvc.perform(delete("/wallets/{walletId}/credentials/{credentialId}", walletId, credentialId) .sessionAttr("wallet_id", walletId) .sessionAttr("wallet_key", walletKey)) .andExpect(status().isNotFound()) @@ -477,7 +521,7 @@ public void shouldThrowCredentialNotFoundExceptionWhenDeletingNonExistentCredent public void shouldThrowInvalidRequestForWalletIdMismatchInDeleteCredential() throws Exception { when(httpSession.getAttribute("wallet_id")).thenReturn("differentWalletId"); - mockMvc.perform(org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete("/wallets/{walletId}/credentials/{credentialId}", walletId, credentialId) + mockMvc.perform(delete("/wallets/{walletId}/credentials/{credentialId}", walletId, credentialId) .sessionAttr("wallet_id", "differentWalletId") .sessionAttr("wallet_key", walletKey)) .andExpect(status().isBadRequest()) diff --git a/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java index 0608b943e..6d659a338 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java @@ -215,7 +215,7 @@ public void shouldUnlockWalletSuccessfully() throws Exception { UnlockWalletRequestDto unlockRequest = new UnlockWalletRequestDto(); unlockRequest.setWalletPin(walletPin); - when(walletService.getWalletKey(userId, walletId, walletPin)).thenReturn("walletKey123"); + when(walletService.getWalletKey(userId, walletId, walletPin, mockSession)).thenReturn("walletKey123"); MvcResult result = mockMvc.perform(post("/wallets/{walletId}/unlock", walletId) .contentType(MediaType.APPLICATION_JSON) @@ -237,7 +237,7 @@ public void shouldUnlockWalletSuccessfully() throws Exception { public void shouldThrowExceptionWhenUserIdIsMissingForUnlockWallet() throws Exception { UnlockWalletRequestDto unlockRequest = new UnlockWalletRequestDto(); unlockRequest.setWalletPin(walletPin); - when(walletService.getWalletKey(null, walletId, walletPin)) + when(walletService.getWalletKey(null, walletId, walletPin, mockSession)) .thenThrow(new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "User ID cannot be null or empty")); mockSession.clearAttributes(); MockHttpSession sessionWithoutUserId = mockSession; @@ -261,7 +261,7 @@ public void shouldThrowExceptionWhenWalletNotFoundForUnlock() throws Exception { UnlockWalletRequestDto unlockRequest = new UnlockWalletRequestDto(); unlockRequest.setWalletPin(walletPin); - when(walletService.getWalletKey(userId, nonExistentWalletId, walletPin)) + when(walletService.getWalletKey(userId, nonExistentWalletId, walletPin, mockSession)) .thenThrow(new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Wallet not found")); mockMvc.perform(post("/wallets/{walletId}/unlock", nonExistentWalletId) @@ -282,7 +282,7 @@ public void shouldThrowExceptionWhenInvalidPinProvidedForUnlock() throws Excepti UnlockWalletRequestDto unlockRequest = new UnlockWalletRequestDto(); unlockRequest.setWalletPin(invalidPin); - when(walletService.getWalletKey(userId, walletId, invalidPin)) + when(walletService.getWalletKey(userId, walletId, invalidPin, mockSession)) .thenThrow(new InvalidRequestException("invalid_pin", "Invalid PIN or wallet key provided")); mockMvc.perform(post("/wallets/{walletId}/unlock", walletId) @@ -302,7 +302,7 @@ public void shouldThrowExceptionForServerErrorDuringUnlock() throws Exception { UnlockWalletRequestDto unlockRequest = new UnlockWalletRequestDto(); unlockRequest.setWalletPin(walletPin); - when(walletService.getWalletKey(userId, walletId, walletPin)) + when(walletService.getWalletKey(userId, walletId, walletPin, mockSession)) .thenThrow(new RuntimeException("Error decrypting wallet key")); mockMvc.perform(post("/wallets/{walletId}/unlock", walletId) @@ -319,7 +319,7 @@ public void shouldThrowExceptionForServerErrorDuringUnlock() throws Exception { @Test public void shouldThrowExceptionIfAnyErrorOccurredWhileFetchingWalletDataForGivenUserIdAndWalletId() throws Exception { - when(walletService.getWalletKey(userId, walletId, walletPin)).thenThrow(new RuntimeException("Exception occurred when fetching the wallet data for given walletId and userId")); + when(walletService.getWalletKey(userId, walletId, walletPin, mockSession)).thenThrow(new RuntimeException("Exception occurred when fetching the wallet data for given walletId and userId")); mockMvc.perform(post(String.format("/wallets/%s/unlock", walletId)) .contentType(MediaType.APPLICATION_JSON) @@ -332,4 +332,22 @@ public void shouldThrowExceptionIfAnyErrorOccurredWhileFetchingWalletDataForGive .andExpect(jsonPath("$.errorCode").value("internal_server_error")) .andExpect(jsonPath("$.errorMessage").value("We are unable to process request now")); } -} + + @Test + public void shouldReturnWalletLockedErrorDetailsWhenWalletIDIsMissingInSession() throws Exception { + mockSession.removeAttribute(SessionKeys.WALLET_ID); + when(walletService.getWalletKey(userId, walletId, walletPin, mockSession)). + thenThrow(new InvalidRequestException("wallet_locked", "Wallet is locked")); + + mockMvc.perform(post(String.format("/wallets/%s/unlock", walletId)) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON) + .content(createRequestBody(createWalletRequestDto)) + .session(mockSession) + .with(SecurityMockMvcRequestPostProcessors.user(userId).roles("USER")) + .with(SecurityMockMvcRequestPostProcessors.csrf())) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errorCode").value("wallet_locked")) + .andExpect(jsonPath("$.errorMessage").value("Wallet is locked")); + } +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java index 0b8905b11..3dc2e95cd 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.service; +import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.dbentity.Wallet; import io.mosip.mimoto.dbentity.WalletMetadata; import io.mosip.mimoto.dto.WalletResponseDto; @@ -14,6 +15,7 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.mock.web.MockHttpSession; import java.time.Instant; import java.util.Arrays; @@ -39,6 +41,8 @@ public class WalletServiceTest { @InjectMocks private WalletServiceImpl walletService; + MockHttpSession mockSession; + private String userId, name, walletId, walletPin, walletConfirmPin, encryptedWalletKey, decryptedWalletKey; private Wallet wallet; @@ -52,6 +56,11 @@ public void setUp() { encryptedWalletKey = "encryptedKey"; decryptedWalletKey = "decryptedKey"; + mockSession = new MockHttpSession(); + mockSession.setAttribute("clientRegistrationId", "google"); + mockSession.setAttribute(SessionKeys.USER_ID, "user123"); + mockSession.setAttribute(SessionKeys.WALLET_ID, walletId); + wallet = new Wallet(); wallet.setId(walletId); wallet.setUserId(userId); @@ -94,7 +103,7 @@ public void shouldDecryptWalletKeySuccessfully() { when(walletRepository.findByUserIdAndId(userId, walletId)).thenReturn(Optional.of(wallet)); when(walletHelper.decryptWalletKey(encryptedWalletKey, walletPin)).thenReturn(decryptedWalletKey); - String result = walletService.getWalletKey(userId, walletId, walletPin); + String result = walletService.getWalletKey(userId, walletId, walletPin, mockSession); assertEquals(decryptedWalletKey, result); verify(walletRepository).findByUserIdAndId(userId, walletId); @@ -106,7 +115,7 @@ public void shouldThrowInvalidRequestExceptionIfWalletNotFoundForGivenUserIdAndW when(walletRepository.findByUserIdAndId(userId, walletId)).thenReturn(Optional.empty()); InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> - walletService.getWalletKey(userId, walletId, walletPin)); + walletService.getWalletKey(userId, walletId, walletPin, mockSession)); assertEquals("invalid_request", exception.getErrorCode()); assertEquals("invalid_request --> Wallet not found", exception.getMessage()); @@ -121,7 +130,7 @@ public void shouldThrowInvalidPinErrorCodeExceptionWhenDecryptingWalletKeyWithIn when(walletHelper.decryptWalletKey(encryptedWalletKey, invalidPin)).thenThrow(new InvalidRequestException("invalid_pin", "Invalid PIN or wallet key provided")); InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> - walletService.getWalletKey(userId, walletId, invalidPin)); + walletService.getWalletKey(userId, walletId, invalidPin, mockSession)); verify(walletRepository).findByUserIdAndId(userId, walletId); assertEquals("invalid_pin", exception.getErrorCode()); From 93eb23731a863d736f92d59bf406282909bc69d9 Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Tue, 27 May 2025 10:04:04 +0530 Subject: [PATCH 627/860] [DSD-8139] include credentialStatus in VCCredentialProperties only if nonNull Signed-off-by: KiruthikaJeyashankar --- .../java/io/mosip/mimoto/dto/mimoto/VCCredentialProperties.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialProperties.java b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialProperties.java index 4f88506c6..8039df6e8 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialProperties.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialProperties.java @@ -46,5 +46,6 @@ public class VCCredentialProperties { @NotEmpty private List<@NotBlank String> type; + @JsonInclude(JsonInclude.Include.NON_NULL) private Map credentialStatus; } From 26a4a8df69e81137484fc3d2d6bf3cfa4ec2ee0b Mon Sep 17 00:00:00 2001 From: SradhaMohanty5899 Date: Tue, 27 May 2025 13:05:34 +0530 Subject: [PATCH 628/860] MOSIP-28246 Removed unused variables from apitest-mimoto module Signed-off-by: SradhaMohanty5899 --- .../apirig/mimoto/testscripts/SimplePostForAutoGenId.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java index ce29b8094..edaaf97fa 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java @@ -108,7 +108,7 @@ public void test(TestCaseDTO testCaseDTO) inputJson = getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()); inputJson = MimotoUtil.inputstringKeyWordHandeler(inputJson, testCaseName); - String outputJson = getJsonFromTemplate(testCaseDTO.getOutput(), testCaseDTO.getOutputTemplate()); +// String outputJson = getJsonFromTemplate(testCaseDTO.getOutput(), testCaseDTO.getOutputTemplate()); if (testCaseDTO.getTemplateFields() != null && templateFields.length > 0) { ArrayList inputtestCases = AdminTestUtil.getInputTestCase(testCaseDTO); From 5d57b73135f9022e683a5aa9b1a998dd70d49c52 Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Tue, 27 May 2025 11:46:17 +0530 Subject: [PATCH 629/860] [INJIWEB-1541] return walletId from users/me api In users/me api, walletId will be null if from DB else it will be as per cached entry Signed-off-by: KiruthikaJeyashankar --- .../io/mosip/mimoto/controller/UsersController.java | 13 +++++++++---- .../mimoto/dto/mimoto/CachedUserMetadataDTO.java | 5 +---- .../io/mosip/mimoto/dto/mimoto/UserMetadataDTO.java | 3 +++ .../oauth2/OAuth2AuthenticationSuccessHandler.java | 2 +- .../mimoto/service/impl/GoogleTokenService.java | 2 +- .../mimoto/service/impl/WalletServiceImpl.java | 1 - .../mimoto/controller/UsersControllerTest.java | 6 ++++-- 7 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/UsersController.java b/src/main/java/io/mosip/mimoto/controller/UsersController.java index 739f947d9..50ddaf560 100644 --- a/src/main/java/io/mosip/mimoto/controller/UsersController.java +++ b/src/main/java/io/mosip/mimoto/controller/UsersController.java @@ -63,14 +63,14 @@ public ResponseEntity getUserProfileInfo(Authentication authent try { userMetadata = fetchUserMetadata(authentication.getName(), identityProvider); + // In case of fetching user info from DB, walletId is null. + // Here login is required as data is unavailable in session userMetadataDTO = new UserMetadataDTO( encryptionService.decrypt(userMetadata.getDisplayName()), encryptionService.decrypt(userMetadata.getProfilePictureUrl()), - encryptionService.decrypt(userMetadata.getEmail()) + encryptionService.decrypt(userMetadata.getEmail()), + null ); - - // Store in session for future use - session.setAttribute(SessionKeys.USER_METADATA, userMetadataDTO); } catch (OAuth2AuthenticationException exception) { log.error("Error occurred while retrieving user profile: ", exception); return Utilities.getErrorResponseEntityWithoutWrapper( @@ -89,6 +89,11 @@ public ResponseEntity getUserProfileInfo(Authentication authent ); } } else { + // If data is available in cache, take walletId also from cache + Object walletIdObj = session.getAttribute(SessionKeys.WALLET_ID); + if (walletIdObj instanceof String walletId) { + userMetadataDTO.setWalletId(walletId); + } log.info("Retrieved user metadata from cache"); } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CachedUserMetadataDTO.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CachedUserMetadataDTO.java index 70397d0ba..6ce822516 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CachedUserMetadataDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CachedUserMetadataDTO.java @@ -11,23 +11,20 @@ @Data @AllArgsConstructor @NoArgsConstructor +//TODO: remove this unused DTO public class CachedUserMetadataDTO implements Serializable { private static final long serialVersionUID = 1L; - @JsonProperty("display_name") @Schema(description = "Display name of the user provided by the Identity Provider") private String displayName; - @JsonProperty("profile_picture_url") @Schema(description = "Profile picture of the user provided by the Identity Provider") private String profilePictureUrl; - @JsonProperty("email") @Schema(description = "Email of the user provided by the Identity Provider") private String email; - @JsonProperty("wallet_id") @Schema(description = "Wallet id of the user in use") private String walletId; } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/UserMetadataDTO.java b/src/main/java/io/mosip/mimoto/dto/mimoto/UserMetadataDTO.java index 487fc35e3..602ddbad1 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/UserMetadataDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/UserMetadataDTO.java @@ -21,4 +21,7 @@ public class UserMetadataDTO implements Serializable { @Schema(description = "Email of the user provided by the Identity Provider") private String email; + + @Schema(description = "Wallet id of the user in use") + private String walletId; } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java index 05cc9712e..1b0976cb8 100644 --- a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java +++ b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java @@ -42,7 +42,7 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo String profilePictureUrl = oAuth2User.getAttribute("picture"); String email = oAuth2User.getAttribute("email"); - session.setAttribute(SessionKeys.USER_METADATA, new UserMetadataDTO(displayName, profilePictureUrl, email)); + session.setAttribute(SessionKeys.USER_METADATA, new UserMetadataDTO(displayName, profilePictureUrl, email, null)); String userId = oAuth2User.getAttribute("userId"); session.setAttribute(SessionKeys.USER_ID, userId); diff --git a/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java b/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java index cb4e9bbf5..175b0171f 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java +++ b/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java @@ -88,7 +88,7 @@ public void processToken(String idToken, String provider, HttpServletRequest req log.error("Failed to store the user info in the database", e); throw new RuntimeException(); } - sessionManager.setupSession(request, provider, new UserMetadataDTO(name, picture, email), userId); + sessionManager.setupSession(request, provider, new UserMetadataDTO(name, picture, email,null), userId); securityContextManager.setupSecurityContext(createOAuth2Token(provider, sub, name, picture, email), request, response); } diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java index 33530ecd3..f3daf42d3 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java @@ -57,7 +57,6 @@ public WalletResponseDto createWallet(String userId, String name, String pin, St public String getWalletKey(String userId, String walletId, String pin, HttpSession httpSession) throws InvalidRequestException { log.info("Retrieving wallet key for user: {}, wallet: {}", userId, walletId); - WalletUtil.validateWalletId(httpSession, walletId); validator.validateUserId(userId); validator.validateWalletPin(pin); diff --git a/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java b/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java index c35d21c94..e57e3dbf4 100644 --- a/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java @@ -59,6 +59,7 @@ class UsersControllerTest { private static final String DECRYPTED_DISPLAY_NAME = "Test User"; private static final String DECRYPTED_PROFILE_PIC = "https://test.com/pic.jpg"; private static final String DECRYPTED_EMAIL = "test@example.com"; + private static final String WALLET_ID = "test-wallet-id"; @BeforeEach void setUp() { @@ -73,7 +74,7 @@ void setUp() { @Test void getUserProfileOnlyFromCacheSuccessWithMockMvc() throws Exception { - UserMetadataDTO userMetadataDTO = new UserMetadataDTO(DECRYPTED_DISPLAY_NAME, DECRYPTED_PROFILE_PIC, DECRYPTED_EMAIL); + UserMetadataDTO userMetadataDTO = new UserMetadataDTO(DECRYPTED_DISPLAY_NAME, DECRYPTED_PROFILE_PIC, DECRYPTED_EMAIL, WALLET_ID); mockHttpSession.setAttribute(SessionKeys.USER_METADATA, userMetadataDTO); mockMvc.perform(get("/users/me") @@ -82,7 +83,8 @@ void getUserProfileOnlyFromCacheSuccessWithMockMvc() throws Exception { .andExpect(status().isOk()) .andExpect(jsonPath("$.displayName").value(DECRYPTED_DISPLAY_NAME)) .andExpect(jsonPath("$.profilePictureUrl").value(DECRYPTED_PROFILE_PIC)) - .andExpect(jsonPath("$.email").value(DECRYPTED_EMAIL)); + .andExpect(jsonPath("$.email").value(DECRYPTED_EMAIL)) + .andExpect(jsonPath("$.walletId").value("test-wallet-id")); } @Test From 99bcb8847ad05380401077c4f5468b9c51816fbd Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Tue, 27 May 2025 17:37:46 +0530 Subject: [PATCH 630/860] [INJIWEB-1541] return unauthorized error on userID not available in session for createWallet API Other changes - open-api doc updated for createWalletAPI Signed-off-by: KiruthikaJeyashankar --- docs/api-documentation-openapi.json | 46 ++++++++++++++----- .../constant/SwaggerLiteralConstants.java | 3 ++ .../mimoto/controller/WalletsController.java | 10 ++-- .../mimoto/exception/ErrorConstants.java | 1 + .../UnAuthorizationAccessException.java | 13 ++++++ .../mimoto/util/GlobalExceptionHandler.java | 11 +++++ .../io/mosip/mimoto/util/WalletValidator.java | 8 +++- .../controller/WalletsControllerTest.java | 23 ++++++++++ .../mimoto/service/WalletServiceTest.java | 14 ++++++ .../mimoto/util/WalletValidatorTest.java | 10 ++++ 10 files changed, 124 insertions(+), 15 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/exception/UnAuthorizationAccessException.java diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index dc7883867..e61f633e8 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -3372,7 +3372,7 @@ "Wallets" ], "summary": "Create a new wallet", - "description": "This API is secured using session-based authentication. The session ID is extracted from the Cookie header and used to retrieve session details from Redis for authentication. The user ID is then obtained from the session and along with the provided wallet name and PIN is used to create a new wallet in the database. If the wallet is created successfully, a unique identifier for the wallet is returned otherwise an appropriate error response is provided.", + "description": "This API is secured using session-based authentication. The session ID is extracted from the Cookie header and used to retrieve session details from Redis for authentication. The user ID is then obtained from the session and along with the provided wallet name and PIN is used to create a new wallet in the database. If the wallet is created successfully, response including unique identifier of the wallet and and the provided name is returned otherwise an appropriate error response is provided.", "operationId": "createWallet", "security": [ { @@ -3392,7 +3392,7 @@ "value": { "walletPin": "1234", "confirmWalletPin": "1234", - "walletName": "wallet 123" + "walletName": "My Personal Wallet" } } } @@ -3405,14 +3405,13 @@ "content": { "application/json": { "schema": { - "type": "string", - "description": "Unique identifier of the Wallet stored in the database" + "$ref": "#/components/schemas/WalletResponseDTO" }, "examples": { "Success response": { "value": { "walletId": "d94a2e70-1234-4f2f-9eae-98765", - "walletName": "wallet 123" + "walletName": "My Personal Wallet" } } } @@ -3427,12 +3426,6 @@ "$ref": "#/components/schemas/Error" }, "examples": { - "User ID is not present in session": { - "value": { - "errorCode": "invalid_request", - "errorMessage": "User ID not found in session" - } - }, "Invalid User ID": { "value": { "errorCode": "invalid_request", @@ -3461,6 +3454,24 @@ } } }, + "401": { + "description": "Unauthorized user creating a wallet", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "User ID is not present in session": { + "value": { + "errorCode": "unauthorized", + "errorMessage": "User ID not found in session" + } + } + } + } + } + }, "500": { "description": "Internal server error while creating Wallet - error occurred while generating Wallet key or encrypting it with Wallet PIN", "content": { @@ -4100,6 +4111,19 @@ "confirmWalletPin" ] }, + "WalletResponseDTO": { + "type": "object", + "properties": { + "walletId": { + "type": "string", + "description": "Unique identifier of the Wallet" + }, + "walletName": { + "type": "string", + "description": "Wallet name provided by the user" + } + } + }, "UnlockWalletRequestDto": { "type": "object", "properties": { diff --git a/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java b/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java index 4c492a96e..3e5207348 100644 --- a/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java +++ b/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java @@ -79,6 +79,9 @@ public class SwaggerLiteralConstants { public static final String USERS_DESCRIPTION = "All the User Profile related endpoints"; /* Wallets Controller */ + public static final String RETRIEVE_ALL_WALLETS_SUMMARY = "Retrieve all wallets for the user"; + public static final String RETRIEVE_ALL_WALLETS_DESCRIPTION = "This API is secured using session-based authentication. The session ID is extracted from the Cookie header to authenticate the user. The user's ID is obtained from the session stored in Redis, and all wallets associated with the user are fetched from the database. If successful, the list of wallets is returned; otherwise, an appropriate error response is returned."; + public static final String WALLETS_NAME = "Wallets"; public static final String WALLETS_DESCRIPTION = "All the Wallet related endpoints"; public static final String WALLETS_DELETE_SUMMARY = "Delete a wallet"; diff --git a/src/main/java/io/mosip/mimoto/controller/WalletsController.java b/src/main/java/io/mosip/mimoto/controller/WalletsController.java index af47f8cd4..95062360b 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletsController.java @@ -7,6 +7,7 @@ import io.mosip.mimoto.dto.UnlockWalletRequestDto; import io.mosip.mimoto.dto.WalletResponseDto; import io.mosip.mimoto.exception.InvalidRequestException; +import io.mosip.mimoto.exception.UnAuthorizationAccessException; import io.mosip.mimoto.service.WalletService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -29,6 +30,9 @@ import java.util.List; +import static io.mosip.mimoto.constant.SwaggerLiteralConstants.RETRIEVE_ALL_WALLETS_DESCRIPTION; +import static io.mosip.mimoto.constant.SwaggerLiteralConstants.RETRIEVE_ALL_WALLETS_SUMMARY; + /** * REST controller for managing wallets. @@ -81,7 +85,7 @@ public WalletsController(WalletService walletService) { @PostMapping public ResponseEntity createWallet( @RequestBody @Valid CreateWalletRequestDto wallet, - HttpSession httpSession) throws InvalidRequestException { + HttpSession httpSession) throws InvalidRequestException, UnAuthorizationAccessException { String userId = (String) httpSession.getAttribute(SessionKeys.USER_ID); log.info("Creating wallet for user: {}, name: {}", userId, wallet.getWalletName()); WalletResponseDto walletResponseDto = walletService.createWallet(userId, wallet.getWalletName(), wallet.getWalletPin(), wallet.getConfirmWalletPin()); @@ -96,8 +100,8 @@ public ResponseEntity createWallet( * @throws InvalidRequestException If the request fails. */ @Operation( - summary = "Retrieve all wallets for the user", - description = "This API is secured using session-based authentication. The session ID is extracted from the Cookie header to authenticate the user. The user's ID is obtained from the session stored in Redis, and all wallets associated with the user are fetched from the database. If successful, the list of wallets is returned; otherwise, an appropriate error response is returned.", + summary = RETRIEVE_ALL_WALLETS_SUMMARY, + description = RETRIEVE_ALL_WALLETS_DESCRIPTION, operationId = "getWallets", security = @SecurityRequirement(name = "SessionAuth") ) diff --git a/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java b/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java index 9a5101c72..e474db05e 100644 --- a/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java +++ b/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java @@ -37,6 +37,7 @@ public enum ErrorConstants { CREDENTIAL_DOWNLOAD_EXCEPTION("credential_download_error", "Failed to download and store the credential"), CREDENTIAL_FETCH_EXCEPTION("credential_fetch_error", "Failed to fetch the credential"), + UNAUTHORIZED_ACCESS("unauthorized", "You are not authorized to access this resource"), WALLET_LOCKED("wallet_locked", "Wallet is locked"), INVALID_PIN("invalid_pin", "Invalid PIN or wallet key provided"); diff --git a/src/main/java/io/mosip/mimoto/exception/UnAuthorizationAccessException.java b/src/main/java/io/mosip/mimoto/exception/UnAuthorizationAccessException.java new file mode 100644 index 000000000..ff2577656 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/exception/UnAuthorizationAccessException.java @@ -0,0 +1,13 @@ +package io.mosip.mimoto.exception; + +import java.io.Serial; + +public class UnAuthorizationAccessException extends BaseUncheckedException { + + @Serial + private static final long serialVersionUID = 1L; + + public UnAuthorizationAccessException(String errorCode, String errorMessage) { + super(errorCode, errorMessage); + } +} diff --git a/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java b/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java index 4bdd7dca6..9d0f7434a 100644 --- a/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java +++ b/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java @@ -4,11 +4,15 @@ import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.exception.ExternalServiceUnavailableException; import io.mosip.mimoto.exception.InvalidRequestException; +import io.mosip.mimoto.exception.UnAuthorizationAccessException; +import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.springframework.context.MessageSourceResolvable; import org.springframework.dao.DataAccessResourceFailureException; import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.http.converter.HttpMessageNotReadableException; +import org.springframework.web.HttpMediaTypeNotSupportedException; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; @@ -43,6 +47,13 @@ public ErrorDTO handleExternalServiceUnavailable(ExternalServiceUnavailableExcep return new ErrorDTO(ex.getErrorCode(), ex.getMessage()); } + @ExceptionHandler(UnAuthorizationAccessException.class) + @ResponseStatus(HttpStatus.UNAUTHORIZED) + public ErrorDTO handleUnAuthorizedAccess(UnAuthorizationAccessException ex) { + log.error("UnAuthorized access detected: ", ex); + return new ErrorDTO(ex.getErrorCode(), ex.getErrorText()); + } + @ExceptionHandler(InvalidRequestException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) public ErrorDTO handleInvalidRequest(InvalidRequestException ex) { diff --git a/src/main/java/io/mosip/mimoto/util/WalletValidator.java b/src/main/java/io/mosip/mimoto/util/WalletValidator.java index b3838117f..2b10b5a95 100644 --- a/src/main/java/io/mosip/mimoto/util/WalletValidator.java +++ b/src/main/java/io/mosip/mimoto/util/WalletValidator.java @@ -2,7 +2,9 @@ import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.exception.InvalidRequestException; +import io.mosip.mimoto.exception.UnAuthorizationAccessException; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @@ -27,7 +29,11 @@ public class WalletValidator { */ public void validateUserId(String userId) throws InvalidRequestException { log.debug("Validating User: {}", userId); - if (userId == null || userId.trim().isEmpty()) { + if(userId == null){ + log.warn("User ID is not available in the session"); + throw new UnAuthorizationAccessException(ErrorConstants.UNAUTHORIZED_ACCESS.getErrorCode(), "User ID not found in session"); + } + if (StringUtils.isBlank(userId)) { log.warn("Invalid user ID: null or empty"); throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "User ID cannot be null or empty"); } diff --git a/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java index 6d659a338..edfac669b 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java @@ -7,6 +7,7 @@ import io.mosip.mimoto.dto.WalletResponseDto; import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.exception.InvalidRequestException; +import io.mosip.mimoto.exception.UnAuthorizationAccessException; import io.mosip.mimoto.service.WalletService; import io.mosip.mimoto.util.GlobalExceptionHandler; import org.junit.Before; @@ -69,6 +70,8 @@ public void setUp() { userId = (String) mockSession.getAttribute(SessionKeys.USER_ID); } + // Test for creating a wallet + @Test public void shouldReturnWalletIdForSuccessfulWalletCreation() throws Exception { when(walletService.createWallet(userId, walletName, walletPin, confirmWalletPin)).thenReturn(new WalletResponseDto(walletId, walletName)); @@ -119,6 +122,26 @@ public void shouldThrowExceptionIfReceivedPINAndConfirmPINDoNotMatch() throws Ex .andExpect(jsonPath("$.errorMessage").value("Entered PIN and Confirm PIN do not match")); } + @Test + public void shouldReturnUnauthorizedWhenUserIdIsMissingForCreateWallet() throws Exception { + mockSession.clearAttributes(); + MockHttpSession sessionWithoutUserId = mockSession; + doThrow(new UnAuthorizationAccessException(ErrorConstants.UNAUTHORIZED_ACCESS.getErrorCode(), "User ID not found in session")).when(walletService).createWallet(null, walletName, walletPin, confirmWalletPin); + + mockMvc.perform(post("/wallets") + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON) + .content(new ObjectMapper().writeValueAsString(createWalletRequestDto)) + .session(sessionWithoutUserId) + .with(SecurityMockMvcRequestPostProcessors.user(userId).roles("USER")) + .with(SecurityMockMvcRequestPostProcessors.csrf())) + .andExpect(status().isUnauthorized()) + .andExpect(jsonPath("$.errorCode").value("unauthorized")) + .andExpect(jsonPath("$.errorMessage").value("User ID not found in session")); + } + + // Test for fetching wallets + @Test public void shouldReturnListOfWalletIDsForValidUserId() throws Exception { List wallets = List.of(new WalletResponseDto("wallet1", "Wallet1"), diff --git a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java index 3dc2e95cd..fb4e04202 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java @@ -5,6 +5,7 @@ import io.mosip.mimoto.dbentity.WalletMetadata; import io.mosip.mimoto.dto.WalletResponseDto; import io.mosip.mimoto.exception.InvalidRequestException; +import io.mosip.mimoto.exception.UnAuthorizationAccessException; import io.mosip.mimoto.repository.WalletRepository; import io.mosip.mimoto.service.impl.WalletServiceImpl; import io.mosip.mimoto.util.WalletUtil; @@ -82,6 +83,19 @@ public void shouldCreateWalletSuccessfully() { verify(walletHelper).createWallet(userId, name, walletPin); } + + @Test + public void shouldThrowUnAuthorizedAccessExceptionOnCreatingWalletIfUserIdNotFoundInSession() { + // In case of userId (or any key) not available in session, the default value will be null. + doThrow(new UnAuthorizationAccessException("unauthorized", "User ID not found in session")).when(walletValidator).validateUserId(null); + + UnAuthorizationAccessException exception = assertThrows(UnAuthorizationAccessException.class, () -> + walletService.createWallet(null, name, walletPin, walletConfirmPin)); + + assertEquals("unauthorized", exception.getErrorCode()); + assertEquals("unauthorized --> User ID not found in session", exception.getMessage()); + } + @Test public void shouldCreateWalletSuccessfullyIfWalletNameIsNotProvided() { String newWalletId = UUID.randomUUID().toString(); diff --git a/src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java b/src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java index 7d09f47e1..802ebb1f1 100644 --- a/src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java +++ b/src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java @@ -1,6 +1,7 @@ package io.mosip.mimoto.util; import io.mosip.mimoto.exception.InvalidRequestException; +import io.mosip.mimoto.exception.UnAuthorizationAccessException; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -54,4 +55,13 @@ void testValidateWalletName_validName() { walletValidator.validateWalletName("wallet1"); walletValidator.validateWalletPin("123456"); } + + @Test + void testValidateUserId_nullUserId() { + UnAuthorizationAccessException exception = assertThrows(UnAuthorizationAccessException.class, () -> { + walletValidator.validateUserId(null); + }); + + assertEquals("unauthorized --> User ID not found in session", exception.getMessage()); + } } From 16bfbccd7fbf8945678c4df4e8a62ff4de68ce3c Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Tue, 27 May 2025 18:13:15 +0530 Subject: [PATCH 631/860] [INJIWEB-1541] set userData to session on /users/me api if session expired Signed-off-by: KiruthikaJeyashankar --- .../mimoto/controller/UsersController.java | 1 + .../controller/UsersControllerTest.java | 21 ++++++++++++------- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/UsersController.java b/src/main/java/io/mosip/mimoto/controller/UsersController.java index 50ddaf560..f434e8830 100644 --- a/src/main/java/io/mosip/mimoto/controller/UsersController.java +++ b/src/main/java/io/mosip/mimoto/controller/UsersController.java @@ -71,6 +71,7 @@ public ResponseEntity getUserProfileInfo(Authentication authent encryptionService.decrypt(userMetadata.getEmail()), null ); + session.setAttribute(SessionKeys.USER_METADATA, userMetadataDTO); } catch (OAuth2AuthenticationException exception) { log.error("Error occurred while retrieving user profile: ", exception); return Utilities.getErrorResponseEntityWithoutWrapper( diff --git a/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java b/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java index e57e3dbf4..d1d598a67 100644 --- a/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java @@ -16,6 +16,7 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.mock.web.MockHttpSession; +import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; @@ -24,9 +25,9 @@ import java.util.Optional; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; import static org.mockito.Mockito.when; -import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors; - import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; @@ -73,7 +74,7 @@ void setUp() { } @Test - void getUserProfileOnlyFromCacheSuccessWithMockMvc() throws Exception { + void getUserProfileOnlyFromCacheSuccess() throws Exception { UserMetadataDTO userMetadataDTO = new UserMetadataDTO(DECRYPTED_DISPLAY_NAME, DECRYPTED_PROFILE_PIC, DECRYPTED_EMAIL, WALLET_ID); mockHttpSession.setAttribute(SessionKeys.USER_METADATA, userMetadataDTO); @@ -88,7 +89,7 @@ void getUserProfileOnlyFromCacheSuccessWithMockMvc() throws Exception { } @Test - void getUserProfileOnlyFromDatabaseSuccessWithMockMvc() throws Exception { + void getUserProfileOnlyFromDatabaseSuccess() throws Exception { UserMetadata userMetadata = new UserMetadata(); userMetadata.setDisplayName(ENCRYPTED_DISPLAY_NAME); userMetadata.setProfilePictureUrl(ENCRYPTED_PROFILE_PIC); @@ -109,10 +110,16 @@ void getUserProfileOnlyFromDatabaseSuccessWithMockMvc() throws Exception { .andExpect(jsonPath("$.displayName").value(DECRYPTED_DISPLAY_NAME)) .andExpect(jsonPath("$.profilePictureUrl").value(DECRYPTED_PROFILE_PIC)) .andExpect(jsonPath("$.email").value(DECRYPTED_EMAIL)); + // assert that the user metadata is stored in the session + UserMetadataDTO userMetadataDTO = (UserMetadataDTO) mockHttpSession.getAttribute(SessionKeys.USER_METADATA); + assertEquals(DECRYPTED_DISPLAY_NAME, userMetadataDTO.getDisplayName()); + assertEquals(DECRYPTED_PROFILE_PIC, userMetadataDTO.getProfilePictureUrl()); + assertEquals(DECRYPTED_EMAIL, userMetadataDTO.getEmail()); + assertNull(userMetadataDTO.getWalletId()); } @Test - void getUserProfileOnlyUserNotFoundWithMockMvc() throws Exception { + void getUserProfileOnlyUserNotFound() throws Exception { mockHttpSession.setAttribute(SessionKeys.USER_METADATA, null); mockHttpSession.setAttribute("clientRegistrationId", IDENTITY_PROVIDER); when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider(PROVIDER_SUBJECT_ID, IDENTITY_PROVIDER)) @@ -127,7 +134,7 @@ void getUserProfileOnlyUserNotFoundWithMockMvc() throws Exception { } @Test - void getUserProfileOnlyDecryptionExceptionWithMockMvc() throws Exception { + void getUserProfileOnlyDecryptionException() throws Exception { UserMetadata userMetadata = new UserMetadata(); userMetadata.setDisplayName(ENCRYPTED_DISPLAY_NAME); userMetadata.setProfilePictureUrl(ENCRYPTED_PROFILE_PIC); @@ -147,7 +154,7 @@ void getUserProfileOnlyDecryptionExceptionWithMockMvc() throws Exception { } @Test - void getUserProfileOnlyMissingIdentityProviderWithMockMvc() throws Exception { + void getUserProfileOnlyMissingIdentityProvider() throws Exception { mockHttpSession.setAttribute(SessionKeys.USER_METADATA, null); mockHttpSession.setAttribute("clientRegistrationId", null); From e3c0c77b2992ed4a466bd8dbcd13b93b89e11a9f Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Tue, 27 May 2025 18:34:19 +0530 Subject: [PATCH 632/860] [INJIWEB-1541] return unauthorized error in /users/me api if data is not in DB Signed-off-by: KiruthikaJeyashankar --- .../mimoto/controller/UsersController.java | 15 +++++++++------ .../controller/UsersControllerTest.java | 19 ++++++++++--------- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/UsersController.java b/src/main/java/io/mosip/mimoto/controller/UsersController.java index f434e8830..95dcc4aad 100644 --- a/src/main/java/io/mosip/mimoto/controller/UsersController.java +++ b/src/main/java/io/mosip/mimoto/controller/UsersController.java @@ -8,7 +8,7 @@ import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; import io.mosip.mimoto.exception.DecryptionException; import io.mosip.mimoto.exception.ErrorConstants; -import io.mosip.mimoto.exception.OAuth2AuthenticationException; +import io.mosip.mimoto.exception.UnAuthorizationAccessException; import io.mosip.mimoto.repository.UserMetadataRepository; import io.mosip.mimoto.service.EncryptionService; import io.mosip.mimoto.util.Utilities; @@ -53,7 +53,7 @@ public class UsersController { @ApiResponse(responseCode = "404", description = "User data not found", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "User not found", value = "{\"errorCode\": \"invalid_user\", \"errorMessage\": \"User not found. Please check your credentials or login again\"}"))) @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"))) @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity getUserProfileInfo(Authentication authentication, HttpSession session) { + public ResponseEntity getUserProfileInfo(Authentication authentication, HttpSession session) throws UnAuthorizationAccessException { UserMetadataDTO userMetadataDTO = (UserMetadataDTO) session.getAttribute(SessionKeys.USER_METADATA); if (userMetadataDTO == null) { @@ -72,12 +72,12 @@ public ResponseEntity getUserProfileInfo(Authentication authent null ); session.setAttribute(SessionKeys.USER_METADATA, userMetadataDTO); - } catch (OAuth2AuthenticationException exception) { + } catch (UnAuthorizationAccessException exception) { log.error("Error occurred while retrieving user profile: ", exception); return Utilities.getErrorResponseEntityWithoutWrapper( exception, ErrorConstants.INVALID_USER.getErrorCode(), - exception.getStatus(), + HttpStatus.UNAUTHORIZED, MediaType.APPLICATION_JSON ); } catch (DecryptionException e) { @@ -101,7 +101,10 @@ public ResponseEntity getUserProfileInfo(Authentication authent return ResponseEntity.status(HttpStatus.OK).body(userMetadataDTO); } - private UserMetadata fetchUserMetadata(String providerSubjectId, String identityProvider) throws OAuth2AuthenticationException { - return userMetadataRepository.findByProviderSubjectIdAndIdentityProvider(providerSubjectId, identityProvider).orElseThrow(() -> new OAuth2AuthenticationException(ErrorConstants.INVALID_USER.getErrorCode(), "User not found. Please check your credentials or login again", HttpStatus.NOT_FOUND)); + private UserMetadata fetchUserMetadata(String providerSubjectId, String identityProvider) throws UnAuthorizationAccessException { + return userMetadataRepository.findByProviderSubjectIdAndIdentityProvider(providerSubjectId, identityProvider). + orElseThrow(() -> + new UnAuthorizationAccessException(ErrorConstants.UNAUTHORIZED_ACCESS.getErrorCode(), "User not found. Please check your credentials or login again") + ); } } diff --git a/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java b/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java index d1d598a67..77c3f01c5 100644 --- a/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java @@ -74,7 +74,7 @@ void setUp() { } @Test - void getUserProfileOnlyFromCacheSuccess() throws Exception { + void getUserProfileInfoFromCacheSuccess() throws Exception { UserMetadataDTO userMetadataDTO = new UserMetadataDTO(DECRYPTED_DISPLAY_NAME, DECRYPTED_PROFILE_PIC, DECRYPTED_EMAIL, WALLET_ID); mockHttpSession.setAttribute(SessionKeys.USER_METADATA, userMetadataDTO); @@ -89,7 +89,7 @@ void getUserProfileOnlyFromCacheSuccess() throws Exception { } @Test - void getUserProfileOnlyFromDatabaseSuccess() throws Exception { + void getUserProfileInfoFromDatabaseSuccess() throws Exception { UserMetadata userMetadata = new UserMetadata(); userMetadata.setDisplayName(ENCRYPTED_DISPLAY_NAME); userMetadata.setProfilePictureUrl(ENCRYPTED_PROFILE_PIC); @@ -119,7 +119,7 @@ void getUserProfileOnlyFromDatabaseSuccess() throws Exception { } @Test - void getUserProfileOnlyUserNotFound() throws Exception { + void getUserProfileInfoWhenUserNotFoundInDB() throws Exception { mockHttpSession.setAttribute(SessionKeys.USER_METADATA, null); mockHttpSession.setAttribute("clientRegistrationId", IDENTITY_PROVIDER); when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider(PROVIDER_SUBJECT_ID, IDENTITY_PROVIDER)) @@ -128,13 +128,13 @@ void getUserProfileOnlyUserNotFound() throws Exception { mockMvc.perform(get("/users/me") .with(SecurityMockMvcRequestPostProcessors.user(DECRYPTED_DISPLAY_NAME).roles("USER")) .session(mockHttpSession)) - .andExpect(status().isNotFound()) - .andExpect(jsonPath("$.errorCode").value(ErrorConstants.INVALID_USER.getErrorCode())) + .andExpect(status().isUnauthorized()) + .andExpect(jsonPath("$.errorCode").value("unauthorized")) .andExpect(jsonPath("$.errorMessage").value("User not found. Please check your credentials or login again")); } @Test - void getUserProfileOnlyDecryptionException() throws Exception { + void getUserProfileInfoWhenDecryptionExceptionOccursWhileProcessingDataFromDB() throws Exception { UserMetadata userMetadata = new UserMetadata(); userMetadata.setDisplayName(ENCRYPTED_DISPLAY_NAME); userMetadata.setProfilePictureUrl(ENCRYPTED_PROFILE_PIC); @@ -154,14 +154,15 @@ void getUserProfileOnlyDecryptionException() throws Exception { } @Test - void getUserProfileOnlyMissingIdentityProvider() throws Exception { + void getUserProfileInfoWhenIdentityProviderIsMissing() throws Exception { mockHttpSession.setAttribute(SessionKeys.USER_METADATA, null); mockHttpSession.setAttribute("clientRegistrationId", null); mockMvc.perform(get("/users/me") .with(SecurityMockMvcRequestPostProcessors.user(DECRYPTED_DISPLAY_NAME).roles("USER")) .session(mockHttpSession)) - .andExpect(status().isNotFound()) - .andExpect(jsonPath("$.errorCode").value(ErrorConstants.INVALID_USER.getErrorCode())); + .andExpect(status().isUnauthorized()) + .andExpect(jsonPath("$.errorCode").value("unauthorized")) + .andExpect(jsonPath("$.errorMessage").value("User not found. Please check your credentials or login again")); } } \ No newline at end of file From c9d25f3b235285f74b419d18f4b5acd7038c2d92 Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Tue, 27 May 2025 18:45:56 +0530 Subject: [PATCH 633/860] [INJIWEB-1541] send params with issuer from controller for getTokenResponse Signed-off-by: KiruthikaJeyashankar --- .../mimoto/controller/CredentialsController.java | 10 +++++----- .../io/mosip/mimoto/controller/IdpController.java | 5 +++-- .../controller/WalletCredentialsController.java | 2 +- .../io/mosip/mimoto/util/CredentialUtilService.java | 8 +++++--- .../mimoto/controller/CredentialsControllerTest.java | 6 +++--- .../io/mosip/mimoto/controller/IdpControllerTest.java | 11 +++++------ .../controller/WalletCredentialsControllerTest.java | 8 ++++---- .../mimoto/service/CredentialUtilServiceTest.java | 9 +++++---- 8 files changed, 31 insertions(+), 28 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/CredentialsController.java b/src/main/java/io/mosip/mimoto/controller/CredentialsController.java index 63bca38d5..bb12e7bc0 100644 --- a/src/main/java/io/mosip/mimoto/controller/CredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/CredentialsController.java @@ -31,7 +31,7 @@ import java.io.IOException; import java.util.Map; -import static io.mosip.mimoto.exception.PlatformErrorMessages.*; +import static io.mosip.mimoto.exception.PlatformErrorMessages.MIMOTO_PDF_SIGN_EXCEPTION; @RestController @RequestMapping(value = "/credentials") @@ -60,7 +60,7 @@ public ResponseEntity downloadCredentialAsPDF(@RequestParam Map downloadCredentialAsPDF(@RequestParam Map> request(@Reques @ApiResponse(responseCode = "200", content = {@Content(schema = @Schema(implementation = TokenResponseDTO.class), mediaType = "application/json")}), @ApiResponse(responseCode = "400", content = {@Content(schema = @Schema(implementation = ResponseWrapper.class), mediaType = "application/json")})}) @PostMapping(value = {"/get-token/{issuer}"}, consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}, produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity getToken(@RequestParam Map params, @PathVariable(required = true, name= "issuer") String issuer) { + public ResponseEntity getToken(@RequestParam Map params, @PathVariable(required = true, name = "issuer") String issuer) { log.info("Reached the getToken Controller for Issuer " + issuer); ResponseWrapper responseWrapper = new ResponseWrapper<>(); try { - TokenResponseDTO response = credentialUtilService.getTokenResponse(params, issuer); + params.put("issuer", issuer); + TokenResponseDTO response = credentialUtilService.getTokenResponse(params); return ResponseEntity.status(HttpStatus.OK).body(response); } catch (Exception ex) { log.error("Exception Occurred while Invoking the Token Endpoint : ", ex); diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index c0da693ad..97ac4bd2a 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -108,7 +108,7 @@ public ResponseEntity downloadCredential( log.info("Initiating token call for issuer: {}", issuerId); TokenResponseDTO tokenResponse; try { - tokenResponse = credentialUtilService.getTokenResponse(verifiableCredentialRequestDTO, issuerId); + tokenResponse = credentialUtilService.getTokenResponse(verifiableCredentialRequestDTO); } catch (ApiNotAccessibleException | IOException | AuthorizationServerWellknownResponseException | InvalidWellknownResponseException e) { log.error("Error fetching token response for issuer: {}", issuerId, e); diff --git a/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java b/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java index b97c8a8c9..4a2b861dd 100644 --- a/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java +++ b/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java @@ -111,11 +111,12 @@ public void init() { pixelPass = new PixelPass(); } - public TokenResponseDTO getTokenResponse(VerifiableCredentialRequestDTO verifiableCredentialRequest, String issuerId) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { - return getTokenResponse(convertVerifiableCredentialRequestToMap(verifiableCredentialRequest), issuerId); + public TokenResponseDTO getTokenResponse(VerifiableCredentialRequestDTO verifiableCredentialRequest) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { + return getTokenResponse(convertVerifiableCredentialRequestToMap(verifiableCredentialRequest)); } - public TokenResponseDTO getTokenResponse(Map params, String issuerId) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { + public TokenResponseDTO getTokenResponse(Map params) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { + String issuerId = params.get("issuer"); IssuerDTO issuerDTO = issuersService.getIssuerDetails(issuerId); CredentialIssuerConfiguration credentialIssuerConfiguration = issuersService.getIssuerConfiguration(issuerId); String tokenEndpoint = idpService.getTokenEndpoint(credentialIssuerConfiguration); @@ -408,6 +409,7 @@ private Map convertVerifiableCredentialRequestToMap(VerifiableCr params.put("redirect_uri", verifiableCredentialRequest.getRedirectUri()); params.put("grant_type", verifiableCredentialRequest.getGrantType()); params.put("code_verifier", verifiableCredentialRequest.getCodeVerifier()); + params.put("issuer", verifiableCredentialRequest.getIssuer()); return params; } diff --git a/src/test/java/io/mosip/mimoto/controller/CredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/CredentialsControllerTest.java index d75359087..c284840ff 100644 --- a/src/test/java/io/mosip/mimoto/controller/CredentialsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/CredentialsControllerTest.java @@ -49,7 +49,7 @@ public class CredentialsControllerTest { @Before public void setUp() throws Exception { tokenResponseDTO = TestUtilities.getTokenResponseDTO(); - Mockito.when(credentialUtilService.getTokenResponse(Mockito.anyMap(), Mockito.eq(issuer))).thenReturn(tokenResponseDTO); + Mockito.when(credentialUtilService.getTokenResponse(Mockito.anyMap())).thenReturn(tokenResponseDTO); requestContent = EntityUtils.toString(new UrlEncodedFormEntity(List.of( new BasicNameValuePair("grant_type", "authorization_code"), new BasicNameValuePair("code", "test-code"), @@ -76,7 +76,7 @@ public void downloadPDFSuccessfully() throws Exception { @Test public void throwExceptionOnFetchingTokenResponseFailure() throws Exception { - Mockito.when(credentialUtilService.getTokenResponse(Mockito.anyMap(), Mockito.eq(issuer))) + Mockito.when(credentialUtilService.getTokenResponse(Mockito.anyMap())) .thenThrow(new IdpException("Exception occurred while performing the authorization")); mockMvc.perform(post("/credentials/download") @@ -90,7 +90,7 @@ public void throwExceptionOnFetchingTokenResponseFailure() throws Exception { @Test public void throwExceptionOnFetchingIssuerOrAuthServerWellknownFailureDuringTokenGeneration() throws Exception { - Mockito.when(credentialUtilService.getTokenResponse(Mockito.anyMap(), Mockito.eq(issuer))) + Mockito.when(credentialUtilService.getTokenResponse(Mockito.anyMap())) .thenThrow(new ApiNotAccessibleException()); mockMvc.perform(post("/credentials/download") diff --git a/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java b/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java index 1347dd301..8aabe1fe9 100644 --- a/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java @@ -4,9 +4,9 @@ import io.mosip.kernel.core.util.JsonUtils; import io.mosip.mimoto.core.http.ResponseWrapper; import io.mosip.mimoto.dto.mimoto.*; -import io.mosip.mimoto.exception.*; +import io.mosip.mimoto.exception.BaseUncheckedException; +import io.mosip.mimoto.exception.IdpException; import io.mosip.mimoto.service.RestClientService; -import io.mosip.mimoto.service.impl.CredentialServiceImpl; import io.mosip.mimoto.service.impl.IdpServiceImpl; import io.mosip.mimoto.service.impl.IssuersServiceImpl; import io.mosip.mimoto.util.*; @@ -25,10 +25,9 @@ import org.springframework.test.web.servlet.MockMvc; import org.springframework.web.servlet.config.annotation.EnableWebMvc; -import static io.mosip.mimoto.util.TestUtilities.*; - import java.util.Arrays; +import static io.mosip.mimoto.util.TestUtilities.getTokenResponseDTO; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -126,7 +125,7 @@ public void walletBindingTest() throws Exception { @Test public void shouldReturnTokenResponseForValidIssuerAndParams() throws Exception { String issuer = "test-issuer"; - Mockito.when(credentialUtilService.getTokenResponse(Mockito.anyMap(), Mockito.eq(issuer))).thenReturn(getTokenResponseDTO()); + Mockito.when(credentialUtilService.getTokenResponse(Mockito.anyMap())).thenReturn(getTokenResponseDTO()); mockMvc.perform(post("/get-token/{issuer}", issuer) .contentType(MediaType.APPLICATION_FORM_URLENCODED) @@ -151,7 +150,7 @@ public void shouldReturnTokenResponseForValidIssuerAndParams() throws Exception @Test public void shouldReturnBadRequestWithErrorIfTokenResponseIsNull() throws Exception { String issuer = "test-issuer"; - Mockito.when(credentialUtilService.getTokenResponse(Mockito.anyMap(), Mockito.eq(issuer))) + Mockito.when(credentialUtilService.getTokenResponse(Mockito.anyMap())) .thenThrow(new IdpException("Exception occurred while performing the authorization")); mockMvc.perform(post("/get-token/{issuer}", issuer) diff --git a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java index e90e61c16..2a3c7222c 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java @@ -99,7 +99,7 @@ public void setup() { @Test public void shouldDownloadCredentialSuccessfully() throws Exception { setIssuerAndCredentialConfigurationId(issuer, credentialConfigurationId); - when(credentialUtilService.getTokenResponse(eq(verifiableCredentialRequest), eq(issuer))).thenReturn(new TokenResponseDTO()); + when(credentialUtilService.getTokenResponse(eq(verifiableCredentialRequest))).thenReturn(new TokenResponseDTO()); when(walletCredentialService.fetchAndStoreCredential(eq(issuer), eq(credentialConfigurationId), any(), eq(locale), eq(walletId), eq(walletKey))) .thenReturn(verifiableCredentialResponseDTO); @@ -143,7 +143,7 @@ public void shouldCallServiceWithCorrectParameters() throws Exception { .sessionAttr("wallet_id", walletId) .sessionAttr("wallet_key", walletKey)); - verify(credentialUtilService).getTokenResponse(eq(verifiableCredentialRequest), eq(issuer)); + verify(credentialUtilService).getTokenResponse(eq(verifiableCredentialRequest)); verify(walletCredentialService ).fetchAndStoreCredential(eq(issuer), eq(credentialConfigurationId), any(), eq("fr"), eq(walletId), eq(walletKey)); } @@ -252,7 +252,7 @@ public void shouldThrowInvalidRequestForMissingCredentialConfigurationId() throw @Test public void shouldThrowServiceUnavailableForTokenResponseFailure() throws Exception { setIssuerAndCredentialConfigurationId(issuer, credentialConfigurationId); - when(credentialUtilService.getTokenResponse(eq(verifiableCredentialRequest), eq(issuer))) + when(credentialUtilService.getTokenResponse(eq(verifiableCredentialRequest))) .thenThrow(new ApiNotAccessibleException("API not accessible")); mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) @@ -267,7 +267,7 @@ public void shouldThrowServiceUnavailableForTokenResponseFailure() throws Except @Test public void shouldThrowServiceUnavailableForExternalServiceFailure() throws Exception { setIssuerAndCredentialConfigurationId(issuer, credentialConfigurationId); - when(credentialUtilService.getTokenResponse(anyMap(), eq(issuer))).thenReturn(new TokenResponseDTO()); + when(credentialUtilService.getTokenResponse(anyMap())).thenReturn(new TokenResponseDTO()); when(walletCredentialService.fetchAndStoreCredential(anyString(), anyString(), any(), anyString(), anyString(), anyString())) .thenThrow(new ExternalServiceUnavailableException("Service unavailable", "Service unavailable")); diff --git a/src/test/java/io/mosip/mimoto/service/CredentialUtilServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialUtilServiceTest.java index 2fb76895b..648ce6e32 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialUtilServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialUtilServiceTest.java @@ -64,7 +64,8 @@ public class CredentialUtilServiceTest { private Map tokenRequestParams = Map.of( "grant_type", "client_credentials", - "client_id", "test-client" + "client_id", "test-client", + "issuer", "issuer1" ); IssuerDTO issuerDTO; TokenResponseDTO expectedTokenResponse; @@ -98,7 +99,7 @@ public void setUp() throws Exception { @Test public void shouldReturnTokenResponseForValidTokenEndpoint() throws Exception { - TokenResponseDTO actualTokenResponse = credentialUtilService.getTokenResponse(tokenRequestParams, issuerId); + TokenResponseDTO actualTokenResponse = credentialUtilService.getTokenResponse(tokenRequestParams); assertEquals(expectedTokenResponse, actualTokenResponse); } @@ -109,7 +110,7 @@ public void shouldThrowExceptionIfResponseIsNullWhenFetchingTokenResponse() thro .thenReturn(null); IdpException actualException = assertThrows(IdpException.class, () -> { - credentialUtilService.getTokenResponse(tokenRequestParams, issuerId); + credentialUtilService.getTokenResponse(tokenRequestParams); }); assertEquals("RESIDENT-APP-034 --> Exception occurred while performing the authorization", actualException.getMessage()); @@ -221,7 +222,7 @@ public void shouldSuccessfullyGeneratePdfForVerifiableCredential() throws Except ByteArrayInputStream actualPDFByteArray = credentialUtilService.generatePdfForVerifiableCredentials("CredentialType1", vcCredentialResponse, issuerDTO, issuerConfig.getCredentialConfigurationsSupported().get("CredentialType1"), "https://datashare_url", "once", "en"); - + String expectedText = extractTextFromPdf(expectedPDFByteArray); String actualText = extractTextFromPdf(actualPDFByteArray); From d4656052d284403c6d3aafb475f90ac3d37aca15 Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Tue, 27 May 2025 18:50:18 +0530 Subject: [PATCH 634/860] [INJIWEB-1541] remove unused data class Other changes: - refactor variable name Signed-off-by: KiruthikaJeyashankar --- .../WalletCredentialsController.java | 10 +++---- .../dto/mimoto/CachedUserMetadataDTO.java | 30 ------------------- 2 files changed, 5 insertions(+), 35 deletions(-) delete mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/CachedUserMetadataDTO.java diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index 97ac4bd2a..4bc968688 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -67,7 +67,7 @@ public WalletCredentialsController(WalletCredentialService walletCredentialServi * Downloads and stores a Verifiable Credential in the specified wallet. * * @param walletId The unique identifier of the wallet. - * @param verifiableCredentialRequestDTO Request body parameters including issuer, credential type, storage expiry, and locale. + * @param verifiableCredentialRequest Request body parameters including issuer, credential type, storage expiry, and locale. * @param httpSession The HTTP session containing wallet key and ID. * @return The stored Verifiable Credential details. * @throws InvalidRequestException If input parameters or session are invalid. @@ -96,19 +96,19 @@ public WalletCredentialsController(WalletCredentialService walletCredentialServi public ResponseEntity downloadCredential( @RequestHeader(value = "Accept-Language", required = false, defaultValue = "en") @Pattern(regexp = "^[a-z]{2}$", message = "Locale must be a 2-letter code") String locale, @PathVariable("walletId") @NotBlank(message = "Wallet ID cannot be blank") String walletId, - @RequestBody @Valid VerifiableCredentialRequestDTO verifiableCredentialRequestDTO, + @RequestBody @Valid VerifiableCredentialRequestDTO verifiableCredentialRequest, HttpSession httpSession) throws InvalidRequestException { validateWalletId(httpSession, walletId); String base64EncodedWalletKey = WalletUtil.getSessionWalletKey(httpSession); - String issuerId = verifiableCredentialRequestDTO.getIssuer(); - String credentialConfigurationId = verifiableCredentialRequestDTO.getCredentialConfigurationId(); + String issuerId = verifiableCredentialRequest.getIssuer(); + String credentialConfigurationId = verifiableCredentialRequest.getCredentialConfigurationId(); log.info("Initiating token call for issuer: {}", issuerId); TokenResponseDTO tokenResponse; try { - tokenResponse = credentialUtilService.getTokenResponse(verifiableCredentialRequestDTO); + tokenResponse = credentialUtilService.getTokenResponse(verifiableCredentialRequest); } catch (ApiNotAccessibleException | IOException | AuthorizationServerWellknownResponseException | InvalidWellknownResponseException e) { log.error("Error fetching token response for issuer: {}", issuerId, e); diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CachedUserMetadataDTO.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CachedUserMetadataDTO.java deleted file mode 100644 index 6ce822516..000000000 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CachedUserMetadataDTO.java +++ /dev/null @@ -1,30 +0,0 @@ -package io.mosip.mimoto.dto.mimoto; - -import com.fasterxml.jackson.annotation.JsonProperty; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.io.Serializable; - -@Data -@AllArgsConstructor -@NoArgsConstructor -//TODO: remove this unused DTO -public class CachedUserMetadataDTO implements Serializable { - - private static final long serialVersionUID = 1L; - - @Schema(description = "Display name of the user provided by the Identity Provider") - private String displayName; - - @Schema(description = "Profile picture of the user provided by the Identity Provider") - private String profilePictureUrl; - - @Schema(description = "Email of the user provided by the Identity Provider") - private String email; - - @Schema(description = "Wallet id of the user in use") - private String walletId; -} \ No newline at end of file From 77b85d40f239634e2364e1613a9025c1c9cdcbea Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Tue, 27 May 2025 18:53:17 +0530 Subject: [PATCH 635/860] [INJIWEB-1541] remove unused parameter in getWalletKey Signed-off-by: KiruthikaJeyashankar --- .../mosip/mimoto/controller/WalletsController.java | 2 +- .../io/mosip/mimoto/service/WalletService.java | 10 ++++------ .../mimoto/service/impl/WalletServiceImpl.java | 3 +-- .../mimoto/controller/WalletsControllerTest.java | 14 +++++++------- .../io/mosip/mimoto/service/WalletServiceTest.java | 6 +++--- 5 files changed, 16 insertions(+), 19 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/WalletsController.java b/src/main/java/io/mosip/mimoto/controller/WalletsController.java index 95062360b..588c51c6c 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletsController.java @@ -145,7 +145,7 @@ public ResponseEntity unlockWallet( HttpSession httpSession) throws InvalidRequestException { String userId = (String) httpSession.getAttribute(SessionKeys.USER_ID); log.info("Unlocking wallet: {} for user: {}", walletId, userId); - String walletKey = walletService.getWalletKey(userId, walletId, wallet.getWalletPin(), httpSession); + String walletKey = walletService.getWalletKey(userId, walletId, wallet.getWalletPin()); httpSession.setAttribute(SessionKeys.WALLET_KEY, walletKey); httpSession.setAttribute(SessionKeys.WALLET_ID, walletId); WalletResponseDto response = WalletResponseDto.builder().walletId(walletId).build(); diff --git a/src/main/java/io/mosip/mimoto/service/WalletService.java b/src/main/java/io/mosip/mimoto/service/WalletService.java index 7d5f43879..23e23788a 100644 --- a/src/main/java/io/mosip/mimoto/service/WalletService.java +++ b/src/main/java/io/mosip/mimoto/service/WalletService.java @@ -2,7 +2,6 @@ import io.mosip.mimoto.dto.WalletResponseDto; import io.mosip.mimoto.exception.InvalidRequestException; -import jakarta.servlet.http.HttpSession; import java.util.List; @@ -26,14 +25,13 @@ public interface WalletService { /** * Retrieves the decrypted wallet key. * - * @param userId The user ID. - * @param walletId The wallet ID. - * @param pin The wallet PIN. - * @param httpSession + * @param userId The user ID. + * @param walletId The wallet ID. + * @param pin The wallet PIN. * @return The decrypted wallet key. * @throws InvalidRequestException If the wallet is not found or PIN is invalid. */ - String getWalletKey(String userId, String walletId, String pin, HttpSession httpSession) throws InvalidRequestException; + String getWalletKey(String userId, String walletId, String pin) throws InvalidRequestException; /** * Retrieves all wallets for a user. diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java index f3daf42d3..ce9e9f09d 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java @@ -8,7 +8,6 @@ import io.mosip.mimoto.service.WalletService; import io.mosip.mimoto.util.WalletUtil; import io.mosip.mimoto.util.WalletValidator; -import jakarta.servlet.http.HttpSession; import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; @@ -54,7 +53,7 @@ public WalletResponseDto createWallet(String userId, String name, String pin, St } @Override - public String getWalletKey(String userId, String walletId, String pin, HttpSession httpSession) throws InvalidRequestException { + public String getWalletKey(String userId, String walletId, String pin) throws InvalidRequestException { log.info("Retrieving wallet key for user: {}, wallet: {}", userId, walletId); validator.validateUserId(userId); diff --git a/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java index edfac669b..434577aef 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java @@ -238,7 +238,7 @@ public void shouldUnlockWalletSuccessfully() throws Exception { UnlockWalletRequestDto unlockRequest = new UnlockWalletRequestDto(); unlockRequest.setWalletPin(walletPin); - when(walletService.getWalletKey(userId, walletId, walletPin, mockSession)).thenReturn("walletKey123"); + when(walletService.getWalletKey(userId, walletId, walletPin)).thenReturn("walletKey123"); MvcResult result = mockMvc.perform(post("/wallets/{walletId}/unlock", walletId) .contentType(MediaType.APPLICATION_JSON) @@ -260,7 +260,7 @@ public void shouldUnlockWalletSuccessfully() throws Exception { public void shouldThrowExceptionWhenUserIdIsMissingForUnlockWallet() throws Exception { UnlockWalletRequestDto unlockRequest = new UnlockWalletRequestDto(); unlockRequest.setWalletPin(walletPin); - when(walletService.getWalletKey(null, walletId, walletPin, mockSession)) + when(walletService.getWalletKey(null, walletId, walletPin)) .thenThrow(new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "User ID cannot be null or empty")); mockSession.clearAttributes(); MockHttpSession sessionWithoutUserId = mockSession; @@ -284,7 +284,7 @@ public void shouldThrowExceptionWhenWalletNotFoundForUnlock() throws Exception { UnlockWalletRequestDto unlockRequest = new UnlockWalletRequestDto(); unlockRequest.setWalletPin(walletPin); - when(walletService.getWalletKey(userId, nonExistentWalletId, walletPin, mockSession)) + when(walletService.getWalletKey(userId, nonExistentWalletId, walletPin)) .thenThrow(new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Wallet not found")); mockMvc.perform(post("/wallets/{walletId}/unlock", nonExistentWalletId) @@ -305,7 +305,7 @@ public void shouldThrowExceptionWhenInvalidPinProvidedForUnlock() throws Excepti UnlockWalletRequestDto unlockRequest = new UnlockWalletRequestDto(); unlockRequest.setWalletPin(invalidPin); - when(walletService.getWalletKey(userId, walletId, invalidPin, mockSession)) + when(walletService.getWalletKey(userId, walletId, invalidPin)) .thenThrow(new InvalidRequestException("invalid_pin", "Invalid PIN or wallet key provided")); mockMvc.perform(post("/wallets/{walletId}/unlock", walletId) @@ -325,7 +325,7 @@ public void shouldThrowExceptionForServerErrorDuringUnlock() throws Exception { UnlockWalletRequestDto unlockRequest = new UnlockWalletRequestDto(); unlockRequest.setWalletPin(walletPin); - when(walletService.getWalletKey(userId, walletId, walletPin, mockSession)) + when(walletService.getWalletKey(userId, walletId, walletPin)) .thenThrow(new RuntimeException("Error decrypting wallet key")); mockMvc.perform(post("/wallets/{walletId}/unlock", walletId) @@ -342,7 +342,7 @@ public void shouldThrowExceptionForServerErrorDuringUnlock() throws Exception { @Test public void shouldThrowExceptionIfAnyErrorOccurredWhileFetchingWalletDataForGivenUserIdAndWalletId() throws Exception { - when(walletService.getWalletKey(userId, walletId, walletPin, mockSession)).thenThrow(new RuntimeException("Exception occurred when fetching the wallet data for given walletId and userId")); + when(walletService.getWalletKey(userId, walletId, walletPin)).thenThrow(new RuntimeException("Exception occurred when fetching the wallet data for given walletId and userId")); mockMvc.perform(post(String.format("/wallets/%s/unlock", walletId)) .contentType(MediaType.APPLICATION_JSON) @@ -359,7 +359,7 @@ public void shouldThrowExceptionIfAnyErrorOccurredWhileFetchingWalletDataForGive @Test public void shouldReturnWalletLockedErrorDetailsWhenWalletIDIsMissingInSession() throws Exception { mockSession.removeAttribute(SessionKeys.WALLET_ID); - when(walletService.getWalletKey(userId, walletId, walletPin, mockSession)). + when(walletService.getWalletKey(userId, walletId, walletPin)). thenThrow(new InvalidRequestException("wallet_locked", "Wallet is locked")); mockMvc.perform(post(String.format("/wallets/%s/unlock", walletId)) diff --git a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java index fb4e04202..61a43dd2d 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java @@ -117,7 +117,7 @@ public void shouldDecryptWalletKeySuccessfully() { when(walletRepository.findByUserIdAndId(userId, walletId)).thenReturn(Optional.of(wallet)); when(walletHelper.decryptWalletKey(encryptedWalletKey, walletPin)).thenReturn(decryptedWalletKey); - String result = walletService.getWalletKey(userId, walletId, walletPin, mockSession); + String result = walletService.getWalletKey(userId, walletId, walletPin); assertEquals(decryptedWalletKey, result); verify(walletRepository).findByUserIdAndId(userId, walletId); @@ -129,7 +129,7 @@ public void shouldThrowInvalidRequestExceptionIfWalletNotFoundForGivenUserIdAndW when(walletRepository.findByUserIdAndId(userId, walletId)).thenReturn(Optional.empty()); InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> - walletService.getWalletKey(userId, walletId, walletPin, mockSession)); + walletService.getWalletKey(userId, walletId, walletPin)); assertEquals("invalid_request", exception.getErrorCode()); assertEquals("invalid_request --> Wallet not found", exception.getMessage()); @@ -144,7 +144,7 @@ public void shouldThrowInvalidPinErrorCodeExceptionWhenDecryptingWalletKeyWithIn when(walletHelper.decryptWalletKey(encryptedWalletKey, invalidPin)).thenThrow(new InvalidRequestException("invalid_pin", "Invalid PIN or wallet key provided")); InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> - walletService.getWalletKey(userId, walletId, invalidPin, mockSession)); + walletService.getWalletKey(userId, walletId, invalidPin)); verify(walletRepository).findByUserIdAndId(userId, walletId); assertEquals("invalid_pin", exception.getErrorCode()); From 2bc5327add36b20a17ce0d0af0c7ccff75d0f068 Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Tue, 27 May 2025 19:51:49 +0530 Subject: [PATCH 636/860] [INJIWEB-1541] optimize import Signed-off-by: KiruthikaJeyashankar --- src/main/java/io/mosip/mimoto/dto/mimoto/UserMetadataDTO.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/UserMetadataDTO.java b/src/main/java/io/mosip/mimoto/dto/mimoto/UserMetadataDTO.java index 602ddbad1..1d48cbd3f 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/UserMetadataDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/UserMetadataDTO.java @@ -1,6 +1,6 @@ package io.mosip.mimoto.dto.mimoto; -import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Data; @@ -23,5 +23,6 @@ public class UserMetadataDTO implements Serializable { private String email; @Schema(description = "Wallet id of the user in use") + @JsonInclude(JsonInclude.Include.NON_NULL) private String walletId; } \ No newline at end of file From 7897a92ea5474df13592b3993543dba4746daaf5 Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Wed, 28 May 2025 06:50:18 +0530 Subject: [PATCH 637/860] [INJIWEB-1541] update get all wallets of user api doc Signed-off-by: KiruthikaJeyashankar --- docs/api-documentation-openapi.json | 22 +++++++++++++++++-- .../mimoto/controller/WalletsController.java | 5 +++-- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index e61f633e8..beddf37a3 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -3538,7 +3538,7 @@ "value": [ { "walletId": "123e4567-e89b-12d3-a456-426614174000", - "walletName": "Wallet 123" + "walletName": "My Personal Wallet" }, { "walletId": "223e4567-e89b-12d3-a456-426614174001", @@ -3558,9 +3558,27 @@ "$ref": "#/components/schemas/Error" }, "examples": { - "User ID is not present in session": { + "Invalid User ID": { "value": { "errorCode": "invalid_request", + "errorMessage": "User ID cannot be null or empty" + } + } + } + } + } + }, + "401": { + "description": "Unauthorized user creating a wallet", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "User ID is not present in session": { + "value": { + "errorCode": "unauthorized", "errorMessage": "User ID not found in session" } } diff --git a/src/main/java/io/mosip/mimoto/controller/WalletsController.java b/src/main/java/io/mosip/mimoto/controller/WalletsController.java index 588c51c6c..a073c56c2 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletsController.java @@ -75,11 +75,11 @@ public WalletsController(WalletService walletService) { ) @ApiResponse(responseCode = "200", description = "Wallet created successfully", content = @Content(mediaType = "application/json", schema = @Schema(type = "string", description = "Unique identifier of the Wallet stored in the database"), examples = @ExampleObject(name = "Success response", value = "{\"walletId\":\"d94a2e70-1234-4f2f-9eae-98765\", \"walletName\":\"My Wallet\"}"))) @ApiResponse(responseCode = "400", description = "Invalid wallet creation request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = { - @ExampleObject(name = "User ID is not present in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"User ID not found in session\"}"), @ExampleObject(name = "Invalid User ID", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"User ID cannot be null or empty\"}"), @ExampleObject(name = "Invalid Wallet name", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet name must be alphanumeric with allowed special characters\"}"), @ExampleObject(name = "Invalid Wallet Pin", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"\"}"), @ExampleObject(name = "Wallet Pin and confirm Pin Mismatch", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Entered PIN and Confirm PIN do not match\"}")})) + @ApiResponse(responseCode = "401", description = "Unauthorized access", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "User ID not found in session", value = "{\"errorCode\": \"unauthorized\", \"errorMessage\": \"User ID not found in session\"}"))) @ApiResponse(responseCode = "500", description = "Internal server error while creating wallet", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"))) @ApiResponse(responseCode = "503", description = "Service unavailable", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Database connection failure", value = "{\"errorCode\": \"database_unavailable\", \"errorMessage\": \"Failed to connect to the database\"}"))) @PostMapping @@ -106,7 +106,8 @@ public ResponseEntity createWallet( security = @SecurityRequirement(name = "SessionAuth") ) @ApiResponse(responseCode = "200", description = "List of wallets retrieved successfully", content = @Content(mediaType = "application/json", array = @ArraySchema(schema = @Schema(implementation = WalletResponseDto.class)), examples = @ExampleObject(name = "Success response", value = "[{\"walletId\": \"123e4567-e89b-12d3-a456-426614174000\"}, {\"walletId\": \"223e4567-e89b-12d3-a456-426614174001\"}]"))) - @ApiResponse(responseCode = "400", description = "Invalid Wallets fetching request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "User ID is not present in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"User ID not found in session\"}"))) + @ApiResponse(responseCode = "400", description = "Invalid Wallets fetching request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Invalid User ID", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"User ID cannot be null or empty\"}"))) + @ApiResponse(responseCode = "401", description = "Unauthorized access", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "User ID not found in session", value = "{\"errorCode\": \"unauthorized\", \"errorMessage\": \"User ID not found in session\"}"))) @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"))) @ApiResponse(responseCode = "503", description = "Service unavailable", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Database connection failure", value = "{\"errorCode\": \"database_unavailable\", \"errorMessage\": \"Failed to connect to the database\"}"))) @GetMapping From 2c3c198f6295787146f04dec927a96188a4b771c Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Wed, 28 May 2025 07:11:20 +0530 Subject: [PATCH 638/860] [INJIWEB-1541] update delete wallet of user api doc Signed-off-by: KiruthikaJeyashankar --- docs/api-documentation-openapi.json | 22 +++++++++++++++---- .../mimoto/controller/WalletsController.java | 6 +++-- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index beddf37a3..a789fc8af 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -3569,7 +3569,7 @@ } }, "401": { - "description": "Unauthorized user creating a wallet", + "description": "Unauthorized user fetching wallets", "content": { "application/json": { "schema": { @@ -3746,23 +3746,37 @@ "description": "Wallet successfully deleted" }, "401": { - "description": "Unauthorized access", + "description": "Unauthorized user deleting a wallet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" + }, + "examples": { + "User ID is not present in session": { + "value": { + "errorCode": "unauthorized", + "errorMessage": "User ID not found in session" + } + } } } } }, - "404": { - "description": "Wallet not found", + "400": { + "description": "Invalid wallet deletion request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" }, "examples": { + "Invalid User ID": { + "value": { + "errorCode": "invalid_request", + "errorMessage": "User ID cannot be null or empty" + } + }, "Wallet not found": { "value": { "errorCode": "invalid_request", diff --git a/src/main/java/io/mosip/mimoto/controller/WalletsController.java b/src/main/java/io/mosip/mimoto/controller/WalletsController.java index a073c56c2..616037c23 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletsController.java @@ -168,8 +168,10 @@ public ResponseEntity unlockWallet( parameters = {@Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet to be deleted", schema = @Schema(type = "string"))} ) @ApiResponse(responseCode = "200", description = "Wallet successfully deleted") - @ApiResponse(responseCode = "401", description = "Unauthorized access", content = @Content(mediaType = "application/json")) - @ApiResponse(responseCode = "404", description = "Wallet not found", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Wallet not found", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet not found\"}"))) + @ApiResponse(responseCode = "400", description = "Invalid wallet creation request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = { + @ExampleObject(name = "Invalid User ID", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"User ID cannot be null or empty\"}"), + @ExampleObject(name = "Wallet not found", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet not found\"}")})) + @ApiResponse(responseCode = "401", description = "Unauthorized access", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "User ID not found in session", value = "{\"errorCode\": \"unauthorized\", \"errorMessage\": \"User ID not found in session\"}"))) @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"))) @DeleteMapping("/{walletId}") public ResponseEntity deleteWallet(@PathVariable("walletId") String walletId, HttpSession httpSession) { From 56525e61af36bd830f39f422f9e71a1b85947b38 Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Wed, 28 May 2025 07:27:49 +0530 Subject: [PATCH 639/860] [INJIWEB-1541] update unlock wallet api doc Signed-off-by: KiruthikaJeyashankar --- docs/api-documentation-openapi.json | 41 ++++++++++++++----- .../mimoto/controller/WalletsController.java | 8 +++- 2 files changed, 38 insertions(+), 11 deletions(-) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index a789fc8af..12da28994 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -3625,6 +3625,7 @@ } }, "delete": { + //TODO: update right path "tags": [ "Wallet Credentials" ], @@ -3829,7 +3830,8 @@ "schema": { "type": "string" }, - "description": "Unique identifier of the wallet to be unlocked" + "description": "Unique identifier of the wallet to be unlocked", + "example": "123e4567-e89b-12d3-a456-426614174000" } ], "requestBody": { @@ -3860,7 +3862,8 @@ "examples": { "Success response": { "value": { - "walletId": "123e4567-e89b-12d3-a456-426614174000" + "walletId": "123e4567-e89b-12d3-a456-426614174000", + "walletName": "My Personal Wallet" } } } @@ -3868,19 +3871,13 @@ } }, "400": { - "description": "Invalid Wallets fetching request", + "description": "Invalid Wallet unlock request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" }, "examples": { - "User ID is not present in session": { - "value": { - "errorCode": "invalid_request", - "errorMessage": "User ID not found in session" - } - }, "Wallet not found": { "value": { "errorCode": "invalid_request", @@ -3898,6 +3895,30 @@ "errorCode": "invalid_request", "errorMessage": "PIN must be numeric with 6 digits" } + }, + "Incorrect Wallet PIN": { + "value": { + "errorCode": "invalid_pin", + "errorMessage": "Invalid PIN or wallet key provided" + } + } + } + } + } + }, + "401": { + "description": "Unauthorized user unlocking wallet", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "User ID is not present in session": { + "value": { + "errorCode": "unauthorized", + "errorMessage": "User ID not found in session" + } } } } @@ -4181,7 +4202,7 @@ }, "walletName" : { "type": "string", - "description": "Wallet name provided by the user" + "description": "Name of the Wallet" } } }, diff --git a/src/main/java/io/mosip/mimoto/controller/WalletsController.java b/src/main/java/io/mosip/mimoto/controller/WalletsController.java index 616037c23..2081cf241 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletsController.java @@ -136,7 +136,13 @@ public ResponseEntity> getWallets(HttpSession httpSessio requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody(required = true, content = @Content(mediaType = "application/json", schema = @Schema(implementation = UnlockWalletRequestDto.class))) ) @ApiResponse(responseCode = "200", description = "Wallet unlocked successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = WalletResponseDto.class), examples = @ExampleObject(name = "Success response", value = "{\"walletId\": \"123e4567-e89b-12d3-a456-426614174000\"}"))) - @ApiResponse(responseCode = "400", description = "Invalid Wallets fetching request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "User ID is not present in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"User ID not found in session\"}"), @ExampleObject(name = "Wallet not found", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet not found\"}"), @ExampleObject(name = "Invalid User ID", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"User ID cannot be null or empty\"}"), @ExampleObject(name = "Invalid Wallet Pin", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"PIN must be numeric with 6 digits\"}")})) + @ApiResponse(responseCode = "400", description = "Invalid Wallet unlock request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = { + @ExampleObject(name = "Wallet not found", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet not found\"}"), + @ExampleObject(name = "Invalid User ID", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"User ID cannot be null or empty\"}"), + @ExampleObject(name = "Invalid Wallet Pin", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"PIN must be numeric with 6 digits\"}"), + @ExampleObject(name = "Incorrect Wallet PIN", value = "{\"errorCode\": \"invalid_pin\", \"errorMessage\": \"Invalid PIN or wallet key provided\"}") + })) + @ApiResponse(responseCode = "401", description = "Unauthorized access", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "User ID not found in session", value = "{\"errorCode\": \"unauthorized\", \"errorMessage\": \"User ID not found in session\"}"))) @ApiResponse(responseCode = "500", description = "Internal server error - any error occurred while decrypting the Wallet key with Wallet PIN or when fetching Wallet details from the database", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"))) @ApiResponse(responseCode = "503", description = "Service unavailable", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Database connection failure", value = "{\"errorCode\": \"database_unavailable\", \"errorMessage\": \"Failed to connect to the database\"}"))) @PostMapping("/{walletId}/unlock") From 35cdeb1a0f93bb0593783594880546c7a4634560 Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Wed, 28 May 2025 07:54:23 +0530 Subject: [PATCH 640/860] [INJIWEB-1541] update users/me api doc Signed-off-by: KiruthikaJeyashankar --- docs/api-documentation-openapi.json | 132 ++++-------------- .../mimoto/controller/UsersController.java | 41 +++++- 2 files changed, 63 insertions(+), 110 deletions(-) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index 12da28994..ec1ffc8ef 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -2669,14 +2669,14 @@ ] } }, - "/users/me/db": { + "/users/me": { "get": { "tags": [ "Users" ], - "summary": "Retrieve user metadata from the database", - "description": "This API is secured using session-based authentication. When a request is made, the server retrieves the session ID from the Cookie header and uses it to fetch session details from Redis. From the session, it extracts the user's unique identifier (typically the sub field provided by the identity provider) along with the clientRegistrationId. These values are then used to retrieve the user's metadata from the database. If successful, the API returns the user's profile information. If any issue occurs such as missing user data or server error then an appropriate error response is returned.", - "operationId": "getUserProfileFromDB", + "summary": "Retrieve user metadata", + "description": "First attempts to retrieve user metadata from the session cache. If not available, fetches from the database. This API is secured using session-based authentication.", + "operationId": "getUserProfile", "security": [ { "SessionAuth": [] @@ -2684,35 +2684,43 @@ ], "responses": { "200": { - "description": "User profile retrieved successfully from the Database", + "description": "User profile retrieved successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserMetadataDTO" }, "examples": { - "Success response": { + "Success response from DB": { "value": { "display_name": "John Doe", "profile_picture_url": "https://example.com/profile.jpg", "email": "john.doe@example.com" } + }, + "Success response from cache": { + "value": { + "display_name": "John Doe", + "profile_picture_url": "https://example.com/profile.jpg", + "email": "john.doe@example.com", + "walletId": "w-1234-5678-90ab-cdef" + } } } } } }, - "404": { - "description": "User data not found in the database", + "401": { + "description": "User data not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" }, "examples": { - "User not found in the Database": { + "User not found": { "value": { - "errorCode": "invalid_user", + "errorCode": "unauthorized", "errorMessage": "User not found. Please check your credentials or login again" } } @@ -2721,7 +2729,7 @@ } }, "500": { - "description": "Internal server error - any error occurred while decrypting the data or fetching the data from the database", + "description": "Internal server error", "content": { "application/json": { "schema": { @@ -2733,6 +2741,12 @@ "errorCode": "internal_server_error", "errorMessage": "We are unable to process request now" } + }, + "Decryption Error": { + "value": { + "errorCode": "internal_server_error", + "errorMessage": "Failed to process user data" + } } } } @@ -2759,79 +2773,6 @@ } } }, - "/users/me/cache": { - "get": { - "tags": [ - "Users" - ], - "summary": "Retrieve user metadata from the stored redis session", - "description": "This API is secured using session-based authentication. When a request is made, the server retrieves the session ID from the Cookie header and uses it to fetch session details from Redis. It then attempts to retrieve the user's metadata directly from the session. If the metadata is available, the API returns the user's profile information otherwise an appropriate error response is returned.", - "operationId": "getUserProfileFromCache", - "security": [ - { - "SessionAuth": [] - } - ], - "responses": { - "200": { - "description": "User profile retrieved successfully from the session", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UserMetadataDTO" - }, - "examples": { - "Success response": { - "value": { - "display_name": "John Doe", - "profile_picture_url": "https://example.com/profile.jpg", - "email": "john.doe@example.com", - "walletId": "123e4567-e89b-12d3-a456-426614174000" - } - } - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - }, - "examples": { - "User metadata not found in session": { - "value": { - "errorCode": "session_invalid_or_expired", - "errorMessage": "User session is missing or expired. Please log in again." - } - } - } - } - } - }, - "500": { - "description": "Internal server error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - }, - "examples": { - "Unexpected Server Error": { - "value": { - "errorCode": "internal_server_error", - "errorMessage": "We are unable to process request now" - } - } - } - } - } - } - } - } - }, "/wallets/{walletId}/credentials": { "post": { "tags": [ @@ -4091,30 +4032,11 @@ "type": "string", "format": "email", "description": "The email address of the user provided by the Identity Provider" - } - } - }, - "CachedUserMetadataDTO": { - "type": "object", - "properties": { - "display_name": { - "type": "string", - "description": "The display name of the user provided by the Identity Provider" - }, - "profile_picture_url": { - "type": "string", - "format": "uri", - "description": "The URL of the user's profile picture provided by the Identity Provider" }, - "email": { + "walletId": { "type": "string", "format": "email", - "description": "The email address of the user provided by the Identity Provider" - }, - "wallet_id": { - "type": "string", - "format": "uuid", - "description": "The active wallet id of the user" + "description": "The unique identifier of the user's wallet. This is available if data is fetched from session else its null" } } }, diff --git a/src/main/java/io/mosip/mimoto/controller/UsersController.java b/src/main/java/io/mosip/mimoto/controller/UsersController.java index 95dcc4aad..421c85f0d 100644 --- a/src/main/java/io/mosip/mimoto/controller/UsersController.java +++ b/src/main/java/io/mosip/mimoto/controller/UsersController.java @@ -48,12 +48,43 @@ public class UsersController { * @param session The HTTP session * @return ResponseEntity containing user metadata */ - @Operation(summary = "Retrieve user metadata", description = "First attempts to retrieve user metadata from the session cache. If not available, fetches from the database. This API is secured using session-based authentication.", operationId = "getUserProfile", security = @SecurityRequirement(name = "SessionAuth")) - @ApiResponse(responseCode = "200", description = "User profile retrieved successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = UserMetadataDTO.class), examples = @ExampleObject(name = "Success response", value = SwaggerExampleConstants.FETCH_USER_PROFILE_SUCCESS))) - @ApiResponse(responseCode = "404", description = "User data not found", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "User not found", value = "{\"errorCode\": \"invalid_user\", \"errorMessage\": \"User not found. Please check your credentials or login again\"}"))) - @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"))) + @Operation( + summary = "Retrieve user metadata", + description = "First attempts to retrieve user metadata from the session cache. If not available, fetches from the database. This API is secured using session-based authentication.", + operationId = "getUserProfile", + security = @SecurityRequirement(name = "SessionAuth") + ) + @ApiResponse( + responseCode = "200", + description = "User profile retrieved successfully", + content = @Content( + mediaType = "application/json", + schema = @Schema(implementation = UserMetadataDTO.class), + examples = { + @ExampleObject(name = "Success response from DB", value = SwaggerExampleConstants.FETCH_USER_PROFILE_FROM_DB_SUCCESS), + @ExampleObject(name = "Success response from cache", value = SwaggerExampleConstants.FETCH_USER_CACHE_PROFILE_SUCCESS) + } + ) + ) + @ApiResponse(responseCode = "401", description = "User data not found", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "User not found", value = "{\"errorCode\": \"unauthorized\", \"errorMessage\": \"User not found. Please check your credentials or login again\"}"))) + @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = { + @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"), + @ExampleObject(name = "Decryption Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"Failed to process user data\"}"), + })) + @ApiResponse( + responseCode = "503", + description = "Service unavailable", + content = @Content( + mediaType = "application/json", + schema = @Schema(implementation = ErrorDTO.class), + examples = @ExampleObject( + name = "Database connection failure", + value = "{\"errorCode\": \"database_unavailable\", \"errorMessage\": \"Failed to connect to the database\"}" + ) + ) + ) @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity getUserProfileInfo(Authentication authentication, HttpSession session) throws UnAuthorizationAccessException { + public ResponseEntity getUserProfileInfo(Authentication authentication, HttpSession session) throws Exception { UserMetadataDTO userMetadataDTO = (UserMetadataDTO) session.getAttribute(SessionKeys.USER_METADATA); if (userMetadataDTO == null) { From 47d100ffb04f58273beaee3e6f6bc53ddfba2682 Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Wed, 28 May 2025 09:28:22 +0530 Subject: [PATCH 641/860] [INJIWEB-1541] update api docs of wallet credentials Signed-off-by: KiruthikaJeyashankar --- docs/api-documentation-openapi.json | 435 ++++++++++-------- .../constant/SwaggerExampleConstants.java | 4 +- .../WalletCredentialsController.java | 44 +- .../dto/VerifiableCredentialRequestDTO.java | 4 +- .../WalletCredentialsControllerTest.java | 8 +- 5 files changed, 275 insertions(+), 220 deletions(-) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index ec1ffc8ef..242fe2631 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -2693,17 +2693,17 @@ "examples": { "Success response from DB": { "value": { - "display_name": "John Doe", - "profile_picture_url": "https://example.com/profile.jpg", + "displayName": "John Doe", + "profilePictureUrl": "https://example.com/profile.jpg", "email": "john.doe@example.com" } }, "Success response from cache": { "value": { - "display_name": "John Doe", - "profile_picture_url": "https://example.com/profile.jpg", + "displayName": "John Doe", + "profilePictureUrl": "john.doe@example.com", "email": "john.doe@example.com", - "walletId": "w-1234-5678-90ab-cdef" + "walletId": "123e4567-e89b-12d3-a456-426614174000" } } } @@ -2716,14 +2716,6 @@ "application/json": { "schema": { "$ref": "#/components/schemas/Error" - }, - "examples": { - "User not found": { - "value": { - "errorCode": "unauthorized", - "errorMessage": "User not found. Please check your credentials or login again" - } - } } } } @@ -2795,69 +2787,34 @@ "type": "string" }, "description": "Unique identifier of the user's wallet where the credential will be stored" + }, + { + "name": "Accept-Language", + "in": "header", + "required": false, + "schema": { + "type": "string", + "default": "en" + }, + "description": "Locale is used to determine the language in which credential's issuer display details should be stored. Input should be a 2-letter code (e.g., 'en' for English, 'fr' for French). If not provided, defaults to 'en'." } ], "requestBody": { "required": true, "content": { - "multipart/form-data": { + "application/json": { "schema": { - "type": "object", - "properties": { - "grant_type": { - "type": "string", - "description": "OAuth 2.0 grant type, typically 'authorization_code'" - }, - "code": { - "type": "string", - "description": "Authorization code received from the identity provider" - }, - "redirect_uri": { - "type": "string", - "description": "Redirect URI used in the OAuth 2.0 flow" - }, - "code_verifier": { - "type": "string", - "description": "PKCE code verifier associated with the authorization code" - }, - "issuer": { - "type": "string", - "description": "Unique identifier of the credential Issuer" - }, - "credential": { - "type": "string", - "description": "Type of the credential to be downloaded" - }, - "vcStorageExpiryLimitInTimes": { - "type": "string", - "description": "Optional limit for how many times the user is allowed to share the Verifiable Credential. If not provided, it defaults to -1" - }, - "locale": { - "type": "string", - "description": "Language preference in which the user expects the Verifiable Credential to be rendered" - } - }, - "required": [ - "grant_type", - "code", - "redirect_uri", - "code_verifier", - "issuer", - "credential", - "locale" - ] + "$ref": "#/components/schemas/VerifiableCredentialRequestDTO" }, "examples": { - "Default Example": { + "Default download": { "value": { - "grant_type": "authorization_code", - "code": "abc123", - "redirect_uri": "https://example.com/redirect", - "code_verifier": "xyz-secret-verifier", "issuer": "Mosip", - "credential": "MosipVerifiableCredential", - "vcStorageExpiryLimitInTimes": "1", - "locale": "en" + "credentialConfigurationId": "MosipVerifiableCredential", + "code": "abc123", + "grant_type": "authorization_code", + "redirectUri": "https://example.com/redirect", + "codeVerifier": "xyz-secret-verifier" } } } @@ -2875,11 +2832,11 @@ "examples": { "Success response": { "value": { - "issuer_name": "Mosip", - "issuer_logo": "https://example.com/logo.png", - "credential_type": "MosipVerifiableCredential", - "credential_type_logo": "https://example.com/credential-logo.png", - "credential_id": "1234567890" + "issuerName": "Mosip", + "issuerLogo": "https://example.com/logo.png", + "credentialType": "MosipVerifiableCredential", + "credentialTypeLogo": "https://example.com/credential-logo.png", + "credentialId": "1234567890" } } } @@ -2887,41 +2844,53 @@ } }, "400": { - "description": "Bad request - Wallet key is null / blank or Wallet ID is null / blank / mismatch with session Wallet ID or required params are missing / invalid", + "description": "Bad request - Wallet key is null / blank or Wallet ID is null / blank / mismatch with session Wallet ID or required params are missing / invalid or any invalid request data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" }, "examples": { + "Wallet ID is null or blank": { + "value": { + "errorCode": "invalid_request", + "errorMessage": "Wallet ID cannot be blank" + } + }, + "Invalid Accept-Language header": { + "value": { + "errorCode": "invalid_request", + "errorMessage": "Locale must be a 2-letter code" + } + }, "Invalid Wallet Id": { "value": { "errorCode": "invalid_request", "errorMessage": "Invalid Wallet ID. Session and request Wallet ID do not match" } }, - "Wallet key not found in session": { + "Wallet Id not found in session": { "value": { - "errorCode": "invalid_request", - "errorMessage": "Wallet key not found in session" + "errorCode": "wallet_locked", + "errorMessage": "Wallet is locked" } }, - "Missing required params": { + "Wallet key not found in session" : { "value": { "errorCode": "invalid_request", - "errorMessage": "Issuer and credentialConfigurationId are required" + "errorMessage": "Wallet key not found in session" } }, - "Wallet ID is null or blank": { + "Invalid issuer": { "value": { "errorCode": "invalid_request", - "errorMessage": "Wallet ID cannot be null or blank" + "errorMessage": "issuerId cannot be blank" } }, - "Issuer ID is null or blank": { + "Invalid credentialConfigurationId": { "value": { "errorCode": "invalid_request", - "errorMessage": "Issuer ID cannot be null or blank" + "errorMessage": "credentialConfigurationId cannot be blank" } } } @@ -3025,13 +2994,14 @@ "description": "Unique identifier of the user's wallet from where the credential will be fetched" }, { - "name": "locale", - "in": "query", - "required": true, + "name": "Accept-Language", + "in": "header", + "required": false, "schema": { - "type": "string" + "type": "string", + "default": "en" }, - "description": "Locale is used to determine the language in which credentials should be rendered" + "description": "Language preference in which the user expects the Verifiable Credential to be rendered. Input should be a 2-letter code (e.g., 'en' for English, 'fr' for French). If not provided, defaults to 'en'." } ], "responses": { @@ -3049,11 +3019,11 @@ "Success response": { "value": [ { - "issuer_name": "Mosip", - "issuer_logo": "https://example.com/logo.png", - "credential_type": "MosipVerifiableCredential", - "credential_type_logo": "https://example.com/credential-logo.png", - "credential_id": "1234567890" + "issuerName": "Mosip", + "issuerLogo": "https://example.com/logo.png", + "credentialType": "MosipVerifiableCredential", + "credentialTypeLogo": "https://example.com/credential-logo.png", + "credentialId": "1234567890" } ] } @@ -3075,11 +3045,23 @@ "errorMessage": "Invalid Wallet ID. Session and request Wallet ID do not match" } }, + "Wallet ID is not available in session" : { + "value": { + "errorCode": "wallet_locked", + "errorMessage": "Wallet is locked" + } + }, "Wallet key not found in session": { "value": { "errorCode": "invalid_request", "errorMessage": "Wallet key not found in session" } + }, + "Invalid Accept-Language header": { + "value": { + "errorCode": "invalid_request", + "errorMessage": "Locale must be a 2-letter code" + } } } } @@ -3157,23 +3139,24 @@ "description": "Unique identifier of the Verifiable Credential to be retrieved" }, { - "name": "locale", + "name": "action", "in": "query", - "required": true, + "required": false, "schema": { - "type": "string" + "type": "string", + "default": "inline" }, - "description": "Language preference in which the user expects the Verifiable Credential to be rendered" + "description": "Controls how the credential should be displayed. If it is sent as download, the response will include a header to download the file. For any other value or if not provided, it defaults to inline to preview the file in the browser." }, { - "name": "action", - "in": "query", + "name": "Accept-Language", + "in": "header", "required": false, "schema": { "type": "string", - "default": "inline" + "default": "en" }, - "description": "Controls how the credential should be displayed. If it is sent as download, the response will include a header to download the file. For any other value or if not provided, it defaults to inline to preview the file in the browser." + "description": "Language preference in which the user expects the Verifiable Credential to be rendered. Input should be a 2-letter code (e.g., 'en' for English, 'fr' for French). If not provided, defaults to 'en'." } ], "responses": { @@ -3216,11 +3199,29 @@ "errorMessage": "Invalid Wallet ID. Session and request Wallet ID do not match" } }, + "Wallet ID is not available in session" : { + "value": { + "errorCode": "wallet_locked", + "errorMessage": "Wallet is locked" + } + }, "Wallet key not found in session": { "value": { "errorCode": "invalid_request", "errorMessage": "Wallet key not found in session" } + }, + "Invalid Accept-Language header": { + "value": { + "errorCode": "invalid_request", + "errorMessage": "Locale must be a 2-letter code" + } + }, + "Invalid Accept header" : { + "value": { + "errorCode": "invalid_request", + "errorMessage": "Accept header must be application/pdf" + } } } } @@ -3305,6 +3306,104 @@ } } } + }, + "delete": { + "tags": [ + "Wallet Credentials" + ], + "summary": "Delete a credential from a wallet", + "description": "This endpoint allows you to delete a specific credential from a wallet. The API is secured using session-based authentication. The session ID is extracted from the Cookie header to authenticate the user. The wallet ID is validated against the session to ensure the user has access to the wallet. If the credential is successfully deleted, a 200 OK response is returned.", + "operationId": "deleteCredential", + "security": [ + { + "SessionAuth": [] + } + ], + "parameters": [ + { + "name": "walletId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier of the wallet containing the credential" + }, + { + "name": "credentialId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier of the credential to be deleted" + } + ], + "responses": { + "200": { + "description": "Credential successfully deleted" + }, + "400": { + "description": "Provided request is invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "Invalid Wallet Id": { + "value": { + "errorCode": "invalid_request", + "errorMessage": "Invalid Wallet ID. Session and request Wallet ID do not match" + } + }, + "Wallet ID is not available in session" : { + "value": { + "errorCode": "wallet_locked", + "errorMessage": "Wallet is locked" + } + } + } + } + } + }, + "404": { + "description": "Credential not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "Credential not found": { + "value": { + "errorCode": "resource_not_found", + "errorMessage": "The requested resource doesn’t exist." + } + } + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "Unexpected Server Error": { + "value": { + "errorCode": "internal_server_error", + "errorMessage": "We are unable to process request now" + } + } + } + } + } + } + } } }, "/wallets": { @@ -3351,7 +3450,7 @@ "examples": { "Success response": { "value": { - "walletId": "d94a2e70-1234-4f2f-9eae-98765", + "walletId": "123e4567-e89b-12d3-a456-426614174000", "walletName": "My Personal Wallet" } } @@ -3564,99 +3663,6 @@ } } } - }, - "delete": { - //TODO: update right path - "tags": [ - "Wallet Credentials" - ], - "summary": "Delete a credential from a wallet", - "description": "This endpoint allows you to delete a specific credential from a wallet. The API is secured using session-based authentication. The session ID is extracted from the Cookie header to authenticate the user. The wallet ID is validated against the session to ensure the user has access to the wallet. If the credential is successfully deleted, a 200 OK response is returned.", - "operationId": "deleteCredential", - "security": [ - { - "SessionAuth": [] - } - ], - "parameters": [ - { - "name": "walletId", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "description": "Unique identifier of the wallet containing the credential" - }, - { - "name": "credentialId", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "description": "Unique identifier of the credential to be deleted" - } - ], - "responses": { - "200": { - "description": "Credential successfully deleted" - }, - "403": { - "description": "Unauthorized access to wallet", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - }, - "examples": { - "Invalid Wallet Id": { - "value": { - "errorCode": "invalid_request", - "errorMessage": "Invalid Wallet ID. Session and request Wallet ID do not match" - } - } - } - } - } - }, - "404": { - "description": "Credential not found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - }, - "examples": { - "Credential not found": { - "value": { - "errorCode": "resource_not_found", - "errorMessage": "The requested resource doesn’t exist." - } - } - } - } - } - }, - "500": { - "description": "Internal server error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - }, - "examples": { - "Unexpected Server Error": { - "value": { - "errorCode": "internal_server_error", - "errorMessage": "We are unable to process request now" - } - } - } - } - } - } - } } }, "/wallets/{walletId}": { @@ -4040,26 +4046,59 @@ } } }, + "VerifiableCredentialRequestDTO": { + "type": "object", + "properties": { + "issuer": { + "type": "string", + "description": "The unique identifier of the issuer" + }, + "credentialConfigurationId": { + "type": "string", + "description": "The unique identifier of the credential type from the issuer well-known configuration" + }, + "code": { + "type": "string", + "description": "The authorization code received from the authorization server" + }, + "grantType": { + "type": "string", + "description": "The grant type for the authorization request" + }, + "redirectUri": { + "type": "string", + "description": "The redirect URI for the authorization request" + }, + "codeVerifier": { + "type": "string", + "description": "The code verifier used for PKCE (Proof Key for Code Exchange)" + } + }, + "required": [ + "issuer", + "credentialConfigurationId" + ] + }, "VerifiableCredentialResponseDTO": { "type": "object", "properties": { - "issuer_name": { + "issuerName": { "type": "string", "description": "Name of the Issuer" }, - "issuer_logo": { + "issuerLogo": { "type": "string", "description": "Logo of the Issuer" }, - "credential_type": { + "credentialType": { "type": "string", "description": "The name of the Credential Type issued by the Issuer" }, - "credential_type_logo": { + "credentialTypeLogo": { "type": "string", "description": "Logo of the Credential Type" }, - "credential_id": { + "credentialId": { "type": "string", "description": "Unique Identifier of the Credential in the database" } diff --git a/src/main/java/io/mosip/mimoto/constant/SwaggerExampleConstants.java b/src/main/java/io/mosip/mimoto/constant/SwaggerExampleConstants.java index 97b51c1f9..8174ed3ee 100644 --- a/src/main/java/io/mosip/mimoto/constant/SwaggerExampleConstants.java +++ b/src/main/java/io/mosip/mimoto/constant/SwaggerExampleConstants.java @@ -33,11 +33,11 @@ public class SwaggerExampleConstants { } """; - public static final String FETCH_USER_PROFILE_SUCCESS = """ + public static final String FETCH_USER_PROFILE_FROM_DB_SUCCESS = """ { "display_name": "John Doe", "profile_picture_url": "https://example.com/profile.jpg", - "email": "john.doe@example.com" + "email": "john.doe@example.com", } """; public static final String FETCH_USER_CACHE_PROFILE_SUCCESS = """ diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index 4bc968688..a580a84b8 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -66,9 +66,9 @@ public WalletCredentialsController(WalletCredentialService walletCredentialServi /** * Downloads and stores a Verifiable Credential in the specified wallet. * - * @param walletId The unique identifier of the wallet. + * @param walletId The unique identifier of the wallet. * @param verifiableCredentialRequest Request body parameters including issuer, credential type, storage expiry, and locale. - * @param httpSession The HTTP session containing wallet key and ID. + * @param httpSession The HTTP session containing wallet key and ID. * @return The stored Verifiable Credential details. * @throws InvalidRequestException If input parameters or session are invalid. */ @@ -89,7 +89,14 @@ public WalletCredentialsController(WalletCredentialService walletCredentialServi ) ) @ApiResponse(responseCode = "200", description = "Verifiable Credential downloaded and stored successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = VerifiableCredentialResponseDTO.class))) - @ApiResponse(responseCode = "400", description = "Bad request - Wallet key is null / blank or Wallet ID is null / blank / mismatch with session Wallet ID or required params are missing / invalid", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "Invalid Wallet Id", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Invalid Wallet ID. Session and request Wallet ID do not match\"}"), @ExampleObject(name = "Wallet key not found in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet key not found in session\"}"), @ExampleObject(name = "Missing required params", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Issuer and credentialConfigurationId are required\"}"), @ExampleObject(name = "Wallet ID is null or blank", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet ID cannot be null or blank\"}"), @ExampleObject(name = "Issuer ID is null or blank", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Issuer ID cannot be null or blank\"}")})) + @ApiResponse(responseCode = "400", description = "Bad request - Wallet key is null / blank or Wallet ID is null / blank / mismatch with session Wallet ID or required params are missing / invalid", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = { + @ExampleObject(name = "Invalid header Accept-Language", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Locale must be a 2-letter code\"}"), + @ExampleObject(name = "Wallet Id is empty or blank", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet ID cannot be blank\"}"), + @ExampleObject(name = "Wallet ID not found in session", value = "{\"errorCode\": \"wallet_locked\", \"errorMessage\": \"Wallet is locked\"}"), + @ExampleObject(name = "Invalid Wallet Id", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Invalid Wallet ID. Session and request Wallet ID do not match\"}"), + @ExampleObject(name = "Wallet key not found in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet key not found in session\"}"), + @ExampleObject(name = "Invalid issuer", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"issuerId cannot be blank\"}"), + @ExampleObject(name = "Invalid credentialConfigurationId", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"credentialConfigurationId cannot be blank\"}")})) @ApiResponse(responseCode = "500", description = "Internal server error - error occurred while serializing the VC response, encrypting the credential, or storing it", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "Credential already exists", value = "{\"errorCode\": \"credential_download_error\", \"errorMessage\": \"Duplicate credential for issuer and type\"}"), @ExampleObject(name = "Issuer config error", value = "{\"errorCode\": \"credential_download_error\", \"errorMessage\": \"Unable to fetch issuer configuration\"}"), @ExampleObject(name = "Failed to generate VC request", value = "{\"errorCode\": \"credential_download_error\", \"errorMessage\": \"Unable to generate credential request\"}"), @ExampleObject(name = "Signature verification failed", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"), @ExampleObject(name = "Unexpected server error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}")})) @ApiResponse(responseCode = "503", description = "Service unavailable - error while fetching issuer or auth server well-known, downloading credential, or DB connection failure", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "API is not accessible", value = "{\"errorCode\": \"credential_download_error\", \"errorMessage\": \"Failed to download and store the credential\"}"), @ExampleObject(name = "Failed to download credential", value = "{\"errorCode\": \"server_unavailable\", \"errorMessage\": \"Unable to download credential from issuer\"}"), @ExampleObject(name = "Database connection failure", value = "{\"errorCode\": \"database_unavailable\", \"errorMessage\": \"Failed to connect to the database\"}")})) @PostMapping @@ -145,7 +152,12 @@ public ResponseEntity downloadCredential( @Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the user's wallet from where the credential will be fetched", schema = @Schema(type = "string")), @Parameter(name = "Accept-Language", in = ParameterIn.HEADER, description = "Locale is used to determine the language in which credentials should be rendered. It follows 2 letter language code", schema = @Schema(type = "string"))}) @ApiResponse(responseCode = "200", description = "Credentials retrieved successfully", content = @Content(mediaType = "application/json", array = @ArraySchema(schema = @Schema(implementation = VerifiableCredentialResponseDTO.class)), examples = @ExampleObject(value = SwaggerExampleConstants.FETCH_ALL_CREDENTIALS_OF_WALLET_SUCCESS))) - @ApiResponse(responseCode = "400", description = "Bad request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "Invalid Wallet Id", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Invalid Wallet ID. Session and request Wallet ID do not match\"}"), @ExampleObject(name = "Wallet key not found in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet key not found in session\"}")})) + @ApiResponse(responseCode = "400", description = "Bad request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = { + @ExampleObject(name = "Invalid Wallet Id", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Invalid Wallet ID. Session and request Wallet ID do not match\"}"), + @ExampleObject(name = "Wallet ID not found in session", value = "{\"errorCode\": \"wallet_locked\", \"errorMessage\": \"Wallet is locked\"}"), + @ExampleObject(name = "Wallet key not found in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet key not found in session\"}"), + @ExampleObject(name = "Invalid Accept-Language header", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Locale must be a 2-letter code\"}"), + })) @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"))) @ApiResponse(responseCode = "503", description = "Service unavailable", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Database connection failure", value = "{\"errorCode\": \"database_unavailable\", \"errorMessage\": \"Failed to connect to the database\"}"))) @GetMapping @@ -182,7 +194,12 @@ public ResponseEntity> fetchAllCredentials @Parameter(name = "Accept-Language", in = ParameterIn.QUERY, required = true, description = "Language preference in which the user expects the Verifiable Credential to be rendered", schema = @Schema(type = "string")), @Parameter(name = "action", in = ParameterIn.QUERY, description = "Controls how the credential should be displayed. If sent as download, the response will include a header to download the file. Defaults to inline.", schema = @Schema(type = "string", defaultValue = "inline"))}) @ApiResponse(responseCode = "200", description = "Verifiable Credential fetched successfully", headers = @Header(name = HttpHeaders.CONTENT_DISPOSITION, description = "Indicates if the verifiable credential is displayed inline or downloaded", schema = @Schema(type = "string", example = "inline; filename=\"credential.pdf\"")), content = @Content(mediaType = "application/pdf", schema = @Schema(type = "string", format = "binary"), examples = @ExampleObject(value = "PDF content in Binary Format"))) - @ApiResponse(responseCode = "400", description = "Bad request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "Invalid Wallet Id", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Invalid Wallet ID. Session and request Wallet ID do not match\"}"), @ExampleObject(name = "Wallet key not found in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet key not found in session\"}")})) + @ApiResponse(responseCode = "400", description = "Bad request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = { + @ExampleObject(name = "Invalid Wallet Id", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Invalid Wallet ID. Session and request Wallet ID do not match\"}"), + @ExampleObject(name = "Wallet key not found in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet key not found in session\"}"), + @ExampleObject(name = "Wallet ID not found in session", value = "{\"errorCode\": \"wallet_locked\", \"errorMessage\": \"Wallet is locked\"}"), + @ExampleObject(name = "Invalid Accept header", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Accept header must be application/pdf\"}"), + })) @ApiResponse(responseCode = "404", description = "Not Found - Credential not found for given Wallet ID and Credential ID", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "No credentials found", value = "{\"errorCode\": \"resource_not_found\", \"errorMessage\": \"The requested resource doesn’t exist.\"}"))) @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "Failed to decrypt the Credential", value = "{\"errorCode\": \"credential_fetch_error\", \"errorMessage\": \"Decryption failed\"}"), @ExampleObject(name = "Credential Type is invalid", value = "{\"errorCode\": \"credential_fetch_error\", \"errorMessage\": \"Invalid credential type configuration\"}"), @ExampleObject(name = "Exception occurred while fetching Issuer config", value = "{\"errorCode\": \"credential_download_error\", \"errorMessage\": \"Unable to fetch issuer configuration\"}"), @ExampleObject(name = "Exception occurred when generating PDF", value = "{\"errorCode\": \"credential_download_error\", \"errorMessage\": \"Failed to generate credential PDF\"}"), @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}")})) @ApiResponse(responseCode = "503", description = "Service unavailable", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Database connection failure", value = "{\"errorCode\": \"database_unavailable\", \"errorMessage\": \"Failed to connect to the database\"}"))) @@ -194,16 +211,12 @@ public ResponseEntity getVerifiableCredential( @RequestHeader(value = "Accept-Language", defaultValue = "en") @Pattern(regexp = "^[a-z]{2}$", message = "Locale must be a 2-letter code") String locale, @RequestParam(value = "action", defaultValue = "inline") @Pattern(regexp = "^(inline|download)$", message = "Action must be 'inline' or 'download'") String action, HttpSession httpSession) throws InvalidRequestException { - if (!Objects.equals(accept, MediaType.APPLICATION_PDF_VALUE)) { - log.error("Invalid Accept header: {}", accept); - return Utilities.getErrorResponseEntityWithoutWrapper( - new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Accept header must be application/pdf"), - ErrorConstants.INVALID_REQUEST.getErrorCode(), - HttpStatus.BAD_REQUEST, - MediaType.APPLICATION_JSON); - } try { + if (!Objects.equals(accept, MediaType.APPLICATION_PDF_VALUE)) { + log.error("Invalid Accept header: {}. Valid Accept headers are - [\"application/pdf\"]", accept); + throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Accept header must be application/pdf"); + } validateWalletId(httpSession, walletId); String base64EncodedWalletKey = WalletUtil.getSessionWalletKey(httpSession); @@ -245,7 +258,10 @@ public ResponseEntity getVerifiableCredential( @Operation(summary = SwaggerLiteralConstants.WALLET_CREDENTIALS_DELETE_SUMMARY, description = SwaggerLiteralConstants.WALLET_CREDENTIALS_DELETE_DESCRIPTION) @ApiResponses({ @ApiResponse(responseCode = "200", description = "Credential successfully deleted"), - @ApiResponse(responseCode = "403", description = "Unauthorized access to wallet"), + @ApiResponse(responseCode = "400", description = "Bad request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = { + @ExampleObject(name = "Invalid Wallet Id", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Invalid Wallet ID. Session and request Wallet ID do not match\"}"), + @ExampleObject(name = "Wallet ID not found in session", value = "{\"errorCode\": \"wallet_locked\", \"errorMessage\": \"Wallet is locked\"}"), + })), @ApiResponse(responseCode = "404", description = "Credential not found"), @ApiResponse(responseCode = "500", description = "Internal server error", content = {@Content(mediaType = "application/json")})}) @DeleteMapping("/{credentialId}") diff --git a/src/main/java/io/mosip/mimoto/dto/VerifiableCredentialRequestDTO.java b/src/main/java/io/mosip/mimoto/dto/VerifiableCredentialRequestDTO.java index 6091d0c25..b351230a6 100644 --- a/src/main/java/io/mosip/mimoto/dto/VerifiableCredentialRequestDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/VerifiableCredentialRequestDTO.java @@ -11,11 +11,11 @@ @Setter public class VerifiableCredentialRequestDTO { @Schema(description = "The unique identifier of the issuer") - @NotBlank(message = "Missing required parameters: issuerId") + @NotBlank(message = "issuerId cannot be blank") String issuer; @Schema(description = "The unique identifier of the credential type from the issuer well-known configuration") - @NotBlank(message = "Missing required parameters: credentialConfigurationId") + @NotBlank(message = "credentialConfigurationId cannot be blank") String credentialConfigurationId; @Schema(description = "The authorization code received from the authorization server") diff --git a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java index 2a3c7222c..a4f541f9c 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java @@ -228,9 +228,9 @@ public void shouldThrowInvalidRequestForMissingIssuerAndCredentialConfigurationI assertEquals(2, messages.length); assertThat(messages).anySatisfy(msg -> - assertThat(msg.trim()).isEqualTo("Missing required parameters: issuerId")); + assertThat(msg.trim()).isEqualTo("issuerId cannot be blank")); assertThat(messages).anySatisfy(msg -> - assertThat(msg.trim()).isEqualTo("Missing required parameters: credentialConfigurationId")); + assertThat(msg.trim()).isEqualTo("credentialConfigurationId cannot be blank")); }); } @@ -240,13 +240,13 @@ public void shouldThrowInvalidRequestForMissingCredentialConfigurationId() throw mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) .accept(MediaType.APPLICATION_JSON) .contentType(MediaType.APPLICATION_JSON) - .content(createRequestBody(verifiableCredentialRequest)) + .content("{\"issuer\":\"issuer1\",\"code\":null,\"grantType\":null,\"redirectUri\":null,\"codeVerifier\":null}") .header("Accept-Language", "fr") .sessionAttr("wallet_id", walletId) .sessionAttr("wallet_key", walletKey)) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.errorCode").value("invalid_request")) - .andExpect(jsonPath("$.errorMessage").value("Missing required parameters: credentialConfigurationId")); + .andExpect(jsonPath("$.errorMessage").value("credentialConfigurationId cannot be blank")); } @Test From 0b0fa4ec542de0092241d656c24015395ca72a55 Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Wed, 28 May 2025 09:45:13 +0530 Subject: [PATCH 642/860] [INJIWEB-1541] update postman collection local development environment is also added focussing on local testing Signed-off-by: KiruthikaJeyashankar --- .../LocalDevelopment.postman_environment.json | 51 +++++ .../MIMOTO.postman_collection.json | 187 +++++++++++------- 2 files changed, 164 insertions(+), 74 deletions(-) create mode 100644 docs/postman-collections/LocalDevelopment.postman_environment.json diff --git a/docs/postman-collections/LocalDevelopment.postman_environment.json b/docs/postman-collections/LocalDevelopment.postman_environment.json new file mode 100644 index 000000000..088758315 --- /dev/null +++ b/docs/postman-collections/LocalDevelopment.postman_environment.json @@ -0,0 +1,51 @@ +{ + "id": "384e12f7-b68a-40f9-b2ff-49905294ba0a", + "name": "LocalDevelopment", + "values": [ + { + "key": "walletPin", + "value": "123456", + "type": "default", + "enabled": true + }, + { + "key": "walletId", + "value": "", + "type": "default", + "enabled": true + }, + { + "key": "csrf_token", + "value": "", + "type": "any", + "enabled": true + }, + { + "key": "HOST", + "value": "", + "type": "default", + "enabled": true + }, + { + "key": "credentialId", + "value": "", + "type": "default", + "enabled": true + }, + { + "key": "clientId", + "value": "", + "type": "secret", + "enabled": true + }, + { + "key": "clientSecret", + "value": "", + "type": "secret", + "enabled": true + } + ], + "_postman_variable_scope": "environment", + "_postman_exported_at": "2025-05-28T04:13:37.653Z", + "_postman_exported_using": "Postman/11.47.0" +} \ No newline at end of file diff --git a/docs/postman-collections/MIMOTO.postman_collection.json b/docs/postman-collections/MIMOTO.postman_collection.json index 6de8c7c0f..55f11ee5f 100644 --- a/docs/postman-collections/MIMOTO.postman_collection.json +++ b/docs/postman-collections/MIMOTO.postman_collection.json @@ -1,9 +1,9 @@ { "info": { - "_postman_id": "a2fb8c1d-d7ac-42a5-9587-aeae9a216ba0", + "_postman_id": "75c40eda-2aec-4fd7-a70b-ac2a40e8e04b", "name": "MIMOTO", "schema": "https://schema.getpostman.com/json/collection/v2.0.0/collection.json", - "_exporter_id": "10750965" + "_exporter_id": "29153193" }, "item": [ { @@ -14,7 +14,7 @@ "request": { "method": "GET", "header": [], - "url": "{{HOST}}/issuers/" + "url": "{{HOST}}/issuers" }, "response": [] }, @@ -333,6 +333,28 @@ "item": [ { "name": "Create Wallet", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "// Store the response body in a variable", + "let responseBody = pm.response.json();", + "", + "// Parse the response body to extract the walletId", + "let walletId = responseBody.walletId;", + "", + "// Log the walletId", + "console.log(walletId);", + "", + "pm.environment.set(\"walletId\", walletId);", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], "request": { "method": "POST", "header": [ @@ -343,7 +365,12 @@ ], "body": { "mode": "raw", - "raw": "{\"walletName\" : \"default\",\n\"walletPin\":123456,\n\"confirmWalletPin\":123456}" + "raw": "{\n \"walletName\": \"default\",\n \"walletPin\": 123456\n}", + "options": { + "raw": { + "language": "json" + } + } }, "url": "{{HOST}}/wallets" }, @@ -351,6 +378,27 @@ }, { "name": "Get Wallets", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "let responseBody = pm.response.json();", + "", + "// Parse the response body to extract the walletId", + "let walletId = responseBody[0].walletId;", + "", + "// Log the walletId", + "console.log(walletId);", + "", + "pm.environment.set(\"walletId\", walletId);", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], "request": { "method": "GET", "header": [], @@ -370,9 +418,9 @@ ], "body": { "mode": "raw", - "raw": "{\n \"walletPin\": \"\"\n}" + "raw": "{\n \"walletPin\": \"{{walletPin}}\"\n}" }, - "url": "{{HOST}}/wallets//unlock" + "url": "{{HOST}}/wallets/{{walletId}}/unlock" }, "response": [] }, @@ -391,16 +439,7 @@ "name": "Users", "item": [ { - "name": "Get User Profile (DB)", - "request": { - "method": "GET", - "header": [], - "url": "{{HOST}}/users/me/db" - }, - "response": [] - }, - { - "name": "Get User Profile (Cache)", + "name": "Get User Profile", "request": { "method": "GET", "header": [ @@ -410,7 +449,7 @@ "type": "text" } ], - "url": "{{HOST}}/users/me/cache" + "url": "{{HOST}}/users/me" }, "response": [] } @@ -427,54 +466,18 @@ { "key": "Content-Type", "value": "application/json" + }, + { + "key": "Accept-Language", + "value": "en", + "type": "text" } ], "body": { - "mode": "formdata", - "formdata": [ - { - "key": "grant_type", - "value": "authorization_code", - "type": "text" - }, - { - "key": "code", - "value": "GL9N1V-zW_OFgLSa2VBANv8qz6XOxh3yBkoaonjplms", - "type": "text" - }, - { - "key": "redirect_uri", - "value": "https://injiweb.dev1.mosip.net/redirect", - "type": "text" - }, - { - "key": "code_verifier", - "value": "Sq6nZNToevtx8LX-H2LI_~_Ds9vZGAImDKYjXw70LCJ", - "type": "text" - }, - { - "key": "issuer", - "value": "StayProtected", - "type": "text" - }, - { - "key": "credential", - "value": "InsuranceCredential", - "type": "text" - }, - { - "key": "vcStorageExpiryLimitInTimes", - "value": "1", - "type": "text" - }, - { - "key": "locale", - "value": "en", - "type": "text" - } - ] + "mode": "raw", + "raw": "{\n \"grant_type\": \"authorization_code\",\n \"code\": \"{{code}}\",\n \"codeVerifier\": \"{{codeVerifier}}\",\n \"redirect_uri\": \"http://localhost:3004/redirect\",\n \"credentialConfigurationId\": \"{{credentialConfigurationId}}\",\n \"issuer\": \"{{issuer}}\"\n}" }, - "url": "{{HOST}}/wallets//credentials" + "url": "{{HOST}}/wallets/{{walletId}}/credentials" }, "response": [] }, @@ -482,21 +485,28 @@ "name": "Fetch All Credentials", "request": { "method": "GET", - "header": [], + "header": [ + { + "key": "Accept-Language", + "value": "en", + "type": "text" + } + ], "url": { - "raw": "{{HOST}}/wallets/2c72ae02-14ea-4fea-a280-2adc2588cb8b/credentials?locale=", + "raw": "{{HOST}}/wallets/{{walletId}}/credentials", "host": [ "{{HOST}}" ], "path": [ "wallets", - "2c72ae02-14ea-4fea-a280-2adc2588cb8b", + "{{walletId}}", "credentials" ], "query": [ { "key": "locale", - "value": "" + "value": "", + "disabled": true } ] } @@ -507,23 +517,30 @@ "name": "View or Save Credential", "request": { "method": "GET", - "header": [], + "header": [ + { + "key": "Accept-Language", + "value": "en", + "type": "text" + }, + { + "key": "Accept", + "value": "application/pdf", + "type": "text" + } + ], "url": { - "raw": "{{HOST}}/wallets//credentials/?locale=en&action=inline", + "raw": "{{HOST}}/wallets/{{walletId}}/credentials/{{credentialId}}?action=inline", "host": [ "{{HOST}}" ], "path": [ "wallets", - "", + "{{walletId}}", "credentials", - "" + "{{credentialId}}" ], "query": [ - { - "key": "locale", - "value": "en" - }, { "key": "action", "value": "inline" @@ -538,7 +555,7 @@ "request": { "method": "DELETE", "header": [], - "url": "{{HOST}}/wallets//credentials/" + "url": "{{HOST}}/wallets/{{walletId}}/credentials/{{credentialId}}" }, "response": [] } @@ -608,5 +625,27 @@ }, "response": [] } + ], + "event": [ + { + "listen": "prerequest", + "script": { + "type": "text/javascript", + "packages": {}, + "exec": [ + "" + ] + } + }, + { + "listen": "test", + "script": { + "type": "text/javascript", + "packages": {}, + "exec": [ + "" + ] + } + } ] } \ No newline at end of file From a5c57b137622721c76068af28eb1415dba80ba95 Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Wed, 28 May 2025 13:16:15 +0530 Subject: [PATCH 643/860] [INJIWEB-1541] update open-api and postman collections Signed-off-by: KiruthikaJeyashankar --- docs/api-documentation-openapi.json | 28 +++++++++++++++---- .../LocalDevelopment.postman_environment.json | 16 +++++++++-- .../MIMOTO.postman_collection.json | 6 ++-- 3 files changed, 39 insertions(+), 11 deletions(-) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index 242fe2631..d5d7b798e 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -2716,6 +2716,12 @@ "application/json": { "schema": { "$ref": "#/components/schemas/Error" + }, + "examples": { + "User data not available in DB" : { + "errorCode": "unauthorized", + "errorMessage": "User not found. Please check your credentials or login again" + } } } } @@ -2832,9 +2838,9 @@ "examples": { "Success response": { "value": { - "issuerName": "Mosip", + "issuerDisplayName": "Mosip", "issuerLogo": "https://example.com/logo.png", - "credentialType": "MosipVerifiableCredential", + "credentialTypeDisplayName": "National Identity Department Mosip", "credentialTypeLogo": "https://example.com/credential-logo.png", "credentialId": "1234567890" } @@ -3019,9 +3025,9 @@ "Success response": { "value": [ { - "issuerName": "Mosip", + "issuerDisplayName": "Mosip", "issuerLogo": "https://example.com/logo.png", - "credentialType": "MosipVerifiableCredential", + "credentialTypeDisplayName": "National Identity Department Mosip", "credentialTypeLogo": "https://example.com/credential-logo.png", "credentialId": "1234567890" } @@ -3157,6 +3163,16 @@ "default": "en" }, "description": "Language preference in which the user expects the Verifiable Credential to be rendered. Input should be a 2-letter code (e.g., 'en' for English, 'fr' for French). If not provided, defaults to 'en'." + }, + { + "name": "Accept", + "in": "header", + "required": true, + "schema": { + "type": "string", + "example": "application/pdf" + }, + "description": "The Accept header must be set to application/pdf to indicate that the response should be in PDF format. If not provided or set to a different value, the API will return a 400 Bad Request error." } ], "responses": { @@ -4082,7 +4098,7 @@ "VerifiableCredentialResponseDTO": { "type": "object", "properties": { - "issuerName": { + "issuerDisplayName": { "type": "string", "description": "Name of the Issuer" }, @@ -4090,7 +4106,7 @@ "type": "string", "description": "Logo of the Issuer" }, - "credentialType": { + "credentialTypeDisplayName": { "type": "string", "description": "The name of the Credential Type issued by the Issuer" }, diff --git a/docs/postman-collections/LocalDevelopment.postman_environment.json b/docs/postman-collections/LocalDevelopment.postman_environment.json index 088758315..7c87f824d 100644 --- a/docs/postman-collections/LocalDevelopment.postman_environment.json +++ b/docs/postman-collections/LocalDevelopment.postman_environment.json @@ -22,7 +22,7 @@ }, { "key": "HOST", - "value": "", + "value": "http://localhost:8099/v1/mimoto", "type": "default", "enabled": true }, @@ -43,9 +43,21 @@ "value": "", "type": "secret", "enabled": true + }, + { + "key": "credentialConfigurationId", + "value": "", + "type": "default", + "enabled": true + }, + { + "key": "issuer", + "value": "Mock", + "type": "default", + "enabled": true } ], "_postman_variable_scope": "environment", - "_postman_exported_at": "2025-05-28T04:13:37.653Z", + "_postman_exported_at": "2025-05-28T07:35:09.471Z", "_postman_exported_using": "Postman/11.47.0" } \ No newline at end of file diff --git a/docs/postman-collections/MIMOTO.postman_collection.json b/docs/postman-collections/MIMOTO.postman_collection.json index 55f11ee5f..fb5fc9072 100644 --- a/docs/postman-collections/MIMOTO.postman_collection.json +++ b/docs/postman-collections/MIMOTO.postman_collection.json @@ -365,7 +365,7 @@ ], "body": { "mode": "raw", - "raw": "{\n \"walletName\": \"default\",\n \"walletPin\": 123456\n}", + "raw": "{\n \"walletName\": \"default\",\n \"walletPin\": 123456,\n \"confirmWalletPin\": 123456\n}", "options": { "raw": { "language": "json" @@ -570,10 +570,10 @@ "auth": { "type": "oauth2", "oauth2": { + "clientSecret": "{{clientSecret}}", + "clientId": "{{clientId}}", "accessTokenUrl": "https://oauth2.googleapis.com/token", "scope": "profile email", - "clientSecret": "", - "clientId": "", "redirect_uri": "http://localhost:8099/v1/mimoto/oauth2/callback/google", "useBrowser": false, "authUrl": "https://accounts.google.com/o/oauth2/auth?prompt=select_account", From 5f4ddefbcc0fa34d54b9ccdea790f74f9a269308 Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Wed, 28 May 2025 14:36:59 +0530 Subject: [PATCH 644/860] [INJIWEB-1541] return BadRequest in case of request for download of credential which is already available Signed-off-by: KiruthikaJeyashankar --- docs/api-documentation-openapi.json | 12 ++++----- .../impl/WalletCredentialServiceImpl.java | 2 +- .../WalletCredentialsControllerTest.java | 27 ++++++++++++++----- .../service/WalletCredentialServiceTest.java | 2 +- 4 files changed, 29 insertions(+), 14 deletions(-) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index d5d7b798e..ae51e67dc 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -2898,6 +2898,12 @@ "errorCode": "invalid_request", "errorMessage": "credentialConfigurationId cannot be blank" } + }, + "Credential already exists for given Issuer and Credential Type in the wallet": { + "value": { + "errorCode": "credential_download_error", + "errorMessage": "Duplicate credential for issuer and type" + } } } } @@ -2911,12 +2917,6 @@ "$ref": "#/components/schemas/Error" }, "examples": { - "Credential already exists for given Issuer and Credential Type": { - "value": { - "errorCode": "credential_download_error", - "errorMessage": "Duplicate credential for issuer and type" - } - }, "Exception occurred while fetching Issuer config": { "value": { "errorCode": "credential_download_error", diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java index 2f21a10a4..5cc45f26c 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java @@ -60,7 +60,7 @@ public VerifiableCredentialResponseDTO fetchAndStoreCredential(String issuerId, Set issuers = Set.of("Mosip"); if (issuers.contains(issuerId) && repository.existsByIssuerIdAndCredentialTypeAndWalletId(issuerId, credentialConfigurationId, walletId)) { log.warn("Duplicate credential found for issuer: {}, type: {}, wallet: {}", issuerId, credentialConfigurationId, walletId); - throw new CredentialProcessingException(CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), "Duplicate credential for issuer and type"); + throw new InvalidRequestException(CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), "Duplicate credential for issuer and type"); } diff --git a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java index a4f541f9c..7a4127ac2 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java @@ -5,10 +5,7 @@ import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; import io.mosip.mimoto.dto.resident.WalletCredentialResponseDTO; -import io.mosip.mimoto.exception.ApiNotAccessibleException; -import io.mosip.mimoto.exception.CredentialNotFoundException; -import io.mosip.mimoto.exception.CredentialProcessingException; -import io.mosip.mimoto.exception.ExternalServiceUnavailableException; +import io.mosip.mimoto.exception.*; import io.mosip.mimoto.service.WalletCredentialService; import io.mosip.mimoto.util.CredentialUtilService; import io.mosip.mimoto.util.GlobalExceptionHandler; @@ -33,8 +30,7 @@ import java.util.Collections; import java.util.List; -import static io.mosip.mimoto.exception.ErrorConstants.CREDENTIAL_FETCH_EXCEPTION; -import static io.mosip.mimoto.exception.ErrorConstants.RESOURCE_NOT_FOUND; +import static io.mosip.mimoto.exception.ErrorConstants.*; import static io.mosip.mimoto.util.TestUtilities.createRequestBody; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -118,6 +114,25 @@ public void shouldDownloadCredentialSuccessfully() throws Exception { .andExpect(jsonPath("$.credentialId").value("credentialId123")); } + @Test + public void shouldReturnErroResponseWhenRequestedCredentialIsAlreadyAvailableInWallet() throws Exception { + setIssuerAndCredentialConfigurationId(issuer, credentialConfigurationId); + when(credentialUtilService.getTokenResponse(eq(verifiableCredentialRequest))).thenReturn(new TokenResponseDTO()); + when(walletCredentialService.fetchAndStoreCredential(eq(issuer), eq(credentialConfigurationId), any(), eq(locale), eq(walletId), eq(walletKey))) + .thenThrow(new InvalidRequestException(CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), "Duplicate credential for issuer and type")); + + mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON) + .header("Accept-Language", locale) + .content(createRequestBody(verifiableCredentialRequest)) + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errorCode").value("credential_download_error")) + .andExpect(jsonPath("$.errorMessage").value("Duplicate credential for issuer and type")); + } + @Test public void shouldReturnErrorResponseWhenSessionDoesNotHaveWalletIdAndKey() throws Exception { setIssuerAndCredentialConfigurationId(issuer, credentialConfigurationId); diff --git a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java index 4541b8be6..791846220 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java @@ -112,7 +112,7 @@ public void shouldFetchAndStoreCredentialSuccessfully() throws Exception { public void shouldThrowDuplicateCredentialExceptionForMosipIssuer() { when(walletCredentialsRepository.existsByIssuerIdAndCredentialTypeAndWalletId("Mosip", credentialType, walletId)).thenReturn(true); - CredentialProcessingException exception = assertThrows(CredentialProcessingException.class, () -> + InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> walletCredentialService.fetchAndStoreCredential("Mosip", credentialType, tokenResponse, locale, walletId, base64Key)); assertEquals(CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), exception.getErrorCode()); From 0412f5d72878c1bad753f92cbb551c0913e03429 Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Wed, 28 May 2025 17:11:21 +0530 Subject: [PATCH 645/860] [INJIWEB-1541] return walletName as well in unlock API response Signed-off-by: KiruthikaJeyashankar --- .../mimoto/controller/WalletsController.java | 5 +---- .../mosip/mimoto/service/WalletService.java | 13 ++++++----- .../service/impl/WalletServiceImpl.java | 16 ++++++++++---- .../controller/WalletsControllerTest.java | 22 +++++++------------ .../mimoto/service/WalletServiceTest.java | 21 ++++++++++++------ 5 files changed, 42 insertions(+), 35 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/WalletsController.java b/src/main/java/io/mosip/mimoto/controller/WalletsController.java index 2081cf241..23d78d386 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletsController.java @@ -152,10 +152,7 @@ public ResponseEntity unlockWallet( HttpSession httpSession) throws InvalidRequestException { String userId = (String) httpSession.getAttribute(SessionKeys.USER_ID); log.info("Unlocking wallet: {} for user: {}", walletId, userId); - String walletKey = walletService.getWalletKey(userId, walletId, wallet.getWalletPin()); - httpSession.setAttribute(SessionKeys.WALLET_KEY, walletKey); - httpSession.setAttribute(SessionKeys.WALLET_ID, walletId); - WalletResponseDto response = WalletResponseDto.builder().walletId(walletId).build(); + WalletResponseDto response = walletService.unlockWallet(walletId, wallet.getWalletPin(), httpSession); return ResponseEntity.status(HttpStatus.OK).body(response); } diff --git a/src/main/java/io/mosip/mimoto/service/WalletService.java b/src/main/java/io/mosip/mimoto/service/WalletService.java index 23e23788a..4efaddece 100644 --- a/src/main/java/io/mosip/mimoto/service/WalletService.java +++ b/src/main/java/io/mosip/mimoto/service/WalletService.java @@ -2,6 +2,7 @@ import io.mosip.mimoto.dto.WalletResponseDto; import io.mosip.mimoto.exception.InvalidRequestException; +import jakarta.servlet.http.HttpSession; import java.util.List; @@ -23,15 +24,15 @@ public interface WalletService { WalletResponseDto createWallet(String userId, String name, String pin, String confirmPin) throws InvalidRequestException; /** - * Retrieves the decrypted wallet key. + * Unlocks a wallet for a user. * - * @param userId The user ID. - * @param walletId The wallet ID. - * @param pin The wallet PIN. - * @return The decrypted wallet key. + * @param walletId + * @param pin + * @param httpSession + * @return WalletResponseDto containing wallet details. * @throws InvalidRequestException If the wallet is not found or PIN is invalid. */ - String getWalletKey(String userId, String walletId, String pin) throws InvalidRequestException; + WalletResponseDto unlockWallet(String walletId, String pin, HttpSession httpSession) throws InvalidRequestException; /** * Retrieves all wallets for a user. diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java index ce9e9f09d..453a54868 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.service.impl; +import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.dbentity.Wallet; import io.mosip.mimoto.dto.WalletResponseDto; import io.mosip.mimoto.exception.ErrorConstants; @@ -8,6 +9,7 @@ import io.mosip.mimoto.service.WalletService; import io.mosip.mimoto.util.WalletUtil; import io.mosip.mimoto.util.WalletValidator; +import jakarta.servlet.http.HttpSession; import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; @@ -53,15 +55,21 @@ public WalletResponseDto createWallet(String userId, String name, String pin, St } @Override - public String getWalletKey(String userId, String walletId, String pin) throws InvalidRequestException { - log.info("Retrieving wallet key for user: {}, wallet: {}", userId, walletId); + public WalletResponseDto unlockWallet(String walletId, String pin, HttpSession httpSession) throws InvalidRequestException { + String userId = (String) httpSession.getAttribute(SessionKeys.USER_ID); + log.info("Unlocking wallet for user: {}, wallet: {}", userId, walletId); validator.validateUserId(userId); validator.validateWalletPin(pin); - return repository.findByUserIdAndId(userId, walletId) - .map(wallet -> walletUtil.decryptWalletKey(wallet.getWalletKey(), pin)) + Wallet wallet = repository.findByUserIdAndId(userId, walletId) .orElseThrow(getWalletNotFoundExceptionSupplier(userId, walletId)); + + String decryptedWalletKey = walletUtil.decryptWalletKey(wallet.getWalletKey(), pin); + httpSession.setAttribute(SessionKeys.WALLET_KEY, decryptedWalletKey); + httpSession.setAttribute(SessionKeys.WALLET_ID, walletId); + + return new WalletResponseDto(walletId, wallet.getWalletMetadata().getName()); } @Override diff --git a/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java index 434577aef..d293746d6 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java @@ -23,11 +23,9 @@ import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.MvcResult; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import java.util.List; -import java.util.Objects; import static io.mosip.mimoto.util.TestUtilities.createRequestBody; import static org.junit.Assert.assertEquals; @@ -238,9 +236,9 @@ public void shouldUnlockWalletSuccessfully() throws Exception { UnlockWalletRequestDto unlockRequest = new UnlockWalletRequestDto(); unlockRequest.setWalletPin(walletPin); - when(walletService.getWalletKey(userId, walletId, walletPin)).thenReturn("walletKey123"); + when(walletService.unlockWallet(walletId, walletPin, mockSession)).thenReturn(new WalletResponseDto(walletId, walletName)); - MvcResult result = mockMvc.perform(post("/wallets/{walletId}/unlock", walletId) + mockMvc.perform(post("/wallets/{walletId}/unlock", walletId) .contentType(MediaType.APPLICATION_JSON) .accept(MediaType.APPLICATION_JSON) .content(createRequestBody(unlockRequest)) @@ -250,17 +248,13 @@ public void shouldUnlockWalletSuccessfully() throws Exception { .andExpect(status().isOk()) .andExpect(jsonPath("$.walletId").value(walletId)) .andReturn(); - - // Verify session attributes were set correctly - assertEquals(walletId, Objects.requireNonNull(result.getRequest().getSession()).getAttribute(SessionKeys.WALLET_ID)); - assertEquals("walletKey123", result.getRequest().getSession().getAttribute(SessionKeys.WALLET_KEY)); } @Test public void shouldThrowExceptionWhenUserIdIsMissingForUnlockWallet() throws Exception { UnlockWalletRequestDto unlockRequest = new UnlockWalletRequestDto(); unlockRequest.setWalletPin(walletPin); - when(walletService.getWalletKey(null, walletId, walletPin)) + when(walletService.unlockWallet(walletId, walletPin, mockSession)) .thenThrow(new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "User ID cannot be null or empty")); mockSession.clearAttributes(); MockHttpSession sessionWithoutUserId = mockSession; @@ -284,7 +278,7 @@ public void shouldThrowExceptionWhenWalletNotFoundForUnlock() throws Exception { UnlockWalletRequestDto unlockRequest = new UnlockWalletRequestDto(); unlockRequest.setWalletPin(walletPin); - when(walletService.getWalletKey(userId, nonExistentWalletId, walletPin)) + when(walletService.unlockWallet(nonExistentWalletId, walletPin, mockSession)) .thenThrow(new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Wallet not found")); mockMvc.perform(post("/wallets/{walletId}/unlock", nonExistentWalletId) @@ -305,7 +299,7 @@ public void shouldThrowExceptionWhenInvalidPinProvidedForUnlock() throws Excepti UnlockWalletRequestDto unlockRequest = new UnlockWalletRequestDto(); unlockRequest.setWalletPin(invalidPin); - when(walletService.getWalletKey(userId, walletId, invalidPin)) + when(walletService.unlockWallet(walletId, invalidPin, mockSession)) .thenThrow(new InvalidRequestException("invalid_pin", "Invalid PIN or wallet key provided")); mockMvc.perform(post("/wallets/{walletId}/unlock", walletId) @@ -325,7 +319,7 @@ public void shouldThrowExceptionForServerErrorDuringUnlock() throws Exception { UnlockWalletRequestDto unlockRequest = new UnlockWalletRequestDto(); unlockRequest.setWalletPin(walletPin); - when(walletService.getWalletKey(userId, walletId, walletPin)) + when(walletService.unlockWallet(walletId, walletPin, mockSession)) .thenThrow(new RuntimeException("Error decrypting wallet key")); mockMvc.perform(post("/wallets/{walletId}/unlock", walletId) @@ -342,7 +336,7 @@ public void shouldThrowExceptionForServerErrorDuringUnlock() throws Exception { @Test public void shouldThrowExceptionIfAnyErrorOccurredWhileFetchingWalletDataForGivenUserIdAndWalletId() throws Exception { - when(walletService.getWalletKey(userId, walletId, walletPin)).thenThrow(new RuntimeException("Exception occurred when fetching the wallet data for given walletId and userId")); + when(walletService.unlockWallet(walletId, walletPin, mockSession)).thenThrow(new RuntimeException("Exception occurred when fetching the wallet data for given walletId and userId")); mockMvc.perform(post(String.format("/wallets/%s/unlock", walletId)) .contentType(MediaType.APPLICATION_JSON) @@ -359,7 +353,7 @@ public void shouldThrowExceptionIfAnyErrorOccurredWhileFetchingWalletDataForGive @Test public void shouldReturnWalletLockedErrorDetailsWhenWalletIDIsMissingInSession() throws Exception { mockSession.removeAttribute(SessionKeys.WALLET_ID); - when(walletService.getWalletKey(userId, walletId, walletPin)). + when(walletService.unlockWallet(walletId, walletPin, mockSession)). thenThrow(new InvalidRequestException("wallet_locked", "Wallet is locked")); mockMvc.perform(post(String.format("/wallets/%s/unlock", walletId)) diff --git a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java index 61a43dd2d..34b825fb7 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java @@ -59,13 +59,17 @@ public void setUp() { mockSession = new MockHttpSession(); mockSession.setAttribute("clientRegistrationId", "google"); - mockSession.setAttribute(SessionKeys.USER_ID, "user123"); - mockSession.setAttribute(SessionKeys.WALLET_ID, walletId); + mockSession.setAttribute(SessionKeys.USER_ID, userId); wallet = new Wallet(); wallet.setId(walletId); wallet.setUserId(userId); wallet.setWalletKey(encryptedWalletKey); + WalletMetadata walletMetadata = new WalletMetadata(); + walletMetadata.setEncryptionAlgo("AES"); + walletMetadata.setEncryptionType("symmetric"); + walletMetadata.setName("default"); + wallet.setWalletMetadata(walletMetadata); } @Test @@ -113,15 +117,18 @@ public void shouldCreateWalletSuccessfullyIfWalletNameIsNotProvided() { } @Test - public void shouldDecryptWalletKeySuccessfully() { + public void shouldUnlockWalletSuccessfully() { when(walletRepository.findByUserIdAndId(userId, walletId)).thenReturn(Optional.of(wallet)); when(walletHelper.decryptWalletKey(encryptedWalletKey, walletPin)).thenReturn(decryptedWalletKey); - String result = walletService.getWalletKey(userId, walletId, walletPin); + WalletResponseDto result = walletService.unlockWallet(walletId, walletPin, mockSession); - assertEquals(decryptedWalletKey, result); verify(walletRepository).findByUserIdAndId(userId, walletId); verify(walletHelper).decryptWalletKey(encryptedWalletKey, walletPin); + assertEquals(walletId, result.getWalletId()); + assertEquals("default", result.getWalletName()); + assertEquals(decryptedWalletKey, mockSession.getAttribute(SessionKeys.WALLET_KEY)); + assertEquals(walletId, mockSession.getAttribute(SessionKeys.WALLET_ID)); } @Test @@ -129,7 +136,7 @@ public void shouldThrowInvalidRequestExceptionIfWalletNotFoundForGivenUserIdAndW when(walletRepository.findByUserIdAndId(userId, walletId)).thenReturn(Optional.empty()); InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> - walletService.getWalletKey(userId, walletId, walletPin)); + walletService.unlockWallet(walletId, walletPin, mockSession)); assertEquals("invalid_request", exception.getErrorCode()); assertEquals("invalid_request --> Wallet not found", exception.getMessage()); @@ -144,7 +151,7 @@ public void shouldThrowInvalidPinErrorCodeExceptionWhenDecryptingWalletKeyWithIn when(walletHelper.decryptWalletKey(encryptedWalletKey, invalidPin)).thenThrow(new InvalidRequestException("invalid_pin", "Invalid PIN or wallet key provided")); InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> - walletService.getWalletKey(userId, walletId, invalidPin)); + walletService.unlockWallet(walletId, invalidPin, mockSession)); verify(walletRepository).findByUserIdAndId(userId, walletId); assertEquals("invalid_pin", exception.getErrorCode()); From e79dc4cc46cb2d47520f41d91239c5f283e58e3a Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Wed, 28 May 2025 17:13:46 +0530 Subject: [PATCH 646/860] [INJIWEB-1541] ignoreUnknown for CredentialMetadata Previously CredentialMetadata was holding dataShareUrl and credentialValidity, but these fields are deleted now. Due to this the previous entries read from DB is throwing UnrecognizedPropertyException. To avoid this breaking change unknown properties are ignored Signed-off-by: KiruthikaJeyashankar --- src/main/java/io/mosip/mimoto/dbentity/CredentialMetadata.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/io/mosip/mimoto/dbentity/CredentialMetadata.java b/src/main/java/io/mosip/mimoto/dbentity/CredentialMetadata.java index b709bcd23..99af35804 100644 --- a/src/main/java/io/mosip/mimoto/dbentity/CredentialMetadata.java +++ b/src/main/java/io/mosip/mimoto/dbentity/CredentialMetadata.java @@ -1,8 +1,10 @@ package io.mosip.mimoto.dbentity; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.Data; @Data +@JsonIgnoreProperties(ignoreUnknown = true) public class CredentialMetadata { private String issuerId; private String credentialType; From 16a41621f5ba5b0e20a6662a0611fa1352e65bff Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Wed, 28 May 2025 17:23:46 +0530 Subject: [PATCH 647/860] [INJIWEB-1541] update postman collections for local environment Signed-off-by: KiruthikaJeyashankar --- .../LocalDevelopment.postman_environment.json | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/docs/postman-collections/LocalDevelopment.postman_environment.json b/docs/postman-collections/LocalDevelopment.postman_environment.json index 7c87f824d..ae2cee419 100644 --- a/docs/postman-collections/LocalDevelopment.postman_environment.json +++ b/docs/postman-collections/LocalDevelopment.postman_environment.json @@ -14,12 +14,6 @@ "type": "default", "enabled": true }, - { - "key": "csrf_token", - "value": "", - "type": "any", - "enabled": true - }, { "key": "HOST", "value": "http://localhost:8099/v1/mimoto", @@ -28,13 +22,13 @@ }, { "key": "credentialId", - "value": "", + "value": "123445", "type": "default", "enabled": true }, { "key": "clientId", - "value": "", + "value": "clientId", "type": "secret", "enabled": true }, @@ -46,7 +40,7 @@ }, { "key": "credentialConfigurationId", - "value": "", + "value": "MockVerifiableCredential", "type": "default", "enabled": true }, @@ -55,9 +49,21 @@ "value": "Mock", "type": "default", "enabled": true + }, + { + "key": "codeVerifier", + "value": "", + "type": "default", + "enabled": true + }, + { + "key": "code", + "value": "", + "type": "default", + "enabled": true } ], "_postman_variable_scope": "environment", - "_postman_exported_at": "2025-05-28T07:35:09.471Z", + "_postman_exported_at": "2025-05-28T11:51:51.834Z", "_postman_exported_using": "Postman/11.47.0" } \ No newline at end of file From 9f7506bebb27864a99d2152a493377defbda9b35 Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Wed, 28 May 2025 18:55:13 +0530 Subject: [PATCH 648/860] MOSIP-41593 Signed-off-by: Nandhukumar --- .../apirig/mimoto/utils/MimotoConstants.java | 9 +++++++++ .../testrig/apirig/mimoto/utils/MimotoUtil.java | 17 +++++++++++++++++ .../src/main/resources/config/mimoto.properties | 6 +++++- .../OAuthDetailsRequest/OAuthDetailsRequest.yml | 2 +- .../AuthenticateUserSunBirdC.yml | 2 +- .../OAuthDetailsRequestSunBirdC.yml | 2 +- 6 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConstants.java diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConstants.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConstants.java new file mode 100644 index 000000000..645cde030 --- /dev/null +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConstants.java @@ -0,0 +1,9 @@ +package io.mosip.testrig.apirig.mimoto.utils; + +public class MimotoConstants { + + public static final String SUNBIRD_INSURANCE_AUTH_FACTOR_TYPE = "KBI"; + + public static final String SUNBIRD_INSURANCE_AUTH_FACTOR_TYPE_STRING = "sunbirdInsuranceAuthFactorType"; + +} diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java index fdee04a30..7908fe4a4 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java @@ -6,6 +6,7 @@ import java.security.PublicKey; import java.time.LocalDate; import java.time.format.DateTimeFormatter; +import java.util.Calendar; import java.util.HashMap; import javax.ws.rs.core.MediaType; @@ -161,6 +162,22 @@ public static String inputstringKeyWordHandeler(String jsonString, String testCa jsonString = replaceKeywordValue(jsonString, GlobalConstants.TIMESTAMP, generateCurrentUTCTimeStamp()); } + if (jsonString.contains("$UNIQUENONCEVALUEFORESIGNET$")) { + jsonString = replaceKeywordValue(jsonString, "$UNIQUENONCEVALUEFORESIGNET$", + String.valueOf(Calendar.getInstance().getTimeInMillis())); + } + + if (jsonString.contains("$SUNBIRDINSURANCEAUTHFACTORTYPE$")) { + String authFactorType = MimotoConfigManager + .getproperty(MimotoConstants.SUNBIRD_INSURANCE_AUTH_FACTOR_TYPE_STRING); + + String valueToReplace = (authFactorType != null && !authFactorType.isBlank()) ? authFactorType + : MimotoConstants.SUNBIRD_INSURANCE_AUTH_FACTOR_TYPE; + + jsonString = replaceKeywordValue(jsonString, "$SUNBIRDINSURANCEAUTHFACTORTYPE$", valueToReplace); + + } + if (jsonString.contains("$POLICYNUMBERFORSUNBIRDRC$")) { jsonString = replaceKeywordValue(jsonString, "$POLICYNUMBERFORSUNBIRDRC$", policyNumberForSunBirdR); } diff --git a/api-test/src/main/resources/config/mimoto.properties b/api-test/src/main/resources/config/mimoto.properties index 6d0b37357..b5900de8a 100644 --- a/api-test/src/main/resources/config/mimoto.properties +++ b/api-test/src/main/resources/config/mimoto.properties @@ -3,4 +3,8 @@ actuatorMimotoEndpoint=/v1/mimoto/actuator/env mimoto-oidc-mosipid-partner-clientid=mimoto.oidc.mosipid.partner.clientid mimoto-oidc-sunbird-partner-clientid=mimoto.oidc.insurance.partner.clientid mosip-esignet-insurance-host=mosip.esignet.insurance.host -runPlugin=mosipid \ No newline at end of file +runPlugin=mosipid + + +# Uncomment the line below if the eSignet version is older than 1.5.1 for compatibility +#sunbirdInsuranceAuthFactorType=KBA \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.yml b/api-test/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.yml index 5352f59a0..ceb013f81 100644 --- a/api-test/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.yml +++ b/api-test/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.yml @@ -17,7 +17,7 @@ OAuthDetailsRequest: "display": "popup", "prompt": "login", "acrValues": "mosip:idp:acr:generated-code mosip:idp:acr:linked-wallet mosip:idp:acr:biometrics", - "nonce": "973eieljzng", + "nonce": "$UNIQUENONCEVALUEFORESIGNET$", "state": "eree2311", "claimsLocales": "en", "codeChallenge": "$CODECHALLENGE$", diff --git a/api-test/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml b/api-test/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml index a4962b1f8..f8a88b1fe 100644 --- a/api-test/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml +++ b/api-test/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml @@ -14,7 +14,7 @@ AuthenticateUserSunBirdC: "requestTime": "$TIMESTAMP$", "transactionId": "$ID:ESignet_OAuthDetailsRequest_SunBirdC_all_Valid_Smoke_sid_transactionId$", "individualId": "$POLICYNUMBERFORSUNBIRDRC$", - "authFactorType" : "KBA", + "authFactorType" : "$SUNBIRDINSURANCEAUTHFACTORTYPE$", "challenge" : "$CHALLENGEVALUEFORSUNBIRDC$", "format": "base64url-encoded-json" }' diff --git a/api-test/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml b/api-test/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml index c1147b0b3..c4778e3a2 100644 --- a/api-test/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml +++ b/api-test/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml @@ -17,7 +17,7 @@ OAuthDetailsRequestSunBirdC: "display": "popup", "prompt": "login", "acrValues": "mosip:idp:acr:knowledge", - "nonce": "973eieljzng", + "nonce": "$UNIQUENONCEVALUEFORESIGNET$", "state": "eree2311", "claimsLocales": "en", "codeChallenge": "$CODECHALLENGE$", From 0afeb12a5a28fe8a5001b3be1bd7e70d33939c8c Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Thu, 29 May 2025 13:19:37 +0530 Subject: [PATCH 649/860] [INJIWEB-1541] merge usage of 2 controllerAdvice Signed-off-by: KiruthikaJeyashankar --- .../mimoto/util/CommonExceptionHandler.java | 25 ------------------- .../mimoto/util/GlobalExceptionHandler.java | 18 ++++++++----- 2 files changed, 12 insertions(+), 31 deletions(-) delete mode 100644 src/main/java/io/mosip/mimoto/util/CommonExceptionHandler.java diff --git a/src/main/java/io/mosip/mimoto/util/CommonExceptionHandler.java b/src/main/java/io/mosip/mimoto/util/CommonExceptionHandler.java deleted file mode 100644 index 4bf41a46c..000000000 --- a/src/main/java/io/mosip/mimoto/util/CommonExceptionHandler.java +++ /dev/null @@ -1,25 +0,0 @@ -package io.mosip.mimoto.util; - - -import io.mosip.mimoto.dto.ErrorDTO; -import io.mosip.mimoto.dto.resident.CredentialRequestResponseDTO; -import io.mosip.mimoto.exception.InvalidInputException; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.ControllerAdvice; -import org.springframework.web.bind.annotation.ExceptionHandler; - -import java.util.Collections; - -@ControllerAdvice -public class CommonExceptionHandler{ - @ExceptionHandler( value = InvalidInputException.class) - public ResponseEntity handleInvalidInput(InvalidInputException ex) { - CredentialRequestResponseDTO credentialRequestResponseDTO = new CredentialRequestResponseDTO(); - ErrorDTO errors = new ErrorDTO(ex.getErrorCode(), ex.getMessage()); - credentialRequestResponseDTO.setVersion("1.0"); - credentialRequestResponseDTO.setErrors(Collections.singletonList(errors)); - return new ResponseEntity<>(credentialRequestResponseDTO, HttpStatus.BAD_REQUEST); - } - -} diff --git a/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java b/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java index 9d0f7434a..a0142e372 100644 --- a/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java +++ b/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java @@ -1,18 +1,14 @@ package io.mosip.mimoto.util; import io.mosip.mimoto.dto.ErrorDTO; -import io.mosip.mimoto.exception.ErrorConstants; -import io.mosip.mimoto.exception.ExternalServiceUnavailableException; -import io.mosip.mimoto.exception.InvalidRequestException; -import io.mosip.mimoto.exception.UnAuthorizationAccessException; -import jakarta.servlet.http.HttpServletRequest; +import io.mosip.mimoto.dto.resident.CredentialRequestResponseDTO; +import io.mosip.mimoto.exception.*; import lombok.extern.slf4j.Slf4j; import org.springframework.context.MessageSourceResolvable; import org.springframework.dao.DataAccessResourceFailureException; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.http.converter.HttpMessageNotReadableException; -import org.springframework.web.HttpMediaTypeNotSupportedException; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; @@ -20,6 +16,7 @@ import org.springframework.web.method.annotation.HandlerMethodValidationException; import org.springframework.web.servlet.NoHandlerFoundException; +import java.util.Collections; import java.util.stream.Collectors; @ControllerAdvice @@ -33,6 +30,15 @@ public ErrorDTO handleGenericException(Exception ex) { return new ErrorDTO(ErrorConstants.INTERNAL_SERVER_ERROR.getErrorCode(), ErrorConstants.INTERNAL_SERVER_ERROR.getErrorMessage()); } + @ExceptionHandler( value = InvalidInputException.class) + public ResponseEntity handleInvalidInput(InvalidInputException ex) { + CredentialRequestResponseDTO credentialRequestResponseDTO = new CredentialRequestResponseDTO(); + ErrorDTO errors = new ErrorDTO(ex.getErrorCode(), ex.getMessage()); + credentialRequestResponseDTO.setVersion("1.0"); + credentialRequestResponseDTO.setErrors(Collections.singletonList(errors)); + return new ResponseEntity<>(credentialRequestResponseDTO, HttpStatus.BAD_REQUEST); + } + @ExceptionHandler(DataAccessResourceFailureException.class) @ResponseStatus(HttpStatus.SERVICE_UNAVAILABLE) public ErrorDTO handleDatabaseException(Exception ex) { From 05396659e6cc45f7565e1842a934570ac90e85e8 Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Thu, 29 May 2025 16:25:44 +0530 Subject: [PATCH 650/860] [INJIWEB-1541] update postman collections Signed-off-by: KiruthikaJeyashankar --- .../LocalDevelopment.postman_environment.json | 50 ++- .../MIMOTO.postman_collection.json | 360 +++++++++++++++++- 2 files changed, 402 insertions(+), 8 deletions(-) diff --git a/docs/postman-collections/LocalDevelopment.postman_environment.json b/docs/postman-collections/LocalDevelopment.postman_environment.json index ae2cee419..0b6dcb05d 100644 --- a/docs/postman-collections/LocalDevelopment.postman_environment.json +++ b/docs/postman-collections/LocalDevelopment.postman_environment.json @@ -59,11 +59,59 @@ { "key": "code", "value": "", + "type": "any", + "enabled": true + }, + { + "key": "authClientId", + "value": "", + "type": "default", + "enabled": true + }, + { + "key": "authRedirectUri", + "value": "http://localhost:3004/redirect", + "type": "default", + "enabled": true + }, + { + "key": "authServerUrl", + "value": "", + "type": "default", + "enabled": true + }, + { + "key": "clientIdForVcDownload", + "value": "", + "type": "default", + "enabled": true + }, + { + "key": "redirectionUrlForVcDownload", + "value": "http://localhost:3004/redirect", + "type": "default", + "enabled": true + }, + { + "key": "individual_id", + "value": "xxxxxxxxxx", "type": "default", "enabled": true + }, + { + "key": "authCode", + "value": "", + "type": "any", + "enabled": true + }, + { + "key": "csrf_token", + "value": "", + "type": "any", + "enabled": true } ], "_postman_variable_scope": "environment", - "_postman_exported_at": "2025-05-28T11:51:51.834Z", + "_postman_exported_at": "2025-05-29T11:55:01.063Z", "_postman_exported_using": "Postman/11.47.0" } \ No newline at end of file diff --git a/docs/postman-collections/MIMOTO.postman_collection.json b/docs/postman-collections/MIMOTO.postman_collection.json index fb5fc9072..4f2de57f9 100644 --- a/docs/postman-collections/MIMOTO.postman_collection.json +++ b/docs/postman-collections/MIMOTO.postman_collection.json @@ -344,9 +344,6 @@ "// Parse the response body to extract the walletId", "let walletId = responseBody.walletId;", "", - "// Log the walletId", - "console.log(walletId);", - "", "pm.environment.set(\"walletId\", walletId);", "" ], @@ -388,9 +385,6 @@ "// Parse the response body to extract the walletId", "let walletId = responseBody[0].walletId;", "", - "// Log the walletId", - "console.log(walletId);", - "", "pm.environment.set(\"walletId\", walletId);", "" ], @@ -458,8 +452,310 @@ { "name": "Wallet Credentials", "item": [ + { + "name": "authCode for VC download (pre-requisite)", + "item": [ + { + "name": "Get CSRF token", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var token = pm.cookies.get(\"XSRF-TOKEN\")", + "pm.collectionVariables.set(\"csrf_token\", token);" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "packages": {}, + "type": "text/javascript" + } + } + ], + "protocolProfileBehavior": { + "disableBodyPruning": true + }, + "request": { + "method": "GET", + "header": [], + "body": { + "mode": "raw", + "raw": "", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": "{{authServerUrl}}/csrf/token" + }, + "response": [] + }, + { + "name": "Authorize / OAuthdetails request V2", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var btoa = require('btoa');", + "", + "var token = pm.cookies.get(\"XSRF-TOKEN\")", + "pm.collectionVariables.set(\"csrf_token\", token);", + "", + "pm.test(\"Validate transactionId\", function () {", + " var jsonData = pm.response.json();", + " pm.expect(jsonData.response.transactionId).not.equals(null);", + " pm.collectionVariables.set(\"transaction_id\", jsonData.response.transactionId);", + "});", + "", + "pm.test(\"Validate auth factors\", function () {", + " var jsonData = pm.response.json();", + " pm.expect(jsonData.response.authFactors[0].name).to.eql(pm.environment.get(\"expected_amr\"));", + "});", + "", + "pm.test(\"set oauth-details-hash\", function () {", + " var jsonData = pm.response.json();", + " var sha256Hash = CryptoJS.SHA256(JSON.stringify(jsonData.response));", + " var base64Encoded = sha256Hash.toString(CryptoJS.enc.Base64);", + " // Remove padding characters", + " base64Encoded = base64Encoded.replace(/=+$/, '');", + " // Replace '+' with '-' and '/' with '_' to convert to base64 URL encoding", + " base64Encoded = base64Encoded.replace(/\\+/g, '-').replace(/\\//g, '_');", + " pm.collectionVariables.set(\"oauth_details_key\", jsonData.response.transactionId);", + " pm.collectionVariables.set(\"oauth_details_hash\", base64Encoded);", + "});" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "eval(pm.globals.get('pmlib_code'))", + "", + "const pkce = pmlib.pkceChallenge();", + "pm.collectionVariables.set(\"codeChallenge\",pkce.code_challenge);", + "pm.collectionVariables.set(\"codeChallengeMethod\",pkce.code_challenge_method);", + "pm.environment.set(\"codeVerifier\",pkce.code_verifier);", + "", + "", + "// Generate a random nonce (UUID-style or random hex)", + "const nonce = Math.random().toString(36).substring(2) + Date.now().toString(36);", + "pm.collectionVariables.set(\"nonce\", nonce);", + "", + "", + "const generateRandomString = (length = 43, charset = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~') => {", + " let randomString = '';", + " for (let i = 0; i < length; i++) {", + " const randomIndex = Math.floor(Math.random() * charset.length);", + " randomString += charset[randomIndex];", + " }", + " return randomString;", + "};", + "", + "const state = generateRandomString();", + "pm.collectionVariables.set(\"stateForDownload\", state);", + "", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "method": "POST", + "header": [ + { + "key": "X-XSRF-TOKEN", + "value": "{{csrf_token}}", + "type": "text" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"requestTime\": \"{{$isoTimestamp}}\",\n \"request\": {\n \"clientId\": \"{{clientIdForVcDownload}}\",\n \"scope\": \"mock_identity_vc_ldp\",\n \"responseType\": \"code\",\n \"redirectUri\": \"{{redirectionUrlForVcDownload}}\",\n \"display\": \"popup\",\n \"prompt\": \"login\",\n \"acrValues\": \"mosip:idp:acr:generated-code\",\n \"nonce\" : \"{{nonce}}\",\n \"state\" : \"{{stateForDownload}}\",\n \"claimsLocales\" : \"en\",\n \"codeChallenge\" : \"{{codeChallenge}}\",\n \"codeChallengeMethod\" : \"{{codeChallengeMethod}}\"\n }\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": "{{authServerUrl}}/authorization/v2/oauth-details" + }, + "response": [] + }, + { + "name": "Send OTP", + "request": { + "method": "POST", + "header": [ + { + "key": "X-XSRF-TOKEN", + "value": "{{csrf_token}}", + "type": "text" + }, + { + "key": "oauth-details-key", + "value": "{{oauth_details_key}}", + "type": "text" + }, + { + "key": "oauth-details-hash", + "value": "{{oauth_details_hash}}", + "type": "text" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"requestTime\": \"{{$isoTimestamp}}\",\n \"request\": {\n \"transactionId\": \"{{transaction_id}}\",\n \"individualId\": \"{{individual_id}}\",\n \"otpChannels\" : [\"email\",\"phone\"],\n \"captchaToken\" : \"dummy\"\n }\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": "{{authServerUrl}}/authorization/send-otp" + }, + "response": [] + }, + { + "name": "Authenticate User", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var token = pm.cookies.get(\"XSRF-TOKEN\")", + "pm.collectionVariables.set(\"csrf_token\", token);" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "method": "POST", + "header": [ + { + "key": "X-XSRF-TOKEN", + "value": "{{csrf_token}}", + "type": "text" + }, + { + "key": "oauth-details-key", + "value": "{{oauth_details_key}}", + "type": "text" + }, + { + "key": "oauth-details-hash", + "value": "{{oauth_details_hash}}", + "type": "text" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"requestTime\": \"{{$isoTimestamp}}\",\n \"request\": {\n \"transactionId\": \"{{transaction_id}}\",\n \"individualId\": \"{{individual_id}}\",\n \"challengeList\" : [\n {\n \"authFactorType\" : \"OTP\",\n \"challenge\" : \"111111\",\n \"format\" : \"alpha-numeric\"\n }\n ]\n }\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": "{{authServerUrl}}/authorization/v3/authenticate" + }, + "response": [] + }, + { + "name": "Authorization Code", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var token = pm.cookies.get(\"XSRF-TOKEN\")", + "pm.collectionVariables.set(\"csrf_token\", token);", + "", + "var jsonData = pm.response.json();", + "pm.expect(jsonData.response.code).not.equals(null);", + "pm.environment.set(\"authCode\", jsonData.response.code);" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "protocolProfileBehavior": { + "followRedirects": false + }, + "request": { + "method": "POST", + "header": [ + { + "key": "X-XSRF-TOKEN", + "value": "{{csrf_token}}", + "type": "text" + }, + { + "key": "oauth-details-key", + "value": "{{oauth_details_key}}", + "type": "text" + }, + { + "key": "oauth-details-hash", + "value": "{{oauth_details_hash}}", + "type": "text" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"requestTime\": \"{{$isoTimestamp}}\",\n \"request\": {\n \"transactionId\": \"{{transaction_id}}\",\n \"acceptedClaims\": [],\n \"permittedAuthorizeScopes\" : []\n }\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": "{{authServerUrl}}/authorization/auth-code" + }, + "response": [] + } + ] + }, { "name": "Save Credential", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "let response = pm.response.json();", + "pm.environment.set(\"credentialId\", response.credentialId);", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], "request": { "method": "POST", "header": [ @@ -475,7 +771,7 @@ ], "body": { "mode": "raw", - "raw": "{\n \"grant_type\": \"authorization_code\",\n \"code\": \"{{code}}\",\n \"codeVerifier\": \"{{codeVerifier}}\",\n \"redirect_uri\": \"http://localhost:3004/redirect\",\n \"credentialConfigurationId\": \"{{credentialConfigurationId}}\",\n \"issuer\": \"{{issuer}}\"\n}" + "raw": "{\n \"grantType\": \"authorization_code\",\n \"code\": \"{{authCode}}\",\n \"codeVerifier\": \"{{codeVerifier}}\",\n \"redirectUri\": \"http://localhost:3004/redirect\",\n \"credentialConfigurationId\": \"{{credentialConfigurationId}}\",\n \"issuer\": \"{{issuer}}\"\n}" }, "url": "{{HOST}}/wallets/{{walletId}}/credentials" }, @@ -647,5 +943,55 @@ ] } } + ], + "variable": [ + { + "key": "proof_jwt", + "value": "" + }, + { + "key": "codeChallenge", + "value": "" + }, + { + "key": "codeChallengeMethod", + "value": "" + }, + { + "key": "codeVerifier", + "value": "" + }, + { + "key": "code", + "value": "" + }, + { + "key": "authCode", + "value": "" + }, + { + "key": "nonce", + "value": "" + }, + { + "key": "stateForDownload", + "value": "" + }, + { + "key": "csrf_token", + "value": "" + }, + { + "key": "transaction_id", + "value": "" + }, + { + "key": "oauth_details_key", + "value": "" + }, + { + "key": "oauth_details_hash", + "value": "" + } ] } \ No newline at end of file From b3103df9c0c0c8233682d6e929042cc4112888a5 Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Thu, 29 May 2025 17:50:28 +0530 Subject: [PATCH 651/860] [INJIWEB-1541] update postman local env Signed-off-by: KiruthikaJeyashankar --- .../LocalDevelopment.postman_environment.json | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/docs/postman-collections/LocalDevelopment.postman_environment.json b/docs/postman-collections/LocalDevelopment.postman_environment.json index 0b6dcb05d..7b4da5048 100644 --- a/docs/postman-collections/LocalDevelopment.postman_environment.json +++ b/docs/postman-collections/LocalDevelopment.postman_environment.json @@ -103,15 +103,9 @@ "value": "", "type": "any", "enabled": true - }, - { - "key": "csrf_token", - "value": "", - "type": "any", - "enabled": true } ], "_postman_variable_scope": "environment", - "_postman_exported_at": "2025-05-29T11:55:01.063Z", + "_postman_exported_at": "2025-05-29T12:19:39.153Z", "_postman_exported_using": "Postman/11.47.0" } \ No newline at end of file From f733f8fbda5895cce1608e3781b0f2af6b8dbf83 Mon Sep 17 00:00:00 2001 From: Sairam Girirao <105053210+Sairam-g9162@users.noreply.github.com> Date: Mon, 2 Jun 2025 14:13:16 +0530 Subject: [PATCH 652/860] Update the encryption algorithm transformation to work with java 21 (#729) Signed-off-by: sairam-g9162 --- .../io/mosip/mimoto/controller/CredentialShareController.java | 2 +- src/main/java/io/mosip/mimoto/util/CryptoCoreUtil.java | 4 ++-- src/main/java/io/mosip/mimoto/util/CryptoUtil.java | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java b/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java index 89da9553e..f7bcdb56b 100644 --- a/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java +++ b/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java @@ -81,7 +81,7 @@ public class CredentialShareController { * @return * @throws Exception */ - @PostMapping(path = "/callback/notify", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) + @PostMapping(path = {"/callback/notify", "/callback/notify/"},consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @PreAuthenticateContentAndVerifyIntent(secret = "${mosip.event.secret}", callback = "/v1/mimoto/credentialshare/callback/notify", topic = "${mosip.event.topic}") @Operation(summary = SwaggerLiteralConstants.CREDENTIALS_SHARE_HANDLE_SUBSCRIBED_EVENT_SUMMARY, description = SwaggerLiteralConstants.CREDENTIALS_SHARE_HANDLE_SUBSCRIBED_EVENT_DESCRIPTION) public ResponseEntity handleSubscribeEvent(@RequestBody EventModel eventModel) diff --git a/src/main/java/io/mosip/mimoto/util/CryptoCoreUtil.java b/src/main/java/io/mosip/mimoto/util/CryptoCoreUtil.java index 11fe4ad2e..70c4893ce 100644 --- a/src/main/java/io/mosip/mimoto/util/CryptoCoreUtil.java +++ b/src/main/java/io/mosip/mimoto/util/CryptoCoreUtil.java @@ -216,7 +216,7 @@ private static byte[] asymmetricDecrypt(PrivateKey privateKey, BigInteger keyMod private static byte[] symmetricDecrypt(SecretKey key, byte[] data, byte[] aad) { byte[] output = null; try { - Cipher cipher = Cipher.getInstance("AES/GCM/PKCS5Padding"); + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); byte[] randomIV = Arrays.copyOfRange(data, data.length - cipher.getBlockSize(), data.length); SecretKeySpec keySpec = new SecretKeySpec(key.getEncoded(), "AES"); GCMParameterSpec gcmParameterSpec = new GCMParameterSpec(128, randomIV); @@ -237,7 +237,7 @@ public byte[] symmetricDecrypt(SecretKey key, byte[] data, byte[] nonce, byte[] byte[] output = null; Cipher cipher; try { - cipher = Cipher.getInstance("AES/GCM/PKCS5Padding"); + cipher = Cipher.getInstance("AES/GCM/NoPadding"); SecretKeySpec keySpec = new SecretKeySpec(key.getEncoded(), "AES"); GCMParameterSpec gcmParameterSpec = new GCMParameterSpec(128, nonce); cipher.init(Cipher.DECRYPT_MODE, keySpec, gcmParameterSpec); diff --git a/src/main/java/io/mosip/mimoto/util/CryptoUtil.java b/src/main/java/io/mosip/mimoto/util/CryptoUtil.java index e4cee3eb4..0c6ba30fc 100644 --- a/src/main/java/io/mosip/mimoto/util/CryptoUtil.java +++ b/src/main/java/io/mosip/mimoto/util/CryptoUtil.java @@ -71,7 +71,7 @@ private byte[] symmetricDecrypt(SecretKey key, byte[] data, byte[] iv, byte[] aa } Cipher cipher = null; try { - cipher = Cipher.getInstance("AES/GCM/PKCS5Padding"); + cipher = Cipher.getInstance("AES/GCM/NoPadding"); } catch (NoSuchAlgorithmException | NoSuchPaddingException e) { throw new CryptoManagerException(PlatformErrorMessages.MIMOTO_INVALID_KEY_EXCEPTION.getCode(), PlatformErrorMessages.MIMOTO_INVALID_KEY_EXCEPTION.getMessage(), e); @@ -89,7 +89,7 @@ private byte[] symmetricDecrypt(SecretKey key, byte[] data, byte[] iv, byte[] aa private static byte[] symmetricDecrypt(SecretKey key, byte[] data, byte[] aad) { byte[] output = null; try { - Cipher cipher = Cipher.getInstance("AES/GCM/PKCS5Padding"); + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); byte[] randomIV = Arrays.copyOfRange(data, data.length - cipher.getBlockSize(), data.length); SecretKeySpec keySpec = new SecretKeySpec(key.getEncoded(), "AES"); GCMParameterSpec gcmParameterSpec = new GCMParameterSpec(128, randomIV); From 3e139ec89c30c656a68234a5b10186e94651434f Mon Sep 17 00:00:00 2001 From: Mahesh-Binayak <76687012+Mahesh-Binayak@users.noreply.github.com> Date: Tue, 3 Jun 2025 11:12:05 +0530 Subject: [PATCH 653/860] [MOSIP-39631]added options for variable namespace. (#731) Signed-off-by: Mahesh.Binayak --- partner-onboarder/copy_cm.sh | 2 +- partner-onboarder/copy_secrets.sh | 3 +-- partner-onboarder/install.sh | 21 +++++++++++++++------ 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/partner-onboarder/copy_cm.sh b/partner-onboarder/copy_cm.sh index 62da2c31d..d4a95fa07 100755 --- a/partner-onboarder/copy_cm.sh +++ b/partner-onboarder/copy_cm.sh @@ -3,7 +3,7 @@ # DST_NS: Destination namespace COPY_UTIL=./copy_cm_func.sh -DST_NS=injiweb +DST_NS=$( printenv NS ) $COPY_UTIL configmap inji-stack-config default $DST_NS $COPY_UTIL configmap keycloak-env-vars keycloak $DST_NS || { echo "Ignore this error if Keycloak is deployed externally and its details have been added to values.yaml. If not, please update values.yaml as per the instructions in README.md."; true; } diff --git a/partner-onboarder/copy_secrets.sh b/partner-onboarder/copy_secrets.sh index 4409973d0..6c46332b3 100755 --- a/partner-onboarder/copy_secrets.sh +++ b/partner-onboarder/copy_secrets.sh @@ -3,8 +3,7 @@ # DST_NS: Destination namespace COPY_UTIL=./copy_cm_func.sh -DST_NS=injiweb - +DST_NS=injiwebDST_NS=$( printenv NS ) #$COPY_UTIL secret s3 s3 $DST_NS $COPY_UTIL secret keycloak keycloak $DST_NS || { echo "Ignore this error if Keycloak is deployed externally and its details have been added to values.yaml. If not, please update values.yaml as per the instructions in README.md."; true; } $COPY_UTIL secret keycloak-client-secrets keycloak $DST_NS || { echo "Ignore this error if Keycloak is deployed externally and its details have been added to values.yaml. If not, please update values.yaml as per the instructions in README.md."; true; } diff --git a/partner-onboarder/install.sh b/partner-onboarder/install.sh index 9aeb66c50..033711df3 100644 --- a/partner-onboarder/install.sh +++ b/partner-onboarder/install.sh @@ -68,7 +68,12 @@ fi echo "Invalid input. Please respond with Y (yes) or N (no)." fi done - + echo "Choose the namespace to run the onboarder in:" + read -p "Enter the custom namespace: " custom_ns + if [[ -z "$custom_ns" ]]; then + echo "No namespace provided; EXITING." + exit 1; + fi echo "Do you have public domain & valid SSL? (Y/n) " echo "Y: if you have public domain & valid ssl certificate" echo "n: if you don't have a public domain and a valid SSL certificate. It will add an ssl certificate in onboarder docker. Only recommended in testing env." @@ -83,7 +88,7 @@ fi ENABLE_INSECURE='--set onboarding.configmaps.onboarding.ENABLE_INSECURE=true'; fi - NS=injiweb + export NS=$custom_ns CHART_VERSION=0.0.1-develop echo Create $NS namespace @@ -106,6 +111,10 @@ fi $NFS_OPTION \ $S3_OPTION \ --set onboarding.variables.push_reports_to_s3=$push_reports_to_s3 \ + --set extraEnvVars[0].name=customnamespace,extraEnvVars[0].value=$NS \ + --set extraEnvVarsCM[0]=global \ + --set extraEnvVarsCM[1]=keycloak-env-vars \ + --set extraEnvVarsCM[2]=keycloak-host \ $ENABLE_INSECURE \ -f values.yaml \ --version $CHART_VERSION \ @@ -113,11 +122,11 @@ fi echo Updating mimoto-oidc-keystore-password value kubectl -n $NS create secret generic mimoto-oidc-keystore-password --from-literal=mimoto-oidc-keystore-password='mosip123' --dry-run=client -o yaml | kubectl apply -f - - ./copy_cm_func.sh secret mimoto-oidc-keystore-password injiweb config-server + ./copy_cm_func.sh secret mimoto-oidc-keystore-password $NS config-server echo Updating Mimoto wallet binding partner api key and Mimoto OIDC Partner Client ID - ./copy_cm_func.sh secret mimoto-wallet-binding-partner-api-key injiweb config-server - ./copy_cm_func.sh secret mimoto-oidc-partner-clientid injiweb config-server + ./copy_cm_func.sh secret mimoto-wallet-binding-partner-api-key $NS config-server + ./copy_cm_func.sh secret mimoto-oidc-partner-clientid $NS config-server kubectl -n config-server set env --keys=mimoto-wallet-binding-partner-api-key --from secret/mimoto-wallet-binding-partner-api-key deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ kubectl -n config-server set env --keys=mimoto-oidc-partner-clientid --from secret/mimoto-oidc-partner-clientid deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ kubectl -n config-server set env --keys=mimoto-oidc-keystore-password --from secret/mimoto-oidc-keystore-password deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ @@ -136,4 +145,4 @@ set -o errexit ## set -e : exit the script if any statement returns a non-true set -o nounset ## set -u : exit the script if you try to use an uninitialised variable set -o errtrace # trace ERR through 'time command' and other functions set -o pipefail # trace ERR through pipes -installing_onboarder # calling function +installing_onboarder # calling function \ No newline at end of file From 7f1773c0df5c9d120a0ba90d48ebb7b4b874f72c Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Tue, 3 Jun 2025 13:44:47 +0530 Subject: [PATCH 654/860] Changing pom to migrage to maven central Signed-off-by: Gurpreet41082 --- pom.xml | 41 ++++++++++++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index 31b76ace1..e2c891c2a 100644 --- a/pom.xml +++ b/pom.xml @@ -93,6 +93,7 @@ 1.5.10 0.9.1 42.7.2 + 0.7.0 **/constant/**,**/config/**,**/httpfilter/**,**/cache/**,**/dto/**,**/entity/**,**/dbentity/**,**/model/**,**/exception/**,**/repository/**,**/security/**,**/*Config.java,**/*BootApplication.java,**/*VertxApplication.java,**/cbeffutil/**,**/core/http/**,**/util/** @@ -507,13 +508,31 @@ ossrh - Central Repository + LegacyMavenSnapshot https://oss.sonatype.org/content/repositories/snapshots default true + + ossrh-central + MavenCentralRepository + https://central.sonatype.com/repository/maven-snapshots + default + + true + + + + central + MavenCentral + default + https://repo1.maven.org/maven2 + + false + + google-maven https://maven.google.com/ @@ -676,14 +695,22 @@ - org.sonatype.plugins - nexus-staging-maven-plugin - 1.6.14 + org.sonatype.central + central-publishing-maven-plugin + ${central.publishing.maven.plugin.version} true + + + default-deploy + deploy + + deploy + + + - ossrh - https://oss.sonatype.org/ - false + ossrh + false From 9dfbe983f29047592691c1ad7b2dc9276a6f1eaf Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 3 Jun 2025 14:47:12 +0530 Subject: [PATCH 655/860] [INJIWEB-1533] update the logic of delete wallet api to reset wallet only if the request is sent with correct walletId after unlocking the wallet and update some messages in swagger annotation to keep it consistent with api json file Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- docs/api-documentation-openapi.json | 28 ++++++++++----- .../constant/SwaggerLiteralConstants.java | 4 +-- .../WalletCredentialsController.java | 4 +-- .../mimoto/controller/WalletsController.java | 35 +++++++++++-------- 4 files changed, 44 insertions(+), 27 deletions(-) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index ae51e67dc..8655cbe57 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -2869,13 +2869,13 @@ "errorMessage": "Locale must be a 2-letter code" } }, - "Invalid Wallet Id": { + "Invalid Wallet ID": { "value": { "errorCode": "invalid_request", "errorMessage": "Invalid Wallet ID. Session and request Wallet ID do not match" } }, - "Wallet Id not found in session": { + "Wallet ID not found in session": { "value": { "errorCode": "wallet_locked", "errorMessage": "Wallet is locked" @@ -3686,8 +3686,8 @@ "tags": [ "Wallets" ], - "summary": "Delete a wallet", - "description": "This endpoint allows you to delete a specific wallet. The API is secured using session-based authentication. The session ID is extracted from the Cookie header to authenticate the user. The user's ID is obtained from the session and used to validate ownership of the wallet before deletion. If the wallet is successfully deleted, a 200 OK response is returned.", + "summary": "Delete a Wallet", + "description": "This endpoint allows you to delete a specific wallet. The API is secured using session-based authentication. The session ID is extracted from the Cookie header to authenticate the user. The user's ID is obtained from the session and used to validate ownership of the Wallet before deletion. If the Wallet is successfully deleted, a 200 OK response is returned; otherwise, an appropriate error response is returned.", "operationId": "deleteWallet", "security": [ { @@ -3702,7 +3702,7 @@ "schema": { "type": "string" }, - "description": "Unique identifier of the wallet to be deleted" + "description": "Unique identifier of the Wallet to be deleted" } ], "responses": { @@ -3710,14 +3710,14 @@ "description": "Wallet successfully deleted" }, "401": { - "description": "Unauthorized user deleting a wallet", + "description": "Unauthorized user deleting a Wallet", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" }, "examples": { - "User ID is not present in session": { + "User ID not found in session": { "value": { "errorCode": "unauthorized", "errorMessage": "User ID not found in session" @@ -3741,7 +3741,19 @@ "errorMessage": "User ID cannot be null or empty" } }, - "Wallet not found": { + "Invalid Wallet ID": { + "value": { + "errorCode": "invalid_request", + "errorMessage": "Invalid Wallet ID. Session and request Wallet ID do not match" + } + }, + "Wallet ID not found in session": { + "value": { + "errorCode": "wallet_locked", + "errorMessage": "Wallet is locked" + } + }, + "Wallet not found in database": { "value": { "errorCode": "invalid_request", "errorMessage": "Wallet not found" diff --git a/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java b/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java index 3e5207348..e468b9da9 100644 --- a/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java +++ b/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java @@ -84,8 +84,8 @@ public class SwaggerLiteralConstants { public static final String WALLETS_NAME = "Wallets"; public static final String WALLETS_DESCRIPTION = "All the Wallet related endpoints"; - public static final String WALLETS_DELETE_SUMMARY = "Delete a wallet"; - public static final String WALLETS_DELETE_DESCRIPTION = "This endpoint allows you to delete a specific wallet"; + public static final String WALLETS_DELETE_SUMMARY = "Delete a Wallet"; + public static final String WALLETS_DELETE_DESCRIPTION = "This endpoint allows you to delete a specific wallet. The API is secured using session-based authentication. The session ID is extracted from the Cookie header to authenticate the user. The user's ID is obtained from the session and used to validate ownership of the Wallet before deletion. If the Wallet is successfully deleted, a 200 OK response is returned; otherwise, an appropriate error response is returned."; /* Wallet Credentials Controller */ public static final String WALLET_CREDENTIALS_NAME = "Wallet Credentials"; diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index a580a84b8..ce77d465d 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -91,9 +91,9 @@ public WalletCredentialsController(WalletCredentialService walletCredentialServi @ApiResponse(responseCode = "200", description = "Verifiable Credential downloaded and stored successfully", content = @Content(mediaType = "application/json", schema = @Schema(implementation = VerifiableCredentialResponseDTO.class))) @ApiResponse(responseCode = "400", description = "Bad request - Wallet key is null / blank or Wallet ID is null / blank / mismatch with session Wallet ID or required params are missing / invalid", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = { @ExampleObject(name = "Invalid header Accept-Language", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Locale must be a 2-letter code\"}"), - @ExampleObject(name = "Wallet Id is empty or blank", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet ID cannot be blank\"}"), + @ExampleObject(name = "Wallet ID is empty or blank", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet ID cannot be blank\"}"), @ExampleObject(name = "Wallet ID not found in session", value = "{\"errorCode\": \"wallet_locked\", \"errorMessage\": \"Wallet is locked\"}"), - @ExampleObject(name = "Invalid Wallet Id", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Invalid Wallet ID. Session and request Wallet ID do not match\"}"), + @ExampleObject(name = "Invalid Wallet ID", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Invalid Wallet ID. Session and request Wallet ID do not match\"}"), @ExampleObject(name = "Wallet key not found in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet key not found in session\"}"), @ExampleObject(name = "Invalid issuer", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"issuerId cannot be blank\"}"), @ExampleObject(name = "Invalid credentialConfigurationId", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"credentialConfigurationId cannot be blank\"}")})) diff --git a/src/main/java/io/mosip/mimoto/controller/WalletsController.java b/src/main/java/io/mosip/mimoto/controller/WalletsController.java index 23d78d386..577fe7bbe 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletsController.java @@ -9,6 +9,7 @@ import io.mosip.mimoto.exception.InvalidRequestException; import io.mosip.mimoto.exception.UnAuthorizationAccessException; import io.mosip.mimoto.service.WalletService; +import io.mosip.mimoto.util.WalletUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.enums.ParameterIn; @@ -51,11 +52,11 @@ public WalletsController(WalletService walletService) { } /** - * Creates a new wallet for a user. + * Creates a new Wallet for a user. * - * @param wallet The wallet creation request containing name and PIN. + * @param wallet The Wallet creation request containing name and PIN. * @param httpSession The HTTP session containing user details. - * @return The unique identifier of the created wallet. + * @return The unique identifier of the created Wallet. * @throws InvalidRequestException If the request is invalid. * Example: Wallet PIN and Confirm Wallet PIN received in request don't match */ @@ -96,7 +97,7 @@ public ResponseEntity createWallet( * Retrieves all wallets for the authenticated user. * * @param httpSession The HTTP session containing user details. - * @return List of wallet details. + * @return List of Wallet details. * @throws InvalidRequestException If the request fails. */ @Operation( @@ -121,8 +122,8 @@ public ResponseEntity> getWallets(HttpSession httpSessio /** * Unlocks an existing wallet by retrieving its key and storing it in the session. * - * @param walletId The unique identifier of the wallet. - * @param wallet The request containing the wallet PIN. + * @param walletId The unique identifier of the Wallet. + * @param wallet The request containing the Wallet PIN. * @param httpSession The HTTP session containing user details. * @return The wallet details if unlocked successfully. * @throws InvalidRequestException If the wallet or PIN is invalid. @@ -157,11 +158,12 @@ public ResponseEntity unlockWallet( } /** - * Deletes a wallet by its ID + * Deletes a Wallet by its ID * - * @param walletId The ID of the wallet to delete + * @param walletId The ID of the Wallet to delete * @param httpSession The HTTP session containing user details * @return ResponseEntity with HTTP status 200 if successful, 401 if unauthorized + * @throws InvalidRequestException If input parameters or session are invalid. */ @Operation( summary = SwaggerLiteralConstants.WALLETS_DELETE_SUMMARY, @@ -171,22 +173,25 @@ public ResponseEntity unlockWallet( parameters = {@Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "Unique identifier of the wallet to be deleted", schema = @Schema(type = "string"))} ) @ApiResponse(responseCode = "200", description = "Wallet successfully deleted") - @ApiResponse(responseCode = "400", description = "Invalid wallet creation request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = { + @ApiResponse(responseCode = "400", description = "Invalid Wallet deletion request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = { @ExampleObject(name = "Invalid User ID", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"User ID cannot be null or empty\"}"), - @ExampleObject(name = "Wallet not found", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet not found\"}")})) - @ApiResponse(responseCode = "401", description = "Unauthorized access", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "User ID not found in session", value = "{\"errorCode\": \"unauthorized\", \"errorMessage\": \"User ID not found in session\"}"))) + @ExampleObject(name = "Invalid Wallet ID", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Invalid Wallet ID. Session and request Wallet ID do not match\"}"), + @ExampleObject(name = "Wallet ID not found in session", value = "{\"errorCode\": \"wallet_locked\", \"errorMessage\": \"Wallet is locked\"}"), + @ExampleObject(name = "Wallet not found in database", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet not found\"}")})) + @ApiResponse(responseCode = "401", description = "Unauthorized user deleting a Wallet", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "User ID not found in session", value = "{\"errorCode\": \"unauthorized\", \"errorMessage\": \"User ID not found in session\"}"))) @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"))) @DeleteMapping("/{walletId}") public ResponseEntity deleteWallet(@PathVariable("walletId") String walletId, HttpSession httpSession) { String userId = (String) httpSession.getAttribute(SessionKeys.USER_ID); - walletService.deleteWallet(userId, walletId); // sessionWalletId is not needed from client, pass walletId for validation - String sessionWalletId = (String) httpSession.getAttribute(SessionKeys.WALLET_ID); - if (sessionWalletId != null && sessionWalletId.equals(walletId)) { + if (sessionWalletId != null) { + WalletUtil.validateWalletId(httpSession, walletId); httpSession.removeAttribute(SessionKeys.WALLET_KEY); httpSession.removeAttribute(SessionKeys.WALLET_ID); - log.info("Cleared wallet session attributes for walletId: {}", walletId); } + + walletService.deleteWallet(userId, walletId); + log.info("Cleared Wallet session attributes for Wallet with Id: {}", walletId); return ResponseEntity.ok().build(); } } From 7b117d2a5920ed768217989c055b00747f762f48 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Tue, 3 Jun 2025 15:14:05 +0530 Subject: [PATCH 656/860] Changing pom to remove execution block (#734) Signed-off-by: Gurpreet41082 --- pom.xml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/pom.xml b/pom.xml index e2c891c2a..467d3836d 100644 --- a/pom.xml +++ b/pom.xml @@ -699,15 +699,6 @@ central-publishing-maven-plugin ${central.publishing.maven.plugin.version} true - - - default-deploy - deploy - - deploy - - - ossrh false From 2057e6bd7a316805776e1b929ee9d18ddf4a6209 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Tue, 3 Jun 2025 16:16:09 +0530 Subject: [PATCH 657/860] [MOSIP-41674] Maven changes for distributionmanagement (#735) * Changing pom to remove execution block Signed-off-by: Gurpreet41082 * Changing distributionmanagement Signed-off-by: Gurpreet41082 --------- Signed-off-by: Gurpreet41082 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 467d3836d..c7b664f66 100644 --- a/pom.xml +++ b/pom.xml @@ -546,11 +546,11 @@ ossrh - https://oss.sonatype.org/content/repositories/snapshots + https://central.sonatype.com/repository/maven-snapshots ossrh - https://oss.sonatype.org/service/local/staging/deploy/maven2/ + https://central.sonatype.com/api/v1/publisher From f8be56166f3f17f6cf7561eadbf7f3869fb60d61 Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Thu, 5 Jun 2025 12:27:13 +0530 Subject: [PATCH 658/860] [INJIWEB-1563] modify oAuth success redirect url Signed-off-by: KiruthikaJeyashankar --- .../security/oauth2/OAuth2AuthenticationSuccessHandler.java | 2 +- .../oauth2/OAuth2AuthenticationSuccessHandlerTest.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java index 1b0976cb8..1f365840b 100644 --- a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java +++ b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java @@ -47,6 +47,6 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo String userId = oAuth2User.getAttribute("userId"); session.setAttribute(SessionKeys.USER_ID, userId); - response.sendRedirect(injiWebUrl + "/pin"); + response.sendRedirect(injiWebUrl + "/user/passcode"); } } \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java index e3d3fe614..c6379d725 100644 --- a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java +++ b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java @@ -72,7 +72,7 @@ public void testOnAuthenticationSuccessSetsAttributesAndRedirects() throws Excep verify(session).setAttribute("clientRegistrationId", CLIENT_REGISTRATION_ID); verify(session).setAttribute(SessionKeys.USER_ID, USER_ID); - verify(response).sendRedirect(INJI_WEB_URL + "/pin"); + verify(response).sendRedirect(INJI_WEB_URL + "/user/passcode"); ArgumentCaptor captor = ArgumentCaptor.forClass(UserMetadataDTO.class); verify(session).setAttribute(eq(SessionKeys.USER_METADATA), captor.capture()); @@ -96,7 +96,7 @@ public void testOnAuthenticationSuccessWithNullAttributes() throws Exception { verify(session).setAttribute("clientRegistrationId", CLIENT_REGISTRATION_ID); verify(session).setAttribute(SessionKeys.USER_ID, USER_ID); - verify(response).sendRedirect(INJI_WEB_URL + "/pin"); + verify(response).sendRedirect(INJI_WEB_URL + "/user/passcode"); ArgumentCaptor captor = ArgumentCaptor.forClass(UserMetadataDTO.class); verify(session).setAttribute(eq(SessionKeys.USER_METADATA), captor.capture()); From 25e97065b911050341ef8426a06afa59d928ff98 Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Thu, 5 Jun 2025 12:57:04 +0530 Subject: [PATCH 659/860] [INJIWEB-1563] extract oAuth success redirect url as config Signed-off-by: KiruthikaJeyashankar --- docker-compose/config/mimoto-default.properties | 1 + .../oauth2/OAuth2AuthenticationSuccessHandler.java | 6 +++--- src/main/resources/application-local.properties | 1 + .../oauth2/OAuth2AuthenticationSuccessHandlerTest.java | 10 +++++----- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/docker-compose/config/mimoto-default.properties b/docker-compose/config/mimoto-default.properties index bf45d120d..91b9ca1f2 100644 --- a/docker-compose/config/mimoto-default.properties +++ b/docker-compose/config/mimoto-default.properties @@ -305,6 +305,7 @@ mosip.openid.verifiers=mimoto-trusted-verifiers.json #Inji Web Config mosip.inji.web.url=http://localhost:3004 mosip.inji.web.redirect.url=${mosip.inji.web.url}/authorize +mosip.inji.web.authentication.success.redirect.url=${mosip.inji.web.url}/user/passcode mosip.inji.qr.data.size.limit=10000 mosip.inji.qr.code.height=650 mosip.inji.qr.code.width=650 diff --git a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java index 1f365840b..077d6358d 100644 --- a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java +++ b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java @@ -20,8 +20,8 @@ @Slf4j public class OAuth2AuthenticationSuccessHandler extends SimpleUrlAuthenticationSuccessHandler { - @Value("${mosip.inji.web.url}") - private String injiWebUrl; + @Value("${mosip.inji.web.authentication.success.redirect.url}") + private String authenticationSuccessRedirectUrl; @Override public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { @@ -47,6 +47,6 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo String userId = oAuth2User.getAttribute("userId"); session.setAttribute(SessionKeys.USER_ID, userId); - response.sendRedirect(injiWebUrl + "/user/passcode"); + response.sendRedirect(authenticationSuccessRedirectUrl); } } \ No newline at end of file diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index a97c41190..270478ffd 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -248,6 +248,7 @@ mosip.oidc.p12.path=certs/ #Inji Web Config mosip.inji.web.url=http://localhost:3004 mosip.inji.web.redirect.url=${mosip.inji.web.url}/authorize +mosip.inji.web.authentication.success.redirect.url=${mosip.inji.web.url}/user/passcode mosip.inji.qr.data.size.limit=2000 mosip.inji.qr.code.height=650 mosip.inji.qr.code.width=650 diff --git a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java index c6379d725..05a10693b 100644 --- a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java +++ b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java @@ -43,7 +43,7 @@ public class OAuth2AuthenticationSuccessHandlerTest { @Mock private OAuth2User oauth2User; - private static final String INJI_WEB_URL = "https://example.com"; + private static final String AUTH_SUCCESS_REDIRECT_URL = "https://example.com/passcode"; private static final String CLIENT_REGISTRATION_ID = "google"; private static final String DISPLAY_NAME = "John Doe"; private static final String PROFILE_PICTURE_URL = "https://example.com/profile.jpg"; @@ -52,9 +52,9 @@ public class OAuth2AuthenticationSuccessHandlerTest { @Before public void setUp() throws Exception { - Field injiWebUrlField = OAuth2AuthenticationSuccessHandler.class.getDeclaredField("injiWebUrl"); + Field injiWebUrlField = OAuth2AuthenticationSuccessHandler.class.getDeclaredField("authenticationSuccessRedirectUrl"); injiWebUrlField.setAccessible(true); - injiWebUrlField.set(successHandler, INJI_WEB_URL); + injiWebUrlField.set(successHandler, AUTH_SUCCESS_REDIRECT_URL); when(request.getSession(false)).thenReturn(session); } @@ -72,7 +72,7 @@ public void testOnAuthenticationSuccessSetsAttributesAndRedirects() throws Excep verify(session).setAttribute("clientRegistrationId", CLIENT_REGISTRATION_ID); verify(session).setAttribute(SessionKeys.USER_ID, USER_ID); - verify(response).sendRedirect(INJI_WEB_URL + "/user/passcode"); + verify(response).sendRedirect(AUTH_SUCCESS_REDIRECT_URL); ArgumentCaptor captor = ArgumentCaptor.forClass(UserMetadataDTO.class); verify(session).setAttribute(eq(SessionKeys.USER_METADATA), captor.capture()); @@ -96,7 +96,7 @@ public void testOnAuthenticationSuccessWithNullAttributes() throws Exception { verify(session).setAttribute("clientRegistrationId", CLIENT_REGISTRATION_ID); verify(session).setAttribute(SessionKeys.USER_ID, USER_ID); - verify(response).sendRedirect(INJI_WEB_URL + "/user/passcode"); + verify(response).sendRedirect(AUTH_SUCCESS_REDIRECT_URL); ArgumentCaptor captor = ArgumentCaptor.forClass(UserMetadataDTO.class); verify(session).setAttribute(eq(SessionKeys.USER_METADATA), captor.capture()); From ab096414d887bb413c9cc2ed8b3e6ff4fa72a02f Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Thu, 5 Jun 2025 13:46:08 +0530 Subject: [PATCH 660/860] injiweb-1522 adding google Oauth2 integration document Signed-off-by: Gurpreet41082 --- docs/GoogleOauth2LoginIntegration.md | 87 ++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 docs/GoogleOauth2LoginIntegration.md diff --git a/docs/GoogleOauth2LoginIntegration.md b/docs/GoogleOauth2LoginIntegration.md new file mode 100644 index 000000000..00c13f9fe --- /dev/null +++ b/docs/GoogleOauth2LoginIntegration.md @@ -0,0 +1,87 @@ +# Google OAuth2 Login Integration Guide + +## Overview +This documentation explains the implementation of the login feature using Google OAuth2 login. It also covers the authentication mechanism for APIs in : + - `UsersController` + - `WalletController` + - `WalletCredentialsController`. + +--- + +## Prerequisites +Before you begin, ensure you have: +1. **A Google Developer Console account.** +2. **A project created in the Google Developer Console.** +3. **OAuth2 enabled for the project.** +4. **A Client ID and Client Secret generated.** +--- + +## Google OAuth2 Integration Steps + +1. **Configure OAuth2 Login**: + - Google client ID and secret in `application-default.properties`: + ``` + spring.security.oauth2.client.registration.google.client-id=${mosip.injiweb.google.client.id} + spring.security.oauth2.client.registration.google.client-secret=${mosip.injiweb.google.client.secret} + ``` +Make sure value of `mosip.injiweb.google.client.id` and `mosip.injiweb.google.client.secret` are set in the environment. +2. **Authorized Host URL**: + - Register the base domain of your mimoto in Google Developer Console, e.g., `https://your-mimoto-domain`. + +3. **Redirect URI**: + - Under Authorized redirect URIs in Google Developer Console, add: + `https:///oauth2/callback/*` + Replace `` with your application's domain. + - Ensure the redirect URI matches the one configured in the Google Developer Console. +--- +## Sequence Diagram +### Google Login Flow +```mermaid +sequenceDiagram + participant User + participant Browser + participant Application + participant GoogleOAuth2 + + User->>Browser: Navigate to Login Page + Browser->>Application: Request Login + Application->>GoogleOAuth2: Redirect to Google Login + GoogleOAuth2->>User: Prompt for Credentials + User->>GoogleOAuth2: Enter Credentials + GoogleOAuth2->>Application: Validate Access Token + Application->>Browser: Redirect to Dashboard + Browser->>User: Display Dashboard + ``` +### Authenticated API Access Flow +```mermaid + sequenceDiagram + participant User + participant Browser + participant Application + participant Redis + + User->>Browser: Request API + Browser->>Application: Send API Request with Session ID + Application->>Redis: Validate Session ID + Redis->>Application: Return User Metadata + Application->>Browser: Respond with Data +``` +--- +## Key Points +### Session-Based Authentication: +- On successful login, a session ID is generated and stored in Redis. +- All APIs in UsersController, WalletController, and WalletCredentialsController validate the session ID stored in Redis. + +### Integration Points in Application +### Component Responsibility + +| **Component** | **Responsibility** | +|--------------------------------|-------------------------------------------------------------------------------------| +| `Config` | Configures OAuth2 login, session management, and security settings. | +| `OAuth2AuthenticationSuccessHandler` | Handles successful authentication, stores user metadata in the session, and redirects to the dashboard. | +| `OAuth2AuthenticationFailureHandler` | Handles authentication failures, logs errors, and redirects to the login page with error details. | +| `CustomOAuth2UserService` | Retrieves and processes user information from the OAuth2 provider. | +| `TokenAuthController` | Provides API for token-based authentication and session creation. | +| `UsersController` | Manages user profile retrieval using session-based authentication. | +| `WalletsController` | Handles wallet creation, unlocking, and deletion using session-based authentication. | +| `WalletCredentialsController` | Manages credential download, retrieval, and deletion for wallets. |--- From 1b5710c55ebd08c85b105332134b2c0e7d5e9685 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Thu, 5 Jun 2025 15:02:55 +0530 Subject: [PATCH 661/860] injiweb-1522 Incorporated feedback to add redis in login flow Signed-off-by: Gurpreet41082 --- docs/GoogleOauth2LoginIntegration.md | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/docs/GoogleOauth2LoginIntegration.md b/docs/GoogleOauth2LoginIntegration.md index 00c13f9fe..5d3cd657a 100644 --- a/docs/GoogleOauth2LoginIntegration.md +++ b/docs/GoogleOauth2LoginIntegration.md @@ -24,7 +24,7 @@ Before you begin, ensure you have: spring.security.oauth2.client.registration.google.client-id=${mosip.injiweb.google.client.id} spring.security.oauth2.client.registration.google.client-secret=${mosip.injiweb.google.client.secret} ``` -Make sure value of `mosip.injiweb.google.client.id` and `mosip.injiweb.google.client.secret` are set in the environment. + - Make sure value of `mosip.injiweb.google.client.id` and `mosip.injiweb.google.client.secret` are set in the environment. 2. **Authorized Host URL**: - Register the base domain of your mimoto in Google Developer Console, e.g., `https://your-mimoto-domain`. @@ -40,31 +40,35 @@ Make sure value of `mosip.injiweb.google.client.id` and `mosip.injiweb.google.cl sequenceDiagram participant User participant Browser - participant Application + participant mimoto participant GoogleOAuth2 + participant Redis User->>Browser: Navigate to Login Page - Browser->>Application: Request Login - Application->>GoogleOAuth2: Redirect to Google Login + Browser->>mimoto: Request Login + mimoto->>GoogleOAuth2: Redirect to Google Login GoogleOAuth2->>User: Prompt for Credentials User->>GoogleOAuth2: Enter Credentials - GoogleOAuth2->>Application: Validate Access Token - Application->>Browser: Redirect to Dashboard - Browser->>User: Display Dashboard + GoogleOAuth2->>mimoto: Send Authorization Code + mimoto->>GoogleOAuth2: Exchange Code for Access Token + GoogleOAuth2->>mimoto: Return Access Token & User Info + mimoto->>Redis: Store Session ID and User Metadata + mimoto->>Browser: Set Session ID in Cookie / Response + Browser->>User: Redirect to Dashboard ``` ### Authenticated API Access Flow ```mermaid sequenceDiagram participant User participant Browser - participant Application + participant mimoto participant Redis User->>Browser: Request API - Browser->>Application: Send API Request with Session ID - Application->>Redis: Validate Session ID - Redis->>Application: Return User Metadata - Application->>Browser: Respond with Data + Browser->>mimoto: Send API Request with Session ID + mimoto->>Redis: Validate Session ID + Redis->>mimoto: Return User Metadata + mimoto->>Browser: Respond with Data ``` --- ## Key Points From 1c82743823e1960b7ccd681c8b9044986c25be70 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Thu, 5 Jun 2025 18:35:54 +0530 Subject: [PATCH 662/860] injiweb-1533 doc for the encryption and decryption of the user sensitive data Signed-off-by: Gurpreet41082 --- docs/UserDataEncryptionWithPinBasedKey.md | 100 ++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 docs/UserDataEncryptionWithPinBasedKey.md diff --git a/docs/UserDataEncryptionWithPinBasedKey.md b/docs/UserDataEncryptionWithPinBasedKey.md new file mode 100644 index 000000000..6b7f96576 --- /dev/null +++ b/docs/UserDataEncryptionWithPinBasedKey.md @@ -0,0 +1,100 @@ +## Securing User Data in the Mimoto Database with PIN-derived Key Encryption + + +## Overview of Encryption Requirement and Goals + +The encryption mechanism is designed to protect sensitive data stored in the database, such as wallet keys and user metadata. The primary goals are: + +- Ensuring confidentiality of sensitive data. +- Preventing unauthorized access to sensitive information. +- Supporting secure key management and retrieval processes. +- Enabling record-level encryption for granular security. + +## Encryption Algorithm and Mode Used + +- **Algorithm:** AES (Advanced Encryption Standard) +- **Key Size:** 256 bits +- **Mode:** AES-256 GCM + +## Key Management Strategy + +- **Key Generation:** The AES key is generated dynamically during wallet creation. +- **Key Encryption:** The AES key is encrypted using the wallet PIN provided by the user. +- **Key Storage:** The encrypted AES key is stored securely in the database. +- **Key Retrieval:** During wallet unlocking, the wallet PIN is used to decrypt the AES key. + +## Record-Level Encryption Design + +- Each sensitive record (e.g., user signing keys) is encrypted using a unique AES key for a user. +- The AES key itself is encrypted using the wallet PIN, ensuring that only the user with the correct PIN can access the data. +--- +# Wallet Key Lifecycle + +### 1. 🔧 Wallet Creation +The user submits a POST request with a PIN to create a new wallet. + +- The system generates a new 256-bit AES wallet key: +```java +SecretKey aesKey = KeyGenerationUtil.generateEncryptionKey("AES", 256); +``` +- A salt (32 bytes) and IV (12 bytes) are generated randomly. +- The user's PIN is used to derive a key using PBKDF2WithHmacSHA512. +- The AES key is encrypted using AES/GCM/NoPadding and stored as: + + ```Base64(salt + IV + ciphertext)``` +- The original PIN and AES key are never stored. + +### 2. 🔓 **Wallet Unlock (Session Start)** +When the user wants to access the wallet, they re-enter their PIN via an unlock API. + +- The system retrieves the encrypted wallet key. +- Extracts the salt and IV. +- Derives the decryption key from the entered PIN and stored salt. +- Decrypts the AES wallet key. +- The decrypted AES key is then Base64-encoded and stored in the HTTP session. +### 3. 🔐 **In-Session Operations** +Once the AES wallet key is in session: +- It is used to encrypt or decrypt sensitive data like credentials or keys. +- The user does not need to re-enter the PIN during the session. +- Encryption and decryption continue using AES/GCM/NoPadding for both confidentiality and integrity. + +### 4. 🔚 **Session End / Logout** +- The decrypted AES key is removed from the session. +- On the next login, in unlock wallet API, the user must provide their PIN again to decrypt the key. + +--- + +## Flow Diagram + +```mermaid +flowchart TD +%% Wallet Creation Flow +A[Wallet Creation] --> B[Gen AES Wallet Key] +B --> C[Gen Salt & IV] +C --> D[Derive Key
from PIN + Salt] +D --> E[Encrypt AES Key
using Derived Key] +E --> F[Store Encrypted Key
as Base64] +F --> G[DB] + + %% Wallet Unlock Subgraph + subgraph Unlock Flow + H[Wallet Unlock] --> I[Retrieve Encrypted Key
from DB] + I --> J[Extract Salt & IV] + J --> K[Derive Key
from Entered PIN] + K --> L[Decrypt AES Key] + L --> M[Store AES Key
in Session] + end + + %% Session Operations + M --> N[Session Ops:
Encrypt/Decrypt Data] + N --> O[Session End / Logout] + O --> P[Clear AES Key
from Session] + P --> H + + %% Style classes + classDef styleA fill:#D0F0C0,stroke:#3C8039,stroke-width:2px; + classDef styleP fill:#F0D0C0,stroke:#803C39,stroke-width:2px; + class A,H styleA + class O styleP +``` +This flow ensures that sensitive user data is securely encrypted and accessible only to the user who knows the PIN. \ No newline at end of file From 48535698da04d77e9f86382156d21bd8cbb32f94 Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Fri, 6 Jun 2025 12:20:20 +0530 Subject: [PATCH 663/860] [INJIWEB-1563] move auth success redirect config to default profile Signed-off-by: KiruthikaJeyashankar --- docker-compose/config/mimoto-default.properties | 1 - src/main/resources/application-default.properties | 3 +++ src/main/resources/application-local.properties | 1 - 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/docker-compose/config/mimoto-default.properties b/docker-compose/config/mimoto-default.properties index 91b9ca1f2..bf45d120d 100644 --- a/docker-compose/config/mimoto-default.properties +++ b/docker-compose/config/mimoto-default.properties @@ -305,7 +305,6 @@ mosip.openid.verifiers=mimoto-trusted-verifiers.json #Inji Web Config mosip.inji.web.url=http://localhost:3004 mosip.inji.web.redirect.url=${mosip.inji.web.url}/authorize -mosip.inji.web.authentication.success.redirect.url=${mosip.inji.web.url}/user/passcode mosip.inji.qr.data.size.limit=10000 mosip.inji.qr.code.height=650 mosip.inji.qr.code.width=650 diff --git a/src/main/resources/application-default.properties b/src/main/resources/application-default.properties index f98e925fc..03371ac42 100644 --- a/src/main/resources/application-default.properties +++ b/src/main/resources/application-default.properties @@ -15,6 +15,9 @@ spring.security.oauth2.client.provider.google.emailAttribute=email spring.security.oauth2.client.provider.google.pictureAttribute=picture spring.security.oauth2.client.provider.google.phoneNumberAttribute=phone_number +#Inji Web Config +mosip.inji.web.authentication.success.redirect.url=${mosip.inji.web.url}/user/passcode + #Database config spring.datasource.url=jdbc:postgresql://${mosip.mimoto.database.hostname}:${mosip.mimoto.database.port}/inji_mimoto spring.datasource.username=mimotouser diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 270478ffd..a97c41190 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -248,7 +248,6 @@ mosip.oidc.p12.path=certs/ #Inji Web Config mosip.inji.web.url=http://localhost:3004 mosip.inji.web.redirect.url=${mosip.inji.web.url}/authorize -mosip.inji.web.authentication.success.redirect.url=${mosip.inji.web.url}/user/passcode mosip.inji.qr.data.size.limit=2000 mosip.inji.qr.code.height=650 mosip.inji.qr.code.width=650 From d32f15cd28c844ddd748754d7a16a177886829a0 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Fri, 6 Jun 2025 13:08:01 +0530 Subject: [PATCH 664/860] injiweb-1553 updated with base64 AES key Signed-off-by: Gurpreet41082 --- docs/UserDataEncryptionWithPinBasedKey.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/UserDataEncryptionWithPinBasedKey.md b/docs/UserDataEncryptionWithPinBasedKey.md index 6b7f96576..f3bc2ccaa 100644 --- a/docs/UserDataEncryptionWithPinBasedKey.md +++ b/docs/UserDataEncryptionWithPinBasedKey.md @@ -42,7 +42,7 @@ SecretKey aesKey = KeyGenerationUtil.generateEncryptionKey("AES", 256); - The AES key is encrypted using AES/GCM/NoPadding and stored as: ```Base64(salt + IV + ciphertext)``` -- The original PIN and AES key are never stored. +- The original PIN and raw AES key are never stored—only the AES key encrypted with a PIN-derived key is saved. ### 2. 🔓 **Wallet Unlock (Session Start)** When the user wants to access the wallet, they re-enter their PIN via an unlock API. @@ -50,16 +50,16 @@ When the user wants to access the wallet, they re-enter their PIN via an unlock - The system retrieves the encrypted wallet key. - Extracts the salt and IV. - Derives the decryption key from the entered PIN and stored salt. -- Decrypts the AES wallet key. -- The decrypted AES key is then Base64-encoded and stored in the HTTP session. +- The ```decryptWithPin``` method from the ```keyManager``` library handles the decryption and returns the Base64-encoded AES wallet key. +- The Base64-encoded AES key is stored in the HTTP session. ### 3. 🔐 **In-Session Operations** Once the AES wallet key is in session: -- It is used to encrypt or decrypt sensitive data like credentials or keys. +- It is Base64-decoded and used to encrypt or decrypt sensitive data like credentials or keys. - The user does not need to re-enter the PIN during the session. - Encryption and decryption continue using AES/GCM/NoPadding for both confidentiality and integrity. ### 4. 🔚 **Session End / Logout** -- The decrypted AES key is removed from the session. +- The Base64-encoded AES key is removed from the session. - On the next login, in unlock wallet API, the user must provide their PIN again to decrypt the key. --- @@ -81,14 +81,14 @@ F --> G[DB] H[Wallet Unlock] --> I[Retrieve Encrypted Key
from DB] I --> J[Extract Salt & IV] J --> K[Derive Key
from Entered PIN] - K --> L[Decrypt AES Key] - L --> M[Store AES Key
in Session] + K --> L[Receive Base64 AES Key
from decryptWithPin] + L --> M[Store Base64 AES Key
in Session] end %% Session Operations - M --> N[Session Ops:
Encrypt/Decrypt Data] + M --> N[Session Ops:
Base64 Decode Key → Encrypt/Decrypt Data] N --> O[Session End / Logout] - O --> P[Clear AES Key
from Session] + O --> P[Remove Base64 AES Key
from Session] P --> H %% Style classes From 250c86b5d7aa23e3ea9719548e2c34ecbdcb2f4c Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Fri, 6 Jun 2025 17:10:29 +0530 Subject: [PATCH 665/860] dsd-8184 fixing docker properties Signed-off-by: Gurpreet41082 --- docker-compose/config/mimoto-default.properties | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/docker-compose/config/mimoto-default.properties b/docker-compose/config/mimoto-default.properties index bf45d120d..d167abad0 100644 --- a/docker-compose/config/mimoto-default.properties +++ b/docker-compose/config/mimoto-default.properties @@ -305,6 +305,7 @@ mosip.openid.verifiers=mimoto-trusted-verifiers.json #Inji Web Config mosip.inji.web.url=http://localhost:3004 mosip.inji.web.redirect.url=${mosip.inji.web.url}/authorize +mosip.inji.web.authentication.success.redirect.url=${mosip.inji.web.url}/user/passcode mosip.inji.qr.data.size.limit=10000 mosip.inji.qr.code.height=650 mosip.inji.qr.code.width=650 @@ -338,13 +339,18 @@ cache.default.expiry-time-in-min = 60 spring.security.oauth2.client.registration.google.client-id=${GOOGLE_OAUTH_CLIENT_ID} spring.security.oauth2.client.registration.google.client-secret=${GOOGLE_OAUTH_CLIENT_SECRET} spring.security.oauth2.client.registration.google.scope=profile,email -spring.security.oauth2.client.registration.google.redirect-uri=http://localhost:8099/v1/mimoto/oauth2/callback/google +spring.security.oauth2.client.registration.google.redirect-uri={baseUrl}/oauth2/callback/{registrationId} spring.security.oauth2.client.registration.google.authorization-grant-type=authorization_code spring.security.oauth2.client.registration.google.client-name=Google spring.security.oauth2.client.provider.google.authorization-uri=https://accounts.google.com/o/oauth2/auth?prompt=select_account spring.security.oauth2.client.provider.google.token-uri=https://oauth2.googleapis.com/token spring.security.oauth2.client.provider.google.user-info-uri=https://www.googleapis.com/oauth2/v3/userinfo spring.security.oauth2.client.provider.google.jwk-set-uri=https://www.googleapis.com/oauth2/v3/certs +spring.security.oauth2.client.provider.google.userNameAttribute=sub +spring.security.oauth2.client.provider.google.nameAttribute=name +spring.security.oauth2.client.provider.google.emailAttribute=email +spring.security.oauth2.client.provider.google.pictureAttribute=picture +spring.security.oauth2.client.provider.google.phoneNumberAttribute=phone_number #database config spring.datasource.url=${SPRING_DATASOURCE_URL} @@ -365,3 +371,8 @@ mosip.security.ignore-auth-urls=/safetynet/**,/actuator/**,/swagger-ui/**,/v3/ap /allProperties,/credentials/**,/credentialshare/**,/binding-otp,/wallet-binding,/get-token/**,\ /issuers,/issuers/**,/authorize,/req/otp,/vid,/req/auth/**,/req/individualId/otp,/aid/get-individual-id,\ /verifiers, /auth/*/token-login + +mosip.inji.app.id=MIMOTO +mosip.inji.encryption.algorithm=AES +mosip.inji.encryption.key.size=256 +mosip.inji.jwt.default.algorithm=RS256 \ No newline at end of file From 901b43ee77cf87fa77c25d4363694aebf675dfb5 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Fri, 6 Jun 2025 17:13:45 +0530 Subject: [PATCH 666/860] dsd-8184 revert the success redirection Signed-off-by: Gurpreet41082 --- docker-compose/config/mimoto-default.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose/config/mimoto-default.properties b/docker-compose/config/mimoto-default.properties index d167abad0..9283d79f9 100644 --- a/docker-compose/config/mimoto-default.properties +++ b/docker-compose/config/mimoto-default.properties @@ -339,7 +339,7 @@ cache.default.expiry-time-in-min = 60 spring.security.oauth2.client.registration.google.client-id=${GOOGLE_OAUTH_CLIENT_ID} spring.security.oauth2.client.registration.google.client-secret=${GOOGLE_OAUTH_CLIENT_SECRET} spring.security.oauth2.client.registration.google.scope=profile,email -spring.security.oauth2.client.registration.google.redirect-uri={baseUrl}/oauth2/callback/{registrationId} +spring.security.oauth2.client.registration.google.redirect-uri=http://localhost:8099/v1/mimoto/oauth2/callback/google spring.security.oauth2.client.registration.google.authorization-grant-type=authorization_code spring.security.oauth2.client.registration.google.client-name=Google spring.security.oauth2.client.provider.google.authorization-uri=https://accounts.google.com/o/oauth2/auth?prompt=select_account From 85046970d8b94cb5f2f7ec2c5ecbfb422dce3cc6 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 9 Jun 2025 18:22:35 +0530 Subject: [PATCH 667/860] injiweb-1572 for automation removing need for having picture and name if user already exist Signed-off-by: Gurpreet41082 --- .../mimoto/service/UserMetadataService.java | 16 ++++++++++++++++ .../mimoto/service/impl/GoogleTokenService.java | 10 ++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/main/java/io/mosip/mimoto/service/UserMetadataService.java b/src/main/java/io/mosip/mimoto/service/UserMetadataService.java index 7102377b0..47338ee78 100644 --- a/src/main/java/io/mosip/mimoto/service/UserMetadataService.java +++ b/src/main/java/io/mosip/mimoto/service/UserMetadataService.java @@ -24,6 +24,22 @@ public UserMetadataService(UserMetadataRepository repository, EncryptionService this.encryptionService = encryptionService; } + public UserMetadata getUserMetadata(String providerSubjectId, String identityProvider) + throws DecryptionException { + return repository.findByProviderSubjectIdAndIdentityProvider(providerSubjectId, identityProvider) + .map(user -> { + try { + user.setDisplayName(encryptionService.decrypt(user.getDisplayName())); + user.setProfilePictureUrl(encryptionService.decrypt(user.getProfilePictureUrl())); + user.setEmail(encryptionService.decrypt(user.getEmail())); + } catch (DecryptionException e) { + throw new RuntimeException("Failed to decrypt user metadata", e); + } + return user; + }) + .orElse(null); + } + public String updateOrInsertUserMetadata(String providerSubjectId, String identityProvider, String displayName, String profilePictureUrl, String email) throws EncryptionException, DecryptionException { diff --git a/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java b/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java index 175b0171f..4af857cc9 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java +++ b/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java @@ -1,6 +1,7 @@ package io.mosip.mimoto.service.impl; import io.mosip.mimoto.constant.SessionKeys; +import io.mosip.mimoto.dbentity.UserMetadata; import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; import io.mosip.mimoto.exception.DecryptionException; import io.mosip.mimoto.exception.InvalidRequestException; @@ -83,6 +84,15 @@ public void processToken(String idToken, String provider, HttpServletRequest req String userId = null; try { + UserMetadata userMetadata = userMetadataService.getUserMetadata(sub, provider); + if (userMetadata != null) { + if (name == null || name.isBlank()) { + name = userMetadata.getDisplayName(); + } + if (picture == null || picture.isBlank()) { + picture = userMetadata.getProfilePictureUrl(); + } + } userId = userMetadataService.updateOrInsertUserMetadata(sub, provider, name, picture, email); } catch (DecryptionException e) { log.error("Failed to store the user info in the database", e); From 43ff38b855b26d00082e95e9b48853874c6fa681 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Tue, 10 Jun 2025 15:33:35 +0530 Subject: [PATCH 668/860] injiweb-1572 fixing the issue when update flow come Signed-off-by: Gurpreet41082 --- .../mimoto/service/UserMetadataService.java | 40 ++++++++++--------- .../service/UserMetadataServiceTest.java | 8 ++-- 2 files changed, 27 insertions(+), 21 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/service/UserMetadataService.java b/src/main/java/io/mosip/mimoto/service/UserMetadataService.java index 47338ee78..dc1180ad8 100644 --- a/src/main/java/io/mosip/mimoto/service/UserMetadataService.java +++ b/src/main/java/io/mosip/mimoto/service/UserMetadataService.java @@ -29,13 +29,19 @@ public UserMetadata getUserMetadata(String providerSubjectId, String identityPro return repository.findByProviderSubjectIdAndIdentityProvider(providerSubjectId, identityProvider) .map(user -> { try { - user.setDisplayName(encryptionService.decrypt(user.getDisplayName())); - user.setProfilePictureUrl(encryptionService.decrypt(user.getProfilePictureUrl())); - user.setEmail(encryptionService.decrypt(user.getEmail())); + UserMetadata decryptedUser = new UserMetadata(); + decryptedUser.setId(user.getId()); // Copy all needed fields + decryptedUser.setProviderSubjectId(user.getProviderSubjectId()); + decryptedUser.setIdentityProvider(user.getIdentityProvider()); + + decryptedUser.setDisplayName(encryptionService.decrypt(user.getDisplayName())); + decryptedUser.setProfilePictureUrl(encryptionService.decrypt(user.getProfilePictureUrl())); + decryptedUser.setEmail(encryptionService.decrypt(user.getEmail())); + + return decryptedUser; } catch (DecryptionException e) { throw new RuntimeException("Failed to decrypt user metadata", e); } - return user; }) .orElse(null); } @@ -44,19 +50,20 @@ public String updateOrInsertUserMetadata(String providerSubjectId, String identi String displayName, String profilePictureUrl, String email) throws EncryptionException, DecryptionException { Timestamp now = new Timestamp(System.currentTimeMillis()); - Optional existingUser = repository.findByProviderSubjectIdAndIdentityProvider(providerSubjectId, identityProvider); - if (existingUser.isPresent()) { - return updateUser(existingUser.get(), displayName, profilePictureUrl, email, now); + UserMetadata existingUser = getUserMetadata(providerSubjectId, identityProvider); + if (null != existingUser) { + return updateUser(existingUser, displayName, profilePictureUrl, email, now); } else { return createUser(providerSubjectId, identityProvider, displayName, profilePictureUrl, email, now); } } private String updateUser(UserMetadata user, String displayName, String profilePictureUrl, String email, Timestamp now) - throws EncryptionException, DecryptionException { - boolean updated = updateIfChanged(user::getDisplayName, user::setDisplayName, displayName) - || updateIfChanged(user::getProfilePictureUrl, user::setProfilePictureUrl, profilePictureUrl) - || updateIfChanged(user::getEmail, user::setEmail, email); + throws EncryptionException { + boolean updated = updateIfChanged(user::getDisplayName, user::setDisplayName, displayName); + updated = updateIfChanged(user::getProfilePictureUrl, user::setProfilePictureUrl, profilePictureUrl) || updated; + updated = updateIfChanged(user::getEmail, user::setEmail, email) || updated; + if (updated) { user.setUpdatedAt(now); repository.save(user); @@ -65,13 +72,10 @@ private String updateUser(UserMetadata user, String displayName, String profileP } private boolean updateIfChanged(Supplier getter, Consumer setter, String newValue) - throws EncryptionException, DecryptionException { - String current = encryptionService.decrypt(getter.get()); - if (!current.equals(newValue)) { - setter.accept(encryptionService.encrypt(newValue)); - return true; - } - return false; + throws EncryptionException { + String current = getter.get(); + setter.accept(encryptionService.encrypt(newValue)); + return !current.equals(newValue); } private String createUser(String providerSubjectId, String identityProvider, String displayName, diff --git a/src/test/java/io/mosip/mimoto/service/UserMetadataServiceTest.java b/src/test/java/io/mosip/mimoto/service/UserMetadataServiceTest.java index 45465652e..c7fce67dd 100644 --- a/src/test/java/io/mosip/mimoto/service/UserMetadataServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/UserMetadataServiceTest.java @@ -61,11 +61,14 @@ public void setUp() { public void shouldUpdateUserMetadataForSameProviderSubjectIdAndSameIdentityProviderButWithDifferentDisplayName() throws DecryptionException, EncryptionException { String updatedDisplayName = "Name 124"; String encryptedUpdatedDisplayName = "encryptedUpdatedDisplayName"; - Timestamp updatedTimestamp = new Timestamp(System.currentTimeMillis() + 1000); when(userMetadataRepository.findByProviderSubjectIdAndIdentityProvider(providerSubjectId, identityProvider)).thenReturn(Optional.of(userMetadata)); when(encryptionService.decrypt("encryptedDisplayName")).thenReturn(displayName); when(encryptionService.encrypt(updatedDisplayName)).thenReturn(encryptedUpdatedDisplayName); + when(encryptionService.decrypt("encryptedProfilePictureUrl")).thenReturn(profilePictureUrl); + when(encryptionService.encrypt(profilePictureUrl)).thenReturn("encryptedProfilePictureUrl"); + when(encryptionService.decrypt("encryptedEmail")).thenReturn(email); + when(encryptionService.encrypt(email)).thenReturn("encryptedEmail"); when(userMetadataRepository.save(any(UserMetadata.class))).thenReturn(userMetadata); String storedUserId = userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, updatedDisplayName, profilePictureUrl, email); @@ -79,7 +82,6 @@ public void shouldUpdateUserMetadataForSameProviderSubjectIdAndSameIdentityProvi assertEquals("encryptedEmail", savedUserMetadata.getEmail()); verify(encryptionService).decrypt("encryptedDisplayName"); verify(encryptionService).encrypt(updatedDisplayName); - verifyNoMoreInteractions(encryptionService); } @Test @@ -164,6 +166,6 @@ public void shouldNotCreateNewUserMetadataForSameProviderSubjectIdAndSameIdentit verify(encryptionService).decrypt(userMetadata.getDisplayName()); verify(encryptionService).decrypt(userMetadata.getProfilePictureUrl()); verify(encryptionService).decrypt(userMetadata.getEmail()); - verify(encryptionService, times(0)).encrypt(anyString()); + verify(encryptionService, times(3)).encrypt(anyString()); } } \ No newline at end of file From 709b47a9eec3ca463fc42fb3022fcdf9a1c1bd25 Mon Sep 17 00:00:00 2001 From: Sradha Mohanty <134414554+SradhaMohanty5899@users.noreply.github.com> Date: Wed, 11 Jun 2025 20:42:22 +0530 Subject: [PATCH 669/860] MOSIP-28246 Removed commented unused variables (#743) Signed-off-by: SradhaMohanty5899 --- .../apirig/mimoto/testscripts/SimplePostForAutoGenId.java | 1 - 1 file changed, 1 deletion(-) diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java index edaaf97fa..91dd0c864 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java @@ -108,7 +108,6 @@ public void test(TestCaseDTO testCaseDTO) inputJson = getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()); inputJson = MimotoUtil.inputstringKeyWordHandeler(inputJson, testCaseName); -// String outputJson = getJsonFromTemplate(testCaseDTO.getOutput(), testCaseDTO.getOutputTemplate()); if (testCaseDTO.getTemplateFields() != null && templateFields.length > 0) { ArrayList inputtestCases = AdminTestUtil.getInputTestCase(testCaseDTO); From a8aac27819c96dc2d213d729fdc438e33dc2a945 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Fri, 13 Jun 2025 14:00:41 +0530 Subject: [PATCH 670/860] injiweb-1552 added config for session timeout Signed-off-by: Gurpreet41082 --- docs/UserDataEncryptionWithPinBasedKey.md | 24 ++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/docs/UserDataEncryptionWithPinBasedKey.md b/docs/UserDataEncryptionWithPinBasedKey.md index f3bc2ccaa..d38c99df4 100644 --- a/docs/UserDataEncryptionWithPinBasedKey.md +++ b/docs/UserDataEncryptionWithPinBasedKey.md @@ -57,8 +57,17 @@ Once the AES wallet key is in session: - It is Base64-decoded and used to encrypt or decrypt sensitive data like credentials or keys. - The user does not need to re-enter the PIN during the session. - Encryption and decryption continue using AES/GCM/NoPadding for both confidentiality and integrity. +### 4. 🔐 **Session Timeout Configuration** +The property +```properties +server.servlet.session.timeout=30m +``` +in ```application-default.properties``` sets the HTTP session timeout to 30 minutes. +This means that if a user is inactive for 30 minutes, their session will automatically expire, +requiring them to log in again. Adjust this value to control how long user sessions remain active after inactivity. + +### 5. 🔚 **Session End / Logout** -### 4. 🔚 **Session End / Logout** - The Base64-encoded AES key is removed from the session. - On the next login, in unlock wallet API, the user must provide their PIN again to decrypt the key. @@ -91,10 +100,15 @@ F --> G[DB] O --> P[Remove Base64 AES Key
from Session] P --> H + %% Session Timeout Node + Q[Session Timeout] --> O + %% Style classes - classDef styleA fill:#D0F0C0,stroke:#3C8039,stroke-width:2px; - classDef styleP fill:#F0D0C0,stroke:#803C39,stroke-width:2px; - class A,H styleA - class O styleP + classDef stylePrimary fill:#CCE5FF,stroke:#336699,stroke-width:2px; + classDef styleSuccess fill:#D0F0C0,stroke:#3C8039,stroke-width:2px; + classDef styleWarning fill:#FFD9B3,stroke:#CC6600,stroke-width:2px; + + class A,B,C,D,E,F,G,H,I,J,K,L,M,N stylePrimary + class O,P,Q styleWarning ``` This flow ensures that sensitive user data is securely encrypted and accessible only to the user who knows the PIN. \ No newline at end of file From c8a8ac32a54bcf5a9d08f5b3bd0645172650d1b0 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Fri, 13 Jun 2025 14:20:07 +0530 Subject: [PATCH 671/860] injiweb-1552 changing colours for dark mode Signed-off-by: Gurpreet41082 --- docs/UserDataEncryptionWithPinBasedKey.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/UserDataEncryptionWithPinBasedKey.md b/docs/UserDataEncryptionWithPinBasedKey.md index d38c99df4..abcfffc0c 100644 --- a/docs/UserDataEncryptionWithPinBasedKey.md +++ b/docs/UserDataEncryptionWithPinBasedKey.md @@ -104,9 +104,9 @@ F --> G[DB] Q[Session Timeout] --> O %% Style classes - classDef stylePrimary fill:#CCE5FF,stroke:#336699,stroke-width:2px; - classDef styleSuccess fill:#D0F0C0,stroke:#3C8039,stroke-width:2px; - classDef styleWarning fill:#FFD9B3,stroke:#CC6600,stroke-width:2px; + classDef stylePrimary fill:#ADD8E6,stroke:#000080,stroke-width:2px; + classDef styleSuccess fill:#90EE90,stroke:#006400,stroke-width:2px; + classDef styleWarning fill:#FFD700,stroke:#B8860B,stroke-width:2px; class A,B,C,D,E,F,G,H,I,J,K,L,M,N stylePrimary class O,P,Q styleWarning From c93b2d06477b90bc8d715f331d838cf8fce9dad1 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Fri, 13 Jun 2025 14:23:23 +0530 Subject: [PATCH 672/860] injiweb-1552 changing text colours for dark mode Signed-off-by: Gurpreet41082 --- docs/UserDataEncryptionWithPinBasedKey.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/UserDataEncryptionWithPinBasedKey.md b/docs/UserDataEncryptionWithPinBasedKey.md index abcfffc0c..28fa34c92 100644 --- a/docs/UserDataEncryptionWithPinBasedKey.md +++ b/docs/UserDataEncryptionWithPinBasedKey.md @@ -104,9 +104,9 @@ F --> G[DB] Q[Session Timeout] --> O %% Style classes - classDef stylePrimary fill:#ADD8E6,stroke:#000080,stroke-width:2px; - classDef styleSuccess fill:#90EE90,stroke:#006400,stroke-width:2px; - classDef styleWarning fill:#FFD700,stroke:#B8860B,stroke-width:2px; + classDef stylePrimary fill:#ADD8E6,stroke:#000080,stroke-width:2px,color:#000000; + classDef styleSuccess fill:#90EE90,stroke:#006400,stroke-width:2px,color:#000000; + classDef styleWarning fill:#FFD700,stroke:#B8860B,stroke-width:2px,color:#000000; class A,B,C,D,E,F,G,H,I,J,K,L,M,N stylePrimary class O,P,Q styleWarning From 78449a0647ec1506e0c4c64db40bbd733d1ef262 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Fri, 13 Jun 2025 14:56:02 +0530 Subject: [PATCH 673/860] injiweb-1550 updated readme to have clear info Signed-off-by: Gurpreet41082 --- docker-compose/README.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/docker-compose/README.md b/docker-compose/README.md index 306985a22..d49a82d26 100644 --- a/docker-compose/README.md +++ b/docker-compose/README.md @@ -17,13 +17,11 @@ This is the docker-compose setup to run mimoto which act as BFF for Inji mobile 3. Start esignet services and update esignet host references in mimoto-default.properties and mimoto-issuers-config.json -4. Start the data share services and update data share host references in mimoto-default.properties. data share service helm is available in the [Inji Web Helm](https://github.com/mosip/inji-web/tree/release-0.10.x/helm/inji-web) - -5. Create certs folder in the same directory and create OIDC client. Add key in oidckeystore.p12 and copy this file under certs folder. +4. Create certs folder in the same directory and create OIDC client. Add key in oidckeystore.p12 and copy this file under certs folder. Refer [here](https://docs.mosip.io/inji/inji-mobile-wallet/customization-overview/credential_providers) to create client * Update client_id and client_alias as per onboarding in mimoto-issuers-config.json file. - -6. Refer to the [How to create Google Client Credentials](#how-to-create-google-client-credentials) section to create +* Update oidc_p12_password in docker-compose.yml to match the password set for the oidckeystore.p12 file. +5. Refer to the [How to create Google Client Credentials](#how-to-create-google-client-credentials) section to create Google client credentials. - Replace the placeholders in the `docker-compose.yml` file with the generated credentials: From eaa8646534fa0bbcc8c70b2512827b2643a9ef7b Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Fri, 13 Jun 2025 15:00:30 +0530 Subject: [PATCH 674/860] injiweb-1550 updated serial number Signed-off-by: Gurpreet41082 --- docker-compose/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose/README.md b/docker-compose/README.md index d49a82d26..482e0689b 100644 --- a/docker-compose/README.md +++ b/docker-compose/README.md @@ -30,11 +30,11 @@ Refer [here](https://docs.mosip.io/inji/inji-mobile-wallet/customization-overvie - GOOGLE_OAUTH_CLIENT_ID= - GOOGLE_OAUTH_CLIENT_SECRET= -7. Start the docker-compose file +6. Start the docker-compose file > docker-compose up -8. Access Apis as +7. Access Apis as * http://localhost:8099/v1/mimoto/allProperties * http://localhost:8099/v1/mimoto/issuers * http://localhost:8099/v1/mimoto/issuers/StayProtected From ed7f1cda9099053572393638e1b7dfd634cf44e7 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Fri, 13 Jun 2025 21:01:11 +0530 Subject: [PATCH 675/860] injiweb-1519 added the sorting of VC based on createdAT Signed-off-by: Gurpreet41082 --- .../mimoto/repository/WalletCredentialsRepository.java | 4 +++- .../mimoto/service/impl/WalletCredentialServiceImpl.java | 2 +- .../mosip/mimoto/service/WalletCredentialServiceTest.java | 8 ++++---- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/repository/WalletCredentialsRepository.java b/src/main/java/io/mosip/mimoto/repository/WalletCredentialsRepository.java index 1e934428b..dff29b532 100644 --- a/src/main/java/io/mosip/mimoto/repository/WalletCredentialsRepository.java +++ b/src/main/java/io/mosip/mimoto/repository/WalletCredentialsRepository.java @@ -1,6 +1,7 @@ package io.mosip.mimoto.repository; import io.mosip.mimoto.dbentity.VerifiableCredential; +import org.springframework.data.domain.Sort; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; @@ -10,9 +11,10 @@ @Repository public interface WalletCredentialsRepository extends JpaRepository { - List findByWalletId(String walletId); Optional findByIdAndWalletId(String id, String walletId); @Query(value = "SELECT EXISTS (SELECT 1 FROM verifiable_credentials WHERE credential_metadata->>'issuerId' = :issuerId AND credential_metadata->>'credentialType' = :credentialType AND wallet_id = :walletId)", nativeQuery = true) boolean existsByIssuerIdAndCredentialTypeAndWalletId(@Param("issuerId") String issuerId, @Param("credentialType") String credentialType, @Param("walletId") String walletId); + + List findByWalletIdOrderByCreatedAtDesc(String walletId); } diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java index 5cc45f26c..ae9ed3831 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java @@ -78,7 +78,7 @@ public VerifiableCredentialResponseDTO fetchAndStoreCredential(String issuerId, public List fetchAllCredentialsForWallet(String walletId, String base64Key, String locale) { log.info("Fetching all credentials for wallet: {}", walletId); - List credentials = repository.findByWalletId(walletId); + List credentials = repository.findByWalletIdOrderByCreatedAtDesc(walletId); return credentials.stream().map(credential -> { String issuerId = credential.getCredentialMetadata().getIssuerId(); diff --git a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java index 791846220..e64f3ff82 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java @@ -158,7 +158,7 @@ public void shouldFetchAllCredentialsForWalletSuccessfully() throws Exception { VerifiableCredentialResponseDTO responseDTO = new VerifiableCredentialResponseDTO(); responseDTO.setCredentialId(credentialId); - when(walletCredentialsRepository.findByWalletId(walletId)).thenReturn(List.of(verifiableCredential)); + when(walletCredentialsRepository.findByWalletIdOrderByCreatedAtDesc(walletId)).thenReturn(List.of(verifiableCredential)); when(issuersService.getIssuerConfig(issuerId, credentialType)).thenReturn(issuerConfig); try (MockedStatic factoryMock = mockStatic(WalletCredentialResponseDTOFactory.class)) { @@ -169,7 +169,7 @@ public void shouldFetchAllCredentialsForWalletSuccessfully() throws Exception { assertEquals(1, actualCredentials.size()); assertEquals(responseDTO, actualCredentials.getFirst()); - verify(walletCredentialsRepository).findByWalletId(walletId); + verify(walletCredentialsRepository).findByWalletIdOrderByCreatedAtDesc(walletId); verify(issuersService).getIssuerConfig(issuerId, credentialType); factoryMock.verify(() -> WalletCredentialResponseDTOFactory.buildCredentialResponseDTO(issuerConfig, locale, credentialId)); } @@ -180,7 +180,7 @@ public void shouldHandleIssuerConfigFetchFailure() throws Exception { VerifiableCredentialResponseDTO responseDTO = new VerifiableCredentialResponseDTO(); responseDTO.setCredentialId(credentialId); - when(walletCredentialsRepository.findByWalletId(walletId)).thenReturn(List.of(verifiableCredential)); + when(walletCredentialsRepository.findByWalletIdOrderByCreatedAtDesc(walletId)).thenReturn(List.of(verifiableCredential)); when(issuersService.getIssuerConfig(issuerId, credentialType)).thenThrow(new ApiNotAccessibleException("API error")); try (MockedStatic factoryMock = mockStatic(WalletCredentialResponseDTOFactory.class)) { @@ -191,7 +191,7 @@ public void shouldHandleIssuerConfigFetchFailure() throws Exception { assertEquals(1, actualCredentials.size()); assertEquals(responseDTO, actualCredentials.getFirst()); - verify(walletCredentialsRepository).findByWalletId(walletId); + verify(walletCredentialsRepository).findByWalletIdOrderByCreatedAtDesc(walletId); verify(issuersService).getIssuerConfig(issuerId, credentialType); factoryMock.verify(() -> WalletCredentialResponseDTOFactory.buildCredentialResponseDTO(null, locale, credentialId)); } From c62b78fc92ad74df7e6c87a09d4b6fc3a42d529d Mon Sep 17 00:00:00 2001 From: Mohanachandran S Date: Tue, 17 Jun 2025 10:51:02 +0530 Subject: [PATCH 676/860] MOSIP-41751 - Fix the mimoto failure testcases which is due to esignet 1.5.1 compatibility in release-0.17.x and updated the esignet host actuator property key Signed-off-by: Mohanachandran S --- api-test/pom.xml | 6 +++--- .../apirig/mimoto/utils/MimotoConfigManager.java | 4 ++-- .../testrig/apirig/mimoto/utils/MimotoConstants.java | 2 +- api-test/src/main/resources/config/mimoto.properties | 7 ++++--- .../resources/mimoto/WalletBinding/WalletBinding.yml | 12 ++++++++---- 5 files changed, 18 insertions(+), 13 deletions(-) diff --git a/api-test/pom.xml b/api-test/pom.xml index e20dbf9c3..c431448b6 100644 --- a/api-test/pom.xml +++ b/api-test/pom.xml @@ -8,7 +8,7 @@ apitest-mimoto Parent project of apitest-mimoto https://github.com/mosip/mimoto - 0.15.0-SNAPSHOT + 0.17.1 @@ -49,7 +49,7 @@ 2.2.1 3.0.1 - apitest-mimoto-0.15.0-SNAPSHOT-jar-with-dependencies + apitest-mimoto-0.17.1-jar-with-dependencies @@ -265,4 +265,4 @@ - \ No newline at end of file + diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java index 93cc35232..0ed8f074e 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java @@ -40,9 +40,9 @@ public static String getSunbirdBaseURL() { public static String getEsignetBaseUrl() { String esignetBaseUrl = null; if (getproperty("runPlugin").equals("mosipid")) { - esignetBaseUrl = "https://" + MimotoUtil.getValueFromMimotoActuator("overrides", "mosip.esignet.mosipid.host"); + esignetBaseUrl = "https://" + MimotoUtil.getValueFromMimotoActuator("overrides", getproperty("mosipid-identity-esignet-host")); } else if (getproperty("runPlugin").equals("mockid")) { - esignetBaseUrl = "https://" + MimotoUtil.getValueFromMimotoActuator("overrides", "mosip.esignet.mock.host"); + esignetBaseUrl = "https://" + MimotoUtil.getValueFromMimotoActuator("overrides", getproperty("mock-identity-esignet-host")); } return esignetBaseUrl; diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConstants.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConstants.java index 645cde030..8e004b25b 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConstants.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConstants.java @@ -6,4 +6,4 @@ public class MimotoConstants { public static final String SUNBIRD_INSURANCE_AUTH_FACTOR_TYPE_STRING = "sunbirdInsuranceAuthFactorType"; -} +} \ No newline at end of file diff --git a/api-test/src/main/resources/config/mimoto.properties b/api-test/src/main/resources/config/mimoto.properties index b5900de8a..6feb47661 100644 --- a/api-test/src/main/resources/config/mimoto.properties +++ b/api-test/src/main/resources/config/mimoto.properties @@ -2,9 +2,10 @@ actuatorMimotoEndpoint=/v1/mimoto/actuator/env mimoto-oidc-mosipid-partner-clientid=mimoto.oidc.mosipid.partner.clientid mimoto-oidc-sunbird-partner-clientid=mimoto.oidc.insurance.partner.clientid -mosip-esignet-insurance-host=mosip.esignet.insurance.host +mosip-esignet-insurance-host=sunbirdrc.insurance.esignet.host +mosipid-identity-esignet-host=mosipid.identity.esignet.host +mock-identity-esignet-host=mock.identity.esignet.host runPlugin=mosipid - -# Uncomment the line below if the eSignet version is older than 1.5.1 for compatibility +# Uncomment the line below for local run and add this config maps in rancher if the eSignet version is older than 1.5.1 for compatibility #sunbirdInsuranceAuthFactorType=KBA \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/WalletBinding/WalletBinding.yml b/api-test/src/main/resources/mimoto/WalletBinding/WalletBinding.yml index db69714f2..99a95197c 100644 --- a/api-test/src/main/resources/mimoto/WalletBinding/WalletBinding.yml +++ b/api-test/src/main/resources/mimoto/WalletBinding/WalletBinding.yml @@ -277,6 +277,7 @@ WalletBinding: validityCheckRequired: true restMethod: post checkErrorsOnlyInResponse: true + allowedErrorCodes: IDA-MLC-009,binding_auth_failed inputTemplate: mimoto/WalletBinding/WalletBinding outputTemplate: mimoto/error input: '{ @@ -299,7 +300,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "binding_auth_failed" + "errorCode": "IDA-MLC-009" } ], "sendOtpResp": { @@ -357,6 +358,7 @@ WalletBinding: validityCheckRequired: true restMethod: post checkErrorsOnlyInResponse: true + allowedErrorCodes: IDA-MLC-009,binding_auth_failed inputTemplate: mimoto/WalletBinding/WalletBinding outputTemplate: mimoto/error input: '{ @@ -379,7 +381,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "binding_auth_failed" + "errorCode": "IDA-MLC-009" } ], "sendOtpResp": { @@ -1812,6 +1814,7 @@ WalletBinding: validityCheckRequired: true restMethod: post checkErrorsOnlyInResponse: true + allowedErrorCodes: IDA-MLC-009,binding_auth_failed inputTemplate: mimoto/WalletBinding/WalletBinding outputTemplate: mimoto/error input: '{ @@ -1834,7 +1837,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "binding_auth_failed" + "errorCode": "IDA-MLC-009" } ], "sendOtpResp": { @@ -1892,6 +1895,7 @@ WalletBinding: validityCheckRequired: true restMethod: post checkErrorsOnlyInResponse: true + allowedErrorCodes: IDA-MLC-009,binding_auth_failed inputTemplate: mimoto/WalletBinding/WalletBinding outputTemplate: mimoto/error input: '{ @@ -1914,7 +1918,7 @@ WalletBinding: output: '{ "errors": [ { - "errorCode": "binding_auth_failed" + "errorCode": "IDA-MLC-009" } ], "sendOtpResp": { From fe5b93728dc590e3b07737f521d525133eb2fb6d Mon Sep 17 00:00:00 2001 From: Mohanachandran S Date: Tue, 17 Jun 2025 10:54:27 +0530 Subject: [PATCH 677/860] Updated the POM version Signed-off-by: Mohanachandran S --- api-test/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api-test/pom.xml b/api-test/pom.xml index c431448b6..7d41a25d5 100644 --- a/api-test/pom.xml +++ b/api-test/pom.xml @@ -8,7 +8,7 @@ apitest-mimoto Parent project of apitest-mimoto https://github.com/mosip/mimoto - 0.17.1 + 0.18.0-SNAPSHOT @@ -49,7 +49,7 @@ 2.2.1 3.0.1 - apitest-mimoto-0.17.1-jar-with-dependencies + apitest-mimoto-0.18.0-SNAPSHOT-jar-with-dependencies From 613ef946ca06da75b0f4325eeadd19fffc5a94b4 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Tue, 17 Jun 2025 13:25:57 +0530 Subject: [PATCH 678/860] injiweb-1519 fixing mosip download credential Signed-off-by: Gurpreet41082 --- src/main/java/io/mosip/mimoto/util/CredentialUtilService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java b/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java index 4a2b861dd..0ab9f7cae 100644 --- a/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java +++ b/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java @@ -366,7 +366,7 @@ public WalletCredentialResponseDTO generateCredentialResponse(String decryptedCr // Find credentials supported response for the credential type CredentialsSupportedResponse credentialsSupportedResponse = issuerConfig.getCredentialsSupportedResponse(); - if (credentialsSupportedResponse == null || !credentialsSupportedResponse.getCredentialDefinition().getType().contains(credentialMetadata.getCredentialType())) { + if (credentialsSupportedResponse == null || !credentialsSupportedResponse.getCredentialDefinition().getType().containsAll(vcCredentialResponse.getCredential().getType())) { log.error("Credentials supported response not found for credentialType: {}", credentialMetadata.getCredentialType()); throw new CredentialProcessingException(CREDENTIAL_FETCH_EXCEPTION.getErrorCode(), "Invalid credential type configuration"); } From 3a69e6310933c2f78a666aef5c462585ea8dd942 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Tue, 17 Jun 2025 13:56:22 +0530 Subject: [PATCH 679/860] injiweb-1519 added wrong configuration id issue Signed-off-by: Gurpreet41082 --- .../java/io/mosip/mimoto/util/CredentialUtilService.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java b/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java index 0ab9f7cae..26dbedbc9 100644 --- a/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java +++ b/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java @@ -364,6 +364,11 @@ public WalletCredentialResponseDTO generateCredentialResponse(String decryptedCr // Fetch issuer configuration IssuerConfig issuerConfig = issuersService.getIssuerConfig(credentialMetadata.getIssuerId(), credentialMetadata.getCredentialType()); + if (null == issuerConfig) { + log.error("Credentials supported response not found in wellknown for credentialType: {}", credentialMetadata.getCredentialType()); + throw new CredentialProcessingException(CREDENTIAL_FETCH_EXCEPTION.getErrorCode(), "Invalid credential type configuration"); + } + // Find credentials supported response for the credential type CredentialsSupportedResponse credentialsSupportedResponse = issuerConfig.getCredentialsSupportedResponse(); if (credentialsSupportedResponse == null || !credentialsSupportedResponse.getCredentialDefinition().getType().containsAll(vcCredentialResponse.getCredential().getType())) { From 9dfc463cf47941284d6146962774204de35a1bfe Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Tue, 17 Jun 2025 14:26:58 +0530 Subject: [PATCH 680/860] Removed the job to push to maven Signed-off-by: Gurpreet41082 --- .github/workflows/push-trigger.yml | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/.github/workflows/push-trigger.yml b/.github/workflows/push-trigger.yml index 87fe430f0..a102ddfba 100644 --- a/.github/workflows/push-trigger.yml +++ b/.github/workflows/push-trigger.yml @@ -71,21 +71,6 @@ jobs: name: ${{ env.NEW_BUILD_ARTIFACT }} path: ${{ env.NEW_BUILD_ARTIFACT }}.zip - - publish_to_nexus: - if: "${{ !contains(github.ref, 'master') && github.event_name != 'pull_request' }}" - needs: build-mimoto - uses: mosip/kattu/.github/workflows/maven-publish-to-nexus.yml@master-java21 - with: - SERVICE_LOCATION: ./ - secrets: - OSSRH_URL: ${{ secrets.OSSRH_SNAPSHOT_URL }} - OSSRH_USER: ${{ secrets.OSSRH_USER }} - OSSRH_SECRET: ${{ secrets.OSSRH_SECRET }} - OSSRH_TOKEN: ${{ secrets.OSSRH_TOKEN }} - GPG_SECRET: ${{ secrets.GPG_SECRET }} - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }} - sonar_analysis: needs: build-mimoto if: "${{ github.event_name != 'pull_request' }}" From 5215801d10b66b50757d80ca144ea1cba7cea3c4 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 23 Jun 2025 20:58:08 +0530 Subject: [PATCH 681/860] [INJIWEB-1600] update the version of vcverifier jar dependency to use the 1.3.0 snapshot version Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c7b664f66..783ffe6fa 100644 --- a/pom.xml +++ b/pom.xml @@ -144,7 +144,7 @@ io.mosip vcverifier-jar - 1.1.0 + 1.3.0-SNAPSHOT io.micrometer From 7fa6604df99ae85176a687345fc6148f61c57219 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 24 Jun 2025 19:15:35 +0530 Subject: [PATCH 682/860] [INJIWEB-1587] update the swagger and sporlight documentation to show the correct error messages for invalid and expired token scenarios when calling auth token login endpoint Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- docs/api-documentation-openapi.json | 18 +++++- .../controller/TokenAuthController.java | 55 ++++++++++++------- 2 files changed, 51 insertions(+), 22 deletions(-) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index 8655cbe57..49a383f0c 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -2719,8 +2719,10 @@ }, "examples": { "User data not available in DB" : { - "errorCode": "unauthorized", - "errorMessage": "User not found. Please check your credentials or login again" + "value": { + "errorCode": "unauthorized", + "errorMessage": "User not found. Please check your credentials or login again" + } } } } @@ -4025,6 +4027,18 @@ "errorCode": "INVALID_REQUEST", "errorMessage": "Bearer ID token required." } + }, + "InvalidToken": { + "value": { + "errorCode": "invalid_token", + "errorMessage": "An error occurred while attempting to decode the Jwt: Signed JWT rejected: Invalid signature" + } + }, + "ExpiredToken": { + "value": { + "errorCode": "invalid_token", + "errorMessage": "An error occurred while attempting to decode the Jwt: Jwt expired at 2025-06-10T12:00:00Z" + } } } } diff --git a/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java b/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java index c8463eaa1..2d8aa7a6b 100644 --- a/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java +++ b/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java @@ -45,12 +45,12 @@ public TokenAuthController(TokenServiceFactory tokenServiceFactory) { @Operation( summary = "Login and create session using OAuth2 ID token", description = """ - This API accepts an OAuth2 ID token in the Authorization header and establishes a session - by populating the Spring Security context. + This API accepts an OAuth2 ID token in the Authorization header and establishes a session + by populating the Spring Security context. - Fetch the ID token from a supported OAuth2 provider (such as Google or Microsoft) and provide - it in the request as a Bearer token. - """, + Fetch the ID token from a supported OAuth2 provider (such as Google or Microsoft) and provide + it in the request as a Bearer token. + """, operationId = "loginWithOAuth2IdToken", security = @SecurityRequirement(name = "bearerAuth"), parameters = { @@ -87,17 +87,30 @@ Fetch the ID token from a supported OAuth2 provider (such as Google or Microsoft schema = @Schema(implementation = io.mosip.mimoto.dto.ErrorDTO.class), examples = { @ExampleObject(name = "UnsupportedProvider", value = """ - { - "errorCode": "INVALID_REQUEST", - "errorMessage": "Unsupported provider: provider123" - } - """), + { + "errorCode": "INVALID_REQUEST", + "errorMessage": "Unsupported provider: provider123" + } + """), @ExampleObject(name = "MissingToken", value = """ - { - "errorCode": "INVALID_REQUEST", - "errorMessage": "Bearer ID token required." - } - """) + { + "errorCode": "INVALID_REQUEST", + "errorMessage": "Bearer ID token required." + } + """), + @ExampleObject(name = "InvalidToken", value = """ + { + "errorCode": "invalid_token", + "errorMessage": "An error occurred while attempting to decode the Jwt: Signed JWT rejected: Invalid signature" + } + """), + @ExampleObject(name = "ExpiredToken", value = """ + { + "errorCode": "invalid_token", + "errorMessage": "An error occurred while attempting to decode the Jwt: Jwt expired at 2025-06-10T12:00:00Z" + } + """ + ) } ) ), @@ -108,13 +121,15 @@ Fetch the ID token from a supported OAuth2 provider (such as Google or Microsoft mediaType = MediaType.APPLICATION_JSON_VALUE, schema = @Schema(implementation = io.mosip.mimoto.dto.ErrorDTO.class), examples = @ExampleObject(name = "InvalidToken", value = """ - { - "errorCode": "invalid_token", - "errorMessage": "Invalid token format" - } - """) + { + "errorCode": "invalid_token", + "errorMessage": "Invalid token format" + } + """ + ) ) ) + } ) @PostMapping("/auth/{provider}/token-login") From e5ea9bc6eb7d64d45b7fc18124d5945767a3148b Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Wed, 25 Jun 2025 10:38:50 +0530 Subject: [PATCH 683/860] [INJIWEB-1587] remove the redundant idToken expiration validation in validateToken method being used in auth token login endpoint as it is already being handled by jwtDecoder library and update the same in stoplight and swagger documentation Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- docs/api-documentation-openapi.json | 18 ------------------ .../mimoto/controller/TokenAuthController.java | 16 ---------------- .../service/impl/GoogleTokenService.java | 4 ---- 3 files changed, 38 deletions(-) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index 49a383f0c..3d5520f8e 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -3990,24 +3990,6 @@ } } }, - "401": { - "description": "Unauthorized - Invalid or expired token.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - }, - "examples": { - "InvalidToken": { - "value": { - "errorCode": "invalid_token", - "errorMessage": "Invalid token format" - } - } - } - } - } - }, "400": { "description": "Bad Request - Missing/invalid header or unsupported provider.", "content": { diff --git a/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java b/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java index 2d8aa7a6b..19add0e29 100644 --- a/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java +++ b/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java @@ -114,22 +114,6 @@ Fetch the ID token from a supported OAuth2 provider (such as Google or Microsoft } ) ), - @ApiResponse( - responseCode = "401", - description = "Unauthorized - Invalid or expired token.", - content = @Content( - mediaType = MediaType.APPLICATION_JSON_VALUE, - schema = @Schema(implementation = io.mosip.mimoto.dto.ErrorDTO.class), - examples = @ExampleObject(name = "InvalidToken", value = """ - { - "errorCode": "invalid_token", - "errorMessage": "Invalid token format" - } - """ - ) - ) - ) - } ) @PostMapping("/auth/{provider}/token-login") diff --git a/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java b/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java index 4af857cc9..68a3025a5 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java +++ b/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java @@ -112,10 +112,6 @@ private Jwt validateToken(String idToken) throws OAuth2AuthenticationException { log.error("Invalid audience: {}", jwt.getAudience()); throw new OAuth2AuthenticationException("invalid_audience", INVALID_AUDIENCE_ERROR, HttpStatus.UNAUTHORIZED); } - if (jwt.getExpiresAt() == null || jwt.getExpiresAt().isBefore(Instant.now())) { - log.error("Token expired"); - throw new OAuth2AuthenticationException("token_expired", TOKEN_EXPIRED_ERROR, HttpStatus.UNAUTHORIZED); - } return jwt; } From eac0cb819fda4b5ecdbf1961c52ab9abf750911b Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Thu, 26 Jun 2025 17:15:13 +0530 Subject: [PATCH 684/860] injiweb-1605 fixed minor review comments Signed-off-by: Gurpreet41082 --- db_scripts/inji_mimoto/ddl/mimoto-user_metadata.sql | 2 +- deploy/README.md | 2 +- docker-compose/README.md | 2 +- docker-compose/docker-compose.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/db_scripts/inji_mimoto/ddl/mimoto-user_metadata.sql b/db_scripts/inji_mimoto/ddl/mimoto-user_metadata.sql index c652d0261..334d39ed4 100644 --- a/db_scripts/inji_mimoto/ddl/mimoto-user_metadata.sql +++ b/db_scripts/inji_mimoto/ddl/mimoto-user_metadata.sql @@ -25,7 +25,7 @@ COMMENT ON TABLE user_metadata IS 'User Metadata: Contains details about the use COMMENT ON COLUMN user_metadata.id IS 'Primary Key: Unique identifier for the user metadata'; COMMENT ON COLUMN user_metadata.provider_subject_id IS 'Provider Subject ID: Unique identifier for the subject assigned by the identity provider'; COMMENT ON COLUMN user_metadata.identity_provider IS 'Identity Provider: The identity provider associated with the user'; -COMMENT ON COLUMN user_metadata.display_name IS 'Display Name: The name shown to other users'; +COMMENT ON COLUMN user_metadata.display_name IS 'Display Name: Name of the user'; COMMENT ON COLUMN user_metadata.profile_picture_url IS 'Profile Picture URL: The URL link to the user''s profile picture'; COMMENT ON COLUMN user_metadata.phone_number IS 'Phone Number: User''s phone number, if available'; COMMENT ON COLUMN user_metadata.email IS 'Email: User''s email address'; diff --git a/deploy/README.md b/deploy/README.md index e83e3fd38..5678bb215 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -29,4 +29,4 @@ cd mimoto ## For Onboarding new Issuer for VCI: -- create a folder "certs" in the root and a file "oidckeystore.p12" inside certs and store the keys as different aliases for every issuers. for more details refer [here](https://docs.mosip.io/inji/inji-mobile-wallet/customization-overview/credential_providers) +- create a folder "certs" in the root and a file "oidckeystore.p12" inside certs and store the keys as different aliases for every issuers. for more details refer [here](https://docs.inji.io/inji-wallet/inji-mobile/technical-overview/customization-overview/credential_providers) diff --git a/docker-compose/README.md b/docker-compose/README.md index 482e0689b..524564c4e 100644 --- a/docker-compose/README.md +++ b/docker-compose/README.md @@ -18,7 +18,7 @@ This is the docker-compose setup to run mimoto which act as BFF for Inji mobile 3. Start esignet services and update esignet host references in mimoto-default.properties and mimoto-issuers-config.json 4. Create certs folder in the same directory and create OIDC client. Add key in oidckeystore.p12 and copy this file under certs folder. -Refer [here](https://docs.mosip.io/inji/inji-mobile-wallet/customization-overview/credential_providers) to create client +Refer [here](https://docs.inji.io/inji-wallet/inji-mobile/technical-overview/customization-overview/credential_providers) to create client * Update client_id and client_alias as per onboarding in mimoto-issuers-config.json file. * Update oidc_p12_password in docker-compose.yml to match the password set for the oidckeystore.p12 file. 5. Refer to the [How to create Google Client Credentials](#how-to-create-google-client-credentials) section to create diff --git a/docker-compose/docker-compose.yml b/docker-compose/docker-compose.yml index 03e9ff792..970df012e 100644 --- a/docker-compose/docker-compose.yml +++ b/docker-compose/docker-compose.yml @@ -67,7 +67,7 @@ services: - SPRING_CONFIG_NAME=mimoto - SPRING_CONFIG_LOCATION=/home/mosip/ - oidc_p12_password=dummypassword - - SPRING_DATASOURCE_URL=jdbc:postgresql://postgres:5432/inji_mimoto # Add Postgres + - SPRING_DATASOURCE_URL=jdbc:postgresql://postgres:5432/inji_mimoto - SPRING_REDIS_HOST=redis - SPRING_REDIS_PORT=6379 - GOOGLE_OAUTH_CLIENT_ID=clientId From e9622c34eab66cf52c479f1f0c848a4d94930f19 Mon Sep 17 00:00:00 2001 From: Abhi Date: Thu, 26 Jun 2025 17:49:18 +0530 Subject: [PATCH 685/860] [MOSIP-41906] Updated bitnami image for init container Signed-off-by: Abhi --- helm/mimoto/values.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/helm/mimoto/values.yaml b/helm/mimoto/values.yaml index 56e5f7501..2bd0ccdab 100644 --- a/helm/mimoto/values.yaml +++ b/helm/mimoto/values.yaml @@ -377,8 +377,8 @@ volumePermissions: enabled: true image: registry: docker.io - repository: bitnami/bitnami-shell - tag: "10" + repository: bitnami/od-shell + tag: "12-debian-12-r47" pullPolicy: Always ## Optionally specify an array of imagePullSecrets. ## Secrets must be manually created in the namespace. From 7307f8193f7993a59a49f2451b86230a863a789a Mon Sep 17 00:00:00 2001 From: Abhi Date: Thu, 26 Jun 2025 17:54:30 +0530 Subject: [PATCH 686/860] [MOSIP-41906] Updated bitnami image for init container Signed-off-by: Abhi --- helm/mimoto/values.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helm/mimoto/values.yaml b/helm/mimoto/values.yaml index 2bd0ccdab..757dbff3d 100644 --- a/helm/mimoto/values.yaml +++ b/helm/mimoto/values.yaml @@ -377,7 +377,7 @@ volumePermissions: enabled: true image: registry: docker.io - repository: bitnami/od-shell + repository: bitnami/os-shell tag: "12-debian-12-r47" pullPolicy: Always ## Optionally specify an array of imagePullSecrets. From b52fcf4aa36dfe6d476fb6d9de477a90c78e34a0 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 30 Jun 2025 12:14:47 +0530 Subject: [PATCH 687/860] injiweb-1605 moved getTokenResponse in the IDPService Signed-off-by: Gurpreet41082 --- pom.xml | 9 --- .../controller/CredentialsController.java | 6 +- .../mimoto/controller/IdpController.java | 12 +-- .../WalletCredentialsController.java | 10 +-- .../io/mosip/mimoto/service/IdpService.java | 9 +++ .../service/SecurityContextService.java | 22 ------ .../service/impl/GoogleTokenService.java | 13 +--- .../mimoto/service/impl/IdpServiceImpl.java | 45 ++++++++++- .../mimoto/util/CredentialUtilService.java | 32 -------- .../controller/CredentialsControllerTest.java | 10 +-- .../mimoto/controller/IdpControllerTest.java | 11 +-- .../WalletCredentialsControllerTest.java | 18 ++--- .../service/CredentialUtilServiceTest.java | 62 ++------------- .../mosip/mimoto/service/IdpServiceTest.java | 78 ++++++++++++++++++- 14 files changed, 162 insertions(+), 175 deletions(-) delete mode 100644 src/main/java/io/mosip/mimoto/service/SecurityContextService.java diff --git a/pom.xml b/pom.xml index 783ffe6fa..8c1eebff9 100644 --- a/pom.xml +++ b/pom.xml @@ -506,15 +506,6 @@ - - ossrh - LegacyMavenSnapshot - https://oss.sonatype.org/content/repositories/snapshots - default - - true - - ossrh-central MavenCentralRepository diff --git a/src/main/java/io/mosip/mimoto/controller/CredentialsController.java b/src/main/java/io/mosip/mimoto/controller/CredentialsController.java index bb12e7bc0..cd1e62ae2 100644 --- a/src/main/java/io/mosip/mimoto/controller/CredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/CredentialsController.java @@ -7,7 +7,7 @@ import io.mosip.mimoto.exception.InvalidCredentialResourceException; import io.mosip.mimoto.exception.VCVerificationException; import io.mosip.mimoto.service.CredentialService; -import io.mosip.mimoto.util.CredentialUtilService; +import io.mosip.mimoto.service.IdpService; import io.mosip.mimoto.util.Utilities; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; @@ -43,7 +43,7 @@ public class CredentialsController { CredentialService credentialService; @Autowired - CredentialUtilService credentialUtilService; + IdpService idpService; @Operation(summary = SwaggerLiteralConstants.CREDENTIALS_DOWNLOAD_VC_SUMMARY, description = SwaggerLiteralConstants.CREDENTIALS_DOWNLOAD_VC_DESCRIPTION) @ApiResponses({ @@ -60,7 +60,7 @@ public ResponseEntity downloadCredentialAsPDF(@RequestParam Map> request(@Reques throws Exception { log.debug("Received wallet-binding request : " + JsonUtils.javaObjectToJsonString(requestDTO)); - ResponseWrapper responseWrapper = new ResponseWrapper(); + ResponseWrapper responseWrapper = new ResponseWrapper<>(); try { WalletBindingInnerRequestDto innerRequestDto = new WalletBindingInnerRequestDto(); innerRequestDto.setChallengeList(requestDTO.getRequest().getChallengeList()); @@ -128,7 +120,7 @@ public ResponseEntity getToken(@RequestParam Map params, ResponseWrapper responseWrapper = new ResponseWrapper<>(); try { params.put("issuer", issuer); - TokenResponseDTO response = credentialUtilService.getTokenResponse(params); + TokenResponseDTO response = idpService.getTokenResponse(params); return ResponseEntity.status(HttpStatus.OK).body(response); } catch (Exception ex) { log.error("Exception Occurred while Invoking the Token Endpoint : ", ex); diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index ce77d465d..57247f2df 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -9,7 +9,7 @@ import io.mosip.mimoto.dto.resident.WalletCredentialResponseDTO; import io.mosip.mimoto.exception.*; import io.mosip.mimoto.service.WalletCredentialService; -import io.mosip.mimoto.util.CredentialUtilService; +import io.mosip.mimoto.service.IdpService; import io.mosip.mimoto.util.Utilities; import io.mosip.mimoto.util.WalletUtil; import io.swagger.v3.oas.annotations.Operation; @@ -54,13 +54,13 @@ public class WalletCredentialsController { private final WalletCredentialService walletCredentialService; - private final CredentialUtilService credentialUtilService; + private final IdpService idpService; @Autowired public WalletCredentialsController(WalletCredentialService walletCredentialService, - CredentialUtilService credentialUtilService) { + IdpService idpService) { this.walletCredentialService = walletCredentialService; - this.credentialUtilService = credentialUtilService; + this.idpService = idpService; } /** @@ -115,7 +115,7 @@ public ResponseEntity downloadCredential( log.info("Initiating token call for issuer: {}", issuerId); TokenResponseDTO tokenResponse; try { - tokenResponse = credentialUtilService.getTokenResponse(verifiableCredentialRequest); + tokenResponse = idpService.getTokenResponse(verifiableCredentialRequest); } catch (ApiNotAccessibleException | IOException | AuthorizationServerWellknownResponseException | InvalidWellknownResponseException e) { log.error("Error fetching token response for issuer: {}", issuerId, e); diff --git a/src/main/java/io/mosip/mimoto/service/IdpService.java b/src/main/java/io/mosip/mimoto/service/IdpService.java index 1ba04dc25..152512850 100644 --- a/src/main/java/io/mosip/mimoto/service/IdpService.java +++ b/src/main/java/io/mosip/mimoto/service/IdpService.java @@ -1,7 +1,12 @@ package io.mosip.mimoto.service; import io.mosip.mimoto.dto.IssuerDTO; +import io.mosip.mimoto.dto.VerifiableCredentialRequestDTO; +import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.CredentialIssuerConfiguration; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.AuthorizationServerWellknownResponseException; +import io.mosip.mimoto.exception.InvalidWellknownResponseException; import io.mosip.mimoto.exception.IssuerOnboardingException; import org.springframework.http.HttpEntity; import org.springframework.util.MultiValueMap; @@ -13,4 +18,8 @@ public interface IdpService { HttpEntity> constructGetTokenRequest(Map params, IssuerDTO issuerDTO, String authorizationAudience) throws IOException, IssuerOnboardingException; String getTokenEndpoint(CredentialIssuerConfiguration credentialIssuerConfiguration); + + TokenResponseDTO getTokenResponse(Map params) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException; + + TokenResponseDTO getTokenResponse(VerifiableCredentialRequestDTO verifiableCredentialRequest) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException; } diff --git a/src/main/java/io/mosip/mimoto/service/SecurityContextService.java b/src/main/java/io/mosip/mimoto/service/SecurityContextService.java deleted file mode 100644 index 792a9457d..000000000 --- a/src/main/java/io/mosip/mimoto/service/SecurityContextService.java +++ /dev/null @@ -1,22 +0,0 @@ -package io.mosip.mimoto.service; - -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import org.springframework.security.core.context.SecurityContext; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken; -import org.springframework.security.web.context.HttpSessionSecurityContextRepository; -import org.springframework.security.web.context.SecurityContextRepository; -import org.springframework.stereotype.Service; - -@Service -public class SecurityContextService { - - private final SecurityContextRepository securityContextRepository = new HttpSessionSecurityContextRepository(); - - public void setupSecurityContext(OAuth2AuthenticationToken oauth2AuthenticationToken, HttpServletRequest request, HttpServletResponse response) { - SecurityContext context = SecurityContextHolder.getContext(); - context.setAuthentication(oauth2AuthenticationToken); - securityContextRepository.saveContext(context, request, response); - } -} diff --git a/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java b/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java index 68a3025a5..5efa0d6f4 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java +++ b/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java @@ -1,18 +1,14 @@ package io.mosip.mimoto.service.impl; -import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.dbentity.UserMetadata; import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; import io.mosip.mimoto.exception.DecryptionException; -import io.mosip.mimoto.exception.InvalidRequestException; import io.mosip.mimoto.exception.OAuth2AuthenticationException; -import io.mosip.mimoto.service.SecurityContextService; import io.mosip.mimoto.service.TokenDecoder; import io.mosip.mimoto.service.TokenService; import io.mosip.mimoto.service.UserMetadataService; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; -import jakarta.servlet.http.HttpSession; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; @@ -24,26 +20,19 @@ import org.springframework.security.oauth2.core.user.DefaultOAuth2User; import org.springframework.security.oauth2.core.user.OAuth2User; import org.springframework.security.oauth2.jwt.Jwt; -import org.springframework.security.oauth2.jwt.JwtDecoder; -import org.springframework.security.oauth2.jwt.JwtException; import org.springframework.stereotype.Service; -import java.time.Instant; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; -import static io.mosip.mimoto.exception.ErrorConstants.INVALID_REQUEST; -import static io.mosip.mimoto.exception.ErrorConstants.OAUTH2_AUTHENTICATION_EXCEPTION; - @Service("google") @Slf4j public class GoogleTokenService implements TokenService { private static final String MISSING_EMAIL_ERROR = "Missing email in ID token"; private static final String INVALID_ISSUER_ERROR = "Invalid issuer"; private static final String INVALID_AUDIENCE_ERROR = "Invalid audience"; - private static final String TOKEN_EXPIRED_ERROR = "Token expired"; private final TokenDecoder tokenDecoder; private final UserMetadataService userMetadataService; @@ -82,7 +71,7 @@ public void processToken(String idToken, String provider, HttpServletRequest req String picture = extractClaim(jwt, "picture"); String sub = extractClaim(jwt, "sub"); - String userId = null; + String userId; try { UserMetadata userMetadata = userMetadataService.getUserMetadata(sub, provider); if (userMetadata != null) { diff --git a/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java index dcddfd081..befd02455 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java @@ -1,9 +1,12 @@ package io.mosip.mimoto.service.impl; import io.mosip.mimoto.dto.IssuerDTO; +import io.mosip.mimoto.dto.VerifiableCredentialRequestDTO; +import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.CredentialIssuerConfiguration; -import io.mosip.mimoto.exception.IssuerOnboardingException; +import io.mosip.mimoto.exception.*; import io.mosip.mimoto.service.IdpService; +import io.mosip.mimoto.service.IssuersService; import io.mosip.mimoto.util.JoseUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -13,8 +16,10 @@ import org.springframework.stereotype.Service; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestTemplate; import java.io.IOException; +import java.util.HashMap; import java.util.Map; @Service @@ -35,6 +40,12 @@ public class IdpServiceImpl implements IdpService { @Autowired JoseUtil joseUtil; + @Autowired + RestTemplate restTemplate; + + @Autowired + IssuersService issuersService; + @Override public HttpEntity> constructGetTokenRequest(Map params, IssuerDTO issuerDTO, String authorizationAudience) throws IOException, IssuerOnboardingException { HttpHeaders headers = new HttpHeaders(); @@ -57,4 +68,36 @@ public HttpEntity> constructGetTokenRequest(Map params) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { + String issuerId = params.get("issuer"); + IssuerDTO issuerDTO = issuersService.getIssuerDetails(issuerId); + CredentialIssuerConfiguration credentialIssuerConfiguration = issuersService.getIssuerConfiguration(issuerId); + String tokenEndpoint = getTokenEndpoint(credentialIssuerConfiguration); + HttpEntity> request = constructGetTokenRequest(params, issuerDTO, tokenEndpoint); + TokenResponseDTO response = restTemplate.postForObject(tokenEndpoint, request, TokenResponseDTO.class); + if (response == null) { + throw new IdpException("Exception occurred while performing the authorization"); + } + return response; + } + + + private Map convertVerifiableCredentialRequestToMap(VerifiableCredentialRequestDTO verifiableCredentialRequest) { + Map params = new HashMap<>(); + params.put("code", verifiableCredentialRequest.getCode()); + params.put("redirect_uri", verifiableCredentialRequest.getRedirectUri()); + params.put("grant_type", verifiableCredentialRequest.getGrantType()); + params.put("code_verifier", verifiableCredentialRequest.getCodeVerifier()); + params.put("issuer", verifiableCredentialRequest.getIssuer()); + + return params; + } + } diff --git a/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java b/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java index 26dbedbc9..6d2fc4798 100644 --- a/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java +++ b/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java @@ -60,11 +60,6 @@ @Slf4j @Service public class CredentialUtilService { - @Autowired - IdpService idpService; - - @Autowired - RestTemplate restTemplate; @Autowired IssuersService issuersService; @@ -111,23 +106,6 @@ public void init() { pixelPass = new PixelPass(); } - public TokenResponseDTO getTokenResponse(VerifiableCredentialRequestDTO verifiableCredentialRequest) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { - return getTokenResponse(convertVerifiableCredentialRequestToMap(verifiableCredentialRequest)); - } - - public TokenResponseDTO getTokenResponse(Map params) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { - String issuerId = params.get("issuer"); - IssuerDTO issuerDTO = issuersService.getIssuerDetails(issuerId); - CredentialIssuerConfiguration credentialIssuerConfiguration = issuersService.getIssuerConfiguration(issuerId); - String tokenEndpoint = idpService.getTokenEndpoint(credentialIssuerConfiguration); - HttpEntity> request = idpService.constructGetTokenRequest(params, issuerDTO, tokenEndpoint); - TokenResponseDTO response = restTemplate.postForObject(tokenEndpoint, request, TokenResponseDTO.class); - if (response == null) { - throw new IdpException("Exception occurred while performing the authorization"); - } - return response; - } - public VCCredentialResponse downloadCredential(String credentialEndpoint, VCCredentialRequest vcCredentialRequest, String accessToken) throws InvalidCredentialResourceException { VCCredentialResponse vcCredentialResponse = restApiClient.postApi(credentialEndpoint, MediaType.APPLICATION_JSON, vcCredentialRequest, VCCredentialResponse.class, accessToken); @@ -408,16 +386,6 @@ public WalletCredentialResponseDTO generateCredentialResponse(String decryptedCr } } - private Map convertVerifiableCredentialRequestToMap(VerifiableCredentialRequestDTO verifiableCredentialRequest) { - Map params = new HashMap<>(); - params.put("code", verifiableCredentialRequest.getCode()); - params.put("redirect_uri", verifiableCredentialRequest.getRedirectUri()); - params.put("grant_type", verifiableCredentialRequest.getGrantType()); - params.put("code_verifier", verifiableCredentialRequest.getCodeVerifier()); - params.put("issuer", verifiableCredentialRequest.getIssuer()); - - return params; - } } diff --git a/src/test/java/io/mosip/mimoto/controller/CredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/CredentialsControllerTest.java index c284840ff..8ee0b89c2 100644 --- a/src/test/java/io/mosip/mimoto/controller/CredentialsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/CredentialsControllerTest.java @@ -2,8 +2,8 @@ import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.exception.*; +import io.mosip.mimoto.service.IdpService; import io.mosip.mimoto.service.impl.CredentialServiceImpl; -import io.mosip.mimoto.util.CredentialUtilService; import io.mosip.mimoto.util.TestUtilities; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.message.BasicNameValuePair; @@ -41,7 +41,7 @@ public class CredentialsControllerTest { private CredentialServiceImpl credentialService; @MockBean - private CredentialUtilService credentialUtilService; + private IdpService idpService; private String locale = "test-local", issuer = "test-issuer", credential = "test-credential", requestContent; private TokenResponseDTO tokenResponseDTO; @@ -49,7 +49,7 @@ public class CredentialsControllerTest { @Before public void setUp() throws Exception { tokenResponseDTO = TestUtilities.getTokenResponseDTO(); - Mockito.when(credentialUtilService.getTokenResponse(Mockito.anyMap())).thenReturn(tokenResponseDTO); + Mockito.when(idpService.getTokenResponse(Mockito.anyMap())).thenReturn(tokenResponseDTO); requestContent = EntityUtils.toString(new UrlEncodedFormEntity(List.of( new BasicNameValuePair("grant_type", "authorization_code"), new BasicNameValuePair("code", "test-code"), @@ -76,7 +76,7 @@ public void downloadPDFSuccessfully() throws Exception { @Test public void throwExceptionOnFetchingTokenResponseFailure() throws Exception { - Mockito.when(credentialUtilService.getTokenResponse(Mockito.anyMap())) + Mockito.when(idpService.getTokenResponse(Mockito.anyMap())) .thenThrow(new IdpException("Exception occurred while performing the authorization")); mockMvc.perform(post("/credentials/download") @@ -90,7 +90,7 @@ public void throwExceptionOnFetchingTokenResponseFailure() throws Exception { @Test public void throwExceptionOnFetchingIssuerOrAuthServerWellknownFailureDuringTokenGeneration() throws Exception { - Mockito.when(credentialUtilService.getTokenResponse(Mockito.anyMap())) + Mockito.when(idpService.getTokenResponse(Mockito.anyMap())) .thenThrow(new ApiNotAccessibleException()); mockMvc.perform(post("/credentials/download") diff --git a/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java b/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java index 8aabe1fe9..233d90153 100644 --- a/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java @@ -54,16 +54,9 @@ public class IdpControllerTest { @MockBean public RestClientService restClientService; - @MockBean - private IssuersServiceImpl issuersService; - @MockBean private IdpServiceImpl idpService; - @MockBean - private CredentialUtilService credentialUtilService; - - @Test public void otpRequestTest() throws Exception { BindingOtpInnerReqDto innerReqDto = new BindingOtpInnerReqDto(); @@ -125,7 +118,7 @@ public void walletBindingTest() throws Exception { @Test public void shouldReturnTokenResponseForValidIssuerAndParams() throws Exception { String issuer = "test-issuer"; - Mockito.when(credentialUtilService.getTokenResponse(Mockito.anyMap())).thenReturn(getTokenResponseDTO()); + Mockito.when(idpService.getTokenResponse(Mockito.anyMap())).thenReturn(getTokenResponseDTO()); mockMvc.perform(post("/get-token/{issuer}", issuer) .contentType(MediaType.APPLICATION_FORM_URLENCODED) @@ -150,7 +143,7 @@ public void shouldReturnTokenResponseForValidIssuerAndParams() throws Exception @Test public void shouldReturnBadRequestWithErrorIfTokenResponseIsNull() throws Exception { String issuer = "test-issuer"; - Mockito.when(credentialUtilService.getTokenResponse(Mockito.anyMap())) + Mockito.when(idpService.getTokenResponse(Mockito.anyMap())) .thenThrow(new IdpException("Exception occurred while performing the authorization")); mockMvc.perform(post("/get-token/{issuer}", issuer) diff --git a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java index 7a4127ac2..460259b87 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java @@ -6,14 +6,13 @@ import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; import io.mosip.mimoto.dto.resident.WalletCredentialResponseDTO; import io.mosip.mimoto.exception.*; +import io.mosip.mimoto.service.IdpService; import io.mosip.mimoto.service.WalletCredentialService; -import io.mosip.mimoto.util.CredentialUtilService; import io.mosip.mimoto.util.GlobalExceptionHandler; import jakarta.servlet.http.HttpSession; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.springframework.beans.factory.annotation.Autowired; @@ -45,14 +44,11 @@ @EnableWebMvc public class WalletCredentialsControllerTest { - @InjectMocks - private WalletCredentialsController controller; - @MockBean private WalletCredentialService walletCredentialService; @MockBean - private CredentialUtilService credentialUtilService; + private IdpService idpService; @Mock private HttpSession httpSession; @@ -95,7 +91,7 @@ public void setup() { @Test public void shouldDownloadCredentialSuccessfully() throws Exception { setIssuerAndCredentialConfigurationId(issuer, credentialConfigurationId); - when(credentialUtilService.getTokenResponse(eq(verifiableCredentialRequest))).thenReturn(new TokenResponseDTO()); + when(idpService.getTokenResponse(eq(verifiableCredentialRequest))).thenReturn(new TokenResponseDTO()); when(walletCredentialService.fetchAndStoreCredential(eq(issuer), eq(credentialConfigurationId), any(), eq(locale), eq(walletId), eq(walletKey))) .thenReturn(verifiableCredentialResponseDTO); @@ -117,7 +113,7 @@ public void shouldDownloadCredentialSuccessfully() throws Exception { @Test public void shouldReturnErroResponseWhenRequestedCredentialIsAlreadyAvailableInWallet() throws Exception { setIssuerAndCredentialConfigurationId(issuer, credentialConfigurationId); - when(credentialUtilService.getTokenResponse(eq(verifiableCredentialRequest))).thenReturn(new TokenResponseDTO()); + when(idpService.getTokenResponse(eq(verifiableCredentialRequest))).thenReturn(new TokenResponseDTO()); when(walletCredentialService.fetchAndStoreCredential(eq(issuer), eq(credentialConfigurationId), any(), eq(locale), eq(walletId), eq(walletKey))) .thenThrow(new InvalidRequestException(CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), "Duplicate credential for issuer and type")); @@ -158,7 +154,7 @@ public void shouldCallServiceWithCorrectParameters() throws Exception { .sessionAttr("wallet_id", walletId) .sessionAttr("wallet_key", walletKey)); - verify(credentialUtilService).getTokenResponse(eq(verifiableCredentialRequest)); + verify(idpService).getTokenResponse(eq(verifiableCredentialRequest)); verify(walletCredentialService ).fetchAndStoreCredential(eq(issuer), eq(credentialConfigurationId), any(), eq("fr"), eq(walletId), eq(walletKey)); } @@ -267,7 +263,7 @@ public void shouldThrowInvalidRequestForMissingCredentialConfigurationId() throw @Test public void shouldThrowServiceUnavailableForTokenResponseFailure() throws Exception { setIssuerAndCredentialConfigurationId(issuer, credentialConfigurationId); - when(credentialUtilService.getTokenResponse(eq(verifiableCredentialRequest))) + when(idpService.getTokenResponse(eq(verifiableCredentialRequest))) .thenThrow(new ApiNotAccessibleException("API not accessible")); mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) @@ -282,7 +278,7 @@ public void shouldThrowServiceUnavailableForTokenResponseFailure() throws Except @Test public void shouldThrowServiceUnavailableForExternalServiceFailure() throws Exception { setIssuerAndCredentialConfigurationId(issuer, credentialConfigurationId); - when(credentialUtilService.getTokenResponse(anyMap())).thenReturn(new TokenResponseDTO()); + when(idpService.getTokenResponse(anyMap())).thenReturn(new TokenResponseDTO()); when(walletCredentialService.fetchAndStoreCredential(anyString(), anyString(), any(), anyString(), anyString(), anyString())) .thenThrow(new ExternalServiceUnavailableException("Service unavailable", "Service unavailable")); diff --git a/src/test/java/io/mosip/mimoto/service/CredentialUtilServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialUtilServiceTest.java index 648ce6e32..dc72677a8 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialUtilServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialUtilServiceTest.java @@ -3,12 +3,9 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import io.mosip.mimoto.dto.IssuerDTO; -import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.*; -import io.mosip.mimoto.exception.IdpException; import io.mosip.mimoto.exception.VCVerificationException; import io.mosip.mimoto.model.QRCodeType; -import io.mosip.mimoto.service.impl.IdpServiceImpl; import io.mosip.mimoto.service.impl.IssuersServiceImpl; import io.mosip.mimoto.util.*; import io.mosip.vercred.vcverifier.CredentialsVerifier; @@ -23,11 +20,7 @@ import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.http.HttpEntity; import org.springframework.http.MediaType; -import org.springframework.util.LinkedMultiValueMap; -import org.springframework.util.MultiValueMap; -import org.springframework.web.client.RestTemplate; import java.io.ByteArrayInputStream; import java.util.List; @@ -44,12 +37,10 @@ public class CredentialUtilServiceTest { @InjectMocks CredentialUtilService credentialUtilService; - @Mock - RestTemplate restTemplate; + @Mock IssuersServiceImpl issuersService; - @Mock - IdpServiceImpl idpService; + @Mock RestApiClient restApiClient; @Mock @@ -62,58 +53,19 @@ public class CredentialUtilServiceTest { @Mock Utilities utilities; - private Map tokenRequestParams = Map.of( - "grant_type", "client_credentials", - "client_id", "test-client", - "issuer", "issuer1" - ); IssuerDTO issuerDTO; - TokenResponseDTO expectedTokenResponse; + CredentialIssuerConfiguration issuerConfig; - String tokenEndpoint, issuerId, expectedExceptionMsg; - HttpEntity> mockRequest; + + String expectedExceptionMsg, issuerId; + + @Before public void setUp() throws Exception { issuerId = "issuer1"; issuerDTO = getIssuerConfigDTO(issuerId); issuerConfig = getCredentialIssuerConfigurationResponseDto(issuerId, "CredentialType1", List.of()); - - Mockito.when(issuersService.getIssuerDetails(issuerId)).thenReturn(issuerDTO); - Mockito.when(issuersService.getIssuerConfiguration(issuerId)).thenReturn(issuerConfig); - - tokenEndpoint = issuerConfig.getAuthorizationServerWellKnownResponse().getTokenEndpoint(); - mockRequest = new HttpEntity<>(new LinkedMultiValueMap<>(Map.of( - "grant_type", List.of("client_credentials"), - "client_id", List.of("test-client") - ))); - expectedTokenResponse = getTokenResponseDTO(); - - Mockito.when(idpService.constructGetTokenRequest(tokenRequestParams, issuerDTO, tokenEndpoint)) - .thenReturn(mockRequest); - Mockito.when(idpService.getTokenEndpoint(issuerConfig)) - .thenReturn(tokenEndpoint); - Mockito.when(restTemplate.postForObject(tokenEndpoint, mockRequest, TokenResponseDTO.class)) - .thenReturn(expectedTokenResponse); - } - - @Test - public void shouldReturnTokenResponseForValidTokenEndpoint() throws Exception { - TokenResponseDTO actualTokenResponse = credentialUtilService.getTokenResponse(tokenRequestParams); - - assertEquals(expectedTokenResponse, actualTokenResponse); - } - - @Test - public void shouldThrowExceptionIfResponseIsNullWhenFetchingTokenResponse() throws Exception { - Mockito.when(restTemplate.postForObject(tokenEndpoint, mockRequest, TokenResponseDTO.class)) - .thenReturn(null); - - IdpException actualException = assertThrows(IdpException.class, () -> { - credentialUtilService.getTokenResponse(tokenRequestParams); - }); - - assertEquals("RESIDENT-APP-034 --> Exception occurred while performing the authorization", actualException.getMessage()); } @Test diff --git a/src/test/java/io/mosip/mimoto/service/IdpServiceTest.java b/src/test/java/io/mosip/mimoto/service/IdpServiceTest.java index f7a85e5fb..d0e0dd5c6 100644 --- a/src/test/java/io/mosip/mimoto/service/IdpServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/IdpServiceTest.java @@ -1,7 +1,10 @@ package io.mosip.mimoto.service; import io.mosip.mimoto.dto.IssuerDTO; +import io.mosip.mimoto.dto.idp.TokenResponseDTO; +import io.mosip.mimoto.dto.mimoto.AuthorizationServerWellKnownResponse; import io.mosip.mimoto.dto.mimoto.CredentialIssuerConfiguration; +import io.mosip.mimoto.exception.IdpException; import io.mosip.mimoto.exception.IssuerOnboardingException; import io.mosip.mimoto.service.impl.IdpServiceImpl; import io.mosip.mimoto.util.JoseUtil; @@ -15,15 +18,16 @@ import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestTemplate; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; +import static io.mosip.mimoto.util.TestUtilities.getCredentialIssuerConfigurationResponseDto; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.*; -import static io.mosip.mimoto.util.TestUtilities.*; @RunWith(MockitoJUnitRunner.class) public class IdpServiceTest { @@ -33,10 +37,27 @@ public class IdpServiceTest { @Mock JoseUtil joseUtil; + @Mock + private RestTemplate restTemplate; + + @Mock + private IssuersService issuersService; + + @Mock + private CredentialIssuerConfiguration credentialIssuerConfiguration; + + @Mock + private AuthorizationServerWellKnownResponse authorizationServerWellKnownResponse; + + @Mock + private TokenResponseDTO tokenResponseDTO; + private IssuerDTO issuerDTO; private Map params; private final String authorizationAudience = "https://example.com/auth"; + + @Before public void setUp() throws IOException { issuerDTO = new IssuerDTO(); @@ -94,4 +115,59 @@ public void shouldReturnTokenEndpointFromCredentialIssuerConfigurationResponse() assertEquals(expectedTokenEndpoint, actualTokenEndpoint); } + + @Test + public void shouldThrowExceptionIfResponseIsNullWhenFetchingTokenResponse() throws Exception { + params.put("issuer", "issuer123"); + + IssuerDTO mockIssuer = new IssuerDTO(); + mockIssuer.setClient_id("client123"); + mockIssuer.setClient_alias("clientAlias"); + + when(issuersService.getIssuerDetails("issuer123")).thenReturn(mockIssuer); + when(issuersService.getIssuerConfiguration("issuer123")).thenReturn(credentialIssuerConfiguration); + + when(credentialIssuerConfiguration.getAuthorizationServerWellKnownResponse()) + .thenReturn(authorizationServerWellKnownResponse); + when(authorizationServerWellKnownResponse.getTokenEndpoint()) + .thenReturn("https://example.com/token"); + + when(joseUtil.getJWT(eq("client123"), any(), any(), eq("clientAlias"), any(), eq("https://example.com/token"))) + .thenReturn("jwt-token"); + + when(restTemplate.postForObject(eq("https://example.com/token"), any(HttpEntity.class), eq(TokenResponseDTO.class))) + .thenReturn(null); + + IdpException ex = assertThrows(IdpException.class, () -> + idpService.getTokenResponse(params)); + + assertEquals("RESIDENT-APP-034 --> Exception occurred while performing the authorization", ex.getMessage()); + } + + @Test + public void shouldReturnTokenResponseForValidTokenEndpoint() throws Exception { + params.put("issuer", "issuer123"); + + IssuerDTO mockIssuer = new IssuerDTO(); + mockIssuer.setClient_id("client123"); + mockIssuer.setClient_alias("clientAlias"); + + when(issuersService.getIssuerDetails("issuer123")).thenReturn(mockIssuer); + when(issuersService.getIssuerConfiguration("issuer123")).thenReturn(credentialIssuerConfiguration); + when(credentialIssuerConfiguration.getAuthorizationServerWellKnownResponse()) + .thenReturn(authorizationServerWellKnownResponse); + when(authorizationServerWellKnownResponse.getTokenEndpoint()) + .thenReturn("https://example.com/token"); + + when(joseUtil.getJWT(eq("client123"), any(), any(), eq("clientAlias"), any(), eq("https://example.com/token"))) + .thenReturn("jwt-token"); + + when(restTemplate.postForObject(eq("https://example.com/token"), any(HttpEntity.class), eq(TokenResponseDTO.class))) + .thenReturn(tokenResponseDTO); + + TokenResponseDTO response = idpService.getTokenResponse(params); + + assertNotNull(response); + assertEquals(tokenResponseDTO, response); + } } \ No newline at end of file From 0b4362880fc1366d963cf293bcd285ad4a9a7613 Mon Sep 17 00:00:00 2001 From: Sradha Mohanty <134414554+SradhaMohanty5899@users.noreply.github.com> Date: Mon, 30 Jun 2025 12:22:45 +0530 Subject: [PATCH 688/860] MOSIP-35628: API - Capture info in the report whether Captcha is enabled on the target env or not for Mimoto Module (#757) * MOSIP-28246 Removed commented unused variables Signed-off-by: SradhaMohanty5899 * MOSIP-35628 API - Capture info in the report whether Captcha is enabled on the target env or not Signed-off-by: SradhaMohanty5899 * MOSIP-35628 Removed empty string check Signed-off-by: SradhaMohanty5899 * MOSIP-35628 Added 1.2.1-SNAPSHOT version Signed-off-by: SradhaMohanty5899 * Removed isCaptchaEnabled() and getValueFromEsignetActuator() methods after moving to commons util Signed-off-by: SradhaMohanty5899 * Changed snapshot version Signed-off-by: SradhaMohanty5899 --------- Signed-off-by: SradhaMohanty5899 --- api-test/pom.xml | 12 ++++++++++++ .../apirig/mimoto/testrunner/MosipTestRunner.java | 1 + .../apirig/mimoto/utils/MimotoConfigManager.java | 5 ++++- .../testrig/apirig/mimoto/utils/MimotoUtil.java | 12 ++++++++++++ 4 files changed, 29 insertions(+), 1 deletion(-) diff --git a/api-test/pom.xml b/api-test/pom.xml index 7d41a25d5..d0f537b97 100644 --- a/api-test/pom.xml +++ b/api-test/pom.xml @@ -32,6 +32,18 @@ https://github.com/mosip/mimoto + + + + ossrh-central + MavenCentralRepository + https://central.sonatype.com/repository/maven-snapshots/ + default + + true + + + UTF-8 diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java index 8a1ebeaef..05b3ecc16 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java @@ -83,6 +83,7 @@ public static void main(String[] arg) { SkipTestCaseHandler.loadTestcaseToBeSkippedList("testCaseSkippedList.txt"); GlobalMethods.setModuleNameAndReCompilePattern(MimotoConfigManager.getproperty("moduleNamePattern")); setLogLevels(); + MimotoConfigManager.getEsignetBaseUrl(); HealthChecker healthcheck = new HealthChecker(); healthcheck.setCurrentRunningModule(BaseTestCase.currentModule); diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java index 0ed8f074e..34809ec03 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java @@ -41,10 +41,13 @@ public static String getEsignetBaseUrl() { String esignetBaseUrl = null; if (getproperty("runPlugin").equals("mosipid")) { esignetBaseUrl = "https://" + MimotoUtil.getValueFromMimotoActuator("overrides", getproperty("mosipid-identity-esignet-host")); + } else if (getproperty("runPlugin").equals("mockid")) { esignetBaseUrl = "https://" + MimotoUtil.getValueFromMimotoActuator("overrides", getproperty("mock-identity-esignet-host")); } - + if(esignetBaseUrl != null) { + propertiesMap.put("eSignetbaseurl", esignetBaseUrl); + } return esignetBaseUrl; } diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java index 7908fe4a4..9a3527f70 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java @@ -15,6 +15,7 @@ import org.apache.log4j.Logger; import org.bouncycastle.openssl.jcajce.JcaPEMWriter; import org.json.JSONArray; +import org.json.JSONException; import org.json.JSONObject; import org.testng.SkipException; @@ -27,6 +28,7 @@ import io.mosip.testrig.apirig.utils.AdminTestUtil; import io.mosip.testrig.apirig.utils.ConfigManager; import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.GlobalMethods; import io.mosip.testrig.apirig.utils.RestClient; import io.mosip.testrig.apirig.utils.SkipTestCaseHandler; import io.restassured.response.Response; @@ -83,6 +85,14 @@ public static TestCaseDTO isTestCaseValidForTheExecution(TestCaseDTO testCaseDTO String endpoint = testCaseDTO.getEndPoint(); String inputJson = testCaseDTO.getInput(); + //When the captcha is enabled we cannot execute the test case as we can not generate the captcha token + if (isCaptchaEnabled() == true) { + GlobalMethods.reportCaptchaStatus(GlobalConstants.CAPTCHA_ENABLED, true); + throw new SkipException(GlobalConstants.CAPTCHA_ENABLED_MESSAGE); + }else { + GlobalMethods.reportCaptchaStatus(GlobalConstants.CAPTCHA_ENABLED, false); + } + if (MosipTestRunner.skipAll == true) { throw new SkipException(GlobalConstants.PRE_REQUISITE_FAILED_MESSAGE); } @@ -323,4 +333,6 @@ public static String getValueFromMimotoActuator(String section, String key) { } } + + } \ No newline at end of file From ea69ec3f2fc7cf98823409ed3a8f296548b14d46 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 30 Jun 2025 15:16:24 +0530 Subject: [PATCH 689/860] injiweb1605 removed the credential util service Signed-off-by: Gurpreet41082 --- .../CredentialPDFGeneratorService.java} | 177 ++----------- .../service/CredentialRequestService.java | 18 ++ .../mimoto/service/CredentialService.java | 6 + .../service/CredentialVerifierService.java | 9 + .../impl/CredentialRequestServiceImpl.java | 99 ++++++++ .../service/impl/CredentialServiceImpl.java | 44 +++- .../service/impl/CredentialVerifierImpl.java | 30 +++ .../impl/WalletCredentialServiceImpl.java | 80 +++++- .../mimoto/util/CredentialProcessor.java | 28 ++- .../CredentialPDFGeneratorServiceTest.java | 237 ++++++++++++++++++ ...java => CredentialRequestServiceTest.java} | 17 +- .../mimoto/service/CredentialServiceTest.java | 66 +++-- .../service/CredentialUtilServiceTest.java | 183 -------------- .../service/WalletCredentialServiceTest.java | 101 ++++++-- 14 files changed, 659 insertions(+), 436 deletions(-) rename src/main/java/io/mosip/mimoto/{util/CredentialUtilService.java => service/CredentialPDFGeneratorService.java} (54%) create mode 100644 src/main/java/io/mosip/mimoto/service/CredentialRequestService.java create mode 100644 src/main/java/io/mosip/mimoto/service/CredentialVerifierService.java create mode 100644 src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java create mode 100644 src/main/java/io/mosip/mimoto/service/impl/CredentialVerifierImpl.java create mode 100644 src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java rename src/test/java/io/mosip/mimoto/service/{CredentialServiceVCCredentialRequestTest.java => CredentialRequestServiceTest.java} (87%) delete mode 100644 src/test/java/io/mosip/mimoto/service/CredentialUtilServiceTest.java diff --git a/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java b/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java similarity index 54% rename from src/main/java/io/mosip/mimoto/util/CredentialUtilService.java rename to src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java index 6d2fc4798..b98ad989d 100644 --- a/src/main/java/io/mosip/mimoto/util/CredentialUtilService.java +++ b/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java @@ -1,4 +1,4 @@ -package io.mosip.mimoto.util; +package io.mosip.mimoto.service; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; @@ -11,25 +11,17 @@ import com.itextpdf.html2pdf.HtmlConverter; import com.itextpdf.html2pdf.resolver.font.DefaultFontProvider; import com.itextpdf.kernel.pdf.PdfWriter; -import io.mosip.mimoto.dbentity.CredentialMetadata; -import io.mosip.mimoto.dbentity.ProofSigningKey; import io.mosip.mimoto.dto.IssuerDTO; -import io.mosip.mimoto.dto.VerifiableCredentialRequestDTO; -import io.mosip.mimoto.dto.idp.TokenResponseDTO; -import io.mosip.mimoto.dto.mimoto.*; +import io.mosip.mimoto.dto.mimoto.CredentialDisplayResponseDto; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerDisplayResponse; +import io.mosip.mimoto.dto.mimoto.CredentialsSupportedResponse; +import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; import io.mosip.mimoto.dto.openid.presentation.PresentationDefinitionDTO; -import io.mosip.mimoto.dto.resident.WalletCredentialResponseDTO; -import io.mosip.mimoto.exception.*; import io.mosip.mimoto.model.QRCodeType; -import io.mosip.mimoto.model.SigningAlgorithm; -import io.mosip.mimoto.repository.ProofSigningKeyRepository; -import io.mosip.mimoto.service.IdpService; -import io.mosip.mimoto.service.IssuersService; import io.mosip.mimoto.service.impl.PresentationServiceImpl; +import io.mosip.mimoto.util.LocaleUtils; +import io.mosip.mimoto.util.Utilities; import io.mosip.pixelpass.PixelPass; -import io.mosip.vercred.vcverifier.CredentialsVerifier; -import io.mosip.vercred.vcverifier.constants.CredentialFormat; -import io.mosip.vercred.vcverifier.data.VerificationResult; import jakarta.annotation.PostConstruct; import lombok.extern.slf4j.Slf4j; import org.apache.velocity.VelocityContext; @@ -37,14 +29,8 @@ import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.core.io.InputStreamResource; -import org.springframework.http.HttpEntity; -import org.springframework.http.MediaType; import org.springframework.stereotype.Service; -import org.springframework.util.MultiValueMap; -import org.springframework.web.client.RestTemplate; -import javax.crypto.SecretKey; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -55,28 +41,9 @@ import java.util.*; import java.util.stream.Collectors; -import static io.mosip.mimoto.exception.ErrorConstants.CREDENTIAL_FETCH_EXCEPTION; - @Slf4j @Service -public class CredentialUtilService { - - @Autowired - IssuersService issuersService; - - @Autowired - RestApiClient restApiClient; - - @Autowired - JoseUtil joseUtil; - - @Autowired - private EncryptionDecryptionUtil encryptionDecryptionUtil; - - @Autowired - private ProofSigningKeyRepository proofSigningKeyRepository; - - CredentialsVerifier credentialsVerifier; +public class CredentialPDFGeneratorService { @Autowired ObjectMapper objectMapper; @@ -98,76 +65,22 @@ public class CredentialUtilService { @Autowired private Utilities utilities; + PixelPass pixelPass; @PostConstruct public void init() { - credentialsVerifier = new CredentialsVerifier(); pixelPass = new PixelPass(); } - public VCCredentialResponse downloadCredential(String credentialEndpoint, VCCredentialRequest vcCredentialRequest, String accessToken) throws InvalidCredentialResourceException { - VCCredentialResponse vcCredentialResponse = restApiClient.postApi(credentialEndpoint, MediaType.APPLICATION_JSON, - vcCredentialRequest, VCCredentialResponse.class, accessToken); - log.debug("VC Credential Response is -> " + vcCredentialResponse); - if (vcCredentialResponse == null) - throw new InvalidCredentialResourceException("VC Credential Issue API not accessible"); - return vcCredentialResponse; - } - - public VCCredentialRequest generateVCCredentialRequest(IssuerDTO issuerDTO, CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse, CredentialsSupportedResponse credentialsSupportedResponse, String accessToken, String walletId, String base64EncodedWalletKey, Boolean isLoginFlow) throws Exception { - String jwt; - - Map proofTypesSupported = credentialsSupportedResponse.getProofTypesSupported(); - SigningAlgorithm algorithm; - if (proofTypesSupported.containsKey("jwt")) { - algorithm = SigningAlgorithm.fromString(proofTypesSupported.get("jwt").getProofSigningAlgValuesSupported().getFirst()); - } else { - algorithm = SigningAlgorithm.RS256; - } - - if (!isLoginFlow) { - jwt = joseUtil.generateJwt(credentialIssuerWellKnownResponse.getCredentialIssuer(), issuerDTO.getClient_id(), accessToken); - } else { - Optional proofSigningKey = proofSigningKeyRepository.findByWalletIdAndAlgorithm(walletId, algorithm.name()); - byte[] decodedWalletKey = Base64.getDecoder().decode(base64EncodedWalletKey); - SecretKey walletKey = EncryptionDecryptionUtil.bytesToSecretKey(decodedWalletKey); - byte[] publicKeyBytes = Base64.getDecoder().decode(proofSigningKey.get().getPublicKey()); - byte[] privateKeyInBytes = encryptionDecryptionUtil.decryptWithAES(walletKey, proofSigningKey.get().getEncryptedSecretKey()); - jwt = JwtGeneratorUtil.generateJwtUsingDBKeys(algorithm, credentialIssuerWellKnownResponse.getCredentialIssuer(), issuerDTO.getClient_id(), accessToken, publicKeyBytes, privateKeyInBytes); - } - List credentialContext = credentialsSupportedResponse.getCredentialDefinition().getContext(); - - if (credentialContext == null || credentialContext.isEmpty()) { - credentialContext = List.of("https://www.w3.org/2018/credentials/v1"); - } - - return VCCredentialRequest.builder() - .format(credentialsSupportedResponse.getFormat()) - .proof(VCCredentialRequestProof.builder() - .proofType(credentialsSupportedResponse.getProofTypesSupported().keySet().stream().findFirst().get()) - .jwt(jwt) - .build()) - .credentialDefinition(VCCredentialDefinition.builder() - .type(credentialsSupportedResponse.getCredentialDefinition().getType()) - .context(credentialContext) - .build()) - .build(); - } - - public Boolean verifyCredential(VCCredentialResponse vcCredentialResponse) throws VCVerificationException, JsonProcessingException { - log.info("Initiated the VC Verification : Started"); - String credentialString = objectMapper.writeValueAsString(vcCredentialResponse.getCredential()); - VerificationResult verificationResult = credentialsVerifier.verify(credentialString, CredentialFormat.LDP_VC); - if (!verificationResult.getVerificationStatus()) { - throw new VCVerificationException(verificationResult.getVerificationErrorCode().toLowerCase(), verificationResult.getVerificationMessage()); - } - log.info("Completed the VC Verification : Completed -> result : " + verificationResult); - return true; + public ByteArrayInputStream generatePdfForVerifiableCredentials(String credentialType, VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String dataShareUrl, String credentialValidity, String locale) throws Exception { + LinkedHashMap> displayProperties = loadDisplayPropertiesFromWellknown(vcCredentialResponse, credentialsSupportedResponse, locale); + Map data = getPdfResourceFromVcProperties(displayProperties, credentialsSupportedResponse, vcCredentialResponse, issuerDTO, dataShareUrl, credentialValidity); + return renderVCInCredentialTemplate(data, issuerDTO.getIssuer_id(), credentialType); } @NotNull - public static LinkedHashMap> loadDisplayPropertiesFromWellknown(VCCredentialResponse vcCredentialResponse, CredentialsSupportedResponse credentialsSupportedResponse, String userLocale) { + private static LinkedHashMap> loadDisplayPropertiesFromWellknown(VCCredentialResponse vcCredentialResponse, CredentialsSupportedResponse credentialsSupportedResponse, String userLocale) { LinkedHashMap> displayProperties = new LinkedHashMap<>(); Map credentialProperties = vcCredentialResponse.getCredential().getCredentialSubject(); LinkedHashMap vcPropertiesFromWellKnown = new LinkedHashMap<>(); @@ -198,7 +111,7 @@ public static LinkedHashMap return displayProperties; } - public Map getPdfResourceFromVcProperties(LinkedHashMap> displayProperties, CredentialsSupportedResponse credentialsSupportedResponse, VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, String dataShareUrl, String credentialValidity) throws IOException, WriterException { + private Map getPdfResourceFromVcProperties(LinkedHashMap> displayProperties, CredentialsSupportedResponse credentialsSupportedResponse, VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, String dataShareUrl, String credentialValidity) throws IOException, WriterException { Map data = new HashMap<>(); LinkedHashMap rowProperties = new LinkedHashMap<>(); String backgroundColor = credentialsSupportedResponse.getDisplay().getFirst().getBackgroundColor(); @@ -252,12 +165,6 @@ public Map getPdfResourceFromVcProperties(LinkedHashMap> displayProperties = loadDisplayPropertiesFromWellknown(vcCredentialResponse, credentialsSupportedResponse, locale); - Map data = getPdfResourceFromVcProperties(displayProperties, credentialsSupportedResponse, vcCredentialResponse, issuerDTO, dataShareUrl, credentialValidity); - return renderVCInCredentialTemplate(data, issuerDTO.getIssuer_id(), credentialType); - } - @NotNull private ByteArrayInputStream renderVCInCredentialTemplate(Map data, String issuerId, String credentialType) { String credentialTemplate = utilities.getCredentialSupportedTemplateString(issuerId, credentialType); @@ -330,61 +237,7 @@ private String constructQRCode(String qrData) throws WriterException { return Utilities.encodeToString(qrImage, "png"); } - public WalletCredentialResponseDTO generateCredentialResponse(String decryptedCredential, CredentialMetadata credentialMetadata, String locale) throws CredentialProcessingException { - log.info("Generating credential response for issuerId: {}, credentialType: {}", credentialMetadata.getIssuerId(), credentialMetadata.getCredentialType()); - try { - // Parse decrypted credential - VCCredentialResponse vcCredentialResponse = objectMapper.readValue(decryptedCredential, VCCredentialResponse.class); - - // Fetch issuer details - IssuerDTO issuerDTO = issuersService.getIssuerDetails(credentialMetadata.getIssuerId()); - - // Fetch issuer configuration - IssuerConfig issuerConfig = issuersService.getIssuerConfig(credentialMetadata.getIssuerId(), credentialMetadata.getCredentialType()); - - if (null == issuerConfig) { - log.error("Credentials supported response not found in wellknown for credentialType: {}", credentialMetadata.getCredentialType()); - throw new CredentialProcessingException(CREDENTIAL_FETCH_EXCEPTION.getErrorCode(), "Invalid credential type configuration"); - } - - // Find credentials supported response for the credential type - CredentialsSupportedResponse credentialsSupportedResponse = issuerConfig.getCredentialsSupportedResponse(); - if (credentialsSupportedResponse == null || !credentialsSupportedResponse.getCredentialDefinition().getType().containsAll(vcCredentialResponse.getCredential().getType())) { - log.error("Credentials supported response not found for credentialType: {}", credentialMetadata.getCredentialType()); - throw new CredentialProcessingException(CREDENTIAL_FETCH_EXCEPTION.getErrorCode(), "Invalid credential type configuration"); - } - // Generate PDF - // keep the datashare url and credential validity as defaults in downloading VC as PDF as logged-in user - // This is because generatePdfForVerifiableCredentials will be used by both logged-in and non-logged-in users - ByteArrayInputStream pdfStream = generatePdfForVerifiableCredentials( - credentialMetadata.getCredentialType(), - vcCredentialResponse, - issuerDTO, - credentialsSupportedResponse, - "", - "-1", - locale - ); - - // Construct response - String fileName = String.format("%s_credential.pdf", credentialMetadata.getCredentialType()); - return WalletCredentialResponseDTO.builder() - .fileName(fileName) - .fileContentStream(new InputStreamResource(pdfStream)) - .build(); - } catch (JsonProcessingException e) { - log.error("Failed to parse decrypted credential for issuerId: {}, credentialType: {}", credentialMetadata.getIssuerId(), credentialMetadata.getCredentialType(), e); - throw new CredentialProcessingException(CREDENTIAL_FETCH_EXCEPTION.getErrorCode(), "Failed to parse decrypted credential"); - } catch (ApiNotAccessibleException | IOException | AuthorizationServerWellknownResponseException | - InvalidWellknownResponseException | InvalidIssuerIdException e) { - log.error("Failed to fetch issuer details or configuration for issuerId: {}", credentialMetadata.getIssuerId(), e); - throw new CredentialProcessingException(CREDENTIAL_FETCH_EXCEPTION.getErrorCode(), "Failed to fetch issuer configuration"); - } catch (Exception e) { - log.error("Failed to generate PDF for credentialType: {}", credentialMetadata.getCredentialType(), e); - throw new CredentialProcessingException(CREDENTIAL_FETCH_EXCEPTION.getErrorCode(), "Failed to generate credential PDF"); - } - } } diff --git a/src/main/java/io/mosip/mimoto/service/CredentialRequestService.java b/src/main/java/io/mosip/mimoto/service/CredentialRequestService.java new file mode 100644 index 000000000..83c79207b --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/CredentialRequestService.java @@ -0,0 +1,18 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.dto.IssuerDTO; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; +import io.mosip.mimoto.dto.mimoto.CredentialsSupportedResponse; +import io.mosip.mimoto.dto.mimoto.VCCredentialRequest; + +public interface CredentialRequestService { + VCCredentialRequest buildRequest( + IssuerDTO issuerDTO, + CredentialIssuerWellKnownResponse wellKnownResponse, + CredentialsSupportedResponse credentialsSupportedResponse, + String accessToken, + String walletId, + String base64EncodedWalletKey, + Boolean isLoginFlow + ) throws Exception; +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/CredentialService.java b/src/main/java/io/mosip/mimoto/service/CredentialService.java index fc867c80d..3c956e0b4 100644 --- a/src/main/java/io/mosip/mimoto/service/CredentialService.java +++ b/src/main/java/io/mosip/mimoto/service/CredentialService.java @@ -1,7 +1,13 @@ package io.mosip.mimoto.service; import io.mosip.mimoto.dto.idp.TokenResponseDTO; +import io.mosip.mimoto.dto.mimoto.VCCredentialRequest; +import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; +import io.mosip.mimoto.exception.InvalidCredentialResourceException; + import java.io.ByteArrayInputStream; public interface CredentialService { ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String credentialType, TokenResponseDTO response, String credentialValidity, String locale) throws Exception; + VCCredentialResponse downloadCredential(String credentialEndpoint, VCCredentialRequest vcCredentialRequest, String accessToken) throws InvalidCredentialResourceException; } + diff --git a/src/main/java/io/mosip/mimoto/service/CredentialVerifierService.java b/src/main/java/io/mosip/mimoto/service/CredentialVerifierService.java new file mode 100644 index 000000000..62381800b --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/CredentialVerifierService.java @@ -0,0 +1,9 @@ +package io.mosip.mimoto.service; + +import com.fasterxml.jackson.core.JsonProcessingException; +import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; +import io.mosip.mimoto.exception.VCVerificationException; + +public interface CredentialVerifierService { + boolean verify(VCCredentialResponse credentialResponse) throws JsonProcessingException, VCVerificationException; +} diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java new file mode 100644 index 000000000..667168b57 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java @@ -0,0 +1,99 @@ +package io.mosip.mimoto.service.impl; + +import io.mosip.mimoto.dbentity.ProofSigningKey; +import io.mosip.mimoto.dto.IssuerDTO; +import io.mosip.mimoto.dto.mimoto.*; +import io.mosip.mimoto.model.SigningAlgorithm; +import io.mosip.mimoto.repository.ProofSigningKeyRepository; +import io.mosip.mimoto.service.CredentialRequestService; +import io.mosip.mimoto.util.EncryptionDecryptionUtil; +import io.mosip.mimoto.util.JoseUtil; +import io.mosip.mimoto.util.JwtGeneratorUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.crypto.SecretKey; +import java.util.Base64; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +@Service +public class CredentialRequestServiceImpl implements CredentialRequestService { + + @Autowired + private JoseUtil joseUtil; + + @Autowired + private ProofSigningKeyRepository proofSigningKeyRepository; + + @Autowired + private EncryptionDecryptionUtil encryptionDecryptionUtil; + + @Override + public VCCredentialRequest buildRequest(IssuerDTO issuerDTO, + CredentialIssuerWellKnownResponse wellKnownResponse, + CredentialsSupportedResponse credentialsSupportedResponse, + String accessToken, + String walletId, + String base64EncodedWalletKey, + Boolean isLoginFlow) throws Exception { + + SigningAlgorithm algorithm = resolveAlgorithm(credentialsSupportedResponse); + + String jwt; + if (!isLoginFlow) { + jwt = joseUtil.generateJwt(wellKnownResponse.getCredentialIssuer(), issuerDTO.getClient_id(), accessToken); + } else { + jwt = generateJwtFromDB(walletId, base64EncodedWalletKey, algorithm, wellKnownResponse, issuerDTO, accessToken); + } + + List credentialContext = credentialsSupportedResponse.getCredentialDefinition().getContext(); + if (credentialContext == null || credentialContext.isEmpty()) { + credentialContext = List.of("https://www.w3.org/2018/credentials/v1"); + } + + return VCCredentialRequest.builder() + .format(credentialsSupportedResponse.getFormat()) + .proof(VCCredentialRequestProof.builder() + .proofType(credentialsSupportedResponse.getProofTypesSupported().keySet().stream().findFirst().get()) + .jwt(jwt) + .build()) + .credentialDefinition(VCCredentialDefinition.builder() + .type(credentialsSupportedResponse.getCredentialDefinition().getType()) + .context(credentialContext) + .build()) + .build(); + } + + private SigningAlgorithm resolveAlgorithm(CredentialsSupportedResponse credentialsSupportedResponse) { + Map proofTypesSupported = credentialsSupportedResponse.getProofTypesSupported(); + if (proofTypesSupported.containsKey("jwt")) { + return SigningAlgorithm.fromString(proofTypesSupported.get("jwt").getProofSigningAlgValuesSupported().getFirst()); + } + return SigningAlgorithm.RS256; + } + + private String generateJwtFromDB(String walletId, + String base64EncodedWalletKey, + SigningAlgorithm algorithm, + CredentialIssuerWellKnownResponse wellKnownResponse, + IssuerDTO issuerDTO, + String accessToken) throws Exception { + + Optional proofSigningKey = proofSigningKeyRepository.findByWalletIdAndAlgorithm(walletId, algorithm.name()); + byte[] decodedWalletKey = Base64.getDecoder().decode(base64EncodedWalletKey); + SecretKey walletKey = EncryptionDecryptionUtil.bytesToSecretKey(decodedWalletKey); + byte[] publicKeyBytes = Base64.getDecoder().decode(proofSigningKey.get().getPublicKey()); + byte[] privateKeyInBytes = encryptionDecryptionUtil.decryptWithAES(walletKey, proofSigningKey.get().getEncryptedSecretKey()); + + return JwtGeneratorUtil.generateJwtUsingDBKeys(algorithm, + wellKnownResponse.getCredentialIssuer(), + issuerDTO.getClient_id(), + accessToken, + publicKeyBytes, + privateKeyInBytes); + } + + +} diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java index f51595c13..c66d415df 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java @@ -4,16 +4,23 @@ import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.*; -import io.mosip.mimoto.exception.*; +import io.mosip.mimoto.exception.InvalidCredentialResourceException; +import io.mosip.mimoto.exception.VCVerificationException; import io.mosip.mimoto.model.QRCodeType; +import io.mosip.mimoto.service.CredentialRequestService; import io.mosip.mimoto.service.CredentialService; +import io.mosip.mimoto.service.CredentialVerifierService; import io.mosip.mimoto.service.IssuersService; -import io.mosip.mimoto.util.*; +import io.mosip.mimoto.service.CredentialPDFGeneratorService; +import io.mosip.mimoto.util.RestApiClient; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; import org.springframework.stereotype.Service; + import java.io.ByteArrayInputStream; -import static io.mosip.mimoto.exception.ErrorConstants.*; + +import static io.mosip.mimoto.exception.ErrorConstants.SIGNATURE_VERIFICATION_EXCEPTION; @Slf4j @Service @@ -29,7 +36,16 @@ public class CredentialServiceImpl implements CredentialService { ObjectMapper objectMapper; @Autowired - private CredentialUtilService credentialUtilService; + RestApiClient restApiClient; + + @Autowired + private CredentialPDFGeneratorService credentialPDFGeneratorService; + + @Autowired + private CredentialVerifierService credentialVerifierService; + + @Autowired + private CredentialRequestService credentialRequestService; @Override @@ -42,15 +58,27 @@ public ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String cred credentialIssuerConfiguration.getCredentialEndPoint(), credentialIssuerConfiguration.getCredentialConfigurationsSupported()); CredentialsSupportedResponse credentialsSupportedResponse = credentialIssuerWellKnownResponse.getCredentialConfigurationsSupported().get(credentialType); - VCCredentialRequest vcCredentialRequest = credentialUtilService.generateVCCredentialRequest(issuerDTO, credentialIssuerWellKnownResponse, credentialsSupportedResponse, response.getAccess_token(), null, null, false + VCCredentialRequest vcCredentialRequest = credentialRequestService.buildRequest(issuerDTO, credentialIssuerWellKnownResponse, credentialsSupportedResponse, response.getAccess_token(), null, null, false ); - VCCredentialResponse vcCredentialResponse = credentialUtilService.downloadCredential(credentialIssuerWellKnownResponse.getCredentialEndPoint(), vcCredentialRequest, response.getAccess_token()); - boolean verificationStatus = issuerId.toLowerCase().contains("mock") || credentialUtilService.verifyCredential(vcCredentialResponse); + VCCredentialResponse vcCredentialResponse = downloadCredential(credentialIssuerWellKnownResponse.getCredentialEndPoint(), vcCredentialRequest, response.getAccess_token()); + boolean verificationStatus = issuerId.toLowerCase().contains("mock") || credentialVerifierService.verify(vcCredentialResponse); if (verificationStatus) { String dataShareUrl = QRCodeType.OnlineSharing.equals(issuerDTO.getQr_code_type()) ? dataShareService.storeDataInDataShare(objectMapper.writeValueAsString(vcCredentialResponse), credentialValidity) : ""; - return credentialUtilService.generatePdfForVerifiableCredentials(credentialType, vcCredentialResponse, issuerDTO, credentialsSupportedResponse, dataShareUrl, credentialValidity, locale); + return credentialPDFGeneratorService.generatePdfForVerifiableCredentials(credentialType, vcCredentialResponse, issuerDTO, credentialsSupportedResponse, dataShareUrl, credentialValidity, locale); } throw new VCVerificationException(SIGNATURE_VERIFICATION_EXCEPTION.getErrorCode(), SIGNATURE_VERIFICATION_EXCEPTION.getErrorMessage()); } + + @Override + public VCCredentialResponse downloadCredential(String credentialEndpoint, VCCredentialRequest vcCredentialRequest, String accessToken) throws InvalidCredentialResourceException { + VCCredentialResponse vcCredentialResponse = restApiClient.postApi(credentialEndpoint, MediaType.APPLICATION_JSON, + vcCredentialRequest, VCCredentialResponse.class, accessToken); + log.debug("VC Credential Response is -> " + vcCredentialResponse); + if (vcCredentialResponse == null) + throw new InvalidCredentialResourceException("VC Credential Issue API not accessible"); + return vcCredentialResponse; + } + + } diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialVerifierImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialVerifierImpl.java new file mode 100644 index 000000000..81e8cc49d --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialVerifierImpl.java @@ -0,0 +1,30 @@ +package io.mosip.mimoto.service.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; +import io.mosip.mimoto.exception.VCVerificationException; +import io.mosip.mimoto.service.CredentialVerifierService; +import io.mosip.vercred.vcverifier.CredentialsVerifier; +import io.mosip.vercred.vcverifier.constants.CredentialFormat; +import io.mosip.vercred.vcverifier.data.VerificationResult; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class CredentialVerifierImpl implements CredentialVerifierService { + + @Autowired + private ObjectMapper objectMapper; + + private final CredentialsVerifier credentialsVerifier = new CredentialsVerifier(); + + public boolean verify(VCCredentialResponse response) throws JsonProcessingException, VCVerificationException { + String credentialString = objectMapper.writeValueAsString(response.getCredential()); + VerificationResult result = credentialsVerifier.verify(credentialString, CredentialFormat.LDP_VC); + if (!result.getVerificationStatus()) { + throw new VCVerificationException(result.getVerificationErrorCode().toLowerCase(), result.getVerificationMessage()); + } + return true; + } +} diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java index ae9ed3831..7ec56320c 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java @@ -1,23 +1,31 @@ package io.mosip.mimoto.service.impl; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.dbentity.CredentialMetadata; import io.mosip.mimoto.dbentity.VerifiableCredential; +import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; +import io.mosip.mimoto.dto.mimoto.CredentialsSupportedResponse; import io.mosip.mimoto.dto.mimoto.IssuerConfig; +import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; import io.mosip.mimoto.dto.resident.WalletCredentialResponseDTO; import io.mosip.mimoto.exception.*; import io.mosip.mimoto.repository.WalletCredentialsRepository; import io.mosip.mimoto.service.IssuersService; import io.mosip.mimoto.service.WalletCredentialService; +import io.mosip.mimoto.service.CredentialPDFGeneratorService; import io.mosip.mimoto.util.CredentialProcessor; -import io.mosip.mimoto.util.CredentialUtilService; import io.mosip.mimoto.util.EncryptionDecryptionUtil; import io.mosip.mimoto.util.WalletCredentialResponseDTOFactory; import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.InputStreamResource; import org.springframework.stereotype.Service; +import java.io.ByteArrayInputStream; import java.io.IOException; import java.util.List; import java.util.Set; @@ -34,20 +42,22 @@ public class WalletCredentialServiceImpl implements WalletCredentialService { private final WalletCredentialsRepository repository; private final IssuersService issuersService; private final CredentialProcessor credentialProcessor; - private final CredentialUtilService credentialUtilService; + private final ObjectMapper objectMapper; private final EncryptionDecryptionUtil encryptionDecryptionUtil; + private final CredentialPDFGeneratorService credentialPDFGeneratorService; @Autowired public WalletCredentialServiceImpl(WalletCredentialsRepository repository, IssuersService issuersService, CredentialProcessor credentialProcessor, - CredentialUtilService credentialUtilService, - EncryptionDecryptionUtil encryptionDecryptionUtil) { + ObjectMapper objectMapper, + EncryptionDecryptionUtil encryptionDecryptionUtil,CredentialPDFGeneratorService credentialPDFGeneratorService) { this.repository = repository; this.issuersService = issuersService; this.credentialProcessor = credentialProcessor; - this.credentialUtilService = credentialUtilService; + this.objectMapper = objectMapper; this.encryptionDecryptionUtil = encryptionDecryptionUtil; + this.credentialPDFGeneratorService = credentialPDFGeneratorService; } @Override @@ -104,8 +114,8 @@ public WalletCredentialResponseDTO fetchVerifiableCredential(String walletId, St try { String decryptedCredential = encryptionDecryptionUtil.decryptCredential(credential.getCredential(), base64Key); - WalletCredentialResponseDTO response = credentialUtilService.generateCredentialResponse( - decryptedCredential, credential.getCredentialMetadata(), locale); + + WalletCredentialResponseDTO response = generateCredentialResponse(decryptedCredential, credential.getCredentialMetadata(), locale); log.debug("Credential fetched successfully: {}", credentialId); return response; } catch (DecryptionException e) { @@ -132,4 +142,60 @@ private static Supplier getCredentialNotFoundExcept return new CredentialNotFoundException(RESOURCE_NOT_FOUND.getErrorCode(), RESOURCE_NOT_FOUND.getErrorMessage()); }; } + + private WalletCredentialResponseDTO generateCredentialResponse(String decryptedCredential, CredentialMetadata credentialMetadata, String locale) throws CredentialProcessingException { + log.info("Generating credential response for issuerId: {}, credentialType: {}", credentialMetadata.getIssuerId(), credentialMetadata.getCredentialType()); + try { + // Parse decrypted credential + VCCredentialResponse vcCredentialResponse = objectMapper.readValue(decryptedCredential, VCCredentialResponse.class); + + // Fetch issuer details + IssuerDTO issuerDTO = issuersService.getIssuerDetails(credentialMetadata.getIssuerId()); + + // Fetch issuer configuration + IssuerConfig issuerConfig = issuersService.getIssuerConfig(credentialMetadata.getIssuerId(), credentialMetadata.getCredentialType()); + + if (null == issuerConfig) { + log.error("Credentials supported response not found in wellknown for credentialType: {}", credentialMetadata.getCredentialType()); + throw new CredentialProcessingException(CREDENTIAL_FETCH_EXCEPTION.getErrorCode(), "Invalid credential type configuration"); + } + + // Find credentials supported response for the credential type + CredentialsSupportedResponse credentialsSupportedResponse = issuerConfig.getCredentialsSupportedResponse(); + if (credentialsSupportedResponse == null || !credentialsSupportedResponse.getCredentialDefinition().getType().containsAll(vcCredentialResponse.getCredential().getType())) { + log.error("Credentials supported response not found for credentialType: {}", credentialMetadata.getCredentialType()); + throw new CredentialProcessingException(CREDENTIAL_FETCH_EXCEPTION.getErrorCode(), "Invalid credential type configuration"); + } + + // Generate PDF + // keep the datashare url and credential validity as defaults in downloading VC as PDF as logged-in user + // This is because generatePdfForVerifiableCredentials will be used by both logged-in and non-logged-in users + ByteArrayInputStream pdfStream = credentialPDFGeneratorService.generatePdfForVerifiableCredentials( + credentialMetadata.getCredentialType(), + vcCredentialResponse, + issuerDTO, + credentialsSupportedResponse, + "", + "-1", + locale + ); + + // Construct response + String fileName = String.format("%s_credential.pdf", credentialMetadata.getCredentialType()); + return WalletCredentialResponseDTO.builder() + .fileName(fileName) + .fileContentStream(new InputStreamResource(pdfStream)) + .build(); + } catch (JsonProcessingException e) { + log.error("Failed to parse decrypted credential for issuerId: {}, credentialType: {}", credentialMetadata.getIssuerId(), credentialMetadata.getCredentialType(), e); + throw new CredentialProcessingException(CREDENTIAL_FETCH_EXCEPTION.getErrorCode(), "Failed to parse decrypted credential"); + } catch (ApiNotAccessibleException | IOException | AuthorizationServerWellknownResponseException | + InvalidWellknownResponseException | InvalidIssuerIdException e) { + log.error("Failed to fetch issuer details or configuration for issuerId: {}", credentialMetadata.getIssuerId(), e); + throw new CredentialProcessingException(CREDENTIAL_FETCH_EXCEPTION.getErrorCode(), "Failed to fetch issuer configuration"); + } catch (Exception e) { + log.error("Failed to generate PDF for credentialType: {}", credentialMetadata.getCredentialType(), e); + throw new CredentialProcessingException(CREDENTIAL_FETCH_EXCEPTION.getErrorCode(), "Failed to generate credential PDF"); + } + } } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java b/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java index ef17f5220..f6de0a20e 100644 --- a/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java +++ b/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java @@ -12,8 +12,10 @@ import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; import io.mosip.mimoto.exception.*; import io.mosip.mimoto.repository.WalletCredentialsRepository; +import io.mosip.mimoto.service.CredentialRequestService; +import io.mosip.mimoto.service.CredentialService; +import io.mosip.mimoto.service.CredentialVerifierService; import io.mosip.mimoto.service.IssuersService; -import io.mosip.mimoto.service.impl.DataShareServiceImpl; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -29,27 +31,31 @@ @Component public class CredentialProcessor { - private final CredentialUtilService credentialUtilService; - private final DataShareServiceImpl dataShareService; private final ObjectMapper objectMapper; private final EncryptionDecryptionUtil encryptionDecryptionUtil; private final WalletCredentialsRepository walletCredentialsRepository; private final IssuersService issuersService; + private final CredentialVerifierService credentialVerifierService; + private final CredentialRequestService credentialRequestService; + private final CredentialService credentialService; @Autowired public CredentialProcessor( - CredentialUtilService credentialUtilService, - DataShareServiceImpl dataShareService, ObjectMapper objectMapper, EncryptionDecryptionUtil encryptionDecryptionUtil, WalletCredentialsRepository walletCredentialsRepository, - IssuersService issuersService) { - this.credentialUtilService = credentialUtilService; - this.dataShareService = dataShareService; + IssuersService issuersService, + CredentialVerifierService credentialVerifierService, + CredentialRequestService credentialRequestService, + CredentialService credentialService) { + this.objectMapper = objectMapper; this.encryptionDecryptionUtil = encryptionDecryptionUtil; this.walletCredentialsRepository = walletCredentialsRepository; this.issuersService = issuersService; + this.credentialVerifierService = credentialVerifierService; + this.credentialRequestService = credentialRequestService; + this.credentialService = credentialService; } /** @@ -106,7 +112,7 @@ public VerifiableCredentialResponseDTO processAndStoreCredential( // Generate credential request VCCredentialRequest vcCredentialRequest; try { - vcCredentialRequest = credentialUtilService.generateVCCredentialRequest( + vcCredentialRequest = credentialRequestService.buildRequest( issuerConfig.getIssuerDTO(), issuerConfig.getWellKnownResponse(), issuerConfig.getCredentialsSupportedResponse(), tokenResponse.getAccess_token(), walletId, base64Key, true); @@ -120,7 +126,7 @@ public VerifiableCredentialResponseDTO processAndStoreCredential( // Download credential VCCredentialResponse vcCredentialResponse; try { - vcCredentialResponse = credentialUtilService.downloadCredential( + vcCredentialResponse = credentialService.downloadCredential( issuerConfig.getWellKnownResponse().getCredentialEndPoint(), vcCredentialRequest, tokenResponse.getAccess_token()); } catch (Exception e) { @@ -134,7 +140,7 @@ public VerifiableCredentialResponseDTO processAndStoreCredential( boolean verificationStatus; try { verificationStatus = issuerId.toLowerCase().contains("mock") || - credentialUtilService.verifyCredential(vcCredentialResponse); + credentialVerifierService.verify(vcCredentialResponse); } catch (VCVerificationException | JsonProcessingException e) { log.error("Credential verification failed for issuerId: {}, credentialConfigurationId: {}", issuerId, credentialConfigurationId, e); throw new VCVerificationException( diff --git a/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java new file mode 100644 index 000000000..857251bfd --- /dev/null +++ b/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java @@ -0,0 +1,237 @@ +package io.mosip.mimoto.service; + +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.dto.BackgroundImageDTO; +import io.mosip.mimoto.dto.DisplayDTO; +import io.mosip.mimoto.dto.IssuerDTO; +import io.mosip.mimoto.dto.LogoDTO; +import io.mosip.mimoto.dto.mimoto.*; +import io.mosip.mimoto.dto.openid.presentation.PresentationDefinitionDTO; +import io.mosip.mimoto.model.QRCodeType; +import io.mosip.mimoto.service.impl.PresentationServiceImpl; +import io.mosip.mimoto.util.Utilities; +import io.mosip.pixelpass.PixelPass; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockedStatic; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.test.util.ReflectionTestUtils; + +import java.io.ByteArrayInputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.mockStatic; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +class CredentialPDFGeneratorServiceTest { + + @Mock private ObjectMapper objectMapper; + @Mock private PresentationServiceImpl presentationService; + @Mock private Utilities utilities; + @Mock private PixelPass pixelPass; + + @InjectMocks + private CredentialPDFGeneratorService credentialPDFGeneratorService; + + private VCCredentialResponse vcCredentialResponse; + private IssuerDTO issuerDTO; + private CredentialsSupportedResponse credentialsSupportedResponse; + + @BeforeEach + void setUp() { + ReflectionTestUtils.setField(credentialPDFGeneratorService, "ovpQRDataPattern", "test-pattern-%s-%s"); + ReflectionTestUtils.setField(credentialPDFGeneratorService, "qrCodeHeight", 500); + ReflectionTestUtils.setField(credentialPDFGeneratorService, "qrCodeWidth", 500); + ReflectionTestUtils.setField(credentialPDFGeneratorService, "allowedQRDataSizeLimit", 2000); + ReflectionTestUtils.setField(credentialPDFGeneratorService, "pixelPass", pixelPass); + + setupTestData(); + } + + private void setupTestData() { + Map subjectData = new HashMap<>(); + subjectData.put("name", "John Doe"); + subjectData.put("dateOfBirth", "1990-01-01"); + subjectData.put("face", "base64-encoded-image"); + + VCCredentialProperties vcProperties = VCCredentialProperties.builder() + .credentialSubject(subjectData) + .type(List.of("VerifiableCredential")) + .build(); + + vcCredentialResponse = VCCredentialResponse.builder() + .format("ldp_vc") + .credential(vcProperties) + .build(); + + issuerDTO = new IssuerDTO(); + issuerDTO.setIssuer_id("test-issuer"); + issuerDTO.setQr_code_type(QRCodeType.OnlineSharing); + + DisplayDTO display = new DisplayDTO(); + display.setName("Issuer Display Name"); + display.setTitle("Issuer Title"); + display.setDescription("Issuer Description"); + display.setLanguage("en"); + + LogoDTO logo = new LogoDTO(); + logo.setUrl("https://example.com/logo.png"); + display.setLogo(logo); + + issuerDTO.setDisplay(List.of(display)); + + credentialsSupportedResponse = new CredentialsSupportedResponse(); + + Map credentialSubjectMap = new HashMap<>(); + credentialSubjectMap.put("name", createDisplay("Full Name")); + credentialSubjectMap.put("dateOfBirth", createDisplay("Date of Birth")); + + CredentialDefinitionResponseDto definition = new CredentialDefinitionResponseDto(); + definition.setCredentialSubject(credentialSubjectMap); + credentialsSupportedResponse.setCredentialDefinition(definition); + credentialsSupportedResponse.setOrder(new ArrayList<>(List.of("name", "dateOfBirth"))); + + CredentialSupportedDisplayResponse credDisplay = new CredentialSupportedDisplayResponse(); + credDisplay.setBackgroundColor("#FFFFFF"); + credDisplay.setTextColor("#000000"); + credDisplay.setName("Test Credential"); + BackgroundImageDTO bgImage = new BackgroundImageDTO(); + bgImage.setUri("https://example.com/bg.png"); + credDisplay.setBackgroundImage(bgImage); + + credentialsSupportedResponse.setDisplay(List.of(credDisplay)); + } + + private CredentialDisplayResponseDto createDisplay(String name) { + CredentialDisplayResponseDto dto = new CredentialDisplayResponseDto(); + CredentialIssuerDisplayResponse display = new CredentialIssuerDisplayResponse(); + display.setName(name); + display.setLocale("en"); + dto.setDisplay(List.of(display)); + return dto; + } + + @Test + void testGeneratePdfForVerifiableCredentials() throws Exception { + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())) + .thenReturn("Test"); + PresentationDefinitionDTO presentationDef = new PresentationDefinitionDTO(); + when(presentationService.constructPresentationDefinition(any())) + .thenReturn(presentationDef); + when(objectMapper.writeValueAsString(presentationDef)) + .thenReturn("{\"presentation\":\"definition\"}"); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredentials( + "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, + "https://example.com/share", "2025-12-31", "en"); + + assertNotNull(result); + } + + @Test + void testGeneratePdfForEmbeddedVCQR() throws Exception { + issuerDTO.setQr_code_type(QRCodeType.EmbeddedVC); + when(objectMapper.writeValueAsString(any())).thenReturn("{\"credential\":\"data\"}"); + when(pixelPass.generateQRData(anyString(), anyString())).thenReturn("generated-qr-data"); + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())) + .thenReturn("Test"); + + + try (MockedStatic mocked = mockStatic(Utilities.class)) { + mocked.when(() -> Utilities.encodeToString(any(), anyString())) + .thenReturn("base64-encoded-qr"); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredentials( + "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, + "", "", "en"); + + assertNotNull(result); + } + } + + @Test + void testHandleMapWithListValue() throws Exception { + Map skills = new HashMap<>(); + skills.put("skills", List.of("Java", "Spring")); + vcCredentialResponse.getCredential().setCredentialSubject(skills); + credentialsSupportedResponse.getCredentialDefinition().getCredentialSubject() + .put("skills", createDisplay("Skills")); + credentialsSupportedResponse.setOrder(List.of("skills")); + + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())) + .thenReturn("Test"); + PresentationDefinitionDTO presentationDef = new PresentationDefinitionDTO(); + when(presentationService.constructPresentationDefinition(any())) + .thenReturn(presentationDef); + when(objectMapper.writeValueAsString(presentationDef)) + .thenReturn("{\"presentation\":\"definition\"}"); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredentials( + "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, + "https://example.com/share", "", "en"); + + assertNotNull(result); + } + + @Test + void testNullFaceImageHandling() throws Exception { + Map mutableSubject = new HashMap<>(vcCredentialResponse.getCredential().getCredentialSubject()); + mutableSubject.remove("face"); + vcCredentialResponse.getCredential().setCredentialSubject(mutableSubject); + + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())) + .thenReturn("Test"); + PresentationDefinitionDTO presentationDef = new PresentationDefinitionDTO(); + when(presentationService.constructPresentationDefinition(any())) + .thenReturn(presentationDef); + when(objectMapper.writeValueAsString(presentationDef)) + .thenReturn("{\"presentation\":\"definition\"}"); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredentials( + "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, + "https://example.com/share", "", "en"); + + assertNotNull(result); + } + + @Test + void testGeneratePdfWithNullOrder() throws Exception { + credentialsSupportedResponse.setOrder(null); + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())) + .thenReturn("Test"); + + PresentationDefinitionDTO presentationDef = new PresentationDefinitionDTO(); + when(presentationService.constructPresentationDefinition(any())) + .thenReturn(presentationDef); + when(objectMapper.writeValueAsString(presentationDef)) + .thenReturn("{\"presentation\":\"definition\"}"); + + try (MockedStatic mocked = mockStatic(Utilities.class)) { + mocked.when(() -> Utilities.encodeToString(any(), anyString())) + .thenReturn("base64-encoded-qr"); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredentials( + "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, + "https://example.com/share", "", "en"); + + assertNotNull(result); + } + } + + @Test + void testInitMethod() { + CredentialPDFGeneratorService service = new CredentialPDFGeneratorService(); + service.init(); + assertNotNull(ReflectionTestUtils.getField(service, "pixelPass")); + } +} diff --git a/src/test/java/io/mosip/mimoto/service/CredentialServiceVCCredentialRequestTest.java b/src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java similarity index 87% rename from src/test/java/io/mosip/mimoto/service/CredentialServiceVCCredentialRequestTest.java rename to src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java index ce65a0d2b..801a8d66e 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialServiceVCCredentialRequestTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java @@ -2,6 +2,7 @@ import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.mimoto.*; +import io.mosip.mimoto.service.impl.CredentialRequestServiceImpl; import io.mosip.mimoto.util.*; import org.junit.Before; import org.junit.Test; @@ -17,9 +18,9 @@ import static org.mockito.ArgumentMatchers.any; @RunWith(MockitoJUnitRunner.class) -public class CredentialServiceVCCredentialRequestTest { +public class CredentialRequestServiceTest { @InjectMocks - CredentialUtilService credentialUtilService; + CredentialRequestServiceImpl credentialRequestBuilder; @Mock JoseUtil joseUtil; @@ -43,7 +44,7 @@ public void shouldHandleNullContextInCredentialSupportedResponse() throws Except Mockito.when(joseUtil.generateJwt(any(), any(), any())).thenReturn("jwt"); - VCCredentialRequest result = credentialUtilService.generateVCCredentialRequest( + VCCredentialRequest result = credentialRequestBuilder.buildRequest( issuerDTO, issuerWellKnownResponse, credentialsSupportedResponse, @@ -54,7 +55,7 @@ public void shouldHandleNullContextInCredentialSupportedResponse() throws Except ); assertNotNull(result.getCredentialDefinition().getContext()); - assertEquals("https://www.w3.org/2018/credentials/v1", result.getCredentialDefinition().getContext().get(0)); + assertEquals("https://www.w3.org/2018/credentials/v1", result.getCredentialDefinition().getContext().getFirst()); } @Test @@ -69,7 +70,7 @@ public void shouldHandleEmptyContextInCredentialSupportedResponse() throws Excep Mockito.when(joseUtil.generateJwt(any(), any(), any())).thenReturn("jwt"); - VCCredentialRequest result = credentialUtilService.generateVCCredentialRequest( + VCCredentialRequest result = credentialRequestBuilder.buildRequest( issuerDTO, issuerWellKnownResponse, credentialsSupportedResponse, @@ -80,7 +81,7 @@ public void shouldHandleEmptyContextInCredentialSupportedResponse() throws Excep ); assertNotNull(result.getCredentialDefinition().getContext()); - assertEquals("https://www.w3.org/2018/credentials/v1", result.getCredentialDefinition().getContext().get(0)); + assertEquals("https://www.w3.org/2018/credentials/v1", result.getCredentialDefinition().getContext().getFirst()); } @@ -96,7 +97,7 @@ public void shouldHandleExistingContextWithSpecificValue() throws Exception { Mockito.when(joseUtil.generateJwt(any(), any(), any())).thenReturn("jwt"); - VCCredentialRequest result = credentialUtilService.generateVCCredentialRequest( + VCCredentialRequest result = credentialRequestBuilder.buildRequest( issuerDTO, issuerWellKnownResponse, credentialsSupportedResponse, @@ -107,7 +108,7 @@ public void shouldHandleExistingContextWithSpecificValue() throws Exception { ); assertNotNull(result.getCredentialDefinition().getContext()); - assertEquals("https://www.w3.org/ns/credentials/v2", result.getCredentialDefinition().getContext().get(0)); + assertEquals("https://www.w3.org/ns/credentials/v2", result.getCredentialDefinition().getContext().getFirst()); } } \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java index 86f73b636..c903b5984 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java @@ -1,17 +1,13 @@ package io.mosip.mimoto.service; -import com.fasterxml.jackson.databind.ObjectMapper; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.*; -import io.mosip.mimoto.exception.*; +import io.mosip.mimoto.exception.VCVerificationException; import io.mosip.mimoto.model.QRCodeType; import io.mosip.mimoto.service.impl.CredentialServiceImpl; -import io.mosip.mimoto.service.impl.DataShareServiceImpl; -import io.mosip.mimoto.service.impl.IdpServiceImpl; import io.mosip.mimoto.service.impl.IssuersServiceImpl; -import io.mosip.mimoto.util.*; -import io.mosip.vercred.vcverifier.CredentialsVerifier; +import io.mosip.mimoto.util.RestApiClient; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; import org.junit.Before; @@ -23,9 +19,9 @@ import org.mockito.junit.MockitoJUnitRunner; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.HttpEntity; +import org.springframework.http.MediaType; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; -import org.springframework.web.client.RestTemplate; import java.io.ByteArrayInputStream; import java.io.StringWriter; @@ -35,7 +31,8 @@ import static io.mosip.mimoto.util.TestUtilities.*; import static org.junit.Assert.*; -import static org.mockito.ArgumentMatchers.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) @@ -43,40 +40,25 @@ public class CredentialServiceTest { @Mock - CredentialsVerifier credentialsVerifier; + CredentialRequestService credentialRequestService; @Mock - ObjectMapper objectMapper; - - @InjectMocks - CredentialServiceImpl credentialService; - - @Mock - CredentialUtilService credentialUtilService; - - @Mock - IssuersServiceImpl issuersService; - - @Mock - RestTemplate restTemplate; - - @Mock - IdpServiceImpl idpService; + CredentialVerifierService credentialVerifierService; @Mock RestApiClient restApiClient; - @Mock - JoseUtil joseUtil; + @InjectMocks + CredentialServiceImpl credentialService; @Mock - Utilities utilities; + CredentialPDFGeneratorService credentialUtilService; @Mock - DataShareServiceImpl dataShareService; + IssuersServiceImpl issuersService; TokenResponseDTO expectedTokenResponse; - String tokenEndpoint, issuerId, expectedExceptionMsg; + String tokenEndpoint, issuerId; IssuerDTO issuerDTO; HttpEntity> mockRequest; CredentialIssuerConfiguration issuerConfig; @@ -115,15 +97,19 @@ public void shouldParseHtmlStringToDocument() { public void shouldThrowExceptionIfDownloadedVCSignatureVerificationFailed() throws Exception { Mockito.when(issuersService.getIssuerDetails(issuerId)).thenReturn(issuerDTO); Mockito.when(issuersService.getIssuerConfiguration(issuerId)).thenReturn(issuerConfig); - when(credentialUtilService.generateVCCredentialRequest(any(IssuerDTO.class), + when(credentialRequestService.buildRequest(any(IssuerDTO.class), any(CredentialIssuerWellKnownResponse.class), any(CredentialsSupportedResponse.class), any(String.class), any(), any(), eq(false))).thenReturn(getVCCredentialRequestDTO()); VCCredentialResponse vcCredentialResponse = getVCCredentialResponseDTO("CredentialType1"); - when(credentialUtilService.downloadCredential(any(String.class), + when(restApiClient.postApi( + any(String.class), + any(MediaType.class), any(VCCredentialRequest.class), - any(String.class))).thenReturn(vcCredentialResponse); - when(credentialUtilService.verifyCredential(vcCredentialResponse)).thenReturn(false); + eq(VCCredentialResponse.class), + any(String.class) + )).thenReturn(vcCredentialResponse); + when(credentialVerifierService.verify(vcCredentialResponse)).thenReturn(false); VCVerificationException actualException = assertThrows(VCVerificationException.class, () -> credentialService.downloadCredentialAsPDF(issuerId, "CredentialType1", expectedTokenResponse, "once", "en")); @@ -134,15 +120,19 @@ public void shouldThrowExceptionIfDownloadedVCSignatureVerificationFailed() thro public void shouldReturnDownloadedVCAsPDFIfSignatureVerificationIsSuccessful() throws Exception { Mockito.when(issuersService.getIssuerDetails(issuerId)).thenReturn(issuerDTO); Mockito.when(issuersService.getIssuerConfiguration(issuerId)).thenReturn(issuerConfig); - when(credentialUtilService.generateVCCredentialRequest(any(IssuerDTO.class), + when(credentialRequestService.buildRequest(any(IssuerDTO.class), any(CredentialIssuerWellKnownResponse.class), any(CredentialsSupportedResponse.class), any(String.class), any(), any(), eq(false))).thenReturn(getVCCredentialRequestDTO()); VCCredentialResponse vcCredentialResponse = getVCCredentialResponseDTO("CredentialType1"); - when(credentialUtilService.downloadCredential(any(String.class), + when(restApiClient.postApi( + any(String.class), + any(MediaType.class), any(VCCredentialRequest.class), - any(String.class))).thenReturn(vcCredentialResponse); - when(credentialUtilService.verifyCredential(vcCredentialResponse)).thenReturn(true); + eq(VCCredentialResponse.class), + any(String.class) + )).thenReturn(vcCredentialResponse); + when(credentialVerifierService.verify(vcCredentialResponse)).thenReturn(true); issuerDTO.setQr_code_type(QRCodeType.None); ByteArrayInputStream expectedPDFByteArray = generatePdfFromHTML(); diff --git a/src/test/java/io/mosip/mimoto/service/CredentialUtilServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialUtilServiceTest.java deleted file mode 100644 index dc72677a8..000000000 --- a/src/test/java/io/mosip/mimoto/service/CredentialUtilServiceTest.java +++ /dev/null @@ -1,183 +0,0 @@ -package io.mosip.mimoto.service; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import io.mosip.mimoto.dto.IssuerDTO; -import io.mosip.mimoto.dto.mimoto.*; -import io.mosip.mimoto.exception.VCVerificationException; -import io.mosip.mimoto.model.QRCodeType; -import io.mosip.mimoto.service.impl.IssuersServiceImpl; -import io.mosip.mimoto.util.*; -import io.mosip.vercred.vcverifier.CredentialsVerifier; -import io.mosip.vercred.vcverifier.constants.CredentialFormat; -import io.mosip.vercred.vcverifier.data.VerificationResult; -import lombok.extern.slf4j.Slf4j; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Mockito; -import org.mockito.junit.MockitoJUnitRunner; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.http.MediaType; - -import java.io.ByteArrayInputStream; -import java.util.List; -import java.util.Map; - -import static io.mosip.mimoto.util.TestUtilities.*; -import static org.junit.Assert.*; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; - -@RunWith(MockitoJUnitRunner.class) -@SpringBootTest -@Slf4j -public class CredentialUtilServiceTest { - @InjectMocks - CredentialUtilService credentialUtilService; - - @Mock - IssuersServiceImpl issuersService; - - @Mock - RestApiClient restApiClient; - @Mock - JoseUtil joseUtil; - @Mock - CredentialsVerifier credentialsVerifier; - @Mock - ObjectMapper objectMapper; - - @Mock - Utilities utilities; - - IssuerDTO issuerDTO; - - CredentialIssuerConfiguration issuerConfig; - - String expectedExceptionMsg, issuerId; - - - - @Before - public void setUp() throws Exception { - issuerId = "issuer1"; - issuerDTO = getIssuerConfigDTO(issuerId); - issuerConfig = getCredentialIssuerConfigurationResponseDto(issuerId, "CredentialType1", List.of()); - } - - @Test - public void shouldThrowExceptionOnFetchingCredentialFromCredentialEndpointFailure() { - CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupportedResponse("CredentialType1"); - CredentialIssuerWellKnownResponse issuerWellKnownResponse = getCredentialIssuerWellKnownResponseDto(issuerId, Map.of("CredentialType1", credentialsSupportedResponse)); - VCCredentialRequest vcCredentialRequest = getVCCredentialRequestDTO(); - Mockito.when(restApiClient.postApi(issuerWellKnownResponse.getCredentialEndPoint(), MediaType.APPLICATION_JSON, vcCredentialRequest, VCCredentialResponse.class, "test-access-token")).thenReturn(null); - String credentialEndpoint = issuerWellKnownResponse.getCredentialEndPoint(); - expectedExceptionMsg = "resource_not_found --> VC Credential Issue API not accessible"; - - - RuntimeException actualException = assertThrows(RuntimeException.class, () -> { - credentialUtilService.downloadCredential(credentialEndpoint, vcCredentialRequest, "test-access-token"); - }); - - assertEquals(expectedExceptionMsg, actualException.getMessage()); - } - - @Test - public void shouldReturnVCCredentialWhenCallingCredentialEndpointWithCredentialRequest() { - CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupportedResponse("CredentialType1"); - CredentialIssuerWellKnownResponse issuerWellKnownResponse = getCredentialIssuerWellKnownResponseDto(issuerId, Map.of("CredentialType1", credentialsSupportedResponse)); - VCCredentialRequest vcCredentialRequest = getVCCredentialRequestDTO(); - VCCredentialResponse expectedCredentialResponse = getVCCredentialResponseDTO("RSASignature2020"); - Mockito.when(restApiClient.postApi(issuerWellKnownResponse.getCredentialEndPoint(), MediaType.APPLICATION_JSON, vcCredentialRequest, VCCredentialResponse.class, "test-access-token")).thenReturn(expectedCredentialResponse); - - VCCredentialResponse actualCredentialResponse = credentialUtilService.downloadCredential(issuerWellKnownResponse.getCredentialEndPoint(), vcCredentialRequest, "test-access-token"); - - assertEquals(expectedCredentialResponse, actualCredentialResponse); - } - - @Test - public void shouldGenerateVCCredentialRequestForProvidedIssuerAndCredentialType() throws Exception { - CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupportedResponse("CredentialType1"); - CredentialIssuerWellKnownResponse issuerWellKnownResponse = getCredentialIssuerWellKnownResponseDto(issuerId, Map.of("CredentialType1", credentialsSupportedResponse)); - VCCredentialRequest expectedVCCredentialRequest = getVCCredentialRequestDTO(); - Mockito.when(joseUtil.generateJwt(any(String.class), any(String.class), any(String.class))).thenReturn("jwt"); - - VCCredentialRequest actualVCCredentialRequest = credentialUtilService.generateVCCredentialRequest(issuerDTO, issuerWellKnownResponse, credentialsSupportedResponse, "test-access-token", "walletId", "walletKey", false); - - assertEquals(expectedVCCredentialRequest, actualVCCredentialRequest); - } - - @Test - public void shouldThrowExceptionWhenInvalidAlgoIsProvidedForGeneratingJWTDuringCredentialRequestGeneration() throws Exception { - CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupportedResponse("CredentialType1"); - CredentialIssuerWellKnownResponse issuerWellKnownResponse = getCredentialIssuerWellKnownResponseDto(issuerId, Map.of("CredentialType1", credentialsSupportedResponse)); - Mockito.when(joseUtil.generateJwt(any(String.class), any(String.class), any(String.class))).thenThrow(new AssertionError("Unexpected algorithm type: dfs")); - - AssertionError actualError = assertThrows(AssertionError.class, () -> { - credentialUtilService.generateVCCredentialRequest(issuerDTO, issuerWellKnownResponse, credentialsSupportedResponse, "test-access-token", "walletId", "walletKey", false); - }); - - assertEquals("Unexpected algorithm type: dfs", actualError.getMessage()); - } - - @Test - public void shouldReturnTrueIfAValidCredentialIsPassedForVerification() throws VCVerificationException, JsonProcessingException { - VCCredentialResponse vc = TestUtilities.getVCCredentialResponseDTO("ed25519Signature2020"); - VerificationResult verificationResult = new VerificationResult(true, "", ""); - Mockito.when(credentialsVerifier.verify(any(String.class), eq(CredentialFormat.LDP_VC))).thenReturn(verificationResult); - Mockito.when(objectMapper.writeValueAsString(vc.getCredential())).thenReturn("vc"); - - Boolean verificationStatus = credentialUtilService.verifyCredential(vc); - - assertTrue(verificationStatus); - } - - @Test - public void shouldThrowExceptionIfInvalidCredentialIsPassedForVerification() throws VCVerificationException, JsonProcessingException { - VCCredentialResponse vc = TestUtilities.getVCCredentialResponseDTO("ed25519Signature2020"); - VerificationResult verificationResult = new VerificationResult(false, "Verification failed for the provided credentials", "Verification Failed!"); - Mockito.when(credentialsVerifier.verify(any(String.class), eq(CredentialFormat.LDP_VC))).thenReturn(verificationResult); - Mockito.when(objectMapper.writeValueAsString(vc.getCredential())).thenReturn("vc"); - expectedExceptionMsg = "verification failed! --> Verification failed for the provided credentials"; - - VCVerificationException actualException = assertThrows(VCVerificationException.class, () -> - credentialUtilService.verifyCredential(vc) - ); - - assertEquals(expectedExceptionMsg, actualException.getMessage()); - } - - @Test - public void shouldThrowExceptionIfDownloadedResponseContainsSigningAlgoNotSupportedByMimoto() { - CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupportedResponse("CredentialType1"); - ProofTypesSupported proofTypesSupported = new ProofTypesSupported(); - proofTypesSupported.setProofSigningAlgValuesSupported(List.of("ps256")); - credentialsSupportedResponse.setProofTypesSupported(Map.of("jwt", proofTypesSupported)); - CredentialIssuerWellKnownResponse issuerWellKnownResponse = getCredentialIssuerWellKnownResponseDto(issuerId, Map.of("CredentialType1", credentialsSupportedResponse)); - - IllegalArgumentException actualError = assertThrows(IllegalArgumentException.class, () -> { - credentialUtilService.generateVCCredentialRequest(issuerDTO, issuerWellKnownResponse, credentialsSupportedResponse, "test-access-token", "walletId", "walletKey", true); - }); - - assertEquals("Unsupported signing algorithm: ps256", actualError.getMessage()); - } - - @Test - public void shouldSuccessfullyGeneratePdfForVerifiableCredential() throws Exception { - VCCredentialResponse vcCredentialResponse = getVCCredentialResponseDTO("CredentialType1"); - issuerDTO.setQr_code_type(QRCodeType.None); - Mockito.when(utilities.getCredentialSupportedTemplateString(issuerDTO.getIssuer_id(), "CredentialType1")).thenReturn("

PDF

"); - ByteArrayInputStream expectedPDFByteArray = generatePdfFromHTML(); - - ByteArrayInputStream actualPDFByteArray = - credentialUtilService.generatePdfForVerifiableCredentials("CredentialType1", vcCredentialResponse, issuerDTO, issuerConfig.getCredentialConfigurationsSupported().get("CredentialType1"), "https://datashare_url", "once", "en"); - - String expectedText = extractTextFromPdf(expectedPDFByteArray); - String actualText = extractTextFromPdf(actualPDFByteArray); - - assertEquals(expectedText, actualText); - } -} diff --git a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java index e64f3ff82..a1062612b 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java @@ -1,19 +1,16 @@ package io.mosip.mimoto.service; +import com.fasterxml.jackson.databind.ObjectMapper; import io.mosip.mimoto.dbentity.CredentialMetadata; import io.mosip.mimoto.dbentity.VerifiableCredential; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; -import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; -import io.mosip.mimoto.dto.mimoto.CredentialsSupportedResponse; -import io.mosip.mimoto.dto.mimoto.IssuerConfig; -import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; +import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.dto.resident.WalletCredentialResponseDTO; import io.mosip.mimoto.exception.*; import io.mosip.mimoto.repository.WalletCredentialsRepository; import io.mosip.mimoto.service.impl.WalletCredentialServiceImpl; import io.mosip.mimoto.util.CredentialProcessor; -import io.mosip.mimoto.util.CredentialUtilService; import io.mosip.mimoto.util.EncryptionDecryptionUtil; import io.mosip.mimoto.util.WalletCredentialResponseDTOFactory; import org.junit.Before; @@ -23,11 +20,11 @@ import org.mockito.Mock; import org.mockito.MockedStatic; import org.mockito.junit.MockitoJUnitRunner; -import org.springframework.core.io.InputStreamResource; import java.io.ByteArrayInputStream; import java.time.Instant; import java.util.List; +import java.util.Map; import java.util.Optional; import static io.mosip.mimoto.exception.ErrorConstants.*; @@ -47,11 +44,14 @@ public class WalletCredentialServiceTest { @Mock private IssuersService issuersService; + @Mock + private ObjectMapper objectMapper; + @Mock private CredentialProcessor credentialProcessor; @Mock - private CredentialUtilService credentialUtilService; + private CredentialPDFGeneratorService credentialPDFGeneratorService; @Mock private EncryptionDecryptionUtil encryptionDecryptionUtil; @@ -199,25 +199,88 @@ public void shouldHandleIssuerConfigFetchFailure() throws Exception { @Test public void shouldFetchVerifiableCredentialSuccessfully() throws Exception { - String decryptedCredential = "{\"credential\":\"test\"}"; - WalletCredentialResponseDTO expectedResponse = new WalletCredentialResponseDTO(); - expectedResponse.setFileName(credentialType); - expectedResponse.setFileContentStream(new InputStreamResource(new ByteArrayInputStream("PDF Content".getBytes()))); + // Mocked VC JSON as String + VCCredentialResponse vcResponse = VCCredentialResponse.builder() + .format("ldp_vc") + .credential(VCCredentialProperties.builder() + .type(List.of(credentialType)) + .issuer("issuer123") + .issuanceDate("2024-01-01T00:00:00Z") + .credentialSubject(Map.of("name", "John Doe")) + .build()) + .build(); + + String decryptedCredentialJson = new ObjectMapper().writeValueAsString(vcResponse); + + // Setup repository + when(walletCredentialsRepository.findByIdAndWalletId(credentialId, walletId)) + .thenReturn(Optional.of(verifiableCredential)); + + // Setup decryption + when(encryptionDecryptionUtil.decryptCredential("encryptedCredential", base64Key)) + .thenReturn(decryptedCredentialJson); + when(objectMapper.readValue(decryptedCredentialJson, VCCredentialResponse.class)) + .thenReturn(vcResponse); + // IssuerDTO + IssuerDTO issuerDTO = new IssuerDTO(); + issuerDTO.setIssuer_id(issuerId); + when(issuersService.getIssuerDetails(issuerId)).thenReturn(issuerDTO); - when(walletCredentialsRepository.findByIdAndWalletId(credentialId, walletId)).thenReturn(Optional.of(verifiableCredential)); - when(encryptionDecryptionUtil.decryptCredential("encryptedCredential", base64Key)).thenReturn(decryptedCredential); - when(credentialUtilService.generateCredentialResponse(eq(decryptedCredential), any(), eq(locale))).thenReturn(expectedResponse); + // Credential Definition that matches VC type + CredentialDefinitionResponseDto credentialDefinition = new CredentialDefinitionResponseDto(); + credentialDefinition.setType(List.of(credentialType)); + credentialDefinition.setCredentialSubject(Map.of()); // safe stub + credentialDefinition.setContext(List.of("https://www.w3.org/2018/credentials/v1")); + + // Full IssuerConfig + CredentialsSupportedResponse supportedResponse = new CredentialsSupportedResponse(); + supportedResponse.setCredentialDefinition(credentialDefinition); + supportedResponse.setProofTypesSupported(Map.of("ldp_vc", new ProofTypesSupported())); + supportedResponse.setDisplay(List.of()); + supportedResponse.setFormat("ldp_vc"); + supportedResponse.setScope("scope"); + IssuerConfig issuerConfig = new IssuerConfig(issuerDTO, new CredentialIssuerWellKnownResponse(), supportedResponse); + + when(issuersService.getIssuerConfig(issuerId, credentialType)).thenReturn(issuerConfig); + + // Setup PDF stream + ByteArrayInputStream pdfContent = new ByteArrayInputStream("PDF Content".getBytes()); + when(credentialPDFGeneratorService.generatePdfForVerifiableCredentials( + eq(credentialType), + any(VCCredentialResponse.class), + eq(issuerDTO), + eq(supportedResponse), + eq(""), + eq("-1"), + eq(locale) + )).thenReturn(pdfContent); + + // Run WalletCredentialResponseDTO actualResponse = walletCredentialService.fetchVerifiableCredential(walletId, credentialId, base64Key, locale); + // Assert assertNotNull(actualResponse); - assertEquals(expectedResponse, actualResponse); - assertEquals(credentialType, actualResponse.getFileName()); + assertEquals(String.format("%s_credential.pdf", credentialType), actualResponse.getFileName()); + assertNotNull(actualResponse.getFileContentStream()); + verify(walletCredentialsRepository).findByIdAndWalletId(credentialId, walletId); verify(encryptionDecryptionUtil).decryptCredential("encryptedCredential", base64Key); - verify(credentialUtilService).generateCredentialResponse(eq(decryptedCredential), any(), eq(locale)); + verify(issuersService).getIssuerDetails(issuerId); + verify(issuersService).getIssuerConfig(issuerId, credentialType); + verify(credentialPDFGeneratorService).generatePdfForVerifiableCredentials( + eq(credentialType), + any(VCCredentialResponse.class), + eq(issuerDTO), + eq(supportedResponse), + eq(""), + eq("-1"), + eq(locale) + ); } + + @Test public void shouldThrowCredentialNotFoundException() { when(walletCredentialsRepository.findByIdAndWalletId(credentialId, walletId)).thenReturn(Optional.empty()); @@ -228,7 +291,7 @@ public void shouldThrowCredentialNotFoundException() { assertEquals(RESOURCE_NOT_FOUND.getErrorCode(), exception.getErrorCode()); assertEquals(RESOURCE_NOT_FOUND.getErrorCode() +" --> "+RESOURCE_NOT_FOUND.getErrorMessage(), exception.getMessage()); verify(walletCredentialsRepository).findByIdAndWalletId(credentialId, walletId); - verifyNoInteractions(encryptionDecryptionUtil, credentialUtilService); + verifyNoInteractions(encryptionDecryptionUtil, credentialPDFGeneratorService); } @Test @@ -243,7 +306,7 @@ public void shouldThrowCredentialProcessingExceptionOnDecryptionFailure() throws assertEquals(CREDENTIAL_FETCH_EXCEPTION.getErrorCode(), exception.getErrorCode()); verify(walletCredentialsRepository).findByIdAndWalletId(credentialId, walletId); verify(encryptionDecryptionUtil).decryptCredential("encryptedCredential", base64Key); - verifyNoInteractions(credentialUtilService); + verifyNoInteractions(credentialPDFGeneratorService); } @Test From ea2d626758b3e3c90f3d28a2ba06731d55b8965c Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 30 Jun 2025 15:20:13 +0530 Subject: [PATCH 690/860] injiweb1605 fix negation condition Signed-off-by: Gurpreet41082 --- .../mimoto/service/impl/CredentialRequestServiceImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java index 667168b57..870b4bfc2 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java @@ -42,10 +42,10 @@ public VCCredentialRequest buildRequest(IssuerDTO issuerDTO, SigningAlgorithm algorithm = resolveAlgorithm(credentialsSupportedResponse); String jwt; - if (!isLoginFlow) { - jwt = joseUtil.generateJwt(wellKnownResponse.getCredentialIssuer(), issuerDTO.getClient_id(), accessToken); - } else { + if (isLoginFlow) { jwt = generateJwtFromDB(walletId, base64EncodedWalletKey, algorithm, wellKnownResponse, issuerDTO, accessToken); + } else { + jwt = joseUtil.generateJwt(wellKnownResponse.getCredentialIssuer(), issuerDTO.getClient_id(), accessToken); } List credentialContext = credentialsSupportedResponse.getCredentialDefinition().getContext(); From 2694d0e4abe59bd9f879cb55f0202030eff41df8 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 30 Jun 2025 15:49:01 +0530 Subject: [PATCH 691/860] injiweb-1605 removed redundant unsupported check Signed-off-by: Gurpreet41082 --- .../controller/TokenAuthController.java | 16 +++------- .../mimoto/service/TokenServiceFactory.java | 7 ++--- .../controller/TokenAuthControllerTest.java | 22 +++++++------- .../service/TokenServiceFactoryTest.java | 30 +------------------ 4 files changed, 17 insertions(+), 58 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java b/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java index 19add0e29..fe429670f 100644 --- a/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java +++ b/src/main/java/io/mosip/mimoto/controller/TokenAuthController.java @@ -33,7 +33,7 @@ public class TokenAuthController { private static final String BEARER_PREFIX = "Bearer "; private static final String SESSION_CREATED = "Session created."; private static final String INVALID_TOKEN_MESSAGE = "Bearer ID token required."; - private static final String UNSUPPORTED_PROVIDER_MESSAGE = "Unsupported provider: %s"; + private final TokenServiceFactory tokenServiceFactory; @@ -45,10 +45,10 @@ public TokenAuthController(TokenServiceFactory tokenServiceFactory) { @Operation( summary = "Login and create session using OAuth2 ID token", description = """ - This API accepts an OAuth2 ID token in the Authorization header and establishes a session + This API accepts an OAuth2 ID token in the Authorization header and establishes a session by populating the Spring Security context. - Fetch the ID token from a supported OAuth2 provider (such as Google or Microsoft) and provide + Fetch the ID token from a supported OAuth2 provider (such as Google or Microsoft) and provide it in the request as a Bearer token. """, operationId = "loginWithOAuth2IdToken", @@ -86,12 +86,7 @@ Fetch the ID token from a supported OAuth2 provider (such as Google or Microsoft mediaType = MediaType.APPLICATION_JSON_VALUE, schema = @Schema(implementation = io.mosip.mimoto.dto.ErrorDTO.class), examples = { - @ExampleObject(name = "UnsupportedProvider", value = """ - { - "errorCode": "INVALID_REQUEST", - "errorMessage": "Unsupported provider: provider123" - } - """), + @ExampleObject(name = "MissingToken", value = """ { "errorCode": "INVALID_REQUEST", @@ -118,9 +113,6 @@ Fetch the ID token from a supported OAuth2 provider (such as Google or Microsoft ) @PostMapping("/auth/{provider}/token-login") public ResponseEntity createSessionFromIdToken(@RequestHeader(value = "Authorization", required = false) String authorization, @PathVariable("provider") String provider, HttpServletRequest request, HttpServletResponse response) { - if (!tokenServiceFactory.isSupportedProvider(provider)) { - return Utilities.buildErrorResponse(HttpStatus.BAD_REQUEST, ErrorConstants.INVALID_REQUEST.getErrorCode(), String.format(UNSUPPORTED_PROVIDER_MESSAGE, provider)); - } if (authorization == null || !authorization.startsWith(BEARER_PREFIX)) { return Utilities.buildErrorResponse(HttpStatus.BAD_REQUEST, ErrorConstants.INVALID_REQUEST.getErrorCode(), INVALID_TOKEN_MESSAGE); } diff --git a/src/main/java/io/mosip/mimoto/service/TokenServiceFactory.java b/src/main/java/io/mosip/mimoto/service/TokenServiceFactory.java index 61e61e8ea..66e0db522 100644 --- a/src/main/java/io/mosip/mimoto/service/TokenServiceFactory.java +++ b/src/main/java/io/mosip/mimoto/service/TokenServiceFactory.java @@ -10,6 +10,7 @@ @Component public class TokenServiceFactory { + private static final String UNSUPPORTED_PROVIDER_MESSAGE = "Unsupported provider: %s"; private final Map tokenServices; @Autowired @@ -20,12 +21,8 @@ public TokenServiceFactory(Map tokenServices) { public TokenService getTokenService(String provider) throws OAuth2AuthenticationException { TokenService service = tokenServices.get(provider.toLowerCase()); if (service == null) { - throw new OAuth2AuthenticationException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Unsupported provider: " + provider, HttpStatus.BAD_REQUEST); + throw new OAuth2AuthenticationException(ErrorConstants.INVALID_REQUEST.getErrorCode(), String.format(UNSUPPORTED_PROVIDER_MESSAGE, provider), HttpStatus.BAD_REQUEST); } return service; } - - public boolean isSupportedProvider(String provider) { - return tokenServices.containsKey(provider.toLowerCase()); - } } diff --git a/src/test/java/io/mosip/mimoto/controller/TokenAuthControllerTest.java b/src/test/java/io/mosip/mimoto/controller/TokenAuthControllerTest.java index eb9eea271..cfa843202 100644 --- a/src/test/java/io/mosip/mimoto/controller/TokenAuthControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/TokenAuthControllerTest.java @@ -1,6 +1,5 @@ package io.mosip.mimoto.controller; -import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.OAuth2AuthenticationException; import io.mosip.mimoto.service.TokenService; import io.mosip.mimoto.service.TokenServiceFactory; @@ -52,7 +51,6 @@ public void setUp() { @Test public void shouldReturnSuccessForValidTokenAndProvider() throws Exception { - when(tokenServiceFactory.isSupportedProvider(eq(provider))).thenReturn(true); when(tokenServiceFactory.getTokenService(eq(provider))).thenReturn(tokenService); doNothing().when(tokenService).processToken(eq(idToken), eq(provider), any(), any()); @@ -66,14 +64,21 @@ public void shouldReturnSuccessForValidTokenAndProvider() throws Exception { .andExpect(content().contentType(MediaType.APPLICATION_JSON)) .andExpect(jsonPath("$", is("Session created."))); - verify(tokenServiceFactory).isSupportedProvider(eq(provider)); verify(tokenServiceFactory).getTokenService(eq(provider)); verify(tokenService).processToken(eq(idToken), eq(provider), any(), any()); } @Test public void shouldReturnBadRequestForUnsupportedProvider() throws Exception { - when(tokenServiceFactory.isSupportedProvider(eq(provider))).thenReturn(false); + + OAuth2AuthenticationException exception = new OAuth2AuthenticationException( + "INVALID_REQUEST", + String.format("Unsupported provider: %s", provider), + HttpStatus.BAD_REQUEST + ); + + when(tokenServiceFactory.getTokenService(eq(provider))).thenThrow(exception); + mockMvc.perform(post("/auth/{provider}/token-login", provider) .header("Authorization", authorizationHeader) @@ -81,18 +86,15 @@ public void shouldReturnBadRequestForUnsupportedProvider() throws Exception { .accept(MediaType.APPLICATION_JSON) .with(SecurityMockMvcRequestPostProcessors.user("user123").roles("USER")) .with(SecurityMockMvcRequestPostProcessors.csrf())) - .andExpect(status().isBadRequest()) + .andExpect(status().isUnauthorized()) .andExpect(content().contentType(MediaType.APPLICATION_JSON)) .andExpect(jsonPath("$.errorMessage", is(String.format("Unsupported provider: %s", provider)))); - verify(tokenServiceFactory).isSupportedProvider(eq(provider)); - verifyNoMoreInteractions(tokenServiceFactory); verifyNoInteractions(tokenService); } @Test public void shouldReturnBadRequestForMissingAuthorizationHeader() throws Exception { - when(tokenServiceFactory.isSupportedProvider(eq(provider))).thenReturn(true); mockMvc.perform(post("/auth/google/token-login", provider) .contentType(MediaType.APPLICATION_JSON) .accept(MediaType.APPLICATION_JSON) @@ -105,7 +107,6 @@ public void shouldReturnBadRequestForMissingAuthorizationHeader() throws Excepti @Test public void shouldReturnBadRequestForInvalidAuthorizationHeader() throws Exception { - when(tokenServiceFactory.isSupportedProvider(eq(provider))).thenReturn(true); String invalidAuthorizationHeader = "InvalidToken"; mockMvc.perform(post("/auth/google/token-login", provider) @@ -121,7 +122,6 @@ public void shouldReturnBadRequestForInvalidAuthorizationHeader() throws Excepti @Test public void shouldReturnUnauthorizedForInvalidToken() throws Exception { - when(tokenServiceFactory.isSupportedProvider(eq(provider))).thenReturn(true); when(tokenServiceFactory.getTokenService(eq(provider))).thenReturn(tokenService); OAuth2AuthenticationException exception = new OAuth2AuthenticationException("invalid_token", "Invalid token format", HttpStatus.BAD_REQUEST); doThrow(exception).when(tokenService).processToken(eq(idToken), eq(provider), any(), any()); @@ -136,8 +136,6 @@ public void shouldReturnUnauthorizedForInvalidToken() throws Exception { .andExpect(content().contentType(MediaType.APPLICATION_JSON)) .andExpect(jsonPath("$.errorCode", is("invalid_token"))) .andExpect(jsonPath("$.errorMessage", is("Invalid token format"))); - - verify(tokenServiceFactory).isSupportedProvider(eq(provider)); verify(tokenServiceFactory).getTokenService(eq(provider)); verify(tokenService).processToken(eq(idToken), eq(provider), any(), any()); } diff --git a/src/test/java/io/mosip/mimoto/service/TokenServiceFactoryTest.java b/src/test/java/io/mosip/mimoto/service/TokenServiceFactoryTest.java index 0389f7c05..db18ac7d9 100644 --- a/src/test/java/io/mosip/mimoto/service/TokenServiceFactoryTest.java +++ b/src/test/java/io/mosip/mimoto/service/TokenServiceFactoryTest.java @@ -24,11 +24,9 @@ public class TokenServiceFactoryTest { @Mock private TokenService googleTokenService; - private Map tokenServices; - @Before public void setUp() { - tokenServices = new HashMap<>(); + Map tokenServices = new HashMap<>(); tokenServices.put("google", googleTokenService); tokenServiceFactory = new TokenServiceFactory(tokenServices); } @@ -67,30 +65,4 @@ public void testGetTokenService_UnsupportedProvider_ThrowsException() { assertEquals(HttpStatus.BAD_REQUEST, exception.getStatus()); } - @Test - public void testIsSupportedProvider_ValidProvider_ReturnsTrue() { - // Act - boolean result = tokenServiceFactory.isSupportedProvider("google"); - - // Assert - assertTrue(result); - } - - @Test - public void testIsSupportedProvider_CaseInsensitiveProvider_ReturnsTrue() { - // Act - boolean result = tokenServiceFactory.isSupportedProvider("GOOGLE"); - - // Assert - assertTrue(result); - } - - @Test - public void testIsSupportedProvider_UnsupportedProvider_ReturnsFalse() { - // Act - boolean result = tokenServiceFactory.isSupportedProvider("facebook"); - - // Assert - assertFalse(result); - } } From 1715bf96a3087bd2eb247bb18302f48fd0fb6c6d Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 30 Jun 2025 15:59:23 +0530 Subject: [PATCH 692/860] injiweb-1605 defined AppConfig for the beans Signed-off-by: Gurpreet41082 --- .../io/mosip/mimoto/config/AppConfig.java | 20 +++++++++++++++++++ .../CredentialPDFGeneratorService.java | 8 ++------ .../service/impl/CredentialVerifierImpl.java | 3 ++- .../CredentialPDFGeneratorServiceTest.java | 7 ------- 4 files changed, 24 insertions(+), 14 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/config/AppConfig.java diff --git a/src/main/java/io/mosip/mimoto/config/AppConfig.java b/src/main/java/io/mosip/mimoto/config/AppConfig.java new file mode 100644 index 000000000..6420327e5 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/config/AppConfig.java @@ -0,0 +1,20 @@ +package io.mosip.mimoto.config; + + +import io.mosip.pixelpass.PixelPass; +import io.mosip.vercred.vcverifier.CredentialsVerifier; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class AppConfig { + @Bean + public CredentialsVerifier credentialsVerifier() { + return new CredentialsVerifier(); + } + + @Bean + public PixelPass pixelPass() { + return new PixelPass(); + } +} diff --git a/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java b/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java index b98ad989d..541be51c4 100644 --- a/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java +++ b/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java @@ -22,7 +22,6 @@ import io.mosip.mimoto.util.LocaleUtils; import io.mosip.mimoto.util.Utilities; import io.mosip.pixelpass.PixelPass; -import jakarta.annotation.PostConstruct; import lombok.extern.slf4j.Slf4j; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; @@ -66,12 +65,9 @@ public class CredentialPDFGeneratorService { @Autowired private Utilities utilities; - PixelPass pixelPass; + @Autowired + private PixelPass pixelPass; - @PostConstruct - public void init() { - pixelPass = new PixelPass(); - } public ByteArrayInputStream generatePdfForVerifiableCredentials(String credentialType, VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String dataShareUrl, String credentialValidity, String locale) throws Exception { LinkedHashMap> displayProperties = loadDisplayPropertiesFromWellknown(vcCredentialResponse, credentialsSupportedResponse, locale); diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialVerifierImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialVerifierImpl.java index 81e8cc49d..95f885eca 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialVerifierImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialVerifierImpl.java @@ -17,7 +17,8 @@ public class CredentialVerifierImpl implements CredentialVerifierService { @Autowired private ObjectMapper objectMapper; - private final CredentialsVerifier credentialsVerifier = new CredentialsVerifier(); + @Autowired + private CredentialsVerifier credentialsVerifier; public boolean verify(VCCredentialResponse response) throws JsonProcessingException, VCVerificationException { String credentialString = objectMapper.writeValueAsString(response.getCredential()); diff --git a/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java index 857251bfd..676e54615 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java @@ -227,11 +227,4 @@ void testGeneratePdfWithNullOrder() throws Exception { assertNotNull(result); } } - - @Test - void testInitMethod() { - CredentialPDFGeneratorService service = new CredentialPDFGeneratorService(); - service.init(); - assertNotNull(ReflectionTestUtils.getField(service, "pixelPass")); - } } From 087746e0302b4a4dc0f2a0219041376fd6166dfe Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 30 Jun 2025 16:06:58 +0530 Subject: [PATCH 693/860] injiweb-1605 moved OAuth2ProviderProperties to config Signed-off-by: Gurpreet41082 --- .../{dto => config/oauth2}/OAuth2ProviderProperties.java | 3 ++- .../mosip/mimoto/security/oauth2/CustomOAuth2UserService.java | 2 +- .../mimoto/security/oauth2/CustomOAuth2UserServiceTest.java | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) rename src/main/java/io/mosip/mimoto/{dto => config/oauth2}/OAuth2ProviderProperties.java (90%) diff --git a/src/main/java/io/mosip/mimoto/dto/OAuth2ProviderProperties.java b/src/main/java/io/mosip/mimoto/config/oauth2/OAuth2ProviderProperties.java similarity index 90% rename from src/main/java/io/mosip/mimoto/dto/OAuth2ProviderProperties.java rename to src/main/java/io/mosip/mimoto/config/oauth2/OAuth2ProviderProperties.java index f2989ca4e..e79b72929 100644 --- a/src/main/java/io/mosip/mimoto/dto/OAuth2ProviderProperties.java +++ b/src/main/java/io/mosip/mimoto/config/oauth2/OAuth2ProviderProperties.java @@ -1,5 +1,6 @@ -package io.mosip.mimoto.dto; +package io.mosip.mimoto.config.oauth2; +import io.mosip.mimoto.dto.ProviderDataConfig; import jakarta.annotation.PostConstruct; import lombok.Data; import lombok.extern.slf4j.Slf4j; diff --git a/src/main/java/io/mosip/mimoto/security/oauth2/CustomOAuth2UserService.java b/src/main/java/io/mosip/mimoto/security/oauth2/CustomOAuth2UserService.java index db91e808f..be692a0d3 100644 --- a/src/main/java/io/mosip/mimoto/security/oauth2/CustomOAuth2UserService.java +++ b/src/main/java/io/mosip/mimoto/security/oauth2/CustomOAuth2UserService.java @@ -1,7 +1,7 @@ package io.mosip.mimoto.security.oauth2; import io.mosip.mimoto.constant.SessionKeys; -import io.mosip.mimoto.dto.OAuth2ProviderProperties; +import io.mosip.mimoto.config.oauth2.OAuth2ProviderProperties; import io.mosip.mimoto.dto.ProviderDataConfig; import io.mosip.mimoto.exception.DecryptionException; import io.mosip.mimoto.service.UserMetadataService; diff --git a/src/test/java/io/mosip/mimoto/security/oauth2/CustomOAuth2UserServiceTest.java b/src/test/java/io/mosip/mimoto/security/oauth2/CustomOAuth2UserServiceTest.java index 4b632f5f5..c99865fef 100644 --- a/src/test/java/io/mosip/mimoto/security/oauth2/CustomOAuth2UserServiceTest.java +++ b/src/test/java/io/mosip/mimoto/security/oauth2/CustomOAuth2UserServiceTest.java @@ -1,7 +1,7 @@ package io.mosip.mimoto.security.oauth2; import io.mosip.mimoto.constant.SessionKeys; -import io.mosip.mimoto.dto.OAuth2ProviderProperties; +import io.mosip.mimoto.config.oauth2.OAuth2ProviderProperties; import io.mosip.mimoto.dto.ProviderDataConfig; import io.mosip.mimoto.exception.DecryptionException; import io.mosip.mimoto.exception.ErrorConstants; From 5b35933317910638ab2817a0a5aa78d31675e327 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 30 Jun 2025 16:12:57 +0530 Subject: [PATCH 694/860] injiweb-1605 removed getter setter as Data is present Signed-off-by: Gurpreet41082 --- .../io/mosip/mimoto/dto/VerifiableCredentialRequestDTO.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/dto/VerifiableCredentialRequestDTO.java b/src/main/java/io/mosip/mimoto/dto/VerifiableCredentialRequestDTO.java index b351230a6..0c0bb9fec 100644 --- a/src/main/java/io/mosip/mimoto/dto/VerifiableCredentialRequestDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/VerifiableCredentialRequestDTO.java @@ -3,12 +3,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; import lombok.Data; -import lombok.Getter; -import lombok.Setter; @Data -@Getter -@Setter public class VerifiableCredentialRequestDTO { @Schema(description = "The unique identifier of the issuer") @NotBlank(message = "issuerId cannot be blank") From 5a895502847f41859a05ee2e4f4718300a1a29e5 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 30 Jun 2025 16:17:29 +0530 Subject: [PATCH 695/860] injiweb-1605 removed unused class Signed-off-by: Gurpreet41082 --- .../io/mosip/mimoto/model/DatabaseEntity.java | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 src/main/java/io/mosip/mimoto/model/DatabaseEntity.java diff --git a/src/main/java/io/mosip/mimoto/model/DatabaseEntity.java b/src/main/java/io/mosip/mimoto/model/DatabaseEntity.java deleted file mode 100644 index 350b2a882..000000000 --- a/src/main/java/io/mosip/mimoto/model/DatabaseEntity.java +++ /dev/null @@ -1,16 +0,0 @@ -package io.mosip.mimoto.model; - -public enum DatabaseEntity { - USERMETADATA("User Metadata"), - VERIFIABLECREDENTIAL("Verifiable Credential"); - - private final String value; - - DatabaseEntity(String value) { - this.value = value; - } - - public String getValue() { - return value; - } -} \ No newline at end of file From 1957e5bd8f99be7f8e32ce34c061989e36f112b7 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 30 Jun 2025 16:32:38 +0530 Subject: [PATCH 696/860] injiweb-1605 removed factory added static method Signed-off-by: Gurpreet41082 --- .../VerifiableCredentialResponseDTO.java | 38 ++++++++++++++++ .../impl/WalletCredentialServiceImpl.java | 5 +-- .../mimoto/util/CredentialProcessor.java | 2 +- .../WalletCredentialResponseDTOFactory.java | 43 ------------------- .../service/WalletCredentialServiceTest.java | 13 +++--- 5 files changed, 47 insertions(+), 54 deletions(-) delete mode 100644 src/main/java/io/mosip/mimoto/util/WalletCredentialResponseDTOFactory.java diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/VerifiableCredentialResponseDTO.java b/src/main/java/io/mosip/mimoto/dto/mimoto/VerifiableCredentialResponseDTO.java index 37a8fb7c4..5cb4b1965 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/VerifiableCredentialResponseDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/VerifiableCredentialResponseDTO.java @@ -1,11 +1,16 @@ package io.mosip.mimoto.dto.mimoto; +import io.mosip.mimoto.dto.DisplayDTO; +import io.mosip.mimoto.dto.IssuerDTO; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import static io.mosip.mimoto.util.LocaleUtils.getCredentialDisplayDTOBasedOnLocale; +import static io.mosip.mimoto.util.LocaleUtils.getIssuerDisplayDTOBasedOnLocale; + @Data @Builder @NoArgsConstructor @@ -27,4 +32,37 @@ public class VerifiableCredentialResponseDTO { @Schema(description = "Unique Identifier of the Credential in database") private String credentialId; + + public static VerifiableCredentialResponseDTO fromIssuerConfig( + IssuerConfig issuerConfig, String locale, String credentialId) { + String issuerName = ""; + String issuerLogo = ""; + String credentialType = ""; + String credentialTypeLogo = ""; + DisplayDTO issuerDisplayDTO; + CredentialSupportedDisplayResponse credentialTypeDisplayDTO; + if (null != issuerConfig) { + IssuerDTO issuerDTO = issuerConfig.getIssuerDTO(); + CredentialsSupportedResponse credentialsSupportedResponse = issuerConfig.getCredentialsSupportedResponse(); + if (issuerDTO != null) { + issuerDisplayDTO = getIssuerDisplayDTOBasedOnLocale(issuerDTO.getDisplay(), locale); + issuerName = issuerDisplayDTO.getName(); + issuerLogo = issuerDisplayDTO.getLogo().getUrl(); + } + if (credentialsSupportedResponse != null) { + credentialTypeDisplayDTO = getCredentialDisplayDTOBasedOnLocale( + credentialsSupportedResponse.getDisplay(), locale); + credentialType = credentialTypeDisplayDTO.getName(); + credentialTypeLogo = credentialTypeDisplayDTO.getLogo().getUrl(); + } + } + + return VerifiableCredentialResponseDTO.builder() + .issuerDisplayName(issuerName) + .issuerLogo(issuerLogo) + .credentialTypeDisplayName(credentialType) + .credentialTypeLogo(credentialTypeLogo) + .credentialId(credentialId) + .build(); + } } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java index 7ec56320c..7bf0b0bd1 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java @@ -13,12 +13,11 @@ import io.mosip.mimoto.dto.resident.WalletCredentialResponseDTO; import io.mosip.mimoto.exception.*; import io.mosip.mimoto.repository.WalletCredentialsRepository; +import io.mosip.mimoto.service.CredentialPDFGeneratorService; import io.mosip.mimoto.service.IssuersService; import io.mosip.mimoto.service.WalletCredentialService; -import io.mosip.mimoto.service.CredentialPDFGeneratorService; import io.mosip.mimoto.util.CredentialProcessor; import io.mosip.mimoto.util.EncryptionDecryptionUtil; -import io.mosip.mimoto.util.WalletCredentialResponseDTOFactory; import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; @@ -99,7 +98,7 @@ public List fetchAllCredentialsForWallet(String InvalidWellknownResponseException e) { log.error("Failed to fetch issuer details for issuerId: {}", issuerId, e); } - return WalletCredentialResponseDTOFactory.buildCredentialResponseDTO(issuerConfig, locale, credential.getId()); + return VerifiableCredentialResponseDTO.fromIssuerConfig(issuerConfig, locale, credential.getId()); }).toList(); } diff --git a/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java b/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java index f6de0a20e..0046769b4 100644 --- a/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java +++ b/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java @@ -177,7 +177,7 @@ public VerifiableCredentialResponseDTO processAndStoreCredential( } VerifiableCredential savedCredential = saveCredential(walletId, encryptedCredentialData, issuerId, credentialConfigurationId); - return WalletCredentialResponseDTOFactory.buildCredentialResponseDTO(issuerConfig, locale, savedCredential.getId()); + return VerifiableCredentialResponseDTO.fromIssuerConfig(issuerConfig, locale, savedCredential.getId()); } /** diff --git a/src/main/java/io/mosip/mimoto/util/WalletCredentialResponseDTOFactory.java b/src/main/java/io/mosip/mimoto/util/WalletCredentialResponseDTOFactory.java deleted file mode 100644 index 2d3992c56..000000000 --- a/src/main/java/io/mosip/mimoto/util/WalletCredentialResponseDTOFactory.java +++ /dev/null @@ -1,43 +0,0 @@ -package io.mosip.mimoto.util; - -import io.mosip.mimoto.dto.DisplayDTO; -import io.mosip.mimoto.dto.IssuerDTO; -import io.mosip.mimoto.dto.mimoto.*; - -import static io.mosip.mimoto.util.LocaleUtils.getCredentialDisplayDTOBasedOnLocale; -import static io.mosip.mimoto.util.LocaleUtils.getIssuerDisplayDTOBasedOnLocale; - -public class WalletCredentialResponseDTOFactory { - public static VerifiableCredentialResponseDTO buildCredentialResponseDTO(IssuerConfig issuerConfig, - String locale, String credentialId) { - String issuerName = ""; - String issuerLogo = ""; - String credentialType = ""; - String credentialTypeLogo = ""; - DisplayDTO issuerDisplayDTO; - CredentialSupportedDisplayResponse credentialTypeDisplayDTO; - if (null != issuerConfig) { - IssuerDTO issuerDTO = issuerConfig.getIssuerDTO(); - CredentialsSupportedResponse credentialsSupportedResponse = issuerConfig.getCredentialsSupportedResponse(); - if (issuerDTO != null) { - issuerDisplayDTO = getIssuerDisplayDTOBasedOnLocale(issuerDTO.getDisplay(), locale); - issuerName = issuerDisplayDTO.getName(); - issuerLogo = issuerDisplayDTO.getLogo().getUrl(); - } - if (credentialsSupportedResponse != null) { - credentialTypeDisplayDTO = getCredentialDisplayDTOBasedOnLocale( - credentialsSupportedResponse.getDisplay(), locale); - credentialType = credentialTypeDisplayDTO.getName(); - credentialTypeLogo = credentialTypeDisplayDTO.getLogo().getUrl(); - } - } - - return VerifiableCredentialResponseDTO.builder() - .issuerDisplayName(issuerName) - .issuerLogo(issuerLogo) - .credentialTypeDisplayName(credentialType) - .credentialTypeLogo(credentialTypeLogo) - .credentialId(credentialId) - .build(); - } -} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java index a1062612b..de427c853 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java @@ -12,7 +12,6 @@ import io.mosip.mimoto.service.impl.WalletCredentialServiceImpl; import io.mosip.mimoto.util.CredentialProcessor; import io.mosip.mimoto.util.EncryptionDecryptionUtil; -import io.mosip.mimoto.util.WalletCredentialResponseDTOFactory; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -161,8 +160,8 @@ public void shouldFetchAllCredentialsForWalletSuccessfully() throws Exception { when(walletCredentialsRepository.findByWalletIdOrderByCreatedAtDesc(walletId)).thenReturn(List.of(verifiableCredential)); when(issuersService.getIssuerConfig(issuerId, credentialType)).thenReturn(issuerConfig); - try (MockedStatic factoryMock = mockStatic(WalletCredentialResponseDTOFactory.class)) { - factoryMock.when(() -> WalletCredentialResponseDTOFactory.buildCredentialResponseDTO(issuerConfig, locale, credentialId)) + try (MockedStatic factoryMock = mockStatic(VerifiableCredentialResponseDTO.class)) { + factoryMock.when(() -> VerifiableCredentialResponseDTO.fromIssuerConfig(issuerConfig, locale, credentialId)) .thenReturn(responseDTO); List actualCredentials = walletCredentialService.fetchAllCredentialsForWallet(walletId, base64Key, locale); @@ -171,7 +170,7 @@ public void shouldFetchAllCredentialsForWalletSuccessfully() throws Exception { assertEquals(responseDTO, actualCredentials.getFirst()); verify(walletCredentialsRepository).findByWalletIdOrderByCreatedAtDesc(walletId); verify(issuersService).getIssuerConfig(issuerId, credentialType); - factoryMock.verify(() -> WalletCredentialResponseDTOFactory.buildCredentialResponseDTO(issuerConfig, locale, credentialId)); + factoryMock.verify(() -> VerifiableCredentialResponseDTO.fromIssuerConfig(issuerConfig, locale, credentialId)); } } @@ -183,8 +182,8 @@ public void shouldHandleIssuerConfigFetchFailure() throws Exception { when(walletCredentialsRepository.findByWalletIdOrderByCreatedAtDesc(walletId)).thenReturn(List.of(verifiableCredential)); when(issuersService.getIssuerConfig(issuerId, credentialType)).thenThrow(new ApiNotAccessibleException("API error")); - try (MockedStatic factoryMock = mockStatic(WalletCredentialResponseDTOFactory.class)) { - factoryMock.when(() -> WalletCredentialResponseDTOFactory.buildCredentialResponseDTO(null, locale, credentialId)) + try (MockedStatic factoryMock = mockStatic(VerifiableCredentialResponseDTO.class)) { + factoryMock.when(() -> VerifiableCredentialResponseDTO.fromIssuerConfig(null, locale, credentialId)) .thenReturn(responseDTO); List actualCredentials = walletCredentialService.fetchAllCredentialsForWallet(walletId, base64Key, locale); @@ -193,7 +192,7 @@ public void shouldHandleIssuerConfigFetchFailure() throws Exception { assertEquals(responseDTO, actualCredentials.getFirst()); verify(walletCredentialsRepository).findByWalletIdOrderByCreatedAtDesc(walletId); verify(issuersService).getIssuerConfig(issuerId, credentialType); - factoryMock.verify(() -> WalletCredentialResponseDTOFactory.buildCredentialResponseDTO(null, locale, credentialId)); + factoryMock.verify(() -> VerifiableCredentialResponseDTO.fromIssuerConfig(null, locale, credentialId)); } } From 7160cadf1fb9447d3f3f2fe153a5055bf60fda35 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 30 Jun 2025 16:45:33 +0530 Subject: [PATCH 697/860] injiweb-1605 renamed the method to downloadCredentialAndStoreInDB Signed-off-by: Gurpreet41082 --- .../service/impl/WalletCredentialServiceImpl.java | 2 +- .../io/mosip/mimoto/util/CredentialProcessor.java | 4 ++-- .../mimoto/service/WalletCredentialServiceTest.java | 12 ++++++------ 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java index 7bf0b0bd1..ecfc4a545 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java @@ -75,7 +75,7 @@ public VerifiableCredentialResponseDTO fetchAndStoreCredential(String issuerId, VerifiableCredentialResponseDTO credential; - credential = credentialProcessor.processAndStoreCredential( + credential = credentialProcessor.downloadCredentialAndStoreInDB( tokenResponse, credentialConfigurationId, walletId, base64Key, issuerId, locale); log.debug("Credential stored successfully: {}", credential.getCredentialId()); diff --git a/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java b/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java index 0046769b4..c56f8a8d1 100644 --- a/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java +++ b/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java @@ -59,7 +59,7 @@ public CredentialProcessor( } /** - * Processes and stores a credential using the provided token and parameters. + * Download credential and stores a credential using the provided token and parameters. * * @param tokenResponse The token response containing the access token. * @param credentialConfigurationId The type of the credential. @@ -72,7 +72,7 @@ public CredentialProcessor( * @throws ExternalServiceUnavailableException If an external service is unavailable. * @throws VCVerificationException If credential verification fails. */ - public VerifiableCredentialResponseDTO processAndStoreCredential( + public VerifiableCredentialResponseDTO downloadCredentialAndStoreInDB( TokenResponseDTO tokenResponse, String credentialConfigurationId, String walletId, String base64Key, String issuerId, String locale) throws InvalidRequestException, CredentialProcessingException, ExternalServiceUnavailableException, VCVerificationException { diff --git a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java index de427c853..ba397526f 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java @@ -96,7 +96,7 @@ public void shouldFetchAndStoreCredentialSuccessfully() throws Exception { expectedResponse.setCredentialId(credentialId); when(walletCredentialsRepository.existsByIssuerIdAndCredentialTypeAndWalletId(mosipIssuerId, credentialType, walletId)).thenReturn(false); - when(credentialProcessor.processAndStoreCredential(tokenResponse, credentialType, walletId, base64Key, mosipIssuerId, locale)) + when(credentialProcessor.downloadCredentialAndStoreInDB(tokenResponse, credentialType, walletId, base64Key, mosipIssuerId, locale)) .thenReturn(expectedResponse); VerifiableCredentialResponseDTO actualResponse = walletCredentialService.fetchAndStoreCredential( @@ -104,7 +104,7 @@ public void shouldFetchAndStoreCredentialSuccessfully() throws Exception { assertEquals(expectedResponse, actualResponse); verify(walletCredentialsRepository).existsByIssuerIdAndCredentialTypeAndWalletId(mosipIssuerId, credentialType, walletId); - verify(credentialProcessor).processAndStoreCredential(tokenResponse, credentialType, walletId, base64Key, mosipIssuerId, locale); + verify(credentialProcessor).downloadCredentialAndStoreInDB(tokenResponse, credentialType, walletId, base64Key, mosipIssuerId, locale); } @Test @@ -125,14 +125,14 @@ public void shouldFetchAndStoreNonMosipIssuerCredential() throws Exception { VerifiableCredentialResponseDTO expectedResponse = new VerifiableCredentialResponseDTO(); expectedResponse.setCredentialId(credentialId); - when(credentialProcessor.processAndStoreCredential(tokenResponse, credentialType, walletId, base64Key, issuerId, locale)) + when(credentialProcessor.downloadCredentialAndStoreInDB(tokenResponse, credentialType, walletId, base64Key, issuerId, locale)) .thenReturn(expectedResponse); VerifiableCredentialResponseDTO actualResponse = walletCredentialService.fetchAndStoreCredential( issuerId, credentialType, tokenResponse, locale, walletId, base64Key); assertEquals(expectedResponse, actualResponse); - verify(credentialProcessor).processAndStoreCredential(tokenResponse, credentialType, walletId, base64Key, issuerId, locale); + verify(credentialProcessor).downloadCredentialAndStoreInDB(tokenResponse, credentialType, walletId, base64Key, issuerId, locale); } @Test @@ -140,7 +140,7 @@ public void shouldThrowExternalServiceUnavailableException() throws Exception { String mosipIssuerId = "Mosip"; // Use Mosip to trigger repository check when(walletCredentialsRepository.existsByIssuerIdAndCredentialTypeAndWalletId(mosipIssuerId, credentialType, walletId)).thenReturn(false); - when(credentialProcessor.processAndStoreCredential(any(), anyString(), anyString(), anyString(), anyString(), anyString())) + when(credentialProcessor.downloadCredentialAndStoreInDB(any(), anyString(), anyString(), anyString(), anyString(), anyString())) .thenThrow(new ExternalServiceUnavailableException("SERVICE_UNAVAILABLE", "Service unavailable")); ExternalServiceUnavailableException exception = assertThrows(ExternalServiceUnavailableException.class, () -> @@ -149,7 +149,7 @@ public void shouldThrowExternalServiceUnavailableException() throws Exception { assertEquals("SERVICE_UNAVAILABLE", exception.getErrorCode()); assertEquals("SERVICE_UNAVAILABLE --> Service unavailable", exception.getMessage()); verify(walletCredentialsRepository).existsByIssuerIdAndCredentialTypeAndWalletId(mosipIssuerId, credentialType, walletId); - verify(credentialProcessor).processAndStoreCredential(tokenResponse, credentialType, walletId, base64Key, mosipIssuerId, locale); + verify(credentialProcessor).downloadCredentialAndStoreInDB(tokenResponse, credentialType, walletId, base64Key, mosipIssuerId, locale); } @Test From 0a5859a5a99740c704f6e7e39c415e3c69627cbc Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 30 Jun 2025 16:50:10 +0530 Subject: [PATCH 698/860] injiweb-1605 renamed the exception to UnauthorizedAccessException Signed-off-by: Gurpreet41082 --- .../java/io/mosip/mimoto/controller/UsersController.java | 8 ++++---- .../io/mosip/mimoto/controller/WalletsController.java | 4 ++-- ...essException.java => UnauthorizedAccessException.java} | 4 ++-- .../java/io/mosip/mimoto/util/GlobalExceptionHandler.java | 4 ++-- src/main/java/io/mosip/mimoto/util/WalletValidator.java | 4 ++-- .../io/mosip/mimoto/controller/WalletsControllerTest.java | 4 ++-- .../java/io/mosip/mimoto/service/WalletServiceTest.java | 6 +++--- .../java/io/mosip/mimoto/util/WalletValidatorTest.java | 4 ++-- 8 files changed, 19 insertions(+), 19 deletions(-) rename src/main/java/io/mosip/mimoto/exception/{UnAuthorizationAccessException.java => UnauthorizedAccessException.java} (52%) diff --git a/src/main/java/io/mosip/mimoto/controller/UsersController.java b/src/main/java/io/mosip/mimoto/controller/UsersController.java index 421c85f0d..aa4c2f574 100644 --- a/src/main/java/io/mosip/mimoto/controller/UsersController.java +++ b/src/main/java/io/mosip/mimoto/controller/UsersController.java @@ -8,7 +8,7 @@ import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; import io.mosip.mimoto.exception.DecryptionException; import io.mosip.mimoto.exception.ErrorConstants; -import io.mosip.mimoto.exception.UnAuthorizationAccessException; +import io.mosip.mimoto.exception.UnauthorizedAccessException; import io.mosip.mimoto.repository.UserMetadataRepository; import io.mosip.mimoto.service.EncryptionService; import io.mosip.mimoto.util.Utilities; @@ -103,7 +103,7 @@ public ResponseEntity getUserProfileInfo(Authentication authent null ); session.setAttribute(SessionKeys.USER_METADATA, userMetadataDTO); - } catch (UnAuthorizationAccessException exception) { + } catch (UnauthorizedAccessException exception) { log.error("Error occurred while retrieving user profile: ", exception); return Utilities.getErrorResponseEntityWithoutWrapper( exception, @@ -132,10 +132,10 @@ public ResponseEntity getUserProfileInfo(Authentication authent return ResponseEntity.status(HttpStatus.OK).body(userMetadataDTO); } - private UserMetadata fetchUserMetadata(String providerSubjectId, String identityProvider) throws UnAuthorizationAccessException { + private UserMetadata fetchUserMetadata(String providerSubjectId, String identityProvider) throws UnauthorizedAccessException { return userMetadataRepository.findByProviderSubjectIdAndIdentityProvider(providerSubjectId, identityProvider). orElseThrow(() -> - new UnAuthorizationAccessException(ErrorConstants.UNAUTHORIZED_ACCESS.getErrorCode(), "User not found. Please check your credentials or login again") + new UnauthorizedAccessException(ErrorConstants.UNAUTHORIZED_ACCESS.getErrorCode(), "User not found. Please check your credentials or login again") ); } } diff --git a/src/main/java/io/mosip/mimoto/controller/WalletsController.java b/src/main/java/io/mosip/mimoto/controller/WalletsController.java index 577fe7bbe..7c6b76ea5 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletsController.java @@ -7,7 +7,7 @@ import io.mosip.mimoto.dto.UnlockWalletRequestDto; import io.mosip.mimoto.dto.WalletResponseDto; import io.mosip.mimoto.exception.InvalidRequestException; -import io.mosip.mimoto.exception.UnAuthorizationAccessException; +import io.mosip.mimoto.exception.UnauthorizedAccessException; import io.mosip.mimoto.service.WalletService; import io.mosip.mimoto.util.WalletUtil; import io.swagger.v3.oas.annotations.Operation; @@ -86,7 +86,7 @@ public WalletsController(WalletService walletService) { @PostMapping public ResponseEntity createWallet( @RequestBody @Valid CreateWalletRequestDto wallet, - HttpSession httpSession) throws InvalidRequestException, UnAuthorizationAccessException { + HttpSession httpSession) throws InvalidRequestException, UnauthorizedAccessException { String userId = (String) httpSession.getAttribute(SessionKeys.USER_ID); log.info("Creating wallet for user: {}, name: {}", userId, wallet.getWalletName()); WalletResponseDto walletResponseDto = walletService.createWallet(userId, wallet.getWalletName(), wallet.getWalletPin(), wallet.getConfirmWalletPin()); diff --git a/src/main/java/io/mosip/mimoto/exception/UnAuthorizationAccessException.java b/src/main/java/io/mosip/mimoto/exception/UnauthorizedAccessException.java similarity index 52% rename from src/main/java/io/mosip/mimoto/exception/UnAuthorizationAccessException.java rename to src/main/java/io/mosip/mimoto/exception/UnauthorizedAccessException.java index ff2577656..fb4771c7b 100644 --- a/src/main/java/io/mosip/mimoto/exception/UnAuthorizationAccessException.java +++ b/src/main/java/io/mosip/mimoto/exception/UnauthorizedAccessException.java @@ -2,12 +2,12 @@ import java.io.Serial; -public class UnAuthorizationAccessException extends BaseUncheckedException { +public class UnauthorizedAccessException extends BaseUncheckedException { @Serial private static final long serialVersionUID = 1L; - public UnAuthorizationAccessException(String errorCode, String errorMessage) { + public UnauthorizedAccessException(String errorCode, String errorMessage) { super(errorCode, errorMessage); } } diff --git a/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java b/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java index a0142e372..75e08bbde 100644 --- a/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java +++ b/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java @@ -53,9 +53,9 @@ public ErrorDTO handleExternalServiceUnavailable(ExternalServiceUnavailableExcep return new ErrorDTO(ex.getErrorCode(), ex.getMessage()); } - @ExceptionHandler(UnAuthorizationAccessException.class) + @ExceptionHandler(UnauthorizedAccessException.class) @ResponseStatus(HttpStatus.UNAUTHORIZED) - public ErrorDTO handleUnAuthorizedAccess(UnAuthorizationAccessException ex) { + public ErrorDTO handleUnAuthorizedAccess(UnauthorizedAccessException ex) { log.error("UnAuthorized access detected: ", ex); return new ErrorDTO(ex.getErrorCode(), ex.getErrorText()); } diff --git a/src/main/java/io/mosip/mimoto/util/WalletValidator.java b/src/main/java/io/mosip/mimoto/util/WalletValidator.java index 2b10b5a95..46e9e8691 100644 --- a/src/main/java/io/mosip/mimoto/util/WalletValidator.java +++ b/src/main/java/io/mosip/mimoto/util/WalletValidator.java @@ -2,7 +2,7 @@ import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.exception.InvalidRequestException; -import io.mosip.mimoto.exception.UnAuthorizationAccessException; +import io.mosip.mimoto.exception.UnauthorizedAccessException; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; @@ -31,7 +31,7 @@ public void validateUserId(String userId) throws InvalidRequestException { log.debug("Validating User: {}", userId); if(userId == null){ log.warn("User ID is not available in the session"); - throw new UnAuthorizationAccessException(ErrorConstants.UNAUTHORIZED_ACCESS.getErrorCode(), "User ID not found in session"); + throw new UnauthorizedAccessException(ErrorConstants.UNAUTHORIZED_ACCESS.getErrorCode(), "User ID not found in session"); } if (StringUtils.isBlank(userId)) { log.warn("Invalid user ID: null or empty"); diff --git a/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java index d293746d6..6051bb089 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java @@ -7,7 +7,7 @@ import io.mosip.mimoto.dto.WalletResponseDto; import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.exception.InvalidRequestException; -import io.mosip.mimoto.exception.UnAuthorizationAccessException; +import io.mosip.mimoto.exception.UnauthorizedAccessException; import io.mosip.mimoto.service.WalletService; import io.mosip.mimoto.util.GlobalExceptionHandler; import org.junit.Before; @@ -124,7 +124,7 @@ public void shouldThrowExceptionIfReceivedPINAndConfirmPINDoNotMatch() throws Ex public void shouldReturnUnauthorizedWhenUserIdIsMissingForCreateWallet() throws Exception { mockSession.clearAttributes(); MockHttpSession sessionWithoutUserId = mockSession; - doThrow(new UnAuthorizationAccessException(ErrorConstants.UNAUTHORIZED_ACCESS.getErrorCode(), "User ID not found in session")).when(walletService).createWallet(null, walletName, walletPin, confirmWalletPin); + doThrow(new UnauthorizedAccessException(ErrorConstants.UNAUTHORIZED_ACCESS.getErrorCode(), "User ID not found in session")).when(walletService).createWallet(null, walletName, walletPin, confirmWalletPin); mockMvc.perform(post("/wallets") .contentType(MediaType.APPLICATION_JSON) diff --git a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java index 34b825fb7..8f1d49279 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java @@ -5,7 +5,7 @@ import io.mosip.mimoto.dbentity.WalletMetadata; import io.mosip.mimoto.dto.WalletResponseDto; import io.mosip.mimoto.exception.InvalidRequestException; -import io.mosip.mimoto.exception.UnAuthorizationAccessException; +import io.mosip.mimoto.exception.UnauthorizedAccessException; import io.mosip.mimoto.repository.WalletRepository; import io.mosip.mimoto.service.impl.WalletServiceImpl; import io.mosip.mimoto.util.WalletUtil; @@ -91,9 +91,9 @@ public void shouldCreateWalletSuccessfully() { @Test public void shouldThrowUnAuthorizedAccessExceptionOnCreatingWalletIfUserIdNotFoundInSession() { // In case of userId (or any key) not available in session, the default value will be null. - doThrow(new UnAuthorizationAccessException("unauthorized", "User ID not found in session")).when(walletValidator).validateUserId(null); + doThrow(new UnauthorizedAccessException("unauthorized", "User ID not found in session")).when(walletValidator).validateUserId(null); - UnAuthorizationAccessException exception = assertThrows(UnAuthorizationAccessException.class, () -> + UnauthorizedAccessException exception = assertThrows(UnauthorizedAccessException.class, () -> walletService.createWallet(null, name, walletPin, walletConfirmPin)); assertEquals("unauthorized", exception.getErrorCode()); diff --git a/src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java b/src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java index 802ebb1f1..4c884839a 100644 --- a/src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java +++ b/src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java @@ -1,7 +1,7 @@ package io.mosip.mimoto.util; import io.mosip.mimoto.exception.InvalidRequestException; -import io.mosip.mimoto.exception.UnAuthorizationAccessException; +import io.mosip.mimoto.exception.UnauthorizedAccessException; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -58,7 +58,7 @@ void testValidateWalletName_validName() { @Test void testValidateUserId_nullUserId() { - UnAuthorizationAccessException exception = assertThrows(UnAuthorizationAccessException.class, () -> { + UnauthorizedAccessException exception = assertThrows(UnauthorizedAccessException.class, () -> { walletValidator.validateUserId(null); }); From bd109b98553f3774402b961fe54f74bbaca51f0d Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 30 Jun 2025 16:54:13 +0530 Subject: [PATCH 699/860] injiweb-1605 move SigningAlgorithm to constants folder instead of model Signed-off-by: Gurpreet41082 --- .../io/mosip/mimoto/{model => constant}/SigningAlgorithm.java | 2 +- .../mimoto/service/impl/CredentialRequestServiceImpl.java | 2 +- src/main/java/io/mosip/mimoto/util/JwtGeneratorUtil.java | 2 +- src/main/java/io/mosip/mimoto/util/KeyGenerationUtil.java | 2 +- src/main/java/io/mosip/mimoto/util/ProofSigningKeyFactory.java | 2 +- src/main/java/io/mosip/mimoto/util/WalletUtil.java | 2 +- .../io/mosip/mimoto/util/EncryptionDecryptionUtilTest.java | 2 +- src/test/java/io/mosip/mimoto/util/JwtGeneratorUtilTest.java | 2 +- src/test/java/io/mosip/mimoto/util/KeyGenerationUtilTest.java | 3 +-- 9 files changed, 9 insertions(+), 10 deletions(-) rename src/main/java/io/mosip/mimoto/{model => constant}/SigningAlgorithm.java (96%) diff --git a/src/main/java/io/mosip/mimoto/model/SigningAlgorithm.java b/src/main/java/io/mosip/mimoto/constant/SigningAlgorithm.java similarity index 96% rename from src/main/java/io/mosip/mimoto/model/SigningAlgorithm.java rename to src/main/java/io/mosip/mimoto/constant/SigningAlgorithm.java index 9e83ace17..545483478 100644 --- a/src/main/java/io/mosip/mimoto/model/SigningAlgorithm.java +++ b/src/main/java/io/mosip/mimoto/constant/SigningAlgorithm.java @@ -1,4 +1,4 @@ -package io.mosip.mimoto.model; +package io.mosip.mimoto.constant; import com.nimbusds.jose.JWSAlgorithm; diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java index 870b4bfc2..122ea1e6c 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java @@ -3,7 +3,7 @@ import io.mosip.mimoto.dbentity.ProofSigningKey; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.mimoto.*; -import io.mosip.mimoto.model.SigningAlgorithm; +import io.mosip.mimoto.constant.SigningAlgorithm; import io.mosip.mimoto.repository.ProofSigningKeyRepository; import io.mosip.mimoto.service.CredentialRequestService; import io.mosip.mimoto.util.EncryptionDecryptionUtil; diff --git a/src/main/java/io/mosip/mimoto/util/JwtGeneratorUtil.java b/src/main/java/io/mosip/mimoto/util/JwtGeneratorUtil.java index 1d956fb21..cb13f4d3c 100644 --- a/src/main/java/io/mosip/mimoto/util/JwtGeneratorUtil.java +++ b/src/main/java/io/mosip/mimoto/util/JwtGeneratorUtil.java @@ -8,7 +8,7 @@ import com.nimbusds.jose.jwk.RSAKey; import com.nimbusds.jwt.*; import com.nimbusds.jose.util.Base64URL; -import io.mosip.mimoto.model.SigningAlgorithm; +import io.mosip.mimoto.constant.SigningAlgorithm; import lombok.extern.slf4j.Slf4j; import org.bouncycastle.jce.provider.BouncyCastleProvider; diff --git a/src/main/java/io/mosip/mimoto/util/KeyGenerationUtil.java b/src/main/java/io/mosip/mimoto/util/KeyGenerationUtil.java index 24f7ddea4..115411b9d 100644 --- a/src/main/java/io/mosip/mimoto/util/KeyGenerationUtil.java +++ b/src/main/java/io/mosip/mimoto/util/KeyGenerationUtil.java @@ -1,7 +1,7 @@ package io.mosip.mimoto.util; import io.mosip.mimoto.exception.KeyGenerationException; -import io.mosip.mimoto.model.SigningAlgorithm; +import io.mosip.mimoto.constant.SigningAlgorithm; import org.bouncycastle.jce.provider.BouncyCastleProvider; import javax.crypto.KeyGenerator; diff --git a/src/main/java/io/mosip/mimoto/util/ProofSigningKeyFactory.java b/src/main/java/io/mosip/mimoto/util/ProofSigningKeyFactory.java index a6fb0c30b..7baba4c95 100644 --- a/src/main/java/io/mosip/mimoto/util/ProofSigningKeyFactory.java +++ b/src/main/java/io/mosip/mimoto/util/ProofSigningKeyFactory.java @@ -3,7 +3,7 @@ import io.mosip.mimoto.dbentity.KeyMetadata; import io.mosip.mimoto.dbentity.ProofSigningKey; import io.mosip.mimoto.exception.KeyGenerationException; -import io.mosip.mimoto.model.SigningAlgorithm; +import io.mosip.mimoto.constant.SigningAlgorithm; import lombok.extern.slf4j.Slf4j; import java.security.InvalidAlgorithmParameterException; diff --git a/src/main/java/io/mosip/mimoto/util/WalletUtil.java b/src/main/java/io/mosip/mimoto/util/WalletUtil.java index 14fbee62e..0b967a38c 100644 --- a/src/main/java/io/mosip/mimoto/util/WalletUtil.java +++ b/src/main/java/io/mosip/mimoto/util/WalletUtil.java @@ -5,7 +5,7 @@ import io.mosip.mimoto.dbentity.Wallet; import io.mosip.mimoto.dbentity.WalletMetadata; import io.mosip.mimoto.exception.InvalidRequestException; -import io.mosip.mimoto.model.SigningAlgorithm; +import io.mosip.mimoto.constant.SigningAlgorithm; import io.mosip.mimoto.repository.WalletRepository; import jakarta.servlet.http.HttpSession; import lombok.extern.slf4j.Slf4j; diff --git a/src/test/java/io/mosip/mimoto/util/EncryptionDecryptionUtilTest.java b/src/test/java/io/mosip/mimoto/util/EncryptionDecryptionUtilTest.java index 3bee69a0d..a92afb111 100644 --- a/src/test/java/io/mosip/mimoto/util/EncryptionDecryptionUtilTest.java +++ b/src/test/java/io/mosip/mimoto/util/EncryptionDecryptionUtilTest.java @@ -4,7 +4,7 @@ import io.mosip.kernel.cryptomanager.dto.CryptomanagerResponseDto; import io.mosip.kernel.cryptomanager.service.CryptomanagerService; import io.mosip.kernel.core.util.CryptoUtil; -import io.mosip.mimoto.model.SigningAlgorithm; +import io.mosip.mimoto.constant.SigningAlgorithm; import org.apache.commons.lang3.StringUtils; import org.junit.Before; import org.junit.Test; diff --git a/src/test/java/io/mosip/mimoto/util/JwtGeneratorUtilTest.java b/src/test/java/io/mosip/mimoto/util/JwtGeneratorUtilTest.java index c47d3ea55..80c4a286e 100644 --- a/src/test/java/io/mosip/mimoto/util/JwtGeneratorUtilTest.java +++ b/src/test/java/io/mosip/mimoto/util/JwtGeneratorUtilTest.java @@ -1,7 +1,7 @@ package io.mosip.mimoto.util; import com.nimbusds.jwt.SignedJWT; -import io.mosip.mimoto.model.SigningAlgorithm; +import io.mosip.mimoto.constant.SigningAlgorithm; import lombok.extern.slf4j.Slf4j; import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.junit.BeforeClass; diff --git a/src/test/java/io/mosip/mimoto/util/KeyGenerationUtilTest.java b/src/test/java/io/mosip/mimoto/util/KeyGenerationUtilTest.java index 810c83642..5c8351cf4 100644 --- a/src/test/java/io/mosip/mimoto/util/KeyGenerationUtilTest.java +++ b/src/test/java/io/mosip/mimoto/util/KeyGenerationUtilTest.java @@ -1,12 +1,11 @@ package io.mosip.mimoto.util; import io.mosip.mimoto.exception.KeyGenerationException; -import io.mosip.mimoto.model.SigningAlgorithm; +import io.mosip.mimoto.constant.SigningAlgorithm; import org.junit.Test; import javax.crypto.SecretKey; import java.security.KeyPair; -import java.security.NoSuchAlgorithmException; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; From 4539964721efd30e8db7b58e33647f64a6192940 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 30 Jun 2025 16:55:32 +0530 Subject: [PATCH 700/860] injiweb-1605 added line after import Signed-off-by: Gurpreet41082 --- src/main/java/io/mosip/mimoto/dbentity/ProofSigningKey.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/io/mosip/mimoto/dbentity/ProofSigningKey.java b/src/main/java/io/mosip/mimoto/dbentity/ProofSigningKey.java index 1919417c7..53249ebfe 100644 --- a/src/main/java/io/mosip/mimoto/dbentity/ProofSigningKey.java +++ b/src/main/java/io/mosip/mimoto/dbentity/ProofSigningKey.java @@ -8,6 +8,7 @@ import java.security.PrivateKey; import java.time.Instant; + @Entity @Getter @Setter From 14df6a1ecb13b656bfbe6f04307122a5ced0240d Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 30 Jun 2025 17:39:04 +0530 Subject: [PATCH 701/860] injiweb-1605 refactored the dbclasses package Signed-off-by: Gurpreet41082 --- src/main/java/io/mosip/mimoto/MimotoServiceApplication.java | 3 +-- .../java/io/mosip/mimoto/controller/UsersController.java | 2 +- .../mimoto/{dbentity => model}/CredentialMetadata.java | 2 +- .../io/mosip/mimoto/{dbentity => model}/KeyMetadata.java | 3 ++- .../mosip/mimoto/{dbentity => model}/ProofSigningKey.java | 3 ++- .../io/mosip/mimoto/{dbentity => model}/UserMetadata.java | 2 +- .../mimoto/{dbentity => model}/VerifiableCredential.java | 2 +- .../java/io/mosip/mimoto/{dbentity => model}/Wallet.java | 3 ++- .../io/mosip/mimoto/{dbentity => model}/WalletMetadata.java | 3 ++- .../mosip/mimoto/repository/ProofSigningKeyRepository.java | 2 +- .../io/mosip/mimoto/repository/UserMetadataRepository.java | 2 +- .../mimoto/repository/WalletCredentialsRepository.java | 3 +-- .../java/io/mosip/mimoto/repository/WalletRepository.java | 2 +- .../java/io/mosip/mimoto/service/UserMetadataService.java | 3 +-- .../mimoto/service/impl/CredentialRequestServiceImpl.java | 2 +- .../io/mosip/mimoto/service/impl/GoogleTokenService.java | 2 +- .../mimoto/service/impl/WalletCredentialServiceImpl.java | 4 ++-- .../io/mosip/mimoto/service/impl/WalletServiceImpl.java | 2 +- src/main/java/io/mosip/mimoto/util/CredentialProcessor.java | 4 ++-- .../java/io/mosip/mimoto/util/ProofSigningKeyFactory.java | 4 ++-- src/main/java/io/mosip/mimoto/util/WalletUtil.java | 6 +++--- .../io/mosip/mimoto/controller/UsersControllerTest.java | 2 +- .../io/mosip/mimoto/service/UserMetadataServiceTest.java | 2 +- .../mosip/mimoto/service/WalletCredentialServiceTest.java | 4 ++-- .../java/io/mosip/mimoto/service/WalletServiceTest.java | 4 ++-- src/test/java/io/mosip/mimoto/util/TestUtilities.java | 4 ++-- src/test/java/io/mosip/mimoto/util/WalletUtilTest.java | 2 +- 27 files changed, 39 insertions(+), 38 deletions(-) rename src/main/java/io/mosip/mimoto/{dbentity => model}/CredentialMetadata.java (87%) rename src/main/java/io/mosip/mimoto/{dbentity => model}/KeyMetadata.java (72%) rename src/main/java/io/mosip/mimoto/{dbentity => model}/ProofSigningKey.java (94%) rename src/main/java/io/mosip/mimoto/{dbentity => model}/UserMetadata.java (96%) rename src/main/java/io/mosip/mimoto/{dbentity => model}/VerifiableCredential.java (96%) rename src/main/java/io/mosip/mimoto/{dbentity => model}/Wallet.java (96%) rename src/main/java/io/mosip/mimoto/{dbentity => model}/WalletMetadata.java (82%) diff --git a/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java b/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java index 613423b32..6c9bfc0d0 100644 --- a/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java +++ b/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java @@ -24,7 +24,6 @@ @SpringBootApplication(scanBasePackages = { "io.mosip.mimoto.*", - "io.mosip.mimoto.dbentity", "io.mosip.kernel.websub.*", "io.mosip.kernel.cryptomanager.*", "io.mosip.kernel.keymanager.*", @@ -37,7 +36,7 @@ }, exclude = { SecurityAutoConfiguration.class }) -@EntityScan(basePackages = {"io.mosip.mimoto.dbentity", "io.mosip.kernel.keymanagerservice.entity"}) +@EntityScan(basePackages = {"io.mosip.mimoto.model", "io.mosip.kernel.keymanagerservice.entity"}) @EnableJpaRepositories(basePackages = {"io.mosip.mimoto.repository", "io.mosip.kernel.keymanagerservice.repository"}) @Slf4j @EnableScheduling diff --git a/src/main/java/io/mosip/mimoto/controller/UsersController.java b/src/main/java/io/mosip/mimoto/controller/UsersController.java index aa4c2f574..193963208 100644 --- a/src/main/java/io/mosip/mimoto/controller/UsersController.java +++ b/src/main/java/io/mosip/mimoto/controller/UsersController.java @@ -3,7 +3,7 @@ import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.constant.SwaggerExampleConstants; import io.mosip.mimoto.constant.SwaggerLiteralConstants; -import io.mosip.mimoto.dbentity.UserMetadata; +import io.mosip.mimoto.model.UserMetadata; import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; import io.mosip.mimoto.exception.DecryptionException; diff --git a/src/main/java/io/mosip/mimoto/dbentity/CredentialMetadata.java b/src/main/java/io/mosip/mimoto/model/CredentialMetadata.java similarity index 87% rename from src/main/java/io/mosip/mimoto/dbentity/CredentialMetadata.java rename to src/main/java/io/mosip/mimoto/model/CredentialMetadata.java index 99af35804..177e429cb 100644 --- a/src/main/java/io/mosip/mimoto/dbentity/CredentialMetadata.java +++ b/src/main/java/io/mosip/mimoto/model/CredentialMetadata.java @@ -1,4 +1,4 @@ -package io.mosip.mimoto.dbentity; +package io.mosip.mimoto.model; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.Data; diff --git a/src/main/java/io/mosip/mimoto/dbentity/KeyMetadata.java b/src/main/java/io/mosip/mimoto/model/KeyMetadata.java similarity index 72% rename from src/main/java/io/mosip/mimoto/dbentity/KeyMetadata.java rename to src/main/java/io/mosip/mimoto/model/KeyMetadata.java index 992879975..36821a73e 100644 --- a/src/main/java/io/mosip/mimoto/dbentity/KeyMetadata.java +++ b/src/main/java/io/mosip/mimoto/model/KeyMetadata.java @@ -1,6 +1,7 @@ -package io.mosip.mimoto.dbentity; +package io.mosip.mimoto.model; import lombok.Data; + @Data public class KeyMetadata { private String algorithmName; diff --git a/src/main/java/io/mosip/mimoto/dbentity/ProofSigningKey.java b/src/main/java/io/mosip/mimoto/model/ProofSigningKey.java similarity index 94% rename from src/main/java/io/mosip/mimoto/dbentity/ProofSigningKey.java rename to src/main/java/io/mosip/mimoto/model/ProofSigningKey.java index 53249ebfe..976b5a67f 100644 --- a/src/main/java/io/mosip/mimoto/dbentity/ProofSigningKey.java +++ b/src/main/java/io/mosip/mimoto/model/ProofSigningKey.java @@ -1,4 +1,4 @@ -package io.mosip.mimoto.dbentity; +package io.mosip.mimoto.model; import jakarta.persistence.*; import lombok.Getter; @@ -10,6 +10,7 @@ import java.time.Instant; @Entity +@Table(name = "proof_signing_key") @Getter @Setter public class ProofSigningKey { diff --git a/src/main/java/io/mosip/mimoto/dbentity/UserMetadata.java b/src/main/java/io/mosip/mimoto/model/UserMetadata.java similarity index 96% rename from src/main/java/io/mosip/mimoto/dbentity/UserMetadata.java rename to src/main/java/io/mosip/mimoto/model/UserMetadata.java index ba0f54d64..f36edc18e 100644 --- a/src/main/java/io/mosip/mimoto/dbentity/UserMetadata.java +++ b/src/main/java/io/mosip/mimoto/model/UserMetadata.java @@ -1,4 +1,4 @@ -package io.mosip.mimoto.dbentity; +package io.mosip.mimoto.model; import jakarta.persistence.*; import lombok.Getter; diff --git a/src/main/java/io/mosip/mimoto/dbentity/VerifiableCredential.java b/src/main/java/io/mosip/mimoto/model/VerifiableCredential.java similarity index 96% rename from src/main/java/io/mosip/mimoto/dbentity/VerifiableCredential.java rename to src/main/java/io/mosip/mimoto/model/VerifiableCredential.java index 4c624af8b..896a5118d 100644 --- a/src/main/java/io/mosip/mimoto/dbentity/VerifiableCredential.java +++ b/src/main/java/io/mosip/mimoto/model/VerifiableCredential.java @@ -1,4 +1,4 @@ -package io.mosip.mimoto.dbentity; +package io.mosip.mimoto.model; import jakarta.persistence.*; import lombok.Getter; diff --git a/src/main/java/io/mosip/mimoto/dbentity/Wallet.java b/src/main/java/io/mosip/mimoto/model/Wallet.java similarity index 96% rename from src/main/java/io/mosip/mimoto/dbentity/Wallet.java rename to src/main/java/io/mosip/mimoto/model/Wallet.java index 728e274cb..67002b982 100644 --- a/src/main/java/io/mosip/mimoto/dbentity/Wallet.java +++ b/src/main/java/io/mosip/mimoto/model/Wallet.java @@ -1,4 +1,4 @@ -package io.mosip.mimoto.dbentity; +package io.mosip.mimoto.model; import jakarta.persistence.*; import lombok.Builder; @@ -13,6 +13,7 @@ import java.util.List; @Entity +@Table(name = "wallet") @Getter @Setter @Builder diff --git a/src/main/java/io/mosip/mimoto/dbentity/WalletMetadata.java b/src/main/java/io/mosip/mimoto/model/WalletMetadata.java similarity index 82% rename from src/main/java/io/mosip/mimoto/dbentity/WalletMetadata.java rename to src/main/java/io/mosip/mimoto/model/WalletMetadata.java index b4434fe20..27c6d66e8 100644 --- a/src/main/java/io/mosip/mimoto/dbentity/WalletMetadata.java +++ b/src/main/java/io/mosip/mimoto/model/WalletMetadata.java @@ -1,6 +1,7 @@ -package io.mosip.mimoto.dbentity; +package io.mosip.mimoto.model; import lombok.Data; + @Data public class WalletMetadata { diff --git a/src/main/java/io/mosip/mimoto/repository/ProofSigningKeyRepository.java b/src/main/java/io/mosip/mimoto/repository/ProofSigningKeyRepository.java index af58a0138..394ce7f27 100644 --- a/src/main/java/io/mosip/mimoto/repository/ProofSigningKeyRepository.java +++ b/src/main/java/io/mosip/mimoto/repository/ProofSigningKeyRepository.java @@ -1,6 +1,6 @@ package io.mosip.mimoto.repository; -import io.mosip.mimoto.dbentity.ProofSigningKey; +import io.mosip.mimoto.model.ProofSigningKey; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; diff --git a/src/main/java/io/mosip/mimoto/repository/UserMetadataRepository.java b/src/main/java/io/mosip/mimoto/repository/UserMetadataRepository.java index 639eddd21..08d961354 100644 --- a/src/main/java/io/mosip/mimoto/repository/UserMetadataRepository.java +++ b/src/main/java/io/mosip/mimoto/repository/UserMetadataRepository.java @@ -1,6 +1,6 @@ package io.mosip.mimoto.repository; -import io.mosip.mimoto.dbentity.UserMetadata; +import io.mosip.mimoto.model.UserMetadata; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import java.util.Optional; diff --git a/src/main/java/io/mosip/mimoto/repository/WalletCredentialsRepository.java b/src/main/java/io/mosip/mimoto/repository/WalletCredentialsRepository.java index dff29b532..ea69f69ec 100644 --- a/src/main/java/io/mosip/mimoto/repository/WalletCredentialsRepository.java +++ b/src/main/java/io/mosip/mimoto/repository/WalletCredentialsRepository.java @@ -1,7 +1,6 @@ package io.mosip.mimoto.repository; -import io.mosip.mimoto.dbentity.VerifiableCredential; -import org.springframework.data.domain.Sort; +import io.mosip.mimoto.model.VerifiableCredential; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; diff --git a/src/main/java/io/mosip/mimoto/repository/WalletRepository.java b/src/main/java/io/mosip/mimoto/repository/WalletRepository.java index 1ee204f60..c1f847671 100644 --- a/src/main/java/io/mosip/mimoto/repository/WalletRepository.java +++ b/src/main/java/io/mosip/mimoto/repository/WalletRepository.java @@ -1,6 +1,6 @@ package io.mosip.mimoto.repository; -import io.mosip.mimoto.dbentity.Wallet; +import io.mosip.mimoto.model.Wallet; import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.repository.query.Param; diff --git a/src/main/java/io/mosip/mimoto/service/UserMetadataService.java b/src/main/java/io/mosip/mimoto/service/UserMetadataService.java index dc1180ad8..c0b5a0fa8 100644 --- a/src/main/java/io/mosip/mimoto/service/UserMetadataService.java +++ b/src/main/java/io/mosip/mimoto/service/UserMetadataService.java @@ -1,6 +1,6 @@ package io.mosip.mimoto.service; -import io.mosip.mimoto.dbentity.UserMetadata; +import io.mosip.mimoto.model.UserMetadata; import io.mosip.mimoto.exception.DecryptionException; import io.mosip.mimoto.exception.EncryptionException; import io.mosip.mimoto.repository.UserMetadataRepository; @@ -8,7 +8,6 @@ import org.springframework.stereotype.Service; import java.sql.Timestamp; -import java.util.Optional; import java.util.UUID; import java.util.function.Consumer; import java.util.function.Supplier; diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java index 122ea1e6c..432164de5 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java @@ -1,6 +1,6 @@ package io.mosip.mimoto.service.impl; -import io.mosip.mimoto.dbentity.ProofSigningKey; +import io.mosip.mimoto.model.ProofSigningKey; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.constant.SigningAlgorithm; diff --git a/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java b/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java index 5efa0d6f4..538573c87 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java +++ b/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java @@ -1,6 +1,6 @@ package io.mosip.mimoto.service.impl; -import io.mosip.mimoto.dbentity.UserMetadata; +import io.mosip.mimoto.model.UserMetadata; import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; import io.mosip.mimoto.exception.DecryptionException; import io.mosip.mimoto.exception.OAuth2AuthenticationException; diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java index ecfc4a545..9475570c3 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java @@ -2,8 +2,8 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import io.mosip.mimoto.dbentity.CredentialMetadata; -import io.mosip.mimoto.dbentity.VerifiableCredential; +import io.mosip.mimoto.model.CredentialMetadata; +import io.mosip.mimoto.model.VerifiableCredential; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.CredentialsSupportedResponse; diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java index 453a54868..8511e047f 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java @@ -1,7 +1,7 @@ package io.mosip.mimoto.service.impl; import io.mosip.mimoto.constant.SessionKeys; -import io.mosip.mimoto.dbentity.Wallet; +import io.mosip.mimoto.model.Wallet; import io.mosip.mimoto.dto.WalletResponseDto; import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.exception.InvalidRequestException; diff --git a/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java b/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java index c56f8a8d1..f8d48dac4 100644 --- a/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java +++ b/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java @@ -2,8 +2,8 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import io.mosip.mimoto.dbentity.CredentialMetadata; -import io.mosip.mimoto.dbentity.VerifiableCredential; +import io.mosip.mimoto.model.CredentialMetadata; +import io.mosip.mimoto.model.VerifiableCredential; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.IssuerConfig; diff --git a/src/main/java/io/mosip/mimoto/util/ProofSigningKeyFactory.java b/src/main/java/io/mosip/mimoto/util/ProofSigningKeyFactory.java index 7baba4c95..afddfe964 100644 --- a/src/main/java/io/mosip/mimoto/util/ProofSigningKeyFactory.java +++ b/src/main/java/io/mosip/mimoto/util/ProofSigningKeyFactory.java @@ -1,7 +1,7 @@ package io.mosip.mimoto.util; -import io.mosip.mimoto.dbentity.KeyMetadata; -import io.mosip.mimoto.dbentity.ProofSigningKey; +import io.mosip.mimoto.model.KeyMetadata; +import io.mosip.mimoto.model.ProofSigningKey; import io.mosip.mimoto.exception.KeyGenerationException; import io.mosip.mimoto.constant.SigningAlgorithm; import lombok.extern.slf4j.Slf4j; diff --git a/src/main/java/io/mosip/mimoto/util/WalletUtil.java b/src/main/java/io/mosip/mimoto/util/WalletUtil.java index 0b967a38c..056804dfc 100644 --- a/src/main/java/io/mosip/mimoto/util/WalletUtil.java +++ b/src/main/java/io/mosip/mimoto/util/WalletUtil.java @@ -1,9 +1,9 @@ package io.mosip.mimoto.util; import io.mosip.mimoto.constant.SessionKeys; -import io.mosip.mimoto.dbentity.ProofSigningKey; -import io.mosip.mimoto.dbentity.Wallet; -import io.mosip.mimoto.dbentity.WalletMetadata; +import io.mosip.mimoto.model.ProofSigningKey; +import io.mosip.mimoto.model.Wallet; +import io.mosip.mimoto.model.WalletMetadata; import io.mosip.mimoto.exception.InvalidRequestException; import io.mosip.mimoto.constant.SigningAlgorithm; import io.mosip.mimoto.repository.WalletRepository; diff --git a/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java b/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java index 77c3f01c5..ae4541c11 100644 --- a/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/UsersControllerTest.java @@ -1,7 +1,7 @@ package io.mosip.mimoto.controller; import io.mosip.mimoto.constant.SessionKeys; -import io.mosip.mimoto.dbentity.UserMetadata; +import io.mosip.mimoto.model.UserMetadata; import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; import io.mosip.mimoto.exception.DecryptionException; import io.mosip.mimoto.exception.ErrorConstants; diff --git a/src/test/java/io/mosip/mimoto/service/UserMetadataServiceTest.java b/src/test/java/io/mosip/mimoto/service/UserMetadataServiceTest.java index c7fce67dd..9dc355d69 100644 --- a/src/test/java/io/mosip/mimoto/service/UserMetadataServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/UserMetadataServiceTest.java @@ -1,6 +1,6 @@ package io.mosip.mimoto.service; -import io.mosip.mimoto.dbentity.UserMetadata; +import io.mosip.mimoto.model.UserMetadata; import io.mosip.mimoto.exception.DecryptionException; import io.mosip.mimoto.exception.EncryptionException; import io.mosip.mimoto.repository.UserMetadataRepository; diff --git a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java index ba397526f..50ffb1763 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java @@ -1,8 +1,8 @@ package io.mosip.mimoto.service; import com.fasterxml.jackson.databind.ObjectMapper; -import io.mosip.mimoto.dbentity.CredentialMetadata; -import io.mosip.mimoto.dbentity.VerifiableCredential; +import io.mosip.mimoto.model.CredentialMetadata; +import io.mosip.mimoto.model.VerifiableCredential; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.*; diff --git a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java index 8f1d49279..0a4a80026 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java @@ -1,8 +1,8 @@ package io.mosip.mimoto.service; import io.mosip.mimoto.constant.SessionKeys; -import io.mosip.mimoto.dbentity.Wallet; -import io.mosip.mimoto.dbentity.WalletMetadata; +import io.mosip.mimoto.model.Wallet; +import io.mosip.mimoto.model.WalletMetadata; import io.mosip.mimoto.dto.WalletResponseDto; import io.mosip.mimoto.exception.InvalidRequestException; import io.mosip.mimoto.exception.UnauthorizedAccessException; diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index 80a46d1c0..bbe11fee6 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -8,8 +8,8 @@ import com.itextpdf.kernel.pdf.PdfWriter; import com.itextpdf.kernel.pdf.PdfDocument; import com.itextpdf.kernel.pdf.PdfReader; -import io.mosip.mimoto.dbentity.CredentialMetadata; -import io.mosip.mimoto.dbentity.VerifiableCredential; +import io.mosip.mimoto.model.CredentialMetadata; +import io.mosip.mimoto.model.VerifiableCredential; import io.mosip.mimoto.dto.*; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.dto.openid.VerifierDTO; diff --git a/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java b/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java index 4333bdaea..97477a712 100644 --- a/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java +++ b/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java @@ -1,7 +1,7 @@ package io.mosip.mimoto.util; import io.mosip.mimoto.constant.SessionKeys; -import io.mosip.mimoto.dbentity.Wallet; +import io.mosip.mimoto.model.Wallet; import io.mosip.mimoto.exception.InvalidRequestException; import io.mosip.mimoto.repository.WalletRepository; import jakarta.servlet.http.HttpSession; From fc9405e35e77c785d1e0c1bdf3d360e4a33d98e9 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 30 Jun 2025 17:47:14 +0530 Subject: [PATCH 702/860] injiweb-1605 used Instant instead of java.sql Signed-off-by: Gurpreet41082 --- src/main/java/io/mosip/mimoto/model/UserMetadata.java | 11 ++++++++--- .../io/mosip/mimoto/service/UserMetadataService.java | 10 +++++----- .../mosip/mimoto/service/UserMetadataServiceTest.java | 9 ++++----- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/model/UserMetadata.java b/src/main/java/io/mosip/mimoto/model/UserMetadata.java index f36edc18e..959dbecc3 100644 --- a/src/main/java/io/mosip/mimoto/model/UserMetadata.java +++ b/src/main/java/io/mosip/mimoto/model/UserMetadata.java @@ -1,9 +1,14 @@ package io.mosip.mimoto.model; -import jakarta.persistence.*; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; import lombok.Getter; import lombok.Setter; +import java.time.Instant; + @Entity @Table(name = "user_metadata") @Getter @@ -33,9 +38,9 @@ public class UserMetadata { private String email; @Column(name = "created_at", updatable = false) - private java.sql.Timestamp createdAt; + private Instant createdAt; @Column(name = "updated_at") - private java.sql.Timestamp updatedAt; + private Instant updatedAt; } diff --git a/src/main/java/io/mosip/mimoto/service/UserMetadataService.java b/src/main/java/io/mosip/mimoto/service/UserMetadataService.java index c0b5a0fa8..575d7aa9a 100644 --- a/src/main/java/io/mosip/mimoto/service/UserMetadataService.java +++ b/src/main/java/io/mosip/mimoto/service/UserMetadataService.java @@ -1,13 +1,13 @@ package io.mosip.mimoto.service; -import io.mosip.mimoto.model.UserMetadata; import io.mosip.mimoto.exception.DecryptionException; import io.mosip.mimoto.exception.EncryptionException; +import io.mosip.mimoto.model.UserMetadata; import io.mosip.mimoto.repository.UserMetadataRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.sql.Timestamp; +import java.time.Instant; import java.util.UUID; import java.util.function.Consumer; import java.util.function.Supplier; @@ -48,7 +48,7 @@ public UserMetadata getUserMetadata(String providerSubjectId, String identityPro public String updateOrInsertUserMetadata(String providerSubjectId, String identityProvider, String displayName, String profilePictureUrl, String email) throws EncryptionException, DecryptionException { - Timestamp now = new Timestamp(System.currentTimeMillis()); + Instant now = Instant.now(); UserMetadata existingUser = getUserMetadata(providerSubjectId, identityProvider); if (null != existingUser) { return updateUser(existingUser, displayName, profilePictureUrl, email, now); @@ -57,7 +57,7 @@ public String updateOrInsertUserMetadata(String providerSubjectId, String identi } } - private String updateUser(UserMetadata user, String displayName, String profilePictureUrl, String email, Timestamp now) + private String updateUser(UserMetadata user, String displayName, String profilePictureUrl, String email, Instant now) throws EncryptionException { boolean updated = updateIfChanged(user::getDisplayName, user::setDisplayName, displayName); updated = updateIfChanged(user::getProfilePictureUrl, user::setProfilePictureUrl, profilePictureUrl) || updated; @@ -78,7 +78,7 @@ private boolean updateIfChanged(Supplier getter, Consumer setter } private String createUser(String providerSubjectId, String identityProvider, String displayName, - String profilePictureUrl, String email, Timestamp now) + String profilePictureUrl, String email, Instant now) throws EncryptionException { UserMetadata user = new UserMetadata(); user.setId(UUID.randomUUID().toString()); diff --git a/src/test/java/io/mosip/mimoto/service/UserMetadataServiceTest.java b/src/test/java/io/mosip/mimoto/service/UserMetadataServiceTest.java index 9dc355d69..c4aa00147 100644 --- a/src/test/java/io/mosip/mimoto/service/UserMetadataServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/UserMetadataServiceTest.java @@ -1,8 +1,8 @@ package io.mosip.mimoto.service; -import io.mosip.mimoto.model.UserMetadata; import io.mosip.mimoto.exception.DecryptionException; import io.mosip.mimoto.exception.EncryptionException; +import io.mosip.mimoto.model.UserMetadata; import io.mosip.mimoto.repository.UserMetadataRepository; import org.junit.Before; import org.junit.Test; @@ -12,12 +12,11 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; -import java.sql.Timestamp; +import java.time.Instant; import java.util.Optional; import java.util.UUID; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotEquals; import static org.mockito.Mockito.*; @RunWith(MockitoJUnitRunner.class) @@ -33,7 +32,7 @@ public class UserMetadataServiceTest { private UserMetadataService userMetadataService; private String providerSubjectId, identityProvider, displayName, profilePictureUrl, email, userId; - private Timestamp now; + private Instant now; private UserMetadata userMetadata; @Before @@ -43,7 +42,7 @@ public void setUp() { displayName = "Name 123"; profilePictureUrl = "http://profile.pic"; email = "name.123@example.com"; - now = new Timestamp(System.currentTimeMillis()); + now = Instant.now(); userId = UUID.randomUUID().toString(); userMetadata = new UserMetadata(); From f2fa0aef60977ba96f771c22d67ba568bd5ccca7 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 30 Jun 2025 18:25:45 +0530 Subject: [PATCH 703/860] injiweb-1605 renamed method Signed-off-by: Gurpreet41082 --- .../mimoto/controller/WalletCredentialsController.java | 2 +- .../security/oauth2/CustomOAuth2UserService.java | 2 +- .../io/mosip/mimoto/service/UserMetadataService.java | 4 ++-- .../mosip/mimoto/service/WalletCredentialService.java | 6 +++--- .../mosip/mimoto/service/impl/GoogleTokenService.java | 2 +- .../service/impl/WalletCredentialServiceImpl.java | 6 +++--- .../controller/WalletCredentialsControllerTest.java | 10 +++++----- .../security/oauth2/CustomOAuth2UserServiceTest.java | 10 +++++----- .../mosip/mimoto/service/GoogleTokenServiceTest.java | 5 ++--- .../mosip/mimoto/service/UserMetadataServiceTest.java | 8 ++++---- .../mimoto/service/WalletCredentialServiceTest.java | 10 +++++----- 11 files changed, 32 insertions(+), 33 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index 57247f2df..884c3ffc7 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -126,7 +126,7 @@ public ResponseEntity downloadCredential( log.info("Fetching and storing Verifiable Credential for walletId: {}", walletId); try { - VerifiableCredentialResponseDTO credentialResponseDTO = walletCredentialService.fetchAndStoreCredential( + VerifiableCredentialResponseDTO credentialResponseDTO = walletCredentialService.downloadVCAndStoreInDB( issuerId, credentialConfigurationId, tokenResponse, locale, walletId, base64EncodedWalletKey); return ResponseEntity.status(HttpStatus.OK).body(credentialResponseDTO); } catch (ExternalServiceUnavailableException e) { diff --git a/src/main/java/io/mosip/mimoto/security/oauth2/CustomOAuth2UserService.java b/src/main/java/io/mosip/mimoto/security/oauth2/CustomOAuth2UserService.java index be692a0d3..6f72365fb 100644 --- a/src/main/java/io/mosip/mimoto/security/oauth2/CustomOAuth2UserService.java +++ b/src/main/java/io/mosip/mimoto/security/oauth2/CustomOAuth2UserService.java @@ -91,7 +91,7 @@ private String extractProfilePicture(Map attributes, String pict private String updateUserMetadata(Map attributes, ProviderDataConfig provider, String registrationId) { String providerSubjectId = safeGet(attributes, StringUtils.defaultIfBlank(provider.getUserNameAttribute(), "sub")); try { - return userMetadataService.updateOrInsertUserMetadata( + return userMetadataService.updateOrCreateUserMetadata( providerSubjectId, registrationId, safeGet(attributes, "name"), diff --git a/src/main/java/io/mosip/mimoto/service/UserMetadataService.java b/src/main/java/io/mosip/mimoto/service/UserMetadataService.java index 575d7aa9a..391300892 100644 --- a/src/main/java/io/mosip/mimoto/service/UserMetadataService.java +++ b/src/main/java/io/mosip/mimoto/service/UserMetadataService.java @@ -29,7 +29,7 @@ public UserMetadata getUserMetadata(String providerSubjectId, String identityPro .map(user -> { try { UserMetadata decryptedUser = new UserMetadata(); - decryptedUser.setId(user.getId()); // Copy all needed fields + decryptedUser.setId(user.getId()); decryptedUser.setProviderSubjectId(user.getProviderSubjectId()); decryptedUser.setIdentityProvider(user.getIdentityProvider()); @@ -45,7 +45,7 @@ public UserMetadata getUserMetadata(String providerSubjectId, String identityPro .orElse(null); } - public String updateOrInsertUserMetadata(String providerSubjectId, String identityProvider, + public String updateOrCreateUserMetadata(String providerSubjectId, String identityProvider, String displayName, String profilePictureUrl, String email) throws EncryptionException, DecryptionException { Instant now = Instant.now(); diff --git a/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java b/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java index 3da199af1..c12ab7505 100644 --- a/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java +++ b/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java @@ -24,9 +24,9 @@ public interface WalletCredentialService { * @return The stored credential response. * @throws CredentialProcessingException If processing fails. */ - VerifiableCredentialResponseDTO fetchAndStoreCredential(String issuerId, String credentialConfigurationId, - TokenResponseDTO tokenResponse, - String locale, String walletId, String base64Key) + VerifiableCredentialResponseDTO downloadVCAndStoreInDB(String issuerId, String credentialConfigurationId, + TokenResponseDTO tokenResponse, + String locale, String walletId, String base64Key) throws CredentialProcessingException, ExternalServiceUnavailableException; /** diff --git a/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java b/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java index 538573c87..b4da18615 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java +++ b/src/main/java/io/mosip/mimoto/service/impl/GoogleTokenService.java @@ -82,7 +82,7 @@ public void processToken(String idToken, String provider, HttpServletRequest req picture = userMetadata.getProfilePictureUrl(); } } - userId = userMetadataService.updateOrInsertUserMetadata(sub, provider, name, picture, email); + userId = userMetadataService.updateOrCreateUserMetadata(sub, provider, name, picture, email); } catch (DecryptionException e) { log.error("Failed to store the user info in the database", e); throw new RuntimeException(); diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java index 9475570c3..3b0a51f44 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java @@ -60,9 +60,9 @@ public WalletCredentialServiceImpl(WalletCredentialsRepository repository, } @Override - public VerifiableCredentialResponseDTO fetchAndStoreCredential(String issuerId, String credentialConfigurationId, - TokenResponseDTO tokenResponse, - String locale, String walletId, String base64Key) + public VerifiableCredentialResponseDTO downloadVCAndStoreInDB(String issuerId, String credentialConfigurationId, + TokenResponseDTO tokenResponse, + String locale, String walletId, String base64Key) throws CredentialProcessingException, ExternalServiceUnavailableException { log.info("Fetching and storing credential for wallet: {}, issuer: {}, type: {}", walletId, issuerId, credentialConfigurationId); diff --git a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java index 460259b87..888fdefdc 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java @@ -92,7 +92,7 @@ public void setup() { public void shouldDownloadCredentialSuccessfully() throws Exception { setIssuerAndCredentialConfigurationId(issuer, credentialConfigurationId); when(idpService.getTokenResponse(eq(verifiableCredentialRequest))).thenReturn(new TokenResponseDTO()); - when(walletCredentialService.fetchAndStoreCredential(eq(issuer), eq(credentialConfigurationId), any(), eq(locale), eq(walletId), eq(walletKey))) + when(walletCredentialService.downloadVCAndStoreInDB(eq(issuer), eq(credentialConfigurationId), any(), eq(locale), eq(walletId), eq(walletKey))) .thenReturn(verifiableCredentialResponseDTO); mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) @@ -114,7 +114,7 @@ public void shouldDownloadCredentialSuccessfully() throws Exception { public void shouldReturnErroResponseWhenRequestedCredentialIsAlreadyAvailableInWallet() throws Exception { setIssuerAndCredentialConfigurationId(issuer, credentialConfigurationId); when(idpService.getTokenResponse(eq(verifiableCredentialRequest))).thenReturn(new TokenResponseDTO()); - when(walletCredentialService.fetchAndStoreCredential(eq(issuer), eq(credentialConfigurationId), any(), eq(locale), eq(walletId), eq(walletKey))) + when(walletCredentialService.downloadVCAndStoreInDB(eq(issuer), eq(credentialConfigurationId), any(), eq(locale), eq(walletId), eq(walletKey))) .thenThrow(new InvalidRequestException(CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), "Duplicate credential for issuer and type")); mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) @@ -156,7 +156,7 @@ public void shouldCallServiceWithCorrectParameters() throws Exception { verify(idpService).getTokenResponse(eq(verifiableCredentialRequest)); verify(walletCredentialService - ).fetchAndStoreCredential(eq(issuer), eq(credentialConfigurationId), any(), eq("fr"), eq(walletId), eq(walletKey)); + ).downloadVCAndStoreInDB(eq(issuer), eq(credentialConfigurationId), any(), eq("fr"), eq(walletId), eq(walletKey)); } @Test @@ -170,7 +170,7 @@ public void shouldSetDefaultAndProceedWhenOptionalRequestParametersAreNotPassed( .sessionAttr("wallet_key", walletKey)); // Default value for vcStorageExpiryLimit is -1 and locale is "en" - verify(walletCredentialService).fetchAndStoreCredential(any(), any(), any(), eq("en"), eq(walletId), eq(walletKey)); + verify(walletCredentialService).downloadVCAndStoreInDB(any(), any(), any(), eq("en"), eq(walletId), eq(walletKey)); } @Test @@ -279,7 +279,7 @@ public void shouldThrowServiceUnavailableForTokenResponseFailure() throws Except public void shouldThrowServiceUnavailableForExternalServiceFailure() throws Exception { setIssuerAndCredentialConfigurationId(issuer, credentialConfigurationId); when(idpService.getTokenResponse(anyMap())).thenReturn(new TokenResponseDTO()); - when(walletCredentialService.fetchAndStoreCredential(anyString(), anyString(), any(), anyString(), anyString(), anyString())) + when(walletCredentialService.downloadVCAndStoreInDB(anyString(), anyString(), any(), anyString(), anyString(), anyString())) .thenThrow(new ExternalServiceUnavailableException("Service unavailable", "Service unavailable")); mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) diff --git a/src/test/java/io/mosip/mimoto/security/oauth2/CustomOAuth2UserServiceTest.java b/src/test/java/io/mosip/mimoto/security/oauth2/CustomOAuth2UserServiceTest.java index c99865fef..e0fbe4e52 100644 --- a/src/test/java/io/mosip/mimoto/security/oauth2/CustomOAuth2UserServiceTest.java +++ b/src/test/java/io/mosip/mimoto/security/oauth2/CustomOAuth2UserServiceTest.java @@ -108,7 +108,7 @@ void testLoadUserSuccessfulFlow() throws DecryptionException { providersConfig.put("test-provider", providerConfig); when(providerProperties.getProvider()).thenReturn(providersConfig); - when(userMetadataService.updateOrInsertUserMetadata(anyString(), anyString(), anyString(), anyString(), anyString())) + when(userMetadataService.updateOrCreateUserMetadata(anyString(), anyString(), anyString(), anyString(), anyString())) .thenReturn("test-user-id"); customOAuth2UserService = new TestableOAuth2UserService(providerProperties, userMetadataService, defaultUser); @@ -124,7 +124,7 @@ void testLoadUserSuccessfulFlow() throws DecryptionException { assertEquals("https://example.com/avatar.jpg", actualUser.getAttributes().get("picture")); assertEquals("test-user-id", actualUser.getAttributes().get(SessionKeys.USER_ID)); - verify(userMetadataService).updateOrInsertUserMetadata( + verify(userMetadataService).updateOrCreateUserMetadata( "test-subject", "test-provider", "Test User", @@ -163,7 +163,7 @@ void testLoadUserWithNestedPictureData() throws DecryptionException { providersConfig.put("test-provider", providerConfig); when(providerProperties.getProvider()).thenReturn(providersConfig); - when(userMetadataService.updateOrInsertUserMetadata(anyString(), anyString(), anyString(), anyString(), anyString())) + when(userMetadataService.updateOrCreateUserMetadata(anyString(), anyString(), anyString(), anyString(), anyString())) .thenReturn("nested-user-id"); customOAuth2UserService = new TestableOAuth2UserService(providerProperties, userMetadataService, nestedPictureUser); @@ -201,7 +201,7 @@ void testLoadUserThrowsRuntimeExceptionOnDecryptionFailure() throws DecryptionEx providersConfig.put("test-provider", providerConfig); when(providerProperties.getProvider()).thenReturn(providersConfig); - when(userMetadataService.updateOrInsertUserMetadata(any(), any(), any(), any(), any())) + when(userMetadataService.updateOrCreateUserMetadata(any(), any(), any(), any(), any())) .thenThrow(new DecryptionException(ErrorConstants.DECRYPTION_FAILED.getErrorCode(), "Decryption failed")); customOAuth2UserService = new TestableOAuth2UserService(providerProperties, userMetadataService, errorUser); @@ -236,7 +236,7 @@ void testLoadUserWithMissingOptionalAttributes() throws DecryptionException { providersConfig.put("test-provider", providerConfig); when(providerProperties.getProvider()).thenReturn(providersConfig); - when(userMetadataService.updateOrInsertUserMetadata(any(), any(), any(), any(), any())) + when(userMetadataService.updateOrCreateUserMetadata(any(), any(), any(), any(), any())) .thenReturn("minimal-user-id"); customOAuth2UserService = new TestableOAuth2UserService(providerProperties, userMetadataService, minimalUser); diff --git a/src/test/java/io/mosip/mimoto/service/GoogleTokenServiceTest.java b/src/test/java/io/mosip/mimoto/service/GoogleTokenServiceTest.java index b8712992e..1255801a7 100644 --- a/src/test/java/io/mosip/mimoto/service/GoogleTokenServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/GoogleTokenServiceTest.java @@ -18,7 +18,6 @@ import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken; import org.springframework.security.oauth2.jwt.Jwt; -import org.springframework.security.oauth2.jwt.JwtException; import java.time.Instant; import java.util.Collections; @@ -95,12 +94,12 @@ void setUp() { @Test void processTokenValidTokenShouldCallDependenciesAndSetSessionAndSecurityContext() throws Exception { when(tokenDecoder.decode(idToken)).thenReturn(validJwt); - when(userMetadataService.updateOrInsertUserMetadata("google-subject-id", provider, "Test User", "http://example.com/picture.jpg", "test@example.com")).thenReturn("test-user-id"); + when(userMetadataService.updateOrCreateUserMetadata("google-subject-id", provider, "Test User", "http://example.com/picture.jpg", "test@example.com")).thenReturn("test-user-id"); googleTokenService.processToken(idToken, provider, request, response); verify(tokenDecoder).decode(idToken); - verify(userMetadataService).updateOrInsertUserMetadata("google-subject-id", provider, "Test User", "http://example.com/picture.jpg", "test@example.com"); + verify(userMetadataService).updateOrCreateUserMetadata("google-subject-id", provider, "Test User", "http://example.com/picture.jpg", "test@example.com"); verify(sessionManager).setupSession(eq(request), eq(provider), userMetadataDTOArgumentCaptor.capture(), eq("test-user-id")); verify(securityContextManager).setupSecurityContext(oauth2TokenCaptor.capture(), eq(request), eq(response)); diff --git a/src/test/java/io/mosip/mimoto/service/UserMetadataServiceTest.java b/src/test/java/io/mosip/mimoto/service/UserMetadataServiceTest.java index c4aa00147..1f04f43d7 100644 --- a/src/test/java/io/mosip/mimoto/service/UserMetadataServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/UserMetadataServiceTest.java @@ -70,7 +70,7 @@ public void shouldUpdateUserMetadataForSameProviderSubjectIdAndSameIdentityProvi when(encryptionService.encrypt(email)).thenReturn("encryptedEmail"); when(userMetadataRepository.save(any(UserMetadata.class))).thenReturn(userMetadata); - String storedUserId = userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, updatedDisplayName, profilePictureUrl, email); + String storedUserId = userMetadataService.updateOrCreateUserMetadata(providerSubjectId, identityProvider, updatedDisplayName, profilePictureUrl, email); assertEquals(userId, storedUserId); ArgumentCaptor userMetadataCaptor = ArgumentCaptor.forClass(UserMetadata.class); @@ -103,7 +103,7 @@ public void shouldCreateNewUserMetadataForSameProviderSubjectIdAndDifferentIdent when(encryptionService.encrypt(email)).thenReturn("encryptedEmail"); when(userMetadataRepository.save(any(UserMetadata.class))).thenReturn(newUserMetadata); - String storedUserId = userMetadataService.updateOrInsertUserMetadata(providerSubjectId, newIdentityProvider, displayName, profilePictureUrl, email); + String storedUserId = userMetadataService.updateOrCreateUserMetadata(providerSubjectId, newIdentityProvider, displayName, profilePictureUrl, email); assertEquals(newUserId, storedUserId); ArgumentCaptor userMetadataCaptor = ArgumentCaptor.forClass(UserMetadata.class); @@ -137,7 +137,7 @@ public void shouldCreateNewUserMetadataForDifferentProviderSubjectIdAndSameIdent when(encryptionService.encrypt(email)).thenReturn("encryptedEmail"); when(userMetadataRepository.save(any(UserMetadata.class))).thenReturn(newUserMetadata); - String storedUserId = userMetadataService.updateOrInsertUserMetadata(newProviderSubjectId, identityProvider, displayName, profilePictureUrl, email); + String storedUserId = userMetadataService.updateOrCreateUserMetadata(newProviderSubjectId, identityProvider, displayName, profilePictureUrl, email); assertEquals(newUserId, storedUserId); ArgumentCaptor userMetadataCaptor = ArgumentCaptor.forClass(UserMetadata.class); @@ -158,7 +158,7 @@ public void shouldNotCreateNewUserMetadataForSameProviderSubjectIdAndSameIdentit when(encryptionService.decrypt(userMetadata.getProfilePictureUrl())).thenReturn(profilePictureUrl); when(encryptionService.decrypt(userMetadata.getEmail())).thenReturn(email); - String storedUserId = userMetadataService.updateOrInsertUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); + String storedUserId = userMetadataService.updateOrCreateUserMetadata(providerSubjectId, identityProvider, displayName, profilePictureUrl, email); assertEquals(userId, storedUserId); verify(userMetadataRepository, times(0)).save(any(UserMetadata.class)); diff --git a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java index 50ffb1763..0454bed14 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java @@ -90,7 +90,7 @@ public void setUp() { } @Test - public void shouldFetchAndStoreCredentialSuccessfully() throws Exception { + public void shouldDownloadVCAndStoreInDBSuccessfully() throws Exception { String mosipIssuerId = "Mosip"; VerifiableCredentialResponseDTO expectedResponse = new VerifiableCredentialResponseDTO(); expectedResponse.setCredentialId(credentialId); @@ -99,7 +99,7 @@ public void shouldFetchAndStoreCredentialSuccessfully() throws Exception { when(credentialProcessor.downloadCredentialAndStoreInDB(tokenResponse, credentialType, walletId, base64Key, mosipIssuerId, locale)) .thenReturn(expectedResponse); - VerifiableCredentialResponseDTO actualResponse = walletCredentialService.fetchAndStoreCredential( + VerifiableCredentialResponseDTO actualResponse = walletCredentialService.downloadVCAndStoreInDB( mosipIssuerId, credentialType, tokenResponse, locale, walletId, base64Key); assertEquals(expectedResponse, actualResponse); @@ -112,7 +112,7 @@ public void shouldThrowDuplicateCredentialExceptionForMosipIssuer() { when(walletCredentialsRepository.existsByIssuerIdAndCredentialTypeAndWalletId("Mosip", credentialType, walletId)).thenReturn(true); InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> - walletCredentialService.fetchAndStoreCredential("Mosip", credentialType, tokenResponse, locale, walletId, base64Key)); + walletCredentialService.downloadVCAndStoreInDB("Mosip", credentialType, tokenResponse, locale, walletId, base64Key)); assertEquals(CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), exception.getErrorCode()); assertEquals("credential_download_error --> Duplicate credential for issuer and type", exception.getMessage()); @@ -128,7 +128,7 @@ public void shouldFetchAndStoreNonMosipIssuerCredential() throws Exception { when(credentialProcessor.downloadCredentialAndStoreInDB(tokenResponse, credentialType, walletId, base64Key, issuerId, locale)) .thenReturn(expectedResponse); - VerifiableCredentialResponseDTO actualResponse = walletCredentialService.fetchAndStoreCredential( + VerifiableCredentialResponseDTO actualResponse = walletCredentialService.downloadVCAndStoreInDB( issuerId, credentialType, tokenResponse, locale, walletId, base64Key); assertEquals(expectedResponse, actualResponse); @@ -144,7 +144,7 @@ public void shouldThrowExternalServiceUnavailableException() throws Exception { .thenThrow(new ExternalServiceUnavailableException("SERVICE_UNAVAILABLE", "Service unavailable")); ExternalServiceUnavailableException exception = assertThrows(ExternalServiceUnavailableException.class, () -> - walletCredentialService.fetchAndStoreCredential(mosipIssuerId, credentialType, tokenResponse, locale, walletId, base64Key)); + walletCredentialService.downloadVCAndStoreInDB(mosipIssuerId, credentialType, tokenResponse, locale, walletId, base64Key)); assertEquals("SERVICE_UNAVAILABLE", exception.getErrorCode()); assertEquals("SERVICE_UNAVAILABLE --> Service unavailable", exception.getMessage()); From 4d7e6e589aaa17475f4d9ac1adf7429ee92f4262 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 30 Jun 2025 19:04:40 +0530 Subject: [PATCH 704/860] injiweb-1605 removed unnecessary exceptions Signed-off-by: Gurpreet41082 --- .../mimoto/controller/IssuersController.java | 11 ++----- .../mosip/mimoto/service/IssuersService.java | 4 +-- .../service/impl/IssuersServiceImpl.java | 5 ++-- .../impl/WalletCredentialServiceImpl.java | 3 +- .../mimoto/service/IssuersServiceTest.java | 30 ++++++++----------- 5 files changed, 21 insertions(+), 32 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/IssuersController.java b/src/main/java/io/mosip/mimoto/controller/IssuersController.java index 71961e3a8..5aaf10628 100644 --- a/src/main/java/io/mosip/mimoto/controller/IssuersController.java +++ b/src/main/java/io/mosip/mimoto/controller/IssuersController.java @@ -7,9 +7,7 @@ import io.mosip.mimoto.dto.IssuersDTO; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.exception.ApiNotAccessibleException; -import io.mosip.mimoto.exception.AuthorizationServerWellknownResponseException; import io.mosip.mimoto.exception.InvalidIssuerIdException; -import io.mosip.mimoto.exception.InvalidWellknownResponseException; import io.mosip.mimoto.service.IssuersService; import io.mosip.mimoto.util.Utilities; import io.swagger.v3.oas.annotations.Operation; @@ -33,11 +31,9 @@ @RequestMapping(value = "/issuers") @Tag(name = SwaggerLiteralConstants.ISSUERS_NAME, description = SwaggerLiteralConstants.ISSUERS_DESCRIPTION) public class IssuersController { - @Autowired - IssuersService issuersService; @Autowired - Utilities utilities; + IssuersService issuersService; @Operation(summary = SwaggerLiteralConstants.ISSUERS_GET_ISSUERS_SUMMARY, description = SwaggerLiteralConstants.ISSUERS_GET_ISSUERS_DESCRIPTION) @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE) @@ -45,8 +41,7 @@ public ResponseEntity> getAllIssuers(@RequestParam(r ResponseWrapper responseWrapper = new ResponseWrapper<>(); try { responseWrapper.setResponse(issuersService.getIssuers(search)); - } catch (ApiNotAccessibleException | IOException | AuthorizationServerWellknownResponseException | - InvalidWellknownResponseException e) { + } catch (ApiNotAccessibleException | IOException e) { log.error("Exception occurred while fetching issuers ", e); responseWrapper.setErrors(List.of(new ErrorDTO(API_NOT_ACCESSIBLE_EXCEPTION.getCode(), API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); @@ -87,7 +82,7 @@ public ResponseEntity> getIssuerConfig(@PathVariable( responseWrapper.setResponse(issuerDTO); return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); } catch (InvalidIssuerIdException exception) { - log.error("invalid issuer id passed - ", issuerId); + log.error("invalid issuer id {} passed - ", issuerId); responseWrapper.setErrors(List.of(new ErrorDTO(INVALID_ISSUER_ID_EXCEPTION.getCode(), INVALID_ISSUER_ID_EXCEPTION.getMessage()))); return ResponseEntity.status(HttpStatus.NOT_FOUND).body(responseWrapper); } catch (Exception exception) { diff --git a/src/main/java/io/mosip/mimoto/service/IssuersService.java b/src/main/java/io/mosip/mimoto/service/IssuersService.java index a205826ce..647db4e49 100644 --- a/src/main/java/io/mosip/mimoto/service/IssuersService.java +++ b/src/main/java/io/mosip/mimoto/service/IssuersService.java @@ -12,7 +12,7 @@ import java.io.IOException; public interface IssuersService { - IssuersDTO getIssuers(String search) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException; + IssuersDTO getIssuers(String search) throws ApiNotAccessibleException, IOException; IssuerDTO getIssuerDetails(String issuerId) throws ApiNotAccessibleException, IOException, InvalidIssuerIdException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException; @@ -20,5 +20,5 @@ public interface IssuersService { CredentialIssuerConfiguration getIssuerConfiguration(String issuerId) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException; - IssuerConfig getIssuerConfig(String issuerId, @NotBlank String credentialType) throws ApiNotAccessibleException, IOException, InvalidIssuerIdException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException; + IssuerConfig getIssuerConfig(String issuerId, @NotBlank String credentialType) throws ApiNotAccessibleException, InvalidIssuerIdException; } diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index f4767fe2a..e6da36d1b 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -37,7 +37,7 @@ public class IssuersServiceImpl implements IssuersService { @Override @Cacheable(value = "issuersConfig", key = "#p0 ?: 'allIssuersConfig'") - public IssuersDTO getIssuers(String search) throws ApiNotAccessibleException, AuthorizationServerWellknownResponseException, IOException, InvalidWellknownResponseException { + public IssuersDTO getIssuers(String search) throws ApiNotAccessibleException, IOException { IssuersDTO issuersDTO = getAllIssuers(); issuersDTO = getAllEnabledIssuers(issuersDTO); issuersDTO = getFilteredIssuers(issuersDTO, search); @@ -100,7 +100,8 @@ public CredentialIssuerConfiguration getIssuerConfiguration(String issuerId) thr ); } - public IssuerConfig getIssuerConfig(String issuerId, @NotBlank String credentialType) throws ApiNotAccessibleException, IOException, InvalidIssuerIdException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { + @Override + public IssuerConfig getIssuerConfig(String issuerId, @NotBlank String credentialType) throws ApiNotAccessibleException, InvalidIssuerIdException { log.info("Fetching issuer config for issuerId: {}", issuerId); try { IssuerDTO issuerDTO = getIssuerDetails(issuerId); diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java index 3b0a51f44..2d9a16994 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java @@ -94,8 +94,7 @@ public List fetchAllCredentialsForWallet(String IssuerConfig issuerConfig = null; try { issuerConfig = issuersService.getIssuerConfig(issuerId, credential.getCredentialMetadata().getCredentialType()); - } catch (ApiNotAccessibleException | IOException | AuthorizationServerWellknownResponseException | - InvalidWellknownResponseException e) { + } catch (ApiNotAccessibleException e) { log.error("Failed to fetch issuer details for issuerId: {}", issuerId, e); } return VerifiableCredentialResponseDTO.fromIssuerConfig(issuerConfig, locale, credential.getId()); diff --git a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java index 8776a6e21..282f0de20 100644 --- a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java @@ -48,8 +48,6 @@ public class IssuersServiceTest { @Spy ObjectMapper objectMapper; - List issuerConfigRelatedFields = List.of("additional_headers", "authorization_endpoint", "authorization_audience", "credential_endpoint", "credential_audience"); - String issuerWellKnownUrl, issuerId, credentialIssuerHostUrl, authServerWellknownUrl, issuersConfigJsonValue; CredentialIssuerConfiguration expectedCredentialIssuerConfiguration; IssuersDTO issuers = new IssuersDTO(); @@ -78,7 +76,7 @@ public void setUp() throws Exception { } @Test - public void shouldReturnAllIssuersWhenSearchValueIsNull() throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { + public void shouldReturnAllIssuersWhenSearchValueIsNull() throws ApiNotAccessibleException, IOException { issuers.setIssuers(List.of(getIssuerConfigDTO("Issuer1"), getIssuerConfigDTO("Issuer2"))); issuersConfigJsonValue = new Gson().toJson(issuers); Mockito.when(utilities.getIssuersConfigJsonValue()).thenReturn(issuersConfigJsonValue); @@ -93,7 +91,7 @@ public void shouldReturnAllIssuersWhenSearchValueIsNull() throws ApiNotAccessibl } @Test - public void shouldReturnMatchingIssuersWhenSearchValuePatternMatchesWithIssuerName() throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { + public void shouldReturnMatchingIssuersWhenSearchValuePatternMatchesWithIssuerName() throws ApiNotAccessibleException, IOException { issuers.setIssuers(List.of(getIssuerConfigDTO("Issuer1"), getIssuerConfigDTO("Issuer2"))); issuersConfigJsonValue = new Gson().toJson(issuers); Mockito.when(utilities.getIssuersConfigJsonValue()).thenReturn(issuersConfigJsonValue); @@ -108,7 +106,7 @@ public void shouldReturnMatchingIssuersWhenSearchValuePatternMatchesWithIssuerNa } @Test(expected = ApiNotAccessibleException.class) - public void shouldThrowApiNotAccessibleExceptionWhenIssuersJsonStringIsNullForGettingAllIssuers() throws IOException, ApiNotAccessibleException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { + public void shouldThrowApiNotAccessibleExceptionWhenIssuersJsonStringIsNullForGettingAllIssuers() throws IOException, ApiNotAccessibleException { Mockito.when(utilities.getIssuersConfigJsonValue()).thenReturn(null); issuersService.getIssuers(null); @@ -147,7 +145,7 @@ public void shouldThrowApiNotAccessibleExceptionWhenIssuersJsonStringIsNullForGe } @Test - public void shouldReturnOnlyEnabledIssuers() throws IOException, ApiNotAccessibleException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { + public void shouldReturnOnlyEnabledIssuers() throws IOException, ApiNotAccessibleException { IssuersDTO issuers = new IssuersDTO(); IssuerDTO enabledIssuer = getIssuerConfigDTO("Issuer1"); IssuerDTO disabledIssuer = getIssuerConfigDTO("Issuer2"); @@ -162,8 +160,8 @@ public void shouldReturnOnlyEnabledIssuers() throws IOException, ApiNotAccessibl IssuersDTO actualIssuersDTO = issuersService.getIssuers(""); assertEquals(expectedIssuersDTO, actualIssuersDTO); - assertEquals(actualIssuersDTO.getIssuers().get(0).getEnabled(), "true"); - assertEquals(actualIssuersDTO.getIssuers().size(), 1); + assertEquals("true", actualIssuersDTO.getIssuers().getFirst().getEnabled()); + assertEquals(1, actualIssuersDTO.getIssuers().size()); } @Test @@ -177,9 +175,7 @@ public void shouldReturnProperCredentialConfigurationsForTheRequestedIssuer() th public void issuersConfigShouldThrowExceptionIfAnyErrorOccurredWhileFetchingIssuersWellknown() { Mockito.when(utilities.getIssuersConfigJsonValue()).thenReturn(null); - ApiNotAccessibleException actualException = assertThrows(ApiNotAccessibleException.class, () -> { - issuersService.getIssuerConfiguration(issuerId); - }); + ApiNotAccessibleException actualException = assertThrows(ApiNotAccessibleException.class, () -> issuersService.getIssuerConfiguration(issuerId)); assertEquals("RESIDENT-APP-026 --> Api not accessible failure", actualException.getMessage()); verify(utilities, times(1)).getIssuersConfigJsonValue(); @@ -187,12 +183,10 @@ public void issuersConfigShouldThrowExceptionIfAnyErrorOccurredWhileFetchingIssu @Test - public void issuersConfigShouldThrowExceptionIfAnyErrorOccurredWhileFetchingIssuersAuthorizationServerWellknown() throws IOException, AuthorizationServerWellknownResponseException { + public void issuersConfigShouldThrowExceptionIfAnyErrorOccurredWhileFetchingIssuersAuthorizationServerWellknown() throws AuthorizationServerWellknownResponseException { Mockito.when(issuersConfigUtil.getAuthServerWellknown(authServerWellknownUrl)).thenThrow(new AuthorizationServerWellknownResponseException("well-known api is not accessible")); - AuthorizationServerWellknownResponseException actualException = assertThrows(AuthorizationServerWellknownResponseException.class, () -> { - issuersService.getIssuerConfiguration("Issuer3id"); - }); + AuthorizationServerWellknownResponseException actualException = assertThrows(AuthorizationServerWellknownResponseException.class, () -> issuersService.getIssuerConfiguration("Issuer3id")); assertEquals("RESIDENT-APP-042 --> Invalid Authorization Server well-known from server:\n" + "well-known api is not accessible", actualException.getMessage()); @@ -203,7 +197,7 @@ public void issuersConfigShouldThrowExceptionIfAnyErrorOccurredWhileFetchingIssu // Add these test cases to the existing IssuersServiceTest class @Test - public void shouldReturnIssuerConfigForValidIssuerIdAndCredentialType() throws ApiNotAccessibleException, IOException, InvalidIssuerIdException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { + public void shouldReturnIssuerConfigForValidIssuerIdAndCredentialType() throws ApiNotAccessibleException, IOException, InvalidIssuerIdException, InvalidWellknownResponseException { // Arrange String issuerId = "Issuer3id"; String credentialType = "CredentialType1"; @@ -262,7 +256,7 @@ public void shouldThrowApiNotAccessibleExceptionWhenIssuersConfigJsonIsNull() th } @Test - public void shouldThrowApiNotAccessibleExceptionWhenGetIssuerWellknownFails() throws IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException, ApiNotAccessibleException { + public void shouldThrowApiNotAccessibleExceptionWhenGetIssuerWellknownFails() throws IOException, InvalidWellknownResponseException, ApiNotAccessibleException { // Arrange String issuerId = "Issuer3id"; String credentialType = "CredentialType1"; @@ -280,7 +274,7 @@ public void shouldThrowApiNotAccessibleExceptionWhenGetIssuerWellknownFails() th } @Test - public void shouldLogErrorWhenApiNotAccessibleExceptionOccurs() throws IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException, ApiNotAccessibleException { + public void shouldLogErrorWhenApiNotAccessibleExceptionOccurs() throws IOException, InvalidWellknownResponseException, ApiNotAccessibleException { // Arrange String issuerId = "Issuer3id"; String credentialType = "CredentialType1"; From 146fc8344cb36596f7d07cdaf29a97ddc2d849c5 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 30 Jun 2025 19:35:52 +0530 Subject: [PATCH 705/860] injiweb-1605 added property for unique download Signed-off-by: Gurpreet41082 --- .../service/impl/WalletCredentialServiceImpl.java | 11 ++++++++++- .../mimoto/service/WalletCredentialServiceTest.java | 7 ++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java index 2d9a16994..9ed89ec43 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java @@ -21,14 +21,17 @@ import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.InputStreamResource; import org.springframework.stereotype.Service; import java.io.ByteArrayInputStream; import java.io.IOException; +import java.util.Arrays; import java.util.List; import java.util.Set; import java.util.function.Supplier; +import java.util.stream.Collectors; import static io.mosip.mimoto.exception.ErrorConstants.*; @@ -38,6 +41,10 @@ @Slf4j @Service public class WalletCredentialServiceImpl implements WalletCredentialService { + + @Value("${mosip.inji.wallet.issuersWithSingleVcLimit:Mosip}") + private String issuersWithSingleVcLimit; + private final WalletCredentialsRepository repository; private final IssuersService issuersService; private final CredentialProcessor credentialProcessor; @@ -66,7 +73,9 @@ public VerifiableCredentialResponseDTO downloadVCAndStoreInDB(String issuerId, S throws CredentialProcessingException, ExternalServiceUnavailableException { log.info("Fetching and storing credential for wallet: {}, issuer: {}, type: {}", walletId, issuerId, credentialConfigurationId); - Set issuers = Set.of("Mosip"); + Set issuers = Arrays.stream(issuersWithSingleVcLimit.split(",")) + .map(String::trim) + .collect(Collectors.toSet()); if (issuers.contains(issuerId) && repository.existsByIssuerIdAndCredentialTypeAndWalletId(issuerId, credentialConfigurationId, walletId)) { log.warn("Duplicate credential found for issuer: {}, type: {}, wallet: {}", issuerId, credentialConfigurationId, walletId); throw new InvalidRequestException(CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), "Duplicate credential for issuer and type"); diff --git a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java index 0454bed14..90f7f3f99 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java @@ -21,6 +21,7 @@ import org.mockito.junit.MockitoJUnitRunner; import java.io.ByteArrayInputStream; +import java.lang.reflect.Field; import java.time.Instant; import java.util.List; import java.util.Map; @@ -67,7 +68,7 @@ public class WalletCredentialServiceTest { private IssuerConfig issuerConfig; @Before - public void setUp() { + public void setUp() throws Exception { tokenResponse = new TokenResponseDTO(); tokenResponse.setAccess_token("accessToken"); @@ -87,6 +88,10 @@ public void setUp() { CredentialIssuerWellKnownResponse wellKnownResponse = new CredentialIssuerWellKnownResponse(); CredentialsSupportedResponse credentialsSupportedResponse = new CredentialsSupportedResponse(); issuerConfig = new IssuerConfig(issuerDTO, wellKnownResponse, credentialsSupportedResponse); + + Field field = WalletCredentialServiceImpl.class.getDeclaredField("issuersWithSingleVcLimit"); + field.setAccessible(true); + field.set(walletCredentialService, "Mosip"); } @Test From 2708b4d18be7a8605ed8328685c6ef9f7795f762 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 30 Jun 2025 19:43:16 +0530 Subject: [PATCH 706/860] injiweb-1605 added the refactoring of WalletServiceImpl Signed-off-by: Gurpreet41082 --- .../mimoto/service/impl/WalletServiceImpl.java | 18 +++++++----------- .../resources/application-default.properties | 3 ++- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java index 8511e047f..96883b9c3 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java @@ -62,14 +62,12 @@ public WalletResponseDto unlockWallet(String walletId, String pin, HttpSession h validator.validateUserId(userId); validator.validateWalletPin(pin); - Wallet wallet = repository.findByUserIdAndId(userId, walletId) - .orElseThrow(getWalletNotFoundExceptionSupplier(userId, walletId)); - - String decryptedWalletKey = walletUtil.decryptWalletKey(wallet.getWalletKey(), pin); - httpSession.setAttribute(SessionKeys.WALLET_KEY, decryptedWalletKey); - httpSession.setAttribute(SessionKeys.WALLET_ID, walletId); - - return new WalletResponseDto(walletId, wallet.getWalletMetadata().getName()); + return repository.findByUserIdAndId(userId, walletId).map(wallet -> { + String decryptedWalletKey = walletUtil.decryptWalletKey(wallet.getWalletKey(), pin); + httpSession.setAttribute(SessionKeys.WALLET_KEY, decryptedWalletKey); + httpSession.setAttribute(SessionKeys.WALLET_ID, walletId); + return new WalletResponseDto(walletId, wallet.getWalletMetadata().getName()); + }).orElseThrow(getWalletNotFoundExceptionSupplier(userId, walletId)); } @Override @@ -79,9 +77,7 @@ public List getWallets(String userId) { log.info("Retrieving wallets for user: {}", userId); - List wallets = repository.findWalletByUserId(userId); - return wallets.stream() - .map(wallet -> WalletResponseDto.builder() + return repository.findWalletByUserId(userId).stream().map(wallet -> WalletResponseDto.builder() .walletId(wallet.getId()) .walletName(wallet.getWalletMetadata().getName()) .build()) diff --git a/src/main/resources/application-default.properties b/src/main/resources/application-default.properties index 03371ac42..1628bda46 100644 --- a/src/main/resources/application-default.properties +++ b/src/main/resources/application-default.properties @@ -17,6 +17,7 @@ spring.security.oauth2.client.provider.google.phoneNumberAttribute=phone_number #Inji Web Config mosip.inji.web.authentication.success.redirect.url=${mosip.inji.web.url}/user/passcode +mosip.inji.wallet.issuersWithSingleVcLimit=Mosip,Mock #Database config spring.datasource.url=jdbc:postgresql://${mosip.mimoto.database.hostname}:${mosip.mimoto.database.port}/inji_mimoto @@ -62,4 +63,4 @@ mosip.security.ignore-auth-urls=/safetynet/**,/actuator/**,/swagger-ui/**,/v3/ap mosip.inji.app.id=MIMOTO mosip.inji.encryption.algorithm=AES mosip.inji.encryption.key.size=256 -mosip.inji.jwt.default.algorithm=RS256 +mosip.inji.jwt.default.algorithm=RS256 \ No newline at end of file From 6697a5b184b76ae349dfdf8e1b520734bea5f20b Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 30 Jun 2025 20:18:11 +0530 Subject: [PATCH 707/860] injiweb-1605 fixed with the Stringutils Signed-off-by: Gurpreet41082 --- .../io/mosip/mimoto/util/CredentialProcessor.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java b/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java index f8d48dac4..604c29d12 100644 --- a/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java +++ b/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java @@ -17,6 +17,7 @@ import io.mosip.mimoto.service.CredentialVerifierService; import io.mosip.mimoto.service.IssuersService; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -77,23 +78,23 @@ public VerifiableCredentialResponseDTO downloadCredentialAndStoreInDB( String base64Key, String issuerId, String locale) throws InvalidRequestException, CredentialProcessingException, ExternalServiceUnavailableException, VCVerificationException { // Validate inputs - if (tokenResponse == null || tokenResponse.getAccess_token() == null) { + if (tokenResponse == null || StringUtils.isBlank(tokenResponse.getAccess_token())) { log.error("Invalid token response: null or missing access token"); throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Token response or access token cannot be null"); } - if (credentialConfigurationId == null || credentialConfigurationId.isBlank()) { + if (StringUtils.isBlank(credentialConfigurationId )) { log.error("Invalid credential type: null or blank"); throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Credential type cannot be null or blank"); } - if (walletId == null || walletId.isBlank()) { + if (StringUtils.isBlank(walletId)) { log.error("Invalid wallet ID: null or blank"); throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Wallet ID cannot be null or blank"); } - if (base64Key == null || base64Key.isBlank()) { + if (StringUtils.isBlank(base64Key)) { log.error("Invalid wallet key: null or blank"); throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Wallet key cannot be null or blank"); } - if (issuerId == null || issuerId.isBlank()) { + if (StringUtils.isBlank(issuerId)) { log.error("Invalid issuer ID: null or blank"); throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Issuer ID cannot be null or blank"); } From 8a4611634b4f212f866493adee497af199fb1fe9 Mon Sep 17 00:00:00 2001 From: Mohanachandran S Date: Mon, 30 Jun 2025 21:15:15 +0530 Subject: [PATCH 708/860] MOSIP-41343 - Automated the inji web login api's Signed-off-by: Mohanachandran S --- ...ional Test-classpath-arg-1659588646071.txt | 1 - ...ional Test-classpath-arg-1659589592502.txt | 1 - ...tionalTest-classpath-arg-1695652238739.txt | 1 - ...ration (1)-classpath-arg-1658840665646.txt | 1 - .../testscripts/GetWithParamAndHeader.java | 191 ++++ .../PostWithPathParamsAndCookie.java | 124 +++ ...athParamsHeadersAndCookieForAutoGenId.java | 128 +++ .../testscripts/SimplePostForAutoGenId.java | 6 +- .../mimoto/utils/MimotoConfigManager.java | 3 +- .../apirig/mimoto/utils/MimotoUtil.java | 38 +- .../resources/config/application.properties | 1 + .../main/resources/config/mimoto.properties | 91 +- .../mimoto/AddIdentity/AddIdentity.yml | 29 + .../GoogleLoginToken/GoogleLoginToken.hbs | 3 + .../GoogleLoginToken/GoogleLoginToken.yml | 76 ++ .../GoogleLoginTokenResult.hbs | 1 + .../LoginFlow/Authorization/Logout/Logout.hbs | 4 + .../LoginFlow/Authorization/Logout/Logout.yml | 51 + .../Authorization/Logout/LogoutResult.hbs | 2 + .../AuthenticateUser/AuthenticateUser.hbs | 15 + .../AuthenticateUser/AuthenticateUser.yml | 70 ++ .../AuthenticateUserResult.hbs | 1 + .../AuthorizationCode/AuthorizationCode.hbs | 19 + .../AuthorizationCode/AuthorizationCode.yml | 36 + .../AuthorizationCodeResult.hbs | 1 + .../DeleteCredentials/DeleteCredentials.hbs | 6 + .../DeleteCredentials/DeleteCredentials.yml | 147 +++ .../DeleteCredentialsResult.hbs | 2 + .../DownloadIssuerCredential.hbs | 11 + .../DownloadIssuerCredential.yml | 923 ++++++++++++++++++ .../DownloadIssuerCredentialResult.hbs | 4 + .../FetchAllCredentials.hbs | 6 + .../FetchAllCredentials.yml | 122 +++ .../FetchAllCredentialsResult.hbs | 2 + .../OAuthDetailsRequest.hbs | 17 + .../OAuthDetailsRequest.yml | 56 ++ .../OAuthDetailsRequestResult.hbs | 1 + .../ViewCredential/ViewCredential.hbs | 8 + .../ViewCredential/ViewCredential.yml | 366 +++++++ .../ViewCredentialAfterLogout.yml | 21 + .../ViewCredential/ViewCredentialResult.hbs | 2 + .../AuthenticateUserSunBirdC.hbs | 15 + .../AuthenticateUserSunBirdC.yml | 44 + .../AuthenticateUserSunBirdCResult.hbs | 1 + .../AuthorizationCodeSunBirdC.hbs | 19 + .../AuthorizationCodeSunBirdC.yml | 38 + .../AuthorizationCodeSunBirdCResult.hbs | 1 + .../DownloadIssuerCredential.hbs | 12 + .../DownloadIssuerCredential.yml | 122 +++ .../DownloadIssuerCredentialResult.hbs | 4 + .../OAuthDetailsRequestSunBirdC.hbs | 17 + .../OAuthDetailsRequestSunBirdC.yml | 56 ++ .../OAuthDetailsRequestSunBirdCResult.hbs | 1 + .../Users/GetUserProfile/GetUserProfile.hbs | 4 + .../Users/GetUserProfile/GetUserProfile.yml | 17 + .../GetUserProfile/GetUserProfileResult.hbs | 4 + .../GetUserProfileAfterLogout.hbs | 4 + .../GetUserProfileAfterLogout.yml | 17 + .../GetUserProfileAfterLogoutResult.hbs | 4 + .../Wallet/CreateWallet/CreateWallet.hbs | 7 + .../Wallet/CreateWallet/CreateWallet.yml | 421 ++++++++ .../CreateWallet/CreateWalletResult.hbs | 3 + .../Wallet/DeleteWallet/DeleteWallet.hbs | 5 + .../Wallet/DeleteWallet/DeleteWallet.yml | 122 +++ .../DeleteWallet/DeleteWalletResult.hbs | 2 + .../Wallet/GetWallets/GetWallets.hbs | 4 + .../Wallet/GetWallets/GetWallets.yml | 50 + .../Wallet/GetWallets/GetWalletsResult.hbs | 2 + .../Wallet/UnlockWallet/UnlockWallet.hbs | 6 + .../Wallet/UnlockWallet/UnlockWallet.yml | 92 ++ .../UnlockWallet/UnlockWalletResult.hbs | 4 + .../UnlockWalletAfterDelete.hbs | 6 + .../UnlockWalletAfterDelete.yml | 18 + .../UnlockWalletAfterDeleteResult.hbs | 4 + api-test/src/main/resources/mimoto/error2.hbs | 3 + .../main/resources/mimoto/responseCode.hbs | 3 + api-test/testNgXmlFiles/mimotoSuite.xml | 174 ++++ 77 files changed, 3883 insertions(+), 11 deletions(-) delete mode 100644 api-test/.temp-Functional Test-classpath-arg-1659588646071.txt delete mode 100644 api-test/.temp-Functional Test-classpath-arg-1659589592502.txt delete mode 100644 api-test/.temp-MosipFunctionalTest-classpath-arg-1695652238739.txt delete mode 100644 api-test/.temp-New_configuration (1)-classpath-arg-1658840665646.txt create mode 100644 api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/GetWithParamAndHeader.java create mode 100644 api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithPathParamsAndCookie.java create mode 100644 api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithPathParamsHeadersAndCookieForAutoGenId.java create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Authorization/GoogleLoginToken/GoogleLoginToken.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Authorization/GoogleLoginToken/GoogleLoginToken.yml create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Authorization/GoogleLoginToken/GoogleLoginTokenResult.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Authorization/Logout/Logout.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Authorization/Logout/Logout.yml create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Authorization/Logout/LogoutResult.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthenticateUser/AuthenticateUser.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthenticateUser/AuthenticateUser.yml create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthenticateUser/AuthenticateUserResult.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthorizationCode/AuthorizationCode.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthorizationCode/AuthorizationCode.yml create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthorizationCode/AuthorizationCodeResult.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DeleteCredentials/DeleteCredentials.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DeleteCredentials/DeleteCredentials.yml create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DeleteCredentials/DeleteCredentialsResult.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential.yml create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredentialResult.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/FetchAllCredentials/FetchAllCredentials.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/FetchAllCredentials/FetchAllCredentials.yml create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/FetchAllCredentials/FetchAllCredentialsResult.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/OAuthDetailsRequest/OAuthDetailsRequest.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/OAuthDetailsRequest/OAuthDetailsRequest.yml create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/OAuthDetailsRequest/OAuthDetailsRequestResult.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential.yml create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredentialAfterLogout.yml create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredentialResult.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthenticateUserSunBirdC/AuthenticateUserSunBirdCResult.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.yml create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdCResult.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/DownloadIssuerCredential/DownloadIssuerCredential.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/DownloadIssuerCredential/DownloadIssuerCredential.yml create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/DownloadIssuerCredential/DownloadIssuerCredentialResult.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdCResult.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Users/GetUserProfile/GetUserProfile.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Users/GetUserProfile/GetUserProfile.yml create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Users/GetUserProfile/GetUserProfileResult.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Users/GetUserProfileAfterLogout/GetUserProfileAfterLogout.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Users/GetUserProfileAfterLogout/GetUserProfileAfterLogout.yml create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Users/GetUserProfileAfterLogout/GetUserProfileAfterLogoutResult.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet.yml create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Wallet/CreateWallet/CreateWalletResult.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Wallet/DeleteWallet/DeleteWallet.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Wallet/DeleteWallet/DeleteWallet.yml create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Wallet/DeleteWallet/DeleteWalletResult.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Wallet/GetWallets/GetWallets.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Wallet/GetWallets/GetWallets.yml create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Wallet/GetWallets/GetWalletsResult.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWallet/UnlockWallet.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWallet/UnlockWallet.yml create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWallet/UnlockWalletResult.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWalletAfterDelete/UnlockWalletAfterDelete.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWalletAfterDelete/UnlockWalletAfterDelete.yml create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWalletAfterDelete/UnlockWalletAfterDeleteResult.hbs create mode 100644 api-test/src/main/resources/mimoto/error2.hbs create mode 100644 api-test/src/main/resources/mimoto/responseCode.hbs diff --git a/api-test/.temp-Functional Test-classpath-arg-1659588646071.txt b/api-test/.temp-Functional Test-classpath-arg-1659588646071.txt deleted file mode 100644 index bb81464f5..000000000 --- a/api-test/.temp-Functional Test-classpath-arg-1659588646071.txt +++ /dev/null @@ -1 +0,0 @@ --classpath D:\Mosip_Automation_Test\Docker_Test\MOSIP-19726\mosip-functional-tests\automationtests\target\test-classes;D:\Mosip_Automation_Test\Docker_Test\MOSIP-19726\mosip-functional-tests\automationtests\target\classes;C:\Users\Sohan.Dey\.m2\repository\com\opencsv\opencsv\4.1\opencsv-4.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-lang3\3.6\commons-lang3-3.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-text\1.1\commons-text-1.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\ibm\icu\icu4j\63.1\icu4j-63.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\keycloak\keycloak-admin-client\17.0.1\keycloak-admin-client-17.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\keycloak\keycloak-core\17.0.1\keycloak-core-17.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\keycloak\keycloak-common\17.0.1\keycloak-common-17.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-client\3.13.2.Final\resteasy-client-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\ws\rs\jboss-jaxrs-api_2.1_spec\2.0.1.Final\jboss-jaxrs-api_2.1_spec-2.0.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-jaxrs\3.13.2.Final\resteasy-jaxrs-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\reactivestreams\reactive-streams\1.0.3\reactive-streams-1.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\jakarta\validation\jakarta.validation-api\2.0.2\jakarta.validation-api-2.0.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\annotation\jboss-annotations-api_1.3_spec\2.0.1.Final\jboss-annotations-api_1.3_spec-2.0.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\activation\jakarta.activation\1.2.1\jakarta.activation-1.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\stephenc\jcip\jcip-annotations\1.0-1\jcip-annotations-1.0-1.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-multipart-provider\3.13.2.Final\resteasy-multipart-provider-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\mail\jakarta.mail\1.6.5\jakarta.mail-1.6.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\james\apache-mime4j\0.6\apache-mime4j-0.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-jackson2-provider\3.13.2.Final\resteasy-jackson2-provider-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\jaxrs\jackson-jaxrs-json-provider\2.10.5\jackson-jaxrs-json-provider-2.10.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\jaxrs\jackson-jaxrs-base\2.10.5\jackson-jaxrs-base-2.10.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\json-patch\1.9\json-patch-1.9.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\jackson-coreutils\1.6\jackson-coreutils-1.6.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\msg-simple\1.1\msg-simple-1.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\btf\1.2\btf-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-jaxb-provider\3.13.2.Final\resteasy-jaxb-provider-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\xml\bind\jboss-jaxb-api_2.3_spec\2.0.0.Final\jboss-jaxb-api_2.3_spec-2.0.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\javassist\javassist\3.25.0-GA\javassist-3.25.0-GA.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\jknack\handlebars\3.0.0\handlebars-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\antlr\antlr4-runtime\4.5.1-1\antlr4-runtime-4.5.1-1.jar;C:\Users\Sohan.Dey\.m2\repository\org\mozilla\rhino\1.7R4\rhino-1.7R4.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\slf4j-api\1.6.4\slf4j-api-1.6.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-collections4\4.3\commons-collections4-4.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\jsonwebtoken\jjwt\0.6.0\jjwt-0.6.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\flipkart\zjsonpatch\zjsonpatch\0.4.7\zjsonpatch-0.4.7.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk\1.11.368\aws-java-sdk-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dlm\1.11.368\aws-java-sdk-dlm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\jmespath-java\1.11.368\jmespath-java-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-macie\1.11.368\aws-java-sdk-macie-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-eks\1.11.368\aws-java-sdk-eks-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediatailor\1.11.368\aws-java-sdk-mediatailor-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-neptune\1.11.368\aws-java-sdk-neptune-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-pi\1.11.368\aws-java-sdk-pi-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iot1clickprojects\1.11.368\aws-java-sdk-iot1clickprojects-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iot1clickdevices\1.11.368\aws-java-sdk-iot1clickdevices-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iotanalytics\1.11.368\aws-java-sdk-iotanalytics-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-acmpca\1.11.368\aws-java-sdk-acmpca-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-secretsmanager\1.11.368\aws-java-sdk-secretsmanager-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-fms\1.11.368\aws-java-sdk-fms-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-connect\1.11.368\aws-java-sdk-connect-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-transcribe\1.11.368\aws-java-sdk-transcribe-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-autoscalingplans\1.11.368\aws-java-sdk-autoscalingplans-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-workmail\1.11.368\aws-java-sdk-workmail-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-servicediscovery\1.11.368\aws-java-sdk-servicediscovery-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloud9\1.11.368\aws-java-sdk-cloud9-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-serverlessapplicationrepository\1.11.368\aws-java-sdk-serverlessapplicationrepository-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-alexaforbusiness\1.11.368\aws-java-sdk-alexaforbusiness-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-resourcegroups\1.11.368\aws-java-sdk-resourcegroups-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-comprehend\1.11.368\aws-java-sdk-comprehend-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-translate\1.11.368\aws-java-sdk-translate-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sagemaker\1.11.368\aws-java-sdk-sagemaker-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iotjobsdataplane\1.11.368\aws-java-sdk-iotjobsdataplane-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sagemakerruntime\1.11.368\aws-java-sdk-sagemakerruntime-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-kinesisvideo\1.11.368\aws-java-sdk-kinesisvideo-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-codec-http\4.1.17.Final\netty-codec-http-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-codec\4.1.17.Final\netty-codec-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-handler\4.1.17.Final\netty-handler-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-buffer\4.1.17.Final\netty-buffer-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-common\4.1.17.Final\netty-common-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-transport\4.1.17.Final\netty-transport-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-resolver\4.1.17.Final\netty-resolver-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-appsync\1.11.368\aws-java-sdk-appsync-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-guardduty\1.11.368\aws-java-sdk-guardduty-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mq\1.11.368\aws-java-sdk-mq-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediaconvert\1.11.368\aws-java-sdk-mediaconvert-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediastore\1.11.368\aws-java-sdk-mediastore-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediastoredata\1.11.368\aws-java-sdk-mediastoredata-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-medialive\1.11.368\aws-java-sdk-medialive-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediapackage\1.11.368\aws-java-sdk-mediapackage-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-costexplorer\1.11.368\aws-java-sdk-costexplorer-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-pricing\1.11.368\aws-java-sdk-pricing-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mobile\1.11.368\aws-java-sdk-mobile-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudhsmv2\1.11.368\aws-java-sdk-cloudhsmv2-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-glue\1.11.368\aws-java-sdk-glue-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-migrationhub\1.11.368\aws-java-sdk-migrationhub-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dax\1.11.368\aws-java-sdk-dax-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-greengrass\1.11.368\aws-java-sdk-greengrass-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-athena\1.11.368\aws-java-sdk-athena-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-marketplaceentitlement\1.11.368\aws-java-sdk-marketplaceentitlement-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codestar\1.11.368\aws-java-sdk-codestar-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lexmodelbuilding\1.11.368\aws-java-sdk-lexmodelbuilding-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-resourcegroupstaggingapi\1.11.368\aws-java-sdk-resourcegroupstaggingapi-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-pinpoint\1.11.368\aws-java-sdk-pinpoint-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-xray\1.11.368\aws-java-sdk-xray-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-opsworkscm\1.11.368\aws-java-sdk-opsworkscm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-support\1.11.368\aws-java-sdk-support-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-simpledb\1.11.368\aws-java-sdk-simpledb-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-servicecatalog\1.11.368\aws-java-sdk-servicecatalog-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-servermigration\1.11.368\aws-java-sdk-servermigration-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-simpleworkflow\1.11.368\aws-java-sdk-simpleworkflow-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-storagegateway\1.11.368\aws-java-sdk-storagegateway-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-route53\1.11.368\aws-java-sdk-route53-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-s3\1.11.368\aws-java-sdk-s3-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-importexport\1.11.368\aws-java-sdk-importexport-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sts\1.11.368\aws-java-sdk-sts-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sqs\1.11.368\aws-java-sdk-sqs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-rds\1.11.368\aws-java-sdk-rds-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-redshift\1.11.368\aws-java-sdk-redshift-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticbeanstalk\1.11.368\aws-java-sdk-elasticbeanstalk-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-glacier\1.11.368\aws-java-sdk-glacier-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iam\1.11.368\aws-java-sdk-iam-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-datapipeline\1.11.368\aws-java-sdk-datapipeline-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticloadbalancing\1.11.368\aws-java-sdk-elasticloadbalancing-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticloadbalancingv2\1.11.368\aws-java-sdk-elasticloadbalancingv2-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-emr\1.11.368\aws-java-sdk-emr-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticache\1.11.368\aws-java-sdk-elasticache-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elastictranscoder\1.11.368\aws-java-sdk-elastictranscoder-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ec2\1.11.368\aws-java-sdk-ec2-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dynamodb\1.11.368\aws-java-sdk-dynamodb-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sns\1.11.368\aws-java-sdk-sns-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-budgets\1.11.368\aws-java-sdk-budgets-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudtrail\1.11.368\aws-java-sdk-cloudtrail-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudwatch\1.11.368\aws-java-sdk-cloudwatch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-logs\1.11.368\aws-java-sdk-logs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-events\1.11.368\aws-java-sdk-events-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cognitoidentity\1.11.368\aws-java-sdk-cognitoidentity-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cognitosync\1.11.368\aws-java-sdk-cognitosync-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-directconnect\1.11.368\aws-java-sdk-directconnect-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudformation\1.11.368\aws-java-sdk-cloudformation-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudfront\1.11.368\aws-java-sdk-cloudfront-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-clouddirectory\1.11.368\aws-java-sdk-clouddirectory-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-kinesis\1.11.368\aws-java-sdk-kinesis-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-opsworks\1.11.368\aws-java-sdk-opsworks-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ses\1.11.368\aws-java-sdk-ses-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-autoscaling\1.11.368\aws-java-sdk-autoscaling-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudsearch\1.11.368\aws-java-sdk-cloudsearch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudwatchmetrics\1.11.368\aws-java-sdk-cloudwatchmetrics-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codedeploy\1.11.368\aws-java-sdk-codedeploy-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codepipeline\1.11.368\aws-java-sdk-codepipeline-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-kms\1.11.368\aws-java-sdk-kms-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-config\1.11.368\aws-java-sdk-config-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lambda\1.11.368\aws-java-sdk-lambda-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ecs\1.11.368\aws-java-sdk-ecs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ecr\1.11.368\aws-java-sdk-ecr-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudhsm\1.11.368\aws-java-sdk-cloudhsm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ssm\1.11.368\aws-java-sdk-ssm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-workspaces\1.11.368\aws-java-sdk-workspaces-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-machinelearning\1.11.368\aws-java-sdk-machinelearning-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-directory\1.11.368\aws-java-sdk-directory-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-efs\1.11.368\aws-java-sdk-efs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codecommit\1.11.368\aws-java-sdk-codecommit-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-devicefarm\1.11.368\aws-java-sdk-devicefarm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticsearch\1.11.368\aws-java-sdk-elasticsearch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-waf\1.11.368\aws-java-sdk-waf-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-marketplacecommerceanalytics\1.11.368\aws-java-sdk-marketplacecommerceanalytics-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-inspector\1.11.368\aws-java-sdk-inspector-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iot\1.11.368\aws-java-sdk-iot-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-api-gateway\1.11.368\aws-java-sdk-api-gateway-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-acm\1.11.368\aws-java-sdk-acm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-gamelift\1.11.368\aws-java-sdk-gamelift-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dms\1.11.368\aws-java-sdk-dms-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-marketplacemeteringservice\1.11.368\aws-java-sdk-marketplacemeteringservice-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cognitoidp\1.11.368\aws-java-sdk-cognitoidp-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-discovery\1.11.368\aws-java-sdk-discovery-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-applicationautoscaling\1.11.368\aws-java-sdk-applicationautoscaling-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-snowball\1.11.368\aws-java-sdk-snowball-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-rekognition\1.11.368\aws-java-sdk-rekognition-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-polly\1.11.368\aws-java-sdk-polly-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lightsail\1.11.368\aws-java-sdk-lightsail-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-stepfunctions\1.11.368\aws-java-sdk-stepfunctions-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-health\1.11.368\aws-java-sdk-health-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-costandusagereport\1.11.368\aws-java-sdk-costandusagereport-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codebuild\1.11.368\aws-java-sdk-codebuild-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-appstream\1.11.368\aws-java-sdk-appstream-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-shield\1.11.368\aws-java-sdk-shield-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-batch\1.11.368\aws-java-sdk-batch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lex\1.11.368\aws-java-sdk-lex-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mechanicalturkrequester\1.11.368\aws-java-sdk-mechanicalturkrequester-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-organizations\1.11.368\aws-java-sdk-organizations-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-workdocs\1.11.368\aws-java-sdk-workdocs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-core\1.11.368\aws-java-sdk-core-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\software\amazon\ion\ion-java\1.0.2\ion-java-1.0.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-cbor\2.6.7\jackson-dataformat-cbor-2.6.7.jar;C:\Users\Sohan.Dey\.m2\repository\joda-time\joda-time\2.8.1\joda-time-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-models\1.11.368\aws-java-sdk-models-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-swf-libraries\1.11.22\aws-java-sdk-swf-libraries-1.11.22.jar;C:\Users\Sohan.Dey\.m2\repository\com\aventstack\extentreports\3.0.0\extentreports-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\freemarker\freemarker\2.3.23\freemarker-2.3.23.jar;C:\Users\Sohan.Dey\.m2\repository\org\mongodb\mongodb-driver\3.3.0\mongodb-driver-3.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\mongodb\bson\3.3.0\bson-3.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\mongodb\mongodb-driver-core\3.3.0\mongodb-driver-core-3.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\httpcomponents\httpmime\4.5.2\httpmime-4.5.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\relevantcodes\extentreports\2.41.2\extentreports-2.41.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\jsoup\jsoup\1.8.3\jsoup-1.8.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\xerial\sqlite-jdbc\3.8.11.1\sqlite-jdbc-3.8.11.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\jayway\jsonpath\json-path\2.4.0\json-path-2.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\net\minidev\json-smart\2.3\json-smart-2.3.jar;C:\Users\Sohan.Dey\.m2\repository\net\minidev\accessors-smart\1.2\accessors-smart-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\ow2\asm\asm\5.0.4\asm-5.0.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-model\3.3.9\maven-model-3.3.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-utils\3.0.22\plexus-utils-3.0.22.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\rest-assured\3.0.7\rest-assured-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\groovy\groovy\2.4.12\groovy-2.4.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\groovy\groovy-xml\2.4.12\groovy-xml-2.4.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\hamcrest\hamcrest-library\1.3\hamcrest-library-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\ccil\cowan\tagsoup\tagsoup\1.2.1\tagsoup-1.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\json-path\3.0.7\json-path-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\groovy\groovy-json\2.4.12\groovy-json-2.4.12.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\rest-assured-common\3.0.7\rest-assured-common-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\xml-path\3.0.7\xml-path-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\testng\testng\6.11\testng-6.11.jar;C:\Users\Sohan.Dey\.m2\repository\com\beust\jcommander\1.64\jcommander-1.64.jar;C:\Users\Sohan.Dey\.m2\repository\org\yaml\snakeyaml\1.17\snakeyaml-1.17.jar;C:\Users\Sohan.Dey\.m2\repository\org\zeroturnaround\zt-zip\1.13\zt-zip-1.13.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.10.1\jackson-core-2.10.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.9.5\jackson-annotations-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.10.5\jackson-databind-2.10.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-xml\2.9.5\jackson-dataformat-xml-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\module\jackson-module-jaxb-annotations\2.9.5\jackson-module-jaxb-annotations-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\woodstox\stax2-api\3.1.4\stax2-api-3.1.4.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\woodstox\woodstox-core\5.0.3\woodstox-core-5.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\json\json\20180130\json-20180130.jar;C:\Users\Sohan.Dey\.m2\repository\com\googlecode\json-simple\json-simple\1.1.1\json-simple-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\junit\junit\4.10\junit-4.10.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\code\gson\gson\2.8.4\gson-2.8.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\plugins\maven-assembly-plugin\3.1.0\maven-assembly-plugin-3.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-plugin-api\3.0\maven-plugin-api-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\sisu\sisu-inject-plexus\1.4.2\sisu-inject-plexus-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\sisu\sisu-inject-bean\1.4.2\sisu-inject-bean-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\sisu\sisu-guice\2.1.7\sisu-guice-2.1.7-noaop.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-core\3.0\maven-core-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-settings\3.0\maven-settings-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-settings-builder\3.0\maven-settings-builder-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-repository-metadata\3.0\maven-repository-metadata-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-model-builder\3.0\maven-model-builder-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-aether-provider\3.0\maven-aether-provider-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-impl\1.7\aether-impl-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-spi\1.7\aether-spi-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-api\1.7\aether-api-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-util\1.7\aether-util-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-classworlds\2.2.3\plexus-classworlds-2.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-component-annotations\1.5.5\plexus-component-annotations-1.5.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\plexus\plexus-sec-dispatcher\1.3\plexus-sec-dispatcher-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\plexus\plexus-cipher\1.4\plexus-cipher-1.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-artifact\3.0\maven-artifact-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-common-artifact-filters\3.0.1\maven-common-artifact-filters-3.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-shared-utils\3.1.0\maven-shared-utils-3.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-artifact-transfer\0.9.0\maven-artifact-transfer-0.9.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-interpolation\1.24\plexus-interpolation-1.24.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-archiver\3.5\plexus-archiver-3.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-compress\1.14\commons-compress-1.14.jar;C:\Users\Sohan.Dey\.m2\repository\org\iq80\snappy\snappy\0.4\snappy-0.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\tukaani\xz\1.6\xz-1.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\file-management\3.0.0\file-management-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-shared-io\3.0.0\maven-shared-io-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-compat\3.0\maven-compat-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\wagon\wagon-provider-api\2.10\wagon-provider-api-2.10.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-filtering\3.1.1\maven-filtering-3.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\plexus\plexus-build-api\0.0.7\plexus-build-api-0.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-io\3.0.0\plexus-io-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-archiver\3.2.0\maven-archiver-3.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\guava\guava\19.0\guava-19.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\hibernate\hibernate-core\5.4.2.Final\hibernate-core-5.4.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\javax\persistence\javax.persistence-api\2.2\javax.persistence-api-2.2.jar;C:\Users\Sohan.Dey\.m2\repository\net\bytebuddy\byte-buddy\1.9.10\byte-buddy-1.9.10.jar;C:\Users\Sohan.Dey\.m2\repository\antlr\antlr\2.7.7\antlr-2.7.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\transaction\jboss-transaction-api_1.2_spec\1.1.1.Final\jboss-transaction-api_1.2_spec-1.1.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\jandex\2.0.5.Final\jandex-2.0.5.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\classmate\1.3.4\classmate-1.3.4.jar;C:\Users\Sohan.Dey\.m2\repository\javax\activation\javax.activation-api\1.2.0\javax.activation-api-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\dom4j\dom4j\2.1.1\dom4j-2.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\hibernate\common\hibernate-commons-annotations\5.1.0.Final\hibernate-commons-annotations-5.1.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\javax\xml\bind\jaxb-api\2.3.1\jaxb-api-2.3.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\glassfish\jaxb\jaxb-runtime\2.3.1\jaxb-runtime-2.3.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\glassfish\jaxb\txw2\2.3.1\txw2-2.3.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\istack\istack-commons-runtime\3.0.7\istack-commons-runtime-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\jvnet\staxex\stax-ex\1.8\stax-ex-1.8.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\xml\fastinfoset\FastInfoset\1.2.15\FastInfoset-1.2.15.jar;C:\Users\Sohan.Dey\.m2\repository\commons-beanutils\commons-beanutils\1.9.2\commons-beanutils-1.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\commons-logging\commons-logging\1.1.1\commons-logging-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\commons-collections\commons-collections\3.2.1\commons-collections-3.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\swagger-annotations\1.5.20\swagger-annotations-1.5.20.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.5\jackson-datatype-jsr310-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\postgresql\postgresql\42.2.2\postgresql-42.2.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\slf4j-log4j12\1.6.2\slf4j-log4j12-1.6.2.jar;C:\Users\Sohan.Dey\.m2\repository\log4j\log4j\1.2.16\log4j-1.2.16.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\logging\log4j\log4j-api\2.11.1\log4j-api-2.11.1.jar;C:\Users\Sohan.Dey\.m2\repository\net\lingala\zip4j\zip4j\1.3.2\zip4j-1.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\httpcomponents\httpclient\4.5.3\httpclient-4.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\httpcomponents\httpcore\4.4.6\httpcore-4.4.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-client\2.8.1\hadoop-client-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-common\2.8.1\hadoop-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\commons-cli\commons-cli\1.2\commons-cli-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\xmlenc\xmlenc\0.52\xmlenc-0.52.jar;C:\Users\Sohan.Dey\.m2\repository\commons-net\commons-net\3.1\commons-net-3.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\mortbay\jetty\jetty-sslengine\6.1.26\jetty-sslengine-6.1.26.jar;C:\Users\Sohan.Dey\.m2\repository\javax\servlet\jsp\jsp-api\2.1\jsp-api-2.1.jar;C:\Users\Sohan.Dey\.m2\repository\commons-configuration\commons-configuration\1.6\commons-configuration-1.6.jar;C:\Users\Sohan.Dey\.m2\repository\commons-digester\commons-digester\1.8\commons-digester-1.8.jar;C:\Users\Sohan.Dey\.m2\repository\commons-beanutils\commons-beanutils-core\1.8.0\commons-beanutils-core-1.8.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-core-asl\1.9.13\jackson-core-asl-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-mapper-asl\1.9.13\jackson-mapper-asl-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\avro\avro\1.7.4\avro-1.7.4.jar;C:\Users\Sohan.Dey\.m2\repository\com\thoughtworks\paranamer\paranamer\2.3\paranamer-2.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\xerial\snappy\snappy-java\1.0.4.1\snappy-java-1.0.4.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\protobuf\protobuf-java\2.5.0\protobuf-java-2.5.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-auth\2.8.1\hadoop-auth-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\server\apacheds-kerberos-codec\2.0.0-M15\apacheds-kerberos-codec-2.0.0-M15.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\server\apacheds-i18n\2.0.0-M15\apacheds-i18n-2.0.0-M15.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\api\api-asn1-api\1.0.0-M20\api-asn1-api-1.0.0-M20.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\api\api-util\1.0.0-M20\api-util-1.0.0-M20.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\curator\curator-framework\2.7.1\curator-framework-2.7.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\curator\curator-client\2.7.1\curator-client-2.7.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\curator\curator-recipes\2.7.1\curator-recipes-2.7.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\code\findbugs\jsr305\3.0.0\jsr305-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\htrace\htrace-core4\4.0.1-incubating\htrace-core4-4.0.1-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\zookeeper\zookeeper\3.4.6\zookeeper-3.4.6.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty\3.7.0.Final\netty-3.7.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-hdfs\2.8.1\hadoop-hdfs-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-hdfs-client\2.8.1\hadoop-hdfs-client-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\squareup\okhttp\okhttp\2.4.0\okhttp-2.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\squareup\okio\okio\1.4.0\okio-1.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-app\2.8.1\hadoop-mapreduce-client-app-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-common\2.8.1\hadoop-mapreduce-client-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-client\2.8.1\hadoop-yarn-client-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-server-common\2.8.1\hadoop-yarn-server-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-shuffle\2.8.1\hadoop-mapreduce-client-shuffle-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\fusesource\leveldbjni\leveldbjni-all\1.8\leveldbjni-all-1.8.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-api\2.8.1\hadoop-yarn-api-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-core\2.8.1\hadoop-mapreduce-client-core-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-common\2.8.1\hadoop-yarn-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\javax\servlet\servlet-api\2.5\servlet-api-2.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\mortbay\jetty\jetty-util\6.1.26\jetty-util-6.1.26.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\jersey\jersey-core\1.9\jersey-core-1.9.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\jersey\jersey-client\1.9\jersey-client-1.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-jaxrs\1.9.13\jackson-jaxrs-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-xc\1.9.13\jackson-xc-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-jobclient\2.8.1\hadoop-mapreduce-client-jobclient-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-annotations\2.8.1\hadoop-annotations-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\bouncycastle\bcprov-jdk16\1.45\bcprov-jdk16-1.45.jar;C:\Users\Sohan.Dey\.m2\repository\commons-codec\commons-codec\1.11\commons-codec-1.11.jar;C:\Users\Sohan.Dey\.m2\repository\commons-io\commons-io\2.6\commons-io-2.6.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\zxing\core\3.3.3\core-3.3.3.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\zxing\javase\2.0\javase-2.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\hamcrest\hamcrest-all\1.3\hamcrest-all-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\velocity\velocity\1.7\velocity-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\commons-lang\commons-lang\2.4\commons-lang-2.4.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\html2pdf\2.0.0\html2pdf-2.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\forms\7.1.0\forms-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\kernel\7.1.0\kernel-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\io\7.1.0\io-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\layout\7.1.0\layout-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\itextpdf\5.5.13\itextpdf-5.5.13.jar;C:\Users\Sohan.Dey\.m2\repository\javax\mail\javax.mail-api\1.6.2\javax.mail-api-1.6.2.jar;D:\Mosip_Automation_Test\Docker_Test\MOSIP-19726\mosip-functional-tests\authentication-demo-service\target\classes;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.0.2.RELEASE\spring-boot-starter-web-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-json\2.0.2.RELEASE\spring-boot-starter-json-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.5\jackson-datatype-jdk8-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.5\jackson-module-parameter-names-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\2.0.2.RELEASE\spring-boot-starter-tomcat-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\8.5.31\tomcat-embed-el-8.5.31.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\8.5.31\tomcat-embed-websocket-8.5.31.jar;C:\Users\Sohan.Dey\.m2\repository\org\hibernate\validator\hibernate-validator\6.0.9.Final\hibernate-validator-6.0.9.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-web\5.0.6.RELEASE\spring-web-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-webmvc\5.0.6.RELEASE\spring-webmvc-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-expression\5.0.6.RELEASE\spring-expression-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-test\2.0.2.RELEASE\spring-boot-starter-test-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-test\2.0.2.RELEASE\spring-boot-test-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-test-autoconfigure\2.0.2.RELEASE\spring-boot-test-autoconfigure-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\assertj\assertj-core\3.9.1\assertj-core-3.9.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\skyscreamer\jsonassert\1.5.0\jsonassert-1.5.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-core\5.0.6.RELEASE\spring-core-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-jcl\5.0.6.RELEASE\spring-jcl-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-test\5.0.6.RELEASE\spring-test-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\xmlunit\xmlunit-core\2.5.1\xmlunit-core-2.5.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-swagger-ui\2.9.2\springfox-swagger-ui-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-spring-web\2.9.2\springfox-spring-web-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-swagger2\2.9.2\springfox-swagger2-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-spi\2.9.2\springfox-spi-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-core\2.9.2\springfox-core-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-schema\2.9.2\springfox-schema-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-swagger-common\2.9.2\springfox-swagger-common-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\plugin\spring-plugin-core\1.2.0.RELEASE\spring-plugin-core-1.2.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\plugin\spring-plugin-metadata\1.2.0.RELEASE\spring-plugin-metadata-1.2.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\mapstruct\mapstruct\1.2.0.Final\mapstruct-1.2.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\javax\ws\rs\javax.ws.rs-api\2.0\javax.ws.rs-api-2.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\authentication\authentication-core\1.2.0.1-SNAPSHOT\authentication-core-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-cache\2.0.2.RELEASE\spring-boot-starter-cache-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-context-support\5.0.6.RELEASE\spring-context-support-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\machinezoo\sourceafis\sourceafis\3.4.0\sourceafis-3.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\net\sf\trove4j\trove4j\3.0.3\trove4j-3.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\com\machinezoo\noexception\noexception\1.3.2\noexception-1.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\mhshams\jnbis\2.0.1\jnbis-2.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\sanselan\sanselan\0.97-incubator\sanselan-0.97-incubator.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\idrepository\id-repository-core\1.2.0\id-repository-core-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-biosdk-provider\1.2.0\kernel-biosdk-provider-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-biometrics-api\1.2.0\kernel-biometrics-api-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-demographics-api\1.2.0\kernel-demographics-api-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-webflux\2.0.2.RELEASE\spring-boot-starter-webflux-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-reactor-netty\2.0.2.RELEASE\spring-boot-starter-reactor-netty-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\projectreactor\ipc\reactor-netty\0.7.7.RELEASE\reactor-netty-0.7.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-handler-proxy\4.1.24.Final\netty-handler-proxy-4.1.24.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-codec-socks\4.1.24.Final\netty-codec-socks-4.1.24.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-transport-native-epoll\4.1.24.Final\netty-transport-native-epoll-4.1.24.Final-linux-x86_64.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-transport-native-unix-common\4.1.24.Final\netty-transport-native-unix-common-4.1.24.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-webflux\5.0.6.RELEASE\spring-webflux-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\projectreactor\reactor-core\3.1.7.RELEASE\reactor-core-3.1.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\synchronoss\cloud\nio-multipart-parser\1.1.0\nio-multipart-parser-1.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\synchronoss\cloud\nio-stream-storage\1.1.3\nio-stream-storage-1.1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\springdoc\springdoc-openapi-ui\1.5.10\springdoc-openapi-ui-1.5.10.jar;C:\Users\Sohan.Dey\.m2\repository\org\springdoc\springdoc-openapi-webmvc-core\1.5.10\springdoc-openapi-webmvc-core-1.5.10.jar;C:\Users\Sohan.Dey\.m2\repository\org\springdoc\springdoc-openapi-common\1.5.10\springdoc-openapi-common-1.5.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-models\2.1.10\swagger-models-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-annotations\2.1.10\swagger-annotations-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-integration\2.1.10\swagger-integration-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-core\2.1.10\swagger-core-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\jakarta\xml\bind\jakarta.xml.bind-api\2.3.2\jakarta.xml.bind-api-2.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\jakarta\activation\jakarta.activation-api\1.2.1\jakarta.activation-api-1.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-yaml\2.12.1\jackson-dataformat-yaml-2.12.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\github\classgraph\classgraph\4.8.69\classgraph-4.8.69.jar;C:\Users\Sohan.Dey\.m2\repository\org\webjars\swagger-ui\3.51.1\swagger-ui-3.51.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\webjars\webjars-locator-core\0.45\webjars-locator-core-0.45.jar;C:\Users\Sohan.Dey\.m2\repository\commons-fileupload\commons-fileupload\1.4\commons-fileupload-1.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\mockito\mockito-core\2.23.4\mockito-core-2.23.4.jar;C:\Users\Sohan.Dey\.m2\repository\net\bytebuddy\byte-buddy-agent\1.9.3\byte-buddy-agent-1.9.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\objenesis\objenesis\2.6\objenesis-2.6.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-websubclient-api\1.2.0.1-SNAPSHOT\kernel-websubclient-api-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-aspects\5.0.6.RELEASE\spring-aspects-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\aspectj\aspectjweaver\1.8.13\aspectjweaver-1.8.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\owasp\encoder\encoder\1.2.3\encoder-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\tensorflow\tensorflow\1.12.0\tensorflow-1.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\tensorflow\libtensorflow\1.12.0\libtensorflow-1.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\tensorflow\libtensorflow_jni\1.12.0\libtensorflow_jni-1.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-templatemanager-velocity\1.2.0.1-SNAPSHOT\kernel-templatemanager-velocity-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\javax\servlet\javax.servlet-api\4.0.1\javax.servlet-api-4.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-starter-config\2.0.0.RELEASE\spring-cloud-starter-config-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-starter\2.0.0.RELEASE\spring-cloud-starter-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-context\2.0.0.RELEASE\spring-cloud-context-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-crypto\5.0.6.RELEASE\spring-security-crypto-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-commons\2.0.0.RELEASE\spring-cloud-commons-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-rsa\1.0.5.RELEASE\spring-security-rsa-1.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-config-client\2.0.0.RELEASE\spring-cloud-config-client-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\jai-imageio\jai-imageio-jpeg2000\1.3.0\jai-imageio-jpeg2000-1.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\jai-imageio\jai-imageio-core\1.3.0\jai-imageio-core-1.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-keymanager-service\1.2.0.1-SNAPSHOT\kernel-keymanager-service-1.2.0.1-SNAPSHOT-lib.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-test\5.0.5.RELEASE\spring-security-test-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-core\5.0.5.RELEASE\spring-security-core-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-pdfgenerator-itext\1.2.0.1-SNAPSHOT\kernel-pdfgenerator-itext-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\barcodes\7.1.0\barcodes-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\font-asian\7.1.0\font-asian-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\hyph\7.1.0\hyph-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\pdfa\7.1.0\pdfa-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\sign\7.1.0\sign-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\tool\xmlworker\5.5.13\xmlworker-5.5.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\bouncycastle\bcpkix-jdk15on\1.66\bcpkix-jdk15on-1.66.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-data-jpa\2.0.2.RELEASE\spring-boot-starter-data-jpa-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\2.0.2.RELEASE\spring-boot-starter-jdbc-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\zaxxer\HikariCP\2.7.9\HikariCP-2.7.9.jar;C:\Users\Sohan.Dey\.m2\repository\com\h2database\h2\1.4.197\h2-1.4.197.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\microsoft\TSS.Java\0.3.0\TSS.Java-0.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\net\java\dev\jna\jna\4.4.0\jna-4.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\cache2k\cache2k-api\2.4.1.Final\cache2k-api-2.4.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\cache2k\cache2k-core\2.4.1.Final\cache2k-core-2.4.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\nimbusds\nimbus-jose-jwt\9.14\nimbus-jose-jwt-9.14.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-core\1.2.0.1-SNAPSHOT\kernel-core-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter\2.0.2.RELEASE\spring-boot-starter-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot\2.0.2.RELEASE\spring-boot-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.0.2.RELEASE\spring-boot-autoconfigure-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.0.2.RELEASE\spring-boot-starter-logging-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.10.0\log4j-to-slf4j-2.10.0.jar;C:\Users\Sohan.Dey\.m2\repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\data\spring-data-jpa\2.0.7.RELEASE\spring-data-jpa-2.0.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\data\spring-data-commons\2.0.7.RELEASE\spring-data-commons-2.0.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-orm\5.0.6.RELEASE\spring-orm-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-jdbc\5.0.6.RELEASE\spring-jdbc-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-context\5.0.6.RELEASE\spring-context-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-aop\5.0.6.RELEASE\spring-aop-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-tx\5.0.6.RELEASE\spring-tx-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-beans\5.0.6.RELEASE\spring-beans-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\aspectj\aspectjrt\1.8.12\aspectjrt-1.8.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-security\2.0.2.RELEASE\spring-boot-starter-security-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-config\5.0.5.RELEASE\spring-security-config-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-web\5.0.5.RELEASE\spring-security-web-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\javax\transaction\javax.transaction-api\1.3\javax.transaction-api-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-math3\3.6.1\commons-math3-3.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\bouncycastle\bcprov-jdk15on\1.66\bcprov-jdk15on-1.66.jar;C:\Users\Sohan.Dey\.m2\repository\javax\interceptor\javax.interceptor-api\1.2\javax.interceptor-api-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\code\findbugs\annotations\3.0.1\annotations-3.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\net\jcip\jcip-annotations\1.0\jcip-annotations-1.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\swagger-models\1.5.21\swagger-models-1.5.21.jar;C:\Users\Sohan.Dey\.m2\repository\com\auth0\java-jwt\3.8.1\java-jwt-3.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\micrometer\micrometer-core\1.4.2\micrometer-core-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\hdrhistogram\HdrHistogram\2.1.12\HdrHistogram-2.1.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\latencyutils\LatencyUtils\2.0.3\LatencyUtils-2.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\micrometer\micrometer-registry-prometheus\1.4.2\micrometer-registry-prometheus-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\prometheus\simpleclient_common\0.8.1\simpleclient_common-0.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\prometheus\simpleclient\0.8.1\simpleclient-0.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\jul-to-slf4j\1.7.25\jul-to-slf4j-1.7.25.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\jcl-over-slf4j\1.7.25\jcl-over-slf4j-1.7.25.jar;C:\Users\Sohan.Dey\.m2\repository\javax\activation\activation\1.1\activation-1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-starter-sleuth\2.0.4.RELEASE\spring-cloud-starter-sleuth-2.0.4.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-aop\2.0.9.RELEASE\spring-boot-starter-aop-2.0.9.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-sleuth-core\2.0.4.RELEASE\spring-cloud-sleuth-core-2.0.4.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave\5.6.1\brave-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\zipkin2\zipkin\2.12.0\zipkin-2.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\reporter2\zipkin-reporter\2.7.14\zipkin-reporter-2.7.14.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-context-log4j2\5.6.1\brave-context-log4j2-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-spring-web\5.6.1\brave-instrumentation-spring-web-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-http\5.6.1\brave-instrumentation-http-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-spring-rabbit\5.6.1\brave-instrumentation-spring-rabbit-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-kafka-clients\5.6.1\brave-instrumentation-kafka-clients-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-httpclient\5.6.1\brave-instrumentation-httpclient-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-httpasyncclient\5.6.1\brave-instrumentation-httpasyncclient-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-spring-webmvc\5.6.1\brave-instrumentation-spring-webmvc-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-servlet\5.6.1\brave-instrumentation-servlet-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-actuator\2.0.2.RELEASE\spring-boot-starter-actuator-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-actuator-autoconfigure\2.0.2.RELEASE\spring-boot-actuator-autoconfigure-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-actuator\2.0.2.RELEASE\spring-boot-actuator-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\8.5.55\tomcat-embed-core-8.5.55.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\tomcat-annotations-api\8.5.55\tomcat-annotations-api-8.5.55.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\retry\spring-retry\1.2.1.RELEASE\spring-retry-1.2.1.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\module\jackson-module-afterburner\2.12.0\jackson-module-afterburner-2.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-registration-packet-manager\1.1.5.3\kernel-registration-packet-manager-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-keygenerator-bouncycastle\1.1.5.3\kernel-keygenerator-bouncycastle-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-cbeffutil-api\1.1.5.3\kernel-cbeffutil-api-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-logger-logback\1.1.5.3\kernel-logger-logback-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\net\logstash\logback\logstash-logback-encoder\6.4\logstash-logback-encoder-6.4.jar;C:\Users\Sohan.Dey\.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\ch\qos\logback\logback-access\1.2.3\logback-access-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-crypto-jce\1.1.5.3\kernel-crypto-jce-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\bitbucket\b_c\jose4j\0.6.5\jose4j-0.6.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\wink\wink-json4j-provider\1.1.2-incubating\wink-json4j-provider-1.1.2-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\wink\wink-common\1.1.2-incubating\wink-common-1.1.2-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\xml\bind\jaxb-impl\2.2.1.1\jaxb-impl-2.2.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\geronimo\specs\geronimo-annotation_1.1_spec\1.0\geronimo-annotation_1.1_spec-1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\wink\wink-json4j\1.1.2-incubating\wink-json4j-1.1.2-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\javax\ws\rs\jsr311-api\1.1.1\jsr311-api-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\checkerframework\checker-qual\2.9.0\checker-qual-2.9.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\activemq\activemq-broker\5.15.9\activemq-broker-5.15.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\activemq\activemq-client\5.15.9\activemq-client-5.15.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\geronimo\specs\geronimo-jms_1.1_spec\1.1.1\geronimo-jms_1.1_spec-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\fusesource\hawtbuf\hawtbuf\1.11\hawtbuf-1.11.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\geronimo\specs\geronimo-j2ee-management_1.1_spec\1.0.1\geronimo-j2ee-management_1.1_spec-1.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\activemq\activemq-openwire-legacy\5.15.9\activemq-openwire-legacy-5.15.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\projectlombok\lombok\1.18.8\lombok-1.18.8.jar \ No newline at end of file diff --git a/api-test/.temp-Functional Test-classpath-arg-1659589592502.txt b/api-test/.temp-Functional Test-classpath-arg-1659589592502.txt deleted file mode 100644 index bb81464f5..000000000 --- a/api-test/.temp-Functional Test-classpath-arg-1659589592502.txt +++ /dev/null @@ -1 +0,0 @@ --classpath D:\Mosip_Automation_Test\Docker_Test\MOSIP-19726\mosip-functional-tests\automationtests\target\test-classes;D:\Mosip_Automation_Test\Docker_Test\MOSIP-19726\mosip-functional-tests\automationtests\target\classes;C:\Users\Sohan.Dey\.m2\repository\com\opencsv\opencsv\4.1\opencsv-4.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-lang3\3.6\commons-lang3-3.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-text\1.1\commons-text-1.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\ibm\icu\icu4j\63.1\icu4j-63.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\keycloak\keycloak-admin-client\17.0.1\keycloak-admin-client-17.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\keycloak\keycloak-core\17.0.1\keycloak-core-17.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\keycloak\keycloak-common\17.0.1\keycloak-common-17.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-client\3.13.2.Final\resteasy-client-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\ws\rs\jboss-jaxrs-api_2.1_spec\2.0.1.Final\jboss-jaxrs-api_2.1_spec-2.0.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-jaxrs\3.13.2.Final\resteasy-jaxrs-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\reactivestreams\reactive-streams\1.0.3\reactive-streams-1.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\jakarta\validation\jakarta.validation-api\2.0.2\jakarta.validation-api-2.0.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\annotation\jboss-annotations-api_1.3_spec\2.0.1.Final\jboss-annotations-api_1.3_spec-2.0.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\activation\jakarta.activation\1.2.1\jakarta.activation-1.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\stephenc\jcip\jcip-annotations\1.0-1\jcip-annotations-1.0-1.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-multipart-provider\3.13.2.Final\resteasy-multipart-provider-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\mail\jakarta.mail\1.6.5\jakarta.mail-1.6.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\james\apache-mime4j\0.6\apache-mime4j-0.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-jackson2-provider\3.13.2.Final\resteasy-jackson2-provider-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\jaxrs\jackson-jaxrs-json-provider\2.10.5\jackson-jaxrs-json-provider-2.10.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\jaxrs\jackson-jaxrs-base\2.10.5\jackson-jaxrs-base-2.10.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\json-patch\1.9\json-patch-1.9.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\jackson-coreutils\1.6\jackson-coreutils-1.6.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\msg-simple\1.1\msg-simple-1.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\btf\1.2\btf-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-jaxb-provider\3.13.2.Final\resteasy-jaxb-provider-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\xml\bind\jboss-jaxb-api_2.3_spec\2.0.0.Final\jboss-jaxb-api_2.3_spec-2.0.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\javassist\javassist\3.25.0-GA\javassist-3.25.0-GA.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\jknack\handlebars\3.0.0\handlebars-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\antlr\antlr4-runtime\4.5.1-1\antlr4-runtime-4.5.1-1.jar;C:\Users\Sohan.Dey\.m2\repository\org\mozilla\rhino\1.7R4\rhino-1.7R4.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\slf4j-api\1.6.4\slf4j-api-1.6.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-collections4\4.3\commons-collections4-4.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\jsonwebtoken\jjwt\0.6.0\jjwt-0.6.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\flipkart\zjsonpatch\zjsonpatch\0.4.7\zjsonpatch-0.4.7.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk\1.11.368\aws-java-sdk-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dlm\1.11.368\aws-java-sdk-dlm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\jmespath-java\1.11.368\jmespath-java-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-macie\1.11.368\aws-java-sdk-macie-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-eks\1.11.368\aws-java-sdk-eks-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediatailor\1.11.368\aws-java-sdk-mediatailor-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-neptune\1.11.368\aws-java-sdk-neptune-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-pi\1.11.368\aws-java-sdk-pi-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iot1clickprojects\1.11.368\aws-java-sdk-iot1clickprojects-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iot1clickdevices\1.11.368\aws-java-sdk-iot1clickdevices-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iotanalytics\1.11.368\aws-java-sdk-iotanalytics-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-acmpca\1.11.368\aws-java-sdk-acmpca-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-secretsmanager\1.11.368\aws-java-sdk-secretsmanager-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-fms\1.11.368\aws-java-sdk-fms-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-connect\1.11.368\aws-java-sdk-connect-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-transcribe\1.11.368\aws-java-sdk-transcribe-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-autoscalingplans\1.11.368\aws-java-sdk-autoscalingplans-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-workmail\1.11.368\aws-java-sdk-workmail-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-servicediscovery\1.11.368\aws-java-sdk-servicediscovery-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloud9\1.11.368\aws-java-sdk-cloud9-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-serverlessapplicationrepository\1.11.368\aws-java-sdk-serverlessapplicationrepository-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-alexaforbusiness\1.11.368\aws-java-sdk-alexaforbusiness-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-resourcegroups\1.11.368\aws-java-sdk-resourcegroups-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-comprehend\1.11.368\aws-java-sdk-comprehend-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-translate\1.11.368\aws-java-sdk-translate-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sagemaker\1.11.368\aws-java-sdk-sagemaker-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iotjobsdataplane\1.11.368\aws-java-sdk-iotjobsdataplane-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sagemakerruntime\1.11.368\aws-java-sdk-sagemakerruntime-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-kinesisvideo\1.11.368\aws-java-sdk-kinesisvideo-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-codec-http\4.1.17.Final\netty-codec-http-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-codec\4.1.17.Final\netty-codec-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-handler\4.1.17.Final\netty-handler-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-buffer\4.1.17.Final\netty-buffer-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-common\4.1.17.Final\netty-common-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-transport\4.1.17.Final\netty-transport-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-resolver\4.1.17.Final\netty-resolver-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-appsync\1.11.368\aws-java-sdk-appsync-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-guardduty\1.11.368\aws-java-sdk-guardduty-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mq\1.11.368\aws-java-sdk-mq-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediaconvert\1.11.368\aws-java-sdk-mediaconvert-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediastore\1.11.368\aws-java-sdk-mediastore-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediastoredata\1.11.368\aws-java-sdk-mediastoredata-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-medialive\1.11.368\aws-java-sdk-medialive-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediapackage\1.11.368\aws-java-sdk-mediapackage-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-costexplorer\1.11.368\aws-java-sdk-costexplorer-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-pricing\1.11.368\aws-java-sdk-pricing-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mobile\1.11.368\aws-java-sdk-mobile-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudhsmv2\1.11.368\aws-java-sdk-cloudhsmv2-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-glue\1.11.368\aws-java-sdk-glue-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-migrationhub\1.11.368\aws-java-sdk-migrationhub-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dax\1.11.368\aws-java-sdk-dax-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-greengrass\1.11.368\aws-java-sdk-greengrass-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-athena\1.11.368\aws-java-sdk-athena-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-marketplaceentitlement\1.11.368\aws-java-sdk-marketplaceentitlement-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codestar\1.11.368\aws-java-sdk-codestar-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lexmodelbuilding\1.11.368\aws-java-sdk-lexmodelbuilding-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-resourcegroupstaggingapi\1.11.368\aws-java-sdk-resourcegroupstaggingapi-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-pinpoint\1.11.368\aws-java-sdk-pinpoint-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-xray\1.11.368\aws-java-sdk-xray-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-opsworkscm\1.11.368\aws-java-sdk-opsworkscm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-support\1.11.368\aws-java-sdk-support-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-simpledb\1.11.368\aws-java-sdk-simpledb-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-servicecatalog\1.11.368\aws-java-sdk-servicecatalog-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-servermigration\1.11.368\aws-java-sdk-servermigration-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-simpleworkflow\1.11.368\aws-java-sdk-simpleworkflow-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-storagegateway\1.11.368\aws-java-sdk-storagegateway-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-route53\1.11.368\aws-java-sdk-route53-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-s3\1.11.368\aws-java-sdk-s3-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-importexport\1.11.368\aws-java-sdk-importexport-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sts\1.11.368\aws-java-sdk-sts-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sqs\1.11.368\aws-java-sdk-sqs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-rds\1.11.368\aws-java-sdk-rds-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-redshift\1.11.368\aws-java-sdk-redshift-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticbeanstalk\1.11.368\aws-java-sdk-elasticbeanstalk-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-glacier\1.11.368\aws-java-sdk-glacier-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iam\1.11.368\aws-java-sdk-iam-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-datapipeline\1.11.368\aws-java-sdk-datapipeline-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticloadbalancing\1.11.368\aws-java-sdk-elasticloadbalancing-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticloadbalancingv2\1.11.368\aws-java-sdk-elasticloadbalancingv2-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-emr\1.11.368\aws-java-sdk-emr-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticache\1.11.368\aws-java-sdk-elasticache-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elastictranscoder\1.11.368\aws-java-sdk-elastictranscoder-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ec2\1.11.368\aws-java-sdk-ec2-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dynamodb\1.11.368\aws-java-sdk-dynamodb-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sns\1.11.368\aws-java-sdk-sns-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-budgets\1.11.368\aws-java-sdk-budgets-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudtrail\1.11.368\aws-java-sdk-cloudtrail-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudwatch\1.11.368\aws-java-sdk-cloudwatch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-logs\1.11.368\aws-java-sdk-logs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-events\1.11.368\aws-java-sdk-events-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cognitoidentity\1.11.368\aws-java-sdk-cognitoidentity-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cognitosync\1.11.368\aws-java-sdk-cognitosync-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-directconnect\1.11.368\aws-java-sdk-directconnect-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudformation\1.11.368\aws-java-sdk-cloudformation-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudfront\1.11.368\aws-java-sdk-cloudfront-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-clouddirectory\1.11.368\aws-java-sdk-clouddirectory-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-kinesis\1.11.368\aws-java-sdk-kinesis-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-opsworks\1.11.368\aws-java-sdk-opsworks-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ses\1.11.368\aws-java-sdk-ses-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-autoscaling\1.11.368\aws-java-sdk-autoscaling-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudsearch\1.11.368\aws-java-sdk-cloudsearch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudwatchmetrics\1.11.368\aws-java-sdk-cloudwatchmetrics-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codedeploy\1.11.368\aws-java-sdk-codedeploy-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codepipeline\1.11.368\aws-java-sdk-codepipeline-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-kms\1.11.368\aws-java-sdk-kms-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-config\1.11.368\aws-java-sdk-config-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lambda\1.11.368\aws-java-sdk-lambda-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ecs\1.11.368\aws-java-sdk-ecs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ecr\1.11.368\aws-java-sdk-ecr-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudhsm\1.11.368\aws-java-sdk-cloudhsm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ssm\1.11.368\aws-java-sdk-ssm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-workspaces\1.11.368\aws-java-sdk-workspaces-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-machinelearning\1.11.368\aws-java-sdk-machinelearning-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-directory\1.11.368\aws-java-sdk-directory-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-efs\1.11.368\aws-java-sdk-efs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codecommit\1.11.368\aws-java-sdk-codecommit-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-devicefarm\1.11.368\aws-java-sdk-devicefarm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticsearch\1.11.368\aws-java-sdk-elasticsearch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-waf\1.11.368\aws-java-sdk-waf-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-marketplacecommerceanalytics\1.11.368\aws-java-sdk-marketplacecommerceanalytics-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-inspector\1.11.368\aws-java-sdk-inspector-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iot\1.11.368\aws-java-sdk-iot-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-api-gateway\1.11.368\aws-java-sdk-api-gateway-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-acm\1.11.368\aws-java-sdk-acm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-gamelift\1.11.368\aws-java-sdk-gamelift-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dms\1.11.368\aws-java-sdk-dms-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-marketplacemeteringservice\1.11.368\aws-java-sdk-marketplacemeteringservice-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cognitoidp\1.11.368\aws-java-sdk-cognitoidp-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-discovery\1.11.368\aws-java-sdk-discovery-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-applicationautoscaling\1.11.368\aws-java-sdk-applicationautoscaling-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-snowball\1.11.368\aws-java-sdk-snowball-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-rekognition\1.11.368\aws-java-sdk-rekognition-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-polly\1.11.368\aws-java-sdk-polly-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lightsail\1.11.368\aws-java-sdk-lightsail-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-stepfunctions\1.11.368\aws-java-sdk-stepfunctions-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-health\1.11.368\aws-java-sdk-health-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-costandusagereport\1.11.368\aws-java-sdk-costandusagereport-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codebuild\1.11.368\aws-java-sdk-codebuild-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-appstream\1.11.368\aws-java-sdk-appstream-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-shield\1.11.368\aws-java-sdk-shield-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-batch\1.11.368\aws-java-sdk-batch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lex\1.11.368\aws-java-sdk-lex-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mechanicalturkrequester\1.11.368\aws-java-sdk-mechanicalturkrequester-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-organizations\1.11.368\aws-java-sdk-organizations-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-workdocs\1.11.368\aws-java-sdk-workdocs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-core\1.11.368\aws-java-sdk-core-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\software\amazon\ion\ion-java\1.0.2\ion-java-1.0.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-cbor\2.6.7\jackson-dataformat-cbor-2.6.7.jar;C:\Users\Sohan.Dey\.m2\repository\joda-time\joda-time\2.8.1\joda-time-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-models\1.11.368\aws-java-sdk-models-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-swf-libraries\1.11.22\aws-java-sdk-swf-libraries-1.11.22.jar;C:\Users\Sohan.Dey\.m2\repository\com\aventstack\extentreports\3.0.0\extentreports-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\freemarker\freemarker\2.3.23\freemarker-2.3.23.jar;C:\Users\Sohan.Dey\.m2\repository\org\mongodb\mongodb-driver\3.3.0\mongodb-driver-3.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\mongodb\bson\3.3.0\bson-3.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\mongodb\mongodb-driver-core\3.3.0\mongodb-driver-core-3.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\httpcomponents\httpmime\4.5.2\httpmime-4.5.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\relevantcodes\extentreports\2.41.2\extentreports-2.41.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\jsoup\jsoup\1.8.3\jsoup-1.8.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\xerial\sqlite-jdbc\3.8.11.1\sqlite-jdbc-3.8.11.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\jayway\jsonpath\json-path\2.4.0\json-path-2.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\net\minidev\json-smart\2.3\json-smart-2.3.jar;C:\Users\Sohan.Dey\.m2\repository\net\minidev\accessors-smart\1.2\accessors-smart-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\ow2\asm\asm\5.0.4\asm-5.0.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-model\3.3.9\maven-model-3.3.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-utils\3.0.22\plexus-utils-3.0.22.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\rest-assured\3.0.7\rest-assured-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\groovy\groovy\2.4.12\groovy-2.4.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\groovy\groovy-xml\2.4.12\groovy-xml-2.4.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\hamcrest\hamcrest-library\1.3\hamcrest-library-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\ccil\cowan\tagsoup\tagsoup\1.2.1\tagsoup-1.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\json-path\3.0.7\json-path-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\groovy\groovy-json\2.4.12\groovy-json-2.4.12.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\rest-assured-common\3.0.7\rest-assured-common-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\xml-path\3.0.7\xml-path-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\testng\testng\6.11\testng-6.11.jar;C:\Users\Sohan.Dey\.m2\repository\com\beust\jcommander\1.64\jcommander-1.64.jar;C:\Users\Sohan.Dey\.m2\repository\org\yaml\snakeyaml\1.17\snakeyaml-1.17.jar;C:\Users\Sohan.Dey\.m2\repository\org\zeroturnaround\zt-zip\1.13\zt-zip-1.13.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.10.1\jackson-core-2.10.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.9.5\jackson-annotations-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.10.5\jackson-databind-2.10.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-xml\2.9.5\jackson-dataformat-xml-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\module\jackson-module-jaxb-annotations\2.9.5\jackson-module-jaxb-annotations-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\woodstox\stax2-api\3.1.4\stax2-api-3.1.4.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\woodstox\woodstox-core\5.0.3\woodstox-core-5.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\json\json\20180130\json-20180130.jar;C:\Users\Sohan.Dey\.m2\repository\com\googlecode\json-simple\json-simple\1.1.1\json-simple-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\junit\junit\4.10\junit-4.10.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\code\gson\gson\2.8.4\gson-2.8.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\plugins\maven-assembly-plugin\3.1.0\maven-assembly-plugin-3.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-plugin-api\3.0\maven-plugin-api-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\sisu\sisu-inject-plexus\1.4.2\sisu-inject-plexus-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\sisu\sisu-inject-bean\1.4.2\sisu-inject-bean-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\sisu\sisu-guice\2.1.7\sisu-guice-2.1.7-noaop.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-core\3.0\maven-core-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-settings\3.0\maven-settings-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-settings-builder\3.0\maven-settings-builder-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-repository-metadata\3.0\maven-repository-metadata-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-model-builder\3.0\maven-model-builder-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-aether-provider\3.0\maven-aether-provider-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-impl\1.7\aether-impl-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-spi\1.7\aether-spi-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-api\1.7\aether-api-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-util\1.7\aether-util-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-classworlds\2.2.3\plexus-classworlds-2.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-component-annotations\1.5.5\plexus-component-annotations-1.5.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\plexus\plexus-sec-dispatcher\1.3\plexus-sec-dispatcher-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\plexus\plexus-cipher\1.4\plexus-cipher-1.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-artifact\3.0\maven-artifact-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-common-artifact-filters\3.0.1\maven-common-artifact-filters-3.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-shared-utils\3.1.0\maven-shared-utils-3.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-artifact-transfer\0.9.0\maven-artifact-transfer-0.9.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-interpolation\1.24\plexus-interpolation-1.24.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-archiver\3.5\plexus-archiver-3.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-compress\1.14\commons-compress-1.14.jar;C:\Users\Sohan.Dey\.m2\repository\org\iq80\snappy\snappy\0.4\snappy-0.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\tukaani\xz\1.6\xz-1.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\file-management\3.0.0\file-management-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-shared-io\3.0.0\maven-shared-io-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-compat\3.0\maven-compat-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\wagon\wagon-provider-api\2.10\wagon-provider-api-2.10.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-filtering\3.1.1\maven-filtering-3.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\plexus\plexus-build-api\0.0.7\plexus-build-api-0.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-io\3.0.0\plexus-io-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-archiver\3.2.0\maven-archiver-3.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\guava\guava\19.0\guava-19.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\hibernate\hibernate-core\5.4.2.Final\hibernate-core-5.4.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\javax\persistence\javax.persistence-api\2.2\javax.persistence-api-2.2.jar;C:\Users\Sohan.Dey\.m2\repository\net\bytebuddy\byte-buddy\1.9.10\byte-buddy-1.9.10.jar;C:\Users\Sohan.Dey\.m2\repository\antlr\antlr\2.7.7\antlr-2.7.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\transaction\jboss-transaction-api_1.2_spec\1.1.1.Final\jboss-transaction-api_1.2_spec-1.1.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\jandex\2.0.5.Final\jandex-2.0.5.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\classmate\1.3.4\classmate-1.3.4.jar;C:\Users\Sohan.Dey\.m2\repository\javax\activation\javax.activation-api\1.2.0\javax.activation-api-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\dom4j\dom4j\2.1.1\dom4j-2.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\hibernate\common\hibernate-commons-annotations\5.1.0.Final\hibernate-commons-annotations-5.1.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\javax\xml\bind\jaxb-api\2.3.1\jaxb-api-2.3.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\glassfish\jaxb\jaxb-runtime\2.3.1\jaxb-runtime-2.3.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\glassfish\jaxb\txw2\2.3.1\txw2-2.3.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\istack\istack-commons-runtime\3.0.7\istack-commons-runtime-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\jvnet\staxex\stax-ex\1.8\stax-ex-1.8.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\xml\fastinfoset\FastInfoset\1.2.15\FastInfoset-1.2.15.jar;C:\Users\Sohan.Dey\.m2\repository\commons-beanutils\commons-beanutils\1.9.2\commons-beanutils-1.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\commons-logging\commons-logging\1.1.1\commons-logging-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\commons-collections\commons-collections\3.2.1\commons-collections-3.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\swagger-annotations\1.5.20\swagger-annotations-1.5.20.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.5\jackson-datatype-jsr310-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\postgresql\postgresql\42.2.2\postgresql-42.2.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\slf4j-log4j12\1.6.2\slf4j-log4j12-1.6.2.jar;C:\Users\Sohan.Dey\.m2\repository\log4j\log4j\1.2.16\log4j-1.2.16.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\logging\log4j\log4j-api\2.11.1\log4j-api-2.11.1.jar;C:\Users\Sohan.Dey\.m2\repository\net\lingala\zip4j\zip4j\1.3.2\zip4j-1.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\httpcomponents\httpclient\4.5.3\httpclient-4.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\httpcomponents\httpcore\4.4.6\httpcore-4.4.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-client\2.8.1\hadoop-client-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-common\2.8.1\hadoop-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\commons-cli\commons-cli\1.2\commons-cli-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\xmlenc\xmlenc\0.52\xmlenc-0.52.jar;C:\Users\Sohan.Dey\.m2\repository\commons-net\commons-net\3.1\commons-net-3.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\mortbay\jetty\jetty-sslengine\6.1.26\jetty-sslengine-6.1.26.jar;C:\Users\Sohan.Dey\.m2\repository\javax\servlet\jsp\jsp-api\2.1\jsp-api-2.1.jar;C:\Users\Sohan.Dey\.m2\repository\commons-configuration\commons-configuration\1.6\commons-configuration-1.6.jar;C:\Users\Sohan.Dey\.m2\repository\commons-digester\commons-digester\1.8\commons-digester-1.8.jar;C:\Users\Sohan.Dey\.m2\repository\commons-beanutils\commons-beanutils-core\1.8.0\commons-beanutils-core-1.8.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-core-asl\1.9.13\jackson-core-asl-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-mapper-asl\1.9.13\jackson-mapper-asl-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\avro\avro\1.7.4\avro-1.7.4.jar;C:\Users\Sohan.Dey\.m2\repository\com\thoughtworks\paranamer\paranamer\2.3\paranamer-2.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\xerial\snappy\snappy-java\1.0.4.1\snappy-java-1.0.4.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\protobuf\protobuf-java\2.5.0\protobuf-java-2.5.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-auth\2.8.1\hadoop-auth-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\server\apacheds-kerberos-codec\2.0.0-M15\apacheds-kerberos-codec-2.0.0-M15.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\server\apacheds-i18n\2.0.0-M15\apacheds-i18n-2.0.0-M15.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\api\api-asn1-api\1.0.0-M20\api-asn1-api-1.0.0-M20.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\api\api-util\1.0.0-M20\api-util-1.0.0-M20.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\curator\curator-framework\2.7.1\curator-framework-2.7.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\curator\curator-client\2.7.1\curator-client-2.7.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\curator\curator-recipes\2.7.1\curator-recipes-2.7.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\code\findbugs\jsr305\3.0.0\jsr305-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\htrace\htrace-core4\4.0.1-incubating\htrace-core4-4.0.1-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\zookeeper\zookeeper\3.4.6\zookeeper-3.4.6.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty\3.7.0.Final\netty-3.7.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-hdfs\2.8.1\hadoop-hdfs-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-hdfs-client\2.8.1\hadoop-hdfs-client-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\squareup\okhttp\okhttp\2.4.0\okhttp-2.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\squareup\okio\okio\1.4.0\okio-1.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-app\2.8.1\hadoop-mapreduce-client-app-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-common\2.8.1\hadoop-mapreduce-client-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-client\2.8.1\hadoop-yarn-client-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-server-common\2.8.1\hadoop-yarn-server-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-shuffle\2.8.1\hadoop-mapreduce-client-shuffle-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\fusesource\leveldbjni\leveldbjni-all\1.8\leveldbjni-all-1.8.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-api\2.8.1\hadoop-yarn-api-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-core\2.8.1\hadoop-mapreduce-client-core-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-common\2.8.1\hadoop-yarn-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\javax\servlet\servlet-api\2.5\servlet-api-2.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\mortbay\jetty\jetty-util\6.1.26\jetty-util-6.1.26.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\jersey\jersey-core\1.9\jersey-core-1.9.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\jersey\jersey-client\1.9\jersey-client-1.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-jaxrs\1.9.13\jackson-jaxrs-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-xc\1.9.13\jackson-xc-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-jobclient\2.8.1\hadoop-mapreduce-client-jobclient-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-annotations\2.8.1\hadoop-annotations-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\bouncycastle\bcprov-jdk16\1.45\bcprov-jdk16-1.45.jar;C:\Users\Sohan.Dey\.m2\repository\commons-codec\commons-codec\1.11\commons-codec-1.11.jar;C:\Users\Sohan.Dey\.m2\repository\commons-io\commons-io\2.6\commons-io-2.6.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\zxing\core\3.3.3\core-3.3.3.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\zxing\javase\2.0\javase-2.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\hamcrest\hamcrest-all\1.3\hamcrest-all-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\velocity\velocity\1.7\velocity-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\commons-lang\commons-lang\2.4\commons-lang-2.4.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\html2pdf\2.0.0\html2pdf-2.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\forms\7.1.0\forms-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\kernel\7.1.0\kernel-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\io\7.1.0\io-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\layout\7.1.0\layout-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\itextpdf\5.5.13\itextpdf-5.5.13.jar;C:\Users\Sohan.Dey\.m2\repository\javax\mail\javax.mail-api\1.6.2\javax.mail-api-1.6.2.jar;D:\Mosip_Automation_Test\Docker_Test\MOSIP-19726\mosip-functional-tests\authentication-demo-service\target\classes;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.0.2.RELEASE\spring-boot-starter-web-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-json\2.0.2.RELEASE\spring-boot-starter-json-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.5\jackson-datatype-jdk8-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.5\jackson-module-parameter-names-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\2.0.2.RELEASE\spring-boot-starter-tomcat-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\8.5.31\tomcat-embed-el-8.5.31.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\8.5.31\tomcat-embed-websocket-8.5.31.jar;C:\Users\Sohan.Dey\.m2\repository\org\hibernate\validator\hibernate-validator\6.0.9.Final\hibernate-validator-6.0.9.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-web\5.0.6.RELEASE\spring-web-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-webmvc\5.0.6.RELEASE\spring-webmvc-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-expression\5.0.6.RELEASE\spring-expression-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-test\2.0.2.RELEASE\spring-boot-starter-test-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-test\2.0.2.RELEASE\spring-boot-test-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-test-autoconfigure\2.0.2.RELEASE\spring-boot-test-autoconfigure-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\assertj\assertj-core\3.9.1\assertj-core-3.9.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\skyscreamer\jsonassert\1.5.0\jsonassert-1.5.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-core\5.0.6.RELEASE\spring-core-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-jcl\5.0.6.RELEASE\spring-jcl-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-test\5.0.6.RELEASE\spring-test-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\xmlunit\xmlunit-core\2.5.1\xmlunit-core-2.5.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-swagger-ui\2.9.2\springfox-swagger-ui-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-spring-web\2.9.2\springfox-spring-web-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-swagger2\2.9.2\springfox-swagger2-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-spi\2.9.2\springfox-spi-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-core\2.9.2\springfox-core-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-schema\2.9.2\springfox-schema-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-swagger-common\2.9.2\springfox-swagger-common-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\plugin\spring-plugin-core\1.2.0.RELEASE\spring-plugin-core-1.2.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\plugin\spring-plugin-metadata\1.2.0.RELEASE\spring-plugin-metadata-1.2.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\mapstruct\mapstruct\1.2.0.Final\mapstruct-1.2.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\javax\ws\rs\javax.ws.rs-api\2.0\javax.ws.rs-api-2.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\authentication\authentication-core\1.2.0.1-SNAPSHOT\authentication-core-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-cache\2.0.2.RELEASE\spring-boot-starter-cache-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-context-support\5.0.6.RELEASE\spring-context-support-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\machinezoo\sourceafis\sourceafis\3.4.0\sourceafis-3.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\net\sf\trove4j\trove4j\3.0.3\trove4j-3.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\com\machinezoo\noexception\noexception\1.3.2\noexception-1.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\mhshams\jnbis\2.0.1\jnbis-2.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\sanselan\sanselan\0.97-incubator\sanselan-0.97-incubator.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\idrepository\id-repository-core\1.2.0\id-repository-core-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-biosdk-provider\1.2.0\kernel-biosdk-provider-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-biometrics-api\1.2.0\kernel-biometrics-api-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-demographics-api\1.2.0\kernel-demographics-api-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-webflux\2.0.2.RELEASE\spring-boot-starter-webflux-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-reactor-netty\2.0.2.RELEASE\spring-boot-starter-reactor-netty-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\projectreactor\ipc\reactor-netty\0.7.7.RELEASE\reactor-netty-0.7.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-handler-proxy\4.1.24.Final\netty-handler-proxy-4.1.24.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-codec-socks\4.1.24.Final\netty-codec-socks-4.1.24.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-transport-native-epoll\4.1.24.Final\netty-transport-native-epoll-4.1.24.Final-linux-x86_64.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-transport-native-unix-common\4.1.24.Final\netty-transport-native-unix-common-4.1.24.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-webflux\5.0.6.RELEASE\spring-webflux-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\projectreactor\reactor-core\3.1.7.RELEASE\reactor-core-3.1.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\synchronoss\cloud\nio-multipart-parser\1.1.0\nio-multipart-parser-1.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\synchronoss\cloud\nio-stream-storage\1.1.3\nio-stream-storage-1.1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\springdoc\springdoc-openapi-ui\1.5.10\springdoc-openapi-ui-1.5.10.jar;C:\Users\Sohan.Dey\.m2\repository\org\springdoc\springdoc-openapi-webmvc-core\1.5.10\springdoc-openapi-webmvc-core-1.5.10.jar;C:\Users\Sohan.Dey\.m2\repository\org\springdoc\springdoc-openapi-common\1.5.10\springdoc-openapi-common-1.5.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-models\2.1.10\swagger-models-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-annotations\2.1.10\swagger-annotations-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-integration\2.1.10\swagger-integration-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-core\2.1.10\swagger-core-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\jakarta\xml\bind\jakarta.xml.bind-api\2.3.2\jakarta.xml.bind-api-2.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\jakarta\activation\jakarta.activation-api\1.2.1\jakarta.activation-api-1.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-yaml\2.12.1\jackson-dataformat-yaml-2.12.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\github\classgraph\classgraph\4.8.69\classgraph-4.8.69.jar;C:\Users\Sohan.Dey\.m2\repository\org\webjars\swagger-ui\3.51.1\swagger-ui-3.51.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\webjars\webjars-locator-core\0.45\webjars-locator-core-0.45.jar;C:\Users\Sohan.Dey\.m2\repository\commons-fileupload\commons-fileupload\1.4\commons-fileupload-1.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\mockito\mockito-core\2.23.4\mockito-core-2.23.4.jar;C:\Users\Sohan.Dey\.m2\repository\net\bytebuddy\byte-buddy-agent\1.9.3\byte-buddy-agent-1.9.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\objenesis\objenesis\2.6\objenesis-2.6.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-websubclient-api\1.2.0.1-SNAPSHOT\kernel-websubclient-api-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-aspects\5.0.6.RELEASE\spring-aspects-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\aspectj\aspectjweaver\1.8.13\aspectjweaver-1.8.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\owasp\encoder\encoder\1.2.3\encoder-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\tensorflow\tensorflow\1.12.0\tensorflow-1.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\tensorflow\libtensorflow\1.12.0\libtensorflow-1.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\tensorflow\libtensorflow_jni\1.12.0\libtensorflow_jni-1.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-templatemanager-velocity\1.2.0.1-SNAPSHOT\kernel-templatemanager-velocity-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\javax\servlet\javax.servlet-api\4.0.1\javax.servlet-api-4.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-starter-config\2.0.0.RELEASE\spring-cloud-starter-config-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-starter\2.0.0.RELEASE\spring-cloud-starter-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-context\2.0.0.RELEASE\spring-cloud-context-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-crypto\5.0.6.RELEASE\spring-security-crypto-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-commons\2.0.0.RELEASE\spring-cloud-commons-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-rsa\1.0.5.RELEASE\spring-security-rsa-1.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-config-client\2.0.0.RELEASE\spring-cloud-config-client-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\jai-imageio\jai-imageio-jpeg2000\1.3.0\jai-imageio-jpeg2000-1.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\jai-imageio\jai-imageio-core\1.3.0\jai-imageio-core-1.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-keymanager-service\1.2.0.1-SNAPSHOT\kernel-keymanager-service-1.2.0.1-SNAPSHOT-lib.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-test\5.0.5.RELEASE\spring-security-test-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-core\5.0.5.RELEASE\spring-security-core-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-pdfgenerator-itext\1.2.0.1-SNAPSHOT\kernel-pdfgenerator-itext-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\barcodes\7.1.0\barcodes-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\font-asian\7.1.0\font-asian-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\hyph\7.1.0\hyph-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\pdfa\7.1.0\pdfa-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\sign\7.1.0\sign-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\tool\xmlworker\5.5.13\xmlworker-5.5.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\bouncycastle\bcpkix-jdk15on\1.66\bcpkix-jdk15on-1.66.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-data-jpa\2.0.2.RELEASE\spring-boot-starter-data-jpa-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\2.0.2.RELEASE\spring-boot-starter-jdbc-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\zaxxer\HikariCP\2.7.9\HikariCP-2.7.9.jar;C:\Users\Sohan.Dey\.m2\repository\com\h2database\h2\1.4.197\h2-1.4.197.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\microsoft\TSS.Java\0.3.0\TSS.Java-0.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\net\java\dev\jna\jna\4.4.0\jna-4.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\cache2k\cache2k-api\2.4.1.Final\cache2k-api-2.4.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\cache2k\cache2k-core\2.4.1.Final\cache2k-core-2.4.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\nimbusds\nimbus-jose-jwt\9.14\nimbus-jose-jwt-9.14.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-core\1.2.0.1-SNAPSHOT\kernel-core-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter\2.0.2.RELEASE\spring-boot-starter-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot\2.0.2.RELEASE\spring-boot-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.0.2.RELEASE\spring-boot-autoconfigure-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.0.2.RELEASE\spring-boot-starter-logging-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.10.0\log4j-to-slf4j-2.10.0.jar;C:\Users\Sohan.Dey\.m2\repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\data\spring-data-jpa\2.0.7.RELEASE\spring-data-jpa-2.0.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\data\spring-data-commons\2.0.7.RELEASE\spring-data-commons-2.0.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-orm\5.0.6.RELEASE\spring-orm-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-jdbc\5.0.6.RELEASE\spring-jdbc-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-context\5.0.6.RELEASE\spring-context-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-aop\5.0.6.RELEASE\spring-aop-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-tx\5.0.6.RELEASE\spring-tx-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-beans\5.0.6.RELEASE\spring-beans-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\aspectj\aspectjrt\1.8.12\aspectjrt-1.8.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-security\2.0.2.RELEASE\spring-boot-starter-security-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-config\5.0.5.RELEASE\spring-security-config-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-web\5.0.5.RELEASE\spring-security-web-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\javax\transaction\javax.transaction-api\1.3\javax.transaction-api-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-math3\3.6.1\commons-math3-3.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\bouncycastle\bcprov-jdk15on\1.66\bcprov-jdk15on-1.66.jar;C:\Users\Sohan.Dey\.m2\repository\javax\interceptor\javax.interceptor-api\1.2\javax.interceptor-api-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\code\findbugs\annotations\3.0.1\annotations-3.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\net\jcip\jcip-annotations\1.0\jcip-annotations-1.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\swagger-models\1.5.21\swagger-models-1.5.21.jar;C:\Users\Sohan.Dey\.m2\repository\com\auth0\java-jwt\3.8.1\java-jwt-3.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\micrometer\micrometer-core\1.4.2\micrometer-core-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\hdrhistogram\HdrHistogram\2.1.12\HdrHistogram-2.1.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\latencyutils\LatencyUtils\2.0.3\LatencyUtils-2.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\micrometer\micrometer-registry-prometheus\1.4.2\micrometer-registry-prometheus-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\prometheus\simpleclient_common\0.8.1\simpleclient_common-0.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\prometheus\simpleclient\0.8.1\simpleclient-0.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\jul-to-slf4j\1.7.25\jul-to-slf4j-1.7.25.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\jcl-over-slf4j\1.7.25\jcl-over-slf4j-1.7.25.jar;C:\Users\Sohan.Dey\.m2\repository\javax\activation\activation\1.1\activation-1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-starter-sleuth\2.0.4.RELEASE\spring-cloud-starter-sleuth-2.0.4.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-aop\2.0.9.RELEASE\spring-boot-starter-aop-2.0.9.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-sleuth-core\2.0.4.RELEASE\spring-cloud-sleuth-core-2.0.4.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave\5.6.1\brave-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\zipkin2\zipkin\2.12.0\zipkin-2.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\reporter2\zipkin-reporter\2.7.14\zipkin-reporter-2.7.14.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-context-log4j2\5.6.1\brave-context-log4j2-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-spring-web\5.6.1\brave-instrumentation-spring-web-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-http\5.6.1\brave-instrumentation-http-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-spring-rabbit\5.6.1\brave-instrumentation-spring-rabbit-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-kafka-clients\5.6.1\brave-instrumentation-kafka-clients-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-httpclient\5.6.1\brave-instrumentation-httpclient-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-httpasyncclient\5.6.1\brave-instrumentation-httpasyncclient-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-spring-webmvc\5.6.1\brave-instrumentation-spring-webmvc-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-servlet\5.6.1\brave-instrumentation-servlet-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-actuator\2.0.2.RELEASE\spring-boot-starter-actuator-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-actuator-autoconfigure\2.0.2.RELEASE\spring-boot-actuator-autoconfigure-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-actuator\2.0.2.RELEASE\spring-boot-actuator-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\8.5.55\tomcat-embed-core-8.5.55.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\tomcat-annotations-api\8.5.55\tomcat-annotations-api-8.5.55.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\retry\spring-retry\1.2.1.RELEASE\spring-retry-1.2.1.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\module\jackson-module-afterburner\2.12.0\jackson-module-afterburner-2.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-registration-packet-manager\1.1.5.3\kernel-registration-packet-manager-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-keygenerator-bouncycastle\1.1.5.3\kernel-keygenerator-bouncycastle-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-cbeffutil-api\1.1.5.3\kernel-cbeffutil-api-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-logger-logback\1.1.5.3\kernel-logger-logback-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\net\logstash\logback\logstash-logback-encoder\6.4\logstash-logback-encoder-6.4.jar;C:\Users\Sohan.Dey\.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\ch\qos\logback\logback-access\1.2.3\logback-access-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-crypto-jce\1.1.5.3\kernel-crypto-jce-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\bitbucket\b_c\jose4j\0.6.5\jose4j-0.6.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\wink\wink-json4j-provider\1.1.2-incubating\wink-json4j-provider-1.1.2-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\wink\wink-common\1.1.2-incubating\wink-common-1.1.2-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\xml\bind\jaxb-impl\2.2.1.1\jaxb-impl-2.2.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\geronimo\specs\geronimo-annotation_1.1_spec\1.0\geronimo-annotation_1.1_spec-1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\wink\wink-json4j\1.1.2-incubating\wink-json4j-1.1.2-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\javax\ws\rs\jsr311-api\1.1.1\jsr311-api-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\checkerframework\checker-qual\2.9.0\checker-qual-2.9.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\activemq\activemq-broker\5.15.9\activemq-broker-5.15.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\activemq\activemq-client\5.15.9\activemq-client-5.15.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\geronimo\specs\geronimo-jms_1.1_spec\1.1.1\geronimo-jms_1.1_spec-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\fusesource\hawtbuf\hawtbuf\1.11\hawtbuf-1.11.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\geronimo\specs\geronimo-j2ee-management_1.1_spec\1.0.1\geronimo-j2ee-management_1.1_spec-1.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\activemq\activemq-openwire-legacy\5.15.9\activemq-openwire-legacy-5.15.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\projectlombok\lombok\1.18.8\lombok-1.18.8.jar \ No newline at end of file diff --git a/api-test/.temp-MosipFunctionalTest-classpath-arg-1695652238739.txt b/api-test/.temp-MosipFunctionalTest-classpath-arg-1695652238739.txt deleted file mode 100644 index 0fc13dd5a..000000000 --- a/api-test/.temp-MosipFunctionalTest-classpath-arg-1695652238739.txt +++ /dev/null @@ -1 +0,0 @@ --classpath D:\Mosip_Automation_Test\MOSIP_FUNCTIONAL_TESTS\mosip-functional-tests\automationtests\target\test-classes;D:\Mosip_Automation_Test\MOSIP_FUNCTIONAL_TESTS\mosip-functional-tests\automationtests\target\classes;C:\Users\Sohan.Dey\.m2\repository\com\opencsv\opencsv\4.1\opencsv-4.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-lang3\3.6\commons-lang3-3.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-text\1.1\commons-text-1.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\ibm\icu\icu4j\63.1\icu4j-63.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\keycloak\keycloak-admin-client\17.0.1\keycloak-admin-client-17.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\keycloak\keycloak-core\17.0.1\keycloak-core-17.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\keycloak\keycloak-common\17.0.1\keycloak-common-17.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-client\3.13.2.Final\resteasy-client-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\ws\rs\jboss-jaxrs-api_2.1_spec\2.0.1.Final\jboss-jaxrs-api_2.1_spec-2.0.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-jaxrs\3.13.2.Final\resteasy-jaxrs-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\reactivestreams\reactive-streams\1.0.3\reactive-streams-1.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\jakarta\validation\jakarta.validation-api\2.0.2\jakarta.validation-api-2.0.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\annotation\jboss-annotations-api_1.3_spec\2.0.1.Final\jboss-annotations-api_1.3_spec-2.0.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\activation\jakarta.activation\1.2.1\jakarta.activation-1.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\stephenc\jcip\jcip-annotations\1.0-1\jcip-annotations-1.0-1.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-multipart-provider\3.13.2.Final\resteasy-multipart-provider-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\mail\jakarta.mail\1.6.5\jakarta.mail-1.6.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\james\apache-mime4j\0.6\apache-mime4j-0.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-jackson2-provider\3.13.2.Final\resteasy-jackson2-provider-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\jaxrs\jackson-jaxrs-json-provider\2.10.5\jackson-jaxrs-json-provider-2.10.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\jaxrs\jackson-jaxrs-base\2.10.5\jackson-jaxrs-base-2.10.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\json-patch\1.9\json-patch-1.9.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\jackson-coreutils\1.6\jackson-coreutils-1.6.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\msg-simple\1.1\msg-simple-1.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\btf\1.2\btf-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-jaxb-provider\3.13.2.Final\resteasy-jaxb-provider-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\xml\bind\jboss-jaxb-api_2.3_spec\2.0.0.Final\jboss-jaxb-api_2.3_spec-2.0.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\javassist\javassist\3.25.0-GA\javassist-3.25.0-GA.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\jknack\handlebars\3.0.0\handlebars-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\antlr\antlr4-runtime\4.5.1-1\antlr4-runtime-4.5.1-1.jar;C:\Users\Sohan.Dey\.m2\repository\org\mozilla\rhino\1.7R4\rhino-1.7R4.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\slf4j-api\1.6.4\slf4j-api-1.6.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-collections4\4.3\commons-collections4-4.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\jsonwebtoken\jjwt\0.6.0\jjwt-0.6.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\flipkart\zjsonpatch\zjsonpatch\0.4.7\zjsonpatch-0.4.7.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk\1.11.368\aws-java-sdk-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dlm\1.11.368\aws-java-sdk-dlm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\jmespath-java\1.11.368\jmespath-java-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-macie\1.11.368\aws-java-sdk-macie-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-eks\1.11.368\aws-java-sdk-eks-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediatailor\1.11.368\aws-java-sdk-mediatailor-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-neptune\1.11.368\aws-java-sdk-neptune-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-pi\1.11.368\aws-java-sdk-pi-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iot1clickprojects\1.11.368\aws-java-sdk-iot1clickprojects-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iot1clickdevices\1.11.368\aws-java-sdk-iot1clickdevices-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iotanalytics\1.11.368\aws-java-sdk-iotanalytics-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-acmpca\1.11.368\aws-java-sdk-acmpca-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-secretsmanager\1.11.368\aws-java-sdk-secretsmanager-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-fms\1.11.368\aws-java-sdk-fms-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-connect\1.11.368\aws-java-sdk-connect-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-transcribe\1.11.368\aws-java-sdk-transcribe-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-autoscalingplans\1.11.368\aws-java-sdk-autoscalingplans-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-workmail\1.11.368\aws-java-sdk-workmail-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-servicediscovery\1.11.368\aws-java-sdk-servicediscovery-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloud9\1.11.368\aws-java-sdk-cloud9-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-serverlessapplicationrepository\1.11.368\aws-java-sdk-serverlessapplicationrepository-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-alexaforbusiness\1.11.368\aws-java-sdk-alexaforbusiness-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-resourcegroups\1.11.368\aws-java-sdk-resourcegroups-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-comprehend\1.11.368\aws-java-sdk-comprehend-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-translate\1.11.368\aws-java-sdk-translate-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sagemaker\1.11.368\aws-java-sdk-sagemaker-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iotjobsdataplane\1.11.368\aws-java-sdk-iotjobsdataplane-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sagemakerruntime\1.11.368\aws-java-sdk-sagemakerruntime-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-kinesisvideo\1.11.368\aws-java-sdk-kinesisvideo-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-codec-http\4.1.17.Final\netty-codec-http-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-codec\4.1.17.Final\netty-codec-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-handler\4.1.17.Final\netty-handler-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-buffer\4.1.17.Final\netty-buffer-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-common\4.1.17.Final\netty-common-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-transport\4.1.17.Final\netty-transport-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-resolver\4.1.17.Final\netty-resolver-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-appsync\1.11.368\aws-java-sdk-appsync-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-guardduty\1.11.368\aws-java-sdk-guardduty-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mq\1.11.368\aws-java-sdk-mq-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediaconvert\1.11.368\aws-java-sdk-mediaconvert-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediastore\1.11.368\aws-java-sdk-mediastore-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediastoredata\1.11.368\aws-java-sdk-mediastoredata-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-medialive\1.11.368\aws-java-sdk-medialive-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediapackage\1.11.368\aws-java-sdk-mediapackage-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-costexplorer\1.11.368\aws-java-sdk-costexplorer-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-pricing\1.11.368\aws-java-sdk-pricing-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mobile\1.11.368\aws-java-sdk-mobile-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudhsmv2\1.11.368\aws-java-sdk-cloudhsmv2-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-glue\1.11.368\aws-java-sdk-glue-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-migrationhub\1.11.368\aws-java-sdk-migrationhub-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dax\1.11.368\aws-java-sdk-dax-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-greengrass\1.11.368\aws-java-sdk-greengrass-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-athena\1.11.368\aws-java-sdk-athena-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-marketplaceentitlement\1.11.368\aws-java-sdk-marketplaceentitlement-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codestar\1.11.368\aws-java-sdk-codestar-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lexmodelbuilding\1.11.368\aws-java-sdk-lexmodelbuilding-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-resourcegroupstaggingapi\1.11.368\aws-java-sdk-resourcegroupstaggingapi-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-pinpoint\1.11.368\aws-java-sdk-pinpoint-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-xray\1.11.368\aws-java-sdk-xray-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-opsworkscm\1.11.368\aws-java-sdk-opsworkscm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-support\1.11.368\aws-java-sdk-support-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-simpledb\1.11.368\aws-java-sdk-simpledb-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-servicecatalog\1.11.368\aws-java-sdk-servicecatalog-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-servermigration\1.11.368\aws-java-sdk-servermigration-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-simpleworkflow\1.11.368\aws-java-sdk-simpleworkflow-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-storagegateway\1.11.368\aws-java-sdk-storagegateway-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-route53\1.11.368\aws-java-sdk-route53-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-s3\1.11.368\aws-java-sdk-s3-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-importexport\1.11.368\aws-java-sdk-importexport-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sts\1.11.368\aws-java-sdk-sts-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sqs\1.11.368\aws-java-sdk-sqs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-rds\1.11.368\aws-java-sdk-rds-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-redshift\1.11.368\aws-java-sdk-redshift-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticbeanstalk\1.11.368\aws-java-sdk-elasticbeanstalk-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-glacier\1.11.368\aws-java-sdk-glacier-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iam\1.11.368\aws-java-sdk-iam-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-datapipeline\1.11.368\aws-java-sdk-datapipeline-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticloadbalancing\1.11.368\aws-java-sdk-elasticloadbalancing-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticloadbalancingv2\1.11.368\aws-java-sdk-elasticloadbalancingv2-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-emr\1.11.368\aws-java-sdk-emr-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticache\1.11.368\aws-java-sdk-elasticache-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elastictranscoder\1.11.368\aws-java-sdk-elastictranscoder-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ec2\1.11.368\aws-java-sdk-ec2-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dynamodb\1.11.368\aws-java-sdk-dynamodb-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sns\1.11.368\aws-java-sdk-sns-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-budgets\1.11.368\aws-java-sdk-budgets-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudtrail\1.11.368\aws-java-sdk-cloudtrail-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudwatch\1.11.368\aws-java-sdk-cloudwatch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-logs\1.11.368\aws-java-sdk-logs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-events\1.11.368\aws-java-sdk-events-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cognitoidentity\1.11.368\aws-java-sdk-cognitoidentity-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cognitosync\1.11.368\aws-java-sdk-cognitosync-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-directconnect\1.11.368\aws-java-sdk-directconnect-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudformation\1.11.368\aws-java-sdk-cloudformation-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudfront\1.11.368\aws-java-sdk-cloudfront-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-clouddirectory\1.11.368\aws-java-sdk-clouddirectory-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-kinesis\1.11.368\aws-java-sdk-kinesis-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-opsworks\1.11.368\aws-java-sdk-opsworks-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ses\1.11.368\aws-java-sdk-ses-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-autoscaling\1.11.368\aws-java-sdk-autoscaling-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudsearch\1.11.368\aws-java-sdk-cloudsearch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudwatchmetrics\1.11.368\aws-java-sdk-cloudwatchmetrics-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codedeploy\1.11.368\aws-java-sdk-codedeploy-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codepipeline\1.11.368\aws-java-sdk-codepipeline-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-kms\1.11.368\aws-java-sdk-kms-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-config\1.11.368\aws-java-sdk-config-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lambda\1.11.368\aws-java-sdk-lambda-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ecs\1.11.368\aws-java-sdk-ecs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ecr\1.11.368\aws-java-sdk-ecr-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudhsm\1.11.368\aws-java-sdk-cloudhsm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ssm\1.11.368\aws-java-sdk-ssm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-workspaces\1.11.368\aws-java-sdk-workspaces-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-machinelearning\1.11.368\aws-java-sdk-machinelearning-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-directory\1.11.368\aws-java-sdk-directory-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-efs\1.11.368\aws-java-sdk-efs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codecommit\1.11.368\aws-java-sdk-codecommit-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-devicefarm\1.11.368\aws-java-sdk-devicefarm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticsearch\1.11.368\aws-java-sdk-elasticsearch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-waf\1.11.368\aws-java-sdk-waf-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-marketplacecommerceanalytics\1.11.368\aws-java-sdk-marketplacecommerceanalytics-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-inspector\1.11.368\aws-java-sdk-inspector-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iot\1.11.368\aws-java-sdk-iot-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-api-gateway\1.11.368\aws-java-sdk-api-gateway-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-acm\1.11.368\aws-java-sdk-acm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-gamelift\1.11.368\aws-java-sdk-gamelift-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dms\1.11.368\aws-java-sdk-dms-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-marketplacemeteringservice\1.11.368\aws-java-sdk-marketplacemeteringservice-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cognitoidp\1.11.368\aws-java-sdk-cognitoidp-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-discovery\1.11.368\aws-java-sdk-discovery-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-applicationautoscaling\1.11.368\aws-java-sdk-applicationautoscaling-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-snowball\1.11.368\aws-java-sdk-snowball-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-rekognition\1.11.368\aws-java-sdk-rekognition-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-polly\1.11.368\aws-java-sdk-polly-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lightsail\1.11.368\aws-java-sdk-lightsail-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-stepfunctions\1.11.368\aws-java-sdk-stepfunctions-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-health\1.11.368\aws-java-sdk-health-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-costandusagereport\1.11.368\aws-java-sdk-costandusagereport-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codebuild\1.11.368\aws-java-sdk-codebuild-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-appstream\1.11.368\aws-java-sdk-appstream-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-shield\1.11.368\aws-java-sdk-shield-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-batch\1.11.368\aws-java-sdk-batch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lex\1.11.368\aws-java-sdk-lex-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mechanicalturkrequester\1.11.368\aws-java-sdk-mechanicalturkrequester-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-organizations\1.11.368\aws-java-sdk-organizations-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-workdocs\1.11.368\aws-java-sdk-workdocs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-core\1.11.368\aws-java-sdk-core-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\software\amazon\ion\ion-java\1.0.2\ion-java-1.0.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-cbor\2.6.7\jackson-dataformat-cbor-2.6.7.jar;C:\Users\Sohan.Dey\.m2\repository\joda-time\joda-time\2.8.1\joda-time-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-models\1.11.368\aws-java-sdk-models-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-swf-libraries\1.11.22\aws-java-sdk-swf-libraries-1.11.22.jar;C:\Users\Sohan.Dey\.m2\repository\com\aventstack\extentreports\3.0.0\extentreports-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\freemarker\freemarker\2.3.23\freemarker-2.3.23.jar;C:\Users\Sohan.Dey\.m2\repository\org\mongodb\mongodb-driver\3.3.0\mongodb-driver-3.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\mongodb\bson\3.3.0\bson-3.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\mongodb\mongodb-driver-core\3.3.0\mongodb-driver-core-3.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\httpcomponents\httpmime\4.5.2\httpmime-4.5.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\relevantcodes\extentreports\2.41.2\extentreports-2.41.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\jsoup\jsoup\1.8.3\jsoup-1.8.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\xerial\sqlite-jdbc\3.8.11.1\sqlite-jdbc-3.8.11.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\jayway\jsonpath\json-path\2.4.0\json-path-2.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\net\minidev\json-smart\2.3\json-smart-2.3.jar;C:\Users\Sohan.Dey\.m2\repository\net\minidev\accessors-smart\1.2\accessors-smart-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\ow2\asm\asm\5.0.4\asm-5.0.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-model\3.3.9\maven-model-3.3.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-utils\3.0.22\plexus-utils-3.0.22.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\rest-assured\3.0.7\rest-assured-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\groovy\groovy\2.4.12\groovy-2.4.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\groovy\groovy-xml\2.4.12\groovy-xml-2.4.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\hamcrest\hamcrest-library\1.3\hamcrest-library-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\ccil\cowan\tagsoup\tagsoup\1.2.1\tagsoup-1.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\json-path\3.0.7\json-path-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\groovy\groovy-json\2.4.12\groovy-json-2.4.12.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\rest-assured-common\3.0.7\rest-assured-common-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\xml-path\3.0.7\xml-path-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\testng\testng\6.11\testng-6.11.jar;C:\Users\Sohan.Dey\.m2\repository\com\beust\jcommander\1.64\jcommander-1.64.jar;C:\Users\Sohan.Dey\.m2\repository\org\yaml\snakeyaml\1.17\snakeyaml-1.17.jar;C:\Users\Sohan.Dey\.m2\repository\org\zeroturnaround\zt-zip\1.13\zt-zip-1.13.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.10.1\jackson-core-2.10.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.9.5\jackson-annotations-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.10.5\jackson-databind-2.10.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-xml\2.9.5\jackson-dataformat-xml-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\module\jackson-module-jaxb-annotations\2.9.5\jackson-module-jaxb-annotations-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\woodstox\stax2-api\3.1.4\stax2-api-3.1.4.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\woodstox\woodstox-core\5.0.3\woodstox-core-5.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\json\json\20180130\json-20180130.jar;C:\Users\Sohan.Dey\.m2\repository\com\googlecode\json-simple\json-simple\1.1.1\json-simple-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\junit\junit\4.10\junit-4.10.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\code\gson\gson\2.8.4\gson-2.8.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\plugins\maven-assembly-plugin\3.1.0\maven-assembly-plugin-3.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-plugin-api\3.0\maven-plugin-api-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\sisu\sisu-inject-plexus\1.4.2\sisu-inject-plexus-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\sisu\sisu-inject-bean\1.4.2\sisu-inject-bean-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\sisu\sisu-guice\2.1.7\sisu-guice-2.1.7-noaop.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-core\3.0\maven-core-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-settings\3.0\maven-settings-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-settings-builder\3.0\maven-settings-builder-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-repository-metadata\3.0\maven-repository-metadata-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-model-builder\3.0\maven-model-builder-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-aether-provider\3.0\maven-aether-provider-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-impl\1.7\aether-impl-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-spi\1.7\aether-spi-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-api\1.7\aether-api-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-util\1.7\aether-util-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-classworlds\2.2.3\plexus-classworlds-2.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-component-annotations\1.5.5\plexus-component-annotations-1.5.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\plexus\plexus-sec-dispatcher\1.3\plexus-sec-dispatcher-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\plexus\plexus-cipher\1.4\plexus-cipher-1.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-artifact\3.0\maven-artifact-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-common-artifact-filters\3.0.1\maven-common-artifact-filters-3.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-shared-utils\3.1.0\maven-shared-utils-3.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-artifact-transfer\0.9.0\maven-artifact-transfer-0.9.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-interpolation\1.24\plexus-interpolation-1.24.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-archiver\3.5\plexus-archiver-3.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-compress\1.14\commons-compress-1.14.jar;C:\Users\Sohan.Dey\.m2\repository\org\iq80\snappy\snappy\0.4\snappy-0.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\tukaani\xz\1.6\xz-1.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\file-management\3.0.0\file-management-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-shared-io\3.0.0\maven-shared-io-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-compat\3.0\maven-compat-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\wagon\wagon-provider-api\2.10\wagon-provider-api-2.10.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-filtering\3.1.1\maven-filtering-3.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\plexus\plexus-build-api\0.0.7\plexus-build-api-0.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-io\3.0.0\plexus-io-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-archiver\3.2.0\maven-archiver-3.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\guava\guava\19.0\guava-19.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\hibernate\hibernate-core\5.4.2.Final\hibernate-core-5.4.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\javax\persistence\javax.persistence-api\2.2\javax.persistence-api-2.2.jar;C:\Users\Sohan.Dey\.m2\repository\net\bytebuddy\byte-buddy\1.9.10\byte-buddy-1.9.10.jar;C:\Users\Sohan.Dey\.m2\repository\antlr\antlr\2.7.7\antlr-2.7.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\transaction\jboss-transaction-api_1.2_spec\1.1.1.Final\jboss-transaction-api_1.2_spec-1.1.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\jandex\2.0.5.Final\jandex-2.0.5.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\classmate\1.3.4\classmate-1.3.4.jar;C:\Users\Sohan.Dey\.m2\repository\javax\activation\javax.activation-api\1.2.0\javax.activation-api-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\dom4j\dom4j\2.1.1\dom4j-2.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\hibernate\common\hibernate-commons-annotations\5.1.0.Final\hibernate-commons-annotations-5.1.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\javax\xml\bind\jaxb-api\2.3.1\jaxb-api-2.3.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\glassfish\jaxb\jaxb-runtime\2.3.1\jaxb-runtime-2.3.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\glassfish\jaxb\txw2\2.3.1\txw2-2.3.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\istack\istack-commons-runtime\3.0.7\istack-commons-runtime-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\jvnet\staxex\stax-ex\1.8\stax-ex-1.8.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\xml\fastinfoset\FastInfoset\1.2.15\FastInfoset-1.2.15.jar;C:\Users\Sohan.Dey\.m2\repository\commons-beanutils\commons-beanutils\1.9.2\commons-beanutils-1.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\commons-logging\commons-logging\1.1.1\commons-logging-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\commons-collections\commons-collections\3.2.1\commons-collections-3.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\swagger-annotations\1.5.20\swagger-annotations-1.5.20.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.5\jackson-datatype-jsr310-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\postgresql\postgresql\42.2.2\postgresql-42.2.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\slf4j-log4j12\1.6.2\slf4j-log4j12-1.6.2.jar;C:\Users\Sohan.Dey\.m2\repository\log4j\log4j\1.2.16\log4j-1.2.16.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\logging\log4j\log4j-api\2.11.1\log4j-api-2.11.1.jar;C:\Users\Sohan.Dey\.m2\repository\net\lingala\zip4j\zip4j\1.3.2\zip4j-1.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\httpcomponents\httpclient\4.5.3\httpclient-4.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\httpcomponents\httpcore\4.4.6\httpcore-4.4.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-client\2.8.1\hadoop-client-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-common\2.8.1\hadoop-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\commons-cli\commons-cli\1.2\commons-cli-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\xmlenc\xmlenc\0.52\xmlenc-0.52.jar;C:\Users\Sohan.Dey\.m2\repository\commons-net\commons-net\3.1\commons-net-3.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\mortbay\jetty\jetty-sslengine\6.1.26\jetty-sslengine-6.1.26.jar;C:\Users\Sohan.Dey\.m2\repository\javax\servlet\jsp\jsp-api\2.1\jsp-api-2.1.jar;C:\Users\Sohan.Dey\.m2\repository\commons-configuration\commons-configuration\1.6\commons-configuration-1.6.jar;C:\Users\Sohan.Dey\.m2\repository\commons-digester\commons-digester\1.8\commons-digester-1.8.jar;C:\Users\Sohan.Dey\.m2\repository\commons-beanutils\commons-beanutils-core\1.8.0\commons-beanutils-core-1.8.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-core-asl\1.9.13\jackson-core-asl-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-mapper-asl\1.9.13\jackson-mapper-asl-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\avro\avro\1.7.4\avro-1.7.4.jar;C:\Users\Sohan.Dey\.m2\repository\com\thoughtworks\paranamer\paranamer\2.3\paranamer-2.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\xerial\snappy\snappy-java\1.0.4.1\snappy-java-1.0.4.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\protobuf\protobuf-java\2.5.0\protobuf-java-2.5.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-auth\2.8.1\hadoop-auth-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\server\apacheds-kerberos-codec\2.0.0-M15\apacheds-kerberos-codec-2.0.0-M15.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\server\apacheds-i18n\2.0.0-M15\apacheds-i18n-2.0.0-M15.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\api\api-asn1-api\1.0.0-M20\api-asn1-api-1.0.0-M20.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\api\api-util\1.0.0-M20\api-util-1.0.0-M20.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\curator\curator-framework\2.7.1\curator-framework-2.7.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\curator\curator-client\2.7.1\curator-client-2.7.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\curator\curator-recipes\2.7.1\curator-recipes-2.7.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\code\findbugs\jsr305\3.0.0\jsr305-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\htrace\htrace-core4\4.0.1-incubating\htrace-core4-4.0.1-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\zookeeper\zookeeper\3.4.6\zookeeper-3.4.6.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty\3.7.0.Final\netty-3.7.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-hdfs\2.8.1\hadoop-hdfs-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-hdfs-client\2.8.1\hadoop-hdfs-client-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\squareup\okhttp\okhttp\2.4.0\okhttp-2.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\squareup\okio\okio\1.4.0\okio-1.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-app\2.8.1\hadoop-mapreduce-client-app-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-common\2.8.1\hadoop-mapreduce-client-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-client\2.8.1\hadoop-yarn-client-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-server-common\2.8.1\hadoop-yarn-server-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-shuffle\2.8.1\hadoop-mapreduce-client-shuffle-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\fusesource\leveldbjni\leveldbjni-all\1.8\leveldbjni-all-1.8.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-api\2.8.1\hadoop-yarn-api-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-core\2.8.1\hadoop-mapreduce-client-core-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-common\2.8.1\hadoop-yarn-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\javax\servlet\servlet-api\2.5\servlet-api-2.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\mortbay\jetty\jetty-util\6.1.26\jetty-util-6.1.26.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\jersey\jersey-core\1.9\jersey-core-1.9.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\jersey\jersey-client\1.9\jersey-client-1.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-xc\1.9.13\jackson-xc-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-jobclient\2.8.1\hadoop-mapreduce-client-jobclient-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-annotations\2.8.1\hadoop-annotations-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\bouncycastle\bcprov-jdk15on\1.56\bcprov-jdk15on-1.56.jar;C:\Users\Sohan.Dey\.m2\repository\commons-codec\commons-codec\1.11\commons-codec-1.11.jar;C:\Users\Sohan.Dey\.m2\repository\commons-io\commons-io\2.6\commons-io-2.6.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\zxing\core\3.3.3\core-3.3.3.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\zxing\javase\2.0\javase-2.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\hamcrest\hamcrest-all\1.3\hamcrest-all-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\velocity\velocity\1.7\velocity-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\commons-lang\commons-lang\2.4\commons-lang-2.4.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\html2pdf\2.0.0\html2pdf-2.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\forms\7.1.0\forms-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\kernel\7.1.0\kernel-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\io\7.1.0\io-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\layout\7.1.0\layout-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\itextpdf\5.5.13\itextpdf-5.5.13.jar;C:\Users\Sohan.Dey\.m2\repository\javax\mail\javax.mail-api\1.6.2\javax.mail-api-1.6.2.jar;D:\Mosip_Automation_Test\MOSIP_FUNCTIONAL_TESTS\mosip-functional-tests\authentication-demo-service\target\classes;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.0.2.RELEASE\spring-boot-starter-web-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-json\2.0.2.RELEASE\spring-boot-starter-json-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.5\jackson-datatype-jdk8-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.5\jackson-module-parameter-names-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\2.0.2.RELEASE\spring-boot-starter-tomcat-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\8.5.31\tomcat-embed-el-8.5.31.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\8.5.31\tomcat-embed-websocket-8.5.31.jar;C:\Users\Sohan.Dey\.m2\repository\org\hibernate\validator\hibernate-validator\6.0.9.Final\hibernate-validator-6.0.9.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-web\5.0.6.RELEASE\spring-web-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-webmvc\5.0.6.RELEASE\spring-webmvc-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-expression\5.0.6.RELEASE\spring-expression-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-test\2.0.2.RELEASE\spring-boot-starter-test-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-test\2.0.2.RELEASE\spring-boot-test-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-test-autoconfigure\2.0.2.RELEASE\spring-boot-test-autoconfigure-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\assertj\assertj-core\3.9.1\assertj-core-3.9.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\skyscreamer\jsonassert\1.5.0\jsonassert-1.5.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-core\5.0.6.RELEASE\spring-core-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-jcl\5.0.6.RELEASE\spring-jcl-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-test\5.0.6.RELEASE\spring-test-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\xmlunit\xmlunit-core\2.5.1\xmlunit-core-2.5.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-swagger-ui\2.9.2\springfox-swagger-ui-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-spring-web\2.9.2\springfox-spring-web-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-swagger2\2.9.2\springfox-swagger2-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-spi\2.9.2\springfox-spi-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-core\2.9.2\springfox-core-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-schema\2.9.2\springfox-schema-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-swagger-common\2.9.2\springfox-swagger-common-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\plugin\spring-plugin-core\1.2.0.RELEASE\spring-plugin-core-1.2.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\plugin\spring-plugin-metadata\1.2.0.RELEASE\spring-plugin-metadata-1.2.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\mapstruct\mapstruct\1.2.0.Final\mapstruct-1.2.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\javax\ws\rs\javax.ws.rs-api\2.0\javax.ws.rs-api-2.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\authentication\authentication-core\1.2.0.1-B3\authentication-core-1.2.0.1-B3.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-cache\2.0.2.RELEASE\spring-boot-starter-cache-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-context-support\5.0.6.RELEASE\spring-context-support-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\machinezoo\sourceafis\sourceafis\3.4.0\sourceafis-3.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\net\sf\trove4j\trove4j\3.0.3\trove4j-3.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\com\machinezoo\noexception\noexception\1.3.2\noexception-1.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\mhshams\jnbis\2.0.1\jnbis-2.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\sanselan\sanselan\0.97-incubator\sanselan-0.97-incubator.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\idrepository\id-repository-core\1.2.0.1-B1\id-repository-core-1.2.0.1-B1.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-biosdk-provider\1.2.0.1-B1\kernel-biosdk-provider-1.2.0.1-B1.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-biometrics-api\1.2.0.1-B1\kernel-biometrics-api-1.2.0.1-B1.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-demographics-api\1.2.0.1-B1\kernel-demographics-api-1.2.0.1-B1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-webflux\2.0.2.RELEASE\spring-boot-starter-webflux-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-reactor-netty\2.0.2.RELEASE\spring-boot-starter-reactor-netty-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\projectreactor\ipc\reactor-netty\0.7.7.RELEASE\reactor-netty-0.7.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-handler-proxy\4.1.24.Final\netty-handler-proxy-4.1.24.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-codec-socks\4.1.24.Final\netty-codec-socks-4.1.24.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-transport-native-epoll\4.1.24.Final\netty-transport-native-epoll-4.1.24.Final-linux-x86_64.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-transport-native-unix-common\4.1.24.Final\netty-transport-native-unix-common-4.1.24.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-webflux\5.0.6.RELEASE\spring-webflux-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\synchronoss\cloud\nio-multipart-parser\1.1.0\nio-multipart-parser-1.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\synchronoss\cloud\nio-stream-storage\1.1.3\nio-stream-storage-1.1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\springdoc\springdoc-openapi-ui\1.5.10\springdoc-openapi-ui-1.5.10.jar;C:\Users\Sohan.Dey\.m2\repository\org\springdoc\springdoc-openapi-webmvc-core\1.5.10\springdoc-openapi-webmvc-core-1.5.10.jar;C:\Users\Sohan.Dey\.m2\repository\org\springdoc\springdoc-openapi-common\1.5.10\springdoc-openapi-common-1.5.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-models\2.1.10\swagger-models-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-annotations\2.1.10\swagger-annotations-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-integration\2.1.10\swagger-integration-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-core\2.1.10\swagger-core-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\jakarta\xml\bind\jakarta.xml.bind-api\2.3.2\jakarta.xml.bind-api-2.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\jakarta\activation\jakarta.activation-api\1.2.1\jakarta.activation-api-1.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-yaml\2.12.1\jackson-dataformat-yaml-2.12.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\github\classgraph\classgraph\4.8.69\classgraph-4.8.69.jar;C:\Users\Sohan.Dey\.m2\repository\org\webjars\swagger-ui\3.51.1\swagger-ui-3.51.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\webjars\webjars-locator-core\0.45\webjars-locator-core-0.45.jar;C:\Users\Sohan.Dey\.m2\repository\commons-fileupload\commons-fileupload\1.4\commons-fileupload-1.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\mockito\mockito-core\2.23.4\mockito-core-2.23.4.jar;C:\Users\Sohan.Dey\.m2\repository\net\bytebuddy\byte-buddy-agent\1.9.3\byte-buddy-agent-1.9.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\objenesis\objenesis\2.6\objenesis-2.6.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-websubclient-api\1.2.0.1-SNAPSHOT\kernel-websubclient-api-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-aspects\5.0.6.RELEASE\spring-aspects-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\aspectj\aspectjweaver\1.8.13\aspectjweaver-1.8.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\owasp\encoder\encoder\1.2.3\encoder-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-actuator\2.0.2.RELEASE\spring-boot-starter-actuator-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-actuator-autoconfigure\2.0.2.RELEASE\spring-boot-actuator-autoconfigure-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-actuator\2.0.2.RELEASE\spring-boot-actuator-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\tensorflow\tensorflow\1.12.0\tensorflow-1.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\tensorflow\libtensorflow\1.12.0\libtensorflow-1.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\tensorflow\libtensorflow_jni\1.12.0\libtensorflow_jni-1.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-templatemanager-velocity\1.2.0.1-SNAPSHOT\kernel-templatemanager-velocity-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\javax\servlet\javax.servlet-api\4.0.1\javax.servlet-api-4.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-starter-config\2.0.0.RELEASE\spring-cloud-starter-config-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-starter\2.0.0.RELEASE\spring-cloud-starter-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-context\2.0.0.RELEASE\spring-cloud-context-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-crypto\5.0.6.RELEASE\spring-security-crypto-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-commons\2.0.0.RELEASE\spring-cloud-commons-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-rsa\1.0.5.RELEASE\spring-security-rsa-1.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-config-client\2.0.0.RELEASE\spring-cloud-config-client-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\jai-imageio\jai-imageio-jpeg2000\1.3.0\jai-imageio-jpeg2000-1.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\jai-imageio\jai-imageio-core\1.3.0\jai-imageio-core-1.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-keymanager-service\1.2.0.1-SNAPSHOT\kernel-keymanager-service-1.2.0.1-SNAPSHOT-lib.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-test\5.0.5.RELEASE\spring-security-test-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-core\5.0.5.RELEASE\spring-security-core-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-pdfgenerator-itext\1.2.0.1-SNAPSHOT\kernel-pdfgenerator-itext-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\barcodes\7.1.0\barcodes-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\font-asian\7.1.0\font-asian-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\hyph\7.1.0\hyph-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\pdfa\7.1.0\pdfa-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\sign\7.1.0\sign-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\tool\xmlworker\5.5.13\xmlworker-5.5.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\bouncycastle\bcpkix-jdk15on\1.66\bcpkix-jdk15on-1.66.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-data-jpa\2.0.2.RELEASE\spring-boot-starter-data-jpa-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\2.0.2.RELEASE\spring-boot-starter-jdbc-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\zaxxer\HikariCP\2.7.9\HikariCP-2.7.9.jar;C:\Users\Sohan.Dey\.m2\repository\com\h2database\h2\1.4.197\h2-1.4.197.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\microsoft\TSS.Java\0.3.0\TSS.Java-0.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\net\java\dev\jna\jna\4.4.0\jna-4.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\cache2k\cache2k-api\2.4.1.Final\cache2k-api-2.4.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\cache2k\cache2k-core\2.4.1.Final\cache2k-core-2.4.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\nimbusds\nimbus-jose-jwt\9.14\nimbus-jose-jwt-9.14.jar;C:\Users\Sohan.Dey\.m2\repository\io\projectreactor\reactor-core\3.1.7.RELEASE\reactor-core-3.1.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-core\1.2.0.1-B1\kernel-core-1.2.0.1-B1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter\2.0.2.RELEASE\spring-boot-starter-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot\2.0.2.RELEASE\spring-boot-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.0.2.RELEASE\spring-boot-autoconfigure-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.0.2.RELEASE\spring-boot-starter-logging-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.10.0\log4j-to-slf4j-2.10.0.jar;C:\Users\Sohan.Dey\.m2\repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\data\spring-data-jpa\2.0.7.RELEASE\spring-data-jpa-2.0.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\data\spring-data-commons\2.0.7.RELEASE\spring-data-commons-2.0.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-orm\5.0.6.RELEASE\spring-orm-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-jdbc\5.0.6.RELEASE\spring-jdbc-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-context\5.0.6.RELEASE\spring-context-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-aop\5.0.6.RELEASE\spring-aop-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-tx\5.0.6.RELEASE\spring-tx-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-beans\5.0.6.RELEASE\spring-beans-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\aspectj\aspectjrt\1.8.12\aspectjrt-1.8.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-security\2.0.2.RELEASE\spring-boot-starter-security-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-config\5.0.5.RELEASE\spring-security-config-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-web\5.0.5.RELEASE\spring-security-web-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\javax\transaction\javax.transaction-api\1.3\javax.transaction-api-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-math3\3.6.1\commons-math3-3.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\javax\interceptor\javax.interceptor-api\1.2\javax.interceptor-api-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\code\findbugs\annotations\3.0.1\annotations-3.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\net\jcip\jcip-annotations\1.0\jcip-annotations-1.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\swagger-models\1.5.21\swagger-models-1.5.21.jar;C:\Users\Sohan.Dey\.m2\repository\com\auth0\java-jwt\3.8.1\java-jwt-3.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\micrometer\micrometer-core\1.4.2\micrometer-core-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\hdrhistogram\HdrHistogram\2.1.12\HdrHistogram-2.1.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\latencyutils\LatencyUtils\2.0.3\LatencyUtils-2.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\micrometer\micrometer-registry-prometheus\1.4.2\micrometer-registry-prometheus-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\prometheus\simpleclient_common\0.8.1\simpleclient_common-0.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\prometheus\simpleclient\0.8.1\simpleclient-0.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\jul-to-slf4j\1.7.25\jul-to-slf4j-1.7.25.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\jcl-over-slf4j\1.7.25\jcl-over-slf4j-1.7.25.jar;C:\Users\Sohan.Dey\.m2\repository\javax\activation\activation\1.1\activation-1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-starter-sleuth\2.0.4.RELEASE\spring-cloud-starter-sleuth-2.0.4.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-aop\2.0.9.RELEASE\spring-boot-starter-aop-2.0.9.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-sleuth-core\2.0.4.RELEASE\spring-cloud-sleuth-core-2.0.4.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave\5.6.1\brave-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\zipkin2\zipkin\2.12.0\zipkin-2.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\reporter2\zipkin-reporter\2.7.14\zipkin-reporter-2.7.14.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-context-log4j2\5.6.1\brave-context-log4j2-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-spring-web\5.6.1\brave-instrumentation-spring-web-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-http\5.6.1\brave-instrumentation-http-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-spring-rabbit\5.6.1\brave-instrumentation-spring-rabbit-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-kafka-clients\5.6.1\brave-instrumentation-kafka-clients-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-httpclient\5.6.1\brave-instrumentation-httpclient-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-httpasyncclient\5.6.1\brave-instrumentation-httpasyncclient-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-spring-webmvc\5.6.1\brave-instrumentation-spring-webmvc-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-servlet\5.6.1\brave-instrumentation-servlet-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\8.5.55\tomcat-embed-core-8.5.55.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\tomcat-annotations-api\8.5.55\tomcat-annotations-api-8.5.55.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\retry\spring-retry\1.2.1.RELEASE\spring-retry-1.2.1.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\module\jackson-module-afterburner\2.12.0\jackson-module-afterburner-2.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-registration-packet-manager\1.1.5.3\kernel-registration-packet-manager-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-keygenerator-bouncycastle\1.1.5.3\kernel-keygenerator-bouncycastle-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-cbeffutil-api\1.1.5.3\kernel-cbeffutil-api-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-logger-logback\1.1.5.3\kernel-logger-logback-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\net\logstash\logback\logstash-logback-encoder\6.4\logstash-logback-encoder-6.4.jar;C:\Users\Sohan.Dey\.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\ch\qos\logback\logback-access\1.2.3\logback-access-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-crypto-jce\1.1.5.3\kernel-crypto-jce-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\bitbucket\b_c\jose4j\0.6.5\jose4j-0.6.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\wink\wink-json4j-provider\1.1.2-incubating\wink-json4j-provider-1.1.2-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\wink\wink-common\1.1.2-incubating\wink-common-1.1.2-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\xml\bind\jaxb-impl\2.2.1.1\jaxb-impl-2.2.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\geronimo\specs\geronimo-annotation_1.1_spec\1.0\geronimo-annotation_1.1_spec-1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\wink\wink-json4j\1.1.2-incubating\wink-json4j-1.1.2-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\javax\ws\rs\jsr311-api\1.1.1\jsr311-api-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\checkerframework\checker-qual\2.9.0\checker-qual-2.9.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\activemq\activemq-broker\5.15.9\activemq-broker-5.15.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\activemq\activemq-client\5.15.9\activemq-client-5.15.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\geronimo\specs\geronimo-jms_1.1_spec\1.1.1\geronimo-jms_1.1_spec-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\fusesource\hawtbuf\hawtbuf\1.11\hawtbuf-1.11.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\geronimo\specs\geronimo-j2ee-management_1.1_spec\1.0.1\geronimo-j2ee-management_1.1_spec-1.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\activemq\activemq-openwire-legacy\5.15.9\activemq-openwire-legacy-5.15.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\projectlombok\lombok\1.18.8\lombok-1.18.8.jar \ No newline at end of file diff --git a/api-test/.temp-New_configuration (1)-classpath-arg-1658840665646.txt b/api-test/.temp-New_configuration (1)-classpath-arg-1658840665646.txt deleted file mode 100644 index 1aa22a4a9..000000000 --- a/api-test/.temp-New_configuration (1)-classpath-arg-1658840665646.txt +++ /dev/null @@ -1 +0,0 @@ --classpath D:\Mosip_Automation_Test\Docker_Test\mosip-functional-tests\automationtests\target\test-classes;D:\Mosip_Automation_Test\Docker_Test\mosip-functional-tests\automationtests\target\classes;C:\Users\Sohan.Dey\.m2\repository\com\opencsv\opencsv\4.1\opencsv-4.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-lang3\3.6\commons-lang3-3.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-text\1.1\commons-text-1.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\ibm\icu\icu4j\63.1\icu4j-63.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\keycloak\keycloak-admin-client\17.0.1\keycloak-admin-client-17.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\keycloak\keycloak-core\17.0.1\keycloak-core-17.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\keycloak\keycloak-common\17.0.1\keycloak-common-17.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-client\3.13.2.Final\resteasy-client-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\ws\rs\jboss-jaxrs-api_2.1_spec\2.0.1.Final\jboss-jaxrs-api_2.1_spec-2.0.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-jaxrs\3.13.2.Final\resteasy-jaxrs-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\reactivestreams\reactive-streams\1.0.3\reactive-streams-1.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\jakarta\validation\jakarta.validation-api\2.0.2\jakarta.validation-api-2.0.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\annotation\jboss-annotations-api_1.3_spec\2.0.1.Final\jboss-annotations-api_1.3_spec-2.0.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\activation\jakarta.activation\1.2.1\jakarta.activation-1.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\stephenc\jcip\jcip-annotations\1.0-1\jcip-annotations-1.0-1.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-multipart-provider\3.13.2.Final\resteasy-multipart-provider-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\mail\jakarta.mail\1.6.5\jakarta.mail-1.6.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\james\apache-mime4j\0.6\apache-mime4j-0.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-jackson2-provider\3.13.2.Final\resteasy-jackson2-provider-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\jaxrs\jackson-jaxrs-json-provider\2.10.5\jackson-jaxrs-json-provider-2.10.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\jaxrs\jackson-jaxrs-base\2.10.5\jackson-jaxrs-base-2.10.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\json-patch\1.9\json-patch-1.9.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\jackson-coreutils\1.6\jackson-coreutils-1.6.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\msg-simple\1.1\msg-simple-1.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\fge\btf\1.2\btf-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\resteasy\resteasy-jaxb-provider\3.13.2.Final\resteasy-jaxb-provider-3.13.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\xml\bind\jboss-jaxb-api_2.3_spec\2.0.0.Final\jboss-jaxb-api_2.3_spec-2.0.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\javassist\javassist\3.25.0-GA\javassist-3.25.0-GA.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\jknack\handlebars\3.0.0\handlebars-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\antlr\antlr4-runtime\4.5.1-1\antlr4-runtime-4.5.1-1.jar;C:\Users\Sohan.Dey\.m2\repository\org\mozilla\rhino\1.7R4\rhino-1.7R4.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\slf4j-api\1.6.4\slf4j-api-1.6.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-collections4\4.3\commons-collections4-4.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\jsonwebtoken\jjwt\0.6.0\jjwt-0.6.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\flipkart\zjsonpatch\zjsonpatch\0.4.7\zjsonpatch-0.4.7.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk\1.11.368\aws-java-sdk-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dlm\1.11.368\aws-java-sdk-dlm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\jmespath-java\1.11.368\jmespath-java-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-macie\1.11.368\aws-java-sdk-macie-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-eks\1.11.368\aws-java-sdk-eks-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediatailor\1.11.368\aws-java-sdk-mediatailor-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-neptune\1.11.368\aws-java-sdk-neptune-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-pi\1.11.368\aws-java-sdk-pi-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iot1clickprojects\1.11.368\aws-java-sdk-iot1clickprojects-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iot1clickdevices\1.11.368\aws-java-sdk-iot1clickdevices-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iotanalytics\1.11.368\aws-java-sdk-iotanalytics-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-acmpca\1.11.368\aws-java-sdk-acmpca-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-secretsmanager\1.11.368\aws-java-sdk-secretsmanager-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-fms\1.11.368\aws-java-sdk-fms-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-connect\1.11.368\aws-java-sdk-connect-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-transcribe\1.11.368\aws-java-sdk-transcribe-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-autoscalingplans\1.11.368\aws-java-sdk-autoscalingplans-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-workmail\1.11.368\aws-java-sdk-workmail-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-servicediscovery\1.11.368\aws-java-sdk-servicediscovery-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloud9\1.11.368\aws-java-sdk-cloud9-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-serverlessapplicationrepository\1.11.368\aws-java-sdk-serverlessapplicationrepository-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-alexaforbusiness\1.11.368\aws-java-sdk-alexaforbusiness-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-resourcegroups\1.11.368\aws-java-sdk-resourcegroups-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-comprehend\1.11.368\aws-java-sdk-comprehend-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-translate\1.11.368\aws-java-sdk-translate-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sagemaker\1.11.368\aws-java-sdk-sagemaker-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iotjobsdataplane\1.11.368\aws-java-sdk-iotjobsdataplane-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sagemakerruntime\1.11.368\aws-java-sdk-sagemakerruntime-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-kinesisvideo\1.11.368\aws-java-sdk-kinesisvideo-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-codec-http\4.1.17.Final\netty-codec-http-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-codec\4.1.17.Final\netty-codec-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-handler\4.1.17.Final\netty-handler-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-buffer\4.1.17.Final\netty-buffer-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-common\4.1.17.Final\netty-common-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-transport\4.1.17.Final\netty-transport-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-resolver\4.1.17.Final\netty-resolver-4.1.17.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-appsync\1.11.368\aws-java-sdk-appsync-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-guardduty\1.11.368\aws-java-sdk-guardduty-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mq\1.11.368\aws-java-sdk-mq-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediaconvert\1.11.368\aws-java-sdk-mediaconvert-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediastore\1.11.368\aws-java-sdk-mediastore-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediastoredata\1.11.368\aws-java-sdk-mediastoredata-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-medialive\1.11.368\aws-java-sdk-medialive-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mediapackage\1.11.368\aws-java-sdk-mediapackage-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-costexplorer\1.11.368\aws-java-sdk-costexplorer-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-pricing\1.11.368\aws-java-sdk-pricing-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mobile\1.11.368\aws-java-sdk-mobile-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudhsmv2\1.11.368\aws-java-sdk-cloudhsmv2-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-glue\1.11.368\aws-java-sdk-glue-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-migrationhub\1.11.368\aws-java-sdk-migrationhub-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dax\1.11.368\aws-java-sdk-dax-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-greengrass\1.11.368\aws-java-sdk-greengrass-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-athena\1.11.368\aws-java-sdk-athena-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-marketplaceentitlement\1.11.368\aws-java-sdk-marketplaceentitlement-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codestar\1.11.368\aws-java-sdk-codestar-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lexmodelbuilding\1.11.368\aws-java-sdk-lexmodelbuilding-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-resourcegroupstaggingapi\1.11.368\aws-java-sdk-resourcegroupstaggingapi-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-pinpoint\1.11.368\aws-java-sdk-pinpoint-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-xray\1.11.368\aws-java-sdk-xray-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-opsworkscm\1.11.368\aws-java-sdk-opsworkscm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-support\1.11.368\aws-java-sdk-support-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-simpledb\1.11.368\aws-java-sdk-simpledb-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-servicecatalog\1.11.368\aws-java-sdk-servicecatalog-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-servermigration\1.11.368\aws-java-sdk-servermigration-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-simpleworkflow\1.11.368\aws-java-sdk-simpleworkflow-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-storagegateway\1.11.368\aws-java-sdk-storagegateway-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-route53\1.11.368\aws-java-sdk-route53-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-s3\1.11.368\aws-java-sdk-s3-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-importexport\1.11.368\aws-java-sdk-importexport-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sts\1.11.368\aws-java-sdk-sts-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sqs\1.11.368\aws-java-sdk-sqs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-rds\1.11.368\aws-java-sdk-rds-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-redshift\1.11.368\aws-java-sdk-redshift-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticbeanstalk\1.11.368\aws-java-sdk-elasticbeanstalk-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-glacier\1.11.368\aws-java-sdk-glacier-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iam\1.11.368\aws-java-sdk-iam-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-datapipeline\1.11.368\aws-java-sdk-datapipeline-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticloadbalancing\1.11.368\aws-java-sdk-elasticloadbalancing-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticloadbalancingv2\1.11.368\aws-java-sdk-elasticloadbalancingv2-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-emr\1.11.368\aws-java-sdk-emr-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticache\1.11.368\aws-java-sdk-elasticache-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elastictranscoder\1.11.368\aws-java-sdk-elastictranscoder-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ec2\1.11.368\aws-java-sdk-ec2-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dynamodb\1.11.368\aws-java-sdk-dynamodb-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-sns\1.11.368\aws-java-sdk-sns-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-budgets\1.11.368\aws-java-sdk-budgets-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudtrail\1.11.368\aws-java-sdk-cloudtrail-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudwatch\1.11.368\aws-java-sdk-cloudwatch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-logs\1.11.368\aws-java-sdk-logs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-events\1.11.368\aws-java-sdk-events-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cognitoidentity\1.11.368\aws-java-sdk-cognitoidentity-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cognitosync\1.11.368\aws-java-sdk-cognitosync-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-directconnect\1.11.368\aws-java-sdk-directconnect-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudformation\1.11.368\aws-java-sdk-cloudformation-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudfront\1.11.368\aws-java-sdk-cloudfront-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-clouddirectory\1.11.368\aws-java-sdk-clouddirectory-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-kinesis\1.11.368\aws-java-sdk-kinesis-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-opsworks\1.11.368\aws-java-sdk-opsworks-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ses\1.11.368\aws-java-sdk-ses-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-autoscaling\1.11.368\aws-java-sdk-autoscaling-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudsearch\1.11.368\aws-java-sdk-cloudsearch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudwatchmetrics\1.11.368\aws-java-sdk-cloudwatchmetrics-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codedeploy\1.11.368\aws-java-sdk-codedeploy-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codepipeline\1.11.368\aws-java-sdk-codepipeline-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-kms\1.11.368\aws-java-sdk-kms-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-config\1.11.368\aws-java-sdk-config-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lambda\1.11.368\aws-java-sdk-lambda-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ecs\1.11.368\aws-java-sdk-ecs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ecr\1.11.368\aws-java-sdk-ecr-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cloudhsm\1.11.368\aws-java-sdk-cloudhsm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-ssm\1.11.368\aws-java-sdk-ssm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-workspaces\1.11.368\aws-java-sdk-workspaces-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-machinelearning\1.11.368\aws-java-sdk-machinelearning-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-directory\1.11.368\aws-java-sdk-directory-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-efs\1.11.368\aws-java-sdk-efs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codecommit\1.11.368\aws-java-sdk-codecommit-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-devicefarm\1.11.368\aws-java-sdk-devicefarm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-elasticsearch\1.11.368\aws-java-sdk-elasticsearch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-waf\1.11.368\aws-java-sdk-waf-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-marketplacecommerceanalytics\1.11.368\aws-java-sdk-marketplacecommerceanalytics-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-inspector\1.11.368\aws-java-sdk-inspector-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-iot\1.11.368\aws-java-sdk-iot-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-api-gateway\1.11.368\aws-java-sdk-api-gateway-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-acm\1.11.368\aws-java-sdk-acm-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-gamelift\1.11.368\aws-java-sdk-gamelift-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-dms\1.11.368\aws-java-sdk-dms-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-marketplacemeteringservice\1.11.368\aws-java-sdk-marketplacemeteringservice-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-cognitoidp\1.11.368\aws-java-sdk-cognitoidp-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-discovery\1.11.368\aws-java-sdk-discovery-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-applicationautoscaling\1.11.368\aws-java-sdk-applicationautoscaling-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-snowball\1.11.368\aws-java-sdk-snowball-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-rekognition\1.11.368\aws-java-sdk-rekognition-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-polly\1.11.368\aws-java-sdk-polly-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lightsail\1.11.368\aws-java-sdk-lightsail-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-stepfunctions\1.11.368\aws-java-sdk-stepfunctions-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-health\1.11.368\aws-java-sdk-health-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-costandusagereport\1.11.368\aws-java-sdk-costandusagereport-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-codebuild\1.11.368\aws-java-sdk-codebuild-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-appstream\1.11.368\aws-java-sdk-appstream-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-shield\1.11.368\aws-java-sdk-shield-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-batch\1.11.368\aws-java-sdk-batch-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-lex\1.11.368\aws-java-sdk-lex-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-mechanicalturkrequester\1.11.368\aws-java-sdk-mechanicalturkrequester-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-organizations\1.11.368\aws-java-sdk-organizations-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-workdocs\1.11.368\aws-java-sdk-workdocs-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-core\1.11.368\aws-java-sdk-core-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\software\amazon\ion\ion-java\1.0.2\ion-java-1.0.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-cbor\2.6.7\jackson-dataformat-cbor-2.6.7.jar;C:\Users\Sohan.Dey\.m2\repository\joda-time\joda-time\2.8.1\joda-time-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-models\1.11.368\aws-java-sdk-models-1.11.368.jar;C:\Users\Sohan.Dey\.m2\repository\com\amazonaws\aws-java-sdk-swf-libraries\1.11.22\aws-java-sdk-swf-libraries-1.11.22.jar;C:\Users\Sohan.Dey\.m2\repository\com\aventstack\extentreports\3.0.0\extentreports-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\freemarker\freemarker\2.3.23\freemarker-2.3.23.jar;C:\Users\Sohan.Dey\.m2\repository\org\mongodb\mongodb-driver\3.3.0\mongodb-driver-3.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\mongodb\bson\3.3.0\bson-3.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\mongodb\mongodb-driver-core\3.3.0\mongodb-driver-core-3.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\httpcomponents\httpmime\4.5.2\httpmime-4.5.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\relevantcodes\extentreports\2.41.2\extentreports-2.41.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\jsoup\jsoup\1.8.3\jsoup-1.8.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\xerial\sqlite-jdbc\3.8.11.1\sqlite-jdbc-3.8.11.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\jayway\jsonpath\json-path\2.4.0\json-path-2.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\net\minidev\json-smart\2.3\json-smart-2.3.jar;C:\Users\Sohan.Dey\.m2\repository\net\minidev\accessors-smart\1.2\accessors-smart-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\ow2\asm\asm\5.0.4\asm-5.0.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-model\3.3.9\maven-model-3.3.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-utils\3.0.22\plexus-utils-3.0.22.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\rest-assured\3.0.7\rest-assured-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\groovy\groovy\2.4.12\groovy-2.4.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\groovy\groovy-xml\2.4.12\groovy-xml-2.4.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\hamcrest\hamcrest-library\1.3\hamcrest-library-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\ccil\cowan\tagsoup\tagsoup\1.2.1\tagsoup-1.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\json-path\3.0.7\json-path-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\groovy\groovy-json\2.4.12\groovy-json-2.4.12.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\rest-assured-common\3.0.7\rest-assured-common-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\io\rest-assured\xml-path\3.0.7\xml-path-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\testng\testng\6.11\testng-6.11.jar;C:\Users\Sohan.Dey\.m2\repository\com\beust\jcommander\1.64\jcommander-1.64.jar;C:\Users\Sohan.Dey\.m2\repository\org\yaml\snakeyaml\1.17\snakeyaml-1.17.jar;C:\Users\Sohan.Dey\.m2\repository\org\zeroturnaround\zt-zip\1.13\zt-zip-1.13.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.10.1\jackson-core-2.10.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.9.5\jackson-annotations-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.10.5\jackson-databind-2.10.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-xml\2.9.5\jackson-dataformat-xml-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\module\jackson-module-jaxb-annotations\2.9.5\jackson-module-jaxb-annotations-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\woodstox\stax2-api\3.1.4\stax2-api-3.1.4.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\woodstox\woodstox-core\5.0.3\woodstox-core-5.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\json\json\20180130\json-20180130.jar;C:\Users\Sohan.Dey\.m2\repository\com\googlecode\json-simple\json-simple\1.1.1\json-simple-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\junit\junit\4.10\junit-4.10.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\code\gson\gson\2.8.4\gson-2.8.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\plugins\maven-assembly-plugin\3.1.0\maven-assembly-plugin-3.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-plugin-api\3.0\maven-plugin-api-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\sisu\sisu-inject-plexus\1.4.2\sisu-inject-plexus-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\sisu\sisu-inject-bean\1.4.2\sisu-inject-bean-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\sisu\sisu-guice\2.1.7\sisu-guice-2.1.7-noaop.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-core\3.0\maven-core-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-settings\3.0\maven-settings-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-settings-builder\3.0\maven-settings-builder-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-repository-metadata\3.0\maven-repository-metadata-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-model-builder\3.0\maven-model-builder-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-aether-provider\3.0\maven-aether-provider-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-impl\1.7\aether-impl-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-spi\1.7\aether-spi-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-api\1.7\aether-api-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\aether\aether-util\1.7\aether-util-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-classworlds\2.2.3\plexus-classworlds-2.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-component-annotations\1.5.5\plexus-component-annotations-1.5.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\plexus\plexus-sec-dispatcher\1.3\plexus-sec-dispatcher-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\plexus\plexus-cipher\1.4\plexus-cipher-1.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-artifact\3.0\maven-artifact-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-common-artifact-filters\3.0.1\maven-common-artifact-filters-3.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-shared-utils\3.1.0\maven-shared-utils-3.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-artifact-transfer\0.9.0\maven-artifact-transfer-0.9.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-interpolation\1.24\plexus-interpolation-1.24.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-archiver\3.5\plexus-archiver-3.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-compress\1.14\commons-compress-1.14.jar;C:\Users\Sohan.Dey\.m2\repository\org\iq80\snappy\snappy\0.4\snappy-0.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\tukaani\xz\1.6\xz-1.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\file-management\3.0.0\file-management-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-shared-io\3.0.0\maven-shared-io-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-compat\3.0\maven-compat-3.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\wagon\wagon-provider-api\2.10\wagon-provider-api-2.10.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\shared\maven-filtering\3.1.1\maven-filtering-3.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\sonatype\plexus\plexus-build-api\0.0.7\plexus-build-api-0.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\plexus\plexus-io\3.0.0\plexus-io-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\maven\maven-archiver\3.2.0\maven-archiver-3.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\guava\guava\19.0\guava-19.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\hibernate\hibernate-core\5.4.2.Final\hibernate-core-5.4.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;C:\Users\Sohan.Dey\.m2\repository\javax\persistence\javax.persistence-api\2.2\javax.persistence-api-2.2.jar;C:\Users\Sohan.Dey\.m2\repository\net\bytebuddy\byte-buddy\1.9.10\byte-buddy-1.9.10.jar;C:\Users\Sohan.Dey\.m2\repository\antlr\antlr\2.7.7\antlr-2.7.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\spec\javax\transaction\jboss-transaction-api_1.2_spec\1.1.1.Final\jboss-transaction-api_1.2_spec-1.1.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\jboss\jandex\2.0.5.Final\jandex-2.0.5.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\classmate\1.3.4\classmate-1.3.4.jar;C:\Users\Sohan.Dey\.m2\repository\javax\activation\javax.activation-api\1.2.0\javax.activation-api-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\dom4j\dom4j\2.1.1\dom4j-2.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\hibernate\common\hibernate-commons-annotations\5.1.0.Final\hibernate-commons-annotations-5.1.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\javax\xml\bind\jaxb-api\2.3.1\jaxb-api-2.3.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\glassfish\jaxb\jaxb-runtime\2.3.1\jaxb-runtime-2.3.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\glassfish\jaxb\txw2\2.3.1\txw2-2.3.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\istack\istack-commons-runtime\3.0.7\istack-commons-runtime-3.0.7.jar;C:\Users\Sohan.Dey\.m2\repository\org\jvnet\staxex\stax-ex\1.8\stax-ex-1.8.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\xml\fastinfoset\FastInfoset\1.2.15\FastInfoset-1.2.15.jar;C:\Users\Sohan.Dey\.m2\repository\commons-beanutils\commons-beanutils\1.9.2\commons-beanutils-1.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\commons-logging\commons-logging\1.1.1\commons-logging-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\commons-collections\commons-collections\3.2.1\commons-collections-3.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\swagger-annotations\1.5.20\swagger-annotations-1.5.20.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.5\jackson-datatype-jsr310-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\postgresql\postgresql\42.2.2\postgresql-42.2.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\slf4j-log4j12\1.6.2\slf4j-log4j12-1.6.2.jar;C:\Users\Sohan.Dey\.m2\repository\log4j\log4j\1.2.16\log4j-1.2.16.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\logging\log4j\log4j-api\2.11.1\log4j-api-2.11.1.jar;C:\Users\Sohan.Dey\.m2\repository\net\lingala\zip4j\zip4j\1.3.2\zip4j-1.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\httpcomponents\httpclient\4.5.3\httpclient-4.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\httpcomponents\httpcore\4.4.6\httpcore-4.4.6.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-client\2.8.1\hadoop-client-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-common\2.8.1\hadoop-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\commons-cli\commons-cli\1.2\commons-cli-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\xmlenc\xmlenc\0.52\xmlenc-0.52.jar;C:\Users\Sohan.Dey\.m2\repository\commons-net\commons-net\3.1\commons-net-3.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\mortbay\jetty\jetty-sslengine\6.1.26\jetty-sslengine-6.1.26.jar;C:\Users\Sohan.Dey\.m2\repository\javax\servlet\jsp\jsp-api\2.1\jsp-api-2.1.jar;C:\Users\Sohan.Dey\.m2\repository\commons-configuration\commons-configuration\1.6\commons-configuration-1.6.jar;C:\Users\Sohan.Dey\.m2\repository\commons-digester\commons-digester\1.8\commons-digester-1.8.jar;C:\Users\Sohan.Dey\.m2\repository\commons-beanutils\commons-beanutils-core\1.8.0\commons-beanutils-core-1.8.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-core-asl\1.9.13\jackson-core-asl-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-mapper-asl\1.9.13\jackson-mapper-asl-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\avro\avro\1.7.4\avro-1.7.4.jar;C:\Users\Sohan.Dey\.m2\repository\com\thoughtworks\paranamer\paranamer\2.3\paranamer-2.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\xerial\snappy\snappy-java\1.0.4.1\snappy-java-1.0.4.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\protobuf\protobuf-java\2.5.0\protobuf-java-2.5.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-auth\2.8.1\hadoop-auth-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\server\apacheds-kerberos-codec\2.0.0-M15\apacheds-kerberos-codec-2.0.0-M15.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\server\apacheds-i18n\2.0.0-M15\apacheds-i18n-2.0.0-M15.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\api\api-asn1-api\1.0.0-M20\api-asn1-api-1.0.0-M20.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\directory\api\api-util\1.0.0-M20\api-util-1.0.0-M20.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\curator\curator-framework\2.7.1\curator-framework-2.7.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\curator\curator-client\2.7.1\curator-client-2.7.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\curator\curator-recipes\2.7.1\curator-recipes-2.7.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\code\findbugs\jsr305\3.0.0\jsr305-3.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\htrace\htrace-core4\4.0.1-incubating\htrace-core4-4.0.1-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\zookeeper\zookeeper\3.4.6\zookeeper-3.4.6.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty\3.7.0.Final\netty-3.7.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-hdfs\2.8.1\hadoop-hdfs-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-hdfs-client\2.8.1\hadoop-hdfs-client-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\squareup\okhttp\okhttp\2.4.0\okhttp-2.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\squareup\okio\okio\1.4.0\okio-1.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-app\2.8.1\hadoop-mapreduce-client-app-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-common\2.8.1\hadoop-mapreduce-client-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-client\2.8.1\hadoop-yarn-client-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-server-common\2.8.1\hadoop-yarn-server-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-shuffle\2.8.1\hadoop-mapreduce-client-shuffle-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\fusesource\leveldbjni\leveldbjni-all\1.8\leveldbjni-all-1.8.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-api\2.8.1\hadoop-yarn-api-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-core\2.8.1\hadoop-mapreduce-client-core-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-yarn-common\2.8.1\hadoop-yarn-common-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\javax\servlet\servlet-api\2.5\servlet-api-2.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\mortbay\jetty\jetty-util\6.1.26\jetty-util-6.1.26.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\jersey\jersey-core\1.9\jersey-core-1.9.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\jersey\jersey-client\1.9\jersey-client-1.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-jaxrs\1.9.13\jackson-jaxrs-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\codehaus\jackson\jackson-xc\1.9.13\jackson-xc-1.9.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-mapreduce-client-jobclient\2.8.1\hadoop-mapreduce-client-jobclient-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\hadoop\hadoop-annotations\2.8.1\hadoop-annotations-2.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\bouncycastle\bcprov-jdk16\1.45\bcprov-jdk16-1.45.jar;C:\Users\Sohan.Dey\.m2\repository\commons-codec\commons-codec\1.11\commons-codec-1.11.jar;C:\Users\Sohan.Dey\.m2\repository\commons-io\commons-io\2.6\commons-io-2.6.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\zxing\core\3.3.3\core-3.3.3.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\zxing\javase\2.0\javase-2.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\hamcrest\hamcrest-all\1.3\hamcrest-all-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\velocity\velocity\1.7\velocity-1.7.jar;C:\Users\Sohan.Dey\.m2\repository\commons-lang\commons-lang\2.4\commons-lang-2.4.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\html2pdf\2.0.0\html2pdf-2.0.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\forms\7.1.0\forms-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\kernel\7.1.0\kernel-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\io\7.1.0\io-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\layout\7.1.0\layout-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\itextpdf\5.5.13\itextpdf-5.5.13.jar;C:\Users\Sohan.Dey\.m2\repository\javax\mail\javax.mail-api\1.6.2\javax.mail-api-1.6.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\authentication\authentication-demo-service\1.2.0.1-SNAPSHOT\authentication-demo-service-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.0.2.RELEASE\spring-boot-starter-web-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-json\2.0.2.RELEASE\spring-boot-starter-json-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.5\jackson-datatype-jdk8-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.5\jackson-module-parameter-names-2.9.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\2.0.2.RELEASE\spring-boot-starter-tomcat-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\8.5.31\tomcat-embed-el-8.5.31.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\8.5.31\tomcat-embed-websocket-8.5.31.jar;C:\Users\Sohan.Dey\.m2\repository\org\hibernate\validator\hibernate-validator\6.0.9.Final\hibernate-validator-6.0.9.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-web\5.0.6.RELEASE\spring-web-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-webmvc\5.0.6.RELEASE\spring-webmvc-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-expression\5.0.6.RELEASE\spring-expression-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-test\2.0.2.RELEASE\spring-boot-starter-test-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-test\2.0.2.RELEASE\spring-boot-test-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-test-autoconfigure\2.0.2.RELEASE\spring-boot-test-autoconfigure-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\assertj\assertj-core\3.9.1\assertj-core-3.9.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\skyscreamer\jsonassert\1.5.0\jsonassert-1.5.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-core\5.0.6.RELEASE\spring-core-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-jcl\5.0.6.RELEASE\spring-jcl-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-test\5.0.6.RELEASE\spring-test-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\xmlunit\xmlunit-core\2.5.1\xmlunit-core-2.5.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-swagger-ui\2.9.2\springfox-swagger-ui-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-spring-web\2.9.2\springfox-spring-web-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-swagger2\2.9.2\springfox-swagger2-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-spi\2.9.2\springfox-spi-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-core\2.9.2\springfox-core-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-schema\2.9.2\springfox-schema-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\springfox\springfox-swagger-common\2.9.2\springfox-swagger-common-2.9.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\plugin\spring-plugin-core\1.2.0.RELEASE\spring-plugin-core-1.2.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\plugin\spring-plugin-metadata\1.2.0.RELEASE\spring-plugin-metadata-1.2.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\mapstruct\mapstruct\1.2.0.Final\mapstruct-1.2.0.Final.jar;C:\Users\Sohan.Dey\.m2\repository\javax\ws\rs\javax.ws.rs-api\2.0\javax.ws.rs-api-2.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\authentication\authentication-core\1.2.0.1-SNAPSHOT\authentication-core-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-cache\2.0.2.RELEASE\spring-boot-starter-cache-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-context-support\5.0.6.RELEASE\spring-context-support-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\machinezoo\sourceafis\sourceafis\3.4.0\sourceafis-3.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\net\sf\trove4j\trove4j\3.0.3\trove4j-3.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\com\machinezoo\noexception\noexception\1.3.2\noexception-1.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\mhshams\jnbis\2.0.1\jnbis-2.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\sanselan\sanselan\0.97-incubator\sanselan-0.97-incubator.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\idrepository\id-repository-core\1.2.0\id-repository-core-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-biosdk-provider\1.2.0\kernel-biosdk-provider-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-biometrics-api\1.2.0\kernel-biometrics-api-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-demographics-api\1.2.0\kernel-demographics-api-1.2.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-webflux\2.0.2.RELEASE\spring-boot-starter-webflux-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-reactor-netty\2.0.2.RELEASE\spring-boot-starter-reactor-netty-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\projectreactor\ipc\reactor-netty\0.7.7.RELEASE\reactor-netty-0.7.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-handler-proxy\4.1.24.Final\netty-handler-proxy-4.1.24.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-codec-socks\4.1.24.Final\netty-codec-socks-4.1.24.Final.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-transport-native-epoll\4.1.24.Final\netty-transport-native-epoll-4.1.24.Final-linux-x86_64.jar;C:\Users\Sohan.Dey\.m2\repository\io\netty\netty-transport-native-unix-common\4.1.24.Final\netty-transport-native-unix-common-4.1.24.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-webflux\5.0.6.RELEASE\spring-webflux-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\projectreactor\reactor-core\3.1.7.RELEASE\reactor-core-3.1.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\synchronoss\cloud\nio-multipart-parser\1.1.0\nio-multipart-parser-1.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\synchronoss\cloud\nio-stream-storage\1.1.3\nio-stream-storage-1.1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\springdoc\springdoc-openapi-ui\1.5.10\springdoc-openapi-ui-1.5.10.jar;C:\Users\Sohan.Dey\.m2\repository\org\springdoc\springdoc-openapi-webmvc-core\1.5.10\springdoc-openapi-webmvc-core-1.5.10.jar;C:\Users\Sohan.Dey\.m2\repository\org\springdoc\springdoc-openapi-common\1.5.10\springdoc-openapi-common-1.5.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-models\2.1.10\swagger-models-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-annotations\2.1.10\swagger-annotations-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-integration\2.1.10\swagger-integration-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\core\v3\swagger-core\2.1.10\swagger-core-2.1.10.jar;C:\Users\Sohan.Dey\.m2\repository\jakarta\xml\bind\jakarta.xml.bind-api\2.3.2\jakarta.xml.bind-api-2.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\jakarta\activation\jakarta.activation-api\1.2.1\jakarta.activation-api-1.2.1.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\dataformat\jackson-dataformat-yaml\2.12.1\jackson-dataformat-yaml-2.12.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\github\classgraph\classgraph\4.8.69\classgraph-4.8.69.jar;C:\Users\Sohan.Dey\.m2\repository\org\webjars\swagger-ui\3.51.1\swagger-ui-3.51.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\webjars\webjars-locator-core\0.45\webjars-locator-core-0.45.jar;C:\Users\Sohan.Dey\.m2\repository\commons-fileupload\commons-fileupload\1.4\commons-fileupload-1.4.jar;C:\Users\Sohan.Dey\.m2\repository\org\mockito\mockito-core\2.23.4\mockito-core-2.23.4.jar;C:\Users\Sohan.Dey\.m2\repository\net\bytebuddy\byte-buddy-agent\1.9.3\byte-buddy-agent-1.9.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\objenesis\objenesis\2.6\objenesis-2.6.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-websubclient-api\1.2.0.1-SNAPSHOT\kernel-websubclient-api-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-aspects\5.0.6.RELEASE\spring-aspects-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\aspectj\aspectjweaver\1.8.13\aspectjweaver-1.8.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\owasp\encoder\encoder\1.2.3\encoder-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\tensorflow\tensorflow\1.12.0\tensorflow-1.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\tensorflow\libtensorflow\1.12.0\libtensorflow-1.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\tensorflow\libtensorflow_jni\1.12.0\libtensorflow_jni-1.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-templatemanager-velocity\1.2.0.1-SNAPSHOT\kernel-templatemanager-velocity-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\javax\servlet\javax.servlet-api\4.0.1\javax.servlet-api-4.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-starter-config\2.0.0.RELEASE\spring-cloud-starter-config-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-starter\2.0.0.RELEASE\spring-cloud-starter-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-context\2.0.0.RELEASE\spring-cloud-context-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-crypto\5.0.6.RELEASE\spring-security-crypto-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-commons\2.0.0.RELEASE\spring-cloud-commons-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-rsa\1.0.5.RELEASE\spring-security-rsa-1.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-config-client\2.0.0.RELEASE\spring-cloud-config-client-2.0.0.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\jai-imageio\jai-imageio-jpeg2000\1.3.0\jai-imageio-jpeg2000-1.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\jai-imageio\jai-imageio-core\1.3.0\jai-imageio-core-1.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-keymanager-service\1.2.0.1-SNAPSHOT\kernel-keymanager-service-1.2.0.1-SNAPSHOT-lib.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-test\5.0.5.RELEASE\spring-security-test-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-core\5.0.5.RELEASE\spring-security-core-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-pdfgenerator-itext\1.2.0.1-SNAPSHOT\kernel-pdfgenerator-itext-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\barcodes\7.1.0\barcodes-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\font-asian\7.1.0\font-asian-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\hyph\7.1.0\hyph-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\pdfa\7.1.0\pdfa-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\sign\7.1.0\sign-7.1.0.jar;C:\Users\Sohan.Dey\.m2\repository\com\itextpdf\tool\xmlworker\5.5.13\xmlworker-5.5.13.jar;C:\Users\Sohan.Dey\.m2\repository\org\bouncycastle\bcpkix-jdk15on\1.66\bcpkix-jdk15on-1.66.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-data-jpa\2.0.2.RELEASE\spring-boot-starter-data-jpa-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\2.0.2.RELEASE\spring-boot-starter-jdbc-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\zaxxer\HikariCP\2.7.9\HikariCP-2.7.9.jar;C:\Users\Sohan.Dey\.m2\repository\com\h2database\h2\1.4.197\h2-1.4.197.jar;C:\Users\Sohan.Dey\.m2\repository\com\github\microsoft\TSS.Java\0.3.0\TSS.Java-0.3.0.jar;C:\Users\Sohan.Dey\.m2\repository\net\java\dev\jna\jna\4.4.0\jna-4.4.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\cache2k\cache2k-api\2.4.1.Final\cache2k-api-2.4.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\org\cache2k\cache2k-core\2.4.1.Final\cache2k-core-2.4.1.Final.jar;C:\Users\Sohan.Dey\.m2\repository\com\nimbusds\nimbus-jose-jwt\9.14\nimbus-jose-jwt-9.14.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-core\1.2.0.1-SNAPSHOT\kernel-core-1.2.0.1-SNAPSHOT.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter\2.0.2.RELEASE\spring-boot-starter-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot\2.0.2.RELEASE\spring-boot-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.0.2.RELEASE\spring-boot-autoconfigure-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.0.2.RELEASE\spring-boot-starter-logging-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.10.0\log4j-to-slf4j-2.10.0.jar;C:\Users\Sohan.Dey\.m2\repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\data\spring-data-jpa\2.0.7.RELEASE\spring-data-jpa-2.0.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\data\spring-data-commons\2.0.7.RELEASE\spring-data-commons-2.0.7.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-orm\5.0.6.RELEASE\spring-orm-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-jdbc\5.0.6.RELEASE\spring-jdbc-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-context\5.0.6.RELEASE\spring-context-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-aop\5.0.6.RELEASE\spring-aop-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-tx\5.0.6.RELEASE\spring-tx-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\spring-beans\5.0.6.RELEASE\spring-beans-5.0.6.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\aspectj\aspectjrt\1.8.12\aspectjrt-1.8.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-security\2.0.2.RELEASE\spring-boot-starter-security-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-config\5.0.5.RELEASE\spring-security-config-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\security\spring-security-web\5.0.5.RELEASE\spring-security-web-5.0.5.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\javax\transaction\javax.transaction-api\1.3\javax.transaction-api-1.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\commons\commons-math3\3.6.1\commons-math3-3.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\bouncycastle\bcprov-jdk15on\1.66\bcprov-jdk15on-1.66.jar;C:\Users\Sohan.Dey\.m2\repository\javax\interceptor\javax.interceptor-api\1.2\javax.interceptor-api-1.2.jar;C:\Users\Sohan.Dey\.m2\repository\com\google\code\findbugs\annotations\3.0.1\annotations-3.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\net\jcip\jcip-annotations\1.0\jcip-annotations-1.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\swagger\swagger-models\1.5.21\swagger-models-1.5.21.jar;C:\Users\Sohan.Dey\.m2\repository\com\auth0\java-jwt\3.8.1\java-jwt-3.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\micrometer\micrometer-core\1.4.2\micrometer-core-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\org\hdrhistogram\HdrHistogram\2.1.12\HdrHistogram-2.1.12.jar;C:\Users\Sohan.Dey\.m2\repository\org\latencyutils\LatencyUtils\2.0.3\LatencyUtils-2.0.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\micrometer\micrometer-registry-prometheus\1.4.2\micrometer-registry-prometheus-1.4.2.jar;C:\Users\Sohan.Dey\.m2\repository\io\prometheus\simpleclient_common\0.8.1\simpleclient_common-0.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\prometheus\simpleclient\0.8.1\simpleclient-0.8.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\jul-to-slf4j\1.7.25\jul-to-slf4j-1.7.25.jar;C:\Users\Sohan.Dey\.m2\repository\org\slf4j\jcl-over-slf4j\1.7.25\jcl-over-slf4j-1.7.25.jar;C:\Users\Sohan.Dey\.m2\repository\javax\activation\activation\1.1\activation-1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-starter-sleuth\2.0.4.RELEASE\spring-cloud-starter-sleuth-2.0.4.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-aop\2.0.9.RELEASE\spring-boot-starter-aop-2.0.9.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\cloud\spring-cloud-sleuth-core\2.0.4.RELEASE\spring-cloud-sleuth-core-2.0.4.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave\5.6.1\brave-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\zipkin2\zipkin\2.12.0\zipkin-2.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\reporter2\zipkin-reporter\2.7.14\zipkin-reporter-2.7.14.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-context-log4j2\5.6.1\brave-context-log4j2-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-spring-web\5.6.1\brave-instrumentation-spring-web-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-http\5.6.1\brave-instrumentation-http-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-spring-rabbit\5.6.1\brave-instrumentation-spring-rabbit-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-kafka-clients\5.6.1\brave-instrumentation-kafka-clients-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-httpclient\5.6.1\brave-instrumentation-httpclient-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-httpasyncclient\5.6.1\brave-instrumentation-httpasyncclient-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-spring-webmvc\5.6.1\brave-instrumentation-spring-webmvc-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\io\zipkin\brave\brave-instrumentation-servlet\5.6.1\brave-instrumentation-servlet-5.6.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-starter-actuator\2.0.2.RELEASE\spring-boot-starter-actuator-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-actuator-autoconfigure\2.0.2.RELEASE\spring-boot-actuator-autoconfigure-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\boot\spring-boot-actuator\2.0.2.RELEASE\spring-boot-actuator-2.0.2.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\8.5.55\tomcat-embed-core-8.5.55.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\tomcat\tomcat-annotations-api\8.5.55\tomcat-annotations-api-8.5.55.jar;C:\Users\Sohan.Dey\.m2\repository\org\springframework\retry\spring-retry\1.2.1.RELEASE\spring-retry-1.2.1.RELEASE.jar;C:\Users\Sohan.Dey\.m2\repository\com\fasterxml\jackson\module\jackson-module-afterburner\2.12.0\jackson-module-afterburner-2.12.0.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-registration-packet-manager\1.1.5.3\kernel-registration-packet-manager-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-keygenerator-bouncycastle\1.1.5.3\kernel-keygenerator-bouncycastle-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-cbeffutil-api\1.1.5.3\kernel-cbeffutil-api-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-logger-logback\1.1.5.3\kernel-logger-logback-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\net\logstash\logback\logstash-logback-encoder\6.4\logstash-logback-encoder-6.4.jar;C:\Users\Sohan.Dey\.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\ch\qos\logback\logback-access\1.2.3\logback-access-1.2.3.jar;C:\Users\Sohan.Dey\.m2\repository\io\mosip\kernel\kernel-crypto-jce\1.1.5.3\kernel-crypto-jce-1.1.5.3.jar;C:\Users\Sohan.Dey\.m2\repository\org\bitbucket\b_c\jose4j\0.6.5\jose4j-0.6.5.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\wink\wink-json4j-provider\1.1.2-incubating\wink-json4j-provider-1.1.2-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\wink\wink-common\1.1.2-incubating\wink-common-1.1.2-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\com\sun\xml\bind\jaxb-impl\2.2.1.1\jaxb-impl-2.2.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\geronimo\specs\geronimo-annotation_1.1_spec\1.0\geronimo-annotation_1.1_spec-1.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\wink\wink-json4j\1.1.2-incubating\wink-json4j-1.1.2-incubating.jar;C:\Users\Sohan.Dey\.m2\repository\javax\ws\rs\jsr311-api\1.1.1\jsr311-api-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\checkerframework\checker-qual\2.9.0\checker-qual-2.9.0.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\activemq\activemq-broker\5.15.9\activemq-broker-5.15.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\activemq\activemq-client\5.15.9\activemq-client-5.15.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\geronimo\specs\geronimo-jms_1.1_spec\1.1.1\geronimo-jms_1.1_spec-1.1.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\fusesource\hawtbuf\hawtbuf\1.11\hawtbuf-1.11.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\geronimo\specs\geronimo-j2ee-management_1.1_spec\1.0.1\geronimo-j2ee-management_1.1_spec-1.0.1.jar;C:\Users\Sohan.Dey\.m2\repository\org\apache\activemq\activemq-openwire-legacy\5.15.9\activemq-openwire-legacy-5.15.9.jar;C:\Users\Sohan.Dey\.m2\repository\org\projectlombok\lombok\1.18.8\lombok-1.18.8.jar \ No newline at end of file diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/GetWithParamAndHeader.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/GetWithParamAndHeader.java new file mode 100644 index 000000000..e0b6151f2 --- /dev/null +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/GetWithParamAndHeader.java @@ -0,0 +1,191 @@ +package io.mosip.testrig.apirig.mimoto.testscripts; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.json.JSONObject; +import org.testng.ITest; +import org.testng.ITestContext; +import org.testng.ITestResult; +import org.testng.Reporter; +import org.testng.SkipException; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; +import org.testng.internal.BaseTestMethod; +import org.testng.internal.TestResult; + +import com.itextpdf.text.pdf.PdfReader; +import com.itextpdf.text.pdf.parser.PdfTextExtractor; + +import io.mosip.testrig.apirig.dto.OutputValidationDto; +import io.mosip.testrig.apirig.dto.TestCaseDTO; +import io.mosip.testrig.apirig.mimoto.utils.MimotoConfigManager; +import io.mosip.testrig.apirig.mimoto.utils.MimotoUtil; +import io.mosip.testrig.apirig.testrunner.HealthChecker; +import io.mosip.testrig.apirig.utils.AdminTestException; +import io.mosip.testrig.apirig.utils.AdminTestUtil; +import io.mosip.testrig.apirig.utils.AuthenticationTestException; +import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.GlobalMethods; +import io.mosip.testrig.apirig.utils.OutputValidationUtil; +import io.mosip.testrig.apirig.utils.ReportUtil; +import io.mosip.testrig.apirig.utils.SecurityXSSException; +import io.restassured.response.Response; + +public class GetWithParamAndHeader extends MimotoUtil implements ITest { + private static final Logger logger = Logger.getLogger(GetWithParamAndHeader.class); + protected String testCaseName = ""; + public Response response = null; + public String pathParams = null; + public String headers = null; + public byte[] pdf = null; + public String pdfAsText = null; + + @BeforeClass + public static void setLogLevel() { + if (MimotoConfigManager.IsDebugEnabled()) + logger.setLevel(Level.ALL); + else + logger.setLevel(Level.ERROR); + } + + /** + * get current testcaseName + */ + @Override + public String getTestName() { + return testCaseName; + } + + /** + * Data provider class provides test case list + * + * @return object of data provider + */ + @DataProvider(name = "testcaselist") + public Object[] getTestCaseList(ITestContext context) { + String ymlFile = context.getCurrentXmlTest().getLocalParameters().get("ymlFile"); + headers = context.getCurrentXmlTest().getLocalParameters().get("headers"); + pathParams = context.getCurrentXmlTest().getLocalParameters().get("pathParams"); + logger.info("Started executing yml: " + ymlFile); + return getYmlTestData(ymlFile); + } + + /** + * Test method for OTP Generation execution + * + * @param objTestParameters + * @param testScenario + * @param testcaseName + * @throws AuthenticationTestException + * @throws AdminTestException + */ + @Test(dataProvider = "testcaselist") + public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException, SecurityXSSException { + testCaseName = testCaseDTO.getTestCaseName(); + testCaseDTO = MimotoUtil.isTestCaseValidForTheExecution(testCaseDTO); + testCaseDTO = MimotoUtil.changeContextURLByFlag(testCaseDTO); + if (HealthChecker.signalTerminateExecution) { + throw new SkipException( + GlobalConstants.TARGET_ENV_HEALTH_CHECK_FAILED + HealthChecker.healthCheckFailureMapS); + } + + String[] templateFields = testCaseDTO.getTemplateFields(); + + if (testCaseDTO.getTemplateFields() != null && templateFields.length > 0) { + ArrayList inputtestCases = AdminTestUtil.getInputTestCase(testCaseDTO); + ArrayList outputtestcase = AdminTestUtil.getOutputTestCase(testCaseDTO); + for (int i = 0; i < languageList.size(); i++) { + response = getWithPathParamsBodyHeadersAndCookie(ApplnURI + testCaseDTO.getEndPoint(), + getJsonFromTemplate(inputtestCases.get(i).toString(), testCaseDTO.getInputTemplate()), + COOKIENAME, testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), pathParams, headers); + + Map> ouputValid = OutputValidationUtil.doJsonOutputValidation( + response.asString(), + getJsonFromTemplate(outputtestcase.get(i).toString(), testCaseDTO.getOutputTemplate()), + testCaseDTO, response.getStatusCode()); + Reporter.log(ReportUtil.getOutputValidationReport(ouputValid)); + + if (!OutputValidationUtil.publishOutputResult(ouputValid)) + throw new AdminTestException("Failed at output validation"); + } + } + + else { + String inputJson = getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()); + + inputJson = MimotoUtil.inputstringKeyWordHandeler(inputJson, testCaseName); + + String outputJson = getJsonFromTemplate(testCaseDTO.getOutput(), testCaseDTO.getOutputTemplate()); + outputJson = MimotoUtil.inputstringKeyWordHandeler(outputJson, testCaseName); + + response = getWithPathParamsBodyHeadersAndCookie(ApplnURI + testCaseDTO.getEndPoint(), inputJson, + COOKIENAME, testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), pathParams, headers); + + String contentType = response.getHeader("Content-Type"); + if (contentType != null && contentType.contains("application/pdf")) { + pdf = response.asByteArray(); + + PdfReader pdfReader = null; + ByteArrayInputStream bIS = null; + + try { + bIS = new ByteArrayInputStream(pdf); + pdfReader = new PdfReader(bIS); + pdfAsText = PdfTextExtractor.getTextFromPage(pdfReader, 1); + } catch (IOException e) { + Reporter.log("Exception : " + e.getMessage()); + } finally { + AdminTestUtil.closeByteArrayInputStream(bIS); + AdminTestUtil.closePdfReader(pdfReader); + } + + if (pdf != null && (new String(pdf).contains("errors") || pdfAsText == null)) { + GlobalMethods.reportResponse(null, ApplnURI + testCaseDTO.getEndPoint(), + "Not able to download issuer credential"); + throw new AdminTestException("Not able to download issuer credential"); + } else { + GlobalMethods.reportResponse(null, ApplnURI + testCaseDTO.getEndPoint(), pdfAsText, true); + } + + } else { + Map> ouputValid = null; + ouputValid = OutputValidationUtil.doJsonOutputValidation(response.asString(), outputJson, testCaseDTO, + response.getStatusCode()); + + Reporter.log(ReportUtil.getOutputValidationReport(ouputValid)); + if (!OutputValidationUtil.publishOutputResult(ouputValid)) + throw new AdminTestException("Failed at output validation"); + } + + } + } + + /** + * The method ser current test name to result + * + * @param result + */ + @AfterMethod(alwaysRun = true) + public void setResultTestName(ITestResult result) { + try { + Field method = TestResult.class.getDeclaredField("m_method"); + method.setAccessible(true); + method.set(result, result.getMethod().clone()); + BaseTestMethod baseTestMethod = (BaseTestMethod) result.getMethod(); + Field f = baseTestMethod.getClass().getSuperclass().getDeclaredField("m_methodName"); + f.setAccessible(true); + f.set(baseTestMethod, testCaseName); + } catch (Exception e) { + Reporter.log("Exception : " + e.getMessage()); + } + } +} diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithPathParamsAndCookie.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithPathParamsAndCookie.java new file mode 100644 index 000000000..924436c66 --- /dev/null +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithPathParamsAndCookie.java @@ -0,0 +1,124 @@ +package io.mosip.testrig.apirig.mimoto.testscripts; + +import java.lang.reflect.Field; +import java.util.List; +import java.util.Map; + +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.testng.ITest; +import org.testng.ITestContext; +import org.testng.ITestResult; +import org.testng.Reporter; +import org.testng.SkipException; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; +import org.testng.internal.BaseTestMethod; +import org.testng.internal.TestResult; + +import io.mosip.testrig.apirig.dto.OutputValidationDto; +import io.mosip.testrig.apirig.dto.TestCaseDTO; +import io.mosip.testrig.apirig.mimoto.utils.MimotoConfigManager; +import io.mosip.testrig.apirig.mimoto.utils.MimotoUtil; +import io.mosip.testrig.apirig.testrunner.HealthChecker; +import io.mosip.testrig.apirig.utils.AdminTestException; +import io.mosip.testrig.apirig.utils.AuthenticationTestException; +import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.OutputValidationUtil; +import io.mosip.testrig.apirig.utils.ReportUtil; +import io.mosip.testrig.apirig.utils.SecurityXSSException; +import io.restassured.response.Response; + +public class PostWithPathParamsAndCookie extends MimotoUtil implements ITest { + private static final Logger logger = Logger.getLogger(PostWithPathParamsAndCookie.class); + protected String testCaseName = ""; + public String pathParams = null; + + @BeforeClass + public static void setLogLevel() { + if (MimotoConfigManager.IsDebugEnabled()) + logger.setLevel(Level.ALL); + else + logger.setLevel(Level.ERROR); + } + + /** + * get current testcaseName + */ + @Override + public String getTestName() { + return testCaseName; + } + + /** + * Data provider class provides test case list + * + * @return object of data provider + */ + @DataProvider(name = "testcaselist") + public Object[] getTestCaseList(ITestContext context) { + String ymlFile = context.getCurrentXmlTest().getLocalParameters().get("ymlFile"); + pathParams = context.getCurrentXmlTest().getLocalParameters().get("pathParams"); + logger.info("Started executing yml: " + ymlFile); + return getYmlTestData(ymlFile); + } + + /** + * Test method for OTP Generation execution + * + * @param objTestParameters + * @param testScenario + * @param testcaseName + * @throws AuthenticationTestException + * @throws AdminTestException + */ + @Test(dataProvider = "testcaselist") + public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException, SecurityXSSException { + testCaseName = testCaseDTO.getTestCaseName(); + testCaseDTO = MimotoUtil.isTestCaseValidForTheExecution(testCaseDTO); + + if (HealthChecker.signalTerminateExecution) { + throw new SkipException( + GlobalConstants.TARGET_ENV_HEALTH_CHECK_FAILED + HealthChecker.healthCheckFailureMapS); + } + + + String inputJson = getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()); + inputJson = MimotoUtil.inputstringKeyWordHandeler(inputJson, testCaseName); + + Response response = postWithPathParamsBodyAndCookie(ApplnURI + testCaseDTO.getEndPoint(), inputJson, COOKIENAME, + testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), pathParams); + + Map> ouputValid = OutputValidationUtil.doJsonOutputValidation( + response.asString(), getJsonFromTemplate(testCaseDTO.getOutput(), testCaseDTO.getOutputTemplate()), + testCaseDTO, response.getStatusCode()); + Reporter.log(ReportUtil.getOutputValidationReport(ouputValid)); + + if (!OutputValidationUtil.publishOutputResult(ouputValid)) + throw new AdminTestException("Failed at output validation"); + + } + + /** + * The method ser current test name to result + * + * @param result + */ + @AfterMethod(alwaysRun = true) + public void setResultTestName(ITestResult result) { + try { + Field method = TestResult.class.getDeclaredField("m_method"); + method.setAccessible(true); + method.set(result, result.getMethod().clone()); + BaseTestMethod baseTestMethod = (BaseTestMethod) result.getMethod(); + Field f = baseTestMethod.getClass().getSuperclass().getDeclaredField("m_methodName"); + f.setAccessible(true); + f.set(baseTestMethod, testCaseName); + } catch (Exception e) { + Reporter.log("Exception : " + e.getMessage()); + } + } + +} diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithPathParamsHeadersAndCookieForAutoGenId.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithPathParamsHeadersAndCookieForAutoGenId.java new file mode 100644 index 000000000..3c72bfa67 --- /dev/null +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithPathParamsHeadersAndCookieForAutoGenId.java @@ -0,0 +1,128 @@ +package io.mosip.testrig.apirig.mimoto.testscripts; + +import java.lang.reflect.Field; +import java.util.List; +import java.util.Map; + +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.testng.ITest; +import org.testng.ITestContext; +import org.testng.ITestResult; +import org.testng.Reporter; +import org.testng.SkipException; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; +import org.testng.internal.BaseTestMethod; +import org.testng.internal.TestResult; + +import io.mosip.testrig.apirig.dto.OutputValidationDto; +import io.mosip.testrig.apirig.dto.TestCaseDTO; +import io.mosip.testrig.apirig.mimoto.utils.MimotoConfigManager; +import io.mosip.testrig.apirig.mimoto.utils.MimotoUtil; +import io.mosip.testrig.apirig.testrunner.HealthChecker; +import io.mosip.testrig.apirig.utils.AdminTestException; +import io.mosip.testrig.apirig.utils.AuthenticationTestException; +import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.OutputValidationUtil; +import io.mosip.testrig.apirig.utils.ReportUtil; +import io.mosip.testrig.apirig.utils.SecurityXSSException; +import io.restassured.response.Response; + +public class PostWithPathParamsHeadersAndCookieForAutoGenId extends MimotoUtil implements ITest { + private static final Logger logger = Logger.getLogger(PostWithPathParamsHeadersAndCookieForAutoGenId.class); + protected String testCaseName = ""; + public String pathParams = null; + public String headers = null; + public String idKeyName = null; + + @BeforeClass + public static void setLogLevel() { + if (MimotoConfigManager.IsDebugEnabled()) + logger.setLevel(Level.ALL); + else + logger.setLevel(Level.ERROR); + } + + /** + * get current testcaseName + */ + @Override + public String getTestName() { + return testCaseName; + } + + /** + * Data provider class provides test case list + * + * @return object of data provider + */ + @DataProvider(name = "testcaselist") + public Object[] getTestCaseList(ITestContext context) { + String ymlFile = context.getCurrentXmlTest().getLocalParameters().get("ymlFile"); + pathParams = context.getCurrentXmlTest().getLocalParameters().get("pathParams"); + idKeyName = context.getCurrentXmlTest().getLocalParameters().get("idKeyName"); + headers = context.getCurrentXmlTest().getLocalParameters().get("headers"); + logger.info("Started executing yml: " + ymlFile); + return getYmlTestData(ymlFile); + } + + /** + * Test method for OTP Generation execution + * + * @param objTestParameters + * @param testScenario + * @param testcaseName + * @throws AuthenticationTestException + * @throws AdminTestException + */ + @Test(dataProvider = "testcaselist") + public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException, SecurityXSSException { + testCaseName = testCaseDTO.getTestCaseName(); + testCaseDTO = MimotoUtil.isTestCaseValidForTheExecution(testCaseDTO); + + if (HealthChecker.signalTerminateExecution) { + throw new SkipException( + GlobalConstants.TARGET_ENV_HEALTH_CHECK_FAILED + HealthChecker.healthCheckFailureMapS); + } + + + String inputJson = getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()); + inputJson = MimotoUtil.inputstringKeyWordHandeler(inputJson, testCaseName); + + Response response = postWithPathParamsBodyHeadersAndCookieForAutoGeneratedId(ApplnURI + testCaseDTO.getEndPoint(), inputJson, COOKIENAME, + testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), pathParams, idKeyName, headers); + + Map> ouputValid = OutputValidationUtil.doJsonOutputValidation( + response.asString(), getJsonFromTemplate(testCaseDTO.getOutput(), testCaseDTO.getOutputTemplate()), + testCaseDTO, response.getStatusCode()); + Reporter.log(ReportUtil.getOutputValidationReport(ouputValid)); + + if (!OutputValidationUtil.publishOutputResult(ouputValid)) + throw new AdminTestException("Failed at output validation"); + + } + + /** + * The method ser current test name to result + * + * @param result + */ + @AfterMethod(alwaysRun = true) + public void setResultTestName(ITestResult result) { + try { + Field method = TestResult.class.getDeclaredField("m_method"); + method.setAccessible(true); + method.set(result, result.getMethod().clone()); + BaseTestMethod baseTestMethod = (BaseTestMethod) result.getMethod(); + Field f = baseTestMethod.getClass().getSuperclass().getDeclaredField("m_methodName"); + f.setAccessible(true); + f.set(baseTestMethod, testCaseName); + } catch (Exception e) { + Reporter.log("Exception : " + e.getMessage()); + } + } + +} diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java index 91dd0c864..ff93957fe 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java @@ -175,7 +175,11 @@ public void test(TestCaseDTO testCaseDTO) response = postWithBodyAndBearerTokenForAutoGeneratedId(tempUrl + testCaseDTO.getEndPoint(), inputJson, COOKIENAME, testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), idKeyName); } - } else { + } else if (testCaseName.contains("GoogleLoginToken_")) { + response = postWithBodyAndBearerTokenForAutoGeneratedId(ApplnURI + testCaseDTO.getEndPoint(), + inputJson, COOKIENAME, testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), idKeyName); + } + else { response = postWithBodyAndCookieForAutoGeneratedId(ApplnURI + testCaseDTO.getEndPoint(), inputJson, auditLogCheck, COOKIENAME, testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), idKeyName, sendEsignetToken); diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java index 34809ec03..d46ed1418 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java @@ -41,7 +41,6 @@ public static String getEsignetBaseUrl() { String esignetBaseUrl = null; if (getproperty("runPlugin").equals("mosipid")) { esignetBaseUrl = "https://" + MimotoUtil.getValueFromMimotoActuator("overrides", getproperty("mosipid-identity-esignet-host")); - } else if (getproperty("runPlugin").equals("mockid")) { esignetBaseUrl = "https://" + MimotoUtil.getValueFromMimotoActuator("overrides", getproperty("mock-identity-esignet-host")); } @@ -52,7 +51,7 @@ public static String getEsignetBaseUrl() { } public static String getEsignetSunBirdBaseURL() { - return "https://" + MimotoUtil.getValueFromMimotoActuator("overrides", getproperty("mosip-esignet-insurance-host")); + return "https://" + MimotoUtil.getValueFromMimotoActuator("overrides", getproperty("sunbirdrc-insurance-esignet-host")); } } diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java index 9a3527f70..0231c97fc 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java @@ -8,6 +8,7 @@ import java.time.format.DateTimeFormatter; import java.util.Calendar; import java.util.HashMap; +import java.util.Map; import javax.ws.rs.core.MediaType; @@ -188,6 +189,10 @@ public static String inputstringKeyWordHandeler(String jsonString, String testCa } + if (jsonString.contains("$GOOGLE_IDT_TOKEN$")) { + jsonString = replaceKeywordValue(jsonString, "$GOOGLE_IDT_TOKEN$", getGoogleIdToken()); + } + if (jsonString.contains("$POLICYNUMBERFORSUNBIRDRC$")) { jsonString = replaceKeywordValue(jsonString, "$POLICYNUMBERFORSUNBIRDRC$", policyNumberForSunBirdR); } @@ -334,5 +339,36 @@ public static String getValueFromMimotoActuator(String section, String key) { } - + private static String getGoogleIdToken() { + String idToken = null; + + Map requestMap = new HashMap<>(); + requestMap.put("clientId", MimotoConfigManager.getproperty("google.client.id")); + requestMap.put("clientSecret", MimotoConfigManager.getproperty("google.client.secret")); + requestMap.put("refreshToken", MimotoConfigManager.getproperty("google.refresh.token")); + requestMap.put("grant_type", "refresh_token"); + String url = props.getProperty("googleIdToken"); + + Response response = RestClient.postRequestWithFormDataBody(url, requestMap); + + if (response.getStatusCode() != 200) { + String errorResponse = response.getBody().toString(); + throw new RuntimeException("Failed to get ID token. HTTP status code: " + + response.getStatusCode() + ", response body: " + errorResponse); + } + + JSONObject jsonObject = new JSONObject(response.getBody().asString()); + + if (jsonObject != null) { + idToken = jsonObject.get("id_token").toString(); + } + + if (idToken == null || idToken.isEmpty()) { + throw new RuntimeException("id_token not found in response: " + response); + } + + logger.info("Obtained id_token: " + idToken); // Debug log + return idToken; + + } } \ No newline at end of file diff --git a/api-test/src/main/resources/config/application.properties b/api-test/src/main/resources/config/application.properties index e8c7a8616..aefc909c9 100644 --- a/api-test/src/main/resources/config/application.properties +++ b/api-test/src/main/resources/config/application.properties @@ -43,6 +43,7 @@ generateArgon2HashURL=/v1/keymanager/generateArgon2Hash appointmentavailabilityurl=/preregistration/v1/appointment/availability/ validateSignatureUrl=v1/identity/validateSign vciContextURL=https://www.w3.org/2018/credentials/v1 +googleIdToken=https://oauth2.googleapis.com/token ## As below are non changble values, move these out from properties file appIdForCertificate=IDA diff --git a/api-test/src/main/resources/config/mimoto.properties b/api-test/src/main/resources/config/mimoto.properties index 6feb47661..215b2b21f 100644 --- a/api-test/src/main/resources/config/mimoto.properties +++ b/api-test/src/main/resources/config/mimoto.properties @@ -2,10 +2,95 @@ actuatorMimotoEndpoint=/v1/mimoto/actuator/env mimoto-oidc-mosipid-partner-clientid=mimoto.oidc.mosipid.partner.clientid mimoto-oidc-sunbird-partner-clientid=mimoto.oidc.insurance.partner.clientid -mosip-esignet-insurance-host=sunbirdrc.insurance.esignet.host +sunbirdrc-insurance-esignet-host=sunbirdrc.insurance.esignet.host mosipid-identity-esignet-host=mosipid.identity.esignet.host mock-identity-esignet-host=mock.identity.esignet.host runPlugin=mosipid -# Uncomment the line below for local run and add this config maps in rancher if the eSignet version is older than 1.5.1 for compatibility -#sunbirdInsuranceAuthFactorType=KBA \ No newline at end of file +# Uncomment the line below if the eSignet version is older than 1.5.1 for compatibility +#sunbirdInsuranceAuthFactorType=KBA + +#These properties to be added for google login +google.client.id = +google.client.secret = +google.refresh.token = + +#---------------------------------- Modifiable Properties ----------------------------------------------------------# + +#------------------------ Environment URLs and Database Connections ------------------------# + +# Keycloak URL. +keycloak-external-url = https://iam.released.mosip.net + +# PostgreSQL URLs for audit and partner databases. +audit_url = jdbc:postgresql://released.mosip.net:5432/mosip_audit +partner_url = jdbc:postgresql://released.mosip.net:5432/mosip_ida + +# Database server for connections. +db-server = released.mosip.net + + +#------------------------ secrets and passwords ------------------------# + +#------------------------ Keycloak Passwords ------------------------# +# Used for Keycloak authentication. +keycloak_Password = + +#------------------------ PostgreSQL Database Passwords ------------------------# +# Credentials for connecting to Postgres databases. +audit_password = +partner_password = +postgres-password = + +#-------- Client Secret Keys ----------# +# These keys are used for various services, make sure to update the values as required when running locally. + +mosip_partner_client_secret = +mosip_pms_client_secret = +mosip_resident_client_secret = +mosip_idrepo_client_secret = +mosip_reg_client_secret = +mosip_admin_client_secret = +mosip_hotlist_client_secret = +mosip_regproc_client_secret = +mpartner_default_mobile_secret = +mosip_testrig_client_secret = +AuthClientSecret = +mosip_crvs1_client_secret = + + +#-------- Generic Configuration ----------# + +# Enable or disable debugging mode (yes/no). +enableDebug = no + +# Whether to use pre-configured OTP (true/false). +usePreConfiguredOtp = false + +# Mock Notification Channels (email/phone/email,phone). +mockNotificationChannel = email,phone + + +#------------------------ Mosip Components Base URLs ------------------------# +# Define base URLs for different components if required. +# Example: +# mosip_components_base_urls = auditmanager=api-internal.released.mosip.net;idrepository=api-internal.released.mosip.net;authmanager=api-internal.released.mosip.net;resident=api-internal.released.mosip.net;partnermanager=api-internal.released.mosip.net;idauthentication=api-internal.released.mosip.net;masterdata=api-internal.released.mosip.net;idgenerator=api-internal.released.mosip.net;policymanager=api-internal.released.mosip.net;preregistration=api-internal.released.mosip.net;keymanager=api-internal.released.mosip.net;mock-identity-system=api.released.mosip.net +# Feel free to add more components as needed. +mosip_components_base_urls = + +#------------------------ Module Name Pattern ------------------------# +# Define module name pattern if required. +# Example: +# moduleNamePattern = (mimoto|resident) +# Feel free to add more values as needed. +moduleNamePattern = + + +#------------------------ Uncomment for Local Run ------------------------# + +# Path to the authentication certificates (if running locally, uncomment the below line and keep the value empty). +# authCertsPath = + +# X-XSS-Protection: Controls the XSS (Cross-Site Scripting) filter in browsers. +# Values: (yes/no) +xssProtectionCheck = no \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/AddIdentity/AddIdentity.yml b/api-test/src/main/resources/mimoto/AddIdentity/AddIdentity.yml index afbe8186d..829a391cf 100644 --- a/api-test/src/main/resources/mimoto/AddIdentity/AddIdentity.yml +++ b/api-test/src/main/resources/mimoto/AddIdentity/AddIdentity.yml @@ -84,4 +84,33 @@ AddIdentity: }' output: '{ "status":"ACTIVATED" +}' + + Mimoto_AddIdentity_downloadIssuerCredentialWithGoogleLogin_smoke_Pos: + endPoint: /idrepository/v1/identity/ + description: Creating a new identity for downloading issuer credential + uniqueIdentifier: TC_Mimoto_AddIdentity_03 + role: idrepo + restMethod: post + inputTemplate: mimoto/AddIdentity/addIdentity_$LANGNUMBER$ + outputTemplate: mimoto/AddIdentity/addIdentityResult + input: '{ + "value": "$BIOVALUE$", + "id": "mosip.id.create", + "registrationId": "$RID$", + "biometricReferenceId": "23452353", + "UIN": "$UIN$", + "dateOfBirth": "1992/04/15", + "postalCode": "14022", + "email": "Mimoto_AddIdentity_downloadIssuerCredentialWithGoogleLogin_smoke_Pos@mosip.net", + "phone": "9876543210", + "referenceIdentityNumber": "6789545678878", + "version": "v1", + "introducerRID": "212124324784879", + "introducerUIN": "212124324784879", + "category": "individualBiometrics", + "requesttime": "$TIMESTAMP$" +}' + output: '{ + "status":"ACTIVATED" }' \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Authorization/GoogleLoginToken/GoogleLoginToken.hbs b/api-test/src/main/resources/mimoto/LoginFlow/Authorization/GoogleLoginToken/GoogleLoginToken.hbs new file mode 100644 index 000000000..d2939c083 --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Authorization/GoogleLoginToken/GoogleLoginToken.hbs @@ -0,0 +1,3 @@ +{ + "cookie": "{{cookie}}" +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Authorization/GoogleLoginToken/GoogleLoginToken.yml b/api-test/src/main/resources/mimoto/LoginFlow/Authorization/GoogleLoginToken/GoogleLoginToken.yml new file mode 100644 index 000000000..4682fc502 --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Authorization/GoogleLoginToken/GoogleLoginToken.yml @@ -0,0 +1,76 @@ +GoogleLoginToken: + Mimoto_GoogleLoginToken_all_Valid_Smoke: + endPoint: /v1/mimoto/auth/google/token-login + description: Creating the sesion token for google login + uniqueIdentifier: TC_Mimoto_GoogleLoginToken_01 + role: userDefinedCookie + restMethod: post + checkOnlyStatusCodeInResponse: true + inputTemplate: mimoto/LoginFlow/Authorization/GoogleLoginToken/GoogleLoginToken + outputTemplate: mimoto/responseCode + input: '{ + "cookie": "$GOOGLE_IDT_TOKEN$" +}' + output: '{ + "responseCode": "200" +}' + + Mimoto_GoogleLoginToken_Invalid_Provider_Neg: + endPoint: /v1/mimoto/auth/invalid/token-login + description: Creating the sesion token for google login with invalid provider + uniqueIdentifier: TC_Mimoto_GoogleLoginToken_02 + role: userDefinedCookie + restMethod: post + inputTemplate: mimoto/LoginFlow/Authorization/GoogleLoginToken/GoogleLoginToken + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$GOOGLE_IDT_TOKEN$" +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_GoogleLoginToken_InvalidToken_Neg: + endPoint: /v1/mimoto/auth/google/token-login + description: Creating the sesion token for google login with invalid IDT token and expects it to fail + uniqueIdentifier: TC_Mimoto_GoogleLoginToken_03 + role: userDefinedCookie + restMethod: post + inputTemplate: mimoto/LoginFlow/Authorization/GoogleLoginToken/GoogleLoginToken + outputTemplate: mimoto/error2 + input: '{ + "cookie": "invalid" +}' + output: '{ + "errorCode": "invalid_token" +}' + + Mimoto_GoogleLoginToken_ExpiredToken_Neg: + endPoint: /v1/mimoto/auth/google/token-login + description: Creating the sesion token for google login with expired token and expects it to fail + uniqueIdentifier: TC_Mimoto_GoogleLoginToken_04 + role: userDefinedCookie + restMethod: post + inputTemplate: mimoto/LoginFlow/Authorization/GoogleLoginToken/GoogleLoginToken + outputTemplate: mimoto/error2 + input: '{ + "cookie": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjFiYjc3NGJkODcyOWVhMzhlOWMyZmUwYzY0ZDJjYTk0OGJmNjZmMGYiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiIxODg4MjgxNzM0OTktMHA0Zjk1Y2RxanM5aHR0bTEzMTBka2FlNmwzazNzam4uYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiIxODg4MjgxNzM0OTktMHA0Zjk1Y2RxanM5aHR0bTEzMTBka2FlNmwzazNzam4uYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMTAwODI5NzU4ODc2MDU2NjIyOTAiLCJlbWFpbCI6Im1vc2lwdGVzdGN5YmVycHduQGdtYWlsLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJhdF9oYXNoIjoiZExSUmM1WVFZaW1TTXVjaFZWRXhpQSIsIm5hbWUiOiJNb3NpcCB0ZXN0IEN5YmVycHduIiwicGljdHVyZSI6Imh0dHBzOi8vbGgzLmdvb2dsZXVzZXJjb250ZW50LmNvbS9hL0FDZzhvY0pZLWpRUE5UR3FLVHdiX3lOWHZ1c0FzSjVuSTBlcHhOczZWaWF2clVfd3hNMDdrZz1zOTYtYyIsImdpdmVuX25hbWUiOiJNb3NpcCB0ZXN0IiwiZmFtaWx5X25hbWUiOiJDeWJlcnB3biIsImlhdCI6MTc1MDc0NzExOSwiZXhwIjoxNzUwNzUwNzE5fQ.YGH3pgVvZoXyXS_eUPLmul5AXMdAdVaAoJRBJty_ZYBy7oKT7FGKwhJ9bLhXLiRG031noCaM-3EYv2N2oezvApuOGYM6xK5Mb6WdGzv-y0oR-00wniTTbuUEtgZGxPunZ2lfrI6WwkIq8JHhFh1_l4SnRGYfRqNA-vhLNMfcZsm0yG9NAt6TWgHEqy_JtMXSQTsvLfLijCLOqZCfQuTDqzk5EhtGaEMtppPN_au-Xc8fTDhY0nZtWTQ2262nqLXGSomika66dKH1SU50DtQEEdtz8Cbo_li5S4hSV1nDa7MzbIgiVqqN6fFalxRy4kvvvvaWNj7U46DsKjunINoNMQ" +}' + output: '{ + "errorCode": "invalid_token" +}' + + Mimoto_GoogleLoginToken_EmptyToken_Neg: + endPoint: /v1/mimoto/auth/google/token-login + description: Creating the sesion token for google login with expired token and expects it to fail + uniqueIdentifier: TC_Mimoto_GoogleLoginToken_05 + role: userDefinedCookie + restMethod: post + inputTemplate: mimoto/LoginFlow/Authorization/GoogleLoginToken/GoogleLoginToken + outputTemplate: mimoto/error2 + input: '{ + "cookie": "" +}' + output: '{ + "errorCode": "invalid_request" +}' \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Authorization/GoogleLoginToken/GoogleLoginTokenResult.hbs b/api-test/src/main/resources/mimoto/LoginFlow/Authorization/GoogleLoginToken/GoogleLoginTokenResult.hbs new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Authorization/GoogleLoginToken/GoogleLoginTokenResult.hbs @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Authorization/Logout/Logout.hbs b/api-test/src/main/resources/mimoto/LoginFlow/Authorization/Logout/Logout.hbs new file mode 100644 index 000000000..1c946c7fc --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Authorization/Logout/Logout.hbs @@ -0,0 +1,4 @@ +{ + "cookie": "{{cookie}}", + "cookieName": "{{cookieName}}" +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Authorization/Logout/Logout.yml b/api-test/src/main/resources/mimoto/LoginFlow/Authorization/Logout/Logout.yml new file mode 100644 index 000000000..48b4d13a4 --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Authorization/Logout/Logout.yml @@ -0,0 +1,51 @@ +Logout: + Mimoto_Logout_all_Valid_Smoke: + endPoint: /v1/mimoto/logout + description: Logout the session that is created + uniqueIdentifier: TC_Mimoto_Logout_01 + role: userDefinedCookie + restMethod: post + checkOnlyStatusCodeInResponse: true + inputTemplate: mimoto/LoginFlow/Authorization/Logout/Logout + outputTemplate: mimoto/responseCode + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "responseCode": "200" +}' + + Mimoto_Logout_WithoutLogin_Neg: + endPoint: /v1/mimoto/logout + description: Logout the session without creating the login session and providing random cookie value and expects it to fail + uniqueIdentifier: TC_Mimoto_Logout_02 + role: userDefinedCookie + restMethod: post + checkOnlyStatusCodeInResponse: true + inputTemplate: mimoto/LoginFlow/Authorization/Logout/Logout + outputTemplate: mimoto/responseCode + input: '{ + "cookie": "abcdef", + "cookieName": "SESSION" +}' + output: '{ + "responseCode": "404" +}' + + Mimoto_Logout_WithExpiredSession_Neg: + endPoint: /v1/mimoto/logout + description: Logout the session with expired login session and expects it to fail + uniqueIdentifier: TC_Mimoto_Logout_03 + role: userDefinedCookie + restMethod: post + checkOnlyStatusCodeInResponse: true + inputTemplate: mimoto/LoginFlow/Authorization/Logout/Logout + outputTemplate: mimoto/responseCode + input: '{ + "cookie": "OGYwNWI5YWQtZjg0MS00NmM2LWJiZTgtOGRmMWYwMGYzNzcy", + "cookieName": "SESSION" +}' + output: '{ + "responseCode": "404" +}' \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Authorization/Logout/LogoutResult.hbs b/api-test/src/main/resources/mimoto/LoginFlow/Authorization/Logout/LogoutResult.hbs new file mode 100644 index 000000000..7a73a41bf --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Authorization/Logout/LogoutResult.hbs @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthenticateUser/AuthenticateUser.hbs b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthenticateUser/AuthenticateUser.hbs new file mode 100644 index 000000000..887633e11 --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthenticateUser/AuthenticateUser.hbs @@ -0,0 +1,15 @@ +{ + "encodedHash": "{{encodedHash}}", + "requestTime": "{{requestTime}}", + "request": { + "transactionId": "{{transactionId}}", + "individualId": "{{individualId}}", + "challengeList" : [ + { + "authFactorType" : "{{authFactorType}}", + "challenge" : "{{challenge}}", + "format": "alpha-numeric" + } + ] + } +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthenticateUser/AuthenticateUser.yml b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthenticateUser/AuthenticateUser.yml new file mode 100644 index 000000000..d3e1f0dd2 --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthenticateUser/AuthenticateUser.yml @@ -0,0 +1,70 @@ +AuthenticateUserForGoogleLogin: + Mimoto_ESignet_AuthenticateUserIDPForGoogleLogin_uin_Otp_Valid_Smoke: + endPoint: /v1/esignet/authorization/authenticate + description: Authenticate user to download credentials with all valid parameters + uniqueIdentifier: TC_Mimoto_AuthenticateUserForGoogleLogin_01 + role: resident + restMethod: post + checkErrorsOnlyInResponse: true + validityCheckRequired: true + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthenticateUser/AuthenticateUser + outputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthenticateUser/AuthenticateUserResult + input: '{ + "encodedHash": "$ID:ESignet_OAuthDetailsRequest_GoogleLogin_all_Valid_Smoke_sid_encodedResp$", + "requestTime": "$TIMESTAMP$", + "transactionId": "$ID:ESignet_OAuthDetailsRequest_GoogleLogin_all_Valid_Smoke_sid_transactionId$", + "individualId": "$ID:AddIdentity_downloadIssuerCredential_smoke_Pos_UIN$", + "authFactorType" : "OTP", + "challenge" : "$ID:AddIdentity_downloadIssuerCredential_smoke_Pos_EMAIL$", + "sendOtp":{ + "encodedHash": "$ID:ESignet_OAuthDetailsRequest_GoogleLogin_all_Valid_Smoke_sid_encodedResp$", + "requestTime": "$TIMESTAMP$", + "transactionId": "$ID:ESignet_OAuthDetailsRequest_GoogleLogin_all_Valid_Smoke_sid_transactionId$", + "individualId": "$ID:AddIdentity_downloadIssuerCredential_smoke_Pos_UIN$", + "otpChannels": [{channel: "email"},{channel: "phone"}], + "sendOtpReqTemplate": "mimoto/SendOtpEsignet/SendOtp", + "sendOtpEndPoint": "/v1/esignet/authorization/send-otp" + } + }' + output: '{ + "sendOtpResp":{ + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"esignet/SendOtp/SendOtpResult", + "maskedEmail": "$IGNORE$" + } +}' + + Mimoto_ESignet_AuthenticateUserIDPForGoogleLogin_uin_Otp_Valid_ForNeg: + endPoint: /v1/esignet/authorization/authenticate + description: Authenticate user to download credentials with all valid parameters for neg scenario + uniqueIdentifier: TC_Mimoto_AuthenticateUserForGoogleLogin_02 + role: resident + restMethod: post + checkErrorsOnlyInResponse: true + validityCheckRequired: true + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthenticateUser/AuthenticateUser + outputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthenticateUser/AuthenticateUserResult + input: '{ + "encodedHash": "$ID:ESignet_OAuthDetailsRequest_GoogleLogin_all_Valid_sid_ForNeg_encodedResp$", + "requestTime": "$TIMESTAMP$", + "transactionId": "$ID:ESignet_OAuthDetailsRequest_GoogleLogin_all_Valid_sid_ForNeg_transactionId$", + "individualId": "$ID:AddIdentity_downloadIssuerCredential_smoke_Pos_UIN$", + "authFactorType" : "OTP", + "challenge" : "$ID:AddIdentity_downloadIssuerCredential_smoke_Pos_EMAIL$", + "sendOtp":{ + "encodedHash": "$ID:ESignet_OAuthDetailsRequest_GoogleLogin_all_Valid_sid_ForNeg_encodedResp$", + "requestTime": "$TIMESTAMP$", + "transactionId": "$ID:ESignet_OAuthDetailsRequest_GoogleLogin_all_Valid_sid_ForNeg_transactionId$", + "individualId": "$ID:AddIdentity_downloadIssuerCredential_smoke_Pos_UIN$", + "otpChannels": [{channel: "email"},{channel: "phone"}], + "sendOtpReqTemplate": "mimoto/SendOtpEsignet/SendOtp", + "sendOtpEndPoint": "/v1/esignet/authorization/send-otp" + } + }' + output: '{ + "sendOtpResp":{ + "maskedMobile": "$IGNORE$", + "sendOtpResTemplate":"esignet/SendOtp/SendOtpResult", + "maskedEmail": "$IGNORE$" + } +}' \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthenticateUser/AuthenticateUserResult.hbs b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthenticateUser/AuthenticateUserResult.hbs new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthenticateUser/AuthenticateUserResult.hbs @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthorizationCode/AuthorizationCode.hbs b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthorizationCode/AuthorizationCode.hbs new file mode 100644 index 000000000..491dca1ba --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthorizationCode/AuthorizationCode.hbs @@ -0,0 +1,19 @@ +{ + "encodedHash": "{{encodedHash}}", + "requestTime": "{{requestTime}}", + "request": { + "transactionId": "{{transactionId}}", + "acceptedClaims": [ + {{#each acceptedClaims}} + "{{claim}}" + {{#unless @last}},{{/unless}} + {{/each}} + ], + "permittedAuthorizeScopes": [ + {{#each permittedAuthorizeScopes}} + "{{scope}}" + {{#unless @last}},{{/unless}} + {{/each}} + ] + } +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthorizationCode/AuthorizationCode.yml b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthorizationCode/AuthorizationCode.yml new file mode 100644 index 000000000..ce5e45db3 --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthorizationCode/AuthorizationCode.yml @@ -0,0 +1,36 @@ +AuthorizationCodeForGoogleLogin: + Mimoto_ESignet_AuthorizationCode_GoogleLogin_uin_All_Valid_Smoke_sid: + endPoint: /v1/esignet/authorization/auth-code + description: Generate authorization code to download credential issuer + uniqueIdentifier: TC_Mimoto_AuthorizationCodeForGoogleLogin_01 + role: resident + restMethod: post + checkErrorsOnlyInResponse: true + validityCheckRequired: true + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthorizationCode/AuthorizationCode + outputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthorizationCode/AuthorizationCodeResult + input: '{ + "encodedHash": "$ID:ESignet_OAuthDetailsRequest_GoogleLogin_all_Valid_Smoke_sid_encodedResp$", + "requestTime": "$TIMESTAMP$", + "transactionId": "$ID:ESignet_OAuthDetailsRequest_GoogleLogin_all_Valid_Smoke_sid_transactionId$" +}' + output: '{ +}' + + Mimoto_ESignet_AuthorizationCode_GoogleLogin_uin_All_Valid_sid_ForNeg: + endPoint: /v1/esignet/authorization/auth-code + description: Generate authorization code to download credential issuer for Neg scenario + uniqueIdentifier: TC_Mimoto_AuthorizationCodeForGoogleLogin_02 + role: resident + restMethod: post + checkErrorsOnlyInResponse: true + validityCheckRequired: true + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthorizationCode/AuthorizationCode + outputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthorizationCode/AuthorizationCodeResult + input: '{ + "encodedHash": "$ID:ESignet_OAuthDetailsRequest_GoogleLogin_all_Valid_sid_ForNeg_encodedResp$", + "requestTime": "$TIMESTAMP$", + "transactionId": "$ID:ESignet_OAuthDetailsRequest_GoogleLogin_all_Valid_sid_ForNeg_transactionId$" +}' + output: '{ +}' \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthorizationCode/AuthorizationCodeResult.hbs b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthorizationCode/AuthorizationCodeResult.hbs new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthorizationCode/AuthorizationCodeResult.hbs @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DeleteCredentials/DeleteCredentials.hbs b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DeleteCredentials/DeleteCredentials.hbs new file mode 100644 index 000000000..06cd1f431 --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DeleteCredentials/DeleteCredentials.hbs @@ -0,0 +1,6 @@ +{ + "cookie": "{{cookie}}", + "cookieName": "{{cookieName}}", + "walletId": "{{walletId}}", + "credentialId": "{{credentialId}}" +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DeleteCredentials/DeleteCredentials.yml b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DeleteCredentials/DeleteCredentials.yml new file mode 100644 index 000000000..e7c219b6b --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DeleteCredentials/DeleteCredentials.yml @@ -0,0 +1,147 @@ +DeleteCredentials: + Mimoto_DeleteCredentials_all_Valid_Smoke: + endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId} + description: Delete the credential that is saved for the wallet + uniqueIdentifier: TC_Mimoto_DeleteCredentials_01 + role: userDefinedCookie + restMethod: delete + checkOnlyStatusCodeInResponse: true + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DeleteCredentials/DeleteCredentials + outputTemplate: mimoto/responseCode + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "credentialId": "$ID:DownloadMultipleStayProtectedIssuerCredentialWithGoogleLogin_SunBirdC_All_Valid_Smoke_sid_credentialId$" +}' + output: '{ + "responseCode": "200" +}' + + Mimoto_DeleteCredentials_allReadyDeleted_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId} + description: Delete the credential that is already deleted for the wallet and expects it to fail + uniqueIdentifier: TC_Mimoto_DeleteCredentials_02 + role: userDefinedCookie + restMethod: delete + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DeleteCredentials/DeleteCredentials + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "credentialId": "$ID:DownloadMultipleStayProtectedIssuerCredentialWithGoogleLogin_SunBirdC_All_Valid_Smoke_sid_credentialId$" +}' + output: '{ + "errorCode":"resource_not_found" +}' + + Mimoto_DeleteCredentials_Invalid_CredentialId_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId} + description: Delete the credential invalid credential id for the wallet and expects it to fail + uniqueIdentifier: TC_Mimoto_DeleteCredentials_03 + role: userDefinedCookie + restMethod: delete + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DeleteCredentials/DeleteCredentials + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "credentialId": "invalid" +}' + output: '{ + "errorCode":"resource_not_found" +}' + + Mimoto_DeleteCredentials_Invalid_WalletId_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId} + description: Delete the credential invalid wallet id for the wallet and expects it to fail + uniqueIdentifier: TC_Mimoto_DeleteCredentials_04 + role: userDefinedCookie + restMethod: delete + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DeleteCredentials/DeleteCredentials + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "invalid", + "credentialId": "$ID:DownloadStayProtectedIssuerCredentialWithGoogleLogin_SunBirdC_All_Valid_Smoke_sid_credentialId$" +}' + output: '{ + "errorCode":"invalid_request" +}' + + Mimoto_DeleteCredentials_EmptyOrSpace_CredentialId_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId} + description: Delete the credential empty or space in credential id and expects it to fail + uniqueIdentifier: TC_Mimoto_DeleteCredentials_05 + role: userDefinedCookie + restMethod: delete + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DeleteCredentials/DeleteCredentials + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "credentialId": " " +}' + output: '{ + "errorCode":"resource_not_found" +}' + + Mimoto_DeleteCredentials_WithSession_Expired_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId} + description: Delete the credential for the wallet with expired session and expects it to fail + uniqueIdentifier: TC_Mimoto_DeleteCredentials_07 + role: userDefinedCookie + restMethod: delete + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DeleteCredentials/DeleteCredentials + outputTemplate: mimoto/error2 + input: '{ + "cookie": "OGYwNWI5YWQtZjg0MS00NmM2LWJiZTgtOGRmMWYwMGYzNzcy", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "credentialId": "$ID:DownloadStayProtectedIssuerCredentialWithGoogleLogin_SunBirdC_All_Valid_Smoke_sid_credentialId$" +}' + output: '{ + "errorCode":"invalid_request" +}' + + Mimoto_DeleteCredentials_WithSession_Expired_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId} + description: Delete the credential for the wallet without login and expects it to fail + uniqueIdentifier: TC_Mimoto_DeleteCredentials_08 + role: userDefinedCookie + restMethod: delete + checkOnlyStatusCodeInResponse: true + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DeleteCredentials/DeleteCredentials + outputTemplate: mimoto/responseCode + input: '{ + "cookie": "withoutLogin", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "credentialId": "$ID:DownloadStayProtectedIssuerCredentialWithGoogleLogin_SunBirdC_All_Valid_Smoke_sid_credentialId$" +}' + output: '{ + "responseCode": "401" +}' + + Mimoto_DeleteCredentials_MultipleCredentialCreated_valid: + endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId} + description: Delete the credential for the wallet with multiple credentials created + uniqueIdentifier: TC_Mimoto_DeleteCredentials_06 + role: userDefinedCookie + restMethod: delete + checkOnlyStatusCodeInResponse: true + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DeleteCredentials/DeleteCredentials + outputTemplate: mimoto/responseCode + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "credentialId": "$ID:DownloadStayProtectedIssuerCredentialWithGoogleLogin_SunBirdC_All_Valid_Smoke_sid_credentialId$" +}' + output: '{ + "responseCode": "200" +}' \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DeleteCredentials/DeleteCredentialsResult.hbs b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DeleteCredentials/DeleteCredentialsResult.hbs new file mode 100644 index 000000000..7a73a41bf --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DeleteCredentials/DeleteCredentialsResult.hbs @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential.hbs b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential.hbs new file mode 100644 index 000000000..b72d841c5 --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential.hbs @@ -0,0 +1,11 @@ +{ + "grantType": "{{grantType}}", + "code": "{{code}}", + "redirectUri": "{{redirectUri}}", + "codeVerifier": "{{codeVerifier}}", + "issuer": "{{issuer}}", + "credentialConfigurationId": "{{credentialConfigurationId}}", + "walletId": "{{walletId}}", + "cookie": "{{cookie}}", + "cookieName": "{{cookieName}}" +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential.yml b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential.yml new file mode 100644 index 000000000..d1739b094 --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential.yml @@ -0,0 +1,923 @@ +DownloadMosipIssuerCredentialWithGoogleLogin: + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_All_Valid_Smoke_sid: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading credential with all valid parameters along with google login + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_01 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredentialResult + input: '{ + "grantType": "authorization_code", + "code": "$ID:ESignet_AuthorizationCode_GoogleLogin_uin_All_Valid_Smoke_sid_code$", + "redirectUri": "$INJIREDIRECTURI$", + "codeVerifier": "$CODEVERIFIER$", + "issuer": "Mosip", + "credentialConfigurationId": "MosipVerifiableCredential", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "issuerDisplayName": "National Identity Department", + "credentialTypeDisplayName": "MOSIP National ID" +}' + + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_DownloadSameVC_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading same credential with all valid parameters along with google login and expects to fail + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_02 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": "authorization_code", + "code": "$ID:ESignet_AuthorizationCode_GoogleLogin_uin_All_Valid_sid_ForNeg_code$", + "redirectUri": "$INJIREDIRECTURI$", + "codeVerifier": "$CODEVERIFIER$", + "issuer": "Mosip", + "credentialConfigurationId": "MosipVerifiableCredential", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode":"credential_download_error" +}' + + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_WithoutUnlockWallet_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading credential with all valid parameters along with google login and expects to fail + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_38 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": "authorization_code", + "code": "$ID:ESignet_AuthorizationCode_GoogleLogin_uin_All_Valid_sid_ForNeg_code$", + "redirectUri": "$INJIREDIRECTURI$", + "codeVerifier": "$CODEVERIFIER$", + "issuer": "Mosip", + "credentialConfigurationId": "MosipVerifiableCredential", + "walletId": "$ID:CreateWallet_WithoutUnlock_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode":"wallet_locked" +}' + + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_InvalidWallet_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading credential with invalid wallet id along with google login and expects to fail + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_03 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": "authorization_code", + "code": "$ID:ESignet_AuthorizationCode_GoogleLogin_uin_All_Valid_sid_ForNeg_code$", + "redirectUri": "$INJIREDIRECTURI$", + "codeVerifier": "$CODEVERIFIER$", + "issuer": "Mosip", + "credentialConfigurationId": "MosipVerifiableCredential", + "walletId": "invalid-wallet-id", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode":"invalid_request" +}' + + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_SpaceInWallet_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading credential with sapce value in wallet id along with google login and expects to fail + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_04 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": "authorization_code", + "code": "$ID:ESignet_AuthorizationCode_GoogleLogin_uin_All_Valid_sid_ForNeg_code$", + "redirectUri": "$INJIREDIRECTURI$", + "codeVerifier": "$CODEVERIFIER$", + "issuer": "Mosip", + "credentialConfigurationId": "MosipVerifiableCredential", + "walletId": " ", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode":"invalid_request" +}' + + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_NullInWallet_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading credential with null value in wallet id along with google login and expects to fail + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_05 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": "authorization_code", + "code": "$ID:ESignet_AuthorizationCode_GoogleLogin_uin_All_Valid_sid_ForNeg_code$", + "redirectUri": "$INJIREDIRECTURI$", + "codeVerifier": "$CODEVERIFIER$", + "issuer": "Mosip", + "credentialConfigurationId": "MosipVerifiableCredential", + "walletId": "null", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode":"invalid_request" +}' + + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_NumericValueInWallet_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading credential with numeric value in wallet id along with google login and expects to fail + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_06 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": "authorization_code", + "code": "$ID:ESignet_AuthorizationCode_GoogleLogin_uin_All_Valid_sid_ForNeg_code$", + "redirectUri": "$INJIREDIRECTURI$", + "codeVerifier": "$CODEVERIFIER$", + "issuer": "Mosip", + "credentialConfigurationId": "MosipVerifiableCredential", + "walletId": "145672", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode":"invalid_request" +}' + + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_InvalidGrantType_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading credential with invalid grant type along with google login and expects to fail + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_07 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": "invalid", + "code": "$ID:ESignet_AuthorizationCode_GoogleLogin_uin_All_Valid_sid_ForNeg_code$", + "redirectUri": "$INJIREDIRECTURI$", + "codeVerifier": "$CODEVERIFIER$", + "issuer": "Mosip", + "credentialConfigurationId": "MosipVerifiableCredential", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode":"invalid_request" +}' + + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_EmptyGrantType_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading credential with empty grant type along with google login and expects to fail + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_08 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": "", + "code": "$ID:ESignet_AuthorizationCode_GoogleLogin_uin_All_Valid_sid_ForNeg_code$", + "redirectUri": "$INJIREDIRECTURI$", + "codeVerifier": "$CODEVERIFIER$", + "issuer": "Mosip", + "credentialConfigurationId": "MosipVerifiableCredential", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode":"invalid_request" +}' + + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_SpaceInGrantType_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading credential with space in grant type along with google login and expects to fail + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_09 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": " ", + "code": "$ID:ESignet_AuthorizationCode_GoogleLogin_uin_All_Valid_sid_ForNeg_code$", + "redirectUri": "$INJIREDIRECTURI$", + "codeVerifier": "$CODEVERIFIER$", + "issuer": "Mosip", + "credentialConfigurationId": "MosipVerifiableCredential", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode":"invalid_request" +}' + + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_MissingGrantType_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading credential with missing grant type along with google login and expects to fail + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_10 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": "$REMOVE$", + "code": "$ID:ESignet_AuthorizationCode_GoogleLogin_uin_All_Valid_sid_ForNeg_code$", + "redirectUri": "$INJIREDIRECTURI$", + "codeVerifier": "$CODEVERIFIER$", + "issuer": "Mosip", + "credentialConfigurationId": "MosipVerifiableCredential", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode":"invalid_request" +}' + + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_NumericGrantType_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading credential with numeric grant type along with google login and expects to fail + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_11 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": "5454453", + "code": "$ID:ESignet_AuthorizationCode_GoogleLogin_uin_All_Valid_sid_ForNeg_code$", + "redirectUri": "$INJIREDIRECTURI$", + "codeVerifier": "$CODEVERIFIER$", + "issuer": "Mosip", + "credentialConfigurationId": "MosipVerifiableCredential", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode":"invalid_request" +}' + + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_InvalidCode_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading credential with invalid code along with google login and expects to fail + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_12 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": "authorization_code", + "code": "invalid", + "redirectUri": "$INJIREDIRECTURI$", + "codeVerifier": "$CODEVERIFIER$", + "issuer": "Mosip", + "credentialConfigurationId": "MosipVerifiableCredential", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode":"invalid_request" +}' + + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_EmptyCode_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading credential with empty code along with google login and expects to fail + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_13 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": "authorization_code", + "code": "", + "redirectUri": "$INJIREDIRECTURI$", + "codeVerifier": "$CODEVERIFIER$", + "issuer": "Mosip", + "credentialConfigurationId": "MosipVerifiableCredential", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode":"invalid_request" +}' + + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_SpaceInCode_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading credential with space in code along with google login and expects to fail + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_14 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": "authorization_code", + "code": "", + "redirectUri": "$INJIREDIRECTURI$", + "codeVerifier": "$CODEVERIFIER$", + "issuer": "Mosip", + "credentialConfigurationId": "MosipVerifiableCredential", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode":"invalid_request" +}' + + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_MissingCode_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading credential with missing code along with google login and expects to fail + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_15 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": "authorization_code", + "code": "$REMOVE$", + "redirectUri": "$INJIREDIRECTURI$", + "codeVerifier": "$CODEVERIFIER$", + "issuer": "Mosip", + "credentialConfigurationId": "MosipVerifiableCredential", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode":"invalid_request" +}' + + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_NumericInCode_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading credential with numeric in code along with google login and expects to fail + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_16 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": "authorization_code", + "code": "7554432", + "redirectUri": "$INJIREDIRECTURI$", + "codeVerifier": "$CODEVERIFIER$", + "issuer": "Mosip", + "credentialConfigurationId": "MosipVerifiableCredential", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode":"invalid_request" +}' + + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_InvalidRedirectUri_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading credential with invalid redirect uri along with google login and expects to fail + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_17 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": "authorization_code", + "code": "$ID:ESignet_AuthorizationCode_GoogleLogin_uin_All_Valid_sid_ForNeg_code$", + "redirectUri": "invalid", + "codeVerifier": "$CODEVERIFIER$", + "issuer": "Mosip", + "credentialConfigurationId": "MosipVerifiableCredential", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode":"invalid_request" +}' + + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_EmptyRedirectUri_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading credential with empty redirect uri along with google login and expects to fail + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_18 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": "authorization_code", + "code": "$ID:ESignet_AuthorizationCode_GoogleLogin_uin_All_Valid_sid_ForNeg_code$", + "redirectUri": "", + "codeVerifier": "$CODEVERIFIER$", + "issuer": "Mosip", + "credentialConfigurationId": "MosipVerifiableCredential", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode":"invalid_request" +}' + + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_SpaceInRedirectUri_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading credential with space in redirect uri along with google login and expects to fail + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_19 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": "authorization_code", + "code": "$ID:ESignet_AuthorizationCode_GoogleLogin_uin_All_Valid_sid_ForNeg_code$", + "redirectUri": " ", + "codeVerifier": "$CODEVERIFIER$", + "issuer": "Mosip", + "credentialConfigurationId": "MosipVerifiableCredential", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode":"invalid_request" +}' + + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_MissingRedirectUri_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading credential with missing redirect uri along with google login and expects to fail + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_20 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": "authorization_code", + "code": "$ID:ESignet_AuthorizationCode_GoogleLogin_uin_All_Valid_sid_ForNeg_code$", + "redirectUri": "$REMOVE$", + "codeVerifier": "$CODEVERIFIER$", + "issuer": "Mosip", + "credentialConfigurationId": "MosipVerifiableCredential", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode":"invalid_request" +}' + + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_NumericInRedirectUri_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading credential with numeric in redirect uri along with google login and expects to fail + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_21 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": "authorization_code", + "code": "$ID:ESignet_AuthorizationCode_GoogleLogin_uin_All_Valid_sid_ForNeg_code$", + "redirectUri": "8654678", + "codeVerifier": "$CODEVERIFIER$", + "issuer": "Mosip", + "credentialConfigurationId": "MosipVerifiableCredential", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode":"invalid_request" +}' + + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_InvalidCodeVerifier_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading credential with invalid code verifier along with google login and expects to fail + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_22 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": "authorization_code", + "code": "$ID:ESignet_AuthorizationCode_GoogleLogin_uin_All_Valid_sid_ForNeg_code$", + "redirectUri": "$INJIREDIRECTURI$", + "codeVerifier": "invalid", + "issuer": "Mosip", + "credentialConfigurationId": "MosipVerifiableCredential", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode":"invalid_request" +}' + + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_EmptyCodeVerifier_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading credential with empty code verifier along with google login and expects to fail + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_23 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": "authorization_code", + "code": "$ID:ESignet_AuthorizationCode_GoogleLogin_uin_All_Valid_sid_ForNeg_code$", + "redirectUri": "$INJIREDIRECTURI$", + "codeVerifier": "", + "issuer": "Mosip", + "credentialConfigurationId": "MosipVerifiableCredential", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode":"invalid_request" +}' + + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_SpaceInCodeVerifier_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading credential with space in code verifier along with google login and expects to fail + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_24 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": "authorization_code", + "code": "$ID:ESignet_AuthorizationCode_GoogleLogin_uin_All_Valid_sid_ForNeg_code$", + "redirectUri": "$INJIREDIRECTURI$", + "codeVerifier": " ", + "issuer": "Mosip", + "credentialConfigurationId": "MosipVerifiableCredential", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode":"invalid_request" +}' + + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_MissingCodeVerifier_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading credential with missing code verifier along with google login and expects to fail + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_25 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": "authorization_code", + "code": "$ID:ESignet_AuthorizationCode_GoogleLogin_uin_All_Valid_sid_ForNeg_code$", + "redirectUri": "$INJIREDIRECTURI$", + "codeVerifier": "$REMOVE$", + "issuer": "Mosip", + "credentialConfigurationId": "MosipVerifiableCredential", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode":"invalid_request" +}' + + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_NumericInCodeVerifier_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading credential with numeric in code verifier along with google login and expects to fail + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_26 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": "authorization_code", + "code": "$ID:ESignet_AuthorizationCode_GoogleLogin_uin_All_Valid_sid_ForNeg_code$", + "redirectUri": "$INJIREDIRECTURI$", + "codeVerifier": "8665542", + "issuer": "Mosip", + "credentialConfigurationId": "MosipVerifiableCredential", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode":"invalid_request" +}' + + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_InvalidIssuer_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading credential with invalid issuer along with google login and expects to fail + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_27 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": "authorization_code", + "code": "$ID:ESignet_AuthorizationCode_GoogleLogin_uin_All_Valid_sid_ForNeg_code$", + "redirectUri": "$INJIREDIRECTURI$", + "codeVerifier": "$CODEVERIFIER$", + "issuer": "invalid", + "credentialConfigurationId": "MosipVerifiableCredential", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode":"invalid_request" +}' + + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_EmptyIssuer_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading credential with empty issuer along with google login and expects to fail + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_28 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": "authorization_code", + "code": "$ID:ESignet_AuthorizationCode_GoogleLogin_uin_All_Valid_sid_ForNeg_code$", + "redirectUri": "$INJIREDIRECTURI$", + "codeVerifier": "$CODEVERIFIER$", + "issuer": "", + "credentialConfigurationId": "MosipVerifiableCredential", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode":"invalid_request" +}' + + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_SpaceInIssuer_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading credential with space in issuer along with google login and expects to fail + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_29 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": "authorization_code", + "code": "$ID:ESignet_AuthorizationCode_GoogleLogin_uin_All_Valid_sid_ForNeg_code$", + "redirectUri": "$INJIREDIRECTURI$", + "codeVerifier": "$CODEVERIFIER$", + "issuer": " ", + "credentialConfigurationId": "MosipVerifiableCredential", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode":"invalid_request" +}' + + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_MissingIssuer_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading credential with missing issuer along with google login and expects to fail + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_30 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": "authorization_code", + "code": "$ID:ESignet_AuthorizationCode_GoogleLogin_uin_All_Valid_sid_ForNeg_code$", + "redirectUri": "$INJIREDIRECTURI$", + "codeVerifier": "$CODEVERIFIER$", + "issuer": "$REMOVE$", + "credentialConfigurationId": "MosipVerifiableCredential", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode":"invalid_request" +}' + + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_NumericInIssuer_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading credential with numeric in issuer along with google login and expects to fail + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_31 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": "authorization_code", + "code": "$ID:ESignet_AuthorizationCode_GoogleLogin_uin_All_Valid_sid_ForNeg_code$", + "redirectUri": "$INJIREDIRECTURI$", + "codeVerifier": "$CODEVERIFIER$", + "issuer": "86654556", + "credentialConfigurationId": "MosipVerifiableCredential", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode":"invalid_request" +}' + + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_InvalidCredential_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading credential with invalid credential along with google login and expects to fail + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_32 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": "authorization_code", + "code": "$ID:ESignet_AuthorizationCode_GoogleLogin_uin_All_Valid_sid_ForNeg_code$", + "redirectUri": "$INJIREDIRECTURI$", + "codeVerifier": "$CODEVERIFIER$", + "issuer": "Mosip", + "credentialConfigurationId": "invalid", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode":"invalid_request" +}' + + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_EmptyCredential_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading credential with empty credential along with google login and expects to fail + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_33 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": "authorization_code", + "code": "$ID:ESignet_AuthorizationCode_GoogleLogin_uin_All_Valid_sid_ForNeg_code$", + "redirectUri": "$INJIREDIRECTURI$", + "codeVerifier": "$CODEVERIFIER$", + "issuer": "Mosip", + "credentialConfigurationId": "", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode":"invalid_request" +}' + + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_SpaceInCredential_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading credential with space in credential along with google login and expects to fail + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_34 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": "authorization_code", + "code": "$ID:ESignet_AuthorizationCode_GoogleLogin_uin_All_Valid_sid_ForNeg_code$", + "redirectUri": "$INJIREDIRECTURI$", + "codeVerifier": "$CODEVERIFIER$", + "issuer": "Mosip", + "credentialConfigurationId": " ", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode":"invalid_request" +}' + + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_MissingCredential_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading credential with missing credential along with google login and expects to fail + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_35 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": "authorization_code", + "code": "$ID:ESignet_AuthorizationCode_GoogleLogin_uin_All_Valid_sid_ForNeg_code$", + "redirectUri": "$INJIREDIRECTURI$", + "codeVerifier": "$CODEVERIFIER$", + "issuer": "Mosip", + "credentialConfigurationId": "$REMOVE$", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode":"invalid_request" +}' + + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_NumericInCredential_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading credential with numeric in credential along with google login and expects to fail + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_36 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": "authorization_code", + "code": "$ID:ESignet_AuthorizationCode_GoogleLogin_uin_All_Valid_sid_ForNeg_code$", + "redirectUri": "$INJIREDIRECTURI$", + "codeVerifier": "$CODEVERIFIER$", + "issuer": "Mosip", + "credentialConfigurationId": "655671754", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode":"invalid_request" +}' + + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_EmptyRequestBody_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading credential with empty request body with google login and expects to fail + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_37 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": "$REMOVE$", + "code": "$REMOVE$", + "redirectUri": "$REMOVE$", + "codeVerifier": "$REMOVE$", + "issuer": "$REMOVE$", + "credentialConfigurationId": "$REMOVE$", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode":"invalid_request" +}' + + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_WithoutLogin_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading credential without google login and expects to fail + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_39 + role: userDefinedCookie + restMethod: get + checkOnlyStatusCodeInResponse: true + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/responseCode + input: '{ + "grantType": "authorization_code", + "code": "$ID:ESignet_AuthorizationCode_GoogleLogin_uin_All_Valid_sid_ForNeg_code$", + "redirectUri": "$INJIREDIRECTURI$", + "codeVerifier": "$CODEVERIFIER$", + "issuer": "Mosip", + "credentialConfigurationId": "MosipVerifiableCredential", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "withoutLogin", + "cookieName": "SESSION" +}' + output: '{ + "responseCode": "401" +}' + + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_WithSessionExpired_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading credential with expired google login session and expects to fail + uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_40 + role: userDefinedCookie + restMethod: get + checkOnlyStatusCodeInResponse: true + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/responseCode + input: '{ + "grantType": "authorization_code", + "code": "$ID:ESignet_AuthorizationCode_GoogleLogin_uin_All_Valid_sid_ForNeg_code$", + "redirectUri": "$INJIREDIRECTURI$", + "codeVerifier": "$CODEVERIFIER$", + "issuer": "Mosip", + "credentialConfigurationId": "MosipVerifiableCredential", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "OGYwNWI5YWQtZjg0MS00NmM2LWJiZTgtOGRmMWYwMGYzNzcy", + "cookieName": "SESSION" +}' + output: '{ + "responseCode": "401" +}' \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredentialResult.hbs b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredentialResult.hbs new file mode 100644 index 000000000..757fa4a2e --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredentialResult.hbs @@ -0,0 +1,4 @@ +{ + "issuerDisplayName": "{{issuerDisplayName}}", + "credentialTypeDisplayName": "{{credentialTypeDisplayName}}" +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/FetchAllCredentials/FetchAllCredentials.hbs b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/FetchAllCredentials/FetchAllCredentials.hbs new file mode 100644 index 000000000..c3c22cf33 --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/FetchAllCredentials/FetchAllCredentials.hbs @@ -0,0 +1,6 @@ +{ + "cookie": "{{cookie}}", + "cookieName": "{{cookieName}}", + "walletId": "{{walletId}}", + "Accept-Language": "{{acceptLanguage}}" +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/FetchAllCredentials/FetchAllCredentials.yml b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/FetchAllCredentials/FetchAllCredentials.yml new file mode 100644 index 000000000..10924f636 --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/FetchAllCredentials/FetchAllCredentials.yml @@ -0,0 +1,122 @@ +FetchAllCredentials: + Mimoto_FetchAllCredentials_all_Valid_Smoke: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Get list of all credentials saved for the wallet + uniqueIdentifier: TC_Mimoto_FetchAllCredentials_01 + role: userDefinedCookie + restMethod: get + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/FetchAllCredentials/FetchAllCredentials + outputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/FetchAllCredentials/FetchAllCredentials + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "acceptLanguage": "en" +}' + output: '{ +}' + + Mimoto_FetchAllCredentials_Invalid_WalletId_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Get list of all credentials with invalid wallet id and expects it to fail + uniqueIdentifier: TC_Mimoto_FetchAllCredentials_02 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/FetchAllCredentials/FetchAllCredentials + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "invalid" +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_FetchAllCredentials_Empty_WalletId_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Get list of all credentials with empty wallet id and expects it to fail + uniqueIdentifier: TC_Mimoto_FetchAllCredentials_03 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/FetchAllCredentials/FetchAllCredentials + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "" +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_FetchAllCredentials_Space_WalletId_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Get list of all credentials with space wallet id and expects it to fail + uniqueIdentifier: TC_Mimoto_FetchAllCredentials_04 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/FetchAllCredentials/FetchAllCredentials + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": " " +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_FetchAllCredentials_Invalid_Session_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Get list of all credentials with invalid session and expects it to fail + uniqueIdentifier: TC_Mimoto_FetchAllCredentials_05 + role: userDefinedCookie + restMethod: get + checkOnlyStatusCodeInResponse: true + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/FetchAllCredentials/FetchAllCredentials + outputTemplate: mimoto/responseCode + input: '{ + "cookie": "invalid", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$" +}' + output: '{ + "responseCode": "401" +}' + + Mimoto_FetchAllCredentials_WithoutUnlock_Wallet_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Get list of all credentials without unlocking wallet and expects it to fail + uniqueIdentifier: TC_Mimoto_FetchAllCredentials_06 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/FetchAllCredentials/FetchAllCredentials + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_WithoutUnlock_all_Valid_Smoke_sid_walletId$" +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_FetchAllCredentials_Expired_Session_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Get list of all credentials with expired session and expects it to fail + uniqueIdentifier: TC_Mimoto_FetchAllCredentials_07 + role: userDefinedCookie + restMethod: get + checkOnlyStatusCodeInResponse: true + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/FetchAllCredentials/FetchAllCredentials + outputTemplate: mimoto/responseCode + input: '{ + "cookie": "OGYwNWI5YWQtZjg0MS00NmM2LWJiZTgtOGRmMWYwMGYzNzcy", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$" +}' + output: '{ + "responseCode": "401" +}' \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/FetchAllCredentials/FetchAllCredentialsResult.hbs b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/FetchAllCredentials/FetchAllCredentialsResult.hbs new file mode 100644 index 000000000..7a73a41bf --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/FetchAllCredentials/FetchAllCredentialsResult.hbs @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/OAuthDetailsRequest/OAuthDetailsRequest.hbs b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/OAuthDetailsRequest/OAuthDetailsRequest.hbs new file mode 100644 index 000000000..6dec068b5 --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/OAuthDetailsRequest/OAuthDetailsRequest.hbs @@ -0,0 +1,17 @@ +{ + "requestTime": "{{requestTime}}", + "request": { + "clientId": "{{clientId}}", + "scope": "{{scope}}", + "responseType": "{{responseType}}", + "redirectUri": "{{redirectUri}}", + "display": "{{display}}", + "prompt": "{{prompt}}", + "acrValues": "{{acrValues}}", + "nonce" : "{{nonce}}", + "state" : "{{state}}", + "claimsLocales" : "{{claimsLocales}}", + "codeChallenge" : "{{codeChallenge}}", + "codeChallengeMethod" : "{{codeChallengeMethod}}" + } +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/OAuthDetailsRequest/OAuthDetailsRequest.yml b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/OAuthDetailsRequest/OAuthDetailsRequest.yml new file mode 100644 index 000000000..bf688e3e2 --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/OAuthDetailsRequest/OAuthDetailsRequest.yml @@ -0,0 +1,56 @@ +OAuthDetailsRequestForGoogleLogin: + Mimoto_ESignet_OAuthDetailsRequest_GoogleLogin_all_Valid_Smoke_sid: + endPoint: /v1/esignet/authorization/v2/oauth-details + description: Creating Oauth's details with all valid parameters + uniqueIdentifier: TC_Mimoto_OAuthDetailsRequestForGoogleLogin_01 + role: resident + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/OAuthDetailsRequest/OAuthDetailsRequest + outputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/OAuthDetailsRequest/OAuthDetailsRequestResult + input: '{ + "requestTime": "$TIMESTAMP$", + "clientId": "$GETCLIENTIDFORMOSIPIDFROMMIMOTOACTUATOR$", + "scope": "mosip_identity_vc_ldp", + "responseType": "code", + "redirectUri": "$INJIREDIRECTURI$", + "display": "popup", + "prompt": "login", + "acrValues": "mosip:idp:acr:generated-code mosip:idp:acr:linked-wallet mosip:idp:acr:biometrics", + "nonce": "$UNIQUENONCEVALUEFORESIGNET$", + "state": "eree2311", + "claimsLocales": "en", + "codeChallenge": "$CODECHALLENGE$", + "codeChallengeMethod": "S256" +}' + output: '{ + +}' + + Mimoto_ESignet_OAuthDetailsRequest_GoogleLogin_all_Valid_sid_ForNeg: + endPoint: /v1/esignet/authorization/v2/oauth-details + description: Creating Oauth's details with all valid parameters for Neg scenario + uniqueIdentifier: TC_Mimoto_OAuthDetailsRequestForGoogleLogin_02 + role: resident + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/OAuthDetailsRequest/OAuthDetailsRequest + outputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/OAuthDetailsRequest/OAuthDetailsRequestResult + input: '{ + "requestTime": "$TIMESTAMP$", + "clientId": "$GETCLIENTIDFORMOSIPIDFROMMIMOTOACTUATOR$", + "scope": "mosip_identity_vc_ldp", + "responseType": "code", + "redirectUri": "$INJIREDIRECTURI$", + "display": "popup", + "prompt": "login", + "acrValues": "mosip:idp:acr:generated-code mosip:idp:acr:linked-wallet mosip:idp:acr:biometrics", + "nonce": "$UNIQUENONCEVALUEFORESIGNET$", + "state": "eree2311", + "claimsLocales": "en", + "codeChallenge": "$CODECHALLENGE$", + "codeChallengeMethod": "S256" +}' + output: '{ + +}' \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/OAuthDetailsRequest/OAuthDetailsRequestResult.hbs b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/OAuthDetailsRequest/OAuthDetailsRequestResult.hbs new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/OAuthDetailsRequest/OAuthDetailsRequestResult.hbs @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential.hbs b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential.hbs new file mode 100644 index 000000000..a384c2855 --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential.hbs @@ -0,0 +1,8 @@ +{ + "cookie": "{{cookie}}", + "cookieName": "{{cookieName}}", + "walletId": "{{walletId}}", + "credentialId": "{{credentialId}}", + "Accept-Language": "{{acceptLanguage}}", + "acceptHeader": "{{acceptHeader}}" +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential.yml b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential.yml new file mode 100644 index 000000000..b6cfbec1f --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential.yml @@ -0,0 +1,366 @@ +ViewCredential: + Mimoto_ViewCredential_all_Valid_Smoke: + endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId}?action=inline + description: View the credential saved for the wallet with credential ID + uniqueIdentifier: TC_Mimoto_ViewCredential_01 + role: userDefinedCookie + restMethod: get + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential + outputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "credentialId": "$ID:DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_All_Valid_Smoke_sid_credentialId$", + "acceptLanguage": "en", + "acceptHeader": "application/pdf" +}' + output: '{ +}' + + Mimoto_ViewCredential_MultipleCredential_all_Valid_Smoke: + endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId}?action=inline + description: View the another credential saved for the wallet with credential ID + uniqueIdentifier: TC_Mimoto_ViewCredential_02 + role: userDefinedCookie + restMethod: get + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential + outputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "credentialId": "$ID:DownloadStayProtectedIssuerCredentialWithGoogleLogin_SunBirdC_All_Valid_Smoke_sid_credentialId$", + "acceptLanguage": "$REMOVE$", + "acceptHeader": "application/pdf" +}' + output: '{ +}' + + Mimoto_ViewCredential_DownloadCredential_all_Valid_Smoke: + endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId}?action=download + description: Download the credential saved for the wallet with credential ID + uniqueIdentifier: TC_Mimoto_ViewCredential_03 + role: userDefinedCookie + restMethod: get + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential + outputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "credentialId": "$ID:DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_All_Valid_Smoke_sid_credentialId$", + "acceptLanguage": "en", + "acceptHeader": "application/pdf" +}' + output: '{ +}' + + Mimoto_ViewCredential_EmptyQueryParam_all_Valid: + endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId}?action= + description: View the credential saved for the wallet with credential ID when action query is empty + uniqueIdentifier: TC_Mimoto_ViewCredential_04 + role: userDefinedCookie + restMethod: get + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential + outputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "credentialId": "$ID:DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_All_Valid_Smoke_sid_credentialId$", + "acceptLanguage": "en", + "acceptHeader": "application/pdf" +}' + output: '{ +}' + + Mimoto_ViewCredential_SpaceQueryParam_all_Valid: + endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId}?action= + description: View the credential saved for the wallet with credential ID when action query has only space + uniqueIdentifier: TC_Mimoto_ViewCredential_05 + role: userDefinedCookie + restMethod: get + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential + outputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "credentialId": "$ID:DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_All_Valid_Smoke_sid_credentialId$", + "acceptLanguage": "en", + "acceptHeader": "application/pdf" +}' + output: '{ +}' + + Mimoto_ViewCredential_InvalidQueryParam_all_Valid: + endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId}?action=invalid + description: View the credential saved for the wallet with credential ID when action query as invalid + uniqueIdentifier: TC_Mimoto_ViewCredential_06 + role: userDefinedCookie + restMethod: get + checkOnlyStatusCodeInResponse: true + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential + outputTemplate: mimoto/responseCode + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "credentialId": "$ID:DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_All_Valid_Smoke_sid_credentialId$", + "acceptLanguage": "en", + "acceptHeader": "application/pdf" +}' + output: '{ + "responseCode": "400" +}' + + Mimoto_ViewCredential_Invalid_CredentialId_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId}?action=inline + description: View the credential saved for the wallet with invalid credential ID and expects it to fail + uniqueIdentifier: TC_Mimoto_ViewCredential_07 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "credentialId": "invalid", + "acceptLanguage": "en", + "acceptHeader": "application/pdf" +}' + output: '{ + "errorCode": "resource_not_found" +}' + + Mimoto_ViewCredential_Empty_CredentialId_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId}?action=inline + description: View the credential saved for the wallet with empty credential ID and expects it to fail + uniqueIdentifier: TC_Mimoto_ViewCredential_08 + role: userDefinedCookie + restMethod: get + checkOnlyStatusCodeInResponse: true + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential + outputTemplate: mimoto/responseCode + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "credentialId": "", + "acceptLanguage": "en", + "acceptHeader": "application/pdf" +}' + output: '{ + "responseCode": "404" +}' + + Mimoto_ViewCredential_SpaceIn_CredentialId_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId}?action=inline + description: View the credential saved for the wallet with space in credential ID and expects it to fail + uniqueIdentifier: TC_Mimoto_ViewCredential_09 + role: userDefinedCookie + restMethod: get + checkOnlyStatusCodeInResponse: true + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential + outputTemplate: mimoto/responseCode + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "credentialId": " ", + "acceptLanguage": "en", + "acceptHeader": "application/pdf" +}' + output: '{ + "responseCode": "400" +}' + + Mimoto_ViewCredential_Invalid_Wallet_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId}?action=inline + description: View the credential saved for the wallet with invalid wallet ID and expects it to fail + uniqueIdentifier: TC_Mimoto_ViewCredential_10 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "invalid", + "credentialId": "$ID:DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_All_Valid_Smoke_sid_credentialId$", + "acceptLanguage": "en", + "acceptHeader": "application/pdf" +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_ViewCredential_Empty_Wallet_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId}?action=inline + description: View the credential saved for the wallet with empty wallet ID and expects it to fail + uniqueIdentifier: TC_Mimoto_ViewCredential_11 + role: userDefinedCookie + restMethod: get + checkOnlyStatusCodeInResponse: true + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential + outputTemplate: mimoto/responseCode + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "", + "credentialId": "$ID:DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_All_Valid_Smoke_sid_credentialId$", + "acceptLanguage": "en", + "acceptHeader": "application/pdf" +}' + output: '{ + "responseCode": "404" +}' + + Mimoto_ViewCredential_SpaceIn_Wallet_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId}?action=inline + description: View the credential saved for the wallet with space in wallet ID and expects it to fail + uniqueIdentifier: TC_Mimoto_ViewCredential_12 + role: userDefinedCookie + restMethod: get + checkOnlyStatusCodeInResponse: true + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential + outputTemplate: mimoto/responseCode + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": " ", + "credentialId": "$ID:DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_All_Valid_Smoke_sid_credentialId$", + "acceptLanguage": "en", + "acceptHeader": "application/pdf" +}' + output: '{ + "responseCode": "400" +}' + + Mimoto_ViewCredential_Invalid_AcceptLanguage_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId}?action=inline + description: View the credential saved for the wallet with invalid accept language and expects it to fail + uniqueIdentifier: TC_Mimoto_ViewCredential_13 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "credentialId": "$ID:DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_All_Valid_Smoke_sid_credentialId$", + "acceptLanguage": "oo", + "acceptHeader": "application/pdf" +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_ViewCredential_SpaceIn_AcceptLanguage_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId}?action=inline + description: View the credential saved for the wallet with space in accept language and expects it to fail + uniqueIdentifier: TC_Mimoto_ViewCredential_14 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "credentialId": "$ID:DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_All_Valid_Smoke_sid_credentialId$", + "acceptLanguage": " ", + "acceptHeader": "application/pdf" +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_ViewCredential_Invalid_AcceptHeader_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId}?action=inline + description: View the credential saved for the wallet with invalid accept header and expects it to fail + uniqueIdentifier: TC_Mimoto_ViewCredential_14 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "credentialId": "$ID:DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_All_Valid_Smoke_sid_credentialId$", + "acceptLanguage": "en", + "acceptHeader": "invalid" +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_ViewCredential_Without_AcceptHeader_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId}?action=inline + description: View the credential saved for the wallet without accept header and expects it to fail + uniqueIdentifier: TC_Mimoto_ViewCredential_15 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "credentialId": "$ID:DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_All_Valid_Smoke_sid_credentialId$", + "acceptLanguage": "en", + "acceptHeader": "$REMOVE$" +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_ViewCredential_SpaceIn_AcceptHeader_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId}?action=inline + description: View the credential saved for the wallet space in accept header and expects it to fail + uniqueIdentifier: TC_Mimoto_ViewCredential_16 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "credentialId": "$ID:DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_All_Valid_Smoke_sid_credentialId$", + "acceptLanguage": "en", + "acceptHeader": " " +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_ViewCredential_WithExpired_Session_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId}?action=inline + description: View the credential saved for the wallet with expired token and expects it to fail + uniqueIdentifier: TC_Mimoto_ViewCredential_17 + role: userDefinedCookie + restMethod: get + checkOnlyStatusCodeInResponse: true + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential + outputTemplate: mimoto/responseCode + input: '{ + "cookie": "OGYwNWI5YWQtZjg0MS00NmM2LWJiZTgtOGRmMWYwMGYzNzcy", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "credentialId": "$ID:DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_All_Valid_Smoke_sid_credentialId$", + "acceptLanguage": "en", + "acceptHeader": "application/pdf" +}' + output: '{ + "responseCode": "401" +}' \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredentialAfterLogout.yml b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredentialAfterLogout.yml new file mode 100644 index 000000000..04f72fcb2 --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredentialAfterLogout.yml @@ -0,0 +1,21 @@ +ViewCredentialAfterLogout: + Mimoto_ViewCredential_AfterLogout_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId}?action=inline + description: View the credential saved for the wallet after logout and expects it to fail + uniqueIdentifier: TC_Mimoto_ViewCredential_18 + role: userDefinedCookie + restMethod: get + checkOnlyStatusCodeInResponse: true + inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential + outputTemplate: mimoto/responseCode + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "credentialId": "$ID:DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_All_Valid_Smoke_sid_credentialId$", + "acceptLanguage": "en", + "acceptHeader": "application/pdf" +}' + output: '{ + "responseCode": "401" +}' \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredentialResult.hbs b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredentialResult.hbs new file mode 100644 index 000000000..7a73a41bf --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredentialResult.hbs @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.hbs b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.hbs new file mode 100644 index 000000000..0e92bbf36 --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.hbs @@ -0,0 +1,15 @@ +{ + "encodedHash": "{{encodedHash}}", + "requestTime": "{{requestTime}}", + "request": { + "transactionId": "{{transactionId}}", + "individualId": "{{individualId}}", + "challengeList" : [ + { + "authFactorType" : "{{authFactorType}}", + "challenge" : "{{challenge}}", + "format": "{{format}}" + } + ] + } +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml new file mode 100644 index 000000000..36176f49b --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml @@ -0,0 +1,44 @@ +AuthenticateUserSunBirdCForGoogleLogin: + Mimoto_ESignet_AuthenticateUserSunBirdCForGoogleLogin_SunBirdC_Valid_Smoke: + endPoint: $ESIGNETMOCKBASEURL$/v1/esignet/authorization/authenticate + description: Authenticating user for downloading stayprotected credential with google login + uniqueIdentifier: TC_Mimoto_AuthenticateUserSunBirdCForGoogleLogin_01 + role: resident + restMethod: post + checkErrorsOnlyInResponse: true + validityCheckRequired: true + inputTemplate: mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC + outputTemplate: mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthenticateUserSunBirdC/AuthenticateUserSunBirdCResult + input: '{ + "encodedHash": "$ID:ESignet_OAuthDetailsRequest_GoogleLogin_SunBirdC_all_Valid_Smoke_sid_encodedResp$", + "requestTime": "$TIMESTAMP$", + "transactionId": "$ID:ESignet_OAuthDetailsRequest_GoogleLogin_SunBirdC_all_Valid_Smoke_sid_transactionId$", + "individualId": "$POLICYNUMBERFORSUNBIRDRC$", + "authFactorType" : "$SUNBIRDINSURANCEAUTHFACTORTYPE$", + "challenge" : "$CHALLENGEVALUEFORSUNBIRDC$", + "format": "base64url-encoded-json" + }' + output: '{ +}' + + Mimoto_ESignet_AuthenticateUserSunBirdCForGoogleLogin_SunBirdC_MultipleVC_Valid_Smoke: + endPoint: $ESIGNETMOCKBASEURL$/v1/esignet/authorization/authenticate + description: Authenticating user for downloading stayprotected credential with google login + uniqueIdentifier: TC_Mimoto_AuthenticateUserSunBirdCForGoogleLogin_02 + role: resident + restMethod: post + checkErrorsOnlyInResponse: true + validityCheckRequired: true + inputTemplate: mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC + outputTemplate: mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthenticateUserSunBirdC/AuthenticateUserSunBirdCResult + input: '{ + "encodedHash": "$ID:ESignet_OAuthDetailsRequest_GoogleLogin_SunBirdC_MultipleVC_all_Valid_Smoke_sid_encodedResp$", + "requestTime": "$TIMESTAMP$", + "transactionId": "$ID:ESignet_OAuthDetailsRequest_GoogleLogin_SunBirdC_MultipleVC_all_Valid_Smoke_sid_transactionId$", + "individualId": "$POLICYNUMBERFORSUNBIRDRC$", + "authFactorType" : "$SUNBIRDINSURANCEAUTHFACTORTYPE$", + "challenge" : "$CHALLENGEVALUEFORSUNBIRDC$", + "format": "base64url-encoded-json" + }' + output: '{ +}' \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthenticateUserSunBirdC/AuthenticateUserSunBirdCResult.hbs b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthenticateUserSunBirdC/AuthenticateUserSunBirdCResult.hbs new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthenticateUserSunBirdC/AuthenticateUserSunBirdCResult.hbs @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.hbs b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.hbs new file mode 100644 index 000000000..491dca1ba --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.hbs @@ -0,0 +1,19 @@ +{ + "encodedHash": "{{encodedHash}}", + "requestTime": "{{requestTime}}", + "request": { + "transactionId": "{{transactionId}}", + "acceptedClaims": [ + {{#each acceptedClaims}} + "{{claim}}" + {{#unless @last}},{{/unless}} + {{/each}} + ], + "permittedAuthorizeScopes": [ + {{#each permittedAuthorizeScopes}} + "{{scope}}" + {{#unless @last}},{{/unless}} + {{/each}} + ] + } +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.yml b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.yml new file mode 100644 index 000000000..aeb203528 --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.yml @@ -0,0 +1,38 @@ +AuthorizationCodeSunBirdCForGoogleLogin: + Mimoto_ESignet_AuthorizationCode_SunBirdCForGoogleLogin_SunBirdC_All_Valid_Smoke_sid: + endPoint: $ESIGNETMOCKBASEURL$/v1/esignet/authorization/auth-code + description: Generating authorization code for downloading sunbird VC with google login + uniqueIdentifier: TC_Mimoto_AuthorizationCodeSunBirdC_01 + role: resident + restMethod: post + checkErrorsOnlyInResponse: true + validityCheckRequired: true + inputTemplate: mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC + outputTemplate: mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdCResult + input: '{ + "encodedHash": "$ID:ESignet_OAuthDetailsRequest_GoogleLogin_SunBirdC_all_Valid_Smoke_sid_encodedResp$", + "requestTime": "$TIMESTAMP$", + "transactionId": "$ID:ESignet_OAuthDetailsRequest_GoogleLogin_SunBirdC_all_Valid_Smoke_sid_transactionId$", + "permittedAuthorizeScopes": [{scope: "sunbird_rc_insurance_vc_ldp"}] +}' + output: '{ +}' + + Mimoto_ESignet_AuthorizationCode_SunBirdCForGoogleLogin_MultipleVC_SunBirdC_All_Valid_Smoke_sid: + endPoint: $ESIGNETMOCKBASEURL$/v1/esignet/authorization/auth-code + description: Generating authorization code for downloading multiple sunbird VC with google login + uniqueIdentifier: TC_Mimoto_AuthorizationCodeSunBirdC_02 + role: resident + restMethod: post + checkErrorsOnlyInResponse: true + validityCheckRequired: true + inputTemplate: mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC + outputTemplate: mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdCResult + input: '{ + "encodedHash": "$ID:ESignet_OAuthDetailsRequest_GoogleLogin_SunBirdC_MultipleVC_all_Valid_Smoke_sid_encodedResp$", + "requestTime": "$TIMESTAMP$", + "transactionId": "$ID:ESignet_OAuthDetailsRequest_GoogleLogin_SunBirdC_MultipleVC_all_Valid_Smoke_sid_transactionId$", + "permittedAuthorizeScopes": [{scope: "sunbird_rc_insurance_vc_ldp"}] +}' + output: '{ +}' \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdCResult.hbs b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdCResult.hbs new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdCResult.hbs @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/DownloadIssuerCredential/DownloadIssuerCredential.hbs b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/DownloadIssuerCredential/DownloadIssuerCredential.hbs new file mode 100644 index 000000000..6d7e2f6ac --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/DownloadIssuerCredential/DownloadIssuerCredential.hbs @@ -0,0 +1,12 @@ +{ + "grantType": "{{grantType}}", + "code": "{{code}}", + "redirectUri": "{{redirectUri}}", + "codeVerifier": "{{codeVerifier}}", + "issuer": "{{issuer}}", + "credentialConfigurationId": "{{credentialConfigurationId}}", + "walletId": "{{walletId}}", + "cookie": "{{cookie}}", + "cookieName": "{{cookieName}}", + "Accept-Language": "{{acceptLanguage}}" +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/DownloadIssuerCredential/DownloadIssuerCredential.yml b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/DownloadIssuerCredential/DownloadIssuerCredential.yml new file mode 100644 index 000000000..1f4be6bb5 --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/DownloadIssuerCredential/DownloadIssuerCredential.yml @@ -0,0 +1,122 @@ +DownloadStayProtectedIssuerCredentialWithGoogleLogin: + Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_SunBirdC_All_Valid_Smoke_sid: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading sunbird credential with valid authorizationCode after google login + uniqueIdentifier: TC_Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_01 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/DownloadIssuerCredential/DownloadIssuerCredentialResult + input: '{ + "grantType": "authorization_code", + "code": "$ID:ESignet_AuthorizationCode_SunBirdCForGoogleLogin_SunBirdC_All_Valid_Smoke_sid_code$", + "redirectUri": "$INJIREDIRECTURI$", + "codeVerifier": "$CODEVERIFIER$", + "issuer": "StayProtected", + "credentialConfigurationId": "InsuranceCredential", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "acceptLanguage": "en" +}' + output: '{ + "issuerDisplayName": "StayProtected Insurance", + "credentialTypeDisplayName": "Health Insurance" +}' + + Mimoto_DownloadMultipleStayProtectedIssuerCredentialWithGoogleLogin_SunBirdC_All_Valid_Smoke_sid: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading Multiple sunbird credential for policy already downloaded with valid authorizationCode after google login + uniqueIdentifier: TC_Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_02 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/DownloadIssuerCredential/DownloadIssuerCredentialResult + input: '{ + "grantType": "authorization_code", + "code": "$ID:ESignet_AuthorizationCode_SunBirdCForGoogleLogin_MultipleVC_SunBirdC_All_Valid_Smoke_sid_code$", + "redirectUri": "$INJIREDIRECTURI$", + "codeVerifier": "$CODEVERIFIER$", + "issuer": "StayProtected", + "credentialConfigurationId": "InsuranceCredential", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "acceptLanguage": "" +}' + output: '{ + "issuerDisplayName": "StayProtected Insurance", + "credentialTypeDisplayName": "Health Insurance" +}' + + Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_SunBirdC_InvalidLocale_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading sunbird credential with valid authorizationCode after google login with invalid locale and expects it to fail + uniqueIdentifier: TC_Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_03 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": "authorization_code", + "code": "$ID:ESignet_AuthorizationCode_SunBirdCForGoogleLogin_SunBirdC_All_Valid_Smoke_sid_code$", + "redirectUri": "$INJIREDIRECTURI$", + "codeVerifier": "$CODEVERIFIER$", + "issuer": "StayProtected", + "credentialConfigurationId": "InsuranceCredential", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "acceptLanguage": "oo" +}' + output: '{ + "errorCode":"invalid_request" +}' + + Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_SunBirdC_SpaceInLocale_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading sunbird credential with valid authorizationCode after google login with space in locale and expects it to fail + uniqueIdentifier: TC_Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_04 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": "authorization_code", + "code": "$ID:ESignet_AuthorizationCode_SunBirdCForGoogleLogin_SunBirdC_All_Valid_Smoke_sid_code$", + "redirectUri": "$INJIREDIRECTURI$", + "codeVerifier": "$CODEVERIFIER$", + "issuer": "StayProtected", + "credentialConfigurationId": "InsuranceCredential", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "acceptLanguage": " " +}' + output: '{ + "errorCode":"invalid_request" +}' + + Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_SunBirdC_NumericInLocale_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/credentials + description: Downloading sunbird credential with valid authorizationCode after google login with numeric in locale and expects it to fail + uniqueIdentifier: TC_Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_05 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/DownloadIssuerCredential/DownloadIssuerCredential + outputTemplate: mimoto/error2 + input: '{ + "grantType": "authorization_code", + "code": "$ID:ESignet_AuthorizationCode_SunBirdCForGoogleLogin_SunBirdC_All_Valid_Smoke_sid_code$", + "redirectUri": "$INJIREDIRECTURI$", + "codeVerifier": "$CODEVERIFIER$", + "issuer": "StayProtected", + "credentialConfigurationId": "InsuranceCredential", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "acceptLanguage": "14" +}' + output: '{ + "errorCode":"invalid_request" +}' \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/DownloadIssuerCredential/DownloadIssuerCredentialResult.hbs b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/DownloadIssuerCredential/DownloadIssuerCredentialResult.hbs new file mode 100644 index 000000000..757fa4a2e --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/DownloadIssuerCredential/DownloadIssuerCredentialResult.hbs @@ -0,0 +1,4 @@ +{ + "issuerDisplayName": "{{issuerDisplayName}}", + "credentialTypeDisplayName": "{{credentialTypeDisplayName}}" +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.hbs b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.hbs new file mode 100644 index 000000000..6dec068b5 --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.hbs @@ -0,0 +1,17 @@ +{ + "requestTime": "{{requestTime}}", + "request": { + "clientId": "{{clientId}}", + "scope": "{{scope}}", + "responseType": "{{responseType}}", + "redirectUri": "{{redirectUri}}", + "display": "{{display}}", + "prompt": "{{prompt}}", + "acrValues": "{{acrValues}}", + "nonce" : "{{nonce}}", + "state" : "{{state}}", + "claimsLocales" : "{{claimsLocales}}", + "codeChallenge" : "{{codeChallenge}}", + "codeChallengeMethod" : "{{codeChallengeMethod}}" + } +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml new file mode 100644 index 000000000..250328ce9 --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml @@ -0,0 +1,56 @@ +OAuthDetailsRequestSunBirdCForGoogleLogin: + Mimoto_ESignet_OAuthDetailsRequest_GoogleLogin_SunBirdC_all_Valid_Smoke_sid: + endPoint: $ESIGNETMOCKBASEURL$/v1/esignet/authorization/v2/oauth-details + description: Getting auth details for downloading sunbird credentials with google login + uniqueIdentifier: TC_Mimoto_OAuthDetailsRequestSunBirdCForGoogleLogin_01 + role: resident + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC + outputTemplate: mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdCResult + input: '{ + "requestTime": "$TIMESTAMP$", + "clientId": "$GETCLIENTIDFORINSURANCEFROMMIMOTOACTUATOR$", + "scope": "sunbird_rc_insurance_vc_ldp", + "responseType": "code", + "redirectUri": "$INJIREDIRECTURI$", + "display": "popup", + "prompt": "login", + "acrValues": "mosip:idp:acr:knowledge", + "nonce": "$UNIQUENONCEVALUEFORESIGNET$", + "state": "eree2311", + "claimsLocales": "en", + "codeChallenge": "$CODECHALLENGE$", + "codeChallengeMethod": "S256" +}' + output: '{ + +}' + + Mimoto_ESignet_OAuthDetailsRequest_GoogleLogin_SunBirdC_MultipleVC_all_Valid_Smoke_sid: + endPoint: $ESIGNETMOCKBASEURL$/v1/esignet/authorization/v2/oauth-details + description: Getting auth details for downloading multiple sunbird credentials with google login + uniqueIdentifier: TC_Mimoto_OAuthDetailsRequestSunBirdCForGoogleLogin_02 + role: resident + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC + outputTemplate: mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdCResult + input: '{ + "requestTime": "$TIMESTAMP$", + "clientId": "$GETCLIENTIDFORINSURANCEFROMMIMOTOACTUATOR$", + "scope": "sunbird_rc_insurance_vc_ldp", + "responseType": "code", + "redirectUri": "$INJIREDIRECTURI$", + "display": "popup", + "prompt": "login", + "acrValues": "mosip:idp:acr:knowledge", + "nonce": "$UNIQUENONCEVALUEFORESIGNET$", + "state": "eree2311", + "claimsLocales": "en", + "codeChallenge": "$CODECHALLENGE$", + "codeChallengeMethod": "S256" +}' + output: '{ + +}' \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdCResult.hbs b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdCResult.hbs new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdCResult.hbs @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Users/GetUserProfile/GetUserProfile.hbs b/api-test/src/main/resources/mimoto/LoginFlow/Users/GetUserProfile/GetUserProfile.hbs new file mode 100644 index 000000000..1c946c7fc --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Users/GetUserProfile/GetUserProfile.hbs @@ -0,0 +1,4 @@ +{ + "cookie": "{{cookie}}", + "cookieName": "{{cookieName}}" +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Users/GetUserProfile/GetUserProfile.yml b/api-test/src/main/resources/mimoto/LoginFlow/Users/GetUserProfile/GetUserProfile.yml new file mode 100644 index 000000000..141a3757e --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Users/GetUserProfile/GetUserProfile.yml @@ -0,0 +1,17 @@ +GetUserProfile: + Mimoto_GetUserProfile_all_Valid_Smoke: + endPoint: /v1/mimoto/users/me + description: Get the user profile details for the session login + uniqueIdentifier: TC_Mimoto_GetUserProfile_01 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/Users/GetUserProfile/GetUserProfile + outputTemplate: mimoto/LoginFlow/Users/GetUserProfile/GetUserProfileResult + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "displayName": "Mosip test Cyberpwn", + "email": "mosiptestcyberpwn@gmail.com" +}' \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Users/GetUserProfile/GetUserProfileResult.hbs b/api-test/src/main/resources/mimoto/LoginFlow/Users/GetUserProfile/GetUserProfileResult.hbs new file mode 100644 index 000000000..2155b167a --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Users/GetUserProfile/GetUserProfileResult.hbs @@ -0,0 +1,4 @@ +{ + "displayName": "{{displayName}}", + "email": "{{email}}" +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Users/GetUserProfileAfterLogout/GetUserProfileAfterLogout.hbs b/api-test/src/main/resources/mimoto/LoginFlow/Users/GetUserProfileAfterLogout/GetUserProfileAfterLogout.hbs new file mode 100644 index 000000000..1c946c7fc --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Users/GetUserProfileAfterLogout/GetUserProfileAfterLogout.hbs @@ -0,0 +1,4 @@ +{ + "cookie": "{{cookie}}", + "cookieName": "{{cookieName}}" +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Users/GetUserProfileAfterLogout/GetUserProfileAfterLogout.yml b/api-test/src/main/resources/mimoto/LoginFlow/Users/GetUserProfileAfterLogout/GetUserProfileAfterLogout.yml new file mode 100644 index 000000000..1e68a1ae0 --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Users/GetUserProfileAfterLogout/GetUserProfileAfterLogout.yml @@ -0,0 +1,17 @@ +GetUserProfileAfterLogout: + Mimoto_GetUserProfileAfterLogout_all_Valid_Smoke: + endPoint: /v1/mimoto/users/me + description: Get the user profile details for the session login + uniqueIdentifier: TC_Mimoto_GetUserProfileAfterLogout_01 + role: userDefinedCookie + restMethod: get + checkOnlyStatusCodeInResponse: true + inputTemplate: mimoto/LoginFlow/Users/GetUserProfileAfterLogout/GetUserProfileAfterLogout + outputTemplate: mimoto/responseCode + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ + "responseCode": "401" +}' \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Users/GetUserProfileAfterLogout/GetUserProfileAfterLogoutResult.hbs b/api-test/src/main/resources/mimoto/LoginFlow/Users/GetUserProfileAfterLogout/GetUserProfileAfterLogoutResult.hbs new file mode 100644 index 000000000..2155b167a --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Users/GetUserProfileAfterLogout/GetUserProfileAfterLogoutResult.hbs @@ -0,0 +1,4 @@ +{ + "displayName": "{{displayName}}", + "email": "{{email}}" +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet.hbs b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet.hbs new file mode 100644 index 000000000..e8506e57c --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet.hbs @@ -0,0 +1,7 @@ +{ + "cookie": "{{cookie}}", + "cookieName": "{{cookieName}}", + "walletName": "{{walletName}}", + "walletPin": "{{walletPin}}", + "confirmWalletPin": "{{confirmWalletPin}}" +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet.yml b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet.yml new file mode 100644 index 000000000..5f46d3f7c --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet.yml @@ -0,0 +1,421 @@ +CreateWallet: + Mimoto_CreateWallet_all_Valid_Smoke_sid: + endPoint: /v1/mimoto/wallets + description: Creating new wallet with successful login + uniqueIdentifier: TC_Mimoto_CreateWallet_01 + role: userDefinedCookie + restMethod: post + inputTemplate: mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet + outputTemplate: mimoto/LoginFlow/Wallet/CreateWallet/CreateWalletResult + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletName": "AutomationWallet", + "walletPin": "123456", + "confirmWalletPin": "123456" +}' + output: '{ + "walletName": "AutomationWallet" +}' + + Mimoto_CreateWallet_WithoutUnlock_all_Valid_Smoke_sid: + endPoint: /v1/mimoto/wallets + description: Creating new wallet for the same user with successful login + uniqueIdentifier: TC_Mimoto_CreateWallet_02 + role: userDefinedCookie + restMethod: post + inputTemplate: mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet + outputTemplate: mimoto/LoginFlow/Wallet/CreateWallet/CreateWalletResult + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletName": "AutomationWalletWithoutUnlock", + "walletPin": "123456", + "confirmWalletPin": "123456" +}' + output: '{ + "walletName": "AutomationWalletWithoutUnlock" +}' + + Mimoto_CreateWallet_SameName_Valid: + endPoint: /v1/mimoto/wallets + description: Creating new wallet for the same user with same name with successful login + uniqueIdentifier: TC_Mimoto_CreateWallet_03 + role: userDefinedCookie + restMethod: post + inputTemplate: mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet + outputTemplate: mimoto/LoginFlow/Wallet/CreateWallet/CreateWalletResult + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletName": "AutomationWallet", + "walletPin": "123456", + "confirmWalletPin": "123456" +}' + output: '{ + "walletName": "AutomationWallet" +}' + + Mimoto_CreateWallet_WithoutLogin_Neg: + endPoint: /v1/mimoto/wallets + description: Creating new wallet without login and expects to fail + uniqueIdentifier: TC_Mimoto_CreateWallet_04 + role: userDefinedCookie + restMethod: post + checkOnlyStatusCodeInResponse: true + inputTemplate: mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet + outputTemplate: mimoto/responseCode + input: '{ + "cookie": "withoutLogin", + "cookieName": "SESSION", + "walletName": "AutomationWalletNeg1", + "walletPin": "123456", + "confirmWalletPin": "123456" +}' + output: '{ + "responseCode": "401" +}' + + Mimoto_CreateWallet_SessionExpired_Neg: + endPoint: /v1/mimoto/wallets + description: Creating new wallet with expired session and expects to fail + uniqueIdentifier: TC_Mimoto_CreateWallet_05 + role: userDefinedCookie + restMethod: post + checkOnlyStatusCodeInResponse: true + inputTemplate: mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet + outputTemplate: mimoto/responseCode + input: '{ + "cookie": "OGYwNWI5YWQtZjg0MS00NmM2LWJiZTgtOGRmMWYwMGYzNzcy", + "cookieName": "SESSION", + "walletName": "AutomationWalletNeg2", + "walletPin": "123456", + "confirmWalletPin": "123456" +}' + output: '{ + "responseCode": "401" +}' + + Mimoto_CreateWallet_InvalidWalletName_Neg: + endPoint: /v1/mimoto/wallets + description: Creating new wallet with invalid wallet name and expects to fail + uniqueIdentifier: TC_Mimoto_CreateWallet_06 + role: userDefinedCookie + restMethod: post + inputTemplate: mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletName": "********", + "walletPin": "123456", + "confirmWalletPin": "123456" +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_CreateWallet_EmptyWalletName_Neg: + endPoint: /v1/mimoto/wallets + description: Creating new wallet with empty wallet name and expects to fail + uniqueIdentifier: TC_Mimoto_CreateWallet_07 + role: userDefinedCookie + restMethod: post + inputTemplate: mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletName": "", + "walletPin": "123456", + "confirmWalletPin": "123456" +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_CreateWallet_SpaceInWalletName_Neg: + endPoint: /v1/mimoto/wallets + description: Creating new wallet with space in wallet name and expects to fail + uniqueIdentifier: TC_Mimoto_CreateWallet_08 + role: userDefinedCookie + restMethod: post + inputTemplate: mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletName": " ", + "walletPin": "123456", + "confirmWalletPin": "123456" +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_CreateWallet_MissingWalletName_Valid: + endPoint: /v1/mimoto/wallets + description: Creating new wallet with missing wallet name + uniqueIdentifier: TC_Mimoto_CreateWallet_09 + role: userDefinedCookie + restMethod: post + checkOnlyStatusCodeInResponse: true + inputTemplate: mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet + outputTemplate: mimoto/responseCode + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletName": "$REMOVE$", + "walletPin": "123456", + "confirmWalletPin": "123456" +}' + output: '{ + "responseCode": "200" +}' + + Mimoto_CreateWallet_MoreThan50Characters_WalletName_Neg: + endPoint: /v1/mimoto/wallets + description: Creating new wallet with more than 50 characters in wallet name and expects to fail + uniqueIdentifier: TC_Mimoto_CreateWallet_10 + role: userDefinedCookie + restMethod: post + inputTemplate: mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletName": "abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz", + "walletPin": "123456", + "confirmWalletPin": "123456" +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_CreateWallet_WalletNameWithSpaces_valid: + endPoint: /v1/mimoto/wallets + description: Creating new wallet with wallet name contains spaces + uniqueIdentifier: TC_Mimoto_CreateWallet_11 + role: userDefinedCookie + restMethod: post + inputTemplate: mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet + outputTemplate: mimoto/LoginFlow/Wallet/CreateWallet/CreateWalletResult + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletName": "Automation Wallet", + "walletPin": "123456", + "confirmWalletPin": "123456" +}' + output: '{ + "walletName": "Automation Wallet" +}' + + Mimoto_CreateWallet_WalletNameInSpecialCharacters_Neg: + endPoint: /v1/mimoto/wallets + description: Creating new wallet with special characters as wallet name and expects to fail + uniqueIdentifier: TC_Mimoto_CreateWallet_12 + role: userDefinedCookie + restMethod: post + inputTemplate: mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletName": "%$!*&^", + "walletPin": "123456", + "confirmWalletPin": "123456" +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_CreateWallet_WalletNameInNumbers_Valid: + endPoint: /v1/mimoto/wallets + description: Creating new wallet with numbers as wallet name + uniqueIdentifier: TC_Mimoto_CreateWallet_13 + role: userDefinedCookie + restMethod: post + inputTemplate: mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet + outputTemplate: mimoto/LoginFlow/Wallet/CreateWallet/CreateWalletResult + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletName": "5675441", + "walletPin": "123456", + "confirmWalletPin": "123456" +}' + output: '{ + "walletName": "5675441" +}' + + Mimoto_CreateWallet_MoreThan6Digits_WalletPin_Neg: + endPoint: /v1/mimoto/wallets + description: Creating new wallet with wallet pin with more than 6 digits and expects to fail + uniqueIdentifier: TC_Mimoto_CreateWallet_14 + role: userDefinedCookie + restMethod: post + inputTemplate: mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletName": "AutomationWalletNeg3", + "walletPin": "12345678", + "confirmWalletPin": "12345678" +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_CreateWallet_Empty_WalletPin_Neg: + endPoint: /v1/mimoto/wallets + description: Creating new wallet with empty wallet pin and expects to fail + uniqueIdentifier: TC_Mimoto_CreateWallet_15 + role: userDefinedCookie + restMethod: post + inputTemplate: mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletName": "AutomationWalletNeg4", + "walletPin": "", + "confirmWalletPin": "" +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_CreateWallet_Space_WalletPin_Neg: + endPoint: /v1/mimoto/wallets + description: Creating new wallet with space in wallet pin and expects to fail + uniqueIdentifier: TC_Mimoto_CreateWallet_16 + role: userDefinedCookie + restMethod: post + inputTemplate: mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletName": "AutomationWalletNeg4", + "walletPin": " ", + "confirmWalletPin": " " +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_CreateWallet_Missing_WalletPin_Neg: + endPoint: /v1/mimoto/wallets + description: Creating new wallet with missing wallet pin and expects to fail + uniqueIdentifier: TC_Mimoto_CreateWallet_17 + role: userDefinedCookie + restMethod: post + inputTemplate: mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletName": "AutomationWalletNeg4", + "walletPin": "$REMOVE$", + "confirmWalletPin": "123456" +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_CreateWallet_invalid_WalletPin_Neg: + endPoint: /v1/mimoto/wallets + description: Creating new wallet with invalid wallet pin and expects to fail + uniqueIdentifier: TC_Mimoto_CreateWallet_18 + role: userDefinedCookie + restMethod: post + inputTemplate: mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletName": "AutomationWalletNeg4", + "walletPin": "12345", + "confirmWalletPin": "12345" +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_CreateWallet_StringValue_WalletPin_Neg: + endPoint: /v1/mimoto/wallets + description: Creating new wallet with string value in wallet pin and expects to fail + uniqueIdentifier: TC_Mimoto_CreateWallet_19 + role: userDefinedCookie + restMethod: post + inputTemplate: mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletName": "AutomationWalletNeg4", + "walletPin": "abcdef", + "confirmWalletPin": "abcdef" +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_CreateWallet_SpecialCharacters_WalletPin_Neg: + endPoint: /v1/mimoto/wallets + description: Creating new wallet with special characters in wallet pin and expects to fail + uniqueIdentifier: TC_Mimoto_CreateWallet_20 + role: userDefinedCookie + restMethod: post + inputTemplate: mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletName": "AutomationWalletNeg4", + "walletPin": "^%$@*!", + "confirmWalletPin": "^%$@*!" +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_CreateWallet_WalletPin_ConfirmWalletPin_Mismatch_Neg: + endPoint: /v1/mimoto/wallets + description: Creating new wallet with wallet pin and confirm wallet pin mismatch and expects to fail + uniqueIdentifier: TC_Mimoto_CreateWallet_21 + role: userDefinedCookie + restMethod: post + inputTemplate: mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletName": "AutomationWalletNeg4", + "walletPin": "123456", + "confirmWalletPin": "654321" +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_CreateWallet_Without_WalletPin_And_WalletName_Neg: + endPoint: /v1/mimoto/wallets + description: Creating new wallet without wallet pin and wallet name and expects to fail + uniqueIdentifier: TC_Mimoto_CreateWallet_22 + role: userDefinedCookie + restMethod: post + inputTemplate: mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletName": "$REMOVE$", + "walletPin": "$REMOVE$", + "confirmWalletPin": "$REMOVE$" +}' + output: '{ + "errorCode": "invalid_request" +}' \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Wallet/CreateWallet/CreateWalletResult.hbs b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/CreateWallet/CreateWalletResult.hbs new file mode 100644 index 000000000..c6fe5ba21 --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/CreateWallet/CreateWalletResult.hbs @@ -0,0 +1,3 @@ +{ + "walletName": "{{walletName}}" +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Wallet/DeleteWallet/DeleteWallet.hbs b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/DeleteWallet/DeleteWallet.hbs new file mode 100644 index 000000000..3ed69cbaa --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/DeleteWallet/DeleteWallet.hbs @@ -0,0 +1,5 @@ +{ + "cookie": "{{cookie}}", + "cookieName": "{{cookieName}}", + "walletId": "{{walletId}}" +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Wallet/DeleteWallet/DeleteWallet.yml b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/DeleteWallet/DeleteWallet.yml new file mode 100644 index 000000000..695fd7d7e --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/DeleteWallet/DeleteWallet.yml @@ -0,0 +1,122 @@ +UnlockWallet: + Mimoto_DeleteWallet_all_Valid_Smoke: + endPoint: /v1/mimoto/wallets/{walletId} + description: Delete the wallet that is created + uniqueIdentifier: TC_Mimoto_DeleteWallet_01 + role: userDefinedCookie + restMethod: delete + checkOnlyStatusCodeInResponse: true + inputTemplate: mimoto/LoginFlow/Wallet/DeleteWallet/DeleteWallet + outputTemplate: mimoto/responseCode + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$" +}' + output: '{ + "responseCode": "200" +}' + + Mimoto_DeleteWallet_AlreadyDeleted_Neg: + endPoint: /v1/mimoto/wallets/{walletId} + description: Delete the wallet that is already deleted and expects it to fail + uniqueIdentifier: TC_Mimoto_DeleteWallet_02 + role: userDefinedCookie + restMethod: delete + inputTemplate: mimoto/LoginFlow/Wallet/DeleteWallet/DeleteWallet + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$" +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_DeleteWallet_Invalid_WalletId_Neg: + endPoint: /v1/mimoto/wallets/{walletId} + description: Delete the wallet with invalid wallet id and expects it to fail + uniqueIdentifier: TC_Mimoto_DeleteWallet_03 + role: userDefinedCookie + restMethod: delete + inputTemplate: mimoto/LoginFlow/Wallet/DeleteWallet/DeleteWallet + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "invalid" +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_DeleteWallet_Empty_WalletId_Neg: + endPoint: /v1/mimoto/wallets/{walletId} + description: Delete the wallet with empty wallet id and expects it to fail + uniqueIdentifier: TC_Mimoto_DeleteWallet_04 + role: userDefinedCookie + restMethod: delete + inputTemplate: mimoto/LoginFlow/Wallet/DeleteWallet/DeleteWallet + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "" +}' + output: '{ + "errorCode": "internal_server_error" +}' + + Mimoto_DeleteWallet_Space_WalletId_Neg: + endPoint: /v1/mimoto/wallets/{walletId} + description: Delete the wallet with space wallet id and expects it to fail + uniqueIdentifier: TC_Mimoto_DeleteWallet_05 + role: userDefinedCookie + restMethod: delete + inputTemplate: mimoto/LoginFlow/Wallet/DeleteWallet/DeleteWallet + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": " " +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_DeleteWallet_WithoutLogin_Neg: + endPoint: /v1/mimoto/wallets/{walletId} + description: Delete the wallet without login session and expects it to fail + uniqueIdentifier: TC_Mimoto_DeleteWallet_06 + role: userDefinedCookie + restMethod: delete + checkOnlyStatusCodeInResponse: true + inputTemplate: mimoto/LoginFlow/Wallet/DeleteWallet/DeleteWallet + outputTemplate: mimoto/responseCode + input: '{ + "cookie": "withoutLogin", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$" +}' + output: '{ + "responseCode": "401" +}' + + Mimoto_DeleteWallet_ExpiredSession_Neg: + endPoint: /v1/mimoto/wallets/{walletId} + description: Delete the wallet with expired login session and expects it to fail + uniqueIdentifier: TC_Mimoto_DeleteWallet_07 + role: userDefinedCookie + restMethod: delete + checkOnlyStatusCodeInResponse: true + inputTemplate: mimoto/LoginFlow/Wallet/DeleteWallet/DeleteWallet + outputTemplate: mimoto/responseCode + input: '{ + "cookie": "OGYwNWI5YWQtZjg0MS00NmM2LWJiZTgtOGRmMWYwMGYzNzcy", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$" +}' + output: '{ + "responseCode": "401" +}' \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Wallet/DeleteWallet/DeleteWalletResult.hbs b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/DeleteWallet/DeleteWalletResult.hbs new file mode 100644 index 000000000..7a73a41bf --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/DeleteWallet/DeleteWalletResult.hbs @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Wallet/GetWallets/GetWallets.hbs b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/GetWallets/GetWallets.hbs new file mode 100644 index 000000000..1c946c7fc --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/GetWallets/GetWallets.hbs @@ -0,0 +1,4 @@ +{ + "cookie": "{{cookie}}", + "cookieName": "{{cookieName}}" +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Wallet/GetWallets/GetWallets.yml b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/GetWallets/GetWallets.yml new file mode 100644 index 000000000..ffd511a23 --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/GetWallets/GetWallets.yml @@ -0,0 +1,50 @@ +GetWallets: + Mimoto_GetWallets_all_Valid_Smoke: + endPoint: /v1/mimoto/wallets + description: Get list of all the wallets that is present in DB + uniqueIdentifier: TC_Mimoto_GetWallets_01 + role: userDefinedCookie + restMethod: get + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/LoginFlow/Wallet/GetWallets/GetWallets + outputTemplate: mimoto/LoginFlow/Wallet/GetWallets/GetWalletsResult + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION" +}' + output: '{ +}' + + Mimoto_GetWallets_WithoutLogin_Neg: + endPoint: /v1/mimoto/wallets + description: Get list of all the wallets that is present in DB without login and expects to fail + uniqueIdentifier: TC_Mimoto_GetWallets_02 + role: userDefinedCookie + restMethod: get + checkOnlyStatusCodeInResponse: true + inputTemplate: mimoto/LoginFlow/Wallet/GetWallets/GetWallets + outputTemplate: mimoto/responseCode + input: '{ + "cookie": "withoutLogin", + "cookieName": "SESSION" +}' + output: '{ + "responseCode": "401" +}' + + Mimoto_GetWallets_WithExpiredSession_Neg: + endPoint: /v1/mimoto/wallets + description: Get list of all the wallets that is present in DB with expired login and expects to fail + uniqueIdentifier: TC_Mimoto_GetWallets_03 + role: userDefinedCookie + restMethod: get + checkOnlyStatusCodeInResponse: true + inputTemplate: mimoto/LoginFlow/Wallet/GetWallets/GetWallets + outputTemplate: mimoto/responseCode + input: '{ + "cookie": "OGYwNWI5YWQtZjg0MS00NmM2LWJiZTgtOGRmMWYwMGYzNzcy", + "cookieName": "SESSION" +}' + output: '{ + "responseCode": "401" +}' \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Wallet/GetWallets/GetWalletsResult.hbs b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/GetWallets/GetWalletsResult.hbs new file mode 100644 index 000000000..7a73a41bf --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/GetWallets/GetWalletsResult.hbs @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWallet/UnlockWallet.hbs b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWallet/UnlockWallet.hbs new file mode 100644 index 000000000..59db2a6ff --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWallet/UnlockWallet.hbs @@ -0,0 +1,6 @@ +{ + "cookie": "{{cookie}}", + "cookieName": "{{cookieName}}", + "walletId": "{{walletId}}", + "walletPin": "{{walletPin}}" +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWallet/UnlockWallet.yml b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWallet/UnlockWallet.yml new file mode 100644 index 000000000..ced8054b5 --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWallet/UnlockWallet.yml @@ -0,0 +1,92 @@ +UnlockWallet: + Mimoto_UnlockWallet_all_Valid_Smoke: + endPoint: /v1/mimoto/wallets/{walletId}/unlock + description: Unlock the wallet that is created + uniqueIdentifier: TC_Mimoto_UnlockWallet_01 + role: userDefinedCookie + restMethod: post + inputTemplate: mimoto/LoginFlow/Wallet/UnlockWallet/UnlockWallet + outputTemplate: mimoto/LoginFlow/Wallet/UnlockWallet/UnlockWalletResult + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "walletPin": "123456" +}' + output: '{ + "walletName": "$ID:CreateWallet_all_Valid_Smoke_sid_walletName$", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$" +}' + + Mimoto_UnlockWallet_Invalid_WalletId_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/unlock + description: Unlock the wallet with invalid wallet id and expects it to fail + uniqueIdentifier: TC_Mimoto_UnlockWallet_02 + role: userDefinedCookie + restMethod: post + inputTemplate: mimoto/LoginFlow/Wallet/UnlockWallet/UnlockWallet + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "invalid", + "walletPin": "123456" +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_UnlockWallet_Incorrect_WalletPin_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/unlock + description: Unlock the wallet with incorrect wallet Pin and expects it to fail + uniqueIdentifier: TC_Mimoto_UnlockWallet_03 + role: userDefinedCookie + restMethod: post + inputTemplate: mimoto/LoginFlow/Wallet/UnlockWallet/UnlockWallet + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "walletPin": "876532" +}' + output: '{ + "errorCode": "invalid_pin" +}' + + Mimoto_UnlockWallet_WithoutLogin_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/unlock + description: Unlock the wallet without login session and expects it to fail + uniqueIdentifier: TC_Mimoto_UnlockWallet_04 + role: userDefinedCookie + restMethod: post + checkOnlyStatusCodeInResponse: true + inputTemplate: mimoto/LoginFlow/Wallet/UnlockWallet/UnlockWallet + outputTemplate: mimoto/responseCode + input: '{ + "cookie": "withoutLogin", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "walletPin": "123456" +}' + output: '{ + "responseCode": "401" +}' + + Mimoto_UnlockWallet_Invalid_WalletPin_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/unlock + description: Unlock the wallet with invalid wallet Pin and expects it to fail + uniqueIdentifier: TC_Mimoto_UnlockWallet_06 + role: userDefinedCookie + restMethod: post + inputTemplate: mimoto/LoginFlow/Wallet/UnlockWallet/UnlockWallet + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "walletPin": "87653" +}' + output: '{ + "errorCode": "invalid_request" +}' \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWallet/UnlockWalletResult.hbs b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWallet/UnlockWalletResult.hbs new file mode 100644 index 000000000..8a296140c --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWallet/UnlockWalletResult.hbs @@ -0,0 +1,4 @@ +{ + "walletName": "{{walletName}}", + "walletId": "{{walletId}}" +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWalletAfterDelete/UnlockWalletAfterDelete.hbs b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWalletAfterDelete/UnlockWalletAfterDelete.hbs new file mode 100644 index 000000000..59db2a6ff --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWalletAfterDelete/UnlockWalletAfterDelete.hbs @@ -0,0 +1,6 @@ +{ + "cookie": "{{cookie}}", + "cookieName": "{{cookieName}}", + "walletId": "{{walletId}}", + "walletPin": "{{walletPin}}" +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWalletAfterDelete/UnlockWalletAfterDelete.yml b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWalletAfterDelete/UnlockWalletAfterDelete.yml new file mode 100644 index 000000000..9d984aa3f --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWalletAfterDelete/UnlockWalletAfterDelete.yml @@ -0,0 +1,18 @@ +UnlockWalletAfterDelete: + Mimoto_UnlockWalletAfterDelete_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/unlock + description: Unlock the wallet that is already deleted and expects it to fail + uniqueIdentifier: TC_Mimoto_UnlockWalletAfterDelete_01 + role: userDefinedCookie + restMethod: post + inputTemplate: mimoto/LoginFlow/Wallet/UnlockWalletAfterDelete/UnlockWalletAfterDelete + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "walletPin": "123456" +}' + output: '{ + "errorCode": "invalid_request" +}' \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWalletAfterDelete/UnlockWalletAfterDeleteResult.hbs b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWalletAfterDelete/UnlockWalletAfterDeleteResult.hbs new file mode 100644 index 000000000..8a296140c --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWalletAfterDelete/UnlockWalletAfterDeleteResult.hbs @@ -0,0 +1,4 @@ +{ + "walletName": "{{walletName}}", + "walletId": "{{walletId}}" +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/error2.hbs b/api-test/src/main/resources/mimoto/error2.hbs new file mode 100644 index 000000000..bf46cc93a --- /dev/null +++ b/api-test/src/main/resources/mimoto/error2.hbs @@ -0,0 +1,3 @@ +{ + "errorCode": "{{errorCode}}" +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/responseCode.hbs b/api-test/src/main/resources/mimoto/responseCode.hbs new file mode 100644 index 000000000..f6db3ef22 --- /dev/null +++ b/api-test/src/main/resources/mimoto/responseCode.hbs @@ -0,0 +1,3 @@ +{ + "responseCode": "{{responseCode}}" +} \ No newline at end of file diff --git a/api-test/testNgXmlFiles/mimotoSuite.xml b/api-test/testNgXmlFiles/mimotoSuite.xml index e0489db36..6fe4e2675 100644 --- a/api-test/testNgXmlFiles/mimotoSuite.xml +++ b/api-test/testNgXmlFiles/mimotoSuite.xml @@ -173,6 +173,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 511afa4006e32c5d89b58dcc1589a0322a80c53d Mon Sep 17 00:00:00 2001 From: Mohanachandran S Date: Mon, 30 Jun 2025 21:35:17 +0530 Subject: [PATCH 709/860] MOSIP-41343 - Automated the inji web login api's Signed-off-by: Mohanachandran S --- .../apirig/mimoto/utils/MimotoUtil.java | 48 ++--- .../AuthenticateUser/AuthenticateUser.hbs | 2 +- .../AuthenticateUser/AuthenticateUser.yml | 24 +-- .../DownloadIssuerCredential.hbs | 8 +- .../AuthenticateUserSunBirdC.hbs | 2 +- .../DownloadIssuerCredential.hbs | 8 +- .../OAuthDetailsRequestSunBirdC.yml | 24 +-- api-test/testNgXmlFiles/mimotoSuite.xml | 185 +++++++++++------- 8 files changed, 168 insertions(+), 133 deletions(-) diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java index 0231c97fc..72bfc2e70 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java @@ -341,34 +341,34 @@ public static String getValueFromMimotoActuator(String section, String key) { private static String getGoogleIdToken() { String idToken = null; - + Map requestMap = new HashMap<>(); requestMap.put("clientId", MimotoConfigManager.getproperty("google.client.id")); requestMap.put("clientSecret", MimotoConfigManager.getproperty("google.client.secret")); requestMap.put("refreshToken", MimotoConfigManager.getproperty("google.refresh.token")); requestMap.put("grant_type", "refresh_token"); - String url = props.getProperty("googleIdToken"); - - Response response = RestClient.postRequestWithFormDataBody(url, requestMap); - - if (response.getStatusCode() != 200) { - String errorResponse = response.getBody().toString(); - throw new RuntimeException("Failed to get ID token. HTTP status code: " - + response.getStatusCode() + ", response body: " + errorResponse); - } - - JSONObject jsonObject = new JSONObject(response.getBody().asString()); - - if (jsonObject != null) { - idToken = jsonObject.get("id_token").toString(); - } - - if (idToken == null || idToken.isEmpty()) { - throw new RuntimeException("id_token not found in response: " + response); - } - - logger.info("Obtained id_token: " + idToken); // Debug log - return idToken; - + String url = props.getProperty("googleIdToken"); + + Response response = RestClient.postRequestWithFormDataBody(url, requestMap); + + if (response.getStatusCode() != 200) { + String errorResponse = response.getBody().toString(); + throw new RuntimeException("Failed to get ID token. HTTP status code: " + response.getStatusCode() + + ", response body: " + errorResponse); + } + + JSONObject jsonObject = new JSONObject(response.getBody().asString()); + + if (jsonObject != null) { + idToken = jsonObject.get("id_token").toString(); + } + + if (idToken == null || idToken.isEmpty()) { + throw new RuntimeException("id_token not found in response: " + response); + } + + logger.info("Obtained id_token: " + idToken); // Debug log + return idToken; + } } \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthenticateUser/AuthenticateUser.hbs b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthenticateUser/AuthenticateUser.hbs index 887633e11..43ef2d127 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthenticateUser/AuthenticateUser.hbs +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthenticateUser/AuthenticateUser.hbs @@ -1,5 +1,5 @@ { - "encodedHash": "{{encodedHash}}", + "encodedHash": "{{encodedHash}}", "requestTime": "{{requestTime}}", "request": { "transactionId": "{{transactionId}}", diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthenticateUser/AuthenticateUser.yml b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthenticateUser/AuthenticateUser.yml index d3e1f0dd2..ba2db0ebe 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthenticateUser/AuthenticateUser.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthenticateUser/AuthenticateUser.yml @@ -11,16 +11,16 @@ AuthenticateUserForGoogleLogin: outputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthenticateUser/AuthenticateUserResult input: '{ "encodedHash": "$ID:ESignet_OAuthDetailsRequest_GoogleLogin_all_Valid_Smoke_sid_encodedResp$", - "requestTime": "$TIMESTAMP$", - "transactionId": "$ID:ESignet_OAuthDetailsRequest_GoogleLogin_all_Valid_Smoke_sid_transactionId$", - "individualId": "$ID:AddIdentity_downloadIssuerCredential_smoke_Pos_UIN$", - "authFactorType" : "OTP", - "challenge" : "$ID:AddIdentity_downloadIssuerCredential_smoke_Pos_EMAIL$", + "requestTime": "$TIMESTAMP$", + "transactionId": "$ID:ESignet_OAuthDetailsRequest_GoogleLogin_all_Valid_Smoke_sid_transactionId$", + "individualId": "$ID:AddIdentity_downloadIssuerCredential_smoke_Pos_UIN$", + "authFactorType" : "OTP", + "challenge" : "$ID:AddIdentity_downloadIssuerCredential_smoke_Pos_EMAIL$", "sendOtp":{ "encodedHash": "$ID:ESignet_OAuthDetailsRequest_GoogleLogin_all_Valid_Smoke_sid_encodedResp$", "requestTime": "$TIMESTAMP$", "transactionId": "$ID:ESignet_OAuthDetailsRequest_GoogleLogin_all_Valid_Smoke_sid_transactionId$", - "individualId": "$ID:AddIdentity_downloadIssuerCredential_smoke_Pos_UIN$", + "individualId": "$ID:AddIdentity_downloadIssuerCredential_smoke_Pos_UIN$", "otpChannels": [{channel: "email"},{channel: "phone"}], "sendOtpReqTemplate": "mimoto/SendOtpEsignet/SendOtp", "sendOtpEndPoint": "/v1/esignet/authorization/send-otp" @@ -46,16 +46,16 @@ AuthenticateUserForGoogleLogin: outputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthenticateUser/AuthenticateUserResult input: '{ "encodedHash": "$ID:ESignet_OAuthDetailsRequest_GoogleLogin_all_Valid_sid_ForNeg_encodedResp$", - "requestTime": "$TIMESTAMP$", - "transactionId": "$ID:ESignet_OAuthDetailsRequest_GoogleLogin_all_Valid_sid_ForNeg_transactionId$", - "individualId": "$ID:AddIdentity_downloadIssuerCredential_smoke_Pos_UIN$", - "authFactorType" : "OTP", - "challenge" : "$ID:AddIdentity_downloadIssuerCredential_smoke_Pos_EMAIL$", + "requestTime": "$TIMESTAMP$", + "transactionId": "$ID:ESignet_OAuthDetailsRequest_GoogleLogin_all_Valid_sid_ForNeg_transactionId$", + "individualId": "$ID:AddIdentity_downloadIssuerCredential_smoke_Pos_UIN$", + "authFactorType" : "OTP", + "challenge" : "$ID:AddIdentity_downloadIssuerCredential_smoke_Pos_EMAIL$", "sendOtp":{ "encodedHash": "$ID:ESignet_OAuthDetailsRequest_GoogleLogin_all_Valid_sid_ForNeg_encodedResp$", "requestTime": "$TIMESTAMP$", "transactionId": "$ID:ESignet_OAuthDetailsRequest_GoogleLogin_all_Valid_sid_ForNeg_transactionId$", - "individualId": "$ID:AddIdentity_downloadIssuerCredential_smoke_Pos_UIN$", + "individualId": "$ID:AddIdentity_downloadIssuerCredential_smoke_Pos_UIN$", "otpChannels": [{channel: "email"},{channel: "phone"}], "sendOtpReqTemplate": "mimoto/SendOtpEsignet/SendOtp", "sendOtpEndPoint": "/v1/esignet/authorization/send-otp" diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential.hbs b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential.hbs index b72d841c5..c877ba377 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential.hbs +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential.hbs @@ -1,8 +1,8 @@ { - "grantType": "{{grantType}}", - "code": "{{code}}", - "redirectUri": "{{redirectUri}}", - "codeVerifier": "{{codeVerifier}}", + "grantType": "{{grantType}}", + "code": "{{code}}", + "redirectUri": "{{redirectUri}}", + "codeVerifier": "{{codeVerifier}}", "issuer": "{{issuer}}", "credentialConfigurationId": "{{credentialConfigurationId}}", "walletId": "{{walletId}}", diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.hbs b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.hbs index 0e92bbf36..d58a65555 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.hbs +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.hbs @@ -1,5 +1,5 @@ { - "encodedHash": "{{encodedHash}}", + "encodedHash": "{{encodedHash}}", "requestTime": "{{requestTime}}", "request": { "transactionId": "{{transactionId}}", diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/DownloadIssuerCredential/DownloadIssuerCredential.hbs b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/DownloadIssuerCredential/DownloadIssuerCredential.hbs index 6d7e2f6ac..b358f636c 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/DownloadIssuerCredential/DownloadIssuerCredential.hbs +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/DownloadIssuerCredential/DownloadIssuerCredential.hbs @@ -1,8 +1,8 @@ { - "grantType": "{{grantType}}", - "code": "{{code}}", - "redirectUri": "{{redirectUri}}", - "codeVerifier": "{{codeVerifier}}", + "grantType": "{{grantType}}", + "code": "{{code}}", + "redirectUri": "{{redirectUri}}", + "codeVerifier": "{{codeVerifier}}", "issuer": "{{issuer}}", "credentialConfigurationId": "{{credentialConfigurationId}}", "walletId": "{{walletId}}", diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml index 250328ce9..b3416e907 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml @@ -15,12 +15,12 @@ OAuthDetailsRequestSunBirdCForGoogleLogin: "responseType": "code", "redirectUri": "$INJIREDIRECTURI$", "display": "popup", - "prompt": "login", - "acrValues": "mosip:idp:acr:knowledge", - "nonce": "$UNIQUENONCEVALUEFORESIGNET$", - "state": "eree2311", - "claimsLocales": "en", - "codeChallenge": "$CODECHALLENGE$", + "prompt": "login", + "acrValues": "mosip:idp:acr:knowledge", + "nonce": "$UNIQUENONCEVALUEFORESIGNET$", + "state": "eree2311", + "claimsLocales": "en", + "codeChallenge": "$CODECHALLENGE$", "codeChallengeMethod": "S256" }' output: '{ @@ -43,12 +43,12 @@ OAuthDetailsRequestSunBirdCForGoogleLogin: "responseType": "code", "redirectUri": "$INJIREDIRECTURI$", "display": "popup", - "prompt": "login", - "acrValues": "mosip:idp:acr:knowledge", - "nonce": "$UNIQUENONCEVALUEFORESIGNET$", - "state": "eree2311", - "claimsLocales": "en", - "codeChallenge": "$CODECHALLENGE$", + "prompt": "login", + "acrValues": "mosip:idp:acr:knowledge", + "nonce": "$UNIQUENONCEVALUEFORESIGNET$", + "state": "eree2311", + "claimsLocales": "en", + "codeChallenge": "$CODECHALLENGE$", "codeChallengeMethod": "S256" }' output: '{ diff --git a/api-test/testNgXmlFiles/mimotoSuite.xml b/api-test/testNgXmlFiles/mimotoSuite.xml index 6fe4e2675..55169bf73 100644 --- a/api-test/testNgXmlFiles/mimotoSuite.xml +++ b/api-test/testNgXmlFiles/mimotoSuite.xml @@ -14,21 +14,23 @@ - + - + - + - + @@ -36,42 +38,46 @@ - - + + - + - + - + - - + + - + - - + + - + - + @@ -79,17 +85,19 @@ - - + + - + - + @@ -97,30 +105,34 @@ - + - + - + - + - + @@ -141,7 +153,8 @@ - + @@ -155,104 +168,116 @@ - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - - + + - + - - - + + + - + - - + + - + - + @@ -260,67 +285,75 @@ - - + + - + - - - + + + - + - - + + - + - - + + - + - + - + - + - + - + @@ -334,16 +367,18 @@ - + - - + + - + From add302592c57c813267b35f1e8615c537b466688 Mon Sep 17 00:00:00 2001 From: Mohanachandran S Date: Mon, 30 Jun 2025 22:07:38 +0530 Subject: [PATCH 710/860] MOSIP-41343 - Automated the inji web login api's Signed-off-by: Mohanachandran S --- api-test/README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/api-test/README.md b/api-test/README.md index a414add81..73b445d3c 100644 --- a/api-test/README.md +++ b/api-test/README.md @@ -166,6 +166,14 @@ To run the tests for both **Smoke** and **Regression**: 1. Ensure the correct environment and test level parameters are set. 2. Execute the tests as shown in the command above to validate mimoto API functionalities. +### Configuration maps + +Update the below **config maps** while running the automation in rancher or in mimoto.propertes file for local run: + +1. google.client.id +2. google.client.secret +3. google.refresh.token + --- ## License From 9fb87fa67cc335615a8cf285457b7be9e1a3a961 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Tue, 1 Jul 2025 15:11:34 +0530 Subject: [PATCH 711/860] injiweb-1605 removed the sonarqube workflow as it is not required Signed-off-by: Gurpreet41082 --- .github/workflows/sonarqube.yml | 74 --------------------------------- 1 file changed, 74 deletions(-) delete mode 100644 .github/workflows/sonarqube.yml diff --git a/.github/workflows/sonarqube.yml b/.github/workflows/sonarqube.yml deleted file mode 100644 index c92d40377..000000000 --- a/.github/workflows/sonarqube.yml +++ /dev/null @@ -1,74 +0,0 @@ -name: SonarQube checks -on: - push: - branches: - - develop - -jobs: - build: - name: Build - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - with: - fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis - - name: Set up JDK 11 - uses: actions/setup-java@v1 - with: - java-version: 11 - - name: Setup branch and env - run: | - # Strip git ref prefix from version - echo "BRANCH_NAME=$(echo ${{ github.ref }} | sed -e 's,.*/\(.*\),\1,')" >> $GITHUB_ENV - echo "GPG_TTY=$(tty)" >> $GITHUB_ENV - - name: Setup branch and GPG public key - run: | - # Strip git ref prefix from version - echo ${{ env.BRANCH_NAME }} - echo ${{ env.GPG_TTY }} - sudo apt-get --yes install gnupg2 - gpg2 --import ./.github/keys/mosipgpgkey_pub.gpg - gpg2 --quiet --batch --passphrase=${{secrets.gpg_secret}} --allow-secret-key-import --import ./.github/keys/mosipgpgkey_sec.gpg - - name: Cache SonarQube packages - uses: actions/cache@v4 - with: - path: ~/.sonar/cache - key: ${{ runner.os }}-sonar - restore-keys: ${{ runner.os }}-sonar - - name: Cache Maven packages - uses: actions/cache@v4 - with: - path: ~/.m2 - key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} - restore-keys: ${{ runner.os }}-m2 - - name: Build and analyze - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any - SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }} - run: mvn -Dgpg.skip -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.projectKey=mimoto - - - name: Install jq - run: sudo apt-get -y install jq - - - name: Check for critical bugs - run: | - # Fetch SonarQube issues using the API - SONAR_HOST_URL=https://sonarcloud.io - SONAR_PROJECT_KEY=mosip_mimoto - - # Fetch issues using the SonarQube API - response=$(curl -s "${SONAR_HOST_URL}/api/issues/search?componentKeys=${SONAR_PROJECT_KEY}&severities=CRITICAL&statuses=OPEN") - echo "The response is $response" - - # Extract the value of "issues" field - issues_count=$(echo "$response" | jq '.issues | length') - echo "The number of issues $issues_count" - - if [ "$issues_count" -eq 0 ]; then - echo "No critical issues found." - else - echo "Critical issues found. Failing the pipeline" - exit 1 - fi - From 8c5667b0f35757a58b58dac47716247a3bfcdcc4 Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Tue, 1 Jul 2025 22:06:13 +0530 Subject: [PATCH 712/860] [[INJIWEB-1620] add: validations for all fields in wallet add credential API * [INJIWEB-1620] add: validations for all fields in add credential to wallet API [INJIWEB-1620] empty code verifier validation [INJIWEB-1623] empty grantType validation Signed-off-by: KiruthikaJeyashankar * [INJIWEB-1620] refactor: remove redundant eq checks in test Signed-off-by: KiruthikaJeyashankar * [INJIWEB-1620] docs: update openapi doc update api doc with download credential into wallet's request validation error messages Signed-off-by: KiruthikaJeyashankar --------- Signed-off-by: KiruthikaJeyashankar --- docs/api-documentation-openapi.json | 30 +++- .../WalletCredentialsController.java | 7 +- .../dto/VerifiableCredentialRequestDTO.java | 4 + .../WalletCredentialsControllerTest.java | 129 +++++++++++++++--- 4 files changed, 147 insertions(+), 23 deletions(-) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index 3d5520f8e..6ce65f50f 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -2901,6 +2901,30 @@ "errorMessage": "credentialConfigurationId cannot be blank" } }, + "Invalid code": { + "value": { + "errorCode": "invalid_request", + "errorMessage": "code cannot be blank" + } + }, + "Invalid grantType": { + "value": { + "errorCode": "invalid_request", + "errorMessage": "grantType cannot be blank" + } + }, + "Invalid redirectUri": { + "value": { + "errorCode": "invalid_request", + "errorMessage": "redirectUri cannot be blank" + } + }, + "Invalid codeVerifier": { + "value": { + "errorCode": "invalid_request", + "errorMessage": "codeVerifier cannot be blank" + } + }, "Credential already exists for given Issuer and Credential Type in the wallet": { "value": { "errorCode": "credential_download_error", @@ -4100,7 +4124,11 @@ }, "required": [ "issuer", - "credentialConfigurationId" + "credentialConfigurationId", + "code", + "grantType", + "redirectUri", + "codeVerifier" ] }, "VerifiableCredentialResponseDTO": { diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index 884c3ffc7..c1f28d0e0 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -96,7 +96,12 @@ public WalletCredentialsController(WalletCredentialService walletCredentialServi @ExampleObject(name = "Invalid Wallet ID", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Invalid Wallet ID. Session and request Wallet ID do not match\"}"), @ExampleObject(name = "Wallet key not found in session", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet key not found in session\"}"), @ExampleObject(name = "Invalid issuer", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"issuerId cannot be blank\"}"), - @ExampleObject(name = "Invalid credentialConfigurationId", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"credentialConfigurationId cannot be blank\"}")})) + @ExampleObject(name = "Invalid credentialConfigurationId", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"credentialConfigurationId cannot be blank\"}"), + @ExampleObject(name = "Invalid code", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"code cannot be blank\"}"), + @ExampleObject(name = "Invalid grantType", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"grantType cannot be blank\"}"), + @ExampleObject(name = "Invalid redirectUri", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"redirectUri cannot be blank\"}"), + @ExampleObject(name = "Invalid codeVerifier", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"codeVerifier cannot be blank\"}")}) + ) @ApiResponse(responseCode = "500", description = "Internal server error - error occurred while serializing the VC response, encrypting the credential, or storing it", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "Credential already exists", value = "{\"errorCode\": \"credential_download_error\", \"errorMessage\": \"Duplicate credential for issuer and type\"}"), @ExampleObject(name = "Issuer config error", value = "{\"errorCode\": \"credential_download_error\", \"errorMessage\": \"Unable to fetch issuer configuration\"}"), @ExampleObject(name = "Failed to generate VC request", value = "{\"errorCode\": \"credential_download_error\", \"errorMessage\": \"Unable to generate credential request\"}"), @ExampleObject(name = "Signature verification failed", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"), @ExampleObject(name = "Unexpected server error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}")})) @ApiResponse(responseCode = "503", description = "Service unavailable - error while fetching issuer or auth server well-known, downloading credential, or DB connection failure", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "API is not accessible", value = "{\"errorCode\": \"credential_download_error\", \"errorMessage\": \"Failed to download and store the credential\"}"), @ExampleObject(name = "Failed to download credential", value = "{\"errorCode\": \"server_unavailable\", \"errorMessage\": \"Unable to download credential from issuer\"}"), @ExampleObject(name = "Database connection failure", value = "{\"errorCode\": \"database_unavailable\", \"errorMessage\": \"Failed to connect to the database\"}")})) @PostMapping diff --git a/src/main/java/io/mosip/mimoto/dto/VerifiableCredentialRequestDTO.java b/src/main/java/io/mosip/mimoto/dto/VerifiableCredentialRequestDTO.java index 0c0bb9fec..ce79af54a 100644 --- a/src/main/java/io/mosip/mimoto/dto/VerifiableCredentialRequestDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/VerifiableCredentialRequestDTO.java @@ -15,14 +15,18 @@ public class VerifiableCredentialRequestDTO { String credentialConfigurationId; @Schema(description = "The authorization code received from the authorization server") + @NotBlank(message = "code cannot be blank") String code; @Schema(description = "The grant type for the authorization request") + @NotBlank(message = "grantType cannot be blank") String grantType; @Schema(description = "The redirect URI for the authorization request") + @NotBlank(message = "redirectUri cannot be blank") String redirectUri; @Schema(description = "The code verifier used for PKCE (Proof Key for Code Exchange)") + @NotBlank(message = "codeVerifier cannot be blank") String codeVerifier; } diff --git a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java index 888fdefdc..e5784d3a0 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java @@ -63,6 +63,10 @@ public class WalletCredentialsControllerTest { private final String walletKey = "encodedKey"; private final String issuer = "issuer1"; private final String credentialConfigurationId = "type1"; + private final String code = "code"; + private final String grantType = "authorization-code"; + private final String redirectUri = "https://.../redirect"; + private final String codeVerifier = "code-verifier"; private final String locale = "en"; VerifiableCredentialRequestDTO verifiableCredentialRequest; @@ -90,8 +94,8 @@ public void setup() { // Tests for downloadCredential @Test public void shouldDownloadCredentialSuccessfully() throws Exception { - setIssuerAndCredentialConfigurationId(issuer, credentialConfigurationId); - when(idpService.getTokenResponse(eq(verifiableCredentialRequest))).thenReturn(new TokenResponseDTO()); + buildVerifiableCredentialRequest(issuer, credentialConfigurationId, code, grantType, redirectUri, codeVerifier); + when(idpService.getTokenResponse(verifiableCredentialRequest)).thenReturn(new TokenResponseDTO()); when(walletCredentialService.downloadVCAndStoreInDB(eq(issuer), eq(credentialConfigurationId), any(), eq(locale), eq(walletId), eq(walletKey))) .thenReturn(verifiableCredentialResponseDTO); @@ -112,8 +116,8 @@ public void shouldDownloadCredentialSuccessfully() throws Exception { @Test public void shouldReturnErroResponseWhenRequestedCredentialIsAlreadyAvailableInWallet() throws Exception { - setIssuerAndCredentialConfigurationId(issuer, credentialConfigurationId); - when(idpService.getTokenResponse(eq(verifiableCredentialRequest))).thenReturn(new TokenResponseDTO()); + buildVerifiableCredentialRequest(issuer, credentialConfigurationId, code, grantType, redirectUri, codeVerifier); + when(idpService.getTokenResponse(verifiableCredentialRequest)).thenReturn(new TokenResponseDTO()); when(walletCredentialService.downloadVCAndStoreInDB(eq(issuer), eq(credentialConfigurationId), any(), eq(locale), eq(walletId), eq(walletKey))) .thenThrow(new InvalidRequestException(CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), "Duplicate credential for issuer and type")); @@ -131,7 +135,7 @@ public void shouldReturnErroResponseWhenRequestedCredentialIsAlreadyAvailableInW @Test public void shouldReturnErrorResponseWhenSessionDoesNotHaveWalletIdAndKey() throws Exception { - setIssuerAndCredentialConfigurationId(issuer, credentialConfigurationId); + buildVerifiableCredentialRequest(issuer, credentialConfigurationId, code, grantType, redirectUri, codeVerifier); mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) .contentType(MediaType.APPLICATION_JSON) .accept(MediaType.APPLICATION_JSON) @@ -145,7 +149,7 @@ public void shouldReturnErrorResponseWhenSessionDoesNotHaveWalletIdAndKey() thro @Test public void shouldCallServiceWithCorrectParameters() throws Exception { - setIssuerAndCredentialConfigurationId(issuer, credentialConfigurationId); + buildVerifiableCredentialRequest(issuer, credentialConfigurationId, code, grantType, redirectUri, codeVerifier); mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) .contentType(MediaType.APPLICATION_JSON) .accept(MediaType.APPLICATION_JSON) @@ -154,14 +158,14 @@ public void shouldCallServiceWithCorrectParameters() throws Exception { .sessionAttr("wallet_id", walletId) .sessionAttr("wallet_key", walletKey)); - verify(idpService).getTokenResponse(eq(verifiableCredentialRequest)); + verify(idpService).getTokenResponse(verifiableCredentialRequest); verify(walletCredentialService ).downloadVCAndStoreInDB(eq(issuer), eq(credentialConfigurationId), any(), eq("fr"), eq(walletId), eq(walletKey)); } @Test public void shouldSetDefaultAndProceedWhenOptionalRequestParametersAreNotPassed() throws Exception { - setIssuerAndCredentialConfigurationId(issuer, credentialConfigurationId); + buildVerifiableCredentialRequest(issuer, credentialConfigurationId, code, grantType, redirectUri, codeVerifier); mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) .contentType(MediaType.APPLICATION_JSON) .accept(MediaType.APPLICATION_JSON) @@ -175,7 +179,7 @@ public void shouldSetDefaultAndProceedWhenOptionalRequestParametersAreNotPassed( @Test public void shouldThrowExceptionWhenInvalidLocaleIsPassed() throws Exception { - setIssuerAndCredentialConfigurationId(issuer, credentialConfigurationId); + buildVerifiableCredentialRequest(issuer, credentialConfigurationId, code, grantType, redirectUri, codeVerifier); mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) .contentType(MediaType.APPLICATION_JSON) @@ -193,7 +197,7 @@ public void shouldThrowExceptionWhenInvalidLocaleIsPassed() throws Exception { @Test public void shouldThrowInvalidRequestForWalletIdMismatch() throws Exception { when(httpSession.getAttribute("wallet_id")).thenReturn("differentWalletId"); - setIssuerAndCredentialConfigurationId(issuer, credentialConfigurationId); + buildVerifiableCredentialRequest(issuer, credentialConfigurationId, code, grantType, redirectUri, codeVerifier); mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) .accept(MediaType.APPLICATION_JSON) @@ -209,7 +213,7 @@ public void shouldThrowInvalidRequestForWalletIdMismatch() throws Exception { @Test public void shouldThrowInvalidRequestForMissingWalletKey() throws Exception { when(httpSession.getAttribute("wallet_key")).thenReturn(null); - setIssuerAndCredentialConfigurationId(issuer, credentialConfigurationId); + buildVerifiableCredentialRequest(issuer, credentialConfigurationId, code, grantType, redirectUri, codeVerifier); mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) .accept(MediaType.APPLICATION_JSON) @@ -222,8 +226,8 @@ public void shouldThrowInvalidRequestForMissingWalletKey() throws Exception { } @Test - public void shouldThrowInvalidRequestForMissingIssuerAndCredentialConfigurationId() throws Exception { - setIssuerAndCredentialConfigurationId(null, null); + public void shouldThrowInvalidRequestForMissingIssuerAndCredentialConfigurationIdInDownloadCredentialApi() throws Exception { + buildVerifiableCredentialRequest(null, null, code, grantType, redirectUri, codeVerifier); mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) .accept(MediaType.APPLICATION_JSON) .contentType(MediaType.APPLICATION_JSON) @@ -246,12 +250,27 @@ public void shouldThrowInvalidRequestForMissingIssuerAndCredentialConfigurationI } @Test - public void shouldThrowInvalidRequestForMissingCredentialConfigurationId() throws Exception { - setIssuerAndCredentialConfigurationId(issuer, null); + public void shouldThrowInvalidRequestForMissingIssuerInDownloadCredentialApi() throws Exception { + buildVerifiableCredentialRequest(null, credentialConfigurationId, code, grantType, redirectUri, codeVerifier); mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) .accept(MediaType.APPLICATION_JSON) .contentType(MediaType.APPLICATION_JSON) - .content("{\"issuer\":\"issuer1\",\"code\":null,\"grantType\":null,\"redirectUri\":null,\"codeVerifier\":null}") + .content(createRequestBody(verifiableCredentialRequest)) + .header("Accept-Language", "fr") + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errorCode").value("invalid_request")) + .andExpect(jsonPath("$.errorMessage").value("issuerId cannot be blank")); + } + + @Test + public void shouldThrowInvalidRequestForMissingCredentialConfigurationIdInDownloadCredentialApi() throws Exception { + buildVerifiableCredentialRequest(issuer, null, code, grantType, redirectUri, codeVerifier); + mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) + .accept(MediaType.APPLICATION_JSON) + .contentType(MediaType.APPLICATION_JSON) + .content(createRequestBody(verifiableCredentialRequest)) .header("Accept-Language", "fr") .sessionAttr("wallet_id", walletId) .sessionAttr("wallet_key", walletKey)) @@ -260,10 +279,74 @@ public void shouldThrowInvalidRequestForMissingCredentialConfigurationId() throw .andExpect(jsonPath("$.errorMessage").value("credentialConfigurationId cannot be blank")); } + @Test + public void shouldThrowInvalidRequestForMissingCodeInDownloadCredentialApi() throws Exception { + buildVerifiableCredentialRequest(issuer, credentialConfigurationId, null, grantType, redirectUri, codeVerifier); + + mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) + .accept(MediaType.APPLICATION_JSON) + .contentType(MediaType.APPLICATION_JSON) + .content(createRequestBody(verifiableCredentialRequest)) + .header("Accept-Language", "fr") + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errorCode").value("invalid_request")) + .andExpect(jsonPath("$.errorMessage").value("code cannot be blank")); + } + + @Test + public void shouldThrowInvalidRequestForMissingGrantTypeInDownloadCredentialApi() throws Exception { + buildVerifiableCredentialRequest(issuer, credentialConfigurationId, code, null, redirectUri, codeVerifier); + + mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) + .accept(MediaType.APPLICATION_JSON) + .contentType(MediaType.APPLICATION_JSON) + .content(createRequestBody(verifiableCredentialRequest)) + .header("Accept-Language", "fr") + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errorCode").value("invalid_request")) + .andExpect(jsonPath("$.errorMessage").value("grantType cannot be blank")); + } + + @Test + public void shouldThrowInvalidRequestForMissingRedirectUriInDownloadCredentialApi() throws Exception { + buildVerifiableCredentialRequest(issuer, credentialConfigurationId, code, grantType, null, codeVerifier); + + mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) + .accept(MediaType.APPLICATION_JSON) + .contentType(MediaType.APPLICATION_JSON) + .content(createRequestBody(verifiableCredentialRequest)) + .header("Accept-Language", "fr") + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errorCode").value("invalid_request")) + .andExpect(jsonPath("$.errorMessage").value("redirectUri cannot be blank")); + } + + @Test + public void shouldThrowInvalidRequestForMissingCodeVerifierInDownloadCredentialApi() throws Exception { + buildVerifiableCredentialRequest(issuer, credentialConfigurationId, code, grantType, redirectUri, null); + + mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) + .accept(MediaType.APPLICATION_JSON) + .contentType(MediaType.APPLICATION_JSON) + .content(createRequestBody(verifiableCredentialRequest)) + .header("Accept-Language", "fr") + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errorCode").value("invalid_request")) + .andExpect(jsonPath("$.errorMessage").value("codeVerifier cannot be blank")); + } + @Test public void shouldThrowServiceUnavailableForTokenResponseFailure() throws Exception { - setIssuerAndCredentialConfigurationId(issuer, credentialConfigurationId); - when(idpService.getTokenResponse(eq(verifiableCredentialRequest))) + buildVerifiableCredentialRequest(issuer, credentialConfigurationId, code, grantType, redirectUri, codeVerifier); + when(idpService.getTokenResponse(verifiableCredentialRequest)) .thenThrow(new ApiNotAccessibleException("API not accessible")); mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) @@ -277,7 +360,7 @@ public void shouldThrowServiceUnavailableForTokenResponseFailure() throws Except @Test public void shouldThrowServiceUnavailableForExternalServiceFailure() throws Exception { - setIssuerAndCredentialConfigurationId(issuer, credentialConfigurationId); + buildVerifiableCredentialRequest(issuer, credentialConfigurationId, code, grantType, redirectUri, codeVerifier); when(idpService.getTokenResponse(anyMap())).thenReturn(new TokenResponseDTO()); when(walletCredentialService.downloadVCAndStoreInDB(anyString(), anyString(), any(), anyString(), anyString(), anyString())) .thenThrow(new ExternalServiceUnavailableException("Service unavailable", "Service unavailable")); @@ -325,7 +408,7 @@ public void shouldThrowInvalidRequestForInvalidLocale() throws Exception { @Test public void shouldReturnErrorResponseOnFetchAllCredentialsForGivenWalletWhenSessionDoesNotHaveWalletId() throws Exception { - setIssuerAndCredentialConfigurationId(issuer, credentialConfigurationId); + buildVerifiableCredentialRequest(issuer, credentialConfigurationId, code, grantType, redirectUri, codeVerifier); mockMvc.perform(get("/wallets/{walletId}/credentials", walletId) .contentType(MediaType.APPLICATION_JSON) .accept(MediaType.APPLICATION_JSON) @@ -540,8 +623,12 @@ public void shouldThrowInvalidRequestForWalletIdMismatchInDeleteCredential() thr .andExpect(jsonPath("$.errorMessage").value("Invalid Wallet ID. Session and request Wallet ID do not match")); } - private void setIssuerAndCredentialConfigurationId(String issuer, String credentialConfigurationId) { + private void buildVerifiableCredentialRequest(String issuer, String credentialConfigurationId, String code, String grantType, String redirectUri, String codeVerifier) { verifiableCredentialRequest.setIssuer(issuer); verifiableCredentialRequest.setCredentialConfigurationId(credentialConfigurationId); + verifiableCredentialRequest.setCode(code); + verifiableCredentialRequest.setGrantType(grantType); + verifiableCredentialRequest.setRedirectUri(redirectUri); + verifiableCredentialRequest.setCodeVerifier(codeVerifier); } } \ No newline at end of file From dee008ae8564a9df737c4002ca7fda397d81d0f6 Mon Sep 17 00:00:00 2001 From: Famuda1234 <144789326+Famuda1234@users.noreply.github.com> Date: Wed, 2 Jul 2025 09:51:27 +0530 Subject: [PATCH 713/860] MOSIP-40379 -Removed ignore lines from mimoto (#751) Signed-off-by: G Famuda Mubashira --- .../AuthenticateUser/AuthenticateUser.yml | 4 +- .../mimoto/BindingOtp/BindingOtp.yml | 16 +--- .../mimoto/BindingOtp/BindingOtpResult.hbs | 3 - .../downloadwithreqidResult.hbs | 2 - .../RequestCredentials/ReqCredential.yml | 2 - .../ReqCredentialResult.hbs | 3 - .../main/resources/mimoto/SendOTP/SendOTP.yml | 2 - .../mimoto/ValidateOTP/ValidateOTP.yml | 3 - .../mimoto/ValidateOTP/ValidateOTPResult.hbs | 3 - .../mimoto/WalletBinding/WalletBinding.yml | 78 ------------------- .../WalletBinding/WalletBindingResult.hbs | 7 -- 11 files changed, 5 insertions(+), 118 deletions(-) diff --git a/api-test/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.yml b/api-test/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.yml index 3059f8921..a9be31dcb 100644 --- a/api-test/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.yml +++ b/api-test/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.yml @@ -28,8 +28,6 @@ AuthenticateUser: }' output: '{ "sendOtpResp":{ - "maskedMobile": "$IGNORE$", - "sendOtpResTemplate":"esignet/SendOtp/SendOtpResult", - "maskedEmail": "$IGNORE$" + "sendOtpResTemplate":"esignet/SendOtp/SendOtpResult" } }' \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/BindingOtp/BindingOtp.yml b/api-test/src/main/resources/mimoto/BindingOtp/BindingOtp.yml index 3341d8d2a..5fd79e94b 100644 --- a/api-test/src/main/resources/mimoto/BindingOtp/BindingOtp.yml +++ b/api-test/src/main/resources/mimoto/BindingOtp/BindingOtp.yml @@ -15,7 +15,6 @@ BindingOtp: "otpChannels": [{channel: "EMAIL"}] }' output: '{ - "maskedMobile": "$IGNORE$" }' Mimoto_BindingOtp_Valid_vid_All_Smoke: @@ -34,7 +33,6 @@ BindingOtp: "otpChannels": [{channel: "EMAIL"}] }' output: '{ - "maskedMobile": "$IGNORE$" }' Mimoto_BindingOtp_UIN_Invalid_individualId_Neg: @@ -180,8 +178,7 @@ BindingOtp: outputTemplate: mimoto/error input: '{ "requestTime": "$TIMESTAMP$", - "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", - "otpChannels": [{channel: "$IGNORE$"}] + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$" }' output: '{ "errors": [ @@ -246,8 +243,7 @@ BindingOtp: outputTemplate: mimoto/error input: '{ "requestTime": "$TIMESTAMP$", - "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", - "otpChannels": "$IGNORE$" + "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$" }' output: '{ "errors": [ @@ -377,7 +373,6 @@ BindingOtp: inputTemplate: mimoto/BindingOtp/BindingOtp outputTemplate: mimoto/error input: '{ - "requestTime": "$IGNORE$", "individualId": "$ID:AddIdentity_Binding_smoke_Pos_UIN$", "otpChannels": [{channel: "EMAIL"}] }' @@ -554,8 +549,7 @@ BindingOtp: outputTemplate: mimoto/error input: '{ "requestTime": "$TIMESTAMP$", - "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", - "otpChannels": [{channel: "$IGNORE$"}] + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$" }' output: '{ "errors": [ @@ -620,8 +614,7 @@ BindingOtp: outputTemplate: mimoto/error input: '{ "requestTime": "$TIMESTAMP$", - "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", - "otpChannels": "$IGNORE$" + "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$" }' output: '{ "errors": [ @@ -751,7 +744,6 @@ BindingOtp: inputTemplate: mimoto/BindingOtp/BindingOtp outputTemplate: mimoto/error input: '{ - "requestTime": "$IGNORE$", "individualId": "$ID:Generate_Perpetual_VID_Binding_Valid_Smoke_sid_vid$", "otpChannels": [{channel: "EMAIL"}] }' diff --git a/api-test/src/main/resources/mimoto/BindingOtp/BindingOtpResult.hbs b/api-test/src/main/resources/mimoto/BindingOtp/BindingOtpResult.hbs index e3cf37992..7a73a41bf 100644 --- a/api-test/src/main/resources/mimoto/BindingOtp/BindingOtpResult.hbs +++ b/api-test/src/main/resources/mimoto/BindingOtp/BindingOtpResult.hbs @@ -1,5 +1,2 @@ { - "response": { - "maskedMobile": "{{maskedMobile}}" - } } \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqidResult.hbs b/api-test/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqidResult.hbs index 6f35f5edd..7a73a41bf 100644 --- a/api-test/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqidResult.hbs +++ b/api-test/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/downloadwithreqidResult.hbs @@ -1,4 +1,2 @@ { - "credential": { - } } \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml b/api-test/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml index 0ac780700..7b76152a0 100644 --- a/api-test/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml +++ b/api-test/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml @@ -23,7 +23,6 @@ RequestCredentials: } }' output: '{ - "id": "$IGNORE$", "sendOtpResp":{ "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" } @@ -52,7 +51,6 @@ RequestCredentials: } }' output: '{ - "id": "$IGNORE$", "sendOtpResp":{ "sendOtpResTemplate":"mimoto/SendOTP/createSendOTPResult" } diff --git a/api-test/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredentialResult.hbs b/api-test/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredentialResult.hbs index b8eed36f5..7a73a41bf 100644 --- a/api-test/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredentialResult.hbs +++ b/api-test/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredentialResult.hbs @@ -1,5 +1,2 @@ { - "response": { - "id": "{{id}}" - } } \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/SendOTP/SendOTP.yml b/api-test/src/main/resources/mimoto/SendOTP/SendOTP.yml index 53b18ca43..9e71755c8 100644 --- a/api-test/src/main/resources/mimoto/SendOTP/SendOTP.yml +++ b/api-test/src/main/resources/mimoto/SendOTP/SendOTP.yml @@ -15,7 +15,6 @@ SendOTP: "individualIdType": "UIN" }' output: '{ - "maskedMobile": "$IGNORE$", "maskedEmail": "XXsXXeXXaXXoXXtXXn@gmail.com" }' @@ -35,7 +34,6 @@ SendOTP: "individualIdType": "UIN" }' output: '{ - "maskedMobile": "$IGNORE$", "maskedEmail": "XXsXXeXXaXXoXXtXXn@gmail.com" }' diff --git a/api-test/src/main/resources/mimoto/ValidateOTP/ValidateOTP.yml b/api-test/src/main/resources/mimoto/ValidateOTP/ValidateOTP.yml index 85b6245fe..a97ca51b7 100644 --- a/api-test/src/main/resources/mimoto/ValidateOTP/ValidateOTP.yml +++ b/api-test/src/main/resources/mimoto/ValidateOTP/ValidateOTP.yml @@ -14,7 +14,6 @@ SendOTP: "individualIdType": "UIN" }' output: '{ - "maskedMobile": "$IGNORE$" }' Resident_SendOTP_Valid_UIN_Phone_Smoke: endPoint: /resident/v1/req/otp @@ -33,7 +32,6 @@ SendOTP: "individualIdType": "UIN" }' output: '{ - "maskedMobile": "$IGNORE$" }' Resident_SendOTP_Valid_UIN_Email_Smoke: endPoint: /resident/v1/req/otp @@ -51,7 +49,6 @@ SendOTP: "individualIdType": "UIN" }' output: '{ - "maskedMobile": "$IGNORE$" }' Resident_SendOTP_RevokedVID_Invalid: endPoint: /resident/v1/req/otp diff --git a/api-test/src/main/resources/mimoto/ValidateOTP/ValidateOTPResult.hbs b/api-test/src/main/resources/mimoto/ValidateOTP/ValidateOTPResult.hbs index 689fb082b..ab63e6191 100644 --- a/api-test/src/main/resources/mimoto/ValidateOTP/ValidateOTPResult.hbs +++ b/api-test/src/main/resources/mimoto/ValidateOTP/ValidateOTPResult.hbs @@ -1,7 +1,4 @@ { "id": "mosip.identity.auth.internal", "version": "v1", - "response": { - "authStatus": {{authStatus}} - } } \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/WalletBinding/WalletBinding.yml b/api-test/src/main/resources/mimoto/WalletBinding/WalletBinding.yml index 99a95197c..fe7f42fa3 100644 --- a/api-test/src/main/resources/mimoto/WalletBinding/WalletBinding.yml +++ b/api-test/src/main/resources/mimoto/WalletBinding/WalletBinding.yml @@ -28,7 +28,6 @@ WalletBinding: }' output: '{ "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -63,7 +62,6 @@ WalletBinding: }' output: '{ "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -103,7 +101,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -143,7 +140,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -183,7 +179,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -223,7 +218,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -263,7 +257,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -304,7 +297,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -344,7 +336,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -385,7 +376,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -425,7 +415,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -465,7 +454,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -506,7 +494,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -547,7 +534,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -588,7 +574,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -629,7 +614,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -670,7 +654,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -711,7 +694,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -752,7 +734,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -793,7 +774,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -834,7 +814,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -875,7 +854,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -916,7 +894,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -957,7 +934,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -998,7 +974,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -1039,7 +1014,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -1080,7 +1054,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -1120,7 +1093,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -1160,7 +1132,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -1200,7 +1171,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -1240,7 +1210,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -1280,7 +1249,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -1320,7 +1288,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -1360,7 +1327,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -1400,7 +1366,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -1440,7 +1405,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -1480,7 +1444,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -1520,7 +1483,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -1560,7 +1522,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -1600,7 +1561,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -1640,7 +1600,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -1680,7 +1639,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -1720,7 +1678,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -1760,7 +1717,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -1800,7 +1756,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -1841,7 +1796,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -1881,7 +1835,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -1922,7 +1875,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -1962,7 +1914,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -2002,7 +1953,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -2043,7 +1993,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -2084,7 +2033,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -2125,7 +2073,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -2166,7 +2113,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -2206,7 +2152,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -2247,7 +2192,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -2288,7 +2232,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -2329,7 +2272,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -2370,7 +2312,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -2410,7 +2351,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -2450,7 +2390,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -2491,7 +2430,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -2532,7 +2470,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -2573,7 +2510,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -2613,7 +2549,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -2653,7 +2588,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -2693,7 +2627,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -2733,7 +2666,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -2773,7 +2705,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -2813,7 +2744,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -2853,7 +2783,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -2893,7 +2822,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -2933,7 +2861,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -2973,7 +2900,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -3013,7 +2939,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -3053,7 +2978,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -3093,7 +3017,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } @@ -3133,7 +3056,6 @@ WalletBinding: } ], "sendOtpResp": { - "maskedMobile": "$IGNORE$", "sendOtpResTemplate":"mimoto/BindingOtp/BindingOtpResult" } }' \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/WalletBinding/WalletBindingResult.hbs b/api-test/src/main/resources/mimoto/WalletBinding/WalletBindingResult.hbs index 720501904..7a73a41bf 100644 --- a/api-test/src/main/resources/mimoto/WalletBinding/WalletBindingResult.hbs +++ b/api-test/src/main/resources/mimoto/WalletBinding/WalletBindingResult.hbs @@ -1,9 +1,2 @@ { - "responseTime": "$IGNORE$", - "response": { - "encryptedWalletBindingId": "$IGNORE$", - "certificate": "$IGNORE$", - "expireDateTime": "$IGNORE$" - }, - "errors": "$IGNORE$" } \ No newline at end of file From dd558aa3492b99489e7f4f0bd730b82a19c746f7 Mon Sep 17 00:00:00 2001 From: Nandhukumar Date: Fri, 4 Jul 2025 09:10:38 +0530 Subject: [PATCH 714/860] INJIWEB-1630 | INJIWEB-1632 - Automation fixes (#781) * INJIWEB-1630 | INJIWEB-1632 Signed-off-by: Nandhukumar * INJIWEB-1632 Signed-off-by: Nandhukumar --------- Signed-off-by: Nandhukumar --- api-test/pom.xml | 2 +- .../src/main/resources/mimoto/BindingOtp/BindingOtp.yml | 8 ++++---- .../DownloadIssuerCredential/DownloadIssuerCredential.yml | 6 +++--- .../FetchAllCredentials/FetchAllCredentials.yml | 2 +- .../ViewCredential/ViewCredential.yml | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/api-test/pom.xml b/api-test/pom.xml index d0f537b97..2cf8a0d03 100644 --- a/api-test/pom.xml +++ b/api-test/pom.xml @@ -68,7 +68,7 @@ io.mosip.testrig.apitest.commons apitest-commons - 1.3.3-SNAPSHOT + 1.3.3 diff --git a/api-test/src/main/resources/mimoto/BindingOtp/BindingOtp.yml b/api-test/src/main/resources/mimoto/BindingOtp/BindingOtp.yml index 5fd79e94b..7b17c9028 100644 --- a/api-test/src/main/resources/mimoto/BindingOtp/BindingOtp.yml +++ b/api-test/src/main/resources/mimoto/BindingOtp/BindingOtp.yml @@ -74,7 +74,7 @@ BindingOtp: output: '{ "errors": [ { - "errorCode": "invalid_identifier" + "errorCode": "RESIDENT-APP-011" } ] }' @@ -248,7 +248,7 @@ BindingOtp: output: '{ "errors": [ { - "errorCode": "invalid_otp_channel" + "errorCode": "RESIDENT-APP-011" } ] }' @@ -445,7 +445,7 @@ BindingOtp: output: '{ "errors": [ { - "errorCode": "invalid_identifier" + "errorCode": "RESIDENT-APP-011" } ] }' @@ -619,7 +619,7 @@ BindingOtp: output: '{ "errors": [ { - "errorCode": "invalid_otp_channel" + "errorCode": "RESIDENT-APP-011" } ] }' diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential.yml b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential.yml index d1739b094..f8b55677d 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential.yml @@ -46,9 +46,9 @@ DownloadMosipIssuerCredentialWithGoogleLogin: "errorCode":"credential_download_error" }' - Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_WithoutUnlockWallet_Neg: + Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_With_Diff_Active_session_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential with all valid parameters along with google login and expects to fail + description: Downloading credential with all valid parameters along with google login when a different session is active and expects to fail uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_38 role: userDefinedCookie restMethod: get @@ -66,7 +66,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: "cookieName": "SESSION" }' output: '{ - "errorCode":"wallet_locked" + "errorCode":"invalid_request" }' Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_InvalidWallet_Neg: diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/FetchAllCredentials/FetchAllCredentials.yml b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/FetchAllCredentials/FetchAllCredentials.yml index 10924f636..b82553c1b 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/FetchAllCredentials/FetchAllCredentials.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/FetchAllCredentials/FetchAllCredentials.yml @@ -34,7 +34,7 @@ FetchAllCredentials: "errorCode": "invalid_request" }' - Mimoto_FetchAllCredentials_Empty_WalletId_Neg: + Mimoto_FetchAllCredentials_Empty_WalletId_And_Empty_Accepted_claims_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials description: Get list of all credentials with empty wallet id and expects it to fail uniqueIdentifier: TC_Mimoto_FetchAllCredentials_03 diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential.yml b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential.yml index b6cfbec1f..c474c8877 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential.yml @@ -261,7 +261,7 @@ ViewCredential: "acceptHeader": "application/pdf" }' output: '{ - "errorCode": "invalid_request" + "errorCode": "credential_fetch_error" }' Mimoto_ViewCredential_SpaceIn_AcceptLanguage_Neg: From 3812149049c762d6b5aac6928892fc662877db17 Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Mon, 7 Jul 2025 15:51:37 +0530 Subject: [PATCH 715/860] [INJIWEB-1607] update issuersWithSingleVcLimit prop (#784) issuersWithSingleVcLimit holds only Mosip Signed-off-by: KiruthikaJeyashankar --- src/main/resources/application-default.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/application-default.properties b/src/main/resources/application-default.properties index 1628bda46..0196edb0a 100644 --- a/src/main/resources/application-default.properties +++ b/src/main/resources/application-default.properties @@ -17,7 +17,7 @@ spring.security.oauth2.client.provider.google.phoneNumberAttribute=phone_number #Inji Web Config mosip.inji.web.authentication.success.redirect.url=${mosip.inji.web.url}/user/passcode -mosip.inji.wallet.issuersWithSingleVcLimit=Mosip,Mock +mosip.inji.wallet.issuersWithSingleVcLimit=Mosip #Database config spring.datasource.url=jdbc:postgresql://${mosip.mimoto.database.hostname}:${mosip.mimoto.database.port}/inji_mimoto From c788ef4ff2e4903d008ea7c5c29672daaa3ef39a Mon Sep 17 00:00:00 2001 From: Sradha Mohanty Date: Fri, 11 Jul 2025 18:41:39 +0530 Subject: [PATCH 716/860] MOSIP-35628: Check and report CAPTCHA status only once during test execution. (#782) * MOSIP-28246 Removed commented unused variables Signed-off-by: SradhaMohanty5899 * MOSIP-35628 API - Capture info in the report whether Captcha is enabled on the target env or not Signed-off-by: SradhaMohanty5899 * MOSIP-35628 Removed empty string check Signed-off-by: SradhaMohanty5899 * MOSIP-35628 Added 1.2.1-SNAPSHOT version Signed-off-by: SradhaMohanty5899 * Removed isCaptchaEnabled() and getValueFromEsignetActuator() methods after moving to commons util Signed-off-by: SradhaMohanty5899 * Changed snapshot version Signed-off-by: SradhaMohanty5899 * Check and report CAPTCHA status only once during test execution. Signed-off-by: SradhaMohanty5899 --------- Signed-off-by: SradhaMohanty5899 --- .../mimoto/testrunner/MosipTestRunner.java | 12 +++--------- .../mimoto/utils/MimotoConfigManager.java | 1 + .../apirig/mimoto/utils/MimotoUtil.java | 18 +++++++++++++++--- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java index 05b3ecc16..936b91fa3 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java @@ -82,6 +82,7 @@ public static void main(String[] arg) { suiteSetup(getRunType()); SkipTestCaseHandler.loadTestcaseToBeSkippedList("testCaseSkippedList.txt"); GlobalMethods.setModuleNameAndReCompilePattern(MimotoConfigManager.getproperty("moduleNamePattern")); + GlobalMethods.reportCaptchaStatus(GlobalConstants.CAPTCHA_ENABLED, false); setLogLevels(); MimotoConfigManager.getEsignetBaseUrl(); @@ -109,6 +110,7 @@ public static void main(String[] arg) { LOGGER.error("Exception " + e.getMessage()); } + MimotoUtil.dbCleanUp(); KeycloakUserManager.removeUser(); KeycloakUserManager.closeKeycloakInstance(); @@ -133,15 +135,7 @@ public static void suiteSetup(String runType) { } BaseTestCase.currentModule = GlobalConstants.MIMOTO; BaseTestCase.certsForModule = GlobalConstants.MIMOTO; - DBManager.executeDBQueries(MimotoConfigManager.getKMDbUrl(), MimotoConfigManager.getKMDbUser(), - MimotoConfigManager.getKMDbPass(), MimotoConfigManager.getKMDbSchema(), - getGlobalResourcePath() + "/" + "config/keyManagerCertDataDeleteQueries.txt"); - DBManager.executeDBQueries(MimotoConfigManager.getIdaDbUrl(), MimotoConfigManager.getIdaDbUser(), - MimotoConfigManager.getPMSDbPass(), MimotoConfigManager.getIdaDbSchema(), - getGlobalResourcePath() + "/" + "config/idaCertDataDeleteQueries.txt"); - DBManager.executeDBQueries(MimotoConfigManager.getMASTERDbUrl(), MimotoConfigManager.getMasterDbUser(), - MimotoConfigManager.getMasterDbPass(), MimotoConfigManager.getMasterDbSchema(), - getGlobalResourcePath() + "/" + "config/masterDataCertDataDeleteQueries.txt"); + MimotoUtil.dbCleanUp(); AdminTestUtil.initiateMimotoTest(); BaseTestCase.otpListener = new OTPListener(); BaseTestCase.otpListener.run(); diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java index d46ed1418..a3b9ddb5d 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java @@ -41,6 +41,7 @@ public static String getEsignetBaseUrl() { String esignetBaseUrl = null; if (getproperty("runPlugin").equals("mosipid")) { esignetBaseUrl = "https://" + MimotoUtil.getValueFromMimotoActuator("overrides", getproperty("mosipid-identity-esignet-host")); + } else if (getproperty("runPlugin").equals("mockid")) { esignetBaseUrl = "https://" + MimotoUtil.getValueFromMimotoActuator("overrides", getproperty("mock-identity-esignet-host")); } diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java index 72bfc2e70..918e64c1b 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java @@ -23,6 +23,7 @@ import com.github.javafaker.Faker; import io.mosip.testrig.apirig.dataprovider.BiometricDataProvider; +import io.mosip.testrig.apirig.dbaccess.DBManager; import io.mosip.testrig.apirig.dto.TestCaseDTO; import io.mosip.testrig.apirig.mimoto.testrunner.MosipTestRunner; import io.mosip.testrig.apirig.testrunner.OTPListener; @@ -90,8 +91,6 @@ public static TestCaseDTO isTestCaseValidForTheExecution(TestCaseDTO testCaseDTO if (isCaptchaEnabled() == true) { GlobalMethods.reportCaptchaStatus(GlobalConstants.CAPTCHA_ENABLED, true); throw new SkipException(GlobalConstants.CAPTCHA_ENABLED_MESSAGE); - }else { - GlobalMethods.reportCaptchaStatus(GlobalConstants.CAPTCHA_ENABLED, false); } if (MosipTestRunner.skipAll == true) { @@ -121,6 +120,18 @@ public static TestCaseDTO isTestCaseValidForTheExecution(TestCaseDTO testCaseDTO return testCaseDTO; } + public static void dbCleanUp() { + DBManager.executeDBQueries(MimotoConfigManager.getKMDbUrl(), MimotoConfigManager.getKMDbUser(), + MimotoConfigManager.getKMDbPass(), MimotoConfigManager.getKMDbSchema(), + getGlobalResourcePath() + "/" + "config/keyManagerCertDataDeleteQueries.txt"); + DBManager.executeDBQueries(MimotoConfigManager.getIdaDbUrl(), MimotoConfigManager.getIdaDbUser(), + MimotoConfigManager.getPMSDbPass(), MimotoConfigManager.getIdaDbSchema(), + getGlobalResourcePath() + "/" + "config/idaCertDataDeleteQueries.txt"); + DBManager.executeDBQueries(MimotoConfigManager.getMASTERDbUrl(), MimotoConfigManager.getMasterDbUser(), + MimotoConfigManager.getMasterDbPass(), MimotoConfigManager.getMasterDbSchema(), + getGlobalResourcePath() + "/" + "config/masterDataCertDataDeleteQueries.txt"); + } + public static String getOTPFromSMTP(String inputJson, TestCaseDTO testCaseDTO) { String testCaseName = testCaseDTO.getTestCaseName(); JSONObject request = new JSONObject(inputJson); @@ -338,7 +349,7 @@ public static String getValueFromMimotoActuator(String section, String key) { } } - + private static String getGoogleIdToken() { String idToken = null; @@ -371,4 +382,5 @@ private static String getGoogleIdToken() { return idToken; } + } \ No newline at end of file From 7b7cbf7a8b4edcdc68c10e46985774b3fee34ac7 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 14 Jul 2025 13:02:28 +0530 Subject: [PATCH 717/860] [Injiweb 1645] fix verification issue observed for the VCs downloaded in login flow (#787) * [INJIWEB-1645] make changes in CredentialPDFGeneratorService to properly include the qrCodeImage in pdf based on whether it is login flow or not and based on qrCodeType of issuer Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1645] write test cases for new condition added in CredentialPDFGeneratorService file for generating qrCodeImage and including it in pdf Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --------- Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .talismanrc | 2 + .../CredentialPDFGeneratorService.java | 17 ++++++- .../CredentialPDFGeneratorServiceTest.java | 51 +++++++++++++++++++ 3 files changed, 68 insertions(+), 2 deletions(-) diff --git a/.talismanrc b/.talismanrc index 2bad5a143..08cb56921 100644 --- a/.talismanrc +++ b/.talismanrc @@ -23,6 +23,8 @@ fileignoreconfig: checksum: 81b14da4f42f335cf6a3094489844962b92fc629c89691487558c71c3d44a915 - filename: src/main/java/io/mosip/mimoto/controller/CredentialShareController.java checksum: 666c22ca63adb8770de901e220f8efeb5ec1d3f63064a58dea33ba49b8e15872 +- filename: src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java + checksum: b04c0ff467788706b21b1576db06f1482c5d1684744fb0e6c4236aa61037c8aa - filename: src/main/java/io/mosip/mimoto/controller/IssuersController.java checksum: 856d860de2562fa019ac23bd724b84e1d67b834883b332c12415e6714de9bb05 - filename: helm/mimoto/templates/deployment.yaml diff --git a/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java b/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java index 541be51c4..c69d2d9a6 100644 --- a/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java +++ b/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java @@ -147,8 +147,21 @@ private Map getPdfResourceFromVcProperties(LinkedHashMap d.getLogo().getUrl()).findFirst().orElse("")); diff --git a/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java index 676e54615..d173aa604 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java @@ -17,6 +17,10 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockedStatic; + +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; + import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.test.util.ReflectionTestUtils; @@ -155,6 +159,53 @@ void testGeneratePdfForEmbeddedVCQR() throws Exception { "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, "", "", "en"); + verify(pixelPass).generateQRData(anyString(), anyString()); + verify(presentationService, never()).constructPresentationDefinition(any()); + assertNotNull(result); + } + } + + @Test + void testGeneratePdfShouldGeneratePresentationDefinitionForOnlineSharingQrTypeWithNonEmptyDataShareUrl() throws Exception { + issuerDTO.setQr_code_type(QRCodeType.OnlineSharing); + when(objectMapper.writeValueAsString(any())).thenReturn("{\"credential\":\"data\"}"); + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())) + .thenReturn("Test"); + + + try (MockedStatic mocked = mockStatic(Utilities.class)) { + mocked.when(() -> Utilities.encodeToString(any(), anyString())) + .thenReturn("base64-encoded-qr"); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredentials( + "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, + "http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/test", "", "en"); + + verify(presentationService).constructPresentationDefinition(any()); + verify(pixelPass, never()).generateQRData(anyString(), anyString()); + assertNotNull(result); + } + } + + @Test + void testGeneratePdfShouldGenerateEmbeddedVCForOnlineSharingQrTypeWithEmptyDataShareUrl() throws Exception { + issuerDTO.setQr_code_type(QRCodeType.OnlineSharing); + when(objectMapper.writeValueAsString(any())).thenReturn("{\"credential\":\"data\"}"); + when(pixelPass.generateQRData(anyString(), anyString())).thenReturn("generated-qr-data"); + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())) + .thenReturn("Test"); + + + try (MockedStatic mocked = mockStatic(Utilities.class)) { + mocked.when(() -> Utilities.encodeToString(any(), anyString())) + .thenReturn("base64-encoded-qr"); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredentials( + "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, + "", "", "en"); + + verify(pixelPass).generateQRData(anyString(), anyString()); + verify(presentationService, never()).constructPresentationDefinition(any()); assertNotNull(result); } } From e33cfda710f3a5c1d2fad9019cecfb4c352e3318 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 15 Jul 2025 10:24:57 +0530 Subject: [PATCH 718/860] [Injiweb 1627] implement retry passcode flow to apply limit on how many times the user can try to unlock the Wallet (#783) * [INJIWEB-1627] implement wallet unlock eligibility and status checks flows to decide whether the user can unlock the wallet or not and return the specific error codes and messages for wallet temporarily or permanently locked scenarios Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1627] make changes in the code to return the wallet status as part of fetch wallets endpoint and remove the new endpoint added for getting the status of the wallet and make changes in the status validations conditions to rely on the configurations added in local properties file to decide whether wallet can be unlocked or temporarily locked or permanently locked Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1627] update the passcodeMetadata variable names and set their default values and update the logics for temporary and permanent locks Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1627] write test cases for different flows in wallet status validation logic Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1627] rename last attempt error constant to one attempt left before permanent lock Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1627] update the passcodeMetadata variable names and their default values and extract all the methods related to unlock wallet flow into separate class and update the wallet service impl class tests accordingly Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1627] write test cases for wallet unlock handler class Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1627] return response status as bad request for last attempt before lockout instead of locked status and update the test case for the same Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1627] write test cases for different wallet status we can get in unlock wallet flow Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1627] update talisman file Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1627] Rename GetWalletResponseDto and PasscodeMetadata to align with standard naming conventions and improve their clarity Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1627] from walletUnlockHandler extract the lock related logic and walletStatus related logic into separate classes to reduce the complexity and for better separation of concerns Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1627] make changes to store the variables into the http session in controller itself rather than in service layer during the wallet successful unlock and update the tests Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1627] rename walletUnlockHandler to service and set the default values of passcodeControl properties to 0 and and move the logic of saving the wallet into database into service files Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1627] extract passcode counters initialization to private method and use it for better readability Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1627] remove WalletUnlockResult and add new variable into walletResponseDto and reduce the number of calls to the database in handleFailedUnlock of walletUnlockService Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1627] remove unused walletUnlockResult class Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1627] update test cases for walletUnlockService file Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1627] write test cases for walletLockManager class Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1627] write test cases for WalletStatusService class and udpate the setup method in WalletLockManager class Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1627] fix the failing test cases in wallet controller and service test files Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1627] update stoplight and swagger documentation to include examples about wallet temporary and permanent lock Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1627] rename currentAttemptCount to failedAttemptCount in passcodeControl and set passcode control class values to 1 on first failed attempt to unlock wallet and update the test cases Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1627] use primitive type int for passcode control count variables and remove unused import in walletUnlockService class Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1627] update talisman file Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1627] extract large conditions in walletLockManager class into private methods to make them readable Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1627] call the private methods in walletLockManager in if conditions instead of storing them in variables and add mermaid text explaining the whole unlock flow with passcode limit details in docs folder Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1627] add passcode control configuration properties in mimoto-default properties file and add brief info about wallet unlock process with limit on number of failed attempts allowed in WalletUnlockProcess readme file Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1627] rename walletStatus to walletLockStatus in WalletMetadata class and rename walletStausException to WalletLockedException in all places Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1627] make changes to throw the exceptions from walletUnlockService instead of walletStatusService Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1627] remove throws for getErrorBasedOnWalletLockStatus method in WalletLockStatusService Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1627] remove unused import in walletLockStatusService class Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1627] fix failing test cases in WalletLockStatusServiceTest class Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1627] rename walletStatusService to walletLockStatusService and fix the failing test cases Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1627] update wallet unlock process sequence diagram Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1627] update a note message in wallet unlock process sequence diagram Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1627] update retryBlockedUntil config property and store time in minutes instead of milliseconds and make changes in WalletLockManager to convert it into miliiseconds before storing it into database Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --------- Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .talismanrc | 40 ++- .../config/mimoto-default.properties | 10 +- docs/WalletUnlockProcess.md | 152 +++++++++++ docs/api-documentation-openapi.json | 57 ++++- .../mimoto/config/WalletPasscodeConfig.java | 32 +++ .../mimoto/controller/WalletsController.java | 25 +- .../mimoto/dto/WalletDetailsResponseDto.java | 20 ++ .../mosip/mimoto/dto/WalletResponseDto.java | 6 + .../mimoto/exception/ErrorConstants.java | 6 +- .../exception/WalletLockedException.java | 13 + .../mosip/mimoto/model/PasscodeControl.java | 10 + .../mosip/mimoto/model/WalletLockStatus.java | 25 ++ .../io/mosip/mimoto/model/WalletMetadata.java | 4 +- .../mimoto/service/WalletLockManager.java | 78 ++++++ .../service/WalletLockStatusService.java | 37 +++ .../mosip/mimoto/service/WalletService.java | 12 +- .../mimoto/service/WalletUnlockService.java | 81 ++++++ .../service/impl/WalletServiceImpl.java | 45 ++-- .../mimoto/util/GlobalExceptionHandler.java | 7 + .../java/io/mosip/mimoto/util/WalletUtil.java | 8 +- .../resources/application-local.properties | 11 +- .../config/WalletPasscodeConfigTest.java | 8 + .../controller/WalletsControllerTest.java | 143 +++++++++-- .../mimoto/service/WalletLockManagerTest.java | 123 +++++++++ .../service/WalletLockStatusServiceTest.java | 71 ++++++ .../mimoto/service/WalletServiceTest.java | 240 +++++++++++++----- .../service/WalletUnlockServiceTest.java | 175 +++++++++++++ .../io/mosip/mimoto/util/TestUtilities.java | 42 ++- .../resources/application-test.properties | 9 + 29 files changed, 1361 insertions(+), 129 deletions(-) create mode 100644 docs/WalletUnlockProcess.md create mode 100644 src/main/java/io/mosip/mimoto/config/WalletPasscodeConfig.java create mode 100644 src/main/java/io/mosip/mimoto/dto/WalletDetailsResponseDto.java create mode 100644 src/main/java/io/mosip/mimoto/exception/WalletLockedException.java create mode 100644 src/main/java/io/mosip/mimoto/model/PasscodeControl.java create mode 100644 src/main/java/io/mosip/mimoto/model/WalletLockStatus.java create mode 100644 src/main/java/io/mosip/mimoto/service/WalletLockManager.java create mode 100644 src/main/java/io/mosip/mimoto/service/WalletLockStatusService.java create mode 100644 src/main/java/io/mosip/mimoto/service/WalletUnlockService.java create mode 100644 src/test/java/io/mosip/mimoto/config/WalletPasscodeConfigTest.java create mode 100644 src/test/java/io/mosip/mimoto/service/WalletLockManagerTest.java create mode 100644 src/test/java/io/mosip/mimoto/service/WalletLockStatusServiceTest.java create mode 100644 src/test/java/io/mosip/mimoto/service/WalletUnlockServiceTest.java diff --git a/.talismanrc b/.talismanrc index 08cb56921..c9b6ea892 100644 --- a/.talismanrc +++ b/.talismanrc @@ -39,8 +39,10 @@ fileignoreconfig: checksum: c25969b732f7dd0fd49262c68983d85611cb78800b8080d9f63f7ed9eeb0251b - filename: src/main/java/io/mosip/mimoto/util/Utilities.java checksum: 52ac8d1e6fcf3f662a757eef2774357165a618c29d8e1fa6e97395bad3c24065 +- filename: src/test/resources/application-test.properties + checksum: e0702b65f6fcec7f032a1c62c0a2d06cd8c3b2323039dabf1e7fff4a4c2532ad - filename: src/main/resources/application-local.properties - checksum: 6d0725d775fca0de0a05733640ad1ef615cfd1dfb41a0680823a60f961e7c932 + checksum: f4bb256667ee28ae6bda443b48033b57cb1e7b44561732127e48cb669b8d6206 - filename: src/test/java/io/mosip/mimoto/config/MimotoConfig.java checksum: ba189011b924fe58a804281c88a190b9b969d21bc485e03206471f69be1a1b5d - filename: src/main/java/io/mosip/mimoto/util/JsonUtil.java @@ -76,13 +78,37 @@ fileignoreconfig: - filename: docker-compose/docker-compose.yml checksum: 857f5dcebdef810161b9ef09ad078c091c7d9969035bc45132975b296675dac9 - filename: docker-compose/config/mimoto-default.properties - checksum: 746b60fa10a8c2c10c00bd35313407186db7aef0762f99e919bbc42fdc597824 + checksum: b309fd47c120422dea23906d19696039e283b2fb24783bdd447c0999a29d2d22 +- filename: src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java + checksum: 90dce7daa19f0eb9050194a3c77a88d449a83c337d9041bfdeb7bfded3bbd12c +- filename: src/main/java/io/mosip/mimoto/exception/ErrorConstants.java + checksum: 21e2e13d05f14c20274524b531447886ee6582e618197255f00a2fcef562213c +- filename: src/test/java/io/mosip/mimoto/util/TestUtilities.java + checksum: f916181b87d1388fa639267086a14dc5e5d7fcd4b27bd013919a46d8cebfa805 +- filename: src/main/java/io/mosip/mimoto/service/WalletUnlockService.java + checksum: 4a67a6393ad6e70bb7c999c7e5dbf9187e765aaf2ff64f465d4344f58c05a00c +- filename: src/test/java/io/mosip/mimoto/service/WalletUnlockServiceTest.java + checksum: 55069981352accc5b709445ff1539ab1591bc41a2780f6502789d3e51b655c3a +- filename: src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java + checksum: c367393de6a1b05d37f33f8afa57d9d757df3cb4162e00d79b7cd094ce5cb9b8 - filename: src/test/java/io/mosip/mimoto/service/WalletServiceTest.java - checksum: cd48690314dcb0f1153b52e95cc96fd5766a123dbe90ce7247be9a7da2d1a676 + checksum: cae528908baf67427de0487bd54f003e6b4339ea76a74dc94e49d874952923c6 - filename: src/main/java/io/mosip/mimoto/controller/WalletsController.java - checksum: f54bbacbba3af5e0beff7761245c6aa40cdc676e55b557e1aa0dd157a4eda03a + checksum: b83d21b1fe50c50ec18c040c989ecc952a7b47c415abf2ea7286a4e72d7b3ab1 - filename: src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java - checksum: 63a4620f43c88a39771ec5e492dc860e9c6cd62ab895243bb284dd04c5be6937 -- filename: src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java - checksum: 90dce7daa19f0eb9050194a3c77a88d449a83c337d9041bfdeb7bfded3bbd12c + checksum: c0227f0642513e7b642c7e27a4732e005e3064bf9cc5f9c31f07800f23a4d03d +- filename: src/main/java/io/mosip/mimoto/service/WalletLockManager.java + checksum: 0b7332fb14d20c455e338830283725dbf59f4caa8e7b39b38322ab0977a213d4 +- filename: src/test/java/io/mosip/mimoto/service/WalletLockManagerTest.java + checksum: faa7a26762a6e296db2a2e494ec9e7c8a46427ebc2975677b77bb137e2319356 +- filename: src/test/java/io/mosip/mimoto/service/WalletLockStatusServiceTest.java + checksum: 39bafbb16762cf8bd218c1f2af5ed1426db834a91e6df62578da350b6cea0f23 +- filename: src/main/java/io/mosip/mimoto/service/WalletStatusService.java + checksum: 3858fd0ef51e9c4fe372e88471a84eff8a68523297e0e20c52f498b127d03459 +- filename: src/main/java/io/mosip/mimoto/util/WalletUtil.java + checksum: a03a059bb991709916495ce737cff2303cb99c2d404e23ce45a43b7365e3409c +- filename: docs/WalletUnlockProcess.md + checksum: d172beb5aeef1037d70d2f83f034e6ec5e4ea69c6150ec6a25c9139c799b7879 +- filename: docs/api-documentation-openapi.json + checksum: b5f643bfa3fcfec0548747a321f7ecc4b7b2b79fbbf3c0152c3369aeddf0f566 version: "" \ No newline at end of file diff --git a/docker-compose/config/mimoto-default.properties b/docker-compose/config/mimoto-default.properties index 9283d79f9..d099e33d3 100644 --- a/docker-compose/config/mimoto-default.properties +++ b/docker-compose/config/mimoto-default.properties @@ -375,4 +375,12 @@ mosip.security.ignore-auth-urls=/safetynet/**,/actuator/**,/swagger-ui/**,/v3/ap mosip.inji.app.id=MIMOTO mosip.inji.encryption.algorithm=AES mosip.inji.encryption.key.size=256 -mosip.inji.jwt.default.algorithm=RS256 \ No newline at end of file +mosip.inji.jwt.default.algorithm=RS256 + +# Wallet Passcode Configuration +# Duration (in minutes) for which the wallet remains locked after exceeding failed attempts in a cycle +wallet.passcode.retryBlockedUntil=60 +# Maximum number of failed passcode attempts allowed in a single cycle (defaults to 1 if <=0) +wallet.passcode.maxFailedAttemptsAllowedPerCycle=5 +# Maximum number of lock cycles allowed before the wallet is permanently locked (defaults to 1 if <=0) +wallet.passcode.maxLockCyclesAllowed=3 \ No newline at end of file diff --git a/docs/WalletUnlockProcess.md b/docs/WalletUnlockProcess.md new file mode 100644 index 000000000..3b2f81c4c --- /dev/null +++ b/docs/WalletUnlockProcess.md @@ -0,0 +1,152 @@ +# Wallet Unlock Process with max limit on failed attempts + +## Overview + +The Wallet Unlock feature provides a secure mechanism to access a user's encrypted wallet using their PIN. This process includes sophisticated security measures such as temporary and permanent locking mechanisms to prevent brute force attacks, along with PIN-based decryption of wallet key. The unlock flow is triggered when a user needs to access their wallet after session expiry or initial login. + +## Key Features + +- PIN-based wallet unlocking +- Progressive security with temporary and permanent locking +- Configurable failed attempt limits and lock cycles +- Automatic lock expiry for temporary locks +- Session-based wallet key storage +- Last attempt warning before permanent lockout + +## Sequence Diagram + +The sequence diagram below illustrates the complete unlock process, including validation, PIN verification, and lock management steps. + +```mermaid +sequenceDiagram +actor Client +participant WalletsController +participant WalletService +participant WalletUnlockService +participant WalletLockManager +participant WalletLockStatusService +participant WalletUtil +participant WalletRepository + + Client->>WalletsController: POST /wallets/{walletId}/unlock + activate WalletsController + + WalletsController->>WalletService: unlockWallet(walletId, pin, userId) + activate WalletService + + WalletService->>WalletService: validateUserId & validateWalletPin + WalletService->>WalletRepository: findByUserIdAndId(userId, walletId) + activate WalletRepository + WalletRepository-->>WalletService: Returns Wallet object + deactivate WalletRepository + + WalletService->>WalletUnlockService: handleUnlock(wallet, pin) + activate WalletUnlockService + + WalletUnlockService->>WalletLockManager: resetTemporaryLockIfExpired(wallet) + activate WalletLockManager + Note over WalletLockManager: Checks if Wallet is temporarily locked before and that lock has expired (if retryBlockedUntil in milliseconds from Database > Current System time in milliseconds),
then it resets the failedAttemptCount and retryBlockedUntil to their defaults and sets the walletLockStatus = lock_expired + WalletLockManager-->>WalletUnlockService: Returns updated Wallet + deactivate WalletLockManager + + WalletUnlockService->>WalletUnlockService: throwExceptionIfWalletIsLocked(wallet) + + WalletUnlockService->>WalletLockStatusService: getErrorBasedOnWalletLockStatus(wallet) + activate WalletLockStatusService + WalletLockStatusService-->>WalletUnlockService: Returns ErrorDTO + deactivate WalletLockStatusService + + alt Wallet is locked Temporarily or Permanently + WalletUnlockService-->>WalletService: Throws WalletLockedException + else Wallet is not locked + WalletUnlockService->>WalletUtil: decryptWalletKey(walletKey, pin) + activate WalletUtil + alt Successful PIN Decryption + WalletUtil-->>WalletUnlockService: Returns decryptedWalletKey + + WalletUnlockService->>WalletLockManager: resetLockState(wallet) + activate WalletLockManager + Note over WalletLockManager: Resets all lock counters,
retryBlockedUntil and status to default values + WalletLockManager-->>WalletUnlockService: Returns updated Wallet + deactivate WalletLockManager + + WalletUnlockService->>WalletRepository: save(wallet) + activate WalletRepository + deactivate WalletRepository + WalletUnlockService-->>WalletService: Returns decryptedWalletKey + else Invalid PIN + WalletUtil-->>WalletUnlockService: Throws InvalidRequestException + deactivate WalletUtil + WalletUnlockService->>WalletUnlockService: handleFailedUnlock(wallet) + + WalletUnlockService->>WalletLockManager: enforceLockCyclePolicy(wallet) + activate WalletLockManager + Note over WalletLockManager:1. Increments failedAttemptCount &
2. if currentCycleCount = 0 (means this is the first failed attempt made in all cycles), it sets currentCycleCount = 1
3. If failedAttemptCount = maxFailedAttemptsAllowedPerCycle then increments currentCycleCount
4. If currentCycleCount > maxLockCyclesAllowed then sets walletLockStatus = permanently_locked & retryBlockedUntil = null
else sets walletLockStatus = temporarily_locked & and retryBlockedUntil = Current System time (in milliseconds) + retryBlockedUntil (in milliseconds) value from config properties file
5. If failedAttemptCount = maxFailedAttemptsAllowedPerCycle - 1 & currentCycleCount = maxLockCyclesAllowed then sets
walletLockStatus = last_attempt_before_lockout + WalletLockManager-->>WalletUnlockService: Returns updated Wallet + deactivate WalletLockManager + + WalletUnlockService->>WalletUnlockService: throwExceptionIfLastAttemptLeftForUnlock(wallet) + + WalletUnlockService->>WalletLockStatusService: getErrorBasedOnWalletLockStatus(wallet) + activate WalletLockStatusService + WalletLockStatusService-->>WalletUnlockService: Returns ErrorDTO + deactivate WalletLockStatusService + + alt if errorCode is last_attempt_before_lockout + WalletUnlockService-->>WalletService: Throws InvalidRequestException + else otherwise + WalletUnlockService->>WalletLockManager: resetTemporaryLockIfExpired(wallet) + activate WalletLockManager + Note over WalletLockManager: Checks if Wallet is temporarily locked before and that lock has expired (if retryBlockedUntil in milliseconds from Database > Current System time in milliseconds),
then it resets the failedAttemptCount and retryBlockedUntil to their defaults and sets the walletLockStatus = lock_expired + WalletLockManager-->>WalletUnlockService: Returns updated Wallet + deactivate WalletLockManager + + WalletUnlockService->>WalletUnlockService: throwExceptionIfWalletIsLocked(wallet) + WalletUnlockService->>WalletLockStatusService: getErrorBasedOnWalletLockStatus(wallet) + activate WalletLockStatusService + WalletLockStatusService-->>WalletUnlockService: Returns ErrorDTO + deactivate WalletLockStatusService + alt Wallet is locked Temporarily or Permanently + WalletUnlockService-->>WalletRepository: save(wallet) + activate WalletRepository + deactivate WalletRepository + WalletUnlockService-->>WalletService: Throws WalletLockedException + else Wallet is not locked + WalletUnlockService-->>WalletRepository: save(wallet) + activate WalletRepository + deactivate WalletRepository + deactivate WalletUnlockService + end + end + end + end + + WalletService-->>WalletsController: Returns WalletResponseDto or throws Exception + deactivate WalletService + + alt Success Response + WalletsController->>WalletsController: Stores wallet_id & received decryptedWalletKey as wallet_key into Http session + WalletsController-->>Client: Returns 200 OK status with WalletResponseDto + else Error Response + WalletsController-->>Client: Returns Error status with ErrorDTO + end + deactivate WalletsController +``` +## Configuration + +Configurable properties that govern the entire Passcode flow within the Wallet unlock process are defined in the +`application-local.properties` file for the local setup, and in the `mimoto-default.properties` file for the environment setup. + +#### Passcode Control Properties +- `wallet.passcode.retryBlockedUntil`: Duration for which the Wallet remains in temporary lock state (in milliseconds) +- `wallet.passcode.maxFailedAttemptsAllowedPerCycle`: Maximum number of failed attempts allowed before triggering a temporary lock cycle +- `wallet.passcode.maxLockCyclesAllowed`: Maximum lock cycles allowed before permanent lockout + +```properties +# Duration (in milliseconds) for which the wallet remains locked after exceeding failed attempts in a cycle +wallet.passcode.retryBlockedUntil=3600000 +# Maximum number of failed passcode attempts allowed in a single cycle (defaults to 1 if <=0) +wallet.passcode.maxFailedAttemptsAllowedPerCycle=5 +# Maximum number of lock cycles allowed before the wallet is permanently locked (defaults to 1 if <=0) +wallet.passcode.maxLockCyclesAllowed=3 +``` \ No newline at end of file diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index 6ce65f50f..bb10f9f63 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -3612,7 +3612,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/WalletResponseDto" + "$ref": "#/components/schemas/WalletDetailsResponseDto" } }, "examples": { @@ -3620,11 +3620,13 @@ "value": [ { "walletId": "123e4567-e89b-12d3-a456-426614174000", - "walletName": "My Personal Wallet" + "walletName": "My Personal Wallet", + "walletStatus": null }, { "walletId": "223e4567-e89b-12d3-a456-426614174001", - "walletName": "Wallet Main" + "walletName": "Wallet Main", + "walletStatus": "temporarily_locked" } ] } @@ -3902,6 +3904,12 @@ "errorCode": "invalid_pin", "errorMessage": "Invalid PIN or wallet key provided" } + }, + "Only one attempt left to unlock Wallet before Permanent Lockout": { + "value": { + "errorCode": "last_attempt_before_lockout", + "errorMessage": "Incorrect passcode. Last attempt remaining before your Wallet is permanently locked" + } } } } @@ -3925,6 +3933,30 @@ } } }, + "423": { + "description": "Wallet is locked temporarily or permanently", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "Wallet is locked Temporarily": { + "value": { + "errorCode": "temporarily_locked", + "errorMessage": "You’ve reached the maximum number of attempts. Your wallet is now temporarily locked" + } + }, + "Wallet is locked Permanently": { + "value": { + "errorCode": "permanently_locked", + "errorMessage": "Your wallet has been permanently locked due to multiple failed attempts. Please click on forgot password to reset your wallet to continue" + } + } + } + } + } + }, "500": { "description": "Internal server error - any error occurred while decrypting the Wallet key with Wallet PIN or when fetching Wallet details from the database", "content": { @@ -4219,6 +4251,25 @@ } } }, + "WalletDetailsResponseDto": { + "type": "object", + "properties": { + "walletId": { + "type": "string", + "description": "Unique identifier of the Wallet" + }, + "walletName" : { + "type": "string", + "description": "Name of the Wallet" + }, + "walletStatus": { + "type": "string", + "description": "Wallet status indicating if it is locked or unlocked", + "enum": ["active", "temporarily_locked", "permanently_locked", "ready_for_unlock"], + "nullable": true + } + } + }, "IssuerConfigurationSuccessResponse": { "type": "object", "properties": { diff --git a/src/main/java/io/mosip/mimoto/config/WalletPasscodeConfig.java b/src/main/java/io/mosip/mimoto/config/WalletPasscodeConfig.java new file mode 100644 index 000000000..b2fa745c5 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/config/WalletPasscodeConfig.java @@ -0,0 +1,32 @@ +package io.mosip.mimoto.config; + +import jakarta.annotation.PostConstruct; +import lombok.Getter; +import lombok.Setter; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Slf4j +@Getter +@Setter +@Component +@ConfigurationProperties(prefix = "wallet.passcode") +public class WalletPasscodeConfig { + private long retryBlockedUntil = 30000; + private int maxFailedAttemptsAllowedPerCycle = 1; + private int maxLockCyclesAllowed = 1; + + @PostConstruct + public void validateAndCorrectDefaults() { + if (maxLockCyclesAllowed <= 0) { + log.warn("Invalid value for maxLockCyclesAllowed: {}. It must be > 0. Setting to default: 1", maxLockCyclesAllowed); + maxLockCyclesAllowed = 1; + } + + if (maxFailedAttemptsAllowedPerCycle <= 0) { + log.warn("Invalid value for maxFailedAttemptsAllowedPerCycle: {}. It must be > 0. Setting to default: 1", maxFailedAttemptsAllowedPerCycle); + maxFailedAttemptsAllowedPerCycle = 1; + } + } +} diff --git a/src/main/java/io/mosip/mimoto/controller/WalletsController.java b/src/main/java/io/mosip/mimoto/controller/WalletsController.java index 7c6b76ea5..251352a0d 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletsController.java @@ -2,10 +2,7 @@ import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.constant.SwaggerLiteralConstants; -import io.mosip.mimoto.dto.CreateWalletRequestDto; -import io.mosip.mimoto.dto.ErrorDTO; -import io.mosip.mimoto.dto.UnlockWalletRequestDto; -import io.mosip.mimoto.dto.WalletResponseDto; +import io.mosip.mimoto.dto.*; import io.mosip.mimoto.exception.InvalidRequestException; import io.mosip.mimoto.exception.UnauthorizedAccessException; import io.mosip.mimoto.service.WalletService; @@ -106,16 +103,16 @@ public ResponseEntity createWallet( operationId = "getWallets", security = @SecurityRequirement(name = "SessionAuth") ) - @ApiResponse(responseCode = "200", description = "List of wallets retrieved successfully", content = @Content(mediaType = "application/json", array = @ArraySchema(schema = @Schema(implementation = WalletResponseDto.class)), examples = @ExampleObject(name = "Success response", value = "[{\"walletId\": \"123e4567-e89b-12d3-a456-426614174000\"}, {\"walletId\": \"223e4567-e89b-12d3-a456-426614174001\"}]"))) + @ApiResponse(responseCode = "200", description = "List of wallets retrieved successfully", content = @Content(mediaType = "application/json", array = @ArraySchema(schema = @Schema(implementation = WalletDetailsResponseDto.class)), examples = @ExampleObject(name = "Success response", value = "[{\"walletName\": \"My Personal Wallet1\",\"walletId\": \"123e4567-e89b-12d3-a456-426614174000\", \"walletStatus\": null}, {\"walletName\": \"My Personal Wallet2\",\"walletId\": \"223e4567-e89b-12d3-a456-426614174001\", \"walletStatus\": \"temporarily_locked\"}]"))) @ApiResponse(responseCode = "400", description = "Invalid Wallets fetching request", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Invalid User ID", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"User ID cannot be null or empty\"}"))) @ApiResponse(responseCode = "401", description = "Unauthorized access", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "User ID not found in session", value = "{\"errorCode\": \"unauthorized\", \"errorMessage\": \"User ID not found in session\"}"))) @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"))) @ApiResponse(responseCode = "503", description = "Service unavailable", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Database connection failure", value = "{\"errorCode\": \"database_unavailable\", \"errorMessage\": \"Failed to connect to the database\"}"))) @GetMapping - public ResponseEntity> getWallets(HttpSession httpSession) throws InvalidRequestException { + public ResponseEntity> getWallets(HttpSession httpSession) throws InvalidRequestException { String userId = (String) httpSession.getAttribute(SessionKeys.USER_ID); log.info("Retrieving wallets for user: {}", userId); - List response = walletService.getWallets(userId); + List response = walletService.getWallets(userId); return ResponseEntity.status(HttpStatus.OK).body(response); } @@ -141,9 +138,14 @@ public ResponseEntity> getWallets(HttpSession httpSessio @ExampleObject(name = "Wallet not found", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Wallet not found\"}"), @ExampleObject(name = "Invalid User ID", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"User ID cannot be null or empty\"}"), @ExampleObject(name = "Invalid Wallet Pin", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"PIN must be numeric with 6 digits\"}"), - @ExampleObject(name = "Incorrect Wallet PIN", value = "{\"errorCode\": \"invalid_pin\", \"errorMessage\": \"Invalid PIN or wallet key provided\"}") + @ExampleObject(name = "Incorrect Wallet PIN", value = "{\"errorCode\": \"invalid_pin\", \"errorMessage\": \"Invalid PIN or wallet key provided\"}"), + @ExampleObject(name = "Only one attempt left to unlock Wallet before Permanent Lockout", value = "{\"errorCode\": \"last_attempt_before_lockout\", \"errorMessage\": \"Incorrect passcode. Last attempt remaining before your Wallet is permanently locked\"}") })) @ApiResponse(responseCode = "401", description = "Unauthorized access", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "User ID not found in session", value = "{\"errorCode\": \"unauthorized\", \"errorMessage\": \"User ID not found in session\"}"))) + @ApiResponse(responseCode = "423", description = "Wallet locked Temporarily or Permanently", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = { + @ExampleObject(name = "Wallet is locked Temporarily", value = "{\"errorCode\": \"temporarily_locked\", \"errorMessage\": \"You’ve reached the maximum number of attempts. Your wallet is now temporarily locked\"}"), + @ExampleObject(name = "Wallet is locked Permanently", value = "{\"errorCode\": \"permanently_locked\", \"errorMessage\": \"Your wallet has been permanently locked due to multiple failed attempts. Please click on forgot password to reset your wallet to continue\"}") + })) @ApiResponse(responseCode = "500", description = "Internal server error - any error occurred while decrypting the Wallet key with Wallet PIN or when fetching Wallet details from the database", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"))) @ApiResponse(responseCode = "503", description = "Service unavailable", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Database connection failure", value = "{\"errorCode\": \"database_unavailable\", \"errorMessage\": \"Failed to connect to the database\"}"))) @PostMapping("/{walletId}/unlock") @@ -153,8 +155,11 @@ public ResponseEntity unlockWallet( HttpSession httpSession) throws InvalidRequestException { String userId = (String) httpSession.getAttribute(SessionKeys.USER_ID); log.info("Unlocking wallet: {} for user: {}", walletId, userId); - WalletResponseDto response = walletService.unlockWallet(walletId, wallet.getWalletPin(), httpSession); - return ResponseEntity.status(HttpStatus.OK).body(response); + WalletResponseDto responseDto = walletService.unlockWallet(walletId, wallet.getWalletPin(), userId); + + httpSession.setAttribute(SessionKeys.WALLET_KEY, responseDto.getDecryptedWalletKey()); + httpSession.setAttribute(SessionKeys.WALLET_ID, walletId); + return ResponseEntity.status(HttpStatus.OK).body(responseDto); } /** diff --git a/src/main/java/io/mosip/mimoto/dto/WalletDetailsResponseDto.java b/src/main/java/io/mosip/mimoto/dto/WalletDetailsResponseDto.java new file mode 100644 index 000000000..0853ab8c7 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/WalletDetailsResponseDto.java @@ -0,0 +1,20 @@ +package io.mosip.mimoto.dto; + +import io.mosip.mimoto.model.WalletLockStatus; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; + + +@Data +@AllArgsConstructor +@Builder +public class WalletDetailsResponseDto { + @Schema(description = "Unique identifier of the Wallet") + String walletId; + @Schema(description = "Wallet name provided by user") + String walletName; + @Schema(description = "Wallet status indicating if it is locked or unlocked") + WalletLockStatus walletStatus; +} diff --git a/src/main/java/io/mosip/mimoto/dto/WalletResponseDto.java b/src/main/java/io/mosip/mimoto/dto/WalletResponseDto.java index ca3491eae..90a860337 100644 --- a/src/main/java/io/mosip/mimoto/dto/WalletResponseDto.java +++ b/src/main/java/io/mosip/mimoto/dto/WalletResponseDto.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.dto; +import com.fasterxml.jackson.annotation.JsonIgnore; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; @@ -11,6 +12,11 @@ public class WalletResponseDto { @Schema(description = "Unique identifier of the Wallet") String walletId; + @Schema(description = "Wallet name provided by user") String walletName; + + @JsonIgnore + @Schema(hidden = true) + String decryptedWalletKey; } diff --git a/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java b/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java index e474db05e..c067e825f 100644 --- a/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java +++ b/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.exception; +import io.mosip.mimoto.model.WalletLockStatus; import lombok.AllArgsConstructor; import lombok.Getter; @@ -39,7 +40,10 @@ public enum ErrorConstants { UNAUTHORIZED_ACCESS("unauthorized", "You are not authorized to access this resource"), WALLET_LOCKED("wallet_locked", "Wallet is locked"), - INVALID_PIN("invalid_pin", "Invalid PIN or wallet key provided"); + INVALID_PIN("invalid_pin", "Invalid PIN or wallet key provided"), + WALLET_LAST_ATTEMPT_BEFORE_LOCKOUT(WalletLockStatus.LAST_ATTEMPT_BEFORE_LOCKOUT.getValue(),"Incorrect passcode. Last attempt remaining before your Wallet is permanently locked"), + WALLET_TEMPORARILY_LOCKED(WalletLockStatus.TEMPORARILY_LOCKED.getValue(), "You’ve reached the maximum number of attempts. Your wallet is now temporarily locked"), + WALLET_PERMANENTLY_LOCKED(WalletLockStatus.PERMANENTLY_LOCKED.getValue(), "Your wallet has been permanently locked due to multiple failed attempts. Please click on forgot password to reset your wallet to continue"); private final String errorCode; private final String errorMessage; diff --git a/src/main/java/io/mosip/mimoto/exception/WalletLockedException.java b/src/main/java/io/mosip/mimoto/exception/WalletLockedException.java new file mode 100644 index 000000000..04243231e --- /dev/null +++ b/src/main/java/io/mosip/mimoto/exception/WalletLockedException.java @@ -0,0 +1,13 @@ +package io.mosip.mimoto.exception; + +import java.io.Serial; + +public class WalletLockedException extends BaseUncheckedException { + + @Serial + private static final long serialVersionUID = 1L; + + public WalletLockedException(String errorCode, String errorMessage) { + super(errorCode, errorMessage); + } +} diff --git a/src/main/java/io/mosip/mimoto/model/PasscodeControl.java b/src/main/java/io/mosip/mimoto/model/PasscodeControl.java new file mode 100644 index 000000000..0232764b6 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/model/PasscodeControl.java @@ -0,0 +1,10 @@ +package io.mosip.mimoto.model; + +import lombok.Data; + +@Data +public class PasscodeControl { + private int failedAttemptCount = 0; + private int currentCycleCount = 0; + private Long retryBlockedUntil = null; +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/model/WalletLockStatus.java b/src/main/java/io/mosip/mimoto/model/WalletLockStatus.java new file mode 100644 index 000000000..4f5823f62 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/model/WalletLockStatus.java @@ -0,0 +1,25 @@ +package io.mosip.mimoto.model; + +import com.fasterxml.jackson.annotation.JsonValue; + +public enum WalletLockStatus { + // Indicates that the wallet is temporarily locked due to exceeding the maximum allowed failed attempts within a cycle. Unlocking will be possible after the lock duration expires. + TEMPORARILY_LOCKED("temporarily_locked"), + // Indicates that the wallet is permanently locked after exceeding the maximum allowed lock cycles. Unlocking the Wallet is no longer possible. + PERMANENTLY_LOCKED("permanently_locked"), + // Indicates that the wallet is in the last attempt before being permanently locked. This serves as a warning state. + LAST_ATTEMPT_BEFORE_LOCKOUT("last_attempt_before_lockout"), + // Indicates that the temporary lock has expired, and the wallet can now be accessed again. + LOCK_EXPIRED("lock_expired"); + + private final String value; + + WalletLockStatus(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } +} diff --git a/src/main/java/io/mosip/mimoto/model/WalletMetadata.java b/src/main/java/io/mosip/mimoto/model/WalletMetadata.java index 27c6d66e8..7186bfc7c 100644 --- a/src/main/java/io/mosip/mimoto/model/WalletMetadata.java +++ b/src/main/java/io/mosip/mimoto/model/WalletMetadata.java @@ -4,9 +4,9 @@ @Data public class WalletMetadata { - private String encryptionAlgo; private String encryptionType; private String name; - + private PasscodeControl passcodeControl; + private WalletLockStatus lockStatus = null; } diff --git a/src/main/java/io/mosip/mimoto/service/WalletLockManager.java b/src/main/java/io/mosip/mimoto/service/WalletLockManager.java new file mode 100644 index 000000000..42f06bfe4 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/WalletLockManager.java @@ -0,0 +1,78 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.config.WalletPasscodeConfig; +import io.mosip.mimoto.model.PasscodeControl; +import io.mosip.mimoto.model.Wallet; +import io.mosip.mimoto.model.WalletMetadata; +import io.mosip.mimoto.model.WalletLockStatus; +import org.springframework.stereotype.Component; + +@Component +public class WalletLockManager { + private final WalletPasscodeConfig walletPasscodeConfig; + private static final int MINUTES_TO_MILLIS = 60 * 1000; + + public WalletLockManager(WalletPasscodeConfig walletPasscodeConfig) { + this.walletPasscodeConfig = walletPasscodeConfig; + } + + public Wallet enforceLockCyclePolicy(Wallet wallet) { + WalletMetadata walletMetadata = wallet.getWalletMetadata(); + PasscodeControl passcodeControl = walletMetadata.getPasscodeControl(); + + // Increment the current attempt count + passcodeControl.setFailedAttemptCount(passcodeControl.getFailedAttemptCount() + 1); + + if (passcodeControl.getCurrentCycleCount() == 0) { + passcodeControl.setCurrentCycleCount(1); + } + + if (passcodeControl.getFailedAttemptCount() == walletPasscodeConfig.getMaxFailedAttemptsAllowedPerCycle()) { + passcodeControl.setCurrentCycleCount(passcodeControl.getCurrentCycleCount() + 1); + + if (passcodeControl.getCurrentCycleCount() > walletPasscodeConfig.getMaxLockCyclesAllowed()) { + passcodeControl.setRetryBlockedUntil(null); + walletMetadata.setLockStatus(WalletLockStatus.PERMANENTLY_LOCKED); + } else { + passcodeControl.setRetryBlockedUntil(System.currentTimeMillis() + (walletPasscodeConfig.getRetryBlockedUntil() * MINUTES_TO_MILLIS)); + walletMetadata.setLockStatus(WalletLockStatus.TEMPORARILY_LOCKED); + } + } else if (isLastSecondAttemptBeforePermanentLock(passcodeControl)) { + walletMetadata.setLockStatus(WalletLockStatus.LAST_ATTEMPT_BEFORE_LOCKOUT); + } + + return wallet; + } + + private boolean isLastSecondAttemptBeforePermanentLock(PasscodeControl passcodeControl) { + return passcodeControl.getFailedAttemptCount() == walletPasscodeConfig.getMaxFailedAttemptsAllowedPerCycle() - 1 && passcodeControl.getCurrentCycleCount() == walletPasscodeConfig.getMaxLockCyclesAllowed(); + } + + public Wallet resetTemporaryLockIfExpired(Wallet wallet) { + WalletMetadata walletMetadata = wallet.getWalletMetadata(); + PasscodeControl passcodeControl = walletMetadata.getPasscodeControl(); + + if (isTemporaryLockExpired(walletMetadata, passcodeControl)) { + passcodeControl.setRetryBlockedUntil(null); + passcodeControl.setFailedAttemptCount(0); + walletMetadata.setLockStatus(WalletLockStatus.LOCK_EXPIRED); + } + return wallet; + } + + private static boolean isTemporaryLockExpired(WalletMetadata walletMetadata, PasscodeControl passcodeControl) { + return walletMetadata.getLockStatus() == WalletLockStatus.TEMPORARILY_LOCKED && passcodeControl.getRetryBlockedUntil() != null && System.currentTimeMillis() > passcodeControl.getRetryBlockedUntil(); + } + + public Wallet resetLockState(Wallet wallet) { + WalletMetadata metadata = wallet.getWalletMetadata(); + PasscodeControl control = metadata.getPasscodeControl(); + + control.setFailedAttemptCount(0); + control.setCurrentCycleCount(0); + control.setRetryBlockedUntil(null); + metadata.setLockStatus(null); + + return wallet; + } +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/WalletLockStatusService.java b/src/main/java/io/mosip/mimoto/service/WalletLockStatusService.java new file mode 100644 index 000000000..67745f380 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/WalletLockStatusService.java @@ -0,0 +1,37 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.dto.ErrorDTO; +import io.mosip.mimoto.exception.ErrorConstants; +import io.mosip.mimoto.model.Wallet; +import io.mosip.mimoto.model.WalletMetadata; +import io.mosip.mimoto.model.WalletLockStatus; +import org.springframework.stereotype.Service; + +@Service +public class WalletLockStatusService { + + + public WalletLockStatus getWalletLockStatus(Wallet wallet) { + return wallet.getWalletMetadata().getLockStatus(); + } + + public ErrorDTO getErrorBasedOnWalletLockStatus(Wallet wallet) { + WalletMetadata metadata = wallet.getWalletMetadata(); + WalletLockStatus currentStatus = metadata.getLockStatus(); + ErrorDTO errorDTO = null; + if (currentStatus == WalletLockStatus.PERMANENTLY_LOCKED) { + errorDTO = new ErrorDTO(ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorCode(), + ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorMessage()); + } else if (currentStatus == WalletLockStatus.TEMPORARILY_LOCKED) { + errorDTO = new ErrorDTO(ErrorConstants.WALLET_TEMPORARILY_LOCKED.getErrorCode(), + ErrorConstants.WALLET_TEMPORARILY_LOCKED.getErrorMessage() + ); + } else if (currentStatus == WalletLockStatus.LAST_ATTEMPT_BEFORE_LOCKOUT) { + errorDTO = new ErrorDTO(ErrorConstants.WALLET_LAST_ATTEMPT_BEFORE_LOCKOUT.getErrorCode(), + ErrorConstants.WALLET_LAST_ATTEMPT_BEFORE_LOCKOUT.getErrorMessage() + ); + } + + return errorDTO; + } +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/WalletService.java b/src/main/java/io/mosip/mimoto/service/WalletService.java index 4efaddece..4ec826989 100644 --- a/src/main/java/io/mosip/mimoto/service/WalletService.java +++ b/src/main/java/io/mosip/mimoto/service/WalletService.java @@ -1,8 +1,8 @@ package io.mosip.mimoto.service; +import io.mosip.mimoto.dto.WalletDetailsResponseDto; import io.mosip.mimoto.dto.WalletResponseDto; import io.mosip.mimoto.exception.InvalidRequestException; -import jakarta.servlet.http.HttpSession; import java.util.List; @@ -26,13 +26,13 @@ public interface WalletService { /** * Unlocks a wallet for a user. * - * @param walletId - * @param pin - * @param httpSession + * @param walletId The wallet ID. + * @param pin The wallet PIN. + * @param userId The user ID. * @return WalletResponseDto containing wallet details. * @throws InvalidRequestException If the wallet is not found or PIN is invalid. */ - WalletResponseDto unlockWallet(String walletId, String pin, HttpSession httpSession) throws InvalidRequestException; + WalletResponseDto unlockWallet(String walletId, String pin, String userId) throws InvalidRequestException; /** * Retrieves all wallets for a user. @@ -41,7 +41,7 @@ public interface WalletService { * @return List of wallet responses. * @throws InvalidRequestException If the request fails. */ - List getWallets(String userId); + List getWallets(String userId); void deleteWallet(String userId, String walletId) throws InvalidRequestException; } diff --git a/src/main/java/io/mosip/mimoto/service/WalletUnlockService.java b/src/main/java/io/mosip/mimoto/service/WalletUnlockService.java new file mode 100644 index 000000000..cbb38d0b7 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/WalletUnlockService.java @@ -0,0 +1,81 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.dto.ErrorDTO; +import io.mosip.mimoto.exception.ErrorConstants; +import io.mosip.mimoto.exception.WalletLockedException; +import io.mosip.mimoto.model.Wallet; +import io.mosip.mimoto.exception.InvalidRequestException; +import io.mosip.mimoto.model.WalletLockStatus; +import io.mosip.mimoto.repository.WalletRepository; +import io.mosip.mimoto.util.WalletUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +@Slf4j +@Service +public class WalletUnlockService { + private final WalletUtil walletUtil; + private final WalletLockManager walletLockManager; + private final WalletLockStatusService walletLockStatusService; + + private final WalletRepository walletRepository; + + public WalletUnlockService(WalletUtil walletUtil, WalletLockManager walletLockManager, WalletLockStatusService walletLockStatusService, WalletRepository walletRepository) { + this.walletUtil = walletUtil; + this.walletLockManager = walletLockManager; + this.walletLockStatusService = walletLockStatusService; + this.walletRepository = walletRepository; + } + + public String handleUnlock(Wallet wallet, String pin) throws InvalidRequestException { + wallet = walletLockManager.resetTemporaryLockIfExpired(wallet); + throwExceptionIfWalletIsLocked(wallet); + try { + String decryptedWalletKey = walletUtil.decryptWalletKey(wallet.getWalletKey(), pin); + wallet = walletLockManager.resetLockState(wallet); + walletRepository.save(wallet); + return decryptedWalletKey; + } catch (InvalidRequestException ex) { + log.error("Failed to unlock Wallet {} due to: {}", wallet.getId(), ex.getMessage(), ex); + handleFailedUnlock(wallet); + throw ex; + } + } + + private void handleFailedUnlock(Wallet wallet) { + try { + wallet = walletLockManager.enforceLockCyclePolicy(wallet); + throwExceptionIfLastAttemptLeftForUnlock(wallet); + wallet = walletLockManager.resetTemporaryLockIfExpired(wallet); + throwExceptionIfWalletIsLocked(wallet); + walletRepository.save(wallet); + } catch (Exception ex) { + walletRepository.save(wallet); + throw ex; + } + } + + private void throwExceptionIfWalletIsLocked(Wallet wallet) throws WalletLockedException { + ErrorDTO errorDTO = walletLockStatusService.getErrorBasedOnWalletLockStatus(wallet); + + if (errorDTO != null) { + String errorCode = errorDTO.getErrorCode(); + if (errorCode.equals(WalletLockStatus.TEMPORARILY_LOCKED.getValue()) || errorCode.equals(WalletLockStatus.PERMANENTLY_LOCKED.getValue())) { + throw new WalletLockedException(errorDTO.getErrorCode(), errorDTO.getErrorMessage()); + } + } + } + + private void throwExceptionIfLastAttemptLeftForUnlock(Wallet wallet) throws InvalidRequestException { + ErrorDTO errorDTO = walletLockStatusService.getErrorBasedOnWalletLockStatus(wallet); + + if (errorDTO != null) { + String errorCode = errorDTO.getErrorCode(); + if (errorCode.equals(WalletLockStatus.LAST_ATTEMPT_BEFORE_LOCKOUT.getValue())) { + throw new InvalidRequestException( + ErrorConstants.WALLET_LAST_ATTEMPT_BEFORE_LOCKOUT.getErrorCode(), + ErrorConstants.WALLET_LAST_ATTEMPT_BEFORE_LOCKOUT.getErrorMessage()); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java index 96883b9c3..2dbded2d1 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java @@ -1,15 +1,17 @@ package io.mosip.mimoto.service.impl; -import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.model.Wallet; +import io.mosip.mimoto.dto.WalletDetailsResponseDto; import io.mosip.mimoto.dto.WalletResponseDto; import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.exception.InvalidRequestException; import io.mosip.mimoto.repository.WalletRepository; +import io.mosip.mimoto.service.WalletLockManager; import io.mosip.mimoto.service.WalletService; +import io.mosip.mimoto.service.WalletLockStatusService; +import io.mosip.mimoto.service.WalletUnlockService; import io.mosip.mimoto.util.WalletUtil; import io.mosip.mimoto.util.WalletValidator; -import jakarta.servlet.http.HttpSession; import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; @@ -18,6 +20,7 @@ import java.util.List; import java.util.function.Supplier; + /** * Implementation of {@link WalletService} for managing wallets. */ @@ -28,12 +31,19 @@ public class WalletServiceImpl implements WalletService { private final WalletRepository repository; private final WalletUtil walletUtil; private final WalletValidator validator; + private final WalletUnlockService walletUnlockService; + private final WalletLockStatusService walletStatusService; + + private final WalletLockManager walletLockManager; @Autowired - public WalletServiceImpl(WalletRepository repository, WalletUtil walletUtil, WalletValidator validator) { + public WalletServiceImpl(WalletRepository repository, WalletUtil walletUtil, WalletValidator validator, WalletUnlockService walletUnlockService, WalletLockStatusService walletStatusService, WalletLockManager walletLockManager) { this.repository = repository; this.walletUtil = walletUtil; this.validator = validator; + this.walletUnlockService = walletUnlockService; + this.walletStatusService = walletStatusService; + this.walletLockManager = walletLockManager; } @Override @@ -51,37 +61,38 @@ public WalletResponseDto createWallet(String userId, String name, String pin, St String walletId = walletUtil.createWallet(userId, name, pin); log.debug("Wallet created successfully: {}", walletId); - return new WalletResponseDto(walletId, name); + return WalletResponseDto.builder().walletId(walletId).walletName(name).build(); } @Override - public WalletResponseDto unlockWallet(String walletId, String pin, HttpSession httpSession) throws InvalidRequestException { - String userId = (String) httpSession.getAttribute(SessionKeys.USER_ID); - log.info("Unlocking wallet for user: {}, wallet: {}", userId, walletId); + public WalletResponseDto unlockWallet(String walletId, String pin, String userId) throws InvalidRequestException { + log.info("Unlocking Wallet: {} for User: {}", walletId, userId); validator.validateUserId(userId); validator.validateWalletPin(pin); return repository.findByUserIdAndId(userId, walletId).map(wallet -> { - String decryptedWalletKey = walletUtil.decryptWalletKey(wallet.getWalletKey(), pin); - httpSession.setAttribute(SessionKeys.WALLET_KEY, decryptedWalletKey); - httpSession.setAttribute(SessionKeys.WALLET_ID, walletId); - return new WalletResponseDto(walletId, wallet.getWalletMetadata().getName()); + String decryptedWalletKey = walletUnlockService.handleUnlock(wallet, pin); + return new WalletResponseDto(walletId, wallet.getWalletMetadata().getName(), decryptedWalletKey); }).orElseThrow(getWalletNotFoundExceptionSupplier(userId, walletId)); } @Override - public List getWallets(String userId) { + public List getWallets(String userId) { log.debug("validating user ID provided"); validator.validateUserId(userId); log.info("Retrieving wallets for user: {}", userId); - return repository.findWalletByUserId(userId).stream().map(wallet -> WalletResponseDto.builder() - .walletId(wallet.getId()) - .walletName(wallet.getWalletMetadata().getName()) - .build()) - .toList(); + return repository.findWalletByUserId(userId).stream().map(wallet -> { + wallet = walletLockManager.resetTemporaryLockIfExpired(wallet); + repository.save(wallet); + return WalletDetailsResponseDto.builder() + .walletId(wallet.getId()) + .walletName(wallet.getWalletMetadata().getName()) + .walletStatus(walletStatusService.getWalletLockStatus(wallet)) + .build(); + }).toList(); } @Override diff --git a/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java b/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java index 75e08bbde..7c0edea16 100644 --- a/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java +++ b/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java @@ -30,6 +30,13 @@ public ErrorDTO handleGenericException(Exception ex) { return new ErrorDTO(ErrorConstants.INTERNAL_SERVER_ERROR.getErrorCode(), ErrorConstants.INTERNAL_SERVER_ERROR.getErrorMessage()); } + @ExceptionHandler(WalletLockedException.class) + @ResponseStatus(HttpStatus.LOCKED) + public ErrorDTO handleWalletUnlockEligibilityException(WalletLockedException ex) { + log.error("Wallet is not eligible to be unlocked due to the error: {}", ex.getMessage(), ex); + return new ErrorDTO(ex.getErrorCode(), ex.getErrorText()); + } + @ExceptionHandler( value = InvalidInputException.class) public ResponseEntity handleInvalidInput(InvalidInputException ex) { CredentialRequestResponseDTO credentialRequestResponseDTO = new CredentialRequestResponseDTO(); diff --git a/src/main/java/io/mosip/mimoto/util/WalletUtil.java b/src/main/java/io/mosip/mimoto/util/WalletUtil.java index 056804dfc..b6d601d77 100644 --- a/src/main/java/io/mosip/mimoto/util/WalletUtil.java +++ b/src/main/java/io/mosip/mimoto/util/WalletUtil.java @@ -4,6 +4,7 @@ import io.mosip.mimoto.model.ProofSigningKey; import io.mosip.mimoto.model.Wallet; import io.mosip.mimoto.model.WalletMetadata; +import io.mosip.mimoto.model.PasscodeControl; import io.mosip.mimoto.exception.InvalidRequestException; import io.mosip.mimoto.constant.SigningAlgorithm; import io.mosip.mimoto.repository.WalletRepository; @@ -45,7 +46,8 @@ public String createWallet(String userId, String walletName, String pin) { public String saveWallet(String userId, String walletName, String walletPin, SecretKey encryptionKey, String encryptionAlgorithm, String encryptionType) { String walletId = UUID.randomUUID().toString(); - WalletMetadata walletMetadata = createWalletMetadata(walletName, encryptionAlgorithm, encryptionType); + PasscodeControl passcodeControl = new PasscodeControl(); + WalletMetadata walletMetadata = createWalletMetadata(walletName, encryptionAlgorithm, encryptionType, passcodeControl); String walletKey = encryptionDecryptionUtil.encryptKeyWithPin(encryptionKey, walletPin); Wallet newWallet = Wallet.builder() .id(walletId) @@ -61,11 +63,13 @@ public String saveWallet(String userId, String walletName, String walletPin, Sec return walletId; } - private WalletMetadata createWalletMetadata(String walletName, String encryptionAlgorithm, String encryptionType) { + private WalletMetadata createWalletMetadata(String walletName, String encryptionAlgorithm, String encryptionType, PasscodeControl passcodeControl) { WalletMetadata walletMetadata = new WalletMetadata(); walletMetadata.setEncryptionAlgo(encryptionAlgorithm); walletMetadata.setEncryptionType(encryptionType); walletMetadata.setName(walletName); + walletMetadata.setLockStatus(null); + walletMetadata.setPasscodeControl(passcodeControl); return walletMetadata; } diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index a97c41190..875f4687d 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -311,4 +311,13 @@ spring.data.redis.password= spring.data.redis.connect-timeout=10s server.servlet.session.timeout=30m spring.session.redis.namespace=injiweb:session: -spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect \ No newline at end of file +spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect + +# Wallet Passcode Configuration +# Duration (in minutes) for which the wallet remains locked after exceeding failed attempts in a cycle. +# Must be a whole number; decimal/fractional values (e.g., 0.5) will throw an error during Mimoto launch +wallet.passcode.retryBlockedUntil=60 +# Maximum number of failed passcode attempts allowed in a single cycle (defaults to 1 if <=0) +wallet.passcode.maxFailedAttemptsAllowedPerCycle=5 +# Maximum number of lock cycles allowed before the wallet is permanently locked (defaults to 1 if <=0) +wallet.passcode.maxLockCyclesAllowed=3 \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/config/WalletPasscodeConfigTest.java b/src/test/java/io/mosip/mimoto/config/WalletPasscodeConfigTest.java new file mode 100644 index 000000000..30941d38c --- /dev/null +++ b/src/test/java/io/mosip/mimoto/config/WalletPasscodeConfigTest.java @@ -0,0 +1,8 @@ +package io.mosip.mimoto.config; + +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Configuration +@EnableConfigurationProperties(WalletPasscodeConfig.class) +public class WalletPasscodeConfigTest {} diff --git a/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java index 6051bb089..bdd21ce10 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java @@ -2,14 +2,15 @@ import com.fasterxml.jackson.databind.ObjectMapper; import io.mosip.mimoto.constant.SessionKeys; -import io.mosip.mimoto.dto.CreateWalletRequestDto; -import io.mosip.mimoto.dto.UnlockWalletRequestDto; -import io.mosip.mimoto.dto.WalletResponseDto; +import io.mosip.mimoto.dto.*; import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.exception.InvalidRequestException; import io.mosip.mimoto.exception.UnauthorizedAccessException; +import io.mosip.mimoto.exception.WalletLockedException; +import io.mosip.mimoto.model.WalletLockStatus; import io.mosip.mimoto.service.WalletService; import io.mosip.mimoto.util.GlobalExceptionHandler; +import jakarta.servlet.http.HttpSession; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -23,6 +24,7 @@ import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.MvcResult; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import java.util.List; @@ -72,7 +74,8 @@ public void setUp() { @Test public void shouldReturnWalletIdForSuccessfulWalletCreation() throws Exception { - when(walletService.createWallet(userId, walletName, walletPin, confirmWalletPin)).thenReturn(new WalletResponseDto(walletId, walletName)); + when(walletService.createWallet(userId, walletName, walletPin, confirmWalletPin)).thenReturn( + WalletResponseDto.builder().walletId(walletId).walletName(walletName).build()); mockMvc.perform(post("/wallets") .contentType(MediaType.APPLICATION_JSON) @@ -142,8 +145,8 @@ public void shouldReturnUnauthorizedWhenUserIdIsMissingForCreateWallet() throws @Test public void shouldReturnListOfWalletIDsForValidUserId() throws Exception { - List wallets = List.of(new WalletResponseDto("wallet1", "Wallet1"), - new WalletResponseDto("wallet2", "Wallet2")); + List wallets = List.of(new WalletDetailsResponseDto("walletId1", "Wallet1", null), + new WalletDetailsResponseDto("walletId2", "Wallet2", WalletLockStatus.TEMPORARILY_LOCKED)); when(walletService.getWallets(userId)).thenReturn(wallets); mockMvc.perform(get("/wallets") @@ -152,7 +155,7 @@ public void shouldReturnListOfWalletIDsForValidUserId() throws Exception { .with(SecurityMockMvcRequestPostProcessors.user(userId).roles("USER")) .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isOk()) - .andExpect(content().string("[{\"walletId\":\"wallet1\",\"walletName\":\"Wallet1\"},{\"walletId\":\"wallet2\",\"walletName\":\"Wallet2\"}]")); + .andExpect(content().string("[{\"walletId\":\"walletId1\",\"walletName\":\"Wallet1\",\"walletStatus\":null},{\"walletId\":\"walletId2\",\"walletName\":\"Wallet2\",\"walletStatus\":\"temporarily_locked\"}]")); } @Test @@ -233,12 +236,13 @@ public void shouldReturnBadRequestWhenInvalidRequestExceptionIsThrownByService() @Test public void shouldUnlockWalletSuccessfully() throws Exception { + String decryptedWalletKey = "decryptedKey"; UnlockWalletRequestDto unlockRequest = new UnlockWalletRequestDto(); unlockRequest.setWalletPin(walletPin); - when(walletService.unlockWallet(walletId, walletPin, mockSession)).thenReturn(new WalletResponseDto(walletId, walletName)); + when(walletService.unlockWallet(walletId, walletPin, userId)).thenReturn(new WalletResponseDto(walletId, walletName, decryptedWalletKey)); - mockMvc.perform(post("/wallets/{walletId}/unlock", walletId) + MvcResult result = mockMvc.perform(post("/wallets/{walletId}/unlock", walletId) .contentType(MediaType.APPLICATION_JSON) .accept(MediaType.APPLICATION_JSON) .content(createRequestBody(unlockRequest)) @@ -248,13 +252,17 @@ public void shouldUnlockWalletSuccessfully() throws Exception { .andExpect(status().isOk()) .andExpect(jsonPath("$.walletId").value(walletId)) .andReturn(); + + HttpSession httpSession = result.getRequest().getSession(); + assertEquals(httpSession.getAttribute(SessionKeys.WALLET_ID), walletId); + assertEquals(httpSession.getAttribute(SessionKeys.WALLET_KEY), decryptedWalletKey); } @Test public void shouldThrowExceptionWhenUserIdIsMissingForUnlockWallet() throws Exception { UnlockWalletRequestDto unlockRequest = new UnlockWalletRequestDto(); unlockRequest.setWalletPin(walletPin); - when(walletService.unlockWallet(walletId, walletPin, mockSession)) + when(walletService.unlockWallet(walletId, walletPin, null)) .thenThrow(new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "User ID cannot be null or empty")); mockSession.clearAttributes(); MockHttpSession sessionWithoutUserId = mockSession; @@ -278,7 +286,7 @@ public void shouldThrowExceptionWhenWalletNotFoundForUnlock() throws Exception { UnlockWalletRequestDto unlockRequest = new UnlockWalletRequestDto(); unlockRequest.setWalletPin(walletPin); - when(walletService.unlockWallet(nonExistentWalletId, walletPin, mockSession)) + when(walletService.unlockWallet(nonExistentWalletId, walletPin, userId)) .thenThrow(new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Wallet not found")); mockMvc.perform(post("/wallets/{walletId}/unlock", nonExistentWalletId) @@ -299,7 +307,7 @@ public void shouldThrowExceptionWhenInvalidPinProvidedForUnlock() throws Excepti UnlockWalletRequestDto unlockRequest = new UnlockWalletRequestDto(); unlockRequest.setWalletPin(invalidPin); - when(walletService.unlockWallet(walletId, invalidPin, mockSession)) + when(walletService.unlockWallet(walletId, invalidPin, userId)) .thenThrow(new InvalidRequestException("invalid_pin", "Invalid PIN or wallet key provided")); mockMvc.perform(post("/wallets/{walletId}/unlock", walletId) @@ -314,12 +322,117 @@ public void shouldThrowExceptionWhenInvalidPinProvidedForUnlock() throws Excepti .andExpect(jsonPath("$.errorMessage").value("Invalid PIN or wallet key provided")); } + @Test + public void shouldThrowTemporarilyLockedExceptionWhenUnlockingWalletWhichIsAlreadyLockedTemporarily() throws Exception { + UnlockWalletRequestDto unlockRequest = new UnlockWalletRequestDto(); + unlockRequest.setWalletPin(walletPin); + + String errorMessage = ErrorConstants.WALLET_TEMPORARILY_LOCKED.getErrorMessage() + " for 1 hour(s)"; + when(walletService.unlockWallet(walletId, walletPin, userId)) + .thenThrow(new WalletLockedException(ErrorConstants.WALLET_TEMPORARILY_LOCKED.getErrorCode(), errorMessage)); + + mockMvc.perform(post("/wallets/{walletId}/unlock", walletId) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON) + .content(createRequestBody(unlockRequest)) + .session(mockSession) + .with(SecurityMockMvcRequestPostProcessors.user(userId).roles("USER")) + .with(SecurityMockMvcRequestPostProcessors.csrf())) + .andExpect(status().isLocked()) + .andExpect(jsonPath("$.errorCode").value(ErrorConstants.WALLET_TEMPORARILY_LOCKED.getErrorCode())) + .andExpect(jsonPath("$.errorMessage").value(errorMessage)); + } + + @Test + public void shouldThrowTemporarilyLockedExceptionWhenUnlockingWalletWithInvalidPinInLastAttemptBeforeTemporaryLock() throws Exception { + UnlockWalletRequestDto unlockRequest = new UnlockWalletRequestDto(); + unlockRequest.setWalletPin("invalidPin"); + + String errorMessage = ErrorConstants.WALLET_TEMPORARILY_LOCKED.getErrorMessage() + " for 1 hour(s)"; + when(walletService.unlockWallet(walletId, "invalidPin", userId)) + .thenThrow(new WalletLockedException(ErrorConstants.WALLET_TEMPORARILY_LOCKED.getErrorCode(), errorMessage)); + + mockMvc.perform(post("/wallets/{walletId}/unlock", walletId) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON) + .content(createRequestBody(unlockRequest)) + .session(mockSession) + .with(SecurityMockMvcRequestPostProcessors.user(userId).roles("USER")) + .with(SecurityMockMvcRequestPostProcessors.csrf())) + .andExpect(status().isLocked()) + .andExpect(jsonPath("$.errorCode").value(ErrorConstants.WALLET_TEMPORARILY_LOCKED.getErrorCode())) + .andExpect(jsonPath("$.errorMessage").value(errorMessage)); + } + + @Test + public void shouldThrowPermanentlyLockedExceptionWhenUnlockingWalletWhichIsAlreadyLockedPermanently() throws Exception { + UnlockWalletRequestDto unlockRequest = new UnlockWalletRequestDto(); + unlockRequest.setWalletPin(walletPin); + + String errorMessage = ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorMessage(); + when(walletService.unlockWallet(walletId, walletPin, userId)) + .thenThrow(new WalletLockedException(ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorCode(), errorMessage)); + + mockMvc.perform(post("/wallets/{walletId}/unlock", walletId) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON) + .content(createRequestBody(unlockRequest)) + .session(mockSession) + .with(SecurityMockMvcRequestPostProcessors.user(userId).roles("USER")) + .with(SecurityMockMvcRequestPostProcessors.csrf())) + .andExpect(status().isLocked()) + .andExpect(jsonPath("$.errorCode").value(ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorCode())) + .andExpect(jsonPath("$.errorMessage").value(errorMessage)); + } + + @Test + public void shouldThrowExceptionWhenUnlockingWalletWithInvalidPinInLastSecondAttemptBeforePermanentLock() throws Exception { + UnlockWalletRequestDto unlockRequest = new UnlockWalletRequestDto(); + unlockRequest.setWalletPin("invalidPin"); + + String errorMessage = ErrorConstants.WALLET_LAST_ATTEMPT_BEFORE_LOCKOUT.getErrorMessage(); + when(walletService.unlockWallet(walletId, "invalidPin", userId)) + .thenThrow(new InvalidRequestException(ErrorConstants.WALLET_LAST_ATTEMPT_BEFORE_LOCKOUT.getErrorCode(), errorMessage)); + + mockMvc.perform(post("/wallets/{walletId}/unlock", walletId) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON) + .content(createRequestBody(unlockRequest)) + .session(mockSession) + .with(SecurityMockMvcRequestPostProcessors.user(userId).roles("USER")) + .with(SecurityMockMvcRequestPostProcessors.csrf())) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errorCode").value(ErrorConstants.WALLET_LAST_ATTEMPT_BEFORE_LOCKOUT.getErrorCode())) + .andExpect(jsonPath("$.errorMessage").value(errorMessage)); + } + + @Test + public void shouldThrowPermanentlyLockedExceptionWhenUnlockingWalletWithInvalidPinInLastAttemptBeforePermanentLock() throws Exception { + UnlockWalletRequestDto unlockRequest = new UnlockWalletRequestDto(); + unlockRequest.setWalletPin("invalidPin"); + + String errorMessage = ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorMessage(); + when(walletService.unlockWallet(walletId, "invalidPin", userId)) + .thenThrow(new WalletLockedException(ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorCode(), errorMessage)); + + mockMvc.perform(post("/wallets/{walletId}/unlock", walletId) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON) + .content(createRequestBody(unlockRequest)) + .session(mockSession) + .with(SecurityMockMvcRequestPostProcessors.user(userId).roles("USER")) + .with(SecurityMockMvcRequestPostProcessors.csrf())) + .andExpect(status().isLocked()) + .andExpect(jsonPath("$.errorCode").value(ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorCode())) + .andExpect(jsonPath("$.errorMessage").value(errorMessage)); + } + @Test public void shouldThrowExceptionForServerErrorDuringUnlock() throws Exception { UnlockWalletRequestDto unlockRequest = new UnlockWalletRequestDto(); unlockRequest.setWalletPin(walletPin); - when(walletService.unlockWallet(walletId, walletPin, mockSession)) + when(walletService.unlockWallet(walletId, walletPin, userId)) .thenThrow(new RuntimeException("Error decrypting wallet key")); mockMvc.perform(post("/wallets/{walletId}/unlock", walletId) @@ -336,7 +449,7 @@ public void shouldThrowExceptionForServerErrorDuringUnlock() throws Exception { @Test public void shouldThrowExceptionIfAnyErrorOccurredWhileFetchingWalletDataForGivenUserIdAndWalletId() throws Exception { - when(walletService.unlockWallet(walletId, walletPin, mockSession)).thenThrow(new RuntimeException("Exception occurred when fetching the wallet data for given walletId and userId")); + when(walletService.unlockWallet(walletId, walletPin, userId)).thenThrow(new RuntimeException("Exception occurred when fetching the wallet data for given walletId and userId")); mockMvc.perform(post(String.format("/wallets/%s/unlock", walletId)) .contentType(MediaType.APPLICATION_JSON) @@ -353,7 +466,7 @@ public void shouldThrowExceptionIfAnyErrorOccurredWhileFetchingWalletDataForGive @Test public void shouldReturnWalletLockedErrorDetailsWhenWalletIDIsMissingInSession() throws Exception { mockSession.removeAttribute(SessionKeys.WALLET_ID); - when(walletService.unlockWallet(walletId, walletPin, mockSession)). + when(walletService.unlockWallet(walletId, walletPin, userId)). thenThrow(new InvalidRequestException("wallet_locked", "Wallet is locked")); mockMvc.perform(post(String.format("/wallets/%s/unlock", walletId)) diff --git a/src/test/java/io/mosip/mimoto/service/WalletLockManagerTest.java b/src/test/java/io/mosip/mimoto/service/WalletLockManagerTest.java new file mode 100644 index 000000000..aa22dca99 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/service/WalletLockManagerTest.java @@ -0,0 +1,123 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.config.WalletPasscodeConfig; +import io.mosip.mimoto.config.WalletPasscodeConfigTest; +import io.mosip.mimoto.model.PasscodeControl; +import io.mosip.mimoto.model.Wallet; +import io.mosip.mimoto.model.WalletMetadata; +import io.mosip.mimoto.model.WalletLockStatus; +import io.mosip.mimoto.util.TestUtilities; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.*; + +@RunWith(SpringRunner.class) +@ContextConfiguration(classes = {WalletPasscodeConfigTest.class, WalletLockManager.class}) +@TestPropertySource(locations = "classpath:application-test.properties") +public class WalletLockManagerTest { + + @Autowired + private WalletLockManager walletLockManager; + + @Autowired + private WalletPasscodeConfig walletPasscodeConfig; + + private Wallet wallet; + + @Before + public void setUp() { + String userId = UUID.randomUUID().toString(); + PasscodeControl passcodeControl = TestUtilities.createPasscodeControl(0, 0, null); + WalletMetadata walletMetadata = TestUtilities.createWalletMetadata("Test Wallet", passcodeControl, null); + wallet = TestUtilities.createWallet(userId, "encryptedWalletKey", walletMetadata); + } + + @Test + public void testWalletPasscodeConfigInitialization() { + assertNotNull(walletPasscodeConfig, "WalletPasscodeConfig should be initialized"); + assertEquals(60, walletPasscodeConfig.getRetryBlockedUntil(), "RetryBlockedUntil should be 60 minutes"); + assertEquals(5, walletPasscodeConfig.getMaxFailedAttemptsAllowedPerCycle(), "MaxFailedAttemptsAllowedPerCycle should be 5"); + assertEquals(3, walletPasscodeConfig.getMaxLockCyclesAllowed(), "MaxLockCyclesAllowed should be 3"); + } + + @Test + public void enforceLockCyclePolicyShouldTemporarilyLockWalletOnInvalidLastAttemptInCurrentCycle() { + wallet.getWalletMetadata().getPasscodeControl().setFailedAttemptCount(4); + wallet.getWalletMetadata().getPasscodeControl().setCurrentCycleCount(1); + + Wallet updatedWallet = walletLockManager.enforceLockCyclePolicy(wallet); + + assertEquals(WalletLockStatus.TEMPORARILY_LOCKED, updatedWallet.getWalletMetadata().getLockStatus()); + assertNotNull(updatedWallet.getWalletMetadata().getPasscodeControl().getRetryBlockedUntil()); + assertTrue(updatedWallet.getWalletMetadata().getPasscodeControl().getRetryBlockedUntil() > System.currentTimeMillis()); + } + + @Test + public void enforceLockCyclePolicyShouldPermanentlyLockWalletOnInvalidLastAttemptInLastCycle() { + wallet.getWalletMetadata().getPasscodeControl().setFailedAttemptCount(4); + wallet.getWalletMetadata().getPasscodeControl().setCurrentCycleCount(3); + + Wallet updatedWallet = walletLockManager.enforceLockCyclePolicy(wallet); + + assertEquals(WalletLockStatus.PERMANENTLY_LOCKED, updatedWallet.getWalletMetadata().getLockStatus()); + assertNull(updatedWallet.getWalletMetadata().getPasscodeControl().getRetryBlockedUntil()); + } + + @Test + public void enforceLockCyclePolicyShouldSetStatusToLastAttemptBeforeLockoutOnInvalidPenultimateAttempt() { + wallet.getWalletMetadata().getPasscodeControl().setFailedAttemptCount(3); + wallet.getWalletMetadata().getPasscodeControl().setCurrentCycleCount(3); + + Wallet updatedWallet = walletLockManager.enforceLockCyclePolicy(wallet); + + assertEquals(WalletLockStatus.LAST_ATTEMPT_BEFORE_LOCKOUT, updatedWallet.getWalletMetadata().getLockStatus()); + assertNull(updatedWallet.getWalletMetadata().getPasscodeControl().getRetryBlockedUntil()); + } + + @Test + public void testResetTemporaryLockIfLockIsExpired() { + wallet.getWalletMetadata().setLockStatus(WalletLockStatus.TEMPORARILY_LOCKED); + wallet.getWalletMetadata().getPasscodeControl().setRetryBlockedUntil(System.currentTimeMillis() - 1000); + + Wallet updatedWallet = walletLockManager.resetTemporaryLockIfExpired(wallet); + + assertEquals(WalletLockStatus.LOCK_EXPIRED, updatedWallet.getWalletMetadata().getLockStatus()); + assertEquals(0, updatedWallet.getWalletMetadata().getPasscodeControl().getFailedAttemptCount()); + assertNull(updatedWallet.getWalletMetadata().getPasscodeControl().getRetryBlockedUntil()); + } + + @Test + public void testResetTemporaryLockIfLockIsNotExpired() { + wallet.getWalletMetadata().setLockStatus(WalletLockStatus.TEMPORARILY_LOCKED); + wallet.getWalletMetadata().getPasscodeControl().setRetryBlockedUntil(System.currentTimeMillis() + 1000); + + Wallet updatedWallet = walletLockManager.resetTemporaryLockIfExpired(wallet); + + assertEquals(WalletLockStatus.TEMPORARILY_LOCKED, updatedWallet.getWalletMetadata().getLockStatus()); + assertNotNull(updatedWallet.getWalletMetadata().getPasscodeControl().getRetryBlockedUntil()); + assertEquals(wallet.getWalletMetadata().getPasscodeControl().getFailedAttemptCount(), + updatedWallet.getWalletMetadata().getPasscodeControl().getFailedAttemptCount()); + } + + @Test + public void testResetLockState() { + wallet.getWalletMetadata().getPasscodeControl().setFailedAttemptCount(6); + wallet.getWalletMetadata().getPasscodeControl().setCurrentCycleCount(2); + wallet.getWalletMetadata().setLockStatus(WalletLockStatus.TEMPORARILY_LOCKED); + + Wallet updatedWallet = walletLockManager.resetLockState(wallet); + + assertEquals(0, updatedWallet.getWalletMetadata().getPasscodeControl().getFailedAttemptCount()); + assertEquals(0, updatedWallet.getWalletMetadata().getPasscodeControl().getCurrentCycleCount()); + assertNull(updatedWallet.getWalletMetadata().getPasscodeControl().getRetryBlockedUntil()); + assertNull(updatedWallet.getWalletMetadata().getLockStatus()); + } +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/WalletLockStatusServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletLockStatusServiceTest.java new file mode 100644 index 000000000..bda0debc2 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/service/WalletLockStatusServiceTest.java @@ -0,0 +1,71 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.dto.ErrorDTO; +import io.mosip.mimoto.exception.ErrorConstants; +import io.mosip.mimoto.model.PasscodeControl; +import io.mosip.mimoto.model.Wallet; +import io.mosip.mimoto.model.WalletMetadata; +import io.mosip.mimoto.model.WalletLockStatus; +import io.mosip.mimoto.util.TestUtilities; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +@RunWith(SpringRunner.class) +public class WalletLockStatusServiceTest { + + private final WalletLockStatusService walletStatusService = new WalletLockStatusService(); + private Wallet wallet; + + @Before + public void setUp() { + String userId = UUID.randomUUID().toString(); + PasscodeControl passcodeControl = TestUtilities.createPasscodeControl(0, 0, null); + WalletMetadata walletMetadata = TestUtilities.createWalletMetadata("Test Wallet", passcodeControl, null); + wallet = TestUtilities.createWallet(userId, "encryptedWalletKey", walletMetadata); + } + + @Test + public void testGetWalletStatusShouldReturnWalletStatus() { + wallet.getWalletMetadata().setLockStatus(WalletLockStatus.TEMPORARILY_LOCKED); + + WalletLockStatus status = walletStatusService.getWalletLockStatus(wallet); + + assertEquals(WalletLockStatus.TEMPORARILY_LOCKED, status); + } + + @Test + public void testGetErrorBasedOnWalletLockStatusShouldReturnErrorObjForPermanentlyLockedWallet() { + wallet.getWalletMetadata().setLockStatus(WalletLockStatus.PERMANENTLY_LOCKED); + + ErrorDTO errorDTO = walletStatusService.getErrorBasedOnWalletLockStatus(wallet); + + assertEquals(ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorCode(), errorDTO.getErrorCode()); + assertEquals(ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorMessage(), errorDTO.getErrorMessage()); + } + + @Test + public void testGetErrorBasedOnWalletLockStatusShouldReturnErrorObjForTemporarilyLockedWallet() { + wallet.getWalletMetadata().setLockStatus(WalletLockStatus.TEMPORARILY_LOCKED); + + ErrorDTO errorDTO = walletStatusService.getErrorBasedOnWalletLockStatus(wallet); + + assertEquals(ErrorConstants.WALLET_TEMPORARILY_LOCKED.getErrorCode(), errorDTO.getErrorCode()); + assertEquals(ErrorConstants.WALLET_TEMPORARILY_LOCKED.getErrorMessage(), errorDTO.getErrorMessage()); + } + + @Test + public void testGetErrorBasedOnWalletLockStatusShouldReturnErrorObjWhenOnlyOneAttemptLeftBeforePermanentLockout() { + wallet.getWalletMetadata().setLockStatus(WalletLockStatus.LAST_ATTEMPT_BEFORE_LOCKOUT); + + ErrorDTO errorDTO = walletStatusService.getErrorBasedOnWalletLockStatus(wallet); + + assertEquals(ErrorConstants.WALLET_LAST_ATTEMPT_BEFORE_LOCKOUT.getErrorCode(), errorDTO.getErrorCode()); + assertEquals(ErrorConstants.WALLET_LAST_ATTEMPT_BEFORE_LOCKOUT.getErrorMessage(), errorDTO.getErrorMessage()); + } +} diff --git a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java index 0a4a80026..30018f4dd 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java @@ -1,45 +1,60 @@ package io.mosip.mimoto.service; import io.mosip.mimoto.constant.SessionKeys; +import io.mosip.mimoto.dto.*; +import io.mosip.mimoto.exception.WalletLockedException; import io.mosip.mimoto.model.Wallet; +import io.mosip.mimoto.model.WalletLockStatus; import io.mosip.mimoto.model.WalletMetadata; -import io.mosip.mimoto.dto.WalletResponseDto; +import io.mosip.mimoto.model.PasscodeControl; +import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.exception.InvalidRequestException; import io.mosip.mimoto.exception.UnauthorizedAccessException; import io.mosip.mimoto.repository.WalletRepository; import io.mosip.mimoto.service.impl.WalletServiceImpl; +import io.mosip.mimoto.util.TestUtilities; import io.mosip.mimoto.util.WalletUtil; import io.mosip.mimoto.util.WalletValidator; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.mock.web.MockHttpSession; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringRunner; -import java.time.Instant; -import java.util.Arrays; -import java.util.List; -import java.util.Optional; -import java.util.UUID; +import java.util.*; import static org.junit.Assert.*; import static org.mockito.Mockito.*; -@RunWith(MockitoJUnitRunner.class) +@RunWith(SpringRunner.class) +@SpringBootTest(classes = {WalletServiceImpl.class}) +@TestPropertySource(locations = "classpath:application-test.properties") public class WalletServiceTest { - @Mock + @MockBean private WalletRepository walletRepository; - @Mock + @MockBean private WalletUtil walletHelper; - @Mock + @MockBean private WalletValidator walletValidator; - @InjectMocks + @MockBean + private WalletUnlockService walletUnlockService; + + @MockBean + private WalletLockStatusService walletStatusService; + + @MockBean + private WalletLockManager walletLockManager; + + @Autowired private WalletServiceImpl walletService; MockHttpSession mockSession; @@ -61,17 +76,16 @@ public void setUp() { mockSession.setAttribute("clientRegistrationId", "google"); mockSession.setAttribute(SessionKeys.USER_ID, userId); - wallet = new Wallet(); - wallet.setId(walletId); - wallet.setUserId(userId); - wallet.setWalletKey(encryptedWalletKey); - WalletMetadata walletMetadata = new WalletMetadata(); - walletMetadata.setEncryptionAlgo("AES"); - walletMetadata.setEncryptionType("symmetric"); - walletMetadata.setName("default"); - wallet.setWalletMetadata(walletMetadata); + PasscodeControl passcodeControl = TestUtilities.createPasscodeControl(1, 1, null); + WalletMetadata walletMetadata = TestUtilities.createWalletMetadata("Test Wallet", passcodeControl, null); + wallet = TestUtilities.createWallet(userId, encryptedWalletKey, walletMetadata); + walletId = wallet.getId(); + } + @Value("${wallet.passcode.retryBlockedUntil}") + private long retryBlockedUntil; + @Test public void shouldCreateWalletSuccessfully() { String newWalletId = UUID.randomUUID().toString(); @@ -119,16 +133,14 @@ public void shouldCreateWalletSuccessfullyIfWalletNameIsNotProvided() { @Test public void shouldUnlockWalletSuccessfully() { when(walletRepository.findByUserIdAndId(userId, walletId)).thenReturn(Optional.of(wallet)); - when(walletHelper.decryptWalletKey(encryptedWalletKey, walletPin)).thenReturn(decryptedWalletKey); + when(walletUnlockService.handleUnlock(wallet, walletPin)).thenReturn(decryptedWalletKey); - WalletResponseDto result = walletService.unlockWallet(walletId, walletPin, mockSession); + WalletResponseDto responseDto = walletService.unlockWallet(walletId, walletPin, userId); verify(walletRepository).findByUserIdAndId(userId, walletId); - verify(walletHelper).decryptWalletKey(encryptedWalletKey, walletPin); - assertEquals(walletId, result.getWalletId()); - assertEquals("default", result.getWalletName()); - assertEquals(decryptedWalletKey, mockSession.getAttribute(SessionKeys.WALLET_KEY)); - assertEquals(walletId, mockSession.getAttribute(SessionKeys.WALLET_ID)); + assertEquals(walletId, responseDto.getWalletId()); + assertEquals("Test Wallet", responseDto.getWalletName()); + assertEquals(decryptedWalletKey, responseDto.getDecryptedWalletKey()); } @Test @@ -136,7 +148,7 @@ public void shouldThrowInvalidRequestExceptionIfWalletNotFoundForGivenUserIdAndW when(walletRepository.findByUserIdAndId(userId, walletId)).thenReturn(Optional.empty()); InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> - walletService.unlockWallet(walletId, walletPin, mockSession)); + walletService.unlockWallet(walletId, walletPin, userId)); assertEquals("invalid_request", exception.getErrorCode()); assertEquals("invalid_request --> Wallet not found", exception.getMessage()); @@ -146,12 +158,13 @@ public void shouldThrowInvalidRequestExceptionIfWalletNotFoundForGivenUserIdAndW @Test public void shouldThrowInvalidPinErrorCodeExceptionWhenDecryptingWalletKeyWithInvalidPin() { - String invalidPin = "wrongPin"; + String invalidPin = "12345678"; when(walletRepository.findByUserIdAndId(userId, walletId)).thenReturn(Optional.of(wallet)); - when(walletHelper.decryptWalletKey(encryptedWalletKey, invalidPin)).thenThrow(new InvalidRequestException("invalid_pin", "Invalid PIN or wallet key provided")); + doThrow(new InvalidRequestException(ErrorConstants.INVALID_PIN.getErrorCode(), "Invalid PIN or wallet key provided")) + .when(walletUnlockService).handleUnlock(wallet, invalidPin); InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> - walletService.unlockWallet(walletId, invalidPin, mockSession)); + walletService.unlockWallet(walletId, invalidPin, userId)); verify(walletRepository).findByUserIdAndId(userId, walletId); assertEquals("invalid_pin", exception.getErrorCode()); @@ -159,38 +172,147 @@ public void shouldThrowInvalidPinErrorCodeExceptionWhenDecryptingWalletKeyWithIn } @Test - public void shouldReturnListOfWalletResponseDtosForGivenUserId() { - String walletId1 = UUID.randomUUID().toString(); - String walletId2 = UUID.randomUUID().toString(); - WalletMetadata walletMetadata = new WalletMetadata(); - walletMetadata.setEncryptionAlgo("AES"); - walletMetadata.setEncryptionType("symmetric"); - walletMetadata.setName("Test Wallet"); - List walletIds = Arrays.asList(walletId1, walletId2); - List walletNames = Arrays.asList(null, "Test Wallet"); - Wallet wallet1 = new Wallet( - walletId1, "mock-user-id", "mock-encrypted-key", new WalletMetadata(), List.of(), Instant.now(), Instant.now() - ); - Wallet wallet2 = new Wallet( - walletId2, "mock-user-id-2", "mock-encrypted-key", walletMetadata, List.of(), Instant.now(), Instant.now() - ); - when(walletRepository.findWalletByUserId(userId)).thenReturn(List.of(wallet1, wallet2)); - - List result = walletService.getWallets(userId); - - assertEquals(walletIds.size(), result.size()); - for (int i = 0; i < walletIds.size(); i++) { - assertEquals(walletIds.get(i), result.get(i).getWalletId()); - assertEquals(walletNames.get(i), result.get(i).getWalletName()); - } + public void shouldThrowTemporarilyLockedExceptionWhenUnlockingWalletWhichIsAlreadyLockedTemporarily() { + PasscodeControl passcodeControl = TestUtilities.createPasscodeControl(6, 2, retryBlockedUntil); + WalletMetadata walletMetadata = TestUtilities.createWalletMetadata("Test Wallet", passcodeControl, WalletLockStatus.TEMPORARILY_LOCKED); + wallet = TestUtilities.createWallet(userId, "mock-encrypted-key", walletMetadata); + walletId = wallet.getId(); + when(walletRepository.findByUserIdAndId(userId, wallet.getId())).thenReturn(Optional.of(wallet)); + String errorMessage = ErrorConstants.WALLET_TEMPORARILY_LOCKED.getErrorMessage() + " for " + (retryBlockedUntil / (60 * 60 * 1000)) + " hour(s)"; + String expectedErrorMessage = ErrorConstants.WALLET_TEMPORARILY_LOCKED.getErrorCode() + " --> " + errorMessage; + doThrow(new WalletLockedException(ErrorConstants.WALLET_TEMPORARILY_LOCKED.getErrorCode(), errorMessage)) + .when(walletUnlockService).handleUnlock(wallet, walletPin); + + WalletLockedException exception = assertThrows(WalletLockedException.class, () -> + walletService.unlockWallet(walletId, walletPin, userId)); + + verify(walletRepository).findByUserIdAndId(userId, wallet.getId()); + assertEquals(ErrorConstants.WALLET_TEMPORARILY_LOCKED.getErrorCode(), exception.getErrorCode()); + assertEquals(expectedErrorMessage, exception.getMessage()); + } + + @Test + public void shouldThrowTemporarilyLockedExceptionWhenUnlockingWalletWithInvalidPinInLastAttemptBeforeTemporaryLock() { + PasscodeControl passcodeControl = TestUtilities.createPasscodeControl(5, 1, null); + WalletMetadata walletMetadata = TestUtilities.createWalletMetadata("Test Wallet", passcodeControl, null); + wallet = TestUtilities.createWallet(userId, encryptedWalletKey, walletMetadata); + walletPin = "12345678"; + walletId = wallet.getId(); + + when(walletRepository.findByUserIdAndId(userId, wallet.getId())).thenReturn(Optional.of(wallet)); + when(walletHelper.decryptWalletKey(encryptedWalletKey, walletPin)).thenThrow(new InvalidRequestException("invalid_pin", "Invalid PIN or wallet key provided")); + String errorMessage = ErrorConstants.WALLET_TEMPORARILY_LOCKED.getErrorMessage() + " for " + (retryBlockedUntil / (60 * 60 * 1000)) + " hour(s)"; + String expectedErrorMessage = ErrorConstants.WALLET_TEMPORARILY_LOCKED.getErrorCode() + " --> " + errorMessage; + doThrow(new WalletLockedException(ErrorConstants.WALLET_TEMPORARILY_LOCKED.getErrorCode(), errorMessage)) + .when(walletUnlockService).handleUnlock(wallet, walletPin); + + WalletLockedException exception = assertThrows(WalletLockedException.class, () -> + walletService.unlockWallet(walletId, walletPin, userId)); + + verify(walletRepository).findByUserIdAndId(userId, walletId); + assertEquals(ErrorConstants.WALLET_TEMPORARILY_LOCKED.getErrorCode(), exception.getErrorCode()); + assertEquals(expectedErrorMessage, exception.getMessage()); + } + + @Test + public void shouldThrowPermanentlyLockedExceptionWhenUnlockingWalletWhichIsAlreadyLockedPermanently() { + PasscodeControl passcodeControl = TestUtilities.createPasscodeControl(6, 4, null); + WalletMetadata walletMetadata = TestUtilities.createWalletMetadata("Test Wallet", passcodeControl, WalletLockStatus.PERMANENTLY_LOCKED); + wallet = TestUtilities.createWallet(userId, "mock-encrypted-key", walletMetadata); + walletId = wallet.getId(); + when(walletRepository.findByUserIdAndId(userId, wallet.getId())).thenReturn(Optional.of(wallet)); + String expectedErrorMessage = ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorCode() + " --> " + ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorMessage(); + doThrow(new WalletLockedException(ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorCode(), ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorMessage())) + .when(walletUnlockService).handleUnlock(wallet, walletPin); + + WalletLockedException exception = assertThrows(WalletLockedException.class, () -> walletService.unlockWallet(walletId, walletPin, userId)); + + verify(walletRepository).findByUserIdAndId(userId, wallet.getId()); + assertEquals(ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorCode(), exception.getErrorCode()); + assertEquals(expectedErrorMessage, exception.getMessage()); + } + + @Test + public void shouldThrowExceptionWhenUnlockingWalletWithInvalidPinInLastSecondAttemptBeforePermanentLock() { + PasscodeControl passcodeControl = TestUtilities.createPasscodeControl(4, 3, null); + WalletMetadata walletMetadata = TestUtilities.createWalletMetadata("Test Wallet", passcodeControl, null); + wallet = TestUtilities.createWallet(userId, encryptedWalletKey, walletMetadata); + walletPin = "12345678"; + walletId = wallet.getId(); + + when(walletRepository.findByUserIdAndId(userId, wallet.getId())).thenReturn(Optional.of(wallet)); + when(walletHelper.decryptWalletKey(encryptedWalletKey, walletPin)).thenThrow(new InvalidRequestException("invalid_pin", "Invalid PIN or wallet key provided")); + String expectedErrorMessage = ErrorConstants.WALLET_LAST_ATTEMPT_BEFORE_LOCKOUT.getErrorCode() + " --> " + ErrorConstants.WALLET_LAST_ATTEMPT_BEFORE_LOCKOUT.getErrorMessage(); + doThrow(new WalletLockedException(ErrorConstants.WALLET_LAST_ATTEMPT_BEFORE_LOCKOUT.getErrorCode(), ErrorConstants.WALLET_LAST_ATTEMPT_BEFORE_LOCKOUT.getErrorMessage())) + .when(walletUnlockService).handleUnlock(wallet, walletPin); + + WalletLockedException exception = assertThrows(WalletLockedException.class, () -> + walletService.unlockWallet(walletId, walletPin, userId)); + + verify(walletRepository).findByUserIdAndId(userId, walletId); + assertEquals(ErrorConstants.WALLET_LAST_ATTEMPT_BEFORE_LOCKOUT.getErrorCode(), exception.getErrorCode()); + assertEquals(expectedErrorMessage, exception.getMessage()); + } + + @Test + public void shouldThrowPermanentlyLockedExceptionWhenUnlockingWalletWithInvalidPinInLastAttemptBeforePermanentLock() { + PasscodeControl passcodeControl = TestUtilities.createPasscodeControl(5, 3, null); + WalletMetadata walletMetadata = TestUtilities.createWalletMetadata("Test Wallet", passcodeControl, WalletLockStatus.LAST_ATTEMPT_BEFORE_LOCKOUT); + wallet = TestUtilities.createWallet(userId, encryptedWalletKey, walletMetadata); + walletPin = "12345678"; + walletId = wallet.getId(); + + when(walletRepository.findByUserIdAndId(userId, wallet.getId())).thenReturn(Optional.of(wallet)); + when(walletHelper.decryptWalletKey(encryptedWalletKey, walletPin)).thenThrow(new InvalidRequestException("invalid_pin", "Invalid PIN or wallet key provided")); + String expectedErrorMessage = ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorCode() + " --> " + ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorMessage(); + doThrow(new WalletLockedException(ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorCode(), ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorMessage())) + .when(walletUnlockService).handleUnlock(wallet, walletPin); + + WalletLockedException exception = assertThrows(WalletLockedException.class, () -> + walletService.unlockWallet(walletId, walletPin, userId)); + + verify(walletRepository).findByUserIdAndId(userId, walletId); + assertEquals(ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorCode(), exception.getErrorCode()); + assertEquals(expectedErrorMessage, exception.getMessage()); + } + + + @Test + public void shouldReturnListOfWalletResponseDTOsForGivenUserId() { + PasscodeControl passcodeControl = TestUtilities.createPasscodeControl(5, 3, null); + + WalletMetadata walletMetadata1 = TestUtilities.createWalletMetadata("Test Wallet1", passcodeControl, WalletLockStatus.TEMPORARILY_LOCKED); + Wallet wallet1 = TestUtilities.createWallet("mock-user-id-1", "mock-encrypted-key", walletMetadata1); + + WalletMetadata walletMetadata2 = TestUtilities.createWalletMetadata("Test Wallet2", passcodeControl, null); + Wallet wallet2 = TestUtilities.createWallet("mock-user-id-2", "mock-encrypted-key", walletMetadata2); + + List mockWallets = List.of(wallet1, wallet2); + + when(walletLockManager.resetTemporaryLockIfExpired(wallet1)).thenReturn(wallet1); + when(walletLockManager.resetTemporaryLockIfExpired(wallet2)).thenReturn(wallet2); + when(walletStatusService.getWalletLockStatus(wallet1)).thenReturn(WalletLockStatus.TEMPORARILY_LOCKED); + when(walletStatusService.getWalletLockStatus(wallet2)).thenReturn(null); + when(walletRepository.findWalletByUserId(userId)).thenReturn(mockWallets); + + List result = walletService.getWallets(userId); + verify(walletRepository).findWalletByUserId(userId); + assertEquals(mockWallets.size(), result.size()); + for (int i = 0; i < mockWallets.size(); i++) { + Wallet expectedWallet = mockWallets.get(i); + + assertEquals(expectedWallet.getId(), result.get(i).getWalletId()); + assertEquals(expectedWallet.getWalletMetadata().getName(), result.get(i).getWalletName()); + assertEquals(expectedWallet.getWalletMetadata().getLockStatus(), result.get(i).getWalletStatus()); + } } @Test public void shouldReturnEmptyListIfNoWalletsFoundForGivenUserId() { when(walletRepository.findWalletByUserId(userId)).thenReturn(List.of()); - List result = walletService.getWallets(userId); + List result = walletService.getWallets(userId); assertTrue(result.isEmpty()); verify(walletRepository).findWalletByUserId(userId); diff --git a/src/test/java/io/mosip/mimoto/service/WalletUnlockServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletUnlockServiceTest.java new file mode 100644 index 000000000..a8e488a99 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/service/WalletUnlockServiceTest.java @@ -0,0 +1,175 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.constant.SessionKeys; +import io.mosip.mimoto.dto.ErrorDTO; +import io.mosip.mimoto.model.PasscodeControl; +import io.mosip.mimoto.model.Wallet; +import io.mosip.mimoto.model.WalletMetadata; +import io.mosip.mimoto.exception.ErrorConstants; +import io.mosip.mimoto.exception.InvalidRequestException; +import io.mosip.mimoto.exception.WalletLockedException; +import io.mosip.mimoto.repository.WalletRepository; +import io.mosip.mimoto.util.TestUtilities; +import io.mosip.mimoto.util.WalletUtil; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.mock.web.MockHttpSession; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = {WalletUnlockService.class}) +@TestPropertySource(locations = "classpath:application-test.properties") +class WalletUnlockServiceTest { + + @MockBean + private WalletUtil walletUtil; + + @MockBean + private WalletLockManager walletLockManager; + + @MockBean + private WalletLockStatusService walletLockStatusService; + + @MockBean + private WalletRepository walletRepository; + + @Autowired + private WalletUnlockService walletUnlockService; + + MockHttpSession mockSession; + private String walletPin, encryptedWalletKey, decryptedWalletKey; + private Wallet wallet; + + @BeforeEach + void setUp() { + String userId = UUID.randomUUID().toString(); + walletPin = "1234"; + encryptedWalletKey = "encryptedKey"; + decryptedWalletKey = "decryptedKey"; + + mockSession = new MockHttpSession(); + mockSession.setAttribute("clientRegistrationId", "google"); + mockSession.setAttribute(SessionKeys.USER_ID, userId); + + PasscodeControl passcodeControl = TestUtilities.createPasscodeControl(1, 1, null); + WalletMetadata walletMetadata = TestUtilities.createWalletMetadata("Test Wallet", passcodeControl, null); + wallet = TestUtilities.createWallet(userId, encryptedWalletKey, walletMetadata); + } + + @Test + void shouldUnlockWalletSuccessfullyAndReturnDecryptedWalletKeyWhenValidPinIsProvided() throws InvalidRequestException { + when(walletLockManager.resetTemporaryLockIfExpired(wallet)).thenReturn(wallet); + when(walletLockStatusService.getErrorBasedOnWalletLockStatus(wallet)).thenReturn(null); + when(walletUtil.decryptWalletKey(encryptedWalletKey, walletPin)).thenReturn(decryptedWalletKey); + + String result = walletUnlockService.handleUnlock(wallet, walletPin); + + assertEquals(decryptedWalletKey, result); + verify(walletLockStatusService, times(1)).getErrorBasedOnWalletLockStatus(wallet); + verify(walletUtil).decryptWalletKey(encryptedWalletKey, walletPin); + verify(walletLockManager).resetTemporaryLockIfExpired(wallet); + verify(walletLockManager).resetLockState(wallet); + } + + @Test + void shouldThrowExceptionAndHandleUnlockFailureWhenInvalidPinIsProvided() throws InvalidRequestException { + String invalidPin = "12345678"; + when(walletLockManager.resetTemporaryLockIfExpired(wallet)).thenReturn(wallet).thenReturn(wallet); + when(walletLockManager.enforceLockCyclePolicy(wallet)).thenReturn(wallet); + when(walletLockStatusService.getErrorBasedOnWalletLockStatus(wallet)).thenReturn(null); + when(walletUtil.decryptWalletKey(encryptedWalletKey, invalidPin)) + .thenThrow(new InvalidRequestException(ErrorConstants.INVALID_PIN.getErrorCode(), "Invalid PIN")); + + InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> + walletUnlockService.handleUnlock(wallet, invalidPin)); + + assertEquals(ErrorConstants.INVALID_PIN.getErrorCode(), exception.getErrorCode()); + assertEquals("invalid_pin --> Invalid PIN", exception.getMessage()); + + verify(walletUtil).decryptWalletKey(encryptedWalletKey, invalidPin); + verify(walletLockManager).enforceLockCyclePolicy(wallet); + verify(walletLockStatusService, times(3)).getErrorBasedOnWalletLockStatus(wallet); + verify(walletLockManager,times(2)).resetTemporaryLockIfExpired(wallet); + verify(walletLockManager, never()).resetLockState(wallet); + verify(walletRepository, times(1)).save(wallet); + } + + @Test + void shouldThrowExceptionWhenWalletIsLockedPermanentlyAfterValidatingInvalidPin() throws InvalidRequestException { + String invalidPin = "12345678"; + when(walletLockManager.resetTemporaryLockIfExpired(wallet)).thenReturn(wallet).thenReturn(wallet); + when(walletUtil.decryptWalletKey(encryptedWalletKey, invalidPin)) + .thenThrow(new InvalidRequestException(ErrorConstants.INVALID_PIN.getErrorCode(), "Invalid PIN")); + when(walletLockManager.enforceLockCyclePolicy(wallet)).thenReturn(wallet); + when(walletLockStatusService.getErrorBasedOnWalletLockStatus(wallet)) + .thenReturn(null) + .thenReturn(null) + .thenReturn(new ErrorDTO(ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorCode(), ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorMessage())); + String expectedErrorMessage = ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorCode() + " --> " + ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorMessage(); + + WalletLockedException exception = assertThrows(WalletLockedException.class, () -> + walletUnlockService.handleUnlock(wallet, invalidPin)); + + assertEquals(ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorCode(), exception.getErrorCode()); + assertEquals(expectedErrorMessage, exception.getMessage()); + + verify(walletUtil).decryptWalletKey(encryptedWalletKey, invalidPin); + verify(walletLockManager).enforceLockCyclePolicy(wallet); + verify(walletLockManager,times(2)).resetTemporaryLockIfExpired(wallet); + verify(walletLockStatusService, times(3)).getErrorBasedOnWalletLockStatus(wallet); + verify(walletLockManager, never()).resetLockState(wallet); + verify(walletRepository, times(1)).save(wallet); + } + + @Test + void shouldThrowExceptionWhenOnlyOneAttemptIsLeftBeforePermanentLockoutAfterValidatingInvalidPin() throws InvalidRequestException { + String invalidPin = "12345678"; + when(walletLockManager.resetTemporaryLockIfExpired(wallet)).thenReturn(wallet).thenReturn(wallet); + when(walletUtil.decryptWalletKey(encryptedWalletKey, invalidPin)) + .thenThrow(new InvalidRequestException(ErrorConstants.INVALID_PIN.getErrorCode(), "Invalid PIN")); + when(walletLockStatusService.getErrorBasedOnWalletLockStatus(wallet)) + .thenReturn(null) + .thenReturn(new ErrorDTO(ErrorConstants.WALLET_LAST_ATTEMPT_BEFORE_LOCKOUT.getErrorCode(), ErrorConstants.WALLET_LAST_ATTEMPT_BEFORE_LOCKOUT.getErrorMessage())); + when(walletLockManager.enforceLockCyclePolicy(wallet)).thenReturn(wallet); + String expectedErrorMessage = ErrorConstants.WALLET_LAST_ATTEMPT_BEFORE_LOCKOUT.getErrorCode() + " --> " + ErrorConstants.WALLET_LAST_ATTEMPT_BEFORE_LOCKOUT.getErrorMessage(); + + InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> + walletUnlockService.handleUnlock(wallet, invalidPin)); + + assertEquals(ErrorConstants.WALLET_LAST_ATTEMPT_BEFORE_LOCKOUT.getErrorCode(), exception.getErrorCode()); + assertEquals(expectedErrorMessage, exception.getMessage()); + + verify(walletUtil).decryptWalletKey(encryptedWalletKey, invalidPin); + verify(walletLockManager).enforceLockCyclePolicy(wallet); + verify(walletLockManager, times(1)).resetTemporaryLockIfExpired(wallet); + verify(walletLockStatusService, times(2)).getErrorBasedOnWalletLockStatus(wallet); + verify(walletLockManager, never()).resetLockState(wallet); + verify(walletRepository, times(1)).save(wallet); + } + + @Test + void shouldThrowExceptionImmediatelyWhenUnlockingWalletIsAlreadyLockedPermanently() throws InvalidRequestException { + when(walletLockManager.resetTemporaryLockIfExpired(wallet)).thenReturn(wallet); + when(walletLockStatusService.getErrorBasedOnWalletLockStatus(wallet)).thenReturn(new ErrorDTO(ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorCode(), ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorMessage())); + String expectedErrorMessage = ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorCode() + " --> " + ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorMessage(); + + WalletLockedException exception = assertThrows(WalletLockedException.class, () -> + walletUnlockService.handleUnlock(wallet, walletPin)); + + assertEquals(ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorCode(), exception.getErrorCode()); + assertEquals(expectedErrorMessage, exception.getMessage()); + + verify(walletLockManager,times(1)).resetTemporaryLockIfExpired(wallet); + verify(walletLockStatusService, times(1)).getErrorBasedOnWalletLockStatus(wallet); + } +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index bbe11fee6..a7ffa4cec 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -9,7 +9,10 @@ import com.itextpdf.kernel.pdf.PdfDocument; import com.itextpdf.kernel.pdf.PdfReader; import io.mosip.mimoto.model.CredentialMetadata; +import io.mosip.mimoto.model.PasscodeControl; import io.mosip.mimoto.model.VerifiableCredential; +import io.mosip.mimoto.model.Wallet; +import io.mosip.mimoto.model.WalletMetadata; import io.mosip.mimoto.dto.*; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.dto.openid.VerifierDTO; @@ -17,6 +20,7 @@ import io.mosip.mimoto.dto.openid.datashare.DataShareResponseDTO; import io.mosip.mimoto.dto.openid.datashare.DataShareResponseWrapperDTO; import io.mosip.mimoto.dto.openid.presentation.*; +import io.mosip.mimoto.model.WalletLockStatus; import org.springframework.util.ResourceUtils; import java.io.InputStream; @@ -24,6 +28,7 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.nio.file.Files; +import java.time.Instant; import java.util.*; import java.util.Collections; import java.util.HashMap; @@ -133,19 +138,17 @@ public static CredentialsSupportedResponse getCredentialSupportedResponse(String } public static CredentialIssuerWellKnownResponse getCredentialIssuerWellKnownResponseDto(String issuerName, Map credentialsSupportedResponses) { - CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = new CredentialIssuerWellKnownResponse( + return new CredentialIssuerWellKnownResponse( "https://dev/" + issuerName, List.of("https://auth-server.env.net"), "https://dev/issuance/credential", credentialsSupportedResponses); - return credentialIssuerWellKnownResponse; } public static CredentialIssuerConfiguration getCredentialIssuerConfigurationResponseDto(String issuerName, String credentialType, List nullFields) { AuthorizationServerWellKnownResponse authorizationServerWellKnownResponse = getAuthServerWellknownResponseDto(nullFields); Map credentialsSupportedResponses = Map.of(credentialType, getCredentialSupportedResponse(credentialType)); - CredentialIssuerConfiguration credentialIssuerConfiguration = new CredentialIssuerConfiguration("https://dev/" + issuerName, List.of("https://auth-server.env.net"), "https://dev/issuance/credential", credentialsSupportedResponses, authorizationServerWellKnownResponse); - return credentialIssuerConfiguration; + return new CredentialIssuerConfiguration("https://dev/" + issuerName, List.of("https://auth-server.env.net"), "https://dev/issuance/credential", credentialsSupportedResponses, authorizationServerWellKnownResponse); } public static AuthorizationServerWellKnownResponse getAuthServerWellknownResponseDto(List nullFields) { @@ -344,7 +347,7 @@ public static VCCredentialResponse getVCCredentialResponseDTO(String type) { public static DataShareResponseDto getDataShareResponseDTO(String errorCode) { return DataShareResponseDto.builder() .dataShare(new DataShare()) - .errors(List.of(new ErrorDTO(errorCode == "" ? "Expired!" : errorCode, "Download is failed as credential is expired"))) + .errors(List.of(new ErrorDTO(errorCode.equals("") ? "Expired!" : errorCode, "Download is failed as credential is expired"))) .build(); } @@ -443,4 +446,33 @@ public static VerifiableCredentialResponseDTO getVerifiableCredentialResponseDTO public static String createRequestBody(Object request) throws JsonProcessingException { return new ObjectMapper().writeValueAsString(request); } + + public static Wallet createWallet(String userId, String walletKey, WalletMetadata walletMetadata) { + Wallet wallet = new Wallet(); + wallet.setId(UUID.randomUUID().toString()); + wallet.setUserId(userId); + wallet.setWalletKey(walletKey); + wallet.setWalletMetadata(walletMetadata); + wallet.setCreatedAt(Instant.now()); + wallet.setUpdatedAt(Instant.now()); + return wallet; + } + + public static WalletMetadata createWalletMetadata(String name, PasscodeControl passcodeControl, WalletLockStatus walletStatus) { + WalletMetadata walletMetadata = new WalletMetadata(); + walletMetadata.setName(name); + walletMetadata.setEncryptionAlgo("AES"); + walletMetadata.setEncryptionType("symmetric"); + walletMetadata.setPasscodeControl(passcodeControl); + walletMetadata.setLockStatus(walletStatus); + return walletMetadata; + } + + public static PasscodeControl createPasscodeControl(int failedAttemptCount, int currentCycleCount, Long retryBlockedUntil) { + PasscodeControl passcodeControl = new PasscodeControl(); + passcodeControl.setFailedAttemptCount(failedAttemptCount); + passcodeControl.setCurrentCycleCount(currentCycleCount); + passcodeControl.setRetryBlockedUntil(retryBlockedUntil); + return passcodeControl; + } } diff --git a/src/test/resources/application-test.properties b/src/test/resources/application-test.properties index 58b7367bc..623fd5439 100644 --- a/src/test/resources/application-test.properties +++ b/src/test/resources/application-test.properties @@ -46,3 +46,12 @@ mosip.data.share.create.retry.count=3 #OpenId4VP related Configuration END spring.security.oauth2.client.provider.google.jwk-set-uri=https://www.googleapis.com/oauth2/v3/certs + +# Wallet Passcode Configuration +# Duration (in minutes) for which the wallet remains locked after exceeding failed attempts in a cycle. +# Must be a whole number; decimal/fractional values (e.g., 0.5) will throw an error during Mimoto launch +wallet.passcode.retryBlockedUntil=60 +# Maximum number of failed passcode attempts allowed in a single cycle (defaults to 1 if <=0) +wallet.passcode.maxFailedAttemptsAllowedPerCycle=5 +# Maximum number of lock cycles allowed before the wallet is permanently locked (defaults to 1 if <=0) +wallet.passcode.maxLockCyclesAllowed=3 \ No newline at end of file From 1203a4971f9bba285fb81f7087822e6c9f039c40 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 15 Jul 2025 16:41:04 +0530 Subject: [PATCH 719/860] [Injiweb 1627] Make changes in WalletLockManager to support retry limit on existing wallets and rebase develop with release branch * [MOSIP-41906] Updated bitnami image for init container release-0.18.x Signed-off-by: Abhi * Merge pull request #772 from tw-mosip/injiweb-1605-develop-sonarqubedeletion injiweb-1605 removed the sonarqube workflow as it is not required Signed-off-by: Gurpreet41082 * Injiweb 1605 - Fixed architect review comments Injiweb 1605 Signed-off-by: Gurpreet41082 * [[INJIWEB-1620] add: validations for all fields in wallet add credential API * [INJIWEB-1620] add: validations for all fields in add credential to wallet API [INJIWEB-1620] empty code verifier validation [INJIWEB-1623] empty grantType validation Signed-off-by: KiruthikaJeyashankar * [INJIWEB-1620] refactor: remove redundant eq checks in test Signed-off-by: KiruthikaJeyashankar * [INJIWEB-1620] docs: update openapi doc update api doc with download credential into wallet's request validation error messages Signed-off-by: KiruthikaJeyashankar --------- Signed-off-by: KiruthikaJeyashankar * injiweb-1605 added test cases Signed-off-by: Gurpreet41082 Co-authored-by: Gurpreet41082 * [INJIWEB-1605] test: add missing test cases * injiweb-1605 added test cases Signed-off-by: Gurpreet41082 * injiweb-1605 added test cases for WalletCredentialService Signed-off-by: Gurpreet41082 --------- Signed-off-by: Gurpreet41082 Co-authored-by: Gurpreet41082 * MOSIP-41343 - Automated the inji web login api's Signed-off-by: Mohanachandran S * Injiweb jakarta fix (#778) * injiweb-1605 added test cases Signed-off-by: Gurpreet41082 * injiweb-1605 changing javax to jakarta for validations Signed-off-by: Gurpreet41082 --------- Signed-off-by: Gurpreet41082 * INJIWEB-1630 : fixed automation Signed-off-by: Nandhukumar * INJIWEB-1632 - Binding otp validation issue in automation post mimoto fix (#780) * INJIWEB-1632 Signed-off-by: Nandhukumar * INJIWEB-1632 Signed-off-by: Nandhukumar --------- Signed-off-by: Nandhukumar * [INJIWEB-1607] update issuersWithSingleVcLimit prop (#785) issuersWithSingleVcLimit holds only Mosip Signed-off-by: KiruthikaJeyashankar * [Injiweb 1645] fix verification issue observed for the VCs downloaded in the login flow and have qrCodeType set to OnlineSharing (#788) * [INJIWEB-1645] make changes in CredentialPDFGeneratorService to properly include the qrCodeImage in pdf based on whether it is login flow or not and based on qrCodeType of issuer Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1645] write test cases for new condition added in CredentialPDFGeneratorService file for generating qrCodeImage and including it in pdf Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --------- Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1627] make changes in the WalletLockManager to support the retry passcode flow for the already exsiting wallets in the database Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> * [INJIWEB-1627] revert changes in api-test folder which are taken from release-0.18.x Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --------- Signed-off-by: Abhi Signed-off-by: Gurpreet41082 Signed-off-by: KiruthikaJeyashankar Signed-off-by: Mohanachandran S Signed-off-by: Nandhukumar Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Co-authored-by: Gurpreet41082 Co-authored-by: Abhi Co-authored-by: Swati Goel Co-authored-by: KiruthikaJeyashankar Co-authored-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> Co-authored-by: Nandhukumar --- .talismanrc | 2 +- .../controller/CredentialShareController.java | 2 +- .../mimoto/controller/IdpController.java | 2 +- .../controller/ResidentServiceController.java | 2 +- .../mimoto/core/http/ResponseWrapper.java | 4 +- .../mimoto/dto/mimoto/AppOTPRequestDTO.java | 6 +- .../dto/mimoto/BindingOtpInnerReqDto.java | 4 +- .../dto/mimoto/BindingOtpRequestDto.java | 4 +- .../mimoto/CredentialDownloadRequestDTO.java | 2 +- .../dto/mimoto/ProofTypesSupported.java | 2 +- .../dto/mimoto/VCCredentialDefinition.java | 4 +- .../dto/mimoto/VCCredentialProperties.java | 4 +- .../dto/mimoto/VCCredentialRequest.java | 6 +- .../DataShareResponseWrapperDTO.java | 1 - .../VerifiablePresentationDTO.java | 4 +- .../CredentialRequestResponseDTO.java | 4 +- .../mimoto/service/WalletLockManager.java | 22 +++- .../impl/CredentialVerifierServiceImpl.java | 31 +++++ .../CredentialVerifierServiceTest.java | 108 ++++++++++++++++++ .../service/WalletCredentialServiceTest.java | 91 +++++++++++++++ ...lIssuerWellknownResponseValidatorTest.java | 21 ++-- 21 files changed, 281 insertions(+), 45 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/service/impl/CredentialVerifierServiceImpl.java create mode 100644 src/test/java/io/mosip/mimoto/service/CredentialVerifierServiceTest.java diff --git a/.talismanrc b/.talismanrc index c9b6ea892..06759952b 100644 --- a/.talismanrc +++ b/.talismanrc @@ -98,7 +98,7 @@ fileignoreconfig: - filename: src/test/java/io/mosip/mimoto/controller/WalletsControllerTest.java checksum: c0227f0642513e7b642c7e27a4732e005e3064bf9cc5f9c31f07800f23a4d03d - filename: src/main/java/io/mosip/mimoto/service/WalletLockManager.java - checksum: 0b7332fb14d20c455e338830283725dbf59f4caa8e7b39b38322ab0977a213d4 + checksum: c03b3ce388f26e45daaa08f65d589783840b1d143e8a2a89affe7481b27fa430 - filename: src/test/java/io/mosip/mimoto/service/WalletLockManagerTest.java checksum: faa7a26762a6e296db2a2e494ec9e7c8a46427ebc2975677b77bb137e2319356 - filename: src/test/java/io/mosip/mimoto/service/WalletLockStatusServiceTest.java diff --git a/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java b/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java index f7bcdb56b..fc2e93093 100644 --- a/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java +++ b/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java @@ -32,7 +32,7 @@ import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; -import javax.validation.Valid; +import jakarta.validation.Valid; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; diff --git a/src/main/java/io/mosip/mimoto/controller/IdpController.java b/src/main/java/io/mosip/mimoto/controller/IdpController.java index 942c52296..43ea97ec4 100644 --- a/src/main/java/io/mosip/mimoto/controller/IdpController.java +++ b/src/main/java/io/mosip/mimoto/controller/IdpController.java @@ -28,7 +28,7 @@ import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; -import javax.validation.Valid; +import jakarta.validation.Valid; import java.util.List; import java.util.Map; diff --git a/src/main/java/io/mosip/mimoto/controller/ResidentServiceController.java b/src/main/java/io/mosip/mimoto/controller/ResidentServiceController.java index e0502b088..977dfd462 100644 --- a/src/main/java/io/mosip/mimoto/controller/ResidentServiceController.java +++ b/src/main/java/io/mosip/mimoto/controller/ResidentServiceController.java @@ -21,7 +21,7 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; -import javax.validation.Valid; +import jakarta.validation.Valid; @RestController @Tag(name = SwaggerLiteralConstants.RESIDENT_NAME, description = SwaggerLiteralConstants.RESIDENT_DESCRIPTION) diff --git a/src/main/java/io/mosip/mimoto/core/http/ResponseWrapper.java b/src/main/java/io/mosip/mimoto/core/http/ResponseWrapper.java index 44a0241c1..0be513708 100644 --- a/src/main/java/io/mosip/mimoto/core/http/ResponseWrapper.java +++ b/src/main/java/io/mosip/mimoto/core/http/ResponseWrapper.java @@ -1,7 +1,7 @@ package io.mosip.mimoto.core.http; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import io.mosip.mimoto.dto.ErrorDTO; import lombok.Data; diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/AppOTPRequestDTO.java b/src/main/java/io/mosip/mimoto/dto/mimoto/AppOTPRequestDTO.java index 9d8320f54..e86f7c5ad 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/AppOTPRequestDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/AppOTPRequestDTO.java @@ -3,9 +3,9 @@ import java.util.List; import lombok.Data; -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Pattern; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Pattern; @Data public class AppOTPRequestDTO { diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpInnerReqDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpInnerReqDto.java index 0e981a24a..f0f1981f6 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpInnerReqDto.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpInnerReqDto.java @@ -3,8 +3,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; import java.util.List; @Data diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpRequestDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpRequestDto.java index c4629612b..c1a3bad19 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpRequestDto.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/BindingOtpRequestDto.java @@ -5,8 +5,8 @@ import lombok.Data; import lombok.NoArgsConstructor; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; @Data @AllArgsConstructor diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDownloadRequestDTO.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDownloadRequestDTO.java index ab7409127..942638cac 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDownloadRequestDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDownloadRequestDTO.java @@ -2,7 +2,7 @@ import lombok.Data; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; @Data public class CredentialDownloadRequestDTO { diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/ProofTypesSupported.java b/src/main/java/io/mosip/mimoto/dto/mimoto/ProofTypesSupported.java index faa6a460c..194865827 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/ProofTypesSupported.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/ProofTypesSupported.java @@ -6,7 +6,7 @@ import jakarta.validation.constraints.NotNull; import lombok.Data; -import javax.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotEmpty; import java.util.List; @Data diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialDefinition.java b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialDefinition.java index a07a56ab6..747e4ad4d 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialDefinition.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialDefinition.java @@ -4,8 +4,8 @@ import lombok.Builder; import lombok.Data; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; import java.util.List; import java.util.Map; diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialProperties.java b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialProperties.java index 8039df6e8..555104c11 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialProperties.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialProperties.java @@ -8,8 +8,8 @@ import lombok.Data; import lombok.NoArgsConstructor; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; import java.util.List; import java.util.Map; diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialRequest.java b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialRequest.java index 671ca1720..d7d9dafaa 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialRequest.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialRequest.java @@ -4,9 +4,9 @@ import lombok.Builder; import lombok.Data; -import javax.validation.Valid; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; @Data diff --git a/src/main/java/io/mosip/mimoto/dto/openid/datashare/DataShareResponseWrapperDTO.java b/src/main/java/io/mosip/mimoto/dto/openid/datashare/DataShareResponseWrapperDTO.java index e55c010f0..3db0037a0 100644 --- a/src/main/java/io/mosip/mimoto/dto/openid/datashare/DataShareResponseWrapperDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/openid/datashare/DataShareResponseWrapperDTO.java @@ -6,7 +6,6 @@ import lombok.Data; import lombok.NoArgsConstructor; -import javax.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/io/mosip/mimoto/dto/openid/presentation/VerifiablePresentationDTO.java b/src/main/java/io/mosip/mimoto/dto/openid/presentation/VerifiablePresentationDTO.java index 346288d87..fc9125f1b 100644 --- a/src/main/java/io/mosip/mimoto/dto/openid/presentation/VerifiablePresentationDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/openid/presentation/VerifiablePresentationDTO.java @@ -8,8 +8,8 @@ import lombok.Data; import lombok.NoArgsConstructor; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; import java.util.List; @Data diff --git a/src/main/java/io/mosip/mimoto/dto/resident/CredentialRequestResponseDTO.java b/src/main/java/io/mosip/mimoto/dto/resident/CredentialRequestResponseDTO.java index 62c314ff5..d8444ef7f 100644 --- a/src/main/java/io/mosip/mimoto/dto/resident/CredentialRequestResponseDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/resident/CredentialRequestResponseDTO.java @@ -3,8 +3,8 @@ import java.util.ArrayList; import java.util.List; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import io.mosip.mimoto.dto.ErrorDTO; import lombok.Data; diff --git a/src/main/java/io/mosip/mimoto/service/WalletLockManager.java b/src/main/java/io/mosip/mimoto/service/WalletLockManager.java index 42f06bfe4..d0da14f62 100644 --- a/src/main/java/io/mosip/mimoto/service/WalletLockManager.java +++ b/src/main/java/io/mosip/mimoto/service/WalletLockManager.java @@ -17,6 +17,7 @@ public WalletLockManager(WalletPasscodeConfig walletPasscodeConfig) { } public Wallet enforceLockCyclePolicy(Wallet wallet) { + wallet = initializePasscodeControlInWallet(wallet); WalletMetadata walletMetadata = wallet.getWalletMetadata(); PasscodeControl passcodeControl = walletMetadata.getPasscodeControl(); @@ -49,6 +50,7 @@ private boolean isLastSecondAttemptBeforePermanentLock(PasscodeControl passcodeC } public Wallet resetTemporaryLockIfExpired(Wallet wallet) { + wallet = initializePasscodeControlInWallet(wallet); WalletMetadata walletMetadata = wallet.getWalletMetadata(); PasscodeControl passcodeControl = walletMetadata.getPasscodeControl(); @@ -65,14 +67,22 @@ private static boolean isTemporaryLockExpired(WalletMetadata walletMetadata, Pas } public Wallet resetLockState(Wallet wallet) { - WalletMetadata metadata = wallet.getWalletMetadata(); - PasscodeControl control = metadata.getPasscodeControl(); + wallet = initializePasscodeControlInWallet(wallet); + WalletMetadata walletMetadata = wallet.getWalletMetadata(); + PasscodeControl passcodeControl = walletMetadata.getPasscodeControl(); - control.setFailedAttemptCount(0); - control.setCurrentCycleCount(0); - control.setRetryBlockedUntil(null); - metadata.setLockStatus(null); + passcodeControl.setFailedAttemptCount(0); + passcodeControl.setCurrentCycleCount(0); + passcodeControl.setRetryBlockedUntil(null); + walletMetadata.setLockStatus(null); + return wallet; + } + private Wallet initializePasscodeControlInWallet(Wallet wallet) { + PasscodeControl passcodeControl = wallet.getWalletMetadata().getPasscodeControl(); + if (passcodeControl == null) { + wallet.getWalletMetadata().setPasscodeControl(new PasscodeControl()); + } return wallet; } } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialVerifierServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialVerifierServiceImpl.java new file mode 100644 index 000000000..3f6677f52 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialVerifierServiceImpl.java @@ -0,0 +1,31 @@ +package io.mosip.mimoto.service.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; +import io.mosip.mimoto.exception.VCVerificationException; +import io.mosip.mimoto.service.CredentialVerifierService; +import io.mosip.vercred.vcverifier.CredentialsVerifier; +import io.mosip.vercred.vcverifier.constants.CredentialFormat; +import io.mosip.vercred.vcverifier.data.VerificationResult; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class CredentialVerifierServiceImpl implements CredentialVerifierService { + + @Autowired + private ObjectMapper objectMapper; + + @Autowired + private CredentialsVerifier credentialsVerifier; + + public boolean verify(VCCredentialResponse response) throws JsonProcessingException, VCVerificationException { + String credentialString = objectMapper.writeValueAsString(response.getCredential()); + VerificationResult result = credentialsVerifier.verify(credentialString, CredentialFormat.LDP_VC); + if (!result.getVerificationStatus()) { + throw new VCVerificationException(result.getVerificationErrorCode().toLowerCase(), result.getVerificationMessage()); + } + return true; + } +} diff --git a/src/test/java/io/mosip/mimoto/service/CredentialVerifierServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialVerifierServiceTest.java new file mode 100644 index 000000000..3ce3ff681 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/service/CredentialVerifierServiceTest.java @@ -0,0 +1,108 @@ +package io.mosip.mimoto.service; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.dto.mimoto.VCCredentialProperties; +import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; +import io.mosip.mimoto.dto.mimoto.VCCredentialResponseProof; +import io.mosip.mimoto.exception.VCVerificationException; +import io.mosip.mimoto.service.impl.CredentialVerifierServiceImpl; +import io.mosip.vercred.vcverifier.CredentialsVerifier; +import io.mosip.vercred.vcverifier.constants.CredentialFormat; +import io.mosip.vercred.vcverifier.data.VerificationResult; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; + +import java.util.Arrays; +import java.util.Map; + +import static org.mockito.Mockito.*; +import static org.junit.Assert.*; + +@RunWith(MockitoJUnitRunner.class) +public class CredentialVerifierServiceTest { + + @InjectMocks + private CredentialVerifierServiceImpl credentialVerifier; + + @Mock + private ObjectMapper objectMapper; + + @Mock + private CredentialsVerifier credentialsVerifier; + + @Mock + private VerificationResult verificationResult; + + private VCCredentialResponse vcCredentialResponse; + + private final String credentialJson = "{\"credential\":\"test\"}"; + + @Before + public void setUp() throws Exception { + VCCredentialProperties credentialProperties = VCCredentialProperties.builder() + .type(Arrays.asList("VerifiableCredential", "test")) + .credentialSubject(Map.of("name", "John Doe")) + .proof(new VCCredentialResponseProof()) + .build(); + + vcCredentialResponse = VCCredentialResponse.builder() + .format("LDP_VC") + .credential(credentialProperties) + .build(); + + when(objectMapper.writeValueAsString(any())).thenReturn(credentialJson); + } + + @Test + public void testVerifySuccess() throws Exception { + // Arrange + when(credentialsVerifier.verify(eq(credentialJson), eq(CredentialFormat.LDP_VC))).thenReturn(verificationResult); + when(verificationResult.getVerificationStatus()).thenReturn(true); + + // Act + boolean result = credentialVerifier.verify(vcCredentialResponse); + + // Assert + assertTrue(result); + verify(credentialsVerifier).verify(credentialJson, CredentialFormat.LDP_VC); + } + + @Test(expected = VCVerificationException.class) + public void testVerifyFailureThrowsException() throws Exception { + // Arrange + when(credentialsVerifier.verify(eq(credentialJson), eq(CredentialFormat.LDP_VC))).thenReturn(verificationResult); + when(verificationResult.getVerificationStatus()).thenReturn(false); + when(verificationResult.getVerificationErrorCode()).thenReturn("ERR_CODE"); + when(verificationResult.getVerificationMessage()).thenReturn("Verification failed"); + + // Act + credentialVerifier.verify(vcCredentialResponse); + } + + @Test(expected = JsonProcessingException.class) + public void testVerifyJsonProcessingException() throws Exception { + // Arrange + when(objectMapper.writeValueAsString(any())).thenThrow(JsonProcessingException.class); + + // Act + credentialVerifier.verify(vcCredentialResponse); + } + + @Test(expected = NullPointerException.class) + public void testVerifyWithNullCredential() throws Exception { + // Arrange + VCCredentialResponse nullCredentialResponse = VCCredentialResponse.builder() + .format("LDP_VC") + .credential(null) + .build(); + + // Act + credentialVerifier.verify(nullCredentialResponse); + } +} diff --git a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java index 90f7f3f99..334a9f7db 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java @@ -335,4 +335,95 @@ public void shouldThrowCredentialNotFoundExceptionWhenDeletingNonExistentCredent verify(walletCredentialsRepository).findByIdAndWalletId(credentialId, walletId); verify(walletCredentialsRepository, never()).deleteById(anyString()); } + + @Test + public void shouldThrowCredentialProcessingExceptionOnJsonProcessingError() throws Exception { + when(walletCredentialsRepository.findByIdAndWalletId(credentialId, walletId)).thenReturn(Optional.of(verifiableCredential)); + when(encryptionDecryptionUtil.decryptCredential("encryptedCredential", base64Key)).thenReturn("bad-json"); + when(objectMapper.readValue("bad-json", VCCredentialResponse.class)).thenThrow(new com.fasterxml.jackson.core.JsonProcessingException("error") {}); + + CredentialProcessingException exception = assertThrows(CredentialProcessingException.class, () -> + walletCredentialService.fetchVerifiableCredential(walletId, credentialId, base64Key, locale)); + + assertEquals(CREDENTIAL_FETCH_EXCEPTION.getErrorCode(), exception.getErrorCode()); + verify(walletCredentialsRepository).findByIdAndWalletId(credentialId, walletId); + verify(encryptionDecryptionUtil).decryptCredential("encryptedCredential", base64Key); + verify(objectMapper).readValue("bad-json", VCCredentialResponse.class); + } + + @Test + public void shouldThrowCredentialProcessingExceptionOnNullIssuerConfig() throws Exception { + when(walletCredentialsRepository.findByIdAndWalletId(credentialId, walletId)).thenReturn(Optional.of(verifiableCredential)); + when(encryptionDecryptionUtil.decryptCredential("encryptedCredential", base64Key)).thenReturn("{}"); + VCCredentialResponse vcResponse = VCCredentialResponse.builder().credential(VCCredentialProperties.builder().type(List.of(credentialType)).build()).build(); + when(objectMapper.readValue(anyString(), eq(VCCredentialResponse.class))).thenReturn(vcResponse); + when(issuersService.getIssuerDetails(issuerId)).thenReturn(new IssuerDTO()); + when(issuersService.getIssuerConfig(issuerId, credentialType)).thenReturn(null); + + CredentialProcessingException exception = assertThrows(CredentialProcessingException.class, () -> + walletCredentialService.fetchVerifiableCredential(walletId, credentialId, base64Key, locale)); + + assertEquals(CREDENTIAL_FETCH_EXCEPTION.getErrorCode(), exception.getErrorCode()); + } + + @Test + public void shouldThrowCredentialProcessingExceptionOnCredentialTypeMismatch() throws Exception { + when(walletCredentialsRepository.findByIdAndWalletId(credentialId, walletId)).thenReturn(Optional.of(verifiableCredential)); + when(encryptionDecryptionUtil.decryptCredential("encryptedCredential", base64Key)).thenReturn("{}"); + VCCredentialResponse vcResponse = VCCredentialResponse.builder().credential(VCCredentialProperties.builder().type(List.of("OtherType")).build()).build(); + when(objectMapper.readValue(anyString(), eq(VCCredentialResponse.class))).thenReturn(vcResponse); + when(issuersService.getIssuerDetails(issuerId)).thenReturn(new IssuerDTO()); + + CredentialDefinitionResponseDto credentialDefinition = new CredentialDefinitionResponseDto(); + credentialDefinition.setType(List.of(credentialType)); + CredentialsSupportedResponse supportedResponse = new CredentialsSupportedResponse(); + supportedResponse.setCredentialDefinition(credentialDefinition); + + IssuerConfig issuerConfig = new IssuerConfig(new IssuerDTO(), new CredentialIssuerWellKnownResponse(), supportedResponse); + when(issuersService.getIssuerConfig(issuerId, credentialType)).thenReturn(issuerConfig); + + CredentialProcessingException exception = assertThrows(CredentialProcessingException.class, () -> + walletCredentialService.fetchVerifiableCredential(walletId, credentialId, base64Key, locale)); + + assertEquals(CREDENTIAL_FETCH_EXCEPTION.getErrorCode(), exception.getErrorCode()); + } + + @Test + public void shouldThrowCredentialProcessingExceptionOnIssuerServiceException() throws Exception { + when(walletCredentialsRepository.findByIdAndWalletId(credentialId, walletId)).thenReturn(Optional.of(verifiableCredential)); + when(encryptionDecryptionUtil.decryptCredential("encryptedCredential", base64Key)).thenReturn("{}"); + VCCredentialResponse vcResponse = VCCredentialResponse.builder().credential(VCCredentialProperties.builder().type(List.of(credentialType)).build()).build(); + when(objectMapper.readValue(anyString(), eq(VCCredentialResponse.class))).thenReturn(vcResponse); + when(issuersService.getIssuerDetails(issuerId)).thenThrow(new ApiNotAccessibleException("API error")); + + CredentialProcessingException exception = assertThrows(CredentialProcessingException.class, () -> + walletCredentialService.fetchVerifiableCredential(walletId, credentialId, base64Key, locale)); + + assertEquals(CREDENTIAL_FETCH_EXCEPTION.getErrorCode(), exception.getErrorCode()); + } + + @Test + public void shouldThrowCredentialProcessingExceptionOnPdfGenerationException() throws Exception { + when(walletCredentialsRepository.findByIdAndWalletId(credentialId, walletId)).thenReturn(Optional.of(verifiableCredential)); + when(encryptionDecryptionUtil.decryptCredential("encryptedCredential", base64Key)).thenReturn("{}"); + VCCredentialResponse vcResponse = VCCredentialResponse.builder().credential(VCCredentialProperties.builder().type(List.of(credentialType)).build()).build(); + when(objectMapper.readValue(anyString(), eq(VCCredentialResponse.class))).thenReturn(vcResponse); + when(issuersService.getIssuerDetails(issuerId)).thenReturn(new IssuerDTO()); + + CredentialDefinitionResponseDto credentialDefinition = new CredentialDefinitionResponseDto(); + credentialDefinition.setType(List.of(credentialType)); + CredentialsSupportedResponse supportedResponse = new CredentialsSupportedResponse(); + supportedResponse.setCredentialDefinition(credentialDefinition); + + IssuerConfig issuerConfig = new IssuerConfig(new IssuerDTO(), new CredentialIssuerWellKnownResponse(), supportedResponse); + when(issuersService.getIssuerConfig(issuerId, credentialType)).thenReturn(issuerConfig); + + when(credentialPDFGeneratorService.generatePdfForVerifiableCredentials(any(), any(), any(), any(), any(), any(), any())) + .thenThrow(new RuntimeException("PDF error")); + + CredentialProcessingException exception = assertThrows(CredentialProcessingException.class, () -> + walletCredentialService.fetchVerifiableCredential(walletId, credentialId, base64Key, locale)); + + assertEquals(CREDENTIAL_FETCH_EXCEPTION.getErrorCode(), exception.getErrorCode()); + } } \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidatorTest.java b/src/test/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidatorTest.java index 21c69f7bf..dee6e4973 100644 --- a/src/test/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidatorTest.java +++ b/src/test/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidatorTest.java @@ -5,7 +5,6 @@ import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; import io.mosip.mimoto.dto.mimoto.CredentialSupportedDisplayResponse; import io.mosip.mimoto.dto.mimoto.CredentialsSupportedResponse; -import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.InvalidWellknownResponseException; import jakarta.validation.Validation; import jakarta.validation.Validator; @@ -16,13 +15,10 @@ import org.springframework.beans.factory.annotation.Autowired; import java.util.*; -import java.util.stream.Collectors; import static io.mosip.mimoto.util.TestUtilities.getCredentialIssuerWellKnownResponseDto; import static io.mosip.mimoto.util.TestUtilities.getCredentialSupportedResponse; -import static org.junit.Assert.*; -import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; -import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.*; public class CredentialIssuerWellknownResponseValidatorTest { @@ -40,7 +36,7 @@ void setUp() { } @Test - public void shouldThrowExceptionWhenCredentialIssuerIsMissingInCredentialIssuerWellknownResponse() throws ApiNotAccessibleException { + public void shouldThrowExceptionWhenCredentialIssuerIsMissingInCredentialIssuerWellknownResponse() { response.setCredentialIssuer(""); response.setCredentialEndPoint("http://example.com/credential"); @@ -156,7 +152,7 @@ public void shouldDetectMissingMandatoryFields() { InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> credentialIssuerWellknownResponseValidator.validate(response, validator)); assertEquals("RESIDENT-APP-041", invalidWellknownResponseException.getErrorCode()); - assertTrue(Arrays.stream(invalidWellknownResponseException.getMessage().split("\n")).collect(Collectors.toList()).containsAll(List.of("RESIDENT-APP-041 --> Invalid Wellknown from Issuer", + assertTrue(Arrays.stream(invalidWellknownResponseException.getMessage().split("\n")).toList().containsAll(List.of("RESIDENT-APP-041 --> Invalid Wellknown from Issuer", "Validation failed:", "credentialIssuer: must not be blank", "credentialConfigurationsSupported: must not be empty", @@ -192,10 +188,11 @@ public void shouldDetectMissingProofAlgorithmsSupported() { InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> credentialIssuerWellknownResponseValidator.validate(response, validator)); - assertEquals(""" - RESIDENT-APP-041 --> Invalid Wellknown from Issuer - Validation failed: - credentialConfigurationsSupported[CredentialType1].proofTypesSupported[jwt].proofSigningAlgValuesSupported: must not be null""", invalidWellknownResponseException.getMessage()); + String message = invalidWellknownResponseException.getMessage(); + assertTrue(message.contains("RESIDENT-APP-041 --> Invalid Wellknown from Issuer")); + assertTrue(message.contains("credentialConfigurationsSupported[CredentialType1].proofTypesSupported[jwt].proofSigningAlgValuesSupported: must not be null")); + assertTrue(message.contains("credentialConfigurationsSupported[CredentialType1].proofTypesSupported[jwt].proofSigningAlgValuesSupported: must not be empty")); + } @Test @@ -216,7 +213,7 @@ public void shouldDetectMissingMandatoryFieldsOfCredentialSupportedDisplayRespon InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> credentialIssuerWellknownResponseValidator.validate(response, validator) ); - assertTrue(Arrays.stream(invalidWellknownResponseException.getMessage().split("\n")).collect(Collectors.toList()).containsAll(Arrays.stream(""" + assertTrue(Arrays.stream(invalidWellknownResponseException.getMessage().split("\n")).toList().containsAll(Arrays.stream(""" RESIDENT-APP-041 --> Invalid Wellknown from Issuer Validation failed: credentialConfigurationsSupported[CredentialType1].display[0].backgroundColor: must not be blank From 480a420b99704d0ad87585364cc0413ecfdae7df Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Tue, 15 Jul 2025 17:07:35 +0530 Subject: [PATCH 720/860] Deleted CredentialVerifierImpl.java and resolved conflicts Signed-off-by: Gurpreet41082 --- .../service/impl/CredentialVerifierImpl.java | 31 ------------------- 1 file changed, 31 deletions(-) delete mode 100644 src/main/java/io/mosip/mimoto/service/impl/CredentialVerifierImpl.java diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialVerifierImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialVerifierImpl.java deleted file mode 100644 index 95f885eca..000000000 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialVerifierImpl.java +++ /dev/null @@ -1,31 +0,0 @@ -package io.mosip.mimoto.service.impl; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; -import io.mosip.mimoto.exception.VCVerificationException; -import io.mosip.mimoto.service.CredentialVerifierService; -import io.mosip.vercred.vcverifier.CredentialsVerifier; -import io.mosip.vercred.vcverifier.constants.CredentialFormat; -import io.mosip.vercred.vcverifier.data.VerificationResult; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -@Service -public class CredentialVerifierImpl implements CredentialVerifierService { - - @Autowired - private ObjectMapper objectMapper; - - @Autowired - private CredentialsVerifier credentialsVerifier; - - public boolean verify(VCCredentialResponse response) throws JsonProcessingException, VCVerificationException { - String credentialString = objectMapper.writeValueAsString(response.getCredential()); - VerificationResult result = credentialsVerifier.verify(credentialString, CredentialFormat.LDP_VC); - if (!result.getVerificationStatus()) { - throw new VCVerificationException(result.getVerificationErrorCode().toLowerCase(), result.getVerificationMessage()); - } - return true; - } -} From 34bfa24114ca9cef42c354295bc379c52ddf3c62 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Tue, 15 Jul 2025 16:54:26 +0530 Subject: [PATCH 721/860] injiweb-1649 changed the c_nonce extraction (#789) * injiweb-1649 changed the c_nonce extraction Signed-off-by: Gurpreet41082 * injiweb-1649 changed the c_nonce extraction in the loggedin flow Signed-off-by: Gurpreet41082 --------- Signed-off-by: Gurpreet41082 --- .../mimoto/dto/idp/TokenResponseDTO.java | 3 ++ .../service/CredentialRequestService.java | 2 +- .../impl/CredentialRequestServiceImpl.java | 10 ++--- .../service/impl/CredentialServiceImpl.java | 2 +- .../mimoto/util/CredentialProcessor.java | 2 +- .../java/io/mosip/mimoto/util/JoseUtil.java | 5 +-- .../mosip/mimoto/util/JwtGeneratorUtil.java | 9 ++-- .../service/CredentialRequestServiceTest.java | 6 +-- .../mimoto/util/JwtGeneratorUtilTest.java | 42 ++++--------------- .../io/mosip/mimoto/util/TestUtilities.java | 1 + 10 files changed, 28 insertions(+), 54 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/dto/idp/TokenResponseDTO.java b/src/main/java/io/mosip/mimoto/dto/idp/TokenResponseDTO.java index 8b688decf..a63b696c0 100644 --- a/src/main/java/io/mosip/mimoto/dto/idp/TokenResponseDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/idp/TokenResponseDTO.java @@ -24,4 +24,7 @@ public class TokenResponseDTO { @JsonInclude(JsonInclude.Include.NON_NULL) private String scope; + + @JsonInclude(JsonInclude.Include.NON_NULL) + private String c_nonce; } diff --git a/src/main/java/io/mosip/mimoto/service/CredentialRequestService.java b/src/main/java/io/mosip/mimoto/service/CredentialRequestService.java index 83c79207b..32f53f611 100644 --- a/src/main/java/io/mosip/mimoto/service/CredentialRequestService.java +++ b/src/main/java/io/mosip/mimoto/service/CredentialRequestService.java @@ -10,7 +10,7 @@ VCCredentialRequest buildRequest( IssuerDTO issuerDTO, CredentialIssuerWellKnownResponse wellKnownResponse, CredentialsSupportedResponse credentialsSupportedResponse, - String accessToken, + String cNonce, String walletId, String base64EncodedWalletKey, Boolean isLoginFlow diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java index 432164de5..294044975 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java @@ -34,7 +34,7 @@ public class CredentialRequestServiceImpl implements CredentialRequestService { public VCCredentialRequest buildRequest(IssuerDTO issuerDTO, CredentialIssuerWellKnownResponse wellKnownResponse, CredentialsSupportedResponse credentialsSupportedResponse, - String accessToken, + String cNonce, String walletId, String base64EncodedWalletKey, Boolean isLoginFlow) throws Exception { @@ -43,9 +43,9 @@ public VCCredentialRequest buildRequest(IssuerDTO issuerDTO, String jwt; if (isLoginFlow) { - jwt = generateJwtFromDB(walletId, base64EncodedWalletKey, algorithm, wellKnownResponse, issuerDTO, accessToken); + jwt = generateJwtFromDB(walletId, base64EncodedWalletKey, algorithm, wellKnownResponse, issuerDTO, cNonce); } else { - jwt = joseUtil.generateJwt(wellKnownResponse.getCredentialIssuer(), issuerDTO.getClient_id(), accessToken); + jwt = joseUtil.generateJwt(wellKnownResponse.getCredentialIssuer(), issuerDTO.getClient_id(), cNonce); } List credentialContext = credentialsSupportedResponse.getCredentialDefinition().getContext(); @@ -79,7 +79,7 @@ private String generateJwtFromDB(String walletId, SigningAlgorithm algorithm, CredentialIssuerWellKnownResponse wellKnownResponse, IssuerDTO issuerDTO, - String accessToken) throws Exception { + String cNonce) throws Exception { Optional proofSigningKey = proofSigningKeyRepository.findByWalletIdAndAlgorithm(walletId, algorithm.name()); byte[] decodedWalletKey = Base64.getDecoder().decode(base64EncodedWalletKey); @@ -90,7 +90,7 @@ private String generateJwtFromDB(String walletId, return JwtGeneratorUtil.generateJwtUsingDBKeys(algorithm, wellKnownResponse.getCredentialIssuer(), issuerDTO.getClient_id(), - accessToken, + cNonce, publicKeyBytes, privateKeyInBytes); } diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java index c66d415df..52aa71aa7 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java @@ -58,7 +58,7 @@ public ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String cred credentialIssuerConfiguration.getCredentialEndPoint(), credentialIssuerConfiguration.getCredentialConfigurationsSupported()); CredentialsSupportedResponse credentialsSupportedResponse = credentialIssuerWellKnownResponse.getCredentialConfigurationsSupported().get(credentialType); - VCCredentialRequest vcCredentialRequest = credentialRequestService.buildRequest(issuerDTO, credentialIssuerWellKnownResponse, credentialsSupportedResponse, response.getAccess_token(), null, null, false + VCCredentialRequest vcCredentialRequest = credentialRequestService.buildRequest(issuerDTO, credentialIssuerWellKnownResponse, credentialsSupportedResponse, response.getC_nonce(), null, null, false ); VCCredentialResponse vcCredentialResponse = downloadCredential(credentialIssuerWellKnownResponse.getCredentialEndPoint(), vcCredentialRequest, response.getAccess_token()); boolean verificationStatus = issuerId.toLowerCase().contains("mock") || credentialVerifierService.verify(vcCredentialResponse); diff --git a/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java b/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java index 604c29d12..314e39c7f 100644 --- a/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java +++ b/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java @@ -115,7 +115,7 @@ public VerifiableCredentialResponseDTO downloadCredentialAndStoreInDB( try { vcCredentialRequest = credentialRequestService.buildRequest( issuerConfig.getIssuerDTO(), issuerConfig.getWellKnownResponse(), - issuerConfig.getCredentialsSupportedResponse(), tokenResponse.getAccess_token(), + issuerConfig.getCredentialsSupportedResponse(), tokenResponse.getC_nonce(), walletId, base64Key, true); } catch (Exception e) { log.error("Failed to generate VC credential request for issuerId: {}, credentialConfigurationId: {}", issuerId, credentialConfigurationId, e); diff --git a/src/main/java/io/mosip/mimoto/util/JoseUtil.java b/src/main/java/io/mosip/mimoto/util/JoseUtil.java index 9e7c6fb59..3491bb589 100644 --- a/src/main/java/io/mosip/mimoto/util/JoseUtil.java +++ b/src/main/java/io/mosip/mimoto/util/JoseUtil.java @@ -160,7 +160,7 @@ public String getJWT(String clientId, String keyStorePath, String fileName, Stri .sign(Algorithm.RSA256(null, privateKey)); } - public String generateJwt(String audience, String clientId, String accessToken) throws Exception { + public String generateJwt(String audience, String clientId, String cNonce) throws Exception { KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); kpg.initialize(2048); @@ -178,9 +178,6 @@ public String generateJwt(String audience, String clientId, String accessToken) Date issuedAt = Date.from(Instant.now()); Date expiresAt = Date.from(Instant.now().plusMillis(120000000)); RSAPrivateKey privateKey = (RSAPrivateKey) kp.getPrivate(); - SignedJWT jwt = (SignedJWT) JWTParser.parse(accessToken); - Map jsonObject = jwt.getPayload().toJSONObject(); - String cNonce = (String) jsonObject.get("c_nonce"); Map payload = new HashMap<>(); payload.put("sub", clientId); diff --git a/src/main/java/io/mosip/mimoto/util/JwtGeneratorUtil.java b/src/main/java/io/mosip/mimoto/util/JwtGeneratorUtil.java index cb13f4d3c..0379f87b0 100644 --- a/src/main/java/io/mosip/mimoto/util/JwtGeneratorUtil.java +++ b/src/main/java/io/mosip/mimoto/util/JwtGeneratorUtil.java @@ -29,12 +29,12 @@ public class JwtGeneratorUtil { } } - public static String generateJwtUsingDBKeys(SigningAlgorithm algorithm, String audience, String clientId, String accessToken, byte[] publicKeyBytes, byte[] privateKeyBytes) throws Exception { + public static String generateJwtUsingDBKeys(SigningAlgorithm algorithm, String audience, String clientId, String cNonce, byte[] publicKeyBytes, byte[] privateKeyBytes) throws Exception { KeyPair keyPair = KeyGenerationUtil.getKeyPairFromDBStoredKeys(algorithm, publicKeyBytes, privateKeyBytes); JWK jwk = generateJwk(algorithm, keyPair); JWSSigner signer = createSigner(algorithm, jwk); - JWTClaimsSet claimsSet = createClaims(clientId, audience, accessToken); + JWTClaimsSet claimsSet = createClaims(clientId, audience, cNonce); JWSHeader header = new JWSHeader.Builder(algorithm.getJWSAlgorithm()) .type(new JOSEObjectType("openid4vci-proof+jwt")) .jwk(jwk.toPublicJWK()) @@ -45,11 +45,10 @@ public static String generateJwtUsingDBKeys(SigningAlgorithm algorithm, String a return signedJWT.serialize(); } - private static JWTClaimsSet createClaims(String clientId, String audience, String accessToken) throws java.text.ParseException { + private static JWTClaimsSet createClaims(String clientId, String audience, String cNonce) throws java.text.ParseException { long nowSeconds = System.currentTimeMillis() / 1000; Date issuedAt = new Date(nowSeconds * 1000); Date expiresAt = new Date((nowSeconds + 18000) * 1000); - String nonce = SignedJWT.parse(accessToken).getJWTClaimsSet().getStringClaim("c_nonce"); return new JWTClaimsSet.Builder() .subject(clientId) @@ -57,7 +56,7 @@ private static JWTClaimsSet createClaims(String clientId, String audience, Strin .issuer(clientId) .issueTime(issuedAt) .expirationTime(expiresAt) - .claim("nonce", nonce) + .claim("nonce", cNonce) .build(); } diff --git a/src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java index 801a8d66e..da4f5bc58 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java @@ -48,7 +48,7 @@ public void shouldHandleNullContextInCredentialSupportedResponse() throws Except issuerDTO, issuerWellKnownResponse, credentialsSupportedResponse, - "test-access-token", + "test-cnonce", "walletId", "walletKey", false @@ -74,7 +74,7 @@ public void shouldHandleEmptyContextInCredentialSupportedResponse() throws Excep issuerDTO, issuerWellKnownResponse, credentialsSupportedResponse, - "test-access-token", + "test-cnonce", "walletId", "walletKey", false @@ -101,7 +101,7 @@ public void shouldHandleExistingContextWithSpecificValue() throws Exception { issuerDTO, issuerWellKnownResponse, credentialsSupportedResponse, - "test-access-token", + "test-cnonce", "walletId", "walletKey", false diff --git a/src/test/java/io/mosip/mimoto/util/JwtGeneratorUtilTest.java b/src/test/java/io/mosip/mimoto/util/JwtGeneratorUtilTest.java index 80c4a286e..0ec5c2763 100644 --- a/src/test/java/io/mosip/mimoto/util/JwtGeneratorUtilTest.java +++ b/src/test/java/io/mosip/mimoto/util/JwtGeneratorUtilTest.java @@ -24,26 +24,18 @@ public static void setupProvider() { } } - private String createAccessTokenWithNonce(String nonce) throws Exception { - String header = Base64.getUrlEncoder().withoutPadding().encodeToString("{\"alg\":\"HS256\"}".getBytes()); - String payload = Base64.getUrlEncoder().withoutPadding().encodeToString(("{\"c_nonce\":\"" + nonce + "\"}").getBytes()); - String signature = Base64.getUrlEncoder().withoutPadding().encodeToString("dummy".getBytes()); - return header + "." + payload + "." + signature; - } - @Test public void shouldGenerateJWTForRS256Successfully() throws Exception { KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA"); generator.initialize(2048); KeyPair keyPair = generator.generateKeyPair(); - String accessToken = createAccessTokenWithNonce("nonce-rs256"); List expectedClaims = Arrays.asList("client-id", "audience", "nonce-rs256"); String jwt = JwtGeneratorUtil.generateJwtUsingDBKeys( SigningAlgorithm.RS256, "audience", "client-id", - accessToken, + "nonce-rs256", keyPair.getPublic().getEncoded(), keyPair.getPrivate().getEncoded() ); @@ -51,7 +43,7 @@ public void shouldGenerateJWTForRS256Successfully() throws Exception { SignedJWT signedJWT = SignedJWT.parse(jwt); List actualClaims = Arrays.asList( signedJWT.getJWTClaimsSet().getSubject(), - signedJWT.getJWTClaimsSet().getAudience().get(0), + signedJWT.getJWTClaimsSet().getAudience().getFirst(), signedJWT.getJWTClaimsSet().getStringClaim("nonce") ); @@ -64,14 +56,13 @@ public void shouldGenerateJWTForES256Successfully() throws Exception { KeyPairGenerator generator = KeyPairGenerator.getInstance("EC"); generator.initialize(new ECGenParameterSpec("secp256r1")); KeyPair keyPair = generator.generateKeyPair(); - String accessToken = createAccessTokenWithNonce("nonce-es256"); List expectedClaims = Arrays.asList("client-id", "audience", "nonce-es256"); String jwt = JwtGeneratorUtil.generateJwtUsingDBKeys( SigningAlgorithm.ES256, "audience", "client-id", - accessToken, + "nonce-es256", keyPair.getPublic().getEncoded(), keyPair.getPrivate().getEncoded() ); @@ -79,7 +70,7 @@ public void shouldGenerateJWTForES256Successfully() throws Exception { SignedJWT signedJWT = SignedJWT.parse(jwt); List actualClaims = Arrays.asList( signedJWT.getJWTClaimsSet().getSubject(), - signedJWT.getJWTClaimsSet().getAudience().get(0), + signedJWT.getJWTClaimsSet().getAudience().getFirst(), signedJWT.getJWTClaimsSet().getStringClaim("nonce") ); @@ -92,14 +83,13 @@ public void shouldGenerateJWTForES256kSuccessfully() throws Exception { KeyPairGenerator generator = KeyPairGenerator.getInstance("EC", "BC"); generator.initialize(new ECGenParameterSpec("secp256k1")); KeyPair keyPair = generator.generateKeyPair(); - String accessToken = createAccessTokenWithNonce("nonce-es256k"); List expectedClaims = Arrays.asList("client-id", "audience", "nonce-es256k"); String jwt = JwtGeneratorUtil.generateJwtUsingDBKeys( SigningAlgorithm.ES256K, "audience", "client-id", - accessToken, + "nonce-es256k", keyPair.getPublic().getEncoded(), keyPair.getPrivate().getEncoded() ); @@ -107,7 +97,7 @@ public void shouldGenerateJWTForES256kSuccessfully() throws Exception { SignedJWT signedJWT = SignedJWT.parse(jwt); List actualClaims = Arrays.asList( signedJWT.getJWTClaimsSet().getSubject(), - signedJWT.getJWTClaimsSet().getAudience().get(0), + signedJWT.getJWTClaimsSet().getAudience().getFirst(), signedJWT.getJWTClaimsSet().getStringClaim("nonce") ); @@ -119,14 +109,13 @@ public void shouldGenerateJWTForES256kSuccessfully() throws Exception { public void shouldGenerateJWTForED25519Successfully() throws Exception { KeyPairGenerator generator = KeyPairGenerator.getInstance("Ed25519", "BC"); KeyPair keyPair = generator.generateKeyPair(); - String accessToken = createAccessTokenWithNonce("nonce-ed25519"); List expectedClaims = Arrays.asList("client-id", "audience", "nonce-ed25519"); String jwt = JwtGeneratorUtil.generateJwtUsingDBKeys( SigningAlgorithm.ED25519, "audience", "client-id", - accessToken, + "nonce-ed25519", keyPair.getPublic().getEncoded(), keyPair.getPrivate().getEncoded() ); @@ -134,7 +123,7 @@ public void shouldGenerateJWTForED25519Successfully() throws Exception { SignedJWT signedJWT = SignedJWT.parse(jwt); List actualClaims = Arrays.asList( signedJWT.getJWTClaimsSet().getSubject(), - signedJWT.getJWTClaimsSet().getAudience().get(0), + signedJWT.getJWTClaimsSet().getAudience().getFirst(), signedJWT.getJWTClaimsSet().getStringClaim("nonce") ); @@ -142,21 +131,6 @@ public void shouldGenerateJWTForED25519Successfully() throws Exception { assertEquals(18000, diffInSeconds(signedJWT.getJWTClaimsSet().getIssueTime(), signedJWT.getJWTClaimsSet().getExpirationTime())); } - @Test(expected = Exception.class) - public void shouldThrowExceptionIfAccessTokenIsNotInJWTFormat() throws Exception { - KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA"); - generator.initialize(2048); - KeyPair keyPair = generator.generateKeyPair(); - - JwtGeneratorUtil.generateJwtUsingDBKeys( - SigningAlgorithm.RS256, - "aud", - "client", - "invalid-nonce", - keyPair.getPublic().getEncoded(), - keyPair.getPrivate().getEncoded() - ); - } public long diffInSeconds(Date issuedAt, Date expiresAt) { return (expiresAt.getTime() - issuedAt.getTime()) / 1000; diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index a7ffa4cec..f21172066 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -359,6 +359,7 @@ public static io.mosip.mimoto.dto.idp.TokenResponseDTO getTokenResponseDTO() { .expires_in(12345) .scope("test-scope") .token_type("test-token-type") + .c_nonce("test-cnonce") .build(); } From 603e75e88b862f4b2642bf31dc47ab72b5c9d574 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 15 Jul 2025 17:29:40 +0530 Subject: [PATCH 722/860] [INJIWEB-1627] update passcode config info in WalletUnlockProcess read me file Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- docs/WalletUnlockProcess.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/WalletUnlockProcess.md b/docs/WalletUnlockProcess.md index 3b2f81c4c..21a570008 100644 --- a/docs/WalletUnlockProcess.md +++ b/docs/WalletUnlockProcess.md @@ -143,8 +143,9 @@ Configurable properties that govern the entire Passcode flow within the Wallet u - `wallet.passcode.maxLockCyclesAllowed`: Maximum lock cycles allowed before permanent lockout ```properties -# Duration (in milliseconds) for which the wallet remains locked after exceeding failed attempts in a cycle -wallet.passcode.retryBlockedUntil=3600000 +# Duration (in minutes) for which the wallet remains locked after exceeding failed attempts in a cycle. +# Must be a whole number; decimal/fractional values (e.g., 0.5) will throw an error during Mimoto launch +wallet.passcode.retryBlockedUntil=60 # Maximum number of failed passcode attempts allowed in a single cycle (defaults to 1 if <=0) wallet.passcode.maxFailedAttemptsAllowedPerCycle=5 # Maximum number of lock cycles allowed before the wallet is permanently locked (defaults to 1 if <=0) From 35a5bec0a5d4bd3e6aa03526112f3ae7048ad046 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Tue, 22 Jul 2025 12:47:40 +0530 Subject: [PATCH 723/860] Update pom.xml with vcverifier-jar release version Signed-off-by: Gurpreet41082 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 8c1eebff9..e4eed365c 100644 --- a/pom.xml +++ b/pom.xml @@ -144,7 +144,7 @@ io.mosip vcverifier-jar - 1.3.0-SNAPSHOT + 1.3.0-rc1 io.micrometer From b232c06efc3c5095d09979d0e0bdcaa93172204a Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Thu, 24 Jul 2025 10:15:35 +0530 Subject: [PATCH 724/860] add different signing keys support for signing JWT of credential request in guest mode --- .talismanrc | 20 ++- .../config/mimoto-default.properties | 5 +- pom.xml | 2 +- .../mimoto/constant/SigningAlgorithm.java | 2 +- .../dto/mimoto/ProofTypesSupported.java | 1 - .../service/CredentialRequestService.java | 2 +- .../impl/CredentialRequestServiceImpl.java | 84 ++++++--- .../service/impl/CredentialServiceImpl.java | 3 +- .../mosip/mimoto/util/JwtGeneratorUtil.java | 13 +- .../resources/application-local.properties | 5 +- .../service/CredentialRequestServiceTest.java | 162 +++++++++++++++--- ...lIssuerWellknownResponseValidatorTest.java | 67 +++++--- .../mimoto/util/JwtGeneratorUtilTest.java | 21 +-- .../resources/application-test.properties | 5 +- 14 files changed, 285 insertions(+), 107 deletions(-) diff --git a/.talismanrc b/.talismanrc index 06759952b..8b0fbafd2 100644 --- a/.talismanrc +++ b/.talismanrc @@ -39,10 +39,6 @@ fileignoreconfig: checksum: c25969b732f7dd0fd49262c68983d85611cb78800b8080d9f63f7ed9eeb0251b - filename: src/main/java/io/mosip/mimoto/util/Utilities.java checksum: 52ac8d1e6fcf3f662a757eef2774357165a618c29d8e1fa6e97395bad3c24065 -- filename: src/test/resources/application-test.properties - checksum: e0702b65f6fcec7f032a1c62c0a2d06cd8c3b2323039dabf1e7fff4a4c2532ad -- filename: src/main/resources/application-local.properties - checksum: f4bb256667ee28ae6bda443b48033b57cb1e7b44561732127e48cb669b8d6206 - filename: src/test/java/io/mosip/mimoto/config/MimotoConfig.java checksum: ba189011b924fe58a804281c88a190b9b969d21bc485e03206471f69be1a1b5d - filename: src/main/java/io/mosip/mimoto/util/JsonUtil.java @@ -77,8 +73,6 @@ fileignoreconfig: checksum: 1f5deaa63f65986c215dedc9adc6021b4d15dd4e475802013816b130373be3d0 - filename: docker-compose/docker-compose.yml checksum: 857f5dcebdef810161b9ef09ad078c091c7d9969035bc45132975b296675dac9 -- filename: docker-compose/config/mimoto-default.properties - checksum: b309fd47c120422dea23906d19696039e283b2fb24783bdd447c0999a29d2d22 - filename: src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java checksum: 90dce7daa19f0eb9050194a3c77a88d449a83c337d9041bfdeb7bfded3bbd12c - filename: src/main/java/io/mosip/mimoto/exception/ErrorConstants.java @@ -111,4 +105,18 @@ fileignoreconfig: checksum: d172beb5aeef1037d70d2f83f034e6ec5e4ea69c6150ec6a25c9139c799b7879 - filename: docs/api-documentation-openapi.json checksum: b5f643bfa3fcfec0548747a321f7ecc4b7b2b79fbbf3c0152c3369aeddf0f566 +- filename: src/main/java/io/mosip/mimoto/util/JwtGeneratorUtil.java + checksum: c8533dd38f79879119ba2895afca75d60e9704d5a0df4a0e79bc3b9292bd0d38 +- filename: src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java + checksum: c2f731cdd77977bee05fade0751e2c7bac67d07b894a0746d984bbcaa82206f6 +- filename: src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java + checksum: c669189f60e8fa5f0cb47d3c7cbb4ab34d87afbb6fb4de65b7eb06c691a41034 +- filename: src/main/java/io/mosip/mimoto/constant/SigningAlgorithm.java + checksum: fcb462b4baec6db1aa48c16fad923dc7a20407aa072efeb3879c236e7a4d74fe +- filename: src/test/resources/application-test.properties + checksum: ef0f61c5a977aef0e7c71d5c4761805654eb7abbd44affa3814bec924cbc340a +- filename: docker-compose/config/mimoto-default.properties + checksum: 8f930ada726909cf0ad4e1112d8b4cca7b7eae7268f8e6b1abe38cb5f739d24c +- filename: src/main/resources/application-local.properties + checksum: 11e815832a44edfd9ba5499bed2e9037ae694eb8ce9968e1798b848d436e9871 version: "" \ No newline at end of file diff --git a/docker-compose/config/mimoto-default.properties b/docker-compose/config/mimoto-default.properties index d099e33d3..7f9390e14 100644 --- a/docker-compose/config/mimoto-default.properties +++ b/docker-compose/config/mimoto-default.properties @@ -383,4 +383,7 @@ wallet.passcode.retryBlockedUntil=60 # Maximum number of failed passcode attempts allowed in a single cycle (defaults to 1 if <=0) wallet.passcode.maxFailedAttemptsAllowedPerCycle=5 # Maximum number of lock cycles allowed before the wallet is permanently locked (defaults to 1 if <=0) -wallet.passcode.maxLockCyclesAllowed=3 \ No newline at end of file +wallet.passcode.maxLockCyclesAllowed=3 + +#Signing Algorithms Priority Order Configuration +signing.algorithms.priority.order = ED25519,ES256K,ES256,RS256 \ No newline at end of file diff --git a/pom.xml b/pom.xml index e4eed365c..b2fae21e7 100644 --- a/pom.xml +++ b/pom.xml @@ -429,7 +429,7 @@ com.nimbusds nimbus-jose-jwt - 9.25.6 + 9.41.2 io.jsonwebtoken diff --git a/src/main/java/io/mosip/mimoto/constant/SigningAlgorithm.java b/src/main/java/io/mosip/mimoto/constant/SigningAlgorithm.java index 545483478..68cb3de4c 100644 --- a/src/main/java/io/mosip/mimoto/constant/SigningAlgorithm.java +++ b/src/main/java/io/mosip/mimoto/constant/SigningAlgorithm.java @@ -6,7 +6,7 @@ public enum SigningAlgorithm { RS256(JWSAlgorithm.RS256, "RSA"), ES256(JWSAlgorithm.ES256, "EC"), ES256K(JWSAlgorithm.ES256K, "EC"), - ED25519(JWSAlgorithm.EdDSA, "Ed25519"); + ED25519(JWSAlgorithm.Ed25519, "Ed25519"); private final JWSAlgorithm jwsAlgorithm; private final String keyFactoryAlgorithm; diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/ProofTypesSupported.java b/src/main/java/io/mosip/mimoto/dto/mimoto/ProofTypesSupported.java index 194865827..20857e194 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/ProofTypesSupported.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/ProofTypesSupported.java @@ -13,7 +13,6 @@ public class ProofTypesSupported { @NotEmpty - @NotNull @JsonProperty("proof_signing_alg_values_supported") @SerializedName("proof_signing_alg_values_supported") @Schema(description = "Support Alg for proof Signing") diff --git a/src/main/java/io/mosip/mimoto/service/CredentialRequestService.java b/src/main/java/io/mosip/mimoto/service/CredentialRequestService.java index 32f53f611..e243644c9 100644 --- a/src/main/java/io/mosip/mimoto/service/CredentialRequestService.java +++ b/src/main/java/io/mosip/mimoto/service/CredentialRequestService.java @@ -13,6 +13,6 @@ VCCredentialRequest buildRequest( String cNonce, String walletId, String base64EncodedWalletKey, - Boolean isLoginFlow + boolean isLoginFlow ) throws Exception; } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java index 294044975..3e4a8656a 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java @@ -7,29 +7,39 @@ import io.mosip.mimoto.repository.ProofSigningKeyRepository; import io.mosip.mimoto.service.CredentialRequestService; import io.mosip.mimoto.util.EncryptionDecryptionUtil; -import io.mosip.mimoto.util.JoseUtil; import io.mosip.mimoto.util.JwtGeneratorUtil; +import io.mosip.mimoto.util.KeyGenerationUtil; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import javax.crypto.SecretKey; -import java.util.Base64; -import java.util.List; -import java.util.Map; -import java.util.Optional; +import java.security.KeyPair; +import java.util.*; +import java.util.stream.Collectors; @Service +@Slf4j public class CredentialRequestServiceImpl implements CredentialRequestService { - @Autowired - private JoseUtil joseUtil; - @Autowired private ProofSigningKeyRepository proofSigningKeyRepository; @Autowired private EncryptionDecryptionUtil encryptionDecryptionUtil; + @Value("${signing.algorithms.priority.order:ED25519,ES256K,ES256,RS256}") + private String signingAlgorithmsPriorityOrder; + + private static final SigningAlgorithm FALLBACK_SIGNING_ALG = SigningAlgorithm.ED25519; + + public Set getSigningAlgorithmsPriorityOrder() { + return Arrays.stream(signingAlgorithmsPriorityOrder.split(",")) + .map(String::trim).collect(Collectors.toCollection(LinkedHashSet::new)); + } + + @Override public VCCredentialRequest buildRequest(IssuerDTO issuerDTO, CredentialIssuerWellKnownResponse wellKnownResponse, @@ -37,15 +47,17 @@ public VCCredentialRequest buildRequest(IssuerDTO issuerDTO, String cNonce, String walletId, String base64EncodedWalletKey, - Boolean isLoginFlow) throws Exception { + boolean isLoginFlow) throws Exception { - SigningAlgorithm algorithm = resolveAlgorithm(credentialsSupportedResponse); + SigningAlgorithm signingAlgorithm = resolveAlgorithm(credentialsSupportedResponse); String jwt; if (isLoginFlow) { - jwt = generateJwtFromDB(walletId, base64EncodedWalletKey, algorithm, wellKnownResponse, issuerDTO, cNonce); + jwt = generateJwtUsingDBKeys(walletId, base64EncodedWalletKey, signingAlgorithm, wellKnownResponse, issuerDTO, cNonce); } else { - jwt = joseUtil.generateJwt(wellKnownResponse.getCredentialIssuer(), issuerDTO.getClient_id(), cNonce); + KeyPair keyPair = KeyGenerationUtil.generateKeyPair(signingAlgorithm); + log.debug("Generated KeyPair for signing signingAlgorithm: {}", signingAlgorithm); + jwt = JwtGeneratorUtil.generateJwt(signingAlgorithm, wellKnownResponse.getCredentialIssuer(), issuerDTO.getClient_id(), cNonce, keyPair); } List credentialContext = credentialsSupportedResponse.getCredentialDefinition().getContext(); @@ -68,32 +80,48 @@ public VCCredentialRequest buildRequest(IssuerDTO issuerDTO, private SigningAlgorithm resolveAlgorithm(CredentialsSupportedResponse credentialsSupportedResponse) { Map proofTypesSupported = credentialsSupportedResponse.getProofTypesSupported(); - if (proofTypesSupported.containsKey("jwt")) { - return SigningAlgorithm.fromString(proofTypesSupported.get("jwt").getProofSigningAlgValuesSupported().getFirst()); - } - return SigningAlgorithm.RS256; + ProofTypesSupported proofSigningAlgValuesSupported = proofTypesSupported.get("jwt"); + Set signingAlgoPriorityOrderSet = getSigningAlgorithmsPriorityOrder(); + + + return Optional + .ofNullable(proofSigningAlgValuesSupported) + .map(ProofTypesSupported::getProofSigningAlgValuesSupported) + .flatMap(issuerSupportedAlgorithms -> signingAlgoPriorityOrderSet.stream() + .filter(priorityAlgorithm -> issuerSupportedAlgorithms.stream(). + anyMatch(issuerSupportedAlgorithm -> issuerSupportedAlgorithm.equalsIgnoreCase(priorityAlgorithm))) + .findFirst()) + .map(SigningAlgorithm::fromString) + .orElseGet(() -> { + if (proofSigningAlgValuesSupported == null) { + log.warn("JWT proof type is missing in proof_types_supported field of Issuer well-known so falling back to {}", FALLBACK_SIGNING_ALG); + } else { + log.warn("None of the Issuer Supported Algorithms: {} are found in the predefined signing algorithms priority order: {} so falling back to {}", + proofSigningAlgValuesSupported.getProofSigningAlgValuesSupported(), signingAlgoPriorityOrderSet, FALLBACK_SIGNING_ALG); + } + return FALLBACK_SIGNING_ALG; + }); } - private String generateJwtFromDB(String walletId, - String base64EncodedWalletKey, - SigningAlgorithm algorithm, - CredentialIssuerWellKnownResponse wellKnownResponse, - IssuerDTO issuerDTO, - String cNonce) throws Exception { + private String generateJwtUsingDBKeys(String walletId, + String base64EncodedWalletKey, + SigningAlgorithm signingAlgorithm, + CredentialIssuerWellKnownResponse wellKnownResponse, + IssuerDTO issuerDTO, + String cNonce) throws Exception { - Optional proofSigningKey = proofSigningKeyRepository.findByWalletIdAndAlgorithm(walletId, algorithm.name()); + Optional proofSigningKey = proofSigningKeyRepository.findByWalletIdAndAlgorithm(walletId, signingAlgorithm.name()); byte[] decodedWalletKey = Base64.getDecoder().decode(base64EncodedWalletKey); SecretKey walletKey = EncryptionDecryptionUtil.bytesToSecretKey(decodedWalletKey); byte[] publicKeyBytes = Base64.getDecoder().decode(proofSigningKey.get().getPublicKey()); byte[] privateKeyInBytes = encryptionDecryptionUtil.decryptWithAES(walletKey, proofSigningKey.get().getEncryptedSecretKey()); + KeyPair keyPair = KeyGenerationUtil.getKeyPairFromDBStoredKeys(signingAlgorithm, publicKeyBytes, privateKeyInBytes); + log.debug("Fetched KeyPair for signing signingAlgorithm: {} from database", signingAlgorithm); - return JwtGeneratorUtil.generateJwtUsingDBKeys(algorithm, + return JwtGeneratorUtil.generateJwt(signingAlgorithm, wellKnownResponse.getCredentialIssuer(), issuerDTO.getClient_id(), cNonce, - publicKeyBytes, - privateKeyInBytes); + keyPair); } - - } diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java index 52aa71aa7..a7a348313 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java @@ -58,8 +58,7 @@ public ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String cred credentialIssuerConfiguration.getCredentialEndPoint(), credentialIssuerConfiguration.getCredentialConfigurationsSupported()); CredentialsSupportedResponse credentialsSupportedResponse = credentialIssuerWellKnownResponse.getCredentialConfigurationsSupported().get(credentialType); - VCCredentialRequest vcCredentialRequest = credentialRequestService.buildRequest(issuerDTO, credentialIssuerWellKnownResponse, credentialsSupportedResponse, response.getC_nonce(), null, null, false - ); + VCCredentialRequest vcCredentialRequest = credentialRequestService.buildRequest(issuerDTO, credentialIssuerWellKnownResponse, credentialsSupportedResponse, response.getC_nonce(), null, null, false); VCCredentialResponse vcCredentialResponse = downloadCredential(credentialIssuerWellKnownResponse.getCredentialEndPoint(), vcCredentialRequest, response.getAccess_token()); boolean verificationStatus = issuerId.toLowerCase().contains("mock") || credentialVerifierService.verify(vcCredentialResponse); if (verificationStatus) { diff --git a/src/main/java/io/mosip/mimoto/util/JwtGeneratorUtil.java b/src/main/java/io/mosip/mimoto/util/JwtGeneratorUtil.java index 0379f87b0..ae75a89fb 100644 --- a/src/main/java/io/mosip/mimoto/util/JwtGeneratorUtil.java +++ b/src/main/java/io/mosip/mimoto/util/JwtGeneratorUtil.java @@ -29,13 +29,12 @@ public class JwtGeneratorUtil { } } - public static String generateJwtUsingDBKeys(SigningAlgorithm algorithm, String audience, String clientId, String cNonce, byte[] publicKeyBytes, byte[] privateKeyBytes) throws Exception { - KeyPair keyPair = KeyGenerationUtil.getKeyPairFromDBStoredKeys(algorithm, publicKeyBytes, privateKeyBytes); - JWK jwk = generateJwk(algorithm, keyPair); - JWSSigner signer = createSigner(algorithm, jwk); + public static String generateJwt(SigningAlgorithm signingAlgorithm, String audience, String clientId, String cNonce, KeyPair keyPair) throws Exception { + JWK jwk = generateJwk(signingAlgorithm, keyPair); + JWSSigner signer = createSigner(signingAlgorithm, jwk); JWTClaimsSet claimsSet = createClaims(clientId, audience, cNonce); - JWSHeader header = new JWSHeader.Builder(algorithm.getJWSAlgorithm()) + JWSHeader header = new JWSHeader.Builder(signingAlgorithm.getJWSAlgorithm()) .type(new JOSEObjectType("openid4vci-proof+jwt")) .jwk(jwk.toPublicJWK()) .build(); @@ -45,7 +44,7 @@ public static String generateJwtUsingDBKeys(SigningAlgorithm algorithm, String a return signedJWT.serialize(); } - private static JWTClaimsSet createClaims(String clientId, String audience, String cNonce) throws java.text.ParseException { + private static JWTClaimsSet createClaims(String clientId, String audience, String cNonce) { long nowSeconds = System.currentTimeMillis() / 1000; Date issuedAt = new Date(nowSeconds * 1000); Date expiresAt = new Date((nowSeconds + 18000) * 1000); @@ -135,7 +134,7 @@ public Base64URL sign(JWSHeader header, byte[] input) throws JOSEException { @Override public Set supportedJWSAlgorithms() { - return Collections.singleton(JWSAlgorithm.EdDSA); + return Collections.singleton(JWSAlgorithm.Ed25519); } @Override diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 875f4687d..cd9969515 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -320,4 +320,7 @@ wallet.passcode.retryBlockedUntil=60 # Maximum number of failed passcode attempts allowed in a single cycle (defaults to 1 if <=0) wallet.passcode.maxFailedAttemptsAllowedPerCycle=5 # Maximum number of lock cycles allowed before the wallet is permanently locked (defaults to 1 if <=0) -wallet.passcode.maxLockCyclesAllowed=3 \ No newline at end of file +wallet.passcode.maxLockCyclesAllowed=3 + +#Signing Algorithms Priority Order Configuration +signing.algorithms.priority.order = ED25519,ES256K,ES256,RS256 \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java index da4f5bc58..ecb894dd3 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java @@ -1,39 +1,60 @@ package io.mosip.mimoto.service; +import io.mosip.mimoto.constant.SigningAlgorithm; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.mimoto.*; +import io.mosip.mimoto.repository.ProofSigningKeyRepository; import io.mosip.mimoto.service.impl.CredentialRequestServiceImpl; import io.mosip.mimoto.util.*; +import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; +import org.mockito.MockedStatic; import org.mockito.Mockito; -import org.mockito.junit.MockitoJUnitRunner; - +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringRunner; +import org.mockito.ArgumentCaptor; + +import java.util.Collections; import java.util.List; import static io.mosip.mimoto.util.TestUtilities.*; import static org.junit.Assert.*; -import static org.mockito.ArgumentMatchers.any; -@RunWith(MockitoJUnitRunner.class) +@RunWith(SpringRunner.class) +@SpringBootTest(classes = {CredentialRequestServiceImpl.class}) +@TestPropertySource(locations = "classpath:application-test.properties") public class CredentialRequestServiceTest { - @InjectMocks - CredentialRequestServiceImpl credentialRequestBuilder; - - @Mock - JoseUtil joseUtil; + @Autowired + private CredentialRequestServiceImpl credentialRequestServiceImpl; + + @MockBean + private ProofSigningKeyRepository proofSigningKeyRepository; + + @MockBean + private EncryptionDecryptionUtil encryptionDecryptionUtil; + + private final MockedStatic keyGenerationUtilMockedStatic = Mockito.mockStatic(KeyGenerationUtil.class, Mockito.withSettings().defaultAnswer(Mockito.CALLS_REAL_METHODS)); IssuerDTO issuerDTO; String issuerId; @Before - public void setUp() throws Exception { + public void setUp() { issuerId = "issuer1"; issuerDTO = getIssuerConfigDTO(issuerId); } + @After + public void tearDown() { + if(keyGenerationUtilMockedStatic != null) { + keyGenerationUtilMockedStatic.close(); + } + } + @Test public void shouldHandleNullContextInCredentialSupportedResponse() throws Exception { CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupportedResponse("CredentialType1"); @@ -42,9 +63,7 @@ public void shouldHandleNullContextInCredentialSupportedResponse() throws Except CredentialIssuerWellKnownResponse issuerWellKnownResponse = new CredentialIssuerWellKnownResponse(); issuerWellKnownResponse.setCredentialIssuer("https://example-issuer.com"); - Mockito.when(joseUtil.generateJwt(any(), any(), any())).thenReturn("jwt"); - - VCCredentialRequest result = credentialRequestBuilder.buildRequest( + VCCredentialRequest result = credentialRequestServiceImpl.buildRequest( issuerDTO, issuerWellKnownResponse, credentialsSupportedResponse, @@ -57,7 +76,7 @@ public void shouldHandleNullContextInCredentialSupportedResponse() throws Except assertNotNull(result.getCredentialDefinition().getContext()); assertEquals("https://www.w3.org/2018/credentials/v1", result.getCredentialDefinition().getContext().getFirst()); } - + @Test public void shouldHandleEmptyContextInCredentialSupportedResponse() throws Exception { CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupportedResponse("CredentialType1"); @@ -67,10 +86,7 @@ public void shouldHandleEmptyContextInCredentialSupportedResponse() throws Excep CredentialIssuerWellKnownResponse issuerWellKnownResponse = new CredentialIssuerWellKnownResponse(); issuerWellKnownResponse.setCredentialIssuer("https://example-issuer.com"); - - Mockito.when(joseUtil.generateJwt(any(), any(), any())).thenReturn("jwt"); - - VCCredentialRequest result = credentialRequestBuilder.buildRequest( + VCCredentialRequest result = credentialRequestServiceImpl.buildRequest( issuerDTO, issuerWellKnownResponse, credentialsSupportedResponse, @@ -83,7 +99,7 @@ public void shouldHandleEmptyContextInCredentialSupportedResponse() throws Excep assertNotNull(result.getCredentialDefinition().getContext()); assertEquals("https://www.w3.org/2018/credentials/v1", result.getCredentialDefinition().getContext().getFirst()); } - + @Test public void shouldHandleExistingContextWithSpecificValue() throws Exception { @@ -95,9 +111,7 @@ public void shouldHandleExistingContextWithSpecificValue() throws Exception { CredentialIssuerWellKnownResponse issuerWellKnownResponse = new CredentialIssuerWellKnownResponse(); issuerWellKnownResponse.setCredentialIssuer("https://example-issuer.com"); - Mockito.when(joseUtil.generateJwt(any(), any(), any())).thenReturn("jwt"); - - VCCredentialRequest result = credentialRequestBuilder.buildRequest( + VCCredentialRequest result = credentialRequestServiceImpl.buildRequest( issuerDTO, issuerWellKnownResponse, credentialsSupportedResponse, @@ -111,4 +125,104 @@ public void shouldHandleExistingContextWithSpecificValue() throws Exception { assertEquals("https://www.w3.org/ns/credentials/v2", result.getCredentialDefinition().getContext().getFirst()); } + @Test + public void shouldReturnFallbackAlgorithmWhenJwtProofTypeOfProofTypesSupportedIsNull() throws Exception { + CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupportedResponse("CredentialType1"); + CredentialIssuerWellKnownResponse issuerWellKnownResponse = new CredentialIssuerWellKnownResponse(); + issuerWellKnownResponse.setCredentialIssuer("https://example-issuer.com"); + credentialsSupportedResponse.getProofTypesSupported().put("jwt", null); + + + credentialRequestServiceImpl.buildRequest( + issuerDTO, + issuerWellKnownResponse, + credentialsSupportedResponse, + "test-cnonce", + "walletId", + "walletKey", + false + ); + + + ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(SigningAlgorithm.class); + keyGenerationUtilMockedStatic.verify(() -> KeyGenerationUtil.generateKeyPair(argumentCaptor.capture())); + SigningAlgorithm capturedAlgorithm = argumentCaptor.getValue(); + assertEquals(SigningAlgorithm.ED25519, capturedAlgorithm); + } + + @Test + public void shouldReturnFallbackAlgorithmWhenJwtProofTypeOfProofTypesSupportedIsEmpty() throws Exception { + CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupportedResponse("CredentialType1"); + CredentialIssuerWellKnownResponse issuerWellKnownResponse = new CredentialIssuerWellKnownResponse(); + issuerWellKnownResponse.setCredentialIssuer("https://example-issuer.com"); + ProofTypesSupported proofTypesSupported = new ProofTypesSupported(); + proofTypesSupported.setProofSigningAlgValuesSupported(Collections.emptyList()); + credentialsSupportedResponse.getProofTypesSupported().put("jwt", proofTypesSupported); + + credentialRequestServiceImpl.buildRequest( + issuerDTO, + issuerWellKnownResponse, + credentialsSupportedResponse, + "test-cnonce", + "walletId", + "walletKey", + false + ); + + + ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(SigningAlgorithm.class); + keyGenerationUtilMockedStatic.verify(() -> KeyGenerationUtil.generateKeyPair(argumentCaptor.capture())); + SigningAlgorithm capturedAlgorithm = argumentCaptor.getValue(); + assertEquals(SigningAlgorithm.ED25519, capturedAlgorithm); + } + + @Test + public void shouldUseHighestPriorityAlgorithmInPredefinedSigningAlgoPrioritySetWhichIsAlsoSupportedByIssuer() throws Exception { + CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupportedResponse("CredentialType1"); + CredentialIssuerWellKnownResponse issuerWellKnownResponse = new CredentialIssuerWellKnownResponse(); + issuerWellKnownResponse.setCredentialIssuer("https://example-issuer.com"); + credentialsSupportedResponse.getProofTypesSupported().get("jwt").setProofSigningAlgValuesSupported(List.of("es256k")); + + + credentialRequestServiceImpl.buildRequest( + issuerDTO, + issuerWellKnownResponse, + credentialsSupportedResponse, + "test-cnonce", + "walletId", + "walletKey", + false + ); + + + ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(SigningAlgorithm.class); + keyGenerationUtilMockedStatic.verify(() -> KeyGenerationUtil.generateKeyPair(argumentCaptor.capture())); + SigningAlgorithm capturedAlgorithm = argumentCaptor.getValue(); + assertEquals(SigningAlgorithm.ES256K, capturedAlgorithm); + } + + @Test + public void shouldUseFallbackPrioritySigningAlgorithmIfNoneOfIssuerSupportedAlgoAreSupportedByMimto() throws Exception { + CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupportedResponse("CredentialType1"); + CredentialIssuerWellKnownResponse issuerWellKnownResponse = new CredentialIssuerWellKnownResponse(); + issuerWellKnownResponse.setCredentialIssuer("https://example-issuer.com"); + credentialsSupportedResponse.getProofTypesSupported().get("jwt").setProofSigningAlgValuesSupported(List.of("ps256")); + + + credentialRequestServiceImpl.buildRequest( + issuerDTO, + issuerWellKnownResponse, + credentialsSupportedResponse, + "test-cnonce", + "walletId", + "walletKey", + false + ); + + + ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(SigningAlgorithm.class); + keyGenerationUtilMockedStatic.verify(() -> KeyGenerationUtil.generateKeyPair(argumentCaptor.capture())); + SigningAlgorithm capturedAlgorithm = argumentCaptor.getValue(); + assertEquals(SigningAlgorithm.ED25519, capturedAlgorithm); + } } \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidatorTest.java b/src/test/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidatorTest.java index dee6e4973..f9ccab8b9 100644 --- a/src/test/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidatorTest.java +++ b/src/test/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidatorTest.java @@ -13,6 +13,7 @@ import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; import java.util.*; @@ -20,12 +21,16 @@ import static io.mosip.mimoto.util.TestUtilities.getCredentialSupportedResponse; import static org.junit.jupiter.api.Assertions.*; -public class CredentialIssuerWellknownResponseValidatorTest { +import org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration; + +@SpringBootTest(classes = {CredentialIssuerWellknownResponseValidator.class, CredentialIssuerWellKnownResponse.class, ValidationAutoConfiguration.class}) +class CredentialIssuerWellknownResponseValidatorTest { @Autowired private Validator validator; - CredentialIssuerWellKnownResponse response; + @Autowired + private CredentialIssuerWellKnownResponse response; @BeforeEach void setUp() { @@ -36,7 +41,7 @@ void setUp() { } @Test - public void shouldThrowExceptionWhenCredentialIssuerIsMissingInCredentialIssuerWellknownResponse() { + void shouldThrowExceptionWhenCredentialIssuerIsMissingInCredentialIssuerWellknownResponse() { response.setCredentialIssuer(""); response.setCredentialEndPoint("http://example.com/credential"); @@ -51,7 +56,7 @@ public void shouldThrowExceptionWhenCredentialIssuerIsMissingInCredentialIssuerW } @Test - public void shouldThrowExceptionWhenCredentialEndpointIsIncorrectInCredentialIssuerWellknownResponse() { + void shouldThrowExceptionWhenCredentialEndpointIsIncorrectInCredentialIssuerWellknownResponse() { response.setCredentialEndPoint("http://example.com"); // Incorrect because it does not end with "/credential" CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); @@ -65,7 +70,7 @@ public void shouldThrowExceptionWhenCredentialEndpointIsIncorrectInCredentialIss } @Test - public void shouldThrowExceptionWhenAuthorizationServersIsEmpty() { + void shouldThrowExceptionWhenAuthorizationServersIsEmpty() { response.setCredentialIssuer("https://valid.url/credential"); response.setAuthorizationServers(Collections.emptyList()); // Invalid empty list @@ -80,7 +85,7 @@ public void shouldThrowExceptionWhenAuthorizationServersIsEmpty() { } @Test - public void shouldThrowExceptionWhenAuthorizationServersIsNull() { + void shouldThrowExceptionWhenAuthorizationServersIsNull() { response.setCredentialIssuer("https://valid.url/credential"); response.setAuthorizationServers(null); @@ -95,7 +100,7 @@ public void shouldThrowExceptionWhenAuthorizationServersIsNull() { } @Test - public void shouldThrowExceptionWhenFormatIsMissingInCredentialsSupported() { + void shouldThrowExceptionWhenFormatIsMissingInCredentialsSupported() { CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupportedResponse("CredentialType1"); credentialsSupportedResponse.setFormat(null); response = getCredentialIssuerWellKnownResponseDto("Issuer1", @@ -113,7 +118,7 @@ public void shouldThrowExceptionWhenFormatIsMissingInCredentialsSupported() { } @Test - public void shouldThrowExceptionWhenLogoUrlIsInvalid() { + void shouldThrowExceptionWhenLogoUrlIsInvalid() { response.getCredentialConfigurationsSupported().get("CredentialType1").getDisplay().getFirst().getLogo().setUrl("ftp//invalid-url"); // Invalid URL CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); @@ -127,7 +132,7 @@ public void shouldThrowExceptionWhenLogoUrlIsInvalid() { } @Test - public void shouldThrowExceptionWhenBackgroundImageUrlIsInvalid() { + void shouldThrowExceptionWhenBackgroundImageUrlIsInvalid() { response.getCredentialConfigurationsSupported().get("CredentialType1").getDisplay().getFirst().setBackgroundImage(new BackgroundImageDTO("local//imgbasebase64")); CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); @@ -142,7 +147,7 @@ public void shouldThrowExceptionWhenBackgroundImageUrlIsInvalid() { } @Test - public void shouldDetectMissingMandatoryFields() { + void shouldDetectMissingMandatoryFields() { response.setCredentialEndPoint(null); response.setCredentialConfigurationsSupported(null); response.setAuthorizationServers(null); @@ -161,7 +166,7 @@ public void shouldDetectMissingMandatoryFields() { } @Test - public void shouldDetectMissingMandatoryFieldsOfCredentialSupportedResponse() { + void shouldDetectMissingMandatoryFieldsOfCredentialSupportedResponse() { response.getCredentialConfigurationsSupported().get("CredentialType1").setFormat(null); response.getCredentialConfigurationsSupported().get("CredentialType1").setScope(null); response.getCredentialConfigurationsSupported().get("CredentialType1").setDisplay(null); @@ -182,7 +187,19 @@ public void shouldDetectMissingMandatoryFieldsOfCredentialSupportedResponse() { } @Test - public void shouldDetectMissingProofAlgorithmsSupported() { + void shouldThrowExceptionIfProofTypesSupportedValueIsEmptyInCredentialSupportedResponse() { + response.getCredentialConfigurationsSupported().get("CredentialType1").setProofTypesSupported(new HashMap<>()); + CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); + + InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> + credentialIssuerWellknownResponseValidator.validate(response, validator)); + String message = invalidWellknownResponseException.getMessage(); + assertTrue(message.contains("RESIDENT-APP-041 --> Invalid Wellknown from Issuer")); + assertTrue(message.contains("credentialConfigurationsSupported[CredentialType1].proofTypesSupported: Proof types supported must not be empty")); + } + + @Test + void shouldThrowExceptionIfProofSigningAlgorithmsSupportedValueIsNullInCredentialSupportedResponse() { response.getCredentialConfigurationsSupported().get("CredentialType1").getProofTypesSupported().get("jwt").setProofSigningAlgValuesSupported(null); CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); @@ -190,13 +207,23 @@ public void shouldDetectMissingProofAlgorithmsSupported() { credentialIssuerWellknownResponseValidator.validate(response, validator)); String message = invalidWellknownResponseException.getMessage(); assertTrue(message.contains("RESIDENT-APP-041 --> Invalid Wellknown from Issuer")); - assertTrue(message.contains("credentialConfigurationsSupported[CredentialType1].proofTypesSupported[jwt].proofSigningAlgValuesSupported: must not be null")); assertTrue(message.contains("credentialConfigurationsSupported[CredentialType1].proofTypesSupported[jwt].proofSigningAlgValuesSupported: must not be empty")); + } + + @Test + void shouldThrowExceptionIfProofSigningAlgorithmsSupportedValueIsEmptyInCredentialSupportedResponse() { + response.getCredentialConfigurationsSupported().get("CredentialType1").getProofTypesSupported().get("jwt").setProofSigningAlgValuesSupported(new ArrayList<>()); + CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); + InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> + credentialIssuerWellknownResponseValidator.validate(response, validator)); + String message = invalidWellknownResponseException.getMessage(); + assertTrue(message.contains("RESIDENT-APP-041 --> Invalid Wellknown from Issuer")); + assertTrue(message.contains("credentialConfigurationsSupported[CredentialType1].proofTypesSupported[jwt].proofSigningAlgValuesSupported: must not be empty")); } @Test - public void shouldDetectMissingMandatoryFieldsOfCredentialSupportedDisplayResponse() { + void shouldDetectMissingMandatoryFieldsOfCredentialSupportedDisplayResponse() { // Create a new response object with nested display response details List credentialSupportedDisplayResponseList = new ArrayList<>(); CredentialSupportedDisplayResponse credentialSupportedDisplayResponse = new CredentialSupportedDisplayResponse(); @@ -228,8 +255,8 @@ public void shouldDetectMissingMandatoryFieldsOfCredentialSupportedDisplayRespon @Nested class LdpVcFormatWellKnownResponseValidationTest { @Test - public void shouldDetectMissingMandatoryFieldsCredentialDefinitionOfCredentialSupportedResponse() { - CredentialIssuerWellKnownResponse response = getCredentialIssuerWellKnownResponseDto("Issuer1", + void shouldDetectMissingMandatoryFieldsCredentialDefinitionOfCredentialSupportedResponse() { + response = getCredentialIssuerWellKnownResponseDto("Issuer1", Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); response.getCredentialConfigurationsSupported().get("CredentialType1").setCredentialDefinition(null); CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); @@ -243,8 +270,8 @@ public void shouldDetectMissingMandatoryFieldsCredentialDefinitionOfCredentialSu } @Test - public void shouldDetectMissingMandatoryFieldsOfCredentialDefinitionInWellknownResponse() { - CredentialIssuerWellKnownResponse response = getCredentialIssuerWellKnownResponseDto("Issuer1", + void shouldDetectMissingMandatoryFieldsOfCredentialDefinitionInWellknownResponse() { + response = getCredentialIssuerWellKnownResponseDto("Issuer1", Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); CredentialDefinitionResponseDto credentialDefinitionResponseDto = new CredentialDefinitionResponseDto(); credentialDefinitionResponseDto.setCredentialSubject(null); @@ -264,8 +291,8 @@ public void shouldDetectMissingMandatoryFieldsOfCredentialDefinitionInWellknownR } @Test - public void shouldThrowExceptionWhenCredentialDefinitionTypeIsEmpty() { - CredentialIssuerWellKnownResponse response = getCredentialIssuerWellKnownResponseDto("Issuer1", + void shouldThrowExceptionWhenCredentialDefinitionTypeIsEmpty() { + response = getCredentialIssuerWellKnownResponseDto("Issuer1", Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); response.getCredentialConfigurationsSupported().get("CredentialType1").getCredentialDefinition().setType(Collections.emptyList()); // Invalid empty list diff --git a/src/test/java/io/mosip/mimoto/util/JwtGeneratorUtilTest.java b/src/test/java/io/mosip/mimoto/util/JwtGeneratorUtilTest.java index 0ec5c2763..9ca4c3c60 100644 --- a/src/test/java/io/mosip/mimoto/util/JwtGeneratorUtilTest.java +++ b/src/test/java/io/mosip/mimoto/util/JwtGeneratorUtilTest.java @@ -9,7 +9,6 @@ import java.security.*; import java.security.spec.ECGenParameterSpec; import java.util.Arrays; -import java.util.Base64; import java.util.Date; import java.util.List; import static org.junit.Assert.*; @@ -31,13 +30,12 @@ public void shouldGenerateJWTForRS256Successfully() throws Exception { KeyPair keyPair = generator.generateKeyPair(); List expectedClaims = Arrays.asList("client-id", "audience", "nonce-rs256"); - String jwt = JwtGeneratorUtil.generateJwtUsingDBKeys( + String jwt = JwtGeneratorUtil.generateJwt( SigningAlgorithm.RS256, "audience", "client-id", "nonce-rs256", - keyPair.getPublic().getEncoded(), - keyPair.getPrivate().getEncoded() + keyPair ); SignedJWT signedJWT = SignedJWT.parse(jwt); @@ -58,13 +56,12 @@ public void shouldGenerateJWTForES256Successfully() throws Exception { KeyPair keyPair = generator.generateKeyPair(); List expectedClaims = Arrays.asList("client-id", "audience", "nonce-es256"); - String jwt = JwtGeneratorUtil.generateJwtUsingDBKeys( + String jwt = JwtGeneratorUtil.generateJwt( SigningAlgorithm.ES256, "audience", "client-id", "nonce-es256", - keyPair.getPublic().getEncoded(), - keyPair.getPrivate().getEncoded() + keyPair ); SignedJWT signedJWT = SignedJWT.parse(jwt); @@ -85,13 +82,12 @@ public void shouldGenerateJWTForES256kSuccessfully() throws Exception { KeyPair keyPair = generator.generateKeyPair(); List expectedClaims = Arrays.asList("client-id", "audience", "nonce-es256k"); - String jwt = JwtGeneratorUtil.generateJwtUsingDBKeys( + String jwt = JwtGeneratorUtil.generateJwt( SigningAlgorithm.ES256K, "audience", "client-id", "nonce-es256k", - keyPair.getPublic().getEncoded(), - keyPair.getPrivate().getEncoded() + keyPair ); SignedJWT signedJWT = SignedJWT.parse(jwt); @@ -111,13 +107,12 @@ public void shouldGenerateJWTForED25519Successfully() throws Exception { KeyPair keyPair = generator.generateKeyPair(); List expectedClaims = Arrays.asList("client-id", "audience", "nonce-ed25519"); - String jwt = JwtGeneratorUtil.generateJwtUsingDBKeys( + String jwt = JwtGeneratorUtil.generateJwt( SigningAlgorithm.ED25519, "audience", "client-id", "nonce-ed25519", - keyPair.getPublic().getEncoded(), - keyPair.getPrivate().getEncoded() + keyPair ); SignedJWT signedJWT = SignedJWT.parse(jwt); diff --git a/src/test/resources/application-test.properties b/src/test/resources/application-test.properties index 623fd5439..c3aebc42d 100644 --- a/src/test/resources/application-test.properties +++ b/src/test/resources/application-test.properties @@ -54,4 +54,7 @@ wallet.passcode.retryBlockedUntil=60 # Maximum number of failed passcode attempts allowed in a single cycle (defaults to 1 if <=0) wallet.passcode.maxFailedAttemptsAllowedPerCycle=5 # Maximum number of lock cycles allowed before the wallet is permanently locked (defaults to 1 if <=0) -wallet.passcode.maxLockCyclesAllowed=3 \ No newline at end of file +wallet.passcode.maxLockCyclesAllowed=3 + +#Signing Algorithms Priority Order Configuration +signing.algorithms.priority.order = ED25519,ES256K,ES256,RS256 \ No newline at end of file From 9d5ec3889d0467a9f1cb7e6136d8ee65bf464c92 Mon Sep 17 00:00:00 2001 From: cyber-titan <124165966+cyber-titan@users.noreply.github.com> Date: Wed, 30 Jul 2025 13:21:50 +0530 Subject: [PATCH 725/860] injiweb-1629 improved invalid request handling in wallet credentials API (#804) * injiweb-1629 improved invalid request handling in wallet credentials API Signed-off-by: cyber_titan --- .../WalletCredentialsController.java | 6 ++- .../mimoto/service/impl/IdpServiceImpl.java | 37 +++++++++++++----- .../io/mosip/mimoto/util/LocaleUtils.java | 7 ++++ .../WalletCredentialsControllerTest.java | 17 +++++++++ .../mosip/mimoto/service/IdpServiceTest.java | 38 +++++++++++++++++++ 5 files changed, 95 insertions(+), 10 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index c1f28d0e0..ce397dca5 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -10,6 +10,7 @@ import io.mosip.mimoto.exception.*; import io.mosip.mimoto.service.WalletCredentialService; import io.mosip.mimoto.service.IdpService; +import io.mosip.mimoto.util.LocaleUtils; import io.mosip.mimoto.util.Utilities; import io.mosip.mimoto.util.WalletUtil; import io.swagger.v3.oas.annotations.Operation; @@ -42,6 +43,7 @@ import java.util.Objects; import static io.mosip.mimoto.exception.ErrorConstants.CREDENTIAL_DOWNLOAD_EXCEPTION; +import static io.mosip.mimoto.exception.ErrorConstants.INVALID_REQUEST; import static io.mosip.mimoto.util.WalletUtil.validateWalletId; /** @@ -110,7 +112,9 @@ public ResponseEntity downloadCredential( @PathVariable("walletId") @NotBlank(message = "Wallet ID cannot be blank") String walletId, @RequestBody @Valid VerifiableCredentialRequestDTO verifiableCredentialRequest, HttpSession httpSession) throws InvalidRequestException { - + if (!LocaleUtils.isValidLanguageCode(locale)) { + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Locale must be a valid 2-letter code"); + } validateWalletId(httpSession, walletId); String base64EncodedWalletKey = WalletUtil.getSessionWalletKey(httpSession); diff --git a/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java index befd02455..4b32b0492 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java @@ -16,7 +16,11 @@ import org.springframework.stereotype.Service; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; +import org.springframework.web.client.HttpClientErrorException; import org.springframework.web.client.RestTemplate; +import org.springframework.http.HttpStatus; + +import static io.mosip.mimoto.exception.ErrorConstants.*; import java.io.IOException; import java.util.HashMap; @@ -76,16 +80,31 @@ public TokenResponseDTO getTokenResponse(VerifiableCredentialRequestDTO verifiab @Override public TokenResponseDTO getTokenResponse(Map params) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { - String issuerId = params.get("issuer"); - IssuerDTO issuerDTO = issuersService.getIssuerDetails(issuerId); - CredentialIssuerConfiguration credentialIssuerConfiguration = issuersService.getIssuerConfiguration(issuerId); - String tokenEndpoint = getTokenEndpoint(credentialIssuerConfiguration); - HttpEntity> request = constructGetTokenRequest(params, issuerDTO, tokenEndpoint); - TokenResponseDTO response = restTemplate.postForObject(tokenEndpoint, request, TokenResponseDTO.class); - if (response == null) { - throw new IdpException("Exception occurred while performing the authorization"); + try{ + String issuerId = params.get("issuer"); + String codeVerifier = params.get("code_verifier"); + if (codeVerifier == null || !codeVerifier.matches("^[A-Za-z0-9\\-._~]{43,128}$")) { + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Invalid code verifier."); + } + + IssuerDTO issuerDTO = issuersService.getIssuerDetails(issuerId); + CredentialIssuerConfiguration credentialIssuerConfiguration = issuersService.getIssuerConfiguration(issuerId); + String tokenEndpoint = getTokenEndpoint(credentialIssuerConfiguration); + HttpEntity> request = constructGetTokenRequest(params, issuerDTO, tokenEndpoint); + TokenResponseDTO response = restTemplate.postForObject(tokenEndpoint, request, TokenResponseDTO.class); + if (response == null) { + throw new IdpException("Exception occurred while performing the authorization"); + } + return response; + } catch (InvalidIssuerIdException e) { + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Invalid issuer"); + } catch (HttpClientErrorException e) { + if (e.getStatusCode() == HttpStatus.BAD_REQUEST) { + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Request failed due to invalid input detected by an external service."); + } else { + throw e; + } } - return response; } diff --git a/src/main/java/io/mosip/mimoto/util/LocaleUtils.java b/src/main/java/io/mosip/mimoto/util/LocaleUtils.java index 0c8ceff54..11383f53a 100644 --- a/src/main/java/io/mosip/mimoto/util/LocaleUtils.java +++ b/src/main/java/io/mosip/mimoto/util/LocaleUtils.java @@ -68,4 +68,11 @@ public static CredentialSupportedDisplayResponse getCredentialDisplayDTOBasedOnL .findFirst() .orElse(displayDTOList.get(0)); // Return first display object if no match is found for the received locale } + + public static boolean isValidLanguageCode(String code) { + return (code != null && + code.length() == 2 && + code.matches("[a-zA-Z]{2}") && + java.util.Arrays.asList(Locale.getISOLanguages()).contains(code.toLowerCase())); + } } diff --git a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java index e5784d3a0..6a8aacd53 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletCredentialsControllerTest.java @@ -631,4 +631,21 @@ private void buildVerifiableCredentialRequest(String issuer, String credentialCo verifiableCredentialRequest.setRedirectUri(redirectUri); verifiableCredentialRequest.setCodeVerifier(codeVerifier); } + + @Test + public void shouldThrowInvalidRequestForInvalidLocaleCode() throws Exception { + buildVerifiableCredentialRequest(issuer, credentialConfigurationId, code, grantType, redirectUri, codeVerifier); + + // "zz" is not a valid ISO 639-1 language code + mockMvc.perform(post("/wallets/{walletId}/credentials", walletId) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON) + .header("Accept-Language", "zz") + .content(createRequestBody(verifiableCredentialRequest)) + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errorCode").value("invalid_request")) + .andExpect(jsonPath("$.errorMessage").value("Locale must be a valid 2-letter code")); + } } \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/IdpServiceTest.java b/src/test/java/io/mosip/mimoto/service/IdpServiceTest.java index d0e0dd5c6..3a9a233e2 100644 --- a/src/test/java/io/mosip/mimoto/service/IdpServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/IdpServiceTest.java @@ -5,6 +5,7 @@ import io.mosip.mimoto.dto.mimoto.AuthorizationServerWellKnownResponse; import io.mosip.mimoto.dto.mimoto.CredentialIssuerConfiguration; import io.mosip.mimoto.exception.IdpException; +import io.mosip.mimoto.exception.InvalidRequestException; import io.mosip.mimoto.exception.IssuerOnboardingException; import io.mosip.mimoto.service.impl.IdpServiceImpl; import io.mosip.mimoto.util.JoseUtil; @@ -16,8 +17,10 @@ import org.mockito.junit.MockitoJUnitRunner; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.util.MultiValueMap; +import org.springframework.web.client.HttpClientErrorException; import org.springframework.web.client.RestTemplate; import java.io.IOException; @@ -138,6 +141,8 @@ public void shouldThrowExceptionIfResponseIsNullWhenFetchingTokenResponse() thro when(restTemplate.postForObject(eq("https://example.com/token"), any(HttpEntity.class), eq(TokenResponseDTO.class))) .thenReturn(null); + params.put("code_verifier", "dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk"); + IdpException ex = assertThrows(IdpException.class, () -> idpService.getTokenResponse(params)); @@ -165,9 +170,42 @@ public void shouldReturnTokenResponseForValidTokenEndpoint() throws Exception { when(restTemplate.postForObject(eq("https://example.com/token"), any(HttpEntity.class), eq(TokenResponseDTO.class))) .thenReturn(tokenResponseDTO); + params.put("code_verifier", "dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk"); + TokenResponseDTO response = idpService.getTokenResponse(params); assertNotNull(response); assertEquals(tokenResponseDTO, response); } + + @Test + public void shouldThrowInvalidRequestExceptionOnBadRequestFromTokenEndpoint() throws Exception { + params.put("issuer", "issuer123"); + + IssuerDTO mockIssuer = new IssuerDTO(); + mockIssuer.setClient_id("client123"); + mockIssuer.setClient_alias("clientAlias"); + + when(issuersService.getIssuerDetails("issuer123")).thenReturn(mockIssuer); + when(issuersService.getIssuerConfiguration("issuer123")).thenReturn(credentialIssuerConfiguration); + when(credentialIssuerConfiguration.getAuthorizationServerWellKnownResponse()) + .thenReturn(authorizationServerWellKnownResponse); + when(authorizationServerWellKnownResponse.getTokenEndpoint()) + .thenReturn("https://example.com/token"); + when(joseUtil.getJWT(eq("client123"), any(), any(), eq("clientAlias"), any(), eq("https://example.com/token"))) + .thenReturn("jwt-token"); + + HttpClientErrorException badRequestException = HttpClientErrorException.create( + HttpStatus.BAD_REQUEST, "Bad Request", null, null, null); + + when(restTemplate.postForObject(eq("https://example.com/token"), any(HttpEntity.class), eq(TokenResponseDTO.class))) + .thenThrow(badRequestException); + + params.put("code_verifier", "dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk"); + + InvalidRequestException ex = assertThrows(InvalidRequestException.class, () -> + idpService.getTokenResponse(params)); + + assertEquals("invalid_request --> Request failed due to invalid input detected by an external service.", ex.getMessage()); + } } \ No newline at end of file From 4db1af47fb6d54c8dd50a858d3e2432dc3c5156e Mon Sep 17 00:00:00 2001 From: Sradha Mohanty Date: Wed, 30 Jul 2025 17:18:47 +0530 Subject: [PATCH 726/860] MOSIP-42259: Enable execution of a single test or task with all its required dependencies for MIMOTO. (#794) * MOSIP-28246 Removed commented unused variables Signed-off-by: SradhaMohanty5899 * MOSIP-35628 API - Capture info in the report whether Captcha is enabled on the target env or not Signed-off-by: SradhaMohanty5899 * MOSIP-35628 Removed empty string check Signed-off-by: SradhaMohanty5899 * MOSIP-35628 Added 1.2.1-SNAPSHOT version Signed-off-by: SradhaMohanty5899 * Removed isCaptchaEnabled() and getValueFromEsignetActuator() methods after moving to commons util Signed-off-by: SradhaMohanty5899 * Changed snapshot version Signed-off-by: SradhaMohanty5899 * Check and report CAPTCHA status only once during test execution. Signed-off-by: SradhaMohanty5899 * MOSIP-42259 Enable execution of a single test or task with all its required dependencies clearly mapped and managed externally Signed-off-by: SradhaMohanty5899 * MOSIP-42259 Changed the POM version Signed-off-by: SradhaMohanty5899 * MOSIP-42259 Signed-off-by: SradhaMohanty5899 --------- Signed-off-by: SradhaMohanty5899 --- api-test/pom.xml | 2 +- .../mimoto/testrunner/MosipTestRunner.java | 12 + .../apirig/mimoto/utils/MimotoUtil.java | 18 + .../config/healthCheckEndpoint.properties | 1 - .../main/resources/config/mimoto.properties | 7 +- .../src/main/resources/config/mispPolicy.json | 7 + .../config/testCaseInterDependency.json | 638 ++++++++++++++++++ 7 files changed, 679 insertions(+), 6 deletions(-) create mode 100644 api-test/src/main/resources/config/mispPolicy.json create mode 100644 api-test/src/main/resources/config/testCaseInterDependency.json diff --git a/api-test/pom.xml b/api-test/pom.xml index 2cf8a0d03..b51f5f2e3 100644 --- a/api-test/pom.xml +++ b/api-test/pom.xml @@ -68,7 +68,7 @@ io.mosip.testrig.apitest.commons apitest-commons - 1.3.3 + 1.2.1-SNAPSHOT diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java index 936b91fa3..54a4f2c4d 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java @@ -35,6 +35,7 @@ import io.mosip.testrig.apirig.utils.AdminTestUtil; import io.mosip.testrig.apirig.utils.AuthTestsUtil; import io.mosip.testrig.apirig.utils.CertsUtil; +import io.mosip.testrig.apirig.utils.DependencyResolver; import io.mosip.testrig.apirig.utils.GlobalConstants; import io.mosip.testrig.apirig.utils.GlobalMethods; import io.mosip.testrig.apirig.utils.JWKKeyUtil; @@ -104,6 +105,14 @@ public static void main(String[] arg) { // Generating biometric details with mock MDS BiometricDataProvider.generateBiometricTestData("Registration"); + + String testCasesToExecuteString = MimotoConfigManager.getproperty("testCasesToExecute"); + + DependencyResolver.loadDependencies(getGlobalResourcePath() + "/" + "config/testCaseInterDependency.json"); + + if (!testCasesToExecuteString.isBlank()) { + MimotoUtil.testCasesInRunScope = DependencyResolver.getDependencies(testCasesToExecuteString); + } startTestRunner(); } catch (Exception e) { @@ -117,6 +126,9 @@ public static void main(String[] arg) { OTPListener.bTerminate = true; HealthChecker.bTerminate = true; + + // Used for generating the test case interdependency JSON file + //AdminTestUtil.generateTestCaseInterDependencies(getGlobalResourcePath() + "/config/testCaseInterDependency.json"); System.exit(0); diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java index 918e64c1b..f927a6cc8 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java @@ -6,8 +6,10 @@ import java.security.PublicKey; import java.time.LocalDate; import java.time.format.DateTimeFormatter; +import java.util.ArrayList; import java.util.Calendar; import java.util.HashMap; +import java.util.List; import java.util.Map; import javax.ws.rs.core.MediaType; @@ -44,6 +46,8 @@ public class MimotoUtil extends AdminTestUtil { private static String dobForSunBirdR = generateDobForSunBirdR(); private static String policyNumberForSunBirdR = generateRandomNumberString(9); + public static List testCasesInRunScope = new ArrayList<>(); + public static void setLogLevel() { if (MimotoConfigManager.IsDebugEnabled()) logger.setLevel(Level.ALL); @@ -75,14 +79,28 @@ public static TestCaseDTO changeContextURLByFlag(TestCaseDTO testCaseDTO) { return testCaseDTO; } + public static boolean isValidJSONObject(String input) { + try { + new JSONObject(input); + return true; + } catch (JSONException e) { + return false; + } + } + public static TestCaseDTO isTestCaseValidForTheExecution(TestCaseDTO testCaseDTO) { String testCaseName = testCaseDTO.getTestCaseName(); + currentTestCaseName = testCaseName; int indexof = testCaseName.indexOf("_"); String modifiedTestCaseName = testCaseName.substring(indexof + 1); addTestCaseDetailsToMap(modifiedTestCaseName, testCaseDTO.getUniqueIdentifier()); + if (!testCasesInRunScope.isEmpty() + && testCasesInRunScope.contains(testCaseDTO.getUniqueIdentifier()) == false) { + throw new SkipException(GlobalConstants.NOT_IN_RUN_SCOPE_MESSAGE); + } String endpoint = testCaseDTO.getEndPoint(); String inputJson = testCaseDTO.getInput(); diff --git a/api-test/src/main/resources/config/healthCheckEndpoint.properties b/api-test/src/main/resources/config/healthCheckEndpoint.properties index f7a8576fe..48f7e63a3 100644 --- a/api-test/src/main/resources/config/healthCheckEndpoint.properties +++ b/api-test/src/main/resources/config/healthCheckEndpoint.properties @@ -18,7 +18,6 @@ auth_idrepo_resident_regproc=/v1/notifier/actuator/health auth_mobileid=/v1/otpmanager/actuator/health partner_auth_esignet_idrepo_resident_regproc=/v1/partnermanager/actuator/health partner_auth_esignet_regproc=/v1/policymanager/actuator/health -prereg=/preregistration/v1/captcha/actuator/health prereg=/v1/pridgenerator/actuator/health resident_regproc=/registrationprocessor/v1/packetreceiver/actuator/health regproc_masterdata=/registrationprocessor/v1/registrationstatus/actuator/health diff --git a/api-test/src/main/resources/config/mimoto.properties b/api-test/src/main/resources/config/mimoto.properties index 215b2b21f..6408828bc 100644 --- a/api-test/src/main/resources/config/mimoto.properties +++ b/api-test/src/main/resources/config/mimoto.properties @@ -64,9 +64,6 @@ mosip_crvs1_client_secret = # Enable or disable debugging mode (yes/no). enableDebug = no -# Whether to use pre-configured OTP (true/false). -usePreConfiguredOtp = false - # Mock Notification Channels (email/phone/email,phone). mockNotificationChannel = email,phone @@ -93,4 +90,6 @@ moduleNamePattern = # X-XSS-Protection: Controls the XSS (Cross-Site Scripting) filter in browsers. # Values: (yes/no) -xssProtectionCheck = no \ No newline at end of file +xssProtectionCheck = no + +testCasesToExecute= \ No newline at end of file diff --git a/api-test/src/main/resources/config/mispPolicy.json b/api-test/src/main/resources/config/mispPolicy.json new file mode 100644 index 000000000..a99d223fa --- /dev/null +++ b/api-test/src/main/resources/config/mispPolicy.json @@ -0,0 +1,7 @@ +{ + "trustBindedAuthVerificationToken": true, + "allowAuthRequestDelegation": true, + "allowKycRequestDelegation": true, + "allowKeyBindingDelegation": true, + "allowVciRequestDelegation": true +} \ No newline at end of file diff --git a/api-test/src/main/resources/config/testCaseInterDependency.json b/api-test/src/main/resources/config/testCaseInterDependency.json new file mode 100644 index 000000000..7b34b542d --- /dev/null +++ b/api-test/src/main/resources/config/testCaseInterDependency.json @@ -0,0 +1,638 @@ +{ + "TC_Mimoto_UnlockWalletAfterDelete_01": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01" + ], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_18": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_AuthorizationCodeForGoogleLogin_02" + ], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_19": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_AuthorizationCodeForGoogleLogin_02" + ], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_16": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01" + ], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_17": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_AuthorizationCodeForGoogleLogin_02" + ], + "TC_Mimoto_WalletBinding_18": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_14": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01" + ], + "TC_Mimoto_WalletBinding_19": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_15": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01" + ], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_12": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01" + ], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_13": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01" + ], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_10": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_AuthorizationCodeForGoogleLogin_02" + ], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_11": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_AuthorizationCodeForGoogleLogin_02" + ], + "TC_Mimoto_WalletBinding_10": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_WalletBinding_11": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_WalletBinding_12": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_WalletBinding_13": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_WalletBinding_14": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_WalletBinding_15": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_WalletBinding_16": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_WalletBinding_17": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_09": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_AuthorizationCodeForGoogleLogin_02" + ], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_07": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_AuthorizationCodeForGoogleLogin_02" + ], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_08": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_AuthorizationCodeForGoogleLogin_02" + ], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_05": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_AuthorizationCodeForGoogleLogin_02" + ], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_06": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_AuthorizationCodeForGoogleLogin_02" + ], + "TC_Mimoto_WalletBinding_07": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_03": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_AuthorizationCodeForGoogleLogin_02" + ], + "TC_Mimoto_WalletBinding_08": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_04": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_AuthorizationCodeForGoogleLogin_02" + ], + "TC_Mimoto_WalletBinding_09": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_01": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_AuthorizationCodeForGoogleLogin_01" + ], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_02": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_AuthorizationCodeForGoogleLogin_02" + ], + "TC_Mimoto_WalletBinding_01": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_WalletBinding_02": [ + "TC_Mimoto_AddIdentity_02", + "TC_Mimoto_GenerateVID_06" + ], + "TC_Mimoto_WalletBinding_03": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_WalletBinding_04": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_WalletBinding_05": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_AuthorizationCode_01": ["TC_Mimoto_OAuthDetailsRequest_01"], + "TC_Mimoto_WalletBinding_06": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_UnlockWallet_01": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01" + ], + "TC_Mimoto_UnlockWallet_02": ["TC_Mimoto_GoogleLoginToken_01"], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_38": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_AuthorizationCodeForGoogleLogin_02", + "TC_Mimoto_CreateWallet_02" + ], + "TC_Mimoto_UnlockWallet_03": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01" + ], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_39": [ + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_AuthorizationCodeForGoogleLogin_02" + ], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_36": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_AuthorizationCodeForGoogleLogin_02" + ], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_37": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01" + ], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_34": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_AuthorizationCodeForGoogleLogin_02" + ], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_35": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_AuthorizationCodeForGoogleLogin_02" + ], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_32": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_AuthorizationCodeForGoogleLogin_02" + ], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_33": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_AuthorizationCodeForGoogleLogin_02" + ], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_30": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_AuthorizationCodeForGoogleLogin_02" + ], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_31": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_AuthorizationCodeForGoogleLogin_02" + ], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_40": [ + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_AuthorizationCodeForGoogleLogin_02" + ], + "TC_Mimoto_UnlockWallet_04": ["TC_Mimoto_CreateWallet_01"], + "TC_Mimoto_UnlockWallet_06": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01" + ], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_29": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_AuthorizationCodeForGoogleLogin_02" + ], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_27": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_AuthorizationCodeForGoogleLogin_02" + ], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_28": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_AuthorizationCodeForGoogleLogin_02" + ], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_25": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_AuthorizationCodeForGoogleLogin_02" + ], + "TC_Mimoto_AuthenticateUserSunBirdC_01": ["TC_Mimoto_OAuthDetailsRequestSunBirdC_01"], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_26": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_AuthorizationCodeForGoogleLogin_02" + ], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_23": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_AuthorizationCodeForGoogleLogin_02" + ], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_24": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_AuthorizationCodeForGoogleLogin_02" + ], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_21": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_AuthorizationCodeForGoogleLogin_02" + ], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_22": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_AuthorizationCodeForGoogleLogin_02" + ], + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_20": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_AuthorizationCodeForGoogleLogin_02" + ], + "TC_Mimoto_GetPolicySunBirdR_01": ["TC_Mimoto_CreatePolicySunBirdR_01"], + "TC_Mimoto_CreateWallet_19": ["TC_Mimoto_GoogleLoginToken_01"], + "TC_Mimoto_CreateWallet_16": ["TC_Mimoto_GoogleLoginToken_01"], + "TC_Mimoto_CreateWallet_15": ["TC_Mimoto_GoogleLoginToken_01"], + "TC_Mimoto_CreateWallet_18": ["TC_Mimoto_GoogleLoginToken_01"], + "TC_Mimoto_CreateWallet_17": ["TC_Mimoto_GoogleLoginToken_01"], + "TC_Mimoto_CreateWallet_12": ["TC_Mimoto_GoogleLoginToken_01"], + "TC_Mimoto_CreateWallet_11": ["TC_Mimoto_GoogleLoginToken_01"], + "TC_Mimoto_CreateWallet_14": ["TC_Mimoto_GoogleLoginToken_01"], + "TC_Mimoto_CreateWallet_13": ["TC_Mimoto_GoogleLoginToken_01"], + "TC_Mimoto_CreateWallet_10": ["TC_Mimoto_GoogleLoginToken_01"], + "TC_Mimoto_BindingOtp_07": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_WalletBinding_54": [ + "TC_Mimoto_AddIdentity_02", + "TC_Mimoto_GenerateVID_06" + ], + "TC_Mimoto_BindingOtp_08": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_WalletBinding_55": [ + "TC_Mimoto_AddIdentity_02", + "TC_Mimoto_GenerateVID_06" + ], + "TC_Mimoto_WalletBinding_56": ["TC_Mimoto_GenerateVID_06"], + "TC_Mimoto_WalletBinding_57": ["TC_Mimoto_GenerateVID_06"], + "TC_Mimoto_WalletBinding_58": ["TC_Mimoto_GenerateVID_06"], + "TC_Mimoto_WalletBinding_59": ["TC_Mimoto_GenerateVID_06"], + "TC_Mimoto_BindingOtp_09": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_WalletBinding_50": [ + "TC_Mimoto_AddIdentity_02", + "TC_Mimoto_GenerateVID_06" + ], + "TC_Mimoto_WalletBinding_51": [ + "TC_Mimoto_AddIdentity_02", + "TC_Mimoto_GenerateVID_06" + ], + "TC_Mimoto_BindingOtp_01": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_WalletBinding_52": [ + "TC_Mimoto_AddIdentity_02", + "TC_Mimoto_GenerateVID_06" + ], + "TC_Mimoto_BindingOtp_02": ["TC_Mimoto_GenerateVID_06"], + "TC_Mimoto_WalletBinding_53": [ + "TC_Mimoto_AddIdentity_02", + "TC_Mimoto_GenerateVID_06" + ], + "TC_Mimoto_GenerateVID_01": ["TC_Mimoto_AddIdentity_01"], + "TC_Mimoto_GenerateVID_06": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_GenerateVID_04": ["TC_Mimoto_AddIdentity_01"], + "TC_Mimoto_CreateWallet_22": ["TC_Mimoto_GoogleLoginToken_01"], + "TC_Mimoto_CreateWallet_21": ["TC_Mimoto_GoogleLoginToken_01"], + "TC_Mimoto_GetUserProfile_01": ["TC_Mimoto_GoogleLoginToken_01"], + "TC_Mimoto_CreateWallet_20": ["TC_Mimoto_GoogleLoginToken_01"], + "TC_Mimoto_BindingOtp_18": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_WalletBinding_43": [ + "TC_Mimoto_AddIdentity_02", + "TC_Mimoto_GenerateVID_06" + ], + "TC_Mimoto_BindingOtp_19": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_WalletBinding_44": [ + "TC_Mimoto_AddIdentity_02", + "TC_Mimoto_GenerateVID_06" + ], + "TC_Mimoto_BindingOtp_16": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_WalletBinding_45": [ + "TC_Mimoto_AddIdentity_02", + "TC_Mimoto_GenerateVID_06" + ], + "TC_Mimoto_BindingOtp_17": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_WalletBinding_46": [ + "TC_Mimoto_AddIdentity_02", + "TC_Mimoto_GenerateVID_06" + ], + "TC_Mimoto_WalletBinding_47": [ + "TC_Mimoto_AddIdentity_02", + "TC_Mimoto_GenerateVID_06" + ], + "TC_Mimoto_WalletBinding_48": [ + "TC_Mimoto_AddIdentity_02", + "TC_Mimoto_GenerateVID_06" + ], + "TC_Mimoto_WalletBinding_49": [ + "TC_Mimoto_AddIdentity_02", + "TC_Mimoto_GenerateVID_06" + ], + "TC_Mimoto_DeleteWallet_01": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01" + ], + "TC_Mimoto_DeleteWallet_02": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01" + ], + "TC_Mimoto_BindingOtp_10": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_DeleteWallet_03": ["TC_Mimoto_GoogleLoginToken_01"], + "TC_Mimoto_BindingOtp_11": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_AuthorizationCodeForGoogleLogin_01": ["TC_Mimoto_OAuthDetailsRequestForGoogleLogin_01"], + "TC_Mimoto_DeleteWallet_04": ["TC_Mimoto_GoogleLoginToken_01"], + "TC_Mimoto_AuthorizationCodeForGoogleLogin_02": ["TC_Mimoto_OAuthDetailsRequestForGoogleLogin_02"], + "TC_Mimoto_DeleteWallet_05": ["TC_Mimoto_GoogleLoginToken_01"], + "TC_Mimoto_DeleteWallet_06": ["TC_Mimoto_CreateWallet_01"], + "TC_Mimoto_BindingOtp_14": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_DeleteWallet_07": ["TC_Mimoto_CreateWallet_01"], + "TC_Mimoto_WalletBinding_40": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_BindingOtp_12": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_WalletBinding_41": [ + "TC_Mimoto_AddIdentity_02", + "TC_Mimoto_GenerateVID_06" + ], + "TC_Mimoto_BindingOtp_13": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_WalletBinding_42": [ + "TC_Mimoto_AddIdentity_02", + "TC_Mimoto_GenerateVID_06" + ], + "TC_Mimoto_AuthLock_07": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_AuthenticateUserSunBirdCForGoogleLogin_01": ["TC_Mimoto_OAuthDetailsRequestSunBirdCForGoogleLogin_01"], + "TC_Mimoto_AuthenticateUserSunBirdCForGoogleLogin_02": ["TC_Mimoto_OAuthDetailsRequestSunBirdCForGoogleLogin_02"], + "TC_Mimoto_WalletBinding_32": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_WalletBinding_33": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_WalletBinding_34": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_WalletBinding_35": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_WalletBinding_36": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_WalletBinding_37": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_WalletBinding_38": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_WalletBinding_39": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_WalletBinding_30": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_WalletBinding_31": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_CreateWallet_09": ["TC_Mimoto_GoogleLoginToken_01"], + "TC_Mimoto_CreateWallet_08": ["TC_Mimoto_GoogleLoginToken_01"], + "TC_Mimoto_CreateWallet_07": ["TC_Mimoto_GoogleLoginToken_01"], + "TC_Mimoto_CreateWallet_06": ["TC_Mimoto_GoogleLoginToken_01"], + "TC_Mimoto_WalletBinding_29": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_CreateWallet_01": ["TC_Mimoto_GoogleLoginToken_01"], + "TC_Mimoto_CreateWallet_03": ["TC_Mimoto_GoogleLoginToken_01"], + "TC_Mimoto_CreateWallet_02": ["TC_Mimoto_GoogleLoginToken_01"], + "TC_Mimoto_GetWallets_01": ["TC_Mimoto_GoogleLoginToken_01"], + "TC_Mimoto_Logout_01": ["TC_Mimoto_GoogleLoginToken_01"], + "TC_Mimoto_WalletBinding_21": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_WalletBinding_22": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_WalletBinding_23": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_WalletBinding_24": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_WalletBinding_25": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_WalletBinding_26": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_WalletBinding_27": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_WalletBinding_28": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_WalletBinding_20": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_02": [ + "TC_Mimoto_AuthorizationCodeSunBirdC_02", + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01" + ], + "TC_Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_03": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_AuthorizationCodeSunBirdC_01", + "TC_Mimoto_CreateWallet_01" + ], + "TC_Mimoto_AuthenticateUser_01": [ + "TC_Mimoto_AddIdentity_03", + "TC_Mimoto_OAuthDetailsRequest_01" + ], + "TC_Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_01": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_AuthorizationCodeSunBirdC_01", + "TC_Mimoto_CreateWallet_01" + ], + "TC_Mimoto_GetUserProfileAfterLogout_01": ["TC_Mimoto_GoogleLoginToken_01"], + "TC_Mimoto_AuthenticateUserForGoogleLogin_01": [ + "TC_Mimoto_AddIdentity_03", + "TC_Mimoto_OAuthDetailsRequestForGoogleLogin_01" + ], + "TC_Mimoto_AuthenticateUserForGoogleLogin_02": [ + "TC_Mimoto_AddIdentity_03", + "TC_Mimoto_OAuthDetailsRequestForGoogleLogin_02" + ], + "TC_Mimoto_AuthorizationCodeSunBirdC_02": ["TC_Mimoto_OAuthDetailsRequestSunBirdCForGoogleLogin_02"], + "TC_Mimoto_AuthorizationCodeSunBirdC_01": [ + "TC_Mimoto_OAuthDetailsRequestSunBirdCForGoogleLogin_01", + "TC_Mimoto_OAuthDetailsRequestSunBirdC_01" + ], + "TC_Mimoto_DownloadIssuerCredential_02": ["TC_Mimoto_AuthorizationCode_01"], + "TC_Mimoto_BindingOtp_29": ["TC_Mimoto_GenerateVID_06"], + "TC_Mimoto_WalletBinding_76": [ + "TC_Mimoto_AddIdentity_02", + "TC_Mimoto_GenerateVID_06" + ], + "TC_Mimoto_DownloadIssuerCredential_01": ["TC_Mimoto_AuthorizationCode_01"], + "TC_Mimoto_WalletBinding_77": [ + "TC_Mimoto_AddIdentity_02", + "TC_Mimoto_GenerateVID_06" + ], + "TC_Mimoto_BindingOtp_27": ["TC_Mimoto_GenerateVID_06"], + "TC_Mimoto_WalletBinding_78": [ + "TC_Mimoto_AddIdentity_02", + "TC_Mimoto_GenerateVID_06" + ], + "TC_Mimoto_BindingOtp_28": ["TC_Mimoto_GenerateVID_06"], + "TC_Mimoto_DownloadIssuerCredential_06": ["TC_Mimoto_AuthorizationCodeSunBirdC_01"], + "TC_Mimoto_DownloadIssuerCredential_05": ["TC_Mimoto_AuthorizationCode_01"], + "TC_Mimoto_DownloadIssuerCredential_03": ["TC_Mimoto_AuthorizationCode_01"], + "TC_Mimoto_WalletBinding_70": [ + "TC_Mimoto_AddIdentity_02", + "TC_Mimoto_GenerateVID_06" + ], + "TC_Mimoto_WalletBinding_71": [ + "TC_Mimoto_AddIdentity_02", + "TC_Mimoto_GenerateVID_06" + ], + "TC_Mimoto_BindingOtp_25": ["TC_Mimoto_GenerateVID_06"], + "TC_Mimoto_WalletBinding_72": [ + "TC_Mimoto_AddIdentity_02", + "TC_Mimoto_GenerateVID_06" + ], + "TC_Mimoto_BindingOtp_26": ["TC_Mimoto_GenerateVID_06"], + "TC_Mimoto_WalletBinding_73": [ + "TC_Mimoto_AddIdentity_02", + "TC_Mimoto_GenerateVID_06" + ], + "TC_Mimoto_WalletBinding_74": [ + "TC_Mimoto_AddIdentity_02", + "TC_Mimoto_GenerateVID_06" + ], + "TC_Mimoto_BindingOtp_24": ["TC_Mimoto_GenerateVID_06"], + "TC_Mimoto_WalletBinding_75": [ + "TC_Mimoto_AddIdentity_02", + "TC_Mimoto_GenerateVID_06" + ], + "TC_Mimoto_WalletBinding_65": [ + "TC_Mimoto_AddIdentity_02", + "TC_Mimoto_GenerateVID_06" + ], + "TC_Mimoto_WalletBinding_66": [ + "TC_Mimoto_AddIdentity_02", + "TC_Mimoto_GenerateVID_06" + ], + "TC_Mimoto_WalletBinding_67": [ + "TC_Mimoto_AddIdentity_02", + "TC_Mimoto_GenerateVID_06" + ], + "TC_Mimoto_WalletBinding_68": [ + "TC_Mimoto_AddIdentity_02", + "TC_Mimoto_GenerateVID_06" + ], + "TC_Mimoto_WalletBinding_69": [ + "TC_Mimoto_AddIdentity_02", + "TC_Mimoto_GenerateVID_06" + ], + "TC_Mimoto_BindingOtp_32": ["TC_Mimoto_GenerateVID_06"], + "TC_Mimoto_BindingOtp_33": ["TC_Mimoto_GenerateVID_06"], + "TC_Mimoto_BindingOtp_30": ["TC_Mimoto_GenerateVID_06"], + "TC_Mimoto_BindingOtp_31": ["TC_Mimoto_GenerateVID_06"], + "TC_Mimoto_WalletBinding_60": ["TC_Mimoto_GenerateVID_06"], + "TC_Mimoto_BindingOtp_36": ["TC_Mimoto_GenerateVID_06"], + "TC_Mimoto_WalletBinding_61": [ + "TC_Mimoto_AddIdentity_02", + "TC_Mimoto_GenerateVID_06" + ], + "TC_Mimoto_WalletBinding_62": [ + "TC_Mimoto_AddIdentity_02", + "TC_Mimoto_GenerateVID_06" + ], + "TC_Mimoto_BindingOtp_34": ["TC_Mimoto_GenerateVID_06"], + "TC_Mimoto_WalletBinding_63": [ + "TC_Mimoto_AddIdentity_02", + "TC_Mimoto_GenerateVID_06" + ], + "TC_Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_04": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_AuthorizationCodeSunBirdC_01", + "TC_Mimoto_CreateWallet_01" + ], + "TC_Mimoto_BindingOtp_35": ["TC_Mimoto_GenerateVID_06"], + "TC_Mimoto_WalletBinding_64": [ + "TC_Mimoto_AddIdentity_02", + "TC_Mimoto_GenerateVID_06" + ], + "TC_Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_05": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_AuthorizationCodeSunBirdC_01", + "TC_Mimoto_CreateWallet_01" + ], + "TC_Mimoto_DeletePolicySunBirdR_01": ["TC_Mimoto_CreatePolicySunBirdR_01"], + "TC_Mimoto_DeleteCredentials_03": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01" + ], + "TC_Mimoto_DeleteCredentials_02": [ + "TC_Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_02", + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01" + ], + "TC_Mimoto_DeleteCredentials_01": [ + "TC_Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_02", + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01" + ], + "TC_Mimoto_ViewCredential_17": [ + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_01" + ], + "TC_Mimoto_FetchAllCredentials_01": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01" + ], + "TC_Mimoto_ViewCredential_16": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_01" + ], + "TC_Mimoto_DeleteCredentials_06": [ + "TC_Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_01", + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01" + ], + "TC_Mimoto_FetchAllCredentials_02": ["TC_Mimoto_GoogleLoginToken_01"], + "TC_Mimoto_ViewCredential_15": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_01" + ], + "TC_Mimoto_DeleteCredentials_05": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01" + ], + "TC_Mimoto_FetchAllCredentials_03": ["TC_Mimoto_GoogleLoginToken_01"], + "TC_Mimoto_ViewCredential_14": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_01" + ], + "TC_Mimoto_DeleteCredentials_04": [ + "TC_Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_01", + "TC_Mimoto_GoogleLoginToken_01" + ], + "TC_Mimoto_FetchAllCredentials_04": ["TC_Mimoto_GoogleLoginToken_01"], + "TC_Mimoto_FetchAllCredentials_05": ["TC_Mimoto_CreateWallet_01"], + "TC_Mimoto_FetchAllCredentials_06": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_02" + ], + "TC_Mimoto_FetchAllCredentials_07": ["TC_Mimoto_CreateWallet_01"], + "TC_Mimoto_DeleteCredentials_08": [ + "TC_Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_01", + "TC_Mimoto_CreateWallet_01" + ], + "TC_Mimoto_ViewCredential_18": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_01" + ], + "TC_Mimoto_ViewCredential_13": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_01" + ], + "TC_Mimoto_ViewCredential_12": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_01" + ], + "TC_Mimoto_ViewCredential_11": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_01" + ], + "TC_Mimoto_ViewCredential_10": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_01" + ], + "TC_Mimoto_ViewCredential_06": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_01" + ], + "TC_Mimoto_ViewCredential_05": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_01" + ], + "TC_Mimoto_ViewCredential_04": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_01" + ], + "TC_Mimoto_ViewCredential_03": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_01" + ], + "TC_Mimoto_ViewCredential_09": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01" + ], + "TC_Mimoto_ViewCredential_08": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01" + ], + "TC_Mimoto_ViewCredential_07": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01" + ], + "TC_Mimoto_ViewCredential_02": [ + "TC_Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_01", + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01" + ], + "TC_Mimoto_ViewCredential_01": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_01" + ] +} \ No newline at end of file From 72798a102b17d6c706b4df81a15ec3b52ee03219 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Thu, 31 Jul 2025 13:00:42 +0530 Subject: [PATCH 727/860] Injiweb 1642 sdjwt implementation for VC request and response parsing * injiweb-1642 change to call the sdjwt and ldpvc both Signed-off-by: Gurpreet41082 --- pom.xml | 7 +- .../mimoto/constant/CredentialFormat.java | 26 ++ .../CredentialSupportedDisplayResponse.java | 1 - .../dto/mimoto/VCCredentialRequest.java | 4 + .../dto/mimoto/VCCredentialResponse.java | 2 +- .../mimoto/VerifiableCredentialResponse.java | 19 + .../openid/presentation/ConstraintsDTO.java | 1 + .../service/CredentialFormatHandler.java | 34 ++ .../CredentialFormatHandlerFactory.java | 30 ++ .../CredentialPDFGeneratorService.java | 217 ++++----- .../service/CredentialRequestService.java | 3 +- .../mimoto/service/CredentialService.java | 47 +- .../impl/CredentialRequestServiceImpl.java | 42 +- .../service/impl/CredentialServiceImpl.java | 281 ++++++++++-- .../impl/CredentialVerifierServiceImpl.java | 6 +- .../service/impl/DataShareServiceImpl.java | 63 +-- .../impl/DcSdJwtCredentialFormatHandler.java | 15 + .../impl/LdpVcCredentialFormatHandler.java | 100 +++++ .../service/impl/PresentationServiceImpl.java | 97 ++-- .../impl/VcSdJwtCredentialFormatHandler.java | 194 ++++++++ .../impl/WalletCredentialServiceImpl.java | 22 +- .../mimoto/util/CredentialProcessor.java | 214 --------- .../java/io/mosip/mimoto/util/Utilities.java | 4 +- .../CredentialFormatHandlerFactoryTest.java | 201 +++++++++ .../CredentialPDFGeneratorServiceTest.java | 58 +-- .../service/CredentialRequestServiceTest.java | 43 +- .../mimoto/service/CredentialServiceTest.java | 26 +- .../CredentialVerifierServiceTest.java | 4 +- .../LdpVcCredentialFormatHandlerTest.java | 420 ++++++++++++++++++ .../service/PresentationServiceTest.java | 8 +- .../VcSdJwtCredentialFormatHandlerTest.java | 398 +++++++++++++++++ .../service/WalletCredentialServiceTest.java | 27 +- ...lIssuerWellknownResponseValidatorTest.java | 1 - .../io/mosip/mimoto/util/TestUtilities.java | 5 + 34 files changed, 2059 insertions(+), 561 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/constant/CredentialFormat.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/VerifiableCredentialResponse.java create mode 100644 src/main/java/io/mosip/mimoto/service/CredentialFormatHandler.java create mode 100644 src/main/java/io/mosip/mimoto/service/CredentialFormatHandlerFactory.java create mode 100644 src/main/java/io/mosip/mimoto/service/impl/DcSdJwtCredentialFormatHandler.java create mode 100644 src/main/java/io/mosip/mimoto/service/impl/LdpVcCredentialFormatHandler.java create mode 100644 src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java delete mode 100644 src/main/java/io/mosip/mimoto/util/CredentialProcessor.java create mode 100644 src/test/java/io/mosip/mimoto/service/CredentialFormatHandlerFactoryTest.java create mode 100644 src/test/java/io/mosip/mimoto/service/LdpVcCredentialFormatHandlerTest.java create mode 100644 src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java diff --git a/pom.xml b/pom.xml index b2fae21e7..28b90a6f9 100644 --- a/pom.xml +++ b/pom.xml @@ -144,7 +144,7 @@ io.mosip vcverifier-jar - 1.3.0-rc1 + 1.4.0-SNAPSHOT io.micrometer @@ -503,6 +503,11 @@ vertx-web 3.9.13 + + com.authlete + sd-jwt + 1.5 + diff --git a/src/main/java/io/mosip/mimoto/constant/CredentialFormat.java b/src/main/java/io/mosip/mimoto/constant/CredentialFormat.java new file mode 100644 index 000000000..5cbc9d58f --- /dev/null +++ b/src/main/java/io/mosip/mimoto/constant/CredentialFormat.java @@ -0,0 +1,26 @@ +package io.mosip.mimoto.constant; + +public enum CredentialFormat { + VC_SD_JWT("vc+sd-jwt"), + DC_SD_JWT("dc+sd-jwt"), + LDP_VC("ldp_vc"); + + private final String format; + + CredentialFormat(String format) { + this.format = format; + } + + public String getFormat() { + return format; + } + + public static CredentialFormat fromString(String format) { + for (CredentialFormat cf : CredentialFormat.values()) { + if (cf.format.equalsIgnoreCase(format)) { + return cf; + } + } + throw new IllegalArgumentException("Unknown credential format: " + format); + } +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialSupportedDisplayResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialSupportedDisplayResponse.java index 97a088532..6c3ea9a74 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialSupportedDisplayResponse.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialSupportedDisplayResponse.java @@ -36,7 +36,6 @@ public class CredentialSupportedDisplayResponse { @SerializedName("background_image") @Expose @Valid - @NotNull @Schema(description = "Background Image of the Supported Credential") BackgroundImageDTO backgroundImage; diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialRequest.java b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialRequest.java index d7d9dafaa..0d870ac66 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialRequest.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialRequest.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.dto.mimoto; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Builder; import lombok.Data; @@ -11,6 +12,7 @@ @Data @Builder +@JsonInclude(JsonInclude.Include.NON_NULL) public class VCCredentialRequest { @NotBlank @@ -24,4 +26,6 @@ public class VCCredentialRequest { @Valid @NotNull private VCCredentialDefinition credentialDefinition; + + private String vct; } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponse.java index 602345597..3eeaf8e2d 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponse.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponse.java @@ -20,5 +20,5 @@ public class VCCredentialResponse { @Valid @NotNull - private VCCredentialProperties credential; + private Object credential; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/VerifiableCredentialResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/VerifiableCredentialResponse.java new file mode 100644 index 000000000..b4ea57a86 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/VerifiableCredentialResponse.java @@ -0,0 +1,19 @@ +package io.mosip.mimoto.dto.mimoto; + +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class VerifiableCredentialResponse { + + @Valid + @NotNull + private Object credential; +} diff --git a/src/main/java/io/mosip/mimoto/dto/openid/presentation/ConstraintsDTO.java b/src/main/java/io/mosip/mimoto/dto/openid/presentation/ConstraintsDTO.java index aaccbde6c..a12c002d0 100644 --- a/src/main/java/io/mosip/mimoto/dto/openid/presentation/ConstraintsDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/openid/presentation/ConstraintsDTO.java @@ -11,4 +11,5 @@ @AllArgsConstructor public class ConstraintsDTO { FieldDTO[] fields; + private String limitDisclosure; } diff --git a/src/main/java/io/mosip/mimoto/service/CredentialFormatHandler.java b/src/main/java/io/mosip/mimoto/service/CredentialFormatHandler.java new file mode 100644 index 000000000..62c5eb363 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/CredentialFormatHandler.java @@ -0,0 +1,34 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.dto.mimoto.*; + +import java.util.LinkedHashMap; +import java.util.Map; + +public interface CredentialFormatHandler { + + /** + * Get the supported format for this processor + */ + String getSupportedFormat(); + + /** + * Build format-specific fields in the credential request object + */ + VCCredentialRequest buildCredentialRequest(VCCredentialRequestProof proof, CredentialsSupportedResponse credentialsSupportedResponse, String credentialConfigurationId); + + /** + * Extract credential subject properties from VC response + */ + Map extractCredentialClaims(VCCredentialResponse vcCredentialResponse); + + /** + * Load display properties from well-known configuration + */ + LinkedHashMap> loadDisplayPropertiesFromWellknown( + Map credentialProperties, + CredentialsSupportedResponse credentialsSupportedResponse, + String userLocale); + + +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/CredentialFormatHandlerFactory.java b/src/main/java/io/mosip/mimoto/service/CredentialFormatHandlerFactory.java new file mode 100644 index 000000000..ad8bc722c --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/CredentialFormatHandlerFactory.java @@ -0,0 +1,30 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.constant.CredentialFormat; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +@Component +public class CredentialFormatHandlerFactory { + + private final Map handlers; + + @Autowired + public CredentialFormatHandlerFactory(Map handlers) { + this.handlers = handlers; + } + + public CredentialFormatHandler getHandler(String format) { + CredentialFormatHandler processor = handlers.get(format); + if (processor == null) { + throw new IllegalArgumentException("Unsupported credential format: " + format); + } + + return processor; + } +} diff --git a/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java b/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java index c69d2d9a6..4955873aa 100644 --- a/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java +++ b/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java @@ -12,8 +12,8 @@ import com.itextpdf.html2pdf.resolver.font.DefaultFontProvider; import com.itextpdf.kernel.pdf.PdfWriter; import io.mosip.mimoto.dto.IssuerDTO; -import io.mosip.mimoto.dto.mimoto.CredentialDisplayResponseDto; import io.mosip.mimoto.dto.mimoto.CredentialIssuerDisplayResponse; +import io.mosip.mimoto.dto.mimoto.CredentialSupportedDisplayResponse; import io.mosip.mimoto.dto.mimoto.CredentialsSupportedResponse; import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; import io.mosip.mimoto.dto.openid.presentation.PresentationDefinitionDTO; @@ -25,7 +25,6 @@ import lombok.extern.slf4j.Slf4j; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; -import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -38,17 +37,28 @@ import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.*; -import java.util.stream.Collectors; @Slf4j @Service public class CredentialPDFGeneratorService { @Autowired - ObjectMapper objectMapper; + private ObjectMapper objectMapper; + + @Autowired + private PresentationServiceImpl presentationService; + + @Autowired + private Utilities utilities; + + @Autowired + private PixelPass pixelPass; + + @Autowired + private CredentialFormatHandlerFactory credentialFormatHandlerFactory; @Value("${mosip.inji.ovp.qrdata.pattern}") - String ovpQRDataPattern; + private String ovpQRDataPattern; @Value("${mosip.inji.qr.code.height:500}") Integer qrCodeHeight; @@ -56,110 +66,64 @@ public class CredentialPDFGeneratorService { @Value("${mosip.inji.qr.code.width:500}") Integer qrCodeWidth; - @Value("${mosip.inji.qr.data.size.limit:2000}") + @Value("${mosip.inji.qr.data.size.limit:4096}") Integer allowedQRDataSizeLimit; - @Autowired - PresentationServiceImpl presentationService; - - @Autowired - private Utilities utilities; + public ByteArrayInputStream generatePdfForVerifiableCredential(String credentialConfigurationId, VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String dataShareUrl, String credentialValidity, String locale) throws Exception { - @Autowired - private PixelPass pixelPass; + // Get the appropriate processor based on format + CredentialFormatHandler processor = credentialFormatHandlerFactory.getHandler(vcCredentialResponse.getFormat()); + // Extract credential properties using the specific processor + Map credentialProperties = processor.extractCredentialClaims(vcCredentialResponse); - public ByteArrayInputStream generatePdfForVerifiableCredentials(String credentialType, VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String dataShareUrl, String credentialValidity, String locale) throws Exception { - LinkedHashMap> displayProperties = loadDisplayPropertiesFromWellknown(vcCredentialResponse, credentialsSupportedResponse, locale); - Map data = getPdfResourceFromVcProperties(displayProperties, credentialsSupportedResponse, vcCredentialResponse, issuerDTO, dataShareUrl, credentialValidity); - return renderVCInCredentialTemplate(data, issuerDTO.getIssuer_id(), credentialType); - } + // Load display properties using the specific processor + LinkedHashMap> displayProperties = + processor.loadDisplayPropertiesFromWellknown(credentialProperties, credentialsSupportedResponse, locale); - @NotNull - private static LinkedHashMap> loadDisplayPropertiesFromWellknown(VCCredentialResponse vcCredentialResponse, CredentialsSupportedResponse credentialsSupportedResponse, String userLocale) { - LinkedHashMap> displayProperties = new LinkedHashMap<>(); - Map credentialProperties = vcCredentialResponse.getCredential().getCredentialSubject(); - LinkedHashMap vcPropertiesFromWellKnown = new LinkedHashMap<>(); - Map credentialSubject = credentialsSupportedResponse.getCredentialDefinition().getCredentialSubject(); - String locale = LocaleUtils.resolveLocaleWithFallback(credentialSubject, userLocale); - if (locale != null) { - credentialSubject.keySet().forEach(VCProperty -> { - Optional filteredResponse = credentialSubject.get(VCProperty) - .getDisplay().stream() - .filter(obj -> LocaleUtils.matchesLocale(obj.getLocale(), locale)) - .findFirst(); - - if (filteredResponse.isPresent()) { - CredentialIssuerDisplayResponse filteredValue = filteredResponse.get(); - vcPropertiesFromWellKnown.put(VCProperty, filteredValue); - } - }); - } - - List orderProperty = credentialsSupportedResponse.getOrder(); + Map data = getPdfResourceFromVcProperties(displayProperties, credentialsSupportedResponse, + vcCredentialResponse, issuerDTO, dataShareUrl, credentialValidity); - List fieldProperties = orderProperty == null ? new ArrayList<>(vcPropertiesFromWellKnown.keySet()) : orderProperty; - fieldProperties.forEach(vcProperty -> { - if (vcPropertiesFromWellKnown.get(vcProperty) != null && credentialProperties.get(vcProperty) != null) { - displayProperties.put(vcProperty, Map.of(vcPropertiesFromWellKnown.get(vcProperty), credentialProperties.get(vcProperty))); - } - }); - return displayProperties; + return renderVCInCredentialTemplate(data, issuerDTO.getIssuer_id(), credentialConfigurationId); } - private Map getPdfResourceFromVcProperties(LinkedHashMap> displayProperties, CredentialsSupportedResponse credentialsSupportedResponse, VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, String dataShareUrl, String credentialValidity) throws IOException, WriterException { + private Map getPdfResourceFromVcProperties( + LinkedHashMap> displayProperties, + CredentialsSupportedResponse credentialsSupportedResponse, + VCCredentialResponse vcCredentialResponse, + IssuerDTO issuerDTO, + String dataShareUrl, + String credentialValidity) throws IOException, WriterException { + Map data = new HashMap<>(); LinkedHashMap rowProperties = new LinkedHashMap<>(); - String backgroundColor = credentialsSupportedResponse.getDisplay().getFirst().getBackgroundColor(); - String backgroundImage = credentialsSupportedResponse.getDisplay().getFirst().getBackgroundImage().getUri(); - String textColor = credentialsSupportedResponse.getDisplay().getFirst().getTextColor(); - String credentialSupportedType = credentialsSupportedResponse.getDisplay().getFirst().getName(); - String face = vcCredentialResponse.getCredential().getCredentialSubject().get("face") != null ? (String) vcCredentialResponse.getCredential().getCredentialSubject().get("face") : null; - - displayProperties.entrySet().stream() - .forEachOrdered(entry -> { - String originalKey = entry.getKey(); - Map properties = entry.getValue(); - - // Process the inner map - ((Map) properties).entrySet().stream() - .forEachOrdered(innerEntry -> { - // loadDisplayPropertiesFromWellknown method returns both name and locale field values of the matching display obj in the response - CredentialIssuerDisplayResponse matchingWellknownDisplayObj = innerEntry.getKey(); - String nameFromDisplayObj = matchingWellknownDisplayObj.getName(); - String localeFromDisplayObj = matchingWellknownDisplayObj.getLocale(); - Object propertyValFromDownloadedVcResponse = innerEntry.getValue(); - String value = ""; - - if (propertyValFromDownloadedVcResponse instanceof Map) { - // If the value is a Map, handle it as a Map - value = handleMap(propertyValFromDownloadedVcResponse); - } else if (propertyValFromDownloadedVcResponse instanceof List) { - // If the value is a List, handle it as a List - value = handleList(propertyValFromDownloadedVcResponse, localeFromDisplayObj); - } else { - // Otherwise, just convert to string - value = propertyValFromDownloadedVcResponse.toString(); - } - - // Put the result into the rowProperties map - rowProperties.put(originalKey, Map.of(nameFromDisplayObj, value)); - }); - - }); - - String qrCodeImage; + + CredentialSupportedDisplayResponse firstDisplay = Optional.ofNullable(credentialsSupportedResponse.getDisplay()) + .filter(list -> !list.isEmpty()) + .map(List::getFirst) + .orElse(null); + + String backgroundColor = firstDisplay != null ? firstDisplay.getBackgroundColor() : null; + String backgroundImage = firstDisplay != null && firstDisplay.getBackgroundImage() != null + ? firstDisplay.getBackgroundImage().getUri() + : null; + String textColor = firstDisplay != null ? firstDisplay.getTextColor() : null; + String credentialSupportedType = firstDisplay != null ? firstDisplay.getName() : null; + + String face = extractFace(vcCredentialResponse); + + displayProperties.forEach((key, valueMap) -> valueMap.forEach((display, val) -> { + String displayName = display.getName(); + String locale = display.getLocale(); + String strVal = formatValue(val, locale); + rowProperties.put(key, Map.of(displayName, strVal)); + })); + + String qrCodeImage = ""; if (QRCodeType.OnlineSharing.equals(issuerDTO.getQr_code_type())) { - // Login flow - if (dataShareUrl.isEmpty()) { - qrCodeImage = constructQRCodeWithVCData(vcCredentialResponse); - } else { - qrCodeImage = constructQRCodeWithAuthorizeRequest(vcCredentialResponse, dataShareUrl); - } + qrCodeImage = constructQRCodeWithAuthorizeRequest(vcCredentialResponse, dataShareUrl); } else if (QRCodeType.EmbeddedVC.equals(issuerDTO.getQr_code_type())) { qrCodeImage = constructQRCodeWithVCData(vcCredentialResponse); - } else { - qrCodeImage = ""; } data.put("qrCodeImage", qrCodeImage); @@ -174,20 +138,45 @@ private Map getPdfResourceFromVcProperties(LinkedHashMap data, String issuerId, String credentialType) { - String credentialTemplate = utilities.getCredentialSupportedTemplateString(issuerId, credentialType); + private String extractFace(VCCredentialResponse vcCredentialResponse) { + // Use the appropriate credentialFormatHandler to extract credential properties + CredentialFormatHandler credentialFormatHandler = credentialFormatHandlerFactory.getHandler(vcCredentialResponse.getFormat()); + Map credentialSubject = credentialFormatHandler.extractCredentialClaims(vcCredentialResponse); + Object face = credentialSubject.get("face"); + return face != null ? face.toString() : null; + } + + private String formatValue(Object val, String locale) { + if (val instanceof Map) { + return Optional.ofNullable(((Map) val).get("value")).map(Object::toString).orElse(""); + } else if (val instanceof List) { + List list = (List) val; + if (list.isEmpty()) return ""; + if (list.getFirst() instanceof String) { + return String.join(", ", (List) list); + } else if (list.getFirst() instanceof Map) { + return list.stream() + .map(item -> (Map) item) + .filter(m -> LocaleUtils.matchesLocale(m.get("language").toString(), locale)) + .map(m -> m.get("value").toString()) + .findFirst() + .orElse(""); + } + } + return val.toString(); + } + + private ByteArrayInputStream renderVCInCredentialTemplate(Map data, String issuerId, String credentialConfigurationId) { + String credentialTemplate = utilities.getCredentialSupportedTemplateString(issuerId, credentialConfigurationId); Properties props = new Properties(); props.setProperty("resource.loader", "class"); props.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); Velocity.init(props); VelocityContext velocityContext = new VelocityContext(data); - // Merge the context with the template StringWriter writer = new StringWriter(); Velocity.evaluate(velocityContext, writer, "Credential Template", credentialTemplate); - // Get the merged HTML string String mergedHtml = writer.toString(); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); @@ -199,31 +188,6 @@ private ByteArrayInputStream renderVCInCredentialTemplate(Map da return new ByteArrayInputStream(outputStream.toByteArray()); } - private String handleList(Object list, String locale) { - List castedList = (List) list; - String response = ""; - if (castedList.isEmpty()) return ""; - if (castedList.getFirst() instanceof String) { - response = castedList.stream().map(String.class::cast).collect(Collectors.joining(", ")); - } else if (castedList.getFirst() instanceof Map) { - response = ((List>) castedList).stream() - .filter(obj -> LocaleUtils.matchesLocale(obj.get("language").toString(), locale)) - .map(obj -> obj.get("value").toString()) - .findFirst() - .orElse(""); - } - return response; - } - - private String handleMap(Object map) { - if (map instanceof Map) { - return Optional.ofNullable(((Map) map).get("value")) - .map(Object::toString) - .orElse(""); - } - return ""; - } - private String constructQRCodeWithVCData(VCCredentialResponse vcCredentialResponse) throws JsonProcessingException, WriterException { String qrData = pixelPass.generateQRData(objectMapper.writeValueAsString(vcCredentialResponse.getCredential()), ""); if (allowedQRDataSizeLimit > qrData.length()) { @@ -245,9 +209,6 @@ private String constructQRCode(String qrData) throws WriterException { BufferedImage qrImage = MatrixToImageWriter.toBufferedImage(bitMatrix); return Utilities.encodeToString(qrImage, "png"); } - - - } diff --git a/src/main/java/io/mosip/mimoto/service/CredentialRequestService.java b/src/main/java/io/mosip/mimoto/service/CredentialRequestService.java index e243644c9..e8c202108 100644 --- a/src/main/java/io/mosip/mimoto/service/CredentialRequestService.java +++ b/src/main/java/io/mosip/mimoto/service/CredentialRequestService.java @@ -2,14 +2,13 @@ import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; -import io.mosip.mimoto.dto.mimoto.CredentialsSupportedResponse; import io.mosip.mimoto.dto.mimoto.VCCredentialRequest; public interface CredentialRequestService { VCCredentialRequest buildRequest( IssuerDTO issuerDTO, + String credentialConfigurationId, CredentialIssuerWellKnownResponse wellKnownResponse, - CredentialsSupportedResponse credentialsSupportedResponse, String cNonce, String walletId, String base64EncodedWalletKey, diff --git a/src/main/java/io/mosip/mimoto/service/CredentialService.java b/src/main/java/io/mosip/mimoto/service/CredentialService.java index 3c956e0b4..ec1635012 100644 --- a/src/main/java/io/mosip/mimoto/service/CredentialService.java +++ b/src/main/java/io/mosip/mimoto/service/CredentialService.java @@ -1,13 +1,56 @@ package io.mosip.mimoto.service; + import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.VCCredentialRequest; import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; -import io.mosip.mimoto.exception.InvalidCredentialResourceException; +import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; +import io.mosip.mimoto.exception.*; import java.io.ByteArrayInputStream; public interface CredentialService { + + /** + * Downloads credential as PDF. + * + * @param issuerId The issuer ID + * @param credentialType The credential type + * @param response The token response + * @param credentialValidity The credential validity + * @param locale The locale + * @return ByteArrayInputStream containing the PDF + * @throws Exception If any error occurs during processing + */ ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String credentialType, TokenResponseDTO response, String credentialValidity, String locale) throws Exception; + + /** + * Downloads credential from the issuer endpoint. + * + * @param credentialEndpoint The credential endpoint + * @param vcCredentialRequest The credential request + * @param accessToken The access token + * @return VCCredentialResponse containing the credential + * @throws InvalidCredentialResourceException If the credential resource is invalid + */ VCCredentialResponse downloadCredential(String credentialEndpoint, VCCredentialRequest vcCredentialRequest, String accessToken) throws InvalidCredentialResourceException; -} + /** + * Downloads credential and stores it in the database. + * + * @param tokenResponse The token response containing the access token + * @param credentialConfigurationId The type of the credential + * @param walletId The ID of the wallet + * @param base64Key The Base64-encoded wallet key + * @param issuerId The ID of the issuer + * @param locale The locale for the response + * @return The stored VerifiableCredential response + * @throws InvalidRequestException If input parameters are invalid + * @throws CredentialProcessingException If processing fails + * @throws ExternalServiceUnavailableException If an external service is unavailable + * @throws VCVerificationException If credential verification fails + */ + VerifiableCredentialResponseDTO downloadCredentialAndStoreInDB( + TokenResponseDTO tokenResponse, String credentialConfigurationId, String walletId, + String base64Key, String issuerId, String locale) + throws InvalidRequestException, CredentialProcessingException, ExternalServiceUnavailableException, VCVerificationException; +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java index 3e4a8656a..f043942eb 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java @@ -1,10 +1,12 @@ package io.mosip.mimoto.service.impl; -import io.mosip.mimoto.model.ProofSigningKey; +import io.mosip.mimoto.constant.SigningAlgorithm; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.mimoto.*; -import io.mosip.mimoto.constant.SigningAlgorithm; +import io.mosip.mimoto.model.ProofSigningKey; import io.mosip.mimoto.repository.ProofSigningKeyRepository; +import io.mosip.mimoto.service.CredentialFormatHandler; +import io.mosip.mimoto.service.CredentialFormatHandlerFactory; import io.mosip.mimoto.service.CredentialRequestService; import io.mosip.mimoto.util.EncryptionDecryptionUtil; import io.mosip.mimoto.util.JwtGeneratorUtil; @@ -40,14 +42,18 @@ public Set getSigningAlgorithmsPriorityOrder() { } + @Autowired + private CredentialFormatHandlerFactory credentialFormatHandlerFactory; + @Override public VCCredentialRequest buildRequest(IssuerDTO issuerDTO, + String credentialConfigurationId, CredentialIssuerWellKnownResponse wellKnownResponse, - CredentialsSupportedResponse credentialsSupportedResponse, String cNonce, String walletId, String base64EncodedWalletKey, boolean isLoginFlow) throws Exception { + CredentialsSupportedResponse credentialsSupportedResponse = wellKnownResponse.getCredentialConfigurationsSupported().get(credentialConfigurationId); SigningAlgorithm signingAlgorithm = resolveAlgorithm(credentialsSupportedResponse); @@ -60,22 +66,20 @@ public VCCredentialRequest buildRequest(IssuerDTO issuerDTO, jwt = JwtGeneratorUtil.generateJwt(signingAlgorithm, wellKnownResponse.getCredentialIssuer(), issuerDTO.getClient_id(), cNonce, keyPair); } - List credentialContext = credentialsSupportedResponse.getCredentialDefinition().getContext(); - if (credentialContext == null || credentialContext.isEmpty()) { - credentialContext = List.of("https://www.w3.org/2018/credentials/v1"); - } - - return VCCredentialRequest.builder() - .format(credentialsSupportedResponse.getFormat()) - .proof(VCCredentialRequestProof.builder() - .proofType(credentialsSupportedResponse.getProofTypesSupported().keySet().stream().findFirst().get()) - .jwt(jwt) - .build()) - .credentialDefinition(VCCredentialDefinition.builder() - .type(credentialsSupportedResponse.getCredentialDefinition().getType()) - .context(credentialContext) - .build()) - .build(); + String format = credentialsSupportedResponse.getFormat(); + return credentialsSupportedResponse.getProofTypesSupported() + .keySet() + .stream() + .findFirst() + .map(proofType -> { + VCCredentialRequestProof proof = VCCredentialRequestProof.builder() + .proofType(proofType) + .jwt(jwt) + .build(); + CredentialFormatHandler handler = credentialFormatHandlerFactory.getHandler(format); + return handler.buildCredentialRequest(proof, credentialsSupportedResponse, credentialConfigurationId); + }) + .orElseThrow(() -> new IllegalArgumentException("No proof type available")); } private SigningAlgorithm resolveAlgorithm(CredentialsSupportedResponse credentialsSupportedResponse) { diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java index a7a348313..506d0ca42 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java @@ -1,55 +1,73 @@ package io.mosip.mimoto.service.impl; +import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.*; -import io.mosip.mimoto.exception.InvalidCredentialResourceException; -import io.mosip.mimoto.exception.VCVerificationException; +import io.mosip.mimoto.exception.*; +import io.mosip.mimoto.model.CredentialMetadata; import io.mosip.mimoto.model.QRCodeType; +import io.mosip.mimoto.model.VerifiableCredential; +import io.mosip.mimoto.repository.WalletCredentialsRepository; +import io.mosip.mimoto.service.CredentialPDFGeneratorService; import io.mosip.mimoto.service.CredentialRequestService; import io.mosip.mimoto.service.CredentialService; import io.mosip.mimoto.service.CredentialVerifierService; import io.mosip.mimoto.service.IssuersService; -import io.mosip.mimoto.service.CredentialPDFGeneratorService; +import io.mosip.mimoto.util.EncryptionDecryptionUtil; import io.mosip.mimoto.util.RestApiClient; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.stereotype.Service; import java.io.ByteArrayInputStream; +import java.util.UUID; -import static io.mosip.mimoto.exception.ErrorConstants.SIGNATURE_VERIFICATION_EXCEPTION; +import static io.mosip.mimoto.exception.ErrorConstants.*; @Slf4j @Service public class CredentialServiceImpl implements CredentialService { - @Autowired - IssuersService issuersService; - - @Autowired - DataShareServiceImpl dataShareService; - - @Autowired - ObjectMapper objectMapper; - - @Autowired - RestApiClient restApiClient; - - @Autowired - private CredentialPDFGeneratorService credentialPDFGeneratorService; + private final ObjectMapper objectMapper; + private final EncryptionDecryptionUtil encryptionDecryptionUtil; + private final WalletCredentialsRepository walletCredentialsRepository; + private final IssuersService issuersService; + private final CredentialVerifierService credentialVerifierService; + private final CredentialRequestService credentialRequestService; + private final CredentialPDFGeneratorService credentialPDFGeneratorService; + private final RestApiClient restApiClient; + private final DataShareServiceImpl dataShareService; @Autowired - private CredentialVerifierService credentialVerifierService; + public CredentialServiceImpl( + ObjectMapper objectMapper, + EncryptionDecryptionUtil encryptionDecryptionUtil, + WalletCredentialsRepository walletCredentialsRepository, + IssuersService issuersService, + CredentialVerifierService credentialVerifierService, + CredentialRequestService credentialRequestService, + CredentialPDFGeneratorService credentialPDFGeneratorService, + RestApiClient restApiClient, + DataShareServiceImpl dataShareService) { - @Autowired - private CredentialRequestService credentialRequestService; + this.objectMapper = objectMapper; + this.encryptionDecryptionUtil = encryptionDecryptionUtil; + this.walletCredentialsRepository = walletCredentialsRepository; + this.issuersService = issuersService; + this.credentialVerifierService = credentialVerifierService; + this.credentialRequestService = credentialRequestService; + this.credentialPDFGeneratorService = credentialPDFGeneratorService; + this.restApiClient = restApiClient; + this.dataShareService = dataShareService; + } @Override - public ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String credentialType, TokenResponseDTO response, String credentialValidity, String locale) throws Exception { + public ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String credentialConfigurationId, TokenResponseDTO response, String credentialValidity, String locale) throws Exception { IssuerDTO issuerDTO = issuersService.getIssuerDetails(issuerId); CredentialIssuerConfiguration credentialIssuerConfiguration = issuersService.getIssuerConfiguration(issuerId); CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = new CredentialIssuerWellKnownResponse( @@ -57,27 +75,220 @@ public ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String cred credentialIssuerConfiguration.getAuthorizationServers(), credentialIssuerConfiguration.getCredentialEndPoint(), credentialIssuerConfiguration.getCredentialConfigurationsSupported()); - CredentialsSupportedResponse credentialsSupportedResponse = credentialIssuerWellKnownResponse.getCredentialConfigurationsSupported().get(credentialType); - VCCredentialRequest vcCredentialRequest = credentialRequestService.buildRequest(issuerDTO, credentialIssuerWellKnownResponse, credentialsSupportedResponse, response.getC_nonce(), null, null, false); + CredentialsSupportedResponse credentialsSupportedResponse = credentialIssuerWellKnownResponse.getCredentialConfigurationsSupported().get(credentialConfigurationId); + VCCredentialRequest vcCredentialRequest = credentialRequestService.buildRequest(issuerDTO, credentialConfigurationId, credentialIssuerWellKnownResponse, response.getC_nonce(), null, null, false); + VCCredentialResponse vcCredentialResponse = downloadCredential(credentialIssuerWellKnownResponse.getCredentialEndPoint(), vcCredentialRequest, response.getAccess_token()); - boolean verificationStatus = issuerId.toLowerCase().contains("mock") || credentialVerifierService.verify(vcCredentialResponse); + + boolean verificationStatus = verifyCredential(vcCredentialResponse, issuerId, credentialConfigurationId); if (verificationStatus) { String dataShareUrl = QRCodeType.OnlineSharing.equals(issuerDTO.getQr_code_type()) ? dataShareService.storeDataInDataShare(objectMapper.writeValueAsString(vcCredentialResponse), credentialValidity) : ""; - return credentialPDFGeneratorService.generatePdfForVerifiableCredentials(credentialType, vcCredentialResponse, issuerDTO, credentialsSupportedResponse, dataShareUrl, credentialValidity, locale); + return credentialPDFGeneratorService.generatePdfForVerifiableCredential(credentialConfigurationId, vcCredentialResponse, issuerDTO, credentialsSupportedResponse, dataShareUrl, credentialValidity, locale); + } + throw new VCVerificationException(SIGNATURE_VERIFICATION_EXCEPTION.getErrorCode(), + SIGNATURE_VERIFICATION_EXCEPTION.getErrorMessage()); } - throw new VCVerificationException(SIGNATURE_VERIFICATION_EXCEPTION.getErrorCode(), - SIGNATURE_VERIFICATION_EXCEPTION.getErrorMessage()); - } @Override public VCCredentialResponse downloadCredential(String credentialEndpoint, VCCredentialRequest vcCredentialRequest, String accessToken) throws InvalidCredentialResourceException { - VCCredentialResponse vcCredentialResponse = restApiClient.postApi(credentialEndpoint, MediaType.APPLICATION_JSON, - vcCredentialRequest, VCCredentialResponse.class, accessToken); - log.debug("VC Credential Response is -> " + vcCredentialResponse); - if (vcCredentialResponse == null) + VerifiableCredentialResponse response = restApiClient.postApi(credentialEndpoint, MediaType.APPLICATION_JSON, + vcCredentialRequest, VerifiableCredentialResponse.class, accessToken); + if (response == null) throw new InvalidCredentialResourceException("VC Credential Issue API not accessible"); - return vcCredentialResponse; + log.debug("VC Credential Response is {} " , response); + + return new VCCredentialResponse(vcCredentialRequest.getFormat(), response.getCredential()); } + /** + * Download credential and stores a credential using the provided token and parameters. + * + * @param tokenResponse The token response containing the access token. + * @param credentialConfigurationId The type of the credential. + * @param walletId The ID of the wallet. + * @param base64Key The Base64-encoded wallet key. + * @param issuerId The ID of the issuer. + * @param locale The locale for the response. + * @return The stored VerifiableCredential response. + * @throws InvalidRequestException If input parameters are invalid. + * @throws CredentialProcessingException If processing fails. + * @throws ExternalServiceUnavailableException If an external service is unavailable. + * @throws VCVerificationException If credential verification fails. + */ + public VerifiableCredentialResponseDTO downloadCredentialAndStoreInDB( + TokenResponseDTO tokenResponse, String credentialConfigurationId, String walletId, + String base64Key, String issuerId, String locale) + throws InvalidRequestException, CredentialProcessingException, ExternalServiceUnavailableException, VCVerificationException { + + // Validate inputs + validateInputs(tokenResponse, credentialConfigurationId, walletId, base64Key, issuerId); + + // Fetch issuer configuration + IssuerConfig issuerConfig = fetchIssuerConfig(issuerId, credentialConfigurationId); + + // Generate credential request + VCCredentialRequest vcCredentialRequest = buildCredentialRequest(issuerConfig, credentialConfigurationId, tokenResponse, walletId, base64Key); + + // Download credential + VCCredentialResponse vcCredentialResponse = downloadCredentialFromIssuer(issuerConfig, vcCredentialRequest, tokenResponse, issuerId, credentialConfigurationId); + + // Verify credential + boolean verificationStatus = verifyCredential(vcCredentialResponse, issuerId, credentialConfigurationId); + if (!verificationStatus) { + log.error("Signature verification failed for issuerId: {}, credentialConfigurationId: {}", issuerId, credentialConfigurationId); + throw new VCVerificationException( + SIGNATURE_VERIFICATION_EXCEPTION.getErrorCode(), + SIGNATURE_VERIFICATION_EXCEPTION.getErrorMessage()); + } + + // Serialize, encrypt and store credential + String encryptedCredentialData = processAndEncryptCredential(vcCredentialResponse, base64Key, issuerId, credentialConfigurationId); + VerifiableCredential savedCredential = saveCredential(walletId, encryptedCredentialData, issuerId, credentialConfigurationId); + + return VerifiableCredentialResponseDTO.fromIssuerConfig(issuerConfig, locale, savedCredential.getId()); + } -} + /** + * Validates input parameters for credential download. + */ + private void validateInputs(TokenResponseDTO tokenResponse, String credentialConfigurationId, + String walletId, String base64Key, String issuerId) throws InvalidRequestException { + if (tokenResponse == null || StringUtils.isBlank(tokenResponse.getAccess_token())) { + log.error("Invalid token response: null or missing access token"); + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Token response or access token cannot be null"); + } + if (StringUtils.isBlank(credentialConfigurationId)) { + log.error("Invalid credential type: null or blank"); + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Credential configuration id cannot be null or blank"); + } + if (StringUtils.isBlank(walletId)) { + log.error("Invalid wallet ID: null or blank"); + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Wallet ID cannot be null or blank"); + } + if (StringUtils.isBlank(base64Key)) { + log.error("Invalid wallet key: null or blank"); + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Wallet key cannot be null or blank"); + } + if (StringUtils.isBlank(issuerId)) { + log.error("Invalid issuer ID: null or blank"); + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Issuer ID cannot be null or blank"); + } + } + + /** + * Fetches issuer configuration. + */ + private IssuerConfig fetchIssuerConfig(String issuerId, String credentialConfigurationId) throws CredentialProcessingException { + try { + return issuersService.getIssuerConfig(issuerId, credentialConfigurationId); + } catch (Exception e) { + log.error("Failed to fetch issuer config for issuerId: {}", issuerId, e); + throw new CredentialProcessingException( + CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), + "Unable to fetch issuer configuration", e); + } + } + + /** + * Builds credential request. + */ + private VCCredentialRequest buildCredentialRequest(IssuerConfig issuerConfig, String credentialConfigurationId, TokenResponseDTO tokenResponse, + String walletId, String base64Key) throws CredentialProcessingException { + try { + return credentialRequestService.buildRequest( + issuerConfig.getIssuerDTO(), credentialConfigurationId, issuerConfig.getWellKnownResponse(), + tokenResponse.getC_nonce(), + walletId, base64Key, true); + } catch (Exception e) { + log.error("Failed to generate VC credential request for issuerId: {}", issuerConfig.getIssuerDTO().getIssuer_id(), e); + throw new CredentialProcessingException( + CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), + "Unable to generate credential request", e); + } + } + + /** + * Downloads credential from issuer. + */ + private VCCredentialResponse downloadCredentialFromIssuer(IssuerConfig issuerConfig, VCCredentialRequest vcCredentialRequest, + TokenResponseDTO tokenResponse, String issuerId, String credentialConfigurationId) + throws ExternalServiceUnavailableException { + try { + return downloadCredential( + issuerConfig.getWellKnownResponse().getCredentialEndPoint(), + vcCredentialRequest, tokenResponse.getAccess_token()); + } catch (Exception e) { + log.error("Failed to download credential for issuerId: {}, credentialConfigurationId: {}", issuerId, credentialConfigurationId, e); + throw new ExternalServiceUnavailableException( + SERVER_UNAVAILABLE.getErrorCode(), + "Unable to download credential from issuer", e); + } + } + + /** + * Verifies credential signature. + */ + private boolean verifyCredential(VCCredentialResponse vcCredentialResponse, String issuerId, String credentialConfigurationId) + throws VCVerificationException { + try { + return credentialVerifierService.verify(vcCredentialResponse); + } catch (VCVerificationException | JsonProcessingException e) { + log.error("Credential verification failed for issuerId: {}, credentialConfigurationId: {}", issuerId, credentialConfigurationId, e); + throw new VCVerificationException( + SIGNATURE_VERIFICATION_EXCEPTION.getErrorCode(), + "Credential verification failed"); + } + } + + /** + * Processes and encrypts credential data. + */ + private String processAndEncryptCredential(VCCredentialResponse vcCredentialResponse, String base64Key, + String issuerId, String credentialConfigurationId) throws CredentialProcessingException { + try { + String vcResponseAsJsonString = objectMapper.writeValueAsString(vcCredentialResponse); + return encryptionDecryptionUtil.encryptCredential(vcResponseAsJsonString, base64Key); + } catch (JsonProcessingException e) { + log.error("Failed to serialize credential response for issuerId: {}, credentialConfigurationId: {}", issuerId, credentialConfigurationId, e); + throw new CredentialProcessingException( + CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), + "Unable to serialize credential response", e); + } catch (Exception e) { + log.error("Failed to encrypt credential for issuerId: {}, credentialConfigurationId: {}", issuerId, credentialConfigurationId, e); + throw new CredentialProcessingException( + CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), + "Unable to encrypt credential data", e); + } + } + + /** + * Saves the credential to the repository. + * + * @param walletId The wallet ID. + * @param encryptedCredential The encrypted credential data. + * @param issuerId The issuer ID. + * @param credentialConfigurationId The credential configuration id. + * @return The stored VerifiableCredential. + */ + private VerifiableCredential saveCredential(String walletId, String encryptedCredential, String issuerId, + String credentialConfigurationId) throws CredentialProcessingException { + CredentialMetadata credentialMetadata = new CredentialMetadata(); + credentialMetadata.setIssuerId(issuerId); + credentialMetadata.setCredentialType(credentialConfigurationId); + + VerifiableCredential verifiableCredential = new VerifiableCredential(); + verifiableCredential.setId(UUID.randomUUID().toString()); + verifiableCredential.setWalletId(walletId); + verifiableCredential.setCredential(encryptedCredential); + verifiableCredential.setCredentialMetadata(credentialMetadata); + + try { + return walletCredentialsRepository.save(verifiableCredential); + } catch (Exception e) { + log.error("Failed to save credential for walletId: {}, issuerId: {}, credentialConfigurationId: {}", walletId, issuerId, credentialConfigurationId, e); + throw new CredentialProcessingException( + CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), + "Unable to save credential to database", e); + } + } +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialVerifierServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialVerifierServiceImpl.java index 3f6677f52..274206f29 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialVerifierServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialVerifierServiceImpl.java @@ -11,6 +11,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.Objects; + @Service public class CredentialVerifierServiceImpl implements CredentialVerifierService { @@ -21,8 +23,8 @@ public class CredentialVerifierServiceImpl implements CredentialVerifierService private CredentialsVerifier credentialsVerifier; public boolean verify(VCCredentialResponse response) throws JsonProcessingException, VCVerificationException { - String credentialString = objectMapper.writeValueAsString(response.getCredential()); - VerificationResult result = credentialsVerifier.verify(credentialString, CredentialFormat.LDP_VC); + String credentialString = response.getCredential() instanceof String ? (String) response.getCredential() : objectMapper.writeValueAsString(response.getCredential()); + VerificationResult result = credentialsVerifier.verify(credentialString, Objects.requireNonNull(CredentialFormat.Companion.fromValue(response.getFormat()))); if (!result.getVerificationStatus()) { throw new VCVerificationException(result.getVerificationErrorCode().toLowerCase(), result.getVerificationMessage()); } diff --git a/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java index 6c694eeb3..96c560c11 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java @@ -51,7 +51,7 @@ public void setUp(){ pathMatcher = new AntPathMatcher(); } - public String storeDataInDataShare(String data, String credentialValidity) throws Exception { + public String storeDataInDataShare(String data, String credentialValidity) throws InvalidCredentialResourceException { ByteArrayResource contentsAsResource = new ByteArrayResource(data.getBytes()) { @Override public String getFilename() { @@ -69,7 +69,7 @@ public String getFilename() { return dataShareResponseWrapperDTO.getDataShare().getUrl(); } - private DataShareResponseWrapperDTO pushCredentialIntoDataShare(HttpEntity> requestEntity, String credentialValidity) throws Exception { + private DataShareResponseWrapperDTO pushCredentialIntoDataShare(HttpEntity> requestEntity, String credentialValidity) throws InvalidCredentialResourceException { int attempt =0 ; DataShareResponseWrapperDTO dataShareResponseWrapperDTO = null; while(attempt++ < maxRetryCount ){ @@ -87,36 +87,37 @@ private DataShareResponseWrapperDTO pushCredentialIntoDataShare(HttpEntity " + vcCredentialResponse ); - if(vcCredentialResponse.getCredential() == null){ - DataShareResponseDto dataShareResponse = objectMapper.readValue(vcCredentialResponseString, DataShareResponseDto.class); - String errorCode = dataShareResponse.getErrors().get(0).getErrorCode(); - throw new InvalidCredentialResourceException(errorCode.equals("DAT-SER-008") ? ErrorConstants.RESOURCE_NOT_FOUND.getErrorMessage() : ErrorConstants.RESOURCE_EXPIRED.getErrorMessage()); - } - return vcCredentialResponse; + // Get the credentials URI and validate it + String credentialsResourceUri = presentationRequestDTO.getResource(); + if (!pathMatcher.match(dataShareGetUrlPattern, credentialsResourceUri)) { + throw new InvalidCredentialResourceException( + ErrorConstants.RESOURCE_INVALID.getErrorCode(), + ErrorConstants.RESOURCE_INVALID.getErrorMessage()); + } + + // Call the API with the custom headers + String vcCredentialResponseString = restApiClient.getApiWithCustomHeaders(credentialsResourceUri, String.class, customHeaders); + if (vcCredentialResponseString == null) { + throw new InvalidCredentialResourceException( + ErrorConstants.SERVER_UNAVAILABLE.getErrorCode(), + ErrorConstants.SERVER_UNAVAILABLE.getErrorMessage()); } + VCCredentialResponse vcCredentialResponse = objectMapper.readValue(vcCredentialResponseString, VCCredentialResponse.class); + + log.info("Completed Mapping the Credential to Object => " + vcCredentialResponse ); + if(vcCredentialResponse.getCredential() == null){ + DataShareResponseDto dataShareResponse = objectMapper.readValue(vcCredentialResponseString, DataShareResponseDto.class); + String errorCode = dataShareResponse.getErrors().get(0).getErrorCode(); + throw new InvalidCredentialResourceException(errorCode.equals("DAT-SER-008") ? ErrorConstants.RESOURCE_NOT_FOUND.getErrorMessage() : ErrorConstants.RESOURCE_EXPIRED.getErrorMessage()); + } + return vcCredentialResponse; + } } diff --git a/src/main/java/io/mosip/mimoto/service/impl/DcSdJwtCredentialFormatHandler.java b/src/main/java/io/mosip/mimoto/service/impl/DcSdJwtCredentialFormatHandler.java new file mode 100644 index 000000000..6628bd26a --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/impl/DcSdJwtCredentialFormatHandler.java @@ -0,0 +1,15 @@ +package io.mosip.mimoto.service.impl; + + +import io.mosip.mimoto.constant.CredentialFormat; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Slf4j +@Component("dc+sd-jwt") +public class DcSdJwtCredentialFormatHandler extends VcSdJwtCredentialFormatHandler { + @Override + public String getSupportedFormat() { + return CredentialFormat.DC_SD_JWT.getFormat(); + } +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/impl/LdpVcCredentialFormatHandler.java b/src/main/java/io/mosip/mimoto/service/impl/LdpVcCredentialFormatHandler.java new file mode 100644 index 000000000..3363cbf04 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/impl/LdpVcCredentialFormatHandler.java @@ -0,0 +1,100 @@ +package io.mosip.mimoto.service.impl; + +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.constant.CredentialFormat; +import io.mosip.mimoto.dto.mimoto.*; +import io.mosip.mimoto.service.CredentialFormatHandler; +import io.mosip.mimoto.util.LocaleUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +@Slf4j +@Component("ldp_vc") +public class LdpVcCredentialFormatHandler implements CredentialFormatHandler { + + @Autowired + private ObjectMapper objectMapper; + + @Override + public String getSupportedFormat() { + return CredentialFormat.LDP_VC.getFormat(); + } + + @Override + public VCCredentialRequest buildCredentialRequest(VCCredentialRequestProof proof, CredentialsSupportedResponse credentialsSupportedResponse, String credentialConfigurationId) { + + List credentialContext = credentialsSupportedResponse.getCredentialDefinition().getContext(); + if (credentialContext == null || credentialContext.isEmpty()) { + credentialContext = List.of("https://www.w3.org/2018/credentials/v1"); + } + + return VCCredentialRequest.builder().format(getSupportedFormat()) + .proof(proof) + .credentialDefinition(VCCredentialDefinition.builder().type(credentialsSupportedResponse.getCredentialDefinition().getType()).context(credentialContext).build()) + .build(); + } + + @Override + public Map extractCredentialClaims(VCCredentialResponse vcCredentialResponse) { + VCCredentialProperties credential = objectMapper.convertValue(vcCredentialResponse.getCredential(), VCCredentialProperties.class); + return (Map) credential.getCredentialSubject(); + } + + @Override + public LinkedHashMap> loadDisplayPropertiesFromWellknown( + Map credentialProperties, + CredentialsSupportedResponse credentialsSupportedResponse, + String userLocale) { + + LinkedHashMap> displayProperties = new LinkedHashMap<>(); + + // LDP VC format — display config is in "credential_definition.credential_subject" + if (credentialsSupportedResponse.getCredentialDefinition() == null || + credentialsSupportedResponse.getCredentialDefinition().getCredentialSubject() == null) { + log.warn("Missing credential definition or credential subject for LDP VC format"); + return displayProperties; + } + + Map displayConfigMap = + credentialsSupportedResponse.getCredentialDefinition().getCredentialSubject(); + List orderedKeys = credentialsSupportedResponse.getOrder(); + + if (displayConfigMap == null) { + log.warn("No display configuration found for LDP VC format"); + return displayProperties; + } + + String resolvedLocale = LocaleUtils.resolveLocaleWithFallback(displayConfigMap, userLocale); + + LinkedHashMap localizedDisplayMap = new LinkedHashMap<>(); + + if (resolvedLocale != null) { + displayConfigMap.forEach((key, dto) -> { + dto.getDisplay().stream() + .filter(display -> LocaleUtils.matchesLocale(display.getLocale(), resolvedLocale)) + .findFirst() + .ifPresent(display -> localizedDisplayMap.put(key, display)); + }); + } + + List fieldKeys = (orderedKeys != null && !orderedKeys.isEmpty()) + ? orderedKeys + : new ArrayList<>(localizedDisplayMap.keySet()); + + for (String key : fieldKeys) { + CredentialIssuerDisplayResponse display = localizedDisplayMap.get(key); + Object value = credentialProperties.get(key); + if (display != null && value != null) { + displayProperties.put(key, Map.of(display, value)); + } + } + + return displayProperties; + } +} diff --git a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java index 897bcf8bc..2dbc46d55 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java @@ -2,13 +2,14 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.constant.CredentialFormat; import io.mosip.mimoto.dto.mimoto.VCCredentialProperties; import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; +import io.mosip.mimoto.dto.mimoto.VCCredentialResponseProof; import io.mosip.mimoto.dto.openid.presentation.*; import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.exception.VPNotCreatedException; import io.mosip.mimoto.service.PresentationService; -import io.mosip.mimoto.util.RestApiClient; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -28,18 +29,12 @@ public class PresentationServiceImpl implements PresentationService { @Autowired DataShareServiceImpl dataShareService; - @Autowired - RestApiClient restApiClient; - @Autowired ObjectMapper objectMapper; @Value("${mosip.inji.ovp.redirect.url.pattern}") String injiOvpRedirectURLPattern; - @Value("${mosip.data.share.url}") - String dataShareUrl; - @Value("${server.tomcat.max-http-response-header-size:65536}") Integer maximumResponseHeaderSize; @@ -57,22 +52,31 @@ public String authorizePresentation(PresentationRequestDTO presentationRequestDT .stream() .findFirst() .map(inputDescriptorDTO -> { - boolean matchingProofTypes = inputDescriptorDTO.getFormat().get("ldpVc").get("proofTypes") - .stream() - .anyMatch(proofType -> vcCredentialResponse.getCredential().getProof().getType().equals(proofType)); - if (matchingProofTypes) { - log.info("Started the Construction of VP token"); - try { - VerifiablePresentationDTO verifiablePresentationDTO = constructVerifiablePresentationString(vcCredentialResponse.getCredential()); - String presentationSubmission = constructPresentationSubmission(verifiablePresentationDTO, presentationDefinitionDTO, inputDescriptorDTO); - String vpToken = objectMapper.writeValueAsString(verifiablePresentationDTO); - return String.format(injiOvpRedirectURLPattern, - presentationRequestDTO.getRedirectUri(), - Base64.getUrlEncoder().encodeToString(vpToken.getBytes(StandardCharsets.UTF_8)), - URLEncoder.encode(presentationSubmission, StandardCharsets.UTF_8)); - } catch (JsonProcessingException e) { - throw new VPNotCreatedException(ErrorConstants.INVALID_REQUEST.getErrorMessage()); + + if (CredentialFormat.LDP_VC.toString().equalsIgnoreCase(vcCredentialResponse.getFormat())) { + VCCredentialProperties ldpCredential = objectMapper.convertValue(vcCredentialResponse.getCredential(), VCCredentialProperties.class); + boolean matchingProofTypes = inputDescriptorDTO.getFormat().get("ldpVc").get("proofTypes") + .stream() + .anyMatch(proofType -> ldpCredential.getProof().getType().equals(proofType)); + + if (matchingProofTypes) { + log.info("Started the Construction of VP token"); + try { + VerifiablePresentationDTO verifiablePresentationDTO = constructVerifiablePresentationString(ldpCredential); + String presentationSubmission = constructPresentationSubmission(verifiablePresentationDTO, presentationDefinitionDTO, inputDescriptorDTO); + String vpToken = objectMapper.writeValueAsString(verifiablePresentationDTO); + return String.format(injiOvpRedirectURLPattern, + presentationRequestDTO.getRedirectUri(), + Base64.getUrlEncoder().encodeToString(vpToken.getBytes(StandardCharsets.UTF_8)), + URLEncoder.encode(presentationSubmission, StandardCharsets.UTF_8)); + } catch (JsonProcessingException e) { + throw new VPNotCreatedException(ErrorConstants.INVALID_REQUEST.getErrorMessage()); + } } + } else if (CredentialFormat.VC_SD_JWT.getFormat().equalsIgnoreCase(vcCredentialResponse.getFormat()) + || CredentialFormat.DC_SD_JWT.getFormat().equalsIgnoreCase(vcCredentialResponse.getFormat())) { + + throw new UnsupportedOperationException("OnlineSharing is not supported for SD-JWT format yet."); } log.info("No Credentials Matched the VP request."); throw new VPNotCreatedException(ErrorConstants.INVALID_REQUEST.getErrorMessage()); @@ -97,9 +101,9 @@ private String constructPresentationSubmission(VerifiablePresentationDTO verifia AtomicInteger atomicInteger = new AtomicInteger(0); List submissionDescriptorDTOList = verifiablePresentationDTO.getVerifiableCredential() .stream().map(verifiableCredential -> SubmissionDescriptorDTO.builder() - .id(inputDescriptorDTO.getId()) - .format("ldp_vc") - .path("$.verifiableCredential[" + atomicInteger.getAndIncrement() + "]").build()).collect(Collectors.toList()); + .id(inputDescriptorDTO.getId()) + .format(CredentialFormat.LDP_VC.getFormat()) + .path("$.verifiableCredential[" + atomicInteger.getAndIncrement() + "]").build()).collect(Collectors.toList()); PresentationSubmissionDTO presentationSubmissionDTO = PresentationSubmissionDTO.builder() .id(UUID.randomUUID().toString()) @@ -108,20 +112,37 @@ private String constructPresentationSubmission(VerifiablePresentationDTO verifia return objectMapper.writeValueAsString(presentationSubmissionDTO); } - public PresentationDefinitionDTO constructPresentationDefinition(VCCredentialResponse vcCredentialResponse){ - FilterDTO filterDTO = FilterDTO.builder().type("String").pattern(vcCredentialResponse.getCredential().getType().getLast()).build(); - FieldDTO fieldDTO = FieldDTO.builder().path(new String[]{"$.type"}).filter(filterDTO).build(); - ConstraintsDTO constraintsDTO = ConstraintsDTO.builder().fields(new FieldDTO[]{fieldDTO}).build(); - Map> proofTypes = Map.of("proofTypes", Collections.singletonList(vcCredentialResponse.getCredential().getProof().getType())); - Map>> format = Map.of("ldpVc", proofTypes ); - InputDescriptorDTO inputDescriptorDTO = InputDescriptorDTO.builder() - .id(UUID.randomUUID().toString()) - .constraints(constraintsDTO) - .format(format).build(); + public PresentationDefinitionDTO constructPresentationDefinition(VCCredentialResponse vcRes) { + String vcFormat = vcRes.getFormat(); + List inputDescriptors = new ArrayList<>(); + + if (CredentialFormat.LDP_VC.getFormat().equalsIgnoreCase(vcFormat)) { + VCCredentialProperties ldp = objectMapper.convertValue(vcRes.getCredential(), VCCredentialProperties.class); + String lastType = ldp.getType().get(ldp.getType().size() - 1); + String proofType = Optional.ofNullable(ldp.getProof()).map(VCCredentialResponseProof::getType).orElse(null); + + FieldDTO field = FieldDTO.builder() + .path(new String[]{"$.type"}) + .filter(FilterDTO.builder().type("String").pattern(lastType).build()) + .build(); + + Map>> format = Map.of( + "ldpVc", Map.of("proofTypes", List.of(proofType)) + ); + + inputDescriptors.add(InputDescriptorDTO.builder() + .id(UUID.randomUUID().toString()) + .constraints(ConstraintsDTO.builder().fields(new FieldDTO[]{ field }).build()) + .format(format) + .build()); + + } else { + throw new UnsupportedOperationException("We don't support constructing Presentation Definition for " + vcFormat + " format yet."); + } return PresentationDefinitionDTO.builder() - .inputDescriptors(Collections.singletonList(inputDescriptorDTO)) - .id(UUID.randomUUID().toString()).build(); + .id(UUID.randomUUID().toString()) + .inputDescriptors(inputDescriptors) + .build(); } - } diff --git a/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java b/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java new file mode 100644 index 000000000..f07eb91c3 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java @@ -0,0 +1,194 @@ +package io.mosip.mimoto.service.impl; + + +import com.authlete.sd.Disclosure; +import com.authlete.sd.SDJWT; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.constant.CredentialFormat; +import io.mosip.mimoto.dto.mimoto.*; +import io.mosip.mimoto.service.CredentialFormatHandler; +import io.mosip.mimoto.util.LocaleUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.nio.charset.StandardCharsets; +import java.util.*; +import java.util.stream.Collectors; + +@Slf4j +@Component("vc+sd-jwt") +public class VcSdJwtCredentialFormatHandler implements CredentialFormatHandler { + + @Autowired + private ObjectMapper objectMapper; + + @Override + public String getSupportedFormat() { + return CredentialFormat.VC_SD_JWT.getFormat(); + } + + + @Override + public VCCredentialRequest buildCredentialRequest(VCCredentialRequestProof proof, CredentialsSupportedResponse credentialsSupportedResponse, String credentialConfigurationId) { + return VCCredentialRequest.builder().format(getSupportedFormat()).proof(proof).vct(credentialConfigurationId).build(); + } + + @Override + public Map extractCredentialClaims(VCCredentialResponse vcCredentialResponse) { + Object credential = vcCredentialResponse.getCredential(); + if (credential instanceof String) { + return extractClaimsFromSdJwt((String) credential); + } + log.warn("Unexpected credential format in response for SD-JWT VC: {}", credential); + return Collections.emptyMap(); + } + + @Override + public LinkedHashMap> loadDisplayPropertiesFromWellknown( + Map credentialProperties, + CredentialsSupportedResponse credentialsSupportedResponse, + String userLocale) { + + LinkedHashMap> displayProperties = new LinkedHashMap<>(); + + // Remove "credentialSubject" and "disclosures" from credentialProperties + Map filteredCredentialProperties = new HashMap<>(); + + credentialProperties.forEach((outerKey, outerValue) -> { + if (outerValue instanceof Map) { + Map innerMap = (Map) outerValue; + for (Map.Entry innerEntry : innerMap.entrySet()) { + if (innerEntry.getKey() instanceof String) { + filteredCredentialProperties.put((String) innerEntry.getKey(), innerEntry.getValue()); + } + } + } else { + filteredCredentialProperties.put(outerKey, outerValue); + } + }); + + // Extract raw claims and convert to DTOs + Map rawClaims = Optional.ofNullable(credentialsSupportedResponse.getClaims()) + .map(map -> (map.size() == 1 && map.values().iterator().next() instanceof Map) + ? (Map) map.values().iterator().next() + : map) + .orElse(Collections.emptyMap()); + + Map convertedClaimsMap = rawClaims.entrySet().stream() + .collect(Collectors.toMap( + Map.Entry::getKey, + entry -> objectMapper.convertValue(entry.getValue(), CredentialDisplayResponseDto.class) + )); + + if (convertedClaimsMap.isEmpty()) { + log.warn("No display configuration found for SD-JWT format"); + return displayProperties; + } + + String resolvedLocale = LocaleUtils.resolveLocaleWithFallback(convertedClaimsMap, userLocale); + LinkedHashMap localizedDisplayMap = new LinkedHashMap<>(); + + if (resolvedLocale != null) { + convertedClaimsMap.forEach((key, dto) -> { + dto.getDisplay().stream() + .filter(display -> LocaleUtils.matchesLocale(display.getLocale(), resolvedLocale)) + .findFirst() + .ifPresent(display -> localizedDisplayMap.put(key, display)); + }); + } + + List orderedKeys = credentialsSupportedResponse.getOrder(); + List fieldKeys = (orderedKeys != null && !orderedKeys.isEmpty()) + ? orderedKeys + : new ArrayList<>(localizedDisplayMap.keySet()); + + for (String key : fieldKeys) { + CredentialIssuerDisplayResponse display = localizedDisplayMap.get(key); + Object value = filteredCredentialProperties.get(key); + if (display != null && value != null) { + displayProperties.put(key, Map.of(display, value)); + } + } + + return displayProperties; + } + + public Map extractClaimsFromSdJwt(String sdJwtString) { + try { + SDJWT sdJwt = SDJWT.parse(sdJwtString); + Map claims = new HashMap<>(); + + // Parse JWT payload + String credentialJwt = sdJwt.getCredentialJwt(); + if (credentialJwt != null) { + Map jwtPayload = parseJwtPayload(credentialJwt); + if (jwtPayload != null) { + // Check if 'credentialSubject' is present + if (jwtPayload.containsKey("credentialSubject")) { + Object credentialSubject = jwtPayload.get("credentialSubject"); + if (credentialSubject instanceof Map) { + claims.putAll((Map) credentialSubject); + } + } else { + // No credentialSubject, put all claims at root level + claims.putAll(jwtPayload); + } + } + } + + // Add disclosures + List disclosures = sdJwt.getDisclosures(); + Map disclosuresClaims = new HashMap<>(); + if (disclosures != null && !disclosures.isEmpty()) { + for (Disclosure disclosure : disclosures) { + try { + String claimName = disclosure.getClaimName(); + Object claimValue = disclosure.getClaimValue(); + + if (claimName != null && claimValue != null) { + disclosuresClaims.put(claimName, claimValue); + } + } catch (Exception e) { + log.warn("Failed to process disclosure: {}", e.getMessage()); + } + } + } + + // Remove standard JWT claims and SD-JWT metadata + List metadataKeys = Arrays.asList("iss", "sub", "aud", "exp", "nbf", "iat", "jti", "_sd", "_sd_alg"); + metadataKeys.forEach(claims::remove); + + // Separate credentialSubject if present + Map result = new HashMap<>(); + result.put("credentialSubject", claims); + result.put("disclosures", disclosuresClaims); + + return result; + + } catch (IllegalArgumentException e) { + log.error("Error parsing SD-JWT with Authlete library: {}", e.getMessage(), e); + return Collections.emptyMap(); + } catch (Exception e) { + log.error("Unexpected error processing SD-JWT", e); + return Collections.emptyMap(); + } + } + + private Map parseJwtPayload(String jwt) { + try { + String[] parts = jwt.split("\\."); + if (parts.length < 3) { + log.error("Invalid JWT format"); + return null; + } + + String payloadJson = new String(Base64.getUrlDecoder().decode(parts[1]), StandardCharsets.UTF_8); + return objectMapper.readValue(payloadJson, Map.class); + } catch (Exception e) { + log.error("Error parsing JWT payload", e); + return null; + } + } + +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java index 9ed89ec43..aa3248b41 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java @@ -2,8 +2,6 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import io.mosip.mimoto.model.CredentialMetadata; -import io.mosip.mimoto.model.VerifiableCredential; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.CredentialsSupportedResponse; @@ -12,11 +10,13 @@ import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; import io.mosip.mimoto.dto.resident.WalletCredentialResponseDTO; import io.mosip.mimoto.exception.*; +import io.mosip.mimoto.model.CredentialMetadata; +import io.mosip.mimoto.model.VerifiableCredential; import io.mosip.mimoto.repository.WalletCredentialsRepository; import io.mosip.mimoto.service.CredentialPDFGeneratorService; +import io.mosip.mimoto.service.CredentialService; import io.mosip.mimoto.service.IssuersService; import io.mosip.mimoto.service.WalletCredentialService; -import io.mosip.mimoto.util.CredentialProcessor; import io.mosip.mimoto.util.EncryptionDecryptionUtil; import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.NotNull; @@ -47,7 +47,7 @@ public class WalletCredentialServiceImpl implements WalletCredentialService { private final WalletCredentialsRepository repository; private final IssuersService issuersService; - private final CredentialProcessor credentialProcessor; + private final CredentialService credentialService; private final ObjectMapper objectMapper; private final EncryptionDecryptionUtil encryptionDecryptionUtil; private final CredentialPDFGeneratorService credentialPDFGeneratorService; @@ -55,12 +55,12 @@ public class WalletCredentialServiceImpl implements WalletCredentialService { @Autowired public WalletCredentialServiceImpl(WalletCredentialsRepository repository, IssuersService issuersService, - CredentialProcessor credentialProcessor, + CredentialService credentialService, ObjectMapper objectMapper, EncryptionDecryptionUtil encryptionDecryptionUtil,CredentialPDFGeneratorService credentialPDFGeneratorService) { this.repository = repository; this.issuersService = issuersService; - this.credentialProcessor = credentialProcessor; + this.credentialService = credentialService; this.objectMapper = objectMapper; this.encryptionDecryptionUtil = encryptionDecryptionUtil; this.credentialPDFGeneratorService = credentialPDFGeneratorService; @@ -84,8 +84,8 @@ public VerifiableCredentialResponseDTO downloadVCAndStoreInDB(String issuerId, S VerifiableCredentialResponseDTO credential; - credential = credentialProcessor.downloadCredentialAndStoreInDB( - tokenResponse, credentialConfigurationId, walletId, base64Key, issuerId, locale); + credential = credentialService.downloadCredentialAndStoreInDB( + tokenResponse, credentialConfigurationId, walletId, base64Key, issuerId, locale); log.debug("Credential stored successfully: {}", credential.getCredentialId()); return credential; @@ -103,7 +103,7 @@ public List fetchAllCredentialsForWallet(String IssuerConfig issuerConfig = null; try { issuerConfig = issuersService.getIssuerConfig(issuerId, credential.getCredentialMetadata().getCredentialType()); - } catch (ApiNotAccessibleException e) { + } catch (InvalidIssuerIdException | ApiNotAccessibleException e) { log.error("Failed to fetch issuer details for issuerId: {}", issuerId, e); } return VerifiableCredentialResponseDTO.fromIssuerConfig(issuerConfig, locale, credential.getId()); @@ -169,7 +169,7 @@ private WalletCredentialResponseDTO generateCredentialResponse(String decryptedC // Find credentials supported response for the credential type CredentialsSupportedResponse credentialsSupportedResponse = issuerConfig.getCredentialsSupportedResponse(); - if (credentialsSupportedResponse == null || !credentialsSupportedResponse.getCredentialDefinition().getType().containsAll(vcCredentialResponse.getCredential().getType())) { + if (credentialsSupportedResponse == null ) { log.error("Credentials supported response not found for credentialType: {}", credentialMetadata.getCredentialType()); throw new CredentialProcessingException(CREDENTIAL_FETCH_EXCEPTION.getErrorCode(), "Invalid credential type configuration"); } @@ -177,7 +177,7 @@ private WalletCredentialResponseDTO generateCredentialResponse(String decryptedC // Generate PDF // keep the datashare url and credential validity as defaults in downloading VC as PDF as logged-in user // This is because generatePdfForVerifiableCredentials will be used by both logged-in and non-logged-in users - ByteArrayInputStream pdfStream = credentialPDFGeneratorService.generatePdfForVerifiableCredentials( + ByteArrayInputStream pdfStream = credentialPDFGeneratorService.generatePdfForVerifiableCredential( credentialMetadata.getCredentialType(), vcCredentialResponse, issuerDTO, diff --git a/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java b/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java deleted file mode 100644 index 314e39c7f..000000000 --- a/src/main/java/io/mosip/mimoto/util/CredentialProcessor.java +++ /dev/null @@ -1,214 +0,0 @@ -package io.mosip.mimoto.util; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import io.mosip.mimoto.model.CredentialMetadata; -import io.mosip.mimoto.model.VerifiableCredential; - -import io.mosip.mimoto.dto.idp.TokenResponseDTO; -import io.mosip.mimoto.dto.mimoto.IssuerConfig; -import io.mosip.mimoto.dto.mimoto.VCCredentialRequest; -import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; -import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; -import io.mosip.mimoto.exception.*; -import io.mosip.mimoto.repository.WalletCredentialsRepository; -import io.mosip.mimoto.service.CredentialRequestService; -import io.mosip.mimoto.service.CredentialService; -import io.mosip.mimoto.service.CredentialVerifierService; -import io.mosip.mimoto.service.IssuersService; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.UUID; - -import static io.mosip.mimoto.exception.ErrorConstants.*; - -/** - * Utility class for processing and storing credentials. - */ -@Slf4j -@Component -public class CredentialProcessor { - - private final ObjectMapper objectMapper; - private final EncryptionDecryptionUtil encryptionDecryptionUtil; - private final WalletCredentialsRepository walletCredentialsRepository; - private final IssuersService issuersService; - private final CredentialVerifierService credentialVerifierService; - private final CredentialRequestService credentialRequestService; - private final CredentialService credentialService; - - @Autowired - public CredentialProcessor( - ObjectMapper objectMapper, - EncryptionDecryptionUtil encryptionDecryptionUtil, - WalletCredentialsRepository walletCredentialsRepository, - IssuersService issuersService, - CredentialVerifierService credentialVerifierService, - CredentialRequestService credentialRequestService, - CredentialService credentialService) { - - this.objectMapper = objectMapper; - this.encryptionDecryptionUtil = encryptionDecryptionUtil; - this.walletCredentialsRepository = walletCredentialsRepository; - this.issuersService = issuersService; - this.credentialVerifierService = credentialVerifierService; - this.credentialRequestService = credentialRequestService; - this.credentialService = credentialService; - } - - /** - * Download credential and stores a credential using the provided token and parameters. - * - * @param tokenResponse The token response containing the access token. - * @param credentialConfigurationId The type of the credential. - * @param walletId The ID of the wallet. - * @param base64Key The Base64-encoded wallet key. - * @param issuerId The ID of the issuer. - * @return The stored VerifiableCredential. - * @throws InvalidRequestException If input parameters are invalid. - * @throws CredentialProcessingException If processing fails. - * @throws ExternalServiceUnavailableException If an external service is unavailable. - * @throws VCVerificationException If credential verification fails. - */ - public VerifiableCredentialResponseDTO downloadCredentialAndStoreInDB( - TokenResponseDTO tokenResponse, String credentialConfigurationId, String walletId, - String base64Key, String issuerId, String locale) - throws InvalidRequestException, CredentialProcessingException, ExternalServiceUnavailableException, VCVerificationException { - // Validate inputs - if (tokenResponse == null || StringUtils.isBlank(tokenResponse.getAccess_token())) { - log.error("Invalid token response: null or missing access token"); - throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Token response or access token cannot be null"); - } - if (StringUtils.isBlank(credentialConfigurationId )) { - log.error("Invalid credential type: null or blank"); - throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Credential type cannot be null or blank"); - } - if (StringUtils.isBlank(walletId)) { - log.error("Invalid wallet ID: null or blank"); - throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Wallet ID cannot be null or blank"); - } - if (StringUtils.isBlank(base64Key)) { - log.error("Invalid wallet key: null or blank"); - throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Wallet key cannot be null or blank"); - } - if (StringUtils.isBlank(issuerId)) { - log.error("Invalid issuer ID: null or blank"); - throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Issuer ID cannot be null or blank"); - } - - // Fetch issuer configuration - IssuerConfig issuerConfig; - try { - issuerConfig = issuersService.getIssuerConfig(issuerId, credentialConfigurationId); - } catch (Exception e) { - log.error("Failed to fetch issuer config for issuerId: {}", issuerId, e); - throw new CredentialProcessingException( - CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), - "Unable to fetch issuer configuration", e); - } - - // Generate credential request - VCCredentialRequest vcCredentialRequest; - try { - vcCredentialRequest = credentialRequestService.buildRequest( - issuerConfig.getIssuerDTO(), issuerConfig.getWellKnownResponse(), - issuerConfig.getCredentialsSupportedResponse(), tokenResponse.getC_nonce(), - walletId, base64Key, true); - } catch (Exception e) { - log.error("Failed to generate VC credential request for issuerId: {}, credentialConfigurationId: {}", issuerId, credentialConfigurationId, e); - throw new CredentialProcessingException( - CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), - "Unable to generate credential request", e); - } - - // Download credential - VCCredentialResponse vcCredentialResponse; - try { - vcCredentialResponse = credentialService.downloadCredential( - issuerConfig.getWellKnownResponse().getCredentialEndPoint(), - vcCredentialRequest, tokenResponse.getAccess_token()); - } catch (Exception e) { - log.error("Failed to download credential for issuerId: {}, credentialConfigurationId: {}", issuerId, credentialConfigurationId, e); - throw new ExternalServiceUnavailableException( - SERVER_UNAVAILABLE.getErrorCode(), - "Unable to download credential from issuer", e); - } - - // Verify credential - boolean verificationStatus; - try { - verificationStatus = issuerId.toLowerCase().contains("mock") || - credentialVerifierService.verify(vcCredentialResponse); - } catch (VCVerificationException | JsonProcessingException e) { - log.error("Credential verification failed for issuerId: {}, credentialConfigurationId: {}", issuerId, credentialConfigurationId, e); - throw new VCVerificationException( - SIGNATURE_VERIFICATION_EXCEPTION.getErrorCode(), - "Credential verification failed"); - } - - if (!verificationStatus) { - log.error("Signature verification failed for issuerId: {}, credentialConfigurationId: {}", issuerId, credentialConfigurationId); - throw new VCVerificationException( - SIGNATURE_VERIFICATION_EXCEPTION.getErrorCode(), - SIGNATURE_VERIFICATION_EXCEPTION.getErrorMessage()); - } - - // Serialize and store credential - String vcResponseAsJsonString; - try { - vcResponseAsJsonString = objectMapper.writeValueAsString(vcCredentialResponse); - } catch (JsonProcessingException e) { - log.error("Failed to serialize credential response for issuerId: {}, credentialConfigurationId: {}", issuerId, credentialConfigurationId, e); - throw new CredentialProcessingException( - CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), - "Unable to serialize credential response", e); - } - - String encryptedCredentialData; - try { - encryptedCredentialData = encryptionDecryptionUtil.encryptCredential(vcResponseAsJsonString, base64Key); - } catch (Exception e) { - log.error("Failed to encrypt credential for issuerId: {}, credentialConfigurationId: {}", issuerId, credentialConfigurationId, e); - throw new CredentialProcessingException( - CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), - "Unable to encrypt credential data", e); - } - - VerifiableCredential savedCredential = saveCredential(walletId, encryptedCredentialData, issuerId, credentialConfigurationId); - return VerifiableCredentialResponseDTO.fromIssuerConfig(issuerConfig, locale, savedCredential.getId()); - } - - /** - * Saves the credential to the repository. - * - * @param walletId The wallet ID. - * @param encryptedCredential The encrypted credential data. - * @param issuerId The issuer ID. - * @param credentialType The credential type. - * @return The stored VerifiableCredential. - */ - private VerifiableCredential saveCredential(String walletId, String encryptedCredential, String issuerId, - String credentialType) { - CredentialMetadata credentialMetadata = new CredentialMetadata(); - credentialMetadata.setIssuerId(issuerId); - credentialMetadata.setCredentialType(credentialType); - - VerifiableCredential verifiableCredential = new VerifiableCredential(); - verifiableCredential.setId(UUID.randomUUID().toString()); - verifiableCredential.setWalletId(walletId); - verifiableCredential.setCredential(encryptedCredential); - verifiableCredential.setCredentialMetadata(credentialMetadata); - - try { - return walletCredentialsRepository.save(verifiableCredential); - } catch (Exception e) { - log.error("Failed to save credential for walletId: {}, issuerId: {}, credentialType: {}", walletId, issuerId, credentialType, e); - throw new CredentialProcessingException( - CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), - "Unable to save credential to database", e); - } - } -} diff --git a/src/main/java/io/mosip/mimoto/util/Utilities.java b/src/main/java/io/mosip/mimoto/util/Utilities.java index 327582e91..462647f40 100644 --- a/src/main/java/io/mosip/mimoto/util/Utilities.java +++ b/src/main/java/io/mosip/mimoto/util/Utilities.java @@ -185,8 +185,8 @@ public String getIssuersConfigJsonValue() { public String getTrustedVerifiersJsonValue() { return getJson(trustedVerifiersJsonString, trustedVerifiersPath); } - public String getCredentialSupportedTemplateString(String issuerId, String credentialType) { - String templateFileName = String.format("%s-%s-template.html", issuerId, credentialType); + public String getCredentialSupportedTemplateString(String issuerId, String credentialConfigurationId) { + String templateFileName = String.format("%s-%s-template.html", issuerId, credentialConfigurationId); if(activeProfile.contains("local")) { Path basePath = Paths.get("templates").toAbsolutePath().normalize(); Path resolvedPath = basePath.resolve(templateFileName).normalize(); diff --git a/src/test/java/io/mosip/mimoto/service/CredentialFormatHandlerFactoryTest.java b/src/test/java/io/mosip/mimoto/service/CredentialFormatHandlerFactoryTest.java new file mode 100644 index 000000000..8900c75fd --- /dev/null +++ b/src/test/java/io/mosip/mimoto/service/CredentialFormatHandlerFactoryTest.java @@ -0,0 +1,201 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.constant.CredentialFormat; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class CredentialFormatHandlerFactoryTest { + + private CredentialFormatHandler mockDcSdJwtHandler; + private CredentialFormatHandler mockVcSdJwtHandler; + private CredentialFormatHandler mockLdpVcHandler; + + private CredentialFormatHandlerFactory credentialFormatHandlerFactory; + + @BeforeEach + void setUp() { + mockDcSdJwtHandler = mock(CredentialFormatHandler.class); + mockLdpVcHandler = mock(CredentialFormatHandler.class); + mockVcSdJwtHandler = mock(CredentialFormatHandler.class); + } + + private static Map toHandlerMap(List handlers) { + return handlers.stream() + .collect(Collectors.toMap( + CredentialFormatHandler::getSupportedFormat, + h -> h + )); + } + + @Test + void constructorWithValidHandlersShouldInitializeHandlersMap() { + // Given + when(mockDcSdJwtHandler.getSupportedFormat()).thenReturn(CredentialFormat.DC_SD_JWT.getFormat()); + when(mockLdpVcHandler.getSupportedFormat()).thenReturn(CredentialFormat.LDP_VC.getFormat()); + when(mockVcSdJwtHandler.getSupportedFormat()).thenReturn(CredentialFormat.VC_SD_JWT.getFormat()); + + List handlers = Arrays.asList( + mockDcSdJwtHandler, mockLdpVcHandler, mockVcSdJwtHandler + ); + + // When + credentialFormatHandlerFactory = new CredentialFormatHandlerFactory(toHandlerMap(handlers)); + + // Then + assertNotNull(credentialFormatHandlerFactory); + verify(mockDcSdJwtHandler, times(1)).getSupportedFormat(); + verify(mockLdpVcHandler, times(1)).getSupportedFormat(); + verify(mockVcSdJwtHandler, times(1)).getSupportedFormat(); + } + + @Test + void constructorWithEmptyHandlersListShouldInitializeEmptyMap() { + // Given + List handlers = Collections.emptyList(); + + // When + credentialFormatHandlerFactory = new CredentialFormatHandlerFactory(toHandlerMap(handlers)); + + // Then + assertNotNull(credentialFormatHandlerFactory); + } + + @Test + void getHandlerWithValidDcSdJwtFormatShouldReturnCorrectHandler() { + // Given + when(mockDcSdJwtHandler.getSupportedFormat()).thenReturn(CredentialFormat.DC_SD_JWT.getFormat()); + List handlers = Arrays.asList(mockDcSdJwtHandler); + credentialFormatHandlerFactory = new CredentialFormatHandlerFactory(toHandlerMap(handlers)); + + // When + CredentialFormatHandler result = credentialFormatHandlerFactory.getHandler(CredentialFormat.DC_SD_JWT.getFormat()); + + // Then + assertNotNull(result); + assertEquals(mockDcSdJwtHandler, result); + } + + @Test + void getHandlerWithValidLdpVcFormatShouldReturnCorrectHandler() { + // Given + when(mockLdpVcHandler.getSupportedFormat()).thenReturn(CredentialFormat.LDP_VC.getFormat()); + List handlers = Arrays.asList(mockLdpVcHandler); + credentialFormatHandlerFactory = new CredentialFormatHandlerFactory(toHandlerMap(handlers)); + + // When + CredentialFormatHandler result = credentialFormatHandlerFactory.getHandler(CredentialFormat.LDP_VC.getFormat()); + + // Then + assertNotNull(result); + assertEquals(mockLdpVcHandler, result); + } + + @Test + void getHandlerWithUnsupportedFormatShouldThrowIllegalArgumentException() { + // Given + when(mockDcSdJwtHandler.getSupportedFormat()).thenReturn(CredentialFormat.DC_SD_JWT.getFormat()); + List handlers = Arrays.asList(mockDcSdJwtHandler); + credentialFormatHandlerFactory = new CredentialFormatHandlerFactory(toHandlerMap(handlers)); + + String unsupportedFormat = "unsupported_format"; + + // When & Then + IllegalArgumentException exception = assertThrows( + IllegalArgumentException.class, + () -> credentialFormatHandlerFactory.getHandler(unsupportedFormat) + ); + + assertEquals("Unsupported credential format: " + unsupportedFormat, exception.getMessage()); + } + + @Test + void getHandlerWithNullFormatShouldThrowIllegalArgumentException() { + // Given + when(mockDcSdJwtHandler.getSupportedFormat()).thenReturn(CredentialFormat.DC_SD_JWT.getFormat()); + List handlers = Arrays.asList(mockDcSdJwtHandler); + credentialFormatHandlerFactory = new CredentialFormatHandlerFactory(toHandlerMap(handlers)); + + // When & Then + IllegalArgumentException exception = assertThrows( + IllegalArgumentException.class, + () -> credentialFormatHandlerFactory.getHandler(null) + ); + + assertEquals("Unsupported credential format: null", exception.getMessage()); + } + + @Test + void getHandlerWithEmptyFormatShouldThrowIllegalArgumentException() { + // Given + when(mockDcSdJwtHandler.getSupportedFormat()).thenReturn(CredentialFormat.DC_SD_JWT.getFormat()); + List handlers = Arrays.asList(mockDcSdJwtHandler); + credentialFormatHandlerFactory = new CredentialFormatHandlerFactory(toHandlerMap(handlers)); + + String emptyFormat = ""; + + // When & Then + IllegalArgumentException exception = assertThrows( + IllegalArgumentException.class, + () -> credentialFormatHandlerFactory.getHandler(emptyFormat) + ); + + assertEquals("Unsupported credential format: ", exception.getMessage()); + } + + @Test + void getHandlerWithMultipleHandlersShouldReturnCorrectHandlerForEachFormat() { + // Given + when(mockDcSdJwtHandler.getSupportedFormat()).thenReturn(CredentialFormat.DC_SD_JWT.getFormat()); + when(mockLdpVcHandler.getSupportedFormat()).thenReturn(CredentialFormat.LDP_VC.getFormat()); + + List handlers = Arrays.asList( + mockDcSdJwtHandler, mockLdpVcHandler + ); + credentialFormatHandlerFactory = new CredentialFormatHandlerFactory(toHandlerMap(handlers)); + + // When & Then + CredentialFormatHandler sdJwtResult = credentialFormatHandlerFactory.getHandler(CredentialFormat.DC_SD_JWT.getFormat()); + CredentialFormatHandler ldpVcResult = credentialFormatHandlerFactory.getHandler(CredentialFormat.LDP_VC.getFormat()); + + assertEquals(mockDcSdJwtHandler, sdJwtResult); + assertEquals(mockLdpVcHandler, ldpVcResult); + } + + @Test + void getHandlerWithVcSdJwtFormatButNoDcSdJwtHandlerShouldThrowException() { + // Given - Only LDP VC handler available, no DC_SD_JWT handler + when(mockLdpVcHandler.getSupportedFormat()).thenReturn(CredentialFormat.LDP_VC.getFormat()); + List handlers = Arrays.asList(mockLdpVcHandler); + credentialFormatHandlerFactory = new CredentialFormatHandlerFactory(toHandlerMap(handlers)); + + IllegalArgumentException exception = assertThrows( + IllegalArgumentException.class, + () -> credentialFormatHandlerFactory.getHandler(CredentialFormat.VC_SD_JWT.getFormat()) + ); + + assertEquals("Unsupported credential format: " + CredentialFormat.VC_SD_JWT.getFormat(), + exception.getMessage()); + } + + @Test + void constructorWithNullHandlerInListShouldHandleGracefully() { + // Given + when(mockDcSdJwtHandler.getSupportedFormat()).thenReturn(CredentialFormat.DC_SD_JWT.getFormat()); + List handlers = Arrays.asList(mockDcSdJwtHandler, null); + + // When & Then - Should handle null handler gracefully (might throw NPE during construction) + assertThrows(NullPointerException.class, () -> new CredentialFormatHandlerFactory(toHandlerMap(handlers))); + } +} diff --git a/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java index d173aa604..84d63f279 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java @@ -1,3 +1,4 @@ + package io.mosip.mimoto.service; import com.fasterxml.jackson.databind.ObjectMapper; @@ -8,6 +9,7 @@ import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.dto.openid.presentation.PresentationDefinitionDTO; import io.mosip.mimoto.model.QRCodeType; +import io.mosip.mimoto.service.impl.LdpVcCredentialFormatHandler; import io.mosip.mimoto.service.impl.PresentationServiceImpl; import io.mosip.mimoto.util.Utilities; import io.mosip.pixelpass.PixelPass; @@ -17,10 +19,6 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockedStatic; - -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.verify; - import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.test.util.ReflectionTestUtils; @@ -33,8 +31,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.mockStatic; -import static org.mockito.Mockito.when; +import static org.mockito.Mockito.*; @ExtendWith(MockitoExtension.class) class CredentialPDFGeneratorServiceTest { @@ -43,6 +40,10 @@ class CredentialPDFGeneratorServiceTest { @Mock private PresentationServiceImpl presentationService; @Mock private Utilities utilities; @Mock private PixelPass pixelPass; + @Mock + private CredentialFormatHandlerFactory credentialFormatHandlerFactory; + @Mock + private LdpVcCredentialFormatHandler credentialFormatHandler; @InjectMocks private CredentialPDFGeneratorService credentialPDFGeneratorService; @@ -58,6 +59,8 @@ void setUp() { ReflectionTestUtils.setField(credentialPDFGeneratorService, "qrCodeWidth", 500); ReflectionTestUtils.setField(credentialPDFGeneratorService, "allowedQRDataSizeLimit", 2000); ReflectionTestUtils.setField(credentialPDFGeneratorService, "pixelPass", pixelPass); + // Mock the handler factory to return the handler for the test format + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); setupTestData(); } @@ -126,7 +129,7 @@ private CredentialDisplayResponseDto createDisplay(String name) { } @Test - void testGeneratePdfForVerifiableCredentials() throws Exception { + void testGeneratePdfForVerifiableCredential() throws Exception { when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())) .thenReturn("Test"); PresentationDefinitionDTO presentationDef = new PresentationDefinitionDTO(); @@ -135,7 +138,7 @@ void testGeneratePdfForVerifiableCredentials() throws Exception { when(objectMapper.writeValueAsString(presentationDef)) .thenReturn("{\"presentation\":\"definition\"}"); - ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredentials( + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, "https://example.com/share", "2025-12-31", "en"); @@ -155,7 +158,7 @@ void testGeneratePdfForEmbeddedVCQR() throws Exception { mocked.when(() -> Utilities.encodeToString(any(), anyString())) .thenReturn("base64-encoded-qr"); - ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredentials( + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, "", "", "en"); @@ -177,7 +180,7 @@ void testGeneratePdfShouldGeneratePresentationDefinitionForOnlineSharingQrTypeWi mocked.when(() -> Utilities.encodeToString(any(), anyString())) .thenReturn("base64-encoded-qr"); - ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredentials( + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, "http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/test", "", "en"); @@ -187,34 +190,11 @@ void testGeneratePdfShouldGeneratePresentationDefinitionForOnlineSharingQrTypeWi } } - @Test - void testGeneratePdfShouldGenerateEmbeddedVCForOnlineSharingQrTypeWithEmptyDataShareUrl() throws Exception { - issuerDTO.setQr_code_type(QRCodeType.OnlineSharing); - when(objectMapper.writeValueAsString(any())).thenReturn("{\"credential\":\"data\"}"); - when(pixelPass.generateQRData(anyString(), anyString())).thenReturn("generated-qr-data"); - when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())) - .thenReturn("Test"); - - - try (MockedStatic mocked = mockStatic(Utilities.class)) { - mocked.when(() -> Utilities.encodeToString(any(), anyString())) - .thenReturn("base64-encoded-qr"); - - ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredentials( - "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, - "", "", "en"); - - verify(pixelPass).generateQRData(anyString(), anyString()); - verify(presentationService, never()).constructPresentationDefinition(any()); - assertNotNull(result); - } - } - @Test void testHandleMapWithListValue() throws Exception { Map skills = new HashMap<>(); skills.put("skills", List.of("Java", "Spring")); - vcCredentialResponse.getCredential().setCredentialSubject(skills); + ((VCCredentialProperties)vcCredentialResponse.getCredential()).setCredentialSubject(skills); credentialsSupportedResponse.getCredentialDefinition().getCredentialSubject() .put("skills", createDisplay("Skills")); credentialsSupportedResponse.setOrder(List.of("skills")); @@ -227,7 +207,7 @@ void testHandleMapWithListValue() throws Exception { when(objectMapper.writeValueAsString(presentationDef)) .thenReturn("{\"presentation\":\"definition\"}"); - ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredentials( + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, "https://example.com/share", "", "en"); @@ -236,9 +216,9 @@ void testHandleMapWithListValue() throws Exception { @Test void testNullFaceImageHandling() throws Exception { - Map mutableSubject = new HashMap<>(vcCredentialResponse.getCredential().getCredentialSubject()); + Map mutableSubject = new HashMap<>(((VCCredentialProperties)vcCredentialResponse.getCredential()).getCredentialSubject()); mutableSubject.remove("face"); - vcCredentialResponse.getCredential().setCredentialSubject(mutableSubject); + ((VCCredentialProperties)vcCredentialResponse.getCredential()).setCredentialSubject(mutableSubject); when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())) .thenReturn("Test"); @@ -248,7 +228,7 @@ void testNullFaceImageHandling() throws Exception { when(objectMapper.writeValueAsString(presentationDef)) .thenReturn("{\"presentation\":\"definition\"}"); - ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredentials( + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, "https://example.com/share", "", "en"); @@ -271,7 +251,7 @@ void testGeneratePdfWithNullOrder() throws Exception { mocked.when(() -> Utilities.encodeToString(any(), anyString())) .thenReturn("base64-encoded-qr"); - ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredentials( + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, "https://example.com/share", "", "en"); diff --git a/src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java index ecb894dd3..7c085ec76 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java @@ -5,6 +5,7 @@ import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.repository.ProofSigningKeyRepository; import io.mosip.mimoto.service.impl.CredentialRequestServiceImpl; +import io.mosip.mimoto.service.impl.LdpVcCredentialFormatHandler; import io.mosip.mimoto.util.*; import org.junit.After; import org.junit.Before; @@ -21,8 +22,11 @@ import java.util.Collections; import java.util.List; +import java.util.Map; + import static io.mosip.mimoto.util.TestUtilities.*; import static org.junit.Assert.*; +import static org.mockito.Mockito.when; @RunWith(SpringRunner.class) @SpringBootTest(classes = {CredentialRequestServiceImpl.class}) @@ -37,6 +41,9 @@ public class CredentialRequestServiceTest { @MockBean private EncryptionDecryptionUtil encryptionDecryptionUtil; + @MockBean + private CredentialFormatHandlerFactory credentialFormatHandlerFactory; + private final MockedStatic keyGenerationUtilMockedStatic = Mockito.mockStatic(KeyGenerationUtil.class, Mockito.withSettings().defaultAnswer(Mockito.CALLS_REAL_METHODS)); IssuerDTO issuerDTO; @@ -46,6 +53,7 @@ public class CredentialRequestServiceTest { public void setUp() { issuerId = "issuer1"; issuerDTO = getIssuerConfigDTO(issuerId); + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(new LdpVcCredentialFormatHandler()); } @After @@ -62,11 +70,14 @@ public void shouldHandleNullContextInCredentialSupportedResponse() throws Except CredentialIssuerWellKnownResponse issuerWellKnownResponse = new CredentialIssuerWellKnownResponse(); issuerWellKnownResponse.setCredentialIssuer("https://example-issuer.com"); + issuerWellKnownResponse.setCredentialConfigurationsSupported( + Map.of("CredentialType1", credentialsSupportedResponse) + ); VCCredentialRequest result = credentialRequestServiceImpl.buildRequest( issuerDTO, + "CredentialType1", issuerWellKnownResponse, - credentialsSupportedResponse, "test-cnonce", "walletId", "walletKey", @@ -86,10 +97,13 @@ public void shouldHandleEmptyContextInCredentialSupportedResponse() throws Excep CredentialIssuerWellKnownResponse issuerWellKnownResponse = new CredentialIssuerWellKnownResponse(); issuerWellKnownResponse.setCredentialIssuer("https://example-issuer.com"); + issuerWellKnownResponse.setCredentialConfigurationsSupported( + Map.of("CredentialType1", credentialsSupportedResponse) + ); VCCredentialRequest result = credentialRequestServiceImpl.buildRequest( issuerDTO, + "CredentialType1", issuerWellKnownResponse, - credentialsSupportedResponse, "test-cnonce", "walletId", "walletKey", @@ -110,11 +124,14 @@ public void shouldHandleExistingContextWithSpecificValue() throws Exception { CredentialIssuerWellKnownResponse issuerWellKnownResponse = new CredentialIssuerWellKnownResponse(); issuerWellKnownResponse.setCredentialIssuer("https://example-issuer.com"); + issuerWellKnownResponse.setCredentialConfigurationsSupported( + Map.of("CredentialType1", credentialsSupportedResponse) + ); VCCredentialRequest result = credentialRequestServiceImpl.buildRequest( issuerDTO, + "CredentialType1", issuerWellKnownResponse, - credentialsSupportedResponse, "test-cnonce", "walletId", "walletKey", @@ -130,13 +147,16 @@ public void shouldReturnFallbackAlgorithmWhenJwtProofTypeOfProofTypesSupportedIs CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupportedResponse("CredentialType1"); CredentialIssuerWellKnownResponse issuerWellKnownResponse = new CredentialIssuerWellKnownResponse(); issuerWellKnownResponse.setCredentialIssuer("https://example-issuer.com"); + issuerWellKnownResponse.setCredentialConfigurationsSupported( + Map.of("CredentialType1", credentialsSupportedResponse) + ); credentialsSupportedResponse.getProofTypesSupported().put("jwt", null); credentialRequestServiceImpl.buildRequest( issuerDTO, + "CredentialType1", issuerWellKnownResponse, - credentialsSupportedResponse, "test-cnonce", "walletId", "walletKey", @@ -155,14 +175,17 @@ public void shouldReturnFallbackAlgorithmWhenJwtProofTypeOfProofTypesSupportedIs CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupportedResponse("CredentialType1"); CredentialIssuerWellKnownResponse issuerWellKnownResponse = new CredentialIssuerWellKnownResponse(); issuerWellKnownResponse.setCredentialIssuer("https://example-issuer.com"); + issuerWellKnownResponse.setCredentialConfigurationsSupported( + Map.of("CredentialType1", credentialsSupportedResponse) + ); ProofTypesSupported proofTypesSupported = new ProofTypesSupported(); proofTypesSupported.setProofSigningAlgValuesSupported(Collections.emptyList()); credentialsSupportedResponse.getProofTypesSupported().put("jwt", proofTypesSupported); credentialRequestServiceImpl.buildRequest( issuerDTO, + "CredentialType1", issuerWellKnownResponse, - credentialsSupportedResponse, "test-cnonce", "walletId", "walletKey", @@ -181,13 +204,16 @@ public void shouldUseHighestPriorityAlgorithmInPredefinedSigningAlgoPrioritySetW CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupportedResponse("CredentialType1"); CredentialIssuerWellKnownResponse issuerWellKnownResponse = new CredentialIssuerWellKnownResponse(); issuerWellKnownResponse.setCredentialIssuer("https://example-issuer.com"); + issuerWellKnownResponse.setCredentialConfigurationsSupported( + Map.of("CredentialType1", credentialsSupportedResponse) + ); credentialsSupportedResponse.getProofTypesSupported().get("jwt").setProofSigningAlgValuesSupported(List.of("es256k")); credentialRequestServiceImpl.buildRequest( issuerDTO, + "CredentialType1", issuerWellKnownResponse, - credentialsSupportedResponse, "test-cnonce", "walletId", "walletKey", @@ -206,13 +232,16 @@ public void shouldUseFallbackPrioritySigningAlgorithmIfNoneOfIssuerSupportedAlgo CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupportedResponse("CredentialType1"); CredentialIssuerWellKnownResponse issuerWellKnownResponse = new CredentialIssuerWellKnownResponse(); issuerWellKnownResponse.setCredentialIssuer("https://example-issuer.com"); + issuerWellKnownResponse.setCredentialConfigurationsSupported( + Map.of("CredentialType1", credentialsSupportedResponse) + ); credentialsSupportedResponse.getProofTypesSupported().get("jwt").setProofSigningAlgValuesSupported(List.of("ps256")); credentialRequestServiceImpl.buildRequest( issuerDTO, + "CredentialType1", issuerWellKnownResponse, - credentialsSupportedResponse, "test-cnonce", "walletId", "walletKey", diff --git a/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java index c903b5984..6324681f1 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java @@ -98,18 +98,18 @@ public void shouldThrowExceptionIfDownloadedVCSignatureVerificationFailed() thro Mockito.when(issuersService.getIssuerDetails(issuerId)).thenReturn(issuerDTO); Mockito.when(issuersService.getIssuerConfiguration(issuerId)).thenReturn(issuerConfig); when(credentialRequestService.buildRequest(any(IssuerDTO.class), + any(String.class), any(CredentialIssuerWellKnownResponse.class), - any(CredentialsSupportedResponse.class), any(String.class), any(), any(), eq(false))).thenReturn(getVCCredentialRequestDTO()); - VCCredentialResponse vcCredentialResponse = getVCCredentialResponseDTO("CredentialType1"); + VerifiableCredentialResponse vcCredentialResponse = getVerifiableCredentialResponseDTO("CredentialType1"); when(restApiClient.postApi( any(String.class), any(MediaType.class), any(VCCredentialRequest.class), - eq(VCCredentialResponse.class), + eq(VerifiableCredentialResponse.class), any(String.class) )).thenReturn(vcCredentialResponse); - when(credentialVerifierService.verify(vcCredentialResponse)).thenReturn(false); + when(credentialVerifierService.verify(any(VCCredentialResponse.class))).thenReturn(false); VCVerificationException actualException = assertThrows(VCVerificationException.class, () -> credentialService.downloadCredentialAsPDF(issuerId, "CredentialType1", expectedTokenResponse, "once", "en")); @@ -121,22 +121,30 @@ public void shouldReturnDownloadedVCAsPDFIfSignatureVerificationIsSuccessful() t Mockito.when(issuersService.getIssuerDetails(issuerId)).thenReturn(issuerDTO); Mockito.when(issuersService.getIssuerConfiguration(issuerId)).thenReturn(issuerConfig); when(credentialRequestService.buildRequest(any(IssuerDTO.class), + any(String.class), any(CredentialIssuerWellKnownResponse.class), - any(CredentialsSupportedResponse.class), any(String.class), any(), any(), eq(false))).thenReturn(getVCCredentialRequestDTO()); - VCCredentialResponse vcCredentialResponse = getVCCredentialResponseDTO("CredentialType1"); + VerifiableCredentialResponse vcCredentialResponse = getVerifiableCredentialResponseDTO("CredentialType1"); when(restApiClient.postApi( any(String.class), any(MediaType.class), any(VCCredentialRequest.class), - eq(VCCredentialResponse.class), + eq(VerifiableCredentialResponse.class), any(String.class) )).thenReturn(vcCredentialResponse); - when(credentialVerifierService.verify(vcCredentialResponse)).thenReturn(true); + when(credentialVerifierService.verify(any(VCCredentialResponse.class))).thenReturn(true); issuerDTO.setQr_code_type(QRCodeType.None); ByteArrayInputStream expectedPDFByteArray = generatePdfFromHTML(); - Mockito.when(credentialUtilService.generatePdfForVerifiableCredentials("CredentialType1", vcCredentialResponse, issuerDTO, issuerConfig.getCredentialConfigurationsSupported().get("CredentialType1"), "", "once", "en")).thenReturn(expectedPDFByteArray); + Mockito.when(credentialUtilService.generatePdfForVerifiableCredential( + eq("CredentialType1"), + any(VCCredentialResponse.class), + eq(issuerDTO), + eq(issuerConfig.getCredentialConfigurationsSupported().get("CredentialType1")), + eq(""), + eq("once"), + eq("en") + )).thenReturn(expectedPDFByteArray); ByteArrayInputStream actualPDFByteArray = credentialService.downloadCredentialAsPDF(issuerId, "CredentialType1", expectedTokenResponse, "once", "en"); diff --git a/src/test/java/io/mosip/mimoto/service/CredentialVerifierServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialVerifierServiceTest.java index 3ce3ff681..16892a17a 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialVerifierServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialVerifierServiceTest.java @@ -52,7 +52,7 @@ public void setUp() throws Exception { .build(); vcCredentialResponse = VCCredentialResponse.builder() - .format("LDP_VC") + .format(CredentialFormat.LDP_VC.getValue()) .credential(credentialProperties) .build(); @@ -98,7 +98,7 @@ public void testVerifyJsonProcessingException() throws Exception { public void testVerifyWithNullCredential() throws Exception { // Arrange VCCredentialResponse nullCredentialResponse = VCCredentialResponse.builder() - .format("LDP_VC") + .format(CredentialFormat.LDP_VC.getValue()) .credential(null) .build(); diff --git a/src/test/java/io/mosip/mimoto/service/LdpVcCredentialFormatHandlerTest.java b/src/test/java/io/mosip/mimoto/service/LdpVcCredentialFormatHandlerTest.java new file mode 100644 index 000000000..e25b62890 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/service/LdpVcCredentialFormatHandlerTest.java @@ -0,0 +1,420 @@ +package io.mosip.mimoto.service; + +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.constant.CredentialFormat; +import io.mosip.mimoto.dto.mimoto.*; +import io.mosip.mimoto.service.impl.LdpVcCredentialFormatHandler; +import io.mosip.mimoto.util.LocaleUtils; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.MockedStatic; +import org.mockito.Spy; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.util.*; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class LdpVcCredentialFormatHandlerTest { + + @InjectMocks + private LdpVcCredentialFormatHandler ldpVcCredentialFormatHandler; + + private VCCredentialResponse vcCredentialResponse; + private VCCredentialProperties vcCredentialProperties; + private CredentialsSupportedResponse credentialsSupportedResponse; + private CredentialDefinitionResponseDto credentialDefinition; + @Spy + private ObjectMapper objectMapper; + + + @BeforeEach + void setUp() { + vcCredentialResponse = new VCCredentialResponse(); + vcCredentialProperties = new VCCredentialProperties(); + credentialsSupportedResponse = new CredentialsSupportedResponse(); + credentialDefinition = new CredentialDefinitionResponseDto(); + } + + @Test + void extractCredentialClaimsWithValidCredentialShouldReturnCredentialSubject() { + // Given + Map credentialSubject = new HashMap<>(); + credentialSubject.put("firstName", "John"); + credentialSubject.put("lastName", "Doe"); + credentialSubject.put("dateOfBirth", "1990-01-01"); + + vcCredentialProperties.setCredentialSubject(credentialSubject); + vcCredentialResponse.setCredential(vcCredentialProperties); + + // When + Map result = ldpVcCredentialFormatHandler.extractCredentialClaims(vcCredentialResponse); + + // Then + assertNotNull(result); + assertEquals(3, result.size()); + assertEquals("John", result.get("firstName")); + assertEquals("Doe", result.get("lastName")); + assertEquals("1990-01-01", result.get("dateOfBirth")); + } + + @Test + void extractCredentialClaimsWithNullCredentialSubjectShouldReturnNull() { + // Given + vcCredentialProperties.setCredentialSubject(null); + vcCredentialResponse.setCredential(vcCredentialProperties); + + // When + Map result = ldpVcCredentialFormatHandler.extractCredentialClaims(vcCredentialResponse); + + // Then + assertNull(result); + } + + @Test + void extractCredentialClaimsWithEmptyCredentialSubjectShouldReturnEmptyMap() { + // Given + Map credentialSubject = new HashMap<>(); + vcCredentialProperties.setCredentialSubject(credentialSubject); + vcCredentialResponse.setCredential(vcCredentialProperties); + + // When + Map result = ldpVcCredentialFormatHandler.extractCredentialClaims(vcCredentialResponse); + + // Then + assertNotNull(result); + assertTrue(result.isEmpty()); + } + + @Test + void loadDisplayPropertiesFromWellknownWithValidDataShouldReturnDisplayProperties() { + // Given + Map credentialProperties = new HashMap<>(); + credentialProperties.put("firstName", "John"); + credentialProperties.put("lastName", "Doe"); + + Map credentialSubjectConfig = createCredentialSubjectConfig(); + credentialDefinition.setCredentialSubject(credentialSubjectConfig); + credentialsSupportedResponse.setCredentialDefinition(credentialDefinition); + credentialsSupportedResponse.setOrder(Arrays.asList("firstName", "lastName")); + + try (MockedStatic mockedLocaleUtils = mockStatic(LocaleUtils.class)) { + mockedLocaleUtils.when(() -> LocaleUtils.resolveLocaleWithFallback(any(), eq("en"))) + .thenReturn("en"); + mockedLocaleUtils.when(() -> LocaleUtils.matchesLocale(eq("en"), eq("en"))) + .thenReturn(true); + + // When + LinkedHashMap> result = + ldpVcCredentialFormatHandler.loadDisplayPropertiesFromWellknown( + credentialProperties, credentialsSupportedResponse, "en"); + + // Then + assertNotNull(result); + assertEquals(2, result.size()); + assertTrue(result.containsKey("firstName")); + assertTrue(result.containsKey("lastName")); + + Map firstNameMap = result.get("firstName"); + assertNotNull(firstNameMap); + assertEquals(1, firstNameMap.size()); + assertEquals("John", firstNameMap.values().iterator().next()); + } + } + + @Test + void loadDisplayPropertiesFromWellknownWithNullCredentialDefinitionShouldReturnEmptyMap() { + // Given + Map credentialProperties = new HashMap<>(); + credentialProperties.put("firstName", "John"); + + credentialsSupportedResponse.setCredentialDefinition(null); + + // When + LinkedHashMap> result = + ldpVcCredentialFormatHandler.loadDisplayPropertiesFromWellknown( + credentialProperties, credentialsSupportedResponse, "en"); + + // Then + assertNotNull(result); + assertTrue(result.isEmpty()); + } + + @Test + void loadDisplayPropertiesFromWellknownWithNullCredentialSubjectShouldReturnEmptyMap() { + // Given + Map credentialProperties = new HashMap<>(); + credentialProperties.put("firstName", "John"); + + credentialDefinition.setCredentialSubject(null); + credentialsSupportedResponse.setCredentialDefinition(credentialDefinition); + + // When + LinkedHashMap> result = + ldpVcCredentialFormatHandler.loadDisplayPropertiesFromWellknown( + credentialProperties, credentialsSupportedResponse, "en"); + + // Then + assertNotNull(result); + assertTrue(result.isEmpty()); + } + + @Test + void loadDisplayPropertiesFromWellknownWithNullDisplayConfigMapShouldReturnEmptyMap() { + // Given + Map credentialProperties = new HashMap<>(); + credentialProperties.put("firstName", "John"); + + credentialDefinition.setCredentialSubject(null); + credentialsSupportedResponse.setCredentialDefinition(credentialDefinition); + + // When + LinkedHashMap> result = + ldpVcCredentialFormatHandler.loadDisplayPropertiesFromWellknown( + credentialProperties, credentialsSupportedResponse, "en"); + + // Then + assertNotNull(result); + assertTrue(result.isEmpty()); + } + + @Test + void loadDisplayPropertiesFromWellknownWithNullResolvedLocaleShouldReturnEmptyMap() { + // Given + Map credentialProperties = new HashMap<>(); + credentialProperties.put("firstName", "John"); + + Map credentialSubjectConfig = createCredentialSubjectConfig(); + credentialDefinition.setCredentialSubject(credentialSubjectConfig); + credentialsSupportedResponse.setCredentialDefinition(credentialDefinition); + + try (MockedStatic mockedLocaleUtils = mockStatic(LocaleUtils.class)) { + mockedLocaleUtils.when(() -> LocaleUtils.resolveLocaleWithFallback(any(), eq("fr"))) + .thenReturn(null); + + // When + LinkedHashMap> result = + ldpVcCredentialFormatHandler.loadDisplayPropertiesFromWellknown( + credentialProperties, credentialsSupportedResponse, "fr"); + + // Then + assertNotNull(result); + assertTrue(result.isEmpty()); + } + } + + @Test + void loadDisplayPropertiesFromWellknownWithCustomOrderShouldRespectOrder() { + // Given + Map credentialProperties = new HashMap<>(); + credentialProperties.put("firstName", "John"); + credentialProperties.put("lastName", "Doe"); + + Map credentialSubjectConfig = createCredentialSubjectConfig(); + credentialDefinition.setCredentialSubject(credentialSubjectConfig); + credentialsSupportedResponse.setCredentialDefinition(credentialDefinition); + credentialsSupportedResponse.setOrder(Arrays.asList("lastName", "firstName")); // Custom order + + try (MockedStatic mockedLocaleUtils = mockStatic(LocaleUtils.class)) { + mockedLocaleUtils.when(() -> LocaleUtils.resolveLocaleWithFallback(any(), eq("en"))) + .thenReturn("en"); + mockedLocaleUtils.when(() -> LocaleUtils.matchesLocale(eq("en"), eq("en"))) + .thenReturn(true); + + // When + LinkedHashMap> result = + ldpVcCredentialFormatHandler.loadDisplayPropertiesFromWellknown( + credentialProperties, credentialsSupportedResponse, "en"); + + // Then + assertNotNull(result); + assertEquals(2, result.size()); + List keyOrder = new ArrayList<>(result.keySet()); + assertEquals("lastName", keyOrder.get(0)); + assertEquals("firstName", keyOrder.get(1)); + } + } + + @Test + void loadDisplayPropertiesFromWellknownWithEmptyOrderShouldUseNaturalOrder() { + // Given + Map credentialProperties = new HashMap<>(); + credentialProperties.put("firstName", "John"); + credentialProperties.put("lastName", "Doe"); + + Map credentialSubjectConfig = createCredentialSubjectConfig(); + credentialDefinition.setCredentialSubject(credentialSubjectConfig); + credentialsSupportedResponse.setCredentialDefinition(credentialDefinition); + credentialsSupportedResponse.setOrder(new ArrayList<>()); // Empty order + + try (MockedStatic mockedLocaleUtils = mockStatic(LocaleUtils.class)) { + mockedLocaleUtils.when(() -> LocaleUtils.resolveLocaleWithFallback(any(), eq("en"))) + .thenReturn("en"); + mockedLocaleUtils.when(() -> LocaleUtils.matchesLocale(eq("en"), eq("en"))) + .thenReturn(true); + + // When + LinkedHashMap> result = + ldpVcCredentialFormatHandler.loadDisplayPropertiesFromWellknown( + credentialProperties, credentialsSupportedResponse, "en"); + + // Then + assertNotNull(result); + assertEquals(2, result.size()); + assertTrue(result.containsKey("firstName")); + assertTrue(result.containsKey("lastName")); + } + } + + @Test + void loadDisplayPropertiesFromWellknownWithNullValuesShouldSkipNullValues() { + // Given + Map credentialProperties = new HashMap<>(); + credentialProperties.put("firstName", "John"); + credentialProperties.put("lastName", null); // Null value + + Map credentialSubjectConfig = createCredentialSubjectConfig(); + credentialDefinition.setCredentialSubject(credentialSubjectConfig); + credentialsSupportedResponse.setCredentialDefinition(credentialDefinition); + + try (MockedStatic mockedLocaleUtils = mockStatic(LocaleUtils.class)) { + mockedLocaleUtils.when(() -> LocaleUtils.resolveLocaleWithFallback(any(), eq("en"))) + .thenReturn("en"); + mockedLocaleUtils.when(() -> LocaleUtils.matchesLocale(eq("en"), eq("en"))) + .thenReturn(true); + + // When + LinkedHashMap> result = + ldpVcCredentialFormatHandler.loadDisplayPropertiesFromWellknown( + credentialProperties, credentialsSupportedResponse, "en"); + + // Then + assertNotNull(result); + assertEquals(1, result.size()); // Only firstName should be included + assertTrue(result.containsKey("firstName")); + assertFalse(result.containsKey("lastName")); + } + } + + @Test + void buildCredentialRequestWithValidCredentialsSupportedResponseShouldReturnConfiguredRequest() { + // Given + VCCredentialRequest.VCCredentialRequestBuilder builder = VCCredentialRequest.builder(); + + List types = Arrays.asList("VerifiableCredential", "IdentityCredential"); + List context = Arrays.asList("https://www.w3.org/2018/credentials/v1", "https://example.com/contexts/identity/v1"); + + credentialDefinition.setType(types); + credentialDefinition.setContext(context); + credentialsSupportedResponse.setCredentialDefinition(credentialDefinition); + + String credentialType = "IdentityCredential"; + VCCredentialRequestProof proof = VCCredentialRequestProof.builder() + .proofType("jwt") + .jwt("sample.jwt.token") + .build(); + + // When + VCCredentialRequest result = ldpVcCredentialFormatHandler.buildCredentialRequest( + proof, credentialsSupportedResponse, credentialType); + + // Then + assertNotNull(result); + assertNotNull(result.getCredentialDefinition()); + assertEquals(types, result.getCredentialDefinition().getType()); + assertEquals(context, result.getCredentialDefinition().getContext()); + } + + @Test + void buildCredentialRequestWithNullContextShouldUseDefaultContext() { + // Given + VCCredentialRequest.VCCredentialRequestBuilder builder = VCCredentialRequest.builder(); + + List types = Arrays.asList("VerifiableCredential", "IdentityCredential"); + + credentialDefinition.setType(types); + credentialDefinition.setContext(null); // Null context + credentialsSupportedResponse.setCredentialDefinition(credentialDefinition); + + String credentialType = "IdentityCredential"; + VCCredentialRequestProof proof = VCCredentialRequestProof.builder() + .proofType("jwt") // or whatever proof type you expect + .jwt("sample.jwt.token") + .build(); + + // When + VCCredentialRequest result = ldpVcCredentialFormatHandler.buildCredentialRequest( + proof, credentialsSupportedResponse, credentialType); + + // Then + assertNotNull(result); + assertNotNull(result.getCredentialDefinition()); + assertEquals(types, result.getCredentialDefinition().getType()); + assertEquals(List.of("https://www.w3.org/2018/credentials/v1"), result.getCredentialDefinition().getContext()); + } + + @Test + void buildCredentialRequestWithEmptyContextShouldUseDefaultContext() { + // Given + VCCredentialRequest.VCCredentialRequestBuilder builder = VCCredentialRequest.builder(); + + List types = Arrays.asList("VerifiableCredential", "IdentityCredential"); + + credentialDefinition.setType(types); + credentialDefinition.setContext(new ArrayList<>()); // Empty context + credentialsSupportedResponse.setCredentialDefinition(credentialDefinition); + + String credentialType = "IdentityCredential"; + VCCredentialRequestProof proof = VCCredentialRequestProof.builder() + .proofType("jwt") // or whatever proof type you expect + .jwt("sample.jwt.token") + .build(); + + // When + VCCredentialRequest result = ldpVcCredentialFormatHandler.buildCredentialRequest( + proof, credentialsSupportedResponse, credentialType); + + // Then + assertNotNull(result); + assertNotNull(result.getCredentialDefinition()); + assertEquals(types, result.getCredentialDefinition().getType()); + assertEquals(List.of("https://www.w3.org/2018/credentials/v1"), result.getCredentialDefinition().getContext()); + } + + @Test + void getSupportedFormatShouldReturnLdpVcFormat() { + // When + String result = ldpVcCredentialFormatHandler.getSupportedFormat(); + + // Then + assertEquals(CredentialFormat.LDP_VC.getFormat(), result); + } + + // Helper methods + private Map createCredentialSubjectConfig() { + Map config = new LinkedHashMap<>(); + + // Create firstName display config + CredentialDisplayResponseDto firstNameDto = new CredentialDisplayResponseDto(); + CredentialIssuerDisplayResponse firstNameDisplay = new CredentialIssuerDisplayResponse(); + firstNameDisplay.setName("First Name"); + firstNameDisplay.setLocale("en"); + firstNameDto.setDisplay(List.of(firstNameDisplay)); + config.put("firstName", firstNameDto); + + // Create lastName display config + CredentialDisplayResponseDto lastNameDto = new CredentialDisplayResponseDto(); + CredentialIssuerDisplayResponse lastNameDisplay = new CredentialIssuerDisplayResponse(); + lastNameDisplay.setName("Last Name"); + lastNameDisplay.setLocale("en"); + lastNameDto.setDisplay(List.of(lastNameDisplay)); + config.put("lastName", lastNameDto); + + return config; + } +} diff --git a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java index 9f83e54c5..310831bd7 100644 --- a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.dto.mimoto.VCCredentialProperties; import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; import io.mosip.mimoto.dto.openid.presentation.PresentationRequestDTO; import io.mosip.mimoto.exception.VPNotCreatedException; @@ -39,7 +40,6 @@ public class PresentationServiceTest { @Before public void setup() throws JsonProcessingException { ReflectionTestUtils.setField(presentationService, "injiOvpRedirectURLPattern", "%s#vp_token=%s&presentation_submission=%s"); - ReflectionTestUtils.setField(presentationService, "dataShareUrl", "test_resource"); ReflectionTestUtils.setField(presentationService, "maximumResponseHeaderSize", 65536); when(objectMapper.writeValueAsString(any())).thenReturn("test-data"); } @@ -48,7 +48,10 @@ public void setup() throws JsonProcessingException { public void credentialProofMatchingWithVPRequest() throws Exception { VCCredentialResponse vcCredentialResponse = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); + when(dataShareService.downloadCredentialFromDataShare(eq(presentationRequestDTO))).thenReturn(vcCredentialResponse); + when(objectMapper.convertValue(eq(vcCredentialResponse.getCredential()), eq(VCCredentialProperties.class))) + .thenReturn((VCCredentialProperties) vcCredentialResponse.getCredential()); String expectedRedirectUrl = "test_redirect_uri#vp_token=dGVzdC1kYXRh&presentation_submission=test-data"; String actualRedirectUrl = presentationService.authorizePresentation(TestUtilities.getPresentationRequestDTO()); @@ -61,7 +64,8 @@ public void credentialProofMismatchWithVPRequest() throws IOException { VCCredentialResponse vcCredentialResponse = TestUtilities.getVCCredentialResponseDTO("RSASignature2020"); PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); when(dataShareService.downloadCredentialFromDataShare(eq(presentationRequestDTO))).thenReturn(vcCredentialResponse); - + when(objectMapper.convertValue(eq(vcCredentialResponse.getCredential()), eq(VCCredentialProperties.class))) + .thenReturn((VCCredentialProperties) vcCredentialResponse.getCredential()); presentationService.authorizePresentation(TestUtilities.getPresentationRequestDTO()); } } diff --git a/src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java b/src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java new file mode 100644 index 000000000..5d14135b6 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java @@ -0,0 +1,398 @@ +package io.mosip.mimoto.service; + +import com.authlete.sd.Disclosure; +import com.authlete.sd.SDJWT; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.constant.CredentialFormat; +import io.mosip.mimoto.dto.mimoto.*; +import io.mosip.mimoto.service.impl.VcSdJwtCredentialFormatHandler; +import io.mosip.mimoto.util.LocaleUtils; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockedStatic; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.util.*; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class VcSdJwtCredentialFormatHandlerTest { + + @Mock + private ObjectMapper objectMapper; + + @InjectMocks + private VcSdJwtCredentialFormatHandler vcSdJwtCredentialFormatHandler; + + private VCCredentialResponse vcCredentialResponse; + private CredentialsSupportedResponse credentialsSupportedResponse; + private String sampleSdJwtString; + private String sampleJwtString; + + @BeforeEach + void setUp() { + vcCredentialResponse = new VCCredentialResponse(); + credentialsSupportedResponse = new CredentialsSupportedResponse(); + + // Sample SD-JWT string (simplified for testing) + sampleSdJwtString = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2V4YW1wbGUuY29tIiwic3ViIjoiMTIzNDU2Nzg5MCIsIm5hbWUiOiJKb2huIERvZSIsImFkbWluIjp0cnVlLCJpYXQiOjE1MTYyMzkwMjJ9.invalid"; + + // Sample JWT string for payload parsing + sampleJwtString = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2V4YW1wbGUuY29tIiwic3ViIjoiMTIzNDU2Nzg5MCIsIm5hbWUiOiJKb2huIERvZSIsImFkbWluIjp0cnVlLCJpYXQiOjE1MTYyMzkwMjJ9.invalid"; + } + + @Test + void extractCredentialClaimsWithStringCredentialShouldReturnClaims() throws JsonProcessingException { + vcCredentialResponse.setCredential(sampleSdJwtString); + + try (MockedStatic mockedSdJwt = mockStatic(SDJWT.class)) { + SDJWT mockSdJwt = mock(SDJWT.class); + mockedSdJwt.when(() -> SDJWT.parse(sampleSdJwtString)).thenReturn(mockSdJwt); + when(mockSdJwt.getCredentialJwt()).thenReturn(sampleJwtString); + when(mockSdJwt.getDisclosures()).thenReturn(new ArrayList<>()); + + Map jwtPayload = createSampleJwtPayload(); + when(objectMapper.readValue(anyString(), eq(Map.class))).thenReturn(jwtPayload); + + Map result = vcSdJwtCredentialFormatHandler.extractCredentialClaims(vcCredentialResponse); + + assertNotNull(result); + assertTrue(result.containsKey("credentialSubject")); + Map subject = (Map) result.get("credentialSubject"); + assertEquals("John Doe", subject.get("name")); + assertEquals(true, subject.get("admin")); + assertFalse(subject.containsKey("iss")); + assertFalse(subject.containsKey("sub")); + assertFalse(subject.containsKey("iat")); + assertTrue(result.containsKey("disclosures")); + assertTrue(((Map) result.get("disclosures")).isEmpty()); + } + } + + @Test + void extractCredentialClaimsWithNonStringCredentialShouldReturnEmptyMap() { + // Given + vcCredentialResponse.setCredential(new Object()); + + // When + Map result = vcSdJwtCredentialFormatHandler.extractCredentialClaims(vcCredentialResponse); + + // Then + assertNotNull(result); + assertTrue(result.isEmpty()); + } + + @Test + void extractCredentialClaimsWithInvalidSdJwtShouldReturnEmptyMap() { + // Given + vcCredentialResponse.setCredential("invalid-sd-jwt"); + + try (MockedStatic mockedSdJwt = mockStatic(SDJWT.class)) { + mockedSdJwt.when(() -> SDJWT.parse("invalid-sd-jwt")) + .thenThrow(new IllegalArgumentException("Invalid SD-JWT")); + + // When + Map result = vcSdJwtCredentialFormatHandler.extractCredentialClaims(vcCredentialResponse); + + // Then + assertNotNull(result); + assertTrue(result.isEmpty()); + } + } + + @Test + void extractCredentialClaimsWithCredentialSubjectShouldReturnCredentialSubject() throws JsonProcessingException { + vcCredentialResponse.setCredential(sampleSdJwtString); + Map credentialSubject = new HashMap<>(); + credentialSubject.put("firstName", "John"); + credentialSubject.put("lastName", "Doe"); + + try (MockedStatic mockedSdJwt = mockStatic(SDJWT.class)) { + SDJWT mockSdJwt = mock(SDJWT.class); + mockedSdJwt.when(() -> SDJWT.parse(sampleSdJwtString)).thenReturn(mockSdJwt); + when(mockSdJwt.getCredentialJwt()).thenReturn(sampleJwtString); + when(mockSdJwt.getDisclosures()).thenReturn(new ArrayList<>()); + + Map jwtPayload = new HashMap<>(); + jwtPayload.put("credentialSubject", credentialSubject); + when(objectMapper.readValue(anyString(), eq(Map.class))).thenReturn(jwtPayload); + + Map result = vcSdJwtCredentialFormatHandler.extractCredentialClaims(vcCredentialResponse); + + assertNotNull(result); + assertTrue(result.containsKey("credentialSubject")); + Map subject = (Map) result.get("credentialSubject"); + assertEquals(credentialSubject, subject); + assertEquals("John", subject.get("firstName")); + assertEquals("Doe", subject.get("lastName")); + } + } + + @Test + void extractCredentialClaimsWithDisclosuresShouldIncludeDisclosedClaims() throws JsonProcessingException { + vcCredentialResponse.setCredential(sampleSdJwtString); + + try (MockedStatic mockedSdJwt = mockStatic(SDJWT.class)) { + SDJWT mockSdJwt = mock(SDJWT.class); + Disclosure mockDisclosure = mock(Disclosure.class); + List disclosures = Arrays.asList(mockDisclosure); + + mockedSdJwt.when(() -> SDJWT.parse(sampleSdJwtString)).thenReturn(mockSdJwt); + when(mockSdJwt.getCredentialJwt()).thenReturn(sampleJwtString); + when(mockSdJwt.getDisclosures()).thenReturn(disclosures); + when(mockDisclosure.getClaimName()).thenReturn("disclosedClaim"); + when(mockDisclosure.getClaimValue()).thenReturn("disclosedValue"); + + Map jwtPayload = createSampleJwtPayload(); + when(objectMapper.readValue(anyString(), eq(Map.class))).thenReturn(jwtPayload); + + Map result = vcSdJwtCredentialFormatHandler.extractCredentialClaims(vcCredentialResponse); + + assertNotNull(result); + assertTrue(result.containsKey("credentialSubject")); + Map subject = (Map) result.get("credentialSubject"); + assertEquals("John Doe", subject.get("name")); + assertTrue(result.containsKey("disclosures")); + Map disclosuresMap = (Map) result.get("disclosures"); + assertEquals("disclosedValue", disclosuresMap.get("disclosedClaim")); + } + } + + + @Test + void extractCredentialClaimsWithNullCredentialJwtShouldHandleGracefully() { + vcCredentialResponse.setCredential(sampleSdJwtString); + + try (MockedStatic mockedSdJwt = mockStatic(SDJWT.class)) { + SDJWT mockSdJwt = mock(SDJWT.class); + mockedSdJwt.when(() -> SDJWT.parse(sampleSdJwtString)).thenReturn(mockSdJwt); + when(mockSdJwt.getCredentialJwt()).thenReturn(null); + when(mockSdJwt.getDisclosures()).thenReturn(new ArrayList<>()); + + Map result = vcSdJwtCredentialFormatHandler.extractCredentialClaims(vcCredentialResponse); + + assertNotNull(result); + // Both credentialSubject and disclosures should be empty maps + assertTrue(result.containsKey("credentialSubject")); + assertTrue(((Map) result.get("credentialSubject")).isEmpty()); + assertTrue(result.containsKey("disclosures")); + assertTrue(((Map) result.get("disclosures")).isEmpty()); + } + } + + @Test + void loadDisplayPropertiesFromWellknownWithValidDataShouldReturnDisplayProperties() { + // Given + Map credentialProperties = new HashMap<>(); + credentialProperties.put("name", "John Doe"); + credentialProperties.put("age", 30); + + Map claims = createSampleClaims(); + credentialsSupportedResponse.setClaims(claims); + credentialsSupportedResponse.setOrder(Arrays.asList("name", "age")); + + CredentialDisplayResponseDto nameDto = createCredentialDisplayResponseDto("Name", "en"); + CredentialDisplayResponseDto ageDto = createCredentialDisplayResponseDto("Age", "en"); + + when(objectMapper.convertValue(any(), eq(CredentialDisplayResponseDto.class))) + .thenReturn(nameDto, ageDto); + + try (MockedStatic mockedLocaleUtils = mockStatic(LocaleUtils.class)) { + mockedLocaleUtils.when(() -> LocaleUtils.resolveLocaleWithFallback(any(), eq("en"))) + .thenReturn("en"); + mockedLocaleUtils.when(() -> LocaleUtils.matchesLocale(eq("en"), eq("en"))) + .thenReturn(true); + + // When + LinkedHashMap> result = + vcSdJwtCredentialFormatHandler.loadDisplayPropertiesFromWellknown( + credentialProperties, credentialsSupportedResponse, "en"); + + // Then + assertNotNull(result); + assertEquals(2, result.size()); + assertTrue(result.containsKey("name")); + assertTrue(result.containsKey("age")); + } + } + + @Test + void loadDisplayPropertiesFromWellknownWithNestedClaimsShouldHandleCorrectly() { + // Given + Map credentialProperties = new HashMap<>(); + credentialProperties.put("name", "John Doe"); + + Map nestedClaims = new HashMap<>(); + nestedClaims.put("name", new HashMap<>()); + + Map wrappedClaims = new HashMap<>(); + wrappedClaims.put("wrapper", nestedClaims); + + credentialsSupportedResponse.setClaims(wrappedClaims); + + CredentialDisplayResponseDto nameDto = createCredentialDisplayResponseDto("Name", "en"); + when(objectMapper.convertValue(any(), eq(CredentialDisplayResponseDto.class))) + .thenReturn(nameDto); + + try (MockedStatic mockedLocaleUtils = mockStatic(LocaleUtils.class)) { + mockedLocaleUtils.when(() -> LocaleUtils.resolveLocaleWithFallback(any(), eq("en"))) + .thenReturn("en"); + mockedLocaleUtils.when(() -> LocaleUtils.matchesLocale(eq("en"), eq("en"))) + .thenReturn(true); + + // When + LinkedHashMap> result = + vcSdJwtCredentialFormatHandler.loadDisplayPropertiesFromWellknown( + credentialProperties, credentialsSupportedResponse, "en"); + + // Then + assertNotNull(result); + assertEquals(1, result.size()); + assertTrue(result.containsKey("name")); + } + } + + @Test + void loadDisplayPropertiesFromWellknownWithNullClaimsShouldReturnEmptyMap() { + // Given + Map credentialProperties = new HashMap<>(); + credentialsSupportedResponse.setClaims(null); + + // When + LinkedHashMap> result = + vcSdJwtCredentialFormatHandler.loadDisplayPropertiesFromWellknown( + credentialProperties, credentialsSupportedResponse, "en"); + + // Then + assertNotNull(result); + assertTrue(result.isEmpty()); + } + + @Test + void loadDisplayPropertiesFromWellknownWithNullResolvedLocaleShouldReturnEmptyMap() { + // Given + Map credentialProperties = new HashMap<>(); + credentialProperties.put("name", "John Doe"); + + Map claims = createSampleClaims(); + credentialsSupportedResponse.setClaims(claims); + + CredentialDisplayResponseDto nameDto = createCredentialDisplayResponseDto("Name", "en"); + when(objectMapper.convertValue(any(), eq(CredentialDisplayResponseDto.class))) + .thenReturn(nameDto); + + try (MockedStatic mockedLocaleUtils = mockStatic(LocaleUtils.class)) { + mockedLocaleUtils.when(() -> LocaleUtils.resolveLocaleWithFallback(any(), eq("fr"))) + .thenReturn(null); + + // When + LinkedHashMap> result = + vcSdJwtCredentialFormatHandler.loadDisplayPropertiesFromWellknown( + credentialProperties, credentialsSupportedResponse, "fr"); + + // Then + assertNotNull(result); + assertTrue(result.isEmpty()); + } + } + + @Test + void loadDisplayPropertiesFromWellknownWithCustomOrderShouldRespectOrder() { + // Given + Map credentialProperties = new HashMap<>(); + credentialProperties.put("name", "John Doe"); + credentialProperties.put("age", 30); + + Map claims = createSampleClaims(); + credentialsSupportedResponse.setClaims(claims); + credentialsSupportedResponse.setOrder(Arrays.asList("age", "name")); // Custom order + + CredentialDisplayResponseDto nameDto = createCredentialDisplayResponseDto("Name", "en"); + CredentialDisplayResponseDto ageDto = createCredentialDisplayResponseDto("Age", "en"); + + when(objectMapper.convertValue(any(), eq(CredentialDisplayResponseDto.class))) + .thenReturn(nameDto, ageDto); + + try (MockedStatic mockedLocaleUtils = mockStatic(LocaleUtils.class)) { + mockedLocaleUtils.when(() -> LocaleUtils.resolveLocaleWithFallback(any(), eq("en"))) + .thenReturn("en"); + mockedLocaleUtils.when(() -> LocaleUtils.matchesLocale(eq("en"), eq("en"))) + .thenReturn(true); + + // When + LinkedHashMap> result = + vcSdJwtCredentialFormatHandler.loadDisplayPropertiesFromWellknown( + credentialProperties, credentialsSupportedResponse, "en"); + + // Then + assertNotNull(result); + assertEquals(2, result.size()); + List keyOrder = new ArrayList<>(result.keySet()); + assertEquals("age", keyOrder.get(0)); + assertEquals("name", keyOrder.get(1)); + } + } + + @Test + void buildCredentialRequestShouldSetVctAndReturnBuiltRequest() { + // Given + VCCredentialRequest.VCCredentialRequestBuilder builder = VCCredentialRequest.builder(); + VCCredentialRequestProof proof = VCCredentialRequestProof.builder() + .proofType("jwt") // or whatever proof type you expect + .jwt("sample.jwt.token") + .build(); + String credentialType = "IdentityCredential"; + + // When + VCCredentialRequest result = vcSdJwtCredentialFormatHandler.buildCredentialRequest( + proof, credentialsSupportedResponse, credentialType); + + // Then + assertNotNull(result); + // Note: We can't directly verify the vct value as it's set on the builder, + // but we can verify that a built request is returned + } + + @Test + void getSupportedFormatShouldReturnCorrectFormat() { + // When + String result = vcSdJwtCredentialFormatHandler.getSupportedFormat(); + + // Then + assertEquals(CredentialFormat.VC_SD_JWT.getFormat(), result); + } + + // Helper methods + private Map createSampleJwtPayload() { + Map payload = new HashMap<>(); + payload.put("iss", "https://example.com"); + payload.put("sub", "1234567890"); + payload.put("name", "John Doe"); + payload.put("admin", true); + payload.put("iat", 1516239022); + return payload; + } + + private Map createSampleClaims() { + Map claims = new HashMap<>(); + claims.put("name", new HashMap<>()); + claims.put("age", new HashMap<>()); + return claims; + } + + private CredentialDisplayResponseDto createCredentialDisplayResponseDto(String name, String locale) { + CredentialDisplayResponseDto dto = new CredentialDisplayResponseDto(); + CredentialIssuerDisplayResponse display = new CredentialIssuerDisplayResponse(); + display.setName(name); + display.setLocale(locale); + dto.setDisplay(Arrays.asList(display)); + return dto; + } +} diff --git a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java index 334a9f7db..3535a8d4c 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java @@ -1,16 +1,15 @@ package io.mosip.mimoto.service; import com.fasterxml.jackson.databind.ObjectMapper; -import io.mosip.mimoto.model.CredentialMetadata; -import io.mosip.mimoto.model.VerifiableCredential; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.dto.resident.WalletCredentialResponseDTO; import io.mosip.mimoto.exception.*; +import io.mosip.mimoto.model.CredentialMetadata; +import io.mosip.mimoto.model.VerifiableCredential; import io.mosip.mimoto.repository.WalletCredentialsRepository; import io.mosip.mimoto.service.impl.WalletCredentialServiceImpl; -import io.mosip.mimoto.util.CredentialProcessor; import io.mosip.mimoto.util.EncryptionDecryptionUtil; import org.junit.Before; import org.junit.Test; @@ -48,7 +47,7 @@ public class WalletCredentialServiceTest { private ObjectMapper objectMapper; @Mock - private CredentialProcessor credentialProcessor; + private CredentialService credentialService; @Mock private CredentialPDFGeneratorService credentialPDFGeneratorService; @@ -101,7 +100,7 @@ public void shouldDownloadVCAndStoreInDBSuccessfully() throws Exception { expectedResponse.setCredentialId(credentialId); when(walletCredentialsRepository.existsByIssuerIdAndCredentialTypeAndWalletId(mosipIssuerId, credentialType, walletId)).thenReturn(false); - when(credentialProcessor.downloadCredentialAndStoreInDB(tokenResponse, credentialType, walletId, base64Key, mosipIssuerId, locale)) + when(credentialService.downloadCredentialAndStoreInDB(tokenResponse, credentialType, walletId, base64Key, mosipIssuerId, locale)) .thenReturn(expectedResponse); VerifiableCredentialResponseDTO actualResponse = walletCredentialService.downloadVCAndStoreInDB( @@ -109,7 +108,7 @@ public void shouldDownloadVCAndStoreInDBSuccessfully() throws Exception { assertEquals(expectedResponse, actualResponse); verify(walletCredentialsRepository).existsByIssuerIdAndCredentialTypeAndWalletId(mosipIssuerId, credentialType, walletId); - verify(credentialProcessor).downloadCredentialAndStoreInDB(tokenResponse, credentialType, walletId, base64Key, mosipIssuerId, locale); + verify(credentialService).downloadCredentialAndStoreInDB(tokenResponse, credentialType, walletId, base64Key, mosipIssuerId, locale); } @Test @@ -122,7 +121,7 @@ public void shouldThrowDuplicateCredentialExceptionForMosipIssuer() { assertEquals(CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), exception.getErrorCode()); assertEquals("credential_download_error --> Duplicate credential for issuer and type", exception.getMessage()); verify(walletCredentialsRepository).existsByIssuerIdAndCredentialTypeAndWalletId("Mosip", credentialType, walletId); - verifyNoInteractions(credentialProcessor); + verifyNoInteractions(credentialService); } @Test @@ -130,14 +129,14 @@ public void shouldFetchAndStoreNonMosipIssuerCredential() throws Exception { VerifiableCredentialResponseDTO expectedResponse = new VerifiableCredentialResponseDTO(); expectedResponse.setCredentialId(credentialId); - when(credentialProcessor.downloadCredentialAndStoreInDB(tokenResponse, credentialType, walletId, base64Key, issuerId, locale)) + when(credentialService.downloadCredentialAndStoreInDB(tokenResponse, credentialType, walletId, base64Key, issuerId, locale)) .thenReturn(expectedResponse); VerifiableCredentialResponseDTO actualResponse = walletCredentialService.downloadVCAndStoreInDB( issuerId, credentialType, tokenResponse, locale, walletId, base64Key); assertEquals(expectedResponse, actualResponse); - verify(credentialProcessor).downloadCredentialAndStoreInDB(tokenResponse, credentialType, walletId, base64Key, issuerId, locale); + verify(credentialService).downloadCredentialAndStoreInDB(tokenResponse, credentialType, walletId, base64Key, issuerId, locale); } @Test @@ -145,7 +144,7 @@ public void shouldThrowExternalServiceUnavailableException() throws Exception { String mosipIssuerId = "Mosip"; // Use Mosip to trigger repository check when(walletCredentialsRepository.existsByIssuerIdAndCredentialTypeAndWalletId(mosipIssuerId, credentialType, walletId)).thenReturn(false); - when(credentialProcessor.downloadCredentialAndStoreInDB(any(), anyString(), anyString(), anyString(), anyString(), anyString())) + when(credentialService.downloadCredentialAndStoreInDB(any(), anyString(), anyString(), anyString(), anyString(), anyString())) .thenThrow(new ExternalServiceUnavailableException("SERVICE_UNAVAILABLE", "Service unavailable")); ExternalServiceUnavailableException exception = assertThrows(ExternalServiceUnavailableException.class, () -> @@ -154,7 +153,7 @@ public void shouldThrowExternalServiceUnavailableException() throws Exception { assertEquals("SERVICE_UNAVAILABLE", exception.getErrorCode()); assertEquals("SERVICE_UNAVAILABLE --> Service unavailable", exception.getMessage()); verify(walletCredentialsRepository).existsByIssuerIdAndCredentialTypeAndWalletId(mosipIssuerId, credentialType, walletId); - verify(credentialProcessor).downloadCredentialAndStoreInDB(tokenResponse, credentialType, walletId, base64Key, mosipIssuerId, locale); + verify(credentialService).downloadCredentialAndStoreInDB(tokenResponse, credentialType, walletId, base64Key, mosipIssuerId, locale); } @Test @@ -250,7 +249,7 @@ public void shouldFetchVerifiableCredentialSuccessfully() throws Exception { // Setup PDF stream ByteArrayInputStream pdfContent = new ByteArrayInputStream("PDF Content".getBytes()); - when(credentialPDFGeneratorService.generatePdfForVerifiableCredentials( + when(credentialPDFGeneratorService.generatePdfForVerifiableCredential( eq(credentialType), any(VCCredentialResponse.class), eq(issuerDTO), @@ -272,7 +271,7 @@ public void shouldFetchVerifiableCredentialSuccessfully() throws Exception { verify(encryptionDecryptionUtil).decryptCredential("encryptedCredential", base64Key); verify(issuersService).getIssuerDetails(issuerId); verify(issuersService).getIssuerConfig(issuerId, credentialType); - verify(credentialPDFGeneratorService).generatePdfForVerifiableCredentials( + verify(credentialPDFGeneratorService).generatePdfForVerifiableCredential( eq(credentialType), any(VCCredentialResponse.class), eq(issuerDTO), @@ -418,7 +417,7 @@ public void shouldThrowCredentialProcessingExceptionOnPdfGenerationException() t IssuerConfig issuerConfig = new IssuerConfig(new IssuerDTO(), new CredentialIssuerWellKnownResponse(), supportedResponse); when(issuersService.getIssuerConfig(issuerId, credentialType)).thenReturn(issuerConfig); - when(credentialPDFGeneratorService.generatePdfForVerifiableCredentials(any(), any(), any(), any(), any(), any(), any())) + when(credentialPDFGeneratorService.generatePdfForVerifiableCredential(any(), any(), any(), any(), any(), any(), any())) .thenThrow(new RuntimeException("PDF error")); CredentialProcessingException exception = assertThrows(CredentialProcessingException.class, () -> diff --git a/src/test/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidatorTest.java b/src/test/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidatorTest.java index f9ccab8b9..988d6ab58 100644 --- a/src/test/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidatorTest.java +++ b/src/test/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidatorTest.java @@ -245,7 +245,6 @@ void shouldDetectMissingMandatoryFieldsOfCredentialSupportedDisplayResponse() { Validation failed: credentialConfigurationsSupported[CredentialType1].display[0].backgroundColor: must not be blank credentialConfigurationsSupported[CredentialType1].display[0].textColor: must not be blank - credentialConfigurationsSupported[CredentialType1].display[0].backgroundImage: must not be null credentialConfigurationsSupported[CredentialType1].display[0].name: must not be blank credentialConfigurationsSupported[CredentialType1].display[0].locale: must not be blank credentialConfigurationsSupported[CredentialType1].display[0].logo: must not be null""".split("\n")).toList())); diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index f21172066..83750eb9f 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -344,6 +344,11 @@ public static VCCredentialResponse getVCCredentialResponseDTO(String type) { .format("ldp_vc").build(); } + public static VerifiableCredentialResponse getVerifiableCredentialResponseDTO(String type) { + return VerifiableCredentialResponse.builder() + .credential(getVCCredentialPropertiesDTO(type)).build(); + } + public static DataShareResponseDto getDataShareResponseDTO(String errorCode) { return DataShareResponseDto.builder() .dataShare(new DataShare()) From c8b4d2af852b2c38bf82794b7842d485f21d57d0 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Thu, 31 Jul 2025 19:30:11 +0530 Subject: [PATCH 728/860] injiweb-1665 changed vct value source for the request (#809) * injiweb-1665 changed vct value from the request Signed-off-by: Gurpreet41082 --- .../dto/mimoto/CredentialsSupportedResponse.java | 3 +++ .../mimoto/service/CredentialFormatHandler.java | 2 +- .../impl/CredentialRequestServiceImpl.java | 2 +- .../impl/LdpVcCredentialFormatHandler.java | 2 +- .../impl/VcSdJwtCredentialFormatHandler.java | 4 ++-- .../service/impl/WalletCredentialServiceImpl.java | 15 ++++++++++++--- .../service/LdpVcCredentialFormatHandlerTest.java | 7 ++++--- .../VcSdJwtCredentialFormatHandlerTest.java | 2 +- .../service/WalletCredentialServiceTest.java | 4 ++-- 9 files changed, 27 insertions(+), 14 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java index 1422567f9..49a434560 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialsSupportedResponse.java @@ -55,4 +55,7 @@ public class CredentialsSupportedResponse { @Schema(description = "Order of the Credentials Subject Render") private List order; + + @Schema(description = "Identify the type or schema of the claims included") + private String vct; } diff --git a/src/main/java/io/mosip/mimoto/service/CredentialFormatHandler.java b/src/main/java/io/mosip/mimoto/service/CredentialFormatHandler.java index 62c5eb363..670ea111d 100644 --- a/src/main/java/io/mosip/mimoto/service/CredentialFormatHandler.java +++ b/src/main/java/io/mosip/mimoto/service/CredentialFormatHandler.java @@ -15,7 +15,7 @@ public interface CredentialFormatHandler { /** * Build format-specific fields in the credential request object */ - VCCredentialRequest buildCredentialRequest(VCCredentialRequestProof proof, CredentialsSupportedResponse credentialsSupportedResponse, String credentialConfigurationId); + VCCredentialRequest buildCredentialRequest(VCCredentialRequestProof proof, CredentialsSupportedResponse credentialsSupportedResponse); /** * Extract credential subject properties from VC response diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java index f043942eb..c29165d2c 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java @@ -77,7 +77,7 @@ public VCCredentialRequest buildRequest(IssuerDTO issuerDTO, .jwt(jwt) .build(); CredentialFormatHandler handler = credentialFormatHandlerFactory.getHandler(format); - return handler.buildCredentialRequest(proof, credentialsSupportedResponse, credentialConfigurationId); + return handler.buildCredentialRequest(proof, credentialsSupportedResponse); }) .orElseThrow(() -> new IllegalArgumentException("No proof type available")); } diff --git a/src/main/java/io/mosip/mimoto/service/impl/LdpVcCredentialFormatHandler.java b/src/main/java/io/mosip/mimoto/service/impl/LdpVcCredentialFormatHandler.java index 3363cbf04..bb1fb0b95 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/LdpVcCredentialFormatHandler.java +++ b/src/main/java/io/mosip/mimoto/service/impl/LdpVcCredentialFormatHandler.java @@ -27,7 +27,7 @@ public String getSupportedFormat() { } @Override - public VCCredentialRequest buildCredentialRequest(VCCredentialRequestProof proof, CredentialsSupportedResponse credentialsSupportedResponse, String credentialConfigurationId) { + public VCCredentialRequest buildCredentialRequest(VCCredentialRequestProof proof, CredentialsSupportedResponse credentialsSupportedResponse) { List credentialContext = credentialsSupportedResponse.getCredentialDefinition().getContext(); if (credentialContext == null || credentialContext.isEmpty()) { diff --git a/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java b/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java index f07eb91c3..f3a1a7aaa 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java +++ b/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java @@ -30,8 +30,8 @@ public String getSupportedFormat() { @Override - public VCCredentialRequest buildCredentialRequest(VCCredentialRequestProof proof, CredentialsSupportedResponse credentialsSupportedResponse, String credentialConfigurationId) { - return VCCredentialRequest.builder().format(getSupportedFormat()).proof(proof).vct(credentialConfigurationId).build(); + public VCCredentialRequest buildCredentialRequest(VCCredentialRequestProof proof, CredentialsSupportedResponse credentialsSupportedResponse) { + return VCCredentialRequest.builder().format(getSupportedFormat()).proof(proof).vct(credentialsSupportedResponse.getVct()).build(); } @Override diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java index aa3248b41..55479a19c 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java @@ -11,6 +11,7 @@ import io.mosip.mimoto.dto.resident.WalletCredentialResponseDTO; import io.mosip.mimoto.exception.*; import io.mosip.mimoto.model.CredentialMetadata; +import io.mosip.mimoto.model.QRCodeType; import io.mosip.mimoto.model.VerifiableCredential; import io.mosip.mimoto.repository.WalletCredentialsRepository; import io.mosip.mimoto.service.CredentialPDFGeneratorService; @@ -45,25 +46,30 @@ public class WalletCredentialServiceImpl implements WalletCredentialService { @Value("${mosip.inji.wallet.issuersWithSingleVcLimit:Mosip}") private String issuersWithSingleVcLimit; + @Value("${mosip.inji.wallet.vc.validity.count:-1}") + private String credentialValidity; + private final WalletCredentialsRepository repository; private final IssuersService issuersService; private final CredentialService credentialService; private final ObjectMapper objectMapper; private final EncryptionDecryptionUtil encryptionDecryptionUtil; private final CredentialPDFGeneratorService credentialPDFGeneratorService; + private final DataShareServiceImpl dataShareService; @Autowired public WalletCredentialServiceImpl(WalletCredentialsRepository repository, IssuersService issuersService, CredentialService credentialService, ObjectMapper objectMapper, - EncryptionDecryptionUtil encryptionDecryptionUtil,CredentialPDFGeneratorService credentialPDFGeneratorService) { + EncryptionDecryptionUtil encryptionDecryptionUtil,CredentialPDFGeneratorService credentialPDFGeneratorService,DataShareServiceImpl dataShareService) { this.repository = repository; this.issuersService = issuersService; this.credentialService = credentialService; this.objectMapper = objectMapper; this.encryptionDecryptionUtil = encryptionDecryptionUtil; this.credentialPDFGeneratorService = credentialPDFGeneratorService; + this.dataShareService = dataShareService; } @Override @@ -174,6 +180,9 @@ private WalletCredentialResponseDTO generateCredentialResponse(String decryptedC throw new CredentialProcessingException(CREDENTIAL_FETCH_EXCEPTION.getErrorCode(), "Invalid credential type configuration"); } + String dataShareUrl = QRCodeType.OnlineSharing.equals(issuerDTO.getQr_code_type()) ? dataShareService.storeDataInDataShare(objectMapper.writeValueAsString(vcCredentialResponse), credentialValidity) : ""; + + // Generate PDF // keep the datashare url and credential validity as defaults in downloading VC as PDF as logged-in user // This is because generatePdfForVerifiableCredentials will be used by both logged-in and non-logged-in users @@ -182,8 +191,8 @@ private WalletCredentialResponseDTO generateCredentialResponse(String decryptedC vcCredentialResponse, issuerDTO, credentialsSupportedResponse, - "", - "-1", + dataShareUrl, + credentialValidity, locale ); diff --git a/src/test/java/io/mosip/mimoto/service/LdpVcCredentialFormatHandlerTest.java b/src/test/java/io/mosip/mimoto/service/LdpVcCredentialFormatHandlerTest.java index e25b62890..e51881621 100644 --- a/src/test/java/io/mosip/mimoto/service/LdpVcCredentialFormatHandlerTest.java +++ b/src/test/java/io/mosip/mimoto/service/LdpVcCredentialFormatHandlerTest.java @@ -312,6 +312,7 @@ void buildCredentialRequestWithValidCredentialsSupportedResponseShouldReturnConf credentialDefinition.setType(types); credentialDefinition.setContext(context); credentialsSupportedResponse.setCredentialDefinition(credentialDefinition); + credentialsSupportedResponse.setVct("dd"); String credentialType = "IdentityCredential"; VCCredentialRequestProof proof = VCCredentialRequestProof.builder() @@ -321,7 +322,7 @@ void buildCredentialRequestWithValidCredentialsSupportedResponseShouldReturnConf // When VCCredentialRequest result = ldpVcCredentialFormatHandler.buildCredentialRequest( - proof, credentialsSupportedResponse, credentialType); + proof, credentialsSupportedResponse); // Then assertNotNull(result); @@ -349,7 +350,7 @@ void buildCredentialRequestWithNullContextShouldUseDefaultContext() { // When VCCredentialRequest result = ldpVcCredentialFormatHandler.buildCredentialRequest( - proof, credentialsSupportedResponse, credentialType); + proof, credentialsSupportedResponse); // Then assertNotNull(result); @@ -377,7 +378,7 @@ void buildCredentialRequestWithEmptyContextShouldUseDefaultContext() { // When VCCredentialRequest result = ldpVcCredentialFormatHandler.buildCredentialRequest( - proof, credentialsSupportedResponse, credentialType); + proof, credentialsSupportedResponse); // Then assertNotNull(result); diff --git a/src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java b/src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java index 5d14135b6..01e564173 100644 --- a/src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java +++ b/src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java @@ -352,7 +352,7 @@ void buildCredentialRequestShouldSetVctAndReturnBuiltRequest() { // When VCCredentialRequest result = vcSdJwtCredentialFormatHandler.buildCredentialRequest( - proof, credentialsSupportedResponse, credentialType); + proof, credentialsSupportedResponse); // Then assertNotNull(result); diff --git a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java index 3535a8d4c..c2311bfd0 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java @@ -255,7 +255,7 @@ public void shouldFetchVerifiableCredentialSuccessfully() throws Exception { eq(issuerDTO), eq(supportedResponse), eq(""), - eq("-1"), + eq(null), eq(locale) )).thenReturn(pdfContent); @@ -277,7 +277,7 @@ public void shouldFetchVerifiableCredentialSuccessfully() throws Exception { eq(issuerDTO), eq(supportedResponse), eq(""), - eq("-1"), + eq(null), eq(locale) ); } From 87deee9540f479ea9fc9dc7480575018e5d0d620 Mon Sep 17 00:00:00 2001 From: cyber-titan <124165966+cyber-titan@users.noreply.github.com> Date: Thu, 31 Jul 2025 19:31:19 +0530 Subject: [PATCH 729/860] injiweb-1628-creating-new-wallet-with-space fixed creating new empty wallet with space (#808) Signed-off-by: cyber_titan --- src/main/java/io/mosip/mimoto/util/WalletValidator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/mosip/mimoto/util/WalletValidator.java b/src/main/java/io/mosip/mimoto/util/WalletValidator.java index 46e9e8691..24af1d98c 100644 --- a/src/main/java/io/mosip/mimoto/util/WalletValidator.java +++ b/src/main/java/io/mosip/mimoto/util/WalletValidator.java @@ -47,7 +47,7 @@ public void validateUserId(String userId) throws InvalidRequestException { */ public void validateWalletName(String name) throws InvalidRequestException { log.debug("Validating Wallet name: {}", name); - if (name != null && !name.matches(nameRegex)) { + if (StringUtils.isBlank(name) || !name.matches(nameRegex)) { log.warn("Invalid Wallet name: {}", name); throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Wallet name must be alphanumeric with allowed special characters"); } From 81b0d625989931205d4aedc21fbb0d3d396ee96f Mon Sep 17 00:00:00 2001 From: Rakshithb1 Date: Fri, 1 Aug 2025 13:44:45 +0530 Subject: [PATCH 730/860] [MOSIP-42546] updated readme Signed-off-by: Rakshithb1 --- README.md | 1 + deploy/README.md | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 5d873a7f5..fcfd6ea0c 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,7 @@ The project requires JDK 21, postgres, redis and google client credentials ```docker build -t .``` * Use newly built docker image in docker-compose file +## [Deployment in K8 cluster](deploy/README.md) ## Credits Credits listed [here](/Credits.md) diff --git a/deploy/README.md b/deploy/README.md index 5678bb215..aacf6a309 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -1,11 +1,19 @@ +# mimoto + +## Pre-requisites +* inji-stack-config configmap [steps](https://docs.inji.io/readme/setup/deploy#pre-requisites) +* Postgres installation [steps](https://github.com/mosip/mosip-infra/tree/v1.2.0.2/deployment/v3/external/postgres) +* Config server secerts [steps](https://docs.inji.io/readme/setup/deploy#conf-secret-installation) +* Config server installation [steps](https://docs.inji.io/readme/setup/deploy#config-server-installation) +* Artifactory installation [steps](https://github.com/mosip/artifactory-ref-impl/tree/v1.3.0-beta.2/deploy) -# Install Onboarder * Execute redis install script ``` cd redis ./install.sh ``` +## [Install Onboarder](../partner-onboarder) * Execute Onboarder install script ``` cd ../partner-onboarder @@ -15,7 +23,7 @@ cd ../partner-onboarder * Once the job is completed, log in to S3 / NFS and check the reports. There should not be any failures. * Note: If you are running the Onboarder in a separate INJI cluster, update the extraEnvVars section accordingly in [values.yaml](../partner-onboarder/values.yaml). -# Install mimoto +## Install mimoto * Execute mimoto install script * Before installing Mimoto, please ensure that the database host and port are correctly configured in the [values.yaml](mimoto/values.yaml) file. ``` @@ -27,6 +35,8 @@ cd mimoto * The init-container will proceed to download the server's self-signed SSL certificate and mount it to the specified location within the container's Java keystore (i.e., `cacerts`) file. * This particular functionality caters to scenarios where the script needs to be employed on a server utilizing self-signed SSL certificates. -## For Onboarding new Issuer for VCI: +### For Onboarding new Issuer for VCI: - create a folder "certs" in the root and a file "oidckeystore.p12" inside certs and store the keys as different aliases for every issuers. for more details refer [here](https://docs.inji.io/inji-wallet/inji-mobile/technical-overview/customization-overview/credential_providers) + +## [mimoto apitestrig](mimoto-apitestrig) \ No newline at end of file From 943b80666167d50a8c663bf2795dd9bf395fa24f Mon Sep 17 00:00:00 2001 From: Rakshithb1 Date: Fri, 1 Aug 2025 13:51:24 +0530 Subject: [PATCH 731/860] [MOSIP-42546] updated readme Signed-off-by: Rakshithb1 --- deploy/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/README.md b/deploy/README.md index aacf6a309..93f7f3ede 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -3,7 +3,7 @@ ## Pre-requisites * inji-stack-config configmap [steps](https://docs.inji.io/readme/setup/deploy#pre-requisites) * Postgres installation [steps](https://github.com/mosip/mosip-infra/tree/v1.2.0.2/deployment/v3/external/postgres) -* Config server secerts [steps](https://docs.inji.io/readme/setup/deploy#conf-secret-installation) +* Config server secerts [steps](https://github.com/mosip/mosip-infra/tree/v1.2.0.2/deployment/v3/mosip/conf-secrets) * Config server installation [steps](https://docs.inji.io/readme/setup/deploy#config-server-installation) * Artifactory installation [steps](https://github.com/mosip/artifactory-ref-impl/tree/v1.3.0-beta.2/deploy) From e1319af1118a942919e5660a764c2f5fe1ce084b Mon Sep 17 00:00:00 2001 From: Rakshithb1 Date: Fri, 1 Aug 2025 15:08:32 +0530 Subject: [PATCH 732/860] [MOSIP-42546] updated readme Signed-off-by: Rakshithb1 --- deploy/README.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/deploy/README.md b/deploy/README.md index 93f7f3ede..f77c1aba8 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -7,12 +7,19 @@ * Config server installation [steps](https://docs.inji.io/readme/setup/deploy#config-server-installation) * Artifactory installation [steps](https://github.com/mosip/artifactory-ref-impl/tree/v1.3.0-beta.2/deploy) - * Execute redis install script ``` cd redis ./install.sh ``` +## Initialise pre-requisites +### [DB init](../db_scripts) +* Update values file for postgres init [here](../db_scripts/init_values.yaml). +```` + cd db_scripts + ./init_db.sh +```` + ## [Install Onboarder](../partner-onboarder) * Execute Onboarder install script ``` From 28639b6ac8d2122a44514cd3e17a6639381966cf Mon Sep 17 00:00:00 2001 From: Rakshithb1 Date: Fri, 1 Aug 2025 15:48:34 +0530 Subject: [PATCH 733/860] [MOSIP-42546] updated readme Signed-off-by: Rakshithb1 --- deploy/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/deploy/README.md b/deploy/README.md index f77c1aba8..f165538fa 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -9,14 +9,14 @@ * Execute redis install script ``` -cd redis +cd deploy/redis ./install.sh ``` ## Initialise pre-requisites ### [DB init](../db_scripts) * Update values file for postgres init [here](../db_scripts/init_values.yaml). ```` - cd db_scripts + cd ../../db_scripts ./init_db.sh ```` @@ -34,7 +34,7 @@ cd ../partner-onboarder * Execute mimoto install script * Before installing Mimoto, please ensure that the database host and port are correctly configured in the [values.yaml](mimoto/values.yaml) file. ``` -cd mimoto +cd ../deploy/mimoto ./install.sh ``` * During the execution of the `install.sh` script, a prompt appears requesting information regarding the presence of a public domain and a valid SSL certificate on the server. From f044e7120895db33bae800195b379a626be3ee64 Mon Sep 17 00:00:00 2001 From: Rakshithb1 Date: Fri, 1 Aug 2025 17:12:30 +0530 Subject: [PATCH 734/860] [MOSIP-42546] updated readme Signed-off-by: Rakshithb1 --- deploy/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/README.md b/deploy/README.md index f165538fa..8f6a5d021 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -7,7 +7,7 @@ * Config server installation [steps](https://docs.inji.io/readme/setup/deploy#config-server-installation) * Artifactory installation [steps](https://github.com/mosip/artifactory-ref-impl/tree/v1.3.0-beta.2/deploy) -* Execute redis install script +* Redis installation ``` cd deploy/redis ./install.sh From 604c61e977ba7cca00746ca4ab3f3af9ba772e82 Mon Sep 17 00:00:00 2001 From: cyber-titan <124165966+cyber-titan@users.noreply.github.com> Date: Mon, 4 Aug 2025 14:57:18 +0530 Subject: [PATCH 735/860] injiweb-1624 fixed accept language error handling and walletName to accept null (#811) --- .../mosip/mimoto/controller/WalletCredentialsController.java | 4 ++++ src/main/java/io/mosip/mimoto/util/WalletValidator.java | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index ce397dca5..3480a5585 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -174,6 +174,10 @@ public ResponseEntity> fetchAllCredentials @PathVariable("walletId") @NotBlank(message = "Wallet ID cannot be blank") String walletId, @RequestHeader(value = "Accept-Language", defaultValue = "en") @Pattern(regexp = "^[a-z]{2}$", message = "Locale must be a 2-letter code") String locale, HttpSession httpSession) throws InvalidRequestException { + if (!LocaleUtils.isValidLanguageCode(locale)) { + log.info("Invalid Accept-Language header. Input was: {} ", locale); + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Locale must be a valid 2-letter code"); + } validateWalletId(httpSession, walletId); String base64EncodedWalletKey = WalletUtil.getSessionWalletKey(httpSession); diff --git a/src/main/java/io/mosip/mimoto/util/WalletValidator.java b/src/main/java/io/mosip/mimoto/util/WalletValidator.java index 24af1d98c..e8ffa503d 100644 --- a/src/main/java/io/mosip/mimoto/util/WalletValidator.java +++ b/src/main/java/io/mosip/mimoto/util/WalletValidator.java @@ -47,7 +47,7 @@ public void validateUserId(String userId) throws InvalidRequestException { */ public void validateWalletName(String name) throws InvalidRequestException { log.debug("Validating Wallet name: {}", name); - if (StringUtils.isBlank(name) || !name.matches(nameRegex)) { + if (name != null && (StringUtils.isBlank(name) || !name.matches(nameRegex))) { log.warn("Invalid Wallet name: {}", name); throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "Wallet name must be alphanumeric with allowed special characters"); } From b04457220c95a2dbbce5e9ac5f91ccbd879b7832 Mon Sep 17 00:00:00 2001 From: Rakshithb1 Date: Tue, 5 Aug 2025 11:34:09 +0530 Subject: [PATCH 736/860] [MOSIP-42546] updated readme Signed-off-by: Rakshithb1 --- deploy/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/deploy/README.md b/deploy/README.md index 8f6a5d021..6ac9e6d2d 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -1,6 +1,7 @@ # mimoto ## Pre-requisites +* Cluster creation and configuration [steps](https://docs.inji.io/readme/setup/deploy) * inji-stack-config configmap [steps](https://docs.inji.io/readme/setup/deploy#pre-requisites) * Postgres installation [steps](https://github.com/mosip/mosip-infra/tree/v1.2.0.2/deployment/v3/external/postgres) * Config server secerts [steps](https://github.com/mosip/mosip-infra/tree/v1.2.0.2/deployment/v3/mosip/conf-secrets) From a864833fc93d5e3fd35aff1ab8f590a0363fa27e Mon Sep 17 00:00:00 2001 From: Rakshithb1 Date: Tue, 5 Aug 2025 16:20:09 +0530 Subject: [PATCH 737/860] [MOSIP-42546] updated readme Signed-off-by: Rakshithb1 --- deploy/README.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/deploy/README.md b/deploy/README.md index 6ac9e6d2d..a80bf26df 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -1,7 +1,13 @@ -# mimoto +# Deployment ## Pre-requisites -* Cluster creation and configuration [steps](https://docs.inji.io/readme/setup/deploy) +* Base infra setup + * Tool and utilities to be installed in local [steps](https://docs.inji.io/readme/setup/deploy#tools-and-utilities) + * System Requirements: Hardware, network and certificate requirements [steps](https://docs.inji.io/readme/setup/deploy#system-requirements) + * Wireguard Bastion Host [steps](https://docs.inji.io/readme/setup/deploy#wireguard) + * K8s Cluster setup [steps](https://docs.inji.io/readme/setup/deploy#k8-cluster-setup) + * Nginx setup and configuration [steps](https://docs.inji.io/readme/setup/deploy#nginx-for-inji-k8-cluster) + * K8s Cluster Configuration [steps](https://docs.inji.io/readme/setup/deploy#k8-cluster-configuration) * inji-stack-config configmap [steps](https://docs.inji.io/readme/setup/deploy#pre-requisites) * Postgres installation [steps](https://github.com/mosip/mosip-infra/tree/v1.2.0.2/deployment/v3/external/postgres) * Config server secerts [steps](https://github.com/mosip/mosip-infra/tree/v1.2.0.2/deployment/v3/mosip/conf-secrets) From 6ffc88649ddff918e153c911dc9ba2dcc18e46d7 Mon Sep 17 00:00:00 2001 From: Rakshithb1 Date: Tue, 5 Aug 2025 16:28:46 +0530 Subject: [PATCH 738/860] [MOSIP-42546] updated readme Signed-off-by: Rakshithb1 --- deploy/README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/deploy/README.md b/deploy/README.md index a80bf26df..d72e52324 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -1,14 +1,14 @@ # Deployment ## Pre-requisites -* Base infra setup - * Tool and utilities to be installed in local [steps](https://docs.inji.io/readme/setup/deploy#tools-and-utilities) +* Base infrastructure setup + * Tool and utilities to be installed locally [steps](https://docs.inji.io/readme/setup/deploy#tools-and-utilities) * System Requirements: Hardware, network and certificate requirements [steps](https://docs.inji.io/readme/setup/deploy#system-requirements) - * Wireguard Bastion Host [steps](https://docs.inji.io/readme/setup/deploy#wireguard) + * Set up Wireguard Bastion Host [steps](https://docs.inji.io/readme/setup/deploy#wireguard) * K8s Cluster setup [steps](https://docs.inji.io/readme/setup/deploy#k8-cluster-setup) - * Nginx setup and configuration [steps](https://docs.inji.io/readme/setup/deploy#nginx-for-inji-k8-cluster) + * NGINX setup and configuration [steps](https://docs.inji.io/readme/setup/deploy#nginx-for-inji-k8-cluster) * K8s Cluster Configuration [steps](https://docs.inji.io/readme/setup/deploy#k8-cluster-configuration) -* inji-stack-config configmap [steps](https://docs.inji.io/readme/setup/deploy#pre-requisites) +* inji-stack-config ConfigMap [steps](https://docs.inji.io/readme/setup/deploy#pre-requisites) * Postgres installation [steps](https://github.com/mosip/mosip-infra/tree/v1.2.0.2/deployment/v3/external/postgres) * Config server secerts [steps](https://github.com/mosip/mosip-infra/tree/v1.2.0.2/deployment/v3/mosip/conf-secrets) * Config server installation [steps](https://docs.inji.io/readme/setup/deploy#config-server-installation) From d77b2b9575cc0995d7ff73adf8b7b235ea13ac6a Mon Sep 17 00:00:00 2001 From: Rakshithb1 Date: Tue, 5 Aug 2025 16:28:46 +0530 Subject: [PATCH 739/860] [MOSIP-42546] updated readme Signed-off-by: Rakshithb1 --- deploy/README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/deploy/README.md b/deploy/README.md index a80bf26df..1ecc5482e 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -1,14 +1,14 @@ # Deployment ## Pre-requisites -* Base infra setup - * Tool and utilities to be installed in local [steps](https://docs.inji.io/readme/setup/deploy#tools-and-utilities) +* Base infrastructure setup + * Tools and utilities to be installed locally [steps](https://docs.inji.io/readme/setup/deploy#tools-and-utilities) * System Requirements: Hardware, network and certificate requirements [steps](https://docs.inji.io/readme/setup/deploy#system-requirements) - * Wireguard Bastion Host [steps](https://docs.inji.io/readme/setup/deploy#wireguard) + * Set up Wireguard Bastion Host [steps](https://docs.inji.io/readme/setup/deploy#wireguard) * K8s Cluster setup [steps](https://docs.inji.io/readme/setup/deploy#k8-cluster-setup) - * Nginx setup and configuration [steps](https://docs.inji.io/readme/setup/deploy#nginx-for-inji-k8-cluster) + * NGINX setup and configuration [steps](https://docs.inji.io/readme/setup/deploy#nginx-for-inji-k8-cluster) * K8s Cluster Configuration [steps](https://docs.inji.io/readme/setup/deploy#k8-cluster-configuration) -* inji-stack-config configmap [steps](https://docs.inji.io/readme/setup/deploy#pre-requisites) +* inji-stack-config ConfigMap [steps](https://docs.inji.io/readme/setup/deploy#pre-requisites) * Postgres installation [steps](https://github.com/mosip/mosip-infra/tree/v1.2.0.2/deployment/v3/external/postgres) * Config server secerts [steps](https://github.com/mosip/mosip-infra/tree/v1.2.0.2/deployment/v3/mosip/conf-secrets) * Config server installation [steps](https://docs.inji.io/readme/setup/deploy#config-server-installation) From fcf5487c5c42e4c2412d3a4666ec25c07f2ef194 Mon Sep 17 00:00:00 2001 From: Rakshith B <79500257+Rakshithb1@users.noreply.github.com> Date: Tue, 5 Aug 2025 17:11:22 +0530 Subject: [PATCH 740/860] [MOSIP-42546] updated readme Signed-off-by: Rakshith B <79500257+Rakshithb1@users.noreply.github.com> --- deploy/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deploy/README.md b/deploy/README.md index d72e52324..f400376c3 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -2,7 +2,7 @@ ## Pre-requisites * Base infrastructure setup - * Tool and utilities to be installed locally [steps](https://docs.inji.io/readme/setup/deploy#tools-and-utilities) + * Tools and utilities to be installed locally [steps](https://docs.inji.io/readme/setup/deploy#tools-and-utilities) * System Requirements: Hardware, network and certificate requirements [steps](https://docs.inji.io/readme/setup/deploy#system-requirements) * Set up Wireguard Bastion Host [steps](https://docs.inji.io/readme/setup/deploy#wireguard) * K8s Cluster setup [steps](https://docs.inji.io/readme/setup/deploy#k8-cluster-setup) @@ -53,4 +53,4 @@ cd ../deploy/mimoto - create a folder "certs" in the root and a file "oidckeystore.p12" inside certs and store the keys as different aliases for every issuers. for more details refer [here](https://docs.inji.io/inji-wallet/inji-mobile/technical-overview/customization-overview/credential_providers) -## [mimoto apitestrig](mimoto-apitestrig) \ No newline at end of file +## [mimoto apitestrig](mimoto-apitestrig) From a4646fe69947271e7dd2d3ce2fe0f00ab3ea2287 Mon Sep 17 00:00:00 2001 From: Rakshithb1 Date: Tue, 5 Aug 2025 18:08:25 +0530 Subject: [PATCH 741/860] [MOSIP-42546] updated readme Signed-off-by: Rakshithb1 --- deploy/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/deploy/README.md b/deploy/README.md index 1ecc5482e..f6f156043 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -10,6 +10,7 @@ * K8s Cluster Configuration [steps](https://docs.inji.io/readme/setup/deploy#k8-cluster-configuration) * inji-stack-config ConfigMap [steps](https://docs.inji.io/readme/setup/deploy#pre-requisites) * Postgres installation [steps](https://github.com/mosip/mosip-infra/tree/v1.2.0.2/deployment/v3/external/postgres) + * Note: Before running the Postgres install script, update the `POSTGRES_HOST` value in `install.sh` with the correct PostgreSQL host. * Config server secerts [steps](https://github.com/mosip/mosip-infra/tree/v1.2.0.2/deployment/v3/mosip/conf-secrets) * Config server installation [steps](https://docs.inji.io/readme/setup/deploy#config-server-installation) * Artifactory installation [steps](https://github.com/mosip/artifactory-ref-impl/tree/v1.3.0-beta.2/deploy) From 059c4d6ec8e64417f5c519bf6cd72cb26499ef9c Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Thu, 7 Aug 2025 09:24:19 +0530 Subject: [PATCH 742/860] Injiweb 1654: online sharing flow of sdjwt (#812) * injiweb-1654 added presentation code for sdjwt Signed-off-by: Gurpreet41082 --- .../openid/presentation/ConstraintsDTO.java | 3 + .../VerifiablePresentationDTO.java | 2 +- .../service/impl/PresentationServiceImpl.java | 134 +++++-- .../java/io/mosip/mimoto/util/JwtUtils.java | 64 +++ .../PresentationControllerTest.java | 363 ++++++++++++++++++ .../service/PresentationServiceTest.java | 143 +++++++ 6 files changed, 672 insertions(+), 37 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/util/JwtUtils.java create mode 100644 src/test/java/io/mosip/mimoto/controller/PresentationControllerTest.java diff --git a/src/main/java/io/mosip/mimoto/dto/openid/presentation/ConstraintsDTO.java b/src/main/java/io/mosip/mimoto/dto/openid/presentation/ConstraintsDTO.java index a12c002d0..4968420e8 100644 --- a/src/main/java/io/mosip/mimoto/dto/openid/presentation/ConstraintsDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/openid/presentation/ConstraintsDTO.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.dto.openid.presentation; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -11,5 +12,7 @@ @AllArgsConstructor public class ConstraintsDTO { FieldDTO[] fields; + + @JsonProperty("limit_disclosure") private String limitDisclosure; } diff --git a/src/main/java/io/mosip/mimoto/dto/openid/presentation/VerifiablePresentationDTO.java b/src/main/java/io/mosip/mimoto/dto/openid/presentation/VerifiablePresentationDTO.java index fc9125f1b..4d1687005 100644 --- a/src/main/java/io/mosip/mimoto/dto/openid/presentation/VerifiablePresentationDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/openid/presentation/VerifiablePresentationDTO.java @@ -24,5 +24,5 @@ public class VerifiablePresentationDTO { @NotEmpty private List<@NotBlank String> type; - List verifiableCredential; + List verifiableCredential; } diff --git a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java index 2dbc46d55..7eef77090 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java @@ -22,6 +22,9 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; +import static io.mosip.mimoto.util.JwtUtils.extractJwtPayloadFromSdJwt; +import static io.mosip.mimoto.util.JwtUtils.parseJwtHeader; + @Slf4j @Service public class PresentationServiceImpl implements PresentationService { @@ -41,7 +44,6 @@ public class PresentationServiceImpl implements PresentationService { @Override public String authorizePresentation(PresentationRequestDTO presentationRequestDTO) throws IOException { VCCredentialResponse vcCredentialResponse = dataShareService.downloadCredentialFromDataShare(presentationRequestDTO); - PresentationDefinitionDTO presentationDefinitionDTO = presentationRequestDTO.getPresentationDefinition(); if (presentationDefinitionDTO == null) { throw new VPNotCreatedException(ErrorConstants.INVALID_REQUEST.getErrorMessage()); @@ -52,36 +54,15 @@ public String authorizePresentation(PresentationRequestDTO presentationRequestDT .stream() .findFirst() .map(inputDescriptorDTO -> { - - if (CredentialFormat.LDP_VC.toString().equalsIgnoreCase(vcCredentialResponse.getFormat())) { - VCCredentialProperties ldpCredential = objectMapper.convertValue(vcCredentialResponse.getCredential(), VCCredentialProperties.class); - boolean matchingProofTypes = inputDescriptorDTO.getFormat().get("ldpVc").get("proofTypes") - .stream() - .anyMatch(proofType -> ldpCredential.getProof().getType().equals(proofType)); - - if (matchingProofTypes) { - log.info("Started the Construction of VP token"); - try { - VerifiablePresentationDTO verifiablePresentationDTO = constructVerifiablePresentationString(ldpCredential); - String presentationSubmission = constructPresentationSubmission(verifiablePresentationDTO, presentationDefinitionDTO, inputDescriptorDTO); - String vpToken = objectMapper.writeValueAsString(verifiablePresentationDTO); - return String.format(injiOvpRedirectURLPattern, - presentationRequestDTO.getRedirectUri(), - Base64.getUrlEncoder().encodeToString(vpToken.getBytes(StandardCharsets.UTF_8)), - URLEncoder.encode(presentationSubmission, StandardCharsets.UTF_8)); - } catch (JsonProcessingException e) { - throw new VPNotCreatedException(ErrorConstants.INVALID_REQUEST.getErrorMessage()); - } - } - } else if (CredentialFormat.VC_SD_JWT.getFormat().equalsIgnoreCase(vcCredentialResponse.getFormat()) - || CredentialFormat.DC_SD_JWT.getFormat().equalsIgnoreCase(vcCredentialResponse.getFormat())) { - - throw new UnsupportedOperationException("OnlineSharing is not supported for SD-JWT format yet."); + try { + return processInputDescriptor(vcCredentialResponse, inputDescriptorDTO, presentationRequestDTO, presentationDefinitionDTO); + } catch (JsonProcessingException e) { + throw new VPNotCreatedException(ErrorConstants.INVALID_REQUEST.getErrorMessage()); } - log.info("No Credentials Matched the VP request."); - throw new VPNotCreatedException(ErrorConstants.INVALID_REQUEST.getErrorMessage()); - }).orElseThrow(() -> new VPNotCreatedException(ErrorConstants.INVALID_REQUEST.getErrorMessage())); - if(redirectionString.length() > maximumResponseHeaderSize) { + }) + .orElseThrow(() -> new VPNotCreatedException(ErrorConstants.INVALID_REQUEST.getErrorMessage())); + + if (redirectionString.length() > maximumResponseHeaderSize) { throw new VPNotCreatedException( ErrorConstants.URI_TOO_LONG.getErrorCode(), ErrorConstants.URI_TOO_LONG.getErrorMessage()); @@ -89,20 +70,73 @@ public String authorizePresentation(PresentationRequestDTO presentationRequestDT return redirectionString; } + private String processInputDescriptor(VCCredentialResponse vcCredentialResponse, InputDescriptorDTO inputDescriptorDTO, + PresentationRequestDTO presentationRequestDTO, PresentationDefinitionDTO presentationDefinitionDTO) throws JsonProcessingException { + String format = vcCredentialResponse.getFormat(); + if (CredentialFormat.LDP_VC.getFormat().equalsIgnoreCase(format)) { + VCCredentialProperties ldpCredential = objectMapper.convertValue(vcCredentialResponse.getCredential(), VCCredentialProperties.class); + if (inputDescriptorDTO.getFormat().get("ldpVc").get("proofTypes") + .stream().anyMatch(proofType -> ldpCredential.getProof().getType().equals(proofType))) { + return buildRedirectString( + constructVerifiablePresentationString(ldpCredential), + format, + presentationRequestDTO, + presentationDefinitionDTO, + inputDescriptorDTO + ); + } + } else if (CredentialFormat.VC_SD_JWT.getFormat().equalsIgnoreCase(format) + || CredentialFormat.DC_SD_JWT.getFormat().equalsIgnoreCase(format)) { + String credential = objectMapper.convertValue(vcCredentialResponse.getCredential(), String.class); + Map jwtHeaders = parseJwtHeader(credential); + String responseAlgo = (String) jwtHeaders.get("alg"); + if (inputDescriptorDTO.getFormat().get(format).get("sd-jwt_alg_values") + .stream().anyMatch(responseAlgo::equals)) { + return buildRedirectString( + constructVerifiablePresentationStringForSDjwt(credential), + format, + presentationRequestDTO, + presentationDefinitionDTO, + inputDescriptorDTO + ); + } + } + log.info("No Credentials Matched the VP request."); + throw new VPNotCreatedException(ErrorConstants.INVALID_REQUEST.getErrorMessage()); + } + + private String buildRedirectString(VerifiablePresentationDTO verifiablePresentationDTO, String format, + PresentationRequestDTO presentationRequestDTO, PresentationDefinitionDTO presentationDefinitionDTO, + InputDescriptorDTO inputDescriptorDTO) throws JsonProcessingException { + String presentationSubmission = constructPresentationSubmission(format, verifiablePresentationDTO, presentationDefinitionDTO, inputDescriptorDTO); + String vpToken = objectMapper.writeValueAsString(verifiablePresentationDTO); + return String.format(injiOvpRedirectURLPattern, + presentationRequestDTO.getRedirectUri(), + Base64.getUrlEncoder().encodeToString(vpToken.getBytes(StandardCharsets.UTF_8)), + URLEncoder.encode(presentationSubmission, StandardCharsets.UTF_8)); + } + private VerifiablePresentationDTO constructVerifiablePresentationString(VCCredentialProperties vcCredentialProperties) throws JsonProcessingException { return VerifiablePresentationDTO.builder() .verifiableCredential(Collections.singletonList(vcCredentialProperties)) .type(Collections.singletonList("VerifiablePresentation")) - .context(Collections.singletonList("https://www.w3.org/2018/credentials/v1")) + .context(Collections.singletonList(vcCredentialProperties.getContext())) + .build(); + } + + private VerifiablePresentationDTO constructVerifiablePresentationStringForSDjwt(String vcCredential) throws JsonProcessingException { + return VerifiablePresentationDTO.builder() + .verifiableCredential(Collections.singletonList(vcCredential)) + .type(Collections.singletonList("VerifiablePresentation")) .build(); } - private String constructPresentationSubmission(VerifiablePresentationDTO verifiablePresentationDTO, PresentationDefinitionDTO presentationDefinitionDTO, InputDescriptorDTO inputDescriptorDTO) throws JsonProcessingException { + private String constructPresentationSubmission(String format, VerifiablePresentationDTO verifiablePresentationDTO, PresentationDefinitionDTO presentationDefinitionDTO, InputDescriptorDTO inputDescriptorDTO) throws JsonProcessingException { AtomicInteger atomicInteger = new AtomicInteger(0); List submissionDescriptorDTOList = verifiablePresentationDTO.getVerifiableCredential() .stream().map(verifiableCredential -> SubmissionDescriptorDTO.builder() .id(inputDescriptorDTO.getId()) - .format(CredentialFormat.LDP_VC.getFormat()) + .format(format) .path("$.verifiableCredential[" + atomicInteger.getAndIncrement() + "]").build()).collect(Collectors.toList()); PresentationSubmissionDTO presentationSubmissionDTO = PresentationSubmissionDTO.builder() @@ -136,10 +170,38 @@ public PresentationDefinitionDTO constructPresentationDefinition(VCCredentialRes .format(format) .build()); - } else { - throw new UnsupportedOperationException("We don't support constructing Presentation Definition for " + vcFormat + " format yet."); - } + } else if (CredentialFormat.VC_SD_JWT.getFormat().equalsIgnoreCase(vcFormat) || CredentialFormat.DC_SD_JWT.getFormat().equalsIgnoreCase(vcFormat)) { + Map jwtPayload = extractJwtPayloadFromSdJwt((String) vcRes.getCredential()); + List typeList = (List) jwtPayload.get("type"); + String lastType = null; + if (typeList != null && !typeList.isEmpty()) { + Object lastItem = typeList.get(typeList.size() - 1); + if (lastItem instanceof Map) { + Object value = ((Map) lastItem).get("_value"); + lastType = value != null ? value.toString() : null; + } else { + lastType = lastItem.toString(); + } + } + Map jwtHeaders = parseJwtHeader((String) vcRes.getCredential()); + String algo = (String) jwtHeaders.get("alg"); + FieldDTO field = FieldDTO.builder() + .path(new String[]{"$.type"}) + .filter(FilterDTO.builder().type("String").pattern(lastType).build()) + .build(); + Map>> format = Map.of( + vcRes.getFormat(), Map.of( + "sd-jwt_alg_values", List.of(algo) + ) + ); + inputDescriptors.add(InputDescriptorDTO.builder() + .id(UUID.randomUUID().toString()) + .constraints(ConstraintsDTO.builder().fields(new FieldDTO[]{field}).build()) + .format(format) + .build()); + + } return PresentationDefinitionDTO.builder() .id(UUID.randomUUID().toString()) .inputDescriptors(inputDescriptors) diff --git a/src/main/java/io/mosip/mimoto/util/JwtUtils.java b/src/main/java/io/mosip/mimoto/util/JwtUtils.java new file mode 100644 index 000000000..0f0263e6c --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/JwtUtils.java @@ -0,0 +1,64 @@ +package io.mosip.mimoto.util; + +import com.authlete.sd.SDJWT; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.Collections; +import java.util.Map; + +@Slf4j +public class JwtUtils { + + private static final ObjectMapper objectMapper = new ObjectMapper(); + + public static Map extractJwtPayloadFromSdJwt(String sdJwtString) { + try { + SDJWT sdJwt = SDJWT.parse(sdJwtString); + String credentialJwt = sdJwt.getCredentialJwt(); + if (credentialJwt != null) { + return parseJwtPayload(credentialJwt); + } + log.warn("Credential JWT is null in parsed SD‑JWT"); + } catch (Exception e) { + log.error("Failed to extract JWT payload from SD‑JWT: {}", e.getMessage(), e); + } + return Collections.emptyMap(); + } + + public static Map parseJwtPayload(String jwt) { + try { + String[] parts = jwt.split("\\."); + if (parts.length < 3) { + log.error("Invalid JWT format for payload parsing: {}", jwt); + return Collections.emptyMap(); + } + String payloadJson = new String(Base64.getUrlDecoder().decode(parts[1]), StandardCharsets.UTF_8); + return objectMapper.readValue(payloadJson, Map.class); + } catch (Exception e) { + log.error("Error parsing JWT payload", e); + return Collections.emptyMap(); + } + } + + /** + * Extracts the JWT header as a Map. + */ + public static Map parseJwtHeader(String jwt) { + try { + String[] parts = jwt.split("\\."); + if (parts.length < 3) { + log.warn("Invalid JWT format for header parsing: {}", jwt); + return Collections.emptyMap(); + } + String headerJson = new String(Base64.getUrlDecoder().decode(parts[0]), StandardCharsets.UTF_8); + return objectMapper.readValue(headerJson, Map.class); + } catch (Exception e) { + log.error("Error parsing JWT header", e); + return Collections.emptyMap(); + } + } +} + diff --git a/src/test/java/io/mosip/mimoto/controller/PresentationControllerTest.java b/src/test/java/io/mosip/mimoto/controller/PresentationControllerTest.java new file mode 100644 index 000000000..a398d391e --- /dev/null +++ b/src/test/java/io/mosip/mimoto/controller/PresentationControllerTest.java @@ -0,0 +1,363 @@ +package io.mosip.mimoto.controller; + +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.dto.openid.presentation.PresentationDefinitionDTO; +import io.mosip.mimoto.dto.openid.presentation.PresentationRequestDTO; +import io.mosip.mimoto.exception.ErrorConstants; +import io.mosip.mimoto.exception.InvalidCredentialResourceException; +import io.mosip.mimoto.exception.InvalidVerifierException; +import io.mosip.mimoto.exception.VPNotCreatedException; +import io.mosip.mimoto.service.PresentationService; +import io.mosip.mimoto.service.VerifierService; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.MockitoAnnotations; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; + +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; + +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.redirectedUrl; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = PresentationController.class) +@AutoConfigureMockMvc(addFilters = false) +@EnableWebMvc +@TestPropertySource(properties = { + "mosip.inji.ovp.error.redirect.url.pattern=%s?error_code=%s&error_message=%s", + "mosip.inji.web.redirect.url=https://inji.web.redirect.url" +}) +public class PresentationControllerTest { + + @Autowired + private MockMvc mockMvc; + + @MockBean + private PresentationService presentationService; + + @MockBean + private VerifierService verifierService; + + @MockBean + private ObjectMapper objectMapper; + + private static final String RESPONSE_TYPE = "vp_token"; + private static final String RESOURCE = "https://example.com/resource"; + private static final String CLIENT_ID = "test-client-id"; + private static final String REDIRECT_URI = "https://example.com/callback"; + private static final String PRESENTATION_DEFINITION_JSON = "{\"id\":\"test\",\"input_descriptors\":[]}"; + private static final String SUCCESS_REDIRECT_URL = "https://success.redirect.url"; + + @Before + public void setUp() { + MockitoAnnotations.openMocks(this); + } + + @Test + public void testPerformAuthorizationSuccess() throws Exception { + // Arrange + PresentationDefinitionDTO mockPresentationDefinitionDTO = new PresentationDefinitionDTO(); + when(objectMapper.readValue(PRESENTATION_DEFINITION_JSON, PresentationDefinitionDTO.class)) + .thenReturn(mockPresentationDefinitionDTO); + when(presentationService.authorizePresentation(any(PresentationRequestDTO.class))) + .thenReturn(SUCCESS_REDIRECT_URL); + doNothing().when(verifierService).validateVerifier(CLIENT_ID, REDIRECT_URI); + + // Act & Assert + mockMvc.perform(get("/authorize") + .param("response_type", RESPONSE_TYPE) + .param("resource", RESOURCE) + .param("presentation_definition", PRESENTATION_DEFINITION_JSON) + .param("client_id", CLIENT_ID) + .param("redirect_uri", REDIRECT_URI)) + .andExpect(status().isFound()) + .andExpect(redirectedUrl(SUCCESS_REDIRECT_URL)); + + // Verify service calls + verify(verifierService).validateVerifier(CLIENT_ID, REDIRECT_URI); + verify(objectMapper).readValue(PRESENTATION_DEFINITION_JSON, PresentationDefinitionDTO.class); + + ArgumentCaptor captor = ArgumentCaptor.forClass(PresentationRequestDTO.class); + verify(presentationService).authorizePresentation(captor.capture()); + + PresentationRequestDTO capturedRequest = captor.getValue(); + assertEquals(RESPONSE_TYPE, capturedRequest.getResponseType()); + assertEquals(RESOURCE, capturedRequest.getResource()); + assertEquals(CLIENT_ID, capturedRequest.getClientId()); + assertEquals(REDIRECT_URI, capturedRequest.getRedirectUri()); + assertEquals(mockPresentationDefinitionDTO, capturedRequest.getPresentationDefinition()); + } + + @Test + public void testPerformAuthorizationInvalidVerifierException() throws Exception { + // Arrange + String errorCode = "INVALID_VERIFIER"; + String errorMessage = "Invalid verifier provided"; + InvalidVerifierException exception = new InvalidVerifierException(errorCode, errorMessage); + + doThrow(exception).when(verifierService).validateVerifier(CLIENT_ID, REDIRECT_URI); + + String expectedRedirectUrl = String.format( + "https://inji.web.redirect.url?error_code=%s&error_message=%s", + errorCode, + URLEncoder.encode(errorMessage, StandardCharsets.UTF_8) + ); + + // Act & Assert + mockMvc.perform(get("/authorize") + .param("response_type", RESPONSE_TYPE) + .param("resource", RESOURCE) + .param("presentation_definition", PRESENTATION_DEFINITION_JSON) + .param("client_id", CLIENT_ID) + .param("redirect_uri", REDIRECT_URI)) + .andExpect(status().isFound()) + .andExpect(redirectedUrl(expectedRedirectUrl)); + + verify(verifierService).validateVerifier(CLIENT_ID, REDIRECT_URI); + verify(presentationService, never()).authorizePresentation(any()); + } + + @Test + public void testPerformAuthorizationVPNotCreatedException() throws Exception { + // Arrange + String errorCode = "VP_NOT_CREATED"; + String errorMessage = "VP creation failed"; + VPNotCreatedException exception = new VPNotCreatedException(errorCode, errorMessage); + + PresentationDefinitionDTO mockPresentationDefinitionDTO = new PresentationDefinitionDTO(); + when(objectMapper.readValue(PRESENTATION_DEFINITION_JSON, PresentationDefinitionDTO.class)) + .thenReturn(mockPresentationDefinitionDTO); + doNothing().when(verifierService).validateVerifier(CLIENT_ID, REDIRECT_URI); + when(presentationService.authorizePresentation(any(PresentationRequestDTO.class))) + .thenThrow(exception); + + String expectedRedirectUrl = String.format( + "%s?error_code=%s&error_message=%s", + REDIRECT_URI, + errorCode, + URLEncoder.encode(errorMessage, StandardCharsets.UTF_8) + ); + + // Act & Assert + mockMvc.perform(get("/authorize") + .param("response_type", RESPONSE_TYPE) + .param("resource", RESOURCE) + .param("presentation_definition", PRESENTATION_DEFINITION_JSON) + .param("client_id", CLIENT_ID) + .param("redirect_uri", REDIRECT_URI)) + .andExpect(status().isFound()) + .andExpect(redirectedUrl(expectedRedirectUrl)); + + verify(verifierService).validateVerifier(CLIENT_ID, REDIRECT_URI); + verify(presentationService).authorizePresentation(any(PresentationRequestDTO.class)); + } + + @Test + public void testPerformAuthorizationInvalidCredentialResourceException() throws Exception { + // Arrange + String errorCode = "INVALID_CREDENTIAL_RESOURCE"; + String errorMessage = "Invalid credential resource"; + InvalidCredentialResourceException exception = new InvalidCredentialResourceException(errorCode, errorMessage); + + PresentationDefinitionDTO mockPresentationDefinitionDTO = new PresentationDefinitionDTO(); + when(objectMapper.readValue(PRESENTATION_DEFINITION_JSON, PresentationDefinitionDTO.class)) + .thenReturn(mockPresentationDefinitionDTO); + doNothing().when(verifierService).validateVerifier(CLIENT_ID, REDIRECT_URI); + when(presentationService.authorizePresentation(any(PresentationRequestDTO.class))) + .thenThrow(exception); + + String expectedRedirectUrl = String.format( + "%s?error_code=%s&error_message=%s", + REDIRECT_URI, + errorCode, + URLEncoder.encode(errorMessage, StandardCharsets.UTF_8) + ); + + // Act & Assert + mockMvc.perform(get("/authorize") + .param("response_type", RESPONSE_TYPE) + .param("resource", RESOURCE) + .param("presentation_definition", PRESENTATION_DEFINITION_JSON) + .param("client_id", CLIENT_ID) + .param("redirect_uri", REDIRECT_URI)) + .andExpect(status().isFound()) + .andExpect(redirectedUrl(expectedRedirectUrl)); + + verify(verifierService).validateVerifier(CLIENT_ID, REDIRECT_URI); + verify(presentationService).authorizePresentation(any(PresentationRequestDTO.class)); + } + + @Test + public void testPerformAuthorizationGenericException() throws Exception { + // Arrange + RuntimeException exception = new RuntimeException("Unexpected error occurred"); + + PresentationDefinitionDTO mockPresentationDefinitionDTO = new PresentationDefinitionDTO(); + when(objectMapper.readValue(PRESENTATION_DEFINITION_JSON, PresentationDefinitionDTO.class)) + .thenReturn(mockPresentationDefinitionDTO); + doNothing().when(verifierService).validateVerifier(CLIENT_ID, REDIRECT_URI); + when(presentationService.authorizePresentation(any(PresentationRequestDTO.class))) + .thenThrow(exception); + + String expectedRedirectUrl = String.format( + "%s?error_code=%s&error_message=%s", + REDIRECT_URI, + ErrorConstants.INTERNAL_SERVER_ERROR.getErrorCode(), + URLEncoder.encode(ErrorConstants.INTERNAL_SERVER_ERROR.getErrorMessage(), StandardCharsets.UTF_8) + ); + + // Act & Assert + mockMvc.perform(get("/authorize") + .param("response_type", RESPONSE_TYPE) + .param("resource", RESOURCE) + .param("presentation_definition", PRESENTATION_DEFINITION_JSON) + .param("client_id", CLIENT_ID) + .param("redirect_uri", REDIRECT_URI)) + .andExpect(status().isFound()) + .andExpect(redirectedUrl(expectedRedirectUrl)); + + verify(verifierService).validateVerifier(CLIENT_ID, REDIRECT_URI); + verify(presentationService).authorizePresentation(any(PresentationRequestDTO.class)); + } + + @Test + public void testPerformAuthorizationJsonParsingException() throws Exception { + // Arrange + when(objectMapper.readValue(PRESENTATION_DEFINITION_JSON, PresentationDefinitionDTO.class)) + .thenThrow(new RuntimeException("JSON parsing failed")); + doNothing().when(verifierService).validateVerifier(CLIENT_ID, REDIRECT_URI); + + String expectedRedirectUrl = String.format( + "%s?error_code=%s&error_message=%s", + REDIRECT_URI, + ErrorConstants.INTERNAL_SERVER_ERROR.getErrorCode(), + URLEncoder.encode(ErrorConstants.INTERNAL_SERVER_ERROR.getErrorMessage(), StandardCharsets.UTF_8) + ); + + // Act & Assert + mockMvc.perform(get("/authorize") + .param("response_type", RESPONSE_TYPE) + .param("resource", RESOURCE) + .param("presentation_definition", PRESENTATION_DEFINITION_JSON) + .param("client_id", CLIENT_ID) + .param("redirect_uri", REDIRECT_URI)) + .andExpect(status().isFound()) + .andExpect(redirectedUrl(expectedRedirectUrl)); + + verify(verifierService).validateVerifier(CLIENT_ID, REDIRECT_URI); + verify(presentationService, never()).authorizePresentation(any()); + } + + @Test + public void testPerformAuthorizationMissingRequiredParameters() throws Exception { + // Test missing response_type + mockMvc.perform(get("/authorize") + .param("resource", RESOURCE) + .param("presentation_definition", PRESENTATION_DEFINITION_JSON) + .param("client_id", CLIENT_ID) + .param("redirect_uri", REDIRECT_URI)) + .andExpect(status().isBadRequest()); + + // Test missing resource + mockMvc.perform(get("/authorize") + .param("response_type", RESPONSE_TYPE) + .param("presentation_definition", PRESENTATION_DEFINITION_JSON) + .param("client_id", CLIENT_ID) + .param("redirect_uri", REDIRECT_URI)) + .andExpect(status().isBadRequest()); + + // Test missing presentation_definition + mockMvc.perform(get("/authorize") + .param("response_type", RESPONSE_TYPE) + .param("resource", RESOURCE) + .param("client_id", CLIENT_ID) + .param("redirect_uri", REDIRECT_URI)) + .andExpect(status().isBadRequest()); + + // Test missing client_id + mockMvc.perform(get("/authorize") + .param("response_type", RESPONSE_TYPE) + .param("resource", RESOURCE) + .param("presentation_definition", PRESENTATION_DEFINITION_JSON) + .param("redirect_uri", REDIRECT_URI)) + .andExpect(status().isBadRequest()); + + // Test missing redirect_uri + mockMvc.perform(get("/authorize") + .param("response_type", RESPONSE_TYPE) + .param("resource", RESOURCE) + .param("presentation_definition", PRESENTATION_DEFINITION_JSON) + .param("client_id", CLIENT_ID)) + .andExpect(status().isBadRequest()); + + // Verify no service calls were made + verify(verifierService, never()).validateVerifier(anyString(), anyString()); + verify(presentationService, never()).authorizePresentation(any()); + } + + @Test + public void testPerformAuthorizationEmptyParameters() throws Exception { + // Arrange + doThrow(new InvalidVerifierException("EMPTY_CLIENT_ID", "Client ID cannot be empty")) + .when(verifierService).validateVerifier("", ""); + + String expectedRedirectUrl = String.format( + "https://inji.web.redirect.url?error_code=%s&error_message=%s", + "EMPTY_CLIENT_ID", + URLEncoder.encode("Client ID cannot be empty", StandardCharsets.UTF_8) + ); + + // Act & Assert + mockMvc.perform(get("/authorize") + .param("response_type", "") + .param("resource", "") + .param("presentation_definition", "") + .param("client_id", "") + .param("redirect_uri", "")) + .andExpect(status().isFound()) + .andExpect(redirectedUrl(expectedRedirectUrl)); + } + + @Test + public void testPerformAuthorizationSpecialCharactersInParameters() throws Exception { + // Arrange + String specialClientId = "client@#$%^&*()"; + String specialRedirectUri = "https://example.com/callback?param=value&other=test"; + String specialResource = "https://example.com/resource?id=123&type=credential"; + + PresentationDefinitionDTO mockPresentationDefinitionDTO = new PresentationDefinitionDTO(); + when(objectMapper.readValue(PRESENTATION_DEFINITION_JSON, PresentationDefinitionDTO.class)) + .thenReturn(mockPresentationDefinitionDTO); + when(presentationService.authorizePresentation(any(PresentationRequestDTO.class))) + .thenReturn(SUCCESS_REDIRECT_URL); + doNothing().when(verifierService).validateVerifier(specialClientId, specialRedirectUri); + + // Act & Assert + mockMvc.perform(get("/authorize") + .param("response_type", RESPONSE_TYPE) + .param("resource", specialResource) + .param("presentation_definition", PRESENTATION_DEFINITION_JSON) + .param("client_id", specialClientId) + .param("redirect_uri", specialRedirectUri)) + .andExpect(status().isFound()) + .andExpect(redirectedUrl(SUCCESS_REDIRECT_URL)); + + verify(verifierService).validateVerifier(specialClientId, specialRedirectUri); + verify(presentationService).authorizePresentation(any(PresentationRequestDTO.class)); + } +} diff --git a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java index 310831bd7..acac2ffc3 100644 --- a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java @@ -2,25 +2,37 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.constant.CredentialFormat; import io.mosip.mimoto.dto.mimoto.VCCredentialProperties; import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; +import io.mosip.mimoto.dto.mimoto.VCCredentialResponseProof; +import io.mosip.mimoto.dto.openid.presentation.InputDescriptorDTO; +import io.mosip.mimoto.dto.openid.presentation.PresentationDefinitionDTO; import io.mosip.mimoto.dto.openid.presentation.PresentationRequestDTO; import io.mosip.mimoto.exception.VPNotCreatedException; import io.mosip.mimoto.service.impl.DataShareServiceImpl; import io.mosip.mimoto.service.impl.PresentationServiceImpl; import io.mosip.mimoto.service.impl.VerifierServiceImpl; +import io.mosip.mimoto.util.JwtUtils; import io.mosip.mimoto.util.TestUtilities; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; +import org.mockito.MockedStatic; import org.mockito.junit.MockitoJUnitRunner; import org.springframework.test.util.ReflectionTestUtils; import java.io.IOException; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import static io.mosip.mimoto.util.JwtUtils.parseJwtHeader; import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.*; @@ -68,4 +80,135 @@ public void credentialProofMismatchWithVPRequest() throws IOException { .thenReturn((VCCredentialProperties) vcCredentialResponse.getCredential()); presentationService.authorizePresentation(TestUtilities.getPresentationRequestDTO()); } + + @Test + public void sdJwtCredentialMatchingWithVPRequest() throws Exception { + VCCredentialResponse vcCredentialResponse = createSDJwtCredentialResponse("vc+sd-jwt"); + PresentationRequestDTO presentationRequestDTO = createSDJwtPresentationRequest(); + Map jwtHeaders = Map.of("alg", "ES256", "typ", "JWT"); + + when(dataShareService.downloadCredentialFromDataShare(eq(presentationRequestDTO))).thenReturn(vcCredentialResponse); + when(objectMapper.convertValue(eq(vcCredentialResponse.getCredential()), eq(String.class))) + .thenReturn("eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.test.signature"); + + try (MockedStatic jwtUtilsMock = mockStatic(io.mosip.mimoto.util.JwtUtils.class)) { + jwtUtilsMock.when(() -> parseJwtHeader(anyString())).thenReturn(jwtHeaders); + + String expectedRedirectUrl = "test_redirect_uri#vp_token=dGVzdC1kYXRh&presentation_submission=test-data"; + String actualRedirectUrl = presentationService.authorizePresentation(presentationRequestDTO); + + assertEquals(expectedRedirectUrl, actualRedirectUrl); + } + } + + // Error handling - essential for robustness + @Test(expected = VPNotCreatedException.class) + public void nullPresentationDefinitionWithVPRequest() throws IOException { + VCCredentialResponse vcCredentialResponse = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); + PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); + presentationRequestDTO.setPresentationDefinition(null); + + when(dataShareService.downloadCredentialFromDataShare(eq(presentationRequestDTO))).thenReturn(vcCredentialResponse); + + presentationService.authorizePresentation(presentationRequestDTO); + } + + @Test(expected = VPNotCreatedException.class) + public void uriTooLongWithVPRequest() throws IOException { + ReflectionTestUtils.setField(presentationService, "maximumResponseHeaderSize", 10); // Very small limit + + VCCredentialResponse vcCredentialResponse = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); + PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); + + when(dataShareService.downloadCredentialFromDataShare(eq(presentationRequestDTO))).thenReturn(vcCredentialResponse); + when(objectMapper.convertValue(eq(vcCredentialResponse.getCredential()), eq(VCCredentialProperties.class))) + .thenReturn((VCCredentialProperties) vcCredentialResponse.getCredential()); + when(objectMapper.writeValueAsString(any())).thenReturn("very-long-test-data-that-exceeds-limit"); + + presentationService.authorizePresentation(presentationRequestDTO); + } + + // Presentation definition construction - key functionality + @Test + public void constructPresentationDefinitionForLdpVcCredential() { + VCCredentialResponse vcCredentialResponse = createLdpVcCredentialResponse(); + VCCredentialProperties credential = (VCCredentialProperties) vcCredentialResponse.getCredential(); + when(objectMapper.convertValue(eq(vcCredentialResponse.getCredential()), eq(VCCredentialProperties.class))) + .thenReturn(credential); + + PresentationDefinitionDTO result = presentationService.constructPresentationDefinition(vcCredentialResponse); + + assertNotNull(result); + assertNotNull(result.getId()); + assertEquals(1, result.getInputDescriptors().size()); + + InputDescriptorDTO inputDescriptor = result.getInputDescriptors().get(0); + assertNotNull(inputDescriptor.getId()); + assertTrue(inputDescriptor.getFormat().containsKey("ldpVc")); + assertTrue(inputDescriptor.getFormat().get("ldpVc").containsKey("proofTypes")); + } + + @Test + public void constructPresentationDefinitionForSdJwtCredential() { + VCCredentialResponse vcCredentialResponse = createSDJwtCredentialResponse("vc+sd-jwt"); + Map jwtPayload = Map.of("type", Arrays.asList("VerifiableCredential", "TestCredential")); + Map jwtHeaders = Map.of("alg", "ES256", "typ", "JWT"); + + try (MockedStatic jwtUtilsMock = mockStatic(io.mosip.mimoto.util.JwtUtils.class)) { + jwtUtilsMock.when(() -> JwtUtils.extractJwtPayloadFromSdJwt(anyString())).thenReturn(jwtPayload); + jwtUtilsMock.when(() -> JwtUtils.parseJwtHeader(anyString())).thenReturn(jwtHeaders); + + PresentationDefinitionDTO result = presentationService.constructPresentationDefinition(vcCredentialResponse); + + assertNotNull(result); + assertEquals(1, result.getInputDescriptors().size()); + assertTrue(result.getInputDescriptors().get(0).getFormat().containsKey("vc+sd-jwt")); + } + } + + // Helper methods + private VCCredentialResponse createSDJwtCredentialResponse(String format) { + VCCredentialResponse response = new VCCredentialResponse(); + response.setFormat(format); + response.setCredential("eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.test.signature"); + return response; + } + + private PresentationRequestDTO createSDJwtPresentationRequest() { + PresentationRequestDTO request = new PresentationRequestDTO(); + request.setRedirectUri("test_redirect_uri"); + + Map>> format = Map.of( + "vc+sd-jwt", Map.of("sd-jwt_alg_values", Arrays.asList("ES256")) + ); + + InputDescriptorDTO inputDescriptor = InputDescriptorDTO.builder() + .id("test-id") + .format(format) + .build(); + + PresentationDefinitionDTO presentationDefinition = PresentationDefinitionDTO.builder() + .id("test-presentation-def") + .inputDescriptors(Arrays.asList(inputDescriptor)) + .build(); + + request.setPresentationDefinition(presentationDefinition); + return request; + } + + private VCCredentialResponse createLdpVcCredentialResponse() { + VCCredentialResponse response = new VCCredentialResponse(); + response.setFormat(CredentialFormat.LDP_VC.getFormat()); + + VCCredentialProperties credential = new VCCredentialProperties(); + credential.setType(Arrays.asList("VerifiableCredential", "TestCredential")); + credential.setContext("https://www.w3.org/2018/credentials/v1"); + + VCCredentialResponseProof proof = new VCCredentialResponseProof(); + proof.setType("Ed25519Signature2020"); + credential.setProof(proof); + + response.setCredential(credential); + return response; + } } From 8c7196abf373b226cd0ac3667382bb7ce20c2162 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Thu, 7 Aug 2025 10:54:14 +0530 Subject: [PATCH 743/860] [Injiweb 1663] Update and add brief comment for the configuration properties in docker compose and local config files to keep them consistent in both places * [INJIWEB-1663] update the config property files in docker compose and resources folder to keep them consistent and add comments for the each property in these files Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .talismanrc | 30 +- README.md | 29 +- .../main/resources/config/IDRepo.properties | 2 +- docker-compose/README.md | 153 ++++++-- .../config/data-share-standalone.properties | 2 +- .../config/mimoto-bootstrap.properties | 31 ++ .../config/mimoto-default.properties | 345 +++++++++++------- .../config/mimoto-trusted-verifiers.json | 2 +- docker-compose/docker-compose.yml | 8 +- .../impl/CredentialShareServiceImpl.java | 10 - .../java/io/mosip/mimoto/util/JoseUtil.java | 2 - .../resources/application-default.properties | 218 +++++++++-- .../resources/application-local.properties | 250 +++++-------- src/main/resources/application.properties | 1 - src/main/resources/bootstrap.properties | 4 + .../resources/mimoto-trusted-verifiers.json | 21 +- .../resources/application-test.properties | 2 +- 17 files changed, 707 insertions(+), 403 deletions(-) create mode 100644 docker-compose/config/mimoto-bootstrap.properties delete mode 100644 src/main/resources/application.properties diff --git a/.talismanrc b/.talismanrc index 8b0fbafd2..f1ce1c4fa 100644 --- a/.talismanrc +++ b/.talismanrc @@ -23,8 +23,10 @@ fileignoreconfig: checksum: 81b14da4f42f335cf6a3094489844962b92fc629c89691487558c71c3d44a915 - filename: src/main/java/io/mosip/mimoto/controller/CredentialShareController.java checksum: 666c22ca63adb8770de901e220f8efeb5ec1d3f63064a58dea33ba49b8e15872 +- filename: src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java + checksum: 1aabb69041c31bcfe04c89766759121bff7381df4c495384fd42ff6d47dc0fe1 - filename: src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java - checksum: b04c0ff467788706b21b1576db06f1482c5d1684744fb0e6c4236aa61037c8aa + checksum: 3349bda92b9e594f99bf0f0e79f7c52fb378c82384a8d3997986e85fb5ce1ec6 - filename: src/main/java/io/mosip/mimoto/controller/IssuersController.java checksum: 856d860de2562fa019ac23bd724b84e1d67b834883b332c12415e6714de9bb05 - filename: helm/mimoto/templates/deployment.yaml @@ -46,7 +48,7 @@ fileignoreconfig: - filename: src/main/java/io/mosip/mimoto/exception/PlatformErrorMessages.java checksum: eddc1f3d44e8b8676c5c4ff6ed94ba9018f3a562d4e17908234704493ec6b35e - filename: src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java - checksum: 4b17319b2ec9e41c943798700d7bf382281f1dd752246e635991f398a9bc9234 + checksum: 0200972fc4feb033ab7949fe5f1d02c5ac03caa6fdc5b8559115fb884fc38276 - filename: src/main/java/io/mosip/mimoto/util/RestApiClient.java checksum: 77b8afdefbb1f8ff56e140836e6713d150ac48f99c6778e43bc2854e5fcd4732 - filename: src/main/java/io/mosip/mimoto/util/CryptoUtil.java @@ -68,17 +70,17 @@ fileignoreconfig: - filename: helm/mimoto/values.yaml checksum: 894215a6578dd6f27e22df1554ee87bfc7ef0f579d03c805f30d976546dfee35 - filename: src/main/java/io/mosip/mimoto/util/JoseUtil.java - checksum: 65c4d7f9d4f28e7e4e5376e4f6cdce8b49b485c3ea2ab214f72d018d5d73b6aa -- filename: README.md - checksum: 1f5deaa63f65986c215dedc9adc6021b4d15dd4e475802013816b130373be3d0 + checksum: b6123f66cb7dbe208cb8d5f8b4b664d742c918608ec0ad22dfa3ab27ab9ec32e - filename: docker-compose/docker-compose.yml - checksum: 857f5dcebdef810161b9ef09ad078c091c7d9969035bc45132975b296675dac9 + checksum: 6c4765658ac673aeda9cdd4107776d0c706f63eff3543c8b82b2d84b061310cd - filename: src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java checksum: 90dce7daa19f0eb9050194a3c77a88d449a83c337d9041bfdeb7bfded3bbd12c - filename: src/main/java/io/mosip/mimoto/exception/ErrorConstants.java checksum: 21e2e13d05f14c20274524b531447886ee6582e618197255f00a2fcef562213c - filename: src/test/java/io/mosip/mimoto/util/TestUtilities.java checksum: f916181b87d1388fa639267086a14dc5e5d7fcd4b27bd013919a46d8cebfa805 +- filename: src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java + checksum: c378e601f657a82ef59da49c01e3b9d39619a2aec143c71b8a269ab1aeb815a1 - filename: src/main/java/io/mosip/mimoto/service/WalletUnlockService.java checksum: 4a67a6393ad6e70bb7c999c7e5dbf9187e765aaf2ff64f465d4344f58c05a00c - filename: src/test/java/io/mosip/mimoto/service/WalletUnlockServiceTest.java @@ -113,10 +115,18 @@ fileignoreconfig: checksum: c669189f60e8fa5f0cb47d3c7cbb4ab34d87afbb6fb4de65b7eb06c691a41034 - filename: src/main/java/io/mosip/mimoto/constant/SigningAlgorithm.java checksum: fcb462b4baec6db1aa48c16fad923dc7a20407aa072efeb3879c236e7a4d74fe +- filename: api-test/src/main/resources/config/IDRepo.properties + checksum: dfdffc817362f6c6067a5c2ce5db9c6759faebaf754590deea307bbb71e81381 - filename: src/test/resources/application-test.properties - checksum: ef0f61c5a977aef0e7c71d5c4761805654eb7abbd44affa3814bec924cbc340a -- filename: docker-compose/config/mimoto-default.properties - checksum: 8f930ada726909cf0ad4e1112d8b4cca7b7eae7268f8e6b1abe38cb5f739d24c + checksum: eff6c72dfdc2e0a2aa4e3ec9d520a1433189902467954d123bc562df095a43bd - filename: src/main/resources/application-local.properties - checksum: 11e815832a44edfd9ba5499bed2e9037ae694eb8ce9968e1798b848d436e9871 + checksum: 34912123b9623afcea04e5e6726d614dd20e67b1dd5e685fea92dce9077fa7be +- filename: docker-compose/config/mimoto-default.properties + checksum: c47e16427653b2283bfd7e0edda74aad3171aa16e0cc7dd1f8d31934c269e678 +- filename: src/main/resources/application-default.properties + checksum: 7f6395a9797fb780e14e9df5e637ff9ab3efefe662aff60414e936a716e59f4a +- filename: README.md + checksum: e774036bc8cf0bf82ca5bc0a4cd8b3501616b3309764f18a13cb4d9013b404af +- filename: docker-compose/README.md + checksum: 3290aef321dbbd1adeec634076e865d2d7f8058e4cc8d483afc416c7f82ae966 version: "" \ No newline at end of file diff --git a/README.md b/README.md index fcfd6ea0c..d66b011c9 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ This repository contains source code for backend service of Inji Mobile and Inji The project requires JDK 21, postgres, redis and google client credentials ### without docker-compose Build & install 1. Install pgadmin, redis and update application-local.properties file with values - ``` + ```properties spring.datasource.username= spring.datasource.password= spring.redis.password= @@ -22,24 +22,43 @@ The project requires JDK 21, postgres, redis and google client credentials spring.security.oauth2.client.registration.google.client-id= spring.security.oauth2.client.registration.google.client-secret= ``` -3. Run the SQLs using /deploy.sh script. from [db_scripts folder](db_scripts/inji_mimoto) +3. Add identity providers as issuers in the `mimoto-issuers-config.json` file of [resources folder](src/main/resources/mimoto-issuers-config.json). For each provider, create a corresponding object with its issuer-specific configuration. Refer to the [Issuers Configuration](docker-compose/README.md#mimoto-issuers-configuration) section for details on how to structure this file and understand each field's purpose and what values need to be updated. +4. Add or update the verifiers clientId, redirect and response Uris in `mimoto-trusted-verifiers.json` file of [resources folder](src/main/resources/mimoto-trusted-verifiers.json) for Verifiable credential Online Sharing. +5. Keystore(oidckeystore.p12) Configuration: + In the root directory, create a certs folder and generate an OIDC client. Add the onboard client’s key to the oidckeystore.p12 file and place this file inside the certs folder. + Refer to the [official documentation](https://docs.inji.io/inji-wallet/inji-mobile/technical-overview/customization-overview/credential_providers) for guidance on how to create the **oidckeystore.p12** file and add the OIDC client key to it. + * The **oidckeystore.p12** file stores keys and certificates, each identified by an alias (e.g., mpartner-default-mimoto-insurance-oidc). Mimoto uses this alias to find the correct entry and access the corresponding private key during the authentication flow. + * Update the **client_alias** field in the [mimoto-issuers-config.json](src/main/resources/mimoto-issuers-config.json) file with this alias so that Mimoto can load the correct key from the keystore. + * Also, update the **client_id** field in the [same file](src/main/resources//mimoto-issuers-config.json) with the client_id used during the onboarding process. + * Set the `oidc_p12_password` environment variable in the Mimoto service configuration inside docker-compose.yml to match the password used for the **oidckeystore.p12** file. + * Update the following properties in applicatio-local.properties file + ```properties + mosip.oidc.p12.password= + mosip.kernel.keymanager.hsm.config-path= + mosip.kernel.keymanager.hsm.keystore-pass= + ``` + * Mimoto also uses this same keystore file (oidckeystore.p12) to store keys generated at service startup, which are essential for performing encryption and decryption operations through the KeyManager service. + +6. To configure any Mobile Wallet specific configurations refer to the [Inji Mobile Wallet Configuration](docker-compose/README.md#inji-mobile-wallet-configuration) section. +7. Run the SQLs using /deploy.sh script. from [db_scripts folder](db_scripts/inji_mimoto) ``` ./deploy.sh deploy.properties ``` -4. Build the jar +8. Build the jar ``` mvn clean install -Dgpg.skip=true -Dmaven.javadoc.skip=true -DskipTests=true ``` -5. Run following command +9. Run following command ``` mvn spring-boot:run -Dspring.profiles.active=local ``` + ### with docker-compose 1. To simplify running mimoto in local for developers we have added [Docker Compose Setup](docker-compose/README.md). This docker-compose includes mimoto service and nginx service to server static data. 2. Follow the below steps to use custom build image in docker-compose * Build the mimoto.jar ```mvn clean install -Dgpg.skip=true -Dmaven.javadoc.skip=true -DskipTests=true``` -* Build docker image, use any image tag +* Build docker image by running the below command in the directory where Dockerfile is present, use any image tag ```docker build -t .``` * Use newly built docker image in docker-compose file diff --git a/api-test/src/main/resources/config/IDRepo.properties b/api-test/src/main/resources/config/IDRepo.properties index 361cd04b1..02eec25fe 100644 --- a/api-test/src/main/resources/config/IDRepo.properties +++ b/api-test/src/main/resources/config/IDRepo.properties @@ -11,7 +11,7 @@ key=value #PreRegistration resource uris #Make sure all resource apis are covered -ui.config.params=preregistration.login.mode,preregistration.workflow.demographic,preregistration.workflow.documentupload,preregistration.workflow.booking,preregistration.booking.offset,preregistration.auto.logout,preregistration.rebook.timespan,preregistration.cancel.timespan,preregistration.book.days,preregistration.max.file.size,preregistration.recommended.centers.locCode,preregistration.nearby.centers,mosip.regex.email,mosip.regex.postalCode,mosip.regex.textField,mosip.regex.phone,mosip.regex.DOB,mosip.regex.CNIE,mosip.supported-languages,mosip.primary-language,mosip.secondary-language,mosip.default.dob,mosip.kernel.otp.expiry-time,mosip.kernel.otp.validation-attempt-threshold,mosip.kernel.otp.default-length,mosip.kernel.sms.number.length,mosip.kernel.pin.length,otpChannel.mobile +ui.config.params=preregistration.login.mode,preregistration.workflow.demographic,preregistration.workflow.documentupload,preregistration.workflow.booking,preregistration.booking.offset,preregistration.auto.logout,preregistration.rebook.timespan,preregistration.cancel.timespan,preregistration.book.days,preregistration.max.file.size,preregistration.recommended.centers.locCode,preregistration.nearby.centers,mosip.regex.email,mosip.regex.postalCode,mosip.regex.textField,mosip.regex.phone,mosip.regex.DOB,mosip.regex.CNIE,mosip.primary-language,mosip.secondary-language,mosip.default.dob,mosip.kernel.otp.expiry-time,mosip.kernel.otp.validation-attempt-threshold,mosip.kernel.otp.default-length,mosip.kernel.sms.number.length,mosip.kernel.pin.length,otpChannel.mobile private static final String preReg_URI = "/booking/v0.1/preregistration/booking/book" preReg_CreateApplnURI = /preregistration/v1/applications preReg_FetchRegistrationDataURI = /preregistration/v1/applications/{preRegistrationId} diff --git a/docker-compose/README.md b/docker-compose/README.md index 524564c4e..eaf550eee 100644 --- a/docker-compose/README.md +++ b/docker-compose/README.md @@ -10,31 +10,67 @@ This is the docker-compose setup to run mimoto which act as BFF for Inji mobile ## How to run this setup? - -1. Add Id providers as issuers in mimoto-issuers-config.json. For each provider, include the token_endpoint property, which should be an HTTPS URL. This can either be an exposed domain or, for local setups, an ngrok URL if you're using mimoto for local testing with the Inji mobile wallet. - -2. Add verifiers clientId and redirect Uris in mimoto-trusted-verifiers.json for Online Sharing - -3. Start esignet services and update esignet host references in mimoto-default.properties and mimoto-issuers-config.json - -4. Create certs folder in the same directory and create OIDC client. Add key in oidckeystore.p12 and copy this file under certs folder. -Refer [here](https://docs.inji.io/inji-wallet/inji-mobile/technical-overview/customization-overview/credential_providers) to create client -* Update client_id and client_alias as per onboarding in mimoto-issuers-config.json file. -* Update oidc_p12_password in docker-compose.yml to match the password set for the oidckeystore.p12 file. -5. Refer to the [How to create Google Client Credentials](#how-to-create-google-client-credentials) section to create - Google client credentials. - - Replace the placeholders in the `docker-compose.yml` file with the generated credentials: - +1. Refer to the [How to create Google Client Credentials](#how-to-create-google-client-credentials) section to create + Google client credentials and replace the below placeholders of Mimoto service in the `docker-compose.yml` file with the generated credentials: ```yaml environment: - GOOGLE_OAUTH_CLIENT_ID= - GOOGLE_OAUTH_CLIENT_SECRET= - -6. Start the docker-compose file - -> docker-compose up - -7. Access Apis as + ``` + +2. Add identity providers as issuers in the `mimoto-issuers-config.json` file of [docker-compose config folder](config/mimoto-issuers-config.json). For each provider, create a corresponding object with its issuer-specific configuration. Refer to the [Issuers Configuration](#mimoto-issuers-configuration) section for details on how to structure this file and understand each field's purpose and what values need to be updated. + +3. Add or update the verifiers clientId, redirect and response Uris in `mimoto-trusted-verifiers.json` file of [docker-compose config folder](config/mimoto-trusted-verifiers.json) for Verifiable credential Online Sharing. + +4. In the root directory, create a certs folder and generate an OIDC client. Add the onboard client’s key to the oidckeystore.p12 file and place this file inside the certs folder. + Refer to the [official documentation](https://docs.inji.io/inji-wallet/inji-mobile/technical-overview/customization-overview/credential_providers) for guidance on how to create the **oidckeystore.p12** file and add the OIDC client key to it. + * The **oidckeystore.p12** file stores keys and certificates, each identified by an alias (e.g., mpartner-default-mimoto-insurance-oidc). Mimoto uses this alias to find the correct entry and access the corresponding private key during the authentication flow. + * Update the **client_alias** field in the [mimoto-issuers-config.json](config/mimoto-issuers-config.json) file with this alias so that Mimoto can load the correct key from the keystore. + * Also, update the **client_id** field in the same file with the client_id used during the onboarding process. + * Set the `oidc_p12_password` environment variable in the Mimoto service configuration inside docker-compose.yml to match the password used for the **oidckeystore.p12** file. + * Mimoto also uses this same keystore file (oidckeystore.p12) to store keys generated at service startup, which are essential for performing encryption and decryption operations through the KeyManager service. + + +5. To configure any Mobile Wallet specific configurations refer to the [Inji Mobile Wallet Configuration](#inji-mobile-wallet-configuration) section. + +6. Choose your setup for starting the services: + - **Starting all services via Docker Compose (including Mimoto):** + Run the following command to start the services + ```bash + docker-compose up + ``` + - **Running Mimoto in IDE and other services like `datashare service` via Docker Compose:** + 1. In `docker-compose.yml`, update the `DATASHARE_DOMAIN` environment variable for the `Datashare service` to `localhost:8097`. + 2. Then, start your dependent services by running the following command + ```bash + docker-compose up # Use this to comment inji web service and start all the other services defined in docker-compose.yml + # OR + docker-compose up datashare other_service_name # To start specific services (replace with actual names) + ``` + **Note:** Use the **-d** flag with docker-compose up to run the services in detached (background) mode. + +7. To stop all the services, navigate to docker-compose folder and run the following command + ```bash + docker-compose down + ``` + +8. To stop a specific service (e.g., mimoto-service) and remove its container and image, run the following commands + ```bash + docker-compose stop # To stop a specific service container + docker-compose rm # To remove a specific service container + docker rmi # To remove a specific service image + ``` + +9. **Removing the Docker Volume:** + - To remove the persistent data for a specific service within an application, you can delete its individual Docker volume. This is necessary in situations where you need to start fresh or when data has become corrupted. + - For example, if you update the oidckeystore.p12 file, the mimoto service might fail to start. This happens because the new .p12 file may not contain the keys that are stored in the database's key alias table. Since these keys are used in the encryption and decryption flow, their absence prevents the service from functioning correctly. To fix this, you must remove the postgres-data volume to clear the old, encrypted data, which allows the service to start correctly with a new dataset. + + - Use the following command to remove the volume: + ```Bash + docker volume rm # E.g., docker volume rm docker-compose_postgres-data + ``` + +10. Access Apis as * http://localhost:8099/v1/mimoto/allProperties * http://localhost:8099/v1/mimoto/issuers * http://localhost:8099/v1/mimoto/issuers/StayProtected @@ -83,5 +119,80 @@ To enable Google OAuth2.0 authentication, follow these steps: 7. **Save and Retrieve Client Credentials**: - After saving, you will receive a `Client ID` and `Client Secret`. +## 📄Mimoto Issuers Configuration + +The mimoto-issuers-config.json file defines the list of Credential Issuers that support Verifiable Credential issuance using the OpenID4VCI protocol. Mimoto uses it to load Issuer metadata configuration like logo, client details and endpoints needed for initiating and completing credential issuance. + +### 🧩Structure and example + +```json +{ + "issuers": [ + { + "issuer_id": "StayProtected", + "credential_issuer": "StayProtected", + "display": [ + { + "name": "StayProtected Insurance", + "logo": { + "url": "https://raw.githubusercontent.com/tw-mosip/file-server/master/StayProtectedInsurance.png", + "alt_text": "a square logo of a Sunbird" + }, + "language": "en", + "title": "Download StayProtected Insurance Credentials", + "description": "Download insurance credential" + } + ], + "protocol": "OpenId4VCI", + "client_id": "esignet-sunbird-partner", + "client_alias": "esignet-sunbird-partner", + "wellknown_endpoint": "https://injicertify-insurance.collab.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer", + "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", + "authorization_audience": "https://esignet-insurance.collab.mosip.net/v1/esignet/oauth/v2/token", + "token_endpoint": "https://localhost:8099/v1/mimoto/get-token/StayProtected", + "proxy_token_endpoint": "https://esignet-insurance.collab.mosip.net/v1/esignet/oauth/v2/token", + "qr_code_type": "OnlineSharing", + "credential_issuer_host": "https://injicertify-insurance.collab.mosip.net", + "enabled": "true" + } + ] +} +``` + +### Issuer configuration field Descriptions + +| Field | Description | Value | Required | +| ------------------------ |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------| +| `issuer_id` | Unique identifier for the Issuer | Use your own Issuer's name, e.g., `"HealthInsuranceIssuer"` | Mandatory | +| `credential_issuer` | Logical name (usually the same as `issuer_id`) | Same as above or a recognizable alias | Mandatory | +| `display[]` | A list of display configurations, one per supported language. Each object includes localized fields like `name`, `logo.url`, `logo.alt_text`, `language`, `title`, `description` | Provide user-facing display metadata such as Issuer name, logo, and descriptions. You can customize existing entries or add new ones for each supported language | Mandatory | +| `protocol` | Protocol used; must be `"OpenId4VCI"` | Do not change unless the protocol evolves | Mandatory | +| `client_id` | OAuth client ID registered with the Issuer during onboarding | Replace with the client ID provided when onboarding Issuer with the Issuer’s authorization server | Mandatory | +| `client_alias` | Internal alias for the Issuer (e.g., used to fetch secure credentials of Issuer from keystore file `oidckeystore.p12`) | Set this to the alias value provided while inserting an entry for the Issuer into oidckeystore.p12 file during Issuer onboarding | Mandatory | +| `wellknown_endpoint` | URL to the Issuer's `.well-known/openid-credential-issuer` endpoint as per OpenID4VCI spec | Replace with your Issuer’s actual metadata endpoint to discover important configuration details about the Credential Issuer | Mandatory | +| `redirect_uri` | OAuth2 redirect URI of your app where users are sent after authentication; must match one registered with the Issuer's authorization server | Replace with one of the URI's that were registered during Issuer onboarding on the authorization server | Mandatory | +| `authorization_audience` | Audience value for token requests | Usually the base URL of the Issuer’s token service | Mandatory | +| `token_endpoint` | Internal proxy token endpoint provided by Mimoto to forward requests to the real Auth server and it should be HTTPS URL | Use an internal/exposed domain or an ngrok URL if testing locally with the Inji mobile wallet | Mandatory | +| `proxy_token_endpoint` | Actual token endpoint of the Authorization server | Replace with the Auth server's token endpoint URL | Mandatory | +| `qr_code_type` | Type of QR code: `"OnlineSharing"` or `"EmbeddedVC"` | Use `"OnlineSharing"` to embed the OpenID4VP authorization request in a Verifiable Credential PDF QR code for verifiers to verify it. Use `"EmbeddedVC"` to embed the entire Verifiable Credential in the QR code (typically for offline use) | Optional | +| `credential_issuer_host` | Host/domain of the credential Issuer | Replace with your Issuer's domain | Mandatory | +| `enabled` | Enables or disables this Issuer configuration | Set to `"false"` to disable or hide this Issuer | Mandatory | + +### ✅ How to Add a New Issuer + +1. Add a new Issuer object in the mimoto-issuers-config.json file using the structure, field descriptions, and example provided above. +2. Ensure: + - All the configured endpoints for the Issuer and its Authorization server are reachable and functional. + - `redirect_uri` matches one of the URIs registered with the Issuer’s Authorization server during Issuer onboarding. + - `client_id` matches the one provided during Issuer onboarding with the Issuer's Authorization server. + - `client_alias` for each Issuer is correctly configured and available in the oidckeystore.p12 file. +3. For step-by-step guidance on how to add a new Issuer and generate the oidckeystore.p12 file, refer to the [Customization Overview](https://docs.inji.io/inji-wallet/inji-mobile/technical-overview/customization-overview/credential_providers) documentation. + +## Inji Mobile Wallet Configuration +To bind an Android or iOS wallet using the e-signet service via Mimoto, ensure the following property is updated in application-local.properties (if running Mimoto using IDE) or mimoto-default.properties (if running Mimoto using docker compose) to point to the appropriate e-signet instance running in your target environment +```properties + mosip.esignet.host= (E.g. https://esignet.env.mosip.net) +``` + Note: - Replace mosipbox.public.url, mosip.api.public.url with your public accessible domain. For dev or local env [ngrok](https://ngrok.com/docs/getting-started/) is recommended. diff --git a/docker-compose/config/data-share-standalone.properties b/docker-compose/config/data-share-standalone.properties index 521347748..25bb3c95e 100644 --- a/docker-compose/config/data-share-standalone.properties +++ b/docker-compose/config/data-share-standalone.properties @@ -4,7 +4,7 @@ mosip.data.share.standalone.mode.enabled=true # "mosip.data.share.standalone.mode.enabled" is set as true. # If we are using "encryptionType" as "Partner based" then subscriberId must be a valid subscriberId # i.e. should exist in system. -mosip.data.share.static-policy.policy-json={"typeOfShare":"","transactionsAllowed":"250","shareDomain":"datashare-service:8097","encryptionType":"NONE","source":"","validForInMinutes":"30"} +mosip.data.share.static-policy.policy-json={"typeOfShare":"","transactionsAllowed":"250","shareDomain":"${DATASHARE_DOMAIN}","encryptionType":"NONE","source":"","validForInMinutes":"30"} # Defines the policyId which will be taken into consideration if " # mosip.data.share.standalone.mode.enabled" is set as true. mosip.data.share.static-policy.policy-id=static-policyid diff --git a/docker-compose/config/mimoto-bootstrap.properties b/docker-compose/config/mimoto-bootstrap.properties new file mode 100644 index 000000000..120c9b23e --- /dev/null +++ b/docker-compose/config/mimoto-bootstrap.properties @@ -0,0 +1,31 @@ +spring.cloud.config.uri=http://nginx/ +spring.cloud.config.name=mimoto,inji +spring.application.name=mimoto + +#config.server.file.storage.uri=https://raw.githubusercontent.com/mosip/mosip-config/collab1/ +config.server.file.storage.uri=http://nginx/ + +management.endpoint.health.show-details=always +management.endpoints.web.exposure.include=info,health,refresh + +# The port number on which the Mimoto service will be running +server.port=8099 +# Base URL for all the APIs in Mimoto service +server.servlet.context-path=/v1/mimoto +# Sets the maximum allowed total size (in bytes) for all HTTP response headers generated by Tomcat, including the Location header for redirects +server.tomcat.max-http-response-header-size=65536 + +health.config.enabled=false + +openapi.info.title=${spring.application.name} +openapi.info.description=${spring.application.name} +openapi.info.version=1.0 +openapi.info.license.name=Mosip +openapi.info.license.url=https://docs.mosip.io/platform/license +openapi.service.servers[0].url=${mosip.api.public.url}${server.servlet.context-path} +openapi.service.servers[0].description=${spring.application.name} +openapi.group.name=${openapi.info.title} +openapi.group.paths[0]=/** +springdoc.swagger-ui.disable-swagger-default-url=true +springdoc.swagger-ui.tagsSorter=alpha +springdoc.swagger-ui.operationsSorter=alpha \ No newline at end of file diff --git a/docker-compose/config/mimoto-default.properties b/docker-compose/config/mimoto-default.properties index 7f9390e14..91761c058 100644 --- a/docker-compose/config/mimoto-default.properties +++ b/docker-compose/config/mimoto-default.properties @@ -1,24 +1,13 @@ -server.port=8099 -server.servlet.context-path=/v1/mimoto -health.config.enabled=false mosip.service.end-points=/**/* -mosipbox.public.url=http://localhost:${server.port} -mosip.api.public.url=http://localhost:${server.port} -mosip.resident.url=https://api.collab.mosip.net/v1/resident -mosip.esignet.host=https://esignet.collab.mosip.net -keycloak.external.url=https://iam.collab.mosip.net/ -mosip.kernel.authmanager.url=http://authmanager.kernel/ -mosip.websub.url=http://websub.websub/ - -# START inji-default.properties +# Inji default properties mosip.inji.allowedAuthType=demo,otp,bio-Finger,bio-Iris,bio-Face mosip.inji.allowedEkycAuthType=demo,otp,bio-Finger,bio-Iris,bio-Face mosip.inji.allowedInternalAuthType=otp,bio-Finger,bio-Iris,bio-Face mosip.inji.faceSdkModelUrl=https://api.collab.mosip.net/inji # maximum number of retry for downloading vc mosip.inji.vcDownloadMaxRetry=10 -# pool interval in milli seconds +# pool interval in milliseconds mosip.inji.vcDownloadPoolInterval=6000 # validate binding audience url to be sent in token mosip.inji.audience=ida-binding @@ -26,7 +15,7 @@ mosip.inji.audience=ida-binding mosip.inji.issuer=residentapp # warning screen domain name mosip.inji.warningDomainName=${mosip.api.public.url} -#timeout for vc download api via openid4vci flow in milliseconds +#timeout for vc download api via OpenId4VCI flow in milliseconds mosip.inji.openId4VCIDownloadVCTimeout=30000 # inji documentation url mosip.inji.aboutInjiUrl=https://docs.inji.io/inji-wallet/inji-mobile @@ -34,93 +23,81 @@ mosip.inji.aboutInjiUrl=https://docs.inji.io/inji-wallet/inji-mobile mosip.inji.minStorageRequiredForAuditEntry=2 # minimum storage space required for downloading / receiving vc in MB mosip.inji.minStorageRequired=2 -# END inji-default.properties - - -# START bootstrap.properties - -spring.cloud.config.uri=http://nginx/ -spring.cloud.config.name=mimoto,inji -spring.application.name=mimoto - -#config.server.file.storage.uri=https://raw.githubusercontent.com/mosip/mosip-config/collab1/ -config.server.file.storage.uri=http://nginx/ - -management.endpoint.health.show-details=always -management.endpoints.web.exposure.include=info,health,refresh - -openapi.info.title=${spring.application.name} -openapi.info.description=${spring.application.name} -openapi.info.version=1.0 -openapi.info.license.name=Mosip -openapi.info.license.url=https://docs.mosip.io/platform/license -openapi.service.servers[0].url=${mosip.api.public.url}${server.servlet.context-path} -openapi.service.servers[0].description=${spring.application.name} -openapi.group.name=${openapi.info.title} -openapi.group.paths[0]=/** -springdoc.swagger-ui.disable-swagger-default-url=true -springdoc.swagger-ui.tagsSorter=alpha -springdoc.swagger-ui.operationsSorter=alpha - -# END bootstrap.properties # MOSIP +# Defines the base URLs for various MOSIP services and Keycloak for internal and external communication +mosip.api.public.url=http://localhost:${server.port} +mosipbox.public.url=http://localhost:${server.port} +keycloak.internal.url=http://keycloak.keycloak +keycloak.external.url=https://iam.collab.mosip.net/ +mosip.kernel.authmanager.url=http://authmanager.kernel/ +mosip.kernel.masterdata.url=http://masterdata.kernel -public.url=${mosip.api.public.url}/v1/mimoto -mosip.resident.base.url=${mosip.resident.url}/resident/v1 -idp.binding.base.url=https://${mosip.esignet.host}/v1/esignet/binding -mosip.iam.adapter.disable-self-token-rest-template=true - +# Resident service Configurations used in downloading the Verifiable Credential of MosipOtp issuer +# Base URL for Resident service +mosip.resident.base.url=https://api.collab.mosip.net/resident/v1 +# This URL used for fetching the OTP from resident service prior to initiating the download flow on the Mobile Wallet RESIDENT_OTP=${mosip.resident.base.url}/req/otp +# This URL used for fetching the OTP while getting the UIN/VID from AID(Application ID) +RESIDENT_INDIVIDUALID_OTP=${mosip.resident.base.url}/individualId/otp +# This URL is used to get the status about whether the UIN/VID is generated from AID or not +RESIDENT_AID_GET_INDIVIDUALID=${mosip.resident.base.url}/aid/status +# URL to request the Verifiable Credential download from the Resident service RESIDENT_CREDENTIAL_REQUEST=${mosip.resident.base.url}/req/credential +# URL to check if the Verifiable Credential is downloaded yet or not RESIDENT_CREDENTIAL_REQUEST_STATUS=${RESIDENT_CREDENTIAL_REQUEST}/status +# URL used to get the VID for the respective UIN RESIDENT_VID=${mosip.resident.base.url}/vid RESIDENT_AUTH_LOCK=${mosip.resident.base.url}/req/auth-lock RESIDENT_AUTH_UNLOCK=${mosip.resident.base.url}/req/auth-unlock -RESIDENT_INDIVIDUALID_OTP=${mosip.resident.base.url}/individualId/otp -RESIDENT_AID_GET_INDIVIDUALID=${mosip.resident.base.url}/aid/status -BINDING_OTP=${idp.binding.base.url}/binding-otp -WALLET_BINDING=${idp.binding.base.url}/wallet-binding - -# Resident App -credential.template=template.json -credential.sample=sample_credential.json -credential.data.path=data -safetynet.api.key= -safetynet.api.url=https://www.googleapis.com/androidcheck/v1/attestations/verify?key=${safetynet.api.key} - -registration.processor.print.textfile=registration-processor-print-text-file.json - -# Websub +#Esignet service +# Base URL for e-Signet service +mosip.esignet.host=https://esignet.collab.mosip.net +# Endpoint for fetching the OTP in Wallet binding flow +BINDING_OTP=${mosip.esignet.host}/v1/esignet/binding/binding-otp +# Endpoint for binding the credentials to the Wallet +WALLET_BINDING=${mosip.esignet.host}/v1/esignet/binding/wallet-binding + +# Websub service configurations +# Dev sandbox +# Base URL for WebSub service +mosip.websub.url=http://websub.websub/ +# Hub URL for WebSub service mosip.event.hubUrl=${mosip.websub.url}/hub/ +# WebSub hub URL used to subscribe to a specific topic mosip.event.hub.subUrl=${mosip.event.hubUrl} +# WebSub hub URL used to publish the data to a specific topic mosip.event.hub.pubUrl=${mosip.event.hubUrl} +# Delayed WebSub subscription. Default is 5 seconds in ms. +mosip.event.delay-millisecs=5000 +# WebSub re-subscription workaround for losing subscribed topic when MOSIP WebSub update or restart. Default is 5 minutes in ms. +websub-resubscription-delay-millisecs=300000 -# MOSIP partner -mosip.partner.id=mpartner-default-mobile -mosip.event.callBackUrl=${public.url}/credentialshare/callback/notify +# Callback URL for receiving the WebSub event notifications +mosip.event.callBackUrl=${mosip.api.public.url}/v1/mimoto/credentialshare/callback/notify +# Kafka topic to which the CREDENTIAL_ISSUED for specific partner id is published mosip.event.topic=${mosip.partner.id}/CREDENTIAL_ISSUED +# Secret key used for validating the authenticity of the WebSub event notifications mosip.event.secret=Kslk30SNF2AChs2 - +# MOSIP partner +# Unique identifier which is being used as the Issuer during MOSIP OTP issuer Verifiable Credential download requests +mosip.partner.id=mpartner-default-mobile +# Name of the PKCS#12 keystore file for cryptographic operations mosip.partner.crypto.p12.filename=keystore.p12 -mosip.partner.crypto.p12.password=1234cryptopwd +# Password for accessing the PKCS#12 keystore file +mosip.partner.crypto.p12.password=abc123 +# Alias used to access the secure credentials like private key of partner within the PKCS#12 keystore file mosip.partner.crypto.p12.alias=partner -mosip.partner.encryption.key=${mosip.partner.crypto.p12.password} +# Encryption key used for securing partner data +mosip.partner.encryption.key=123456 +# Property which indicates whether the data includes its thumbprint (a unique hash for integrity verification) or not mosip.partner.prependThumbprint=true - -mosip.datashare.partner.id=mpartner-default-resident -mosip.datashare.policy.id=mpolicy-default-resident - - +# Property which defines whether protection against Cross-Site Request Forgery (CSRF) attacks should be enabled or disabled csrf.disabled=true -# Delayed websub subscription. Default is 5 seconds in ms. -mosip.event.delay-millisecs=5000 -# Websub re-subscription workaround for losing subscribed topic when MOSIP websub update or restart. Default is 5 minutes in ms. -websub-resubscription-delay-millisecs=86400000 #-------------TOKEN GENERATION---------------- #Token generation request id @@ -167,15 +144,14 @@ mosip.country.code=MOR registration.processor.signature.isEnabled=true # Language Supported By Platform - ISO -mosip.supported-languages=eng,ara,fra - -mosip.template-language=eng +# Defines the list of optional languages supported by the platform mosip.optional-languages=fra,ara +# Defines the list of mandatory languages supported by the platform mosip.mandatory-languages=eng - # mosip.primary-language=eng # mosip.secondary-language=ara + #----------------------- CBEFF Util-------------------------------------------------- # Cbeff URL where the files will be stored in git, change it accordingly in case of change of storage location. # mosip.kernel.xsdstorage-uri=${spring.cloud.config.uri}/${spring.application.name}/${spring.profiles.active}/${spring.cloud.config.label}/ @@ -183,8 +159,9 @@ mosip.kernel.xsdstorage-uri=https://raw.githubusercontent.com/mosip/mosip-config # Cbeff XSD file name in config server mosip.kernel.xsdfile=mosip-cbeff.xsd + #----------------------------- Applicant Type -------------------------------------------------- -mosip.kernel.applicant.type.age.limit = 5 +mosip.kernel.applicant.type.age.limit=5 #----------------------------- Static PIN -------------------------------------------------- mosip.kernel.pin.length=6 @@ -194,32 +171,36 @@ mosip.kernel.pin.length=6 mosip.kernel.tokenid.length=36 #------------------------------------ Key-manager specific properties -------------------------------------------------- - -#Crypto asymmetric algorithm name +# Crypto asymmetric algorithm name mosip.kernel.crypto.asymmetric-algorithm-name=RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING -#Crypto symmetric algorithm name +# Crypto symmetric algorithm name mosip.kernel.crypto.symmetric-algorithm-name=AES/GCM/NoPadding -#Encrypted data and encrypted symmetric key separator +# Encrypted data and encrypted symmetric key separator mosip.kernel.data-key-splitter=#KEY_SPLITTER# -#GCM tag length +# GCM tag length mosip.kernel.crypto.gcm-tag-length=128 -#Hash algo name +# Hash algo name mosip.kernel.crypto.hash-algorithm-name=PBKDF2WithHmacSHA512 -#Symmtric key length used in hash +# Symmetric key length used in hash mosip.kernel.crypto.hash-symmetric-key-length=256 -#No of iterations in hash +# No of iterations in hash mosip.kernel.crypto.hash-iteration=10000 +# Keygenerator symmetric algorithm name mosip.kernel.keygenerator.symmetric-algorithm-name=AES +# Symmetric algorithm key length mosip.kernel.keygenerator.symmetric-key-length=256 -#Asymmetric algorithm key length +# Asymmetric algorithm key length mosip.kernel.keygenerator.asymmetric-key-length=2048 -#Keygenerator asymmetric algorithm name +# Keygenerator asymmetric algorithm name mosip.kernel.keygenerator.asymmetric-algorithm-name=RSA +# Specifies the file path to the PKCS#12 keystore containing cryptographic keys for the KeyManager service mosip.kernel.keymanager.hsm.config-path=${SPRING_CONFIG_LOCATION}certs/oidckeystore.p12 +# Defines the type of the keystore used by the Key Manager as PKCS#12 mosip.kernel.keymanager.hsm.keystore-type=PKCS12 +# Password to access the KeyManager PKCS#12 keystore file mosip.kernel.keymanager.hsm.keystore-pass=${oidc_p12_password} - +# Default Certificate properties mosip.kernel.keymanager.certificate.default.common-name=www.example.com mosip.kernel.keymanager.certificate.default.organizational-unit=EXAMPLE-CENTER mosip.kernel.keymanager.certificate.default.organization=IIITB @@ -227,6 +208,31 @@ mosip.kernel.keymanager.certificate.default.location=BANGALORE mosip.kernel.keymanager.certificate.default.state=KA mosip.kernel.keymanager.certificate.default.country=IN +# keymanager database properties +# Specifies the driver class name for the PostgreSQL database, required for the application to interact with the database +keymanager.persistence.jdbc.driver=org.postgresql.Driver +# Specifies the JDBC URL for connecting to the PostgreSQL database, required to establish a connection to the inji_mimoto database +keymanager_database_url=${SPRING_DATASOURCE_URL} +# Defines the password for accessing the PostgreSQL database, required for authentication +keymanager_database_password=${POSTGRES_PASSWORD} +# Defines the username for accessing the PostgreSQL database, required for authentication +keymanager_database_username= mimotouser +# Specifies the schema name used by the Keymanager in the PostgreSQL database +keymanager.persistence.jdbc.schema=mimoto + +# Hibernate properties +hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect +hibernate.hbm2ddl.auto=none +hibernate.jdbc.lob.non_contextual_creation=true +hibernate.show_sql=false +hibernate.format_sql=false +hibernate.connection.charSet=utf8 +hibernate.cache.use_second_level_cache=false +hibernate.cache.use_query_cache=false +hibernate.cache.use_structured_entries=false +hibernate.generate_statistics=false +hibernate.current_session_context_class=org.springframework.orm.hibernate5.SpringSessionContext + # log level logging.level.root=WARN logging.level.io.mosip=INFO @@ -252,7 +258,6 @@ registration.processor.demographic.identity=identity CREATEDATASHARE=${mosip.injiweb.datashare.url}/v1/datashare/create DECRYPTPINBASSED=${mosip.kernel.keymanager.url}/v1/keymanager/decryptWithPin - #Auth Adapter rest template authentication configs mosip.iam.adapter.appid=partner mosip.iam.adapter.clientid=mpartner-default-mobile @@ -264,15 +269,12 @@ mosip.authmanager.base-url=${mosip.kernel.authmanager.url}/v1/authmanager mosip.authmanager.client-token-endpoint=${mosip.authmanager.base-url}/authenticate/clientidsecretkey auth.server.admin.validate.url=${mosip.kernel.authmanager.url}/v1/authmanager/authorize/admin/validateToken - # in minutes mosip.iam.adapter.validate-expiry-check-rate=1440 - # in minutes mosip.iam.adapter.renewal-before-expiry-interval=1440 #this should be false if you don?t use this restTemplate true if you do - mosip.iam.adapter.self-token-renewal-enable=true mosip.auth.filter_disable=true mosip.auth.adapter.impl.basepackage=io.mosip.kernel.auth.defaultadapter @@ -283,107 +285,176 @@ mosip.idp.partner.id=mpartner-default-mobile mosip.idp.partner.encryption.key=Aci9jg28B8mO_LDfDXo3ZTp5_HKgEMun2tYyHCa1e8k wallet.binding.partner.id=mpartner-default-mimotokeybinding wallet.binding.partner.api.key=1234walletbindingkey +mosip.iam.adapter.disable-self-token-rest-template=true -#mosip notification otp channel config +# Mosip notification otp channel config - defines the predefined list of otp channels allowed for sending the OTP to the user mosip.notificationtype=SMS|EMAIL|PHONE -# Configurations related to openid4vc +# OpenID4VCI related configurations +# Specifies the file name which includes the list of Issuers Configurations, including their well-known endpoints and other details mosip.openid.issuers=mimoto-issuers-config.json -mosip.openid.issuer.credentialSupported=/wellKnownIssuer/Insurance.json +# Fallback HTML template used to render the Verifiable Credential if no issuer-specific template is found mosip.openid.htmlTemplate=credential-template.html +# Specifies the type of client assertion used for OIDC authentication with e-signet (e.g., JWT bearer) mosip.oidc.client.assertion.type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer +# PKCS#12 keystore file name containing secured credentials (e.g., private key and client alias) for each onboarded issuer, used in the authentication flow with e-Signet mosip.oidc.p12.filename=oidckeystore.p12 +# Password to access the PKCS#12 keystore file mosip.oidc.p12.password=${oidc_p12_password} +# Relative path to the directory which contains PKCS#12 keystore file oidceystore.p12 mosip.oidc.p12.path=certs/ - -#OpenId4VP related Configuration START - -#File name for the mimoto trusted verifiers -mosip.openid.verifiers=mimoto-trusted-verifiers.json - -#Inji Web Config +# Inji Web Config +# Base URL for Inji Web application mosip.inji.web.url=http://localhost:3004 +# Inji Web Redirect URL which is used to show the error message in case of failure in OpenID4VP flow mosip.inji.web.redirect.url=${mosip.inji.web.url}/authorize -mosip.inji.web.authentication.success.redirect.url=${mosip.inji.web.url}/user/passcode -mosip.inji.qr.data.size.limit=10000 +# Defines the maximum number of characters allowed to be encoded into a QR code. The value can be set to anything less than or equal to 4096. +# If the data size exceeds 4096 characters (equivalent to 4KB), the 'pixel pass' library will fail to generate the QR code. +mosip.inji.qr.data.size.limit=4096 +# Defines the height (in Pixels) of the generated QR code mosip.inji.qr.code.height=650 +# Defines the width (in Pixels) of the generated QR code mosip.inji.qr.code.width=650 + +# Specifies the URL to redirect the user after successful authentication using Identity Provider(e.g., Goggle), pointing to the passcode page in Inji Web +mosip.inji.web.authentication.success.redirect.url=${mosip.inji.web.url}/user/passcode +# Defines the List of Issuers that are limited to issue only single Verifiable Credential +mosip.inji.wallet.issuersWithSingleVcLimit=Mosip + +#User Wallet Config +# Regular expression for validating wallet PINs, ensuring it is exactly 6 digits. mosip.inji.user.wallet.pin.validation.regex=^\\d{6}$ +# Regular expression for validating wallet names, allowing alphanumeric characters, spaces, underscores, hyphens, and periods, with a maximum length of 50 characters. mosip.inji.user.wallet.name.validation.regex=^[A-Za-z0-9 _.-]{0,50}$ -#OVP Config +#OpenId4VP related Configuration +# Pattern for including the OpenID4VP Authorization request in the QR code data of the Verifiable Credential, with placeholders for including resource(DataShare URL) and presentation definition mosip.inji.ovp.qrdata.pattern=INJI_OVP://http://localhost:${server.port}/v1/mimoto/authorize?response_type=vp_token&resource=%s&presentation_definition=%s +# Pattern for returning the response in redirect URL for successful Verifiable Presentation in OpenId4VP flow mosip.inji.ovp.redirect.url.pattern=%s#vp_token=%s&presentation_submission=%s +# Pattern for returning the error in redirect URL in case of Verifiable Presentation failure in OpenId4VP flow mosip.inji.ovp.error.redirect.url.pattern=%s?error=%s&error_description=%s +# File name containing trusted verifiers for OpenId4VP. It is used for validating the verifiers during the OpenID4VP process +mosip.openid.verifiers=mimoto-trusted-verifiers.json #DataShare Config +# Base URL for DataShare Service mosip.data.share.url=http://datashare-service:8097 -mosip.data.share.create.url=http://datashare-service:8097/v1/datashare/create/static-policyid/static-subscriberid -mosip.data.share.get.url.pattern=http://datashare-service:8097/v1/datashare/get/static-policyid/static-subscriberid/* +# Endpoint for creating DataShare requests and storing downloaded Verifiable Credentials +mosip.data.share.create.url=${mosip.data.share.url}/v1/datashare/create/static-policyid/static-subscriberid +# URL pattern used to validate DataShare URL and retrieve Verifiable Credential from DataShare +mosip.data.share.get.url.pattern=${mosip.data.share.url}/v1/datashare/get/static-policyid/static-subscriberid/* +# Specifies the maximum number of retry attempts for creating a DataShare request to store Verifiable Credential, ensuring reliability in case of transient failures mosip.data.share.create.retry.count=3 -#OpenId4VP related Configuration END - -#Caffeine cache related configurations -# Cache expiry time in minutes for the issuer's well-known endpoint response. -cache.credential-issuer.wellknown.expiry-time-in-min = 60 -# Cache expiry time in minutes for issuers configurations read from a config file. -cache.issuers-config.expiry-time-in-min = 60 -# Cache expiry time in minutes for the authentication server's well-known endpoint response. -cache.credential-issuer.authserver-wellknown.expiry-time-in-min = 60 -# Default cache expiry time in minutes for others cache types -cache.default.expiry-time-in-min = 60 - -#oauth2 config +#Google OAuth2 configuration +# Specifies the client ID for Google OAuth2 authentication, required to identify the application during OAuth2 requests. spring.security.oauth2.client.registration.google.client-id=${GOOGLE_OAUTH_CLIENT_ID} +# Specifies the client secret for Google OAuth2 authentication, used to authenticate the application securely spring.security.oauth2.client.registration.google.client-secret=${GOOGLE_OAUTH_CLIENT_SECRET} +# Defines the scopes requested during Google OAuth2 authentication, specifying the level of access required (e.g., profile and email) spring.security.oauth2.client.registration.google.scope=profile,email -spring.security.oauth2.client.registration.google.redirect-uri=http://localhost:8099/v1/mimoto/oauth2/callback/google +# Specifies the redirect URI for Google OAuth2 authentication callbacks, where Google sends the authorization response +spring.security.oauth2.client.registration.google.redirect-uri={baseUrl}/oauth2/callback/{registrationId} +# Defines the authorization grant type for Google OAuth2 authentication, indicating the flow used (e.g., authorization code) spring.security.oauth2.client.registration.google.authorization-grant-type=authorization_code +# Defines the human-readable name that will be displayed for the Google login option +# For example, if it is set to "Login with Google" it will appear as "Login with Google" on a spring security generated login page spring.security.oauth2.client.registration.google.client-name=Google +# Specifies the authorization endpoint URI for Google OAuth2, where users are redirected to authenticate spring.security.oauth2.client.provider.google.authorization-uri=https://accounts.google.com/o/oauth2/auth?prompt=select_account +# Specifies the token endpoint URI for Google OAuth2, used to exchange the authorization code for an access token spring.security.oauth2.client.provider.google.token-uri=https://oauth2.googleapis.com/token +# Specifies the user information endpoint URI for Google OAuth2, used to fetch user details after authentication spring.security.oauth2.client.provider.google.user-info-uri=https://www.googleapis.com/oauth2/v3/userinfo +# Specifies the URI for Google's JSON Web Key Set (JWK) used for token validation, ensuring secure communication spring.security.oauth2.client.provider.google.jwk-set-uri=https://www.googleapis.com/oauth2/v3/certs +# Maps the 'sub' attribute from the Google UserInfo endpoint response to the Spring Security principal's name (username) spring.security.oauth2.client.provider.google.userNameAttribute=sub +# Maps the 'name' attribute from the Google UserInfo endpoint response to the Spring Security principal's accessible name spring.security.oauth2.client.provider.google.nameAttribute=name +# Maps the 'email' attribute from the Google UserInfo endpoint response to the Spring Security principal's email address spring.security.oauth2.client.provider.google.emailAttribute=email +# Maps the 'picture' attribute from the Google UserInfo endpoint response to the Spring Security principal's profile picture URL spring.security.oauth2.client.provider.google.pictureAttribute=picture +# Maps the 'phone_number' attribute from the Google UserInfo endpoint response to the Spring Security principal's phone number spring.security.oauth2.client.provider.google.phoneNumberAttribute=phone_number -#database config +#Database configuration +# Specifies the JDBC URL for connecting to the PostgreSQL database, required to establish a connection to the database. spring.datasource.url=${SPRING_DATASOURCE_URL} -spring.datasource.username=postgres -spring.datasource.password=postgres +# Defines the username for accessing the PostgreSQL database, required for authentication. +spring.datasource.username=${POSTGRES_USER} +# Defines the password for accessing the PostgreSQL database, required for authentication. +spring.datasource.password=${POSTGRES_PASSWORD} +# Configures the Hibernate behavior for database schema management, setting it to 'none' prevents Hibernate from automatically creating, updating, or dropping the database schema on startup spring.jpa.hibernate.ddl-auto=none +# Enables or disables the display of SQL statements in the logs, useful for debugging database queries spring.jpa.show-sql=true +# Specifies the driver class name for the PostgreSQL database, required for the application to interact with the database. spring.datasource.driver-class-name=org.postgresql.Driver -#Redis config +#Redis configuration +# Specifies the type of session store to use (Redis in this case) spring.session.store-type=redis +# Defines the hostname of the Redis server spring.data.redis.host=${SPRING_REDIS_HOST} +# Specifies the port number for the Redis server spring.data.redis.port=${SPRING_REDIS_PORT} +# Sets the duration for which the application waits to establish a connection with the Redis server +spring.data.redis.connect-timeout=10s +# Specifies the duration the application waits for a response from Redis operations (e.g., setting or retrieving keys) +spring.data.redis.timeout=10s +# Specifies the duration of inactivity after which a user session in the Redis will expire server.servlet.session.timeout=30m +# Specifies the namespace for Redis session keys. spring.session.redis.namespace=injiweb:session: +# Configures the database dialect for Hibernate (PostgreSQL in this case). +spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect +# List of URLs that can be accessed without any user authentication by Identity Provider mosip.security.ignore-auth-urls=/safetynet/**,/actuator/**,/swagger-ui/**,/v3/api-docs/**,\ /allProperties,/credentials/**,/credentialshare/**,/binding-otp,/wallet-binding,/get-token/**,\ /issuers,/issuers/**,/authorize,/req/otp,/vid,/req/auth/**,/req/individualId/otp,/aid/get-individual-id,\ /verifiers, /auth/*/token-login +# Inji mobile wallet configuration +# This template defines the list of the fields of the downloaded verifiable credential will be included in the event files when generating different documents +credential.template=template.json +# Specifies the base directory path where the credentials which are downloaded in the Inji mobile wallet will be stored +credential.data.path=data +safetynet.api.key= +safetynet.api.url=https://www.googleapis.com/androidcheck/v1/attestations/verify?key=${safetynet.api.key} + +registration.processor.print.textfile=registration-processor-print-text-file.json + +# Application ID used for identifying and managing the Mimoto service keys in Key Manager service mosip.inji.app.id=MIMOTO -mosip.inji.encryption.algorithm=AES -mosip.inji.encryption.key.size=256 -mosip.inji.jwt.default.algorithm=RS256 + +#Caffeine cache related configurations +# Cache expiry time in minutes for the issuer's well-known endpoint response. +cache.credential-issuer.wellknown.expiry-time-in-min=60 +# Cache expiry time in minutes for issuers configurations read from a config file. +cache.issuers-config.expiry-time-in-min=60 +# Cache expiry time in minutes for the authentication server's well-known endpoint response. +cache.credential-issuer.authserver-wellknown.expiry-time-in-min=60 +# Default cache expiry time in minutes for others cache types +cache.default.expiry-time-in-min=60 # Wallet Passcode Configuration -# Duration (in minutes) for which the wallet remains locked after exceeding failed attempts in a cycle +# Duration (in minutes) for which the wallet remains locked after exceeding failed attempts in a cycle. +# Must be a whole number; decimal/fractional values (e.g., 0.5) will throw an error during Mimoto launch wallet.passcode.retryBlockedUntil=60 # Maximum number of failed passcode attempts allowed in a single cycle (defaults to 1 if <=0) wallet.passcode.maxFailedAttemptsAllowedPerCycle=5 # Maximum number of lock cycles allowed before the wallet is permanently locked (defaults to 1 if <=0) wallet.passcode.maxLockCyclesAllowed=3 -#Signing Algorithms Priority Order Configuration -signing.algorithms.priority.order = ED25519,ES256K,ES256,RS256 \ No newline at end of file +# Signing Algorithms Priority Order Configuration +signing.algorithms.priority.order=ED25519,ES256K,ES256,RS256 + +# This config enables CORS for the application, allowing it to handle cross-origin requests +mosip.security.cors-enable=true +# Predefined list of cross origins which are allowed to access the application resources +mosip.security.origins=http://localhost:3004 \ No newline at end of file diff --git a/docker-compose/config/mimoto-trusted-verifiers.json b/docker-compose/config/mimoto-trusted-verifiers.json index a4397d467..808e899aa 100644 --- a/docker-compose/config/mimoto-trusted-verifiers.json +++ b/docker-compose/config/mimoto-trusted-verifiers.json @@ -6,7 +6,7 @@ "https://injiverify.collab.mosip.net/redirect" ], "response_uris": [ - "https://injiverify.collab.mosip.net/redirect" + "https://injiverify.collab.mosip.net/v1/verify/vp-direct-post" ] } ] diff --git a/docker-compose/docker-compose.yml b/docker-compose/docker-compose.yml index 970df012e..760d3ad3b 100644 --- a/docker-compose/docker-compose.yml +++ b/docker-compose/docker-compose.yml @@ -21,6 +21,7 @@ services: - active_profile_env=inji-default,standalone - SPRING_CONFIG_NAME=data-share - SPRING_CONFIG_LOCATION=/home/mosip/ + - DATASHARE_DOMAIN=datashare-service:8097 volumes: - ./config/data-share-inji-default.properties:/home/mosip/data-share-inji-default.properties - ./config/data-share-standalone.properties:/home/mosip/data-share-standalone.properties @@ -55,8 +56,9 @@ services: - "6379:6379" volumes: - redis-data:/data + mimoto-service: - container_name: 'Mimoto-Service' + container_name: 'mimoto-service' image: 'mosipdev/mimoto:develop' user: root ports: @@ -66,14 +68,18 @@ services: - active_profile_env=default - SPRING_CONFIG_NAME=mimoto - SPRING_CONFIG_LOCATION=/home/mosip/ + - SPRING_CLOUD_BOOTSTRAP_LOCATION=/home/mosip/mimoto-bootstrap.properties - oidc_p12_password=dummypassword - SPRING_DATASOURCE_URL=jdbc:postgresql://postgres:5432/inji_mimoto - SPRING_REDIS_HOST=redis - SPRING_REDIS_PORT=6379 + - POSTGRES_USER=postgres + - POSTGRES_PASSWORD=postgres - GOOGLE_OAUTH_CLIENT_ID=clientId - GOOGLE_OAUTH_CLIENT_SECRET=clientSecret volumes: - ./config/mimoto-default.properties:/home/mosip/mimoto-default.properties + - ./config/mimoto-bootstrap.properties:/home/mosip/mimoto-bootstrap.properties - ./config/mimoto-issuers-config.json:/home/mosip/mimoto-issuers-config.json - ./config/mimoto-trusted-verifiers.json:/home/mosip/mimoto-trusted-verifiers.json - ./certs/oidckeystore.p12:/home/mosip/certs/oidckeystore.p12 diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java index e5bb2cdb0..181709b69 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java @@ -5,7 +5,6 @@ import io.mosip.kernel.biometrics.constant.BiometricType; import io.mosip.kernel.biometrics.entities.BDBInfo; import io.mosip.kernel.biometrics.entities.BIR; -import io.mosip.kernel.core.logger.spi.Logger; import io.mosip.kernel.core.websub.spi.PublisherClient; import io.mosip.mimoto.constant.*; import io.mosip.mimoto.dto.CryptoWithPinRequestDto; @@ -105,15 +104,6 @@ public class CredentialShareServiceImpl implements CredentialShareService { @Autowired private PublisherClient pb; - @Value("${mosip.datashare.partner.id}") - private String partnerId; - - @Value("${mosip.datashare.policy.id}") - private String policyId; - - @Value("${mosip.template-language}") - private String templateLang; - @Value("#{'${mosip.mandatory-languages:}'.concat('${mosip.optional-languages:}')}") private String supportedLang; diff --git a/src/main/java/io/mosip/mimoto/util/JoseUtil.java b/src/main/java/io/mosip/mimoto/util/JoseUtil.java index 3491bb589..5b46a2e60 100644 --- a/src/main/java/io/mosip/mimoto/util/JoseUtil.java +++ b/src/main/java/io/mosip/mimoto/util/JoseUtil.java @@ -8,8 +8,6 @@ import com.nimbusds.jose.jwk.KeyUse; import com.nimbusds.jose.jwk.RSAKey; import com.nimbusds.jose.util.X509CertUtils; -import com.nimbusds.jwt.JWTParser; -import com.nimbusds.jwt.SignedJWT; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import io.mosip.kernel.core.util.CryptoUtil; diff --git a/src/main/resources/application-default.properties b/src/main/resources/application-default.properties index 0196edb0a..a03b31f6c 100644 --- a/src/main/resources/application-default.properties +++ b/src/main/resources/application-default.properties @@ -1,66 +1,220 @@ +# Inji default properties +mosip.inji.allowedAuthType=demo,otp,bio-Finger,bio-Iris,bio-Face +mosip.inji.allowedEkycAuthType=demo,otp,bio-Finger,bio-Iris,bio-Face +mosip.inji.allowedInternalAuthType=otp,bio-Finger,bio-Iris,bio-Face +mosip.inji.faceSdkModelUrl=https://api.collab.mosip.net/inji +# maximum number of retry for downloading vc +mosip.inji.vcDownloadMaxRetry=10 +# pool interval in milliseconds +mosip.inji.vcDownloadPoolInterval=6000 +# validate binding audience url to be sent in token +mosip.inji.audience=ida-binding +# issuer to be sent in token +mosip.inji.issuer=residentapp +# warning screen domain name +mosip.inji.warningDomainName=${mosip.api.public.url} +#timeout for vc download api via OpenId4VCI flow in milliseconds +mosip.inji.openId4VCIDownloadVCTimeout=30000 +# inji documentation url +mosip.inji.aboutInjiUrl=https://docs.inji.io/inji-wallet/inji-mobile +# minimum storage space required for making audit entry in MB +mosip.inji.minStorageRequiredForAuditEntry=2 +# minimum storage space required for downloading / receiving vc in MB +mosip.inji.minStorageRequired=2 + +# Defines the hostname where the database is hosted +mosip.mimoto.database.hostname=localhost +# Defines the port number on which database is running and available +mosip.mimoto.database.port=5432 + +#------------------------------------ Key-manager specific properties -------------------------------------------------- + +# Crypto asymmetric algorithm name +mosip.kernel.crypto.asymmetric-algorithm-name=RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING +# Crypto symmetric algorithm name +mosip.kernel.crypto.symmetric-algorithm-name=AES/GCM/NoPadding +# Encrypted data and encrypted symmetric key separator +mosip.kernel.data-key-splitter=#KEY_SPLITTER# +# GCM tag length +mosip.kernel.crypto.gcm-tag-length=128 +# Hash algo name +mosip.kernel.crypto.hash-algorithm-name=PBKDF2WithHmacSHA512 +# Symmetric key length used in hash +mosip.kernel.crypto.hash-symmetric-key-length=256 +# No of iterations in hash +mosip.kernel.crypto.hash-iteration=10000 +# Keygenerator symmetric algorithm name +mosip.kernel.keygenerator.symmetric-algorithm-name=AES +# Symmetric algorithm key length +mosip.kernel.keygenerator.symmetric-key-length=256 +# Asymmetric algorithm key length +mosip.kernel.keygenerator.asymmetric-key-length=2048 +# Keygenerator asymmetric algorithm name +mosip.kernel.keygenerator.asymmetric-algorithm-name=RSA +# Defines the file path for the PKCS#12 keystore used by the KeyManager service for cryptographic keys +# E.g., place the .p12 file in 'mimoto/certs' folder and provide its path here +mosip.kernel.keymanager.hsm.config-path=${keystore.file.path} +# Defines the type of the keystore used by the Key Manager as PKCS#12 +mosip.kernel.keymanager.hsm.keystore-type=PKCS12 +# Password to access the KeyManager PKCS#12 keystore file +mosip.kernel.keymanager.hsm.keystore-pass=mosip@123 + +# Default Certificate properties +mosip.kernel.keymanager.certificate.default.common-name=www.example.com +mosip.kernel.keymanager.certificate.default.organizational-unit=EXAMPLE-CENTER +mosip.kernel.keymanager.certificate.default.organization=IIITB +mosip.kernel.keymanager.certificate.default.location=BANGALORE +mosip.kernel.keymanager.certificate.default.state=KA +mosip.kernel.keymanager.certificate.default.country=IN + +# keymanager database properties +# Specifies the driver class name for the PostgreSQL database, required for the application to interact with the database +keymanager.persistence.jdbc.driver=org.postgresql.Driver +# Specifies the JDBC URL for connecting to the PostgreSQL database, required to establish a connection to the inji_mimoto database +keymanager_database_url = jdbc:postgresql://${mosip.mimoto.database.hostname}:${mosip.mimoto.database.port}/inji_mimoto +# Defines the password for accessing the PostgreSQL database, required for authentication +keymanager_database_password=${db.dbuser.password} +# Defines the username for accessing the PostgreSQL database, required for authentication +keymanager_database_username= mimotouser +# Specifies the schema name used by the Keymanager in the PostgreSQL database +keymanager.persistence.jdbc.schema=mimoto + +# Hibernate properties +hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect +hibernate.hbm2ddl.auto=none +hibernate.jdbc.lob.non_contextual_creation=true +hibernate.show_sql=false +hibernate.format_sql=false +hibernate.connection.charSet=utf8 +hibernate.cache.use_second_level_cache=false +hibernate.cache.use_query_cache=false +hibernate.cache.use_structured_entries=false +hibernate.generate_statistics=false +hibernate.current_session_context_class=org.springframework.orm.hibernate5.SpringSessionContext + +#Inji Web Config +# Specifies the URL to redirect the user after successful authentication using Identity Provider(e.g., Goggle), pointing to the passcode page in Inji Web +mosip.inji.web.authentication.success.redirect.url=${mosip.inji.web.url}/user/passcode +# Defines the List of Issuers that are limited to issue only single Verifiable Credential +mosip.inji.wallet.issuersWithSingleVcLimit=Mosip +# Defines the maximum number of characters allowed to be encoded into a QR code. The value can be set to anything less than or equal to 4096. +# If the data size exceeds 4096 characters (equivalent to 4KB), the 'pixel pass' library will fail to generate the QR code. +mosip.inji.qr.data.size.limit=4096 +# Defines the height (in Pixels) of the generated QR code +mosip.inji.qr.code.height=650 +# Defines the width (in Pixels) of the generated QR code +mosip.inji.qr.code.width=650 + +#User Wallet Config +# Regular expression for validating wallet PINs, ensuring it is exactly 6 digits +mosip.inji.user.wallet.pin.validation.regex=^\\d{6}$ +# Regular expression for validating wallet names, allowing alphanumeric characters, spaces, underscores, hyphens, and periods with a maximum length of 50 characters +mosip.inji.user.wallet.name.validation.regex=^[A-Za-z0-9 _.-]{0,50}$ + #Google OAuth2 configuration +# Specifies the client ID for Google OAuth2 authentication, required to identify the application during OAuth2 requests. spring.security.oauth2.client.registration.google.client-id=${mosip.injiweb.google.client.id} +# Specifies the client secret for Google OAuth2 authentication, used to authenticate the application securely spring.security.oauth2.client.registration.google.client-secret=${mosip.injiweb.google.client.secret} +# Defines the scopes requested during Google OAuth2 authentication, specifying the level of access required (e.g., profile and email) spring.security.oauth2.client.registration.google.scope=profile,email +# Specifies the redirect URI for Google OAuth2 authentication callbacks, where Google sends the authorization response spring.security.oauth2.client.registration.google.redirect-uri={baseUrl}/oauth2/callback/{registrationId} +# Defines the authorization grant type for Google OAuth2 authentication, indicating the flow used (e.g., authorization code) spring.security.oauth2.client.registration.google.authorization-grant-type=authorization_code +# Defines the human-readable name that will be displayed for the Google login option +# For example, if it is set to "Login with Google" it will appear as "Login with Google" on a spring security generated login page spring.security.oauth2.client.registration.google.client-name=Google +# Specifies the authorization endpoint URI for Google OAuth2, where users are redirected to authenticate spring.security.oauth2.client.provider.google.authorization-uri=https://accounts.google.com/o/oauth2/auth?prompt=select_account +# Specifies the token endpoint URI for Google OAuth2, used to exchange the authorization code for an access token spring.security.oauth2.client.provider.google.token-uri=https://oauth2.googleapis.com/token +# Specifies the user information endpoint URI for Google OAuth2, used to fetch user details after authentication spring.security.oauth2.client.provider.google.user-info-uri=https://www.googleapis.com/oauth2/v3/userinfo +# Specifies the URI for Google's JSON Web Key Set (JWK) used for token validation, ensuring secure communication spring.security.oauth2.client.provider.google.jwk-set-uri=https://www.googleapis.com/oauth2/v3/certs +# Maps the 'sub' attribute from the Google UserInfo endpoint response to the Spring Security principal's name (username) spring.security.oauth2.client.provider.google.userNameAttribute=sub +# Maps the 'name' attribute from the Google UserInfo endpoint response to the Spring Security principal's accessible name spring.security.oauth2.client.provider.google.nameAttribute=name +# Maps the 'email' attribute from the Google UserInfo endpoint response to the Spring Security principal's email address spring.security.oauth2.client.provider.google.emailAttribute=email +# Maps the 'picture' attribute from the Google UserInfo endpoint response to the Spring Security principal's profile picture URL spring.security.oauth2.client.provider.google.pictureAttribute=picture +# Maps the 'phone_number' attribute from the Google UserInfo endpoint response to the Spring Security principal's phone number spring.security.oauth2.client.provider.google.phoneNumberAttribute=phone_number -#Inji Web Config -mosip.inji.web.authentication.success.redirect.url=${mosip.inji.web.url}/user/passcode -mosip.inji.wallet.issuersWithSingleVcLimit=Mosip - -#Database config +#Database configuration +# Specifies the JDBC URL for connecting to the PostgreSQL database, required to establish a connection to the inji_mimoto database spring.datasource.url=jdbc:postgresql://${mosip.mimoto.database.hostname}:${mosip.mimoto.database.port}/inji_mimoto -spring.datasource.username=mimotouser +# Defines the username for accessing the PostgreSQL database, required for authentication +spring.datasource.username=postgres +# Defines the password for accessing the PostgreSQL database, required for authentication spring.datasource.password=${db.dbuser.password} +# Configures the Hibernate behavior for database schema management, setting it to 'none' prevents Hibernate from automatically creating, updating, or dropping the database schema on startup spring.jpa.hibernate.ddl-auto=none +# Enables or disables the display of SQL statements in the logs, useful for debugging database queries spring.jpa.show-sql=true +# Specifies the driver class name for the PostgreSQL database, required for the application to interact with the database spring.datasource.driver-class-name=org.postgresql.Driver -hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect -hibernate.hbm2ddl.auto=none -hibernate.jdbc.lob.non_contextual_creation=true -hibernate.show_sql=false -hibernate.format_sql=false -hibernate.connection.charSet=utf8 -hibernate.cache.use_second_level_cache=false -hibernate.cache.use_query_cache=false -hibernate.cache.use_structured_entries=false -hibernate.generate_statistics=false -hibernate.current_session_context_class=org.springframework.orm.hibernate5.SpringSessionContext - -# keymanager database properties -keymanager.persistence.jdbc.driver=org.postgresql.Driver -keymanager_database_url = jdbc:postgresql://${mosip.mimoto.database.hostname}:${mosip.mimoto.database.port}/inji_mimoto -keymanager_database_password=${db.dbuser.password} -keymanager_database_username= mimotouser -keymanager.persistence.jdbc.schema=mimoto #Redis configuration +# Specifies the type of session store to use (Redis in this case), enabling distributed session management. spring.session.store-type=redis -spring.data.redis.host=${redis.host} -spring.data.redis.port=${redis.port} -spring.data.redis.password=${redis.password} +# Defines the hostname of the Redis server, required to connect to the Redis instance. +spring.data.redis.host=localhost +# Specifies the port number for the Redis server, required to connect to the Redis instance. +spring.data.redis.port=6379 +# Sets the password for connecting to the Redis server (empty if no password is required), ensuring secure access. +spring.data.redis.password= +# Sets the duration for which the application waits to establish a connection with the Redis server, preventing long delays. +spring.data.redis.connect-timeout=10s +# Specifies the duration the application waits for a response from Redis operations (e.g., setting or retrieving keys), ensuring timely responses. +spring.data.redis.timeout=10s +# Specifies the duration of inactivity after which a user session in Redis will expire, ensuring session cleanup. server.servlet.session.timeout=30m +# Specifies the namespace for Redis session keys, used to avoid key collisions in Redis. spring.session.redis.namespace=injiweb:session: -spring.data.redis.timeout=10s -spring.data.redis.connect-timeout=10s +# Configures the database dialect for Hibernate (PostgreSQL in this case), ensuring compatibility with the database. +spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect +# List of URLs that can be accessed without any user authentication by Identity Provider mosip.security.ignore-auth-urls=/safetynet/**,/actuator/**,/swagger-ui/**,/v3/api-docs/**,\ /allProperties,/credentials/**,/credentialshare/**,/binding-otp,/wallet-binding,/get-token/**,\ /issuers,/issuers/**,/authorize,/req/otp,/vid,/req/auth/**,/req/individualId/otp,/aid/get-individual-id,\ /verifiers, /auth/*/token-login +# Inji mobile wallet configuration +# This template defines the list of the fields of the downloaded verifiable credential will be included in the event files when generating different documents +credential.template=template.json +# Specifies the base directory path where the credentials which are downloaded in the Inji mobile wallet will be stored +credential.data.path=data +safetynet.api.key= +safetynet.api.url=https://www.googleapis.com/androidcheck/v1/attestations/verify?key=${safetynet.api.key} + +registration.processor.print.textfile=registration-processor-print-text-file.json + +# Application ID used for identifying and managing the Mimoto service keys in Key Manager service mosip.inji.app.id=MIMOTO -mosip.inji.encryption.algorithm=AES -mosip.inji.encryption.key.size=256 -mosip.inji.jwt.default.algorithm=RS256 \ No newline at end of file + +#Caffeine cache related configurations +# Cache expiry time in minutes for the issuer's well-known endpoint response. +cache.credential-issuer.wellknown.expiry-time-in-min = 60 +# Cache expiry time in minutes for issuers configurations read from a config file. +cache.issuers-config.expiry-time-in-min = 60 +# Cache expiry time in minutes for the authentication server's well-known endpoint response. +cache.credential-issuer.authserver-wellknown.expiry-time-in-min = 60 +# Default cache expiry time in minutes for others cache types +cache.default.expiry-time-in-min = 60 + +# Wallet Passcode Configuration +# Duration (in minutes) for which the wallet remains locked after exceeding failed attempts in a cycle. +# Must be a whole number; decimal/fractional values (e.g., 0.5) will throw an error during Mimoto launch +wallet.passcode.retryBlockedUntil=60 +# Maximum number of failed passcode attempts allowed in a single cycle (defaults to 1 if <=0) +wallet.passcode.maxFailedAttemptsAllowedPerCycle=5 +# Maximum number of lock cycles allowed before the wallet is permanently locked (defaults to 1 if <=0) +wallet.passcode.maxLockCyclesAllowed=3 + +# Signing Algorithms Priority Order Configuration +signing.algorithms.priority.order=ED25519,ES256K,ES256,RS256 \ No newline at end of file diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index cd9969515..b14bbaac2 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -1,66 +1,78 @@ # MOSIP -mosipbox.public.url=https://api-internal.dev2.mosip.net -public.internet.url=https://api-internal.dev2.mosip.net -public.url=https://api.dev2.mosip.net -keycloak.internal.url=https://iam.dev2.mosip.net/ - -# Resident service -mosip.resident.base.url=${mosipbox.public.url}/resident/v1 - +# Defines the base URLs for various MOSIP services and Keycloak for internal and external communication +mosip.api.public.url=http://localhost:${server.port} +mosipbox.public.url=https://api-internal.collab.mosip.net +keycloak.internal.url=http://keycloak.keycloak +keycloak.external.url=https://iam.collab.mosip.net +mosip.kernel.masterdata.url=http://masterdata.kernel +mosip.kernel.authmanager.url=http://authmanager.kernel/ + +# Resident service Configurations used in downloading the Verifiable Credential of MosipOtp issuer +# Base URL for Resident service +mosip.resident.base.url=https://api.collab.mosip.net/resident/v1 +# This URL used for fetching the OTP from resident service prior to initiating the download flow on the Mobile Wallet RESIDENT_OTP=${mosip.resident.base.url}/req/otp +# This URL used for fetching the OTP while getting the UIN/VID from AID(Application ID) RESIDENT_INDIVIDUALID_OTP=${mosip.resident.base.url}/individualId/otp +# This URL is used to get the status about whether the UIN/VID is generated from AID or not RESIDENT_AID_GET_INDIVIDUALID=${mosip.resident.base.url}/aid/status -#RESIDENT_INDIVIDUALID_OTP=https://api-internal.dev2.mosip.net/resident/v1/req/individualId/otp +# URL to request the Verifiable Credential download from the Resident service RESIDENT_CREDENTIAL_REQUEST=${mosip.resident.base.url}/req/credential +# URL to check if the Verifiable Credential is downloaded yet or not RESIDENT_CREDENTIAL_REQUEST_STATUS=${RESIDENT_CREDENTIAL_REQUEST}/status +# URL used to get the VID for the respective UIN RESIDENT_VID=${mosip.resident.base.url}/vid RESIDENT_AUTH_LOCK=${mosip.resident.base.url}/req/auth-lock RESIDENT_AUTH_UNLOCK=${mosip.resident.base.url}/req/auth-unlock -BINDING_OTP=${public.internet.url}/v1/esignet/binding/binding-otp -WALLET_BINDING=${public.internet.url}/v1/esignet/binding/wallet-binding -mosip.authmanager.url=${mosipbox.public.url}/v1/authmanager/authenticate/clientidsecretkey - -# Mimoto mobileid backend -credential.template=template.json -credential.sample=sample_credential.json -credential.data.path=data -safetynet.api.key= -safetynet.api.url=https://www.googleapis.com/androidcheck/v1/attestations/verify?key=${safetynet.api.key} -registration.processor.print.textfile=registration-processor-print-text-file.json -# Websub +#Esignet service +# Base URL for e-Signet service +mosip.esignet.host=https://esignet.collab.mosip.net +# Endpoint for fetching the OTP in Wallet binding flow +BINDING_OTP=${mosip.esignet.host}/v1/esignet/binding/binding-otp +# Endpoint for binding the credentials to the Wallet +WALLET_BINDING=${mosip.esignet.host}/v1/esignet/binding/wallet-binding -# Localhost websub -# mosip.event.hubUrl=http://localhost:9191/websub -# mosip.event.hub.subUrl=${mosip.event.hubUrl}/hub -# mosip.event.hub.pubUrl=${mosip.event.hubUrl}/publish +# Websub service configurations # Dev sandbox -mosip.event.hubUrl=${mosipbox.public.url}/hub/ +# Base URL for WebSub service +mosip.websub.url=http://websub.websub/ +# Hub URL for WebSub service +mosip.event.hubUrl=${mosip.websub.url}/hub/ +# WebSub hub URL used to subscribe to a specific topic mosip.event.hub.subUrl=${mosip.event.hubUrl} +# WebSub hub URL used to publish the data to a specific topic mosip.event.hub.pubUrl=${mosip.event.hubUrl} +# Delayed WebSub subscription. Default is 5 seconds in ms. +mosip.event.delay-millisecs=5000 +# WebSub re-subscription workaround for losing subscribed topic when MOSIP WebSub update or restart. Default is 5 minutes in ms. +websub-resubscription-delay-millisecs=300000 -# MOSIP partner +# Callback URL for receiving the WebSub event notifications +mosip.event.callBackUrl=${mosip.api.public.url}/v1/mimoto/credentialshare/callback/notify +# Kafka topic to which the CREDENTIAL_ISSUED for specific partner id is published +mosip.event.topic=${mosip.partner.id}/CREDENTIAL_ISSUED +# Secret key used for validating the authenticity of the WebSub event notifications +mosip.event.secret=Kslk30SNF2AChs2 +# MOSIP partner +# Unique identifier which is being used as the Issuer during MOSIP OTP issuer Verifiable Credential download requests mosip.partner.id=mpartner-default-mobile +# Name of the PKCS#12 keystore file for cryptographic operations mosip.partner.crypto.p12.filename=keystore.p12 +# Password for accessing the PKCS#12 keystore file mosip.partner.crypto.p12.password=abc123 +# Alias used to access the secure credentials like private key of partner within the PKCS#12 keystore file mosip.partner.crypto.p12.alias=partner +# Encryption key used for securing partner data mosip.partner.encryption.key=123456 - +# Property which indicates whether the data includes its thumbprint (a unique hash for integrity verification) or not mosip.partner.prependThumbprint=true -mosip.datashare.partner.id=mpartner-default-resident -mosip.datashare.policy.id=mpolicy-default-resident -mosip.event.callBackUrl=${public.url}/credentialshare/callback/notify -mosip.event.topic=${mosip.partner.id}/CREDENTIAL_ISSUED -mosip.event.secret=Kslk30SNF2AChs2 +# Property which defines whether protection against Cross-Site Request Forgery (CSRF) attacks should be enabled or disabled csrf.disabled=true -# Delayed websub subscription. Default is 5 seconds in ms. -mosip.event.delay-millisecs=5000 -# Websub re-subscription workaround for losing subscribed topic when MOSIP websub update or restart. Default is 5 minutes in ms. -websub-resubscription-delay-millisecs=300000 #-------------TOKEN GENERATION---------------- #Token generation request id @@ -81,13 +93,13 @@ token.request.secretKey=abc123 token.request.issuerUrl=${keycloak.internal.url}/auth/realms/mosip #Audit Service -AUDIT=${mosipbox.public.url}/v1/auditmanager/audits -AUDIT_URL=${mosipbox.public.url}/v1/auditmanager/audits -KEYBASEDTOKENAPI=${mosipbox.public.url}/v1/authmanager/authenticate/clientidsecretkey +AUDIT=${mosip.kernel.auditmanager.url}/v1/auditmanager/audits +AUDIT_URL=${mosip.kernel.auditmanager.url}/v1/auditmanager/audits +KEYBASEDTOKENAPI=${mosip.kernel.authmanager.url}/v1/authmanager/authenticate/clientidsecretkey #Master Data Services # MASTER=http://kernel-masterdata-service/v1/masterdata -MASTER=${mosipbox.public.url}/v1/masterdata +MASTER=${mosip.kernel.masterdata.url}/v1/masterdata TEMPLATES=${MASTER}/templates #Packet receiver application version @@ -107,12 +119,10 @@ mosip.country.code=MOR registration.processor.signature.isEnabled=true # Language Supported By Platform - ISO -mosip.supported-languages=eng,ara,fra - -mosip.template-language=eng +# Defines the list of optional languages supported by the platform mosip.optional-languages=fra,ara +# Defines the list of mandatory languages supported by the platform mosip.mandatory-languages=eng - # mosip.primary-language=eng # mosip.secondary-language=ara @@ -133,40 +143,6 @@ mosip.kernel.pin.length=6 #length of the token id mosip.kernel.tokenid.length=36 -#------------------------------------ Key-manager specific properties -------------------------------------------------- - -#Crypto asymmetric algorithm name -mosip.kernel.crypto.asymmetric-algorithm-name=RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING -#Crypto symmetric algorithm name -mosip.kernel.crypto.symmetric-algorithm-name=AES/GCM/NoPadding -#Encrypted data and encrypted symmetric key separator -mosip.kernel.data-key-splitter=#KEY_SPLITTER# -#GCM tag length -mosip.kernel.crypto.gcm-tag-length=128 -#Hash algo name -mosip.kernel.crypto.hash-algorithm-name=PBKDF2WithHmacSHA512 -#Symmtric key length used in hash -mosip.kernel.crypto.hash-symmetric-key-length=256 -#No of iterations in hash -mosip.kernel.crypto.hash-iteration=10000 -mosip.kernel.keygenerator.symmetric-algorithm-name=AES -mosip.kernel.keygenerator.symmetric-key-length=256 -#Asymmetric algorithm key length -mosip.kernel.keygenerator.asymmetric-key-length=2048 -#Keygenerator asymmetric algorithm name -mosip.kernel.keygenerator.asymmetric-algorithm-name=RSA -mosip.kernel.keymanager.hsm.config-path=/Users/gurpreet.kaur/MOSIP/code/mimoto/certs/oidckeystore.p12 -mosip.kernel.keymanager.hsm.keystore-type=PKCS12 -mosip.kernel.keymanager.hsm.keystore-pass=mosip@123 - - -mosip.kernel.keymanager.certificate.default.common-name=www.example.com -mosip.kernel.keymanager.certificate.default.organizational-unit=EXAMPLE-CENTER -mosip.kernel.keymanager.certificate.default.organization=IIITB -mosip.kernel.keymanager.certificate.default.location=BANGALORE -mosip.kernel.keymanager.certificate.default.state=KA -mosip.kernel.keymanager.certificate.default.country=IN - # log level logging.level.root=WARN logging.level.io.mosip=INFO @@ -196,32 +172,25 @@ DECRYPTPINBASSED=${mosipbox.public.url}/v1/keymanager/decryptWithPin config.server.file.storage.uri=https://raw.githubusercontent.com/mosip/inji-config/develop/ # websub authentication - auth adapter +mosip.iam.adapter.appid=partner mosip.iam.adapter.clientid=mpartner-default-mobile - #dev2 mosip.iam.adapter.clientsecret=mJQ3g1dPbonDFNW8 - #qa-inji #mosip.iam.adapter.clientsecret=vl3ox2rvSeW78LzL +auth.server.admin.issuer.uri=${keycloak.external.url}/auth/realms/ - -mosip.iam.adapter.appid=partner - -mosip.iam.adapter.issuerURL=${mosipbox.public.url}/auth/realms/mosip -mosip.authmanager.base-url=${mosipbox.public.url}/v1/authmanager +mosip.iam.adapter.issuerURL=${keycloak.internal.url}/auth/realms/mosip +mosip.authmanager.base-url=${mosip.kernel.authmanager.url}/v1/authmanager mosip.authmanager.client-token-endpoint=${mosip.authmanager.base-url}/authenticate/clientidsecretkey -auth.server.admin.validate.url=${mosip.authmanager.base-url}/v1/authmanager/authorize/admin/validateToken - +auth.server.admin.validate.url=${mosip.kernel.authmanager.url}/v1/authmanager/authorize/admin/validateToken # in minutes mosip.iam.adapter.validate-expiry-check-rate=1440 - # in minutes mosip.iam.adapter.renewal-before-expiry-interval=1440 #this should be false if you don?t use this restTemplate true if you do - -auth.server.admin.issuer.uri=${keycloak.internal.url}/auth/realms/ mosip.iam.adapter.self-token-renewal-enable=true mosip.auth.filter_disable=false mosip.auth.adapter.impl.basepackage=io.mosip.kernel.auth.defaultadapter @@ -232,95 +201,50 @@ wallet.binding.partner.api.key=Aci9jg28B8mO_LDfDXo3ZTp5_HKgEMun2tYyHCa1e8k #wallet.binding.partner.api.key=14378 mosip.iam.adapter.disable-self-token-rest-template=true -# OpenID -#configurations related to openid4vc +# Mosip notification otp channel config - defines the predefined list of otp channels allowed for sending the OTP to the user +mosip.notificationtype=SMS|EMAIL|PHONE + +# OpenID4VCI related configurations +# Specifies the file name which includes the list of Issuers Configurations, including their well-known endpoints and other details mosip.openid.issuers=mimoto-issuers-config.json -mosip.openid.verifiers=mimoto-trusted-verifiers.json +# Fallback HTML template used to render the Verifiable Credential if no issuer-specific template is found mosip.openid.htmlTemplate=credential-template.html +# Specifies the type of client assertion used for OIDC authentication with e-signet (e.g., JWT bearer) mosip.oidc.client.assertion.type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer +# PKCS#12 keystore file name containing secured credentials (e.g., private key and client alias) for each onboarded issuer, used in the authentication flow with e-Signet mosip.oidc.p12.filename=oidckeystore.p12 +# Password to access the PKCS#12 keystore file mosip.oidc.p12.password=mosip@123 +# Relative path to the directory which contains PKCS#12 keystore file mosip.oidc.p12.path=certs/ - -#OpenId4VP related Configuration START - -#Inji Web Config +# Inji Web Config +# Base URL for Inji Web application mosip.inji.web.url=http://localhost:3004 +# Inji Web Redirect URL which is used to show the error message in case of failure in OpenID4VP flow mosip.inji.web.redirect.url=${mosip.inji.web.url}/authorize -mosip.inji.qr.data.size.limit=2000 -mosip.inji.qr.code.height=650 -mosip.inji.qr.code.width=650 -mosip.inji.user.wallet.pin.validation.regex=^\\d{4,6}$ -mosip.inji.user.wallet.name.validation.regex=^[A-Za-z0-9 _.-]{1,50}$ -#OVP Config + +#OpenId4VP related Configuration +# Pattern for including the OpenID4VP Authorization request in the QR code data of the Verifiable Credential, with placeholders for including resource(DataShare URL) and Presentation Definition mosip.inji.ovp.qrdata.pattern=INJI_OVP://http://localhost:${server.port}/v1/mimoto/authorize?response_type=vp_token&resource=%s&presentation_definition=%s +# Pattern for returning the response in redirect URL for successful Verifiable Presentation in OpenId4VP flow mosip.inji.ovp.redirect.url.pattern=%s#vp_token=%s&presentation_submission=%s +# Pattern for returning the error in redirect URL in case of Verifiable Presentation failure in OpenId4VP flow mosip.inji.ovp.error.redirect.url.pattern=%s?error=%s&error_description=%s +# File name containing trusted verifiers for OpenId4VP. It is used for validating the verifiers during the OpenID4VP process +mosip.openid.verifiers=mimoto-trusted-verifiers.json #DataShare Config +# Base URL for DataShare Service mosip.data.share.url=http://localhost:8097 +# Endpoint for creating DataShare requests and storing downloaded Verifiable Credentials mosip.data.share.create.url=${mosip.data.share.url}/v1/datashare/create/static-policyid/static-subscriberid -mosip.data.share.create.retry.count=3 +# URL pattern used to validate DataShare URL and retrieve Verifiable Credential from DataShare mosip.data.share.get.url.pattern=${mosip.data.share.url}/v1/datashare/get/static-policyid/static-subscriberid/* +# Specifies the maximum number of retry attempts for creating a DataShare request to store Verifiable Credential, ensuring reliability in case of transient failures +mosip.data.share.create.retry.count=3 +# This config enables CORS for the application, allowing it to handle cross-origin requests mosip.security.cors-enable=true -#comma separated allowed origins +# Predefined list of cross origins which are allowed to access the application resources mosip.security.origins=http://localhost:3004 -mosip.security.ignore-auth-urls=/safetynet/**,/actuator/**,/swagger-ui/**,/v3/api-docs/**,\ - /allProperties,/credentials/**,/credentialshare/**,/binding-otp,/wallet-binding,/get-token/**,\ - /issuers,/issuers/**,/authorize,/req/otp,/vid,/req/auth/**,/req/individualId/otp,/aid/get-individual-id,\ - /verifiers, /auth/*/token-login - -#OpenId4VP related Configuration END - -#Caffeine cache related configurations -# Cache expiry time in minutes for the issuer's well-known endpoint response. -cache.credential-issuer.wellknown.expiry-time-in-min = 60 -# Cache expiry time in minutes for issuers configurations read from a config file. -cache.issuers-config.expiry-time-in-min = 60 -# Cache expiry time in minutes for the authentication server's well-known endpoint response. -cache.credential-issuer.authserver-wellknown.expiry-time-in-min = 60 -# Default cache expiry time in minutes for others cache types -cache.default.expiry-time-in-min = 60 - -spring.security.oauth2.client.registration.google.client-id= -spring.security.oauth2.client.registration.google.client-secret= -spring.security.oauth2.client.registration.google.scope=profile,email -spring.security.oauth2.client.registration.google.redirect-uri={baseUrl}/oauth2/callback/{registrationId} -spring.security.oauth2.client.registration.google.authorization-grant-type=authorization_code -spring.security.oauth2.client.registration.google.client-name=Google -spring.security.oauth2.client.provider.google.authorization-uri=https://accounts.google.com/o/oauth2/auth?prompt=select_account -spring.security.oauth2.client.provider.google.token-uri=https://oauth2.googleapis.com/token -spring.security.oauth2.client.provider.google.user-info-uri=https://www.googleapis.com/oauth2/v3/userinfo -spring.security.oauth2.client.provider.google.jwk-set-uri=https://www.googleapis.com/oauth2/v3/certs - - -spring.datasource.url=jdbc:postgresql://localhost:5432/inji_mimoto -spring.datasource.username=postgres -spring.datasource.password=postgres -spring.jpa.hibernate.ddl-auto=none -spring.jpa.show-sql=true -spring.datasource.driver-class-name=org.postgresql.Driver - -#Redis configuration -spring.session.store-type=redis -spring.data.redis.host=localhost -spring.data.redis.port=6379 -spring.data.redis.password= -spring.data.redis.connect-timeout=10s -server.servlet.session.timeout=30m -spring.session.redis.namespace=injiweb:session: -spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect - -# Wallet Passcode Configuration -# Duration (in minutes) for which the wallet remains locked after exceeding failed attempts in a cycle. -# Must be a whole number; decimal/fractional values (e.g., 0.5) will throw an error during Mimoto launch -wallet.passcode.retryBlockedUntil=60 -# Maximum number of failed passcode attempts allowed in a single cycle (defaults to 1 if <=0) -wallet.passcode.maxFailedAttemptsAllowedPerCycle=5 -# Maximum number of lock cycles allowed before the wallet is permanently locked (defaults to 1 if <=0) -wallet.passcode.maxLockCyclesAllowed=3 - -#Signing Algorithms Priority Order Configuration -signing.algorithms.priority.order = ED25519,ES256K,ES256,RS256 \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties deleted file mode 100644 index 8b1378917..000000000 --- a/src/main/resources/application.properties +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/main/resources/bootstrap.properties b/src/main/resources/bootstrap.properties index d5834548f..2daeda44f 100644 --- a/src/main/resources/bootstrap.properties +++ b/src/main/resources/bootstrap.properties @@ -3,13 +3,17 @@ spring.cloud.config.label=develop spring.profiles.active=default,local spring.cloud.config.name=mimoto,inji spring.application.name=mimoto + config.server.file.storage.uri=${spring.cloud.config.uri}/print/${spring.profiles.active}/${spring.cloud.config.label}/ management.endpoint.health.show-details=always management.endpoints.web.exposure.include=info,health,refresh +# The port number on which the Mimoto service will be running server.port=8099 +# Base URL for all the APIs in Mimoto service server.servlet.context-path=/v1/mimoto +# Sets the maximum allowed total size (in bytes) for all HTTP response headers generated by Tomcat, including the Location header for redirects server.tomcat.max-http-response-header-size=65536 health.config.enabled=false diff --git a/src/main/resources/mimoto-trusted-verifiers.json b/src/main/resources/mimoto-trusted-verifiers.json index 523a6c321..808e899aa 100644 --- a/src/main/resources/mimoto-trusted-verifiers.json +++ b/src/main/resources/mimoto-trusted-verifiers.json @@ -1,26 +1,13 @@ { "verifiers": [ { - "client_id": "https://injiverify.dev2.mosip.net", + "client_id": "https://injiverify.collab.mosip.net", "redirect_uris": [ - "https://injiverify.qa-inji.mosip.net/redirect", - "https://injiverify.dev2.mosip.net/redirect" + "https://injiverify.collab.mosip.net/redirect" ], "response_uris": [ - "https://injiverify.qa-inji.mosip.net/redirect", - "https://injiverify.dev2.mosip.net/redirect" - ] - }, - { - "client_id": "https://injiverify.dev1.mosip.net", - "redirect_uris": [ - "https://injiverify.qa-inji.mosip.net/redirect", - "https://injiverify.dev1.mosip.net/redirect" - ], - "response_uris": [ - "https://injiverify.qa-inji.mosip.net/redirect", - "https://injiverify.dev1.mosip.net/redirect" + "https://injiverify.collab.mosip.net/v1/verify/vp-direct-post" ] } ] -} +} \ No newline at end of file diff --git a/src/test/resources/application-test.properties b/src/test/resources/application-test.properties index c3aebc42d..61b555364 100644 --- a/src/test/resources/application-test.properties +++ b/src/test/resources/application-test.properties @@ -28,7 +28,7 @@ mosip.oidc.p12.path=certs/ #Inji Web Config mosip.inji.web.url=https://injiweb.dev1.mosip.net mosip.inji.web.redirect.url=${mosip.inji.web.url}/authorize -mosip.inji.qr.data.size.limit=10000 +mosip.inji.qr.data.size.limit=4096 mosip.inji.qr.code.height=650 mosip.inji.qr.code.width=650 From 0d0ba94e8cd608171daaf588fb2bc0a959b16692 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Mon, 11 Aug 2025 11:23:49 +0530 Subject: [PATCH 744/860] injiweb-1685 removed manual handling of the session deletion (#815) Signed-off-by: Gurpreet41082 --- .../java/io/mosip/mimoto/config/Config.java | 20 +- .../mosip/mimoto/service/LogoutService.java | 46 ----- .../mimoto/service/LogoutServiceTest.java | 189 ------------------ 3 files changed, 8 insertions(+), 247 deletions(-) delete mode 100644 src/main/java/io/mosip/mimoto/service/LogoutService.java delete mode 100644 src/test/java/io/mosip/mimoto/service/LogoutServiceTest.java diff --git a/src/main/java/io/mosip/mimoto/config/Config.java b/src/main/java/io/mosip/mimoto/config/Config.java index 5d452e2a9..c2d718278 100644 --- a/src/main/java/io/mosip/mimoto/config/Config.java +++ b/src/main/java/io/mosip/mimoto/config/Config.java @@ -1,10 +1,8 @@ package io.mosip.mimoto.config; -import io.mosip.mimoto.exception.OAuth2AuthenticationException; import io.mosip.mimoto.security.oauth2.CustomOAuth2UserService; import io.mosip.mimoto.security.oauth2.OAuth2AuthenticationFailureHandler; import io.mosip.mimoto.security.oauth2.OAuth2AuthenticationSuccessHandler; -import io.mosip.mimoto.service.LogoutService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -30,6 +28,7 @@ import java.util.Arrays; import java.util.HashMap; import java.util.Map; + import static io.mosip.mimoto.exception.ErrorConstants.LOGIN_SESSION_INVALIDATE_EXCEPTION; @Configuration @@ -57,9 +56,6 @@ public class Config { @Value("${mosip.inji.web.url}") private String injiWebUrl; - @Autowired - private LogoutService logoutService; - @Bean @ConfigurationProperties(prefix = "mosip.inji") public Map injiConfig() { @@ -121,14 +117,15 @@ private void configureOAuth2Login(HttpSecurity http) throws Exception { private void configureLogout(HttpSecurity http, SessionRepository sessionRepository) throws Exception { http.logout(logout -> logout - .invalidateHttpSession(false) - .clearAuthentication(false) .logoutUrl("/logout") .logoutSuccessHandler((request, response, authentication) -> { - try { - logoutService.handleLogout(request, response, sessionRepository); - } catch (OAuth2AuthenticationException e) { - response.setStatus(e.getStatus().value()); + // If authentication is not null, it was a valid logout. + if (authentication != null) { + response.setStatus(HttpStatus.OK.value()); + response.setContentType("application/json"); + response.getWriter().write("{\"status\":\"success\", \"message\":\"Logout successful\"}"); + } else { + response.setStatus(HttpStatus.NOT_FOUND.value()); response.setContentType("application/json"); String jsonResponse = String.format("{\"errors\":[{\"errorCode\":\"%s\",\"errorMessage\":\"%s\"}]}", LOGIN_SESSION_INVALIDATE_EXCEPTION.getErrorCode(), @@ -136,7 +133,6 @@ private void configureLogout(HttpSecurity http, SessionRepository sessionRepo response.getWriter().write(jsonResponse); } }) - .clearAuthentication(true) ); } diff --git a/src/main/java/io/mosip/mimoto/service/LogoutService.java b/src/main/java/io/mosip/mimoto/service/LogoutService.java deleted file mode 100644 index 88ac2092b..000000000 --- a/src/main/java/io/mosip/mimoto/service/LogoutService.java +++ /dev/null @@ -1,46 +0,0 @@ -package io.mosip.mimoto.service; - -import io.mosip.mimoto.exception.OAuth2AuthenticationException; -import jakarta.servlet.http.Cookie; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.servlet.http.HttpSession; -import lombok.extern.slf4j.Slf4j; -import org.springframework.http.HttpStatus; -import org.springframework.session.SessionRepository; -import org.springframework.stereotype.Service; - -import java.util.Base64; - -@Service -@Slf4j -public class LogoutService { - - public void handleLogout(HttpServletRequest request, HttpServletResponse response, SessionRepository sessionRepository) throws OAuth2AuthenticationException { - - Cookie[] cookies = request.getCookies(); - if (cookies != null) { - for (Cookie cookie : cookies) { - if ("SESSION".equals(cookie.getName())) { - String encodedSessionId = cookie.getValue(); - String sessionId = new String(Base64.getUrlDecoder().decode(encodedSessionId)); - if (sessionRepository.findById(sessionId) != null) { - sessionRepository.deleteById(sessionId); - } else { - throw new OAuth2AuthenticationException("NOT_FOUND", - "Logout request was sent for an invalid or expired session", - HttpStatus.NOT_FOUND); - } - } - } - } - - HttpSession session = request.getSession(false); - if (session != null) { - session.invalidate(); - } - - } - - -} diff --git a/src/test/java/io/mosip/mimoto/service/LogoutServiceTest.java b/src/test/java/io/mosip/mimoto/service/LogoutServiceTest.java deleted file mode 100644 index 12c80cada..000000000 --- a/src/test/java/io/mosip/mimoto/service/LogoutServiceTest.java +++ /dev/null @@ -1,189 +0,0 @@ -package io.mosip.mimoto.service; - -import io.mosip.mimoto.exception.OAuth2AuthenticationException; -import jakarta.servlet.http.Cookie; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.servlet.http.HttpSession; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; -import org.springframework.http.HttpStatus; -import org.springframework.session.Session; -import org.springframework.session.SessionRepository; - -import java.util.Base64; - -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; - -@ExtendWith(MockitoExtension.class) -public class LogoutServiceTest { - - @InjectMocks - private LogoutService logoutService; - - @Mock - private HttpServletRequest request; - - @Mock - private HttpServletResponse response; - - @Mock - private SessionRepository sessionRepository; - - @Mock - private HttpSession session; - - @Mock - private Session springSession; - - private String sessionId = "test-session-id"; - private String encodedSessionId; - - @BeforeEach - public void setup() { - encodedSessionId = Base64.getUrlEncoder().encodeToString(sessionId.getBytes()); - } - - @Test - void shouldSuccessfullyHandleLogoutWithValidSessionCookieAndSession() throws OAuth2AuthenticationException { - // Arrange - Cookie sessionCookie = new Cookie("SESSION", encodedSessionId); - when(request.getCookies()).thenReturn(new Cookie[]{sessionCookie}); - when(sessionRepository.findById(sessionId)).thenReturn(springSession); - when(request.getSession(false)).thenReturn(session); - - // Act - logoutService.handleLogout(request, response, sessionRepository); - - // Assert - verify(sessionRepository).findById(sessionId); - verify(sessionRepository).deleteById(sessionId); - verify(session).invalidate(); - verifyNoInteractions(response); - } - - @Test - void shouldThrowOAuth2AuthenticationExceptionForInvalidSessionId() { - // Arrange - Cookie sessionCookie = new Cookie("SESSION", encodedSessionId); - when(request.getCookies()).thenReturn(new Cookie[]{sessionCookie}); - when(sessionRepository.findById(sessionId)).thenReturn(null); - - // Act & Assert - OAuth2AuthenticationException exception = assertThrows(OAuth2AuthenticationException.class, - () -> logoutService.handleLogout(request, response, sessionRepository)); - - assertEquals("NOT_FOUND", exception.getErrorCode()); - assertEquals("NOT_FOUND --> Logout request was sent for an invalid or expired session", exception.getMessage()); - assertEquals(HttpStatus.NOT_FOUND, exception.getStatus()); - verify(sessionRepository).findById(sessionId); - verify(sessionRepository, never()).deleteById(anyString()); - verify(request, never()).getSession(false); - verifyNoInteractions(response, session); - } - - @Test - void shouldHandleLogoutWithNoSessionCookie() throws OAuth2AuthenticationException { - // Arrange - when(request.getCookies()).thenReturn(new Cookie[]{new Cookie("OTHER_COOKIE", "value")}); - when(request.getSession(false)).thenReturn(session); - - // Act - logoutService.handleLogout(request, response, sessionRepository); - - // Assert - verify(sessionRepository, never()).findById(anyString()); - verify(sessionRepository, never()).deleteById(anyString()); - verify(session).invalidate(); - verifyNoInteractions(response); - } - - @Test - void shouldHandleLogoutWithNullCookies() throws OAuth2AuthenticationException { - // Arrange - when(request.getCookies()).thenReturn(null); - when(request.getSession(false)).thenReturn(session); - - // Act - logoutService.handleLogout(request, response, sessionRepository); - - // Assert - verify(sessionRepository, never()).findById(anyString()); - verify(sessionRepository, never()).deleteById(anyString()); - verify(session).invalidate(); - verifyNoInteractions(response); - } - - @Test - void shouldHandleLogoutWithNoHttpSession() throws OAuth2AuthenticationException { - // Arrange - Cookie sessionCookie = new Cookie("SESSION", encodedSessionId); - when(request.getCookies()).thenReturn(new Cookie[]{sessionCookie}); - when(sessionRepository.findById(sessionId)).thenReturn(springSession); - when(request.getSession(false)).thenReturn(null); - - // Act - logoutService.handleLogout(request, response, sessionRepository); - - // Assert - verify(sessionRepository).findById(sessionId); - verify(sessionRepository).deleteById(sessionId); - verify(request).getSession(false); - verifyNoInteractions(session, response); - } - - @Test - void shouldHandleLogoutWithEmptyCookiesArray() throws OAuth2AuthenticationException { - // Arrange - when(request.getCookies()).thenReturn(new Cookie[]{}); - when(request.getSession(false)).thenReturn(session); - - // Act - logoutService.handleLogout(request, response, sessionRepository); - - // Assert - verify(sessionRepository, never()).findById(anyString()); - verify(sessionRepository, never()).deleteById(anyString()); - verify(session).invalidate(); - verifyNoInteractions(response); - } - - @Test - void shouldThrowOAuth2AuthenticationExceptionForInvalidBase64SessionId() { - // Arrange - Cookie sessionCookie = new Cookie("SESSION", "invalid-base64"); - when(request.getCookies()).thenReturn(new Cookie[]{sessionCookie}); - - // Act & Assert - assertThrows(OAuth2AuthenticationException.class, - () -> logoutService.handleLogout(request, response, sessionRepository)); - - verify(sessionRepository, never()).deleteById(anyString()); - verify(request, never()).getSession(false); - verifyNoInteractions(response, session); - } - - @Test - void shouldHandleMultipleCookiesWithValidSessionCookie() throws OAuth2AuthenticationException { - // Arrange - Cookie sessionCookie = new Cookie("SESSION", encodedSessionId); - Cookie otherCookie = new Cookie("OTHER_COOKIE", "value"); - when(request.getCookies()).thenReturn(new Cookie[]{otherCookie, sessionCookie}); - when(sessionRepository.findById(sessionId)).thenReturn(springSession); - when(request.getSession(false)).thenReturn(session); - - // Act - logoutService.handleLogout(request, response, sessionRepository); - - // Assert - verify(sessionRepository).findById(sessionId); - verify(sessionRepository).deleteById(sessionId); - verify(session).invalidate(); - verifyNoInteractions(response); - } -} \ No newline at end of file From 042be1d4fbf8cdb394cb136be1497e31ddb89401 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 11 Aug 2025 16:33:47 +0530 Subject: [PATCH 745/860] [INJIWEB-1663] update the spring datasource name to mimotouser (#818) Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- README.md | 4 ++-- src/main/resources/application-default.properties | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index d66b011c9..0d8be7c0c 100644 --- a/README.md +++ b/README.md @@ -10,14 +10,14 @@ This repository contains source code for backend service of Inji Mobile and Inji ## Build & run (for developers) The project requires JDK 21, postgres, redis and google client credentials ### without docker-compose Build & install -1. Install pgadmin, redis and update application-local.properties file with values +1. Install pgadmin, redis and update application-default.properties file with values ```properties spring.datasource.username= spring.datasource.password= spring.redis.password= ``` 2. Refer to the [How to create Google Client Credentials](docker-compose/README.md#how-to-create-google-client-credentials) section to create - Google client credentials and update below properties in `application-local.properties`. + Google client credentials and update below properties in `application-default.properties`. ``` spring.security.oauth2.client.registration.google.client-id= spring.security.oauth2.client.registration.google.client-secret= diff --git a/src/main/resources/application-default.properties b/src/main/resources/application-default.properties index a03b31f6c..119ae2614 100644 --- a/src/main/resources/application-default.properties +++ b/src/main/resources/application-default.properties @@ -148,7 +148,7 @@ spring.security.oauth2.client.provider.google.phoneNumberAttribute=phone_number # Specifies the JDBC URL for connecting to the PostgreSQL database, required to establish a connection to the inji_mimoto database spring.datasource.url=jdbc:postgresql://${mosip.mimoto.database.hostname}:${mosip.mimoto.database.port}/inji_mimoto # Defines the username for accessing the PostgreSQL database, required for authentication -spring.datasource.username=postgres +spring.datasource.username=mimotouser # Defines the password for accessing the PostgreSQL database, required for authentication spring.datasource.password=${db.dbuser.password} # Configures the Hibernate behavior for database schema management, setting it to 'none' prevents Hibernate from automatically creating, updating, or dropping the database schema on startup From dcd71d65b8f24b4cc5db1ee22ced0ed0085f0f17 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 11 Aug 2025 19:20:19 +0530 Subject: [PATCH 746/860] [Injiweb 1663] update the spring config properties in application default and local properties files (#819) --- .talismanrc | 6 ++-- .../resources/application-default.properties | 15 ++++------ .../resources/application-local.properties | 28 +++++++++++++++++++ 3 files changed, 36 insertions(+), 13 deletions(-) diff --git a/.talismanrc b/.talismanrc index f1ce1c4fa..2ff09d48c 100644 --- a/.talismanrc +++ b/.talismanrc @@ -119,12 +119,12 @@ fileignoreconfig: checksum: dfdffc817362f6c6067a5c2ce5db9c6759faebaf754590deea307bbb71e81381 - filename: src/test/resources/application-test.properties checksum: eff6c72dfdc2e0a2aa4e3ec9d520a1433189902467954d123bc562df095a43bd +- filename: src/main/resources/application-default.properties + checksum: e0d8dd498f739097e67111bdfd4ac4cdf9ddab9b77c2ffca42aecc3e09a4ebc8 - filename: src/main/resources/application-local.properties - checksum: 34912123b9623afcea04e5e6726d614dd20e67b1dd5e685fea92dce9077fa7be + checksum: 710840f8a4882efd00d9b830e8faf0e5c2bf3fec206f6a32b9a7eb32b0812d33 - filename: docker-compose/config/mimoto-default.properties checksum: c47e16427653b2283bfd7e0edda74aad3171aa16e0cc7dd1f8d31934c269e678 -- filename: src/main/resources/application-default.properties - checksum: 7f6395a9797fb780e14e9df5e637ff9ab3efefe662aff60414e936a716e59f4a - filename: README.md checksum: e774036bc8cf0bf82ca5bc0a4cd8b3501616b3309764f18a13cb4d9013b404af - filename: docker-compose/README.md diff --git a/src/main/resources/application-default.properties b/src/main/resources/application-default.properties index 119ae2614..3b0dd3ed5 100644 --- a/src/main/resources/application-default.properties +++ b/src/main/resources/application-default.properties @@ -22,11 +22,6 @@ mosip.inji.minStorageRequiredForAuditEntry=2 # minimum storage space required for downloading / receiving vc in MB mosip.inji.minStorageRequired=2 -# Defines the hostname where the database is hosted -mosip.mimoto.database.hostname=localhost -# Defines the port number on which database is running and available -mosip.mimoto.database.port=5432 - #------------------------------------ Key-manager specific properties -------------------------------------------------- # Crypto asymmetric algorithm name @@ -53,11 +48,11 @@ mosip.kernel.keygenerator.asymmetric-key-length=2048 mosip.kernel.keygenerator.asymmetric-algorithm-name=RSA # Defines the file path for the PKCS#12 keystore used by the KeyManager service for cryptographic keys # E.g., place the .p12 file in 'mimoto/certs' folder and provide its path here -mosip.kernel.keymanager.hsm.config-path=${keystore.file.path} +mosip.kernel.keymanager.hsm.config-path=/home/mosip/encryption/encryptionkeystore.p12 # Defines the type of the keystore used by the Key Manager as PKCS#12 mosip.kernel.keymanager.hsm.keystore-type=PKCS12 # Password to access the KeyManager PKCS#12 keystore file -mosip.kernel.keymanager.hsm.keystore-pass=mosip@123 +mosip.kernel.keymanager.hsm.keystore-pass=${mimoto.oidc.keystore.password} # Default Certificate properties mosip.kernel.keymanager.certificate.default.common-name=www.example.com @@ -162,11 +157,11 @@ spring.datasource.driver-class-name=org.postgresql.Driver # Specifies the type of session store to use (Redis in this case), enabling distributed session management. spring.session.store-type=redis # Defines the hostname of the Redis server, required to connect to the Redis instance. -spring.data.redis.host=localhost +spring.data.redis.host=${redis.host} # Specifies the port number for the Redis server, required to connect to the Redis instance. -spring.data.redis.port=6379 +spring.data.redis.port=${redis.port} # Sets the password for connecting to the Redis server (empty if no password is required), ensuring secure access. -spring.data.redis.password= +spring.data.redis.password=${redis.password} # Sets the duration for which the application waits to establish a connection with the Redis server, preventing long delays. spring.data.redis.connect-timeout=10s # Specifies the duration the application waits for a response from Redis operations (e.g., setting or retrieving keys), ensuring timely responses. diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index b14bbaac2..0b11afc88 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -248,3 +248,31 @@ mosip.data.share.create.retry.count=3 mosip.security.cors-enable=true # Predefined list of cross origins which are allowed to access the application resources mosip.security.origins=http://localhost:3004 + +# Redis configuration +# Defines the hostname of the Redis server, required to connect to the Redis instance. +spring.data.redis.host=localhost +# Specifies the port number for the Redis server, required to connect to the Redis instance. +spring.data.redis.port=6379 +# Sets the password for connecting to the Redis server (empty if no password is required), ensuring secure access. +spring.data.redis.password= + +# Defines the hostname where the database is hosted +mosip.mimoto.database.hostname=localhost +# Defines the port number on which database is running and available +mosip.mimoto.database.port=5432 + +# Database configuration +# Defines the username for accessing the PostgreSQL database, required for authentication +spring.datasource.username=postgres +# Defines the password for accessing the PostgreSQL database, required for authentication +spring.datasource.password=postgres + +# Key-manager specific properties +# Defines the file path for the PKCS#12 keystore used by the KeyManager service for cryptographic keys +# E.g., place the .p12 file in 'mimoto/certs' folder and provide its path here +mosip.kernel.keymanager.hsm.config-path=certs/oidckeystore.p12 +# Defines the type of the keystore used by the Key Manager as PKCS#12 +mosip.kernel.keymanager.hsm.keystore-type=PKCS12 +# Password to access the KeyManager PKCS#12 keystore file +mosip.kernel.keymanager.hsm.keystore-pass=mosip123 \ No newline at end of file From 1ef9f0bab71a983b6ecb5d777101feac7f9ed2d8 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 12 Aug 2025 12:22:19 +0530 Subject: [PATCH 747/860] [Injiweb 1665] add support for generating the PDF properly for the SD-JWT credential format (#824) --- .talismanrc | 8 +- .../CredentialPDFGeneratorService.java | 27 +- .../impl/VcSdJwtCredentialFormatHandler.java | 99 ++++---- .../resources/application-default.properties | 4 +- .../resources/application-local.properties | 2 +- .../templates/credential-template.html | 133 +++++++--- .../VcSdJwtCredentialFormatHandlerTest.java | 237 ++++++++++++------ 7 files changed, 342 insertions(+), 168 deletions(-) diff --git a/.talismanrc b/.talismanrc index 2ff09d48c..3968909f7 100644 --- a/.talismanrc +++ b/.talismanrc @@ -24,7 +24,7 @@ fileignoreconfig: - filename: src/main/java/io/mosip/mimoto/controller/CredentialShareController.java checksum: 666c22ca63adb8770de901e220f8efeb5ec1d3f63064a58dea33ba49b8e15872 - filename: src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java - checksum: 1aabb69041c31bcfe04c89766759121bff7381df4c495384fd42ff6d47dc0fe1 + checksum: 4ed9e188c7dbf07b18eecc3051fb48e8b72072af9963d19972d70b609ebe8045 - filename: src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java checksum: 3349bda92b9e594f99bf0f0e79f7c52fb378c82384a8d3997986e85fb5ce1ec6 - filename: src/main/java/io/mosip/mimoto/controller/IssuersController.java @@ -122,11 +122,15 @@ fileignoreconfig: - filename: src/main/resources/application-default.properties checksum: e0d8dd498f739097e67111bdfd4ac4cdf9ddab9b77c2ffca42aecc3e09a4ebc8 - filename: src/main/resources/application-local.properties - checksum: 710840f8a4882efd00d9b830e8faf0e5c2bf3fec206f6a32b9a7eb32b0812d33 + checksum: 5717e53660b035685f610e443e30e0ebbf77b24015873ffd2b9f1866d24d2b90 - filename: docker-compose/config/mimoto-default.properties checksum: c47e16427653b2283bfd7e0edda74aad3171aa16e0cc7dd1f8d31934c269e678 - filename: README.md checksum: e774036bc8cf0bf82ca5bc0a4cd8b3501616b3309764f18a13cb4d9013b404af - filename: docker-compose/README.md checksum: 3290aef321dbbd1adeec634076e865d2d7f8058e4cc8d483afc416c7f82ae966 +- filename: src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java + checksum: 425cb4066c02d93572b1db02099532465479e7f4c94c3684c5d46a063352631d +- filename: src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java + checksum: e91aa11aa049453a3a7cd542386dbb813f5c868678f68d6bd71af92149e0d5db version: "" \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java b/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java index 4955873aa..b29340639 100644 --- a/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java +++ b/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java @@ -1,5 +1,7 @@ package io.mosip.mimoto.service; +import com.authlete.sd.Disclosure; +import com.authlete.sd.SDJWT; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.zxing.BarcodeFormat; @@ -11,6 +13,7 @@ import com.itextpdf.html2pdf.HtmlConverter; import com.itextpdf.html2pdf.resolver.font.DefaultFontProvider; import com.itextpdf.kernel.pdf.PdfWriter; +import io.mosip.mimoto.constant.CredentialFormat; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.mimoto.CredentialIssuerDisplayResponse; import io.mosip.mimoto.dto.mimoto.CredentialSupportedDisplayResponse; @@ -37,6 +40,10 @@ import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.*; +import java.util.stream.Collectors; + +import java.util.Map; +import java.util.Properties; @Slf4j @Service @@ -111,12 +118,28 @@ private Map getPdfResourceFromVcProperties( String credentialSupportedType = firstDisplay != null ? firstDisplay.getName() : null; String face = extractFace(vcCredentialResponse); + Set disclosures; + if (CredentialFormat.VC_SD_JWT.getFormat().equals(vcCredentialResponse.getFormat())) { + SDJWT sdjwt = SDJWT.parse((String) vcCredentialResponse.getCredential()); + disclosures = sdjwt.getDisclosures().stream() + .map(Disclosure::getClaimName) + .collect(Collectors.toSet()); + } else { + disclosures = new LinkedHashSet<>(); + } + LinkedHashMap disclosuresProps = new LinkedHashMap<>(); displayProperties.forEach((key, valueMap) -> valueMap.forEach((display, val) -> { String displayName = display.getName(); String locale = display.getLocale(); String strVal = formatValue(val, locale); - rowProperties.put(key, Map.of(displayName, strVal)); + if (disclosures.contains(key)){ + disclosuresProps.put(key, displayName); + rowProperties.put(key, Map.of(displayName, strVal)); + } else{ + rowProperties.put(key, Map.of(displayName, strVal)); + } + })); String qrCodeImage = ""; @@ -130,6 +153,7 @@ private Map getPdfResourceFromVcProperties( data.put("credentialValidity", credentialValidity); data.put("logoUrl", issuerDTO.getDisplay().stream().map(d -> d.getLogo().getUrl()).findFirst().orElse("")); data.put("rowProperties", rowProperties); + data.put("disclosures", disclosuresProps); data.put("textColor", textColor); data.put("backgroundColor", backgroundColor); data.put("backgroundImage", backgroundImage); @@ -211,4 +235,3 @@ private String constructQRCode(String qrData) throws WriterException { } } - diff --git a/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java b/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java index f3a1a7aaa..9f2c085ab 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java +++ b/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java @@ -16,6 +16,8 @@ import java.util.*; import java.util.stream.Collectors; +import static io.mosip.mimoto.util.JwtUtils.parseJwtPayload; + @Slf4j @Component("vc+sd-jwt") public class VcSdJwtCredentialFormatHandler implements CredentialFormatHandler { @@ -52,22 +54,6 @@ public LinkedHashMap> loadD LinkedHashMap> displayProperties = new LinkedHashMap<>(); - // Remove "credentialSubject" and "disclosures" from credentialProperties - Map filteredCredentialProperties = new HashMap<>(); - - credentialProperties.forEach((outerKey, outerValue) -> { - if (outerValue instanceof Map) { - Map innerMap = (Map) outerValue; - for (Map.Entry innerEntry : innerMap.entrySet()) { - if (innerEntry.getKey() instanceof String) { - filteredCredentialProperties.put((String) innerEntry.getKey(), innerEntry.getValue()); - } - } - } else { - filteredCredentialProperties.put(outerKey, outerValue); - } - }); - // Extract raw claims and convert to DTOs Map rawClaims = Optional.ofNullable(credentialsSupportedResponse.getClaims()) .map(map -> (map.size() == 1 && map.values().iterator().next() instanceof Map) @@ -83,7 +69,6 @@ public LinkedHashMap> loadD if (convertedClaimsMap.isEmpty()) { log.warn("No display configuration found for SD-JWT format"); - return displayProperties; } String resolvedLocale = LocaleUtils.resolveLocaleWithFallback(convertedClaimsMap, userLocale); @@ -98,22 +83,39 @@ public LinkedHashMap> loadD }); } - List orderedKeys = credentialsSupportedResponse.getOrder(); - List fieldKeys = (orderedKeys != null && !orderedKeys.isEmpty()) - ? orderedKeys - : new ArrayList<>(localizedDisplayMap.keySet()); + // Start with ordered fields + Set orderedKeys = Optional.ofNullable(credentialsSupportedResponse.getOrder()) + .map(LinkedHashSet::new) // preserve order + .orElse(new LinkedHashSet<>()); + + // Add remaining keys from credentialProperties that are not already in orderedKeys + for (String key : credentialProperties.keySet()) { + orderedKeys.add(key); // Set ensures no duplicates + } + + for (String key : orderedKeys) { + Object value = credentialProperties.get(key); + if (value == null) { + continue; // Skip fields without a value + } - for (String key : fieldKeys) { CredentialIssuerDisplayResponse display = localizedDisplayMap.get(key); - Object value = filteredCredentialProperties.get(key); - if (display != null && value != null) { - displayProperties.put(key, Map.of(display, value)); + + // Fallback if not found in metadata + if (display == null) { + display = new CredentialIssuerDisplayResponse(); + display.setName(convertKeyToLabel(key)); + display.setLocale("en"); } + + displayProperties.put(key, Map.of(display, value)); } return displayProperties; } + + public Map extractClaimsFromSdJwt(String sdJwtString) { try { SDJWT sdJwt = SDJWT.parse(sdJwtString); @@ -139,7 +141,6 @@ public Map extractClaimsFromSdJwt(String sdJwtString) { // Add disclosures List disclosures = sdJwt.getDisclosures(); - Map disclosuresClaims = new HashMap<>(); if (disclosures != null && !disclosures.isEmpty()) { for (Disclosure disclosure : disclosures) { try { @@ -147,7 +148,7 @@ public Map extractClaimsFromSdJwt(String sdJwtString) { Object claimValue = disclosure.getClaimValue(); if (claimName != null && claimValue != null) { - disclosuresClaims.put(claimName, claimValue); + claims.put(claimName, claimValue); // Add directly to claims } } catch (Exception e) { log.warn("Failed to process disclosure: {}", e.getMessage()); @@ -156,15 +157,11 @@ public Map extractClaimsFromSdJwt(String sdJwtString) { } // Remove standard JWT claims and SD-JWT metadata - List metadataKeys = Arrays.asList("iss", "sub", "aud", "exp", "nbf", "iat", "jti", "_sd", "_sd_alg"); + List metadataKeys = Arrays.asList("vct", "cnf", "iss", "sub", "aud", "exp", "nbf", "iat", "jti", "_sd", "_sd_alg"); metadataKeys.forEach(claims::remove); - // Separate credentialSubject if present - Map result = new HashMap<>(); - result.put("credentialSubject", claims); - result.put("disclosures", disclosuresClaims); - - return result; + // Return claims directly as result + return claims; } catch (IllegalArgumentException e) { log.error("Error parsing SD-JWT with Authlete library: {}", e.getMessage(), e); @@ -175,20 +172,30 @@ public Map extractClaimsFromSdJwt(String sdJwtString) { } } - private Map parseJwtPayload(String jwt) { - try { - String[] parts = jwt.split("\\."); - if (parts.length < 3) { - log.error("Invalid JWT format"); - return null; - } + private String convertKeyToLabel(String key) { + if (key == null || key.isEmpty()) return key; - String payloadJson = new String(Base64.getUrlDecoder().decode(parts[1]), StandardCharsets.UTF_8); - return objectMapper.readValue(payloadJson, Map.class); - } catch (Exception e) { - log.error("Error parsing JWT payload", e); - return null; + // Add space before capital letters + String withSpaces = key.replaceAll("([a-z])([A-Z])", "$1 $2") + .replaceAll("([A-Z]+)([A-Z][a-z])", "$1 $2"); + + // Capitalize each word + String[] words = withSpaces.split(" "); + StringBuilder result = new StringBuilder(); + + for (int i = 0; i < words.length; i++) { + if (!words[i].isEmpty()) { + result.append(capitalize(words[i])); + if (i < words.length - 1) { + result.append(" "); + } + } } + + return result.toString(); } + private String capitalize(String word) { + return word.substring(0, 1).toUpperCase() + word.substring(1).toLowerCase(); + } } \ No newline at end of file diff --git a/src/main/resources/application-default.properties b/src/main/resources/application-default.properties index 3b0dd3ed5..82f1a1d4e 100644 --- a/src/main/resources/application-default.properties +++ b/src/main/resources/application-default.properties @@ -96,9 +96,9 @@ mosip.inji.wallet.issuersWithSingleVcLimit=Mosip # If the data size exceeds 4096 characters (equivalent to 4KB), the 'pixel pass' library will fail to generate the QR code. mosip.inji.qr.data.size.limit=4096 # Defines the height (in Pixels) of the generated QR code -mosip.inji.qr.code.height=650 +mosip.inji.qr.code.height=400 # Defines the width (in Pixels) of the generated QR code -mosip.inji.qr.code.width=650 +mosip.inji.qr.code.width=400 #User Wallet Config # Regular expression for validating wallet PINs, ensuring it is exactly 6 digits diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 0b11afc88..1ed295355 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -214,7 +214,7 @@ mosip.oidc.client.assertion.type=urn:ietf:params:oauth:client-assertion-type:jwt # PKCS#12 keystore file name containing secured credentials (e.g., private key and client alias) for each onboarded issuer, used in the authentication flow with e-Signet mosip.oidc.p12.filename=oidckeystore.p12 # Password to access the PKCS#12 keystore file -mosip.oidc.p12.password=mosip@123 +mosip.oidc.p12.password=mosip123 # Relative path to the directory which contains PKCS#12 keystore file mosip.oidc.p12.path=certs/ diff --git a/src/main/resources/templates/credential-template.html b/src/main/resources/templates/credential-template.html index 3569c81ee..09f50a456 100644 --- a/src/main/resources/templates/credential-template.html +++ b/src/main/resources/templates/credential-template.html @@ -1,60 +1,123 @@ - + Identity Card + + + - -
-
- $titleName + +
+
+ $titleName
-
+
#if (!$face)
- Logo + Logo
#else - Logo + Logo #end
- Logo + Logo
-
- #foreach($entry in $rowProperties.entrySet()) ## Iterate over the outer map - #if($entry.value) ## Check if the value exists for this entry - #set($nestedMap = $entry.value) ## Get the nested value - #if($nestedMap && $nestedMap.size() > 0) ## Check if nestedMap is a Map with entries - #foreach($nestedEntry in $nestedMap.entrySet()) ## Iterate over the nested map - #if($nestedEntry.value) ## Ensure that there’s a value for this nested entry -
-
$nestedEntry.key
-
$nestedEntry.value
-
- #end - #end - #else - ## If the value is not a map, just display it as is -
-
$entry.key
-
$entry.value
+
+ #foreach($entry in $rowProperties.entrySet()) ## Iterate over the outer map + #if($entry.value) ## Check if the value exists for this entry + #set($nestedMap = $entry.value) ## Get the nested value + #if($nestedMap && $nestedMap.size() > 0) ## Check if nestedMap is a Map with entries + #foreach($nestedEntry in $nestedMap.entrySet()) ## Iterate over the nested map + #if($nestedEntry.value) ## Ensure that there’s a value for this nested entry +
+
+ $nestedEntry.key +
+ #if($nestedEntry.value.startsWith("data:image/")) + Embedded Image + #else +
+ $nestedEntry.value +
+ + #end +
+ #end + #end + #else +
+
+ $entry.key +
+ #if($entry.value.startsWith("data:image/")) + Embedded Image + + #else +
+ $entry.value +
+ #end +
+ #end + #end + #end
+
+
+ +#if(!$disclosures.isEmpty()) +
+ Selectively Shareable Fields +
+
+
    + #foreach($entry in $disclosures.entrySet()) ## Iterate over the outer map + #if($entry.value) ## Check if the value exists for this entry +
  • + $entry.value +
  • #end #end - #end -
+ +
+
+ i +
+ Your card includes specific details marked by the issuer as selectively sharable. These can be shared + independently during credential presentation. Other fields not listed here can only be shared as part of the + full credential, if requested by the verifier.
+
+#end + +
QR Code
- #if ($credentialValidity != -1) -
Please note: This credential is limited to a maximum of $credentialValidity verifications by authorized verifiers. Once the specified number of verifications has been reached, this credential will no longer be valid for further verification attempts.
- #else -
Please note: This credential can be used for verification by authorized verifiers without any limit on the number of verifications. It provides continuous, secure access for credential validation.
- #end +
+ Please note: + + #if ($credentialValidity != -1) + limited to a maximum of $credentialValidity verifications by authorized verifiers. Once the specified number of + verifications has been reached, this credential will no longer be valid for further verification attempts. + #else + This credential can be used for verification by authorized verifiers without any limit on the number of verifications. It provides + continuous, secure access for credential validation. + #end + +
- + \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java b/src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java index 01e564173..ba093999f 100644 --- a/src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java +++ b/src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java @@ -2,11 +2,11 @@ import com.authlete.sd.Disclosure; import com.authlete.sd.SDJWT; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import io.mosip.mimoto.constant.CredentialFormat; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.service.impl.VcSdJwtCredentialFormatHandler; +import io.mosip.mimoto.util.JwtUtils; import io.mosip.mimoto.util.LocaleUtils; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -49,30 +49,74 @@ void setUp() { } @Test - void extractCredentialClaimsWithStringCredentialShouldReturnClaims() throws JsonProcessingException { + void extractCredentialClaimsWithStringCredentialShouldReturnClaims() { vcCredentialResponse.setCredential(sampleSdJwtString); - try (MockedStatic mockedSdJwt = mockStatic(SDJWT.class)) { + try (MockedStatic mockedSdJwt = mockStatic(SDJWT.class); + MockedStatic mockedJwtUtils = mockStatic(JwtUtils.class)) { + SDJWT mockSdJwt = mock(SDJWT.class); mockedSdJwt.when(() -> SDJWT.parse(sampleSdJwtString)).thenReturn(mockSdJwt); when(mockSdJwt.getCredentialJwt()).thenReturn(sampleJwtString); when(mockSdJwt.getDisclosures()).thenReturn(new ArrayList<>()); - Map jwtPayload = createSampleJwtPayload(); - when(objectMapper.readValue(anyString(), eq(Map.class))).thenReturn(jwtPayload); + // Mock JWT payload with credentialSubject + Map jwtPayload = new HashMap<>(); + Map credentialSubject = new HashMap<>(); + credentialSubject.put("name", "John Doe"); + credentialSubject.put("admin", true); + jwtPayload.put("credentialSubject", credentialSubject); + jwtPayload.put("iss", "https://example.com"); + jwtPayload.put("sub", "1234567890"); + jwtPayload.put("iat", 1516239022); + + mockedJwtUtils.when(() -> JwtUtils.parseJwtPayload(sampleJwtString)) + .thenReturn(jwtPayload); + + Map result = vcSdJwtCredentialFormatHandler.extractCredentialClaims(vcCredentialResponse); + + assertNotNull(result); + assertEquals("John Doe", result.get("name")); + assertEquals(true, result.get("admin")); + // Metadata fields should be removed + assertFalse(result.containsKey("iss")); + assertFalse(result.containsKey("sub")); + assertFalse(result.containsKey("iat")); + } + } + + @Test + void extractCredentialClaimsWithoutCredentialSubjectShouldReturnAllClaims() { + vcCredentialResponse.setCredential(sampleSdJwtString); + + try (MockedStatic mockedSdJwt = mockStatic(SDJWT.class); + MockedStatic mockedJwtUtils = mockStatic(JwtUtils.class)) { + + SDJWT mockSdJwt = mock(SDJWT.class); + mockedSdJwt.when(() -> SDJWT.parse(sampleSdJwtString)).thenReturn(mockSdJwt); + when(mockSdJwt.getCredentialJwt()).thenReturn(sampleJwtString); + when(mockSdJwt.getDisclosures()).thenReturn(new ArrayList<>()); + + // Mock JWT payload without credentialSubject + Map jwtPayload = new HashMap<>(); + jwtPayload.put("name", "John Doe"); + jwtPayload.put("admin", true); + jwtPayload.put("iss", "https://example.com"); + jwtPayload.put("sub", "1234567890"); + jwtPayload.put("iat", 1516239022); + + mockedJwtUtils.when(() -> JwtUtils.parseJwtPayload(sampleJwtString)) + .thenReturn(jwtPayload); Map result = vcSdJwtCredentialFormatHandler.extractCredentialClaims(vcCredentialResponse); assertNotNull(result); - assertTrue(result.containsKey("credentialSubject")); - Map subject = (Map) result.get("credentialSubject"); - assertEquals("John Doe", subject.get("name")); - assertEquals(true, subject.get("admin")); - assertFalse(subject.containsKey("iss")); - assertFalse(subject.containsKey("sub")); - assertFalse(subject.containsKey("iat")); - assertTrue(result.containsKey("disclosures")); - assertTrue(((Map) result.get("disclosures")).isEmpty()); + assertEquals("John Doe", result.get("name")); + assertEquals(true, result.get("admin")); + // Metadata fields should be removed + assertFalse(result.containsKey("iss")); + assertFalse(result.containsKey("sub")); + assertFalse(result.containsKey("iat")); } } @@ -108,38 +152,12 @@ void extractCredentialClaimsWithInvalidSdJwtShouldReturnEmptyMap() { } @Test - void extractCredentialClaimsWithCredentialSubjectShouldReturnCredentialSubject() throws JsonProcessingException { + void extractCredentialClaimsWithDisclosuresShouldIncludeDisclosedClaims() { vcCredentialResponse.setCredential(sampleSdJwtString); - Map credentialSubject = new HashMap<>(); - credentialSubject.put("firstName", "John"); - credentialSubject.put("lastName", "Doe"); - try (MockedStatic mockedSdJwt = mockStatic(SDJWT.class)) { - SDJWT mockSdJwt = mock(SDJWT.class); - mockedSdJwt.when(() -> SDJWT.parse(sampleSdJwtString)).thenReturn(mockSdJwt); - when(mockSdJwt.getCredentialJwt()).thenReturn(sampleJwtString); - when(mockSdJwt.getDisclosures()).thenReturn(new ArrayList<>()); - - Map jwtPayload = new HashMap<>(); - jwtPayload.put("credentialSubject", credentialSubject); - when(objectMapper.readValue(anyString(), eq(Map.class))).thenReturn(jwtPayload); - - Map result = vcSdJwtCredentialFormatHandler.extractCredentialClaims(vcCredentialResponse); - - assertNotNull(result); - assertTrue(result.containsKey("credentialSubject")); - Map subject = (Map) result.get("credentialSubject"); - assertEquals(credentialSubject, subject); - assertEquals("John", subject.get("firstName")); - assertEquals("Doe", subject.get("lastName")); - } - } - - @Test - void extractCredentialClaimsWithDisclosuresShouldIncludeDisclosedClaims() throws JsonProcessingException { - vcCredentialResponse.setCredential(sampleSdJwtString); + try (MockedStatic mockedSdJwt = mockStatic(SDJWT.class); + MockedStatic mockedJwtUtils = mockStatic(JwtUtils.class)) { - try (MockedStatic mockedSdJwt = mockStatic(SDJWT.class)) { SDJWT mockSdJwt = mock(SDJWT.class); Disclosure mockDisclosure = mock(Disclosure.class); List disclosures = Arrays.asList(mockDisclosure); @@ -150,22 +168,24 @@ void extractCredentialClaimsWithDisclosuresShouldIncludeDisclosedClaims() throws when(mockDisclosure.getClaimName()).thenReturn("disclosedClaim"); when(mockDisclosure.getClaimValue()).thenReturn("disclosedValue"); - Map jwtPayload = createSampleJwtPayload(); - when(objectMapper.readValue(anyString(), eq(Map.class))).thenReturn(jwtPayload); + // Mock JWT payload + Map jwtPayload = new HashMap<>(); + jwtPayload.put("name", "John Doe"); + jwtPayload.put("iss", "https://example.com"); + + mockedJwtUtils.when(() -> JwtUtils.parseJwtPayload(sampleJwtString)) + .thenReturn(jwtPayload); Map result = vcSdJwtCredentialFormatHandler.extractCredentialClaims(vcCredentialResponse); assertNotNull(result); - assertTrue(result.containsKey("credentialSubject")); - Map subject = (Map) result.get("credentialSubject"); - assertEquals("John Doe", subject.get("name")); - assertTrue(result.containsKey("disclosures")); - Map disclosuresMap = (Map) result.get("disclosures"); - assertEquals("disclosedValue", disclosuresMap.get("disclosedClaim")); + assertEquals("John Doe", result.get("name")); + assertEquals("disclosedValue", result.get("disclosedClaim")); + // Metadata fields should be removed + assertFalse(result.containsKey("iss")); } } - @Test void extractCredentialClaimsWithNullCredentialJwtShouldHandleGracefully() { vcCredentialResponse.setCredential(sampleSdJwtString); @@ -179,11 +199,7 @@ void extractCredentialClaimsWithNullCredentialJwtShouldHandleGracefully() { Map result = vcSdJwtCredentialFormatHandler.extractCredentialClaims(vcCredentialResponse); assertNotNull(result); - // Both credentialSubject and disclosures should be empty maps - assertTrue(result.containsKey("credentialSubject")); - assertTrue(((Map) result.get("credentialSubject")).isEmpty()); - assertTrue(result.containsKey("disclosures")); - assertTrue(((Map) result.get("disclosures")).isEmpty()); + assertTrue(result.isEmpty()); } } @@ -260,9 +276,12 @@ void loadDisplayPropertiesFromWellknownWithNestedClaimsShouldHandleCorrectly() { } @Test - void loadDisplayPropertiesFromWellknownWithNullClaimsShouldReturnEmptyMap() { + void loadDisplayPropertiesFromWellknownWithNullClaimsShouldUseConvertedLabel() { // Given Map credentialProperties = new HashMap<>(); + credentialProperties.put("firstName", "John"); + credentialProperties.put("UINValue", "12345"); + credentialsSupportedResponse.setClaims(null); // When @@ -272,19 +291,36 @@ void loadDisplayPropertiesFromWellknownWithNullClaimsShouldReturnEmptyMap() { // Then assertNotNull(result); - assertTrue(result.isEmpty()); + assertEquals(2, result.size()); + assertTrue(result.containsKey("firstName")); + assertTrue(result.containsKey("UINValue")); + + // Check that fallback display for "firstName" + Map displayMap = result.get("firstName"); + CredentialIssuerDisplayResponse display = displayMap.keySet().iterator().next(); + assertEquals("First Name", display.getName()); // convertKeyToLabel should convert camelCase to Pascal Case + assertEquals("en", display.getLocale()); + assertEquals("John", displayMap.get(display)); + + // Check fallback display for "UINValue" + Map uinValueDisplayMap = result.get("UINValue"); + CredentialIssuerDisplayResponse uinValueDisplay = uinValueDisplayMap.keySet().iterator().next(); + assertEquals("Uin Value", uinValueDisplay.getName()); // convertKeyToLabel should convert camelCase to Pascal Case + assertEquals("en", uinValueDisplay.getLocale()); + assertEquals("12345", uinValueDisplayMap.get(uinValueDisplay)); + } @Test - void loadDisplayPropertiesFromWellknownWithNullResolvedLocaleShouldReturnEmptyMap() { + void loadDisplayPropertiesFromWellknownWithNullResolvedLocaleShouldUseConvertedLabel() { // Given Map credentialProperties = new HashMap<>(); - credentialProperties.put("name", "John Doe"); + credentialProperties.put("firstName", "John Doe"); Map claims = createSampleClaims(); credentialsSupportedResponse.setClaims(claims); - CredentialDisplayResponseDto nameDto = createCredentialDisplayResponseDto("Name", "en"); + CredentialDisplayResponseDto nameDto = createCredentialDisplayResponseDto("firstName", "en"); when(objectMapper.convertValue(any(), eq(CredentialDisplayResponseDto.class))) .thenReturn(nameDto); @@ -299,7 +335,14 @@ void loadDisplayPropertiesFromWellknownWithNullResolvedLocaleShouldReturnEmptyMa // Then assertNotNull(result); - assertTrue(result.isEmpty()); + assertEquals(1, result.size()); + assertTrue(result.containsKey("firstName")); + + // Check that fallback display was created + Map displayMap = result.get("firstName"); + CredentialIssuerDisplayResponse display = displayMap.keySet().iterator().next(); + assertEquals("First Name", display.getName()); + assertEquals("en", display.getLocale()); } } @@ -341,14 +384,57 @@ void loadDisplayPropertiesFromWellknownWithCustomOrderShouldRespectOrder() { } @Test - void buildCredentialRequestShouldSetVctAndReturnBuiltRequest() { + void loadDisplayPropertiesFromWellknownWithCustomOrderShouldRespectOrderAndAppendAdditionalFieldsNotPresentInWellknownClaimsAtEnd() { + // Given + Map credentialProperties = new HashMap<>(); + credentialProperties.put("name", "John Doe"); + credentialProperties.put("age", 30); + credentialProperties.put("dob", "1990-01-01"); // Additional field not present in well-known claims + credentialProperties.put("email", "xyz@gmail.com"); // Additional field not present in well-known claims + + Map claims = createSampleClaims(); + credentialsSupportedResponse.setClaims(claims); + credentialsSupportedResponse.setOrder(Arrays.asList("age", "name")); // Custom order + + CredentialDisplayResponseDto nameDto = createCredentialDisplayResponseDto("Name", "en"); + CredentialDisplayResponseDto ageDto = createCredentialDisplayResponseDto("Age", "en"); + CredentialDisplayResponseDto dobDto = createCredentialDisplayResponseDto("DOB", "en"); + CredentialDisplayResponseDto emailDto = createCredentialDisplayResponseDto("Email", "en"); + + when(objectMapper.convertValue(any(), eq(CredentialDisplayResponseDto.class))) + .thenReturn(nameDto, dobDto, emailDto, ageDto); + + try (MockedStatic mockedLocaleUtils = mockStatic(LocaleUtils.class)) { + mockedLocaleUtils.when(() -> LocaleUtils.resolveLocaleWithFallback(any(), eq("en"))) + .thenReturn("en"); + mockedLocaleUtils.when(() -> LocaleUtils.matchesLocale(eq("en"), eq("en"))) + .thenReturn(true); + + // When + LinkedHashMap> result = + vcSdJwtCredentialFormatHandler.loadDisplayPropertiesFromWellknown( + credentialProperties, credentialsSupportedResponse, "en"); + + // Then + assertNotNull(result); + assertEquals(4, result.size()); + List keyOrder = new ArrayList<>(result.keySet()); + assertEquals("age", keyOrder.get(0)); + assertEquals("name", keyOrder.get(1)); + assertEquals("dob", keyOrder.get(2)); // Additional field should be appended at the end + assertEquals("email", keyOrder.get(3)); // Additional field should be appended at the end + } + } + + @Test + void buildCredentialRequestShouldReturnBuiltRequest() { // Given - VCCredentialRequest.VCCredentialRequestBuilder builder = VCCredentialRequest.builder(); VCCredentialRequestProof proof = VCCredentialRequestProof.builder() - .proofType("jwt") // or whatever proof type you expect + .proofType("jwt") .jwt("sample.jwt.token") .build(); - String credentialType = "IdentityCredential"; + + credentialsSupportedResponse.setVct("IdentityCredential"); // When VCCredentialRequest result = vcSdJwtCredentialFormatHandler.buildCredentialRequest( @@ -356,8 +442,9 @@ void buildCredentialRequestShouldSetVctAndReturnBuiltRequest() { // Then assertNotNull(result); - // Note: We can't directly verify the vct value as it's set on the builder, - // but we can verify that a built request is returned + assertEquals(CredentialFormat.VC_SD_JWT.getFormat(), result.getFormat()); + assertEquals(proof, result.getProof()); + assertEquals("IdentityCredential", result.getVct()); } @Test @@ -370,16 +457,6 @@ void getSupportedFormatShouldReturnCorrectFormat() { } // Helper methods - private Map createSampleJwtPayload() { - Map payload = new HashMap<>(); - payload.put("iss", "https://example.com"); - payload.put("sub", "1234567890"); - payload.put("name", "John Doe"); - payload.put("admin", true); - payload.put("iat", 1516239022); - return payload; - } - private Map createSampleClaims() { Map claims = new HashMap<>(); claims.put("name", new HashMap<>()); @@ -395,4 +472,4 @@ private CredentialDisplayResponseDto createCredentialDisplayResponseDto(String n dto.setDisplay(Arrays.asList(display)); return dto; } -} +} \ No newline at end of file From 2217bf1d76f0be84e3ae90d9190026be07834945 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 12 Aug 2025 15:16:52 +0530 Subject: [PATCH 748/860] [Injiweb 1665] update credential template file in docker compose folder (#825) --- .talismanrc | 2 +- docker-compose/README.md | 1 - .../config/credential-template.html | 121 +++++++++++++----- 3 files changed, 93 insertions(+), 31 deletions(-) diff --git a/.talismanrc b/.talismanrc index 3968909f7..5ee737244 100644 --- a/.talismanrc +++ b/.talismanrc @@ -128,7 +128,7 @@ fileignoreconfig: - filename: README.md checksum: e774036bc8cf0bf82ca5bc0a4cd8b3501616b3309764f18a13cb4d9013b404af - filename: docker-compose/README.md - checksum: 3290aef321dbbd1adeec634076e865d2d7f8058e4cc8d483afc416c7f82ae966 + checksum: f70385d1be6b7945df1afac0890bdce5ecceb63cdba08bdd3f760f40f843c630 - filename: src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java checksum: 425cb4066c02d93572b1db02099532465479e7f4c94c3684c5d46a063352631d - filename: src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java diff --git a/docker-compose/README.md b/docker-compose/README.md index eaf550eee..48f0aa7e7 100644 --- a/docker-compose/README.md +++ b/docker-compose/README.md @@ -30,7 +30,6 @@ This is the docker-compose setup to run mimoto which act as BFF for Inji mobile * Set the `oidc_p12_password` environment variable in the Mimoto service configuration inside docker-compose.yml to match the password used for the **oidckeystore.p12** file. * Mimoto also uses this same keystore file (oidckeystore.p12) to store keys generated at service startup, which are essential for performing encryption and decryption operations through the KeyManager service. - 5. To configure any Mobile Wallet specific configurations refer to the [Inji Mobile Wallet Configuration](#inji-mobile-wallet-configuration) section. 6. Choose your setup for starting the services: diff --git a/docker-compose/config/credential-template.html b/docker-compose/config/credential-template.html index f929453c2..d51fe5f49 100644 --- a/docker-compose/config/credential-template.html +++ b/docker-compose/config/credential-template.html @@ -1,60 +1,123 @@ - - $titleName + + Identity Card + + + - -
-
- $titleName + +
+
+ $titleName
-
+
#if (!$face)
- Logo + Logo
#else - Logo + Logo #end
- Logo + Logo
-
- #foreach($entry in $rowProperties.entrySet()) ## Iterate over the outer map - #if($entry.value) ## Check if the value exists for this entry - #set($nestedMap = $entry.value) ## Get the nested value - #if($nestedMap && $nestedMap.size() > 0) ## Check if nestedMap is a Map with entries - #foreach($nestedEntry in $nestedMap.entrySet()) ## Iterate over the nested map - #if($nestedEntry.value) ## Ensure that there’s a value for this nested entry -
-
$nestedEntry.key
-
$nestedEntry.value
+
+ #foreach($entry in $rowProperties.entrySet()) ## Iterate over the outer map + #if($entry.value) ## Check if the value exists for this entry + #set($nestedMap = $entry.value) ## Get the nested value + #if($nestedMap && $nestedMap.size() > 0) ## Check if nestedMap is a Map with entries + #foreach($nestedEntry in $nestedMap.entrySet()) ## Iterate over the nested map + #if($nestedEntry.value) ## Ensure that there’s a value for this nested entry +
+
+ $nestedEntry.key +
+ #if($nestedEntry.value.startsWith("data:image/")) + Embedded Image + #else +
+ $nestedEntry.value +
+ + #end
#end #end #else - ## If the value is not a map, just display it as is
-
$entry.key
-
$entry.value
+
+ $entry.key +
+ #if($entry.value.startsWith("data:image/")) + Embedded Image + + #else +
+ $entry.value +
+ #end
#end #end #end
+
+ +#if(!$disclosures.isEmpty()) +
+ Selectively Shareable Fields +
+
+
    + #foreach($entry in $disclosures.entrySet()) ## Iterate over the outer map + #if($entry.value) ## Check if the value exists for this entry +
  • + $entry.value +
  • + #end + #end +
+
+
+ i +
+ Your card includes specific details marked by the issuer as selectively sharable. These can be shared + independently during credential presentation. Other fields not listed here can only be shared as part of the + full credential, if requested by the verifier. +
+
+#end + +
QR Code
- #if ($credentialValidity != -1) -
Please note: This credential is limited to a maximum of $credentialValidity verifications by authorized verifiers. Once the specified number of verifications has been reached, this credential will no longer be valid for further verification attempts.
- #else -
Please note: This credential can be used for verification by authorized verifiers without any limit on the number of verifications. It provides continuous, secure access for credential validation.
- #end +
+ Please note: + + #if ($credentialValidity != -1) + limited to a maximum of $credentialValidity verifications by authorized verifiers. Once the specified number of + verifications has been reached, this credential will no longer be valid for further verification attempts. + #else + This credential can be used for verification by authorized verifiers without any limit on the number of verifications. It provides + continuous, secure access for credential validation. + #end + +
- \ No newline at end of file + From 448843d27008ae3f8091b093eada7117d46ed259 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Tue, 12 Aug 2025 16:41:27 +0530 Subject: [PATCH 749/860] [Injiweb 1665] update the qr code width and height in mimoto default properties file (#826) --- .talismanrc | 2 +- docker-compose/config/mimoto-default.properties | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.talismanrc b/.talismanrc index 5ee737244..9e3ac62da 100644 --- a/.talismanrc +++ b/.talismanrc @@ -124,7 +124,7 @@ fileignoreconfig: - filename: src/main/resources/application-local.properties checksum: 5717e53660b035685f610e443e30e0ebbf77b24015873ffd2b9f1866d24d2b90 - filename: docker-compose/config/mimoto-default.properties - checksum: c47e16427653b2283bfd7e0edda74aad3171aa16e0cc7dd1f8d31934c269e678 + checksum: 56073d92f55c371ad84f1493bdfc3771a70c49147db6a83bb1d74f6013aef714 - filename: README.md checksum: e774036bc8cf0bf82ca5bc0a4cd8b3501616b3309764f18a13cb4d9013b404af - filename: docker-compose/README.md diff --git a/docker-compose/config/mimoto-default.properties b/docker-compose/config/mimoto-default.properties index 91761c058..33f02f0fa 100644 --- a/docker-compose/config/mimoto-default.properties +++ b/docker-compose/config/mimoto-default.properties @@ -313,9 +313,9 @@ mosip.inji.web.redirect.url=${mosip.inji.web.url}/authorize # If the data size exceeds 4096 characters (equivalent to 4KB), the 'pixel pass' library will fail to generate the QR code. mosip.inji.qr.data.size.limit=4096 # Defines the height (in Pixels) of the generated QR code -mosip.inji.qr.code.height=650 +mosip.inji.qr.code.height=400 # Defines the width (in Pixels) of the generated QR code -mosip.inji.qr.code.width=650 +mosip.inji.qr.code.width=400 # Specifies the URL to redirect the user after successful authentication using Identity Provider(e.g., Goggle), pointing to the passcode page in Inji Web mosip.inji.web.authentication.success.redirect.url=${mosip.inji.web.url}/user/passcode From 625021e79435cfd88f69476cde590d7e25902235 Mon Sep 17 00:00:00 2001 From: cyber-titan <124165966+cyber-titan@users.noreply.github.com> Date: Wed, 13 Aug 2025 14:34:13 +0530 Subject: [PATCH 750/860] injiweb-1684: Display proper field labels using camel casing; added fallback support for LDPVC and SD-JWT. --- .../impl/LdpVcCredentialFormatHandler.java | 31 +++++++-- .../impl/VcSdJwtCredentialFormatHandler.java | 30 +------- .../mosip/mimoto/util/IssuerConfigUtil.java | 29 +++++++- .../LdpVcCredentialFormatHandlerTest.java | 69 ++++++++++++++++++- .../VcSdJwtCredentialFormatHandlerTest.java | 2 +- .../mimoto/util/IssuerConfigUtilTest.java | 57 ++++++++++++++- 6 files changed, 180 insertions(+), 38 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/LdpVcCredentialFormatHandler.java b/src/main/java/io/mosip/mimoto/service/impl/LdpVcCredentialFormatHandler.java index bb1fb0b95..26b5209f8 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/LdpVcCredentialFormatHandler.java +++ b/src/main/java/io/mosip/mimoto/service/impl/LdpVcCredentialFormatHandler.java @@ -5,14 +5,12 @@ import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.service.CredentialFormatHandler; import io.mosip.mimoto.util.LocaleUtils; +import static io.mosip.mimoto.util.IssuerConfigUtil.camelToTitleCase; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; +import java.util.*; @Slf4j @Component("ldp_vc") @@ -46,6 +44,29 @@ public Map extractCredentialClaims(VCCredentialResponse vcCreden return (Map) credential.getCredentialSubject(); } + private void addFallbackDisplayProperties( + Map credentialProperties, + LinkedHashMap localizedDisplayMap, + String resolvedLocale) { + // fallback for missing display properties from issuer well-known + Set credentialFields = credentialProperties.keySet(); + Set missingDisplayFields = new HashSet<>(credentialFields); + missingDisplayFields.removeAll(localizedDisplayMap.keySet()); + // remove metadata fields that are not part of the display properties + missingDisplayFields.remove("id"); + + // Generate fallbacks for fields without well-known display properties + for (String missingField : missingDisplayFields) { + String displayName = camelToTitleCase(missingField); + + CredentialIssuerDisplayResponse fallbackDisplay = new CredentialIssuerDisplayResponse(); + fallbackDisplay.setName(displayName); + fallbackDisplay.setLocale("en"); + + localizedDisplayMap.put(missingField, fallbackDisplay); + } + } + @Override public LinkedHashMap> loadDisplayPropertiesFromWellknown( Map credentialProperties, @@ -83,6 +104,8 @@ public LinkedHashMap> loadD }); } + addFallbackDisplayProperties(credentialProperties, localizedDisplayMap, resolvedLocale); + List fieldKeys = (orderedKeys != null && !orderedKeys.isEmpty()) ? orderedKeys : new ArrayList<>(localizedDisplayMap.keySet()); diff --git a/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java b/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java index 9f2c085ab..4d14889c4 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java +++ b/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java @@ -16,6 +16,7 @@ import java.util.*; import java.util.stream.Collectors; +import static io.mosip.mimoto.util.IssuerConfigUtil.camelToTitleCase; import static io.mosip.mimoto.util.JwtUtils.parseJwtPayload; @Slf4j @@ -104,7 +105,7 @@ public LinkedHashMap> loadD // Fallback if not found in metadata if (display == null) { display = new CredentialIssuerDisplayResponse(); - display.setName(convertKeyToLabel(key)); + display.setName(camelToTitleCase(key)); display.setLocale("en"); } @@ -171,31 +172,4 @@ public Map extractClaimsFromSdJwt(String sdJwtString) { return Collections.emptyMap(); } } - - private String convertKeyToLabel(String key) { - if (key == null || key.isEmpty()) return key; - - // Add space before capital letters - String withSpaces = key.replaceAll("([a-z])([A-Z])", "$1 $2") - .replaceAll("([A-Z]+)([A-Z][a-z])", "$1 $2"); - - // Capitalize each word - String[] words = withSpaces.split(" "); - StringBuilder result = new StringBuilder(); - - for (int i = 0; i < words.length; i++) { - if (!words[i].isEmpty()) { - result.append(capitalize(words[i])); - if (i < words.length - 1) { - result.append(" "); - } - } - } - - return result.toString(); - } - - private String capitalize(String word) { - return word.substring(0, 1).toUpperCase() + word.substring(1).toLowerCase(); - } } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/util/IssuerConfigUtil.java b/src/main/java/io/mosip/mimoto/util/IssuerConfigUtil.java index 30e1babe8..006e4a9c7 100644 --- a/src/main/java/io/mosip/mimoto/util/IssuerConfigUtil.java +++ b/src/main/java/io/mosip/mimoto/util/IssuerConfigUtil.java @@ -2,8 +2,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import io.mosip.mimoto.dto.mimoto.AuthorizationServerWellKnownResponse; -import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; +import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.AuthorizationServerWellknownResponseException; import io.mosip.mimoto.exception.InvalidWellknownResponseException; @@ -35,6 +34,32 @@ public class IssuerConfigUtil { @Autowired private Validator validator; + public static String camelToTitleCase(String input) { + if (input == null || input.isEmpty()) return input; + + // Insert space before: + // 1. Lowercase followed by uppercase (e.g., pinFor -> pin For) + // 2. Acronym followed by normal word (e.g., PRACondition -> PRA Condition) + String result = input.replaceAll("(?<=[a-z])(?=[A-Z])|(?<=[A-Z]{2,})(?=[A-Z][a-z])", " "); + + // Capitalize first letter of each word, preserve acronyms + String[] words = result.split(" "); + StringBuilder finalResult = new StringBuilder(); + + for (String word : words) { + if (word.matches("[A-Z]{2,}")) { + // Acronym (all uppercase, length >= 2) + finalResult.append(word); + } else { + // Capitalize normally + finalResult.append(Character.toUpperCase(word.charAt(0))) + .append(word.substring(1)); + } + finalResult.append(" "); + } + + return finalResult.toString().trim(); + } @Cacheable(value = "issuerWellknown", key = "#p0") public CredentialIssuerWellKnownResponse getIssuerWellknown(String credentialIssuerHost) throws ApiNotAccessibleException, IOException, InvalidWellknownResponseException { diff --git a/src/test/java/io/mosip/mimoto/service/LdpVcCredentialFormatHandlerTest.java b/src/test/java/io/mosip/mimoto/service/LdpVcCredentialFormatHandlerTest.java index e51881621..a8901f206 100644 --- a/src/test/java/io/mosip/mimoto/service/LdpVcCredentialFormatHandlerTest.java +++ b/src/test/java/io/mosip/mimoto/service/LdpVcCredentialFormatHandlerTest.java @@ -204,7 +204,13 @@ void loadDisplayPropertiesFromWellknownWithNullResolvedLocaleShouldReturnEmptyMa // Then assertNotNull(result); - assertTrue(result.isEmpty()); + assertEquals(1, result.size()); // Should generate fallback for firstName + assertTrue(result.containsKey("firstName")); + + // Verify fallback display properties with default "en" locale + CredentialIssuerDisplayResponse display = result.get("firstName").keySet().iterator().next(); + assertEquals("First Name", display.getName()); + assertEquals("en", display.getLocale()); } } @@ -418,4 +424,65 @@ private Map createCredentialSubjectConfig( return config; } + + private Map createCredentialSubjectConfigForFullName() { + Map config = new LinkedHashMap<>(); + + // Create fullName display config only + CredentialDisplayResponseDto fullNameDto = new CredentialDisplayResponseDto(); + CredentialIssuerDisplayResponse fullNameDisplay = new CredentialIssuerDisplayResponse(); + fullNameDisplay.setName("Full Name"); + fullNameDisplay.setLocale("en"); + fullNameDto.setDisplay(List.of(fullNameDisplay)); + config.put("fullName", fullNameDto); + + return config; + } + + @Test + void loadDisplayPropertiesFromWellknownWithFullNameScenario() { + // Given - only fullName has wellknown config, others need fallbacks + Map credentialProperties = new HashMap<>(); + credentialProperties.put("fullName", "John Doe"); + credentialProperties.put("dob", "1990-01-01"); // Missing + credentialProperties.put("mobile", "123-456-7890"); // Missing + + // Only fullName has wellknown display config + Map credentialSubjectConfig = createCredentialSubjectConfigForFullName(); + credentialDefinition.setCredentialSubject(credentialSubjectConfig); + credentialsSupportedResponse.setCredentialDefinition(credentialDefinition); + + try (MockedStatic mockedLocaleUtils = mockStatic(LocaleUtils.class)) { + mockedLocaleUtils.when(() -> LocaleUtils.resolveLocaleWithFallback(any(), eq("en"))) + .thenReturn("en"); + mockedLocaleUtils.when(() -> LocaleUtils.matchesLocale("en", "en")) + .thenReturn(true); + + // When + LinkedHashMap> result = + ldpVcCredentialFormatHandler.loadDisplayPropertiesFromWellknown( + credentialProperties, credentialsSupportedResponse, "en"); + + // Then + assertNotNull(result); + assertEquals(3, result.size()); // All 3 fields should be present + + // Verify wellknown field is preserved + assertTrue(result.containsKey("fullName")); + CredentialIssuerDisplayResponse fullNameDisplay = result.get("fullName").keySet().iterator().next(); + assertEquals("Full Name", fullNameDisplay.getName()); // From wellknown + + // Verify fallback fields are generated + assertTrue(result.containsKey("dob")); + assertTrue(result.containsKey("mobile")); + + CredentialIssuerDisplayResponse dobDisplay = result.get("dob").keySet().iterator().next(); + assertEquals("Dob", dobDisplay.getName()); // Generated fallback + assertEquals("en", dobDisplay.getLocale()); + + CredentialIssuerDisplayResponse mobileDisplay = result.get("mobile").keySet().iterator().next(); + assertEquals("Mobile", mobileDisplay.getName()); // Generated fallback + assertEquals("en", mobileDisplay.getLocale()); + } + } } diff --git a/src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java b/src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java index ba093999f..250d7ba6c 100644 --- a/src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java +++ b/src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java @@ -305,7 +305,7 @@ void loadDisplayPropertiesFromWellknownWithNullClaimsShouldUseConvertedLabel() { // Check fallback display for "UINValue" Map uinValueDisplayMap = result.get("UINValue"); CredentialIssuerDisplayResponse uinValueDisplay = uinValueDisplayMap.keySet().iterator().next(); - assertEquals("Uin Value", uinValueDisplay.getName()); // convertKeyToLabel should convert camelCase to Pascal Case + assertEquals("UIN Value", uinValueDisplay.getName()); // convertKeyToLabel should convert camelCase to Pascal Case assertEquals("en", uinValueDisplay.getLocale()); assertEquals("12345", uinValueDisplayMap.get(uinValueDisplay)); diff --git a/src/test/java/io/mosip/mimoto/util/IssuerConfigUtilTest.java b/src/test/java/io/mosip/mimoto/util/IssuerConfigUtilTest.java index 24bd3744d..b41532dbf 100644 --- a/src/test/java/io/mosip/mimoto/util/IssuerConfigUtilTest.java +++ b/src/test/java/io/mosip/mimoto/util/IssuerConfigUtilTest.java @@ -19,8 +19,7 @@ import java.util.List; import java.util.Map; import static io.mosip.mimoto.util.TestUtilities.*; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThrows; +import static org.junit.Assert.*; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -127,5 +126,59 @@ public void shouldThrowExceptionIfAnyIssuerOccurredWhileFetchingIssuerWellknown( verify(restApiClient, times(1)).getApi(issuerWellKnownUrl, String.class); } + @Test + public void testCamelToTitleCaseNullInput() { + String result = issuersConfigUtil.camelToTitleCase(null); + assertNull(result); + } + + @Test + public void testCamelToTitleCaseEmptyInput() { + String result = issuersConfigUtil.camelToTitleCase(""); + assertEquals("", result); + } + + @Test + public void testCamelToTitleCaseSingleWord() { + String result = issuersConfigUtil.camelToTitleCase("name"); + assertEquals("Name", result); + } + + @Test + public void testCamelToTitleCaseCamelCase() { + String result = issuersConfigUtil.camelToTitleCase("firstName"); + assertEquals("First Name", result); + } + + @Test + public void testCamelToTitleCaseMultipleCamelCase() { + String result = issuersConfigUtil.camelToTitleCase("firstNameAndLastName"); + assertEquals("First Name And Last Name", result); + } + + @Test + public void testCamelToTitleCaseWithAcronym() { + String result = issuersConfigUtil.camelToTitleCase("PRACondition"); + assertEquals("PRA Condition", result); + } + + @Test + public void testCamelToTitleCaseAcronymAtEnd() { + String result = issuersConfigUtil.camelToTitleCase("conditionPRA"); + assertEquals("Condition PRA", result); + } + + @Test + public void testCamelToTitleCaseAllUppercase() { + String result = issuersConfigUtil.camelToTitleCase("URL"); + assertEquals("URL", result); + } + + @Test + public void testCamelToTitleCaseMixedCase() { + String result = issuersConfigUtil.camelToTitleCase("pinFor"); + assertEquals("Pin For", result); + } + } From dfd8315730848eb98ea3c6fb2158868f3f4479ab Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Wed, 13 Aug 2025 15:51:35 +0530 Subject: [PATCH 751/860] injiweb-1579 reading context from wellknown Signed-off-by: Gurpreet41082 --- .../mimoto/dto/mimoto/CredentialDefinitionResponseDto.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDefinitionResponseDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDefinitionResponseDto.java index 6210a81fc..0f2fabaf0 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDefinitionResponseDto.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDefinitionResponseDto.java @@ -26,8 +26,8 @@ public class CredentialDefinitionResponseDto { @Schema(description = "Credential Subject of the VC") private Map<@NotEmpty String, @Valid CredentialDisplayResponseDto> credentialSubject; - @SerializedName("context") - @JsonProperty("context") + @SerializedName("@context") + @JsonProperty("@context") @Schema(description = "context of the Credential Definition") private List<@NotEmpty String> context; } From 8b6c9793cffeae311fc5c4427b432028e6679102 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Thu, 14 Aug 2025 09:51:18 +0530 Subject: [PATCH 752/860] injiweb-1579 removed list of list in context Signed-off-by: Gurpreet41082 injiweb-1579 removed list of list in context Signed-off-by: Gurpreet41082 --- .../mimoto/service/impl/PresentationServiceImpl.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java index 7eef77090..a494dfa1a 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java @@ -116,11 +116,17 @@ private String buildRedirectString(VerifiablePresentationDTO verifiablePresentat URLEncoder.encode(presentationSubmission, StandardCharsets.UTF_8)); } - private VerifiablePresentationDTO constructVerifiablePresentationString(VCCredentialProperties vcCredentialProperties) throws JsonProcessingException { + private VerifiablePresentationDTO constructVerifiablePresentationString(VCCredentialProperties vcCredentialProperties) { + Object context = vcCredentialProperties.getContext(); + + List contextList = (context instanceof List list) + ? (List) list + : List.of(context); + return VerifiablePresentationDTO.builder() .verifiableCredential(Collections.singletonList(vcCredentialProperties)) .type(Collections.singletonList("VerifiablePresentation")) - .context(Collections.singletonList(vcCredentialProperties.getContext())) + .context(contextList) .build(); } From 41abcad487f45ef7ac5c7521c4d72463d61fb061 Mon Sep 17 00:00:00 2001 From: cyber-titan <124165966+cyber-titan@users.noreply.github.com> Date: Thu, 14 Aug 2025 10:18:07 +0530 Subject: [PATCH 753/860] injiweb-1691 Code coverage added for corner case --- .../CredentialPDFGeneratorServiceTest.java | 105 ++++ .../mimoto/service/CredentialServiceTest.java | 460 ++++++++++++++++++ .../mosip/mimoto/service/IdpServiceTest.java | 31 ++ 3 files changed, 596 insertions(+) diff --git a/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java index 84d63f279..59be0d491 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java @@ -258,4 +258,109 @@ void testGeneratePdfWithNullOrder() throws Exception { assertNotNull(result); } } + + @Test + void testGeneratePdfWithMapValueFormatting() throws Exception { + // Setup credential with map containing "value" key + Map subjectWithMapValue = new HashMap<>(); + subjectWithMapValue.put("education", Map.of("value", "Bachelor's Degree")); + ((VCCredentialProperties)vcCredentialResponse.getCredential()).setCredentialSubject(subjectWithMapValue); + + // Setup display for education field + credentialsSupportedResponse.getCredentialDefinition().getCredentialSubject() + .put("education", createDisplay("Education")); + credentialsSupportedResponse.setOrder(List.of("education")); + + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())) + .thenReturn("Education: $rowProperties.education"); + when(presentationService.constructPresentationDefinition(any())) + .thenReturn(new PresentationDefinitionDTO()); + when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( + "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, + "https://example.com/share", "", "en"); + + assertNotNull(result); + // Verify the PDF generation succeeded - formatValue was called internally + } + + @Test + void testGeneratePdfWithStringListFormatting() throws Exception { + // Setup credential with list of strings + Map subjectWithList = new HashMap<>(); + subjectWithList.put("skills", List.of("Java", "Spring", "Boot")); + ((VCCredentialProperties)vcCredentialResponse.getCredential()).setCredentialSubject(subjectWithList); + + credentialsSupportedResponse.getCredentialDefinition().getCredentialSubject() + .put("skills", createDisplay("Skills")); + credentialsSupportedResponse.setOrder(List.of("skills")); + + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())) + .thenReturn("Skills: $rowProperties.skills"); + when(presentationService.constructPresentationDefinition(any())) + .thenReturn(new PresentationDefinitionDTO()); + when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( + "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, + "https://example.com/share", "", "en"); + + assertNotNull(result); + // The formatValue method handles list formatting internally + } + + @Test + void testGeneratePdfWithLocaleSpecificMapListFormatting() throws Exception { + // Setup credential with locale-specific map list + Map subjectWithLocaleMap = new HashMap<>(); + List> localeData = List.of( + Map.of("language", "en", "value", "English Name"), + Map.of("language", "fr", "value", "French Name") + ); + subjectWithLocaleMap.put("localizedName", localeData); + ((VCCredentialProperties)vcCredentialResponse.getCredential()).setCredentialSubject(subjectWithLocaleMap); + + credentialsSupportedResponse.getCredentialDefinition().getCredentialSubject() + .put("localizedName", createDisplay("Localized Name")); + credentialsSupportedResponse.setOrder(List.of("localizedName")); + + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())) + .thenReturn("Name: $rowProperties.localizedName"); + when(presentationService.constructPresentationDefinition(any())) + .thenReturn(new PresentationDefinitionDTO()); + when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( + "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, + "https://example.com/share", "", "en"); + + assertNotNull(result); + // formatValue should select "English Name" based on locale "en" + } + + @Test + void testGeneratePdfWithNumericValueFormatting() throws Exception { + // Setup credential with numeric value + Map subjectWithNumber = new HashMap<>(); + subjectWithNumber.put("age", 25); + ((VCCredentialProperties)vcCredentialResponse.getCredential()).setCredentialSubject(subjectWithNumber); + + credentialsSupportedResponse.getCredentialDefinition().getCredentialSubject() + .put("age", createDisplay("Age")); + credentialsSupportedResponse.setOrder(List.of("age")); + + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())) + .thenReturn("Age: $rowProperties.age"); + when(presentationService.constructPresentationDefinition(any())) + .thenReturn(new PresentationDefinitionDTO()); + when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( + "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, + "https://example.com/share", "", "en"); + + assertNotNull(result); + // formatValue converts number to string internally + } } diff --git a/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java index 6324681f1..2a27de6ec 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java @@ -3,8 +3,10 @@ import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.*; +import io.mosip.mimoto.exception.InvalidRequestException; import io.mosip.mimoto.exception.VCVerificationException; import io.mosip.mimoto.model.QRCodeType; +import io.mosip.mimoto.model.VerifiableCredential; import io.mosip.mimoto.service.impl.CredentialServiceImpl; import io.mosip.mimoto.service.impl.IssuersServiceImpl; import io.mosip.mimoto.util.RestApiClient; @@ -22,6 +24,21 @@ import org.springframework.http.MediaType; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; +import io.mosip.mimoto.exception.InvalidCredentialResourceException; +import io.mosip.mimoto.dto.mimoto.VCCredentialRequest; +import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; +import static org.mockito.Mockito.mock; +import io.mosip.mimoto.repository.WalletCredentialsRepository; +import io.mosip.mimoto.dto.mimoto.IssuerConfig; +import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; +import io.mosip.mimoto.util.EncryptionDecryptionUtil; +import com.fasterxml.jackson.databind.ObjectMapper; +import static io.mosip.mimoto.exception.ErrorConstants.INVALID_REQUEST; +import io.mosip.mimoto.exception.CredentialProcessingException; +import static io.mosip.mimoto.exception.ErrorConstants.CREDENTIAL_DOWNLOAD_EXCEPTION; +import io.mosip.mimoto.exception.ExternalServiceUnavailableException; +import static io.mosip.mimoto.exception.ErrorConstants.SERVER_UNAVAILABLE; +import com.fasterxml.jackson.core.JsonProcessingException; import java.io.ByteArrayInputStream; import java.io.StringWriter; @@ -29,6 +46,7 @@ import java.util.List; import java.util.Map; +import static io.mosip.mimoto.exception.ErrorConstants.SIGNATURE_VERIFICATION_EXCEPTION; import static io.mosip.mimoto.util.TestUtilities.*; import static org.junit.Assert.*; import static org.mockito.ArgumentMatchers.any; @@ -57,6 +75,15 @@ public class CredentialServiceTest { @Mock IssuersServiceImpl issuersService; + @Mock + WalletCredentialsRepository walletCredentialsRepository; + + @Mock + EncryptionDecryptionUtil encryptionDecryptionUtil; + + @Mock + ObjectMapper objectMapper; + TokenResponseDTO expectedTokenResponse; String tokenEndpoint, issuerId; IssuerDTO issuerDTO; @@ -151,4 +178,437 @@ public void shouldReturnDownloadedVCAsPDFIfSignatureVerificationIsSuccessful() t assertEquals(expectedPDFByteArray, actualPDFByteArray); } + + @Test + public void shouldReturnVCCredentialResponseWhenDownloadCredentialIsSuccessful() throws Exception { + String credentialEndpoint = "https://example.com/credential"; + VCCredentialRequest vcCredentialRequest = getVCCredentialRequestDTO(); + String accessToken = "valid-access-token"; + + VerifiableCredentialResponse mockResponse = getVerifiableCredentialResponseDTO("CredentialType1"); + + when(restApiClient.postApi( + eq(credentialEndpoint), + eq(MediaType.APPLICATION_JSON), + eq(vcCredentialRequest), + eq(VerifiableCredentialResponse.class), + eq(accessToken) + )).thenReturn(mockResponse); + + VCCredentialResponse result = credentialService.downloadCredential( + credentialEndpoint, vcCredentialRequest, accessToken); + + assertNotNull(result); + assertEquals(vcCredentialRequest.getFormat(), result.getFormat()); + assertEquals(mockResponse.getCredential(), result.getCredential()); + } + + @Test + public void shouldThrowInvalidCredentialResourceExceptionWhenRestApiReturnsNull() { + String credentialEndpoint = "https://example.com/credential"; + VCCredentialRequest vcCredentialRequest = getVCCredentialRequestDTO(); + String accessToken = "valid-access-token"; + + when(restApiClient.postApi( + eq(credentialEndpoint), + eq(MediaType.APPLICATION_JSON), + eq(vcCredentialRequest), + eq(VerifiableCredentialResponse.class), + eq(accessToken) + )).thenReturn(null); + + InvalidCredentialResourceException exception = assertThrows( + InvalidCredentialResourceException.class, + () -> credentialService.downloadCredential(credentialEndpoint, vcCredentialRequest, accessToken) + ); + + assertTrue(exception.getMessage().contains("VC Credential Issue API not accessible")); + } + + @Test + public void shouldDownloadCredentialAndStoreInDBSuccessfully() throws Exception { + // Setup test data + TokenResponseDTO tokenResponse = getTokenResponseDTO(); + String credentialConfigurationId = "CredentialType1"; + String walletId = "wallet123"; + String base64Key = "testKey123"; + String issuerId = "issuer1"; + String locale = "en"; + + // Mock dependencies + IssuerConfig issuerConfig = mock(IssuerConfig.class); + IssuerDTO mockIssuerDTO = getIssuerConfigDTO(issuerId); + CredentialIssuerWellKnownResponse mockWellKnownResponse = new CredentialIssuerWellKnownResponse(); + mockWellKnownResponse.setCredentialEndPoint("https://example.com/credential"); + + VCCredentialRequest vcCredentialRequest = getVCCredentialRequestDTO(); + VerifiableCredential savedCredential = new VerifiableCredential(); + savedCredential.setId("credential-id-123"); + + // Setup issuer config mocks + when(issuerConfig.getIssuerDTO()).thenReturn(mockIssuerDTO); + when(issuerConfig.getWellKnownResponse()).thenReturn(mockWellKnownResponse); + + // Mock service calls + when(issuersService.getIssuerConfig(issuerId, credentialConfigurationId)).thenReturn(issuerConfig); + when(credentialRequestService.buildRequest(any(), eq(credentialConfigurationId), any(), any(), eq(walletId), eq(base64Key), eq(true))) + .thenReturn(vcCredentialRequest); + when(restApiClient.postApi(any(), any(), eq(vcCredentialRequest), eq(VerifiableCredentialResponse.class), any())) + .thenReturn(getVerifiableCredentialResponseDTO(credentialConfigurationId)); + when(credentialVerifierService.verify(any(VCCredentialResponse.class))).thenReturn(true); + when(objectMapper.writeValueAsString(any())).thenReturn("{\"credential\":\"data\"}"); + when(encryptionDecryptionUtil.encryptCredential(any(), eq(base64Key))).thenReturn("encrypted-credential"); + when(walletCredentialsRepository.save(any(VerifiableCredential.class))).thenReturn(savedCredential); + + // Execute + VerifiableCredentialResponseDTO result = credentialService.downloadCredentialAndStoreInDB( + tokenResponse, credentialConfigurationId, walletId, base64Key, issuerId, locale); + + // Verify + assertNotNull(result); + assertEquals("credential-id-123", result.getCredentialId()); + } + + @Test + public void shouldThrowVCVerificationExceptionWhenVerificationFails() throws Exception { + // Setup test data + TokenResponseDTO tokenResponse = getTokenResponseDTO(); + String credentialConfigurationId = "CredentialType1"; + String walletId = "wallet123"; + String base64Key = "testKey123"; + String issuerId = "issuer1"; + String locale = "en"; + + // Mock dependencies + IssuerConfig issuerConfig = mock(IssuerConfig.class); + IssuerDTO mockIssuerDTO = getIssuerConfigDTO(issuerId); + CredentialIssuerWellKnownResponse mockWellKnownResponse = new CredentialIssuerWellKnownResponse(); + mockWellKnownResponse.setCredentialEndPoint("https://example.com/credential"); + + // Setup issuer config mocks + when(issuerConfig.getIssuerDTO()).thenReturn(mockIssuerDTO); + when(issuerConfig.getWellKnownResponse()).thenReturn(mockWellKnownResponse); + + // Mock service calls + when(issuersService.getIssuerConfig(issuerId, credentialConfigurationId)).thenReturn(issuerConfig); + when(credentialRequestService.buildRequest(any(), any(), any(), any(), any(), any(), eq(true))) + .thenReturn(getVCCredentialRequestDTO()); + when(restApiClient.postApi(any(), any(), any(), eq(VerifiableCredentialResponse.class), any())) + .thenReturn(getVerifiableCredentialResponseDTO(credentialConfigurationId)); + when(credentialVerifierService.verify(any())).thenReturn(false); + + // Execute and verify exception + VCVerificationException exception = assertThrows(VCVerificationException.class, () -> + credentialService.downloadCredentialAndStoreInDB(tokenResponse, credentialConfigurationId, walletId, base64Key, issuerId, locale)); + + assertEquals(SIGNATURE_VERIFICATION_EXCEPTION.getErrorCode(), exception.getErrorCode()); + } + + @Test + public void shouldThrowInvalidRequestExceptionForNullTokenResponse() { + InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> + credentialService.downloadCredentialAndStoreInDB( + null, "CredentialType1", "wallet123", "testKey123", "issuer1", "en")); + + assertEquals(INVALID_REQUEST.getErrorCode(), exception.getErrorCode()); + assertTrue(exception.getMessage().contains("Token response or access token cannot be null")); + } + + @Test + public void shouldThrowInvalidRequestExceptionForBlankAccessToken() { + TokenResponseDTO tokenResponse = new TokenResponseDTO(); + tokenResponse.setAccess_token(""); // blank token + + InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> + credentialService.downloadCredentialAndStoreInDB( + tokenResponse, "CredentialType1", "wallet123", "testKey123", "issuer1", "en")); + + assertEquals(INVALID_REQUEST.getErrorCode(), exception.getErrorCode()); + assertTrue(exception.getMessage().contains("Token response or access token cannot be null")); + } + + @Test + public void shouldThrowInvalidRequestExceptionForBlankCredentialConfigurationId() { + TokenResponseDTO tokenResponse = getTokenResponseDTO(); + + InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> + credentialService.downloadCredentialAndStoreInDB( + tokenResponse, "", "wallet123", "testKey123", "issuer1", "en")); + + assertEquals(INVALID_REQUEST.getErrorCode(), exception.getErrorCode()); + assertTrue(exception.getMessage().contains("Credential configuration id cannot be null or blank")); + } + + @Test + public void shouldThrowInvalidRequestExceptionForBlankWalletId() { + TokenResponseDTO tokenResponse = getTokenResponseDTO(); + + InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> + credentialService.downloadCredentialAndStoreInDB( + tokenResponse, "CredentialType1", "", "testKey123", "issuer1", "en")); + + assertEquals(INVALID_REQUEST.getErrorCode(), exception.getErrorCode()); + assertTrue(exception.getMessage().contains("Wallet ID cannot be null or blank")); + } + + @Test + public void shouldThrowInvalidRequestExceptionForBlankBase64Key() { + TokenResponseDTO tokenResponse = getTokenResponseDTO(); + + InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> + credentialService.downloadCredentialAndStoreInDB( + tokenResponse, "CredentialType1", "wallet123", "", "issuer1", "en")); + + assertEquals(INVALID_REQUEST.getErrorCode(), exception.getErrorCode()); + assertTrue(exception.getMessage().contains("Wallet key cannot be null or blank")); + } + + @Test + public void shouldThrowInvalidRequestExceptionForBlankIssuerId() { + TokenResponseDTO tokenResponse = getTokenResponseDTO(); + + InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> + credentialService.downloadCredentialAndStoreInDB( + tokenResponse, "CredentialType1", "wallet123", "testKey123", "", "en")); + + assertEquals(INVALID_REQUEST.getErrorCode(), exception.getErrorCode()); + assertTrue(exception.getMessage().contains("Issuer ID cannot be null or blank")); + } + + @Test + public void shouldThrowCredentialProcessingExceptionWhenFetchIssuerConfigFails() throws Exception { + TokenResponseDTO tokenResponse = getTokenResponseDTO(); + String credentialConfigurationId = "CredentialType1"; + String walletId = "wallet123"; + String base64Key = "testKey123"; + String issuerId = "issuer1"; + String locale = "en"; + + // Mock issuersService to throw exception + when(issuersService.getIssuerConfig(issuerId, credentialConfigurationId)) + .thenThrow(new RuntimeException("Issuer service unavailable")); + + // Execute and verify exception + CredentialProcessingException exception = assertThrows(CredentialProcessingException.class, () -> + credentialService.downloadCredentialAndStoreInDB( + tokenResponse, credentialConfigurationId, walletId, base64Key, issuerId, locale)); + + assertEquals(CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), exception.getErrorCode()); + assertTrue(exception.getMessage().contains("Unable to fetch issuer configuration")); + } + + @Test + public void shouldThrowCredentialProcessingExceptionWhenBuildCredentialRequestFails() throws Exception { + TokenResponseDTO tokenResponse = getTokenResponseDTO(); + String credentialConfigurationId = "CredentialType1"; + String walletId = "wallet123"; + String base64Key = "testKey123"; + String issuerId = "issuer1"; + String locale = "en"; + + // Mock dependencies for success until buildRequest + IssuerConfig issuerConfig = mock(IssuerConfig.class); + IssuerDTO mockIssuerDTO = getIssuerConfigDTO(issuerId); + CredentialIssuerWellKnownResponse mockWellKnownResponse = new CredentialIssuerWellKnownResponse(); + + when(issuerConfig.getIssuerDTO()).thenReturn(mockIssuerDTO); + when(issuerConfig.getWellKnownResponse()).thenReturn(mockWellKnownResponse); + when(issuersService.getIssuerConfig(issuerId, credentialConfigurationId)).thenReturn(issuerConfig); + + // Mock credentialRequestService to throw exception + when(credentialRequestService.buildRequest(any(), eq(credentialConfigurationId), any(), any(), eq(walletId), eq(base64Key), eq(true))) + .thenThrow(new RuntimeException("Failed to build credential request")); + + // Execute and verify exception + CredentialProcessingException exception = assertThrows(CredentialProcessingException.class, () -> + credentialService.downloadCredentialAndStoreInDB( + tokenResponse, credentialConfigurationId, walletId, base64Key, issuerId, locale)); + + assertEquals(CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), exception.getErrorCode()); + assertTrue(exception.getMessage().contains("Unable to generate credential request")); + } + + @Test + public void shouldThrowExternalServiceUnavailableExceptionWhenDownloadCredentialFromIssuerFails() throws Exception { + TokenResponseDTO tokenResponse = getTokenResponseDTO(); + String credentialConfigurationId = "CredentialType1"; + String walletId = "wallet123"; + String base64Key = "testKey123"; + String issuerId = "issuer1"; + String locale = "en"; + + // Mock dependencies for success until downloadCredential + IssuerConfig issuerConfig = mock(IssuerConfig.class); + IssuerDTO mockIssuerDTO = getIssuerConfigDTO(issuerId); + CredentialIssuerWellKnownResponse mockWellKnownResponse = new CredentialIssuerWellKnownResponse(); + mockWellKnownResponse.setCredentialEndPoint("https://example.com/credential"); + + when(issuerConfig.getIssuerDTO()).thenReturn(mockIssuerDTO); + when(issuerConfig.getWellKnownResponse()).thenReturn(mockWellKnownResponse); + when(issuersService.getIssuerConfig(issuerId, credentialConfigurationId)).thenReturn(issuerConfig); + when(credentialRequestService.buildRequest(any(), any(), any(), any(), any(), any(), eq(true))) + .thenReturn(getVCCredentialRequestDTO()); + + // Mock restApiClient to throw exception during credential download + when(restApiClient.postApi(any(), any(), any(), eq(VerifiableCredentialResponse.class), any())) + .thenThrow(new RuntimeException("Network timeout")); + + // Execute and verify exception + ExternalServiceUnavailableException exception = assertThrows(ExternalServiceUnavailableException.class, () -> + credentialService.downloadCredentialAndStoreInDB( + tokenResponse, credentialConfigurationId, walletId, base64Key, issuerId, locale)); + + assertEquals(SERVER_UNAVAILABLE.getErrorCode(), exception.getErrorCode()); + assertTrue(exception.getMessage().contains("Unable to download credential from issuer")); + } + + @Test + public void shouldThrowVCVerificationExceptionWhenCredentialVerifierServiceThrowsException() throws Exception { + TokenResponseDTO tokenResponse = getTokenResponseDTO(); + String credentialConfigurationId = "CredentialType1"; + String walletId = "wallet123"; + String base64Key = "testKey123"; + String issuerId = "issuer1"; + String locale = "en"; + + // Mock dependencies for success until verify + IssuerConfig issuerConfig = mock(IssuerConfig.class); + IssuerDTO mockIssuerDTO = getIssuerConfigDTO(issuerId); + CredentialIssuerWellKnownResponse mockWellKnownResponse = new CredentialIssuerWellKnownResponse(); + mockWellKnownResponse.setCredentialEndPoint("https://example.com/credential"); + + when(issuerConfig.getIssuerDTO()).thenReturn(mockIssuerDTO); + when(issuerConfig.getWellKnownResponse()).thenReturn(mockWellKnownResponse); + when(issuersService.getIssuerConfig(issuerId, credentialConfigurationId)).thenReturn(issuerConfig); + when(credentialRequestService.buildRequest(any(), any(), any(), any(), any(), any(), eq(true))) + .thenReturn(getVCCredentialRequestDTO()); + when(restApiClient.postApi(any(), any(), any(), eq(VerifiableCredentialResponse.class), any())) + .thenReturn(getVerifiableCredentialResponseDTO(credentialConfigurationId)); + + // Mock credentialVerifierService to throw exception + when(credentialVerifierService.verify(any(VCCredentialResponse.class))) + .thenThrow(new JsonProcessingException("JSON processing failed") {}); + + // Execute and verify exception + VCVerificationException exception = assertThrows(VCVerificationException.class, () -> + credentialService.downloadCredentialAndStoreInDB( + tokenResponse, credentialConfigurationId, walletId, base64Key, issuerId, locale)); + + assertEquals(SIGNATURE_VERIFICATION_EXCEPTION.getErrorCode(), exception.getErrorCode()); + assertTrue(exception.getMessage().contains("Credential verification failed")); + } + + @Test + public void shouldThrowCredentialProcessingExceptionWhenSerializationFails() throws Exception { + TokenResponseDTO tokenResponse = getTokenResponseDTO(); + String credentialConfigurationId = "CredentialType1"; + String walletId = "wallet123"; + String base64Key = "testKey123"; + String issuerId = "issuer1"; + String locale = "en"; + + // Mock dependencies for success until serialization + IssuerConfig issuerConfig = mock(IssuerConfig.class); + IssuerDTO mockIssuerDTO = getIssuerConfigDTO(issuerId); + CredentialIssuerWellKnownResponse mockWellKnownResponse = new CredentialIssuerWellKnownResponse(); + mockWellKnownResponse.setCredentialEndPoint("https://example.com/credential"); + + when(issuerConfig.getIssuerDTO()).thenReturn(mockIssuerDTO); + when(issuerConfig.getWellKnownResponse()).thenReturn(mockWellKnownResponse); + when(issuersService.getIssuerConfig(issuerId, credentialConfigurationId)).thenReturn(issuerConfig); + when(credentialRequestService.buildRequest(any(), any(), any(), any(), any(), any(), eq(true))) + .thenReturn(getVCCredentialRequestDTO()); + when(restApiClient.postApi(any(), any(), any(), eq(VerifiableCredentialResponse.class), any())) + .thenReturn(getVerifiableCredentialResponseDTO(credentialConfigurationId)); + when(credentialVerifierService.verify(any(VCCredentialResponse.class))).thenReturn(true); + + // Mock objectMapper to throw JsonProcessingException + when(objectMapper.writeValueAsString(any())) + .thenThrow(new JsonProcessingException("Serialization failed") {}); + + // Execute and verify exception + CredentialProcessingException exception = assertThrows(CredentialProcessingException.class, () -> + credentialService.downloadCredentialAndStoreInDB( + tokenResponse, credentialConfigurationId, walletId, base64Key, issuerId, locale)); + + assertEquals(CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), exception.getErrorCode()); + assertTrue(exception.getMessage().contains("Unable to serialize credential response")); + } + + @Test + public void shouldThrowCredentialProcessingExceptionWhenEncryptionFails() throws Exception { + TokenResponseDTO tokenResponse = getTokenResponseDTO(); + String credentialConfigurationId = "CredentialType1"; + String walletId = "wallet123"; + String base64Key = "testKey123"; + String issuerId = "issuer1"; + String locale = "en"; + + // Mock dependencies for success until encryption + IssuerConfig issuerConfig = mock(IssuerConfig.class); + IssuerDTO mockIssuerDTO = getIssuerConfigDTO(issuerId); + CredentialIssuerWellKnownResponse mockWellKnownResponse = new CredentialIssuerWellKnownResponse(); + mockWellKnownResponse.setCredentialEndPoint("https://example.com/credential"); + + when(issuerConfig.getIssuerDTO()).thenReturn(mockIssuerDTO); + when(issuerConfig.getWellKnownResponse()).thenReturn(mockWellKnownResponse); + when(issuersService.getIssuerConfig(issuerId, credentialConfigurationId)).thenReturn(issuerConfig); + when(credentialRequestService.buildRequest(any(), any(), any(), any(), any(), any(), eq(true))) + .thenReturn(getVCCredentialRequestDTO()); + when(restApiClient.postApi(any(), any(), any(), eq(VerifiableCredentialResponse.class), any())) + .thenReturn(getVerifiableCredentialResponseDTO(credentialConfigurationId)); + when(credentialVerifierService.verify(any(VCCredentialResponse.class))).thenReturn(true); + when(objectMapper.writeValueAsString(any())).thenReturn("{\"credential\":\"data\"}"); + + // Mock encryptionDecryptionUtil to throw exception + when(encryptionDecryptionUtil.encryptCredential(any(), eq(base64Key))) + .thenThrow(new RuntimeException("Encryption failed")); + + // Execute and verify exception + CredentialProcessingException exception = assertThrows(CredentialProcessingException.class, () -> + credentialService.downloadCredentialAndStoreInDB( + tokenResponse, credentialConfigurationId, walletId, base64Key, issuerId, locale)); + + assertEquals(CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), exception.getErrorCode()); + assertTrue(exception.getMessage().contains("Unable to encrypt credential data")); + } + + @Test + public void shouldThrowCredentialProcessingExceptionWhenSaveCredentialFails() throws Exception { + TokenResponseDTO tokenResponse = getTokenResponseDTO(); + String credentialConfigurationId = "CredentialType1"; + String walletId = "wallet123"; + String base64Key = "testKey123"; + String issuerId = "issuer1"; + String locale = "en"; + + // Mock dependencies for success until save + IssuerConfig issuerConfig = mock(IssuerConfig.class); + IssuerDTO mockIssuerDTO = getIssuerConfigDTO(issuerId); + CredentialIssuerWellKnownResponse mockWellKnownResponse = new CredentialIssuerWellKnownResponse(); + mockWellKnownResponse.setCredentialEndPoint("https://example.com/credential"); + + when(issuerConfig.getIssuerDTO()).thenReturn(mockIssuerDTO); + when(issuerConfig.getWellKnownResponse()).thenReturn(mockWellKnownResponse); + when(issuersService.getIssuerConfig(issuerId, credentialConfigurationId)).thenReturn(issuerConfig); + when(credentialRequestService.buildRequest(any(), any(), any(), any(), any(), any(), eq(true))) + .thenReturn(getVCCredentialRequestDTO()); + when(restApiClient.postApi(any(), any(), any(), eq(VerifiableCredentialResponse.class), any())) + .thenReturn(getVerifiableCredentialResponseDTO(credentialConfigurationId)); + when(credentialVerifierService.verify(any(VCCredentialResponse.class))).thenReturn(true); + when(objectMapper.writeValueAsString(any())).thenReturn("{\"credential\":\"data\"}"); + when(encryptionDecryptionUtil.encryptCredential(any(), eq(base64Key))).thenReturn("encrypted-credential"); + + // Mock walletCredentialsRepository to throw exception + when(walletCredentialsRepository.save(any(VerifiableCredential.class))) + .thenThrow(new RuntimeException("Database connection failed")); + + // Execute and verify exception + CredentialProcessingException exception = assertThrows(CredentialProcessingException.class, () -> + credentialService.downloadCredentialAndStoreInDB( + tokenResponse, credentialConfigurationId, walletId, base64Key, issuerId, locale)); + + assertEquals(CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), exception.getErrorCode()); + assertTrue(exception.getMessage().contains("Unable to save credential to database")); + } } diff --git a/src/test/java/io/mosip/mimoto/service/IdpServiceTest.java b/src/test/java/io/mosip/mimoto/service/IdpServiceTest.java index 3a9a233e2..dc73fc9df 100644 --- a/src/test/java/io/mosip/mimoto/service/IdpServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/IdpServiceTest.java @@ -1,6 +1,7 @@ package io.mosip.mimoto.service; import io.mosip.mimoto.dto.IssuerDTO; +import io.mosip.mimoto.dto.VerifiableCredentialRequestDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.AuthorizationServerWellKnownResponse; import io.mosip.mimoto.dto.mimoto.CredentialIssuerConfiguration; @@ -208,4 +209,34 @@ public void shouldThrowInvalidRequestExceptionOnBadRequestFromTokenEndpoint() th assertEquals("invalid_request --> Request failed due to invalid input detected by an external service.", ex.getMessage()); } + + @Test + public void shouldReturnTokenResponseForVerifiableCredentialRequestDTO() throws Exception { + VerifiableCredentialRequestDTO requestDTO = new VerifiableCredentialRequestDTO(); + requestDTO.setCode("sampleCode"); + requestDTO.setRedirectUri("https://myapp.com/callback"); + requestDTO.setGrantType("authorization_code"); + requestDTO.setCodeVerifier("dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk"); + requestDTO.setIssuer("issuer123"); + + IssuerDTO mockIssuer = new IssuerDTO(); + mockIssuer.setClient_id("client123"); + mockIssuer.setClient_alias("clientAlias"); + + when(issuersService.getIssuerDetails("issuer123")).thenReturn(mockIssuer); + when(issuersService.getIssuerConfiguration("issuer123")).thenReturn(credentialIssuerConfiguration); + when(credentialIssuerConfiguration.getAuthorizationServerWellKnownResponse()) + .thenReturn(authorizationServerWellKnownResponse); + when(authorizationServerWellKnownResponse.getTokenEndpoint()) + .thenReturn("https://example.com/token"); + when(joseUtil.getJWT(eq("client123"), any(), any(), eq("clientAlias"), any(), eq("https://example.com/token"))) + .thenReturn("jwt-token"); + when(restTemplate.postForObject(eq("https://example.com/token"), any(HttpEntity.class), eq(TokenResponseDTO.class))) + .thenReturn(tokenResponseDTO); + + TokenResponseDTO response = idpService.getTokenResponse(requestDTO); + + assertNotNull(response); + assertEquals(tokenResponseDTO, response); + } } \ No newline at end of file From 600fb1cef468453333232bed3fc21fdc4f10df09 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Wed, 20 Aug 2025 09:30:52 +0530 Subject: [PATCH 754/860] [INJIWEB-1639] add oauth spring clientId and clientSecret config in application local properties file (#838) Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .talismanrc | 2 +- README.md | 2 +- src/main/resources/application-local.properties | 8 +++++++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/.talismanrc b/.talismanrc index 9e3ac62da..0ebcb0b77 100644 --- a/.talismanrc +++ b/.talismanrc @@ -122,7 +122,7 @@ fileignoreconfig: - filename: src/main/resources/application-default.properties checksum: e0d8dd498f739097e67111bdfd4ac4cdf9ddab9b77c2ffca42aecc3e09a4ebc8 - filename: src/main/resources/application-local.properties - checksum: 5717e53660b035685f610e443e30e0ebbf77b24015873ffd2b9f1866d24d2b90 + checksum: df602b1282273f6cb867f3b7c75bda468f07c72253e19a09e776c1db28e2212e - filename: docker-compose/config/mimoto-default.properties checksum: 56073d92f55c371ad84f1493bdfc3771a70c49147db6a83bb1d74f6013aef714 - filename: README.md diff --git a/README.md b/README.md index 0d8be7c0c..0ac10814b 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ The project requires JDK 21, postgres, redis and google client credentials spring.redis.password= ``` 2. Refer to the [How to create Google Client Credentials](docker-compose/README.md#how-to-create-google-client-credentials) section to create - Google client credentials and update below properties in `application-default.properties`. + Google client credentials and update below properties in `application-local.properties`. ``` spring.security.oauth2.client.registration.google.client-id= spring.security.oauth2.client.registration.google.client-secret= diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 1ed295355..9e14950be 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -275,4 +275,10 @@ mosip.kernel.keymanager.hsm.config-path=certs/oidckeystore.p12 # Defines the type of the keystore used by the Key Manager as PKCS#12 mosip.kernel.keymanager.hsm.keystore-type=PKCS12 # Password to access the KeyManager PKCS#12 keystore file -mosip.kernel.keymanager.hsm.keystore-pass=mosip123 \ No newline at end of file +mosip.kernel.keymanager.hsm.keystore-pass=mosip123 + +#Google OAuth2 configuration +# Specifies the client ID for Google OAuth2 authentication, required to identify the application during OAuth2 requests. +spring.security.oauth2.client.registration.google.client-id=clientId +# Specifies the client secret for Google OAuth2 authentication, used to authenticate the application securely +spring.security.oauth2.client.registration.google.client-secret=clientSecret \ No newline at end of file From f2cdd5ddab7e71fe6a6f78e57618e55eb8369840 Mon Sep 17 00:00:00 2001 From: cyber-titan <124165966+cyber-titan@users.noreply.github.com> Date: Wed, 20 Aug 2025 17:37:39 +0530 Subject: [PATCH 755/860] injiweb-1673-config-keys-for-face added fallback for face keys (#836) --- .../CredentialPDFGeneratorService.java | 55 ++-- .../resources/application-default.properties | 3 + .../CredentialPDFGeneratorServiceTest.java | 273 ++++++++++++++++++ 3 files changed, 314 insertions(+), 17 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java b/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java index b29340639..dcbb03c4f 100644 --- a/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java +++ b/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java @@ -49,6 +49,8 @@ @Service public class CredentialPDFGeneratorService { + private record SelectedFace(String key, String face) {} + @Autowired private ObjectMapper objectMapper; @@ -76,8 +78,10 @@ public class CredentialPDFGeneratorService { @Value("${mosip.inji.qr.data.size.limit:4096}") Integer allowedQRDataSizeLimit; - public ByteArrayInputStream generatePdfForVerifiableCredential(String credentialConfigurationId, VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String dataShareUrl, String credentialValidity, String locale) throws Exception { + @Value("${mosip.injiweb.vc.subject.face.keys.order:image,face,photo,picture,portrait}") + private String faceImageLookupKeys; + public ByteArrayInputStream generatePdfForVerifiableCredential(String credentialConfigurationId, VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String dataShareUrl, String credentialValidity, String locale) throws Exception { // Get the appropriate processor based on format CredentialFormatHandler processor = credentialFormatHandlerFactory.getHandler(vcCredentialResponse.getFormat()); @@ -117,7 +121,10 @@ private Map getPdfResourceFromVcProperties( String textColor = firstDisplay != null ? firstDisplay.getTextColor() : null; String credentialSupportedType = firstDisplay != null ? firstDisplay.getName() : null; - String face = extractFace(vcCredentialResponse); + SelectedFace selectedFace = extractFace(vcCredentialResponse); + String face = selectedFace.face(); + String selectedFaceKey = selectedFace.key(); + Set disclosures; if (CredentialFormat.VC_SD_JWT.getFormat().equals(vcCredentialResponse.getFormat())) { SDJWT sdjwt = SDJWT.parse((String) vcCredentialResponse.getCredential()); @@ -129,18 +136,21 @@ private Map getPdfResourceFromVcProperties( } LinkedHashMap disclosuresProps = new LinkedHashMap<>(); - displayProperties.forEach((key, valueMap) -> valueMap.forEach((display, val) -> { - String displayName = display.getName(); - String locale = display.getLocale(); - String strVal = formatValue(val, locale); - if (disclosures.contains(key)){ - disclosuresProps.put(key, displayName); - rowProperties.put(key, Map.of(displayName, strVal)); - } else{ - rowProperties.put(key, Map.of(displayName, strVal)); - } - - })); + displayProperties.forEach((key, valueMap) -> { + boolean isFaceKey = selectedFaceKey != null && key.trim().equals(selectedFaceKey); + + valueMap.forEach((display, val) -> { + String displayName = display.getName(); + String locale = display.getLocale(); + String strVal = formatValue(val, locale); + if (disclosures.contains(key)) { + disclosuresProps.put(key, displayName); + } + if (!isFaceKey) { + rowProperties.put(key, Map.of(displayName, strVal)); + } + }); + }); String qrCodeImage = ""; if (QRCodeType.OnlineSharing.equals(issuerDTO.getQr_code_type())) { @@ -162,12 +172,23 @@ private Map getPdfResourceFromVcProperties( return data; } - private String extractFace(VCCredentialResponse vcCredentialResponse) { + private SelectedFace extractFace(VCCredentialResponse vcCredentialResponse) { // Use the appropriate credentialFormatHandler to extract credential properties CredentialFormatHandler credentialFormatHandler = credentialFormatHandlerFactory.getHandler(vcCredentialResponse.getFormat()); Map credentialSubject = credentialFormatHandler.extractCredentialClaims(vcCredentialResponse); - Object face = credentialSubject.get("face"); - return face != null ? face.toString() : null; + + // handling face extraction based on configured keys + List faceKeys = Arrays.asList(faceImageLookupKeys.split(",")); + for (String faceKey : faceKeys) { + String trimmedKey = faceKey.trim(); + Object faceValue = credentialSubject.get(trimmedKey); + if (faceValue != null && !faceValue.toString().isEmpty()) { + log.debug("Found face data using key: '{}'", trimmedKey); + // Return the trimmedKey directly + return new SelectedFace(trimmedKey, faceValue.toString()); + } + } + return new SelectedFace(null, null); } private String formatValue(Object val, String locale) { diff --git a/src/main/resources/application-default.properties b/src/main/resources/application-default.properties index 82f1a1d4e..d403601a1 100644 --- a/src/main/resources/application-default.properties +++ b/src/main/resources/application-default.properties @@ -192,6 +192,9 @@ registration.processor.print.textfile=registration-processor-print-text-file.jso # Application ID used for identifying and managing the Mimoto service keys in Key Manager service mosip.inji.app.id=MIMOTO +# Face key mappings - first available key is used for image display +mosip.injiweb.vc.subject.face.keys.order=image,face,photo,picture,portrait + #Caffeine cache related configurations # Cache expiry time in minutes for the issuer's well-known endpoint response. cache.credential-issuer.wellknown.expiry-time-in-min = 60 diff --git a/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java index 59be0d491..fc62ac9b2 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java @@ -59,8 +59,16 @@ void setUp() { ReflectionTestUtils.setField(credentialPDFGeneratorService, "qrCodeWidth", 500); ReflectionTestUtils.setField(credentialPDFGeneratorService, "allowedQRDataSizeLimit", 2000); ReflectionTestUtils.setField(credentialPDFGeneratorService, "pixelPass", pixelPass); + ReflectionTestUtils.setField(credentialPDFGeneratorService, "faceImageLookupKeys", + "image,face,photo,picture,portrait"); + // Mock the handler factory to return the handler for the test format when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); + when(credentialFormatHandler.extractCredentialClaims(any())) + .thenAnswer(invocation -> { + VCCredentialResponse response = invocation.getArgument(0); + return ((VCCredentialProperties)response.getCredential()).getCredentialSubject(); + }); setupTestData(); } @@ -363,4 +371,269 @@ void testGeneratePdfWithNumericValueFormatting() throws Exception { assertNotNull(result); // formatValue converts number to string internally } + + @Test + void testFaceKeyFallbackFromPrimaryToSecondary() throws Exception { + // Setup: No "face" key, but has "photo" key + Map subjectData = new HashMap<>(); + subjectData.put("name", "John Doe"); + subjectData.put("photo", "base64-photo-image"); + subjectData.put("dateOfBirth", "1990-01-01"); + + ((VCCredentialProperties)vcCredentialResponse.getCredential()).setCredentialSubject(subjectData); + + // Setup credential display without face key to avoid it appearing in rowProperties + Map credentialSubjectMap = new HashMap<>(); + credentialSubjectMap.put("name", createDisplay("Full Name")); + credentialSubjectMap.put("dateOfBirth", createDisplay("Date of Birth")); + // Note: No "photo" in display properties - should be excluded from rowProperties + + credentialsSupportedResponse.getCredentialDefinition().setCredentialSubject(credentialSubjectMap); + credentialsSupportedResponse.setOrder(List.of("name", "dateOfBirth")); + + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())) + .thenReturn("Face: $face, Name: $rowProperties.name"); + when(presentationService.constructPresentationDefinition(any())) + .thenReturn(new PresentationDefinitionDTO()); + when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( + "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, + "https://example.com/share", "", "en"); + + assertNotNull(result); + // Indirectly tests that "photo" was used as fallback for $face variable + } + + @Test + void testFaceKeyFallbackToPortrait() throws Exception { + // Setup: No "face" or "photo", but has "portrait" + Map subjectData = new HashMap<>(); + subjectData.put("name", "John Doe"); + subjectData.put("portrait", "base64-portrait-image"); + + ((VCCredentialProperties)vcCredentialResponse.getCredential()).setCredentialSubject(subjectData); + + Map credentialSubjectMap = new HashMap<>(); + credentialSubjectMap.put("name", createDisplay("Full Name")); + + credentialsSupportedResponse.getCredentialDefinition().setCredentialSubject(credentialSubjectMap); + credentialsSupportedResponse.setOrder(List.of("name")); + + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())) + .thenReturn("Portrait: $face, Name: $rowProperties.name"); + when(presentationService.constructPresentationDefinition(any())) + .thenReturn(new PresentationDefinitionDTO()); + when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( + "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, + "https://example.com/share", "", "en"); + + assertNotNull(result); + // Tests fallback to "portrait" key + } + + @Test + void testFaceKeyFallbackToImage() throws Exception { + // Setup: Only "image" key available + Map subjectData = new HashMap<>(); + subjectData.put("name", "John Doe"); + subjectData.put("image", "base64-generic-image"); + + ((VCCredentialProperties)vcCredentialResponse.getCredential()).setCredentialSubject(subjectData); + + Map credentialSubjectMap = new HashMap<>(); + credentialSubjectMap.put("name", createDisplay("Full Name")); + + credentialsSupportedResponse.getCredentialDefinition().setCredentialSubject(credentialSubjectMap); + credentialsSupportedResponse.setOrder(List.of("name")); + + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())) + .thenReturn("Image: $face, Name: $rowProperties.name"); + when(presentationService.constructPresentationDefinition(any())) + .thenReturn(new PresentationDefinitionDTO()); + when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( + "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, + "https://example.com/share", "", "en"); + + assertNotNull(result); + // Tests fallback to "image" key + } + + @Test + void testFaceKeyFallbackToPicture() throws Exception { + // Setup: Only "picture" key available + Map subjectData = new HashMap<>(); + subjectData.put("name", "John Doe"); + subjectData.put("picture", "base64-picture-image"); + + ((VCCredentialProperties)vcCredentialResponse.getCredential()).setCredentialSubject(subjectData); + + Map credentialSubjectMap = new HashMap<>(); + credentialSubjectMap.put("name", createDisplay("Full Name")); + + credentialsSupportedResponse.getCredentialDefinition().setCredentialSubject(credentialSubjectMap); + credentialsSupportedResponse.setOrder(List.of("name")); + + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())) + .thenReturn("Picture: $face, Name: $rowProperties.name"); + when(presentationService.constructPresentationDefinition(any())) + .thenReturn(new PresentationDefinitionDTO()); + when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( + "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, + "https://example.com/share", "", "en"); + + assertNotNull(result); + // Tests fallback to "picture" key + } + + @Test + void testFaceKeyPriorityOrder() throws Exception { + // Setup: Multiple face keys present - should use first available in priority order + Map subjectData = new HashMap<>(); + subjectData.put("name", "John Doe"); + subjectData.put("picture", "base64-picture-image"); // Lower priority + subjectData.put("photo", "base64-photo-image"); // Lower priority + subjectData.put("image", "base64-image"); // HIGHEST priority now + + ((VCCredentialProperties)vcCredentialResponse.getCredential()).setCredentialSubject(subjectData); + + Map credentialSubjectMap = new HashMap<>(); + credentialSubjectMap.put("name", createDisplay("Full Name")); + // Include all face keys in display to test that only "image" gets excluded + credentialSubjectMap.put("picture", createDisplay("Picture")); + credentialSubjectMap.put("photo", createDisplay("Photo")); + credentialSubjectMap.put("image", createDisplay("Image")); // Should be excluded (used for $face) + + credentialsSupportedResponse.getCredentialDefinition().setCredentialSubject(credentialSubjectMap); + credentialsSupportedResponse.setOrder(List.of("name", "picture", "photo", "image")); + + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())) + .thenReturn("Face: $face, Name: $rowProperties.name"); + when(presentationService.constructPresentationDefinition(any())) + .thenReturn(new PresentationDefinitionDTO()); + when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( + "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, + "https://example.com/share", "", "en"); + + assertNotNull(result); + // Should use "image" (highest priority) over "photo" and "picture" + // Only "image" should be excluded from rowProperties, "photo" and "picture" should appear + } + + @Test + void testOnlySelectedFaceKeyExcludedFromRowProperties() throws Exception { + // Setup: Multiple face keys - only the selected one ("image") should be excluded from rowProperties + Map subjectData = new HashMap<>(); + subjectData.put("name", "John Doe"); + subjectData.put("image", "base64-image"); // Highest priority - will be selected for $face + subjectData.put("face", "base64-face-image"); // Should appear in rowProperties + subjectData.put("photo", "base64-photo-image"); // Should appear in rowProperties + subjectData.put("portrait", "base64-portrait-image"); // Should appear in rowProperties + subjectData.put("email", "john@example.com"); + + ((VCCredentialProperties)vcCredentialResponse.getCredential()).setCredentialSubject(subjectData); + + // Include all face keys in display properties + Map credentialSubjectMap = new HashMap<>(); + credentialSubjectMap.put("name", createDisplay("Full Name")); + credentialSubjectMap.put("image", createDisplay("Image")); // Should be excluded (used for $face) + credentialSubjectMap.put("face", createDisplay("Face Photo")); // Should appear in rowProperties + credentialSubjectMap.put("photo", createDisplay("Photo")); // Should appear in rowProperties + credentialSubjectMap.put("portrait", createDisplay("Portrait")); // Should appear in rowProperties + credentialSubjectMap.put("email", createDisplay("Email Address")); + + credentialsSupportedResponse.getCredentialDefinition().setCredentialSubject(credentialSubjectMap); + credentialsSupportedResponse.setOrder(List.of("name", "image", "face", "photo", "portrait", "email")); + + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())) + .thenReturn("Face: $face
Properties: $rowProperties"); + when(presentationService.constructPresentationDefinition(any())) + .thenReturn(new PresentationDefinitionDTO()); + when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( + "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, + "https://example.com/share", "", "en"); + + assertNotNull(result); + // Only "image" should be excluded from rowProperties. "face", "photo" and "portrait" should appear in rowProperties + } + + @Test + void testMultipleFaceKeysExcludedFromRowProperties() throws Exception { + // Setup: Multiple face keys present + Map subjectData = new HashMap<>(); + subjectData.put("name", "John Doe"); + subjectData.put("face", "base64-face-image"); + subjectData.put("photo", "base64-photo-image"); + subjectData.put("portrait", "base64-portrait-image"); + subjectData.put("email", "john@example.com"); + + ((VCCredentialProperties)vcCredentialResponse.getCredential()).setCredentialSubject(subjectData); + + // Include all face keys in display properties + Map credentialSubjectMap = new HashMap<>(); + credentialSubjectMap.put("name", createDisplay("Full Name")); + credentialSubjectMap.put("face", createDisplay("Face Photo")); + credentialSubjectMap.put("photo", createDisplay("Photo")); + credentialSubjectMap.put("portrait", createDisplay("Portrait")); + credentialSubjectMap.put("email", createDisplay("Email Address")); + + credentialsSupportedResponse.getCredentialDefinition().setCredentialSubject(credentialSubjectMap); + credentialsSupportedResponse.setOrder(List.of("name", "face", "photo", "portrait", "email")); + + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())) + .thenReturn("Face: $face
Properties: $rowProperties"); + when(presentationService.constructPresentationDefinition(any())) + .thenReturn(new PresentationDefinitionDTO()); + when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( + "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, + "https://example.com/share", "", "en"); + + assertNotNull(result); + // All face-related keys should be excluded from rowProperties + // Only "name" and "email" should appear in rowProperties + } + + @Test + void testNoFaceKeysAvailable() throws Exception { + // Setup: No face-related keys in credential + Map subjectData = new HashMap<>(); + subjectData.put("name", "John Doe"); + subjectData.put("email", "john@example.com"); + subjectData.put("dateOfBirth", "1990-01-01"); + + ((VCCredentialProperties)vcCredentialResponse.getCredential()).setCredentialSubject(subjectData); + + Map credentialSubjectMap = new HashMap<>(); + credentialSubjectMap.put("name", createDisplay("Full Name")); + credentialSubjectMap.put("email", createDisplay("Email Address")); + credentialSubjectMap.put("dateOfBirth", createDisplay("Date of Birth")); + + credentialsSupportedResponse.getCredentialDefinition().setCredentialSubject(credentialSubjectMap); + credentialsSupportedResponse.setOrder(List.of("name", "email", "dateOfBirth")); + + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())) + .thenReturn("Face: $face
Properties: $rowProperties"); + when(presentationService.constructPresentationDefinition(any())) + .thenReturn(new PresentationDefinitionDTO()); + when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( + "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, + "https://example.com/share", "", "en"); + + assertNotNull(result); + // Should handle gracefully when no face keys are available ($face will be null) + } } From 55800f9fc131a86edf0c1ba994c6c698f2d59063 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Fri, 22 Aug 2025 10:43:15 +0530 Subject: [PATCH 756/860] [INJIWEB-1702] fixed the code review comments --- db_upgrade_script/inji_mimoto/README.md | 58 +++++++ .../sql/0.13.1_to_0.14.0_rollback.sql | 0 .../sql/0.13.1_to_0.14.0_upgrade.sql | 0 .../inji_mimoto/upgrade.properties | 12 ++ db_upgrade_script/inji_mimoto/upgrade.sh | 51 ++++++ .../config/mimoto-trusted-verifiers.json | 4 +- docs/VCFormatExtension.md | 113 ++++++++++++ docs/WalletUnlockProcess.md | 68 ++++---- pom.xml | 2 +- .../mimoto/MimotoServiceApplication.java | 2 + .../mimoto/config/WalletPasscodeConfig.java | 1 - ...ockManager.java => WalletLockService.java} | 8 +- .../mimoto/service/WalletUnlockService.java | 21 ++- .../impl/VcSdJwtCredentialFormatHandler.java | 11 +- .../service/impl/WalletServiceImpl.java | 18 +- .../java/io/mosip/mimoto/util/JwtUtils.java | 16 +- .../WalletLockStatusUtils.java} | 22 ++- .../resources/mimoto-trusted-verifiers.json | 4 +- .../VcSdJwtCredentialFormatHandlerTest.java | 6 +- ...erTest.java => WalletLockServiceTest.java} | 18 +- .../mimoto/service/WalletServiceTest.java | 34 ++-- .../service/WalletUnlockServiceTest.java | 164 ++++++++++-------- .../WalletLockStatusUtilsTest.java} | 16 +- 23 files changed, 439 insertions(+), 210 deletions(-) create mode 100644 db_upgrade_script/inji_mimoto/README.md create mode 100644 db_upgrade_script/inji_mimoto/sql/0.13.1_to_0.14.0_rollback.sql create mode 100644 db_upgrade_script/inji_mimoto/sql/0.13.1_to_0.14.0_upgrade.sql create mode 100644 db_upgrade_script/inji_mimoto/upgrade.properties create mode 100644 db_upgrade_script/inji_mimoto/upgrade.sh create mode 100644 docs/VCFormatExtension.md rename src/main/java/io/mosip/mimoto/service/{WalletLockManager.java => WalletLockService.java} (96%) rename src/main/java/io/mosip/mimoto/{service/WalletLockStatusService.java => util/WalletLockStatusUtils.java} (77%) rename src/test/java/io/mosip/mimoto/service/{WalletLockManagerTest.java => WalletLockServiceTest.java} (91%) rename src/test/java/io/mosip/mimoto/{service/WalletLockStatusServiceTest.java => util/WalletLockStatusUtilsTest.java} (81%) diff --git a/db_upgrade_script/inji_mimoto/README.md b/db_upgrade_script/inji_mimoto/README.md new file mode 100644 index 000000000..883fe3868 --- /dev/null +++ b/db_upgrade_script/inji_mimoto/README.md @@ -0,0 +1,58 @@ +# Database Upgrade & Rollback Script + +This script automates database schema upgrades and rollbacks for the project. + +## Prerequisites + +- Bash shell (Linux/macOS) +- PostgreSQL client (`psql`) +- A properties file with required DB credentials and parameters + +## Usage + +```sh +./upgrade.sh +``` + +## Properties File Format + +The properties file should contain the following keys: + +``` +SU_USER= +SU_USER_PWD= +DB_SERVERIP= +DB_PORT= +DEFAULT_DB_NAME= +DB_NAME= +CURRENT_VERSION= +UPGRADE_VERSION= +ACTION= +PRIMARY_LANGUAGE_CODE= +``` + +## Actions + +- **Upgrade:** + Set `ACTION=upgrade` to apply the upgrade SQL script. +- **Rollback:** + Set `ACTION=rollback` to apply the rollback SQL script. + +## Script Behavior + +- Loads DB credentials and parameters from the properties file. +- Terminates active connections to the target database. +- Executes the appropriate SQL script from the `sql/` directory: + - Upgrade: `sql/_to__upgrade.sql` + - Rollback: `sql/_to__rollback.sql` + +## Example + +```sh +./upgrade.sh upgrade.properties +``` + +--- + +**Note:** +Ensure the required SQL scripts exist in the `sql/` directory before running the script. \ No newline at end of file diff --git a/db_upgrade_script/inji_mimoto/sql/0.13.1_to_0.14.0_rollback.sql b/db_upgrade_script/inji_mimoto/sql/0.13.1_to_0.14.0_rollback.sql new file mode 100644 index 000000000..e69de29bb diff --git a/db_upgrade_script/inji_mimoto/sql/0.13.1_to_0.14.0_upgrade.sql b/db_upgrade_script/inji_mimoto/sql/0.13.1_to_0.14.0_upgrade.sql new file mode 100644 index 000000000..e69de29bb diff --git a/db_upgrade_script/inji_mimoto/upgrade.properties b/db_upgrade_script/inji_mimoto/upgrade.properties new file mode 100644 index 000000000..ba357784c --- /dev/null +++ b/db_upgrade_script/inji_mimoto/upgrade.properties @@ -0,0 +1,12 @@ +ACTION=upgrade +DB_NAME= +DB_SERVERIP= +DB_PORT= +SU_USER=postgres +SU_USER_PWD= +SYS_ADMIN_USER= +SYS_ADMIN_PWD= +DEFAULT_DB_NAME=postgres +DBUSER_PWD= +CURRENT_VERSION= +UPGRADE_VERSION= \ No newline at end of file diff --git a/db_upgrade_script/inji_mimoto/upgrade.sh b/db_upgrade_script/inji_mimoto/upgrade.sh new file mode 100644 index 000000000..b4f61444d --- /dev/null +++ b/db_upgrade_script/inji_mimoto/upgrade.sh @@ -0,0 +1,51 @@ +#!/bin/bash + +set -e +properties_file="$1" +echo `date "+%m/%d/%Y %H:%M:%S"` ": $properties_file" +if [ -f "$properties_file" ] +then + echo `date "+%m/%d/%Y %H:%M:%S"` ": Property file \"$properties_file\" found." + while IFS='=' read -r key value + do + key=$(echo $key | tr '.' '_') + eval ${key}=\${value} + done < "$properties_file" +else + echo `date "+%m/%d/%Y %H:%M:%S"` ": Property file not found, Pass property file name as argument." +fi + +echo "Current version: $CURRENT_VERSION" +echo "UPGRADE version: $UPGRADE_VERSION" +echo "Action: $ACTION" + +# Terminate existing connections +echo "Terminating active connections" +CONN=$(PGPASSWORD=$SU_USER_PWD psql -v ON_ERROR_STOP=1 --username=$SU_USER --host=$DB_SERVERIP --port=$DB_PORT --dbname=$DEFAULT_DB_NAME -t -c "SELECT count(pg_terminate_backend(pg_stat_activity.pid)) FROM pg_stat_activity WHERE datname = '$DB_NAME' AND pid <> pg_backend_pid()";exit;) +echo "Terminated connections" + +# Execute upgrade or rollback +if [ "$ACTION" == "upgrade" ]; then + echo "Upgrading database from $CURRENT_VERSION to $UPGRADE_VERSION" + UPGRADE_SCRIPT_FILE="sql/${CURRENT_VERSION}_to_${UPGRADE_VERSION}_upgrade.sql" + if [ -f "$UPGRADE_SCRIPT_FILE" ]; then + echo "Executing upgrade script $UPGRADE_SCRIPT_FILE" + PGPASSWORD=$SU_USER_PWD psql -v ON_ERROR_STOP=1 --username=$SU_USER --host=$DB_SERVERIP --port=$DB_PORT --dbname=$DEFAULT_DB_NAME -v primary_language_code=$PRIMARY_LANGUAGE_CODE -a -b -f $UPGRADE_SCRIPT_FILE + else + echo "Upgrade script not found, exiting." + exit 1 + fi +elif [ "$ACTION" == "rollback" ]; then + echo "Rolling back database for $CURRENT_VERSION to $UPGRADE_VERSION" + REVOKE_SCRIPT_FILE="sql/${CURRENT_VERSION}_to_${UPGRADE_VERSION}_rollback.sql" + if [ -f "$REVOKE_SCRIPT_FILE" ]; then + echo "Executing rollback script $REVOKE_SCRIPT_FILE" + PGPASSWORD=$SU_USER_PWD psql -v ON_ERROR_STOP=1 --username=$SU_USER --host=$DB_SERVERIP --port=$DB_PORT --dbname=$DEFAULT_DB_NAME -v primary_language_code=$PRIMARY_LANGUAGE_CODE -a -b -f $REVOKE_SCRIPT_FILE + else + echo "rollback script not found, exiting." + exit 1 + fi +else + echo "Unknown action: $ACTION, must be 'upgrade' or 'rollback'." + exit 1 +fi \ No newline at end of file diff --git a/docker-compose/config/mimoto-trusted-verifiers.json b/docker-compose/config/mimoto-trusted-verifiers.json index 808e899aa..b27669fdc 100644 --- a/docker-compose/config/mimoto-trusted-verifiers.json +++ b/docker-compose/config/mimoto-trusted-verifiers.json @@ -3,10 +3,10 @@ { "client_id": "https://injiverify.collab.mosip.net", "redirect_uris": [ - "https://injiverify.collab.mosip.net/redirect" + "https://injiverify.collab.mosip.net/" ], "response_uris": [ - "https://injiverify.collab.mosip.net/v1/verify/vp-direct-post" + "https://injiverify.collab.mosip.net/v1/verify/vp-submission/vp-direct-post" ] } ] diff --git a/docs/VCFormatExtension.md b/docs/VCFormatExtension.md new file mode 100644 index 000000000..83a48e404 --- /dev/null +++ b/docs/VCFormatExtension.md @@ -0,0 +1,113 @@ +# Adding Support for New VC Formats + +## Overview + +Mimoto uses a pluggable handler architecture to support multiple Verifiable Credential formats. Add new formats by implementing the `CredentialFormatHandler` interface without modifying core services. + +### Key Benefits +- ✅ **Zero Core Changes**: Add formats without touching existing services +- ✅ **Auto-Discovery**: Handlers are automatically registered via Spring +- ✅ **Format Agnostic**: Services work seamlessly across all formats + +## Architecture + +### Request Flow +```mermaid +sequenceDiagram + participant User as Client App + participant Mimoto as Mimoto BFF + participant Handler as Format Handler + participant Issuer as Credential Issuer + + + User->>Mimoto: Request Credential (format specified) + Mimoto->>Handler: Select handler by format + Handler->>Mimoto: Build Credential request for format + Mimoto->>Issuer: Request credential + Issuer-->>Mimoto: Return credential + Mimoto->>Handler: Extract claims & display properties + Handler-->>Mimoto: Processed credential data + Mimoto-->>User: Return formatted response +``` + +### Handler Architecture +```mermaid +classDiagram + class CredentialFormatHandler { + <> + +getSupportedFormat() String + +buildCredentialRequest() VCCredentialRequest + +extractCredentialClaims() Map + +loadDisplayPropertiesFromWellknown() LinkedHashMap + } + + class CredentialFormatHandlerFactory { + +getHandler(String format) CredentialFormatHandler + } + + class VcSdJwtCredentialFormatHandler { + +getSupportedFormat() String + +buildCredentialRequest() VCCredentialRequest + +extractCredentialClaims() Map + +loadDisplayPropertiesFromWellknown() LinkedHashMap + } + + class LdpVCCredentialFormatHandler { + +getSupportedFormat() String + +buildCredentialRequest() VCCredentialRequest + +extractCredentialClaims() Map + +loadDisplayPropertiesFromWellknown() LinkedHashMap + } + + CredentialFormatHandlerFactory --> CredentialFormatHandler : manages + CredentialFormatHandler <|.. VcSdJwtCredentialFormatHandler + CredentialFormatHandler <|.. LdpVCCredentialFormatHandler + ``` +## Implementation Guide + +### 1. Study Existing Handlers + +Before starting the implementation, check existing handlers implementation + +- **LDP VC Handler**: [`LdpVCCredentialFormatHandler.java`](https://github.com/mosip/mimoto/blob/release-0.19.x/src/main/java/io/mosip/mimoto/service/impl/LdpVcCredentialFormatHandler.java) +- **Handler Interface**: [`CredentialFormatHandler.java`](https://github.com/mosip/mimoto/blob/release-0.19.x/src/main/java/io/mosip/mimoto/service/CredentialFormatHandler.java) + +### 2. Implement New Handler + +Create a new handler class implementing `CredentialFormatHandler`: + +```java +@Component +@Slf4j +public class SDJWTCredentialFormatHandler implements CredentialFormatHandler { + + @Override + public String getSupportedFormat() { + return "vc+sd-jwt"; // Your format identifier + } + + // Implement remaining methods following patterns from existing handlers + // See LdpVCCredentialFormatHandler for JSON-LD format reference +} +``` + +### 3. Handler Registration + +New handler will be auto-discovered by Spring. The factory automatically injects all handlers: + +**Reference**: [`CredentialFormatHandlerFactory.java`](https://github.com/mosip/mimoto/blob/release-0.19.x/src/main/java/io/mosip/mimoto/service/CredentialFormatHandlerFactory.java) + +### 4. Update Models (if needed) + +For format-specific fields, update: +- **Request Model**: [`VCCredentialRequest.java`](https://github.com/mosip/mimoto/blob/release-0.19.x/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialRequest.java) +- **Response Model**: [`VCCredentialResponse.java`](https://github.com/mosip/mimoto/blob/release-0.19.x/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponse.java) + +### 5. Services Using Handlers + +These services automatically work with your new handler: + +| Service | Usage | Reference | +|---------|-------|-----------| +| `CredentialRequestService` | Requests credentials in your format | [Source](https://github.com/mosip/mimoto/blob/release-0.19.x/src/main/java/io/mosip/mimoto/service/CredentialRequestService.java) | +| `CredentialPDFGeneratorService` | Generates PDFs from your format | [Source](https://github.com/mosip/mimoto/blob/release-0.19.x/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java) | diff --git a/docs/WalletUnlockProcess.md b/docs/WalletUnlockProcess.md index 21a570008..a585ad168 100644 --- a/docs/WalletUnlockProcess.md +++ b/docs/WalletUnlockProcess.md @@ -23,8 +23,8 @@ actor Client participant WalletsController participant WalletService participant WalletUnlockService -participant WalletLockManager -participant WalletLockStatusService +participant WalletLockService +participant WalletLockStatusUtils participant WalletUtil participant WalletRepository @@ -43,18 +43,18 @@ participant WalletRepository WalletService->>WalletUnlockService: handleUnlock(wallet, pin) activate WalletUnlockService - WalletUnlockService->>WalletLockManager: resetTemporaryLockIfExpired(wallet) - activate WalletLockManager - Note over WalletLockManager: Checks if Wallet is temporarily locked before and that lock has expired (if retryBlockedUntil in milliseconds from Database > Current System time in milliseconds),
then it resets the failedAttemptCount and retryBlockedUntil to their defaults and sets the walletLockStatus = lock_expired - WalletLockManager-->>WalletUnlockService: Returns updated Wallet - deactivate WalletLockManager + WalletUnlockService->>WalletLockService: resetTemporaryLockIfExpired(wallet) + activate WalletLockService + Note over WalletLockService: Checks if Wallet is temporarily locked before and that lock has expired (if retryBlockedUntil in milliseconds from Database > Current System time in milliseconds),
then it resets the failedAttemptCount and retryBlockedUntil to their defaults and sets the walletLockStatus = lock_expired + WalletLockService-->>WalletUnlockService: Returns updated Wallet + deactivate WalletLockService WalletUnlockService->>WalletUnlockService: throwExceptionIfWalletIsLocked(wallet) - WalletUnlockService->>WalletLockStatusService: getErrorBasedOnWalletLockStatus(wallet) - activate WalletLockStatusService - WalletLockStatusService-->>WalletUnlockService: Returns ErrorDTO - deactivate WalletLockStatusService + WalletUnlockService->>WalletLockStatusUtils: getErrorBasedOnWalletLockStatus(wallet) + activate WalletLockStatusUtils + WalletLockStatusUtils-->>WalletUnlockService: Returns ErrorDTO + deactivate WalletLockStatusUtils alt Wallet is locked Temporarily or Permanently WalletUnlockService-->>WalletService: Throws WalletLockedException @@ -64,11 +64,11 @@ participant WalletRepository alt Successful PIN Decryption WalletUtil-->>WalletUnlockService: Returns decryptedWalletKey - WalletUnlockService->>WalletLockManager: resetLockState(wallet) - activate WalletLockManager - Note over WalletLockManager: Resets all lock counters,
retryBlockedUntil and status to default values - WalletLockManager-->>WalletUnlockService: Returns updated Wallet - deactivate WalletLockManager + WalletUnlockService->>WalletLockService: resetLockState(wallet) + activate WalletLockService + Note over WalletLockService: Resets all lock counters,
retryBlockedUntil and status to default values + WalletLockService-->>WalletUnlockService: Returns updated Wallet + deactivate WalletLockService WalletUnlockService->>WalletRepository: save(wallet) activate WalletRepository @@ -79,33 +79,33 @@ participant WalletRepository deactivate WalletUtil WalletUnlockService->>WalletUnlockService: handleFailedUnlock(wallet) - WalletUnlockService->>WalletLockManager: enforceLockCyclePolicy(wallet) - activate WalletLockManager - Note over WalletLockManager:1. Increments failedAttemptCount &
2. if currentCycleCount = 0 (means this is the first failed attempt made in all cycles), it sets currentCycleCount = 1
3. If failedAttemptCount = maxFailedAttemptsAllowedPerCycle then increments currentCycleCount
4. If currentCycleCount > maxLockCyclesAllowed then sets walletLockStatus = permanently_locked & retryBlockedUntil = null
else sets walletLockStatus = temporarily_locked & and retryBlockedUntil = Current System time (in milliseconds) + retryBlockedUntil (in milliseconds) value from config properties file
5. If failedAttemptCount = maxFailedAttemptsAllowedPerCycle - 1 & currentCycleCount = maxLockCyclesAllowed then sets
walletLockStatus = last_attempt_before_lockout - WalletLockManager-->>WalletUnlockService: Returns updated Wallet - deactivate WalletLockManager + WalletUnlockService->>WalletLockService: enforceLockCyclePolicy(wallet) + activate WalletLockService + Note over WalletLockService:1. Increments failedAttemptCount &
2. if currentCycleCount = 0 (means this is the first failed attempt made in all cycles), it sets currentCycleCount = 1
3. If failedAttemptCount = maxFailedAttemptsAllowedPerCycle then increments currentCycleCount
4. If currentCycleCount > maxLockCyclesAllowed then sets walletLockStatus = permanently_locked & retryBlockedUntil = null
else sets walletLockStatus = temporarily_locked & and retryBlockedUntil = Current System time (in milliseconds) + retryBlockedUntil (in milliseconds) value from config properties file
5. If failedAttemptCount = maxFailedAttemptsAllowedPerCycle - 1 & currentCycleCount = maxLockCyclesAllowed then sets
walletLockStatus = last_attempt_before_lockout + WalletLockService-->>WalletUnlockService: Returns updated Wallet + deactivate WalletLockService WalletUnlockService->>WalletUnlockService: throwExceptionIfLastAttemptLeftForUnlock(wallet) - WalletUnlockService->>WalletLockStatusService: getErrorBasedOnWalletLockStatus(wallet) - activate WalletLockStatusService - WalletLockStatusService-->>WalletUnlockService: Returns ErrorDTO - deactivate WalletLockStatusService + WalletUnlockService->>WalletLockStatusUtils: getErrorBasedOnWalletLockStatus(wallet) + activate WalletLockStatusUtils + WalletLockStatusUtils-->>WalletUnlockService: Returns ErrorDTO + deactivate WalletLockStatusUtils alt if errorCode is last_attempt_before_lockout WalletUnlockService-->>WalletService: Throws InvalidRequestException else otherwise - WalletUnlockService->>WalletLockManager: resetTemporaryLockIfExpired(wallet) - activate WalletLockManager - Note over WalletLockManager: Checks if Wallet is temporarily locked before and that lock has expired (if retryBlockedUntil in milliseconds from Database > Current System time in milliseconds),
then it resets the failedAttemptCount and retryBlockedUntil to their defaults and sets the walletLockStatus = lock_expired - WalletLockManager-->>WalletUnlockService: Returns updated Wallet - deactivate WalletLockManager + WalletUnlockService->>WalletLockService: resetTemporaryLockIfExpired(wallet) + activate WalletLockService + Note over WalletLockService: Checks if Wallet is temporarily locked before and that lock has expired (if retryBlockedUntil in milliseconds from Database > Current System time in milliseconds),
then it resets the failedAttemptCount and retryBlockedUntil to their defaults and sets the walletLockStatus = lock_expired + WalletLockService-->>WalletUnlockService: Returns updated Wallet + deactivate WalletLockService WalletUnlockService->>WalletUnlockService: throwExceptionIfWalletIsLocked(wallet) - WalletUnlockService->>WalletLockStatusService: getErrorBasedOnWalletLockStatus(wallet) - activate WalletLockStatusService - WalletLockStatusService-->>WalletUnlockService: Returns ErrorDTO - deactivate WalletLockStatusService + WalletUnlockService->>WalletLockStatusUtils: getErrorBasedOnWalletLockStatus(wallet) + activate WalletLockStatusUtils + WalletLockStatusUtils-->>WalletUnlockService: Returns ErrorDTO + deactivate WalletLockStatusUtils alt Wallet is locked Temporarily or Permanently WalletUnlockService-->>WalletRepository: save(wallet) activate WalletRepository diff --git a/pom.xml b/pom.xml index 28b90a6f9..3ce8445b3 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 io.mosip mimoto - 0.18.0-SNAPSHOT + 0.19.0-SNAPSHOT mimoto https://github.com/mosip/mimoto Mobile server backend supporting Inji. diff --git a/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java b/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java index 6c9bfc0d0..3e9f51d18 100644 --- a/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java +++ b/src/main/java/io/mosip/mimoto/MimotoServiceApplication.java @@ -14,6 +14,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.domain.EntityScan; import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; +import org.springframework.boot.context.properties.ConfigurationPropertiesScan; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Primary; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; @@ -36,6 +37,7 @@ }, exclude = { SecurityAutoConfiguration.class }) +@ConfigurationPropertiesScan @EntityScan(basePackages = {"io.mosip.mimoto.model", "io.mosip.kernel.keymanagerservice.entity"}) @EnableJpaRepositories(basePackages = {"io.mosip.mimoto.repository", "io.mosip.kernel.keymanagerservice.repository"}) @Slf4j diff --git a/src/main/java/io/mosip/mimoto/config/WalletPasscodeConfig.java b/src/main/java/io/mosip/mimoto/config/WalletPasscodeConfig.java index b2fa745c5..86b351bf3 100644 --- a/src/main/java/io/mosip/mimoto/config/WalletPasscodeConfig.java +++ b/src/main/java/io/mosip/mimoto/config/WalletPasscodeConfig.java @@ -10,7 +10,6 @@ @Slf4j @Getter @Setter -@Component @ConfigurationProperties(prefix = "wallet.passcode") public class WalletPasscodeConfig { private long retryBlockedUntil = 30000; diff --git a/src/main/java/io/mosip/mimoto/service/WalletLockManager.java b/src/main/java/io/mosip/mimoto/service/WalletLockService.java similarity index 96% rename from src/main/java/io/mosip/mimoto/service/WalletLockManager.java rename to src/main/java/io/mosip/mimoto/service/WalletLockService.java index d0da14f62..231178e2d 100644 --- a/src/main/java/io/mosip/mimoto/service/WalletLockManager.java +++ b/src/main/java/io/mosip/mimoto/service/WalletLockService.java @@ -5,14 +5,14 @@ import io.mosip.mimoto.model.Wallet; import io.mosip.mimoto.model.WalletMetadata; import io.mosip.mimoto.model.WalletLockStatus; -import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; -@Component -public class WalletLockManager { +@Service +public class WalletLockService { private final WalletPasscodeConfig walletPasscodeConfig; private static final int MINUTES_TO_MILLIS = 60 * 1000; - public WalletLockManager(WalletPasscodeConfig walletPasscodeConfig) { + public WalletLockService(WalletPasscodeConfig walletPasscodeConfig) { this.walletPasscodeConfig = walletPasscodeConfig; } diff --git a/src/main/java/io/mosip/mimoto/service/WalletUnlockService.java b/src/main/java/io/mosip/mimoto/service/WalletUnlockService.java index cbb38d0b7..209d8e7c8 100644 --- a/src/main/java/io/mosip/mimoto/service/WalletUnlockService.java +++ b/src/main/java/io/mosip/mimoto/service/WalletUnlockService.java @@ -7,6 +7,7 @@ import io.mosip.mimoto.exception.InvalidRequestException; import io.mosip.mimoto.model.WalletLockStatus; import io.mosip.mimoto.repository.WalletRepository; +import io.mosip.mimoto.util.WalletLockStatusUtils; import io.mosip.mimoto.util.WalletUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -15,24 +16,22 @@ @Service public class WalletUnlockService { private final WalletUtil walletUtil; - private final WalletLockManager walletLockManager; - private final WalletLockStatusService walletLockStatusService; + private final WalletLockService walletLockService; private final WalletRepository walletRepository; - public WalletUnlockService(WalletUtil walletUtil, WalletLockManager walletLockManager, WalletLockStatusService walletLockStatusService, WalletRepository walletRepository) { + public WalletUnlockService(WalletUtil walletUtil, WalletLockService walletLockService, WalletRepository walletRepository) { this.walletUtil = walletUtil; - this.walletLockManager = walletLockManager; - this.walletLockStatusService = walletLockStatusService; + this.walletLockService = walletLockService; this.walletRepository = walletRepository; } public String handleUnlock(Wallet wallet, String pin) throws InvalidRequestException { - wallet = walletLockManager.resetTemporaryLockIfExpired(wallet); + wallet = walletLockService.resetTemporaryLockIfExpired(wallet); throwExceptionIfWalletIsLocked(wallet); try { String decryptedWalletKey = walletUtil.decryptWalletKey(wallet.getWalletKey(), pin); - wallet = walletLockManager.resetLockState(wallet); + wallet = walletLockService.resetLockState(wallet); walletRepository.save(wallet); return decryptedWalletKey; } catch (InvalidRequestException ex) { @@ -44,9 +43,9 @@ public String handleUnlock(Wallet wallet, String pin) throws InvalidRequestExcep private void handleFailedUnlock(Wallet wallet) { try { - wallet = walletLockManager.enforceLockCyclePolicy(wallet); + wallet = walletLockService.enforceLockCyclePolicy(wallet); throwExceptionIfLastAttemptLeftForUnlock(wallet); - wallet = walletLockManager.resetTemporaryLockIfExpired(wallet); + wallet = walletLockService.resetTemporaryLockIfExpired(wallet); throwExceptionIfWalletIsLocked(wallet); walletRepository.save(wallet); } catch (Exception ex) { @@ -56,7 +55,7 @@ private void handleFailedUnlock(Wallet wallet) { } private void throwExceptionIfWalletIsLocked(Wallet wallet) throws WalletLockedException { - ErrorDTO errorDTO = walletLockStatusService.getErrorBasedOnWalletLockStatus(wallet); + ErrorDTO errorDTO = WalletLockStatusUtils.getErrorBasedOnWalletLockStatus(wallet); if (errorDTO != null) { String errorCode = errorDTO.getErrorCode(); @@ -67,7 +66,7 @@ private void throwExceptionIfWalletIsLocked(Wallet wallet) throws WalletLockedEx } private void throwExceptionIfLastAttemptLeftForUnlock(Wallet wallet) throws InvalidRequestException { - ErrorDTO errorDTO = walletLockStatusService.getErrorBasedOnWalletLockStatus(wallet); + ErrorDTO errorDTO = WalletLockStatusUtils.getErrorBasedOnWalletLockStatus(wallet); if (errorDTO != null) { String errorCode = errorDTO.getErrorCode(); diff --git a/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java b/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java index 4d14889c4..4a63d48fd 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java +++ b/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java @@ -127,16 +127,7 @@ public Map extractClaimsFromSdJwt(String sdJwtString) { if (credentialJwt != null) { Map jwtPayload = parseJwtPayload(credentialJwt); if (jwtPayload != null) { - // Check if 'credentialSubject' is present - if (jwtPayload.containsKey("credentialSubject")) { - Object credentialSubject = jwtPayload.get("credentialSubject"); - if (credentialSubject instanceof Map) { - claims.putAll((Map) credentialSubject); - } - } else { - // No credentialSubject, put all claims at root level - claims.putAll(jwtPayload); - } + claims.putAll(jwtPayload); } } diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java index 2dbded2d1..7d042f702 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletServiceImpl.java @@ -1,15 +1,15 @@ package io.mosip.mimoto.service.impl; -import io.mosip.mimoto.model.Wallet; import io.mosip.mimoto.dto.WalletDetailsResponseDto; import io.mosip.mimoto.dto.WalletResponseDto; import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.exception.InvalidRequestException; +import io.mosip.mimoto.model.Wallet; import io.mosip.mimoto.repository.WalletRepository; -import io.mosip.mimoto.service.WalletLockManager; +import io.mosip.mimoto.service.WalletLockService; import io.mosip.mimoto.service.WalletService; -import io.mosip.mimoto.service.WalletLockStatusService; import io.mosip.mimoto.service.WalletUnlockService; +import io.mosip.mimoto.util.WalletLockStatusUtils; import io.mosip.mimoto.util.WalletUtil; import io.mosip.mimoto.util.WalletValidator; import lombok.extern.slf4j.Slf4j; @@ -32,18 +32,16 @@ public class WalletServiceImpl implements WalletService { private final WalletUtil walletUtil; private final WalletValidator validator; private final WalletUnlockService walletUnlockService; - private final WalletLockStatusService walletStatusService; - private final WalletLockManager walletLockManager; + private final WalletLockService walletLockService; @Autowired - public WalletServiceImpl(WalletRepository repository, WalletUtil walletUtil, WalletValidator validator, WalletUnlockService walletUnlockService, WalletLockStatusService walletStatusService, WalletLockManager walletLockManager) { + public WalletServiceImpl(WalletRepository repository, WalletUtil walletUtil, WalletValidator validator, WalletUnlockService walletUnlockService, WalletLockService walletLockService) { this.repository = repository; this.walletUtil = walletUtil; this.validator = validator; this.walletUnlockService = walletUnlockService; - this.walletStatusService = walletStatusService; - this.walletLockManager = walletLockManager; + this.walletLockService = walletLockService; } @Override @@ -85,12 +83,12 @@ public List getWallets(String userId) { log.info("Retrieving wallets for user: {}", userId); return repository.findWalletByUserId(userId).stream().map(wallet -> { - wallet = walletLockManager.resetTemporaryLockIfExpired(wallet); + wallet = walletLockService.resetTemporaryLockIfExpired(wallet); repository.save(wallet); return WalletDetailsResponseDto.builder() .walletId(wallet.getId()) .walletName(wallet.getWalletMetadata().getName()) - .walletStatus(walletStatusService.getWalletLockStatus(wallet)) + .walletStatus(WalletLockStatusUtils.getWalletLockStatus(wallet)) .build(); }).toList(); } diff --git a/src/main/java/io/mosip/mimoto/util/JwtUtils.java b/src/main/java/io/mosip/mimoto/util/JwtUtils.java index 0f0263e6c..3944fa3fa 100644 --- a/src/main/java/io/mosip/mimoto/util/JwtUtils.java +++ b/src/main/java/io/mosip/mimoto/util/JwtUtils.java @@ -3,6 +3,7 @@ import com.authlete.sd.SDJWT; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; import java.nio.charset.StandardCharsets; import java.util.Base64; @@ -15,17 +16,12 @@ public class JwtUtils { private static final ObjectMapper objectMapper = new ObjectMapper(); public static Map extractJwtPayloadFromSdJwt(String sdJwtString) { - try { - SDJWT sdJwt = SDJWT.parse(sdJwtString); - String credentialJwt = sdJwt.getCredentialJwt(); - if (credentialJwt != null) { - return parseJwtPayload(credentialJwt); - } - log.warn("Credential JWT is null in parsed SD‑JWT"); - } catch (Exception e) { - log.error("Failed to extract JWT payload from SD‑JWT: {}", e.getMessage(), e); + if (StringUtils.isBlank(sdJwtString)) { + return null; + } else { + String[] elements = sdJwtString.split("~", -1); + return parseJwtPayload(elements[0]); } - return Collections.emptyMap(); } public static Map parseJwtPayload(String jwt) { diff --git a/src/main/java/io/mosip/mimoto/service/WalletLockStatusService.java b/src/main/java/io/mosip/mimoto/util/WalletLockStatusUtils.java similarity index 77% rename from src/main/java/io/mosip/mimoto/service/WalletLockStatusService.java rename to src/main/java/io/mosip/mimoto/util/WalletLockStatusUtils.java index 67745f380..d3321c148 100644 --- a/src/main/java/io/mosip/mimoto/service/WalletLockStatusService.java +++ b/src/main/java/io/mosip/mimoto/util/WalletLockStatusUtils.java @@ -1,21 +1,22 @@ -package io.mosip.mimoto.service; +package io.mosip.mimoto.util; import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.model.Wallet; import io.mosip.mimoto.model.WalletMetadata; import io.mosip.mimoto.model.WalletLockStatus; -import org.springframework.stereotype.Service; -@Service -public class WalletLockStatusService { +public final class WalletLockStatusUtils { + private WalletLockStatusUtils() { + // Prevent instantiation + } - public WalletLockStatus getWalletLockStatus(Wallet wallet) { + public static WalletLockStatus getWalletLockStatus(Wallet wallet) { return wallet.getWalletMetadata().getLockStatus(); } - public ErrorDTO getErrorBasedOnWalletLockStatus(Wallet wallet) { + public static ErrorDTO getErrorBasedOnWalletLockStatus(Wallet wallet) { WalletMetadata metadata = wallet.getWalletMetadata(); WalletLockStatus currentStatus = metadata.getLockStatus(); ErrorDTO errorDTO = null; @@ -24,14 +25,11 @@ public ErrorDTO getErrorBasedOnWalletLockStatus(Wallet wallet) { ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorMessage()); } else if (currentStatus == WalletLockStatus.TEMPORARILY_LOCKED) { errorDTO = new ErrorDTO(ErrorConstants.WALLET_TEMPORARILY_LOCKED.getErrorCode(), - ErrorConstants.WALLET_TEMPORARILY_LOCKED.getErrorMessage() - ); + ErrorConstants.WALLET_TEMPORARILY_LOCKED.getErrorMessage()); } else if (currentStatus == WalletLockStatus.LAST_ATTEMPT_BEFORE_LOCKOUT) { errorDTO = new ErrorDTO(ErrorConstants.WALLET_LAST_ATTEMPT_BEFORE_LOCKOUT.getErrorCode(), - ErrorConstants.WALLET_LAST_ATTEMPT_BEFORE_LOCKOUT.getErrorMessage() - ); + ErrorConstants.WALLET_LAST_ATTEMPT_BEFORE_LOCKOUT.getErrorMessage()); } - return errorDTO; } -} \ No newline at end of file +} diff --git a/src/main/resources/mimoto-trusted-verifiers.json b/src/main/resources/mimoto-trusted-verifiers.json index 808e899aa..b27669fdc 100644 --- a/src/main/resources/mimoto-trusted-verifiers.json +++ b/src/main/resources/mimoto-trusted-verifiers.json @@ -3,10 +3,10 @@ { "client_id": "https://injiverify.collab.mosip.net", "redirect_uris": [ - "https://injiverify.collab.mosip.net/redirect" + "https://injiverify.collab.mosip.net/" ], "response_uris": [ - "https://injiverify.collab.mosip.net/v1/verify/vp-direct-post" + "https://injiverify.collab.mosip.net/v1/verify/vp-submission/vp-direct-post" ] } ] diff --git a/src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java b/src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java index 250d7ba6c..be4238fe8 100644 --- a/src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java +++ b/src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java @@ -62,10 +62,8 @@ void extractCredentialClaimsWithStringCredentialShouldReturnClaims() { // Mock JWT payload with credentialSubject Map jwtPayload = new HashMap<>(); - Map credentialSubject = new HashMap<>(); - credentialSubject.put("name", "John Doe"); - credentialSubject.put("admin", true); - jwtPayload.put("credentialSubject", credentialSubject); + jwtPayload.put("name", "John Doe"); + jwtPayload.put("admin", true); jwtPayload.put("iss", "https://example.com"); jwtPayload.put("sub", "1234567890"); jwtPayload.put("iat", 1516239022); diff --git a/src/test/java/io/mosip/mimoto/service/WalletLockManagerTest.java b/src/test/java/io/mosip/mimoto/service/WalletLockServiceTest.java similarity index 91% rename from src/test/java/io/mosip/mimoto/service/WalletLockManagerTest.java rename to src/test/java/io/mosip/mimoto/service/WalletLockServiceTest.java index aa22dca99..9e61ea563 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletLockManagerTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletLockServiceTest.java @@ -20,12 +20,12 @@ import static org.junit.jupiter.api.Assertions.*; @RunWith(SpringRunner.class) -@ContextConfiguration(classes = {WalletPasscodeConfigTest.class, WalletLockManager.class}) +@ContextConfiguration(classes = {WalletPasscodeConfigTest.class, WalletLockService.class}) @TestPropertySource(locations = "classpath:application-test.properties") -public class WalletLockManagerTest { +public class WalletLockServiceTest { @Autowired - private WalletLockManager walletLockManager; + private WalletLockService walletLockService; @Autowired private WalletPasscodeConfig walletPasscodeConfig; @@ -53,7 +53,7 @@ public void enforceLockCyclePolicyShouldTemporarilyLockWalletOnInvalidLastAttemp wallet.getWalletMetadata().getPasscodeControl().setFailedAttemptCount(4); wallet.getWalletMetadata().getPasscodeControl().setCurrentCycleCount(1); - Wallet updatedWallet = walletLockManager.enforceLockCyclePolicy(wallet); + Wallet updatedWallet = walletLockService.enforceLockCyclePolicy(wallet); assertEquals(WalletLockStatus.TEMPORARILY_LOCKED, updatedWallet.getWalletMetadata().getLockStatus()); assertNotNull(updatedWallet.getWalletMetadata().getPasscodeControl().getRetryBlockedUntil()); @@ -65,7 +65,7 @@ public void enforceLockCyclePolicyShouldPermanentlyLockWalletOnInvalidLastAttemp wallet.getWalletMetadata().getPasscodeControl().setFailedAttemptCount(4); wallet.getWalletMetadata().getPasscodeControl().setCurrentCycleCount(3); - Wallet updatedWallet = walletLockManager.enforceLockCyclePolicy(wallet); + Wallet updatedWallet = walletLockService.enforceLockCyclePolicy(wallet); assertEquals(WalletLockStatus.PERMANENTLY_LOCKED, updatedWallet.getWalletMetadata().getLockStatus()); assertNull(updatedWallet.getWalletMetadata().getPasscodeControl().getRetryBlockedUntil()); @@ -76,7 +76,7 @@ public void enforceLockCyclePolicyShouldSetStatusToLastAttemptBeforeLockoutOnInv wallet.getWalletMetadata().getPasscodeControl().setFailedAttemptCount(3); wallet.getWalletMetadata().getPasscodeControl().setCurrentCycleCount(3); - Wallet updatedWallet = walletLockManager.enforceLockCyclePolicy(wallet); + Wallet updatedWallet = walletLockService.enforceLockCyclePolicy(wallet); assertEquals(WalletLockStatus.LAST_ATTEMPT_BEFORE_LOCKOUT, updatedWallet.getWalletMetadata().getLockStatus()); assertNull(updatedWallet.getWalletMetadata().getPasscodeControl().getRetryBlockedUntil()); @@ -87,7 +87,7 @@ public void testResetTemporaryLockIfLockIsExpired() { wallet.getWalletMetadata().setLockStatus(WalletLockStatus.TEMPORARILY_LOCKED); wallet.getWalletMetadata().getPasscodeControl().setRetryBlockedUntil(System.currentTimeMillis() - 1000); - Wallet updatedWallet = walletLockManager.resetTemporaryLockIfExpired(wallet); + Wallet updatedWallet = walletLockService.resetTemporaryLockIfExpired(wallet); assertEquals(WalletLockStatus.LOCK_EXPIRED, updatedWallet.getWalletMetadata().getLockStatus()); assertEquals(0, updatedWallet.getWalletMetadata().getPasscodeControl().getFailedAttemptCount()); @@ -99,7 +99,7 @@ public void testResetTemporaryLockIfLockIsNotExpired() { wallet.getWalletMetadata().setLockStatus(WalletLockStatus.TEMPORARILY_LOCKED); wallet.getWalletMetadata().getPasscodeControl().setRetryBlockedUntil(System.currentTimeMillis() + 1000); - Wallet updatedWallet = walletLockManager.resetTemporaryLockIfExpired(wallet); + Wallet updatedWallet = walletLockService.resetTemporaryLockIfExpired(wallet); assertEquals(WalletLockStatus.TEMPORARILY_LOCKED, updatedWallet.getWalletMetadata().getLockStatus()); assertNotNull(updatedWallet.getWalletMetadata().getPasscodeControl().getRetryBlockedUntil()); @@ -113,7 +113,7 @@ public void testResetLockState() { wallet.getWalletMetadata().getPasscodeControl().setCurrentCycleCount(2); wallet.getWalletMetadata().setLockStatus(WalletLockStatus.TEMPORARILY_LOCKED); - Wallet updatedWallet = walletLockManager.resetLockState(wallet); + Wallet updatedWallet = walletLockService.resetLockState(wallet); assertEquals(0, updatedWallet.getWalletMetadata().getPasscodeControl().getFailedAttemptCount()); assertEquals(0, updatedWallet.getWalletMetadata().getPasscodeControl().getCurrentCycleCount()); diff --git a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java index 30018f4dd..028926115 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletServiceTest.java @@ -13,11 +13,13 @@ import io.mosip.mimoto.repository.WalletRepository; import io.mosip.mimoto.service.impl.WalletServiceImpl; import io.mosip.mimoto.util.TestUtilities; +import io.mosip.mimoto.util.WalletLockStatusUtils; import io.mosip.mimoto.util.WalletUtil; import io.mosip.mimoto.util.WalletValidator; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.MockedStatic; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.context.SpringBootTest; @@ -49,10 +51,7 @@ public class WalletServiceTest { private WalletUnlockService walletUnlockService; @MockBean - private WalletLockStatusService walletStatusService; - - @MockBean - private WalletLockManager walletLockManager; + private WalletLockService walletLockService; @Autowired private WalletServiceImpl walletService; @@ -289,22 +288,25 @@ public void shouldReturnListOfWalletResponseDTOsForGivenUserId() { List mockWallets = List.of(wallet1, wallet2); - when(walletLockManager.resetTemporaryLockIfExpired(wallet1)).thenReturn(wallet1); - when(walletLockManager.resetTemporaryLockIfExpired(wallet2)).thenReturn(wallet2); - when(walletStatusService.getWalletLockStatus(wallet1)).thenReturn(WalletLockStatus.TEMPORARILY_LOCKED); - when(walletStatusService.getWalletLockStatus(wallet2)).thenReturn(null); + when(walletLockService.resetTemporaryLockIfExpired(wallet1)).thenReturn(wallet1); + when(walletLockService.resetTemporaryLockIfExpired(wallet2)).thenReturn(wallet2); when(walletRepository.findWalletByUserId(userId)).thenReturn(mockWallets); - List result = walletService.getWallets(userId); + try (MockedStatic mockedStatic = mockStatic(WalletLockStatusUtils.class)) { + mockedStatic.when(() -> WalletLockStatusUtils.getWalletLockStatus(wallet1)).thenReturn(WalletLockStatus.TEMPORARILY_LOCKED); + mockedStatic.when(() -> WalletLockStatusUtils.getWalletLockStatus(wallet2)).thenReturn(null); - verify(walletRepository).findWalletByUserId(userId); - assertEquals(mockWallets.size(), result.size()); - for (int i = 0; i < mockWallets.size(); i++) { - Wallet expectedWallet = mockWallets.get(i); + List result = walletService.getWallets(userId); + + verify(walletRepository).findWalletByUserId(userId); + assertEquals(mockWallets.size(), result.size()); + for (int i = 0; i < mockWallets.size(); i++) { + Wallet expectedWallet = mockWallets.get(i); - assertEquals(expectedWallet.getId(), result.get(i).getWalletId()); - assertEquals(expectedWallet.getWalletMetadata().getName(), result.get(i).getWalletName()); - assertEquals(expectedWallet.getWalletMetadata().getLockStatus(), result.get(i).getWalletStatus()); + assertEquals(expectedWallet.getId(), result.get(i).getWalletId()); + assertEquals(expectedWallet.getWalletMetadata().getName(), result.get(i).getWalletName()); + assertEquals(expectedWallet.getWalletMetadata().getLockStatus(), result.get(i).getWalletStatus()); + } } } diff --git a/src/test/java/io/mosip/mimoto/service/WalletUnlockServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletUnlockServiceTest.java index a8e488a99..8f46f3c3f 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletUnlockServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletUnlockServiceTest.java @@ -10,10 +10,11 @@ import io.mosip.mimoto.exception.WalletLockedException; import io.mosip.mimoto.repository.WalletRepository; import io.mosip.mimoto.util.TestUtilities; +import io.mosip.mimoto.util.WalletLockStatusUtils; import io.mosip.mimoto.util.WalletUtil; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.*; import org.junit.runner.RunWith; +import org.mockito.MockedStatic; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; @@ -35,10 +36,7 @@ class WalletUnlockServiceTest { private WalletUtil walletUtil; @MockBean - private WalletLockManager walletLockManager; - - @MockBean - private WalletLockStatusService walletLockStatusService; + private WalletLockService walletLockService; @MockBean private WalletRepository walletRepository; @@ -68,108 +66,124 @@ void setUp() { @Test void shouldUnlockWalletSuccessfullyAndReturnDecryptedWalletKeyWhenValidPinIsProvided() throws InvalidRequestException { - when(walletLockManager.resetTemporaryLockIfExpired(wallet)).thenReturn(wallet); - when(walletLockStatusService.getErrorBasedOnWalletLockStatus(wallet)).thenReturn(null); + when(walletLockService.resetTemporaryLockIfExpired(wallet)).thenReturn(wallet); when(walletUtil.decryptWalletKey(encryptedWalletKey, walletPin)).thenReturn(decryptedWalletKey); - String result = walletUnlockService.handleUnlock(wallet, walletPin); + try (MockedStatic mockedStatic = mockStatic(WalletLockStatusUtils.class)) { + mockedStatic.when(() -> WalletLockStatusUtils.getErrorBasedOnWalletLockStatus(wallet)).thenReturn(null); + + String result = walletUnlockService.handleUnlock(wallet, walletPin); - assertEquals(decryptedWalletKey, result); - verify(walletLockStatusService, times(1)).getErrorBasedOnWalletLockStatus(wallet); - verify(walletUtil).decryptWalletKey(encryptedWalletKey, walletPin); - verify(walletLockManager).resetTemporaryLockIfExpired(wallet); - verify(walletLockManager).resetLockState(wallet); + assertEquals(decryptedWalletKey, result); + mockedStatic.verify(() -> WalletLockStatusUtils.getErrorBasedOnWalletLockStatus(wallet), times(1)); + verify(walletUtil).decryptWalletKey(encryptedWalletKey, walletPin); + verify(walletLockService).resetTemporaryLockIfExpired(wallet); + verify(walletLockService).resetLockState(wallet); + } } @Test void shouldThrowExceptionAndHandleUnlockFailureWhenInvalidPinIsProvided() throws InvalidRequestException { String invalidPin = "12345678"; - when(walletLockManager.resetTemporaryLockIfExpired(wallet)).thenReturn(wallet).thenReturn(wallet); - when(walletLockManager.enforceLockCyclePolicy(wallet)).thenReturn(wallet); - when(walletLockStatusService.getErrorBasedOnWalletLockStatus(wallet)).thenReturn(null); + when(walletLockService.resetTemporaryLockIfExpired(wallet)).thenReturn(wallet).thenReturn(wallet); + when(walletLockService.enforceLockCyclePolicy(wallet)).thenReturn(wallet); when(walletUtil.decryptWalletKey(encryptedWalletKey, invalidPin)) .thenThrow(new InvalidRequestException(ErrorConstants.INVALID_PIN.getErrorCode(), "Invalid PIN")); - InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> - walletUnlockService.handleUnlock(wallet, invalidPin)); + try (MockedStatic mockedStatic = mockStatic(WalletLockStatusUtils.class)) { + mockedStatic.when(() -> WalletLockStatusUtils.getErrorBasedOnWalletLockStatus(wallet)).thenReturn(null); - assertEquals(ErrorConstants.INVALID_PIN.getErrorCode(), exception.getErrorCode()); - assertEquals("invalid_pin --> Invalid PIN", exception.getMessage()); + InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> + walletUnlockService.handleUnlock(wallet, invalidPin)); - verify(walletUtil).decryptWalletKey(encryptedWalletKey, invalidPin); - verify(walletLockManager).enforceLockCyclePolicy(wallet); - verify(walletLockStatusService, times(3)).getErrorBasedOnWalletLockStatus(wallet); - verify(walletLockManager,times(2)).resetTemporaryLockIfExpired(wallet); - verify(walletLockManager, never()).resetLockState(wallet); - verify(walletRepository, times(1)).save(wallet); + assertEquals(ErrorConstants.INVALID_PIN.getErrorCode(), exception.getErrorCode()); + assertEquals("invalid_pin --> Invalid PIN", exception.getMessage()); + + verify(walletUtil).decryptWalletKey(encryptedWalletKey, invalidPin); + verify(walletLockService).enforceLockCyclePolicy(wallet); + mockedStatic.verify(() -> WalletLockStatusUtils.getErrorBasedOnWalletLockStatus(wallet), times(3)); + verify(walletLockService, times(2)).resetTemporaryLockIfExpired(wallet); + verify(walletLockService, never()).resetLockState(wallet); + verify(walletRepository, times(1)).save(wallet); + } } @Test void shouldThrowExceptionWhenWalletIsLockedPermanentlyAfterValidatingInvalidPin() throws InvalidRequestException { String invalidPin = "12345678"; - when(walletLockManager.resetTemporaryLockIfExpired(wallet)).thenReturn(wallet).thenReturn(wallet); + when(walletLockService.resetTemporaryLockIfExpired(wallet)).thenReturn(wallet).thenReturn(wallet); when(walletUtil.decryptWalletKey(encryptedWalletKey, invalidPin)) .thenThrow(new InvalidRequestException(ErrorConstants.INVALID_PIN.getErrorCode(), "Invalid PIN")); - when(walletLockManager.enforceLockCyclePolicy(wallet)).thenReturn(wallet); - when(walletLockStatusService.getErrorBasedOnWalletLockStatus(wallet)) - .thenReturn(null) - .thenReturn(null) - .thenReturn(new ErrorDTO(ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorCode(), ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorMessage())); - String expectedErrorMessage = ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorCode() + " --> " + ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorMessage(); - - WalletLockedException exception = assertThrows(WalletLockedException.class, () -> - walletUnlockService.handleUnlock(wallet, invalidPin)); - - assertEquals(ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorCode(), exception.getErrorCode()); - assertEquals(expectedErrorMessage, exception.getMessage()); - - verify(walletUtil).decryptWalletKey(encryptedWalletKey, invalidPin); - verify(walletLockManager).enforceLockCyclePolicy(wallet); - verify(walletLockManager,times(2)).resetTemporaryLockIfExpired(wallet); - verify(walletLockStatusService, times(3)).getErrorBasedOnWalletLockStatus(wallet); - verify(walletLockManager, never()).resetLockState(wallet); - verify(walletRepository, times(1)).save(wallet); + when(walletLockService.enforceLockCyclePolicy(wallet)).thenReturn(wallet); + + try (MockedStatic mockedStatic = mockStatic(WalletLockStatusUtils.class)) { + mockedStatic.when(() -> WalletLockStatusUtils.getErrorBasedOnWalletLockStatus(wallet)) + .thenReturn(null) + .thenReturn(null) + .thenReturn(new ErrorDTO(ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorCode(), ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorMessage())); + String expectedErrorMessage = ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorCode() + " --> " + ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorMessage(); + + WalletLockedException exception = assertThrows(WalletLockedException.class, () -> + walletUnlockService.handleUnlock(wallet, invalidPin)); + + assertEquals(ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorCode(), exception.getErrorCode()); + assertEquals(expectedErrorMessage, exception.getMessage()); + + verify(walletUtil).decryptWalletKey(encryptedWalletKey, invalidPin); + verify(walletLockService).enforceLockCyclePolicy(wallet); + verify(walletLockService, times(2)).resetTemporaryLockIfExpired(wallet); + mockedStatic.verify(() -> WalletLockStatusUtils.getErrorBasedOnWalletLockStatus(wallet), times(3)); + verify(walletLockService, never()).resetLockState(wallet); + verify(walletRepository, times(1)).save(wallet); + } } @Test void shouldThrowExceptionWhenOnlyOneAttemptIsLeftBeforePermanentLockoutAfterValidatingInvalidPin() throws InvalidRequestException { String invalidPin = "12345678"; - when(walletLockManager.resetTemporaryLockIfExpired(wallet)).thenReturn(wallet).thenReturn(wallet); + when(walletLockService.resetTemporaryLockIfExpired(wallet)).thenReturn(wallet).thenReturn(wallet); when(walletUtil.decryptWalletKey(encryptedWalletKey, invalidPin)) .thenThrow(new InvalidRequestException(ErrorConstants.INVALID_PIN.getErrorCode(), "Invalid PIN")); - when(walletLockStatusService.getErrorBasedOnWalletLockStatus(wallet)) - .thenReturn(null) - .thenReturn(new ErrorDTO(ErrorConstants.WALLET_LAST_ATTEMPT_BEFORE_LOCKOUT.getErrorCode(), ErrorConstants.WALLET_LAST_ATTEMPT_BEFORE_LOCKOUT.getErrorMessage())); - when(walletLockManager.enforceLockCyclePolicy(wallet)).thenReturn(wallet); - String expectedErrorMessage = ErrorConstants.WALLET_LAST_ATTEMPT_BEFORE_LOCKOUT.getErrorCode() + " --> " + ErrorConstants.WALLET_LAST_ATTEMPT_BEFORE_LOCKOUT.getErrorMessage(); - - InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> - walletUnlockService.handleUnlock(wallet, invalidPin)); - - assertEquals(ErrorConstants.WALLET_LAST_ATTEMPT_BEFORE_LOCKOUT.getErrorCode(), exception.getErrorCode()); - assertEquals(expectedErrorMessage, exception.getMessage()); - - verify(walletUtil).decryptWalletKey(encryptedWalletKey, invalidPin); - verify(walletLockManager).enforceLockCyclePolicy(wallet); - verify(walletLockManager, times(1)).resetTemporaryLockIfExpired(wallet); - verify(walletLockStatusService, times(2)).getErrorBasedOnWalletLockStatus(wallet); - verify(walletLockManager, never()).resetLockState(wallet); - verify(walletRepository, times(1)).save(wallet); + when(walletLockService.enforceLockCyclePolicy(wallet)).thenReturn(wallet); + + try (MockedStatic mockedStatic = mockStatic(WalletLockStatusUtils.class)) { + mockedStatic.when(() -> WalletLockStatusUtils.getErrorBasedOnWalletLockStatus(wallet)) + .thenReturn(null) + .thenReturn(new ErrorDTO(ErrorConstants.WALLET_LAST_ATTEMPT_BEFORE_LOCKOUT.getErrorCode(), ErrorConstants.WALLET_LAST_ATTEMPT_BEFORE_LOCKOUT.getErrorMessage())); + String expectedErrorMessage = ErrorConstants.WALLET_LAST_ATTEMPT_BEFORE_LOCKOUT.getErrorCode() + " --> " + ErrorConstants.WALLET_LAST_ATTEMPT_BEFORE_LOCKOUT.getErrorMessage(); + + InvalidRequestException exception = assertThrows(InvalidRequestException.class, () -> + walletUnlockService.handleUnlock(wallet, invalidPin)); + + assertEquals(ErrorConstants.WALLET_LAST_ATTEMPT_BEFORE_LOCKOUT.getErrorCode(), exception.getErrorCode()); + assertEquals(expectedErrorMessage, exception.getMessage()); + + verify(walletUtil).decryptWalletKey(encryptedWalletKey, invalidPin); + verify(walletLockService).enforceLockCyclePolicy(wallet); + verify(walletLockService, times(1)).resetTemporaryLockIfExpired(wallet); + mockedStatic.verify(() -> WalletLockStatusUtils.getErrorBasedOnWalletLockStatus(wallet), times(2)); + verify(walletLockService, never()).resetLockState(wallet); + verify(walletRepository, times(1)).save(wallet); + } } @Test void shouldThrowExceptionImmediatelyWhenUnlockingWalletIsAlreadyLockedPermanently() throws InvalidRequestException { - when(walletLockManager.resetTemporaryLockIfExpired(wallet)).thenReturn(wallet); - when(walletLockStatusService.getErrorBasedOnWalletLockStatus(wallet)).thenReturn(new ErrorDTO(ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorCode(), ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorMessage())); - String expectedErrorMessage = ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorCode() + " --> " + ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorMessage(); + when(walletLockService.resetTemporaryLockIfExpired(wallet)).thenReturn(wallet); + + try (MockedStatic mockedStatic = mockStatic(WalletLockStatusUtils.class)) { + mockedStatic.when(() -> WalletLockStatusUtils.getErrorBasedOnWalletLockStatus(wallet)) + .thenReturn(new ErrorDTO(ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorCode(), ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorMessage())); + String expectedErrorMessage = ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorCode() + " --> " + ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorMessage(); - WalletLockedException exception = assertThrows(WalletLockedException.class, () -> - walletUnlockService.handleUnlock(wallet, walletPin)); + WalletLockedException exception = assertThrows(WalletLockedException.class, () -> + walletUnlockService.handleUnlock(wallet, walletPin)); - assertEquals(ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorCode(), exception.getErrorCode()); - assertEquals(expectedErrorMessage, exception.getMessage()); + assertEquals(ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorCode(), exception.getErrorCode()); + assertEquals(expectedErrorMessage, exception.getMessage()); - verify(walletLockManager,times(1)).resetTemporaryLockIfExpired(wallet); - verify(walletLockStatusService, times(1)).getErrorBasedOnWalletLockStatus(wallet); + verify(walletLockService, times(1)).resetTemporaryLockIfExpired(wallet); + mockedStatic.verify(() -> WalletLockStatusUtils.getErrorBasedOnWalletLockStatus(wallet), times(1)); + } } } \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/WalletLockStatusServiceTest.java b/src/test/java/io/mosip/mimoto/util/WalletLockStatusUtilsTest.java similarity index 81% rename from src/test/java/io/mosip/mimoto/service/WalletLockStatusServiceTest.java rename to src/test/java/io/mosip/mimoto/util/WalletLockStatusUtilsTest.java index bda0debc2..a6d37ab6f 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletLockStatusServiceTest.java +++ b/src/test/java/io/mosip/mimoto/util/WalletLockStatusUtilsTest.java @@ -1,12 +1,11 @@ -package io.mosip.mimoto.service; +package io.mosip.mimoto.util; import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.model.PasscodeControl; import io.mosip.mimoto.model.Wallet; -import io.mosip.mimoto.model.WalletMetadata; import io.mosip.mimoto.model.WalletLockStatus; -import io.mosip.mimoto.util.TestUtilities; +import io.mosip.mimoto.model.WalletMetadata; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -17,9 +16,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals; @RunWith(SpringRunner.class) -public class WalletLockStatusServiceTest { +public class WalletLockStatusUtilsTest { - private final WalletLockStatusService walletStatusService = new WalletLockStatusService(); private Wallet wallet; @Before @@ -34,7 +32,7 @@ public void setUp() { public void testGetWalletStatusShouldReturnWalletStatus() { wallet.getWalletMetadata().setLockStatus(WalletLockStatus.TEMPORARILY_LOCKED); - WalletLockStatus status = walletStatusService.getWalletLockStatus(wallet); + WalletLockStatus status = WalletLockStatusUtils.getWalletLockStatus(wallet); assertEquals(WalletLockStatus.TEMPORARILY_LOCKED, status); } @@ -43,7 +41,7 @@ public void testGetWalletStatusShouldReturnWalletStatus() { public void testGetErrorBasedOnWalletLockStatusShouldReturnErrorObjForPermanentlyLockedWallet() { wallet.getWalletMetadata().setLockStatus(WalletLockStatus.PERMANENTLY_LOCKED); - ErrorDTO errorDTO = walletStatusService.getErrorBasedOnWalletLockStatus(wallet); + ErrorDTO errorDTO = WalletLockStatusUtils.getErrorBasedOnWalletLockStatus(wallet); assertEquals(ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorCode(), errorDTO.getErrorCode()); assertEquals(ErrorConstants.WALLET_PERMANENTLY_LOCKED.getErrorMessage(), errorDTO.getErrorMessage()); @@ -53,7 +51,7 @@ public void testGetErrorBasedOnWalletLockStatusShouldReturnErrorObjForPermanentl public void testGetErrorBasedOnWalletLockStatusShouldReturnErrorObjForTemporarilyLockedWallet() { wallet.getWalletMetadata().setLockStatus(WalletLockStatus.TEMPORARILY_LOCKED); - ErrorDTO errorDTO = walletStatusService.getErrorBasedOnWalletLockStatus(wallet); + ErrorDTO errorDTO = WalletLockStatusUtils.getErrorBasedOnWalletLockStatus(wallet); assertEquals(ErrorConstants.WALLET_TEMPORARILY_LOCKED.getErrorCode(), errorDTO.getErrorCode()); assertEquals(ErrorConstants.WALLET_TEMPORARILY_LOCKED.getErrorMessage(), errorDTO.getErrorMessage()); @@ -63,7 +61,7 @@ public void testGetErrorBasedOnWalletLockStatusShouldReturnErrorObjForTemporaril public void testGetErrorBasedOnWalletLockStatusShouldReturnErrorObjWhenOnlyOneAttemptLeftBeforePermanentLockout() { wallet.getWalletMetadata().setLockStatus(WalletLockStatus.LAST_ATTEMPT_BEFORE_LOCKOUT); - ErrorDTO errorDTO = walletStatusService.getErrorBasedOnWalletLockStatus(wallet); + ErrorDTO errorDTO = WalletLockStatusUtils.getErrorBasedOnWalletLockStatus(wallet); assertEquals(ErrorConstants.WALLET_LAST_ATTEMPT_BEFORE_LOCKOUT.getErrorCode(), errorDTO.getErrorCode()); assertEquals(ErrorConstants.WALLET_LAST_ATTEMPT_BEFORE_LOCKOUT.getErrorMessage(), errorDTO.getErrorMessage()); From ae2c0d9745a6a539fbef00d76c27eeae611946c2 Mon Sep 17 00:00:00 2001 From: Nitin Hegde <165893206+hegdenitin@users.noreply.github.com> Date: Fri, 22 Aug 2025 16:40:53 +0530 Subject: [PATCH 757/860] MOSIP-42665 Unlock with temporarily lock scenario automated (#845) Signed-off-by: Nitin Hegde --- .../PostWithPathParamsAndCookie.java | 58 ++++-- .../mimoto/utils/MimotoConfigManager.java | 4 + .../UnlockWalletForTemporarilyLock.hbs | 6 + .../UnlockWalletForTemporarilyLock.yml | 18 ++ .../UnlockWalletForTemporarilyLockResult.hbs | 4 + api-test/testNgXmlFiles/mimotoSuite.xml | 183 +++++++++--------- 6 files changed, 171 insertions(+), 102 deletions(-) create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWalletForTemporarilyLock/UnlockWalletForTemporarilyLock.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWalletForTemporarilyLock/UnlockWalletForTemporarilyLock.yml create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWalletForTemporarilyLock/UnlockWalletForTemporarilyLockResult.hbs diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithPathParamsAndCookie.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithPathParamsAndCookie.java index 924436c66..49789864c 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithPathParamsAndCookie.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithPathParamsAndCookie.java @@ -35,6 +35,7 @@ public class PostWithPathParamsAndCookie extends MimotoUtil implements ITest { private static final Logger logger = Logger.getLogger(PostWithPathParamsAndCookie.class); protected String testCaseName = ""; public String pathParams = null; + Response response = null; @BeforeClass public static void setLogLevel() { @@ -54,7 +55,7 @@ public String getTestName() { /** * Data provider class provides test case list - * + * * @return object of data provider */ @DataProvider(name = "testcaselist") @@ -67,7 +68,7 @@ public Object[] getTestCaseList(ITestContext context) { /** * Test method for OTP Generation execution - * + * * @param objTestParameters * @param testScenario * @param testcaseName @@ -75,35 +76,62 @@ public Object[] getTestCaseList(ITestContext context) { * @throws AdminTestException */ @Test(dataProvider = "testcaselist") - public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException, SecurityXSSException { + public void test(TestCaseDTO testCaseDTO) + throws AuthenticationTestException, AdminTestException, SecurityXSSException { + testCaseName = testCaseDTO.getTestCaseName(); testCaseDTO = MimotoUtil.isTestCaseValidForTheExecution(testCaseDTO); - + if (HealthChecker.signalTerminateExecution) { throw new SkipException( - GlobalConstants.TARGET_ENV_HEALTH_CHECK_FAILED + HealthChecker.healthCheckFailureMapS); + GlobalConstants.TARGET_ENV_HEALTH_CHECK_FAILED + HealthChecker.healthCheckFailureMapS + ); } - String inputJson = getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()); inputJson = MimotoUtil.inputstringKeyWordHandeler(inputJson, testCaseName); - - Response response = postWithPathParamsBodyAndCookie(ApplnURI + testCaseDTO.getEndPoint(), inputJson, COOKIENAME, - testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), pathParams); + + if (testCaseName.equals("Mimoto_UnlockWalletForTemporarilyLock_TemporaryLocker_IncorrectWalletPin_Neg")) { + for (int i = 0; i < MimotoConfigManager.getMaxFailedAttemptsAllowedPerCycle(); i++) { + response = postWithPathParamsBodyAndCookie( + ApplnURI + testCaseDTO.getEndPoint(), + inputJson, + COOKIENAME, + testCaseDTO.getRole(), + testCaseDTO.getTestCaseName(), + pathParams + ); + } + } else { + response = postWithPathParamsBodyAndCookie( + ApplnURI + testCaseDTO.getEndPoint(), + inputJson, + COOKIENAME, + testCaseDTO.getRole(), + testCaseDTO.getTestCaseName(), + pathParams + ); + } Map> ouputValid = OutputValidationUtil.doJsonOutputValidation( - response.asString(), getJsonFromTemplate(testCaseDTO.getOutput(), testCaseDTO.getOutputTemplate()), - testCaseDTO, response.getStatusCode()); + response.asString(), + getJsonFromTemplate(testCaseDTO.getOutput(), testCaseDTO.getOutputTemplate()), + testCaseDTO, + response.getStatusCode() + ); + Reporter.log(ReportUtil.getOutputValidationReport(ouputValid)); - if (!OutputValidationUtil.publishOutputResult(ouputValid)) + if (!OutputValidationUtil.publishOutputResult(ouputValid)) { throw new AdminTestException("Failed at output validation"); - + } } + + /** * The method ser current test name to result - * + * * @param result */ @AfterMethod(alwaysRun = true) @@ -121,4 +149,4 @@ public void setResultTestName(ITestResult result) { } } -} +} \ No newline at end of file diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java index a3b9ddb5d..f5c9d58c4 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java @@ -36,6 +36,10 @@ public static void init() { public static String getSunbirdBaseURL() { return MimotoUtil.getValueFromMimotoActuator("overrides", "mosip.sunbird.url"); } + + public static int getMaxFailedAttemptsAllowedPerCycle() { + return Integer.parseInt(MimotoUtil.getValueFromMimotoActuator("https://github.com/mosip/inji-config/mimoto-default.properties", "wallet.passcode.maxFailedAttemptsAllowedPerCycle")); + } public static String getEsignetBaseUrl() { String esignetBaseUrl = null; diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWalletForTemporarilyLock/UnlockWalletForTemporarilyLock.hbs b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWalletForTemporarilyLock/UnlockWalletForTemporarilyLock.hbs new file mode 100644 index 000000000..59db2a6ff --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWalletForTemporarilyLock/UnlockWalletForTemporarilyLock.hbs @@ -0,0 +1,6 @@ +{ + "cookie": "{{cookie}}", + "cookieName": "{{cookieName}}", + "walletId": "{{walletId}}", + "walletPin": "{{walletPin}}" +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWalletForTemporarilyLock/UnlockWalletForTemporarilyLock.yml b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWalletForTemporarilyLock/UnlockWalletForTemporarilyLock.yml new file mode 100644 index 000000000..c0aefb386 --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWalletForTemporarilyLock/UnlockWalletForTemporarilyLock.yml @@ -0,0 +1,18 @@ +UnlockWalletForTemporarilyLock: + Mimoto_UnlockWalletForTemporarilyLock_TemporaryLocker_IncorrectWalletPin_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/unlock + description: Unlock the wallet with incorrect wallet Pin till wallet gets temporarily locks + uniqueIdentifier: TC_Mimoto_UnlockWalletForTemporarilyLock_01 + role: userDefinedCookie + restMethod: post + inputTemplate: mimoto/LoginFlow/Wallet/UnlockWalletForTemporarilyLock/UnlockWalletForTemporarilyLock + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "walletPin": "876532" +}' + output: '{ + "errorCode": "temporarily_locked" +}' \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWalletForTemporarilyLock/UnlockWalletForTemporarilyLockResult.hbs b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWalletForTemporarilyLock/UnlockWalletForTemporarilyLockResult.hbs new file mode 100644 index 000000000..8a296140c --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWalletForTemporarilyLock/UnlockWalletForTemporarilyLockResult.hbs @@ -0,0 +1,4 @@ +{ + "walletName": "{{walletName}}", + "walletId": "{{walletId}}" +} \ No newline at end of file diff --git a/api-test/testNgXmlFiles/mimotoSuite.xml b/api-test/testNgXmlFiles/mimotoSuite.xml index 55169bf73..6a6e5dcd9 100644 --- a/api-test/testNgXmlFiles/mimotoSuite.xml +++ b/api-test/testNgXmlFiles/mimotoSuite.xml @@ -1,35 +1,35 @@ - - - + + value="mimoto/SunBirdR/CreatePolicySunBirdR/CreatePolicySunBirdR.yml" /> + name="io.mosip.testrig.apirig.mimoto.testscripts.SimplePostForAutoGenId" /> + value="mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.yml" /> + name="io.mosip.testrig.apirig.mimoto.testscripts.GetWithParam" /> + value="mimoto/SunBirdR/SearchPolicySunBirdR/SearchPolicySunBirdR.yml" /> @@ -37,46 +37,46 @@ + value="mimoto/OAuthDetailsRequest/OAuthDetailsRequest.yml" /> + name="io.mosip.testrig.apirig.mimoto.testscripts.SimplePostForAutoGenId" /> + value="mimoto/AuthenticateUser/AuthenticateUser.yml" /> + name="io.mosip.testrig.apirig.mimoto.testscripts.PostWithAutogenIdWithOtpGenerate" /> + value="mimoto/AuthorizationCode/AuthorizationCode.yml" /> + name="io.mosip.testrig.apirig.mimoto.testscripts.SimplePostForAutoGenId" /> + value="mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml" /> + name="io.mosip.testrig.apirig.mimoto.testscripts.SimplePostForAutoGenId" /> + value="mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml" /> @@ -84,173 +84,173 @@ + value="mimoto/SunBirdC/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.yml" /> + name="io.mosip.testrig.apirig.mimoto.testscripts.SimplePostForAutoGenId" /> + value="mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml" /> + name="io.mosip.testrig.apirig.mimoto.testscripts.PostWithFormDataBodyForPdfDownload" /> + value="mimoto/AuthLock/createAuthLock.yml" /> + name="io.mosip.testrig.apirig.mimoto.testscripts.PostWithBodyWithOtpGenerate" /> + value="mimoto/AuthUnLock/createAuthUnLock.yml" /> + name="io.mosip.testrig.apirig.mimoto.testscripts.PostWithBodyWithOtpGenerate" /> - + + value="mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml" /> + name="io.mosip.testrig.apirig.mimoto.testscripts.PostWithAutogenIdWithOtpGenerate" /> - + + value="mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml" /> + name="io.mosip.testrig.apirig.mimoto.testscripts.GetWithParam" /> + value="mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml" /> + value="mimoto/SendOTPUIN/createSendOTP.yml" /> + value="mimoto/AidGetIndividualId/AidGetIndividualId.yml" /> + name="io.mosip.testrig.apirig.mimoto.testscripts.PostWithBodyWithOtpGenerate" /> + value="mimoto/BindingOtp/BindingOtp.yml" /> + value="mimoto/WalletBinding/WalletBinding.yml" /> + name="io.mosip.testrig.apirig.mimoto.testscripts.PostWithBodyWithOtpGenerate" /> - + + value="mimoto/GetAllIssuers/GetAllIssuers.yml" /> + name="io.mosip.testrig.apirig.mimoto.testscripts.GetWithParam" /> + value="mimoto/GetIssuerWellKnown/GetIssuerWellKnown.yml" /> + name="io.mosip.testrig.apirig.mimoto.testscripts.GetWithParam" /> + value="mimoto/LoginFlow/Authorization/GoogleLoginToken/GoogleLoginToken.yml" /> + name="io.mosip.testrig.apirig.mimoto.testscripts.SimplePostForAutoGenId" /> + value="mimoto/LoginFlow/Users/GetUserProfile/GetUserProfile.yml" /> + name="io.mosip.testrig.apirig.mimoto.testscripts.GetWithParam" /> + value="mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet.yml" /> + name="io.mosip.testrig.apirig.mimoto.testscripts.SimplePostForAutoGenId" /> + value="mimoto/LoginFlow/Wallet/UnlockWallet/UnlockWallet.yml" /> + name="io.mosip.testrig.apirig.mimoto.testscripts.PostWithPathParamsAndCookie" /> + value="mimoto/LoginFlow/DownloadMosipIssuerCredential/OAuthDetailsRequest/OAuthDetailsRequest.yml" /> + name="io.mosip.testrig.apirig.mimoto.testscripts.SimplePostForAutoGenId" /> + value="mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthenticateUser/AuthenticateUser.yml" /> + name="io.mosip.testrig.apirig.mimoto.testscripts.PostWithAutogenIdWithOtpGenerate" /> + value="mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthorizationCode/AuthorizationCode.yml" /> + name="io.mosip.testrig.apirig.mimoto.testscripts.SimplePostForAutoGenId" /> @@ -258,25 +258,25 @@ + value="mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential.yml" /> + name="io.mosip.testrig.apirig.mimoto.testscripts.PostWithPathParamsHeadersAndCookieForAutoGenId" /> + value="mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml" /> + name="io.mosip.testrig.apirig.mimoto.testscripts.SimplePostForAutoGenId" /> + value="mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml" /> @@ -284,12 +284,12 @@ + value="mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.yml" /> + name="io.mosip.testrig.apirig.mimoto.testscripts.SimplePostForAutoGenId" /> @@ -297,94 +297,103 @@ + value="mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/DownloadIssuerCredential/DownloadIssuerCredential.yml" /> + name="io.mosip.testrig.apirig.mimoto.testscripts.PostWithPathParamsHeadersAndCookieForAutoGenId" /> + value="mimoto/LoginFlow/DownloadMosipIssuerCredential/FetchAllCredentials/FetchAllCredentials.yml" /> + name="io.mosip.testrig.apirig.mimoto.testscripts.GetWithParamAndHeader" /> + value="mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential.yml" /> + name="io.mosip.testrig.apirig.mimoto.testscripts.GetWithParamAndHeader" /> + value="mimoto/LoginFlow/DownloadMosipIssuerCredential/DeleteCredentials/DeleteCredentials.yml" /> + name="io.mosip.testrig.apirig.mimoto.testscripts.DeleteWithParam" /> + value="mimoto/LoginFlow/Wallet/GetWallets/GetWallets.yml" /> + name="io.mosip.testrig.apirig.mimoto.testscripts.GetWithParam" /> + + + + + + + + value="mimoto/LoginFlow/Wallet/DeleteWallet/DeleteWallet.yml" /> + name="io.mosip.testrig.apirig.mimoto.testscripts.DeleteWithParam" /> + value="mimoto/LoginFlow/Wallet/UnlockWalletAfterDelete/UnlockWalletAfterDelete.yml" /> + name="io.mosip.testrig.apirig.mimoto.testscripts.PostWithPathParamsAndCookie" /> + value="mimoto/LoginFlow/Authorization/Logout/Logout.yml" /> + value="mimoto/LoginFlow/Users/GetUserProfileAfterLogout/GetUserProfileAfterLogout.yml" /> + name="io.mosip.testrig.apirig.mimoto.testscripts.GetWithParam" /> + value="mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredentialAfterLogout.yml" /> + name="io.mosip.testrig.apirig.mimoto.testscripts.GetWithParamAndHeader" /> - + + value="mimoto/SunBirdR/DeletePolicySunBirdR/DeletePolicySunBirdR.yml" /> @@ -393,14 +402,14 @@ + value="mimoto/GetVerifierList/GetVerifierList.yml" /> + value="mimoto/GetIssuerConfiguration/GetIssuerConfiguration.yml" /> From f70b2b778c1b348ccd8ba8f5213e70f12c48ff07 Mon Sep 17 00:00:00 2001 From: abhip2565 Date: Mon, 25 Aug 2025 16:32:07 +0530 Subject: [PATCH 758/860] [INJIMOB-3455] add client metadata in trusted verifier DTO (#848) Signed-off-by: Abhishek Paul --- .../config/mimoto-trusted-verifiers.json | 34 ++++++++++++- .../mosip/mimoto/dto/openid/VerifierDTO.java | 7 +++ .../resources/mimoto-trusted-verifiers.json | 34 ++++++++++++- .../controller/VerifiersControllerTest.java | 49 +++++++++++++++++++ 4 files changed, 122 insertions(+), 2 deletions(-) diff --git a/docker-compose/config/mimoto-trusted-verifiers.json b/docker-compose/config/mimoto-trusted-verifiers.json index b27669fdc..76c17a0d6 100644 --- a/docker-compose/config/mimoto-trusted-verifiers.json +++ b/docker-compose/config/mimoto-trusted-verifiers.json @@ -7,7 +7,39 @@ ], "response_uris": [ "https://injiverify.collab.mosip.net/v1/verify/vp-submission/vp-direct-post" - ] + ], + "client_metadata": { + "client_name": "Requester name", + "logo_uri": "", + "authorization_encrypted_response_alg": "ECDH-ES", + "authorization_encrypted_response_enc": "A256GCM", + "jwks": { + "keys": [ + { + "kty": "OKP", + "crv": "X25519", + "use": "enc", + "x": "BVNVdqorpxCCnTOkkw8S2NAYXvfEvkC-8RDObhrAUA4", + "alg": "ECDH-ES", + "kid": "verifier-key-id" + } + ] + }, + "vp_formats": { + "mso_mdoc": { + "alg": [ + "ES256" + ] + }, + "ldp_vp": { + "proof_type": [ + "Ed25519Signature2018", + "Ed25519Signature2020", + "RsaSignature2018" + ] + } + } + } } ] } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/dto/openid/VerifierDTO.java b/src/main/java/io/mosip/mimoto/dto/openid/VerifierDTO.java index 1785d0a39..fd12da67f 100644 --- a/src/main/java/io/mosip/mimoto/dto/openid/VerifierDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/openid/VerifierDTO.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.dto.openid; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; @@ -8,6 +9,7 @@ import lombok.NoArgsConstructor; import java.util.List; +import java.util.Map; @Data @NoArgsConstructor @@ -25,5 +27,10 @@ public class VerifierDTO { @JsonProperty("response_uris") @Schema(description = "Response URIs of the Verifier") List responseUris; + + @JsonProperty("client_metadata") + @JsonInclude(JsonInclude.Include.NON_NULL) + @Schema(description = "Metadata of the Verifier") + Map clientMetadata; } diff --git a/src/main/resources/mimoto-trusted-verifiers.json b/src/main/resources/mimoto-trusted-verifiers.json index b27669fdc..76c17a0d6 100644 --- a/src/main/resources/mimoto-trusted-verifiers.json +++ b/src/main/resources/mimoto-trusted-verifiers.json @@ -7,7 +7,39 @@ ], "response_uris": [ "https://injiverify.collab.mosip.net/v1/verify/vp-submission/vp-direct-post" - ] + ], + "client_metadata": { + "client_name": "Requester name", + "logo_uri": "", + "authorization_encrypted_response_alg": "ECDH-ES", + "authorization_encrypted_response_enc": "A256GCM", + "jwks": { + "keys": [ + { + "kty": "OKP", + "crv": "X25519", + "use": "enc", + "x": "BVNVdqorpxCCnTOkkw8S2NAYXvfEvkC-8RDObhrAUA4", + "alg": "ECDH-ES", + "kid": "verifier-key-id" + } + ] + }, + "vp_formats": { + "mso_mdoc": { + "alg": [ + "ES256" + ] + }, + "ldp_vp": { + "proof_type": [ + "Ed25519Signature2018", + "Ed25519Signature2020", + "RsaSignature2018" + ] + } + } + } } ] } \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/controller/VerifiersControllerTest.java b/src/test/java/io/mosip/mimoto/controller/VerifiersControllerTest.java index 7ca2ce7b3..d3c3428c8 100644 --- a/src/test/java/io/mosip/mimoto/controller/VerifiersControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/VerifiersControllerTest.java @@ -18,6 +18,8 @@ import org.springframework.web.servlet.config.annotation.EnableWebMvc; import java.util.Collections; +import java.util.HashMap; +import java.util.Map; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; @@ -71,4 +73,51 @@ public void shouldReturnEmptyResponseIfAnyErrorOccurredWhileFetchingVerifiersLis .andExpect(jsonPath("$.response.verifiers").isArray()) .andExpect(jsonPath("$.response.verifiers").isEmpty()); } + + @Test + public void shouldIncludeClientMetadataWhenClientMetadataIsPresentInTrustedVerifiers() throws Exception { + Map metadata = new HashMap<>(); + metadata.put("client_name", "Test-Verifier"); + + VerifierDTO verifierDTO = VerifierDTO.builder() + .clientId("test-clientId") + .redirectUris(Collections.singletonList("https://test-redirectUri")) + .responseUris(Collections.singletonList("https://test-responseUri")) + .clientMetadata(metadata) + .build(); + + VerifiersDTO trustedVerifiers = VerifiersDTO.builder() + .verifiers(Collections.singletonList(verifierDTO)).build(); + + Mockito.when(verifierService.getTrustedVerifiers()) + .thenReturn(trustedVerifiers); + + mockMvc.perform(get("/verifiers").accept(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.response.verifiers[0].client_id").value("test-clientId")) + .andExpect(jsonPath("$.response.verifiers[0].client_metadata.client_name").value("Test-Verifier")); + } + + @Test + public void shouldReturnEmptyClientMetadataWhenClientMetadataIsEmptyInTrustedVerifiers() throws Exception { + VerifierDTO verifierDTO = VerifierDTO.builder() + .clientId("test-clientId") + .redirectUris(Collections.singletonList("https://test-redirectUri")) + .responseUris(Collections.singletonList("https://test-responseUri")) + .clientMetadata(Collections.emptyMap()) + .build(); + + VerifiersDTO trustedVerifiers = VerifiersDTO.builder() + .verifiers(Collections.singletonList(verifierDTO)).build(); + + Mockito.when(verifierService.getTrustedVerifiers()) + .thenReturn(trustedVerifiers); + + mockMvc.perform(get("/verifiers").accept(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.response.verifiers[0].client_metadata").isMap()) + .andExpect(jsonPath("$.response.verifiers[0].client_metadata").isEmpty()); + } + + } From b43cdc06356ad55726a58370919f0c995ec6497b Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Mon, 25 Aug 2025 18:01:44 +0530 Subject: [PATCH 759/860] [Injiweb 1639] Update the cache and session cache config files to remove the dependency on redis when running mimoto using IDE or docker (#851) --- .talismanrc | 10 +- README.md | 39 ++++-- .../config/mimoto-default.properties | 23 ++-- docker-compose/docker-compose.yml | 13 +- .../io/mosip/mimoto/config/CacheConfig.java | 128 ++++++++++++++++-- .../mimoto/config/SessionCacheConfig.java | 60 ++++++++ .../mosip/mimoto/util/IssuerConfigUtil.java | 1 - .../resources/application-default.properties | 14 +- .../resources/application-local.properties | 14 +- 9 files changed, 234 insertions(+), 68 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/config/SessionCacheConfig.java diff --git a/.talismanrc b/.talismanrc index 0ebcb0b77..99e32d052 100644 --- a/.talismanrc +++ b/.talismanrc @@ -72,7 +72,7 @@ fileignoreconfig: - filename: src/main/java/io/mosip/mimoto/util/JoseUtil.java checksum: b6123f66cb7dbe208cb8d5f8b4b664d742c918608ec0ad22dfa3ab27ab9ec32e - filename: docker-compose/docker-compose.yml - checksum: 6c4765658ac673aeda9cdd4107776d0c706f63eff3543c8b82b2d84b061310cd + checksum: f62a54ea4d2e060f5712b2b8acdb2611b77997e600b0eaeb8b0062618f44176b - filename: src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java checksum: 90dce7daa19f0eb9050194a3c77a88d449a83c337d9041bfdeb7bfded3bbd12c - filename: src/main/java/io/mosip/mimoto/exception/ErrorConstants.java @@ -120,13 +120,13 @@ fileignoreconfig: - filename: src/test/resources/application-test.properties checksum: eff6c72dfdc2e0a2aa4e3ec9d520a1433189902467954d123bc562df095a43bd - filename: src/main/resources/application-default.properties - checksum: e0d8dd498f739097e67111bdfd4ac4cdf9ddab9b77c2ffca42aecc3e09a4ebc8 + checksum: b8a1f2eb85b23a1706f0d6f73d9416f2e337aa0e5b155728f16b81fca468591c - filename: src/main/resources/application-local.properties - checksum: df602b1282273f6cb867f3b7c75bda468f07c72253e19a09e776c1db28e2212e + checksum: 9f28cff2323b911e29d62510e11e68662fde473adb96dff0cc65409d80c6d828 - filename: docker-compose/config/mimoto-default.properties - checksum: 56073d92f55c371ad84f1493bdfc3771a70c49147db6a83bb1d74f6013aef714 + checksum: fc10e892f9bc2a220b7f5cd3e5ea606d650b8a43b4c430d19d20ce7ecc5cd33d - filename: README.md - checksum: e774036bc8cf0bf82ca5bc0a4cd8b3501616b3309764f18a13cb4d9013b404af + checksum: 6b99e539be1385e7b6d6c46a4c089eca72a092ea798d1cc27b294b5a3e7c148a - filename: docker-compose/README.md checksum: f70385d1be6b7945df1afac0890bdce5ecceb63cdba08bdd3f760f40f843c630 - filename: src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java diff --git a/README.md b/README.md index 0ac10814b..77dd1b193 100644 --- a/README.md +++ b/README.md @@ -8,23 +8,35 @@ This repository contains source code for backend service of Inji Mobile and Inji ## Build & run (for developers) -The project requires JDK 21, postgres, redis and google client credentials +The project requires JDK 21, postgres and google client credentials ### without docker-compose Build & install -1. Install pgadmin, redis and update application-default.properties file with values +1. Install pgadmin and update application-default.properties file with values ```properties spring.datasource.username= spring.datasource.password= - spring.redis.password= ``` -2. Refer to the [How to create Google Client Credentials](docker-compose/README.md#how-to-create-google-client-credentials) section to create + +2. Install Redis or any other cache provider only if you want to store the application data or HTTP sessions in that specific provider instead of the default Caffeine cache when running Mimoto through the IDE or in Docker. + * To use a specific provider, update the relevant properties and add the corresponding configuration in application-local.properties (for IDE) or mimoto-default.properties (for Docker). + **Example for Redis:** + ```properties + spring.session.store-type=redis #To store HTTP sessions in Redis + spring.cache.type=redis #To store application data in Redis + ``` + * Add the required redis configurations in [application-local.properties](src/main/resources/application-local.properties) similar to those added in [application-default.properties](src/main/resources/application-default.properties) file. Refer to the properties starting with `spring.data.redis` and `spring.session.redis`. + * When running in Docker, ensure the corresponding Docker image/service is either included in your docker-compose.yml file or the required image is pulled on your machine and running. + +3. Refer to the [How to create Google Client Credentials](docker-compose/README.md#how-to-create-google-client-credentials) section to create Google client credentials and update below properties in `application-local.properties`. ``` spring.security.oauth2.client.registration.google.client-id= spring.security.oauth2.client.registration.google.client-secret= ``` -3. Add identity providers as issuers in the `mimoto-issuers-config.json` file of [resources folder](src/main/resources/mimoto-issuers-config.json). For each provider, create a corresponding object with its issuer-specific configuration. Refer to the [Issuers Configuration](docker-compose/README.md#mimoto-issuers-configuration) section for details on how to structure this file and understand each field's purpose and what values need to be updated. -4. Add or update the verifiers clientId, redirect and response Uris in `mimoto-trusted-verifiers.json` file of [resources folder](src/main/resources/mimoto-trusted-verifiers.json) for Verifiable credential Online Sharing. -5. Keystore(oidckeystore.p12) Configuration: +4. Add identity providers as issuers in the `mimoto-issuers-config.json` file of [resources folder](src/main/resources/mimoto-issuers-config.json). For each provider, create a corresponding object with its issuer-specific configuration. Refer to the [Issuers Configuration](docker-compose/README.md#mimoto-issuers-configuration) section for details on how to structure this file and understand each field's purpose and what values need to be updated. + +5. Add or update the verifiers clientId, redirect and response Uris in `mimoto-trusted-verifiers.json` file of [resources folder](src/main/resources/mimoto-trusted-verifiers.json) for Verifiable credential Online Sharing. + +6. Keystore(oidckeystore.p12) Configuration: In the root directory, create a certs folder and generate an OIDC client. Add the onboard client’s key to the oidckeystore.p12 file and place this file inside the certs folder. Refer to the [official documentation](https://docs.inji.io/inji-wallet/inji-mobile/technical-overview/customization-overview/credential_providers) for guidance on how to create the **oidckeystore.p12** file and add the OIDC client key to it. * The **oidckeystore.p12** file stores keys and certificates, each identified by an alias (e.g., mpartner-default-mimoto-insurance-oidc). Mimoto uses this alias to find the correct entry and access the corresponding private key during the authentication flow. @@ -39,16 +51,19 @@ The project requires JDK 21, postgres, redis and google client credentials ``` * Mimoto also uses this same keystore file (oidckeystore.p12) to store keys generated at service startup, which are essential for performing encryption and decryption operations through the KeyManager service. -6. To configure any Mobile Wallet specific configurations refer to the [Inji Mobile Wallet Configuration](docker-compose/README.md#inji-mobile-wallet-configuration) section. -7. Run the SQLs using /deploy.sh script. from [db_scripts folder](db_scripts/inji_mimoto) +7. To configure any Mobile Wallet specific configurations refer to the [Inji Mobile Wallet Configuration](docker-compose/README.md#inji-mobile-wallet-configuration) section. + +8. Run the SQLs using /deploy.sh script. from [db_scripts folder](db_scripts/inji_mimoto) ``` ./deploy.sh deploy.properties ``` -8. Build the jar + +9. Build the jar ``` mvn clean install -Dgpg.skip=true -Dmaven.javadoc.skip=true -DskipTests=true ``` -9. Run following command + +10. Run following command ``` mvn spring-boot:run -Dspring.profiles.active=local ``` @@ -65,4 +80,4 @@ The project requires JDK 21, postgres, redis and google client credentials ## [Deployment in K8 cluster](deploy/README.md) ## Credits -Credits listed [here](/Credits.md) +Credits listed [here](/Credits.md) \ No newline at end of file diff --git a/docker-compose/config/mimoto-default.properties b/docker-compose/config/mimoto-default.properties index 33f02f0fa..c5506fa9c 100644 --- a/docker-compose/config/mimoto-default.properties +++ b/docker-compose/config/mimoto-default.properties @@ -395,21 +395,12 @@ spring.jpa.show-sql=true # Specifies the driver class name for the PostgreSQL database, required for the application to interact with the database. spring.datasource.driver-class-name=org.postgresql.Driver -#Redis configuration -# Specifies the type of session store to use (Redis in this case) -spring.session.store-type=redis -# Defines the hostname of the Redis server -spring.data.redis.host=${SPRING_REDIS_HOST} -# Specifies the port number for the Redis server -spring.data.redis.port=${SPRING_REDIS_PORT} -# Sets the duration for which the application waits to establish a connection with the Redis server -spring.data.redis.connect-timeout=10s -# Specifies the duration the application waits for a response from Redis operations (e.g., setting or retrieving keys) -spring.data.redis.timeout=10s -# Specifies the duration of inactivity after which a user session in the Redis will expire +# Http session cache configuration +# Specifies which session store type to be used for storing http sessions in User Login flow +spring.session.store-type=caffeine +# Specifies the duration of inactivity after which a user session in configured session store (Ex: redis) will expire, ensuring session cleanup. server.servlet.session.timeout=30m -# Specifies the namespace for Redis session keys. -spring.session.redis.namespace=injiweb:session: + # Configures the database dialect for Hibernate (PostgreSQL in this case). spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect @@ -432,7 +423,9 @@ registration.processor.print.textfile=registration-processor-print-text-file.jso # Application ID used for identifying and managing the Mimoto service keys in Key Manager service mosip.inji.app.id=MIMOTO -#Caffeine cache related configurations +# Cache related configurations +# Specifies which cache type to use (e.g., caffeine, redis) +spring.cache.type=caffeine # Cache expiry time in minutes for the issuer's well-known endpoint response. cache.credential-issuer.wellknown.expiry-time-in-min=60 # Cache expiry time in minutes for issuers configurations read from a config file. diff --git a/docker-compose/docker-compose.yml b/docker-compose/docker-compose.yml index 760d3ad3b..00e1a4382 100644 --- a/docker-compose/docker-compose.yml +++ b/docker-compose/docker-compose.yml @@ -50,13 +50,6 @@ services: - postgres-data:/var/lib/postgresql/data - ./mimoto_init.sql:/docker-entrypoint-initdb.d/mimoto_init.sql - redis: - image: redis:alpine - ports: - - "6379:6379" - volumes: - - redis-data:/data - mimoto-service: container_name: 'mimoto-service' image: 'mosipdev/mimoto:develop' @@ -71,8 +64,6 @@ services: - SPRING_CLOUD_BOOTSTRAP_LOCATION=/home/mosip/mimoto-bootstrap.properties - oidc_p12_password=dummypassword - SPRING_DATASOURCE_URL=jdbc:postgresql://postgres:5432/inji_mimoto - - SPRING_REDIS_HOST=redis - - SPRING_REDIS_PORT=6379 - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres - GOOGLE_OAUTH_CLIENT_ID=clientId @@ -86,8 +77,6 @@ services: depends_on: - datashare - postgres - - redis volumes: - postgres-data: - redis-data: \ No newline at end of file + postgres-data: \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/config/CacheConfig.java b/src/main/java/io/mosip/mimoto/config/CacheConfig.java index 71ba8d35a..5c408a0eb 100644 --- a/src/main/java/io/mosip/mimoto/config/CacheConfig.java +++ b/src/main/java/io/mosip/mimoto/config/CacheConfig.java @@ -1,19 +1,56 @@ package io.mosip.mimoto.config; +import java.time.Duration; +import java.util.Map; import java.util.Objects; import java.util.concurrent.TimeUnit; + import com.github.benmanes.caffeine.cache.Caffeine; -import org.springframework.cache.CacheManager; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.autoconfigure.cache.CacheManagerCustomizer; +import org.springframework.boot.autoconfigure.cache.RedisCacheManagerBuilderCustomizer; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.cache.annotation.EnableCaching; import org.springframework.cache.caffeine.CaffeineCacheManager; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.redis.cache.RedisCacheConfiguration; +import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.RedisSerializationContext; +/** + * Cache configuration for the application. + * + * This class provides customizers to configure two cache providers based on + * the 'spring.cache.type' property. + * + * 1. CaffeineCacheManager – configured by a `CacheManagerCustomizer` bean, + * allowing customization of specific cache settings like per-cache TTLs, + * without creating the full bean from scratch. + * + * 2. RedisCacheManager – configured by a `RedisCacheManagerBuilderCustomizer` bean, + * which gives full control over the Redis cache configuration (value serializer, + * per-cache TTLs, etc.) without creating the full bean from scratch. + * + * Both customizer beans are only created if the corresponding cache type is + * specified. If 'spring.cache.type' is not set, Spring Boot will auto-detect the cache + * provider based on the libraries on the classpath, or fall back to the + * SimpleCacheManager (in-memory ConcurrentHashMap) if no cache library is available. + * + * NOTE: If 'spring.cache.type' is set to an invalid or unsupported value, + * the application will fail to start. Spring Boot does not fall back to a + * default cache manager in that case. + */ @Configuration @EnableCaching +@Slf4j public class CacheConfig { + private static final String ISSUER_WELLKNOWN_CACHE = "issuerWellknown"; + private static final String ISSUERS_CONFIG_CACHE = "issuersConfig"; + private static final String AUTH_SERVER_WELLKNOWN_CACHE = "authServerWellknown"; + @Value("${cache.credential-issuer.wellknown.expiry-time-in-min:60}") private Long issuerWellknownExpiryTimeInMin; @@ -26,20 +63,91 @@ public class CacheConfig { @Value("${cache.default.expiry-time-in-min:60}") private long defaultCacheExpiryTimeInMin; - private Caffeine buildCache(Long expiryTime) { + /** + * Creates a reusable Caffeine builder configuration. + * + * @param expiryTime The custom expiry time in minutes for the cache. + * @return A configured Caffeine builder instance. + */ + private Caffeine createCaffeineCacheConfig(Long expiryTime) { return Caffeine.newBuilder().expireAfterWrite( Objects.requireNonNullElse(expiryTime, defaultCacheExpiryTimeInMin), TimeUnit.MINUTES ); } + /** + * This method defines a CacheManagerCustomizer bean to customize the + * auto-configured CaffeineCacheManager. It registers custom caches + * with their specific configurations. This is the preferred Spring Boot approach. + * This bean is only created if 'spring.cache.type' is set to 'caffeine'. + * + * @return A CacheManagerCustomizer instance. + */ + @Bean + @ConditionalOnProperty(name = "spring.cache.type", havingValue = "caffeine") + public CacheManagerCustomizer caffeineCacheManagerCustomizer() { + log.info("******* Customizing Caffeine cache provider *******"); + + return cacheManager -> { + cacheManager.registerCustomCache( + ISSUER_WELLKNOWN_CACHE, + createCaffeineCacheConfig(issuerWellknownExpiryTimeInMin).build() + ); + cacheManager.registerCustomCache( + ISSUERS_CONFIG_CACHE, + createCaffeineCacheConfig(issuersConfigExpiryTimeInMin).build() + ); + cacheManager.registerCustomCache( + AUTH_SERVER_WELLKNOWN_CACHE, + createCaffeineCacheConfig(authServerWellknownExpiryTimeInMin).build() + ); + // Set the default Caffeine config for any other caches + cacheManager.setCaffeine(createCaffeineCacheConfig(null)); + }; + } + + /** + * This method defines a RedisCacheManagerBuilderCustomizer bean to customize the + * auto-configured RedisCacheManager. It registers per-cache configurations. + * This is the preferred Spring Boot approach. + * This bean is only created if 'spring.cache.type' is set to 'redis'. + * + * @return A RedisCacheManagerBuilderCustomizer instance. + */ @Bean - public CacheManager cacheManager() { - CaffeineCacheManager cacheManager = new CaffeineCacheManager(); - cacheManager.registerCustomCache("issuerWellknown", buildCache(issuerWellknownExpiryTimeInMin).build()); - cacheManager.registerCustomCache("issuersConfig", buildCache(issuersConfigExpiryTimeInMin).build()); - cacheManager.registerCustomCache("authServerWellknown", buildCache(authServerWellknownExpiryTimeInMin).build()); - cacheManager.setCaffeine(buildCache(null)); - return cacheManager; + @ConditionalOnProperty(name = "spring.cache.type", havingValue = "redis") + public RedisCacheManagerBuilderCustomizer redisCacheManagerBuilderCustomizer() { + log.info("******* Customizing Redis cache provider *********"); + GenericJackson2JsonRedisSerializer jacksonSerializer = new GenericJackson2JsonRedisSerializer(); + + return builder -> { + // Default config for the Redis cache manager + RedisCacheConfiguration defaultCacheConfig = RedisCacheConfiguration.defaultCacheConfig() + .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jacksonSerializer)) + .entryTtl(Duration.ofMinutes(defaultCacheExpiryTimeInMin)) + .disableCachingNullValues(); + + Map cacheConfigurations = Map.of( + ISSUER_WELLKNOWN_CACHE, createRedisConfigWithTtl(defaultCacheConfig, issuerWellknownExpiryTimeInMin), + ISSUERS_CONFIG_CACHE, createRedisConfigWithTtl(defaultCacheConfig, issuersConfigExpiryTimeInMin), + AUTH_SERVER_WELLKNOWN_CACHE, createRedisConfigWithTtl(defaultCacheConfig, authServerWellknownExpiryTimeInMin) + ); + + // Apply default and per-cache configurations + builder.cacheDefaults(defaultCacheConfig) + .withInitialCacheConfigurations(cacheConfigurations); + }; + } + + /** + * Helper method to create a RedisCacheConfiguration with a specific TTL. + * + * @param baseConfig The base RedisCacheConfiguration. + * @param expiryTime The expiry time in minutes, with a fallback to the default. + * @return The new RedisCacheConfiguration with the specified TTL. + */ + private RedisCacheConfiguration createRedisConfigWithTtl(RedisCacheConfiguration baseConfig, Long expiryTime) { + return baseConfig.entryTtl(Duration.ofMinutes(Objects.requireNonNullElse(expiryTime, defaultCacheExpiryTimeInMin))); } -} +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/config/SessionCacheConfig.java b/src/main/java/io/mosip/mimoto/config/SessionCacheConfig.java new file mode 100644 index 000000000..e94461393 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/config/SessionCacheConfig.java @@ -0,0 +1,60 @@ +package io.mosip.mimoto.config; + +import com.github.benmanes.caffeine.cache.Caffeine; +import com.github.benmanes.caffeine.cache.Cache; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.session.MapSessionRepository; +import org.springframework.session.Session; +import org.springframework.session.config.annotation.web.http.EnableSpringHttpSession; + +import java.time.Duration; + +/** + * Configuration for HTTP session store. + * + * This class provides a MapSessionRepository bean that uses Caffeine as the session store + * for certain cases and acts as a fallback to ensure the application always has a session repository. + * + * Behavior based on 'spring.session.store-type': + * - If set to 'caffeine': uses the Caffeine-backed repository with TTL and a maximum entry records limit. + * - If set to 'none', missing, or empty: uses the Caffeine-backed repository as a fallback. + * - If set to a supported Spring Session provider (e.g., Redis, JDBC, Mongo) and the dependency + * is available on the classpath (in pom.xml): + * - Spring Boot auto-configures the SessionRepository for that provider. + * - The Caffeine repository is ignored. + * - If set to a supported Spring Session provider but the dependency is NOT available on the classpath: + * - The application will fail to start due to a missing SessionRepository bean. + * - If set to an unsupported or invalid value: + * - The application may fail to start unless a valid fallback bean is provided. + * + * Notes: + * - The fallback Caffeine repository ensures safe startup even when no provider is set. + * - The fallback in-memory repository does not persist sessions across application restarts. + */ +@Configuration +@EnableSpringHttpSession +@Slf4j +public class SessionCacheConfig { + + @Value("${server.servlet.session.timeout:30m}") + private Duration springSessionTimeout; + + @Bean + @ConditionalOnExpression( + "('${spring.session.store-type:none}'.toLowerCase() == 'caffeine') or " + + "('${spring.session.store-type:none}'.toLowerCase() == 'none') or " + + "T(org.springframework.util.StringUtils).isEmpty('${spring.session.store-type:}')" + ) + public MapSessionRepository caffeineSessionRepository() { + log.info("******* Initializing session repository using Caffeine cache provider *******"); + Cache sessionCache = Caffeine.newBuilder() + .expireAfterAccess(springSessionTimeout) + .maximumSize(2000) + .build(); + return new MapSessionRepository(sessionCache.asMap()); + } +} diff --git a/src/main/java/io/mosip/mimoto/util/IssuerConfigUtil.java b/src/main/java/io/mosip/mimoto/util/IssuerConfigUtil.java index 006e4a9c7..9d40b6b7e 100644 --- a/src/main/java/io/mosip/mimoto/util/IssuerConfigUtil.java +++ b/src/main/java/io/mosip/mimoto/util/IssuerConfigUtil.java @@ -1,6 +1,5 @@ package io.mosip.mimoto.util; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.exception.ApiNotAccessibleException; diff --git a/src/main/resources/application-default.properties b/src/main/resources/application-default.properties index d403601a1..1b40f3f77 100644 --- a/src/main/resources/application-default.properties +++ b/src/main/resources/application-default.properties @@ -154,19 +154,19 @@ spring.jpa.show-sql=true spring.datasource.driver-class-name=org.postgresql.Driver #Redis configuration -# Specifies the type of session store to use (Redis in this case), enabling distributed session management. +# Specifies the type of session store to use (Redis in this case) for storing http sessions in User Login flow, enabling distributed session management. spring.session.store-type=redis # Defines the hostname of the Redis server, required to connect to the Redis instance. -spring.data.redis.host=${redis.host} +spring.data.redis.host=${redis.host:localhost} # Specifies the port number for the Redis server, required to connect to the Redis instance. -spring.data.redis.port=${redis.port} +spring.data.redis.port=${redis.port:6379} # Sets the password for connecting to the Redis server (empty if no password is required), ensuring secure access. -spring.data.redis.password=${redis.password} +spring.data.redis.password=${redis.password:""} # Sets the duration for which the application waits to establish a connection with the Redis server, preventing long delays. spring.data.redis.connect-timeout=10s # Specifies the duration the application waits for a response from Redis operations (e.g., setting or retrieving keys), ensuring timely responses. spring.data.redis.timeout=10s -# Specifies the duration of inactivity after which a user session in Redis will expire, ensuring session cleanup. +# Specifies the duration of inactivity after which a user session in configured session store (Ex: redis) will expire, ensuring session cleanup. server.servlet.session.timeout=30m # Specifies the namespace for Redis session keys, used to avoid key collisions in Redis. spring.session.redis.namespace=injiweb:session: @@ -195,7 +195,9 @@ mosip.inji.app.id=MIMOTO # Face key mappings - first available key is used for image display mosip.injiweb.vc.subject.face.keys.order=image,face,photo,picture,portrait -#Caffeine cache related configurations +# Cache related configurations +# Specifies which cache type to use (e.g., caffeine, redis) +spring.cache.type=redis # Cache expiry time in minutes for the issuer's well-known endpoint response. cache.credential-issuer.wellknown.expiry-time-in-min = 60 # Cache expiry time in minutes for issuers configurations read from a config file. diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index 9e14950be..dac8ed4ef 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -249,13 +249,13 @@ mosip.security.cors-enable=true # Predefined list of cross origins which are allowed to access the application resources mosip.security.origins=http://localhost:3004 -# Redis configuration -# Defines the hostname of the Redis server, required to connect to the Redis instance. -spring.data.redis.host=localhost -# Specifies the port number for the Redis server, required to connect to the Redis instance. -spring.data.redis.port=6379 -# Sets the password for connecting to the Redis server (empty if no password is required), ensuring secure access. -spring.data.redis.password= +# Cache related configurations +# Specifies which cache type to use (e.g., caffeine, redis) +spring.cache.type=caffeine + +# Http session cache configuration +# Specifies which session store type to be used for storing http sessions in User Login flow +spring.session.store-type=caffeine # Defines the hostname where the database is hosted mosip.mimoto.database.hostname=localhost From 76027f15220aea2fd300ee67e4394b9677ee8ba5 Mon Sep 17 00:00:00 2001 From: cyber-titan <124165966+cyber-titan@users.noreply.github.com> Date: Tue, 26 Aug 2025 12:55:10 +0530 Subject: [PATCH 760/860] injiweb-1699-masking-and-update-pdf-template added masking (#843) --- .../config/credential-template.html | 46 +++--- .../CredentialPDFGeneratorService.java | 15 +- .../java/io/mosip/mimoto/util/Utilities.java | 8 + .../resources/application-default.properties | 5 + .../templates/credential-template.html | 46 +++--- .../CredentialPDFGeneratorServiceTest.java | 138 ++++++++++++++++-- 6 files changed, 193 insertions(+), 65 deletions(-) diff --git a/docker-compose/config/credential-template.html b/docker-compose/config/credential-template.html index d51fe5f49..eb7fe8285 100644 --- a/docker-compose/config/credential-template.html +++ b/docker-compose/config/credential-template.html @@ -74,31 +74,26 @@ -#if(!$disclosures.isEmpty()) -
- Selectively Shareable Fields -
-
-
    - #foreach($entry in $disclosures.entrySet()) ## Iterate over the outer map - #if($entry.value) ## Check if the value exists for this entry -
  • - $entry.value -
  • - #end - #end -
-
-
- i -
- Your card includes specific details marked by the issuer as selectively sharable. These can be shared - independently during credential presentation. Other fields not listed here can only be shared as part of the - full credential, if requested by the verifier. +#if($isSdJwtWithDisclosures) + #if($isMaskedOn) +
+ i +
+ Your card includes specific details marked by the issuer as selectively disclosable. Fields marked (X) are selectively disclosable and can be shared independently during credential presentation. Other fields not listed here can only be disclosed as part of the full credential, if requested by the verifier. +
-
+ #else +
+ i +
+ Your credential includes fields that can be shared selectively. These fields are not marked separately for you to identify visually, but you will see and choose them when presenting this credential to a verifier. +
+
+ #end #end
Please note: #if ($credentialValidity != -1) - limited to a maximum of $credentialValidity verifications by authorized verifiers. Once the specified number of - verifications has been reached, this credential will no longer be valid for further verification attempts. + This credential is limited to a maximum of [$credentialValidity] verifications by authorized verifiers. Once the specified number of verifications has been reached, this credential will no longer be valid for further verification attempts. #else This credential can be used for verification by authorized verifiers without any limit on the number of verifications. It provides continuous, secure access for credential validation. diff --git a/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java b/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java index dcbb03c4f..ae3b4112e 100644 --- a/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java +++ b/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java @@ -26,6 +26,8 @@ import io.mosip.mimoto.util.Utilities; import io.mosip.pixelpass.PixelPass; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang.StringUtils; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; import org.springframework.beans.factory.annotation.Autowired; @@ -81,6 +83,9 @@ private record SelectedFace(String key, String face) {} @Value("${mosip.injiweb.vc.subject.face.keys.order:image,face,photo,picture,portrait}") private String faceImageLookupKeys; + @Value("${mosip.injiweb.mask.disclosures:true}") + private boolean maskDisclosures; + public ByteArrayInputStream generatePdfForVerifiableCredential(String credentialConfigurationId, VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String dataShareUrl, String credentialValidity, String locale) throws Exception { // Get the appropriate processor based on format CredentialFormatHandler processor = credentialFormatHandlerFactory.getHandler(vcCredentialResponse.getFormat()); @@ -145,8 +150,11 @@ private Map getPdfResourceFromVcProperties( String strVal = formatValue(val, locale); if (disclosures.contains(key)) { disclosuresProps.put(key, displayName); + if (maskDisclosures) { + strVal = utilities.maskValue(strVal); + } } - if (!isFaceKey) { + if (!isFaceKey && displayName != null) { rowProperties.put(key, Map.of(displayName, strVal)); } }); @@ -159,6 +167,11 @@ private Map getPdfResourceFromVcProperties( qrCodeImage = constructQRCodeWithVCData(vcCredentialResponse); } + // is sd-jwt and has disclosures + boolean isSdJwtWithDisclosures = CredentialFormat.VC_SD_JWT.getFormat().equals(vcCredentialResponse.getFormat()) && CollectionUtils.isNotEmpty(disclosures); + + data.put("isMaskedOn", maskDisclosures); + data.put("isSdJwtWithDisclosures", isSdJwtWithDisclosures); data.put("qrCodeImage", qrCodeImage); data.put("credentialValidity", credentialValidity); data.put("logoUrl", issuerDTO.getDisplay().stream().map(d -> d.getLogo().getUrl()).findFirst().orElse("")); diff --git a/src/main/java/io/mosip/mimoto/util/Utilities.java b/src/main/java/io/mosip/mimoto/util/Utilities.java index 462647f40..80b939a1f 100644 --- a/src/main/java/io/mosip/mimoto/util/Utilities.java +++ b/src/main/java/io/mosip/mimoto/util/Utilities.java @@ -280,4 +280,12 @@ public static List getErrors(String errorCode, String errorMessage) { ErrorDTO errorDTO = new ErrorDTO(errorCode, errorMessage); return Lists.newArrayList(errorDTO); } + + public static String maskValue(String value) { + if (StringUtils.isEmpty(value)) { + return value; + } + // mask of length 20 or less + return "X".repeat(Math.min(value.length(), 20)); + } } diff --git a/src/main/resources/application-default.properties b/src/main/resources/application-default.properties index 1b40f3f77..ce69d3848 100644 --- a/src/main/resources/application-default.properties +++ b/src/main/resources/application-default.properties @@ -195,9 +195,14 @@ mosip.inji.app.id=MIMOTO # Face key mappings - first available key is used for image display mosip.injiweb.vc.subject.face.keys.order=image,face,photo,picture,portrait +# Enables or disables the display of disclosures for VCs +mosip.injiweb.mask.disclosures=true + +#Caffeine cache related configurations # Cache related configurations # Specifies which cache type to use (e.g., caffeine, redis) spring.cache.type=redis + # Cache expiry time in minutes for the issuer's well-known endpoint response. cache.credential-issuer.wellknown.expiry-time-in-min = 60 # Cache expiry time in minutes for issuers configurations read from a config file. diff --git a/src/main/resources/templates/credential-template.html b/src/main/resources/templates/credential-template.html index 09f50a456..4f544b986 100644 --- a/src/main/resources/templates/credential-template.html +++ b/src/main/resources/templates/credential-template.html @@ -74,31 +74,26 @@
-#if(!$disclosures.isEmpty()) -
- Selectively Shareable Fields -
-
-
    - #foreach($entry in $disclosures.entrySet()) ## Iterate over the outer map - #if($entry.value) ## Check if the value exists for this entry -
  • - $entry.value -
  • - #end - #end -
-
-
- i -
- Your card includes specific details marked by the issuer as selectively sharable. These can be shared - independently during credential presentation. Other fields not listed here can only be shared as part of the - full credential, if requested by the verifier. +#if($isSdJwtWithDisclosures) + #if($isMaskedOn) +
+ i +
+ Your card includes specific details marked by the issuer as selectively disclosable. Fields marked (X) are selectively disclosable and can be shared independently during credential presentation. Other fields not listed here can only be disclosed as part of the full credential, if requested by the verifier. +
-
+ #else +
+ i +
+ Your credential includes fields that can be shared selectively. These fields are not marked separately for you to identify visually, but you will see and choose them when presenting this credential to a verifier. +
+
+ #end #end
Please note: #if ($credentialValidity != -1) - limited to a maximum of $credentialValidity verifications by authorized verifiers. Once the specified number of - verifications has been reached, this credential will no longer be valid for further verification attempts. + This credential is limited to a maximum of [$credentialValidity] verifications by authorized verifiers. Once the specified number of verifications has been reached, this credential will no longer be valid for further verification attempts. #else This credential can be used for verification by authorized verifiers without any limit on the number of verifications. It provides continuous, secure access for credential validation. diff --git a/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java index fc62ac9b2..a1961e757 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java @@ -1,6 +1,8 @@ package io.mosip.mimoto.service; +import com.authlete.sd.Disclosure; +import com.authlete.sd.SDJWT; import com.fasterxml.jackson.databind.ObjectMapper; import io.mosip.mimoto.dto.BackgroundImageDTO; import io.mosip.mimoto.dto.DisplayDTO; @@ -11,6 +13,7 @@ import io.mosip.mimoto.model.QRCodeType; import io.mosip.mimoto.service.impl.LdpVcCredentialFormatHandler; import io.mosip.mimoto.service.impl.PresentationServiceImpl; +import io.mosip.mimoto.service.impl.VcSdJwtCredentialFormatHandler; import io.mosip.mimoto.util.Utilities; import io.mosip.pixelpass.PixelPass; import org.junit.jupiter.api.BeforeEach; @@ -23,10 +26,7 @@ import org.springframework.test.util.ReflectionTestUtils; import java.io.ByteArrayInputStream; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.mockito.ArgumentMatchers.any; @@ -45,6 +45,9 @@ class CredentialPDFGeneratorServiceTest { @Mock private LdpVcCredentialFormatHandler credentialFormatHandler; + @Mock + private VcSdJwtCredentialFormatHandler sdJwtCredentialFormatHandler; + @InjectMocks private CredentialPDFGeneratorService credentialPDFGeneratorService; @@ -62,14 +65,6 @@ void setUp() { ReflectionTestUtils.setField(credentialPDFGeneratorService, "faceImageLookupKeys", "image,face,photo,picture,portrait"); - // Mock the handler factory to return the handler for the test format - when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); - when(credentialFormatHandler.extractCredentialClaims(any())) - .thenAnswer(invocation -> { - VCCredentialResponse response = invocation.getArgument(0); - return ((VCCredentialProperties)response.getCredential()).getCredentialSubject(); - }); - setupTestData(); } @@ -138,6 +133,7 @@ private CredentialDisplayResponseDto createDisplay(String name) { @Test void testGeneratePdfForVerifiableCredential() throws Exception { + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())) .thenReturn("Test"); PresentationDefinitionDTO presentationDef = new PresentationDefinitionDTO(); @@ -155,6 +151,7 @@ void testGeneratePdfForVerifiableCredential() throws Exception { @Test void testGeneratePdfForEmbeddedVCQR() throws Exception { + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); issuerDTO.setQr_code_type(QRCodeType.EmbeddedVC); when(objectMapper.writeValueAsString(any())).thenReturn("{\"credential\":\"data\"}"); when(pixelPass.generateQRData(anyString(), anyString())).thenReturn("generated-qr-data"); @@ -178,6 +175,7 @@ void testGeneratePdfForEmbeddedVCQR() throws Exception { @Test void testGeneratePdfShouldGeneratePresentationDefinitionForOnlineSharingQrTypeWithNonEmptyDataShareUrl() throws Exception { + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); issuerDTO.setQr_code_type(QRCodeType.OnlineSharing); when(objectMapper.writeValueAsString(any())).thenReturn("{\"credential\":\"data\"}"); when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())) @@ -200,6 +198,7 @@ void testGeneratePdfShouldGeneratePresentationDefinitionForOnlineSharingQrTypeWi @Test void testHandleMapWithListValue() throws Exception { + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); Map skills = new HashMap<>(); skills.put("skills", List.of("Java", "Spring")); ((VCCredentialProperties)vcCredentialResponse.getCredential()).setCredentialSubject(skills); @@ -224,6 +223,7 @@ void testHandleMapWithListValue() throws Exception { @Test void testNullFaceImageHandling() throws Exception { + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); Map mutableSubject = new HashMap<>(((VCCredentialProperties)vcCredentialResponse.getCredential()).getCredentialSubject()); mutableSubject.remove("face"); ((VCCredentialProperties)vcCredentialResponse.getCredential()).setCredentialSubject(mutableSubject); @@ -245,6 +245,7 @@ void testNullFaceImageHandling() throws Exception { @Test void testGeneratePdfWithNullOrder() throws Exception { + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); credentialsSupportedResponse.setOrder(null); when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())) .thenReturn("Test"); @@ -269,6 +270,7 @@ void testGeneratePdfWithNullOrder() throws Exception { @Test void testGeneratePdfWithMapValueFormatting() throws Exception { + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); // Setup credential with map containing "value" key Map subjectWithMapValue = new HashMap<>(); subjectWithMapValue.put("education", Map.of("value", "Bachelor's Degree")); @@ -295,6 +297,7 @@ void testGeneratePdfWithMapValueFormatting() throws Exception { @Test void testGeneratePdfWithStringListFormatting() throws Exception { + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); // Setup credential with list of strings Map subjectWithList = new HashMap<>(); subjectWithList.put("skills", List.of("Java", "Spring", "Boot")); @@ -320,6 +323,7 @@ void testGeneratePdfWithStringListFormatting() throws Exception { @Test void testGeneratePdfWithLocaleSpecificMapListFormatting() throws Exception { + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); // Setup credential with locale-specific map list Map subjectWithLocaleMap = new HashMap<>(); List> localeData = List.of( @@ -349,6 +353,7 @@ void testGeneratePdfWithLocaleSpecificMapListFormatting() throws Exception { @Test void testGeneratePdfWithNumericValueFormatting() throws Exception { + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); // Setup credential with numeric value Map subjectWithNumber = new HashMap<>(); subjectWithNumber.put("age", 25); @@ -374,6 +379,7 @@ void testGeneratePdfWithNumericValueFormatting() throws Exception { @Test void testFaceKeyFallbackFromPrimaryToSecondary() throws Exception { + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); // Setup: No "face" key, but has "photo" key Map subjectData = new HashMap<>(); subjectData.put("name", "John Doe"); @@ -407,6 +413,7 @@ void testFaceKeyFallbackFromPrimaryToSecondary() throws Exception { @Test void testFaceKeyFallbackToPortrait() throws Exception { + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); // Setup: No "face" or "photo", but has "portrait" Map subjectData = new HashMap<>(); subjectData.put("name", "John Doe"); @@ -436,6 +443,7 @@ void testFaceKeyFallbackToPortrait() throws Exception { @Test void testFaceKeyFallbackToImage() throws Exception { + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); // Setup: Only "image" key available Map subjectData = new HashMap<>(); subjectData.put("name", "John Doe"); @@ -465,6 +473,7 @@ void testFaceKeyFallbackToImage() throws Exception { @Test void testFaceKeyFallbackToPicture() throws Exception { + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); // Setup: Only "picture" key available Map subjectData = new HashMap<>(); subjectData.put("name", "John Doe"); @@ -494,6 +503,7 @@ void testFaceKeyFallbackToPicture() throws Exception { @Test void testFaceKeyPriorityOrder() throws Exception { + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); // Setup: Multiple face keys present - should use first available in priority order Map subjectData = new HashMap<>(); subjectData.put("name", "John Doe"); @@ -530,6 +540,7 @@ void testFaceKeyPriorityOrder() throws Exception { @Test void testOnlySelectedFaceKeyExcludedFromRowProperties() throws Exception { + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); // Setup: Multiple face keys - only the selected one ("image") should be excluded from rowProperties Map subjectData = new HashMap<>(); subjectData.put("name", "John Doe"); @@ -569,6 +580,7 @@ void testOnlySelectedFaceKeyExcludedFromRowProperties() throws Exception { @Test void testMultipleFaceKeysExcludedFromRowProperties() throws Exception { + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); // Setup: Multiple face keys present Map subjectData = new HashMap<>(); subjectData.put("name", "John Doe"); @@ -607,6 +619,7 @@ void testMultipleFaceKeysExcludedFromRowProperties() throws Exception { @Test void testNoFaceKeysAvailable() throws Exception { + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); // Setup: No face-related keys in credential Map subjectData = new HashMap<>(); subjectData.put("name", "John Doe"); @@ -636,4 +649,105 @@ void testNoFaceKeysAvailable() throws Exception { assertNotNull(result); // Should handle gracefully when no face keys are available ($face will be null) } + + @Test + void testMaskingForSelectivelyDisclosableClaimsAndNonMaskedFieldsInSDJWT() throws Exception { + when(credentialFormatHandlerFactory.getHandler("vc+sd-jwt")).thenReturn(sdJwtCredentialFormatHandler); + vcCredentialResponse.setFormat("vc+sd-jwt"); + String mockSDJWTString = "eyJ0eXAiOiJ2YytzZC1qd3QiLCJhbGciOiJFUzI1NiJ9.eyJfc2QiOlsiaGFzaDEiLCJoYXNoMiJdfQ.signature~disclosure1~disclosure2"; + vcCredentialResponse.setCredential(mockSDJWTString); + + try (MockedStatic mockedSDJWT = mockStatic(SDJWT.class)) { + SDJWT mockSDJWT = mock(SDJWT.class); + + mockedSDJWT.when(() -> SDJWT.parse(mockSDJWTString)).thenReturn(mockSDJWT); + + // Only name and age are selectively disclosable (will be masked) + Disclosure nameDisclosure = mock(Disclosure.class); + when(nameDisclosure.getClaimName()).thenReturn("name"); + + Disclosure ageDisclosure = mock(Disclosure.class); + when(ageDisclosure.getClaimName()).thenReturn("age"); + + when(mockSDJWT.getDisclosures()).thenReturn(List.of(nameDisclosure, ageDisclosure)); + + Map claims = new HashMap<>(); + claims.put("name", "John Doe"); // Will be masked + claims.put("age", "30"); // Will be masked + claims.put("email", "john@example.com"); // Not masked (not in disclosures) + claims.put("country", "USA"); // Not masked (not in disclosures) + + when(sdJwtCredentialFormatHandler.extractCredentialClaims(vcCredentialResponse)) + .thenReturn(claims); + + // Use LinkedHashMap instead of HashMap + LinkedHashMap> displayProps = new LinkedHashMap<>(); + displayProps.put("name", Map.of(createDisplayResponse("Full Name", "en"), "John Doe")); + displayProps.put("age", Map.of(createDisplayResponse("Age", "en"), "30")); + displayProps.put("email", Map.of(createDisplayResponse("Email", "en"), "john@example.com")); + displayProps.put("country", Map.of(createDisplayResponse("Country", "en"), "USA")); + + when(sdJwtCredentialFormatHandler.loadDisplayPropertiesFromWellknown(any(), any(), anyString())) + .thenReturn(displayProps); + + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())) + .thenReturn("Test Template"); + when(presentationService.constructPresentationDefinition(any())) + .thenReturn(new PresentationDefinitionDTO()); + when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( + "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, + "https://example.com/share", "", "en"); + + assertNotNull(result); + mockedSDJWT.verify(() -> SDJWT.parse(mockSDJWTString)); + // This test verifies that: + // - Fields with disclosures (name, age) are masked with maskedClaims + // - Fields without disclosures (email, country) are shown normally + } + } + + @Test + void testNoMaskingForLdpFormat() throws Exception { + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); + // Setup LDP-VC format (not SD-JWT) + vcCredentialResponse.setFormat("ldp_vc"); + + // This test uses the LDP-VC handler (already set up in @BeforeEach) + Map claims = new HashMap<>(); + claims.put("name", "John Doe"); + claims.put("age", "30"); + + // Use the specific LDP-VC handler + when(credentialFormatHandler.extractCredentialClaims(vcCredentialResponse)) + .thenReturn(claims); + + // Use LinkedHashMap instead of HashMap + LinkedHashMap> displayProps = new LinkedHashMap<>(); + displayProps.put("name", Map.of(createDisplayResponse("Full Name", "en"), "John Doe")); + displayProps.put("age", Map.of(createDisplayResponse("Age", "en"), "30")); + + when(credentialFormatHandler.loadDisplayPropertiesFromWellknown(any(), any(), anyString())) + .thenReturn(displayProps); + + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())) + .thenReturn("Test Template"); + when(presentationService.constructPresentationDefinition(any())) + .thenReturn(new PresentationDefinitionDTO()); + when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( + "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, + "https://example.com/share", "", "en"); + + assertNotNull(result); + } + + private CredentialIssuerDisplayResponse createDisplayResponse(String name, String locale) { + CredentialIssuerDisplayResponse response = new CredentialIssuerDisplayResponse(); + response.setName(name); + response.setLocale(locale); + return response; + } } From dfd835c42e61914d4ce51ccb465fdc16cfe0d54c Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Thu, 28 Aug 2025 18:53:25 +0530 Subject: [PATCH 761/860] [Injiweb 1639] update the readme file to make the point about cache provider configuration more readable (#852) --- .talismanrc | 2 +- README.md | 83 ++++++++++++++++--- pom.xml | 2 +- .../io/mosip/mimoto/config/CacheConfig.java | 2 +- .../AuthorizationServerWellKnownResponse.java | 2 +- .../mimoto/CredentialIssuerConfiguration.java | 2 + 6 files changed, 78 insertions(+), 15 deletions(-) diff --git a/.talismanrc b/.talismanrc index 99e32d052..be2dc0733 100644 --- a/.talismanrc +++ b/.talismanrc @@ -126,7 +126,7 @@ fileignoreconfig: - filename: docker-compose/config/mimoto-default.properties checksum: fc10e892f9bc2a220b7f5cd3e5ea606d650b8a43b4c430d19d20ce7ecc5cd33d - filename: README.md - checksum: 6b99e539be1385e7b6d6c46a4c089eca72a092ea798d1cc27b294b5a3e7c148a + checksum: a22d46c4cf0c09d3a2a3665400118c2b919158ddbf6c20773955b2c7c72bb91f - filename: docker-compose/README.md checksum: f70385d1be6b7945df1afac0890bdce5ecceb63cdba08bdd3f760f40f843c630 - filename: src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java diff --git a/README.md b/README.md index 77dd1b193..edc5f6c77 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ This repository contains source code for backend service of Inji Mobile and Inji ## Build & run (for developers) The project requires JDK 21, postgres and google client credentials + ### without docker-compose Build & install 1. Install pgadmin and update application-default.properties file with values ```properties @@ -16,16 +17,16 @@ The project requires JDK 21, postgres and google client credentials spring.datasource.password= ``` -2. Install Redis or any other cache provider only if you want to store the application data or HTTP sessions in that specific provider instead of the default Caffeine cache when running Mimoto through the IDE or in Docker. - * To use a specific provider, update the relevant properties and add the corresponding configuration in application-local.properties (for IDE) or mimoto-default.properties (for Docker). - **Example for Redis:** - ```properties - spring.session.store-type=redis #To store HTTP sessions in Redis - spring.cache.type=redis #To store application data in Redis - ``` - * Add the required redis configurations in [application-local.properties](src/main/resources/application-local.properties) similar to those added in [application-default.properties](src/main/resources/application-default.properties) file. Refer to the properties starting with `spring.data.redis` and `spring.session.redis`. - * When running in Docker, ensure the corresponding Docker image/service is either included in your docker-compose.yml file or the required image is pulled on your machine and running. +2. **Configuring Cache Providers:** + + By default, Mimoto uses Caffeine, a fast in-memory cache. This works well if you're running just one instance of Mimoto. + + But if you're running multiple Mimoto instances (like in Docker Swarm, Kubernetes, or a load-balanced setup), each instance has its own separate cache with Caffeine — they don’t talk to each other. + In that case, switching to a shared cache like Redis is important. Redis lets all Mimoto instances share the same cached data, which helps keep things consistent and improves performance in distributed setups. + + For detailed setup instructions (including running Redis with Docker CLI and updating configuration), see the [Cache Providers Setup Guide](#cache-providers-setup-guide) section. + 3. Refer to the [How to create Google Client Credentials](docker-compose/README.md#how-to-create-google-client-credentials) section to create Google client credentials and update below properties in `application-local.properties`. ``` @@ -68,6 +69,66 @@ The project requires JDK 21, postgres and google client credentials mvn spring-boot:run -Dspring.profiles.active=local ``` +## Cache Providers Setup Guide + +To use Redis (or any other cache provider), the service must be **running** and **accessible to Mimoto**. Both services (cache provider and Mimoto) must be on the same Docker network. +This can be done by adding them to a shared network in your `docker-compose.yml` file, or by using the following commands if they are running separately. + +**Example: Using Redis as Cache Provider** + +1. **Ensure Redis Service is Available and Connected:** + + - **Using Docker Compose:** You can run Redis alongside Mimoto by adding the below lines in docker-compose.yml. Docker Compose ensures both services run on the same network automatically. + 1. Add the Redis service under the services section: + ```yaml + redis: + image: redis:alpine + container_name: 'redis' + ports: + - "6379:6379" + volumes: + - redis-data:/data + ``` + 2. Make Redis a dependency for the Mimoto service: + ```yaml + mimoto-service: + depends_on: + - redis + ``` + 3. Add Redis data volume in the volumes section: + ```yaml + volumes: + redis-data: + ``` + + - **Or, run Redis using Docker while starting Mimoto through your IDE:** + - Use the following Docker command to start the Redis service and expose it on the default port 6379. Make sure this port is accessible from your local machine. + ```bash + docker pull redis:alpine # Pull the Redis image if not already available + docker run -d --name redis -p 6379:6379 redis:alpine # Start a Redis container named 'redis' and expose it on port 6379 + ``` + - Start Mimoto normally, following the instructions mentioned in [Build & run (for developers) section](#build--run-for-developers). + +2. **Update the following properties** in + - [application-local.properties](src/main/resources/application-local.properties) *(when running through IDE)*, or + - [mimoto-default.properties](docker-compose/config/mimoto-default.properties) *(when running through Docker)*: + ```properties + spring.session.store-type=redis # Store HTTP sessions in Redis + spring.cache.type=redis # Store application data in Redis + ``` + +3. **Add and update the required Redis configurations** in + - [application-local.properties](src/main/resources/application-local.properties) or + - [mimoto-default.properties](docker-compose/config/mimoto-default.properties), similar to those in the [application-default.properties](src/main/resources/application-default.properties) file. + Look for properties starting with: + - `spring.data.redis.*` + - `spring.session.redis.*` + +4. **Check the cached data of the redis by running the following command:** + ```bash + docker exec -it redis redis-cli + ``` + ### with docker-compose 1. To simplify running mimoto in local for developers we have added [Docker Compose Setup](docker-compose/README.md). This docker-compose includes mimoto service and nginx service to server static data. 2. Follow the below steps to use custom build image in docker-compose @@ -76,8 +137,8 @@ The project requires JDK 21, postgres and google client credentials * Build docker image by running the below command in the directory where Dockerfile is present, use any image tag ```docker build -t .``` * Use newly built docker image in docker-compose file - + ## [Deployment in K8 cluster](deploy/README.md) - + ## Credits Credits listed [here](/Credits.md) \ No newline at end of file diff --git a/pom.xml b/pom.xml index 3ce8445b3..7c233abaa 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 io.mosip mimoto - 0.19.0-SNAPSHOT + 0.20.0-SNAPSHOT mimoto https://github.com/mosip/mimoto Mobile server backend supporting Inji. diff --git a/src/main/java/io/mosip/mimoto/config/CacheConfig.java b/src/main/java/io/mosip/mimoto/config/CacheConfig.java index 5c408a0eb..d60dde0fe 100644 --- a/src/main/java/io/mosip/mimoto/config/CacheConfig.java +++ b/src/main/java/io/mosip/mimoto/config/CacheConfig.java @@ -106,7 +106,6 @@ public CacheManagerCustomizer caffeineCacheManagerCustomiz }; } - /** * This method defines a RedisCacheManagerBuilderCustomizer bean to customize the * auto-configured RedisCacheManager. It registers per-cache configurations. @@ -128,6 +127,7 @@ public RedisCacheManagerBuilderCustomizer redisCacheManagerBuilderCustomizer() { .entryTtl(Duration.ofMinutes(defaultCacheExpiryTimeInMin)) .disableCachingNullValues(); + // Per-cache configs Map cacheConfigurations = Map.of( ISSUER_WELLKNOWN_CACHE, createRedisConfigWithTtl(defaultCacheConfig, issuerWellknownExpiryTimeInMin), ISSUERS_CONFIG_CACHE, createRedisConfigWithTtl(defaultCacheConfig, issuersConfigExpiryTimeInMin), diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/AuthorizationServerWellKnownResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/AuthorizationServerWellKnownResponse.java index f21523324..4680488e1 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/AuthorizationServerWellKnownResponse.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/AuthorizationServerWellKnownResponse.java @@ -32,7 +32,7 @@ public class AuthorizationServerWellKnownResponse { @NotBlank @URL @SerializedName("token_endpoint") - @JsonProperty(value = "token_endpoint", access = JsonProperty.Access.WRITE_ONLY) + @JsonProperty(value = "token_endpoint") @Schema(description = "Endpoint for getting the token from the authorization server") private String tokenEndpoint; } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerConfiguration.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerConfiguration.java index c8b0eef24..f996914a2 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerConfiguration.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerConfiguration.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.dto.mimoto; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.AllArgsConstructor; import lombok.Data; @@ -17,5 +18,6 @@ public class CredentialIssuerConfiguration { private Map credentialConfigurationsSupported; + @JsonIgnoreProperties({"token_endpoint"}) private AuthorizationServerWellKnownResponse authorizationServerWellKnownResponse; } \ No newline at end of file From 584059bd6d455ac98bd036e276a5a67deb84379b Mon Sep 17 00:00:00 2001 From: Praful Rakhade Date: Fri, 29 Aug 2025 16:01:22 +0530 Subject: [PATCH 762/860] Updated Dockerfile base image (#857) Signed-off-by: Praful Rakhade --- Dockerfile | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index f83100aa6..df50a2743 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM eclipse-temurin:21-jre-alpine +FROM eclipse-temurin:21-jre ARG SOURCE ARG COMMIT_HASH @@ -55,11 +55,11 @@ ARG container_user_uid=1002 ARG container_user_gid=1001 # install packages and create user -RUN apk -q update \ -&& apk add -q unzip wget \ -&& addgroup -g ${container_user_gid} ${container_user_group} \ -&& adduser -s /bin/sh -u ${container_user_uid} -G ${container_user_group} -h /home/${container_user} --disabled-password ${container_user} - +RUN apt-get update -qq && \ + apt-get install -y -qq unzip wget adduser && \ + groupadd -g ${container_user_gid} ${container_user_group} && \ + useradd -u ${container_user_uid} -g ${container_user_group} -d /home/${container_user} -m -s /bin/sh ${container_user} && \ + apt-get clean && rm -rf /var/lib/apt/lists/* # set working directory for the user WORKDIR /home/${container_user} From f59235b6ad60120d0f5951362d1b984d935b4306 Mon Sep 17 00:00:00 2001 From: cyber-titan <124165966+cyber-titan@users.noreply.github.com> Date: Wed, 3 Sep 2025 11:58:46 +0530 Subject: [PATCH 763/860] injiweb-1690-vc-render-lib fixed null pointer exception (#858) Signed-off-by: cyber-titan <124165966+cyber-titan@users.noreply.github.com> --- .../service/CredentialPDFGeneratorService.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java b/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java index ae3b4112e..e5b192eca 100644 --- a/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java +++ b/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java @@ -214,14 +214,22 @@ private String formatValue(Object val, String locale) { return String.join(", ", (List) list); } else if (list.getFirst() instanceof Map) { return list.stream() + .filter(Objects::nonNull) .map(item -> (Map) item) - .filter(m -> LocaleUtils.matchesLocale(m.get("language").toString(), locale)) - .map(m -> m.get("value").toString()) + .filter(m -> { + Object lang = m.get("language"); // Safely get language + return lang != null && LocaleUtils.matchesLocale(lang.toString(), locale); + }) + .map(m -> { + Object value = m.get("value"); // Safely get value + return value != null ? value.toString() : null; + }) + .filter(Objects::nonNull) .findFirst() .orElse(""); } } - return val.toString(); + return val != null ? val.toString() : ""; } private ByteArrayInputStream renderVCInCredentialTemplate(Map data, String issuerId, String credentialConfigurationId) { From 2eafb1b1daec74ae8443e1848de95df3d11011ed Mon Sep 17 00:00:00 2001 From: cyber-titan <124165966+cyber-titan@users.noreply.github.com> Date: Mon, 8 Sep 2025 18:47:13 +0530 Subject: [PATCH 764/860] injiweb-1638-verify-doc-redis-postgres added postgres setup (#862) --- README.md | 57 ++++++++++++++++++++++++++++++++++------ docker-compose/README.md | 7 ++--- 2 files changed, 53 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index edc5f6c77..a8f70d45b 100644 --- a/README.md +++ b/README.md @@ -27,17 +27,58 @@ The project requires JDK 21, postgres and google client credentials For detailed setup instructions (including running Redis with Docker CLI and updating configuration), see the [Cache Providers Setup Guide](#cache-providers-setup-guide) section. -3. Refer to the [How to create Google Client Credentials](docker-compose/README.md#how-to-create-google-client-credentials) section to create + +3. **Configuring Postgres Database:** + 1. **Ensure Postgres Service is Available and Connected** + - **Using Local Postgres Installation:** If you have Postgres installed locally, run the database initialization scripts: + ```bash + cd db_scripts/inji_mimoto + ./deploy.sh deploy.properties + ``` + * If needed, update the database connection properties in [application-local.properties](src/main/resources/application-local.properties) with your local Postgres credentials. + + - **Using Docker Compose:** If you don't have postgres setup in your local you can run Postgres along with Mimoto by using the `postgres` service in [docker-compose.yml](docker-compose/docker-compose.yml). + + - **Or, run Postgres using Docker while starting Mimoto through your IDE:** + * Use the following Docker command to start the Postgres service and expose it on the default port 5432. Make sure this port is accessible from your local machine. + ```bash + docker pull postgres:latest # Pull the Postgres image if not already available + docker run -d --name postgres \ + -e POSTGRES_USER=postgres \ + -e POSTGRES_PASSWORD=postgres \ + -e POSTGRES_DB=inji_mimoto \ + -p 5432:5432 \ + postgres:latest + ``` + * Start Mimoto normally, following the instructions mentioned in [Build & run (for developers) section](#build--run-for-developers). + 2. **Update the following properties** in + - [application-local.properties](src/main/resources/application-local.properties) *(when running through IDE)*, or + - [mimoto-default.properties](docker-compose/config/mimoto-default.properties) *(when running through Docker)*: + + **Look for properties starting with:** + - `spring.datasource.*` + - `spring.datasource.*` + - `mosip.mimoto.database.*` + 3. **Check data in postgres by using the following commands** + ```bash + docker exec -it postgres psql -U postgres -d inji_mimoto # connect to container + + \dt mimoto.* # to see all tables in mimoto schema + + SELECT * FROM mimoto.; # to see data in a table + ``` + +4. Refer to the [How to create Google Client Credentials](docker-compose/README.md#how-to-create-google-client-credentials) section to create Google client credentials and update below properties in `application-local.properties`. ``` spring.security.oauth2.client.registration.google.client-id= spring.security.oauth2.client.registration.google.client-secret= ``` -4. Add identity providers as issuers in the `mimoto-issuers-config.json` file of [resources folder](src/main/resources/mimoto-issuers-config.json). For each provider, create a corresponding object with its issuer-specific configuration. Refer to the [Issuers Configuration](docker-compose/README.md#mimoto-issuers-configuration) section for details on how to structure this file and understand each field's purpose and what values need to be updated. +5. Add identity providers as issuers in the `mimoto-issuers-config.json` file of [resources folder](src/main/resources/mimoto-issuers-config.json). For each provider, create a corresponding object with its issuer-specific configuration. Refer to the [Issuers Configuration](docker-compose/README.md#mimoto-issuers-configuration) section for details on how to structure this file and understand each field's purpose and what values need to be updated. -5. Add or update the verifiers clientId, redirect and response Uris in `mimoto-trusted-verifiers.json` file of [resources folder](src/main/resources/mimoto-trusted-verifiers.json) for Verifiable credential Online Sharing. +6. Add or update the verifiers clientId, redirect and response Uris in `mimoto-trusted-verifiers.json` file of [resources folder](src/main/resources/mimoto-trusted-verifiers.json) for Verifiable credential Online Sharing. -6. Keystore(oidckeystore.p12) Configuration: +7. Keystore(oidckeystore.p12) Configuration: In the root directory, create a certs folder and generate an OIDC client. Add the onboard client’s key to the oidckeystore.p12 file and place this file inside the certs folder. Refer to the [official documentation](https://docs.inji.io/inji-wallet/inji-mobile/technical-overview/customization-overview/credential_providers) for guidance on how to create the **oidckeystore.p12** file and add the OIDC client key to it. * The **oidckeystore.p12** file stores keys and certificates, each identified by an alias (e.g., mpartner-default-mimoto-insurance-oidc). Mimoto uses this alias to find the correct entry and access the corresponding private key during the authentication flow. @@ -52,19 +93,19 @@ The project requires JDK 21, postgres and google client credentials ``` * Mimoto also uses this same keystore file (oidckeystore.p12) to store keys generated at service startup, which are essential for performing encryption and decryption operations through the KeyManager service. -7. To configure any Mobile Wallet specific configurations refer to the [Inji Mobile Wallet Configuration](docker-compose/README.md#inji-mobile-wallet-configuration) section. +8. To configure any Mobile Wallet specific configurations refer to the [Inji Mobile Wallet Configuration](docker-compose/README.md#inji-mobile-wallet-configuration) section. -8. Run the SQLs using /deploy.sh script. from [db_scripts folder](db_scripts/inji_mimoto) +9. Run the SQLs using /deploy.sh script. from [db_scripts folder](db_scripts/inji_mimoto) ``` ./deploy.sh deploy.properties ``` -9. Build the jar +10. Build the jar ``` mvn clean install -Dgpg.skip=true -Dmaven.javadoc.skip=true -DskipTests=true ``` -10. Run following command +11. Run following command ``` mvn spring-boot:run -Dspring.profiles.active=local ``` diff --git a/docker-compose/README.md b/docker-compose/README.md index 48f0aa7e7..5cf1819ce 100644 --- a/docker-compose/README.md +++ b/docker-compose/README.md @@ -40,11 +40,12 @@ This is the docker-compose setup to run mimoto which act as BFF for Inji mobile ``` - **Running Mimoto in IDE and other services like `datashare service` via Docker Compose:** 1. In `docker-compose.yml`, update the `DATASHARE_DOMAIN` environment variable for the `Datashare service` to `localhost:8097`. - 2. Then, start your dependent services by running the following command + 2. Ensure that the `mimoto-service` service (or) any other service is commented out in the `docker-compose.yml` file which you will be running locally. + 3. Then, start your dependent services by running the following command ```bash - docker-compose up # Use this to comment inji web service and start all the other services defined in docker-compose.yml + docker-compose up # Use this to start all the services defined in docker-compose.yml # OR - docker-compose up datashare other_service_name # To start specific services (replace with actual names) + docker-compose up datashare postgres other_service_name # To start specific services (replace with actual names from docker-compose.yml) ``` **Note:** Use the **-d** flag with docker-compose up to run the services in detached (background) mode. From 488223f77bf69a87c2304bb3aca3710c82485373 Mon Sep 17 00:00:00 2001 From: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Date: Fri, 12 Sep 2025 09:46:19 +0530 Subject: [PATCH 765/860] [INJIWEB-1704] sync develop branch with missing changes from release 0.19.x branch (#876) Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> --- .../sql/0.13.1_to_0.14.0_rollback.sql | 0 docs/VCFormatExtension.md | 7 +- docs/WalletUnlockProcess.md | 2 +- pom.xml | 2 +- .../controller/CredentialShareController.java | 1 - .../mimoto/controller/IdpController.java | 6 +- .../service/impl/CredentialServiceImpl.java | 2 +- .../service/impl/DataShareServiceImpl.java | 4 +- .../impl/VcSdJwtCredentialFormatHandler.java | 2 +- .../service/impl/VerifierServiceImpl.java | 4 - .../java/io/mosip/mimoto/util/JwtUtils.java | 4 +- .../io/mosip/mimoto/util/WalletValidator.java | 4 +- .../mimoto/util/WebSubSubscriptionHelper.java | 4 +- .../CredentialPDFGeneratorServiceTest.java | 134 ++++++++++++++++++ 14 files changed, 153 insertions(+), 23 deletions(-) delete mode 100644 db_upgrade_script/inji_mimoto/sql/0.13.1_to_0.14.0_rollback.sql diff --git a/db_upgrade_script/inji_mimoto/sql/0.13.1_to_0.14.0_rollback.sql b/db_upgrade_script/inji_mimoto/sql/0.13.1_to_0.14.0_rollback.sql deleted file mode 100644 index e69de29bb..000000000 diff --git a/docs/VCFormatExtension.md b/docs/VCFormatExtension.md index 83a48e404..5d9cac266 100644 --- a/docs/VCFormatExtension.md +++ b/docs/VCFormatExtension.md @@ -74,10 +74,11 @@ Before starting the implementation, check existing handlers implementation ### 2. Implement New Handler -Create a new handler class implementing `CredentialFormatHandler`: + +Create a new handler class implementing `CredentialFormatHandler` (with a @Component qualifier name required for injection):: ```java -@Component +@Component("vc+sd-jwt") @Slf4j public class SDJWTCredentialFormatHandler implements CredentialFormatHandler { @@ -93,7 +94,7 @@ public class SDJWTCredentialFormatHandler implements CredentialFormatHandler { ### 3. Handler Registration -New handler will be auto-discovered by Spring. The factory automatically injects all handlers: +New handler will be auto-discovered by Spring. The factory automatically injects all handlers based on credential format: **Reference**: [`CredentialFormatHandlerFactory.java`](https://github.com/mosip/mimoto/blob/release-0.19.x/src/main/java/io/mosip/mimoto/service/CredentialFormatHandlerFactory.java) diff --git a/docs/WalletUnlockProcess.md b/docs/WalletUnlockProcess.md index a585ad168..a4d230780 100644 --- a/docs/WalletUnlockProcess.md +++ b/docs/WalletUnlockProcess.md @@ -135,7 +135,7 @@ participant WalletRepository ## Configuration Configurable properties that govern the entire Passcode flow within the Wallet unlock process are defined in the -`application-local.properties` file for the local setup, and in the `mimoto-default.properties` file for the environment setup. +`application-default.properties` file for the local setup, and in the `mimoto-default.properties` file for the environment setup. #### Passcode Control Properties - `wallet.passcode.retryBlockedUntil`: Duration for which the Wallet remains in temporary lock state (in milliseconds) diff --git a/pom.xml b/pom.xml index 7c233abaa..b279f5f51 100644 --- a/pom.xml +++ b/pom.xml @@ -144,7 +144,7 @@ io.mosip vcverifier-jar - 1.4.0-SNAPSHOT + 1.4.0 io.micrometer diff --git a/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java b/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java index fc2e93093..9308546e7 100644 --- a/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java +++ b/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java @@ -87,7 +87,6 @@ public class CredentialShareController { public ResponseEntity handleSubscribeEvent(@RequestBody EventModel eventModel) throws Exception { log.info("Received websub event:: transaction id = " + eventModel.getEvent().getTransactionId()); - log.debug("Received websub event:: " + JsonUtils.javaObjectToJsonString(eventModel)); GenericResponseDTO responseDTO = new GenericResponseDTO(); Path vcRequestIdPath = Path.of( utilities.getDataPath(), diff --git a/src/main/java/io/mosip/mimoto/controller/IdpController.java b/src/main/java/io/mosip/mimoto/controller/IdpController.java index 43ea97ec4..df676c50d 100644 --- a/src/main/java/io/mosip/mimoto/controller/IdpController.java +++ b/src/main/java/io/mosip/mimoto/controller/IdpController.java @@ -54,7 +54,7 @@ public class IdpController { @PostMapping(value = "/binding-otp", produces = MediaType.APPLICATION_JSON_VALUE) @SuppressWarnings("unchecked") public ResponseEntity> otpRequest(@Valid @RequestBody BindingOtpRequestDto requestDTO, BindingResult result) throws Exception { - log.debug("Received binding-otp request : " + JsonUtils.javaObjectToJsonString(requestDTO)); + log.debug("Received binding-otp request"); requestValidator.validateInputRequest(result); requestValidator.validateNotificationChannel(requestDTO.getRequest().getOtpChannels()); ResponseWrapper responseWrapper = new ResponseWrapper<>(); @@ -79,7 +79,7 @@ public ResponseEntity> otpRequest(@Valid public ResponseEntity> request(@RequestBody WalletBindingRequestDTO requestDTO) throws Exception { - log.debug("Received wallet-binding request : " + JsonUtils.javaObjectToJsonString(requestDTO)); + log.debug("Received wallet-binding request "); ResponseWrapper responseWrapper = new ResponseWrapper<>(); try { WalletBindingInnerRequestDto innerRequestDto = new WalletBindingInnerRequestDto(); @@ -101,7 +101,7 @@ public ResponseEntity> request(@Reques responseWrapper = joseUtil.addThumbprintAndKeyId(internalResponse); return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); } catch (Exception e) { - log.error("Wallet binding error occurred for transaction id " + requestDTO.getRequest().getIndividualId(), e); + log.error("Wallet binding error occurred ", e); String[] errorObj = Utilities.handleExceptionWithErrorCode(e, PlatformErrorMessages.MIMOTO_WALLET_BINDING_EXCEPTION.getCode()); List errors = Utilities.getErrors(errorObj[0], errorObj[1]); responseWrapper.setResponse(null); diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java index 506d0ca42..ea13215f4 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java @@ -95,7 +95,7 @@ public VCCredentialResponse downloadCredential(String credentialEndpoint, VCCred vcCredentialRequest, VerifiableCredentialResponse.class, accessToken); if (response == null) throw new InvalidCredentialResourceException("VC Credential Issue API not accessible"); - log.debug("VC Credential Response is {} " , response); + log.debug("VC Credential Response received"); return new VCCredentialResponse(vcCredentialRequest.getFormat(), response.getCredential()); } diff --git a/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java index 96c560c11..222e6e3b6 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java @@ -65,7 +65,7 @@ public String getFilename() { HttpEntity> requestEntity = new HttpEntity<>(map, headers); DataShareResponseWrapperDTO dataShareResponseWrapperDTO = pushCredentialIntoDataShare(requestEntity, credentialValidity); - log.info("Data pushed into DataShare -> " + dataShareResponseWrapperDTO); + log.info("Data pushed into DataShare -> "); return dataShareResponseWrapperDTO.getDataShare().getUrl(); } @@ -111,7 +111,7 @@ public VCCredentialResponse downloadCredentialFromDataShare(PresentationRequest } VCCredentialResponse vcCredentialResponse = objectMapper.readValue(vcCredentialResponseString, VCCredentialResponse.class); - log.info("Completed Mapping the Credential to Object => " + vcCredentialResponse ); + log.info("Completed Mapping the Credential to Object => "); if(vcCredentialResponse.getCredential() == null){ DataShareResponseDto dataShareResponse = objectMapper.readValue(vcCredentialResponseString, DataShareResponseDto.class); String errorCode = dataShareResponse.getErrors().get(0).getErrorCode(); diff --git a/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java b/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java index 4a63d48fd..f3a522dce 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java +++ b/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java @@ -43,7 +43,7 @@ public Map extractCredentialClaims(VCCredentialResponse vcCreden if (credential instanceof String) { return extractClaimsFromSdJwt((String) credential); } - log.warn("Unexpected credential format in response for SD-JWT VC: {}", credential); + log.warn("Unexpected credential format in response for SD-JWT VC:"); return Collections.emptyMap(); } diff --git a/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java index 127244e51..6c522c553 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java @@ -11,8 +11,6 @@ import io.mosip.mimoto.util.Utilities; import lombok.extern.slf4j.Slf4j; import org.apache.commons.validator.routines.UrlValidator; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.AntPathMatcher; @@ -41,8 +39,6 @@ public class VerifierServiceImpl implements VerifierService { urlValidator = new UrlValidator(ALLOW_ALL_SCHEMES+ALLOW_LOCAL_URLS); } - private final Logger logger = LoggerFactory.getLogger(VerifierServiceImpl.class); - public VerifiersDTO getTrustedVerifiers() throws ApiNotAccessibleException, JsonProcessingException { String trustedVerifiersJsonValue = utilities.getTrustedVerifiersJsonValue(); if (trustedVerifiersJsonValue == null) { diff --git a/src/main/java/io/mosip/mimoto/util/JwtUtils.java b/src/main/java/io/mosip/mimoto/util/JwtUtils.java index 3944fa3fa..ae7fd5650 100644 --- a/src/main/java/io/mosip/mimoto/util/JwtUtils.java +++ b/src/main/java/io/mosip/mimoto/util/JwtUtils.java @@ -28,7 +28,7 @@ public static Map parseJwtPayload(String jwt) { try { String[] parts = jwt.split("\\."); if (parts.length < 3) { - log.error("Invalid JWT format for payload parsing: {}", jwt); + log.error("Invalid JWT format for payload parsing: "); return Collections.emptyMap(); } String payloadJson = new String(Base64.getUrlDecoder().decode(parts[1]), StandardCharsets.UTF_8); @@ -46,7 +46,7 @@ public static Map parseJwtHeader(String jwt) { try { String[] parts = jwt.split("\\."); if (parts.length < 3) { - log.warn("Invalid JWT format for header parsing: {}", jwt); + log.warn("Invalid JWT format for header parsing: "); return Collections.emptyMap(); } String headerJson = new String(Base64.getUrlDecoder().decode(parts[0]), StandardCharsets.UTF_8); diff --git a/src/main/java/io/mosip/mimoto/util/WalletValidator.java b/src/main/java/io/mosip/mimoto/util/WalletValidator.java index e8ffa503d..d7f9c59a5 100644 --- a/src/main/java/io/mosip/mimoto/util/WalletValidator.java +++ b/src/main/java/io/mosip/mimoto/util/WalletValidator.java @@ -60,9 +60,9 @@ public void validateWalletName(String name) throws InvalidRequestException { * @throws InvalidRequestException If the Wallet PIN is invalid. */ public void validateWalletPin(String pin) throws InvalidRequestException { - log.debug("Validating Wallet PIN: {}", pin); + log.debug("Validating Wallet PIN"); if (pin == null || !pin.matches(pinRegex)) { - log.warn("Invalid PIN: {}", pin); + log.warn("Invalid PIN"); throw new InvalidRequestException(ErrorConstants.INVALID_REQUEST.getErrorCode(), "PIN must be numeric with 6 digits"); } } diff --git a/src/main/java/io/mosip/mimoto/util/WebSubSubscriptionHelper.java b/src/main/java/io/mosip/mimoto/util/WebSubSubscriptionHelper.java index 4396d16ca..2c5941bca 100644 --- a/src/main/java/io/mosip/mimoto/util/WebSubSubscriptionHelper.java +++ b/src/main/java/io/mosip/mimoto/util/WebSubSubscriptionHelper.java @@ -55,7 +55,7 @@ public SubscriptionChangeResponse unSubscribeEvent(String topic, String callBack unsubscriptionRequest.setCallbackURL(callBackUrl); unsubscriptionRequest.setHubURL(webSubHubSubUrl); unsubscriptionRequest.setTopic(topic); - log.info("Unsubscription request : {}", unsubscriptionRequest); + log.info("Unsubscription request : "); return sb.unSubscribe(unsubscriptionRequest); } catch (WebSubClientException e) { log.info("Websub unsubscription error: {} ", e.getMessage()); @@ -70,7 +70,7 @@ public SubscriptionChangeResponse subscribeEvent(String topic, String callBackUr subscriptionRequest.setHubURL(webSubHubSubUrl); subscriptionRequest.setSecret(secret); subscriptionRequest.setTopic(topic); - log.info("Subscription request : {}", subscriptionRequest); + log.info("Subscription request : "); return sb.subscribe(subscriptionRequest); } catch (WebSubClientException e) { log.info("Websub subscription error: {}", e.getMessage()); diff --git a/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java index a1961e757..86cf7cf56 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java @@ -750,4 +750,138 @@ private CredentialIssuerDisplayResponse createDisplayResponse(String name, Strin response.setLocale(locale); return response; } + + @Test + void testFormatValueWithMap() throws Exception { + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); + + // Setup credential with map containing "value" + Map subject = Map.of("education", Map.of("value", "Bachelor's Degree")); + when(credentialFormatHandler.extractCredentialClaims(vcCredentialResponse)).thenReturn(subject); + + LinkedHashMap> displayProps = new LinkedHashMap<>(); + displayProps.put("education", Map.of(createDisplayResponse("Education", "en"), Map.of("value", "Bachelor's Degree"))); + when(credentialFormatHandler.loadDisplayPropertiesFromWellknown(any(), any(), anyString())).thenReturn(displayProps); + + credentialsSupportedResponse.getCredentialDefinition().getCredentialSubject().put("education", createDisplay("Education")); + credentialsSupportedResponse.setOrder(List.of("education")); + + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())) + .thenReturn("Education: $rowProperties.education"); + when(presentationService.constructPresentationDefinition(any())).thenReturn(new PresentationDefinitionDTO()); + when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( + "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, "", "", "en"); + + assertNotNull(result); // Verifies formatValue extracted "Bachelor's Degree" + } + + @Test + void testFormatValueWithStringList() throws Exception { + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); + + // Setup credential with list of strings + Map subject = Map.of("skills", List.of("Java", "Spring", "Boot")); + when(credentialFormatHandler.extractCredentialClaims(vcCredentialResponse)).thenReturn(subject); + + LinkedHashMap> displayProps = new LinkedHashMap<>(); + displayProps.put("skills", Map.of(createDisplayResponse("Skills", "en"), List.of("Java", "Spring", "Boot"))); + when(credentialFormatHandler.loadDisplayPropertiesFromWellknown(any(), any(), anyString())).thenReturn(displayProps); + + credentialsSupportedResponse.getCredentialDefinition().getCredentialSubject().put("skills", createDisplay("Skills")); + credentialsSupportedResponse.setOrder(List.of("skills")); + + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())) + .thenReturn("Skills: $rowProperties.skills"); + when(presentationService.constructPresentationDefinition(any())).thenReturn(new PresentationDefinitionDTO()); + when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( + "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, "", "", "en"); + + assertNotNull(result); // Verifies formatValue joined to "Java, Spring, Boot" + } + + @Test + void testFormatValueWithLocaleMapList() throws Exception { + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); + + // Setup credential with locale-specific list + List> localeData = List.of( + Map.of("language", "en", "value", "English Name"), + Map.of("language", "fr", "value", "French Name") + ); + Map subject = Map.of("name", localeData); + when(credentialFormatHandler.extractCredentialClaims(vcCredentialResponse)).thenReturn(subject); + + LinkedHashMap> displayProps = new LinkedHashMap<>(); + displayProps.put("name", Map.of(createDisplayResponse("Name", "en"), localeData)); + when(credentialFormatHandler.loadDisplayPropertiesFromWellknown(any(), any(), anyString())).thenReturn(displayProps); + + credentialsSupportedResponse.getCredentialDefinition().getCredentialSubject().put("name", createDisplay("Name")); + credentialsSupportedResponse.setOrder(List.of("name")); + + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())) + .thenReturn("Name: $rowProperties.name"); + when(presentationService.constructPresentationDefinition(any())).thenReturn(new PresentationDefinitionDTO()); + when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( + "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, "", "", "en"); + + assertNotNull(result); // Verifies formatValue selected "English Name" for locale "en" + } + + @Test + void testFormatValueWithEmptyList() throws Exception { + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); + + // Setup credential with empty list + Map subject = Map.of("tags", List.of()); + when(credentialFormatHandler.extractCredentialClaims(vcCredentialResponse)).thenReturn(subject); + + LinkedHashMap> displayProps = new LinkedHashMap<>(); + displayProps.put("tags", Map.of(createDisplayResponse("Tags", "en"), List.of())); + when(credentialFormatHandler.loadDisplayPropertiesFromWellknown(any(), any(), anyString())).thenReturn(displayProps); + + credentialsSupportedResponse.getCredentialDefinition().getCredentialSubject().put("tags", createDisplay("Tags")); + credentialsSupportedResponse.setOrder(List.of("tags")); + + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())) + .thenReturn("Tags: $rowProperties.tags"); + when(presentationService.constructPresentationDefinition(any())).thenReturn(new PresentationDefinitionDTO()); + when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( + "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, "", "", "en"); + + assertNotNull(result); // Verifies formatValue returned "" for empty list + } + + @Test + void testFormatValueWithPrimitive() throws Exception { + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); + + // Setup credential with number + Map subject = Map.of("age", 25); + when(credentialFormatHandler.extractCredentialClaims(vcCredentialResponse)).thenReturn(subject); + + LinkedHashMap> displayProps = new LinkedHashMap<>(); + displayProps.put("age", Map.of(createDisplayResponse("Age", "en"), 25)); + when(credentialFormatHandler.loadDisplayPropertiesFromWellknown(any(), any(), anyString())).thenReturn(displayProps); + + credentialsSupportedResponse.getCredentialDefinition().getCredentialSubject().put("age", createDisplay("Age")); + credentialsSupportedResponse.setOrder(List.of("age")); + + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())) + .thenReturn("Age: $rowProperties.age"); + when(presentationService.constructPresentationDefinition(any())).thenReturn(new PresentationDefinitionDTO()); + when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( + "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, "", "", "en"); + + assertNotNull(result); // Verifies formatValue converted 25 to "25" + } } From db1e77a2655476b1f3f12a1013f0a5f06b0e1722 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Fri, 12 Sep 2025 11:11:51 +0530 Subject: [PATCH 766/860] injiweb-1705 updated keymanager version to latest (#879) Signed-off-by: Gurpreet41082 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b279f5f51..1e5462894 100644 --- a/pom.xml +++ b/pom.xml @@ -489,7 +489,7 @@ io.mosip.kernel kernel-keymanager-service - 1.3.0-beta.2 + 1.3.0-beta.4 lib From 500840f2a7bf524a3a5136b65d1608e70989c166 Mon Sep 17 00:00:00 2001 From: cyber-titan <124165966+cyber-titan@users.noreply.github.com> Date: Fri, 12 Sep 2025 11:37:47 +0530 Subject: [PATCH 767/860] updated mimoto version (#880) Signed-off-by: cyber-titan <124165966+cyber-titan@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1e5462894..6f6a28cfc 100644 --- a/pom.xml +++ b/pom.xml @@ -449,7 +449,7 @@ io.mosip pixelpass-jar - 0.7.0-SNAPSHOT + 0.7.0 From 0c2ab7fe84a65e4378be492f5549a9299efcfeb3 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Fri, 19 Sep 2025 09:30:14 +0530 Subject: [PATCH 768/860] Injiweb0.14.0 to develop (#895) Signed-off-by: Gurpreet41082 --- ....13.1_to_0.14.0_upgrade.sql => 0.18.0_to_0.18.1_rollback.sql} | 0 db_upgrade_script/inji_mimoto/sql/0.18.0_to_0.18.1_upgrade.sql | 0 db_upgrade_script/inji_mimoto/sql/0.18.1_to_0.19.0_rollback.sql | 0 db_upgrade_script/inji_mimoto/sql/0.18.1_to_0.19.0_upgrade.sql | 0 docs/VCFormatExtension.md | 1 - 5 files changed, 1 deletion(-) rename db_upgrade_script/inji_mimoto/sql/{0.13.1_to_0.14.0_upgrade.sql => 0.18.0_to_0.18.1_rollback.sql} (100%) create mode 100644 db_upgrade_script/inji_mimoto/sql/0.18.0_to_0.18.1_upgrade.sql create mode 100644 db_upgrade_script/inji_mimoto/sql/0.18.1_to_0.19.0_rollback.sql create mode 100644 db_upgrade_script/inji_mimoto/sql/0.18.1_to_0.19.0_upgrade.sql diff --git a/db_upgrade_script/inji_mimoto/sql/0.13.1_to_0.14.0_upgrade.sql b/db_upgrade_script/inji_mimoto/sql/0.18.0_to_0.18.1_rollback.sql similarity index 100% rename from db_upgrade_script/inji_mimoto/sql/0.13.1_to_0.14.0_upgrade.sql rename to db_upgrade_script/inji_mimoto/sql/0.18.0_to_0.18.1_rollback.sql diff --git a/db_upgrade_script/inji_mimoto/sql/0.18.0_to_0.18.1_upgrade.sql b/db_upgrade_script/inji_mimoto/sql/0.18.0_to_0.18.1_upgrade.sql new file mode 100644 index 000000000..e69de29bb diff --git a/db_upgrade_script/inji_mimoto/sql/0.18.1_to_0.19.0_rollback.sql b/db_upgrade_script/inji_mimoto/sql/0.18.1_to_0.19.0_rollback.sql new file mode 100644 index 000000000..e69de29bb diff --git a/db_upgrade_script/inji_mimoto/sql/0.18.1_to_0.19.0_upgrade.sql b/db_upgrade_script/inji_mimoto/sql/0.18.1_to_0.19.0_upgrade.sql new file mode 100644 index 000000000..e69de29bb diff --git a/docs/VCFormatExtension.md b/docs/VCFormatExtension.md index 5d9cac266..49e10dd87 100644 --- a/docs/VCFormatExtension.md +++ b/docs/VCFormatExtension.md @@ -74,7 +74,6 @@ Before starting the implementation, check existing handlers implementation ### 2. Implement New Handler - Create a new handler class implementing `CredentialFormatHandler` (with a @Component qualifier name required for injection):: ```java From e99de23f0c3853f5b7bfa30f348b77b28a90fb67 Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Fri, 19 Sep 2025 11:29:14 +0530 Subject: [PATCH 769/860] injiweb-1641 added the support to do post call to verify (#893) Signed-off-by: Gurpreet41082 --- docs/api-documentation-openapi.json | 32 ++++ .../controller/PresentationController.java | 14 +- .../presentation/PresentationRequestDTO.java | 8 + .../service/impl/PresentationServiceImpl.java | 135 ++++++++++++----- .../PresentationControllerTest.java | 82 +++++++++- .../service/PresentationServiceTest.java | 141 +++++++++++++++++- 6 files changed, 360 insertions(+), 52 deletions(-) diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index bb10f9f63..208ed578b 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -2665,6 +2665,38 @@ "in": "query", "name": "redirect_uri", "description": "One of the Redirect uri of the registered verifiers" + }, + { + "schema": { + "type": "string" + }, + "in": "query", + "name": "state", + "description": "Unique session identifier to prevent CSRF" + }, + { + "schema": { + "type": "string" + }, + "in": "query", + "name": "nonce", + "description": "Cryptographic challenge used to bind the presentation to this request" + }, + { + "schema": { + "type": "string" + }, + "in": "query", + "name": "response_uri", + "description": "Where to send the VP token" + }, + { + "schema": { + "type": "string" + }, + "in": "query", + "name": "response_mode", + "description": "Specifies how the Verifier will receive the Authorization Response from the Wallet" } ] } diff --git a/src/main/java/io/mosip/mimoto/controller/PresentationController.java b/src/main/java/io/mosip/mimoto/controller/PresentationController.java index 074eac0dc..adbb27d28 100644 --- a/src/main/java/io/mosip/mimoto/controller/PresentationController.java +++ b/src/main/java/io/mosip/mimoto/controller/PresentationController.java @@ -59,7 +59,12 @@ public void performAuthorization(HttpServletResponse response, @RequestParam("resource") @Schema(description = "URL Encoded Resource url of the Credential ") String resource, @RequestParam("presentation_definition") @Schema(description = "URL Encoded presentation definition") String presentationDefinition, @RequestParam("client_id") @Schema(description = "URL Encoded Client Id") String clientId, - @RequestParam("redirect_uri") @Schema(description = "URL Encoded Redirect URI") String redirectUri ) throws IOException { + @RequestParam(name = "redirect_uri", required = false) @Schema(description = "URL Encoded Redirect URI") String redirectUri, + @RequestParam(name = "state", required = false) @Schema(description = "Unique session identifier to prevent CSRF") String state, + @RequestParam(name = "nonce", required = false) @Schema(description = "Cryptographic challenge used to bind the presentation to this request") String nonce, + @RequestParam(name = "response_uri", required = false) @Schema(description = "Where to send the VP token") String responseUri, + @RequestParam(name = "response_mode", required = false) @Schema(description = "Specifies how the Verifier will receive the Authorization Response from the Wallet") String responseMode) throws IOException { + try { log.info("Started Presentation Authorization in the controller."); verifierService.validateVerifier(clientId, redirectUri); @@ -69,7 +74,12 @@ public void performAuthorization(HttpServletResponse response, .resource(resource) .presentationDefinition(presentationDefinitionDTO) .clientId(clientId) - .redirectUri(redirectUri).build(); + .redirectUri(redirectUri) + .state(state) + .nonce(nonce) + .responseUri(responseUri) + .responseMode(responseMode) + .build(); String redirectString = presentationService.authorizePresentation(presentationRequestDTO); log.info("Completed Presentation Authorization in the controller."); response.sendRedirect(redirectString); diff --git a/src/main/java/io/mosip/mimoto/dto/openid/presentation/PresentationRequestDTO.java b/src/main/java/io/mosip/mimoto/dto/openid/presentation/PresentationRequestDTO.java index 0cddb8c4d..739e8ced0 100644 --- a/src/main/java/io/mosip/mimoto/dto/openid/presentation/PresentationRequestDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/openid/presentation/PresentationRequestDTO.java @@ -21,5 +21,13 @@ public class PresentationRequestDTO { String clientId; @JsonProperty("redirect_uri") String redirectUri; + @JsonProperty("state") + String state; + @JsonProperty("nonce") + String nonce; + @JsonProperty("response_uri") + String responseUri; + @JsonProperty("response_uri") + String responseMode; } diff --git a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java index a494dfa1a..ab31e2190 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java @@ -10,9 +10,11 @@ import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.exception.VPNotCreatedException; import io.mosip.mimoto.service.PresentationService; +import io.mosip.mimoto.util.RestApiClient; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.MediaType; import org.springframework.stereotype.Service; import java.io.IOException; @@ -30,16 +32,19 @@ public class PresentationServiceImpl implements PresentationService { @Autowired - DataShareServiceImpl dataShareService; + private DataShareServiceImpl dataShareService; @Autowired - ObjectMapper objectMapper; + private ObjectMapper objectMapper; + + @Autowired + private RestApiClient restApiClient; @Value("${mosip.inji.ovp.redirect.url.pattern}") - String injiOvpRedirectURLPattern; + private String injiOvpRedirectURLPattern; @Value("${server.tomcat.max-http-response-header-size:65536}") - Integer maximumResponseHeaderSize; + private Integer maximumResponseHeaderSize; @Override public String authorizePresentation(PresentationRequestDTO presentationRequestDTO) throws IOException { @@ -50,7 +55,8 @@ public String authorizePresentation(PresentationRequestDTO presentationRequestDT } log.info("Started the Constructing VP Token"); - String redirectionString = presentationDefinitionDTO.getInputDescriptors() + + return presentationDefinitionDTO.getInputDescriptors() .stream() .findFirst() .map(inputDescriptorDTO -> { @@ -61,29 +67,20 @@ public String authorizePresentation(PresentationRequestDTO presentationRequestDT } }) .orElseThrow(() -> new VPNotCreatedException(ErrorConstants.INVALID_REQUEST.getErrorMessage())); - - if (redirectionString.length() > maximumResponseHeaderSize) { - throw new VPNotCreatedException( - ErrorConstants.URI_TOO_LONG.getErrorCode(), - ErrorConstants.URI_TOO_LONG.getErrorMessage()); - } - return redirectionString; } private String processInputDescriptor(VCCredentialResponse vcCredentialResponse, InputDescriptorDTO inputDescriptorDTO, PresentationRequestDTO presentationRequestDTO, PresentationDefinitionDTO presentationDefinitionDTO) throws JsonProcessingException { String format = vcCredentialResponse.getFormat(); + VerifiablePresentationDTO vpDTO; + if (CredentialFormat.LDP_VC.getFormat().equalsIgnoreCase(format)) { VCCredentialProperties ldpCredential = objectMapper.convertValue(vcCredentialResponse.getCredential(), VCCredentialProperties.class); if (inputDescriptorDTO.getFormat().get("ldpVc").get("proofTypes") .stream().anyMatch(proofType -> ldpCredential.getProof().getType().equals(proofType))) { - return buildRedirectString( - constructVerifiablePresentationString(ldpCredential), - format, - presentationRequestDTO, - presentationDefinitionDTO, - inputDescriptorDTO - ); + vpDTO = constructVerifiablePresentationString(ldpCredential); + } else { + throw new VPNotCreatedException(ErrorConstants.INVALID_REQUEST.getErrorMessage()); } } else if (CredentialFormat.VC_SD_JWT.getFormat().equalsIgnoreCase(format) || CredentialFormat.DC_SD_JWT.getFormat().equalsIgnoreCase(format)) { @@ -92,33 +89,97 @@ private String processInputDescriptor(VCCredentialResponse vcCredentialResponse, String responseAlgo = (String) jwtHeaders.get("alg"); if (inputDescriptorDTO.getFormat().get(format).get("sd-jwt_alg_values") .stream().anyMatch(responseAlgo::equals)) { - return buildRedirectString( - constructVerifiablePresentationStringForSDjwt(credential), - format, - presentationRequestDTO, - presentationDefinitionDTO, - inputDescriptorDTO - ); + vpDTO = constructVerifiablePresentationStringForSDjwt(credential); + } else { + throw new VPNotCreatedException(ErrorConstants.INVALID_REQUEST.getErrorMessage()); } + } else { + throw new VPNotCreatedException(ErrorConstants.INVALID_REQUEST.getErrorMessage()); } - log.info("No Credentials Matched the VP request."); - throw new VPNotCreatedException(ErrorConstants.INVALID_REQUEST.getErrorMessage()); + + // Create VP Token + String vpToken = createVpToken(vpDTO); + // Create PresentationSubmission + String presentationSubmission = constructPresentationSubmission(format, vpDTO, presentationDefinitionDTO, inputDescriptorDTO); + + // If response_uri is present, POST the response + if (presentationRequestDTO.getResponseMode() != null && "direct_post".equals(presentationRequestDTO.getResponseMode())) { + return postVpToResponseUri( + presentationRequestDTO.getResponseUri(), + vpToken, + presentationSubmission, + presentationRequestDTO.getState(), + presentationRequestDTO.getNonce() + ); + } + + // Otherwise, do redirect + String redirectString = buildRedirectString( + vpToken, + presentationRequestDTO.getRedirectUri(), + presentationSubmission + ); + + if (redirectString.length() > maximumResponseHeaderSize) { + throw new VPNotCreatedException(ErrorConstants.URI_TOO_LONG.getErrorCode(), ErrorConstants.URI_TOO_LONG.getErrorMessage()); + } + + return redirectString; + } + + private String createVpToken(VerifiablePresentationDTO vpDTO) throws JsonProcessingException { + return objectMapper.writeValueAsString(vpDTO); } - private String buildRedirectString(VerifiablePresentationDTO verifiablePresentationDTO, String format, - PresentationRequestDTO presentationRequestDTO, PresentationDefinitionDTO presentationDefinitionDTO, - InputDescriptorDTO inputDescriptorDTO) throws JsonProcessingException { - String presentationSubmission = constructPresentationSubmission(format, verifiablePresentationDTO, presentationDefinitionDTO, inputDescriptorDTO); - String vpToken = objectMapper.writeValueAsString(verifiablePresentationDTO); + private String buildRedirectString(String vpToken, String redirectUri, String presentationSubmission) { return String.format(injiOvpRedirectURLPattern, - presentationRequestDTO.getRedirectUri(), + redirectUri, Base64.getUrlEncoder().encodeToString(vpToken.getBytes(StandardCharsets.UTF_8)), URLEncoder.encode(presentationSubmission, StandardCharsets.UTF_8)); } + private String postVpToResponseUri(String responseUri, String vpToken, String presentationSubmission, String state, String nonce) throws JsonProcessingException { + Map postRequest = new HashMap<>(); + postRequest.put("vp_token", vpToken); + postRequest.put("presentation_submission", objectMapper.readTree(presentationSubmission)); + + if (state != null) { + postRequest.put("state", state); + } + + if (nonce != null) { + postRequest.put("nonce", nonce); + } + + log.info("Posting VP to response_uri: {}", responseUri); + Map postResponse = null; + try { + postResponse = restApiClient.postApi( + responseUri, + MediaType.APPLICATION_JSON, + postRequest, + Map.class + ); + } catch (Exception e) { + log.error("Exception while submitting the vp_token to the response_uri", e); + throw new VPNotCreatedException(ErrorConstants.INTERNAL_SERVER_ERROR.getErrorCode(), ErrorConstants.INTERNAL_SERVER_ERROR.getErrorMessage()); + } + + log.info("Response from verifier after POST: {}", postResponse); + + // Check for redirect_uri in response + String redirectUri = (String) postResponse.get("redirect_uri"); + if (redirectUri != null && !redirectUri.isEmpty()) { + return redirectUri; + } + + // Fallback behavior if redirect_uri is not provided + log.warn("No redirect_uri received from verifier in POST response. Falling back to response_uri."); + return responseUri + "?status=vp_sent"; + } + private VerifiablePresentationDTO constructVerifiablePresentationString(VCCredentialProperties vcCredentialProperties) { Object context = vcCredentialProperties.getContext(); - List contextList = (context instanceof List list) ? (List) list : List.of(context); @@ -130,7 +191,7 @@ private VerifiablePresentationDTO constructVerifiablePresentationString(VCCreden .build(); } - private VerifiablePresentationDTO constructVerifiablePresentationStringForSDjwt(String vcCredential) throws JsonProcessingException { + private VerifiablePresentationDTO constructVerifiablePresentationStringForSDjwt(String vcCredential) { return VerifiablePresentationDTO.builder() .verifiableCredential(Collections.singletonList(vcCredential)) .type(Collections.singletonList("VerifiablePresentation")) @@ -172,7 +233,7 @@ public PresentationDefinitionDTO constructPresentationDefinition(VCCredentialRes inputDescriptors.add(InputDescriptorDTO.builder() .id(UUID.randomUUID().toString()) - .constraints(ConstraintsDTO.builder().fields(new FieldDTO[]{ field }).build()) + .constraints(ConstraintsDTO.builder().fields(new FieldDTO[]{field}).build()) .format(format) .build()); diff --git a/src/test/java/io/mosip/mimoto/controller/PresentationControllerTest.java b/src/test/java/io/mosip/mimoto/controller/PresentationControllerTest.java index a398d391e..b1b3a7406 100644 --- a/src/test/java/io/mosip/mimoto/controller/PresentationControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/PresentationControllerTest.java @@ -31,6 +31,7 @@ import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.*; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.redirectedUrl; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -297,14 +298,6 @@ public void testPerformAuthorizationMissingRequiredParameters() throws Exception .param("redirect_uri", REDIRECT_URI)) .andExpect(status().isBadRequest()); - // Test missing redirect_uri - mockMvc.perform(get("/authorize") - .param("response_type", RESPONSE_TYPE) - .param("resource", RESOURCE) - .param("presentation_definition", PRESENTATION_DEFINITION_JSON) - .param("client_id", CLIENT_ID)) - .andExpect(status().isBadRequest()); - // Verify no service calls were made verify(verifierService, never()).validateVerifier(anyString(), anyString()); verify(presentationService, never()).authorizePresentation(any()); @@ -360,4 +353,77 @@ public void testPerformAuthorizationSpecialCharactersInParameters() throws Excep verify(verifierService).validateVerifier(specialClientId, specialRedirectUri); verify(presentationService).authorizePresentation(any(PresentationRequestDTO.class)); } + +// Add to PresentationControllerTest.java + + @Test + public void testPerformAuthorizationWithInvalidHttpMethod() throws Exception { + // POST instead of GET should return 405 Method Not Allowed + mockMvc.perform(post("/authorize") + .param("response_type", RESPONSE_TYPE) + .param("resource", RESOURCE) + .param("presentation_definition", PRESENTATION_DEFINITION_JSON) + .param("client_id", CLIENT_ID) + .param("redirect_uri", REDIRECT_URI)) + .andExpect(status().isMethodNotAllowed()); + } + + @Test + public void testPerformAuthorizationWithExtraParameters() throws Exception { + PresentationDefinitionDTO mockPresentationDefinitionDTO = new PresentationDefinitionDTO(); + when(objectMapper.readValue(PRESENTATION_DEFINITION_JSON, PresentationDefinitionDTO.class)) + .thenReturn(mockPresentationDefinitionDTO); + when(presentationService.authorizePresentation(any(PresentationRequestDTO.class))) + .thenReturn(SUCCESS_REDIRECT_URL); + doNothing().when(verifierService).validateVerifier(CLIENT_ID, REDIRECT_URI); + + mockMvc.perform(get("/authorize") + .param("response_type", RESPONSE_TYPE) + .param("resource", RESOURCE) + .param("presentation_definition", PRESENTATION_DEFINITION_JSON) + .param("client_id", CLIENT_ID) + .param("redirect_uri", REDIRECT_URI) + .param("extra_param", "extra_value")) + .andExpect(status().isFound()) + .andExpect(redirectedUrl(SUCCESS_REDIRECT_URL)); + } + + @Test + public void testPerformAuthorizationWithMalformedPresentationDefinitionJson() throws Exception { + String malformedJson = "{invalid_json}"; + when(objectMapper.readValue(malformedJson, PresentationDefinitionDTO.class)) + .thenThrow(new RuntimeException("Malformed JSON")); + doNothing().when(verifierService).validateVerifier(CLIENT_ID, REDIRECT_URI); + + String expectedRedirectUrl = String.format( + "%s?error_code=%s&error_message=%s", + REDIRECT_URI, + ErrorConstants.INTERNAL_SERVER_ERROR.getErrorCode(), + URLEncoder.encode(ErrorConstants.INTERNAL_SERVER_ERROR.getErrorMessage(), StandardCharsets.UTF_8) + ); + + mockMvc.perform(get("/authorize") + .param("response_type", RESPONSE_TYPE) + .param("resource", RESOURCE) + .param("presentation_definition", malformedJson) + .param("client_id", CLIENT_ID) + .param("redirect_uri", REDIRECT_URI)) + .andExpect(status().isFound()) + .andExpect(redirectedUrl(expectedRedirectUrl)); + } + + @Test + public void testPerformAuthorizationWithNullParameters() throws Exception { + mockMvc.perform(get("/authorize") + .param("response_type", (String) null) + .param("resource", (String) null) + .param("presentation_definition", (String) null) + .param("client_id", (String) null) + .param("redirect_uri", (String) null)) + .andExpect(status().isBadRequest()); + + verify(verifierService, never()).validateVerifier(anyString(), anyString()); + verify(presentationService, never()).authorizePresentation(any()); + } + } diff --git a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java index acac2ffc3..e3263f36f 100644 --- a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java @@ -14,6 +14,7 @@ import io.mosip.mimoto.service.impl.PresentationServiceImpl; import io.mosip.mimoto.service.impl.VerifierServiceImpl; import io.mosip.mimoto.util.JwtUtils; +import io.mosip.mimoto.util.RestApiClient; import io.mosip.mimoto.util.TestUtilities; import org.junit.Before; import org.junit.Test; @@ -41,11 +42,16 @@ public class PresentationServiceTest { @Mock VerifierService verifierService = new VerifierServiceImpl(); + @Mock DataShareServiceImpl dataShareService; + @Mock ObjectMapper objectMapper; + @Mock + RestApiClient restApiClient; + @InjectMocks PresentationServiceImpl presentationService; @@ -91,7 +97,7 @@ public void sdJwtCredentialMatchingWithVPRequest() throws Exception { when(objectMapper.convertValue(eq(vcCredentialResponse.getCredential()), eq(String.class))) .thenReturn("eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.test.signature"); - try (MockedStatic jwtUtilsMock = mockStatic(io.mosip.mimoto.util.JwtUtils.class)) { + try (MockedStatic jwtUtilsMock = mockStatic(JwtUtils.class)) { jwtUtilsMock.when(() -> parseJwtHeader(anyString())).thenReturn(jwtHeaders); String expectedRedirectUrl = "test_redirect_uri#vp_token=dGVzdC1kYXRh&presentation_submission=test-data"; @@ -101,7 +107,6 @@ public void sdJwtCredentialMatchingWithVPRequest() throws Exception { } } - // Error handling - essential for robustness @Test(expected = VPNotCreatedException.class) public void nullPresentationDefinitionWithVPRequest() throws IOException { VCCredentialResponse vcCredentialResponse = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); @@ -128,7 +133,6 @@ public void uriTooLongWithVPRequest() throws IOException { presentationService.authorizePresentation(presentationRequestDTO); } - // Presentation definition construction - key functionality @Test public void constructPresentationDefinitionForLdpVcCredential() { VCCredentialResponse vcCredentialResponse = createLdpVcCredentialResponse(); @@ -154,7 +158,7 @@ public void constructPresentationDefinitionForSdJwtCredential() { Map jwtPayload = Map.of("type", Arrays.asList("VerifiableCredential", "TestCredential")); Map jwtHeaders = Map.of("alg", "ES256", "typ", "JWT"); - try (MockedStatic jwtUtilsMock = mockStatic(io.mosip.mimoto.util.JwtUtils.class)) { + try (MockedStatic jwtUtilsMock = mockStatic(JwtUtils.class)) { jwtUtilsMock.when(() -> JwtUtils.extractJwtPayloadFromSdJwt(anyString())).thenReturn(jwtPayload); jwtUtilsMock.when(() -> JwtUtils.parseJwtHeader(anyString())).thenReturn(jwtHeaders); @@ -211,4 +215,131 @@ private VCCredentialResponse createLdpVcCredentialResponse() { response.setCredential(credential); return response; } -} + + @Test(expected = RuntimeException.class) + public void authorizePresentationNullCredentialThrowsException() throws Exception { + VCCredentialResponse vcCredentialResponse = new VCCredentialResponse(); + vcCredentialResponse.setCredential(null); + vcCredentialResponse.setFormat(CredentialFormat.LDP_VC.getFormat()); + + PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); + when(dataShareService.downloadCredentialFromDataShare(eq(presentationRequestDTO))).thenReturn(vcCredentialResponse); + when(objectMapper.convertValue(eq(null), eq(VCCredentialProperties.class))).thenReturn(null); + + presentationService.authorizePresentation(presentationRequestDTO); + } + + @Test(expected = VPNotCreatedException.class) + public void authorizePresentationUnsupportedCredentialFormatThrowsException() throws Exception { + VCCredentialResponse vcCredentialResponse = new VCCredentialResponse(); + vcCredentialResponse.setCredential("dummy"); + vcCredentialResponse.setFormat("unsupported-format"); + + PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); + when(dataShareService.downloadCredentialFromDataShare(eq(presentationRequestDTO))).thenReturn(vcCredentialResponse); + + presentationService.authorizePresentation(presentationRequestDTO); + } + + @Test(expected = RuntimeException.class) + public void authorizePresentationObjectMapperThrowsException() throws Exception { + VCCredentialResponse vcCredentialResponse = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); + PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); + + when(dataShareService.downloadCredentialFromDataShare(eq(presentationRequestDTO))).thenReturn(vcCredentialResponse); + when(objectMapper.convertValue(eq(vcCredentialResponse.getCredential()), eq(VCCredentialProperties.class))) + .thenThrow(new RuntimeException("Mapping error")); + presentationService.authorizePresentation(presentationRequestDTO); + } + + @Test(expected = NullPointerException.class) + public void constructPresentationDefinitionNullCredentialCausesNPE() { + VCCredentialResponse vcCredentialResponse = new VCCredentialResponse(); + vcCredentialResponse.setCredential(null); + vcCredentialResponse.setFormat(CredentialFormat.LDP_VC.getFormat()); + + when(objectMapper.convertValue(eq(null), eq(VCCredentialProperties.class))).thenReturn(null); + + presentationService.constructPresentationDefinition(vcCredentialResponse); + } + + // Test for constructPresentationDefinition with proper null handling + @Test + public void constructPresentationDefinitionWithValidCredential() { + VCCredentialResponse vcCredentialResponse = createLdpVcCredentialResponse(); + VCCredentialProperties credential = (VCCredentialProperties) vcCredentialResponse.getCredential(); + when(objectMapper.convertValue(eq(vcCredentialResponse.getCredential()), eq(VCCredentialProperties.class))) + .thenReturn(credential); + + PresentationDefinitionDTO result = presentationService.constructPresentationDefinition(vcCredentialResponse); + + assertNotNull(result); + assertNotNull(result.getId()); + assertEquals(1, result.getInputDescriptors().size()); + } + + @Test + public void constructPresentationDefinitionUnsupportedFormatReturnsNull() { + VCCredentialResponse vcCredentialResponse = new VCCredentialResponse(); + vcCredentialResponse.setCredential("dummy"); + vcCredentialResponse.setFormat("unsupported-format"); + + PresentationDefinitionDTO result = presentationService.constructPresentationDefinition(vcCredentialResponse); + + assertNotNull(result); + assertTrue(result.getInputDescriptors().isEmpty()); + } + + @Test + public void testDirectPostResponseMode() throws Exception { + VCCredentialResponse vcCredentialResponse = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); + PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); + presentationRequestDTO.setResponseMode("direct_post"); + presentationRequestDTO.setResponseUri("https://verifier.example.com/response"); + presentationRequestDTO.setState("test-state"); + presentationRequestDTO.setNonce("test-nonce"); + + Map mockResponse = Map.of("redirect_uri", "https://verifier.example.com/success"); + + when(dataShareService.downloadCredentialFromDataShare(eq(presentationRequestDTO))).thenReturn(vcCredentialResponse); + when(objectMapper.convertValue(eq(vcCredentialResponse.getCredential()), eq(VCCredentialProperties.class))) + .thenReturn((VCCredentialProperties) vcCredentialResponse.getCredential()); + when(restApiClient.postApi(anyString(), any(), any(), eq(Map.class))).thenReturn(mockResponse); + + String result = presentationService.authorizePresentation(presentationRequestDTO); + + assertEquals("https://verifier.example.com/success", result); + verify(restApiClient).postApi(eq("https://verifier.example.com/response"), any(), any(), eq(Map.class)); + } + + @Test(expected = VPNotCreatedException.class) + public void testSdJwtUnsupportedAlgorithm() throws Exception { + VCCredentialResponse vcCredentialResponse = createSDJwtCredentialResponse("vc+sd-jwt"); + PresentationRequestDTO presentationRequestDTO = createSDJwtPresentationRequest(); + Map jwtHeaders = Map.of("alg", "RS256", "typ", "JWT"); // Unsupported algorithm + + when(dataShareService.downloadCredentialFromDataShare(eq(presentationRequestDTO))).thenReturn(vcCredentialResponse); + when(objectMapper.convertValue(eq(vcCredentialResponse.getCredential()), eq(String.class))) + .thenReturn("eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.test.signature"); + + try (MockedStatic jwtUtilsMock = mockStatic(JwtUtils.class)) { + jwtUtilsMock.when(() -> parseJwtHeader(anyString())).thenReturn(jwtHeaders); + + presentationService.authorizePresentation(presentationRequestDTO); + } + } + + @Test(expected = VPNotCreatedException.class) + public void testMissingInputDescriptors() throws Exception { + VCCredentialResponse vcCredentialResponse = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); + PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); + + // Set empty input descriptors list + PresentationDefinitionDTO presentationDefinition = presentationRequestDTO.getPresentationDefinition(); + presentationDefinition.setInputDescriptors(Arrays.asList()); + + when(dataShareService.downloadCredentialFromDataShare(eq(presentationRequestDTO))).thenReturn(vcCredentialResponse); + + presentationService.authorizePresentation(presentationRequestDTO); + } +} \ No newline at end of file From 7e905b3026089b9f678317ee5ee0398c1c6dc58d Mon Sep 17 00:00:00 2001 From: Abhi Date: Fri, 19 Sep 2025 13:20:40 +0530 Subject: [PATCH 770/860] [MOSIP-43087] Updated bitnami image to mosipint image/develop Signed-off-by: Abhi --- deploy/README.md | 4 +++- deploy/mimoto/datashare-values.yaml | 13 +++++++++++++ deploy/mimoto/delete.sh | 1 + deploy/mimoto/install.sh | 18 ++++++++++++++++++ deploy/redis/install.sh | 3 ++- helm/mimoto/values.yaml | 4 ++-- 6 files changed, 39 insertions(+), 4 deletions(-) create mode 100644 deploy/mimoto/datashare-values.yaml diff --git a/deploy/README.md b/deploy/README.md index 60162b945..b5078258d 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -38,9 +38,11 @@ cd ../partner-onboarder * Once the job is completed, log in to S3 / NFS and check the reports. There should not be any failures. * Note: If you are running the Onboarder in a separate INJI cluster, update the extraEnvVars section accordingly in [values.yaml](../partner-onboarder/values.yaml). -## Install mimoto +## Install mimoto and datashare * Execute mimoto install script * Before installing Mimoto, please ensure that the database host and port are correctly configured in the [values.yaml](mimoto/values.yaml) file. +* Datashare will be deployed as part of the Mimoto installation. +* Note: During the installation of Mimoto and Datashare, ensure that the active_profile_env parameter in the ConfigMap of the config-server-share (in the injiweb namespace) is set to: default,inji-default,standalone ``` cd ../deploy/mimoto ./install.sh diff --git a/deploy/mimoto/datashare-values.yaml b/deploy/mimoto/datashare-values.yaml new file mode 100644 index 000000000..adee53e86 --- /dev/null +++ b/deploy/mimoto/datashare-values.yaml @@ -0,0 +1,13 @@ +# Override the envFrom field to exclude 'artifactory-share' +extraEnvVarsCM: + - inji-stack-config + - config-server-share + +istio: + enabled: false # Disables VirtualService creation if Istio is used + +virtualService: + enabled: false # Explicitly disable VirtualService if applicable + +service: + enabled: true # Ensure service is still enabled, if needed \ No newline at end of file diff --git a/deploy/mimoto/delete.sh b/deploy/mimoto/delete.sh index c4f326e54..94375da5c 100755 --- a/deploy/mimoto/delete.sh +++ b/deploy/mimoto/delete.sh @@ -7,6 +7,7 @@ function deleting_mimoto() { if [ $yn = "Y" ] then helm -n $NS delete mimoto + helm -n $NS delete datashare-inji break else break diff --git a/deploy/mimoto/install.sh b/deploy/mimoto/install.sh index 3607d3211..4449af8e0 100755 --- a/deploy/mimoto/install.sh +++ b/deploy/mimoto/install.sh @@ -11,6 +11,18 @@ CHART_VERSION=0.0.1-develop KEYGEN_CHART_VERSION=1.3.0-beta.2 SOFTHSM_NS=softhsm SOFTHSM_CHART_VERSION=1.3.0-beta.2 +DATASHARE_CHART_VERSION=1.3.0-beta.2 +##The value of INJI_DATASHARE_HOST is set to a fixed value: "datashare-inji.injiweb". +INJI_DATASHARE_HOST="datashare-inji.injiweb" + +DEFAULT_INJI_DATASHARE_HOST=$(kubectl get cm inji-stack-config -n config-server -o jsonpath={.data.inji-datashare-host}) +if [ -z "$DEFAULT_INJI_DATASHARE_HOST" ]; then + echo "Adding INJI_DATASHARE_HOST to config-server deployment" + kubectl patch configmap inji-stack-config -n config-server --type merge -p "{\"data\": {\"inji-datashare-host\": \"$INJI_DATASHARE_HOST\"}}" + kubectl patch configmap inji-stack-config -n default --type merge -p "{\"data\": {\"inji-datashare-host\": \"$INJI_DATASHARE_HOST\"}}" + kubectl -n config-server set env --keys=inji-datashare-host --from configmap/inji-stack-config deployment/config-server --prefix=SPRING_CLOUD_CONFIG_SERVER_OVERRIDES_ + kubectl -n config-server get deploy -o name | xargs -n1 -t kubectl -n config-server rollout status +fi echo Create $NS namespace kubectl create ns $NS @@ -46,6 +58,12 @@ function installing_mimoto() { ENABLE_INSECURE='--set enable_insecure=true'; fi + INJI_DATASHARE_HOST=$(kubectl get cm inji-stack-config -o jsonpath={.data.inji-datashare-host}) + echo "Installing datashare" + helm -n $NS install datashare-inji mosip/datashare \ + -f datashare-values.yaml \ + --version $DATASHARE_CHART_VERSION + echo "Do you want to use SoftHSM or .p12 keystore for key management?" echo "1) SoftHSM" echo "2) .p12 keystore" diff --git a/deploy/redis/install.sh b/deploy/redis/install.sh index 9bf297b73..bf0396ad3 100755 --- a/deploy/redis/install.sh +++ b/deploy/redis/install.sh @@ -45,7 +45,8 @@ function installing_redis() { helm repo update echo Installing redis - helm -n $NS install redis bitnami/redis --wait --version $CHART_VERSION + helm -n $NS install redis bitnami/redis --wait --version $CHART_VERSION\ + --set image.repository=mosipint/redis --set image.tag=latest echo Installed redis service diff --git a/helm/mimoto/values.yaml b/helm/mimoto/values.yaml index 757dbff3d..ddef1addf 100644 --- a/helm/mimoto/values.yaml +++ b/helm/mimoto/values.yaml @@ -377,8 +377,8 @@ volumePermissions: enabled: true image: registry: docker.io - repository: bitnami/os-shell - tag: "12-debian-12-r47" + repository: mosipint/os-shell + tag: "latest" pullPolicy: Always ## Optionally specify an array of imagePullSecrets. ## Secrets must be manually created in the namespace. From aae4cc14174d5caed251f6fba1aadebd3f872b7e Mon Sep 17 00:00:00 2001 From: Abhi Date: Fri, 19 Sep 2025 16:07:34 +0530 Subject: [PATCH 771/860] [MOSIP-43087] Updated bitnami image to mosipint image/develop Signed-off-by: Abhi --- deploy/redis/install.sh | 2 +- helm/mimoto/values.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/deploy/redis/install.sh b/deploy/redis/install.sh index bf0396ad3..ef2aeebc5 100755 --- a/deploy/redis/install.sh +++ b/deploy/redis/install.sh @@ -46,7 +46,7 @@ function installing_redis() { echo Installing redis helm -n $NS install redis bitnami/redis --wait --version $CHART_VERSION\ - --set image.repository=mosipint/redis --set image.tag=latest + --set image.repository=mosipint/redis --set image.tag=7.0.5-debian-11-r25 echo Installed redis service diff --git a/helm/mimoto/values.yaml b/helm/mimoto/values.yaml index ddef1addf..4db0481d6 100644 --- a/helm/mimoto/values.yaml +++ b/helm/mimoto/values.yaml @@ -378,7 +378,7 @@ volumePermissions: image: registry: docker.io repository: mosipint/os-shell - tag: "latest" + tag: "12-debian-12-r46" pullPolicy: Always ## Optionally specify an array of imagePullSecrets. ## Secrets must be manually created in the namespace. From 53dc95304e8c36cb77c347aee78c0ce00eece95e Mon Sep 17 00:00:00 2001 From: Abhishek S <127825992+abhishek8shankar@users.noreply.github.com> Date: Fri, 19 Sep 2025 18:49:37 +0530 Subject: [PATCH 772/860] [MOSIP-43087] Updated bitnami image to mosipint image/develop (#908) Signed-off-by: Abhishek S <127825992+abhishek8shankar@users.noreply.github.com> --- deploy/redis/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/redis/install.sh b/deploy/redis/install.sh index ef2aeebc5..d20007c3d 100755 --- a/deploy/redis/install.sh +++ b/deploy/redis/install.sh @@ -45,7 +45,7 @@ function installing_redis() { helm repo update echo Installing redis - helm -n $NS install redis bitnami/redis --wait --version $CHART_VERSION\ + helm -n $NS install redis bitnami/redis --wait --version $CHART_VERSION \ --set image.repository=mosipint/redis --set image.tag=7.0.5-debian-11-r25 echo Installed redis service From 7dc62bd08f0a92cd9b4cc96cf38d7624e714c454 Mon Sep 17 00:00:00 2001 From: Abhishek S <127825992+abhishek8shankar@users.noreply.github.com> Date: Mon, 22 Sep 2025 13:00:32 +0530 Subject: [PATCH 773/860] [MOSIP-43087] Updated datashare-values.yaml to datashare-values.yaml (#911) Signed-off-by: Abhishek S <127825992+abhishek8shankar@users.noreply.github.com> --- deploy/mimoto/{datashare-values.yaml => datashare-values.yaml} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename deploy/mimoto/{datashare-values.yaml => datashare-values.yaml} (82%) diff --git a/deploy/mimoto/datashare-values.yaml b/deploy/mimoto/datashare-values.yaml similarity index 82% rename from deploy/mimoto/datashare-values.yaml rename to deploy/mimoto/datashare-values.yaml index adee53e86..e401f2cf7 100644 --- a/deploy/mimoto/datashare-values.yaml +++ b/deploy/mimoto/datashare-values.yaml @@ -10,4 +10,4 @@ virtualService: enabled: false # Explicitly disable VirtualService if applicable service: - enabled: true # Ensure service is still enabled, if needed \ No newline at end of file + enabled: true # Ensure service is still enabled, if needed From 930354631a784cc1b223248a1f5a8cbb02622c9f Mon Sep 17 00:00:00 2001 From: Abhishek S <127825992+abhishek8shankar@users.noreply.github.com> Date: Mon, 22 Sep 2025 16:31:57 +0530 Subject: [PATCH 774/860] [MOSIP-43087] Update docker-compose.yml (#916) Signed-off-by: Abhishek S <127825992+abhishek8shankar@users.noreply.github.com> --- docker-compose/docker-compose.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose/docker-compose.yml b/docker-compose/docker-compose.yml index 00e1a4382..fdbf6bb08 100644 --- a/docker-compose/docker-compose.yml +++ b/docker-compose/docker-compose.yml @@ -4,7 +4,7 @@ services: minio: container_name: 'minio-service' - image: bitnami/minio:2022.2.7-debian-10-r0 + image: mosipint/minio:2022.2.7-debian-10-r0 ports: - "9001:9001" - "9000:9000" @@ -79,4 +79,4 @@ services: - postgres volumes: - postgres-data: \ No newline at end of file + postgres-data: From 2c3a88dda9d2358e21be3299cc30790cec616758 Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Wed, 1 Oct 2025 00:44:53 +0530 Subject: [PATCH 775/860] [INJIMOB-3571] add: jwks_uri to VerifierDTO (#936) * [INJIMOB-3571] add: VerifierDTO include jwks_uri - VerifierDTO does not include client_metadata Signed-off-by: KiruthikaJeyashankar * [INJIMOB-3572] add: allowUnsignedRequest config to VerifierDTO allowUnsignedRequest is a configuration to specify if this particular Verifier can accept signed authorization request or not. The default is false meaning Only Signed Requests are allowed. Signed-off-by: KiruthikaJeyashankar --------- Signed-off-by: KiruthikaJeyashankar --- .../config/mimoto-trusted-verifiers.json | 33 +---------------- .../mosip/mimoto/dto/openid/VerifierDTO.java | 17 ++++++--- .../resources/mimoto-trusted-verifiers.json | 35 ++----------------- .../controller/VerifiersControllerTest.java | 13 ++++--- 4 files changed, 23 insertions(+), 75 deletions(-) diff --git a/docker-compose/config/mimoto-trusted-verifiers.json b/docker-compose/config/mimoto-trusted-verifiers.json index 76c17a0d6..6366081e3 100644 --- a/docker-compose/config/mimoto-trusted-verifiers.json +++ b/docker-compose/config/mimoto-trusted-verifiers.json @@ -8,38 +8,7 @@ "response_uris": [ "https://injiverify.collab.mosip.net/v1/verify/vp-submission/vp-direct-post" ], - "client_metadata": { - "client_name": "Requester name", - "logo_uri": "", - "authorization_encrypted_response_alg": "ECDH-ES", - "authorization_encrypted_response_enc": "A256GCM", - "jwks": { - "keys": [ - { - "kty": "OKP", - "crv": "X25519", - "use": "enc", - "x": "BVNVdqorpxCCnTOkkw8S2NAYXvfEvkC-8RDObhrAUA4", - "alg": "ECDH-ES", - "kid": "verifier-key-id" - } - ] - }, - "vp_formats": { - "mso_mdoc": { - "alg": [ - "ES256" - ] - }, - "ldp_vp": { - "proof_type": [ - "Ed25519Signature2018", - "Ed25519Signature2020", - "RsaSignature2018" - ] - } - } - } + "jwks_uri": "https://injiverify.collab.mosip.net/.well-known/jwks.json" } ] } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/dto/openid/VerifierDTO.java b/src/main/java/io/mosip/mimoto/dto/openid/VerifierDTO.java index fd12da67f..f76872114 100644 --- a/src/main/java/io/mosip/mimoto/dto/openid/VerifierDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/openid/VerifierDTO.java @@ -5,11 +5,13 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; +import lombok.Builder.Default; import lombok.Data; import lombok.NoArgsConstructor; import java.util.List; -import java.util.Map; + +import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL; @Data @NoArgsConstructor @@ -28,9 +30,14 @@ public class VerifierDTO { @Schema(description = "Response URIs of the Verifier") List responseUris; - @JsonProperty("client_metadata") - @JsonInclude(JsonInclude.Include.NON_NULL) - @Schema(description = "Metadata of the Verifier") - Map clientMetadata; + @JsonProperty("jwks_uri") + @Schema(description = "JWKS URI of the Verifier") + @JsonInclude(NON_NULL) + String jwksUri; + + @JsonProperty("allow_unsigned_request") + @Schema(description = "Flag to indicate if unsigned Authorization Request is allowed") + @Default + Boolean allowUnsignedRequest = false; } diff --git a/src/main/resources/mimoto-trusted-verifiers.json b/src/main/resources/mimoto-trusted-verifiers.json index 76c17a0d6..28334f929 100644 --- a/src/main/resources/mimoto-trusted-verifiers.json +++ b/src/main/resources/mimoto-trusted-verifiers.json @@ -8,38 +8,7 @@ "response_uris": [ "https://injiverify.collab.mosip.net/v1/verify/vp-submission/vp-direct-post" ], - "client_metadata": { - "client_name": "Requester name", - "logo_uri": "", - "authorization_encrypted_response_alg": "ECDH-ES", - "authorization_encrypted_response_enc": "A256GCM", - "jwks": { - "keys": [ - { - "kty": "OKP", - "crv": "X25519", - "use": "enc", - "x": "BVNVdqorpxCCnTOkkw8S2NAYXvfEvkC-8RDObhrAUA4", - "alg": "ECDH-ES", - "kid": "verifier-key-id" - } - ] - }, - "vp_formats": { - "mso_mdoc": { - "alg": [ - "ES256" - ] - }, - "ldp_vp": { - "proof_type": [ - "Ed25519Signature2018", - "Ed25519Signature2020", - "RsaSignature2018" - ] - } - } - } + "jwks_uri": "https://injiverify.collab.mosip.net/.well-known/jwks.json" } ] -} \ No newline at end of file +} diff --git a/src/test/java/io/mosip/mimoto/controller/VerifiersControllerTest.java b/src/test/java/io/mosip/mimoto/controller/VerifiersControllerTest.java index d3c3428c8..46289e5d5 100644 --- a/src/test/java/io/mosip/mimoto/controller/VerifiersControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/VerifiersControllerTest.java @@ -83,7 +83,8 @@ public void shouldIncludeClientMetadataWhenClientMetadataIsPresentInTrustedVerif .clientId("test-clientId") .redirectUris(Collections.singletonList("https://test-redirectUri")) .responseUris(Collections.singletonList("https://test-responseUri")) - .clientMetadata(metadata) + .jwksUri("https://test/.well-known/jwks.json") + .allowUnsignedRequest(true) .build(); VerifiersDTO trustedVerifiers = VerifiersDTO.builder() @@ -94,8 +95,9 @@ public void shouldIncludeClientMetadataWhenClientMetadataIsPresentInTrustedVerif mockMvc.perform(get("/verifiers").accept(MediaType.APPLICATION_JSON_VALUE)) .andExpect(status().isOk()) + .andExpect(jsonPath("$.response.verifiers[0].allow_unsigned_request").value(true)) .andExpect(jsonPath("$.response.verifiers[0].client_id").value("test-clientId")) - .andExpect(jsonPath("$.response.verifiers[0].client_metadata.client_name").value("Test-Verifier")); + .andExpect(jsonPath("$.response.verifiers[0].jwks_uri").value("https://test/.well-known/jwks.json")); } @Test @@ -104,7 +106,7 @@ public void shouldReturnEmptyClientMetadataWhenClientMetadataIsEmptyInTrustedVer .clientId("test-clientId") .redirectUris(Collections.singletonList("https://test-redirectUri")) .responseUris(Collections.singletonList("https://test-responseUri")) - .clientMetadata(Collections.emptyMap()) + .jwksUri("https://test/.well-known/jwks.json") .build(); VerifiersDTO trustedVerifiers = VerifiersDTO.builder() @@ -115,8 +117,9 @@ public void shouldReturnEmptyClientMetadataWhenClientMetadataIsEmptyInTrustedVer mockMvc.perform(get("/verifiers").accept(MediaType.APPLICATION_JSON_VALUE)) .andExpect(status().isOk()) - .andExpect(jsonPath("$.response.verifiers[0].client_metadata").isMap()) - .andExpect(jsonPath("$.response.verifiers[0].client_metadata").isEmpty()); + .andExpect(jsonPath("$.response.verifiers[0].allow_unsigned_request").value(false)) + .andExpect(jsonPath("$.response.verifiers[0].jwks_uri").isString()) + .andExpect(jsonPath("$.response.verifiers[0].jwks_uri").value("https://test/.well-known/jwks.json")); } From ea659b5f5b418cd47f68f9141da6535baacab12d Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Fri, 3 Oct 2025 15:10:57 +0530 Subject: [PATCH 776/860] [INJIMOB-3572] refactor: update verifiers config in trusted-verifiers-config.json (#939) * [INJIMOB-3572] refactor: update trusted verifiers as per verifier config Signed-off-by: KiruthikaJeyashankar * [INJIMOB-3572] refactor: modify test names as per test Signed-off-by: KiruthikaJeyashankar --------- Signed-off-by: KiruthikaJeyashankar --- docker-compose/config/mimoto-trusted-verifiers.json | 3 ++- src/main/resources/mimoto-trusted-verifiers.json | 3 ++- .../mimoto/controller/VerifiersControllerTest.java | 13 +++++-------- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/docker-compose/config/mimoto-trusted-verifiers.json b/docker-compose/config/mimoto-trusted-verifiers.json index 6366081e3..b0ae6f4e3 100644 --- a/docker-compose/config/mimoto-trusted-verifiers.json +++ b/docker-compose/config/mimoto-trusted-verifiers.json @@ -8,7 +8,8 @@ "response_uris": [ "https://injiverify.collab.mosip.net/v1/verify/vp-submission/vp-direct-post" ], - "jwks_uri": "https://injiverify.collab.mosip.net/.well-known/jwks.json" + "jwks_uri": "https://injiverify.collab.mosip.net/.well-known/jwks.json", + "allow_unsigned_request": false } ] } \ No newline at end of file diff --git a/src/main/resources/mimoto-trusted-verifiers.json b/src/main/resources/mimoto-trusted-verifiers.json index 28334f929..3f11bc947 100644 --- a/src/main/resources/mimoto-trusted-verifiers.json +++ b/src/main/resources/mimoto-trusted-verifiers.json @@ -8,7 +8,8 @@ "response_uris": [ "https://injiverify.collab.mosip.net/v1/verify/vp-submission/vp-direct-post" ], - "jwks_uri": "https://injiverify.collab.mosip.net/.well-known/jwks.json" + "jwks_uri": "https://injiverify.collab.mosip.net/.well-known/jwks.json", + "allow_unsigned_request": false } ] } diff --git a/src/test/java/io/mosip/mimoto/controller/VerifiersControllerTest.java b/src/test/java/io/mosip/mimoto/controller/VerifiersControllerTest.java index 46289e5d5..82bd8cf51 100644 --- a/src/test/java/io/mosip/mimoto/controller/VerifiersControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/VerifiersControllerTest.java @@ -75,7 +75,7 @@ public void shouldReturnEmptyResponseIfAnyErrorOccurredWhileFetchingVerifiersLis } @Test - public void shouldIncludeClientMetadataWhenClientMetadataIsPresentInTrustedVerifiers() throws Exception { + public void shouldIncludeAllProvidedPropertiesInTrustedVerifiers() throws Exception { Map metadata = new HashMap<>(); metadata.put("client_name", "Test-Verifier"); @@ -101,12 +101,12 @@ public void shouldIncludeClientMetadataWhenClientMetadataIsPresentInTrustedVerif } @Test - public void shouldReturnEmptyClientMetadataWhenClientMetadataIsEmptyInTrustedVerifiers() throws Exception { + public void shouldReturnDefaultValuesWhenOptionalFieldsAreNotProvided() throws Exception { + // Not providing jwks_uri and allow_unsigned_request in VerifierDTO VerifierDTO verifierDTO = VerifierDTO.builder() .clientId("test-clientId") .redirectUris(Collections.singletonList("https://test-redirectUri")) .responseUris(Collections.singletonList("https://test-responseUri")) - .jwksUri("https://test/.well-known/jwks.json") .build(); VerifiersDTO trustedVerifiers = VerifiersDTO.builder() @@ -117,10 +117,7 @@ public void shouldReturnEmptyClientMetadataWhenClientMetadataIsEmptyInTrustedVer mockMvc.perform(get("/verifiers").accept(MediaType.APPLICATION_JSON_VALUE)) .andExpect(status().isOk()) - .andExpect(jsonPath("$.response.verifiers[0].allow_unsigned_request").value(false)) - .andExpect(jsonPath("$.response.verifiers[0].jwks_uri").isString()) - .andExpect(jsonPath("$.response.verifiers[0].jwks_uri").value("https://test/.well-known/jwks.json")); + .andExpect(jsonPath("$.response.verifiers[0].allow_unsigned_request").value(false)) // allow_unsigned_request is not passed means it should take default value false + .andExpect(jsonPath("$.response.verifiers[0].jwks_uri").doesNotExist()); // jwks_uri is not passed means it should not be present in trusted verifiers } - - } From 775cd816b951bb13e735ab0585f04920759c4672 Mon Sep 17 00:00:00 2001 From: Sradha Mohanty Date: Mon, 6 Oct 2025 12:04:30 +0530 Subject: [PATCH 777/860] MOSIP-41966: API - Negative testcases should not be there in Prerequisite section. (#844) * MOSIP-41966 Signed-off-by: SradhaMohanty5899 * Updated the POM version Signed-off-by: SradhaMohanty5899 --------- Signed-off-by: SradhaMohanty5899 --- api-test/pom.xml | 2 +- api-test/testNgXmlFiles/mimotoPrerequisiteSuite.xml | 9 --------- api-test/testNgXmlFiles/mimotoSuite.xml | 9 +++++++++ 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/api-test/pom.xml b/api-test/pom.xml index b51f5f2e3..f4dce7203 100644 --- a/api-test/pom.xml +++ b/api-test/pom.xml @@ -68,7 +68,7 @@ io.mosip.testrig.apitest.commons apitest-commons - 1.2.1-SNAPSHOT + 1.3.4-SNAPSHOT diff --git a/api-test/testNgXmlFiles/mimotoPrerequisiteSuite.xml b/api-test/testNgXmlFiles/mimotoPrerequisiteSuite.xml index 5bf235412..657cfc971 100644 --- a/api-test/testNgXmlFiles/mimotoPrerequisiteSuite.xml +++ b/api-test/testNgXmlFiles/mimotoPrerequisiteSuite.xml @@ -15,15 +15,6 @@ - - - - - - - diff --git a/api-test/testNgXmlFiles/mimotoSuite.xml b/api-test/testNgXmlFiles/mimotoSuite.xml index 6a6e5dcd9..14d672425 100644 --- a/api-test/testNgXmlFiles/mimotoSuite.xml +++ b/api-test/testNgXmlFiles/mimotoSuite.xml @@ -8,6 +8,15 @@ + + + + + + + From 3e9037bda93c2d5d1de848dd8b6da25c0735b169 Mon Sep 17 00:00:00 2001 From: Durgesh Konga Date: Tue, 7 Oct 2025 20:58:36 +0530 Subject: [PATCH 778/860] [INJIWEB-654] Merge OpenIDVP for Web Wallet - Online Sharing changes from feature branch to develop (#947) * [Injiweb 1704] Add endpoint to receive the Authorization request and validate it and return the required presentation details to the caller in OpenId4VP flow (#861) Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Signed-off-by: kongadurgesh * [INJIWEB-1704] write test cases for multiple classes in openid4vp flow and add script file for trusted verifiers table (#867) Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Signed-off-by: kongadurgesh * [INJIWEB-1711] - Update OpenAPI specification with complete endpoint documention (#887) Signed-off-by: kongadurgesh * [INJIWEB-1712] - Add Open API specification for Submit Presentation Endpoint (#890) Signed-off-by: kongadurgesh * injiweb-1713-stoplight added details (#892) Signed-off-by: cyber-titan <124165966+cyber-titan@users.noreply.github.com> Signed-off-by: kongadurgesh * [INJIWEB-1704] Fix Pre Register Issue for OpenID4VP (#885) Signed-off-by: Durgesh Konga Signed-off-by: kongadurgesh * [INJIWEB-1711] - Update Open API Specification as per new design (#896) Signed-off-by: kongadurgesh * [INJIWEB-1711] - Add threetenabp jar for maven build fix in PR (#903) Signed-off-by: kongadurgesh * injiweb-1713-stoplight-1 updated post & patch api (#897) Signed-off-by: cyber-titan <124165966+cyber-titan@users.noreply.github.com> Signed-off-by: kongadurgesh * Injiweb 1711 jar removal (#905) Signed-off-by: kongadurgesh * [INJIWEB-1711] - Add get matching credentials endpoint for OpenID4VP (#909) Signed-off-by: kongadurgesh * 654 update from develop (#919) Signed-off-by: Gurpreet41082 Signed-off-by: kongadurgesh * [INJIWEB-1711] - Refactor session management and credential matching services (#922) Signed-off-by: kongadurgesh * [INJIWEB-1711] - Migration from Custom Objects to Library Objects (#923) Signed-off-by: kongadurgesh * Injiweb 1711 refractor (#924) Signed-off-by: kongadurgesh * injiweb-1711 fixed the serialization issue of cache (#927) Signed-off-by: Gurpreet41082 Signed-off-by: kongadurgesh * [INJIWEB-1711] - Add Test cases (#928) Signed-off-by: kongadurgesh * [INJIWEB-1711] - add test cases (#933) Signed-off-by: kongadurgesh * Injiweb 1713 manage trust combined (#934) Signed-off-by: cyber-titan <124165966+cyber-titan@users.noreply.github.com> Signed-off-by: kongadurgesh * injiweb-1713-code-coverage added tests (#935) Signed-off-by: cyber-titan <124165966+cyber-titan@users.noreply.github.com> Signed-off-by: kongadurgesh * [INJIWEB-1712] - Implement presentation submission with verifiable presentation storage (#942) * [INJIWEB-1712] - Implement presentation submission with verifiable presentation storage - Add PresentationSubmissionService and implementation for handling VP submission - Create SubmitPresentationRequestDTO and SubmitPresentationResponseDTO - Add VerifiablePresentation entity and repository for VP persistence - Create new database table for storing verifiable presentations - Implement KeyPairService for generating and managing key pairs - Add Base64Util for encoding/decoding operations - Enhance WalletPresentationsController with submit presentation endpoint - Add OpenID4VPConstants for centralized OpenID4VP-related constants - Update SessionManager and other services to support VP submission flow Signed-off-by: kongadurgesh * [INJIWEB-1712] - Add test coverage for presentation submission and related services - Add comprehensive tests for PresentationSubmissionService - Add KeyPairService tests for all signing algorithms (RSA, ES256, ES256K, ED25519) - Add Base64Util test coverage for encoding/decoding operations - Expand WalletPresentationsController and CredentialRequestService tests - Fix key pair generation to match signing algorithm in tests - Cover multiple credential formats (LDP_VC, MSO_MDOC) and edge cases Signed-off-by: kongadurgesh * [INJIWEB-1712] - Refactor presentation submission flow and add comprehensive test coverage - Extract PresentationActionService for verifier authentication and VP token construction - Refactor PresentationSubmissionServiceImpl for better separation of concerns - Simplify WalletPresentationsController by moving business logic to service layer - Rename VerifiablePresentationRepository and add DTO validations Signed-off-by: kongadurgesh * [INJIWEB-1712] - remove IO Exceptions Signed-off-by: kongadurgesh --------- Signed-off-by: kongadurgesh * [INJIWEB-1712] - merge feature branch to develop Signed-off-by: kongadurgesh * [INJIWEB-1712] - Add upgrade scripts and docker table creation scripts Signed-off-by: kongadurgesh * INJIWEB-1712 - Remove deleted files from talisman Signed-off-by: kongadurgesh * Revert "MOSIP-41966: API - Negative testcases should not be there in Prerequisite section. (#844)" This reverts commit 775cd816b951bb13e735ab0585f04920759c4672. Signed-off-by: jackjain --------- Signed-off-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Signed-off-by: kongadurgesh Signed-off-by: cyber-titan <124165966+cyber-titan@users.noreply.github.com> Signed-off-by: Durgesh Konga Signed-off-by: Gurpreet41082 Signed-off-by: jackjain Co-authored-by: PuBHARGAVI <46226958+PuBHARGAVI@users.noreply.github.com> Co-authored-by: cyber-titan <124165966+cyber-titan@users.noreply.github.com> Co-authored-by: Rudhhi Shah Co-authored-by: jackjain --- .talismanrc | 77 +- api-test/pom.xml | 2 +- .../mimotoPrerequisiteSuite.xml | 9 + api-test/testNgXmlFiles/mimotoSuite.xml | 9 - db_scripts/inji_mimoto/ddl.sql | 2 + .../ddl/mimoto-trusted-verifiers.sql | 22 + .../ddl/mimoto-verifiable_presentations.sql | 33 + .../sql/0.19.0_to_0.19.1_rollback.sql | 1 + .../sql/0.19.0_to_0.19.1_upgrade.sql | 1 + .../sql/0.19.1_to_0.20.0_rollback.sql | 21 + .../sql/0.19.1_to_0.20.0_upgrade.sql | 56 + .../config/mimoto-default.properties | 2 + docker-compose/mimoto_init.sql | 21 +- docs/InjiIssuerConfigurationFeature.md | 3 + docs/api-documentation-openapi.json | 745 +++++++++ .../MIMOTO.postman_collection.json | 188 +++ pom.xml | 8 +- .../io/mosip/mimoto/config/CacheConfig.java | 11 +- .../mimoto/constant/OpenID4VPConstants.java | 71 + .../io/mosip/mimoto/constant/SessionKeys.java | 6 +- .../WalletPresentationsController.java | 238 +++ .../WalletTrustedVerifiersController.java | 95 ++ .../mimoto/dto/DecryptedCredentialDTO.java | 52 + .../java/io/mosip/mimoto/dto/ErrorDTO.java | 3 + .../dto/MatchingCredentialsResponseDTO.java | 26 + .../MatchingCredentialsWithWalletDataDTO.java | 25 + .../io/mosip/mimoto/dto/MatchingResult.java | 18 + .../mosip/mimoto/dto/RejectedVerifierDTO.java | 17 + .../mimoto/dto/SelectableCredentialDTO.java | 31 + .../dto/SubmitPresentationRequestDTO.java | 52 + .../dto/SubmitPresentationResponseDTO.java | 30 + .../mimoto/dto/TrustedVerifierRequest.java | 12 + .../dto/TrustedVerifierResponseDTO.java | 8 + ...iablePresentationAuthorizationRequest.java | 8 + .../VerifiablePresentationResponseDTO.java | 19 + .../VerifiablePresentationVerifierDTO.java | 31 + .../dto/mimoto/VCCredentialProperties.java | 3 +- .../dto/mimoto/VCCredentialResponse.java | 3 +- .../dto/mimoto/VCCredentialResponseProof.java | 3 +- .../openid/presentation/ConstraintsDTO.java | 2 +- .../PresentationDefinitionDTO.java | 2 +- .../VerifiablePresentationSessionData.java | 21 + .../mimoto/exception/ErrorConstants.java | 11 +- .../exception/VPErrorNotSentException.java | 20 + .../mimoto/model/CredentialMetadata.java | 4 +- .../mosip/mimoto/model/TrustedVerifier.java | 34 + .../mimoto/model/VerifiablePresentation.java | 55 + .../VerifiablePresentationsRepository.java | 14 + .../mimoto/repository/VerifierRepository.java | 10 + .../service/CredentialMatchingService.java | 12 + .../mosip/mimoto/service/KeyPairService.java | 25 + .../service/PresentationActionService.java | 33 + .../mimoto/service/PresentationService.java | 9 + .../PresentationSubmissionService.java | 40 + .../service/TrustedVerifierService.java | 10 + .../mosip/mimoto/service/VerifierService.java | 6 +- .../service/WalletCredentialService.java | 3 + .../impl/CredentialMatchingServiceImpl.java | 390 +++++ .../impl/CredentialRequestServiceImpl.java | 21 +- .../service/impl/KeyPairServiceImpl.java | 88 ++ .../mimoto/service/impl/OpenID4VPService.java | 89 ++ .../impl/PresentationActionServiceImpl.java | 126 ++ .../service/impl/PresentationServiceImpl.java | 140 +- .../PresentationSubmissionServiceImpl.java | 505 ++++++ .../mimoto/service/impl/SessionManager.java | 93 +- .../impl/TrustedVerifierServiceImpl.java | 41 + .../service/impl/VerifierServiceImpl.java | 37 + .../impl/WalletCredentialServiceImpl.java | 48 + .../java/io/mosip/mimoto/util/Base64Util.java | 188 +++ .../mimoto/util/GlobalExceptionHandler.java | 14 + .../mosip/mimoto/util/JwtGeneratorUtil.java | 4 +- .../mosip/mimoto/util/UrlParameterUtils.java | 49 + .../resources/application-default.properties | 2 + .../WalletPresentationsControllerTest.java | 590 +++++++ .../WalletTrustedVerifiersControllerTest.java | 251 +++ .../CredentialMatchingServiceTest.java | 1394 +++++++++++++++++ .../service/CredentialRequestServiceTest.java | 3 + .../mimoto/service/KeyPairServiceTest.java | 489 ++++++ .../mimoto/service/OpenID4VPServiceTest.java | 421 +++++ .../PresentationActionServiceTest.java | 360 +++++ .../service/PresentationServiceTest.java | 488 +++++- .../PresentationSubmissionServiceTest.java | 1256 +++++++++++++++ .../mimoto/service/SessionManagerTest.java | 383 +++++ .../service/TrustedVerifierServiceTest.java | 211 +++ .../mimoto/service/VerifierServiceTest.java | 202 ++- .../service/WalletCredentialServiceTest.java | 337 ++++ .../io/mosip/mimoto/util/Base64UtilTest.java | 611 ++++++++ .../util/GlobalExceptionHandlerTest.java | 26 + .../io/mosip/mimoto/util/TestUtilities.java | 73 +- .../mimoto/util/UrlParameterUtilsTest.java | 219 +++ 90 files changed, 11346 insertions(+), 76 deletions(-) create mode 100644 db_scripts/inji_mimoto/ddl/mimoto-trusted-verifiers.sql create mode 100644 db_scripts/inji_mimoto/ddl/mimoto-verifiable_presentations.sql create mode 100644 db_upgrade_script/inji_mimoto/sql/0.19.0_to_0.19.1_rollback.sql create mode 100644 db_upgrade_script/inji_mimoto/sql/0.19.0_to_0.19.1_upgrade.sql create mode 100644 db_upgrade_script/inji_mimoto/sql/0.19.1_to_0.20.0_rollback.sql create mode 100644 db_upgrade_script/inji_mimoto/sql/0.19.1_to_0.20.0_upgrade.sql create mode 100644 src/main/java/io/mosip/mimoto/constant/OpenID4VPConstants.java create mode 100644 src/main/java/io/mosip/mimoto/controller/WalletPresentationsController.java create mode 100644 src/main/java/io/mosip/mimoto/controller/WalletTrustedVerifiersController.java create mode 100644 src/main/java/io/mosip/mimoto/dto/DecryptedCredentialDTO.java create mode 100644 src/main/java/io/mosip/mimoto/dto/MatchingCredentialsResponseDTO.java create mode 100644 src/main/java/io/mosip/mimoto/dto/MatchingCredentialsWithWalletDataDTO.java create mode 100644 src/main/java/io/mosip/mimoto/dto/MatchingResult.java create mode 100644 src/main/java/io/mosip/mimoto/dto/RejectedVerifierDTO.java create mode 100644 src/main/java/io/mosip/mimoto/dto/SelectableCredentialDTO.java create mode 100644 src/main/java/io/mosip/mimoto/dto/SubmitPresentationRequestDTO.java create mode 100644 src/main/java/io/mosip/mimoto/dto/SubmitPresentationResponseDTO.java create mode 100644 src/main/java/io/mosip/mimoto/dto/TrustedVerifierRequest.java create mode 100644 src/main/java/io/mosip/mimoto/dto/TrustedVerifierResponseDTO.java create mode 100644 src/main/java/io/mosip/mimoto/dto/VerifiablePresentationAuthorizationRequest.java create mode 100644 src/main/java/io/mosip/mimoto/dto/VerifiablePresentationResponseDTO.java create mode 100644 src/main/java/io/mosip/mimoto/dto/VerifiablePresentationVerifierDTO.java create mode 100644 src/main/java/io/mosip/mimoto/dto/resident/VerifiablePresentationSessionData.java create mode 100644 src/main/java/io/mosip/mimoto/exception/VPErrorNotSentException.java create mode 100644 src/main/java/io/mosip/mimoto/model/TrustedVerifier.java create mode 100644 src/main/java/io/mosip/mimoto/model/VerifiablePresentation.java create mode 100644 src/main/java/io/mosip/mimoto/repository/VerifiablePresentationsRepository.java create mode 100644 src/main/java/io/mosip/mimoto/repository/VerifierRepository.java create mode 100644 src/main/java/io/mosip/mimoto/service/CredentialMatchingService.java create mode 100644 src/main/java/io/mosip/mimoto/service/KeyPairService.java create mode 100644 src/main/java/io/mosip/mimoto/service/PresentationActionService.java create mode 100644 src/main/java/io/mosip/mimoto/service/PresentationSubmissionService.java create mode 100644 src/main/java/io/mosip/mimoto/service/TrustedVerifierService.java create mode 100644 src/main/java/io/mosip/mimoto/service/impl/CredentialMatchingServiceImpl.java create mode 100644 src/main/java/io/mosip/mimoto/service/impl/KeyPairServiceImpl.java create mode 100644 src/main/java/io/mosip/mimoto/service/impl/OpenID4VPService.java create mode 100644 src/main/java/io/mosip/mimoto/service/impl/PresentationActionServiceImpl.java create mode 100644 src/main/java/io/mosip/mimoto/service/impl/PresentationSubmissionServiceImpl.java create mode 100644 src/main/java/io/mosip/mimoto/service/impl/TrustedVerifierServiceImpl.java create mode 100644 src/main/java/io/mosip/mimoto/util/Base64Util.java create mode 100644 src/main/java/io/mosip/mimoto/util/UrlParameterUtils.java create mode 100644 src/test/java/io/mosip/mimoto/controller/WalletPresentationsControllerTest.java create mode 100644 src/test/java/io/mosip/mimoto/controller/WalletTrustedVerifiersControllerTest.java create mode 100644 src/test/java/io/mosip/mimoto/service/CredentialMatchingServiceTest.java create mode 100644 src/test/java/io/mosip/mimoto/service/KeyPairServiceTest.java create mode 100644 src/test/java/io/mosip/mimoto/service/OpenID4VPServiceTest.java create mode 100644 src/test/java/io/mosip/mimoto/service/PresentationActionServiceTest.java create mode 100644 src/test/java/io/mosip/mimoto/service/PresentationSubmissionServiceTest.java create mode 100644 src/test/java/io/mosip/mimoto/service/SessionManagerTest.java create mode 100644 src/test/java/io/mosip/mimoto/service/TrustedVerifierServiceTest.java create mode 100644 src/test/java/io/mosip/mimoto/util/Base64UtilTest.java create mode 100644 src/test/java/io/mosip/mimoto/util/UrlParameterUtilsTest.java diff --git a/.talismanrc b/.talismanrc index be2dc0733..176efb42f 100644 --- a/.talismanrc +++ b/.talismanrc @@ -58,7 +58,7 @@ fileignoreconfig: - filename: docs/postman-collections/Collab.postman_environment.json checksum: 93662b305117d9ac73e9f8ace2bd8dc8b2de494908a8c69166d0c908cc80365c - filename: docs/postman-collections/MIMOTO.postman_collection.json - checksum: fd0eef9938e68389ec3f351cb3ec989e78007e89f38227bdd344afa92b74d462 + checksum: 4bcc2c9f893fef3e9a3abe4efc477b92cfb84728832f71848858ddced48958f5 - filename: src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java checksum: c4e28436cb04004d9cb4e1492a1d013eac076936a3fa3a99d35bfb137f27c37b - filename: .github/workflows/push-trigger.yml @@ -76,9 +76,9 @@ fileignoreconfig: - filename: src/test/java/io/mosip/mimoto/util/WalletValidatorTest.java checksum: 90dce7daa19f0eb9050194a3c77a88d449a83c337d9041bfdeb7bfded3bbd12c - filename: src/main/java/io/mosip/mimoto/exception/ErrorConstants.java - checksum: 21e2e13d05f14c20274524b531447886ee6582e618197255f00a2fcef562213c + checksum: 3766d9f0726f6f527aeca768ac173a6ea56f7df979e16e04a5a20d5ebe98eaf6 - filename: src/test/java/io/mosip/mimoto/util/TestUtilities.java - checksum: f916181b87d1388fa639267086a14dc5e5d7fcd4b27bd013919a46d8cebfa805 + checksum: 90d5310d9499acf98fd3d14230f70e8c378339ed46f384f02d170811a9b05dd5 - filename: src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java checksum: c378e601f657a82ef59da49c01e3b9d39619a2aec143c71b8a269ab1aeb815a1 - filename: src/main/java/io/mosip/mimoto/service/WalletUnlockService.java @@ -106,11 +106,11 @@ fileignoreconfig: - filename: docs/WalletUnlockProcess.md checksum: d172beb5aeef1037d70d2f83f034e6ec5e4ea69c6150ec6a25c9139c799b7879 - filename: docs/api-documentation-openapi.json - checksum: b5f643bfa3fcfec0548747a321f7ecc4b7b2b79fbbf3c0152c3369aeddf0f566 + checksum: da64851bf25f582280d50d78d8aefc6d12cb3a0d7fc6cdc0676962c9a297b1ea - filename: src/main/java/io/mosip/mimoto/util/JwtGeneratorUtil.java checksum: c8533dd38f79879119ba2895afca75d60e9704d5a0df4a0e79bc3b9292bd0d38 - filename: src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java - checksum: c2f731cdd77977bee05fade0751e2c7bac67d07b894a0746d984bbcaa82206f6 + checksum: e149260fd0607baad68daa20d8d14b320951497e932e13e6e148045673cd6257 - filename: src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java checksum: c669189f60e8fa5f0cb47d3c7cbb4ab34d87afbb6fb4de65b7eb06c691a41034 - filename: src/main/java/io/mosip/mimoto/constant/SigningAlgorithm.java @@ -120,11 +120,11 @@ fileignoreconfig: - filename: src/test/resources/application-test.properties checksum: eff6c72dfdc2e0a2aa4e3ec9d520a1433189902467954d123bc562df095a43bd - filename: src/main/resources/application-default.properties - checksum: b8a1f2eb85b23a1706f0d6f73d9416f2e337aa0e5b155728f16b81fca468591c + checksum: 05110c9a04d4b8013c15d4c9294ebe589f00d1917be3e9b9f40996974c6cba3a - filename: src/main/resources/application-local.properties checksum: 9f28cff2323b911e29d62510e11e68662fde473adb96dff0cc65409d80c6d828 - filename: docker-compose/config/mimoto-default.properties - checksum: fc10e892f9bc2a220b7f5cd3e5ea606d650b8a43b4c430d19d20ce7ecc5cd33d + checksum: 7fefcbd53ef6f34696c96be682dbb0d2d5535cea337d3ccb60f85a9cb9805cd1 - filename: README.md checksum: a22d46c4cf0c09d3a2a3665400118c2b919158ddbf6c20773955b2c7c72bb91f - filename: docker-compose/README.md @@ -133,4 +133,67 @@ fileignoreconfig: checksum: 425cb4066c02d93572b1db02099532465479e7f4c94c3684c5d46a063352631d - filename: src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java checksum: e91aa11aa049453a3a7cd542386dbb813f5c868678f68d6bd71af92149e0d5db +- filename: db_scripts/inji_mimoto/ddl.sql + checksum: 51cd2efbe5220b995ae7cff7d70797b2c1bde0ce3325b70d62a31a1f4f41aa47 +- filename: db_scripts/inji_mimoto/ddl/mimoto-trusted-verifiers.sql + checksum: bbb73e09a9669a8bf78a30b1a72ffdcdffee3f3eb92c5f39ffb5f6ae37e748d2 +- filename: db_scripts/inji_mimoto/ddl/mimoto-verifiable_presentations.sql + checksum: 61bba5988812b323c27f3a8fbdd4b802e09efe42772cbd4263a1bff814c74886 +- filename: src/main/java/io/mosip/mimoto/controller/OpenID4VPController.java + checksum: eef302db396aa1d46d128ef7422d5aeb00c9173af32f61effdf31a0762ddff83 +- filename: src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java + checksum: 04d143cb4cb10b7dd4d66344c412681a4888983e232f85e4a0e56237e5248325 +- filename: src/main/java/io/mosip/mimoto/service/impl/SessionManager.java + checksum: d88c08d3e5981286ace173e2b50ab6d87a55636b647a92829572a18999663e7c +- filename: src/test/java/io/mosip/mimoto/controller/WalletPresentationsControllerTest.java + checksum: 9e8d06af154c14fa40f16193aaee9c905fa5b03c99cb901a8a0b28b0b09121ba +- filename: src/main/java/io/mosip/mimoto/controller/WalletPresentationsController.java + checksum: 9e8d06af154c14fa40f16193aaee9c905fa5b03c99cb901a8a0b28b0b09121ba +- filename: db_upgrade_script/inji_mimoto/sql/0.14.x_to_0.15.x_upgrade.sql + checksum: 32d62be953744f5307f5807f434c1f98e040f9d85b2760d26605a65adbbd162f +- filename: src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java + checksum: f2f17ca6522b1b8f6018df19a0bea324edae5103936b538d3d675a1c4821e77a +- filename: db_upgrade_script/inji_mimoto/sql/0.14.x_to_0.15.x_rollback.sql + checksum: 21fdd239be77e4c8fa23cffe3c9799254a98536d433d74dde95add38ea288a8c + checksum: c7b264e1f134f3cfd83561143fc46e83168e664438f783109405b3ec7c753126 +- filename: src/main/java/io/mosip/mimoto/util/ClientValidationUtils.java + checksum: ef0cb7c9f0295ad7b5f25f4a73c998f55b2ed847922527929860b75eead7103c +- filename: src/main/java/io/mosip/mimoto/service/PresentationService.java + checksum: 3c08b0732807ca7cd2b3d73e2c5a1ecefb6a45e4dc9de70139c96b2563cd46a6 +- filename: src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java + checksum: b1c08308c2382634cf9c74cd6dbebdd2ea7b1b9842d04747d36b92e2908fd411 +- filename: src/main/java/io/mosip/mimoto/service/CredentialMatchingService.java + checksum: 688825bedb86334f4909812e95ddb6e46cbfa6b4c7a9599bfe48608843d129df +- filename: src/main/java/io/mosip/mimoto/service/impl/CredentialMatchingServiceImpl.java + checksum: 8066a922aa4683d182864bdb375936bb933c5813592e13d7073a712c654eaccb +- filename: src/test/java/io/mosip/mimoto/service/CredentialMatchingServiceTest.java + checksum: b1323c5b2d2209440ff2d4705d72d67cf93f3a790ef1a4bdeccc5c557686bd85 +- filename: src/test/java/io/mosip/mimoto/service/SessionManagerTest.java + checksum: f541358ce3b674a8865592b8c899c2dac484730b8790f9a99b6a79a5b7953c9a +- filename: src/main/java/io/mosip/mimoto/constant/OpenID4VPConstants.java + checksum: 81ca55276277c00a7121ecc70444202bd30a8a7f0c88b40799ab1106f5bbf0e5 +- filename: src/main/java/io/mosip/mimoto/service/KeyPairService.java + checksum: e2c4dbcdcf131b3026ba47cf8f7dddbd2cd71259888dad9160afd86b9aa7ea6d +- filename: src/main/java/io/mosip/mimoto/service/PresentationSubmissionService.java + checksum: f4cc9853d567931ae629ccf84568f148469e2853e477ea366e79585b9330a04d +- filename: src/main/java/io/mosip/mimoto/service/impl/KeyPairServiceImpl.java + checksum: f55561ba31c6710904b53502fde71564406e0f5102b8234f07e8789d7a313230 +- filename: src/main/java/io/mosip/mimoto/service/impl/PresentationSubmissionServiceImpl.java + checksum: 62fe8f55d40078eb88ca4bbf0f6b453f4be47a37e048796f08d94e9cd0aed1fb +- filename: src/test/java/io/mosip/mimoto/util/Base64UtilTest.java + checksum: 700663d179554cec53962c6ed12957411c5960c32bc0b8d799f79c1b92191c33 +- filename: src/test/java/io/mosip/mimoto/service/PresentationSubmissionServiceTest.java + checksum: 42154b3c9b9b392ad530d6edc5bb58bfa46a8f55ff744e50ab8ab1880a325bee +- filename: src/test/java/io/mosip/mimoto/service/KeyPairServiceTest.java + checksum: fbc153d7259000e237268025c0bef540fb1f76259901d2cc633adf81e251a450 +- filename: src/main/java/io/mosip/mimoto/service/impl/PresentationActionServiceImpl.java + checksum: 13f3da2b60a6319b1f48d5a98a726f5cad571865762626a06b432061097dafe3 +- filename: src/test/java/io/mosip/mimoto/service/PresentationActionServiceTest.java + checksum: f79257d43d522d4076e78fbe802c2e29184e8ff3a3347016578ffca56015a696 +- filename: db_upgrade_script/inji_mimoto/sql/0.19.1_to_0.20.0_rollback.sql + checksum: cbb93a2eadd7e1e1ee2ddf8d34466d20a835f9a63b598e5c9d1a1b425106a1a9 +- filename: db_upgrade_script/inji_mimoto/sql/0.19.1_to_0.20.0_upgrade.sql + checksum: a29f09c5c830e25f8535dc03e37fb763e986c198a2ab9ed39cbf7d5a839a831e +- filename: docker-compose/mimoto_init.sql + checksum: 56b62e7614c1a1dc5cb6ec29344c44e44b2dea2fb00a947e64633be4428a1ef1 version: "" \ No newline at end of file diff --git a/api-test/pom.xml b/api-test/pom.xml index f4dce7203..b51f5f2e3 100644 --- a/api-test/pom.xml +++ b/api-test/pom.xml @@ -68,7 +68,7 @@ io.mosip.testrig.apitest.commons apitest-commons - 1.3.4-SNAPSHOT + 1.2.1-SNAPSHOT diff --git a/api-test/testNgXmlFiles/mimotoPrerequisiteSuite.xml b/api-test/testNgXmlFiles/mimotoPrerequisiteSuite.xml index 657cfc971..5bf235412 100644 --- a/api-test/testNgXmlFiles/mimotoPrerequisiteSuite.xml +++ b/api-test/testNgXmlFiles/mimotoPrerequisiteSuite.xml @@ -15,6 +15,15 @@ + + + + + + + diff --git a/api-test/testNgXmlFiles/mimotoSuite.xml b/api-test/testNgXmlFiles/mimotoSuite.xml index 14d672425..6a6e5dcd9 100644 --- a/api-test/testNgXmlFiles/mimotoSuite.xml +++ b/api-test/testNgXmlFiles/mimotoSuite.xml @@ -8,15 +8,6 @@ - - - - - - - diff --git a/db_scripts/inji_mimoto/ddl.sql b/db_scripts/inji_mimoto/ddl.sql index 8464f8043..cf632aad3 100644 --- a/db_scripts/inji_mimoto/ddl.sql +++ b/db_scripts/inji_mimoto/ddl.sql @@ -8,3 +8,5 @@ \ir ddl/mimoto-wallet.sql \ir ddl/mimoto-proof_signing_keys.sql \ir ddl/mimoto-verifiable_credentials.sql +\ir ddl/mimoto-trusted-verifiers.sql +\ir ddl/mimoto-verifiable_presentations.sql diff --git a/db_scripts/inji_mimoto/ddl/mimoto-trusted-verifiers.sql b/db_scripts/inji_mimoto/ddl/mimoto-trusted-verifiers.sql new file mode 100644 index 000000000..e7ecbc89e --- /dev/null +++ b/db_scripts/inji_mimoto/ddl/mimoto-trusted-verifiers.sql @@ -0,0 +1,22 @@ +-- ------------------------------------------------------------------------------------------------- +-- Database Name: inji_mimoto +-- Table Name : trusted_verifiers +-- Purpose : Stores trusted verifiers associated with a user's wallet +-- +-- +-- Modified Date Modified By Comments / Remarks +-- ------------------------------------------------------------------------------------------ +-- ------------------------------------------------------------------------------------------ +CREATE TABLE IF NOT EXISTS trusted_verifiers ( + id character varying(36) PRIMARY KEY, -- Primary key for the table + wallet_id character varying(36) NOT NULL, -- Foreign key referring to the wallet table (wallet.id) + verifier_id character varying(255) NOT NULL, -- Stores the unique identifier (client_id) of the trusted verifier + created_at TIMESTAMP DEFAULT now() -- Timestamp of record creation (defaults to current time) +); + +COMMENT ON TABLE trusted_verifiers IS 'Trusted Verifiers: Contains information about verifiers trusted by a user''s wallet'; + +COMMENT ON COLUMN trusted_verifiers.id IS 'Primary Key: Unique identifier for the trusted verifier record'; +COMMENT ON COLUMN trusted_verifiers.wallet_id IS 'Wallet ID: Foreign key referring to the wallet table, linking the verifier to a specific wallet'; +COMMENT ON COLUMN trusted_verifiers.verifier_id IS 'Verifier ID: Unique identifier (client_id) of the trusted verifier'; +COMMENT ON COLUMN trusted_verifiers.created_at IS 'Created At: The date and time when the trusted verifier record was created'; \ No newline at end of file diff --git a/db_scripts/inji_mimoto/ddl/mimoto-verifiable_presentations.sql b/db_scripts/inji_mimoto/ddl/mimoto-verifiable_presentations.sql new file mode 100644 index 000000000..24b20a5bd --- /dev/null +++ b/db_scripts/inji_mimoto/ddl/mimoto-verifiable_presentations.sql @@ -0,0 +1,33 @@ +-- ------------------------------------------------------------------------------------------------- +-- Database Name: inji_mimoto +-- Table Name : verifiable_presentations +-- Purpose : Stores records of verifiable presentations submitted by a wallet to a verifier +-- +-- +-- Modified Date Modified By Comments / Remarks +-- ------------------------------------------------------------------------------------------ +-- ------------------------------------------------------------------------------------------ +CREATE TABLE IF NOT EXISTS verifiable_presentations ( + id character varying(36) PRIMARY KEY, -- Primary key for the presentation record (use presentationId) + wallet_id character varying(36) NOT NULL, -- Foreign key referring to the wallet table (wallet.id) + auth_request JSONB NOT NULL, -- Verifier's authorization request payload (as JSON) + presentation_data JSONB NOT NULL, -- Additional metadata including shared credential ids + verifier_id character varying(255), -- Verifier identifier (e.g., client_id) + status character varying(32) NOT NULL, -- Submission status: in-progress/success/error + requested_at TIMESTAMP, -- Verifier request timestamp + created_at TIMESTAMP DEFAULT now(), -- Submission timestamp (defaults to current time) + consent BOOLEAN NOT NULL DEFAULT TRUE, -- User consent flag + + CONSTRAINT fk_vp_wallet_id FOREIGN KEY (wallet_id) REFERENCES wallet (id) ON DELETE CASCADE +); + +COMMENT ON TABLE verifiable_presentations IS 'Verifiable Presentations: Records of presentations shared with verifiers'; +COMMENT ON COLUMN verifiable_presentations.id IS 'Primary Key: Unique identifier for the presentation (presentationId)'; +COMMENT ON COLUMN verifiable_presentations.wallet_id IS 'Wallet ID: Foreign key referring to the wallet table'; +COMMENT ON COLUMN verifiable_presentations.auth_request IS 'Authorization Request: The authorization request payload from the verifier'; +COMMENT ON COLUMN verifiable_presentations.presentation_data IS 'Presentation Data: Additional metadata including shared credential ids'; +COMMENT ON COLUMN verifiable_presentations.verifier_id IS 'Verifier Identifier: The verifier''s client_id or equivalent identifier'; +COMMENT ON COLUMN verifiable_presentations.status IS 'Status: in-progress/success/error'; +COMMENT ON COLUMN verifiable_presentations.requested_at IS 'Requested At: Timestamp when verifier requested the presentation'; +COMMENT ON COLUMN verifiable_presentations.created_at IS 'Created At: Timestamp when the submission record was created'; +COMMENT ON COLUMN verifiable_presentations.consent IS 'Consent: Indicates whether user consented to sharing'; diff --git a/db_upgrade_script/inji_mimoto/sql/0.19.0_to_0.19.1_rollback.sql b/db_upgrade_script/inji_mimoto/sql/0.19.0_to_0.19.1_rollback.sql new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/db_upgrade_script/inji_mimoto/sql/0.19.0_to_0.19.1_rollback.sql @@ -0,0 +1 @@ + diff --git a/db_upgrade_script/inji_mimoto/sql/0.19.0_to_0.19.1_upgrade.sql b/db_upgrade_script/inji_mimoto/sql/0.19.0_to_0.19.1_upgrade.sql new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/db_upgrade_script/inji_mimoto/sql/0.19.0_to_0.19.1_upgrade.sql @@ -0,0 +1 @@ + diff --git a/db_upgrade_script/inji_mimoto/sql/0.19.1_to_0.20.0_rollback.sql b/db_upgrade_script/inji_mimoto/sql/0.19.1_to_0.20.0_rollback.sql new file mode 100644 index 000000000..eadd07e91 --- /dev/null +++ b/db_upgrade_script/inji_mimoto/sql/0.19.1_to_0.20.0_rollback.sql @@ -0,0 +1,21 @@ +-- This Source Code Form is subject to the terms of the Mozilla Public +-- License, v. 2.0. If a copy of the MPL was not distributed with this +-- file, You can obtain one at https://mozilla.org/MPL/2.0/. +-- ------------------------------------------------------------------------------------------------- +-- Database Name: inji_mimoto +-- Table Name : trusted_verifiers +-- Purpose : To drop the trusted_verifiers table that was created in 0.14.x_to_0.15.x_upgrade.sql to make it backward compatibility +-- +-- Create By : Bhargavi Puvvada, Durgesh Konga +-- Created Date : 11-sep-2025 +-- +-- Modified Date Modified By Comments / Remarks +-- 07-Oct-2025 Durgesh Konga Added verifiable_presentations table to make it backward compatibility +-- ------------------------------------------------------------------------------------------ +-- ------------------------------------ + +-- Drop table for trusted_verifiers +DROP TABLE trusted_verifiers; + +-- Drop table for verifiable_presentations +DROP TABLE verifiable_presentations; \ No newline at end of file diff --git a/db_upgrade_script/inji_mimoto/sql/0.19.1_to_0.20.0_upgrade.sql b/db_upgrade_script/inji_mimoto/sql/0.19.1_to_0.20.0_upgrade.sql new file mode 100644 index 000000000..81ecc6ba5 --- /dev/null +++ b/db_upgrade_script/inji_mimoto/sql/0.19.1_to_0.20.0_upgrade.sql @@ -0,0 +1,56 @@ +-- This Source Code Form is subject to the terms of the Mozilla Public +-- License, v. 2.0. If a copy of the MPL was not distributed with this +-- file, You can obtain one at https://mozilla.org/MPL/2.0/. +-- ------------------------------------------------------------------------------------------------- +-- Database Name: inji_mimoto +-- Table Name : trusted_verifiers +-- Purpose : To store the verifiers details Which are trusted by the Wallet User +-- +-- Create By : Bhargavi Puvvada +-- Created Date : 09-Sep-2025 +-- +-- Modified Date Modified By Comments / Remarks +-- 07-Oct-2025 Durgesh Konga Added verifiable_presentations table to make it backward compatibility +-- ------------------------------------------------------------------------------------------ +-- ------------------------------------------------------------------------------------------ + +--- Create table for trusted_verifiers + +CREATE TABLE IF NOT EXISTS trusted_verifiers ( + id character varying(36) PRIMARY KEY, -- Primary key for the table + wallet_id character varying(36) NOT NULL, -- Foreign key referring to the wallet table (wallet.id) + verifier_id character varying(255) NOT NULL, -- Stores the unique identifier (client_id) of the trusted verifier + created_at TIMESTAMP DEFAULT now() -- Timestamp of record creation (defaults to current time) + ); + +-- Add comments for documentation +COMMENT ON TABLE trusted_verifiers IS 'Trusted Verifiers: Contains information about verifiers trusted by a user''s wallet'; + +COMMENT ON COLUMN trusted_verifiers.id IS 'Primary Key: Unique identifier for the trusted verifier record'; +COMMENT ON COLUMN trusted_verifiers.wallet_id IS 'Wallet ID: Foreign key referring to the wallet table, linking the verifier to a specific wallet'; +COMMENT ON COLUMN trusted_verifiers.verifier_id IS 'Verifier ID: Unique identifier (client_id) of the trusted verifier'; +COMMENT ON COLUMN trusted_verifiers.created_at IS 'Created At: The date and time when the trusted verifier record was created'; + +-- Create table for verifiable_presentations + +CREATE TABLE IF NOT EXISTS verifiable_presentations ( + id character varying(36) PRIMARY KEY, + wallet_id character varying(36) NOT NULL, + auth_request JSONB NOT NULL, + presentation_data JSONB NOT NULL, + verifier_id character varying(255), + status character varying(32) NOT NULL, + requested_at TIMESTAMP, + created_at TIMESTAMP DEFAULT now(), + consent BOOLEAN NOT NULL DEFAULT TRUE, +); +COMMENT ON TABLE verifiable_presentations IS 'Verifiable Presentations: Records of presentations shared with verifiers'; +COMMENT ON COLUMN verifiable_presentations.id IS 'Primary Key: Unique identifier for the presentation (presentationId)'; +COMMENT ON COLUMN verifiable_presentations.wallet_id IS 'Wallet ID: Foreign key referring to the wallet table'; +COMMENT ON COLUMN verifiable_presentations.auth_request IS 'Authorization Request: The authorization request payload from the verifier'; +COMMENT ON COLUMN verifiable_presentations.presentation_data IS 'Presentation Data: Additional metadata including shared credential ids'; +COMMENT ON COLUMN verifiable_presentations.verifier_id IS 'Verifier Identifier: The verifier''s client_id or equivalent identifier'; +COMMENT ON COLUMN verifiable_presentations.status IS 'Status: in-progress/success/error'; +COMMENT ON COLUMN verifiable_presentations.requested_at IS 'Requested At: Timestamp when verifier requested the presentation'; +COMMENT ON COLUMN verifiable_presentations.created_at IS 'Created At: Timestamp when the submission record was created'; +COMMENT ON COLUMN verifiable_presentations.consent IS 'Consent: Indicates whether user consented to sharing'; diff --git a/docker-compose/config/mimoto-default.properties b/docker-compose/config/mimoto-default.properties index c5506fa9c..1b8dc3cca 100644 --- a/docker-compose/config/mimoto-default.properties +++ b/docker-compose/config/mimoto-default.properties @@ -432,6 +432,8 @@ cache.credential-issuer.wellknown.expiry-time-in-min=60 cache.issuers-config.expiry-time-in-min=60 # Cache expiry time in minutes for the authentication server's well-known endpoint response. cache.credential-issuer.authserver-wellknown.expiry-time-in-min=60 +# Cache expiry time in minutes for the pre-registered trusted verifiers list. +cache.pre-registered-trusted-verifiers.expiry-time-in-min=60 # Default cache expiry time in minutes for others cache types cache.default.expiry-time-in-min=60 diff --git a/docker-compose/mimoto_init.sql b/docker-compose/mimoto_init.sql index 75c310b08..aaeb36ded 100644 --- a/docker-compose/mimoto_init.sql +++ b/docker-compose/mimoto_init.sql @@ -135,8 +135,25 @@ CREATE TABLE IF NOT EXISTS proof_signing_key ( CONSTRAINT fk_wallet_id FOREIGN KEY (wallet_id) REFERENCES wallet (id) ON DELETE CASCADE ); +CREATE TABLE IF NOT EXISTS trusted_verifiers ( + id character varying(36) PRIMARY KEY, -- Primary key for the table + wallet_id character varying(36) NOT NULL, -- Foreign key referring to the wallet table (wallet.id) + verifier_id character varying(255) NOT NULL, -- Stores the unique identifier (client_id) of the trusted verifier + created_at TIMESTAMP DEFAULT now() -- Timestamp of record creation (defaults to current time) +); + +CREATE TABLE IF NOT EXISTS verifiable_presentations ( + id character varying(36) PRIMARY KEY, + wallet_id character varying(36) NOT NULL, + auth_request JSONB NOT NULL, + presentation_data JSONB NOT NULL, + verifier_id character varying(255), + status character varying(32) NOT NULL, + requested_at TIMESTAMP, + created_at TIMESTAMP DEFAULT now(), + consent BOOLEAN NOT NULL DEFAULT TRUE, +); + INSERT INTO mimoto.key_policy_def(APP_ID,KEY_VALIDITY_DURATION,PRE_EXPIRE_DAYS,ACCESS_ALLOWED,IS_ACTIVE,CR_BY,CR_DTIMES) VALUES('ROOT', 2920, 1125, 'NA', true, 'mosipadmin', now()); INSERT INTO mimoto.key_policy_def(APP_ID,KEY_VALIDITY_DURATION,PRE_EXPIRE_DAYS,ACCESS_ALLOWED,IS_ACTIVE,CR_BY,CR_DTIMES) VALUES('BASE', 1095, 60, 'NA', true, 'mosipadmin', now()); INSERT INTO mimoto.key_policy_def(APP_ID,KEY_VALIDITY_DURATION,PRE_EXPIRE_DAYS,ACCESS_ALLOWED,IS_ACTIVE,CR_BY,CR_DTIMES) VALUES('MIMOTO', 1095, 60, 'NA', true, 'mosipadmin', now()); - - diff --git a/docs/InjiIssuerConfigurationFeature.md b/docs/InjiIssuerConfigurationFeature.md index cac23429d..d40b48754 100644 --- a/docs/InjiIssuerConfigurationFeature.md +++ b/docs/InjiIssuerConfigurationFeature.md @@ -52,6 +52,7 @@ The caching mechanism used in this project is Caffeine. Cache timeout properties - `cache.credential-issuer.wellknown.expiry-time-in-min`: Cache expiry time in minutes for the issuer's well-known endpoint response. - `cache.issuers-config.expiry-time-in-min`: Cache expiry time in minutes for issuers configurations read from a config file. - `cache.credential-issuer.authserver-wellknown.expiry-time-in-min`: Cache expiry time in minutes for the authentication server's well-known endpoint response. +- `cache.pre-registered-trusted-verifiers.expiry-time-in-min`: Cache expiry time in minutes for the pre-registered trusted verifiers list. - `cache.default.expiry-time-in-min`: Default cache expiry time in minutes for other cache types. ### Increasing Cache Time @@ -66,6 +67,8 @@ cache.credential-issuer.wellknown.expiry-time-in-min = 120 cache.issuers-config.expiry-time-in-min = 120 # Cache expiry time in minutes for the authentication server's well-known endpoint response. cache.credential-issuer.authserver-wellknown.expiry-time-in-min = 120 +# Cache expiry time in minutes for the pre-registered trusted verifiers list. +cache.pre-registered-trusted-verifiers.expiry-time-in-min=60 # Default cache expiry time in minutes for other cache types. cache.default.expiry-time-in-min = 120 ``` \ No newline at end of file diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index 208ed578b..257478ab5 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -4028,6 +4028,578 @@ } } }, + "/wallets/{walletId}/presentations": { + "post": { + "tags": [ + "Wallet Presentations" + ], + "summary": "Processes Verifiable Presentation Authorization Request and provides details about the verifier and presentation.", + "description": "This API is secured using session-based authentication. Upon receiving a request, the session is first retrieved using the session ID extracted from the Cookie header to authenticate the user. Once authenticated, the API processes the received Verifiable Presentation Authorization Request from the Verifier for a specific wallet. It validates the session, verifies the authenticity of the request, and checks if the Verifier is pre-registered and trusted by the wallet. If all validations pass, the API returns a response containing the presentation details; otherwise, an appropriate error response is returned.", + "operationId": "processVPAuthorizationRequest", + "parameters": [ + { + "name": "walletId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "The unique identifier of the Wallet." + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VerifiablePresentationAuthorizationRequest" + }, + "examples": { + "Verifier Verifiable Presentation Authorization Request": { + "value": { + "authorizationRequestUrl": "client_id=mock-client&presentation_definition_uri=https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fpresentation_definition_uri&response_type=vp_token&response_mode=direct_post&nonce=NHgLcWlae745DpfJbUyfdg%253D%253D&response_uri=https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fvp-response&state=pcmxBfvdPEcjFObgt%252BLekA%253D%253D" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Successfully processed the Verifiable Presentation Authorization Request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VerifiablePresentationResponseDTO" + }, + "examples": { + "Success response": { + "value": { + "presentationId": "123e4567-e89b-12d3-a456-426614174000", + "verifier": { + "id": "mock-client", + "name": "Requester name", + "logo": "https://api.collab.mosip.net/inji/verifier-logo.png", + "isTrusted": true, + "isPreregisteredWithWallet": true, + "redirectUri": "https://injiverify.collab.mosip.net/redirect" + } + } + } + } + } + } + }, + "400": { + "description": "Invalid request or missing required parameters.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "response_type is missing in Authorization request": { + "value": { + "errorCode": "invalid_request", + "errorMessage": "Missing Input: response_type param is required" + } + }, + "Invalid Wallet ID": { + "value": { + "errorCode": "invalid_request", + "errorMessage": "Invalid Wallet ID. Session and request Wallet ID do not match" + } + }, + "Wallet ID not found in session": { + "value": { + "errorCode": "wallet_locked", + "errorMessage": "Wallet is locked" + } + } + } + } + } + }, + "401": { + "description": "Unauthorized user performing the Verifiable Presentation flow", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "User ID is not present in session": { + "value": { + "errorCode": "unauthorized", + "errorMessage": "User ID not found in session" + } + } + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "Failed to fetch pre-registered trusted verifiers": { + "value": { + "errorCode": "RESIDENT-APP-026", + "errorMessage": "Api not accessible failure" + } + }, + "Unexpected Server Error": { + "value": { + "errorCode": "internal_server_error", + "errorMessage": "We are unable to process request now" + } + } + } + } + } + } + }, + "security": [ + { + "SessionAuth": [] + } + ] + } + }, + "/wallets/{walletId}/presentations/{presentationId}": { + "patch": { + "tags": [ + "Wallet Presentations" + ], + "summary": "Handles user submission or rejection of a presentation", + "description": "This API allows users to accept or reject a presentation request by selecting specific credentials. Upon acceptance, the system fetches the selected credentials, constructs and signs a VP token, shares it with the verifier, and stores the presentation record in the database.", + "operationId": "handlePresentationSubmission", + "parameters": [ + { + "name": "walletId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "The unique identifier of the Wallet." + }, + { + "name": "presentationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "The unique identifier of the Presentation." + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "oneOf": [ + { "$ref": "#/components/schemas/PresentationSubmissionRequestDTO" }, + { "$ref": "#/components/schemas/Error" } + ] + }, + "examples": { + "Presentation Submission Request": { + "value": { + "selectedCredentials": ["cred-123", "cred-456"] + } + }, + "Rejection payload": { + "value": { + "errorCode": "access_denied", + "errorMessage": "User denied authorization to share credentials" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Successfully processed the presentation submission.", + "content": { + "application/json": { + "schema": { + "oneOf": [ + { "$ref": "#/components/schemas/PresentationSubmissionResponseDTO" }, + { "$ref": "#/components/schemas/RejectedVerifierDTO" } + ] + }, + "examples": { + "Success response": { + "value": { + "presentationId": "123e4567-e89b-12d3-a456-426614174000", + "status": "success", + "message": "Presentation submitted successfully" + } + }, "Response when successfully rejected": { + "value": { + "status": "success", + "message": "Presentation request rejected. An OpenID4VP error response has been sent to the verifier.", + "redirectUri": "https://client.example.org/cb#response_code=091535f699ea575c7937fa5f0f454aee" + } + }, "Response when an error occurs while submitting a rejection": { + "value": { + "status": "error", + "message": "Failed to submit Verifiable Presentation" + } + } + } + } + } + }, + "400": { + "description": "Invalid request or missing required parameters.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "Invalid Wallet ID": { + "value": { + "errorCode": "invalid_request", + "errorMessage": "Invalid Wallet ID. Session and request Wallet ID do not match" + } + }, + "Wallet ID not found in session": { + "value": { + "errorCode": "wallet_locked", + "errorMessage": "Wallet is locked" + } + }, + "Credential not found": { + "value": { + "errorCode": "invalid_request", + "errorMessage": "Credential not found: cred-123" + } + }, + "presentationId not found in session": { + "value": { + "errorCode": "invalid_request", + "errorMessage": "presentationId not found in session" + } + } + } + } + } + }, + "401": { + "description": "Unauthorized user performing the presentation submission", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "User ID is not present in session": { + "value": { + "errorCode": "unauthorized", + "errorMessage": "User ID not found in session" + } + } + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "Failed to process presentation submission": { + "value": { + "errorCode": "wallet_vp_submission_error", + "errorMessage": "Failed to process presentation submission: Error message" + } + }, + "Unexpected Server Error": { + "value": { + "errorCode": "internal_server_error", + "errorMessage": "We are unable to process request now" + } + }, + "Failed to reject verifier": { + "value": { + "errorCode": "error", + "errorMessage": "Unable to process reject verifier request" + } + } + } + } + } + } + }, + "security": [ + { + "SessionAuth": [] + } + ] + } + }, + "/wallets/{walletId}/presentations/{presentationId}/credentials": { + "get": { + "tags": [ + "Wallet Presentations" + ], + "summary": "Get matching credentials for a presentation request", + "description": "This API retrieves credentials from the wallet that match the presentation definition requirements. It returns available credentials that can satisfy the presentation request along with any missing claims that are required but not available.", + "operationId": "getMatchingCredentials", + "parameters": [ + { + "name": "walletId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "The unique identifier of the Wallet." + }, + { + "name": "presentationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "The unique identifier of the Presentation." + } + ], + "responses": { + "200": { + "description": "Successfully retrieved matching credentials.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MatchingCredentialsResponseDTO" + }, + "examples": { + "Success response": { + "value": { + "availableCredentials": [ + { + "credentialId": "cred-123", + "credentialTypeDisplayName": "Mock Verifiable Credential (SD-JWT)", + "credentialTypeLogo": "https://mosip.github.io/inji-config/logos/mosipid-logo.png", + "format": "ldp_vc" + } + ], + "missingClaims": ["$.type"] + } + } + } + } + } + }, + "400": { + "description": "Invalid request or missing required parameters.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "Invalid Wallet ID": { + "value": { + "errorCode": "invalid_request", + "errorMessage": "Invalid Wallet ID. Session and request Wallet ID do not match" + } + }, + "Presentation not found": { + "value": { + "errorCode": "invalid_request", + "errorMessage": "Presentation not found in session" + } + } + } + } + } + }, + "401": { + "description": "Unauthorized user performing the Verifiable Presentation flow", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "User ID is not present in session": { + "value": { + "errorCode": "unauthorized", + "errorMessage": "User ID not found in session" + } + } + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "Unexpected Server Error": { + "value": { + "errorCode": "internal_server_error", + "errorMessage": "We are unable to process request now" + } + } + } + } + } + } + }, + "security": [ + { + "SessionAuth": [] + } + ] + } + }, + "/wallets/{walletId}/trusted-verifiers": { + "post": { + "tags": [ + "Wallet Trusted Verifiers" + ], + "summary": "Add a trusted verifier to a wallet", + "description": "Adds a trusted verifier for the specified wallet after validating the session and request. Requires an active session; the path walletId must match the wallet in session.", + "operationId": "addTrustedVerifier", + "security": [ + { + "SessionAuth": [] + } + ], + "parameters": [ + { + "name": "walletId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "The unique identifier of the wallet." + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TrustedVerifierRequest" + }, + "examples": { + "Trusted Verifier Request": { + "value": { + "verifierId": "mock-client" + } + } + } + } + } + }, + "responses": { + "201": { + "description": "Trusted verifier created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TrustedVerifierResponseDTO" + }, + "examples": { + "Success response": { + "value": { + "id": "uuid" + } + } + } + } + } + }, + "400": { + "description": "Invalid request or missing required parameters", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "Missing verifierId": { + "value": { + "errorCode": "invalid_request", + "errorMessage": "Missing Input: verifierId is required" + } + }, + "Invalid Wallet ID": { + "value": { + "errorCode": "invalid_request", + "errorMessage": "Invalid Wallet ID. Session and request Wallet ID do not match" + } + }, + "Duplicate verifier": { + "value": { + "errorCode": "duplicate_verifier", + "errorMessage": "Verifier is already trusted for this wallet" + } + } + } + } + } + }, + "401": { + "description": "Unauthorized - session invalid or missing user", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "Unauthorized": { + "value": { + "errorCode": "unauthorized", + "errorMessage": "User ID not found in session" + } + } + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "Unexpected Server Error": { + "value": { + "errorCode": "internal_server_error", + "errorMessage": "We are unable to process request now" + } + } + } + } + } + } + } + } + }, "/auth/{provider}/token-login": { "post": { "tags": ["OAuth2 Authentication"], @@ -4302,6 +4874,103 @@ } } }, + "VerifiablePresentationAuthorizationRequest": { + "type": "object", + "properties": { + "authorizationRequestUrl": { + "type": "string", + "description": "The complete authorization request URL received from the Verifier" + } + }, + "required": [ + "authorizationRequestUrl" + ] + }, + "VerifiablePresentationResponseDTO": { + "type": "object", + "properties": { + "presentationId": { + "type": "string", + "description": "Unique identifier for the verifiable presentation request" + }, + "verifier": { + "$ref": "#/components/schemas/VerifiablePresentationVerifierDTO" + } + } + }, + "VerifiablePresentationVerifierDTO": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The client ID of the verifier" + }, + "name": { + "type": "string", + "description": "The name of the verifier" + }, + "logo": { + "type": "string", + "format": "uri", + "description": "The logo URI of the verifier" + }, + "isTrusted": { + "type": "boolean", + "description": "Indicates if the verifier is trusted by the wallet" + }, + "isPreregisteredWithWallet": { + "type": "boolean", + "description": "Indicates if the verifier is pre-registered with the wallet" + }, + "redirectUri": { + "type": "string", + "format": "uri", + "description": "The redirect URI provided in the authorization request to redirect the User back to Verifier" + } + } + }, + "PresentationSubmissionRequestDTO": { + "type": "object", + "properties": { + "selectedCredentials": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of selected credential IDs for presentation", + "example": ["cred-123", "cred-456"] + } + }, + "required": [ + "selectedCredentials" + ] + }, + "PresentationSubmissionResponseDTO": { + "type": "object", + "properties": { + "presentationId": { + "type": "string", + "description": "Unique identifier for the presentation", + "example": "123e4567-e89b-12d3-a456-426614174000" + }, + "status": { + "type": "string", + "description": "Status of the presentation submission", + "example": "success", + "enum": ["success", "error"] + }, + "message": { + "type": "string", + "description": "Response message", + "example": "Presentation submitted successfully" + } + }, + "required": [ + "presentationId", + "status", + "message" + ] + }, "IssuerConfigurationSuccessResponse": { "type": "object", "properties": { @@ -4563,6 +5232,82 @@ "type": "string" } } + }, + "MatchingCredentialsResponseDTO": { + "type": "object", + "properties": { + "availableCredentials": { + "type": "array", + "description": "List of credentials that match the presentation definition", + "items": { + "$ref": "#/components/schemas/AvailableCredentialDTO" + } + }, + "missingClaims": { + "type": "array", + "description": "List of claims that are required but not available in any credential", + "items": { + "type": "string" + } + } + } + }, + "AvailableCredentialDTO": { + "type": "object", + "properties": { + "credentialId": { + "type": "string", + "description": "Unique identifier of the credential" + }, + "credentialTypeDisplayName": { + "type": "string", + "description": "Display name of the credential type" + }, + "credentialTypeLogo": { + "type": "string", + "format": "uri", + "description": "Logo URL for the credential type" + }, + "format": { + "type": "string", + "description": "Format of the credential (e.g., ldp_vc, vc+sd-jwt, dc+sd-jwt)", + "example": "ldp_vc" + } + } + }, + "TrustedVerifierRequest": { + "type": "object", + "properties": { + "verifierId": { + "type": "string", + "description": "Unique client id of the verifier" + } + }, + "required": [ + "verifierId" + ] + }, + "TrustedVerifierResponseDTO": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "UUID of the trusted verifier" + } + }, + "required": [ + "id" + ] + } + , + "RejectedVerifierDTO": { + "type": "object", + "properties": { + "status": { "type": "string", "description": "Status of the rejection request (for example success)" }, + "message": { "type": "string", "description": "Human readable message describing the result" }, + "redirectUri": { "type": "string", "description": "Redirect URI provided to the verifier" } + }, + "required": [ "status", "message", "redirectUri" ] } } }, diff --git a/docs/postman-collections/MIMOTO.postman_collection.json b/docs/postman-collections/MIMOTO.postman_collection.json index 4f2de57f9..f4c715752 100644 --- a/docs/postman-collections/MIMOTO.postman_collection.json +++ b/docs/postman-collections/MIMOTO.postman_collection.json @@ -426,9 +426,197 @@ "url": "{{HOST}}/wallets/" }, "response": [] + }, + { + "name": "Add Trusted Verifier", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Cookie", + "value": "SESSION={{SESSION_TOKEN}}", + "type": "text" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"verifierId\": \"mock-client\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{HOST}}/wallets/{{walletId}}/trusted-verifiers", + "host": [ + "{{HOST}}" + ], + "path": [ + "wallets", + "{{walletId}}", + "trusted-verifiers" + ] + } + }, + "response": [] + } + ] + }, + { + "name": "Wallet Presentations", + "item": [ + { + "name": "Create Presentation", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "// Store the response body in a variable", + "let presentationResponse = pm.response.json();", + "", + "// Parse the response body to extract the presentationId", + "let presentationId = presentationResponse.presentationId;", + "", + "pm.environment.set(\"presentationId\", presentationId);", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"authorizationRequestUrl\": \"{{verifierAuthorizationRequestUrl}}\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{HOST}}/wallets/{{walletId}}/presentations", + "host": [ + "{{HOST}}" + ], + "path": [ + "wallets", + "{{walletId}}", + "presentations" + ] + } + }, + "response": [] + }, + { + "name": "Get Matching Credentials", + "request": { + "method": "GET", + "url": { + "raw": "{{HOST}}/wallets/{{walletId}}/presentations/{{presentationId}}/credentials", + "host": [ + "{{HOST}}" + ], + "path": [ + "wallets", + "{{walletId}}", + "presentations", + "{{presentationId}}", + "credentials" + ] + } + }, + "response": [] + }, + { + "name": "Submit Presentation", + "request": { + "method": "PATCH", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"selectedCredentials\": [\"{{credentialId1}}\", \"{{credentialId2}}\"]\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{HOST}}/wallets/{{walletId}}/presentations/{{presentationId}}", + "host": [ + "{{HOST}}" + ], + "path": [ + "wallets", + "{{walletId}}", + "presentations", + "{{presentationId}}" + ] + } + }, + "response": [] } ] }, + { + "name": "User Reject Verifier", + "request": { + "method": "PATCH", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Cookie", + "value": "SESSION={{SESSION_TOKEN}}", + "type": "text" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"errorCode\": \"access_denied\",\n \"errorMessage\": \"User denied authorization to share credentials\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{HOST}}/wallets/{{walletId}}/presentations/{{presentationId}}", + "host": [ + "{{HOST}}" + ], + "path": [ + "wallets", + "{{walletId}}", + "presentations", + "{{presentationId}}" + ] + } + }, + "response": [] + }, { "name": "Users", "item": [ diff --git a/pom.xml b/pom.xml index 6f6a28cfc..a9b28d97f 100644 --- a/pom.xml +++ b/pom.xml @@ -144,7 +144,12 @@ io.mosip vcverifier-jar - 1.4.0 + 1.5.0-SNAPSHOT + + + io.mosip + inji-openid4vp-jar + 0.6.0-SNAPSHOT io.micrometer @@ -229,7 +234,6 @@ kernel-logger-logback ${mosip.kernel.core.version} - io.mosip.kernel kernel-auth-adapter diff --git a/src/main/java/io/mosip/mimoto/config/CacheConfig.java b/src/main/java/io/mosip/mimoto/config/CacheConfig.java index d60dde0fe..36ec6899d 100644 --- a/src/main/java/io/mosip/mimoto/config/CacheConfig.java +++ b/src/main/java/io/mosip/mimoto/config/CacheConfig.java @@ -50,6 +50,7 @@ public class CacheConfig { private static final String ISSUER_WELLKNOWN_CACHE = "issuerWellknown"; private static final String ISSUERS_CONFIG_CACHE = "issuersConfig"; private static final String AUTH_SERVER_WELLKNOWN_CACHE = "authServerWellknown"; + private static final String PRE_REGISTERED_TRUSTED_VERIFIERS_CACHE = "preRegisteredTrustedVerifiers"; @Value("${cache.credential-issuer.wellknown.expiry-time-in-min:60}") private Long issuerWellknownExpiryTimeInMin; @@ -60,6 +61,9 @@ public class CacheConfig { @Value("${cache.credential-issuer.authserver-wellknown.expiry-time-in-min:60}") private Long authServerWellknownExpiryTimeInMin; + @Value("${cache.pre-registered-trusted-verifiers.expiry-time-in-min:60}") + private Long preRegisteredTrustedVerifiersExpiryTimeInMin; + @Value("${cache.default.expiry-time-in-min:60}") private long defaultCacheExpiryTimeInMin; @@ -101,6 +105,10 @@ public CacheManagerCustomizer caffeineCacheManagerCustomiz AUTH_SERVER_WELLKNOWN_CACHE, createCaffeineCacheConfig(authServerWellknownExpiryTimeInMin).build() ); + cacheManager.registerCustomCache( + PRE_REGISTERED_TRUSTED_VERIFIERS_CACHE, + createCaffeineCacheConfig(preRegisteredTrustedVerifiersExpiryTimeInMin).build() + ); // Set the default Caffeine config for any other caches cacheManager.setCaffeine(createCaffeineCacheConfig(null)); }; @@ -131,7 +139,8 @@ public RedisCacheManagerBuilderCustomizer redisCacheManagerBuilderCustomizer() { Map cacheConfigurations = Map.of( ISSUER_WELLKNOWN_CACHE, createRedisConfigWithTtl(defaultCacheConfig, issuerWellknownExpiryTimeInMin), ISSUERS_CONFIG_CACHE, createRedisConfigWithTtl(defaultCacheConfig, issuersConfigExpiryTimeInMin), - AUTH_SERVER_WELLKNOWN_CACHE, createRedisConfigWithTtl(defaultCacheConfig, authServerWellknownExpiryTimeInMin) + AUTH_SERVER_WELLKNOWN_CACHE, createRedisConfigWithTtl(defaultCacheConfig, authServerWellknownExpiryTimeInMin), + PRE_REGISTERED_TRUSTED_VERIFIERS_CACHE, createRedisConfigWithTtl(defaultCacheConfig, preRegisteredTrustedVerifiersExpiryTimeInMin) ); // Apply default and per-cache configurations diff --git a/src/main/java/io/mosip/mimoto/constant/OpenID4VPConstants.java b/src/main/java/io/mosip/mimoto/constant/OpenID4VPConstants.java new file mode 100644 index 000000000..e296c15f4 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/constant/OpenID4VPConstants.java @@ -0,0 +1,71 @@ +package io.mosip.mimoto.constant; + +/** + * Constants for OpenID4VP structure keys used in presentation definitions, authorization requests, and VP session data. + */ +public class OpenID4VPConstants { + + // VP Session data keys + public static final String CREATED_AT = "createdAt"; + public static final String OPENID4VP_INSTANCE = "openID4VPInstance"; + + // Authorization request structure keys + public static final String AUTHORIZATION_REQUEST = "authorizationRequest"; + public static final String AUTHORIZATION_REQUEST_URL = "authorizationRequestUrl"; + + // Presentation definition structure keys + public static final String PRESENTATION_DEFINITION = "presentationDefinition"; + public static final String ID = "id"; + public static final String INPUT_DESCRIPTORS = "inputDescriptors"; + public static final String FORMAT = "format"; + public static final String CONSTRAINTS = "constraints"; + public static final String LIMIT_DISCLOSURE = "limitDisclosure"; + public static final String FIELDS = "fields"; + public static final String PATH = "path"; + public static final String FILTER = "filter"; + public static final String TYPE = "type"; + public static final String PATTERN = "pattern"; + + // VP Token signing result keys + public static final String JWS = "jws"; + public static final String PROOF_VALUE = "proofValue"; + public static final String SIGNATURE_ALGORITHM = "signatureAlgorithm"; + public static final String SIGNATURE = "signature"; + public static final String MDOC_AUTHENTICATION_ALGORITHM = "mdocAuthenticationAlgorithm"; + public static final String DOCUMENT_TYPE_SIGNATURES = "documentTypeSignatures"; + + // MSO_MDOC specific keys + public static final String DOC_TYPE_TO_DEVICE_AUTHENTICATION_BYTES = "docTypeToDeviceAuthenticationBytes"; + + // Credential format type strings + public static final String FORMAT_LDP_VC_UNDERSCORE = "ldp_vc"; + public static final String FORMAT_LDP_VC_HYPHEN = "ldp-vc"; + public static final String FORMAT_MSO_MDOC_UNDERSCORE = "mso_mdoc"; + public static final String FORMAT_MSO_MDOC_HYPHEN = "mso-mdoc"; + + // Algorithm names + public static final String ALGORITHM_ES256 = "ES256"; + public static final String ALGORITHM_EDDSA = "EdDSA"; + + // JWT separators and delimiters + public static final String DETACHED_JWT_SEPARATOR = ".."; + + // JWT header critical parameters + public static final String JWT_CRITICAL_PARAM_B64 = "b64"; + + // DID (Decentralized Identifier) related constants + public static final String DID_JWK_PREFIX = "did:jwk:"; + public static final String DID_KEY_FRAGMENT = "#0"; + + // Response status constants + public static final String STATUS_SUCCESS = "success"; + public static final String STATUS_ERROR = "error"; + + // Response message constants + public static final String MESSAGE_PRESENTATION_SUCCESS = "Presentation successfully submitted"; + public static final String MESSAGE_PRESENTATION_SHARE_FAILED = "Failed to submit Verifiable Presentation"; + + // Credential selection keys + public static final String SELECTED_CREDENTIALS = "selectedCredentials"; +} + diff --git a/src/main/java/io/mosip/mimoto/constant/SessionKeys.java b/src/main/java/io/mosip/mimoto/constant/SessionKeys.java index 581671419..08553b416 100644 --- a/src/main/java/io/mosip/mimoto/constant/SessionKeys.java +++ b/src/main/java/io/mosip/mimoto/constant/SessionKeys.java @@ -1,8 +1,12 @@ package io.mosip.mimoto.constant; public class SessionKeys { + // User session keys public static final String USER_ID = "userId"; public static final String USER_METADATA = "userMetadata"; public static final String WALLET_KEY = "wallet_key"; public static final String WALLET_ID = "wallet_id"; -} + public static final String CLIENT_REGISTRATION_ID = "clientRegistrationId"; + + public static final String PRESENTATIONS = "presentations"; +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/controller/WalletPresentationsController.java b/src/main/java/io/mosip/mimoto/controller/WalletPresentationsController.java new file mode 100644 index 000000000..276e392bc --- /dev/null +++ b/src/main/java/io/mosip/mimoto/controller/WalletPresentationsController.java @@ -0,0 +1,238 @@ +package io.mosip.mimoto.controller; + +import io.mosip.mimoto.constant.SessionKeys; +import io.mosip.mimoto.dto.ErrorDTO; +import io.mosip.mimoto.dto.MatchingCredentialsResponseDTO; +import io.mosip.mimoto.dto.MatchingCredentialsWithWalletDataDTO; +import io.mosip.mimoto.dto.SubmitPresentationRequestDTO; +import io.mosip.mimoto.dto.VerifiablePresentationAuthorizationRequest; +import io.mosip.mimoto.dto.VerifiablePresentationResponseDTO; +import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.InvalidRequestException; +import io.mosip.mimoto.exception.VPNotCreatedException; +import io.mosip.mimoto.service.CredentialMatchingService; +import io.mosip.mimoto.service.PresentationService; +import io.mosip.mimoto.service.PresentationActionService; +import io.mosip.mimoto.service.impl.SessionManager; +import io.mosip.mimoto.util.Utilities; +import io.mosip.mimoto.util.WalletUtil; +import io.mosip.openID4VP.exceptions.OpenID4VPExceptions; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.ExampleObject; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import jakarta.servlet.http.HttpSession; +import jakarta.validation.Valid; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.net.URISyntaxException; +import java.time.Instant; + +import static io.mosip.mimoto.exception.ErrorConstants.*; + +@Slf4j +@RestController +@RequestMapping("/wallets/{walletId}/presentations") +public class WalletPresentationsController { + + @Autowired + private PresentationService presentationService; + + @Autowired + private CredentialMatchingService credentialMatchingService; + + @Autowired + private SessionManager sessionManager; + + @Autowired + private PresentationActionService presentationActionService; + + /** + * Processes the Verifiable Presentation Authorization Request for a specific wallet. + * + * @param walletId The unique identifier of the wallet. + * @param httpSession The HTTP session containing wallet details such as wallet ID. + * @param vpAuthorizationRequest The Verifiable Presentation Authorization Request parameters. + * @return The processed Verifiable Presentation details, including information about the verifier. + */ + @Operation(summary = "Processes Verifiable Presentation Authorization Request and provides details about the verifier and presentation.", description = "This API is secured using session-based authentication. Upon receiving a request, the session is first retrieved using the session ID extracted from the Cookie header to authenticate the user. Once authenticated, the API processes the received Verifiable Presentation Authorization Request from the Verifier for a specific wallet. It validates the session, verifies the authenticity of the request, and checks if the Verifier is pre-registered and trusted by the wallet. If all validations pass, the API returns a response containing the presentation details; otherwise, an appropriate error response is returned.", operationId = "processVPAuthorizationRequest", security = @SecurityRequirement(name = "SessionAuth"), parameters = { + @Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "The unique identifier of the Wallet.", schema = @Schema(type = "string"))}, + requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody( + required = true, + description = "Request body containing the Verifiable Presentation Authorization Request parameters.", + content = @Content( + mediaType = "application/json", + schema = @Schema(implementation = VerifiablePresentationAuthorizationRequest.class), + examples = @ExampleObject( + name = "Verifier Verifiable Presentation Authorization Request", + value = "{ \"authorizationRequestUrl\": \"client_id=mock-client&presentation_definition_uri=https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fpresentation_definition_uri&response_type=vp_token&response_mode=direct_post&nonce=NHgLcWlae745DpfJbUyfdg%253D%253D&response_uri=https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fvp-response&state=pcmxBfvdPEcjFObgt%252BLekA%253D%253D\" }" + ) + ) + ) + ) + @ApiResponse(responseCode = "200", description = "Successfully processed the Verifiable Presentation Authorization Request.", content = @Content(mediaType = "application/json", schema = @Schema(implementation = VerifiablePresentationResponseDTO.class), examples = @ExampleObject(name = "Success response", value = "{ \"presentationId\": \"123e4567-e89b-12d3-a456-426614174000\", \"verifier\": { \"id\": \"mock-client\", \"name\": \"Requester name\", \"logo\": \"https://api.collab.mosip.net/inji/verifier-logo.png\", \"isTrusted\": true, \"isPreregisteredWithWallet\": true, \"redirectUri\": \"https://injiverify.collab.mosip.net/redirect\" } }"))) + @ApiResponse(responseCode = "400", description = "Invalid request or missing required parameters.", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = { + @ExampleObject(name = "response_type is missing in Authorization request", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Missing Input: response_type param is required\"}"), + @ExampleObject(name = "Invalid Wallet ID", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Invalid Wallet ID. Session and request Wallet ID do not match\"}"), + @ExampleObject(name = "Wallet ID not found in session", value = "{\"errorCode\": \"wallet_locked\", \"errorMessage\": \"Wallet is locked\"}") + })) + @ApiResponse(responseCode = "401", description = "Unauthorized user performing the Verifiable Presentation flow", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "User ID is not present in session", value = "{\"errorCode\": \"unauthorized\", \"errorMessage\": \"User ID not found in session\"}"))) + @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = { + @ExampleObject(name = "Failed to fetch pre-registered trusted verifiers", value = "{\"errorCode\": \"RESIDENT-APP-026\", \"errorMessage\": \"Api not accessible failure\"}"), + @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"), + @ExampleObject(name = "Invalid URI syntax", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Incorrect URI parameters in the request\"}") + })) + @PostMapping + public ResponseEntity handleVPAuthorizationRequest(@PathVariable("walletId") String walletId, HttpSession httpSession, @RequestBody VerifiablePresentationAuthorizationRequest vpAuthorizationRequest) { + try { + WalletUtil.validateWalletId(httpSession, walletId); + + VerifiablePresentationResponseDTO verifiablePresentationResponseDTO = presentationService.handleVPAuthorizationRequest(vpAuthorizationRequest.getAuthorizationRequestUrl(), walletId); + + VerifiablePresentationSessionData verifiablePresentationSessionData = new VerifiablePresentationSessionData(verifiablePresentationResponseDTO.getPresentationId(), + vpAuthorizationRequest.getAuthorizationRequestUrl(), Instant.now(), + verifiablePresentationResponseDTO.getVerifiablePresentationVerifierDTO().isPreregisteredWithWallet(), null); + + sessionManager.storePresentationSessionData(httpSession, verifiablePresentationSessionData, walletId); + + return ResponseEntity.status(HttpStatus.OK).body(verifiablePresentationResponseDTO); + } catch (OpenID4VPExceptions exception) { + log.error("Error occurred while processing the received VP Authorization Request from Verifier: ", exception); + return Utilities.getErrorResponseEntityWithoutWrapper( + exception, exception.getErrorCode(), HttpStatus.BAD_REQUEST, MediaType.APPLICATION_JSON); + } catch (ApiNotAccessibleException | IOException | VPNotCreatedException exception) { + return Utilities.getErrorResponseEntityWithoutWrapper( + exception, WALLET_CREATE_VP_EXCEPTION.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); + } catch (URISyntaxException exception) { + return Utilities.getErrorResponseEntityWithoutWrapper( + exception, INVALID_REQUEST.getErrorCode(), HttpStatus.BAD_REQUEST, MediaType.APPLICATION_JSON); + } + } + + /** + * Gets matching credentials for a specific presentation request. + * + * @param walletId The unique identifier of the wallet. + * @param presentationId The unique identifier of the presentation. + * @param httpSession The HTTP session containing wallet details. + * @return The matching credentials response with available credentials and + * missing claims. + */ + @Operation(summary = "Get matching credentials for a presentation request", description = "This API retrieves credentials from the wallet that match the presentation definition requirements. It returns available credentials that can satisfy the presentation request along with any missing claims that are required but not available.", operationId = "getMatchingCredentials", security = @SecurityRequirement(name = "SessionAuth"), parameters = {@Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "The unique identifier of the Wallet.", schema = @Schema(type = "string")), @Parameter(name = "presentationId", in = ParameterIn.PATH, required = true, description = "The unique identifier of the Presentation.", schema = @Schema(type = "string"))}) + @ApiResponse(responseCode = "200", description = "Successfully retrieved matching credentials.", content = @Content(mediaType = "application/json", schema = @Schema(implementation = MatchingCredentialsResponseDTO.class), examples = @ExampleObject(name = "Success response", value = "{ \"availableCredentials\": [{ \"credentialId\": \"cred-123\", \"credentialTypeDisplayName\": \"Mock Verifiable Credential (SD-JWT)\", \"credentialTypeLogo\": \"https://mosip.github.io/inji-config/logos/mosipid-logo.png\", \"type\": [\"IDCredential\"], \"claims\": { \"birthdate\": \"1990-01-01\" } }], \"missingClaims\": [] }"))) + @ApiResponse(responseCode = "400", description = "Invalid request or missing required parameters.", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "Invalid Wallet ID", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Invalid Wallet ID. Session and request Wallet ID do not match\"}"), @ExampleObject(name = "Presentation not found", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Presentation not found in session\"}")})) + @ApiResponse(responseCode = "401", description = "Unauthorized user performing the Verifiable Presentation flow", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "User ID is not present in session", value = "{\"errorCode\": \"unauthorized\", \"errorMessage\": \"User ID not found in session\"}"))) + @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"))) + @GetMapping("/{presentationId}/credentials") + public ResponseEntity getMatchingCredentials(@PathVariable("walletId") String walletId, @PathVariable("presentationId") String presentationId, HttpSession httpSession) { + + WalletUtil.validateWalletId(httpSession, walletId); + + String base64Key = (String) httpSession.getAttribute(SessionKeys.WALLET_KEY); + if (base64Key == null) { + log.warn("Wallet key not found in session for walletId: {}", walletId); + return Utilities.getErrorResponseEntityFromPlatformErrorMessage(UNAUTHORIZED_ACCESS, HttpStatus.UNAUTHORIZED, MediaType.APPLICATION_JSON); + } + + VerifiablePresentationSessionData sessionData = sessionManager.getPresentationSessionData(httpSession, walletId, presentationId); + + try { + MatchingCredentialsWithWalletDataDTO matchingCredentialsWithWalletData = credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); + // Store the matching credentials and pre-filtered matched credentials in session cache before returning + sessionManager.storeMatchingWalletCredentialsInPresentationSessionData(httpSession, walletId, sessionData, matchingCredentialsWithWalletData.getMatchingCredentials()); + return ResponseEntity.status(HttpStatus.OK).body(matchingCredentialsWithWalletData.getMatchingCredentialsResponse()); + } catch (ApiNotAccessibleException | IOException | VPNotCreatedException exception) { + return Utilities.getErrorResponseEntityWithoutWrapper( + exception, WALLET_CREATE_VP_EXCEPTION.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); + } catch (IllegalArgumentException exception) { + return Utilities.getErrorResponseEntityWithoutWrapper( + exception, INVALID_REQUEST.getErrorCode(), HttpStatus.BAD_REQUEST, MediaType.APPLICATION_JSON); + } + + } + + /** + * Handles presentation submission or verifier rejection based on the request content. + * + * If the request contains selectedCredentials (and no error fields), it submits the presentation. + * If the request contains errorCode and errorMessage (and no selected credentials), it rejects the verifier. + * + * @param walletId The unique identifier of the wallet. + * @param httpSession The HTTP session containing wallet details. + * @param presentationId The unique identifier of the presentation. + * @param request The request containing either selected credentials or error details. + * @return Response indicating success/failure of the operation. + */ + @Operation( + summary = "Submit presentation or reject verifier", + description = "This API handles both presentation submission and verifier rejection based on the request content. " + + "For submission: include selectedCredentials array. " + + "For rejection: include errorCode and errorMessage fields.", + operationId = "handlePresentationAction", + security = @SecurityRequirement(name = "SessionAuth"), + parameters = { + @Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "The unique identifier of the Wallet.", schema = @Schema(type = "string")), + @Parameter(name = "presentationId", in = ParameterIn.PATH, required = true, description = "The presentation session identifier.", schema = @Schema(type = "string")) + }, + requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody( + required = true, + description = "Request body containing either selected credentials for submission or error details for rejection.", + content = @Content( + mediaType = "application/json", + schema = @Schema(implementation = SubmitPresentationRequestDTO.class), + examples = { + @ExampleObject(name = "Submit Presentation", value = "{ \"selectedCredentials\": [\"cred-123\", \"cred-456\"] }"), + @ExampleObject(name = "Reject Verifier", value = "{ \"errorCode\": \"access_denied\", \"errorMessage\": \"User denied authorization to share credentials\" }") + } + ) + ) + ) + @ApiResponse(responseCode = "200", description = "Successfully processed the request.", content = @Content(mediaType = "application/json", examples = { + @ExampleObject(name = "Presentation submitted", value = "{ \"presentationId\": \"presentation-123\", \"status\": \"SUCCESS\", \"message\": \"Presentation successfully submitted and shared with verifier\" }"), + @ExampleObject(name = "Verifier rejected", value = "{\"status\": \"success\", \"message\": \"Presentation request rejected. An OpenID4VP error response has been sent to the verifier.\"}") + })) + @ApiResponse(responseCode = "400", description = "Invalid request or missing required parameters.", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = { + @ExampleObject(name = "Invalid request format", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Request must contain either selectedCredentials or both errorCode and errorMessage\"}"), + @ExampleObject(name = "Invalid Wallet ID", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Invalid Wallet ID. Session and request Wallet ID do not match\"}"), + @ExampleObject(name = "Presentation not found", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Presentation not found in session\"}") + })) + @ApiResponse(responseCode = "401", description = "Unauthorized user", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "unauthorized", value = "{\"errorCode\": \"unauthorized\", \"errorMessage\": \"User ID not found in session\"}"))) + @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Server error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"))) + @PatchMapping("/{presentationId}") + public ResponseEntity handlePresentationAction(@PathVariable("walletId") String walletId, HttpSession httpSession, @PathVariable("presentationId") String presentationId, @Valid @RequestBody SubmitPresentationRequestDTO request) { + + try { + WalletUtil.validateWalletId(httpSession, walletId); + + VerifiablePresentationSessionData vpSessionData = sessionManager.getPresentationSessionData(httpSession, walletId, presentationId); + + if (vpSessionData == null) { + log.error("No presentation session data found in session for presentationId: {}", presentationId); + return Utilities.getErrorResponseEntityWithoutWrapper(new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "presentationId not found in session"), INVALID_REQUEST.getErrorCode(), HttpStatus.BAD_REQUEST, MediaType.APPLICATION_JSON); + } + + String base64Key = (String) httpSession.getAttribute(SessionKeys.WALLET_KEY); + if (base64Key == null) { + log.warn("Wallet key not found in session for walletId: {}", walletId); + return Utilities.getErrorResponseEntityFromPlatformErrorMessage(UNAUTHORIZED_ACCESS, HttpStatus.UNAUTHORIZED, MediaType.APPLICATION_JSON); + } + + return presentationActionService.handlePresentationAction(walletId, presentationId, request, vpSessionData, base64Key); + + } catch (Exception exception) { + log.error("Unexpected error during presentation action for walletId: {}, presentationId: {}", walletId, presentationId, exception); + return Utilities.getErrorResponseEntityWithoutWrapper(exception, INTERNAL_SERVER_ERROR.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); + } + } +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/controller/WalletTrustedVerifiersController.java b/src/main/java/io/mosip/mimoto/controller/WalletTrustedVerifiersController.java new file mode 100644 index 000000000..005d43aa4 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/controller/WalletTrustedVerifiersController.java @@ -0,0 +1,95 @@ +package io.mosip.mimoto.controller; + +import io.mosip.mimoto.dto.*; +import io.mosip.mimoto.service.TrustedVerifierService; +import io.mosip.mimoto.util.Utilities; +import io.mosip.mimoto.util.WalletUtil; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.ExampleObject; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import jakarta.servlet.http.HttpSession; +import jakarta.validation.Valid; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessException; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import io.mosip.mimoto.dto.TrustedVerifierResponseDTO; + +import static io.mosip.mimoto.exception.ErrorConstants.ERROR_ADDING_TRUSTED_VERIFIER; + +@Slf4j +@RestController +@Validated +@RequestMapping("/wallets/{walletId}/trusted-verifiers") +public class WalletTrustedVerifiersController { + + @Autowired + TrustedVerifierService trustedVerifierService; + + /** + * Adds a trusted verifier for the specified wallet. + * + * Validates that the caller has an active session and that the provided + * path `walletId` matches the wallet stored in the session. The request + * body contains verifier details (for example: verifierId. + * On success the created verifier record is returned with HTTP 201 Created. + * + * @param walletId The unique identifier of the wallet. Must match the wallet id in session. + * @param trustedVerifierRequest Trusted verifier details required to register the verifier for the wallet. + * @param httpSession HTTP session containing authenticated user and wallet information. + * @return ResponseEntity containing the created TrustedVerifierResponseDTO and HTTP 201 status on success. + */ + @Operation( + summary = "Add a trusted verifier to a wallet", + description = "Adds a trusted verifier for the specified wallet after validating the session and request. " + + "Requires an active session; the path walletId must match the wallet in session. Returns the created verifier details on success.", + operationId = "addTrustedVerifier", + security = @SecurityRequirement(name = "SessionAuth"), + parameters = { + @Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "The unique identifier of the wallet.", schema = @Schema(type = "string")) + }, + requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody( + required = true, + description = "Trusted verifier details to add to the wallet.", + content = @Content( + mediaType = "application/json", + schema = @Schema(implementation = TrustedVerifierRequest.class), + examples = @ExampleObject( + name = "Trusted Verifier Request", + value = "{ \"verifierId\": \"mock-client\" }" + ) + ) + ) + ) + @ApiResponse(responseCode = "201", description = "Trusted verifier created successfully.", content = @Content(mediaType = "application/json", schema = @Schema(implementation = TrustedVerifierResponseDTO.class), examples = @ExampleObject(name = "Success response", value = "{ \"id\": \"uuid\" }"))) + @ApiResponse(responseCode = "400", description = "Invalid request or missing required parameters.", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = { + @ExampleObject(name = "Missing verifierId", value = "{\"errorCode\":\"invalid_request\",\"errorMessage\":\"Missing Input: verifierId is required\"}"), + @ExampleObject(name = "Invalid Wallet ID", value = "{\"errorCode\":\"invalid_request\",\"errorMessage\":\"Invalid Wallet ID. Session and request Wallet ID do not match\"}"), + @ExampleObject(name = "Duplicate verifier", value = "{\"errorCode\":\"duplicate_verifier\",\"errorMessage\":\"Verifier is already trusted for this wallet\"}") + })) + @ApiResponse(responseCode = "401", description = "Unauthorized - session invalid or missing user.", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unauthorized", value = "{\"errorCode\":\"unauthorized\",\"errorMessage\":\"User ID not found in session\"}"))) + @ApiResponse(responseCode = "500", description = "Internal server error.", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\":\"internal_server_error\",\"errorMessage\":\"Failed to add trusted verifier\"}"))) + @PostMapping + public ResponseEntity addTrustedVerifier(@PathVariable(name = "walletId") String walletId, @Valid @RequestBody TrustedVerifierRequest trustedVerifierRequest, HttpSession httpSession) { + try { + WalletUtil.validateWalletId(httpSession, walletId); + + TrustedVerifierResponseDTO trustedVerifierResponseDTO = trustedVerifierService.addTrustedVerifier(walletId, trustedVerifierRequest); + return ResponseEntity.status(HttpStatus.CREATED).body(trustedVerifierResponseDTO); + } catch (DataAccessException e) { + log.error("Unexpected error while adding trusted verifier for walletId: {} - Error: {}", walletId, e.getMessage(), e); + return Utilities.getErrorResponseEntityWithoutWrapper(e, + ERROR_ADDING_TRUSTED_VERIFIER.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); + } + } + +} diff --git a/src/main/java/io/mosip/mimoto/dto/DecryptedCredentialDTO.java b/src/main/java/io/mosip/mimoto/dto/DecryptedCredentialDTO.java new file mode 100644 index 000000000..1febebe74 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/DecryptedCredentialDTO.java @@ -0,0 +1,52 @@ +package io.mosip.mimoto.dto; + +import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; +import io.mosip.mimoto.model.CredentialMetadata; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.time.Instant; + +/** + * DTO that contains decrypted credential data for session caching. + * This avoids the need to decrypt credentials multiple times. + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DecryptedCredentialDTO implements Serializable { + + /** + * The credential ID from the original VerifiableCredential. + */ + private String id; + + /** + * The wallet ID from the original VerifiableCredential. + */ + private String walletId; + + /** + * The decrypted credential data as VCCredentialResponse. + */ + private VCCredentialResponse credential; + + /** + * The credential metadata from the original VerifiableCredential. + */ + private CredentialMetadata credentialMetadata; + + /** + * The creation timestamp from the original VerifiableCredential. + */ + private Instant createdAt; + + /** + * The update timestamp from the original VerifiableCredential. + */ + private Instant updatedAt; +} diff --git a/src/main/java/io/mosip/mimoto/dto/ErrorDTO.java b/src/main/java/io/mosip/mimoto/dto/ErrorDTO.java index 9afae3488..5656b4037 100644 --- a/src/main/java/io/mosip/mimoto/dto/ErrorDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/ErrorDTO.java @@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonAlias; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -28,9 +29,11 @@ public class ErrorDTO implements Serializable { /** The errorcode. */ @Schema(description = "It represents the type or category of the error") + @NotBlank(message = "errorCode is required") private String errorCode; @Schema(description = "A human-readable message providing more details about the error") + @NotBlank(message = "errorMessage is required") /** The message. */ @JsonAlias("message") private String errorMessage; diff --git a/src/main/java/io/mosip/mimoto/dto/MatchingCredentialsResponseDTO.java b/src/main/java/io/mosip/mimoto/dto/MatchingCredentialsResponseDTO.java new file mode 100644 index 000000000..6a4e1e9b1 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/MatchingCredentialsResponseDTO.java @@ -0,0 +1,26 @@ +package io.mosip.mimoto.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; +import java.util.Set; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class MatchingCredentialsResponseDTO { + + @JsonProperty("availableCredentials") + @Schema(description = "List of credentials that match the presentation definition") + private List availableCredentials; + + @JsonProperty("missingClaims") + @Schema(description = "List of claims that are required but not available in any credential") + private Set missingClaims; +} diff --git a/src/main/java/io/mosip/mimoto/dto/MatchingCredentialsWithWalletDataDTO.java b/src/main/java/io/mosip/mimoto/dto/MatchingCredentialsWithWalletDataDTO.java new file mode 100644 index 000000000..e0886c8c0 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/MatchingCredentialsWithWalletDataDTO.java @@ -0,0 +1,25 @@ +package io.mosip.mimoto.dto; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * DTO that contains both the matching credentials response and the wallet credentials from repository. + * This helps avoid duplicate database hits when both pieces of data are needed. + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class MatchingCredentialsWithWalletDataDTO { + + private MatchingCredentialsResponseDTO matchingCredentialsResponse; + + @JsonIgnore + private List matchingCredentials; +} diff --git a/src/main/java/io/mosip/mimoto/dto/MatchingResult.java b/src/main/java/io/mosip/mimoto/dto/MatchingResult.java new file mode 100644 index 000000000..d6b7f3290 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/MatchingResult.java @@ -0,0 +1,18 @@ +package io.mosip.mimoto.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class MatchingResult { + + private List availableCredentials; + private List missingClaims; +} diff --git a/src/main/java/io/mosip/mimoto/dto/RejectedVerifierDTO.java b/src/main/java/io/mosip/mimoto/dto/RejectedVerifierDTO.java new file mode 100644 index 000000000..8c126bab6 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/RejectedVerifierDTO.java @@ -0,0 +1,17 @@ +package io.mosip.mimoto.dto; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) +public class RejectedVerifierDTO { + + private String status; + private String redirectUri; + private String message; +} diff --git a/src/main/java/io/mosip/mimoto/dto/SelectableCredentialDTO.java b/src/main/java/io/mosip/mimoto/dto/SelectableCredentialDTO.java new file mode 100644 index 000000000..c60ae8402 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/SelectableCredentialDTO.java @@ -0,0 +1,31 @@ +package io.mosip.mimoto.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SelectableCredentialDTO { + + @JsonProperty("credentialId") + @Schema(description = "Unique identifier of the credential") + private String credentialId; + + @JsonProperty("credentialTypeDisplayName") + @Schema(description = "Display name of the credential type") + private String credentialTypeDisplayName; + + @JsonProperty("credentialTypeLogo") + @Schema(description = "Logo URL for the credential type") + private String credentialTypeLogo; + + @JsonProperty("format") + @Schema(description = "Format of the credential (e.g., ldp_vc, vc+sd-jwt, dc+sd-jwt)") + private String format; +} diff --git a/src/main/java/io/mosip/mimoto/dto/SubmitPresentationRequestDTO.java b/src/main/java/io/mosip/mimoto/dto/SubmitPresentationRequestDTO.java new file mode 100644 index 000000000..c37e7b84f --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/SubmitPresentationRequestDTO.java @@ -0,0 +1,52 @@ +package io.mosip.mimoto.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * DTO for submitting a presentation with selected credentials or rejecting a verifier + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Schema(description = "Request payload for submitting a presentation with selected credentials or rejecting a verifier") +public class SubmitPresentationRequestDTO { + + @Schema(description = "List of credential IDs that the user has selected to include in the presentation", + example = "[\"cred-123\", \"cred-456\"]") + private List selectedCredentials; + + @Schema(description = "Error code for rejecting the verifier (used when user denies the presentation request)", + example = "access_denied") + private String errorCode; + + @Schema(description = "Error message for rejecting the verifier (used when user denies the presentation request)", + example = "User denied authorization to share credentials") + private String errorMessage; + + /** + * Checks if this is a submission request (has selected credentials and NO error fields) + */ + public boolean isSubmissionRequest() { + boolean hasCredentials = selectedCredentials != null && !selectedCredentials.isEmpty(); + boolean hasErrorFields = (errorCode != null && !errorCode.trim().isEmpty()) || + (errorMessage != null && !errorMessage.trim().isEmpty()); + return hasCredentials && !hasErrorFields; + } + + /** + * Checks if this is a rejection request (has error code and message and NO credentials) + */ + public boolean isRejectionRequest() { + boolean hasErrorFields = errorCode != null && !errorCode.trim().isEmpty() && + errorMessage != null && !errorMessage.trim().isEmpty(); + boolean hasCredentials = selectedCredentials != null && !selectedCredentials.isEmpty(); + return hasErrorFields && !hasCredentials; + } +} diff --git a/src/main/java/io/mosip/mimoto/dto/SubmitPresentationResponseDTO.java b/src/main/java/io/mosip/mimoto/dto/SubmitPresentationResponseDTO.java new file mode 100644 index 000000000..ca1ba9dca --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/SubmitPresentationResponseDTO.java @@ -0,0 +1,30 @@ +package io.mosip.mimoto.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * DTO for the response when a presentation is successfully submitted + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Schema(description = "Response payload for successful presentation submission") +public class SubmitPresentationResponseDTO { + + @Schema(description = "Unique identifier of the submitted presentation", + example = "presentation-123") + private String presentationId; + + @Schema(description = "Status of the presentation submission", + example = "SUCCESS") + private String status; + + @Schema(description = "Message indicating the result of the submission", + example = "Presentation successfully submitted and shared with verifier") + private String message; +} diff --git a/src/main/java/io/mosip/mimoto/dto/TrustedVerifierRequest.java b/src/main/java/io/mosip/mimoto/dto/TrustedVerifierRequest.java new file mode 100644 index 000000000..0938c4144 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/TrustedVerifierRequest.java @@ -0,0 +1,12 @@ +package io.mosip.mimoto.dto; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; +import lombok.Data; + +@Data +public class TrustedVerifierRequest { + @NotBlank(message = "verifierId is required") + @Size(max = 255, message = "verifierId must not exceed 255 characters") + private String verifierId; +} diff --git a/src/main/java/io/mosip/mimoto/dto/TrustedVerifierResponseDTO.java b/src/main/java/io/mosip/mimoto/dto/TrustedVerifierResponseDTO.java new file mode 100644 index 000000000..6e8b0d200 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/TrustedVerifierResponseDTO.java @@ -0,0 +1,8 @@ +package io.mosip.mimoto.dto; + +import lombok.Data; + +@Data +public class TrustedVerifierResponseDTO { + private String id; +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/dto/VerifiablePresentationAuthorizationRequest.java b/src/main/java/io/mosip/mimoto/dto/VerifiablePresentationAuthorizationRequest.java new file mode 100644 index 000000000..857ee25c6 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/VerifiablePresentationAuthorizationRequest.java @@ -0,0 +1,8 @@ +package io.mosip.mimoto.dto; + +import lombok.Data; + +@Data +public class VerifiablePresentationAuthorizationRequest { + private String authorizationRequestUrl; +} diff --git a/src/main/java/io/mosip/mimoto/dto/VerifiablePresentationResponseDTO.java b/src/main/java/io/mosip/mimoto/dto/VerifiablePresentationResponseDTO.java new file mode 100644 index 000000000..4e5aa8e61 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/VerifiablePresentationResponseDTO.java @@ -0,0 +1,19 @@ +package io.mosip.mimoto.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class VerifiablePresentationResponseDTO { + + @Schema(description = "Unique identifier for the Verifiable Presentation") + String presentationId; + + @JsonProperty("verifier") + @Schema(description = "Information about the Verifier who sent the Verifiable Presentation request") + VerifiablePresentationVerifierDTO verifiablePresentationVerifierDTO; + +} diff --git a/src/main/java/io/mosip/mimoto/dto/VerifiablePresentationVerifierDTO.java b/src/main/java/io/mosip/mimoto/dto/VerifiablePresentationVerifierDTO.java new file mode 100644 index 000000000..e60afcdde --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/VerifiablePresentationVerifierDTO.java @@ -0,0 +1,31 @@ +package io.mosip.mimoto.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import org.hibernate.validator.constraints.URL; + +@Data +@AllArgsConstructor +public class VerifiablePresentationVerifierDTO { + + @Schema(description = "Unique identifier (client_id) of the Verifier") + private String id; + + @Schema(description = "Name of the Verifier") + private String name; + + @URL + @Schema(description = "Logo URL of the Verifier") + private String logo; + + @Schema(description = "Indicates if the Verifier is trusted by the User through the wallet") + private boolean isTrusted; + + @Schema(description = "Indicates if the Verifier is pre-registered with the wallet") + private boolean isPreregisteredWithWallet; + + @URL + @Schema(description = "Redirect URI used to redirect the User back to the Verifier after the presentation is completed") + private String redirectUri; +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialProperties.java b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialProperties.java index 555104c11..6a539cc5f 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialProperties.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialProperties.java @@ -10,6 +10,7 @@ import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotEmpty; +import java.io.Serializable; import java.util.List; import java.util.Map; @@ -18,7 +19,7 @@ @NoArgsConstructor @AllArgsConstructor @Builder -public class VCCredentialProperties { +public class VCCredentialProperties implements Serializable { private String issuer; @JsonInclude(JsonInclude.Include.NON_NULL) diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponse.java index 3eeaf8e2d..469c92348 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponse.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponse.java @@ -8,12 +8,13 @@ import jakarta.validation.Valid; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; +import java.io.Serializable; @Data @NoArgsConstructor @AllArgsConstructor @Builder -public class VCCredentialResponse { +public class VCCredentialResponse implements Serializable { @NotBlank private String format; diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponseProof.java b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponseProof.java index 455a61120..f6ae44850 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponseProof.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialResponseProof.java @@ -7,12 +7,13 @@ import lombok.NoArgsConstructor; import jakarta.validation.constraints.NotBlank; +import java.io.Serializable; @Data @NoArgsConstructor @AllArgsConstructor @Builder -public class VCCredentialResponseProof { +public class VCCredentialResponseProof implements Serializable { @NotBlank private String type; @NotBlank diff --git a/src/main/java/io/mosip/mimoto/dto/openid/presentation/ConstraintsDTO.java b/src/main/java/io/mosip/mimoto/dto/openid/presentation/ConstraintsDTO.java index 4968420e8..f89018619 100644 --- a/src/main/java/io/mosip/mimoto/dto/openid/presentation/ConstraintsDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/openid/presentation/ConstraintsDTO.java @@ -13,6 +13,6 @@ public class ConstraintsDTO { FieldDTO[] fields; - @JsonProperty("limit_disclosure") + @JsonProperty("limitDisclosure") private String limitDisclosure; } diff --git a/src/main/java/io/mosip/mimoto/dto/openid/presentation/PresentationDefinitionDTO.java b/src/main/java/io/mosip/mimoto/dto/openid/presentation/PresentationDefinitionDTO.java index eed13571c..0f3a86dbe 100644 --- a/src/main/java/io/mosip/mimoto/dto/openid/presentation/PresentationDefinitionDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/openid/presentation/PresentationDefinitionDTO.java @@ -15,6 +15,6 @@ public class PresentationDefinitionDTO { String id; - @JsonProperty("input_descriptors") + @JsonProperty("inputDescriptors") List inputDescriptors; } diff --git a/src/main/java/io/mosip/mimoto/dto/resident/VerifiablePresentationSessionData.java b/src/main/java/io/mosip/mimoto/dto/resident/VerifiablePresentationSessionData.java new file mode 100644 index 000000000..660697831 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/resident/VerifiablePresentationSessionData.java @@ -0,0 +1,21 @@ +package io.mosip.mimoto.dto.resident; + +import io.mosip.mimoto.dto.DecryptedCredentialDTO; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.time.Instant; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class VerifiablePresentationSessionData implements Serializable { + private String presentationId; + private String authorizationRequest; + private Instant createdAt; + private boolean isVerifierClientPreregistered; + private List matchingCredentials; +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java b/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java index c067e825f..ddd72a26a 100644 --- a/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java +++ b/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java @@ -43,7 +43,16 @@ public enum ErrorConstants { INVALID_PIN("invalid_pin", "Invalid PIN or wallet key provided"), WALLET_LAST_ATTEMPT_BEFORE_LOCKOUT(WalletLockStatus.LAST_ATTEMPT_BEFORE_LOCKOUT.getValue(),"Incorrect passcode. Last attempt remaining before your Wallet is permanently locked"), WALLET_TEMPORARILY_LOCKED(WalletLockStatus.TEMPORARILY_LOCKED.getValue(), "You’ve reached the maximum number of attempts. Your wallet is now temporarily locked"), - WALLET_PERMANENTLY_LOCKED(WalletLockStatus.PERMANENTLY_LOCKED.getValue(), "Your wallet has been permanently locked due to multiple failed attempts. Please click on forgot password to reset your wallet to continue"); + WALLET_PERMANENTLY_LOCKED(WalletLockStatus.PERMANENTLY_LOCKED.getValue(), "Your wallet has been permanently locked due to multiple failed attempts. Please click on forgot password to reset your wallet to continue"), + + WALLET_CREATE_VP_EXCEPTION("wallet_vp_creation_failed", "Failed to create Verifiable Presentation and store the details in session cache for the Wallet"), + DUPLICATE_VERIFIER("duplicate_verifier", "This verifier is already trusted."), + ERROR_ADDING_TRUSTED_VERIFIER("error", "Failed to add trusted verifier"), + REJECT_VERIFIER_EXCEPTION("error", "Failed to submit Verifiable Presentation."), + REJECTED_VERIFIER("success", "Presentation request rejected. An OpenID4VP error response has been sent to the verifier."), + JWT_SIGNING_ERROR("jwt_signing_error", "Failed to sign JWT token during presentation submission"), + KEY_GENERATION_ERROR("key_generation_error", "Failed to generate or retrieve cryptographic key"), + DECRYPTION_ERROR("decryption_error", "Failed to decrypt data"); private final String errorCode; private final String errorMessage; diff --git a/src/main/java/io/mosip/mimoto/exception/VPErrorNotSentException.java b/src/main/java/io/mosip/mimoto/exception/VPErrorNotSentException.java new file mode 100644 index 000000000..cbbd8f87e --- /dev/null +++ b/src/main/java/io/mosip/mimoto/exception/VPErrorNotSentException.java @@ -0,0 +1,20 @@ +package io.mosip.mimoto.exception; + +public class VPErrorNotSentException extends BaseUncheckedException { + + private static final long serialVersionUID = -5350213197226295789L; + + /** + * Constructor with errorCode, and errorMessage + * + * @param errorCode The error code for this exception + * @param errorMessage The error message for this exception + */ + public VPErrorNotSentException(String errorCode, String errorMessage) { + super(errorCode, errorMessage); + } + + public VPErrorNotSentException(String errorMessage) { + super(ErrorConstants.REJECT_VERIFIER_EXCEPTION.getErrorCode(), errorMessage); + } +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/model/CredentialMetadata.java b/src/main/java/io/mosip/mimoto/model/CredentialMetadata.java index 177e429cb..4798ae4ce 100644 --- a/src/main/java/io/mosip/mimoto/model/CredentialMetadata.java +++ b/src/main/java/io/mosip/mimoto/model/CredentialMetadata.java @@ -3,9 +3,11 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.Data; +import java.io.Serializable; + @Data @JsonIgnoreProperties(ignoreUnknown = true) -public class CredentialMetadata { +public class CredentialMetadata implements Serializable { private String issuerId; private String credentialType; } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/model/TrustedVerifier.java b/src/main/java/io/mosip/mimoto/model/TrustedVerifier.java new file mode 100644 index 000000000..0ab6c740c --- /dev/null +++ b/src/main/java/io/mosip/mimoto/model/TrustedVerifier.java @@ -0,0 +1,34 @@ +package io.mosip.mimoto.model; + +import jakarta.persistence.*; +import lombok.*; + +import java.time.Instant; + +@Entity +@Table(name = "trusted_verifiers") +@Getter +@Setter +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class TrustedVerifier { + + @Id + @Column(length = 36, updatable = false, nullable = false) + private String id; // Primary Key + + @Column(name = "wallet_id", nullable = false) + private String walletId; // Foreign key referencing wallets table + + @Column(name = "verifier_id", nullable = false, length = 255) + private String verifierId; // Storing the verifier client ID + + @Column(name = "created_at", nullable = false, updatable = false) + private Instant createdAt; // Time at which the user gave consent to accept the Verifier's request + + @PrePersist + public void prePersist() { + this.createdAt = Instant.now(); + } +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/model/VerifiablePresentation.java b/src/main/java/io/mosip/mimoto/model/VerifiablePresentation.java new file mode 100644 index 000000000..ba8712756 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/model/VerifiablePresentation.java @@ -0,0 +1,55 @@ +package io.mosip.mimoto.model; + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.CreationTimestamp; +import org.hibernate.annotations.JdbcTypeCode; +import org.hibernate.type.SqlTypes; + +import java.time.LocalDateTime; + +/** + * Entity class for verifiable_presentations table + */ +@Entity +@Table(name = "verifiable_presentations") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class VerifiablePresentation { + + @Id + @Column(name = "id", length = 255) + private String id; + + @Column(name = "wallet_id", length = 255, nullable = false) + private String walletId; + + @JdbcTypeCode(SqlTypes.JSON) + @Column(name = "auth_request", columnDefinition = "jsonb") + private String authRequest; + + @JdbcTypeCode(SqlTypes.JSON) + @Column(name = "presentation_data", columnDefinition = "jsonb") + private String presentationData; + + @Column(name = "verifier_id", length = 255) + private String verifierId; + + @Column(name = "status", length = 50, nullable = false) + private String status; + + @Column(name = "requested_at") + private LocalDateTime requestedAt; + + @CreationTimestamp + @Column(name = "created_at", nullable = false, updatable = false) + private LocalDateTime createdAt; + + @Column(name = "consent", nullable = false) + private Boolean consent; +} diff --git a/src/main/java/io/mosip/mimoto/repository/VerifiablePresentationsRepository.java b/src/main/java/io/mosip/mimoto/repository/VerifiablePresentationsRepository.java new file mode 100644 index 000000000..655959cdc --- /dev/null +++ b/src/main/java/io/mosip/mimoto/repository/VerifiablePresentationsRepository.java @@ -0,0 +1,14 @@ +package io.mosip.mimoto.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import io.mosip.mimoto.model.VerifiablePresentation; + +/** + * Repository interface for VerifiablePresentation entity + */ +@Repository +public interface VerifiablePresentationsRepository extends JpaRepository { + +} diff --git a/src/main/java/io/mosip/mimoto/repository/VerifierRepository.java b/src/main/java/io/mosip/mimoto/repository/VerifierRepository.java new file mode 100644 index 000000000..c6a43b699 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/repository/VerifierRepository.java @@ -0,0 +1,10 @@ +package io.mosip.mimoto.repository; + +import io.mosip.mimoto.model.TrustedVerifier; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface VerifierRepository extends JpaRepository { + boolean existsByWalletIdAndVerifierId(String walletId, String verifierClientId); +} diff --git a/src/main/java/io/mosip/mimoto/service/CredentialMatchingService.java b/src/main/java/io/mosip/mimoto/service/CredentialMatchingService.java new file mode 100644 index 000000000..1d351fbe4 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/CredentialMatchingService.java @@ -0,0 +1,12 @@ +package io.mosip.mimoto.service; + + +import io.mosip.mimoto.dto.MatchingCredentialsWithWalletDataDTO; +import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; +import io.mosip.mimoto.exception.ApiNotAccessibleException; + +import java.io.IOException; + +public interface CredentialMatchingService { + MatchingCredentialsWithWalletDataDTO getMatchingCredentials(VerifiablePresentationSessionData sessionData, String walletId, String base64Key) throws ApiNotAccessibleException, IOException; +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/KeyPairService.java b/src/main/java/io/mosip/mimoto/service/KeyPairService.java new file mode 100644 index 000000000..b2c334c95 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/KeyPairService.java @@ -0,0 +1,25 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.constant.SigningAlgorithm; +import io.mosip.mimoto.exception.DecryptionException; +import io.mosip.mimoto.exception.KeyGenerationException; + +import java.security.KeyPair; + +/** + * Service interface for managing key pairs from database + */ +public interface KeyPairService { + + /** + * Retrieves a key pair from the database for the given wallet ID and signing algorithm + * + * @param walletId The wallet ID + * @param base64EncodedWalletKey The base64 encoded wallet key for decryption + * @param signingAlgorithm The signing algorithm + * @return The key pair + * @throws KeyGenerationException if key generation or retrieval fails + * @throws DecryptionException if decryption of private key fails + */ + KeyPair getKeyPairFromDB(String walletId, String base64EncodedWalletKey, SigningAlgorithm signingAlgorithm) throws KeyGenerationException, DecryptionException; +} diff --git a/src/main/java/io/mosip/mimoto/service/PresentationActionService.java b/src/main/java/io/mosip/mimoto/service/PresentationActionService.java new file mode 100644 index 000000000..2a5cf6485 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/PresentationActionService.java @@ -0,0 +1,33 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.dto.SubmitPresentationRequestDTO; +import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; +import org.springframework.http.ResponseEntity; + +/** + * Service interface for handling presentation actions (submission or rejection) + */ +public interface PresentationActionService { + + /** + * Handles presentation action - either submission with credentials or rejection with error + *

+ * This method handles all business logic and exceptions internally, returning appropriate + * HTTP responses. The controller should only catch generic exceptions for unexpected errors. + * + * @param walletId The wallet ID + * @param presentationId The presentation ID + * @param request The request containing either selected credentials or error details + * @param vpSessionData The session data containing presentation information + * @param base64Key The wallet key for decryption (required for submission) + * @return ResponseEntity with appropriate response type and HTTP status + */ + ResponseEntity handlePresentationAction( + String walletId, + String presentationId, + SubmitPresentationRequestDTO request, + VerifiablePresentationSessionData vpSessionData, + String base64Key + ); +} + diff --git a/src/main/java/io/mosip/mimoto/service/PresentationService.java b/src/main/java/io/mosip/mimoto/service/PresentationService.java index 19a796280..db2af2b09 100644 --- a/src/main/java/io/mosip/mimoto/service/PresentationService.java +++ b/src/main/java/io/mosip/mimoto/service/PresentationService.java @@ -1,11 +1,20 @@ package io.mosip.mimoto.service; +import io.mosip.mimoto.dto.ErrorDTO; +import io.mosip.mimoto.dto.RejectedVerifierDTO; +import io.mosip.mimoto.dto.VerifiablePresentationResponseDTO; import io.mosip.mimoto.dto.openid.presentation.PresentationRequestDTO; +import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.VPErrorNotSentException; +import io.mosip.openID4VP.exceptions.OpenID4VPExceptions; import java.io.IOException; +import java.net.URISyntaxException; public interface PresentationService { String authorizePresentation(PresentationRequestDTO presentationRequestDTO) throws ApiNotAccessibleException, IOException; + VerifiablePresentationResponseDTO handleVPAuthorizationRequest(String urlEncodedVPAuthorizationRequest, String walletId) throws ApiNotAccessibleException, IOException, OpenID4VPExceptions, URISyntaxException; + RejectedVerifierDTO rejectVerifier(String walletId, VerifiablePresentationSessionData vpSessionData, ErrorDTO payload) throws VPErrorNotSentException; } diff --git a/src/main/java/io/mosip/mimoto/service/PresentationSubmissionService.java b/src/main/java/io/mosip/mimoto/service/PresentationSubmissionService.java new file mode 100644 index 000000000..d0a4dbbce --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/PresentationSubmissionService.java @@ -0,0 +1,40 @@ +package io.mosip.mimoto.service; + +import com.nimbusds.jose.JOSEException; +import io.mosip.mimoto.dto.SubmitPresentationRequestDTO; +import io.mosip.mimoto.dto.SubmitPresentationResponseDTO; +import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.DecryptionException; +import io.mosip.mimoto.exception.KeyGenerationException; + +import java.io.IOException; + +/** + * Service interface for handling presentation submission operations + */ +public interface PresentationSubmissionService { + + /** + * Submits a presentation with selected credentials + * + * @param sessionData The session data containing presentation information + * @param walletId The wallet ID + * @param presentationId The presentation ID + * @param request The submission request with selected credentials + * @param base64Key The user's private key for signing + * @return The submission response + * @throws ApiNotAccessibleException if API is not accessible + * @throws IOException if there's an IO error + * @throws JOSEException if JWT signing fails + * @throws KeyGenerationException if key pair retrieval or generation fails + * @throws DecryptionException if decryption of private key fails + */ + SubmitPresentationResponseDTO submitPresentation( + VerifiablePresentationSessionData sessionData, + String walletId, + String presentationId, + SubmitPresentationRequestDTO request, + String base64Key + ) throws ApiNotAccessibleException, IOException, JOSEException, KeyGenerationException, DecryptionException; +} diff --git a/src/main/java/io/mosip/mimoto/service/TrustedVerifierService.java b/src/main/java/io/mosip/mimoto/service/TrustedVerifierService.java new file mode 100644 index 000000000..515aaa0c7 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/TrustedVerifierService.java @@ -0,0 +1,10 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.dto.TrustedVerifierRequest; +import io.mosip.mimoto.dto.TrustedVerifierResponseDTO; + +public interface TrustedVerifierService { + + TrustedVerifierResponseDTO addTrustedVerifier(String walletId, TrustedVerifierRequest trustedVerifierRequest); + +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/VerifierService.java b/src/main/java/io/mosip/mimoto/service/VerifierService.java index a3c24ddda..8d2b23deb 100644 --- a/src/main/java/io/mosip/mimoto/service/VerifierService.java +++ b/src/main/java/io/mosip/mimoto/service/VerifierService.java @@ -3,14 +3,18 @@ import com.fasterxml.jackson.core.JsonProcessingException; import io.mosip.mimoto.dto.openid.VerifierDTO; import io.mosip.mimoto.dto.openid.VerifiersDTO; -import io.mosip.mimoto.dto.openid.presentation.PresentationRequestDTO; import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.openID4VP.authorizationRequest.Verifier; import java.io.IOException; +import java.net.URISyntaxException; +import java.util.List; import java.util.Optional; public interface VerifierService { Optional getVerifierByClientId(String clientId) throws ApiNotAccessibleException, IOException; void validateVerifier(String clientId, String redirectUri) throws ApiNotAccessibleException, JsonProcessingException; VerifiersDTO getTrustedVerifiers() throws ApiNotAccessibleException, IOException; + boolean isVerifierTrustedByWallet(String verifierId, String walletId); + boolean isVerifierClientPreregistered(List preRegisteredVerifiers, String urlEncodedVPAuthorizationRequest) throws URISyntaxException; } diff --git a/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java b/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java index c12ab7505..a9ae76ba4 100644 --- a/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java +++ b/src/main/java/io/mosip/mimoto/service/WalletCredentialService.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.service; +import io.mosip.mimoto.dto.DecryptedCredentialDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; import io.mosip.mimoto.dto.resident.WalletCredentialResponseDTO; @@ -56,4 +57,6 @@ WalletCredentialResponseDTO fetchVerifiableCredential(String walletId, String cr void deleteCredential(String credentialId, String walletId) throws CredentialNotFoundException; + List getDecryptedCredentials(String walletId, String base64Key); + } diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialMatchingServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialMatchingServiceImpl.java new file mode 100644 index 000000000..2c0921d82 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialMatchingServiceImpl.java @@ -0,0 +1,390 @@ +package io.mosip.mimoto.service.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.constant.CredentialFormat; +import io.mosip.mimoto.dto.DecryptedCredentialDTO; +import io.mosip.mimoto.dto.MatchingCredentialsResponseDTO; +import io.mosip.mimoto.dto.MatchingCredentialsWithWalletDataDTO; +import io.mosip.mimoto.dto.SelectableCredentialDTO; +import io.mosip.mimoto.dto.mimoto.IssuerConfig; +import io.mosip.mimoto.dto.mimoto.VCCredentialProperties; +import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; +import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; +import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.InvalidIssuerIdException; +import io.mosip.mimoto.service.CredentialMatchingService; +import io.mosip.mimoto.service.IssuersService; +import io.mosip.mimoto.service.WalletCredentialService; +import io.mosip.openID4VP.authorizationRequest.presentationDefinition.*; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.lang.reflect.Field; +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.IntStream; +import java.util.stream.Stream; + +import static io.mosip.mimoto.util.JwtUtils.extractJwtPayloadFromSdJwt; + +@Slf4j +@Service +public class CredentialMatchingServiceImpl implements CredentialMatchingService { + + private static final String JSON_PATH_PREFIX = "$."; + private static final String TYPE_PATH = "$.type"; + private static final String LDP_VC_FORMAT = "ldp_vc"; + private static final String PROOF_TYPE_KEY = "proof_type"; + + @Autowired + private ObjectMapper objectMapper; + + @Autowired + private IssuersService issuersService; + + @Autowired + private OpenID4VPService openID4VPService; + + @Autowired + private WalletCredentialService walletCredentialService; + + public MatchingCredentialsWithWalletDataDTO getMatchingCredentials(VerifiablePresentationSessionData sessionData, String walletId, String base64Key) throws ApiNotAccessibleException, IOException { + log.info("Getting matching credentials with wallet data for walletId: {}", walletId); + + // Extract presentation definition from the session data + PresentationDefinition presentationDefinition = openID4VPService.resolvePresentationDefinition(sessionData.getPresentationId(), sessionData.getAuthorizationRequest(), sessionData.isVerifierClientPreregistered()); + + if (presentationDefinition == null) { + log.warn("No presentation definition found in session data"); + throw new IllegalArgumentException("Presentation definition not found in session data"); + } + + validateInputParameters(presentationDefinition, walletId, base64Key); + + List decryptedCredentials = walletCredentialService.getDecryptedCredentials(walletId, base64Key); + if (decryptedCredentials.isEmpty()) { + MatchingCredentialsResponseDTO emptyResponse = createEmptyResponseWithMissingClaims(presentationDefinition); + return MatchingCredentialsWithWalletDataDTO.builder() + .matchingCredentialsResponse(emptyResponse) + .matchingCredentials(new ArrayList<>()) + .build(); + } + + List descriptors = presentationDefinition.getInputDescriptors(); + Map> matchingCredentialsByDescriptor = new HashMap<>(); + Set missingClaims = new HashSet<>(); + + IntStream.range(0, descriptors.size()) + .forEach(i -> { + InputDescriptor descriptor = descriptors.get(i); + List matches = decryptedCredentials.stream() + .filter(decrypted -> matchesInputDescriptor(decrypted.getCredential(), descriptor)) + .map(this::buildAvailableCredential) + .collect(Collectors.toList()); + + if (!matches.isEmpty()) { + matchingCredentialsByDescriptor.put(i, matches); + } else { + missingClaims.addAll(extractClaimsFromInputDescriptor(descriptor)); + } + }); + + // Flatten all matching credentials into a single list, removing duplicates by credential ID + Set addedCredentialIds = new HashSet<>(); + List availableCredentials = matchingCredentialsByDescriptor.values().stream() + .flatMap(List::stream) + .filter(credential -> addedCredentialIds.add(credential.getCredentialId())) + .collect(Collectors.toList()); + + MatchingCredentialsResponseDTO matchingCredentialsResponse = MatchingCredentialsResponseDTO.builder().availableCredentials(availableCredentials).missingClaims(missingClaims).build(); + + // Filter decrypted credentials to only include matched ones + Set matchedCredentialIds = availableCredentials.stream() + .map(SelectableCredentialDTO::getCredentialId) + .collect(Collectors.toSet()); + + List matchingCredentials = decryptedCredentials.stream().filter(credential -> matchedCredentialIds.contains(credential.getId())).collect(Collectors.toList()); + + return MatchingCredentialsWithWalletDataDTO.builder() + .matchingCredentialsResponse(matchingCredentialsResponse) + .matchingCredentials(matchingCredentials) + .build(); + } + + private void validateInputParameters(PresentationDefinition presentationDefinition, String walletId, String base64Key) throws IllegalArgumentException { + if (walletId == null || walletId.trim().isEmpty()) { + throw new IllegalArgumentException("Wallet ID cannot be null or empty"); + } + + if (base64Key == null || base64Key.trim().isEmpty()) { + throw new IllegalArgumentException("Base64 key cannot be null or empty"); + } + + if (presentationDefinition == null) { + throw new IllegalArgumentException("Presentation definition cannot be null"); + } + + if (presentationDefinition.getInputDescriptors().isEmpty()) { + throw new IllegalArgumentException("Presentation definition must contain at least one input descriptor"); + } + + IntStream.range(0, presentationDefinition.getInputDescriptors().size()) + .filter(i -> { + InputDescriptor descriptor = presentationDefinition.getInputDescriptors().get(i); + return descriptor.getId().trim().isEmpty(); + }) + .findFirst() + .ifPresent(i -> { throw new IllegalArgumentException("Input descriptor at index " + i + " must have a valid ID"); }); + } + + private MatchingCredentialsResponseDTO createEmptyResponseWithMissingClaims(PresentationDefinition presentationDefinition) { + log.info("No credentials found for wallet"); + return MatchingCredentialsResponseDTO.builder() + .availableCredentials(Collections.emptyList()) + .missingClaims(new HashSet<>(extractRequiredClaims(presentationDefinition))) + .build(); + } + + private List extractClaimsFromInputDescriptor(InputDescriptor inputDescriptor) { + return extractClaimsFromFields(inputDescriptor.getConstraints().getFields(), false); + } + + /** + * Common method to extract claims from an array of fields. + * + * @param fields List of Fields objects to extract claims from + * @param deduplicate Whether to deduplicate claims using LinkedHashSet + * @return List of extracted claim keys + */ + private List extractClaimsFromFields(List fields, boolean deduplicate) { + if (fields == null) { + return Collections.emptyList(); + } + + Stream claimsStream = fields.stream() + .filter(Objects::nonNull) + .filter(field -> !field.getPath().isEmpty()) + .flatMap(field -> field.getPath().stream()) + .map(this::extractClaimKeyFromPath) + .filter(Objects::nonNull) + .filter(claim -> !claim.isBlank()); + + if (deduplicate) { + return claimsStream.distinct().collect(Collectors.toList()); + } else { + return claimsStream.collect(Collectors.toList()); + } + } + + private boolean matchesInputDescriptor(VCCredentialResponse vc, InputDescriptor inputDescriptor) { + Map>> formatToCheck = inputDescriptor.getFormat(); + + if (!matchesFormat(vc, formatToCheck)) { + return false; + } + + if (inputDescriptor.getConstraints().getFields() != null) { + return matchesConstraints(vc, inputDescriptor.getConstraints()); + } + return true; + } + + private boolean matchesFormat(VCCredentialResponse vc, Map>> descriptorFormat) { + if (descriptorFormat == null) { + return true; + } + + String vcFormat = vc.getFormat(); + + if (!CredentialFormat.LDP_VC.getFormat().equalsIgnoreCase(vcFormat) || !descriptorFormat.containsKey(LDP_VC_FORMAT)) { + return false; + } + + Map> ldpVcFormat = descriptorFormat.get(LDP_VC_FORMAT); + + if (!ldpVcFormat.containsKey(PROOF_TYPE_KEY)) { + return true; + } + + VCCredentialProperties ldpCredential = objectMapper.convertValue(vc.getCredential(), VCCredentialProperties.class); + String vcProofType = ldpCredential.getProof() != null ? ldpCredential.getProof().getType() : null; + List requiredProofTypes = ldpVcFormat.get(PROOF_TYPE_KEY); + + return vcProofType != null && requiredProofTypes.contains(vcProofType); + } + + private boolean matchesConstraints(VCCredentialResponse vc, Constraints constraints) { + if (constraints.getFields() == null) { + return true; + } + + return constraints.getFields().stream().allMatch(field -> { + if (field.getPath().isEmpty()) { + return true; + } + return field.getPath().stream().anyMatch(path -> matchesFieldPath(vc, path, field.getFilter())); + }); + } + + private boolean matchesFieldPath(VCCredentialResponse vc, String path, Filter filter) { + try { + Object credentialData = getCredentialData(vc); + + List matches = evaluateJsonPath(path, credentialData); + + if (matches == null || matches.isEmpty()) { + return false; + } + + return matches.stream().anyMatch(match -> matchesFilter(match, filter)); + } catch (JsonProcessingException | NoSuchFieldException | IllegalAccessException e) { + log.error("Error checking field path {}: {}", path, e.getMessage()); + return false; + } + } + + private Object getCredentialData(VCCredentialResponse vc) { + String format = vc.getFormat(); + + if (CredentialFormat.LDP_VC.getFormat().equalsIgnoreCase(format)) { + Object credentialData = vc.getCredential(); + + if (credentialData instanceof Map) { + return credentialData; + } else { + return objectMapper.convertValue(credentialData, VCCredentialProperties.class); + } + } else if (CredentialFormat.VC_SD_JWT.getFormat().equalsIgnoreCase(format) || CredentialFormat.DC_SD_JWT.getFormat().equalsIgnoreCase(format)) { + String credential = objectMapper.convertValue(vc.getCredential(), String.class); + return extractJwtPayloadFromSdJwt(credential); + } + + return vc.getCredential(); + } + + private boolean matchesFilter(Object match, Filter filter) { + if (filter == null) { + return true; + } + + String matchValue = match.toString(); + return matchValue.contains(filter.getPattern()); + + } + + private List evaluateJsonPath(String path, Object json) throws JsonProcessingException, NoSuchFieldException, IllegalAccessException { + if (path == null || path.trim().isEmpty()) { + return Collections.emptyList(); + } + + if (!path.startsWith(JSON_PATH_PREFIX)) { + return Collections.emptyList(); + } + + if (json == null) { + return Collections.emptyList(); + } + + String[] pathParts = path.substring(2).split("\\."); + Object current = json; + + for (String part : pathParts) { + if (current instanceof Map) { + @SuppressWarnings("unchecked") Map map = (Map) current; + current = map.get(part); + } else if (current instanceof List) { + @SuppressWarnings("unchecked") List list = (List) current; + try { + int index = Integer.parseInt(part); + if (index >= 0 && index < list.size()) { + current = list.get(index); + } else { + return Collections.emptyList(); + } + } catch (NumberFormatException e) { + return Collections.emptyList(); + } + } else { + try { + @SuppressWarnings("unchecked") Map map = objectMapper.convertValue(current, Map.class); + current = map.get(part); + } catch (Exception convertException) { + if (objectMapper.canSerialize(current.getClass())) { + String jsonString = objectMapper.writeValueAsString(current); + @SuppressWarnings("unchecked") Map map = objectMapper.readValue(jsonString, Map.class); + current = map.get(part); + } else { + Field field = current.getClass().getDeclaredField(part); + field.setAccessible(true); + current = field.get(current); + } + } + } + + if (current == null) { + return Collections.emptyList(); + } + } + + if (TYPE_PATH.equals(path) && current instanceof List) { + @SuppressWarnings("unchecked") List typeList = (List) current; + return new ArrayList<>(typeList); + } + + return Collections.singletonList(current); + } + + private List extractRequiredClaims(PresentationDefinition presentationDefinition) { + + List allFields = presentationDefinition.getInputDescriptors().stream() + .filter(id -> id.getConstraints().getFields() != null) + .flatMap(id -> id.getConstraints().getFields().stream()) + .collect(Collectors.toList()); + + return extractClaimsFromFields(allFields, true); + } + + private String extractClaimKeyFromPath(String path) { + if (path == null || path.isBlank()) { + return null; + } + int lastDot = path.lastIndexOf('.'); + String tail = lastDot >= 0 ? path.substring(lastDot + 1) : path; + if (tail.startsWith("$")) { + tail = tail.substring(1); + } + return tail; + } + + private SelectableCredentialDTO buildAvailableCredential(DecryptedCredentialDTO decryptedCredentialDTO) { + String issuerId = decryptedCredentialDTO.getCredentialMetadata().getIssuerId(); + String credentialType = decryptedCredentialDTO.getCredentialMetadata().getCredentialType(); + + String credentialTypeDisplayName = "Unknown Credential"; + String credentialTypeLogo = null; + + try { + IssuerConfig issuerConfig = issuersService.getIssuerConfig(issuerId, credentialType); + if (issuerConfig != null) { + VerifiableCredentialResponseDTO credentialResponse = VerifiableCredentialResponseDTO.fromIssuerConfig(issuerConfig, "en", decryptedCredentialDTO.getId()); + credentialTypeDisplayName = credentialResponse.getCredentialTypeDisplayName(); + credentialTypeLogo = credentialResponse.getCredentialTypeLogo(); + } + } catch (InvalidIssuerIdException | ApiNotAccessibleException e) { + log.warn("Failed to fetch issuer config for issuerId: {}, credentialType: {}", issuerId, credentialType, e); + } + + return SelectableCredentialDTO.builder() + .credentialId(decryptedCredentialDTO.getId()) + .credentialTypeDisplayName(credentialTypeDisplayName) + .credentialTypeLogo(credentialTypeLogo) + .format(decryptedCredentialDTO.getCredential() + .getFormat()) + .build(); + } + +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java index c29165d2c..373713d95 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java @@ -3,12 +3,10 @@ import io.mosip.mimoto.constant.SigningAlgorithm; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.mimoto.*; -import io.mosip.mimoto.model.ProofSigningKey; -import io.mosip.mimoto.repository.ProofSigningKeyRepository; import io.mosip.mimoto.service.CredentialFormatHandler; import io.mosip.mimoto.service.CredentialFormatHandlerFactory; import io.mosip.mimoto.service.CredentialRequestService; -import io.mosip.mimoto.util.EncryptionDecryptionUtil; +import io.mosip.mimoto.service.KeyPairService; import io.mosip.mimoto.util.JwtGeneratorUtil; import io.mosip.mimoto.util.KeyGenerationUtil; import lombok.extern.slf4j.Slf4j; @@ -16,7 +14,6 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; -import javax.crypto.SecretKey; import java.security.KeyPair; import java.util.*; import java.util.stream.Collectors; @@ -25,11 +22,6 @@ @Slf4j public class CredentialRequestServiceImpl implements CredentialRequestService { - @Autowired - private ProofSigningKeyRepository proofSigningKeyRepository; - - @Autowired - private EncryptionDecryptionUtil encryptionDecryptionUtil; @Value("${signing.algorithms.priority.order:ED25519,ES256K,ES256,RS256}") private String signingAlgorithmsPriorityOrder; @@ -45,6 +37,9 @@ public Set getSigningAlgorithmsPriorityOrder() { @Autowired private CredentialFormatHandlerFactory credentialFormatHandlerFactory; + @Autowired + private KeyPairService keyPairService; + @Override public VCCredentialRequest buildRequest(IssuerDTO issuerDTO, String credentialConfigurationId, @@ -114,13 +109,7 @@ private String generateJwtUsingDBKeys(String walletId, IssuerDTO issuerDTO, String cNonce) throws Exception { - Optional proofSigningKey = proofSigningKeyRepository.findByWalletIdAndAlgorithm(walletId, signingAlgorithm.name()); - byte[] decodedWalletKey = Base64.getDecoder().decode(base64EncodedWalletKey); - SecretKey walletKey = EncryptionDecryptionUtil.bytesToSecretKey(decodedWalletKey); - byte[] publicKeyBytes = Base64.getDecoder().decode(proofSigningKey.get().getPublicKey()); - byte[] privateKeyInBytes = encryptionDecryptionUtil.decryptWithAES(walletKey, proofSigningKey.get().getEncryptedSecretKey()); - KeyPair keyPair = KeyGenerationUtil.getKeyPairFromDBStoredKeys(signingAlgorithm, publicKeyBytes, privateKeyInBytes); - log.debug("Fetched KeyPair for signing signingAlgorithm: {} from database", signingAlgorithm); + KeyPair keyPair = keyPairService.getKeyPairFromDB(walletId, base64EncodedWalletKey, signingAlgorithm); return JwtGeneratorUtil.generateJwt(signingAlgorithm, wellKnownResponse.getCredentialIssuer(), diff --git a/src/main/java/io/mosip/mimoto/service/impl/KeyPairServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/KeyPairServiceImpl.java new file mode 100644 index 000000000..0301461cf --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/impl/KeyPairServiceImpl.java @@ -0,0 +1,88 @@ +package io.mosip.mimoto.service.impl; + +import io.mosip.mimoto.constant.SigningAlgorithm; +import io.mosip.mimoto.exception.DecryptionException; +import io.mosip.mimoto.exception.KeyGenerationException; +import io.mosip.mimoto.model.ProofSigningKey; +import io.mosip.mimoto.repository.ProofSigningKeyRepository; +import io.mosip.mimoto.service.KeyPairService; +import io.mosip.mimoto.util.EncryptionDecryptionUtil; +import io.mosip.mimoto.util.KeyGenerationUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.crypto.SecretKey; +import java.security.KeyPair; +import java.util.Base64; +import java.util.Optional; + +/** + * Service implementation for managing key pairs from database + */ +@Slf4j +@Service +public class KeyPairServiceImpl implements KeyPairService { + + @Autowired + private ProofSigningKeyRepository proofSigningKeyRepository; + + @Autowired + private EncryptionDecryptionUtil encryptionDecryptionUtil; + + @Override + public KeyPair getKeyPairFromDB(String walletId, String base64EncodedWalletKey, SigningAlgorithm signingAlgorithm) throws KeyGenerationException, DecryptionException { + log.debug("Retrieving key pair for walletId: {} with algorithm: {}", walletId, signingAlgorithm); + + // Step 1: Retrieve proof signing key from database + Optional proofSigningKey = proofSigningKeyRepository.findByWalletIdAndAlgorithm(walletId, signingAlgorithm.name()); + + if (proofSigningKey.isEmpty()) { + log.error("No proof signing key found for walletId: {} with algorithm: {}", walletId, signingAlgorithm); + throw new KeyGenerationException("KEY_NOT_FOUND", "No proof signing key found for walletId: " + walletId + " with algorithm: " + signingAlgorithm); + } + + // Step 2: Decode wallet key + byte[] decodedWalletKey; + try { + decodedWalletKey = Base64.getDecoder().decode(base64EncodedWalletKey); + } catch (IllegalArgumentException e) { + log.error("Invalid base64 encoded wallet key for walletId: {}", walletId, e); + throw new DecryptionException("INVALID_WALLET_KEY", "Invalid base64 encoded wallet key", e); + } + + SecretKey walletKey = EncryptionDecryptionUtil.bytesToSecretKey(decodedWalletKey); + + // Step 3: Decode public key + byte[] publicKeyBytes; + try { + publicKeyBytes = Base64.getDecoder().decode(proofSigningKey.get().getPublicKey()); + } catch (IllegalArgumentException e) { + log.error("Invalid base64 encoded public key for walletId: {}", walletId, e); + throw new KeyGenerationException("INVALID_PUBLIC_KEY", "Invalid base64 encoded public key", e); + } + + // Step 4: Decrypt private key + byte[] privateKeyInBytes; + try { + privateKeyInBytes = encryptionDecryptionUtil.decryptWithAES(walletKey, proofSigningKey.get().getEncryptedSecretKey()); + } catch (Exception e) { + log.error("Failed to decrypt private key for walletId: {} with algorithm: {}", walletId, signingAlgorithm, e); + throw new DecryptionException("DECRYPTION_FAILED", "Failed to decrypt private key for walletId: " + walletId, e); + } + + // Step 5: Generate KeyPair from stored keys + KeyPair keyPair; + try { + keyPair = KeyGenerationUtil.getKeyPairFromDBStoredKeys(signingAlgorithm, publicKeyBytes, privateKeyInBytes); + } catch (Exception e) { + log.error("Failed to generate KeyPair for signing algorithm: {} for walletId: {}", signingAlgorithm, walletId, e); + throw new KeyGenerationException("KEY_GENERATION_FAILED", "Failed to generate KeyPair for algorithm: " + signingAlgorithm, e); + } + + log.debug("Successfully retrieved KeyPair for signing algorithm: {} from database", signingAlgorithm); + + return keyPair; + + } +} diff --git a/src/main/java/io/mosip/mimoto/service/impl/OpenID4VPService.java b/src/main/java/io/mosip/mimoto/service/impl/OpenID4VPService.java new file mode 100644 index 000000000..e9a248c5c --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/impl/OpenID4VPService.java @@ -0,0 +1,89 @@ +package io.mosip.mimoto.service.impl; + +import io.mosip.mimoto.dto.ErrorDTO; +import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.service.VerifierService; +import io.mosip.openID4VP.OpenID4VP; +import io.mosip.openID4VP.authorizationRequest.AuthorizationRequest; +import io.mosip.openID4VP.authorizationRequest.VPFormatSupported; +import io.mosip.openID4VP.authorizationRequest.Verifier; +import io.mosip.openID4VP.authorizationRequest.WalletMetadata; +import io.mosip.openID4VP.authorizationRequest.presentationDefinition.PresentationDefinition; +import io.mosip.openID4VP.constants.VPFormatType; +import io.mosip.openID4VP.exceptions.OpenID4VPExceptions; +import io.mosip.openID4VP.networkManager.NetworkResponse; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.net.URISyntaxException; +import java.util.List; +import java.util.Map; + +@Component +@Slf4j +public class OpenID4VPService { + + @Autowired + private VerifierService verifierService; + + public OpenID4VP create(String presentationId) { + WalletMetadata walletMetadata = new WalletMetadata(); + walletMetadata.setVpFormatsSupported(Map.of(VPFormatType.LDP_VC, new VPFormatSupported(List.of("EEd25519Signature2020")))); + + return new OpenID4VP( + presentationId, + walletMetadata + ); + } + + /** + * Extracts the presentation definition from the VerifiablePresentationSessionData object. + * + * @return The presentation definition if found, null otherwise. + */ + public PresentationDefinition resolvePresentationDefinition(String presentationId, String authRequest, boolean isVerifierClientPreregistered) throws ApiNotAccessibleException, IOException { + if (presentationId == null || authRequest == null) { + log.warn("Session data or OpenID4VP is null"); + return null; + } + OpenID4VP openID4VP = create(presentationId); + List preRegisteredVerifiers = verifierService.getTrustedVerifiers().getVerifiers().stream() + .map(verifierDTO -> new Verifier(verifierDTO.getClientId(), verifierDTO.getResponseUris(), verifierDTO.getJwksUri(), verifierDTO.getAllowUnsignedRequest())) + .toList(); + + AuthorizationRequest authorizationRequest = openID4VP.authenticateVerifier(authRequest, preRegisteredVerifiers, isVerifierClientPreregistered); + return authorizationRequest.getPresentationDefinition(); + } + + /** + * Reconstructs OpenID4VP from session data, authenticates the verifier and sends the OpenID4VP error to the verifier. + * + * @param sessionData session containing presentation id and original authorization request + * @param payload the error payload to forward + * @return network response from verifier + * @throws ApiNotAccessibleException when verifier list can't be fetched + * @throws IOException for underlying IO failures + */ + public NetworkResponse sendErrorToVerifier(VerifiablePresentationSessionData sessionData, ErrorDTO payload) throws ApiNotAccessibleException, IOException, URISyntaxException { + if (sessionData == null || sessionData.getPresentationId() == null || sessionData.getAuthorizationRequest() == null) { + throw new IllegalArgumentException("Invalid presentation session data"); + } + + OpenID4VP openID4VP = create(sessionData.getPresentationId()); + + List preRegisteredVerifiers = verifierService.getTrustedVerifiers().getVerifiers().stream() + .map(verifierDTO -> new Verifier(verifierDTO.getClientId(), verifierDTO.getResponseUris(), verifierDTO.getJwksUri(), verifierDTO.getAllowUnsignedRequest())) + .toList(); + + // authenticateVerifier to populate internal state in OpenID4VP before sending error + AuthorizationRequest authorizationRequest = openID4VP.authenticateVerifier(sessionData.getAuthorizationRequest(), preRegisteredVerifiers, sessionData.isVerifierClientPreregistered()); + + OpenID4VPExceptions.AccessDenied accessDeniedException = new OpenID4VPExceptions.AccessDenied(payload.getErrorMessage(), "OpenID4VPService"); + NetworkResponse networkResponse = openID4VP.sendErrorToVerifier(accessDeniedException); + log.info("Sent rejection to verifier for presentationId {}. Response: {}", sessionData.getPresentationId(), networkResponse); + return networkResponse; + } +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/impl/PresentationActionServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/PresentationActionServiceImpl.java new file mode 100644 index 000000000..ca070d9c7 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/impl/PresentationActionServiceImpl.java @@ -0,0 +1,126 @@ +package io.mosip.mimoto.service.impl; + +import com.nimbusds.jose.JOSEException; +import io.mosip.mimoto.dto.ErrorDTO; +import io.mosip.mimoto.dto.RejectedVerifierDTO; +import io.mosip.mimoto.dto.SubmitPresentationRequestDTO; +import io.mosip.mimoto.dto.SubmitPresentationResponseDTO; +import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.DecryptionException; +import io.mosip.mimoto.exception.InvalidRequestException; +import io.mosip.mimoto.exception.KeyGenerationException; +import io.mosip.mimoto.exception.VPErrorNotSentException; +import io.mosip.mimoto.service.PresentationActionService; +import io.mosip.mimoto.service.PresentationService; +import io.mosip.mimoto.service.PresentationSubmissionService; +import io.mosip.mimoto.util.Utilities; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; + +import java.io.IOException; + +import static io.mosip.mimoto.exception.ErrorConstants.*; + +/** + * Service implementation for handling presentation actions + */ +@Slf4j +@Service +public class PresentationActionServiceImpl implements PresentationActionService { + + @Autowired + private PresentationSubmissionService presentationSubmissionService; + + @Autowired + private PresentationService presentationService; + + @Override + public ResponseEntity handlePresentationAction(String walletId, String presentationId, SubmitPresentationRequestDTO request, VerifiablePresentationSessionData vpSessionData, String base64Key) { + + log.info("Processing presentation action for walletId: {}, presentationId: {}", walletId, presentationId); + + try { + // Determine the action based on request content + if (request.isSubmissionRequest()) { + log.info("Processing presentation submission for presentationId: {}", presentationId); + return handlePresentationSubmission(walletId, presentationId, request, vpSessionData, base64Key); + + } else if (request.isRejectionRequest()) { + log.info("Processing verifier rejection for presentationId: {}", presentationId); + return handleVerifierRejection(walletId, vpSessionData, request); + + } else { + log.warn("Invalid request format - must contain either selectedCredentials or both errorCode and errorMessage"); + return Utilities.getErrorResponseEntityWithoutWrapper(new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Request must contain either selectedCredentials or both errorCode and errorMessage"), INVALID_REQUEST.getErrorCode(), HttpStatus.BAD_REQUEST, MediaType.APPLICATION_JSON); + } + + } catch (JOSEException exception) { + log.error("JWT signing error during presentation action for walletId: {}, presentationId: {}", walletId, presentationId, exception); + return Utilities.getErrorResponseEntityWithoutWrapper(exception, JWT_SIGNING_ERROR.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); + + } catch (KeyGenerationException exception) { + log.error("Key generation/retrieval error during presentation action for walletId: {}, presentationId: {}", walletId, presentationId, exception); + return Utilities.getErrorResponseEntityWithoutWrapper(exception, KEY_GENERATION_ERROR.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); + + } catch (DecryptionException exception) { + log.error("Decryption error during presentation action for walletId: {}, presentationId: {}", walletId, presentationId, exception); + return Utilities.getErrorResponseEntityWithoutWrapper(exception, DECRYPTION_ERROR.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); + + } catch (ApiNotAccessibleException | IOException exception) { + log.error("Error during presentation action for walletId: {}, presentationId: {}", walletId, presentationId, exception); + return Utilities.getErrorResponseEntityWithoutWrapper(exception, WALLET_CREATE_VP_EXCEPTION.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); + + } catch (VPErrorNotSentException exception) { + log.error("Error sending rejection to verifier for walletId: {}, presentationId: {}", walletId, presentationId, exception); + return Utilities.getErrorResponseEntityWithoutWrapper(exception, REJECT_VERIFIER_EXCEPTION.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); + + } catch (IllegalArgumentException exception) { + log.error("Invalid argument during presentation action for walletId: {}, presentationId: {}", walletId, presentationId, exception); + return Utilities.getErrorResponseEntityWithoutWrapper(exception, INVALID_REQUEST.getErrorCode(), HttpStatus.BAD_REQUEST, MediaType.APPLICATION_JSON); + } + } + + /** + * Handles presentation submission with selected credentials + */ + private ResponseEntity handlePresentationSubmission(String walletId, String presentationId, SubmitPresentationRequestDTO request, VerifiablePresentationSessionData sessionData, String base64Key) throws ApiNotAccessibleException, IOException, JOSEException, KeyGenerationException, DecryptionException { + + log.debug("Submitting presentation for walletId: {}, presentationId: {}", walletId, presentationId); + + if (base64Key == null || base64Key.isBlank()) { + log.warn("Wallet key not found for walletId: {}", walletId); + throw new IllegalArgumentException("Wallet key is required for presentation submission"); + } + + SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, request, base64Key); + + log.info("Presentation submission completed successfully for walletId: {}, presentationId: {}", walletId, presentationId); + return ResponseEntity.status(HttpStatus.OK).body(response); + } + + /** + * Handles verifier rejection with error details + */ + private ResponseEntity handleVerifierRejection(String walletId, VerifiablePresentationSessionData vpSessionData, SubmitPresentationRequestDTO request) throws VPErrorNotSentException { + + log.debug("Rejecting verifier for walletId: {}", walletId); + + // Create ErrorDTO from the request + ErrorDTO errorPayload = new ErrorDTO(); + errorPayload.setErrorCode(request.getErrorCode()); + errorPayload.setErrorMessage(request.getErrorMessage()); + + // Call the presentation service to reject the verifier + RejectedVerifierDTO rejectedVerifierDTO = presentationService.rejectVerifier(walletId, vpSessionData, errorPayload); + + log.info("Verifier rejection completed successfully for walletId: {}", walletId); + + return ResponseEntity.status(HttpStatus.OK).body(rejectedVerifierDTO); + } +} + diff --git a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java index ab31e2190..3b7644ecb 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java @@ -3,14 +3,27 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import io.mosip.mimoto.constant.CredentialFormat; +import io.mosip.mimoto.dto.ErrorDTO; +import io.mosip.mimoto.dto.RejectedVerifierDTO; +import io.mosip.mimoto.dto.VerifiablePresentationResponseDTO; +import io.mosip.mimoto.dto.VerifiablePresentationVerifierDTO; import io.mosip.mimoto.dto.mimoto.VCCredentialProperties; import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; import io.mosip.mimoto.dto.mimoto.VCCredentialResponseProof; import io.mosip.mimoto.dto.openid.presentation.*; +import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; +import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.ErrorConstants; +import io.mosip.mimoto.exception.VPErrorNotSentException; import io.mosip.mimoto.exception.VPNotCreatedException; import io.mosip.mimoto.service.PresentationService; +import io.mosip.mimoto.service.VerifierService; +import io.mosip.openID4VP.OpenID4VP; +import io.mosip.openID4VP.authorizationRequest.AuthorizationRequest; +import io.mosip.openID4VP.authorizationRequest.Verifier; +import io.mosip.openID4VP.authorizationRequest.clientMetadata.ClientMetadata; import io.mosip.mimoto.util.RestApiClient; +import io.mosip.openID4VP.networkManager.NetworkResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -18,12 +31,14 @@ import org.springframework.stereotype.Service; import java.io.IOException; +import java.net.URISyntaxException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.*; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; +import static io.mosip.mimoto.exception.ErrorConstants.REJECTED_VERIFIER; import static io.mosip.mimoto.util.JwtUtils.extractJwtPayloadFromSdJwt; import static io.mosip.mimoto.util.JwtUtils.parseJwtHeader; @@ -40,12 +55,66 @@ public class PresentationServiceImpl implements PresentationService { @Autowired private RestApiClient restApiClient; + @Autowired + private VerifierService verifierService; + + @Autowired + private OpenID4VPService openID4VPService; + @Value("${mosip.inji.ovp.redirect.url.pattern}") private String injiOvpRedirectURLPattern; @Value("${server.tomcat.max-http-response-header-size:65536}") private Integer maximumResponseHeaderSize; + @Override + public VerifiablePresentationResponseDTO handleVPAuthorizationRequest(String urlEncodedVPAuthorizationRequest, String walletId) throws ApiNotAccessibleException, IOException, URISyntaxException { + String presentationId = UUID.randomUUID().toString(); + + //Initialize OpenID4VP instance with presentationId as traceability id for each new Verifiable Presentation request + OpenID4VP openID4VP = openID4VPService.create(presentationId); + + List preRegisteredVerifiers = getPreRegisteredVerifiers(); + boolean shouldValidateClient = verifierService.isVerifierClientPreregistered(preRegisteredVerifiers, urlEncodedVPAuthorizationRequest); + AuthorizationRequest authorizationRequest = openID4VP.authenticateVerifier(urlEncodedVPAuthorizationRequest, preRegisteredVerifiers, shouldValidateClient); + VerifiablePresentationVerifierDTO verifiablePresentationVerifierDTO = createVPResponseVerifierDTO(preRegisteredVerifiers, authorizationRequest, walletId); + + return new VerifiablePresentationResponseDTO(presentationId, verifiablePresentationVerifierDTO); + } + + private VerifiablePresentationVerifierDTO createVPResponseVerifierDTO(List preRegisteredVerifiers, AuthorizationRequest authorizationRequest, String walletId) { + + boolean isVerifierPreRegisteredWithWallet = preRegisteredVerifiers.stream().map( + Verifier::getClientId).toList().contains(authorizationRequest.getClientId()); + + boolean isVerifierTrustedByWallet = verifierService.isVerifierTrustedByWallet(authorizationRequest.getClientId(), walletId); + + String clientName = Optional.ofNullable(authorizationRequest.getClientMetadata()) + .map(ClientMetadata::getClientName) + .filter(name -> !name.isBlank()) + .orElse(authorizationRequest.getClientId()); + + String logo = Optional.ofNullable(authorizationRequest.getClientMetadata()) + .map(ClientMetadata::getLogoUri) + .orElse(null); + + return new VerifiablePresentationVerifierDTO( + authorizationRequest.getClientId(), + clientName, + logo, + isVerifierTrustedByWallet, + isVerifierPreRegisteredWithWallet, + authorizationRequest.getRedirectUri() + ); + } + + private List getPreRegisteredVerifiers() throws ApiNotAccessibleException, IOException { + + return verifierService.getTrustedVerifiers().getVerifiers().stream() + .map(verifierDTO -> new Verifier(verifierDTO.getClientId(), verifierDTO.getResponseUris(), verifierDTO.getJwksUri(), verifierDTO.getAllowUnsignedRequest())) + .toList(); + } + @Override public String authorizePresentation(PresentationRequestDTO presentationRequestDTO) throws IOException { VCCredentialResponse vcCredentialResponse = dataShareService.downloadCredentialFromDataShare(presentationRequestDTO); @@ -152,30 +221,27 @@ private String postVpToResponseUri(String responseUri, String vpToken, String pr } log.info("Posting VP to response_uri: {}", responseUri); - Map postResponse = null; try { - postResponse = restApiClient.postApi( + Map postResponse = restApiClient.postApi( responseUri, MediaType.APPLICATION_JSON, postRequest, Map.class ); + log.info("Response from verifier after POST: {}", postResponse); + // Check for redirect_uri in response + String redirectUri = (String) postResponse.get("redirect_uri"); + if (redirectUri != null && !redirectUri.isEmpty()) { + return redirectUri; + } + // Fallback behavior if redirect_uri is not provided + log.warn("No redirect_uri received from verifier in POST response. Falling back to response_uri."); + return responseUri + "?status=vp_sent"; + } catch (Exception e) { log.error("Exception while submitting the vp_token to the response_uri", e); throw new VPNotCreatedException(ErrorConstants.INTERNAL_SERVER_ERROR.getErrorCode(), ErrorConstants.INTERNAL_SERVER_ERROR.getErrorMessage()); } - - log.info("Response from verifier after POST: {}", postResponse); - - // Check for redirect_uri in response - String redirectUri = (String) postResponse.get("redirect_uri"); - if (redirectUri != null && !redirectUri.isEmpty()) { - return redirectUri; - } - - // Fallback behavior if redirect_uri is not provided - log.warn("No redirect_uri received from verifier in POST response. Falling back to response_uri."); - return responseUri + "?status=vp_sent"; } private VerifiablePresentationDTO constructVerifiablePresentationString(VCCredentialProperties vcCredentialProperties) { @@ -274,4 +340,48 @@ public PresentationDefinitionDTO constructPresentationDefinition(VCCredentialRes .inputDescriptors(inputDescriptors) .build(); } -} + + @Override + public RejectedVerifierDTO rejectVerifier(String walletId, VerifiablePresentationSessionData vpSessionData, ErrorDTO payload) throws VPErrorNotSentException { + try { + NetworkResponse networkResponse = openID4VPService.sendErrorToVerifier(vpSessionData, payload); + log.info("Sent rejection to verifier. Response: {}", networkResponse); + + String redirectUri = extractRedirectUriFromBody(networkResponse != null ? networkResponse.getBody() : null) + .orElse(""); + + RejectedVerifierDTO rejectedVerifierDTO = new RejectedVerifierDTO(); + rejectedVerifierDTO.setStatus(REJECTED_VERIFIER.getErrorCode()); + rejectedVerifierDTO.setMessage(REJECTED_VERIFIER.getErrorMessage()); + rejectedVerifierDTO.setRedirectUri(redirectUri); + return rejectedVerifierDTO; + } catch (ApiNotAccessibleException | IOException | URISyntaxException | IllegalArgumentException e ) { + log.error("Failed to send rejection to verifier for walletId: {} - Error: {}", walletId, e.getMessage(), e); + throw new VPErrorNotSentException("Failed to send rejection to verifier - " + e.getMessage()); + } + } + + private java.util.Optional extractRedirectUriFromBody(String body) { + if (body == null || body.isBlank()) { + return java.util.Optional.empty(); + } + try { + var jsonNode = objectMapper.readTree(body); + if (jsonNode.has("redirect_uri") && jsonNode.get("redirect_uri").isTextual()) { + return java.util.Optional.of(jsonNode.get("redirect_uri").asText()); + } + @SuppressWarnings("unchecked") + Map map = objectMapper.readValue(body, Map.class); + Object ru = map.get("redirect_uri"); + if (ru instanceof String) { + return java.util.Optional.of((String) ru); + } + } catch (com.fasterxml.jackson.core.JsonProcessingException jpe) { + log.debug("Response body not valid JSON or missing redirect_uri: {}", jpe.getMessage()); + } catch (Exception ex) { + log.warn("Unexpected error while parsing response body for redirect_uri: {}", ex.getMessage(), ex); + } + return java.util.Optional.empty(); + } + +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/impl/PresentationSubmissionServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/PresentationSubmissionServiceImpl.java new file mode 100644 index 000000000..9687ec107 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/impl/PresentationSubmissionServiceImpl.java @@ -0,0 +1,505 @@ +package io.mosip.mimoto.service.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.nimbusds.jose.*; +import com.nimbusds.jose.jwk.JWK; +import com.nimbusds.jose.util.Base64URL; + +import io.mosip.mimoto.constant.SigningAlgorithm; +import io.mosip.mimoto.constant.OpenID4VPConstants; +import io.mosip.mimoto.dto.DecryptedCredentialDTO; +import io.mosip.mimoto.dto.SubmitPresentationRequestDTO; +import io.mosip.mimoto.dto.SubmitPresentationResponseDTO; +import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; +import io.mosip.mimoto.util.JwtGeneratorUtil; +import io.mosip.openID4VP.authorizationResponse.unsignedVPToken.types.ldp.UnsignedLdpVPToken; +import io.mosip.openID4VP.authorizationResponse.vpTokenSigningResult.VPTokenSigningResult; +import io.mosip.openID4VP.authorizationResponse.vpTokenSigningResult.types.ldp.LdpVPTokenSigningResult; +import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.DecryptionException; +import io.mosip.mimoto.exception.KeyGenerationException; +import io.mosip.mimoto.model.VerifiablePresentation; +import io.mosip.mimoto.service.PresentationSubmissionService; +import io.mosip.mimoto.service.KeyPairService; +import io.mosip.mimoto.service.VerifierService; +import io.mosip.mimoto.repository.VerifiablePresentationsRepository; +import io.mosip.mimoto.util.UrlParameterUtils; +import io.mosip.mimoto.util.Base64Util; +import io.mosip.openID4VP.OpenID4VP; +import io.mosip.openID4VP.authorizationRequest.Verifier; +import io.mosip.openID4VP.constants.FormatType; +import io.mosip.openID4VP.authorizationResponse.unsignedVPToken.UnsignedVPToken; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.security.*; +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; + +/** + * Service implementation for handling presentation submission operations + */ +@Slf4j +@Service +public class PresentationSubmissionServiceImpl implements PresentationSubmissionService { + + private static final String DEFAULT_SIGNATURE_SUITE = "JsonWebSignature2020"; + private static final String UNKNOWN_VERIFIER = "unknown"; + private static final String EMPTY_JSON = "{}"; + private static final String DEFAULT_SIGNING_ALGORITHM_NAME = "ED25519"; + + @Autowired + private ObjectMapper objectMapper; + + @Autowired + private OpenID4VPService openID4VPService; + + @Autowired + private VerifierService verifierService; + + @Autowired + private KeyPairService keyPairService; + + @Autowired + private VerifiablePresentationsRepository verifiablePresentationsRepository; + + @Override + public SubmitPresentationResponseDTO submitPresentation(VerifiablePresentationSessionData sessionData, String walletId, String presentationId, SubmitPresentationRequestDTO request, String base64Key) throws ApiNotAccessibleException, IOException, JOSEException, KeyGenerationException, DecryptionException { + + LocalDateTime requestedAt = LocalDateTime.now(); + + validateInputs(request); + + log.info("Starting presentation submission for walletId: {}, presentationId: {}", walletId, presentationId); + + // Step 1: Fetch full credentials by ID from cache + List selectedCredentials = fetchSelectedCredentials(sessionData, request.getSelectedCredentials()); + + // Step 2: Create OpenID4VP instance and construct unsigned VP token + OpenID4VP openID4VP = openID4VPService.create(presentationId); + List preRegisteredVerifiers = verifierService.getTrustedVerifiers().getVerifiers().stream() + .map(verifierDTO -> new Verifier(verifierDTO.getClientId(), verifierDTO.getResponseUris(), verifierDTO.getJwksUri(), verifierDTO.getAllowUnsignedRequest())) + .toList(); + openID4VP.authenticateVerifier(sessionData.getAuthorizationRequest(), preRegisteredVerifiers, sessionData.isVerifierClientPreregistered()); + + // Use configurable signing algorithm + SigningAlgorithm signingAlgorithm = SigningAlgorithm.valueOf(DEFAULT_SIGNING_ALGORITHM_NAME); + KeyPair keyPair = keyPairService.getKeyPairFromDB(walletId, base64Key, signingAlgorithm); + JWK jwk = JwtGeneratorUtil.generateJwk(signingAlgorithm, keyPair); + Map unsignedVPToken = constructUnsignedVPToken(openID4VP, selectedCredentials, jwk); + + // Step 3: Sign token using user's private key + JWSSigner jwsSigner = JwtGeneratorUtil.createSigner(signingAlgorithm, jwk); + Map vpTokenSigningResults = signVPToken(unsignedVPToken, jwsSigner, walletId, base64Key); + + // Step 4: Share verifiable presentation with verifier using OpenID4VP JAR + boolean shareSuccess = shareVerifiablePresentation(vpTokenSigningResults, sessionData, openID4VP); + + // Step 5: Store presentation record in database + storePresentationRecord(walletId, presentationId, request, sessionData, shareSuccess, requestedAt); + + // Step 6: Return success response + return SubmitPresentationResponseDTO.builder().presentationId(presentationId) + .status(shareSuccess ? OpenID4VPConstants.STATUS_SUCCESS : OpenID4VPConstants.STATUS_ERROR) + .message(shareSuccess ? OpenID4VPConstants.MESSAGE_PRESENTATION_SUCCESS : OpenID4VPConstants.MESSAGE_PRESENTATION_SHARE_FAILED) + .build(); + } + + /** + * Signs VP token using JWSSigner for different format types + * This method delegates to format-specific signing methods + * + * @param unsignedVPTokensMap Map of unsigned VP tokens by format type + * @param jwsSigner The JWS signer to use for signing operations (for LDP_VC) + * @param walletId The wallet ID for fetching keypairs (for MSO_MDOC) + * @param base64Key The base64 encoded wallet key for decryption (for MSO_MDOC) + * @return Map of signed VP token results by format type + * @throws JOSEException if JWT signing fails + * @throws IOException if I/O operations fail + * @throws KeyGenerationException if key pair retrieval or generation fails + * @throws DecryptionException if decryption of private key fails + */ + private Map signVPToken(Map unsignedVPTokensMap, JWSSigner jwsSigner, String walletId, String base64Key) throws JOSEException, IOException, KeyGenerationException, DecryptionException { + log.debug("Signing VP token for {} format types", unsignedVPTokensMap.size()); + + return unsignedVPTokensMap.entrySet().stream().map(entry -> { + FormatType formatType = entry.getKey(); + UnsignedVPToken unsignedVPToken = entry.getValue(); + + try { + LdpVPTokenSigningResult signingResult = switch (formatType) { + case LDP_VC -> signLdpVcFormat(unsignedVPToken, jwsSigner); + case MSO_MDOC -> signMsoMdocFormat(unsignedVPToken, walletId, base64Key); + default -> { + log.warn("Unsupported format type: {}", formatType); + yield null; + } + }; + + return signingResult != null ? Map.entry(formatType, signingResult) : null; + } catch (JOSEException | IOException | KeyGenerationException | DecryptionException e) { + throw new RuntimeException("Failed to sign VP token for format: " + formatType, e); + } + }).filter(Objects::nonNull).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + } + + /** + * Signs LDP_VC format verifiable presentation using detached JWT + * + * @param unsignedVPToken The unsigned VP token + * @param jwsSigner The JWS signer (EdDSA) for signing + * @return Signing result with detached JWT proof + * @throws JOSEException if JWT signing fails + */ + private LdpVPTokenSigningResult signLdpVcFormat(UnsignedVPToken unsignedVPToken, JWSSigner jwsSigner) throws JOSEException { + log.debug("Signing LDP_VC format VP token"); + + String dataToSign = ((UnsignedLdpVPToken) unsignedVPToken).getDataToSign(); + + JWSHeader header = new JWSHeader.Builder(JWSAlgorithm.EdDSA).criticalParams(Set.of(OpenID4VPConstants.JWT_CRITICAL_PARAM_B64)).base64URLEncodePayload(false).build(); + + byte[] vpTokenBytes = Base64Util.decodeFlexible(dataToSign); + + // Create header bytes for signing input + String headerJson = header.toString(); + String header64 = Base64Util.encode(headerJson); + + // Create input bytes for detached JWT signing: header + '.' + payload + byte[] inputBytes = Base64Util.createDetachedJwtSigningInput(header64, vpTokenBytes); + + // Sign using the provided JWSSigner + Base64URL signatureBase64URL = jwsSigner.sign(header, inputBytes); + String signature = signatureBase64URL.toString(); + + // Create the detached JWT proof: header64 + '..' + signature + String proof = header64 + OpenID4VPConstants.DETACHED_JWT_SEPARATOR + signature; + + Map signingResultData = new HashMap<>(); + signingResultData.put(OpenID4VPConstants.JWS, proof); + signingResultData.put(OpenID4VPConstants.PROOF_VALUE, null); + signingResultData.put(OpenID4VPConstants.SIGNATURE_ALGORITHM, DEFAULT_SIGNATURE_SUITE); + + return objectMapper.convertValue(signingResultData, LdpVPTokenSigningResult.class); + } + + /** + * Signs MSO_MDOC format verifiable presentation + * Creates ES256 keypair and signs each document type + * + * @param unsignedVPToken The unsigned VP token + * @param walletId The wallet ID for fetching keypairs + * @param base64Key The base64 encoded wallet key for decryption + * @return Signing result with document type signatures + * @throws JOSEException if JWT signing fails + * @throws IOException if I/O operations fail + * @throws KeyGenerationException if key pair retrieval or generation fails + * @throws DecryptionException if decryption of private key fails + */ + private LdpVPTokenSigningResult signMsoMdocFormat(UnsignedVPToken unsignedVPToken, String walletId, String base64Key) throws JOSEException, IOException, KeyGenerationException, DecryptionException { + log.debug("Signing MSO_MDOC format VP token"); + + // Convert UnsignedVPToken to Map for MSO_MDOC format + @SuppressWarnings("unchecked") Map credentials = objectMapper.convertValue(unsignedVPToken, Map.class); + Map> documentTypeSignatures = new HashMap<>(); + + // For MSO_MDOC format, look for docTypeToDeviceAuthenticationBytes + if (!credentials.containsKey(OpenID4VPConstants.DOC_TYPE_TO_DEVICE_AUTHENTICATION_BYTES)) { + log.warn("MSO_MDOC format type but no docTypeToDeviceAuthenticationBytes found"); + return createMsoMdocSigningResult(documentTypeSignatures); + } + + @SuppressWarnings("unchecked") Map docTypeToDeviceAuthenticationBytes = (Map) credentials.get(OpenID4VPConstants.DOC_TYPE_TO_DEVICE_AUTHENTICATION_BYTES); + + if (docTypeToDeviceAuthenticationBytes == null) { + return createMsoMdocSigningResult(documentTypeSignatures); + } + + // Get MDOC authentication algorithm (defaulting to ES256) + String mdocAuthenticationAlgorithm = OpenID4VPConstants.ALGORITHM_ES256; + SigningAlgorithm mdocSigningAlgorithm = SigningAlgorithm.ES256; + + // Fetch key pair for MSO_MDOC signing (ES256 algorithm) + log.debug("Fetching ES256 keypair for MSO_MDOC signing for walletId: {}", walletId); + KeyPair mdocKeyPair = keyPairService.getKeyPairFromDB(walletId, base64Key, mdocSigningAlgorithm); + JWK mdocJwk = JwtGeneratorUtil.generateJwk(mdocSigningAlgorithm, mdocKeyPair); + JWSSigner mdocSigner = JwtGeneratorUtil.createSigner(mdocSigningAlgorithm, mdocJwk); + + // Process each docType entry using streams + Map> signedDocTypes = docTypeToDeviceAuthenticationBytes.entrySet().stream().map(docTypeEntry -> { + String docType = docTypeEntry.getKey(); + Object payload = docTypeEntry.getValue(); + + log.debug("Processing MSO_MDOC docType: {} with algorithm: {}", docType, mdocAuthenticationAlgorithm); + + try { + String signature = signMsoMdocDocType(payload, mdocSigner); + + // If signature was created successfully + if (signature != null && !signature.isEmpty()) { + Map docTypeResult = new HashMap<>(); + docTypeResult.put(OpenID4VPConstants.SIGNATURE, signature); + docTypeResult.put(OpenID4VPConstants.MDOC_AUTHENTICATION_ALGORITHM, mdocAuthenticationAlgorithm); + + log.debug("Successfully signed MSO_MDOC docType: {} with algorithm: {}", docType, mdocAuthenticationAlgorithm); + + return Map.entry(docType, docTypeResult); + } + return null; + } catch (JOSEException | IOException e) { + log.error("Failed to sign MSO_MDOC docType: {}", docType, e); + throw new RuntimeException("Failed to sign docType: " + docType, e); + } + }).filter(Objects::nonNull).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + documentTypeSignatures.putAll(signedDocTypes); + + return createMsoMdocSigningResult(documentTypeSignatures); + } + + /** + * Signs a single MSO_MDOC document type payload + * + * @param payload The payload to sign (string or object) + * @param mdocSigner The ES256 signer + * @return Base64URL encoded signature + * @throws JOSEException if signing operation fails + * @throws IOException if payload serialization fails + */ + private String signMsoMdocDocType(Object payload, JWSSigner mdocSigner) throws JOSEException, IOException { + // Create JWSHeader for ES256 algorithm + JWSHeader header = new JWSHeader.Builder(JWSAlgorithm.ES256).build(); + + // Convert payload to bytes for signing + byte[] payloadBytes; + if (payload instanceof String) { + payloadBytes = ((String) payload).getBytes(StandardCharsets.UTF_8); + } else { + payloadBytes = objectMapper.writeValueAsBytes(payload); + } + + // Sign using the MSO_MDOC specific signer (ES256) + Base64URL signatureBase64URL = mdocSigner.sign(header, payloadBytes); + return signatureBase64URL.toString(); + } + + /** + * Creates MSO_MDOC signing result from document type signatures + * + * @param documentTypeSignatures Map of document type to signature data + * @return LdpVPTokenSigningResult + */ + private LdpVPTokenSigningResult createMsoMdocSigningResult(Map> documentTypeSignatures) { + Map signingResultData = new HashMap<>(); + signingResultData.put(OpenID4VPConstants.DOCUMENT_TYPE_SIGNATURES, documentTypeSignatures); + return objectMapper.convertValue(signingResultData, LdpVPTokenSigningResult.class); + } + + /** + * Fetches selected credentials from the session cache + */ + private List fetchSelectedCredentials(VerifiablePresentationSessionData sessionData, List selectedCredentialIds) { + + log.debug("Fetching {} selected credentials from cache", selectedCredentialIds.size()); + + if (sessionData.getMatchingCredentials() == null) { + throw new IllegalStateException("No matching credentials found in session cache"); + } + + return sessionData.getMatchingCredentials().stream() + .filter(credential -> selectedCredentialIds.contains(credential.getId())) + .collect(Collectors.toList()); + } + + /** + * Constructs unsigned VP token using the OpenID4VP JAR + */ + private Map constructUnsignedVPToken(OpenID4VP openID4VP, List credentials, JWK jwk) throws JsonProcessingException { + + log.debug("Constructing unsigned VP token for {} credentials", credentials.size()); + + Map>> verifiableCredentials = convertCredentialsToJarFormat(credentials); + String holderId = resolveHolderId(jwk); + return openID4VP.constructUnsignedVPToken(verifiableCredentials, holderId, DEFAULT_SIGNATURE_SUITE); + + } + + /** + * Resolves holderId from the user's public key using JWK format + */ + private String resolveHolderId(JWK jwk) throws JsonProcessingException{ + + // Convert JWK to JSON string + String jwkJson = objectMapper.writeValueAsString(jwk.toPublicJWK().toJSONObject()); + + // Base64URL encode the JWK JSON + String base64UrlEncodedJwk = Base64Util.encode(jwkJson); + + // Construct holderId: did:jwk:{base64url(jwk)}#0 + return OpenID4VPConstants.DID_JWK_PREFIX + base64UrlEncodedJwk + OpenID4VPConstants.DID_KEY_FRAGMENT; + } + + /** + * Converts DecryptedCredentialDTO list to the format expected by the OpenID4VP JAR + * Extracts the inner credential data from VCCredentialResponse wrapper to remove the "credential" wrapper + */ + private Map>> convertCredentialsToJarFormat(List credentials) { + + return credentials.stream().collect(Collectors.groupingBy(DecryptedCredentialDTO::getId, Collectors.collectingAndThen(Collectors.toList(), credList -> credList.stream().collect(Collectors.groupingBy(credential -> { + // Get format and credential data + VCCredentialResponse vcCredentialResponse = credential.getCredential(); + String credentialFormat = vcCredentialResponse.getFormat(); + // Convert format string to FormatType enum + return mapStringToFormatType(credentialFormat); + }, Collectors.mapping(credential -> credential.getCredential().getCredential(), Collectors.toList())))))); + } + + /** + * Maps format string to FormatType enum + */ + private FormatType mapStringToFormatType(String format) { + if (format == null) { + return FormatType.LDP_VC; // Default fallback + } + + return switch (format.toLowerCase()) { + case OpenID4VPConstants.FORMAT_LDP_VC_UNDERSCORE, OpenID4VPConstants.FORMAT_LDP_VC_HYPHEN -> + FormatType.LDP_VC; + case OpenID4VPConstants.FORMAT_MSO_MDOC_UNDERSCORE, OpenID4VPConstants.FORMAT_MSO_MDOC_HYPHEN -> + FormatType.MSO_MDOC; + // Add other supported formats as they become available in the OpenID4VP library + default -> { + log.warn("Unknown credential format: {}, defaulting to LDP_VC", format); + yield FormatType.LDP_VC; + } + }; + } + + /** + * Shares the verifiable presentation with the verifier + * First calls OpenID4VP JAR's shareVerifiablePresentation method, then makes HTTP POST + */ + private boolean shareVerifiablePresentation(Map vpTokenSigningResults, VerifiablePresentationSessionData sessionData, OpenID4VP openID4VP) { + log.debug("Sharing verifiable presentation with verifier"); + + try { + // Step 1: Call OpenID4VP JAR's shareVerifiablePresentation method + log.debug("Calling OpenID4VP JAR's shareVerifiablePresentation method"); + // Cast to the expected type for the JAR method + @SuppressWarnings({"unchecked", "rawtypes"}) Map jarMap = (Map) vpTokenSigningResults; + String vpToken = openID4VP.shareVerifiablePresentation(jarMap); + + return vpToken.trim().isEmpty(); + + } catch (Exception e) { + log.error("Failed to share verifiable presentation with verifier", e); + return false; + } + } + + /** + * Stores presentation record in the database + * Uses @Transactional to ensure atomicity of database operations + */ + @Transactional + private void storePresentationRecord(String walletId, String presentationId, SubmitPresentationRequestDTO request, VerifiablePresentationSessionData sessionData, boolean success, LocalDateTime requestedAt) { + log.debug("Storing presentation record in database - success: {}", success); + + try { + if (sessionData == null) { + log.warn("Session data is null for presentationId: {}", presentationId); + return; + } + + // Extract verifier information from OpenID4VP object + String verifierId = extractVerifierId(sessionData); + String authRequest = extractVerifierAuthRequest(sessionData); + String presentationData = createPresentationData(request, sessionData); + + // Create the presentation record + VerifiablePresentation presentation = VerifiablePresentation.builder().id(presentationId).walletId(walletId).authRequest(authRequest).presentationData(presentationData).verifierId(verifierId).status(success ? OpenID4VPConstants.STATUS_SUCCESS : OpenID4VPConstants.STATUS_ERROR).requestedAt(requestedAt).consent(true).build(); + + // Save to database + verifiablePresentationsRepository.save(presentation); + + log.info("Presentation record stored successfully - recordId: {}, walletId: {}, presentationId: {}, status: {}", presentationId, walletId, presentationId, success ? OpenID4VPConstants.STATUS_SUCCESS : OpenID4VPConstants.STATUS_ERROR); + + } catch (Exception e) { + log.error("CRITICAL: Failed to store presentation record - walletId: {}, presentationId: {}, verifierId: {}, success: {}", walletId, presentationId, sessionData != null ? extractVerifierId(sessionData) : "unknown", success, e); + } + } + + /** + * Extracts verifier ID from session data + */ + private String extractVerifierId(VerifiablePresentationSessionData sessionData) { + try { + // Since authorizationRequest is a URL, we need to extract client_id from URL parameters + if (sessionData.getAuthorizationRequest() != null) { + String authRequestUrl = sessionData.getAuthorizationRequest(); + return UrlParameterUtils.extractClientIdFromUrl(authRequestUrl); + } + } catch (Exception e) { + log.warn("Failed to extract verifier ID", e); + } + return UNKNOWN_VERIFIER; + } + + /** + * Extracts verifier authorization request as JSON + */ + private String extractVerifierAuthRequest(VerifiablePresentationSessionData sessionData) { + try { + if (sessionData.getAuthorizationRequest() != null) { + // Convert the URL string to a JSON object + Map authRequestData = new HashMap<>(); + authRequestData.put(OpenID4VPConstants.AUTHORIZATION_REQUEST_URL, sessionData.getAuthorizationRequest()); + return objectMapper.writeValueAsString(authRequestData); + } + } catch (Exception e) { + log.warn("Failed to extract verifier auth request", e); + } + return EMPTY_JSON; + } + + /** + * Creates presentation data JSON with selected credentials and metadata + */ + private String createPresentationData(SubmitPresentationRequestDTO request, VerifiablePresentationSessionData sessionData) { + try { + Map presentationData = new HashMap<>(); + presentationData.put(OpenID4VPConstants.SELECTED_CREDENTIALS, request.getSelectedCredentials()); + + return objectMapper.writeValueAsString(presentationData); + } catch (Exception e) { + log.warn("Failed to create presentation data", e); + return EMPTY_JSON; + } + } + + /** + * Validates all input parameters for presentation submission + * + * @throws IllegalArgumentException if any input is invalid + */ + private void validateInputs(SubmitPresentationRequestDTO request) { + + if (request == null) { + log.error("Request cannot be null"); + throw new IllegalArgumentException("Request cannot be null"); + } + + if (request.getSelectedCredentials() == null || request.getSelectedCredentials().isEmpty()) { + log.error("Selected credentials cannot be null or empty"); + throw new IllegalArgumentException("Selected credentials cannot be null or empty"); + } + + log.debug("Input validation passed for request: {}", request.toString()); + } +} diff --git a/src/main/java/io/mosip/mimoto/service/impl/SessionManager.java b/src/main/java/io/mosip/mimoto/service/impl/SessionManager.java index 1ec335200..bc5e39595 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/SessionManager.java +++ b/src/main/java/io/mosip/mimoto/service/impl/SessionManager.java @@ -1,17 +1,106 @@ package io.mosip.mimoto.service.impl; +import com.fasterxml.jackson.databind.ObjectMapper; import io.mosip.mimoto.constant.SessionKeys; +import io.mosip.mimoto.dto.DecryptedCredentialDTO; import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; +import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpSession; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + @Component +@Slf4j public class SessionManager { + + @Autowired + private ObjectMapper objectMapper; + public void setupSession(HttpServletRequest request, String provider, UserMetadataDTO userMetadata, String userId) { HttpSession session = request.getSession(true); - session.setAttribute("clientRegistrationId", provider); + session.setAttribute(SessionKeys.CLIENT_REGISTRATION_ID, provider); session.setAttribute(SessionKeys.USER_METADATA, userMetadata); session.setAttribute(SessionKeys.USER_ID, userId); } -} + + public void storePresentationSessionData(HttpSession httpSession, VerifiablePresentationSessionData sessionData, String walletId) { + Map presentations = getOrCreateSessionMap(httpSession, SessionKeys.PRESENTATIONS + "::" + walletId); + + // Adds the new presentation to the map if it is not already present + presentations.computeIfAbsent(sessionData.getPresentationId(), id -> sessionData); + + // Store the updated presentations map in the session + httpSession.setAttribute(SessionKeys.PRESENTATIONS + "::" + walletId, presentations); + } + + /** + * Retrieves the verifiable presentation session data from session for a given presentation + * ID. + * + * @param httpSession The HTTP session. + * @param presentationId The presentation ID. + * @return The verifiable presentation session data if found, null otherwise. + */ + public VerifiablePresentationSessionData getPresentationSessionData(HttpSession httpSession, String walletId, String presentationId) { + try { + Map presentations = (Map) httpSession.getAttribute(SessionKeys.PRESENTATIONS + "::" + walletId); + if (presentations == null || !presentations.containsKey(presentationId)) { + log.warn("No presentation found in session for presentationId: {}", presentationId); + return null; + } + + VerifiablePresentationSessionData sessionData = presentations.get(presentationId); + + return sessionData; + + } catch (Exception e) { + log.error("Failed to retrieve presentation session data from session for presentationId: {}", presentationId, e); + return null; + } + } + + /** + * Stores the matching credentials response and filtered decrypted credentials in the session cache. + * + * @param httpSession The HTTP session. + * @param walletId The wallet ID. + * @param existingSessionData The existing object in cache. + * @param credentials The decrypted credentials to cache. + */ + public void storeMatchingWalletCredentialsInPresentationSessionData(HttpSession httpSession, String walletId, VerifiablePresentationSessionData existingSessionData, List credentials) { + VerifiablePresentationSessionData updatedSessionData = new VerifiablePresentationSessionData(existingSessionData.getPresentationId(), + existingSessionData.getAuthorizationRequest(), + existingSessionData.getCreatedAt(), + existingSessionData.isVerifierClientPreregistered(), + credentials + ); + + // Update the presentations map with the updated session data + Map presentations = (Map) httpSession.getAttribute(SessionKeys.PRESENTATIONS + "::" + walletId); + presentations.put(updatedSessionData.getPresentationId(), updatedSessionData); + httpSession.setAttribute(SessionKeys.PRESENTATIONS + "::" + walletId, presentations); + } + + /** + * Helper method to get or create a session map attribute for VerifiablePresentationSessionData objects. + * This eliminates duplication in session map handling across store methods. + * + * @param httpSession The HTTP session. + * @param key The session attribute key. + * @return The existing map or a new HashMap if none exists. + */ + @SuppressWarnings("unchecked") + private Map getOrCreateSessionMap(HttpSession httpSession, String key) { + Map sessionMap = (Map) httpSession.getAttribute(key); + if (sessionMap == null) { + sessionMap = new HashMap<>(); + } + return sessionMap; + } +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/impl/TrustedVerifierServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/TrustedVerifierServiceImpl.java new file mode 100644 index 000000000..ec801521f --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/impl/TrustedVerifierServiceImpl.java @@ -0,0 +1,41 @@ +package io.mosip.mimoto.service.impl; + +import io.mosip.mimoto.dto.TrustedVerifierRequest; +import io.mosip.mimoto.dto.TrustedVerifierResponseDTO; +import io.mosip.mimoto.exception.InvalidRequestException; +import io.mosip.mimoto.model.TrustedVerifier; +import io.mosip.mimoto.repository.VerifierRepository; +import io.mosip.mimoto.service.TrustedVerifierService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.UUID; + +import static io.mosip.mimoto.exception.ErrorConstants.*; + +@Service +public class TrustedVerifierServiceImpl implements TrustedVerifierService { + + @Autowired + private VerifierRepository verifierRepository; + + @Override + public TrustedVerifierResponseDTO addTrustedVerifier(String walletId, TrustedVerifierRequest trustedVerifierRequest) { + // Check if already exists to avoid duplicates + if (verifierRepository.existsByWalletIdAndVerifierId(walletId, trustedVerifierRequest.getVerifierId())) { + throw new InvalidRequestException(DUPLICATE_VERIFIER.getErrorCode(), DUPLICATE_VERIFIER.getErrorMessage()); + } + + TrustedVerifier trustedVerifier = TrustedVerifier.builder() + .id(UUID.randomUUID().toString()) // Generate unique ID + .walletId(walletId) + .verifierId(trustedVerifierRequest.getVerifierId()) + .build(); + + TrustedVerifier row = verifierRepository.save(trustedVerifier); + + TrustedVerifierResponseDTO trustedVerifierResponseDTO = new TrustedVerifierResponseDTO(); + trustedVerifierResponseDTO.setId(row.getId()); + return trustedVerifierResponseDTO; + } +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java index 6c522c553..51988594c 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java @@ -7,15 +7,21 @@ import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.exception.InvalidVerifierException; +import io.mosip.mimoto.repository.VerifierRepository; import io.mosip.mimoto.service.VerifierService; +import io.mosip.mimoto.util.UrlParameterUtils; import io.mosip.mimoto.util.Utilities; +import io.mosip.openID4VP.authorizationRequest.Verifier; import lombok.extern.slf4j.Slf4j; import org.apache.commons.validator.routines.UrlValidator; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.AntPathMatcher; import org.springframework.util.PathMatcher; +import org.springframework.cache.annotation.Cacheable; +import java.net.URISyntaxException; +import java.util.List; import java.util.Optional; import static org.apache.commons.validator.routines.UrlValidator.ALLOW_ALL_SCHEMES; @@ -31,6 +37,9 @@ public class VerifierServiceImpl implements VerifierService { @Autowired ObjectMapper objectMapper; + @Autowired + private VerifierRepository verifierRepository; + private static final PathMatcher pathMatcher; private static final UrlValidator urlValidator; @@ -39,6 +48,7 @@ public class VerifierServiceImpl implements VerifierService { urlValidator = new UrlValidator(ALLOW_ALL_SCHEMES+ALLOW_LOCAL_URLS); } + @Cacheable(value = "preRegisteredTrustedVerifiersCache", key = "'preRegisteredTrustedVerifiers'") public VerifiersDTO getTrustedVerifiers() throws ApiNotAccessibleException, JsonProcessingException { String trustedVerifiersJsonValue = utilities.getTrustedVerifiersJsonValue(); if (trustedVerifiersJsonValue == null) { @@ -74,4 +84,31 @@ public void validateVerifier(String clientId, String redirectUri) throws ApiNotA } ); } + + @Override + public boolean isVerifierTrustedByWallet(String verifierId, String walletId) { + return verifierRepository.existsByWalletIdAndVerifierId(walletId, verifierId); + } + + @Override + public boolean isVerifierClientPreregistered(List preRegisteredVerifiers, String urlEncodedVPAuthorizationRequest) throws URISyntaxException { + if (urlEncodedVPAuthorizationRequest == null || urlEncodedVPAuthorizationRequest.trim().isEmpty()) { + log.warn("URL encoded VP authorization request is null or empty"); + return false; + } + + String clientId = UrlParameterUtils.extractClientIdFromUrl(urlEncodedVPAuthorizationRequest); + List responseUris = UrlParameterUtils.extractResponseUrisFromUrl(urlEncodedVPAuthorizationRequest); + + if (clientId == null || clientId.trim().isEmpty()) { + log.warn("No client_id found in the authorization request URL"); + return false; + } + if (responseUris==null || responseUris.isEmpty()) { + log.warn("No response_uri found in the authorization request URL"); + return false; + } + return preRegisteredVerifiers.stream().anyMatch(verifier -> clientId.equals(verifier.getClientId()) && verifier.getResponseUris().containsAll(responseUris)); + } + } diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java index 55479a19c..4d82e4f6f 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.dto.DecryptedCredentialDTO; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.CredentialsSupportedResponse; @@ -28,8 +29,10 @@ import java.io.ByteArrayInputStream; import java.io.IOException; +import java.lang.IllegalArgumentException; import java.util.Arrays; import java.util.List; +import java.util.Optional; import java.util.Set; import java.util.function.Supplier; import java.util.stream.Collectors; @@ -214,4 +217,49 @@ private WalletCredentialResponseDTO generateCredentialResponse(String decryptedC throw new CredentialProcessingException(CREDENTIAL_FETCH_EXCEPTION.getErrorCode(), "Failed to generate credential PDF"); } } + + @Override + public List getDecryptedCredentials(String walletId, String base64Key) { + List walletCredentials = repository.findByWalletIdOrderByCreatedAtDesc(walletId); + List decryptedCredentials = walletCredentials.stream().map(credential -> { + try { + VCCredentialResponse decryptedCredential = decryptAndParseCredential(credential, base64Key); + return Optional.of(DecryptedCredentialDTO.builder() + .id(credential.getId()) + .walletId(credential.getWalletId()) + .credential(decryptedCredential) + .credentialMetadata(credential.getCredentialMetadata()) + .createdAt(credential.getCreatedAt()) + .updatedAt(credential.getUpdatedAt()) + .build()); + } catch (IOException | IllegalArgumentException | DecryptionException e) { + log.warn("Failed to decrypt credential {}: {}", credential.getId(), e.getMessage()); + return Optional.empty(); + } + }) + .filter(Optional::isPresent) + .map(Optional::get) + .collect(Collectors.toList()); + + log.info("Successfully decrypted {} out of {} credentials", decryptedCredentials.size(), walletCredentials.size()); + return decryptedCredentials; + } + + private VCCredentialResponse decryptAndParseCredential(VerifiableCredential credential, String base64Key) throws IOException, IllegalArgumentException, DecryptionException { + if (credential == null) { + throw new IllegalArgumentException("Credential cannot be null"); + } + + if (credential.getCredential() == null) { + throw new IllegalArgumentException("Credential data cannot be null"); + } + + String decryptedCredential = encryptionDecryptionUtil.decryptCredential(credential.getCredential(), base64Key); + if (decryptedCredential == null || decryptedCredential.trim().isEmpty()) { + throw new IllegalArgumentException("Failed to decrypt credential or decrypted data is empty"); + } + + return objectMapper.readValue(decryptedCredential, VCCredentialResponse.class); + } + } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/util/Base64Util.java b/src/main/java/io/mosip/mimoto/util/Base64Util.java new file mode 100644 index 000000000..d4e4d8299 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/Base64Util.java @@ -0,0 +1,188 @@ +package io.mosip.mimoto.util; + +import com.nimbusds.jose.util.Base64URL; +import lombok.experimental.UtilityClass; + +import java.nio.ByteBuffer; +import java.nio.charset.StandardCharsets; +import java.util.Base64; + +/** + * Utility class for Base64URL encoding and decoding operations. + * Provides centralized Base64URL functionality using both Java standard library + * and Nimbus JOSE library for consistency across the application. + */ +@UtilityClass +public class Base64Util { + + /** + * Encodes a string to Base64URL format using Nimbus JOSE library + * + * @param input the string to encode + * @return Base64URL encoded string + */ + public static String encode(String input) { + if (input == null) { + return null; + } + return Base64URL.encode(input.getBytes(StandardCharsets.UTF_8)).toString(); + } + + /** + * Encodes a byte array to Base64URL format using Nimbus JOSE library + * + * @param bytes the byte array to encode + * @return Base64URL encoded string + */ + public static String encode(byte[] bytes) { + if (bytes == null) { + return null; + } + return Base64URL.encode(bytes).toString(); + } + + /** + * Decodes a Base64URL string to byte array using Nimbus JOSE library + * + * @param base64UrlString the Base64URL encoded string + * @return decoded byte array + * @throws IllegalArgumentException if the input is not valid Base64URL + */ + public static byte[] decode(String base64UrlString) { + if (base64UrlString == null) { + return null; + } + return Base64URL.from(base64UrlString).decode(); + } + + /** + * Decodes a Base64URL string to a UTF-8 string using Nimbus JOSE library + * + * @param base64UrlString the Base64URL encoded string + * @return decoded UTF-8 string + * @throws IllegalArgumentException if the input is not valid Base64URL + */ + public static String decodeToString(String base64UrlString) { + byte[] decoded = decode(base64UrlString); + return decoded != null ? new String(decoded, StandardCharsets.UTF_8) : null; + } + + /** + * Alternative encoding method using Java standard library for compatibility + * + * @param input the string to encode + * @return Base64URL encoded string using Java standard library + */ + public static String encodeWithJavaStdLib(String input) { + if (input == null) { + return null; + } + return Base64.getUrlEncoder().withoutPadding().encodeToString(input.getBytes(StandardCharsets.UTF_8)); + } + + /** + * Alternative encoding method using Java standard library for compatibility + * + * @param bytes the byte array to encode + * @return Base64URL encoded string using Java standard library + */ + public static String encodeWithJavaStdLib(byte[] bytes) { + if (bytes == null) { + return null; + } + return Base64.getUrlEncoder().withoutPadding().encodeToString(bytes); + } + + /** + * Alternative decoding method using Java standard library for compatibility + * + * @param base64UrlString the Base64URL encoded string + * @return decoded byte array using Java standard library + * @throws IllegalArgumentException if the input is not valid Base64URL + */ + public static byte[] decodeWithJavaStdLib(String base64UrlString) { + if (base64UrlString == null) { + return null; + } + return Base64.getUrlDecoder().decode(base64UrlString); + } + + /** + * Converts a Base64 or Base64URL string to byte array with automatic format detection. + * This method tries Base64URL decoding first (common for JWT/VP tokens), + * then falls back to standard Base64, and finally normalizes and retries if both fail. + * + * @param base64String the Base64 or Base64URL encoded string + * @return decoded byte array + * @throws IllegalArgumentException if the input cannot be decoded in any supported format + */ + public static byte[] decodeFlexible(String base64String) { + if (base64String == null) { + return null; + } + + try { + // First try Base64URL decoding (which is more common for JWT/VP tokens) + return Base64.getUrlDecoder().decode(base64String); + } catch (IllegalArgumentException e) { + try { + // Fallback to standard Base64 decoding + return Base64.getDecoder().decode(base64String); + } catch (IllegalArgumentException e2) { + // If both fail, normalize to standard Base64 and try again + String normalizedBase64 = normalizeBase64String(base64String); + return Base64.getDecoder().decode(normalizedBase64); + } + } + } + + /** + * Normalizes a Base64URL string to standard Base64 format with proper padding. + * Converts '-' to '+', '_' to '/', and adds padding ('=') if needed. + * + * @param base64String the Base64URL string to normalize + * @return normalized standard Base64 string with padding + */ + public static String normalizeBase64String(String base64String) { + if (base64String == null) { + return null; + } + + StringBuilder standardBase64 = new StringBuilder(base64String.replace('-', '+').replace('_', '/')); + + // Add padding if needed + while (standardBase64.length() % 4 != 0) { + standardBase64.append("="); + } + + return standardBase64.toString(); + } + + /** + * Creates a detached JWT signing input by concatenating header and payload bytes with a period ('.') separator. + * This is used for creating the input to sign for detached JWTs where the payload is not included in the final JWT. + * Uses ByteBuffer for efficient byte array concatenation. + *

+ * Format: base64url(header) + '.' + payload_bytes + * + * @param headerBase64 the Base64URL encoded header string + * @param payloadBytes the payload bytes to be signed + * @return byte array containing header bytes + '.' + payload bytes + */ + public static byte[] createDetachedJwtSigningInput(String headerBase64, byte[] payloadBytes) { + if (headerBase64 == null || payloadBytes == null) { + throw new IllegalArgumentException("Header and payload cannot be null"); + } + + byte[] headerBytes = headerBase64.getBytes(StandardCharsets.UTF_8); + byte periodByte = (byte) '.'; // ASCII 46 + + // Use ByteBuffer for cleaner byte array concatenation + ByteBuffer buffer = ByteBuffer.allocate(headerBytes.length + 1 + payloadBytes.length); + buffer.put(headerBytes); + buffer.put(periodByte); + buffer.put(payloadBytes); + + return buffer.array(); + } +} diff --git a/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java b/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java index 7c0edea16..09f3fbc90 100644 --- a/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java +++ b/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java @@ -9,6 +9,8 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.http.converter.HttpMessageNotReadableException; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; @@ -114,4 +116,16 @@ public ErrorDTO handleHandlerMethodValidationException(HandlerMethodValidationEx .collect(Collectors.joining(", ")); return new ErrorDTO(ErrorConstants.INVALID_REQUEST.getErrorCode(), errorMessage); } + + // Handler method to return 400 for validation failures + @ExceptionHandler(MethodArgumentNotValidException.class) + public ResponseEntity handleValidationException(MethodArgumentNotValidException ex) { + BindingResult br = ex.getBindingResult(); + String message = br.getFieldErrors().stream() + .map(fe -> fe.getField() + " " + fe.getDefaultMessage()) + .collect(Collectors.joining("; ")); + log.warn("Validation failed: {}", message); + ErrorDTO err = new ErrorDTO("invalid_request", message); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(err); + } } diff --git a/src/main/java/io/mosip/mimoto/util/JwtGeneratorUtil.java b/src/main/java/io/mosip/mimoto/util/JwtGeneratorUtil.java index ae75a89fb..a22db6551 100644 --- a/src/main/java/io/mosip/mimoto/util/JwtGeneratorUtil.java +++ b/src/main/java/io/mosip/mimoto/util/JwtGeneratorUtil.java @@ -60,7 +60,7 @@ private static JWTClaimsSet createClaims(String clientId, String audience, Strin } - private static JWK generateJwk(SigningAlgorithm algorithm, KeyPair keyPair) { + public static JWK generateJwk(SigningAlgorithm algorithm, KeyPair keyPair) { PublicKey publicKey = keyPair.getPublic(); PrivateKey privateKey = keyPair.getPrivate(); @@ -99,7 +99,7 @@ private static JWK generateJwk(SigningAlgorithm algorithm, KeyPair keyPair) { }; } - private static JWSSigner createSigner(SigningAlgorithm algorithm, JWK jwk) throws JOSEException { + public static JWSSigner createSigner(SigningAlgorithm algorithm, JWK jwk) throws JOSEException { return switch (algorithm) { case RS256 -> { RSASSASigner signer = new RSASSASigner((RSAKey) jwk); diff --git a/src/main/java/io/mosip/mimoto/util/UrlParameterUtils.java b/src/main/java/io/mosip/mimoto/util/UrlParameterUtils.java new file mode 100644 index 000000000..f4b9b4d80 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/UrlParameterUtils.java @@ -0,0 +1,49 @@ +package io.mosip.mimoto.util; + +import org.apache.http.NameValuePair; +import org.apache.http.client.utils.URLEncodedUtils; + +import java.net.URI; +import java.net.URISyntaxException; +import java.nio.charset.StandardCharsets; +import java.util.Collections; +import java.util.List; + +public class UrlParameterUtils { + + private static final String CLIENT_ID = "client_id"; + + private static final String RESPONSE_URI = "response_uri"; + + /** + * Extracts a query parameter value from a URL using Apache URLEncodedUtils + * + * @param url the URL to parse + * @param parameterName the name of the parameter to extract + * @return the decoded parameter value, or null if not found + */ + private static String extractQueryParameter(String url, String parameterName) throws URISyntaxException { + if (url == null || url.trim().isEmpty()) { + return null; + } + + URI uri = new URI(url); + List params = URLEncodedUtils.parse(uri, StandardCharsets.UTF_8); + + for (NameValuePair param : params) { + if (parameterName.equals(param.getName())) { + return param.getValue(); + } + } + return null; + } + + public static String extractClientIdFromUrl(String url) throws URISyntaxException { + return extractQueryParameter(url, CLIENT_ID); + } + + public static List extractResponseUrisFromUrl(String url) throws URISyntaxException { + String responseUriValue = extractQueryParameter(url, RESPONSE_URI); + return responseUriValue != null ? Collections.singletonList(responseUriValue) : Collections.emptyList(); + } +} diff --git a/src/main/resources/application-default.properties b/src/main/resources/application-default.properties index ce69d3848..3099b37ec 100644 --- a/src/main/resources/application-default.properties +++ b/src/main/resources/application-default.properties @@ -209,6 +209,8 @@ cache.credential-issuer.wellknown.expiry-time-in-min = 60 cache.issuers-config.expiry-time-in-min = 60 # Cache expiry time in minutes for the authentication server's well-known endpoint response. cache.credential-issuer.authserver-wellknown.expiry-time-in-min = 60 +# Cache expiry time in minutes for the pre-registered trusted verifiers list. +cache.pre-registered-trusted-verifiers.expiry-time-in-min=60 # Default cache expiry time in minutes for others cache types cache.default.expiry-time-in-min = 60 diff --git a/src/test/java/io/mosip/mimoto/controller/WalletPresentationsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletPresentationsControllerTest.java new file mode 100644 index 000000000..690330c16 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/controller/WalletPresentationsControllerTest.java @@ -0,0 +1,590 @@ +package io.mosip.mimoto.controller; + +import io.mosip.mimoto.dto.*; +import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.VPNotCreatedException; +import io.mosip.mimoto.service.CredentialMatchingService; +import io.mosip.mimoto.service.PresentationService; +import io.mosip.mimoto.service.PresentationActionService; +import io.mosip.mimoto.service.impl.SessionManager; +import io.mosip.mimoto.util.GlobalExceptionHandler; +import io.mosip.openID4VP.exceptions.OpenID4VPExceptions; +import jakarta.servlet.http.HttpSession; +import lombok.extern.slf4j.Slf4j; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.mockito.MockitoAnnotations; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; + +import java.io.IOException; +import java.util.List; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.patch; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = {WalletPresentationsController.class, GlobalExceptionHandler.class}) +@AutoConfigureMockMvc(addFilters = false) +@EnableWebMvc +@Slf4j +public class WalletPresentationsControllerTest { + + @Autowired + private MockMvc mockMvc; + + @MockBean + private ObjectMapper objectMapper; + + @MockBean + private PresentationService presentationService; + + @Mock + private HttpSession httpSession; + + @MockBean + private SessionManager sessionManager; + + @MockBean + private CredentialMatchingService credentialMatchingService; + + @MockBean + private PresentationActionService presentationActionService; + + private final String walletId = "wallet123"; + private final String walletKey = "encodedKey"; + + private VerifiablePresentationResponseDTO presentationResponseDTO; + + @Before + public void setup() { + MockitoAnnotations.openMocks(this); + VerifiablePresentationVerifierDTO presentationVerifierDTO = new VerifiablePresentationVerifierDTO("mock-client", "verifier123", "https://veriifer-logo.png", false, true, "https://verifier-redirect"); + presentationResponseDTO = new VerifiablePresentationResponseDTO("presentationId-123", presentationVerifierDTO); + + when(httpSession.getAttribute("wallet_id")).thenReturn(walletId); + when(httpSession.getAttribute("wallet_key")).thenReturn(walletKey); + } + + @Test + public void testCreatePresentationSuccess() throws Exception { + String authorizationRequestUrl = "client_id=mock-client&presentation_definition_uri=https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fpresentation_definition_uri&response_type=vp_token&response_mode=direct_post&nonce=NHgLcWlae745DpfJbUyfdg%253D%253D&response_uri=https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fvp-response&state=pcmxBfvdPEcjFObgt%252BLekA%253D%253D"; + VerifiablePresentationAuthorizationRequest authorizationRequest = new VerifiablePresentationAuthorizationRequest(); + authorizationRequest.setAuthorizationRequestUrl(authorizationRequestUrl); + when(presentationService.handleVPAuthorizationRequest(authorizationRequest.getAuthorizationRequestUrl(), walletId)).thenReturn(presentationResponseDTO); + String expectedResponse = new ObjectMapper().writeValueAsString(presentationResponseDTO); + + mockMvc.perform(post("/wallets/{walletId}/presentations", walletId) + .contentType(MediaType.APPLICATION_JSON) + .content(new ObjectMapper().writeValueAsString(authorizationRequest)) + .accept(MediaType.APPLICATION_JSON) + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(result -> { + String actualResponse = result.getResponse().getContentAsString(); + assertEquals(expectedResponse, actualResponse, "The response does not match the expected output"); + }); + } + + @Test + public void shouldThrowExceptionWhenBadAuthorizationRequestIsReceivedFromVerifier() throws Exception { + String authorizationRequestUrl = "presentation_definition_uri=https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fpresentation_definition_uri&response_type=vp_token&response_mode=direct_post&nonce=NHgLcWlae745DpfJbUyfdg%253D%253D&response_uri=https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fvp-response&state=pcmxBfvdPEcjFObgt%252BLekA%253D%253D"; + VerifiablePresentationAuthorizationRequest authorizationRequest = new VerifiablePresentationAuthorizationRequest(); + authorizationRequest.setAuthorizationRequestUrl(authorizationRequestUrl); + when(presentationService.handleVPAuthorizationRequest(authorizationRequest.getAuthorizationRequestUrl(), walletId)).thenThrow(new OpenID4VPExceptions.MissingInput(List.of("client_id"), "client_id request param is Missing", "AuthorizationRequest")); + + mockMvc.perform(post("/wallets/{walletId}/presentations", walletId) + .contentType(MediaType.APPLICATION_JSON) + .content(new ObjectMapper().writeValueAsString(authorizationRequest)) + .accept(MediaType.APPLICATION_JSON) + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errorCode").value("invalid_request")) + .andExpect(jsonPath("$.errorMessage").value("Missing Input: client_id param is required")); + } + + @Test + public void shouldThrowSpecificErrorCodeAndMessageWhenAnyCustomExceptionIsThrown() throws Exception { + String authorizationRequestUrl = "presentation_definition_uri=https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fpresentation_definition_uri&response_type=vp_token&response_mode=direct_post&nonce=NHgLcWlae745DpfJbUyfdg%253D%253D&response_uri=https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fvp-response&state=pcmxBfvdPEcjFObgt%252BLekA%253D%253D"; + VerifiablePresentationAuthorizationRequest authorizationRequest = new VerifiablePresentationAuthorizationRequest(); + authorizationRequest.setAuthorizationRequestUrl(authorizationRequestUrl); + when(presentationService.handleVPAuthorizationRequest(authorizationRequest.getAuthorizationRequestUrl(), walletId)).thenThrow(new ApiNotAccessibleException("Error occurred while fetching trusted verifiers")); + + mockMvc.perform(post("/wallets/{walletId}/presentations", walletId) + .contentType(MediaType.APPLICATION_JSON) + .content(new ObjectMapper().writeValueAsString(authorizationRequest)) + .accept(MediaType.APPLICATION_JSON) + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-026")) + .andExpect(jsonPath("$.errorMessage").value("Error occurred while fetching trusted verifiers")); + } + + @Test + public void shouldThrowWalletCreateExceptionWhenAnyUnexpectedErrorOccurs() throws Exception { + String authorizationRequestUrl = "presentation_definition_uri=https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fpresentation_definition_uri&response_type=vp_token&response_mode=direct_post&nonce=NHgLcWlae745DpfJbUyfdg%253D%253D&response_uri=https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fvp-response&state=pcmxBfvdPEcjFObgt%252BLekA%253D%253D"; + VerifiablePresentationAuthorizationRequest authorizationRequest = new VerifiablePresentationAuthorizationRequest(); + authorizationRequest.setAuthorizationRequestUrl(authorizationRequestUrl); + when(presentationService.handleVPAuthorizationRequest(authorizationRequest.getAuthorizationRequestUrl(), walletId)).thenThrow(new RuntimeException("Error occurred while creating presentation in openid4vp flow")); + + mockMvc.perform(post("/wallets/{walletId}/presentations", walletId) + .contentType(MediaType.APPLICATION_JSON) + .content(new ObjectMapper().writeValueAsString(authorizationRequest)) + .accept(MediaType.APPLICATION_JSON) + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errorCode").value("internal_server_error")) + .andExpect(jsonPath("$.errorMessage").value("We are unable to process request now")); + } + + @Test + public void shouldThrowUnauthorizedWhenWalletKeyIsMissingFromSession() throws Exception { + String presentationId = "presentation123"; + + when(httpSession.getAttribute("wallet_key")).thenReturn(null); + + mockMvc.perform(get("/wallets/{walletId}/presentations/{presentationId}/credentials", walletId, presentationId) + .accept(MediaType.APPLICATION_JSON) + .sessionAttr("wallet_id", walletId)) + .andExpect(status().isUnauthorized()) + .andExpect(jsonPath("$.errorCode").value("unauthorized")) + .andExpect(jsonPath("$.errorMessage").value("You are not authorized to access this resource")); + } + + @Test + public void shouldThrowBadRequestWhenApiNotAccessibleExceptionIsThrown() throws Exception { + String presentationId = "presentation123"; + VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData( + presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null); + + when(sessionManager.getPresentationSessionData(httpSession, walletId, presentationId)).thenReturn(sessionData); + when(credentialMatchingService.getMatchingCredentials(sessionData, walletId, walletKey)) + .thenThrow(new ApiNotAccessibleException("Error occurred while fetching credentials")); + + mockMvc.perform(get("/wallets/{walletId}/presentations/{presentationId}/credentials", walletId, presentationId) + .accept(MediaType.APPLICATION_JSON) + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errorCode").value("internal_server_error")) + .andExpect(jsonPath("$.errorMessage").value("We are unable to process request now")); + } + + @Test + public void shouldThrowInternalServerErrorWhenIOExceptionIsThrown() throws Exception { + String presentationId = "presentation123"; + VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData( + presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null); + + when(sessionManager.getPresentationSessionData(httpSession, walletId, presentationId)).thenReturn(sessionData); + when(credentialMatchingService.getMatchingCredentials(sessionData, walletId, walletKey)) + .thenThrow(new IOException("Error occurred while processing credentials")); + + mockMvc.perform(get("/wallets/{walletId}/presentations/{presentationId}/credentials", walletId, presentationId) + .accept(MediaType.APPLICATION_JSON) + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errorCode").value("internal_server_error")) + .andExpect(jsonPath("$.errorMessage").value("We are unable to process request now")); + } + + @Test + public void shouldThrowInternalServerErrorWhenVPNotCreatedExceptionIsThrown() throws Exception { + String presentationId = "presentation123"; + VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData( + presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null); + + when(sessionManager.getPresentationSessionData(httpSession, walletId, presentationId)).thenReturn(sessionData); + when(credentialMatchingService.getMatchingCredentials(sessionData, walletId, walletKey)) + .thenThrow(new VPNotCreatedException("Error occurred while creating VP")); + + mockMvc.perform(get("/wallets/{walletId}/presentations/{presentationId}/credentials", walletId, presentationId) + .accept(MediaType.APPLICATION_JSON) + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errorCode").value("internal_server_error")) + .andExpect(jsonPath("$.errorMessage").value("We are unable to process request now")); + } + + @Test + public void shouldThrowInternalServerErrorWhenIllegalArgumentExceptionIsThrown() throws Exception { + String presentationId = "presentation123"; + VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData( + presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null); + + when(sessionManager.getPresentationSessionData(httpSession, walletId, presentationId)).thenReturn(sessionData); + when(credentialMatchingService.getMatchingCredentials(sessionData, walletId, walletKey)) + .thenThrow(new IllegalArgumentException("Invalid argument provided")); + + mockMvc.perform(get("/wallets/{walletId}/presentations/{presentationId}/credentials", walletId, presentationId) + .accept(MediaType.APPLICATION_JSON) + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errorCode").value("internal_server_error")) + .andExpect(jsonPath("$.errorMessage").value("We are unable to process request now")); + } + + @Test + public void shouldThrowBadRequestWhenWalletIdInSessionIsNull() throws Exception { + String presentationId = "presentation123"; + + when(httpSession.getAttribute("wallet_id")).thenReturn(null); + + mockMvc.perform(get("/wallets/{walletId}/presentations/{presentationId}/credentials", walletId, presentationId) + .accept(MediaType.APPLICATION_JSON) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errorCode").value("wallet_locked")) + .andExpect(jsonPath("$.errorMessage").value("Wallet is locked")); + } + + @Test + public void shouldThrowBadRequestWhenWalletIdInSessionDoesNotMatchRequest() throws Exception { + String presentationId = "presentation123"; + String differentWalletId = "differentWallet123"; + + when(httpSession.getAttribute("wallet_id")).thenReturn(differentWalletId); + + mockMvc.perform(get("/wallets/{walletId}/presentations/{presentationId}/credentials", walletId, presentationId) + .accept(MediaType.APPLICATION_JSON) + .sessionAttr("wallet_id", differentWalletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errorCode").value("invalid_request")) + .andExpect(jsonPath("$.errorMessage").value("Invalid Wallet ID. Session and request Wallet ID do not match")); + } + + @Test + public void shouldThrowInternalServerErrorWhenSessionDataIsNull() throws Exception { + String presentationId = "presentation123"; + + when(sessionManager.getPresentationSessionData(httpSession, walletId, presentationId)).thenReturn(null); + + mockMvc.perform(get("/wallets/{walletId}/presentations/{presentationId}/credentials", walletId, presentationId) + .accept(MediaType.APPLICATION_JSON) + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errorCode").value("internal_server_error")) + .andExpect(jsonPath("$.errorMessage").value("We are unable to process request now")); + } + + @Test + public void testUserRejectedVerifierSuccess() throws Exception { + String presentationId = "presentation-123"; + + // create a mock session data object (constructor signature may vary, so mock it) + VerifiablePresentationSessionData sessionData = mock(VerifiablePresentationSessionData.class); + + // Mock the SessionManager to return the correct session data + when(sessionManager.getPresentationSessionData(any(HttpSession.class), eq(walletId), eq(presentationId))) + .thenReturn(sessionData); + + // Prepare the expected RejectedVerifierDTO and stub the service to return it + RejectedVerifierDTO expectedRejected = new RejectedVerifierDTO("success", "", "Presentation request rejected. An OpenID4VP error response has been sent to the verifier."); + doReturn(ResponseEntity.ok(expectedRejected)) + .when(presentationActionService).handlePresentationAction( + eq(walletId), eq(presentationId), any(SubmitPresentationRequestDTO.class), eq(sessionData), eq(walletKey)); + + mockMvc.perform(patch("/wallets/{walletId}/presentations/{presentationId}", walletId, presentationId) + .contentType(MediaType.APPLICATION_JSON) + .content("{\"errorCode\":\"access_denied\",\"errorMessage\":\"User denied authorization\"}") + .accept(MediaType.APPLICATION_JSON) + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.status").value("success")) + .andExpect(jsonPath("$.message").value("Presentation request rejected. An OpenID4VP error response has been sent to the verifier.")) + .andExpect(jsonPath("$.redirectUri").value("")); + } + + @Test + public void testUserRejectedVerifierInvalidWalletId() throws Exception { + String presentationId = "presentation-123"; + String invalidWalletId = "invalid-wallet"; + + mockMvc.perform(patch("/wallets/{walletId}/presentations/{presentationId}", invalidWalletId, presentationId) + .contentType(MediaType.APPLICATION_JSON) + .content("{\"errorCode\":\"access_denied\",\"errorMessage\":\"User denied authorization\"}") + .accept(MediaType.APPLICATION_JSON) + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isInternalServerError()); + + verifyNoInteractions(presentationActionService); + } + + // NOTE: Exception handling test removed - PresentationActionService handles exceptions internally + // and returns appropriate ResponseEntity. Test moved to PresentationActionServiceTest. + + @Test + public void testUserRejectedVerifierNullSessionData() throws Exception { + String walletId = "wallet-123"; + String presentationId = "presentation-123"; + ErrorDTO payload = new ErrorDTO("access_denied", "User denied authorization"); + + // Arrange: make session manager return null to simulate missing session data + when(sessionManager.getPresentationSessionData(any(HttpSession.class), eq(walletId), eq(presentationId))) + .thenReturn(null); + + // Serialize payload to ensure MockMvc .content(...) is not null + String content = new com.fasterxml.jackson.databind.ObjectMapper().writeValueAsString(payload); + + mockMvc.perform(patch("/wallets/{walletId}/presentations/{presentationId}", walletId, presentationId) + .contentType(MediaType.APPLICATION_JSON) + .content(content) + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isBadRequest()); + } + + // NOTE: Exception handling test removed - PresentationActionService handles exceptions internally + // and returns appropriate ResponseEntity. Test moved to PresentationActionServiceTest. + + @Test + public void testHandleVPAuthorizationRequestWithURISyntaxException() throws Exception { + String authorizationRequestUrl = "invalid://url with spaces"; + VerifiablePresentationAuthorizationRequest authorizationRequest = new VerifiablePresentationAuthorizationRequest(); + authorizationRequest.setAuthorizationRequestUrl(authorizationRequestUrl); + + when(presentationService.handleVPAuthorizationRequest(authorizationRequestUrl, walletId)) + .thenThrow(new java.net.URISyntaxException("invalid://url with spaces", "Invalid URI")); + + mockMvc.perform(post("/wallets/{walletId}/presentations", walletId) + .contentType(MediaType.APPLICATION_JSON) + .content(new ObjectMapper().writeValueAsString(authorizationRequest)) + .accept(MediaType.APPLICATION_JSON) + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errorCode").value("invalid_request")); + } + + @Test + public void testHandleVPAuthorizationRequestWithVPNotCreatedException() throws Exception { + String authorizationRequestUrl = "client_id=test&response_type=vp_token"; + VerifiablePresentationAuthorizationRequest authorizationRequest = new VerifiablePresentationAuthorizationRequest(); + authorizationRequest.setAuthorizationRequestUrl(authorizationRequestUrl); + + when(presentationService.handleVPAuthorizationRequest(authorizationRequestUrl, walletId)) + .thenThrow(new VPNotCreatedException("Failed to create VP")); + + mockMvc.perform(post("/wallets/{walletId}/presentations", walletId) + .contentType(MediaType.APPLICATION_JSON) + .content(new ObjectMapper().writeValueAsString(authorizationRequest)) + .accept(MediaType.APPLICATION_JSON) + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errorCode").value("invalid_request")); + } + + @Test + public void testGetMatchingCredentialsSuccess() throws Exception { + String presentationId = "presentation-123"; + VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData( + presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null); + + MatchingCredentialsResponseDTO responseDTO = new MatchingCredentialsResponseDTO(); + MatchingCredentialsWithWalletDataDTO matchingCredentials = new MatchingCredentialsWithWalletDataDTO(); + matchingCredentials.setMatchingCredentialsResponse(responseDTO); + matchingCredentials.setMatchingCredentials(java.util.Collections.emptyList()); + + when(sessionManager.getPresentationSessionData(any(HttpSession.class), eq(walletId), eq(presentationId))).thenReturn(sessionData); + when(credentialMatchingService.getMatchingCredentials(sessionData, walletId, walletKey)) + .thenReturn(matchingCredentials); + + mockMvc.perform(get("/wallets/{walletId}/presentations/{presentationId}/credentials", walletId, presentationId) + .accept(MediaType.APPLICATION_JSON) + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isOk()); + + verify(sessionManager).storeMatchingWalletCredentialsInPresentationSessionData( + any(HttpSession.class), eq(walletId), eq(sessionData), anyList()); + } + + @Test + public void testGetMatchingCredentialsWithIllegalArgumentException() throws Exception { + String presentationId = "presentation-123"; + VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData( + presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null); + + when(sessionManager.getPresentationSessionData(any(HttpSession.class), eq(walletId), eq(presentationId))).thenReturn(sessionData); + when(credentialMatchingService.getMatchingCredentials(sessionData, walletId, walletKey)) + .thenThrow(new IllegalArgumentException("Invalid argument")); + + mockMvc.perform(get("/wallets/{walletId}/presentations/{presentationId}/credentials", walletId, presentationId) + .accept(MediaType.APPLICATION_JSON) + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errorCode").exists()); + } + + @Test + public void testGetMatchingCredentialsWithApiNotAccessibleException() throws Exception { + String presentationId = "presentation-123"; + VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData( + presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null); + + when(sessionManager.getPresentationSessionData(any(HttpSession.class), eq(walletId), eq(presentationId))).thenReturn(sessionData); + when(credentialMatchingService.getMatchingCredentials(sessionData, walletId, walletKey)) + .thenThrow(new ApiNotAccessibleException("API not accessible")); + + mockMvc.perform(get("/wallets/{walletId}/presentations/{presentationId}/credentials", walletId, presentationId) + .accept(MediaType.APPLICATION_JSON) + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errorCode").value("RESIDENT-APP-026")); + } + + @Test + public void testGetMatchingCredentialsWithIOException() throws Exception { + String presentationId = "presentation-123"; + VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData( + presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null); + + when(sessionManager.getPresentationSessionData(any(HttpSession.class), eq(walletId), eq(presentationId))).thenReturn(sessionData); + when(credentialMatchingService.getMatchingCredentials(sessionData, walletId, walletKey)) + .thenThrow(new java.io.IOException("IO error")); + + mockMvc.perform(get("/wallets/{walletId}/presentations/{presentationId}/credentials", walletId, presentationId) + .accept(MediaType.APPLICATION_JSON) + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errorCode").value("wallet_vp_creation_failed")); + } + + @Test + public void testGetMatchingCredentialsWithVPNotCreatedException() throws Exception { + String presentationId = "presentation-123"; + VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData( + presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null); + + when(sessionManager.getPresentationSessionData(any(HttpSession.class), eq(walletId), eq(presentationId))).thenReturn(sessionData); + when(credentialMatchingService.getMatchingCredentials(sessionData, walletId, walletKey)) + .thenThrow(new VPNotCreatedException("VP_ERROR", "VP creation failed")); + + mockMvc.perform(get("/wallets/{walletId}/presentations/{presentationId}/credentials", walletId, presentationId) + .accept(MediaType.APPLICATION_JSON) + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errorCode").value("VP_ERROR")); + } + + @Test + public void testHandlePresentationSubmissionSuccess() throws Exception { + String presentationId = "presentation-123"; + VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData( + presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null); + + SubmitPresentationRequestDTO submitRequest = SubmitPresentationRequestDTO.builder() + .selectedCredentials(java.util.Arrays.asList("cred-1", "cred-2")) + .build(); + + SubmitPresentationResponseDTO submitResponse = new SubmitPresentationResponseDTO(); + submitResponse.setStatus("SUCCESS"); + submitResponse.setPresentationId(presentationId); + + when(sessionManager.getPresentationSessionData(any(HttpSession.class), eq(walletId), eq(presentationId))) + .thenReturn(sessionData); + doReturn(ResponseEntity.ok(submitResponse)) + .when(presentationActionService).handlePresentationAction( + eq(walletId), eq(presentationId), any(SubmitPresentationRequestDTO.class), eq(sessionData), eq(walletKey)); + + mockMvc.perform(patch("/wallets/{walletId}/presentations/{presentationId}", walletId, presentationId) + .contentType(MediaType.APPLICATION_JSON) + .content(new ObjectMapper().writeValueAsString(submitRequest)) + .accept(MediaType.APPLICATION_JSON) + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.status").value("SUCCESS")) + .andExpect(jsonPath("$.presentationId").value(presentationId)); + + verify(presentationActionService).handlePresentationAction( + eq(walletId), eq(presentationId), any(SubmitPresentationRequestDTO.class), eq(sessionData), eq(walletKey)); + } + + @Test + public void testHandlePresentationSubmissionMissingWalletKey() throws Exception { + String presentationId = "presentation-123"; + VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData( + presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null); + + SubmitPresentationRequestDTO submitRequest = SubmitPresentationRequestDTO.builder() + .selectedCredentials(java.util.Arrays.asList("cred-1")) + .build(); + + when(httpSession.getAttribute("wallet_key")).thenReturn(null); + when(sessionManager.getPresentationSessionData(any(HttpSession.class), eq(walletId), eq(presentationId))) + .thenReturn(sessionData); + + mockMvc.perform(patch("/wallets/{walletId}/presentations/{presentationId}", walletId, presentationId) + .contentType(MediaType.APPLICATION_JSON) + .content(new ObjectMapper().writeValueAsString(submitRequest)) + .accept(MediaType.APPLICATION_JSON) + .sessionAttr("wallet_id", walletId)) + .andExpect(status().isUnauthorized()) + .andExpect(jsonPath("$.errorCode").value("unauthorized")); + } + + @Test + public void testHandlePresentationActionInvalidRequestFormat() throws Exception { + String presentationId = "presentation-123"; + VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData( + presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null); + + SubmitPresentationRequestDTO invalidRequest = SubmitPresentationRequestDTO.builder() + .build(); + + when(sessionManager.getPresentationSessionData(any(HttpSession.class), eq(walletId), eq(presentationId))) + .thenReturn(sessionData); + + // Mock the service to return BAD_REQUEST for invalid format + ErrorDTO errorResponse = new ErrorDTO("invalid_request", "Request must contain either selectedCredentials or both errorCode and errorMessage"); + doReturn(ResponseEntity.status(HttpStatus.BAD_REQUEST).body(errorResponse)) + .when(presentationActionService).handlePresentationAction( + eq(walletId), eq(presentationId), any(SubmitPresentationRequestDTO.class), eq(sessionData), eq(walletKey)); + + mockMvc.perform(patch("/wallets/{walletId}/presentations/{presentationId}", walletId, presentationId) + .contentType(MediaType.APPLICATION_JSON) + .content(new ObjectMapper().writeValueAsString(invalidRequest)) + .accept(MediaType.APPLICATION_JSON) + .sessionAttr("wallet_id", walletId) + .sessionAttr("wallet_key", walletKey)) + .andExpect(status().isBadRequest()); + } + +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/controller/WalletTrustedVerifiersControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletTrustedVerifiersControllerTest.java new file mode 100644 index 000000000..8730db812 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/controller/WalletTrustedVerifiersControllerTest.java @@ -0,0 +1,251 @@ +package io.mosip.mimoto.controller; + +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.dto.TrustedVerifierRequest; +import io.mosip.mimoto.dto.TrustedVerifierResponseDTO; +import io.mosip.mimoto.exception.InvalidRequestException; +import io.mosip.mimoto.service.TrustedVerifierService; +import io.mosip.mimoto.util.GlobalExceptionHandler; +import io.mosip.mimoto.util.WalletUtil; +import jakarta.servlet.http.HttpSession; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockedStatic; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.dao.DataAccessResourceFailureException; +import org.springframework.http.MediaType; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.mock.web.MockHttpSession; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +import static io.mosip.mimoto.exception.ErrorConstants.DUPLICATE_VERIFIER; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +@ExtendWith(MockitoExtension.class) +public class WalletTrustedVerifiersControllerTest { + + @Mock + private TrustedVerifierService trustedVerifierService; + + @InjectMocks + private WalletTrustedVerifiersController controller; + + private MockMvc mockMvc; + private ObjectMapper objectMapper; + private MockHttpSession session; + + @BeforeEach + void setUp() { + mockMvc = MockMvcBuilders.standaloneSetup(controller) + .setMessageConverters(new MappingJackson2HttpMessageConverter()) + .setControllerAdvice(new GlobalExceptionHandler()) + .build(); + objectMapper = new ObjectMapper(); + session = new MockHttpSession(); + } + + @Test + void testAddTrustedVerifierSuccess() throws Exception { + // Given + String walletId = "test-wallet-id"; + TrustedVerifierRequest request = new TrustedVerifierRequest(); + request.setVerifierId("test-verifier-id"); + + TrustedVerifierResponseDTO response = new TrustedVerifierResponseDTO(); + response.setId("generated-id"); + + try (MockedStatic walletUtilMock = mockStatic(WalletUtil.class)) { + walletUtilMock.when(() -> WalletUtil.validateWalletId(any(HttpSession.class), eq(walletId))) + .thenAnswer(invocation -> null); + + when(trustedVerifierService.addTrustedVerifier(walletId, request)).thenReturn(response); + + // When & Then + mockMvc.perform(post("/wallets/{walletId}/trusted-verifiers", walletId) + .session(session) + .contentType(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(request))) + .andExpect(status().isCreated()) + .andExpect(jsonPath("$.id").value("generated-id")); + + verify(trustedVerifierService).addTrustedVerifier(walletId, request); + } + } + + @Test + void testAddTrustedVerifierMissingVerifierId() throws Exception { + // Given + String walletId = "test-wallet-id"; + TrustedVerifierRequest request = new TrustedVerifierRequest(); + request.setVerifierId(""); + + try (MockedStatic walletUtilMock = mockStatic(WalletUtil.class)) { + walletUtilMock.when(() -> WalletUtil.validateWalletId(any(HttpSession.class), eq(walletId))) + .thenAnswer(invocation -> null); + + // When & Then + mockMvc.perform(post("/wallets/{walletId}/trusted-verifiers", walletId) + .session(session) + .contentType(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(request))) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errorCode").value("invalid_request")); + + verifyNoInteractions(trustedVerifierService); + } + } + + @Test + void testAddTrustedVerifierBlankVerifierId() throws Exception { + // Given + String walletId = "test-wallet-id"; + TrustedVerifierRequest request = new TrustedVerifierRequest(); + request.setVerifierId(" "); + + try (MockedStatic walletUtilMock = mockStatic(WalletUtil.class)) { + walletUtilMock.when(() -> WalletUtil.validateWalletId(any(HttpSession.class), eq(walletId))) + .thenAnswer(invocation -> null); + + // When & Then + mockMvc.perform(post("/wallets/{walletId}/trusted-verifiers", walletId) + .session(session) + .contentType(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(request))) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errorCode").value("invalid_request")); + + verifyNoInteractions(trustedVerifierService); + } + } + + @Test + void testAddTrustedVerifierNullVerifierId() throws Exception { + // Given + String walletId = "test-wallet-id"; + TrustedVerifierRequest request = new TrustedVerifierRequest(); + request.setVerifierId(null); + + try (MockedStatic walletUtilMock = mockStatic(WalletUtil.class)) { + walletUtilMock.when(() -> WalletUtil.validateWalletId(any(HttpSession.class), eq(walletId))) + .thenAnswer(invocation -> null); + + // When & Then + mockMvc.perform(post("/wallets/{walletId}/trusted-verifiers", walletId) + .session(session) + .contentType(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(request))) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errorCode").value("invalid_request")); + + verifyNoInteractions(trustedVerifierService); + } + } + + @Test + void testAddTrustedVerifierDuplicateVerifier() throws Exception { + // Given + String walletId = "test-wallet-id"; + TrustedVerifierRequest request = new TrustedVerifierRequest(); + request.setVerifierId("existing-verifier-id"); + + try (MockedStatic walletUtilMock = mockStatic(WalletUtil.class)) { + walletUtilMock.when(() -> WalletUtil.validateWalletId(any(HttpSession.class), eq(walletId))) + .thenAnswer(invocation -> null); + + when(trustedVerifierService.addTrustedVerifier(walletId, request)) + .thenThrow(new InvalidRequestException(DUPLICATE_VERIFIER.getErrorCode(), DUPLICATE_VERIFIER.getErrorMessage())); + + // When & Then + mockMvc.perform(post("/wallets/{walletId}/trusted-verifiers", walletId) + .session(session) + .contentType(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(request))) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errorCode").exists()); + + verify(trustedVerifierService).addTrustedVerifier(walletId, request); + } + } + + + @Test + void testAddTrustedVerifierWalletValidationFailure() throws Exception { + // Given + String walletId = "invalid-wallet-id"; + TrustedVerifierRequest request = new TrustedVerifierRequest(); + request.setVerifierId("test-verifier-id"); + + try (MockedStatic walletUtilMock = mockStatic(WalletUtil.class)) { + walletUtilMock.when(() -> WalletUtil.validateWalletId(any(HttpSession.class), eq(walletId))) + .thenThrow(new RuntimeException("Invalid wallet ID")); + + // When & Then + mockMvc.perform(post("/wallets/{walletId}/trusted-verifiers", walletId) + .session(session) + .contentType(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(request))) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errorCode").exists()); + + verifyNoInteractions(trustedVerifierService); + } + } + + @Test + void testAddTrustedVerifierServiceException() throws Exception { + // Given + String walletId = "test-wallet-id"; + TrustedVerifierRequest request = new TrustedVerifierRequest(); + request.setVerifierId("test-verifier-id"); + + try (MockedStatic walletUtilMock = mockStatic(WalletUtil.class)) { + walletUtilMock.when(() -> WalletUtil.validateWalletId(any(HttpSession.class), eq(walletId))) + .thenAnswer(invocation -> null); + + when(trustedVerifierService.addTrustedVerifier(walletId, request)) + .thenThrow(new RuntimeException("Database connection failed")); + + // When & Then + mockMvc.perform(post("/wallets/{walletId}/trusted-verifiers", walletId) + .session(session) + .contentType(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(request))) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errorCode").exists()); + + verify(trustedVerifierService).addTrustedVerifier(walletId, request); + } + } + + @Test + void testAddTrustedVerifierServiceDataAccessException() throws Exception { + String walletId = "test-wallet-id"; + TrustedVerifierRequest request = new TrustedVerifierRequest(); + request.setVerifierId("test-verifier-id"); + + try (MockedStatic walletUtilMock = mockStatic(WalletUtil.class)) { + walletUtilMock.when(() -> WalletUtil.validateWalletId(any(HttpSession.class), eq(walletId))) + .thenAnswer(invocation -> null); + + when(trustedVerifierService.addTrustedVerifier(walletId, request)) + .thenThrow(new DataAccessResourceFailureException("DB down")); + + mockMvc.perform(post("/wallets/{walletId}/trusted-verifiers", walletId) + .session(session) + .contentType(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(request))) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.errorCode").exists()); + + verify(trustedVerifierService).addTrustedVerifier(walletId, request); + } + } + +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/CredentialMatchingServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialMatchingServiceTest.java new file mode 100644 index 000000000..4865607c3 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/service/CredentialMatchingServiceTest.java @@ -0,0 +1,1394 @@ +package io.mosip.mimoto.service; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.constant.CredentialFormat; +import io.mosip.mimoto.dto.*; +import io.mosip.mimoto.dto.mimoto.*; +import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.InvalidIssuerIdException; +import io.mosip.mimoto.model.CredentialMetadata; +import io.mosip.mimoto.service.impl.CredentialMatchingServiceImpl; +import io.mosip.mimoto.service.impl.OpenID4VPService; +import io.mosip.mimoto.util.EncryptionDecryptionUtil; +import io.mosip.openID4VP.authorizationRequest.presentationDefinition.*; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; + +import java.time.Instant; +import java.util.*; +import java.util.stream.Collectors; + +import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +@RunWith(MockitoJUnitRunner.class) +public class CredentialMatchingServiceTest { + + @InjectMocks + private CredentialMatchingServiceImpl credentialMatchingService; + + @Mock + private ObjectMapper objectMapper; + + @Mock + private WalletCredentialService walletCredentialService; + + @Mock + private EncryptionDecryptionUtil encryptionDecryptionUtil; + + @Mock + private IssuersService issuersService; + + @Mock + private OpenID4VPService openID4VPService; + + private VerifiablePresentationSessionData sessionData; + private String walletId; + private String base64Key; + private PresentationDefinition presentationDefinition; + private List walletCredentials; + + @Before + public void setUp() throws JsonProcessingException { + walletId = "test-wallet-id"; + base64Key = "test-base64-key"; + + // Setup session data + sessionData = new VerifiablePresentationSessionData(); + + // Setup presentation definition + presentationDefinition = createMockPresentationDefinition(); + + // Setup wallet credentials + walletCredentials = createMockWalletCredentials(); + } + + // @Test + public void testGetMatchingCredentialsSuccess() throws Exception { + // Arrange + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(presentationDefinition); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(createMockWalletCredentialsWithMapData()); + IssuerConfig issuerConfig = createMockIssuerConfig(); + when(issuersService.getIssuerConfig(anyString(), anyString())) + .thenReturn(issuerConfig); + + // Act + MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + .getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertNotNull(result); + assertNotNull(result.getMatchingCredentialsResponse()); + assertNotNull(result.getMatchingCredentials()); + assertFalse(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + + verify(openID4VPService).resolvePresentationDefinition(any(), any(), anyBoolean()); + verify(walletCredentialService).getDecryptedCredentials(eq(walletId), any()); + verify(encryptionDecryptionUtil).decryptCredential(anyString(), eq(base64Key)); + } + + @Test(expected = IllegalArgumentException.class) + public void testGetMatchingCredentialsNullWalletId() throws Exception { + // Arrange + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(presentationDefinition); + + // Act + credentialMatchingService.getMatchingCredentials(sessionData, null, base64Key); + } + + @Test(expected = IllegalArgumentException.class) + public void testGetMatchingCredentialsEmptyWalletId() throws Exception { + // Arrange + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(presentationDefinition); + + // Act + credentialMatchingService.getMatchingCredentials(sessionData, "", base64Key); + } + + @Test(expected = IllegalArgumentException.class) + public void testGetMatchingCredentialsNullBase64Key() throws Exception { + // Arrange + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(presentationDefinition); + + // Act + credentialMatchingService.getMatchingCredentials(sessionData, walletId, null); + } + + @Test(expected = IllegalArgumentException.class) + public void testGetMatchingCredentialsNullPresentationDefinition() throws Exception { + // Arrange + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(null); + + // Act + credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); + } + + @Test(expected = IllegalArgumentException.class) + public void testGetMatchingCredentialsEmptyInputDescriptors() throws Exception { + // Arrange + PresentationDefinition emptyPd = new PresentationDefinition("test", Collections.emptyList(), null, null, null); + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(emptyPd); + + // Act + credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); + } + + @Test(expected = IllegalArgumentException.class) + public void testGetMatchingCredentialsEmptyInputDescriptorId() throws Exception { + // Arrange + Fields field = new Fields(Arrays.asList("$.type"), null, null, null, null, null); + Constraints constraints = new Constraints(Collections.singletonList(field), null); + InputDescriptor descriptor = new InputDescriptor("", null, null, null, constraints); + PresentationDefinition pd = new PresentationDefinition("test", Arrays.asList(descriptor), null, null, null); + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(pd); + + // Act + credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); + } + + @Test(expected = IllegalArgumentException.class) + public void testGetMatchingCredentialsWhitespaceWalletId() throws Exception { + // Arrange + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(presentationDefinition); + + // Act + credentialMatchingService.getMatchingCredentials(sessionData, " ", base64Key); + } + + @Test(expected = IllegalArgumentException.class) + public void testGetMatchingCredentialsWhitespaceBase64Key() throws Exception { + // Arrange + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(presentationDefinition); + + // Act + credentialMatchingService.getMatchingCredentials(sessionData, walletId, " "); + } + + @Test + public void testGetMatchingCredentialsEmptyWalletCredentials() throws Exception { + // Arrange + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(presentationDefinition); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(Collections.emptyList()); + + // Act + MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + .getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertNotNull(result); + assertNotNull(result.getMatchingCredentialsResponse()); + assertTrue(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + assertTrue(result.getMatchingCredentials().isEmpty()); + assertFalse(result.getMatchingCredentialsResponse().getMissingClaims().isEmpty()); + } + + @Test + public void testGetMatchingCredentialsDecryptionFailure() throws Exception { + // Arrange + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(presentationDefinition); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(walletCredentials); + + // Act + MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + .getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertNotNull(result); + assertTrue(result.getMatchingCredentials().isEmpty()); + } + + @Test + public void testGetMatchingCredentialsIssuerConfigNotFound() throws Exception { + // Arrange + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(presentationDefinition); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(walletCredentials); + + + // Act + MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + .getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertNotNull(result); + assertNotNull(result.getMatchingCredentialsResponse()); + // Should still work but with default credential display name + if (!result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()) { + assertEquals("Unknown Credential", + result.getMatchingCredentialsResponse().getAvailableCredentials().get(0).getCredentialTypeDisplayName()); + } + } + + @Test + public void testGetMatchingCredentialsWithConstraints() throws Exception { + // Arrange + PresentationDefinition pdWithConstraints = createMockPresentationDefinitionWithConstraints(); + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(pdWithConstraints); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(createMockWalletCredentialsWithMapData()); + + // Act + MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + .getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertNotNull(result); + assertNotNull(result.getMatchingCredentialsResponse()); + } + + @Test + public void testGetMatchingCredentialsFormatMismatch() throws Exception { + // Arrange + PresentationDefinition pdWithFormat = createMockPresentationDefinitionWithSpecificFormat(); + + // Create credentials with different format (vc+sd-jwt instead of ldp_vc) + List credentialsWithDifferentFormat = createMockWalletCredentialsWithSdJwtFormat(); + + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(pdWithFormat); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(credentialsWithDifferentFormat); + + // Act + MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + .getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertNotNull(result); + // Should not match due to format mismatch + assertTrue(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + } + + @Test + public void testGetMatchingCredentialsFormatMatchingWithProofType() throws Exception { + // Arrange + PresentationDefinition pdWithFormat = createMockPresentationDefinitionWithSpecificFormat(); + + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(pdWithFormat); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(createMockWalletCredentialsWithMatchingFormat()); + when(objectMapper.convertValue(any(), eq(VCCredentialProperties.class))) + .thenReturn(createMockVCCredentialPropertiesWithProof()); + + // Act + MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + .getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertNotNull(result); + assertFalse(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + } + + @Test + public void testGetMatchingCredentialsFormatMatchingWithoutProofType() throws Exception { + // Arrange + PresentationDefinition pdWithoutProofType = createMockPresentationDefinitionWithoutProofType(); + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(pdWithoutProofType); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(createMockWalletCredentialsWithMapData()); + + // Act + MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + .getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertNotNull(result); + assertFalse(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + } + + @Test + public void testGetMatchingCredentialsFormatMatchingWithNullFormat() throws Exception { + // Arrange + PresentationDefinition pdWithNullFormat = createMockPresentationDefinitionWithNullFormat(); + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(pdWithNullFormat); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(createMockWalletCredentialsWithMapData()); + + // Act + MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + .getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertNotNull(result); + assertFalse(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + } + + @Test + public void testGetMatchingCredentialsWithConstraintsMatching() throws Exception { + // Arrange + PresentationDefinition pdWithConstraints = createMockPresentationDefinitionWithConstraints(); + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(pdWithConstraints); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(createMockWalletCredentialsWithSubject()); + + // Act + MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + .getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertNotNull(result); + assertNotNull(result.getMatchingCredentialsResponse()); + } + + @Test + public void testGetMatchingCredentialsWithConstraintsNotMatching() throws Exception { + // Arrange + PresentationDefinition pdWithConstraints = createMockPresentationDefinitionWithConstraints(); + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(pdWithConstraints); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(walletCredentials); // credentials without matching subject + + // Act + MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + .getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertNotNull(result); + assertTrue(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + assertFalse(result.getMatchingCredentialsResponse().getMissingClaims().isEmpty()); + } + + @Test + public void testGetMatchingCredentialsWithNullConstraints() throws Exception { + // Arrange + PresentationDefinition pdWithNullConstraints = createMockPresentationDefinitionWithNullConstraints(); + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(pdWithNullConstraints); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(createMockWalletCredentialsWithMapData()); + + // Act + MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + .getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertNotNull(result); + assertFalse(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + } + + @Test + public void testGetMatchingCredentialsWithEmptyFieldPaths() throws Exception { + // Arrange + PresentationDefinition pdWithEmptyPaths = createMockPresentationDefinitionWithEmptyPaths(); + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(pdWithEmptyPaths); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(createMockWalletCredentialsWithMapData()); + + // Act + MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + .getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertNotNull(result); + assertFalse(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + } + + @Test + public void testGetMatchingCredentialsWithFilterMatching() throws Exception { + // Arrange + // Use a simpler presentation definition that doesn't require complex filter matching + PresentationDefinition pd = createMockPresentationDefinition(); + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(pd); + + // Create credentials with proper structure for basic matching + List credentials = createMockWalletCredentialsWithMapData(); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(credentials); + + // Mock issuer service to return a valid config + IssuerConfig mockIssuerConfig = createMockIssuerConfig(); + when(issuersService.getIssuerConfig(eq("test-issuer-id"), eq("TestCredential"))) + .thenReturn(mockIssuerConfig); + + // Act + MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + .getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertNotNull(result); + assertNotNull(result.getMatchingCredentialsResponse()); + + // This test verifies that basic credential matching works + // The credentials should match because they have the required $.type field + assertFalse("Basic credential matching failed - credentials should match the presentation definition", + result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + } + + @Test + public void testGetMatchingCredentialsWithFilterMatchingAdvanced() throws Exception { + // Arrange + // Create a presentation definition WITHOUT filters to test basic credential matching + // This will help isolate whether the issue is in filter matching or basic matching + Fields field = new Fields(Arrays.asList("$.name"), null, null, null, null, null); + Constraints constraints = new Constraints(Collections.singletonList(field), null); + InputDescriptor descriptor = new InputDescriptor("test-descriptor", null, null, null, constraints); + PresentationDefinition pdWithoutFilter = new PresentationDefinition("test-presentation-definition", Arrays.asList(descriptor), null, null, null); + + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(pdWithoutFilter); + + // Create credentials with a flatter structure for easier path matching + List credentials = createMockWalletCredentialsWithSimpleFilterData(); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(credentials); + + // Mock issuer service to return a valid config + IssuerConfig mockIssuerConfig = createMockIssuerConfig(); + when(issuersService.getIssuerConfig(eq("test-issuer-id"), eq("TestCredential"))) + .thenReturn(mockIssuerConfig); + + // Act + MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + .getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertNotNull(result); + assertNotNull(result.getMatchingCredentialsResponse()); + + // This test verifies that basic credential matching works without filters + // If it fails, the issue is in the basic credential matching logic + // If it passes, the issue is specifically in the filter matching logic + assertFalse("Basic credential matching without filters failed - this indicates a fundamental issue with credential matching", + result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + } + + @Test + public void testGetMatchingCredentialsWithFilterNotMatching() throws Exception { + // Arrange + PresentationDefinition pdWithFilter = createMockPresentationDefinitionWithFilter(); + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(pdWithFilter); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(walletCredentials); + + // Act + MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + .getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertNotNull(result); + assertTrue(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + } + + @Test + public void testGetMatchingCredentialsWithNullFilter() throws Exception { + // Arrange + PresentationDefinition pdWithNullFilter = createMockPresentationDefinitionWithNullFilter(); + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(pdWithNullFilter); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(createMockWalletCredentialsWithMapData()); + + // Act + MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + .getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertNotNull(result); + assertFalse(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + } + + @Test + public void testGetMatchingCredentialsWithJsonPathErrors() throws Exception { + // Arrange + PresentationDefinition pdWithInvalidPath = createMockPresentationDefinitionWithInvalidPath(); + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(pdWithInvalidPath); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(walletCredentials); + + // Act + MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + .getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertNotNull(result); + assertTrue(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + } + + @Test + public void testGetMatchingCredentialsWithSdJwtFormat() throws Exception { + // Arrange + PresentationDefinition pd = createMockPresentationDefinition(); + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(pd); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(createMockWalletCredentialsWithSdJwtFormat()); + + + // Act + MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + .getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertNotNull(result); + // For VC+SD-JWT format, the static extractJwtPayloadFromSdJwt method may not work in unit tests + // So we verify that the result is not null and the missing claims are properly handled + assertNotNull(result.getMatchingCredentialsResponse()); + } + + @Test + public void testGetMatchingCredentialsWithDcSdJwtFormat() throws Exception { + // Arrange + PresentationDefinition pd = createMockPresentationDefinition(); + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(pd); + + List dcSdJwtCredentials = createMockWalletCredentialsWithDcSdJwtFormat(); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(dcSdJwtCredentials); + + + // Act + MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + .getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertNotNull(result); + // For DC+SD-JWT format, the static extractJwtPayloadFromSdJwt method may not work in unit tests + // So we verify that the result is not null and the missing claims are properly handled + assertNotNull(result.getMatchingCredentialsResponse()); + } + + @Test + public void testGetMatchingCredentialsWithIssuerConfigException() throws Exception { + // Arrange + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(presentationDefinition); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(createMockWalletCredentialsWithMapData()); + when(issuersService.getIssuerConfig(anyString(), anyString())) + .thenThrow(new InvalidIssuerIdException()); + + // Act + MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + .getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertNotNull(result); + assertFalse(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + assertEquals("Unknown Credential", + result.getMatchingCredentialsResponse().getAvailableCredentials().get(0).getCredentialTypeDisplayName()); + } + + @Test + public void testGetMatchingCredentialsWithApiNotAccessibleException() throws Exception { + // Arrange + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(presentationDefinition); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(createMockWalletCredentialsWithMapData()); + when(issuersService.getIssuerConfig(anyString(), anyString())) + .thenThrow(new ApiNotAccessibleException()); + + // Act + MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + .getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertNotNull(result); + assertFalse(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + assertEquals("Unknown Credential", + result.getMatchingCredentialsResponse().getAvailableCredentials().get(0).getCredentialTypeDisplayName()); + } + + @Test + public void testGetMatchingCredentialsWithMultipleDescriptors() throws Exception { + // Arrange + PresentationDefinition pdWithMultipleDescriptors = createMockPresentationDefinitionWithMultipleDescriptors(); + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(pdWithMultipleDescriptors); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(createMockWalletCredentialsWithMultipleCredentials()); + + // Act + MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + .getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertNotNull(result); + assertFalse(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + // Should deduplicate credentials by ID + Set credentialIds = result.getMatchingCredentialsResponse().getAvailableCredentials() + .stream().map(SelectableCredentialDTO::getCredentialId).collect(Collectors.toSet()); + assertEquals(2, credentialIds.size()); // Should have 2 unique credentials + } + + // Helper methods to create mock objects + + private PresentationDefinition createMockPresentationDefinition() { + + Fields field = new Fields(Arrays.asList("$.type"), null, null, null, null, null); + Constraints constraints = new Constraints(Collections.singletonList(field), null); + InputDescriptor descriptor = new InputDescriptor("test-descriptor", null, null, null, constraints); + PresentationDefinition pd = new PresentationDefinition("test-presentation-definition", Arrays.asList(descriptor), null, null, null); + return pd; + } + + private PresentationDefinition createMockPresentationDefinitionWithConstraints() { + // Field 1: simple path + Fields field1 = new Fields(Arrays.asList("$.type"), null, null, null, null, null); + + // Field 2: with path and filter + Filter filter = new Filter("type", "String"); + Fields field2 = new Fields(Arrays.asList("$.credentialSubject.name"), null, null, null, filter, null); + + // Constraints with both fields + Constraints constraints = new Constraints(Arrays.asList(field1, field2), null); + + // Input Descriptor with constraints + InputDescriptor descriptor = new InputDescriptor("test-descriptor-with-constraints", null, null, null, constraints); + + // Presentation Definition with descriptor + PresentationDefinition pd = new PresentationDefinition("test-presentation-definition-with-constraints", Arrays.asList(descriptor), null, null, null); + + return pd; + } + + + private PresentationDefinition createMockPresentationDefinitionWithSpecificFormat() { + Map>> format = new HashMap<>(); + Map> ldpVcFormat = new HashMap<>(); + ldpVcFormat.put("proof_type", Arrays.asList("Ed25519Signature2020")); + format.put("ldp_vc", ldpVcFormat); + Fields field = new Fields(Arrays.asList("$.type"), null, null, null, null, null); + Constraints constraints = new Constraints(Collections.singletonList(field), null); + InputDescriptor descriptor = new InputDescriptor("test-descriptor", null, null, format, constraints); + PresentationDefinition pd = new PresentationDefinition("test-presentation-definition", Arrays.asList(descriptor), null, null, null); + return pd; + } + + private List createMockWalletCredentials() throws JsonProcessingException { + DecryptedCredentialDTO credential = new DecryptedCredentialDTO(); + credential.setId("test-credential-id"); + credential.setWalletId(walletId); + + VCCredentialProperties properties = new VCCredentialProperties(); + properties.setType(Arrays.asList("VerifiableCredential", "TestCredential")); + VCCredentialResponse response = VCCredentialResponse.builder() + .format("ldp_vc") + .credential(properties) + .build(); + + credential.setCredential(response); + + CredentialMetadata metadata = new CredentialMetadata(); + metadata.setIssuerId("test-issuer-id"); + metadata.setCredentialType("TestCredential"); + credential.setCredentialMetadata(metadata); + + credential.setCreatedAt(Instant.now()); + credential.setUpdatedAt(Instant.now()); + + return Arrays.asList(credential); + } + + private VCCredentialResponse createMockVCCredentialResponse() { + VCCredentialResponse response = new VCCredentialResponse(); + response.setFormat(CredentialFormat.LDP_VC.getFormat()); + + Map credentialData = new HashMap<>(); + credentialData.put("type", Arrays.asList("VerifiableCredential", "TestCredential")); + credentialData.put("credentialSubject", createMockCredentialSubject()); + + response.setCredential(credentialData); + return response; + } + + private VCCredentialResponse createMockVCCredentialResponseWithSubject() { + VCCredentialResponse response = createMockVCCredentialResponse(); + @SuppressWarnings("unchecked") + Map credentialData = (Map) response.getCredential(); + Map subject = new HashMap<>(); + subject.put("name", "John Doe"); + credentialData.put("credentialSubject", subject); + return response; + } + + + private Map createMockCredentialSubject() { + Map subject = new HashMap<>(); + subject.put("id", "did:example:123456789"); + subject.put("name", "Test Subject"); + return subject; + } + + private Map createMockCredentialMap() { + Map credentialMap = new HashMap<>(); + credentialMap.put("type", Arrays.asList("VerifiableCredential", "TestCredential")); + credentialMap.put("credentialSubject", createMockCredentialSubject()); + return credentialMap; + } + + private IssuerConfig createMockIssuerConfig() { + IssuerDTO issuerDTO = new IssuerDTO(); + DisplayDTO display = new DisplayDTO(); + display.setName("Test Issuer"); + LogoDTO logoDTO = new LogoDTO(); + logoDTO.setUrl("dsds"); + display.setLogo(logoDTO); + issuerDTO.setDisplay(Collections.singletonList(display)); + CredentialsSupportedResponse credentialsSupportedResponse = new CredentialsSupportedResponse(); + CredentialSupportedDisplayResponse credentialSupportedDisplayResponse = new CredentialSupportedDisplayResponse(); + credentialSupportedDisplayResponse.setName("test"); + credentialSupportedDisplayResponse.setLogo(logoDTO); + credentialsSupportedResponse.setDisplay(Collections.singletonList(credentialSupportedDisplayResponse)); + IssuerConfig config = new IssuerConfig(issuerDTO, new CredentialIssuerWellKnownResponse(), credentialsSupportedResponse); + return config; + } + + private PresentationDefinition createMockPresentationDefinitionWithoutProofType() { + Map>> format = new HashMap<>(); + Map> ldpVcFormat = new HashMap<>(); + format.put("ldp_vc", ldpVcFormat); + Fields field = new Fields(Arrays.asList("$.type"), null, null, null, null, null); + Constraints constraints = new Constraints(Collections.singletonList(field), null); + InputDescriptor descriptor = new InputDescriptor("test-descriptor", null, null, format, constraints); + return new PresentationDefinition("test-presentation-definition", Arrays.asList(descriptor), null, null, null); + } + + private PresentationDefinition createMockPresentationDefinitionWithNullFormat() { + Fields field = new Fields(Arrays.asList("$.type"), null, null, null, null, null); + Constraints constraints = new Constraints(Collections.singletonList(field), null); + InputDescriptor descriptor = new InputDescriptor("test-descriptor", null, null, null, constraints); + return new PresentationDefinition("test-presentation-definition", Arrays.asList(descriptor), null, null, null); + } + + private PresentationDefinition createMockPresentationDefinitionWithNullConstraints() { + // Create constraints with null fields (not null constraints object) + Constraints constraints = new Constraints(null, null); + InputDescriptor descriptor = new InputDescriptor("test-descriptor", null, null, null, constraints); + return new PresentationDefinition("test-presentation-definition", Arrays.asList(descriptor), null, null, null); + } + + private PresentationDefinition createMockPresentationDefinitionWithEmptyPaths() { + Fields field = new Fields(Collections.emptyList(), null, null, null, null, null); + Constraints constraints = new Constraints(Collections.singletonList(field), null); + InputDescriptor descriptor = new InputDescriptor("test-descriptor", null, null, null, constraints); + return new PresentationDefinition("test-presentation-definition", Arrays.asList(descriptor), null, null, null); + } + + private PresentationDefinition createMockPresentationDefinitionWithFilter() { + Filter filter = new Filter("John", "String"); + Fields field = new Fields(Arrays.asList("$.credentialSubject.name"), null, null, null, filter, null); + Constraints constraints = new Constraints(Collections.singletonList(field), null); + InputDescriptor descriptor = new InputDescriptor("test-descriptor", null, null, null, constraints); + return new PresentationDefinition("test-presentation-definition", Arrays.asList(descriptor), null, null, null); + } + + private PresentationDefinition createMockPresentationDefinitionWithNullFilter() { + Fields field = new Fields(Arrays.asList("$.credentialSubject.name"), null, null, null, null, null); + Constraints constraints = new Constraints(Collections.singletonList(field), null); + InputDescriptor descriptor = new InputDescriptor("test-descriptor", null, null, null, constraints); + return new PresentationDefinition("test-presentation-definition", Arrays.asList(descriptor), null, null, null); + } + + private PresentationDefinition createMockPresentationDefinitionWithInvalidPath() { + Fields field = new Fields(Arrays.asList("$.invalid.path"), null, null, null, null, null); + Constraints constraints = new Constraints(Collections.singletonList(field), null); + InputDescriptor descriptor = new InputDescriptor("test-descriptor", null, null, null, constraints); + return new PresentationDefinition("test-presentation-definition", Arrays.asList(descriptor), null, null, null); + } + + private PresentationDefinition createMockPresentationDefinitionWithMultipleDescriptors() { + Fields field1 = new Fields(Arrays.asList("$.type"), null, null, null, null, null); + Constraints constraints1 = new Constraints(Collections.singletonList(field1), null); + InputDescriptor descriptor1 = new InputDescriptor("test-descriptor-1", null, null, null, constraints1); + + Fields field2 = new Fields(Arrays.asList("$.credentialSubject.id"), null, null, null, null, null); + Constraints constraints2 = new Constraints(Collections.singletonList(field2), null); + InputDescriptor descriptor2 = new InputDescriptor("test-descriptor-2", null, null, null, constraints2); + + return new PresentationDefinition("test-presentation-definition", Arrays.asList(descriptor1, descriptor2), null, null, null); + } + + private List createMockWalletCredentialsWithMatchingFormat() throws JsonProcessingException { + DecryptedCredentialDTO credential = new DecryptedCredentialDTO(); + credential.setId("test-credential-id"); + credential.setWalletId(walletId); + + VCCredentialResponse response = VCCredentialResponse.builder() + .format("ldp_vc") + .credential(createMockCredentialMap()) + .build(); + + credential.setCredential(response); + + CredentialMetadata metadata = new CredentialMetadata(); + metadata.setIssuerId("test-issuer-id"); + metadata.setCredentialType("TestCredential"); + credential.setCredentialMetadata(metadata); + credential.setCreatedAt(Instant.now()); + credential.setUpdatedAt(Instant.now()); + + return Arrays.asList(credential); + } + + private List createMockWalletCredentialsWithSubject() throws JsonProcessingException { + DecryptedCredentialDTO credential = new DecryptedCredentialDTO(); + credential.setId("test-credential-id"); + credential.setWalletId(walletId); + + VCCredentialResponse response = createMockVCCredentialResponseWithSubject(); + credential.setCredential(response); + + CredentialMetadata metadata = new CredentialMetadata(); + metadata.setIssuerId("test-issuer-id"); + metadata.setCredentialType("TestCredential"); + credential.setCredentialMetadata(metadata); + credential.setCreatedAt(Instant.now()); + credential.setUpdatedAt(Instant.now()); + + return Arrays.asList(credential); + } + + private List createMockWalletCredentialsWithSdJwtFormat() throws JsonProcessingException { + DecryptedCredentialDTO credential = new DecryptedCredentialDTO(); + credential.setId("test-credential-id"); + credential.setWalletId(walletId); + + VCCredentialResponse response = VCCredentialResponse.builder() + .format(CredentialFormat.VC_SD_JWT.getFormat()) + .credential("eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2V4YW1wbGUuY29tIiwic3ViIjoiZGlkOmV4YW1wbGU6MTIzNDU2Nzg5IiwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIlRlc3RDcmVkZW50aWFsIl19.signature") + .build(); + + credential.setCredential(response); + + CredentialMetadata metadata = new CredentialMetadata(); + metadata.setIssuerId("test-issuer-id"); + metadata.setCredentialType("TestCredential"); + credential.setCredentialMetadata(metadata); + credential.setCreatedAt(Instant.now()); + credential.setUpdatedAt(Instant.now()); + + return Arrays.asList(credential); + } + + private List createMockWalletCredentialsWithDcSdJwtFormat() throws JsonProcessingException { + DecryptedCredentialDTO credential = new DecryptedCredentialDTO(); + credential.setId("test-credential-id"); + credential.setWalletId(walletId); + + // Create credential data with type that matches the presentation definition + Map credentialData = new HashMap<>(); + credentialData.put("iss", "https://example.com"); + credentialData.put("sub", "did:example:123456789"); + credentialData.put("type", Arrays.asList("DataCredential", "TestCredential")); + + VCCredentialResponse response = VCCredentialResponse.builder() + .format(CredentialFormat.DC_SD_JWT.getFormat()) + .credential(credentialData) + .build(); + + credential.setCredential(response); + + CredentialMetadata metadata = new CredentialMetadata(); + metadata.setIssuerId("test-issuer-id"); + metadata.setCredentialType("TestCredential"); + credential.setCredentialMetadata(metadata); + credential.setCreatedAt(Instant.now()); + credential.setUpdatedAt(Instant.now()); + + return Arrays.asList(credential); + } + + private List createMockWalletCredentialsWithMultipleCredentials() throws JsonProcessingException { + DecryptedCredentialDTO credential1 = new DecryptedCredentialDTO(); + credential1.setId("test-credential-id-1"); + credential1.setWalletId(walletId); + credential1.setCredential(createMockVCCredentialResponse()); + CredentialMetadata metadata1 = new CredentialMetadata(); + metadata1.setIssuerId("test-issuer-id-1"); + metadata1.setCredentialType("TestCredential1"); + credential1.setCredentialMetadata(metadata1); + credential1.setCreatedAt(Instant.now()); + credential1.setUpdatedAt(Instant.now()); + + DecryptedCredentialDTO credential2 = new DecryptedCredentialDTO(); + credential2.setId("test-credential-id-2"); + credential2.setWalletId(walletId); + credential2.setCredential(createMockVCCredentialResponseWithSubject()); + CredentialMetadata metadata2 = new CredentialMetadata(); + metadata2.setIssuerId("test-issuer-id-2"); + metadata2.setCredentialType("TestCredential2"); + credential2.setCredentialMetadata(metadata2); + credential2.setCreatedAt(Instant.now()); + credential2.setUpdatedAt(Instant.now()); + + return Arrays.asList(credential1, credential2); + } + + + private VCCredentialProperties createMockVCCredentialPropertiesWithProof() { + VCCredentialProperties properties = new VCCredentialProperties(); + properties.setType(Arrays.asList("VerifiableCredential", "TestCredential")); + + // Create a mock proof object + VCCredentialResponseProof proof = new VCCredentialResponseProof(); + proof.setType("Ed25519Signature2020"); + properties.setProof(proof); + + return properties; + } + + private List createMockWalletCredentialsWithMapData() throws JsonProcessingException { + DecryptedCredentialDTO credential = new DecryptedCredentialDTO(); + credential.setId("test-credential-id"); + credential.setWalletId(walletId); + + // Create credential data as Map (which is what the implementation expects for ldp_vc format) + Map credentialData = new HashMap<>(); + credentialData.put("type", Arrays.asList("VerifiableCredential", "TestCredential")); + + // Create credentialSubject with name that contains "John" (filter pattern) + Map subject = new HashMap<>(); + subject.put("id", "did:example:123456789"); + subject.put("name", "John Doe"); // This should match filter looking for "John" + credentialData.put("credentialSubject", subject); + + VCCredentialResponse response = VCCredentialResponse.builder() + .format("ldp_vc") + .credential(credentialData) + .build(); + + credential.setCredential(response); + + CredentialMetadata metadata = new CredentialMetadata(); + metadata.setIssuerId("test-issuer-id"); + metadata.setCredentialType("TestCredential"); + credential.setCredentialMetadata(metadata); + credential.setCreatedAt(Instant.now()); + credential.setUpdatedAt(Instant.now()); + + return Arrays.asList(credential); + } + + private List createMockWalletCredentialsWithSimpleFilterData() throws JsonProcessingException { + DecryptedCredentialDTO credential = new DecryptedCredentialDTO(); + credential.setId("test-credential-id"); + credential.setWalletId(walletId); + + // Create credential data with a flatter structure for easier path matching + Map credentialData = new HashMap<>(); + credentialData.put("type", Arrays.asList("VerifiableCredential", "TestCredential")); + credentialData.put("name", "John Doe"); // Direct field for $.name path + credentialData.put("id", "did:example:123456789"); + + VCCredentialResponse response = VCCredentialResponse.builder() + .format("ldp_vc") + .credential(credentialData) + .build(); + + credential.setCredential(response); + + CredentialMetadata metadata = new CredentialMetadata(); + metadata.setIssuerId("test-issuer-id"); + metadata.setCredentialType("TestCredential"); + credential.setCredentialMetadata(metadata); + credential.setCreatedAt(Instant.now()); + credential.setUpdatedAt(Instant.now()); + + return Arrays.asList(credential); + } + + // Test cases for evaluateJsonPath method through integration testing + @Test + public void testJsonPathEvaluationTypePathWithSampleData() throws Exception { + // Arrange - Using the exact sample data provided + Map credentialData = new HashMap<>(); + credentialData.put("id", "did:rcw:2121a1df-29fe-496e-ae24-219dcOb3ac49"); + credentialData.put("type", Arrays.asList("VerifiableCredential", "LifeInsuranceCredential")); + + // Create presentation definition that requires the type field + Fields field = new Fields(Arrays.asList("$.type"), null, null, null, null, null); + Constraints constraints = new Constraints(Collections.singletonList(field), null); + InputDescriptor descriptor = new InputDescriptor("test-descriptor", null, null, null, constraints); + PresentationDefinition pd = new PresentationDefinition("test-presentation-definition", Arrays.asList(descriptor), null, null, null); + + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(pd); + + // Create credentials with the sample data + List credentials = createMockWalletCredentialsWithSampleData(credentialData); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(credentials); + + // Mock issuer service + IssuerConfig mockIssuerConfig = createMockIssuerConfig(); + when(issuersService.getIssuerConfig(eq("test-issuer-id"), eq("TestCredential"))) + .thenReturn(mockIssuerConfig); + + // Act + MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + .getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert - This tests that the JSON path evaluation works correctly + assertNotNull(result); + assertNotNull(result.getMatchingCredentialsResponse()); + assertFalse("JSON path evaluation failed - credentials should match the type field", + result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + } + + @Test + public void testJsonPathEvaluationNestedPath() throws Exception { + // Arrange - Test nested path evaluation + Map credentialData = new HashMap<>(); + Map credentialSubject = new HashMap<>(); + credentialSubject.put("name", "John Doe"); + credentialSubject.put("age", 30); + credentialData.put("credentialSubject", credentialSubject); + credentialData.put("type", Arrays.asList("VerifiableCredential", "IdentityCredential")); + + // Create presentation definition that requires nested field + Fields field = new Fields(Arrays.asList("$.credentialSubject.name"), null, null, null, null, null); + Constraints constraints = new Constraints(Collections.singletonList(field), null); + InputDescriptor descriptor = new InputDescriptor("test-descriptor", null, null, null, constraints); + PresentationDefinition pd = new PresentationDefinition("test-presentation-definition", Arrays.asList(descriptor), null, null, null); + + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(pd); + + List credentials = createMockWalletCredentialsWithSampleData(credentialData); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(credentials); + + IssuerConfig mockIssuerConfig = createMockIssuerConfig(); + when(issuersService.getIssuerConfig(eq("test-issuer-id"), eq("TestCredential"))) + .thenReturn(mockIssuerConfig); + + // Act + MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + .getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertNotNull(result); + assertNotNull(result.getMatchingCredentialsResponse()); + assertFalse("Nested JSON path evaluation failed", + result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + } + + @Test + public void testJsonPathEvaluationNonExistentPath() throws Exception { + // Arrange - Test non-existent path handling + Map credentialData = new HashMap<>(); + credentialData.put("id", "did:rcw:2121a1df-29fe-496e-ae24-219dcOb3ac49"); + credentialData.put("type", Arrays.asList("VerifiableCredential", "TestCredential")); + + // Create presentation definition that requires non-existent field + Fields field = new Fields(Arrays.asList("$.nonExistentField"), null, null, null, null, null); + Constraints constraints = new Constraints(Collections.singletonList(field), null); + InputDescriptor descriptor = new InputDescriptor("test-descriptor", null, null, null, constraints); + PresentationDefinition pd = new PresentationDefinition("test-presentation-definition", Arrays.asList(descriptor), null, null, null); + + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(pd); + + List credentials = createMockWalletCredentialsWithSampleData(credentialData); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(credentials); + + + // Act + MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + .getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert - Should not match due to non-existent path + assertNotNull(result); + assertNotNull(result.getMatchingCredentialsResponse()); + assertTrue("Non-existent path should result in no matches", + result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + } + + @Test + public void testJsonPathEvaluationComplexNestedStructure() throws Exception { + // Arrange - Test complex nested structure + Map credentialData = new HashMap<>(); + Map credentialSubject = new HashMap<>(); + Map address = new HashMap<>(); + address.put("street", "123 Main St"); + address.put("city", "New York"); + credentialSubject.put("address", address); + credentialSubject.put("name", "John Doe"); + credentialData.put("credentialSubject", credentialSubject); + credentialData.put("type", Arrays.asList("VerifiableCredential", "IdentityCredential")); + + // Create presentation definition that requires deeply nested field + Fields field = new Fields(Arrays.asList("$.credentialSubject.address.city"), null, null, null, null, null); + Constraints constraints = new Constraints(Collections.singletonList(field), null); + InputDescriptor descriptor = new InputDescriptor("test-descriptor", null, null, null, constraints); + PresentationDefinition pd = new PresentationDefinition("test-presentation-definition", Arrays.asList(descriptor), null, null, null); + + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(pd); + + List credentials = createMockWalletCredentialsWithSampleData(credentialData); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(credentials); + + IssuerConfig mockIssuerConfig = createMockIssuerConfig(); + when(issuersService.getIssuerConfig(eq("test-issuer-id"), eq("TestCredential"))) + .thenReturn(mockIssuerConfig); + + // Act + MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + .getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertNotNull(result); + assertNotNull(result.getMatchingCredentialsResponse()); + assertFalse("Complex nested JSON path evaluation failed", + result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + } + + @Test + public void testJsonPathEvaluationListIndexPath() throws Exception { + // Arrange - Test list index path evaluation + Map credentialData = new HashMap<>(); + credentialData.put("items", Arrays.asList("item1", "item2", "item3")); + credentialData.put("type", Arrays.asList("VerifiableCredential", "TestCredential")); + + // Create presentation definition that requires list index + Fields field = new Fields(Arrays.asList("$.items.1"), null, null, null, null, null); + Constraints constraints = new Constraints(Collections.singletonList(field), null); + InputDescriptor descriptor = new InputDescriptor("test-descriptor", null, null, null, constraints); + PresentationDefinition pd = new PresentationDefinition("test-presentation-definition", Arrays.asList(descriptor), null, null, null); + + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(pd); + + List credentials = createMockWalletCredentialsWithSampleData(credentialData); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(credentials); + + IssuerConfig mockIssuerConfig = createMockIssuerConfig(); + when(issuersService.getIssuerConfig(eq("test-issuer-id"), eq("TestCredential"))) + .thenReturn(mockIssuerConfig); + + // Act + MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + .getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertNotNull(result); + assertNotNull(result.getMatchingCredentialsResponse()); + assertFalse("List index JSON path evaluation failed", + result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + } + + // Helper method to create credentials with custom data + private List createMockWalletCredentialsWithSampleData(Map credentialData) throws JsonProcessingException { + DecryptedCredentialDTO credential = new DecryptedCredentialDTO(); + credential.setId("test-credential-id"); + credential.setWalletId(walletId); + + VCCredentialResponse response = VCCredentialResponse.builder() + .format("ldp_vc") + .credential(credentialData) + .build(); + + credential.setCredential(response); + + CredentialMetadata metadata = new CredentialMetadata(); + metadata.setIssuerId("test-issuer-id"); + metadata.setCredentialType("TestCredential"); + credential.setCredentialMetadata(metadata); + credential.setCreatedAt(Instant.now()); + credential.setUpdatedAt(Instant.now()); + + return Arrays.asList(credential); + } + + // Test cases for null checks and input validation + @Test + public void testGetMatchingCredentialsNullPresentationDefinitionFromService() throws Exception { + // Arrange + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(null); + + // Act & Assert + IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> { + credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); + }); + + assertEquals("Presentation definition not found in session data", exception.getMessage()); + } + + + @Test + public void testMatchesConstraintsNullFields() throws Exception { + // Arrange + PresentationDefinition pd = createMockPresentationDefinition(); + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(pd); + + // Create credentials with null fields in constraints + List credentials = createMockWalletCredentialsWithMapData(); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(credentials); + + // Create presentation definition with null fields + Constraints constraints = new Constraints(null, null); + InputDescriptor descriptor = new InputDescriptor("test-descriptor", null, null, null, constraints); + PresentationDefinition pdWithNullFields = new PresentationDefinition("test-pd", Arrays.asList(descriptor), null, null, null); + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(pdWithNullFields); + + // Act + MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + .getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert - Should handle null fields gracefully + assertNotNull(result); + assertNotNull(result.getMatchingCredentialsResponse()); + } + + @Test + public void testMatchesFormatNullDescriptorFormat() throws Exception { + // Arrange + // Create input descriptor with null format but valid constraints + Constraints constraints = new Constraints(null, null); + InputDescriptor descriptor = new InputDescriptor("test-descriptor", null, null, null, constraints); + PresentationDefinition pd = new PresentationDefinition("test-pd", Arrays.asList(descriptor), null, null, null); + + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(pd); + + List credentials = createMockWalletCredentialsWithMapData(); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(credentials); + + // Act + MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + .getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert - Should handle null format gracefully + assertNotNull(result); + assertNotNull(result.getMatchingCredentialsResponse()); + } + + @Test + public void testMatchesFieldPathNullMatches() throws Exception { + // Arrange + PresentationDefinition pd = createMockPresentationDefinition(); + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(pd); + + // Create credentials that will result in null matches + List credentials = createMockWalletCredentialsWithMapData(); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(credentials); + + // Act + MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + .getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert - Should handle null matches gracefully + assertNotNull(result); + assertNotNull(result.getMatchingCredentialsResponse()); + } + + @Test + public void testMatchesFilterNullFilter() throws Exception { + // Arrange + // Create presentation definition with null filter + Fields field = new Fields(Arrays.asList("$.name"), null, null, null, null, null); + Constraints constraints = new Constraints(Collections.singletonList(field), null); + InputDescriptor descriptor = new InputDescriptor("test-descriptor", null, null, null, constraints); + PresentationDefinition pd = new PresentationDefinition("test-pd", Arrays.asList(descriptor), null, null, null); + + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(pd); + + List credentials = createMockWalletCredentialsWithMapData(); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(credentials); + + // Act + MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + .getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert - Should handle null filter gracefully + assertNotNull(result); + assertNotNull(result.getMatchingCredentialsResponse()); + } + + @Test + public void testExtractRequiredClaimsNullPath() throws Exception { + // Arrange + // Create presentation definition with empty path list to test null path handling + Fields field = new Fields(Collections.emptyList(), null, null, null, null, null); + Constraints constraints = new Constraints(Collections.singletonList(field), null); + InputDescriptor descriptor = new InputDescriptor("test-descriptor", null, null, null, constraints); + PresentationDefinition pd = new PresentationDefinition("test-pd", Arrays.asList(descriptor), null, null, null); + + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(pd); + + List credentials = createMockWalletCredentialsWithMapData(); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(credentials); + + // Act + MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + .getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert - Should handle null path gracefully + assertNotNull(result); + assertNotNull(result.getMatchingCredentialsResponse()); + } + + @Test + public void testExtractRequiredClaimsBlankPath() throws Exception { + // Arrange + // Create presentation definition with blank path + Fields field = new Fields(Arrays.asList(" "), null, null, null, null, null); + Constraints constraints = new Constraints(Collections.singletonList(field), null); + InputDescriptor descriptor = new InputDescriptor("test-descriptor", null, null, null, constraints); + PresentationDefinition pd = new PresentationDefinition("test-pd", Arrays.asList(descriptor), null, null, null); + + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) + .thenReturn(pd); + + List credentials = createMockWalletCredentialsWithMapData(); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(credentials); + + // Act + MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + .getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert - Should handle blank path gracefully + assertNotNull(result); + assertNotNull(result.getMatchingCredentialsResponse()); + } +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java index 7c085ec76..6dc6fcc21 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java @@ -44,6 +44,9 @@ public class CredentialRequestServiceTest { @MockBean private CredentialFormatHandlerFactory credentialFormatHandlerFactory; + @MockBean + private KeyPairService keyPairService; + private final MockedStatic keyGenerationUtilMockedStatic = Mockito.mockStatic(KeyGenerationUtil.class, Mockito.withSettings().defaultAnswer(Mockito.CALLS_REAL_METHODS)); IssuerDTO issuerDTO; diff --git a/src/test/java/io/mosip/mimoto/service/KeyPairServiceTest.java b/src/test/java/io/mosip/mimoto/service/KeyPairServiceTest.java new file mode 100644 index 000000000..307652a14 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/service/KeyPairServiceTest.java @@ -0,0 +1,489 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.constant.SigningAlgorithm; +import io.mosip.mimoto.exception.DecryptionException; +import io.mosip.mimoto.exception.KeyGenerationException; +import io.mosip.mimoto.model.ProofSigningKey; +import io.mosip.mimoto.model.Wallet; +import io.mosip.mimoto.repository.ProofSigningKeyRepository; +import io.mosip.mimoto.service.impl.KeyPairServiceImpl; +import io.mosip.mimoto.util.EncryptionDecryptionUtil; +import io.mosip.mimoto.util.KeyGenerationUtil; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockedStatic; +import org.mockito.Mockito; +import org.mockito.junit.MockitoJUnitRunner; + +import javax.crypto.SecretKey; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.time.Instant; +import java.util.Base64; +import java.util.Optional; + +import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.*; + +@RunWith(MockitoJUnitRunner.class) +public class KeyPairServiceTest { + + @InjectMocks + private KeyPairServiceImpl keyPairService; + + @Mock + private ProofSigningKeyRepository proofSigningKeyRepository; + + @Mock + private EncryptionDecryptionUtil encryptionDecryptionUtil; + + private String walletId; + private String base64EncodedWalletKey; + private ProofSigningKey proofSigningKey; + private KeyPair keyPair; + + @Before + public void setUp() throws Exception { + walletId = "test-wallet-id"; + + KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("Ed25519"); + keyPair = keyPairGenerator.generateKeyPair(); + + byte[] walletKeyBytes = new byte[32]; + for (int i = 0; i < 32; i++) { + walletKeyBytes[i] = (byte) i; + } + base64EncodedWalletKey = Base64.getEncoder().encodeToString(walletKeyBytes); + + Wallet wallet = new Wallet(); + wallet.setId(walletId); + + proofSigningKey = new ProofSigningKey(); + proofSigningKey.setId("key-id"); + proofSigningKey.setWallet(wallet); + proofSigningKey.setPublicKey(Base64.getEncoder().encodeToString(keyPair.getPublic().getEncoded())); + proofSigningKey.setEncryptedSecretKey("encrypted-private-key"); + proofSigningKey.setCreatedAt(Instant.now()); + proofSigningKey.setUpdatedAt(Instant.now()); + } + + @Test + public void testGetKeyPairFromDBSuccessWithED25519() throws Exception { + SigningAlgorithm algorithm = SigningAlgorithm.ED25519; + + when(proofSigningKeyRepository.findByWalletIdAndAlgorithm(walletId, algorithm.name())) + .thenReturn(Optional.of(proofSigningKey)); + + byte[] decryptedPrivateKey = keyPair.getPrivate().getEncoded(); + when(encryptionDecryptionUtil.decryptWithAES(any(SecretKey.class), eq("encrypted-private-key"))) + .thenReturn(decryptedPrivateKey); + + try (MockedStatic mockedStaticUtil = Mockito.mockStatic(EncryptionDecryptionUtil.class); + MockedStatic mockedStaticKeyGen = Mockito.mockStatic(KeyGenerationUtil.class)) { + + mockedStaticUtil.when(() -> EncryptionDecryptionUtil.bytesToSecretKey(any(byte[].class))) + .thenReturn(mock(SecretKey.class)); + + mockedStaticKeyGen.when(() -> KeyGenerationUtil.getKeyPairFromDBStoredKeys( + eq(algorithm), any(byte[].class), any(byte[].class))) + .thenReturn(keyPair); + + KeyPair result = keyPairService.getKeyPairFromDB(walletId, base64EncodedWalletKey, algorithm); + + assertNotNull(result); + assertEquals(keyPair, result); + verify(proofSigningKeyRepository).findByWalletIdAndAlgorithm(walletId, algorithm.name()); + verify(encryptionDecryptionUtil).decryptWithAES(any(SecretKey.class), eq("encrypted-private-key")); + } + } + + @Test + public void testGetKeyPairFromDBSuccessWithRS256() throws Exception { + SigningAlgorithm algorithm = SigningAlgorithm.RS256; + + KeyPairGenerator rsaKeyGen = KeyPairGenerator.getInstance("RSA"); + rsaKeyGen.initialize(2048); + KeyPair rsaKeyPair = rsaKeyGen.generateKeyPair(); + + proofSigningKey.setPublicKey(Base64.getEncoder().encodeToString(rsaKeyPair.getPublic().getEncoded())); + + when(proofSigningKeyRepository.findByWalletIdAndAlgorithm(walletId, algorithm.name())) + .thenReturn(Optional.of(proofSigningKey)); + + byte[] decryptedPrivateKey = rsaKeyPair.getPrivate().getEncoded(); + when(encryptionDecryptionUtil.decryptWithAES(any(SecretKey.class), eq("encrypted-private-key"))) + .thenReturn(decryptedPrivateKey); + + try (MockedStatic mockedStaticUtil = Mockito.mockStatic(EncryptionDecryptionUtil.class); + MockedStatic mockedStaticKeyGen = Mockito.mockStatic(KeyGenerationUtil.class)) { + + mockedStaticUtil.when(() -> EncryptionDecryptionUtil.bytesToSecretKey(any(byte[].class))) + .thenReturn(mock(SecretKey.class)); + + mockedStaticKeyGen.when(() -> KeyGenerationUtil.getKeyPairFromDBStoredKeys( + eq(algorithm), any(byte[].class), any(byte[].class))) + .thenReturn(rsaKeyPair); + + KeyPair result = keyPairService.getKeyPairFromDB(walletId, base64EncodedWalletKey, algorithm); + + assertNotNull(result); + assertEquals(rsaKeyPair, result); + } + } + + @Test + public void testGetKeyPairFromDBSuccessWithES256() throws Exception { + SigningAlgorithm algorithm = SigningAlgorithm.ES256; + + KeyPairGenerator ecKeyGen = KeyPairGenerator.getInstance("EC"); + ecKeyGen.initialize(256); + KeyPair ecKeyPair = ecKeyGen.generateKeyPair(); + + proofSigningKey.setPublicKey(Base64.getEncoder().encodeToString(ecKeyPair.getPublic().getEncoded())); + + when(proofSigningKeyRepository.findByWalletIdAndAlgorithm(walletId, algorithm.name())) + .thenReturn(Optional.of(proofSigningKey)); + + byte[] decryptedPrivateKey = ecKeyPair.getPrivate().getEncoded(); + when(encryptionDecryptionUtil.decryptWithAES(any(SecretKey.class), eq("encrypted-private-key"))) + .thenReturn(decryptedPrivateKey); + + try (MockedStatic mockedStaticUtil = Mockito.mockStatic(EncryptionDecryptionUtil.class); + MockedStatic mockedStaticKeyGen = Mockito.mockStatic(KeyGenerationUtil.class)) { + + mockedStaticUtil.when(() -> EncryptionDecryptionUtil.bytesToSecretKey(any(byte[].class))) + .thenReturn(mock(SecretKey.class)); + + mockedStaticKeyGen.when(() -> KeyGenerationUtil.getKeyPairFromDBStoredKeys( + eq(algorithm), any(byte[].class), any(byte[].class))) + .thenReturn(ecKeyPair); + + KeyPair result = keyPairService.getKeyPairFromDB(walletId, base64EncodedWalletKey, algorithm); + + assertNotNull(result); + assertEquals(ecKeyPair, result); + } + } + + @Test(expected = KeyGenerationException.class) + public void testGetKeyPairFromDBThrowsKeyGenerationExceptionWhenKeyNotFound() throws Exception { + SigningAlgorithm algorithm = SigningAlgorithm.ED25519; + + when(proofSigningKeyRepository.findByWalletIdAndAlgorithm(walletId, algorithm.name())) + .thenReturn(Optional.empty()); + + try { + keyPairService.getKeyPairFromDB(walletId, base64EncodedWalletKey, algorithm); + } catch (KeyGenerationException e) { + assertEquals("KEY_NOT_FOUND", e.getErrorCode()); + assertTrue(e.getErrorText().contains("No proof signing key found")); + assertTrue(e.getErrorText().contains(walletId)); + assertTrue(e.getErrorText().contains(algorithm.toString())); + throw e; + } + } + + @Test + public void testGetKeyPairFromDBThrowsDecryptionExceptionForInvalidBase64WalletKey() throws Exception { + SigningAlgorithm algorithm = SigningAlgorithm.ED25519; + String invalidBase64Key = "Invalid!@#$%Base64"; + + when(proofSigningKeyRepository.findByWalletIdAndAlgorithm(walletId, algorithm.name())) + .thenReturn(Optional.of(proofSigningKey)); + + try { + keyPairService.getKeyPairFromDB(walletId, invalidBase64Key, algorithm); + fail("Should have thrown DecryptionException"); + } catch (DecryptionException e) { + assertEquals("INVALID_WALLET_KEY", e.getErrorCode()); + assertTrue(e.getErrorText().contains("Invalid base64 encoded wallet key")); + assertNotNull(e.getCause()); + assertTrue(e.getCause() instanceof IllegalArgumentException); + } + } + + @Test(expected = KeyGenerationException.class) + public void testGetKeyPairFromDBThrowsKeyGenerationExceptionForInvalidBase64PublicKey() throws Exception { + SigningAlgorithm algorithm = SigningAlgorithm.ED25519; + + proofSigningKey.setPublicKey("Invalid!@#$%Base64PublicKey"); + + when(proofSigningKeyRepository.findByWalletIdAndAlgorithm(walletId, algorithm.name())) + .thenReturn(Optional.of(proofSigningKey)); + + try (MockedStatic mockedStaticUtil = Mockito.mockStatic(EncryptionDecryptionUtil.class)) { + mockedStaticUtil.when(() -> EncryptionDecryptionUtil.bytesToSecretKey(any(byte[].class))) + .thenReturn(mock(SecretKey.class)); + + try { + keyPairService.getKeyPairFromDB(walletId, base64EncodedWalletKey, algorithm); + } catch (KeyGenerationException e) { + assertEquals("INVALID_PUBLIC_KEY", e.getErrorCode()); + assertTrue(e.getErrorText().contains("Invalid base64 encoded public key")); + assertNotNull(e.getCause()); + assertTrue(e.getCause() instanceof IllegalArgumentException); + throw e; + } + } + } + + @Test(expected = DecryptionException.class) + public void testGetKeyPairFromDBThrowsDecryptionExceptionWhenDecryptionFails() throws Exception { + SigningAlgorithm algorithm = SigningAlgorithm.ED25519; + + when(proofSigningKeyRepository.findByWalletIdAndAlgorithm(walletId, algorithm.name())) + .thenReturn(Optional.of(proofSigningKey)); + + when(encryptionDecryptionUtil.decryptWithAES(any(SecretKey.class), eq("encrypted-private-key"))) + .thenThrow(new RuntimeException("Decryption error")); + + try (MockedStatic mockedStaticUtil = Mockito.mockStatic(EncryptionDecryptionUtil.class)) { + mockedStaticUtil.when(() -> EncryptionDecryptionUtil.bytesToSecretKey(any(byte[].class))) + .thenReturn(mock(SecretKey.class)); + + try { + keyPairService.getKeyPairFromDB(walletId, base64EncodedWalletKey, algorithm); + } catch (DecryptionException e) { + assertEquals("DECRYPTION_FAILED", e.getErrorCode()); + assertTrue(e.getErrorText().contains("Failed to decrypt private key")); + assertTrue(e.getErrorText().contains(walletId)); + assertNotNull(e.getCause()); + throw e; + } + } + } + + @Test(expected = KeyGenerationException.class) + public void testGetKeyPairFromDBThrowsKeyGenerationExceptionWhenKeyPairGenerationFails() throws Exception { + SigningAlgorithm algorithm = SigningAlgorithm.ED25519; + + when(proofSigningKeyRepository.findByWalletIdAndAlgorithm(walletId, algorithm.name())) + .thenReturn(Optional.of(proofSigningKey)); + + byte[] decryptedPrivateKey = keyPair.getPrivate().getEncoded(); + when(encryptionDecryptionUtil.decryptWithAES(any(SecretKey.class), eq("encrypted-private-key"))) + .thenReturn(decryptedPrivateKey); + + try (MockedStatic mockedStaticUtil = Mockito.mockStatic(EncryptionDecryptionUtil.class); + MockedStatic mockedStaticKeyGen = Mockito.mockStatic(KeyGenerationUtil.class)) { + + mockedStaticUtil.when(() -> EncryptionDecryptionUtil.bytesToSecretKey(any(byte[].class))) + .thenReturn(mock(SecretKey.class)); + + mockedStaticKeyGen.when(() -> KeyGenerationUtil.getKeyPairFromDBStoredKeys( + eq(algorithm), any(byte[].class), any(byte[].class))) + .thenThrow(new RuntimeException("Key generation error")); + + try { + keyPairService.getKeyPairFromDB(walletId, base64EncodedWalletKey, algorithm); + } catch (KeyGenerationException e) { + assertEquals("KEY_GENERATION_FAILED", e.getErrorCode()); + assertTrue(e.getErrorText().contains("Failed to generate KeyPair")); + assertTrue(e.getErrorText().contains(algorithm.toString())); + assertNotNull(e.getCause()); + throw e; + } + } + } + + @Test + public void testGetKeyPairFromDBWithDifferentWalletIds() throws Exception { + SigningAlgorithm algorithm = SigningAlgorithm.ED25519; + String wallet1 = "wallet-1"; + String wallet2 = "wallet-2"; + + ProofSigningKey key1 = new ProofSigningKey(); + key1.setPublicKey(Base64.getEncoder().encodeToString(keyPair.getPublic().getEncoded())); + key1.setEncryptedSecretKey("encrypted-key-1"); + + ProofSigningKey key2 = new ProofSigningKey(); + key2.setPublicKey(Base64.getEncoder().encodeToString(keyPair.getPublic().getEncoded())); + key2.setEncryptedSecretKey("encrypted-key-2"); + + when(proofSigningKeyRepository.findByWalletIdAndAlgorithm(wallet1, algorithm.name())) + .thenReturn(Optional.of(key1)); + when(proofSigningKeyRepository.findByWalletIdAndAlgorithm(wallet2, algorithm.name())) + .thenReturn(Optional.of(key2)); + + byte[] decryptedPrivateKey = keyPair.getPrivate().getEncoded(); + when(encryptionDecryptionUtil.decryptWithAES(any(SecretKey.class), anyString())) + .thenReturn(decryptedPrivateKey); + + try (MockedStatic mockedStaticUtil = Mockito.mockStatic(EncryptionDecryptionUtil.class); + MockedStatic mockedStaticKeyGen = Mockito.mockStatic(KeyGenerationUtil.class)) { + + mockedStaticUtil.when(() -> EncryptionDecryptionUtil.bytesToSecretKey(any(byte[].class))) + .thenReturn(mock(SecretKey.class)); + + mockedStaticKeyGen.when(() -> KeyGenerationUtil.getKeyPairFromDBStoredKeys( + eq(algorithm), any(byte[].class), any(byte[].class))) + .thenReturn(keyPair); + + KeyPair result1 = keyPairService.getKeyPairFromDB(wallet1, base64EncodedWalletKey, algorithm); + KeyPair result2 = keyPairService.getKeyPairFromDB(wallet2, base64EncodedWalletKey, algorithm); + + assertNotNull(result1); + assertNotNull(result2); + verify(proofSigningKeyRepository).findByWalletIdAndAlgorithm(wallet1, algorithm.name()); + verify(proofSigningKeyRepository).findByWalletIdAndAlgorithm(wallet2, algorithm.name()); + verify(encryptionDecryptionUtil).decryptWithAES(any(SecretKey.class), eq("encrypted-key-1")); + verify(encryptionDecryptionUtil).decryptWithAES(any(SecretKey.class), eq("encrypted-key-2")); + } + } + + @Test + public void testGetKeyPairFromDBWithAllSigningAlgorithms() throws Exception { + for (SigningAlgorithm algorithm : SigningAlgorithm.values()) { + when(proofSigningKeyRepository.findByWalletIdAndAlgorithm(walletId, algorithm.name())) + .thenReturn(Optional.of(proofSigningKey)); + + byte[] decryptedPrivateKey = keyPair.getPrivate().getEncoded(); + when(encryptionDecryptionUtil.decryptWithAES(any(SecretKey.class), eq("encrypted-private-key"))) + .thenReturn(decryptedPrivateKey); + + try (MockedStatic mockedStaticUtil = Mockito.mockStatic(EncryptionDecryptionUtil.class); + MockedStatic mockedStaticKeyGen = Mockito.mockStatic(KeyGenerationUtil.class)) { + + mockedStaticUtil.when(() -> EncryptionDecryptionUtil.bytesToSecretKey(any(byte[].class))) + .thenReturn(mock(SecretKey.class)); + + mockedStaticKeyGen.when(() -> KeyGenerationUtil.getKeyPairFromDBStoredKeys( + eq(algorithm), any(byte[].class), any(byte[].class))) + .thenReturn(keyPair); + + KeyPair result = keyPairService.getKeyPairFromDB(walletId, base64EncodedWalletKey, algorithm); + + assertNotNull(result); + } + + reset(proofSigningKeyRepository, encryptionDecryptionUtil); + } + } + + @Test(expected = KeyGenerationException.class) + public void testGetKeyPairFromDBWithNullProofSigningKeyRepository() throws Exception { + SigningAlgorithm algorithm = SigningAlgorithm.ED25519; + + when(proofSigningKeyRepository.findByWalletIdAndAlgorithm(walletId, algorithm.name())) + .thenReturn(Optional.empty()); + + keyPairService.getKeyPairFromDB(walletId, base64EncodedWalletKey, algorithm); + } + + @Test + public void testGetKeyPairFromDBVerifiesRepositoryIsCalledWithCorrectParameters() throws Exception { + SigningAlgorithm algorithm = SigningAlgorithm.ES256; + String testWalletId = "specific-wallet-id"; + + when(proofSigningKeyRepository.findByWalletIdAndAlgorithm(testWalletId, algorithm.name())) + .thenReturn(Optional.of(proofSigningKey)); + + byte[] decryptedPrivateKey = keyPair.getPrivate().getEncoded(); + when(encryptionDecryptionUtil.decryptWithAES(any(SecretKey.class), eq("encrypted-private-key"))) + .thenReturn(decryptedPrivateKey); + + try (MockedStatic mockedStaticUtil = Mockito.mockStatic(EncryptionDecryptionUtil.class); + MockedStatic mockedStaticKeyGen = Mockito.mockStatic(KeyGenerationUtil.class)) { + + mockedStaticUtil.when(() -> EncryptionDecryptionUtil.bytesToSecretKey(any(byte[].class))) + .thenReturn(mock(SecretKey.class)); + + mockedStaticKeyGen.when(() -> KeyGenerationUtil.getKeyPairFromDBStoredKeys( + eq(algorithm), any(byte[].class), any(byte[].class))) + .thenReturn(keyPair); + + keyPairService.getKeyPairFromDB(testWalletId, base64EncodedWalletKey, algorithm); + + verify(proofSigningKeyRepository, times(1)).findByWalletIdAndAlgorithm(testWalletId, algorithm.name()); + } + } + + @Test + public void testGetKeyPairFromDBHandlesEmptyEncryptedSecretKey() throws Exception { + SigningAlgorithm algorithm = SigningAlgorithm.ED25519; + + proofSigningKey.setEncryptedSecretKey(""); + + when(proofSigningKeyRepository.findByWalletIdAndAlgorithm(walletId, algorithm.name())) + .thenReturn(Optional.of(proofSigningKey)); + + byte[] decryptedPrivateKey = keyPair.getPrivate().getEncoded(); + when(encryptionDecryptionUtil.decryptWithAES(any(SecretKey.class), eq(""))) + .thenReturn(decryptedPrivateKey); + + try (MockedStatic mockedStaticUtil = Mockito.mockStatic(EncryptionDecryptionUtil.class); + MockedStatic mockedStaticKeyGen = Mockito.mockStatic(KeyGenerationUtil.class)) { + + mockedStaticUtil.when(() -> EncryptionDecryptionUtil.bytesToSecretKey(any(byte[].class))) + .thenReturn(mock(SecretKey.class)); + + mockedStaticKeyGen.when(() -> KeyGenerationUtil.getKeyPairFromDBStoredKeys( + eq(algorithm), any(byte[].class), any(byte[].class))) + .thenReturn(keyPair); + + KeyPair result = keyPairService.getKeyPairFromDB(walletId, base64EncodedWalletKey, algorithm); + + assertNotNull(result); + verify(encryptionDecryptionUtil).decryptWithAES(any(SecretKey.class), eq("")); + } + } + + @Test + public void testGetKeyPairFromDBThrowsDecryptionExceptionForCorruptedWalletKey() throws Exception { + SigningAlgorithm algorithm = SigningAlgorithm.ED25519; + + when(proofSigningKeyRepository.findByWalletIdAndAlgorithm(walletId, algorithm.name())) + .thenReturn(Optional.of(proofSigningKey)); + + when(encryptionDecryptionUtil.decryptWithAES(any(SecretKey.class), eq("encrypted-private-key"))) + .thenThrow(new RuntimeException("Corrupted key - decryption failed")); + + try (MockedStatic mockedStaticUtil = Mockito.mockStatic(EncryptionDecryptionUtil.class)) { + mockedStaticUtil.when(() -> EncryptionDecryptionUtil.bytesToSecretKey(any(byte[].class))) + .thenReturn(mock(SecretKey.class)); + + try { + keyPairService.getKeyPairFromDB(walletId, base64EncodedWalletKey, algorithm); + fail("Should have thrown DecryptionException"); + } catch (DecryptionException e) { + assertEquals("DECRYPTION_FAILED", e.getErrorCode()); + assertTrue(e.getErrorText().contains("Failed to decrypt private key")); + assertTrue(e.getErrorText().contains(walletId)); + assertNotNull(e.getCause()); + } + } + } + + @Test + public void testGetKeyPairFromDBLogsDebugMessages() throws Exception { + SigningAlgorithm algorithm = SigningAlgorithm.ED25519; + + when(proofSigningKeyRepository.findByWalletIdAndAlgorithm(walletId, algorithm.name())) + .thenReturn(Optional.of(proofSigningKey)); + + byte[] decryptedPrivateKey = keyPair.getPrivate().getEncoded(); + when(encryptionDecryptionUtil.decryptWithAES(any(SecretKey.class), eq("encrypted-private-key"))) + .thenReturn(decryptedPrivateKey); + + try (MockedStatic mockedStaticUtil = Mockito.mockStatic(EncryptionDecryptionUtil.class); + MockedStatic mockedStaticKeyGen = Mockito.mockStatic(KeyGenerationUtil.class)) { + + mockedStaticUtil.when(() -> EncryptionDecryptionUtil.bytesToSecretKey(any(byte[].class))) + .thenReturn(mock(SecretKey.class)); + + mockedStaticKeyGen.when(() -> KeyGenerationUtil.getKeyPairFromDBStoredKeys( + eq(algorithm), any(byte[].class), any(byte[].class))) + .thenReturn(keyPair); + + KeyPair result = keyPairService.getKeyPairFromDB(walletId, base64EncodedWalletKey, algorithm); + + assertNotNull(result); + } + } +} + diff --git a/src/test/java/io/mosip/mimoto/service/OpenID4VPServiceTest.java b/src/test/java/io/mosip/mimoto/service/OpenID4VPServiceTest.java new file mode 100644 index 000000000..737401d54 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/service/OpenID4VPServiceTest.java @@ -0,0 +1,421 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.dto.openid.VerifierDTO; +import io.mosip.mimoto.dto.openid.VerifiersDTO; +import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; +import io.mosip.openID4VP.networkManager.NetworkResponse; +import io.mosip.mimoto.dto.ErrorDTO; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.service.impl.OpenID4VPService; +import io.mosip.openID4VP.OpenID4VP; +import io.mosip.openID4VP.authorizationRequest.AuthorizationRequest; +import io.mosip.openID4VP.authorizationRequest.presentationDefinition.PresentationDefinition; +import lombok.extern.slf4j.Slf4j; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; + +import java.io.IOException; +import java.net.URISyntaxException; +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.anyBoolean; +import static org.mockito.ArgumentMatchers.anyList; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.*; + +@RunWith(MockitoJUnitRunner.class) +@Slf4j +public class OpenID4VPServiceTest { + + @Mock + private VerifierService verifierService; + + @InjectMocks + private OpenID4VPService openID4VPService; + + private VerifiersDTO mockVerifiersDTO; + private VerifierDTO mockVerifierDTO; + private AuthorizationRequest mockAuthorizationRequest; + private PresentationDefinition mockPresentationDefinition; + + @Before + public void setUp() { + // Setup mock VerifierDTO with required vp_formats + mockVerifierDTO = VerifierDTO.builder() + .clientId("test-client-id") + .responseUris(List.of("https://example.com/response")) + .jwksUri("https://example.com/.well-known/jwks.json") + .allowUnsignedRequest(true) + .build(); + + // Setup mock VerifiersDTO + mockVerifiersDTO = VerifiersDTO.builder() + .verifiers(List.of(mockVerifierDTO)) + .build(); + + + // Setup mock AuthorizationRequest + mockAuthorizationRequest = mock(AuthorizationRequest.class); + + // Setup mock PresentationDefinition + mockPresentationDefinition = mock(PresentationDefinition.class); + } + + @Test + public void testCreateReturnsValidOpenID4VP() { + OpenID4VP openID4VP = openID4VPService.create("presentation-123"); + + assertNotNull(openID4VP); + assertEquals("io.mosip.openID4VP.OpenID4VP", openID4VP.getClass().getName()); + } + + @Test + public void testCreateWithValidPresentationIdReturnsValidOpenID4VP() { + OpenID4VP openID4VP = openID4VPService.create("valid-presentation-id"); + + assertNotNull(openID4VP); + assertEquals("io.mosip.openID4VP.OpenID4VP", openID4VP.getClass().getName()); + } + + @Test + public void testCreateWithSpecialCharactersPresentationIdReturnsValidOpenID4VP() { + OpenID4VP openID4VP = openID4VPService.create("presentation-123_with.special@chars"); + + assertNotNull(openID4VP); + assertEquals("io.mosip.openID4VP.OpenID4VP", openID4VP.getClass().getName()); + } + + @Test + public void testResolvePresentationDefinitionSuccess() throws Exception { + // Setup mocks + when(verifierService.getTrustedVerifiers()).thenReturn(mockVerifiersDTO); + + // Create a mock OpenID4VP to control the authenticateVerifier method + OpenID4VP mockOpenID4VP = mock(OpenID4VP.class); + when(mockOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())) + .thenReturn(mockAuthorizationRequest); + when(mockAuthorizationRequest.getPresentationDefinition()) + .thenReturn(mockPresentationDefinition); + + // Use reflection to replace the create method behavior + OpenID4VPService spyService = spy(openID4VPService); + doReturn(mockOpenID4VP).when(spyService).create(anyString()); + + // Execute + PresentationDefinition result = spyService.resolvePresentationDefinition( + "presentation-123", + "authorization-request", + true + ); + + // Verify + assertNotNull(result); + assertEquals(mockPresentationDefinition, result); + verify(verifierService).getTrustedVerifiers(); + verify(mockOpenID4VP).authenticateVerifier(eq("authorization-request"), anyList(), eq(true)); + verify(mockAuthorizationRequest).getPresentationDefinition(); + } + + @Test + public void testResolvePresentationDefinitionWithNullPresentationIdReturnsNull() throws Exception { + // Execute + PresentationDefinition result = openID4VPService.resolvePresentationDefinition( + null, + "authorization-request", + true + ); + + // Verify + assertNull(result); + verifyNoInteractions(verifierService); + } + + @Test + public void testResolvePresentationDefinitionWithNullAuthorizationRequestReturnsNull() throws Exception { + // Execute + PresentationDefinition result = openID4VPService.resolvePresentationDefinition( + "presentation-123", + null, + true + ); + + // Verify + assertNull(result); + verifyNoInteractions(verifierService); + } + + @Test + public void testResolvePresentationDefinitionWithBothNullParametersReturnsNull() throws Exception { + // Execute + PresentationDefinition result = openID4VPService.resolvePresentationDefinition( + null, + null, + true + ); + + // Verify + assertNull(result); + verifyNoInteractions(verifierService); + } + + @Test + public void testResolvePresentationDefinitionWithEmptyPresentationIdReturnsNull() throws Exception { + // Setup mocks for empty string scenario - service doesn't check for empty strings, so it continues execution + when(verifierService.getTrustedVerifiers()).thenReturn(mockVerifiersDTO); + + // Create a mock OpenID4VP to control the authenticateVerifier method + OpenID4VP mockOpenID4VP = mock(OpenID4VP.class); + when(mockOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())) + .thenReturn(mockAuthorizationRequest); + when(mockAuthorizationRequest.getPresentationDefinition()) + .thenReturn(mockPresentationDefinition); + + // Use reflection to replace the create method behavior + OpenID4VPService spyService = spy(openID4VPService); + doReturn(mockOpenID4VP).when(spyService).create(anyString()); + + // Execute + PresentationDefinition result = spyService.resolvePresentationDefinition( + "", + "authorization-request", + true + ); + + // Verify - Empty string is not null, so it will proceed to call verifierService + assertNotNull(result); + verify(verifierService).getTrustedVerifiers(); + verify(mockOpenID4VP).authenticateVerifier(eq("authorization-request"), anyList(), eq(true)); + verify(mockAuthorizationRequest).getPresentationDefinition(); + } + + @Test + public void testResolvePresentationDefinitionWithEmptyAuthorizationRequestReturnsNull() throws Exception { + // Setup mocks for empty string scenario - service doesn't check for empty strings, so it continues execution + when(verifierService.getTrustedVerifiers()).thenReturn(mockVerifiersDTO); + + // Create a mock OpenID4VP to control the authenticateVerifier method + OpenID4VP mockOpenID4VP = mock(OpenID4VP.class); + when(mockOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())) + .thenReturn(mockAuthorizationRequest); + when(mockAuthorizationRequest.getPresentationDefinition()) + .thenReturn(mockPresentationDefinition); + + // Use reflection to replace the create method behavior + OpenID4VPService spyService = spy(openID4VPService); + doReturn(mockOpenID4VP).when(spyService).create(anyString()); + + // Execute + PresentationDefinition result = spyService.resolvePresentationDefinition( + "presentation-123", + "", + true + ); + + // Verify - Empty string is not null, so it will proceed to call verifierService + assertNotNull(result); + verify(verifierService).getTrustedVerifiers(); + verify(mockOpenID4VP).authenticateVerifier(eq(""), anyList(), eq(true)); + verify(mockAuthorizationRequest).getPresentationDefinition(); + } + + @Test + public void testResolvePresentationDefinitionWithVerifierServiceExceptionThrowsException() throws Exception { + // Setup mocks + when(verifierService.getTrustedVerifiers()) + .thenThrow(new ApiNotAccessibleException()); + + // Execute and verify exception + assertThrows(ApiNotAccessibleException.class, () -> { + openID4VPService.resolvePresentationDefinition( + "presentation-123", + "authorization-request", + true + ); + }); + + verify(verifierService).getTrustedVerifiers(); + } + + @Test + public void testResolvePresentationDefinitionWithIOExceptionThrowsException() throws Exception { + // Setup mocks + when(verifierService.getTrustedVerifiers()) + .thenThrow(new IOException("Network error")); + + // Execute and verify exception + assertThrows(IOException.class, () -> { + openID4VPService.resolvePresentationDefinition( + "presentation-123", + "authorization-request", + true + ); + }); + + verify(verifierService).getTrustedVerifiers(); + } + + @Test + public void testResolvePresentationDefinitionWithEmptyVerifiersList() throws Exception { + // Setup mocks with empty verifiers list + VerifiersDTO emptyVerifiersDTO = VerifiersDTO.builder() + .verifiers(List.of()) + .build(); + when(verifierService.getTrustedVerifiers()).thenReturn(emptyVerifiersDTO); + + // Create a mock OpenID4VP to control the authenticateVerifier method + OpenID4VP mockOpenID4VP = mock(OpenID4VP.class); + when(mockOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())) + .thenReturn(mockAuthorizationRequest); + when(mockAuthorizationRequest.getPresentationDefinition()) + .thenReturn(mockPresentationDefinition); + + // Use reflection to replace the create method behavior + OpenID4VPService spyService = spy(openID4VPService); + doReturn(mockOpenID4VP).when(spyService).create(anyString()); + + // Execute + PresentationDefinition result = spyService.resolvePresentationDefinition( + "presentation-123", + "authorization-request", + false + ); + + // Verify + assertNotNull(result); + assertEquals(mockPresentationDefinition, result); + verify(verifierService).getTrustedVerifiers(); + verify(mockOpenID4VP).authenticateVerifier("authorization-request", List.of(), false); + verify(mockAuthorizationRequest).getPresentationDefinition(); + } + + @Test + public void testResolvePresentationDefinitionWithNullPresentationDefinition() throws Exception { + // Setup mocks + when(verifierService.getTrustedVerifiers()).thenReturn(mockVerifiersDTO); + + // Create a mock OpenID4VP to control the authenticateVerifier method + OpenID4VP mockOpenID4VP = mock(OpenID4VP.class); + when(mockOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())) + .thenReturn(mockAuthorizationRequest); + when(mockAuthorizationRequest.getPresentationDefinition()) + .thenReturn(null); + + // Use reflection to replace the create method behavior + OpenID4VPService spyService = spy(openID4VPService); + doReturn(mockOpenID4VP).when(spyService).create(anyString()); + + // Execute + PresentationDefinition result = spyService.resolvePresentationDefinition( + "presentation-123", + "authorization-request", + true + ); + + // Verify + assertNull(result); + verify(verifierService).getTrustedVerifiers(); + verify(mockOpenID4VP).authenticateVerifier(eq("authorization-request"), anyList(), eq(true)); + verify(mockAuthorizationRequest).getPresentationDefinition(); + } + + @Test + public void testSendErrorToVerifierSuccess() throws Exception { + // Setup mocks + when(verifierService.getTrustedVerifiers()).thenReturn(mockVerifiersDTO); + + OpenID4VP mockOpenID4VP = mock(OpenID4VP.class); + NetworkResponse mockResponse = mock(NetworkResponse.class); + + when(mockOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(mockAuthorizationRequest); + when(mockOpenID4VP.sendErrorToVerifier(any())).thenReturn(mockResponse); + + OpenID4VPService spyService = spy(openID4VPService); + doReturn(mockOpenID4VP).when(spyService).create(anyString()); + + VerifiablePresentationSessionData sessionData = mock(VerifiablePresentationSessionData.class); + when(sessionData.getPresentationId()).thenReturn("presentation-123"); + when(sessionData.getAuthorizationRequest()).thenReturn("authorization-request"); + when(sessionData.isVerifierClientPreregistered()).thenReturn(true); + + ErrorDTO payload = mock(ErrorDTO.class); + when(payload.getErrorMessage()).thenReturn("access_denied"); + + // Execute + NetworkResponse response = spyService.sendErrorToVerifier(sessionData, payload); + + // Verify + assertNotNull(response); + assertEquals(mockResponse, response); + verify(verifierService).getTrustedVerifiers(); + verify(mockOpenID4VP).authenticateVerifier(eq("authorization-request"), anyList(), eq(true)); + verify(mockOpenID4VP).sendErrorToVerifier(any()); + } + + @Test + public void testSendErrorToVerifierWithNullSessionData() { + // Setup + VerifiablePresentationSessionData sessionData = null; + ErrorDTO payload = mock(ErrorDTO.class); + + // Execute and verify + assertThrows(IllegalArgumentException.class, + () -> openID4VPService.sendErrorToVerifier(sessionData, payload)); + verifyNoInteractions(verifierService); + } + + @Test + public void testSendErrorToVerifierWithNullPresentationId() { + // Setup + VerifiablePresentationSessionData sessionData = mock(VerifiablePresentationSessionData.class); + when(sessionData.getPresentationId()).thenReturn(null); + + ErrorDTO payload = mock(ErrorDTO.class); + + // Execute and verify + assertThrows(IllegalArgumentException.class, + () -> openID4VPService.sendErrorToVerifier(sessionData, payload)); + verifyNoInteractions(verifierService); + } + + @Test + public void testSendErrorToVerifierWithNullAuthorizationRequest() { + // Setup + VerifiablePresentationSessionData sessionData = mock(VerifiablePresentationSessionData.class); + when(sessionData.getPresentationId()).thenReturn("presentation-123"); + when(sessionData.getAuthorizationRequest()).thenReturn(null); + + ErrorDTO payload = mock(ErrorDTO.class); + + // Execute and verify + assertThrows(IllegalArgumentException.class, + () -> openID4VPService.sendErrorToVerifier(sessionData, payload)); + verifyNoInteractions(verifierService); + } + + @Test + public void testSendErrorToVerifierPropagatesApiNotAccessibleException() throws Exception { + // Setup + when(verifierService.getTrustedVerifiers()).thenThrow(new ApiNotAccessibleException()); + + VerifiablePresentationSessionData sessionData = mock(VerifiablePresentationSessionData.class); + when(sessionData.getPresentationId()).thenReturn("presentation-123"); + when(sessionData.getAuthorizationRequest()).thenReturn("auth-request"); + // Remove this line - isVerifierClientPreregistered is never called due to early exception + // when(sessionData.isVerifierClientPreregistered()).thenReturn(false); + + ErrorDTO payload = mock(ErrorDTO.class); + + // Execute and verify + assertThrows(ApiNotAccessibleException.class, + () -> openID4VPService.sendErrorToVerifier(sessionData, payload)); + verify(verifierService).getTrustedVerifiers(); + } + +} diff --git a/src/test/java/io/mosip/mimoto/service/PresentationActionServiceTest.java b/src/test/java/io/mosip/mimoto/service/PresentationActionServiceTest.java new file mode 100644 index 000000000..52c0d7766 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/service/PresentationActionServiceTest.java @@ -0,0 +1,360 @@ +package io.mosip.mimoto.service; + +import com.nimbusds.jose.JOSEException; +import io.mosip.mimoto.dto.ErrorDTO; +import io.mosip.mimoto.dto.RejectedVerifierDTO; +import io.mosip.mimoto.dto.SubmitPresentationRequestDTO; +import io.mosip.mimoto.dto.SubmitPresentationResponseDTO; +import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.DecryptionException; +import io.mosip.mimoto.exception.KeyGenerationException; +import io.mosip.mimoto.exception.VPErrorNotSentException; +import io.mosip.mimoto.service.impl.PresentationActionServiceImpl; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; + +import java.io.IOException; +import java.time.Instant; +import java.util.Arrays; +import java.util.Collections; + +import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +@RunWith(MockitoJUnitRunner.class) +public class PresentationActionServiceTest { + + @InjectMocks + private PresentationActionServiceImpl presentationActionService; + + @Mock + private PresentationSubmissionService presentationSubmissionService; + + @Mock + private PresentationService presentationService; + + private static final String WALLET_ID = "wallet123"; + private static final String PRESENTATION_ID = "presentation123"; + private static final String BASE64_KEY = "encodedKey123"; + private static final String AUTH_REQUEST = "client_id=test&nonce=123"; + + private VerifiablePresentationSessionData sessionData; + + @Before + public void setup() { + MockitoAnnotations.openMocks(this); + sessionData = new VerifiablePresentationSessionData( + PRESENTATION_ID, + AUTH_REQUEST, + Instant.now(), + true, + null + ); + } + + @Test + public void testHandlePresentationAction_SubmissionSuccess() throws Exception { + // Given + SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() + .selectedCredentials(Arrays.asList("cred-123", "cred-456")) + .build(); + + SubmitPresentationResponseDTO expectedResponse = SubmitPresentationResponseDTO.builder() + .presentationId(PRESENTATION_ID) + .status("SUCCESS") + .message("Presentation successfully submitted and shared with verifier") + .build(); + + when(presentationSubmissionService.submitPresentation( + eq(sessionData), eq(WALLET_ID), eq(PRESENTATION_ID), eq(request), eq(BASE64_KEY))) + .thenReturn(expectedResponse); + + // When + ResponseEntity response = presentationActionService.handlePresentationAction( + WALLET_ID, PRESENTATION_ID, request, sessionData, BASE64_KEY); + + // Then + assertEquals(HttpStatus.OK, response.getStatusCode()); + assertNotNull(response.getBody()); + assertTrue(response.getBody() instanceof SubmitPresentationResponseDTO); + SubmitPresentationResponseDTO responseBody = (SubmitPresentationResponseDTO) response.getBody(); + assertEquals(PRESENTATION_ID, responseBody.getPresentationId()); + assertEquals("SUCCESS", responseBody.getStatus()); + + verify(presentationSubmissionService, times(1)).submitPresentation( + eq(sessionData), eq(WALLET_ID), eq(PRESENTATION_ID), eq(request), eq(BASE64_KEY)); + verify(presentationService, never()).rejectVerifier(any(), any(), any()); + } + + @Test + public void testHandlePresentationAction_RejectionSuccess() throws Exception { + // Given + SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() + .errorCode("access_denied") + .errorMessage("User denied authorization to share credentials") + .build(); + + RejectedVerifierDTO expectedResponse = new RejectedVerifierDTO( + "success", + null, + "Presentation request rejected. An OpenID4VP error response has been sent to the verifier." + ); + + when(presentationService.rejectVerifier(eq(WALLET_ID), eq(sessionData), any(ErrorDTO.class))) + .thenReturn(expectedResponse); + + // When + ResponseEntity response = presentationActionService.handlePresentationAction( + WALLET_ID, PRESENTATION_ID, request, sessionData, BASE64_KEY); + + // Then + assertEquals(HttpStatus.OK, response.getStatusCode()); + assertNotNull(response.getBody()); + assertTrue(response.getBody() instanceof RejectedVerifierDTO); + RejectedVerifierDTO responseBody = (RejectedVerifierDTO) response.getBody(); + assertEquals("success", responseBody.getStatus()); + + verify(presentationService, times(1)).rejectVerifier(eq(WALLET_ID), eq(sessionData), any(ErrorDTO.class)); + verify(presentationSubmissionService, never()).submitPresentation(any(), any(), any(), any(), any()); + } + + @Test + public void testHandlePresentationAction_InvalidRequest_NoCredentialsOrError() throws Exception { + // Given - request with neither credentials nor error + SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() + .build(); + + // When + ResponseEntity response = presentationActionService.handlePresentationAction( + WALLET_ID, PRESENTATION_ID, request, sessionData, BASE64_KEY); + + // Then - should return bad request error + assertEquals(HttpStatus.BAD_REQUEST, response.getStatusCode()); + verify(presentationSubmissionService, never()).submitPresentation(any(), any(), any(), any(), any()); + verify(presentationService, never()).rejectVerifier(any(), any(), any()); + } + + @Test + public void testHandlePresentationAction_InvalidRequest_EmptyCredentials() throws Exception { + // Given - request with empty credentials list + SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() + .selectedCredentials(Collections.emptyList()) + .build(); + + // When + ResponseEntity response = presentationActionService.handlePresentationAction( + WALLET_ID, PRESENTATION_ID, request, sessionData, BASE64_KEY); + + // Then - should return bad request error + assertEquals(HttpStatus.BAD_REQUEST, response.getStatusCode()); + verify(presentationSubmissionService, never()).submitPresentation(any(), any(), any(), any(), any()); + verify(presentationService, never()).rejectVerifier(any(), any(), any()); + } + + @Test + public void testHandlePresentationAction_Submission_NullWalletKey() { + // Given + SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() + .selectedCredentials(Arrays.asList("cred-123")) + .build(); + + // When - wallet key is null + ResponseEntity response = presentationActionService.handlePresentationAction( + WALLET_ID, PRESENTATION_ID, request, sessionData, null); + + // Then - should return bad request error + assertEquals(HttpStatus.BAD_REQUEST, response.getStatusCode()); + } + + @Test + public void testHandlePresentationAction_Submission_EmptyWalletKey() { + // Given + SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() + .selectedCredentials(Arrays.asList("cred-123")) + .build(); + + // When - wallet key is empty + ResponseEntity response = presentationActionService.handlePresentationAction( + WALLET_ID, PRESENTATION_ID, request, sessionData, ""); + + // Then - should return bad request error + assertEquals(HttpStatus.BAD_REQUEST, response.getStatusCode()); + } + + @Test + public void testHandlePresentationAction_Submission_JOSEException() throws Exception { + // Given + SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() + .selectedCredentials(Arrays.asList("cred-123")) + .build(); + + when(presentationSubmissionService.submitPresentation( + any(), any(), any(), any(), any())) + .thenThrow(new JOSEException("JWT signing failed")); + + // When + ResponseEntity response = presentationActionService.handlePresentationAction( + WALLET_ID, PRESENTATION_ID, request, sessionData, BASE64_KEY); + + // Then - should return internal server error + assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode()); + } + + @Test + public void testHandlePresentationAction_Submission_KeyGenerationException() throws Exception { + // Given + SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() + .selectedCredentials(Arrays.asList("cred-123")) + .build(); + + when(presentationSubmissionService.submitPresentation( + any(), any(), any(), any(), any())) + .thenThrow(new KeyGenerationException("Key generation failed", null)); + + // When + ResponseEntity response = presentationActionService.handlePresentationAction( + WALLET_ID, PRESENTATION_ID, request, sessionData, BASE64_KEY); + + // Then - should return internal server error + assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode()); + } + + @Test + public void testHandlePresentationAction_Submission_DecryptionException() throws Exception { + // Given + SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() + .selectedCredentials(Arrays.asList("cred-123")) + .build(); + + when(presentationSubmissionService.submitPresentation( + any(), any(), any(), any(), any())) + .thenThrow(new DecryptionException("Decryption failed", null)); + + // When + ResponseEntity response = presentationActionService.handlePresentationAction( + WALLET_ID, PRESENTATION_ID, request, sessionData, BASE64_KEY); + + // Then - should return internal server error + assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode()); + } + + @Test + public void testHandlePresentationAction_Submission_ApiNotAccessibleException() throws Exception { + // Given + SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() + .selectedCredentials(Arrays.asList("cred-123")) + .build(); + + when(presentationSubmissionService.submitPresentation( + any(), any(), any(), any(), any())) + .thenThrow(new ApiNotAccessibleException("API not accessible")); + + // When + ResponseEntity response = presentationActionService.handlePresentationAction( + WALLET_ID, PRESENTATION_ID, request, sessionData, BASE64_KEY); + + // Then - should return internal server error + assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode()); + } + + @Test + public void testHandlePresentationAction_Submission_IOException() throws Exception { + // Given + SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() + .selectedCredentials(Arrays.asList("cred-123")) + .build(); + + when(presentationSubmissionService.submitPresentation( + any(), any(), any(), any(), any())) + .thenThrow(new IOException("IO error")); + + // When + ResponseEntity response = presentationActionService.handlePresentationAction( + WALLET_ID, PRESENTATION_ID, request, sessionData, BASE64_KEY); + + // Then - should return internal server error + assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode()); + } + + @Test + public void testHandlePresentationAction_Rejection_VPErrorNotSentException() throws Exception { + // Given + SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() + .errorCode("access_denied") + .errorMessage("User denied") + .build(); + + when(presentationService.rejectVerifier(any(), any(), any())) + .thenThrow(new VPErrorNotSentException("Failed to send error to verifier")); + + // When + ResponseEntity response = presentationActionService.handlePresentationAction( + WALLET_ID, PRESENTATION_ID, request, sessionData, BASE64_KEY); + + // Then - should return internal server error + assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode()); + } + + @Test + public void testHandlePresentationAction_RejectionWithNullWalletKey() { + // Given - rejection doesn't need wallet key + SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() + .errorCode("access_denied") + .errorMessage("User denied authorization") + .build(); + + RejectedVerifierDTO expectedResponse = new RejectedVerifierDTO( + "success", + null, + "Presentation request rejected." + ); + + when(presentationService.rejectVerifier(eq(WALLET_ID), eq(sessionData), any(ErrorDTO.class))) + .thenReturn(expectedResponse); + + // When - wallet key is null but should still work for rejection + ResponseEntity response = presentationActionService.handlePresentationAction( + WALLET_ID, PRESENTATION_ID, request, sessionData, null); + + // Then + assertEquals(HttpStatus.OK, response.getStatusCode()); + verify(presentationService, times(1)).rejectVerifier(any(), any(), any()); + } + + @Test + public void testHandlePresentationAction_SubmissionWithMultipleCredentials() throws Exception { + // Given + SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() + .selectedCredentials(Arrays.asList("cred-1", "cred-2", "cred-3", "cred-4")) + .build(); + + SubmitPresentationResponseDTO expectedResponse = SubmitPresentationResponseDTO.builder() + .presentationId(PRESENTATION_ID) + .status("SUCCESS") + .message("Presentation successfully submitted") + .build(); + + when(presentationSubmissionService.submitPresentation( + any(), any(), any(), any(), any())) + .thenReturn(expectedResponse); + + // When + ResponseEntity response = presentationActionService.handlePresentationAction( + WALLET_ID, PRESENTATION_ID, request, sessionData, BASE64_KEY); + + // Then + assertEquals(HttpStatus.OK, response.getStatusCode()); + verify(presentationSubmissionService, times(1)).submitPresentation( + eq(sessionData), eq(WALLET_ID), eq(PRESENTATION_ID), eq(request), eq(BASE64_KEY)); + } +} + diff --git a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java index e3263f36f..9f0b14649 100644 --- a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java @@ -3,19 +3,30 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import io.mosip.mimoto.constant.CredentialFormat; +import io.mosip.mimoto.dto.ErrorDTO; +import io.mosip.mimoto.dto.VerifiablePresentationResponseDTO; import io.mosip.mimoto.dto.mimoto.VCCredentialProperties; import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; import io.mosip.mimoto.dto.mimoto.VCCredentialResponseProof; +import io.mosip.mimoto.dto.openid.VerifierDTO; +import io.mosip.mimoto.dto.openid.VerifiersDTO; +import io.mosip.mimoto.dto.openid.presentation.FieldDTO; import io.mosip.mimoto.dto.openid.presentation.InputDescriptorDTO; import io.mosip.mimoto.dto.openid.presentation.PresentationDefinitionDTO; import io.mosip.mimoto.dto.openid.presentation.PresentationRequestDTO; +import io.mosip.mimoto.exception.ErrorConstants; +import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; +import io.mosip.mimoto.exception.VPErrorNotSentException; import io.mosip.mimoto.exception.VPNotCreatedException; import io.mosip.mimoto.service.impl.DataShareServiceImpl; +import io.mosip.mimoto.service.impl.OpenID4VPService; import io.mosip.mimoto.service.impl.PresentationServiceImpl; -import io.mosip.mimoto.service.impl.VerifierServiceImpl; import io.mosip.mimoto.util.JwtUtils; import io.mosip.mimoto.util.RestApiClient; import io.mosip.mimoto.util.TestUtilities; +import io.mosip.openID4VP.OpenID4VP; +import io.mosip.openID4VP.authorizationRequest.Verifier; +import io.mosip.openID4VP.networkManager.NetworkResponse; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -24,42 +35,75 @@ import org.mockito.MockedStatic; import org.mockito.junit.MockitoJUnitRunner; import org.springframework.test.util.ReflectionTestUtils; +import io.mosip.mimoto.dto.RejectedVerifierDTO; import java.io.IOException; -import java.util.Arrays; -import java.util.List; -import java.util.Map; +import java.time.Instant; +import java.util.*; +import static io.mosip.mimoto.exception.ErrorConstants.REJECTED_VERIFIER; import static io.mosip.mimoto.util.JwtUtils.parseJwtHeader; import static org.junit.Assert.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.Assert.assertNull; +import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.*; +import static io.mosip.mimoto.util.TestUtilities.*; @RunWith(MockitoJUnitRunner.class) public class PresentationServiceTest { @Mock - VerifierService verifierService = new VerifierServiceImpl(); - + VerifierService verifierService; @Mock DataShareServiceImpl dataShareService; @Mock ObjectMapper objectMapper; + @Mock + private OpenID4VPService openID4VPService; + @Mock RestApiClient restApiClient; @InjectMocks PresentationServiceImpl presentationService; + String walletId, clientId, urlEncodedVPAuthorizationRequest; + VerifiersDTO verifiersDTO; + VerifierDTO verifierDTO; + List preRegisteredVerifiers; + UUID fixedUuid; + Instant fixedInstant; + @Before public void setup() throws JsonProcessingException { ReflectionTestUtils.setField(presentationService, "injiOvpRedirectURLPattern", "%s#vp_token=%s&presentation_submission=%s"); ReflectionTestUtils.setField(presentationService, "maximumResponseHeaderSize", 65536); when(objectMapper.writeValueAsString(any())).thenReturn("test-data"); + + // Setup for Wallet presentation tests + walletId = "wallet-123"; + clientId = "test-clientId"; + urlEncodedVPAuthorizationRequest = + "client_id=test-clientId&presentation_definition_uri=https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fpresentation_definition_uri&response_type=vp_token&response_mode=direct_post&nonce=NHgLcWlae745DpfJbUyfdg%253D%253D&response_uri=https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fvp-response&state=pcmxBfvdPEcjFObgt%252BLekA%253D%253D"; + + verifierDTO = new VerifierDTO( + clientId, + List.of("redirect-uri"), + List.of("https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fvp-response"), + null, + false + ); + verifiersDTO = new VerifiersDTO(); + verifiersDTO.setVerifiers(List.of(verifierDTO)); + preRegisteredVerifiers = List.of( + new Verifier(verifierDTO.getClientId(), verifierDTO.getResponseUris(), null) + ); + + fixedUuid = UUID.fromString("123e4567-e89b-12d3-a456-426614174000"); + fixedInstant = Instant.parse("2025-09-08T12:34:56Z"); } @Test @@ -170,6 +214,82 @@ public void constructPresentationDefinitionForSdJwtCredential() { } } + @Test + public void testHandleVPAuthorizationRequest_successful() throws Exception { + try (MockedStatic mockedStatic = mockStatic(UUID.class); + MockedStatic mockedInstant = mockStatic(Instant.class)) { + + mockedStatic.when(UUID::randomUUID).thenReturn(fixedUuid); + mockedInstant.when(Instant::now).thenReturn(fixedInstant); + + when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); + when(verifierService.isVerifierTrustedByWallet(clientId, walletId)).thenReturn(true); + + OpenID4VP mockOpenID4VP = mock(OpenID4VP.class); + when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + when(mockOpenID4VP.authenticateVerifier(urlEncodedVPAuthorizationRequest, preRegisteredVerifiers, false)) + .thenReturn(getPresentationAuthorizationRequest(clientId, "https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fvp-response")); + + VerifiablePresentationResponseDTO expectedPresentationResponseDTO = getVerifiablePresentationResponseDTO("test-clientId", "test-clientId", null, true, true, "https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fvp-response", mockOpenID4VP, fixedInstant); + + VerifiablePresentationResponseDTO actualPresentationResponseDTO = + presentationService.handleVPAuthorizationRequest(urlEncodedVPAuthorizationRequest, walletId); + + assertEquals(expectedPresentationResponseDTO, actualPresentationResponseDTO); + } + } + + @Test + public void testHandleVPAuthorizationRequest_untrustedVerifier() throws Exception { + try (MockedStatic mockedStatic = mockStatic(UUID.class); + MockedStatic mockedInstant = mockStatic(Instant.class)) { + + mockedStatic.when(UUID::randomUUID).thenReturn(fixedUuid); + mockedInstant.when(Instant::now).thenReturn(fixedInstant); + + when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); + when(verifierService.isVerifierTrustedByWallet(clientId, walletId)).thenReturn(false); + + OpenID4VP mockOpenID4VP = mock(OpenID4VP.class); + when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + when(mockOpenID4VP.authenticateVerifier(urlEncodedVPAuthorizationRequest, preRegisteredVerifiers, false)) + .thenReturn(getPresentationAuthorizationRequest(clientId, "https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fvp-response")); + + VerifiablePresentationResponseDTO expectedPresentationResponseDTO = getVerifiablePresentationResponseDTO("test-clientId", "test-clientId", null, false, true, "https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fvp-response", mockOpenID4VP, fixedInstant); + + VerifiablePresentationResponseDTO actualPresentationResponseDTO = + presentationService.handleVPAuthorizationRequest(urlEncodedVPAuthorizationRequest, walletId); + + assertEquals(expectedPresentationResponseDTO, actualPresentationResponseDTO); + } + } + + @Test + public void testHandleVPAuthorizationRequest_verifierNotPreRegisteredWithWallet() throws Exception { + clientId = "unknown-clientId"; + try (MockedStatic mockedStatic = mockStatic(UUID.class); + MockedStatic mockedInstant = mockStatic(Instant.class)) { + + mockedStatic.when(UUID::randomUUID).thenReturn(fixedUuid); + mockedInstant.when(Instant::now).thenReturn(fixedInstant); + + when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); + when(verifierService.isVerifierTrustedByWallet(clientId, walletId)).thenReturn(false); + + OpenID4VP mockOpenID4VP = mock(OpenID4VP.class); + when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + when(mockOpenID4VP.authenticateVerifier(urlEncodedVPAuthorizationRequest, preRegisteredVerifiers, false)) + .thenReturn(getPresentationAuthorizationRequest(clientId, "https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fvp-response")); + + VerifiablePresentationResponseDTO expectedPresentationResponseDTO = getVerifiablePresentationResponseDTO("unknown-clientId", "unknown-clientId", null, false, false, "https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fvp-response", mockOpenID4VP, fixedInstant); + + VerifiablePresentationResponseDTO actualPresentationResponseDTO = + presentationService.handleVPAuthorizationRequest(urlEncodedVPAuthorizationRequest, walletId); + + assertEquals(expectedPresentationResponseDTO, actualPresentationResponseDTO); + } + } + // Helper methods private VCCredentialResponse createSDJwtCredentialResponse(String format) { VCCredentialResponse response = new VCCredentialResponse(); @@ -342,4 +462,356 @@ public void testMissingInputDescriptors() throws Exception { presentationService.authorizePresentation(presentationRequestDTO); } + + @Test + public void testDirectPostResponseModeWithoutRedirectUri() throws Exception { + VCCredentialResponse vcCredentialResponse = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); + PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); + presentationRequestDTO.setResponseMode("direct_post"); + presentationRequestDTO.setResponseUri("https://verifier.example.com/response"); + presentationRequestDTO.setState("test-state"); + presentationRequestDTO.setNonce("test-nonce"); + + // Mock response without redirect_uri + Map mockResponse = Map.of("status", "success"); + + when(dataShareService.downloadCredentialFromDataShare(eq(presentationRequestDTO))).thenReturn(vcCredentialResponse); + when(objectMapper.convertValue(eq(vcCredentialResponse.getCredential()), eq(VCCredentialProperties.class))) + .thenReturn((VCCredentialProperties) vcCredentialResponse.getCredential()); + when(restApiClient.postApi(anyString(), any(), any(), eq(Map.class))).thenReturn(mockResponse); + + String result = presentationService.authorizePresentation(presentationRequestDTO); + + assertEquals("https://verifier.example.com/response?status=vp_sent", result); + verify(restApiClient).postApi(eq("https://verifier.example.com/response"), any(), any(), eq(Map.class)); + } + + @Test(expected = VPNotCreatedException.class) + public void testDirectPostResponseModeWithException() throws Exception { + VCCredentialResponse vcCredentialResponse = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); + PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); + presentationRequestDTO.setResponseMode("direct_post"); + presentationRequestDTO.setResponseUri("https://verifier.example.com/response"); + presentationRequestDTO.setState("test-state"); + presentationRequestDTO.setNonce("test-nonce"); + + when(dataShareService.downloadCredentialFromDataShare(eq(presentationRequestDTO))).thenReturn(vcCredentialResponse); + when(objectMapper.convertValue(eq(vcCredentialResponse.getCredential()), eq(VCCredentialProperties.class))) + .thenReturn((VCCredentialProperties) vcCredentialResponse.getCredential()); + when(restApiClient.postApi(anyString(), any(), any(), eq(Map.class))) + .thenThrow(new RuntimeException("Network error")); + + presentationService.authorizePresentation(presentationRequestDTO); + } + + @Test + public void testConstructPresentationDefinitionForSdJwtWithMapType() { + VCCredentialResponse vcCredentialResponse = createSDJwtCredentialResponse("dc+sd-jwt"); + + // Create complex type structure with Map containing _value + Map typeMap = new HashMap<>(); + typeMap.put("_value", "TestCredential"); + + Map jwtPayload = Map.of("type", Arrays.asList("VerifiableCredential", typeMap)); + Map jwtHeaders = Map.of("alg", "ES256", "typ", "JWT"); + + try (MockedStatic jwtUtilsMock = mockStatic(JwtUtils.class)) { + jwtUtilsMock.when(() -> JwtUtils.extractJwtPayloadFromSdJwt(anyString())).thenReturn(jwtPayload); + jwtUtilsMock.when(() -> JwtUtils.parseJwtHeader(anyString())).thenReturn(jwtHeaders); + + PresentationDefinitionDTO result = presentationService.constructPresentationDefinition(vcCredentialResponse); + + assertNotNull(result); + assertEquals(1, result.getInputDescriptors().size()); + assertTrue(result.getInputDescriptors().get(0).getFormat().containsKey("dc+sd-jwt")); + + // Verify the filter pattern is set to the extracted type + InputDescriptorDTO inputDescriptor = result.getInputDescriptors().get(0); + FieldDTO field = inputDescriptor.getConstraints().getFields()[0]; + assertEquals("TestCredential", field.getFilter().getPattern()); + } + } + + @Test + public void testConstructPresentationDefinitionForSdJwtWithStringType() { + VCCredentialResponse vcCredentialResponse = createSDJwtCredentialResponse("vc+sd-jwt"); + + // Create simple type structure with String + Map jwtPayload = Map.of("type", Arrays.asList("VerifiableCredential", "TestCredential")); + Map jwtHeaders = Map.of("alg", "ES256", "typ", "JWT"); + + try (MockedStatic jwtUtilsMock = mockStatic(JwtUtils.class)) { + jwtUtilsMock.when(() -> JwtUtils.extractJwtPayloadFromSdJwt(anyString())).thenReturn(jwtPayload); + jwtUtilsMock.when(() -> JwtUtils.parseJwtHeader(anyString())).thenReturn(jwtHeaders); + + PresentationDefinitionDTO result = presentationService.constructPresentationDefinition(vcCredentialResponse); + + assertNotNull(result); + assertEquals(1, result.getInputDescriptors().size()); + assertTrue(result.getInputDescriptors().get(0).getFormat().containsKey("vc+sd-jwt")); + + // Verify the filter pattern is set to the extracted type + InputDescriptorDTO inputDescriptor = result.getInputDescriptors().get(0); + FieldDTO field = inputDescriptor.getConstraints().getFields()[0]; + assertEquals("TestCredential", field.getFilter().getPattern()); + } + } + + @Test + public void testConstructPresentationDefinitionForSdJwtWithNullType() { + VCCredentialResponse vcCredentialResponse = createSDJwtCredentialResponse("vc+sd-jwt"); + + // Create payload with null type using HashMap to allow null values + Map jwtPayload = new HashMap<>(); + jwtPayload.put("type", null); + Map jwtHeaders = Map.of("alg", "ES256", "typ", "JWT"); + + try (MockedStatic jwtUtilsMock = mockStatic(JwtUtils.class)) { + jwtUtilsMock.when(() -> JwtUtils.extractJwtPayloadFromSdJwt(anyString())).thenReturn(jwtPayload); + jwtUtilsMock.when(() -> JwtUtils.parseJwtHeader(anyString())).thenReturn(jwtHeaders); + + PresentationDefinitionDTO result = presentationService.constructPresentationDefinition(vcCredentialResponse); + + assertNotNull(result); + assertEquals(1, result.getInputDescriptors().size()); + assertTrue(result.getInputDescriptors().get(0).getFormat().containsKey("vc+sd-jwt")); + + // Verify the filter pattern is null when type is null + InputDescriptorDTO inputDescriptor = result.getInputDescriptors().get(0); + FieldDTO field = inputDescriptor.getConstraints().getFields()[0]; + assertNull(field.getFilter().getPattern()); + } + } + + @Test + public void testConstructPresentationDefinitionForSdJwtWithEmptyTypeList() { + VCCredentialResponse vcCredentialResponse = createSDJwtCredentialResponse("dc+sd-jwt"); + + // Create payload with empty type list + Map jwtPayload = Map.of("type", Arrays.asList()); + Map jwtHeaders = Map.of("alg", "ES256", "typ", "JWT"); + + try (MockedStatic jwtUtilsMock = mockStatic(JwtUtils.class)) { + jwtUtilsMock.when(() -> JwtUtils.extractJwtPayloadFromSdJwt(anyString())).thenReturn(jwtPayload); + jwtUtilsMock.when(() -> JwtUtils.parseJwtHeader(anyString())).thenReturn(jwtHeaders); + + PresentationDefinitionDTO result = presentationService.constructPresentationDefinition(vcCredentialResponse); + + assertNotNull(result); + assertEquals(1, result.getInputDescriptors().size()); + assertTrue(result.getInputDescriptors().get(0).getFormat().containsKey("dc+sd-jwt")); + + // Verify the filter pattern is null when type list is empty + InputDescriptorDTO inputDescriptor = result.getInputDescriptors().get(0); + FieldDTO field = inputDescriptor.getConstraints().getFields()[0]; + assertNull(field.getFilter().getPattern()); + } + } + + @Test + public void testConstructPresentationDefinitionForSdJwtWithMapTypeNullValue() { + VCCredentialResponse vcCredentialResponse = createSDJwtCredentialResponse("vc+sd-jwt"); + + // Create complex type structure with Map containing null _value + Map typeMap = new HashMap<>(); + typeMap.put("_value", null); + + Map jwtPayload = Map.of("type", Arrays.asList("VerifiableCredential", typeMap)); + Map jwtHeaders = Map.of("alg", "ES256", "typ", "JWT"); + + try (MockedStatic jwtUtilsMock = mockStatic(JwtUtils.class)) { + jwtUtilsMock.when(() -> JwtUtils.extractJwtPayloadFromSdJwt(anyString())).thenReturn(jwtPayload); + jwtUtilsMock.when(() -> JwtUtils.parseJwtHeader(anyString())).thenReturn(jwtHeaders); + + PresentationDefinitionDTO result = presentationService.constructPresentationDefinition(vcCredentialResponse); + + assertNotNull(result); + assertEquals(1, result.getInputDescriptors().size()); + assertTrue(result.getInputDescriptors().get(0).getFormat().containsKey("vc+sd-jwt")); + + // Verify the filter pattern is null when _value is null + InputDescriptorDTO inputDescriptor = result.getInputDescriptors().get(0); + FieldDTO field = inputDescriptor.getConstraints().getFields()[0]; + assertNull(field.getFilter().getPattern()); + } + } + + @Test + public void testDirectPostResponseModeWithEmptyRedirectUri() throws Exception { + VCCredentialResponse vcCredentialResponse = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); + PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); + presentationRequestDTO.setResponseMode("direct_post"); + presentationRequestDTO.setResponseUri("https://verifier.example.com/response"); + presentationRequestDTO.setState("test-state"); + presentationRequestDTO.setNonce("test-nonce"); + + // Mock response with empty redirect_uri + Map mockResponse = Map.of("redirect_uri", ""); + + when(dataShareService.downloadCredentialFromDataShare(eq(presentationRequestDTO))).thenReturn(vcCredentialResponse); + when(objectMapper.convertValue(eq(vcCredentialResponse.getCredential()), eq(VCCredentialProperties.class))) + .thenReturn((VCCredentialProperties) vcCredentialResponse.getCredential()); + when(restApiClient.postApi(anyString(), any(), any(), eq(Map.class))).thenReturn(mockResponse); + + String result = presentationService.authorizePresentation(presentationRequestDTO); + + assertEquals("https://verifier.example.com/response?status=vp_sent", result); + verify(restApiClient).postApi(eq("https://verifier.example.com/response"), any(), any(), eq(Map.class)); + } + + @Test + public void testAuthorizePresentationWithJsonProcessingException() throws Exception { + VCCredentialResponse vcCredentialResponse = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); + PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); + + when(dataShareService.downloadCredentialFromDataShare(eq(presentationRequestDTO))).thenReturn(vcCredentialResponse); + when(objectMapper.convertValue(eq(vcCredentialResponse.getCredential()), eq(VCCredentialProperties.class))) + .thenReturn((VCCredentialProperties) vcCredentialResponse.getCredential()); + + // Mock objectMapper.writeValueAsString to throw JsonProcessingException + when(objectMapper.writeValueAsString(any())).thenThrow(new JsonProcessingException("JSON processing error") {}); + + // Act & Assert + VPNotCreatedException exception = assertThrows(VPNotCreatedException.class, () -> { + presentationService.authorizePresentation(presentationRequestDTO); + }); + + assertEquals(ErrorConstants.INVALID_REQUEST.getErrorCode() + " --> " + ErrorConstants.INVALID_REQUEST.getErrorMessage(), exception.getMessage()); + } + + @Test + public void testRejectVerifierSuccess() throws Exception { + String walletId = "wallet-123"; + ErrorDTO payload = new ErrorDTO("access_denied", "User denied authorization"); + + // Create session data using the actual constructor (presentationId, authorizationRequest, createdAt, isPreregisteredWithWallet, matchedCredentials) + String presentationId = "presentation-123"; + String authorizationRequest = "authorization-request"; + VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData( + presentationId, + authorizationRequest, + Instant.now(), + true, + null + ); + + NetworkResponse mockResponse = mock(NetworkResponse.class); + when(openID4VPService.sendErrorToVerifier(eq(sessionData), eq(payload))).thenReturn(mockResponse); + + // Should not throw + presentationService.rejectVerifier(walletId, sessionData, payload); + + verify(openID4VPService).sendErrorToVerifier(eq(sessionData), eq(payload)); + } + + @Test(expected = VPErrorNotSentException.class) + public void testRejectVerifierNullOpenID4VPInstance() throws Exception { + String walletId = "wallet-123"; + ErrorDTO payload = new ErrorDTO("access_denied", "User denied authorization"); + + // Create session data that would cause underlying OpenID4VP to fail (simulate by making the mocked service throw) + String presentationId = "presentation-123"; + String authorizationRequest = "authorization-request"; + VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData( + presentationId, + authorizationRequest, + Instant.now(), + false, + null + ); + + // Simulate underlying service throwing an exception which PresentationServiceImpl should wrap into VPErrorNotSentException + doThrow(new IllegalArgumentException("OpenID4VP instance is null")).when(openID4VPService).sendErrorToVerifier(eq(sessionData), eq(payload)); + + presentationService.rejectVerifier(walletId, sessionData, payload); + } + + @Test(expected = VPErrorNotSentException.class) + public void testRejectVerifierMissingOpenID4VPInstance() throws Exception { + String walletId = "wallet-123"; + ErrorDTO payload = new ErrorDTO("access_denied", "User denied authorization"); + + String presentationId = "presentation-456"; + String authorizationRequest = "authorization-request-2"; + VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData( + presentationId, + authorizationRequest, + Instant.now(), + true, + null + ); + + // Simulate sendErrorToVerifier throwing IOException + doThrow(new IOException("network failure")).when(openID4VPService).sendErrorToVerifier(eq(sessionData), eq(payload)); + + presentationService.rejectVerifier(walletId, sessionData, payload); + } + + @Test(expected = VPErrorNotSentException.class) + public void testRejectVerifierNullSessionData() throws Exception { + String walletId = "wallet-123"; + ErrorDTO payload = new ErrorDTO("access_denied", "User denied authorization"); + + // Configure mock to throw when sendErrorToVerifier is invoked with null sessionData and the same payload instance + doThrow(new IllegalArgumentException("Invalid presentation session data")) + .when(openID4VPService).sendErrorToVerifier(isNull(), eq(payload)); + + // Call the service with null session data — PresentationServiceImpl should catch the underlying exception + // and rethrow VPErrorNotSentException, which this test now expects. + presentationService.rejectVerifier(walletId, null, payload); + } + + @Test + public void testRejectVerifierWithDifferentErrorCodes() throws Exception { + String walletId = "wallet-123"; + OpenID4VP mockOpenID4VP = mock(OpenID4VP.class); + String presentationId = "presentation-789"; + String authorizationRequest = "authorization-request-3"; + VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData( + presentationId, + authorizationRequest, + Instant.now(), + true, + null + ); + + ErrorDTO payload = new ErrorDTO("interaction_required", "Interaction required from user"); + NetworkResponse mockResponse = mock(NetworkResponse.class); + when(openID4VPService.sendErrorToVerifier(eq(sessionData), eq(payload))).thenReturn(mockResponse); + + presentationService.rejectVerifier(walletId, sessionData, payload); + + verify(openID4VPService).sendErrorToVerifier(eq(sessionData), eq(payload)); + } + + @Test + public void testRejectVerifierExtractsRedirectUriFromBody() throws Exception { + String walletId = "wallet-123"; + ErrorDTO payload = new ErrorDTO("access_denied", "User denied authorization"); + + String presentationId = "presentation-999"; + String authorizationRequest = "authorization-request-xyz"; + VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData( + presentationId, + authorizationRequest, + Instant.now(), + true, + null + ); + + // Inject a real ObjectMapper so JSON parsing in extractRedirectUriFromBody works + ReflectionTestUtils.setField(presentationService, "objectMapper", new com.fasterxml.jackson.databind.ObjectMapper()); + + NetworkResponse mockResponse = mock(NetworkResponse.class); + when(mockResponse.getBody()).thenReturn("{\"redirect_uri\":\"https://verifier.example.com/success\"}"); + when(openID4VPService.sendErrorToVerifier(eq(sessionData), eq(payload))).thenReturn(mockResponse); + + RejectedVerifierDTO result = presentationService.rejectVerifier(walletId, sessionData, payload); + + assertNotNull(result); + assertEquals("https://verifier.example.com/success", result.getRedirectUri()); + assertEquals(REJECTED_VERIFIER.getErrorCode(), result.getStatus()); + assertEquals(REJECTED_VERIFIER.getErrorMessage(), result.getMessage()); + } + } \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/PresentationSubmissionServiceTest.java b/src/test/java/io/mosip/mimoto/service/PresentationSubmissionServiceTest.java new file mode 100644 index 000000000..4c546a8c1 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/service/PresentationSubmissionServiceTest.java @@ -0,0 +1,1256 @@ +package io.mosip.mimoto.service; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.nimbusds.jose.*; +import io.mosip.mimoto.constant.OpenID4VPConstants; +import io.mosip.mimoto.constant.SigningAlgorithm; +import io.mosip.mimoto.dto.DecryptedCredentialDTO; +import io.mosip.mimoto.dto.SubmitPresentationRequestDTO; +import io.mosip.mimoto.dto.SubmitPresentationResponseDTO; +import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; +import io.mosip.mimoto.dto.openid.VerifierDTO; +import io.mosip.mimoto.dto.openid.VerifiersDTO; +import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.DecryptionException; +import io.mosip.mimoto.exception.KeyGenerationException; +import io.mosip.mimoto.model.CredentialMetadata; +import io.mosip.mimoto.model.VerifiablePresentation; +import io.mosip.mimoto.repository.VerifiablePresentationsRepository; +import io.mosip.mimoto.service.impl.OpenID4VPService; +import io.mosip.mimoto.service.impl.PresentationSubmissionServiceImpl; +import io.mosip.openID4VP.OpenID4VP; +import io.mosip.openID4VP.authorizationResponse.unsignedVPToken.UnsignedVPToken; +import io.mosip.openID4VP.authorizationResponse.unsignedVPToken.types.ldp.UnsignedLdpVPToken; +import io.mosip.openID4VP.authorizationResponse.vpTokenSigningResult.types.ldp.LdpVPTokenSigningResult; +import io.mosip.openID4VP.constants.FormatType; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; + +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.time.Instant; +import java.util.*; + +import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +/** + * Comprehensive test suite for PresentationSubmissionServiceImpl + * Tests all methods, lines, and branches for complete coverage + */ +@RunWith(MockitoJUnitRunner.class) +public class PresentationSubmissionServiceTest { + + @InjectMocks + private PresentationSubmissionServiceImpl presentationSubmissionService; + + @Mock + private ObjectMapper objectMapper; + + @Mock + private OpenID4VPService openID4VPService; + + @Mock + private VerifierService verifierService; + + @Mock + private KeyPairService keyPairService; + + @Mock + private VerifiablePresentationsRepository verifiablePresentationsRepository; + + @Mock + private OpenID4VP openID4VP; + + @Mock + private JWSSigner jwsSigner; + + private VerifiablePresentationSessionData sessionData; + private String walletId; + private String presentationId; + private String base64Key; + private SubmitPresentationRequestDTO request; + private KeyPair keyPair; + private VerifiersDTO verifiersDTO; + + @Before + public void setUp() throws Exception { + // Note: defaultSigningAlgorithmName is now a constant in the implementation + + walletId = "8a3d2c1b-4e5f-6a7b-8c9d-0e1f2a3b4c5d"; + presentationId = "vp-presentation-" + System.currentTimeMillis(); + base64Key = "VGhpc0lzQVNhbXBsZUJhc2U2NEVuY29kZWRXYWxsZXRLZXlGb3JUZXN0aW5nUHVycG9zZXM="; + request = SubmitPresentationRequestDTO.builder() + .selectedCredentials(Arrays.asList( + "vc-credential-123e4567-e89b-12d3-a456-426614174000", + "vc-credential-987f6543-e21a-98d7-b654-321098765432" + )) + .build(); + + sessionData = new VerifiablePresentationSessionData(); + sessionData.setPresentationId(presentationId); + sessionData.setAuthorizationRequest( + "openid4vp://?client_id=inji-verify-client-001" + + "&presentation_definition_uri=https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fpresentation_definition_uri" + + "&response_type=vp_token" + + "&response_mode=direct_post" + + "&nonce=NHgLcWlae745DpfJbUyfdg%3D%3D" + + "&response_uri=https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fvp-response" + + "&state=pcmxBfvdPEcjFObgt%2BLekA%3D%3D" + ); + sessionData.setCreatedAt(Instant.now()); + sessionData.setVerifierClientPreregistered(true); + sessionData.setMatchingCredentials(createMockDecryptedCredentials()); + + keyPair = generateKeyPairForAlgorithm(SigningAlgorithm.ED25519); + + VerifierDTO verifierDTO = VerifierDTO.builder() + .clientId("inji-verify-client-001") + .responseUris(Arrays.asList( + "https://inji-verify.collab.mosip.net/verifier/vp-response" + )) + .build(); + verifiersDTO = VerifiersDTO.builder() + .verifiers(Arrays.asList(verifierDTO)) + .build(); + } + + + @Test + public void testSubmitPresentationSuccess() throws Exception { + setupSuccessfulMocks(); + + SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( + sessionData, walletId, presentationId, request, base64Key); + + assertNotNull(response); + assertEquals(presentationId, response.getPresentationId()); + assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); + assertEquals(OpenID4VPConstants.MESSAGE_PRESENTATION_SUCCESS, response.getMessage()); + + verify(openID4VPService).create(presentationId); + verify(verifierService).getTrustedVerifiers(); + verify(keyPairService).getKeyPairFromDB(eq(walletId), eq(base64Key), any(SigningAlgorithm.class)); + verify(verifiablePresentationsRepository).save(any(VerifiablePresentation.class)); + } + + @Test + public void testSubmitPresentationSuccessWithMultipleCredentials() throws Exception { + request.setSelectedCredentials(Arrays.asList( + "vc-credential-123e4567-e89b-12d3-a456-426614174000", + "vc-credential-987f6543-e21a-98d7-b654-321098765432", + "vc-credential-456f7890-a12b-34c5-d678-901234567890" + )); + sessionData.setMatchingCredentials(createMockDecryptedCredentialsMultiple()); + setupSuccessfulMocks(); + + SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( + sessionData, walletId, presentationId, request, base64Key); + + assertNotNull(response); + assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); + } + + @Test + public void testSubmitPresentationSuccessWithSingleCredential() throws Exception { + request.setSelectedCredentials(Arrays.asList("vc-credential-123e4567-e89b-12d3-a456-426614174000")); + setupSuccessfulMocks(); + + SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( + sessionData, walletId, presentationId, request, base64Key); + + assertNotNull(response); + assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); + } + + @Test + public void testSubmitPresentationSuccessWithVerifierNotPreregistered() throws Exception { + sessionData.setVerifierClientPreregistered(false); + setupSuccessfulMocks(); + + SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( + sessionData, walletId, presentationId, request, base64Key); + + assertNotNull(response); + assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); + verify(openID4VP).authenticateVerifier(anyString(), anyList(), eq(false)); + } + + // NOTE: Tests for RS256 and ES256 algorithm failures removed because + // defaultSigningAlgorithmName is now a constant (ED25519) and cannot be changed. + // The implementation always uses ED25519 for LDP_VC format. + + @Test + public void testSubmitPresentationShareFailure() throws Exception { + setupMocksForShareFailure(); + + SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( + sessionData, walletId, presentationId, request, base64Key); + + assertNotNull(response); + assertEquals(presentationId, response.getPresentationId()); + assertEquals(OpenID4VPConstants.STATUS_ERROR, response.getStatus()); + assertEquals(OpenID4VPConstants.MESSAGE_PRESENTATION_SHARE_FAILED, response.getMessage()); + + ArgumentCaptor captor = ArgumentCaptor.forClass(VerifiablePresentation.class); + verify(verifiablePresentationsRepository).save(captor.capture()); + assertEquals(OpenID4VPConstants.STATUS_ERROR, captor.getValue().getStatus()); + } + + + // NOTE: Validation for sessionData, walletId, presentationId, and base64Key + // has been moved to PresentationActionService layer. + // PresentationSubmissionService now only validates request and selectedCredentials. + + @Test(expected = IllegalArgumentException.class) + public void testSubmitPresentationNullRequest() throws Exception { + presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, null, base64Key); + } + + @Test(expected = IllegalArgumentException.class) + public void testSubmitPresentationNullSelectedCredentials() throws Exception { + request.setSelectedCredentials(null); + presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, request, base64Key); + } + + @Test(expected = IllegalArgumentException.class) + public void testSubmitPresentationEmptySelectedCredentials() throws Exception { + request.setSelectedCredentials(Collections.emptyList()); + presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, request, base64Key); + } + + // NOTE: base64Key validation moved to PresentationActionService layer + + + @Test(expected = IllegalStateException.class) + public void testSubmitPresentationNoMatchingCredentialsInSession() throws Exception { + sessionData.setMatchingCredentials(null); + + presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, request, base64Key); + } + + @Test(expected = Exception.class) + public void testSubmitPresentationEmptyMatchingCredentialsInSession() throws Exception { + sessionData.setMatchingCredentials(Collections.emptyList()); + when(openID4VPService.create(anyString())).thenReturn(openID4VP); + + presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, request, base64Key); + } + + @Test(expected = ApiNotAccessibleException.class) + public void testSubmitPresentationVerifierServiceThrowsException() throws Exception { + when(openID4VPService.create(anyString())).thenReturn(openID4VP); + when(verifierService.getTrustedVerifiers()).thenThrow(new ApiNotAccessibleException()); + + presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, request, base64Key); + } + + @Test(expected = KeyGenerationException.class) + public void testSubmitPresentationKeyPairServiceThrowsException() throws Exception { + when(openID4VPService.create(anyString())).thenReturn(openID4VP); + when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); + when(openID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(null); + when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))) + .thenThrow(new KeyGenerationException("KEY_GEN_ERROR", "Key generation failed")); + + presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, request, base64Key); + } + + @Test(expected = DecryptionException.class) + public void testSubmitPresentationDecryptionException() throws Exception { + when(openID4VPService.create(anyString())).thenReturn(openID4VP); + when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); + when(openID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(null); + when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))) + .thenThrow(new DecryptionException("DECRYPTION_ERROR", "Decryption failed")); + + presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, request, base64Key); + } + + @Test(expected = Exception.class) + public void testSubmitPresentationIOException() throws Exception { + + + presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, request, base64Key); + } + + @Test(expected = Exception.class) + public void testSubmitPresentationJOSEException() throws Exception { + + setupMocksUpToSigning(); + when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))) + .thenThrow(new RuntimeException("Key retrieval failed")); + + presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, request, base64Key); + } + + + @Test + public void testSubmitPresentationWithLdpVcFormat() throws Exception { + List ldpCredentials = createMockDecryptedCredentialsWithFormat("ldp_vc"); + request.setSelectedCredentials(Arrays.asList("vc-credential-format-test-1", "vc-credential-format-test-2")); + sessionData.setMatchingCredentials(ldpCredentials); + setupSuccessfulMocks(); + + SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( + sessionData, walletId, presentationId, request, base64Key); + + assertNotNull(response); + assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); + } + + @Test + public void testSubmitPresentationWithMsoMdocFormat() throws Exception { + List msoMdocCredentials = createMockDecryptedCredentialsWithFormat("mso_mdoc"); + request.setSelectedCredentials(Arrays.asList("vc-credential-format-test-1", "vc-credential-format-test-2")); + sessionData.setMatchingCredentials(msoMdocCredentials); + setupSuccessfulMocksForMsoMdoc(); + + SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( + sessionData, walletId, presentationId, request, base64Key); + + assertNotNull(response); + assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); + } + + @Test + public void testSubmitPresentationWithMixedFormats() throws Exception { + List mixedCredentials = createMockDecryptedCredentialsWithMixedFormats(); + request.setSelectedCredentials(Arrays.asList("vc-credential-mixed-ldp-1", "vc-credential-mixed-mdoc-2")); + sessionData.setMatchingCredentials(mixedCredentials); + setupSuccessfulMocksForMixedFormats(); + + SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( + sessionData, walletId, presentationId, request, base64Key); + + assertNotNull(response); + assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); + } + + + @Test + public void testSubmitPresentationStoresPresentationRecordCorrectly() throws Exception { + setupSuccessfulMocks(); + ArgumentCaptor captor = ArgumentCaptor.forClass(VerifiablePresentation.class); + + presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, request, base64Key); + + verify(verifiablePresentationsRepository).save(captor.capture()); + VerifiablePresentation saved = captor.getValue(); + assertEquals(presentationId, saved.getId()); + assertEquals(walletId, saved.getWalletId()); + assertEquals(OpenID4VPConstants.STATUS_SUCCESS, saved.getStatus()); + assertTrue(saved.getConsent()); + assertNotNull(saved.getAuthRequest()); + assertNotNull(saved.getPresentationData()); + assertNotNull(saved.getVerifierId()); + assertNotNull(saved.getRequestedAt()); + } + + @Test + public void testSubmitPresentationStoresCorrectVerifierId() throws Exception { + setupSuccessfulMocks(); + ArgumentCaptor captor = ArgumentCaptor.forClass(VerifiablePresentation.class); + + presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, request, base64Key); + + verify(verifiablePresentationsRepository).save(captor.capture()); + VerifiablePresentation saved = captor.getValue(); + assertEquals("inji-verify-client-001", saved.getVerifierId()); // From mock data in setUp() + } + + @Test + public void testSubmitPresentationHandlesDatabaseException() throws Exception { + setupSuccessfulMocks(); + doThrow(new RuntimeException("Database error")) + .when(verifiablePresentationsRepository).save(any(VerifiablePresentation.class)); + + SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( + sessionData, walletId, presentationId, request, base64Key); + + assertNotNull(response); + assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); + } + + @Test + public void testSubmitPresentationStoresErrorStatusOnShareFailure() throws Exception { + setupMocksForShareFailure(); + ArgumentCaptor captor = ArgumentCaptor.forClass(VerifiablePresentation.class); + + presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, request, base64Key); + + verify(verifiablePresentationsRepository).save(captor.capture()); + VerifiablePresentation saved = captor.getValue(); + assertEquals(OpenID4VPConstants.STATUS_ERROR, saved.getStatus()); + } + + + @Test + public void testSubmitPresentationExtractsVerifierIdFromUrl() throws Exception { + sessionData.setAuthorizationRequest("https://verifier.com/authorize?client_id=extracted-client-id&other=param"); + setupSuccessfulMocks(); + ArgumentCaptor captor = ArgumentCaptor.forClass(VerifiablePresentation.class); + + presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, request, base64Key); + + verify(verifiablePresentationsRepository).save(captor.capture()); + assertNotNull(captor.getValue().getVerifierId()); + } + + @Test + public void testSubmitPresentationHandlesNullAuthorizationRequest() throws Exception { + sessionData.setAuthorizationRequest(null); + setupSuccessfulMocks(); + ArgumentCaptor captor = ArgumentCaptor.forClass(VerifiablePresentation.class); + + presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, request, base64Key); + + verify(verifiablePresentationsRepository).save(captor.capture()); + assertNotNull(captor.getValue().getVerifierId()); + } + + + @Test + public void testSignMsoMdocFormatWithMultipleDocTypes() throws Exception { + setupSuccessfulMocksForMsoMdocWithMultipleDocTypes(); + List credentials = createMockDecryptedCredentialsForMsoMdocMultipleDocTypes(); + request.setSelectedCredentials(Arrays.asList("vc-credential-mdoc-multi-1", "vc-credential-mdoc-multi-2")); + sessionData.setMatchingCredentials(credentials); + + SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( + sessionData, walletId, presentationId, request, base64Key); + + assertNotNull(response); + assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); + } + + @Test + public void testSignMsoMdocFormatWithEmptyDocTypes() throws Exception { + setupSuccessfulMocksForMsoMdocWithEmptyDocTypes(); + List credentials = createMockDecryptedCredentialsForMsoMdocEmpty(); + request.setSelectedCredentials(Arrays.asList("vc-credential-mdoc-empty-1")); + sessionData.setMatchingCredentials(credentials); + + SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( + sessionData, walletId, presentationId, request, base64Key); + + assertNotNull(response); + assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); + } + + @Test + public void testSignMsoMdocFormatWithNullDocTypeToDeviceAuthenticationBytes() throws Exception { + setupSuccessfulMocksForMsoMdocWithNullDocTypes(); + List credentials = createMockDecryptedCredentialsForMsoMdocNullDocTypes(); + request.setSelectedCredentials(Arrays.asList("vc-credential-mdoc-null-1")); + sessionData.setMatchingCredentials(credentials); + + SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( + sessionData, walletId, presentationId, request, base64Key); + + assertNotNull(response); + assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); + } + + @Test + public void testSignMsoMdocFormatWithMissingDocTypeToDeviceAuthenticationBytes() throws Exception { + setupSuccessfulMocksForMsoMdocWithMissingDocTypeKey(); + List credentials = createMockDecryptedCredentialsForMsoMdocEmpty(); + request.setSelectedCredentials(Arrays.asList("vc-credential-mdoc-missing-key-1")); + sessionData.setMatchingCredentials(credentials); + + SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( + sessionData, walletId, presentationId, request, base64Key); + + assertNotNull(response); + assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); + } + + @Test(expected = RuntimeException.class) + public void testSignMsoMdocFormatThrowsExceptionOnSigningFailure() throws Exception { + when(openID4VPService.create(anyString())).thenReturn(openID4VP); + when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); + when(openID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(null); + + KeyPair es256KeyPair = generateKeyPairForAlgorithm(SigningAlgorithm.ES256); + when(keyPairService.getKeyPairFromDB(anyString(), anyString(), eq(SigningAlgorithm.ED25519))) + .thenReturn(keyPair); + when(keyPairService.getKeyPairFromDB(anyString(), anyString(), eq(SigningAlgorithm.ES256))) + .thenReturn(es256KeyPair); + + Map unsignedVPTokenMap = new HashMap<>(); + UnsignedVPToken msoMdocToken = mock(UnsignedVPToken.class); + unsignedVPTokenMap.put(FormatType.MSO_MDOC, msoMdocToken); + + when(openID4VP.constructUnsignedVPToken(anyMap(), anyString(), anyString())) + .thenReturn(unsignedVPTokenMap); + + Map complexPayload = new HashMap<>(); + complexPayload.put("circularRef", complexPayload); + Map docTypeMap = new HashMap<>(); + docTypeMap.put("docTypeToDeviceAuthenticationBytes", new HashMap() {{ + put("org.iso.18013.5.1.mDL", complexPayload); + }}); + when(objectMapper.convertValue(any(UnsignedVPToken.class), eq(Map.class))) + .thenReturn(docTypeMap); + when(objectMapper.writeValueAsBytes(any())).thenThrow(new RuntimeException("Serialization failed")); + + List credentials = createMockDecryptedCredentialsForMsoMdocMultipleDocTypes(); + request.setSelectedCredentials(Arrays.asList("vc-credential-mdoc-fail-1")); + sessionData.setMatchingCredentials(credentials); + + presentationSubmissionService.submitPresentation( + sessionData, walletId, presentationId, request, base64Key); + } + + @Test + public void testResolveHolderIdCreatesCorrectDidJwk() throws Exception { + setupSuccessfulMocks(); + + presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, request, base64Key); + + verify(openID4VP).constructUnsignedVPToken(anyMap(), argThat(holderId -> + holderId != null && holderId.startsWith("did:jwk:")), anyString()); + } + + + @Test + public void testMapStringToFormatTypeLdpVcUnderscore() throws Exception { + List credentials = createMockDecryptedCredentialsWithFormat("ldp_vc"); + request.setSelectedCredentials(Arrays.asList("vc-credential-format-test-1", "vc-credential-format-test-2")); + sessionData.setMatchingCredentials(credentials); + setupSuccessfulMocks(); + + SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( + sessionData, walletId, presentationId, request, base64Key); + + assertNotNull(response); + assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); + } + + @Test + public void testMapStringToFormatTypeLdpVcHyphen() throws Exception { + List credentials = createMockDecryptedCredentialsWithFormat("ldp-vc"); + request.setSelectedCredentials(Arrays.asList("vc-credential-format-test-1", "vc-credential-format-test-2")); + sessionData.setMatchingCredentials(credentials); + setupSuccessfulMocks(); + + SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( + sessionData, walletId, presentationId, request, base64Key); + + assertNotNull(response); + assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); + } + + @Test + public void testMapStringToFormatTypeMsoMdocUnderscore() throws Exception { + List credentials = createMockDecryptedCredentialsWithFormat("mso_mdoc"); + request.setSelectedCredentials(Arrays.asList("vc-credential-format-test-1", "vc-credential-format-test-2")); + sessionData.setMatchingCredentials(credentials); + setupSuccessfulMocksForMsoMdoc(); + + SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( + sessionData, walletId, presentationId, request, base64Key); + + assertNotNull(response); + assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); + } + + @Test + public void testMapStringToFormatTypeMsoMdocHyphen() throws Exception { + List credentials = createMockDecryptedCredentialsWithFormat("mso-mdoc"); + request.setSelectedCredentials(Arrays.asList("vc-credential-format-test-1", "vc-credential-format-test-2")); + sessionData.setMatchingCredentials(credentials); + setupSuccessfulMocksForMsoMdoc(); + + SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( + sessionData, walletId, presentationId, request, base64Key); + + assertNotNull(response); + assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); + } + + @Test + public void testMapStringToFormatTypeUnknownDefaultsToLdpVc() throws Exception { + List credentials = createMockDecryptedCredentialsWithFormat("unknown_format"); + request.setSelectedCredentials(Arrays.asList("vc-credential-format-test-1", "vc-credential-format-test-2")); + sessionData.setMatchingCredentials(credentials); + setupSuccessfulMocks(); + + SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( + sessionData, walletId, presentationId, request, base64Key); + + assertNotNull(response); + assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); + } + + @Test + public void testMapStringToFormatTypeNullDefaultsToLdpVc() throws Exception { + List credentials = createMockDecryptedCredentialsWithFormat(null); + request.setSelectedCredentials(Arrays.asList("vc-credential-format-test-1", "vc-credential-format-test-2")); + sessionData.setMatchingCredentials(credentials); + setupSuccessfulMocks(); + + SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( + sessionData, walletId, presentationId, request, base64Key); + + assertNotNull(response); + assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); + } + + + @Test + public void testShareVerifiablePresentationReturnsTrue() throws Exception { + setupSuccessfulMocks(); + + SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( + sessionData, walletId, presentationId, request, base64Key); + + assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); + verify(openID4VP).shareVerifiablePresentation(anyMap()); + } + + @Test + public void testShareVerifiablePresentationReturnsFalse() throws Exception { + setupMocksForShareFailure(); + + SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( + sessionData, walletId, presentationId, request, base64Key); + + assertEquals(OpenID4VPConstants.STATUS_ERROR, response.getStatus()); + assertEquals(OpenID4VPConstants.MESSAGE_PRESENTATION_SHARE_FAILED, response.getMessage()); + } + + @Test + public void testShareVerifiablePresentationHandlesException() throws Exception { + setupMocksForShareException(); + + SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( + sessionData, walletId, presentationId, request, base64Key); + + assertEquals(OpenID4VPConstants.STATUS_ERROR, response.getStatus()); + } + + + @Test + public void testCreatePresentationDataIncludesSelectedCredentials() throws Exception { + setupSuccessfulMocks(); + when(objectMapper.writeValueAsString(any())).thenAnswer(invocation -> { + Object arg = invocation.getArgument(0); + if (arg instanceof Map) { + Map map = (Map) arg; + if (map.containsKey(OpenID4VPConstants.SELECTED_CREDENTIALS)) { + return "{\"selectedCredentials\":[\"cred-1\",\"cred-2\"]}"; + } + } + return "{}"; + }); + ArgumentCaptor captor = ArgumentCaptor.forClass(VerifiablePresentation.class); + + presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, request, base64Key); + + verify(verifiablePresentationsRepository).save(captor.capture()); + String presentationData = captor.getValue().getPresentationData(); + assertNotNull(presentationData); + assertTrue(presentationData.contains("selectedCredentials")); + } + + @Test + public void testExtractVerifierAuthRequestCreatesJsonObject() throws Exception { + setupSuccessfulMocks(); + when(objectMapper.writeValueAsString(any())).thenAnswer(invocation -> { + Object arg = invocation.getArgument(0); + if (arg instanceof Map) { + Map map = (Map) arg; + if (map.containsKey(OpenID4VPConstants.AUTHORIZATION_REQUEST_URL)) { + return "{\"authorizationRequestUrl\":\"" + sessionData.getAuthorizationRequest() + "\"}"; + } + } + return "{}"; + }); + ArgumentCaptor captor = ArgumentCaptor.forClass(VerifiablePresentation.class); + + presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, request, base64Key); + + verify(verifiablePresentationsRepository).save(captor.capture()); + String authRequest = captor.getValue().getAuthRequest(); + assertNotNull(authRequest); + assertTrue(authRequest.contains("authorizationRequestUrl")); + } + + @Test + public void testExtractVerifierAuthRequestHandlesException() throws Exception { + + setupSuccessfulMocks(); + ArgumentCaptor captor = ArgumentCaptor.forClass(VerifiablePresentation.class); + + presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, request, base64Key); + + verify(verifiablePresentationsRepository).save(captor.capture()); + String authRequest = captor.getValue().getAuthRequest(); + assertNotNull(authRequest); + assertTrue(authRequest.length() > 0); + } + + + @Test + public void testSubmitPresentationWithVeryLongPresentationId() throws Exception { + String longPresentationId = "a".repeat(255); + sessionData.setPresentationId(longPresentationId); + setupSuccessfulMocks(); + + SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( + sessionData, walletId, longPresentationId, request, base64Key); + + assertNotNull(response); + assertEquals(longPresentationId, response.getPresentationId()); + } + + @Test + public void testSubmitPresentationWithSpecialCharactersInWalletId() throws Exception { + String specialWalletId = "wallet-123_@#$%"; + setupSuccessfulMocks(); + + SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( + sessionData, specialWalletId, presentationId, request, base64Key); + + assertNotNull(response); + verify(keyPairService).getKeyPairFromDB(eq(specialWalletId), anyString(), any(SigningAlgorithm.class)); + } + + @Test + public void testSubmitPresentationWithLargeNumberOfCredentials() throws Exception { + List manyCredentials = new ArrayList<>(); + List manyDecryptedCredentials = new ArrayList<>(); + for (int i = 0; i < 100; i++) { + String credId = "cred-" + i; + manyCredentials.add(credId); + manyDecryptedCredentials.add(createMockDecryptedCredential(credId, "ldp_vc")); + } + request.setSelectedCredentials(manyCredentials); + sessionData.setMatchingCredentials(manyDecryptedCredentials); + setupSuccessfulMocks(); + + SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( + sessionData, walletId, presentationId, request, base64Key); + + assertNotNull(response); + assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); + } + + + private void setupSuccessfulMocks() throws Exception { + when(openID4VPService.create(anyString())).thenReturn(openID4VP); + when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); + when(openID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(null); + + when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))) + .thenReturn(keyPair); + + Map unsignedVPTokenMap = new HashMap<>(); + UnsignedLdpVPToken unsignedLdpVPToken = mock(UnsignedLdpVPToken.class); + when(unsignedLdpVPToken.getDataToSign()).thenReturn("dGVzdC1kYXRhLXRvLXNpZ24="); + unsignedVPTokenMap.put(FormatType.LDP_VC, unsignedLdpVPToken); + + when(openID4VP.constructUnsignedVPToken(anyMap(), anyString(), anyString())) + .thenReturn(unsignedVPTokenMap); + + + when(openID4VP.shareVerifiablePresentation(anyMap())).thenReturn(""); + + when(objectMapper.convertValue(any(), eq(LdpVPTokenSigningResult.class))) + .thenReturn(mock(LdpVPTokenSigningResult.class)); + when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + + when(verifiablePresentationsRepository.save(any(VerifiablePresentation.class))) + .thenAnswer(invocation -> invocation.getArgument(0)); + } + + private void setupMocksUpToSigning() throws Exception { + when(openID4VPService.create(anyString())).thenReturn(openID4VP); + when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); + when(openID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(null); + + + } + + private void setupMocksForShareFailure() throws Exception { + setupSuccessfulMocks(); + when(openID4VP.shareVerifiablePresentation(anyMap())).thenReturn("error-response"); + } + + private void setupMocksForShareException() throws Exception { + setupSuccessfulMocks(); + when(openID4VP.shareVerifiablePresentation(anyMap())).thenThrow(new RuntimeException("Share failed")); + } + + private void setupSuccessfulMocksForMsoMdoc() throws Exception { + when(openID4VPService.create(anyString())).thenReturn(openID4VP); + when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); + when(openID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(null); + + KeyPair es256KeyPair = generateKeyPairForAlgorithm(SigningAlgorithm.ES256); + when(keyPairService.getKeyPairFromDB(anyString(), anyString(), eq(SigningAlgorithm.ED25519))) + .thenReturn(keyPair); + when(keyPairService.getKeyPairFromDB(anyString(), anyString(), eq(SigningAlgorithm.ES256))) + .thenReturn(es256KeyPair); + + Map unsignedVPTokenMap = new HashMap<>(); + UnsignedVPToken msoMdocToken = mock(UnsignedVPToken.class); + unsignedVPTokenMap.put(FormatType.MSO_MDOC, msoMdocToken); + + when(openID4VP.constructUnsignedVPToken(anyMap(), anyString(), anyString())) + .thenReturn(unsignedVPTokenMap); + + Map docTypeMap = new HashMap<>(); + docTypeMap.put("docTypeToDeviceAuthenticationBytes", new HashMap() {{ + put("org.iso.18013.5.1.mDL", "test-payload"); + }}); + when(objectMapper.convertValue(any(UnsignedVPToken.class), eq(Map.class))) + .thenReturn(docTypeMap); + when(objectMapper.convertValue(any(Map.class), eq(LdpVPTokenSigningResult.class))) + .thenReturn(mock(LdpVPTokenSigningResult.class)); + when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + + when(openID4VP.shareVerifiablePresentation(anyMap())).thenReturn(""); + + when(verifiablePresentationsRepository.save(any(VerifiablePresentation.class))) + .thenAnswer(invocation -> invocation.getArgument(0)); + } + + private void setupSuccessfulMocksForMixedFormats() throws Exception { + when(openID4VPService.create(anyString())).thenReturn(openID4VP); + when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); + when(openID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(null); + + KeyPair es256KeyPair = generateKeyPairForAlgorithm(SigningAlgorithm.ES256); + when(keyPairService.getKeyPairFromDB(anyString(), anyString(), eq(SigningAlgorithm.ED25519))) + .thenReturn(keyPair); + when(keyPairService.getKeyPairFromDB(anyString(), anyString(), eq(SigningAlgorithm.ES256))) + .thenReturn(es256KeyPair); + + Map unsignedVPTokenMap = new HashMap<>(); + UnsignedLdpVPToken ldpToken = mock(UnsignedLdpVPToken.class); + when(ldpToken.getDataToSign()).thenReturn("dGVzdC1kYXRhLXRvLXNpZ24="); + UnsignedVPToken msoToken = mock(UnsignedVPToken.class); + unsignedVPTokenMap.put(FormatType.LDP_VC, ldpToken); + unsignedVPTokenMap.put(FormatType.MSO_MDOC, msoToken); + + when(openID4VP.constructUnsignedVPToken(anyMap(), anyString(), anyString())) + .thenReturn(unsignedVPTokenMap); + + Map docTypeMap = new HashMap<>(); + docTypeMap.put("docTypeToDeviceAuthenticationBytes", new HashMap() {{ + put("org.iso.18013.5.1.mDL", "test-payload"); + }}); + when(objectMapper.convertValue(any(UnsignedVPToken.class), eq(Map.class))) + .thenReturn(docTypeMap); + when(objectMapper.convertValue(any(Map.class), eq(LdpVPTokenSigningResult.class))) + .thenReturn(mock(LdpVPTokenSigningResult.class)); + when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + + when(openID4VP.shareVerifiablePresentation(anyMap())).thenReturn(""); + + when(verifiablePresentationsRepository.save(any(VerifiablePresentation.class))) + .thenAnswer(invocation -> invocation.getArgument(0)); + } + + private void setupSuccessfulMocksForMsoMdocWithMultipleDocTypes() throws Exception { + setupSuccessfulMocksForMsoMdoc(); + Map docTypeMap = new HashMap<>(); + docTypeMap.put("docTypeToDeviceAuthenticationBytes", new HashMap() {{ + put("org.iso.18013.5.1.mDL", "test-payload-1"); + put("org.iso.18013.5.1.Passport", "test-payload-2"); + put("org.iso.18013.5.1.HealthCard", "test-payload-3"); + }}); + when(objectMapper.convertValue(any(UnsignedVPToken.class), eq(Map.class))) + .thenReturn(docTypeMap); + } + + private void setupSuccessfulMocksForMsoMdocWithEmptyDocTypes() throws Exception { + setupSuccessfulMocksForMsoMdoc(); + Map docTypeMap = new HashMap<>(); + docTypeMap.put("docTypeToDeviceAuthenticationBytes", new HashMap<>()); + when(objectMapper.convertValue(any(UnsignedVPToken.class), eq(Map.class))) + .thenReturn(docTypeMap); + } + + private void setupSuccessfulMocksForMsoMdocWithNullDocTypes() throws Exception { + setupSuccessfulMocksForMsoMdoc(); + Map docTypeMap = new HashMap<>(); + docTypeMap.put("docTypeToDeviceAuthenticationBytes", null); + when(objectMapper.convertValue(any(UnsignedVPToken.class), eq(Map.class))) + .thenReturn(docTypeMap); + } + + private void setupSuccessfulMocksForMsoMdocWithMissingDocTypeKey() throws Exception { + setupSuccessfulMocksForMsoMdoc(); + Map docTypeMap = new HashMap<>(); + when(objectMapper.convertValue(any(UnsignedVPToken.class), eq(Map.class))) + .thenReturn(docTypeMap); + } + + private List createMockDecryptedCredentials() { + return Arrays.asList( + createMockDecryptedCredential("vc-credential-123e4567-e89b-12d3-a456-426614174000", "ldp_vc"), + createMockDecryptedCredential("vc-credential-987f6543-e21a-98d7-b654-321098765432", "ldp_vc") + ); + } + + private List createMockDecryptedCredentialsMultiple() { + return Arrays.asList( + createMockDecryptedCredential("vc-credential-123e4567-e89b-12d3-a456-426614174000", "ldp_vc"), + createMockDecryptedCredential("vc-credential-987f6543-e21a-98d7-b654-321098765432", "ldp_vc"), + createMockDecryptedCredential("vc-credential-456f7890-a12b-34c5-d678-901234567890", "ldp_vc") + ); + } + + private List createMockDecryptedCredentialsWithFormat(String format) { + return Arrays.asList( + createMockDecryptedCredential("vc-credential-format-test-1", format), + createMockDecryptedCredential("vc-credential-format-test-2", format) + ); + } + + private List createMockDecryptedCredentialsWithMixedFormats() { + return Arrays.asList( + createMockDecryptedCredential("vc-credential-mixed-ldp-1", "ldp_vc"), + createMockDecryptedCredential("vc-credential-mixed-mdoc-2", "mso_mdoc") + ); + } + + private List createMockDecryptedCredentialsForMsoMdocMultipleDocTypes() { + return Arrays.asList( + createMockDecryptedCredential("vc-credential-mdoc-multi-1", "mso_mdoc"), + createMockDecryptedCredential("vc-credential-mdoc-multi-2", "mso_mdoc") + ); + } + + private List createMockDecryptedCredentialsForMsoMdocEmpty() { + return Arrays.asList( + createMockDecryptedCredential("vc-credential-mdoc-empty-1", "mso_mdoc") + ); + } + + private List createMockDecryptedCredentialsForMsoMdocNullDocTypes() { + return Arrays.asList( + createMockDecryptedCredential("vc-credential-mdoc-null-1", "mso_mdoc") + ); + } + + private DecryptedCredentialDTO createMockDecryptedCredential(String id, String format) { + DecryptedCredentialDTO credential = new DecryptedCredentialDTO(); + credential.setId(id); + credential.setWalletId(walletId); + credential.setCreatedAt(Instant.now().minusSeconds(86400)); // Created 1 day ago + credential.setUpdatedAt(Instant.now()); + + CredentialMetadata metadata = new CredentialMetadata(); + metadata.setIssuerId("https://esignet.collab.mosip.net/v1/esignet"); + metadata.setCredentialType("MOSIPVerifiableCredential"); + credential.setCredentialMetadata(metadata); + + Map credentialData = new HashMap<>(); + credentialData.put("@context", Arrays.asList( + "https://www.w3.org/2018/credentials/v1", + "https://www.w3.org/2018/credentials/examples/v1" + )); + credentialData.put("type", Arrays.asList("VerifiableCredential", "MOSIPVerifiableCredential")); + credentialData.put("issuer", "https://esignet.collab.mosip.net/v1/esignet"); + credentialData.put("issuanceDate", Instant.now().minusSeconds(86400).toString()); + credentialData.put("expirationDate", Instant.now().plusSeconds(31536000).toString()); // 1 year + + credentialData.put("credentialSubject", new HashMap() {{ + put("id", "did:jwk:eyJrdHkiOiJFQyIsImNydiI6IlAtMjU2In0"); + put("fullName", "John Doe"); + put("email", "john.doe@example.com"); + put("dateOfBirth", "1990-01-15"); + put("gender", "Male"); + put("phone", "+91-9876543210"); + put("address", new HashMap() {{ + put("street", "123 Main Street"); + put("city", "Bangalore"); + put("state", "Karnataka"); + put("postalCode", "560001"); + put("country", "India"); + }}); + put("UIN", "1234567890123456"); + }}); + + if (format != null && (format.equals("ldp_vc") || format.equals("ldp-vc"))) { + credentialData.put("proof", new HashMap() {{ + put("type", "Ed25519Signature2020"); + put("created", Instant.now().minusSeconds(86400).toString()); + put("verificationMethod", "https://esignet.collab.mosip.net/v1/esignet#key-1"); + put("proofPurpose", "assertionMethod"); + put("proofValue", "z3FXQjecWufY46yg5abdVZsXqLhxhueuSoZgsgwJTmN7bd8gZJVYRDEHbhGEfW6aeRgvNhZqr9h7LhzJBKqvqm8Qe"); + }}); + } + + VCCredentialResponse vcResponse = VCCredentialResponse.builder() + .format(format != null ? format : "ldp_vc") + .credential(credentialData) + .build(); + + credential.setCredential(vcResponse); + return credential; + } + + /** + * Helper method to generate KeyPair for different signing algorithms + * This ensures we use the correct key type for each algorithm + */ + private KeyPair generateKeyPairForAlgorithm(SigningAlgorithm algorithm) throws Exception { + KeyPairGenerator keyPairGenerator; + + switch (algorithm) { + case RS256: + keyPairGenerator = KeyPairGenerator.getInstance("RSA"); + keyPairGenerator.initialize(2048); + break; + + case ES256: + case ES256K: + keyPairGenerator = KeyPairGenerator.getInstance("EC"); + keyPairGenerator.initialize(256); + break; + + case ED25519: + default: + keyPairGenerator = KeyPairGenerator.getInstance("Ed25519"); + break; + } + + return keyPairGenerator.generateKeyPair(); + } + + // ============= NEW TESTS FOR MISSING BRANCH COVERAGE ============= + + @Test + public void testSignMsoMdocDocTypeWithStringPayload() throws Exception { + DecryptedCredentialDTO credential = createMockDecryptedCredential("cred-mdoc-string", "mso_mdoc"); + sessionData.setMatchingCredentials(Arrays.asList(credential)); + request.setSelectedCredentials(Arrays.asList("cred-mdoc-string")); + + setupSuccessfulMocksForMsoMdoc(); + + // String payload test + Map docTypeMap = new HashMap<>(); + docTypeMap.put("docTypeToDeviceAuthenticationBytes", new HashMap() {{ + put("org.iso.18013.5.1.mDL", "test-string-payload"); + }}); + when(objectMapper.convertValue(any(UnsignedVPToken.class), eq(Map.class))) + .thenReturn(docTypeMap); + + SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( + sessionData, walletId, presentationId, request, base64Key); + + assertNotNull(response); + assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); + } + + @Test + public void testSignMsoMdocDocTypeWithObjectPayload() throws Exception { + DecryptedCredentialDTO credential = createMockDecryptedCredential("cred-mdoc-object", "mso_mdoc"); + sessionData.setMatchingCredentials(Arrays.asList(credential)); + request.setSelectedCredentials(Arrays.asList("cred-mdoc-object")); + + setupSuccessfulMocksForMsoMdoc(); + + // Object payload test + Map docTypeMap = new HashMap<>(); + Map payloadObject = new HashMap<>(); + payloadObject.put("key1", "value1"); + payloadObject.put("key2", "value2"); + + docTypeMap.put("docTypeToDeviceAuthenticationBytes", new HashMap() {{ + put("org.iso.18013.5.1.mDL", payloadObject); + }}); + when(objectMapper.convertValue(any(UnsignedVPToken.class), eq(Map.class))) + .thenReturn(docTypeMap); + when(objectMapper.writeValueAsBytes(any())).thenReturn("test-bytes".getBytes()); + + SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( + sessionData, walletId, presentationId, request, base64Key); + + assertNotNull(response); + assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); + } + + @Test + public void testStorePresentationRecordWithNullSessionData() throws Exception { + sessionData.setMatchingCredentials(createMockDecryptedCredentials()); + setupSuccessfulMocks(); + + // Test with null sessionData being passed - should handle gracefully + SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( + sessionData, walletId, presentationId, request, base64Key); + + assertNotNull(response); + // Should still complete successfully even if storage fails + assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); + } + + @Test + public void testShareVerifiablePresentationReturnsNonEmptyString() throws Exception { + sessionData.setMatchingCredentials(createMockDecryptedCredentials()); + setupSuccessfulMocks(); + when(openID4VP.shareVerifiablePresentation(anyMap())).thenReturn("error-response-non-empty"); // non-empty string + + SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( + sessionData, walletId, presentationId, request, base64Key); + + assertNotNull(response); + // Should return ERROR status when vpToken is not empty (shareVerifiablePresentation returns false when non-empty) + assertEquals(OpenID4VPConstants.STATUS_ERROR, response.getStatus()); + assertEquals(OpenID4VPConstants.MESSAGE_PRESENTATION_SHARE_FAILED, response.getMessage()); + } + + @Test + public void testSignMsoMdocDocTypeWithNullSignature() throws Exception { + // Test the branch where signature is null or empty and returns null in the filter + DecryptedCredentialDTO credential = createMockDecryptedCredential("cred-mdoc-null-sig", "mso_mdoc"); + sessionData.setMatchingCredentials(Arrays.asList(credential)); + request.setSelectedCredentials(Arrays.asList("cred-mdoc-null-sig")); + + setupSuccessfulMocksForMsoMdoc(); + + // Test with empty docType map - this will result in empty documentTypeSignatures + Map docTypeMap = new HashMap<>(); + docTypeMap.put("docTypeToDeviceAuthenticationBytes", new HashMap<>()); + when(objectMapper.convertValue(any(UnsignedVPToken.class), eq(Map.class))) + .thenReturn(docTypeMap); + + SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( + sessionData, walletId, presentationId, request, base64Key); + + assertNotNull(response); + assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); + } + + @Test + public void testExtractVerifierIdFromUrlWithNullAuthorizationRequest() throws Exception { + sessionData.setMatchingCredentials(createMockDecryptedCredentials()); + sessionData.setAuthorizationRequest(null); // Null auth request + setupSuccessfulMocks(); + + SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( + sessionData, walletId, presentationId, request, base64Key); + + assertNotNull(response); + assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); + + // Verify that "unknown" verifier ID is used when auth request is null + ArgumentCaptor captor = ArgumentCaptor.forClass(VerifiablePresentation.class); + verify(verifiablePresentationsRepository).save(captor.capture()); + VerifiablePresentation savedPresentation = captor.getValue(); + assertEquals("unknown", savedPresentation.getVerifierId()); + } + + @Test + public void testExtractVerifierAuthRequestWithNullAuthorizationRequest() throws Exception { + sessionData.setMatchingCredentials(createMockDecryptedCredentials()); + sessionData.setAuthorizationRequest(null); // Null auth request + setupSuccessfulMocks(); + + SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( + sessionData, walletId, presentationId, request, base64Key); + + assertNotNull(response); + assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); + + // Verify that "{}" is used when auth request is null + ArgumentCaptor captor = ArgumentCaptor.forClass(VerifiablePresentation.class); + verify(verifiablePresentationsRepository).save(captor.capture()); + VerifiablePresentation savedPresentation = captor.getValue(); + assertEquals("{}", savedPresentation.getAuthRequest()); + } + + @Test + public void testCreatePresentationDataHandlesJsonProcessingException() throws Exception { + sessionData.setMatchingCredentials(createMockDecryptedCredentials()); + + when(openID4VPService.create(anyString())).thenReturn(openID4VP); + when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); + when(openID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(null); + when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))) + .thenReturn(keyPair); + + Map unsignedVPTokenMap = new HashMap<>(); + UnsignedLdpVPToken unsignedLdpVPToken = mock(UnsignedLdpVPToken.class); + when(unsignedLdpVPToken.getDataToSign()).thenReturn("dGVzdC1kYXRhLXRvLXNpZ24="); + unsignedVPTokenMap.put(FormatType.LDP_VC, unsignedLdpVPToken); + + when(openID4VP.constructUnsignedVPToken(anyMap(), anyString(), anyString())) + .thenReturn(unsignedVPTokenMap); + when(openID4VP.shareVerifiablePresentation(anyMap())).thenReturn(""); + + when(objectMapper.convertValue(any(), eq(LdpVPTokenSigningResult.class))) + .thenReturn(mock(LdpVPTokenSigningResult.class)); + + // Mock writeValueAsString to throw exception only for presentation data serialization + when(objectMapper.writeValueAsString(anyMap())) + .thenReturn("{\"authorizationRequestUrl\":\"test\"}") // For auth request + .thenThrow(new com.fasterxml.jackson.core.JsonProcessingException("Test exception") {}) // For presentation data + .thenReturn("{}"); // Subsequent calls succeed + + when(verifiablePresentationsRepository.save(any(VerifiablePresentation.class))) + .thenAnswer(invocation -> invocation.getArgument(0)); + + SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( + sessionData, walletId, presentationId, request, base64Key); + + assertNotNull(response); + // Should handle exception gracefully and use "{}" as fallback for presentation data + assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); + } + + @Test(expected = Exception.class) + public void testSignVPTokenWithUnsupportedFormatType() throws Exception { + DecryptedCredentialDTO credential = createMockDecryptedCredential("cred-unsupported", "ldp_vc"); + sessionData.setMatchingCredentials(Arrays.asList(credential)); + request.setSelectedCredentials(Arrays.asList("cred-unsupported")); + + when(openID4VPService.create(anyString())).thenReturn(openID4VP); + when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); + when(openID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(null); + when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))) + .thenReturn(keyPair); + + // Create an unsupported format type scenario by mocking the unsigned VP token map + Map unsignedVPTokenMap = new HashMap<>(); + // Note: We can't create a truly unsupported FormatType, but we can test the null handling + UnsignedVPToken nullToken = null; + unsignedVPTokenMap.put(FormatType.LDP_VC, nullToken); + + when(openID4VP.constructUnsignedVPToken(anyMap(), anyString(), anyString())) + .thenReturn(unsignedVPTokenMap); + + presentationSubmissionService.submitPresentation( + sessionData, walletId, presentationId, request, base64Key); + } + + @Test + public void testFetchSelectedCredentialsWithNullMatchingCredentials() throws Exception { + sessionData.setMatchingCredentials(null); // Null matching credentials + request.setSelectedCredentials(Arrays.asList("cred-1")); + + // No mocks needed since it fails during validation before reaching mocked components + + try { + presentationSubmissionService.submitPresentation( + sessionData, walletId, presentationId, request, base64Key); + fail("Expected IllegalStateException"); + } catch (IllegalStateException e) { + assertEquals("No matching credentials found in session cache", e.getMessage()); + } + } + +} diff --git a/src/test/java/io/mosip/mimoto/service/SessionManagerTest.java b/src/test/java/io/mosip/mimoto/service/SessionManagerTest.java new file mode 100644 index 000000000..4081d4321 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/service/SessionManagerTest.java @@ -0,0 +1,383 @@ +package io.mosip.mimoto.service; + +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.constant.SessionKeys; +import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; +import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; +import io.mosip.mimoto.dto.DecryptedCredentialDTO; +import io.mosip.mimoto.model.CredentialMetadata; +import io.mosip.mimoto.service.impl.SessionManager; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.mock.web.MockHttpSession; +import org.springframework.test.util.ReflectionTestUtils; + +import java.time.Instant; +import java.util.*; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; + +@RunWith(MockitoJUnitRunner.class) +public class SessionManagerTest { + + UserMetadataDTO userMetadataDTO; + private SessionManager sessionManager; + @Mock + private ObjectMapper objectMapper; + + @Before + public void setUp() { + MockitoAnnotations.openMocks(this); + sessionManager = new SessionManager(); + ReflectionTestUtils.setField(sessionManager, "objectMapper", objectMapper); + userMetadataDTO = new UserMetadataDTO("Test user", "https://test.com/pic.jpg", "test@example.com", "wallet123"); + } + + @Test + public void shouldSetupSessionWithProvidedUserAndOAuth2ProviderDetails() { + HttpServletRequest request = mock(HttpServletRequest.class); + HttpSession session = new MockHttpSession(); + when(request.getSession(true)).thenReturn(session); + + String provider = "google"; + String userId = "123"; + + sessionManager.setupSession(request, provider, userMetadataDTO, userId); + + assertEquals(provider, session.getAttribute(SessionKeys.CLIENT_REGISTRATION_ID)); + assertEquals(userMetadataDTO, session.getAttribute(SessionKeys.USER_METADATA)); + assertEquals(userId, session.getAttribute(SessionKeys.USER_ID)); + } + + @Test + public void shouldCreateAndStorePresentationDetailsInSession() { + Instant fixedInstant = Instant.parse("2025-09-08T12:34:56Z"); + MockHttpSession session = new MockHttpSession(); + String walletId = "wallet123"; + String presentationId = "123e4567-e89b-12d3-a456-426614174000"; + VerifiablePresentationSessionData presentationSessionData = new VerifiablePresentationSessionData(presentationId, "authorizationRequest", fixedInstant, false, null); + + sessionManager.storePresentationSessionData(session, presentationSessionData, walletId); + + @SuppressWarnings("unchecked") + Map presentations = + (Map) session.getAttribute(SessionKeys.PRESENTATIONS + "::" + walletId); + + assertNotNull(presentations); + assertTrue(presentations.containsKey(presentationId)); + + VerifiablePresentationSessionData storedPresentationSessionDetails = presentations.get(presentationId); + assertNotNull(storedPresentationSessionDetails); + assertEquals(presentationSessionData.getAuthorizationRequest(), storedPresentationSessionDetails.getAuthorizationRequest()); + assertEquals(presentationSessionData.getCreatedAt(), storedPresentationSessionDetails.getCreatedAt()); + } + + @Test + public void shouldStorePresentationDetailsProperlyInSessionForMultiplePresentations() { + Instant fixedInstant = Instant.parse("2025-09-08T12:34:56Z"); + MockHttpSession session = new MockHttpSession(); + + String walletId1 = "wallet123"; + String walletId2 = "wallet456"; + String presentationId1 = "123e4567-e89b-12d3-a456-426614174000"; + String presentationId2 = "123e4567-e89b-12d3-a456-426614174001"; + + VerifiablePresentationSessionData sessionData1 = new VerifiablePresentationSessionData(presentationId1, "authorizationRequest", fixedInstant, true, null); + VerifiablePresentationSessionData sessionData2 = new VerifiablePresentationSessionData(presentationId2, "authorizationRequest", fixedInstant, false, null); + + sessionManager.storePresentationSessionData(session, sessionData1, walletId1); + sessionManager.storePresentationSessionData(session, sessionData2, walletId2); + + @SuppressWarnings("unchecked") + Map presentations1 = + (Map) session.getAttribute(SessionKeys.PRESENTATIONS + "::" + walletId1); + @SuppressWarnings("unchecked") + Map presentations2 = + (Map) session.getAttribute(SessionKeys.PRESENTATIONS + "::" + walletId2); + + assertNotNull(presentations1); + assertNotNull(presentations2); + + assertTrue(presentations1.containsKey(presentationId1)); + assertTrue(presentations2.containsKey(presentationId2)); + + VerifiablePresentationSessionData storedData1 = presentations1.get(presentationId1); + VerifiablePresentationSessionData storedData2 = presentations2.get(presentationId2); + + assertNotNull(storedData1); + assertNotNull(storedData2); + + assertEquals(sessionData1.getAuthorizationRequest(), storedData1.getAuthorizationRequest()); + assertEquals(sessionData1.getCreatedAt(), storedData1.getCreatedAt()); + assertEquals(sessionData2.getAuthorizationRequest(), storedData2.getAuthorizationRequest()); + assertEquals(sessionData2.getCreatedAt(), storedData2.getCreatedAt()); + } + + @Test + public void shouldReturnPresentationDefinitionFromSessionSuccessfully() { + Instant fixedInstant = Instant.parse("2025-09-08T12:34:56Z"); + String presentationId = "test-presentation-id"; + String walletId = "wallet123"; + MockHttpSession session = new MockHttpSession(); + + VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData(presentationId,"mockOpenID4VP", fixedInstant, true, null); + + Map presentations = new HashMap<>(); + presentations.put(presentationId, sessionData); + session.setAttribute(SessionKeys.PRESENTATIONS + "::" + walletId, presentations); + + VerifiablePresentationSessionData result = sessionManager.getPresentationSessionData(session, walletId, presentationId); + + assertNotNull(result); + assertNotNull(result.getAuthorizationRequest()); + assertEquals(fixedInstant, result.getCreatedAt()); + } + + @Test + public void shouldReturnNullWhenNoPresentationsInSession() { + String presentationId = "test-presentation-id"; + String walletId = "wallet123"; + MockHttpSession session = new MockHttpSession(); + + VerifiablePresentationSessionData result = sessionManager.getPresentationSessionData(session, walletId, presentationId); + + assertNull(result); + } + + @Test + public void shouldReturnNullWhenPresentationIdNotFound() { + String presentationId = "non-existent-id"; + String walletId = "wallet123"; + MockHttpSession session = new MockHttpSession(); + + Map presentations = new HashMap<>(); + session.setAttribute(SessionKeys.PRESENTATIONS + "::" + walletId, presentations); + + VerifiablePresentationSessionData result = sessionManager.getPresentationSessionData(session, walletId, presentationId); + + assertNull(result); + } + + @Test + public void shouldHandleExceptionWhenRetrievingPresentationSessionData() { + // Arrange + String presentationId = "test-presentation-id"; + String walletId = "wallet123"; + HttpSession session = mock(HttpSession.class); + + // Mock session to throw exception when getting attribute + when(session.getAttribute(anyString())).thenThrow(new RuntimeException("Session error")); + + // Act + VerifiablePresentationSessionData result = sessionManager.getPresentationSessionData(session, walletId, presentationId); + + // Assert + assertNull(result); + } + + @Test + public void shouldStoreMatchingWalletCredentialsInPresentationSessionData() { + // Arrange + MockHttpSession session = new MockHttpSession(); + String walletId = "wallet123"; + String presentationId = "test-presentation-id"; + Instant fixedInstant = Instant.parse("2025-09-08T12:34:56Z"); + + // Create existing session data + VerifiablePresentationSessionData existingSessionData = new VerifiablePresentationSessionData( + presentationId, "authorizationRequest", fixedInstant, true, null); + + // Create credentials to store + List credentials = createMockCredentials(); + + // Set up existing presentations map in session + Map presentations = new HashMap<>(); + presentations.put(presentationId, existingSessionData); + session.setAttribute(SessionKeys.PRESENTATIONS + "::" + walletId, presentations); + + // Act + sessionManager.storeMatchingWalletCredentialsInPresentationSessionData(session, walletId, existingSessionData, credentials); + + // Assert + @SuppressWarnings("unchecked") + Map updatedPresentations = + (Map) session.getAttribute(SessionKeys.PRESENTATIONS + "::" + walletId); + + assertNotNull(updatedPresentations); + assertTrue(updatedPresentations.containsKey(presentationId)); + + VerifiablePresentationSessionData updatedSessionData = updatedPresentations.get(presentationId); + assertNotNull(updatedSessionData); + assertEquals(presentationId, updatedSessionData.getPresentationId()); + assertEquals("authorizationRequest", updatedSessionData.getAuthorizationRequest()); + assertEquals(fixedInstant, updatedSessionData.getCreatedAt()); + assertTrue(updatedSessionData.isVerifierClientPreregistered()); + assertEquals(credentials, updatedSessionData.getMatchingCredentials()); + } + + @Test + public void shouldStoreMatchingWalletCredentialsWithNullExistingPresentations() { + // Arrange + MockHttpSession session = new MockHttpSession(); + String walletId = "wallet123"; + String presentationId = "test-presentation-id"; + Instant fixedInstant = Instant.parse("2025-09-08T12:34:56Z"); + + // Create existing session data + VerifiablePresentationSessionData existingSessionData = new VerifiablePresentationSessionData( + presentationId, "authorizationRequest", fixedInstant, true, null); + + // Create credentials to store + List credentials = createMockCredentials(); + + // Don't set up existing presentations map - should handle null case + + // Act & Assert - Should throw NullPointerException when trying to get null presentations map + try { + sessionManager.storeMatchingWalletCredentialsInPresentationSessionData(session, walletId, existingSessionData, credentials); + fail("Expected NullPointerException to be thrown"); + } catch (NullPointerException e) { + // Expected behavior + } + } + + @Test + public void shouldCreateNewSessionMapWhenNoneExists() { + // Arrange + MockHttpSession session = new MockHttpSession(); + String walletId = "wallet123"; + String presentationId = "test-presentation-id"; + Instant fixedInstant = Instant.parse("2025-09-08T12:34:56Z"); + VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData( + presentationId, "authorizationRequest", fixedInstant, true, null); + + // Act + sessionManager.storePresentationSessionData(session, sessionData, walletId); + + // Assert + @SuppressWarnings("unchecked") + Map presentations = + (Map) session.getAttribute(SessionKeys.PRESENTATIONS + "::" + walletId); + + assertNotNull(presentations); + assertTrue(presentations.containsKey(presentationId)); + assertEquals(sessionData, presentations.get(presentationId)); + } + + @Test + public void shouldNotOverwriteExistingPresentationWhenStoringSamePresentationId() { + // Arrange + MockHttpSession session = new MockHttpSession(); + String walletId = "wallet123"; + String presentationId = "test-presentation-id"; + Instant fixedInstant = Instant.parse("2025-09-08T12:34:56Z"); + + // Create original session data + VerifiablePresentationSessionData originalSessionData = new VerifiablePresentationSessionData( + presentationId, "originalRequest", fixedInstant, true, null); + + // Create new session data with same presentation ID + VerifiablePresentationSessionData newSessionData = new VerifiablePresentationSessionData( + presentationId, "newRequest", fixedInstant.plusSeconds(100), false, null); + + // Store original data + sessionManager.storePresentationSessionData(session, originalSessionData, walletId); + + // Act - Try to store new data with same presentation ID + sessionManager.storePresentationSessionData(session, newSessionData, walletId); + + // Assert - Should still have original data due to computeIfAbsent + @SuppressWarnings("unchecked") + Map presentations = + (Map) session.getAttribute(SessionKeys.PRESENTATIONS + "::" + walletId); + + assertNotNull(presentations); + assertTrue(presentations.containsKey(presentationId)); + + VerifiablePresentationSessionData storedData = presentations.get(presentationId); + assertEquals("originalRequest", storedData.getAuthorizationRequest()); // Should be original, not new + assertTrue(storedData.isVerifierClientPreregistered()); // Should be original, not new + } + + @Test + public void shouldHandleNullCredentialsInStoreMatchingWalletCredentials() { + // Arrange + MockHttpSession session = new MockHttpSession(); + String walletId = "wallet123"; + String presentationId = "test-presentation-id"; + Instant fixedInstant = Instant.parse("2025-09-08T12:34:56Z"); + + VerifiablePresentationSessionData existingSessionData = new VerifiablePresentationSessionData( + presentationId, "authorizationRequest", fixedInstant, true, null); + + // Set up existing presentations map + Map presentations = new HashMap<>(); + presentations.put(presentationId, existingSessionData); + session.setAttribute(SessionKeys.PRESENTATIONS + "::" + walletId, presentations); + + // Act + sessionManager.storeMatchingWalletCredentialsInPresentationSessionData(session, walletId, existingSessionData, null); + + // Assert + @SuppressWarnings("unchecked") + Map updatedPresentations = + (Map) session.getAttribute(SessionKeys.PRESENTATIONS + "::" + walletId); + + assertNotNull(updatedPresentations); + VerifiablePresentationSessionData updatedSessionData = updatedPresentations.get(presentationId); + assertNull(updatedSessionData.getMatchingCredentials()); + } + + @Test + public void shouldHandleEmptyCredentialsListInStoreMatchingWalletCredentials() { + // Arrange + MockHttpSession session = new MockHttpSession(); + String walletId = "wallet123"; + String presentationId = "test-presentation-id"; + Instant fixedInstant = Instant.parse("2025-09-08T12:34:56Z"); + + VerifiablePresentationSessionData existingSessionData = new VerifiablePresentationSessionData( + presentationId, "authorizationRequest", fixedInstant, true, null); + + // Set up existing presentations map + Map presentations = new HashMap<>(); + presentations.put(presentationId, existingSessionData); + session.setAttribute(SessionKeys.PRESENTATIONS + "::" + walletId, presentations); + + // Act + sessionManager.storeMatchingWalletCredentialsInPresentationSessionData(session, walletId, existingSessionData, Collections.emptyList()); + + // Assert + @SuppressWarnings("unchecked") + Map updatedPresentations = + (Map) session.getAttribute(SessionKeys.PRESENTATIONS + "::" + walletId); + + assertNotNull(updatedPresentations); + VerifiablePresentationSessionData updatedSessionData = updatedPresentations.get(presentationId); + assertNotNull(updatedSessionData.getMatchingCredentials()); + assertTrue(updatedSessionData.getMatchingCredentials().isEmpty()); + } + + // Helper method to create mock credentials + private List createMockCredentials() { + DecryptedCredentialDTO credential = new DecryptedCredentialDTO(); + credential.setId("test-credential-id"); + credential.setWalletId("wallet123"); + + CredentialMetadata metadata = new CredentialMetadata(); + metadata.setIssuerId("test-issuer"); + metadata.setCredentialType("TestCredential"); + credential.setCredentialMetadata(metadata); + credential.setCreatedAt(Instant.now()); + credential.setUpdatedAt(Instant.now()); + + return Collections.singletonList(credential); + } +} diff --git a/src/test/java/io/mosip/mimoto/service/TrustedVerifierServiceTest.java b/src/test/java/io/mosip/mimoto/service/TrustedVerifierServiceTest.java new file mode 100644 index 000000000..2d8faaca4 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/service/TrustedVerifierServiceTest.java @@ -0,0 +1,211 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.dto.TrustedVerifierRequest; +import io.mosip.mimoto.dto.TrustedVerifierResponseDTO; +import io.mosip.mimoto.exception.InvalidRequestException; +import io.mosip.mimoto.model.TrustedVerifier; +import io.mosip.mimoto.repository.VerifierRepository; +import io.mosip.mimoto.service.impl.TrustedVerifierServiceImpl; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockedStatic; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.util.UUID; + +import static io.mosip.mimoto.exception.ErrorConstants.DUPLICATE_VERIFIER; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +public class TrustedVerifierServiceTest { + + @Mock + private VerifierRepository verifierRepository; + + @InjectMocks + private TrustedVerifierServiceImpl trustedVerifierService; + + private TrustedVerifierRequest request; + private String walletId; + + @BeforeEach + void setUp() { + walletId = "test-wallet-id"; + request = new TrustedVerifierRequest(); + request.setVerifierId("test-verifier-id"); + } + + @Test + void testAddTrustedVerifierSuccess() { + // Given + when(verifierRepository.existsByWalletIdAndVerifierId(walletId, request.getVerifierId())) + .thenReturn(false); + + TrustedVerifier savedVerifier = TrustedVerifier.builder() + .id("generated-uuid") + .walletId(walletId) + .verifierId(request.getVerifierId()) + .build(); + + when(verifierRepository.save(any(TrustedVerifier.class))).thenReturn(savedVerifier); + + // When + TrustedVerifierResponseDTO response = trustedVerifierService.addTrustedVerifier(walletId, request); + + // Then + assertNotNull(response); + assertEquals("generated-uuid", response.getId()); + + verify(verifierRepository).existsByWalletIdAndVerifierId(walletId, request.getVerifierId()); + verify(verifierRepository).save(any(TrustedVerifier.class)); + } + + @Test + void testAddTrustedVerifierDuplicateThrowsException() { + // Given + when(verifierRepository.existsByWalletIdAndVerifierId(walletId, request.getVerifierId())) + .thenReturn(true); + + // When & Then + InvalidRequestException exception = assertThrows(InvalidRequestException.class, + () -> trustedVerifierService.addTrustedVerifier(walletId, request)); + + assertEquals(DUPLICATE_VERIFIER.getErrorCode(), exception.getErrorCode()); + assertEquals(DUPLICATE_VERIFIER.getErrorMessage(), exception.getErrorText()); + + verify(verifierRepository).existsByWalletIdAndVerifierId(walletId, request.getVerifierId()); + verifyNoMoreInteractions(verifierRepository); + } + + @Test + void testAddTrustedVerifierWithNullWalletId() { + // Given + String nullWalletId = null; + + when(verifierRepository.existsByWalletIdAndVerifierId(nullWalletId, request.getVerifierId())) + .thenReturn(false); + + TrustedVerifier savedVerifier = TrustedVerifier.builder() + .id("generated-uuid") + .walletId(nullWalletId) + .verifierId(request.getVerifierId()) + .build(); + + when(verifierRepository.save(any(TrustedVerifier.class))).thenReturn(savedVerifier); + + // When + TrustedVerifierResponseDTO response = trustedVerifierService.addTrustedVerifier(nullWalletId, request); + + // Then + assertNotNull(response); + assertEquals("generated-uuid", response.getId()); + + verify(verifierRepository).existsByWalletIdAndVerifierId(nullWalletId, request.getVerifierId()); + verify(verifierRepository).save(any(TrustedVerifier.class)); + } + + @Test + void testAddTrustedVerifierWithNullRequest() { + // Given + TrustedVerifierRequest nullRequest = null; + + // When & Then + assertThrows(NullPointerException.class, + () -> trustedVerifierService.addTrustedVerifier(walletId, nullRequest)); + + verifyNoInteractions(verifierRepository); + } + + @Test + void testAddTrustedVerifierWithNullVerifierId() { + // Given + request.setVerifierId(null); + + when(verifierRepository.existsByWalletIdAndVerifierId(walletId, null)) + .thenReturn(false); + + TrustedVerifier savedVerifier = TrustedVerifier.builder() + .id("generated-uuid") + .walletId(walletId) + .verifierId(null) + .build(); + + when(verifierRepository.save(any(TrustedVerifier.class))).thenReturn(savedVerifier); + + // When + TrustedVerifierResponseDTO response = trustedVerifierService.addTrustedVerifier(walletId, request); + + // Then + assertNotNull(response); + assertEquals("generated-uuid", response.getId()); + + verify(verifierRepository).existsByWalletIdAndVerifierId(walletId, null); + verify(verifierRepository).save(any(TrustedVerifier.class)); + } + + @Test + void testAddTrustedVerifierRepositorySaveReturnsNull() { + // Given + when(verifierRepository.existsByWalletIdAndVerifierId(walletId, request.getVerifierId())) + .thenReturn(false); + + when(verifierRepository.save(any(TrustedVerifier.class))).thenReturn(null); + + // When & Then + assertThrows(NullPointerException.class, + () -> trustedVerifierService.addTrustedVerifier(walletId, request)); + + verify(verifierRepository).existsByWalletIdAndVerifierId(walletId, request.getVerifierId()); + verify(verifierRepository).save(any(TrustedVerifier.class)); + } + + @Test + void testAddTrustedVerifierWithEmptyStrings() { + // Given + String emptyWalletId = ""; + request.setVerifierId(""); + + when(verifierRepository.existsByWalletIdAndVerifierId(emptyWalletId, "")) + .thenReturn(false); + + TrustedVerifier savedVerifier = TrustedVerifier.builder() + .id("generated-uuid") + .walletId(emptyWalletId) + .verifierId("") + .build(); + + when(verifierRepository.save(any(TrustedVerifier.class))).thenReturn(savedVerifier); + + // When + TrustedVerifierResponseDTO response = trustedVerifierService.addTrustedVerifier(emptyWalletId, request); + + // Then + assertNotNull(response); + assertEquals("generated-uuid", response.getId()); + + verify(verifierRepository).existsByWalletIdAndVerifierId(emptyWalletId, ""); + verify(verifierRepository).save(any(TrustedVerifier.class)); + } + + @Test + void testAddTrustedVerifierRepositoryThrowsException() { + // Given + when(verifierRepository.existsByWalletIdAndVerifierId(walletId, request.getVerifierId())) + .thenReturn(false); + + when(verifierRepository.save(any(TrustedVerifier.class))) + .thenThrow(new RuntimeException("Database error")); + + // When & Then + assertThrows(RuntimeException.class, + () -> trustedVerifierService.addTrustedVerifier(walletId, request)); + + verify(verifierRepository).existsByWalletIdAndVerifierId(walletId, request.getVerifierId()); + verify(verifierRepository).save(any(TrustedVerifier.class)); + } +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java b/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java index d543756d9..ee6e094fd 100644 --- a/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java @@ -7,9 +7,11 @@ import io.mosip.mimoto.dto.openid.presentation.PresentationRequestDTO; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.InvalidVerifierException; +import io.mosip.mimoto.repository.VerifierRepository; import io.mosip.mimoto.service.impl.VerifierServiceImpl; import io.mosip.mimoto.util.TestUtilities; import io.mosip.mimoto.util.Utilities; +import io.mosip.openID4VP.authorizationRequest.Verifier; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -18,7 +20,10 @@ import org.mockito.junit.MockitoJUnitRunner; import java.io.IOException; +import java.net.URISyntaxException; +import java.util.Arrays; import java.util.Collections; +import java.util.List; import java.util.Optional; import static org.junit.Assert.*; @@ -35,6 +40,14 @@ public class VerifierServiceTest { @InjectMocks VerifierServiceImpl verifiersService; + @Mock + VerifierRepository verifierRepository; + + private static final String VALID_CLIENT_ID = "https://injiverify.collab.mosip.net"; + private static final String ENCODED_CLIENT_ID = "https%3A%2F%2Finjiverify.collab.mosip.net"; + private static final String VALID_RESPONSE_URI = "https://example.com/callback"; + private static final String ENCODED_RESPONSE_URI = "https%3A%2F%2Fexample.com%2Fcallback"; + @Before public void setUp() throws JsonProcessingException { VerifiersDTO verifiersDTO = TestUtilities.getTrustedVerifiers(); @@ -71,7 +84,6 @@ public void getNullWhenInvalidClientIdIsPassed() throws ApiNotAccessibleExceptio assertTrue(verifierDTO.isEmpty()); } - @Test public void shouldThrowApiNotAccessibleExceptionOnFetchingTrustedVerifiersListFailure() { when(utilities.getTrustedVerifiersJsonValue()).thenReturn(null); @@ -114,4 +126,192 @@ public void validateTrustedVerifiersAndThrowInvalidVerifiersExceptionWhenClientI assertEquals(expectedExceptionMsg, actualException.getMessage()); } + + @Test + public void testIsVerifierTrustedByWallet_TrustedVerifier() { + String walletId = "wallet123"; + String verifierId = "verifier123"; + when(verifierRepository.existsByWalletIdAndVerifierId(walletId, verifierId)).thenReturn(true); + + boolean result = verifiersService.isVerifierTrustedByWallet(verifierId, walletId); + + assertTrue(result); + } + + @Test + public void testIsVerifierTrustedByWallet_UntrustedVerifier() { + String walletId = "wallet123"; + String verifierId = "verifier123"; + when(verifierRepository.existsByWalletIdAndVerifierId(walletId, verifierId)).thenReturn(false); + + boolean result = verifiersService.isVerifierTrustedByWallet(verifierId, walletId); + + assertFalse(result); + } + + @Test + public void testIsVerifierTrustedByWallet_NullInputs() { + String walletId = null; + String verifierId = null; + when(verifierRepository.existsByWalletIdAndVerifierId(walletId, verifierId)).thenReturn(false); + + boolean result = verifiersService.isVerifierTrustedByWallet(verifierId, walletId); + + assertFalse(result); + } + + @Test + public void testIsVerifierClientPreregisteredValidClientIdAndMatchingVerifier() throws URISyntaxException { + List verifiers = List.of(new Verifier(VALID_CLIENT_ID, List.of(VALID_RESPONSE_URI), null)); + String url = "https://example.com?client_id=" + ENCODED_CLIENT_ID + "&response_uri=" + ENCODED_RESPONSE_URI; + + boolean result = verifiersService.isVerifierClientPreregistered(verifiers, url); + + assertTrue(result); + } + + @Test + public void testIsVerifierClientPreregisteredValidClientIdButNoMatchingVerifier() throws URISyntaxException { + List verifiers = List.of(new Verifier("https://other-verifier.com", List.of(VALID_RESPONSE_URI), null)); + String url = "https://example.com?client_id=" + ENCODED_CLIENT_ID; + + boolean result = verifiersService.isVerifierClientPreregistered(verifiers, url); + + assertFalse(result); + } + + @Test + public void testIsVerifierClientPreregisteredNullClientId() throws URISyntaxException { + List verifiers = List.of(new Verifier(VALID_CLIENT_ID, List.of(VALID_RESPONSE_URI), null)); + String url = "https://example.com?other_param=value"; + + boolean result = verifiersService.isVerifierClientPreregistered(verifiers, url); + + assertFalse(result); + } + + @Test + public void testIsVerifierClientPreregisteredEmptyClientId() throws URISyntaxException { + List verifiers = List.of(new Verifier(VALID_CLIENT_ID, List.of(VALID_RESPONSE_URI), null)); + String url = "https://example.com?client_id="; + + boolean result = verifiersService.isVerifierClientPreregistered(verifiers, url); + + assertFalse(result); + } + + @Test + public void testIsVerifierClientPreregisteredWhitespaceOnlyClientId() throws URISyntaxException { + List verifiers = List.of(new Verifier(VALID_CLIENT_ID, List.of(VALID_RESPONSE_URI), null)); + String url = "https://example.com?client_id=%20%20"; + + boolean result = verifiersService.isVerifierClientPreregistered(verifiers, url); + + assertFalse(result); + } + + @Test + public void testIsVerifierClientPreregisteredEmptyVerifiersList() throws URISyntaxException { + List verifiers = Collections.emptyList(); + String url = "https://example.com?client_id=" + ENCODED_CLIENT_ID; + + boolean result = verifiersService.isVerifierClientPreregistered(verifiers, url); + + assertFalse(result); + } + + @Test + public void testIsVerifierClientPreregisteredPartialResponseUrisMatch() throws URISyntaxException { + List verifierResponseUris = Arrays.asList("https://example.com/callback1", "https://example.com/callback2"); + List verifiers = List.of(new Verifier(VALID_CLIENT_ID, verifierResponseUris, null)); + String url = "https://example.com?client_id=" + ENCODED_CLIENT_ID + "&response_uri=" + ENCODED_RESPONSE_URI; + + boolean result = verifiersService.isVerifierClientPreregistered(verifiers, url); + + assertFalse(result); + } + + @Test + public void testIsVerifierClientPreregisteredNullUrl() throws URISyntaxException { + List verifiers = List.of(new Verifier(VALID_CLIENT_ID, List.of(VALID_RESPONSE_URI), null)); + String url = null; + + boolean result = verifiersService.isVerifierClientPreregistered(verifiers, url); + + assertFalse(result); + } + + @Test + public void testIsVerifierClientPreregisteredEmptyUrl() throws URISyntaxException { + List verifiers = List.of(new Verifier(VALID_CLIENT_ID, List.of(VALID_RESPONSE_URI), null)); + String url = ""; + + boolean result = verifiersService.isVerifierClientPreregistered(verifiers, url); + + assertFalse(result); + } + + @Test + public void testIsVerifierClientPreregisteredWhitespaceOnlyUrl() throws URISyntaxException { + List verifiers = List.of(new Verifier(VALID_CLIENT_ID, List.of(VALID_RESPONSE_URI), null)); + String url = " "; + + boolean result = verifiersService.isVerifierClientPreregistered(verifiers, url); + + assertFalse(result); + } + + @Test + public void testIsVerifierClientPreregisteredSpecialCharactersInClientId() throws URISyntaxException { + String specialClientId = "https://test.com/path?param=value&other=123"; + String encodedSpecialClientId = "https%3A%2F%2Ftest.com%2Fpath%3Fparam%3Dvalue%26other%3D123"; + List verifiers = List.of(new Verifier(specialClientId, List.of(VALID_RESPONSE_URI), null)); + String url = "https://example.com?client_id=" + encodedSpecialClientId; + + boolean result = verifiersService.isVerifierClientPreregistered(verifiers, url); + + assertFalse(result); + } + + @Test + public void testIsVerifierClientPreregisteredSpecialCharactersInResponseUri() throws URISyntaxException { + String specialResponseUri = "https://test.com/callback?param=value&other=123"; + String encodedSpecialResponseUri = "https%3A%2F%2Ftest.com%2Fcallback%3Fparam%3Dvalue%26other%3D123"; + List verifiers = List.of(new Verifier(VALID_CLIENT_ID, List.of(specialResponseUri), null)); + String url = "https://example.com?client_id=" + ENCODED_CLIENT_ID + "&response_uri=" + encodedSpecialResponseUri; + + boolean result = verifiersService.isVerifierClientPreregistered(verifiers, url); + + assertTrue(result); + } + + @Test + public void testIsVerifierClientPreregisteredMultipleVerifiers() throws URISyntaxException { + List verifiers = Arrays.asList(new Verifier("https://verifier1.com", List.of("https://callback1.com"), null), new Verifier(VALID_CLIENT_ID, List.of(VALID_RESPONSE_URI), null), new Verifier("https://verifier3.com", List.of("https://callback3.com"), null)); + String url = "https://example.com?client_id=" + ENCODED_CLIENT_ID + "&response_uri=" + ENCODED_RESPONSE_URI; + + boolean result = verifiersService.isVerifierClientPreregistered(verifiers, url); + + assertTrue(result); + } + + @Test + public void testIsVerifierClientPreregisteredNullResponseUris() throws URISyntaxException { + List verifiers = List.of(new Verifier(VALID_CLIENT_ID, List.of(VALID_RESPONSE_URI), null)); + String url = "https://example.com?client_id=" + ENCODED_CLIENT_ID; + + boolean result = verifiersService.isVerifierClientPreregistered(verifiers, url); + + assertFalse(result); + } + + @Test + public void testIsVerifierClientPreregisteredEmptyResponseUris() throws URISyntaxException { + List verifiers = List.of(new Verifier(VALID_CLIENT_ID, List.of(VALID_RESPONSE_URI), null)); + String url = "https://example.com?client_id=" + ENCODED_CLIENT_ID + "&response_uri="; + + boolean result = verifiersService.isVerifierClientPreregistered(verifiers, url); + + assertFalse(result); + } } diff --git a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java index c2311bfd0..775f939cf 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java @@ -1,6 +1,7 @@ package io.mosip.mimoto.service; import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.dto.DecryptedCredentialDTO; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.*; @@ -20,7 +21,9 @@ import org.mockito.junit.MockitoJUnitRunner; import java.io.ByteArrayInputStream; +import java.io.IOException; import java.lang.reflect.Field; +import java.lang.reflect.Method; import java.time.Instant; import java.util.List; import java.util.Map; @@ -65,6 +68,11 @@ public class WalletCredentialServiceTest { private TokenResponseDTO tokenResponse; private VerifiableCredential verifiableCredential; private IssuerConfig issuerConfig; + + private VerifiableCredential testCredential1; + private VerifiableCredential testCredential2; + private VCCredentialResponse testVcResponse1; + private VCCredentialResponse testVcResponse2; @Before public void setUp() throws Exception { @@ -91,6 +99,11 @@ public void setUp() throws Exception { Field field = WalletCredentialServiceImpl.class.getDeclaredField("issuersWithSingleVcLimit"); field.setAccessible(true); field.set(walletCredentialService, "Mosip"); + + testCredential1 = createTestCredential("cred1", "issuer1", "type1"); + testCredential2 = createTestCredential("cred2", "issuer2", "type2"); + testVcResponse1 = createTestVCCredentialResponse("type1"); + testVcResponse2 = createTestVCCredentialResponse("type2"); } @Test @@ -425,4 +438,328 @@ public void shouldThrowCredentialProcessingExceptionOnPdfGenerationException() t assertEquals(CREDENTIAL_FETCH_EXCEPTION.getErrorCode(), exception.getErrorCode()); } + + @Test + public void shouldGetDecryptedCredentialsSuccessfully() throws Exception { + List walletCredentials = List.of(testCredential1, testCredential2); + + when(walletCredentialsRepository.findByWalletIdOrderByCreatedAtDesc(walletId)) + .thenReturn(walletCredentials); + + when(encryptionDecryptionUtil.decryptCredential("encryptedcred1", base64Key)) + .thenReturn(new ObjectMapper().writeValueAsString(testVcResponse1)); + when(encryptionDecryptionUtil.decryptCredential("encryptedcred2", base64Key)) + .thenReturn(new ObjectMapper().writeValueAsString(testVcResponse2)); + when(objectMapper.readValue(anyString(), eq(VCCredentialResponse.class))) + .thenReturn(testVcResponse1, testVcResponse2); + + List result = walletCredentialService.getDecryptedCredentials(walletId, base64Key); + + assertEquals(2, result.size()); + assertEquals("cred1", result.get(0).getId()); + assertEquals("cred2", result.get(1).getId()); + assertEquals(testVcResponse1, result.get(0).getCredential()); + assertEquals(testVcResponse2, result.get(1).getCredential()); + + verify(walletCredentialsRepository).findByWalletIdOrderByCreatedAtDesc(walletId); + verify(encryptionDecryptionUtil).decryptCredential("encryptedcred1", base64Key); + verify(encryptionDecryptionUtil).decryptCredential("encryptedcred2", base64Key); + verify(objectMapper, times(2)).readValue(anyString(), eq(VCCredentialResponse.class)); + } + + @Test + public void shouldGetDecryptedCredentialsWithPartialFailures() throws Exception { + List walletCredentials = List.of(testCredential1, testCredential2); + + when(walletCredentialsRepository.findByWalletIdOrderByCreatedAtDesc(walletId)) + .thenReturn(walletCredentials); + + when(encryptionDecryptionUtil.decryptCredential("encryptedcred1", base64Key)) + .thenReturn(new ObjectMapper().writeValueAsString(testVcResponse1)); + when(encryptionDecryptionUtil.decryptCredential("encryptedcred2", base64Key)) + .thenThrow(new DecryptionException("DECRYPTION_ERROR", "Decryption failed")); + when(objectMapper.readValue(anyString(), eq(VCCredentialResponse.class))) + .thenReturn(testVcResponse1); + + List result = walletCredentialService.getDecryptedCredentials(walletId, base64Key); + + assertEquals(1, result.size()); + assertEquals("cred1", result.get(0).getId()); + assertEquals(testVcResponse1, result.get(0).getCredential()); + + verify(walletCredentialsRepository).findByWalletIdOrderByCreatedAtDesc(walletId); + verify(encryptionDecryptionUtil).decryptCredential("encryptedcred1", base64Key); + verify(encryptionDecryptionUtil).decryptCredential("encryptedcred2", base64Key); + verify(objectMapper).readValue(anyString(), eq(VCCredentialResponse.class)); + } + + @Test + public void shouldGetDecryptedCredentialsWithJsonParsingFailure() throws Exception { + List walletCredentials = List.of(testCredential1, testCredential2); + String validJson = new ObjectMapper().writeValueAsString(testVcResponse2); + + when(walletCredentialsRepository.findByWalletIdOrderByCreatedAtDesc(walletId)) + .thenReturn(walletCredentials); + + when(encryptionDecryptionUtil.decryptCredential("encryptedcred1", base64Key)) + .thenReturn("invalid-json"); + when(encryptionDecryptionUtil.decryptCredential("encryptedcred2", base64Key)) + .thenReturn(validJson); + + when(objectMapper.readValue("invalid-json", VCCredentialResponse.class)) + .thenThrow(new com.fasterxml.jackson.core.JsonProcessingException("Invalid JSON") {}); + when(objectMapper.readValue(validJson, VCCredentialResponse.class)) + .thenReturn(testVcResponse2); + + List result = walletCredentialService.getDecryptedCredentials(walletId, base64Key); + + assertEquals(1, result.size()); + assertEquals("cred2", result.get(0).getId()); + assertEquals(testVcResponse2, result.get(0).getCredential()); + + verify(walletCredentialsRepository).findByWalletIdOrderByCreatedAtDesc(walletId); + verify(encryptionDecryptionUtil).decryptCredential("encryptedcred1", base64Key); + verify(encryptionDecryptionUtil).decryptCredential("encryptedcred2", base64Key); + verify(objectMapper).readValue("invalid-json", VCCredentialResponse.class); + verify(objectMapper).readValue(validJson, VCCredentialResponse.class); + } + + @Test + public void shouldGetDecryptedCredentialsWithEmptyWallet() { + when(walletCredentialsRepository.findByWalletIdOrderByCreatedAtDesc(walletId)) + .thenReturn(List.of()); + + List result = walletCredentialService.getDecryptedCredentials(walletId, base64Key); + + assertTrue(result.isEmpty()); + + verify(walletCredentialsRepository).findByWalletIdOrderByCreatedAtDesc(walletId); + verifyNoInteractions(encryptionDecryptionUtil); + verifyNoInteractions(objectMapper); + } + + @Test + public void shouldGetDecryptedCredentialsWithAllFailures() throws Exception { + List walletCredentials = List.of(testCredential1, testCredential2); + + when(walletCredentialsRepository.findByWalletIdOrderByCreatedAtDesc(walletId)) + .thenReturn(walletCredentials); + + when(encryptionDecryptionUtil.decryptCredential("encryptedcred1", base64Key)) + .thenThrow(new DecryptionException("DECRYPTION_ERROR", "Decryption failed")); + when(encryptionDecryptionUtil.decryptCredential("encryptedcred2", base64Key)) + .thenThrow(new DecryptionException("DECRYPTION_ERROR", "Decryption failed")); + + List result = walletCredentialService.getDecryptedCredentials(walletId, base64Key); + + assertTrue(result.isEmpty()); + + verify(walletCredentialsRepository).findByWalletIdOrderByCreatedAtDesc(walletId); + verify(encryptionDecryptionUtil).decryptCredential("encryptedcred1", base64Key); + verify(encryptionDecryptionUtil).decryptCredential("encryptedcred2", base64Key); + verifyNoInteractions(objectMapper); + } + + @Test + public void shouldDecryptAndParseCredentialSuccessfully() throws Exception { + String decryptedJson = new ObjectMapper().writeValueAsString(testVcResponse1); + + when(encryptionDecryptionUtil.decryptCredential("encryptedcred1", base64Key)) + .thenReturn(decryptedJson); + when(objectMapper.readValue(decryptedJson, VCCredentialResponse.class)) + .thenReturn(testVcResponse1); + + Method method = WalletCredentialServiceImpl.class.getDeclaredMethod( + "decryptAndParseCredential", VerifiableCredential.class, String.class); + method.setAccessible(true); + VCCredentialResponse result = (VCCredentialResponse) method.invoke(walletCredentialService, testCredential1, base64Key); + + assertEquals(testVcResponse1, result); + verify(encryptionDecryptionUtil).decryptCredential("encryptedcred1", base64Key); + verify(objectMapper).readValue(decryptedJson, VCCredentialResponse.class); + } + + @Test + public void shouldThrowIllegalArgumentExceptionWhenCredentialIsNull() throws Exception { + Method method = WalletCredentialServiceImpl.class.getDeclaredMethod( + "decryptAndParseCredential", VerifiableCredential.class, String.class); + method.setAccessible(true); + + java.lang.IllegalArgumentException exception = assertThrows(java.lang.IllegalArgumentException.class, () -> { + try { + method.invoke(walletCredentialService, null, base64Key); + } catch (java.lang.reflect.InvocationTargetException e) { + throw e.getCause(); + } + }); + + assertEquals("Credential cannot be null", exception.getMessage()); + verifyNoInteractions(encryptionDecryptionUtil); + verifyNoInteractions(objectMapper); + } + + @Test + public void shouldThrowIllegalArgumentExceptionWhenCredentialDataIsNull() throws Exception { + VerifiableCredential credentialWithNullData = createTestCredential("cred1", "issuer1", "type1"); + credentialWithNullData.setCredential(null); + + Method method = WalletCredentialServiceImpl.class.getDeclaredMethod( + "decryptAndParseCredential", VerifiableCredential.class, String.class); + method.setAccessible(true); + + java.lang.IllegalArgumentException exception = assertThrows(java.lang.IllegalArgumentException.class, () -> { + try { + method.invoke(walletCredentialService, credentialWithNullData, base64Key); + } catch (java.lang.reflect.InvocationTargetException e) { + throw e.getCause(); + } + }); + + assertEquals("Credential data cannot be null", exception.getMessage()); + verifyNoInteractions(encryptionDecryptionUtil); + verifyNoInteractions(objectMapper); + } + + @Test + public void shouldThrowIllegalArgumentExceptionWhenDecryptedDataIsNull() throws Exception { + when(encryptionDecryptionUtil.decryptCredential("encryptedcred1", base64Key)) + .thenReturn(null); + + Method method = WalletCredentialServiceImpl.class.getDeclaredMethod( + "decryptAndParseCredential", VerifiableCredential.class, String.class); + method.setAccessible(true); + + java.lang.IllegalArgumentException exception = assertThrows(java.lang.IllegalArgumentException.class, () -> { + try { + method.invoke(walletCredentialService, testCredential1, base64Key); + } catch (java.lang.reflect.InvocationTargetException e) { + throw e.getCause(); + } + }); + + assertEquals("Failed to decrypt credential or decrypted data is empty", exception.getMessage()); + verify(encryptionDecryptionUtil).decryptCredential("encryptedcred1", base64Key); + verifyNoInteractions(objectMapper); + } + + @Test + public void shouldThrowIllegalArgumentExceptionWhenDecryptedDataIsEmpty() throws Exception { + when(encryptionDecryptionUtil.decryptCredential("encryptedcred1", base64Key)) + .thenReturn(""); + + Method method = WalletCredentialServiceImpl.class.getDeclaredMethod( + "decryptAndParseCredential", VerifiableCredential.class, String.class); + method.setAccessible(true); + + java.lang.IllegalArgumentException exception = assertThrows(java.lang.IllegalArgumentException.class, () -> { + try { + method.invoke(walletCredentialService, testCredential1, base64Key); + } catch (java.lang.reflect.InvocationTargetException e) { + throw e.getCause(); + } + }); + + assertEquals("Failed to decrypt credential or decrypted data is empty", exception.getMessage()); + verify(encryptionDecryptionUtil).decryptCredential("encryptedcred1", base64Key); + verifyNoInteractions(objectMapper); + } + + @Test + public void shouldThrowIllegalArgumentExceptionWhenDecryptedDataIsWhitespace() throws Exception { + when(encryptionDecryptionUtil.decryptCredential("encryptedcred1", base64Key)) + .thenReturn(" "); + + Method method = WalletCredentialServiceImpl.class.getDeclaredMethod( + "decryptAndParseCredential", VerifiableCredential.class, String.class); + method.setAccessible(true); + + java.lang.IllegalArgumentException exception = assertThrows(java.lang.IllegalArgumentException.class, () -> { + try { + method.invoke(walletCredentialService, testCredential1, base64Key); + } catch (java.lang.reflect.InvocationTargetException e) { + throw e.getCause(); + } + }); + + assertEquals("Failed to decrypt credential or decrypted data is empty", exception.getMessage()); + verify(encryptionDecryptionUtil).decryptCredential("encryptedcred1", base64Key); + verifyNoInteractions(objectMapper); + } + + @Test + public void shouldThrowDecryptionExceptionWhenDecryptionFails() throws Exception { + when(encryptionDecryptionUtil.decryptCredential("encryptedcred1", base64Key)) + .thenThrow(new DecryptionException("DECRYPTION_ERROR", "Decryption failed")); + + Method method = WalletCredentialServiceImpl.class.getDeclaredMethod( + "decryptAndParseCredential", VerifiableCredential.class, String.class); + method.setAccessible(true); + + DecryptionException exception = assertThrows(DecryptionException.class, () -> { + try { + method.invoke(walletCredentialService, testCredential1, base64Key); + } catch (java.lang.reflect.InvocationTargetException e) { + throw e.getCause(); + } + }); + + assertEquals("DECRYPTION_ERROR", exception.getErrorCode()); + assertEquals("DECRYPTION_ERROR --> Decryption failed", exception.getMessage()); + verify(encryptionDecryptionUtil).decryptCredential("encryptedcred1", base64Key); + verifyNoInteractions(objectMapper); + } + + @Test + public void shouldThrowIOExceptionWhenJsonParsingFails() throws Exception { + String invalidJson = "invalid-json"; + + when(encryptionDecryptionUtil.decryptCredential("encryptedcred1", base64Key)) + .thenReturn(invalidJson); + when(objectMapper.readValue(invalidJson, VCCredentialResponse.class)) + .thenThrow(new com.fasterxml.jackson.core.JsonProcessingException("Invalid JSON") {}); + + Method method = WalletCredentialServiceImpl.class.getDeclaredMethod( + "decryptAndParseCredential", VerifiableCredential.class, String.class); + method.setAccessible(true); + + IOException exception = assertThrows(IOException.class, () -> { + try { + method.invoke(walletCredentialService, testCredential1, base64Key); + } catch (java.lang.reflect.InvocationTargetException e) { + throw e.getCause(); + } + }); + + assertEquals("Invalid JSON", exception.getMessage()); + verify(encryptionDecryptionUtil).decryptCredential("encryptedcred1", base64Key); + verify(objectMapper).readValue(invalidJson, VCCredentialResponse.class); + } + + private VerifiableCredential createTestCredential(String id, String issuerId, String credentialType) { + VerifiableCredential credential = new VerifiableCredential(); + credential.setId(id); + credential.setWalletId(walletId); + credential.setCredential("encrypted" + id); + credential.setCreatedAt(Instant.now()); + credential.setUpdatedAt(Instant.now()); + + CredentialMetadata metadata = new CredentialMetadata(); + metadata.setIssuerId(issuerId); + metadata.setCredentialType(credentialType); + credential.setCredentialMetadata(metadata); + + return credential; + } + + private VCCredentialResponse createTestVCCredentialResponse(String credentialType) { + return VCCredentialResponse.builder() + .format("ldp_vc") + .credential(VCCredentialProperties.builder() + .type(List.of(credentialType)) + .issuer("issuer123") + .issuanceDate("2024-01-01T00:00:00Z") + .credentialSubject(Map.of("name", "John Doe")) + .build()) + .build(); + } } \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/util/Base64UtilTest.java b/src/test/java/io/mosip/mimoto/util/Base64UtilTest.java new file mode 100644 index 000000000..e629f8185 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/util/Base64UtilTest.java @@ -0,0 +1,611 @@ +package io.mosip.mimoto.util; + +import org.junit.Test; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; + +import static org.junit.Assert.*; + +public class Base64UtilTest { + + @Test + public void testEncodeStringSuccess() { + String input = "Hello World"; + String result = Base64Util.encode(input); + + assertNotNull(result); + assertFalse(result.contains("=")); + assertFalse(result.contains("+")); + assertFalse(result.contains("/")); + } + + @Test + public void testEncodeStringWithNullInput() { + String result = Base64Util.encode((String) null); + assertNull(result); + } + + @Test + public void testEncodeStringWithEmptyInput() { + String input = ""; + String result = Base64Util.encode(input); + + assertNotNull(result); + assertEquals("", result); + } + + @Test + public void testEncodeStringWithSpecialCharacters() { + String input = "Hello@#$%^&*()_+-=[]{}|;:',.<>?/~`"; + String result = Base64Util.encode(input); + + assertNotNull(result); + assertFalse(result.contains("=")); + } + + @Test + public void testEncodeStringWithUnicodeCharacters() { + String input = "Hello 世界 🌍"; + String result = Base64Util.encode(input); + + assertNotNull(result); + assertFalse(result.contains("=")); + } + + @Test + public void testEncodeStringWithMultilineText() { + String input = "Line 1\nLine 2\nLine 3"; + String result = Base64Util.encode(input); + + assertNotNull(result); + assertFalse(result.contains("\n")); + } + + @Test + public void testEncodeBytesSuccess() { + byte[] input = "Hello World".getBytes(StandardCharsets.UTF_8); + String result = Base64Util.encode(input); + + assertNotNull(result); + assertFalse(result.contains("=")); + } + + @Test + public void testEncodeBytesWithNullInput() { + String result = Base64Util.encode((byte[]) null); + assertNull(result); + } + + @Test + public void testEncodeBytesWithEmptyArray() { + byte[] input = new byte[0]; + String result = Base64Util.encode(input); + + assertNotNull(result); + assertEquals("", result); + } + + @Test + public void testEncodeBytesWithBinaryData() { + byte[] input = new byte[]{0x00, 0x01, 0x02, (byte) 0xFF, (byte) 0xFE}; + String result = Base64Util.encode(input); + + assertNotNull(result); + assertFalse(result.contains("=")); + } + + @Test + public void testDecodeSuccess() { + String input = "SGVsbG8gV29ybGQ"; + byte[] result = Base64Util.decode(input); + + assertNotNull(result); + assertEquals("Hello World", new String(result, StandardCharsets.UTF_8)); + } + + @Test + public void testDecodeWithNullInput() { + byte[] result = Base64Util.decode(null); + assertNull(result); + } + + @Test + public void testDecodeWithEmptyString() { + String input = ""; + byte[] result = Base64Util.decode(input); + + assertNotNull(result); + assertEquals(0, result.length); + } + + @Test + public void testDecodeWithBase64UrlCharacters() { + String input = "SGVsbG8tV29ybGRf"; + byte[] result = Base64Util.decode(input); + + assertNotNull(result); + assertTrue(result.length > 0); + } + + @Test + public void testDecodeWithInvalidBase64String() { + String input = "Invalid!@#$Base64"; + try { + byte[] result = Base64Util.decode(input); + assertNotNull(result); + } catch (Exception e) { + assertNotNull(e); + } + } + + @Test + public void testDecodeToStringSuccess() { + String input = "SGVsbG8gV29ybGQ"; + String result = Base64Util.decodeToString(input); + + assertNotNull(result); + assertEquals("Hello World", result); + } + + @Test + public void testDecodeToStringWithNullInput() { + String result = Base64Util.decodeToString(null); + assertNull(result); + } + + @Test + public void testDecodeToStringWithUnicodeContent() { + String original = "Hello 世界 🌍"; + String encoded = Base64Util.encode(original); + String decoded = Base64Util.decodeToString(encoded); + + assertEquals(original, decoded); + } + + @Test + public void testEncodeWithJavaStdLibStringSuccess() { + String input = "Hello World"; + String result = Base64Util.encodeWithJavaStdLib(input); + + assertNotNull(result); + assertFalse(result.contains("=")); + assertFalse(result.contains("+")); + assertFalse(result.contains("/")); + } + + @Test + public void testEncodeWithJavaStdLibStringWithNullInput() { + String result = Base64Util.encodeWithJavaStdLib((String) null); + assertNull(result); + } + + @Test + public void testEncodeWithJavaStdLibStringWithEmptyInput() { + String input = ""; + String result = Base64Util.encodeWithJavaStdLib(input); + + assertNotNull(result); + assertEquals("", result); + } + + @Test + public void testEncodeWithJavaStdLibBytesSuccess() { + byte[] input = "Hello World".getBytes(StandardCharsets.UTF_8); + String result = Base64Util.encodeWithJavaStdLib(input); + + assertNotNull(result); + assertFalse(result.contains("=")); + } + + @Test + public void testEncodeWithJavaStdLibBytesWithNullInput() { + String result = Base64Util.encodeWithJavaStdLib((byte[]) null); + assertNull(result); + } + + @Test + public void testEncodeWithJavaStdLibBytesWithEmptyArray() { + byte[] input = new byte[0]; + String result = Base64Util.encodeWithJavaStdLib(input); + + assertNotNull(result); + assertEquals("", result); + } + + @Test + public void testDecodeWithJavaStdLibSuccess() { + String input = "SGVsbG8gV29ybGQ"; + byte[] result = Base64Util.decodeWithJavaStdLib(input); + + assertNotNull(result); + assertEquals("Hello World", new String(result, StandardCharsets.UTF_8)); + } + + @Test + public void testDecodeWithJavaStdLibWithNullInput() { + byte[] result = Base64Util.decodeWithJavaStdLib(null); + assertNull(result); + } + + @Test + public void testDecodeWithJavaStdLibWithEmptyString() { + String input = ""; + byte[] result = Base64Util.decodeWithJavaStdLib(input); + + assertNotNull(result); + assertEquals(0, result.length); + } + + @Test(expected = IllegalArgumentException.class) + public void testDecodeWithJavaStdLibWithInvalidBase64String() { + String input = "Invalid!@#$Base64"; + Base64Util.decodeWithJavaStdLib(input); + } + + @Test + public void testDecodeFlexibleWithBase64UrlString() { + String input = "SGVsbG8tV29ybGRf"; + byte[] result = Base64Util.decodeFlexible(input); + + assertNotNull(result); + assertTrue(result.length > 0); + } + + @Test + public void testDecodeFlexibleWithStandardBase64String() { + String input = Base64.getEncoder().encodeToString("Hello World".getBytes(StandardCharsets.UTF_8)); + byte[] result = Base64Util.decodeFlexible(input); + + assertNotNull(result); + assertEquals("Hello World", new String(result, StandardCharsets.UTF_8)); + } + + @Test + public void testDecodeFlexibleWithNullInput() { + byte[] result = Base64Util.decodeFlexible(null); + assertNull(result); + } + + @Test + public void testDecodeFlexibleWithBase64UrlNoPadding() { + String original = "Hello"; + String encoded = Base64.getUrlEncoder().withoutPadding().encodeToString(original.getBytes(StandardCharsets.UTF_8)); + byte[] result = Base64Util.decodeFlexible(encoded); + + assertNotNull(result); + assertEquals(original, new String(result, StandardCharsets.UTF_8)); + } + + @Test + public void testDecodeFlexibleFallsBackToStandardBase64() { + String original = "Test Data"; + String encoded = Base64.getEncoder().encodeToString(original.getBytes(StandardCharsets.UTF_8)); + byte[] result = Base64Util.decodeFlexible(encoded); + + assertNotNull(result); + assertEquals(original, new String(result, StandardCharsets.UTF_8)); + } + + @Test + public void testDecodeFlexibleWithBase64UrlCharactersAndNormalization() { + String base64UrlString = "SGVsbG8tV29ybGQ"; + byte[] result = Base64Util.decodeFlexible(base64UrlString); + + assertNotNull(result); + assertTrue(result.length > 0); + } + + @Test(expected = IllegalArgumentException.class) + public void testDecodeFlexibleWithCompletelyInvalidString() { + String input = "!!!Invalid@@@"; + Base64Util.decodeFlexible(input); + } + + @Test + public void testNormalizeBase64StringWithBase64UrlCharacters() { + String input = "SGVsbG8tV29ybGRf"; + String result = Base64Util.normalizeBase64String(input); + + assertNotNull(result); + assertFalse(result.contains("-")); + assertFalse(result.contains("_")); + assertTrue(result.contains("+") || !input.contains("-")); + assertTrue(result.contains("/") || !input.contains("_")); + } + + @Test + public void testNormalizeBase64StringWithNullInput() { + String result = Base64Util.normalizeBase64String(null); + assertNull(result); + } + + @Test + public void testNormalizeBase64StringAddsProperPadding() { + String input = "SGVsbG8"; + String result = Base64Util.normalizeBase64String(input); + + assertNotNull(result); + assertTrue(result.length() % 4 == 0); + assertTrue(result.endsWith("=")); + } + + @Test + public void testNormalizeBase64StringWithAlreadyPaddedString() { + String input = "SGVsbG8gV29ybGQ="; + String result = Base64Util.normalizeBase64String(input); + + assertNotNull(result); + assertTrue(result.length() % 4 == 0); + } + + @Test + public void testNormalizeBase64StringWithNoCharactersToReplace() { + String input = "SGVsbG8"; + String result = Base64Util.normalizeBase64String(input); + + assertNotNull(result); + assertTrue(result.length() % 4 == 0); + } + + @Test + public void testNormalizeBase64StringWithEmptyString() { + String input = ""; + String result = Base64Util.normalizeBase64String(input); + + assertNotNull(result); + assertEquals("", result); + } + + @Test + public void testNormalizeBase64StringConvertsHyphenToPlus() { + String input = "SGVs-G8"; + String result = Base64Util.normalizeBase64String(input); + + assertNotNull(result); + assertTrue(result.contains("+")); + assertFalse(result.contains("-")); + } + + @Test + public void testNormalizeBase64StringConvertsUnderscoreToSlash() { + String input = "SGVs_G8"; + String result = Base64Util.normalizeBase64String(input); + + assertNotNull(result); + assertTrue(result.contains("/")); + assertFalse(result.contains("_")); + } + + @Test + public void testNormalizeBase64StringWithMultiplePaddingNeeded() { + String input = "SGVs"; + String result = Base64Util.normalizeBase64String(input); + + assertNotNull(result); + assertTrue(result.length() % 4 == 0); + int paddingCount = result.length() - result.replace("=", "").length(); + assertTrue(paddingCount >= 0); + } + + @Test + public void testCreateDetachedJwtSigningInputSuccess() { + String header = "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9"; + byte[] payload = "test payload".getBytes(StandardCharsets.UTF_8); + + byte[] result = Base64Util.createDetachedJwtSigningInput(header, payload); + + assertNotNull(result); + String resultString = new String(result, StandardCharsets.UTF_8); + assertTrue(resultString.startsWith(header)); + assertTrue(resultString.contains(".")); + assertTrue(resultString.endsWith("test payload")); + } + + @Test(expected = IllegalArgumentException.class) + public void testCreateDetachedJwtSigningInputWithNullHeader() { + byte[] payload = "test payload".getBytes(StandardCharsets.UTF_8); + Base64Util.createDetachedJwtSigningInput(null, payload); + } + + @Test(expected = IllegalArgumentException.class) + public void testCreateDetachedJwtSigningInputWithNullPayload() { + String header = "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9"; + Base64Util.createDetachedJwtSigningInput(header, null); + } + + @Test(expected = IllegalArgumentException.class) + public void testCreateDetachedJwtSigningInputWithBothNull() { + Base64Util.createDetachedJwtSigningInput(null, null); + } + + @Test + public void testCreateDetachedJwtSigningInputWithEmptyHeader() { + String header = ""; + byte[] payload = "test payload".getBytes(StandardCharsets.UTF_8); + + byte[] result = Base64Util.createDetachedJwtSigningInput(header, payload); + + assertNotNull(result); + String resultString = new String(result, StandardCharsets.UTF_8); + assertEquals(".test payload", resultString); + } + + @Test + public void testCreateDetachedJwtSigningInputWithEmptyPayload() { + String header = "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9"; + byte[] payload = new byte[0]; + + byte[] result = Base64Util.createDetachedJwtSigningInput(header, payload); + + assertNotNull(result); + String resultString = new String(result, StandardCharsets.UTF_8); + assertEquals(header + ".", resultString); + } + + @Test + public void testCreateDetachedJwtSigningInputCorrectByteOrder() { + String header = "ABC"; + byte[] payload = new byte[]{0x01, 0x02, 0x03}; + + byte[] result = Base64Util.createDetachedJwtSigningInput(header, payload); + + assertNotNull(result); + assertEquals('A', (char) result[0]); + assertEquals('B', (char) result[1]); + assertEquals('C', (char) result[2]); + assertEquals('.', (char) result[3]); + assertEquals(0x01, result[4]); + assertEquals(0x02, result[5]); + assertEquals(0x03, result[6]); + } + + @Test + public void testCreateDetachedJwtSigningInputCorrectLength() { + String header = "header123"; + byte[] payload = new byte[]{0x01, 0x02, 0x03, 0x04, 0x05}; + + byte[] result = Base64Util.createDetachedJwtSigningInput(header, payload); + + assertNotNull(result); + assertEquals(header.length() + 1 + payload.length, result.length); + } + + @Test + public void testCreateDetachedJwtSigningInputWithLargePayload() { + String header = "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9"; + byte[] payload = new byte[10000]; + for (int i = 0; i < payload.length; i++) { + payload[i] = (byte) (i % 256); + } + + byte[] result = Base64Util.createDetachedJwtSigningInput(header, payload); + + assertNotNull(result); + assertEquals(header.length() + 1 + payload.length, result.length); + } + + @Test + public void testEncodeAndDecodeRoundTrip() { + String original = "Test Data 123!@#"; + String encoded = Base64Util.encode(original); + String decoded = Base64Util.decodeToString(encoded); + + assertEquals(original, decoded); + } + + @Test + public void testEncodeWithJavaStdLibAndDecodeWithJavaStdLibRoundTrip() { + String original = "Test Data with Java StdLib"; + String encoded = Base64Util.encodeWithJavaStdLib(original); + byte[] decoded = Base64Util.decodeWithJavaStdLib(encoded); + + assertEquals(original, new String(decoded, StandardCharsets.UTF_8)); + } + + @Test + public void testEncodeBytesAndDecodeRoundTrip() { + byte[] original = new byte[]{0x00, 0x01, 0x7F, (byte) 0x80, (byte) 0xFF}; + String encoded = Base64Util.encode(original); + byte[] decoded = Base64Util.decode(encoded); + + assertArrayEquals(original, decoded); + } + + @Test + public void testDecodeFlexibleWithNormalizedStringRoundTrip() { + String original = "Test Data for Flexible Decode"; + String encoded = Base64.getUrlEncoder().withoutPadding() + .encodeToString(original.getBytes(StandardCharsets.UTF_8)); + byte[] decoded = Base64Util.decodeFlexible(encoded); + + assertEquals(original, new String(decoded, StandardCharsets.UTF_8)); + } + + @Test + public void testConsistencyBetweenEncodeMethodsForString() { + String input = "Consistency Test"; + String result1 = Base64Util.encode(input); + String result2 = Base64Util.encodeWithJavaStdLib(input); + + assertEquals(result1, result2); + } + + @Test + public void testConsistencyBetweenEncodeMethodsForBytes() { + byte[] input = "Consistency Test".getBytes(StandardCharsets.UTF_8); + String result1 = Base64Util.encode(input); + String result2 = Base64Util.encodeWithJavaStdLib(input); + + assertEquals(result1, result2); + } + + @Test + public void testDecodeFlexibleHandlesBase64UrlWithoutPadding() { + String original = "No padding test"; + String encoded = Base64.getUrlEncoder().withoutPadding() + .encodeToString(original.getBytes(StandardCharsets.UTF_8)); + byte[] decoded = Base64Util.decodeFlexible(encoded); + + assertNotNull(decoded); + assertEquals(original, new String(decoded, StandardCharsets.UTF_8)); + } + + @Test + public void testNormalizeBase64StringHandlesEdgeCaseLengths() { + String input1 = "A"; + String result1 = Base64Util.normalizeBase64String(input1); + assertTrue(result1.length() % 4 == 0); + + String input2 = "AB"; + String result2 = Base64Util.normalizeBase64String(input2); + assertTrue(result2.length() % 4 == 0); + + String input3 = "ABC"; + String result3 = Base64Util.normalizeBase64String(input3); + assertTrue(result3.length() % 4 == 0); + + String input4 = "ABCD"; + String result4 = Base64Util.normalizeBase64String(input4); + assertTrue(result4.length() % 4 == 0); + } + + @Test + public void testCreateDetachedJwtSigningInputWithRealJwtHeader() { + String header = "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImtleS0xMjMifQ"; + byte[] payload = "{\"sub\":\"1234567890\",\"name\":\"John Doe\"}".getBytes(StandardCharsets.UTF_8); + + byte[] result = Base64Util.createDetachedJwtSigningInput(header, payload); + + assertNotNull(result); + assertTrue(result.length > header.length() + payload.length); + + String resultString = new String(result, StandardCharsets.UTF_8); + assertTrue(resultString.contains(".")); + String[] parts = resultString.split("\\.", 2); + assertEquals(header, parts[0]); + } + + @Test + public void testEncodeStringProducesUrlSafeOutput() { + String input = "Test string that might produce + or / characters when encoded"; + String result = Base64Util.encode(input); + + assertNotNull(result); + assertFalse(result.contains("+")); + assertFalse(result.contains("/")); + assertFalse(result.contains("=")); + } + + @Test + public void testDecodeFlexibleWithMixedBase64AndBase64Url() { + String original = "Mixed encoding test"; + String standardBase64 = Base64.getEncoder().encodeToString(original.getBytes(StandardCharsets.UTF_8)); + + byte[] decoded = Base64Util.decodeFlexible(standardBase64); + + assertNotNull(decoded); + assertEquals(original, new String(decoded, StandardCharsets.UTF_8)); + } +} + diff --git a/src/test/java/io/mosip/mimoto/util/GlobalExceptionHandlerTest.java b/src/test/java/io/mosip/mimoto/util/GlobalExceptionHandlerTest.java index 33fd24b94..3a8865665 100644 --- a/src/test/java/io/mosip/mimoto/util/GlobalExceptionHandlerTest.java +++ b/src/test/java/io/mosip/mimoto/util/GlobalExceptionHandlerTest.java @@ -135,4 +135,30 @@ public void handleHttpMessageNotReadableExceptionReturnsBadRequest() throws Exce assertEquals(HttpStatus.BAD_REQUEST, responseStatus.value()); } + @Test + public void handleValidationExceptionReturnsBadRequest() throws Exception { + // Arrange: create BindingResult with a field error + Object target = new Object(); + org.springframework.validation.BeanPropertyBindingResult bindingResult = + new org.springframework.validation.BeanPropertyBindingResult(target, "errorDTO"); + bindingResult.addError(new org.springframework.validation.FieldError("errorDTO", "errorCode", "errorCode is required")); + + // Create MethodParameter pointing to the handler's parameter to construct the exception + java.lang.reflect.Method handlerMethod = GlobalExceptionHandler.class.getMethod("handleValidationException", org.springframework.web.bind.MethodArgumentNotValidException.class); + org.springframework.core.MethodParameter methodParameter = new org.springframework.core.MethodParameter(handlerMethod, 0); + + org.springframework.web.bind.MethodArgumentNotValidException ex = + new org.springframework.web.bind.MethodArgumentNotValidException(methodParameter, bindingResult); + + // Act + org.springframework.http.ResponseEntity response = globalExceptionHandler.handleValidationException(ex); + + // Assert + org.junit.Assert.assertEquals(org.springframework.http.HttpStatus.BAD_REQUEST, response.getStatusCode()); + io.mosip.mimoto.dto.ErrorDTO body = response.getBody(); + org.junit.Assert.assertNotNull(body); + org.junit.Assert.assertEquals("invalid_request", body.getErrorCode()); + org.junit.Assert.assertTrue(body.getErrorMessage().contains("errorCode")); + } + } \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index 83750eb9f..1534ddc9e 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -8,6 +8,7 @@ import com.itextpdf.kernel.pdf.PdfWriter; import com.itextpdf.kernel.pdf.PdfDocument; import com.itextpdf.kernel.pdf.PdfReader; +import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; import io.mosip.mimoto.model.CredentialMetadata; import io.mosip.mimoto.model.PasscodeControl; import io.mosip.mimoto.model.VerifiableCredential; @@ -21,6 +22,9 @@ import io.mosip.mimoto.dto.openid.datashare.DataShareResponseWrapperDTO; import io.mosip.mimoto.dto.openid.presentation.*; import io.mosip.mimoto.model.WalletLockStatus; +import io.mosip.openID4VP.OpenID4VP; +import io.mosip.openID4VP.authorizationRequest.AuthorizationRequest; +import io.mosip.openID4VP.authorizationRequest.presentationDefinition.*; import org.springframework.util.ResourceUtils; import java.io.InputStream; @@ -481,4 +485,71 @@ public static PasscodeControl createPasscodeControl(int failedAttemptCount, int passcodeControl.setRetryBlockedUntil(retryBlockedUntil); return passcodeControl; } -} + + public static VerifiablePresentationResponseDTO getVerifiablePresentationResponseDTO(String clientId, String clientName, String clientLogo, boolean isTrusted, boolean isPreRegisteredWithWallet, String redirectUri, OpenID4VP openID4VP, Instant time) { + VerifiablePresentationVerifierDTO presentationVerifierDTO = new VerifiablePresentationVerifierDTO( + clientId, + clientName, + clientLogo, + isTrusted, + isPreRegisteredWithWallet, + redirectUri + ); + VerifiablePresentationSessionData presentationSessionData = new VerifiablePresentationSessionData("123e4567-e89b-12d3-a456-426614174000", "authorizationRequest", time, true, null); + + VerifiablePresentationResponseDTO presentationResponseDTO = new VerifiablePresentationResponseDTO(presentationSessionData.getPresentationId(), presentationVerifierDTO); + + return presentationResponseDTO; + } + + public static PresentationDefinition getPresentationDefinition() { + Map> innerMap = new HashMap<>(); + innerMap.put("jwt_vc", List.of("ES256", "EdDSA")); + + Map>> vpFormats = new HashMap<>(); + vpFormats.put("ldp_vc", innerMap); + + + Fields emailField = new Fields( + List.of("$.credentialSubject.email"), + null, null, null, + new Filter("String", "@gmail.com"), + null + ); + + Constraints constraints = new Constraints(List.of(emailField), null); + + InputDescriptor inputDescriptor = new InputDescriptor( + "id123", + "", + "", + vpFormats, + constraints + ); + + return new PresentationDefinition( + "pd123", + List.of(inputDescriptor), + null, + "requesting your digital ID for the purpose of Self-Authentication", + vpFormats + ); + } + + + public static AuthorizationRequest getPresentationAuthorizationRequest(String clientId, String responseUri) { + return new AuthorizationRequest( + clientId, + "vp_token", + "direct_post", + getPresentationDefinition(), + "https://test-responseUri", + responseUri, + "mock-nonce", + null, + "mock-state", + null, + "pre-registered" + ); + } +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/util/UrlParameterUtilsTest.java b/src/test/java/io/mosip/mimoto/util/UrlParameterUtilsTest.java new file mode 100644 index 000000000..418c120a7 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/util/UrlParameterUtilsTest.java @@ -0,0 +1,219 @@ +package io.mosip.mimoto.util; + +import org.junit.jupiter.api.Test; + +import java.lang.reflect.Method; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +public class UrlParameterUtilsTest { + + private static final String VALID_CLIENT_ID = "https://injiverify.collab.mosip.net"; + private static final String ENCODED_CLIENT_ID = "https%3A%2F%2Finjiverify.collab.mosip.net"; + private static final String VALID_RESPONSE_URI = "https://example.com/callback"; + private static final String ENCODED_RESPONSE_URI = "https%3A%2F%2Fexample.com%2Fcallback"; + + /** + * Helper method to safely invoke methods and cast results without unchecked + * warnings + */ + @SuppressWarnings("unchecked") + private static T invokeMethod(Class clazz, String methodName, Class[] paramTypes, Object... args) throws Exception { + Method method = clazz.getMethod(methodName, paramTypes); + method.setAccessible(true); + return (T) method.invoke(null, args); + } + + @Test + public void testExtractClientIdFromUrlWithValidClientId() throws Exception { + String url = "https://example.com?client_id=" + ENCODED_CLIENT_ID + "&other_param=value"; + + String result = invokeMethod(UrlParameterUtils.class, "extractClientIdFromUrl", new Class[]{String.class}, url); + + assertEquals(VALID_CLIENT_ID, result); + } + + @Test + public void testExtractClientIdFromUrlWithNoQueryParameters() throws Exception { + String url = "https://example.com"; + + String result = invokeMethod(UrlParameterUtils.class, "extractClientIdFromUrl", new Class[]{String.class}, url); + + assertNull(result); + } + + @Test + public void testExtractClientIdFromUrlWithNoClientIdParameter() throws Exception { + String url = "https://example.com?other_param=value&another_param=value2"; + + String result = invokeMethod(UrlParameterUtils.class, "extractClientIdFromUrl", new Class[]{String.class}, url); + + assertNull(result); + } + + @Test + public void testExtractClientIdFromUrlWithMalformedParameter() throws Exception { + String url = "https://example.com?client_id&other_param=value"; + + String result = invokeMethod(UrlParameterUtils.class, "extractClientIdFromUrl", new Class[]{String.class}, url); + + assertNull(result); + } + + @Test + public void testExtractClientIdFromUrlWithNullInput() throws Exception { + String url = null; + + String result = invokeMethod(UrlParameterUtils.class, "extractClientIdFromUrl", new Class[]{String.class}, url); + + assertNull(result); + } + + @Test + public void testExtractClientIdFromUrlWithEmptyValue() throws Exception { + String url = "https://example.com?client_id=&other_param=value"; + + String result = invokeMethod(UrlParameterUtils.class, "extractClientIdFromUrl", new Class[]{String.class}, url); + + assertEquals("", result); + } + + @Test + public void testExtractResponseUrisFromUrlWithValidResponseUri() throws Exception { + String url = "https://example.com?response_uri=" + ENCODED_RESPONSE_URI + "&other_param=value"; + + List result = invokeMethod(UrlParameterUtils.class, "extractResponseUrisFromUrl", new Class[]{String.class}, url); + + assertEquals(1, result.size()); + assertEquals(VALID_RESPONSE_URI, result.get(0)); + } + + @Test + public void testExtractResponseUrisFromUrlWithNoQueryParameters() throws Exception { + String url = "https://example.com"; + + List result = invokeMethod(UrlParameterUtils.class, "extractResponseUrisFromUrl", new Class[]{String.class}, url); + + assertTrue(result.isEmpty()); + } + + @Test + public void testExtractResponseUrisFromUrlWithNoResponseUriParameter() throws Exception { + String url = "https://example.com?other_param=value&another_param=value2"; + + List result = invokeMethod(UrlParameterUtils.class, "extractResponseUrisFromUrl", new Class[]{String.class}, url); + + assertTrue(result.isEmpty()); + } + + @Test + public void testExtractResponseUrisFromUrlWithMalformedParameter() throws Exception { + String url = "https://example.com?response_uri&other_param=value"; + + List result = invokeMethod(UrlParameterUtils.class, "extractResponseUrisFromUrl", new Class[]{String.class}, url); + + assertTrue(result.isEmpty()); + } + + @Test + public void testExtractResponseUrisFromUrlWithNullInput() throws Exception { + String url = null; + + List result = invokeMethod(UrlParameterUtils.class, "extractResponseUrisFromUrl", new Class[]{String.class}, url); + + assertTrue(result.isEmpty()); + } + + @Test + public void testExtractResponseUrisFromUrlWithEmptyValue() throws Exception { + String url = "https://example.com?response_uri=&other_param=value"; + + List result = invokeMethod(UrlParameterUtils.class, "extractResponseUrisFromUrl", new Class[]{String.class}, url); + + assertEquals(1, result.size()); + assertEquals("", result.get(0)); + } + + @Test + public void testExtractResponseUrisFromUrlWithCommaOnly() throws Exception { + String url = "https://example.com?response_uri=,"; // Direct comma + + List result = invokeMethod(UrlParameterUtils.class, "extractResponseUrisFromUrl", new Class[]{String.class}, url); + + assertEquals(1, result.size()); + assertEquals(",", result.get(0)); + } + + @Test + public void testExtractResponseUrisFromUrlWithMultipleCommas() throws Exception { + String url = "https://example.com?response_uri=uri1,uri2,uri3"; + + List result = invokeMethod(UrlParameterUtils.class, "extractResponseUrisFromUrl", new Class[]{String.class}, url); + + assertEquals(1, result.size()); + assertEquals("uri1,uri2,uri3", result.get(0)); + } + + @Test + public void testExtractClientIdFromUrlWithSpecialCharacters() throws Exception { + String specialClientId = "client-id_with.special+chars"; + String encodedClientId = "client-id_with.special%2Bchars"; + String url = "https://example.com?client_id=" + encodedClientId + "&other_param=value"; + + String result = invokeMethod(UrlParameterUtils.class, "extractClientIdFromUrl", new Class[]{String.class}, url); + + assertEquals(specialClientId, result); + } + + @Test + public void testExtractResponseUrisFromUrlWithSpecialCharacters() throws Exception { + String specialUri = "https://example.com/callback?param=value&other=test"; + String encodedUri = "https%3A%2F%2Fexample.com%2Fcallback%3Fparam%3Dvalue%26other%3Dtest"; + String url = "https://example.com?response_uri=" + encodedUri + "&other_param=value"; + + List result = invokeMethod(UrlParameterUtils.class, "extractResponseUrisFromUrl", new Class[]{String.class}, url); + + assertEquals(1, result.size()); + assertEquals(specialUri, result.get(0)); + } + + @Test + public void testExtractClientIdFromUrlWithEmptyString() throws Exception { + String url = "https://example.com?client_id=&other_param=value"; + + String result = invokeMethod(UrlParameterUtils.class, "extractClientIdFromUrl", new Class[]{String.class}, url); + + assertEquals("", result); + } + + @Test + public void testExtractResponseUrisFromUrlWithEmptyString() throws Exception { + String url = "https://example.com?response_uri=&other_param=value"; + + List result = invokeMethod(UrlParameterUtils.class, "extractResponseUrisFromUrl", new Class[]{String.class}, url); + + assertEquals(1, result.size()); + assertEquals("", result.get(0)); + } + + @Test + public void testExtractClientIdFromUrlWithWhitespace() throws Exception { + String url = "https://example.com?client_id=%20&other_param=value"; + + String result = invokeMethod(UrlParameterUtils.class, "extractClientIdFromUrl", new Class[]{String.class}, url); + + assertEquals(" ", result); + } + + @Test + public void testExtractResponseUrisFromUrlWithWhitespace() throws Exception { + String url = "https://example.com?response_uri=%20&other_param=value"; + + List result = invokeMethod(UrlParameterUtils.class, "extractResponseUrisFromUrl", new Class[]{String.class}, url); + + assertEquals(1, result.size()); + assertEquals(" ", result.get(0)); + } + +} From 68278f3184ae0ff6b8b28ea8ed5ff7c43416a709 Mon Sep 17 00:00:00 2001 From: Durgesh Konga Date: Wed, 8 Oct 2025 16:48:55 +0530 Subject: [PATCH 779/860] [INJIWEB-1712] - update db scripts (#948) * [INJIWEB-1712] - update db scripts Signed-off-by: kongadurgesh * [INJIWEB_1712] - Update OVP jar method call to sendErrorResponseToVerifier Update Test cases for the change in method Signed-off-by: kongadurgesh --------- Signed-off-by: kongadurgesh --- .talismanrc | 4 ++-- .../inji_mimoto/sql/0.19.1_to_0.20.0_upgrade.sql | 2 +- docker-compose/mimoto_init.sql | 2 +- .../java/io/mosip/mimoto/service/impl/OpenID4VPService.java | 2 +- .../java/io/mosip/mimoto/service/OpenID4VPServiceTest.java | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.talismanrc b/.talismanrc index 176efb42f..5b53bf99b 100644 --- a/.talismanrc +++ b/.talismanrc @@ -193,7 +193,7 @@ fileignoreconfig: - filename: db_upgrade_script/inji_mimoto/sql/0.19.1_to_0.20.0_rollback.sql checksum: cbb93a2eadd7e1e1ee2ddf8d34466d20a835f9a63b598e5c9d1a1b425106a1a9 - filename: db_upgrade_script/inji_mimoto/sql/0.19.1_to_0.20.0_upgrade.sql - checksum: a29f09c5c830e25f8535dc03e37fb763e986c198a2ab9ed39cbf7d5a839a831e + checksum: fabe688963b37c6b479b289f9e988107dc76358a1ea57b9aeee150c02bc4c9a2 - filename: docker-compose/mimoto_init.sql - checksum: 56b62e7614c1a1dc5cb6ec29344c44e44b2dea2fb00a947e64633be4428a1ef1 + checksum: 14ac202ae6b04f89b61708ea81bbc59a1819ad164800d0d016c1f6051e68a0d6 version: "" \ No newline at end of file diff --git a/db_upgrade_script/inji_mimoto/sql/0.19.1_to_0.20.0_upgrade.sql b/db_upgrade_script/inji_mimoto/sql/0.19.1_to_0.20.0_upgrade.sql index 81ecc6ba5..c63b76ec9 100644 --- a/db_upgrade_script/inji_mimoto/sql/0.19.1_to_0.20.0_upgrade.sql +++ b/db_upgrade_script/inji_mimoto/sql/0.19.1_to_0.20.0_upgrade.sql @@ -42,7 +42,7 @@ CREATE TABLE IF NOT EXISTS verifiable_presentations ( status character varying(32) NOT NULL, requested_at TIMESTAMP, created_at TIMESTAMP DEFAULT now(), - consent BOOLEAN NOT NULL DEFAULT TRUE, + consent BOOLEAN NOT NULL DEFAULT TRUE ); COMMENT ON TABLE verifiable_presentations IS 'Verifiable Presentations: Records of presentations shared with verifiers'; COMMENT ON COLUMN verifiable_presentations.id IS 'Primary Key: Unique identifier for the presentation (presentationId)'; diff --git a/docker-compose/mimoto_init.sql b/docker-compose/mimoto_init.sql index aaeb36ded..082049966 100644 --- a/docker-compose/mimoto_init.sql +++ b/docker-compose/mimoto_init.sql @@ -151,7 +151,7 @@ CREATE TABLE IF NOT EXISTS verifiable_presentations ( status character varying(32) NOT NULL, requested_at TIMESTAMP, created_at TIMESTAMP DEFAULT now(), - consent BOOLEAN NOT NULL DEFAULT TRUE, + consent BOOLEAN NOT NULL DEFAULT TRUE ); INSERT INTO mimoto.key_policy_def(APP_ID,KEY_VALIDITY_DURATION,PRE_EXPIRE_DAYS,ACCESS_ALLOWED,IS_ACTIVE,CR_BY,CR_DTIMES) VALUES('ROOT', 2920, 1125, 'NA', true, 'mosipadmin', now()); diff --git a/src/main/java/io/mosip/mimoto/service/impl/OpenID4VPService.java b/src/main/java/io/mosip/mimoto/service/impl/OpenID4VPService.java index e9a248c5c..2aae59b43 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/OpenID4VPService.java +++ b/src/main/java/io/mosip/mimoto/service/impl/OpenID4VPService.java @@ -82,7 +82,7 @@ public NetworkResponse sendErrorToVerifier(VerifiablePresentationSessionData ses AuthorizationRequest authorizationRequest = openID4VP.authenticateVerifier(sessionData.getAuthorizationRequest(), preRegisteredVerifiers, sessionData.isVerifierClientPreregistered()); OpenID4VPExceptions.AccessDenied accessDeniedException = new OpenID4VPExceptions.AccessDenied(payload.getErrorMessage(), "OpenID4VPService"); - NetworkResponse networkResponse = openID4VP.sendErrorToVerifier(accessDeniedException); + NetworkResponse networkResponse = openID4VP.sendErrorResponseToVerifier(accessDeniedException); log.info("Sent rejection to verifier for presentationId {}. Response: {}", sessionData.getPresentationId(), networkResponse); return networkResponse; } diff --git a/src/test/java/io/mosip/mimoto/service/OpenID4VPServiceTest.java b/src/test/java/io/mosip/mimoto/service/OpenID4VPServiceTest.java index 737401d54..5157c6bd0 100644 --- a/src/test/java/io/mosip/mimoto/service/OpenID4VPServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/OpenID4VPServiceTest.java @@ -334,7 +334,7 @@ public void testSendErrorToVerifierSuccess() throws Exception { NetworkResponse mockResponse = mock(NetworkResponse.class); when(mockOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(mockAuthorizationRequest); - when(mockOpenID4VP.sendErrorToVerifier(any())).thenReturn(mockResponse); + when(mockOpenID4VP.sendErrorResponseToVerifier(any())).thenReturn(mockResponse); OpenID4VPService spyService = spy(openID4VPService); doReturn(mockOpenID4VP).when(spyService).create(anyString()); @@ -355,7 +355,7 @@ public void testSendErrorToVerifierSuccess() throws Exception { assertEquals(mockResponse, response); verify(verifierService).getTrustedVerifiers(); verify(mockOpenID4VP).authenticateVerifier(eq("authorization-request"), anyList(), eq(true)); - verify(mockOpenID4VP).sendErrorToVerifier(any()); + verify(mockOpenID4VP).sendErrorResponseToVerifier(any()); } @Test From 3010473c7c1a225554b3aa318056a1101ddeeb31 Mon Sep 17 00:00:00 2001 From: Durgesh Konga Date: Fri, 10 Oct 2025 10:13:55 +0530 Subject: [PATCH 780/860] Injiweb 1730 (#949) Signed-off-by: Gurpreet41082 Signed-off-by: kongadurgesh Co-authored-by: Gurpreet41082 --- .talismanrc | 4 +- docs/api-documentation-openapi.json | 57 +++------ .../MIMOTO.postman_collection.json | 78 ++++++------ .../mosip/mimoto/dto/RejectedVerifierDTO.java | 17 --- .../dto/SubmitPresentationResponseDTO.java | 26 ++-- .../mimoto/service/PresentationService.java | 4 +- .../PresentationSubmissionService.java | 2 +- .../impl/PresentationActionServiceImpl.java | 18 ++- .../service/impl/PresentationServiceImpl.java | 14 +-- .../PresentationSubmissionServiceImpl.java | 111 +++++++++--------- .../WalletPresentationsControllerTest.java | 18 +-- .../PresentationActionServiceTest.java | 17 ++- .../service/PresentationServiceTest.java | 4 +- .../PresentationSubmissionServiceTest.java | 34 +++--- 14 files changed, 170 insertions(+), 234 deletions(-) delete mode 100644 src/main/java/io/mosip/mimoto/dto/RejectedVerifierDTO.java diff --git a/.talismanrc b/.talismanrc index 5b53bf99b..a7141afe4 100644 --- a/.talismanrc +++ b/.talismanrc @@ -58,7 +58,7 @@ fileignoreconfig: - filename: docs/postman-collections/Collab.postman_environment.json checksum: 93662b305117d9ac73e9f8ace2bd8dc8b2de494908a8c69166d0c908cc80365c - filename: docs/postman-collections/MIMOTO.postman_collection.json - checksum: 4bcc2c9f893fef3e9a3abe4efc477b92cfb84728832f71848858ddced48958f5 + checksum: 625fb5888d4334e7a0b91134a6886556f334a111d9d6c9dd2fa057352af38827 - filename: src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java checksum: c4e28436cb04004d9cb4e1492a1d013eac076936a3fa3a99d35bfb137f27c37b - filename: .github/workflows/push-trigger.yml @@ -106,7 +106,7 @@ fileignoreconfig: - filename: docs/WalletUnlockProcess.md checksum: d172beb5aeef1037d70d2f83f034e6ec5e4ea69c6150ec6a25c9139c799b7879 - filename: docs/api-documentation-openapi.json - checksum: da64851bf25f582280d50d78d8aefc6d12cb3a0d7fc6cdc0676962c9a297b1ea + checksum: 731f2f21a4054e7f1f076d894a8b1d3f814cb924af55ed5815e736b12971113c - filename: src/main/java/io/mosip/mimoto/util/JwtGeneratorUtil.java checksum: c8533dd38f79879119ba2895afca75d60e9704d5a0df4a0e79bc3b9292bd0d38 - filename: src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index 257478ab5..8e59dd0ce 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -4230,28 +4230,27 @@ "content": { "application/json": { "schema": { - "oneOf": [ - { "$ref": "#/components/schemas/PresentationSubmissionResponseDTO" }, - { "$ref": "#/components/schemas/RejectedVerifierDTO" } - ] + "$ref": "#/components/schemas/SubmitPresentationResponseDTO" }, "examples": { "Success response": { "value": { - "presentationId": "123e4567-e89b-12d3-a456-426614174000", "status": "success", - "message": "Presentation submitted successfully" + "redirectUri": "https://verifier.example.com/callback?state=af0ifjsldkj", + "message": "Presentation successfully submitted" } - }, "Response when successfully rejected": { + }, + "Response when successfully rejected": { "value": { "status": "success", - "message": "Presentation request rejected. An OpenID4VP error response has been sent to the verifier.", - "redirectUri": "https://client.example.org/cb#response_code=091535f699ea575c7937fa5f0f454aee" + "redirectUri": "https://client.example.org/cb#response_code=091535f699ea575c7937fa5f0f454aee", + "message": "Presentation request rejected. An OpenID4VP error response has been sent to the verifier." } - }, "Response when an error occurs while submitting a rejection": { + }, + "Response when an error occurs while submitting a rejection": { "value": { "status": "error", - "message": "Failed to submit Verifiable Presentation" + "message": "Failed to submit Verifiable Presentation." } } } @@ -4945,32 +4944,6 @@ "selectedCredentials" ] }, - "PresentationSubmissionResponseDTO": { - "type": "object", - "properties": { - "presentationId": { - "type": "string", - "description": "Unique identifier for the presentation", - "example": "123e4567-e89b-12d3-a456-426614174000" - }, - "status": { - "type": "string", - "description": "Status of the presentation submission", - "example": "success", - "enum": ["success", "error"] - }, - "message": { - "type": "string", - "description": "Response message", - "example": "Presentation submitted successfully" - } - }, - "required": [ - "presentationId", - "status", - "message" - ] - }, "IssuerConfigurationSuccessResponse": { "type": "object", "properties": { @@ -5300,14 +5273,14 @@ ] } , - "RejectedVerifierDTO": { + "SubmitPresentationResponseDTO": { "type": "object", "properties": { - "status": { "type": "string", "description": "Status of the rejection request (for example success)" }, - "message": { "type": "string", "description": "Human readable message describing the result" }, - "redirectUri": { "type": "string", "description": "Redirect URI provided to the verifier" } + "status": { "type": "string", "description": "Status of the presentation submission request (for example success, error)" }, + "message": { "type": "string", "description": "Human readable message describing the result for successful submission or rejected by user" }, + "redirectUri": { "type": "string", "description": "Redirect URI provided to the verifier", "nullable": true } }, - "required": [ "status", "message", "redirectUri" ] + "required": [ "status", "message" ] } } }, diff --git a/docs/postman-collections/MIMOTO.postman_collection.json b/docs/postman-collections/MIMOTO.postman_collection.json index f4c715752..75b1f0de0 100644 --- a/docs/postman-collections/MIMOTO.postman_collection.json +++ b/docs/postman-collections/MIMOTO.postman_collection.json @@ -575,48 +575,48 @@ } }, "response": [] - } - ] - }, - { - "name": "User Reject Verifier", - "request": { - "method": "PATCH", - "header": [ - { - "key": "Content-Type", - "value": "application/json" - }, - { - "key": "Cookie", - "value": "SESSION={{SESSION_TOKEN}}", - "type": "text" - } - ], - "body": { - "mode": "raw", - "raw": "{\n \"errorCode\": \"access_denied\",\n \"errorMessage\": \"User denied authorization to share credentials\"\n}", - "options": { - "raw": { - "language": "json" + }, + { + "name": "User Reject Verifier", + "request": { + "method": "PATCH", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Cookie", + "value": "SESSION={{SESSION_TOKEN}}", + "type": "text" } + ], + "body": { + "mode": "raw", + "raw": "{\n \"errorCode\": \"access_denied\",\n \"errorMessage\": \"User denied authorization to share credentials\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{HOST}}/wallets/{{walletId}}/presentations/{{presentationId}}", + "host": [ + "{{HOST}}" + ], + "path": [ + "wallets", + "{{walletId}}", + "presentations", + "{{presentationId}}" + ] } }, - "url": { - "raw": "{{HOST}}/wallets/{{walletId}}/presentations/{{presentationId}}", - "host": [ - "{{HOST}}" - ], - "path": [ - "wallets", - "{{walletId}}", - "presentations", - "{{presentationId}}" - ] - } - }, - "response": [] - }, + "response": [] + } + ] + }, { "name": "Users", "item": [ diff --git a/src/main/java/io/mosip/mimoto/dto/RejectedVerifierDTO.java b/src/main/java/io/mosip/mimoto/dto/RejectedVerifierDTO.java deleted file mode 100644 index 8c126bab6..000000000 --- a/src/main/java/io/mosip/mimoto/dto/RejectedVerifierDTO.java +++ /dev/null @@ -1,17 +0,0 @@ -package io.mosip.mimoto.dto; - -import com.fasterxml.jackson.annotation.JsonInclude; -import lombok.AllArgsConstructor; -import lombok.NoArgsConstructor; -import lombok.Data; - -@Data -@AllArgsConstructor -@NoArgsConstructor -@JsonInclude(JsonInclude.Include.NON_NULL) -public class RejectedVerifierDTO { - - private String status; - private String redirectUri; - private String message; -} diff --git a/src/main/java/io/mosip/mimoto/dto/SubmitPresentationResponseDTO.java b/src/main/java/io/mosip/mimoto/dto/SubmitPresentationResponseDTO.java index ca1ba9dca..09e580ce6 100644 --- a/src/main/java/io/mosip/mimoto/dto/SubmitPresentationResponseDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/SubmitPresentationResponseDTO.java @@ -1,30 +1,26 @@ package io.mosip.mimoto.dto; +import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; -import lombok.Data; import lombok.NoArgsConstructor; +import lombok.Data; -/** - * DTO for the response when a presentation is successfully submitted - */ @Data -@Builder -@NoArgsConstructor @AllArgsConstructor -@Schema(description = "Response payload for successful presentation submission") +@NoArgsConstructor +@Builder +@JsonInclude(JsonInclude.Include.NON_NULL) +@Schema(description = "Response payload for successful response submission") public class SubmitPresentationResponseDTO { - - @Schema(description = "Unique identifier of the submitted presentation", - example = "presentation-123") - private String presentationId; - - @Schema(description = "Status of the presentation submission", + @Schema(description = "Status of the presentation submission", example = "SUCCESS") private String status; - - @Schema(description = "Message indicating the result of the submission", + @Schema(description = "Redirection URI to which the user-agent should be redirected after submission", + example = "https://verifier.example.com/callback?state=af0ifjsldkj") + private String redirectUri; + @Schema(description = "Message indicating the result of the submission", example = "Presentation successfully submitted and shared with verifier") private String message; } diff --git a/src/main/java/io/mosip/mimoto/service/PresentationService.java b/src/main/java/io/mosip/mimoto/service/PresentationService.java index db2af2b09..6b2aadd95 100644 --- a/src/main/java/io/mosip/mimoto/service/PresentationService.java +++ b/src/main/java/io/mosip/mimoto/service/PresentationService.java @@ -1,7 +1,7 @@ package io.mosip.mimoto.service; import io.mosip.mimoto.dto.ErrorDTO; -import io.mosip.mimoto.dto.RejectedVerifierDTO; +import io.mosip.mimoto.dto.SubmitPresentationResponseDTO; import io.mosip.mimoto.dto.VerifiablePresentationResponseDTO; import io.mosip.mimoto.dto.openid.presentation.PresentationRequestDTO; import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; @@ -16,5 +16,5 @@ public interface PresentationService { String authorizePresentation(PresentationRequestDTO presentationRequestDTO) throws ApiNotAccessibleException, IOException; VerifiablePresentationResponseDTO handleVPAuthorizationRequest(String urlEncodedVPAuthorizationRequest, String walletId) throws ApiNotAccessibleException, IOException, OpenID4VPExceptions, URISyntaxException; - RejectedVerifierDTO rejectVerifier(String walletId, VerifiablePresentationSessionData vpSessionData, ErrorDTO payload) throws VPErrorNotSentException; + SubmitPresentationResponseDTO rejectVerifier(String walletId, VerifiablePresentationSessionData vpSessionData, ErrorDTO payload) throws VPErrorNotSentException; } diff --git a/src/main/java/io/mosip/mimoto/service/PresentationSubmissionService.java b/src/main/java/io/mosip/mimoto/service/PresentationSubmissionService.java index d0a4dbbce..1ee52da56 100644 --- a/src/main/java/io/mosip/mimoto/service/PresentationSubmissionService.java +++ b/src/main/java/io/mosip/mimoto/service/PresentationSubmissionService.java @@ -1,8 +1,8 @@ package io.mosip.mimoto.service; import com.nimbusds.jose.JOSEException; -import io.mosip.mimoto.dto.SubmitPresentationRequestDTO; import io.mosip.mimoto.dto.SubmitPresentationResponseDTO; +import io.mosip.mimoto.dto.SubmitPresentationRequestDTO; import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.DecryptionException; diff --git a/src/main/java/io/mosip/mimoto/service/impl/PresentationActionServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/PresentationActionServiceImpl.java index ca070d9c7..702dd1341 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/PresentationActionServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/PresentationActionServiceImpl.java @@ -2,15 +2,10 @@ import com.nimbusds.jose.JOSEException; import io.mosip.mimoto.dto.ErrorDTO; -import io.mosip.mimoto.dto.RejectedVerifierDTO; -import io.mosip.mimoto.dto.SubmitPresentationRequestDTO; import io.mosip.mimoto.dto.SubmitPresentationResponseDTO; +import io.mosip.mimoto.dto.SubmitPresentationRequestDTO; import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; -import io.mosip.mimoto.exception.ApiNotAccessibleException; -import io.mosip.mimoto.exception.DecryptionException; -import io.mosip.mimoto.exception.InvalidRequestException; -import io.mosip.mimoto.exception.KeyGenerationException; -import io.mosip.mimoto.exception.VPErrorNotSentException; +import io.mosip.mimoto.exception.*; import io.mosip.mimoto.service.PresentationActionService; import io.mosip.mimoto.service.PresentationService; import io.mosip.mimoto.service.PresentationSubmissionService; @@ -23,6 +18,7 @@ import org.springframework.stereotype.Service; import java.io.IOException; +import java.lang.IllegalArgumentException; import static io.mosip.mimoto.exception.ErrorConstants.*; @@ -40,7 +36,7 @@ public class PresentationActionServiceImpl implements PresentationActionService private PresentationService presentationService; @Override - public ResponseEntity handlePresentationAction(String walletId, String presentationId, SubmitPresentationRequestDTO request, VerifiablePresentationSessionData vpSessionData, String base64Key) { + public ResponseEntity handlePresentationAction(String walletId, String presentationId, SubmitPresentationRequestDTO request, VerifiablePresentationSessionData vpSessionData, String base64Key) { log.info("Processing presentation action for walletId: {}, presentationId: {}", walletId, presentationId); @@ -106,7 +102,7 @@ private ResponseEntity handlePresentationSubmissi /** * Handles verifier rejection with error details */ - private ResponseEntity handleVerifierRejection(String walletId, VerifiablePresentationSessionData vpSessionData, SubmitPresentationRequestDTO request) throws VPErrorNotSentException { + private ResponseEntity handleVerifierRejection(String walletId, VerifiablePresentationSessionData vpSessionData, SubmitPresentationRequestDTO request) throws VPErrorNotSentException { log.debug("Rejecting verifier for walletId: {}", walletId); @@ -116,11 +112,11 @@ private ResponseEntity handleVerifierRejection(String walle errorPayload.setErrorMessage(request.getErrorMessage()); // Call the presentation service to reject the verifier - RejectedVerifierDTO rejectedVerifierDTO = presentationService.rejectVerifier(walletId, vpSessionData, errorPayload); + SubmitPresentationResponseDTO submitPresentationResponseDTO = presentationService.rejectVerifier(walletId, vpSessionData, errorPayload); log.info("Verifier rejection completed successfully for walletId: {}", walletId); - return ResponseEntity.status(HttpStatus.OK).body(rejectedVerifierDTO); + return ResponseEntity.status(HttpStatus.OK).body(submitPresentationResponseDTO); } } diff --git a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java index 3b7644ecb..ca939bffe 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java @@ -4,7 +4,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import io.mosip.mimoto.constant.CredentialFormat; import io.mosip.mimoto.dto.ErrorDTO; -import io.mosip.mimoto.dto.RejectedVerifierDTO; +import io.mosip.mimoto.dto.SubmitPresentationResponseDTO; import io.mosip.mimoto.dto.VerifiablePresentationResponseDTO; import io.mosip.mimoto.dto.VerifiablePresentationVerifierDTO; import io.mosip.mimoto.dto.mimoto.VCCredentialProperties; @@ -342,7 +342,7 @@ public PresentationDefinitionDTO constructPresentationDefinition(VCCredentialRes } @Override - public RejectedVerifierDTO rejectVerifier(String walletId, VerifiablePresentationSessionData vpSessionData, ErrorDTO payload) throws VPErrorNotSentException { + public SubmitPresentationResponseDTO rejectVerifier(String walletId, VerifiablePresentationSessionData vpSessionData, ErrorDTO payload) throws VPErrorNotSentException { try { NetworkResponse networkResponse = openID4VPService.sendErrorToVerifier(vpSessionData, payload); log.info("Sent rejection to verifier. Response: {}", networkResponse); @@ -350,11 +350,11 @@ public RejectedVerifierDTO rejectVerifier(String walletId, VerifiablePresentatio String redirectUri = extractRedirectUriFromBody(networkResponse != null ? networkResponse.getBody() : null) .orElse(""); - RejectedVerifierDTO rejectedVerifierDTO = new RejectedVerifierDTO(); - rejectedVerifierDTO.setStatus(REJECTED_VERIFIER.getErrorCode()); - rejectedVerifierDTO.setMessage(REJECTED_VERIFIER.getErrorMessage()); - rejectedVerifierDTO.setRedirectUri(redirectUri); - return rejectedVerifierDTO; + SubmitPresentationResponseDTO submitPresentationResponseDTO = new SubmitPresentationResponseDTO(); + submitPresentationResponseDTO.setStatus(REJECTED_VERIFIER.getErrorCode()); + submitPresentationResponseDTO.setMessage(REJECTED_VERIFIER.getErrorMessage()); + submitPresentationResponseDTO.setRedirectUri(redirectUri); + return submitPresentationResponseDTO; } catch (ApiNotAccessibleException | IOException | URISyntaxException | IllegalArgumentException e ) { log.error("Failed to send rejection to verifier for walletId: {} - Error: {}", walletId, e.getMessage(), e); throw new VPErrorNotSentException("Failed to send rejection to verifier - " + e.getMessage()); diff --git a/src/main/java/io/mosip/mimoto/service/impl/PresentationSubmissionServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/PresentationSubmissionServiceImpl.java index 9687ec107..294080c2f 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/PresentationSubmissionServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/PresentationSubmissionServiceImpl.java @@ -2,43 +2,46 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import com.nimbusds.jose.*; +import com.nimbusds.jose.JOSEException; +import com.nimbusds.jose.JWSAlgorithm; +import com.nimbusds.jose.JWSHeader; +import com.nimbusds.jose.JWSSigner; import com.nimbusds.jose.jwk.JWK; import com.nimbusds.jose.util.Base64URL; - -import io.mosip.mimoto.constant.SigningAlgorithm; import io.mosip.mimoto.constant.OpenID4VPConstants; +import io.mosip.mimoto.constant.SigningAlgorithm; import io.mosip.mimoto.dto.DecryptedCredentialDTO; import io.mosip.mimoto.dto.SubmitPresentationRequestDTO; import io.mosip.mimoto.dto.SubmitPresentationResponseDTO; import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; -import io.mosip.mimoto.util.JwtGeneratorUtil; -import io.mosip.openID4VP.authorizationResponse.unsignedVPToken.types.ldp.UnsignedLdpVPToken; -import io.mosip.openID4VP.authorizationResponse.vpTokenSigningResult.VPTokenSigningResult; -import io.mosip.openID4VP.authorizationResponse.vpTokenSigningResult.types.ldp.LdpVPTokenSigningResult; import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.DecryptionException; import io.mosip.mimoto.exception.KeyGenerationException; import io.mosip.mimoto.model.VerifiablePresentation; -import io.mosip.mimoto.service.PresentationSubmissionService; +import io.mosip.mimoto.repository.VerifiablePresentationsRepository; import io.mosip.mimoto.service.KeyPairService; +import io.mosip.mimoto.service.PresentationSubmissionService; import io.mosip.mimoto.service.VerifierService; -import io.mosip.mimoto.repository.VerifiablePresentationsRepository; -import io.mosip.mimoto.util.UrlParameterUtils; import io.mosip.mimoto.util.Base64Util; +import io.mosip.mimoto.util.JwtGeneratorUtil; +import io.mosip.mimoto.util.UrlParameterUtils; import io.mosip.openID4VP.OpenID4VP; import io.mosip.openID4VP.authorizationRequest.Verifier; -import io.mosip.openID4VP.constants.FormatType; import io.mosip.openID4VP.authorizationResponse.unsignedVPToken.UnsignedVPToken; +import io.mosip.openID4VP.authorizationResponse.unsignedVPToken.types.ldp.UnsignedLdpVPToken; +import io.mosip.openID4VP.authorizationResponse.vpTokenSigningResult.VPTokenSigningResult; +import io.mosip.openID4VP.authorizationResponse.vpTokenSigningResult.types.ldp.LdpVPTokenSigningResult; +import io.mosip.openID4VP.constants.FormatType; +import io.mosip.openID4VP.networkManager.NetworkResponse; import lombok.extern.slf4j.Slf4j; +import org.json.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import java.io.IOException; import java.nio.charset.StandardCharsets; -import java.security.*; +import java.security.KeyPair; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; @@ -100,16 +103,30 @@ public SubmitPresentationResponseDTO submitPresentation(VerifiablePresentationSe Map vpTokenSigningResults = signVPToken(unsignedVPToken, jwsSigner, walletId, base64Key); // Step 4: Share verifiable presentation with verifier using OpenID4VP JAR - boolean shareSuccess = shareVerifiablePresentation(vpTokenSigningResults, sessionData, openID4VP); - - // Step 5: Store presentation record in database - storePresentationRecord(walletId, presentationId, request, sessionData, shareSuccess, requestedAt); - - // Step 6: Return success response - return SubmitPresentationResponseDTO.builder().presentationId(presentationId) - .status(shareSuccess ? OpenID4VPConstants.STATUS_SUCCESS : OpenID4VPConstants.STATUS_ERROR) - .message(shareSuccess ? OpenID4VPConstants.MESSAGE_PRESENTATION_SUCCESS : OpenID4VPConstants.MESSAGE_PRESENTATION_SHARE_FAILED) - .build(); + log.debug("Calling OpenID4VP JAR's shareVerifiablePresentation method"); + // Cast to the expected type for the JAR method + @SuppressWarnings({"unchecked", "rawtypes"}) Map jarMap = (Map) vpTokenSigningResults; + try { + NetworkResponse response = openID4VP.sendAuthorizationResponseToVerifier(jarMap); + boolean shareSuccess = response.getStatusCode() >= 200 && response.getStatusCode() < 300; + // Step 5: Store presentation record in database + storePresentationRecord(walletId, presentationId, request, sessionData, shareSuccess, requestedAt); + // Step 6: Return success response + return SubmitPresentationResponseDTO.builder() + .redirectUri(extractRedirectUri(response.getBody())) + .status(shareSuccess ? OpenID4VPConstants.STATUS_SUCCESS : OpenID4VPConstants.STATUS_ERROR) + .message(shareSuccess ? OpenID4VPConstants.MESSAGE_PRESENTATION_SUCCESS : OpenID4VPConstants.MESSAGE_PRESENTATION_SHARE_FAILED) + .build(); + } catch (Exception e) { + log.error("Failed to share verifiable presentation with verifier", e); + // Store failed presentation record + storePresentationRecord(walletId, presentationId, request, sessionData, false, requestedAt); + return SubmitPresentationResponseDTO.builder() + .redirectUri(null) + .status(OpenID4VPConstants.STATUS_ERROR) + .message(OpenID4VPConstants.MESSAGE_PRESENTATION_SHARE_FAILED) + .build(); + } } /** @@ -121,12 +138,9 @@ public SubmitPresentationResponseDTO submitPresentation(VerifiablePresentationSe * @param walletId The wallet ID for fetching keypairs (for MSO_MDOC) * @param base64Key The base64 encoded wallet key for decryption (for MSO_MDOC) * @return Map of signed VP token results by format type - * @throws JOSEException if JWT signing fails - * @throws IOException if I/O operations fail * @throws KeyGenerationException if key pair retrieval or generation fails - * @throws DecryptionException if decryption of private key fails */ - private Map signVPToken(Map unsignedVPTokensMap, JWSSigner jwsSigner, String walletId, String base64Key) throws JOSEException, IOException, KeyGenerationException, DecryptionException { + private Map signVPToken(Map unsignedVPTokensMap, JWSSigner jwsSigner, String walletId, String base64Key) throws KeyGenerationException { log.debug("Signing VP token for {} format types", unsignedVPTokensMap.size()); return unsignedVPTokensMap.entrySet().stream().map(entry -> { @@ -381,33 +395,10 @@ private FormatType mapStringToFormatType(String format) { }; } - /** - * Shares the verifiable presentation with the verifier - * First calls OpenID4VP JAR's shareVerifiablePresentation method, then makes HTTP POST - */ - private boolean shareVerifiablePresentation(Map vpTokenSigningResults, VerifiablePresentationSessionData sessionData, OpenID4VP openID4VP) { - log.debug("Sharing verifiable presentation with verifier"); - - try { - // Step 1: Call OpenID4VP JAR's shareVerifiablePresentation method - log.debug("Calling OpenID4VP JAR's shareVerifiablePresentation method"); - // Cast to the expected type for the JAR method - @SuppressWarnings({"unchecked", "rawtypes"}) Map jarMap = (Map) vpTokenSigningResults; - String vpToken = openID4VP.shareVerifiablePresentation(jarMap); - - return vpToken.trim().isEmpty(); - - } catch (Exception e) { - log.error("Failed to share verifiable presentation with verifier", e); - return false; - } - } - /** * Stores presentation record in the database * Uses @Transactional to ensure atomicity of database operations */ - @Transactional private void storePresentationRecord(String walletId, String presentationId, SubmitPresentationRequestDTO request, VerifiablePresentationSessionData sessionData, boolean success, LocalDateTime requestedAt) { log.debug("Storing presentation record in database - success: {}", success); @@ -420,7 +411,7 @@ private void storePresentationRecord(String walletId, String presentationId, Sub // Extract verifier information from OpenID4VP object String verifierId = extractVerifierId(sessionData); String authRequest = extractVerifierAuthRequest(sessionData); - String presentationData = createPresentationData(request, sessionData); + String presentationData = createPresentationData(request); // Create the presentation record VerifiablePresentation presentation = VerifiablePresentation.builder().id(presentationId).walletId(walletId).authRequest(authRequest).presentationData(presentationData).verifierId(verifierId).status(success ? OpenID4VPConstants.STATUS_SUCCESS : OpenID4VPConstants.STATUS_ERROR).requestedAt(requestedAt).consent(true).build(); @@ -471,7 +462,7 @@ private String extractVerifierAuthRequest(VerifiablePresentationSessionData sess /** * Creates presentation data JSON with selected credentials and metadata */ - private String createPresentationData(SubmitPresentationRequestDTO request, VerifiablePresentationSessionData sessionData) { + private String createPresentationData(SubmitPresentationRequestDTO request) { try { Map presentationData = new HashMap<>(); presentationData.put(OpenID4VPConstants.SELECTED_CREDENTIALS, request.getSelectedCredentials()); @@ -500,6 +491,18 @@ private void validateInputs(SubmitPresentationRequestDTO request) { throw new IllegalArgumentException("Selected credentials cannot be null or empty"); } - log.debug("Input validation passed for request: {}", request.toString()); + log.debug("Input validation passed for request: {}", request); + } + + public String extractRedirectUri(String body) { + try { + JSONObject jsonObject = new JSONObject(body); + if (jsonObject.has("redirect_uri")) { + return jsonObject.getString("redirect_uri"); + } + } catch (Exception e) { + log.error("Cannot parse the body of response from verifier", e); + } + return null; } -} +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/controller/WalletPresentationsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletPresentationsControllerTest.java index 690330c16..7f5870f4d 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletPresentationsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletPresentationsControllerTest.java @@ -1,12 +1,13 @@ package io.mosip.mimoto.controller; +import com.fasterxml.jackson.databind.ObjectMapper; import io.mosip.mimoto.dto.*; import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.VPNotCreatedException; import io.mosip.mimoto.service.CredentialMatchingService; -import io.mosip.mimoto.service.PresentationService; import io.mosip.mimoto.service.PresentationActionService; +import io.mosip.mimoto.service.PresentationService; import io.mosip.mimoto.service.impl.SessionManager; import io.mosip.mimoto.util.GlobalExceptionHandler; import io.mosip.openID4VP.exceptions.OpenID4VPExceptions; @@ -16,9 +17,6 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; - -import static org.junit.jupiter.api.Assertions.assertEquals; - import org.mockito.MockitoAnnotations; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; @@ -29,18 +27,16 @@ import org.springframework.http.ResponseEntity; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; -import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import java.io.IOException; import java.util.List; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.patch; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -308,7 +304,7 @@ public void testUserRejectedVerifierSuccess() throws Exception { .thenReturn(sessionData); // Prepare the expected RejectedVerifierDTO and stub the service to return it - RejectedVerifierDTO expectedRejected = new RejectedVerifierDTO("success", "", "Presentation request rejected. An OpenID4VP error response has been sent to the verifier."); + SubmitPresentationResponseDTO expectedRejected = new SubmitPresentationResponseDTO("success", "", "Presentation request rejected. An OpenID4VP error response has been sent to the verifier."); doReturn(ResponseEntity.ok(expectedRejected)) .when(presentationActionService).handlePresentationAction( eq(walletId), eq(presentationId), any(SubmitPresentationRequestDTO.class), eq(sessionData), eq(walletKey)); @@ -515,7 +511,6 @@ public void testHandlePresentationSubmissionSuccess() throws Exception { SubmitPresentationResponseDTO submitResponse = new SubmitPresentationResponseDTO(); submitResponse.setStatus("SUCCESS"); - submitResponse.setPresentationId(presentationId); when(sessionManager.getPresentationSessionData(any(HttpSession.class), eq(walletId), eq(presentationId))) .thenReturn(sessionData); @@ -530,8 +525,7 @@ public void testHandlePresentationSubmissionSuccess() throws Exception { .sessionAttr("wallet_id", walletId) .sessionAttr("wallet_key", walletKey)) .andExpect(status().isOk()) - .andExpect(jsonPath("$.status").value("SUCCESS")) - .andExpect(jsonPath("$.presentationId").value(presentationId)); + .andExpect(jsonPath("$.status").value("SUCCESS")); verify(presentationActionService).handlePresentationAction( eq(walletId), eq(presentationId), any(SubmitPresentationRequestDTO.class), eq(sessionData), eq(walletKey)); diff --git a/src/test/java/io/mosip/mimoto/service/PresentationActionServiceTest.java b/src/test/java/io/mosip/mimoto/service/PresentationActionServiceTest.java index 52c0d7766..b4aa9d1c0 100644 --- a/src/test/java/io/mosip/mimoto/service/PresentationActionServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/PresentationActionServiceTest.java @@ -2,9 +2,8 @@ import com.nimbusds.jose.JOSEException; import io.mosip.mimoto.dto.ErrorDTO; -import io.mosip.mimoto.dto.RejectedVerifierDTO; -import io.mosip.mimoto.dto.SubmitPresentationRequestDTO; import io.mosip.mimoto.dto.SubmitPresentationResponseDTO; +import io.mosip.mimoto.dto.SubmitPresentationRequestDTO; import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.DecryptionException; @@ -27,7 +26,8 @@ import java.util.Collections; import static org.junit.Assert.*; -import static org.mockito.ArgumentMatchers.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.*; @RunWith(MockitoJUnitRunner.class) @@ -69,7 +69,6 @@ public void testHandlePresentationAction_SubmissionSuccess() throws Exception { .build(); SubmitPresentationResponseDTO expectedResponse = SubmitPresentationResponseDTO.builder() - .presentationId(PRESENTATION_ID) .status("SUCCESS") .message("Presentation successfully submitted and shared with verifier") .build(); @@ -87,7 +86,6 @@ public void testHandlePresentationAction_SubmissionSuccess() throws Exception { assertNotNull(response.getBody()); assertTrue(response.getBody() instanceof SubmitPresentationResponseDTO); SubmitPresentationResponseDTO responseBody = (SubmitPresentationResponseDTO) response.getBody(); - assertEquals(PRESENTATION_ID, responseBody.getPresentationId()); assertEquals("SUCCESS", responseBody.getStatus()); verify(presentationSubmissionService, times(1)).submitPresentation( @@ -103,7 +101,7 @@ public void testHandlePresentationAction_RejectionSuccess() throws Exception { .errorMessage("User denied authorization to share credentials") .build(); - RejectedVerifierDTO expectedResponse = new RejectedVerifierDTO( + SubmitPresentationResponseDTO expectedResponse = new SubmitPresentationResponseDTO( "success", null, "Presentation request rejected. An OpenID4VP error response has been sent to the verifier." @@ -119,8 +117,8 @@ public void testHandlePresentationAction_RejectionSuccess() throws Exception { // Then assertEquals(HttpStatus.OK, response.getStatusCode()); assertNotNull(response.getBody()); - assertTrue(response.getBody() instanceof RejectedVerifierDTO); - RejectedVerifierDTO responseBody = (RejectedVerifierDTO) response.getBody(); + assertTrue(response.getBody() instanceof SubmitPresentationResponseDTO); + SubmitPresentationResponseDTO responseBody = (SubmitPresentationResponseDTO) response.getBody(); assertEquals("success", responseBody.getStatus()); verify(presentationService, times(1)).rejectVerifier(eq(WALLET_ID), eq(sessionData), any(ErrorDTO.class)); @@ -312,7 +310,7 @@ public void testHandlePresentationAction_RejectionWithNullWalletKey() { .errorMessage("User denied authorization") .build(); - RejectedVerifierDTO expectedResponse = new RejectedVerifierDTO( + SubmitPresentationResponseDTO expectedResponse = new SubmitPresentationResponseDTO( "success", null, "Presentation request rejected." @@ -338,7 +336,6 @@ public void testHandlePresentationAction_SubmissionWithMultipleCredentials() thr .build(); SubmitPresentationResponseDTO expectedResponse = SubmitPresentationResponseDTO.builder() - .presentationId(PRESENTATION_ID) .status("SUCCESS") .message("Presentation successfully submitted") .build(); diff --git a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java index 9f0b14649..a3d025867 100644 --- a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java @@ -35,7 +35,7 @@ import org.mockito.MockedStatic; import org.mockito.junit.MockitoJUnitRunner; import org.springframework.test.util.ReflectionTestUtils; -import io.mosip.mimoto.dto.RejectedVerifierDTO; +import io.mosip.mimoto.dto.SubmitPresentationResponseDTO; import java.io.IOException; import java.time.Instant; @@ -806,7 +806,7 @@ public void testRejectVerifierExtractsRedirectUriFromBody() throws Exception { when(mockResponse.getBody()).thenReturn("{\"redirect_uri\":\"https://verifier.example.com/success\"}"); when(openID4VPService.sendErrorToVerifier(eq(sessionData), eq(payload))).thenReturn(mockResponse); - RejectedVerifierDTO result = presentationService.rejectVerifier(walletId, sessionData, payload); + SubmitPresentationResponseDTO result = presentationService.rejectVerifier(walletId, sessionData, payload); assertNotNull(result); assertEquals("https://verifier.example.com/success", result.getRedirectUri()); diff --git a/src/test/java/io/mosip/mimoto/service/PresentationSubmissionServiceTest.java b/src/test/java/io/mosip/mimoto/service/PresentationSubmissionServiceTest.java index 4c546a8c1..86274e6b3 100644 --- a/src/test/java/io/mosip/mimoto/service/PresentationSubmissionServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/PresentationSubmissionServiceTest.java @@ -1,7 +1,6 @@ package io.mosip.mimoto.service; import com.fasterxml.jackson.databind.ObjectMapper; -import com.nimbusds.jose.*; import io.mosip.mimoto.constant.OpenID4VPConstants; import io.mosip.mimoto.constant.SigningAlgorithm; import io.mosip.mimoto.dto.DecryptedCredentialDTO; @@ -24,6 +23,7 @@ import io.mosip.openID4VP.authorizationResponse.unsignedVPToken.types.ldp.UnsignedLdpVPToken; import io.mosip.openID4VP.authorizationResponse.vpTokenSigningResult.types.ldp.LdpVPTokenSigningResult; import io.mosip.openID4VP.constants.FormatType; +import io.mosip.openID4VP.networkManager.NetworkResponse; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -69,9 +69,6 @@ public class PresentationSubmissionServiceTest { @Mock private OpenID4VP openID4VP; - @Mock - private JWSSigner jwsSigner; - private VerifiablePresentationSessionData sessionData; private String walletId; private String presentationId; @@ -131,7 +128,6 @@ public void testSubmitPresentationSuccess() throws Exception { sessionData, walletId, presentationId, request, base64Key); assertNotNull(response); - assertEquals(presentationId, response.getPresentationId()); assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); assertEquals(OpenID4VPConstants.MESSAGE_PRESENTATION_SUCCESS, response.getMessage()); @@ -195,7 +191,6 @@ public void testSubmitPresentationShareFailure() throws Exception { sessionData, walletId, presentationId, request, base64Key); assertNotNull(response); - assertEquals(presentationId, response.getPresentationId()); assertEquals(OpenID4VPConstants.STATUS_ERROR, response.getStatus()); assertEquals(OpenID4VPConstants.MESSAGE_PRESENTATION_SHARE_FAILED, response.getMessage()); @@ -607,18 +602,18 @@ public void testMapStringToFormatTypeNullDefaultsToLdpVc() throws Exception { @Test - public void testShareVerifiablePresentationReturnsTrue() throws Exception { + public void testsendAuthorizationResponseToVerifierReturnsTrue() throws Exception { setupSuccessfulMocks(); SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( sessionData, walletId, presentationId, request, base64Key); assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); - verify(openID4VP).shareVerifiablePresentation(anyMap()); + verify(openID4VP).sendAuthorizationResponseToVerifier(anyMap()); } @Test - public void testShareVerifiablePresentationReturnsFalse() throws Exception { + public void testsendAuthorizationResponseToVerifierReturnsFalse() throws Exception { setupMocksForShareFailure(); SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( @@ -629,7 +624,7 @@ public void testShareVerifiablePresentationReturnsFalse() throws Exception { } @Test - public void testShareVerifiablePresentationHandlesException() throws Exception { + public void testsendAuthorizationResponseToVerifierHandlesException() throws Exception { setupMocksForShareException(); SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( @@ -710,7 +705,6 @@ public void testSubmitPresentationWithVeryLongPresentationId() throws Exception sessionData, walletId, longPresentationId, request, base64Key); assertNotNull(response); - assertEquals(longPresentationId, response.getPresentationId()); } @Test @@ -763,7 +757,7 @@ private void setupSuccessfulMocks() throws Exception { .thenReturn(unsignedVPTokenMap); - when(openID4VP.shareVerifiablePresentation(anyMap())).thenReturn(""); + when(openID4VP.sendAuthorizationResponseToVerifier(anyMap())).thenReturn(new NetworkResponse(200, "", new HashMap<>())); when(objectMapper.convertValue(any(), eq(LdpVPTokenSigningResult.class))) .thenReturn(mock(LdpVPTokenSigningResult.class)); @@ -783,12 +777,12 @@ private void setupMocksUpToSigning() throws Exception { private void setupMocksForShareFailure() throws Exception { setupSuccessfulMocks(); - when(openID4VP.shareVerifiablePresentation(anyMap())).thenReturn("error-response"); + when(openID4VP.sendAuthorizationResponseToVerifier(anyMap())).thenReturn(new NetworkResponse(400, "", new HashMap<>())); } private void setupMocksForShareException() throws Exception { setupSuccessfulMocks(); - when(openID4VP.shareVerifiablePresentation(anyMap())).thenThrow(new RuntimeException("Share failed")); + when(openID4VP.sendAuthorizationResponseToVerifier(anyMap())).thenThrow(new RuntimeException("Share failed")); } private void setupSuccessfulMocksForMsoMdoc() throws Exception { @@ -819,7 +813,7 @@ private void setupSuccessfulMocksForMsoMdoc() throws Exception { .thenReturn(mock(LdpVPTokenSigningResult.class)); when(objectMapper.writeValueAsString(any())).thenReturn("{}"); - when(openID4VP.shareVerifiablePresentation(anyMap())).thenReturn(""); + when(openID4VP.sendAuthorizationResponseToVerifier(anyMap())).thenReturn(new NetworkResponse(200, "", new HashMap<>())); when(verifiablePresentationsRepository.save(any(VerifiablePresentation.class))) .thenAnswer(invocation -> invocation.getArgument(0)); @@ -856,7 +850,7 @@ private void setupSuccessfulMocksForMixedFormats() throws Exception { .thenReturn(mock(LdpVPTokenSigningResult.class)); when(objectMapper.writeValueAsString(any())).thenReturn("{}"); - when(openID4VP.shareVerifiablePresentation(anyMap())).thenReturn(""); + when(openID4VP.sendAuthorizationResponseToVerifier(anyMap())).thenReturn(new NetworkResponse(200, "", new HashMap<>())); when(verifiablePresentationsRepository.save(any(VerifiablePresentation.class))) .thenAnswer(invocation -> invocation.getArgument(0)); @@ -1099,16 +1093,16 @@ public void testStorePresentationRecordWithNullSessionData() throws Exception { } @Test - public void testShareVerifiablePresentationReturnsNonEmptyString() throws Exception { + public void testsendAuthorizationResponseToVerifierReturnsNonEmptyString() throws Exception { sessionData.setMatchingCredentials(createMockDecryptedCredentials()); setupSuccessfulMocks(); - when(openID4VP.shareVerifiablePresentation(anyMap())).thenReturn("error-response-non-empty"); // non-empty string + when(openID4VP.sendAuthorizationResponseToVerifier(anyMap())).thenReturn(new NetworkResponse(400, "", new HashMap<>())); // non-empty string SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( sessionData, walletId, presentationId, request, base64Key); assertNotNull(response); - // Should return ERROR status when vpToken is not empty (shareVerifiablePresentation returns false when non-empty) + // Should return ERROR status when vpToken is not empty (sendAuthorizationResponseToVerifier returns false when non-empty) assertEquals(OpenID4VPConstants.STATUS_ERROR, response.getStatus()); assertEquals(OpenID4VPConstants.MESSAGE_PRESENTATION_SHARE_FAILED, response.getMessage()); } @@ -1190,7 +1184,7 @@ public void testCreatePresentationDataHandlesJsonProcessingException() throws Ex when(openID4VP.constructUnsignedVPToken(anyMap(), anyString(), anyString())) .thenReturn(unsignedVPTokenMap); - when(openID4VP.shareVerifiablePresentation(anyMap())).thenReturn(""); + when(openID4VP.sendAuthorizationResponseToVerifier(anyMap())).thenReturn(new NetworkResponse(200, "", new HashMap<>())); when(objectMapper.convertValue(any(), eq(LdpVPTokenSigningResult.class))) .thenReturn(mock(LdpVPTokenSigningResult.class)); From c4b5033cc19ba76aa25771de949fa7cc8061d80e Mon Sep 17 00:00:00 2001 From: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> Date: Fri, 10 Oct 2025 13:42:25 +0530 Subject: [PATCH 781/860] MOSIP-39108 - Added the run context as prefix for every run (#941) * MOSIP-42951 - Prefix context for mimoto and reverse merge from release Signed-off-by: Mohanachandran S * Unchanged the file Signed-off-by: Mohanachandran S * Updated the POM version Signed-off-by: Mohanachandran S * Removed the policy creation for device partner creation Signed-off-by: Mohanachandran S * Updated README.md Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> * Updated README.md Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> --------- Signed-off-by: Mohanachandran S Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> --- api-test/README.md | 5 +- api-test/pom.xml | 6 +- .../mimoto/testrunner/MosipTestRunner.java | 8 +-- .../mimoto/testscripts/AddIdentity.java | 5 +- .../PostWithAutogenIdWithOtpGenerate.java | 4 +- .../mimoto/utils/MimotoConfigManager.java | 1 - .../config/idaCertDataDeleteQueries.txt | 8 +-- .../keyManagerCertDataDeleteQueries.txt | 16 ++--- .../masterDataCertDataDeleteQueries.txt | 8 +-- .../DownloadIssuerCredential.yml | 8 +-- .../GetIssuerConfiguration.yml | 2 +- .../DownloadIssuerCredential.yml | 70 +++++++++---------- .../main/resources/testCaseSkippedList.txt | 6 +- 13 files changed, 76 insertions(+), 71 deletions(-) diff --git a/api-test/README.md b/api-test/README.md index 73b445d3c..53f484eb3 100644 --- a/api-test/README.md +++ b/api-test/README.md @@ -157,7 +157,7 @@ To execute the tests using Eclipse IDE, use the following steps: - **env.user**: Replace `` with the appropriate environment name (e.g., `dev`, `qa`, etc.). - **env.endpoint**: The environment where the application under test is deployed. Replace `` with the correct base URL for the environment (e.g., `https://api-internal..mosip.net`). - **env.testLevel**: Set this to `smoke` to run only smoke test cases, or `smokeAndRegression` to run both smoke and regression tests. -- **jar**: Specify the name of the JAR file to execute. The version will change according to the development code version. For example, the current version may look like `apitest-mimoto-0.15.0-SNAPSHOT-jar-with-dependencies.jar`. +- **jar**: Specify the name of the JAR file to execute. The version will change according to the development code version. For example, the current version may look like `apitest-mimoto-0.20.0-SNAPSHOT-jar-with-dependencies.jar`. ### Build and Run Info @@ -174,6 +174,9 @@ Update the below **config maps** while running the automation in rancher or in m 2. google.client.secret 3. google.refresh.token +Update the below **config maps** if required +1. testCasesToExecute=TC_Mimoto_GetAllIssuers_01 (Pass the unique Identifier of the testcase that has to be ran) + --- ## License diff --git a/api-test/pom.xml b/api-test/pom.xml index b51f5f2e3..cac5748c8 100644 --- a/api-test/pom.xml +++ b/api-test/pom.xml @@ -8,7 +8,7 @@ apitest-mimoto Parent project of apitest-mimoto https://github.com/mosip/mimoto - 0.18.0-SNAPSHOT + 0.20.0-SNAPSHOT @@ -61,14 +61,14 @@ 2.2.1 3.0.1 - apitest-mimoto-0.18.0-SNAPSHOT-jar-with-dependencies + apitest-mimoto-0.20.0-SNAPSHOT-jar-with-dependencies io.mosip.testrig.apitest.commons apitest-commons - 1.2.1-SNAPSHOT + 1.3.6-SNAPSHOT diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java index 54a4f2c4d..b7245770d 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java @@ -99,8 +99,6 @@ public static void main(String[] arg) { // Generate device certificates to be consumed by Mock-MDS PartnerRegistration.deleteCertificates(); - AdminTestUtil.createAndPublishPolicy(); - AdminTestUtil.createEditAndPublishPolicy(); PartnerRegistration.deviceGeneration(); // Generating biometric details with mock MDS @@ -145,10 +143,10 @@ public static void suiteSetup(String runType) { if (!runType.equalsIgnoreCase("JAR")) { AuthTestsUtil.removeOldMosipTempTestResource(); } - BaseTestCase.currentModule = GlobalConstants.MIMOTO; - BaseTestCase.certsForModule = GlobalConstants.MIMOTO; - MimotoUtil.dbCleanUp(); AdminTestUtil.initiateMimotoTest(); + BaseTestCase.currentModule = BaseTestCase.runContext + GlobalConstants.MIMOTO; + BaseTestCase.certsForModule = BaseTestCase.runContext + GlobalConstants.MIMOTO; + MimotoUtil.dbCleanUp(); BaseTestCase.otpListener = new OTPListener(); BaseTestCase.otpListener.run(); } diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/AddIdentity.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/AddIdentity.java index e0eed492b..51b96a33d 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/AddIdentity.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/AddIdentity.java @@ -28,6 +28,7 @@ import io.mosip.testrig.apirig.dto.TestCaseDTO; import io.mosip.testrig.apirig.mimoto.utils.MimotoConfigManager; import io.mosip.testrig.apirig.mimoto.utils.MimotoUtil; +import io.mosip.testrig.apirig.testrunner.BaseTestCase; import io.mosip.testrig.apirig.testrunner.HealthChecker; import io.mosip.testrig.apirig.testrunner.JsonPrecondtion; import io.mosip.testrig.apirig.utils.AdminTestException; @@ -114,7 +115,7 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad inputJson = inputJson.replace("$UIN$", uin); inputJson = inputJson.replace("$RID$", genRid); String phoneNumber = ""; - String email = testCaseName +"@mosip.net"; + String email = testCaseName + "_" + BaseTestCase.runContext +"@mosip.net"; if (inputJson.contains("$PHONENUMBERFORIDENTITY$")) { if (!phoneSchemaRegex.isEmpty()) try { @@ -140,7 +141,7 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad if (testCaseDTO.getTestCaseName().contains("_Pos")) { writeAutoGeneratedId(testCaseDTO.getTestCaseName(), "UIN", uin); writeAutoGeneratedId(testCaseDTO.getTestCaseName(), "RID", genRid); - writeAutoGeneratedId(testCaseDTO.getTestCaseName(), "EMAIL", testCaseDTO.getTestCaseName() + "@mosip.net"); + writeAutoGeneratedId(testCaseDTO.getTestCaseName(), "EMAIL", email); writeAutoGeneratedId(testCaseDTO.getTestCaseName(), "PHONE", phoneNumber); } if (!phoneNumber.isEmpty()) diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java index d7c7914f4..da5975d97 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java @@ -115,13 +115,13 @@ public void test(TestCaseDTO testCaseDTO) sendOtpEndPoint = otpReqJson.getString("sendOtpEndPoint"); otpReqJson.remove("sendOtpEndPoint"); - String input = getJsonFromTemplate(otpReqJson.toString(), sendOtpReqTemplate); + String inputStrJson = getJsonFromTemplate(otpReqJson.toString(), sendOtpReqTemplate); Response otpResponse = null; int maxLoopCount = Integer.parseInt(properties.getProperty("uinGenMaxLoopCount")); int currLoopCount = 0; while (currLoopCount < maxLoopCount) { - input = MimotoUtil.inputstringKeyWordHandeler(input, testCaseName); + String input = MimotoUtil.inputstringKeyWordHandeler(inputStrJson, testCaseName); if (testCaseName.contains(GlobalConstants.ESIGNET_)) { if (MimotoConfigManager.isInServiceNotDeployedList(GlobalConstants.ESIGNET)) { throw new SkipException("esignet is not deployed hence skipping the testcase"); diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java index f5c9d58c4..1c6ecde68 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java @@ -45,7 +45,6 @@ public static String getEsignetBaseUrl() { String esignetBaseUrl = null; if (getproperty("runPlugin").equals("mosipid")) { esignetBaseUrl = "https://" + MimotoUtil.getValueFromMimotoActuator("overrides", getproperty("mosipid-identity-esignet-host")); - } else if (getproperty("runPlugin").equals("mockid")) { esignetBaseUrl = "https://" + MimotoUtil.getValueFromMimotoActuator("overrides", getproperty("mock-identity-esignet-host")); } diff --git a/api-test/src/main/resources/config/idaCertDataDeleteQueries.txt b/api-test/src/main/resources/config/idaCertDataDeleteQueries.txt index c16ccc493..0b2c2e70b 100644 --- a/api-test/src/main/resources/config/idaCertDataDeleteQueries.txt +++ b/api-test/src/main/resources/config/idaCertDataDeleteQueries.txt @@ -1,8 +1,8 @@ ##### DB queries to be executed to tear down the data used and generated during the test rig run -delete from ida.ca_cert_store WHERE cert_subject LIKE '%O=mimoto_pid%' -delete from ida.ca_cert_store WHERE cert_subject LIKE '%O=mimoto_ekyc_pid%' -delete from ida.ca_cert_store WHERE cert_subject LIKE '%O=mimoto_device_pid%' -delete from ida.ca_cert_store WHERE cert_subject LIKE '%O=mimoto_ftm_pid%' +delete from ida.ca_cert_store WHERE cert_subject LIKE '%O=${currentModule}_pid%' +delete from ida.ca_cert_store WHERE cert_subject LIKE '%O=${currentModule}_ekyc_pid%' +delete from ida.ca_cert_store WHERE cert_subject LIKE '%O=${currentModule}_device_pid%' +delete from ida.ca_cert_store WHERE cert_subject LIKE '%O=${currentModule}_ftm_pid%' delete from ida.ca_cert_store WHERE cert_subject LIKE '%O=partnernameforautomationesi%' delete from ida.ca_cert_store WHERE cert_subject LIKE '%O=partnernameforesignet%' \ No newline at end of file diff --git a/api-test/src/main/resources/config/keyManagerCertDataDeleteQueries.txt b/api-test/src/main/resources/config/keyManagerCertDataDeleteQueries.txt index 60a12aebe..a89dfaf9e 100644 --- a/api-test/src/main/resources/config/keyManagerCertDataDeleteQueries.txt +++ b/api-test/src/main/resources/config/keyManagerCertDataDeleteQueries.txt @@ -1,14 +1,14 @@ ##### DB queries to be executed to tear down the data used and generated during the test rig run -delete from mosip_keymgr.keymgr.ca_cert_store WHERE cert_subject LIKE '%O=mimoto_pid%' -delete from mosip_keymgr.keymgr.ca_cert_store WHERE cert_subject LIKE '%O=mimoto_ekyc_pid%' -delete from mosip_keymgr.keymgr.ca_cert_store WHERE cert_subject LIKE '%O=mimoto_device_pid%' -delete from mosip_keymgr.keymgr.ca_cert_store WHERE cert_subject LIKE '%O=mimoto_ftm_pid%' +delete from mosip_keymgr.keymgr.ca_cert_store WHERE cert_subject LIKE '%O=${currentModule}_pid%' +delete from mosip_keymgr.keymgr.ca_cert_store WHERE cert_subject LIKE '%O=${currentModule}_ekyc_pid%' +delete from mosip_keymgr.keymgr.ca_cert_store WHERE cert_subject LIKE '%O=${currentModule}_device_pid%' +delete from mosip_keymgr.keymgr.ca_cert_store WHERE cert_subject LIKE '%O=${currentModule}_ftm_pid%' delete from mosip_keymgr.keymgr.ca_cert_store WHERE cert_subject LIKE '%O=partnernameforautomationesi%' delete from mosip_keymgr.keymgr.ca_cert_store WHERE cert_subject LIKE '%O=partnernameforesignet%' -delete from mosip_keymgr.keymgr.partner_cert_store WHERE cert_subject LIKE '%O=mimoto_pid%' -delete from mosip_keymgr.keymgr.partner_cert_store WHERE cert_subject LIKE '%O=mimoto_ekyc_pid%' -delete from mosip_keymgr.keymgr.partner_cert_store WHERE cert_subject LIKE '%O=mimoto_device_pid%' -delete from mosip_keymgr.keymgr.partner_cert_store WHERE cert_subject LIKE '%O=mimoto_ftm_pid%' +delete from mosip_keymgr.keymgr.partner_cert_store WHERE cert_subject LIKE '%O=${currentModule}_pid%' +delete from mosip_keymgr.keymgr.partner_cert_store WHERE cert_subject LIKE '%O=${currentModule}_ekyc_pid%' +delete from mosip_keymgr.keymgr.partner_cert_store WHERE cert_subject LIKE '%O=${currentModule}_device_pid%' +delete from mosip_keymgr.keymgr.partner_cert_store WHERE cert_subject LIKE '%O=${currentModule}_ftm_pid%' delete from mosip_keymgr.keymgr.partner_cert_store WHERE cert_subject LIKE '%O=partnernameforautomationesi%' delete from mosip_keymgr.keymgr.partner_cert_store WHERE cert_subject LIKE '%O=partnernameforesignet%' \ No newline at end of file diff --git a/api-test/src/main/resources/config/masterDataCertDataDeleteQueries.txt b/api-test/src/main/resources/config/masterDataCertDataDeleteQueries.txt index b95b8e0bf..81b0dc0d9 100644 --- a/api-test/src/main/resources/config/masterDataCertDataDeleteQueries.txt +++ b/api-test/src/main/resources/config/masterDataCertDataDeleteQueries.txt @@ -1,8 +1,8 @@ ##### DB queries to be executed to tear down the data used and generated during the test rig run -delete from master.ca_cert_store WHERE cert_subject LIKE '%O=mimoto_pid%' -delete from master.ca_cert_store WHERE cert_subject LIKE '%O=mimoto_ekyc_pid%' -delete from master.ca_cert_store WHERE cert_subject LIKE '%O=mimoto_device_pid%' -delete from master.ca_cert_store WHERE cert_subject LIKE '%O=mimoto_ftm_pid%' +delete from master.ca_cert_store WHERE cert_subject LIKE '%O=${currentModule}_pid%' +delete from master.ca_cert_store WHERE cert_subject LIKE '%O=${currentModule}_ekyc_pid%' +delete from master.ca_cert_store WHERE cert_subject LIKE '%O=${currentModule}_device_pid%' +delete from master.ca_cert_store WHERE cert_subject LIKE '%O=${currentModule}_ftm_pid%' delete from master.ca_cert_store WHERE cert_subject LIKE '%O=partnernameforautomationesi%' delete from master.ca_cert_store WHERE cert_subject LIKE '%O=partnernameforesignet%' \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml b/api-test/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml index ec695af68..783377981 100644 --- a/api-test/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml +++ b/api-test/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml @@ -14,7 +14,7 @@ DownloadIssuerCredential: "redirect_uri": "$INJIREDIRECTURI$", "code_verifier": "$CODEVERIFIER$", "issuer": "Mosip", - "credential": "MosipVerifiableCredential" + "credential": "MOSIPVerifiableCredential" }' output: '{ }' @@ -34,7 +34,7 @@ DownloadIssuerCredential: "redirect_uri": "$INJIREDIRECTURI$", "code_verifier": "$CODEVERIFIER$", "issuer": "MosipInvalid", - "credential": "MosipVerifiableCredential" + "credential": "MOSIPVerifiableCredential" }' output: '{ "errors":[ @@ -84,7 +84,7 @@ DownloadIssuerCredential: "redirect_uri": "$INJIREDIRECTURI$", "code_verifier": "$CODEVERIFIER$", "issuer": "Mosip", - "credential": "MosipVerifiableCredential" + "credential": "MOSIPVerifiableCredential" }' output: '{ "errors":[ @@ -110,7 +110,7 @@ DownloadIssuerCredential: "redirect_uri": "$INJIREDIRECTURI$", "code_verifier": "$CODEVERIFIER$", "issuer": "Mosip", - "credential": "MosipVerifiableCredential" + "credential": "MOSIPVerifiableCredential" }' output: '{ "errors":[ diff --git a/api-test/src/main/resources/mimoto/GetIssuerConfiguration/GetIssuerConfiguration.yml b/api-test/src/main/resources/mimoto/GetIssuerConfiguration/GetIssuerConfiguration.yml index 7209be4f0..1d4c7dda4 100644 --- a/api-test/src/main/resources/mimoto/GetIssuerConfiguration/GetIssuerConfiguration.yml +++ b/api-test/src/main/resources/mimoto/GetIssuerConfiguration/GetIssuerConfiguration.yml @@ -10,7 +10,7 @@ GetIssuerConfiguration: input: '{ }' output: '{ - "name": "MosipVerifiableCredential" + "name": "MOSIPVerifiableCredential" }' Mimoto_GetIssuerConfiguration_With_Issuer_Removed_From_URL_Neg: endPoint: /v1/mimoto/issuers/configuration diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential.yml b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential.yml index f8b55677d..e2b548db5 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential.yml @@ -13,7 +13,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: "redirectUri": "$INJIREDIRECTURI$", "codeVerifier": "$CODEVERIFIER$", "issuer": "Mosip", - "credentialConfigurationId": "MosipVerifiableCredential", + "credentialConfigurationId": "MOSIPVerifiableCredential", "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", "cookieName": "SESSION" @@ -37,7 +37,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: "redirectUri": "$INJIREDIRECTURI$", "codeVerifier": "$CODEVERIFIER$", "issuer": "Mosip", - "credentialConfigurationId": "MosipVerifiableCredential", + "credentialConfigurationId": "MOSIPVerifiableCredential", "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", "cookieName": "SESSION" @@ -60,7 +60,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: "redirectUri": "$INJIREDIRECTURI$", "codeVerifier": "$CODEVERIFIER$", "issuer": "Mosip", - "credentialConfigurationId": "MosipVerifiableCredential", + "credentialConfigurationId": "MOSIPVerifiableCredential", "walletId": "$ID:CreateWallet_WithoutUnlock_all_Valid_Smoke_sid_walletId$", "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", "cookieName": "SESSION" @@ -83,7 +83,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: "redirectUri": "$INJIREDIRECTURI$", "codeVerifier": "$CODEVERIFIER$", "issuer": "Mosip", - "credentialConfigurationId": "MosipVerifiableCredential", + "credentialConfigurationId": "MOSIPVerifiableCredential", "walletId": "invalid-wallet-id", "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", "cookieName": "SESSION" @@ -106,7 +106,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: "redirectUri": "$INJIREDIRECTURI$", "codeVerifier": "$CODEVERIFIER$", "issuer": "Mosip", - "credentialConfigurationId": "MosipVerifiableCredential", + "credentialConfigurationId": "MOSIPVerifiableCredential", "walletId": " ", "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", "cookieName": "SESSION" @@ -129,8 +129,8 @@ DownloadMosipIssuerCredentialWithGoogleLogin: "redirectUri": "$INJIREDIRECTURI$", "codeVerifier": "$CODEVERIFIER$", "issuer": "Mosip", - "credentialConfigurationId": "MosipVerifiableCredential", - "walletId": "null", + "credentialConfigurationId": "MOSIPVerifiableCredential", + "walletId": "", "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", "cookieName": "SESSION" }' @@ -152,7 +152,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: "redirectUri": "$INJIREDIRECTURI$", "codeVerifier": "$CODEVERIFIER$", "issuer": "Mosip", - "credentialConfigurationId": "MosipVerifiableCredential", + "credentialConfigurationId": "MOSIPVerifiableCredential", "walletId": "145672", "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", "cookieName": "SESSION" @@ -175,7 +175,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: "redirectUri": "$INJIREDIRECTURI$", "codeVerifier": "$CODEVERIFIER$", "issuer": "Mosip", - "credentialConfigurationId": "MosipVerifiableCredential", + "credentialConfigurationId": "MOSIPVerifiableCredential", "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", "cookieName": "SESSION" @@ -198,7 +198,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: "redirectUri": "$INJIREDIRECTURI$", "codeVerifier": "$CODEVERIFIER$", "issuer": "Mosip", - "credentialConfigurationId": "MosipVerifiableCredential", + "credentialConfigurationId": "MOSIPVerifiableCredential", "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", "cookieName": "SESSION" @@ -221,7 +221,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: "redirectUri": "$INJIREDIRECTURI$", "codeVerifier": "$CODEVERIFIER$", "issuer": "Mosip", - "credentialConfigurationId": "MosipVerifiableCredential", + "credentialConfigurationId": "MOSIPVerifiableCredential", "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", "cookieName": "SESSION" @@ -244,7 +244,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: "redirectUri": "$INJIREDIRECTURI$", "codeVerifier": "$CODEVERIFIER$", "issuer": "Mosip", - "credentialConfigurationId": "MosipVerifiableCredential", + "credentialConfigurationId": "MOSIPVerifiableCredential", "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", "cookieName": "SESSION" @@ -267,7 +267,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: "redirectUri": "$INJIREDIRECTURI$", "codeVerifier": "$CODEVERIFIER$", "issuer": "Mosip", - "credentialConfigurationId": "MosipVerifiableCredential", + "credentialConfigurationId": "MOSIPVerifiableCredential", "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", "cookieName": "SESSION" @@ -290,7 +290,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: "redirectUri": "$INJIREDIRECTURI$", "codeVerifier": "$CODEVERIFIER$", "issuer": "Mosip", - "credentialConfigurationId": "MosipVerifiableCredential", + "credentialConfigurationId": "MOSIPVerifiableCredential", "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", "cookieName": "SESSION" @@ -313,7 +313,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: "redirectUri": "$INJIREDIRECTURI$", "codeVerifier": "$CODEVERIFIER$", "issuer": "Mosip", - "credentialConfigurationId": "MosipVerifiableCredential", + "credentialConfigurationId": "MOSIPVerifiableCredential", "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", "cookieName": "SESSION" @@ -336,7 +336,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: "redirectUri": "$INJIREDIRECTURI$", "codeVerifier": "$CODEVERIFIER$", "issuer": "Mosip", - "credentialConfigurationId": "MosipVerifiableCredential", + "credentialConfigurationId": "MOSIPVerifiableCredential", "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", "cookieName": "SESSION" @@ -359,7 +359,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: "redirectUri": "$INJIREDIRECTURI$", "codeVerifier": "$CODEVERIFIER$", "issuer": "Mosip", - "credentialConfigurationId": "MosipVerifiableCredential", + "credentialConfigurationId": "MOSIPVerifiableCredential", "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", "cookieName": "SESSION" @@ -382,7 +382,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: "redirectUri": "$INJIREDIRECTURI$", "codeVerifier": "$CODEVERIFIER$", "issuer": "Mosip", - "credentialConfigurationId": "MosipVerifiableCredential", + "credentialConfigurationId": "MOSIPVerifiableCredential", "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", "cookieName": "SESSION" @@ -405,7 +405,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: "redirectUri": "invalid", "codeVerifier": "$CODEVERIFIER$", "issuer": "Mosip", - "credentialConfigurationId": "MosipVerifiableCredential", + "credentialConfigurationId": "MOSIPVerifiableCredential", "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", "cookieName": "SESSION" @@ -428,7 +428,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: "redirectUri": "", "codeVerifier": "$CODEVERIFIER$", "issuer": "Mosip", - "credentialConfigurationId": "MosipVerifiableCredential", + "credentialConfigurationId": "MOSIPVerifiableCredential", "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", "cookieName": "SESSION" @@ -451,7 +451,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: "redirectUri": " ", "codeVerifier": "$CODEVERIFIER$", "issuer": "Mosip", - "credentialConfigurationId": "MosipVerifiableCredential", + "credentialConfigurationId": "MOSIPVerifiableCredential", "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", "cookieName": "SESSION" @@ -474,7 +474,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: "redirectUri": "$REMOVE$", "codeVerifier": "$CODEVERIFIER$", "issuer": "Mosip", - "credentialConfigurationId": "MosipVerifiableCredential", + "credentialConfigurationId": "MOSIPVerifiableCredential", "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", "cookieName": "SESSION" @@ -497,7 +497,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: "redirectUri": "8654678", "codeVerifier": "$CODEVERIFIER$", "issuer": "Mosip", - "credentialConfigurationId": "MosipVerifiableCredential", + "credentialConfigurationId": "MOSIPVerifiableCredential", "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", "cookieName": "SESSION" @@ -520,7 +520,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: "redirectUri": "$INJIREDIRECTURI$", "codeVerifier": "invalid", "issuer": "Mosip", - "credentialConfigurationId": "MosipVerifiableCredential", + "credentialConfigurationId": "MOSIPVerifiableCredential", "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", "cookieName": "SESSION" @@ -543,7 +543,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: "redirectUri": "$INJIREDIRECTURI$", "codeVerifier": "", "issuer": "Mosip", - "credentialConfigurationId": "MosipVerifiableCredential", + "credentialConfigurationId": "MOSIPVerifiableCredential", "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", "cookieName": "SESSION" @@ -566,7 +566,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: "redirectUri": "$INJIREDIRECTURI$", "codeVerifier": " ", "issuer": "Mosip", - "credentialConfigurationId": "MosipVerifiableCredential", + "credentialConfigurationId": "MOSIPVerifiableCredential", "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", "cookieName": "SESSION" @@ -589,7 +589,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: "redirectUri": "$INJIREDIRECTURI$", "codeVerifier": "$REMOVE$", "issuer": "Mosip", - "credentialConfigurationId": "MosipVerifiableCredential", + "credentialConfigurationId": "MOSIPVerifiableCredential", "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", "cookieName": "SESSION" @@ -612,7 +612,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: "redirectUri": "$INJIREDIRECTURI$", "codeVerifier": "8665542", "issuer": "Mosip", - "credentialConfigurationId": "MosipVerifiableCredential", + "credentialConfigurationId": "MOSIPVerifiableCredential", "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", "cookieName": "SESSION" @@ -635,7 +635,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: "redirectUri": "$INJIREDIRECTURI$", "codeVerifier": "$CODEVERIFIER$", "issuer": "invalid", - "credentialConfigurationId": "MosipVerifiableCredential", + "credentialConfigurationId": "MOSIPVerifiableCredential", "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", "cookieName": "SESSION" @@ -658,7 +658,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: "redirectUri": "$INJIREDIRECTURI$", "codeVerifier": "$CODEVERIFIER$", "issuer": "", - "credentialConfigurationId": "MosipVerifiableCredential", + "credentialConfigurationId": "MOSIPVerifiableCredential", "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", "cookieName": "SESSION" @@ -681,7 +681,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: "redirectUri": "$INJIREDIRECTURI$", "codeVerifier": "$CODEVERIFIER$", "issuer": " ", - "credentialConfigurationId": "MosipVerifiableCredential", + "credentialConfigurationId": "MOSIPVerifiableCredential", "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", "cookieName": "SESSION" @@ -704,7 +704,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: "redirectUri": "$INJIREDIRECTURI$", "codeVerifier": "$CODEVERIFIER$", "issuer": "$REMOVE$", - "credentialConfigurationId": "MosipVerifiableCredential", + "credentialConfigurationId": "MOSIPVerifiableCredential", "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", "cookieName": "SESSION" @@ -727,7 +727,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: "redirectUri": "$INJIREDIRECTURI$", "codeVerifier": "$CODEVERIFIER$", "issuer": "86654556", - "credentialConfigurationId": "MosipVerifiableCredential", + "credentialConfigurationId": "MOSIPVerifiableCredential", "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", "cookieName": "SESSION" @@ -889,7 +889,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: "redirectUri": "$INJIREDIRECTURI$", "codeVerifier": "$CODEVERIFIER$", "issuer": "Mosip", - "credentialConfigurationId": "MosipVerifiableCredential", + "credentialConfigurationId": "MOSIPVerifiableCredential", "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", "cookie": "withoutLogin", "cookieName": "SESSION" @@ -913,7 +913,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: "redirectUri": "$INJIREDIRECTURI$", "codeVerifier": "$CODEVERIFIER$", "issuer": "Mosip", - "credentialConfigurationId": "MosipVerifiableCredential", + "credentialConfigurationId": "MOSIPVerifiableCredential", "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", "cookie": "OGYwNWI5YWQtZjg0MS00NmM2LWJiZTgtOGRmMWYwMGYzNzcy", "cookieName": "SESSION" diff --git a/api-test/src/main/resources/testCaseSkippedList.txt b/api-test/src/main/resources/testCaseSkippedList.txt index 76c50d7e3..df9d13d95 100644 --- a/api-test/src/main/resources/testCaseSkippedList.txt +++ b/api-test/src/main/resources/testCaseSkippedList.txt @@ -1,2 +1,6 @@ ##### JIRA number;testcase -#MOSIP-12456------Mimoto_AddIdentity_Binding_smoke_Pos \ No newline at end of file +#MOSIP-12456------Mimoto_AddIdentity_Binding_smoke_Pos +INJIWEB-1619------Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_NullInWallet_Neg +INJIWEB-1624------Mimoto_FetchAllCredentials_Empty_WalletId_And_Empty_Accepted_claims_Neg +INJIWEB-1666------Mimoto_BindingOtp_Valid_vid_All_Smoke +INJIWEB-1666------Mimoto_WalletBinding_vid_OTP_Valid_Smoke From c35a94b879263009a43ec595e0472b0b3c38579b Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Fri, 10 Oct 2025 13:49:32 +0530 Subject: [PATCH 782/860] Fix for cache namespace issue (#950) * Added namespace before cache so no environment conflict happen Signed-off-by: Gurpreet41082 * changed caching prefix Signed-off-by: Gurpreet41082 * changed caching prefix with injiweb Signed-off-by: Gurpreet41082 --------- Signed-off-by: Gurpreet41082 --- src/main/java/io/mosip/mimoto/config/CacheConfig.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/io/mosip/mimoto/config/CacheConfig.java b/src/main/java/io/mosip/mimoto/config/CacheConfig.java index 36ec6899d..b01e18ee2 100644 --- a/src/main/java/io/mosip/mimoto/config/CacheConfig.java +++ b/src/main/java/io/mosip/mimoto/config/CacheConfig.java @@ -47,6 +47,11 @@ @Slf4j public class CacheConfig { + @Value("${spring.cloud.config.label}") + private String springConfigLabel; + + private final String cachePrefix = "injiweb:"+ springConfigLabel; + private static final String ISSUER_WELLKNOWN_CACHE = "issuerWellknown"; private static final String ISSUERS_CONFIG_CACHE = "issuersConfig"; private static final String AUTH_SERVER_WELLKNOWN_CACHE = "authServerWellknown"; @@ -134,6 +139,9 @@ public RedisCacheManagerBuilderCustomizer redisCacheManagerBuilderCustomizer() { .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jacksonSerializer)) .entryTtl(Duration.ofMinutes(defaultCacheExpiryTimeInMin)) .disableCachingNullValues(); + if (cachePrefix != null && !cachePrefix.isEmpty()) { + defaultCacheConfig = defaultCacheConfig.prefixCacheNameWith(cachePrefix); + } // Per-cache configs Map cacheConfigurations = Map.of( From 174a62a42484589d8dedb4cfc9f31075af44d04d Mon Sep 17 00:00:00 2001 From: Gurpreet41082 Date: Fri, 10 Oct 2025 14:53:33 +0530 Subject: [PATCH 783/860] Fixed the cache name using postconstruct (#951) Signed-off-by: Gurpreet41082 --- src/main/java/io/mosip/mimoto/config/CacheConfig.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/mosip/mimoto/config/CacheConfig.java b/src/main/java/io/mosip/mimoto/config/CacheConfig.java index b01e18ee2..67a325f36 100644 --- a/src/main/java/io/mosip/mimoto/config/CacheConfig.java +++ b/src/main/java/io/mosip/mimoto/config/CacheConfig.java @@ -6,6 +6,7 @@ import java.util.concurrent.TimeUnit; import com.github.benmanes.caffeine.cache.Caffeine; +import jakarta.annotation.PostConstruct; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.autoconfigure.cache.CacheManagerCustomizer; import org.springframework.boot.autoconfigure.cache.RedisCacheManagerBuilderCustomizer; @@ -50,7 +51,12 @@ public class CacheConfig { @Value("${spring.cloud.config.label}") private String springConfigLabel; - private final String cachePrefix = "injiweb:"+ springConfigLabel; + private String cachePrefix; + + @PostConstruct + public void init() { + cachePrefix = "injiweb:" + springConfigLabel; + } private static final String ISSUER_WELLKNOWN_CACHE = "issuerWellknown"; private static final String ISSUERS_CONFIG_CACHE = "issuersConfig"; From 9e4e95d3b29194a5755b576c100c817bec83c134 Mon Sep 17 00:00:00 2001 From: Nitin Hegde <165893206+hegdenitin@users.noreply.github.com> Date: Wed, 29 Oct 2025 15:16:19 +0530 Subject: [PATCH 784/860] MOSIP-42816 Automation for the 4 new APIs (#954) * MOSIP-42816 Automation for the 4 new APIs Signed-off-by: Nitin Hegde * MOSIP-42816 Automation for the 4 new APIs Signed-off-by: Nitin Hegde * MOSIP-42816 Automation for the 4 new APIs Signed-off-by: Nitin Hegde * MOSIP-42816 Automation for the 4 new APIs Signed-off-by: Nitin Hegde --------- Signed-off-by: Nitin Hegde --- ...GetWithPathParamAndCookieForAutoGenId.java | 139 +++++++++++++ .../PatchWithPathParamsBodyAndCookie.java | 103 ++++++++++ ...athParamsHeadersAndCookieForAutoGenId.java | 28 ++- .../testscripts/SimplePostForAutoGenId.java | 38 +++- .../mimoto/utils/MimotoConfigManager.java | 4 + .../apirig/mimoto/utils/MimotoUtil.java | 119 ++++++++---- .../AddTrustedVerifier/AddTrustedVerifier.hbs | 6 + .../AddTrustedVerifier/AddTrustedVerifier.yml | 128 ++++++++++++ .../AddTrustedVerifierResult.hbs | 2 + .../GetCredentialsForPresentation.hbs | 6 + .../GetCredentialsForPresentation.yml | 183 ++++++++++++++++++ .../GetCredentialsForPresentationResult.hbs | 2 + .../InjiVerifyVpRequest.hbs | 62 ++++++ .../InjiVerifyVpRequest.yml | 15 ++ .../InjiVerifyVpRequestResult.hbs | 2 + .../RejectPresentation/RejectPresentation.hbs | 8 + .../RejectPresentation/RejectPresentation.yml | 141 ++++++++++++++ .../RejectPresentationResult.hbs | 2 + .../SubmitPresentation/SubmitPresentation.hbs | 8 + .../SubmitPresentation/SubmitPresentation.yml | 141 ++++++++++++++ .../SubmitPresentationResult.hbs | 2 + .../VerifiablePresentationAuthorization.hbs | 6 + .../VerifiablePresentationAuthorization.yml | 109 +++++++++++ ...ifiablePresentationAuthorizationResult.hbs | 2 + .../mimotoPrerequisiteSuite.xml | 22 ++- api-test/testNgXmlFiles/mimotoSuite.xml | 43 ++++ 26 files changed, 1260 insertions(+), 61 deletions(-) create mode 100644 api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/GetWithPathParamAndCookieForAutoGenId.java create mode 100644 api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PatchWithPathParamsBodyAndCookie.java create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifier.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifier.yml create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifierResult.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Presentations/GetCredentialsForPresentation/GetCredentialsForPresentation.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Presentations/GetCredentialsForPresentation/GetCredentialsForPresentation.yml create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Presentations/GetCredentialsForPresentation/GetCredentialsForPresentationResult.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Presentations/InjiVerifyVpRequest/InjiVerifyVpRequest.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Presentations/InjiVerifyVpRequest/InjiVerifyVpRequest.yml create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Presentations/InjiVerifyVpRequest/InjiVerifyVpRequestResult.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Presentations/RejectPresentation/RejectPresentation.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Presentations/RejectPresentation/RejectPresentation.yml create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Presentations/RejectPresentation/RejectPresentationResult.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Presentations/SubmitPresentation/SubmitPresentation.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Presentations/SubmitPresentation/SubmitPresentation.yml create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Presentations/SubmitPresentation/SubmitPresentationResult.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Presentations/VerifiablePresentationAuthorization/VerifiablePresentationAuthorization.hbs create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Presentations/VerifiablePresentationAuthorization/VerifiablePresentationAuthorization.yml create mode 100644 api-test/src/main/resources/mimoto/LoginFlow/Presentations/VerifiablePresentationAuthorization/VerifiablePresentationAuthorizationResult.hbs diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/GetWithPathParamAndCookieForAutoGenId.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/GetWithPathParamAndCookieForAutoGenId.java new file mode 100644 index 000000000..8fce32e8e --- /dev/null +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/GetWithPathParamAndCookieForAutoGenId.java @@ -0,0 +1,139 @@ +package io.mosip.testrig.apirig.mimoto.testscripts; + +import java.lang.reflect.Field; +import java.util.List; +import java.util.Map; + +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.testng.ITest; +import org.testng.ITestContext; +import org.testng.ITestResult; +import org.testng.Reporter; +import org.testng.SkipException; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; +import org.testng.internal.BaseTestMethod; +import org.testng.internal.TestResult; + +import io.mosip.testrig.apirig.dto.OutputValidationDto; +import io.mosip.testrig.apirig.dto.TestCaseDTO; +import io.mosip.testrig.apirig.mimoto.utils.MimotoConfigManager; +import io.mosip.testrig.apirig.mimoto.utils.MimotoUtil; +import io.mosip.testrig.apirig.testrunner.BaseTestCase; +import io.mosip.testrig.apirig.testrunner.HealthChecker; +import io.mosip.testrig.apirig.utils.AdminTestException; +import io.mosip.testrig.apirig.utils.AuthenticationTestException; +import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.OutputValidationUtil; +import io.mosip.testrig.apirig.utils.ReportUtil; +import io.mosip.testrig.apirig.utils.SecurityXSSException; +import io.restassured.response.Response; + +public class GetWithPathParamAndCookieForAutoGenId extends MimotoUtil implements ITest { + private static final Logger logger = Logger.getLogger(GetWithPathParamAndCookieForAutoGenId.class); + protected String testCaseName = ""; + public String pathParams = null; + public String headers = null; + public String idKeyName = null; + public boolean auditLogCheck = false; + public boolean sendEsignetToken = false; + + @BeforeClass + public static void setLogLevel() { + if (MimotoConfigManager.IsDebugEnabled()) + logger.setLevel(Level.ALL); + else + logger.setLevel(Level.ERROR); + } + + @Override + public String getTestName() { + return testCaseName; + } + + /** + * Data provider class provides test case list. It reads the required parameters + * from the test context. * @return object of data provider + */ + @DataProvider(name = "testcaselist") + public Object[] getTestCaseList(ITestContext context) { + String ymlFile = context.getCurrentXmlTest().getLocalParameters().get("ymlFile"); + pathParams = context.getCurrentXmlTest().getLocalParameters().get("pathParams"); + headers = context.getCurrentXmlTest().getLocalParameters().get("headers"); + idKeyName = context.getCurrentXmlTest().getLocalParameters().get("idKeyName"); + sendEsignetToken = context.getCurrentXmlTest().getLocalParameters().containsKey("sendEsignetToken"); + + logger.info("Started executing yml: " + ymlFile); + return getYmlTestData(ymlFile); + } + + /** + * Test method for Get request execution with auto generated ID feature. + * * @param testCaseDTO + * + * @throws AuthenticationTestException + * @throws AdminTestException + * @throws SecurityXSSException + */ + @Test(dataProvider = "testcaselist") + public void test(TestCaseDTO testCaseDTO) + throws AuthenticationTestException, AdminTestException, SecurityXSSException { + testCaseName = testCaseDTO.getTestCaseName(); + testCaseDTO = MimotoUtil.isTestCaseValidForTheExecution(testCaseDTO); + + if (HealthChecker.signalTerminateExecution) { + throw new SkipException( + GlobalConstants.TARGET_ENV_HEALTH_CHECK_FAILED + HealthChecker.healthCheckFailureMapS); + } + + auditLogCheck = testCaseDTO.isAuditLogCheck(); + + // Handle language variables in templates and inputs + if (testCaseDTO.getInputTemplate().contains(GlobalConstants.$PRIMARYLANG$)) + testCaseDTO.setInputTemplate(testCaseDTO.getInputTemplate().replace(GlobalConstants.$PRIMARYLANG$, + BaseTestCase.languageList.get(0))); + if (testCaseDTO.getOutputTemplate().contains(GlobalConstants.$PRIMARYLANG$)) + testCaseDTO.setOutputTemplate(testCaseDTO.getOutputTemplate().replace(GlobalConstants.$PRIMARYLANG$, + BaseTestCase.languageList.get(0))); + if (testCaseDTO.getInput().contains(GlobalConstants.$PRIMARYLANG$)) + testCaseDTO.setInput( + testCaseDTO.getInput().replace(GlobalConstants.$PRIMARYLANG$, BaseTestCase.languageList.get(0))); + if (testCaseDTO.getOutput().contains(GlobalConstants.$PRIMARYLANG$)) + testCaseDTO.setOutput( + testCaseDTO.getOutput().replace(GlobalConstants.$PRIMARYLANG$, BaseTestCase.languageList.get(0))); + + String inputJson = getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()); + inputJson = MimotoUtil.inputstringKeyWordHandeler(inputJson, testCaseName); + + Response response = getWithPathParamAndCookieForAutoGeneratedId(ApplnURI + testCaseDTO.getEndPoint(), inputJson, + auditLogCheck, COOKIENAME, testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), this.idKeyName, + sendEsignetToken); + + Map> ouputValid = OutputValidationUtil.doJsonOutputValidation( + response.asString(), getJsonFromTemplate(testCaseDTO.getOutput(), testCaseDTO.getOutputTemplate()), + testCaseDTO, response.getStatusCode()); + + Reporter.log(ReportUtil.getOutputValidationReport(ouputValid)); + + if (!OutputValidationUtil.publishOutputResult(ouputValid)) + throw new AdminTestException("Failed at output validation"); + } + + @AfterMethod(alwaysRun = true) + public void setResultTestName(ITestResult result) { + try { + Field method = TestResult.class.getDeclaredField("m_method"); + method.setAccessible(true); + method.set(result, result.getMethod().clone()); + BaseTestMethod baseTestMethod = (BaseTestMethod) result.getMethod(); + Field f = baseTestMethod.getClass().getSuperclass().getDeclaredField("m_methodName"); + f.setAccessible(true); + f.set(baseTestMethod, testCaseName); + } catch (Exception e) { + Reporter.log("Exception : " + e.getMessage()); + } + } +} \ No newline at end of file diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PatchWithPathParamsBodyAndCookie.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PatchWithPathParamsBodyAndCookie.java new file mode 100644 index 000000000..53f511e75 --- /dev/null +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PatchWithPathParamsBodyAndCookie.java @@ -0,0 +1,103 @@ +package io.mosip.testrig.apirig.mimoto.testscripts; + +import java.lang.reflect.Field; +import java.util.List; +import java.util.Map; + +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.testng.ITest; +import org.testng.ITestContext; +import org.testng.ITestResult; +import org.testng.Reporter; +import org.testng.SkipException; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; +import org.testng.internal.BaseTestMethod; +import org.testng.internal.TestResult; +import io.mosip.testrig.apirig.dto.OutputValidationDto; +import io.mosip.testrig.apirig.dto.TestCaseDTO; +import io.mosip.testrig.apirig.mimoto.utils.MimotoConfigManager; +import io.mosip.testrig.apirig.mimoto.utils.MimotoUtil; +import io.mosip.testrig.apirig.testrunner.HealthChecker; +import io.mosip.testrig.apirig.utils.AdminTestException; +import io.mosip.testrig.apirig.utils.AuthenticationTestException; +import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.OutputValidationUtil; +import io.mosip.testrig.apirig.utils.ReportUtil; +import io.mosip.testrig.apirig.utils.SecurityXSSException; +import io.restassured.response.Response; + +public class PatchWithPathParamsBodyAndCookie extends MimotoUtil implements ITest { + private static final Logger logger = Logger.getLogger(PatchWithPathParamsBodyAndCookie.class); + protected String testCaseName = ""; + public String pathParams = null; + Response response = null; + + @BeforeClass + public static void setLogLevel() { + if (MimotoConfigManager.IsDebugEnabled()) + logger.setLevel(Level.ALL); + else + logger.setLevel(Level.ERROR); + } + + @Override + public String getTestName() { + return testCaseName; + } + + @DataProvider(name = "testcaselist") + public Object[] getTestCaseList(ITestContext context) { + String ymlFile = context.getCurrentXmlTest().getLocalParameters().get("ymlFile"); + pathParams = context.getCurrentXmlTest().getLocalParameters().get("pathParams"); + logger.info("Started executing yml: " + ymlFile); + return getYmlTestData(ymlFile); + } + + @Test(dataProvider = "testcaselist") + public void test(TestCaseDTO testCaseDTO) + throws AuthenticationTestException, AdminTestException, SecurityXSSException { + + testCaseName = testCaseDTO.getTestCaseName(); + testCaseDTO = MimotoUtil.isTestCaseValidForTheExecution(testCaseDTO); + + if (HealthChecker.signalTerminateExecution) { + throw new SkipException( + GlobalConstants.TARGET_ENV_HEALTH_CHECK_FAILED + HealthChecker.healthCheckFailureMapS); + } + + String inputJson = getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()); + inputJson = MimotoUtil.inputstringKeyWordHandeler(inputJson, testCaseName); + + response = patchWithPathParamsBodyAndCookie(ApplnURI + testCaseDTO.getEndPoint(), inputJson, COOKIENAME, + testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), pathParams); + + Map> ouputValid = OutputValidationUtil.doJsonOutputValidation( + response.asString(), getJsonFromTemplate(testCaseDTO.getOutput(), testCaseDTO.getOutputTemplate()), + testCaseDTO, response.getStatusCode()); + + Reporter.log(ReportUtil.getOutputValidationReport(ouputValid)); + + if (!OutputValidationUtil.publishOutputResult(ouputValid)) { + throw new AdminTestException("Failed at output validation"); + } + } + + @AfterMethod(alwaysRun = true) + public void setResultTestName(ITestResult result) { + try { + Field method = TestResult.class.getDeclaredField("m_method"); + method.setAccessible(true); + method.set(result, result.getMethod().clone()); + BaseTestMethod baseTestMethod = (BaseTestMethod) result.getMethod(); + Field f = baseTestMethod.getClass().getSuperclass().getDeclaredField("m_methodName"); + f.setAccessible(true); + f.set(baseTestMethod, testCaseName); + } catch (Exception e) { + Reporter.log("Exception : " + e.getMessage()); + } + } +} diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithPathParamsHeadersAndCookieForAutoGenId.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithPathParamsHeadersAndCookieForAutoGenId.java index 3c72bfa67..24e5d7ba2 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithPathParamsHeadersAndCookieForAutoGenId.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/PostWithPathParamsHeadersAndCookieForAutoGenId.java @@ -30,6 +30,7 @@ import io.mosip.testrig.apirig.utils.ReportUtil; import io.mosip.testrig.apirig.utils.SecurityXSSException; import io.restassured.response.Response; +import org.json.JSONObject; public class PostWithPathParamsHeadersAndCookieForAutoGenId extends MimotoUtil implements ITest { private static final Logger logger = Logger.getLogger(PostWithPathParamsHeadersAndCookieForAutoGenId.class); @@ -91,9 +92,28 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad String inputJson = getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()); inputJson = MimotoUtil.inputstringKeyWordHandeler(inputJson, testCaseName); - - Response response = postWithPathParamsBodyHeadersAndCookieForAutoGeneratedId(ApplnURI + testCaseDTO.getEndPoint(), inputJson, COOKIENAME, - testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), pathParams, idKeyName, headers); + + if (inputJson.contains("authorizationRequestUrl")) { + + try { + + JSONObject json = new JSONObject(inputJson); + if (json.has("authorizationRequestUrl")) { + String authUrl = json.getString("authorizationRequestUrl"); + + authUrl = authUrl.replace("&", "&").replace("%25", "%").replace("\\u0026", "&") + .replace("\\u003d", "="); + json.put("authorizationRequestUrl", authUrl); + inputJson = json.toString(); + } + } catch (Exception e) { + logger.warn("Warning: Unable to normalize authorizationRequestUrl"); + } + } + + Response response = postWithPathParamsBodyHeadersAndCookieForAutoGeneratedId( + ApplnURI + testCaseDTO.getEndPoint(), inputJson, COOKIENAME, testCaseDTO.getRole(), + testCaseDTO.getTestCaseName(), pathParams, idKeyName, headers); Map> ouputValid = OutputValidationUtil.doJsonOutputValidation( response.asString(), getJsonFromTemplate(testCaseDTO.getOutput(), testCaseDTO.getOutputTemplate()), @@ -125,4 +145,4 @@ public void setResultTestName(ITestResult result) { } } -} +} \ No newline at end of file diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java index ff93957fe..007cb9ec0 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java @@ -30,11 +30,11 @@ import io.mosip.testrig.apirig.testrunner.HealthChecker; import io.mosip.testrig.apirig.utils.AdminTestException; import io.mosip.testrig.apirig.utils.AdminTestUtil; -import io.mosip.testrig.apirig.utils.AuthenticationTestException; import io.mosip.testrig.apirig.utils.GlobalConstants; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; import io.mosip.testrig.apirig.utils.SecurityXSSException; +import io.mosip.testrig.apirig.utils.AuthenticationTestException; import io.restassured.response.Response; public class SimplePostForAutoGenId extends MimotoUtil implements ITest { @@ -63,7 +63,7 @@ public String getTestName() { /** * Data provider class provides test case list - * + *  * @return object of data provider */ @DataProvider(name = "testcaselist") @@ -77,7 +77,7 @@ public Object[] getTestCaseList(ITestContext context) { /** * Test method for OTP Generation execution - * + *  * @param objTestParameters * @param testScenario * @param testcaseName @@ -89,6 +89,7 @@ public Object[] getTestCaseList(ITestContext context) { public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, AdminTestException, NoSuchAlgorithmException, SecurityXSSException { testCaseName = testCaseDTO.getTestCaseName(); + AdminTestUtil.currentTestCaseName = testCaseDTO.getTestCaseName(); if (HealthChecker.signalTerminateExecution) { throw new SkipException( GlobalConstants.TARGET_ENV_HEALTH_CHECK_FAILED + HealthChecker.healthCheckFailureMapS); @@ -105,7 +106,14 @@ public void test(TestCaseDTO testCaseDTO) String[] templateFields = testCaseDTO.getTemplateFields(); String inputJson = ""; - inputJson = getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()); + // FIX: Check if a template is present before calling the processor. + // If inputTemplate is empty, use the raw input JSON directly. + if (testCaseDTO.getInputTemplate() == null || testCaseDTO.getInputTemplate().isEmpty()) { + inputJson = testCaseDTO.getInput(); + } else { + inputJson = getJsonFromTemplate(testCaseDTO.getInput(), testCaseDTO.getInputTemplate()); + } + inputJson = MimotoUtil.inputstringKeyWordHandeler(inputJson, testCaseName); @@ -175,6 +183,23 @@ public void test(TestCaseDTO testCaseDTO) response = postWithBodyAndBearerTokenForAutoGeneratedId(tempUrl + testCaseDTO.getEndPoint(), inputJson, COOKIENAME, testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), idKeyName); } + } else if (testCaseName.contains("InjiVerify_")) { + if (MimotoConfigManager.isInServiceNotDeployedList(GlobalConstants.INJIVERIFY)) { + throw new SkipException(GlobalConstants.SERVICE_NOT_DEPLOYED_MESSAGE); + } + String tempUrl = MimotoConfigManager.getInjiVerifyBaseURL(); + if (testCaseDTO.getEndPoint().startsWith("$INJIVERIFYBASEURL$")) { + + String injiVerifyBaseURL = MimotoConfigManager.getInjiVerifyBaseURL(); + if (injiVerifyBaseURL != null && !injiVerifyBaseURL.isBlank()) + tempUrl = injiVerifyBaseURL; + testCaseDTO.setEndPoint(testCaseDTO.getEndPoint().replace("$INJIVERIFYBASEURL$", "")); + } + + // FIX: Pass an empty string ("") for the cookie name to suppress the Authorization token value + // while satisfying the non-null requirement of the utility method. + response = postWithBodyAndCookieForAutoGeneratedId(tempUrl + testCaseDTO.getEndPoint(), inputJson, + "", testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), idKeyName); } else if (testCaseName.contains("GoogleLoginToken_")) { response = postWithBodyAndBearerTokenForAutoGeneratedId(ApplnURI + testCaseDTO.getEndPoint(), inputJson, COOKIENAME, testCaseDTO.getRole(), testCaseDTO.getTestCaseName(), idKeyName); @@ -207,8 +232,7 @@ public void test(TestCaseDTO testCaseDTO) /** * The method ser current test name to result - * - * @param result + * * @param result */ @AfterMethod(alwaysRun = true) public void setResultTestName(ITestResult result) { @@ -224,4 +248,4 @@ public void setResultTestName(ITestResult result) { Reporter.log("Exception : " + e.getMessage()); } } -} +} \ No newline at end of file diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java index 1c6ecde68..a0b72fa96 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoConfigManager.java @@ -57,5 +57,9 @@ public static String getEsignetBaseUrl() { public static String getEsignetSunBirdBaseURL() { return "https://" + MimotoUtil.getValueFromMimotoActuator("overrides", getproperty("sunbirdrc-insurance-esignet-host")); } + + public static String getInjiVerifyBaseURL() { + return "https://" + MimotoUtil.getValueFromMimotoActuator("overrides", "mosip.injiverify.host"); + } } diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java index f927a6cc8..fa83bebec 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java @@ -45,9 +45,9 @@ public class MimotoUtil extends AdminTestUtil { private static String fullNameForSunBirdR = generateFullNameForSunBirdR(); private static String dobForSunBirdR = generateDobForSunBirdR(); private static String policyNumberForSunBirdR = generateRandomNumberString(9); - + public static List testCasesInRunScope = new ArrayList<>(); - + public static void setLogLevel() { if (MimotoConfigManager.IsDebugEnabled()) logger.setLevel(Level.ALL); @@ -64,7 +64,7 @@ public static String isOTPEnabled() { logger.info("OTP Enabled value: " + otpEnabled); return otpEnabled; } - + public static TestCaseDTO changeContextURLByFlag(TestCaseDTO testCaseDTO) { if (!(System.getenv("useOldContextURL") == null) && !(System.getenv("useOldContextURL").isBlank()) && System.getenv("useOldContextURL").equalsIgnoreCase("true")) { @@ -78,43 +78,43 @@ public static TestCaseDTO changeContextURLByFlag(TestCaseDTO testCaseDTO) { return testCaseDTO; } - + public static boolean isValidJSONObject(String input) { - try { - new JSONObject(input); - return true; - } catch (JSONException e) { - return false; - } - } - + try { + new JSONObject(input); + return true; + } catch (JSONException e) { + return false; + } + } + public static TestCaseDTO isTestCaseValidForTheExecution(TestCaseDTO testCaseDTO) { String testCaseName = testCaseDTO.getTestCaseName(); currentTestCaseName = testCaseName; - + int indexof = testCaseName.indexOf("_"); String modifiedTestCaseName = testCaseName.substring(indexof + 1); - + addTestCaseDetailsToMap(modifiedTestCaseName, testCaseDTO.getUniqueIdentifier()); - + if (!testCasesInRunScope.isEmpty() && testCasesInRunScope.contains(testCaseDTO.getUniqueIdentifier()) == false) { throw new SkipException(GlobalConstants.NOT_IN_RUN_SCOPE_MESSAGE); - } - + } + String endpoint = testCaseDTO.getEndPoint(); String inputJson = testCaseDTO.getInput(); - - //When the captcha is enabled we cannot execute the test case as we can not generate the captcha token + + // When the captcha is enabled we cannot execute the test case as we can not generate the captcha token if (isCaptchaEnabled() == true) { GlobalMethods.reportCaptchaStatus(GlobalConstants.CAPTCHA_ENABLED, true); throw new SkipException(GlobalConstants.CAPTCHA_ENABLED_MESSAGE); } - + if (MosipTestRunner.skipAll == true) { throw new SkipException(GlobalConstants.PRE_REQUISITE_FAILED_MESSAGE); } - + if (isOTPEnabled().equals("false")) { if (testCaseDTO.getEndPoint().contains(GlobalConstants.SEND_OTP_ENDPOINT) || testCaseDTO.getInput().contains(GlobalConstants.SEND_OTP_ENDPOINT) @@ -122,7 +122,7 @@ public static TestCaseDTO isTestCaseValidForTheExecution(TestCaseDTO testCaseDTO || (testCaseName.startsWith("Mimoto_Generate_") && endpoint.contains("/v1/mimoto/vid"))) { throw new SkipException(GlobalConstants.OTP_FEATURE_NOT_SUPPORTED); } - + if (inputJson.contains("_vid$")) { inputJson = inputJson.replace("_vid$", "_VID$"); testCaseDTO.setInput(inputJson); @@ -131,13 +131,13 @@ public static TestCaseDTO isTestCaseValidForTheExecution(TestCaseDTO testCaseDTO if (isOTPEnabled().equals("true") && endpoint.contains("/idrepository/v1/vid")) { throw new SkipException(GlobalConstants.FEATURE_NOT_SUPPORTED_MESSAGE); } - + if (SkipTestCaseHandler.isTestCaseInSkippedList(testCaseName)) { throw new SkipException(GlobalConstants.KNOWN_ISSUES); } return testCaseDTO; } - + public static void dbCleanUp() { DBManager.executeDBQueries(MimotoConfigManager.getKMDbUrl(), MimotoConfigManager.getKMDbUser(), MimotoConfigManager.getKMDbPass(), MimotoConfigManager.getKMDbSchema(), @@ -149,13 +149,13 @@ public static void dbCleanUp() { MimotoConfigManager.getMasterDbPass(), MimotoConfigManager.getMasterDbSchema(), getGlobalResourcePath() + "/" + "config/masterDataCertDataDeleteQueries.txt"); } - + public static String getOTPFromSMTP(String inputJson, TestCaseDTO testCaseDTO) { String testCaseName = testCaseDTO.getTestCaseName(); JSONObject request = new JSONObject(inputJson); String emailId = null; String otp = null; - + if (testCaseName.contains("ESignet_AuthenticateUser") && request.has(GlobalConstants.REQUEST)) { if (request.getJSONObject(GlobalConstants.REQUEST).has(GlobalConstants.CHALLENGELIST)) { if (request.getJSONObject(GlobalConstants.REQUEST).getJSONArray(GlobalConstants.CHALLENGELIST) @@ -189,19 +189,19 @@ public static String getOTPFromSMTP(String inputJson, TestCaseDTO testCaseDTO) { } } } - + return inputJson; } - + public static String inputstringKeyWordHandeler(String jsonString, String testCaseName) { if (jsonString.contains("$ID:")) { jsonString = replaceIdWithAutogeneratedId(jsonString, "$ID:"); } - + if (jsonString.contains(GlobalConstants.TIMESTAMP)) { jsonString = replaceKeywordValue(jsonString, GlobalConstants.TIMESTAMP, generateCurrentUTCTimeStamp()); } - + if (jsonString.contains("$UNIQUENONCEVALUEFORESIGNET$")) { jsonString = replaceKeywordValue(jsonString, "$UNIQUENONCEVALUEFORESIGNET$", String.valueOf(Calendar.getInstance().getTimeInMillis())); @@ -217,23 +217,23 @@ public static String inputstringKeyWordHandeler(String jsonString, String testCa jsonString = replaceKeywordValue(jsonString, "$SUNBIRDINSURANCEAUTHFACTORTYPE$", valueToReplace); } - + if (jsonString.contains("$GOOGLE_IDT_TOKEN$")) { jsonString = replaceKeywordValue(jsonString, "$GOOGLE_IDT_TOKEN$", getGoogleIdToken()); } - + if (jsonString.contains("$POLICYNUMBERFORSUNBIRDRC$")) { jsonString = replaceKeywordValue(jsonString, "$POLICYNUMBERFORSUNBIRDRC$", policyNumberForSunBirdR); } - + if (jsonString.contains("$FULLNAMEFORSUNBIRDRC$")) { jsonString = replaceKeywordValue(jsonString, "$FULLNAMEFORSUNBIRDRC$", fullNameForSunBirdR); } - + if (jsonString.contains("$DOBFORSUNBIRDRC$")) { jsonString = replaceKeywordValue(jsonString, "$DOBFORSUNBIRDRC$", dobForSunBirdR); } - + if (jsonString.contains("$CHALLENGEVALUEFORSUNBIRDC$")) { HashMap mapForChallenge = new HashMap(); @@ -256,7 +256,14 @@ public static String inputstringKeyWordHandeler(String jsonString, String testCa jsonString = replaceKeywordValue(jsonString, "$INJIREDIRECTURI$", ApplnURI.replace(GlobalConstants.API_INTERNAL, "injiweb") + "/redirect"); } - + if (jsonString.contains("$AUTHORIZATION_REQUEST_URL$")) { + jsonString = replaceKeywordValue(jsonString, "$AUTHORIZATION_REQUEST_URL$", + getAuthorizationRequestUrlMock()); + + } + if (jsonString.contains("$CLIENT_ID_INJI_VERIFY$")) { + jsonString = replaceKeywordValue(jsonString, "$CLIENT_ID_INJI_VERIFY$", getClientIdForInjiVerify()); + } if (jsonString.contains("$GETCLIENTIDFORMOSIPIDFROMMIMOTOACTUATOR$")) { String clientIdSection = MimotoConfigManager.getproperty("mimoto-oidc-mosipid-partner-clientid"); jsonString = replaceKeywordWithValue(jsonString, "$GETCLIENTIDFORMOSIPIDFROMMIMOTOACTUATOR$", @@ -266,11 +273,11 @@ public static String inputstringKeyWordHandeler(String jsonString, String testCa jsonString = replaceKeywordWithValue(jsonString, "$GETCLIENTIDFORINSURANCEFROMMIMOTOACTUATOR$", getValueFromMimotoActuator("overrides", clientIdSection)); } - + return jsonString; - + } - + public static String replaceKeywordValue(String jsonString, String keyword, String value) { if (value != null && !value.isEmpty()) return jsonString.replace(keyword, value); @@ -283,7 +290,7 @@ public static String replaceKeywordValue(String jsonString, String keyword, Stri } } - + public static String generatePublicKeyForMimoto() { String vcString = ""; @@ -320,13 +327,12 @@ public static String generateDobForSunBirdR() { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); return dob.format(formatter); } - + public static JSONArray mimotoActuatorResponseArray = null; public static String getValueFromMimotoActuator(String section, String key) { String url = ApplnURI + ConfigManager.getproperty("actuatorMimotoEndpoint"); - if (!(System.getenv("useOldContextURL") == null) - && !(System.getenv("useOldContextURL").isBlank()) + if (!(System.getenv("useOldContextURL") == null) && !(System.getenv("useOldContextURL").isBlank()) && System.getenv("useOldContextURL").equalsIgnoreCase("true")) { if (url.contains("/v1/mimoto/")) { url = url.replace("/v1/mimoto/", "/residentmobileapp/"); @@ -401,4 +407,31 @@ private static String getGoogleIdToken() { } + private static String extractEnvironmentName() { + final String startMarker = "api-internal."; + final String endMarker = ".mosip.net"; + + int startIndex = ApplnURI.indexOf(startMarker); + int endIndex = ApplnURI.indexOf(endMarker); + + if (startIndex == -1 || endIndex == -1 || startIndex >= endIndex) { + throw new IllegalArgumentException( + "Failed to extract environment name from ApplnURI: " + ApplnURI + ); + } + + startIndex += startMarker.length(); + return ApplnURI.substring(startIndex, endIndex); + } + + private static String getClientIdForInjiVerify() { + String env_name = extractEnvironmentName(); + return "did:web:injiverify." + env_name + ".mosip.net:v1:verify"; + } + + private static String getAuthorizationRequestUrlMock() { + String env_name = extractEnvironmentName(); + return "openid4vp://authorize?client_id=" + getClientIdForInjiVerify() + + "&request_uri=" + "https://injiverify." + env_name + ".mosip.net/v1/verify/vp-request/"; + } } \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifier.hbs b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifier.hbs new file mode 100644 index 000000000..68b63e951 --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifier.hbs @@ -0,0 +1,6 @@ +{ + "cookie": "{{cookie}}", + "cookieName": "{{cookieName}}", + "walletId": "{{walletId}}", + "verifierId": "{{verifierId}}" +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifier.yml b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifier.yml new file mode 100644 index 000000000..490d56ba3 --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifier.yml @@ -0,0 +1,128 @@ +AddTrustedVerifier: + Mimoto_AddTrustedVerifier_all_Valid_Smoke_sid: + endPoint: /v1/mimoto/wallets/{walletId}/trusted-verifiers + description: Add trusted verifier with valid data + uniqueIdentifier: TC_Mimoto_AddTrustedVerifier_01 + role: userDefinedCookie + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifier + outputTemplate: mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifierResult + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "verifierId": "$ID:VerifiablePresentationAuthorization_all_Valid_Smoke_sid_id$" +}' + output: '{ +}' + + Mimoto_AddTrustedVerifier_withEmpty_verifierId_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/trusted-verifiers + description: Add trusted verifier with empty verifierId + uniqueIdentifier: TC_Mimoto_AddTrustedVerifier_02 + role: userDefinedCookie + restMethod: post + inputTemplate: mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifier + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "verifierId": "" +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_AddTrustedVerifier_withInvalid_walletId_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/trusted-verifiers + description: Add trusted verifier with invalid walletId - fail + uniqueIdentifier: TC_Mimoto_AddTrustedVerifier_03 + role: userDefinedCookie + restMethod: post + inputTemplate: mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifier + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "invalidWalletID", + "verifierId": "$ID:VerifiablePresentationAuthorization_all_Valid_Smoke_sid_id$" +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_AddTrustedVerifier_withEmptyWalletID_walletId_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/trusted-verifiers + description: Add trusted verifier with empty walletId + uniqueIdentifier: TC_Mimoto_AddTrustedVerifier_04 + role: userDefinedCookie + restMethod: post + inputTemplate: mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifier + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "", + "verifierId": "$ID:VerifiablePresentationAuthorization_all_Valid_Smoke_sid_id$" +}' + output: '{ + "errorCode": "invalid_request" +}' + + + Mimoto_AddTrustedVerifier_withLocked_walletId_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/trusted-verifiers + description: Add trusted verifier with locked walletId + uniqueIdentifier: TC_Mimoto_AddTrustedVerifier_05 + role: userDefinedCookie + restMethod: post + inputTemplate: mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifier + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_WithoutUnlock_all_Valid_Smoke_sid_walletId$", + "verifierId": "$ID:VerifiablePresentationAuthorization_all_Valid_Smoke_sid_id$" +}' + output: '{ + "errorCode": "wallet_locked" +}' + + Mimoto_AddTrustedVerifier_withInvalidSession_unAuthorized_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/trusted-verifiers + description: Add trusted verifier with invalid session + uniqueIdentifier: TC_Mimoto_AddTrustedVerifier_06 + role: userDefinedCookie + restMethod: post + checkOnlyStatusCodeInResponse: true + inputTemplate: mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifier + outputTemplate: mimoto/responseCode + input: '{ + "cookie": "OGYwNWI5YWQtZjg0MS00NmM2LWJiZTgtOGRmMWYwMGYzNzcy", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "verifierId": "$ID:VerifiablePresentationAuthorization_all_Valid_Smoke_sid_id$" +}' + output: '{ + "responseCode": "401" +}' + + Mimoto_AddTrustedVerifier_all_Valid_duplicateVerifierID_Smoke_sid: + endPoint: /v1/mimoto/wallets/{walletId}/trusted-verifiers + description: Add trusted verifier with valid data for duplicate verifier ID scenario + uniqueIdentifier: TC_Mimoto_AddTrustedVerifier_07 + role: userDefinedCookie + restMethod: post + inputTemplate: mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifier + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "verifierId": "$ID:VerifiablePresentationAuthorization_all_Valid_Smoke_sid_id$" +}' + output: '{ + "errorCode": "duplicate_verifier" +}' \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifierResult.hbs b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifierResult.hbs new file mode 100644 index 000000000..7a73a41bf --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifierResult.hbs @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/GetCredentialsForPresentation/GetCredentialsForPresentation.hbs b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/GetCredentialsForPresentation/GetCredentialsForPresentation.hbs new file mode 100644 index 000000000..5099ba9d0 --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/GetCredentialsForPresentation/GetCredentialsForPresentation.hbs @@ -0,0 +1,6 @@ +{ + "cookie": "{{cookie}}", + "walletId": "{{walletId}}", + "presentationId": "{{presentationId}}", + "cookieName": "{{cookieName}}" +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/GetCredentialsForPresentation/GetCredentialsForPresentation.yml b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/GetCredentialsForPresentation/GetCredentialsForPresentation.yml new file mode 100644 index 000000000..434bf5e71 --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/GetCredentialsForPresentation/GetCredentialsForPresentation.yml @@ -0,0 +1,183 @@ +GetCredentialsForPresentation: + Mimoto_GetCredentialsForPresentation_all_Valid_Smoke: + endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId}/credentials + description: Get credentials list with presentation id and wallet id valid + uniqueIdentifier: TC_Mimoto_GetCredentialsForPresentation_01 + role: userDefinedCookie + restMethod: get + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/LoginFlow/Presentations/GetCredentialsForPresentation/GetCredentialsForPresentation + outputTemplate: mimoto/LoginFlow/Presentations/GetCredentialsForPresentation/GetCredentialsForPresentationResult + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "presentationId": "$ID:VerifiablePresentationAuthorization_all_Valid_Smoke_sid_presentationId$", + "cookieName": "SESSION" +}' + output: '{ +}' + + Mimoto_GetCredentialsForPresentation_invalidWalletID_Smoke_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId}/credentials + description: Get credentials list with invalid wallet id + uniqueIdentifier: TC_Mimoto_GetCredentialsForPresentation_02 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/Presentations/GetCredentialsForPresentation/GetCredentialsForPresentation + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "walletId": "invalidID", + "presentationId": "$ID:VerifiablePresentationAuthorization_all_Valid_Smoke_sid_presentationId$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode": "invalid_request" +}' + Mimoto_GetCredentialsForPresentation_invalidPresentationID_Smoke_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId}/credentials + description: Get credentials list with invalid presentation ID id + uniqueIdentifier: TC_Mimoto_GetCredentialsForPresentation_03 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/Presentations/GetCredentialsForPresentation/GetCredentialsForPresentation + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "presentationId": "invalidPresentationID", + "cookieName": "SESSION" +}' + output: '{ + "errorCode": "invalid_request", + "errorMessage": "Invalid Wallet ID. Session and request Wallet ID do not match" +}' + + Mimoto_GetCredentialsForPresentation_WithoutLogin_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId}/credentials + description: Get list of all the presentations that is present in DB without login and expects to fail + uniqueIdentifier: TC_Mimoto_GetCredentialsForPresentation_04 + role: userDefinedCookie + restMethod: get + checkOnlyStatusCodeInResponse: true + inputTemplate: mimoto/LoginFlow/Presentations/GetCredentialsForPresentation/GetCredentialsForPresentation + outputTemplate: mimoto/responseCode + input: '{ + "cookie": "withoutLogin", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "presentationId": "$ID:VerifiablePresentationAuthorization_all_Valid_Smoke_sid_presentationId$", + "cookieName": "SESSION" +}' + output: '{ + "responseCode": "401" +}' + + Mimoto_GetCredentialsForPresentation_WithExpiredSession_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId}/credentials + description: Get list of all the presentations that is present in DB with expired login and expects to fail + uniqueIdentifier: TC_Mimoto_GetCredentialsForPresentation_05 + role: userDefinedCookie + restMethod: get + checkOnlyStatusCodeInResponse: true + inputTemplate: mimoto/LoginFlow/Presentations/GetCredentialsForPresentation/GetCredentialsForPresentation + outputTemplate: mimoto/responseCode + input: '{ + "cookie": "OGYwNWI5YWQtZjg0MS00NmM2LWJiZTgtOGRmMWYwMGYzNzcy", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "presentationId": "$ID:VerifiablePresentationAuthorization_all_Valid_Smoke_sid_presentationId$", + "cookieName": "SESSION" +}' + output: '{ + "responseCode": "401" +}' + + Mimoto_GetCredentialsForPresentation_emptyWalletID_Smoke_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId}/credentials + description: Get credentials list with empty wallet id + uniqueIdentifier: TC_Mimoto_GetCredentialsForPresentation_06 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/Presentations/GetCredentialsForPresentation/GetCredentialsForPresentation + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "walletId": "", + "presentationId": "$ID:VerifiablePresentationAuthorization_all_Valid_Smoke_sid_presentationId$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_GetCredentialsForPresentation_invalidWalletIdAndPresentationID_Smoke_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId}/credentials + description: Get credentials list with invalid wallet id and presentation Id + uniqueIdentifier: TC_Mimoto_GetCredentialsForPresentation_07 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/Presentations/GetCredentialsForPresentation/GetCredentialsForPresentation + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "walletId": "invalidWalletID", + "presentationId": "invalidPresentationId", + "cookieName": "SESSION" +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_GetCredentialsForPresentation_emptyStringWalletId_Smoke_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId}/credentials + description: Get credentials list with empty String wallet id + uniqueIdentifier: TC_Mimoto_GetCredentialsForPresentation_08 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/Presentations/GetCredentialsForPresentation/GetCredentialsForPresentation + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "walletId": " ", + "presentationId": "$ID:VerifiablePresentationAuthorization_all_Valid_Smoke_sid_presentationId$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_GetCredentialsForPresentation_lockedWallet_Smoke_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId}/credentials + description: Get credentials list with locked wallet + uniqueIdentifier: TC_Mimoto_GetCredentialsForPresentation_09 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/Presentations/GetCredentialsForPresentation/GetCredentialsForPresentation + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "walletId": "$ID:CreateWallet_WithoutUnlock_all_Valid_Smoke_sid_walletId$", + "presentationId": "$ID:VerifiablePresentationAuthorization_all_Valid_Smoke_sid_presentationId$", + "cookieName": "SESSION" +}' + output: '{ + "errorCode": "wallet_locked" +}' + + Mimoto_GetCredentialsForPresentation_emptyPresentationID_Smoke_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId}/credentials + description: Get credentials list with empty presentation ID id + uniqueIdentifier: TC_Mimoto_GetCredentialsForPresentation_10 + role: userDefinedCookie + restMethod: get + inputTemplate: mimoto/LoginFlow/Presentations/GetCredentialsForPresentation/GetCredentialsForPresentation + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "presentationId": " ", + "cookieName": "SESSION" +}' + output: '{ + "errorCode": "invalid_request", + "errorMessage": "Invalid Wallet ID. Session and request Wallet ID do not match" +}' \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/GetCredentialsForPresentation/GetCredentialsForPresentationResult.hbs b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/GetCredentialsForPresentation/GetCredentialsForPresentationResult.hbs new file mode 100644 index 000000000..7a73a41bf --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/GetCredentialsForPresentation/GetCredentialsForPresentationResult.hbs @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/InjiVerifyVpRequest/InjiVerifyVpRequest.hbs b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/InjiVerifyVpRequest/InjiVerifyVpRequest.hbs new file mode 100644 index 000000000..0421e2f39 --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/InjiVerifyVpRequest/InjiVerifyVpRequest.hbs @@ -0,0 +1,62 @@ +{ + "clientId": "{{clientId}}", + "presentationDefinition": { + "id": "c4822b58-7fb4-454e-b827-f8758fe27f9a", + "purpose": "Relying party is requesting your digital ID for the purpose of Self-Authentication", + "format": { + "ldp_vc": { + "proof_type": [ + "Ed25519Signature2020" + ] + } + }, + "input_descriptors": [ + { + "id": "id card credential", + "format": { + "ldp_vc": { + "proof_type": [ + "RsaSignature2018" + ] + } + }, + "constraints": { + "fields": [ + { + "path": [ + "$.type" + ], + "filter": { + "type": "object", + "pattern": "MOSIPVerifiableCredential" + } + } + ] + } + }, + { + "id": "id card credential", + "format": { + "ldp_vc": { + "proof_type": [ + "Ed25519Signature2020" + ] + } + }, + "constraints": { + "fields": [ + { + "path": [ + "$.type" + ], + "filter": { + "type": "object", + "pattern": "InsuranceCredential" + } + } + ] + } + } + ] + } +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/InjiVerifyVpRequest/InjiVerifyVpRequest.yml b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/InjiVerifyVpRequest/InjiVerifyVpRequest.yml new file mode 100644 index 000000000..57bdc3a2c --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/InjiVerifyVpRequest/InjiVerifyVpRequest.yml @@ -0,0 +1,15 @@ +InjiVerifyVpRequest: + InjiVerify_InjiVerifyVpRequest_all_Valid_Smoke_sid: + endPoint: $INJIVERIFYBASEURL$/v1/verify/vp-request + description: Creating vp request as pre-requisite for verifiable presentation + uniqueIdentifier: TC_InjiVerify_InjiVerifyVpRequest_01 + restMethod: post + role: noauth + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/LoginFlow/Presentations/InjiVerifyVpRequest/InjiVerifyVpRequest + outputTemplate: mimoto/LoginFlow/Presentations/InjiVerifyVpRequest/InjiVerifyVpRequestResult + input: '{ + "clientId":"$CLIENT_ID_INJI_VERIFY$" + }' + output: '{ +}' \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/InjiVerifyVpRequest/InjiVerifyVpRequestResult.hbs b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/InjiVerifyVpRequest/InjiVerifyVpRequestResult.hbs new file mode 100644 index 000000000..7a73a41bf --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/InjiVerifyVpRequest/InjiVerifyVpRequestResult.hbs @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/RejectPresentation/RejectPresentation.hbs b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/RejectPresentation/RejectPresentation.hbs new file mode 100644 index 000000000..1f2766b2d --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/RejectPresentation/RejectPresentation.hbs @@ -0,0 +1,8 @@ +{ + "cookie": "{{cookie}}", + "cookieName": "{{cookieName}}", + "walletId": "{{walletId}}", + "presentationId": "{{presentationId}}", + "errorCode": "{{errorCode}}", + "errorMessage": "{{errorMessage}}" +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/RejectPresentation/RejectPresentation.yml b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/RejectPresentation/RejectPresentation.yml new file mode 100644 index 000000000..5d20ca009 --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/RejectPresentation/RejectPresentation.yml @@ -0,0 +1,141 @@ +RejectPresentation: + Mimoto_RejectPresentation_all_Valid_Smoke_sid: + endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId} + description: Request rejected with access denied + uniqueIdentifier: TC_Mimoto_RejectPresentation_01 + role: userDefinedCookie + restMethod: patch + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/LoginFlow/Presentations/RejectPresentation/RejectPresentation + outputTemplate: mimoto/LoginFlow/Presentations/RejectPresentation/RejectPresentationResult + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "presentationId": "$ID:VerifiablePresentationAuthorization_all_Valid_Smoke_sid_presentationId$", + "errorCode": "access_denied", + "errorMessage": "User denied authorization to share credentials" +}' + output: '{ +}' + + Mimoto_RejectPresentation_invalidWalletID_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId} + description: Request rejected with access denied with invalid walletID + uniqueIdentifier: TC_Mimoto_RejectPresentation_02 + role: userDefinedCookie + restMethod: patch + inputTemplate: mimoto/LoginFlow/Presentations/RejectPresentation/RejectPresentation + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "invalidWalletID", + "presentationId": "$ID:VerifiablePresentationAuthorization_all_Valid_Smoke_sid_presentationId$", + "errorCode": "access_denied", + "errorMessage": "User denied authorization to share credentials" +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_RejectPresentation_emptyWalletID_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId} + description: Request rejected with access denied with empty walletID + uniqueIdentifier: TC_Mimoto_RejectPresentation_03 + role: userDefinedCookie + restMethod: patch + inputTemplate: mimoto/LoginFlow/Presentations/RejectPresentation/RejectPresentation + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "", + "presentationId": "$ID:VerifiablePresentationAuthorization_all_Valid_Smoke_sid_presentationId$", + "errorCode": "access_denied", + "errorMessage": "User denied authorization to share credentials" +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_RejectPresentation_invalidPresentationId_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId} + description: Request rejected with access denied with invalid presentationId + uniqueIdentifier: TC_Mimoto_RejectPresentation_04 + role: userDefinedCookie + restMethod: patch + inputTemplate: mimoto/LoginFlow/Presentations/RejectPresentation/RejectPresentation + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "presentationId": "invalidPresentationId", + "errorCode": "access_denied", + "errorMessage": "User denied authorization to share credentials" +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_RejectPresentation_emptyPresentationId_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId} + description: Request rejected with access denied with empty presentationId + uniqueIdentifier: TC_Mimoto_RejectPresentation_05 + role: userDefinedCookie + restMethod: patch + inputTemplate: mimoto/LoginFlow/Presentations/RejectPresentation/RejectPresentation + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "presentationId": "", + "errorCode": "access_denied", + "errorMessage": "User denied authorization to share credentials" +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_RejectPresentation_lockedWalletID_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId} + description: Request rejected with access denied with locked walletId + uniqueIdentifier: TC_Mimoto_RejectPresentation_06 + role: userDefinedCookie + restMethod: patch + inputTemplate: mimoto/LoginFlow/Presentations/RejectPresentation/RejectPresentation + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_WithoutUnlock_all_Valid_Smoke_sid_walletId$", + "presentationId": "$ID:VerifiablePresentationAuthorization_all_Valid_Smoke_sid_presentationId$", + "errorCode": "access_denied", + "errorMessage": "User denied authorization to share credentials" +}' + output: '{ + "errorCode": "wallet_locked" +}' + + Mimoto_RejectPresentation_invalidSession_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId} + description: Request rejected with access denied with invalid session id + uniqueIdentifier: TC_Mimoto_RejectPresentation_07 + role: userDefinedCookie + checkOnlyStatusCodeInResponse: true + restMethod: patch + inputTemplate: mimoto/LoginFlow/Presentations/RejectPresentation/RejectPresentation + outputTemplate: mimoto/responseCode + input: '{ + "cookie": "OGYwNWI5YWQtZjg0MS00NmM2LWJiZTgtOGRmMWYwMGYzNzcy", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "presentationId": "$ID:VerifiablePresentationAuthorization_all_Valid_Smoke_sid_presentationId$", + "errorCode": "access_denied", + "errorMessage": "User denied authorization to share credentials" +}' + output: '{ + "responseCode": "401" +}' diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/RejectPresentation/RejectPresentationResult.hbs b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/RejectPresentation/RejectPresentationResult.hbs new file mode 100644 index 000000000..7a73a41bf --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/RejectPresentation/RejectPresentationResult.hbs @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/SubmitPresentation/SubmitPresentation.hbs b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/SubmitPresentation/SubmitPresentation.hbs new file mode 100644 index 000000000..1f2766b2d --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/SubmitPresentation/SubmitPresentation.hbs @@ -0,0 +1,8 @@ +{ + "cookie": "{{cookie}}", + "cookieName": "{{cookieName}}", + "walletId": "{{walletId}}", + "presentationId": "{{presentationId}}", + "errorCode": "{{errorCode}}", + "errorMessage": "{{errorMessage}}" +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/SubmitPresentation/SubmitPresentation.yml b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/SubmitPresentation/SubmitPresentation.yml new file mode 100644 index 000000000..5d20ca009 --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/SubmitPresentation/SubmitPresentation.yml @@ -0,0 +1,141 @@ +RejectPresentation: + Mimoto_RejectPresentation_all_Valid_Smoke_sid: + endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId} + description: Request rejected with access denied + uniqueIdentifier: TC_Mimoto_RejectPresentation_01 + role: userDefinedCookie + restMethod: patch + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/LoginFlow/Presentations/RejectPresentation/RejectPresentation + outputTemplate: mimoto/LoginFlow/Presentations/RejectPresentation/RejectPresentationResult + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "presentationId": "$ID:VerifiablePresentationAuthorization_all_Valid_Smoke_sid_presentationId$", + "errorCode": "access_denied", + "errorMessage": "User denied authorization to share credentials" +}' + output: '{ +}' + + Mimoto_RejectPresentation_invalidWalletID_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId} + description: Request rejected with access denied with invalid walletID + uniqueIdentifier: TC_Mimoto_RejectPresentation_02 + role: userDefinedCookie + restMethod: patch + inputTemplate: mimoto/LoginFlow/Presentations/RejectPresentation/RejectPresentation + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "invalidWalletID", + "presentationId": "$ID:VerifiablePresentationAuthorization_all_Valid_Smoke_sid_presentationId$", + "errorCode": "access_denied", + "errorMessage": "User denied authorization to share credentials" +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_RejectPresentation_emptyWalletID_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId} + description: Request rejected with access denied with empty walletID + uniqueIdentifier: TC_Mimoto_RejectPresentation_03 + role: userDefinedCookie + restMethod: patch + inputTemplate: mimoto/LoginFlow/Presentations/RejectPresentation/RejectPresentation + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "", + "presentationId": "$ID:VerifiablePresentationAuthorization_all_Valid_Smoke_sid_presentationId$", + "errorCode": "access_denied", + "errorMessage": "User denied authorization to share credentials" +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_RejectPresentation_invalidPresentationId_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId} + description: Request rejected with access denied with invalid presentationId + uniqueIdentifier: TC_Mimoto_RejectPresentation_04 + role: userDefinedCookie + restMethod: patch + inputTemplate: mimoto/LoginFlow/Presentations/RejectPresentation/RejectPresentation + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "presentationId": "invalidPresentationId", + "errorCode": "access_denied", + "errorMessage": "User denied authorization to share credentials" +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_RejectPresentation_emptyPresentationId_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId} + description: Request rejected with access denied with empty presentationId + uniqueIdentifier: TC_Mimoto_RejectPresentation_05 + role: userDefinedCookie + restMethod: patch + inputTemplate: mimoto/LoginFlow/Presentations/RejectPresentation/RejectPresentation + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "presentationId": "", + "errorCode": "access_denied", + "errorMessage": "User denied authorization to share credentials" +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_RejectPresentation_lockedWalletID_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId} + description: Request rejected with access denied with locked walletId + uniqueIdentifier: TC_Mimoto_RejectPresentation_06 + role: userDefinedCookie + restMethod: patch + inputTemplate: mimoto/LoginFlow/Presentations/RejectPresentation/RejectPresentation + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_WithoutUnlock_all_Valid_Smoke_sid_walletId$", + "presentationId": "$ID:VerifiablePresentationAuthorization_all_Valid_Smoke_sid_presentationId$", + "errorCode": "access_denied", + "errorMessage": "User denied authorization to share credentials" +}' + output: '{ + "errorCode": "wallet_locked" +}' + + Mimoto_RejectPresentation_invalidSession_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId} + description: Request rejected with access denied with invalid session id + uniqueIdentifier: TC_Mimoto_RejectPresentation_07 + role: userDefinedCookie + checkOnlyStatusCodeInResponse: true + restMethod: patch + inputTemplate: mimoto/LoginFlow/Presentations/RejectPresentation/RejectPresentation + outputTemplate: mimoto/responseCode + input: '{ + "cookie": "OGYwNWI5YWQtZjg0MS00NmM2LWJiZTgtOGRmMWYwMGYzNzcy", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "presentationId": "$ID:VerifiablePresentationAuthorization_all_Valid_Smoke_sid_presentationId$", + "errorCode": "access_denied", + "errorMessage": "User denied authorization to share credentials" +}' + output: '{ + "responseCode": "401" +}' diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/SubmitPresentation/SubmitPresentationResult.hbs b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/SubmitPresentation/SubmitPresentationResult.hbs new file mode 100644 index 000000000..7a73a41bf --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/SubmitPresentation/SubmitPresentationResult.hbs @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/VerifiablePresentationAuthorization/VerifiablePresentationAuthorization.hbs b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/VerifiablePresentationAuthorization/VerifiablePresentationAuthorization.hbs new file mode 100644 index 000000000..638d5b618 --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/VerifiablePresentationAuthorization/VerifiablePresentationAuthorization.hbs @@ -0,0 +1,6 @@ +{ + "cookie": "{{cookie}}", + "cookieName": "{{cookieName}}", + "walletId": "{{walletId}}", + "authorizationRequestUrl": "{{authorizationRequestUrl}}" +} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/VerifiablePresentationAuthorization/VerifiablePresentationAuthorization.yml b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/VerifiablePresentationAuthorization/VerifiablePresentationAuthorization.yml new file mode 100644 index 000000000..9c9467188 --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/VerifiablePresentationAuthorization/VerifiablePresentationAuthorization.yml @@ -0,0 +1,109 @@ +VerifiablePresentationAuthorization: + Mimoto_VerifiablePresentationAuthorization_all_Valid_Smoke_sid: + endPoint: /v1/mimoto/wallets/{walletId}/presentations + description: Creating verifiable presentation with valid data + uniqueIdentifier: TC_Mimoto_VerifiablePresentationAuthorization_01 + role: userDefinedCookie + restMethod: post + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/LoginFlow/Presentations/VerifiablePresentationAuthorization/VerifiablePresentationAuthorization + outputTemplate: mimoto/LoginFlow/Presentations/VerifiablePresentationAuthorization/VerifiablePresentationAuthorizationResult + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "authorizationRequestUrl": "$AUTHORIZATION_REQUEST_URL$$ID:InjiVerifyVpRequest_all_Valid_Smoke_sid_requestId$" +}' + output: '{ +}' + + Mimoto_VerifiablePresentationAuthorization_withInvalid_authorizationRequestUrl_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/presentations + description: Creating verifiable presentation with invalid authorizationRequestUrl + uniqueIdentifier: TC_Mimoto_VerifiablePresentationAuthorization_02 + role: userDefinedCookie + restMethod: post + inputTemplate: mimoto/LoginFlow/Presentations/VerifiablePresentationAuthorization/VerifiablePresentationAuthorization + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "authorizationRequestUrl": "invalidRequest" +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_VerifiablePresentationAuthorization_withInvalid_walletId_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/presentations + description: Creating verifiable presentation with invalid walletId + uniqueIdentifier: TC_Mimoto_VerifiablePresentationAuthorization_03 + role: userDefinedCookie + restMethod: post + inputTemplate: mimoto/LoginFlow/Presentations/VerifiablePresentationAuthorization/VerifiablePresentationAuthorization + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "invalidWalletID", + "authorizationRequestUrl": "$AUTHORIZATION_REQUEST_URL$$ID:InjiVerifyVpRequest_all_Valid_Smoke_sid_requestId$" +}' + output: '{ + "errorCode": "invalid_request" +}' + + Mimoto_VerifiablePresentationAuthorization_withLocked_walletId_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/presentations + description: Creating verifiable presentation with locked walletId + uniqueIdentifier: TC_Mimoto_VerifiablePresentationAuthorization_04 + role: userDefinedCookie + restMethod: post + inputTemplate: mimoto/LoginFlow/Presentations/VerifiablePresentationAuthorization/VerifiablePresentationAuthorization + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_WithoutUnlock_all_Valid_Smoke_sid_walletId$", + "authorizationRequestUrl": "$AUTHORIZATION_REQUEST_URL$$ID:InjiVerifyVpRequest_all_Valid_Smoke_sid_requestId$" +}' + output: '{ + "errorCode": "wallet_locked" +}' + + Mimoto_VerifiablePresentationAuthorization_withInvalidSession_unAuthorized_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/presentations + description: Creating verifiable presentation with invalid session + uniqueIdentifier: TC_Mimoto_VerifiablePresentationAuthorization_05 + role: userDefinedCookie + restMethod: post + checkOnlyStatusCodeInResponse: true + inputTemplate: mimoto/LoginFlow/Presentations/VerifiablePresentationAuthorization/VerifiablePresentationAuthorization + outputTemplate: mimoto/responseCode + input: '{ + "cookie": "OGYwNWI5YWQtZjg0MS00NmM2LWJiZTgtOGRmMWYwMGYzNzcy", + "cookieName": "SESSION", + "walletId": "$ID:CreateWallet_all_Valid_Smoke_sid_walletId$", + "authorizationRequestUrl": "$AUTHORIZATION_REQUEST_URL$$ID:InjiVerifyVpRequest_all_Valid_Smoke_sid_requestId$" +}' + output: '{ + "responseCode": "401" +}' + + Mimoto_VerifiablePresentationAuthorization_withNullWalletID_walletId_Neg: + endPoint: /v1/mimoto/wallets/{walletId}/presentations + description: Creating verifiable presentation with null walletId + uniqueIdentifier: TC_Mimoto_VerifiablePresentationAuthorization_06 + role: userDefinedCookie + restMethod: post + inputTemplate: mimoto/LoginFlow/Presentations/VerifiablePresentationAuthorization/VerifiablePresentationAuthorization + outputTemplate: mimoto/error2 + input: '{ + "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletId": "null", + "authorizationRequestUrl": "$AUTHORIZATION_REQUEST_URL$$ID:InjiVerifyVpRequest_all_Valid_Smoke_sid_requestId$" +}' + output: '{ + "errorCode": "invalid_request" +}' \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/VerifiablePresentationAuthorization/VerifiablePresentationAuthorizationResult.hbs b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/VerifiablePresentationAuthorization/VerifiablePresentationAuthorizationResult.hbs new file mode 100644 index 000000000..7a73a41bf --- /dev/null +++ b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/VerifiablePresentationAuthorization/VerifiablePresentationAuthorizationResult.hbs @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/api-test/testNgXmlFiles/mimotoPrerequisiteSuite.xml b/api-test/testNgXmlFiles/mimotoPrerequisiteSuite.xml index 5bf235412..daa975435 100644 --- a/api-test/testNgXmlFiles/mimotoPrerequisiteSuite.xml +++ b/api-test/testNgXmlFiles/mimotoPrerequisiteSuite.xml @@ -1,13 +1,13 @@ - - - + @@ -17,20 +17,28 @@ + value="mimoto/GenerateVID/createGenerateVID.yml" /> + name="io.mosip.testrig.apirig.mimoto.testscripts.PostWithAutogenIdWithOtpGenerate" /> - + name="io.mosip.testrig.apirig.mimoto.testscripts.SimplePostForAutoGenId" /> + + + + + + + diff --git a/api-test/testNgXmlFiles/mimotoSuite.xml b/api-test/testNgXmlFiles/mimotoSuite.xml index 6a6e5dcd9..f75c70840 100644 --- a/api-test/testNgXmlFiles/mimotoSuite.xml +++ b/api-test/testNgXmlFiles/mimotoSuite.xml @@ -224,6 +224,49 @@ name="io.mosip.testrig.apirig.mimoto.testscripts.PostWithPathParamsAndCookie" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From eac954c537a481f6d1b4d644de4dc432ffb99f7c Mon Sep 17 00:00:00 2001 From: Durgesh Konga Date: Fri, 31 Oct 2025 15:41:08 +0530 Subject: [PATCH 785/860] [INJIWEB-1743] - Fix API Automation Failures (#955) * [INJIWEB-1743] - Fix API Automation Failures Add Exception Handlers for Invalid URLs Update Input Parameters Validation for Session Manager Add Test cases for new Exception Handlers Signed-off-by: kongadurgesh * [INJIWEB-1743] - remove unused imports Signed-off-by: kongadurgesh * [INJIWEB-1743] - Add null check for Session Map Signed-off-by: kongadurgesh * [INJIWEB-1743] - Fix handler method and test cases Signed-off-by: kongadurgesh --------- Signed-off-by: kongadurgesh --- .talismanrc | 2 +- .../WalletPresentationsController.java | 13 ++- .../mimoto/service/impl/SessionManager.java | 26 +++--- .../mimoto/util/GlobalExceptionHandler.java | 16 ++++ .../WalletPresentationsControllerTest.java | 2 +- .../mimoto/service/SessionManagerTest.java | 21 ++--- .../util/GlobalExceptionHandlerTest.java | 82 +++++++++++++++++++ 7 files changed, 127 insertions(+), 35 deletions(-) diff --git a/.talismanrc b/.talismanrc index a7141afe4..4bb07e1ae 100644 --- a/.talismanrc +++ b/.talismanrc @@ -144,7 +144,7 @@ fileignoreconfig: - filename: src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java checksum: 04d143cb4cb10b7dd4d66344c412681a4888983e232f85e4a0e56237e5248325 - filename: src/main/java/io/mosip/mimoto/service/impl/SessionManager.java - checksum: d88c08d3e5981286ace173e2b50ab6d87a55636b647a92829572a18999663e7c + checksum: d2f22ee3ea32d86f510834512e25dba53888aa9b30127bb747049ea933646b55 - filename: src/test/java/io/mosip/mimoto/controller/WalletPresentationsControllerTest.java checksum: 9e8d06af154c14fa40f16193aaee9c905fa5b03c99cb901a8a0b28b0b09121ba - filename: src/main/java/io/mosip/mimoto/controller/WalletPresentationsController.java diff --git a/src/main/java/io/mosip/mimoto/controller/WalletPresentationsController.java b/src/main/java/io/mosip/mimoto/controller/WalletPresentationsController.java index 276e392bc..421906db5 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletPresentationsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletPresentationsController.java @@ -144,10 +144,8 @@ public ResponseEntity getMatchingCredentials(@Pa log.warn("Wallet key not found in session for walletId: {}", walletId); return Utilities.getErrorResponseEntityFromPlatformErrorMessage(UNAUTHORIZED_ACCESS, HttpStatus.UNAUTHORIZED, MediaType.APPLICATION_JSON); } - - VerifiablePresentationSessionData sessionData = sessionManager.getPresentationSessionData(httpSession, walletId, presentationId); - try { + VerifiablePresentationSessionData sessionData = sessionManager.getPresentationSessionData(httpSession, walletId, presentationId); MatchingCredentialsWithWalletDataDTO matchingCredentialsWithWalletData = credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); // Store the matching credentials and pre-filtered matched credentials in session cache before returning sessionManager.storeMatchingWalletCredentialsInPresentationSessionData(httpSession, walletId, sessionData, matchingCredentialsWithWalletData.getMatchingCredentials()); @@ -156,8 +154,7 @@ public ResponseEntity getMatchingCredentials(@Pa return Utilities.getErrorResponseEntityWithoutWrapper( exception, WALLET_CREATE_VP_EXCEPTION.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); } catch (IllegalArgumentException exception) { - return Utilities.getErrorResponseEntityWithoutWrapper( - exception, INVALID_REQUEST.getErrorCode(), HttpStatus.BAD_REQUEST, MediaType.APPLICATION_JSON); + return Utilities.getErrorResponseEntityWithoutWrapper(exception, INVALID_REQUEST.getErrorCode(), HttpStatus.BAD_REQUEST, MediaType.APPLICATION_JSON); } } @@ -230,9 +227,9 @@ public ResponseEntity handlePresentationAction(@PathVariable("walletId") Stri return presentationActionService.handlePresentationAction(walletId, presentationId, request, vpSessionData, base64Key); - } catch (Exception exception) { - log.error("Unexpected error during presentation action for walletId: {}, presentationId: {}", walletId, presentationId, exception); - return Utilities.getErrorResponseEntityWithoutWrapper(exception, INTERNAL_SERVER_ERROR.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); + } + catch (IllegalArgumentException exception){ + return Utilities.getErrorResponseEntityWithoutWrapper(exception, INVALID_REQUEST.getErrorCode(), HttpStatus.BAD_REQUEST, MediaType.APPLICATION_JSON); } } } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/impl/SessionManager.java b/src/main/java/io/mosip/mimoto/service/impl/SessionManager.java index bc5e39595..ceb1d6f64 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/SessionManager.java +++ b/src/main/java/io/mosip/mimoto/service/impl/SessionManager.java @@ -48,20 +48,24 @@ public void storePresentationSessionData(HttpSession httpSession, VerifiablePres * @return The verifiable presentation session data if found, null otherwise. */ public VerifiablePresentationSessionData getPresentationSessionData(HttpSession httpSession, String walletId, String presentationId) { - try { - Map presentations = (Map) httpSession.getAttribute(SessionKeys.PRESENTATIONS + "::" + walletId); - if (presentations == null || !presentations.containsKey(presentationId)) { - log.warn("No presentation found in session for presentationId: {}", presentationId); - return null; - } - VerifiablePresentationSessionData sessionData = presentations.get(presentationId); + validateInputParameters(httpSession, walletId, presentationId); - return sessionData; + Map presentations = (Map) httpSession.getAttribute(SessionKeys.PRESENTATIONS + "::" + walletId); + if (presentations == null || !presentations.containsKey(presentationId)) + throw new IllegalArgumentException("presentationId not found in session"); + return presentations.get(presentationId); + } - } catch (Exception e) { - log.error("Failed to retrieve presentation session data from session for presentationId: {}", presentationId, e); - return null; + private void validateInputParameters(HttpSession httpSession, String walletId, String presentationId) { + if (httpSession == null) { + throw new IllegalArgumentException("HTTP session is invalid"); + } + if (walletId == null || walletId.trim().isEmpty()) { + throw new IllegalArgumentException("Wallet ID is invalid"); + } + if (presentationId == null || presentationId.trim().isEmpty()) { + throw new IllegalArgumentException("presentationId not found in session"); } } diff --git a/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java b/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java index 09f3fbc90..604ccb114 100644 --- a/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java +++ b/src/main/java/io/mosip/mimoto/util/GlobalExceptionHandler.java @@ -10,6 +10,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.http.converter.HttpMessageNotReadableException; import org.springframework.validation.BindingResult; +import org.springframework.web.HttpRequestMethodNotSupportedException; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; @@ -17,6 +18,7 @@ import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.method.annotation.HandlerMethodValidationException; import org.springframework.web.servlet.NoHandlerFoundException; +import org.springframework.web.servlet.resource.NoResourceFoundException; import java.util.Collections; import java.util.stream.Collectors; @@ -32,6 +34,20 @@ public ErrorDTO handleGenericException(Exception ex) { return new ErrorDTO(ErrorConstants.INTERNAL_SERVER_ERROR.getErrorCode(), ErrorConstants.INTERNAL_SERVER_ERROR.getErrorMessage()); } + @ExceptionHandler(HttpRequestMethodNotSupportedException.class) + @ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED) + public ErrorDTO handleUnsupportedRequestException(HttpRequestMethodNotSupportedException ex) { + log.error("HTTP method not supported: {}", ex.getMessage(), ex); + return new ErrorDTO(ErrorConstants.INVALID_REQUEST.getErrorCode(), ex.getMessage()); + } + + @ExceptionHandler(NoResourceFoundException.class) + @ResponseStatus(HttpStatus.NOT_FOUND) + public ErrorDTO handleNoResourceFoundException(NoResourceFoundException ex) { + log.error("An unexpected error occurred: ", ex); + return new ErrorDTO(ErrorConstants.INVALID_REQUEST.getErrorCode(), ex.getMessage()); + } + @ExceptionHandler(WalletLockedException.class) @ResponseStatus(HttpStatus.LOCKED) public ErrorDTO handleWalletUnlockEligibilityException(WalletLockedException ex) { diff --git a/src/test/java/io/mosip/mimoto/controller/WalletPresentationsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletPresentationsControllerTest.java index 7f5870f4d..74372c745 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletPresentationsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletPresentationsControllerTest.java @@ -332,7 +332,7 @@ public void testUserRejectedVerifierInvalidWalletId() throws Exception { .accept(MediaType.APPLICATION_JSON) .sessionAttr("wallet_id", walletId) .sessionAttr("wallet_key", walletKey)) - .andExpect(status().isInternalServerError()); + .andExpect(status().isBadRequest()); verifyNoInteractions(presentationActionService); } diff --git a/src/test/java/io/mosip/mimoto/service/SessionManagerTest.java b/src/test/java/io/mosip/mimoto/service/SessionManagerTest.java index 4081d4321..b10a71fea 100644 --- a/src/test/java/io/mosip/mimoto/service/SessionManagerTest.java +++ b/src/test/java/io/mosip/mimoto/service/SessionManagerTest.java @@ -140,18 +140,16 @@ public void shouldReturnPresentationDefinitionFromSessionSuccessfully() { assertEquals(fixedInstant, result.getCreatedAt()); } - @Test + @Test(expected = IllegalArgumentException.class) public void shouldReturnNullWhenNoPresentationsInSession() { String presentationId = "test-presentation-id"; String walletId = "wallet123"; MockHttpSession session = new MockHttpSession(); - VerifiablePresentationSessionData result = sessionManager.getPresentationSessionData(session, walletId, presentationId); - - assertNull(result); + sessionManager.getPresentationSessionData(session, walletId, presentationId); } - @Test + @Test(expected = IllegalArgumentException.class) public void shouldReturnNullWhenPresentationIdNotFound() { String presentationId = "non-existent-id"; String walletId = "wallet123"; @@ -160,12 +158,10 @@ public void shouldReturnNullWhenPresentationIdNotFound() { Map presentations = new HashMap<>(); session.setAttribute(SessionKeys.PRESENTATIONS + "::" + walletId, presentations); - VerifiablePresentationSessionData result = sessionManager.getPresentationSessionData(session, walletId, presentationId); - - assertNull(result); + sessionManager.getPresentationSessionData(session, walletId, presentationId); } - @Test + @Test(expected = IllegalArgumentException.class) public void shouldHandleExceptionWhenRetrievingPresentationSessionData() { // Arrange String presentationId = "test-presentation-id"; @@ -173,13 +169,10 @@ public void shouldHandleExceptionWhenRetrievingPresentationSessionData() { HttpSession session = mock(HttpSession.class); // Mock session to throw exception when getting attribute - when(session.getAttribute(anyString())).thenThrow(new RuntimeException("Session error")); + when(session.getAttribute(anyString())).thenThrow(new IllegalArgumentException("Session error")); // Act - VerifiablePresentationSessionData result = sessionManager.getPresentationSessionData(session, walletId, presentationId); - - // Assert - assertNull(result); + sessionManager.getPresentationSessionData(session, walletId, presentationId); } @Test diff --git a/src/test/java/io/mosip/mimoto/util/GlobalExceptionHandlerTest.java b/src/test/java/io/mosip/mimoto/util/GlobalExceptionHandlerTest.java index 3a8865665..3a6ebe892 100644 --- a/src/test/java/io/mosip/mimoto/util/GlobalExceptionHandlerTest.java +++ b/src/test/java/io/mosip/mimoto/util/GlobalExceptionHandlerTest.java @@ -13,11 +13,15 @@ import org.springframework.http.HttpStatus; import org.springframework.http.converter.HttpMessageNotReadableException; import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.HttpRequestMethodNotSupportedException; +import org.springframework.web.servlet.resource.NoResourceFoundException; import java.lang.reflect.Method; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class GlobalExceptionHandlerTest { @@ -161,4 +165,82 @@ public void handleValidationExceptionReturnsBadRequest() throws Exception { org.junit.Assert.assertTrue(body.getErrorMessage().contains("errorCode")); } + @Test + public void testHandleUnsupportedRequestExceptionReturnsMethodNotAllowed() throws Exception { + // Arrange + String errorMessage = "Request method 'DELETE' not supported"; + HttpRequestMethodNotSupportedException ex = mock(HttpRequestMethodNotSupportedException.class); + when(ex.getMessage()).thenReturn(errorMessage); + String expectedErrorCode = ErrorConstants.INVALID_REQUEST.getErrorCode(); + + // Act + ErrorDTO result = globalExceptionHandler.handleUnsupportedRequestException(ex); + + // Assert + assertEquals(expectedErrorCode, result.getErrorCode()); + assertEquals(errorMessage, result.getErrorMessage()); + + // Verify ResponseStatus annotation + Method method = GlobalExceptionHandler.class.getMethod("handleUnsupportedRequestException", HttpRequestMethodNotSupportedException.class); + ResponseStatus responseStatus = method.getAnnotation(ResponseStatus.class); + assertNotNull(responseStatus); + assertEquals(HttpStatus.METHOD_NOT_ALLOWED, responseStatus.value()); + } + + @Test + public void testHandleUnsupportedRequestExceptionWithExceptionMessage() throws Exception { + // Arrange + String errorMessage = "Request method 'PATCH' not supported. Supported methods are: GET, POST"; + HttpRequestMethodNotSupportedException ex = mock(HttpRequestMethodNotSupportedException.class); + when(ex.getMessage()).thenReturn(errorMessage); + String expectedErrorCode = ErrorConstants.INVALID_REQUEST.getErrorCode(); + + // Act + ErrorDTO result = globalExceptionHandler.handleUnsupportedRequestException(ex); + + // Assert + assertEquals(expectedErrorCode, result.getErrorCode()); + assertNotNull(result.getErrorMessage()); + assertEquals(errorMessage, result.getErrorMessage()); + } + + @Test + public void testHandleNoResourceFoundExceptionReturnsNotFound() throws Exception { + // Arrange + String errorMessage = "No static resource found at path /api/invalid"; + NoResourceFoundException ex = mock(NoResourceFoundException.class); + when(ex.getMessage()).thenReturn(errorMessage); + String expectedErrorCode = ErrorConstants.INVALID_REQUEST.getErrorCode(); + + // Act + ErrorDTO result = globalExceptionHandler.handleNoResourceFoundException(ex); + + // Assert + assertEquals(expectedErrorCode, result.getErrorCode()); + assertEquals(errorMessage, result.getErrorMessage()); + + // Verify ResponseStatus annotation + Method method = GlobalExceptionHandler.class.getMethod("handleNoResourceFoundException", NoResourceFoundException.class); + ResponseStatus responseStatus = method.getAnnotation(ResponseStatus.class); + assertNotNull(responseStatus); + assertEquals(HttpStatus.NOT_FOUND, responseStatus.value()); + } + + @Test + public void testHandleNoResourceFoundExceptionWithExceptionMessage() throws Exception { + // Arrange + String errorMessage = "No static resource found at path /api/test/resource"; + NoResourceFoundException ex = mock(NoResourceFoundException.class); + when(ex.getMessage()).thenReturn(errorMessage); + String expectedErrorCode = ErrorConstants.INVALID_REQUEST.getErrorCode(); + + // Act + ErrorDTO result = globalExceptionHandler.handleNoResourceFoundException(ex); + + // Assert + assertEquals(expectedErrorCode, result.getErrorCode()); + assertNotNull(result.getErrorMessage()); + assertEquals(errorMessage, result.getErrorMessage()); + } + } \ No newline at end of file From 1be0ba9c6192105e72de3c783689d29db2502d35 Mon Sep 17 00:00:00 2001 From: Nitin Hegde <165893206+hegdenitin@users.noreply.github.com> Date: Fri, 31 Oct 2025 16:44:52 +0530 Subject: [PATCH 786/860] MOSIP-42816 added new session for locked wallet scenario (#956) Signed-off-by: Nitin Hegde --- .../GoogleLoginToken/GoogleLoginToken.yml | 15 +++++++++++++++ .../AddTrustedVerifier/AddTrustedVerifier.yml | 4 ++-- .../GetCredentialsForPresentation.yml | 4 ++-- .../RejectPresentation/RejectPresentation.yml | 6 +++--- .../VerifiablePresentationAuthorization.yml | 4 ++-- .../Wallet/CreateWallet/CreateWallet.yml | 19 +++++++++++++++++++ 6 files changed, 43 insertions(+), 9 deletions(-) diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Authorization/GoogleLoginToken/GoogleLoginToken.yml b/api-test/src/main/resources/mimoto/LoginFlow/Authorization/GoogleLoginToken/GoogleLoginToken.yml index 4682fc502..d2403231c 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/Authorization/GoogleLoginToken/GoogleLoginToken.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/Authorization/GoogleLoginToken/GoogleLoginToken.yml @@ -73,4 +73,19 @@ GoogleLoginToken: }' output: '{ "errorCode": "invalid_request" +}' + Mimoto_GoogleLoginToken_all_ValidForLockedWallet_Smoke: + endPoint: /v1/mimoto/auth/google/token-login + description: Creating the sesion token for google login for locked wallet scenarios + uniqueIdentifier: TC_Mimoto_GoogleLoginToken_06 + role: userDefinedCookie + restMethod: post + checkOnlyStatusCodeInResponse: true + inputTemplate: mimoto/LoginFlow/Authorization/GoogleLoginToken/GoogleLoginToken + outputTemplate: mimoto/responseCode + input: '{ + "cookie": "$GOOGLE_IDT_TOKEN$" +}' + output: '{ + "responseCode": "200" }' \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifier.yml b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifier.yml index 490d56ba3..ad7dfafaf 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifier.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifier.yml @@ -81,9 +81,9 @@ AddTrustedVerifier: inputTemplate: mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifier outputTemplate: mimoto/error2 input: '{ - "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookie": "$ID:GoogleLoginToken_all_ValidForLockedWallet_Smoke_sessionCookie$", "cookieName": "SESSION", - "walletId": "$ID:CreateWallet_WithoutUnlock_all_Valid_Smoke_sid_walletId$", + "walletId": "$ID:CreateWallet_all_ValidForLockedWallet_Smoke_sid_walletId$", "verifierId": "$ID:VerifiablePresentationAuthorization_all_Valid_Smoke_sid_id$" }' output: '{ diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/GetCredentialsForPresentation/GetCredentialsForPresentation.yml b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/GetCredentialsForPresentation/GetCredentialsForPresentation.yml index 434bf5e71..e7f600eaf 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/GetCredentialsForPresentation/GetCredentialsForPresentation.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/GetCredentialsForPresentation/GetCredentialsForPresentation.yml @@ -154,8 +154,8 @@ GetCredentialsForPresentation: inputTemplate: mimoto/LoginFlow/Presentations/GetCredentialsForPresentation/GetCredentialsForPresentation outputTemplate: mimoto/error2 input: '{ - "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", - "walletId": "$ID:CreateWallet_WithoutUnlock_all_Valid_Smoke_sid_walletId$", + "cookie": "$ID:GoogleLoginToken_all_ValidForLockedWallet_Smoke_sessionCookie$", + "walletId": "$ID:CreateWallet_all_ValidForLockedWallet_Smoke_sid_walletId$", "presentationId": "$ID:VerifiablePresentationAuthorization_all_Valid_Smoke_sid_presentationId$", "cookieName": "SESSION" }' diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/RejectPresentation/RejectPresentation.yml b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/RejectPresentation/RejectPresentation.yml index 5d20ca009..2628c30f7 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/RejectPresentation/RejectPresentation.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/RejectPresentation/RejectPresentation.yml @@ -108,9 +108,9 @@ RejectPresentation: inputTemplate: mimoto/LoginFlow/Presentations/RejectPresentation/RejectPresentation outputTemplate: mimoto/error2 input: '{ - "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookie": "$ID:GoogleLoginToken_all_ValidForLockedWallet_Smoke_sessionCookie$", "cookieName": "SESSION", - "walletId": "$ID:CreateWallet_WithoutUnlock_all_Valid_Smoke_sid_walletId$", + "walletId": "$ID:CreateWallet_all_ValidForLockedWallet_Smoke_sid_walletId$", "presentationId": "$ID:VerifiablePresentationAuthorization_all_Valid_Smoke_sid_presentationId$", "errorCode": "access_denied", "errorMessage": "User denied authorization to share credentials" @@ -138,4 +138,4 @@ RejectPresentation: }' output: '{ "responseCode": "401" -}' +}' \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/VerifiablePresentationAuthorization/VerifiablePresentationAuthorization.yml b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/VerifiablePresentationAuthorization/VerifiablePresentationAuthorization.yml index 9c9467188..3ef0ca13f 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/VerifiablePresentationAuthorization/VerifiablePresentationAuthorization.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/VerifiablePresentationAuthorization/VerifiablePresentationAuthorization.yml @@ -62,9 +62,9 @@ VerifiablePresentationAuthorization: inputTemplate: mimoto/LoginFlow/Presentations/VerifiablePresentationAuthorization/VerifiablePresentationAuthorization outputTemplate: mimoto/error2 input: '{ - "cookie": "$ID:GoogleLoginToken_all_Valid_Smoke_sessionCookie$", + "cookie": "$ID:GoogleLoginToken_all_ValidForLockedWallet_Smoke_sessionCookie$", "cookieName": "SESSION", - "walletId": "$ID:CreateWallet_WithoutUnlock_all_Valid_Smoke_sid_walletId$", + "walletId": "$ID:CreateWallet_all_ValidForLockedWallet_Smoke_sid_walletId$", "authorizationRequestUrl": "$AUTHORIZATION_REQUEST_URL$$ID:InjiVerifyVpRequest_all_Valid_Smoke_sid_requestId$" }' output: '{ diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet.yml b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet.yml index 5f46d3f7c..8a0a80545 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet.yml @@ -418,4 +418,23 @@ CreateWallet: }' output: '{ "errorCode": "invalid_request" +}' + + Mimoto_CreateWallet_all_ValidForLockedWallet_Smoke_sid: + endPoint: /v1/mimoto/wallets + description: Creating new wallet with successful login for locked wallet scenarios + uniqueIdentifier: TC_Mimoto_CreateWallet_23 + role: userDefinedCookie + restMethod: post + inputTemplate: mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet + outputTemplate: mimoto/LoginFlow/Wallet/CreateWallet/CreateWalletResult + input: '{ + "cookie": "$ID:GoogleLoginToken_all_ValidForLockedWallet_Smoke_sessionCookie$", + "cookieName": "SESSION", + "walletName": "AutomationWallet", + "walletPin": "123456", + "confirmWalletPin": "123456" +}' + output: '{ + "walletName": "AutomationWallet" }' \ No newline at end of file From 53bb27e4f2f3786b40b5e9b637ee48945591d903 Mon Sep 17 00:00:00 2001 From: Nitin Hegde <165893206+hegdenitin@users.noreply.github.com> Date: Mon, 3 Nov 2025 15:24:47 +0530 Subject: [PATCH 787/860] MOSIP-42816 fix error code for delete wallet - empty walletid scenario (#957) Change errorCode from internal_server_error to invalid_request Signed-off-by: Nitin Hegde <165893206+hegdenitin@users.noreply.github.com> --- .../mimoto/LoginFlow/Wallet/DeleteWallet/DeleteWallet.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Wallet/DeleteWallet/DeleteWallet.yml b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/DeleteWallet/DeleteWallet.yml index 695fd7d7e..61af3948c 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/Wallet/DeleteWallet/DeleteWallet.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/DeleteWallet/DeleteWallet.yml @@ -65,7 +65,7 @@ UnlockWallet: "walletId": "" }' output: '{ - "errorCode": "internal_server_error" + "errorCode": "invalid_request" }' Mimoto_DeleteWallet_Space_WalletId_Neg: @@ -119,4 +119,4 @@ UnlockWallet: }' output: '{ "responseCode": "401" -}' \ No newline at end of file +}' From 5a8a8aea47c25a037e9ae89b5bd46381cb387f3a Mon Sep 17 00:00:00 2001 From: Rudhhi Shah Date: Mon, 3 Nov 2025 18:17:50 +0530 Subject: [PATCH 788/860] [INJIWEB-1626] Updated the pom file (#958) Signed-off-by: Rudhhi Shah --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a9b28d97f..0f0c698c8 100644 --- a/pom.xml +++ b/pom.xml @@ -144,7 +144,7 @@ io.mosip vcverifier-jar - 1.5.0-SNAPSHOT + 1.5.0 io.mosip From 284914ffcc1ed94f57f4b20a4fe6d2b9a517c6fa Mon Sep 17 00:00:00 2001 From: Durgesh Konga Date: Thu, 6 Nov 2025 13:59:31 +0530 Subject: [PATCH 789/860] [INJIWEB-1746] - Fix direct_post response mode: use form-encoded data and update redirect URI handling (#962) * Fix direct_post response mode: use form-encoded data and update redirect URI handling Signed-off-by: kongadurgesh * [INJIWEB-1746] - Update logic to null check redirect_uri Update Test case for empty redirect_uri Signed-off-by: kongadurgesh --------- Signed-off-by: kongadurgesh --- .../PresentationDefinitionDTO.java | 2 +- .../service/impl/PresentationServiceImpl.java | 36 ++++++++++++------- .../service/PresentationServiceTest.java | 4 +-- .../io/mosip/mimoto/util/TestUtilities.java | 9 +++++ 4 files changed, 35 insertions(+), 16 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/dto/openid/presentation/PresentationDefinitionDTO.java b/src/main/java/io/mosip/mimoto/dto/openid/presentation/PresentationDefinitionDTO.java index 0f3a86dbe..eed13571c 100644 --- a/src/main/java/io/mosip/mimoto/dto/openid/presentation/PresentationDefinitionDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/openid/presentation/PresentationDefinitionDTO.java @@ -15,6 +15,6 @@ public class PresentationDefinitionDTO { String id; - @JsonProperty("inputDescriptors") + @JsonProperty("input_descriptors") List inputDescriptors; } diff --git a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java index ca939bffe..44b260d84 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java @@ -29,6 +29,8 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.http.MediaType; import org.springframework.stereotype.Service; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; import java.io.IOException; import java.net.URISyntaxException; @@ -168,6 +170,7 @@ private String processInputDescriptor(VCCredentialResponse vcCredentialResponse, // Create VP Token String vpToken = createVpToken(vpDTO); + // Create PresentationSubmission String presentationSubmission = constructPresentationSubmission(format, vpDTO, presentationDefinitionDTO, inputDescriptorDTO); @@ -175,6 +178,7 @@ private String processInputDescriptor(VCCredentialResponse vcCredentialResponse, if (presentationRequestDTO.getResponseMode() != null && "direct_post".equals(presentationRequestDTO.getResponseMode())) { return postVpToResponseUri( presentationRequestDTO.getResponseUri(), + presentationRequestDTO.getRedirectUri(), vpToken, presentationSubmission, presentationRequestDTO.getState(), @@ -207,33 +211,39 @@ private String buildRedirectString(String vpToken, String redirectUri, String pr URLEncoder.encode(presentationSubmission, StandardCharsets.UTF_8)); } - private String postVpToResponseUri(String responseUri, String vpToken, String presentationSubmission, String state, String nonce) throws JsonProcessingException { - Map postRequest = new HashMap<>(); - postRequest.put("vp_token", vpToken); - postRequest.put("presentation_submission", objectMapper.readTree(presentationSubmission)); + private String postVpToResponseUri(String responseUri, String redirectUri, String vpToken, String presentationSubmission, String state, String nonce) throws JsonProcessingException { + MultiValueMap postRequest = new LinkedMultiValueMap<>(); + postRequest.add("vp_token", Base64.getUrlEncoder().encodeToString(vpToken.getBytes(StandardCharsets.UTF_8))); + postRequest.add("presentation_submission", presentationSubmission); if (state != null) { - postRequest.put("state", state); - } - - if (nonce != null) { - postRequest.put("nonce", nonce); + postRequest.add("state", state); } log.info("Posting VP to response_uri: {}", responseUri); try { Map postResponse = restApiClient.postApi( responseUri, - MediaType.APPLICATION_JSON, + MediaType.APPLICATION_FORM_URLENCODED, postRequest, Map.class ); log.info("Response from verifier after POST: {}", postResponse); - // Check for redirect_uri in response - String redirectUri = (String) postResponse.get("redirect_uri"); - if (redirectUri != null && !redirectUri.isEmpty()) { + + // Check for redirect_uri in response first + if (postResponse != null && postResponse.containsKey("redirect_uri")) { + String responseRedirectUri = (String) postResponse.get("redirect_uri"); + if (responseRedirectUri != null && !responseRedirectUri.isEmpty()) { + return responseRedirectUri; + } + } + + // Use request's redirectUri if it's non-blank + if (redirectUri != null && !redirectUri.isBlank()) { + log.info("Using redirectUri from request: {}", redirectUri); return redirectUri; } + // Fallback behavior if redirect_uri is not provided log.warn("No redirect_uri received from verifier in POST response. Falling back to response_uri."); return responseUri + "?status=vp_sent"; diff --git a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java index a3d025867..c517eac44 100644 --- a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java @@ -482,7 +482,7 @@ public void testDirectPostResponseModeWithoutRedirectUri() throws Exception { String result = presentationService.authorizePresentation(presentationRequestDTO); - assertEquals("https://verifier.example.com/response?status=vp_sent", result); + assertEquals("test_redirect_uri", result); verify(restApiClient).postApi(eq("https://verifier.example.com/response"), any(), any(), eq(Map.class)); } @@ -639,7 +639,7 @@ public void testConstructPresentationDefinitionForSdJwtWithMapTypeNullValue() { @Test public void testDirectPostResponseModeWithEmptyRedirectUri() throws Exception { VCCredentialResponse vcCredentialResponse = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); - PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); + PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTOWithEmptyRedirectURI(); presentationRequestDTO.setResponseMode("direct_post"); presentationRequestDTO.setResponseUri("https://verifier.example.com/response"); presentationRequestDTO.setState("test-state"); diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index 1534ddc9e..73119bf9c 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -293,6 +293,15 @@ public static PresentationRequestDTO getPresentationRequestDTO() { .redirectUri("test_redirect_uri").build(); } + public static PresentationRequestDTO getPresentationRequestDTOWithEmptyRedirectURI() { + return PresentationRequestDTO.builder() + .presentationDefinition(getPresentationDefinitionDTO()) + .clientId("test_client_id") + .resource("http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/test") + .responseType("test_response_type") + .redirectUri("").build(); + } + public static VCCredentialProperties getVCCredentialPropertiesDTO(String type) { ArrayList contextList = new ArrayList<>(); From 9c1d99f8d7d0340b66d59dcd3d137254b7e3a0a7 Mon Sep 17 00:00:00 2001 From: Durgesh Konga Date: Thu, 6 Nov 2025 16:12:08 +0530 Subject: [PATCH 790/860] [INJIWEB-1758] - Upgrade spring boot version for security vulnerabilities (#961) Signed-off-by: kongadurgesh --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 0f0c698c8..8447f75ba 100644 --- a/pom.xml +++ b/pom.xml @@ -53,7 +53,7 @@ 3.6.3 - 3.2.3 + 3.3.7 3.4.0 3.4.1 From 0bdaf38970737c4a4916d0245814341c8f342981 Mon Sep 17 00:00:00 2001 From: Durgesh Konga Date: Fri, 7 Nov 2025 11:08:42 +0530 Subject: [PATCH 791/860] INJIWEB-1746 - All logs for debug (#964) Signed-off-by: kongadurgesh --- .../io/mosip/mimoto/service/impl/DataShareServiceImpl.java | 2 +- .../mosip/mimoto/service/impl/PresentationServiceImpl.java | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java index 222e6e3b6..936886333 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java @@ -111,7 +111,7 @@ public VCCredentialResponse downloadCredentialFromDataShare(PresentationRequest } VCCredentialResponse vcCredentialResponse = objectMapper.readValue(vcCredentialResponseString, VCCredentialResponse.class); - log.info("Completed Mapping the Credential to Object => "); + log.info("Completed Mapping the Credential to Object => {}", vcCredentialResponse.toString()); if(vcCredentialResponse.getCredential() == null){ DataShareResponseDto dataShareResponse = objectMapper.readValue(vcCredentialResponseString, DataShareResponseDto.class); String errorCode = dataShareResponse.getErrors().get(0).getErrorCode(); diff --git a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java index 44b260d84..89acc6d7b 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java @@ -120,6 +120,7 @@ private List getPreRegisteredVerifiers() throws ApiNotAccessibleExcept @Override public String authorizePresentation(PresentationRequestDTO presentationRequestDTO) throws IOException { VCCredentialResponse vcCredentialResponse = dataShareService.downloadCredentialFromDataShare(presentationRequestDTO); + log.info("Downloaded credential from DataShare for presentation request, {}", vcCredentialResponse.toString()); PresentationDefinitionDTO presentationDefinitionDTO = presentationRequestDTO.getPresentationDefinition(); if (presentationDefinitionDTO == null) { throw new VPNotCreatedException(ErrorConstants.INVALID_REQUEST.getErrorMessage()); @@ -145,26 +146,32 @@ private String processInputDescriptor(VCCredentialResponse vcCredentialResponse, String format = vcCredentialResponse.getFormat(); VerifiablePresentationDTO vpDTO; + log.info("Processing credential format: {}, CredentialFormat.LDP_VC.getFormat() : {}", format, CredentialFormat.LDP_VC.getFormat()); if (CredentialFormat.LDP_VC.getFormat().equalsIgnoreCase(format)) { VCCredentialProperties ldpCredential = objectMapper.convertValue(vcCredentialResponse.getCredential(), VCCredentialProperties.class); if (inputDescriptorDTO.getFormat().get("ldpVc").get("proofTypes") .stream().anyMatch(proofType -> ldpCredential.getProof().getType().equals(proofType))) { + log.info("Credential proof type matched: {}", ldpCredential.getProof().getType()); vpDTO = constructVerifiablePresentationString(ldpCredential); } else { + log.info("Credential proof type did not match. Expected one of: {}", inputDescriptorDTO.getFormat().get("ldpVc").get("proofTypes")); throw new VPNotCreatedException(ErrorConstants.INVALID_REQUEST.getErrorMessage()); } } else if (CredentialFormat.VC_SD_JWT.getFormat().equalsIgnoreCase(format) || CredentialFormat.DC_SD_JWT.getFormat().equalsIgnoreCase(format)) { + log.info("Processing SD-JWT credential"); String credential = objectMapper.convertValue(vcCredentialResponse.getCredential(), String.class); Map jwtHeaders = parseJwtHeader(credential); String responseAlgo = (String) jwtHeaders.get("alg"); if (inputDescriptorDTO.getFormat().get(format).get("sd-jwt_alg_values") .stream().anyMatch(responseAlgo::equals)) { + log.info("SD-JWT algorithm matched: {}", responseAlgo); vpDTO = constructVerifiablePresentationStringForSDjwt(credential); } else { throw new VPNotCreatedException(ErrorConstants.INVALID_REQUEST.getErrorMessage()); } } else { + log.info("Unsupported credential format: {}, CredentialFormat.LDP_VC.getFormat().equalsIgnoreCase(format): {}", format, CredentialFormat.LDP_VC.getFormat().equalsIgnoreCase(format)); throw new VPNotCreatedException(ErrorConstants.INVALID_REQUEST.getErrorMessage()); } From 5fbe48804791a022d0dd79e3740636cb7d9f492b Mon Sep 17 00:00:00 2001 From: Durgesh Konga Date: Fri, 7 Nov 2025 18:27:22 +0530 Subject: [PATCH 792/860] Revert "INJIWEB-1746 - Add logs for debug" (#965) * Revert "INJIWEB-1746 - All logs for debug" This reverts commit 6d6be79e31eba756add9f75262c7989bab824143. Signed-off-by: kongadurgesh * [INJIWEB-1746] - Fix logging mechanism Signed-off-by: kongadurgesh --------- Signed-off-by: kongadurgesh --- .../mosip/mimoto/service/impl/DataShareServiceImpl.java | 1 - .../mimoto/service/impl/PresentationServiceImpl.java | 8 +------- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java index 936886333..7276819c1 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java @@ -111,7 +111,6 @@ public VCCredentialResponse downloadCredentialFromDataShare(PresentationRequest } VCCredentialResponse vcCredentialResponse = objectMapper.readValue(vcCredentialResponseString, VCCredentialResponse.class); - log.info("Completed Mapping the Credential to Object => {}", vcCredentialResponse.toString()); if(vcCredentialResponse.getCredential() == null){ DataShareResponseDto dataShareResponse = objectMapper.readValue(vcCredentialResponseString, DataShareResponseDto.class); String errorCode = dataShareResponse.getErrors().get(0).getErrorCode(); diff --git a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java index 89acc6d7b..71c77f6a7 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java @@ -120,7 +120,6 @@ private List getPreRegisteredVerifiers() throws ApiNotAccessibleExcept @Override public String authorizePresentation(PresentationRequestDTO presentationRequestDTO) throws IOException { VCCredentialResponse vcCredentialResponse = dataShareService.downloadCredentialFromDataShare(presentationRequestDTO); - log.info("Downloaded credential from DataShare for presentation request, {}", vcCredentialResponse.toString()); PresentationDefinitionDTO presentationDefinitionDTO = presentationRequestDTO.getPresentationDefinition(); if (presentationDefinitionDTO == null) { throw new VPNotCreatedException(ErrorConstants.INVALID_REQUEST.getErrorMessage()); @@ -135,6 +134,7 @@ public String authorizePresentation(PresentationRequestDTO presentationRequestDT try { return processInputDescriptor(vcCredentialResponse, inputDescriptorDTO, presentationRequestDTO, presentationDefinitionDTO); } catch (JsonProcessingException e) { + log.error("Exception occured during processInputDesciptor: {}", e.getMessage()); throw new VPNotCreatedException(ErrorConstants.INVALID_REQUEST.getErrorMessage()); } }) @@ -146,32 +146,26 @@ private String processInputDescriptor(VCCredentialResponse vcCredentialResponse, String format = vcCredentialResponse.getFormat(); VerifiablePresentationDTO vpDTO; - log.info("Processing credential format: {}, CredentialFormat.LDP_VC.getFormat() : {}", format, CredentialFormat.LDP_VC.getFormat()); if (CredentialFormat.LDP_VC.getFormat().equalsIgnoreCase(format)) { VCCredentialProperties ldpCredential = objectMapper.convertValue(vcCredentialResponse.getCredential(), VCCredentialProperties.class); if (inputDescriptorDTO.getFormat().get("ldpVc").get("proofTypes") .stream().anyMatch(proofType -> ldpCredential.getProof().getType().equals(proofType))) { - log.info("Credential proof type matched: {}", ldpCredential.getProof().getType()); vpDTO = constructVerifiablePresentationString(ldpCredential); } else { - log.info("Credential proof type did not match. Expected one of: {}", inputDescriptorDTO.getFormat().get("ldpVc").get("proofTypes")); throw new VPNotCreatedException(ErrorConstants.INVALID_REQUEST.getErrorMessage()); } } else if (CredentialFormat.VC_SD_JWT.getFormat().equalsIgnoreCase(format) || CredentialFormat.DC_SD_JWT.getFormat().equalsIgnoreCase(format)) { - log.info("Processing SD-JWT credential"); String credential = objectMapper.convertValue(vcCredentialResponse.getCredential(), String.class); Map jwtHeaders = parseJwtHeader(credential); String responseAlgo = (String) jwtHeaders.get("alg"); if (inputDescriptorDTO.getFormat().get(format).get("sd-jwt_alg_values") .stream().anyMatch(responseAlgo::equals)) { - log.info("SD-JWT algorithm matched: {}", responseAlgo); vpDTO = constructVerifiablePresentationStringForSDjwt(credential); } else { throw new VPNotCreatedException(ErrorConstants.INVALID_REQUEST.getErrorMessage()); } } else { - log.info("Unsupported credential format: {}, CredentialFormat.LDP_VC.getFormat().equalsIgnoreCase(format): {}", format, CredentialFormat.LDP_VC.getFormat().equalsIgnoreCase(format)); throw new VPNotCreatedException(ErrorConstants.INVALID_REQUEST.getErrorMessage()); } From 2dc359f8289cb73983d2c0f889fc63306042f667 Mon Sep 17 00:00:00 2001 From: Durgesh Konga Date: Mon, 10 Nov 2025 14:17:40 +0530 Subject: [PATCH 793/860] Injiweb 1757 (#967) * [INJIWEB-1757] Add exclusions in pom.xml for junit dependency in kernel-core, remove direct junit dependency, remove unused h2database, remove logback dependency Signed-off-by: jackjain * [INJIWEB-1757] Remove unused variables from pom.xml Signed-off-by: jackjain --------- Signed-off-by: jackjain Co-authored-by: jackjain --- pom.xml | 34 ++++++++++------------------------ 1 file changed, 10 insertions(+), 24 deletions(-) diff --git a/pom.xml b/pom.xml index 8447f75ba..f0cb7eed3 100644 --- a/pom.xml +++ b/pom.xml @@ -57,14 +57,9 @@ 3.4.0 3.4.1 - - 2.1.210 - 4.13.1 5.15.2 - - 1.2.3 2.13.2 @@ -117,6 +112,16 @@ io.mosip.kernel kernel-core 1.3.0-beta.1 + + + org.junit.vintage + junit-vintage-engine + + + junit + junit + + org.apache.logging.log4j @@ -223,10 +228,6 @@ spring-boot-starter-data-redis ${starter.redis.version} - - org.junit.vintage - junit-vintage-engine - @@ -284,27 +285,12 @@ ${junit.version} test - - com.h2database - h2 - ${h2.version} - org.slf4j slf4j-api 1.7.25 - - ch.qos.logback - logback-classic - 1.2.6 - - - ch.qos.logback - logback-core - 1.2.9 - joda-time joda-time From edcdac07d08be00d21b7a677ac21112568523f72 Mon Sep 17 00:00:00 2001 From: Durgesh Konga Date: Mon, 10 Nov 2025 17:43:18 +0530 Subject: [PATCH 794/860] [INJIWEB-1758] - Update Spring Boot version (#968) Signed-off-by: kongadurgesh --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f0cb7eed3..06d58d1ef 100644 --- a/pom.xml +++ b/pom.xml @@ -53,7 +53,7 @@ 3.6.3 - 3.3.7 + 3.3.10 3.4.0 3.4.1 From b5ddb19f897bfa5f9ea9b57ab0ae02dfa1023bcc Mon Sep 17 00:00:00 2001 From: Durgesh Konga Date: Tue, 11 Nov 2025 18:42:49 +0530 Subject: [PATCH 795/860] [INJIWEB-1757] - Remove unused dependencies (#970) * [INJIWEB-1757] - Remove unused dependencies Signed-off-by: kongadurgesh * [INJIWEB-1757] - Remove unused dependencies Signed-off-by: kongadurgesh --------- Signed-off-by: kongadurgesh --- pom.xml | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/pom.xml b/pom.xml index 06d58d1ef..68f3deff8 100644 --- a/pom.xml +++ b/pom.xml @@ -136,16 +136,6 @@ identity-credential 20231002 - - info.weboftrust - ld-signatures-java - 1.5.0 - - - decentralized-identity - jsonld-common-java - 1.8.0 - io.mosip vcverifier-jar @@ -366,14 +356,6 @@ javax.activation activation - - javax.servlet - javax.servlet-api - - - org.glassfish.jaxb - jaxb-runtime - com.itextpdf itext7-core @@ -446,6 +428,12 @@ io.mosip.kernel kernel-biometrics-api ${kernel.biometrics.api.version} + + + org.junit.vintage + junit-vintage-engine + + @@ -457,6 +445,12 @@ io.mosip.kernel kernel-cbeffutil-api ${kernel.cbeffutil.version} + + + org.junit.vintage + junit-vintage-engine + + From baf49652441284feb5c68b65a18603c86f1fd2e6 Mon Sep 17 00:00:00 2001 From: Nitin Hegde <165893206+hegdenitin@users.noreply.github.com> Date: Wed, 12 Nov 2025 10:52:45 +0530 Subject: [PATCH 796/860] Update JAR file version in README (#972) Signed-off-by: Nitin Hegde <165893206+hegdenitin@users.noreply.github.com> --- api-test/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api-test/README.md b/api-test/README.md index 53f484eb3..c39f2212f 100644 --- a/api-test/README.md +++ b/api-test/README.md @@ -96,7 +96,7 @@ To execute the tests using Jar, use the following steps: 2. Run the automation test suite JAR file: ``` - java -jar -Dmodules=mimoto -Denv.user=api-internal. -Denv.endpoint= -Denv.testLevel=smokeAndRegression -jar apitest-mimoto-0.15.0-SNAPSHOT-jar-with-dependencies.jar + java -jar -Dmodules=mimoto -Denv.user=api-internal. -Denv.endpoint= -Denv.testLevel=smokeAndRegression -jar apitest-mimoto-0.20.0-SNAPSHOT-jar-with-dependencies.jar ``` # Using Eclipse IDE From c7d7256681846e10ec9f8055999e053b17470680 Mon Sep 17 00:00:00 2001 From: Durgesh Konga Date: Wed, 12 Nov 2025 14:46:37 +0530 Subject: [PATCH 797/860] [INJIWEB-1768] - Update method names w.r.t OVP Jar (#974) * [INJIWEB-1768] - Update method names w.r.t OVP Jar Update test cases Signed-off-by: kongadurgesh * [INJIWEB-1768] - Refractor code to remove unused methods after jar changes Signed-off-by: kongadurgesh --------- Signed-off-by: kongadurgesh --- .../mimoto/service/impl/OpenID4VPService.java | 10 ++-- .../service/impl/PresentationServiceImpl.java | 35 ++------------ .../PresentationSubmissionServiceImpl.java | 19 ++------ .../mimoto/service/OpenID4VPServiceTest.java | 9 ++-- .../service/PresentationServiceTest.java | 46 +++++-------------- .../PresentationSubmissionServiceTest.java | 46 +++++++++++++------ 6 files changed, 60 insertions(+), 105 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/OpenID4VPService.java b/src/main/java/io/mosip/mimoto/service/impl/OpenID4VPService.java index 2aae59b43..499ca6f1f 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/OpenID4VPService.java +++ b/src/main/java/io/mosip/mimoto/service/impl/OpenID4VPService.java @@ -12,7 +12,7 @@ import io.mosip.openID4VP.authorizationRequest.presentationDefinition.PresentationDefinition; import io.mosip.openID4VP.constants.VPFormatType; import io.mosip.openID4VP.exceptions.OpenID4VPExceptions; -import io.mosip.openID4VP.networkManager.NetworkResponse; +import io.mosip.openID4VP.verifier.VerifierResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -67,7 +67,7 @@ public PresentationDefinition resolvePresentationDefinition(String presentationI * @throws ApiNotAccessibleException when verifier list can't be fetched * @throws IOException for underlying IO failures */ - public NetworkResponse sendErrorToVerifier(VerifiablePresentationSessionData sessionData, ErrorDTO payload) throws ApiNotAccessibleException, IOException, URISyntaxException { + public VerifierResponse sendErrorToVerifier(VerifiablePresentationSessionData sessionData, ErrorDTO payload) throws ApiNotAccessibleException, IOException, URISyntaxException { if (sessionData == null || sessionData.getPresentationId() == null || sessionData.getAuthorizationRequest() == null) { throw new IllegalArgumentException("Invalid presentation session data"); } @@ -82,8 +82,8 @@ public NetworkResponse sendErrorToVerifier(VerifiablePresentationSessionData ses AuthorizationRequest authorizationRequest = openID4VP.authenticateVerifier(sessionData.getAuthorizationRequest(), preRegisteredVerifiers, sessionData.isVerifierClientPreregistered()); OpenID4VPExceptions.AccessDenied accessDeniedException = new OpenID4VPExceptions.AccessDenied(payload.getErrorMessage(), "OpenID4VPService"); - NetworkResponse networkResponse = openID4VP.sendErrorResponseToVerifier(accessDeniedException); - log.info("Sent rejection to verifier for presentationId {}. Response: {}", sessionData.getPresentationId(), networkResponse); - return networkResponse; + VerifierResponse verifierResponse = openID4VP.sendErrorInfoToVerifier(accessDeniedException); + log.info("Sent rejection to verifier for presentationId {}. Response: {}", sessionData.getPresentationId(), verifierResponse); + return verifierResponse; } } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java index 71c77f6a7..89340ad4b 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java @@ -23,7 +23,7 @@ import io.mosip.openID4VP.authorizationRequest.Verifier; import io.mosip.openID4VP.authorizationRequest.clientMetadata.ClientMetadata; import io.mosip.mimoto.util.RestApiClient; -import io.mosip.openID4VP.networkManager.NetworkResponse; +import io.mosip.openID4VP.verifier.VerifierResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -355,44 +355,17 @@ public PresentationDefinitionDTO constructPresentationDefinition(VCCredentialRes @Override public SubmitPresentationResponseDTO rejectVerifier(String walletId, VerifiablePresentationSessionData vpSessionData, ErrorDTO payload) throws VPErrorNotSentException { try { - NetworkResponse networkResponse = openID4VPService.sendErrorToVerifier(vpSessionData, payload); - log.info("Sent rejection to verifier. Response: {}", networkResponse); - - String redirectUri = extractRedirectUriFromBody(networkResponse != null ? networkResponse.getBody() : null) - .orElse(""); + VerifierResponse verifierResponse = openID4VPService.sendErrorToVerifier(vpSessionData, payload); + log.info("Sent rejection to verifier. Response: {}", verifierResponse); SubmitPresentationResponseDTO submitPresentationResponseDTO = new SubmitPresentationResponseDTO(); submitPresentationResponseDTO.setStatus(REJECTED_VERIFIER.getErrorCode()); submitPresentationResponseDTO.setMessage(REJECTED_VERIFIER.getErrorMessage()); - submitPresentationResponseDTO.setRedirectUri(redirectUri); + submitPresentationResponseDTO.setRedirectUri(verifierResponse.getRedirectUri()); return submitPresentationResponseDTO; } catch (ApiNotAccessibleException | IOException | URISyntaxException | IllegalArgumentException e ) { log.error("Failed to send rejection to verifier for walletId: {} - Error: {}", walletId, e.getMessage(), e); throw new VPErrorNotSentException("Failed to send rejection to verifier - " + e.getMessage()); } } - - private java.util.Optional extractRedirectUriFromBody(String body) { - if (body == null || body.isBlank()) { - return java.util.Optional.empty(); - } - try { - var jsonNode = objectMapper.readTree(body); - if (jsonNode.has("redirect_uri") && jsonNode.get("redirect_uri").isTextual()) { - return java.util.Optional.of(jsonNode.get("redirect_uri").asText()); - } - @SuppressWarnings("unchecked") - Map map = objectMapper.readValue(body, Map.class); - Object ru = map.get("redirect_uri"); - if (ru instanceof String) { - return java.util.Optional.of((String) ru); - } - } catch (com.fasterxml.jackson.core.JsonProcessingException jpe) { - log.debug("Response body not valid JSON or missing redirect_uri: {}", jpe.getMessage()); - } catch (Exception ex) { - log.warn("Unexpected error while parsing response body for redirect_uri: {}", ex.getMessage(), ex); - } - return java.util.Optional.empty(); - } - } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/impl/PresentationSubmissionServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/PresentationSubmissionServiceImpl.java index 294080c2f..f749d9b3a 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/PresentationSubmissionServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/PresentationSubmissionServiceImpl.java @@ -33,9 +33,8 @@ import io.mosip.openID4VP.authorizationResponse.vpTokenSigningResult.VPTokenSigningResult; import io.mosip.openID4VP.authorizationResponse.vpTokenSigningResult.types.ldp.LdpVPTokenSigningResult; import io.mosip.openID4VP.constants.FormatType; -import io.mosip.openID4VP.networkManager.NetworkResponse; +import io.mosip.openID4VP.verifier.VerifierResponse; import lombok.extern.slf4j.Slf4j; -import org.json.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -107,13 +106,13 @@ public SubmitPresentationResponseDTO submitPresentation(VerifiablePresentationSe // Cast to the expected type for the JAR method @SuppressWarnings({"unchecked", "rawtypes"}) Map jarMap = (Map) vpTokenSigningResults; try { - NetworkResponse response = openID4VP.sendAuthorizationResponseToVerifier(jarMap); + VerifierResponse response = openID4VP.sendVPResponseToVerifier(jarMap); boolean shareSuccess = response.getStatusCode() >= 200 && response.getStatusCode() < 300; // Step 5: Store presentation record in database storePresentationRecord(walletId, presentationId, request, sessionData, shareSuccess, requestedAt); // Step 6: Return success response return SubmitPresentationResponseDTO.builder() - .redirectUri(extractRedirectUri(response.getBody())) + .redirectUri(response.getRedirectUri()) .status(shareSuccess ? OpenID4VPConstants.STATUS_SUCCESS : OpenID4VPConstants.STATUS_ERROR) .message(shareSuccess ? OpenID4VPConstants.MESSAGE_PRESENTATION_SUCCESS : OpenID4VPConstants.MESSAGE_PRESENTATION_SHARE_FAILED) .build(); @@ -493,16 +492,4 @@ private void validateInputs(SubmitPresentationRequestDTO request) { log.debug("Input validation passed for request: {}", request); } - - public String extractRedirectUri(String body) { - try { - JSONObject jsonObject = new JSONObject(body); - if (jsonObject.has("redirect_uri")) { - return jsonObject.getString("redirect_uri"); - } - } catch (Exception e) { - log.error("Cannot parse the body of response from verifier", e); - } - return null; - } } \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/OpenID4VPServiceTest.java b/src/test/java/io/mosip/mimoto/service/OpenID4VPServiceTest.java index 5157c6bd0..5be514d1c 100644 --- a/src/test/java/io/mosip/mimoto/service/OpenID4VPServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/OpenID4VPServiceTest.java @@ -10,6 +10,7 @@ import io.mosip.openID4VP.OpenID4VP; import io.mosip.openID4VP.authorizationRequest.AuthorizationRequest; import io.mosip.openID4VP.authorizationRequest.presentationDefinition.PresentationDefinition; +import io.mosip.openID4VP.verifier.VerifierResponse; import lombok.extern.slf4j.Slf4j; import org.junit.Before; import org.junit.Test; @@ -331,10 +332,10 @@ public void testSendErrorToVerifierSuccess() throws Exception { when(verifierService.getTrustedVerifiers()).thenReturn(mockVerifiersDTO); OpenID4VP mockOpenID4VP = mock(OpenID4VP.class); - NetworkResponse mockResponse = mock(NetworkResponse.class); + VerifierResponse mockResponse = mock(VerifierResponse.class); when(mockOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(mockAuthorizationRequest); - when(mockOpenID4VP.sendErrorResponseToVerifier(any())).thenReturn(mockResponse); + when(mockOpenID4VP.sendErrorInfoToVerifier(any())).thenReturn(mockResponse); OpenID4VPService spyService = spy(openID4VPService); doReturn(mockOpenID4VP).when(spyService).create(anyString()); @@ -348,14 +349,14 @@ public void testSendErrorToVerifierSuccess() throws Exception { when(payload.getErrorMessage()).thenReturn("access_denied"); // Execute - NetworkResponse response = spyService.sendErrorToVerifier(sessionData, payload); + VerifierResponse response = spyService.sendErrorToVerifier(sessionData, payload); // Verify assertNotNull(response); assertEquals(mockResponse, response); verify(verifierService).getTrustedVerifiers(); verify(mockOpenID4VP).authenticateVerifier(eq("authorization-request"), anyList(), eq(true)); - verify(mockOpenID4VP).sendErrorResponseToVerifier(any()); + verify(mockOpenID4VP).sendErrorInfoToVerifier(any()); } @Test diff --git a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java index c517eac44..05831bfec 100644 --- a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java @@ -26,7 +26,7 @@ import io.mosip.mimoto.util.TestUtilities; import io.mosip.openID4VP.OpenID4VP; import io.mosip.openID4VP.authorizationRequest.Verifier; -import io.mosip.openID4VP.networkManager.NetworkResponse; +import io.mosip.openID4VP.verifier.VerifierResponse; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -695,12 +695,16 @@ public void testRejectVerifierSuccess() throws Exception { null ); - NetworkResponse mockResponse = mock(NetworkResponse.class); + VerifierResponse mockResponse = mock(VerifierResponse.class); + when(mockResponse.getRedirectUri()).thenReturn("https://verifier.example.com/redirect"); when(openID4VPService.sendErrorToVerifier(eq(sessionData), eq(payload))).thenReturn(mockResponse); // Should not throw - presentationService.rejectVerifier(walletId, sessionData, payload); + SubmitPresentationResponseDTO result = presentationService.rejectVerifier(walletId, sessionData, payload); + assertNotNull(result); + assertEquals("https://verifier.example.com/redirect", result.getRedirectUri()); + assertEquals(REJECTED_VERIFIER.getErrorCode(), result.getStatus()); verify(openID4VPService).sendErrorToVerifier(eq(sessionData), eq(payload)); } @@ -764,7 +768,6 @@ public void testRejectVerifierNullSessionData() throws Exception { @Test public void testRejectVerifierWithDifferentErrorCodes() throws Exception { String walletId = "wallet-123"; - OpenID4VP mockOpenID4VP = mock(OpenID4VP.class); String presentationId = "presentation-789"; String authorizationRequest = "authorization-request-3"; VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData( @@ -776,42 +779,15 @@ public void testRejectVerifierWithDifferentErrorCodes() throws Exception { ); ErrorDTO payload = new ErrorDTO("interaction_required", "Interaction required from user"); - NetworkResponse mockResponse = mock(NetworkResponse.class); - when(openID4VPService.sendErrorToVerifier(eq(sessionData), eq(payload))).thenReturn(mockResponse); - - presentationService.rejectVerifier(walletId, sessionData, payload); - - verify(openID4VPService).sendErrorToVerifier(eq(sessionData), eq(payload)); - } - - @Test - public void testRejectVerifierExtractsRedirectUriFromBody() throws Exception { - String walletId = "wallet-123"; - ErrorDTO payload = new ErrorDTO("access_denied", "User denied authorization"); - - String presentationId = "presentation-999"; - String authorizationRequest = "authorization-request-xyz"; - VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData( - presentationId, - authorizationRequest, - Instant.now(), - true, - null - ); - - // Inject a real ObjectMapper so JSON parsing in extractRedirectUriFromBody works - ReflectionTestUtils.setField(presentationService, "objectMapper", new com.fasterxml.jackson.databind.ObjectMapper()); - - NetworkResponse mockResponse = mock(NetworkResponse.class); - when(mockResponse.getBody()).thenReturn("{\"redirect_uri\":\"https://verifier.example.com/success\"}"); + VerifierResponse mockResponse = mock(VerifierResponse.class); + when(mockResponse.getRedirectUri()).thenReturn("https://verifier.example.com/redirect"); when(openID4VPService.sendErrorToVerifier(eq(sessionData), eq(payload))).thenReturn(mockResponse); SubmitPresentationResponseDTO result = presentationService.rejectVerifier(walletId, sessionData, payload); assertNotNull(result); - assertEquals("https://verifier.example.com/success", result.getRedirectUri()); - assertEquals(REJECTED_VERIFIER.getErrorCode(), result.getStatus()); - assertEquals(REJECTED_VERIFIER.getErrorMessage(), result.getMessage()); + assertEquals("https://verifier.example.com/redirect", result.getRedirectUri()); + verify(openID4VPService).sendErrorToVerifier(eq(sessionData), eq(payload)); } } \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/PresentationSubmissionServiceTest.java b/src/test/java/io/mosip/mimoto/service/PresentationSubmissionServiceTest.java index 86274e6b3..4c15ae123 100644 --- a/src/test/java/io/mosip/mimoto/service/PresentationSubmissionServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/PresentationSubmissionServiceTest.java @@ -23,7 +23,7 @@ import io.mosip.openID4VP.authorizationResponse.unsignedVPToken.types.ldp.UnsignedLdpVPToken; import io.mosip.openID4VP.authorizationResponse.vpTokenSigningResult.types.ldp.LdpVPTokenSigningResult; import io.mosip.openID4VP.constants.FormatType; -import io.mosip.openID4VP.networkManager.NetworkResponse; +import io.mosip.openID4VP.verifier.VerifierResponse; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -602,18 +602,18 @@ public void testMapStringToFormatTypeNullDefaultsToLdpVc() throws Exception { @Test - public void testsendAuthorizationResponseToVerifierReturnsTrue() throws Exception { + public void testsendVPResponseToVerifierReturnsTrue() throws Exception { setupSuccessfulMocks(); SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( sessionData, walletId, presentationId, request, base64Key); assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); - verify(openID4VP).sendAuthorizationResponseToVerifier(anyMap()); + verify(openID4VP).sendVPResponseToVerifier(anyMap()); } @Test - public void testsendAuthorizationResponseToVerifierReturnsFalse() throws Exception { + public void testsendVPResponseToVerifierReturnsFalse() throws Exception { setupMocksForShareFailure(); SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( @@ -624,7 +624,7 @@ public void testsendAuthorizationResponseToVerifierReturnsFalse() throws Excepti } @Test - public void testsendAuthorizationResponseToVerifierHandlesException() throws Exception { + public void testsendVPResponseToVerifierHandlesException() throws Exception { setupMocksForShareException(); SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( @@ -757,7 +757,10 @@ private void setupSuccessfulMocks() throws Exception { .thenReturn(unsignedVPTokenMap); - when(openID4VP.sendAuthorizationResponseToVerifier(anyMap())).thenReturn(new NetworkResponse(200, "", new HashMap<>())); + VerifierResponse mockVerifierResponse = mock(VerifierResponse.class); + when(mockVerifierResponse.getStatusCode()).thenReturn(200); + when(mockVerifierResponse.getRedirectUri()).thenReturn("https://verifier.example.com/redirect"); + when(openID4VP.sendVPResponseToVerifier(anyMap())).thenReturn(mockVerifierResponse); when(objectMapper.convertValue(any(), eq(LdpVPTokenSigningResult.class))) .thenReturn(mock(LdpVPTokenSigningResult.class)); @@ -777,12 +780,15 @@ private void setupMocksUpToSigning() throws Exception { private void setupMocksForShareFailure() throws Exception { setupSuccessfulMocks(); - when(openID4VP.sendAuthorizationResponseToVerifier(anyMap())).thenReturn(new NetworkResponse(400, "", new HashMap<>())); + VerifierResponse mockVerifierResponse = mock(VerifierResponse.class); + when(mockVerifierResponse.getStatusCode()).thenReturn(400); + when(mockVerifierResponse.getRedirectUri()).thenReturn(null); + when(openID4VP.sendVPResponseToVerifier(anyMap())).thenReturn(mockVerifierResponse); } private void setupMocksForShareException() throws Exception { setupSuccessfulMocks(); - when(openID4VP.sendAuthorizationResponseToVerifier(anyMap())).thenThrow(new RuntimeException("Share failed")); + when(openID4VP.sendVPResponseToVerifier(anyMap())).thenThrow(new RuntimeException("Share failed")); } private void setupSuccessfulMocksForMsoMdoc() throws Exception { @@ -813,7 +819,10 @@ private void setupSuccessfulMocksForMsoMdoc() throws Exception { .thenReturn(mock(LdpVPTokenSigningResult.class)); when(objectMapper.writeValueAsString(any())).thenReturn("{}"); - when(openID4VP.sendAuthorizationResponseToVerifier(anyMap())).thenReturn(new NetworkResponse(200, "", new HashMap<>())); + VerifierResponse mockVerifierResponse = mock(VerifierResponse.class); + when(mockVerifierResponse.getStatusCode()).thenReturn(200); + when(mockVerifierResponse.getRedirectUri()).thenReturn("https://verifier.example.com/redirect"); + when(openID4VP.sendVPResponseToVerifier(anyMap())).thenReturn(mockVerifierResponse); when(verifiablePresentationsRepository.save(any(VerifiablePresentation.class))) .thenAnswer(invocation -> invocation.getArgument(0)); @@ -850,7 +859,10 @@ private void setupSuccessfulMocksForMixedFormats() throws Exception { .thenReturn(mock(LdpVPTokenSigningResult.class)); when(objectMapper.writeValueAsString(any())).thenReturn("{}"); - when(openID4VP.sendAuthorizationResponseToVerifier(anyMap())).thenReturn(new NetworkResponse(200, "", new HashMap<>())); + VerifierResponse mockVerifierResponse = mock(VerifierResponse.class); + when(mockVerifierResponse.getStatusCode()).thenReturn(200); + when(mockVerifierResponse.getRedirectUri()).thenReturn("https://verifier.example.com/redirect"); + when(openID4VP.sendVPResponseToVerifier(anyMap())).thenReturn(mockVerifierResponse); when(verifiablePresentationsRepository.save(any(VerifiablePresentation.class))) .thenAnswer(invocation -> invocation.getArgument(0)); @@ -1093,16 +1105,19 @@ public void testStorePresentationRecordWithNullSessionData() throws Exception { } @Test - public void testsendAuthorizationResponseToVerifierReturnsNonEmptyString() throws Exception { + public void testsendVPResponseToVerifierReturnsNonSuccessStatusCode() throws Exception { sessionData.setMatchingCredentials(createMockDecryptedCredentials()); setupSuccessfulMocks(); - when(openID4VP.sendAuthorizationResponseToVerifier(anyMap())).thenReturn(new NetworkResponse(400, "", new HashMap<>())); // non-empty string + VerifierResponse mockVerifierResponse = mock(VerifierResponse.class); + when(mockVerifierResponse.getStatusCode()).thenReturn(400); + when(mockVerifierResponse.getRedirectUri()).thenReturn(null); + when(openID4VP.sendVPResponseToVerifier(anyMap())).thenReturn(mockVerifierResponse); SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( sessionData, walletId, presentationId, request, base64Key); assertNotNull(response); - // Should return ERROR status when vpToken is not empty (sendAuthorizationResponseToVerifier returns false when non-empty) + // Should return ERROR status when status code is not in 200-299 range assertEquals(OpenID4VPConstants.STATUS_ERROR, response.getStatus()); assertEquals(OpenID4VPConstants.MESSAGE_PRESENTATION_SHARE_FAILED, response.getMessage()); } @@ -1184,7 +1199,10 @@ public void testCreatePresentationDataHandlesJsonProcessingException() throws Ex when(openID4VP.constructUnsignedVPToken(anyMap(), anyString(), anyString())) .thenReturn(unsignedVPTokenMap); - when(openID4VP.sendAuthorizationResponseToVerifier(anyMap())).thenReturn(new NetworkResponse(200, "", new HashMap<>())); + VerifierResponse mockVerifierResponse = mock(VerifierResponse.class); + when(mockVerifierResponse.getStatusCode()).thenReturn(200); + when(mockVerifierResponse.getRedirectUri()).thenReturn("https://verifier.example.com/redirect"); + when(openID4VP.sendVPResponseToVerifier(anyMap())).thenReturn(mockVerifierResponse); when(objectMapper.convertValue(any(), eq(LdpVPTokenSigningResult.class))) .thenReturn(mock(LdpVPTokenSigningResult.class)); From 11f5ae17dd6d2a069fd9f114d1fdb34b248663a3 Mon Sep 17 00:00:00 2001 From: Durgesh Konga Date: Wed, 12 Nov 2025 15:24:40 +0530 Subject: [PATCH 798/860] [INJIWEB-1756] Add URL wildcard check for datashare resource URL as per security team feedback (#975) * [INJIWEB-1756] add URL wildcard check for datashare resource URL as per security team feedback Signed-off-by: jackjain * [INJIWEB-1756] Remove additional URL decoding Signed-off-by: jackjain * [INJIWEB-1756] Remove unused imports Signed-off-by: jackjain --------- Signed-off-by: jackjain Co-authored-by: jackjain --- .../service/impl/DataShareServiceImpl.java | 55 ++++++++++++++ .../mimoto/service/DataShareServiceTest.java | 75 +++++++++++++++++++ 2 files changed, 130 insertions(+) diff --git a/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java index 7276819c1..ecd087390 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java @@ -11,6 +11,7 @@ import io.mosip.mimoto.util.RestApiClient; import jakarta.annotation.PostConstruct; import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.ByteArrayResource; @@ -22,10 +23,16 @@ import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.PathMatcher; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.regex.Pattern; + @Slf4j @Service public class DataShareServiceImpl { + private static final Pattern SAFE_URL_SEGMENT_PATTERN = Pattern.compile("^[A-Za-z0-9._\\-]+$"); + @Autowired RestApiClient restApiClient; @@ -102,6 +109,9 @@ public VCCredentialResponse downloadCredentialFromDataShare(PresentationRequest ErrorConstants.RESOURCE_INVALID.getErrorMessage()); } + validateResourceURL(credentialsResourceUri); + + // Call the API with the custom headers String vcCredentialResponseString = restApiClient.getApiWithCustomHeaders(credentialsResourceUri, String.class, customHeaders); if (vcCredentialResponseString == null) { @@ -119,4 +129,49 @@ public VCCredentialResponse downloadCredentialFromDataShare(PresentationRequest return vcCredentialResponse; } + private static void validateResourceURL(String credentialsResourceUri) { + try { + URI parsedUri = new URI(credentialsResourceUri); + String decodedURI = parsedUri.getPath(); + + String wildcardPart = getWildcardPart(decodedURI); + + if (!SAFE_URL_SEGMENT_PATTERN.matcher(wildcardPart).matches()) { + throw new InvalidCredentialResourceException( + ErrorConstants.RESOURCE_INVALID.getErrorCode(), + "Invalid characters in wildcard segment"); + } + } catch (URISyntaxException e) { + throw new InvalidCredentialResourceException( + ErrorConstants.RESOURCE_INVALID.getErrorCode(), + "Malformed resource URL"); + } + } + + @NotNull + private static String getWildcardPart(String decodedPath) { + if (decodedPath.contains("..") || decodedPath.contains("//")) { + throw new InvalidCredentialResourceException( + ErrorConstants.RESOURCE_INVALID.getErrorCode(), + "Invalid path structure in resource URL"); + } + + String[] segments = decodedPath.split("/"); + String wildcardPart; + if( segments.length == 0 ){ + throw new InvalidCredentialResourceException( + ErrorConstants.RESOURCE_INVALID.getErrorCode(), + "Invalid resource identifier in URL"); + } else { + wildcardPart = segments[segments.length - 1]; + } + + if (wildcardPart.isEmpty()) { + throw new InvalidCredentialResourceException( + ErrorConstants.RESOURCE_INVALID.getErrorCode(), + "Invalid resource identifier in URL"); + } + return wildcardPart; + } + } diff --git a/src/test/java/io/mosip/mimoto/service/DataShareServiceTest.java b/src/test/java/io/mosip/mimoto/service/DataShareServiceTest.java index 76044745b..d825e6093 100644 --- a/src/test/java/io/mosip/mimoto/service/DataShareServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/DataShareServiceTest.java @@ -140,4 +140,79 @@ public void throwResourceNotFoundExceptionWhenCredentialIsNotFoundInDataShare() assertEquals(expectedExceptionMsg, actualException.getMessage()); } + + @Test + public void throwResourceInvalidRequestExceptionWhenCredentialURLHasIllegalDirectoryCharacter() { + String expectedExceptionMsg = "invalid_resource --> Invalid path structure in resource URL"; + Mockito.when(pathMatcher.match("http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/*", "http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/te..st")).thenReturn(true); + + presentationRequestDTO.setResource("http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/te..st"); + + InvalidCredentialResourceException actualException = assertThrows(InvalidCredentialResourceException.class, () -> dataShareService.downloadCredentialFromDataShare(presentationRequestDTO)); + + assertEquals(expectedExceptionMsg, actualException.getMessage()); + } + + @Test + public void throwResourceInvalidRequestExceptionWhenCredentialURLHasIllegalForwardSlashCharacter() { + String expectedExceptionMsg = "invalid_resource --> Invalid path structure in resource URL"; + Mockito.when(pathMatcher.match("http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/*", "http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid//test")).thenReturn(true); + + presentationRequestDTO.setResource("http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid//test"); + + InvalidCredentialResourceException actualException = assertThrows(InvalidCredentialResourceException.class, () -> dataShareService.downloadCredentialFromDataShare(presentationRequestDTO)); + + assertEquals(expectedExceptionMsg, actualException.getMessage()); + } + + @Test + public void throwResourceInvalidRequestExceptionWhenCredentialURLIsMisconfiguredAndHasNoWildcard() { + String expectedExceptionMsg = "invalid_resource --> Invalid resource identifier in URL"; + ReflectionTestUtils.setField(dataShareService, "dataShareGetUrlPattern", "http://datashare.datashare/*"); + Mockito.when(pathMatcher.match("http://datashare.datashare/*", "http://datashare.datashare/")).thenReturn(true); + + presentationRequestDTO.setResource("http://datashare.datashare/"); + + InvalidCredentialResourceException actualException = assertThrows(InvalidCredentialResourceException.class, () -> dataShareService.downloadCredentialFromDataShare(presentationRequestDTO)); + + assertEquals(expectedExceptionMsg, actualException.getMessage()); + } + + @Test + public void throwResourceInvalidRequestExceptionWhenCredentialURLHasIllegalCharacters() { + String expectedExceptionMsg = "invalid_resource --> Invalid characters in wildcard segment"; + presentationRequestDTO.setResource("http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/test$"); + + Mockito.when(pathMatcher.match("http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/*", "http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/test$")).thenReturn(true); + + InvalidCredentialResourceException actualException = assertThrows(InvalidCredentialResourceException.class, () -> dataShareService.downloadCredentialFromDataShare(presentationRequestDTO)); + + assertEquals(expectedExceptionMsg, actualException.getMessage()); + } + + @Test + public void throwResourceInvalidRequestExceptionWhenCredentialURLIsMalformed() { + String expectedExceptionMsg = "invalid_resource --> Malformed resource URL"; + presentationRequestDTO.setResource("http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/%%illegal"); + + Mockito.when(pathMatcher.match("http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/*", "http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/%%illegal")).thenReturn(true); + + InvalidCredentialResourceException actualException = assertThrows(InvalidCredentialResourceException.class, () -> dataShareService.downloadCredentialFromDataShare(presentationRequestDTO)); + + assertEquals(expectedExceptionMsg, actualException.getMessage()); + } + + @Test + public void throwResourceInvalidRequestExceptionWhenCredentialURLHasDoubleEncodedPathTraversal() { + String expectedExceptionMsg = "invalid_resource --> Invalid characters in wildcard segment"; + presentationRequestDTO.setResource("http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/%252e%252e"); + + Mockito.when(pathMatcher.match("http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/*", + "http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/%252e%252e")).thenReturn(true); + + InvalidCredentialResourceException actualException = assertThrows(InvalidCredentialResourceException.class, + () -> dataShareService.downloadCredentialFromDataShare(presentationRequestDTO)); + + assertEquals(expectedExceptionMsg, actualException.getMessage()); + } } From 3ace9df1939773a64e6faea207b3188cf8e67d57 Mon Sep 17 00:00:00 2001 From: cyber-titan Date: Thu, 27 Nov 2025 09:44:55 +0530 Subject: [PATCH 799/860] Injiweb 1671 credential subject opt (#973) * injiweb-1671 made credSub opt for ldp_vc Signed-off-by: cyber-titan * injiweb-1671-credSub-optional updated fix for sdjwt & testcases Signed-off-by: cyber-titan * injiweb-1671-credSub-optional removed display credSub logic Signed-off-by: cyber-titan * injiweb-1671-credSub-optional removed id field from sd-jwt Signed-off-by: cyber-titan * injiweb-1671-credSub-optional added fix for missing keys in order Signed-off-by: cyber-titan * injiweb-1671-credentialSubject-opt removed id from credential keys Signed-off-by: cyber-titan --------- Signed-off-by: cyber-titan --- .../CredentialDefinitionResponseDto.java | 1 - .../CredentialIssuerDisplayResponse.java | 2 - .../impl/LdpVcCredentialFormatHandler.java | 51 ++++++++-- .../impl/VcSdJwtCredentialFormatHandler.java | 60 ++++++++--- .../LdpVcCredentialFormatHandlerTest.java | 99 +++++++++++++++++-- .../VcSdJwtCredentialFormatHandlerTest.java | 98 ++++++++++++++++++ ...lIssuerWellknownResponseValidatorTest.java | 9 +- 7 files changed, 284 insertions(+), 36 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDefinitionResponseDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDefinitionResponseDto.java index 0f2fabaf0..abb63e359 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDefinitionResponseDto.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialDefinitionResponseDto.java @@ -19,7 +19,6 @@ public class CredentialDefinitionResponseDto { @Schema(description = "Type of the Credential Definition") private List<@NotEmpty String> type; - @NotEmpty @Valid @SerializedName("credentialSubject") @JsonProperty("credentialSubject") diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerDisplayResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerDisplayResponse.java index cff8eb93f..0a8a13b41 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerDisplayResponse.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerDisplayResponse.java @@ -9,13 +9,11 @@ @Data public class CredentialIssuerDisplayResponse { - @NotBlank @SerializedName("name") @JsonProperty("name") @Schema(description = "Name of the Credential Issuer") private String name; - @NotBlank @SerializedName("locale") @JsonProperty("locale") @Schema(description = "Locale of the Credential Issuer") diff --git a/src/main/java/io/mosip/mimoto/service/impl/LdpVcCredentialFormatHandler.java b/src/main/java/io/mosip/mimoto/service/impl/LdpVcCredentialFormatHandler.java index 26b5209f8..43efba9f2 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/LdpVcCredentialFormatHandler.java +++ b/src/main/java/io/mosip/mimoto/service/impl/LdpVcCredentialFormatHandler.java @@ -74,22 +74,24 @@ public LinkedHashMap> loadD String userLocale) { LinkedHashMap> displayProperties = new LinkedHashMap<>(); + Set orderedKeys = Optional.ofNullable(credentialsSupportedResponse.getOrder()) + .map(LinkedHashSet::new) // preserve order + .orElse(new LinkedHashSet<>()); + + // Add remaining keys from credentialProperties that are not already in orderedKeys + for (String key : credentialProperties.keySet()) { + orderedKeys.add(key); + } // LDP VC format — display config is in "credential_definition.credential_subject" if (credentialsSupportedResponse.getCredentialDefinition() == null || credentialsSupportedResponse.getCredentialDefinition().getCredentialSubject() == null) { - log.warn("Missing credential definition or credential subject for LDP VC format"); - return displayProperties; + log.info("Issuer well-known has no credential definition or credential subject for LDP VC format; falling back to claim-based display properties"); + return buildFallbackDisplayProperties(credentialProperties, new ArrayList<>(orderedKeys)); } Map displayConfigMap = credentialsSupportedResponse.getCredentialDefinition().getCredentialSubject(); - List orderedKeys = credentialsSupportedResponse.getOrder(); - - if (displayConfigMap == null) { - log.warn("No display configuration found for LDP VC format"); - return displayProperties; - } String resolvedLocale = LocaleUtils.resolveLocaleWithFallback(displayConfigMap, userLocale); @@ -107,7 +109,7 @@ public LinkedHashMap> loadD addFallbackDisplayProperties(credentialProperties, localizedDisplayMap, resolvedLocale); List fieldKeys = (orderedKeys != null && !orderedKeys.isEmpty()) - ? orderedKeys + ? new ArrayList<>(orderedKeys) : new ArrayList<>(localizedDisplayMap.keySet()); for (String key : fieldKeys) { @@ -120,4 +122,35 @@ public LinkedHashMap> loadD return displayProperties; } + + private LinkedHashMap> buildFallbackDisplayProperties( + Map credentialProperties, + List orderedKeys) { + + LinkedHashMap> displayProperties = new LinkedHashMap<>(); + + // Determine field order (prefer issuer-provided 'order' if any) + List fieldKeys = (orderedKeys != null && !orderedKeys.isEmpty()) + ? new ArrayList<>(orderedKeys) + : new ArrayList<>(credentialProperties.keySet()); + + // Exclude non-claim metadata + fieldKeys.remove("id"); + + // Build default display entries from claims + for (String key : fieldKeys) { + Object value = credentialProperties.get(key); + if (value == null) { + continue; + } + + // Generate fallback display using vc keys + CredentialIssuerDisplayResponse display = new CredentialIssuerDisplayResponse(); + display.setName(camelToTitleCase(key)); + display.setLocale("en"); + + displayProperties.put(key, Map.of(display, value)); + } + return displayProperties; + } } diff --git a/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java b/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java index f3a522dce..72d720883 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java +++ b/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java @@ -55,6 +55,21 @@ public LinkedHashMap> loadD LinkedHashMap> displayProperties = new LinkedHashMap<>(); + // Start with ordered fields + Set orderedKeys = Optional.ofNullable(credentialsSupportedResponse.getOrder()) + .map(LinkedHashSet::new) // preserve order + .orElse(new LinkedHashSet<>()); + + // Add remaining keys from credentialProperties that are not already in orderedKeys + for (String key : credentialProperties.keySet()) { + orderedKeys.add(key); // Set ensures no duplicates + } + + if (credentialsSupportedResponse.getClaims() == null || credentialsSupportedResponse.getClaims().isEmpty()) { + log.info("Issuer well-known has no claims for SD-JWT format; falling back to claim-based display properties"); + return buildFallbackDisplayProperties(credentialProperties, orderedKeys); + } + // Extract raw claims and convert to DTOs Map rawClaims = Optional.ofNullable(credentialsSupportedResponse.getClaims()) .map(map -> (map.size() == 1 && map.values().iterator().next() instanceof Map) @@ -69,7 +84,8 @@ public LinkedHashMap> loadD )); if (convertedClaimsMap.isEmpty()) { - log.warn("No display configuration found for SD-JWT format"); + log.info("No display configuration found for SD-JWT format"); + return buildFallbackDisplayProperties(credentialProperties, orderedKeys); } String resolvedLocale = LocaleUtils.resolveLocaleWithFallback(convertedClaimsMap, userLocale); @@ -84,16 +100,6 @@ public LinkedHashMap> loadD }); } - // Start with ordered fields - Set orderedKeys = Optional.ofNullable(credentialsSupportedResponse.getOrder()) - .map(LinkedHashSet::new) // preserve order - .orElse(new LinkedHashSet<>()); - - // Add remaining keys from credentialProperties that are not already in orderedKeys - for (String key : credentialProperties.keySet()) { - orderedKeys.add(key); // Set ensures no duplicates - } - for (String key : orderedKeys) { Object value = credentialProperties.get(key); if (value == null) { @@ -120,7 +126,7 @@ public LinkedHashMap> loadD public Map extractClaimsFromSdJwt(String sdJwtString) { try { SDJWT sdJwt = SDJWT.parse(sdJwtString); - Map claims = new HashMap<>(); + Map claims = new LinkedHashMap<>(); // Parse JWT payload String credentialJwt = sdJwt.getCredentialJwt(); @@ -149,7 +155,7 @@ public Map extractClaimsFromSdJwt(String sdJwtString) { } // Remove standard JWT claims and SD-JWT metadata - List metadataKeys = Arrays.asList("vct", "cnf", "iss", "sub", "aud", "exp", "nbf", "iat", "jti", "_sd", "_sd_alg"); + List metadataKeys = Arrays.asList("vct", "cnf", "iss", "sub", "aud", "exp", "nbf", "iat", "jti", "_sd", "_sd_alg", "id"); metadataKeys.forEach(claims::remove); // Return claims directly as result @@ -163,4 +169,32 @@ public Map extractClaimsFromSdJwt(String sdJwtString) { return Collections.emptyMap(); } } + + private LinkedHashMap> buildFallbackDisplayProperties( + Map credentialProperties, + Set orderedKeys) { + + LinkedHashMap> displayProperties = new LinkedHashMap<>(); + + // Use ordered keys from parameter (already includes all fields) + List fieldKeys = new ArrayList<>(orderedKeys); + + fieldKeys.remove("id"); + + // Build default display entries from claims + for (String key : fieldKeys) { + Object value = credentialProperties.get(key); + if (value == null) { + continue; + } + + // Generate fallback display using claims keys + CredentialIssuerDisplayResponse display = new CredentialIssuerDisplayResponse(); + display.setName(camelToTitleCase(key)); + display.setLocale("en"); + + displayProperties.put(key, Map.of(display, value)); + } + return displayProperties; + } } \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/LdpVcCredentialFormatHandlerTest.java b/src/test/java/io/mosip/mimoto/service/LdpVcCredentialFormatHandlerTest.java index a8901f206..371f46fa9 100644 --- a/src/test/java/io/mosip/mimoto/service/LdpVcCredentialFormatHandlerTest.java +++ b/src/test/java/io/mosip/mimoto/service/LdpVcCredentialFormatHandlerTest.java @@ -140,9 +140,14 @@ void loadDisplayPropertiesFromWellknownWithNullCredentialDefinitionShouldReturnE ldpVcCredentialFormatHandler.loadDisplayPropertiesFromWellknown( credentialProperties, credentialsSupportedResponse, "en"); - // Then + // Then - now returns fallback for firstName assertNotNull(result); - assertTrue(result.isEmpty()); + assertEquals(1, result.size()); + assertTrue(result.containsKey("firstName")); + + CredentialIssuerDisplayResponse display = result.get("firstName").keySet().iterator().next(); + assertEquals("First Name", display.getName()); + assertEquals("en", display.getLocale()); } @Test @@ -159,9 +164,14 @@ void loadDisplayPropertiesFromWellknownWithNullCredentialSubjectShouldReturnEmpt ldpVcCredentialFormatHandler.loadDisplayPropertiesFromWellknown( credentialProperties, credentialsSupportedResponse, "en"); - // Then + // Then - now returns fallback for firstName assertNotNull(result); - assertTrue(result.isEmpty()); + assertEquals(1, result.size()); + assertTrue(result.containsKey("firstName")); + + CredentialIssuerDisplayResponse display = result.get("firstName").keySet().iterator().next(); + assertEquals("First Name", display.getName()); + assertEquals("en", display.getLocale()); } @Test @@ -178,9 +188,14 @@ void loadDisplayPropertiesFromWellknownWithNullDisplayConfigMapShouldReturnEmpty ldpVcCredentialFormatHandler.loadDisplayPropertiesFromWellknown( credentialProperties, credentialsSupportedResponse, "en"); - // Then + // Then - now returns fallback for firstName assertNotNull(result); - assertTrue(result.isEmpty()); + assertEquals(1, result.size()); + assertTrue(result.containsKey("firstName")); + + CredentialIssuerDisplayResponse display = result.get("firstName").keySet().iterator().next(); + assertEquals("First Name", display.getName()); + assertEquals("en", display.getLocale()); } @Test @@ -485,4 +500,76 @@ void loadDisplayPropertiesFromWellknownWithFullNameScenario() { assertEquals("en", mobileDisplay.getLocale()); } } + + @Test + void buildFallbackDisplayPropertiesWithOrderedKeysShouldRespectOrder() { + // Given + Map credentialProperties = new HashMap<>(); + credentialProperties.put("firstName", "John"); + credentialProperties.put("lastName", "Doe"); + credentialProperties.put("email", "john@example.com"); + + List orderedKeys = Arrays.asList("email", "lastName", "firstName"); + credentialsSupportedResponse.setOrder(orderedKeys); + credentialsSupportedResponse.setCredentialDefinition(null); // Trigger fallback + + // When + LinkedHashMap> result = + ldpVcCredentialFormatHandler.loadDisplayPropertiesFromWellknown( + credentialProperties, credentialsSupportedResponse, "en"); + + // Then + assertNotNull(result); + assertEquals(3, result.size()); + + // Verify order is preserved + List resultKeys = new ArrayList<>(result.keySet()); + assertEquals("email", resultKeys.get(0)); + assertEquals("lastName", resultKeys.get(1)); + assertEquals("firstName", resultKeys.get(2)); + } + + @Test + void buildFallbackDisplayPropertiesWithNullValuesShouldSkipFields() { + // Given + Map credentialProperties = new HashMap<>(); + credentialProperties.put("firstName", "John"); + credentialProperties.put("middleName", null); + credentialProperties.put("lastName", "Doe"); + + credentialsSupportedResponse.setCredentialDefinition(null); + + // When + LinkedHashMap> result = + ldpVcCredentialFormatHandler.loadDisplayPropertiesFromWellknown( + credentialProperties, credentialsSupportedResponse, "en"); + + // Then + assertNotNull(result); + assertEquals(2, result.size()); // middleName should be skipped + assertTrue(result.containsKey("firstName")); + assertTrue(result.containsKey("lastName")); + assertFalse(result.containsKey("middleName")); + } + + @Test + void buildFallbackDisplayPropertiesWithIdFieldShouldExcludeIt() { + // Given + Map credentialProperties = new HashMap<>(); + credentialProperties.put("id", "12345"); + credentialProperties.put("firstName", "John"); + + credentialsSupportedResponse.setCredentialDefinition(null); + + // When + LinkedHashMap> result = + ldpVcCredentialFormatHandler.loadDisplayPropertiesFromWellknown( + credentialProperties, credentialsSupportedResponse, "en"); + + // Then + assertNotNull(result); + assertEquals(1, result.size()); + assertFalse(result.containsKey("id")); // id should be excluded + assertTrue(result.containsKey("firstName")); + } } diff --git a/src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java b/src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java index be4238fe8..38a44211d 100644 --- a/src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java +++ b/src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java @@ -454,6 +454,104 @@ void getSupportedFormatShouldReturnCorrectFormat() { assertEquals(CredentialFormat.VC_SD_JWT.getFormat(), result); } + @Test + void buildFallbackDisplayPropertiesWithOrderedKeysShouldRespectOrder() { + // Given + Map credentialProperties = new HashMap<>(); + credentialProperties.put("firstName", "John"); + credentialProperties.put("lastName", "Doe"); + credentialProperties.put("email", "john@example.com"); + + List orderedKeys = Arrays.asList("email", "lastName", "firstName"); + credentialsSupportedResponse.setOrder(orderedKeys); + credentialsSupportedResponse.setClaims(null); // Trigger fallback + + // When + LinkedHashMap> result = + vcSdJwtCredentialFormatHandler.loadDisplayPropertiesFromWellknown( + credentialProperties, credentialsSupportedResponse, "en"); + + // Then + assertNotNull(result); + assertEquals(3, result.size()); + + // Verify order is preserved + List resultKeys = new ArrayList<>(result.keySet()); + assertEquals("email", resultKeys.get(0)); + assertEquals("lastName", resultKeys.get(1)); + assertEquals("firstName", resultKeys.get(2)); + } + + @Test + void buildFallbackDisplayPropertiesWithNullValuesShouldSkipFields() { + // Given + Map credentialProperties = new HashMap<>(); + credentialProperties.put("firstName", "John"); + credentialProperties.put("middleName", null); + credentialProperties.put("lastName", "Doe"); + + credentialsSupportedResponse.setClaims(null); + + // When + LinkedHashMap> result = + vcSdJwtCredentialFormatHandler.loadDisplayPropertiesFromWellknown( + credentialProperties, credentialsSupportedResponse, "en"); + + // Then + assertNotNull(result); + assertEquals(2, result.size()); // middleName should be skipped + assertTrue(result.containsKey("firstName")); + assertTrue(result.containsKey("lastName")); + assertFalse(result.containsKey("middleName")); + } + + @Test + void buildFallbackDisplayPropertiesWithIdFieldShouldExcludeIt() { + // Given + Map credentialProperties = new LinkedHashMap<>(); + credentialProperties.put("id", "12345"); + credentialProperties.put("firstName", "John"); + + credentialsSupportedResponse.setClaims(null); + + // When + LinkedHashMap> result = + vcSdJwtCredentialFormatHandler.loadDisplayPropertiesFromWellknown( + credentialProperties, credentialsSupportedResponse, "en"); + + // Then + assertNotNull(result); + assertEquals(1, result.size()); + assertTrue(result.containsKey("firstName")); + } + + @Test + void buildFallbackDisplayPropertiesWithEmptyClaimsShouldTriggerFallback() { + // Given + Map credentialProperties = new HashMap<>(); + credentialProperties.put("firstName", "John"); + credentialProperties.put("lastName", "Doe"); + + credentialsSupportedResponse.setClaims(new HashMap<>()); // Empty claims + + // When + LinkedHashMap> result = + vcSdJwtCredentialFormatHandler.loadDisplayPropertiesFromWellknown( + credentialProperties, credentialsSupportedResponse, "en"); + + // Then + assertNotNull(result); + assertEquals(2, result.size()); + + CredentialIssuerDisplayResponse firstNameDisplay = result.get("firstName").keySet().iterator().next(); + assertEquals("First Name", firstNameDisplay.getName()); + assertEquals("en", firstNameDisplay.getLocale()); + + CredentialIssuerDisplayResponse lastNameDisplay = result.get("lastName").keySet().iterator().next(); + assertEquals("Last Name", lastNameDisplay.getName()); + assertEquals("en", lastNameDisplay.getLocale()); + } + // Helper methods private Map createSampleClaims() { Map claims = new HashMap<>(); diff --git a/src/test/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidatorTest.java b/src/test/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidatorTest.java index 988d6ab58..f17db94c4 100644 --- a/src/test/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidatorTest.java +++ b/src/test/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidatorTest.java @@ -282,11 +282,10 @@ void shouldDetectMissingMandatoryFieldsOfCredentialDefinitionInWellknownResponse credentialIssuerWellknownResponseValidator.validate(response, validator) ); - assertTrue(Arrays.stream(invalidWellknownResponseException.getMessage().split("\n")).toList().containsAll(Arrays.stream(""" - RESIDENT-APP-041 --> Invalid Wellknown from Issuer - Validation failed: - type: must not be empty - credentialSubject: must not be empty""".split("\n")).toList())); + // Update to check message contains validation errors + String message = invalidWellknownResponseException.getMessage(); + assertTrue(message.contains("RESIDENT-APP-041 --> Invalid Wellknown from Issuer")); + assertTrue(message.contains("type: must not be empty")); } @Test From 4caa2620a87fbd0cf418d9d858197ce8b85e0b07 Mon Sep 17 00:00:00 2001 From: Durgesh Konga Date: Tue, 2 Dec 2025 12:32:45 +0530 Subject: [PATCH 800/860] Injiweb 1795 sync develop with release branch changes (#987) * [INJIWEB-1780] Change redirect url fetching logic in datashare direct-post response mode to handle redirect_uri coming in from /vp-submission response (#978) Signed-off-by: jackjain Signed-off-by: kongadurgesh * [INJIWEB-1779] - Update Service Class Implementations, Rename DTOs, Update Utils Classes, Update Test files (#977) * [INJIWEB-1779] - Fix PR Review comments Signed-off-by: kongadurgesh * [INJIWEB-1779] - update default configuration in trusted verifiers json Signed-off-by: kongadurgesh * [INJIWEB-1779] - Add 0.19.1 to 0.19.2 upgrade and rollback scripts Signed-off-by: kongadurgesh * [INJIWEB-1779] - Merge WalletPresentationService classes into Single Class Remove redundant code for other VC formats except LPC_VC Update Test Cases Signed-off-by: kongadurgesh * [INJIWEB-1779] - Rename VPAuthorizationRequest to VPAuthorizationRequestDTO Signed-off-by: kongadurgesh * [INJIWEB-1779] - Rename VPAuthorizationRequest to VPAuthorizationRequestDTO Signed-off-by: kongadurgesh * [INJIWEB-1779] - Update KeyPairService to KeyPairRetievalService and KeyPairServiceImpl to KeyPairRetievalServiceImpl Signed-off-by: kongadurgesh * [INJIWEB-1779] - Update WalletPresentationController and WalletPresentationService Signed-off-by: kongadurgesh --------- Signed-off-by: kongadurgesh * [INJIWEB-1779] - Update Encoding Decoding Logic to Jar Utils (#979) Remove Base64Util and Test Update WalletPresentationServiceTest references Signed-off-by: kongadurgesh * [INJIWEB-1770] Fix credential display name and add proper description to id field in api docs (#982) Signed-off-by: jackjain Signed-off-by: kongadurgesh * [INJIWEB-1795] - Update mimoto version to 0.21.0 Signed-off-by: kongadurgesh --------- Signed-off-by: jackjain Signed-off-by: kongadurgesh Co-authored-by: Jack --- .talismanrc | 18 +- .../sql/0.19.1_to_0.19.2_rollback.sql | 0 .../sql/0.19.1_to_0.19.2_upgrade.sql | 0 ...back.sql => 0.19.2_to_0.20.0_rollback.sql} | 4 +- ...grade.sql => 0.19.2_to_0.20.0_upgrade.sql} | 0 docs/api-documentation-openapi.json | 6 +- pom.xml | 2 +- .../mimoto/constant/OpenID4VPConstants.java | 10 +- .../constant/SwaggerLiteralConstants.java | 56 + .../WalletCredentialsController.java | 8 + .../WalletPresentationsController.java | 89 +- .../WalletTrustedVerifiersController.java | 2 +- ...eCredentialDTO.java => CredentialDTO.java} | 3 +- ...taDTO.java => MatchingCredentialsDTO.java} | 2 +- .../dto/MatchingCredentialsResponseDTO.java | 2 +- .../io/mosip/mimoto/dto/MatchingResult.java | 18 - ...st.java => VPAuthorizationRequestDTO.java} | 2 +- ...ionResponseDTO.java => VPResponseDTO.java} | 2 +- .../service/CredentialMatchingService.java | 4 +- ...vice.java => KeyPairRetrievalService.java} | 2 +- .../mimoto/service/PresentationService.java | 9 - .../service/WalletPresentationService.java | 22 + .../impl/CredentialMatchingServiceImpl.java | 31 +- .../impl/CredentialRequestServiceImpl.java | 4 +- ....java => KeyPairRetrievalServiceImpl.java} | 4 +- .../impl/PresentationActionServiceImpl.java | 122 -- .../service/impl/PresentationServiceImpl.java | 225 +-- .../PresentationSubmissionServiceImpl.java | 495 ------- .../service/impl/VerifierServiceImpl.java | 6 +- .../impl/WalletPresentationServiceImpl.java | 519 +++++++ .../java/io/mosip/mimoto/util/Base64Util.java | 188 --- .../mimoto/util/EncryptionDecryptionUtil.java | 48 +- .../mosip/mimoto/util/UrlParameterUtils.java | 16 +- .../resources/application-local.properties | 8 +- .../resources/mimoto-trusted-verifiers.json | 4 +- .../WalletPresentationsControllerTest.java | 74 +- .../CredentialMatchingServiceTest.java | 93 +- .../service/CredentialRequestServiceTest.java | 2 +- .../mimoto/service/KeyPairServiceTest.java | 4 +- .../PresentationActionServiceTest.java | 357 ----- .../service/PresentationServiceTest.java | 212 +-- .../PresentationSubmissionServiceTest.java | 1268 ----------------- .../WalletPresentationServiceTest.java | 1146 +++++++++++++++ .../io/mosip/mimoto/util/Base64UtilTest.java | 611 -------- .../io/mosip/mimoto/util/TestUtilities.java | 4 +- .../mimoto/util/UrlParameterUtilsTest.java | 148 +- 46 files changed, 2128 insertions(+), 3722 deletions(-) create mode 100644 db_upgrade_script/inji_mimoto/sql/0.19.1_to_0.19.2_rollback.sql create mode 100644 db_upgrade_script/inji_mimoto/sql/0.19.1_to_0.19.2_upgrade.sql rename db_upgrade_script/inji_mimoto/sql/{0.19.1_to_0.20.0_rollback.sql => 0.19.2_to_0.20.0_rollback.sql} (91%) rename db_upgrade_script/inji_mimoto/sql/{0.19.1_to_0.20.0_upgrade.sql => 0.19.2_to_0.20.0_upgrade.sql} (100%) rename src/main/java/io/mosip/mimoto/dto/{SelectableCredentialDTO.java => CredentialDTO.java} (95%) rename src/main/java/io/mosip/mimoto/dto/{MatchingCredentialsWithWalletDataDTO.java => MatchingCredentialsDTO.java} (92%) delete mode 100644 src/main/java/io/mosip/mimoto/dto/MatchingResult.java rename src/main/java/io/mosip/mimoto/dto/{VerifiablePresentationAuthorizationRequest.java => VPAuthorizationRequestDTO.java} (63%) rename src/main/java/io/mosip/mimoto/dto/{VerifiablePresentationResponseDTO.java => VPResponseDTO.java} (91%) rename src/main/java/io/mosip/mimoto/service/{KeyPairService.java => KeyPairRetrievalService.java} (95%) create mode 100644 src/main/java/io/mosip/mimoto/service/WalletPresentationService.java rename src/main/java/io/mosip/mimoto/service/impl/{KeyPairServiceImpl.java => KeyPairRetrievalServiceImpl.java} (96%) delete mode 100644 src/main/java/io/mosip/mimoto/service/impl/PresentationActionServiceImpl.java delete mode 100644 src/main/java/io/mosip/mimoto/service/impl/PresentationSubmissionServiceImpl.java create mode 100644 src/main/java/io/mosip/mimoto/service/impl/WalletPresentationServiceImpl.java delete mode 100644 src/main/java/io/mosip/mimoto/util/Base64Util.java delete mode 100644 src/test/java/io/mosip/mimoto/service/PresentationActionServiceTest.java delete mode 100644 src/test/java/io/mosip/mimoto/service/PresentationSubmissionServiceTest.java create mode 100644 src/test/java/io/mosip/mimoto/service/WalletPresentationServiceTest.java delete mode 100644 src/test/java/io/mosip/mimoto/util/Base64UtilTest.java diff --git a/.talismanrc b/.talismanrc index 4bb07e1ae..b052fba27 100644 --- a/.talismanrc +++ b/.talismanrc @@ -122,7 +122,7 @@ fileignoreconfig: - filename: src/main/resources/application-default.properties checksum: 05110c9a04d4b8013c15d4c9294ebe589f00d1917be3e9b9f40996974c6cba3a - filename: src/main/resources/application-local.properties - checksum: 9f28cff2323b911e29d62510e11e68662fde473adb96dff0cc65409d80c6d828 + checksum: ebb1d0c711bd6c2fec344a1a50786dbe46f06916419198546077a975e67d3933 - filename: docker-compose/config/mimoto-default.properties checksum: 7fefcbd53ef6f34696c96be682dbb0d2d5535cea337d3ccb60f85a9cb9805cd1 - filename: README.md @@ -159,13 +159,13 @@ fileignoreconfig: - filename: src/main/java/io/mosip/mimoto/util/ClientValidationUtils.java checksum: ef0cb7c9f0295ad7b5f25f4a73c998f55b2ed847922527929860b75eead7103c - filename: src/main/java/io/mosip/mimoto/service/PresentationService.java - checksum: 3c08b0732807ca7cd2b3d73e2c5a1ecefb6a45e4dc9de70139c96b2563cd46a6 + checksum: 9053ee654c595c0dd6087ab7284e57da20746734a4a02dca2c04d5fe42f061e6 - filename: src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java - checksum: b1c08308c2382634cf9c74cd6dbebdd2ea7b1b9842d04747d36b92e2908fd411 + checksum: 9053ee654c595c0dd6087ab7284e57da20746734a4a02dca2c04d5fe42f061e6 - filename: src/main/java/io/mosip/mimoto/service/CredentialMatchingService.java - checksum: 688825bedb86334f4909812e95ddb6e46cbfa6b4c7a9599bfe48608843d129df + checksum: b2ceada5c81b9dadb6e7780604c68b7ae2d4272d2f67442fab0f5a45bd33727e - filename: src/main/java/io/mosip/mimoto/service/impl/CredentialMatchingServiceImpl.java - checksum: 8066a922aa4683d182864bdb375936bb933c5813592e13d7073a712c654eaccb + checksum: 1a353f792fdc393262ea2c3cf539f12277929e1f89456564a8c3ae31a378f678 - filename: src/test/java/io/mosip/mimoto/service/CredentialMatchingServiceTest.java checksum: b1323c5b2d2209440ff2d4705d72d67cf93f3a790ef1a4bdeccc5c557686bd85 - filename: src/test/java/io/mosip/mimoto/service/SessionManagerTest.java @@ -196,4 +196,12 @@ fileignoreconfig: checksum: fabe688963b37c6b479b289f9e988107dc76358a1ea57b9aeee150c02bc4c9a2 - filename: docker-compose/mimoto_init.sql checksum: 14ac202ae6b04f89b61708ea81bbc59a1819ad164800d0d016c1f6051e68a0d6 +- filename: src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java + checksum: 34db30e6de4ea8e9eb939b584293284a5aef702d681116185467103669c0604a +- filename: src/test/java/io/mosip/mimoto/service/WalletPresentationServiceTest.java + checksum: 85c68b90c7aa05655dbb2ef95ab20fe21c59c0f98a817be6766c31fde82475ae +- filename: src/main/java/io/mosip/mimoto/service/WalletPresentationService.java + checksum: f533f57817732d29d33338ee67fed3af74a6c3492d2539d0b36152ec6822d9a3 +- filename: src/main/java/io/mosip/mimoto/service/impl/WalletPresentationServiceImpl.java + checksum: 273142b1d86eeea43034c17265459707c9c487b37c63fe28b48916a44189944f version: "" \ No newline at end of file diff --git a/db_upgrade_script/inji_mimoto/sql/0.19.1_to_0.19.2_rollback.sql b/db_upgrade_script/inji_mimoto/sql/0.19.1_to_0.19.2_rollback.sql new file mode 100644 index 000000000..e69de29bb diff --git a/db_upgrade_script/inji_mimoto/sql/0.19.1_to_0.19.2_upgrade.sql b/db_upgrade_script/inji_mimoto/sql/0.19.1_to_0.19.2_upgrade.sql new file mode 100644 index 000000000..e69de29bb diff --git a/db_upgrade_script/inji_mimoto/sql/0.19.1_to_0.20.0_rollback.sql b/db_upgrade_script/inji_mimoto/sql/0.19.2_to_0.20.0_rollback.sql similarity index 91% rename from db_upgrade_script/inji_mimoto/sql/0.19.1_to_0.20.0_rollback.sql rename to db_upgrade_script/inji_mimoto/sql/0.19.2_to_0.20.0_rollback.sql index eadd07e91..e877ec237 100644 --- a/db_upgrade_script/inji_mimoto/sql/0.19.1_to_0.20.0_rollback.sql +++ b/db_upgrade_script/inji_mimoto/sql/0.19.2_to_0.20.0_rollback.sql @@ -15,7 +15,7 @@ -- ------------------------------------ -- Drop table for trusted_verifiers -DROP TABLE trusted_verifiers; +DROP TABLE IF EXISTS trusted_verifiers; -- Drop table for verifiable_presentations -DROP TABLE verifiable_presentations; \ No newline at end of file +DROP TABLE IF EXISTS verifiable_presentations; \ No newline at end of file diff --git a/db_upgrade_script/inji_mimoto/sql/0.19.1_to_0.20.0_upgrade.sql b/db_upgrade_script/inji_mimoto/sql/0.19.2_to_0.20.0_upgrade.sql similarity index 100% rename from db_upgrade_script/inji_mimoto/sql/0.19.1_to_0.20.0_upgrade.sql rename to db_upgrade_script/inji_mimoto/sql/0.19.2_to_0.20.0_upgrade.sql diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index 8e59dd0ce..383ef4644 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -4391,7 +4391,7 @@ "availableCredentials": [ { "credentialId": "cred-123", - "credentialTypeDisplayName": "Mock Verifiable Credential (SD-JWT)", + "credentialTypeDisplayName": "W3C VC", "credentialTypeLogo": "https://mosip.github.io/inji-config/logos/mosipid-logo.png", "format": "ldp_vc" } @@ -4523,7 +4523,7 @@ "examples": { "Success response": { "value": { - "id": "uuid" + "id": "2d598dfc-7218-cb7a7afd5a07" } } } @@ -5265,7 +5265,7 @@ "properties": { "id": { "type": "string", - "description": "UUID of the trusted verifier" + "description": "Unique ID generated after creating database record for the verifier" } }, "required": [ diff --git a/pom.xml b/pom.xml index 68f3deff8..df4b8fd3b 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 io.mosip mimoto - 0.20.0-SNAPSHOT + 0.21.0-SNAPSHOT mimoto https://github.com/mosip/mimoto Mobile server backend supporting Inji. diff --git a/src/main/java/io/mosip/mimoto/constant/OpenID4VPConstants.java b/src/main/java/io/mosip/mimoto/constant/OpenID4VPConstants.java index e296c15f4..0a8fc201e 100644 --- a/src/main/java/io/mosip/mimoto/constant/OpenID4VPConstants.java +++ b/src/main/java/io/mosip/mimoto/constant/OpenID4VPConstants.java @@ -37,12 +37,6 @@ public class OpenID4VPConstants { // MSO_MDOC specific keys public static final String DOC_TYPE_TO_DEVICE_AUTHENTICATION_BYTES = "docTypeToDeviceAuthenticationBytes"; - // Credential format type strings - public static final String FORMAT_LDP_VC_UNDERSCORE = "ldp_vc"; - public static final String FORMAT_LDP_VC_HYPHEN = "ldp-vc"; - public static final String FORMAT_MSO_MDOC_UNDERSCORE = "mso_mdoc"; - public static final String FORMAT_MSO_MDOC_HYPHEN = "mso-mdoc"; - // Algorithm names public static final String ALGORITHM_ES256 = "ES256"; public static final String ALGORITHM_EDDSA = "EdDSA"; @@ -67,5 +61,9 @@ public class OpenID4VPConstants { // Credential selection keys public static final String SELECTED_CREDENTIALS = "selectedCredentials"; + + // URL query parameter names for OpenID4VP authorization requests + public static final String CLIENT_ID_PARAM = "client_id"; + public static final String RESPONSE_URI_PARAM = "response_uri"; } diff --git a/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java b/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java index e468b9da9..4e436041f 100644 --- a/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java +++ b/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java @@ -98,4 +98,60 @@ public class SwaggerLiteralConstants { /* OAuth2 ID Token Authentication Controller */ public static final String ID_TOKEN_AUTHENTICATION_NAME = "OAuth2 ID Token Authentication"; public static final String ID_TOKEN_AUTHENTICATION_DESCRIPTION = "All the OAuth2 ID Token Authentication related endpoints"; + + /* Wallet Presentations Controller */ + public static final String WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_SUMMARY = "Processes Verifiable Presentation Authorization Request and provides details about the verifier and presentation."; + public static final String WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_DESCRIPTION = "This API is secured using session-based authentication. Upon receiving a request, the session is first retrieved using the session ID extracted from the Cookie header to authenticate the user. Once authenticated, the API processes the received Verifiable Presentation Authorization Request from the Verifier for a specific wallet. It validates the session, verifies the authenticity of the request, and checks if the Verifier is pre-registered and trusted by the wallet. If all validations pass, the API returns a response containing the presentation details; otherwise, an appropriate error response is returned."; + public static final String WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_REQ_EXAMPLE_NAME = "Verifier Verifiable Presentation Authorization Request"; + public static final String WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_REQ_EXAMPLE_VALUE = "{ \"authorizationRequestUrl\": \"client_id=mock-client&presentation_definition_uri=https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fpresentation_definition_uri&response_type=vp_token&response_mode=direct_post&nonce=NHgLcWlae745DpfJbUyfdg%253D%253D&response_uri=https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fvp-response&state=pcmxBfvdPEcjFObgt%252BLekA%253D%253D\" }"; + public static final String WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_SUCCESS_EXAMPLE_NAME = "Success response"; + public static final String WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_SUCCESS_EXAMPLE_VALUE = "{ \"presentationId\": \"123e4567-e89b-12d3-a456-426614174000\", \"verifier\": { \"id\": \"mock-client\", \"name\": \"Requester name\", \"logo\": \"https://api.collab.mosip.net/inji/verifier-logo.png\", \"isTrusted\": true, \"isPreregisteredWithWallet\": true, \"redirectUri\": \"https://injiverify.collab.mosip.net/redirect\" } }"; + public static final String WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_400_MISSING_RESPONSE_TYPE_NAME = "response_type is missing in Authorization request"; + public static final String WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_400_MISSING_RESPONSE_TYPE_VALUE = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Missing Input: response_type param is required\"}"; + public static final String WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_400_INVALID_WALLET_ID_NAME = "Invalid Wallet ID"; + public static final String WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_400_INVALID_WALLET_ID_VALUE = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Invalid Wallet ID. Session and request Wallet ID do not match\"}"; + public static final String WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_400_WALLET_LOCKED_NAME = "Wallet ID not found in session"; + public static final String WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_400_WALLET_LOCKED_VALUE = "{\"errorCode\": \"wallet_locked\", \"errorMessage\": \"Wallet is locked\"}"; + public static final String WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_401_USER_NOT_FOUND_NAME = "User ID is not present in session"; + public static final String WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_401_USER_NOT_FOUND_VALUE = "{\"errorCode\": \"unauthorized\", \"errorMessage\": \"User ID not found in session\"}"; + public static final String WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_500_VERIFIERS_FETCH_FAILED_NAME = "Failed to fetch pre-registered trusted verifiers"; + public static final String WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_500_VERIFIERS_FETCH_FAILED_VALUE = "{\"errorCode\": \"RESIDENT-APP-026\", \"errorMessage\": \"Api not accessible failure\"}"; + public static final String WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_500_SERVER_ERROR_NAME = "Unexpected Server Error"; + public static final String WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_500_SERVER_ERROR_VALUE = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"; + public static final String WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_500_INVALID_URI_SYNTAX_NAME = "Invalid URI syntax"; + public static final String WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_500_INVALID_URI_SYNTAX_VALUE = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Incorrect URI parameters in the request\"}"; + + public static final String WALLET_PRESENTATIONS_GET_MATCHING_CREDENTIALS_SUMMARY = "Get matching credentials for a presentation request"; + public static final String WALLET_PRESENTATIONS_GET_MATCHING_CREDENTIALS_DESCRIPTION = "This API retrieves credentials from the wallet that match the presentation definition requirements. It returns available credentials that can satisfy the presentation request along with any missing claims that are required but not available."; + public static final String WALLET_PRESENTATIONS_GET_MATCHING_CREDENTIALS_SUCCESS_EXAMPLE_NAME = "Success response"; + public static final String WALLET_PRESENTATIONS_GET_MATCHING_CREDENTIALS_SUCCESS_EXAMPLE_VALUE = "{ \"availableCredentials\": [{ \"credentialId\": \"cred-123\", \"credentialTypeDisplayName\": \"W3C VC\", \"credentialTypeLogo\": \"https://mosip.github.io/inji-config/logos/mosipid-logo.png\", \"type\": [\"IDCredential\"], \"claims\": { \"birthdate\": \"1990-01-01\" } }], \"missingClaims\": [] }"; + public static final String WALLET_PRESENTATIONS_GET_MATCHING_CREDENTIALS_400_INVALID_WALLET_ID_NAME = "Invalid Wallet ID"; + public static final String WALLET_PRESENTATIONS_GET_MATCHING_CREDENTIALS_400_INVALID_WALLET_ID_VALUE = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Invalid Wallet ID. Session and request Wallet ID do not match\"}"; + public static final String WALLET_PRESENTATIONS_GET_MATCHING_CREDENTIALS_400_PRESENTATION_NOT_FOUND_NAME = "Presentation not found"; + public static final String WALLET_PRESENTATIONS_GET_MATCHING_CREDENTIALS_400_PRESENTATION_NOT_FOUND_VALUE = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Presentation not found in session\"}"; + public static final String WALLET_PRESENTATIONS_GET_MATCHING_CREDENTIALS_401_USER_NOT_FOUND_NAME = "User ID is not present in session"; + public static final String WALLET_PRESENTATIONS_GET_MATCHING_CREDENTIALS_401_USER_NOT_FOUND_VALUE = "{\"errorCode\": \"unauthorized\", \"errorMessage\": \"User ID not found in session\"}"; + public static final String WALLET_PRESENTATIONS_GET_MATCHING_CREDENTIALS_500_SERVER_ERROR_NAME = "Unexpected Server Error"; + public static final String WALLET_PRESENTATIONS_GET_MATCHING_CREDENTIALS_500_SERVER_ERROR_VALUE = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"; + + public static final String WALLET_PRESENTATIONS_HANDLE_ACTION_SUMMARY = "Submit presentation or reject verifier"; + public static final String WALLET_PRESENTATIONS_HANDLE_ACTION_DESCRIPTION = "This API handles both presentation submission and verifier rejection based on the request content. For submission: include selectedCredentials array. For rejection: include errorCode and errorMessage fields."; + public static final String WALLET_PRESENTATIONS_HANDLE_ACTION_REQ_SUBMIT_EXAMPLE_NAME = "Submit Presentation"; + public static final String WALLET_PRESENTATIONS_HANDLE_ACTION_REQ_SUBMIT_EXAMPLE_VALUE = "{ \"selectedCredentials\": [\"cred-123\", \"cred-456\"] }"; + public static final String WALLET_PRESENTATIONS_HANDLE_ACTION_REQ_REJECT_EXAMPLE_NAME = "Reject Verifier"; + public static final String WALLET_PRESENTATIONS_HANDLE_ACTION_REQ_REJECT_EXAMPLE_VALUE = "{ \"errorCode\": \"access_denied\", \"errorMessage\": \"User denied authorization to share credentials\" }"; + public static final String WALLET_PRESENTATIONS_HANDLE_ACTION_200_SUBMITTED_NAME = "Presentation submitted"; + public static final String WALLET_PRESENTATIONS_HANDLE_ACTION_200_SUBMITTED_VALUE = "{ \"presentationId\": \"presentation-123\", \"status\": \"SUCCESS\", \"message\": \"Presentation successfully submitted and shared with verifier\" }"; + public static final String WALLET_PRESENTATIONS_HANDLE_ACTION_200_REJECTED_NAME = "Verifier rejected"; + public static final String WALLET_PRESENTATIONS_HANDLE_ACTION_200_REJECTED_VALUE = "{\"status\": \"success\", \"message\": \"Presentation request rejected. An OpenID4VP error response has been sent to the verifier.\"}"; + public static final String WALLET_PRESENTATIONS_HANDLE_ACTION_400_INVALID_FORMAT_NAME = "Invalid request format"; + public static final String WALLET_PRESENTATIONS_HANDLE_ACTION_400_INVALID_FORMAT_VALUE = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Request must contain either selectedCredentials or both errorCode and errorMessage\"}"; + public static final String WALLET_PRESENTATIONS_HANDLE_ACTION_400_INVALID_WALLET_ID_NAME = "Invalid Wallet ID"; + public static final String WALLET_PRESENTATIONS_HANDLE_ACTION_400_INVALID_WALLET_ID_VALUE = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Invalid Wallet ID. Session and request Wallet ID do not match\"}"; + public static final String WALLET_PRESENTATIONS_HANDLE_ACTION_400_PRESENTATION_NOT_FOUND_NAME = "Presentation not found"; + public static final String WALLET_PRESENTATIONS_HANDLE_ACTION_400_PRESENTATION_NOT_FOUND_VALUE = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Presentation not found in session\"}"; + public static final String WALLET_PRESENTATIONS_HANDLE_ACTION_401_UNAUTHORIZED_NAME = "unauthorized"; + public static final String WALLET_PRESENTATIONS_HANDLE_ACTION_401_UNAUTHORIZED_VALUE = "{\"errorCode\": \"unauthorized\", \"errorMessage\": \"User ID not found in session\"}"; + public static final String WALLET_PRESENTATIONS_HANDLE_ACTION_500_SERVER_ERROR_NAME = "Server error"; + public static final String WALLET_PRESENTATIONS_HANDLE_ACTION_500_SERVER_ERROR_VALUE = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"; } diff --git a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java index 3480a5585..e72124bb7 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletCredentialsController.java @@ -258,7 +258,15 @@ public ResponseEntity getVerifiableCredential( log.error("Error processing credential for walletId: {} and credentialId: {}", walletId, credentialId, exception); return Utilities.getErrorResponseEntityWithoutWrapper( exception, exception.getErrorCode(), HttpStatus.BAD_REQUEST, MediaType.APPLICATION_JSON); + } catch (Exception exception){ + log.error("Unexpected error processing credential for walletId: {} and credentialId: {}", walletId, credentialId, exception); + return Utilities.getErrorResponseEntityWithoutWrapper( + new CredentialProcessingException(ErrorConstants.INTERNAL_SERVER_ERROR.getErrorCode(), "We are unable to process request now"), + ErrorConstants.INTERNAL_SERVER_ERROR.getErrorCode(), + HttpStatus.INTERNAL_SERVER_ERROR, + MediaType.APPLICATION_JSON); } + } /** diff --git a/src/main/java/io/mosip/mimoto/controller/WalletPresentationsController.java b/src/main/java/io/mosip/mimoto/controller/WalletPresentationsController.java index 421906db5..c9e14c7e2 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletPresentationsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletPresentationsController.java @@ -1,19 +1,18 @@ package io.mosip.mimoto.controller; import io.mosip.mimoto.constant.SessionKeys; +import io.mosip.mimoto.constant.SwaggerLiteralConstants; import io.mosip.mimoto.dto.ErrorDTO; import io.mosip.mimoto.dto.MatchingCredentialsResponseDTO; -import io.mosip.mimoto.dto.MatchingCredentialsWithWalletDataDTO; +import io.mosip.mimoto.dto.MatchingCredentialsDTO; import io.mosip.mimoto.dto.SubmitPresentationRequestDTO; -import io.mosip.mimoto.dto.VerifiablePresentationAuthorizationRequest; -import io.mosip.mimoto.dto.VerifiablePresentationResponseDTO; +import io.mosip.mimoto.dto.VPAuthorizationRequestDTO; +import io.mosip.mimoto.dto.VPResponseDTO; import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.InvalidRequestException; import io.mosip.mimoto.exception.VPNotCreatedException; -import io.mosip.mimoto.service.CredentialMatchingService; -import io.mosip.mimoto.service.PresentationService; -import io.mosip.mimoto.service.PresentationActionService; +import io.mosip.mimoto.service.WalletPresentationService; import io.mosip.mimoto.service.impl.SessionManager; import io.mosip.mimoto.util.Utilities; import io.mosip.mimoto.util.WalletUtil; @@ -47,17 +46,11 @@ public class WalletPresentationsController { @Autowired - private PresentationService presentationService; - - @Autowired - private CredentialMatchingService credentialMatchingService; + private WalletPresentationService walletPresentationService; @Autowired private SessionManager sessionManager; - @Autowired - private PresentationActionService presentationActionService; - /** * Processes the Verifiable Presentation Authorization Request for a specific wallet. * @@ -66,39 +59,39 @@ public class WalletPresentationsController { * @param vpAuthorizationRequest The Verifiable Presentation Authorization Request parameters. * @return The processed Verifiable Presentation details, including information about the verifier. */ - @Operation(summary = "Processes Verifiable Presentation Authorization Request and provides details about the verifier and presentation.", description = "This API is secured using session-based authentication. Upon receiving a request, the session is first retrieved using the session ID extracted from the Cookie header to authenticate the user. Once authenticated, the API processes the received Verifiable Presentation Authorization Request from the Verifier for a specific wallet. It validates the session, verifies the authenticity of the request, and checks if the Verifier is pre-registered and trusted by the wallet. If all validations pass, the API returns a response containing the presentation details; otherwise, an appropriate error response is returned.", operationId = "processVPAuthorizationRequest", security = @SecurityRequirement(name = "SessionAuth"), parameters = { + @Operation(summary = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_SUMMARY, description = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_DESCRIPTION, operationId = "processVPAuthorizationRequest", security = @SecurityRequirement(name = "SessionAuth"), parameters = { @Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "The unique identifier of the Wallet.", schema = @Schema(type = "string"))}, requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody( required = true, description = "Request body containing the Verifiable Presentation Authorization Request parameters.", content = @Content( mediaType = "application/json", - schema = @Schema(implementation = VerifiablePresentationAuthorizationRequest.class), + schema = @Schema(implementation = VPAuthorizationRequestDTO.class), examples = @ExampleObject( - name = "Verifier Verifiable Presentation Authorization Request", - value = "{ \"authorizationRequestUrl\": \"client_id=mock-client&presentation_definition_uri=https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fpresentation_definition_uri&response_type=vp_token&response_mode=direct_post&nonce=NHgLcWlae745DpfJbUyfdg%253D%253D&response_uri=https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fvp-response&state=pcmxBfvdPEcjFObgt%252BLekA%253D%253D\" }" + name = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_REQ_EXAMPLE_NAME, + value = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_REQ_EXAMPLE_VALUE ) ) ) ) - @ApiResponse(responseCode = "200", description = "Successfully processed the Verifiable Presentation Authorization Request.", content = @Content(mediaType = "application/json", schema = @Schema(implementation = VerifiablePresentationResponseDTO.class), examples = @ExampleObject(name = "Success response", value = "{ \"presentationId\": \"123e4567-e89b-12d3-a456-426614174000\", \"verifier\": { \"id\": \"mock-client\", \"name\": \"Requester name\", \"logo\": \"https://api.collab.mosip.net/inji/verifier-logo.png\", \"isTrusted\": true, \"isPreregisteredWithWallet\": true, \"redirectUri\": \"https://injiverify.collab.mosip.net/redirect\" } }"))) + @ApiResponse(responseCode = "200", description = "Successfully processed the Verifiable Presentation Authorization Request.", content = @Content(mediaType = "application/json", schema = @Schema(implementation = VPResponseDTO.class), examples = @ExampleObject(name = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_SUCCESS_EXAMPLE_NAME, value = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_SUCCESS_EXAMPLE_VALUE))) @ApiResponse(responseCode = "400", description = "Invalid request or missing required parameters.", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = { - @ExampleObject(name = "response_type is missing in Authorization request", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Missing Input: response_type param is required\"}"), - @ExampleObject(name = "Invalid Wallet ID", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Invalid Wallet ID. Session and request Wallet ID do not match\"}"), - @ExampleObject(name = "Wallet ID not found in session", value = "{\"errorCode\": \"wallet_locked\", \"errorMessage\": \"Wallet is locked\"}") + @ExampleObject(name = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_400_MISSING_RESPONSE_TYPE_NAME, value = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_400_MISSING_RESPONSE_TYPE_VALUE), + @ExampleObject(name = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_400_INVALID_WALLET_ID_NAME, value = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_400_INVALID_WALLET_ID_VALUE), + @ExampleObject(name = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_400_WALLET_LOCKED_NAME, value = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_400_WALLET_LOCKED_VALUE) })) - @ApiResponse(responseCode = "401", description = "Unauthorized user performing the Verifiable Presentation flow", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "User ID is not present in session", value = "{\"errorCode\": \"unauthorized\", \"errorMessage\": \"User ID not found in session\"}"))) + @ApiResponse(responseCode = "401", description = "Unauthorized user performing the Verifiable Presentation flow", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_401_USER_NOT_FOUND_NAME, value = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_401_USER_NOT_FOUND_VALUE))) @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = { - @ExampleObject(name = "Failed to fetch pre-registered trusted verifiers", value = "{\"errorCode\": \"RESIDENT-APP-026\", \"errorMessage\": \"Api not accessible failure\"}"), - @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"), - @ExampleObject(name = "Invalid URI syntax", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Incorrect URI parameters in the request\"}") + @ExampleObject(name = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_500_VERIFIERS_FETCH_FAILED_NAME, value = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_500_VERIFIERS_FETCH_FAILED_VALUE), + @ExampleObject(name = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_500_SERVER_ERROR_NAME, value = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_500_SERVER_ERROR_VALUE), + @ExampleObject(name = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_500_INVALID_URI_SYNTAX_NAME, value = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_AUTHORIZATION_500_INVALID_URI_SYNTAX_VALUE) })) @PostMapping - public ResponseEntity handleVPAuthorizationRequest(@PathVariable("walletId") String walletId, HttpSession httpSession, @RequestBody VerifiablePresentationAuthorizationRequest vpAuthorizationRequest) { + public ResponseEntity handleVPAuthorizationRequest(@PathVariable("walletId") String walletId, HttpSession httpSession, @RequestBody VPAuthorizationRequestDTO vpAuthorizationRequest) { try { WalletUtil.validateWalletId(httpSession, walletId); - VerifiablePresentationResponseDTO verifiablePresentationResponseDTO = presentationService.handleVPAuthorizationRequest(vpAuthorizationRequest.getAuthorizationRequestUrl(), walletId); + VPResponseDTO verifiablePresentationResponseDTO = walletPresentationService.handleVPAuthorizationRequest(vpAuthorizationRequest.getAuthorizationRequestUrl(), walletId); VerifiablePresentationSessionData verifiablePresentationSessionData = new VerifiablePresentationSessionData(verifiablePresentationResponseDTO.getPresentationId(), vpAuthorizationRequest.getAuthorizationRequestUrl(), Instant.now(), @@ -129,11 +122,11 @@ public ResponseEntity handleVPAuthorizationRe * @return The matching credentials response with available credentials and * missing claims. */ - @Operation(summary = "Get matching credentials for a presentation request", description = "This API retrieves credentials from the wallet that match the presentation definition requirements. It returns available credentials that can satisfy the presentation request along with any missing claims that are required but not available.", operationId = "getMatchingCredentials", security = @SecurityRequirement(name = "SessionAuth"), parameters = {@Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "The unique identifier of the Wallet.", schema = @Schema(type = "string")), @Parameter(name = "presentationId", in = ParameterIn.PATH, required = true, description = "The unique identifier of the Presentation.", schema = @Schema(type = "string"))}) - @ApiResponse(responseCode = "200", description = "Successfully retrieved matching credentials.", content = @Content(mediaType = "application/json", schema = @Schema(implementation = MatchingCredentialsResponseDTO.class), examples = @ExampleObject(name = "Success response", value = "{ \"availableCredentials\": [{ \"credentialId\": \"cred-123\", \"credentialTypeDisplayName\": \"Mock Verifiable Credential (SD-JWT)\", \"credentialTypeLogo\": \"https://mosip.github.io/inji-config/logos/mosipid-logo.png\", \"type\": [\"IDCredential\"], \"claims\": { \"birthdate\": \"1990-01-01\" } }], \"missingClaims\": [] }"))) - @ApiResponse(responseCode = "400", description = "Invalid request or missing required parameters.", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = "Invalid Wallet ID", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Invalid Wallet ID. Session and request Wallet ID do not match\"}"), @ExampleObject(name = "Presentation not found", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Presentation not found in session\"}")})) - @ApiResponse(responseCode = "401", description = "Unauthorized user performing the Verifiable Presentation flow", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "User ID is not present in session", value = "{\"errorCode\": \"unauthorized\", \"errorMessage\": \"User ID not found in session\"}"))) - @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Unexpected Server Error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"))) + @Operation(summary = SwaggerLiteralConstants.WALLET_PRESENTATIONS_GET_MATCHING_CREDENTIALS_SUMMARY, description = SwaggerLiteralConstants.WALLET_PRESENTATIONS_GET_MATCHING_CREDENTIALS_DESCRIPTION, operationId = "getMatchingCredentials", security = @SecurityRequirement(name = "SessionAuth"), parameters = {@Parameter(name = "walletId", in = ParameterIn.PATH, required = true, description = "The unique identifier of the Wallet.", schema = @Schema(type = "string")), @Parameter(name = "presentationId", in = ParameterIn.PATH, required = true, description = "The unique identifier of the Presentation.", schema = @Schema(type = "string"))}) + @ApiResponse(responseCode = "200", description = "Successfully retrieved matching credentials.", content = @Content(mediaType = "application/json", schema = @Schema(implementation = MatchingCredentialsResponseDTO.class), examples = @ExampleObject(name = SwaggerLiteralConstants.WALLET_PRESENTATIONS_GET_MATCHING_CREDENTIALS_SUCCESS_EXAMPLE_NAME, value = SwaggerLiteralConstants.WALLET_PRESENTATIONS_GET_MATCHING_CREDENTIALS_SUCCESS_EXAMPLE_VALUE))) + @ApiResponse(responseCode = "400", description = "Invalid request or missing required parameters.", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = {@ExampleObject(name = SwaggerLiteralConstants.WALLET_PRESENTATIONS_GET_MATCHING_CREDENTIALS_400_INVALID_WALLET_ID_NAME, value = SwaggerLiteralConstants.WALLET_PRESENTATIONS_GET_MATCHING_CREDENTIALS_400_INVALID_WALLET_ID_VALUE), @ExampleObject(name = SwaggerLiteralConstants.WALLET_PRESENTATIONS_GET_MATCHING_CREDENTIALS_400_PRESENTATION_NOT_FOUND_NAME, value = SwaggerLiteralConstants.WALLET_PRESENTATIONS_GET_MATCHING_CREDENTIALS_400_PRESENTATION_NOT_FOUND_VALUE)})) + @ApiResponse(responseCode = "401", description = "Unauthorized user performing the Verifiable Presentation flow", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = SwaggerLiteralConstants.WALLET_PRESENTATIONS_GET_MATCHING_CREDENTIALS_401_USER_NOT_FOUND_NAME, value = SwaggerLiteralConstants.WALLET_PRESENTATIONS_GET_MATCHING_CREDENTIALS_401_USER_NOT_FOUND_VALUE))) + @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = SwaggerLiteralConstants.WALLET_PRESENTATIONS_GET_MATCHING_CREDENTIALS_500_SERVER_ERROR_NAME, value = SwaggerLiteralConstants.WALLET_PRESENTATIONS_GET_MATCHING_CREDENTIALS_500_SERVER_ERROR_VALUE))) @GetMapping("/{presentationId}/credentials") public ResponseEntity getMatchingCredentials(@PathVariable("walletId") String walletId, @PathVariable("presentationId") String presentationId, HttpSession httpSession) { @@ -146,10 +139,10 @@ public ResponseEntity getMatchingCredentials(@Pa } try { VerifiablePresentationSessionData sessionData = sessionManager.getPresentationSessionData(httpSession, walletId, presentationId); - MatchingCredentialsWithWalletDataDTO matchingCredentialsWithWalletData = credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); + MatchingCredentialsDTO matchingCredentials = walletPresentationService.getMatchingCredentials(sessionData, walletId, base64Key); // Store the matching credentials and pre-filtered matched credentials in session cache before returning - sessionManager.storeMatchingWalletCredentialsInPresentationSessionData(httpSession, walletId, sessionData, matchingCredentialsWithWalletData.getMatchingCredentials()); - return ResponseEntity.status(HttpStatus.OK).body(matchingCredentialsWithWalletData.getMatchingCredentialsResponse()); + sessionManager.storeMatchingWalletCredentialsInPresentationSessionData(httpSession, walletId, sessionData, matchingCredentials.getMatchingCredentials()); + return ResponseEntity.status(HttpStatus.OK).body(matchingCredentials.getMatchingCredentialsResponse()); } catch (ApiNotAccessibleException | IOException | VPNotCreatedException exception) { return Utilities.getErrorResponseEntityWithoutWrapper( exception, WALLET_CREATE_VP_EXCEPTION.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); @@ -172,10 +165,8 @@ public ResponseEntity getMatchingCredentials(@Pa * @return Response indicating success/failure of the operation. */ @Operation( - summary = "Submit presentation or reject verifier", - description = "This API handles both presentation submission and verifier rejection based on the request content. " + - "For submission: include selectedCredentials array. " + - "For rejection: include errorCode and errorMessage fields.", + summary = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_ACTION_SUMMARY, + description = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_ACTION_DESCRIPTION, operationId = "handlePresentationAction", security = @SecurityRequirement(name = "SessionAuth"), parameters = { @@ -189,23 +180,23 @@ public ResponseEntity getMatchingCredentials(@Pa mediaType = "application/json", schema = @Schema(implementation = SubmitPresentationRequestDTO.class), examples = { - @ExampleObject(name = "Submit Presentation", value = "{ \"selectedCredentials\": [\"cred-123\", \"cred-456\"] }"), - @ExampleObject(name = "Reject Verifier", value = "{ \"errorCode\": \"access_denied\", \"errorMessage\": \"User denied authorization to share credentials\" }") + @ExampleObject(name = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_ACTION_REQ_SUBMIT_EXAMPLE_NAME, value = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_ACTION_REQ_SUBMIT_EXAMPLE_VALUE), + @ExampleObject(name = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_ACTION_REQ_REJECT_EXAMPLE_NAME, value = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_ACTION_REQ_REJECT_EXAMPLE_VALUE) } ) ) ) @ApiResponse(responseCode = "200", description = "Successfully processed the request.", content = @Content(mediaType = "application/json", examples = { - @ExampleObject(name = "Presentation submitted", value = "{ \"presentationId\": \"presentation-123\", \"status\": \"SUCCESS\", \"message\": \"Presentation successfully submitted and shared with verifier\" }"), - @ExampleObject(name = "Verifier rejected", value = "{\"status\": \"success\", \"message\": \"Presentation request rejected. An OpenID4VP error response has been sent to the verifier.\"}") + @ExampleObject(name = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_ACTION_200_SUBMITTED_NAME, value = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_ACTION_200_SUBMITTED_VALUE), + @ExampleObject(name = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_ACTION_200_REJECTED_NAME, value = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_ACTION_200_REJECTED_VALUE) })) @ApiResponse(responseCode = "400", description = "Invalid request or missing required parameters.", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = { - @ExampleObject(name = "Invalid request format", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Request must contain either selectedCredentials or both errorCode and errorMessage\"}"), - @ExampleObject(name = "Invalid Wallet ID", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Invalid Wallet ID. Session and request Wallet ID do not match\"}"), - @ExampleObject(name = "Presentation not found", value = "{\"errorCode\": \"invalid_request\", \"errorMessage\": \"Presentation not found in session\"}") + @ExampleObject(name = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_ACTION_400_INVALID_FORMAT_NAME, value = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_ACTION_400_INVALID_FORMAT_VALUE), + @ExampleObject(name = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_ACTION_400_INVALID_WALLET_ID_NAME, value = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_ACTION_400_INVALID_WALLET_ID_VALUE), + @ExampleObject(name = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_ACTION_400_PRESENTATION_NOT_FOUND_NAME, value = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_ACTION_400_PRESENTATION_NOT_FOUND_VALUE) })) - @ApiResponse(responseCode = "401", description = "Unauthorized user", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "unauthorized", value = "{\"errorCode\": \"unauthorized\", \"errorMessage\": \"User ID not found in session\"}"))) - @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = "Server error", value = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"))) + @ApiResponse(responseCode = "401", description = "Unauthorized user", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_ACTION_401_UNAUTHORIZED_NAME, value = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_ACTION_401_UNAUTHORIZED_VALUE))) + @ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = @ExampleObject(name = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_ACTION_500_SERVER_ERROR_NAME, value = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_ACTION_500_SERVER_ERROR_VALUE))) @PatchMapping("/{presentationId}") public ResponseEntity handlePresentationAction(@PathVariable("walletId") String walletId, HttpSession httpSession, @PathVariable("presentationId") String presentationId, @Valid @RequestBody SubmitPresentationRequestDTO request) { @@ -225,7 +216,7 @@ public ResponseEntity handlePresentationAction(@PathVariable("walletId") Stri return Utilities.getErrorResponseEntityFromPlatformErrorMessage(UNAUTHORIZED_ACCESS, HttpStatus.UNAUTHORIZED, MediaType.APPLICATION_JSON); } - return presentationActionService.handlePresentationAction(walletId, presentationId, request, vpSessionData, base64Key); + return walletPresentationService.handlePresentationAction(walletId, presentationId, request, vpSessionData, base64Key); } catch (IllegalArgumentException exception){ diff --git a/src/main/java/io/mosip/mimoto/controller/WalletTrustedVerifiersController.java b/src/main/java/io/mosip/mimoto/controller/WalletTrustedVerifiersController.java index 005d43aa4..665c66593 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletTrustedVerifiersController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletTrustedVerifiersController.java @@ -70,7 +70,7 @@ public class WalletTrustedVerifiersController { ) ) ) - @ApiResponse(responseCode = "201", description = "Trusted verifier created successfully.", content = @Content(mediaType = "application/json", schema = @Schema(implementation = TrustedVerifierResponseDTO.class), examples = @ExampleObject(name = "Success response", value = "{ \"id\": \"uuid\" }"))) + @ApiResponse(responseCode = "201", description = "Trusted verifier created successfully.", content = @Content(mediaType = "application/json", schema = @Schema(implementation = TrustedVerifierResponseDTO.class), examples = @ExampleObject(name = "Success response", value = "{ \"id\": \"2d598dfc-7218-cb7a7afd5a07\" }"))) @ApiResponse(responseCode = "400", description = "Invalid request or missing required parameters.", content = @Content(mediaType = "application/json", schema = @Schema(implementation = ErrorDTO.class), examples = { @ExampleObject(name = "Missing verifierId", value = "{\"errorCode\":\"invalid_request\",\"errorMessage\":\"Missing Input: verifierId is required\"}"), @ExampleObject(name = "Invalid Wallet ID", value = "{\"errorCode\":\"invalid_request\",\"errorMessage\":\"Invalid Wallet ID. Session and request Wallet ID do not match\"}"), diff --git a/src/main/java/io/mosip/mimoto/dto/SelectableCredentialDTO.java b/src/main/java/io/mosip/mimoto/dto/CredentialDTO.java similarity index 95% rename from src/main/java/io/mosip/mimoto/dto/SelectableCredentialDTO.java rename to src/main/java/io/mosip/mimoto/dto/CredentialDTO.java index c60ae8402..335152e80 100644 --- a/src/main/java/io/mosip/mimoto/dto/SelectableCredentialDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/CredentialDTO.java @@ -11,7 +11,7 @@ @Builder @NoArgsConstructor @AllArgsConstructor -public class SelectableCredentialDTO { +public class CredentialDTO { @JsonProperty("credentialId") @Schema(description = "Unique identifier of the credential") @@ -29,3 +29,4 @@ public class SelectableCredentialDTO { @Schema(description = "Format of the credential (e.g., ldp_vc, vc+sd-jwt, dc+sd-jwt)") private String format; } + diff --git a/src/main/java/io/mosip/mimoto/dto/MatchingCredentialsWithWalletDataDTO.java b/src/main/java/io/mosip/mimoto/dto/MatchingCredentialsDTO.java similarity index 92% rename from src/main/java/io/mosip/mimoto/dto/MatchingCredentialsWithWalletDataDTO.java rename to src/main/java/io/mosip/mimoto/dto/MatchingCredentialsDTO.java index e0886c8c0..c508150a1 100644 --- a/src/main/java/io/mosip/mimoto/dto/MatchingCredentialsWithWalletDataDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/MatchingCredentialsDTO.java @@ -16,7 +16,7 @@ @Builder @NoArgsConstructor @AllArgsConstructor -public class MatchingCredentialsWithWalletDataDTO { +public class MatchingCredentialsDTO { private MatchingCredentialsResponseDTO matchingCredentialsResponse; diff --git a/src/main/java/io/mosip/mimoto/dto/MatchingCredentialsResponseDTO.java b/src/main/java/io/mosip/mimoto/dto/MatchingCredentialsResponseDTO.java index 6a4e1e9b1..af1087aa1 100644 --- a/src/main/java/io/mosip/mimoto/dto/MatchingCredentialsResponseDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/MatchingCredentialsResponseDTO.java @@ -18,7 +18,7 @@ public class MatchingCredentialsResponseDTO { @JsonProperty("availableCredentials") @Schema(description = "List of credentials that match the presentation definition") - private List availableCredentials; + private List availableCredentials; @JsonProperty("missingClaims") @Schema(description = "List of claims that are required but not available in any credential") diff --git a/src/main/java/io/mosip/mimoto/dto/MatchingResult.java b/src/main/java/io/mosip/mimoto/dto/MatchingResult.java deleted file mode 100644 index d6b7f3290..000000000 --- a/src/main/java/io/mosip/mimoto/dto/MatchingResult.java +++ /dev/null @@ -1,18 +0,0 @@ -package io.mosip.mimoto.dto; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.List; - -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class MatchingResult { - - private List availableCredentials; - private List missingClaims; -} diff --git a/src/main/java/io/mosip/mimoto/dto/VerifiablePresentationAuthorizationRequest.java b/src/main/java/io/mosip/mimoto/dto/VPAuthorizationRequestDTO.java similarity index 63% rename from src/main/java/io/mosip/mimoto/dto/VerifiablePresentationAuthorizationRequest.java rename to src/main/java/io/mosip/mimoto/dto/VPAuthorizationRequestDTO.java index 857ee25c6..66cad3cea 100644 --- a/src/main/java/io/mosip/mimoto/dto/VerifiablePresentationAuthorizationRequest.java +++ b/src/main/java/io/mosip/mimoto/dto/VPAuthorizationRequestDTO.java @@ -3,6 +3,6 @@ import lombok.Data; @Data -public class VerifiablePresentationAuthorizationRequest { +public class VPAuthorizationRequestDTO { private String authorizationRequestUrl; } diff --git a/src/main/java/io/mosip/mimoto/dto/VerifiablePresentationResponseDTO.java b/src/main/java/io/mosip/mimoto/dto/VPResponseDTO.java similarity index 91% rename from src/main/java/io/mosip/mimoto/dto/VerifiablePresentationResponseDTO.java rename to src/main/java/io/mosip/mimoto/dto/VPResponseDTO.java index 4e5aa8e61..67048ae57 100644 --- a/src/main/java/io/mosip/mimoto/dto/VerifiablePresentationResponseDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/VPResponseDTO.java @@ -7,7 +7,7 @@ @Data @AllArgsConstructor -public class VerifiablePresentationResponseDTO { +public class VPResponseDTO { @Schema(description = "Unique identifier for the Verifiable Presentation") String presentationId; diff --git a/src/main/java/io/mosip/mimoto/service/CredentialMatchingService.java b/src/main/java/io/mosip/mimoto/service/CredentialMatchingService.java index 1d351fbe4..210955151 100644 --- a/src/main/java/io/mosip/mimoto/service/CredentialMatchingService.java +++ b/src/main/java/io/mosip/mimoto/service/CredentialMatchingService.java @@ -1,12 +1,12 @@ package io.mosip.mimoto.service; -import io.mosip.mimoto.dto.MatchingCredentialsWithWalletDataDTO; +import io.mosip.mimoto.dto.MatchingCredentialsDTO; import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; import io.mosip.mimoto.exception.ApiNotAccessibleException; import java.io.IOException; public interface CredentialMatchingService { - MatchingCredentialsWithWalletDataDTO getMatchingCredentials(VerifiablePresentationSessionData sessionData, String walletId, String base64Key) throws ApiNotAccessibleException, IOException; + MatchingCredentialsDTO getMatchingCredentials(VerifiablePresentationSessionData sessionData, String walletId, String base64Key) throws ApiNotAccessibleException, IOException; } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/KeyPairService.java b/src/main/java/io/mosip/mimoto/service/KeyPairRetrievalService.java similarity index 95% rename from src/main/java/io/mosip/mimoto/service/KeyPairService.java rename to src/main/java/io/mosip/mimoto/service/KeyPairRetrievalService.java index b2c334c95..fb99923eb 100644 --- a/src/main/java/io/mosip/mimoto/service/KeyPairService.java +++ b/src/main/java/io/mosip/mimoto/service/KeyPairRetrievalService.java @@ -9,7 +9,7 @@ /** * Service interface for managing key pairs from database */ -public interface KeyPairService { +public interface KeyPairRetrievalService { /** * Retrieves a key pair from the database for the given wallet ID and signing algorithm diff --git a/src/main/java/io/mosip/mimoto/service/PresentationService.java b/src/main/java/io/mosip/mimoto/service/PresentationService.java index 6b2aadd95..19a796280 100644 --- a/src/main/java/io/mosip/mimoto/service/PresentationService.java +++ b/src/main/java/io/mosip/mimoto/service/PresentationService.java @@ -1,20 +1,11 @@ package io.mosip.mimoto.service; -import io.mosip.mimoto.dto.ErrorDTO; -import io.mosip.mimoto.dto.SubmitPresentationResponseDTO; -import io.mosip.mimoto.dto.VerifiablePresentationResponseDTO; import io.mosip.mimoto.dto.openid.presentation.PresentationRequestDTO; -import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; import io.mosip.mimoto.exception.ApiNotAccessibleException; -import io.mosip.mimoto.exception.VPErrorNotSentException; -import io.mosip.openID4VP.exceptions.OpenID4VPExceptions; import java.io.IOException; -import java.net.URISyntaxException; public interface PresentationService { String authorizePresentation(PresentationRequestDTO presentationRequestDTO) throws ApiNotAccessibleException, IOException; - VerifiablePresentationResponseDTO handleVPAuthorizationRequest(String urlEncodedVPAuthorizationRequest, String walletId) throws ApiNotAccessibleException, IOException, OpenID4VPExceptions, URISyntaxException; - SubmitPresentationResponseDTO rejectVerifier(String walletId, VerifiablePresentationSessionData vpSessionData, ErrorDTO payload) throws VPErrorNotSentException; } diff --git a/src/main/java/io/mosip/mimoto/service/WalletPresentationService.java b/src/main/java/io/mosip/mimoto/service/WalletPresentationService.java new file mode 100644 index 000000000..bb576a1c0 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/WalletPresentationService.java @@ -0,0 +1,22 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.dto.MatchingCredentialsDTO; +import io.mosip.mimoto.dto.SubmitPresentationRequestDTO; +import io.mosip.mimoto.dto.VPResponseDTO; +import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.openID4VP.exceptions.OpenID4VPExceptions; +import org.springframework.http.ResponseEntity; + +import java.io.IOException; +import java.net.URISyntaxException; + +/** + * Service interface for handling wallet presentation operations + */ +public interface WalletPresentationService { + VPResponseDTO handleVPAuthorizationRequest(String urlEncodedVPAuthorizationRequest, String walletId) throws ApiNotAccessibleException, IOException, OpenID4VPExceptions, URISyntaxException; + ResponseEntity handlePresentationAction(String walletId, String presentationId, SubmitPresentationRequestDTO request, VerifiablePresentationSessionData vpSessionData, String base64Key); + MatchingCredentialsDTO getMatchingCredentials(VerifiablePresentationSessionData sessionData, String walletId, String base64Key) throws ApiNotAccessibleException, IOException; +} + diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialMatchingServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialMatchingServiceImpl.java index 2c0921d82..b2956c300 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialMatchingServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialMatchingServiceImpl.java @@ -5,8 +5,8 @@ import io.mosip.mimoto.constant.CredentialFormat; import io.mosip.mimoto.dto.DecryptedCredentialDTO; import io.mosip.mimoto.dto.MatchingCredentialsResponseDTO; -import io.mosip.mimoto.dto.MatchingCredentialsWithWalletDataDTO; -import io.mosip.mimoto.dto.SelectableCredentialDTO; +import io.mosip.mimoto.dto.MatchingCredentialsDTO; +import io.mosip.mimoto.dto.CredentialDTO; import io.mosip.mimoto.dto.mimoto.IssuerConfig; import io.mosip.mimoto.dto.mimoto.VCCredentialProperties; import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; @@ -14,6 +14,8 @@ import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.InvalidIssuerIdException; +import io.mosip.mimoto.exception.InvalidRequestException; +import static io.mosip.mimoto.exception.ErrorConstants.UNSUPPORTED_FORMAT; import io.mosip.mimoto.service.CredentialMatchingService; import io.mosip.mimoto.service.IssuersService; import io.mosip.mimoto.service.WalletCredentialService; @@ -29,8 +31,6 @@ import java.util.stream.IntStream; import java.util.stream.Stream; -import static io.mosip.mimoto.util.JwtUtils.extractJwtPayloadFromSdJwt; - @Slf4j @Service public class CredentialMatchingServiceImpl implements CredentialMatchingService { @@ -52,7 +52,8 @@ public class CredentialMatchingServiceImpl implements CredentialMatchingService @Autowired private WalletCredentialService walletCredentialService; - public MatchingCredentialsWithWalletDataDTO getMatchingCredentials(VerifiablePresentationSessionData sessionData, String walletId, String base64Key) throws ApiNotAccessibleException, IOException { + @Override + public MatchingCredentialsDTO getMatchingCredentials(VerifiablePresentationSessionData sessionData, String walletId, String base64Key) throws ApiNotAccessibleException, IOException { log.info("Getting matching credentials with wallet data for walletId: {}", walletId); // Extract presentation definition from the session data @@ -68,20 +69,20 @@ public MatchingCredentialsWithWalletDataDTO getMatchingCredentials(VerifiablePre List decryptedCredentials = walletCredentialService.getDecryptedCredentials(walletId, base64Key); if (decryptedCredentials.isEmpty()) { MatchingCredentialsResponseDTO emptyResponse = createEmptyResponseWithMissingClaims(presentationDefinition); - return MatchingCredentialsWithWalletDataDTO.builder() + return MatchingCredentialsDTO.builder() .matchingCredentialsResponse(emptyResponse) .matchingCredentials(new ArrayList<>()) .build(); } List descriptors = presentationDefinition.getInputDescriptors(); - Map> matchingCredentialsByDescriptor = new HashMap<>(); + Map> matchingCredentialsByDescriptor = new HashMap<>(); Set missingClaims = new HashSet<>(); IntStream.range(0, descriptors.size()) .forEach(i -> { InputDescriptor descriptor = descriptors.get(i); - List matches = decryptedCredentials.stream() + List matches = decryptedCredentials.stream() .filter(decrypted -> matchesInputDescriptor(decrypted.getCredential(), descriptor)) .map(this::buildAvailableCredential) .collect(Collectors.toList()); @@ -95,7 +96,7 @@ public MatchingCredentialsWithWalletDataDTO getMatchingCredentials(VerifiablePre // Flatten all matching credentials into a single list, removing duplicates by credential ID Set addedCredentialIds = new HashSet<>(); - List availableCredentials = matchingCredentialsByDescriptor.values().stream() + List availableCredentials = matchingCredentialsByDescriptor.values().stream() .flatMap(List::stream) .filter(credential -> addedCredentialIds.add(credential.getCredentialId())) .collect(Collectors.toList()); @@ -104,12 +105,12 @@ public MatchingCredentialsWithWalletDataDTO getMatchingCredentials(VerifiablePre // Filter decrypted credentials to only include matched ones Set matchedCredentialIds = availableCredentials.stream() - .map(SelectableCredentialDTO::getCredentialId) + .map(CredentialDTO::getCredentialId) .collect(Collectors.toSet()); List matchingCredentials = decryptedCredentials.stream().filter(credential -> matchedCredentialIds.contains(credential.getId())).collect(Collectors.toList()); - return MatchingCredentialsWithWalletDataDTO.builder() + return MatchingCredentialsDTO.builder() .matchingCredentialsResponse(matchingCredentialsResponse) .matchingCredentials(matchingCredentials) .build(); @@ -259,8 +260,8 @@ private Object getCredentialData(VCCredentialResponse vc) { return objectMapper.convertValue(credentialData, VCCredentialProperties.class); } } else if (CredentialFormat.VC_SD_JWT.getFormat().equalsIgnoreCase(format) || CredentialFormat.DC_SD_JWT.getFormat().equalsIgnoreCase(format)) { - String credential = objectMapper.convertValue(vc.getCredential(), String.class); - return extractJwtPayloadFromSdJwt(credential); + throw new InvalidRequestException(UNSUPPORTED_FORMAT.getErrorCode(), + "SD-JWT credential format (" + format + ") is not supported for credential matching"); } return vc.getCredential(); @@ -360,7 +361,7 @@ private String extractClaimKeyFromPath(String path) { return tail; } - private SelectableCredentialDTO buildAvailableCredential(DecryptedCredentialDTO decryptedCredentialDTO) { + private CredentialDTO buildAvailableCredential(DecryptedCredentialDTO decryptedCredentialDTO) { String issuerId = decryptedCredentialDTO.getCredentialMetadata().getIssuerId(); String credentialType = decryptedCredentialDTO.getCredentialMetadata().getCredentialType(); @@ -378,7 +379,7 @@ private SelectableCredentialDTO buildAvailableCredential(DecryptedCredentialDTO log.warn("Failed to fetch issuer config for issuerId: {}, credentialType: {}", issuerId, credentialType, e); } - return SelectableCredentialDTO.builder() + return CredentialDTO.builder() .credentialId(decryptedCredentialDTO.getId()) .credentialTypeDisplayName(credentialTypeDisplayName) .credentialTypeLogo(credentialTypeLogo) diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java index 373713d95..6ee39f423 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java @@ -6,7 +6,7 @@ import io.mosip.mimoto.service.CredentialFormatHandler; import io.mosip.mimoto.service.CredentialFormatHandlerFactory; import io.mosip.mimoto.service.CredentialRequestService; -import io.mosip.mimoto.service.KeyPairService; +import io.mosip.mimoto.service.KeyPairRetrievalService; import io.mosip.mimoto.util.JwtGeneratorUtil; import io.mosip.mimoto.util.KeyGenerationUtil; import lombok.extern.slf4j.Slf4j; @@ -38,7 +38,7 @@ public Set getSigningAlgorithmsPriorityOrder() { private CredentialFormatHandlerFactory credentialFormatHandlerFactory; @Autowired - private KeyPairService keyPairService; + private KeyPairRetrievalService keyPairService; @Override public VCCredentialRequest buildRequest(IssuerDTO issuerDTO, diff --git a/src/main/java/io/mosip/mimoto/service/impl/KeyPairServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/KeyPairRetrievalServiceImpl.java similarity index 96% rename from src/main/java/io/mosip/mimoto/service/impl/KeyPairServiceImpl.java rename to src/main/java/io/mosip/mimoto/service/impl/KeyPairRetrievalServiceImpl.java index 0301461cf..0c3630ead 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/KeyPairServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/KeyPairRetrievalServiceImpl.java @@ -5,7 +5,7 @@ import io.mosip.mimoto.exception.KeyGenerationException; import io.mosip.mimoto.model.ProofSigningKey; import io.mosip.mimoto.repository.ProofSigningKeyRepository; -import io.mosip.mimoto.service.KeyPairService; +import io.mosip.mimoto.service.KeyPairRetrievalService; import io.mosip.mimoto.util.EncryptionDecryptionUtil; import io.mosip.mimoto.util.KeyGenerationUtil; import lombok.extern.slf4j.Slf4j; @@ -22,7 +22,7 @@ */ @Slf4j @Service -public class KeyPairServiceImpl implements KeyPairService { +public class KeyPairRetrievalServiceImpl implements KeyPairRetrievalService { @Autowired private ProofSigningKeyRepository proofSigningKeyRepository; diff --git a/src/main/java/io/mosip/mimoto/service/impl/PresentationActionServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/PresentationActionServiceImpl.java deleted file mode 100644 index 702dd1341..000000000 --- a/src/main/java/io/mosip/mimoto/service/impl/PresentationActionServiceImpl.java +++ /dev/null @@ -1,122 +0,0 @@ -package io.mosip.mimoto.service.impl; - -import com.nimbusds.jose.JOSEException; -import io.mosip.mimoto.dto.ErrorDTO; -import io.mosip.mimoto.dto.SubmitPresentationResponseDTO; -import io.mosip.mimoto.dto.SubmitPresentationRequestDTO; -import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; -import io.mosip.mimoto.exception.*; -import io.mosip.mimoto.service.PresentationActionService; -import io.mosip.mimoto.service.PresentationService; -import io.mosip.mimoto.service.PresentationSubmissionService; -import io.mosip.mimoto.util.Utilities; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Service; - -import java.io.IOException; -import java.lang.IllegalArgumentException; - -import static io.mosip.mimoto.exception.ErrorConstants.*; - -/** - * Service implementation for handling presentation actions - */ -@Slf4j -@Service -public class PresentationActionServiceImpl implements PresentationActionService { - - @Autowired - private PresentationSubmissionService presentationSubmissionService; - - @Autowired - private PresentationService presentationService; - - @Override - public ResponseEntity handlePresentationAction(String walletId, String presentationId, SubmitPresentationRequestDTO request, VerifiablePresentationSessionData vpSessionData, String base64Key) { - - log.info("Processing presentation action for walletId: {}, presentationId: {}", walletId, presentationId); - - try { - // Determine the action based on request content - if (request.isSubmissionRequest()) { - log.info("Processing presentation submission for presentationId: {}", presentationId); - return handlePresentationSubmission(walletId, presentationId, request, vpSessionData, base64Key); - - } else if (request.isRejectionRequest()) { - log.info("Processing verifier rejection for presentationId: {}", presentationId); - return handleVerifierRejection(walletId, vpSessionData, request); - - } else { - log.warn("Invalid request format - must contain either selectedCredentials or both errorCode and errorMessage"); - return Utilities.getErrorResponseEntityWithoutWrapper(new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Request must contain either selectedCredentials or both errorCode and errorMessage"), INVALID_REQUEST.getErrorCode(), HttpStatus.BAD_REQUEST, MediaType.APPLICATION_JSON); - } - - } catch (JOSEException exception) { - log.error("JWT signing error during presentation action for walletId: {}, presentationId: {}", walletId, presentationId, exception); - return Utilities.getErrorResponseEntityWithoutWrapper(exception, JWT_SIGNING_ERROR.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); - - } catch (KeyGenerationException exception) { - log.error("Key generation/retrieval error during presentation action for walletId: {}, presentationId: {}", walletId, presentationId, exception); - return Utilities.getErrorResponseEntityWithoutWrapper(exception, KEY_GENERATION_ERROR.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); - - } catch (DecryptionException exception) { - log.error("Decryption error during presentation action for walletId: {}, presentationId: {}", walletId, presentationId, exception); - return Utilities.getErrorResponseEntityWithoutWrapper(exception, DECRYPTION_ERROR.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); - - } catch (ApiNotAccessibleException | IOException exception) { - log.error("Error during presentation action for walletId: {}, presentationId: {}", walletId, presentationId, exception); - return Utilities.getErrorResponseEntityWithoutWrapper(exception, WALLET_CREATE_VP_EXCEPTION.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); - - } catch (VPErrorNotSentException exception) { - log.error("Error sending rejection to verifier for walletId: {}, presentationId: {}", walletId, presentationId, exception); - return Utilities.getErrorResponseEntityWithoutWrapper(exception, REJECT_VERIFIER_EXCEPTION.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); - - } catch (IllegalArgumentException exception) { - log.error("Invalid argument during presentation action for walletId: {}, presentationId: {}", walletId, presentationId, exception); - return Utilities.getErrorResponseEntityWithoutWrapper(exception, INVALID_REQUEST.getErrorCode(), HttpStatus.BAD_REQUEST, MediaType.APPLICATION_JSON); - } - } - - /** - * Handles presentation submission with selected credentials - */ - private ResponseEntity handlePresentationSubmission(String walletId, String presentationId, SubmitPresentationRequestDTO request, VerifiablePresentationSessionData sessionData, String base64Key) throws ApiNotAccessibleException, IOException, JOSEException, KeyGenerationException, DecryptionException { - - log.debug("Submitting presentation for walletId: {}, presentationId: {}", walletId, presentationId); - - if (base64Key == null || base64Key.isBlank()) { - log.warn("Wallet key not found for walletId: {}", walletId); - throw new IllegalArgumentException("Wallet key is required for presentation submission"); - } - - SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, request, base64Key); - - log.info("Presentation submission completed successfully for walletId: {}, presentationId: {}", walletId, presentationId); - return ResponseEntity.status(HttpStatus.OK).body(response); - } - - /** - * Handles verifier rejection with error details - */ - private ResponseEntity handleVerifierRejection(String walletId, VerifiablePresentationSessionData vpSessionData, SubmitPresentationRequestDTO request) throws VPErrorNotSentException { - - log.debug("Rejecting verifier for walletId: {}", walletId); - - // Create ErrorDTO from the request - ErrorDTO errorPayload = new ErrorDTO(); - errorPayload.setErrorCode(request.getErrorCode()); - errorPayload.setErrorMessage(request.getErrorMessage()); - - // Call the presentation service to reject the verifier - SubmitPresentationResponseDTO submitPresentationResponseDTO = presentationService.rejectVerifier(walletId, vpSessionData, errorPayload); - - log.info("Verifier rejection completed successfully for walletId: {}", walletId); - - return ResponseEntity.status(HttpStatus.OK).body(submitPresentationResponseDTO); - } -} - diff --git a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java index 89340ad4b..af5924332 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java @@ -2,28 +2,16 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; + import io.mosip.mimoto.constant.CredentialFormat; -import io.mosip.mimoto.dto.ErrorDTO; -import io.mosip.mimoto.dto.SubmitPresentationResponseDTO; -import io.mosip.mimoto.dto.VerifiablePresentationResponseDTO; -import io.mosip.mimoto.dto.VerifiablePresentationVerifierDTO; import io.mosip.mimoto.dto.mimoto.VCCredentialProperties; import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; import io.mosip.mimoto.dto.mimoto.VCCredentialResponseProof; import io.mosip.mimoto.dto.openid.presentation.*; -import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; -import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.ErrorConstants; -import io.mosip.mimoto.exception.VPErrorNotSentException; import io.mosip.mimoto.exception.VPNotCreatedException; import io.mosip.mimoto.service.PresentationService; -import io.mosip.mimoto.service.VerifierService; -import io.mosip.openID4VP.OpenID4VP; -import io.mosip.openID4VP.authorizationRequest.AuthorizationRequest; -import io.mosip.openID4VP.authorizationRequest.Verifier; -import io.mosip.openID4VP.authorizationRequest.clientMetadata.ClientMetadata; import io.mosip.mimoto.util.RestApiClient; -import io.mosip.openID4VP.verifier.VerifierResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -33,14 +21,12 @@ import org.springframework.util.MultiValueMap; import java.io.IOException; -import java.net.URISyntaxException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.*; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; -import static io.mosip.mimoto.exception.ErrorConstants.REJECTED_VERIFIER; import static io.mosip.mimoto.util.JwtUtils.extractJwtPayloadFromSdJwt; import static io.mosip.mimoto.util.JwtUtils.parseJwtHeader; @@ -57,65 +43,12 @@ public class PresentationServiceImpl implements PresentationService { @Autowired private RestApiClient restApiClient; - @Autowired - private VerifierService verifierService; - - @Autowired - private OpenID4VPService openID4VPService; - @Value("${mosip.inji.ovp.redirect.url.pattern}") private String injiOvpRedirectURLPattern; @Value("${server.tomcat.max-http-response-header-size:65536}") private Integer maximumResponseHeaderSize; - @Override - public VerifiablePresentationResponseDTO handleVPAuthorizationRequest(String urlEncodedVPAuthorizationRequest, String walletId) throws ApiNotAccessibleException, IOException, URISyntaxException { - String presentationId = UUID.randomUUID().toString(); - - //Initialize OpenID4VP instance with presentationId as traceability id for each new Verifiable Presentation request - OpenID4VP openID4VP = openID4VPService.create(presentationId); - - List preRegisteredVerifiers = getPreRegisteredVerifiers(); - boolean shouldValidateClient = verifierService.isVerifierClientPreregistered(preRegisteredVerifiers, urlEncodedVPAuthorizationRequest); - AuthorizationRequest authorizationRequest = openID4VP.authenticateVerifier(urlEncodedVPAuthorizationRequest, preRegisteredVerifiers, shouldValidateClient); - VerifiablePresentationVerifierDTO verifiablePresentationVerifierDTO = createVPResponseVerifierDTO(preRegisteredVerifiers, authorizationRequest, walletId); - - return new VerifiablePresentationResponseDTO(presentationId, verifiablePresentationVerifierDTO); - } - - private VerifiablePresentationVerifierDTO createVPResponseVerifierDTO(List preRegisteredVerifiers, AuthorizationRequest authorizationRequest, String walletId) { - - boolean isVerifierPreRegisteredWithWallet = preRegisteredVerifiers.stream().map( - Verifier::getClientId).toList().contains(authorizationRequest.getClientId()); - - boolean isVerifierTrustedByWallet = verifierService.isVerifierTrustedByWallet(authorizationRequest.getClientId(), walletId); - - String clientName = Optional.ofNullable(authorizationRequest.getClientMetadata()) - .map(ClientMetadata::getClientName) - .filter(name -> !name.isBlank()) - .orElse(authorizationRequest.getClientId()); - - String logo = Optional.ofNullable(authorizationRequest.getClientMetadata()) - .map(ClientMetadata::getLogoUri) - .orElse(null); - - return new VerifiablePresentationVerifierDTO( - authorizationRequest.getClientId(), - clientName, - logo, - isVerifierTrustedByWallet, - isVerifierPreRegisteredWithWallet, - authorizationRequest.getRedirectUri() - ); - } - - private List getPreRegisteredVerifiers() throws ApiNotAccessibleException, IOException { - - return verifierService.getTrustedVerifiers().getVerifiers().stream() - .map(verifierDTO -> new Verifier(verifierDTO.getClientId(), verifierDTO.getResponseUris(), verifierDTO.getJwksUri(), verifierDTO.getAllowUnsignedRequest())) - .toList(); - } @Override public String authorizePresentation(PresentationRequestDTO presentationRequestDTO) throws IOException { @@ -141,6 +74,71 @@ public String authorizePresentation(PresentationRequestDTO presentationRequestDT .orElseThrow(() -> new VPNotCreatedException(ErrorConstants.INVALID_REQUEST.getErrorMessage())); } + + + public PresentationDefinitionDTO constructPresentationDefinition(VCCredentialResponse vcRes) { + String vcFormat = vcRes.getFormat(); + List inputDescriptors = new ArrayList<>(); + + if (CredentialFormat.LDP_VC.getFormat().equalsIgnoreCase(vcFormat)) { + VCCredentialProperties ldp = objectMapper.convertValue(vcRes.getCredential(), VCCredentialProperties.class); + String lastType = ldp.getType().get(ldp.getType().size() - 1); + String proofType = Optional.ofNullable(ldp.getProof()).map(VCCredentialResponseProof::getType).orElse(null); + + FieldDTO field = FieldDTO.builder() + .path(new String[]{"$.type"}) + .filter(FilterDTO.builder().type("String").pattern(lastType).build()) + .build(); + + Map>> format = Map.of( + "ldpVc", Map.of("proofTypes", List.of(proofType)) + ); + + inputDescriptors.add(InputDescriptorDTO.builder() + .id(UUID.randomUUID().toString()) + .constraints(ConstraintsDTO.builder().fields(new FieldDTO[]{field}).build()) + .format(format) + .build()); + + } else if (CredentialFormat.VC_SD_JWT.getFormat().equalsIgnoreCase(vcFormat) || CredentialFormat.DC_SD_JWT.getFormat().equalsIgnoreCase(vcFormat)) { + Map jwtPayload = extractJwtPayloadFromSdJwt((String) vcRes.getCredential()); + List typeList = (List) jwtPayload.get("type"); + String lastType = null; + if (typeList != null && !typeList.isEmpty()) { + Object lastItem = typeList.get(typeList.size() - 1); + if (lastItem instanceof Map) { + Object value = ((Map) lastItem).get("_value"); + lastType = value != null ? value.toString() : null; + } else { + lastType = lastItem.toString(); + } + } + Map jwtHeaders = parseJwtHeader((String) vcRes.getCredential()); + String algo = (String) jwtHeaders.get("alg"); + + FieldDTO field = FieldDTO.builder() + .path(new String[]{"$.type"}) + .filter(FilterDTO.builder().type("String").pattern(lastType).build()) + .build(); + Map>> format = Map.of( + vcRes.getFormat(), Map.of( + "sd-jwt_alg_values", List.of(algo) + ) + ); + inputDescriptors.add(InputDescriptorDTO.builder() + .id(UUID.randomUUID().toString()) + .constraints(ConstraintsDTO.builder().fields(new FieldDTO[]{field}).build()) + .format(format) + .build()); + + } + return PresentationDefinitionDTO.builder() + .id(UUID.randomUUID().toString()) + .inputDescriptors(inputDescriptors) + .build(); + } + + private String processInputDescriptor(VCCredentialResponse vcCredentialResponse, InputDescriptorDTO inputDescriptorDTO, PresentationRequestDTO presentationRequestDTO, PresentationDefinitionDTO presentationDefinitionDTO) throws JsonProcessingException { String format = vcCredentialResponse.getFormat(); @@ -229,6 +227,13 @@ private String postVpToResponseUri(String responseUri, String redirectUri, Strin postRequest, Map.class ); + + // Use request's redirectUri if it's non-blank + if (redirectUri != null && !redirectUri.isBlank()) { + log.info("Using redirectUri from request: {}", redirectUri); + return redirectUri; + } + log.info("Response from verifier after POST: {}", postResponse); // Check for redirect_uri in response first @@ -239,12 +244,6 @@ private String postVpToResponseUri(String responseUri, String redirectUri, Strin } } - // Use request's redirectUri if it's non-blank - if (redirectUri != null && !redirectUri.isBlank()) { - log.info("Using redirectUri from request: {}", redirectUri); - return redirectUri; - } - // Fallback behavior if redirect_uri is not provided log.warn("No redirect_uri received from verifier in POST response. Falling back to response_uri."); return responseUri + "?status=vp_sent"; @@ -290,82 +289,4 @@ private String constructPresentationSubmission(String format, VerifiablePresenta return objectMapper.writeValueAsString(presentationSubmissionDTO); } - public PresentationDefinitionDTO constructPresentationDefinition(VCCredentialResponse vcRes) { - String vcFormat = vcRes.getFormat(); - List inputDescriptors = new ArrayList<>(); - - if (CredentialFormat.LDP_VC.getFormat().equalsIgnoreCase(vcFormat)) { - VCCredentialProperties ldp = objectMapper.convertValue(vcRes.getCredential(), VCCredentialProperties.class); - String lastType = ldp.getType().get(ldp.getType().size() - 1); - String proofType = Optional.ofNullable(ldp.getProof()).map(VCCredentialResponseProof::getType).orElse(null); - - FieldDTO field = FieldDTO.builder() - .path(new String[]{"$.type"}) - .filter(FilterDTO.builder().type("String").pattern(lastType).build()) - .build(); - - Map>> format = Map.of( - "ldpVc", Map.of("proofTypes", List.of(proofType)) - ); - - inputDescriptors.add(InputDescriptorDTO.builder() - .id(UUID.randomUUID().toString()) - .constraints(ConstraintsDTO.builder().fields(new FieldDTO[]{field}).build()) - .format(format) - .build()); - - } else if (CredentialFormat.VC_SD_JWT.getFormat().equalsIgnoreCase(vcFormat) || CredentialFormat.DC_SD_JWT.getFormat().equalsIgnoreCase(vcFormat)) { - Map jwtPayload = extractJwtPayloadFromSdJwt((String) vcRes.getCredential()); - List typeList = (List) jwtPayload.get("type"); - String lastType = null; - if (typeList != null && !typeList.isEmpty()) { - Object lastItem = typeList.get(typeList.size() - 1); - if (lastItem instanceof Map) { - Object value = ((Map) lastItem).get("_value"); - lastType = value != null ? value.toString() : null; - } else { - lastType = lastItem.toString(); - } - } - Map jwtHeaders = parseJwtHeader((String) vcRes.getCredential()); - String algo = (String) jwtHeaders.get("alg"); - - FieldDTO field = FieldDTO.builder() - .path(new String[]{"$.type"}) - .filter(FilterDTO.builder().type("String").pattern(lastType).build()) - .build(); - Map>> format = Map.of( - vcRes.getFormat(), Map.of( - "sd-jwt_alg_values", List.of(algo) - ) - ); - inputDescriptors.add(InputDescriptorDTO.builder() - .id(UUID.randomUUID().toString()) - .constraints(ConstraintsDTO.builder().fields(new FieldDTO[]{field}).build()) - .format(format) - .build()); - - } - return PresentationDefinitionDTO.builder() - .id(UUID.randomUUID().toString()) - .inputDescriptors(inputDescriptors) - .build(); - } - - @Override - public SubmitPresentationResponseDTO rejectVerifier(String walletId, VerifiablePresentationSessionData vpSessionData, ErrorDTO payload) throws VPErrorNotSentException { - try { - VerifierResponse verifierResponse = openID4VPService.sendErrorToVerifier(vpSessionData, payload); - log.info("Sent rejection to verifier. Response: {}", verifierResponse); - - SubmitPresentationResponseDTO submitPresentationResponseDTO = new SubmitPresentationResponseDTO(); - submitPresentationResponseDTO.setStatus(REJECTED_VERIFIER.getErrorCode()); - submitPresentationResponseDTO.setMessage(REJECTED_VERIFIER.getErrorMessage()); - submitPresentationResponseDTO.setRedirectUri(verifierResponse.getRedirectUri()); - return submitPresentationResponseDTO; - } catch (ApiNotAccessibleException | IOException | URISyntaxException | IllegalArgumentException e ) { - log.error("Failed to send rejection to verifier for walletId: {} - Error: {}", walletId, e.getMessage(), e); - throw new VPErrorNotSentException("Failed to send rejection to verifier - " + e.getMessage()); - } - } } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/impl/PresentationSubmissionServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/PresentationSubmissionServiceImpl.java deleted file mode 100644 index f749d9b3a..000000000 --- a/src/main/java/io/mosip/mimoto/service/impl/PresentationSubmissionServiceImpl.java +++ /dev/null @@ -1,495 +0,0 @@ -package io.mosip.mimoto.service.impl; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.nimbusds.jose.JOSEException; -import com.nimbusds.jose.JWSAlgorithm; -import com.nimbusds.jose.JWSHeader; -import com.nimbusds.jose.JWSSigner; -import com.nimbusds.jose.jwk.JWK; -import com.nimbusds.jose.util.Base64URL; -import io.mosip.mimoto.constant.OpenID4VPConstants; -import io.mosip.mimoto.constant.SigningAlgorithm; -import io.mosip.mimoto.dto.DecryptedCredentialDTO; -import io.mosip.mimoto.dto.SubmitPresentationRequestDTO; -import io.mosip.mimoto.dto.SubmitPresentationResponseDTO; -import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; -import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; -import io.mosip.mimoto.exception.ApiNotAccessibleException; -import io.mosip.mimoto.exception.DecryptionException; -import io.mosip.mimoto.exception.KeyGenerationException; -import io.mosip.mimoto.model.VerifiablePresentation; -import io.mosip.mimoto.repository.VerifiablePresentationsRepository; -import io.mosip.mimoto.service.KeyPairService; -import io.mosip.mimoto.service.PresentationSubmissionService; -import io.mosip.mimoto.service.VerifierService; -import io.mosip.mimoto.util.Base64Util; -import io.mosip.mimoto.util.JwtGeneratorUtil; -import io.mosip.mimoto.util.UrlParameterUtils; -import io.mosip.openID4VP.OpenID4VP; -import io.mosip.openID4VP.authorizationRequest.Verifier; -import io.mosip.openID4VP.authorizationResponse.unsignedVPToken.UnsignedVPToken; -import io.mosip.openID4VP.authorizationResponse.unsignedVPToken.types.ldp.UnsignedLdpVPToken; -import io.mosip.openID4VP.authorizationResponse.vpTokenSigningResult.VPTokenSigningResult; -import io.mosip.openID4VP.authorizationResponse.vpTokenSigningResult.types.ldp.LdpVPTokenSigningResult; -import io.mosip.openID4VP.constants.FormatType; -import io.mosip.openID4VP.verifier.VerifierResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.security.KeyPair; -import java.time.LocalDateTime; -import java.util.*; -import java.util.stream.Collectors; - -/** - * Service implementation for handling presentation submission operations - */ -@Slf4j -@Service -public class PresentationSubmissionServiceImpl implements PresentationSubmissionService { - - private static final String DEFAULT_SIGNATURE_SUITE = "JsonWebSignature2020"; - private static final String UNKNOWN_VERIFIER = "unknown"; - private static final String EMPTY_JSON = "{}"; - private static final String DEFAULT_SIGNING_ALGORITHM_NAME = "ED25519"; - - @Autowired - private ObjectMapper objectMapper; - - @Autowired - private OpenID4VPService openID4VPService; - - @Autowired - private VerifierService verifierService; - - @Autowired - private KeyPairService keyPairService; - - @Autowired - private VerifiablePresentationsRepository verifiablePresentationsRepository; - - @Override - public SubmitPresentationResponseDTO submitPresentation(VerifiablePresentationSessionData sessionData, String walletId, String presentationId, SubmitPresentationRequestDTO request, String base64Key) throws ApiNotAccessibleException, IOException, JOSEException, KeyGenerationException, DecryptionException { - - LocalDateTime requestedAt = LocalDateTime.now(); - - validateInputs(request); - - log.info("Starting presentation submission for walletId: {}, presentationId: {}", walletId, presentationId); - - // Step 1: Fetch full credentials by ID from cache - List selectedCredentials = fetchSelectedCredentials(sessionData, request.getSelectedCredentials()); - - // Step 2: Create OpenID4VP instance and construct unsigned VP token - OpenID4VP openID4VP = openID4VPService.create(presentationId); - List preRegisteredVerifiers = verifierService.getTrustedVerifiers().getVerifiers().stream() - .map(verifierDTO -> new Verifier(verifierDTO.getClientId(), verifierDTO.getResponseUris(), verifierDTO.getJwksUri(), verifierDTO.getAllowUnsignedRequest())) - .toList(); - openID4VP.authenticateVerifier(sessionData.getAuthorizationRequest(), preRegisteredVerifiers, sessionData.isVerifierClientPreregistered()); - - // Use configurable signing algorithm - SigningAlgorithm signingAlgorithm = SigningAlgorithm.valueOf(DEFAULT_SIGNING_ALGORITHM_NAME); - KeyPair keyPair = keyPairService.getKeyPairFromDB(walletId, base64Key, signingAlgorithm); - JWK jwk = JwtGeneratorUtil.generateJwk(signingAlgorithm, keyPair); - Map unsignedVPToken = constructUnsignedVPToken(openID4VP, selectedCredentials, jwk); - - // Step 3: Sign token using user's private key - JWSSigner jwsSigner = JwtGeneratorUtil.createSigner(signingAlgorithm, jwk); - Map vpTokenSigningResults = signVPToken(unsignedVPToken, jwsSigner, walletId, base64Key); - - // Step 4: Share verifiable presentation with verifier using OpenID4VP JAR - log.debug("Calling OpenID4VP JAR's shareVerifiablePresentation method"); - // Cast to the expected type for the JAR method - @SuppressWarnings({"unchecked", "rawtypes"}) Map jarMap = (Map) vpTokenSigningResults; - try { - VerifierResponse response = openID4VP.sendVPResponseToVerifier(jarMap); - boolean shareSuccess = response.getStatusCode() >= 200 && response.getStatusCode() < 300; - // Step 5: Store presentation record in database - storePresentationRecord(walletId, presentationId, request, sessionData, shareSuccess, requestedAt); - // Step 6: Return success response - return SubmitPresentationResponseDTO.builder() - .redirectUri(response.getRedirectUri()) - .status(shareSuccess ? OpenID4VPConstants.STATUS_SUCCESS : OpenID4VPConstants.STATUS_ERROR) - .message(shareSuccess ? OpenID4VPConstants.MESSAGE_PRESENTATION_SUCCESS : OpenID4VPConstants.MESSAGE_PRESENTATION_SHARE_FAILED) - .build(); - } catch (Exception e) { - log.error("Failed to share verifiable presentation with verifier", e); - // Store failed presentation record - storePresentationRecord(walletId, presentationId, request, sessionData, false, requestedAt); - return SubmitPresentationResponseDTO.builder() - .redirectUri(null) - .status(OpenID4VPConstants.STATUS_ERROR) - .message(OpenID4VPConstants.MESSAGE_PRESENTATION_SHARE_FAILED) - .build(); - } - } - - /** - * Signs VP token using JWSSigner for different format types - * This method delegates to format-specific signing methods - * - * @param unsignedVPTokensMap Map of unsigned VP tokens by format type - * @param jwsSigner The JWS signer to use for signing operations (for LDP_VC) - * @param walletId The wallet ID for fetching keypairs (for MSO_MDOC) - * @param base64Key The base64 encoded wallet key for decryption (for MSO_MDOC) - * @return Map of signed VP token results by format type - * @throws KeyGenerationException if key pair retrieval or generation fails - */ - private Map signVPToken(Map unsignedVPTokensMap, JWSSigner jwsSigner, String walletId, String base64Key) throws KeyGenerationException { - log.debug("Signing VP token for {} format types", unsignedVPTokensMap.size()); - - return unsignedVPTokensMap.entrySet().stream().map(entry -> { - FormatType formatType = entry.getKey(); - UnsignedVPToken unsignedVPToken = entry.getValue(); - - try { - LdpVPTokenSigningResult signingResult = switch (formatType) { - case LDP_VC -> signLdpVcFormat(unsignedVPToken, jwsSigner); - case MSO_MDOC -> signMsoMdocFormat(unsignedVPToken, walletId, base64Key); - default -> { - log.warn("Unsupported format type: {}", formatType); - yield null; - } - }; - - return signingResult != null ? Map.entry(formatType, signingResult) : null; - } catch (JOSEException | IOException | KeyGenerationException | DecryptionException e) { - throw new RuntimeException("Failed to sign VP token for format: " + formatType, e); - } - }).filter(Objects::nonNull).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); - } - - /** - * Signs LDP_VC format verifiable presentation using detached JWT - * - * @param unsignedVPToken The unsigned VP token - * @param jwsSigner The JWS signer (EdDSA) for signing - * @return Signing result with detached JWT proof - * @throws JOSEException if JWT signing fails - */ - private LdpVPTokenSigningResult signLdpVcFormat(UnsignedVPToken unsignedVPToken, JWSSigner jwsSigner) throws JOSEException { - log.debug("Signing LDP_VC format VP token"); - - String dataToSign = ((UnsignedLdpVPToken) unsignedVPToken).getDataToSign(); - - JWSHeader header = new JWSHeader.Builder(JWSAlgorithm.EdDSA).criticalParams(Set.of(OpenID4VPConstants.JWT_CRITICAL_PARAM_B64)).base64URLEncodePayload(false).build(); - - byte[] vpTokenBytes = Base64Util.decodeFlexible(dataToSign); - - // Create header bytes for signing input - String headerJson = header.toString(); - String header64 = Base64Util.encode(headerJson); - - // Create input bytes for detached JWT signing: header + '.' + payload - byte[] inputBytes = Base64Util.createDetachedJwtSigningInput(header64, vpTokenBytes); - - // Sign using the provided JWSSigner - Base64URL signatureBase64URL = jwsSigner.sign(header, inputBytes); - String signature = signatureBase64URL.toString(); - - // Create the detached JWT proof: header64 + '..' + signature - String proof = header64 + OpenID4VPConstants.DETACHED_JWT_SEPARATOR + signature; - - Map signingResultData = new HashMap<>(); - signingResultData.put(OpenID4VPConstants.JWS, proof); - signingResultData.put(OpenID4VPConstants.PROOF_VALUE, null); - signingResultData.put(OpenID4VPConstants.SIGNATURE_ALGORITHM, DEFAULT_SIGNATURE_SUITE); - - return objectMapper.convertValue(signingResultData, LdpVPTokenSigningResult.class); - } - - /** - * Signs MSO_MDOC format verifiable presentation - * Creates ES256 keypair and signs each document type - * - * @param unsignedVPToken The unsigned VP token - * @param walletId The wallet ID for fetching keypairs - * @param base64Key The base64 encoded wallet key for decryption - * @return Signing result with document type signatures - * @throws JOSEException if JWT signing fails - * @throws IOException if I/O operations fail - * @throws KeyGenerationException if key pair retrieval or generation fails - * @throws DecryptionException if decryption of private key fails - */ - private LdpVPTokenSigningResult signMsoMdocFormat(UnsignedVPToken unsignedVPToken, String walletId, String base64Key) throws JOSEException, IOException, KeyGenerationException, DecryptionException { - log.debug("Signing MSO_MDOC format VP token"); - - // Convert UnsignedVPToken to Map for MSO_MDOC format - @SuppressWarnings("unchecked") Map credentials = objectMapper.convertValue(unsignedVPToken, Map.class); - Map> documentTypeSignatures = new HashMap<>(); - - // For MSO_MDOC format, look for docTypeToDeviceAuthenticationBytes - if (!credentials.containsKey(OpenID4VPConstants.DOC_TYPE_TO_DEVICE_AUTHENTICATION_BYTES)) { - log.warn("MSO_MDOC format type but no docTypeToDeviceAuthenticationBytes found"); - return createMsoMdocSigningResult(documentTypeSignatures); - } - - @SuppressWarnings("unchecked") Map docTypeToDeviceAuthenticationBytes = (Map) credentials.get(OpenID4VPConstants.DOC_TYPE_TO_DEVICE_AUTHENTICATION_BYTES); - - if (docTypeToDeviceAuthenticationBytes == null) { - return createMsoMdocSigningResult(documentTypeSignatures); - } - - // Get MDOC authentication algorithm (defaulting to ES256) - String mdocAuthenticationAlgorithm = OpenID4VPConstants.ALGORITHM_ES256; - SigningAlgorithm mdocSigningAlgorithm = SigningAlgorithm.ES256; - - // Fetch key pair for MSO_MDOC signing (ES256 algorithm) - log.debug("Fetching ES256 keypair for MSO_MDOC signing for walletId: {}", walletId); - KeyPair mdocKeyPair = keyPairService.getKeyPairFromDB(walletId, base64Key, mdocSigningAlgorithm); - JWK mdocJwk = JwtGeneratorUtil.generateJwk(mdocSigningAlgorithm, mdocKeyPair); - JWSSigner mdocSigner = JwtGeneratorUtil.createSigner(mdocSigningAlgorithm, mdocJwk); - - // Process each docType entry using streams - Map> signedDocTypes = docTypeToDeviceAuthenticationBytes.entrySet().stream().map(docTypeEntry -> { - String docType = docTypeEntry.getKey(); - Object payload = docTypeEntry.getValue(); - - log.debug("Processing MSO_MDOC docType: {} with algorithm: {}", docType, mdocAuthenticationAlgorithm); - - try { - String signature = signMsoMdocDocType(payload, mdocSigner); - - // If signature was created successfully - if (signature != null && !signature.isEmpty()) { - Map docTypeResult = new HashMap<>(); - docTypeResult.put(OpenID4VPConstants.SIGNATURE, signature); - docTypeResult.put(OpenID4VPConstants.MDOC_AUTHENTICATION_ALGORITHM, mdocAuthenticationAlgorithm); - - log.debug("Successfully signed MSO_MDOC docType: {} with algorithm: {}", docType, mdocAuthenticationAlgorithm); - - return Map.entry(docType, docTypeResult); - } - return null; - } catch (JOSEException | IOException e) { - log.error("Failed to sign MSO_MDOC docType: {}", docType, e); - throw new RuntimeException("Failed to sign docType: " + docType, e); - } - }).filter(Objects::nonNull).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); - - documentTypeSignatures.putAll(signedDocTypes); - - return createMsoMdocSigningResult(documentTypeSignatures); - } - - /** - * Signs a single MSO_MDOC document type payload - * - * @param payload The payload to sign (string or object) - * @param mdocSigner The ES256 signer - * @return Base64URL encoded signature - * @throws JOSEException if signing operation fails - * @throws IOException if payload serialization fails - */ - private String signMsoMdocDocType(Object payload, JWSSigner mdocSigner) throws JOSEException, IOException { - // Create JWSHeader for ES256 algorithm - JWSHeader header = new JWSHeader.Builder(JWSAlgorithm.ES256).build(); - - // Convert payload to bytes for signing - byte[] payloadBytes; - if (payload instanceof String) { - payloadBytes = ((String) payload).getBytes(StandardCharsets.UTF_8); - } else { - payloadBytes = objectMapper.writeValueAsBytes(payload); - } - - // Sign using the MSO_MDOC specific signer (ES256) - Base64URL signatureBase64URL = mdocSigner.sign(header, payloadBytes); - return signatureBase64URL.toString(); - } - - /** - * Creates MSO_MDOC signing result from document type signatures - * - * @param documentTypeSignatures Map of document type to signature data - * @return LdpVPTokenSigningResult - */ - private LdpVPTokenSigningResult createMsoMdocSigningResult(Map> documentTypeSignatures) { - Map signingResultData = new HashMap<>(); - signingResultData.put(OpenID4VPConstants.DOCUMENT_TYPE_SIGNATURES, documentTypeSignatures); - return objectMapper.convertValue(signingResultData, LdpVPTokenSigningResult.class); - } - - /** - * Fetches selected credentials from the session cache - */ - private List fetchSelectedCredentials(VerifiablePresentationSessionData sessionData, List selectedCredentialIds) { - - log.debug("Fetching {} selected credentials from cache", selectedCredentialIds.size()); - - if (sessionData.getMatchingCredentials() == null) { - throw new IllegalStateException("No matching credentials found in session cache"); - } - - return sessionData.getMatchingCredentials().stream() - .filter(credential -> selectedCredentialIds.contains(credential.getId())) - .collect(Collectors.toList()); - } - - /** - * Constructs unsigned VP token using the OpenID4VP JAR - */ - private Map constructUnsignedVPToken(OpenID4VP openID4VP, List credentials, JWK jwk) throws JsonProcessingException { - - log.debug("Constructing unsigned VP token for {} credentials", credentials.size()); - - Map>> verifiableCredentials = convertCredentialsToJarFormat(credentials); - String holderId = resolveHolderId(jwk); - return openID4VP.constructUnsignedVPToken(verifiableCredentials, holderId, DEFAULT_SIGNATURE_SUITE); - - } - - /** - * Resolves holderId from the user's public key using JWK format - */ - private String resolveHolderId(JWK jwk) throws JsonProcessingException{ - - // Convert JWK to JSON string - String jwkJson = objectMapper.writeValueAsString(jwk.toPublicJWK().toJSONObject()); - - // Base64URL encode the JWK JSON - String base64UrlEncodedJwk = Base64Util.encode(jwkJson); - - // Construct holderId: did:jwk:{base64url(jwk)}#0 - return OpenID4VPConstants.DID_JWK_PREFIX + base64UrlEncodedJwk + OpenID4VPConstants.DID_KEY_FRAGMENT; - } - - /** - * Converts DecryptedCredentialDTO list to the format expected by the OpenID4VP JAR - * Extracts the inner credential data from VCCredentialResponse wrapper to remove the "credential" wrapper - */ - private Map>> convertCredentialsToJarFormat(List credentials) { - - return credentials.stream().collect(Collectors.groupingBy(DecryptedCredentialDTO::getId, Collectors.collectingAndThen(Collectors.toList(), credList -> credList.stream().collect(Collectors.groupingBy(credential -> { - // Get format and credential data - VCCredentialResponse vcCredentialResponse = credential.getCredential(); - String credentialFormat = vcCredentialResponse.getFormat(); - // Convert format string to FormatType enum - return mapStringToFormatType(credentialFormat); - }, Collectors.mapping(credential -> credential.getCredential().getCredential(), Collectors.toList())))))); - } - - /** - * Maps format string to FormatType enum - */ - private FormatType mapStringToFormatType(String format) { - if (format == null) { - return FormatType.LDP_VC; // Default fallback - } - - return switch (format.toLowerCase()) { - case OpenID4VPConstants.FORMAT_LDP_VC_UNDERSCORE, OpenID4VPConstants.FORMAT_LDP_VC_HYPHEN -> - FormatType.LDP_VC; - case OpenID4VPConstants.FORMAT_MSO_MDOC_UNDERSCORE, OpenID4VPConstants.FORMAT_MSO_MDOC_HYPHEN -> - FormatType.MSO_MDOC; - // Add other supported formats as they become available in the OpenID4VP library - default -> { - log.warn("Unknown credential format: {}, defaulting to LDP_VC", format); - yield FormatType.LDP_VC; - } - }; - } - - /** - * Stores presentation record in the database - * Uses @Transactional to ensure atomicity of database operations - */ - private void storePresentationRecord(String walletId, String presentationId, SubmitPresentationRequestDTO request, VerifiablePresentationSessionData sessionData, boolean success, LocalDateTime requestedAt) { - log.debug("Storing presentation record in database - success: {}", success); - - try { - if (sessionData == null) { - log.warn("Session data is null for presentationId: {}", presentationId); - return; - } - - // Extract verifier information from OpenID4VP object - String verifierId = extractVerifierId(sessionData); - String authRequest = extractVerifierAuthRequest(sessionData); - String presentationData = createPresentationData(request); - - // Create the presentation record - VerifiablePresentation presentation = VerifiablePresentation.builder().id(presentationId).walletId(walletId).authRequest(authRequest).presentationData(presentationData).verifierId(verifierId).status(success ? OpenID4VPConstants.STATUS_SUCCESS : OpenID4VPConstants.STATUS_ERROR).requestedAt(requestedAt).consent(true).build(); - - // Save to database - verifiablePresentationsRepository.save(presentation); - - log.info("Presentation record stored successfully - recordId: {}, walletId: {}, presentationId: {}, status: {}", presentationId, walletId, presentationId, success ? OpenID4VPConstants.STATUS_SUCCESS : OpenID4VPConstants.STATUS_ERROR); - - } catch (Exception e) { - log.error("CRITICAL: Failed to store presentation record - walletId: {}, presentationId: {}, verifierId: {}, success: {}", walletId, presentationId, sessionData != null ? extractVerifierId(sessionData) : "unknown", success, e); - } - } - - /** - * Extracts verifier ID from session data - */ - private String extractVerifierId(VerifiablePresentationSessionData sessionData) { - try { - // Since authorizationRequest is a URL, we need to extract client_id from URL parameters - if (sessionData.getAuthorizationRequest() != null) { - String authRequestUrl = sessionData.getAuthorizationRequest(); - return UrlParameterUtils.extractClientIdFromUrl(authRequestUrl); - } - } catch (Exception e) { - log.warn("Failed to extract verifier ID", e); - } - return UNKNOWN_VERIFIER; - } - - /** - * Extracts verifier authorization request as JSON - */ - private String extractVerifierAuthRequest(VerifiablePresentationSessionData sessionData) { - try { - if (sessionData.getAuthorizationRequest() != null) { - // Convert the URL string to a JSON object - Map authRequestData = new HashMap<>(); - authRequestData.put(OpenID4VPConstants.AUTHORIZATION_REQUEST_URL, sessionData.getAuthorizationRequest()); - return objectMapper.writeValueAsString(authRequestData); - } - } catch (Exception e) { - log.warn("Failed to extract verifier auth request", e); - } - return EMPTY_JSON; - } - - /** - * Creates presentation data JSON with selected credentials and metadata - */ - private String createPresentationData(SubmitPresentationRequestDTO request) { - try { - Map presentationData = new HashMap<>(); - presentationData.put(OpenID4VPConstants.SELECTED_CREDENTIALS, request.getSelectedCredentials()); - - return objectMapper.writeValueAsString(presentationData); - } catch (Exception e) { - log.warn("Failed to create presentation data", e); - return EMPTY_JSON; - } - } - - /** - * Validates all input parameters for presentation submission - * - * @throws IllegalArgumentException if any input is invalid - */ - private void validateInputs(SubmitPresentationRequestDTO request) { - - if (request == null) { - log.error("Request cannot be null"); - throw new IllegalArgumentException("Request cannot be null"); - } - - if (request.getSelectedCredentials() == null || request.getSelectedCredentials().isEmpty()) { - log.error("Selected credentials cannot be null or empty"); - throw new IllegalArgumentException("Selected credentials cannot be null or empty"); - } - - log.debug("Input validation passed for request: {}", request); - } -} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java index 51988594c..28da00d6b 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java @@ -9,6 +9,7 @@ import io.mosip.mimoto.exception.InvalidVerifierException; import io.mosip.mimoto.repository.VerifierRepository; import io.mosip.mimoto.service.VerifierService; +import io.mosip.mimoto.constant.OpenID4VPConstants; import io.mosip.mimoto.util.UrlParameterUtils; import io.mosip.mimoto.util.Utilities; import io.mosip.openID4VP.authorizationRequest.Verifier; @@ -97,8 +98,9 @@ public boolean isVerifierClientPreregistered(List preRegisteredVerifie return false; } - String clientId = UrlParameterUtils.extractClientIdFromUrl(urlEncodedVPAuthorizationRequest); - List responseUris = UrlParameterUtils.extractResponseUrisFromUrl(urlEncodedVPAuthorizationRequest); + String clientId = UrlParameterUtils.extractQueryParameter(urlEncodedVPAuthorizationRequest, OpenID4VPConstants.CLIENT_ID_PARAM); + String responseUriValue = UrlParameterUtils.extractQueryParameter(urlEncodedVPAuthorizationRequest, OpenID4VPConstants.RESPONSE_URI_PARAM); + List responseUris = responseUriValue != null ? List.of(responseUriValue) : List.of(); if (clientId == null || clientId.trim().isEmpty()) { log.warn("No client_id found in the authorization request URL"); diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletPresentationServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletPresentationServiceImpl.java new file mode 100644 index 000000000..08b766e2c --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletPresentationServiceImpl.java @@ -0,0 +1,519 @@ +package io.mosip.mimoto.service.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.nimbusds.jose.JOSEException; +import com.nimbusds.jose.JWSAlgorithm; +import com.nimbusds.jose.JWSHeader; +import com.nimbusds.jose.JWSSigner; +import com.nimbusds.jose.jwk.JWK; +import com.nimbusds.jose.util.Base64URL; +import io.mosip.mimoto.constant.CredentialFormat; +import io.mosip.mimoto.constant.OpenID4VPConstants; +import io.mosip.mimoto.constant.SigningAlgorithm; +import io.mosip.mimoto.dto.*; +import io.mosip.mimoto.dto.MatchingCredentialsDTO; +import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; +import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; +import io.mosip.mimoto.exception.*; +import io.mosip.mimoto.model.VerifiablePresentation; +import io.mosip.mimoto.repository.VerifiablePresentationsRepository; +import io.mosip.mimoto.service.CredentialMatchingService; +import io.mosip.mimoto.service.KeyPairRetrievalService; +import io.mosip.mimoto.service.VerifierService; +import io.mosip.mimoto.service.WalletPresentationService; +import io.mosip.mimoto.util.EncryptionDecryptionUtil; +import io.mosip.mimoto.util.JwtGeneratorUtil; +import io.mosip.mimoto.util.Utilities; +import io.mosip.mimoto.util.UrlParameterUtils; +import io.mosip.openID4VP.OpenID4VP; +import io.mosip.openID4VP.common.EncoderKt; +import io.mosip.openID4VP.authorizationRequest.AuthorizationRequest; +import io.mosip.openID4VP.authorizationRequest.Verifier; +import io.mosip.openID4VP.authorizationRequest.clientMetadata.ClientMetadata; +import io.mosip.openID4VP.authorizationResponse.unsignedVPToken.UnsignedVPToken; +import io.mosip.openID4VP.authorizationResponse.unsignedVPToken.types.ldp.UnsignedLdpVPToken; +import io.mosip.openID4VP.authorizationResponse.vpTokenSigningResult.VPTokenSigningResult; +import io.mosip.openID4VP.authorizationResponse.vpTokenSigningResult.types.ldp.LdpVPTokenSigningResult; +import io.mosip.openID4VP.constants.FormatType; +import io.mosip.openID4VP.verifier.VerifierResponse; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.lang.IllegalArgumentException; +import java.net.URISyntaxException; +import java.nio.charset.StandardCharsets; +import java.security.KeyPair; +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; + +import static io.mosip.mimoto.exception.ErrorConstants.*; + +/** + * Service implementation for handling wallet presentation operations + */ +@Slf4j +@Service +public class WalletPresentationServiceImpl implements WalletPresentationService { + + private static final String DEFAULT_SIGNATURE_SUITE = "JsonWebSignature2020"; + private static final String UNKNOWN_VERIFIER = "unknown"; + private static final String EMPTY_JSON = "{}"; + private static final String DEFAULT_SIGNING_ALGORITHM_NAME = "ED25519"; + + @Autowired + private VerifierService verifierService; + + @Autowired + private OpenID4VPService openID4VPService; + + @Autowired + private ObjectMapper objectMapper; + + @Autowired + private KeyPairRetrievalService keyPairService; + + @Autowired + private CredentialMatchingService credentialMatchingService; + + @Autowired + private VerifiablePresentationsRepository verifiablePresentationsRepository; + + @Autowired + private EncryptionDecryptionUtil encryptionDecryptionUtil; + + @Override + public VPResponseDTO handleVPAuthorizationRequest(String urlEncodedVPAuthorizationRequest, String walletId) throws ApiNotAccessibleException, IOException, URISyntaxException { + String presentationId = UUID.randomUUID().toString(); + + //Initialize OpenID4VP instance with presentationId as traceability id for each new Verifiable Presentation request + OpenID4VP openID4VP = openID4VPService.create(presentationId); + + List preRegisteredVerifiers = getPreRegisteredVerifiers(); + boolean shouldValidateClient = verifierService.isVerifierClientPreregistered(preRegisteredVerifiers, urlEncodedVPAuthorizationRequest); + AuthorizationRequest authorizationRequest = openID4VP.authenticateVerifier(urlEncodedVPAuthorizationRequest, preRegisteredVerifiers, shouldValidateClient); + VerifiablePresentationVerifierDTO verifiablePresentationVerifierDTO = createVPResponseVerifierDTO(preRegisteredVerifiers, authorizationRequest, walletId); + + return new VPResponseDTO(presentationId, verifiablePresentationVerifierDTO); + } + + @Override + public MatchingCredentialsDTO getMatchingCredentials(VerifiablePresentationSessionData sessionData, String walletId, String base64Key) throws ApiNotAccessibleException, IOException { + log.debug("Getting matching credentials for walletId: {}, presentationId: {}", walletId, sessionData != null ? sessionData.getPresentationId() : "null"); + return credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); + } + + @Override + public ResponseEntity handlePresentationAction(String walletId, String presentationId, SubmitPresentationRequestDTO request, VerifiablePresentationSessionData vpSessionData, String base64Key) { + + log.info("Processing presentation action for walletId: {}, presentationId: {}", walletId, presentationId); + + try { + // Determine the action based on request content + if (request.isSubmissionRequest()) { + log.info("Processing presentation submission for presentationId: {}", presentationId); + return handlePresentationSubmission(walletId, presentationId, request, vpSessionData, base64Key); + + } else if (request.isRejectionRequest()) { + log.info("Processing verifier rejection for presentationId: {}", presentationId); + return handleVerifierRejection(walletId, vpSessionData, request); + + } else { + log.warn("Invalid request format - must contain either selectedCredentials or both errorCode and errorMessage"); + return Utilities.getErrorResponseEntityWithoutWrapper(new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Request must contain either selectedCredentials or both errorCode and errorMessage"), INVALID_REQUEST.getErrorCode(), HttpStatus.BAD_REQUEST, MediaType.APPLICATION_JSON); + } + + } catch (JOSEException exception) { + log.error("JWT signing error during presentation action for walletId: {}, presentationId: {}", walletId, presentationId, exception); + return Utilities.getErrorResponseEntityWithoutWrapper(exception, JWT_SIGNING_ERROR.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); + + } catch (KeyGenerationException exception) { + log.error("Key generation/retrieval error during presentation action for walletId: {}, presentationId: {}", walletId, presentationId, exception); + return Utilities.getErrorResponseEntityWithoutWrapper(exception, KEY_GENERATION_ERROR.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); + + } catch (DecryptionException exception) { + log.error("Decryption error during presentation action for walletId: {}, presentationId: {}", walletId, presentationId, exception); + return Utilities.getErrorResponseEntityWithoutWrapper(exception, DECRYPTION_ERROR.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); + + } catch (ApiNotAccessibleException | IOException exception) { + log.error("Error during presentation action for walletId: {}, presentationId: {}", walletId, presentationId, exception); + return Utilities.getErrorResponseEntityWithoutWrapper(exception, WALLET_CREATE_VP_EXCEPTION.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); + + } catch (VPErrorNotSentException exception) { + log.error("Error sending rejection to verifier for walletId: {}, presentationId: {}", walletId, presentationId, exception); + return Utilities.getErrorResponseEntityWithoutWrapper(exception, REJECT_VERIFIER_EXCEPTION.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); + + } catch (IllegalStateException exception) { + log.error("Invalid state during presentation action for walletId: {}, presentationId: {}", walletId, presentationId, exception); + return Utilities.getErrorResponseEntityWithoutWrapper(exception, WALLET_CREATE_VP_EXCEPTION.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); + + } catch (IllegalArgumentException exception) { + log.error("Invalid argument during presentation action for walletId: {}, presentationId: {}", walletId, presentationId, exception); + return Utilities.getErrorResponseEntityWithoutWrapper(exception, INVALID_REQUEST.getErrorCode(), HttpStatus.BAD_REQUEST, MediaType.APPLICATION_JSON); + } + } + + /** + * Creates a VerifiablePresentationVerifierDTO from the authorization request + */ + private VerifiablePresentationVerifierDTO createVPResponseVerifierDTO(List preRegisteredVerifiers, AuthorizationRequest authorizationRequest, String walletId) { + boolean isVerifierPreRegisteredWithWallet = preRegisteredVerifiers.stream().map(Verifier::getClientId).toList().contains(authorizationRequest.getClientId()); + boolean isVerifierTrustedByWallet = verifierService.isVerifierTrustedByWallet(authorizationRequest.getClientId(), walletId); + String clientName = Optional.ofNullable(authorizationRequest.getClientMetadata()).map(ClientMetadata::getClientName).filter(name -> !name.isBlank()).orElse(authorizationRequest.getClientId()); + String logo = Optional.ofNullable(authorizationRequest.getClientMetadata()).map(ClientMetadata::getLogoUri).orElse(null); + return new VerifiablePresentationVerifierDTO(authorizationRequest.getClientId(), clientName, logo, isVerifierTrustedByWallet, isVerifierPreRegisteredWithWallet, authorizationRequest.getRedirectUri()); + } + + /** + * Gets the list of pre-registered verifiers + */ + private List getPreRegisteredVerifiers() throws ApiNotAccessibleException, IOException { + return verifierService.getTrustedVerifiers().getVerifiers().stream().map(verifierDTO -> new Verifier(verifierDTO.getClientId(), verifierDTO.getResponseUris(), verifierDTO.getJwksUri(), verifierDTO.getAllowUnsignedRequest())).toList(); + } + + /** + * Handles presentation submission with selected credentials + */ + private ResponseEntity handlePresentationSubmission(String walletId, String presentationId, SubmitPresentationRequestDTO request, VerifiablePresentationSessionData sessionData, String base64Key) throws ApiNotAccessibleException, IOException, JOSEException, KeyGenerationException, DecryptionException { + + log.debug("Submitting presentation for walletId: {}, presentationId: {}", walletId, presentationId); + + if (base64Key == null || base64Key.isBlank()) { + log.warn("Wallet key not found for walletId: {}", walletId); + throw new IllegalArgumentException("Wallet key is required for presentation submission"); + } + + SubmitPresentationResponseDTO response = submitPresentation(sessionData, walletId, presentationId, request, base64Key); + + log.info("Presentation submission completed successfully for walletId: {}, presentationId: {}", walletId, presentationId); + return ResponseEntity.status(HttpStatus.OK).body(response); + } + + /** + * Handles verifier rejection with error details + */ + private ResponseEntity handleVerifierRejection(String walletId, VerifiablePresentationSessionData vpSessionData, SubmitPresentationRequestDTO request) throws VPErrorNotSentException { + + log.debug("Rejecting verifier for walletId: {}", walletId); + + // Create ErrorDTO from the request + ErrorDTO errorPayload = new ErrorDTO(); + errorPayload.setErrorCode(request.getErrorCode()); + errorPayload.setErrorMessage(request.getErrorMessage()); + + // Reject the verifier + SubmitPresentationResponseDTO submitPresentationResponseDTO = rejectVerifier(walletId, vpSessionData, errorPayload); + + log.info("Verifier rejection completed successfully for walletId: {}", walletId); + + return ResponseEntity.status(HttpStatus.OK).body(submitPresentationResponseDTO); + } + + /** + * Rejects the verifier by sending error information + */ + private SubmitPresentationResponseDTO rejectVerifier(String walletId, VerifiablePresentationSessionData vpSessionData, ErrorDTO payload) throws VPErrorNotSentException { + try { + VerifierResponse verifierResponse = openID4VPService.sendErrorToVerifier(vpSessionData, payload); + log.info("Sent rejection to verifier. Response: {}", verifierResponse); + + SubmitPresentationResponseDTO submitPresentationResponseDTO = new SubmitPresentationResponseDTO(); + submitPresentationResponseDTO.setStatus(REJECTED_VERIFIER.getErrorCode()); + submitPresentationResponseDTO.setMessage(REJECTED_VERIFIER.getErrorMessage()); + submitPresentationResponseDTO.setRedirectUri(verifierResponse.getRedirectUri()); + return submitPresentationResponseDTO; + } catch (ApiNotAccessibleException | IOException | URISyntaxException | IllegalArgumentException e) { + log.error("Failed to send rejection to verifier for walletId: {} - Error: {}", walletId, e.getMessage(), e); + throw new VPErrorNotSentException("Failed to send rejection to verifier - " + e.getMessage()); + } + } + + /** + * Submits a presentation with selected credentials + */ + public SubmitPresentationResponseDTO submitPresentation(VerifiablePresentationSessionData sessionData, String walletId, String presentationId, SubmitPresentationRequestDTO request, String base64Key) throws ApiNotAccessibleException, IOException, JOSEException, KeyGenerationException, DecryptionException { + + LocalDateTime requestedAt = LocalDateTime.now(); + + validateInputs(request); + + log.info("Starting presentation submission for walletId: {}, presentationId: {}", walletId, presentationId); + + // Step 1: Fetch full credentials by ID from cache + List selectedCredentials = fetchSelectedCredentials(sessionData, request.getSelectedCredentials()); + + // Step 2: Create OpenID4VP instance and construct unsigned VP token + OpenID4VP openID4VP = openID4VPService.create(presentationId); + List preRegisteredVerifiers = verifierService.getTrustedVerifiers().getVerifiers().stream().map(verifierDTO -> new Verifier(verifierDTO.getClientId(), verifierDTO.getResponseUris(), verifierDTO.getJwksUri(), verifierDTO.getAllowUnsignedRequest())).toList(); + openID4VP.authenticateVerifier(sessionData.getAuthorizationRequest(), preRegisteredVerifiers, sessionData.isVerifierClientPreregistered()); + + // Use configurable signing algorithm + SigningAlgorithm signingAlgorithm = SigningAlgorithm.valueOf(DEFAULT_SIGNING_ALGORITHM_NAME); + KeyPair keyPair = keyPairService.getKeyPairFromDB(walletId, base64Key, signingAlgorithm); + JWK jwk = JwtGeneratorUtil.generateJwk(signingAlgorithm, keyPair); + Map unsignedVPToken = constructUnsignedVPToken(openID4VP, selectedCredentials, jwk); + + // Step 3: Sign token using user's private key + JWSSigner jwsSigner = JwtGeneratorUtil.createSigner(signingAlgorithm, jwk); + Map vpTokenSigningResults = signVPToken(unsignedVPToken, jwsSigner); + + // Step 4: Share verifiable presentation with verifier using OpenID4VP JAR + log.debug("Calling OpenID4VP JAR's shareVerifiablePresentation method"); + // Cast to the expected type for the JAR method + @SuppressWarnings({"unchecked", "rawtypes"}) Map jarMap = (Map) vpTokenSigningResults; + try { + VerifierResponse response = openID4VP.sendVPResponseToVerifier(jarMap); + boolean shareSuccess = response.getStatusCode() >= 200 && response.getStatusCode() < 300; + // Step 5: Store presentation record in database + storePresentationRecord(walletId, presentationId, request, sessionData, shareSuccess, requestedAt); + // Step 6: Return success response + return SubmitPresentationResponseDTO.builder().redirectUri(response.getRedirectUri()).status(shareSuccess ? OpenID4VPConstants.STATUS_SUCCESS : OpenID4VPConstants.STATUS_ERROR).message(shareSuccess ? OpenID4VPConstants.MESSAGE_PRESENTATION_SUCCESS : OpenID4VPConstants.MESSAGE_PRESENTATION_SHARE_FAILED).build(); + } catch (Exception e) { + log.error("Failed to share verifiable presentation with verifier", e); + // Store failed presentation record + storePresentationRecord(walletId, presentationId, request, sessionData, false, requestedAt); + return SubmitPresentationResponseDTO.builder().redirectUri(null).status(OpenID4VPConstants.STATUS_ERROR).message(OpenID4VPConstants.MESSAGE_PRESENTATION_SHARE_FAILED).build(); + } + } + + /** + * Signs VP token using JWSSigner for LDP_VC format + * Only LDP_VC format is supported. Throws InvalidRequestException for other formats. + */ + private Map signVPToken(Map unsignedVPTokensMap, JWSSigner jwsSigner) { + log.debug("Signing VP token for {} format types", unsignedVPTokensMap.size()); + + return unsignedVPTokensMap.entrySet().stream().map(entry -> { + FormatType formatType = entry.getKey(); + UnsignedVPToken unsignedVPToken = entry.getValue(); + + if (formatType != FormatType.LDP_VC) { + log.error("Unsupported format type: {}. Only ldp_vc format is supported.", formatType); + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Unsupported credential format: " + formatType + ". Only ldp_vc format is supported."); + } + + try { + LdpVPTokenSigningResult signingResult = signLdpVcFormat(unsignedVPToken, jwsSigner); + return Map.entry(formatType, signingResult); + } catch (JOSEException e) { + throw new RuntimeException("Failed to sign VP token for format: " + formatType, e); + } + }).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + } + + /** + * Signs LDP_VC format verifiable presentation using detached JWT + */ + private LdpVPTokenSigningResult signLdpVcFormat(UnsignedVPToken unsignedVPToken, JWSSigner jwsSigner) throws JOSEException { + log.debug("Signing LDP_VC format VP token"); + + String dataToSign = ((UnsignedLdpVPToken) unsignedVPToken).getDataToSign(); + + JWSHeader header = new JWSHeader.Builder(JWSAlgorithm.EdDSA).criticalParams(Set.of(OpenID4VPConstants.JWT_CRITICAL_PARAM_B64)).base64URLEncodePayload(false).build(); + + // Create detached JWT signing input using EncryptionDecryptionUtil + String headerJson = header.toString(); + byte[] inputBytes = encryptionDecryptionUtil.createDetachedJwtSigningInput(headerJson, dataToSign); + + // Get Base64URL encoded header for proof construction + String header64 = EncoderKt.encodeToBase64Url(headerJson.getBytes(StandardCharsets.UTF_8)); + + // Sign using the provided JWSSigner + Base64URL signatureBase64URL = jwsSigner.sign(header, inputBytes); + String signature = signatureBase64URL.toString(); + + // Create the detached JWT proof: header64 + '..' + signature + String proof = header64 + OpenID4VPConstants.DETACHED_JWT_SEPARATOR + signature; + + Map signingResultData = new HashMap<>(); + signingResultData.put(OpenID4VPConstants.JWS, proof); + signingResultData.put(OpenID4VPConstants.PROOF_VALUE, null); + signingResultData.put(OpenID4VPConstants.SIGNATURE_ALGORITHM, DEFAULT_SIGNATURE_SUITE); + + return objectMapper.convertValue(signingResultData, LdpVPTokenSigningResult.class); + } + + /** + * Fetches selected credentials from the session cache + */ + private List fetchSelectedCredentials(VerifiablePresentationSessionData sessionData, List selectedCredentialIds) { + + log.debug("Fetching {} selected credentials from cache", selectedCredentialIds.size()); + + if (sessionData == null) { + throw new IllegalStateException("Session data is null - cannot fetch credentials"); + } + + if (sessionData.getMatchingCredentials() == null) { + throw new IllegalStateException("No matching credentials found in session cache"); + } + + return sessionData.getMatchingCredentials().stream().filter(credential -> selectedCredentialIds.contains(credential.getId())).collect(Collectors.toList()); + } + + /** + * Constructs unsigned VP token using the OpenID4VP JAR + */ + private Map constructUnsignedVPToken(OpenID4VP openID4VP, List credentials, JWK jwk) throws JsonProcessingException { + + log.debug("Constructing unsigned VP token for {} credentials", credentials.size()); + + Map>> verifiableCredentials = convertCredentialsToJarFormat(credentials); + String holderId = resolveHolderId(jwk); + return openID4VP.constructUnsignedVPToken(verifiableCredentials, holderId, DEFAULT_SIGNATURE_SUITE); + + } + + /** + * Resolves holderId from the user's public key using JWK format + */ + private String resolveHolderId(JWK jwk) throws JsonProcessingException { + + // Convert JWK to JSON string + String jwkJson = objectMapper.writeValueAsString(jwk.toPublicJWK().toJSONObject()); + + // Base64URL encode the JWK JSON + String base64UrlEncodedJwk = EncoderKt.encodeToBase64Url(jwkJson.getBytes(StandardCharsets.UTF_8)); + + // Construct holderId: did:jwk:{base64url(jwk)}#0 + return OpenID4VPConstants.DID_JWK_PREFIX + base64UrlEncodedJwk + OpenID4VPConstants.DID_KEY_FRAGMENT; + } + + /** + * Converts DecryptedCredentialDTO list to the format expected by the OpenID4VP JAR + * Extracts the inner credential data from VCCredentialResponse wrapper to remove the "credential" wrapper + */ + private Map>> convertCredentialsToJarFormat(List credentials) { + + return credentials.stream().collect(Collectors.groupingBy(DecryptedCredentialDTO::getId, Collectors.collectingAndThen(Collectors.toList(), credList -> credList.stream().collect(Collectors.groupingBy(credential -> { + // Get format and credential data + VCCredentialResponse vcCredentialResponse = credential.getCredential(); + String credentialFormat = vcCredentialResponse.getFormat(); + // Convert format string to FormatType enum + return mapStringToFormatType(credentialFormat); + }, Collectors.mapping(credential -> credential.getCredential().getCredential(), Collectors.toList())))))); + } + + /** + * Maps format string to FormatType enum + * Only ldp_vc format is supported. Throws InvalidRequestException for other formats. + */ + private FormatType mapStringToFormatType(String format) { + if (format == null) { + log.error("Credential format is null"); + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Credential format is required. Only ldp_vc format is supported."); + } + + String formatLower = format.toLowerCase(); + if (CredentialFormat.LDP_VC.getFormat().equals(formatLower)) { + return FormatType.LDP_VC; + } + + log.error("Unsupported credential format: {}. Only ldp_vc format is supported.", format); + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Unsupported credential format: " + format + ". Only ldp_vc format is supported."); + } + + /** + * Stores presentation record in the database + * Uses @Transactional to ensure atomicity of database operations + */ + private void storePresentationRecord(String walletId, String presentationId, SubmitPresentationRequestDTO request, VerifiablePresentationSessionData sessionData, boolean success, LocalDateTime requestedAt) { + log.debug("Storing presentation record in database - success: {}", success); + + try { + if (sessionData == null) { + log.warn("Session data is null for presentationId: {}", presentationId); + return; + } + + // Extract verifier information from OpenID4VP object + String verifierId = extractVerifierId(sessionData); + String authRequest = extractVerifierAuthRequest(sessionData); + String presentationData = createPresentationData(request); + + // Create the presentation record + VerifiablePresentation presentation = VerifiablePresentation.builder().id(presentationId).walletId(walletId).authRequest(authRequest).presentationData(presentationData).verifierId(verifierId).status(success ? OpenID4VPConstants.STATUS_SUCCESS : OpenID4VPConstants.STATUS_ERROR).requestedAt(requestedAt).consent(true).build(); + + // Save to database + verifiablePresentationsRepository.save(presentation); + + log.info("Presentation record stored successfully - recordId: {}, walletId: {}, presentationId: {}, status: {}", presentationId, walletId, presentationId, success ? OpenID4VPConstants.STATUS_SUCCESS : OpenID4VPConstants.STATUS_ERROR); + + } catch (Exception e) { + log.error("CRITICAL: Failed to store presentation record - walletId: {}, presentationId: {}, verifierId: {}, success: {}", walletId, presentationId, sessionData != null ? extractVerifierId(sessionData) : "unknown", success, e); + } + } + + /** + * Extracts verifier ID from session data + */ + private String extractVerifierId(VerifiablePresentationSessionData sessionData) { + try { + // Since authorizationRequest is a URL, we need to extract client_id from URL parameters + if (sessionData.getAuthorizationRequest() != null) { + String authRequestUrl = sessionData.getAuthorizationRequest(); + return UrlParameterUtils.extractQueryParameter(authRequestUrl, OpenID4VPConstants.CLIENT_ID_PARAM); + } + } catch (Exception e) { + log.warn("Failed to extract verifier ID", e); + } + return UNKNOWN_VERIFIER; + } + + /** + * Extracts verifier authorization request as JSON + */ + private String extractVerifierAuthRequest(VerifiablePresentationSessionData sessionData) { + try { + if (sessionData.getAuthorizationRequest() != null) { + // Convert the URL string to a JSON object + Map authRequestData = new HashMap<>(); + authRequestData.put(OpenID4VPConstants.AUTHORIZATION_REQUEST_URL, sessionData.getAuthorizationRequest()); + return objectMapper.writeValueAsString(authRequestData); + } + } catch (Exception e) { + log.warn("Failed to extract verifier auth request", e); + } + return EMPTY_JSON; + } + + /** + * Creates presentation data JSON with selected credentials and metadata + */ + private String createPresentationData(SubmitPresentationRequestDTO request) { + try { + Map presentationData = new HashMap<>(); + presentationData.put(OpenID4VPConstants.SELECTED_CREDENTIALS, request.getSelectedCredentials()); + + return objectMapper.writeValueAsString(presentationData); + } catch (Exception e) { + log.warn("Failed to create presentation data", e); + return EMPTY_JSON; + } + } + + /** + * Validates all input parameters for presentation submission + */ + private void validateInputs(SubmitPresentationRequestDTO request) { + + if (request == null) { + log.error("Request cannot be null"); + throw new IllegalArgumentException("Request cannot be null"); + } + + if (request.getSelectedCredentials() == null || request.getSelectedCredentials().isEmpty()) { + log.error("Selected credentials cannot be null or empty"); + throw new IllegalArgumentException("Selected credentials cannot be null or empty"); + } + + log.debug("Input validation passed for request: {}", request); + } +} + diff --git a/src/main/java/io/mosip/mimoto/util/Base64Util.java b/src/main/java/io/mosip/mimoto/util/Base64Util.java deleted file mode 100644 index d4e4d8299..000000000 --- a/src/main/java/io/mosip/mimoto/util/Base64Util.java +++ /dev/null @@ -1,188 +0,0 @@ -package io.mosip.mimoto.util; - -import com.nimbusds.jose.util.Base64URL; -import lombok.experimental.UtilityClass; - -import java.nio.ByteBuffer; -import java.nio.charset.StandardCharsets; -import java.util.Base64; - -/** - * Utility class for Base64URL encoding and decoding operations. - * Provides centralized Base64URL functionality using both Java standard library - * and Nimbus JOSE library for consistency across the application. - */ -@UtilityClass -public class Base64Util { - - /** - * Encodes a string to Base64URL format using Nimbus JOSE library - * - * @param input the string to encode - * @return Base64URL encoded string - */ - public static String encode(String input) { - if (input == null) { - return null; - } - return Base64URL.encode(input.getBytes(StandardCharsets.UTF_8)).toString(); - } - - /** - * Encodes a byte array to Base64URL format using Nimbus JOSE library - * - * @param bytes the byte array to encode - * @return Base64URL encoded string - */ - public static String encode(byte[] bytes) { - if (bytes == null) { - return null; - } - return Base64URL.encode(bytes).toString(); - } - - /** - * Decodes a Base64URL string to byte array using Nimbus JOSE library - * - * @param base64UrlString the Base64URL encoded string - * @return decoded byte array - * @throws IllegalArgumentException if the input is not valid Base64URL - */ - public static byte[] decode(String base64UrlString) { - if (base64UrlString == null) { - return null; - } - return Base64URL.from(base64UrlString).decode(); - } - - /** - * Decodes a Base64URL string to a UTF-8 string using Nimbus JOSE library - * - * @param base64UrlString the Base64URL encoded string - * @return decoded UTF-8 string - * @throws IllegalArgumentException if the input is not valid Base64URL - */ - public static String decodeToString(String base64UrlString) { - byte[] decoded = decode(base64UrlString); - return decoded != null ? new String(decoded, StandardCharsets.UTF_8) : null; - } - - /** - * Alternative encoding method using Java standard library for compatibility - * - * @param input the string to encode - * @return Base64URL encoded string using Java standard library - */ - public static String encodeWithJavaStdLib(String input) { - if (input == null) { - return null; - } - return Base64.getUrlEncoder().withoutPadding().encodeToString(input.getBytes(StandardCharsets.UTF_8)); - } - - /** - * Alternative encoding method using Java standard library for compatibility - * - * @param bytes the byte array to encode - * @return Base64URL encoded string using Java standard library - */ - public static String encodeWithJavaStdLib(byte[] bytes) { - if (bytes == null) { - return null; - } - return Base64.getUrlEncoder().withoutPadding().encodeToString(bytes); - } - - /** - * Alternative decoding method using Java standard library for compatibility - * - * @param base64UrlString the Base64URL encoded string - * @return decoded byte array using Java standard library - * @throws IllegalArgumentException if the input is not valid Base64URL - */ - public static byte[] decodeWithJavaStdLib(String base64UrlString) { - if (base64UrlString == null) { - return null; - } - return Base64.getUrlDecoder().decode(base64UrlString); - } - - /** - * Converts a Base64 or Base64URL string to byte array with automatic format detection. - * This method tries Base64URL decoding first (common for JWT/VP tokens), - * then falls back to standard Base64, and finally normalizes and retries if both fail. - * - * @param base64String the Base64 or Base64URL encoded string - * @return decoded byte array - * @throws IllegalArgumentException if the input cannot be decoded in any supported format - */ - public static byte[] decodeFlexible(String base64String) { - if (base64String == null) { - return null; - } - - try { - // First try Base64URL decoding (which is more common for JWT/VP tokens) - return Base64.getUrlDecoder().decode(base64String); - } catch (IllegalArgumentException e) { - try { - // Fallback to standard Base64 decoding - return Base64.getDecoder().decode(base64String); - } catch (IllegalArgumentException e2) { - // If both fail, normalize to standard Base64 and try again - String normalizedBase64 = normalizeBase64String(base64String); - return Base64.getDecoder().decode(normalizedBase64); - } - } - } - - /** - * Normalizes a Base64URL string to standard Base64 format with proper padding. - * Converts '-' to '+', '_' to '/', and adds padding ('=') if needed. - * - * @param base64String the Base64URL string to normalize - * @return normalized standard Base64 string with padding - */ - public static String normalizeBase64String(String base64String) { - if (base64String == null) { - return null; - } - - StringBuilder standardBase64 = new StringBuilder(base64String.replace('-', '+').replace('_', '/')); - - // Add padding if needed - while (standardBase64.length() % 4 != 0) { - standardBase64.append("="); - } - - return standardBase64.toString(); - } - - /** - * Creates a detached JWT signing input by concatenating header and payload bytes with a period ('.') separator. - * This is used for creating the input to sign for detached JWTs where the payload is not included in the final JWT. - * Uses ByteBuffer for efficient byte array concatenation. - *

- * Format: base64url(header) + '.' + payload_bytes - * - * @param headerBase64 the Base64URL encoded header string - * @param payloadBytes the payload bytes to be signed - * @return byte array containing header bytes + '.' + payload bytes - */ - public static byte[] createDetachedJwtSigningInput(String headerBase64, byte[] payloadBytes) { - if (headerBase64 == null || payloadBytes == null) { - throw new IllegalArgumentException("Header and payload cannot be null"); - } - - byte[] headerBytes = headerBase64.getBytes(StandardCharsets.UTF_8); - byte periodByte = (byte) '.'; // ASCII 46 - - // Use ByteBuffer for cleaner byte array concatenation - ByteBuffer buffer = ByteBuffer.allocate(headerBytes.length + 1 + payloadBytes.length); - buffer.put(headerBytes); - buffer.put(periodByte); - buffer.put(payloadBytes); - - return buffer.array(); - } -} diff --git a/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java b/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java index 56afb1c0a..880fa96f2 100644 --- a/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java +++ b/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java @@ -8,8 +8,9 @@ import io.mosip.kernel.cryptomanager.service.CryptomanagerService; import io.mosip.mimoto.exception.DecryptionException; import io.mosip.mimoto.exception.EncryptionException; +import io.mosip.openID4VP.common.DecoderKt; +import io.mosip.openID4VP.common.EncoderKt; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @@ -42,7 +43,6 @@ public class EncryptionDecryptionUtil { @Value("${mosip.inji.app.id:MIMOTO}") private String appId; - @Autowired public EncryptionDecryptionUtil(CryptomanagerService cryptomanagerService) { this.cryptomanagerService = cryptomanagerService; } @@ -379,4 +379,48 @@ private static String bytesToString(byte[] data) { } return new String(data, StandardCharsets.UTF_8); } + + /** + * Creates a detached JWT signing input by encoding the header and concatenating it with the payload bytes. + * This is used for creating the input to sign for detached JWTs where the payload is not included in the final JWT. + * Uses OpenID4VP library utilities for Base64URL encoding/decoding. + * Format: base64url(header) + '.' + payload_bytes + * + * @param headerJson The JWT header as a JSON string. + * @param payloadBase64Url The Base64URL encoded payload string to decode. + * @return byte array containing header bytes + '.' + payload bytes for signing + * @throws IllegalArgumentException if headerJson or payloadBase64Url is null + */ + public byte[] createDetachedJwtSigningInput(String headerJson, String payloadBase64Url) { + if (headerJson == null) { + log.error("Header JSON cannot be null"); + throw new IllegalArgumentException("Header JSON cannot be null"); + } + if (payloadBase64Url == null) { + log.error("Payload Base64URL string cannot be null"); + throw new IllegalArgumentException("Payload Base64URL string cannot be null"); + } + + try { + // Decode the Base64URL encoded payload + byte[] payloadBytes = DecoderKt.decodeFromBase64Url(payloadBase64Url); + + // Encode the header JSON to Base64URL + String header64 = EncoderKt.encodeToBase64Url(headerJson.getBytes(StandardCharsets.UTF_8)); + + // Create input bytes for detached JWT signing: header + '.' + payload + byte[] headerBytes = header64.getBytes(StandardCharsets.UTF_8); + byte[] inputBytes = new byte[headerBytes.length + 1 + payloadBytes.length]; + System.arraycopy(headerBytes, 0, inputBytes, 0, headerBytes.length); + inputBytes[headerBytes.length] = (byte) '.'; + System.arraycopy(payloadBytes, 0, inputBytes, headerBytes.length + 1, payloadBytes.length); + + log.debug("Detached JWT signing input created successfully, header length: {}, payload length: {}", + headerBytes.length, payloadBytes.length); + return inputBytes; + } catch (Exception e) { + log.error("Failed to create detached JWT signing input", e); + throw new RuntimeException("Failed to create detached JWT signing input", e); + } + } } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/util/UrlParameterUtils.java b/src/main/java/io/mosip/mimoto/util/UrlParameterUtils.java index f4b9b4d80..4862551cc 100644 --- a/src/main/java/io/mosip/mimoto/util/UrlParameterUtils.java +++ b/src/main/java/io/mosip/mimoto/util/UrlParameterUtils.java @@ -6,15 +6,10 @@ import java.net.URI; import java.net.URISyntaxException; import java.nio.charset.StandardCharsets; -import java.util.Collections; import java.util.List; public class UrlParameterUtils { - private static final String CLIENT_ID = "client_id"; - - private static final String RESPONSE_URI = "response_uri"; - /** * Extracts a query parameter value from a URL using Apache URLEncodedUtils * @@ -22,7 +17,7 @@ public class UrlParameterUtils { * @param parameterName the name of the parameter to extract * @return the decoded parameter value, or null if not found */ - private static String extractQueryParameter(String url, String parameterName) throws URISyntaxException { + public static String extractQueryParameter(String url, String parameterName) throws URISyntaxException { if (url == null || url.trim().isEmpty()) { return null; } @@ -37,13 +32,4 @@ private static String extractQueryParameter(String url, String parameterName) th } return null; } - - public static String extractClientIdFromUrl(String url) throws URISyntaxException { - return extractQueryParameter(url, CLIENT_ID); - } - - public static List extractResponseUrisFromUrl(String url) throws URISyntaxException { - String responseUriValue = extractQueryParameter(url, RESPONSE_URI); - return responseUriValue != null ? Collections.singletonList(responseUriValue) : Collections.emptyList(); - } } diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index dac8ed4ef..c606a9231 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -275,10 +275,4 @@ mosip.kernel.keymanager.hsm.config-path=certs/oidckeystore.p12 # Defines the type of the keystore used by the Key Manager as PKCS#12 mosip.kernel.keymanager.hsm.keystore-type=PKCS12 # Password to access the KeyManager PKCS#12 keystore file -mosip.kernel.keymanager.hsm.keystore-pass=mosip123 - -#Google OAuth2 configuration -# Specifies the client ID for Google OAuth2 authentication, required to identify the application during OAuth2 requests. -spring.security.oauth2.client.registration.google.client-id=clientId -# Specifies the client secret for Google OAuth2 authentication, used to authenticate the application securely -spring.security.oauth2.client.registration.google.client-secret=clientSecret \ No newline at end of file +mosip.kernel.keymanager.hsm.keystore-pass=mosip123 \ No newline at end of file diff --git a/src/main/resources/mimoto-trusted-verifiers.json b/src/main/resources/mimoto-trusted-verifiers.json index 3f11bc947..95e77c3a4 100644 --- a/src/main/resources/mimoto-trusted-verifiers.json +++ b/src/main/resources/mimoto-trusted-verifiers.json @@ -1,7 +1,7 @@ { "verifiers": [ { - "client_id": "https://injiverify.collab.mosip.net", + "client_id": "injiverify.collab.mosip.net", "redirect_uris": [ "https://injiverify.collab.mosip.net/" ], @@ -9,7 +9,7 @@ "https://injiverify.collab.mosip.net/v1/verify/vp-submission/vp-direct-post" ], "jwks_uri": "https://injiverify.collab.mosip.net/.well-known/jwks.json", - "allow_unsigned_request": false + "allow_unsigned_request": true } ] } diff --git a/src/test/java/io/mosip/mimoto/controller/WalletPresentationsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletPresentationsControllerTest.java index 74372c745..103bd62bd 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletPresentationsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletPresentationsControllerTest.java @@ -5,9 +5,8 @@ import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.VPNotCreatedException; -import io.mosip.mimoto.service.CredentialMatchingService; import io.mosip.mimoto.service.PresentationActionService; -import io.mosip.mimoto.service.PresentationService; +import io.mosip.mimoto.service.WalletPresentationService; import io.mosip.mimoto.service.impl.SessionManager; import io.mosip.mimoto.util.GlobalExceptionHandler; import io.mosip.openID4VP.exceptions.OpenID4VPExceptions; @@ -54,7 +53,7 @@ public class WalletPresentationsControllerTest { private ObjectMapper objectMapper; @MockBean - private PresentationService presentationService; + private WalletPresentationService walletPresentationService; @Mock private HttpSession httpSession; @@ -62,22 +61,19 @@ public class WalletPresentationsControllerTest { @MockBean private SessionManager sessionManager; - @MockBean - private CredentialMatchingService credentialMatchingService; - @MockBean private PresentationActionService presentationActionService; private final String walletId = "wallet123"; private final String walletKey = "encodedKey"; - private VerifiablePresentationResponseDTO presentationResponseDTO; + private VPResponseDTO presentationResponseDTO; @Before public void setup() { MockitoAnnotations.openMocks(this); VerifiablePresentationVerifierDTO presentationVerifierDTO = new VerifiablePresentationVerifierDTO("mock-client", "verifier123", "https://veriifer-logo.png", false, true, "https://verifier-redirect"); - presentationResponseDTO = new VerifiablePresentationResponseDTO("presentationId-123", presentationVerifierDTO); + presentationResponseDTO = new VPResponseDTO("presentationId-123", presentationVerifierDTO); when(httpSession.getAttribute("wallet_id")).thenReturn(walletId); when(httpSession.getAttribute("wallet_key")).thenReturn(walletKey); @@ -86,9 +82,9 @@ public void setup() { @Test public void testCreatePresentationSuccess() throws Exception { String authorizationRequestUrl = "client_id=mock-client&presentation_definition_uri=https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fpresentation_definition_uri&response_type=vp_token&response_mode=direct_post&nonce=NHgLcWlae745DpfJbUyfdg%253D%253D&response_uri=https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fvp-response&state=pcmxBfvdPEcjFObgt%252BLekA%253D%253D"; - VerifiablePresentationAuthorizationRequest authorizationRequest = new VerifiablePresentationAuthorizationRequest(); + VPAuthorizationRequestDTO authorizationRequest = new VPAuthorizationRequestDTO(); authorizationRequest.setAuthorizationRequestUrl(authorizationRequestUrl); - when(presentationService.handleVPAuthorizationRequest(authorizationRequest.getAuthorizationRequestUrl(), walletId)).thenReturn(presentationResponseDTO); + when(walletPresentationService.handleVPAuthorizationRequest(authorizationRequest.getAuthorizationRequestUrl(), walletId)).thenReturn(presentationResponseDTO); String expectedResponse = new ObjectMapper().writeValueAsString(presentationResponseDTO); mockMvc.perform(post("/wallets/{walletId}/presentations", walletId) @@ -106,9 +102,9 @@ public void testCreatePresentationSuccess() throws Exception { @Test public void shouldThrowExceptionWhenBadAuthorizationRequestIsReceivedFromVerifier() throws Exception { String authorizationRequestUrl = "presentation_definition_uri=https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fpresentation_definition_uri&response_type=vp_token&response_mode=direct_post&nonce=NHgLcWlae745DpfJbUyfdg%253D%253D&response_uri=https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fvp-response&state=pcmxBfvdPEcjFObgt%252BLekA%253D%253D"; - VerifiablePresentationAuthorizationRequest authorizationRequest = new VerifiablePresentationAuthorizationRequest(); + VPAuthorizationRequestDTO authorizationRequest = new VPAuthorizationRequestDTO(); authorizationRequest.setAuthorizationRequestUrl(authorizationRequestUrl); - when(presentationService.handleVPAuthorizationRequest(authorizationRequest.getAuthorizationRequestUrl(), walletId)).thenThrow(new OpenID4VPExceptions.MissingInput(List.of("client_id"), "client_id request param is Missing", "AuthorizationRequest")); + when(walletPresentationService.handleVPAuthorizationRequest(authorizationRequest.getAuthorizationRequestUrl(), walletId)).thenThrow(new OpenID4VPExceptions.MissingInput(List.of("client_id"), "client_id request param is Missing", "AuthorizationRequest")); mockMvc.perform(post("/wallets/{walletId}/presentations", walletId) .contentType(MediaType.APPLICATION_JSON) @@ -124,9 +120,9 @@ public void shouldThrowExceptionWhenBadAuthorizationRequestIsReceivedFromVerifie @Test public void shouldThrowSpecificErrorCodeAndMessageWhenAnyCustomExceptionIsThrown() throws Exception { String authorizationRequestUrl = "presentation_definition_uri=https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fpresentation_definition_uri&response_type=vp_token&response_mode=direct_post&nonce=NHgLcWlae745DpfJbUyfdg%253D%253D&response_uri=https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fvp-response&state=pcmxBfvdPEcjFObgt%252BLekA%253D%253D"; - VerifiablePresentationAuthorizationRequest authorizationRequest = new VerifiablePresentationAuthorizationRequest(); + VPAuthorizationRequestDTO authorizationRequest = new VPAuthorizationRequestDTO(); authorizationRequest.setAuthorizationRequestUrl(authorizationRequestUrl); - when(presentationService.handleVPAuthorizationRequest(authorizationRequest.getAuthorizationRequestUrl(), walletId)).thenThrow(new ApiNotAccessibleException("Error occurred while fetching trusted verifiers")); + when(walletPresentationService.handleVPAuthorizationRequest(authorizationRequest.getAuthorizationRequestUrl(), walletId)).thenThrow(new ApiNotAccessibleException("Error occurred while fetching trusted verifiers")); mockMvc.perform(post("/wallets/{walletId}/presentations", walletId) .contentType(MediaType.APPLICATION_JSON) @@ -142,9 +138,9 @@ public void shouldThrowSpecificErrorCodeAndMessageWhenAnyCustomExceptionIsThrown @Test public void shouldThrowWalletCreateExceptionWhenAnyUnexpectedErrorOccurs() throws Exception { String authorizationRequestUrl = "presentation_definition_uri=https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fpresentation_definition_uri&response_type=vp_token&response_mode=direct_post&nonce=NHgLcWlae745DpfJbUyfdg%253D%253D&response_uri=https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fvp-response&state=pcmxBfvdPEcjFObgt%252BLekA%253D%253D"; - VerifiablePresentationAuthorizationRequest authorizationRequest = new VerifiablePresentationAuthorizationRequest(); + VPAuthorizationRequestDTO authorizationRequest = new VPAuthorizationRequestDTO(); authorizationRequest.setAuthorizationRequestUrl(authorizationRequestUrl); - when(presentationService.handleVPAuthorizationRequest(authorizationRequest.getAuthorizationRequestUrl(), walletId)).thenThrow(new RuntimeException("Error occurred while creating presentation in openid4vp flow")); + when(walletPresentationService.handleVPAuthorizationRequest(authorizationRequest.getAuthorizationRequestUrl(), walletId)).thenThrow(new RuntimeException("Error occurred while creating presentation in openid4vp flow")); mockMvc.perform(post("/wallets/{walletId}/presentations", walletId) .contentType(MediaType.APPLICATION_JSON) @@ -178,7 +174,7 @@ public void shouldThrowBadRequestWhenApiNotAccessibleExceptionIsThrown() throws presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null); when(sessionManager.getPresentationSessionData(httpSession, walletId, presentationId)).thenReturn(sessionData); - when(credentialMatchingService.getMatchingCredentials(sessionData, walletId, walletKey)) + when(walletPresentationService.getMatchingCredentials(sessionData, walletId, walletKey)) .thenThrow(new ApiNotAccessibleException("Error occurred while fetching credentials")); mockMvc.perform(get("/wallets/{walletId}/presentations/{presentationId}/credentials", walletId, presentationId) @@ -197,7 +193,7 @@ public void shouldThrowInternalServerErrorWhenIOExceptionIsThrown() throws Excep presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null); when(sessionManager.getPresentationSessionData(httpSession, walletId, presentationId)).thenReturn(sessionData); - when(credentialMatchingService.getMatchingCredentials(sessionData, walletId, walletKey)) + when(walletPresentationService.getMatchingCredentials(sessionData, walletId, walletKey)) .thenThrow(new IOException("Error occurred while processing credentials")); mockMvc.perform(get("/wallets/{walletId}/presentations/{presentationId}/credentials", walletId, presentationId) @@ -216,7 +212,7 @@ public void shouldThrowInternalServerErrorWhenVPNotCreatedExceptionIsThrown() th presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null); when(sessionManager.getPresentationSessionData(httpSession, walletId, presentationId)).thenReturn(sessionData); - when(credentialMatchingService.getMatchingCredentials(sessionData, walletId, walletKey)) + when(walletPresentationService.getMatchingCredentials(sessionData, walletId, walletKey)) .thenThrow(new VPNotCreatedException("Error occurred while creating VP")); mockMvc.perform(get("/wallets/{walletId}/presentations/{presentationId}/credentials", walletId, presentationId) @@ -235,7 +231,7 @@ public void shouldThrowInternalServerErrorWhenIllegalArgumentExceptionIsThrown() presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null); when(sessionManager.getPresentationSessionData(httpSession, walletId, presentationId)).thenReturn(sessionData); - when(credentialMatchingService.getMatchingCredentials(sessionData, walletId, walletKey)) + when(walletPresentationService.getMatchingCredentials(sessionData, walletId, walletKey)) .thenThrow(new IllegalArgumentException("Invalid argument provided")); mockMvc.perform(get("/wallets/{walletId}/presentations/{presentationId}/credentials", walletId, presentationId) @@ -304,7 +300,11 @@ public void testUserRejectedVerifierSuccess() throws Exception { .thenReturn(sessionData); // Prepare the expected RejectedVerifierDTO and stub the service to return it - SubmitPresentationResponseDTO expectedRejected = new SubmitPresentationResponseDTO("success", "", "Presentation request rejected. An OpenID4VP error response has been sent to the verifier."); + SubmitPresentationResponseDTO expectedRejected = SubmitPresentationResponseDTO.builder() + .status("success") + .message("Presentation request rejected. An OpenID4VP error response has been sent to the verifier.") + .redirectUri("") // redirectUri may be empty string or null + .build(); doReturn(ResponseEntity.ok(expectedRejected)) .when(presentationActionService).handlePresentationAction( eq(walletId), eq(presentationId), any(SubmitPresentationRequestDTO.class), eq(sessionData), eq(walletKey)); @@ -315,10 +315,7 @@ public void testUserRejectedVerifierSuccess() throws Exception { .accept(MediaType.APPLICATION_JSON) .sessionAttr("wallet_id", walletId) .sessionAttr("wallet_key", walletKey)) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.status").value("success")) - .andExpect(jsonPath("$.message").value("Presentation request rejected. An OpenID4VP error response has been sent to the verifier.")) - .andExpect(jsonPath("$.redirectUri").value("")); + .andExpect(status().isOk()); } @Test @@ -367,10 +364,10 @@ public void testUserRejectedVerifierNullSessionData() throws Exception { @Test public void testHandleVPAuthorizationRequestWithURISyntaxException() throws Exception { String authorizationRequestUrl = "invalid://url with spaces"; - VerifiablePresentationAuthorizationRequest authorizationRequest = new VerifiablePresentationAuthorizationRequest(); + VPAuthorizationRequestDTO authorizationRequest = new VPAuthorizationRequestDTO(); authorizationRequest.setAuthorizationRequestUrl(authorizationRequestUrl); - when(presentationService.handleVPAuthorizationRequest(authorizationRequestUrl, walletId)) + when(walletPresentationService.handleVPAuthorizationRequest(authorizationRequestUrl, walletId)) .thenThrow(new java.net.URISyntaxException("invalid://url with spaces", "Invalid URI")); mockMvc.perform(post("/wallets/{walletId}/presentations", walletId) @@ -386,10 +383,10 @@ public void testHandleVPAuthorizationRequestWithURISyntaxException() throws Exce @Test public void testHandleVPAuthorizationRequestWithVPNotCreatedException() throws Exception { String authorizationRequestUrl = "client_id=test&response_type=vp_token"; - VerifiablePresentationAuthorizationRequest authorizationRequest = new VerifiablePresentationAuthorizationRequest(); + VPAuthorizationRequestDTO authorizationRequest = new VPAuthorizationRequestDTO(); authorizationRequest.setAuthorizationRequestUrl(authorizationRequestUrl); - when(presentationService.handleVPAuthorizationRequest(authorizationRequestUrl, walletId)) + when(walletPresentationService.handleVPAuthorizationRequest(authorizationRequestUrl, walletId)) .thenThrow(new VPNotCreatedException("Failed to create VP")); mockMvc.perform(post("/wallets/{walletId}/presentations", walletId) @@ -409,12 +406,12 @@ public void testGetMatchingCredentialsSuccess() throws Exception { presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null); MatchingCredentialsResponseDTO responseDTO = new MatchingCredentialsResponseDTO(); - MatchingCredentialsWithWalletDataDTO matchingCredentials = new MatchingCredentialsWithWalletDataDTO(); + MatchingCredentialsDTO matchingCredentials = new MatchingCredentialsDTO(); matchingCredentials.setMatchingCredentialsResponse(responseDTO); matchingCredentials.setMatchingCredentials(java.util.Collections.emptyList()); when(sessionManager.getPresentationSessionData(any(HttpSession.class), eq(walletId), eq(presentationId))).thenReturn(sessionData); - when(credentialMatchingService.getMatchingCredentials(sessionData, walletId, walletKey)) + when(walletPresentationService.getMatchingCredentials(sessionData, walletId, walletKey)) .thenReturn(matchingCredentials); mockMvc.perform(get("/wallets/{walletId}/presentations/{presentationId}/credentials", walletId, presentationId) @@ -434,7 +431,7 @@ public void testGetMatchingCredentialsWithIllegalArgumentException() throws Exce presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null); when(sessionManager.getPresentationSessionData(any(HttpSession.class), eq(walletId), eq(presentationId))).thenReturn(sessionData); - when(credentialMatchingService.getMatchingCredentials(sessionData, walletId, walletKey)) + when(walletPresentationService.getMatchingCredentials(sessionData, walletId, walletKey)) .thenThrow(new IllegalArgumentException("Invalid argument")); mockMvc.perform(get("/wallets/{walletId}/presentations/{presentationId}/credentials", walletId, presentationId) @@ -452,7 +449,7 @@ public void testGetMatchingCredentialsWithApiNotAccessibleException() throws Exc presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null); when(sessionManager.getPresentationSessionData(any(HttpSession.class), eq(walletId), eq(presentationId))).thenReturn(sessionData); - when(credentialMatchingService.getMatchingCredentials(sessionData, walletId, walletKey)) + when(walletPresentationService.getMatchingCredentials(sessionData, walletId, walletKey)) .thenThrow(new ApiNotAccessibleException("API not accessible")); mockMvc.perform(get("/wallets/{walletId}/presentations/{presentationId}/credentials", walletId, presentationId) @@ -470,7 +467,7 @@ public void testGetMatchingCredentialsWithIOException() throws Exception { presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null); when(sessionManager.getPresentationSessionData(any(HttpSession.class), eq(walletId), eq(presentationId))).thenReturn(sessionData); - when(credentialMatchingService.getMatchingCredentials(sessionData, walletId, walletKey)) + when(walletPresentationService.getMatchingCredentials(sessionData, walletId, walletKey)) .thenThrow(new java.io.IOException("IO error")); mockMvc.perform(get("/wallets/{walletId}/presentations/{presentationId}/credentials", walletId, presentationId) @@ -488,7 +485,7 @@ public void testGetMatchingCredentialsWithVPNotCreatedException() throws Excepti presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null); when(sessionManager.getPresentationSessionData(any(HttpSession.class), eq(walletId), eq(presentationId))).thenReturn(sessionData); - when(credentialMatchingService.getMatchingCredentials(sessionData, walletId, walletKey)) + when(walletPresentationService.getMatchingCredentials(sessionData, walletId, walletKey)) .thenThrow(new VPNotCreatedException("VP_ERROR", "VP creation failed")); mockMvc.perform(get("/wallets/{walletId}/presentations/{presentationId}/credentials", walletId, presentationId) @@ -524,11 +521,8 @@ public void testHandlePresentationSubmissionSuccess() throws Exception { .accept(MediaType.APPLICATION_JSON) .sessionAttr("wallet_id", walletId) .sessionAttr("wallet_key", walletKey)) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.status").value("SUCCESS")); + .andExpect(status().isOk()); - verify(presentationActionService).handlePresentationAction( - eq(walletId), eq(presentationId), any(SubmitPresentationRequestDTO.class), eq(sessionData), eq(walletKey)); } @Test @@ -578,7 +572,7 @@ public void testHandlePresentationActionInvalidRequestFormat() throws Exception .accept(MediaType.APPLICATION_JSON) .sessionAttr("wallet_id", walletId) .sessionAttr("wallet_key", walletKey)) - .andExpect(status().isBadRequest()); + .andExpect(status().isOk()); } } \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/CredentialMatchingServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialMatchingServiceTest.java index 4865607c3..e4a3a7624 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialMatchingServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialMatchingServiceTest.java @@ -8,6 +8,7 @@ import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.InvalidIssuerIdException; +import io.mosip.mimoto.exception.InvalidRequestException; import io.mosip.mimoto.model.CredentialMetadata; import io.mosip.mimoto.service.impl.CredentialMatchingServiceImpl; import io.mosip.mimoto.service.impl.OpenID4VPService; @@ -82,7 +83,7 @@ public void testGetMatchingCredentialsSuccess() throws Exception { .thenReturn(issuerConfig); // Act - MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + MatchingCredentialsDTO result = credentialMatchingService .getMatchingCredentials(sessionData, walletId, base64Key); // Assert @@ -190,7 +191,7 @@ public void testGetMatchingCredentialsEmptyWalletCredentials() throws Exception .thenReturn(Collections.emptyList()); // Act - MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + MatchingCredentialsDTO result = credentialMatchingService .getMatchingCredentials(sessionData, walletId, base64Key); // Assert @@ -210,7 +211,7 @@ public void testGetMatchingCredentialsDecryptionFailure() throws Exception { .thenReturn(walletCredentials); // Act - MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + MatchingCredentialsDTO result = credentialMatchingService .getMatchingCredentials(sessionData, walletId, base64Key); // Assert @@ -228,7 +229,7 @@ public void testGetMatchingCredentialsIssuerConfigNotFound() throws Exception { // Act - MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + MatchingCredentialsDTO result = credentialMatchingService .getMatchingCredentials(sessionData, walletId, base64Key); // Assert @@ -251,7 +252,7 @@ public void testGetMatchingCredentialsWithConstraints() throws Exception { .thenReturn(createMockWalletCredentialsWithMapData()); // Act - MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + MatchingCredentialsDTO result = credentialMatchingService .getMatchingCredentials(sessionData, walletId, base64Key); // Assert @@ -273,7 +274,7 @@ public void testGetMatchingCredentialsFormatMismatch() throws Exception { .thenReturn(credentialsWithDifferentFormat); // Act - MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + MatchingCredentialsDTO result = credentialMatchingService .getMatchingCredentials(sessionData, walletId, base64Key); // Assert @@ -295,7 +296,7 @@ public void testGetMatchingCredentialsFormatMatchingWithProofType() throws Excep .thenReturn(createMockVCCredentialPropertiesWithProof()); // Act - MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + MatchingCredentialsDTO result = credentialMatchingService .getMatchingCredentials(sessionData, walletId, base64Key); // Assert @@ -313,7 +314,7 @@ public void testGetMatchingCredentialsFormatMatchingWithoutProofType() throws Ex .thenReturn(createMockWalletCredentialsWithMapData()); // Act - MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + MatchingCredentialsDTO result = credentialMatchingService .getMatchingCredentials(sessionData, walletId, base64Key); // Assert @@ -331,7 +332,7 @@ public void testGetMatchingCredentialsFormatMatchingWithNullFormat() throws Exce .thenReturn(createMockWalletCredentialsWithMapData()); // Act - MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + MatchingCredentialsDTO result = credentialMatchingService .getMatchingCredentials(sessionData, walletId, base64Key); // Assert @@ -349,7 +350,7 @@ public void testGetMatchingCredentialsWithConstraintsMatching() throws Exception .thenReturn(createMockWalletCredentialsWithSubject()); // Act - MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + MatchingCredentialsDTO result = credentialMatchingService .getMatchingCredentials(sessionData, walletId, base64Key); // Assert @@ -367,7 +368,7 @@ public void testGetMatchingCredentialsWithConstraintsNotMatching() throws Except .thenReturn(walletCredentials); // credentials without matching subject // Act - MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + MatchingCredentialsDTO result = credentialMatchingService .getMatchingCredentials(sessionData, walletId, base64Key); // Assert @@ -386,7 +387,7 @@ public void testGetMatchingCredentialsWithNullConstraints() throws Exception { .thenReturn(createMockWalletCredentialsWithMapData()); // Act - MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + MatchingCredentialsDTO result = credentialMatchingService .getMatchingCredentials(sessionData, walletId, base64Key); // Assert @@ -404,7 +405,7 @@ public void testGetMatchingCredentialsWithEmptyFieldPaths() throws Exception { .thenReturn(createMockWalletCredentialsWithMapData()); // Act - MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + MatchingCredentialsDTO result = credentialMatchingService .getMatchingCredentials(sessionData, walletId, base64Key); // Assert @@ -431,7 +432,7 @@ public void testGetMatchingCredentialsWithFilterMatching() throws Exception { .thenReturn(mockIssuerConfig); // Act - MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + MatchingCredentialsDTO result = credentialMatchingService .getMatchingCredentials(sessionData, walletId, base64Key); // Assert @@ -468,7 +469,7 @@ public void testGetMatchingCredentialsWithFilterMatchingAdvanced() throws Except .thenReturn(mockIssuerConfig); // Act - MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + MatchingCredentialsDTO result = credentialMatchingService .getMatchingCredentials(sessionData, walletId, base64Key); // Assert @@ -492,7 +493,7 @@ public void testGetMatchingCredentialsWithFilterNotMatching() throws Exception { .thenReturn(walletCredentials); // Act - MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + MatchingCredentialsDTO result = credentialMatchingService .getMatchingCredentials(sessionData, walletId, base64Key); // Assert @@ -510,7 +511,7 @@ public void testGetMatchingCredentialsWithNullFilter() throws Exception { .thenReturn(createMockWalletCredentialsWithMapData()); // Act - MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + MatchingCredentialsDTO result = credentialMatchingService .getMatchingCredentials(sessionData, walletId, base64Key); // Assert @@ -528,7 +529,7 @@ public void testGetMatchingCredentialsWithJsonPathErrors() throws Exception { .thenReturn(walletCredentials); // Act - MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + MatchingCredentialsDTO result = credentialMatchingService .getMatchingCredentials(sessionData, walletId, base64Key); // Assert @@ -536,7 +537,7 @@ public void testGetMatchingCredentialsWithJsonPathErrors() throws Exception { assertTrue(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); } - @Test + @Test(expected = InvalidRequestException.class) public void testGetMatchingCredentialsWithSdJwtFormat() throws Exception { // Arrange PresentationDefinition pd = createMockPresentationDefinition(); @@ -546,18 +547,11 @@ public void testGetMatchingCredentialsWithSdJwtFormat() throws Exception { .thenReturn(createMockWalletCredentialsWithSdJwtFormat()); - // Act - MatchingCredentialsWithWalletDataDTO result = credentialMatchingService - .getMatchingCredentials(sessionData, walletId, base64Key); - - // Assert - assertNotNull(result); - // For VC+SD-JWT format, the static extractJwtPayloadFromSdJwt method may not work in unit tests - // So we verify that the result is not null and the missing claims are properly handled - assertNotNull(result.getMatchingCredentialsResponse()); + // Act & Assert - Should throw InvalidRequestException for unsupported SD-JWT format + credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); } - @Test + @Test(expected = InvalidRequestException.class) public void testGetMatchingCredentialsWithDcSdJwtFormat() throws Exception { // Arrange PresentationDefinition pd = createMockPresentationDefinition(); @@ -569,15 +563,8 @@ public void testGetMatchingCredentialsWithDcSdJwtFormat() throws Exception { .thenReturn(dcSdJwtCredentials); - // Act - MatchingCredentialsWithWalletDataDTO result = credentialMatchingService - .getMatchingCredentials(sessionData, walletId, base64Key); - - // Assert - assertNotNull(result); - // For DC+SD-JWT format, the static extractJwtPayloadFromSdJwt method may not work in unit tests - // So we verify that the result is not null and the missing claims are properly handled - assertNotNull(result.getMatchingCredentialsResponse()); + // Act & Assert - Should throw InvalidRequestException for unsupported DC+SD-JWT format + credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); } @Test @@ -591,7 +578,7 @@ public void testGetMatchingCredentialsWithIssuerConfigException() throws Excepti .thenThrow(new InvalidIssuerIdException()); // Act - MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + MatchingCredentialsDTO result = credentialMatchingService .getMatchingCredentials(sessionData, walletId, base64Key); // Assert @@ -612,7 +599,7 @@ public void testGetMatchingCredentialsWithApiNotAccessibleException() throws Exc .thenThrow(new ApiNotAccessibleException()); // Act - MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + MatchingCredentialsDTO result = credentialMatchingService .getMatchingCredentials(sessionData, walletId, base64Key); // Assert @@ -632,7 +619,7 @@ public void testGetMatchingCredentialsWithMultipleDescriptors() throws Exception .thenReturn(createMockWalletCredentialsWithMultipleCredentials()); // Act - MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + MatchingCredentialsDTO result = credentialMatchingService .getMatchingCredentials(sessionData, walletId, base64Key); // Assert @@ -640,7 +627,7 @@ public void testGetMatchingCredentialsWithMultipleDescriptors() throws Exception assertFalse(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); // Should deduplicate credentials by ID Set credentialIds = result.getMatchingCredentialsResponse().getAvailableCredentials() - .stream().map(SelectableCredentialDTO::getCredentialId).collect(Collectors.toSet()); + .stream().map(CredentialDTO::getCredentialId).collect(Collectors.toSet()); assertEquals(2, credentialIds.size()); // Should have 2 unique credentials } @@ -1049,7 +1036,7 @@ public void testJsonPathEvaluationTypePathWithSampleData() throws Exception { .thenReturn(mockIssuerConfig); // Act - MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + MatchingCredentialsDTO result = credentialMatchingService .getMatchingCredentials(sessionData, walletId, base64Key); // Assert - This tests that the JSON path evaluation works correctly @@ -1087,7 +1074,7 @@ public void testJsonPathEvaluationNestedPath() throws Exception { .thenReturn(mockIssuerConfig); // Act - MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + MatchingCredentialsDTO result = credentialMatchingService .getMatchingCredentials(sessionData, walletId, base64Key); // Assert @@ -1119,7 +1106,7 @@ public void testJsonPathEvaluationNonExistentPath() throws Exception { // Act - MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + MatchingCredentialsDTO result = credentialMatchingService .getMatchingCredentials(sessionData, walletId, base64Key); // Assert - Should not match due to non-existent path @@ -1160,7 +1147,7 @@ public void testJsonPathEvaluationComplexNestedStructure() throws Exception { .thenReturn(mockIssuerConfig); // Act - MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + MatchingCredentialsDTO result = credentialMatchingService .getMatchingCredentials(sessionData, walletId, base64Key); // Assert @@ -1195,7 +1182,7 @@ public void testJsonPathEvaluationListIndexPath() throws Exception { .thenReturn(mockIssuerConfig); // Act - MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + MatchingCredentialsDTO result = credentialMatchingService .getMatchingCredentials(sessionData, walletId, base64Key); // Assert @@ -1264,7 +1251,7 @@ public void testMatchesConstraintsNullFields() throws Exception { .thenReturn(pdWithNullFields); // Act - MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + MatchingCredentialsDTO result = credentialMatchingService .getMatchingCredentials(sessionData, walletId, base64Key); // Assert - Should handle null fields gracefully @@ -1288,7 +1275,7 @@ public void testMatchesFormatNullDescriptorFormat() throws Exception { .thenReturn(credentials); // Act - MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + MatchingCredentialsDTO result = credentialMatchingService .getMatchingCredentials(sessionData, walletId, base64Key); // Assert - Should handle null format gracefully @@ -1309,7 +1296,7 @@ public void testMatchesFieldPathNullMatches() throws Exception { .thenReturn(credentials); // Act - MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + MatchingCredentialsDTO result = credentialMatchingService .getMatchingCredentials(sessionData, walletId, base64Key); // Assert - Should handle null matches gracefully @@ -1334,7 +1321,7 @@ public void testMatchesFilterNullFilter() throws Exception { .thenReturn(credentials); // Act - MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + MatchingCredentialsDTO result = credentialMatchingService .getMatchingCredentials(sessionData, walletId, base64Key); // Assert - Should handle null filter gracefully @@ -1359,7 +1346,7 @@ public void testExtractRequiredClaimsNullPath() throws Exception { .thenReturn(credentials); // Act - MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + MatchingCredentialsDTO result = credentialMatchingService .getMatchingCredentials(sessionData, walletId, base64Key); // Assert - Should handle null path gracefully @@ -1384,7 +1371,7 @@ public void testExtractRequiredClaimsBlankPath() throws Exception { .thenReturn(credentials); // Act - MatchingCredentialsWithWalletDataDTO result = credentialMatchingService + MatchingCredentialsDTO result = credentialMatchingService .getMatchingCredentials(sessionData, walletId, base64Key); // Assert - Should handle blank path gracefully diff --git a/src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java index 6dc6fcc21..ccd3ad643 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java @@ -45,7 +45,7 @@ public class CredentialRequestServiceTest { private CredentialFormatHandlerFactory credentialFormatHandlerFactory; @MockBean - private KeyPairService keyPairService; + private KeyPairRetrievalService keyPairService; private final MockedStatic keyGenerationUtilMockedStatic = Mockito.mockStatic(KeyGenerationUtil.class, Mockito.withSettings().defaultAnswer(Mockito.CALLS_REAL_METHODS)); diff --git a/src/test/java/io/mosip/mimoto/service/KeyPairServiceTest.java b/src/test/java/io/mosip/mimoto/service/KeyPairServiceTest.java index 307652a14..83b0c41a6 100644 --- a/src/test/java/io/mosip/mimoto/service/KeyPairServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/KeyPairServiceTest.java @@ -6,7 +6,7 @@ import io.mosip.mimoto.model.ProofSigningKey; import io.mosip.mimoto.model.Wallet; import io.mosip.mimoto.repository.ProofSigningKeyRepository; -import io.mosip.mimoto.service.impl.KeyPairServiceImpl; +import io.mosip.mimoto.service.impl.KeyPairRetrievalServiceImpl; import io.mosip.mimoto.util.EncryptionDecryptionUtil; import io.mosip.mimoto.util.KeyGenerationUtil; import org.junit.Before; @@ -34,7 +34,7 @@ public class KeyPairServiceTest { @InjectMocks - private KeyPairServiceImpl keyPairService; + private KeyPairRetrievalServiceImpl keyPairService; @Mock private ProofSigningKeyRepository proofSigningKeyRepository; diff --git a/src/test/java/io/mosip/mimoto/service/PresentationActionServiceTest.java b/src/test/java/io/mosip/mimoto/service/PresentationActionServiceTest.java deleted file mode 100644 index b4aa9d1c0..000000000 --- a/src/test/java/io/mosip/mimoto/service/PresentationActionServiceTest.java +++ /dev/null @@ -1,357 +0,0 @@ -package io.mosip.mimoto.service; - -import com.nimbusds.jose.JOSEException; -import io.mosip.mimoto.dto.ErrorDTO; -import io.mosip.mimoto.dto.SubmitPresentationResponseDTO; -import io.mosip.mimoto.dto.SubmitPresentationRequestDTO; -import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; -import io.mosip.mimoto.exception.ApiNotAccessibleException; -import io.mosip.mimoto.exception.DecryptionException; -import io.mosip.mimoto.exception.KeyGenerationException; -import io.mosip.mimoto.exception.VPErrorNotSentException; -import io.mosip.mimoto.service.impl.PresentationActionServiceImpl; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.mockito.junit.MockitoJUnitRunner; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; - -import java.io.IOException; -import java.time.Instant; -import java.util.Arrays; -import java.util.Collections; - -import static org.junit.Assert.*; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.*; - -@RunWith(MockitoJUnitRunner.class) -public class PresentationActionServiceTest { - - @InjectMocks - private PresentationActionServiceImpl presentationActionService; - - @Mock - private PresentationSubmissionService presentationSubmissionService; - - @Mock - private PresentationService presentationService; - - private static final String WALLET_ID = "wallet123"; - private static final String PRESENTATION_ID = "presentation123"; - private static final String BASE64_KEY = "encodedKey123"; - private static final String AUTH_REQUEST = "client_id=test&nonce=123"; - - private VerifiablePresentationSessionData sessionData; - - @Before - public void setup() { - MockitoAnnotations.openMocks(this); - sessionData = new VerifiablePresentationSessionData( - PRESENTATION_ID, - AUTH_REQUEST, - Instant.now(), - true, - null - ); - } - - @Test - public void testHandlePresentationAction_SubmissionSuccess() throws Exception { - // Given - SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() - .selectedCredentials(Arrays.asList("cred-123", "cred-456")) - .build(); - - SubmitPresentationResponseDTO expectedResponse = SubmitPresentationResponseDTO.builder() - .status("SUCCESS") - .message("Presentation successfully submitted and shared with verifier") - .build(); - - when(presentationSubmissionService.submitPresentation( - eq(sessionData), eq(WALLET_ID), eq(PRESENTATION_ID), eq(request), eq(BASE64_KEY))) - .thenReturn(expectedResponse); - - // When - ResponseEntity response = presentationActionService.handlePresentationAction( - WALLET_ID, PRESENTATION_ID, request, sessionData, BASE64_KEY); - - // Then - assertEquals(HttpStatus.OK, response.getStatusCode()); - assertNotNull(response.getBody()); - assertTrue(response.getBody() instanceof SubmitPresentationResponseDTO); - SubmitPresentationResponseDTO responseBody = (SubmitPresentationResponseDTO) response.getBody(); - assertEquals("SUCCESS", responseBody.getStatus()); - - verify(presentationSubmissionService, times(1)).submitPresentation( - eq(sessionData), eq(WALLET_ID), eq(PRESENTATION_ID), eq(request), eq(BASE64_KEY)); - verify(presentationService, never()).rejectVerifier(any(), any(), any()); - } - - @Test - public void testHandlePresentationAction_RejectionSuccess() throws Exception { - // Given - SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() - .errorCode("access_denied") - .errorMessage("User denied authorization to share credentials") - .build(); - - SubmitPresentationResponseDTO expectedResponse = new SubmitPresentationResponseDTO( - "success", - null, - "Presentation request rejected. An OpenID4VP error response has been sent to the verifier." - ); - - when(presentationService.rejectVerifier(eq(WALLET_ID), eq(sessionData), any(ErrorDTO.class))) - .thenReturn(expectedResponse); - - // When - ResponseEntity response = presentationActionService.handlePresentationAction( - WALLET_ID, PRESENTATION_ID, request, sessionData, BASE64_KEY); - - // Then - assertEquals(HttpStatus.OK, response.getStatusCode()); - assertNotNull(response.getBody()); - assertTrue(response.getBody() instanceof SubmitPresentationResponseDTO); - SubmitPresentationResponseDTO responseBody = (SubmitPresentationResponseDTO) response.getBody(); - assertEquals("success", responseBody.getStatus()); - - verify(presentationService, times(1)).rejectVerifier(eq(WALLET_ID), eq(sessionData), any(ErrorDTO.class)); - verify(presentationSubmissionService, never()).submitPresentation(any(), any(), any(), any(), any()); - } - - @Test - public void testHandlePresentationAction_InvalidRequest_NoCredentialsOrError() throws Exception { - // Given - request with neither credentials nor error - SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() - .build(); - - // When - ResponseEntity response = presentationActionService.handlePresentationAction( - WALLET_ID, PRESENTATION_ID, request, sessionData, BASE64_KEY); - - // Then - should return bad request error - assertEquals(HttpStatus.BAD_REQUEST, response.getStatusCode()); - verify(presentationSubmissionService, never()).submitPresentation(any(), any(), any(), any(), any()); - verify(presentationService, never()).rejectVerifier(any(), any(), any()); - } - - @Test - public void testHandlePresentationAction_InvalidRequest_EmptyCredentials() throws Exception { - // Given - request with empty credentials list - SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() - .selectedCredentials(Collections.emptyList()) - .build(); - - // When - ResponseEntity response = presentationActionService.handlePresentationAction( - WALLET_ID, PRESENTATION_ID, request, sessionData, BASE64_KEY); - - // Then - should return bad request error - assertEquals(HttpStatus.BAD_REQUEST, response.getStatusCode()); - verify(presentationSubmissionService, never()).submitPresentation(any(), any(), any(), any(), any()); - verify(presentationService, never()).rejectVerifier(any(), any(), any()); - } - - @Test - public void testHandlePresentationAction_Submission_NullWalletKey() { - // Given - SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() - .selectedCredentials(Arrays.asList("cred-123")) - .build(); - - // When - wallet key is null - ResponseEntity response = presentationActionService.handlePresentationAction( - WALLET_ID, PRESENTATION_ID, request, sessionData, null); - - // Then - should return bad request error - assertEquals(HttpStatus.BAD_REQUEST, response.getStatusCode()); - } - - @Test - public void testHandlePresentationAction_Submission_EmptyWalletKey() { - // Given - SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() - .selectedCredentials(Arrays.asList("cred-123")) - .build(); - - // When - wallet key is empty - ResponseEntity response = presentationActionService.handlePresentationAction( - WALLET_ID, PRESENTATION_ID, request, sessionData, ""); - - // Then - should return bad request error - assertEquals(HttpStatus.BAD_REQUEST, response.getStatusCode()); - } - - @Test - public void testHandlePresentationAction_Submission_JOSEException() throws Exception { - // Given - SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() - .selectedCredentials(Arrays.asList("cred-123")) - .build(); - - when(presentationSubmissionService.submitPresentation( - any(), any(), any(), any(), any())) - .thenThrow(new JOSEException("JWT signing failed")); - - // When - ResponseEntity response = presentationActionService.handlePresentationAction( - WALLET_ID, PRESENTATION_ID, request, sessionData, BASE64_KEY); - - // Then - should return internal server error - assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode()); - } - - @Test - public void testHandlePresentationAction_Submission_KeyGenerationException() throws Exception { - // Given - SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() - .selectedCredentials(Arrays.asList("cred-123")) - .build(); - - when(presentationSubmissionService.submitPresentation( - any(), any(), any(), any(), any())) - .thenThrow(new KeyGenerationException("Key generation failed", null)); - - // When - ResponseEntity response = presentationActionService.handlePresentationAction( - WALLET_ID, PRESENTATION_ID, request, sessionData, BASE64_KEY); - - // Then - should return internal server error - assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode()); - } - - @Test - public void testHandlePresentationAction_Submission_DecryptionException() throws Exception { - // Given - SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() - .selectedCredentials(Arrays.asList("cred-123")) - .build(); - - when(presentationSubmissionService.submitPresentation( - any(), any(), any(), any(), any())) - .thenThrow(new DecryptionException("Decryption failed", null)); - - // When - ResponseEntity response = presentationActionService.handlePresentationAction( - WALLET_ID, PRESENTATION_ID, request, sessionData, BASE64_KEY); - - // Then - should return internal server error - assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode()); - } - - @Test - public void testHandlePresentationAction_Submission_ApiNotAccessibleException() throws Exception { - // Given - SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() - .selectedCredentials(Arrays.asList("cred-123")) - .build(); - - when(presentationSubmissionService.submitPresentation( - any(), any(), any(), any(), any())) - .thenThrow(new ApiNotAccessibleException("API not accessible")); - - // When - ResponseEntity response = presentationActionService.handlePresentationAction( - WALLET_ID, PRESENTATION_ID, request, sessionData, BASE64_KEY); - - // Then - should return internal server error - assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode()); - } - - @Test - public void testHandlePresentationAction_Submission_IOException() throws Exception { - // Given - SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() - .selectedCredentials(Arrays.asList("cred-123")) - .build(); - - when(presentationSubmissionService.submitPresentation( - any(), any(), any(), any(), any())) - .thenThrow(new IOException("IO error")); - - // When - ResponseEntity response = presentationActionService.handlePresentationAction( - WALLET_ID, PRESENTATION_ID, request, sessionData, BASE64_KEY); - - // Then - should return internal server error - assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode()); - } - - @Test - public void testHandlePresentationAction_Rejection_VPErrorNotSentException() throws Exception { - // Given - SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() - .errorCode("access_denied") - .errorMessage("User denied") - .build(); - - when(presentationService.rejectVerifier(any(), any(), any())) - .thenThrow(new VPErrorNotSentException("Failed to send error to verifier")); - - // When - ResponseEntity response = presentationActionService.handlePresentationAction( - WALLET_ID, PRESENTATION_ID, request, sessionData, BASE64_KEY); - - // Then - should return internal server error - assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode()); - } - - @Test - public void testHandlePresentationAction_RejectionWithNullWalletKey() { - // Given - rejection doesn't need wallet key - SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() - .errorCode("access_denied") - .errorMessage("User denied authorization") - .build(); - - SubmitPresentationResponseDTO expectedResponse = new SubmitPresentationResponseDTO( - "success", - null, - "Presentation request rejected." - ); - - when(presentationService.rejectVerifier(eq(WALLET_ID), eq(sessionData), any(ErrorDTO.class))) - .thenReturn(expectedResponse); - - // When - wallet key is null but should still work for rejection - ResponseEntity response = presentationActionService.handlePresentationAction( - WALLET_ID, PRESENTATION_ID, request, sessionData, null); - - // Then - assertEquals(HttpStatus.OK, response.getStatusCode()); - verify(presentationService, times(1)).rejectVerifier(any(), any(), any()); - } - - @Test - public void testHandlePresentationAction_SubmissionWithMultipleCredentials() throws Exception { - // Given - SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() - .selectedCredentials(Arrays.asList("cred-1", "cred-2", "cred-3", "cred-4")) - .build(); - - SubmitPresentationResponseDTO expectedResponse = SubmitPresentationResponseDTO.builder() - .status("SUCCESS") - .message("Presentation successfully submitted") - .build(); - - when(presentationSubmissionService.submitPresentation( - any(), any(), any(), any(), any())) - .thenReturn(expectedResponse); - - // When - ResponseEntity response = presentationActionService.handlePresentationAction( - WALLET_ID, PRESENTATION_ID, request, sessionData, BASE64_KEY); - - // Then - assertEquals(HttpStatus.OK, response.getStatusCode()); - verify(presentationSubmissionService, times(1)).submitPresentation( - eq(sessionData), eq(WALLET_ID), eq(PRESENTATION_ID), eq(request), eq(BASE64_KEY)); - } -} - diff --git a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java index 05831bfec..1a8a6ad93 100644 --- a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java @@ -4,7 +4,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import io.mosip.mimoto.constant.CredentialFormat; import io.mosip.mimoto.dto.ErrorDTO; -import io.mosip.mimoto.dto.VerifiablePresentationResponseDTO; +import io.mosip.mimoto.dto.VPResponseDTO; import io.mosip.mimoto.dto.mimoto.VCCredentialProperties; import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; import io.mosip.mimoto.dto.mimoto.VCCredentialResponseProof; @@ -214,81 +214,7 @@ public void constructPresentationDefinitionForSdJwtCredential() { } } - @Test - public void testHandleVPAuthorizationRequest_successful() throws Exception { - try (MockedStatic mockedStatic = mockStatic(UUID.class); - MockedStatic mockedInstant = mockStatic(Instant.class)) { - - mockedStatic.when(UUID::randomUUID).thenReturn(fixedUuid); - mockedInstant.when(Instant::now).thenReturn(fixedInstant); - - when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); - when(verifierService.isVerifierTrustedByWallet(clientId, walletId)).thenReturn(true); - - OpenID4VP mockOpenID4VP = mock(OpenID4VP.class); - when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); - when(mockOpenID4VP.authenticateVerifier(urlEncodedVPAuthorizationRequest, preRegisteredVerifiers, false)) - .thenReturn(getPresentationAuthorizationRequest(clientId, "https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fvp-response")); - - VerifiablePresentationResponseDTO expectedPresentationResponseDTO = getVerifiablePresentationResponseDTO("test-clientId", "test-clientId", null, true, true, "https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fvp-response", mockOpenID4VP, fixedInstant); - - VerifiablePresentationResponseDTO actualPresentationResponseDTO = - presentationService.handleVPAuthorizationRequest(urlEncodedVPAuthorizationRequest, walletId); - - assertEquals(expectedPresentationResponseDTO, actualPresentationResponseDTO); - } - } - - @Test - public void testHandleVPAuthorizationRequest_untrustedVerifier() throws Exception { - try (MockedStatic mockedStatic = mockStatic(UUID.class); - MockedStatic mockedInstant = mockStatic(Instant.class)) { - - mockedStatic.when(UUID::randomUUID).thenReturn(fixedUuid); - mockedInstant.when(Instant::now).thenReturn(fixedInstant); - - when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); - when(verifierService.isVerifierTrustedByWallet(clientId, walletId)).thenReturn(false); - - OpenID4VP mockOpenID4VP = mock(OpenID4VP.class); - when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); - when(mockOpenID4VP.authenticateVerifier(urlEncodedVPAuthorizationRequest, preRegisteredVerifiers, false)) - .thenReturn(getPresentationAuthorizationRequest(clientId, "https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fvp-response")); - - VerifiablePresentationResponseDTO expectedPresentationResponseDTO = getVerifiablePresentationResponseDTO("test-clientId", "test-clientId", null, false, true, "https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fvp-response", mockOpenID4VP, fixedInstant); - - VerifiablePresentationResponseDTO actualPresentationResponseDTO = - presentationService.handleVPAuthorizationRequest(urlEncodedVPAuthorizationRequest, walletId); - - assertEquals(expectedPresentationResponseDTO, actualPresentationResponseDTO); - } - } - - @Test - public void testHandleVPAuthorizationRequest_verifierNotPreRegisteredWithWallet() throws Exception { - clientId = "unknown-clientId"; - try (MockedStatic mockedStatic = mockStatic(UUID.class); - MockedStatic mockedInstant = mockStatic(Instant.class)) { - - mockedStatic.when(UUID::randomUUID).thenReturn(fixedUuid); - mockedInstant.when(Instant::now).thenReturn(fixedInstant); - - when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); - when(verifierService.isVerifierTrustedByWallet(clientId, walletId)).thenReturn(false); - - OpenID4VP mockOpenID4VP = mock(OpenID4VP.class); - when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); - when(mockOpenID4VP.authenticateVerifier(urlEncodedVPAuthorizationRequest, preRegisteredVerifiers, false)) - .thenReturn(getPresentationAuthorizationRequest(clientId, "https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fvp-response")); - - VerifiablePresentationResponseDTO expectedPresentationResponseDTO = getVerifiablePresentationResponseDTO("unknown-clientId", "unknown-clientId", null, false, false, "https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fvp-response", mockOpenID4VP, fixedInstant); - - VerifiablePresentationResponseDTO actualPresentationResponseDTO = - presentationService.handleVPAuthorizationRequest(urlEncodedVPAuthorizationRequest, walletId); - - assertEquals(expectedPresentationResponseDTO, actualPresentationResponseDTO); - } - } + // Tests for handleVPAuthorizationRequest removed - method moved to WalletPresentationService // Helper methods private VCCredentialResponse createSDJwtCredentialResponse(String format) { @@ -428,6 +354,29 @@ public void testDirectPostResponseMode() throws Exception { String result = presentationService.authorizePresentation(presentationRequestDTO); + assertEquals("test_redirect_uri", result); + verify(restApiClient).postApi(eq("https://verifier.example.com/response"), any(), any(), eq(Map.class)); + } + + @Test + public void testDirectPostResponseModeWithNoRedirectURIParam() throws Exception { + VCCredentialResponse vcCredentialResponse = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); + PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); + presentationRequestDTO.setResponseMode("direct_post"); + presentationRequestDTO.setResponseUri("https://verifier.example.com/response"); + presentationRequestDTO.setState("test-state"); + presentationRequestDTO.setNonce("test-nonce"); + presentationRequestDTO.setRedirectUri(""); + + Map mockResponse = Map.of("redirect_uri", "https://verifier.example.com/success"); + + when(dataShareService.downloadCredentialFromDataShare(eq(presentationRequestDTO))).thenReturn(vcCredentialResponse); + when(objectMapper.convertValue(eq(vcCredentialResponse.getCredential()), eq(VCCredentialProperties.class))) + .thenReturn((VCCredentialProperties) vcCredentialResponse.getCredential()); + when(restApiClient.postApi(anyString(), any(), any(), eq(Map.class))).thenReturn(mockResponse); + + String result = presentationService.authorizePresentation(presentationRequestDTO); + assertEquals("https://verifier.example.com/success", result); verify(restApiClient).postApi(eq("https://verifier.example.com/response"), any(), any(), eq(Map.class)); } @@ -679,115 +628,6 @@ public void testAuthorizePresentationWithJsonProcessingException() throws Except assertEquals(ErrorConstants.INVALID_REQUEST.getErrorCode() + " --> " + ErrorConstants.INVALID_REQUEST.getErrorMessage(), exception.getMessage()); } - @Test - public void testRejectVerifierSuccess() throws Exception { - String walletId = "wallet-123"; - ErrorDTO payload = new ErrorDTO("access_denied", "User denied authorization"); - - // Create session data using the actual constructor (presentationId, authorizationRequest, createdAt, isPreregisteredWithWallet, matchedCredentials) - String presentationId = "presentation-123"; - String authorizationRequest = "authorization-request"; - VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData( - presentationId, - authorizationRequest, - Instant.now(), - true, - null - ); - - VerifierResponse mockResponse = mock(VerifierResponse.class); - when(mockResponse.getRedirectUri()).thenReturn("https://verifier.example.com/redirect"); - when(openID4VPService.sendErrorToVerifier(eq(sessionData), eq(payload))).thenReturn(mockResponse); - - // Should not throw - SubmitPresentationResponseDTO result = presentationService.rejectVerifier(walletId, sessionData, payload); - - assertNotNull(result); - assertEquals("https://verifier.example.com/redirect", result.getRedirectUri()); - assertEquals(REJECTED_VERIFIER.getErrorCode(), result.getStatus()); - verify(openID4VPService).sendErrorToVerifier(eq(sessionData), eq(payload)); - } - - @Test(expected = VPErrorNotSentException.class) - public void testRejectVerifierNullOpenID4VPInstance() throws Exception { - String walletId = "wallet-123"; - ErrorDTO payload = new ErrorDTO("access_denied", "User denied authorization"); - - // Create session data that would cause underlying OpenID4VP to fail (simulate by making the mocked service throw) - String presentationId = "presentation-123"; - String authorizationRequest = "authorization-request"; - VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData( - presentationId, - authorizationRequest, - Instant.now(), - false, - null - ); - - // Simulate underlying service throwing an exception which PresentationServiceImpl should wrap into VPErrorNotSentException - doThrow(new IllegalArgumentException("OpenID4VP instance is null")).when(openID4VPService).sendErrorToVerifier(eq(sessionData), eq(payload)); - - presentationService.rejectVerifier(walletId, sessionData, payload); - } - - @Test(expected = VPErrorNotSentException.class) - public void testRejectVerifierMissingOpenID4VPInstance() throws Exception { - String walletId = "wallet-123"; - ErrorDTO payload = new ErrorDTO("access_denied", "User denied authorization"); - - String presentationId = "presentation-456"; - String authorizationRequest = "authorization-request-2"; - VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData( - presentationId, - authorizationRequest, - Instant.now(), - true, - null - ); - - // Simulate sendErrorToVerifier throwing IOException - doThrow(new IOException("network failure")).when(openID4VPService).sendErrorToVerifier(eq(sessionData), eq(payload)); - - presentationService.rejectVerifier(walletId, sessionData, payload); - } - - @Test(expected = VPErrorNotSentException.class) - public void testRejectVerifierNullSessionData() throws Exception { - String walletId = "wallet-123"; - ErrorDTO payload = new ErrorDTO("access_denied", "User denied authorization"); - - // Configure mock to throw when sendErrorToVerifier is invoked with null sessionData and the same payload instance - doThrow(new IllegalArgumentException("Invalid presentation session data")) - .when(openID4VPService).sendErrorToVerifier(isNull(), eq(payload)); - - // Call the service with null session data — PresentationServiceImpl should catch the underlying exception - // and rethrow VPErrorNotSentException, which this test now expects. - presentationService.rejectVerifier(walletId, null, payload); - } - - @Test - public void testRejectVerifierWithDifferentErrorCodes() throws Exception { - String walletId = "wallet-123"; - String presentationId = "presentation-789"; - String authorizationRequest = "authorization-request-3"; - VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData( - presentationId, - authorizationRequest, - Instant.now(), - true, - null - ); - - ErrorDTO payload = new ErrorDTO("interaction_required", "Interaction required from user"); - VerifierResponse mockResponse = mock(VerifierResponse.class); - when(mockResponse.getRedirectUri()).thenReturn("https://verifier.example.com/redirect"); - when(openID4VPService.sendErrorToVerifier(eq(sessionData), eq(payload))).thenReturn(mockResponse); - - SubmitPresentationResponseDTO result = presentationService.rejectVerifier(walletId, sessionData, payload); - - assertNotNull(result); - assertEquals("https://verifier.example.com/redirect", result.getRedirectUri()); - verify(openID4VPService).sendErrorToVerifier(eq(sessionData), eq(payload)); - } + // Tests for rejectVerifier removed - method moved to WalletPresentationService } \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/PresentationSubmissionServiceTest.java b/src/test/java/io/mosip/mimoto/service/PresentationSubmissionServiceTest.java deleted file mode 100644 index 4c15ae123..000000000 --- a/src/test/java/io/mosip/mimoto/service/PresentationSubmissionServiceTest.java +++ /dev/null @@ -1,1268 +0,0 @@ -package io.mosip.mimoto.service; - -import com.fasterxml.jackson.databind.ObjectMapper; -import io.mosip.mimoto.constant.OpenID4VPConstants; -import io.mosip.mimoto.constant.SigningAlgorithm; -import io.mosip.mimoto.dto.DecryptedCredentialDTO; -import io.mosip.mimoto.dto.SubmitPresentationRequestDTO; -import io.mosip.mimoto.dto.SubmitPresentationResponseDTO; -import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; -import io.mosip.mimoto.dto.openid.VerifierDTO; -import io.mosip.mimoto.dto.openid.VerifiersDTO; -import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; -import io.mosip.mimoto.exception.ApiNotAccessibleException; -import io.mosip.mimoto.exception.DecryptionException; -import io.mosip.mimoto.exception.KeyGenerationException; -import io.mosip.mimoto.model.CredentialMetadata; -import io.mosip.mimoto.model.VerifiablePresentation; -import io.mosip.mimoto.repository.VerifiablePresentationsRepository; -import io.mosip.mimoto.service.impl.OpenID4VPService; -import io.mosip.mimoto.service.impl.PresentationSubmissionServiceImpl; -import io.mosip.openID4VP.OpenID4VP; -import io.mosip.openID4VP.authorizationResponse.unsignedVPToken.UnsignedVPToken; -import io.mosip.openID4VP.authorizationResponse.unsignedVPToken.types.ldp.UnsignedLdpVPToken; -import io.mosip.openID4VP.authorizationResponse.vpTokenSigningResult.types.ldp.LdpVPTokenSigningResult; -import io.mosip.openID4VP.constants.FormatType; -import io.mosip.openID4VP.verifier.VerifierResponse; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.ArgumentCaptor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.junit.MockitoJUnitRunner; - -import java.security.KeyPair; -import java.security.KeyPairGenerator; -import java.time.Instant; -import java.util.*; - -import static org.junit.Assert.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -/** - * Comprehensive test suite for PresentationSubmissionServiceImpl - * Tests all methods, lines, and branches for complete coverage - */ -@RunWith(MockitoJUnitRunner.class) -public class PresentationSubmissionServiceTest { - - @InjectMocks - private PresentationSubmissionServiceImpl presentationSubmissionService; - - @Mock - private ObjectMapper objectMapper; - - @Mock - private OpenID4VPService openID4VPService; - - @Mock - private VerifierService verifierService; - - @Mock - private KeyPairService keyPairService; - - @Mock - private VerifiablePresentationsRepository verifiablePresentationsRepository; - - @Mock - private OpenID4VP openID4VP; - - private VerifiablePresentationSessionData sessionData; - private String walletId; - private String presentationId; - private String base64Key; - private SubmitPresentationRequestDTO request; - private KeyPair keyPair; - private VerifiersDTO verifiersDTO; - - @Before - public void setUp() throws Exception { - // Note: defaultSigningAlgorithmName is now a constant in the implementation - - walletId = "8a3d2c1b-4e5f-6a7b-8c9d-0e1f2a3b4c5d"; - presentationId = "vp-presentation-" + System.currentTimeMillis(); - base64Key = "VGhpc0lzQVNhbXBsZUJhc2U2NEVuY29kZWRXYWxsZXRLZXlGb3JUZXN0aW5nUHVycG9zZXM="; - request = SubmitPresentationRequestDTO.builder() - .selectedCredentials(Arrays.asList( - "vc-credential-123e4567-e89b-12d3-a456-426614174000", - "vc-credential-987f6543-e21a-98d7-b654-321098765432" - )) - .build(); - - sessionData = new VerifiablePresentationSessionData(); - sessionData.setPresentationId(presentationId); - sessionData.setAuthorizationRequest( - "openid4vp://?client_id=inji-verify-client-001" + - "&presentation_definition_uri=https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fpresentation_definition_uri" + - "&response_type=vp_token" + - "&response_mode=direct_post" + - "&nonce=NHgLcWlae745DpfJbUyfdg%3D%3D" + - "&response_uri=https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fvp-response" + - "&state=pcmxBfvdPEcjFObgt%2BLekA%3D%3D" - ); - sessionData.setCreatedAt(Instant.now()); - sessionData.setVerifierClientPreregistered(true); - sessionData.setMatchingCredentials(createMockDecryptedCredentials()); - - keyPair = generateKeyPairForAlgorithm(SigningAlgorithm.ED25519); - - VerifierDTO verifierDTO = VerifierDTO.builder() - .clientId("inji-verify-client-001") - .responseUris(Arrays.asList( - "https://inji-verify.collab.mosip.net/verifier/vp-response" - )) - .build(); - verifiersDTO = VerifiersDTO.builder() - .verifiers(Arrays.asList(verifierDTO)) - .build(); - } - - - @Test - public void testSubmitPresentationSuccess() throws Exception { - setupSuccessfulMocks(); - - SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( - sessionData, walletId, presentationId, request, base64Key); - - assertNotNull(response); - assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); - assertEquals(OpenID4VPConstants.MESSAGE_PRESENTATION_SUCCESS, response.getMessage()); - - verify(openID4VPService).create(presentationId); - verify(verifierService).getTrustedVerifiers(); - verify(keyPairService).getKeyPairFromDB(eq(walletId), eq(base64Key), any(SigningAlgorithm.class)); - verify(verifiablePresentationsRepository).save(any(VerifiablePresentation.class)); - } - - @Test - public void testSubmitPresentationSuccessWithMultipleCredentials() throws Exception { - request.setSelectedCredentials(Arrays.asList( - "vc-credential-123e4567-e89b-12d3-a456-426614174000", - "vc-credential-987f6543-e21a-98d7-b654-321098765432", - "vc-credential-456f7890-a12b-34c5-d678-901234567890" - )); - sessionData.setMatchingCredentials(createMockDecryptedCredentialsMultiple()); - setupSuccessfulMocks(); - - SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( - sessionData, walletId, presentationId, request, base64Key); - - assertNotNull(response); - assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); - } - - @Test - public void testSubmitPresentationSuccessWithSingleCredential() throws Exception { - request.setSelectedCredentials(Arrays.asList("vc-credential-123e4567-e89b-12d3-a456-426614174000")); - setupSuccessfulMocks(); - - SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( - sessionData, walletId, presentationId, request, base64Key); - - assertNotNull(response); - assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); - } - - @Test - public void testSubmitPresentationSuccessWithVerifierNotPreregistered() throws Exception { - sessionData.setVerifierClientPreregistered(false); - setupSuccessfulMocks(); - - SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( - sessionData, walletId, presentationId, request, base64Key); - - assertNotNull(response); - assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); - verify(openID4VP).authenticateVerifier(anyString(), anyList(), eq(false)); - } - - // NOTE: Tests for RS256 and ES256 algorithm failures removed because - // defaultSigningAlgorithmName is now a constant (ED25519) and cannot be changed. - // The implementation always uses ED25519 for LDP_VC format. - - @Test - public void testSubmitPresentationShareFailure() throws Exception { - setupMocksForShareFailure(); - - SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( - sessionData, walletId, presentationId, request, base64Key); - - assertNotNull(response); - assertEquals(OpenID4VPConstants.STATUS_ERROR, response.getStatus()); - assertEquals(OpenID4VPConstants.MESSAGE_PRESENTATION_SHARE_FAILED, response.getMessage()); - - ArgumentCaptor captor = ArgumentCaptor.forClass(VerifiablePresentation.class); - verify(verifiablePresentationsRepository).save(captor.capture()); - assertEquals(OpenID4VPConstants.STATUS_ERROR, captor.getValue().getStatus()); - } - - - // NOTE: Validation for sessionData, walletId, presentationId, and base64Key - // has been moved to PresentationActionService layer. - // PresentationSubmissionService now only validates request and selectedCredentials. - - @Test(expected = IllegalArgumentException.class) - public void testSubmitPresentationNullRequest() throws Exception { - presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, null, base64Key); - } - - @Test(expected = IllegalArgumentException.class) - public void testSubmitPresentationNullSelectedCredentials() throws Exception { - request.setSelectedCredentials(null); - presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, request, base64Key); - } - - @Test(expected = IllegalArgumentException.class) - public void testSubmitPresentationEmptySelectedCredentials() throws Exception { - request.setSelectedCredentials(Collections.emptyList()); - presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, request, base64Key); - } - - // NOTE: base64Key validation moved to PresentationActionService layer - - - @Test(expected = IllegalStateException.class) - public void testSubmitPresentationNoMatchingCredentialsInSession() throws Exception { - sessionData.setMatchingCredentials(null); - - presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, request, base64Key); - } - - @Test(expected = Exception.class) - public void testSubmitPresentationEmptyMatchingCredentialsInSession() throws Exception { - sessionData.setMatchingCredentials(Collections.emptyList()); - when(openID4VPService.create(anyString())).thenReturn(openID4VP); - - presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, request, base64Key); - } - - @Test(expected = ApiNotAccessibleException.class) - public void testSubmitPresentationVerifierServiceThrowsException() throws Exception { - when(openID4VPService.create(anyString())).thenReturn(openID4VP); - when(verifierService.getTrustedVerifiers()).thenThrow(new ApiNotAccessibleException()); - - presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, request, base64Key); - } - - @Test(expected = KeyGenerationException.class) - public void testSubmitPresentationKeyPairServiceThrowsException() throws Exception { - when(openID4VPService.create(anyString())).thenReturn(openID4VP); - when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); - when(openID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(null); - when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))) - .thenThrow(new KeyGenerationException("KEY_GEN_ERROR", "Key generation failed")); - - presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, request, base64Key); - } - - @Test(expected = DecryptionException.class) - public void testSubmitPresentationDecryptionException() throws Exception { - when(openID4VPService.create(anyString())).thenReturn(openID4VP); - when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); - when(openID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(null); - when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))) - .thenThrow(new DecryptionException("DECRYPTION_ERROR", "Decryption failed")); - - presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, request, base64Key); - } - - @Test(expected = Exception.class) - public void testSubmitPresentationIOException() throws Exception { - - - presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, request, base64Key); - } - - @Test(expected = Exception.class) - public void testSubmitPresentationJOSEException() throws Exception { - - setupMocksUpToSigning(); - when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))) - .thenThrow(new RuntimeException("Key retrieval failed")); - - presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, request, base64Key); - } - - - @Test - public void testSubmitPresentationWithLdpVcFormat() throws Exception { - List ldpCredentials = createMockDecryptedCredentialsWithFormat("ldp_vc"); - request.setSelectedCredentials(Arrays.asList("vc-credential-format-test-1", "vc-credential-format-test-2")); - sessionData.setMatchingCredentials(ldpCredentials); - setupSuccessfulMocks(); - - SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( - sessionData, walletId, presentationId, request, base64Key); - - assertNotNull(response); - assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); - } - - @Test - public void testSubmitPresentationWithMsoMdocFormat() throws Exception { - List msoMdocCredentials = createMockDecryptedCredentialsWithFormat("mso_mdoc"); - request.setSelectedCredentials(Arrays.asList("vc-credential-format-test-1", "vc-credential-format-test-2")); - sessionData.setMatchingCredentials(msoMdocCredentials); - setupSuccessfulMocksForMsoMdoc(); - - SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( - sessionData, walletId, presentationId, request, base64Key); - - assertNotNull(response); - assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); - } - - @Test - public void testSubmitPresentationWithMixedFormats() throws Exception { - List mixedCredentials = createMockDecryptedCredentialsWithMixedFormats(); - request.setSelectedCredentials(Arrays.asList("vc-credential-mixed-ldp-1", "vc-credential-mixed-mdoc-2")); - sessionData.setMatchingCredentials(mixedCredentials); - setupSuccessfulMocksForMixedFormats(); - - SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( - sessionData, walletId, presentationId, request, base64Key); - - assertNotNull(response); - assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); - } - - - @Test - public void testSubmitPresentationStoresPresentationRecordCorrectly() throws Exception { - setupSuccessfulMocks(); - ArgumentCaptor captor = ArgumentCaptor.forClass(VerifiablePresentation.class); - - presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, request, base64Key); - - verify(verifiablePresentationsRepository).save(captor.capture()); - VerifiablePresentation saved = captor.getValue(); - assertEquals(presentationId, saved.getId()); - assertEquals(walletId, saved.getWalletId()); - assertEquals(OpenID4VPConstants.STATUS_SUCCESS, saved.getStatus()); - assertTrue(saved.getConsent()); - assertNotNull(saved.getAuthRequest()); - assertNotNull(saved.getPresentationData()); - assertNotNull(saved.getVerifierId()); - assertNotNull(saved.getRequestedAt()); - } - - @Test - public void testSubmitPresentationStoresCorrectVerifierId() throws Exception { - setupSuccessfulMocks(); - ArgumentCaptor captor = ArgumentCaptor.forClass(VerifiablePresentation.class); - - presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, request, base64Key); - - verify(verifiablePresentationsRepository).save(captor.capture()); - VerifiablePresentation saved = captor.getValue(); - assertEquals("inji-verify-client-001", saved.getVerifierId()); // From mock data in setUp() - } - - @Test - public void testSubmitPresentationHandlesDatabaseException() throws Exception { - setupSuccessfulMocks(); - doThrow(new RuntimeException("Database error")) - .when(verifiablePresentationsRepository).save(any(VerifiablePresentation.class)); - - SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( - sessionData, walletId, presentationId, request, base64Key); - - assertNotNull(response); - assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); - } - - @Test - public void testSubmitPresentationStoresErrorStatusOnShareFailure() throws Exception { - setupMocksForShareFailure(); - ArgumentCaptor captor = ArgumentCaptor.forClass(VerifiablePresentation.class); - - presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, request, base64Key); - - verify(verifiablePresentationsRepository).save(captor.capture()); - VerifiablePresentation saved = captor.getValue(); - assertEquals(OpenID4VPConstants.STATUS_ERROR, saved.getStatus()); - } - - - @Test - public void testSubmitPresentationExtractsVerifierIdFromUrl() throws Exception { - sessionData.setAuthorizationRequest("https://verifier.com/authorize?client_id=extracted-client-id&other=param"); - setupSuccessfulMocks(); - ArgumentCaptor captor = ArgumentCaptor.forClass(VerifiablePresentation.class); - - presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, request, base64Key); - - verify(verifiablePresentationsRepository).save(captor.capture()); - assertNotNull(captor.getValue().getVerifierId()); - } - - @Test - public void testSubmitPresentationHandlesNullAuthorizationRequest() throws Exception { - sessionData.setAuthorizationRequest(null); - setupSuccessfulMocks(); - ArgumentCaptor captor = ArgumentCaptor.forClass(VerifiablePresentation.class); - - presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, request, base64Key); - - verify(verifiablePresentationsRepository).save(captor.capture()); - assertNotNull(captor.getValue().getVerifierId()); - } - - - @Test - public void testSignMsoMdocFormatWithMultipleDocTypes() throws Exception { - setupSuccessfulMocksForMsoMdocWithMultipleDocTypes(); - List credentials = createMockDecryptedCredentialsForMsoMdocMultipleDocTypes(); - request.setSelectedCredentials(Arrays.asList("vc-credential-mdoc-multi-1", "vc-credential-mdoc-multi-2")); - sessionData.setMatchingCredentials(credentials); - - SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( - sessionData, walletId, presentationId, request, base64Key); - - assertNotNull(response); - assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); - } - - @Test - public void testSignMsoMdocFormatWithEmptyDocTypes() throws Exception { - setupSuccessfulMocksForMsoMdocWithEmptyDocTypes(); - List credentials = createMockDecryptedCredentialsForMsoMdocEmpty(); - request.setSelectedCredentials(Arrays.asList("vc-credential-mdoc-empty-1")); - sessionData.setMatchingCredentials(credentials); - - SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( - sessionData, walletId, presentationId, request, base64Key); - - assertNotNull(response); - assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); - } - - @Test - public void testSignMsoMdocFormatWithNullDocTypeToDeviceAuthenticationBytes() throws Exception { - setupSuccessfulMocksForMsoMdocWithNullDocTypes(); - List credentials = createMockDecryptedCredentialsForMsoMdocNullDocTypes(); - request.setSelectedCredentials(Arrays.asList("vc-credential-mdoc-null-1")); - sessionData.setMatchingCredentials(credentials); - - SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( - sessionData, walletId, presentationId, request, base64Key); - - assertNotNull(response); - assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); - } - - @Test - public void testSignMsoMdocFormatWithMissingDocTypeToDeviceAuthenticationBytes() throws Exception { - setupSuccessfulMocksForMsoMdocWithMissingDocTypeKey(); - List credentials = createMockDecryptedCredentialsForMsoMdocEmpty(); - request.setSelectedCredentials(Arrays.asList("vc-credential-mdoc-missing-key-1")); - sessionData.setMatchingCredentials(credentials); - - SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( - sessionData, walletId, presentationId, request, base64Key); - - assertNotNull(response); - assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); - } - - @Test(expected = RuntimeException.class) - public void testSignMsoMdocFormatThrowsExceptionOnSigningFailure() throws Exception { - when(openID4VPService.create(anyString())).thenReturn(openID4VP); - when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); - when(openID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(null); - - KeyPair es256KeyPair = generateKeyPairForAlgorithm(SigningAlgorithm.ES256); - when(keyPairService.getKeyPairFromDB(anyString(), anyString(), eq(SigningAlgorithm.ED25519))) - .thenReturn(keyPair); - when(keyPairService.getKeyPairFromDB(anyString(), anyString(), eq(SigningAlgorithm.ES256))) - .thenReturn(es256KeyPair); - - Map unsignedVPTokenMap = new HashMap<>(); - UnsignedVPToken msoMdocToken = mock(UnsignedVPToken.class); - unsignedVPTokenMap.put(FormatType.MSO_MDOC, msoMdocToken); - - when(openID4VP.constructUnsignedVPToken(anyMap(), anyString(), anyString())) - .thenReturn(unsignedVPTokenMap); - - Map complexPayload = new HashMap<>(); - complexPayload.put("circularRef", complexPayload); - Map docTypeMap = new HashMap<>(); - docTypeMap.put("docTypeToDeviceAuthenticationBytes", new HashMap() {{ - put("org.iso.18013.5.1.mDL", complexPayload); - }}); - when(objectMapper.convertValue(any(UnsignedVPToken.class), eq(Map.class))) - .thenReturn(docTypeMap); - when(objectMapper.writeValueAsBytes(any())).thenThrow(new RuntimeException("Serialization failed")); - - List credentials = createMockDecryptedCredentialsForMsoMdocMultipleDocTypes(); - request.setSelectedCredentials(Arrays.asList("vc-credential-mdoc-fail-1")); - sessionData.setMatchingCredentials(credentials); - - presentationSubmissionService.submitPresentation( - sessionData, walletId, presentationId, request, base64Key); - } - - @Test - public void testResolveHolderIdCreatesCorrectDidJwk() throws Exception { - setupSuccessfulMocks(); - - presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, request, base64Key); - - verify(openID4VP).constructUnsignedVPToken(anyMap(), argThat(holderId -> - holderId != null && holderId.startsWith("did:jwk:")), anyString()); - } - - - @Test - public void testMapStringToFormatTypeLdpVcUnderscore() throws Exception { - List credentials = createMockDecryptedCredentialsWithFormat("ldp_vc"); - request.setSelectedCredentials(Arrays.asList("vc-credential-format-test-1", "vc-credential-format-test-2")); - sessionData.setMatchingCredentials(credentials); - setupSuccessfulMocks(); - - SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( - sessionData, walletId, presentationId, request, base64Key); - - assertNotNull(response); - assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); - } - - @Test - public void testMapStringToFormatTypeLdpVcHyphen() throws Exception { - List credentials = createMockDecryptedCredentialsWithFormat("ldp-vc"); - request.setSelectedCredentials(Arrays.asList("vc-credential-format-test-1", "vc-credential-format-test-2")); - sessionData.setMatchingCredentials(credentials); - setupSuccessfulMocks(); - - SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( - sessionData, walletId, presentationId, request, base64Key); - - assertNotNull(response); - assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); - } - - @Test - public void testMapStringToFormatTypeMsoMdocUnderscore() throws Exception { - List credentials = createMockDecryptedCredentialsWithFormat("mso_mdoc"); - request.setSelectedCredentials(Arrays.asList("vc-credential-format-test-1", "vc-credential-format-test-2")); - sessionData.setMatchingCredentials(credentials); - setupSuccessfulMocksForMsoMdoc(); - - SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( - sessionData, walletId, presentationId, request, base64Key); - - assertNotNull(response); - assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); - } - - @Test - public void testMapStringToFormatTypeMsoMdocHyphen() throws Exception { - List credentials = createMockDecryptedCredentialsWithFormat("mso-mdoc"); - request.setSelectedCredentials(Arrays.asList("vc-credential-format-test-1", "vc-credential-format-test-2")); - sessionData.setMatchingCredentials(credentials); - setupSuccessfulMocksForMsoMdoc(); - - SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( - sessionData, walletId, presentationId, request, base64Key); - - assertNotNull(response); - assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); - } - - @Test - public void testMapStringToFormatTypeUnknownDefaultsToLdpVc() throws Exception { - List credentials = createMockDecryptedCredentialsWithFormat("unknown_format"); - request.setSelectedCredentials(Arrays.asList("vc-credential-format-test-1", "vc-credential-format-test-2")); - sessionData.setMatchingCredentials(credentials); - setupSuccessfulMocks(); - - SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( - sessionData, walletId, presentationId, request, base64Key); - - assertNotNull(response); - assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); - } - - @Test - public void testMapStringToFormatTypeNullDefaultsToLdpVc() throws Exception { - List credentials = createMockDecryptedCredentialsWithFormat(null); - request.setSelectedCredentials(Arrays.asList("vc-credential-format-test-1", "vc-credential-format-test-2")); - sessionData.setMatchingCredentials(credentials); - setupSuccessfulMocks(); - - SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( - sessionData, walletId, presentationId, request, base64Key); - - assertNotNull(response); - assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); - } - - - @Test - public void testsendVPResponseToVerifierReturnsTrue() throws Exception { - setupSuccessfulMocks(); - - SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( - sessionData, walletId, presentationId, request, base64Key); - - assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); - verify(openID4VP).sendVPResponseToVerifier(anyMap()); - } - - @Test - public void testsendVPResponseToVerifierReturnsFalse() throws Exception { - setupMocksForShareFailure(); - - SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( - sessionData, walletId, presentationId, request, base64Key); - - assertEquals(OpenID4VPConstants.STATUS_ERROR, response.getStatus()); - assertEquals(OpenID4VPConstants.MESSAGE_PRESENTATION_SHARE_FAILED, response.getMessage()); - } - - @Test - public void testsendVPResponseToVerifierHandlesException() throws Exception { - setupMocksForShareException(); - - SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( - sessionData, walletId, presentationId, request, base64Key); - - assertEquals(OpenID4VPConstants.STATUS_ERROR, response.getStatus()); - } - - - @Test - public void testCreatePresentationDataIncludesSelectedCredentials() throws Exception { - setupSuccessfulMocks(); - when(objectMapper.writeValueAsString(any())).thenAnswer(invocation -> { - Object arg = invocation.getArgument(0); - if (arg instanceof Map) { - Map map = (Map) arg; - if (map.containsKey(OpenID4VPConstants.SELECTED_CREDENTIALS)) { - return "{\"selectedCredentials\":[\"cred-1\",\"cred-2\"]}"; - } - } - return "{}"; - }); - ArgumentCaptor captor = ArgumentCaptor.forClass(VerifiablePresentation.class); - - presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, request, base64Key); - - verify(verifiablePresentationsRepository).save(captor.capture()); - String presentationData = captor.getValue().getPresentationData(); - assertNotNull(presentationData); - assertTrue(presentationData.contains("selectedCredentials")); - } - - @Test - public void testExtractVerifierAuthRequestCreatesJsonObject() throws Exception { - setupSuccessfulMocks(); - when(objectMapper.writeValueAsString(any())).thenAnswer(invocation -> { - Object arg = invocation.getArgument(0); - if (arg instanceof Map) { - Map map = (Map) arg; - if (map.containsKey(OpenID4VPConstants.AUTHORIZATION_REQUEST_URL)) { - return "{\"authorizationRequestUrl\":\"" + sessionData.getAuthorizationRequest() + "\"}"; - } - } - return "{}"; - }); - ArgumentCaptor captor = ArgumentCaptor.forClass(VerifiablePresentation.class); - - presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, request, base64Key); - - verify(verifiablePresentationsRepository).save(captor.capture()); - String authRequest = captor.getValue().getAuthRequest(); - assertNotNull(authRequest); - assertTrue(authRequest.contains("authorizationRequestUrl")); - } - - @Test - public void testExtractVerifierAuthRequestHandlesException() throws Exception { - - setupSuccessfulMocks(); - ArgumentCaptor captor = ArgumentCaptor.forClass(VerifiablePresentation.class); - - presentationSubmissionService.submitPresentation(sessionData, walletId, presentationId, request, base64Key); - - verify(verifiablePresentationsRepository).save(captor.capture()); - String authRequest = captor.getValue().getAuthRequest(); - assertNotNull(authRequest); - assertTrue(authRequest.length() > 0); - } - - - @Test - public void testSubmitPresentationWithVeryLongPresentationId() throws Exception { - String longPresentationId = "a".repeat(255); - sessionData.setPresentationId(longPresentationId); - setupSuccessfulMocks(); - - SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( - sessionData, walletId, longPresentationId, request, base64Key); - - assertNotNull(response); - } - - @Test - public void testSubmitPresentationWithSpecialCharactersInWalletId() throws Exception { - String specialWalletId = "wallet-123_@#$%"; - setupSuccessfulMocks(); - - SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( - sessionData, specialWalletId, presentationId, request, base64Key); - - assertNotNull(response); - verify(keyPairService).getKeyPairFromDB(eq(specialWalletId), anyString(), any(SigningAlgorithm.class)); - } - - @Test - public void testSubmitPresentationWithLargeNumberOfCredentials() throws Exception { - List manyCredentials = new ArrayList<>(); - List manyDecryptedCredentials = new ArrayList<>(); - for (int i = 0; i < 100; i++) { - String credId = "cred-" + i; - manyCredentials.add(credId); - manyDecryptedCredentials.add(createMockDecryptedCredential(credId, "ldp_vc")); - } - request.setSelectedCredentials(manyCredentials); - sessionData.setMatchingCredentials(manyDecryptedCredentials); - setupSuccessfulMocks(); - - SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( - sessionData, walletId, presentationId, request, base64Key); - - assertNotNull(response); - assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); - } - - - private void setupSuccessfulMocks() throws Exception { - when(openID4VPService.create(anyString())).thenReturn(openID4VP); - when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); - when(openID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(null); - - when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))) - .thenReturn(keyPair); - - Map unsignedVPTokenMap = new HashMap<>(); - UnsignedLdpVPToken unsignedLdpVPToken = mock(UnsignedLdpVPToken.class); - when(unsignedLdpVPToken.getDataToSign()).thenReturn("dGVzdC1kYXRhLXRvLXNpZ24="); - unsignedVPTokenMap.put(FormatType.LDP_VC, unsignedLdpVPToken); - - when(openID4VP.constructUnsignedVPToken(anyMap(), anyString(), anyString())) - .thenReturn(unsignedVPTokenMap); - - - VerifierResponse mockVerifierResponse = mock(VerifierResponse.class); - when(mockVerifierResponse.getStatusCode()).thenReturn(200); - when(mockVerifierResponse.getRedirectUri()).thenReturn("https://verifier.example.com/redirect"); - when(openID4VP.sendVPResponseToVerifier(anyMap())).thenReturn(mockVerifierResponse); - - when(objectMapper.convertValue(any(), eq(LdpVPTokenSigningResult.class))) - .thenReturn(mock(LdpVPTokenSigningResult.class)); - when(objectMapper.writeValueAsString(any())).thenReturn("{}"); - - when(verifiablePresentationsRepository.save(any(VerifiablePresentation.class))) - .thenAnswer(invocation -> invocation.getArgument(0)); - } - - private void setupMocksUpToSigning() throws Exception { - when(openID4VPService.create(anyString())).thenReturn(openID4VP); - when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); - when(openID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(null); - - - } - - private void setupMocksForShareFailure() throws Exception { - setupSuccessfulMocks(); - VerifierResponse mockVerifierResponse = mock(VerifierResponse.class); - when(mockVerifierResponse.getStatusCode()).thenReturn(400); - when(mockVerifierResponse.getRedirectUri()).thenReturn(null); - when(openID4VP.sendVPResponseToVerifier(anyMap())).thenReturn(mockVerifierResponse); - } - - private void setupMocksForShareException() throws Exception { - setupSuccessfulMocks(); - when(openID4VP.sendVPResponseToVerifier(anyMap())).thenThrow(new RuntimeException("Share failed")); - } - - private void setupSuccessfulMocksForMsoMdoc() throws Exception { - when(openID4VPService.create(anyString())).thenReturn(openID4VP); - when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); - when(openID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(null); - - KeyPair es256KeyPair = generateKeyPairForAlgorithm(SigningAlgorithm.ES256); - when(keyPairService.getKeyPairFromDB(anyString(), anyString(), eq(SigningAlgorithm.ED25519))) - .thenReturn(keyPair); - when(keyPairService.getKeyPairFromDB(anyString(), anyString(), eq(SigningAlgorithm.ES256))) - .thenReturn(es256KeyPair); - - Map unsignedVPTokenMap = new HashMap<>(); - UnsignedVPToken msoMdocToken = mock(UnsignedVPToken.class); - unsignedVPTokenMap.put(FormatType.MSO_MDOC, msoMdocToken); - - when(openID4VP.constructUnsignedVPToken(anyMap(), anyString(), anyString())) - .thenReturn(unsignedVPTokenMap); - - Map docTypeMap = new HashMap<>(); - docTypeMap.put("docTypeToDeviceAuthenticationBytes", new HashMap() {{ - put("org.iso.18013.5.1.mDL", "test-payload"); - }}); - when(objectMapper.convertValue(any(UnsignedVPToken.class), eq(Map.class))) - .thenReturn(docTypeMap); - when(objectMapper.convertValue(any(Map.class), eq(LdpVPTokenSigningResult.class))) - .thenReturn(mock(LdpVPTokenSigningResult.class)); - when(objectMapper.writeValueAsString(any())).thenReturn("{}"); - - VerifierResponse mockVerifierResponse = mock(VerifierResponse.class); - when(mockVerifierResponse.getStatusCode()).thenReturn(200); - when(mockVerifierResponse.getRedirectUri()).thenReturn("https://verifier.example.com/redirect"); - when(openID4VP.sendVPResponseToVerifier(anyMap())).thenReturn(mockVerifierResponse); - - when(verifiablePresentationsRepository.save(any(VerifiablePresentation.class))) - .thenAnswer(invocation -> invocation.getArgument(0)); - } - - private void setupSuccessfulMocksForMixedFormats() throws Exception { - when(openID4VPService.create(anyString())).thenReturn(openID4VP); - when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); - when(openID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(null); - - KeyPair es256KeyPair = generateKeyPairForAlgorithm(SigningAlgorithm.ES256); - when(keyPairService.getKeyPairFromDB(anyString(), anyString(), eq(SigningAlgorithm.ED25519))) - .thenReturn(keyPair); - when(keyPairService.getKeyPairFromDB(anyString(), anyString(), eq(SigningAlgorithm.ES256))) - .thenReturn(es256KeyPair); - - Map unsignedVPTokenMap = new HashMap<>(); - UnsignedLdpVPToken ldpToken = mock(UnsignedLdpVPToken.class); - when(ldpToken.getDataToSign()).thenReturn("dGVzdC1kYXRhLXRvLXNpZ24="); - UnsignedVPToken msoToken = mock(UnsignedVPToken.class); - unsignedVPTokenMap.put(FormatType.LDP_VC, ldpToken); - unsignedVPTokenMap.put(FormatType.MSO_MDOC, msoToken); - - when(openID4VP.constructUnsignedVPToken(anyMap(), anyString(), anyString())) - .thenReturn(unsignedVPTokenMap); - - Map docTypeMap = new HashMap<>(); - docTypeMap.put("docTypeToDeviceAuthenticationBytes", new HashMap() {{ - put("org.iso.18013.5.1.mDL", "test-payload"); - }}); - when(objectMapper.convertValue(any(UnsignedVPToken.class), eq(Map.class))) - .thenReturn(docTypeMap); - when(objectMapper.convertValue(any(Map.class), eq(LdpVPTokenSigningResult.class))) - .thenReturn(mock(LdpVPTokenSigningResult.class)); - when(objectMapper.writeValueAsString(any())).thenReturn("{}"); - - VerifierResponse mockVerifierResponse = mock(VerifierResponse.class); - when(mockVerifierResponse.getStatusCode()).thenReturn(200); - when(mockVerifierResponse.getRedirectUri()).thenReturn("https://verifier.example.com/redirect"); - when(openID4VP.sendVPResponseToVerifier(anyMap())).thenReturn(mockVerifierResponse); - - when(verifiablePresentationsRepository.save(any(VerifiablePresentation.class))) - .thenAnswer(invocation -> invocation.getArgument(0)); - } - - private void setupSuccessfulMocksForMsoMdocWithMultipleDocTypes() throws Exception { - setupSuccessfulMocksForMsoMdoc(); - Map docTypeMap = new HashMap<>(); - docTypeMap.put("docTypeToDeviceAuthenticationBytes", new HashMap() {{ - put("org.iso.18013.5.1.mDL", "test-payload-1"); - put("org.iso.18013.5.1.Passport", "test-payload-2"); - put("org.iso.18013.5.1.HealthCard", "test-payload-3"); - }}); - when(objectMapper.convertValue(any(UnsignedVPToken.class), eq(Map.class))) - .thenReturn(docTypeMap); - } - - private void setupSuccessfulMocksForMsoMdocWithEmptyDocTypes() throws Exception { - setupSuccessfulMocksForMsoMdoc(); - Map docTypeMap = new HashMap<>(); - docTypeMap.put("docTypeToDeviceAuthenticationBytes", new HashMap<>()); - when(objectMapper.convertValue(any(UnsignedVPToken.class), eq(Map.class))) - .thenReturn(docTypeMap); - } - - private void setupSuccessfulMocksForMsoMdocWithNullDocTypes() throws Exception { - setupSuccessfulMocksForMsoMdoc(); - Map docTypeMap = new HashMap<>(); - docTypeMap.put("docTypeToDeviceAuthenticationBytes", null); - when(objectMapper.convertValue(any(UnsignedVPToken.class), eq(Map.class))) - .thenReturn(docTypeMap); - } - - private void setupSuccessfulMocksForMsoMdocWithMissingDocTypeKey() throws Exception { - setupSuccessfulMocksForMsoMdoc(); - Map docTypeMap = new HashMap<>(); - when(objectMapper.convertValue(any(UnsignedVPToken.class), eq(Map.class))) - .thenReturn(docTypeMap); - } - - private List createMockDecryptedCredentials() { - return Arrays.asList( - createMockDecryptedCredential("vc-credential-123e4567-e89b-12d3-a456-426614174000", "ldp_vc"), - createMockDecryptedCredential("vc-credential-987f6543-e21a-98d7-b654-321098765432", "ldp_vc") - ); - } - - private List createMockDecryptedCredentialsMultiple() { - return Arrays.asList( - createMockDecryptedCredential("vc-credential-123e4567-e89b-12d3-a456-426614174000", "ldp_vc"), - createMockDecryptedCredential("vc-credential-987f6543-e21a-98d7-b654-321098765432", "ldp_vc"), - createMockDecryptedCredential("vc-credential-456f7890-a12b-34c5-d678-901234567890", "ldp_vc") - ); - } - - private List createMockDecryptedCredentialsWithFormat(String format) { - return Arrays.asList( - createMockDecryptedCredential("vc-credential-format-test-1", format), - createMockDecryptedCredential("vc-credential-format-test-2", format) - ); - } - - private List createMockDecryptedCredentialsWithMixedFormats() { - return Arrays.asList( - createMockDecryptedCredential("vc-credential-mixed-ldp-1", "ldp_vc"), - createMockDecryptedCredential("vc-credential-mixed-mdoc-2", "mso_mdoc") - ); - } - - private List createMockDecryptedCredentialsForMsoMdocMultipleDocTypes() { - return Arrays.asList( - createMockDecryptedCredential("vc-credential-mdoc-multi-1", "mso_mdoc"), - createMockDecryptedCredential("vc-credential-mdoc-multi-2", "mso_mdoc") - ); - } - - private List createMockDecryptedCredentialsForMsoMdocEmpty() { - return Arrays.asList( - createMockDecryptedCredential("vc-credential-mdoc-empty-1", "mso_mdoc") - ); - } - - private List createMockDecryptedCredentialsForMsoMdocNullDocTypes() { - return Arrays.asList( - createMockDecryptedCredential("vc-credential-mdoc-null-1", "mso_mdoc") - ); - } - - private DecryptedCredentialDTO createMockDecryptedCredential(String id, String format) { - DecryptedCredentialDTO credential = new DecryptedCredentialDTO(); - credential.setId(id); - credential.setWalletId(walletId); - credential.setCreatedAt(Instant.now().minusSeconds(86400)); // Created 1 day ago - credential.setUpdatedAt(Instant.now()); - - CredentialMetadata metadata = new CredentialMetadata(); - metadata.setIssuerId("https://esignet.collab.mosip.net/v1/esignet"); - metadata.setCredentialType("MOSIPVerifiableCredential"); - credential.setCredentialMetadata(metadata); - - Map credentialData = new HashMap<>(); - credentialData.put("@context", Arrays.asList( - "https://www.w3.org/2018/credentials/v1", - "https://www.w3.org/2018/credentials/examples/v1" - )); - credentialData.put("type", Arrays.asList("VerifiableCredential", "MOSIPVerifiableCredential")); - credentialData.put("issuer", "https://esignet.collab.mosip.net/v1/esignet"); - credentialData.put("issuanceDate", Instant.now().minusSeconds(86400).toString()); - credentialData.put("expirationDate", Instant.now().plusSeconds(31536000).toString()); // 1 year - - credentialData.put("credentialSubject", new HashMap() {{ - put("id", "did:jwk:eyJrdHkiOiJFQyIsImNydiI6IlAtMjU2In0"); - put("fullName", "John Doe"); - put("email", "john.doe@example.com"); - put("dateOfBirth", "1990-01-15"); - put("gender", "Male"); - put("phone", "+91-9876543210"); - put("address", new HashMap() {{ - put("street", "123 Main Street"); - put("city", "Bangalore"); - put("state", "Karnataka"); - put("postalCode", "560001"); - put("country", "India"); - }}); - put("UIN", "1234567890123456"); - }}); - - if (format != null && (format.equals("ldp_vc") || format.equals("ldp-vc"))) { - credentialData.put("proof", new HashMap() {{ - put("type", "Ed25519Signature2020"); - put("created", Instant.now().minusSeconds(86400).toString()); - put("verificationMethod", "https://esignet.collab.mosip.net/v1/esignet#key-1"); - put("proofPurpose", "assertionMethod"); - put("proofValue", "z3FXQjecWufY46yg5abdVZsXqLhxhueuSoZgsgwJTmN7bd8gZJVYRDEHbhGEfW6aeRgvNhZqr9h7LhzJBKqvqm8Qe"); - }}); - } - - VCCredentialResponse vcResponse = VCCredentialResponse.builder() - .format(format != null ? format : "ldp_vc") - .credential(credentialData) - .build(); - - credential.setCredential(vcResponse); - return credential; - } - - /** - * Helper method to generate KeyPair for different signing algorithms - * This ensures we use the correct key type for each algorithm - */ - private KeyPair generateKeyPairForAlgorithm(SigningAlgorithm algorithm) throws Exception { - KeyPairGenerator keyPairGenerator; - - switch (algorithm) { - case RS256: - keyPairGenerator = KeyPairGenerator.getInstance("RSA"); - keyPairGenerator.initialize(2048); - break; - - case ES256: - case ES256K: - keyPairGenerator = KeyPairGenerator.getInstance("EC"); - keyPairGenerator.initialize(256); - break; - - case ED25519: - default: - keyPairGenerator = KeyPairGenerator.getInstance("Ed25519"); - break; - } - - return keyPairGenerator.generateKeyPair(); - } - - // ============= NEW TESTS FOR MISSING BRANCH COVERAGE ============= - - @Test - public void testSignMsoMdocDocTypeWithStringPayload() throws Exception { - DecryptedCredentialDTO credential = createMockDecryptedCredential("cred-mdoc-string", "mso_mdoc"); - sessionData.setMatchingCredentials(Arrays.asList(credential)); - request.setSelectedCredentials(Arrays.asList("cred-mdoc-string")); - - setupSuccessfulMocksForMsoMdoc(); - - // String payload test - Map docTypeMap = new HashMap<>(); - docTypeMap.put("docTypeToDeviceAuthenticationBytes", new HashMap() {{ - put("org.iso.18013.5.1.mDL", "test-string-payload"); - }}); - when(objectMapper.convertValue(any(UnsignedVPToken.class), eq(Map.class))) - .thenReturn(docTypeMap); - - SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( - sessionData, walletId, presentationId, request, base64Key); - - assertNotNull(response); - assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); - } - - @Test - public void testSignMsoMdocDocTypeWithObjectPayload() throws Exception { - DecryptedCredentialDTO credential = createMockDecryptedCredential("cred-mdoc-object", "mso_mdoc"); - sessionData.setMatchingCredentials(Arrays.asList(credential)); - request.setSelectedCredentials(Arrays.asList("cred-mdoc-object")); - - setupSuccessfulMocksForMsoMdoc(); - - // Object payload test - Map docTypeMap = new HashMap<>(); - Map payloadObject = new HashMap<>(); - payloadObject.put("key1", "value1"); - payloadObject.put("key2", "value2"); - - docTypeMap.put("docTypeToDeviceAuthenticationBytes", new HashMap() {{ - put("org.iso.18013.5.1.mDL", payloadObject); - }}); - when(objectMapper.convertValue(any(UnsignedVPToken.class), eq(Map.class))) - .thenReturn(docTypeMap); - when(objectMapper.writeValueAsBytes(any())).thenReturn("test-bytes".getBytes()); - - SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( - sessionData, walletId, presentationId, request, base64Key); - - assertNotNull(response); - assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); - } - - @Test - public void testStorePresentationRecordWithNullSessionData() throws Exception { - sessionData.setMatchingCredentials(createMockDecryptedCredentials()); - setupSuccessfulMocks(); - - // Test with null sessionData being passed - should handle gracefully - SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( - sessionData, walletId, presentationId, request, base64Key); - - assertNotNull(response); - // Should still complete successfully even if storage fails - assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); - } - - @Test - public void testsendVPResponseToVerifierReturnsNonSuccessStatusCode() throws Exception { - sessionData.setMatchingCredentials(createMockDecryptedCredentials()); - setupSuccessfulMocks(); - VerifierResponse mockVerifierResponse = mock(VerifierResponse.class); - when(mockVerifierResponse.getStatusCode()).thenReturn(400); - when(mockVerifierResponse.getRedirectUri()).thenReturn(null); - when(openID4VP.sendVPResponseToVerifier(anyMap())).thenReturn(mockVerifierResponse); - - SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( - sessionData, walletId, presentationId, request, base64Key); - - assertNotNull(response); - // Should return ERROR status when status code is not in 200-299 range - assertEquals(OpenID4VPConstants.STATUS_ERROR, response.getStatus()); - assertEquals(OpenID4VPConstants.MESSAGE_PRESENTATION_SHARE_FAILED, response.getMessage()); - } - - @Test - public void testSignMsoMdocDocTypeWithNullSignature() throws Exception { - // Test the branch where signature is null or empty and returns null in the filter - DecryptedCredentialDTO credential = createMockDecryptedCredential("cred-mdoc-null-sig", "mso_mdoc"); - sessionData.setMatchingCredentials(Arrays.asList(credential)); - request.setSelectedCredentials(Arrays.asList("cred-mdoc-null-sig")); - - setupSuccessfulMocksForMsoMdoc(); - - // Test with empty docType map - this will result in empty documentTypeSignatures - Map docTypeMap = new HashMap<>(); - docTypeMap.put("docTypeToDeviceAuthenticationBytes", new HashMap<>()); - when(objectMapper.convertValue(any(UnsignedVPToken.class), eq(Map.class))) - .thenReturn(docTypeMap); - - SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( - sessionData, walletId, presentationId, request, base64Key); - - assertNotNull(response); - assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); - } - - @Test - public void testExtractVerifierIdFromUrlWithNullAuthorizationRequest() throws Exception { - sessionData.setMatchingCredentials(createMockDecryptedCredentials()); - sessionData.setAuthorizationRequest(null); // Null auth request - setupSuccessfulMocks(); - - SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( - sessionData, walletId, presentationId, request, base64Key); - - assertNotNull(response); - assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); - - // Verify that "unknown" verifier ID is used when auth request is null - ArgumentCaptor captor = ArgumentCaptor.forClass(VerifiablePresentation.class); - verify(verifiablePresentationsRepository).save(captor.capture()); - VerifiablePresentation savedPresentation = captor.getValue(); - assertEquals("unknown", savedPresentation.getVerifierId()); - } - - @Test - public void testExtractVerifierAuthRequestWithNullAuthorizationRequest() throws Exception { - sessionData.setMatchingCredentials(createMockDecryptedCredentials()); - sessionData.setAuthorizationRequest(null); // Null auth request - setupSuccessfulMocks(); - - SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( - sessionData, walletId, presentationId, request, base64Key); - - assertNotNull(response); - assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); - - // Verify that "{}" is used when auth request is null - ArgumentCaptor captor = ArgumentCaptor.forClass(VerifiablePresentation.class); - verify(verifiablePresentationsRepository).save(captor.capture()); - VerifiablePresentation savedPresentation = captor.getValue(); - assertEquals("{}", savedPresentation.getAuthRequest()); - } - - @Test - public void testCreatePresentationDataHandlesJsonProcessingException() throws Exception { - sessionData.setMatchingCredentials(createMockDecryptedCredentials()); - - when(openID4VPService.create(anyString())).thenReturn(openID4VP); - when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); - when(openID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(null); - when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))) - .thenReturn(keyPair); - - Map unsignedVPTokenMap = new HashMap<>(); - UnsignedLdpVPToken unsignedLdpVPToken = mock(UnsignedLdpVPToken.class); - when(unsignedLdpVPToken.getDataToSign()).thenReturn("dGVzdC1kYXRhLXRvLXNpZ24="); - unsignedVPTokenMap.put(FormatType.LDP_VC, unsignedLdpVPToken); - - when(openID4VP.constructUnsignedVPToken(anyMap(), anyString(), anyString())) - .thenReturn(unsignedVPTokenMap); - VerifierResponse mockVerifierResponse = mock(VerifierResponse.class); - when(mockVerifierResponse.getStatusCode()).thenReturn(200); - when(mockVerifierResponse.getRedirectUri()).thenReturn("https://verifier.example.com/redirect"); - when(openID4VP.sendVPResponseToVerifier(anyMap())).thenReturn(mockVerifierResponse); - - when(objectMapper.convertValue(any(), eq(LdpVPTokenSigningResult.class))) - .thenReturn(mock(LdpVPTokenSigningResult.class)); - - // Mock writeValueAsString to throw exception only for presentation data serialization - when(objectMapper.writeValueAsString(anyMap())) - .thenReturn("{\"authorizationRequestUrl\":\"test\"}") // For auth request - .thenThrow(new com.fasterxml.jackson.core.JsonProcessingException("Test exception") {}) // For presentation data - .thenReturn("{}"); // Subsequent calls succeed - - when(verifiablePresentationsRepository.save(any(VerifiablePresentation.class))) - .thenAnswer(invocation -> invocation.getArgument(0)); - - SubmitPresentationResponseDTO response = presentationSubmissionService.submitPresentation( - sessionData, walletId, presentationId, request, base64Key); - - assertNotNull(response); - // Should handle exception gracefully and use "{}" as fallback for presentation data - assertEquals(OpenID4VPConstants.STATUS_SUCCESS, response.getStatus()); - } - - @Test(expected = Exception.class) - public void testSignVPTokenWithUnsupportedFormatType() throws Exception { - DecryptedCredentialDTO credential = createMockDecryptedCredential("cred-unsupported", "ldp_vc"); - sessionData.setMatchingCredentials(Arrays.asList(credential)); - request.setSelectedCredentials(Arrays.asList("cred-unsupported")); - - when(openID4VPService.create(anyString())).thenReturn(openID4VP); - when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); - when(openID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(null); - when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))) - .thenReturn(keyPair); - - // Create an unsupported format type scenario by mocking the unsigned VP token map - Map unsignedVPTokenMap = new HashMap<>(); - // Note: We can't create a truly unsupported FormatType, but we can test the null handling - UnsignedVPToken nullToken = null; - unsignedVPTokenMap.put(FormatType.LDP_VC, nullToken); - - when(openID4VP.constructUnsignedVPToken(anyMap(), anyString(), anyString())) - .thenReturn(unsignedVPTokenMap); - - presentationSubmissionService.submitPresentation( - sessionData, walletId, presentationId, request, base64Key); - } - - @Test - public void testFetchSelectedCredentialsWithNullMatchingCredentials() throws Exception { - sessionData.setMatchingCredentials(null); // Null matching credentials - request.setSelectedCredentials(Arrays.asList("cred-1")); - - // No mocks needed since it fails during validation before reaching mocked components - - try { - presentationSubmissionService.submitPresentation( - sessionData, walletId, presentationId, request, base64Key); - fail("Expected IllegalStateException"); - } catch (IllegalStateException e) { - assertEquals("No matching credentials found in session cache", e.getMessage()); - } - } - -} diff --git a/src/test/java/io/mosip/mimoto/service/WalletPresentationServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletPresentationServiceTest.java new file mode 100644 index 000000000..9593bf0f9 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/service/WalletPresentationServiceTest.java @@ -0,0 +1,1146 @@ +package io.mosip.mimoto.service; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.nimbusds.jose.JOSEException; +import com.nimbusds.jose.JWSHeader; +import com.nimbusds.jose.JWSSigner; +import com.nimbusds.jose.jwk.JWK; +import com.nimbusds.jose.util.Base64URL; +import io.mosip.mimoto.constant.CredentialFormat; +import io.mosip.mimoto.constant.OpenID4VPConstants; +import io.mosip.mimoto.constant.SigningAlgorithm; +import io.mosip.mimoto.dto.*; +import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; +import io.mosip.mimoto.dto.openid.VerifierDTO; +import io.mosip.mimoto.dto.openid.VerifiersDTO; +import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; +import io.mosip.mimoto.exception.*; +import io.mosip.mimoto.model.VerifiablePresentation; +import io.mosip.mimoto.repository.VerifiablePresentationsRepository; +import io.mosip.mimoto.service.impl.OpenID4VPService; +import io.mosip.mimoto.service.impl.WalletPresentationServiceImpl; +import io.mosip.mimoto.util.EncryptionDecryptionUtil; +import io.mosip.mimoto.util.JwtGeneratorUtil; +import io.mosip.mimoto.util.UrlParameterUtils; +import io.mosip.openID4VP.OpenID4VP; +import org.springframework.http.ResponseEntity; +import io.mosip.openID4VP.authorizationRequest.AuthorizationRequest; +import io.mosip.openID4VP.authorizationRequest.clientMetadata.ClientMetadata; +import io.mosip.openID4VP.authorizationResponse.unsignedVPToken.UnsignedVPToken; +import io.mosip.openID4VP.authorizationResponse.unsignedVPToken.types.ldp.UnsignedLdpVPToken; +import io.mosip.openID4VP.authorizationResponse.vpTokenSigningResult.types.ldp.LdpVPTokenSigningResult; +import io.mosip.openID4VP.constants.FormatType; +import io.mosip.openID4VP.verifier.VerifierResponse; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockedStatic; +import org.mockito.junit.MockitoJUnitRunner; + +import java.io.IOException; +import java.net.URISyntaxException; +import java.security.KeyPair; +import java.time.Instant; +import java.util.*; + +import static io.mosip.mimoto.exception.ErrorConstants.*; +import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +@RunWith(MockitoJUnitRunner.class) +public class WalletPresentationServiceTest { + + @Mock + private VerifierService verifierService; + + @Mock + private OpenID4VPService openID4VPService; + + @Mock + private ObjectMapper objectMapper; + + @Mock + private KeyPairRetrievalService keyPairService; + + @Mock + private VerifiablePresentationsRepository verifiablePresentationsRepository; + + @Mock + private EncryptionDecryptionUtil encryptionDecryptionUtil; + + @InjectMocks + private WalletPresentationServiceImpl walletPresentationService; + + private String walletId; + private String presentationId; + private String urlEncodedVPAuthorizationRequest; + private String base64Key; + private VerifiersDTO verifiersDTO; + private VerifierDTO verifierDTO; + private AuthorizationRequest mockAuthorizationRequest; + private OpenID4VP mockOpenID4VP; + private VerifiablePresentationSessionData sessionData; + private SubmitPresentationRequestDTO submitRequest; + private DecryptedCredentialDTO credentialDTO; + private VCCredentialResponse vcCredentialResponse; + private KeyPair keyPair; + private JWK jwk; + private JWSSigner jwsSigner; + + @Before + public void setUp() throws Exception { + walletId = "wallet-123"; + presentationId = "presentation-456"; + base64Key = "base64-encoded-key"; + urlEncodedVPAuthorizationRequest = "client_id=test-client&response_type=vp_token"; + + verifierDTO = new VerifierDTO( + "test-client", + List.of("https://verifier.com/response"), + List.of("https://verifier.com/jwks"), + null, + false + ); + verifiersDTO = new VerifiersDTO(); + verifiersDTO.setVerifiers(List.of(verifierDTO)); + + mockOpenID4VP = mock(OpenID4VP.class); + mockAuthorizationRequest = mock(AuthorizationRequest.class); + when(mockAuthorizationRequest.getClientId()).thenReturn("test-client"); + when(mockAuthorizationRequest.getRedirectUri()).thenReturn("https://verifier.com/redirect"); + + sessionData = new VerifiablePresentationSessionData(); + sessionData.setPresentationId(presentationId); + sessionData.setAuthorizationRequest(urlEncodedVPAuthorizationRequest); + sessionData.setCreatedAt(Instant.now()); + sessionData.setVerifierClientPreregistered(true); + + vcCredentialResponse = new VCCredentialResponse(); + vcCredentialResponse.setFormat(CredentialFormat.LDP_VC.getFormat()); + vcCredentialResponse.setCredential(Map.of("type", "VerifiableCredential")); + + credentialDTO = DecryptedCredentialDTO.builder() + .id("cred-123") + .walletId(walletId) + .credential(vcCredentialResponse) + .build(); + + sessionData.setMatchingCredentials(List.of(credentialDTO)); + + submitRequest = SubmitPresentationRequestDTO.builder() + .selectedCredentials(List.of("cred-123")) + .build(); + + keyPair = mock(KeyPair.class); + jwk = mock(JWK.class); + jwsSigner = mock(JWSSigner.class); + + JWK publicJWK = mock(JWK.class); + when(jwk.toPublicJWK()).thenReturn(publicJWK); + Map jwkJsonObject = new HashMap<>(); + jwkJsonObject.put("kty", "OKP"); + jwkJsonObject.put("crv", "Ed25519"); + when(publicJWK.toJSONObject()).thenReturn(jwkJsonObject); + } + + @Test + public void testHandleVPAuthorizationRequestSuccess() throws Exception { + when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); + when(verifierService.isVerifierClientPreregistered(anyList(), anyString())).thenReturn(true); + when(mockOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(mockAuthorizationRequest); + when(verifierService.isVerifierTrustedByWallet(anyString(), anyString())).thenReturn(true); + + ClientMetadata clientMetadata = mock(ClientMetadata.class); + when(clientMetadata.getClientName()).thenReturn("Test Verifier"); + when(clientMetadata.getLogoUri()).thenReturn("https://verifier.com/logo.png"); + when(mockAuthorizationRequest.getClientMetadata()).thenReturn(clientMetadata); + + VPResponseDTO result = walletPresentationService.handleVPAuthorizationRequest( + urlEncodedVPAuthorizationRequest, walletId); + + assertNotNull(result); + assertNotNull(result.getPresentationId()); + assertNotNull(result.getVerifiablePresentationVerifierDTO()); + assertEquals("test-client", result.getVerifiablePresentationVerifierDTO().getId()); + assertEquals("Test Verifier", result.getVerifiablePresentationVerifierDTO().getName()); + verify(openID4VPService).create(anyString()); + verify(verifierService).getTrustedVerifiers(); + } + + @Test + public void testHandleVPAuthorizationRequestWithBlankClientName() throws Exception { + when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); + when(verifierService.isVerifierClientPreregistered(anyList(), anyString())).thenReturn(true); + when(mockOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(mockAuthorizationRequest); + when(verifierService.isVerifierTrustedByWallet(anyString(), anyString())).thenReturn(false); + + ClientMetadata clientMetadata = mock(ClientMetadata.class); + when(clientMetadata.getClientName()).thenReturn(" "); + when(mockAuthorizationRequest.getClientMetadata()).thenReturn(clientMetadata); + + VPResponseDTO result = walletPresentationService.handleVPAuthorizationRequest( + urlEncodedVPAuthorizationRequest, walletId); + + assertNotNull(result); + assertEquals("test-client", result.getVerifiablePresentationVerifierDTO().getName()); + } + + @Test + public void testHandleVPAuthorizationRequestWithNullClientMetadata() throws Exception { + when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); + when(verifierService.isVerifierClientPreregistered(anyList(), anyString())).thenReturn(false); + when(mockOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(mockAuthorizationRequest); + when(verifierService.isVerifierTrustedByWallet(anyString(), anyString())).thenReturn(false); + when(mockAuthorizationRequest.getClientMetadata()).thenReturn(null); + + VPResponseDTO result = walletPresentationService.handleVPAuthorizationRequest( + urlEncodedVPAuthorizationRequest, walletId); + + assertNotNull(result); + assertEquals("test-client", result.getVerifiablePresentationVerifierDTO().getName()); + assertNull(result.getVerifiablePresentationVerifierDTO().getLogo()); + } + + @Test + public void testHandlePresentationActionSubmissionRequestSuccess() throws Exception { + SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() + .selectedCredentials(List.of("cred-123")) + .build(); + + when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); + when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); + + Map unsignedTokens = new HashMap<>(); + UnsignedLdpVPToken unsignedLdpToken = mock(UnsignedLdpVPToken.class); + when(unsignedLdpToken.getDataToSign()).thenReturn("base64-encoded-data"); + unsignedTokens.put(FormatType.LDP_VC, unsignedLdpToken); + when(mockOpenID4VP.constructUnsignedVPToken(any(), anyString(), anyString())).thenReturn(unsignedTokens); + + VerifierResponse verifierResponse = mock(VerifierResponse.class); + when(verifierResponse.getStatusCode()).thenReturn(200); + when(verifierResponse.getRedirectUri()).thenReturn("https://verifier.com/success"); + when(mockOpenID4VP.sendVPResponseToVerifier(any())).thenReturn(verifierResponse); + + try (MockedStatic jwtUtilMock = mockStatic(JwtGeneratorUtil.class); + MockedStatic urlUtilMock = mockStatic(UrlParameterUtils.class)) { + + jwtUtilMock.when(() -> JwtGeneratorUtil.generateJwk(any(), any())).thenReturn(jwk); + jwtUtilMock.when(() -> JwtGeneratorUtil.createSigner(any(), any())).thenReturn(jwsSigner); + + when(encryptionDecryptionUtil.createDetachedJwtSigningInput(anyString(), anyString())) + .thenReturn("signing-input".getBytes()); + + urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) + .thenReturn("test-client"); + + when(jwsSigner.sign(any(JWSHeader.class), any(byte[].class))).thenReturn(Base64URL.encode("signature")); + when(objectMapper.writeValueAsString(any())).thenReturn("{\"kty\":\"OKP\"}"); + when(objectMapper.convertValue(any(), eq(LdpVPTokenSigningResult.class))).thenReturn(mock(LdpVPTokenSigningResult.class)); + + ResponseEntity response = walletPresentationService.handlePresentationAction( + walletId, presentationId, request, sessionData, base64Key); + + assertNotNull(response); + assertEquals(200, response.getStatusCode().value()); + verify(verifiablePresentationsRepository).save(any(VerifiablePresentation.class)); + } + } + + @Test + public void testHandlePresentationActionRejectionRequestSuccess() throws Exception { + SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() + .errorCode("access_denied") + .errorMessage("User denied access") + .build(); + + VerifierResponse verifierResponse = mock(VerifierResponse.class); + when(verifierResponse.getRedirectUri()).thenReturn("https://verifier.com/rejected"); + when(openID4VPService.sendErrorToVerifier(any(), any(ErrorDTO.class))).thenReturn(verifierResponse); + + ResponseEntity response = walletPresentationService.handlePresentationAction( + walletId, presentationId, request, sessionData, base64Key); + + assertNotNull(response); + assertEquals(200, response.getStatusCode().value()); + verify(openID4VPService).sendErrorToVerifier(any(), any(ErrorDTO.class)); + } + + @Test + public void testHandlePresentationActionInvalidRequest() { + SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() + .selectedCredentials(null) + .errorCode(null) + .errorMessage(null) + .build(); + + ResponseEntity response = walletPresentationService.handlePresentationAction( + walletId, presentationId, request, sessionData, base64Key); + + assertNotNull(response); + assertEquals(400, response.getStatusCode().value()); + } + + @Test + public void testHandlePresentationActionJOSEException() throws Exception { + SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() + .selectedCredentials(List.of("cred-123")) + .build(); + + OpenID4VP testOpenID4VP = mock(OpenID4VP.class); + when(openID4VPService.create(anyString())).thenReturn(testOpenID4VP); + when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); + when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); + when(testOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(mockAuthorizationRequest); + + Map unsignedTokens = new HashMap<>(); + when(testOpenID4VP.constructUnsignedVPToken(any(), anyString(), anyString())).thenReturn(unsignedTokens); + + try (MockedStatic jwtUtilMock = mockStatic(JwtGeneratorUtil.class); + MockedStatic urlUtilMock = mockStatic(UrlParameterUtils.class)) { + + jwtUtilMock.when(() -> JwtGeneratorUtil.generateJwk(any(), any())).thenReturn(jwk); + jwtUtilMock.when(() -> JwtGeneratorUtil.createSigner(any(), any())) + .thenThrow(new JOSEException("JWT signing error")); + + urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) + .thenReturn("test-client"); + + when(objectMapper.writeValueAsString(any())).thenReturn("{\"kty\":\"OKP\"}"); + + ResponseEntity response = walletPresentationService.handlePresentationAction( + walletId, presentationId, request, sessionData, base64Key); + + assertNotNull(response); + assertEquals(500, response.getStatusCode().value()); + assertNotNull(response.getBody()); + assertTrue("Response body should be ErrorDTO", response.getBody() instanceof ErrorDTO); + ErrorDTO errorDTO = (ErrorDTO) response.getBody(); + assertEquals(JWT_SIGNING_ERROR.getErrorCode(), errorDTO.getErrorCode()); + } + } + + @Test + public void testHandlePresentationActionKeyGenerationException() throws Exception { + SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() + .selectedCredentials(List.of("cred-123")) + .build(); + + when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); + when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))) + .thenThrow(new KeyGenerationException(KEY_GENERATION_ERROR.getErrorCode(), "Key generation failed")); + + ResponseEntity response = walletPresentationService.handlePresentationAction( + walletId, presentationId, request, sessionData, base64Key); + + assertNotNull(response); + assertEquals(500, response.getStatusCode().value()); + } + + @Test + public void testHandlePresentationActionDecryptionException() throws Exception { + SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() + .selectedCredentials(List.of("cred-123")) + .build(); + + VerifiablePresentationSessionData testSessionData = new VerifiablePresentationSessionData(); + testSessionData.setPresentationId(presentationId); + testSessionData.setAuthorizationRequest(urlEncodedVPAuthorizationRequest); + testSessionData.setCreatedAt(Instant.now()); + testSessionData.setVerifierClientPreregistered(true); + testSessionData.setMatchingCredentials(List.of(credentialDTO)); + + when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); + when(mockOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(mockAuthorizationRequest); + + when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))) + .thenThrow(new DecryptionException(DECRYPTION_ERROR.getErrorCode(), "Decryption failed")); + + ResponseEntity response = walletPresentationService.handlePresentationAction( + walletId, presentationId, request, testSessionData, base64Key); + + assertNotNull(response); + assertEquals(500, response.getStatusCode().value()); + assertNotNull(response.getBody()); + assertTrue("Response body should be ErrorDTO", response.getBody() instanceof ErrorDTO); + ErrorDTO errorDTO = (ErrorDTO) response.getBody(); + assertEquals(DECRYPTION_ERROR.getErrorCode(), errorDTO.getErrorCode()); + } + + @Test + public void testHandlePresentationActionApiNotAccessibleException() throws Exception { + SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() + .selectedCredentials(List.of("cred-123")) + .build(); + + when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + when(verifierService.getTrustedVerifiers()).thenThrow(new ApiNotAccessibleException("API not accessible")); + + ResponseEntity response = walletPresentationService.handlePresentationAction( + walletId, presentationId, request, sessionData, base64Key); + + assertNotNull(response); + assertEquals(500, response.getStatusCode().value()); + } + + @Test + public void testHandlePresentationActionVPErrorNotSentException() throws Exception { + SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() + .errorCode("access_denied") + .errorMessage("User denied access") + .build(); + + when(openID4VPService.sendErrorToVerifier(any(), any(ErrorDTO.class))) + .thenThrow(new VPErrorNotSentException("Failed to send error")); + + ResponseEntity response = walletPresentationService.handlePresentationAction( + walletId, presentationId, request, sessionData, base64Key); + + assertNotNull(response); + assertEquals(500, response.getStatusCode().value()); + } + + @Test + public void testHandlePresentationActionIllegalArgumentException() throws Exception { + SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() + .selectedCredentials(List.of("cred-123")) + .build(); + + VerifiablePresentationSessionData nullSessionData = null; + + try (MockedStatic jwtUtilMock = mockStatic(JwtGeneratorUtil.class)) { + jwtUtilMock.when(() -> JwtGeneratorUtil.generateJwk(any(), any())).thenReturn(jwk); + + ResponseEntity response = walletPresentationService.handlePresentationAction( + walletId, presentationId, request, nullSessionData, base64Key); + + assertNotNull(response); + assertEquals(500, response.getStatusCode().value()); + } + } + + @Test + public void testSubmitPresentationSuccess() throws Exception { + when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); + when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); + + Map unsignedTokens = new HashMap<>(); + UnsignedLdpVPToken unsignedLdpToken = mock(UnsignedLdpVPToken.class); + when(unsignedLdpToken.getDataToSign()).thenReturn("base64-encoded-data"); + unsignedTokens.put(FormatType.LDP_VC, unsignedLdpToken); + when(mockOpenID4VP.constructUnsignedVPToken(any(), anyString(), anyString())).thenReturn(unsignedTokens); + + VerifierResponse verifierResponse = mock(VerifierResponse.class); + when(verifierResponse.getStatusCode()).thenReturn(200); + when(verifierResponse.getRedirectUri()).thenReturn("https://verifier.com/success"); + when(mockOpenID4VP.sendVPResponseToVerifier(any())).thenReturn(verifierResponse); + + try (MockedStatic jwtUtilMock = mockStatic(JwtGeneratorUtil.class); + MockedStatic urlUtilMock = mockStatic(UrlParameterUtils.class)) { + + jwtUtilMock.when(() -> JwtGeneratorUtil.generateJwk(any(), any())).thenReturn(jwk); + jwtUtilMock.when(() -> JwtGeneratorUtil.createSigner(any(), any())).thenReturn(jwsSigner); + + when(encryptionDecryptionUtil.createDetachedJwtSigningInput(anyString(), anyString())) + .thenReturn("signing-input".getBytes()); + + urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) + .thenReturn("test-client"); + + when(jwsSigner.sign(any(JWSHeader.class), any(byte[].class))).thenReturn(Base64URL.encode("signature")); + when(objectMapper.writeValueAsString(any())).thenReturn("{\"kty\":\"OKP\"}"); + when(objectMapper.convertValue(any(), eq(LdpVPTokenSigningResult.class))).thenReturn(mock(LdpVPTokenSigningResult.class)); + + SubmitPresentationResponseDTO result = walletPresentationService.submitPresentation( + sessionData, walletId, presentationId, submitRequest, base64Key); + + assertNotNull(result); + assertEquals(OpenID4VPConstants.STATUS_SUCCESS, result.getStatus()); + verify(verifiablePresentationsRepository).save(any(VerifiablePresentation.class)); + } + } + + @Test + public void testSubmitPresentationShareFailed() throws Exception { + when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); + when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); + + Map unsignedTokens = new HashMap<>(); + UnsignedLdpVPToken unsignedLdpToken = mock(UnsignedLdpVPToken.class); + when(unsignedLdpToken.getDataToSign()).thenReturn("base64-encoded-data"); + unsignedTokens.put(FormatType.LDP_VC, unsignedLdpToken); + when(mockOpenID4VP.constructUnsignedVPToken(any(), anyString(), anyString())).thenReturn(unsignedTokens); + + VerifierResponse verifierResponse = mock(VerifierResponse.class); + when(verifierResponse.getStatusCode()).thenReturn(500); + when(verifierResponse.getRedirectUri()).thenReturn("https://verifier.com/error"); + when(mockOpenID4VP.sendVPResponseToVerifier(any())).thenReturn(verifierResponse); + + try (MockedStatic jwtUtilMock = mockStatic(JwtGeneratorUtil.class); + MockedStatic urlUtilMock = mockStatic(UrlParameterUtils.class)) { + + jwtUtilMock.when(() -> JwtGeneratorUtil.generateJwk(any(), any())).thenReturn(jwk); + jwtUtilMock.when(() -> JwtGeneratorUtil.createSigner(any(), any())).thenReturn(jwsSigner); + + when(encryptionDecryptionUtil.createDetachedJwtSigningInput(anyString(), anyString())) + .thenReturn("signing-input".getBytes()); + + urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) + .thenReturn("test-client"); + + when(jwsSigner.sign(any(JWSHeader.class), any(byte[].class))).thenReturn(Base64URL.encode("signature")); + when(objectMapper.writeValueAsString(any())).thenReturn("{\"kty\":\"OKP\"}"); + when(objectMapper.convertValue(any(), eq(LdpVPTokenSigningResult.class))).thenReturn(mock(LdpVPTokenSigningResult.class)); + + SubmitPresentationResponseDTO result = walletPresentationService.submitPresentation( + sessionData, walletId, presentationId, submitRequest, base64Key); + + assertNotNull(result); + assertEquals(OpenID4VPConstants.STATUS_ERROR, result.getStatus()); + verify(verifiablePresentationsRepository).save(any(VerifiablePresentation.class)); + } + } + + @Test + public void testSubmitPresentationExceptionDuringShare() throws Exception { + when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); + when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); + + Map unsignedTokens = new HashMap<>(); + UnsignedLdpVPToken unsignedLdpToken = mock(UnsignedLdpVPToken.class); + when(unsignedLdpToken.getDataToSign()).thenReturn("base64-encoded-data"); + unsignedTokens.put(FormatType.LDP_VC, unsignedLdpToken); + when(mockOpenID4VP.constructUnsignedVPToken(any(), anyString(), anyString())).thenReturn(unsignedTokens); + + when(mockOpenID4VP.sendVPResponseToVerifier(any())).thenThrow(new RuntimeException("Network error")); + + try (MockedStatic jwtUtilMock = mockStatic(JwtGeneratorUtil.class); + MockedStatic urlUtilMock = mockStatic(UrlParameterUtils.class)) { + + jwtUtilMock.when(() -> JwtGeneratorUtil.generateJwk(any(), any())).thenReturn(jwk); + jwtUtilMock.when(() -> JwtGeneratorUtil.createSigner(any(), any())).thenReturn(jwsSigner); + + when(encryptionDecryptionUtil.createDetachedJwtSigningInput(anyString(), anyString())) + .thenReturn("signing-input".getBytes()); + + urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) + .thenReturn("test-client"); + + when(jwsSigner.sign(any(JWSHeader.class), any(byte[].class))).thenReturn(Base64URL.encode("signature")); + when(objectMapper.writeValueAsString(any())).thenReturn("{\"kty\":\"OKP\"}"); + when(objectMapper.convertValue(any(), eq(LdpVPTokenSigningResult.class))).thenReturn(mock(LdpVPTokenSigningResult.class)); + + SubmitPresentationResponseDTO result = walletPresentationService.submitPresentation( + sessionData, walletId, presentationId, submitRequest, base64Key); + + assertNotNull(result); + assertEquals(OpenID4VPConstants.STATUS_ERROR, result.getStatus()); + assertNull(result.getRedirectUri()); + verify(verifiablePresentationsRepository).save(any(VerifiablePresentation.class)); + } + } + + @Test(expected = java.lang.IllegalArgumentException.class) + public void testSubmitPresentationNullRequest() throws Exception { + walletPresentationService.submitPresentation( + sessionData, walletId, presentationId, null, base64Key); + } + + @Test(expected = java.lang.IllegalArgumentException.class) + public void testSubmitPresentationEmptyCredentials() throws Exception { + SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() + .selectedCredentials(Collections.emptyList()) + .build(); + + walletPresentationService.submitPresentation( + sessionData, walletId, presentationId, request, base64Key); + } + + @Test + public void testHandlePresentationSubmissionNullBase64Key() throws Exception { + SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() + .selectedCredentials(List.of("cred-123")) + .build(); + + ResponseEntity response = walletPresentationService.handlePresentationAction( + walletId, presentationId, request, sessionData, null); + + assertNotNull(response); + assertEquals(400, response.getStatusCode().value()); + assertNotNull(response.getBody()); + assertTrue("Response body should be ErrorDTO", response.getBody() instanceof ErrorDTO); + ErrorDTO errorDTO = (ErrorDTO) response.getBody(); + assertEquals(INVALID_REQUEST.getErrorCode(), errorDTO.getErrorCode()); + } + + @Test + public void testHandlePresentationSubmissionBlankBase64Key() throws Exception { + SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() + .selectedCredentials(List.of("cred-123")) + .build(); + + ResponseEntity response = walletPresentationService.handlePresentationAction( + walletId, presentationId, request, sessionData, " "); + + assertNotNull(response); + assertEquals(400, response.getStatusCode().value()); + assertNotNull(response.getBody()); + assertTrue("Response body should be ErrorDTO", response.getBody() instanceof ErrorDTO); + ErrorDTO errorDTO = (ErrorDTO) response.getBody(); + assertEquals(INVALID_REQUEST.getErrorCode(), errorDTO.getErrorCode()); + } + + @Test + public void testSignVPTokenUnsupportedFormat() throws Exception { + VCCredentialResponse unsupportedFormatCredential = new VCCredentialResponse(); + unsupportedFormatCredential.setFormat("jwt_vc_json"); + unsupportedFormatCredential.setCredential(Map.of("type", "VerifiableCredential")); + + DecryptedCredentialDTO credWithUnsupportedFormat = DecryptedCredentialDTO.builder() + .id("cred-123") + .walletId(walletId) + .credential(unsupportedFormatCredential) + .build(); + + VerifiablePresentationSessionData sessionDataWithUnsupportedFormat = new VerifiablePresentationSessionData(); + sessionDataWithUnsupportedFormat.setMatchingCredentials(List.of(credWithUnsupportedFormat)); + sessionDataWithUnsupportedFormat.setAuthorizationRequest(urlEncodedVPAuthorizationRequest); + sessionDataWithUnsupportedFormat.setVerifierClientPreregistered(true); + + when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); + when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); + + try (MockedStatic jwtUtilMock = mockStatic(JwtGeneratorUtil.class)) { + jwtUtilMock.when(() -> JwtGeneratorUtil.generateJwk(any(), any())).thenReturn(jwk); + + try { + walletPresentationService.submitPresentation( + sessionDataWithUnsupportedFormat, walletId, presentationId, submitRequest, base64Key); + fail("Should throw InvalidRequestException"); + } catch (InvalidRequestException e) { + assertTrue(e.getMessage().contains("Unsupported credential format")); + } + } + } + + @Test(expected = IllegalStateException.class) + public void testFetchSelectedCredentialsNullMatchingCredentials() throws Exception { + VerifiablePresentationSessionData nullSessionData = new VerifiablePresentationSessionData(); + nullSessionData.setMatchingCredentials(null); + + SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() + .selectedCredentials(List.of("cred-123")) + .build(); + + + try (MockedStatic jwtUtilMock = mockStatic(JwtGeneratorUtil.class)) { + jwtUtilMock.when(() -> JwtGeneratorUtil.generateJwk(any(), any())).thenReturn(jwk); + + walletPresentationService.submitPresentation( + nullSessionData, walletId, presentationId, request, base64Key); + } + } + + @Test + public void testFetchSelectedCredentialsNoMatchingCredential() throws Exception { + VerifiablePresentationSessionData sessionDataWithDifferentCred = new VerifiablePresentationSessionData(); + DecryptedCredentialDTO differentCred = DecryptedCredentialDTO.builder() + .id("cred-999") + .walletId(walletId) + .credential(vcCredentialResponse) + .build(); + sessionDataWithDifferentCred.setMatchingCredentials(List.of(differentCred)); + sessionDataWithDifferentCred.setAuthorizationRequest(urlEncodedVPAuthorizationRequest); + sessionDataWithDifferentCred.setVerifierClientPreregistered(true); + + SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() + .selectedCredentials(List.of("cred-123")) + .build(); + + when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); + when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); + when(mockOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(mockAuthorizationRequest); + + try (MockedStatic jwtUtilMock = mockStatic(JwtGeneratorUtil.class); + MockedStatic urlUtilMock = mockStatic(UrlParameterUtils.class)) { + + jwtUtilMock.when(() -> JwtGeneratorUtil.generateJwk(any(), any())).thenReturn(jwk); + jwtUtilMock.when(() -> JwtGeneratorUtil.createSigner(any(), any())).thenReturn(jwsSigner); + + when(encryptionDecryptionUtil.createDetachedJwtSigningInput(anyString(), anyString())) + .thenReturn("signing-input".getBytes()); + + urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) + .thenReturn("test-client"); + + when(objectMapper.writeValueAsString(any())).thenReturn("{\"kty\":\"OKP\"}"); + + Map unsignedTokens = new HashMap<>(); + UnsignedLdpVPToken unsignedLdpToken = mock(UnsignedLdpVPToken.class); + when(unsignedLdpToken.getDataToSign()).thenReturn("base64-encoded-data"); + unsignedTokens.put(FormatType.LDP_VC, unsignedLdpToken); + when(mockOpenID4VP.constructUnsignedVPToken(any(), anyString(), anyString())).thenReturn(unsignedTokens); + + try { + SubmitPresentationResponseDTO response = walletPresentationService.submitPresentation( + sessionDataWithDifferentCred, walletId, presentationId, request, base64Key); + assertNotNull(response); + } catch (Exception e) { + assertTrue("Unexpected exception type: " + e.getClass().getName() + ": " + e.getMessage(), + e instanceof IllegalStateException || e instanceof InvalidRequestException || + e instanceof ApiNotAccessibleException || e instanceof IOException || + e instanceof JOSEException || e instanceof DecryptionException || + e instanceof KeyGenerationException || e instanceof java.lang.NullPointerException); + } + } + } + + @Test(expected = InvalidRequestException.class) + public void testMapStringToFormatTypeNullFormat() throws Exception { + VCCredentialResponse nullFormatCredential = new VCCredentialResponse(); + nullFormatCredential.setFormat(null); + nullFormatCredential.setCredential(Map.of("type", "VerifiableCredential")); + + DecryptedCredentialDTO credWithNullFormat = DecryptedCredentialDTO.builder() + .id("cred-123") + .walletId(walletId) + .credential(nullFormatCredential) + .build(); + + VerifiablePresentationSessionData sessionDataWithNullFormat = new VerifiablePresentationSessionData(); + sessionDataWithNullFormat.setMatchingCredentials(List.of(credWithNullFormat)); + sessionDataWithNullFormat.setAuthorizationRequest(urlEncodedVPAuthorizationRequest); + sessionDataWithNullFormat.setVerifierClientPreregistered(true); + + when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); + when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); + + try (MockedStatic jwtUtilMock = mockStatic(JwtGeneratorUtil.class)) { + jwtUtilMock.when(() -> JwtGeneratorUtil.generateJwk(any(), any())).thenReturn(jwk); + + walletPresentationService.submitPresentation( + sessionDataWithNullFormat, walletId, presentationId, submitRequest, base64Key); + } + } + + @Test(expected = InvalidRequestException.class) + public void testMapStringToFormatTypeUnsupportedFormat() throws Exception { + VCCredentialResponse unsupportedFormatCredential = new VCCredentialResponse(); + unsupportedFormatCredential.setFormat("jwt_vc"); + unsupportedFormatCredential.setCredential(Map.of("type", "VerifiableCredential")); + + DecryptedCredentialDTO credWithUnsupportedFormat = DecryptedCredentialDTO.builder() + .id("cred-123") + .walletId(walletId) + .credential(unsupportedFormatCredential) + .build(); + + VerifiablePresentationSessionData sessionDataWithUnsupportedFormat = new VerifiablePresentationSessionData(); + sessionDataWithUnsupportedFormat.setMatchingCredentials(List.of(credWithUnsupportedFormat)); + sessionDataWithUnsupportedFormat.setAuthorizationRequest(urlEncodedVPAuthorizationRequest); + sessionDataWithUnsupportedFormat.setVerifierClientPreregistered(true); + + when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); + when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); + + try (MockedStatic jwtUtilMock = mockStatic(JwtGeneratorUtil.class)) { + jwtUtilMock.when(() -> JwtGeneratorUtil.generateJwk(any(), any())).thenReturn(jwk); + + walletPresentationService.submitPresentation( + sessionDataWithUnsupportedFormat, walletId, presentationId, submitRequest, base64Key); + } + } + + @Test + public void testStorePresentationRecordNullSessionData() throws Exception { + VerifiablePresentationSessionData nullSessionData = null; + + try (MockedStatic jwtUtilMock = mockStatic(JwtGeneratorUtil.class); + MockedStatic urlUtilMock = mockStatic(UrlParameterUtils.class)) { + + jwtUtilMock.when(() -> JwtGeneratorUtil.generateJwk(any(), any())).thenReturn(jwk); + jwtUtilMock.when(() -> JwtGeneratorUtil.createSigner(any(), any())).thenReturn(jwsSigner); + + + urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) + .thenReturn("test-client"); + + + try { + walletPresentationService.submitPresentation( + nullSessionData, walletId, presentationId, submitRequest, base64Key); + } catch (Exception e) { + } + } + } + + @Test + public void testStorePresentationRecordExceptionDuringSave() throws Exception { + when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); + when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); + + Map unsignedTokens = new HashMap<>(); + UnsignedLdpVPToken unsignedLdpToken = mock(UnsignedLdpVPToken.class); + when(unsignedLdpToken.getDataToSign()).thenReturn("base64-encoded-data"); + unsignedTokens.put(FormatType.LDP_VC, unsignedLdpToken); + when(mockOpenID4VP.constructUnsignedVPToken(any(), anyString(), anyString())).thenReturn(unsignedTokens); + + VerifierResponse verifierResponse = mock(VerifierResponse.class); + when(verifierResponse.getStatusCode()).thenReturn(200); + when(verifierResponse.getRedirectUri()).thenReturn("https://verifier.com/success"); + when(mockOpenID4VP.sendVPResponseToVerifier(any())).thenReturn(verifierResponse); + + when(verifiablePresentationsRepository.save(any(VerifiablePresentation.class))) + .thenThrow(new RuntimeException("Database error")); + + try (MockedStatic jwtUtilMock = mockStatic(JwtGeneratorUtil.class); + MockedStatic urlUtilMock = mockStatic(UrlParameterUtils.class)) { + + jwtUtilMock.when(() -> JwtGeneratorUtil.generateJwk(any(), any())).thenReturn(jwk); + jwtUtilMock.when(() -> JwtGeneratorUtil.createSigner(any(), any())).thenReturn(jwsSigner); + + when(encryptionDecryptionUtil.createDetachedJwtSigningInput(anyString(), anyString())) + .thenReturn("signing-input".getBytes()); + + urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) + .thenReturn("test-client"); + + when(jwsSigner.sign(any(JWSHeader.class), any(byte[].class))).thenReturn(Base64URL.encode("signature")); + when(objectMapper.writeValueAsString(any())).thenReturn("{\"kty\":\"OKP\"}"); + when(objectMapper.convertValue(any(), eq(LdpVPTokenSigningResult.class))).thenReturn(mock(LdpVPTokenSigningResult.class)); + + SubmitPresentationResponseDTO result = walletPresentationService.submitPresentation( + sessionData, walletId, presentationId, submitRequest, base64Key); + + assertNotNull(result); + } + } + + @Test + public void testExtractVerifierIdNullAuthorizationRequest() throws Exception { + VerifiablePresentationSessionData sessionDataWithNullAuth = new VerifiablePresentationSessionData(); + sessionDataWithNullAuth.setAuthorizationRequest(null); + sessionDataWithNullAuth.setMatchingCredentials(List.of(credentialDTO)); + + when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); + when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); + + Map unsignedTokens = new HashMap<>(); + UnsignedLdpVPToken unsignedLdpToken = mock(UnsignedLdpVPToken.class); + when(unsignedLdpToken.getDataToSign()).thenReturn("base64-encoded-data"); + unsignedTokens.put(FormatType.LDP_VC, unsignedLdpToken); + when(mockOpenID4VP.constructUnsignedVPToken(any(), anyString(), anyString())).thenReturn(unsignedTokens); + + VerifierResponse verifierResponse = mock(VerifierResponse.class); + when(verifierResponse.getStatusCode()).thenReturn(200); + when(verifierResponse.getRedirectUri()).thenReturn("https://verifier.com/success"); + when(mockOpenID4VP.sendVPResponseToVerifier(any())).thenReturn(verifierResponse); + + try (MockedStatic jwtUtilMock = mockStatic(JwtGeneratorUtil.class)) { + + jwtUtilMock.when(() -> JwtGeneratorUtil.generateJwk(any(), any())).thenReturn(jwk); + jwtUtilMock.when(() -> JwtGeneratorUtil.createSigner(any(), any())).thenReturn(jwsSigner); + + when(encryptionDecryptionUtil.createDetachedJwtSigningInput(anyString(), anyString())) + .thenReturn("signing-input".getBytes()); + + when(jwsSigner.sign(any(JWSHeader.class), any(byte[].class))).thenReturn(Base64URL.encode("signature")); + when(objectMapper.writeValueAsString(any())).thenReturn("{\"kty\":\"OKP\"}"); + when(objectMapper.convertValue(any(), eq(LdpVPTokenSigningResult.class))).thenReturn(mock(LdpVPTokenSigningResult.class)); + + SubmitPresentationResponseDTO result = walletPresentationService.submitPresentation( + sessionDataWithNullAuth, walletId, presentationId, submitRequest, base64Key); + + assertNotNull(result); + verify(verifiablePresentationsRepository).save(argThat(presentation -> + "unknown".equals(((VerifiablePresentation) presentation).getVerifierId()) + )); + } + } + + @Test + public void testExtractVerifierIdExceptionDuringExtraction() throws Exception { + VerifiablePresentationSessionData sessionDataWithInvalidAuth = new VerifiablePresentationSessionData(); + sessionDataWithInvalidAuth.setAuthorizationRequest("invalid-url"); + sessionDataWithInvalidAuth.setMatchingCredentials(List.of(credentialDTO)); + + when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); + when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); + + Map unsignedTokens = new HashMap<>(); + UnsignedLdpVPToken unsignedLdpToken = mock(UnsignedLdpVPToken.class); + when(unsignedLdpToken.getDataToSign()).thenReturn("base64-encoded-data"); + unsignedTokens.put(FormatType.LDP_VC, unsignedLdpToken); + when(mockOpenID4VP.constructUnsignedVPToken(any(), anyString(), anyString())).thenReturn(unsignedTokens); + + VerifierResponse verifierResponse = mock(VerifierResponse.class); + when(verifierResponse.getStatusCode()).thenReturn(200); + when(verifierResponse.getRedirectUri()).thenReturn("https://verifier.com/success"); + when(mockOpenID4VP.sendVPResponseToVerifier(any())).thenReturn(verifierResponse); + + try (MockedStatic jwtUtilMock = mockStatic(JwtGeneratorUtil.class); + MockedStatic urlUtilMock = mockStatic(UrlParameterUtils.class)) { + + jwtUtilMock.when(() -> JwtGeneratorUtil.generateJwk(any(), any())).thenReturn(jwk); + jwtUtilMock.when(() -> JwtGeneratorUtil.createSigner(any(), any())).thenReturn(jwsSigner); + + when(encryptionDecryptionUtil.createDetachedJwtSigningInput(anyString(), anyString())) + .thenReturn("signing-input".getBytes()); + + urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) + .thenThrow(new RuntimeException("URL parsing error")); + + when(jwsSigner.sign(any(JWSHeader.class), any(byte[].class))).thenReturn(Base64URL.encode("signature")); + when(objectMapper.writeValueAsString(any())).thenReturn("{\"kty\":\"OKP\"}"); + when(objectMapper.convertValue(any(), eq(LdpVPTokenSigningResult.class))).thenReturn(mock(LdpVPTokenSigningResult.class)); + + SubmitPresentationResponseDTO result = walletPresentationService.submitPresentation( + sessionDataWithInvalidAuth, walletId, presentationId, submitRequest, base64Key); + + assertNotNull(result); + verify(verifiablePresentationsRepository).save(argThat(presentation -> + "unknown".equals(((VerifiablePresentation) presentation).getVerifierId()) + )); + } + } + + @Test + public void testExtractVerifierAuthRequestNullAuthorizationRequest() throws Exception { + VerifiablePresentationSessionData sessionDataWithNullAuth = new VerifiablePresentationSessionData(); + sessionDataWithNullAuth.setAuthorizationRequest(null); + sessionDataWithNullAuth.setMatchingCredentials(List.of(credentialDTO)); + + when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); + when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); + + Map unsignedTokens = new HashMap<>(); + UnsignedLdpVPToken unsignedLdpToken = mock(UnsignedLdpVPToken.class); + when(unsignedLdpToken.getDataToSign()).thenReturn("base64-encoded-data"); + unsignedTokens.put(FormatType.LDP_VC, unsignedLdpToken); + when(mockOpenID4VP.constructUnsignedVPToken(any(), anyString(), anyString())).thenReturn(unsignedTokens); + + VerifierResponse verifierResponse = mock(VerifierResponse.class); + when(verifierResponse.getStatusCode()).thenReturn(200); + when(verifierResponse.getRedirectUri()).thenReturn("https://verifier.com/success"); + when(mockOpenID4VP.sendVPResponseToVerifier(any())).thenReturn(verifierResponse); + + try (MockedStatic jwtUtilMock = mockStatic(JwtGeneratorUtil.class); + MockedStatic urlUtilMock = mockStatic(UrlParameterUtils.class)) { + + jwtUtilMock.when(() -> JwtGeneratorUtil.generateJwk(any(), any())).thenReturn(jwk); + jwtUtilMock.when(() -> JwtGeneratorUtil.createSigner(any(), any())).thenReturn(jwsSigner); + + when(encryptionDecryptionUtil.createDetachedJwtSigningInput(anyString(), anyString())) + .thenReturn("signing-input".getBytes()); + + urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) + .thenReturn("test-client"); + + when(jwsSigner.sign(any(JWSHeader.class), any(byte[].class))).thenReturn(Base64URL.encode("signature")); + when(objectMapper.writeValueAsString(any())).thenReturn("{\"kty\":\"OKP\"}"); + when(objectMapper.convertValue(any(), eq(LdpVPTokenSigningResult.class))).thenReturn(mock(LdpVPTokenSigningResult.class)); + + SubmitPresentationResponseDTO result = walletPresentationService.submitPresentation( + sessionDataWithNullAuth, walletId, presentationId, submitRequest, base64Key); + + assertNotNull(result); + } + } + + @Test + public void testExtractVerifierAuthRequestExceptionDuringExtraction() throws Exception { + when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); + when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); + + Map unsignedTokens = new HashMap<>(); + UnsignedLdpVPToken unsignedLdpToken = mock(UnsignedLdpVPToken.class); + when(unsignedLdpToken.getDataToSign()).thenReturn("base64-encoded-data"); + unsignedTokens.put(FormatType.LDP_VC, unsignedLdpToken); + when(mockOpenID4VP.constructUnsignedVPToken(any(), anyString(), anyString())).thenReturn(unsignedTokens); + + VerifierResponse verifierResponse = mock(VerifierResponse.class); + when(verifierResponse.getStatusCode()).thenReturn(200); + when(verifierResponse.getRedirectUri()).thenReturn("https://verifier.com/success"); + when(mockOpenID4VP.sendVPResponseToVerifier(any())).thenReturn(verifierResponse); + + when(objectMapper.writeValueAsString(any())) + .thenReturn("{\"kty\":\"OKP\"}") + .thenThrow(new JsonProcessingException("JSON error") {}); + + try (MockedStatic jwtUtilMock = mockStatic(JwtGeneratorUtil.class); + MockedStatic urlUtilMock = mockStatic(UrlParameterUtils.class)) { + + jwtUtilMock.when(() -> JwtGeneratorUtil.generateJwk(any(), any())).thenReturn(jwk); + jwtUtilMock.when(() -> JwtGeneratorUtil.createSigner(any(), any())).thenReturn(jwsSigner); + + when(encryptionDecryptionUtil.createDetachedJwtSigningInput(anyString(), anyString())) + .thenReturn("signing-input".getBytes()); + + urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) + .thenReturn("test-client"); + + when(jwsSigner.sign(any(JWSHeader.class), any(byte[].class))).thenReturn(Base64URL.encode("signature")); + when(objectMapper.convertValue(any(), eq(LdpVPTokenSigningResult.class))).thenReturn(mock(LdpVPTokenSigningResult.class)); + + SubmitPresentationResponseDTO result = walletPresentationService.submitPresentation( + sessionData, walletId, presentationId, submitRequest, base64Key); + + assertNotNull(result); + } + } + + @Test + public void testCreatePresentationDataExceptionDuringCreation() throws Exception { + when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); + when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); + + Map unsignedTokens = new HashMap<>(); + UnsignedLdpVPToken unsignedLdpToken = mock(UnsignedLdpVPToken.class); + when(unsignedLdpToken.getDataToSign()).thenReturn("base64-encoded-data"); + unsignedTokens.put(FormatType.LDP_VC, unsignedLdpToken); + when(mockOpenID4VP.constructUnsignedVPToken(any(), anyString(), anyString())).thenReturn(unsignedTokens); + + VerifierResponse verifierResponse = mock(VerifierResponse.class); + when(verifierResponse.getStatusCode()).thenReturn(200); + when(verifierResponse.getRedirectUri()).thenReturn("https://verifier.com/success"); + when(mockOpenID4VP.sendVPResponseToVerifier(any())).thenReturn(verifierResponse); + + when(objectMapper.writeValueAsString(any())) + .thenReturn("{\"kty\":\"OKP\"}") + .thenThrow(new JsonProcessingException("JSON error") {}); + + try (MockedStatic jwtUtilMock = mockStatic(JwtGeneratorUtil.class); + MockedStatic urlUtilMock = mockStatic(UrlParameterUtils.class)) { + + jwtUtilMock.when(() -> JwtGeneratorUtil.generateJwk(any(), any())).thenReturn(jwk); + jwtUtilMock.when(() -> JwtGeneratorUtil.createSigner(any(), any())).thenReturn(jwsSigner); + + when(encryptionDecryptionUtil.createDetachedJwtSigningInput(anyString(), anyString())) + .thenReturn("signing-input".getBytes()); + + urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) + .thenReturn("test-client"); + + when(jwsSigner.sign(any(JWSHeader.class), any(byte[].class))).thenReturn(Base64URL.encode("signature")); + when(objectMapper.convertValue(any(), eq(LdpVPTokenSigningResult.class))).thenReturn(mock(LdpVPTokenSigningResult.class)); + + SubmitPresentationResponseDTO result = walletPresentationService.submitPresentation( + sessionData, walletId, presentationId, submitRequest, base64Key); + + assertNotNull(result); + } + } + + @Test + public void testRejectVerifierSuccess() throws Exception { + ErrorDTO errorDTO = new ErrorDTO(); + errorDTO.setErrorCode("access_denied"); + errorDTO.setErrorMessage("User denied access"); + + VerifierResponse verifierResponse = mock(VerifierResponse.class); + when(verifierResponse.getRedirectUri()).thenReturn("https://verifier.com/rejected"); + when(openID4VPService.sendErrorToVerifier(any(), any(ErrorDTO.class))).thenReturn(verifierResponse); + + SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() + .errorCode("access_denied") + .errorMessage("User denied access") + .build(); + + ResponseEntity response = walletPresentationService.handlePresentationAction( + walletId, presentationId, request, sessionData, base64Key); + + assertNotNull(response); + assertEquals(200, response.getStatusCode().value()); + verify(openID4VPService).sendErrorToVerifier(any(), any(ErrorDTO.class)); + } + + @Test + public void testRejectVerifierApiNotAccessibleException() throws Exception { + SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() + .errorCode("access_denied") + .errorMessage("User denied access") + .build(); + + when(openID4VPService.sendErrorToVerifier(any(), any(ErrorDTO.class))) + .thenThrow(new ApiNotAccessibleException("API not accessible")); + + ResponseEntity response = walletPresentationService.handlePresentationAction( + walletId, presentationId, request, sessionData, base64Key); + + assertNotNull(response); + assertEquals(500, response.getStatusCode().value()); + } + + @Test + public void testRejectVerifierIOException() throws Exception { + SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() + .errorCode("access_denied") + .errorMessage("User denied access") + .build(); + + when(openID4VPService.sendErrorToVerifier(any(), any(ErrorDTO.class))) + .thenThrow(new IOException("IO error")); + + ResponseEntity response = walletPresentationService.handlePresentationAction( + walletId, presentationId, request, sessionData, base64Key); + + assertNotNull(response); + assertEquals(500, response.getStatusCode().value()); + } + + @Test + public void testRejectVerifierURISyntaxException() throws Exception { + SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() + .errorCode("access_denied") + .errorMessage("User denied access") + .build(); + + when(openID4VPService.sendErrorToVerifier(any(), any(ErrorDTO.class))) + .thenThrow(new URISyntaxException("invalid", "URI syntax error")); + + ResponseEntity response = walletPresentationService.handlePresentationAction( + walletId, presentationId, request, sessionData, base64Key); + + assertNotNull(response); + assertEquals(500, response.getStatusCode().value()); + } + + @Test + public void testRejectVerifierIllegalArgumentException() throws Exception { + SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() + .errorCode("access_denied") + .errorMessage("User denied access") + .build(); + + when(openID4VPService.sendErrorToVerifier(any(), any(ErrorDTO.class))) + .thenThrow(new java.lang.IllegalArgumentException("Invalid argument")); + + ResponseEntity response = walletPresentationService.handlePresentationAction( + walletId, presentationId, request, sessionData, base64Key); + + assertNotNull(response); + assertEquals(500, response.getStatusCode().value()); + } +} diff --git a/src/test/java/io/mosip/mimoto/util/Base64UtilTest.java b/src/test/java/io/mosip/mimoto/util/Base64UtilTest.java deleted file mode 100644 index e629f8185..000000000 --- a/src/test/java/io/mosip/mimoto/util/Base64UtilTest.java +++ /dev/null @@ -1,611 +0,0 @@ -package io.mosip.mimoto.util; - -import org.junit.Test; - -import java.nio.charset.StandardCharsets; -import java.util.Base64; - -import static org.junit.Assert.*; - -public class Base64UtilTest { - - @Test - public void testEncodeStringSuccess() { - String input = "Hello World"; - String result = Base64Util.encode(input); - - assertNotNull(result); - assertFalse(result.contains("=")); - assertFalse(result.contains("+")); - assertFalse(result.contains("/")); - } - - @Test - public void testEncodeStringWithNullInput() { - String result = Base64Util.encode((String) null); - assertNull(result); - } - - @Test - public void testEncodeStringWithEmptyInput() { - String input = ""; - String result = Base64Util.encode(input); - - assertNotNull(result); - assertEquals("", result); - } - - @Test - public void testEncodeStringWithSpecialCharacters() { - String input = "Hello@#$%^&*()_+-=[]{}|;:',.<>?/~`"; - String result = Base64Util.encode(input); - - assertNotNull(result); - assertFalse(result.contains("=")); - } - - @Test - public void testEncodeStringWithUnicodeCharacters() { - String input = "Hello 世界 🌍"; - String result = Base64Util.encode(input); - - assertNotNull(result); - assertFalse(result.contains("=")); - } - - @Test - public void testEncodeStringWithMultilineText() { - String input = "Line 1\nLine 2\nLine 3"; - String result = Base64Util.encode(input); - - assertNotNull(result); - assertFalse(result.contains("\n")); - } - - @Test - public void testEncodeBytesSuccess() { - byte[] input = "Hello World".getBytes(StandardCharsets.UTF_8); - String result = Base64Util.encode(input); - - assertNotNull(result); - assertFalse(result.contains("=")); - } - - @Test - public void testEncodeBytesWithNullInput() { - String result = Base64Util.encode((byte[]) null); - assertNull(result); - } - - @Test - public void testEncodeBytesWithEmptyArray() { - byte[] input = new byte[0]; - String result = Base64Util.encode(input); - - assertNotNull(result); - assertEquals("", result); - } - - @Test - public void testEncodeBytesWithBinaryData() { - byte[] input = new byte[]{0x00, 0x01, 0x02, (byte) 0xFF, (byte) 0xFE}; - String result = Base64Util.encode(input); - - assertNotNull(result); - assertFalse(result.contains("=")); - } - - @Test - public void testDecodeSuccess() { - String input = "SGVsbG8gV29ybGQ"; - byte[] result = Base64Util.decode(input); - - assertNotNull(result); - assertEquals("Hello World", new String(result, StandardCharsets.UTF_8)); - } - - @Test - public void testDecodeWithNullInput() { - byte[] result = Base64Util.decode(null); - assertNull(result); - } - - @Test - public void testDecodeWithEmptyString() { - String input = ""; - byte[] result = Base64Util.decode(input); - - assertNotNull(result); - assertEquals(0, result.length); - } - - @Test - public void testDecodeWithBase64UrlCharacters() { - String input = "SGVsbG8tV29ybGRf"; - byte[] result = Base64Util.decode(input); - - assertNotNull(result); - assertTrue(result.length > 0); - } - - @Test - public void testDecodeWithInvalidBase64String() { - String input = "Invalid!@#$Base64"; - try { - byte[] result = Base64Util.decode(input); - assertNotNull(result); - } catch (Exception e) { - assertNotNull(e); - } - } - - @Test - public void testDecodeToStringSuccess() { - String input = "SGVsbG8gV29ybGQ"; - String result = Base64Util.decodeToString(input); - - assertNotNull(result); - assertEquals("Hello World", result); - } - - @Test - public void testDecodeToStringWithNullInput() { - String result = Base64Util.decodeToString(null); - assertNull(result); - } - - @Test - public void testDecodeToStringWithUnicodeContent() { - String original = "Hello 世界 🌍"; - String encoded = Base64Util.encode(original); - String decoded = Base64Util.decodeToString(encoded); - - assertEquals(original, decoded); - } - - @Test - public void testEncodeWithJavaStdLibStringSuccess() { - String input = "Hello World"; - String result = Base64Util.encodeWithJavaStdLib(input); - - assertNotNull(result); - assertFalse(result.contains("=")); - assertFalse(result.contains("+")); - assertFalse(result.contains("/")); - } - - @Test - public void testEncodeWithJavaStdLibStringWithNullInput() { - String result = Base64Util.encodeWithJavaStdLib((String) null); - assertNull(result); - } - - @Test - public void testEncodeWithJavaStdLibStringWithEmptyInput() { - String input = ""; - String result = Base64Util.encodeWithJavaStdLib(input); - - assertNotNull(result); - assertEquals("", result); - } - - @Test - public void testEncodeWithJavaStdLibBytesSuccess() { - byte[] input = "Hello World".getBytes(StandardCharsets.UTF_8); - String result = Base64Util.encodeWithJavaStdLib(input); - - assertNotNull(result); - assertFalse(result.contains("=")); - } - - @Test - public void testEncodeWithJavaStdLibBytesWithNullInput() { - String result = Base64Util.encodeWithJavaStdLib((byte[]) null); - assertNull(result); - } - - @Test - public void testEncodeWithJavaStdLibBytesWithEmptyArray() { - byte[] input = new byte[0]; - String result = Base64Util.encodeWithJavaStdLib(input); - - assertNotNull(result); - assertEquals("", result); - } - - @Test - public void testDecodeWithJavaStdLibSuccess() { - String input = "SGVsbG8gV29ybGQ"; - byte[] result = Base64Util.decodeWithJavaStdLib(input); - - assertNotNull(result); - assertEquals("Hello World", new String(result, StandardCharsets.UTF_8)); - } - - @Test - public void testDecodeWithJavaStdLibWithNullInput() { - byte[] result = Base64Util.decodeWithJavaStdLib(null); - assertNull(result); - } - - @Test - public void testDecodeWithJavaStdLibWithEmptyString() { - String input = ""; - byte[] result = Base64Util.decodeWithJavaStdLib(input); - - assertNotNull(result); - assertEquals(0, result.length); - } - - @Test(expected = IllegalArgumentException.class) - public void testDecodeWithJavaStdLibWithInvalidBase64String() { - String input = "Invalid!@#$Base64"; - Base64Util.decodeWithJavaStdLib(input); - } - - @Test - public void testDecodeFlexibleWithBase64UrlString() { - String input = "SGVsbG8tV29ybGRf"; - byte[] result = Base64Util.decodeFlexible(input); - - assertNotNull(result); - assertTrue(result.length > 0); - } - - @Test - public void testDecodeFlexibleWithStandardBase64String() { - String input = Base64.getEncoder().encodeToString("Hello World".getBytes(StandardCharsets.UTF_8)); - byte[] result = Base64Util.decodeFlexible(input); - - assertNotNull(result); - assertEquals("Hello World", new String(result, StandardCharsets.UTF_8)); - } - - @Test - public void testDecodeFlexibleWithNullInput() { - byte[] result = Base64Util.decodeFlexible(null); - assertNull(result); - } - - @Test - public void testDecodeFlexibleWithBase64UrlNoPadding() { - String original = "Hello"; - String encoded = Base64.getUrlEncoder().withoutPadding().encodeToString(original.getBytes(StandardCharsets.UTF_8)); - byte[] result = Base64Util.decodeFlexible(encoded); - - assertNotNull(result); - assertEquals(original, new String(result, StandardCharsets.UTF_8)); - } - - @Test - public void testDecodeFlexibleFallsBackToStandardBase64() { - String original = "Test Data"; - String encoded = Base64.getEncoder().encodeToString(original.getBytes(StandardCharsets.UTF_8)); - byte[] result = Base64Util.decodeFlexible(encoded); - - assertNotNull(result); - assertEquals(original, new String(result, StandardCharsets.UTF_8)); - } - - @Test - public void testDecodeFlexibleWithBase64UrlCharactersAndNormalization() { - String base64UrlString = "SGVsbG8tV29ybGQ"; - byte[] result = Base64Util.decodeFlexible(base64UrlString); - - assertNotNull(result); - assertTrue(result.length > 0); - } - - @Test(expected = IllegalArgumentException.class) - public void testDecodeFlexibleWithCompletelyInvalidString() { - String input = "!!!Invalid@@@"; - Base64Util.decodeFlexible(input); - } - - @Test - public void testNormalizeBase64StringWithBase64UrlCharacters() { - String input = "SGVsbG8tV29ybGRf"; - String result = Base64Util.normalizeBase64String(input); - - assertNotNull(result); - assertFalse(result.contains("-")); - assertFalse(result.contains("_")); - assertTrue(result.contains("+") || !input.contains("-")); - assertTrue(result.contains("/") || !input.contains("_")); - } - - @Test - public void testNormalizeBase64StringWithNullInput() { - String result = Base64Util.normalizeBase64String(null); - assertNull(result); - } - - @Test - public void testNormalizeBase64StringAddsProperPadding() { - String input = "SGVsbG8"; - String result = Base64Util.normalizeBase64String(input); - - assertNotNull(result); - assertTrue(result.length() % 4 == 0); - assertTrue(result.endsWith("=")); - } - - @Test - public void testNormalizeBase64StringWithAlreadyPaddedString() { - String input = "SGVsbG8gV29ybGQ="; - String result = Base64Util.normalizeBase64String(input); - - assertNotNull(result); - assertTrue(result.length() % 4 == 0); - } - - @Test - public void testNormalizeBase64StringWithNoCharactersToReplace() { - String input = "SGVsbG8"; - String result = Base64Util.normalizeBase64String(input); - - assertNotNull(result); - assertTrue(result.length() % 4 == 0); - } - - @Test - public void testNormalizeBase64StringWithEmptyString() { - String input = ""; - String result = Base64Util.normalizeBase64String(input); - - assertNotNull(result); - assertEquals("", result); - } - - @Test - public void testNormalizeBase64StringConvertsHyphenToPlus() { - String input = "SGVs-G8"; - String result = Base64Util.normalizeBase64String(input); - - assertNotNull(result); - assertTrue(result.contains("+")); - assertFalse(result.contains("-")); - } - - @Test - public void testNormalizeBase64StringConvertsUnderscoreToSlash() { - String input = "SGVs_G8"; - String result = Base64Util.normalizeBase64String(input); - - assertNotNull(result); - assertTrue(result.contains("/")); - assertFalse(result.contains("_")); - } - - @Test - public void testNormalizeBase64StringWithMultiplePaddingNeeded() { - String input = "SGVs"; - String result = Base64Util.normalizeBase64String(input); - - assertNotNull(result); - assertTrue(result.length() % 4 == 0); - int paddingCount = result.length() - result.replace("=", "").length(); - assertTrue(paddingCount >= 0); - } - - @Test - public void testCreateDetachedJwtSigningInputSuccess() { - String header = "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9"; - byte[] payload = "test payload".getBytes(StandardCharsets.UTF_8); - - byte[] result = Base64Util.createDetachedJwtSigningInput(header, payload); - - assertNotNull(result); - String resultString = new String(result, StandardCharsets.UTF_8); - assertTrue(resultString.startsWith(header)); - assertTrue(resultString.contains(".")); - assertTrue(resultString.endsWith("test payload")); - } - - @Test(expected = IllegalArgumentException.class) - public void testCreateDetachedJwtSigningInputWithNullHeader() { - byte[] payload = "test payload".getBytes(StandardCharsets.UTF_8); - Base64Util.createDetachedJwtSigningInput(null, payload); - } - - @Test(expected = IllegalArgumentException.class) - public void testCreateDetachedJwtSigningInputWithNullPayload() { - String header = "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9"; - Base64Util.createDetachedJwtSigningInput(header, null); - } - - @Test(expected = IllegalArgumentException.class) - public void testCreateDetachedJwtSigningInputWithBothNull() { - Base64Util.createDetachedJwtSigningInput(null, null); - } - - @Test - public void testCreateDetachedJwtSigningInputWithEmptyHeader() { - String header = ""; - byte[] payload = "test payload".getBytes(StandardCharsets.UTF_8); - - byte[] result = Base64Util.createDetachedJwtSigningInput(header, payload); - - assertNotNull(result); - String resultString = new String(result, StandardCharsets.UTF_8); - assertEquals(".test payload", resultString); - } - - @Test - public void testCreateDetachedJwtSigningInputWithEmptyPayload() { - String header = "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9"; - byte[] payload = new byte[0]; - - byte[] result = Base64Util.createDetachedJwtSigningInput(header, payload); - - assertNotNull(result); - String resultString = new String(result, StandardCharsets.UTF_8); - assertEquals(header + ".", resultString); - } - - @Test - public void testCreateDetachedJwtSigningInputCorrectByteOrder() { - String header = "ABC"; - byte[] payload = new byte[]{0x01, 0x02, 0x03}; - - byte[] result = Base64Util.createDetachedJwtSigningInput(header, payload); - - assertNotNull(result); - assertEquals('A', (char) result[0]); - assertEquals('B', (char) result[1]); - assertEquals('C', (char) result[2]); - assertEquals('.', (char) result[3]); - assertEquals(0x01, result[4]); - assertEquals(0x02, result[5]); - assertEquals(0x03, result[6]); - } - - @Test - public void testCreateDetachedJwtSigningInputCorrectLength() { - String header = "header123"; - byte[] payload = new byte[]{0x01, 0x02, 0x03, 0x04, 0x05}; - - byte[] result = Base64Util.createDetachedJwtSigningInput(header, payload); - - assertNotNull(result); - assertEquals(header.length() + 1 + payload.length, result.length); - } - - @Test - public void testCreateDetachedJwtSigningInputWithLargePayload() { - String header = "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9"; - byte[] payload = new byte[10000]; - for (int i = 0; i < payload.length; i++) { - payload[i] = (byte) (i % 256); - } - - byte[] result = Base64Util.createDetachedJwtSigningInput(header, payload); - - assertNotNull(result); - assertEquals(header.length() + 1 + payload.length, result.length); - } - - @Test - public void testEncodeAndDecodeRoundTrip() { - String original = "Test Data 123!@#"; - String encoded = Base64Util.encode(original); - String decoded = Base64Util.decodeToString(encoded); - - assertEquals(original, decoded); - } - - @Test - public void testEncodeWithJavaStdLibAndDecodeWithJavaStdLibRoundTrip() { - String original = "Test Data with Java StdLib"; - String encoded = Base64Util.encodeWithJavaStdLib(original); - byte[] decoded = Base64Util.decodeWithJavaStdLib(encoded); - - assertEquals(original, new String(decoded, StandardCharsets.UTF_8)); - } - - @Test - public void testEncodeBytesAndDecodeRoundTrip() { - byte[] original = new byte[]{0x00, 0x01, 0x7F, (byte) 0x80, (byte) 0xFF}; - String encoded = Base64Util.encode(original); - byte[] decoded = Base64Util.decode(encoded); - - assertArrayEquals(original, decoded); - } - - @Test - public void testDecodeFlexibleWithNormalizedStringRoundTrip() { - String original = "Test Data for Flexible Decode"; - String encoded = Base64.getUrlEncoder().withoutPadding() - .encodeToString(original.getBytes(StandardCharsets.UTF_8)); - byte[] decoded = Base64Util.decodeFlexible(encoded); - - assertEquals(original, new String(decoded, StandardCharsets.UTF_8)); - } - - @Test - public void testConsistencyBetweenEncodeMethodsForString() { - String input = "Consistency Test"; - String result1 = Base64Util.encode(input); - String result2 = Base64Util.encodeWithJavaStdLib(input); - - assertEquals(result1, result2); - } - - @Test - public void testConsistencyBetweenEncodeMethodsForBytes() { - byte[] input = "Consistency Test".getBytes(StandardCharsets.UTF_8); - String result1 = Base64Util.encode(input); - String result2 = Base64Util.encodeWithJavaStdLib(input); - - assertEquals(result1, result2); - } - - @Test - public void testDecodeFlexibleHandlesBase64UrlWithoutPadding() { - String original = "No padding test"; - String encoded = Base64.getUrlEncoder().withoutPadding() - .encodeToString(original.getBytes(StandardCharsets.UTF_8)); - byte[] decoded = Base64Util.decodeFlexible(encoded); - - assertNotNull(decoded); - assertEquals(original, new String(decoded, StandardCharsets.UTF_8)); - } - - @Test - public void testNormalizeBase64StringHandlesEdgeCaseLengths() { - String input1 = "A"; - String result1 = Base64Util.normalizeBase64String(input1); - assertTrue(result1.length() % 4 == 0); - - String input2 = "AB"; - String result2 = Base64Util.normalizeBase64String(input2); - assertTrue(result2.length() % 4 == 0); - - String input3 = "ABC"; - String result3 = Base64Util.normalizeBase64String(input3); - assertTrue(result3.length() % 4 == 0); - - String input4 = "ABCD"; - String result4 = Base64Util.normalizeBase64String(input4); - assertTrue(result4.length() % 4 == 0); - } - - @Test - public void testCreateDetachedJwtSigningInputWithRealJwtHeader() { - String header = "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImtleS0xMjMifQ"; - byte[] payload = "{\"sub\":\"1234567890\",\"name\":\"John Doe\"}".getBytes(StandardCharsets.UTF_8); - - byte[] result = Base64Util.createDetachedJwtSigningInput(header, payload); - - assertNotNull(result); - assertTrue(result.length > header.length() + payload.length); - - String resultString = new String(result, StandardCharsets.UTF_8); - assertTrue(resultString.contains(".")); - String[] parts = resultString.split("\\.", 2); - assertEquals(header, parts[0]); - } - - @Test - public void testEncodeStringProducesUrlSafeOutput() { - String input = "Test string that might produce + or / characters when encoded"; - String result = Base64Util.encode(input); - - assertNotNull(result); - assertFalse(result.contains("+")); - assertFalse(result.contains("/")); - assertFalse(result.contains("=")); - } - - @Test - public void testDecodeFlexibleWithMixedBase64AndBase64Url() { - String original = "Mixed encoding test"; - String standardBase64 = Base64.getEncoder().encodeToString(original.getBytes(StandardCharsets.UTF_8)); - - byte[] decoded = Base64Util.decodeFlexible(standardBase64); - - assertNotNull(decoded); - assertEquals(original, new String(decoded, StandardCharsets.UTF_8)); - } -} - diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index 73119bf9c..e316b1863 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -495,7 +495,7 @@ public static PasscodeControl createPasscodeControl(int failedAttemptCount, int return passcodeControl; } - public static VerifiablePresentationResponseDTO getVerifiablePresentationResponseDTO(String clientId, String clientName, String clientLogo, boolean isTrusted, boolean isPreRegisteredWithWallet, String redirectUri, OpenID4VP openID4VP, Instant time) { + public static VPResponseDTO getVerifiablePresentationResponseDTO(String clientId, String clientName, String clientLogo, boolean isTrusted, boolean isPreRegisteredWithWallet, String redirectUri, OpenID4VP openID4VP, Instant time) { VerifiablePresentationVerifierDTO presentationVerifierDTO = new VerifiablePresentationVerifierDTO( clientId, clientName, @@ -506,7 +506,7 @@ public static VerifiablePresentationResponseDTO getVerifiablePresentationRespons ); VerifiablePresentationSessionData presentationSessionData = new VerifiablePresentationSessionData("123e4567-e89b-12d3-a456-426614174000", "authorizationRequest", time, true, null); - VerifiablePresentationResponseDTO presentationResponseDTO = new VerifiablePresentationResponseDTO(presentationSessionData.getPresentationId(), presentationVerifierDTO); + VPResponseDTO presentationResponseDTO = new VPResponseDTO(presentationSessionData.getPresentationId(), presentationVerifierDTO); return presentationResponseDTO; } diff --git a/src/test/java/io/mosip/mimoto/util/UrlParameterUtilsTest.java b/src/test/java/io/mosip/mimoto/util/UrlParameterUtilsTest.java index 418c120a7..f2816210f 100644 --- a/src/test/java/io/mosip/mimoto/util/UrlParameterUtilsTest.java +++ b/src/test/java/io/mosip/mimoto/util/UrlParameterUtilsTest.java @@ -2,9 +2,6 @@ import org.junit.jupiter.api.Test; -import java.lang.reflect.Method; -import java.util.List; - import static org.junit.jupiter.api.Assertions.*; public class UrlParameterUtilsTest { @@ -14,206 +11,165 @@ public class UrlParameterUtilsTest { private static final String VALID_RESPONSE_URI = "https://example.com/callback"; private static final String ENCODED_RESPONSE_URI = "https%3A%2F%2Fexample.com%2Fcallback"; - /** - * Helper method to safely invoke methods and cast results without unchecked - * warnings - */ - @SuppressWarnings("unchecked") - private static T invokeMethod(Class clazz, String methodName, Class[] paramTypes, Object... args) throws Exception { - Method method = clazz.getMethod(methodName, paramTypes); - method.setAccessible(true); - return (T) method.invoke(null, args); - } - @Test - public void testExtractClientIdFromUrlWithValidClientId() throws Exception { + public void testExtractQueryParameterWithValidClientId() throws Exception { String url = "https://example.com?client_id=" + ENCODED_CLIENT_ID + "&other_param=value"; - String result = invokeMethod(UrlParameterUtils.class, "extractClientIdFromUrl", new Class[]{String.class}, url); + String result = UrlParameterUtils.extractQueryParameter(url, "client_id"); assertEquals(VALID_CLIENT_ID, result); } @Test - public void testExtractClientIdFromUrlWithNoQueryParameters() throws Exception { + public void testExtractQueryParameterWithNoQueryParameters() throws Exception { String url = "https://example.com"; - String result = invokeMethod(UrlParameterUtils.class, "extractClientIdFromUrl", new Class[]{String.class}, url); + String result = UrlParameterUtils.extractQueryParameter(url, "client_id"); assertNull(result); } @Test - public void testExtractClientIdFromUrlWithNoClientIdParameter() throws Exception { + public void testExtractQueryParameterWithNoParameter() throws Exception { String url = "https://example.com?other_param=value&another_param=value2"; - String result = invokeMethod(UrlParameterUtils.class, "extractClientIdFromUrl", new Class[]{String.class}, url); + String result = UrlParameterUtils.extractQueryParameter(url, "client_id"); assertNull(result); } @Test - public void testExtractClientIdFromUrlWithMalformedParameter() throws Exception { + public void testExtractQueryParameterWithMalformedParameter() throws Exception { String url = "https://example.com?client_id&other_param=value"; - String result = invokeMethod(UrlParameterUtils.class, "extractClientIdFromUrl", new Class[]{String.class}, url); + String result = UrlParameterUtils.extractQueryParameter(url, "client_id"); assertNull(result); } @Test - public void testExtractClientIdFromUrlWithNullInput() throws Exception { + public void testExtractQueryParameterWithNullInput() throws Exception { String url = null; - String result = invokeMethod(UrlParameterUtils.class, "extractClientIdFromUrl", new Class[]{String.class}, url); + String result = UrlParameterUtils.extractQueryParameter(url, "client_id"); assertNull(result); } @Test - public void testExtractClientIdFromUrlWithEmptyValue() throws Exception { + public void testExtractQueryParameterWithEmptyValue() throws Exception { String url = "https://example.com?client_id=&other_param=value"; - String result = invokeMethod(UrlParameterUtils.class, "extractClientIdFromUrl", new Class[]{String.class}, url); + String result = UrlParameterUtils.extractQueryParameter(url, "client_id"); assertEquals("", result); } @Test - public void testExtractResponseUrisFromUrlWithValidResponseUri() throws Exception { + public void testExtractQueryParameterWithValidResponseUri() throws Exception { String url = "https://example.com?response_uri=" + ENCODED_RESPONSE_URI + "&other_param=value"; - List result = invokeMethod(UrlParameterUtils.class, "extractResponseUrisFromUrl", new Class[]{String.class}, url); + String result = UrlParameterUtils.extractQueryParameter(url, "response_uri"); - assertEquals(1, result.size()); - assertEquals(VALID_RESPONSE_URI, result.get(0)); + assertEquals(VALID_RESPONSE_URI, result); } @Test - public void testExtractResponseUrisFromUrlWithNoQueryParameters() throws Exception { - String url = "https://example.com"; - - List result = invokeMethod(UrlParameterUtils.class, "extractResponseUrisFromUrl", new Class[]{String.class}, url); - - assertTrue(result.isEmpty()); - } - - @Test - public void testExtractResponseUrisFromUrlWithNoResponseUriParameter() throws Exception { + public void testExtractQueryParameterWithNoResponseUriParameter() throws Exception { String url = "https://example.com?other_param=value&another_param=value2"; - List result = invokeMethod(UrlParameterUtils.class, "extractResponseUrisFromUrl", new Class[]{String.class}, url); + String result = UrlParameterUtils.extractQueryParameter(url, "response_uri"); - assertTrue(result.isEmpty()); + assertNull(result); } @Test - public void testExtractResponseUrisFromUrlWithMalformedParameter() throws Exception { + public void testExtractQueryParameterWithMalformedResponseUri() throws Exception { String url = "https://example.com?response_uri&other_param=value"; - List result = invokeMethod(UrlParameterUtils.class, "extractResponseUrisFromUrl", new Class[]{String.class}, url); - - assertTrue(result.isEmpty()); - } - - @Test - public void testExtractResponseUrisFromUrlWithNullInput() throws Exception { - String url = null; - - List result = invokeMethod(UrlParameterUtils.class, "extractResponseUrisFromUrl", new Class[]{String.class}, url); + String result = UrlParameterUtils.extractQueryParameter(url, "response_uri"); - assertTrue(result.isEmpty()); + assertNull(result); } @Test - public void testExtractResponseUrisFromUrlWithEmptyValue() throws Exception { + public void testExtractQueryParameterWithEmptyResponseUri() throws Exception { String url = "https://example.com?response_uri=&other_param=value"; - List result = invokeMethod(UrlParameterUtils.class, "extractResponseUrisFromUrl", new Class[]{String.class}, url); + String result = UrlParameterUtils.extractQueryParameter(url, "response_uri"); - assertEquals(1, result.size()); - assertEquals("", result.get(0)); + assertEquals("", result); } @Test - public void testExtractResponseUrisFromUrlWithCommaOnly() throws Exception { - String url = "https://example.com?response_uri=,"; // Direct comma + public void testExtractQueryParameterWithCommaValue() throws Exception { + String url = "https://example.com?response_uri=,"; - List result = invokeMethod(UrlParameterUtils.class, "extractResponseUrisFromUrl", new Class[]{String.class}, url); + String result = UrlParameterUtils.extractQueryParameter(url, "response_uri"); - assertEquals(1, result.size()); - assertEquals(",", result.get(0)); + assertEquals(",", result); } @Test - public void testExtractResponseUrisFromUrlWithMultipleCommas() throws Exception { + public void testExtractQueryParameterWithMultipleCommas() throws Exception { String url = "https://example.com?response_uri=uri1,uri2,uri3"; - List result = invokeMethod(UrlParameterUtils.class, "extractResponseUrisFromUrl", new Class[]{String.class}, url); + String result = UrlParameterUtils.extractQueryParameter(url, "response_uri"); - assertEquals(1, result.size()); - assertEquals("uri1,uri2,uri3", result.get(0)); + assertEquals("uri1,uri2,uri3", result); } @Test - public void testExtractClientIdFromUrlWithSpecialCharacters() throws Exception { + public void testExtractQueryParameterWithSpecialCharacters() throws Exception { String specialClientId = "client-id_with.special+chars"; String encodedClientId = "client-id_with.special%2Bchars"; String url = "https://example.com?client_id=" + encodedClientId + "&other_param=value"; - String result = invokeMethod(UrlParameterUtils.class, "extractClientIdFromUrl", new Class[]{String.class}, url); + String result = UrlParameterUtils.extractQueryParameter(url, "client_id"); assertEquals(specialClientId, result); } @Test - public void testExtractResponseUrisFromUrlWithSpecialCharacters() throws Exception { + public void testExtractQueryParameterWithSpecialCharactersInUri() throws Exception { String specialUri = "https://example.com/callback?param=value&other=test"; String encodedUri = "https%3A%2F%2Fexample.com%2Fcallback%3Fparam%3Dvalue%26other%3Dtest"; String url = "https://example.com?response_uri=" + encodedUri + "&other_param=value"; - List result = invokeMethod(UrlParameterUtils.class, "extractResponseUrisFromUrl", new Class[]{String.class}, url); + String result = UrlParameterUtils.extractQueryParameter(url, "response_uri"); - assertEquals(1, result.size()); - assertEquals(specialUri, result.get(0)); + assertEquals(specialUri, result); } @Test - public void testExtractClientIdFromUrlWithEmptyString() throws Exception { - String url = "https://example.com?client_id=&other_param=value"; - - String result = invokeMethod(UrlParameterUtils.class, "extractClientIdFromUrl", new Class[]{String.class}, url); - - assertEquals("", result); - } - - @Test - public void testExtractResponseUrisFromUrlWithEmptyString() throws Exception { - String url = "https://example.com?response_uri=&other_param=value"; + public void testExtractQueryParameterWithWhitespace() throws Exception { + String url = "https://example.com?client_id=%20&other_param=value"; - List result = invokeMethod(UrlParameterUtils.class, "extractResponseUrisFromUrl", new Class[]{String.class}, url); + String result = UrlParameterUtils.extractQueryParameter(url, "client_id"); - assertEquals(1, result.size()); - assertEquals("", result.get(0)); + assertEquals(" ", result); } @Test - public void testExtractClientIdFromUrlWithWhitespace() throws Exception { - String url = "https://example.com?client_id=%20&other_param=value"; + public void testExtractQueryParameterWithAnyParameterName() throws Exception { + String url = "https://example.com?custom_param=value123&other_param=value2"; - String result = invokeMethod(UrlParameterUtils.class, "extractClientIdFromUrl", new Class[]{String.class}, url); + String result = UrlParameterUtils.extractQueryParameter(url, "custom_param"); - assertEquals(" ", result); + assertEquals("value123", result); } @Test - public void testExtractResponseUrisFromUrlWithWhitespace() throws Exception { - String url = "https://example.com?response_uri=%20&other_param=value"; + public void testExtractQueryParameterWithMultipleParameters() throws Exception { + String url = "https://example.com?param1=value1¶m2=value2¶m3=value3"; - List result = invokeMethod(UrlParameterUtils.class, "extractResponseUrisFromUrl", new Class[]{String.class}, url); + String result1 = UrlParameterUtils.extractQueryParameter(url, "param1"); + String result2 = UrlParameterUtils.extractQueryParameter(url, "param2"); + String result3 = UrlParameterUtils.extractQueryParameter(url, "param3"); - assertEquals(1, result.size()); - assertEquals(" ", result.get(0)); + assertEquals("value1", result1); + assertEquals("value2", result2); + assertEquals("value3", result3); } } From 9ae5344af160b811ffa5644202274a0514eb70d6 Mon Sep 17 00:00:00 2001 From: Durgesh Konga Date: Tue, 9 Dec 2025 15:47:03 +0530 Subject: [PATCH 801/860] [INJIWEB-1776] - Delete legacy code (#990) Signed-off-by: kongadurgesh --- scripts/generate_THIRDPARTY.md.py | 20 -------------------- 1 file changed, 20 deletions(-) delete mode 100644 scripts/generate_THIRDPARTY.md.py diff --git a/scripts/generate_THIRDPARTY.md.py b/scripts/generate_THIRDPARTY.md.py deleted file mode 100644 index f2371f882..000000000 --- a/scripts/generate_THIRDPARTY.md.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generates THIRDPARTY.md license report as gathered from pom.xml -# Usage: -# pip install markdownify -# python scripts/generate_THIRDPARTY.md.py -# -# A THIRDPARTY.md file is generated at project's root folder. - -import markdownify -import subprocess -import sys - -subprocess.run(['mvn', 'clean']) -subprocess.run(['mvn', 'project-info-reports:dependencies']) -html = open('target/site/dependencies.html').read() -h = markdownify.markdownify(html, heading_style="ATX") -with open('THIRDPARTY.md','w') as f: - for line in h.splitlines(): - if 'Project Dependency Graph' in line: - break - print(line, file=f) From b1511cb6bb8b6d8e076f93179beee4d468f54b81 Mon Sep 17 00:00:00 2001 From: Durgesh Konga Date: Mon, 15 Dec 2025 16:02:35 +0530 Subject: [PATCH 802/860] [INJIWEB-1774] - Update XSRF token to be true by default (#988) * [INJIWEB-1774] - Add CSRF Token Implementation for Mimoto Signed-off-by: kongadurgesh * [INJIWEB-1774] - Remove misleading comment Signed-off-by: kongadurgesh * [INJIWEB-1774] - Update Value Param Signed-off-by: kongadurgesh * [INJIWEB-1774] - Update tests method names remove setAccesible from constructor Signed-off-by: kongadurgesh * [INJIWEB-1776] - Delete legacy code (#990) Signed-off-by: kongadurgesh * [INJIWEB-1774] - Add mimoto endpoints to ignoreUrls Update default configuration Signed-off-by: kongadurgesh * [INJIWEB-1774] - Enable CSRF by defualt Signed-off-by: kongadurgesh * [INJIWEB-1774] - Update Postman Collection Add postcript for get wallets and get issuers endpoint Add property to mimoto default properties to docker setup Signed-off-by: kongadurgesh * [INJIWEB-1774] - Update API Documentation Signed-off-by: kongadurgesh * [INJIWEB-1774] - Remove dead config Remove /wallets from ignore urls Signed-off-by: kongadurgesh * [INJIWEB-1774] - remove client id and secret Signed-off-by: kongadurgesh * Revert "[INJIWEB-1774] - Remove dead config" This reverts commit 4ef6b44fb6e4330c880ac638c45d38fb17f87086. Signed-off-by: kongadurgesh * [INJIWEB-1774] - Remove dead config Remove /wallets from ignore urls Signed-off-by: kongadurgesh --------- Signed-off-by: kongadurgesh --- .talismanrc | 4 +- .../config/mimoto-default.properties | 11 +- docs/api-documentation-openapi.json | 92 ++- .../MIMOTO.postman_collection.json | 131 +++- .../java/io/mosip/mimoto/config/Config.java | 95 ++- .../resources/application-default.properties | 8 + .../io/mosip/mimoto/config/ConfigTest.java | 610 ++++++++++++++++++ 7 files changed, 921 insertions(+), 30 deletions(-) create mode 100644 src/test/java/io/mosip/mimoto/config/ConfigTest.java diff --git a/.talismanrc b/.talismanrc index b052fba27..cbceaec91 100644 --- a/.talismanrc +++ b/.talismanrc @@ -58,7 +58,7 @@ fileignoreconfig: - filename: docs/postman-collections/Collab.postman_environment.json checksum: 93662b305117d9ac73e9f8ace2bd8dc8b2de494908a8c69166d0c908cc80365c - filename: docs/postman-collections/MIMOTO.postman_collection.json - checksum: 625fb5888d4334e7a0b91134a6886556f334a111d9d6c9dd2fa057352af38827 + checksum: 6a78494d445c59d8e7787e2e232bd54c000b541f0baf3f19c3f9d024a03fe1b1 - filename: src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java checksum: c4e28436cb04004d9cb4e1492a1d013eac076936a3fa3a99d35bfb137f27c37b - filename: .github/workflows/push-trigger.yml @@ -106,7 +106,7 @@ fileignoreconfig: - filename: docs/WalletUnlockProcess.md checksum: d172beb5aeef1037d70d2f83f034e6ec5e4ea69c6150ec6a25c9139c799b7879 - filename: docs/api-documentation-openapi.json - checksum: 731f2f21a4054e7f1f076d894a8b1d3f814cb924af55ed5815e736b12971113c + checksum: 0394757e38ceaf2d16763076615a29914d4d98037464f89a7f2d91e2d512ad57 - filename: src/main/java/io/mosip/mimoto/util/JwtGeneratorUtil.java checksum: c8533dd38f79879119ba2895afca75d60e9704d5a0df4a0e79bc3b9292bd0d38 - filename: src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java diff --git a/docker-compose/config/mimoto-default.properties b/docker-compose/config/mimoto-default.properties index 1b8dc3cca..a27c1e7b6 100644 --- a/docker-compose/config/mimoto-default.properties +++ b/docker-compose/config/mimoto-default.properties @@ -96,9 +96,6 @@ mosip.partner.encryption.key=123456 # Property which indicates whether the data includes its thumbprint (a unique hash for integrity verification) or not mosip.partner.prependThumbprint=true -# Property which defines whether protection against Cross-Site Request Forgery (CSRF) attacks should be enabled or disabled -csrf.disabled=true - #-------------TOKEN GENERATION---------------- #Token generation request id token.request.id=io.mosip.registration.processor @@ -410,6 +407,14 @@ mosip.security.ignore-auth-urls=/safetynet/**,/actuator/**,/swagger-ui/**,/v3/ap /issuers,/issuers/**,/authorize,/req/otp,/vid,/req/auth/**,/req/individualId/otp,/aid/get-individual-id,\ /verifiers, /auth/*/token-login +# CSRF Security Configuration +# CSRF protection is always enabled by default. State-changing requests (POST, PUT, DELETE, PATCH) +# require a valid CSRF token to be sent in the X-XSRF-TOKEN header. +# List of URLs that are excluded from CSRF protection. These URLs can still require authentication. +# OAuth2 endpoints and public endpoints are typically excluded from CSRF protection. +mosip.security.csrf-ignore-urls=/oauth2/**,/logout,/safetynet/**,/credentials/**,/credentialshare/**,/binding-otp,/wallet-binding,\ + /get-token/**,/req/otp,/vid,/req/auth/**,/req/individualId/otp,/auth/*/token-login + # Inji mobile wallet configuration # This template defines the list of the fields of the downloaded verifiable credential will be included in the event files when generating different documents credential.template=template.json diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index 383ef4644..aa6a65607 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -2811,7 +2811,7 @@ "Wallet Credentials" ], "summary": "Download and store a Verifiable Credential under a specific Wallet", - "description": "This API is secured using session-based authentication. Upon receiving a request, the session ID is extracted from the Cookie header and used to retrieve session details from Redis for authentication. It then retrieves the wallet key from the session and use it to decrypt the signing algorithm's secret key(which is used for signing the JWT in credential request) and encrypt the downloaded Verifiable Credential. If the process completes successfully, the credential is stored in the database and certain fields will be returned in the response. In case of any issues, an appropriate error response is returned.", + "description": "This API is secured using session-based authentication. Upon receiving a request, the session ID is extracted from the Cookie header and used to retrieve session details from Redis for authentication. For state-changing requests (POST, PUT, DELETE, PATCH), a valid CSRF token must be included in the X-XSRF-TOKEN header. The CSRF token can be obtained from the XSRF-TOKEN cookie set by the server on GET requests. It then retrieves the wallet key from the session and use it to decrypt the signing algorithm's secret key(which is used for signing the JWT in credential request) and encrypt the downloaded Verifiable Credential. If the process completes successfully, the credential is stored in the database and certain fields will be returned in the response. In case of any issues, an appropriate error response is returned.", "operationId": "downloadCredential", "security": [ { @@ -2828,6 +2828,15 @@ }, "description": "Unique identifier of the user's wallet where the credential will be stored" }, + { + "name": "X-XSRF-TOKEN", + "in": "header", + "required": false, + "schema": { + "type": "string" + }, + "description": "CSRF token obtained from the XSRF-TOKEN cookie set by the server on GET requests." + }, { "name": "Accept-Language", "in": "header", @@ -3386,7 +3395,7 @@ "Wallet Credentials" ], "summary": "Delete a credential from a wallet", - "description": "This endpoint allows you to delete a specific credential from a wallet. The API is secured using session-based authentication. The session ID is extracted from the Cookie header to authenticate the user. The wallet ID is validated against the session to ensure the user has access to the wallet. If the credential is successfully deleted, a 200 OK response is returned.", + "description": "This endpoint allows you to delete a specific credential from a wallet. The API is secured using session-based authentication. The session ID is extracted from the Cookie header to authenticate the user. For state-changing requests (POST, PUT, DELETE, PATCH), a valid CSRF token must be included in the X-XSRF-TOKEN header. The CSRF token can be obtained from the XSRF-TOKEN cookie set by the server on GET requests. The wallet ID is validated against the session to ensure the user has access to the wallet. If the credential is successfully deleted, a 200 OK response is returned.", "operationId": "deleteCredential", "security": [ { @@ -3411,6 +3420,15 @@ "type": "string" }, "description": "Unique identifier of the credential to be deleted" + }, + { + "name": "X-XSRF-TOKEN", + "in": "header", + "required": false, + "schema": { + "type": "string" + }, + "description": "CSRF token obtained from the XSRF-TOKEN cookie set by the server on GET requests." } ], "responses": { @@ -3486,13 +3504,24 @@ "Wallets" ], "summary": "Create a new wallet", - "description": "This API is secured using session-based authentication. The session ID is extracted from the Cookie header and used to retrieve session details from Redis for authentication. The user ID is then obtained from the session and along with the provided wallet name and PIN is used to create a new wallet in the database. If the wallet is created successfully, response including unique identifier of the wallet and and the provided name is returned otherwise an appropriate error response is provided.", + "description": "This API is secured using session-based authentication. The session ID is extracted from the Cookie header and used to retrieve session details from Redis for authentication. For state-changing requests (POST, PUT, DELETE, PATCH), a valid CSRF token must be included in the X-XSRF-TOKEN header. The CSRF token can be obtained from the XSRF-TOKEN cookie set by the server on GET requests. The user ID is then obtained from the session and along with the provided wallet name and PIN is used to create a new wallet in the database. If the wallet is created successfully, response including unique identifier of the wallet and and the provided name is returned otherwise an appropriate error response is provided.", "operationId": "createWallet", "security": [ { "SessionAuth": [] } ], + "parameters": [ + { + "name": "X-XSRF-TOKEN", + "in": "header", + "required": false, + "schema": { + "type": "string" + }, + "description": "CSRF token obtained from the XSRF-TOKEN cookie set by the server on GET requests." + } + ], "requestBody": { "required": true, "description": "Wallet creation request containing the wallet name and wallet PIN", @@ -3747,7 +3776,7 @@ "Wallets" ], "summary": "Delete a Wallet", - "description": "This endpoint allows you to delete a specific wallet. The API is secured using session-based authentication. The session ID is extracted from the Cookie header to authenticate the user. The user's ID is obtained from the session and used to validate ownership of the Wallet before deletion. If the Wallet is successfully deleted, a 200 OK response is returned; otherwise, an appropriate error response is returned.", + "description": "This endpoint allows you to delete a specific wallet. The API is secured using session-based authentication. The session ID is extracted from the Cookie header to authenticate the user. For state-changing requests (POST, PUT, DELETE, PATCH), a valid CSRF token must be included in the X-XSRF-TOKEN header. The CSRF token can be obtained from the XSRF-TOKEN cookie set by the server on GET requests. The user's ID is obtained from the session and used to validate ownership of the Wallet before deletion. If the Wallet is successfully deleted, a 200 OK response is returned; otherwise, an appropriate error response is returned.", "operationId": "deleteWallet", "security": [ { @@ -3763,6 +3792,15 @@ "type": "string" }, "description": "Unique identifier of the Wallet to be deleted" + }, + { + "name": "X-XSRF-TOKEN", + "in": "header", + "required": false, + "schema": { + "type": "string" + }, + "description": "CSRF token obtained from the XSRF-TOKEN cookie set by the server on GET requests." } ], "responses": { @@ -3850,7 +3888,7 @@ "Wallets" ], "summary": "Unlock an existing Wallet", - "description": "This API is secured using session-based authentication. Upon receiving a request, the session is first retrieved using the session ID extracted from the Cookie header to authenticate the user. Once authenticated, the user's ID is obtained from the session stored in Redis. Using this user ID along with the provided wallet ID and PIN, the corresponding wallet key is fetched and stored in the session. If successful then the API returns a response containing the wallet ID otherwise an appropriate error response is returned.", + "description": "This API is secured using session-based authentication. Upon receiving a request, the session is first retrieved using the session ID extracted from the Cookie header to authenticate the user. For state-changing requests (POST, PUT, DELETE, PATCH), a valid CSRF token must be included in the X-XSRF-TOKEN header. The CSRF token can be obtained from the XSRF-TOKEN cookie set by the server on GET requests. Once authenticated, the user's ID is obtained from the session stored in Redis. Using this user ID along with the provided wallet ID and PIN, the corresponding wallet key is fetched and stored in the session. If successful then the API returns a response containing the wallet ID otherwise an appropriate error response is returned.", "operationId": "unlockWallet", "security": [ { @@ -3867,6 +3905,15 @@ }, "description": "Unique identifier of the wallet to be unlocked", "example": "123e4567-e89b-12d3-a456-426614174000" + }, + { + "name": "X-XSRF-TOKEN", + "in": "header", + "required": false, + "schema": { + "type": "string" + }, + "description": "CSRF token obtained from the XSRF-TOKEN cookie set by the server on GET requests." } ], "requestBody": { @@ -4034,7 +4081,7 @@ "Wallet Presentations" ], "summary": "Processes Verifiable Presentation Authorization Request and provides details about the verifier and presentation.", - "description": "This API is secured using session-based authentication. Upon receiving a request, the session is first retrieved using the session ID extracted from the Cookie header to authenticate the user. Once authenticated, the API processes the received Verifiable Presentation Authorization Request from the Verifier for a specific wallet. It validates the session, verifies the authenticity of the request, and checks if the Verifier is pre-registered and trusted by the wallet. If all validations pass, the API returns a response containing the presentation details; otherwise, an appropriate error response is returned.", + "description": "This API is secured using session-based authentication. Upon receiving a request, the session is first retrieved using the session ID extracted from the Cookie header to authenticate the user. For state-changing requests (POST, PUT, DELETE, PATCH), a valid CSRF token must be included in the X-XSRF-TOKEN header. The CSRF token can be obtained from the XSRF-TOKEN cookie set by the server on GET requests. Once authenticated, the API processes the received Verifiable Presentation Authorization Request from the Verifier for a specific wallet. It validates the session, verifies the authenticity of the request, and checks if the Verifier is pre-registered and trusted by the wallet. If all validations pass, the API returns a response containing the presentation details; otherwise, an appropriate error response is returned.", "operationId": "processVPAuthorizationRequest", "parameters": [ { @@ -4045,6 +4092,15 @@ "type": "string" }, "description": "The unique identifier of the Wallet." + }, + { + "name": "X-XSRF-TOKEN", + "in": "header", + "required": false, + "schema": { + "type": "string" + }, + "description": "CSRF token obtained from the XSRF-TOKEN cookie set by the server on GET requests." } ], "requestBody": { @@ -4176,7 +4232,7 @@ "Wallet Presentations" ], "summary": "Handles user submission or rejection of a presentation", - "description": "This API allows users to accept or reject a presentation request by selecting specific credentials. Upon acceptance, the system fetches the selected credentials, constructs and signs a VP token, shares it with the verifier, and stores the presentation record in the database.", + "description": "This API allows users to accept or reject a presentation request by selecting specific credentials. The API is secured using session-based authentication. For state-changing requests (POST, PUT, DELETE, PATCH), a valid CSRF token must be included in the X-XSRF-TOKEN header. The CSRF token can be obtained from the XSRF-TOKEN cookie set by the server on GET requests. Upon acceptance, the system fetches the selected credentials, constructs and signs a VP token, shares it with the verifier, and stores the presentation record in the database.", "operationId": "handlePresentationSubmission", "parameters": [ { @@ -4196,6 +4252,15 @@ "type": "string" }, "description": "The unique identifier of the Presentation." + }, + { + "name": "X-XSRF-TOKEN", + "in": "header", + "required": false, + "schema": { + "type": "string" + }, + "description": "CSRF token obtained from the XSRF-TOKEN cookie set by the server on GET requests." } ], "requestBody": { @@ -4477,7 +4542,7 @@ "Wallet Trusted Verifiers" ], "summary": "Add a trusted verifier to a wallet", - "description": "Adds a trusted verifier for the specified wallet after validating the session and request. Requires an active session; the path walletId must match the wallet in session.", + "description": "Adds a trusted verifier for the specified wallet after validating the session and request. Requires an active session; the path walletId must match the wallet in session. For state-changing requests (POST, PUT, DELETE, PATCH), a valid CSRF token must be included in the X-XSRF-TOKEN header. The CSRF token can be obtained from the XSRF-TOKEN cookie set by the server on GET requests.", "operationId": "addTrustedVerifier", "security": [ { @@ -4493,6 +4558,15 @@ "type": "string" }, "description": "The unique identifier of the wallet." + }, + { + "name": "X-XSRF-TOKEN", + "in": "header", + "required": false, + "schema": { + "type": "string" + }, + "description": "CSRF token obtained from the XSRF-TOKEN cookie set by the server on GET requests." } ], "requestBody": { @@ -4695,7 +4769,7 @@ "type": "apiKey", "in": "cookie", "name": "SESSION", - "description": "Session-based authentication using a session ID stored in the cookie. The client must send the 'SESSION' cookie (e.g., SESSION=) with each request." + "description": "Session-based authentication using a session ID stored in the cookie. The client must send the 'SESSION' cookie (e.g., SESSION=) with each request. For state-changing requests (POST, PUT, DELETE, PATCH), a valid CSRF token must also be included in the X-XSRF-TOKEN header. The CSRF token can be obtained from the XSRF-TOKEN cookie set by the server on GET requests (e.g., by calling GET /issuers or GET /wallets)." }, "bearerAuth": { "type": "http", diff --git a/docs/postman-collections/MIMOTO.postman_collection.json b/docs/postman-collections/MIMOTO.postman_collection.json index 75b1f0de0..ef7c66a98 100644 --- a/docs/postman-collections/MIMOTO.postman_collection.json +++ b/docs/postman-collections/MIMOTO.postman_collection.json @@ -11,6 +11,19 @@ "item": [ { "name": "get Issuers List", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var token = pm.cookies.get('XSRF-TOKEN');", + "pm.environment.set('XSRF_TOKEN', token);" + ], + "type": "text/javascript", + "packages": {} + } + } + ], "request": { "method": "GET", "header": [], @@ -72,7 +85,13 @@ "name": "Download Credential With GetToken", "request": { "method": "POST", - "header": [], + "header": [ + { + "key": "X-XSRF-TOKEN", + "value": "{{XSRF_TOKEN}}", + "type": "text" + } + ], "body": { "mode": "formdata", "formdata": [ @@ -170,7 +189,13 @@ "name": "Req OTP", "request": { "method": "POST", - "header": [], + "header": [ + { + "key": "X-XSRF-TOKEN", + "value": "{{XSRF_TOKEN}}", + "type": "text" + } + ], "body": { "mode": "raw", "raw": "{\n \"individualId\": \"{{VC_ID}}\",\n \"otpChannel\": [\n \"EMAIL\",\n \"PHONE\"\n ],\n \"transactionID\": \"1234567890\"\n}", @@ -199,7 +224,13 @@ ], "request": { "method": "POST", - "header": [], + "header": [ + { + "key": "X-XSRF-TOKEN", + "value": "{{XSRF_TOKEN}}", + "type": "text" + } + ], "body": { "mode": "raw", "raw": "{\n \"individualId\": \"{{VC_ID}}\",\n \"otp\": \"111111\",\n \"transactionID\": \"1234567890\",\n \"user\": \"mono\"\n}\n", @@ -249,7 +280,13 @@ ], "request": { "method": "POST", - "header": [], + "header": [ + { + "key": "X-XSRF-TOKEN", + "value": "{{XSRF_TOKEN}}", + "type": "text" + } + ], "body": { "mode": "raw", "raw": "{\n \"individualId\": \"{{VC_ID}}\",\n \"requestId\": \"61cedc07-e036-46f5-8c75-97d852406373\"\n}", @@ -280,6 +317,11 @@ { "key": "Content-Type", "value": "application/json" + }, + { + "key": "X-XSRF-TOKEN", + "value": "{{XSRF_TOKEN}}", + "type": "text" } ], "body": { @@ -302,6 +344,11 @@ { "key": "Content-Type", "value": "application/json" + }, + { + "key": "X-XSRF-TOKEN", + "value": "{{XSRF_TOKEN}}", + "type": "text" } ], "body": { @@ -358,6 +405,11 @@ { "key": "Content-Type", "value": "application/json" + }, + { + "key": "X-XSRF-TOKEN", + "value": "{{XSRF_TOKEN}}", + "type": "text" } ], "body": { @@ -386,7 +438,10 @@ "let walletId = responseBody[0].walletId;", "", "pm.environment.set(\"walletId\", walletId);", - "" + "", + "// Extract and store CSRF token", + "var token = pm.cookies.get('XSRF-TOKEN');", + "pm.environment.set('XSRF_TOKEN', token);" ], "type": "text/javascript", "packages": {} @@ -408,6 +463,11 @@ { "key": "Content-Type", "value": "application/json" + }, + { + "key": "X-XSRF-TOKEN", + "value": "{{XSRF_TOKEN}}", + "type": "text" } ], "body": { @@ -422,7 +482,13 @@ "name": "Delete Wallet", "request": { "method": "DELETE", - "header": [], + "header": [ + { + "key": "X-XSRF-TOKEN", + "value": "{{XSRF_TOKEN}}", + "type": "text" + } + ], "url": "{{HOST}}/wallets/" }, "response": [] @@ -440,6 +506,11 @@ "key": "Cookie", "value": "SESSION={{SESSION_TOKEN}}", "type": "text" + }, + { + "key": "X-XSRF-TOKEN", + "value": "{{XSRF_TOKEN}}", + "type": "text" } ], "body": { @@ -497,6 +568,11 @@ { "key": "Content-Type", "value": "application/json" + }, + { + "key": "X-XSRF-TOKEN", + "value": "{{XSRF_TOKEN}}", + "type": "text" } ], "body": { @@ -550,6 +626,11 @@ { "key": "Content-Type", "value": "application/json" + }, + { + "key": "X-XSRF-TOKEN", + "value": "{{XSRF_TOKEN}}", + "type": "text" } ], "body": { @@ -589,6 +670,11 @@ "key": "Cookie", "value": "SESSION={{SESSION_TOKEN}}", "type": "text" + }, + { + "key": "X-XSRF-TOKEN", + "value": "{{XSRF_TOKEN}}", + "type": "text" } ], "body": { @@ -955,6 +1041,11 @@ "key": "Accept-Language", "value": "en", "type": "text" + }, + { + "key": "X-XSRF-TOKEN", + "value": "{{XSRF_TOKEN}}", + "type": "text" } ], "body": { @@ -1038,7 +1129,13 @@ "name": "Delete Credential", "request": { "method": "DELETE", - "header": [], + "header": [ + { + "key": "X-XSRF-TOKEN", + "value": "{{XSRF_TOKEN}}", + "type": "text" + } + ], "url": "{{HOST}}/wallets/{{walletId}}/credentials/{{credentialId}}" }, "response": [] @@ -1075,7 +1172,13 @@ "name": "Logout", "request": { "method": "POST", - "header": [], + "header": [ + { + "key": "X-XSRF-TOKEN", + "value": "{{XSRF_TOKEN}}", + "type": "text" + } + ], "url": "{{HOST}}/logout" }, "response": [] @@ -1095,7 +1198,13 @@ "name": "IndividualId Req OTP", "request": { "method": "POST", - "header": [], + "header": [ + { + "key": "X-XSRF-TOKEN", + "value": "{{XSRF_TOKEN}}", + "type": "text" + } + ], "body": { "mode": "raw", "raw": "{\n \"id\": \"mosip.identity.otp.internal\",\n \"aid\": \"10011100600000220231011051701\",\n \"metadata\": {},\n \"requestTime\": \"{{$isoTimestamp}}\",\n \"version\": \"1.0\",\n \"otpChannel\": [\n \"EMAIL\",\n \"PHONE\"\n ],\n \"transactionID\": \"1234567890\"\n}", @@ -1180,6 +1289,10 @@ { "key": "oauth_details_hash", "value": "" + }, + { + "key": "XSRF_TOKEN", + "value": "" } ] } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/config/Config.java b/src/main/java/io/mosip/mimoto/config/Config.java index c2d718278..4dd1f401f 100644 --- a/src/main/java/io/mosip/mimoto/config/Config.java +++ b/src/main/java/io/mosip/mimoto/config/Config.java @@ -15,17 +15,28 @@ import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; import org.springframework.security.config.annotation.web.configurers.HeadersConfigurer; import org.springframework.security.config.http.SessionCreationPolicy; import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.HttpStatusEntryPoint; +import org.springframework.security.web.csrf.CookieCsrfTokenRepository; +import org.springframework.security.web.csrf.CsrfTokenRequestAttributeHandler; +import org.springframework.security.web.csrf.CsrfTokenRequestHandler; +import org.springframework.security.web.csrf.CsrfToken; +import org.springframework.security.web.csrf.CsrfTokenRepository; import org.springframework.session.SessionRepository; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.CorsConfigurationSource; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.OncePerRequestFilter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; import java.util.Arrays; +import java.util.Collection; import java.util.HashMap; import java.util.Map; @@ -38,12 +49,18 @@ @Slf4j public class Config { + // CSRF Configuration Constants + private static final String CSRF_COOKIE_PATH = "/"; + private static final String CSRF_COOKIE_NAME = "XSRF-TOKEN"; + private static final String CSRF_HEADER_NAME = "X-XSRF-TOKEN"; + private static final String CSRF_COOKIE_HEADER_PREFIX = "XSRF-TOKEN="; + + // HTTP Method Constants + private static final String HTTP_METHOD_GET = "GET"; + @Value("${mosipbox.public.url}") private String baseUrl; - @Value("${mosip.security.csrf-enable:false}") - private boolean isCSRFEnable; - @Value("${mosip.security.cors-enable:false}") private boolean isCORSEnable; @@ -53,6 +70,9 @@ public class Config { @Value("${mosip.security.ignore-auth-urls}") private String[] ignoreAuthUrls; + @Value("${mosip.security.csrf-ignore-urls}") + private String[] csrfIgnoreUrls; + @Value("${mosip.inji.web.url}") private String injiWebUrl; @@ -71,11 +91,12 @@ public Map injiConfig() { @Autowired private CustomOAuth2UserService customOAuth2UserService; + private CookieCsrfTokenRepository csrfTokenRepository; + @Bean public SecurityFilterChain filterChain(HttpSecurity http, SessionRepository sessionRepository) throws Exception { - if (!isCSRFEnable) { - http.csrf(AbstractHttpConfigurer::disable); - } + configureCsrf(http); + http.addFilterAfter(new CsrfTokenCookieFilter(csrfTokenRepository), org.springframework.security.web.csrf.CsrfFilter.class); if (isCORSEnable) { http.cors(corsCustomizer -> corsCustomizer @@ -97,6 +118,21 @@ public SecurityFilterChain filterChain(HttpSecurity http, SessionRepository sess } + private void configureCsrf(HttpSecurity http) throws Exception { + csrfTokenRepository = CookieCsrfTokenRepository.withHttpOnlyFalse(); + csrfTokenRepository.setCookiePath(CSRF_COOKIE_PATH); + csrfTokenRepository.setCookieName(CSRF_COOKIE_NAME); + csrfTokenRepository.setHeaderName(CSRF_HEADER_NAME); + + CsrfTokenRequestHandler requestHandler = new CsrfTokenRequestAttributeHandler(); + + if (csrfIgnoreUrls != null && csrfIgnoreUrls.length > 0) { + http.csrf(csrf -> csrf.csrfTokenRepository(csrfTokenRepository).csrfTokenRequestHandler(requestHandler).ignoringRequestMatchers(csrfIgnoreUrls)); + } else { + http.csrf(csrf -> csrf.csrfTokenRepository(csrfTokenRepository).csrfTokenRequestHandler(requestHandler)); + } + } + private void setupOauth2Config(HttpSecurity http, SessionRepository sessionRepository) throws Exception { configureOAuth2Login(http); configureLogout(http, sessionRepository); @@ -161,4 +197,49 @@ public CorsConfigurationSource corsConfigurationSource() { return source; } + /** + * Filter to ensure CSRF tokens are generated and stored in cookies on all requests, + * including GET requests. This ensures the XSRF-TOKEN cookie is available for clients + * to read and use in subsequent state-changing requests. + */ + static class CsrfTokenCookieFilter extends OncePerRequestFilter { + + private final CsrfTokenRepository csrfTokenRepository; + + public CsrfTokenCookieFilter(CsrfTokenRepository csrfTokenRepository) { + this.csrfTokenRepository = csrfTokenRepository; + } + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { + CsrfToken csrfToken = (CsrfToken) request.getAttribute(CsrfToken.class.getName()); + + boolean isGetRequest = HTTP_METHOD_GET.equalsIgnoreCase(request.getMethod()); + if (isGetRequest) { + if (csrfToken == null) { + csrfToken = csrfTokenRepository.loadToken(request); + if (csrfToken == null) { + csrfToken = csrfTokenRepository.generateToken(request); + } + request.setAttribute(CsrfToken.class.getName(), csrfToken); + } + + boolean cookieAlreadySet = false; + Collection setCookieHeaders = response.getHeaders("Set-Cookie"); + for (String cookieHeader : setCookieHeaders) { + if (cookieHeader != null && cookieHeader.startsWith(CSRF_COOKIE_HEADER_PREFIX)) { + cookieAlreadySet = true; + break; + } + } + + if (!cookieAlreadySet) { + csrfTokenRepository.saveToken(csrfToken, request, response); + } + } + + filterChain.doFilter(request, response); + } + } + } diff --git a/src/main/resources/application-default.properties b/src/main/resources/application-default.properties index 3099b37ec..7458106fe 100644 --- a/src/main/resources/application-default.properties +++ b/src/main/resources/application-default.properties @@ -179,6 +179,14 @@ mosip.security.ignore-auth-urls=/safetynet/**,/actuator/**,/swagger-ui/**,/v3/ap /issuers,/issuers/**,/authorize,/req/otp,/vid,/req/auth/**,/req/individualId/otp,/aid/get-individual-id,\ /verifiers, /auth/*/token-login +# CSRF Security Configuration +# CSRF protection is always enabled by default. State-changing requests (POST, PUT, DELETE, PATCH) +# require a valid CSRF token to be sent in the X-XSRF-TOKEN header. +# List of URLs that are excluded from CSRF protection. These URLs can still require authentication. +# OAuth2 endpoints and public endpoints are typically excluded from CSRF protection. +mosip.security.csrf-ignore-urls=/oauth2/**,/logout,/safetynet/**,/credentials/**,/credentialshare/**,/binding-otp,/wallet-binding,\ + /get-token/**,/req/otp,/vid,/req/auth/**,/req/individualId/otp,/auth/*/token-login + # Inji mobile wallet configuration # This template defines the list of the fields of the downloaded verifiable credential will be included in the event files when generating different documents credential.template=template.json diff --git a/src/test/java/io/mosip/mimoto/config/ConfigTest.java b/src/test/java/io/mosip/mimoto/config/ConfigTest.java new file mode 100644 index 000000000..d23ad4af4 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/config/ConfigTest.java @@ -0,0 +1,610 @@ +package io.mosip.mimoto.config; + +import io.mosip.mimoto.security.oauth2.CustomOAuth2UserService; +import io.mosip.mimoto.security.oauth2.OAuth2AuthenticationFailureHandler; +import io.mosip.mimoto.security.oauth2.OAuth2AuthenticationSuccessHandler; +import jakarta.servlet.FilterChain; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.springframework.security.web.csrf.CsrfToken; +import org.springframework.security.web.csrf.CsrfTokenRepository; +import org.springframework.session.SessionRepository; +import org.springframework.test.util.ReflectionTestUtils; +import org.springframework.web.cors.CorsConfigurationSource; + +import jakarta.servlet.http.HttpServletRequest; +import org.springframework.web.cors.CorsConfiguration; + +import java.util.Collection; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class ConfigTest { + + @Mock + private CustomOAuth2UserService customOAuth2UserService; + + @Mock + private OAuth2AuthenticationSuccessHandler oAuth2AuthenticationSuccessHandler; + + @Mock + private OAuth2AuthenticationFailureHandler oAuth2AuthenticationFailureHandler; + + @Mock + private SessionRepository sessionRepository; + + @Mock + private CsrfTokenRepository csrfTokenRepository; + + @Mock + private CsrfToken csrfToken; + + private Config config; + + @BeforeEach + void setUp() { + config = new Config(); + ReflectionTestUtils.setField(config, "baseUrl", "http://localhost:8080"); + ReflectionTestUtils.setField(config, "isCORSEnable", true); + ReflectionTestUtils.setField(config, "origins", "localhost:8088,localhost:3000"); + ReflectionTestUtils.setField(config, "ignoreAuthUrls", new String[]{"/public/**", "/actuator/**"}); + ReflectionTestUtils.setField(config, "csrfIgnoreUrls", new String[]{"/oauth2/**", "/logout"}); + ReflectionTestUtils.setField(config, "injiWebUrl", "http://localhost:3000"); + ReflectionTestUtils.setField(config, "customOAuth2UserService", customOAuth2UserService); + ReflectionTestUtils.setField(config, "oAuth2AuthenticationSuccessHandler", oAuth2AuthenticationSuccessHandler); + ReflectionTestUtils.setField(config, "oAuth2AuthenticationFailureHandler", oAuth2AuthenticationFailureHandler); + } + + @Test + void testInjiConfigBean() { + Map injiConfig = config.injiConfig(); + assertNotNull(injiConfig); + assertInstanceOf(Map.class, injiConfig); + } + + @Test + void testCorsConfigurationSource() { + CorsConfigurationSource corsConfigurationSource = config.corsConfigurationSource(); + assertNotNull(corsConfigurationSource); + + HttpServletRequest request = new MockHttpServletRequest(); + org.springframework.web.cors.CorsConfiguration corsConfig = corsConfigurationSource.getCorsConfiguration(request); + assertNotNull(corsConfig); + // Origins are split by comma - check that both origins are present + assertTrue(corsConfig.getAllowedOrigins().contains("localhost:8088"), "Should contain localhost:8088"); + assertTrue(corsConfig.getAllowedOrigins().contains("localhost:3000"), "Should contain localhost:3000"); + assertEquals(2, corsConfig.getAllowedOrigins().size(), "Should have exactly 2 origins"); + assertTrue(corsConfig.getAllowedMethods().contains("*")); + assertTrue(corsConfig.getAllowedHeaders().contains("*")); + assertTrue(corsConfig.getAllowCredentials()); + } + + @Test + void testCorsConfigurationSourceWithSingleOrigin() { + ReflectionTestUtils.setField(config, "origins", "localhost:8088"); + CorsConfigurationSource corsConfigurationSource = config.corsConfigurationSource(); + assertNotNull(corsConfigurationSource); + + HttpServletRequest request = new MockHttpServletRequest(); + org.springframework.web.cors.CorsConfiguration corsConfig = corsConfigurationSource.getCorsConfiguration(request); + assertNotNull(corsConfig); + assertEquals(1, corsConfig.getAllowedOrigins().size()); + assertTrue(corsConfig.getAllowedOrigins().contains("localhost:8088")); + } + + @Test + void testCsrfTokenCookieFilterGetRequestGeneratesToken() throws Exception { + // Setup + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("GET"); + MockHttpServletResponse response = new MockHttpServletResponse(); + FilterChain filterChain = mock(FilterChain.class); + + when(csrfTokenRepository.loadToken(any())).thenReturn(null); + when(csrfTokenRepository.generateToken(any())).thenReturn(csrfToken); + + // Create filter instance using reflection + Config.CsrfTokenCookieFilter filter = createFilterInstance(); + + // Execute + filter.doFilterInternal(request, response, filterChain); + + // Verify + verify(csrfTokenRepository).loadToken(any()); + verify(csrfTokenRepository).generateToken(any()); + verify(csrfTokenRepository).saveToken(any(), any(), any()); + verify(filterChain).doFilter(request, response); + assertNotNull(request.getAttribute(CsrfToken.class.getName())); + } + + @Test + void testCsrfTokenCookieFilterGetRequestLoadsExistingToken() throws Exception { + // Setup + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("GET"); + MockHttpServletResponse response = new MockHttpServletResponse(); + FilterChain filterChain = mock(FilterChain.class); + + when(csrfTokenRepository.loadToken(any())).thenReturn(csrfToken); + + Config.CsrfTokenCookieFilter filter = createFilterInstance(); + + // Execute + filter.doFilterInternal(request, response, filterChain); + + // Verify + verify(csrfTokenRepository).loadToken(any()); + verify(csrfTokenRepository, never()).generateToken(any()); + verify(csrfTokenRepository).saveToken(any(), any(), any()); + verify(filterChain).doFilter(request, response); + } + + @Test + void testCsrfTokenCookieFilterGetRequestPreventsDuplicateCookie() throws Exception { + // Setup + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("GET"); + MockHttpServletResponse response = new MockHttpServletResponse(); + response.addHeader("Set-Cookie", "XSRF-TOKEN=existing-token; Path=/"); + FilterChain filterChain = mock(FilterChain.class); + + when(csrfTokenRepository.loadToken(any())).thenReturn(csrfToken); + + Config.CsrfTokenCookieFilter filter = createFilterInstance(); + + // Execute + filter.doFilterInternal(request, response, filterChain); + + // Verify - should not save again if cookie already exists + verify(csrfTokenRepository).loadToken(any()); + verify(csrfTokenRepository, never()).saveToken(any(), any(), any()); + verify(filterChain).doFilter(request, response); + } + + @Test + void testCsrfTokenCookieFilterPostRequestDoesNotInterfere() throws Exception { + // Setup + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + MockHttpServletResponse response = new MockHttpServletResponse(); + FilterChain filterChain = mock(FilterChain.class); + + // Simulate CsrfFilter already set the token + request.setAttribute(CsrfToken.class.getName(), csrfToken); + + Config.CsrfTokenCookieFilter filter = createFilterInstance(); + + // Execute + filter.doFilterInternal(request, response, filterChain); + + // Verify - should not process POST requests + verify(csrfTokenRepository, never()).loadToken(any()); + verify(csrfTokenRepository, never()).generateToken(any()); + verify(csrfTokenRepository, never()).saveToken(any(), any(), any()); + verify(filterChain).doFilter(request, response); + } + + @Test + void testCsrfTokenCookieFilterPutRequestDoesNotInterfere() throws Exception { + // Setup + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("PUT"); + MockHttpServletResponse response = new MockHttpServletResponse(); + FilterChain filterChain = mock(FilterChain.class); + + Config.CsrfTokenCookieFilter filter = createFilterInstance(); + + // Execute + filter.doFilterInternal(request, response, filterChain); + + // Verify - should not process PUT requests + verify(csrfTokenRepository, never()).loadToken(any()); + verify(csrfTokenRepository, never()).generateToken(any()); + verify(csrfTokenRepository, never()).saveToken(any(), any(), any()); + verify(filterChain).doFilter(request, response); + } + + @Test + void testCsrfTokenCookieFilterDeleteRequestDoesNotInterfere() throws Exception { + // Setup + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("DELETE"); + MockHttpServletResponse response = new MockHttpServletResponse(); + FilterChain filterChain = mock(FilterChain.class); + + Config.CsrfTokenCookieFilter filter = createFilterInstance(); + + // Execute + filter.doFilterInternal(request, response, filterChain); + + // Verify - should not process DELETE requests + verify(csrfTokenRepository, never()).loadToken(any()); + verify(csrfTokenRepository, never()).generateToken(any()); + verify(csrfTokenRepository, never()).saveToken(any(), any(), any()); + verify(filterChain).doFilter(request, response); + } + + @Test + void testCsrfTokenCookieFilterHeadRequestDoesNotProcess() throws Exception { + // Setup + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("HEAD"); + MockHttpServletResponse response = new MockHttpServletResponse(); + FilterChain filterChain = mock(FilterChain.class); + + Config.CsrfTokenCookieFilter filter = createFilterInstance(); + + // Execute + filter.doFilterInternal(request, response, filterChain); + + // Verify - HEAD requests should not be processed (only GET is handled) + verify(csrfTokenRepository, never()).loadToken(any()); + verify(csrfTokenRepository, never()).generateToken(any()); + verify(csrfTokenRepository, never()).saveToken(any(), any(), any()); + verify(filterChain).doFilter(request, response); + } + + @Test + void testCsrfTokenCookieFilterGetRequestWithTokenAlreadySet() throws Exception { + // Setup + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("GET"); + request.setAttribute(CsrfToken.class.getName(), csrfToken); + MockHttpServletResponse response = new MockHttpServletResponse(); + FilterChain filterChain = mock(FilterChain.class); + + Config.CsrfTokenCookieFilter filter = createFilterInstance(); + + // Execute + filter.doFilterInternal(request, response, filterChain); + + // Verify - should use existing token and save it + verify(csrfTokenRepository, never()).loadToken(any()); + verify(csrfTokenRepository, never()).generateToken(any()); + verify(csrfTokenRepository).saveToken(eq(csrfToken), any(), any()); + verify(filterChain).doFilter(request, response); + } + + @Test + void testCsrfTokenCookieFilterGetRequestChecksForDuplicateCookie() throws Exception { + // Setup + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("GET"); + MockHttpServletResponse response = new MockHttpServletResponse(); + response.addHeader("Set-Cookie", "XSRF-TOKEN=test-token-123; Path=/"); + FilterChain filterChain = mock(FilterChain.class); + + when(csrfTokenRepository.loadToken(any())).thenReturn(csrfToken); + + Config.CsrfTokenCookieFilter filter = createFilterInstance(); + + // Execute + filter.doFilterInternal(request, response, filterChain); + + // Verify - should detect duplicate and not save again + Collection setCookieHeaders = response.getHeaders("Set-Cookie"); + long xsrfTokenCount = setCookieHeaders.stream().filter(header -> header != null && header.startsWith("XSRF-TOKEN=")).count(); + + assertEquals(1, xsrfTokenCount, "Should have only one XSRF-TOKEN cookie"); + verify(csrfTokenRepository, never()).saveToken(any(), any(), any()); + } + + @Test + void testCsrfTokenCookieFilterGetRequestWithNullCookieHeader() throws Exception { + // Setup - test null cookie header handling + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("GET"); + MockHttpServletResponse response = new MockHttpServletResponse(); + response.addHeader("Set-Cookie", null); // Add null header + response.addHeader("Set-Cookie", "OTHER-COOKIE=value; Path=/"); + FilterChain filterChain = mock(FilterChain.class); + + when(csrfTokenRepository.loadToken(any())).thenReturn(csrfToken); + + Config.CsrfTokenCookieFilter filter = createFilterInstance(); + + // Execute + filter.doFilterInternal(request, response, filterChain); + + // Verify - should handle null cookie header gracefully and save token + verify(csrfTokenRepository).loadToken(any()); + verify(csrfTokenRepository).saveToken(any(), any(), any()); + verify(filterChain).doFilter(request, response); + } + + @Test + void testCsrfTokenCookieFilterGetRequestWithMultipleCookies() throws Exception { + // Setup - multiple cookies but no XSRF-TOKEN + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("GET"); + MockHttpServletResponse response = new MockHttpServletResponse(); + response.addHeader("Set-Cookie", "SESSION_ID=abc123; Path=/"); + response.addHeader("Set-Cookie", "OTHER_TOKEN=xyz; Path=/"); + FilterChain filterChain = mock(FilterChain.class); + + when(csrfTokenRepository.loadToken(any())).thenReturn(csrfToken); + + Config.CsrfTokenCookieFilter filter = createFilterInstance(); + + // Execute + filter.doFilterInternal(request, response, filterChain); + + // Verify - should save token since XSRF-TOKEN is not present + verify(csrfTokenRepository).loadToken(any()); + verify(csrfTokenRepository).saveToken(any(), any(), any()); + verify(filterChain).doFilter(request, response); + } + + @Test + void testCsrfTokenCookieFilterPatchRequestDoesNotInterfere() throws Exception { + // Setup + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("PATCH"); + MockHttpServletResponse response = new MockHttpServletResponse(); + FilterChain filterChain = mock(FilterChain.class); + + Config.CsrfTokenCookieFilter filter = createFilterInstance(); + + // Execute + filter.doFilterInternal(request, response, filterChain); + + // Verify - should not process PATCH requests + verify(csrfTokenRepository, never()).loadToken(any()); + verify(csrfTokenRepository, never()).generateToken(any()); + verify(csrfTokenRepository, never()).saveToken(any(), any(), any()); + verify(filterChain).doFilter(request, response); + } + + @Test + void testCsrfTokenCookieFilterOptionsRequestDoesNotInterfere() throws Exception { + // Setup + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("OPTIONS"); + MockHttpServletResponse response = new MockHttpServletResponse(); + FilterChain filterChain = mock(FilterChain.class); + + Config.CsrfTokenCookieFilter filter = createFilterInstance(); + + // Execute + filter.doFilterInternal(request, response, filterChain); + + // Verify - should not process OPTIONS requests + verify(csrfTokenRepository, never()).loadToken(any()); + verify(csrfTokenRepository, never()).generateToken(any()); + verify(csrfTokenRepository, never()).saveToken(any(), any(), any()); + verify(filterChain).doFilter(request, response); + } + + @Test + void testCsrfTokenCookieFilterGetRequestLowercaseMethod() throws Exception { + // Setup - test case-insensitive method check + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("get"); // lowercase + MockHttpServletResponse response = new MockHttpServletResponse(); + FilterChain filterChain = mock(FilterChain.class); + + when(csrfTokenRepository.loadToken(any())).thenReturn(null); + when(csrfTokenRepository.generateToken(any())).thenReturn(csrfToken); + + Config.CsrfTokenCookieFilter filter = createFilterInstance(); + + // Execute + filter.doFilterInternal(request, response, filterChain); + + // Verify - should process lowercase GET + verify(csrfTokenRepository).loadToken(any()); + verify(csrfTokenRepository).generateToken(any()); + verify(csrfTokenRepository).saveToken(any(), any(), any()); + verify(filterChain).doFilter(request, response); + } + + @Test + void testCorsConfigurationSourceWithEmptyOrigins() { + ReflectionTestUtils.setField(config, "origins", ""); + CorsConfigurationSource corsConfigurationSource = config.corsConfigurationSource(); + assertNotNull(corsConfigurationSource); + + HttpServletRequest request = new MockHttpServletRequest(); + CorsConfiguration corsConfig = corsConfigurationSource.getCorsConfiguration(request); + assertNotNull(corsConfig); + // Empty string split by comma results in array with one empty string + assertTrue(corsConfig.getAllowedOrigins().contains("")); + } + + @Test + void testCorsConfigurationSourceWithWhitespaceInOrigins() { + ReflectionTestUtils.setField(config, "origins", "localhost:8088 , localhost:3000"); + CorsConfigurationSource corsConfigurationSource = config.corsConfigurationSource(); + assertNotNull(corsConfigurationSource); + + HttpServletRequest request = new MockHttpServletRequest(); + CorsConfiguration corsConfig = corsConfigurationSource.getCorsConfiguration(request); + assertNotNull(corsConfig); + // Should contain origins with whitespace (not trimmed) + assertTrue(corsConfig.getAllowedOrigins().size() >= 2); + } + + @Test + void testCsrfTokenCookieFilterGetRequestCookieHeaderWithNullValue() throws Exception { + // Setup - test null handling in cookie header loop + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("GET"); + MockHttpServletResponse response = new MockHttpServletResponse(); + // Add a null header value + response.addHeader("Set-Cookie", null); + FilterChain filterChain = mock(FilterChain.class); + + when(csrfTokenRepository.loadToken(any())).thenReturn(csrfToken); + + Config.CsrfTokenCookieFilter filter = createFilterInstance(); + + // Execute + filter.doFilterInternal(request, response, filterChain); + + // Verify - should handle null gracefully and save token + verify(csrfTokenRepository).loadToken(any()); + verify(csrfTokenRepository).saveToken(any(), any(), any()); + verify(filterChain).doFilter(request, response); + } + + @Test + void testCsrfTokenCookieFilterGetRequestMultipleXSRFTokenCookies() throws Exception { + // Setup - multiple XSRF-TOKEN cookies (edge case) + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("GET"); + MockHttpServletResponse response = new MockHttpServletResponse(); + response.addHeader("Set-Cookie", "XSRF-TOKEN=token1; Path=/"); + response.addHeader("Set-Cookie", "XSRF-TOKEN=token2; Path=/"); + FilterChain filterChain = mock(FilterChain.class); + + when(csrfTokenRepository.loadToken(any())).thenReturn(csrfToken); + + Config.CsrfTokenCookieFilter filter = createFilterInstance(); + + // Execute + filter.doFilterInternal(request, response, filterChain); + + // Verify - should detect duplicate and not save again + verify(csrfTokenRepository).loadToken(any()); + verify(csrfTokenRepository, never()).saveToken(any(), any(), any()); + verify(filterChain).doFilter(request, response); + } + + @Test + void testCsrfTokenCookieFilterGetRequestWithCookieNotStartingWithXSRF() throws Exception { + // Setup - cookie header that contains XSRF but doesn't start with it + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("GET"); + MockHttpServletResponse response = new MockHttpServletResponse(); + response.addHeader("Set-Cookie", "OTHER=XSRF-TOKEN=value; Path=/"); // Contains but doesn't start with + FilterChain filterChain = mock(FilterChain.class); + + when(csrfTokenRepository.loadToken(any())).thenReturn(csrfToken); + + Config.CsrfTokenCookieFilter filter = createFilterInstance(); + + // Execute + filter.doFilterInternal(request, response, filterChain); + + // Verify - should save token since XSRF-TOKEN doesn't start the cookie header + verify(csrfTokenRepository).loadToken(any()); + verify(csrfTokenRepository).saveToken(any(), any(), any()); + verify(filterChain).doFilter(request, response); + } + + @Test + void testCsrfTokenCookieFilterGetRequestWithEmptyCookieHeaders() throws Exception { + // Setup - no cookie headers at all + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("GET"); + MockHttpServletResponse response = new MockHttpServletResponse(); + FilterChain filterChain = mock(FilterChain.class); + + when(csrfTokenRepository.loadToken(any())).thenReturn(csrfToken); + + Config.CsrfTokenCookieFilter filter = createFilterInstance(); + + // Execute + filter.doFilterInternal(request, response, filterChain); + + // Verify - should save token since no cookies exist + verify(csrfTokenRepository).loadToken(any()); + verify(csrfTokenRepository).saveToken(any(), any(), any()); + verify(filterChain).doFilter(request, response); + } + + @Test + void testCsrfTokenCookieFilterGetRequestTokenSetButCookieNotSet() throws Exception { + // Setup - token already set in request but cookie not in response + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("GET"); + request.setAttribute(CsrfToken.class.getName(), csrfToken); + MockHttpServletResponse response = new MockHttpServletResponse(); + FilterChain filterChain = mock(FilterChain.class); + + Config.CsrfTokenCookieFilter filter = createFilterInstance(); + + // Execute + filter.doFilterInternal(request, response, filterChain); + + // Verify - should save token since cookie is not already set + verify(csrfTokenRepository, never()).loadToken(any()); + verify(csrfTokenRepository, never()).generateToken(any()); + verify(csrfTokenRepository).saveToken(eq(csrfToken), any(), any()); + verify(filterChain).doFilter(request, response); + } + + @Test + void testCorsConfigurationSourceWithThreeOrigins() { + ReflectionTestUtils.setField(config, "origins", "localhost:8088,localhost:3000,localhost:9000"); + CorsConfigurationSource corsConfigurationSource = config.corsConfigurationSource(); + assertNotNull(corsConfigurationSource); + + HttpServletRequest request = new MockHttpServletRequest(); + CorsConfiguration corsConfig = corsConfigurationSource.getCorsConfiguration(request); + assertNotNull(corsConfig); + assertEquals(3, corsConfig.getAllowedOrigins().size()); + assertTrue(corsConfig.getAllowedOrigins().contains("localhost:8088")); + assertTrue(corsConfig.getAllowedOrigins().contains("localhost:3000")); + assertTrue(corsConfig.getAllowedOrigins().contains("localhost:9000")); + } + + @Test + void testCorsConfigurationSourceWithSingleComma() { + ReflectionTestUtils.setField(config, "origins", ","); + CorsConfigurationSource corsConfigurationSource = config.corsConfigurationSource(); + assertNotNull(corsConfigurationSource); + + HttpServletRequest request = new MockHttpServletRequest(); + CorsConfiguration corsConfig = corsConfigurationSource.getCorsConfiguration(request); + assertNotNull(corsConfig); + assertEquals(0, corsConfig.getAllowedOrigins().size()); + } + + @Test + void testInjiConfigBeanIsEmptyMap() { + Map injiConfig = config.injiConfig(); + assertNotNull(injiConfig); + assertTrue(injiConfig.isEmpty()); // Should be empty initially + } + + @Test + void testCsrfTokenCookieFilterGetRequestCaseInsensitiveMethod() throws Exception { + // Setup - test case-insensitive GET method + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("GeT"); // Mixed case + MockHttpServletResponse response = new MockHttpServletResponse(); + FilterChain filterChain = mock(FilterChain.class); + + when(csrfTokenRepository.loadToken(any())).thenReturn(null); + when(csrfTokenRepository.generateToken(any())).thenReturn(csrfToken); + + Config.CsrfTokenCookieFilter filter = createFilterInstance(); + + // Execute + filter.doFilterInternal(request, response, filterChain); + + // Verify - should process mixed case GET + verify(csrfTokenRepository).loadToken(any()); + verify(csrfTokenRepository).generateToken(any()); + verify(csrfTokenRepository).saveToken(any(), any(), any()); + verify(filterChain).doFilter(request, response); + } + + /** + * Helper method to create filter instance + */ + private Config.CsrfTokenCookieFilter createFilterInstance() { + return new Config.CsrfTokenCookieFilter(csrfTokenRepository); + } +} + From e123c18ff2299baea7a7544201f43bdc5d445982 Mon Sep 17 00:00:00 2001 From: Durgesh Konga Date: Tue, 16 Dec 2025 09:27:22 +0530 Subject: [PATCH 803/860] [INJIWEB-1800] - Update Manual JSON Path extraction to jayway JSONPATH (#991) * [INJIWEB-1800] - Remove setAccessible(true) from main and test Signed-off-by: kongadurgesh * [INJIWEB-1800] - Update Manual JSON Path extraction to jayway JSONPATH Remove unused code from JSONUtil and refractor Update testcases for JSON Path Signed-off-by: kongadurgesh * [INJIWEB-1800] - Remove temporary change Signed-off-by: kongadurgesh * [INJIWEB-1800] - Remove setAccessible(true) from main and test Signed-off-by: kongadurgesh * [INJIWEB-1800] - Update Manual JSON Path extraction to jayway JSONPATH Remove unused code from JSONUtil and refractor Update testcases for JSON Path Signed-off-by: kongadurgesh * [INJIWEB-1800] - Remove temporary change Signed-off-by: kongadurgesh * [INJIWEB-1800] - Remove reundant code in evaluateJsonPath Signed-off-by: kongadurgesh * [INJIWEB-1800] - Remove setAccessible(true) from main and test Signed-off-by: kongadurgesh * [INJIWEB-1800] - Update Manual JSON Path extraction to jayway JSONPATH Remove unused code from JSONUtil and refractor Update testcases for JSON Path Signed-off-by: kongadurgesh * [INJIWEB-1800] - Remove temporary change Signed-off-by: kongadurgesh * [INJIWEB-1800] - Remove reundant code in evaluateJsonPath Signed-off-by: kongadurgesh --------- Signed-off-by: kongadurgesh --- pom.xml | 5 + .../impl/CredentialMatchingServiceImpl.java | 75 ++--- .../impl/CredentialShareServiceImpl.java | 55 +++- .../java/io/mosip/mimoto/util/JsonUtil.java | 280 ------------------ ...Auth2AuthenticationSuccessHandlerTest.java | 6 +- .../CredentialMatchingServiceTest.java | 4 +- .../service/WalletCredentialServiceTest.java | 130 +++----- 7 files changed, 126 insertions(+), 429 deletions(-) diff --git a/pom.xml b/pom.xml index df4b8fd3b..4979db44b 100644 --- a/pom.xml +++ b/pom.xml @@ -268,6 +268,11 @@ gson ${google.gson.version} + + com.jayway.jsonpath + json-path + 2.10.0 + junit diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialMatchingServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialMatchingServiceImpl.java index b2956c300..6d8f218c2 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialMatchingServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialMatchingServiceImpl.java @@ -1,7 +1,8 @@ package io.mosip.mimoto.service.impl; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import com.jayway.jsonpath.JsonPath; +import com.jayway.jsonpath.PathNotFoundException; import io.mosip.mimoto.constant.CredentialFormat; import io.mosip.mimoto.dto.DecryptedCredentialDTO; import io.mosip.mimoto.dto.MatchingCredentialsResponseDTO; @@ -25,7 +26,6 @@ import org.springframework.stereotype.Service; import java.io.IOException; -import java.lang.reflect.Field; import java.util.*; import java.util.stream.Collectors; import java.util.stream.IntStream; @@ -232,20 +232,15 @@ private boolean matchesConstraints(VCCredentialResponse vc, Constraints constrai } private boolean matchesFieldPath(VCCredentialResponse vc, String path, Filter filter) { - try { - Object credentialData = getCredentialData(vc); - - List matches = evaluateJsonPath(path, credentialData); + Object credentialData = getCredentialData(vc); - if (matches == null || matches.isEmpty()) { - return false; - } + List matches = evaluateJsonPath(path, credentialData); - return matches.stream().anyMatch(match -> matchesFilter(match, filter)); - } catch (JsonProcessingException | NoSuchFieldException | IllegalAccessException e) { - log.error("Error checking field path {}: {}", path, e.getMessage()); + if (matches == null || matches.isEmpty()) { return false; } + + return matches.stream().anyMatch(match -> matchesFilter(match, filter)); } private Object getCredentialData(VCCredentialResponse vc) { @@ -277,7 +272,7 @@ private boolean matchesFilter(Object match, Filter filter) { } - private List evaluateJsonPath(String path, Object json) throws JsonProcessingException, NoSuchFieldException, IllegalAccessException { + private List evaluateJsonPath(String path, Object json) { if (path == null || path.trim().isEmpty()) { return Collections.emptyList(); } @@ -290,53 +285,23 @@ private List evaluateJsonPath(String path, Object json) throws JsonProce return Collections.emptyList(); } - String[] pathParts = path.substring(2).split("\\."); - Object current = json; - - for (String part : pathParts) { - if (current instanceof Map) { - @SuppressWarnings("unchecked") Map map = (Map) current; - current = map.get(part); - } else if (current instanceof List) { - @SuppressWarnings("unchecked") List list = (List) current; - try { - int index = Integer.parseInt(part); - if (index >= 0 && index < list.size()) { - current = list.get(index); - } else { - return Collections.emptyList(); - } - } catch (NumberFormatException e) { - return Collections.emptyList(); - } - } else { - try { - @SuppressWarnings("unchecked") Map map = objectMapper.convertValue(current, Map.class); - current = map.get(part); - } catch (Exception convertException) { - if (objectMapper.canSerialize(current.getClass())) { - String jsonString = objectMapper.writeValueAsString(current); - @SuppressWarnings("unchecked") Map map = objectMapper.readValue(jsonString, Map.class); - current = map.get(part); - } else { - Field field = current.getClass().getDeclaredField(part); - field.setAccessible(true); - current = field.get(current); - } - } - } + try { + Object result = JsonPath.read(json, path); - if (current == null) { + if (result == null) { return Collections.emptyList(); } - } - if (TYPE_PATH.equals(path) && current instanceof List) { - @SuppressWarnings("unchecked") List typeList = (List) current; - return new ArrayList<>(typeList); - } + if (result instanceof List) { + return (List) result; + } + + return Collections.singletonList(result); - return Collections.singletonList(current); + } catch (PathNotFoundException e) { + log.debug("Path not found in JSON: {}", path); + return Collections.emptyList(); + } } private List extractRequiredClaims(PresentationDefinition presentationDefinition) { diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java index 181709b69..3c490024c 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java @@ -16,6 +16,7 @@ import io.mosip.mimoto.service.RestClientService; import io.mosip.mimoto.util.*; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.reflect.FieldUtils; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; @@ -407,7 +408,7 @@ public org.json.JSONObject decryptAttribute(org.json.JSONObject data, String enc private void appendLangToOutputJSONFields(org.json.JSONObject credential, org.json.JSONObject outputJSON, String value) { JSONArray node = new JSONArray(); node.addAll(credential.getJSONArray(value).toList()); - JsonValue[] jsonValues = JsonUtil.mapJsonNodeToJavaObject(JsonValue.class, node); + JsonValue[] jsonValues = mapJsonNodeToJavaObject(JsonValue.class, node); for (JsonValue jsonValue : jsonValues) { if (supportedLang.contains(jsonValue.getLanguage())) { outputJSON.put(value + "_" + jsonValue.getLanguage(), jsonValue); @@ -415,6 +416,58 @@ private void appendLangToOutputJSONFields(org.json.JSONObject credential, org.js } } + /** + * Map json node to java object. + * Maps JSONArray elements to Java objects by setting language and value fields. + * + * @param the generic type + * @param genericType the generic type + * @param demographicJsonNode the demographic json node + * @return the array of mapped objects + */ + @SuppressWarnings("unchecked") + private T[] mapJsonNodeToJavaObject(Class genericType, JSONArray demographicJsonNode) { + String language; + String value; + T[] javaObject = (T[]) java.lang.reflect.Array.newInstance(genericType, demographicJsonNode.size()); + try { + for (int i = 0; i < demographicJsonNode.size(); i++) { + T jsonNodeElement = (T) genericType.getDeclaredConstructor().newInstance(); + JSONObject objects = getJSONObjectFromArray(demographicJsonNode, i); + if (objects != null) { + language = (String) objects.get("language"); + value = (String) objects.get("value"); + FieldUtils.writeField(jsonNodeElement, "language", language, true); + FieldUtils.writeField(jsonNodeElement, "value", value, true); + javaObject[i] = jsonNodeElement; + } + } + } catch (InstantiationException | IllegalAccessException | java.lang.reflect.InvocationTargetException | NoSuchMethodException e) { + throw new InstantanceCreationException(PlatformErrorMessages.MIMOTO_SYS_INSTANTIATION_EXCEPTION.getMessage(), e); + } catch (SecurityException e) { + throw new FieldNotFoundException(PlatformErrorMessages.MIMOTO_SYS_NO_SUCH_FIELD_EXCEPTION.getMessage(), e); + } + return javaObject; + } + + /** + * Iterates the JSONArray and returns JSONObject for given index. + * + * @param jsonArray the json array + * @param index the index + * @return the JSON object + */ + @SuppressWarnings("unchecked") + private JSONObject getJSONObjectFromArray(JSONArray jsonArray, int index) { + Object object = jsonArray.get(index); + if (object instanceof LinkedHashMap) { + LinkedHashMap identity = (LinkedHashMap) jsonArray.get(index); + return identity != null ? new JSONObject(identity) : null; + } else { + return (JSONObject) object; + } + } + private String getData(String type, byte[] photoBytes) { if (type.equalsIgnoreCase(BiometricType.FACE.value())) { // Convert face image from JPEG2000 to JPG and encode with base64. diff --git a/src/main/java/io/mosip/mimoto/util/JsonUtil.java b/src/main/java/io/mosip/mimoto/util/JsonUtil.java index 3be13fbe1..e69de29bb 100644 --- a/src/main/java/io/mosip/mimoto/util/JsonUtil.java +++ b/src/main/java/io/mosip/mimoto/util/JsonUtil.java @@ -1,280 +0,0 @@ -package io.mosip.mimoto.util; - -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.UnsupportedEncodingException; -import java.lang.reflect.Array; -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.LinkedHashMap; - -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; - -import io.mosip.mimoto.dto.JsonValue; -import io.mosip.mimoto.exception.FieldNotFoundException; -import io.mosip.mimoto.exception.InstantanceCreationException; -import io.mosip.mimoto.exception.PlatformErrorMessages; - -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.gson.Gson; -import com.google.gson.JsonIOException; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import com.google.gson.JsonSyntaxException; - -/** - * This class provides JSON utilites. - * - * @author Pranav Kumar - * @since 0.0.1 - */ -public class JsonUtil { - - /** The Constant LANGUAGE. */ - private static final String LANGUAGE = "language"; - - /** The Constant VALUE. */ - private static final String VALUE = "value"; - - private static ObjectMapper objectMapper = new ObjectMapper(); - /** - * Instantiates a new json util. - */ - private JsonUtil() { - - } - - /** - * This method converts InputStream to JavaObject. - * - * @param stream - * The stream that needs to be converted - * @param clazz - * The class to which conversion is required - * @return The converted Java object - * @throws UnsupportedEncodingException - * the unsupported encoding exception - * @throws JsonSyntaxException - * the json syntax exception - * @throws JsonIOException - * the json IO exception - */ - public static Object inputStreamtoJavaObject(InputStream stream, Class clazz) - throws UnsupportedEncodingException { - JsonParser jsonParser = new JsonParser(); - Gson gson = new Gson(); - JsonObject jsonObject = (JsonObject) jsonParser.parse(new InputStreamReader(stream, "UTF-8")); - try { - return gson.fromJson(jsonObject, clazz); - } catch (Exception e) { - throw new UnsupportedEncodingException(PlatformErrorMessages.MIMOTO_CMB_UNSUPPORTED_ENCODING.getMessage()); - } - } - - /** - * This method returns the Json Object as value from identity.json - * object(JSONObject). jsonObject -> then identity demographic json object key - * -> demographic json label name EX:- demographicIdentity : { "identity" : { - * "fullName" : [ { "language" : "eng", "value" : "Taleev Aalam" }, { - * "language": "ara", "value" : "Taleev Aalam" } ] } - * - * method call :- getJSONObject(demographicIdentity,identity) - * - * @param jsonObject - * the json object - * @param key - * the key - * @return the JSON object - */ - public static JSONObject getJSONObject(JSONObject jsonObject, Object key) { - if(jsonObject == null) - return null; - LinkedHashMap identity = (LinkedHashMap) jsonObject.get(key); - return identity != null ? new JSONObject(identity) : null; - } - - /** - * This method returns JSONArray from JSONObject. argument 'jsonObject' -> - * demographic identity json as JSONObject. argument key -> label name of - * demographic identity json. Ex:- "identity" : { "fullName" : [ { "language" : - * "eng", "value" : "Taleev Aalam" }, { "language" : "ara", "value" : "Taleev - * Aalam" } ] } - * - * @param jsonObject - * the json object - * @param key - * the key - * @return the JSON array - */ - public static JSONArray getJSONArray(JSONObject jsonObject, Object key) { - ArrayList value = (ArrayList) jsonObject.get(key); - if (value == null) - return null; - JSONArray jsonArray = new JSONArray(); - jsonArray.addAll(value); - - return jsonArray; - - } - - public static String writeValueAsString(Object obj) throws IOException { - return objectMapper.writeValueAsString(obj); - } - - /** - * Object mapper read value. This method maps the jsonString to particular type - * - * @param the generic type - * @param jsonString the json string - * @param clazz the clazz - * @return the t - * @throws JsonParseException the json parse exception - * @throws JsonMappingException the json mapping exception - * @throws IOException Signals that an I/O exception has occurred. - */ - @SuppressWarnings("unchecked") - public static T readValue(String jsonString, Class clazz) throws IOException { - return (T) objectMapper.readValue(jsonString, clazz); - } - - /** - * Gets the JSON value. - * - * @param - * the generic type - * @param jsonObject - * the json object - * @param key - * the key - * @return the JSON value - */ - public static T getJSONValue(JSONObject jsonObject, String key) { - if(jsonObject == null) - return null; - T value = (T) jsonObject.get(key); - return value; - } - - /** - * Iterates the JSONArray and returns JSONObject for given index. - * - * @param jsonObject - * the json object - * @param key - * the key - * @return the JSON object - */ - public static JSONObject getJSONObjectFromArray(JSONArray jsonObject, int key) { - Object object = jsonObject.get(key); - if(object instanceof LinkedHashMap) { - LinkedHashMap identity = (LinkedHashMap) jsonObject.get(key); - return identity != null ? new JSONObject(identity) : null; - }else { - return (JSONObject)object; - } - } - /** - * Object mapper read value. This method maps the jsonString to particular type - * - * @param - * the generic type - * @param jsonString - * the json string - * @param clazz - * the clazz - * @return the t - * @throws JsonParseException - * the json parse exception - * @throws JsonMappingException - * the json mapping exception - * @throws IOException - * Signals that an I/O exception has occurred. - */ - @SuppressWarnings("unchecked") - public static T objectMapperReadValue(String jsonString, Class clazz) throws IOException { - ObjectMapper objectMapper = new ObjectMapper(); - return (T) objectMapper.readValue(jsonString, clazz); - } - - /** - * Gets the json values. Returns JsonValue[] java array for the particular key - * in demographic json. - * - * @param identityKey - * the identity key - * @return the json values - */ - public static JsonValue[] getJsonValues(JSONObject demographicIdentity, Object identityKey) { - JSONArray demographicJsonNode = null; - - if (demographicIdentity != null) - demographicJsonNode = JsonUtil.getJSONArray(demographicIdentity, identityKey); - return (demographicJsonNode != null) - ? (JsonValue[]) mapJsonNodeToJavaObject(JsonValue.class, demographicJsonNode) - : null; - - } - - /** - * Map json node to java object. - * - * @param - * the generic type - * @param genericType - * the generic type - * @param demographicJsonNode - * the demographic json node - * @return the t[] - */ - @SuppressWarnings("unchecked") - public static T[] mapJsonNodeToJavaObject(Class genericType, JSONArray demographicJsonNode) { - String language; - String value; - T[] javaObject = (T[]) Array.newInstance(genericType, demographicJsonNode.size()); - try { - for (int i = 0; i < demographicJsonNode.size(); i++) { - - T jsonNodeElement = (T) genericType.newInstance(); - - JSONObject objects = JsonUtil.getJSONObjectFromArray(demographicJsonNode, i); - if (objects != null) { - language = (String) objects.get(LANGUAGE); - value = (String) objects.get(VALUE); - - Field languageField = jsonNodeElement.getClass().getDeclaredField(LANGUAGE); - languageField.setAccessible(true); - languageField.set(jsonNodeElement, language); - - Field valueField = jsonNodeElement.getClass().getDeclaredField(VALUE); - valueField.setAccessible(true); - valueField.set(jsonNodeElement, value); - - javaObject[i] = jsonNodeElement; - } - } - } catch (InstantiationException | IllegalAccessException e) { - - throw new InstantanceCreationException(PlatformErrorMessages.MIMOTO_SYS_INSTANTIATION_EXCEPTION.getMessage(), - e); - - } catch (NoSuchFieldException | SecurityException e) { - - throw new FieldNotFoundException(PlatformErrorMessages.MIMOTO_SYS_NO_SUCH_FIELD_EXCEPTION.getMessage(), e); - - } - - return javaObject; - - } - - - public static String objectMapperObjectToJson(Object obj) throws IOException { - ObjectMapper objectMapper = new ObjectMapper(); - return objectMapper.writeValueAsString(obj); - } - -} diff --git a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java index 05a10693b..5868fb834 100644 --- a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java +++ b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java @@ -15,9 +15,9 @@ import org.mockito.junit.MockitoJUnitRunner; import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken; import org.springframework.security.oauth2.core.user.OAuth2User; +import org.springframework.test.util.ReflectionTestUtils; import java.io.IOException; -import java.lang.reflect.Field; import static org.junit.Assert.*; import static org.mockito.Mockito.*; @@ -52,9 +52,7 @@ public class OAuth2AuthenticationSuccessHandlerTest { @Before public void setUp() throws Exception { - Field injiWebUrlField = OAuth2AuthenticationSuccessHandler.class.getDeclaredField("authenticationSuccessRedirectUrl"); - injiWebUrlField.setAccessible(true); - injiWebUrlField.set(successHandler, AUTH_SUCCESS_REDIRECT_URL); + ReflectionTestUtils.setField(successHandler, "authenticationSuccessRedirectUrl", AUTH_SUCCESS_REDIRECT_URL); when(request.getSession(false)).thenReturn(session); } diff --git a/src/test/java/io/mosip/mimoto/service/CredentialMatchingServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialMatchingServiceTest.java index e4a3a7624..2868e3b43 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialMatchingServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialMatchingServiceTest.java @@ -1178,8 +1178,6 @@ public void testJsonPathEvaluationListIndexPath() throws Exception { .thenReturn(credentials); IssuerConfig mockIssuerConfig = createMockIssuerConfig(); - when(issuersService.getIssuerConfig(eq("test-issuer-id"), eq("TestCredential"))) - .thenReturn(mockIssuerConfig); // Act MatchingCredentialsDTO result = credentialMatchingService @@ -1188,7 +1186,7 @@ public void testJsonPathEvaluationListIndexPath() throws Exception { // Assert assertNotNull(result); assertNotNull(result.getMatchingCredentialsResponse()); - assertFalse("List index JSON path evaluation failed", + assertTrue("List index JSON path evaluation failed", result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); } diff --git a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java index 775f939cf..e1be822c9 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java @@ -19,11 +19,10 @@ import org.mockito.Mock; import org.mockito.MockedStatic; import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.test.util.ReflectionTestUtils; import java.io.ByteArrayInputStream; import java.io.IOException; -import java.lang.reflect.Field; -import java.lang.reflect.Method; import java.time.Instant; import java.util.List; import java.util.Map; @@ -96,9 +95,7 @@ public void setUp() throws Exception { CredentialsSupportedResponse credentialsSupportedResponse = new CredentialsSupportedResponse(); issuerConfig = new IssuerConfig(issuerDTO, wellKnownResponse, credentialsSupportedResponse); - Field field = WalletCredentialServiceImpl.class.getDeclaredField("issuersWithSingleVcLimit"); - field.setAccessible(true); - field.set(walletCredentialService, "Mosip"); + ReflectionTestUtils.setField(walletCredentialService, "issuersWithSingleVcLimit", "Mosip"); testCredential1 = createTestCredential("cred1", "issuer1", "type1"); testCredential2 = createTestCredential("cred2", "issuer2", "type2"); @@ -569,10 +566,8 @@ public void shouldDecryptAndParseCredentialSuccessfully() throws Exception { when(objectMapper.readValue(decryptedJson, VCCredentialResponse.class)) .thenReturn(testVcResponse1); - Method method = WalletCredentialServiceImpl.class.getDeclaredMethod( - "decryptAndParseCredential", VerifiableCredential.class, String.class); - method.setAccessible(true); - VCCredentialResponse result = (VCCredentialResponse) method.invoke(walletCredentialService, testCredential1, base64Key); + VCCredentialResponse result = ReflectionTestUtils.invokeMethod( + walletCredentialService, "decryptAndParseCredential", testCredential1, base64Key); assertEquals(testVcResponse1, result); verify(encryptionDecryptionUtil).decryptCredential("encryptedcred1", base64Key); @@ -581,17 +576,8 @@ public void shouldDecryptAndParseCredentialSuccessfully() throws Exception { @Test public void shouldThrowIllegalArgumentExceptionWhenCredentialIsNull() throws Exception { - Method method = WalletCredentialServiceImpl.class.getDeclaredMethod( - "decryptAndParseCredential", VerifiableCredential.class, String.class); - method.setAccessible(true); - - java.lang.IllegalArgumentException exception = assertThrows(java.lang.IllegalArgumentException.class, () -> { - try { - method.invoke(walletCredentialService, null, base64Key); - } catch (java.lang.reflect.InvocationTargetException e) { - throw e.getCause(); - } - }); + java.lang.IllegalArgumentException exception = assertThrows(java.lang.IllegalArgumentException.class, () -> + ReflectionTestUtils.invokeMethod(walletCredentialService, "decryptAndParseCredential", null, base64Key)); assertEquals("Credential cannot be null", exception.getMessage()); verifyNoInteractions(encryptionDecryptionUtil); @@ -603,17 +589,8 @@ public void shouldThrowIllegalArgumentExceptionWhenCredentialDataIsNull() throws VerifiableCredential credentialWithNullData = createTestCredential("cred1", "issuer1", "type1"); credentialWithNullData.setCredential(null); - Method method = WalletCredentialServiceImpl.class.getDeclaredMethod( - "decryptAndParseCredential", VerifiableCredential.class, String.class); - method.setAccessible(true); - - java.lang.IllegalArgumentException exception = assertThrows(java.lang.IllegalArgumentException.class, () -> { - try { - method.invoke(walletCredentialService, credentialWithNullData, base64Key); - } catch (java.lang.reflect.InvocationTargetException e) { - throw e.getCause(); - } - }); + java.lang.IllegalArgumentException exception = assertThrows(java.lang.IllegalArgumentException.class, () -> + ReflectionTestUtils.invokeMethod(walletCredentialService, "decryptAndParseCredential", credentialWithNullData, base64Key)); assertEquals("Credential data cannot be null", exception.getMessage()); verifyNoInteractions(encryptionDecryptionUtil); @@ -625,17 +602,8 @@ public void shouldThrowIllegalArgumentExceptionWhenDecryptedDataIsNull() throws when(encryptionDecryptionUtil.decryptCredential("encryptedcred1", base64Key)) .thenReturn(null); - Method method = WalletCredentialServiceImpl.class.getDeclaredMethod( - "decryptAndParseCredential", VerifiableCredential.class, String.class); - method.setAccessible(true); - - java.lang.IllegalArgumentException exception = assertThrows(java.lang.IllegalArgumentException.class, () -> { - try { - method.invoke(walletCredentialService, testCredential1, base64Key); - } catch (java.lang.reflect.InvocationTargetException e) { - throw e.getCause(); - } - }); + java.lang.IllegalArgumentException exception = assertThrows(java.lang.IllegalArgumentException.class, () -> + ReflectionTestUtils.invokeMethod(walletCredentialService, "decryptAndParseCredential", testCredential1, base64Key)); assertEquals("Failed to decrypt credential or decrypted data is empty", exception.getMessage()); verify(encryptionDecryptionUtil).decryptCredential("encryptedcred1", base64Key); @@ -647,17 +615,8 @@ public void shouldThrowIllegalArgumentExceptionWhenDecryptedDataIsEmpty() throws when(encryptionDecryptionUtil.decryptCredential("encryptedcred1", base64Key)) .thenReturn(""); - Method method = WalletCredentialServiceImpl.class.getDeclaredMethod( - "decryptAndParseCredential", VerifiableCredential.class, String.class); - method.setAccessible(true); - - java.lang.IllegalArgumentException exception = assertThrows(java.lang.IllegalArgumentException.class, () -> { - try { - method.invoke(walletCredentialService, testCredential1, base64Key); - } catch (java.lang.reflect.InvocationTargetException e) { - throw e.getCause(); - } - }); + java.lang.IllegalArgumentException exception = assertThrows(java.lang.IllegalArgumentException.class, () -> + ReflectionTestUtils.invokeMethod(walletCredentialService, "decryptAndParseCredential", testCredential1, base64Key)); assertEquals("Failed to decrypt credential or decrypted data is empty", exception.getMessage()); verify(encryptionDecryptionUtil).decryptCredential("encryptedcred1", base64Key); @@ -669,17 +628,8 @@ public void shouldThrowIllegalArgumentExceptionWhenDecryptedDataIsWhitespace() t when(encryptionDecryptionUtil.decryptCredential("encryptedcred1", base64Key)) .thenReturn(" "); - Method method = WalletCredentialServiceImpl.class.getDeclaredMethod( - "decryptAndParseCredential", VerifiableCredential.class, String.class); - method.setAccessible(true); - - java.lang.IllegalArgumentException exception = assertThrows(java.lang.IllegalArgumentException.class, () -> { - try { - method.invoke(walletCredentialService, testCredential1, base64Key); - } catch (java.lang.reflect.InvocationTargetException e) { - throw e.getCause(); - } - }); + java.lang.IllegalArgumentException exception = assertThrows(java.lang.IllegalArgumentException.class, () -> + ReflectionTestUtils.invokeMethod(walletCredentialService, "decryptAndParseCredential", testCredential1, base64Key)); assertEquals("Failed to decrypt credential or decrypted data is empty", exception.getMessage()); verify(encryptionDecryptionUtil).decryptCredential("encryptedcred1", base64Key); @@ -691,18 +641,22 @@ public void shouldThrowDecryptionExceptionWhenDecryptionFails() throws Exception when(encryptionDecryptionUtil.decryptCredential("encryptedcred1", base64Key)) .thenThrow(new DecryptionException("DECRYPTION_ERROR", "Decryption failed")); - Method method = WalletCredentialServiceImpl.class.getDeclaredMethod( - "decryptAndParseCredential", VerifiableCredential.class, String.class); - method.setAccessible(true); - - DecryptionException exception = assertThrows(DecryptionException.class, () -> { - try { - method.invoke(walletCredentialService, testCredential1, base64Key); - } catch (java.lang.reflect.InvocationTargetException e) { - throw e.getCause(); - } - }); + Exception thrownException = assertThrows(Exception.class, () -> + ReflectionTestUtils.invokeMethod(walletCredentialService, "decryptAndParseCredential", testCredential1, base64Key)); + + DecryptionException exception = null; + if (thrownException instanceof java.lang.reflect.UndeclaredThrowableException) { + Throwable cause = thrownException.getCause(); + assertTrue("Expected DecryptionException but got: " + cause.getClass().getName(), + cause instanceof DecryptionException); + exception = (DecryptionException) cause; + } else if (thrownException instanceof DecryptionException) { + exception = (DecryptionException) thrownException; + } else { + fail("Expected DecryptionException but got: " + thrownException.getClass().getName()); + } + assertNotNull("Exception should not be null", exception); assertEquals("DECRYPTION_ERROR", exception.getErrorCode()); assertEquals("DECRYPTION_ERROR --> Decryption failed", exception.getMessage()); verify(encryptionDecryptionUtil).decryptCredential("encryptedcred1", base64Key); @@ -718,18 +672,22 @@ public void shouldThrowIOExceptionWhenJsonParsingFails() throws Exception { when(objectMapper.readValue(invalidJson, VCCredentialResponse.class)) .thenThrow(new com.fasterxml.jackson.core.JsonProcessingException("Invalid JSON") {}); - Method method = WalletCredentialServiceImpl.class.getDeclaredMethod( - "decryptAndParseCredential", VerifiableCredential.class, String.class); - method.setAccessible(true); - - IOException exception = assertThrows(IOException.class, () -> { - try { - method.invoke(walletCredentialService, testCredential1, base64Key); - } catch (java.lang.reflect.InvocationTargetException e) { - throw e.getCause(); - } - }); + Exception thrownException = assertThrows(Exception.class, () -> + ReflectionTestUtils.invokeMethod(walletCredentialService, "decryptAndParseCredential", testCredential1, base64Key)); + + IOException exception = null; + if (thrownException instanceof java.lang.reflect.UndeclaredThrowableException) { + Throwable cause = thrownException.getCause(); + assertTrue("Expected IOException but got: " + cause.getClass().getName(), + cause instanceof IOException); + exception = (IOException) cause; + } else if (thrownException instanceof IOException) { + exception = (IOException) thrownException; + } else { + fail("Expected IOException but got: " + thrownException.getClass().getName()); + } + assertNotNull("Exception should not be null", exception); assertEquals("Invalid JSON", exception.getMessage()); verify(encryptionDecryptionUtil).decryptCredential("encryptedcred1", base64Key); verify(objectMapper).readValue(invalidJson, VCCredentialResponse.class); From 152bea1e0dba344b1c960aba5f0f0dbe3c556272 Mon Sep 17 00:00:00 2001 From: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> Date: Tue, 23 Dec 2025 12:41:55 +0530 Subject: [PATCH 804/860] Update apitest-commons version to 1.4.0-SNAPSHOT (#992) Signed-off-by: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> --- api-test/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api-test/pom.xml b/api-test/pom.xml index cac5748c8..f893ddfcf 100644 --- a/api-test/pom.xml +++ b/api-test/pom.xml @@ -68,7 +68,7 @@ io.mosip.testrig.apitest.commons apitest-commons - 1.3.6-SNAPSHOT + 1.4.0-SNAPSHOT From 89bc2de82d591b9e974f3392ce84d4127e547aa4 Mon Sep 17 00:00:00 2001 From: Rudhhi Shah Date: Tue, 23 Dec 2025 18:09:20 +0530 Subject: [PATCH 805/860] Injiweb 1580 : Use of injivcrenderer for svg to pdf conversion (#983) * INJIWEB-1750 Spike implementation of using injivc-renderer's SVG to PDF converter Signed-off-by: Rudhhi Shah * INJIWEB-1580 updated the method to ensure injivcrenderer is called for the right credential format Signed-off-by: Rudhhi Shah * INJIWEB-1580 Added the tests, worked on CR comments, modifications to include qrCodeImage data in credentialJsonString Signed-off-by: Rudhhi Shah * INJIWEB-1580 Replaced the use of Base64Util Signed-off-by: Rudhhi Shah * INJIWEB-1580 Replace java.util.base64 decoder with nimbus Signed-off-by: Rudhhi Shah * INJIWEB-1580 Use of the updated injivcrenderer jar 0.2.0-snapshot Signed-off-by: Rudhhi Shah * INJIWEB-1580 ack the code rabbit comments on test file Signed-off-by: Rudhhi Shah * INJIWEB-1580 Adding renderMethod in the VCCredentialProperties dto Signed-off-by: Rudhhi Shah * INJIWEB-1580 modified the PresentationServiceTest and VCCredentialProperties dto to exclude renderMethod when null Signed-off-by: Rudhhi Shah * INJIWEB-1580 test fixes Signed-off-by: Rudhhi Shah * INJIWEB-1580 tests added for CredentialPDFGeneratorService Signed-off-by: Rudhhi Shah * INJIWEB-1580 increased test coverage, created constants file and addressed comments Signed-off-by: Rudhhi Shah * INJIWEB-1580 renaming of function in CredentialPDFGeneratorService and cleanup Signed-off-by: Rudhhi Shah --------- Signed-off-by: Rudhhi Shah --- pom.xml | 22 +- .../io/mosip/mimoto/config/AppConfig.java | 6 + .../mimoto/constant/LdpVcV2Constants.java | 17 + .../dto/mimoto/VCCredentialProperties.java | 3 + .../CredentialPDFGeneratorService.java | 125 +++++- .../io/mosip/mimoto/util/SvgFixerUtil.java | 18 + .../CredentialPDFGeneratorServiceTest.java | 390 +++++++++++++++++- .../service/PresentationServiceTest.java | 65 +++ .../mosip/mimoto/util/SvgFixerUtilTest.java | 35 ++ 9 files changed, 662 insertions(+), 19 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/constant/LdpVcV2Constants.java create mode 100644 src/main/java/io/mosip/mimoto/util/SvgFixerUtil.java create mode 100644 src/test/java/io/mosip/mimoto/util/SvgFixerUtilTest.java diff --git a/pom.xml b/pom.xml index 4979db44b..32dc74575 100644 --- a/pom.xml +++ b/pom.xml @@ -428,7 +428,26 @@ pixelpass-jar 0.7.0 - + + io.mosip + injivcrenderer-jar + 0.2.0-SNAPSHOT + + + org.apache.pdfbox + pdfbox + 2.0.33 + + + org.apache.xmlgraphics + batik-transcoder + 1.19 + + + org.apache.xmlgraphics + fop + 2.11 + io.mosip.kernel kernel-biometrics-api @@ -463,7 +482,6 @@ caffeine 3.1.8 - jakarta.validation jakarta.validation-api diff --git a/src/main/java/io/mosip/mimoto/config/AppConfig.java b/src/main/java/io/mosip/mimoto/config/AppConfig.java index 6420327e5..70c5f5ac4 100644 --- a/src/main/java/io/mosip/mimoto/config/AppConfig.java +++ b/src/main/java/io/mosip/mimoto/config/AppConfig.java @@ -1,6 +1,7 @@ package io.mosip.mimoto.config; +import io.mosip.injivcrenderer.InjiVcRenderer; import io.mosip.pixelpass.PixelPass; import io.mosip.vercred.vcverifier.CredentialsVerifier; import org.springframework.context.annotation.Bean; @@ -17,4 +18,9 @@ public CredentialsVerifier credentialsVerifier() { public PixelPass pixelPass() { return new PixelPass(); } + + @Bean + public InjiVcRenderer injiVcRenderer() { + return new InjiVcRenderer("inji-web"); + } } diff --git a/src/main/java/io/mosip/mimoto/constant/LdpVcV2Constants.java b/src/main/java/io/mosip/mimoto/constant/LdpVcV2Constants.java new file mode 100644 index 000000000..2e60e8814 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/constant/LdpVcV2Constants.java @@ -0,0 +1,17 @@ +package io.mosip.mimoto.constant; + +/** + * Constants for LDP VC credentials with V2 context + */ +public class LdpVcV2Constants { + + // Credential context and URL + public static final String CONTEXT = "@context"; + public static final String V2_CONTEXT_URL = "https://www.w3.org/ns/credentials/v2"; + + // Render method and its properties + public static final String RENDER_METHOD = "renderMethod"; + public static final String TEMPLATE = "template"; + public static final String RENDER_SUITE = "renderSuite"; + public static final String SVG_MUSTACHE_RENDER_SUITE = "svg-mustache"; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialProperties.java b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialProperties.java index 6a539cc5f..83df8db7a 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialProperties.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialProperties.java @@ -49,4 +49,7 @@ public class VCCredentialProperties implements Serializable { @JsonInclude(JsonInclude.Include.NON_NULL) private Map credentialStatus; + + @JsonInclude(JsonInclude.Include.NON_NULL) + private Object renderMethod; } diff --git a/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java b/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java index e5b192eca..f77239886 100644 --- a/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java +++ b/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java @@ -13,7 +13,10 @@ import com.itextpdf.html2pdf.HtmlConverter; import com.itextpdf.html2pdf.resolver.font.DefaultFontProvider; import com.itextpdf.kernel.pdf.PdfWriter; +import com.nimbusds.jose.util.Base64URL; +import io.mosip.injivcrenderer.InjiVcRenderer; import io.mosip.mimoto.constant.CredentialFormat; +import io.mosip.mimoto.constant.LdpVcV2Constants; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.mimoto.CredentialIssuerDisplayResponse; import io.mosip.mimoto.dto.mimoto.CredentialSupportedDisplayResponse; @@ -23,11 +26,11 @@ import io.mosip.mimoto.model.QRCodeType; import io.mosip.mimoto.service.impl.PresentationServiceImpl; import io.mosip.mimoto.util.LocaleUtils; +import io.mosip.mimoto.util.SvgFixerUtil; import io.mosip.mimoto.util.Utilities; import io.mosip.pixelpass.PixelPass; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.lang.StringUtils; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; import org.springframework.beans.factory.annotation.Autowired; @@ -44,9 +47,6 @@ import java.util.*; import java.util.stream.Collectors; -import java.util.Map; -import java.util.Properties; - @Slf4j @Service public class CredentialPDFGeneratorService { @@ -68,6 +68,12 @@ private record SelectedFace(String key, String face) {} @Autowired private CredentialFormatHandlerFactory credentialFormatHandlerFactory; + @Autowired + private InjiVcRenderer injiVcRenderer; + + @Autowired + private SvgFixerUtil svgFixerUtil; + @Value("${mosip.inji.ovp.qrdata.pattern}") private String ovpQRDataPattern; @@ -87,20 +93,27 @@ private record SelectedFace(String key, String face) {} private boolean maskDisclosures; public ByteArrayInputStream generatePdfForVerifiableCredential(String credentialConfigurationId, VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, CredentialsSupportedResponse credentialsSupportedResponse, String dataShareUrl, String credentialValidity, String locale) throws Exception { - // Get the appropriate processor based on format - CredentialFormatHandler processor = credentialFormatHandlerFactory.getHandler(vcCredentialResponse.getFormat()); + // Check if the credential can support SVG based rendering + if (isSvgBasedRenderingSupported(vcCredentialResponse)) { + log.info("Detected LDP VC v2 credential with svg template, using InjiVcRenderer for PDF generation"); + return generatePdfUsingSvgTemplate(vcCredentialResponse, issuerDTO, dataShareUrl); + } else { + log.info("Using v1 data model flow for credential"); + // Get the appropriate processor based on format + CredentialFormatHandler processor = credentialFormatHandlerFactory.getHandler(vcCredentialResponse.getFormat()); - // Extract credential properties using the specific processor - Map credentialProperties = processor.extractCredentialClaims(vcCredentialResponse); + // Extract credential properties using the specific processor + Map credentialProperties = processor.extractCredentialClaims(vcCredentialResponse); - // Load display properties using the specific processor - LinkedHashMap> displayProperties = - processor.loadDisplayPropertiesFromWellknown(credentialProperties, credentialsSupportedResponse, locale); + // Load display properties using the specific processor + LinkedHashMap> displayProperties = + processor.loadDisplayPropertiesFromWellknown(credentialProperties, credentialsSupportedResponse, locale); - Map data = getPdfResourceFromVcProperties(displayProperties, credentialsSupportedResponse, - vcCredentialResponse, issuerDTO, dataShareUrl, credentialValidity); + Map data = getPdfResourceFromVcProperties(displayProperties, credentialsSupportedResponse, + vcCredentialResponse, issuerDTO, dataShareUrl, credentialValidity); - return renderVCInCredentialTemplate(data, issuerDTO.getIssuer_id(), credentialConfigurationId); + return renderVCInCredentialTemplate(data, issuerDTO.getIssuer_id(), credentialConfigurationId); + } } private Map getPdfResourceFromVcProperties( @@ -151,7 +164,7 @@ private Map getPdfResourceFromVcProperties( if (disclosures.contains(key)) { disclosuresProps.put(key, displayName); if (maskDisclosures) { - strVal = utilities.maskValue(strVal); + strVal = Utilities.maskValue(strVal); } } if (!isFaceKey && displayName != null) { @@ -275,5 +288,85 @@ private String constructQRCode(String qrData) throws WriterException { BufferedImage qrImage = MatrixToImageWriter.toBufferedImage(bitMatrix); return Utilities.encodeToString(qrImage, "png"); } -} + private boolean isSvgBasedRenderingSupported(VCCredentialResponse vcCredentialResponse) { + if (!CredentialFormat.LDP_VC.getFormat().equals(vcCredentialResponse.getFormat())) { + return false; + } + + Object credentialPayload = vcCredentialResponse.getCredential(); + if (!(credentialPayload instanceof Map)) return false; + + @SuppressWarnings("unchecked") + Map credentialPayloadMap = (Map) credentialPayload; + + return containsV2Context(credentialPayloadMap) + && containsSvgTemplate(credentialPayloadMap); + } + + private boolean containsV2Context(Map credentialPayloadMap) { + Object contextField = credentialPayloadMap.get(LdpVcV2Constants.CONTEXT); + + if (contextField instanceof List contextList) + return contextList.stream().anyMatch(entry -> LdpVcV2Constants.V2_CONTEXT_URL.equals(entry.toString())); + if (contextField instanceof String contextString) + return LdpVcV2Constants.V2_CONTEXT_URL.equals(contextString); + + return false; + } + + private boolean containsSvgTemplate(Map credentialPayloadMap) { + Object renderMethod = credentialPayloadMap.get(LdpVcV2Constants.RENDER_METHOD); + if (renderMethod instanceof List renderMethodList) { + return renderMethodList.stream().allMatch(entry -> { + if (!(entry instanceof Map renderMethodProperties)) return false; + + String renderSuite = (String) renderMethodProperties.get(LdpVcV2Constants.RENDER_SUITE); + return renderMethodProperties.containsKey(LdpVcV2Constants.TEMPLATE) && LdpVcV2Constants.SVG_MUSTACHE_RENDER_SUITE.equals(renderSuite); + }); + } + if (renderMethod instanceof Map renderMethodMap) { + String renderSuite = (String) renderMethodMap.get(LdpVcV2Constants.RENDER_SUITE); + return renderMethodMap.containsKey(LdpVcV2Constants.TEMPLATE) && LdpVcV2Constants.SVG_MUSTACHE_RENDER_SUITE.equals(renderSuite); + } + + return false; + } + + private ByteArrayInputStream generatePdfUsingSvgTemplate(VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, String dataShareUrl) throws Exception { + try { + // Get the ldp_vc credential and convert to string + String credentialJsonString = objectMapper.writeValueAsString(vcCredentialResponse.getCredential()); + + // Generate the QR code data to embed into the svg for Online Sharing + String qrCodeData = null; + if (QRCodeType.OnlineSharing.equals(issuerDTO.getQr_code_type())) { + PresentationDefinitionDTO presentationDefinitionDTO = presentationService.constructPresentationDefinition(vcCredentialResponse); + String presentationString = objectMapper.writeValueAsString(presentationDefinitionDTO); + qrCodeData = String.format(ovpQRDataPattern, URLEncoder.encode(dataShareUrl, StandardCharsets.UTF_8), URLEncoder.encode(presentationString, StandardCharsets.UTF_8)); + } + + // Generate list of rendered svg strings using InjiVcRenderer + List generatedSvgObjects = injiVcRenderer.generateCredentialDisplayContent( + io.mosip.injivcrenderer.constants.CredentialFormat.LDP_VC, null, credentialJsonString, qrCodeData); + + if (generatedSvgObjects.isEmpty()) { + throw new Exception("No SVG content generated for v2 credential"); + } + + List svgStrings = generatedSvgObjects.stream() + .map(Object::toString) + .map(svgFixerUtil::addMissingOffsetToStopElements) + .toList(); + + log.debug("Fixed {} SVG elements for PDF conversion", svgStrings.size()); + + String base64PdfContent = injiVcRenderer.convertSvgToPdf(svgStrings); + byte[] decodedPdfBytes = Base64URL.from(base64PdfContent).decode(); + return new ByteArrayInputStream(decodedPdfBytes); + } catch (Exception e) { + log.error("Error generating PDF for v2 credential using InjiVcRenderer: {}", e.getMessage(), e); + throw new Exception("Failed to generate PDF for v2 credential: " + e.getMessage(), e); + } + } +} diff --git a/src/main/java/io/mosip/mimoto/util/SvgFixerUtil.java b/src/main/java/io/mosip/mimoto/util/SvgFixerUtil.java new file mode 100644 index 000000000..88b8a6a78 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/SvgFixerUtil.java @@ -0,0 +1,18 @@ +package io.mosip.mimoto.util; + +import org.springframework.stereotype.Component; + +@Component +public class SvgFixerUtil { + + // Adds missing offset attribute to elements in SVG content + public String addMissingOffsetToStopElements(String svgContent) { + if (svgContent == null) return null; + + // Add offset="0" if missing in elements + return svgContent.replaceAll( + "]*offset=)", + " credentialMap = new HashMap<>(); + credentialMap.put(CONTEXT, V2_CONTEXT_URL); + credentialMap.put(RENDER_METHOD, List.of(Map.of(TEMPLATE, "", + RENDER_SUITE, SVG_MUSTACHE_RENDER_SUITE))); + VCCredentialResponse vcCredentialResponse = VCCredentialResponse.builder() + .format("ldp_vc") + .credential(credentialMap) + .build(); + + issuerDTO.setQr_code_type(QRCodeType.EmbeddedVC); + + when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + when(injiVcRenderer.generateCredentialDisplayContent(any(), any(), anyString(), any())) + .thenReturn(List.of("")); + when(svgFixerUtil.addMissingOffsetToStopElements(anyString())).thenAnswer(inv -> inv.getArgument(0)); + + String urlSafeBase64Pdf = "AQID"; + when(injiVcRenderer.convertSvgToPdf(anyList())).thenReturn(urlSafeBase64Pdf); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( + "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, + "https://example.com/share", "", "en"); + assertNotNull(result); + verify(injiVcRenderer).generateCredentialDisplayContent(any(), any(), anyString(), any()); + } + + @Test + void testInjiVcRendererInvokedForLdpVcWithContextListAndTemplate() throws Exception { + Map credentialMap = new HashMap<>(); + credentialMap.put(CONTEXT, List.of(V2_CONTEXT_URL, "https://w3id.org/security/v1")); + credentialMap.put(RENDER_METHOD, List.of(Map.of(TEMPLATE, "", + RENDER_SUITE, SVG_MUSTACHE_RENDER_SUITE))); + + VCCredentialResponse vcCredentialResponse = VCCredentialResponse.builder() + .format("ldp_vc") + .credential(credentialMap) + .build(); + + issuerDTO.setQr_code_type(QRCodeType.OnlineSharing); + + when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + when(injiVcRenderer.generateCredentialDisplayContent(any(), any(), anyString(), any())) + .thenReturn(List.of("")); + when(svgFixerUtil.addMissingOffsetToStopElements(anyString())).thenAnswer(inv -> inv.getArgument(0)); + when(injiVcRenderer.convertSvgToPdf(anyList())).thenReturn("AQID"); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( + "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, + "https://example.com/share", "", "en"); + + assertNotNull(result); + verify(injiVcRenderer).generateCredentialDisplayContent(any(), any(), anyString(), any()); + } + + @Test + void testInjiVcRendererInvokedForLdpVcWhenRenderMethodListWithTemplates() throws Exception { + Map credentialMap = new HashMap<>(); + credentialMap.put(CONTEXT, List.of(V2_CONTEXT_URL)); + credentialMap.put(RENDER_METHOD, List.of( + Map.of( + "type", "TemplateRenderMethod", + RENDER_SUITE, SVG_MUSTACHE_RENDER_SUITE, + TEMPLATE, Map.of("id", "https://certify/rendering-template/5b9c") + ), + Map.of( + "type", "TemplateRenderMethod", + RENDER_SUITE, SVG_MUSTACHE_RENDER_SUITE, + TEMPLATE, Map.of("id", "https://certify/rendering-template/6b9c") + ), + Map.of( + "type", "TemplateRenderMethod", + RENDER_SUITE, SVG_MUSTACHE_RENDER_SUITE, + TEMPLATE, Map.of("id", "https://certify/rendering-template/7b9c") + ) + )); + + VCCredentialResponse vcCredentialResponse = VCCredentialResponse.builder() + .format("ldp_vc") + .credential(credentialMap) + .build(); + + issuerDTO.setQr_code_type(QRCodeType.OnlineSharing); + + when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + when(injiVcRenderer.generateCredentialDisplayContent(any(), any(), anyString(), any())) + .thenReturn(List.of("")); + when(svgFixerUtil.addMissingOffsetToStopElements(anyString())).thenAnswer(inv -> inv.getArgument(0)); + when(injiVcRenderer.convertSvgToPdf(anyList())).thenReturn("AQID"); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( + "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, + "https://example.com/share", "", "en"); + + assertNotNull(result); + verify(injiVcRenderer).generateCredentialDisplayContent(any(), any(), anyString(), any()); + } + + @Test + void testV2ContextNullDisablesSvgRendering() throws Exception { + Map credentialMap = new HashMap<>(); + credentialMap.put(CONTEXT, null); // contextField is null + credentialMap.put(RENDER_METHOD, List.of(Map.of(TEMPLATE, "", RENDER_SUITE, SVG_MUSTACHE_RENDER_SUITE))); + + VCCredentialResponse vc = VCCredentialResponse.builder() + .format("ldp_vc") + .credential(credentialMap) + .build(); + + issuerDTO.setQr_code_type(QRCodeType.OnlineSharing); + + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); + when(credentialFormatHandler.extractCredentialClaims(any())).thenReturn(Map.of("name", "John")); + when(credentialFormatHandler.loadDisplayPropertiesFromWellknown(any(), any(), anyString())).thenReturn(new LinkedHashMap<>()); + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())).thenReturn(""); + when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + when(presentationService.constructPresentationDefinition(any())).thenReturn(new PresentationDefinitionDTO()); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( + "TestCredential", vc, issuerDTO, credentialsSupportedResponse, + "https://example.com/share", "", "en"); + + assertNotNull(result); + verify(injiVcRenderer, never()).generateCredentialDisplayContent(any(), anyString(), anyString(), anyString()); + } + + @Test + void testInjiVcRendererNotInvokedWhenRenderSuiteIsNotSvgMustache() throws Exception { + Map credentialMap = new HashMap<>(); + credentialMap.put(CONTEXT, List.of(V2_CONTEXT_URL)); + credentialMap.put(RENDER_METHOD, Map.of(TEMPLATE, "", RENDER_SUITE, "pdf-mustache")); + + VCCredentialResponse vc = VCCredentialResponse.builder() + .format("ldp_vc") + .credential(credentialMap) + .build(); + + issuerDTO.setQr_code_type(QRCodeType.OnlineSharing); + + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); + when(credentialFormatHandler.extractCredentialClaims(any())).thenReturn(Map.of("name", "John")); + when(credentialFormatHandler.loadDisplayPropertiesFromWellknown(any(), any(), anyString())).thenReturn(new LinkedHashMap<>()); + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())).thenReturn(""); + when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + when(presentationService.constructPresentationDefinition(any())).thenReturn(new PresentationDefinitionDTO()); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( + "TestCredential", vc, issuerDTO, credentialsSupportedResponse, + "https://example.com/share", "", "en"); + + assertNotNull(result); + verify(injiVcRenderer, never()).generateCredentialDisplayContent(any(), anyString(), anyString(), anyString()); + } + + @Test + void testInjiVcRendererNotInvokedForLdpVcWhenV2ContextAbsent() throws Exception { + Map credentialMap = new HashMap<>(); + credentialMap.put(CONTEXT, List.of("https://www.w3.org/ns/credentials/v1")); + credentialMap.put(RENDER_METHOD, List.of(Map.of(TEMPLATE, ""))); + + VCCredentialResponse vcCredentialResponse = VCCredentialResponse.builder() + .format("ldp_vc") + .credential(credentialMap) + .build(); + + issuerDTO.setQr_code_type(QRCodeType.OnlineSharing); + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); + when(credentialFormatHandler.extractCredentialClaims(vcCredentialResponse)).thenReturn(Map.of("name", "John")); + when(credentialFormatHandler.loadDisplayPropertiesFromWellknown(any(), any(), anyString())) + .thenReturn(new LinkedHashMap<>()); + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())).thenReturn(""); + when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + when(presentationService.constructPresentationDefinition(any())).thenReturn(new PresentationDefinitionDTO()); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( + "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, + "https://example.com/share", "", "en"); + + assertNotNull(result); + verify(injiVcRenderer, never()).generateCredentialDisplayContent(any(), anyString(), anyString(), anyString()); + } + + @Test + void testInjiVcRendererNotInvokedForSdJwt() throws Exception { + when(credentialFormatHandlerFactory.getHandler("vc+sd-jwt")).thenReturn(sdJwtCredentialFormatHandler); + String validSdJwt = "eyJ0eXAiOiJ2YytzZC1qd3QiLCJhbGciOiJFUzI1NiJ9.eyJfc2QiOltdLCJuYW1lIjoiSm9obiBEb2UifQ.signature~WyJzYWx0IiwgIm5hbWUiLCAiSm9obiBEb2UiXQ"; + + VCCredentialResponse vcCredentialResponse = VCCredentialResponse.builder() + .format("vc+sd-jwt") + .credential(validSdJwt) + .build(); + + Map extractedClaims = new HashMap<>(); + extractedClaims.put("name", "John Doe"); + when(sdJwtCredentialFormatHandler.extractCredentialClaims(vcCredentialResponse)) + .thenReturn(extractedClaims); + + LinkedHashMap> displayProps = new LinkedHashMap<>(); + displayProps.put("name", Map.of(createDisplayResponse("Name", "en"), "John Doe")); + when(sdJwtCredentialFormatHandler.loadDisplayPropertiesFromWellknown(any(), any(), anyString())) + .thenReturn(displayProps); + + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())) + .thenReturn(""); + when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + when(presentationService.constructPresentationDefinition(any())) + .thenReturn(new PresentationDefinitionDTO()); + + issuerDTO.setQr_code_type(QRCodeType.OnlineSharing); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( + "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, + "https://example.com/share", "", "en"); + + assertNotNull(result); + verify(injiVcRenderer, never()).generateCredentialDisplayContent(any(), anyString(), anyString(), anyString()); + } + + @Test + void testInjiVcRendererNotInvokedForLdpVcWithRenderMethodButNoTemplate() throws Exception { + // Credential with v2 context and renderMethod, but missing "template" + Map credentialMap = new HashMap<>(); + credentialMap.put(CONTEXT, List.of(V2_CONTEXT_URL)); + credentialMap.put(RENDER_METHOD, List.of(Map.of(RENDER_SUITE, SVG_MUSTACHE_RENDER_SUITE))); + + VCCredentialResponse vcCredentialResponse = VCCredentialResponse.builder() + .format("ldp_vc") + .credential(credentialMap) + .build(); + + issuerDTO.setQr_code_type(QRCodeType.OnlineSharing); + + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); + + Map claims = new HashMap<>(); + claims.put("name", "John Doe"); + when(credentialFormatHandler.extractCredentialClaims(vcCredentialResponse)).thenReturn(claims); + + LinkedHashMap> displayProps = new LinkedHashMap<>(); + displayProps.put("name", Map.of(createDisplayResponse("Name", "en"), "John Doe")); + when(credentialFormatHandler.loadDisplayPropertiesFromWellknown(any(), any(), anyString())).thenReturn(displayProps); + + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())).thenReturn(""); + when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + when(presentationService.constructPresentationDefinition(any())).thenReturn(new PresentationDefinitionDTO()); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( + "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, + "https://example.com/share", "", "en"); + + assertNotNull(result); + verify(injiVcRenderer, never()).generateCredentialDisplayContent(any(), anyString(), anyString(), anyString()); + } + + @Test + void testInjiVcRendererNotInvokedForLdpVcWithoutRenderMethod() throws Exception { + Map credentialMap = new HashMap<>(); + credentialMap.put(CONTEXT, List.of(V2_CONTEXT_URL)); + + VCCredentialResponse vcCredentialResponse = VCCredentialResponse.builder() + .format("ldp_vc") + .credential(credentialMap) + .build(); + + issuerDTO.setQr_code_type(QRCodeType.OnlineSharing); + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); + + Map claims = new HashMap<>(); + claims.put("name", "John Doe"); + when(credentialFormatHandler.extractCredentialClaims(vcCredentialResponse)).thenReturn(claims); + + LinkedHashMap> displayProps = new LinkedHashMap<>(); + displayProps.put("name", Map.of(createDisplayResponse("Name", "en"), "John Doe")); + when(credentialFormatHandler.loadDisplayPropertiesFromWellknown(any(), any(), anyString())).thenReturn(displayProps); + + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())).thenReturn(""); + when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + when(presentationService.constructPresentationDefinition(any())).thenReturn(new PresentationDefinitionDTO()); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( + "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, + "https://example.com/share", "", "en"); + + assertNotNull(result); + verify(injiVcRenderer, never()).generateCredentialDisplayContent(any(), anyString(), anyString(), anyString()); + } + + @Test + void testInjiVcRendererNotInvokedForLdpVcWhenOneRenderMethodListEntryMissingTemplate() throws Exception { + Map credentialMap = new HashMap<>(); + credentialMap.put(CONTEXT, List.of(V2_CONTEXT_URL)); + credentialMap.put(RENDER_METHOD, List.of( + Map.of( + "type", "TemplateRenderMethod", + RENDER_SUITE, SVG_MUSTACHE_RENDER_SUITE, + TEMPLATE, Map.of("id", "https://certify/rendering-template/5b9c") + ), + Map.of( + "type", "TemplateRenderMethod", + RENDER_SUITE, SVG_MUSTACHE_RENDER_SUITE + // missing TEMPLATE + ), + Map.of( + "type", "TemplateRenderMethod", + RENDER_SUITE, SVG_MUSTACHE_RENDER_SUITE, + TEMPLATE, Map.of("id", "https://certify/rendering-template/5b8c") + ) + )); + + VCCredentialResponse vcCredentialResponse = VCCredentialResponse.builder() + .format("ldp_vc") + .credential(credentialMap) + .build(); + + issuerDTO.setQr_code_type(QRCodeType.OnlineSharing); + + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); + when(credentialFormatHandler.extractCredentialClaims(vcCredentialResponse)).thenReturn(Map.of("name", "John Doe")); + LinkedHashMap> displayProps = new LinkedHashMap<>(); + displayProps.put("name", Map.of(createDisplayResponse("Name", "en"), "John Doe")); + when(credentialFormatHandler.loadDisplayPropertiesFromWellknown(any(), any(), anyString())).thenReturn(displayProps); + + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())).thenReturn(""); + when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + when(presentationService.constructPresentationDefinition(any())).thenReturn(new PresentationDefinitionDTO()); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( + "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, + "https://example.com/share", "", "en"); + + assertNotNull(result); + verify(injiVcRenderer, never()).generateCredentialDisplayContent(any(), anyString(), anyString(), anyString()); + } + + @Test + void testGeneratePdfForV2CredentialThrowsExceptionWhenRendererReturnsEmptyList() throws Exception { + Map credentialMap = new HashMap<>(); + credentialMap.put(CONTEXT, List.of(V2_CONTEXT_URL)); + credentialMap.put(RENDER_METHOD, List.of(Map.of(TEMPLATE, "", RENDER_SUITE, SVG_MUSTACHE_RENDER_SUITE))); + + VCCredentialResponse vc = VCCredentialResponse.builder() + .format("ldp_vc") + .credential(credentialMap) + .build(); + + issuerDTO.setQr_code_type(QRCodeType.OnlineSharing); + + when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + when(presentationService.constructPresentationDefinition(any())).thenReturn(new PresentationDefinitionDTO()); + when(injiVcRenderer.generateCredentialDisplayContent(any(), any(), anyString(), any())) + .thenReturn(Collections.emptyList()); + + assertThrows(Exception.class, () -> credentialPDFGeneratorService.generatePdfForVerifiableCredential( + "TestCredential", vc, issuerDTO, credentialsSupportedResponse, + "https://example.com/share", "", "en")); + + verify(injiVcRenderer).generateCredentialDisplayContent(any(), any(), anyString(), any()); + } + + @Test + void testGeneratePdfForV2CredentialCatchBlockWhenRendererThrows() throws Exception { + Map credentialMap = new HashMap<>(); + credentialMap.put(CONTEXT, List.of(V2_CONTEXT_URL)); + credentialMap.put(RENDER_METHOD, List.of(Map.of(TEMPLATE, "", RENDER_SUITE, SVG_MUSTACHE_RENDER_SUITE))); + + VCCredentialResponse vc = VCCredentialResponse.builder() + .format("ldp_vc") + .credential(credentialMap) + .build(); + + issuerDTO.setQr_code_type(QRCodeType.OnlineSharing); + + when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + when(presentationService.constructPresentationDefinition(any())).thenReturn(new PresentationDefinitionDTO()); + when(injiVcRenderer.generateCredentialDisplayContent(any(), any(), anyString(), any())) + .thenThrow(new RuntimeException("Renderer failed")); + + assertThrows(Exception.class, () -> credentialPDFGeneratorService.generatePdfForVerifiableCredential( + "TestCredential", vc, issuerDTO, credentialsSupportedResponse, + "https://example.com/share", "", "en")); + } } diff --git a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java index 1a8a6ad93..dd0b2489c 100644 --- a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java @@ -630,4 +630,69 @@ public void testAuthorizePresentationWithJsonProcessingException() throws Except // Tests for rejectVerifier removed - method moved to WalletPresentationService + @Test + public void constructPresentationDefinitionWithRenderMethod() throws Exception{ + VCCredentialResponse vcCredentialResponse = new VCCredentialResponse(); + vcCredentialResponse.setFormat(CredentialFormat.LDP_VC.getFormat()); + + Map template = Map.of( + "id", "https://degree.example/credential-templates/bachelors", + "mediaType", "image/svg+xml", + "digestMultibase", "zQmerWC85Wg6wFl9znFCwYxApG270iEu5h6JqWAPdhyxz2dR" + ); + Map renderMethod = Map.of( + "type", "TemplateRenderMethod", + "renderSuite", "svg-mustache", + "template", template + ); + + VCCredentialProperties credential = new VCCredentialProperties(); + credential.setType(Arrays.asList("VerifiableCredential", "TestCredential")); + credential.setContext("https://www.w3.org/2018/credentials/v2"); + credential.setRenderMethod(renderMethod); + VCCredentialResponseProof proof = new VCCredentialResponseProof(); + proof.setType("Ed25519Signature2020"); + credential.setProof(proof); + + vcCredentialResponse.setCredential(credential); + + when(objectMapper.convertValue(eq(vcCredentialResponse.getCredential()), eq(VCCredentialProperties.class))) + .thenReturn(credential); + + PresentationDefinitionDTO result = presentationService.constructPresentationDefinition(vcCredentialResponse); + + assertNotNull(result); + + ObjectMapper mapper = new ObjectMapper(); + String json = mapper.writeValueAsString(credential); + assertTrue(json.contains("renderMethod")); + } + + @Test + public void constructPresentationDefinitionWithoutRenderMethod() throws Exception { + VCCredentialResponse vcCredentialResponse = new VCCredentialResponse(); + vcCredentialResponse.setFormat(CredentialFormat.LDP_VC.getFormat()); + + VCCredentialProperties credential = new VCCredentialProperties(); + credential.setType(Arrays.asList("VerifiableCredential", "TestCredential")); + credential.setContext("https://www.w3.org/2018/credentials/v2"); + // renderMethod not set + VCCredentialResponseProof proof = new VCCredentialResponseProof(); + proof.setType("Ed25519Signature2020"); + credential.setProof(proof); + + vcCredentialResponse.setCredential(credential); + + when(objectMapper.convertValue(eq(vcCredentialResponse.getCredential()), eq(VCCredentialProperties.class))) + .thenReturn(credential); + + PresentationDefinitionDTO result = presentationService.constructPresentationDefinition(vcCredentialResponse); + + assertNotNull(result); + + //Not mocking the ObjectMapper here to test the actual serialization : renderMethod should be absent + ObjectMapper mapper = new ObjectMapper(); + String json = mapper.writeValueAsString(credential); + assertFalse(json.contains("renderMethod")); + } } \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/util/SvgFixerUtilTest.java b/src/test/java/io/mosip/mimoto/util/SvgFixerUtilTest.java new file mode 100644 index 000000000..7cb3ba3f2 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/util/SvgFixerUtilTest.java @@ -0,0 +1,35 @@ +package io.mosip.mimoto.util; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class SvgFixerUtilTest { + + private final SvgFixerUtil util = new SvgFixerUtil(); + + @Test + void testAddMissingOffsetToStopElements_withMissingOffset() { + String input = ""; + String expected = ""; + Assertions.assertEquals(expected, util.addMissingOffsetToStopElements(input)); + } + + @Test + void testAddMissingOffsetToStopElements_withExistingOffset() { + String input = ""; + String expected = ""; + Assertions.assertEquals(expected, util.addMissingOffsetToStopElements(input)); + } + + @Test + void testAddMissingOffsetToStopElements_multipleStops() { + String input = ""; + String expected = ""; + Assertions.assertEquals(expected, util.addMissingOffsetToStopElements(input)); + } + + @Test + void testAddMissingOffsetToStopElements_nullInput() { + Assertions.assertNull(util.addMissingOffsetToStopElements(null)); + } +} \ No newline at end of file From 84f17905875d16b62f8150026b2f1405a24b9a47 Mon Sep 17 00:00:00 2001 From: Durgesh Konga Date: Wed, 24 Dec 2025 15:37:38 +0530 Subject: [PATCH 806/860] [INJIWEB-1721] - Update readme for deploying Mimoto without datashare (#993) * [INJIWEB-1721] - Update readme for deploying Mimoto without datashare Signed-off-by: Durgesh Konga * [INJIWEB-1721] - Update readme to mention only Mobile wallet Signed-off-by: Durgesh Konga * [INJIWEB-1721] - Update readme to mention only Mobile wallet Signed-off-by: Durgesh Konga * [INJIWEB-1721] - Update readme to mention only Mobile wallet Signed-off-by: Durgesh Konga * [INJIWEB-1721] - Add bash for readme script Signed-off-by: Durgesh Konga * [INJIWEB-1721] - Add bash for readme script Signed-off-by: Durgesh Konga * [INJIWEB-1721] - Update readme to mention only Mobile wallet Signed-off-by: Durgesh Konga * [INJIWEB-1721] - Update country to entity Signed-off-by: Durgesh Konga --------- Signed-off-by: Durgesh Konga --- .talismanrc | 2 ++ deploy/README.md | 32 +++++++++++++++++++++++++++++++- docker-compose/README.md | 10 ++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) diff --git a/.talismanrc b/.talismanrc index cbceaec91..61cfbee4e 100644 --- a/.talismanrc +++ b/.talismanrc @@ -204,4 +204,6 @@ fileignoreconfig: checksum: f533f57817732d29d33338ee67fed3af74a6c3492d2539d0b36152ec6822d9a3 - filename: src/main/java/io/mosip/mimoto/service/impl/WalletPresentationServiceImpl.java checksum: 273142b1d86eeea43034c17265459707c9c487b37c63fe28b48916a44189944f +- filename: deploy/README.md + checksum: 1bef019be00c0eae8714ce8a71a4e33c68aa5e2bfe4a6d7f72eaad35b8dd64a9 version: "" \ No newline at end of file diff --git a/deploy/README.md b/deploy/README.md index b5078258d..a78523c36 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -41,8 +41,38 @@ cd ../partner-onboarder ## Install mimoto and datashare * Execute mimoto install script * Before installing Mimoto, please ensure that the database host and port are correctly configured in the [values.yaml](mimoto/values.yaml) file. -* Datashare will be deployed as part of the Mimoto installation. +* **Datashare Deployment:** + * If you are using **Inji Web Wallet**, datashare will be deployed as part of the Mimoto installation. + * If you are using only **Inji Mobile Wallet**, datashare deployment is not required. * Note: During the installation of Mimoto and Datashare, ensure that the active_profile_env parameter in the ConfigMap of the config-server-share (in the injiweb namespace) is set to: default,inji-default,standalone + +### To Deploy Mimoto WITHOUT Datashare +If you are using only Inji Mobile Wallet and do not need datashare, follow these steps: + +1. **Edit the install.sh script:** + - Open `deploy/mimoto/install.sh` + - Locate the datashare deployment section (around line 61-66) + - Comment out or remove the following lines: + ```bash + INJI_DATASHARE_HOST=$(kubectl get cm inji-stack-config -o jsonpath={.data.inji-datashare-host}) + echo "Installing datashare" + helm -n $NS install datashare-inji mosip/datashare \ + -f datashare-values.yaml \ + --version $DATASHARE_CHART_VERSION + ``` + +2. **Configure Mimoto for Mobile Wallet only:** + - Ensure that `qr_code_type` is set to `"EmbeddedVC"` in your `mimoto-issuers-config.json` file + - This embeds the entire Verifiable Credential in the QR code. + +3. **Run the modified install script:** +```bash +cd ../deploy/mimoto +./install.sh + ``` + +### To Deploy Mimoto WITH Datashare (Default) +If you are using Inji Web Wallet or need datashare for online verification: ``` cd ../deploy/mimoto ./install.sh diff --git a/docker-compose/README.md b/docker-compose/README.md index 5cf1819ce..2bee9adba 100644 --- a/docker-compose/README.md +++ b/docker-compose/README.md @@ -196,3 +196,13 @@ To bind an Android or iOS wallet using the e-signet service via Mimoto, ensure t Note: - Replace mosipbox.public.url, mosip.api.public.url with your public accessible domain. For dev or local env [ngrok](https://ngrok.com/docs/getting-started/) is recommended. + +### Deploying Mimoto Without Datashare + +If an entity (Ex: Country, Organization) uses only Mobile wallet, deploying datashare and its dependent services is not required. This also eliminates the need for pulling the datashare and minio images from Docker and running them. + +To deploy Mimoto without datashare: +1. Remove the datashare dependency from `depends_on` under `mimoto-service` in the `docker-compose.yml` file. +2. Update the services section by removing the `datashare` and `minio` services from the `docker-compose.yml` file. + +**Note:** When using only Inji Mobile Wallet, ensure that the `qr_code_type` field in the Mimoto Issuers Configuration (`mimoto-issuers-config.json`) is set to `"EmbeddedVC"` for all the issuers. From 13a859b1d4aa91fda026e6834303b96956037605 Mon Sep 17 00:00:00 2001 From: Durgesh Konga Date: Wed, 21 Jan 2026 20:53:25 +0530 Subject: [PATCH 807/860] [INJIWEB-1621] - Refractor: consolidate KeyGeneration, JWTGeneration, Proof Signing Key utilities using factory pattern (#994) * [INJIWEB-1621] - Refractor: consolidate KeyGeneration, JWTGeneration, proof Signing Key utilities using factory pattern - Merge KeyGenerationUtil and JwtGeneratorUtil into SigningKeyUtil - Implement Strategy pattern with algorithm-specific handlers (RS256, ES256, ES256K, ED25519) - Add SigningAlgorithmHandlerFactory for handler management - Create BouncyCastleProviderUtil for centralized provider access - Add comprehensive test suite for all handlers and utilities - Remove deprecated ProofSigningKeyFactory, KeyGenerationUtil, and JwtGeneratorUtil Signed-off-by: Durgesh Konga * [INJIWEB-1621] - Reuse existing BouncyCastle provider instance from Security Check Security.getProvider() before creating new BouncyCastleProvider to ensure BC_PROVIDER matches the registered provider instance. Make class final and add private constructor for utility class pattern. Signed-off-by: Durgesh Konga * [INJIWEB-1621] refactor: centralize BouncyCastle provider access via utility class - Add BouncyCastleProviderUtil for singleton provider instance - Add SigningAlgorithmConstants for centralized algorithm constants - Update handlers to use utility instead of direct Security.getProvider() - Add Ed25519AlgorithmHandler and update tests Signed-off-by: Durgesh Konga * [INJIWEB-1621] - Deleted redundant class file Signed-off-by: Durgesh Konga * [INJIWEB-1621] - Deleted redundant class file Signed-off-by: Durgesh Konga * [INJIWEB-1621] - test: add thread safety tests for BouncyCastleProviderUtil Signed-off-by: Durgesh Konga * [INJIWEB-1621] - Remove Thread safe JUnit test cases Signed-off-by: Durgesh Konga * [INJIWEB-1621] - Merge test cases into comprehensive single test case Signed-off-by: Durgesh Konga --------- Signed-off-by: Durgesh Konga --- .talismanrc | 42 +++- .../constant/SigningAlgorithmConstants.java | 20 ++ .../impl/CredentialRequestServiceImpl.java | 9 +- .../impl/KeyPairRetrievalServiceImpl.java | 4 +- .../impl/WalletPresentationServiceImpl.java | 6 +- .../mosip/mimoto/util/JwtGeneratorUtil.java | 147 -------------- .../mosip/mimoto/util/KeyGenerationUtil.java | 94 --------- .../mimoto/util/ProofSigningKeyFactory.java | 43 ---- .../io/mosip/mimoto/util/SigningKeyUtil.java | 184 ++++++++++++++++++ .../java/io/mosip/mimoto/util/WalletUtil.java | 4 +- .../factory/BouncyCastleProviderUtil.java | 33 ++++ .../util/factory/ES256AlgorithmHandler.java | 52 +++++ .../util/factory/ES256KAlgorithmHandler.java | 55 ++++++ .../util/factory/Ed25519AlgorithmHandler.java | 89 +++++++++ .../util/factory/RS256AlgorithmHandler.java | 50 +++++ .../util/factory/SigningAlgorithmHandler.java | 30 +++ .../SigningAlgorithmHandlerFactory.java | 42 ++++ .../service/CredentialRequestServiceTest.java | 10 +- .../mimoto/service/KeyPairServiceTest.java | 38 ++-- .../WalletPresentationServiceTest.java | 100 +++++----- .../util/EncryptionDecryptionUtilTest.java | 8 +- .../mimoto/util/JwtGeneratorUtilTest.java | 133 ------------- .../mimoto/util/KeyGenerationUtilTest.java | 64 ------ .../mosip/mimoto/util/SigningKeyUtilTest.java | 173 ++++++++++++++++ .../io/mosip/mimoto/util/WalletUtilTest.java | 10 +- .../factory/BouncyCastleProviderUtilTest.java | 38 ++++ .../factory/ES256AlgorithmHandlerTest.java | 78 ++++++++ .../factory/ES256KAlgorithmHandlerTest.java | 78 ++++++++ .../factory/Ed25519AlgorithmHandlerTest.java | 66 +++++++ .../factory/RS256AlgorithmHandlerTest.java | 78 ++++++++ .../SigningAlgorithmHandlerFactoryTest.java | 56 ++++++ 31 files changed, 1256 insertions(+), 578 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/constant/SigningAlgorithmConstants.java delete mode 100644 src/main/java/io/mosip/mimoto/util/JwtGeneratorUtil.java delete mode 100644 src/main/java/io/mosip/mimoto/util/KeyGenerationUtil.java delete mode 100644 src/main/java/io/mosip/mimoto/util/ProofSigningKeyFactory.java create mode 100644 src/main/java/io/mosip/mimoto/util/SigningKeyUtil.java create mode 100644 src/main/java/io/mosip/mimoto/util/factory/BouncyCastleProviderUtil.java create mode 100644 src/main/java/io/mosip/mimoto/util/factory/ES256AlgorithmHandler.java create mode 100644 src/main/java/io/mosip/mimoto/util/factory/ES256KAlgorithmHandler.java create mode 100644 src/main/java/io/mosip/mimoto/util/factory/Ed25519AlgorithmHandler.java create mode 100644 src/main/java/io/mosip/mimoto/util/factory/RS256AlgorithmHandler.java create mode 100644 src/main/java/io/mosip/mimoto/util/factory/SigningAlgorithmHandler.java create mode 100644 src/main/java/io/mosip/mimoto/util/factory/SigningAlgorithmHandlerFactory.java delete mode 100644 src/test/java/io/mosip/mimoto/util/JwtGeneratorUtilTest.java delete mode 100644 src/test/java/io/mosip/mimoto/util/KeyGenerationUtilTest.java create mode 100644 src/test/java/io/mosip/mimoto/util/SigningKeyUtilTest.java create mode 100644 src/test/java/io/mosip/mimoto/util/factory/BouncyCastleProviderUtilTest.java create mode 100644 src/test/java/io/mosip/mimoto/util/factory/ES256AlgorithmHandlerTest.java create mode 100644 src/test/java/io/mosip/mimoto/util/factory/ES256KAlgorithmHandlerTest.java create mode 100644 src/test/java/io/mosip/mimoto/util/factory/Ed25519AlgorithmHandlerTest.java create mode 100644 src/test/java/io/mosip/mimoto/util/factory/RS256AlgorithmHandlerTest.java create mode 100644 src/test/java/io/mosip/mimoto/util/factory/SigningAlgorithmHandlerFactoryTest.java diff --git a/.talismanrc b/.talismanrc index 61cfbee4e..8c49b081a 100644 --- a/.talismanrc +++ b/.talismanrc @@ -102,7 +102,7 @@ fileignoreconfig: - filename: src/main/java/io/mosip/mimoto/service/WalletStatusService.java checksum: 3858fd0ef51e9c4fe372e88471a84eff8a68523297e0e20c52f498b127d03459 - filename: src/main/java/io/mosip/mimoto/util/WalletUtil.java - checksum: a03a059bb991709916495ce737cff2303cb99c2d404e23ce45a43b7365e3409c + checksum: 08c3c2efda65f3d8eef7b80dfa4ba6dc54040f7ece28a4a97dc9c1dc30bcd133 - filename: docs/WalletUnlockProcess.md checksum: d172beb5aeef1037d70d2f83f034e6ec5e4ea69c6150ec6a25c9139c799b7879 - filename: docs/api-documentation-openapi.json @@ -110,9 +110,9 @@ fileignoreconfig: - filename: src/main/java/io/mosip/mimoto/util/JwtGeneratorUtil.java checksum: c8533dd38f79879119ba2895afca75d60e9704d5a0df4a0e79bc3b9292bd0d38 - filename: src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java - checksum: e149260fd0607baad68daa20d8d14b320951497e932e13e6e148045673cd6257 + checksum: 389b2afec7b591e4566badd8612877e828dde5ecfa36c7363610ed54d6b45cd9 - filename: src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java - checksum: c669189f60e8fa5f0cb47d3c7cbb4ab34d87afbb6fb4de65b7eb06c691a41034 + checksum: 49411e4e7f19c4bcbe42647efc4969cdcbd79d2058cc1d449ab53723338d7b2b - filename: src/main/java/io/mosip/mimoto/constant/SigningAlgorithm.java checksum: fcb462b4baec6db1aa48c16fad923dc7a20407aa072efeb3879c236e7a4d74fe - filename: api-test/src/main/resources/config/IDRepo.properties @@ -185,7 +185,7 @@ fileignoreconfig: - filename: src/test/java/io/mosip/mimoto/service/PresentationSubmissionServiceTest.java checksum: 42154b3c9b9b392ad530d6edc5bb58bfa46a8f55ff744e50ab8ab1880a325bee - filename: src/test/java/io/mosip/mimoto/service/KeyPairServiceTest.java - checksum: fbc153d7259000e237268025c0bef540fb1f76259901d2cc633adf81e251a450 + checksum: 3619f4af5a2da5319f6ee3e6c8bdf0491347987ea61e70a09abb58c355b67a6d - filename: src/main/java/io/mosip/mimoto/service/impl/PresentationActionServiceImpl.java checksum: 13f3da2b60a6319b1f48d5a98a726f5cad571865762626a06b432061097dafe3 - filename: src/test/java/io/mosip/mimoto/service/PresentationActionServiceTest.java @@ -199,11 +199,41 @@ fileignoreconfig: - filename: src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java checksum: 34db30e6de4ea8e9eb939b584293284a5aef702d681116185467103669c0604a - filename: src/test/java/io/mosip/mimoto/service/WalletPresentationServiceTest.java - checksum: 85c68b90c7aa05655dbb2ef95ab20fe21c59c0f98a817be6766c31fde82475ae + checksum: 00dc10312bfc944ea19edc1656bb1152d3fa30de1bb1152b693d1e6695d1f0fb - filename: src/main/java/io/mosip/mimoto/service/WalletPresentationService.java checksum: f533f57817732d29d33338ee67fed3af74a6c3492d2539d0b36152ec6822d9a3 - filename: src/main/java/io/mosip/mimoto/service/impl/WalletPresentationServiceImpl.java - checksum: 273142b1d86eeea43034c17265459707c9c487b37c63fe28b48916a44189944f + checksum: 00c76b27e181836f7d94cb52567575d4dd10ce1bb519624e9e42a86cb73a02e3 - filename: deploy/README.md checksum: 1bef019be00c0eae8714ce8a71a4e33c68aa5e2bfe4a6d7f72eaad35b8dd64a9 +- filename: src/main/java/io/mosip/mimoto/service/impl/KeyPairRetrievalServiceImpl.java + checksum: 5245e749ca703d7bb854242465b40d97cba96a6ff3b6b93e867fbece062d0eb0 +- filename: src/test/java/io/mosip/mimoto/util/EncryptionDecryptionUtilTest.java + checksum: a5d347002074c6d97bbe5a95f6516cb09116854e5fdfc9eb274e510edf30125a +- filename: src/main/java/io/mosip/mimoto/util/factory/ES256AlgorithmHandler.java + checksum: b194879e2a8d12952a7efa85cb019293c319280f1a3c3bfcb7adf81358b2d784 +- filename: src/test/java/io/mosip/mimoto/util/factory/ES256AlgorithmHandlerTest.java + checksum: 74b1127faa64075bc7061217d8c364199fe4fef699f92cddf9e25db9560e8624 +- filename: src/main/java/io/mosip/mimoto/util/factory/RS256AlgorithmHandler.java + checksum: 97b9c30b2297a1eb23818e53a6b49488d086a8f91e8982752c74b3fd7001bcf4 +- filename: src/main/java/io/mosip/mimoto/util/factory/ES256KAlgorithmHandler.java + checksum: 604f5ae8f9c4598eac79141bdcf0ce63cb73a691a28c73d7d860206149f489fb +- filename: src/test/java/io/mosip/mimoto/util/WalletUtilTest.java + checksum: 9df128c2fe0e625489acb99dfc3ddcb16b5afd484569d7b28f3fa1f221edefc8 +- filename: src/main/java/io/mosip/mimoto/util/factory/SigningAlgorithmHandler.java + checksum: 88414c683276784f85339f36f57a6d5195c247a0ff21af238e8c20d9448bee9f +- filename: src/test/java/io/mosip/mimoto/util/factory/RS256AlgorithmHandlerTest.java + checksum: 6cc906f471b7191030392e474c52bd8a79f0f550c88a5b4c0c50aef5ff09c75d +- filename: src/main/java/io/mosip/mimoto/util/factory/ED25519AlgorithmHandler.java + checksum: b13332cccf2ad113fba71436831d764133082ecdcc343143486b230405317888 +- filename: src/test/java/io/mosip/mimoto/util/factory/ED25519AlgorithmHandlerTest.java + checksum: 7ac8b874b2c1f3d440bdfdb3de0fc4613cf3424924363642664559ad57b8f02f +- filename: src/test/java/io/mosip/mimoto/util/factory/ES256KAlgorithmHandlerTest.java + checksum: bf9140761defe9061b885c1ade3d120b4835df160ddf2fea0f790acb4801f221 +- filename: src/main/java/io/mosip/mimoto/util/SigningKeyUtil.java + checksum: b5eec9b76f972f685cf22002360d81dd55ea8a798e2d8b9a6f4fb382fa10b021 +- filename: src/test/java/io/mosip/mimoto/util/SigningKeyUtilTest.java + checksum: 561e00d1163216122eef55a10a018ce8f9a96fa2f26f9247797d514482a7f259 +- filename: src/main/java/io/mosip/mimoto/util/factory/Ed25519AlgorithmHandler.java + checksum: 6d9332df2edfc765ab45c8e985571bb5851c0da680afdc19becbc1e60362df20 version: "" \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/constant/SigningAlgorithmConstants.java b/src/main/java/io/mosip/mimoto/constant/SigningAlgorithmConstants.java new file mode 100644 index 000000000..cfb0b77ca --- /dev/null +++ b/src/main/java/io/mosip/mimoto/constant/SigningAlgorithmConstants.java @@ -0,0 +1,20 @@ +package io.mosip.mimoto.constant; + +public final class SigningAlgorithmConstants { + + // Algorithm Names + public static final String RSA = "RSA"; + public static final String EC = "EC"; + public static final String ED25519 = "Ed25519"; + public static final String AES = "AES"; + // EC curve names (JCA) + public static final String CURVE_SECP256K1 = "secp256k1"; + public static final String CURVE_SECP256R1 = "secp256r1"; + + // Provider Names + public static final String BC_PROVIDER = "BC"; + + private SigningAlgorithmConstants() { + + } +} diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java index 6ee39f423..d0135c197 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java @@ -7,8 +7,7 @@ import io.mosip.mimoto.service.CredentialFormatHandlerFactory; import io.mosip.mimoto.service.CredentialRequestService; import io.mosip.mimoto.service.KeyPairRetrievalService; -import io.mosip.mimoto.util.JwtGeneratorUtil; -import io.mosip.mimoto.util.KeyGenerationUtil; +import io.mosip.mimoto.util.SigningKeyUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -56,9 +55,9 @@ public VCCredentialRequest buildRequest(IssuerDTO issuerDTO, if (isLoginFlow) { jwt = generateJwtUsingDBKeys(walletId, base64EncodedWalletKey, signingAlgorithm, wellKnownResponse, issuerDTO, cNonce); } else { - KeyPair keyPair = KeyGenerationUtil.generateKeyPair(signingAlgorithm); + KeyPair keyPair = SigningKeyUtil.generateKeyPair(signingAlgorithm); log.debug("Generated KeyPair for signing signingAlgorithm: {}", signingAlgorithm); - jwt = JwtGeneratorUtil.generateJwt(signingAlgorithm, wellKnownResponse.getCredentialIssuer(), issuerDTO.getClient_id(), cNonce, keyPair); + jwt = SigningKeyUtil.generateJwt(signingAlgorithm, wellKnownResponse.getCredentialIssuer(), issuerDTO.getClient_id(), cNonce, keyPair); } String format = credentialsSupportedResponse.getFormat(); @@ -111,7 +110,7 @@ private String generateJwtUsingDBKeys(String walletId, KeyPair keyPair = keyPairService.getKeyPairFromDB(walletId, base64EncodedWalletKey, signingAlgorithm); - return JwtGeneratorUtil.generateJwt(signingAlgorithm, + return SigningKeyUtil.generateJwt(signingAlgorithm, wellKnownResponse.getCredentialIssuer(), issuerDTO.getClient_id(), cNonce, diff --git a/src/main/java/io/mosip/mimoto/service/impl/KeyPairRetrievalServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/KeyPairRetrievalServiceImpl.java index 0c3630ead..b95efa776 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/KeyPairRetrievalServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/KeyPairRetrievalServiceImpl.java @@ -7,7 +7,7 @@ import io.mosip.mimoto.repository.ProofSigningKeyRepository; import io.mosip.mimoto.service.KeyPairRetrievalService; import io.mosip.mimoto.util.EncryptionDecryptionUtil; -import io.mosip.mimoto.util.KeyGenerationUtil; +import io.mosip.mimoto.util.SigningKeyUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -74,7 +74,7 @@ public KeyPair getKeyPairFromDB(String walletId, String base64EncodedWalletKey, // Step 5: Generate KeyPair from stored keys KeyPair keyPair; try { - keyPair = KeyGenerationUtil.getKeyPairFromDBStoredKeys(signingAlgorithm, publicKeyBytes, privateKeyInBytes); + keyPair = SigningKeyUtil.generateKeyPair(signingAlgorithm, publicKeyBytes, privateKeyInBytes); } catch (Exception e) { log.error("Failed to generate KeyPair for signing algorithm: {} for walletId: {}", signingAlgorithm, walletId, e); throw new KeyGenerationException("KEY_GENERATION_FAILED", "Failed to generate KeyPair for algorithm: " + signingAlgorithm, e); diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletPresentationServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletPresentationServiceImpl.java index 08b766e2c..92d02188a 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletPresentationServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletPresentationServiceImpl.java @@ -23,7 +23,7 @@ import io.mosip.mimoto.service.VerifierService; import io.mosip.mimoto.service.WalletPresentationService; import io.mosip.mimoto.util.EncryptionDecryptionUtil; -import io.mosip.mimoto.util.JwtGeneratorUtil; +import io.mosip.mimoto.util.SigningKeyUtil; import io.mosip.mimoto.util.Utilities; import io.mosip.mimoto.util.UrlParameterUtils; import io.mosip.openID4VP.OpenID4VP; @@ -256,11 +256,11 @@ public SubmitPresentationResponseDTO submitPresentation(VerifiablePresentationSe // Use configurable signing algorithm SigningAlgorithm signingAlgorithm = SigningAlgorithm.valueOf(DEFAULT_SIGNING_ALGORITHM_NAME); KeyPair keyPair = keyPairService.getKeyPairFromDB(walletId, base64Key, signingAlgorithm); - JWK jwk = JwtGeneratorUtil.generateJwk(signingAlgorithm, keyPair); + JWK jwk = SigningKeyUtil.generateJwk(signingAlgorithm, keyPair); Map unsignedVPToken = constructUnsignedVPToken(openID4VP, selectedCredentials, jwk); // Step 3: Sign token using user's private key - JWSSigner jwsSigner = JwtGeneratorUtil.createSigner(signingAlgorithm, jwk); + JWSSigner jwsSigner = SigningKeyUtil.createSigner(signingAlgorithm, jwk); Map vpTokenSigningResults = signVPToken(unsignedVPToken, jwsSigner); // Step 4: Share verifiable presentation with verifier using OpenID4VP JAR diff --git a/src/main/java/io/mosip/mimoto/util/JwtGeneratorUtil.java b/src/main/java/io/mosip/mimoto/util/JwtGeneratorUtil.java deleted file mode 100644 index a22db6551..000000000 --- a/src/main/java/io/mosip/mimoto/util/JwtGeneratorUtil.java +++ /dev/null @@ -1,147 +0,0 @@ -package io.mosip.mimoto.util; - -import com.nimbusds.jose.*; -import com.nimbusds.jose.crypto.*; -import com.nimbusds.jose.jca.JCAContext; -import com.nimbusds.jose.jwk.*; -import com.nimbusds.jose.jwk.ECKey; -import com.nimbusds.jose.jwk.RSAKey; -import com.nimbusds.jwt.*; -import com.nimbusds.jose.util.Base64URL; -import io.mosip.mimoto.constant.SigningAlgorithm; -import lombok.extern.slf4j.Slf4j; -import org.bouncycastle.jce.provider.BouncyCastleProvider; - -import java.security.*; -import java.security.interfaces.*; -import java.util.*; -import java.util.Arrays; - - -@Slf4j -public class JwtGeneratorUtil { - - private static final Provider BC_PROVIDER = new BouncyCastleProvider(); - - static { - if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null) { - Security.addProvider(BC_PROVIDER); - } - } - - public static String generateJwt(SigningAlgorithm signingAlgorithm, String audience, String clientId, String cNonce, KeyPair keyPair) throws Exception { - JWK jwk = generateJwk(signingAlgorithm, keyPair); - JWSSigner signer = createSigner(signingAlgorithm, jwk); - - JWTClaimsSet claimsSet = createClaims(clientId, audience, cNonce); - JWSHeader header = new JWSHeader.Builder(signingAlgorithm.getJWSAlgorithm()) - .type(new JOSEObjectType("openid4vci-proof+jwt")) - .jwk(jwk.toPublicJWK()) - .build(); - - SignedJWT signedJWT = new SignedJWT(header, claimsSet); - signedJWT.sign(signer); - return signedJWT.serialize(); - } - - private static JWTClaimsSet createClaims(String clientId, String audience, String cNonce) { - long nowSeconds = System.currentTimeMillis() / 1000; - Date issuedAt = new Date(nowSeconds * 1000); - Date expiresAt = new Date((nowSeconds + 18000) * 1000); - - return new JWTClaimsSet.Builder() - .subject(clientId) - .audience(audience) - .issuer(clientId) - .issueTime(issuedAt) - .expirationTime(expiresAt) - .claim("nonce", cNonce) - .build(); - } - - - public static JWK generateJwk(SigningAlgorithm algorithm, KeyPair keyPair) { - PublicKey publicKey = keyPair.getPublic(); - PrivateKey privateKey = keyPair.getPrivate(); - - return switch (algorithm) { - case RS256 -> new RSAKey.Builder((RSAPublicKey) publicKey) - .privateKey((RSAPrivateKey) privateKey) - .algorithm(JWSAlgorithm.RS256) - .keyUse(KeyUse.SIGNATURE) - .build(); - - case ES256 -> new ECKey.Builder(Curve.P_256, (ECPublicKey) publicKey) - .privateKey((ECPrivateKey) privateKey) - .algorithm(JWSAlgorithm.ES256) - .keyUse(KeyUse.SIGNATURE) - .build(); - - case ES256K -> new ECKey.Builder(Curve.SECP256K1, (ECPublicKey) publicKey) - .privateKey((ECPrivateKey) privateKey) - .algorithm(JWSAlgorithm.ES256K) - .keyUse(KeyUse.SIGNATURE) - .build(); - - case ED25519 -> { - EdECPublicKey edECPublicKey = (EdECPublicKey) publicKey; - EdECPrivateKey edECPrivateKey = (EdECPrivateKey) privateKey; - - byte[] x = Arrays.copyOfRange(edECPublicKey.getEncoded(), edECPublicKey.getEncoded().length - 32, edECPublicKey.getEncoded().length); - byte[] d = Arrays.copyOfRange(edECPrivateKey.getEncoded(), edECPrivateKey.getEncoded().length - 32, edECPrivateKey.getEncoded().length); - - yield new OctetKeyPair.Builder(Curve.Ed25519, Base64URL.encode(x)) - .d(Base64URL.encode(d)) - .algorithm(JWSAlgorithm.EdDSA) - .keyUse(KeyUse.SIGNATURE) - .build(); - } - }; - } - - public static JWSSigner createSigner(SigningAlgorithm algorithm, JWK jwk) throws JOSEException { - return switch (algorithm) { - case RS256 -> { - RSASSASigner signer = new RSASSASigner((RSAKey) jwk); - signer.getJCAContext().setProvider(BC_PROVIDER); - yield signer; - } - case ES256, ES256K -> { - ECDSASigner signer = new ECDSASigner((ECKey) jwk); - signer.getJCAContext().setProvider(BC_PROVIDER); - yield signer; - } - case ED25519 -> createEd25519Signer((OctetKeyPair) jwk); - }; - } - - private static JWSSigner createEd25519Signer(OctetKeyPair jwk) { - byte[] privateKeyBytes = jwk.getD().decode(); - return new JWSSigner() { - private final JCAContext jcaContext = new JCAContext(); - - @Override - public Base64URL sign(JWSHeader header, byte[] input) throws JOSEException { - try { - var signer = new org.bouncycastle.crypto.signers.Ed25519Signer(); - signer.init(true, new org.bouncycastle.crypto.params.Ed25519PrivateKeyParameters(privateKeyBytes, 0)); - signer.update(input, 0, input.length); - return Base64URL.encode(signer.generateSignature()); - } catch (Exception e) { - throw new JOSEException("Ed25519 signing failed", e); - } - } - - @Override - public Set supportedJWSAlgorithms() { - return Collections.singleton(JWSAlgorithm.Ed25519); - } - - @Override - public JCAContext getJCAContext() { - return jcaContext; - } - }; - } -} - diff --git a/src/main/java/io/mosip/mimoto/util/KeyGenerationUtil.java b/src/main/java/io/mosip/mimoto/util/KeyGenerationUtil.java deleted file mode 100644 index 115411b9d..000000000 --- a/src/main/java/io/mosip/mimoto/util/KeyGenerationUtil.java +++ /dev/null @@ -1,94 +0,0 @@ -package io.mosip.mimoto.util; - -import io.mosip.mimoto.exception.KeyGenerationException; -import io.mosip.mimoto.constant.SigningAlgorithm; -import org.bouncycastle.jce.provider.BouncyCastleProvider; - -import javax.crypto.KeyGenerator; -import javax.crypto.SecretKey; -import java.security.*; -import java.security.spec.ECGenParameterSpec; -import java.security.spec.PKCS8EncodedKeySpec; -import java.security.spec.X509EncodedKeySpec; - -import static io.mosip.mimoto.exception.ErrorConstants.ENCRYPTION_FAILED; - -public class KeyGenerationUtil { - - static { - if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null) { - Security.addProvider(new BouncyCastleProvider()); - } - } - - /** - * Generates a key pair for the given algorithm. - * - * @param algorithm The algorithm to use (e.g., "RS256", "ES256", "ES256K", "Ed25519"). - * @return KeyPair object. - * @throws NoSuchAlgorithmException - * @throws InvalidAlgorithmParameterException - * @throws NoSuchProviderException - */ - public static KeyPair generateKeyPair(SigningAlgorithm algorithm) throws NoSuchAlgorithmException, InvalidAlgorithmParameterException, NoSuchProviderException { - KeyPairGenerator keyPairGenerator = null; - - switch (algorithm) { - case RS256: - keyPairGenerator = KeyPairGenerator.getInstance("RSA"); - keyPairGenerator.initialize(2048); - break; - case ES256: - keyPairGenerator = KeyPairGenerator.getInstance("EC"); - ECGenParameterSpec ecGenParameterSpec = new ECGenParameterSpec("secp256r1"); - keyPairGenerator.initialize(ecGenParameterSpec); - break; - case ES256K: - keyPairGenerator = KeyPairGenerator.getInstance("EC", "BC"); - ECGenParameterSpec ecGenParameterSpecK = new ECGenParameterSpec("secp256k1"); - keyPairGenerator.initialize(ecGenParameterSpecK); - break; - case ED25519: - keyPairGenerator = KeyPairGenerator.getInstance("Ed25519"); - break; - } - - if (keyPairGenerator == null) { - throw new IllegalArgumentException("Unsupported algorithm: " + algorithm); - } - - return keyPairGenerator.generateKeyPair(); - } - - - public static KeyPair getKeyPairFromDBStoredKeys(SigningAlgorithm algorithm, byte[] publicKeyBytes, byte[] privateKeyBytes) throws Exception { - KeyFactory keyFactory = switch (algorithm) { - case ES256K -> KeyFactory.getInstance(algorithm.getKeyFactoryAlgorithm(), "BC"); - default -> KeyFactory.getInstance(algorithm.getKeyFactoryAlgorithm()); - }; - - PublicKey publicKey = keyFactory.generatePublic(new X509EncodedKeySpec(publicKeyBytes)); - PrivateKey privateKey = keyFactory.generatePrivate(new PKCS8EncodedKeySpec(privateKeyBytes)); - - return new KeyPair(publicKey, privateKey); - } - - - /** - * Generates a secret key for the given algorithm and key size. - * - * @param algorithm The algorithm to use (e.g., "AES"). - * @param keysize The key size in bits. - * @return SecretKey object. - */ - public static SecretKey generateEncryptionKey(String algorithm, int keysize) { - KeyGenerator keyGenerator = null; - try { - keyGenerator = KeyGenerator.getInstance(algorithm); - } catch (NoSuchAlgorithmException e) { - throw new KeyGenerationException(ENCRYPTION_FAILED.getErrorCode(), ENCRYPTION_FAILED.getErrorMessage(), e); - } - keyGenerator.init(keysize); - return keyGenerator.generateKey(); - } -} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/util/ProofSigningKeyFactory.java b/src/main/java/io/mosip/mimoto/util/ProofSigningKeyFactory.java deleted file mode 100644 index afddfe964..000000000 --- a/src/main/java/io/mosip/mimoto/util/ProofSigningKeyFactory.java +++ /dev/null @@ -1,43 +0,0 @@ -package io.mosip.mimoto.util; - -import io.mosip.mimoto.model.KeyMetadata; -import io.mosip.mimoto.model.ProofSigningKey; -import io.mosip.mimoto.exception.KeyGenerationException; -import io.mosip.mimoto.constant.SigningAlgorithm; -import lombok.extern.slf4j.Slf4j; - -import java.security.InvalidAlgorithmParameterException; -import java.security.KeyPair; -import java.security.NoSuchAlgorithmException; -import java.security.NoSuchProviderException; -import java.time.Instant; -import java.util.Base64; -import java.util.UUID; - -import static io.mosip.mimoto.exception.ErrorConstants.ENCRYPTION_FAILED; - -@Slf4j -public class ProofSigningKeyFactory { - - public static ProofSigningKey createProofSigningKey(SigningAlgorithm algorithm) { - try { - KeyPair keyPair = KeyGenerationUtil.generateKeyPair(algorithm); - - KeyMetadata keyMetadata = new KeyMetadata(); - keyMetadata.setAlgorithmName(algorithm.name()); - - ProofSigningKey proofSigningKey = new ProofSigningKey(); - proofSigningKey.setId(UUID.randomUUID().toString()); - proofSigningKey.setPublicKey(Base64.getEncoder().encodeToString(keyPair.getPublic().getEncoded())); - proofSigningKey.setSecretKey(keyPair.getPrivate()); - proofSigningKey.setKeyMetadata(keyMetadata); - proofSigningKey.setCreatedAt(Instant.now()); - proofSigningKey.setUpdatedAt(Instant.now()); - - return proofSigningKey; - } catch (NoSuchAlgorithmException | InvalidAlgorithmParameterException | NoSuchProviderException e) { - log.error("Error while generating key",e); - throw new KeyGenerationException(ENCRYPTION_FAILED.getErrorCode(), "Failed to generate proof signing key for algorithm: " + algorithm); - } - } -} diff --git a/src/main/java/io/mosip/mimoto/util/SigningKeyUtil.java b/src/main/java/io/mosip/mimoto/util/SigningKeyUtil.java new file mode 100644 index 000000000..be367c015 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/SigningKeyUtil.java @@ -0,0 +1,184 @@ +package io.mosip.mimoto.util; + +import com.nimbusds.jose.*; +import com.nimbusds.jose.jwk.JWK; +import com.nimbusds.jwt.*; +import io.mosip.mimoto.constant.SigningAlgorithm; +import io.mosip.mimoto.exception.KeyGenerationException; +import io.mosip.mimoto.util.factory.SigningAlgorithmHandler; +import io.mosip.mimoto.util.factory.SigningAlgorithmHandlerFactory; +import lombok.extern.slf4j.Slf4j; + +import javax.crypto.KeyGenerator; +import javax.crypto.SecretKey; +import java.security.*; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.PKCS8EncodedKeySpec; +import java.security.spec.X509EncodedKeySpec; +import java.util.Date; + +import io.mosip.mimoto.model.KeyMetadata; +import io.mosip.mimoto.model.ProofSigningKey; + +import java.time.Instant; +import java.util.Base64; +import java.util.UUID; + +import static io.mosip.mimoto.exception.ErrorConstants.ENCRYPTION_FAILED; + +/** + * Unified utility for key generation and JWT signing operations. + */ +@Slf4j +public class SigningKeyUtil { + + private static final int JWT_EXPIRATION_SECONDS = 18000; // 5 hours + private static final String OPENID4VCI_PROOF_JWT = "openid4vci-proof+jwt"; + + /** + * Generates a key pair for the given signing algorithm. + * + * @param algorithm The algorithm to use (e.g., "RS256", "ES256", "ES256K", "Ed25519"). + * @return KeyPair object. + * @throws NoSuchAlgorithmException + * @throws InvalidAlgorithmParameterException + * @throws NoSuchProviderException + */ + public static KeyPair generateKeyPair(SigningAlgorithm algorithm) throws NoSuchAlgorithmException, InvalidAlgorithmParameterException, NoSuchProviderException { + SigningAlgorithmHandler handler = SigningAlgorithmHandlerFactory.getHandler(algorithm); + return handler.generateKeyPair(); + } + + /** + * Reconstructs a KeyPair from stored byte arrays (from database). + * + * @param algorithm The signing algorithm + * @param publicKeyBytes Public key bytes + * @param privateKeyBytes Private key bytes + * @return Reconstructed KeyPair + * @throws NoSuchAlgorithmException If the algorithm is not supported + * @throws InvalidAlgorithmParameterException If algorithm parameters are invalid + * @throws NoSuchProviderException If the provider is not available + * @throws InvalidKeySpecException If the key bytes are invalid + */ + public static KeyPair generateKeyPair(SigningAlgorithm algorithm, byte[] publicKeyBytes, byte[] privateKeyBytes) throws NoSuchAlgorithmException, InvalidAlgorithmParameterException, NoSuchProviderException, InvalidKeySpecException { + + SigningAlgorithmHandler handler = SigningAlgorithmHandlerFactory.getHandler(algorithm); + KeyFactory keyFactory = handler.getKeyFactory(); + + PublicKey publicKey = keyFactory.generatePublic(new X509EncodedKeySpec(publicKeyBytes)); + PrivateKey privateKey = keyFactory.generatePrivate(new PKCS8EncodedKeySpec(privateKeyBytes)); + + return new KeyPair(publicKey, privateKey); + } + + /** + * Generates a secret key for encryption (e.g., AES). + * This is separate from signing keys and remains algorithm-agnostic. + * + * @param algorithm The algorithm to use (e.g., "AES"). + * @param keySize The key size in bits. + * @return SecretKey object. + */ + public static SecretKey generateEncryptionKey(String algorithm, int keySize) { + try { + KeyGenerator keyGenerator = KeyGenerator.getInstance(algorithm); + keyGenerator.init(keySize); + return keyGenerator.generateKey(); + } catch (NoSuchAlgorithmException e) { + throw new KeyGenerationException(ENCRYPTION_FAILED.getErrorCode(), ENCRYPTION_FAILED.getErrorMessage(), e); + } + } + + /** + * Generates a complete signed JWT token. + * + * @param signingAlgorithm The signing algorithm to use + * @param audience The JWT audience + * @param clientId The client ID (used as subject and issuer) + * @param cNonce The challenge nonce + * @param keyPair The key pair to use for signing + * @return Serialized signed JWT string + * @throws JOSEException If JWT generation fails + */ + public static String generateJwt(SigningAlgorithm signingAlgorithm, String audience, String clientId, String cNonce, KeyPair keyPair) throws JOSEException { + SigningAlgorithmHandler handler = SigningAlgorithmHandlerFactory.getHandler(signingAlgorithm); + + // Use handler to create JWK and signer + JWK jwk = handler.createJWK(keyPair); + JWSSigner signer = handler.createSigner(jwk); + + JWTClaimsSet claimsSet = createClaims(clientId, audience, cNonce); + JWSHeader header = new JWSHeader.Builder(signingAlgorithm.getJWSAlgorithm()).type(new JOSEObjectType(OPENID4VCI_PROOF_JWT)).jwk(jwk.toPublicJWK()).build(); + + SignedJWT signedJWT = new SignedJWT(header, claimsSet); + signedJWT.sign(signer); + return signedJWT.serialize(); + } + + /** + * Creates a JWK (JSON Web Key) from a KeyPair. + * + * @param algorithm The signing algorithm + * @param keyPair The key pair + * @return JWK object + */ + public static JWK generateJwk(SigningAlgorithm algorithm, KeyPair keyPair) { + SigningAlgorithmHandler handler = SigningAlgorithmHandlerFactory.getHandler(algorithm); + return handler.createJWK(keyPair); + } + + /** + * Creates a JWSSigner from a JWK. + * + * @param algorithm The signing algorithm + * @param jwk The JSON Web Key + * @return JWSSigner object + * @throws JOSEException If signer creation fails + */ + public static JWSSigner createSigner(SigningAlgorithm algorithm, JWK jwk) throws JOSEException { + SigningAlgorithmHandler handler = SigningAlgorithmHandlerFactory.getHandler(algorithm); + return handler.createSigner(jwk); + } + + /** + * Creates a ProofSigningKey entity for the given algorithm. + * Generates a key pair and wraps it with metadata for database storage. + * + * @param algorithm The signing algorithm to use + * @return ProofSigningKey object ready for database persistence + * @throws KeyGenerationException If key generation fails + */ + public static ProofSigningKey createProofSigningKey(SigningAlgorithm algorithm) { + try { + KeyPair keyPair = generateKeyPair(algorithm); + + KeyMetadata keyMetadata = new KeyMetadata(); + keyMetadata.setAlgorithmName(algorithm.name()); + + ProofSigningKey proofSigningKey = new ProofSigningKey(); + proofSigningKey.setId(UUID.randomUUID().toString()); + proofSigningKey.setPublicKey(Base64.getEncoder().encodeToString(keyPair.getPublic().getEncoded())); + proofSigningKey.setSecretKey(keyPair.getPrivate()); + proofSigningKey.setKeyMetadata(keyMetadata); + proofSigningKey.setCreatedAt(Instant.now()); + proofSigningKey.setUpdatedAt(Instant.now()); + + return proofSigningKey; + } catch (NoSuchAlgorithmException | InvalidAlgorithmParameterException | NoSuchProviderException e) { + log.error("Error while generating key", e); + throw new KeyGenerationException(ENCRYPTION_FAILED.getErrorCode(), "Failed to generate proof signing key for algorithm: " + algorithm, e); + } + } + + /** + * Creates JWT claims set with standard fields. + */ + private static JWTClaimsSet createClaims(String clientId, String audience, String cNonce) { + long nowSeconds = System.currentTimeMillis() / 1000; + Date issuedAt = new Date(nowSeconds * 1000); + Date expiresAt = new Date((nowSeconds + JWT_EXPIRATION_SECONDS) * 1000); + + return new JWTClaimsSet.Builder().subject(clientId).audience(audience).issuer(clientId).issueTime(issuedAt).expirationTime(expiresAt).claim("nonce", cNonce).build(); + } +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/util/WalletUtil.java b/src/main/java/io/mosip/mimoto/util/WalletUtil.java index b6d601d77..90ab026fc 100644 --- a/src/main/java/io/mosip/mimoto/util/WalletUtil.java +++ b/src/main/java/io/mosip/mimoto/util/WalletUtil.java @@ -39,7 +39,7 @@ public String decryptWalletKey(String encryptedWalletKey, String pin) { } public String createWallet(String userId, String walletName, String pin) { - SecretKey encryptionKey = KeyGenerationUtil.generateEncryptionKey("AES", 256); + SecretKey encryptionKey = SigningKeyUtil.generateEncryptionKey("AES", 256); return saveWallet(userId, walletName, pin, encryptionKey, "AES", "encryptWithPin"); } @@ -77,7 +77,7 @@ private List createProofSigningKeys(SecretKey encryptionKey, Wa List proofSigningKeys = new ArrayList<>(); List algorithms = List.of(SigningAlgorithm.RS256, SigningAlgorithm.ES256, SigningAlgorithm.ES256K, SigningAlgorithm.ED25519); for (SigningAlgorithm algorithm : algorithms) { - ProofSigningKey signingKey = ProofSigningKeyFactory.createProofSigningKey(algorithm); + ProofSigningKey signingKey = SigningKeyUtil.createProofSigningKey(algorithm); signingKey.setWallet(wallet); signingKey.setEncryptedSecretKey(encryptionDecryptionUtil.encryptWithAES(encryptionKey, signingKey.getSecretKey().getEncoded())); diff --git a/src/main/java/io/mosip/mimoto/util/factory/BouncyCastleProviderUtil.java b/src/main/java/io/mosip/mimoto/util/factory/BouncyCastleProviderUtil.java new file mode 100644 index 000000000..445480668 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/factory/BouncyCastleProviderUtil.java @@ -0,0 +1,33 @@ +package io.mosip.mimoto.util.factory; + +import org.bouncycastle.jce.provider.BouncyCastleProvider; + +import java.security.Provider; +import java.security.Security; + +/** + * Shared utility for BouncyCastle provider access. + * Ensures single instance across all algorithm handlers. + */ +public final class BouncyCastleProviderUtil { + + private static final Provider BC_PROVIDER = new BouncyCastleProvider(); + + static { + if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null) { + Security.addProvider(BC_PROVIDER); + } + } + + private BouncyCastleProviderUtil() { + + } + + /** + * Returns the BouncyCastle provider instance. + * This is a singleton instance shared across all handlers. + */ + public static Provider getProvider() { + return Security.getProvider(BouncyCastleProvider.PROVIDER_NAME); + } +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/util/factory/ES256AlgorithmHandler.java b/src/main/java/io/mosip/mimoto/util/factory/ES256AlgorithmHandler.java new file mode 100644 index 000000000..cbb4ff9b7 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/factory/ES256AlgorithmHandler.java @@ -0,0 +1,52 @@ +package io.mosip.mimoto.util.factory; + +import com.nimbusds.jose.JOSEException; +import com.nimbusds.jose.JWSAlgorithm; +import com.nimbusds.jose.JWSSigner; +import com.nimbusds.jose.crypto.ECDSASigner; +import com.nimbusds.jose.jwk.Curve; +import com.nimbusds.jose.jwk.ECKey; +import com.nimbusds.jose.jwk.JWK; +import com.nimbusds.jose.jwk.KeyUse; +import io.mosip.mimoto.constant.SigningAlgorithmConstants; + +import java.security.*; +import java.security.interfaces.ECPrivateKey; +import java.security.interfaces.ECPublicKey; +import java.security.spec.ECGenParameterSpec; + +/** + * Algorithm handler for ES256 (ECDSA with SHA-256) signing. + * Uses secp256r1 (P-256) curve and BouncyCastle provider for signing operations. + */ +public class ES256AlgorithmHandler implements SigningAlgorithmHandler { + + @Override + public KeyPair generateKeyPair() throws NoSuchAlgorithmException, InvalidAlgorithmParameterException { + KeyPairGenerator generator = KeyPairGenerator.getInstance(SigningAlgorithmConstants.EC); + ECGenParameterSpec ecSpec = new ECGenParameterSpec(SigningAlgorithmConstants.CURVE_SECP256R1); + generator.initialize(ecSpec); + return generator.generateKeyPair(); + } + + @Override + public KeyFactory getKeyFactory() throws NoSuchAlgorithmException { + return KeyFactory.getInstance(SigningAlgorithmConstants.EC); + } + + @Override + public JWK createJWK(KeyPair keyPair) { + ECPublicKey publicKey = (ECPublicKey) keyPair.getPublic(); + ECPrivateKey privateKey = (ECPrivateKey) keyPair.getPrivate(); + + return new ECKey.Builder(Curve.P_256, publicKey).privateKey(privateKey).algorithm(JWSAlgorithm.ES256).keyUse(KeyUse.SIGNATURE).build(); + } + + @Override + public JWSSigner createSigner(JWK jwk) throws JOSEException { + ECDSASigner signer = new ECDSASigner((ECKey) jwk); + signer.getJCAContext().setProvider(BouncyCastleProviderUtil.getProvider()); + return signer; + } + +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/util/factory/ES256KAlgorithmHandler.java b/src/main/java/io/mosip/mimoto/util/factory/ES256KAlgorithmHandler.java new file mode 100644 index 000000000..afa2f06b4 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/factory/ES256KAlgorithmHandler.java @@ -0,0 +1,55 @@ +package io.mosip.mimoto.util.factory; + +import com.nimbusds.jose.JOSEException; +import com.nimbusds.jose.JWSAlgorithm; +import com.nimbusds.jose.JWSSigner; +import com.nimbusds.jose.crypto.ECDSASigner; +import com.nimbusds.jose.jwk.Curve; +import com.nimbusds.jose.jwk.ECKey; +import com.nimbusds.jose.jwk.JWK; +import com.nimbusds.jose.jwk.KeyUse; +import io.mosip.mimoto.constant.SigningAlgorithmConstants; + +import java.security.*; +import java.security.interfaces.ECPrivateKey; +import java.security.interfaces.ECPublicKey; +import java.security.spec.ECGenParameterSpec; + +/** + * Algorithm handler for ES256K (ECDSA with SHA-256 using secp256k1 curve) signing. + * Uses secp256k1 curve and requires BouncyCastle provider for key generation and signing. + */ +public class ES256KAlgorithmHandler implements SigningAlgorithmHandler { + + private static final String CURVE_NAME = SigningAlgorithmConstants.CURVE_SECP256K1; + private static final String PROVIDER = SigningAlgorithmConstants.BC_PROVIDER; + + @Override + public KeyPair generateKeyPair() throws NoSuchAlgorithmException, InvalidAlgorithmParameterException, NoSuchProviderException { + KeyPairGenerator generator = KeyPairGenerator.getInstance(SigningAlgorithmConstants.EC, PROVIDER); + ECGenParameterSpec ecSpec = new ECGenParameterSpec(CURVE_NAME); + generator.initialize(ecSpec); + return generator.generateKeyPair(); + } + + @Override + public KeyFactory getKeyFactory() throws NoSuchAlgorithmException, NoSuchProviderException { + return KeyFactory.getInstance(SigningAlgorithmConstants.EC, PROVIDER); + } + + @Override + public JWK createJWK(KeyPair keyPair) { + ECPublicKey publicKey = (ECPublicKey) keyPair.getPublic(); + ECPrivateKey privateKey = (ECPrivateKey) keyPair.getPrivate(); + + return new ECKey.Builder(Curve.SECP256K1, publicKey).privateKey(privateKey).algorithm(JWSAlgorithm.ES256K).keyUse(KeyUse.SIGNATURE).build(); + } + + @Override + public JWSSigner createSigner(JWK jwk) throws JOSEException { + ECDSASigner signer = new ECDSASigner((ECKey) jwk); + signer.getJCAContext().setProvider(BouncyCastleProviderUtil.getProvider()); + return signer; + } + +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/util/factory/Ed25519AlgorithmHandler.java b/src/main/java/io/mosip/mimoto/util/factory/Ed25519AlgorithmHandler.java new file mode 100644 index 000000000..dd82ea62d --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/factory/Ed25519AlgorithmHandler.java @@ -0,0 +1,89 @@ +package io.mosip.mimoto.util.factory; + +import com.nimbusds.jose.JOSEException; +import com.nimbusds.jose.JWSAlgorithm; +import com.nimbusds.jose.JWSHeader; +import com.nimbusds.jose.JWSSigner; +import com.nimbusds.jose.jca.JCAContext; +import com.nimbusds.jose.jwk.Curve; +import com.nimbusds.jose.jwk.JWK; +import com.nimbusds.jose.jwk.KeyUse; +import com.nimbusds.jose.jwk.OctetKeyPair; +import com.nimbusds.jose.util.Base64URL; +import io.mosip.mimoto.constant.SigningAlgorithmConstants; +import org.bouncycastle.crypto.params.Ed25519PrivateKeyParameters; +import org.bouncycastle.crypto.signers.Ed25519Signer; + +import java.security.KeyFactory; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.NoSuchAlgorithmException; +import java.security.interfaces.EdECPrivateKey; +import java.security.interfaces.EdECPublicKey; +import java.util.Arrays; +import java.util.Collections; +import java.util.Set; + +/** + * Algorithm handler for Ed25519 (Edwards-curve Digital Signature Algorithm) signing. + * Uses Ed25519 curve and implements custom JWSSigner with BouncyCastle for signing operations. + */ +public class Ed25519AlgorithmHandler implements SigningAlgorithmHandler { + + private static final int ED25519_KEY_SIZE_BYTES = 32; + + @Override + public KeyPair generateKeyPair() throws NoSuchAlgorithmException { + KeyPairGenerator generator = KeyPairGenerator.getInstance(SigningAlgorithmConstants.ED25519); + return generator.generateKeyPair(); + } + + @Override + public KeyFactory getKeyFactory() throws NoSuchAlgorithmException { + return KeyFactory.getInstance(SigningAlgorithmConstants.ED25519); + } + + @Override + public JWK createJWK(KeyPair keyPair) { + EdECPublicKey edECPublicKey = (EdECPublicKey) keyPair.getPublic(); + EdECPrivateKey edECPrivateKey = (EdECPrivateKey) keyPair.getPrivate(); + + byte[] x = Arrays.copyOfRange(edECPublicKey.getEncoded(), edECPublicKey.getEncoded().length - ED25519_KEY_SIZE_BYTES, edECPublicKey.getEncoded().length); + byte[] d = Arrays.copyOfRange(edECPrivateKey.getEncoded(), edECPrivateKey.getEncoded().length - ED25519_KEY_SIZE_BYTES, edECPrivateKey.getEncoded().length); + + return new OctetKeyPair.Builder(Curve.Ed25519, Base64URL.encode(x)).d(Base64URL.encode(d)).algorithm(JWSAlgorithm.Ed25519).keyUse(KeyUse.SIGNATURE).build(); + } + + @Override + public JWSSigner createSigner(JWK jwk) throws JOSEException { + OctetKeyPair okp = (OctetKeyPair) jwk; + byte[] privateKeyBytes = okp.getD().decode(); + + return new JWSSigner() { + private final JCAContext jcaContext = new JCAContext(); + + @Override + public Base64URL sign(JWSHeader header, byte[] input) throws JOSEException { + try { + Ed25519Signer signer = new Ed25519Signer(); + signer.init(true, new Ed25519PrivateKeyParameters(privateKeyBytes, 0)); + signer.update(input, 0, input.length); + return Base64URL.encode(signer.generateSignature()); + } catch (Exception e) { + throw new JOSEException("Ed25519 signing failed", e); + } + } + + @Override + public Set supportedJWSAlgorithms() { + return Collections.singleton(JWSAlgorithm.Ed25519); + } + + @Override + public JCAContext getJCAContext() { + return jcaContext; + } + }; + } + +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/util/factory/RS256AlgorithmHandler.java b/src/main/java/io/mosip/mimoto/util/factory/RS256AlgorithmHandler.java new file mode 100644 index 000000000..502a087f7 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/factory/RS256AlgorithmHandler.java @@ -0,0 +1,50 @@ +package io.mosip.mimoto.util.factory; + +import com.nimbusds.jose.JOSEException; +import com.nimbusds.jose.JWSAlgorithm; +import com.nimbusds.jose.JWSSigner; +import com.nimbusds.jose.crypto.RSASSASigner; +import com.nimbusds.jose.jwk.JWK; +import com.nimbusds.jose.jwk.KeyUse; +import com.nimbusds.jose.jwk.RSAKey; +import io.mosip.mimoto.constant.SigningAlgorithmConstants; + +import java.security.*; +import java.security.interfaces.*; + +/** + * Algorithm handler for RS256 (RSA with SHA-256) signing. + * Uses RSA 2048-bit keys and BouncyCastle provider for signing operations. + */ +public class RS256AlgorithmHandler implements SigningAlgorithmHandler { + + private static final int RSA_KEY_SIZE = 2048; + + @Override + public KeyPair generateKeyPair() throws NoSuchAlgorithmException { + KeyPairGenerator generator = KeyPairGenerator.getInstance(SigningAlgorithmConstants.RSA); + generator.initialize(RSA_KEY_SIZE); + return generator.generateKeyPair(); + } + + @Override + public KeyFactory getKeyFactory() throws NoSuchAlgorithmException { + return KeyFactory.getInstance(SigningAlgorithmConstants.RSA); + } + + @Override + public JWK createJWK(KeyPair keyPair) { + RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); + RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); + + return new RSAKey.Builder(publicKey).privateKey(privateKey).algorithm(JWSAlgorithm.RS256).keyUse(KeyUse.SIGNATURE).build(); + } + + @Override + public JWSSigner createSigner(JWK jwk) throws JOSEException { + RSASSASigner signer = new RSASSASigner((RSAKey) jwk); + signer.getJCAContext().setProvider(BouncyCastleProviderUtil.getProvider()); + return signer; + } + +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/util/factory/SigningAlgorithmHandler.java b/src/main/java/io/mosip/mimoto/util/factory/SigningAlgorithmHandler.java new file mode 100644 index 000000000..4d995cde9 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/factory/SigningAlgorithmHandler.java @@ -0,0 +1,30 @@ +package io.mosip.mimoto.util.factory; + +import java.security.InvalidAlgorithmParameterException; +import java.security.KeyFactory; +import java.security.KeyPair; +import java.security.NoSuchAlgorithmException; +import java.security.NoSuchProviderException; + +import com.nimbusds.jose.JOSEException; +import com.nimbusds.jose.JWSSigner; +import com.nimbusds.jose.jwk.JWK; + +/** + * Strategy interface for algorithm-specific cryptographic operations. + * Implementations encapsulate the logic for key generation, key factory retrieval, + * JWK creation, and JWSSigner creation for a specific signing algorithm. + * + * @implNote All implementations should be thread-safe and stateless. + */ +public interface SigningAlgorithmHandler { + + KeyPair generateKeyPair() throws NoSuchAlgorithmException, InvalidAlgorithmParameterException, NoSuchProviderException; + + KeyFactory getKeyFactory() throws NoSuchAlgorithmException, NoSuchProviderException; + + JWK createJWK(KeyPair keyPair); + + JWSSigner createSigner(JWK jwk) throws JOSEException; + +} diff --git a/src/main/java/io/mosip/mimoto/util/factory/SigningAlgorithmHandlerFactory.java b/src/main/java/io/mosip/mimoto/util/factory/SigningAlgorithmHandlerFactory.java new file mode 100644 index 000000000..5c0301d5a --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/factory/SigningAlgorithmHandlerFactory.java @@ -0,0 +1,42 @@ +package io.mosip.mimoto.util.factory; + +import io.mosip.mimoto.constant.SigningAlgorithm; + +import java.util.EnumMap; +import java.util.Map; + +/** + * Factory for managing and retrieving algorithm-specific cryptographic handlers. + * Uses the Strategy pattern to provide the appropriate handler implementation + * for each signing algorithm. + */ +public class SigningAlgorithmHandlerFactory { + + private static final Map handlers; + + static { + handlers = new EnumMap<>(SigningAlgorithm.class); + handlers.put(SigningAlgorithm.RS256, new RS256AlgorithmHandler()); + handlers.put(SigningAlgorithm.ES256, new ES256AlgorithmHandler()); + handlers.put(SigningAlgorithm.ES256K, new ES256KAlgorithmHandler()); + handlers.put(SigningAlgorithm.ED25519, new Ed25519AlgorithmHandler()); + } + + /** + * Gets the algorithm handler for the specified algorithm. + * + * @param algorithm The signing algorithm + * @return The corresponding algorithm handler + * @throws IllegalArgumentException If the algorithm is not supported + */ + public static SigningAlgorithmHandler getHandler(SigningAlgorithm algorithm) { + if (algorithm == null) { + throw new IllegalArgumentException("Algorithm cannot be null"); + } + SigningAlgorithmHandler handler = handlers.get(algorithm); + if (handler == null) { + throw new IllegalArgumentException("Unsupported algorithm: " + algorithm); + } + return handler; + } +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java index ccd3ad643..8eb22b1e4 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java @@ -47,7 +47,7 @@ public class CredentialRequestServiceTest { @MockBean private KeyPairRetrievalService keyPairService; - private final MockedStatic keyGenerationUtilMockedStatic = Mockito.mockStatic(KeyGenerationUtil.class, Mockito.withSettings().defaultAnswer(Mockito.CALLS_REAL_METHODS)); + private final MockedStatic keyGenerationUtilMockedStatic = Mockito.mockStatic(SigningKeyUtil.class, Mockito.withSettings().defaultAnswer(Mockito.CALLS_REAL_METHODS)); IssuerDTO issuerDTO; String issuerId; @@ -168,7 +168,7 @@ public void shouldReturnFallbackAlgorithmWhenJwtProofTypeOfProofTypesSupportedIs ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(SigningAlgorithm.class); - keyGenerationUtilMockedStatic.verify(() -> KeyGenerationUtil.generateKeyPair(argumentCaptor.capture())); + keyGenerationUtilMockedStatic.verify(() -> SigningKeyUtil.generateKeyPair(argumentCaptor.capture())); SigningAlgorithm capturedAlgorithm = argumentCaptor.getValue(); assertEquals(SigningAlgorithm.ED25519, capturedAlgorithm); } @@ -197,7 +197,7 @@ public void shouldReturnFallbackAlgorithmWhenJwtProofTypeOfProofTypesSupportedIs ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(SigningAlgorithm.class); - keyGenerationUtilMockedStatic.verify(() -> KeyGenerationUtil.generateKeyPair(argumentCaptor.capture())); + keyGenerationUtilMockedStatic.verify(() -> SigningKeyUtil.generateKeyPair(argumentCaptor.capture())); SigningAlgorithm capturedAlgorithm = argumentCaptor.getValue(); assertEquals(SigningAlgorithm.ED25519, capturedAlgorithm); } @@ -225,7 +225,7 @@ public void shouldUseHighestPriorityAlgorithmInPredefinedSigningAlgoPrioritySetW ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(SigningAlgorithm.class); - keyGenerationUtilMockedStatic.verify(() -> KeyGenerationUtil.generateKeyPair(argumentCaptor.capture())); + keyGenerationUtilMockedStatic.verify(() -> SigningKeyUtil.generateKeyPair(argumentCaptor.capture())); SigningAlgorithm capturedAlgorithm = argumentCaptor.getValue(); assertEquals(SigningAlgorithm.ES256K, capturedAlgorithm); } @@ -253,7 +253,7 @@ public void shouldUseFallbackPrioritySigningAlgorithmIfNoneOfIssuerSupportedAlgo ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(SigningAlgorithm.class); - keyGenerationUtilMockedStatic.verify(() -> KeyGenerationUtil.generateKeyPair(argumentCaptor.capture())); + keyGenerationUtilMockedStatic.verify(() -> SigningKeyUtil.generateKeyPair(argumentCaptor.capture())); SigningAlgorithm capturedAlgorithm = argumentCaptor.getValue(); assertEquals(SigningAlgorithm.ED25519, capturedAlgorithm); } diff --git a/src/test/java/io/mosip/mimoto/service/KeyPairServiceTest.java b/src/test/java/io/mosip/mimoto/service/KeyPairServiceTest.java index 83b0c41a6..e711ff645 100644 --- a/src/test/java/io/mosip/mimoto/service/KeyPairServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/KeyPairServiceTest.java @@ -8,7 +8,7 @@ import io.mosip.mimoto.repository.ProofSigningKeyRepository; import io.mosip.mimoto.service.impl.KeyPairRetrievalServiceImpl; import io.mosip.mimoto.util.EncryptionDecryptionUtil; -import io.mosip.mimoto.util.KeyGenerationUtil; +import io.mosip.mimoto.util.SigningKeyUtil; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -84,12 +84,12 @@ public void testGetKeyPairFromDBSuccessWithED25519() throws Exception { .thenReturn(decryptedPrivateKey); try (MockedStatic mockedStaticUtil = Mockito.mockStatic(EncryptionDecryptionUtil.class); - MockedStatic mockedStaticKeyGen = Mockito.mockStatic(KeyGenerationUtil.class)) { + MockedStatic mockedStaticKeyGen = Mockito.mockStatic(SigningKeyUtil.class)) { mockedStaticUtil.when(() -> EncryptionDecryptionUtil.bytesToSecretKey(any(byte[].class))) .thenReturn(mock(SecretKey.class)); - mockedStaticKeyGen.when(() -> KeyGenerationUtil.getKeyPairFromDBStoredKeys( + mockedStaticKeyGen.when(() -> SigningKeyUtil.generateKeyPair( eq(algorithm), any(byte[].class), any(byte[].class))) .thenReturn(keyPair); @@ -120,12 +120,12 @@ public void testGetKeyPairFromDBSuccessWithRS256() throws Exception { .thenReturn(decryptedPrivateKey); try (MockedStatic mockedStaticUtil = Mockito.mockStatic(EncryptionDecryptionUtil.class); - MockedStatic mockedStaticKeyGen = Mockito.mockStatic(KeyGenerationUtil.class)) { + MockedStatic mockedStaticKeyGen = Mockito.mockStatic(SigningKeyUtil.class)) { mockedStaticUtil.when(() -> EncryptionDecryptionUtil.bytesToSecretKey(any(byte[].class))) .thenReturn(mock(SecretKey.class)); - mockedStaticKeyGen.when(() -> KeyGenerationUtil.getKeyPairFromDBStoredKeys( + mockedStaticKeyGen.when(() -> SigningKeyUtil.generateKeyPair( eq(algorithm), any(byte[].class), any(byte[].class))) .thenReturn(rsaKeyPair); @@ -154,12 +154,12 @@ public void testGetKeyPairFromDBSuccessWithES256() throws Exception { .thenReturn(decryptedPrivateKey); try (MockedStatic mockedStaticUtil = Mockito.mockStatic(EncryptionDecryptionUtil.class); - MockedStatic mockedStaticKeyGen = Mockito.mockStatic(KeyGenerationUtil.class)) { + MockedStatic mockedStaticKeyGen = Mockito.mockStatic(SigningKeyUtil.class)) { mockedStaticUtil.when(() -> EncryptionDecryptionUtil.bytesToSecretKey(any(byte[].class))) .thenReturn(mock(SecretKey.class)); - mockedStaticKeyGen.when(() -> KeyGenerationUtil.getKeyPairFromDBStoredKeys( + mockedStaticKeyGen.when(() -> SigningKeyUtil.generateKeyPair( eq(algorithm), any(byte[].class), any(byte[].class))) .thenReturn(ecKeyPair); @@ -270,12 +270,12 @@ public void testGetKeyPairFromDBThrowsKeyGenerationExceptionWhenKeyPairGeneratio .thenReturn(decryptedPrivateKey); try (MockedStatic mockedStaticUtil = Mockito.mockStatic(EncryptionDecryptionUtil.class); - MockedStatic mockedStaticKeyGen = Mockito.mockStatic(KeyGenerationUtil.class)) { + MockedStatic mockedStaticKeyGen = Mockito.mockStatic(SigningKeyUtil.class)) { mockedStaticUtil.when(() -> EncryptionDecryptionUtil.bytesToSecretKey(any(byte[].class))) .thenReturn(mock(SecretKey.class)); - mockedStaticKeyGen.when(() -> KeyGenerationUtil.getKeyPairFromDBStoredKeys( + mockedStaticKeyGen.when(() -> SigningKeyUtil.generateKeyPair( eq(algorithm), any(byte[].class), any(byte[].class))) .thenThrow(new RuntimeException("Key generation error")); @@ -315,12 +315,12 @@ public void testGetKeyPairFromDBWithDifferentWalletIds() throws Exception { .thenReturn(decryptedPrivateKey); try (MockedStatic mockedStaticUtil = Mockito.mockStatic(EncryptionDecryptionUtil.class); - MockedStatic mockedStaticKeyGen = Mockito.mockStatic(KeyGenerationUtil.class)) { + MockedStatic mockedStaticKeyGen = Mockito.mockStatic(SigningKeyUtil.class)) { mockedStaticUtil.when(() -> EncryptionDecryptionUtil.bytesToSecretKey(any(byte[].class))) .thenReturn(mock(SecretKey.class)); - mockedStaticKeyGen.when(() -> KeyGenerationUtil.getKeyPairFromDBStoredKeys( + mockedStaticKeyGen.when(() -> SigningKeyUtil.generateKeyPair( eq(algorithm), any(byte[].class), any(byte[].class))) .thenReturn(keyPair); @@ -347,12 +347,12 @@ public void testGetKeyPairFromDBWithAllSigningAlgorithms() throws Exception { .thenReturn(decryptedPrivateKey); try (MockedStatic mockedStaticUtil = Mockito.mockStatic(EncryptionDecryptionUtil.class); - MockedStatic mockedStaticKeyGen = Mockito.mockStatic(KeyGenerationUtil.class)) { + MockedStatic mockedStaticKeyGen = Mockito.mockStatic(SigningKeyUtil.class)) { mockedStaticUtil.when(() -> EncryptionDecryptionUtil.bytesToSecretKey(any(byte[].class))) .thenReturn(mock(SecretKey.class)); - mockedStaticKeyGen.when(() -> KeyGenerationUtil.getKeyPairFromDBStoredKeys( + mockedStaticKeyGen.when(() -> SigningKeyUtil.generateKeyPair( eq(algorithm), any(byte[].class), any(byte[].class))) .thenReturn(keyPair); @@ -388,12 +388,12 @@ public void testGetKeyPairFromDBVerifiesRepositoryIsCalledWithCorrectParameters( .thenReturn(decryptedPrivateKey); try (MockedStatic mockedStaticUtil = Mockito.mockStatic(EncryptionDecryptionUtil.class); - MockedStatic mockedStaticKeyGen = Mockito.mockStatic(KeyGenerationUtil.class)) { + MockedStatic mockedStaticKeyGen = Mockito.mockStatic(SigningKeyUtil.class)) { mockedStaticUtil.when(() -> EncryptionDecryptionUtil.bytesToSecretKey(any(byte[].class))) .thenReturn(mock(SecretKey.class)); - mockedStaticKeyGen.when(() -> KeyGenerationUtil.getKeyPairFromDBStoredKeys( + mockedStaticKeyGen.when(() -> SigningKeyUtil.generateKeyPair( eq(algorithm), any(byte[].class), any(byte[].class))) .thenReturn(keyPair); @@ -417,12 +417,12 @@ public void testGetKeyPairFromDBHandlesEmptyEncryptedSecretKey() throws Exceptio .thenReturn(decryptedPrivateKey); try (MockedStatic mockedStaticUtil = Mockito.mockStatic(EncryptionDecryptionUtil.class); - MockedStatic mockedStaticKeyGen = Mockito.mockStatic(KeyGenerationUtil.class)) { + MockedStatic mockedStaticKeyGen = Mockito.mockStatic(SigningKeyUtil.class)) { mockedStaticUtil.when(() -> EncryptionDecryptionUtil.bytesToSecretKey(any(byte[].class))) .thenReturn(mock(SecretKey.class)); - mockedStaticKeyGen.when(() -> KeyGenerationUtil.getKeyPairFromDBStoredKeys( + mockedStaticKeyGen.when(() -> SigningKeyUtil.generateKeyPair( eq(algorithm), any(byte[].class), any(byte[].class))) .thenReturn(keyPair); @@ -471,12 +471,12 @@ public void testGetKeyPairFromDBLogsDebugMessages() throws Exception { .thenReturn(decryptedPrivateKey); try (MockedStatic mockedStaticUtil = Mockito.mockStatic(EncryptionDecryptionUtil.class); - MockedStatic mockedStaticKeyGen = Mockito.mockStatic(KeyGenerationUtil.class)) { + MockedStatic mockedStaticKeyGen = Mockito.mockStatic(SigningKeyUtil.class)) { mockedStaticUtil.when(() -> EncryptionDecryptionUtil.bytesToSecretKey(any(byte[].class))) .thenReturn(mock(SecretKey.class)); - mockedStaticKeyGen.when(() -> KeyGenerationUtil.getKeyPairFromDBStoredKeys( + mockedStaticKeyGen.when(() -> SigningKeyUtil.generateKeyPair( eq(algorithm), any(byte[].class), any(byte[].class))) .thenReturn(keyPair); diff --git a/src/test/java/io/mosip/mimoto/service/WalletPresentationServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletPresentationServiceTest.java index 9593bf0f9..3e5e8d4d8 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletPresentationServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletPresentationServiceTest.java @@ -21,7 +21,7 @@ import io.mosip.mimoto.service.impl.OpenID4VPService; import io.mosip.mimoto.service.impl.WalletPresentationServiceImpl; import io.mosip.mimoto.util.EncryptionDecryptionUtil; -import io.mosip.mimoto.util.JwtGeneratorUtil; +import io.mosip.mimoto.util.SigningKeyUtil; import io.mosip.mimoto.util.UrlParameterUtils; import io.mosip.openID4VP.OpenID4VP; import org.springframework.http.ResponseEntity; @@ -229,11 +229,11 @@ public void testHandlePresentationActionSubmissionRequestSuccess() throws Except when(verifierResponse.getRedirectUri()).thenReturn("https://verifier.com/success"); when(mockOpenID4VP.sendVPResponseToVerifier(any())).thenReturn(verifierResponse); - try (MockedStatic jwtUtilMock = mockStatic(JwtGeneratorUtil.class); + try (MockedStatic jwtUtilMock = mockStatic(SigningKeyUtil.class); MockedStatic urlUtilMock = mockStatic(UrlParameterUtils.class)) { - jwtUtilMock.when(() -> JwtGeneratorUtil.generateJwk(any(), any())).thenReturn(jwk); - jwtUtilMock.when(() -> JwtGeneratorUtil.createSigner(any(), any())).thenReturn(jwsSigner); + jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); + jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); when(encryptionDecryptionUtil.createDetachedJwtSigningInput(anyString(), anyString())) .thenReturn("signing-input".getBytes()); @@ -303,11 +303,11 @@ public void testHandlePresentationActionJOSEException() throws Exception { Map unsignedTokens = new HashMap<>(); when(testOpenID4VP.constructUnsignedVPToken(any(), anyString(), anyString())).thenReturn(unsignedTokens); - try (MockedStatic jwtUtilMock = mockStatic(JwtGeneratorUtil.class); + try (MockedStatic jwtUtilMock = mockStatic(SigningKeyUtil.class); MockedStatic urlUtilMock = mockStatic(UrlParameterUtils.class)) { - jwtUtilMock.when(() -> JwtGeneratorUtil.generateJwk(any(), any())).thenReturn(jwk); - jwtUtilMock.when(() -> JwtGeneratorUtil.createSigner(any(), any())) + jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); + jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())) .thenThrow(new JOSEException("JWT signing error")); urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) @@ -417,8 +417,8 @@ public void testHandlePresentationActionIllegalArgumentException() throws Except VerifiablePresentationSessionData nullSessionData = null; - try (MockedStatic jwtUtilMock = mockStatic(JwtGeneratorUtil.class)) { - jwtUtilMock.when(() -> JwtGeneratorUtil.generateJwk(any(), any())).thenReturn(jwk); + try (MockedStatic jwtUtilMock = mockStatic(SigningKeyUtil.class)) { + jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); ResponseEntity response = walletPresentationService.handlePresentationAction( walletId, presentationId, request, nullSessionData, base64Key); @@ -445,11 +445,11 @@ public void testSubmitPresentationSuccess() throws Exception { when(verifierResponse.getRedirectUri()).thenReturn("https://verifier.com/success"); when(mockOpenID4VP.sendVPResponseToVerifier(any())).thenReturn(verifierResponse); - try (MockedStatic jwtUtilMock = mockStatic(JwtGeneratorUtil.class); + try (MockedStatic jwtUtilMock = mockStatic(SigningKeyUtil.class); MockedStatic urlUtilMock = mockStatic(UrlParameterUtils.class)) { - jwtUtilMock.when(() -> JwtGeneratorUtil.generateJwk(any(), any())).thenReturn(jwk); - jwtUtilMock.when(() -> JwtGeneratorUtil.createSigner(any(), any())).thenReturn(jwsSigner); + jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); + jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); when(encryptionDecryptionUtil.createDetachedJwtSigningInput(anyString(), anyString())) .thenReturn("signing-input".getBytes()); @@ -487,11 +487,11 @@ public void testSubmitPresentationShareFailed() throws Exception { when(verifierResponse.getRedirectUri()).thenReturn("https://verifier.com/error"); when(mockOpenID4VP.sendVPResponseToVerifier(any())).thenReturn(verifierResponse); - try (MockedStatic jwtUtilMock = mockStatic(JwtGeneratorUtil.class); + try (MockedStatic jwtUtilMock = mockStatic(SigningKeyUtil.class); MockedStatic urlUtilMock = mockStatic(UrlParameterUtils.class)) { - jwtUtilMock.when(() -> JwtGeneratorUtil.generateJwk(any(), any())).thenReturn(jwk); - jwtUtilMock.when(() -> JwtGeneratorUtil.createSigner(any(), any())).thenReturn(jwsSigner); + jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); + jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); when(encryptionDecryptionUtil.createDetachedJwtSigningInput(anyString(), anyString())) .thenReturn("signing-input".getBytes()); @@ -526,11 +526,11 @@ public void testSubmitPresentationExceptionDuringShare() throws Exception { when(mockOpenID4VP.sendVPResponseToVerifier(any())).thenThrow(new RuntimeException("Network error")); - try (MockedStatic jwtUtilMock = mockStatic(JwtGeneratorUtil.class); + try (MockedStatic jwtUtilMock = mockStatic(SigningKeyUtil.class); MockedStatic urlUtilMock = mockStatic(UrlParameterUtils.class)) { - jwtUtilMock.when(() -> JwtGeneratorUtil.generateJwk(any(), any())).thenReturn(jwk); - jwtUtilMock.when(() -> JwtGeneratorUtil.createSigner(any(), any())).thenReturn(jwsSigner); + jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); + jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); when(encryptionDecryptionUtil.createDetachedJwtSigningInput(anyString(), anyString())) .thenReturn("signing-input".getBytes()); @@ -623,8 +623,8 @@ public void testSignVPTokenUnsupportedFormat() throws Exception { when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); - try (MockedStatic jwtUtilMock = mockStatic(JwtGeneratorUtil.class)) { - jwtUtilMock.when(() -> JwtGeneratorUtil.generateJwk(any(), any())).thenReturn(jwk); + try (MockedStatic jwtUtilMock = mockStatic(SigningKeyUtil.class)) { + jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); try { walletPresentationService.submitPresentation( @@ -646,8 +646,8 @@ public void testFetchSelectedCredentialsNullMatchingCredentials() throws Excepti .build(); - try (MockedStatic jwtUtilMock = mockStatic(JwtGeneratorUtil.class)) { - jwtUtilMock.when(() -> JwtGeneratorUtil.generateJwk(any(), any())).thenReturn(jwk); + try (MockedStatic jwtUtilMock = mockStatic(SigningKeyUtil.class)) { + jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); walletPresentationService.submitPresentation( nullSessionData, walletId, presentationId, request, base64Key); @@ -675,11 +675,11 @@ public void testFetchSelectedCredentialsNoMatchingCredential() throws Exception when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); when(mockOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(mockAuthorizationRequest); - try (MockedStatic jwtUtilMock = mockStatic(JwtGeneratorUtil.class); + try (MockedStatic jwtUtilMock = mockStatic(SigningKeyUtil.class); MockedStatic urlUtilMock = mockStatic(UrlParameterUtils.class)) { - jwtUtilMock.when(() -> JwtGeneratorUtil.generateJwk(any(), any())).thenReturn(jwk); - jwtUtilMock.when(() -> JwtGeneratorUtil.createSigner(any(), any())).thenReturn(jwsSigner); + jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); + jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); when(encryptionDecryptionUtil.createDetachedJwtSigningInput(anyString(), anyString())) .thenReturn("signing-input".getBytes()); @@ -730,8 +730,8 @@ public void testMapStringToFormatTypeNullFormat() throws Exception { when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); - try (MockedStatic jwtUtilMock = mockStatic(JwtGeneratorUtil.class)) { - jwtUtilMock.when(() -> JwtGeneratorUtil.generateJwk(any(), any())).thenReturn(jwk); + try (MockedStatic jwtUtilMock = mockStatic(SigningKeyUtil.class)) { + jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); walletPresentationService.submitPresentation( sessionDataWithNullFormat, walletId, presentationId, submitRequest, base64Key); @@ -759,8 +759,8 @@ public void testMapStringToFormatTypeUnsupportedFormat() throws Exception { when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); - try (MockedStatic jwtUtilMock = mockStatic(JwtGeneratorUtil.class)) { - jwtUtilMock.when(() -> JwtGeneratorUtil.generateJwk(any(), any())).thenReturn(jwk); + try (MockedStatic jwtUtilMock = mockStatic(SigningKeyUtil.class)) { + jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); walletPresentationService.submitPresentation( sessionDataWithUnsupportedFormat, walletId, presentationId, submitRequest, base64Key); @@ -771,11 +771,11 @@ public void testMapStringToFormatTypeUnsupportedFormat() throws Exception { public void testStorePresentationRecordNullSessionData() throws Exception { VerifiablePresentationSessionData nullSessionData = null; - try (MockedStatic jwtUtilMock = mockStatic(JwtGeneratorUtil.class); + try (MockedStatic jwtUtilMock = mockStatic(SigningKeyUtil.class); MockedStatic urlUtilMock = mockStatic(UrlParameterUtils.class)) { - jwtUtilMock.when(() -> JwtGeneratorUtil.generateJwk(any(), any())).thenReturn(jwk); - jwtUtilMock.when(() -> JwtGeneratorUtil.createSigner(any(), any())).thenReturn(jwsSigner); + jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); + jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) @@ -810,11 +810,11 @@ public void testStorePresentationRecordExceptionDuringSave() throws Exception { when(verifiablePresentationsRepository.save(any(VerifiablePresentation.class))) .thenThrow(new RuntimeException("Database error")); - try (MockedStatic jwtUtilMock = mockStatic(JwtGeneratorUtil.class); + try (MockedStatic jwtUtilMock = mockStatic(SigningKeyUtil.class); MockedStatic urlUtilMock = mockStatic(UrlParameterUtils.class)) { - jwtUtilMock.when(() -> JwtGeneratorUtil.generateJwk(any(), any())).thenReturn(jwk); - jwtUtilMock.when(() -> JwtGeneratorUtil.createSigner(any(), any())).thenReturn(jwsSigner); + jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); + jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); when(encryptionDecryptionUtil.createDetachedJwtSigningInput(anyString(), anyString())) .thenReturn("signing-input".getBytes()); @@ -854,10 +854,10 @@ public void testExtractVerifierIdNullAuthorizationRequest() throws Exception { when(verifierResponse.getRedirectUri()).thenReturn("https://verifier.com/success"); when(mockOpenID4VP.sendVPResponseToVerifier(any())).thenReturn(verifierResponse); - try (MockedStatic jwtUtilMock = mockStatic(JwtGeneratorUtil.class)) { + try (MockedStatic jwtUtilMock = mockStatic(SigningKeyUtil.class)) { - jwtUtilMock.when(() -> JwtGeneratorUtil.generateJwk(any(), any())).thenReturn(jwk); - jwtUtilMock.when(() -> JwtGeneratorUtil.createSigner(any(), any())).thenReturn(jwsSigner); + jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); + jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); when(encryptionDecryptionUtil.createDetachedJwtSigningInput(anyString(), anyString())) .thenReturn("signing-input".getBytes()); @@ -897,11 +897,11 @@ public void testExtractVerifierIdExceptionDuringExtraction() throws Exception { when(verifierResponse.getRedirectUri()).thenReturn("https://verifier.com/success"); when(mockOpenID4VP.sendVPResponseToVerifier(any())).thenReturn(verifierResponse); - try (MockedStatic jwtUtilMock = mockStatic(JwtGeneratorUtil.class); + try (MockedStatic jwtUtilMock = mockStatic(SigningKeyUtil.class); MockedStatic urlUtilMock = mockStatic(UrlParameterUtils.class)) { - jwtUtilMock.when(() -> JwtGeneratorUtil.generateJwk(any(), any())).thenReturn(jwk); - jwtUtilMock.when(() -> JwtGeneratorUtil.createSigner(any(), any())).thenReturn(jwsSigner); + jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); + jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); when(encryptionDecryptionUtil.createDetachedJwtSigningInput(anyString(), anyString())) .thenReturn("signing-input".getBytes()); @@ -944,11 +944,11 @@ public void testExtractVerifierAuthRequestNullAuthorizationRequest() throws Exce when(verifierResponse.getRedirectUri()).thenReturn("https://verifier.com/success"); when(mockOpenID4VP.sendVPResponseToVerifier(any())).thenReturn(verifierResponse); - try (MockedStatic jwtUtilMock = mockStatic(JwtGeneratorUtil.class); + try (MockedStatic jwtUtilMock = mockStatic(SigningKeyUtil.class); MockedStatic urlUtilMock = mockStatic(UrlParameterUtils.class)) { - jwtUtilMock.when(() -> JwtGeneratorUtil.generateJwk(any(), any())).thenReturn(jwk); - jwtUtilMock.when(() -> JwtGeneratorUtil.createSigner(any(), any())).thenReturn(jwsSigner); + jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); + jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); when(encryptionDecryptionUtil.createDetachedJwtSigningInput(anyString(), anyString())) .thenReturn("signing-input".getBytes()); @@ -988,11 +988,11 @@ public void testExtractVerifierAuthRequestExceptionDuringExtraction() throws Exc .thenReturn("{\"kty\":\"OKP\"}") .thenThrow(new JsonProcessingException("JSON error") {}); - try (MockedStatic jwtUtilMock = mockStatic(JwtGeneratorUtil.class); + try (MockedStatic jwtUtilMock = mockStatic(SigningKeyUtil.class); MockedStatic urlUtilMock = mockStatic(UrlParameterUtils.class)) { - jwtUtilMock.when(() -> JwtGeneratorUtil.generateJwk(any(), any())).thenReturn(jwk); - jwtUtilMock.when(() -> JwtGeneratorUtil.createSigner(any(), any())).thenReturn(jwsSigner); + jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); + jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); when(encryptionDecryptionUtil.createDetachedJwtSigningInput(anyString(), anyString())) .thenReturn("signing-input".getBytes()); @@ -1031,11 +1031,11 @@ public void testCreatePresentationDataExceptionDuringCreation() throws Exception .thenReturn("{\"kty\":\"OKP\"}") .thenThrow(new JsonProcessingException("JSON error") {}); - try (MockedStatic jwtUtilMock = mockStatic(JwtGeneratorUtil.class); + try (MockedStatic jwtUtilMock = mockStatic(SigningKeyUtil.class); MockedStatic urlUtilMock = mockStatic(UrlParameterUtils.class)) { - jwtUtilMock.when(() -> JwtGeneratorUtil.generateJwk(any(), any())).thenReturn(jwk); - jwtUtilMock.when(() -> JwtGeneratorUtil.createSigner(any(), any())).thenReturn(jwsSigner); + jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); + jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); when(encryptionDecryptionUtil.createDetachedJwtSigningInput(anyString(), anyString())) .thenReturn("signing-input".getBytes()); diff --git a/src/test/java/io/mosip/mimoto/util/EncryptionDecryptionUtilTest.java b/src/test/java/io/mosip/mimoto/util/EncryptionDecryptionUtilTest.java index a92afb111..9e01d52f9 100644 --- a/src/test/java/io/mosip/mimoto/util/EncryptionDecryptionUtilTest.java +++ b/src/test/java/io/mosip/mimoto/util/EncryptionDecryptionUtilTest.java @@ -48,8 +48,8 @@ public class EncryptionDecryptionUtilTest { public void setUp() throws NoSuchAlgorithmException, InvalidAlgorithmParameterException, NoSuchProviderException { String appId = "MIMOTO"; ReflectionTestUtils.setField(encryptionDecryptionUtil, "appId", appId); - encryptionKey = KeyGenerationUtil.generateEncryptionKey("AES", 256); - keyPair = KeyGenerationUtil.generateKeyPair(SigningAlgorithm.ED25519); + encryptionKey = SigningKeyUtil.generateEncryptionKey("AES", 256); + keyPair = SigningKeyUtil.generateKeyPair(SigningAlgorithm.ED25519); } @Test @@ -92,8 +92,8 @@ public void shouldReturnNullIfDataToDecryptIsNull() { @Test public void shouldEncryptPrivateKeyWithAESSuccessfully() throws Exception { - SecretKey aesKey = KeyGenerationUtil.generateEncryptionKey("AES", 256); - KeyPair keyPair = KeyGenerationUtil.generateKeyPair(SigningAlgorithm.ED25519); + SecretKey aesKey = SigningKeyUtil.generateEncryptionKey("AES", 256); + KeyPair keyPair = SigningKeyUtil.generateKeyPair(SigningAlgorithm.ED25519); String encryptedPrivateKey = encryptionDecryptionUtil.encryptWithAES(aesKey, keyPair.getPrivate().getEncoded()); diff --git a/src/test/java/io/mosip/mimoto/util/JwtGeneratorUtilTest.java b/src/test/java/io/mosip/mimoto/util/JwtGeneratorUtilTest.java deleted file mode 100644 index 9ca4c3c60..000000000 --- a/src/test/java/io/mosip/mimoto/util/JwtGeneratorUtilTest.java +++ /dev/null @@ -1,133 +0,0 @@ -package io.mosip.mimoto.util; - -import com.nimbusds.jwt.SignedJWT; -import io.mosip.mimoto.constant.SigningAlgorithm; -import lombok.extern.slf4j.Slf4j; -import org.bouncycastle.jce.provider.BouncyCastleProvider; -import org.junit.BeforeClass; -import org.junit.Test; -import java.security.*; -import java.security.spec.ECGenParameterSpec; -import java.util.Arrays; -import java.util.Date; -import java.util.List; -import static org.junit.Assert.*; - -@Slf4j -public class JwtGeneratorUtilTest { - - @BeforeClass - public static void setupProvider() { - if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null) { - Security.addProvider(new BouncyCastleProvider()); - } - } - - @Test - public void shouldGenerateJWTForRS256Successfully() throws Exception { - KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA"); - generator.initialize(2048); - KeyPair keyPair = generator.generateKeyPair(); - List expectedClaims = Arrays.asList("client-id", "audience", "nonce-rs256"); - - String jwt = JwtGeneratorUtil.generateJwt( - SigningAlgorithm.RS256, - "audience", - "client-id", - "nonce-rs256", - keyPair - ); - - SignedJWT signedJWT = SignedJWT.parse(jwt); - List actualClaims = Arrays.asList( - signedJWT.getJWTClaimsSet().getSubject(), - signedJWT.getJWTClaimsSet().getAudience().getFirst(), - signedJWT.getJWTClaimsSet().getStringClaim("nonce") - ); - - assertEquals(expectedClaims, actualClaims); - assertEquals(18000, diffInSeconds(signedJWT.getJWTClaimsSet().getIssueTime(), signedJWT.getJWTClaimsSet().getExpirationTime())); - } - - @Test - public void shouldGenerateJWTForES256Successfully() throws Exception { - KeyPairGenerator generator = KeyPairGenerator.getInstance("EC"); - generator.initialize(new ECGenParameterSpec("secp256r1")); - KeyPair keyPair = generator.generateKeyPair(); - List expectedClaims = Arrays.asList("client-id", "audience", "nonce-es256"); - - String jwt = JwtGeneratorUtil.generateJwt( - SigningAlgorithm.ES256, - "audience", - "client-id", - "nonce-es256", - keyPair - ); - - SignedJWT signedJWT = SignedJWT.parse(jwt); - List actualClaims = Arrays.asList( - signedJWT.getJWTClaimsSet().getSubject(), - signedJWT.getJWTClaimsSet().getAudience().getFirst(), - signedJWT.getJWTClaimsSet().getStringClaim("nonce") - ); - - assertEquals(expectedClaims, actualClaims); - assertEquals(18000, diffInSeconds(signedJWT.getJWTClaimsSet().getIssueTime(), signedJWT.getJWTClaimsSet().getExpirationTime())); - } - - @Test - public void shouldGenerateJWTForES256kSuccessfully() throws Exception { - KeyPairGenerator generator = KeyPairGenerator.getInstance("EC", "BC"); - generator.initialize(new ECGenParameterSpec("secp256k1")); - KeyPair keyPair = generator.generateKeyPair(); - List expectedClaims = Arrays.asList("client-id", "audience", "nonce-es256k"); - - String jwt = JwtGeneratorUtil.generateJwt( - SigningAlgorithm.ES256K, - "audience", - "client-id", - "nonce-es256k", - keyPair - ); - - SignedJWT signedJWT = SignedJWT.parse(jwt); - List actualClaims = Arrays.asList( - signedJWT.getJWTClaimsSet().getSubject(), - signedJWT.getJWTClaimsSet().getAudience().getFirst(), - signedJWT.getJWTClaimsSet().getStringClaim("nonce") - ); - - assertEquals(expectedClaims, actualClaims); - assertEquals(18000, diffInSeconds(signedJWT.getJWTClaimsSet().getIssueTime(), signedJWT.getJWTClaimsSet().getExpirationTime())); - } - - @Test - public void shouldGenerateJWTForED25519Successfully() throws Exception { - KeyPairGenerator generator = KeyPairGenerator.getInstance("Ed25519", "BC"); - KeyPair keyPair = generator.generateKeyPair(); - List expectedClaims = Arrays.asList("client-id", "audience", "nonce-ed25519"); - - String jwt = JwtGeneratorUtil.generateJwt( - SigningAlgorithm.ED25519, - "audience", - "client-id", - "nonce-ed25519", - keyPair - ); - - SignedJWT signedJWT = SignedJWT.parse(jwt); - List actualClaims = Arrays.asList( - signedJWT.getJWTClaimsSet().getSubject(), - signedJWT.getJWTClaimsSet().getAudience().getFirst(), - signedJWT.getJWTClaimsSet().getStringClaim("nonce") - ); - - assertEquals(expectedClaims, actualClaims); - assertEquals(18000, diffInSeconds(signedJWT.getJWTClaimsSet().getIssueTime(), signedJWT.getJWTClaimsSet().getExpirationTime())); - } - - - public long diffInSeconds(Date issuedAt, Date expiresAt) { - return (expiresAt.getTime() - issuedAt.getTime()) / 1000; - } -} diff --git a/src/test/java/io/mosip/mimoto/util/KeyGenerationUtilTest.java b/src/test/java/io/mosip/mimoto/util/KeyGenerationUtilTest.java deleted file mode 100644 index 5c8351cf4..000000000 --- a/src/test/java/io/mosip/mimoto/util/KeyGenerationUtilTest.java +++ /dev/null @@ -1,64 +0,0 @@ -package io.mosip.mimoto.util; - -import io.mosip.mimoto.exception.KeyGenerationException; -import io.mosip.mimoto.constant.SigningAlgorithm; -import org.junit.Test; - -import javax.crypto.SecretKey; -import java.security.KeyPair; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -public class KeyGenerationUtilTest { - - @Test - public void shouldGenerateEncryptionKeySuccessfully() { - SecretKey key = KeyGenerationUtil.generateEncryptionKey("AES", 256); - - assertNotNull(key); - assertEquals("AES", key.getAlgorithm()); - } - - @Test - public void shouldGenerateKeyPairSuccessfully() throws Exception { - KeyPair keyPair = KeyGenerationUtil.generateKeyPair(SigningAlgorithm.ED25519); - - assertNotNull(keyPair); - assertEquals("EdDSA", keyPair.getPublic().getAlgorithm()); - } - - @Test - public void shouldGenerateRSAKeyPairSuccessfully() throws Exception { - KeyPair keyPair = KeyGenerationUtil.generateKeyPair(SigningAlgorithm.RS256); - - assertNotNull(keyPair); - assertEquals("RSA", keyPair.getPublic().getAlgorithm()); - } - - @Test - public void shouldGenerateECKeyPairWithP256Successfully() throws Exception { - KeyPair keyPair = KeyGenerationUtil.generateKeyPair(SigningAlgorithm.ES256); - - assertNotNull(keyPair); - assertEquals("EC", keyPair.getPublic().getAlgorithm()); - } - - @Test - public void shouldGenerateECKeyPairWithSecp256k1Successfully() throws Exception { - KeyPair keyPair = KeyGenerationUtil.generateKeyPair(SigningAlgorithm.ES256K); - - assertNotNull(keyPair); - assertEquals("EC", keyPair.getPublic().getAlgorithm()); - } - - @Test(expected = IllegalArgumentException.class) - public void shouldThrowExceptionForUnsupportedAlgorithm() throws Exception { - KeyGenerationUtil.generateKeyPair(SigningAlgorithm.fromString("unsupportedAlgorithm")); - } - - @Test(expected = KeyGenerationException.class) - public void shouldThrowExceptionForUnsupportedEncryptionAlgorithm() { - KeyGenerationUtil.generateEncryptionKey("unsupportedAlgorithm", 256); - } -} diff --git a/src/test/java/io/mosip/mimoto/util/SigningKeyUtilTest.java b/src/test/java/io/mosip/mimoto/util/SigningKeyUtilTest.java new file mode 100644 index 000000000..dacf95361 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/util/SigningKeyUtilTest.java @@ -0,0 +1,173 @@ +package io.mosip.mimoto.util; + +import com.nimbusds.jose.JWSSigner; +import com.nimbusds.jose.jwk.JWK; +import com.nimbusds.jwt.SignedJWT; +import io.mosip.mimoto.constant.SigningAlgorithm; +import io.mosip.mimoto.exception.KeyGenerationException; +import io.mosip.mimoto.model.ProofSigningKey; +import org.junit.Before; +import org.junit.Test; + +import javax.crypto.SecretKey; +import java.security.KeyPair; +import java.security.spec.InvalidKeySpecException; + +import static org.junit.Assert.*; + +/** + * Test cases for SigningKeyUtil. + */ +public class SigningKeyUtilTest { + + @Before + public void setUp() { + // Ensure BouncyCastle provider is registered + if (java.security.Security.getProvider("BC") == null) { + java.security.Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); + } + } + + @Test + public void shouldGenerateKeyPairForRS256() throws Exception { + KeyPair keyPair = SigningKeyUtil.generateKeyPair(SigningAlgorithm.RS256); + + assertNotNull("KeyPair should not be null", keyPair); + assertEquals("Algorithm should be RSA", "RSA", keyPair.getPublic().getAlgorithm()); + } + + @Test + public void shouldGenerateKeyPairForES256() throws Exception { + KeyPair keyPair = SigningKeyUtil.generateKeyPair(SigningAlgorithm.ES256); + + assertNotNull("KeyPair should not be null", keyPair); + assertEquals("Algorithm should be EC", "EC", keyPair.getPublic().getAlgorithm()); + } + + @Test + public void shouldGenerateKeyPairForES256K() throws Exception { + KeyPair keyPair = SigningKeyUtil.generateKeyPair(SigningAlgorithm.ES256K); + + assertNotNull("KeyPair should not be null", keyPair); + assertEquals("Algorithm should be EC", "EC", keyPair.getPublic().getAlgorithm()); + } + + @Test + public void shouldGenerateKeyPairForED25519() throws Exception { + KeyPair keyPair = SigningKeyUtil.generateKeyPair(SigningAlgorithm.ED25519); + + assertNotNull("KeyPair should not be null", keyPair); + assertEquals("Algorithm should be EdDSA", "EdDSA", keyPair.getPublic().getAlgorithm()); + } + + @Test + public void shouldGenerateKeyPair() throws Exception { + KeyPair originalKeyPair = SigningKeyUtil.generateKeyPair(SigningAlgorithm.RS256); + byte[] publicKeyBytes = originalKeyPair.getPublic().getEncoded(); + byte[] privateKeyBytes = originalKeyPair.getPrivate().getEncoded(); + + KeyPair reconstructedKeyPair = SigningKeyUtil.generateKeyPair( + SigningAlgorithm.RS256, publicKeyBytes, privateKeyBytes); + + assertNotNull("Reconstructed KeyPair should not be null", reconstructedKeyPair); + assertEquals("Public key algorithm should match", + originalKeyPair.getPublic().getAlgorithm(), + reconstructedKeyPair.getPublic().getAlgorithm()); + } + + @Test(expected = InvalidKeySpecException.class) + public void shouldThrowExceptionForInvalidKeyBytes() throws Exception { + byte[] invalidPublicKey = new byte[]{1, 2, 3}; + byte[] invalidPrivateKey = new byte[]{4, 5, 6}; + + SigningKeyUtil.generateKeyPair( + SigningAlgorithm.RS256, invalidPublicKey, invalidPrivateKey); + } + + @Test + public void shouldGenerateEncryptionKey() { + SecretKey secretKey = SigningKeyUtil.generateEncryptionKey("AES", 256); + + assertNotNull("SecretKey should not be null", secretKey); + assertEquals("Algorithm should be AES", "AES", secretKey.getAlgorithm()); + } + + @Test(expected = KeyGenerationException.class) + public void shouldThrowExceptionForUnsupportedEncryptionAlgorithm() { + SigningKeyUtil.generateEncryptionKey("UNSUPPORTED", 256); + } + + @Test + public void shouldGenerateJwtSuccessfully() throws Exception { + KeyPair keyPair = SigningKeyUtil.generateKeyPair(SigningAlgorithm.RS256); + String jwt = SigningKeyUtil.generateJwt( + SigningAlgorithm.RS256, + "test-audience", + "test-client-id", + "test-nonce", + keyPair + ); + + assertNotNull("JWT should not be null", jwt); + assertFalse("JWT should not be empty", jwt.isEmpty()); + + SignedJWT signedJWT = SignedJWT.parse(jwt); + assertEquals("Subject should match", "test-client-id", signedJWT.getJWTClaimsSet().getSubject()); + assertEquals("Audience should match", "test-audience", signedJWT.getJWTClaimsSet().getAudience().getFirst()); + assertEquals("Nonce should match", "test-nonce", signedJWT.getJWTClaimsSet().getStringClaim("nonce")); + } + + @Test + public void shouldGenerateJwkSuccessfully() throws Exception { + KeyPair keyPair = SigningKeyUtil.generateKeyPair(SigningAlgorithm.RS256); + JWK jwk = SigningKeyUtil.generateJwk(SigningAlgorithm.RS256, keyPair); + + assertNotNull("JWK should not be null", jwk); + assertNotNull("JWK algorithm should not be null", jwk.getAlgorithm()); + } + + @Test + public void shouldCreateSignerSuccessfully() throws Exception { + KeyPair keyPair = SigningKeyUtil.generateKeyPair(SigningAlgorithm.RS256); + JWK jwk = SigningKeyUtil.generateJwk(SigningAlgorithm.RS256, keyPair); + JWSSigner signer = SigningKeyUtil.createSigner(SigningAlgorithm.RS256, jwk); + + assertNotNull("Signer should not be null", signer); + } + + @Test(expected = ClassCastException.class) + public void shouldThrowExceptionForInvalidJwkInSignerCreation() throws Exception { + KeyPair rsaKeyPair = SigningKeyUtil.generateKeyPair(SigningAlgorithm.RS256); + JWK rsaJwk = SigningKeyUtil.generateJwk(SigningAlgorithm.RS256, rsaKeyPair); + + // Try to use RS256 JWK with ES256 signer + SigningKeyUtil.createSigner(SigningAlgorithm.ES256, rsaJwk); + } + + @Test + public void shouldCreateProofSigningKeySuccessfully() { + ProofSigningKey proofSigningKey = SigningKeyUtil.createProofSigningKey(SigningAlgorithm.RS256); + + assertNotNull("ProofSigningKey should not be null", proofSigningKey); + assertNotNull("ID should not be null", proofSigningKey.getId()); + assertNotNull("Public key should not be null", proofSigningKey.getPublicKey()); + assertNotNull("Secret key should not be null", proofSigningKey.getSecretKey()); + assertNotNull("Key metadata should not be null", proofSigningKey.getKeyMetadata()); + assertEquals("Algorithm name should match", + SigningAlgorithm.RS256.name(), + proofSigningKey.getKeyMetadata().getAlgorithmName()); + } + + @Test + public void shouldCreateProofSigningKeyForAllAlgorithms() { + for (SigningAlgorithm algorithm : SigningAlgorithm.values()) { + ProofSigningKey proofSigningKey = SigningKeyUtil.createProofSigningKey(algorithm); + + assertNotNull("ProofSigningKey should not be null for " + algorithm, proofSigningKey); + assertEquals("Algorithm name should match for " + algorithm, + algorithm.name(), + proofSigningKey.getKeyMetadata().getAlgorithmName()); + } + } +} + diff --git a/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java b/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java index 97477a712..31bceec39 100644 --- a/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java +++ b/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java @@ -14,7 +14,10 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import org.bouncycastle.jce.provider.BouncyCastleProvider; + import javax.crypto.SecretKey; +import java.security.Security; import java.util.Base64; import java.util.UUID; @@ -47,10 +50,15 @@ class WalletUtilTest { @BeforeEach void setUp() { + // Ensure BouncyCastle provider is registered (required for ES256K algorithm) + if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null) { + Security.addProvider(new BouncyCastleProvider()); + } + pin = "1234"; name = "default"; userId = UUID.randomUUID().toString(); - encryptionKey = KeyGenerationUtil.generateEncryptionKey("AES", 256); + encryptionKey = SigningKeyUtil.generateEncryptionKey("AES", 256); encryptedPrivateKey = "encryptedPrivateKey"; encryptedWalletKey = "encryptedWalletKey"; decryptedWalletKey = Base64.getEncoder().encodeToString(encryptionKey.getEncoded()); diff --git a/src/test/java/io/mosip/mimoto/util/factory/BouncyCastleProviderUtilTest.java b/src/test/java/io/mosip/mimoto/util/factory/BouncyCastleProviderUtilTest.java new file mode 100644 index 000000000..7ca32cfd2 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/util/factory/BouncyCastleProviderUtilTest.java @@ -0,0 +1,38 @@ +package io.mosip.mimoto.util.factory; + +import org.bouncycastle.jce.provider.BouncyCastleProvider; +import org.junit.Test; + +import java.security.Provider; +import java.security.Security; + +import static org.junit.Assert.*; + +/** + * Test cases for BouncyCastleProviderUtil. + */ +public class BouncyCastleProviderUtilTest { + + @Test + public void shouldReturnValidBouncyCastleProvider() { + Provider provider = BouncyCastleProviderUtil.getProvider(); + + assertNotNull("Provider should not be null", provider); + assertTrue("Provider should be instance of BouncyCastleProvider", provider instanceof BouncyCastleProvider); + assertEquals("Provider name should be BC", BouncyCastleProvider.PROVIDER_NAME, provider.getName()); + + Provider registeredProvider = Security.getProvider(BouncyCastleProvider.PROVIDER_NAME); + assertNotNull("BouncyCastle provider should be registered", registeredProvider); + assertEquals("Registered provider name should match", BouncyCastleProvider.PROVIDER_NAME, registeredProvider.getName()); + } + + @Test + public void shouldReturnSameInstanceOnMultipleCalls() { + Provider provider1 = BouncyCastleProviderUtil.getProvider(); + Provider provider2 = BouncyCastleProviderUtil.getProvider(); + + assertNotNull("Provider should not be null", provider1); + assertSame("Should return the same instance", provider1, provider2); + } +} + diff --git a/src/test/java/io/mosip/mimoto/util/factory/ES256AlgorithmHandlerTest.java b/src/test/java/io/mosip/mimoto/util/factory/ES256AlgorithmHandlerTest.java new file mode 100644 index 000000000..9144ddf20 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/util/factory/ES256AlgorithmHandlerTest.java @@ -0,0 +1,78 @@ +package io.mosip.mimoto.util.factory; + +import com.nimbusds.jose.JWSAlgorithm; +import com.nimbusds.jose.JWSSigner; +import com.nimbusds.jose.jwk.ECKey; +import com.nimbusds.jose.jwk.JWK; +import org.bouncycastle.jce.provider.BouncyCastleProvider; +import org.junit.Before; +import org.junit.Test; + +import java.security.KeyFactory; +import java.security.KeyPair; +import java.security.Security; + +import static org.junit.Assert.*; + +/** + * Test cases for ES256AlgorithmHandler. + */ +public class ES256AlgorithmHandlerTest { + + private final ES256AlgorithmHandler handler = new ES256AlgorithmHandler(); + + @Before + public void setUp() { + // Ensure BouncyCastle provider is registered (required for signing operations) + if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null) { + Security.addProvider(new BouncyCastleProvider()); + } + } + + @Test + public void shouldGenerateKeyPairSuccessfully() throws Exception { + KeyPair keyPair = handler.generateKeyPair(); + + assertNotNull("KeyPair should not be null", keyPair); + assertNotNull("Public key should not be null", keyPair.getPublic()); + assertNotNull("Private key should not be null", keyPair.getPrivate()); + assertEquals("Algorithm should be EC", "EC", keyPair.getPublic().getAlgorithm()); + } + + @Test + public void shouldGetKeyFactorySuccessfully() throws Exception { + KeyFactory keyFactory = handler.getKeyFactory(); + + assertNotNull("KeyFactory should not be null", keyFactory); + assertEquals("Algorithm should be EC", "EC", keyFactory.getAlgorithm()); + } + + @Test + public void shouldCreateJWKSuccessfully() throws Exception { + KeyPair keyPair = handler.generateKeyPair(); + JWK jwk = handler.createJWK(keyPair); + + assertNotNull("JWK should not be null", jwk); + assertTrue("JWK should be ECKey", jwk instanceof ECKey); + assertEquals("Algorithm should be ES256", JWSAlgorithm.ES256, jwk.getAlgorithm()); + } + + @Test + public void shouldCreateSignerSuccessfully() throws Exception { + KeyPair keyPair = handler.generateKeyPair(); + JWK jwk = handler.createJWK(keyPair); + JWSSigner signer = handler.createSigner(jwk); + + assertNotNull("Signer should not be null", signer); + } + + @Test(expected = ClassCastException.class) + public void shouldThrowExceptionWhenJWKIsInvalid() throws Exception { + // Create invalid JWK (not ECKey) + KeyPair rsaKeyPair = new RS256AlgorithmHandler().generateKeyPair(); + JWK invalidJwk = new RS256AlgorithmHandler().createJWK(rsaKeyPair); + + handler.createSigner(invalidJwk); + } +} + diff --git a/src/test/java/io/mosip/mimoto/util/factory/ES256KAlgorithmHandlerTest.java b/src/test/java/io/mosip/mimoto/util/factory/ES256KAlgorithmHandlerTest.java new file mode 100644 index 000000000..3b62b4857 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/util/factory/ES256KAlgorithmHandlerTest.java @@ -0,0 +1,78 @@ +package io.mosip.mimoto.util.factory; + +import com.nimbusds.jose.JWSAlgorithm; +import com.nimbusds.jose.JWSSigner; +import com.nimbusds.jose.jwk.ECKey; +import com.nimbusds.jose.jwk.JWK; +import org.bouncycastle.jce.provider.BouncyCastleProvider; +import org.junit.Before; +import org.junit.Test; + +import java.security.KeyFactory; +import java.security.KeyPair; +import java.security.Security; + +import static org.junit.Assert.*; + +/** + * Test cases for ES256KAlgorithmHandler. + */ +public class ES256KAlgorithmHandlerTest { + + private final ES256KAlgorithmHandler handler = new ES256KAlgorithmHandler(); + + @Before + public void setUp() { + // Ensure BouncyCastle provider is registered (required for ES256K) + if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null) { + Security.addProvider(new BouncyCastleProvider()); + } + } + + @Test + public void shouldGenerateKeyPairSuccessfully() throws Exception { + KeyPair keyPair = handler.generateKeyPair(); + + assertNotNull("KeyPair should not be null", keyPair); + assertNotNull("Public key should not be null", keyPair.getPublic()); + assertNotNull("Private key should not be null", keyPair.getPrivate()); + assertEquals("Algorithm should be EC", "EC", keyPair.getPublic().getAlgorithm()); + } + + @Test + public void shouldGetKeyFactorySuccessfully() throws Exception { + KeyFactory keyFactory = handler.getKeyFactory(); + + assertNotNull("KeyFactory should not be null", keyFactory); + assertEquals("Algorithm should be EC", "EC", keyFactory.getAlgorithm()); + } + + @Test + public void shouldCreateJWKSuccessfully() throws Exception { + KeyPair keyPair = handler.generateKeyPair(); + JWK jwk = handler.createJWK(keyPair); + + assertNotNull("JWK should not be null", jwk); + assertTrue("JWK should be ECKey", jwk instanceof ECKey); + assertEquals("Algorithm should be ES256K", JWSAlgorithm.ES256K, jwk.getAlgorithm()); + } + + @Test + public void shouldCreateSignerSuccessfully() throws Exception { + KeyPair keyPair = handler.generateKeyPair(); + JWK jwk = handler.createJWK(keyPair); + JWSSigner signer = handler.createSigner(jwk); + + assertNotNull("Signer should not be null", signer); + } + + @Test(expected = ClassCastException.class) + public void shouldThrowExceptionWhenJWKIsInvalid() throws Exception { + // Create invalid JWK (not ECKey) + KeyPair rsaKeyPair = new RS256AlgorithmHandler().generateKeyPair(); + JWK invalidJwk = new RS256AlgorithmHandler().createJWK(rsaKeyPair); + + handler.createSigner(invalidJwk); + } +} + diff --git a/src/test/java/io/mosip/mimoto/util/factory/Ed25519AlgorithmHandlerTest.java b/src/test/java/io/mosip/mimoto/util/factory/Ed25519AlgorithmHandlerTest.java new file mode 100644 index 000000000..ee05a3c2d --- /dev/null +++ b/src/test/java/io/mosip/mimoto/util/factory/Ed25519AlgorithmHandlerTest.java @@ -0,0 +1,66 @@ +package io.mosip.mimoto.util.factory; + +import com.nimbusds.jose.JWSAlgorithm; +import com.nimbusds.jose.JWSSigner; +import com.nimbusds.jose.jwk.JWK; +import com.nimbusds.jose.jwk.OctetKeyPair; +import org.junit.Test; + +import java.security.KeyFactory; +import java.security.KeyPair; + +import static org.junit.Assert.*; + +/** + * Test cases for ED25519AlgorithmHandler. + */ +public class Ed25519AlgorithmHandlerTest { + + private final Ed25519AlgorithmHandler handler = new Ed25519AlgorithmHandler(); + + @Test + public void shouldGenerateKeyPairSuccessfully() throws Exception { + KeyPair keyPair = handler.generateKeyPair(); + + assertNotNull("KeyPair should not be null", keyPair); + assertNotNull("Public key should not be null", keyPair.getPublic()); + assertNotNull("Private key should not be null", keyPair.getPrivate()); + assertEquals("Algorithm should be EdDSA", "EdDSA", keyPair.getPublic().getAlgorithm()); + } + + @Test + public void shouldGetKeyFactorySuccessfully() throws Exception { + KeyFactory keyFactory = handler.getKeyFactory(); + + assertNotNull("KeyFactory should not be null", keyFactory); + assertEquals("Algorithm should be Ed25519", "Ed25519", keyFactory.getAlgorithm()); + } + + @Test + public void shouldCreateJWKSuccessfully() throws Exception { + KeyPair keyPair = handler.generateKeyPair(); + JWK jwk = handler.createJWK(keyPair); + + assertNotNull("JWK should not be null", jwk); + assertTrue("JWK should be OctetKeyPair", jwk instanceof OctetKeyPair); + assertEquals("Algorithm should be Ed25519", JWSAlgorithm.Ed25519, jwk.getAlgorithm()); + } + + @Test + public void shouldCreateSignerSuccessfully() throws Exception { + KeyPair keyPair = handler.generateKeyPair(); + JWK jwk = handler.createJWK(keyPair); + JWSSigner signer = handler.createSigner(jwk); + + assertNotNull("Signer should not be null", signer); + } + + @Test(expected = ClassCastException.class) + public void shouldThrowExceptionWhenJWKIsInvalid() throws Exception { + KeyPair rsaKeyPair = new RS256AlgorithmHandler().generateKeyPair(); + JWK invalidJwk = new RS256AlgorithmHandler().createJWK(rsaKeyPair); + + handler.createSigner(invalidJwk); + } +} + diff --git a/src/test/java/io/mosip/mimoto/util/factory/RS256AlgorithmHandlerTest.java b/src/test/java/io/mosip/mimoto/util/factory/RS256AlgorithmHandlerTest.java new file mode 100644 index 000000000..02d4ff51c --- /dev/null +++ b/src/test/java/io/mosip/mimoto/util/factory/RS256AlgorithmHandlerTest.java @@ -0,0 +1,78 @@ +package io.mosip.mimoto.util.factory; + +import com.nimbusds.jose.JWSAlgorithm; +import com.nimbusds.jose.JWSSigner; +import com.nimbusds.jose.jwk.JWK; +import com.nimbusds.jose.jwk.RSAKey; +import org.bouncycastle.jce.provider.BouncyCastleProvider; +import org.junit.Before; +import org.junit.Test; + +import java.security.KeyFactory; +import java.security.KeyPair; +import java.security.Security; + +import static org.junit.Assert.*; + +/** + * Test cases for RS256AlgorithmHandler. + */ +public class RS256AlgorithmHandlerTest { + + private final RS256AlgorithmHandler handler = new RS256AlgorithmHandler(); + + @Before + public void setUp() { + // Ensure BouncyCastle provider is registered (required for signing operations) + if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null) { + Security.addProvider(new BouncyCastleProvider()); + } + } + + @Test + public void shouldGenerateKeyPairSuccessfully() throws Exception { + KeyPair keyPair = handler.generateKeyPair(); + + assertNotNull("KeyPair should not be null", keyPair); + assertNotNull("Public key should not be null", keyPair.getPublic()); + assertNotNull("Private key should not be null", keyPair.getPrivate()); + assertEquals("Algorithm should be RSA", "RSA", keyPair.getPublic().getAlgorithm()); + } + + @Test + public void shouldGetKeyFactorySuccessfully() throws Exception { + KeyFactory keyFactory = handler.getKeyFactory(); + + assertNotNull("KeyFactory should not be null", keyFactory); + assertEquals("Algorithm should be RSA", "RSA", keyFactory.getAlgorithm()); + } + + @Test + public void shouldCreateJWKSuccessfully() throws Exception { + KeyPair keyPair = handler.generateKeyPair(); + JWK jwk = handler.createJWK(keyPair); + + assertNotNull("JWK should not be null", jwk); + assertTrue("JWK should be RSAKey", jwk instanceof RSAKey); + assertEquals("Algorithm should be RS256", JWSAlgorithm.RS256, jwk.getAlgorithm()); + } + + @Test + public void shouldCreateSignerSuccessfully() throws Exception { + KeyPair keyPair = handler.generateKeyPair(); + JWK jwk = handler.createJWK(keyPair); + JWSSigner signer = handler.createSigner(jwk); + + assertNotNull("Signer should not be null", signer); + } + + @Test(expected = ClassCastException.class) + public void shouldThrowExceptionWhenJWKIsInvalid() throws Exception { + // Create invalid JWK (not RSAKey) + KeyPair ecKeyPair = new ES256AlgorithmHandler().generateKeyPair(); + JWK invalidJwk = new ES256AlgorithmHandler().createJWK(ecKeyPair); + + handler.createSigner(invalidJwk); + } +} + diff --git a/src/test/java/io/mosip/mimoto/util/factory/SigningAlgorithmHandlerFactoryTest.java b/src/test/java/io/mosip/mimoto/util/factory/SigningAlgorithmHandlerFactoryTest.java new file mode 100644 index 000000000..fce7e01c0 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/util/factory/SigningAlgorithmHandlerFactoryTest.java @@ -0,0 +1,56 @@ +package io.mosip.mimoto.util.factory; + +import io.mosip.mimoto.constant.SigningAlgorithm; +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Test cases for SigningAlgorithmHandlerFactory. + */ +public class SigningAlgorithmHandlerFactoryTest { + + @Test + public void shouldReturnHandlerForRS256() { + SigningAlgorithmHandler handler = SigningAlgorithmHandlerFactory.getHandler(SigningAlgorithm.RS256); + + assertNotNull("Handler should not be null", handler); + assertTrue("Handler should be RS256AlgorithmHandler", handler instanceof RS256AlgorithmHandler); + } + + @Test + public void shouldReturnHandlerForES256() { + SigningAlgorithmHandler handler = SigningAlgorithmHandlerFactory.getHandler(SigningAlgorithm.ES256); + + assertNotNull("Handler should not be null", handler); + assertTrue("Handler should be ES256AlgorithmHandler", handler instanceof ES256AlgorithmHandler); + } + + @Test + public void shouldReturnHandlerForES256K() { + SigningAlgorithmHandler handler = SigningAlgorithmHandlerFactory.getHandler(SigningAlgorithm.ES256K); + + assertNotNull("Handler should not be null", handler); + assertTrue("Handler should be ES256KAlgorithmHandler", handler instanceof ES256KAlgorithmHandler); + } + + @Test + public void shouldReturnHandlerForED25519() { + SigningAlgorithmHandler handler = SigningAlgorithmHandlerFactory.getHandler(SigningAlgorithm.ED25519); + + assertNotNull("Handler should not be null", handler); + assertTrue("Handler should be ED25519AlgorithmHandler", handler instanceof Ed25519AlgorithmHandler); + } + + @Test + public void shouldThrowExceptionWhenAlgorithmIsNull() { + try { + SigningAlgorithmHandlerFactory.getHandler(null); + fail("Should have thrown IllegalArgumentException"); + } catch (IllegalArgumentException e) { + assertTrue("Exception message should mention null", + e.getMessage().contains("null") || e.getMessage().contains("Unsupported")); + } + } +} + From fdfe42f734b7aeca21fb4c2c2f5d39e678457fc5 Mon Sep 17 00:00:00 2001 From: Durgesh Konga Date: Tue, 27 Jan 2026 10:13:47 +0530 Subject: [PATCH 808/860] [INJIWEB-1818] - Update container user and folders to inji (#997) Signed-off-by: Durgesh Konga --- Dockerfile | 4 ++-- api-test/Dockerfile | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index df50a2743..623829e27 100644 --- a/Dockerfile +++ b/Dockerfile @@ -43,10 +43,10 @@ ENV artifactory_url_env=${artifactory_url} ENV iam_adapter_url_env=${iam_adapter_url} # can be passed during Docker build as build time environment for github branch to pickup configuration from. -ARG container_user=mosip +ARG container_user=inji # can be passed during Docker build as build time environment for github branch to pickup configuration from. -ARG container_user_group=mosip +ARG container_user_group=inji # can be passed during Docker build as build time environment for github branch to pickup configuration from. ARG container_user_uid=1002 diff --git a/api-test/Dockerfile b/api-test/Dockerfile index 5acccb148..a4e397b6d 100644 --- a/api-test/Dockerfile +++ b/api-test/Dockerfile @@ -10,10 +10,10 @@ LABEL commit_id=${COMMIT_ID} LABEL build_time=${BUILD_TIME} # can be passed during Docker build as build time environment for github branch to pickup configuration from. -ARG container_user=mosip +ARG container_user=inji # can be passed during Docker build as build time environment for github branch to pickup configuration from. -ARG container_user_group=mosip +ARG container_user_group=inji # can be passed during Docker build as build time environment for github branch to pickup configuration from. ARG container_user_uid=1001 From 3cebb335d934efdc39f01df289d051096ce39d41 Mon Sep 17 00:00:00 2001 From: Mahesh-Binayak <76687012+Mahesh-Binayak@users.noreply.github.com> Date: Tue, 27 Jan 2026 15:06:43 +0530 Subject: [PATCH 809/860] [DSD-9685]Update Sonar analysis workflow reference to specific commit (#998) Signed-off-by: Mahesh-Binayak <76687012+Mahesh-Binayak@users.noreply.github.com> --- .github/workflows/push-trigger.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/push-trigger.yml b/.github/workflows/push-trigger.yml index a102ddfba..a64c07566 100644 --- a/.github/workflows/push-trigger.yml +++ b/.github/workflows/push-trigger.yml @@ -74,7 +74,7 @@ jobs: sonar_analysis: needs: build-mimoto if: "${{ github.event_name != 'pull_request' }}" - uses: mosip/kattu/.github/workflows/maven-sonar-analysis.yml@master-java21 + uses: mosip/kattu/.github/workflows/maven-sonar-analysis.yml@dsd9685 with: SERVICE_LOCATION: ./ secrets: From 2c168cdcc695d3820b8ccf7c62872ac3ff599aed Mon Sep 17 00:00:00 2001 From: Rudhhi Shah Date: Wed, 28 Jan 2026 13:58:27 +0530 Subject: [PATCH 810/860] Revert "[INJIWEB-1818] - Update container user and folders to inji (#997)" (#1001) This reverts commit fdfe42f734b7aeca21fb4c2c2f5d39e678457fc5. Signed-off-by: Rudhhi Shah --- Dockerfile | 4 ++-- api-test/Dockerfile | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 623829e27..df50a2743 100644 --- a/Dockerfile +++ b/Dockerfile @@ -43,10 +43,10 @@ ENV artifactory_url_env=${artifactory_url} ENV iam_adapter_url_env=${iam_adapter_url} # can be passed during Docker build as build time environment for github branch to pickup configuration from. -ARG container_user=inji +ARG container_user=mosip # can be passed during Docker build as build time environment for github branch to pickup configuration from. -ARG container_user_group=inji +ARG container_user_group=mosip # can be passed during Docker build as build time environment for github branch to pickup configuration from. ARG container_user_uid=1002 diff --git a/api-test/Dockerfile b/api-test/Dockerfile index a4e397b6d..5acccb148 100644 --- a/api-test/Dockerfile +++ b/api-test/Dockerfile @@ -10,10 +10,10 @@ LABEL commit_id=${COMMIT_ID} LABEL build_time=${BUILD_TIME} # can be passed during Docker build as build time environment for github branch to pickup configuration from. -ARG container_user=inji +ARG container_user=mosip # can be passed during Docker build as build time environment for github branch to pickup configuration from. -ARG container_user_group=inji +ARG container_user_group=mosip # can be passed during Docker build as build time environment for github branch to pickup configuration from. ARG container_user_uid=1001 From 14f66996a33e3434307cd11c44ddb75f475a2ac6 Mon Sep 17 00:00:00 2001 From: Nitin Hegde <165893206+hegdenitin@users.noreply.github.com> Date: Fri, 30 Jan 2026 10:10:05 +0530 Subject: [PATCH 811/860] MOSIP-44096 Added additional dependancies for single test case execution (#996) * MOSIP-44096 Added additional dependancies for single test case execution Signed-off-by: Nitin Hegde * MOSIP-44096 Added additional dependancies for single test case execution Signed-off-by: Nitin Hegde * MOSIP-44096 Added additional dependancies for single test case execution Removed an additional dependency from the authorization code configuration. Signed-off-by: Nitin Hegde <165893206+hegdenitin@users.noreply.github.com> * MOSIP-44096 Added additional dependancies for single test case execution Signed-off-by: Nitin Hegde * MOSIP-44096 Added additional dependancies for single test case execution Signed-off-by: Nitin Hegde * MOSIP-44096 Added additional dependancies for single test case execution Signed-off-by: Nitin Hegde * MOSIP-44096 Added additional dependancies for single test case execution Signed-off-by: Nitin Hegde * MOSIP-44096 Added additional dependancies for single test case execution Signed-off-by: Nitin Hegde --------- Signed-off-by: Nitin Hegde Signed-off-by: Nitin Hegde <165893206+hegdenitin@users.noreply.github.com> --- .../mimoto/testrunner/MosipTestRunner.java | 18 +- .../apirig/mimoto/utils/MimotoUtil.java | 8 +- .../main/resources/config/mimoto.properties | 5 +- .../config/testCaseInterDependency.json | 259 +++++++++++++++--- .../AuthorizationCode/AuthorizationCode.yml | 3 +- .../AuthorizationCode/AuthorizationCode.yml | 2 + .../DownloadIssuerCredential.yml | 2 + .../FetchAllCredentials.yml | 4 + .../ViewCredential/ViewCredential.yml | 18 ++ .../AuthenticateUserSunBirdC.yml | 2 + .../AuthorizationCodeSunBirdC.yml | 6 +- .../DownloadIssuerCredential.yml | 5 + .../AddTrustedVerifier/AddTrustedVerifier.yml | 6 + .../VerifiablePresentationAuthorization.yml | 5 + .../GetUserProfileAfterLogout.yml | 1 + .../UnlockWalletAfterDelete.yml | 1 + .../AuthenticateUserSunBirdC.yml | 1 + 17 files changed, 300 insertions(+), 46 deletions(-) diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java index b7245770d..a69e30c93 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java @@ -56,6 +56,7 @@ public class MosipTestRunner { private static final Logger LOGGER = Logger.getLogger(MosipTestRunner.class); private static String cachedPath = null; + private static String generateDependency; public static String jarUrl = MosipTestRunner.class.getProtectionDomain().getCodeSource().getLocation().getPath(); public static List languageList = new ArrayList<>(); @@ -105,11 +106,13 @@ public static void main(String[] arg) { BiometricDataProvider.generateBiometricTestData("Registration"); String testCasesToExecuteString = MimotoConfigManager.getproperty("testCasesToExecute"); + generateDependency = MimotoConfigManager.getproperty("generateDependencyJson"); - DependencyResolver.loadDependencies(getGlobalResourcePath() + "/" + "config/testCaseInterDependency.json"); - - if (!testCasesToExecuteString.isBlank()) { - MimotoUtil.testCasesInRunScope = DependencyResolver.getDependencies(testCasesToExecuteString); + if (!"yes".equalsIgnoreCase(generateDependency)) { + if (testCasesToExecuteString != null && !testCasesToExecuteString.isBlank()) { + DependencyResolver.loadDependencies(BaseTestCase.testCaseInterDependencyPath); + MimotoUtil.testCasesInRunScope = DependencyResolver.getDependencies(testCasesToExecuteString); + } } startTestRunner(); @@ -122,11 +125,12 @@ public static void main(String[] arg) { KeycloakUserManager.closeKeycloakInstance(); OTPListener.bTerminate = true; - HealthChecker.bTerminate = true; - // Used for generating the test case interdependency JSON file - //AdminTestUtil.generateTestCaseInterDependencies(getGlobalResourcePath() + "/config/testCaseInterDependency.json"); + if ("yes".equalsIgnoreCase(generateDependency)) { + LOGGER.info("Generating test case inter-dependencies"); + AdminTestUtil.generateTestCaseInterDependencies(BaseTestCase.testCaseInterDependencyPath); + } System.exit(0); diff --git a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java index fa83bebec..a01572c12 100644 --- a/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java +++ b/api-test/src/main/java/io/mosip/testrig/apirig/mimoto/utils/MimotoUtil.java @@ -96,12 +96,18 @@ public static TestCaseDTO isTestCaseValidForTheExecution(TestCaseDTO testCaseDTO String modifiedTestCaseName = testCaseName.substring(indexof + 1); addTestCaseDetailsToMap(modifiedTestCaseName, testCaseDTO.getUniqueIdentifier()); - + if (!testCasesInRunScope.isEmpty() && testCasesInRunScope.contains(testCaseDTO.getUniqueIdentifier()) == false) { throw new SkipException(GlobalConstants.NOT_IN_RUN_SCOPE_MESSAGE); } + // Handle extra workflow dependencies + if (testCaseDTO != null && testCaseDTO.getAdditionalDependencies() != null + && AdminTestUtil.generateDependency == true) { + addAdditionalDependencies(testCaseDTO); + } + String endpoint = testCaseDTO.getEndPoint(); String inputJson = testCaseDTO.getInput(); diff --git a/api-test/src/main/resources/config/mimoto.properties b/api-test/src/main/resources/config/mimoto.properties index 6408828bc..0080d0376 100644 --- a/api-test/src/main/resources/config/mimoto.properties +++ b/api-test/src/main/resources/config/mimoto.properties @@ -92,4 +92,7 @@ moduleNamePattern = # Values: (yes/no) xssProtectionCheck = no -testCasesToExecute= \ No newline at end of file +testCasesToExecute= + +#Uncomment below line for generate dependency JSON. This works only in case of local run using IDE. +#generateDependencyJson = yes \ No newline at end of file diff --git a/api-test/src/main/resources/config/testCaseInterDependency.json b/api-test/src/main/resources/config/testCaseInterDependency.json index 7b34b542d..801949414 100644 --- a/api-test/src/main/resources/config/testCaseInterDependency.json +++ b/api-test/src/main/resources/config/testCaseInterDependency.json @@ -1,6 +1,7 @@ { "TC_Mimoto_UnlockWalletAfterDelete_01": [ "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_DeleteWallet_01", "TC_Mimoto_CreateWallet_01" ], "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_18": [ @@ -58,6 +59,14 @@ "TC_Mimoto_WalletBinding_15": ["TC_Mimoto_AddIdentity_02"], "TC_Mimoto_WalletBinding_16": ["TC_Mimoto_AddIdentity_02"], "TC_Mimoto_WalletBinding_17": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_AuthorizationCodeSunBirdCForGoogleLogin_02": [ + "TC_Mimoto_OAuthDetailsRequestSunBirdCForGoogleLogin_02", + "TC_Mimoto_AuthenticateUserSunBirdCForGoogleLogin_02" + ], + "TC_Mimoto_AuthorizationCodeSunBirdCForGoogleLogin_01": [ + "TC_Mimoto_OAuthDetailsRequestSunBirdCForGoogleLogin_01", + "TC_Mimoto_AuthenticateUserSunBirdCForGoogleLogin_01" + ], "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_09": [ "TC_Mimoto_GoogleLoginToken_01", "TC_Mimoto_CreateWallet_01", @@ -73,10 +82,6 @@ "TC_Mimoto_CreateWallet_01", "TC_Mimoto_AuthorizationCodeForGoogleLogin_02" ], - "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_05": [ - "TC_Mimoto_GoogleLoginToken_01", - "TC_Mimoto_AuthorizationCodeForGoogleLogin_02" - ], "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_06": [ "TC_Mimoto_GoogleLoginToken_01", "TC_Mimoto_AuthorizationCodeForGoogleLogin_02" @@ -94,23 +99,24 @@ "TC_Mimoto_WalletBinding_09": ["TC_Mimoto_AddIdentity_02"], "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_01": [ "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_UnlockWallet_01", "TC_Mimoto_CreateWallet_01", "TC_Mimoto_AuthorizationCodeForGoogleLogin_01" ], "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_02": [ "TC_Mimoto_GoogleLoginToken_01", "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_01", "TC_Mimoto_AuthorizationCodeForGoogleLogin_02" ], "TC_Mimoto_WalletBinding_01": ["TC_Mimoto_AddIdentity_02"], - "TC_Mimoto_WalletBinding_02": [ - "TC_Mimoto_AddIdentity_02", - "TC_Mimoto_GenerateVID_06" - ], "TC_Mimoto_WalletBinding_03": ["TC_Mimoto_AddIdentity_02"], "TC_Mimoto_WalletBinding_04": ["TC_Mimoto_AddIdentity_02"], "TC_Mimoto_WalletBinding_05": ["TC_Mimoto_AddIdentity_02"], - "TC_Mimoto_AuthorizationCode_01": ["TC_Mimoto_OAuthDetailsRequest_01"], + "TC_Mimoto_AuthorizationCode_01": [ + "TC_Mimoto_AuthenticateUser_01", + "TC_Mimoto_OAuthDetailsRequest_01" + ], "TC_Mimoto_WalletBinding_06": ["TC_Mimoto_AddIdentity_02"], "TC_Mimoto_UnlockWallet_01": [ "TC_Mimoto_GoogleLoginToken_01", @@ -198,7 +204,10 @@ "TC_Mimoto_CreateWallet_01", "TC_Mimoto_AuthorizationCodeForGoogleLogin_02" ], - "TC_Mimoto_AuthenticateUserSunBirdC_01": ["TC_Mimoto_OAuthDetailsRequestSunBirdC_01"], + "TC_Mimoto_AuthenticateUserSunBirdC_01": [ + "TC_Mimoto_CreatePolicySunBirdR_01", + "TC_Mimoto_OAuthDetailsRequestSunBirdC_01" + ], "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_26": [ "TC_Mimoto_GoogleLoginToken_01", "TC_Mimoto_CreateWallet_01", @@ -231,10 +240,36 @@ ], "TC_Mimoto_GetPolicySunBirdR_01": ["TC_Mimoto_CreatePolicySunBirdR_01"], "TC_Mimoto_CreateWallet_19": ["TC_Mimoto_GoogleLoginToken_01"], + "TC_Mimoto_AddTrustedVerifier_07": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_UnlockWallet_01", + "TC_Mimoto_VerifiablePresentationAuthorization_01", + "TC_Mimoto_CreateWallet_01" + ], "TC_Mimoto_CreateWallet_16": ["TC_Mimoto_GoogleLoginToken_01"], + "TC_Mimoto_AddTrustedVerifier_06": [ + "TC_Mimoto_UnlockWallet_01", + "TC_Mimoto_VerifiablePresentationAuthorization_01", + "TC_Mimoto_CreateWallet_01" + ], "TC_Mimoto_CreateWallet_15": ["TC_Mimoto_GoogleLoginToken_01"], + "TC_Mimoto_AddTrustedVerifier_05": [ + "TC_Mimoto_GoogleLoginToken_06", + "TC_Mimoto_VerifiablePresentationAuthorization_01", + "TC_Mimoto_CreateWallet_23" + ], "TC_Mimoto_CreateWallet_18": ["TC_Mimoto_GoogleLoginToken_01"], + "TC_Mimoto_AddTrustedVerifier_04": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_UnlockWallet_01", + "TC_Mimoto_VerifiablePresentationAuthorization_01" + ], "TC_Mimoto_CreateWallet_17": ["TC_Mimoto_GoogleLoginToken_01"], + "TC_Mimoto_AddTrustedVerifier_03": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_UnlockWallet_01", + "TC_Mimoto_VerifiablePresentationAuthorization_01" + ], "TC_Mimoto_CreateWallet_12": ["TC_Mimoto_GoogleLoginToken_01"], "TC_Mimoto_CreateWallet_11": ["TC_Mimoto_GoogleLoginToken_01"], "TC_Mimoto_CreateWallet_14": ["TC_Mimoto_GoogleLoginToken_01"], @@ -268,7 +303,6 @@ "TC_Mimoto_AddIdentity_02", "TC_Mimoto_GenerateVID_06" ], - "TC_Mimoto_BindingOtp_02": ["TC_Mimoto_GenerateVID_06"], "TC_Mimoto_WalletBinding_53": [ "TC_Mimoto_AddIdentity_02", "TC_Mimoto_GenerateVID_06" @@ -276,6 +310,7 @@ "TC_Mimoto_GenerateVID_01": ["TC_Mimoto_AddIdentity_01"], "TC_Mimoto_GenerateVID_06": ["TC_Mimoto_AddIdentity_02"], "TC_Mimoto_GenerateVID_04": ["TC_Mimoto_AddIdentity_01"], + "TC_Mimoto_CreateWallet_23": ["TC_Mimoto_GoogleLoginToken_06"], "TC_Mimoto_CreateWallet_22": ["TC_Mimoto_GoogleLoginToken_01"], "TC_Mimoto_CreateWallet_21": ["TC_Mimoto_GoogleLoginToken_01"], "TC_Mimoto_GetUserProfile_01": ["TC_Mimoto_GoogleLoginToken_01"], @@ -321,11 +356,28 @@ "TC_Mimoto_CreateWallet_01" ], "TC_Mimoto_BindingOtp_10": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_AddTrustedVerifier_02": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_UnlockWallet_01", + "TC_Mimoto_CreateWallet_01" + ], "TC_Mimoto_DeleteWallet_03": ["TC_Mimoto_GoogleLoginToken_01"], "TC_Mimoto_BindingOtp_11": ["TC_Mimoto_AddIdentity_02"], - "TC_Mimoto_AuthorizationCodeForGoogleLogin_01": ["TC_Mimoto_OAuthDetailsRequestForGoogleLogin_01"], + "TC_Mimoto_AddTrustedVerifier_01": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_UnlockWallet_01", + "TC_Mimoto_VerifiablePresentationAuthorization_01", + "TC_Mimoto_CreateWallet_01" + ], + "TC_Mimoto_AuthorizationCodeForGoogleLogin_01": [ + "TC_Mimoto_OAuthDetailsRequestForGoogleLogin_01", + "TC_Mimoto_AuthenticateUserForGoogleLogin_01" + ], "TC_Mimoto_DeleteWallet_04": ["TC_Mimoto_GoogleLoginToken_01"], - "TC_Mimoto_AuthorizationCodeForGoogleLogin_02": ["TC_Mimoto_OAuthDetailsRequestForGoogleLogin_02"], + "TC_Mimoto_AuthorizationCodeForGoogleLogin_02": [ + "TC_Mimoto_AuthenticateUserForGoogleLogin_02", + "TC_Mimoto_OAuthDetailsRequestForGoogleLogin_02" + ], "TC_Mimoto_DeleteWallet_05": ["TC_Mimoto_GoogleLoginToken_01"], "TC_Mimoto_DeleteWallet_06": ["TC_Mimoto_CreateWallet_01"], "TC_Mimoto_BindingOtp_14": ["TC_Mimoto_AddIdentity_02"], @@ -342,16 +394,83 @@ "TC_Mimoto_GenerateVID_06" ], "TC_Mimoto_AuthLock_07": ["TC_Mimoto_AddIdentity_02"], - "TC_Mimoto_AuthenticateUserSunBirdCForGoogleLogin_01": ["TC_Mimoto_OAuthDetailsRequestSunBirdCForGoogleLogin_01"], - "TC_Mimoto_AuthenticateUserSunBirdCForGoogleLogin_02": ["TC_Mimoto_OAuthDetailsRequestSunBirdCForGoogleLogin_02"], + "TC_Mimoto_AuthenticateUserSunBirdCForGoogleLogin_01": [ + "TC_Mimoto_OAuthDetailsRequestSunBirdCForGoogleLogin_01", + "TC_Mimoto_CreatePolicySunBirdR_01" + ], + "TC_Mimoto_AuthenticateUserSunBirdCForGoogleLogin_02": [ + "TC_Mimoto_OAuthDetailsRequestSunBirdCForGoogleLogin_02", + "TC_Mimoto_CreatePolicySunBirdR_01" + ], "TC_Mimoto_WalletBinding_32": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_VerifiablePresentationAuthorization_03": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_UnlockWallet_01", + "TC_InjiVerify_InjiVerifyVpRequest_01" + ], + "TC_Mimoto_RejectPresentation_04": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01" + ], "TC_Mimoto_WalletBinding_33": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_VerifiablePresentationAuthorization_04": [ + "TC_Mimoto_GoogleLoginToken_06", + "TC_Mimoto_CreateWallet_23", + "TC_InjiVerify_InjiVerifyVpRequest_01" + ], + "TC_Mimoto_RejectPresentation_05": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01" + ], "TC_Mimoto_WalletBinding_34": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_VerifiablePresentationAuthorization_05": [ + "TC_Mimoto_UnlockWallet_01", + "TC_Mimoto_CreateWallet_01", + "TC_InjiVerify_InjiVerifyVpRequest_01" + ], + "TC_Mimoto_RejectPresentation_06": [ + "TC_Mimoto_GoogleLoginToken_06", + "TC_Mimoto_VerifiablePresentationAuthorization_01", + "TC_Mimoto_CreateWallet_23" + ], "TC_Mimoto_WalletBinding_35": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_VerifiablePresentationAuthorization_06": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_UnlockWallet_01", + "TC_InjiVerify_InjiVerifyVpRequest_01" + ], + "TC_Mimoto_RejectPresentation_07": [ + "TC_Mimoto_VerifiablePresentationAuthorization_01", + "TC_Mimoto_CreateWallet_01" + ], "TC_Mimoto_WalletBinding_36": ["TC_Mimoto_AddIdentity_02"], "TC_Mimoto_WalletBinding_37": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_RejectPresentation_01": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_VerifiablePresentationAuthorization_01", + "TC_Mimoto_CreateWallet_01" + ], "TC_Mimoto_WalletBinding_38": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_VerifiablePresentationAuthorization_01": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_UnlockWallet_01", + "TC_Mimoto_CreateWallet_01", + "TC_InjiVerify_InjiVerifyVpRequest_01" + ], + "TC_Mimoto_RejectPresentation_02": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_VerifiablePresentationAuthorization_01" + ], "TC_Mimoto_WalletBinding_39": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_VerifiablePresentationAuthorization_02": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_UnlockWallet_01", + "TC_Mimoto_CreateWallet_01" + ], + "TC_Mimoto_RejectPresentation_03": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_VerifiablePresentationAuthorization_01" + ], "TC_Mimoto_WalletBinding_30": ["TC_Mimoto_AddIdentity_02"], "TC_Mimoto_WalletBinding_31": ["TC_Mimoto_AddIdentity_02"], "TC_Mimoto_CreateWallet_09": ["TC_Mimoto_GoogleLoginToken_01"], @@ -368,20 +487,26 @@ "TC_Mimoto_WalletBinding_22": ["TC_Mimoto_AddIdentity_02"], "TC_Mimoto_WalletBinding_23": ["TC_Mimoto_AddIdentity_02"], "TC_Mimoto_WalletBinding_24": ["TC_Mimoto_AddIdentity_02"], + "TC_Mimoto_UnlockWalletForTemporarilyLock_01": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01" + ], "TC_Mimoto_WalletBinding_25": ["TC_Mimoto_AddIdentity_02"], "TC_Mimoto_WalletBinding_26": ["TC_Mimoto_AddIdentity_02"], "TC_Mimoto_WalletBinding_27": ["TC_Mimoto_AddIdentity_02"], "TC_Mimoto_WalletBinding_28": ["TC_Mimoto_AddIdentity_02"], "TC_Mimoto_WalletBinding_20": ["TC_Mimoto_AddIdentity_02"], "TC_Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_02": [ - "TC_Mimoto_AuthorizationCodeSunBirdC_02", "TC_Mimoto_GoogleLoginToken_01", - "TC_Mimoto_CreateWallet_01" + "TC_Mimoto_UnlockWallet_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_AuthorizationCodeSunBirdCForGoogleLogin_02" ], "TC_Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_03": [ "TC_Mimoto_GoogleLoginToken_01", - "TC_Mimoto_AuthorizationCodeSunBirdC_01", - "TC_Mimoto_CreateWallet_01" + "TC_Mimoto_UnlockWallet_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_AuthorizationCodeSunBirdCForGoogleLogin_01" ], "TC_Mimoto_AuthenticateUser_01": [ "TC_Mimoto_AddIdentity_03", @@ -389,10 +514,14 @@ ], "TC_Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_01": [ "TC_Mimoto_GoogleLoginToken_01", - "TC_Mimoto_AuthorizationCodeSunBirdC_01", - "TC_Mimoto_CreateWallet_01" + "TC_Mimoto_UnlockWallet_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_AuthorizationCodeSunBirdCForGoogleLogin_01" + ], + "TC_Mimoto_GetUserProfileAfterLogout_01": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_Logout_01" ], - "TC_Mimoto_GetUserProfileAfterLogout_01": ["TC_Mimoto_GoogleLoginToken_01"], "TC_Mimoto_AuthenticateUserForGoogleLogin_01": [ "TC_Mimoto_AddIdentity_03", "TC_Mimoto_OAuthDetailsRequestForGoogleLogin_01" @@ -401,11 +530,7 @@ "TC_Mimoto_AddIdentity_03", "TC_Mimoto_OAuthDetailsRequestForGoogleLogin_02" ], - "TC_Mimoto_AuthorizationCodeSunBirdC_02": ["TC_Mimoto_OAuthDetailsRequestSunBirdCForGoogleLogin_02"], - "TC_Mimoto_AuthorizationCodeSunBirdC_01": [ - "TC_Mimoto_OAuthDetailsRequestSunBirdCForGoogleLogin_01", - "TC_Mimoto_OAuthDetailsRequestSunBirdC_01" - ], + "TC_Mimoto_AuthorizationCodeSunBirdC_01": ["TC_Mimoto_OAuthDetailsRequestSunBirdC_01"], "TC_Mimoto_DownloadIssuerCredential_02": ["TC_Mimoto_AuthorizationCode_01"], "TC_Mimoto_BindingOtp_29": ["TC_Mimoto_GenerateVID_06"], "TC_Mimoto_WalletBinding_76": [ @@ -494,8 +619,9 @@ ], "TC_Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_04": [ "TC_Mimoto_GoogleLoginToken_01", - "TC_Mimoto_AuthorizationCodeSunBirdC_01", - "TC_Mimoto_CreateWallet_01" + "TC_Mimoto_UnlockWallet_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_AuthorizationCodeSunBirdCForGoogleLogin_01" ], "TC_Mimoto_BindingOtp_35": ["TC_Mimoto_GenerateVID_06"], "TC_Mimoto_WalletBinding_64": [ @@ -504,10 +630,50 @@ ], "TC_Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_05": [ "TC_Mimoto_GoogleLoginToken_01", - "TC_Mimoto_AuthorizationCodeSunBirdC_01", - "TC_Mimoto_CreateWallet_01" + "TC_Mimoto_UnlockWallet_01", + "TC_Mimoto_CreateWallet_01", + "TC_Mimoto_AuthorizationCodeSunBirdCForGoogleLogin_01" ], "TC_Mimoto_DeletePolicySunBirdR_01": ["TC_Mimoto_CreatePolicySunBirdR_01"], + "TC_Mimoto_GetCredentialsForPresentation_10": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01" + ], + "TC_Mimoto_GetCredentialsForPresentation_09": [ + "TC_Mimoto_GoogleLoginToken_06", + "TC_Mimoto_VerifiablePresentationAuthorization_01", + "TC_Mimoto_CreateWallet_23" + ], + "TC_Mimoto_GetCredentialsForPresentation_08": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_VerifiablePresentationAuthorization_01" + ], + "TC_Mimoto_GetCredentialsForPresentation_03": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_CreateWallet_01" + ], + "TC_Mimoto_GetCredentialsForPresentation_02": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_VerifiablePresentationAuthorization_01" + ], + "TC_Mimoto_GetCredentialsForPresentation_01": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_VerifiablePresentationAuthorization_01", + "TC_Mimoto_CreateWallet_01" + ], + "TC_Mimoto_GetCredentialsForPresentation_07": ["TC_Mimoto_GoogleLoginToken_01"], + "TC_Mimoto_GetCredentialsForPresentation_06": [ + "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_VerifiablePresentationAuthorization_01" + ], + "TC_Mimoto_GetCredentialsForPresentation_05": [ + "TC_Mimoto_VerifiablePresentationAuthorization_01", + "TC_Mimoto_CreateWallet_01" + ], + "TC_Mimoto_GetCredentialsForPresentation_04": [ + "TC_Mimoto_VerifiablePresentationAuthorization_01", + "TC_Mimoto_CreateWallet_01" + ], "TC_Mimoto_DeleteCredentials_03": [ "TC_Mimoto_GoogleLoginToken_01", "TC_Mimoto_CreateWallet_01" @@ -523,15 +689,18 @@ "TC_Mimoto_CreateWallet_01" ], "TC_Mimoto_ViewCredential_17": [ + "TC_Mimoto_UnlockWallet_01", "TC_Mimoto_CreateWallet_01", "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_01" ], "TC_Mimoto_FetchAllCredentials_01": [ "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_UnlockWallet_01", "TC_Mimoto_CreateWallet_01" ], "TC_Mimoto_ViewCredential_16": [ "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_UnlockWallet_01", "TC_Mimoto_CreateWallet_01", "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_01" ], @@ -543,6 +712,7 @@ "TC_Mimoto_FetchAllCredentials_02": ["TC_Mimoto_GoogleLoginToken_01"], "TC_Mimoto_ViewCredential_15": [ "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_UnlockWallet_01", "TC_Mimoto_CreateWallet_01", "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_01" ], @@ -550,9 +720,10 @@ "TC_Mimoto_GoogleLoginToken_01", "TC_Mimoto_CreateWallet_01" ], - "TC_Mimoto_FetchAllCredentials_03": ["TC_Mimoto_GoogleLoginToken_01"], + "TC_Mimoto_FetchAllCredentials_03": ["TC_Mimoto_UnlockWallet_01"], "TC_Mimoto_ViewCredential_14": [ "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_UnlockWallet_01", "TC_Mimoto_CreateWallet_01", "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_01" ], @@ -561,12 +732,18 @@ "TC_Mimoto_GoogleLoginToken_01" ], "TC_Mimoto_FetchAllCredentials_04": ["TC_Mimoto_GoogleLoginToken_01"], - "TC_Mimoto_FetchAllCredentials_05": ["TC_Mimoto_CreateWallet_01"], + "TC_Mimoto_FetchAllCredentials_05": [ + "TC_Mimoto_UnlockWallet_01", + "TC_Mimoto_CreateWallet_01" + ], "TC_Mimoto_FetchAllCredentials_06": [ "TC_Mimoto_GoogleLoginToken_01", "TC_Mimoto_CreateWallet_02" ], - "TC_Mimoto_FetchAllCredentials_07": ["TC_Mimoto_CreateWallet_01"], + "TC_Mimoto_FetchAllCredentials_07": [ + "TC_Mimoto_UnlockWallet_01", + "TC_Mimoto_CreateWallet_01" + ], "TC_Mimoto_DeleteCredentials_08": [ "TC_Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_01", "TC_Mimoto_CreateWallet_01" @@ -578,60 +755,74 @@ ], "TC_Mimoto_ViewCredential_13": [ "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_UnlockWallet_01", "TC_Mimoto_CreateWallet_01", "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_01" ], "TC_Mimoto_ViewCredential_12": [ "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_UnlockWallet_01", "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_01" ], "TC_Mimoto_ViewCredential_11": [ "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_UnlockWallet_01", "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_01" ], "TC_Mimoto_ViewCredential_10": [ "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_UnlockWallet_01", "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_01" ], "TC_Mimoto_ViewCredential_06": [ "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_UnlockWallet_01", "TC_Mimoto_CreateWallet_01", "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_01" ], "TC_Mimoto_ViewCredential_05": [ "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_UnlockWallet_01", "TC_Mimoto_CreateWallet_01", "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_01" ], "TC_Mimoto_ViewCredential_04": [ "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_UnlockWallet_01", "TC_Mimoto_CreateWallet_01", "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_01" ], "TC_Mimoto_ViewCredential_03": [ "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_UnlockWallet_01", "TC_Mimoto_CreateWallet_01", "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_01" ], "TC_Mimoto_ViewCredential_09": [ "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_UnlockWallet_01", "TC_Mimoto_CreateWallet_01" ], "TC_Mimoto_ViewCredential_08": [ "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_UnlockWallet_01", "TC_Mimoto_CreateWallet_01" ], "TC_Mimoto_ViewCredential_07": [ "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_UnlockWallet_01", "TC_Mimoto_CreateWallet_01" ], "TC_Mimoto_ViewCredential_02": [ "TC_Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_01", "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_UnlockWallet_01", + "TC_Mimoto_AuthorizationCodeSunBirdC_01", "TC_Mimoto_CreateWallet_01" ], "TC_Mimoto_ViewCredential_01": [ "TC_Mimoto_GoogleLoginToken_01", + "TC_Mimoto_UnlockWallet_01", "TC_Mimoto_CreateWallet_01", "TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_01" ] diff --git a/api-test/src/main/resources/mimoto/AuthorizationCode/AuthorizationCode.yml b/api-test/src/main/resources/mimoto/AuthorizationCode/AuthorizationCode.yml index ff8c224a9..250803505 100644 --- a/api-test/src/main/resources/mimoto/AuthorizationCode/AuthorizationCode.yml +++ b/api-test/src/main/resources/mimoto/AuthorizationCode/AuthorizationCode.yml @@ -5,6 +5,7 @@ AuthorizationCode: uniqueIdentifier: TC_Mimoto_AuthorizationCode_01 role: resident restMethod: post + additionalDependencies: TC_Mimoto_AuthenticateUser_01 checkErrorsOnlyInResponse: true validityCheckRequired: true inputTemplate: mimoto/AuthorizationCode/AuthorizationCode @@ -15,4 +16,4 @@ AuthorizationCode: "transactionId": "$ID:ESignet_OAuthDetailsRequest_all_Valid_Smoke_sid_transactionId$" }' output: '{ -}' \ No newline at end of file +}' diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthorizationCode/AuthorizationCode.yml b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthorizationCode/AuthorizationCode.yml index ce5e45db3..ac618babd 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthorizationCode/AuthorizationCode.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthorizationCode/AuthorizationCode.yml @@ -5,6 +5,7 @@ AuthorizationCodeForGoogleLogin: uniqueIdentifier: TC_Mimoto_AuthorizationCodeForGoogleLogin_01 role: resident restMethod: post + additionalDependencies: TC_Mimoto_AuthenticateUserForGoogleLogin_01 checkErrorsOnlyInResponse: true validityCheckRequired: true inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthorizationCode/AuthorizationCode @@ -23,6 +24,7 @@ AuthorizationCodeForGoogleLogin: uniqueIdentifier: TC_Mimoto_AuthorizationCodeForGoogleLogin_02 role: resident restMethod: post + additionalDependencies: TC_Mimoto_AuthenticateUserForGoogleLogin_02 checkErrorsOnlyInResponse: true validityCheckRequired: true inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthorizationCode/AuthorizationCode diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential.yml b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential.yml index e2b548db5..e3a53d971 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential.yml @@ -5,6 +5,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_01 role: userDefinedCookie restMethod: get + additionalDependencies: TC_Mimoto_UnlockWallet_01 inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential outputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredentialResult input: '{ @@ -29,6 +30,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_02 role: userDefinedCookie restMethod: get + additionalDependencies: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_01 inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential outputTemplate: mimoto/error2 input: '{ diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/FetchAllCredentials/FetchAllCredentials.yml b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/FetchAllCredentials/FetchAllCredentials.yml index b82553c1b..bfa1bda5b 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/FetchAllCredentials/FetchAllCredentials.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/FetchAllCredentials/FetchAllCredentials.yml @@ -5,6 +5,7 @@ FetchAllCredentials: uniqueIdentifier: TC_Mimoto_FetchAllCredentials_01 role: userDefinedCookie restMethod: get + additionalDependencies: TC_Mimoto_UnlockWallet_01 checkErrorsOnlyInResponse: true inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/FetchAllCredentials/FetchAllCredentials outputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/FetchAllCredentials/FetchAllCredentials @@ -40,6 +41,7 @@ FetchAllCredentials: uniqueIdentifier: TC_Mimoto_FetchAllCredentials_03 role: userDefinedCookie restMethod: get + additionalDependencies: TC_Mimoto_UnlockWallet_01 inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/FetchAllCredentials/FetchAllCredentials outputTemplate: mimoto/error2 input: '{ @@ -74,6 +76,7 @@ FetchAllCredentials: uniqueIdentifier: TC_Mimoto_FetchAllCredentials_05 role: userDefinedCookie restMethod: get + additionalDependencies: TC_Mimoto_UnlockWallet_01 checkOnlyStatusCodeInResponse: true inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/FetchAllCredentials/FetchAllCredentials outputTemplate: mimoto/responseCode @@ -109,6 +112,7 @@ FetchAllCredentials: uniqueIdentifier: TC_Mimoto_FetchAllCredentials_07 role: userDefinedCookie restMethod: get + additionalDependencies: TC_Mimoto_UnlockWallet_01 checkOnlyStatusCodeInResponse: true inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/FetchAllCredentials/FetchAllCredentials outputTemplate: mimoto/responseCode diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential.yml b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential.yml index c474c8877..fcfc9676a 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential.yml @@ -5,6 +5,7 @@ ViewCredential: uniqueIdentifier: TC_Mimoto_ViewCredential_01 role: userDefinedCookie restMethod: get + additionalDependencies: TC_Mimoto_UnlockWallet_01 checkErrorsOnlyInResponse: true inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential outputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential @@ -25,6 +26,7 @@ ViewCredential: uniqueIdentifier: TC_Mimoto_ViewCredential_02 role: userDefinedCookie restMethod: get + additionalDependencies: TC_Mimoto_UnlockWallet_01,TC_Mimoto_AuthorizationCodeSunBirdC_01 checkErrorsOnlyInResponse: true inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential outputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential @@ -45,6 +47,7 @@ ViewCredential: uniqueIdentifier: TC_Mimoto_ViewCredential_03 role: userDefinedCookie restMethod: get + additionalDependencies: TC_Mimoto_UnlockWallet_01 checkErrorsOnlyInResponse: true inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential outputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential @@ -65,6 +68,7 @@ ViewCredential: uniqueIdentifier: TC_Mimoto_ViewCredential_04 role: userDefinedCookie restMethod: get + additionalDependencies: TC_Mimoto_UnlockWallet_01 checkErrorsOnlyInResponse: true inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential outputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential @@ -85,6 +89,7 @@ ViewCredential: uniqueIdentifier: TC_Mimoto_ViewCredential_05 role: userDefinedCookie restMethod: get + additionalDependencies: TC_Mimoto_UnlockWallet_01 checkErrorsOnlyInResponse: true inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential outputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential @@ -105,6 +110,7 @@ ViewCredential: uniqueIdentifier: TC_Mimoto_ViewCredential_06 role: userDefinedCookie restMethod: get + additionalDependencies: TC_Mimoto_UnlockWallet_01 checkOnlyStatusCodeInResponse: true inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential outputTemplate: mimoto/responseCode @@ -126,6 +132,7 @@ ViewCredential: uniqueIdentifier: TC_Mimoto_ViewCredential_07 role: userDefinedCookie restMethod: get + additionalDependencies: TC_Mimoto_UnlockWallet_01 inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential outputTemplate: mimoto/error2 input: '{ @@ -146,6 +153,7 @@ ViewCredential: uniqueIdentifier: TC_Mimoto_ViewCredential_08 role: userDefinedCookie restMethod: get + additionalDependencies: TC_Mimoto_UnlockWallet_01 checkOnlyStatusCodeInResponse: true inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential outputTemplate: mimoto/responseCode @@ -167,6 +175,7 @@ ViewCredential: uniqueIdentifier: TC_Mimoto_ViewCredential_09 role: userDefinedCookie restMethod: get + additionalDependencies: TC_Mimoto_UnlockWallet_01 checkOnlyStatusCodeInResponse: true inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential outputTemplate: mimoto/responseCode @@ -188,6 +197,7 @@ ViewCredential: uniqueIdentifier: TC_Mimoto_ViewCredential_10 role: userDefinedCookie restMethod: get + additionalDependencies: TC_Mimoto_UnlockWallet_01 inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential outputTemplate: mimoto/error2 input: '{ @@ -208,6 +218,7 @@ ViewCredential: uniqueIdentifier: TC_Mimoto_ViewCredential_11 role: userDefinedCookie restMethod: get + additionalDependencies: TC_Mimoto_UnlockWallet_01 checkOnlyStatusCodeInResponse: true inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential outputTemplate: mimoto/responseCode @@ -229,6 +240,7 @@ ViewCredential: uniqueIdentifier: TC_Mimoto_ViewCredential_12 role: userDefinedCookie restMethod: get + additionalDependencies: TC_Mimoto_UnlockWallet_01 checkOnlyStatusCodeInResponse: true inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential outputTemplate: mimoto/responseCode @@ -250,6 +262,7 @@ ViewCredential: uniqueIdentifier: TC_Mimoto_ViewCredential_13 role: userDefinedCookie restMethod: get + additionalDependencies: TC_Mimoto_UnlockWallet_01 inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential outputTemplate: mimoto/error2 input: '{ @@ -270,6 +283,7 @@ ViewCredential: uniqueIdentifier: TC_Mimoto_ViewCredential_14 role: userDefinedCookie restMethod: get + additionalDependencies: TC_Mimoto_UnlockWallet_01 inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential outputTemplate: mimoto/error2 input: '{ @@ -290,6 +304,7 @@ ViewCredential: uniqueIdentifier: TC_Mimoto_ViewCredential_14 role: userDefinedCookie restMethod: get + additionalDependencies: TC_Mimoto_UnlockWallet_01 inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential outputTemplate: mimoto/error2 input: '{ @@ -310,6 +325,7 @@ ViewCredential: uniqueIdentifier: TC_Mimoto_ViewCredential_15 role: userDefinedCookie restMethod: get + additionalDependencies: TC_Mimoto_UnlockWallet_01 inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential outputTemplate: mimoto/error2 input: '{ @@ -330,6 +346,7 @@ ViewCredential: uniqueIdentifier: TC_Mimoto_ViewCredential_16 role: userDefinedCookie restMethod: get + additionalDependencies: TC_Mimoto_UnlockWallet_01 inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential outputTemplate: mimoto/error2 input: '{ @@ -350,6 +367,7 @@ ViewCredential: uniqueIdentifier: TC_Mimoto_ViewCredential_17 role: userDefinedCookie restMethod: get + additionalDependencies: TC_Mimoto_UnlockWallet_01 checkOnlyStatusCodeInResponse: true inputTemplate: mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential outputTemplate: mimoto/responseCode diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml index 36176f49b..70e8e255e 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml @@ -5,6 +5,7 @@ AuthenticateUserSunBirdCForGoogleLogin: uniqueIdentifier: TC_Mimoto_AuthenticateUserSunBirdCForGoogleLogin_01 role: resident restMethod: post + additionalDependencies: TC_Mimoto_CreatePolicySunBirdR_01 checkErrorsOnlyInResponse: true validityCheckRequired: true inputTemplate: mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC @@ -27,6 +28,7 @@ AuthenticateUserSunBirdCForGoogleLogin: uniqueIdentifier: TC_Mimoto_AuthenticateUserSunBirdCForGoogleLogin_02 role: resident restMethod: post + additionalDependencies: TC_Mimoto_CreatePolicySunBirdR_01 checkErrorsOnlyInResponse: true validityCheckRequired: true inputTemplate: mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.yml b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.yml index aeb203528..8b66cabe3 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.yml @@ -2,9 +2,10 @@ AuthorizationCodeSunBirdCForGoogleLogin: Mimoto_ESignet_AuthorizationCode_SunBirdCForGoogleLogin_SunBirdC_All_Valid_Smoke_sid: endPoint: $ESIGNETMOCKBASEURL$/v1/esignet/authorization/auth-code description: Generating authorization code for downloading sunbird VC with google login - uniqueIdentifier: TC_Mimoto_AuthorizationCodeSunBirdC_01 + uniqueIdentifier: TC_Mimoto_AuthorizationCodeSunBirdCForGoogleLogin_01 role: resident restMethod: post + additionalDependencies: TC_Mimoto_AuthenticateUserSunBirdCForGoogleLogin_01 checkErrorsOnlyInResponse: true validityCheckRequired: true inputTemplate: mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC @@ -21,9 +22,10 @@ AuthorizationCodeSunBirdCForGoogleLogin: Mimoto_ESignet_AuthorizationCode_SunBirdCForGoogleLogin_MultipleVC_SunBirdC_All_Valid_Smoke_sid: endPoint: $ESIGNETMOCKBASEURL$/v1/esignet/authorization/auth-code description: Generating authorization code for downloading multiple sunbird VC with google login - uniqueIdentifier: TC_Mimoto_AuthorizationCodeSunBirdC_02 + uniqueIdentifier: TC_Mimoto_AuthorizationCodeSunBirdCForGoogleLogin_02 role: resident restMethod: post + additionalDependencies: TC_Mimoto_AuthenticateUserSunBirdCForGoogleLogin_02 checkErrorsOnlyInResponse: true validityCheckRequired: true inputTemplate: mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/DownloadIssuerCredential/DownloadIssuerCredential.yml b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/DownloadIssuerCredential/DownloadIssuerCredential.yml index 1f4be6bb5..1f7be3d16 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/DownloadIssuerCredential/DownloadIssuerCredential.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/DownloadIssuerCredential/DownloadIssuerCredential.yml @@ -5,6 +5,7 @@ DownloadStayProtectedIssuerCredentialWithGoogleLogin: uniqueIdentifier: TC_Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_01 role: userDefinedCookie restMethod: get + additionalDependencies: TC_Mimoto_UnlockWallet_01 inputTemplate: mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/DownloadIssuerCredential/DownloadIssuerCredential outputTemplate: mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/DownloadIssuerCredential/DownloadIssuerCredentialResult input: '{ @@ -30,6 +31,7 @@ DownloadStayProtectedIssuerCredentialWithGoogleLogin: uniqueIdentifier: TC_Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_02 role: userDefinedCookie restMethod: get + additionalDependencies: TC_Mimoto_UnlockWallet_01 inputTemplate: mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/DownloadIssuerCredential/DownloadIssuerCredential outputTemplate: mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/DownloadIssuerCredential/DownloadIssuerCredentialResult input: '{ @@ -55,6 +57,7 @@ DownloadStayProtectedIssuerCredentialWithGoogleLogin: uniqueIdentifier: TC_Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_03 role: userDefinedCookie restMethod: get + additionalDependencies: TC_Mimoto_UnlockWallet_01 inputTemplate: mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/DownloadIssuerCredential/DownloadIssuerCredential outputTemplate: mimoto/error2 input: '{ @@ -79,6 +82,7 @@ DownloadStayProtectedIssuerCredentialWithGoogleLogin: uniqueIdentifier: TC_Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_04 role: userDefinedCookie restMethod: get + additionalDependencies: TC_Mimoto_UnlockWallet_01 inputTemplate: mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/DownloadIssuerCredential/DownloadIssuerCredential outputTemplate: mimoto/error2 input: '{ @@ -103,6 +107,7 @@ DownloadStayProtectedIssuerCredentialWithGoogleLogin: uniqueIdentifier: TC_Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_05 role: userDefinedCookie restMethod: get + additionalDependencies: TC_Mimoto_UnlockWallet_01 inputTemplate: mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/DownloadIssuerCredential/DownloadIssuerCredential outputTemplate: mimoto/error2 input: '{ diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifier.yml b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifier.yml index ad7dfafaf..91a1e122e 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifier.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifier.yml @@ -5,6 +5,7 @@ AddTrustedVerifier: uniqueIdentifier: TC_Mimoto_AddTrustedVerifier_01 role: userDefinedCookie restMethod: post + additionalDependencies: TC_Mimoto_UnlockWallet_01 checkErrorsOnlyInResponse: true inputTemplate: mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifier outputTemplate: mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifierResult @@ -23,6 +24,7 @@ AddTrustedVerifier: uniqueIdentifier: TC_Mimoto_AddTrustedVerifier_02 role: userDefinedCookie restMethod: post + additionalDependencies: TC_Mimoto_UnlockWallet_01 inputTemplate: mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifier outputTemplate: mimoto/error2 input: '{ @@ -41,6 +43,7 @@ AddTrustedVerifier: uniqueIdentifier: TC_Mimoto_AddTrustedVerifier_03 role: userDefinedCookie restMethod: post + additionalDependencies: TC_Mimoto_UnlockWallet_01 inputTemplate: mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifier outputTemplate: mimoto/error2 input: '{ @@ -59,6 +62,7 @@ AddTrustedVerifier: uniqueIdentifier: TC_Mimoto_AddTrustedVerifier_04 role: userDefinedCookie restMethod: post + additionalDependencies: TC_Mimoto_UnlockWallet_01 inputTemplate: mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifier outputTemplate: mimoto/error2 input: '{ @@ -96,6 +100,7 @@ AddTrustedVerifier: uniqueIdentifier: TC_Mimoto_AddTrustedVerifier_06 role: userDefinedCookie restMethod: post + additionalDependencies: TC_Mimoto_UnlockWallet_01 checkOnlyStatusCodeInResponse: true inputTemplate: mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifier outputTemplate: mimoto/responseCode @@ -115,6 +120,7 @@ AddTrustedVerifier: uniqueIdentifier: TC_Mimoto_AddTrustedVerifier_07 role: userDefinedCookie restMethod: post + additionalDependencies: TC_Mimoto_UnlockWallet_01 inputTemplate: mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifier outputTemplate: mimoto/error2 input: '{ diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/VerifiablePresentationAuthorization/VerifiablePresentationAuthorization.yml b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/VerifiablePresentationAuthorization/VerifiablePresentationAuthorization.yml index 3ef0ca13f..1d017a065 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/VerifiablePresentationAuthorization/VerifiablePresentationAuthorization.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/VerifiablePresentationAuthorization/VerifiablePresentationAuthorization.yml @@ -5,6 +5,7 @@ VerifiablePresentationAuthorization: uniqueIdentifier: TC_Mimoto_VerifiablePresentationAuthorization_01 role: userDefinedCookie restMethod: post + additionalDependencies: TC_Mimoto_UnlockWallet_01 checkErrorsOnlyInResponse: true inputTemplate: mimoto/LoginFlow/Presentations/VerifiablePresentationAuthorization/VerifiablePresentationAuthorization outputTemplate: mimoto/LoginFlow/Presentations/VerifiablePresentationAuthorization/VerifiablePresentationAuthorizationResult @@ -23,6 +24,7 @@ VerifiablePresentationAuthorization: uniqueIdentifier: TC_Mimoto_VerifiablePresentationAuthorization_02 role: userDefinedCookie restMethod: post + additionalDependencies: TC_Mimoto_UnlockWallet_01 inputTemplate: mimoto/LoginFlow/Presentations/VerifiablePresentationAuthorization/VerifiablePresentationAuthorization outputTemplate: mimoto/error2 input: '{ @@ -41,6 +43,7 @@ VerifiablePresentationAuthorization: uniqueIdentifier: TC_Mimoto_VerifiablePresentationAuthorization_03 role: userDefinedCookie restMethod: post + additionalDependencies: TC_Mimoto_UnlockWallet_01 inputTemplate: mimoto/LoginFlow/Presentations/VerifiablePresentationAuthorization/VerifiablePresentationAuthorization outputTemplate: mimoto/error2 input: '{ @@ -77,6 +80,7 @@ VerifiablePresentationAuthorization: uniqueIdentifier: TC_Mimoto_VerifiablePresentationAuthorization_05 role: userDefinedCookie restMethod: post + additionalDependencies: TC_Mimoto_UnlockWallet_01 checkOnlyStatusCodeInResponse: true inputTemplate: mimoto/LoginFlow/Presentations/VerifiablePresentationAuthorization/VerifiablePresentationAuthorization outputTemplate: mimoto/responseCode @@ -96,6 +100,7 @@ VerifiablePresentationAuthorization: uniqueIdentifier: TC_Mimoto_VerifiablePresentationAuthorization_06 role: userDefinedCookie restMethod: post + additionalDependencies: TC_Mimoto_UnlockWallet_01 inputTemplate: mimoto/LoginFlow/Presentations/VerifiablePresentationAuthorization/VerifiablePresentationAuthorization outputTemplate: mimoto/error2 input: '{ diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Users/GetUserProfileAfterLogout/GetUserProfileAfterLogout.yml b/api-test/src/main/resources/mimoto/LoginFlow/Users/GetUserProfileAfterLogout/GetUserProfileAfterLogout.yml index 1e68a1ae0..7fcb240d8 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/Users/GetUserProfileAfterLogout/GetUserProfileAfterLogout.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/Users/GetUserProfileAfterLogout/GetUserProfileAfterLogout.yml @@ -5,6 +5,7 @@ GetUserProfileAfterLogout: uniqueIdentifier: TC_Mimoto_GetUserProfileAfterLogout_01 role: userDefinedCookie restMethod: get + additionalDependencies: TC_Mimoto_Logout_01 checkOnlyStatusCodeInResponse: true inputTemplate: mimoto/LoginFlow/Users/GetUserProfileAfterLogout/GetUserProfileAfterLogout outputTemplate: mimoto/responseCode diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWalletAfterDelete/UnlockWalletAfterDelete.yml b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWalletAfterDelete/UnlockWalletAfterDelete.yml index 9d984aa3f..7c80543c1 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWalletAfterDelete/UnlockWalletAfterDelete.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWalletAfterDelete/UnlockWalletAfterDelete.yml @@ -5,6 +5,7 @@ UnlockWalletAfterDelete: uniqueIdentifier: TC_Mimoto_UnlockWalletAfterDelete_01 role: userDefinedCookie restMethod: post + additionalDependencies: TC_Mimoto_DeleteWallet_01 inputTemplate: mimoto/LoginFlow/Wallet/UnlockWalletAfterDelete/UnlockWalletAfterDelete outputTemplate: mimoto/error2 input: '{ diff --git a/api-test/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml b/api-test/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml index f8a88b1fe..3706f803e 100644 --- a/api-test/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml +++ b/api-test/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml @@ -5,6 +5,7 @@ AuthenticateUserSunBirdC: uniqueIdentifier: TC_Mimoto_AuthenticateUserSunBirdC_01 role: resident restMethod: post + additionalDependencies: TC_Mimoto_CreatePolicySunBirdR_01 checkErrorsOnlyInResponse: true validityCheckRequired: true inputTemplate: mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC From 0e68847c0c24a08b5c6c9cdc7bda94bacb87c607 Mon Sep 17 00:00:00 2001 From: Nitin Hegde <165893206+hegdenitin@users.noreply.github.com> Date: Mon, 2 Feb 2026 13:55:57 +0530 Subject: [PATCH 812/860] MOSIP-44332 update org changes to inji from mosip (#1002) * MOSIP-44332 update org changes to inji from mosip Signed-off-by: Nitin Hegde * Update InjiTestRunner.java Signed-off-by: Nitin Hegde <165893206+hegdenitin@users.noreply.github.com> --------- Signed-off-by: Nitin Hegde Signed-off-by: Nitin Hegde <165893206+hegdenitin@users.noreply.github.com> --- api-test/Dockerfile | 4 +- api-test/pom.xml | 2 +- .../mimoto/testrunner/InjiTestRunner.java} | 20 ++-- .../mimoto/testscripts/AddIdentity.java | 6 +- .../mimoto/testscripts/DeleteWithParam.java | 6 +- .../mimoto/testscripts/GetWithParam.java | 6 +- .../testscripts/GetWithParamAndHeader.java | 6 +- ...GetWithPathParamAndCookieForAutoGenId.java | 6 +- .../PatchWithPathParamsBodyAndCookie.java | 7 +- .../PostWithAutogenIdWithOtpGenerate.java | 6 +- .../PostWithBodyWithOtpGenerate.java | 6 +- .../PostWithFormDataBodyForPdfDownload.java | 6 +- .../PostWithPathParamsAndCookie.java | 6 +- ...athParamsHeadersAndCookieForAutoGenId.java | 6 +- .../apirig/mimoto/testscripts/SimplePost.java | 6 +- .../testscripts/SimplePostForAutoGenId.java | 6 +- .../mimoto/utils/MimotoConfigManager.java | 8 +- .../apirig/mimoto/utils/MimotoConstants.java | 2 +- .../apirig/mimoto/utils/MimotoUtil.java | 6 +- .../mimotoPrerequisiteSuite.xml | 8 +- api-test/testNgXmlFiles/mimotoSuite.xml | 100 +++++++++--------- 21 files changed, 115 insertions(+), 114 deletions(-) rename api-test/src/main/java/io/{mosip/testrig/apirig/mimoto/testrunner/MosipTestRunner.java => inji/testrig/apirig/mimoto/testrunner/InjiTestRunner.java} (94%) rename api-test/src/main/java/io/{mosip => inji}/testrig/apirig/mimoto/testscripts/AddIdentity.java (97%) rename api-test/src/main/java/io/{mosip => inji}/testrig/apirig/mimoto/testscripts/DeleteWithParam.java (97%) rename api-test/src/main/java/io/{mosip => inji}/testrig/apirig/mimoto/testscripts/GetWithParam.java (97%) rename api-test/src/main/java/io/{mosip => inji}/testrig/apirig/mimoto/testscripts/GetWithParamAndHeader.java (97%) rename api-test/src/main/java/io/{mosip => inji}/testrig/apirig/mimoto/testscripts/GetWithPathParamAndCookieForAutoGenId.java (96%) rename api-test/src/main/java/io/{mosip => inji}/testrig/apirig/mimoto/testscripts/PatchWithPathParamsBodyAndCookie.java (95%) rename api-test/src/main/java/io/{mosip => inji}/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java (98%) rename api-test/src/main/java/io/{mosip => inji}/testrig/apirig/mimoto/testscripts/PostWithBodyWithOtpGenerate.java (97%) rename api-test/src/main/java/io/{mosip => inji}/testrig/apirig/mimoto/testscripts/PostWithFormDataBodyForPdfDownload.java (96%) rename api-test/src/main/java/io/{mosip => inji}/testrig/apirig/mimoto/testscripts/PostWithPathParamsAndCookie.java (96%) rename api-test/src/main/java/io/{mosip => inji}/testrig/apirig/mimoto/testscripts/PostWithPathParamsHeadersAndCookieForAutoGenId.java (96%) rename api-test/src/main/java/io/{mosip => inji}/testrig/apirig/mimoto/testscripts/SimplePost.java (97%) rename api-test/src/main/java/io/{mosip => inji}/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java (98%) rename api-test/src/main/java/io/{mosip => inji}/testrig/apirig/mimoto/utils/MimotoConfigManager.java (87%) rename api-test/src/main/java/io/{mosip => inji}/testrig/apirig/mimoto/utils/MimotoConstants.java (82%) rename api-test/src/main/java/io/{mosip => inji}/testrig/apirig/mimoto/utils/MimotoUtil.java (99%) diff --git a/api-test/Dockerfile b/api-test/Dockerfile index 5acccb148..a4e397b6d 100644 --- a/api-test/Dockerfile +++ b/api-test/Dockerfile @@ -10,10 +10,10 @@ LABEL commit_id=${COMMIT_ID} LABEL build_time=${BUILD_TIME} # can be passed during Docker build as build time environment for github branch to pickup configuration from. -ARG container_user=mosip +ARG container_user=inji # can be passed during Docker build as build time environment for github branch to pickup configuration from. -ARG container_user_group=mosip +ARG container_user_group=inji # can be passed during Docker build as build time environment for github branch to pickup configuration from. ARG container_user_uid=1001 diff --git a/api-test/pom.xml b/api-test/pom.xml index f893ddfcf..6ff6e5a3e 100644 --- a/api-test/pom.xml +++ b/api-test/pom.xml @@ -175,7 +175,7 @@ - io.mosip.testrig.apirig.mimoto.testrunner.MosipTestRunner + io.inji.testrig.apirig.mimoto.testrunner.InjiTestRunner - 1.3.0-beta.1 - 1.3.0-beta.1 - 1.3.0-beta.1 - 1.3.0-beta.1 - 1.3.0-beta.1 + 1.3.0 + 1.3.0 + 1.3.0 + 1.3.0 + 1.3.0 3.9.1 @@ -100,7 +100,7 @@ io.mosip.kernel kernel-bom - 1.3.0-beta.1 + 1.3.0 pom import @@ -111,7 +111,7 @@ io.mosip.kernel kernel-core - 1.3.0-beta.1 + 1.3.0 org.junit.vintage @@ -139,7 +139,7 @@ io.mosip vcverifier-jar - 1.5.0 + 1.6.0 io.mosip @@ -240,7 +240,7 @@ io.mosip.kernel kernel-websubclient-api - 1.3.0-beta.1 + 1.3.0 @@ -496,7 +496,7 @@ io.mosip.kernel kernel-keymanager-service - 1.3.0-beta.4 + 1.3.0 lib From c988ec73cf8ac33c84e22749ebe1c84fb6bccc7e Mon Sep 17 00:00:00 2001 From: Rudhhi Shah Date: Wed, 11 Feb 2026 17:24:19 +0530 Subject: [PATCH 819/860] INJIWEB-1832 Updated the pom and added tests to util factory for test coverage (#1023) Signed-off-by: Rudhhi Shah --- pom.xml | 6 +++ .../factory/Ed25519AlgorithmHandlerTest.java | 48 +++++++++++++++++++ .../SigningAlgorithmHandlerFactoryTest.java | 25 ++++++++++ 3 files changed, 79 insertions(+) diff --git a/pom.xml b/pom.xml index b57a0f14d..8f1f19b25 100644 --- a/pom.xml +++ b/pom.xml @@ -281,6 +281,12 @@ test + + org.junit.vintage + junit-vintage-engine + test + + org.slf4j slf4j-api diff --git a/src/test/java/io/mosip/mimoto/util/factory/Ed25519AlgorithmHandlerTest.java b/src/test/java/io/mosip/mimoto/util/factory/Ed25519AlgorithmHandlerTest.java index ee05a3c2d..3132b764f 100644 --- a/src/test/java/io/mosip/mimoto/util/factory/Ed25519AlgorithmHandlerTest.java +++ b/src/test/java/io/mosip/mimoto/util/factory/Ed25519AlgorithmHandlerTest.java @@ -1,11 +1,17 @@ package io.mosip.mimoto.util.factory; +import com.nimbusds.jose.JOSEException; import com.nimbusds.jose.JWSAlgorithm; +import com.nimbusds.jose.JWSHeader; import com.nimbusds.jose.JWSSigner; import com.nimbusds.jose.jwk.JWK; import com.nimbusds.jose.jwk.OctetKeyPair; +import com.nimbusds.jose.jwk.Curve; +import com.nimbusds.jose.jwk.KeyUse; +import com.nimbusds.jose.util.Base64URL; import org.junit.Test; +import java.nio.charset.StandardCharsets; import java.security.KeyFactory; import java.security.KeyPair; @@ -62,5 +68,47 @@ public void shouldThrowExceptionWhenJWKIsInvalid() throws Exception { handler.createSigner(invalidJwk); } + + @Test + public void shouldSignAndProduce64ByteSignature() throws Exception { + KeyPair keyPair = handler.generateKeyPair(); + JWK jwk = handler.createJWK(keyPair); + JWSSigner signer = handler.createSigner(jwk); + + JWSHeader header = new JWSHeader.Builder(JWSAlgorithm.Ed25519).build(); + byte[] payload = "test-payload".getBytes(StandardCharsets.UTF_8); + + com.nimbusds.jose.util.Base64URL signature = signer.sign(header, payload); + assertNotNull("Signature must not be null", signature); + byte[] sigBytes = signature.decode(); + assertEquals("Ed25519 signature should be 64 bytes", 64, sigBytes.length); + + assertTrue("supported algorithms must contain Ed25519", signer.supportedJWSAlgorithms().contains(JWSAlgorithm.Ed25519)); + assertNotNull("JCAContext should not be null", signer.getJCAContext()); + } + + @Test(expected = JOSEException.class) + public void shouldThrowJOSEExceptionWhenPrivateKeyIsInvalidDuringSign() throws Exception { + byte[] fakeX = new byte[32]; + for (int i = 0; i < fakeX.length; i++) fakeX[i] = (byte) (i + 1); + byte[] invalidD = new byte[1]; + + OctetKeyPair invalidOkp = new OctetKeyPair.Builder(Curve.Ed25519, Base64URL.encode(fakeX)) + .d(Base64URL.encode(invalidD)) + .algorithm(JWSAlgorithm.Ed25519) + .keyUse(KeyUse.SIGNATURE) + .build(); + + JWSSigner signer = handler.createSigner(invalidOkp); + + signer.sign(new JWSHeader.Builder(JWSAlgorithm.Ed25519).build(), "payload".getBytes(StandardCharsets.UTF_8)); + } + + @Test(expected = ClassCastException.class) + public void shouldThrowExceptionWhenCreateJWKWithNonEdKeyPair() throws Exception { + KeyPair rsaKeyPair = new RS256AlgorithmHandler().generateKeyPair(); + handler.createJWK(rsaKeyPair); + } + } diff --git a/src/test/java/io/mosip/mimoto/util/factory/SigningAlgorithmHandlerFactoryTest.java b/src/test/java/io/mosip/mimoto/util/factory/SigningAlgorithmHandlerFactoryTest.java index fce7e01c0..0fe255f3c 100644 --- a/src/test/java/io/mosip/mimoto/util/factory/SigningAlgorithmHandlerFactoryTest.java +++ b/src/test/java/io/mosip/mimoto/util/factory/SigningAlgorithmHandlerFactoryTest.java @@ -3,6 +3,9 @@ import io.mosip.mimoto.constant.SigningAlgorithm; import org.junit.Test; +import java.lang.reflect.Field; +import java.util.Map; + import static org.junit.Assert.*; /** @@ -52,5 +55,27 @@ public void shouldThrowExceptionWhenAlgorithmIsNull() { e.getMessage().contains("null") || e.getMessage().contains("Unsupported")); } } + + @Test + public void shouldThrowExceptionWhenHandlerNotPresentInMap() throws Exception { + Field handlersField = SigningAlgorithmHandlerFactory.class.getDeclaredField("handlers"); + handlersField.setAccessible(true); + + @SuppressWarnings("unchecked") + Map handlers = + (Map) handlersField.get(null); + + SigningAlgorithmHandler removed = handlers.remove(SigningAlgorithm.RS256); + try { + SigningAlgorithmHandlerFactory.getHandler(SigningAlgorithm.RS256); + fail("Should throw IllegalArgumentException when handler is missing in map"); + } catch (IllegalArgumentException e) { + assertTrue("Exception message should mention unsupported", e.getMessage().contains("Unsupported")); + } finally { + if (removed != null) { + handlers.put(SigningAlgorithm.RS256, removed); + } + } + } } From 11b85023df6d5e8004558ddac23d5476080a3c10 Mon Sep 17 00:00:00 2001 From: Rudhhi Shah Date: Thu, 12 Feb 2026 11:25:47 +0530 Subject: [PATCH 820/860] Updated postgres volume mount path for compatibility with latest version (#1025) Signed-off-by: Rudhhi Shah --- docker-compose/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose/docker-compose.yml b/docker-compose/docker-compose.yml index fdbf6bb08..b50208a50 100644 --- a/docker-compose/docker-compose.yml +++ b/docker-compose/docker-compose.yml @@ -47,7 +47,7 @@ services: ports: - "5432:5432" volumes: - - postgres-data:/var/lib/postgresql/data + - postgres-data:/var/lib/postgresql - ./mimoto_init.sql:/docker-entrypoint-initdb.d/mimoto_init.sql mimoto-service: From 1e6722981fb7c1664640cf141b1896814a74ee1c Mon Sep 17 00:00:00 2001 From: Sradha Mohanty Date: Tue, 17 Feb 2026 10:52:52 +0530 Subject: [PATCH 821/860] MOSIP-44419 (#1028) Signed-off-by: SradhaMohanty5899 --- api-test/pom.xml | 2 +- .../apirig/mimoto/testrunner/InjiTestRunner.java | 4 ++-- .../apirig/mimoto/testscripts/AddIdentity.java | 12 +----------- .../apirig/mimoto/testscripts/DeleteWithParam.java | 12 +----------- .../apirig/mimoto/testscripts/GetWithParam.java | 12 +----------- .../mimoto/testscripts/GetWithParamAndHeader.java | 12 +----------- .../GetWithPathParamAndCookieForAutoGenId.java | 12 +----------- .../PatchWithPathParamsBodyAndCookie.java | 12 +----------- .../PostWithAutogenIdWithOtpGenerate.java | 12 +----------- .../testscripts/PostWithBodyWithOtpGenerate.java | 12 +----------- .../PostWithFormDataBodyForPdfDownload.java | 12 +----------- .../testscripts/PostWithPathParamsAndCookie.java | 12 +----------- ...stWithPathParamsHeadersAndCookieForAutoGenId.java | 12 +----------- .../apirig/mimoto/testscripts/SimplePost.java | 12 +----------- .../mimoto/testscripts/SimplePostForAutoGenId.java | 12 +----------- 15 files changed, 16 insertions(+), 146 deletions(-) diff --git a/api-test/pom.xml b/api-test/pom.xml index 660e0aaa2..6d4e1d2ad 100644 --- a/api-test/pom.xml +++ b/api-test/pom.xml @@ -68,7 +68,7 @@ io.mosip.testrig.apitest.commons apitest-commons - 1.4.0-SNAPSHOT + 1.5.0-SNAPSHOT diff --git a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testrunner/InjiTestRunner.java b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testrunner/InjiTestRunner.java index 644fbbe81..10a3e2906 100644 --- a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testrunner/InjiTestRunner.java +++ b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testrunner/InjiTestRunner.java @@ -110,7 +110,7 @@ public static void main(String[] arg) { if (!"yes".equalsIgnoreCase(generateDependency)) { if (testCasesToExecuteString != null && !testCasesToExecuteString.isBlank()) { - DependencyResolver.loadDependencies(BaseTestCase.testCaseInterDependencyPath); + DependencyResolver.loadDependencies(BaseTestCase.getTestCaseInterDependencyPath()); MimotoUtil.testCasesInRunScope = DependencyResolver.getDependencies(testCasesToExecuteString); } } @@ -129,7 +129,7 @@ public static void main(String[] arg) { if ("yes".equalsIgnoreCase(generateDependency)) { LOGGER.info("Generating test case inter-dependencies"); - AdminTestUtil.generateTestCaseInterDependencies(BaseTestCase.testCaseInterDependencyPath); + AdminTestUtil.generateTestCaseInterDependencies(BaseTestCase.getTestCaseInterDependencyPath()); } System.exit(0); diff --git a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/AddIdentity.java b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/AddIdentity.java index 1485459f8..e41ac9414 100644 --- a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/AddIdentity.java +++ b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/AddIdentity.java @@ -155,17 +155,7 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad */ @AfterMethod(alwaysRun = true) public void setResultTestName(ITestResult result) { - try { - Field method = TestResult.class.getDeclaredField("m_method"); - method.setAccessible(true); - method.set(result, result.getMethod().clone()); - BaseTestMethod baseTestMethod = (BaseTestMethod) result.getMethod(); - Field f = baseTestMethod.getClass().getSuperclass().getDeclaredField("m_methodName"); - f.setAccessible(true); - f.set(baseTestMethod, testCaseName); - } catch (Exception e) { - Reporter.log("Exception : " + e.getMessage()); - } + result.setAttribute("TestCaseName", testCaseName); } @AfterClass(alwaysRun = true) diff --git a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/DeleteWithParam.java b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/DeleteWithParam.java index fd2e621ba..dd0825983 100644 --- a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/DeleteWithParam.java +++ b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/DeleteWithParam.java @@ -153,16 +153,6 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad */ @AfterMethod(alwaysRun = true) public void setResultTestName(ITestResult result) { - try { - Field method = TestResult.class.getDeclaredField("m_method"); - method.setAccessible(true); - method.set(result, result.getMethod().clone()); - BaseTestMethod baseTestMethod = (BaseTestMethod) result.getMethod(); - Field f = baseTestMethod.getClass().getSuperclass().getDeclaredField("m_methodName"); - f.setAccessible(true); - f.set(baseTestMethod, testCaseName); - } catch (Exception e) { - Reporter.log("Exception : " + e.getMessage()); - } + result.setAttribute("TestCaseName", testCaseName); } } \ No newline at end of file diff --git a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/GetWithParam.java b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/GetWithParam.java index 278744a8d..43360e814 100644 --- a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/GetWithParam.java +++ b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/GetWithParam.java @@ -192,16 +192,6 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad */ @AfterMethod(alwaysRun = true) public void setResultTestName(ITestResult result) { - try { - Field method = TestResult.class.getDeclaredField("m_method"); - method.setAccessible(true); - method.set(result, result.getMethod().clone()); - BaseTestMethod baseTestMethod = (BaseTestMethod) result.getMethod(); - Field f = baseTestMethod.getClass().getSuperclass().getDeclaredField("m_methodName"); - f.setAccessible(true); - f.set(baseTestMethod, testCaseName); - } catch (Exception e) { - Reporter.log("Exception : " + e.getMessage()); - } + result.setAttribute("TestCaseName", testCaseName); } } diff --git a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/GetWithParamAndHeader.java b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/GetWithParamAndHeader.java index 1f6205a87..32eead398 100644 --- a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/GetWithParamAndHeader.java +++ b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/GetWithParamAndHeader.java @@ -176,16 +176,6 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad */ @AfterMethod(alwaysRun = true) public void setResultTestName(ITestResult result) { - try { - Field method = TestResult.class.getDeclaredField("m_method"); - method.setAccessible(true); - method.set(result, result.getMethod().clone()); - BaseTestMethod baseTestMethod = (BaseTestMethod) result.getMethod(); - Field f = baseTestMethod.getClass().getSuperclass().getDeclaredField("m_methodName"); - f.setAccessible(true); - f.set(baseTestMethod, testCaseName); - } catch (Exception e) { - Reporter.log("Exception : " + e.getMessage()); - } + result.setAttribute("TestCaseName", testCaseName); } } diff --git a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/GetWithPathParamAndCookieForAutoGenId.java b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/GetWithPathParamAndCookieForAutoGenId.java index 19acddaf1..baa2f6ca2 100644 --- a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/GetWithPathParamAndCookieForAutoGenId.java +++ b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/GetWithPathParamAndCookieForAutoGenId.java @@ -124,16 +124,6 @@ public void test(TestCaseDTO testCaseDTO) @AfterMethod(alwaysRun = true) public void setResultTestName(ITestResult result) { - try { - Field method = TestResult.class.getDeclaredField("m_method"); - method.setAccessible(true); - method.set(result, result.getMethod().clone()); - BaseTestMethod baseTestMethod = (BaseTestMethod) result.getMethod(); - Field f = baseTestMethod.getClass().getSuperclass().getDeclaredField("m_methodName"); - f.setAccessible(true); - f.set(baseTestMethod, testCaseName); - } catch (Exception e) { - Reporter.log("Exception : " + e.getMessage()); - } + result.setAttribute("TestCaseName", testCaseName); } } \ No newline at end of file diff --git a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PatchWithPathParamsBodyAndCookie.java b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PatchWithPathParamsBodyAndCookie.java index 9345def93..19712da9b 100644 --- a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PatchWithPathParamsBodyAndCookie.java +++ b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PatchWithPathParamsBodyAndCookie.java @@ -89,16 +89,6 @@ public void test(TestCaseDTO testCaseDTO) @AfterMethod(alwaysRun = true) public void setResultTestName(ITestResult result) { - try { - Field method = TestResult.class.getDeclaredField("m_method"); - method.setAccessible(true); - method.set(result, result.getMethod().clone()); - BaseTestMethod baseTestMethod = (BaseTestMethod) result.getMethod(); - Field f = baseTestMethod.getClass().getSuperclass().getDeclaredField("m_methodName"); - f.setAccessible(true); - f.set(baseTestMethod, testCaseName); - } catch (Exception e) { - Reporter.log("Exception : " + e.getMessage()); - } + result.setAttribute("TestCaseName", testCaseName); } } diff --git a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java index 4db2a77e7..0e21a6850 100644 --- a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java +++ b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java @@ -213,17 +213,7 @@ public void test(TestCaseDTO testCaseDTO) */ @AfterMethod(alwaysRun = true) public void setResultTestName(ITestResult result) { - try { - Field method = TestResult.class.getDeclaredField("m_method"); - method.setAccessible(true); - method.set(result, result.getMethod().clone()); - BaseTestMethod baseTestMethod = (BaseTestMethod) result.getMethod(); - Field f = baseTestMethod.getClass().getSuperclass().getDeclaredField("m_methodName"); - f.setAccessible(true); - f.set(baseTestMethod, testCaseName); - } catch (Exception e) { - Reporter.log("Exception : " + e.getMessage()); - } + result.setAttribute("TestCaseName", testCaseName); } @AfterClass(alwaysRun = true) diff --git a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithBodyWithOtpGenerate.java b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithBodyWithOtpGenerate.java index 59dd4cea2..2919204b2 100644 --- a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithBodyWithOtpGenerate.java +++ b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithBodyWithOtpGenerate.java @@ -174,16 +174,6 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad */ @AfterMethod(alwaysRun = true) public void setResultTestName(ITestResult result) { - try { - Field method = TestResult.class.getDeclaredField("m_method"); - method.setAccessible(true); - method.set(result, result.getMethod().clone()); - BaseTestMethod baseTestMethod = (BaseTestMethod) result.getMethod(); - Field f = baseTestMethod.getClass().getSuperclass().getDeclaredField("m_methodName"); - f.setAccessible(true); - f.set(baseTestMethod, testCaseName); - } catch (Exception e) { - Reporter.log("Exception : " + e.getMessage()); - } + result.setAttribute("TestCaseName", testCaseName); } } diff --git a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithFormDataBodyForPdfDownload.java b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithFormDataBodyForPdfDownload.java index 51f92d76b..c0e04a4ed 100644 --- a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithFormDataBodyForPdfDownload.java +++ b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithFormDataBodyForPdfDownload.java @@ -132,16 +132,6 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad */ @AfterMethod(alwaysRun = true) public void setResultTestName(ITestResult result) { - try { - Field method = TestResult.class.getDeclaredField("m_method"); - method.setAccessible(true); - method.set(result, result.getMethod().clone()); - BaseTestMethod baseTestMethod = (BaseTestMethod) result.getMethod(); - Field f = baseTestMethod.getClass().getSuperclass().getDeclaredField("m_methodName"); - f.setAccessible(true); - f.set(baseTestMethod, testCaseName); - } catch (Exception e) { - Reporter.log("Exception : " + e.getMessage()); - } + result.setAttribute("TestCaseName", testCaseName); } } diff --git a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithPathParamsAndCookie.java b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithPathParamsAndCookie.java index 900ab7be5..131ecf013 100644 --- a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithPathParamsAndCookie.java +++ b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithPathParamsAndCookie.java @@ -136,17 +136,7 @@ public void test(TestCaseDTO testCaseDTO) */ @AfterMethod(alwaysRun = true) public void setResultTestName(ITestResult result) { - try { - Field method = TestResult.class.getDeclaredField("m_method"); - method.setAccessible(true); - method.set(result, result.getMethod().clone()); - BaseTestMethod baseTestMethod = (BaseTestMethod) result.getMethod(); - Field f = baseTestMethod.getClass().getSuperclass().getDeclaredField("m_methodName"); - f.setAccessible(true); - f.set(baseTestMethod, testCaseName); - } catch (Exception e) { - Reporter.log("Exception : " + e.getMessage()); - } + result.setAttribute("TestCaseName", testCaseName); } } \ No newline at end of file diff --git a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithPathParamsHeadersAndCookieForAutoGenId.java b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithPathParamsHeadersAndCookieForAutoGenId.java index 7b1ab8ed6..93a6454e9 100644 --- a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithPathParamsHeadersAndCookieForAutoGenId.java +++ b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithPathParamsHeadersAndCookieForAutoGenId.java @@ -132,17 +132,7 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad */ @AfterMethod(alwaysRun = true) public void setResultTestName(ITestResult result) { - try { - Field method = TestResult.class.getDeclaredField("m_method"); - method.setAccessible(true); - method.set(result, result.getMethod().clone()); - BaseTestMethod baseTestMethod = (BaseTestMethod) result.getMethod(); - Field f = baseTestMethod.getClass().getSuperclass().getDeclaredField("m_methodName"); - f.setAccessible(true); - f.set(baseTestMethod, testCaseName); - } catch (Exception e) { - Reporter.log("Exception : " + e.getMessage()); - } + result.setAttribute("TestCaseName", testCaseName); } } \ No newline at end of file diff --git a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/SimplePost.java b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/SimplePost.java index 59fd5b09e..1a62abde3 100644 --- a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/SimplePost.java +++ b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/SimplePost.java @@ -193,16 +193,6 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad */ @AfterMethod(alwaysRun = true) public void setResultTestName(ITestResult result) { - try { - Field method = TestResult.class.getDeclaredField("m_method"); - method.setAccessible(true); - method.set(result, result.getMethod().clone()); - BaseTestMethod baseTestMethod = (BaseTestMethod) result.getMethod(); - Field f = baseTestMethod.getClass().getSuperclass().getDeclaredField("m_methodName"); - f.setAccessible(true); - f.set(baseTestMethod, testCaseName); - } catch (Exception e) { - Reporter.log("Exception : " + e.getMessage()); - } + result.setAttribute("TestCaseName", testCaseName); } } diff --git a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java index 4f64d828c..2db5e83ba 100644 --- a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java +++ b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java @@ -236,16 +236,6 @@ public void test(TestCaseDTO testCaseDTO) */ @AfterMethod(alwaysRun = true) public void setResultTestName(ITestResult result) { - try { - Field method = TestResult.class.getDeclaredField("m_method"); - method.setAccessible(true); - method.set(result, result.getMethod().clone()); - BaseTestMethod baseTestMethod = (BaseTestMethod) result.getMethod(); - Field f = baseTestMethod.getClass().getSuperclass().getDeclaredField("m_methodName"); - f.setAccessible(true); - f.set(baseTestMethod, testCaseName); - } catch (Exception e) { - Reporter.log("Exception : " + e.getMessage()); - } + result.setAttribute("TestCaseName", testCaseName); } } \ No newline at end of file From cdc664287ecdfbc7829896543c8e92a256f9e6a7 Mon Sep 17 00:00:00 2001 From: Rudhhi Shah Date: Fri, 20 Feb 2026 17:58:40 +0530 Subject: [PATCH 822/860] Injiweb 1622 : Refactor Crypto Utility Classes (#1033) * [INJIWEB-1622] Renamed CryptoUtil to DerivedKeyCryptoUtil Signed-off-by: Rudhhi Shah * [INJIWEB-1622] Rename CryptoCoreUtil to P12KeyStoreManager Signed-off-by: Rudhhi Shah * [INJIWEB-1622] Renamed and changed EncryptionDecryptionUtil to DataProtectionService Signed-off-by: Rudhhi Shah * [INJIWEB-1622] Added test files for P12KeyStoreManager and DerivedKeyCryptoUtil Signed-off-by: Rudhhi Shah * [INJIWEB-1622] Acknowledged Code rabbit comments on the test Signed-off-by: Rudhhi Shah * [INJIWEB-1622] Moved encrypt-decrypt with pin into wallet util Signed-off-by: Rudhhi Shah * [INJIWEB-1622] Updated the error message display in WalletUtil Signed-off-by: Rudhhi Shah --------- Signed-off-by: Rudhhi Shah --- .../controller/CredentialShareController.java | 3 - .../DataProtectionService.java} | 73 +--- .../service/impl/CredentialServiceImpl.java | 10 +- .../impl/CredentialShareServiceImpl.java | 8 +- .../service/impl/EncryptionServiceImpl.java | 12 +- .../impl/KeyPairRetrievalServiceImpl.java | 8 +- .../impl/WalletCredentialServiceImpl.java | 12 +- .../impl/WalletPresentationServiceImpl.java | 8 +- ...ptoUtil.java => DerivedKeyCryptoUtil.java} | 2 +- .../java/io/mosip/mimoto/util/JoseUtil.java | 4 +- ...oCoreUtil.java => P12KeyStoreManager.java} | 2 +- .../java/io/mosip/mimoto/util/WalletUtil.java | 77 +++- .../CredentialShareControllerTest.java | 4 - .../CredentialMatchingServiceTest.java | 5 +- .../service/CredentialRequestServiceTest.java | 3 - .../mimoto/service/CredentialServiceTest.java | 11 +- .../service/CredentialShareServiceTest.java | 10 +- .../DataProtectionServiceTest.java} | 31 +- .../mimoto/service/KeyPairServiceTest.java | 83 ++-- .../service/WalletCredentialServiceTest.java | 87 ++-- .../WalletPresentationServiceTest.java | 25 +- .../mimoto/util/DerivedKeyCryptoUtilTest.java | 257 ++++++++++++ .../mimoto/util/P12KeyStoreManagerTest.java | 379 ++++++++++++++++++ .../io/mosip/mimoto/util/WalletUtilTest.java | 37 +- 24 files changed, 897 insertions(+), 254 deletions(-) rename src/main/java/io/mosip/mimoto/{util/EncryptionDecryptionUtil.java => service/DataProtectionService.java} (84%) rename src/main/java/io/mosip/mimoto/util/{CryptoUtil.java => DerivedKeyCryptoUtil.java} (99%) rename src/main/java/io/mosip/mimoto/util/{CryptoCoreUtil.java => P12KeyStoreManager.java} (99%) rename src/test/java/io/mosip/mimoto/{util/EncryptionDecryptionUtilTest.java => service/DataProtectionServiceTest.java} (71%) create mode 100644 src/test/java/io/mosip/mimoto/util/DerivedKeyCryptoUtilTest.java create mode 100644 src/test/java/io/mosip/mimoto/util/P12KeyStoreManagerTest.java diff --git a/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java b/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java index 9308546e7..f8ac0c499 100644 --- a/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java +++ b/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java @@ -63,9 +63,6 @@ public class CredentialShareController { @Value("${mosip.partner.id}") private String partnerId; - @Autowired - public CryptoCoreUtil cryptoCoreUtil; - @Autowired RequestValidator requestValidator; diff --git a/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java b/src/main/java/io/mosip/mimoto/service/DataProtectionService.java similarity index 84% rename from src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java rename to src/main/java/io/mosip/mimoto/service/DataProtectionService.java index 880fa96f2..d7acf1b56 100644 --- a/src/main/java/io/mosip/mimoto/util/EncryptionDecryptionUtil.java +++ b/src/main/java/io/mosip/mimoto/service/DataProtectionService.java @@ -1,8 +1,6 @@ -package io.mosip.mimoto.util; +package io.mosip.mimoto.service; import io.mosip.kernel.core.util.CryptoUtil; -import io.mosip.kernel.cryptomanager.dto.CryptoWithPinRequestDto; -import io.mosip.kernel.cryptomanager.dto.CryptoWithPinResponseDto; import io.mosip.kernel.cryptomanager.dto.CryptomanagerRequestDto; import io.mosip.kernel.cryptomanager.dto.CryptomanagerResponseDto; import io.mosip.kernel.cryptomanager.service.CryptomanagerService; @@ -12,7 +10,7 @@ import io.mosip.openID4VP.common.EncoderKt; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; import javax.crypto.Cipher; import javax.crypto.SecretKey; @@ -31,8 +29,8 @@ * Utility class for encryption and decryption operations. */ @Slf4j -@Component -public class EncryptionDecryptionUtil { +@Service +public class DataProtectionService { private static final String AES_ALGORITHM = "AES/GCM/NoPadding"; private static final int NONCE_LENGTH = 12; // Recommended nonce length for GCM private static final int TAG_LENGTH = 128; // Authentication tag length in bits (16 bytes) @@ -43,7 +41,7 @@ public class EncryptionDecryptionUtil { @Value("${mosip.inji.app.id:MIMOTO}") private String appId; - public EncryptionDecryptionUtil(CryptomanagerService cryptomanagerService) { + public DataProtectionService(CryptomanagerService cryptomanagerService) { this.cryptomanagerService = cryptomanagerService; } @@ -236,65 +234,6 @@ public static PrivateKey bytesToPrivateKey(byte[] privateKeyBytes, String algori } } - /** - * Encrypts a SecretKey with a user PIN. - * - * @param encryptionKey The SecretKey to encrypt. - * @param pin The user PIN. - * @return The encrypted key data. - */ - public String encryptKeyWithPin(SecretKey encryptionKey, String pin) { - if (encryptionKey == null) { - log.error("Encryption key is null"); - throw new IllegalArgumentException("Encryption key cannot be null"); - } - if (pin == null || pin.isEmpty()) { - log.error("PIN is null or empty"); - throw new IllegalArgumentException("PIN cannot be null or empty"); - } - try { - CryptoWithPinRequestDto requestDto = new CryptoWithPinRequestDto(); - requestDto.setUserPin(pin); - String dataAsString = Base64.getEncoder().encodeToString(encryptionKey.getEncoded()); - requestDto.setData(dataAsString); - CryptoWithPinResponseDto responseDto = cryptomanagerService.encryptWithPin(requestDto); - log.debug("Key encrypted with PIN successfully"); - return responseDto.getData(); - } catch (Exception e) { - log.error("Failed to encrypt key with PIN", e); - throw new RuntimeException("Failed to encrypt key with PIN", e); - } - } - - /** - * Decrypts data using a user PIN. - * - * @param encryptedString The encrypted data. - * @param pin The user PIN. - * @return The decrypted data. - */ - public String decryptWithPin(String encryptedString, String pin) { - if (encryptedString == null || encryptedString.isEmpty()) { - log.error("Encrypted string is null or empty"); - throw new IllegalArgumentException("Encrypted string cannot be null or empty"); - } - if (pin == null || pin.isEmpty()) { - log.error("PIN is null or empty"); - throw new IllegalArgumentException("PIN cannot be null or empty"); - } - try { - CryptoWithPinRequestDto requestDto = new CryptoWithPinRequestDto(); - requestDto.setUserPin(pin); - requestDto.setData(encryptedString); - CryptoWithPinResponseDto responseDto = cryptomanagerService.decryptWithPin(requestDto); - log.debug("Data decrypted with PIN successfully"); - return responseDto.getData(); - } catch (Exception e) { - log.error("Failed to decrypt with PIN", e); - throw new RuntimeException("Failed to decrypt with PIN", e); - } - } - /** * Encrypts credential data using a wallet key. * @@ -415,7 +354,7 @@ public byte[] createDetachedJwtSigningInput(String headerJson, String payloadBas inputBytes[headerBytes.length] = (byte) '.'; System.arraycopy(payloadBytes, 0, inputBytes, headerBytes.length + 1, payloadBytes.length); - log.debug("Detached JWT signing input created successfully, header length: {}, payload length: {}", + log.debug("Detached JWT signing input created successfully, header length: {}, payload length: {}", headerBytes.length, payloadBytes.length); return inputBytes; } catch (Exception e) { diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java index ea13215f4..be744f564 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java @@ -15,7 +15,7 @@ import io.mosip.mimoto.service.CredentialService; import io.mosip.mimoto.service.CredentialVerifierService; import io.mosip.mimoto.service.IssuersService; -import io.mosip.mimoto.util.EncryptionDecryptionUtil; +import io.mosip.mimoto.service.DataProtectionService; import io.mosip.mimoto.util.RestApiClient; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; @@ -33,7 +33,7 @@ public class CredentialServiceImpl implements CredentialService { private final ObjectMapper objectMapper; - private final EncryptionDecryptionUtil encryptionDecryptionUtil; + private final DataProtectionService dataProtectionService; private final WalletCredentialsRepository walletCredentialsRepository; private final IssuersService issuersService; private final CredentialVerifierService credentialVerifierService; @@ -45,7 +45,7 @@ public class CredentialServiceImpl implements CredentialService { @Autowired public CredentialServiceImpl( ObjectMapper objectMapper, - EncryptionDecryptionUtil encryptionDecryptionUtil, + DataProtectionService dataProtectionService, WalletCredentialsRepository walletCredentialsRepository, IssuersService issuersService, CredentialVerifierService credentialVerifierService, @@ -55,7 +55,7 @@ public CredentialServiceImpl( DataShareServiceImpl dataShareService) { this.objectMapper = objectMapper; - this.encryptionDecryptionUtil = encryptionDecryptionUtil; + this.dataProtectionService = dataProtectionService; this.walletCredentialsRepository = walletCredentialsRepository; this.issuersService = issuersService; this.credentialVerifierService = credentialVerifierService; @@ -247,7 +247,7 @@ private String processAndEncryptCredential(VCCredentialResponse vcCredentialResp String issuerId, String credentialConfigurationId) throws CredentialProcessingException { try { String vcResponseAsJsonString = objectMapper.writeValueAsString(vcCredentialResponse); - return encryptionDecryptionUtil.encryptCredential(vcResponseAsJsonString, base64Key); + return dataProtectionService.encryptCredential(vcResponseAsJsonString, base64Key); } catch (JsonProcessingException e) { log.error("Failed to serialize credential response for issuerId: {}, credentialConfigurationId: {}", issuerId, credentialConfigurationId, e); throw new CredentialProcessingException( diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java index 3c490024c..ff1c16de6 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java @@ -66,13 +66,13 @@ public class CredentialShareServiceImpl implements CredentialShareService { public DataShareUtil dataShareUtil; @Autowired - CryptoUtil cryptoUtil; + DerivedKeyCryptoUtil derivedKeyCryptoUtil; @Autowired public RestApiClient restApiClient; @Autowired - public CryptoCoreUtil cryptoCoreUtil; + public P12KeyStoreManager p12KeyStoreManager; @Autowired CbeffToBiometricUtil util; @@ -128,7 +128,7 @@ public boolean generateDocuments(EventModel eventModel) throws Exception { credential = restApiClient.getApi(dataShareUri, String.class); } String encryptionPin = eventModel.getEvent().getData().get("protectionKey").toString(); - decodedCredential = cryptoCoreUtil.decrypt(credential); + decodedCredential = p12KeyStoreManager.decrypt(credential); @SuppressWarnings("unchecked") Map proofMap = (Map) eventModel.getEvent().getData().get("proof"); String sign = proofMap.get("signature").toString(); @@ -390,7 +390,7 @@ public org.json.JSONObject decryptAttribute(org.json.JSONObject data, String enc cryptoWithPinRequestDto.setUserPin(encryptionPin); cryptoWithPinRequestDto.setData(data.getString(str.toString())); try { - cryptoWithPinResponseDto = cryptoUtil.decryptWithPin(cryptoWithPinRequestDto); + cryptoWithPinResponseDto = derivedKeyCryptoUtil.decryptWithPin(cryptoWithPinRequestDto); } catch (InvalidKeyException | NoSuchAlgorithmException | InvalidKeySpecException | InvalidAlgorithmParameterException | IllegalBlockSizeException | BadPaddingException e) { log.error("Error while decrypting the data", e); diff --git a/src/main/java/io/mosip/mimoto/service/impl/EncryptionServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/EncryptionServiceImpl.java index e8a79d4dd..8efec30d4 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/EncryptionServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/EncryptionServiceImpl.java @@ -2,8 +2,8 @@ import io.mosip.mimoto.exception.EncryptionException; import io.mosip.mimoto.exception.DecryptionException; +import io.mosip.mimoto.service.DataProtectionService; import io.mosip.mimoto.service.EncryptionService; -import io.mosip.mimoto.util.EncryptionDecryptionUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -13,20 +13,20 @@ public class EncryptionServiceImpl implements EncryptionService { private static final String EMPTY_AAD = ""; private static final String EMPTY_SALT = ""; - private final EncryptionDecryptionUtil encryptionUtil; + private final DataProtectionService dataProtectionService; @Autowired - public EncryptionServiceImpl(EncryptionDecryptionUtil encryptionUtil) { - this.encryptionUtil = encryptionUtil; + public EncryptionServiceImpl(DataProtectionService dataProtectionService) { + this.dataProtectionService = dataProtectionService; } @Override public String encrypt(String data) throws EncryptionException { - return encryptionUtil.encrypt(data, USER_PII_KEY_REFERENCE_ID, EMPTY_AAD, EMPTY_SALT); + return dataProtectionService.encrypt(data, USER_PII_KEY_REFERENCE_ID, EMPTY_AAD, EMPTY_SALT); } @Override public String decrypt(String data) throws DecryptionException { - return encryptionUtil.decrypt(data, USER_PII_KEY_REFERENCE_ID, EMPTY_AAD, EMPTY_SALT); + return dataProtectionService.decrypt(data, USER_PII_KEY_REFERENCE_ID, EMPTY_AAD, EMPTY_SALT); } } diff --git a/src/main/java/io/mosip/mimoto/service/impl/KeyPairRetrievalServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/KeyPairRetrievalServiceImpl.java index b95efa776..ffc004828 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/KeyPairRetrievalServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/KeyPairRetrievalServiceImpl.java @@ -5,8 +5,8 @@ import io.mosip.mimoto.exception.KeyGenerationException; import io.mosip.mimoto.model.ProofSigningKey; import io.mosip.mimoto.repository.ProofSigningKeyRepository; +import io.mosip.mimoto.service.DataProtectionService; import io.mosip.mimoto.service.KeyPairRetrievalService; -import io.mosip.mimoto.util.EncryptionDecryptionUtil; import io.mosip.mimoto.util.SigningKeyUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -28,7 +28,7 @@ public class KeyPairRetrievalServiceImpl implements KeyPairRetrievalService { private ProofSigningKeyRepository proofSigningKeyRepository; @Autowired - private EncryptionDecryptionUtil encryptionDecryptionUtil; + private DataProtectionService dataProtectionService; @Override public KeyPair getKeyPairFromDB(String walletId, String base64EncodedWalletKey, SigningAlgorithm signingAlgorithm) throws KeyGenerationException, DecryptionException { @@ -51,7 +51,7 @@ public KeyPair getKeyPairFromDB(String walletId, String base64EncodedWalletKey, throw new DecryptionException("INVALID_WALLET_KEY", "Invalid base64 encoded wallet key", e); } - SecretKey walletKey = EncryptionDecryptionUtil.bytesToSecretKey(decodedWalletKey); + SecretKey walletKey = DataProtectionService.bytesToSecretKey(decodedWalletKey); // Step 3: Decode public key byte[] publicKeyBytes; @@ -65,7 +65,7 @@ public KeyPair getKeyPairFromDB(String walletId, String base64EncodedWalletKey, // Step 4: Decrypt private key byte[] privateKeyInBytes; try { - privateKeyInBytes = encryptionDecryptionUtil.decryptWithAES(walletKey, proofSigningKey.get().getEncryptedSecretKey()); + privateKeyInBytes = dataProtectionService.decryptWithAES(walletKey, proofSigningKey.get().getEncryptedSecretKey()); } catch (Exception e) { log.error("Failed to decrypt private key for walletId: {} with algorithm: {}", walletId, signingAlgorithm, e); throw new DecryptionException("DECRYPTION_FAILED", "Failed to decrypt private key for walletId: " + walletId, e); diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java index 4d82e4f6f..68e50c3df 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletCredentialServiceImpl.java @@ -19,7 +19,7 @@ import io.mosip.mimoto.service.CredentialService; import io.mosip.mimoto.service.IssuersService; import io.mosip.mimoto.service.WalletCredentialService; -import io.mosip.mimoto.util.EncryptionDecryptionUtil; +import io.mosip.mimoto.service.DataProtectionService; import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; @@ -56,7 +56,7 @@ public class WalletCredentialServiceImpl implements WalletCredentialService { private final IssuersService issuersService; private final CredentialService credentialService; private final ObjectMapper objectMapper; - private final EncryptionDecryptionUtil encryptionDecryptionUtil; + private final DataProtectionService dataProtectionService; private final CredentialPDFGeneratorService credentialPDFGeneratorService; private final DataShareServiceImpl dataShareService; @@ -65,12 +65,12 @@ public WalletCredentialServiceImpl(WalletCredentialsRepository repository, IssuersService issuersService, CredentialService credentialService, ObjectMapper objectMapper, - EncryptionDecryptionUtil encryptionDecryptionUtil,CredentialPDFGeneratorService credentialPDFGeneratorService,DataShareServiceImpl dataShareService) { + DataProtectionService dataProtectionService,CredentialPDFGeneratorService credentialPDFGeneratorService,DataShareServiceImpl dataShareService) { this.repository = repository; this.issuersService = issuersService; this.credentialService = credentialService; this.objectMapper = objectMapper; - this.encryptionDecryptionUtil = encryptionDecryptionUtil; + this.dataProtectionService = dataProtectionService; this.credentialPDFGeneratorService = credentialPDFGeneratorService; this.dataShareService = dataShareService; } @@ -129,7 +129,7 @@ public WalletCredentialResponseDTO fetchVerifiableCredential(String walletId, St .orElseThrow(getCredentialNotFoundExceptionSupplier(walletId, credentialId)); try { - String decryptedCredential = encryptionDecryptionUtil.decryptCredential(credential.getCredential(), base64Key); + String decryptedCredential = dataProtectionService.decryptCredential(credential.getCredential(), base64Key); WalletCredentialResponseDTO response = generateCredentialResponse(decryptedCredential, credential.getCredentialMetadata(), locale); log.debug("Credential fetched successfully: {}", credentialId); @@ -254,7 +254,7 @@ private VCCredentialResponse decryptAndParseCredential(VerifiableCredential cred throw new IllegalArgumentException("Credential data cannot be null"); } - String decryptedCredential = encryptionDecryptionUtil.decryptCredential(credential.getCredential(), base64Key); + String decryptedCredential = dataProtectionService.decryptCredential(credential.getCredential(), base64Key); if (decryptedCredential == null || decryptedCredential.trim().isEmpty()) { throw new IllegalArgumentException("Failed to decrypt credential or decrypted data is empty"); } diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletPresentationServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletPresentationServiceImpl.java index 92d02188a..3dd00ff66 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletPresentationServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletPresentationServiceImpl.java @@ -22,7 +22,7 @@ import io.mosip.mimoto.service.KeyPairRetrievalService; import io.mosip.mimoto.service.VerifierService; import io.mosip.mimoto.service.WalletPresentationService; -import io.mosip.mimoto.util.EncryptionDecryptionUtil; +import io.mosip.mimoto.service.DataProtectionService; import io.mosip.mimoto.util.SigningKeyUtil; import io.mosip.mimoto.util.Utilities; import io.mosip.mimoto.util.UrlParameterUtils; @@ -86,7 +86,7 @@ public class WalletPresentationServiceImpl implements WalletPresentationService private VerifiablePresentationsRepository verifiablePresentationsRepository; @Autowired - private EncryptionDecryptionUtil encryptionDecryptionUtil; + private DataProtectionService dataProtectionService; @Override public VPResponseDTO handleVPAuthorizationRequest(String urlEncodedVPAuthorizationRequest, String walletId) throws ApiNotAccessibleException, IOException, URISyntaxException { @@ -317,9 +317,9 @@ private LdpVPTokenSigningResult signLdpVcFormat(UnsignedVPToken unsignedVPToken, JWSHeader header = new JWSHeader.Builder(JWSAlgorithm.EdDSA).criticalParams(Set.of(OpenID4VPConstants.JWT_CRITICAL_PARAM_B64)).base64URLEncodePayload(false).build(); - // Create detached JWT signing input using EncryptionDecryptionUtil + // Create detached JWT signing input using DataProtectionService String headerJson = header.toString(); - byte[] inputBytes = encryptionDecryptionUtil.createDetachedJwtSigningInput(headerJson, dataToSign); + byte[] inputBytes = dataProtectionService.createDetachedJwtSigningInput(headerJson, dataToSign); // Get Base64URL encoded header for proof construction String header64 = EncoderKt.encodeToBase64Url(headerJson.getBytes(StandardCharsets.UTF_8)); diff --git a/src/main/java/io/mosip/mimoto/util/CryptoUtil.java b/src/main/java/io/mosip/mimoto/util/DerivedKeyCryptoUtil.java similarity index 99% rename from src/main/java/io/mosip/mimoto/util/CryptoUtil.java rename to src/main/java/io/mosip/mimoto/util/DerivedKeyCryptoUtil.java index 0c6ba30fc..fcb41ccdd 100644 --- a/src/main/java/io/mosip/mimoto/util/CryptoUtil.java +++ b/src/main/java/io/mosip/mimoto/util/DerivedKeyCryptoUtil.java @@ -27,7 +27,7 @@ import io.mosip.mimoto.exception.PlatformErrorMessages; @Component -public class CryptoUtil { +public class DerivedKeyCryptoUtil { private static final int GCM_NONCE_LENGTH = 12; diff --git a/src/main/java/io/mosip/mimoto/util/JoseUtil.java b/src/main/java/io/mosip/mimoto/util/JoseUtil.java index 5b46a2e60..39e4ab045 100644 --- a/src/main/java/io/mosip/mimoto/util/JoseUtil.java +++ b/src/main/java/io/mosip/mimoto/util/JoseUtil.java @@ -47,7 +47,7 @@ public class JoseUtil { private ObjectMapper mapper; @Autowired - private CryptoCoreUtil cryptoCoreUtil; + private P12KeyStoreManager p12KeyStoreManager; public static JwkDto getJwkFromPublicKey(String publicKeyString) throws NoSuchAlgorithmException, InvalidKeySpecException { @@ -138,7 +138,7 @@ public String getJWT(String clientId, String keyStorePath, String fileName, Stri Date expiresAt = Date.from(Instant.now().plusMillis(120000)); RSAPrivateKey privateKey = null; try { - KeyStore.PrivateKeyEntry privateKeyEntry = cryptoCoreUtil.loadP12(keyStorePathWithFileName, alias, cyptoPassword); + KeyStore.PrivateKeyEntry privateKeyEntry = p12KeyStoreManager.loadP12(keyStorePathWithFileName, alias, cyptoPassword); if(privateKeyEntry == null){ throw new IssuerOnboardingException("Private Key Entry is Missing for the alias " + alias); } diff --git a/src/main/java/io/mosip/mimoto/util/CryptoCoreUtil.java b/src/main/java/io/mosip/mimoto/util/P12KeyStoreManager.java similarity index 99% rename from src/main/java/io/mosip/mimoto/util/CryptoCoreUtil.java rename to src/main/java/io/mosip/mimoto/util/P12KeyStoreManager.java index 70c4893ce..60531586e 100644 --- a/src/main/java/io/mosip/mimoto/util/CryptoCoreUtil.java +++ b/src/main/java/io/mosip/mimoto/util/P12KeyStoreManager.java @@ -50,7 +50,7 @@ @Slf4j @Component -public class CryptoCoreUtil { +public class P12KeyStoreManager { private final static String RSA_ECB_OAEP_PADDING = "RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING"; diff --git a/src/main/java/io/mosip/mimoto/util/WalletUtil.java b/src/main/java/io/mosip/mimoto/util/WalletUtil.java index 90ab026fc..ab6b92635 100644 --- a/src/main/java/io/mosip/mimoto/util/WalletUtil.java +++ b/src/main/java/io/mosip/mimoto/util/WalletUtil.java @@ -1,5 +1,8 @@ package io.mosip.mimoto.util; +import io.mosip.kernel.cryptomanager.dto.CryptoWithPinRequestDto; +import io.mosip.kernel.cryptomanager.dto.CryptoWithPinResponseDto; +import io.mosip.kernel.cryptomanager.service.CryptomanagerService; import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.model.ProofSigningKey; import io.mosip.mimoto.model.Wallet; @@ -8,6 +11,7 @@ import io.mosip.mimoto.exception.InvalidRequestException; import io.mosip.mimoto.constant.SigningAlgorithm; import io.mosip.mimoto.repository.WalletRepository; +import io.mosip.mimoto.service.DataProtectionService; import jakarta.servlet.http.HttpSession; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -15,6 +19,7 @@ import javax.crypto.SecretKey; import java.util.ArrayList; +import java.util.Base64; import java.util.List; import java.util.UUID; @@ -28,13 +33,16 @@ public class WalletUtil { private WalletRepository walletRepository; @Autowired - private EncryptionDecryptionUtil encryptionDecryptionUtil; + private DataProtectionService dataProtectionService; + + @Autowired + private CryptomanagerService cryptomanagerService; public String decryptWalletKey(String encryptedWalletKey, String pin) { try { - return encryptionDecryptionUtil.decryptWithPin(encryptedWalletKey, pin); + return decryptWithPin(encryptedWalletKey, pin); } catch (Exception e) { - throw new InvalidRequestException(INVALID_PIN.getErrorCode(), INVALID_PIN.getErrorMessage() + " " + e); + throw new InvalidRequestException(INVALID_PIN.getErrorCode(), INVALID_PIN.getErrorMessage(), e); } } @@ -48,7 +56,7 @@ public String saveWallet(String userId, String walletName, String walletPin, Sec String walletId = UUID.randomUUID().toString(); PasscodeControl passcodeControl = new PasscodeControl(); WalletMetadata walletMetadata = createWalletMetadata(walletName, encryptionAlgorithm, encryptionType, passcodeControl); - String walletKey = encryptionDecryptionUtil.encryptKeyWithPin(encryptionKey, walletPin); + String walletKey = encryptKeyWithPin(encryptionKey, walletPin); Wallet newWallet = Wallet.builder() .id(walletId) .userId(userId) @@ -79,7 +87,7 @@ private List createProofSigningKeys(SecretKey encryptionKey, Wa for (SigningAlgorithm algorithm : algorithms) { ProofSigningKey signingKey = SigningKeyUtil.createProofSigningKey(algorithm); signingKey.setWallet(wallet); - signingKey.setEncryptedSecretKey(encryptionDecryptionUtil.encryptWithAES(encryptionKey, + signingKey.setEncryptedSecretKey(dataProtectionService.encryptWithAES(encryptionKey, signingKey.getSecretKey().getEncoded())); proofSigningKeys.add(signingKey); } @@ -103,4 +111,63 @@ public static void validateWalletId(HttpSession session, String walletIdFromRequ throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Invalid Wallet ID. Session and request Wallet ID do not match"); } } + + /** + * Encrypts a SecretKey with a user PIN. + * + * @param encryptionKey The SecretKey to encrypt. + * @param pin The user PIN. + * @return The encrypted key data. + */ + private String encryptKeyWithPin(SecretKey encryptionKey, String pin) { + if (encryptionKey == null) { + log.error("Encryption key is null"); + throw new IllegalArgumentException("Encryption key cannot be null"); + } + if (pin == null || pin.isEmpty()) { + log.error("PIN is null or empty"); + throw new IllegalArgumentException("PIN cannot be null or empty"); + } + try { + CryptoWithPinRequestDto requestDto = new CryptoWithPinRequestDto(); + requestDto.setUserPin(pin); + String dataAsString = Base64.getEncoder().encodeToString(encryptionKey.getEncoded()); + requestDto.setData(dataAsString); + CryptoWithPinResponseDto responseDto = cryptomanagerService.encryptWithPin(requestDto); + log.debug("Key encrypted with PIN successfully"); + return responseDto.getData(); + } catch (Exception e) { + log.error("Failed to encrypt key with PIN", e); + throw new RuntimeException("Failed to encrypt key with PIN", e); + } + } + + /** + * Decrypts data using a user PIN. + * + * @param encryptedString The encrypted data. + * @param pin The user PIN. + * @return The decrypted data. + */ + private String decryptWithPin(String encryptedString, String pin) { + if (encryptedString == null || encryptedString.isEmpty()) { + log.error("Encrypted string is null or empty"); + throw new IllegalArgumentException("Encrypted string cannot be null or empty"); + } + if (pin == null || pin.isEmpty()) { + log.error("PIN is null or empty"); + throw new IllegalArgumentException("PIN cannot be null or empty"); + } + try { + CryptoWithPinRequestDto requestDto = new CryptoWithPinRequestDto(); + requestDto.setUserPin(pin); + requestDto.setData(encryptedString); + CryptoWithPinResponseDto responseDto = cryptomanagerService.decryptWithPin(requestDto); + log.debug("Data decrypted with PIN successfully"); + return responseDto.getData(); + } catch (Exception e) { + log.error("Failed to decrypt with PIN", e); + throw new RuntimeException("Failed to decrypt with PIN", e); + } + } } \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/controller/CredentialShareControllerTest.java b/src/test/java/io/mosip/mimoto/controller/CredentialShareControllerTest.java index f595cbcf0..f5fb3cf80 100644 --- a/src/test/java/io/mosip/mimoto/controller/CredentialShareControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/CredentialShareControllerTest.java @@ -13,7 +13,6 @@ import io.mosip.mimoto.model.EventModel; import io.mosip.mimoto.service.RestClientService; import io.mosip.mimoto.service.impl.CredentialShareServiceImpl; -import io.mosip.mimoto.util.CryptoCoreUtil; import io.mosip.mimoto.util.RequestValidator; import io.mosip.mimoto.util.RestApiClient; import io.mosip.mimoto.util.Utilities; @@ -59,9 +58,6 @@ public class CredentialShareControllerTest { @MockBean Utilities utilities; - @MockBean - public CryptoCoreUtil cryptoCoreUtil; - @MockBean RequestValidator requestValidator; diff --git a/src/test/java/io/mosip/mimoto/service/CredentialMatchingServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialMatchingServiceTest.java index 2868e3b43..b5f9930d9 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialMatchingServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialMatchingServiceTest.java @@ -12,7 +12,6 @@ import io.mosip.mimoto.model.CredentialMetadata; import io.mosip.mimoto.service.impl.CredentialMatchingServiceImpl; import io.mosip.mimoto.service.impl.OpenID4VPService; -import io.mosip.mimoto.util.EncryptionDecryptionUtil; import io.mosip.openID4VP.authorizationRequest.presentationDefinition.*; import org.junit.Before; import org.junit.Test; @@ -42,7 +41,7 @@ public class CredentialMatchingServiceTest { private WalletCredentialService walletCredentialService; @Mock - private EncryptionDecryptionUtil encryptionDecryptionUtil; + private DataProtectionService dataProtectionService; @Mock private IssuersService issuersService; @@ -94,7 +93,7 @@ public void testGetMatchingCredentialsSuccess() throws Exception { verify(openID4VPService).resolvePresentationDefinition(any(), any(), anyBoolean()); verify(walletCredentialService).getDecryptedCredentials(eq(walletId), any()); - verify(encryptionDecryptionUtil).decryptCredential(anyString(), eq(base64Key)); + verify(dataProtectionService).decryptCredential(anyString(), eq(base64Key)); } @Test(expected = IllegalArgumentException.class) diff --git a/src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java index 8eb22b1e4..4d88256f5 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java @@ -38,9 +38,6 @@ public class CredentialRequestServiceTest { @MockBean private ProofSigningKeyRepository proofSigningKeyRepository; - @MockBean - private EncryptionDecryptionUtil encryptionDecryptionUtil; - @MockBean private CredentialFormatHandlerFactory credentialFormatHandlerFactory; diff --git a/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java index 2a27de6ec..596773b3e 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java @@ -31,7 +31,6 @@ import io.mosip.mimoto.repository.WalletCredentialsRepository; import io.mosip.mimoto.dto.mimoto.IssuerConfig; import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; -import io.mosip.mimoto.util.EncryptionDecryptionUtil; import com.fasterxml.jackson.databind.ObjectMapper; import static io.mosip.mimoto.exception.ErrorConstants.INVALID_REQUEST; import io.mosip.mimoto.exception.CredentialProcessingException; @@ -79,7 +78,7 @@ public class CredentialServiceTest { WalletCredentialsRepository walletCredentialsRepository; @Mock - EncryptionDecryptionUtil encryptionDecryptionUtil; + DataProtectionService dataProtectionService; @Mock ObjectMapper objectMapper; @@ -257,7 +256,7 @@ public void shouldDownloadCredentialAndStoreInDBSuccessfully() throws Exception .thenReturn(getVerifiableCredentialResponseDTO(credentialConfigurationId)); when(credentialVerifierService.verify(any(VCCredentialResponse.class))).thenReturn(true); when(objectMapper.writeValueAsString(any())).thenReturn("{\"credential\":\"data\"}"); - when(encryptionDecryptionUtil.encryptCredential(any(), eq(base64Key))).thenReturn("encrypted-credential"); + when(dataProtectionService.encryptCredential(any(), eq(base64Key))).thenReturn("encrypted-credential"); when(walletCredentialsRepository.save(any(VerifiableCredential.class))).thenReturn(savedCredential); // Execute @@ -560,8 +559,8 @@ public void shouldThrowCredentialProcessingExceptionWhenEncryptionFails() throws when(credentialVerifierService.verify(any(VCCredentialResponse.class))).thenReturn(true); when(objectMapper.writeValueAsString(any())).thenReturn("{\"credential\":\"data\"}"); - // Mock encryptionDecryptionUtil to throw exception - when(encryptionDecryptionUtil.encryptCredential(any(), eq(base64Key))) + // Mock dataProtectionService to throw exception + when(dataProtectionService.encryptCredential(any(), eq(base64Key))) .thenThrow(new RuntimeException("Encryption failed")); // Execute and verify exception @@ -597,7 +596,7 @@ public void shouldThrowCredentialProcessingExceptionWhenSaveCredentialFails() th .thenReturn(getVerifiableCredentialResponseDTO(credentialConfigurationId)); when(credentialVerifierService.verify(any(VCCredentialResponse.class))).thenReturn(true); when(objectMapper.writeValueAsString(any())).thenReturn("{\"credential\":\"data\"}"); - when(encryptionDecryptionUtil.encryptCredential(any(), eq(base64Key))).thenReturn("encrypted-credential"); + when(dataProtectionService.encryptCredential(any(), eq(base64Key))).thenReturn("encrypted-credential"); // Mock walletCredentialsRepository to throw exception when(walletCredentialsRepository.save(any(VerifiableCredential.class))) diff --git a/src/test/java/io/mosip/mimoto/service/CredentialShareServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialShareServiceTest.java index 6d913ff78..3e93f2037 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialShareServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialShareServiceTest.java @@ -43,10 +43,10 @@ public class CredentialShareServiceTest { public AuditLogRequestBuilder auditLogRequestBuilder; @Mock - private CryptoCoreUtil cryptoCoreUtil; + private P12KeyStoreManager p12KeyStoreManager; @Mock - CryptoUtil cryptoUtil; + DerivedKeyCryptoUtil derivedKeyCryptoUtil; @Mock private Utilities utilities; @@ -76,10 +76,10 @@ public void setup() throws Exception { CryptoWithPinResponseDto cryptoWithPinResponseDto = new CryptoWithPinResponseDto(); cryptoWithPinResponseDto.setData("biometrics"); - Mockito.when(cryptoUtil.decryptWithPin(ArgumentMatchers.any())).thenReturn(cryptoWithPinResponseDto); + Mockito.when(derivedKeyCryptoUtil.decryptWithPin(ArgumentMatchers.any())).thenReturn(cryptoWithPinResponseDto); Mockito.when(utilities.getDataPath()).thenReturn("target"); Mockito.when(restApiClient.getApi(Mockito.any(URI.class), Mockito.any(Class.class))).thenReturn("credential"); - Mockito.when(cryptoCoreUtil.decrypt(Mockito.anyString())).thenReturn("{\"credentialSubject\":{\"biometrics\":\"biometrics\"},\"protectedAttributes\":[\"biometrics\"]}"); + Mockito.when(p12KeyStoreManager.decrypt(Mockito.anyString())).thenReturn("{\"credentialSubject\":{\"biometrics\":\"biometrics\"},\"protectedAttributes\":[\"biometrics\"]}"); Map templateMap = new HashMap<>(); templateMap.put("biometrics", "biometrics"); JSONObject templateJSON = new JSONObject(templateMap); @@ -112,7 +112,7 @@ public void generateDocumentsTest() throws Exception { @Test public void documentExceptionTest() throws Exception { - Mockito.when(cryptoUtil.decryptWithPin(ArgumentMatchers.any())).thenThrow(new InvalidKeyException("exception")); + Mockito.when(derivedKeyCryptoUtil.decryptWithPin(ArgumentMatchers.any())).thenThrow(new InvalidKeyException("exception")); boolean result = service.generateDocuments(eventModel); diff --git a/src/test/java/io/mosip/mimoto/util/EncryptionDecryptionUtilTest.java b/src/test/java/io/mosip/mimoto/service/DataProtectionServiceTest.java similarity index 71% rename from src/test/java/io/mosip/mimoto/util/EncryptionDecryptionUtilTest.java rename to src/test/java/io/mosip/mimoto/service/DataProtectionServiceTest.java index 9e01d52f9..c7ece3cb4 100644 --- a/src/test/java/io/mosip/mimoto/util/EncryptionDecryptionUtilTest.java +++ b/src/test/java/io/mosip/mimoto/service/DataProtectionServiceTest.java @@ -1,10 +1,11 @@ -package io.mosip.mimoto.util; +package io.mosip.mimoto.service; import io.mosip.kernel.cryptomanager.dto.CryptomanagerRequestDto; import io.mosip.kernel.cryptomanager.dto.CryptomanagerResponseDto; import io.mosip.kernel.cryptomanager.service.CryptomanagerService; import io.mosip.kernel.core.util.CryptoUtil; import io.mosip.mimoto.constant.SigningAlgorithm; +import io.mosip.mimoto.util.SigningKeyUtil; import org.apache.commons.lang3.StringUtils; import org.junit.Before; import org.junit.Test; @@ -27,13 +28,13 @@ import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) -public class EncryptionDecryptionUtilTest { +public class DataProtectionServiceTest { @Mock private CryptomanagerService cryptomanagerService; @InjectMocks - private EncryptionDecryptionUtil encryptionDecryptionUtil; + private DataProtectionService dataProtectionService; private final String refId = "ref123"; private final String aad = "aad123"; @@ -47,7 +48,7 @@ public class EncryptionDecryptionUtilTest { @Before public void setUp() throws NoSuchAlgorithmException, InvalidAlgorithmParameterException, NoSuchProviderException { String appId = "MIMOTO"; - ReflectionTestUtils.setField(encryptionDecryptionUtil, "appId", appId); + ReflectionTestUtils.setField(dataProtectionService, "appId", appId); encryptionKey = SigningKeyUtil.generateEncryptionKey("AES", 256); keyPair = SigningKeyUtil.generateKeyPair(SigningAlgorithm.ED25519); } @@ -59,14 +60,14 @@ public void shouldEncryptDataSuccessfully() { when(cryptomanagerService.encrypt(any(CryptomanagerRequestDto.class))).thenReturn(responseDto); String data = "testData"; - String result = encryptionDecryptionUtil.encrypt(data, refId, aad, salt); + String result = dataProtectionService.encrypt(data, refId, aad, salt); assertEquals(encryptedData, result); } @Test public void shouldReturnNullIfDataToEncryptIsNull() { - String result = encryptionDecryptionUtil.encrypt(null, refId, aad, salt); + String result = dataProtectionService.encrypt(null, refId, aad, salt); assertNull(result); } @@ -78,14 +79,14 @@ public void shouldDecryptDataSuccessfully() { responseDto.setData(CryptoUtil.encodeToURLSafeBase64(decryptedData.getBytes(StandardCharsets.UTF_8))); when(cryptomanagerService.decrypt(any(CryptomanagerRequestDto.class))).thenReturn(responseDto); - String result = encryptionDecryptionUtil.decrypt(encryptedData, refId, aad, salt); + String result = dataProtectionService.decrypt(encryptedData, refId, aad, salt); assertEquals(decryptedData, result); } @Test public void shouldReturnNullIfDataToDecryptIsNull() { - String result = encryptionDecryptionUtil.decrypt(null, refId, aad, salt); + String result = dataProtectionService.decrypt(null, refId, aad, salt); assertNull(result); } @@ -95,7 +96,7 @@ public void shouldEncryptPrivateKeyWithAESSuccessfully() throws Exception { SecretKey aesKey = SigningKeyUtil.generateEncryptionKey("AES", 256); KeyPair keyPair = SigningKeyUtil.generateKeyPair(SigningAlgorithm.ED25519); - String encryptedPrivateKey = encryptionDecryptionUtil.encryptWithAES(aesKey, keyPair.getPrivate().getEncoded()); + String encryptedPrivateKey = dataProtectionService.encryptWithAES(aesKey, keyPair.getPrivate().getEncoded()); assertNotNull(encryptedPrivateKey); assertFalse(StringUtils.isBlank(encryptedPrivateKey)); @@ -103,8 +104,8 @@ public void shouldEncryptPrivateKeyWithAESSuccessfully() throws Exception { @Test public void testIVChangesButCiphertextRemainsSameForSameEncryptionKeyAndSecretKey() throws Exception { - String encryptedPrivateKey1 = encryptionDecryptionUtil.encryptWithAES(encryptionKey, keyPair.getPrivate().getEncoded()); - String encryptedPrivateKey2 = encryptionDecryptionUtil.encryptWithAES(encryptionKey, keyPair.getPrivate().getEncoded()); + String encryptedPrivateKey1 = dataProtectionService.encryptWithAES(encryptionKey, keyPair.getPrivate().getEncoded()); + String encryptedPrivateKey2 = dataProtectionService.encryptWithAES(encryptionKey, keyPair.getPrivate().getEncoded()); byte[] encryptedBytes1 = Base64.getDecoder().decode(encryptedPrivateKey1); byte[] encryptedBytes2 = Base64.getDecoder().decode(encryptedPrivateKey2); @@ -112,10 +113,10 @@ public void testIVChangesButCiphertextRemainsSameForSameEncryptionKeyAndSecretKe byte[] iv1 = Arrays.copyOfRange(encryptedBytes1, 0, 12); byte[] iv2 = Arrays.copyOfRange(encryptedBytes2, 0, 12); - byte[] decryptedPrivateKey1Bytes = encryptionDecryptionUtil.decryptWithAES(encryptionKey, encryptedPrivateKey1); - byte[] decryptedPrivateKey2Bytes = encryptionDecryptionUtil.decryptWithAES(encryptionKey, encryptedPrivateKey2); - PrivateKey decryptedPrivateKey1 = EncryptionDecryptionUtil.bytesToPrivateKey(decryptedPrivateKey1Bytes, "ed25519"); - PrivateKey decryptedPrivateKey2 = EncryptionDecryptionUtil.bytesToPrivateKey(decryptedPrivateKey2Bytes,"ed25519"); + byte[] decryptedPrivateKey1Bytes = dataProtectionService.decryptWithAES(encryptionKey, encryptedPrivateKey1); + byte[] decryptedPrivateKey2Bytes = dataProtectionService.decryptWithAES(encryptionKey, encryptedPrivateKey2); + PrivateKey decryptedPrivateKey1 = DataProtectionService.bytesToPrivateKey(decryptedPrivateKey1Bytes, "ed25519"); + PrivateKey decryptedPrivateKey2 = DataProtectionService.bytesToPrivateKey(decryptedPrivateKey2Bytes,"ed25519"); assertFalse(Arrays.equals(iv1, iv2), "IVs should be different"); assertEquals(decryptedPrivateKey1, decryptedPrivateKey2); diff --git a/src/test/java/io/mosip/mimoto/service/KeyPairServiceTest.java b/src/test/java/io/mosip/mimoto/service/KeyPairServiceTest.java index e711ff645..de6eab327 100644 --- a/src/test/java/io/mosip/mimoto/service/KeyPairServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/KeyPairServiceTest.java @@ -7,7 +7,6 @@ import io.mosip.mimoto.model.Wallet; import io.mosip.mimoto.repository.ProofSigningKeyRepository; import io.mosip.mimoto.service.impl.KeyPairRetrievalServiceImpl; -import io.mosip.mimoto.util.EncryptionDecryptionUtil; import io.mosip.mimoto.util.SigningKeyUtil; import org.junit.Before; import org.junit.Test; @@ -40,7 +39,7 @@ public class KeyPairServiceTest { private ProofSigningKeyRepository proofSigningKeyRepository; @Mock - private EncryptionDecryptionUtil encryptionDecryptionUtil; + private DataProtectionService dataProtectionService; private String walletId; private String base64EncodedWalletKey; @@ -80,13 +79,13 @@ public void testGetKeyPairFromDBSuccessWithED25519() throws Exception { .thenReturn(Optional.of(proofSigningKey)); byte[] decryptedPrivateKey = keyPair.getPrivate().getEncoded(); - when(encryptionDecryptionUtil.decryptWithAES(any(SecretKey.class), eq("encrypted-private-key"))) + when(dataProtectionService.decryptWithAES(any(SecretKey.class), eq("encrypted-private-key"))) .thenReturn(decryptedPrivateKey); - try (MockedStatic mockedStaticUtil = Mockito.mockStatic(EncryptionDecryptionUtil.class); + try (MockedStatic mockedStaticUtil = Mockito.mockStatic(DataProtectionService.class); MockedStatic mockedStaticKeyGen = Mockito.mockStatic(SigningKeyUtil.class)) { - mockedStaticUtil.when(() -> EncryptionDecryptionUtil.bytesToSecretKey(any(byte[].class))) + mockedStaticUtil.when(() -> DataProtectionService.bytesToSecretKey(any(byte[].class))) .thenReturn(mock(SecretKey.class)); mockedStaticKeyGen.when(() -> SigningKeyUtil.generateKeyPair( @@ -98,7 +97,7 @@ public void testGetKeyPairFromDBSuccessWithED25519() throws Exception { assertNotNull(result); assertEquals(keyPair, result); verify(proofSigningKeyRepository).findByWalletIdAndAlgorithm(walletId, algorithm.name()); - verify(encryptionDecryptionUtil).decryptWithAES(any(SecretKey.class), eq("encrypted-private-key")); + verify(dataProtectionService).decryptWithAES(any(SecretKey.class), eq("encrypted-private-key")); } } @@ -116,13 +115,13 @@ public void testGetKeyPairFromDBSuccessWithRS256() throws Exception { .thenReturn(Optional.of(proofSigningKey)); byte[] decryptedPrivateKey = rsaKeyPair.getPrivate().getEncoded(); - when(encryptionDecryptionUtil.decryptWithAES(any(SecretKey.class), eq("encrypted-private-key"))) + when(dataProtectionService.decryptWithAES(any(SecretKey.class), eq("encrypted-private-key"))) .thenReturn(decryptedPrivateKey); - try (MockedStatic mockedStaticUtil = Mockito.mockStatic(EncryptionDecryptionUtil.class); + try (MockedStatic mockedStaticUtil = Mockito.mockStatic(DataProtectionService.class); MockedStatic mockedStaticKeyGen = Mockito.mockStatic(SigningKeyUtil.class)) { - mockedStaticUtil.when(() -> EncryptionDecryptionUtil.bytesToSecretKey(any(byte[].class))) + mockedStaticUtil.when(() -> DataProtectionService.bytesToSecretKey(any(byte[].class))) .thenReturn(mock(SecretKey.class)); mockedStaticKeyGen.when(() -> SigningKeyUtil.generateKeyPair( @@ -150,13 +149,13 @@ public void testGetKeyPairFromDBSuccessWithES256() throws Exception { .thenReturn(Optional.of(proofSigningKey)); byte[] decryptedPrivateKey = ecKeyPair.getPrivate().getEncoded(); - when(encryptionDecryptionUtil.decryptWithAES(any(SecretKey.class), eq("encrypted-private-key"))) + when(dataProtectionService.decryptWithAES(any(SecretKey.class), eq("encrypted-private-key"))) .thenReturn(decryptedPrivateKey); - try (MockedStatic mockedStaticUtil = Mockito.mockStatic(EncryptionDecryptionUtil.class); + try (MockedStatic mockedStaticUtil = Mockito.mockStatic(DataProtectionService.class); MockedStatic mockedStaticKeyGen = Mockito.mockStatic(SigningKeyUtil.class)) { - mockedStaticUtil.when(() -> EncryptionDecryptionUtil.bytesToSecretKey(any(byte[].class))) + mockedStaticUtil.when(() -> DataProtectionService.bytesToSecretKey(any(byte[].class))) .thenReturn(mock(SecretKey.class)); mockedStaticKeyGen.when(() -> SigningKeyUtil.generateKeyPair( @@ -216,8 +215,8 @@ public void testGetKeyPairFromDBThrowsKeyGenerationExceptionForInvalidBase64Publ when(proofSigningKeyRepository.findByWalletIdAndAlgorithm(walletId, algorithm.name())) .thenReturn(Optional.of(proofSigningKey)); - try (MockedStatic mockedStaticUtil = Mockito.mockStatic(EncryptionDecryptionUtil.class)) { - mockedStaticUtil.when(() -> EncryptionDecryptionUtil.bytesToSecretKey(any(byte[].class))) + try (MockedStatic mockedStaticUtil = Mockito.mockStatic(DataProtectionService.class)) { + mockedStaticUtil.when(() -> DataProtectionService.bytesToSecretKey(any(byte[].class))) .thenReturn(mock(SecretKey.class)); try { @@ -239,11 +238,11 @@ public void testGetKeyPairFromDBThrowsDecryptionExceptionWhenDecryptionFails() t when(proofSigningKeyRepository.findByWalletIdAndAlgorithm(walletId, algorithm.name())) .thenReturn(Optional.of(proofSigningKey)); - when(encryptionDecryptionUtil.decryptWithAES(any(SecretKey.class), eq("encrypted-private-key"))) + when(dataProtectionService.decryptWithAES(any(SecretKey.class), eq("encrypted-private-key"))) .thenThrow(new RuntimeException("Decryption error")); - try (MockedStatic mockedStaticUtil = Mockito.mockStatic(EncryptionDecryptionUtil.class)) { - mockedStaticUtil.when(() -> EncryptionDecryptionUtil.bytesToSecretKey(any(byte[].class))) + try (MockedStatic mockedStaticUtil = Mockito.mockStatic(DataProtectionService.class)) { + mockedStaticUtil.when(() -> DataProtectionService.bytesToSecretKey(any(byte[].class))) .thenReturn(mock(SecretKey.class)); try { @@ -266,13 +265,13 @@ public void testGetKeyPairFromDBThrowsKeyGenerationExceptionWhenKeyPairGeneratio .thenReturn(Optional.of(proofSigningKey)); byte[] decryptedPrivateKey = keyPair.getPrivate().getEncoded(); - when(encryptionDecryptionUtil.decryptWithAES(any(SecretKey.class), eq("encrypted-private-key"))) + when(dataProtectionService.decryptWithAES(any(SecretKey.class), eq("encrypted-private-key"))) .thenReturn(decryptedPrivateKey); - try (MockedStatic mockedStaticUtil = Mockito.mockStatic(EncryptionDecryptionUtil.class); + try (MockedStatic mockedStaticUtil = Mockito.mockStatic(DataProtectionService.class); MockedStatic mockedStaticKeyGen = Mockito.mockStatic(SigningKeyUtil.class)) { - mockedStaticUtil.when(() -> EncryptionDecryptionUtil.bytesToSecretKey(any(byte[].class))) + mockedStaticUtil.when(() -> DataProtectionService.bytesToSecretKey(any(byte[].class))) .thenReturn(mock(SecretKey.class)); mockedStaticKeyGen.when(() -> SigningKeyUtil.generateKeyPair( @@ -311,13 +310,13 @@ public void testGetKeyPairFromDBWithDifferentWalletIds() throws Exception { .thenReturn(Optional.of(key2)); byte[] decryptedPrivateKey = keyPair.getPrivate().getEncoded(); - when(encryptionDecryptionUtil.decryptWithAES(any(SecretKey.class), anyString())) + when(dataProtectionService.decryptWithAES(any(SecretKey.class), anyString())) .thenReturn(decryptedPrivateKey); - try (MockedStatic mockedStaticUtil = Mockito.mockStatic(EncryptionDecryptionUtil.class); + try (MockedStatic mockedStaticUtil = Mockito.mockStatic(DataProtectionService.class); MockedStatic mockedStaticKeyGen = Mockito.mockStatic(SigningKeyUtil.class)) { - mockedStaticUtil.when(() -> EncryptionDecryptionUtil.bytesToSecretKey(any(byte[].class))) + mockedStaticUtil.when(() -> DataProtectionService.bytesToSecretKey(any(byte[].class))) .thenReturn(mock(SecretKey.class)); mockedStaticKeyGen.when(() -> SigningKeyUtil.generateKeyPair( @@ -331,8 +330,8 @@ public void testGetKeyPairFromDBWithDifferentWalletIds() throws Exception { assertNotNull(result2); verify(proofSigningKeyRepository).findByWalletIdAndAlgorithm(wallet1, algorithm.name()); verify(proofSigningKeyRepository).findByWalletIdAndAlgorithm(wallet2, algorithm.name()); - verify(encryptionDecryptionUtil).decryptWithAES(any(SecretKey.class), eq("encrypted-key-1")); - verify(encryptionDecryptionUtil).decryptWithAES(any(SecretKey.class), eq("encrypted-key-2")); + verify(dataProtectionService).decryptWithAES(any(SecretKey.class), eq("encrypted-key-1")); + verify(dataProtectionService).decryptWithAES(any(SecretKey.class), eq("encrypted-key-2")); } } @@ -343,13 +342,13 @@ public void testGetKeyPairFromDBWithAllSigningAlgorithms() throws Exception { .thenReturn(Optional.of(proofSigningKey)); byte[] decryptedPrivateKey = keyPair.getPrivate().getEncoded(); - when(encryptionDecryptionUtil.decryptWithAES(any(SecretKey.class), eq("encrypted-private-key"))) + when(dataProtectionService.decryptWithAES(any(SecretKey.class), eq("encrypted-private-key"))) .thenReturn(decryptedPrivateKey); - try (MockedStatic mockedStaticUtil = Mockito.mockStatic(EncryptionDecryptionUtil.class); + try (MockedStatic mockedStaticUtil = Mockito.mockStatic(DataProtectionService.class); MockedStatic mockedStaticKeyGen = Mockito.mockStatic(SigningKeyUtil.class)) { - mockedStaticUtil.when(() -> EncryptionDecryptionUtil.bytesToSecretKey(any(byte[].class))) + mockedStaticUtil.when(() -> DataProtectionService.bytesToSecretKey(any(byte[].class))) .thenReturn(mock(SecretKey.class)); mockedStaticKeyGen.when(() -> SigningKeyUtil.generateKeyPair( @@ -361,7 +360,7 @@ public void testGetKeyPairFromDBWithAllSigningAlgorithms() throws Exception { assertNotNull(result); } - reset(proofSigningKeyRepository, encryptionDecryptionUtil); + reset(proofSigningKeyRepository, dataProtectionService); } } @@ -384,13 +383,13 @@ public void testGetKeyPairFromDBVerifiesRepositoryIsCalledWithCorrectParameters( .thenReturn(Optional.of(proofSigningKey)); byte[] decryptedPrivateKey = keyPair.getPrivate().getEncoded(); - when(encryptionDecryptionUtil.decryptWithAES(any(SecretKey.class), eq("encrypted-private-key"))) + when(dataProtectionService.decryptWithAES(any(SecretKey.class), eq("encrypted-private-key"))) .thenReturn(decryptedPrivateKey); - try (MockedStatic mockedStaticUtil = Mockito.mockStatic(EncryptionDecryptionUtil.class); + try (MockedStatic mockedStaticUtil = Mockito.mockStatic(DataProtectionService.class); MockedStatic mockedStaticKeyGen = Mockito.mockStatic(SigningKeyUtil.class)) { - mockedStaticUtil.when(() -> EncryptionDecryptionUtil.bytesToSecretKey(any(byte[].class))) + mockedStaticUtil.when(() -> DataProtectionService.bytesToSecretKey(any(byte[].class))) .thenReturn(mock(SecretKey.class)); mockedStaticKeyGen.when(() -> SigningKeyUtil.generateKeyPair( @@ -413,13 +412,13 @@ public void testGetKeyPairFromDBHandlesEmptyEncryptedSecretKey() throws Exceptio .thenReturn(Optional.of(proofSigningKey)); byte[] decryptedPrivateKey = keyPair.getPrivate().getEncoded(); - when(encryptionDecryptionUtil.decryptWithAES(any(SecretKey.class), eq(""))) + when(dataProtectionService.decryptWithAES(any(SecretKey.class), eq(""))) .thenReturn(decryptedPrivateKey); - try (MockedStatic mockedStaticUtil = Mockito.mockStatic(EncryptionDecryptionUtil.class); + try (MockedStatic mockedStaticUtil = Mockito.mockStatic(DataProtectionService.class); MockedStatic mockedStaticKeyGen = Mockito.mockStatic(SigningKeyUtil.class)) { - mockedStaticUtil.when(() -> EncryptionDecryptionUtil.bytesToSecretKey(any(byte[].class))) + mockedStaticUtil.when(() -> DataProtectionService.bytesToSecretKey(any(byte[].class))) .thenReturn(mock(SecretKey.class)); mockedStaticKeyGen.when(() -> SigningKeyUtil.generateKeyPair( @@ -429,7 +428,7 @@ public void testGetKeyPairFromDBHandlesEmptyEncryptedSecretKey() throws Exceptio KeyPair result = keyPairService.getKeyPairFromDB(walletId, base64EncodedWalletKey, algorithm); assertNotNull(result); - verify(encryptionDecryptionUtil).decryptWithAES(any(SecretKey.class), eq("")); + verify(dataProtectionService).decryptWithAES(any(SecretKey.class), eq("")); } } @@ -440,11 +439,11 @@ public void testGetKeyPairFromDBThrowsDecryptionExceptionForCorruptedWalletKey() when(proofSigningKeyRepository.findByWalletIdAndAlgorithm(walletId, algorithm.name())) .thenReturn(Optional.of(proofSigningKey)); - when(encryptionDecryptionUtil.decryptWithAES(any(SecretKey.class), eq("encrypted-private-key"))) + when(dataProtectionService.decryptWithAES(any(SecretKey.class), eq("encrypted-private-key"))) .thenThrow(new RuntimeException("Corrupted key - decryption failed")); - try (MockedStatic mockedStaticUtil = Mockito.mockStatic(EncryptionDecryptionUtil.class)) { - mockedStaticUtil.when(() -> EncryptionDecryptionUtil.bytesToSecretKey(any(byte[].class))) + try (MockedStatic mockedStaticUtil = Mockito.mockStatic(DataProtectionService.class)) { + mockedStaticUtil.when(() -> DataProtectionService.bytesToSecretKey(any(byte[].class))) .thenReturn(mock(SecretKey.class)); try { @@ -467,13 +466,13 @@ public void testGetKeyPairFromDBLogsDebugMessages() throws Exception { .thenReturn(Optional.of(proofSigningKey)); byte[] decryptedPrivateKey = keyPair.getPrivate().getEncoded(); - when(encryptionDecryptionUtil.decryptWithAES(any(SecretKey.class), eq("encrypted-private-key"))) + when(dataProtectionService.decryptWithAES(any(SecretKey.class), eq("encrypted-private-key"))) .thenReturn(decryptedPrivateKey); - try (MockedStatic mockedStaticUtil = Mockito.mockStatic(EncryptionDecryptionUtil.class); + try (MockedStatic mockedStaticUtil = Mockito.mockStatic(DataProtectionService.class); MockedStatic mockedStaticKeyGen = Mockito.mockStatic(SigningKeyUtil.class)) { - mockedStaticUtil.when(() -> EncryptionDecryptionUtil.bytesToSecretKey(any(byte[].class))) + mockedStaticUtil.when(() -> DataProtectionService.bytesToSecretKey(any(byte[].class))) .thenReturn(mock(SecretKey.class)); mockedStaticKeyGen.when(() -> SigningKeyUtil.generateKeyPair( diff --git a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java index e1be822c9..7d155641c 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletCredentialServiceTest.java @@ -11,7 +11,6 @@ import io.mosip.mimoto.model.VerifiableCredential; import io.mosip.mimoto.repository.WalletCredentialsRepository; import io.mosip.mimoto.service.impl.WalletCredentialServiceImpl; -import io.mosip.mimoto.util.EncryptionDecryptionUtil; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -55,7 +54,7 @@ public class WalletCredentialServiceTest { private CredentialPDFGeneratorService credentialPDFGeneratorService; @Mock - private EncryptionDecryptionUtil encryptionDecryptionUtil; + private DataProtectionService dataProtectionService; private final String walletId = "wallet123"; private final String issuerId = "issuer123"; @@ -230,7 +229,7 @@ public void shouldFetchVerifiableCredentialSuccessfully() throws Exception { .thenReturn(Optional.of(verifiableCredential)); // Setup decryption - when(encryptionDecryptionUtil.decryptCredential("encryptedCredential", base64Key)) + when(dataProtectionService.decryptCredential("encryptedCredential", base64Key)) .thenReturn(decryptedCredentialJson); when(objectMapper.readValue(decryptedCredentialJson, VCCredentialResponse.class)) .thenReturn(vcResponse); @@ -278,7 +277,7 @@ public void shouldFetchVerifiableCredentialSuccessfully() throws Exception { assertNotNull(actualResponse.getFileContentStream()); verify(walletCredentialsRepository).findByIdAndWalletId(credentialId, walletId); - verify(encryptionDecryptionUtil).decryptCredential("encryptedCredential", base64Key); + verify(dataProtectionService).decryptCredential("encryptedCredential", base64Key); verify(issuersService).getIssuerDetails(issuerId); verify(issuersService).getIssuerConfig(issuerId, credentialType); verify(credentialPDFGeneratorService).generatePdfForVerifiableCredential( @@ -304,13 +303,13 @@ public void shouldThrowCredentialNotFoundException() { assertEquals(RESOURCE_NOT_FOUND.getErrorCode(), exception.getErrorCode()); assertEquals(RESOURCE_NOT_FOUND.getErrorCode() +" --> "+RESOURCE_NOT_FOUND.getErrorMessage(), exception.getMessage()); verify(walletCredentialsRepository).findByIdAndWalletId(credentialId, walletId); - verifyNoInteractions(encryptionDecryptionUtil, credentialPDFGeneratorService); + verifyNoInteractions(dataProtectionService, credentialPDFGeneratorService); } @Test public void shouldThrowCredentialProcessingExceptionOnDecryptionFailure() throws Exception { when(walletCredentialsRepository.findByIdAndWalletId(credentialId, walletId)).thenReturn(Optional.of(verifiableCredential)); - when(encryptionDecryptionUtil.decryptCredential("encryptedCredential", base64Key)) + when(dataProtectionService.decryptCredential("encryptedCredential", base64Key)) .thenThrow(new DecryptionException("DECRYPTION_ERROR", "Decryption failed")); CredentialProcessingException exception = assertThrows(CredentialProcessingException.class, () -> @@ -318,7 +317,7 @@ public void shouldThrowCredentialProcessingExceptionOnDecryptionFailure() throws assertEquals(CREDENTIAL_FETCH_EXCEPTION.getErrorCode(), exception.getErrorCode()); verify(walletCredentialsRepository).findByIdAndWalletId(credentialId, walletId); - verify(encryptionDecryptionUtil).decryptCredential("encryptedCredential", base64Key); + verify(dataProtectionService).decryptCredential("encryptedCredential", base64Key); verifyNoInteractions(credentialPDFGeneratorService); } @@ -348,7 +347,7 @@ public void shouldThrowCredentialNotFoundExceptionWhenDeletingNonExistentCredent @Test public void shouldThrowCredentialProcessingExceptionOnJsonProcessingError() throws Exception { when(walletCredentialsRepository.findByIdAndWalletId(credentialId, walletId)).thenReturn(Optional.of(verifiableCredential)); - when(encryptionDecryptionUtil.decryptCredential("encryptedCredential", base64Key)).thenReturn("bad-json"); + when(dataProtectionService.decryptCredential("encryptedCredential", base64Key)).thenReturn("bad-json"); when(objectMapper.readValue("bad-json", VCCredentialResponse.class)).thenThrow(new com.fasterxml.jackson.core.JsonProcessingException("error") {}); CredentialProcessingException exception = assertThrows(CredentialProcessingException.class, () -> @@ -356,14 +355,14 @@ public void shouldThrowCredentialProcessingExceptionOnJsonProcessingError() thro assertEquals(CREDENTIAL_FETCH_EXCEPTION.getErrorCode(), exception.getErrorCode()); verify(walletCredentialsRepository).findByIdAndWalletId(credentialId, walletId); - verify(encryptionDecryptionUtil).decryptCredential("encryptedCredential", base64Key); + verify(dataProtectionService).decryptCredential("encryptedCredential", base64Key); verify(objectMapper).readValue("bad-json", VCCredentialResponse.class); } @Test public void shouldThrowCredentialProcessingExceptionOnNullIssuerConfig() throws Exception { when(walletCredentialsRepository.findByIdAndWalletId(credentialId, walletId)).thenReturn(Optional.of(verifiableCredential)); - when(encryptionDecryptionUtil.decryptCredential("encryptedCredential", base64Key)).thenReturn("{}"); + when(dataProtectionService.decryptCredential("encryptedCredential", base64Key)).thenReturn("{}"); VCCredentialResponse vcResponse = VCCredentialResponse.builder().credential(VCCredentialProperties.builder().type(List.of(credentialType)).build()).build(); when(objectMapper.readValue(anyString(), eq(VCCredentialResponse.class))).thenReturn(vcResponse); when(issuersService.getIssuerDetails(issuerId)).thenReturn(new IssuerDTO()); @@ -378,7 +377,7 @@ public void shouldThrowCredentialProcessingExceptionOnNullIssuerConfig() throws @Test public void shouldThrowCredentialProcessingExceptionOnCredentialTypeMismatch() throws Exception { when(walletCredentialsRepository.findByIdAndWalletId(credentialId, walletId)).thenReturn(Optional.of(verifiableCredential)); - when(encryptionDecryptionUtil.decryptCredential("encryptedCredential", base64Key)).thenReturn("{}"); + when(dataProtectionService.decryptCredential("encryptedCredential", base64Key)).thenReturn("{}"); VCCredentialResponse vcResponse = VCCredentialResponse.builder().credential(VCCredentialProperties.builder().type(List.of("OtherType")).build()).build(); when(objectMapper.readValue(anyString(), eq(VCCredentialResponse.class))).thenReturn(vcResponse); when(issuersService.getIssuerDetails(issuerId)).thenReturn(new IssuerDTO()); @@ -400,7 +399,7 @@ public void shouldThrowCredentialProcessingExceptionOnCredentialTypeMismatch() t @Test public void shouldThrowCredentialProcessingExceptionOnIssuerServiceException() throws Exception { when(walletCredentialsRepository.findByIdAndWalletId(credentialId, walletId)).thenReturn(Optional.of(verifiableCredential)); - when(encryptionDecryptionUtil.decryptCredential("encryptedCredential", base64Key)).thenReturn("{}"); + when(dataProtectionService.decryptCredential("encryptedCredential", base64Key)).thenReturn("{}"); VCCredentialResponse vcResponse = VCCredentialResponse.builder().credential(VCCredentialProperties.builder().type(List.of(credentialType)).build()).build(); when(objectMapper.readValue(anyString(), eq(VCCredentialResponse.class))).thenReturn(vcResponse); when(issuersService.getIssuerDetails(issuerId)).thenThrow(new ApiNotAccessibleException("API error")); @@ -414,7 +413,7 @@ public void shouldThrowCredentialProcessingExceptionOnIssuerServiceException() t @Test public void shouldThrowCredentialProcessingExceptionOnPdfGenerationException() throws Exception { when(walletCredentialsRepository.findByIdAndWalletId(credentialId, walletId)).thenReturn(Optional.of(verifiableCredential)); - when(encryptionDecryptionUtil.decryptCredential("encryptedCredential", base64Key)).thenReturn("{}"); + when(dataProtectionService.decryptCredential("encryptedCredential", base64Key)).thenReturn("{}"); VCCredentialResponse vcResponse = VCCredentialResponse.builder().credential(VCCredentialProperties.builder().type(List.of(credentialType)).build()).build(); when(objectMapper.readValue(anyString(), eq(VCCredentialResponse.class))).thenReturn(vcResponse); when(issuersService.getIssuerDetails(issuerId)).thenReturn(new IssuerDTO()); @@ -443,9 +442,9 @@ public void shouldGetDecryptedCredentialsSuccessfully() throws Exception { when(walletCredentialsRepository.findByWalletIdOrderByCreatedAtDesc(walletId)) .thenReturn(walletCredentials); - when(encryptionDecryptionUtil.decryptCredential("encryptedcred1", base64Key)) + when(dataProtectionService.decryptCredential("encryptedcred1", base64Key)) .thenReturn(new ObjectMapper().writeValueAsString(testVcResponse1)); - when(encryptionDecryptionUtil.decryptCredential("encryptedcred2", base64Key)) + when(dataProtectionService.decryptCredential("encryptedcred2", base64Key)) .thenReturn(new ObjectMapper().writeValueAsString(testVcResponse2)); when(objectMapper.readValue(anyString(), eq(VCCredentialResponse.class))) .thenReturn(testVcResponse1, testVcResponse2); @@ -459,8 +458,8 @@ public void shouldGetDecryptedCredentialsSuccessfully() throws Exception { assertEquals(testVcResponse2, result.get(1).getCredential()); verify(walletCredentialsRepository).findByWalletIdOrderByCreatedAtDesc(walletId); - verify(encryptionDecryptionUtil).decryptCredential("encryptedcred1", base64Key); - verify(encryptionDecryptionUtil).decryptCredential("encryptedcred2", base64Key); + verify(dataProtectionService).decryptCredential("encryptedcred1", base64Key); + verify(dataProtectionService).decryptCredential("encryptedcred2", base64Key); verify(objectMapper, times(2)).readValue(anyString(), eq(VCCredentialResponse.class)); } @@ -471,9 +470,9 @@ public void shouldGetDecryptedCredentialsWithPartialFailures() throws Exception when(walletCredentialsRepository.findByWalletIdOrderByCreatedAtDesc(walletId)) .thenReturn(walletCredentials); - when(encryptionDecryptionUtil.decryptCredential("encryptedcred1", base64Key)) + when(dataProtectionService.decryptCredential("encryptedcred1", base64Key)) .thenReturn(new ObjectMapper().writeValueAsString(testVcResponse1)); - when(encryptionDecryptionUtil.decryptCredential("encryptedcred2", base64Key)) + when(dataProtectionService.decryptCredential("encryptedcred2", base64Key)) .thenThrow(new DecryptionException("DECRYPTION_ERROR", "Decryption failed")); when(objectMapper.readValue(anyString(), eq(VCCredentialResponse.class))) .thenReturn(testVcResponse1); @@ -485,8 +484,8 @@ public void shouldGetDecryptedCredentialsWithPartialFailures() throws Exception assertEquals(testVcResponse1, result.get(0).getCredential()); verify(walletCredentialsRepository).findByWalletIdOrderByCreatedAtDesc(walletId); - verify(encryptionDecryptionUtil).decryptCredential("encryptedcred1", base64Key); - verify(encryptionDecryptionUtil).decryptCredential("encryptedcred2", base64Key); + verify(dataProtectionService).decryptCredential("encryptedcred1", base64Key); + verify(dataProtectionService).decryptCredential("encryptedcred2", base64Key); verify(objectMapper).readValue(anyString(), eq(VCCredentialResponse.class)); } @@ -498,9 +497,9 @@ public void shouldGetDecryptedCredentialsWithJsonParsingFailure() throws Excepti when(walletCredentialsRepository.findByWalletIdOrderByCreatedAtDesc(walletId)) .thenReturn(walletCredentials); - when(encryptionDecryptionUtil.decryptCredential("encryptedcred1", base64Key)) + when(dataProtectionService.decryptCredential("encryptedcred1", base64Key)) .thenReturn("invalid-json"); - when(encryptionDecryptionUtil.decryptCredential("encryptedcred2", base64Key)) + when(dataProtectionService.decryptCredential("encryptedcred2", base64Key)) .thenReturn(validJson); when(objectMapper.readValue("invalid-json", VCCredentialResponse.class)) @@ -515,8 +514,8 @@ public void shouldGetDecryptedCredentialsWithJsonParsingFailure() throws Excepti assertEquals(testVcResponse2, result.get(0).getCredential()); verify(walletCredentialsRepository).findByWalletIdOrderByCreatedAtDesc(walletId); - verify(encryptionDecryptionUtil).decryptCredential("encryptedcred1", base64Key); - verify(encryptionDecryptionUtil).decryptCredential("encryptedcred2", base64Key); + verify(dataProtectionService).decryptCredential("encryptedcred1", base64Key); + verify(dataProtectionService).decryptCredential("encryptedcred2", base64Key); verify(objectMapper).readValue("invalid-json", VCCredentialResponse.class); verify(objectMapper).readValue(validJson, VCCredentialResponse.class); } @@ -531,7 +530,7 @@ public void shouldGetDecryptedCredentialsWithEmptyWallet() { assertTrue(result.isEmpty()); verify(walletCredentialsRepository).findByWalletIdOrderByCreatedAtDesc(walletId); - verifyNoInteractions(encryptionDecryptionUtil); + verifyNoInteractions(dataProtectionService); verifyNoInteractions(objectMapper); } @@ -542,9 +541,9 @@ public void shouldGetDecryptedCredentialsWithAllFailures() throws Exception { when(walletCredentialsRepository.findByWalletIdOrderByCreatedAtDesc(walletId)) .thenReturn(walletCredentials); - when(encryptionDecryptionUtil.decryptCredential("encryptedcred1", base64Key)) + when(dataProtectionService.decryptCredential("encryptedcred1", base64Key)) .thenThrow(new DecryptionException("DECRYPTION_ERROR", "Decryption failed")); - when(encryptionDecryptionUtil.decryptCredential("encryptedcred2", base64Key)) + when(dataProtectionService.decryptCredential("encryptedcred2", base64Key)) .thenThrow(new DecryptionException("DECRYPTION_ERROR", "Decryption failed")); List result = walletCredentialService.getDecryptedCredentials(walletId, base64Key); @@ -552,8 +551,8 @@ public void shouldGetDecryptedCredentialsWithAllFailures() throws Exception { assertTrue(result.isEmpty()); verify(walletCredentialsRepository).findByWalletIdOrderByCreatedAtDesc(walletId); - verify(encryptionDecryptionUtil).decryptCredential("encryptedcred1", base64Key); - verify(encryptionDecryptionUtil).decryptCredential("encryptedcred2", base64Key); + verify(dataProtectionService).decryptCredential("encryptedcred1", base64Key); + verify(dataProtectionService).decryptCredential("encryptedcred2", base64Key); verifyNoInteractions(objectMapper); } @@ -561,7 +560,7 @@ public void shouldGetDecryptedCredentialsWithAllFailures() throws Exception { public void shouldDecryptAndParseCredentialSuccessfully() throws Exception { String decryptedJson = new ObjectMapper().writeValueAsString(testVcResponse1); - when(encryptionDecryptionUtil.decryptCredential("encryptedcred1", base64Key)) + when(dataProtectionService.decryptCredential("encryptedcred1", base64Key)) .thenReturn(decryptedJson); when(objectMapper.readValue(decryptedJson, VCCredentialResponse.class)) .thenReturn(testVcResponse1); @@ -570,7 +569,7 @@ public void shouldDecryptAndParseCredentialSuccessfully() throws Exception { walletCredentialService, "decryptAndParseCredential", testCredential1, base64Key); assertEquals(testVcResponse1, result); - verify(encryptionDecryptionUtil).decryptCredential("encryptedcred1", base64Key); + verify(dataProtectionService).decryptCredential("encryptedcred1", base64Key); verify(objectMapper).readValue(decryptedJson, VCCredentialResponse.class); } @@ -580,7 +579,7 @@ public void shouldThrowIllegalArgumentExceptionWhenCredentialIsNull() throws Exc ReflectionTestUtils.invokeMethod(walletCredentialService, "decryptAndParseCredential", null, base64Key)); assertEquals("Credential cannot be null", exception.getMessage()); - verifyNoInteractions(encryptionDecryptionUtil); + verifyNoInteractions(dataProtectionService); verifyNoInteractions(objectMapper); } @@ -593,52 +592,52 @@ public void shouldThrowIllegalArgumentExceptionWhenCredentialDataIsNull() throws ReflectionTestUtils.invokeMethod(walletCredentialService, "decryptAndParseCredential", credentialWithNullData, base64Key)); assertEquals("Credential data cannot be null", exception.getMessage()); - verifyNoInteractions(encryptionDecryptionUtil); + verifyNoInteractions(dataProtectionService); verifyNoInteractions(objectMapper); } @Test public void shouldThrowIllegalArgumentExceptionWhenDecryptedDataIsNull() throws Exception { - when(encryptionDecryptionUtil.decryptCredential("encryptedcred1", base64Key)) + when(dataProtectionService.decryptCredential("encryptedcred1", base64Key)) .thenReturn(null); java.lang.IllegalArgumentException exception = assertThrows(java.lang.IllegalArgumentException.class, () -> ReflectionTestUtils.invokeMethod(walletCredentialService, "decryptAndParseCredential", testCredential1, base64Key)); assertEquals("Failed to decrypt credential or decrypted data is empty", exception.getMessage()); - verify(encryptionDecryptionUtil).decryptCredential("encryptedcred1", base64Key); + verify(dataProtectionService).decryptCredential("encryptedcred1", base64Key); verifyNoInteractions(objectMapper); } @Test public void shouldThrowIllegalArgumentExceptionWhenDecryptedDataIsEmpty() throws Exception { - when(encryptionDecryptionUtil.decryptCredential("encryptedcred1", base64Key)) + when(dataProtectionService.decryptCredential("encryptedcred1", base64Key)) .thenReturn(""); java.lang.IllegalArgumentException exception = assertThrows(java.lang.IllegalArgumentException.class, () -> ReflectionTestUtils.invokeMethod(walletCredentialService, "decryptAndParseCredential", testCredential1, base64Key)); assertEquals("Failed to decrypt credential or decrypted data is empty", exception.getMessage()); - verify(encryptionDecryptionUtil).decryptCredential("encryptedcred1", base64Key); + verify(dataProtectionService).decryptCredential("encryptedcred1", base64Key); verifyNoInteractions(objectMapper); } @Test public void shouldThrowIllegalArgumentExceptionWhenDecryptedDataIsWhitespace() throws Exception { - when(encryptionDecryptionUtil.decryptCredential("encryptedcred1", base64Key)) + when(dataProtectionService.decryptCredential("encryptedcred1", base64Key)) .thenReturn(" "); java.lang.IllegalArgumentException exception = assertThrows(java.lang.IllegalArgumentException.class, () -> ReflectionTestUtils.invokeMethod(walletCredentialService, "decryptAndParseCredential", testCredential1, base64Key)); assertEquals("Failed to decrypt credential or decrypted data is empty", exception.getMessage()); - verify(encryptionDecryptionUtil).decryptCredential("encryptedcred1", base64Key); + verify(dataProtectionService).decryptCredential("encryptedcred1", base64Key); verifyNoInteractions(objectMapper); } @Test public void shouldThrowDecryptionExceptionWhenDecryptionFails() throws Exception { - when(encryptionDecryptionUtil.decryptCredential("encryptedcred1", base64Key)) + when(dataProtectionService.decryptCredential("encryptedcred1", base64Key)) .thenThrow(new DecryptionException("DECRYPTION_ERROR", "Decryption failed")); Exception thrownException = assertThrows(Exception.class, () -> @@ -659,7 +658,7 @@ public void shouldThrowDecryptionExceptionWhenDecryptionFails() throws Exception assertNotNull("Exception should not be null", exception); assertEquals("DECRYPTION_ERROR", exception.getErrorCode()); assertEquals("DECRYPTION_ERROR --> Decryption failed", exception.getMessage()); - verify(encryptionDecryptionUtil).decryptCredential("encryptedcred1", base64Key); + verify(dataProtectionService).decryptCredential("encryptedcred1", base64Key); verifyNoInteractions(objectMapper); } @@ -667,7 +666,7 @@ public void shouldThrowDecryptionExceptionWhenDecryptionFails() throws Exception public void shouldThrowIOExceptionWhenJsonParsingFails() throws Exception { String invalidJson = "invalid-json"; - when(encryptionDecryptionUtil.decryptCredential("encryptedcred1", base64Key)) + when(dataProtectionService.decryptCredential("encryptedcred1", base64Key)) .thenReturn(invalidJson); when(objectMapper.readValue(invalidJson, VCCredentialResponse.class)) .thenThrow(new com.fasterxml.jackson.core.JsonProcessingException("Invalid JSON") {}); @@ -689,7 +688,7 @@ public void shouldThrowIOExceptionWhenJsonParsingFails() throws Exception { assertNotNull("Exception should not be null", exception); assertEquals("Invalid JSON", exception.getMessage()); - verify(encryptionDecryptionUtil).decryptCredential("encryptedcred1", base64Key); + verify(dataProtectionService).decryptCredential("encryptedcred1", base64Key); verify(objectMapper).readValue(invalidJson, VCCredentialResponse.class); } diff --git a/src/test/java/io/mosip/mimoto/service/WalletPresentationServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletPresentationServiceTest.java index 3e5e8d4d8..9d95d112f 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletPresentationServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletPresentationServiceTest.java @@ -20,7 +20,6 @@ import io.mosip.mimoto.repository.VerifiablePresentationsRepository; import io.mosip.mimoto.service.impl.OpenID4VPService; import io.mosip.mimoto.service.impl.WalletPresentationServiceImpl; -import io.mosip.mimoto.util.EncryptionDecryptionUtil; import io.mosip.mimoto.util.SigningKeyUtil; import io.mosip.mimoto.util.UrlParameterUtils; import io.mosip.openID4VP.OpenID4VP; @@ -70,7 +69,7 @@ public class WalletPresentationServiceTest { private VerifiablePresentationsRepository verifiablePresentationsRepository; @Mock - private EncryptionDecryptionUtil encryptionDecryptionUtil; + private DataProtectionService dataProtectionService; @InjectMocks private WalletPresentationServiceImpl walletPresentationService; @@ -235,7 +234,7 @@ public void testHandlePresentationActionSubmissionRequestSuccess() throws Except jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); - when(encryptionDecryptionUtil.createDetachedJwtSigningInput(anyString(), anyString())) + when(dataProtectionService.createDetachedJwtSigningInput(anyString(), anyString())) .thenReturn("signing-input".getBytes()); urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) @@ -451,7 +450,7 @@ public void testSubmitPresentationSuccess() throws Exception { jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); - when(encryptionDecryptionUtil.createDetachedJwtSigningInput(anyString(), anyString())) + when(dataProtectionService.createDetachedJwtSigningInput(anyString(), anyString())) .thenReturn("signing-input".getBytes()); urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) @@ -493,7 +492,7 @@ public void testSubmitPresentationShareFailed() throws Exception { jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); - when(encryptionDecryptionUtil.createDetachedJwtSigningInput(anyString(), anyString())) + when(dataProtectionService.createDetachedJwtSigningInput(anyString(), anyString())) .thenReturn("signing-input".getBytes()); urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) @@ -532,7 +531,7 @@ public void testSubmitPresentationExceptionDuringShare() throws Exception { jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); - when(encryptionDecryptionUtil.createDetachedJwtSigningInput(anyString(), anyString())) + when(dataProtectionService.createDetachedJwtSigningInput(anyString(), anyString())) .thenReturn("signing-input".getBytes()); urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) @@ -681,7 +680,7 @@ public void testFetchSelectedCredentialsNoMatchingCredential() throws Exception jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); - when(encryptionDecryptionUtil.createDetachedJwtSigningInput(anyString(), anyString())) + when(dataProtectionService.createDetachedJwtSigningInput(anyString(), anyString())) .thenReturn("signing-input".getBytes()); urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) @@ -816,7 +815,7 @@ public void testStorePresentationRecordExceptionDuringSave() throws Exception { jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); - when(encryptionDecryptionUtil.createDetachedJwtSigningInput(anyString(), anyString())) + when(dataProtectionService.createDetachedJwtSigningInput(anyString(), anyString())) .thenReturn("signing-input".getBytes()); urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) @@ -859,7 +858,7 @@ public void testExtractVerifierIdNullAuthorizationRequest() throws Exception { jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); - when(encryptionDecryptionUtil.createDetachedJwtSigningInput(anyString(), anyString())) + when(dataProtectionService.createDetachedJwtSigningInput(anyString(), anyString())) .thenReturn("signing-input".getBytes()); when(jwsSigner.sign(any(JWSHeader.class), any(byte[].class))).thenReturn(Base64URL.encode("signature")); @@ -903,7 +902,7 @@ public void testExtractVerifierIdExceptionDuringExtraction() throws Exception { jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); - when(encryptionDecryptionUtil.createDetachedJwtSigningInput(anyString(), anyString())) + when(dataProtectionService.createDetachedJwtSigningInput(anyString(), anyString())) .thenReturn("signing-input".getBytes()); urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) @@ -950,7 +949,7 @@ public void testExtractVerifierAuthRequestNullAuthorizationRequest() throws Exce jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); - when(encryptionDecryptionUtil.createDetachedJwtSigningInput(anyString(), anyString())) + when(dataProtectionService.createDetachedJwtSigningInput(anyString(), anyString())) .thenReturn("signing-input".getBytes()); urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) @@ -994,7 +993,7 @@ public void testExtractVerifierAuthRequestExceptionDuringExtraction() throws Exc jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); - when(encryptionDecryptionUtil.createDetachedJwtSigningInput(anyString(), anyString())) + when(dataProtectionService.createDetachedJwtSigningInput(anyString(), anyString())) .thenReturn("signing-input".getBytes()); urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) @@ -1037,7 +1036,7 @@ public void testCreatePresentationDataExceptionDuringCreation() throws Exception jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); - when(encryptionDecryptionUtil.createDetachedJwtSigningInput(anyString(), anyString())) + when(dataProtectionService.createDetachedJwtSigningInput(anyString(), anyString())) .thenReturn("signing-input".getBytes()); urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) diff --git a/src/test/java/io/mosip/mimoto/util/DerivedKeyCryptoUtilTest.java b/src/test/java/io/mosip/mimoto/util/DerivedKeyCryptoUtilTest.java new file mode 100644 index 000000000..dce51928c --- /dev/null +++ b/src/test/java/io/mosip/mimoto/util/DerivedKeyCryptoUtilTest.java @@ -0,0 +1,257 @@ +package io.mosip.mimoto.util; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.util.Base64; + +import javax.crypto.Cipher; +import javax.crypto.SecretKey; +import javax.crypto.spec.GCMParameterSpec; +import javax.crypto.spec.SecretKeySpec; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.MockedStatic; +import org.mockito.Mockito; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.test.util.ReflectionTestUtils; + +import io.mosip.mimoto.dto.CryptoWithPinRequestDto; +import io.mosip.mimoto.dto.CryptoWithPinResponseDto; +import io.mosip.mimoto.exception.CryptoManagerException; +import io.mosip.mimoto.exception.ParseException; + +@ExtendWith(MockitoExtension.class) +class DerivedKeyCryptoUtilTest { + + @InjectMocks + private DerivedKeyCryptoUtil derivedKeyCryptoUtil; + + private static final String AES_KEY_TYPE = "AES"; + private static final String TEST_DATA = "testdata"; + private static final String USER_PIN = "12345"; + private static final byte[] SALT = "testsalt123456789012345678901234".getBytes(); + private static final byte[] NONCE = "testnonce123".getBytes(); + + @BeforeEach + void setUp() { + ReflectionTestUtils.setField(derivedKeyCryptoUtil, "symmetricKeyLength", 256); + ReflectionTestUtils.setField(derivedKeyCryptoUtil, "iterations", 100000); + ReflectionTestUtils.setField(derivedKeyCryptoUtil, "passwordAlgorithm", "PBKDF2WithHmacSHA512"); + } + + private byte[] encrypt(String data, SecretKey key, byte[] nonce, byte[] aad) throws Exception { + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + GCMParameterSpec gcmParameterSpec = new GCMParameterSpec(128, nonce); + cipher.init(Cipher.ENCRYPT_MODE, key, gcmParameterSpec); + if (aad != null) { + cipher.updateAAD(aad); + } + return cipher.doFinal(data.getBytes()); + } + + @Test + void testDecryptWithPin() throws Exception { + SecretKey derivedKey = getDerivedKey(USER_PIN, SALT); + byte[] encryptedData = encrypt(TEST_DATA, derivedKey, NONCE, SALT); + + byte[] combined = new byte[SALT.length + NONCE.length + encryptedData.length]; + System.arraycopy(SALT, 0, combined, 0, SALT.length); + System.arraycopy(NONCE, 0, combined, SALT.length, NONCE.length); + System.arraycopy(encryptedData, 0, combined, SALT.length + NONCE.length, encryptedData.length); + + CryptoWithPinRequestDto requestDto = new CryptoWithPinRequestDto(); + requestDto.setData(Base64.getEncoder().encodeToString(combined)); + requestDto.setUserPin(USER_PIN); + + CryptoWithPinResponseDto response = derivedKeyCryptoUtil.decryptWithPin(requestDto); + assertNotNull(response); + assertEquals(TEST_DATA, response.getData()); + } + + @Test + void testSymmetricDecryptWithIV() throws Exception { + SecretKey key = new SecretKeySpec("testkey123456789".getBytes(), AES_KEY_TYPE); + byte[] encryptedData = encrypt(TEST_DATA, key, NONCE, null); + + byte[] decryptedData = invokeSymmetricDecrypt(key, encryptedData, NONCE, null); + assertEquals(TEST_DATA, new String(decryptedData)); + } + + @Test + void testSymmetricDecryptWithIVAndAad() throws Exception { + SecretKey key = new SecretKeySpec("testkey123456789".getBytes(), AES_KEY_TYPE); + byte[] aad = "testaad".getBytes(); + byte[] encryptedData = encrypt(TEST_DATA, key, NONCE, aad); + + byte[] decryptedData = invokeSymmetricDecrypt(key, encryptedData, NONCE, aad); + assertEquals(TEST_DATA, new String(decryptedData)); + } + + @Test + void testSymmetricDecryptWithIVWithNullIV() throws Exception { + SecretKey key = new SecretKeySpec("testkey123456789".getBytes(), AES_KEY_TYPE); + byte[] iv16 = "testnonce1234567".getBytes(); + byte[] encryptedData = encrypt(TEST_DATA, key, iv16, null); + + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + byte[] combined = new byte[encryptedData.length + cipher.getBlockSize()]; + System.arraycopy(encryptedData, 0, combined, 0, encryptedData.length); + System.arraycopy(iv16, 0, combined, encryptedData.length, iv16.length); + + + byte[] decryptedData = invokeSymmetricDecrypt(key, combined, null, null); + assertEquals(TEST_DATA, new String(decryptedData)); + } + + @Test + void testSymmetricDecryptWithIVWithNullIVAndAad() throws Exception { + SecretKey key = new SecretKeySpec("testkey123456789".getBytes(), AES_KEY_TYPE); + byte[] aad = "testaad".getBytes(); + byte[] iv16 = "testnonce1234567".getBytes(); // 16 bytes + byte[] encryptedData = encrypt(TEST_DATA, key, iv16, aad); + + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + byte[] combined = new byte[encryptedData.length + cipher.getBlockSize()]; + System.arraycopy(encryptedData, 0, combined, 0, encryptedData.length); + System.arraycopy(iv16, 0, combined, encryptedData.length, iv16.length); + + + byte[] decryptedData = invokeSymmetricDecrypt(key, combined, null, aad); + assertEquals(TEST_DATA, new String(decryptedData)); + } + + @Test + void testSymmetricDecryptWithIVThrowsInvalidKeyException() throws Exception { + SecretKey key = new SecretKeySpec("testkey".getBytes(), AES_KEY_TYPE); + byte[] data = "testdata".getBytes(); + byte[] iv = "testiv".getBytes(); + byte[] aad = "testaad".getBytes(); + + InvocationTargetException exception = assertThrows(InvocationTargetException.class, () -> { + invokeSymmetricDecrypt(key, data, iv, aad); + }); + + assertEquals(InvalidKeyException.class, exception.getTargetException().getClass()); + } + + @Test + void testSymmetricDecryptWithoutIVThrowsCryptoManagerException() throws Exception { + SecretKey key = new SecretKeySpec("testkey12345678901234567".getBytes(), AES_KEY_TYPE); + byte[] data = "testdata".getBytes(); + byte[] aad = "testaad".getBytes(); + + InvocationTargetException exception = assertThrows(InvocationTargetException.class, () -> { + invokeSymmetricDecrypt(key, data, null, aad); + }); + + assertEquals(CryptoManagerException.class, exception.getTargetException().getClass()); + } + + @Test + void testSymmetricDecryptThrowsCryptoManagerException() throws Exception { + SecretKey key = new SecretKeySpec("0123456789ABCDEF".getBytes(), AES_KEY_TYPE); + byte[] iv = NONCE; + byte[] encrypted = encrypt(TEST_DATA, key, iv, null); + + try (MockedStatic mocked = Mockito.mockStatic(Cipher.class)) { + mocked.when(() -> Cipher.getInstance("AES/GCM/NoPadding")) + .thenThrow(new NoSuchAlgorithmException("for tests")); + + InvocationTargetException exception = assertThrows(InvocationTargetException.class, () -> { + invokeSymmetricDecrypt(key, encrypted, iv, null); + }); + + Throwable targetException = exception.getTargetException(); + assertEquals(CryptoManagerException.class, targetException.getClass()); + assertTrue(targetException.getCause() instanceof NoSuchAlgorithmException); + } + } + + @Test + void testGetDerivedKey() throws Exception { + SecretKey derivedKey = getDerivedKey(USER_PIN, SALT); + assertNotNull(derivedKey); + assertEquals(AES_KEY_TYPE, derivedKey.getAlgorithm()); + } + + @Test + void testHash() throws Exception { + String hash = invokeHash(USER_PIN.getBytes(), SALT); + assertNotNull(hash); + } + + @Test + void testHashThrowsCryptoManagerException() { + ReflectionTestUtils.setField(derivedKeyCryptoUtil, "passwordAlgorithm", "InvalidAlgo"); + InvocationTargetException exception = assertThrows(InvocationTargetException.class, () -> { + invokeHash(USER_PIN.getBytes(), SALT); + }); + assertEquals(CryptoManagerException.class, exception.getTargetException().getClass()); + } + + @Test + void testHexDecode() throws Exception { + String hexData = "7465737464617461"; + byte[] decodedBytes = invokeHexDecode(hexData); + assertEquals(TEST_DATA, new String(decodedBytes)); + } + + @Test + void testHexDecodeWithOddLength() { + String hexData = "7465737464617461F"; + InvocationTargetException exception = assertThrows(InvocationTargetException.class, () -> { + invokeHexDecode(hexData); + }); + assertEquals(ParseException.class, exception.getTargetException().getClass()); + } + + @Test + void testStaticSymmetricDecryptWithEmptyAadDoesNotUseAad() throws Exception { + SecretKey key = new SecretKeySpec("testkey123456789".getBytes(), AES_KEY_TYPE); + byte[] iv16 = "testnonce1234567".getBytes(); + byte[] encryptedData = encrypt(TEST_DATA, key, iv16, null); + + byte[] combined = new byte[encryptedData.length + iv16.length]; + System.arraycopy(encryptedData, 0, combined, 0, encryptedData.length); + System.arraycopy(iv16, 0, combined, encryptedData.length, iv16.length); + + Method staticMethod = DerivedKeyCryptoUtil.class.getDeclaredMethod("symmetricDecrypt", SecretKey.class, byte[].class, byte[].class); + staticMethod.setAccessible(true); + byte[] decrypted = (byte[]) staticMethod.invoke(null, key, combined, new byte[0]); + assertEquals(TEST_DATA, new String(decrypted)); + } + + private byte[] invokeSymmetricDecrypt(SecretKey key, byte[] data, byte[] iv, byte[] aad) throws Exception { + Method method = DerivedKeyCryptoUtil.class.getDeclaredMethod("symmetricDecrypt", SecretKey.class, byte[].class, byte[].class, byte[].class); + method.setAccessible(true); + return (byte[]) method.invoke(derivedKeyCryptoUtil, key, data, iv, aad); + } + + private SecretKey getDerivedKey(String userPin, byte[] salt) throws Exception { + Method method = DerivedKeyCryptoUtil.class.getDeclaredMethod("getDerivedKey", String.class, byte[].class); + method.setAccessible(true); + return (SecretKey) method.invoke(derivedKeyCryptoUtil, userPin, salt); + } + + private String invokeHash(byte[] data, byte[] salt) throws Exception { + Method method = DerivedKeyCryptoUtil.class.getDeclaredMethod("hash", byte[].class, byte[].class); + method.setAccessible(true); + return (String) method.invoke(derivedKeyCryptoUtil, data, salt); + } + + private byte[] invokeHexDecode(String hexData) throws Exception { + Method method = DerivedKeyCryptoUtil.class.getDeclaredMethod("hexDecode", String.class); + method.setAccessible(true); + return (byte[]) method.invoke(derivedKeyCryptoUtil, hexData); + } +} diff --git a/src/test/java/io/mosip/mimoto/util/P12KeyStoreManagerTest.java b/src/test/java/io/mosip/mimoto/util/P12KeyStoreManagerTest.java new file mode 100644 index 000000000..096d4d667 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/util/P12KeyStoreManagerTest.java @@ -0,0 +1,379 @@ +package io.mosip.mimoto.util; + +import io.mosip.mimoto.exception.CryptoManagerException; +import org.apache.commons.codec.binary.Base64; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.test.util.ReflectionTestUtils; + +import javax.crypto.Cipher; +import javax.crypto.KeyGenerator; +import javax.crypto.SecretKey; +import javax.crypto.spec.GCMParameterSpec; +import javax.crypto.spec.SecretKeySpec; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.security.*; +import java.security.cert.Certificate; +import java.util.Arrays; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; + +@RunWith(MockitoJUnitRunner.class) +public class P12KeyStoreManagerTest { + + @InjectMocks + private P12KeyStoreManager p12KeyStoreManager; + + private KeyPair keyPair; + private KeyStore.PrivateKeyEntry privateKeyEntry; + private SecretKey symmetricKey; + private static final String KEY_SPLITTER = "#KEY_SPLITTER#"; + private static final byte[] VERSION_RSA_2048 = "VER_R2".getBytes(); + private static final int THUMBPRINT_LENGTH = 32; + private static final int NONCE = 12; + + @Before + public void setUp() throws Exception { + KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); + keyPairGenerator.initialize(2048); + keyPair = keyPairGenerator.generateKeyPair(); + + Certificate certificate = generateSelfSignedCertificate(keyPair); + Certificate[] certChain = new Certificate[]{certificate}; + privateKeyEntry = new KeyStore.PrivateKeyEntry(keyPair.getPrivate(), certChain); + + KeyGenerator keyGen = KeyGenerator.getInstance("AES"); + keyGen.init(256); + symmetricKey = keyGen.generateKey(); + + ReflectionTestUtils.setField(p12KeyStoreManager, "fileName", "test.p12"); + ReflectionTestUtils.setField(p12KeyStoreManager, "cyptoPassword", "test123"); + ReflectionTestUtils.setField(p12KeyStoreManager, "alias", "testalias"); + ReflectionTestUtils.setField(p12KeyStoreManager, "isThumbprint", true); + } + + private java.security.cert.X509Certificate generateSelfSignedCertificate(KeyPair keyPair) throws Exception { + long now = System.currentTimeMillis(); + java.util.Date startDate = new java.util.Date(now); + org.bouncycastle.asn1.x500.X500Name dnName = new org.bouncycastle.asn1.x500.X500Name("CN=Test"); + java.math.BigInteger certSerialNumber = java.math.BigInteger.valueOf(now); + + java.util.Calendar calendar = java.util.Calendar.getInstance(); + calendar.setTime(startDate); + calendar.add(java.util.Calendar.YEAR, 1); + java.util.Date endDate = calendar.getTime(); + + org.bouncycastle.cert.jcajce.JcaX509v3CertificateBuilder certBuilder = + new org.bouncycastle.cert.jcajce.JcaX509v3CertificateBuilder( + dnName, certSerialNumber, startDate, endDate, dnName, keyPair.getPublic()); + + org.bouncycastle.operator.ContentSigner contentSigner = + new org.bouncycastle.operator.jcajce.JcaContentSignerBuilder("SHA256WithRSA") + .build(keyPair.getPrivate()); + + org.bouncycastle.cert.X509CertificateHolder certHolder = certBuilder.build(contentSigner); + return new org.bouncycastle.cert.jcajce.JcaX509CertificateConverter().getCertificate(certHolder); + } + + @Test + public void testDecrypt_Success() throws Exception { + String plainText = "Test Data"; + P12KeyStoreManager spyManager = spy(p12KeyStoreManager); + doReturn(privateKeyEntry).when(spyManager).loadP12(); + doReturn(plainText.getBytes()).when(spyManager).decryptData(any(byte[].class), any(KeyStore.PrivateKeyEntry.class)); + + String result = spyManager.decrypt(Base64.encodeBase64String("test".getBytes())); + + assertEquals(plainText, result); + } + + @Test + public void testDecrypt_WithNullData() throws Exception { + String result = p12KeyStoreManager.decrypt(null); + assertNull(result); + } + + @Test + public void testDecrypt_ExceptionHandling() throws Exception { + P12KeyStoreManager spyManager = spy(p12KeyStoreManager); + doThrow(new IOException("Test exception")).when(spyManager).loadP12(); + + String result = spyManager.decrypt("invalid_data"); + assertNull(result); + } + + @Test + public void testLoadP12_FileNotFound() throws Exception { + KeyStore.PrivateKeyEntry entry = p12KeyStoreManager.loadP12("nonexistent.p12", "alias", "password"); + assertNull(entry); + } + + @Test + public void testLoadP12_InvalidFile() throws Exception { + java.io.File tempFile = java.io.File.createTempFile("invalid", ".p12"); + tempFile.deleteOnExit(); + try { + try (java.io.FileWriter writer = new java.io.FileWriter(tempFile)) { + writer.write("Not a valid PKCS12 file"); + } + + KeyStore.PrivateKeyEntry entry = p12KeyStoreManager.loadP12(tempFile.getAbsolutePath(), "alias", "password"); + assertNull(entry); + } finally { + // Ensure cleanup even if writer.write(...) or loadP12(...) throws + tempFile.delete(); + } + } + + @Test + public void testDecryptData_InvalidFormat() throws Exception { + byte[] invalidData = "invalid_data_no_splitter".getBytes(); + byte[] result = p12KeyStoreManager.decryptData(invalidData, privateKeyEntry); + assertNull(result); + } + + @Test + public void testDecryptData_WithNullPrivateKey() throws Exception { + byte[] data = ("key" + KEY_SPLITTER + "data").getBytes(); + byte[] result = p12KeyStoreManager.decryptData(data, null); + assertNull(result); + } + + @Test + public void testParseEncryptKeyHeader_WithVersionHeader() { + byte[] encryptedKey = new byte[THUMBPRINT_LENGTH + VERSION_RSA_2048.length + 256]; + System.arraycopy(VERSION_RSA_2048, 0, encryptedKey, 0, VERSION_RSA_2048.length); + + byte[] result = p12KeyStoreManager.parseEncryptKeyHeader(encryptedKey); + assertArrayEquals(VERSION_RSA_2048, result); + } + + @Test + public void testParseEncryptKeyHeader_WithoutVersionHeader() { + byte[] encryptedKey = new byte[THUMBPRINT_LENGTH + 256]; + Arrays.fill(encryptedKey, (byte) 0); + + byte[] result = p12KeyStoreManager.parseEncryptKeyHeader(encryptedKey); + assertEquals(0, result.length); + } + + @Test + public void testGetCertificateThumbprint_Success() throws Exception { + Certificate mockCert = mock(Certificate.class); + when(mockCert.getEncoded()).thenReturn("test certificate data".getBytes()); + + byte[] thumbprint = P12KeyStoreManager.getCertificateThumbprint(mockCert); + + assertNotNull(thumbprint); + assertEquals(32, thumbprint.length); + } + + @Test(expected = CryptoManagerException.class) + public void testGetCertificateThumbprint_Exception() throws Exception { + Certificate mockCert = mock(Certificate.class); + when(mockCert.getEncoded()).thenThrow(new java.security.cert.CertificateEncodingException("Test exception")); + + P12KeyStoreManager.getCertificateThumbprint(mockCert); + } + + @Test + public void testSymmetricDecrypt_Success() throws Exception { + String plainText = "Test Data"; + byte[] plainBytes = plainText.getBytes(StandardCharsets.UTF_8); + + byte[] nonce = new byte[NONCE]; + new SecureRandom().nextBytes(nonce); + + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + SecretKeySpec keySpec = new SecretKeySpec(symmetricKey.getEncoded(), "AES"); + GCMParameterSpec gcmSpec = new GCMParameterSpec(128, nonce); + cipher.init(Cipher.ENCRYPT_MODE, keySpec, gcmSpec); + byte[] encryptedBytes = cipher.doFinal(plainBytes); + + byte[] result = p12KeyStoreManager.symmetricDecrypt(symmetricKey, encryptedBytes, nonce, null); + + assertNotNull(result); + assertEquals(plainText, new String(result, StandardCharsets.UTF_8)); + } + + @Test + public void testSymmetricDecrypt_WithAAD() throws Exception { + String plainText = "Test Data"; + byte[] plainBytes = plainText.getBytes(StandardCharsets.UTF_8); + + byte[] nonce = new byte[NONCE]; + new SecureRandom().nextBytes(nonce); + byte[] aad = new byte[32]; + System.arraycopy(nonce, 0, aad, 0, NONCE); + + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + SecretKeySpec keySpec = new SecretKeySpec(symmetricKey.getEncoded(), "AES"); + GCMParameterSpec gcmSpec = new GCMParameterSpec(128, nonce); + cipher.init(Cipher.ENCRYPT_MODE, keySpec, gcmSpec); + cipher.updateAAD(aad); + byte[] encryptedBytes = cipher.doFinal(plainBytes); + + byte[] result = p12KeyStoreManager.symmetricDecrypt(symmetricKey, encryptedBytes, nonce, aad); + + assertNotNull(result); + assertEquals(plainText, new String(result, StandardCharsets.UTF_8)); + } + + @Test(expected = CryptoManagerException.class) + public void testSymmetricDecrypt_WrongKey() throws Exception { + String plainText = "Test Data"; + byte[] plainBytes = plainText.getBytes(StandardCharsets.UTF_8); + byte[] nonce = new byte[NONCE]; + new SecureRandom().nextBytes(nonce); + + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + SecretKeySpec keySpec = new SecretKeySpec(symmetricKey.getEncoded(), "AES"); + GCMParameterSpec gcmSpec = new GCMParameterSpec(128, nonce); + cipher.init(Cipher.ENCRYPT_MODE, keySpec, gcmSpec); + byte[] encryptedBytes = cipher.doFinal(plainBytes); + + KeyGenerator keyGen = KeyGenerator.getInstance("AES"); + keyGen.init(256); + SecretKey differentKey = keyGen.generateKey(); + + p12KeyStoreManager.symmetricDecrypt(differentKey, encryptedBytes, nonce, null); + } + + @Test + public void testAsymmetricDecrypt_PrivateMethod() throws Exception { + String plainText = "Test Symmetric Key"; + byte[] plainBytes = plainText.getBytes(); + + Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING"); + javax.crypto.spec.OAEPParameterSpec oaepParams = new javax.crypto.spec.OAEPParameterSpec("SHA-256", "MGF1", + java.security.spec.MGF1ParameterSpec.SHA256, javax.crypto.spec.PSource.PSpecified.DEFAULT); + cipher.init(Cipher.ENCRYPT_MODE, keyPair.getPublic(), oaepParams); + byte[] encryptedBytes = cipher.doFinal(plainBytes); + + java.lang.reflect.Method method = P12KeyStoreManager.class.getDeclaredMethod("asymmetricDecrypt", + java.security.PrivateKey.class, java.math.BigInteger.class, byte[].class); + method.setAccessible(true); + + byte[] result = (byte[]) method.invoke(null, keyPair.getPrivate(), + ((java.security.interfaces.RSAPrivateKey) keyPair.getPrivate()).getModulus(), encryptedBytes); + + assertNotNull(result); + assertArrayEquals(plainBytes, result); + } + + @Test + public void testSymmetricDecrypt_PrivateMethod() throws Exception { + String plainText = "Test Data"; + byte[] plainBytes = plainText.getBytes(StandardCharsets.UTF_8); + + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + SecretKeySpec keySpec = new SecretKeySpec(symmetricKey.getEncoded(), "AES"); + byte[] iv = new byte[16]; + new SecureRandom().nextBytes(iv); + GCMParameterSpec gcmSpec = new GCMParameterSpec(128, iv); + cipher.init(Cipher.ENCRYPT_MODE, keySpec, gcmSpec); + byte[] aad = "additional data".getBytes(); + cipher.updateAAD(aad); + byte[] encryptedData = cipher.doFinal(plainBytes); + + java.io.ByteArrayOutputStream outputStream = new java.io.ByteArrayOutputStream(); + outputStream.write(encryptedData); + outputStream.write(iv); + byte[] dataWithIV = outputStream.toByteArray(); + + java.lang.reflect.Method method = P12KeyStoreManager.class.getDeclaredMethod("symmetricDecrypt", + SecretKey.class, byte[].class, byte[].class); + method.setAccessible(true); + + byte[] result = (byte[]) method.invoke(null, symmetricKey, dataWithIV, aad); + + assertNotNull(result); + assertEquals(plainText, new String(result, StandardCharsets.UTF_8)); + } + + @Test + public void testDecryptData_WithThumbprint_NoVersionHeader() throws Exception { + ReflectionTestUtils.setField(p12KeyStoreManager, "isThumbprint", true); + + String plainText = "Test Data"; + byte[] plainBytes = plainText.getBytes(StandardCharsets.UTF_8); + + Cipher aesCipher = Cipher.getInstance("AES/GCM/NoPadding"); + SecretKeySpec keySpec = new SecretKeySpec(symmetricKey.getEncoded(), "AES"); + byte[] iv = new byte[16]; + new SecureRandom().nextBytes(iv); + GCMParameterSpec gcmSpec = new GCMParameterSpec(128, iv); + aesCipher.init(Cipher.ENCRYPT_MODE, keySpec, gcmSpec); + byte[] encryptedData = aesCipher.doFinal(plainBytes); + + java.io.ByteArrayOutputStream dataStream = new java.io.ByteArrayOutputStream(); + dataStream.write(encryptedData); + dataStream.write(iv); + byte[] fullEncryptedData = dataStream.toByteArray(); + + Cipher rsaCipher = Cipher.getInstance("RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING"); + javax.crypto.spec.OAEPParameterSpec oaepParams = new javax.crypto.spec.OAEPParameterSpec("SHA-256", "MGF1", + java.security.spec.MGF1ParameterSpec.SHA256, javax.crypto.spec.PSource.PSpecified.DEFAULT); + rsaCipher.init(Cipher.ENCRYPT_MODE, keyPair.getPublic(), oaepParams); + byte[] encryptedSymmetricKey = rsaCipher.doFinal(symmetricKey.getEncoded()); + + java.io.ByteArrayOutputStream keyStream = new java.io.ByteArrayOutputStream(); + keyStream.write(new byte[32]); // THUMBPRINT_LENGTH = 32 + keyStream.write(encryptedSymmetricKey); + byte[] fullEncryptedKey = keyStream.toByteArray(); + + java.io.ByteArrayOutputStream finalStream = new java.io.ByteArrayOutputStream(); + finalStream.write(fullEncryptedKey); + finalStream.write("#KEY_SPLITTER#".getBytes()); + finalStream.write(fullEncryptedData); + byte[] finalData = finalStream.toByteArray(); + + byte[] result = p12KeyStoreManager.decryptData(finalData, privateKeyEntry); + + assertNotNull(result); + assertEquals(plainText, new String(result, StandardCharsets.UTF_8)); + } + + @Test + public void testDecryptData_WithoutThumbprint_NoVersionHeader() throws Exception { + ReflectionTestUtils.setField(p12KeyStoreManager, "isThumbprint", false); + + String plainText = "Test Data"; + byte[] plainBytes = plainText.getBytes(StandardCharsets.UTF_8); + + Cipher aesCipher = Cipher.getInstance("AES/GCM/NoPadding"); + SecretKeySpec keySpec = new SecretKeySpec(symmetricKey.getEncoded(), "AES"); + byte[] iv = new byte[16]; + new SecureRandom().nextBytes(iv); + GCMParameterSpec gcmSpec = new GCMParameterSpec(128, iv); + aesCipher.init(Cipher.ENCRYPT_MODE, keySpec, gcmSpec); + byte[] encryptedData = aesCipher.doFinal(plainBytes); + + java.io.ByteArrayOutputStream dataStream = new java.io.ByteArrayOutputStream(); + dataStream.write(encryptedData); + dataStream.write(iv); + byte[] fullEncryptedData = dataStream.toByteArray(); + + Cipher rsaCipher = Cipher.getInstance("RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING"); + javax.crypto.spec.OAEPParameterSpec oaepParams = new javax.crypto.spec.OAEPParameterSpec("SHA-256", "MGF1", + java.security.spec.MGF1ParameterSpec.SHA256, javax.crypto.spec.PSource.PSpecified.DEFAULT); + rsaCipher.init(Cipher.ENCRYPT_MODE, keyPair.getPublic(), oaepParams); + byte[] encryptedSymmetricKey = rsaCipher.doFinal(symmetricKey.getEncoded()); + + java.io.ByteArrayOutputStream finalStream = new java.io.ByteArrayOutputStream(); + finalStream.write(encryptedSymmetricKey); + finalStream.write("#KEY_SPLITTER#".getBytes()); + finalStream.write(fullEncryptedData); + byte[] finalData = finalStream.toByteArray(); + + byte[] result = p12KeyStoreManager.decryptData(finalData, privateKeyEntry); + + assertNotNull(result); + assertEquals(plainText, new String(result, StandardCharsets.UTF_8)); + } +} diff --git a/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java b/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java index 31bceec39..e94c0cd06 100644 --- a/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java +++ b/src/test/java/io/mosip/mimoto/util/WalletUtilTest.java @@ -1,9 +1,13 @@ package io.mosip.mimoto.util; +import io.mosip.kernel.cryptomanager.dto.CryptoWithPinRequestDto; +import io.mosip.kernel.cryptomanager.dto.CryptoWithPinResponseDto; +import io.mosip.kernel.cryptomanager.service.CryptomanagerService; import io.mosip.mimoto.constant.SessionKeys; import io.mosip.mimoto.model.Wallet; import io.mosip.mimoto.exception.InvalidRequestException; import io.mosip.mimoto.repository.WalletRepository; +import io.mosip.mimoto.service.DataProtectionService; import jakarta.servlet.http.HttpSession; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.BeforeEach; @@ -33,7 +37,10 @@ class WalletUtilTest { private WalletRepository walletRepository; @Mock - private EncryptionDecryptionUtil encryptionDecryptionUtil; + private DataProtectionService dataProtectionService; + + @Mock + private CryptomanagerService cryptomanagerService; @InjectMocks private WalletUtil walletUtil; @@ -54,7 +61,7 @@ void setUp() { if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null) { Security.addProvider(new BouncyCastleProvider()); } - + pin = "1234"; name = "default"; userId = UUID.randomUUID().toString(); @@ -68,7 +75,9 @@ void setUp() { @Test void shouldDecryptWalletKeySuccessfully() { - when(encryptionDecryptionUtil.decryptWithPin(encryptedWalletKey, pin)).thenReturn(decryptedWalletKey); + CryptoWithPinResponseDto responseDto = new CryptoWithPinResponseDto(); + responseDto.setData(decryptedWalletKey); + when(cryptomanagerService.decryptWithPin(any(CryptoWithPinRequestDto.class))).thenReturn(responseDto); String decrypted = walletUtil.decryptWalletKey(encryptedWalletKey, pin); @@ -77,19 +86,21 @@ void shouldDecryptWalletKeySuccessfully() { @Test void shouldThrowErrorWhenDecryptionOfWalletKeyFails() { - when(encryptionDecryptionUtil.decryptWithPin(encryptedWalletKey, pin)).thenThrow(new RuntimeException("Failed to decrypt with PIN")); + when(cryptomanagerService.decryptWithPin(any(CryptoWithPinRequestDto.class))).thenThrow(new RuntimeException("Failed to decrypt with PIN")); InvalidRequestException ex = assertThrows(InvalidRequestException.class, () -> walletUtil.decryptWalletKey(encryptedWalletKey, pin)); assertEquals("invalid_pin", ex.getErrorCode()); - assertEquals("invalid_pin --> Invalid PIN or wallet key provided java.lang.RuntimeException: Failed to decrypt with PIN", ex.getMessage()); + assertEquals("Failed to decrypt with PIN", ex.getCause().getMessage()); } @Test void shouldCreateNewWalletSuccessfully() { - when(encryptionDecryptionUtil.encryptKeyWithPin(any(SecretKey.class), any(String.class))).thenReturn(encryptedWalletKey); - when(encryptionDecryptionUtil.encryptWithAES(any(SecretKey.class), any(byte[].class))).thenReturn(encryptedPrivateKey); + CryptoWithPinResponseDto responseDto = new CryptoWithPinResponseDto(); + responseDto.setData(encryptedWalletKey); + when(cryptomanagerService.encryptWithPin(any(CryptoWithPinRequestDto.class))).thenReturn(responseDto); + when(dataProtectionService.encryptWithAES(any(SecretKey.class), any(byte[].class))).thenReturn(encryptedPrivateKey); String walletId = walletUtil.saveWallet(userId, name, pin, encryptionKey, encryptionAlgorithm, encryptionType); @@ -98,8 +109,10 @@ void shouldCreateNewWalletSuccessfully() { @Test void shouldCreateEd25519WalletSuccessfully() { - when(encryptionDecryptionUtil.encryptKeyWithPin(any(SecretKey.class), any(String.class))).thenReturn(encryptedWalletKey); - when(encryptionDecryptionUtil.encryptWithAES(any(SecretKey.class), any(byte[].class))).thenReturn(encryptedPrivateKey); + CryptoWithPinResponseDto responseDto = new CryptoWithPinResponseDto(); + responseDto.setData(encryptedWalletKey); + when(cryptomanagerService.encryptWithPin(any(CryptoWithPinRequestDto.class))).thenReturn(responseDto); + when(dataProtectionService.encryptWithAES(any(SecretKey.class), any(byte[].class))).thenReturn(encryptedPrivateKey); String walletId = walletUtil.createWallet(userId, name, pin); @@ -108,8 +121,10 @@ void shouldCreateEd25519WalletSuccessfully() { @Test void shouldVerifyWalletObjectOnCreateNewWallet() { - when(encryptionDecryptionUtil.encryptKeyWithPin(any(SecretKey.class), any(String.class))).thenReturn(encryptedWalletKey); - when(encryptionDecryptionUtil.encryptWithAES(any(SecretKey.class), any(byte[].class))).thenReturn(encryptedPrivateKey); + CryptoWithPinResponseDto responseDto = new CryptoWithPinResponseDto(); + responseDto.setData(encryptedWalletKey); + when(cryptomanagerService.encryptWithPin(any(CryptoWithPinRequestDto.class))).thenReturn(responseDto); + when(dataProtectionService.encryptWithAES(any(SecretKey.class), any(byte[].class))).thenReturn(encryptedPrivateKey); String walletId = walletUtil.saveWallet(userId, name, pin, encryptionKey, encryptionAlgorithm, encryptionType); From 88737feb29cedd98ad97cb20fae597dfc56af0c1 Mon Sep 17 00:00:00 2001 From: Durgesh Konga Date: Mon, 23 Feb 2026 15:43:25 +0530 Subject: [PATCH 823/860] [INJIWEB-1841] - Add V2 issuers API and IssuerResponseDTO for V1 endpoints (#1032) * [INJIWEB-1841] - Add V2 issuers API and IssuerResponseDTO for V1 list/single-issuer endpoints Signed-off-by: Durgesh Konga * [INJIWEB-1841] - Chain startup validation exception cause; parallelize well-known fetch; remove MOSIP VC template - IssuersValidationConfig: throw RuntimeException(VALIDATION_ERROR_MSG, e) and assert cause in test - IssuersServiceImpl: use parallelStream() for getIssuersResponse to avoid N sequential well-known calls - Delete Mosip-MOSIPVerifiableCredential-template.html - Minor formatting (IssuersV2Controller, IssuerDTO, IssuersServiceImpl catch/imports) Signed-off-by: Durgesh Konga * [INJIWEB-1841] - docs: document Issuers V2 API and mimoto-issuers-config - OpenAPI: add GET /v2/issuers and GET /v2/issuers/{issuer-id} and IssuerDTOV2 schema - Postman: add get Issuers List (V2), get Issuer by ID (V2), Search Issuers List (V2) - Add issuers-v2-and-config.md: V2 behaviour, config, old/new schema compatibility Signed-off-by: Durgesh Konga * [INJIWEB-1841] - fix OpenAPI V2 error schemas; add XSRF test to Postman V2 issuers list Signed-off-by: Durgesh Konga * [INJIWEB-1841] - Fix test scripts in postman collection Signed-off-by: Durgesh Konga * [INJIWEB-1841] - Revert line changes for IssuersValidationConfig Signed-off-by: Durgesh Konga * [INJIWEB-1841] - Revert line changes for IssuersValidationConfig Signed-off-by: Durgesh Konga * [INJIWEB-1841] - Update tag for api endpoint specification Signed-off-by: Durgesh Konga * [INJIWEB-1841] - Revert unintentional line break Signed-off-by: Durgesh Konga * [INJIWEB-1841] - Rename v2 issuer endpoints guide Signed-off-by: Durgesh Konga * [INJIWEB-1841] - Add IssuersResponseDTO wrapper and refactor code Signed-off-by: Durgesh Konga * [INJIWEB-1841] - refactor code Signed-off-by: Durgesh Konga * [INJIWEB-1841] - refactor code Signed-off-by: Durgesh Konga * [INJIWEB-1841] - Refactor issuers API and DTOs - V1: IssuersController returns IssuerDTO/IssuersDTO; getAllIssuers() no search; use getIssuers()/getIssuerDetails() - V2: IssuersV2Controller returns IssuerV2DTO/IssuersV2DTO; use getIssuersV2DTO()/getIssuerV2Details(); rename IssuerResponseDTO/IssuersResponseDTO to V2 DTOs - IssuersServiceImpl: add getIssuersV2DTO, getIssuerV2Details, toIssuerV2DTO; simplify getIssuers (no search) - Update IssuersValidationConfig, IssuerDTO, tests and TestUtilities for V2 Signed-off-by: Durgesh Konga * [INJIWEB-1841] - fix: base64url strip all padding; drop V2 search param; style/newline fixes Signed-off-by: Durgesh Konga * [INJIWEB-1841] - Remove talisman Signed-off-by: Durgesh Konga * [INJIWEB-1841] - Update IssuersV2DTO and api documentation Signed-off-by: Durgesh Konga * [INJIWEB-1841] - fix: V2 issuers return 503 for API/IO errors; remove V2 search Postman entry; catch-all error code Signed-off-by: Durgesh Konga * [INJIWEB-1841] - Remove search filter from api docs Signed-off-by: Durgesh Konga * [INJIWEB-1841] - Update readme Signed-off-by: Durgesh Konga * [INJIWEB-1841] - Update readme Signed-off-by: Durgesh Konga * [INJIWEB-1841] - Update md file name from Issuers-v2-endpoints-and-configuration to IssuersEndpointMigration Signed-off-by: Durgesh Konga * [INJIWEB-1841] - revert V1 endpoint controller and service class changes Signed-off-by: Durgesh Konga * [INJIWEB-1841] - Update readme, api docs and IssuersController Signed-off-by: Durgesh Konga * [INJIWEB-1843] - Update enabled in api docs, rename MD file Signed-off-by: Durgesh Konga --------- Signed-off-by: Durgesh Konga --- .talismanrc | 4 +- docs/IssuersV2EndpointMigration.md | 176 ++++++++++++++++++ docs/api-documentation-openapi.json | 158 ++++++++++++++++ .../MIMOTO.postman_collection.json | 31 +++ .../config/IssuersValidationConfig.java | 4 +- .../constant/SwaggerLiteralConstants.java | 8 + .../controller/IssuersV2Controller.java | 81 ++++++++ .../java/io/mosip/mimoto/dto/IssuerDTO.java | 21 ++- .../java/io/mosip/mimoto/dto/IssuerV2DTO.java | 62 ++++++ .../io/mosip/mimoto/dto/IssuersV2DTO.java | 18 ++ .../mosip/mimoto/service/IssuersService.java | 10 +- .../service/impl/IssuersServiceImpl.java | 39 +++- .../resources/application-default.properties | 2 +- .../config/IssuersValidationConfigTest.java | 38 +++- .../controller/IssuersControllerTest.java | 13 +- .../controller/IssuersV2ControllerTest.java | 166 +++++++++++++++++ .../mimoto/service/IssuersServiceTest.java | 65 +++++++ .../io/mosip/mimoto/util/TestUtilities.java | 38 ++-- 18 files changed, 897 insertions(+), 37 deletions(-) create mode 100644 docs/IssuersV2EndpointMigration.md create mode 100644 src/main/java/io/mosip/mimoto/controller/IssuersV2Controller.java create mode 100644 src/main/java/io/mosip/mimoto/dto/IssuerV2DTO.java create mode 100644 src/main/java/io/mosip/mimoto/dto/IssuersV2DTO.java create mode 100644 src/test/java/io/mosip/mimoto/controller/IssuersV2ControllerTest.java diff --git a/.talismanrc b/.talismanrc index 769193b0d..cc4966c8c 100644 --- a/.talismanrc +++ b/.talismanrc @@ -58,7 +58,7 @@ fileignoreconfig: - filename: docs/postman-collections/Collab.postman_environment.json checksum: 93662b305117d9ac73e9f8ace2bd8dc8b2de494908a8c69166d0c908cc80365c - filename: docs/postman-collections/MIMOTO.postman_collection.json - checksum: 6a78494d445c59d8e7787e2e232bd54c000b541f0baf3f19c3f9d024a03fe1b1 + checksum: 282da368540e45dcd9c5b6fcda47cee32d50a69ceb99e6ef69eea8dae08b45f6 - filename: src/test/java/io/mosip/mimoto/controller/InjiControllerTest.java checksum: c4e28436cb04004d9cb4e1492a1d013eac076936a3fa3a99d35bfb137f27c37b - filename: .github/workflows/push-trigger.yml @@ -236,4 +236,6 @@ fileignoreconfig: checksum: 561e00d1163216122eef55a10a018ce8f9a96fa2f26f9247797d514482a7f259 - filename: src/main/java/io/mosip/mimoto/util/factory/Ed25519AlgorithmHandler.java checksum: 6d9332df2edfc765ab45c8e985571bb5851c0da680afdc19becbc1e60362df20 +- filename: src/main/java/io/mosip/mimoto/controller/IssuersV2Controller.java + checksum: 132c81d2d4552789777632e7ff61c86ceb843c10a7177a5bcbd2eb1c196cb430 version: "" \ No newline at end of file diff --git a/docs/IssuersV2EndpointMigration.md b/docs/IssuersV2EndpointMigration.md new file mode 100644 index 000000000..01b769b53 --- /dev/null +++ b/docs/IssuersV2EndpointMigration.md @@ -0,0 +1,176 @@ +# Issuers V2 API and mimoto-issuers-config + +This document describes the **Issuers V2** endpoints, how to configure **mimoto-issuers-config.json**, and how **both the old and new issuer schema** are supported. + +--- + +## V2 Endpoints + +The V2 issuer API provides a minimal, configuration-only view of issuers. + +| Method | Path | Description | +|--------|------|-------------| +| GET | `/v2/issuers` | List all onboarded issuers | +| GET | `/v2/issuers/{issuer-id}` | Get a single issuer by ID | + +### V2 features + +- **Configuration-only response** + Response data comes only from **mimoto-issuers-config.json**. No remote well-known calls are made. Fields returned include: `issuer_id`, `protocol`, `display`, `client_id`, `token_endpoint`, `client_alias`, `qr_code_type`, `enabled`, `credential_issuer_host`. + +- **Same config, both APIs** + The same config file is used for: + - **V1** (`/issuers`, `/issuers/{issuer-id}`): returns an enriched response that may include well-known–derived fields (e.g. `wellknown_endpoint`, `authorization_audience`, `proxy_token_endpoint`). V1 may call each issuer’s well-known endpoint. + - **V2** (`/v2/issuers`, `/v2/issuers/{issuer-id}`): returns only the issuer entries from config; no well-known fetch. + +- **Error handling** + V2 returns `400` when the config is not accessible and `404` for an invalid `issuer-id` on the single-issuer endpoint. + +--- + +## Configuring mimoto-issuers-config.json + +### Location and property + +- **Property:** `mosip.openid.issuers` +- **Default (e.g. local):** `mimoto-issuers-config.json` (loaded from classpath, e.g. `src/main/resources/`). +- **Environment / Docker:** The same property can point to an external or mounted file path, depending on your deployment. + +Example in `application-local.properties`: + +```properties +mosip.openid.issuers=mimoto-issuers-config.json +``` + +### File structure + +The file must be valid JSON with a top-level key **`issuers`**, which is an array of issuer objects: + +```json +{ + "issuers": [ + { + "issuer_id": "MyIssuer", + "protocol": "OpenId4VCI", + "display": [ ... ], + "client_id": "...", + "token_endpoint": "https://...", + "client_alias": "...", + "qr_code_type": "OnlineSharing", + "enabled": "true", + "credential_issuer_host": "https://..." + } + ] +} +``` + +### Required fields (all schemas) + +Every issuer entry must include: + +| Field | Type | Description | +|-------|------|-------------| +| `issuer_id` | string | Unique identifier of the issuer | +| `protocol` | string | `"OTP"` or `"OpenId4VCI"` | +| `display` | array | At least one display object with `name`, `logo` (with `url`, `alt_text`), `title`, `description`, `language` | +| `client_id` | string | OIDC client ID | +| `token_endpoint` | string | Valid URL for the token endpoint | +| `client_alias` | string | Client alias in keyStore | +| `qr_code_type` | string | `"OnlineSharing"`, `"EmbeddedVC"`, or `"None"` | +| `enabled` | string | `"true"` or `"false"` | +| `credential_issuer_host` | string | Valid URL of the credential issuer host | + +Validation runs at startup (e.g. via `IssuersValidationConfig`). Invalid or missing required fields will cause startup failure with a clear message. + +--- + +## Old vs new schema (both supported) + +**Both the old and new issuer schema work** with the same application and config file. + +### New (minimal) schema + +Only the **required** fields above are needed. This is enough for **V2** and for **V1** to resolve well-known at runtime from `credential_issuer_host`: + +- `issuer_id`, `protocol`, `display`, `client_id`, `token_endpoint`, `client_alias`, `qr_code_type`, `enabled`, `credential_issuer_host` + +Example (minimal): + +```json +{ + "issuers": [ + { + "issuer_id": "StayProtected", + "protocol": "OpenId4VCI", + "display": [ + { + "name": "StayProtected Insurance", + "logo": { "url": "https://...", "alt_text": "Logo" }, + "title": "Download StayProtected Insurance Credentials", + "description": "Download insurance credential", + "language": "en" + } + ], + "client_id": "mpartner-default-mimoto-insurance-oidc", + "token_endpoint": "https://api.example.com/v1/mimoto/get-token/StayProtected", + "client_alias": "mpartner-default-mimoto-insurance-oidc", + "qr_code_type": "OnlineSharing", + "enabled": "true", + "credential_issuer_host": "https://injicertify-insurance.example.com" + } + ] +} +``` + +### Old (extended) schema + +You can still use the **extended** schema that includes optional fields previously used by the UI or tooling. These are **not** required for V2 or for V1; if present, they may be used or ignored depending on the endpoint: + +- `wellknown_endpoint` +- `redirect_uri` +- `authorization_audience` +- `proxy_token_endpoint` +- `credential_issuer` + +Example (extended): + +```json +{ + "issuers": [ + { + "issuer_id": "Mock", + "protocol": "OpenId4VCI", + "display": [ ... ], + "client_id": "wallet-demo", + "wellknown_endpoint": "https://.../.well-known/openid-credential-issuer", + "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", + "authorization_audience": "https://...", + "token_endpoint": "https://...", + "proxy_token_endpoint": "https://...", + "client_alias": "wallet-demo-client", + "qr_code_type": "OnlineSharing", + "enabled": "true", + "credential_issuer": "Mock", + "credential_issuer_host": "https://..." + } + ] +} +``` + +- **V2** ignores these extra fields and returns only the core issuer fields from config. +- **V1** returns these fields as-is from the config (non-null when present); + +You can **mix** minimal and extended entries in the same `issuers` array; both schemas are valid. + +--- + +## Summary + +| Topic | Summary | +|-------|---------| +| **V2 API** | `GET /v2/issuers` and `GET /v2/issuers/{issuer-id}`; config-only.| +| **Config file** | Set `mosip.openid.issuers` (e.g. `mimoto-issuers-config.json`); structure is `{ "issuers": [ ... ] }`. | +| **Required fields** | `issuer_id`, `protocol`, `display`, `client_id`, `token_endpoint`, `client_alias`, `qr_code_type`, `enabled`, `credential_issuer_host`. | +| **Schema compatibility** | Both **old (extended)** and **new (minimal)** issuer schemas work; extra fields are allowed and ignored by V2. | + +For OpenAPI details, see `docs/api-documentation-openapi.json` (paths `/v2/issuers` and `/v2/issuers/{issuer-id}`). For Postman, use the **Issuers** folder requests: **get Issuers List (V2)**, **get Issuer by ID (V2)**, and **Search Issuers List (V2)**. diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index aa6a65607..2f9b0e08c 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -1914,6 +1914,128 @@ } } }, + "/v2/issuers": { + "get": { + "operationId": "getAllIssuersV2", + "parameters": [], + "tags": [ + "Trusted Issuers V2" + ], + "summary": "Retrieve all onboarded issuers (V2)", + "description": "Retrieve all onboarded issuers in V2 response format. Returns minimal issuer data from configuration (issuer_id, client_id, credential_issuer_host, qr_code_type, token_endpoint, protocol, display, etc.) without fetching well-known endpoints.", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { "type": "string", "nullable": true }, + "version": { "type": "string", "nullable": true }, + "responsetime": { "type": "string", "format": "date-time", "nullable": true }, + "metadata": { "type": "object", "nullable": true }, + "response": { + "type": "object", + "properties": { + "issuers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IssuerV2DTO" + } + } + } + }, + "errors": { "type": "array", "items": { "type": "object", "properties": { "code": { "type": "string" }, "message": { "type": "string" } } }, "nullable": true } + } + } + } + } + }, + "400": { + "description": "Bad Request - API not accessible or configuration error", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "response": { "type": "object", "nullable": true }, + "errors": { "type": "array", "items": { "type": "object", "properties": { "code": { "type": "string" }, "message": { "type": "string" } } } } + } + } + } + } + } + } + } + }, + "/v2/issuers/{issuer-id}": { + "get": { + "operationId": "getIssuerByIdV2", + "parameters": [ + { + "name": "issuer-id", + "in": "path", + "required": true, + "schema": { "type": "string" }, + "description": "Unique identifier of the issuer" + } + ], + "tags": [ + "Trusted Issuers V2" + ], + "summary": "Retrieve specific issuer (V2)", + "description": "Retrieve a single issuer in V2 response format by issuer ID. Returns configuration-only data.", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { "type": "string", "nullable": true }, + "version": { "type": "string", "nullable": true }, + "responsetime": { "type": "string", "format": "date-time", "nullable": true }, + "metadata": { "type": "object", "nullable": true }, + "response": { "$ref": "#/components/schemas/IssuerV2DTO" }, + "errors": { "type": "array", "items": { "type": "object" }, "nullable": true } + } + } + } + } + }, + "404": { + "description": "Not Found - Invalid issuer ID", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "response": { "type": "object", "nullable": true }, + "errors": { "type": "array", "items": { "type": "object", "properties": { "code": { "type": "string" }, "message": { "type": "string" } } } } + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "response": { "type": "object", "nullable": true }, + "errors": { "type": "array" } + } + } + } + } + } + } + } + }, "/issuers/{issuer-id}/well-known-proxy": { "get": { "operationId": "getCredentialWellknown", @@ -5066,6 +5188,42 @@ } } }, + "IssuerV2DTO": { + "type": "object", + "description": "Minimal issuer representation (V2 API). Data from mimoto-issuers-config only.", + "properties": { + "issuer_id": { "type": "string", "description": "Unique identifier of the issuer" }, + "protocol": { "type": "string", "description": "Download flow protocol", "enum": ["OTP", "OpenId4VCI"] }, + "display": { + "type": "array", + "description": "Display properties of the issuer.", + "items": { + "type": "object", + "description": "Localized display entry for the issuer.", + "properties": { + "name": { "type": "string", "description": "Display name of the issuer." }, + "logo": { + "type": "object", + "description": "Display logo of the issuer.", + "properties": { + "url": { "type": "string", "description": "URL of the issuer logo image." }, + "alt_text": { "type": "string", "description": "Alternate text for the logo (accessibility)." } + } + }, + "title": { "type": "string", "description": "Display title of the issuer." }, + "description": { "type": "string", "description": "Short description of the issuer." }, + "language": { "type": "string", "description": "Language code for this display entry (e.g. en, fr)." } + } + } + }, + "client_id": { "type": "string", "description": "Onboarded Mimoto OIDC client ID" }, + "token_endpoint": { "type": "string", "description": "Token endpoint URL" }, + "client_alias": { "type": "string", "description": "Client alias in keyStore" }, + "qr_code_type": { "type": "string", "enum": ["OnlineSharing", "EmbeddedVC", "None"] }, + "enabled": { "type": "string", "description": "Whether issuer is enabled (\"true\", \"false\")" }, + "credential_issuer_host": { "type": "string", "description": "Credential issuer host URL" } + } + }, "Credential": { "type": "object", "properties": { diff --git a/docs/postman-collections/MIMOTO.postman_collection.json b/docs/postman-collections/MIMOTO.postman_collection.json index ef7c66a98..172af35f5 100644 --- a/docs/postman-collections/MIMOTO.postman_collection.json +++ b/docs/postman-collections/MIMOTO.postman_collection.json @@ -81,6 +81,37 @@ }, "response": [] }, + { + "name": "get Issuers List (V2)", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var token = pm.cookies.get('XSRF-TOKEN');", + "pm.environment.set('XSRF_TOKEN', token);" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": "{{HOST}}/v2/issuers" + }, + "response": [] + }, + { + "name": "get Issuer by ID (V2)", + "request": { + "method": "GET", + "header": [], + "url": "{{HOST}}/v2/issuers/StayProtected" + }, + "response": [] + }, { "name": "Download Credential With GetToken", "request": { diff --git a/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java b/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java index b706846b1..bba26e11a 100644 --- a/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java +++ b/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java @@ -39,14 +39,14 @@ public void run(ApplicationArguments args) throws ApiNotAccessibleException, IOE issuerDTOList = issuersService.getAllIssuers(); } catch (Exception e) { log.error(VALIDATION_ERROR_MSG, e); - throw new RuntimeException(VALIDATION_ERROR_MSG); + throw new RuntimeException(VALIDATION_ERROR_MSG, e); } if (issuerDTOList != null) { for (int index = 0; index < issuerDTOList.getIssuers().size(); index++) { IssuerDTO issuerDTO = issuerDTOList.getIssuers().get(index); if (!issuerDTO.getProtocol().equals("OTP")) { - Errors errors = new BeanPropertyBindingResult(issuerDTO, "issuerDTO"); + Errors errors = new BeanPropertyBindingResult(issuerDTO, "issuerV2DTO"); validator.validate(issuerDTO, errors); String issuerId = issuerDTO.getIssuer_id(); boolean issuerHasErrors = false; diff --git a/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java b/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java index 4e436041f..56c097842 100644 --- a/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java +++ b/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java @@ -52,6 +52,14 @@ public class SwaggerLiteralConstants { public static final String ISSUERS_GET_ISSUER_CONFIGURATION_SUMMARY = "Retrieve specific issuer's and its corresponding authorization server well-known config"; public static final String ISSUERS_GET_ISSUER_CONFIGURATION_DESCRIPTION = "This endpoint allows you to retrieve the well-known configuration of a specific issuer and its corresponding authorization server"; + /* Issuers V2 Controller */ + public static final String ISSUERS_V2_NAME = "Issuers V2"; + public static final String ISSUERS_V2_DESCRIPTION = "V2 API for issuers with minimal responses"; + public static final String ISSUERS_V2_GET_ISSUERS_SUMMARY = "Retrieve all onboarded issuers (V2)"; + public static final String ISSUERS_V2_GET_ISSUERS_DESCRIPTION = "Retrieve all onboarded issuers in V2 response format with issuer_id, client_id, credential_issuer_host, qr_code_type, token_endpoint"; + public static final String ISSUERS_V2_GET_ISSUER_SUMMARY = "Retrieve specific issuer (V2)"; + public static final String ISSUERS_V2_GET_ISSUER_DESCRIPTION = "Retrieve a single issuer in V2 response format by issuer ID"; + /* Prensentation Controller */ public static final String PRESENTATION_NAME = "Presentation"; public static final String PRESENTATION_DESCRIPTION = "All the online sharing related endpoints"; diff --git a/src/main/java/io/mosip/mimoto/controller/IssuersV2Controller.java b/src/main/java/io/mosip/mimoto/controller/IssuersV2Controller.java new file mode 100644 index 000000000..51be0615a --- /dev/null +++ b/src/main/java/io/mosip/mimoto/controller/IssuersV2Controller.java @@ -0,0 +1,81 @@ +package io.mosip.mimoto.controller; + +import io.mosip.mimoto.constant.SwaggerLiteralConstants; +import io.mosip.mimoto.core.http.ResponseWrapper; +import io.mosip.mimoto.dto.*; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.InvalidIssuerIdException; +import io.mosip.mimoto.service.IssuersService; +import io.mosip.mimoto.util.Utilities; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.io.IOException; +import java.util.List; + +import static io.mosip.mimoto.exception.PlatformErrorMessages.API_NOT_ACCESSIBLE_EXCEPTION; +import static io.mosip.mimoto.exception.PlatformErrorMessages.INVALID_ISSUER_ID_EXCEPTION; + +@RestController +@Slf4j +@RequestMapping("/v2/issuers") +@Tag(name = SwaggerLiteralConstants.ISSUERS_V2_NAME, description = SwaggerLiteralConstants.ISSUERS_V2_DESCRIPTION) +public class IssuersV2Controller { + + private final IssuersService issuersService; + + public IssuersV2Controller(IssuersService issuersService) { + this.issuersService = issuersService; + } + + @Operation(summary = SwaggerLiteralConstants.ISSUERS_V2_GET_ISSUERS_SUMMARY, description = SwaggerLiteralConstants.ISSUERS_V2_GET_ISSUERS_DESCRIPTION) + @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity> getAllIssuers() { + ResponseWrapper responseWrapper = new ResponseWrapper<>(); + try { + responseWrapper.setResponse(issuersService.getIssuersV2DTO()); + return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); + } catch (ApiNotAccessibleException | IOException e) { + log.error("Exception occurred while fetching issuers (V2)", e); + responseWrapper.setErrors(List.of(new ErrorDTO(API_NOT_ACCESSIBLE_EXCEPTION.getCode(), API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); + return ResponseEntity.status(HttpStatus.SERVICE_UNAVAILABLE).body(responseWrapper); + } catch (Exception e) { + log.error("Exception occurred while fetching issuers (V2)", e); + String[] errorObj = Utilities.handleExceptionWithErrorCode(e, API_NOT_ACCESSIBLE_EXCEPTION.getCode()); + responseWrapper.setErrors(Utilities.getErrors(errorObj[0], errorObj[1])); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); + } + } + + @Operation(summary = SwaggerLiteralConstants.ISSUERS_V2_GET_ISSUER_SUMMARY, description = SwaggerLiteralConstants.ISSUERS_V2_GET_ISSUER_DESCRIPTION) + @GetMapping(value = "/{issuer-id}", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity> getIssuerById(@PathVariable("issuer-id") String issuerId) { + ResponseWrapper responseWrapper = new ResponseWrapper<>(); + try { + IssuerV2DTO issuer = issuersService.getIssuerV2Details(issuerId); + responseWrapper.setResponse(issuer); + return ResponseEntity.status(HttpStatus.OK).body(responseWrapper); + } catch (InvalidIssuerIdException e) { + log.error("Invalid issuer id {} passed (V2)", issuerId); + responseWrapper.setErrors(List.of(new ErrorDTO(INVALID_ISSUER_ID_EXCEPTION.getCode(), INVALID_ISSUER_ID_EXCEPTION.getMessage()))); + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(responseWrapper); + } catch (ApiNotAccessibleException | IOException e) { + log.error("Exception occurred while fetching issuer {} (V2)", issuerId, e); + responseWrapper.setErrors(List.of(new ErrorDTO(API_NOT_ACCESSIBLE_EXCEPTION.getCode(), API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); + return ResponseEntity.status(HttpStatus.SERVICE_UNAVAILABLE).body(responseWrapper); + } catch (Exception e) { + log.error("Exception occurred while fetching issuer {} (V2)", issuerId, e); + String[] errorObj = Utilities.handleExceptionWithErrorCode(e, API_NOT_ACCESSIBLE_EXCEPTION.getCode()); + responseWrapper.setErrors(Utilities.getErrors(errorObj[0], errorObj[1])); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); + } + } +} diff --git a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java index 665314815..4605c0579 100644 --- a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java @@ -1,6 +1,5 @@ package io.mosip.mimoto.dto; -import com.fasterxml.jackson.annotation.JsonInclude; import io.mosip.mimoto.model.QRCodeType; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.*; @@ -10,53 +9,59 @@ import org.hibernate.validator.constraints.URL; import java.util.List; -import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL; - @Data public class IssuerDTO { @NotBlank @Schema(description = "Unique Identifier of the Issuer") String issuer_id; + @NotBlank @Schema(description = "protocol of the download flow", allowableValues = {"OTP", "OpenId4VCI"}) String protocol; + @Valid @NotEmpty @Schema(description = "Display Properties of the Issuer") List display; + @NotBlank @Schema(description = "Client Id of the Onboarded Mimoto OIDC Client") String client_id; + @URL - @NotBlank @Schema(description = "Wellknown endpoint of the credential issuer") String wellknown_endpoint; - @NotBlank + @Schema(description = "Redirect URI configured while creating the OIDC Client") String redirect_uri; - @NotBlank + @Schema(description = "Authorization Audience for retrieving Token from token endpoint") String authorization_audience; + @URL @NotBlank @Schema(description = "Mimoto Token Endpoint Fetching the Token From Authorization Server with Client Assertion") String token_endpoint; + @URL - @NotBlank @Schema(description = "Token Endpoint for Fetching the Token From Authorization Server") String proxy_token_endpoint; + @NotBlank @Schema(description = "Client Alias of the Issuer in the keyStore file") String client_alias; + @Schema(description = "QR code type of issuer is used to decide whether the downloaded Verifiable Credential is allowed for online sharing or not") QRCodeType qr_code_type; + @NotBlank @Schema(description = "Toggle to Enable / Disable the Issuer", defaultValue = "false") String enabled; - @NotBlank + @Schema(description = "Unique Identifier of the Issuer") String credential_issuer; + @URL @NotBlank @Schema(description = "Credential Issuer Host") diff --git a/src/main/java/io/mosip/mimoto/dto/IssuerV2DTO.java b/src/main/java/io/mosip/mimoto/dto/IssuerV2DTO.java new file mode 100644 index 000000000..6d6132a4b --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/IssuerV2DTO.java @@ -0,0 +1,62 @@ +package io.mosip.mimoto.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.mosip.mimoto.model.QRCodeType; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; +import org.hibernate.validator.constraints.URL; + +import java.util.List; + +@Data +public class IssuerV2DTO { + + @NotBlank + @Schema(description = "Unique Identifier of the Issuer") + @JsonProperty("issuer_id") + private String issuerId; + + @NotBlank + @Schema(description = "protocol of the download flow", allowableValues = {"OTP", "OpenId4VCI"}) + private String protocol; + + @Valid + @NotEmpty + @Schema(description = "Display Properties of the Issuer") + private List display; + + @NotBlank + @Schema(description = "Client Id of the Onboarded Mimoto OIDC Client") + @JsonProperty("client_id") + private String clientId; + + @NotBlank + @JsonProperty("client_alias") + @Schema(description = "Client Alias of the Issuer in the keyStore file") + private String clientAlias; + + @URL + @NotBlank + @JsonProperty("token_endpoint") + @Schema(description = "Mimoto Token Endpoint Fetching the Token From Authorization Server with Client Assertion") + private String tokenEndpoint; + + + @JsonProperty("qr_code_type") + @Schema(description = "QR code type of issuer is used to decide whether the downloaded Verifiable Credential is allowed for online sharing or not") + private QRCodeType qrCodeType; + + @NotBlank + @Schema(description = "Toggle to Enable / Disable the Issuer", defaultValue = "false") + private String enabled; + + @URL + @NotBlank + @JsonProperty("credential_issuer_host") + @Schema(description = "Credential Issuer Host") + private String credentialIssuerHost; + +} diff --git a/src/main/java/io/mosip/mimoto/dto/IssuersV2DTO.java b/src/main/java/io/mosip/mimoto/dto/IssuersV2DTO.java new file mode 100644 index 000000000..2d7d5ae23 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/IssuersV2DTO.java @@ -0,0 +1,18 @@ +package io.mosip.mimoto.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +import jakarta.validation.Valid; + +import java.util.List; + +@AllArgsConstructor +@Getter +public class IssuersV2DTO { + + @Valid + @Schema(description = "List of Onboarded Issuers") + List issuers; + +} diff --git a/src/main/java/io/mosip/mimoto/service/IssuersService.java b/src/main/java/io/mosip/mimoto/service/IssuersService.java index 647db4e49..035ddd135 100644 --- a/src/main/java/io/mosip/mimoto/service/IssuersService.java +++ b/src/main/java/io/mosip/mimoto/service/IssuersService.java @@ -1,7 +1,9 @@ package io.mosip.mimoto.service; import io.mosip.mimoto.dto.IssuerDTO; +import io.mosip.mimoto.dto.IssuerV2DTO; import io.mosip.mimoto.dto.IssuersDTO; +import io.mosip.mimoto.dto.IssuersV2DTO; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.AuthorizationServerWellknownResponseException; @@ -14,11 +16,15 @@ public interface IssuersService { IssuersDTO getIssuers(String search) throws ApiNotAccessibleException, IOException; - IssuerDTO getIssuerDetails(String issuerId) throws ApiNotAccessibleException, IOException, InvalidIssuerIdException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException; + IssuerDTO getIssuerDetails(String issuerId) throws ApiNotAccessibleException, IOException, InvalidIssuerIdException; - IssuersDTO getAllIssuers() throws ApiNotAccessibleException, AuthorizationServerWellknownResponseException, IOException, InvalidWellknownResponseException; + IssuersDTO getAllIssuers() throws ApiNotAccessibleException, IOException; CredentialIssuerConfiguration getIssuerConfiguration(String issuerId) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException; IssuerConfig getIssuerConfig(String issuerId, @NotBlank String credentialType) throws ApiNotAccessibleException, InvalidIssuerIdException; + + IssuersV2DTO getIssuersV2DTO() throws ApiNotAccessibleException, IOException; + + IssuerV2DTO getIssuerV2Details(String issuerId) throws ApiNotAccessibleException, IOException; } diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index e6da36d1b..9b3e35ded 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -1,9 +1,10 @@ package io.mosip.mimoto.service.impl; - import com.fasterxml.jackson.databind.ObjectMapper; import io.mosip.mimoto.dto.IssuerDTO; +import io.mosip.mimoto.dto.IssuerV2DTO; import io.mosip.mimoto.dto.IssuersDTO; +import io.mosip.mimoto.dto.IssuersV2DTO; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.exception.*; import io.mosip.mimoto.service.IssuersService; @@ -18,6 +19,7 @@ import org.springframework.validation.annotation.Validated; import java.io.IOException; +import java.util.List; import java.util.stream.Collectors; @@ -46,7 +48,7 @@ public IssuersDTO getIssuers(String search) throws ApiNotAccessibleException, IO } @Override - public IssuerDTO getIssuerDetails(String issuerId) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { + public IssuerDTO getIssuerDetails(String issuerId) throws ApiNotAccessibleException, IOException { IssuersDTO issuersDTO = getAllIssuers(); issuersDTO = getAllEnabledIssuers(issuersDTO); @@ -119,4 +121,37 @@ public IssuerConfig getIssuerConfig(String issuerId, @NotBlank String credential throw new ApiNotAccessibleException("Unable to fetch issuer configuration for issuerId: " + issuerId, e); } } + + @Override + public IssuersV2DTO getIssuersV2DTO() throws ApiNotAccessibleException, IOException { + IssuersDTO issuersDTO = getIssuers(null); + List list = issuersDTO.getIssuers().parallelStream().map(this::toIssuerV2DTO).collect(Collectors.toList()); + return new IssuersV2DTO(list); + } + + @Override + public IssuerV2DTO getIssuerV2Details(String issuerId) throws ApiNotAccessibleException, IOException { + IssuerDTO issuerDTO = getIssuerDetails(issuerId); + return toIssuerV2DTO(issuerDTO); + } + + /** + * Maps an {@link IssuerDTO} (from config) to {@link IssuerV2DTO} (API response). + */ + private IssuerV2DTO toIssuerV2DTO(IssuerDTO issuer) { + + IssuerV2DTO issuerV2DTO= new IssuerV2DTO(); + + issuerV2DTO.setIssuerId(issuer.getIssuer_id()); + issuerV2DTO.setProtocol(issuer.getProtocol()); + issuerV2DTO.setDisplay(issuer.getDisplay()); + issuerV2DTO.setClientId(issuer.getClient_id()); + issuerV2DTO.setTokenEndpoint(issuer.getToken_endpoint()); + issuerV2DTO.setClientAlias(issuer.getClient_alias()); + issuerV2DTO.setQrCodeType(issuer.getQr_code_type()); + issuerV2DTO.setEnabled(issuer.getEnabled()); + issuerV2DTO.setCredentialIssuerHost(issuer.getCredential_issuer_host()); + + return issuerV2DTO; + } } \ No newline at end of file diff --git a/src/main/resources/application-default.properties b/src/main/resources/application-default.properties index 7458106fe..c84c1ebd0 100644 --- a/src/main/resources/application-default.properties +++ b/src/main/resources/application-default.properties @@ -176,7 +176,7 @@ spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect # List of URLs that can be accessed without any user authentication by Identity Provider mosip.security.ignore-auth-urls=/safetynet/**,/actuator/**,/swagger-ui/**,/v3/api-docs/**,\ /allProperties,/credentials/**,/credentialshare/**,/binding-otp,/wallet-binding,/get-token/**,\ - /issuers,/issuers/**,/authorize,/req/otp,/vid,/req/auth/**,/req/individualId/otp,/aid/get-individual-id,\ + /issuers,/issuers/**,/v2/issuers,/v2/issuers/**,/authorize,/req/otp,/vid,/req/auth/**,/req/individualId/otp,/aid/get-individual-id,\ /verifiers, /auth/*/token-login # CSRF Security Configuration diff --git a/src/test/java/io/mosip/mimoto/config/IssuersValidationConfigTest.java b/src/test/java/io/mosip/mimoto/config/IssuersValidationConfigTest.java index fb9adce03..312b65565 100644 --- a/src/test/java/io/mosip/mimoto/config/IssuersValidationConfigTest.java +++ b/src/test/java/io/mosip/mimoto/config/IssuersValidationConfigTest.java @@ -1,6 +1,7 @@ package io.mosip.mimoto.config; import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.IssuersDTO; import io.mosip.mimoto.service.impl.IssuersServiceImpl; import org.junit.Assert; @@ -16,6 +17,7 @@ import static io.mosip.mimoto.util.TestUtilities.*; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -31,6 +33,8 @@ public class IssuersValidationConfigTest { IssuersDTO issuers = new IssuersDTO(); + private static final String VALIDATION_ERROR_MSG = "\n\nValidation failed in Mimoto-issuers-config.json:"; + @Test public void shouldNotThrowAnyExceptionForValidIssuersConfig() { try { @@ -43,15 +47,41 @@ public void shouldNotThrowAnyExceptionForValidIssuersConfig() { } } + @Test + public void shouldNotValidateIssuersWithProtocolOtp() { + try { + IssuerDTO otpIssuer = getIssuerConfigDTO("OtpIssuer"); + otpIssuer.setProtocol("OTP"); + issuers.setIssuers(List.of(otpIssuer)); + when(issuersService.getAllIssuers()).thenReturn(issuers); + + issuersValidationConfig.run(mock(ApplicationArguments.class)); + } catch (Exception e) { + Assert.fail("OTP protocol issuers should be skipped from validation; got: " + e.getMessage()); + } + } + + @Test + public void shouldThrowRuntimeExceptionWhenGetAllIssuersThrows() throws Exception { + when(issuersService.getAllIssuers()).thenThrow(new RuntimeException("config unavailable")); + + RuntimeException thrown = Assert.assertThrows(RuntimeException.class, + () -> issuersValidationConfig.run(mock(ApplicationArguments.class))); + + assertEquals(VALIDATION_ERROR_MSG, thrown.getMessage()); + assertNotNull(thrown.getCause()); + assertEquals("config unavailable", thrown.getCause().getMessage()); + } + @Test public void shouldThrowExceptionIfTheFieldValuesOfIssuerAreNotSatisfyingNotBlankAnnotation() { try { - issuers.setIssuers(List.of(getIssuerConfigDTOWithInvalidFieldValues("Issuer1", true, false), getIssuerConfigDTOWithInvalidFieldValues("Issuer2",true,false))); + issuers.setIssuers(List.of(getIssuerConfigDTOWithInvalidFieldValues("Issuer1", true, false), getIssuerConfigDTOWithInvalidFieldValues("Issuer2", true, false))); when(issuersService.getAllIssuers()).thenReturn(issuers); issuersValidationConfig.run(mock(ApplicationArguments.class)); } catch (Exception exception) { - String expectedErrorMsg = "\n\nValidation failed in Mimoto-issuers-config.json:\nErrors for issuer at index: 0 with issuerId - \n- authorization_audience must not be blank\n- client_alias must not be blank\n- client_id must not be blank\n- credential_issuer must not be blank\n- credential_issuer_host must not be blank\n- display[0].description must not be blank\n- display[0].language must not be blank\n- display[0].logo.url must be a valid URL\n- display[0].name must not be blank\n- display[0].title must not be blank\n- enabled must not be blank\n- issuer_id must not be blank\n- protocol must not be blank\n- proxy_token_endpoint must not be blank\n- redirect_uri must not be blank\n- token_endpoint must not be blank\n- wellknown_endpoint must not be blank\nErrors for issuer at index: 1 with issuerId - \n- authorization_audience must not be blank\n- client_alias must not be blank\n- client_id must not be blank\n- credential_issuer must not be blank\n- credential_issuer_host must not be blank\n- display[0].description must not be blank\n- display[0].language must not be blank\n- display[0].logo.url must be a valid URL\n- display[0].name must not be blank\n- display[0].title must not be blank\n- enabled must not be blank\n- issuer_id must not be blank\n- protocol must not be blank\n- proxy_token_endpoint must not be blank\n- redirect_uri must not be blank\n- token_endpoint must not be blank\n- wellknown_endpoint must not be blank\n- Duplicate value found for the issuerId. More than one issuer is having the same issuerId\n"; + String expectedErrorMsg = "\n\nValidation failed in Mimoto-issuers-config.json:\nErrors for issuer at index: 0 with issuerId - \n- client_alias must not be blank\n- client_id must not be blank\n- credential_issuer_host must not be blank\n- display[0].description must not be blank\n- display[0].language must not be blank\n- display[0].logo.url must be a valid URL\n- display[0].name must not be blank\n- display[0].title must not be blank\n- enabled must not be blank\n- issuer_id must not be blank\n- protocol must not be blank\n- token_endpoint must not be blank\nErrors for issuer at index: 1 with issuerId - \n- client_alias must not be blank\n- client_id must not be blank\n- credential_issuer_host must not be blank\n- display[0].description must not be blank\n- display[0].language must not be blank\n- display[0].logo.url must be a valid URL\n- display[0].name must not be blank\n- display[0].title must not be blank\n- enabled must not be blank\n- issuer_id must not be blank\n- protocol must not be blank\n- token_endpoint must not be blank\n- Duplicate value found for the issuerId. More than one issuer is having the same issuerId\n"; String actualErrorMsg = exception.getMessage(); assertEquals(expectedErrorMsg, actualErrorMsg); @@ -61,12 +91,12 @@ public void shouldThrowExceptionIfTheFieldValuesOfIssuerAreNotSatisfyingNotBlank @Test public void shouldThrowExceptionIfTheFieldValuesOfIssuerAreNotSatisfyingUrlAnnotation() { try { - issuers.setIssuers(List.of(getIssuerConfigDTOWithInvalidFieldValues("Issuer1", false, true), getIssuerConfigDTOWithInvalidFieldValues("Issuer2",false,true))); + issuers.setIssuers(List.of(getIssuerConfigDTOWithInvalidFieldValues("Issuer1", false, true), getIssuerConfigDTOWithInvalidFieldValues("Issuer2", false, true))); when(issuersService.getAllIssuers()).thenReturn(issuers); issuersValidationConfig.run(mock(ApplicationArguments.class)); } catch (Exception exception) { - String expectedErrorMsg = "\n\nValidation failed in Mimoto-issuers-config.json:\nErrors for issuer at index: 0 with issuerId - Issuer1id\n- credential_issuer_host must be a valid URL\n- proxy_token_endpoint must be a valid URL\n- token_endpoint must be a valid URL\n- wellknown_endpoint must be a valid URL\n- TokenEndpoint does not match with the credential issuerId\nErrors for issuer at index: 1 with issuerId - Issuer2id\n- credential_issuer_host must be a valid URL\n- proxy_token_endpoint must be a valid URL\n- token_endpoint must be a valid URL\n- wellknown_endpoint must be a valid URL\n- TokenEndpoint does not match with the credential issuerId\n"; + String expectedErrorMsg = "\n\nValidation failed in Mimoto-issuers-config.json:\nErrors for issuer at index: 0 with issuerId - Issuer1id\n- credential_issuer_host must be a valid URL\n- token_endpoint must be a valid URL\n- TokenEndpoint does not match with the credential issuerId\nErrors for issuer at index: 1 with issuerId - Issuer2id\n- credential_issuer_host must be a valid URL\n- token_endpoint must be a valid URL\n- TokenEndpoint does not match with the credential issuerId\n"; String actualErrorMsg = exception.getMessage(); assertEquals(expectedErrorMsg, actualErrorMsg); diff --git a/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java b/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java index 93bf2580c..dda673044 100644 --- a/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java @@ -35,6 +35,7 @@ import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.junit.Assert.assertTrue; @RunWith(SpringRunner.class) @SpringBootTest(classes = IssuersController.class) @@ -183,6 +184,16 @@ public void getIssuerWellknownTest() throws Exception { JSONAssert.assertEquals(new JSONObject(expectedCredentialIssuerWellknownResponse), new JSONObject(actualResponse), JSONCompareMode.LENIENT); } + @Test + public void getIssuerWellknownWhenServiceThrowsReturnsNotFound() throws Exception { + String issuerId = "issuer1"; + Mockito.when(issuersService.getIssuerConfiguration(issuerId)).thenThrow(new RuntimeException("well-known unreachable")); + + mockMvc.perform(get("/issuers/" + issuerId + "/well-known-proxy").accept(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isNotFound()) + .andExpect(result -> assertTrue(result.getResponse().getContentAsString().isEmpty())); + } + @Test public void getIssuerConfigurationTest() throws Exception { String issuerId = "id1"; @@ -220,4 +231,4 @@ public void shouldReturnExceptionInResponseOnGetIssuerConfigIfAnyExceptionOccurr .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getCode()))) .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); } -} +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/controller/IssuersV2ControllerTest.java b/src/test/java/io/mosip/mimoto/controller/IssuersV2ControllerTest.java new file mode 100644 index 000000000..c69d0cb83 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/controller/IssuersV2ControllerTest.java @@ -0,0 +1,166 @@ +package io.mosip.mimoto.controller; + +import io.mosip.mimoto.dto.IssuerV2DTO; +import io.mosip.mimoto.dto.IssuersV2DTO; +import io.mosip.mimoto.exception.ApiNotAccessibleException; +import io.mosip.mimoto.exception.InvalidIssuerIdException; +import io.mosip.mimoto.service.IssuersService; +import org.hamcrest.Matchers; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.ResultActions; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; + +import java.io.IOException; +import java.util.List; + +import static io.mosip.mimoto.exception.PlatformErrorMessages.API_NOT_ACCESSIBLE_EXCEPTION; +import static io.mosip.mimoto.exception.PlatformErrorMessages.INVALID_ISSUER_ID_EXCEPTION; +import static io.mosip.mimoto.util.TestUtilities.getIssuerResponseDTO; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = IssuersV2Controller.class) +@AutoConfigureMockMvc(addFilters = false) +@EnableWebMvc +public class IssuersV2ControllerTest { + + private static final String LIST_PATH = "/v2/issuers"; + private static final String ISSUER_PATH = "/v2/issuers/{issuer-id}"; + + @Autowired + private MockMvc mockMvc; + + @MockBean + private IssuersService issuersService; + + @Before + public void setUp() { + Mockito.reset(issuersService); + } + + private ResultActions performGetList() throws Exception { + return mockMvc.perform(get(LIST_PATH).accept(MediaType.APPLICATION_JSON_VALUE)); + } + + private ResultActions performGetIssuer(String issuerId) throws Exception { + return mockMvc.perform(get(ISSUER_PATH, issuerId).accept(MediaType.APPLICATION_JSON_VALUE)); + } + + + @Test + public void getAllIssuersSuccessReturnsOkWithIssuersV2DTO() throws Exception { + List issuerList = List.of(getIssuerResponseDTO("IssuerA"), getIssuerResponseDTO("IssuerB")); + Mockito.when(issuersService.getIssuersV2DTO()).thenReturn(new IssuersV2DTO(issuerList)); + + performGetList() + .andExpect(status().isOk()) + .andExpect(jsonPath("$.response.issuers", Matchers.hasSize(2))) + .andExpect(jsonPath("$.response.issuers[*].issuer_id", Matchers.everyItem(Matchers.anyOf(Matchers.is("IssuerAid"), Matchers.is("IssuerBid"))))) + .andExpect(jsonPath("$.response.issuers[*]", Matchers.everyItem( + Matchers.allOf( + Matchers.hasKey("issuer_id"), + Matchers.hasKey("protocol"), + Matchers.hasKey("display"), + Matchers.hasKey("client_id"), + Matchers.hasKey("token_endpoint"), + Matchers.hasKey("credential_issuer_host") + )))); + } + + @Test + public void getAllIssuersApiNotAccessibleExceptionReturnsServiceUnavailableWithApiNotAccessibleError() throws Exception { + Mockito.when(issuersService.getIssuersV2DTO()).thenThrow(new ApiNotAccessibleException()); + + performGetList() + .andExpect(status().isServiceUnavailable()) + .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getCode()))) + .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); + } + + @Test + public void getAllIssuersIOExceptionReturnsServiceUnavailableWithApiNotAccessibleError() throws Exception { + Mockito.when(issuersService.getIssuersV2DTO()).thenThrow(new IOException("config read failed")); + + performGetList() + .andExpect(status().isServiceUnavailable()) + .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getCode()))) + .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); + } + + @Test + public void getAllIssuersGenericExceptionReturnsBadRequestWithHandledError() throws Exception { + String message = "Unexpected failure"; + Mockito.when(issuersService.getIssuersV2DTO()).thenThrow(new RuntimeException(message)); + + performGetList() + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getCode()))) + .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(message))); + } + + + @Test + public void getIssuerByIdValidIdReturnsOkWithIssuerV2DTO() throws Exception { + IssuerV2DTO issuer = getIssuerResponseDTO("MyIssuer"); + Mockito.when(issuersService.getIssuerV2Details("MyIssuerid")).thenReturn(issuer); + + performGetIssuer("MyIssuerid") + .andExpect(status().isOk()) + .andExpect(jsonPath("$.response.issuer_id", Matchers.is("MyIssuerid"))) + .andExpect(jsonPath("$.response.protocol", Matchers.is("OpenId4VCI"))) + .andExpect(jsonPath("$.response.credential_issuer_host", Matchers.is("https://issuer.env.net"))); + } + + @Test + public void getIssuerByIdInvalidIssuerIdExceptionReturnsNotFoundWithInvalidIssuerError() throws Exception { + Mockito.when(issuersService.getIssuerV2Details("NonExistent")).thenThrow(new InvalidIssuerIdException()); + + performGetIssuer("NonExistent") + .andExpect(status().isNotFound()) + .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is(INVALID_ISSUER_ID_EXCEPTION.getCode()))) + .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(INVALID_ISSUER_ID_EXCEPTION.getMessage()))); + } + + @Test + public void getIssuerByIdApiNotAccessibleExceptionReturnsServiceUnavailableWithApiNotAccessibleError() throws Exception { + Mockito.when(issuersService.getIssuerV2Details("id1")).thenThrow(new ApiNotAccessibleException()); + + performGetIssuer("id1") + .andExpect(status().isServiceUnavailable()) + .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getCode()))) + .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); + } + + @Test + public void getIssuerByIdIOExceptionReturnsServiceUnavailableWithApiNotAccessibleError() throws Exception { + Mockito.when(issuersService.getIssuerV2Details("id1")).thenThrow(new IOException("io error")); + + performGetIssuer("id1") + .andExpect(status().isServiceUnavailable()) + .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getCode()))) + .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); + } + + @Test + public void getIssuerByIdGenericExceptionReturnsBadRequestWithHandledError() throws Exception { + String message = "Internal error"; + Mockito.when(issuersService.getIssuerV2Details("id1")).thenThrow(new IllegalStateException(message)); + + performGetIssuer("id1") + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getCode()))) + .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(message))); + } +} diff --git a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java index 282f0de20..6f33ac7b2 100644 --- a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java @@ -3,7 +3,9 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.Gson; import io.mosip.mimoto.dto.IssuerDTO; +import io.mosip.mimoto.dto.IssuerV2DTO; import io.mosip.mimoto.dto.IssuersDTO; +import io.mosip.mimoto.dto.IssuersV2DTO; import io.mosip.mimoto.dto.mimoto.CredentialIssuerConfiguration; import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; import io.mosip.mimoto.dto.mimoto.IssuerConfig; @@ -291,4 +293,67 @@ public void shouldLogErrorWhenApiNotAccessibleExceptionOccurs() throws IOExcepti verify(issuersConfigUtil, times(1)).getIssuerWellknown(credentialIssuerHostUrl); // Note: Logging verification requires a logging framework setup (e.g., Logback with ListAppender) } + + + @Test + public void shouldReturnIssuersV2DTOWhenGetIssuersV2DTO() throws Exception { + IssuersV2DTO result = issuersService.getIssuersV2DTO(); + + assertEquals(2, result.getIssuers().size()); + IssuerV2DTO first = result.getIssuers().get(0); + assertEquals("Issuer3id", first.getIssuerId()); + assertEquals("OpenId4VCI", first.getProtocol()); + assertEquals(getIssuerConfigDTO("Issuer3").getDisplay(), first.getDisplay()); + assertEquals("123", first.getClientId()); + assertEquals("https://dev/Issuer3id", first.getTokenEndpoint()); + assertEquals("test-client-alias", first.getClientAlias()); + assertEquals(getIssuerConfigDTO("Issuer3").getQr_code_type(), first.getQrCodeType()); + assertEquals("true", first.getEnabled()); + assertEquals("https://issuer.env.net", first.getCredentialIssuerHost()); + IssuerV2DTO second = result.getIssuers().get(1); + assertEquals("Issuer4id", second.getIssuerId()); + assertEquals("https://issuer.env.net", second.getCredentialIssuerHost()); + verify(utilities, atLeast(1)).getIssuersConfigJsonValue(); + } + + @Test + public void shouldReturnIssuerV2DetailsForValidIssuerId() throws Exception { + IssuerV2DTO result = issuersService.getIssuerV2Details("Issuer3id"); + + assertEquals("Issuer3id", result.getIssuerId()); + assertEquals("OpenId4VCI", result.getProtocol()); + assertEquals(getIssuerConfigDTO("Issuer3").getDisplay(), result.getDisplay()); + assertEquals("123", result.getClientId()); + assertEquals("https://dev/Issuer3id", result.getTokenEndpoint()); + assertEquals("test-client-alias", result.getClientAlias()); + assertEquals(getIssuerConfigDTO("Issuer3").getQr_code_type(), result.getQrCodeType()); + assertEquals("true", result.getEnabled()); + assertEquals("https://issuer.env.net", result.getCredentialIssuerHost()); + verify(utilities, times(1)).getIssuersConfigJsonValue(); + } + + @Test + public void shouldThrowInvalidIssuerIdWhenGetIssuerV2DetailsForInvalidId() { + InvalidIssuerIdException exception = assertThrows(InvalidIssuerIdException.class, + () -> issuersService.getIssuerV2Details("NonExistentId")); + + assertEquals("RESIDENT-APP-035 --> Invalid issuer ID", exception.getMessage()); + verify(utilities, times(1)).getIssuersConfigJsonValue(); + } + + @Test + public void shouldPropagateApiNotAccessibleWhenGetIssuersV2DTOFails() { + Mockito.when(utilities.getIssuersConfigJsonValue()).thenReturn(null); + + assertThrows(ApiNotAccessibleException.class, () -> issuersService.getIssuersV2DTO()); + verify(utilities, times(1)).getIssuersConfigJsonValue(); + } + + @Test + public void shouldPropagateApiNotAccessibleWhenGetIssuerV2DetailsFails() { + Mockito.when(utilities.getIssuersConfigJsonValue()).thenReturn(null); + + assertThrows(ApiNotAccessibleException.class, () -> issuersService.getIssuerV2Details("Issuer3id")); + verify(utilities, times(1)).getIssuersConfigJsonValue(); + } } \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index e316b1863..788772972 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -181,18 +181,34 @@ public static IssuerDTO getIssuerDTO(String issuerName) { display.setLogo(logo); IssuerDTO issuer = new IssuerDTO(); issuer.setIssuer_id(issuerName + "id"); - issuer.setCredential_issuer(issuerName + "id"); issuer.setCredential_issuer_host("https://issuer.env.net"); issuer.setDisplay(Collections.singletonList(display)); issuer.setClient_id("123"); - issuer.setWellknown_endpoint("/well-known-proxy"); - issuer.setProxy_token_endpoint("/well-known-proxy"); - if (!(issuerName.equals("Issuer2") || issuerName.equals("Issuer4"))) { //use it for testing /issuers or /issuers?search=issuer2 endpoints - issuer.setAuthorization_audience("/well-known-proxy"); - } + return issuer; } + /** + * Builds an IssuerResponseDTO for tests (e.g. IssuersController v1 which returns IssuerResponseDTO). + */ + public static IssuerV2DTO getIssuerResponseDTO(String issuerName) { + IssuerDTO issuer = getIssuerConfigDTO(issuerName); + + IssuerV2DTO issuerV2DTO= new IssuerV2DTO(); + + issuerV2DTO.setIssuerId(issuer.getIssuer_id()); + issuerV2DTO.setProtocol(issuer.getProtocol()); + issuerV2DTO.setDisplay(issuer.getDisplay()); + issuerV2DTO.setClientId(issuer.getClient_id()); + issuerV2DTO.setTokenEndpoint(issuer.getToken_endpoint()); + issuerV2DTO.setClientAlias(issuer.getClient_alias()); + issuerV2DTO.setQrCodeType(issuer.getQr_code_type()); + issuerV2DTO.setEnabled(issuer.getEnabled()); + issuerV2DTO.setCredentialIssuerHost(issuer.getCredential_issuer_host()); + + return issuerV2DTO; + } + public static IssuerDTO getIssuerConfigDTO(String issuerName) { LogoDTO logo = new LogoDTO(); logo.setUrl("https://logo"); @@ -205,18 +221,13 @@ public static IssuerDTO getIssuerConfigDTO(String issuerName) { display.setLogo(logo); IssuerDTO issuer = new IssuerDTO(); issuer.setIssuer_id(issuerName + "id"); - issuer.setCredential_issuer(issuerName + "id"); issuer.setDisplay(Collections.singletonList(display)); issuer.setClient_id("123"); issuer.setClient_alias("test-client-alias"); - issuer.setRedirect_uri("https://oauthredirect"); issuer.setEnabled("true"); issuer.setProtocol("OpenId4VCI"); - issuer.setWellknown_endpoint("https://issuer.env.net/.well-known/openid-credential-issuer"); issuer.setCredential_issuer_host("https://issuer.env.net"); issuer.setToken_endpoint("https://dev/" + issuerName + "id"); - issuer.setAuthorization_audience("https://dev/auth-server/token"); - issuer.setProxy_token_endpoint("https://dev/auth-server/token"); return issuer; } @@ -234,20 +245,15 @@ public static IssuerDTO getIssuerConfigDTOWithInvalidFieldValues(String issuerNa IssuerDTO issuer = new IssuerDTO(); issuer.setIssuer_id(emptyValues ? "" : issuerName + "id"); - issuer.setCredential_issuer(emptyValues ? "" : issuerName + "id"); issuer.setDisplay(Collections.singletonList(display)); issuer.setClient_id(emptyValues ? "" : "123"); issuer.setClient_alias(emptyValues ? "" : "test-client-alias"); - issuer.setRedirect_uri(emptyValues ? "" : "https://oauthredirect"); issuer.setEnabled(emptyValues ? "" : "true"); issuer.setProtocol(emptyValues ? "" : "OpenId4VCI"); // Handle valid and invalid URLs - issuer.setWellknown_endpoint(emptyValues ? "" : (invalidUrls ? "ht//issuer.env.net/.well-known/openid-credential-issuer" : "https://issuer.env.net/.well-known/openid-credential-issuer")); issuer.setCredential_issuer_host(emptyValues ? "" : (invalidUrls ? "https//issuer.env.net" : "https://issuer.env.net")); issuer.setToken_endpoint(emptyValues ? "" : (invalidUrls ? "h://dev/token" : "https://dev/token")); - issuer.setAuthorization_audience(emptyValues ? "" : (invalidUrls ? "htt://dev/auth-server/token" : "https://dev/auth-server/token")); - issuer.setProxy_token_endpoint(emptyValues ? "" : (invalidUrls ? "htp://dev/auth-server/token" : "https://dev/auth-server/token")); return issuer; } From 792a7f6a37f099b08aa544e43af90a8f77d52f70 Mon Sep 17 00:00:00 2001 From: Mrudu-ch Date: Wed, 25 Feb 2026 17:05:39 +0530 Subject: [PATCH 824/860] =?UTF-8?q?MOSIP-44432:Mimoto=20-Update=20the=20te?= =?UTF-8?q?st=20case=20descriptions=20to=20improve=20clar=E2=80=A6=20(#103?= =?UTF-8?q?1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * MOSIP-44432:Mimoto -Update the test case descriptions to improve clarity and readability Signed-off-by: Mrudula * MOSIP-44432:Resloved the code rabbit commit Signed-off-by: Mrudula --------- Signed-off-by: Mrudula --- .../mimoto/AddIdentity/AddIdentity.yml | 10 +-- .../AidGetIndividualId/AidGetIndividualId.yml | 10 +-- .../mimoto/AuthLock/createAuthLock.yml | 12 ++-- .../mimoto/AuthUnLock/createAuthUnLock.yml | 8 +-- .../AuthenticateUser/AuthenticateUser.yml | 2 +- .../AuthorizationCode/AuthorizationCode.yml | 2 +- .../mimoto/BindingOtp/BindingOtp.yml | 72 +++++++++---------- .../resources/mimoto/CreateVID/CreateVid.yml | 6 +- .../DownloadIssuerCredential.yml | 12 ++-- .../mimoto/GenerateVID/createGenerateVID.yml | 12 ++-- .../mimoto/GetAllIssuers/GetAllIssuers.yml | 6 +- .../GetIssuerConfiguration.yml | 4 +- .../GetIssuerWellKnown/GetIssuerWellKnown.yml | 4 +- 13 files changed, 80 insertions(+), 80 deletions(-) diff --git a/api-test/src/main/resources/mimoto/AddIdentity/AddIdentity.yml b/api-test/src/main/resources/mimoto/AddIdentity/AddIdentity.yml index 829a391cf..08713473e 100644 --- a/api-test/src/main/resources/mimoto/AddIdentity/AddIdentity.yml +++ b/api-test/src/main/resources/mimoto/AddIdentity/AddIdentity.yml @@ -1,7 +1,7 @@ AddIdentity: Mimoto_AddIdentity_withValidParameters_smoke_Pos: endPoint: /idrepository/v1/identity/ - description: Creating a new identity with all valid parameters + description: Validate that the system successfully creates a new identity in ID Repository using all valid input parameters. uniqueIdentifier: TC_Mimoto_AddIdentity_01 role: idrepo restMethod: post @@ -30,7 +30,7 @@ AddIdentity: Mimoto_AddIdentity_Binding_smoke_Pos: endPoint: /idrepository/v1/identity/ - description: Creating a new identity with all valid parameters for Binding APIs + description: Validate that a new identity is successfully created using all valid parameters for Binding API workflows uniqueIdentifier: TC_Mimoto_AddIdentity_02 role: idrepo restMethod: post @@ -59,7 +59,7 @@ AddIdentity: Mimoto_AddIdentity_downloadIssuerCredential_smoke_Pos: endPoint: /idrepository/v1/identity/ - description: Creating a new identity for downloading issuer credential + description: Validate that a new identity with valid inputs can download the issuer credential uniqueIdentifier: TC_Mimoto_AddIdentity_03 role: idrepo restMethod: post @@ -88,8 +88,8 @@ AddIdentity: Mimoto_AddIdentity_downloadIssuerCredentialWithGoogleLogin_smoke_Pos: endPoint: /idrepository/v1/identity/ - description: Creating a new identity for downloading issuer credential - uniqueIdentifier: TC_Mimoto_AddIdentity_03 + description: Validate that creating a new identity allows the issuer credential download process to complete successfully + uniqueIdentifier: TC_Mimoto_AddIdentity_04 role: idrepo restMethod: post inputTemplate: mimoto/AddIdentity/addIdentity_$LANGNUMBER$ diff --git a/api-test/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml b/api-test/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml index 71ab7636e..b36042b35 100644 --- a/api-test/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml +++ b/api-test/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml @@ -1,7 +1,7 @@ AidGetIndividualId: Mimoto_AidGetIndividualId_Getting_With_Valid_UIN_All: endPoint: /v1/mimoto/aid/get-individual-id - description: Generating AID status with valid AID + description: Validate that the system successfully generates and returns the AID status when a valid AID is provided uniqueIdentifier: TC_Mimoto_AidGetIndividualId_01 role: resident checkErrorsOnlyInResponse: true @@ -28,7 +28,7 @@ AidGetIndividualId: Mimoto_AidGetIndividualId_Getting_With_Invalid_AID_Neg: endPoint: /v1/mimoto/aid/get-individual-id - description: Generating individualID with invalid AID + description: Validate that the system does not generate an individualID when an invalid AID is provided, and returns the appropriate error response uniqueIdentifier: TC_Mimoto_AidGetIndividualId_02 role: resident checkErrorsOnlyInResponse: true @@ -59,7 +59,7 @@ AidGetIndividualId: Mimoto_AidGetIndividualId_Getting_With_Invalid_Otp_Neg: endPoint: /v1/mimoto/aid/get-individual-id - description: Generating individualID with Invalid OTP + description: Validate that the system does not generate an individualID when an invalid OTP is provided uniqueIdentifier: TC_Mimoto_AidGetIndividualId_03 role: resident checkErrorsOnlyInResponse: true @@ -90,7 +90,7 @@ AidGetIndividualId: Mimoto_AidGetIndividualId_Getting_With_Valid_Otp_All: endPoint: /v1/mimoto/aid/get-individual-id - description: Generating individualID with valid OTP + description: Validate that the system successfully generates an individualID when a valid OTP is provided uniqueIdentifier: TC_Mimoto_AidGetIndividualId_04 role: resident checkErrorsOnlyInResponse: true @@ -117,7 +117,7 @@ AidGetIndividualId: Mimoto_AidGetIndividualId_Getting_With_Invalid_lenght_Of_AID_Neg: endPoint: /v1/mimoto/aid/get-individual-id - description: Generating individualID with invalid lengh of AID + description: Verify the system Generating individualID with invalid lengh of AID uniqueIdentifier: TC_Mimoto_AidGetIndividualId_05 role: resident checkErrorsOnlyInResponse: true diff --git a/api-test/src/main/resources/mimoto/AuthLock/createAuthLock.yml b/api-test/src/main/resources/mimoto/AuthLock/createAuthLock.yml index b5f8c4985..2a13862d3 100644 --- a/api-test/src/main/resources/mimoto/AuthLock/createAuthLock.yml +++ b/api-test/src/main/resources/mimoto/AuthLock/createAuthLock.yml @@ -1,7 +1,7 @@ AuthLock: Mimoto_AuthLock_Valid_UIN_All: endPoint: /v1/mimoto/req/auth/lock - description: Auth lock a particular UIN with valid parameters + description: Validate that the system successfully locks the specified UIN when all parameters are valid uniqueIdentifier: TC_Mimoto_AuthLock_01 role: resident checkErrorsOnlyInResponse: true @@ -30,7 +30,7 @@ AuthLock: }' Mimoto_AuthLock_InValid_Otp_All: endPoint: /v1/mimoto/req/auth/lock - description: Auth Lock a particular UIN with invalid OTP + description: Verify that the system does not lock the UIN when an invalid OTP is provided uniqueIdentifier: TC_Mimoto_AuthLock_02 role: resident checkErrorsOnlyInResponse: true @@ -64,7 +64,7 @@ AuthLock: }' Mimoto_AuthLock_with_invalidUIN_Valid_Otp_sid: endPoint: /v1/mimoto/req/auth/lock - description: Auth Lock a particular UIN with valid OTP + description: Validate that the system does not lock the UIN when an invalid UIN is provided uniqueIdentifier: TC_Mimoto_AuthLock_03 role: resident checkErrorsOnlyInResponse: true @@ -98,7 +98,7 @@ AuthLock: }' Mimoto_AuthLock_Valid_VID_All: endPoint: /v1/mimoto/req/auth/lock - description: Auth lock a particular VID with valid VID + description: Verify that the system successfully locks authentication for a VID when all parameters are valid uniqueIdentifier: TC_Mimoto_AuthLock_04 role: resident checkErrorsOnlyInResponse: true @@ -127,7 +127,7 @@ AuthLock: }' Mimoto_AuthLock_with_invalidVID_Valid_Otp: endPoint: /v1/mimoto/req/auth/lock - description: Auth lock a particular VID with invalid OTP + description: Verify that the system does not lock a authentication when an invalid OTP is provided uniqueIdentifier: TC_Mimoto_AuthLock_05 role: resident checkErrorsOnlyInResponse: true @@ -161,7 +161,7 @@ AuthLock: }' Mimoto_AuthLock_invalidVID_Valid_Otp: endPoint: /v1/mimoto/req/auth/lock - description: Auth lock a particular VID with invalid VID + description: Validate that the system does not lock the VID when an invalid VID is provided and returns the appropriate error message uniqueIdentifier: TC_Mimoto_AuthLock_06 role: resident checkErrorsOnlyInResponse: true diff --git a/api-test/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml b/api-test/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml index 58564a28b..f15acd92d 100644 --- a/api-test/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml +++ b/api-test/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml @@ -1,7 +1,7 @@ AuthUnlock: Mimoto_AuthUnLock_Valid_UIN_All: endPoint: /v1/mimoto/req/auth/unlock - description: Auth unlock a particular UIN with valid parameters + description: Verify that the system unlocks the UIN successfully when all parameters are valid uniqueIdentifier: TC_Mimoto_AuthLock_07 role: resident checkErrorsOnlyInResponse: true @@ -31,7 +31,7 @@ AuthUnlock: }' Mimoto_AuthUnLock_Valid_UIN_With_VID_All: endPoint: /v1/mimoto/req/auth/unlock - description: Auth unlock a particular VID with valid parameters + description: Validate that the system processes the unlock request and successfully unlocks the VID when all parameters are valid uniqueIdentifier: TC_Mimoto_AuthLock_08 role: resident checkErrorsOnlyInResponse: true @@ -61,7 +61,7 @@ AuthUnlock: }' Mimoto_AuthUnLock_With_InValid_OTP_All: endPoint: /v1/mimoto/req/auth/unlock - description: Auth unlock a particular UIN with invalid OTP + description: Validate that the system does not unlock the UIN when an invalid OTP is provided and displays the appropriate error message uniqueIdentifier: TC_Mimoto_AuthLock_09 role: resident checkErrorsOnlyInResponse: true @@ -96,7 +96,7 @@ AuthUnlock: }' Mimoto_AuthUnLock_InValid_OTP_With_VID_All: endPoint: /v1/mimoto/req/auth/unlock - description: Unlock a particular VID with invalid OTP + description: Validate that the system does not unlock the VID when an invalid OTP is provided uniqueIdentifier: TC_Mimoto_AuthLock_10 role: resident checkErrorsOnlyInResponse: true diff --git a/api-test/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.yml b/api-test/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.yml index a9be31dcb..5660e7d74 100644 --- a/api-test/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.yml +++ b/api-test/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.yml @@ -1,7 +1,7 @@ AuthenticateUser: Mimoto_ESignet_AuthenticateUserIDP_uin_Otp_Valid_Smoke: endPoint: /v1/esignet/authorization/authenticate - description: Authenticate user to download credentials with all valid parameters + description: Verify that the user is successfully authenticated and able to download credentials when all valid parameters are provided uniqueIdentifier: TC_Mimoto_AuthenticateUser_01 role: resident restMethod: post diff --git a/api-test/src/main/resources/mimoto/AuthorizationCode/AuthorizationCode.yml b/api-test/src/main/resources/mimoto/AuthorizationCode/AuthorizationCode.yml index 250803505..7f9e88772 100644 --- a/api-test/src/main/resources/mimoto/AuthorizationCode/AuthorizationCode.yml +++ b/api-test/src/main/resources/mimoto/AuthorizationCode/AuthorizationCode.yml @@ -1,7 +1,7 @@ AuthorizationCode: Mimoto_ESignet_AuthorizationCode_uin_All_Valid_Smoke_sid: endPoint: /v1/esignet/authorization/auth-code - description: Generate authorization code to download credential issuer + description: Validate that the system successfully generates an authorization code to download credentials from the issuer uniqueIdentifier: TC_Mimoto_AuthorizationCode_01 role: resident restMethod: post diff --git a/api-test/src/main/resources/mimoto/BindingOtp/BindingOtp.yml b/api-test/src/main/resources/mimoto/BindingOtp/BindingOtp.yml index 7b17c9028..4adb0983a 100644 --- a/api-test/src/main/resources/mimoto/BindingOtp/BindingOtp.yml +++ b/api-test/src/main/resources/mimoto/BindingOtp/BindingOtp.yml @@ -2,7 +2,7 @@ BindingOtp: Mimoto_BindingOtp_Valid_UIN_All_Smoke: endPoint: /v1/mimoto/binding-otp role: resident - description: Creating OTP for binding a individualID with valid UIN + description: Validate that the system successfully creates an OTP to bind an individualID to a valid UIN uniqueIdentifier: TC_Mimoto_BindingOtp_01 checkErrorsOnlyInResponse: true restMethod: post @@ -19,7 +19,7 @@ BindingOtp: Mimoto_BindingOtp_Valid_vid_All_Smoke: endPoint: /v1/mimoto/binding-otp - description: Creating OTP for binding a individualID with valid VID + description: Validate that the system generates an OTP for binding an individualID with a valid VID uniqueIdentifier: TC_Mimoto_BindingOtp_02 role: resident checkErrorsOnlyInResponse: true @@ -37,7 +37,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Invalid_individualId_Neg: endPoint: /v1/mimoto/binding-otp - description: Creating OTP for binding a individualID with invalid UIN + description: Validate that the system does not generate an OTP when binding an individualID with an invalid UIN uniqueIdentifier: TC_Mimoto_BindingOtp_03 role: resident restMethod: post @@ -59,7 +59,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Missing_individualId_Neg: endPoint: /v1/mimoto/binding-otp - description: Creating OTP for binding a individualID without individualId attribute + description: Validate OTP generation fails if the individualID attribute is not provided uniqueIdentifier: TC_Mimoto_BindingOtp_04 role: resident restMethod: post @@ -81,7 +81,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Empty_individualId_Neg: endPoint: /v1/mimoto/binding-otp - description: Creating OTP for binding a individualID with individualId missing + description: Validate that the system does not generate an OTP when the individualID is missing uniqueIdentifier: TC_Mimoto_BindingOtp_05 role: resident restMethod: post @@ -103,7 +103,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Null_individualId_Neg: endPoint: /v1/mimoto/binding-otp - description: Creating OTP for binding a individualID with individualId value as null + description: Validate that the system does not generate an OTP when the individualID value is null uniqueIdentifier: TC_Mimoto_BindingOtp_06 role: resident restMethod: post @@ -125,7 +125,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_SpaceSeparated_otpChannels_Neg: endPoint: /v1/mimoto/binding-otp - description: Creating OTP for binding a individualID with OTP channel value been spaced in between + description: Validate that the system does not generate an OTP when the OTP channel value contains spaces uniqueIdentifier: TC_Mimoto_BindingOtp_07 role: resident restMethod: post @@ -147,7 +147,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Invalid_OtpChannels_Neg: endPoint: /v1/mimoto/binding-otp - description: Creating OTP for binding a individualID with invalid OTP channel + description: Validate that the system does not generate an OTP when an invalid OTP channel is provided uniqueIdentifier: TC_Mimoto_BindingOtp_08 role: resident restMethod: post @@ -169,7 +169,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Missing_OtpChannels_Neg: endPoint: /v1/mimoto/binding-otp - description: Creating OTP for binding a individualID with OTP channel missing + description: Validate that the system does not generate an OTP when the OTP channel is missing uniqueIdentifier: TC_Mimoto_BindingOtp_09 role: resident restMethod: post @@ -190,7 +190,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Empty_OtpChannels_Neg: endPoint: /v1/mimoto/binding-otp - description: Creating OTP for binding a individualID with OTP channel being empty + description: Validate that the system does not generate an OTP when the OTP channel is empty uniqueIdentifier: TC_Mimoto_BindingOtp_10 role: resident restMethod: post @@ -212,7 +212,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Null_OtpChannels_Neg: endPoint: /v1/mimoto/binding-otp - description: Creating OTP for binding a individualID with OTP channel value being null + description: Validate that the system does not generate an OTP when the OTP channel value is null uniqueIdentifier: TC_Mimoto_BindingOtp_11 role: resident restMethod: post @@ -234,7 +234,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Missing_OtpChannel_Neg: endPoint: /v1/mimoto/binding-otp - description: Creating OTP for binding a individualID with OTP channel missing + description: Validate that the system does not generate an OTP when the OTP channel is missing from the request uniqueIdentifier: TC_Mimoto_BindingOtp_12 role: resident restMethod: post @@ -255,7 +255,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Empty_OtpChannel_Neg: endPoint: /v1/mimoto/binding-otp - description: Creating OTP for binding a individualID with OTP channel being empty + description: Validate that OTP generation fails when the OTP channel field is empty in the request uniqueIdentifier: TC_Mimoto_BindingOtp_13 role: resident restMethod: post @@ -277,7 +277,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Null_OtpChannel_Neg: endPoint: /v1/mimoto/binding-otp - description: Creating OTP for binding a individualID with OTP channel being empty + description: Verify that the system prevents OTP generation when the OTP channel is empty uniqueIdentifier: TC_Mimoto_BindingOtp_14 role: resident restMethod: post @@ -299,7 +299,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Invalid_RequestTime_Neg: endPoint: /v1/mimoto/binding-otp - description: Creating OTP for binding a individualID with invalid request time + description: Validate that the system does not generate an OTP when the request time is invalid uniqueIdentifier: TC_Mimoto_AuthLock_07 role: resident restMethod: post @@ -321,7 +321,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Past_RequestTime_Neg: endPoint: /v1/mimoto/binding-otp - description: Creating OTP for binding a individualID with past request time + description: Validate that the system does not generate an OTP when the request time is in the past uniqueIdentifier: TC_Mimoto_BindingOtp_16 role: resident restMethod: post @@ -343,7 +343,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Future_RequestTime_Neg: endPoint: /v1/mimoto/binding-otp - description: Creating OTP for binding a individualID with future request time + description: Validate OTP generation fails when the request time is in the future uniqueIdentifier: TC_Mimoto_BindingOtp_17 role: resident restMethod: post @@ -365,7 +365,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Missing_RequestTime_Neg: endPoint: /v1/mimoto/binding-otp - description: Creating OTP for binding a individualID with missing request time + description: Validate that the system does not generate an OTP when the request time is missing uniqueIdentifier: TC_Mimoto_BindingOtp_18 role: resident restMethod: post @@ -386,7 +386,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Empty_RequestTime_Neg: endPoint: /v1/mimoto/binding-otp - description: Creating OTP for binding a individualID with empty request time + description: Validate that the system does not generate an OTP when the request time is empty uniqueIdentifier: TC_Mimoto_BindingOtp_19 role: resident restMethod: post @@ -408,7 +408,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Invalid_individualId_Neg: endPoint: /v1/mimoto/binding-otp - description: Creating OTP for binding a individualID with invalid VID + description: Validate that the system does not generate an OTP when an invalid VID is provided uniqueIdentifier: TC_Mimoto_BindingOtp_20 role: resident restMethod: post @@ -430,7 +430,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Missing_individualId_Neg: endPoint: /v1/mimoto/binding-otp - description: Creating OTP for binding a individualID with missing VID + description: Validate that the system does not generate an OTP when the VID is missing uniqueIdentifier: TC_Mimoto_BindingOtp_21 role: resident restMethod: post @@ -452,7 +452,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Empty_individualId_Neg: endPoint: /v1/mimoto/binding-otp - description: Creating OTP for binding a individualID with empty VID + description: Validate that the system does not generate an OTP when the VID is empty uniqueIdentifier: TC_Mimoto_BindingOtp_22 role: resident restMethod: post @@ -474,7 +474,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Null_individualId_Neg: endPoint: /v1/mimoto/binding-otp - description: Creating OTP for binding a individualID with invalid VID + description: Validate that the system does not generate an OTP when an invalid VID is provided uniqueIdentifier: TC_Mimoto_BindingOtp_23 role: resident restMethod: post @@ -496,7 +496,7 @@ BindingOtp: Mimoto_BindingOtp_vid_SpaceSeparated_otpChannels_Neg: endPoint: /v1/mimoto/binding-otp - description: Creating OTP for binding a VID with OTP channel value been spaced in between + description: Validate that the system does not generate an OTP when the OTP channel value contains spaces uniqueIdentifier: TC_Mimoto_BindingOtp_24 role: resident restMethod: post @@ -518,7 +518,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Invalid_OtpChannels_Neg: endPoint: /v1/mimoto/binding-otp - description: Creating OTP for binding a VID with invalid OTP channel + description: Validate that the system does not generate an OTP when an invalid OTP channel is provided uniqueIdentifier: TC_Mimoto_BindingOtp_25 role: resident restMethod: post @@ -540,7 +540,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Missing_OtpChannels_Neg: endPoint: /v1/mimoto/binding-otp - description: Creating OTP for binding a VID with missing OTP channel values + description: Validate that the system does not generate an OTP when the OTP channel value is missing uniqueIdentifier: TC_Mimoto_BindingOtp_26 role: resident restMethod: post @@ -561,7 +561,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Empty_OtpChannels_Neg: endPoint: /v1/mimoto/binding-otp - description: Creating OTP for binding a VID with empty OTP channel values + description: Validate that the system does not generate an OTP when the OTP channel value is empty uniqueIdentifier: TC_Mimoto_BindingOtp_27 role: resident restMethod: post @@ -583,7 +583,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Null_OtpChannels_Neg: endPoint: /v1/mimoto/binding-otp - description: Creating OTP for binding a VID with OTP channel values as null + description: Validate that the system does not generate an OTP when the OTP channel value is null uniqueIdentifier: TC_Mimoto_BindingOtp_28 role: resident restMethod: post @@ -605,7 +605,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Missing_OtpChannel_Neg: endPoint: /v1/mimoto/binding-otp - description: Creating OTP for binding a VID with OTP channel values missing + description: Verify that the system prevents OTP generation when the OTP channel value is missing uniqueIdentifier: TC_Mimoto_BindingOtp_29 role: resident restMethod: post @@ -626,7 +626,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Empty_OtpChannel_Neg: endPoint: /v1/mimoto/binding-otp - description: Creating OTP for binding a VID with OTP channel values empty + description: Validate that the system does not generate an OTP when the OTP channel value is empty uniqueIdentifier: TC_Mimoto_BindingOtp_30 role: resident restMethod: post @@ -648,7 +648,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Null_OtpChannel_Neg: endPoint: /v1/mimoto/binding-otp - description: Creating OTP for binding a VID with OTP channel values as null + description: Validate that the system does not generate an OTP when the OTP channel value is null uniqueIdentifier: TC_Mimoto_BindingOtp_31 role: resident restMethod: post @@ -670,7 +670,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Invalid_RequestTime_Neg: endPoint: /v1/mimoto/binding-otp - description: Creating OTP for binding a VID with invalid request time + description: Validate that the system does not generate an OTP when the request time is invalid uniqueIdentifier: TC_Mimoto_BindingOtp_32 role: resident restMethod: post @@ -692,7 +692,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Past_RequestTime_Neg: endPoint: /v1/mimoto/binding-otp - description: Creating OTP for binding a VID with past request time + description: Validate that the system does not generate an OTP when the request time is in the past uniqueIdentifier: TC_Mimoto_BindingOtp_33 role: resident restMethod: post @@ -714,7 +714,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Future_RequestTime_Neg: endPoint: /v1/mimoto/binding-otp - description: Creating OTP for binding a VID with future request time + description: Validate that the system does not generate an OTP when the request time is in the future uniqueIdentifier: TC_Mimoto_BindingOtp_34 role: resident restMethod: post @@ -736,7 +736,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Missing_RequestTime_Neg: endPoint: /v1/mimoto/binding-otp - description: Creating OTP for binding a VID with request time missing + description: Validate that the system does not generate an OTP when the request time is missing uniqueIdentifier: TC_Mimoto_BindingOtp_35 role: resident restMethod: post @@ -757,7 +757,7 @@ BindingOtp: Mimoto_BindingOtp_vid_Empty_RequestTime_Neg: endPoint: /v1/mimoto/binding-otp - description: Creating OTP for binding a VID with request time empty + description: Validate OTP generation fails if the request time field is empty uniqueIdentifier: TC_Mimoto_BindingOtp_36 role: resident restMethod: post diff --git a/api-test/src/main/resources/mimoto/CreateVID/CreateVid.yml b/api-test/src/main/resources/mimoto/CreateVID/CreateVid.yml index e9415f533..42fcb57a6 100644 --- a/api-test/src/main/resources/mimoto/CreateVID/CreateVid.yml +++ b/api-test/src/main/resources/mimoto/CreateVID/CreateVid.yml @@ -1,7 +1,7 @@ CreateVID: Mimoto_Generate_Perpetual_VID_Valid_Smoke_sid: endPoint: /idrepository/v1/vid - description: Create perpetual VID with valid details + description: Validate that the system successfully creates a perpetual VID when all input details are valid uniqueIdentifier: TC_Mimoto_GenerateVID_01 role: idrepo restMethod: post @@ -20,7 +20,7 @@ CreateVID: Mimoto_Generate_Temporary_VID_Valid_Smoke_sid: endPoint: /idrepository/v1/vid - description: Create temporary VID with valid details + description: Validate that the system successfully creates a temporary VID when all provided details are valid uniqueIdentifier: TC_Mimoto_GenerateVID_04 role: idrepo restMethod: post @@ -39,7 +39,7 @@ CreateVID: Mimoto_Generate_Perpetual_VID_Binding_Valid_Smoke_sid: endPoint: /idrepository/v1/vid - description: Create perpetual VID for binding with valid details + description: Validate that the system successfully creates a perpetual VID for binding when all provided details are valid uniqueIdentifier: TC_Mimoto_GenerateVID_06 role: idrepo restMethod: post diff --git a/api-test/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml b/api-test/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml index 783377981..f4e17a526 100644 --- a/api-test/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml +++ b/api-test/src/main/resources/mimoto/DownloadIssuerCredential/DownloadIssuerCredential.yml @@ -1,7 +1,7 @@ DownloadIssuerCredential: Mimoto_DownloadIssuerCredential_IssuerMosip_All_Valid_Smoke: endPoint: /v1/mimoto/credentials/download - description: Downloading credential with all valid parameters + description: Verify that the credential is downloaded successfully when all valid parameters are provided uniqueIdentifier: TC_Mimoto_DownloadIssuerCredential_01 role: resident restMethod: get @@ -21,7 +21,7 @@ DownloadIssuerCredential: Mimoto_DownloadIssuerCredential_Invalid_Issuer_Neg: endPoint: /v1/mimoto/credentials/download - description: Downloading credential with invalid issuer + description: Validate that the system does not download the credential when an invalid issuer is provided uniqueIdentifier: TC_Mimoto_DownloadIssuerCredential_02 role: resident restMethod: get @@ -46,7 +46,7 @@ DownloadIssuerCredential: Mimoto_DownloadIssuerCredential_Invalid_Credential_Neg: endPoint: /v1/mimoto/credentials/download - description: Downloading credential with invalid credential + description: Validate that the system does not download the credential when an invalid credential is provided uniqueIdentifier: TC_Mimoto_DownloadIssuerCredential_03 role: resident restMethod: get @@ -71,7 +71,7 @@ DownloadIssuerCredential: Mimoto_DownloadIssuerCredential_Invalid_AuthorizationCode_Neg: endPoint: /v1/mimoto/credentials/download - description: Downloading credential with invalid credential AuthorizationCode + description: Validate that the system does not download the credential when an invalid authorization code is provided uniqueIdentifier: TC_Mimoto_DownloadIssuerCredential_04 role: resident restMethod: get @@ -97,7 +97,7 @@ DownloadIssuerCredential: Mimoto_DownloadIssuerCredential_Reused_AuthorizationCode_Neg: endPoint: /v1/mimoto/credentials/download - description: Downloading credential with invalid expired authorizationCode + description: Validate that the system does not download the credential when an reused authorization code is provided uniqueIdentifier: TC_Mimoto_DownloadIssuerCredential_05 role: resident restMethod: get @@ -121,7 +121,7 @@ DownloadIssuerCredential: }' Mimoto_DownloadIssuerCredential_IssuerSunBird_All_Valid_Smoke: endPoint: /v1/mimoto/credentials/download - description: Downloading sunbird credential with valid authorizationCode + description: Validate that the system successfully downloads the Sunbird credential when a valid authorization code is provided uniqueIdentifier: TC_Mimoto_DownloadIssuerCredential_06 role: resident restMethod: get diff --git a/api-test/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml b/api-test/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml index 067268030..14778af01 100644 --- a/api-test/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml +++ b/api-test/src/main/resources/mimoto/GenerateVID/createGenerateVID.yml @@ -1,7 +1,7 @@ GenerateVID: Mimoto_Generate_Perpetual_VID_Valid_Smoke_sid: endPoint: /v1/mimoto/vid - description: Creating Perpetual VID with all valid parameters + description: Validate that the system successfully creates a perpetual VID when all input parameters are valid uniqueIdentifier: TC_Mimoto_GenerateVID_01 role: resident checkErrorsOnlyInResponse: true @@ -30,7 +30,7 @@ GenerateVID: }' Mimoto_Generate_Perpetual_VID_InValid_Otp_sid: endPoint: /v1/mimoto/vid - description: Creating Perpetual VID with invalid OTP + description: Validate that the system does not create a perpetual VID when an invalid OTP is provided uniqueIdentifier: TC_Mimoto_GenerateVID_02 role: resident checkErrorsOnlyInResponse: true @@ -64,7 +64,7 @@ GenerateVID: }' Mimoto_Generate_Perpetual_VID_with_InvalidUIN_Valid_Otp_sid: endPoint: /v1/mimoto/vid - description: Creating Perpetual VID with invalid UIN + description: Verify that the system prevents creation of a perpetual VID when the UIN is invalid uniqueIdentifier: TC_Mimoto_GenerateVID_03 role: resident checkErrorsOnlyInResponse: true @@ -99,7 +99,7 @@ GenerateVID: mimoto_Generate_Temporary_VID_Valid_Smoke_sid: endPoint: /v1/mimoto/vid - description: Creating temporary VID with all valid request + description: Validate that the system successfully creates a temporary VID when all request parameters are valid uniqueIdentifier: TC_Mimoto_GenerateVID_04 role: resident checkErrorsOnlyInResponse: true @@ -129,7 +129,7 @@ GenerateVID: Mimoto_Generate_Perpetual_VID_Invalid_TransactionId_Neg: endPoint: /v1/mimoto/vid - description: Creating perpetual VID with invalid transactionID + description: Verify that the system prevents creation of a perpetual VID when the transaction ID is invalid uniqueIdentifier: TC_Mimoto_GenerateVID_05 role: resident checkErrorsOnlyInResponse: true @@ -164,7 +164,7 @@ GenerateVID: Mimoto_Generate_Perpetual_VID_Binding_Valid_Smoke_sid: endPoint: /v1/mimoto/vid - description: Creating perpetual VID with binding valid request + description: Validate that the system successfully creates a perpetual VID for binding when the request parameters are valid uniqueIdentifier: TC_Mimoto_GenerateVID_06 role: resident checkErrorsOnlyInResponse: true diff --git a/api-test/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml b/api-test/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml index 1dcf03e91..f5bcfb840 100644 --- a/api-test/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml +++ b/api-test/src/main/resources/mimoto/GetAllIssuers/GetAllIssuers.yml @@ -1,7 +1,7 @@ GetAllIssuers: Mimoto_GetAllIssuers_All_Valid_Smoke: endPoint: /v1/mimoto/issuers - description: Retrieving issuers with all valid parameters + description: Validate that the system successfully retrieves issuer details when all input parameters are valid uniqueIdentifier: TC_Mimoto_GetAllIssuers_01 role: resident restMethod: get @@ -15,7 +15,7 @@ GetAllIssuers: Mimoto_GetAllIssuers_Specific_Issuer_All_Valid_Smoke: endPoint: /v1/mimoto/issuers/Mosip - description: Retrieving all specific issuer with all valid parameters + description: Validate that the system successfully retrieves the specific issuer details when all input parameters are valid uniqueIdentifier: TC_Mimoto_GetAllIssuers_02 role: resident restMethod: get @@ -29,7 +29,7 @@ GetAllIssuers: Mimoto_GetAllIssuers_Invalid_Issuer_Neg: endPoint: /v1/mimoto/issuers/invalid - description: Retrieving invalid issuer + description: Validate that the system does not retrieve issuer details when an invalid issuer is provided uniqueIdentifier: TC_Mimoto_GetAllIssuers_03 role: resident restMethod: get diff --git a/api-test/src/main/resources/mimoto/GetIssuerConfiguration/GetIssuerConfiguration.yml b/api-test/src/main/resources/mimoto/GetIssuerConfiguration/GetIssuerConfiguration.yml index 1d4c7dda4..07fbe08d3 100644 --- a/api-test/src/main/resources/mimoto/GetIssuerConfiguration/GetIssuerConfiguration.yml +++ b/api-test/src/main/resources/mimoto/GetIssuerConfiguration/GetIssuerConfiguration.yml @@ -1,7 +1,7 @@ GetIssuerConfiguration: Mimoto_GetIssuerConfiguration_Mosip_All_Valid_Smoke: endPoint: /v1/mimoto/issuers/Mosip/configuration - description: Retrieving verifiers list with all valid parameters + description: Verify that the system retrieves the verifiers list successfully when all parameters are valid uniqueIdentifier: TC_Mimoto_GetIssuerConfiguration_01 role: resident restMethod: get @@ -14,7 +14,7 @@ GetIssuerConfiguration: }' Mimoto_GetIssuerConfiguration_With_Issuer_Removed_From_URL_Neg: endPoint: /v1/mimoto/issuers/configuration - description: Retrieving verifiers list with invalid URL + description: Validate that the system does not retrieve the verifiers list when an invalid URL is provided uniqueIdentifier: TC_Mimoto_GetIssuerConfiguration_02 role: resident restMethod: get diff --git a/api-test/src/main/resources/mimoto/GetIssuerWellKnown/GetIssuerWellKnown.yml b/api-test/src/main/resources/mimoto/GetIssuerWellKnown/GetIssuerWellKnown.yml index fc32476ce..083361f4d 100644 --- a/api-test/src/main/resources/mimoto/GetIssuerWellKnown/GetIssuerWellKnown.yml +++ b/api-test/src/main/resources/mimoto/GetIssuerWellKnown/GetIssuerWellKnown.yml @@ -1,7 +1,7 @@ GetIssuerWellKnown: Mimoto_GetIssuerWellKnown_All_Valid_Smoke: endPoint: /v1/mimoto/issuers/{issuerId}/well-known-proxy - description: Generating the issuer well known with all valid parameters + description: Verify that the system successfully generates the issuer .well-known configuration with all valid parameters. role: resident restMethod: get checkErrorsOnlyInResponse: true @@ -16,7 +16,7 @@ GetIssuerWellKnown: # Mimoto_GetIssuerWellKnown_Invalid_Issuer_Neg: # endPoint: /v1/mimoto/issuers/{issuerId}/well-known-proxy -# description: Generating the invalid issuer well known +# description: Verify that the system fails to generate the issuer .well-known configuration with invalid parameters. # role: resident # restMethod: get # checkErrorsOnlyInResponse: true From e753b52b9dd35f80d7f2be69acafa99214dbc661 Mon Sep 17 00:00:00 2001 From: Mohanachandran S <165888272+mohanachandran-s@users.noreply.github.com> Date: Tue, 3 Mar 2026 15:40:53 +0530 Subject: [PATCH 825/860] MOSIP-44494 - Updated the test classes for new otplistener fetching logic and sonar fixes (#1039) Signed-off-by: Mohanachandran S --- .../mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java | 3 +++ .../apirig/mimoto/testscripts/PostWithBodyWithOtpGenerate.java | 3 +++ .../java/io/inji/testrig/apirig/mimoto/utils/MimotoUtil.java | 3 ++- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java index 0e21a6850..7b8c45778 100644 --- a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java +++ b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java @@ -30,6 +30,7 @@ import io.mosip.testrig.apirig.utils.AdminTestUtil; import io.mosip.testrig.apirig.utils.AuthenticationTestException; import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.NotificationListener; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; import io.mosip.testrig.apirig.utils.SecurityXSSException; @@ -122,6 +123,7 @@ public void test(TestCaseDTO testCaseDTO) int currLoopCount = 0; while (currLoopCount < maxLoopCount) { String input = MimotoUtil.inputstringKeyWordHandeler(inputStrJson, testCaseName); + NotificationListener.markRequestStart(); if (testCaseName.contains(GlobalConstants.ESIGNET_)) { if (MimotoConfigManager.isInServiceNotDeployedList(GlobalConstants.ESIGNET)) { throw new SkipException("esignet is not deployed hence skipping the testcase"); @@ -214,6 +216,7 @@ public void test(TestCaseDTO testCaseDTO) @AfterMethod(alwaysRun = true) public void setResultTestName(ITestResult result) { result.setAttribute("TestCaseName", testCaseName); + NotificationListener.markRequestRemove(); } @AfterClass(alwaysRun = true) diff --git a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithBodyWithOtpGenerate.java b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithBodyWithOtpGenerate.java index 2919204b2..1f279ba84 100644 --- a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithBodyWithOtpGenerate.java +++ b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithBodyWithOtpGenerate.java @@ -29,6 +29,7 @@ import io.mosip.testrig.apirig.utils.AdminTestUtil; import io.mosip.testrig.apirig.utils.AuthenticationTestException; import io.mosip.testrig.apirig.utils.GlobalConstants; +import io.mosip.testrig.apirig.utils.NotificationListener; import io.mosip.testrig.apirig.utils.OutputValidationUtil; import io.mosip.testrig.apirig.utils.ReportUtil; import io.mosip.testrig.apirig.utils.SecurityXSSException; @@ -115,6 +116,7 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad String inputReqJson = getJsonFromTemplate(otpReqJson.toString(), sendOtpReqTemplate); inputReqJson = MimotoUtil.inputstringKeyWordHandeler(inputReqJson, testCaseName); + NotificationListener.markRequestStart(); otpResponse = postWithBodyAndCookie(ApplnURI + sendOtpEndPoint, inputReqJson, COOKIENAME, GlobalConstants.RESIDENT, testCaseDTO.getTestCaseName()); @@ -175,5 +177,6 @@ public void test(TestCaseDTO testCaseDTO) throws AuthenticationTestException, Ad @AfterMethod(alwaysRun = true) public void setResultTestName(ITestResult result) { result.setAttribute("TestCaseName", testCaseName); + NotificationListener.markRequestRemove(); } } diff --git a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/utils/MimotoUtil.java b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/utils/MimotoUtil.java index 8b1672902..538507b82 100644 --- a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/utils/MimotoUtil.java +++ b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/utils/MimotoUtil.java @@ -33,6 +33,7 @@ import io.mosip.testrig.apirig.utils.ConfigManager; import io.mosip.testrig.apirig.utils.GlobalConstants; import io.mosip.testrig.apirig.utils.GlobalMethods; +import io.mosip.testrig.apirig.utils.NotificationListener; import io.mosip.testrig.apirig.utils.RestClient; import io.mosip.testrig.apirig.utils.SkipTestCaseHandler; import io.restassured.response.Response; @@ -185,7 +186,7 @@ public static String getOTPFromSMTP(String inputJson, TestCaseDTO testCaseDTO) { emailId = removeLeadingPlusSigns(emailId); } logger.info(emailId); - otp = OTPListener.getOtp(emailId); + otp = NotificationListener.getOtp(emailId); request.getJSONObject(GlobalConstants.REQUEST).getJSONArray(GlobalConstants.CHALLENGELIST) .getJSONObject(0).put(GlobalConstants.CHALLENGE, otp); inputJson = request.toString(); From 02b69384ff12f20f69ec3081f31d7beb881c8588 Mon Sep 17 00:00:00 2001 From: Abhishek S <127825992+abhishek8shankar@users.noreply.github.com> Date: Wed, 4 Mar 2026 18:26:53 +0530 Subject: [PATCH 826/860] [MOSIP-44526] Updated values.yaml (#1042) Signed-off-by: Abhi --- deploy/mimoto-apitestrig/values.yaml | 2 +- deploy/mimoto/values.yaml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/deploy/mimoto-apitestrig/values.yaml b/deploy/mimoto-apitestrig/values.yaml index 1d7830100..7e439f42e 100644 --- a/deploy/mimoto-apitestrig/values.yaml +++ b/deploy/mimoto-apitestrig/values.yaml @@ -3,7 +3,7 @@ commonLabels: containerSecurityContext: enabled: false - runAsUser: 1001 + runAsUser: inji runAsNonRoot: true modules: diff --git a/deploy/mimoto/values.yaml b/deploy/mimoto/values.yaml index 64a785c79..ffab8e700 100644 --- a/deploy/mimoto/values.yaml +++ b/deploy/mimoto/values.yaml @@ -19,7 +19,7 @@ extraEnvVars: secretKeyRef: name: db-common-secrets key: db-dbuser-password - - name: INJI_MIMOTO_DATABASE_HOSTNAME + - name: MOSIP_MIMOTO_DATABASE_HOSTNAME value: postgres-postgresql.postgres - - name: INJI_MIMOTO_DATABASE_PORT + - name: MOSIP_MIMOTO_DATABASE_PORT value: "5432" From 9bb91006a1e10186f8294d337e9a4444477d9316 Mon Sep 17 00:00:00 2001 From: Rudhhi Shah Date: Tue, 10 Mar 2026 19:06:55 +0530 Subject: [PATCH 827/860] [INJIWEB-1865] Modified the formatValue function (#1041) * [INJIWEB-1865] Modified the formatValue function to enable Multilang support Signed-off-by: Rudhhi Shah * [INJIWEB-1865] updated the existing tests Signed-off-by: Rudhhi Shah * [INJIWEB-1865] Added the constants to seperate file Signed-off-by: Rudhhi Shah * [INJIWEB-1865] Update the constants for older tests Signed-off-by: Rudhhi Shah * [INJWEB-1865] Keeping the language compatibility for sd-jwts as well Signed-off-by: Rudhhi Shah * [INJIWEB-1865] removed the unused direction constants Signed-off-by: Rudhhi Shah --------- Signed-off-by: Rudhhi Shah --- .../mimoto/constant/LdpVcV1Constants.java | 10 ++ .../mimoto/constant/LdpVcV2Constants.java | 5 +- .../mimoto/constant/SdJwtVcConstants.java | 10 ++ .../CredentialPDFGeneratorService.java | 31 +++- .../CredentialPDFGeneratorServiceTest.java | 139 +++++++++++++++++- 5 files changed, 187 insertions(+), 8 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/constant/LdpVcV1Constants.java create mode 100644 src/main/java/io/mosip/mimoto/constant/SdJwtVcConstants.java diff --git a/src/main/java/io/mosip/mimoto/constant/LdpVcV1Constants.java b/src/main/java/io/mosip/mimoto/constant/LdpVcV1Constants.java new file mode 100644 index 000000000..460fab330 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/constant/LdpVcV1Constants.java @@ -0,0 +1,10 @@ +package io.mosip.mimoto.constant; + +/** + * Constants for LDP VC credentials with V1.1 context + */ +public class LdpVcV1Constants { + // Language Object and its properties + public static final String LANGUAGE = "lang"; + public static final String VALUE = "value"; +} diff --git a/src/main/java/io/mosip/mimoto/constant/LdpVcV2Constants.java b/src/main/java/io/mosip/mimoto/constant/LdpVcV2Constants.java index 2e60e8814..3e445bef1 100644 --- a/src/main/java/io/mosip/mimoto/constant/LdpVcV2Constants.java +++ b/src/main/java/io/mosip/mimoto/constant/LdpVcV2Constants.java @@ -1,9 +1,12 @@ package io.mosip.mimoto.constant; /** - * Constants for LDP VC credentials with V2 context + * Constants for LDP VC credentials with V2.0 context */ public class LdpVcV2Constants { + // Language Object and its properties + public static final String LANGUAGE = "@language"; + public static final String VALUE = "@value"; // Credential context and URL public static final String CONTEXT = "@context"; diff --git a/src/main/java/io/mosip/mimoto/constant/SdJwtVcConstants.java b/src/main/java/io/mosip/mimoto/constant/SdJwtVcConstants.java new file mode 100644 index 000000000..1bfde734c --- /dev/null +++ b/src/main/java/io/mosip/mimoto/constant/SdJwtVcConstants.java @@ -0,0 +1,10 @@ +package io.mosip.mimoto.constant; + +/** + * Constants for Sd-Jwt credentials + */ +public class SdJwtVcConstants { + // Language Object and its properties (custom implementation for SD-JWT VCs) + public static final String LANGUAGE = "language"; + public static final String VALUE = "value"; +} diff --git a/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java b/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java index e9390c159..3a486447d 100644 --- a/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java +++ b/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java @@ -16,7 +16,9 @@ import com.nimbusds.jose.util.Base64URL; import io.mosip.injivcrenderer.InjiVcRenderer; import io.mosip.mimoto.constant.CredentialFormat; +import io.mosip.mimoto.constant.LdpVcV1Constants; import io.mosip.mimoto.constant.LdpVcV2Constants; +import io.mosip.mimoto.constant.SdJwtVcConstants; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.mimoto.CredentialIssuerDisplayResponse; import io.mosip.mimoto.dto.mimoto.CredentialSupportedDisplayResponse; @@ -46,6 +48,7 @@ import java.nio.charset.StandardCharsets; import java.util.*; import java.util.stream.Collectors; +import java.util.stream.Stream; @Slf4j @Service @@ -241,7 +244,15 @@ private SelectedFace extractFace(VCCredentialResponse vcCredentialResponse) { private String formatValue(Object val, String locale) { if (val instanceof Map) { - return Optional.ofNullable(((Map) val).get("value")).map(Object::toString).orElse(""); + return Optional.ofNullable(Stream.of( + ((Map) val).get(LdpVcV2Constants.VALUE), + ((Map) val).get(LdpVcV1Constants.VALUE), + ((Map) val).get(SdJwtVcConstants.VALUE) + ).filter(Objects::nonNull) + .findFirst() + .orElse(null)) + .map(Object::toString) + .orElse(""); } else if (val instanceof List) { List list = (List) val; if (list.isEmpty()) return ""; @@ -252,11 +263,25 @@ private String formatValue(Object val, String locale) { .filter(Objects::nonNull) .map(item -> (Map) item) .filter(m -> { - Object lang = m.get("language"); // Safely get language + Object lang = Stream.of( + m.get(LdpVcV2Constants.LANGUAGE), + m.get(LdpVcV1Constants.LANGUAGE), + m.get(SdJwtVcConstants.LANGUAGE) + ).filter(Objects::nonNull) + .findFirst() + .orElse(null); + return lang != null && LocaleUtils.matchesLocale(lang.toString(), locale); }) .map(m -> { - Object value = m.get("value"); // Safely get value + Object value = Stream.of( + m.get(LdpVcV2Constants.VALUE), + m.get(LdpVcV1Constants.VALUE), + m.get(SdJwtVcConstants.VALUE) + ).filter(Objects::nonNull) + .findFirst() + .orElse(null); + return value != null ? value.toString() : null; }) .filter(Objects::nonNull) diff --git a/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java index f93bc9b7e..5fa8cce27 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java @@ -5,6 +5,9 @@ import com.authlete.sd.SDJWT; import com.fasterxml.jackson.databind.ObjectMapper; import io.mosip.injivcrenderer.InjiVcRenderer; +import io.mosip.mimoto.constant.LdpVcV1Constants; +import io.mosip.mimoto.constant.LdpVcV2Constants; +import io.mosip.mimoto.constant.SdJwtVcConstants; import io.mosip.mimoto.dto.BackgroundImageDTO; import io.mosip.mimoto.dto.DisplayDTO; import io.mosip.mimoto.dto.IssuerDTO; @@ -31,6 +34,7 @@ import org.springframework.test.util.ReflectionTestUtils; import java.io.ByteArrayInputStream; +import java.lang.reflect.Method; import java.util.*; import java.util.stream.Stream; @@ -336,8 +340,8 @@ void testGeneratePdfWithLocaleSpecificMapListFormatting() throws Exception { // Setup credential with locale-specific map list Map subjectWithLocaleMap = new HashMap<>(); List> localeData = List.of( - Map.of("language", "en", "value", "English Name"), - Map.of("language", "fr", "value", "French Name") + Map.of(LdpVcV2Constants.LANGUAGE, "en", LdpVcV2Constants.VALUE, "English Name"), + Map.of(LdpVcV2Constants.LANGUAGE, "fr", LdpVcV2Constants.VALUE, "French Name") ); subjectWithLocaleMap.put("localizedName", localeData); ((VCCredentialProperties)vcCredentialResponse.getCredential()).setCredentialSubject(subjectWithLocaleMap); @@ -818,8 +822,8 @@ void testFormatValueWithLocaleMapList() throws Exception { // Setup credential with locale-specific list List> localeData = List.of( - Map.of("language", "en", "value", "English Name"), - Map.of("language", "fr", "value", "French Name") + Map.of(LdpVcV2Constants.LANGUAGE, "en", LdpVcV2Constants.VALUE, "English Name"), + Map.of(LdpVcV2Constants.LANGUAGE, "fr", LdpVcV2Constants.VALUE, "French Name") ); Map subject = Map.of("name", localeData); when(credentialFormatHandler.extractCredentialClaims(vcCredentialResponse)).thenReturn(subject); @@ -894,6 +898,133 @@ void testFormatValueWithPrimitive() throws Exception { assertNotNull(result); // Verifies formatValue converted 25 to "25" } + @Test + void testFormatValueWithMap_AtValue() throws Exception { + CredentialPDFGeneratorService service = new CredentialPDFGeneratorService(); + Method formatValueMethod = CredentialPDFGeneratorService.class.getDeclaredMethod("formatValue", Object.class, String.class); + formatValueMethod.setAccessible(true); + + Map value = new HashMap<>(); + value.put(LdpVcV2Constants.VALUE, "Green Valley Farm"); + + String result = (String) formatValueMethod.invoke(service, value, "en"); + + assertEquals("Green Valley Farm", result); + } + + @Test + void testFormatValueWithMap_Value() throws Exception { + CredentialPDFGeneratorService service = new CredentialPDFGeneratorService(); + Method formatValueMethod = CredentialPDFGeneratorService.class.getDeclaredMethod("formatValue", Object.class, String.class); + formatValueMethod.setAccessible(true); + + Map value = new HashMap<>(); + value.put(LdpVcV1Constants.VALUE, "Green Valley Farm"); + + String result = (String) formatValueMethod.invoke(service, value, "en"); + + assertEquals("Green Valley Farm", result); + } + + @Test + void testFormatValueWithListOfMaps_AtLanguageAndAtValue() throws Exception { + CredentialPDFGeneratorService service = new CredentialPDFGeneratorService(); + Method formatValueMethod = CredentialPDFGeneratorService.class.getDeclaredMethod("formatValue", Object.class, String.class); + formatValueMethod.setAccessible(true); + + Map mapEn = new HashMap<>(); + mapEn.put(LdpVcV2Constants.VALUE, "Green Valley Farm"); + mapEn.put(LdpVcV2Constants.LANGUAGE, "en"); + + Map mapFr = new HashMap<>(); + mapFr.put(LdpVcV2Constants.VALUE, "Ferme Vallée Verte"); + mapFr.put(LdpVcV2Constants.LANGUAGE, "fr"); + + Map mapFil = new HashMap<>(); + mapFil.put(LdpVcV2Constants.VALUE, "Bukid sa Luntiang Lambak"); + mapFil.put(LdpVcV2Constants.LANGUAGE, "fil"); + + List> value = Arrays.asList(mapEn, mapFr, mapFil); + + String resultEn = (String) formatValueMethod.invoke(service, value, "en"); + String resultFr = (String) formatValueMethod.invoke(service, value, "fr"); + String resultFil = (String) formatValueMethod.invoke(service, value, "fil"); + String resultNoMatchingLang = (String) formatValueMethod.invoke(service, value, "hi"); // matching language not present, should return empty string + String resultNullLang = (String) formatValueMethod.invoke(service, value, null); // null language, should return empty string + + assertEquals("Green Valley Farm", resultEn); + assertEquals("Ferme Vallée Verte", resultFr); + assertEquals("Bukid sa Luntiang Lambak", resultFil); + assertEquals("", resultNoMatchingLang); + assertEquals("", resultNullLang); + } + + @Test + void testFormatValueWithListOfMaps_LanguageAndValue() throws Exception { + CredentialPDFGeneratorService service = new CredentialPDFGeneratorService(); + Method formatValueMethod = CredentialPDFGeneratorService.class.getDeclaredMethod("formatValue", Object.class, String.class); + formatValueMethod.setAccessible(true); + + Map mapEn = new HashMap<>(); + mapEn.put(SdJwtVcConstants.VALUE, "Green Valley Farm"); + mapEn.put(SdJwtVcConstants.LANGUAGE, "en"); + + Map mapFr = new HashMap<>(); + mapFr.put(SdJwtVcConstants.VALUE, "Ferme Vallée Verte"); + mapFr.put(SdJwtVcConstants.LANGUAGE, "fr"); + + Map mapFil = new HashMap<>(); + mapFil.put(SdJwtVcConstants.VALUE, "Bukid sa Luntiang Lambak"); + mapFil.put(SdJwtVcConstants.LANGUAGE, "fil"); + + List> value = Arrays.asList(mapEn, mapFr, mapFil); + + String resultEn = (String) formatValueMethod.invoke(service, value, "en"); + String resultFr = (String) formatValueMethod.invoke(service, value, "fr"); + String resultFil = (String) formatValueMethod.invoke(service, value, "fil"); + String resultNoMatchingLang = (String) formatValueMethod.invoke(service, value, "hi"); // matching language not present, should return empty string + String resultNullLang = (String) formatValueMethod.invoke(service, value, null); // null language, should return empty string + + assertEquals("Green Valley Farm", resultEn); + assertEquals("Ferme Vallée Verte", resultFr); + assertEquals("Bukid sa Luntiang Lambak", resultFil); + assertEquals("", resultNoMatchingLang); + assertEquals("", resultNullLang); + } + + @Test + void testFormatValueWithListOfMaps_langAndValue() throws Exception { + CredentialPDFGeneratorService service = new CredentialPDFGeneratorService(); + Method formatValueMethod = CredentialPDFGeneratorService.class.getDeclaredMethod("formatValue", Object.class, String.class); + formatValueMethod.setAccessible(true); + + Map mapEn = new HashMap<>(); + mapEn.put(LdpVcV1Constants.VALUE, "Green Valley Farm"); + mapEn.put(LdpVcV1Constants.LANGUAGE, "en"); + + Map mapFr = new HashMap<>(); + mapFr.put(LdpVcV1Constants.VALUE, "Ferme Vallée Verte"); + mapFr.put(LdpVcV1Constants.LANGUAGE, "fr"); + + Map mapFil = new HashMap<>(); + mapFil.put(LdpVcV1Constants.VALUE, "Bukid sa Luntiang Lambak"); + mapFil.put(LdpVcV1Constants.LANGUAGE, "fil"); + + List> value = Arrays.asList(mapEn, mapFr, mapFil); + + String resultEn = (String) formatValueMethod.invoke(service, value, "en"); + String resultFr = (String) formatValueMethod.invoke(service, value, "fr"); + String resultFil = (String) formatValueMethod.invoke(service, value, "fil"); + String resultNoMatchingLang = (String) formatValueMethod.invoke(service, value, "hi"); // matching language not present, should return empty string + String resultNullLang = (String) formatValueMethod.invoke(service, value, null); // null language, should return empty string + + assertEquals("Green Valley Farm", resultEn); + assertEquals("Ferme Vallée Verte", resultFr); + assertEquals("Bukid sa Luntiang Lambak", resultFil); + assertEquals("", resultNoMatchingLang); + assertEquals("", resultNullLang); + } + @Test void testInjiVcRendererInvokedForLdpVcWithContextStringAndTemplate() throws Exception { Map credentialMap = new HashMap<>(); From 6c17b2a26cf382d5934d2104d64d7c1b5f02187e Mon Sep 17 00:00:00 2001 From: Roopa Srinivas Date: Thu, 12 Mar 2026 15:44:04 +0530 Subject: [PATCH 828/860] INJIWEB-1863 - add logic for multi-language support (#1043) * test: update CredentialPDFGeneratorService unit tests for changed logic Signed-off-by: Roopa S * fix: apply selected locale for PDF title and add tests Signed-off-by: Roopa S * INJIWEB-1863 - Update attribute names revert pom.xml Signed-off-by: Roopa S * INJIWEB-1863 removed displaylist Signed-off-by: Roopa S --------- Signed-off-by: Roopa S Co-authored-by: Roopa S --- .../CredentialPDFGeneratorService.java | 29 +++-- .../CredentialPDFGeneratorServiceTest.java | 110 ++++++++++++++++++ 2 files changed, 127 insertions(+), 12 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java b/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java index 3a486447d..f42681cb1 100644 --- a/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java +++ b/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java @@ -115,7 +115,7 @@ public ByteArrayInputStream generatePdfForVerifiableCredential(String credential processor.loadDisplayPropertiesFromWellknown(credentialProperties, credentialsSupportedResponse, locale); Map data = getPdfResourceFromVcProperties(displayProperties, credentialsSupportedResponse, - vcCredentialResponse, issuerDTO, dataShareUrl, credentialValidity); + vcCredentialResponse, issuerDTO, dataShareUrl, credentialValidity, locale); return renderVCInCredentialTemplate(data, issuerDTO.getIssuer_id(), credentialConfigurationId); } @@ -127,22 +127,27 @@ private Map getPdfResourceFromVcProperties( VCCredentialResponse vcCredentialResponse, IssuerDTO issuerDTO, String dataShareUrl, - String credentialValidity) throws IOException, WriterException { + String credentialValidity, + String userLocale) throws IOException, WriterException { Map data = new HashMap<>(); LinkedHashMap rowProperties = new LinkedHashMap<>(); - CredentialSupportedDisplayResponse firstDisplay = Optional.ofNullable(credentialsSupportedResponse.getDisplay()) - .filter(list -> !list.isEmpty()) - .map(List::getFirst) - .orElse(null); - - String backgroundColor = firstDisplay != null ? firstDisplay.getBackgroundColor() : null; - String backgroundImage = firstDisplay != null && firstDisplay.getBackgroundImage() != null - ? firstDisplay.getBackgroundImage().getUri() + CredentialSupportedDisplayResponse resolvedDisplay = + Optional.ofNullable(credentialsSupportedResponse.getDisplay()) + .filter(list -> !list.isEmpty()) + .map(list -> list.stream() + .filter(d -> LocaleUtils.matchesLocale(d.getLocale(), userLocale)) + .findFirst() + .orElseGet(list::getFirst)) + .orElse(null); + + String backgroundColor = resolvedDisplay != null ? resolvedDisplay.getBackgroundColor() : null; + String backgroundImage = resolvedDisplay != null && resolvedDisplay.getBackgroundImage() != null + ? resolvedDisplay.getBackgroundImage().getUri() : null; - String textColor = firstDisplay != null ? firstDisplay.getTextColor() : null; - String credentialSupportedType = firstDisplay != null ? firstDisplay.getName() : null; + String textColor = resolvedDisplay != null ? resolvedDisplay.getTextColor() : null; + String credentialSupportedType = resolvedDisplay != null ? resolvedDisplay.getName() : null; SelectedFace selectedFace = extractFace(vcCredentialResponse); String face = selectedFace.face(); diff --git a/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java index 5fa8cce27..34b75882f 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java @@ -18,6 +18,7 @@ import io.mosip.mimoto.service.impl.LdpVcCredentialFormatHandler; import io.mosip.mimoto.service.impl.PresentationServiceImpl; import io.mosip.mimoto.service.impl.VcSdJwtCredentialFormatHandler; +import io.mosip.mimoto.util.LocaleUtils; import io.mosip.mimoto.util.SvgFixerUtil; import io.mosip.mimoto.util.Utilities; import io.mosip.pixelpass.PixelPass; @@ -1837,4 +1838,113 @@ void testExtractClaim169QrNotCalledWhenQRCodeTypeIsNull() throws Exception { verify(pixelPass, never()).generateQRData(anyString(), anyString()); verify(presentationService, never()).constructPresentationDefinition(any()); } + + @Test + void testTitleNameWithMatchingLocaleFromGetPdfResource() throws Exception { + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); + when(credentialFormatHandler.extractCredentialClaims(vcCredentialResponse)).thenReturn(Map.of("name", "John")); + issuerDTO.setQr_code_type(QRCodeType.None); + + CredentialSupportedDisplayResponse fr = new CredentialSupportedDisplayResponse(); + fr.setName("French Title"); + fr.setLocale("fr"); + + CredentialSupportedDisplayResponse en = new CredentialSupportedDisplayResponse(); + en.setName("English Title"); + en.setLocale("en"); + + credentialsSupportedResponse.setDisplay(List.of(fr, en)); + + LinkedHashMap> displayProperties = new LinkedHashMap<>(); + + Map data = ReflectionTestUtils.invokeMethod( + credentialPDFGeneratorService, + "getPdfResourceFromVcProperties", + displayProperties, + credentialsSupportedResponse, + vcCredentialResponse, + issuerDTO, + "", + "-1", + "en" + ); + + assertNotNull(data); + assertEquals("English Title", data.get("titleName")); + } + + @Test + void testTitleNameFallsBackToFirstWhenLocaleNotFoundFromGetPdfResource() throws Exception { + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); + when(credentialFormatHandler.extractCredentialClaims(vcCredentialResponse)).thenReturn(Map.of("name", "John")); + issuerDTO.setQr_code_type(QRCodeType.None); + + CredentialSupportedDisplayResponse fr = new CredentialSupportedDisplayResponse(); + fr.setName("French Title"); + fr.setLocale("fr"); + + CredentialSupportedDisplayResponse en = new CredentialSupportedDisplayResponse(); + en.setName("English Title"); + en.setLocale("en"); + + credentialsSupportedResponse.setDisplay(List.of(fr, en)); + + LinkedHashMap> displayProperties = new LinkedHashMap<>(); + + Map data = ReflectionTestUtils.invokeMethod( + credentialPDFGeneratorService, + "getPdfResourceFromVcProperties", + displayProperties, + credentialsSupportedResponse, + vcCredentialResponse, + issuerDTO, + "", + "-1", + "es" + ); + + assertNotNull(data); + assertEquals("French Title", data.get("titleName")); // fallback to first + } + + @Test + void testTitleNameNullWhenDisplayListNullOrEmptyFromGetPdfResource() throws Exception { + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); + when(credentialFormatHandler.extractCredentialClaims(vcCredentialResponse)).thenReturn(Map.of("name", "John")); + issuerDTO.setQr_code_type(QRCodeType.None); + + LinkedHashMap> displayProperties = new LinkedHashMap<>(); + + // null display list + credentialsSupportedResponse.setDisplay(null); + Map dataNull = ReflectionTestUtils.invokeMethod( + credentialPDFGeneratorService, + "getPdfResourceFromVcProperties", + displayProperties, + credentialsSupportedResponse, + vcCredentialResponse, + issuerDTO, + "", + "-1", + "en" + ); + assertNotNull(dataNull); + assertNull(dataNull.get("titleName")); + + // empty display list + credentialsSupportedResponse.setDisplay(new ArrayList<>()); + Map dataEmpty = ReflectionTestUtils.invokeMethod( + credentialPDFGeneratorService, + "getPdfResourceFromVcProperties", + displayProperties, + credentialsSupportedResponse, + vcCredentialResponse, + issuerDTO, + "", + "-1", + "en" + ); + assertNotNull(dataEmpty); + assertNull(dataEmpty.get("titleName")); + } } From 1121e391dfaf4cf7801f30ac2f03e04b803c39f6 Mon Sep 17 00:00:00 2001 From: Rudhhi Shah Date: Fri, 13 Mar 2026 17:20:34 +0530 Subject: [PATCH 829/860] [INJIEB-1870] - Sync release to develop (#1049) * [INJIWEB-1823] Add docs for SVG Rendering and Claim169 QR Code support (#1034) * [INJIWEB-1823] Add integration guide doc for svg rendering Signed-off-by: jackjain * [INJIWEB-1823] Add Claim169 support documentation Signed-off-by: jackjain * [INJIWEB-1823] Fix issues with SVG rendering documentation Signed-off-by: jackjain * [INJIWEB-1823] Fix typos and add additional clarification for ambiguous steps Signed-off-by: jackjain * [INJIWEB-1823] fix issues with sequence diagrams and flow explanations Signed-off-by: jackjain * [INJIWEB-1823] Rephrase the inji-vc-render PDF conversion flow text Signed-off-by: jackjain --------- Signed-off-by: jackjain Signed-off-by: Rudhhi Shah * [INJIWEB-1823] Remove unused constants, org changes in pom.xml and remove unnecessary handling of context field as string (#1030) * [INJIWEB-1841] update org name from mosip to inji in repo URLs and artifact ID Signed-off-by: jackjain * [INJIWEB-1841] Remove unused AES constant field and replace private constructor with lombok annotation Signed-off-by: jackjain * [INJIWEB-1841] Remove handling for context as string during ldp_vc v2 context check Signed-off-by: jackjain --------- Signed-off-by: jackjain Signed-off-by: Rudhhi Shah * [INJIWEB-1819] - Add claim169 extraction logic (#1003) (#1017) * [INJIWEB-1819] - Add claim169 extraction logic (#1003) * [INJIWEB-1819] - Add claim169 extraction logic Add test cases for possible scenarios of claim 169 Signed-off-by: Durgesh Konga * [INJIWEB-1819] - Rename variable and remove unnecessary string initialization Signed-off-by: Durgesh Konga * [INJIWEB-1819] - Replace multiple test cases into single parameterised test case Signed-off-by: Durgesh Konga --------- Signed-off-by: Durgesh Konga * [INJIWEB-1819] - Remove identityqr hardcode, update test case Signed-off-by: Durgesh Konga --------- Signed-off-by: Durgesh Konga Signed-off-by: Rudhhi Shah * [INJIWEB-1831] - Add DB upgrade and rollback scripts, Update ovp jar version (#1007) * [INJIWEB-1831] - Add placeholder upgrade and rollback scripts Update ovp jar version Signed-off-by: Durgesh Konga * [INJIWEB-1831] - Update ovp jar version Signed-off-by: Durgesh Konga * [INJIWEB-1831] - Update ovp jar version Signed-off-by: Durgesh Konga * [INJIWEB-1831] - Update ovp jar version Signed-off-by: Durgesh Konga * [INJIWEB-1831] - Fix Script Name Signed-off-by: Durgesh Konga --------- Signed-off-by: Durgesh Konga Signed-off-by: Rudhhi Shah * [INJIWEB-1870] Upgrade the mimoto version to 0.22.0-SNAPSHOT Signed-off-by: Rudhhi Shah * [INJIWEB-1823] removed the corresponding test of handling for context as string during ldp_vc v2 context check Signed-off-by: Rudhhi Shah * [INJIWEB-1823] updated inji-vc-renderer jar to 0.2.0 Signed-off-by: Rudhhi Shah * [INJIWEB-1870] test file conflict resolution error fixed Signed-off-by: Rudhhi Shah --------- Signed-off-by: jackjain Signed-off-by: Rudhhi Shah Signed-off-by: Durgesh Konga Co-authored-by: Jack Co-authored-by: Durgesh Konga --- api-test/pom.xml | 2 +- .../sql/0.20.0_to_0.21.0_rollback.sql | 0 .../sql/0.20.0_to_0.21.0_upgrade.sql | 0 docs/Claim169QRCodeSupport.md | 49 ++++++++++++++ docs/SVGRenderingIntegrationGuide.md | 64 +++++++++++++++++++ pom.xml | 22 +++---- .../constant/SigningAlgorithmConstants.java | 10 +-- .../CredentialPDFGeneratorService.java | 2 - .../CredentialPDFGeneratorServiceTest.java | 30 +-------- 9 files changed, 131 insertions(+), 48 deletions(-) create mode 100644 db_upgrade_script/inji_mimoto/sql/0.20.0_to_0.21.0_rollback.sql create mode 100644 db_upgrade_script/inji_mimoto/sql/0.20.0_to_0.21.0_upgrade.sql create mode 100644 docs/Claim169QRCodeSupport.md create mode 100644 docs/SVGRenderingIntegrationGuide.md diff --git a/api-test/pom.xml b/api-test/pom.xml index 6d4e1d2ad..80ef482a8 100644 --- a/api-test/pom.xml +++ b/api-test/pom.xml @@ -29,7 +29,7 @@ Mosip mosip.emailnotifier@gmail.com io.inji - https://github.com/inji/mimoto + https://inji.io/ diff --git a/db_upgrade_script/inji_mimoto/sql/0.20.0_to_0.21.0_rollback.sql b/db_upgrade_script/inji_mimoto/sql/0.20.0_to_0.21.0_rollback.sql new file mode 100644 index 000000000..e69de29bb diff --git a/db_upgrade_script/inji_mimoto/sql/0.20.0_to_0.21.0_upgrade.sql b/db_upgrade_script/inji_mimoto/sql/0.20.0_to_0.21.0_upgrade.sql new file mode 100644 index 000000000..e69de29bb diff --git a/docs/Claim169QRCodeSupport.md b/docs/Claim169QRCodeSupport.md new file mode 100644 index 000000000..f47e843d0 --- /dev/null +++ b/docs/Claim169QRCodeSupport.md @@ -0,0 +1,49 @@ +# Claim 169 QR Code Support + +## Overview +Mimoto now supports consumption of claim 169 QR data present in the Verifiable Credential (VC) issued by the issuer. This feature allows users to easily access and utilize the claim 169 data for various purposes, such as displaying it in the user interface or using it for verification. Mimoto now gives preference to claim 169 QR code present in the VC while displaying and generating PDF for VCs. + +## Pre-requisites +- VC should be valid and should contain claim 169 QR code data in the expected format. For e.g. for JSON-LD VC, claim 169 QR code data should be present in the `credentialSubject` section of the VC with the key `claim169`. + + ```json + "claim169": { + "identityQRCode": "NCF4:OCFBI%S:2EQ7NMC2558J6HW8VDQ0DW8V27MMSLYG%8WTGTEF9-8G7K6A5S+ORSWH4%F12802...", + "faceQRCode": "NCF4:OCFBI%S:2EQ7NMC2558J6HW8VDQ0DW8V27MMSLYG%8WTSJSJGTEF9-8G7K6A5S+ORSWH4%F12802..." + }, + ``` +- The claim 169 QR code data should be in the expected format as per the requirements of the application consuming it. Refer Claim 169 QR Code specification for further details : https://docs.mosip.io/1.2.0/readme/standards-and-specifications/mosip-standards/169-qr-code-specification +- Issuer configuration should have `qr_code_type` set as `EmbeddedVC` in [mimoto-issuers-config.json](../docker-compose/config/mimoto-issuers-config.json). + +## User flow : +**Note: The flow is applicable for both guest users and wallet users.** +1. User downloads the VC in guest mode or selects the VC from their wallet for PDF generation. +2. During PDF generation, Mimoto will check for the presence of claim 169 QR code data in the VC. +3. If claim 169 QR code data is present, Mimoto will extract the QR data in the first field encountered during iteration inside `claim169` object, generate QR code image and add it to the QR code placeholder in the generated PDF. +4. PDF is returned to the user. + +## Sequence Diagram +```mermaid +sequenceDiagram + participant User + participant InjiWeb as InjiWeb UI + participant Mimoto Service + participant VCSource as Database/Issuer + + User->>InjiWeb: Request to download VC / Generate PDF for VC in wallet + InjiWeb->> Mimoto Service: Download VC / Generate PDF request with VC identifier + Mimoto Service->>VCSource: Retrieve VC data + VCSource-->>Mimoto Service: Return VC + Mimoto Service->>Mimoto Service: Check for claim 169 QR code data in VC and issuer configuration + alt claim 169 QR code present and qr_code_type is EmbeddedVC in issuer configuration + Mimoto Service->>Mimoto Service: Extract claim 169 QR code data
and generate PDF with claim 169 QR code image + else not eligible for claim 169 QR code rendering + Mimoto Service->>Mimoto Service: Generate standard PDF with QR code based on VC data for EmbeddedVC
or data share url for OnlineSharing + end + Mimoto Service-->>InjiWeb: Return generated PDF + InjiWeb-->>User: Send PDF back to user +``` + +## References + +- [Claim 169 QR Code Specification](https://docs.mosip.io/1.2.0/readme/standards-and-specifications/mosip-standards/169-qr-code-specification) \ No newline at end of file diff --git a/docs/SVGRenderingIntegrationGuide.md b/docs/SVGRenderingIntegrationGuide.md new file mode 100644 index 000000000..18a310bff --- /dev/null +++ b/docs/SVGRenderingIntegrationGuide.md @@ -0,0 +1,64 @@ +# SVG rendering integration guide + +Mimoto service now supports rendering VCs using an issuer-controlled SVG template. It is W3C Verifiable Credential Rendering specification compliant and currently it is implemented for W3C JSON-LD VC 2.0. + +## Pre-requisites : +- The VC should be a valid W3C JSON-LD VC 2.0 credential. +- In the VC, renderMethod field should be present and renderSuite field in it should be set to `svg-mustache`. Along with it there should be information regarding the hosted template : + ```json + "renderMethod": { + "type": "TemplateRenderMethod", + "renderSuite": "svg-mustache", + "template": { + "id": "https://issuer-host.com/assets/templates/template.svg", + "mediaType": "image/svg+xml", + "digestMultibase": "zQmerWC85Wg6wFl9znFCwYxApG270iEu5h6JqWAPdhyxz2dR" + } + } + ``` + Reference : https://www.w3.org/TR/vc-render-method/ +- The template should be hosted on a publicly accessible URL and should be a valid SVG file. The placeholders in the template should be strictly compliant to JSON Pointer Algorithm as mentioned in the specification. + +## High-level user flow : +1. User downloads the VC either in guest mode or from their wallet. +2. Mimoto service checks for the presence of renderMethod field in the VC and if its renderSuite is `svg-mustache`. +3. inji-vc-renderer library is invoked, it fetches the template from the URL mentioned in template field and verifies the integrity of the template using the digestMultibase value. +4. The library then renders the VC using the fetched template and the data from the VC. The library replaces the placeholders in the template with the corresponding values from the VC. +5. The inji-vc-renderer library returns the rendered SVG to Mimoto service. Mimoto service then invokes the library again to convert the SVG to PDF, and returns the PDF to the user. + + ```mermaid + sequenceDiagram + participant User + participant Mimoto Service + participant inji-vc-renderer + participant Issuer + + User->>Mimoto Service: Download VC + Mimoto Service->>Mimoto Service: Check for VC format, renderMethod field and renderSuite value + alt eligible for SVG rendering + Mimoto Service->>inji-vc-renderer: Send VC data (and QR code data if OnlineSharing type) + inji-vc-renderer->>Issuer: Fetch template from URL + Issuer-->>inji-vc-renderer: Return template + inji-vc-renderer->inji-vc-renderer: Verify integrity of template using digestMultibase + inji-vc-renderer->>inji-vc-renderer: Replace placeholders with VC data + inji-vc-renderer-->>Mimoto Service: Return rendered SVG + Mimoto Service->>inji-vc-renderer: Convert SVG to PDF + inji-vc-renderer-->>Mimoto Service: Return PDF + Mimoto Service-->>User: Send PDF back to user + else not eligible for SVG rendering + Mimoto Service->>Mimoto Service: Handle using existing rendering logic (e.g., using custom HTML templates) + Mimoto Service-->>User: Send rendered credential PDF back to user + end + ``` + +More details about the SVG template rendering implementation can be found in the codebase of inji-vc-renderer library : https://github.com/inji/inji-vc-renderer/blob/master/kotlin/Readme.md + +## Error scenarios : +- If the template cannot be fetched from the URL, an error message is returned to the user indicating that the template could not be retrieved. +- If the integrity of the template cannot be verified using the digestMultibase value, an error message is returned to the user indicating that the template integrity verification failed. + +----------- + +## References : +- [W3C Verifiable Credential Rendering specification](https://www.w3.org/TR/vc-render-method/) +- [inji-vc-renderer Kotlin library](https://github.com/inji/inji-vc-renderer/blob/master/kotlin/Readme.md) diff --git a/pom.xml b/pom.xml index 8f1f19b25..9f3bfc862 100644 --- a/pom.xml +++ b/pom.xml @@ -1,11 +1,11 @@ 4.0.0 - io.mosip + io.inji mimoto - 0.21.0-SNAPSHOT + 0.22.0-SNAPSHOT mimoto - https://github.com/mosip/mimoto + https://github.com/inji/mimoto Mobile server backend supporting Inji. @@ -15,17 +15,17 @@ - scm:git:git://github.com/mosip/mimoto.git - scm:git:ssh://github.com:mosip/mimoto.git - https://github.com/mosip/mimoto + scm:git:git://github.com/inji/mimoto.git + scm:git:ssh://github.com:inji/mimoto.git + https://github.com/inji/mimoto HEAD Mosip mosip.emailnotifier@gmail.com - io.mosip - https://github.com/mosip/mimoto + io.inji + https://inji.io/ @@ -144,7 +144,7 @@ io.mosip inji-openid4vp-jar - 0.6.0-SNAPSHOT + 0.6.0 io.micrometer @@ -435,9 +435,9 @@ 0.7.0 - io.mosip + io.inji injivcrenderer-jar - 0.2.0-SNAPSHOT + 0.2.0 org.apache.pdfbox diff --git a/src/main/java/io/mosip/mimoto/constant/SigningAlgorithmConstants.java b/src/main/java/io/mosip/mimoto/constant/SigningAlgorithmConstants.java index cfb0b77ca..14e37ab2d 100644 --- a/src/main/java/io/mosip/mimoto/constant/SigningAlgorithmConstants.java +++ b/src/main/java/io/mosip/mimoto/constant/SigningAlgorithmConstants.java @@ -1,20 +1,20 @@ package io.mosip.mimoto.constant; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) public final class SigningAlgorithmConstants { // Algorithm Names public static final String RSA = "RSA"; public static final String EC = "EC"; public static final String ED25519 = "Ed25519"; - public static final String AES = "AES"; + // EC curve names (JCA) public static final String CURVE_SECP256K1 = "secp256k1"; public static final String CURVE_SECP256R1 = "secp256r1"; // Provider Names public static final String BC_PROVIDER = "BC"; - - private SigningAlgorithmConstants() { - - } } diff --git a/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java b/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java index f42681cb1..3965868dd 100644 --- a/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java +++ b/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java @@ -361,8 +361,6 @@ private boolean containsV2Context(Map credentialPayloadMap) { if (contextField instanceof List contextList) return contextList.stream().anyMatch(entry -> LdpVcV2Constants.V2_CONTEXT_URL.equals(entry.toString())); - if (contextField instanceof String contextString) - return LdpVcV2Constants.V2_CONTEXT_URL.equals(contextString); return false; } diff --git a/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java index 34b75882f..90914666d 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java @@ -1026,34 +1026,6 @@ void testFormatValueWithListOfMaps_langAndValue() throws Exception { assertEquals("", resultNullLang); } - @Test - void testInjiVcRendererInvokedForLdpVcWithContextStringAndTemplate() throws Exception { - Map credentialMap = new HashMap<>(); - credentialMap.put(CONTEXT, V2_CONTEXT_URL); - credentialMap.put(RENDER_METHOD, List.of(Map.of(TEMPLATE, "", - RENDER_SUITE, SVG_MUSTACHE_RENDER_SUITE))); - VCCredentialResponse vcCredentialResponse = VCCredentialResponse.builder() - .format("ldp_vc") - .credential(credentialMap) - .build(); - - issuerDTO.setQr_code_type(QRCodeType.EmbeddedVC); - - when(objectMapper.writeValueAsString(any())).thenReturn("{}"); - when(injiVcRenderer.generateCredentialDisplayContent(any(), any(), anyString(), any())) - .thenReturn(List.of("")); - when(svgFixerUtil.addMissingOffsetToStopElements(anyString())).thenAnswer(inv -> inv.getArgument(0)); - - String urlSafeBase64Pdf = "AQID"; - when(injiVcRenderer.convertSvgToPdf(anyList())).thenReturn(urlSafeBase64Pdf); - - ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( - "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, - "https://example.com/share", "", "en"); - assertNotNull(result); - verify(injiVcRenderer).generateCredentialDisplayContent(any(), any(), anyString(), any()); - } - @Test void testInjiVcRendererInvokedForLdpVcWithContextListAndTemplate() throws Exception { Map credentialMap = new HashMap<>(); @@ -1641,7 +1613,7 @@ void testExtractClaim169QrWithSdJwtFormat() throws Exception { try (MockedStatic mockedSDJWT = mockStatic(SDJWT.class); MockedStatic mocked = mockStatic(Utilities.class)) { - + // Mock SDJWT parsing for disclosure extraction SDJWT mockSDJWT = mock(SDJWT.class); mockedSDJWT.when(() -> SDJWT.parse(mockSDJWTString)).thenReturn(mockSDJWT); From 6178a129d7441fcbb7e26c2c69e6247132c612d0 Mon Sep 17 00:00:00 2001 From: Rudhhi Shah Date: Mon, 16 Mar 2026 14:19:28 +0530 Subject: [PATCH 830/860] [INJIWEB-1861] Fixing SonarCloud reliability issues in mimoto (#1053) * [INJIWEB-1861] Field injection to constructor injection and removal of unsused imports - trial files Signed-off-by: Rudhhi Shah * [INJWEB-1861] Access modifier change Signed-off-by: Rudhhi Shah --------- Signed-off-by: Rudhhi Shah --- .../AttestationServiceController.java | 13 +++++---- .../controller/CommonInjiController.java | 7 +++-- .../controller/CredentialShareController.java | 28 +++++++++---------- 3 files changed, 25 insertions(+), 23 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/AttestationServiceController.java b/src/main/java/io/mosip/mimoto/controller/AttestationServiceController.java index 0209cf191..405108467 100644 --- a/src/main/java/io/mosip/mimoto/controller/AttestationServiceController.java +++ b/src/main/java/io/mosip/mimoto/controller/AttestationServiceController.java @@ -1,12 +1,10 @@ package io.mosip.mimoto.controller; -import io.mosip.kernel.core.logger.spi.Logger; import io.mosip.mimoto.constant.SwaggerLiteralConstants; import io.mosip.mimoto.dto.mimoto.AttestationStatement; import io.mosip.mimoto.dto.mimoto.GenericResponseDTO; import io.mosip.mimoto.util.AttestationOfflineVerify; import io.mosip.mimoto.util.AttestationOnlineVerify; -import io.mosip.mimoto.util.LoggerUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; @@ -23,11 +21,14 @@ @Tag(name = SwaggerLiteralConstants.ATTESTATION_NAME, description = SwaggerLiteralConstants.ATTESTATION_DESCRIPTION) public class AttestationServiceController { - @Autowired - AttestationOfflineVerify attestationOfflineVerify; + private final AttestationOfflineVerify attestationOfflineVerify; - @Autowired - AttestationOnlineVerify attestationOnlineVerify; + private final AttestationOnlineVerify attestationOnlineVerify; + + public AttestationServiceController(AttestationOfflineVerify attestationOfflineVerify, AttestationOnlineVerify attestationOnlineVerify) { + this.attestationOfflineVerify = attestationOfflineVerify; + this.attestationOnlineVerify = attestationOnlineVerify; + } /** * Safetynet attestation verify using offline method. diff --git a/src/main/java/io/mosip/mimoto/controller/CommonInjiController.java b/src/main/java/io/mosip/mimoto/controller/CommonInjiController.java index 4f211d899..064edd2b0 100644 --- a/src/main/java/io/mosip/mimoto/controller/CommonInjiController.java +++ b/src/main/java/io/mosip/mimoto/controller/CommonInjiController.java @@ -23,8 +23,11 @@ @Tag(name = SwaggerLiteralConstants.COMMON_INJI_NAME, description = SwaggerLiteralConstants.COMMON_INJI_DESCRIPTION) public class CommonInjiController { - @Autowired - private Map injiConfig; + private final Map injiConfig; + + public CommonInjiController(Map injiConfig) { + this.injiConfig = injiConfig; + } @Operation( summary = SwaggerLiteralConstants.COMMON_INJI_GET_PROPERTIES_SUMMARY, description = SwaggerLiteralConstants.COMMON_INJI_GET_PROPERTIES_DESCRIPTION) @ApiResponses({@ApiResponse(responseCode = "200",content = { @Content(schema = @Schema(implementation = ResponseWrapper.class), diff --git a/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java b/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java index f8ac0c499..880ccd7d0 100644 --- a/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java +++ b/src/main/java/io/mosip/mimoto/controller/CredentialShareController.java @@ -2,7 +2,6 @@ import com.fasterxml.jackson.databind.JsonNode; import com.google.gson.Gson; -import io.mosip.kernel.core.util.JsonUtils; import io.mosip.kernel.websub.api.annotation.PreAuthenticateContentAndVerifyIntent; import io.mosip.mimoto.constant.ApiName; import io.mosip.mimoto.constant.SwaggerLiteralConstants; @@ -23,7 +22,6 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.env.Environment; import org.springframework.http.HttpStatus; @@ -45,17 +43,11 @@ @Tag(name = SwaggerLiteralConstants.CREDENTIALS_SHARE_NAME, description = SwaggerLiteralConstants.CREDENTIALS_SHARE_DESCRIPTION) public class CredentialShareController { - @Autowired - private CredentialShareServiceImpl credentialShareService; + private final CredentialShareServiceImpl credentialShareService; - @Autowired - public RestClientService restClientService; + private final RestClientService restClientService; - @Autowired - Environment env; - - @Value("${mosip.event.topic}") - private String topic; + private final Environment env; @Value("${mosip.partner.encryption.key}") private String partnerEncryptionKey; @@ -63,13 +55,19 @@ public class CredentialShareController { @Value("${mosip.partner.id}") private String partnerId; - @Autowired - RequestValidator requestValidator; + private final RequestValidator requestValidator; private Gson gson = new Gson(); - @Autowired - private Utilities utilities; + private final Utilities utilities; + + public CredentialShareController(CredentialShareServiceImpl credentialShareService, RestClientService restClientService, Environment env, RequestValidator requestValidator, Utilities utilities) { + this.credentialShareService = credentialShareService; + this.restClientService = restClientService; + this.env = env; + this.requestValidator = requestValidator; + this.utilities = utilities; + } /** * Websub callback for Verifiable Credential share. From a6d0add56defe515ed03c3e75b3f8da08968386c Mon Sep 17 00:00:00 2001 From: Rudhhi Shah Date: Mon, 23 Mar 2026 12:45:33 +0530 Subject: [PATCH 831/860] [INJIWEB-1861] Fixing SonarCloud reliability issues in mimoto (#1056) * [INJIWEB-1861] Added constructor injection for the CONTROLLER files Signed-off-by: Rudhhi Shah * [INJIWEB-1861] Added constructor injection for the SERVICE files Signed-off-by: Rudhhi Shah * [INJIWEB-1861] reused SecureRandom instance as a static final field Signed-off-by: Rudhhi Shah * [INJIWEB-1861] removed the redundant word 'image' from alt attribute Signed-off-by: Rudhhi Shah * [INJIWEB-1861] Addressed code rabbit comments Signed-off-by: Rudhhi Shah * [INJIWEB-1861] Used static string for alt attribute in credential template Signed-off-by: Rudhhi Shah --------- Signed-off-by: Rudhhi Shah --- .../config/credential-template.html | 4 +- .../AttestationServiceController.java | 1 - .../controller/CommonInjiController.java | 1 - .../controller/CredentialsController.java | 12 +++-- .../mimoto/controller/IdpController.java | 21 ++++---- .../mimoto/controller/IssuersController.java | 8 +-- .../controller/PresentationController.java | 18 +++---- .../controller/ResidentServiceController.java | 16 +++--- .../mimoto/controller/UsersController.java | 12 +++-- .../controller/VerifiersController.java | 8 +-- .../WalletPresentationsController.java | 12 +++-- .../WalletTrustedVerifiersController.java | 8 +-- .../CredentialPDFGeneratorService.java | 32 +++++------ .../mimoto/service/DataProtectionService.java | 5 +- .../impl/CredentialMatchingServiceImpl.java | 21 ++++---- .../impl/CredentialRequestServiceImpl.java | 18 +++---- .../impl/CredentialShareServiceImpl.java | 53 +++++++++---------- .../impl/CredentialVerifierServiceImpl.java | 12 +++-- .../service/impl/DataShareServiceImpl.java | 12 +++-- .../impl/DcSdJwtCredentialFormatHandler.java | 5 ++ .../mimoto/service/impl/IdpServiceImpl.java | 17 +++--- .../service/impl/IssuersServiceImpl.java | 16 +++--- .../impl/KeyPairRetrievalServiceImpl.java | 12 +++-- .../impl/LdpVcCredentialFormatHandler.java | 8 +-- .../mimoto/service/impl/OpenID4VPService.java | 8 +-- .../service/impl/PresentationServiceImpl.java | 16 +++--- .../service/impl/RestClientServiceImpl.java | 12 +++-- .../mimoto/service/impl/SessionManager.java | 8 +-- .../impl/TrustedVerifierServiceImpl.java | 8 +-- .../impl/VcSdJwtCredentialFormatHandler.java | 9 ++-- .../service/impl/VerifierServiceImpl.java | 16 +++--- .../impl/WalletPresentationServiceImpl.java | 32 +++++------ .../templates/credential-template.html | 4 +- .../mimoto/controller/IdpControllerTest.java | 1 - .../WalletPresentationsControllerTest.java | 3 -- .../CredentialPDFGeneratorServiceTest.java | 11 ++-- .../service/CredentialRequestServiceTest.java | 6 ++- .../service/CredentialShareServiceTest.java | 26 +++++++-- .../mimoto/service/DataShareServiceTest.java | 1 + .../service/PresentationServiceTest.java | 15 ------ .../mimoto/service/RestClientServiceTest.java | 3 +- .../mimoto/service/SessionManagerTest.java | 4 +- .../service/TrustedVerifierServiceTest.java | 3 -- 43 files changed, 281 insertions(+), 237 deletions(-) diff --git a/docker-compose/config/credential-template.html b/docker-compose/config/credential-template.html index eb7fe8285..48c96dfe2 100644 --- a/docker-compose/config/credential-template.html +++ b/docker-compose/config/credential-template.html @@ -41,7 +41,7 @@ $nestedEntry.key #if($nestedEntry.value.startsWith("data:image/")) - Embedded Image #else
@@ -58,7 +58,7 @@ $entry.key
#if($entry.value.startsWith("data:image/")) - Embedded Image #else diff --git a/src/main/java/io/mosip/mimoto/controller/AttestationServiceController.java b/src/main/java/io/mosip/mimoto/controller/AttestationServiceController.java index 405108467..9da08703f 100644 --- a/src/main/java/io/mosip/mimoto/controller/AttestationServiceController.java +++ b/src/main/java/io/mosip/mimoto/controller/AttestationServiceController.java @@ -7,7 +7,6 @@ import io.mosip.mimoto.util.AttestationOnlineVerify; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; diff --git a/src/main/java/io/mosip/mimoto/controller/CommonInjiController.java b/src/main/java/io/mosip/mimoto/controller/CommonInjiController.java index 064edd2b0..abf6214c0 100644 --- a/src/main/java/io/mosip/mimoto/controller/CommonInjiController.java +++ b/src/main/java/io/mosip/mimoto/controller/CommonInjiController.java @@ -10,7 +10,6 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; diff --git a/src/main/java/io/mosip/mimoto/controller/CredentialsController.java b/src/main/java/io/mosip/mimoto/controller/CredentialsController.java index cd1e62ae2..ed9ba9a7d 100644 --- a/src/main/java/io/mosip/mimoto/controller/CredentialsController.java +++ b/src/main/java/io/mosip/mimoto/controller/CredentialsController.java @@ -16,7 +16,6 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.InputStreamResource; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; @@ -39,11 +38,14 @@ @Tag(name = SwaggerLiteralConstants.CREDENTIALS_NAME, description = SwaggerLiteralConstants.CREDENTIALS_DESCRIPTION) public class CredentialsController { - @Autowired - CredentialService credentialService; + private final CredentialService credentialService; - @Autowired - IdpService idpService; + private final IdpService idpService; + + public CredentialsController(CredentialService credentialService, IdpService idpService) { + this.credentialService = credentialService; + this.idpService = idpService; + } @Operation(summary = SwaggerLiteralConstants.CREDENTIALS_DOWNLOAD_VC_SUMMARY, description = SwaggerLiteralConstants.CREDENTIALS_DOWNLOAD_VC_DESCRIPTION) @ApiResponses({ diff --git a/src/main/java/io/mosip/mimoto/controller/IdpController.java b/src/main/java/io/mosip/mimoto/controller/IdpController.java index df676c50d..5557dd7df 100644 --- a/src/main/java/io/mosip/mimoto/controller/IdpController.java +++ b/src/main/java/io/mosip/mimoto/controller/IdpController.java @@ -1,6 +1,5 @@ package io.mosip.mimoto.controller; -import io.mosip.kernel.core.util.JsonUtils; import io.mosip.mimoto.constant.ApiName; import io.mosip.mimoto.constant.SwaggerLiteralConstants; import io.mosip.mimoto.core.http.ResponseWrapper; @@ -21,7 +20,6 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -38,17 +36,20 @@ public class IdpController { private static final boolean USE_BEARER_TOKEN = true; - @Autowired - private RestClientService restClientService; + private final RestClientService restClientService; - @Autowired - private JoseUtil joseUtil; + private final JoseUtil joseUtil; - @Autowired - IdpService idpService; + private final IdpService idpService; - @Autowired - RequestValidator requestValidator; + private final RequestValidator requestValidator; + + public IdpController(RestClientService restClientService, JoseUtil joseUtil, IdpService idpService, RequestValidator requestValidator) { + this.restClientService = restClientService; + this.joseUtil = joseUtil; + this.idpService = idpService; + this.requestValidator = requestValidator; + } @Operation(summary = SwaggerLiteralConstants.IDP_BINDING_OTP_SUMMARY, description = SwaggerLiteralConstants.IDP_BINDING_OTP_DESCRIPTION) @PostMapping(value = "/binding-otp", produces = MediaType.APPLICATION_JSON_VALUE) diff --git a/src/main/java/io/mosip/mimoto/controller/IssuersController.java b/src/main/java/io/mosip/mimoto/controller/IssuersController.java index 5aaf10628..123ba1cc8 100644 --- a/src/main/java/io/mosip/mimoto/controller/IssuersController.java +++ b/src/main/java/io/mosip/mimoto/controller/IssuersController.java @@ -13,7 +13,6 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -32,8 +31,11 @@ @Tag(name = SwaggerLiteralConstants.ISSUERS_NAME, description = SwaggerLiteralConstants.ISSUERS_DESCRIPTION) public class IssuersController { - @Autowired - IssuersService issuersService; + private final IssuersService issuersService; + + public IssuersController(IssuersService issuersService) { + this.issuersService = issuersService; + } @Operation(summary = SwaggerLiteralConstants.ISSUERS_GET_ISSUERS_SUMMARY, description = SwaggerLiteralConstants.ISSUERS_GET_ISSUERS_DESCRIPTION) @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE) diff --git a/src/main/java/io/mosip/mimoto/controller/PresentationController.java b/src/main/java/io/mosip/mimoto/controller/PresentationController.java index adbb27d28..049b24d2e 100644 --- a/src/main/java/io/mosip/mimoto/controller/PresentationController.java +++ b/src/main/java/io/mosip/mimoto/controller/PresentationController.java @@ -18,9 +18,6 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; @@ -36,8 +33,7 @@ @Tag(name = SwaggerLiteralConstants.PRESENTATION_NAME, description = SwaggerLiteralConstants.PRESENTATION_DESCRIPTION) public class PresentationController { - @Autowired - PresentationService presentationService; + private final PresentationService presentationService; @Value("${mosip.inji.ovp.error.redirect.url.pattern}") String injiOvpErrorRedirectUrlPattern; @@ -45,11 +41,15 @@ public class PresentationController { @Value("${mosip.inji.web.redirect.url}") String injiWebRedirectUrl; - @Autowired - VerifierService verifierService; + private final VerifierService verifierService; - @Autowired - ObjectMapper objectMapper; + private final ObjectMapper objectMapper; + + public PresentationController(PresentationService presentationService, VerifierService verifierService, ObjectMapper objectMapper) { + this.presentationService = presentationService; + this.verifierService = verifierService; + this.objectMapper = objectMapper; + } @Operation( summary = SwaggerLiteralConstants.PRESENTATION_AUTHORIZE_SUMMARY, description = SwaggerLiteralConstants.PRESENTATION_AUTHORIZE_DESCRIPTION) @ApiResponses({ @ApiResponse(responseCode = "302", content = { @Content(mediaType = "application/text") }) }) diff --git a/src/main/java/io/mosip/mimoto/controller/ResidentServiceController.java b/src/main/java/io/mosip/mimoto/controller/ResidentServiceController.java index 977dfd462..29c79ee04 100644 --- a/src/main/java/io/mosip/mimoto/controller/ResidentServiceController.java +++ b/src/main/java/io/mosip/mimoto/controller/ResidentServiceController.java @@ -11,7 +11,6 @@ import io.mosip.mimoto.util.RequestValidator; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; @@ -27,14 +26,17 @@ @Tag(name = SwaggerLiteralConstants.RESIDENT_NAME, description = SwaggerLiteralConstants.RESIDENT_DESCRIPTION) public class ResidentServiceController { - @Autowired - public RestClientService restClientService; + private final RestClientService restClientService; - @Autowired - RequestValidator requestValidator; + private final RequestValidator requestValidator; - @Autowired - Environment env; + private final Environment env; + + public ResidentServiceController(RestClientService restClientService, RequestValidator requestValidator, Environment env) { + this.restClientService = restClientService; + this.requestValidator = requestValidator; + this.env = env; + } /** * Request a new OTP for OTP required API. diff --git a/src/main/java/io/mosip/mimoto/controller/UsersController.java b/src/main/java/io/mosip/mimoto/controller/UsersController.java index 193963208..4303738cc 100644 --- a/src/main/java/io/mosip/mimoto/controller/UsersController.java +++ b/src/main/java/io/mosip/mimoto/controller/UsersController.java @@ -21,7 +21,6 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpSession; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -35,11 +34,14 @@ @RequestMapping(value = "/users/me") @Tag(name = SwaggerLiteralConstants.USERS_NAME, description = SwaggerLiteralConstants.USERS_DESCRIPTION) public class UsersController { - @Autowired - private UserMetadataRepository userMetadataRepository; + private final UserMetadataRepository userMetadataRepository; - @Autowired - private EncryptionService encryptionService; + private final EncryptionService encryptionService; + + public UsersController(UserMetadataRepository userMetadataRepository, EncryptionService encryptionService) { + this.userMetadataRepository = userMetadataRepository; + this.encryptionService = encryptionService; + } /** * Retrieves user profile information, first checking the cache and then the database if needed diff --git a/src/main/java/io/mosip/mimoto/controller/VerifiersController.java b/src/main/java/io/mosip/mimoto/controller/VerifiersController.java index 1e213cda3..d49c29200 100644 --- a/src/main/java/io/mosip/mimoto/controller/VerifiersController.java +++ b/src/main/java/io/mosip/mimoto/controller/VerifiersController.java @@ -8,7 +8,6 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -26,8 +25,11 @@ @Tag(name = SwaggerLiteralConstants.VERIFIERS_NAME, description = SwaggerLiteralConstants.VERIFIERS_DESCRIPTION) public class VerifiersController { - @Autowired - VerifierService verifierService; + private final VerifierService verifierService; + + public VerifiersController(VerifierService verifierService) { + this.verifierService = verifierService; + } @Operation(summary = SwaggerLiteralConstants.VERIFIERS_GET_VERIFIERS_SUMMARY, description = SwaggerLiteralConstants.VERIFIERS_GET_VERIFIERS_DESCRIPTION) @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE) diff --git a/src/main/java/io/mosip/mimoto/controller/WalletPresentationsController.java b/src/main/java/io/mosip/mimoto/controller/WalletPresentationsController.java index c9e14c7e2..7aab075f3 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletPresentationsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletPresentationsController.java @@ -28,7 +28,6 @@ import jakarta.servlet.http.HttpSession; import jakarta.validation.Valid; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -45,11 +44,14 @@ @RequestMapping("/wallets/{walletId}/presentations") public class WalletPresentationsController { - @Autowired - private WalletPresentationService walletPresentationService; + private final WalletPresentationService walletPresentationService; - @Autowired - private SessionManager sessionManager; + private final SessionManager sessionManager; + + public WalletPresentationsController(WalletPresentationService walletPresentationService, SessionManager sessionManager) { + this.walletPresentationService = walletPresentationService; + this.sessionManager = sessionManager; + } /** * Processes the Verifiable Presentation Authorization Request for a specific wallet. diff --git a/src/main/java/io/mosip/mimoto/controller/WalletTrustedVerifiersController.java b/src/main/java/io/mosip/mimoto/controller/WalletTrustedVerifiersController.java index 665c66593..a06a2cdd8 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletTrustedVerifiersController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletTrustedVerifiersController.java @@ -15,7 +15,6 @@ import jakarta.servlet.http.HttpSession; import jakarta.validation.Valid; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; @@ -32,8 +31,11 @@ @RequestMapping("/wallets/{walletId}/trusted-verifiers") public class WalletTrustedVerifiersController { - @Autowired - TrustedVerifierService trustedVerifierService; + private final TrustedVerifierService trustedVerifierService; + + public WalletTrustedVerifiersController(TrustedVerifierService trustedVerifierService) { + this.trustedVerifierService = trustedVerifierService; + } /** * Adds a trusted verifier for the specified wallet. diff --git a/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java b/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java index 3965868dd..062536542 100644 --- a/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java +++ b/src/main/java/io/mosip/mimoto/service/CredentialPDFGeneratorService.java @@ -35,7 +35,6 @@ import org.apache.commons.collections.CollectionUtils; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -56,26 +55,29 @@ public class CredentialPDFGeneratorService { private record SelectedFace(String key, String face) {} - @Autowired - private ObjectMapper objectMapper; + private final ObjectMapper objectMapper; - @Autowired - private PresentationServiceImpl presentationService; + private final PresentationServiceImpl presentationService; - @Autowired - private Utilities utilities; + private final Utilities utilities; - @Autowired - private PixelPass pixelPass; + private final PixelPass pixelPass; - @Autowired - private CredentialFormatHandlerFactory credentialFormatHandlerFactory; + private final CredentialFormatHandlerFactory credentialFormatHandlerFactory; - @Autowired - private InjiVcRenderer injiVcRenderer; + private final InjiVcRenderer injiVcRenderer; - @Autowired - private SvgFixerUtil svgFixerUtil; + private final SvgFixerUtil svgFixerUtil; + + public CredentialPDFGeneratorService(ObjectMapper objectMapper, PresentationServiceImpl presentationService, Utilities utilities, PixelPass pixelPass, CredentialFormatHandlerFactory credentialFormatHandlerFactory, InjiVcRenderer injiVcRenderer, SvgFixerUtil svgFixerUtil) { + this.objectMapper = objectMapper; + this.presentationService = presentationService; + this.utilities = utilities; + this.pixelPass = pixelPass; + this.credentialFormatHandlerFactory = credentialFormatHandlerFactory; + this.injiVcRenderer = injiVcRenderer; + this.svgFixerUtil = svgFixerUtil; + } @Value("${mosip.inji.ovp.qrdata.pattern}") private String ovpQRDataPattern; diff --git a/src/main/java/io/mosip/mimoto/service/DataProtectionService.java b/src/main/java/io/mosip/mimoto/service/DataProtectionService.java index d7acf1b56..5ecd8e894 100644 --- a/src/main/java/io/mosip/mimoto/service/DataProtectionService.java +++ b/src/main/java/io/mosip/mimoto/service/DataProtectionService.java @@ -33,8 +33,8 @@ public class DataProtectionService { private static final String AES_ALGORITHM = "AES/GCM/NoPadding"; private static final int NONCE_LENGTH = 12; // Recommended nonce length for GCM + private static final SecureRandom SECURE_RANDOM = new SecureRandom(); private static final int TAG_LENGTH = 128; // Authentication tag length in bits (16 bytes) - public static final String USER_PII_KEY_REFERENCE_ID = "user_pii"; private final CryptomanagerService cryptomanagerService; @@ -121,8 +121,7 @@ public String encryptWithAES(SecretKey key, byte[] data) { try { // Generate a random nonce byte[] nonce = new byte[NONCE_LENGTH]; - SecureRandom secureRandom = new SecureRandom(); - secureRandom.nextBytes(nonce); + SECURE_RANDOM.nextBytes(nonce); GCMParameterSpec gcmSpec = new GCMParameterSpec(TAG_LENGTH, nonce); // Initialize cipher diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialMatchingServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialMatchingServiceImpl.java index 6d8f218c2..7521f1b8a 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialMatchingServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialMatchingServiceImpl.java @@ -22,7 +22,6 @@ import io.mosip.mimoto.service.WalletCredentialService; import io.mosip.openID4VP.authorizationRequest.presentationDefinition.*; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.io.IOException; @@ -36,21 +35,23 @@ public class CredentialMatchingServiceImpl implements CredentialMatchingService { private static final String JSON_PATH_PREFIX = "$."; - private static final String TYPE_PATH = "$.type"; private static final String LDP_VC_FORMAT = "ldp_vc"; private static final String PROOF_TYPE_KEY = "proof_type"; - @Autowired - private ObjectMapper objectMapper; + private final ObjectMapper objectMapper; - @Autowired - private IssuersService issuersService; + private final IssuersService issuersService; - @Autowired - private OpenID4VPService openID4VPService; + private final OpenID4VPService openID4VPService; - @Autowired - private WalletCredentialService walletCredentialService; + private final WalletCredentialService walletCredentialService; + + public CredentialMatchingServiceImpl(ObjectMapper objectMapper, IssuersService issuersService, OpenID4VPService openID4VPService, WalletCredentialService walletCredentialService) { + this.objectMapper = objectMapper; + this.issuersService = issuersService; + this.openID4VPService = openID4VPService; + this.walletCredentialService = walletCredentialService; + } @Override public MatchingCredentialsDTO getMatchingCredentials(VerifiablePresentationSessionData sessionData, String walletId, String base64Key) throws ApiNotAccessibleException, IOException { diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java index d0135c197..f621839ee 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java @@ -9,7 +9,6 @@ import io.mosip.mimoto.service.KeyPairRetrievalService; import io.mosip.mimoto.util.SigningKeyUtil; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -21,24 +20,25 @@ @Slf4j public class CredentialRequestServiceImpl implements CredentialRequestService { - @Value("${signing.algorithms.priority.order:ED25519,ES256K,ES256,RS256}") private String signingAlgorithmsPriorityOrder; private static final SigningAlgorithm FALLBACK_SIGNING_ALG = SigningAlgorithm.ED25519; + private final CredentialFormatHandlerFactory credentialFormatHandlerFactory; + + private final KeyPairRetrievalService keyPairService; + + public CredentialRequestServiceImpl(CredentialFormatHandlerFactory credentialFormatHandlerFactory, KeyPairRetrievalService keyPairService) { + this.credentialFormatHandlerFactory = credentialFormatHandlerFactory; + this.keyPairService = keyPairService; + } + public Set getSigningAlgorithmsPriorityOrder() { return Arrays.stream(signingAlgorithmsPriorityOrder.split(",")) .map(String::trim).collect(Collectors.toCollection(LinkedHashSet::new)); } - - @Autowired - private CredentialFormatHandlerFactory credentialFormatHandlerFactory; - - @Autowired - private KeyPairRetrievalService keyPairService; - @Override public VCCredentialRequest buildRequest(IssuerDTO issuerDTO, String credentialConfigurationId, diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java index ff1c16de6..984b20268 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialShareServiceImpl.java @@ -21,7 +21,6 @@ import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.env.Environment; import org.springframework.http.HttpHeaders; @@ -51,63 +50,63 @@ public class CredentialShareServiceImpl implements CredentialShareService { public static final String CARD_JSON_FILE_NAME = "%s_VCD.json"; /** The Constant FINGER. */ - public static final String FINGER = "Finger"; public static final String DATA_IMAGE_JPG_BASE_64 = "data:image/jpg;base64,"; public static final String DATA_BINARY_BASE_64 = "data:binary;base64,"; private Gson gson = new Gson(); - public String topic = "CREDENTIAL_STATUS_UPDATE"; + private final WebSubSubscriptionHelper webSubSubscriptionHelper; - @Autowired - public WebSubSubscriptionHelper webSubSubscriptionHelper; + private final DataShareUtil dataShareUtil; - @Autowired - public DataShareUtil dataShareUtil; + private final DerivedKeyCryptoUtil derivedKeyCryptoUtil; - @Autowired - DerivedKeyCryptoUtil derivedKeyCryptoUtil; + private final RestApiClient restApiClient; - @Autowired - public RestApiClient restApiClient; + private final P12KeyStoreManager p12KeyStoreManager; - @Autowired - public P12KeyStoreManager p12KeyStoreManager; - - @Autowired - CbeffToBiometricUtil util; + private final CbeffToBiometricUtil util; /** The Constant VALUE. */ public static final String VALUE = "value"; /** The Constant UIN_TEXT_FILE. */ - public static final String UIN_TEXT_FILE = "textFile"; + private static final String UIN_TEXT_FILE = "textFile"; @Value("${vercred.type.vid:PCN}") private String vid; /** The core audit request builder. */ - @Autowired - private AuditLogRequestBuilder auditLogRequestBuilder; + private final AuditLogRequestBuilder auditLogRequestBuilder; /** The utilities. */ - @Autowired - private Utilities utilities; + private final Utilities utilities; /** The rest client service. */ - @Autowired - private RestClientService restClientService; + private final RestClientService restClientService; /** The env. */ - @Autowired - private Environment env; + private final Environment env; - @Autowired - private PublisherClient pb; + private final PublisherClient pb; @Value("#{'${mosip.mandatory-languages:}'.concat('${mosip.optional-languages:}')}") private String supportedLang; + public CredentialShareServiceImpl(RestApiClient restApiClient, WebSubSubscriptionHelper webSubSubscriptionHelper, DataShareUtil dataShareUtil, DerivedKeyCryptoUtil derivedKeyCryptoUtil, P12KeyStoreManager p12KeyStoreManager, CbeffToBiometricUtil util, AuditLogRequestBuilder auditLogRequestBuilder, Utilities utilities, RestClientService restClientService, Environment env, PublisherClient pb) { + this.restApiClient = restApiClient; + this.webSubSubscriptionHelper = webSubSubscriptionHelper; + this.dataShareUtil = dataShareUtil; + this.derivedKeyCryptoUtil = derivedKeyCryptoUtil; + this.p12KeyStoreManager = p12KeyStoreManager; + this.util = util; + this.auditLogRequestBuilder = auditLogRequestBuilder; + this.utilities = utilities; + this.restClientService = restClientService; + this.env = env; + this.pb = pb; + } + public boolean generateDocuments(EventModel eventModel) throws Exception { Path eventFilePath = Path.of(utilities.getDataPath(), String.format(EVENT_JSON_FILE_NAME, eventModel.getEvent().getTransactionId())); diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialVerifierServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialVerifierServiceImpl.java index 274206f29..2280ccb0a 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialVerifierServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialVerifierServiceImpl.java @@ -8,7 +8,6 @@ import io.mosip.vercred.vcverifier.CredentialsVerifier; import io.mosip.vercred.vcverifier.constants.CredentialFormat; import io.mosip.vercred.vcverifier.data.VerificationResult; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Objects; @@ -16,11 +15,14 @@ @Service public class CredentialVerifierServiceImpl implements CredentialVerifierService { - @Autowired - private ObjectMapper objectMapper; + private final ObjectMapper objectMapper; - @Autowired - private CredentialsVerifier credentialsVerifier; + private final CredentialsVerifier credentialsVerifier; + + public CredentialVerifierServiceImpl(ObjectMapper objectMapper, CredentialsVerifier credentialsVerifier) { + this.objectMapper = objectMapper; + this.credentialsVerifier = credentialsVerifier; + } public boolean verify(VCCredentialResponse response) throws JsonProcessingException, VCVerificationException { String credentialString = response.getCredential() instanceof String ? (String) response.getCredential() : objectMapper.writeValueAsString(response.getCredential()); diff --git a/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java index ecd087390..9a15a438f 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java @@ -12,7 +12,6 @@ import jakarta.annotation.PostConstruct; import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.NotNull; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.ByteArrayResource; import org.springframework.http.HttpEntity; @@ -33,8 +32,7 @@ public class DataShareServiceImpl { private static final Pattern SAFE_URL_SEGMENT_PATTERN = Pattern.compile("^[A-Za-z0-9._\\-]+$"); - @Autowired - RestApiClient restApiClient; + private final RestApiClient restApiClient; @Value("${mosip.data.share.url}") String dataShareHostUrl; @@ -48,11 +46,15 @@ public class DataShareServiceImpl { @Value("${mosip.data.share.create.retry.count}") Integer maxRetryCount; - @Autowired - ObjectMapper objectMapper; + private final ObjectMapper objectMapper; PathMatcher pathMatcher ; + public DataShareServiceImpl(RestApiClient restApiClient, ObjectMapper objectMapper) { + this.restApiClient = restApiClient; + this.objectMapper = objectMapper; + } + @PostConstruct public void setUp(){ pathMatcher = new AntPathMatcher(); diff --git a/src/main/java/io/mosip/mimoto/service/impl/DcSdJwtCredentialFormatHandler.java b/src/main/java/io/mosip/mimoto/service/impl/DcSdJwtCredentialFormatHandler.java index 6628bd26a..373d339be 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/DcSdJwtCredentialFormatHandler.java +++ b/src/main/java/io/mosip/mimoto/service/impl/DcSdJwtCredentialFormatHandler.java @@ -1,6 +1,7 @@ package io.mosip.mimoto.service.impl; +import com.fasterxml.jackson.databind.ObjectMapper; import io.mosip.mimoto.constant.CredentialFormat; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -8,6 +9,10 @@ @Slf4j @Component("dc+sd-jwt") public class DcSdJwtCredentialFormatHandler extends VcSdJwtCredentialFormatHandler { + public DcSdJwtCredentialFormatHandler(ObjectMapper objectMapper) { + super(objectMapper); + } + @Override public String getSupportedFormat() { return CredentialFormat.DC_SD_JWT.getFormat(); diff --git a/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java index 4b32b0492..3e0d635db 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java @@ -8,7 +8,7 @@ import io.mosip.mimoto.service.IdpService; import io.mosip.mimoto.service.IssuersService; import io.mosip.mimoto.util.JoseUtil; -import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; @@ -41,14 +41,17 @@ public class IdpServiceImpl implements IdpService { @Value("${mosip.oidc.p12.path}") String keyStorePath; - @Autowired - JoseUtil joseUtil; + private final JoseUtil joseUtil; - @Autowired - RestTemplate restTemplate; + private final RestTemplate restTemplate; - @Autowired - IssuersService issuersService; + private final IssuersService issuersService; + + public IdpServiceImpl(JoseUtil joseUtil, @Qualifier("restTemplate") RestTemplate restTemplate, IssuersService issuersService) { + this.joseUtil = joseUtil; + this.restTemplate = restTemplate; + this.issuersService = issuersService; + } @Override public HttpEntity> constructGetTokenRequest(Map params, IssuerDTO issuerDTO, String authorizationAudience) throws IOException, IssuerOnboardingException { diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index 9b3e35ded..ae6503f49 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -13,7 +13,6 @@ import jakarta.validation.constraints.NotBlank; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -28,14 +27,17 @@ @Validated public class IssuersServiceImpl implements IssuersService { - @Autowired - private Utilities utilities; + private final Utilities utilities; - @Autowired - private ObjectMapper objectMapper; + private final ObjectMapper objectMapper; - @Autowired - private IssuerConfigUtil issuersConfigUtil; + private final IssuerConfigUtil issuersConfigUtil; + + public IssuersServiceImpl(Utilities utilities, ObjectMapper objectMapper, IssuerConfigUtil issuersConfigUtil) { + this.utilities = utilities; + this.objectMapper = objectMapper; + this.issuersConfigUtil = issuersConfigUtil; + } @Override @Cacheable(value = "issuersConfig", key = "#p0 ?: 'allIssuersConfig'") diff --git a/src/main/java/io/mosip/mimoto/service/impl/KeyPairRetrievalServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/KeyPairRetrievalServiceImpl.java index ffc004828..cd4e3188c 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/KeyPairRetrievalServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/KeyPairRetrievalServiceImpl.java @@ -9,7 +9,6 @@ import io.mosip.mimoto.service.KeyPairRetrievalService; import io.mosip.mimoto.util.SigningKeyUtil; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.crypto.SecretKey; @@ -24,11 +23,14 @@ @Service public class KeyPairRetrievalServiceImpl implements KeyPairRetrievalService { - @Autowired - private ProofSigningKeyRepository proofSigningKeyRepository; + private final ProofSigningKeyRepository proofSigningKeyRepository; - @Autowired - private DataProtectionService dataProtectionService; + private final DataProtectionService dataProtectionService; + + public KeyPairRetrievalServiceImpl(ProofSigningKeyRepository proofSigningKeyRepository, DataProtectionService dataProtectionService) { + this.proofSigningKeyRepository = proofSigningKeyRepository; + this.dataProtectionService = dataProtectionService; + } @Override public KeyPair getKeyPairFromDB(String walletId, String base64EncodedWalletKey, SigningAlgorithm signingAlgorithm) throws KeyGenerationException, DecryptionException { diff --git a/src/main/java/io/mosip/mimoto/service/impl/LdpVcCredentialFormatHandler.java b/src/main/java/io/mosip/mimoto/service/impl/LdpVcCredentialFormatHandler.java index 43efba9f2..7f885dfec 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/LdpVcCredentialFormatHandler.java +++ b/src/main/java/io/mosip/mimoto/service/impl/LdpVcCredentialFormatHandler.java @@ -7,7 +7,6 @@ import io.mosip.mimoto.util.LocaleUtils; import static io.mosip.mimoto.util.IssuerConfigUtil.camelToTitleCase; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.*; @@ -16,8 +15,11 @@ @Component("ldp_vc") public class LdpVcCredentialFormatHandler implements CredentialFormatHandler { - @Autowired - private ObjectMapper objectMapper; + private final ObjectMapper objectMapper; + + public LdpVcCredentialFormatHandler(ObjectMapper objectMapper) { + this.objectMapper = objectMapper; + } @Override public String getSupportedFormat() { diff --git a/src/main/java/io/mosip/mimoto/service/impl/OpenID4VPService.java b/src/main/java/io/mosip/mimoto/service/impl/OpenID4VPService.java index 499ca6f1f..f6a63721a 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/OpenID4VPService.java +++ b/src/main/java/io/mosip/mimoto/service/impl/OpenID4VPService.java @@ -14,7 +14,6 @@ import io.mosip.openID4VP.exceptions.OpenID4VPExceptions; import io.mosip.openID4VP.verifier.VerifierResponse; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.io.IOException; @@ -26,8 +25,11 @@ @Slf4j public class OpenID4VPService { - @Autowired - private VerifierService verifierService; + private final VerifierService verifierService; + + public OpenID4VPService(VerifierService verifierService) { + this.verifierService = verifierService; + } public OpenID4VP create(String presentationId) { WalletMetadata walletMetadata = new WalletMetadata(); diff --git a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java index af5924332..831a87516 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java @@ -13,7 +13,6 @@ import io.mosip.mimoto.service.PresentationService; import io.mosip.mimoto.util.RestApiClient; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.MediaType; import org.springframework.stereotype.Service; @@ -34,14 +33,11 @@ @Service public class PresentationServiceImpl implements PresentationService { - @Autowired - private DataShareServiceImpl dataShareService; + private final DataShareServiceImpl dataShareService; - @Autowired - private ObjectMapper objectMapper; + private final ObjectMapper objectMapper; - @Autowired - private RestApiClient restApiClient; + private final RestApiClient restApiClient; @Value("${mosip.inji.ovp.redirect.url.pattern}") private String injiOvpRedirectURLPattern; @@ -49,6 +45,12 @@ public class PresentationServiceImpl implements PresentationService { @Value("${server.tomcat.max-http-response-header-size:65536}") private Integer maximumResponseHeaderSize; + public PresentationServiceImpl(DataShareServiceImpl dataShareService, ObjectMapper objectMapper, RestApiClient restApiClient) { + this.dataShareService = dataShareService; + this.objectMapper = objectMapper; + this.restApiClient = restApiClient; + } + @Override public String authorizePresentation(PresentationRequestDTO presentationRequestDTO) throws IOException { diff --git a/src/main/java/io/mosip/mimoto/service/impl/RestClientServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/RestClientServiceImpl.java index 64712373c..5d533e634 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/RestClientServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/RestClientServiceImpl.java @@ -7,7 +7,6 @@ import io.mosip.mimoto.service.RestClientService; import io.mosip.mimoto.util.RestApiClient; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.http.MediaType; import org.springframework.stereotype.Service; @@ -28,12 +27,15 @@ public class RestClientServiceImpl implements RestClientService { /** The rest api client. */ - @Autowired - private RestApiClient restApiClient; + private final RestApiClient restApiClient; /** The env. */ - @Autowired - private Environment env; + private final Environment env; + + public RestClientServiceImpl(RestApiClient restApiClient, Environment env) { + this.restApiClient = restApiClient; + this.env = env; + } /* * (non-Javadoc) diff --git a/src/main/java/io/mosip/mimoto/service/impl/SessionManager.java b/src/main/java/io/mosip/mimoto/service/impl/SessionManager.java index ceb1d6f64..1ac52bee2 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/SessionManager.java +++ b/src/main/java/io/mosip/mimoto/service/impl/SessionManager.java @@ -8,7 +8,6 @@ import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpSession; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.HashMap; @@ -19,8 +18,11 @@ @Slf4j public class SessionManager { - @Autowired - private ObjectMapper objectMapper; + private final ObjectMapper objectMapper; + + public SessionManager(ObjectMapper objectMapper) { + this.objectMapper = objectMapper; + } public void setupSession(HttpServletRequest request, String provider, UserMetadataDTO userMetadata, String userId) { HttpSession session = request.getSession(true); diff --git a/src/main/java/io/mosip/mimoto/service/impl/TrustedVerifierServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/TrustedVerifierServiceImpl.java index ec801521f..6a5322bb5 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/TrustedVerifierServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/TrustedVerifierServiceImpl.java @@ -6,7 +6,6 @@ import io.mosip.mimoto.model.TrustedVerifier; import io.mosip.mimoto.repository.VerifierRepository; import io.mosip.mimoto.service.TrustedVerifierService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.UUID; @@ -16,8 +15,11 @@ @Service public class TrustedVerifierServiceImpl implements TrustedVerifierService { - @Autowired - private VerifierRepository verifierRepository; + private final VerifierRepository verifierRepository; + + public TrustedVerifierServiceImpl(VerifierRepository verifierRepository) { + this.verifierRepository = verifierRepository; + } @Override public TrustedVerifierResponseDTO addTrustedVerifier(String walletId, TrustedVerifierRequest trustedVerifierRequest) { diff --git a/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java b/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java index 72d720883..167eed41d 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java +++ b/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java @@ -9,10 +9,8 @@ import io.mosip.mimoto.service.CredentialFormatHandler; import io.mosip.mimoto.util.LocaleUtils; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import java.nio.charset.StandardCharsets; import java.util.*; import java.util.stream.Collectors; @@ -23,8 +21,11 @@ @Component("vc+sd-jwt") public class VcSdJwtCredentialFormatHandler implements CredentialFormatHandler { - @Autowired - private ObjectMapper objectMapper; + private final ObjectMapper objectMapper; + + public VcSdJwtCredentialFormatHandler(ObjectMapper objectMapper) { + this.objectMapper = objectMapper; + } @Override public String getSupportedFormat() { diff --git a/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java index 28da00d6b..78eeab0c5 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java @@ -15,7 +15,6 @@ import io.mosip.openID4VP.authorizationRequest.Verifier; import lombok.extern.slf4j.Slf4j; import org.apache.commons.validator.routines.UrlValidator; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.AntPathMatcher; import org.springframework.util.PathMatcher; @@ -32,14 +31,11 @@ @Service public class VerifierServiceImpl implements VerifierService { - @Autowired - Utilities utilities; + private final Utilities utilities; - @Autowired - ObjectMapper objectMapper; + private final ObjectMapper objectMapper; - @Autowired - private VerifierRepository verifierRepository; + private final VerifierRepository verifierRepository; private static final PathMatcher pathMatcher; private static final UrlValidator urlValidator; @@ -49,6 +45,12 @@ public class VerifierServiceImpl implements VerifierService { urlValidator = new UrlValidator(ALLOW_ALL_SCHEMES+ALLOW_LOCAL_URLS); } + public VerifierServiceImpl(Utilities utilities, ObjectMapper objectMapper, VerifierRepository verifierRepository) { + this.utilities = utilities; + this.objectMapper = objectMapper; + this.verifierRepository = verifierRepository; + } + @Cacheable(value = "preRegisteredTrustedVerifiersCache", key = "'preRegisteredTrustedVerifiers'") public VerifiersDTO getTrustedVerifiers() throws ApiNotAccessibleException, JsonProcessingException { String trustedVerifiersJsonValue = utilities.getTrustedVerifiersJsonValue(); diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletPresentationServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletPresentationServiceImpl.java index 3dd00ff66..246158643 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletPresentationServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletPresentationServiceImpl.java @@ -38,7 +38,6 @@ import io.mosip.openID4VP.constants.FormatType; import io.mosip.openID4VP.verifier.VerifierResponse; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -67,26 +66,29 @@ public class WalletPresentationServiceImpl implements WalletPresentationService private static final String EMPTY_JSON = "{}"; private static final String DEFAULT_SIGNING_ALGORITHM_NAME = "ED25519"; - @Autowired - private VerifierService verifierService; + private final VerifierService verifierService; - @Autowired - private OpenID4VPService openID4VPService; + private final OpenID4VPService openID4VPService; - @Autowired - private ObjectMapper objectMapper; + private final ObjectMapper objectMapper; - @Autowired - private KeyPairRetrievalService keyPairService; + private final KeyPairRetrievalService keyPairService; - @Autowired - private CredentialMatchingService credentialMatchingService; + private final CredentialMatchingService credentialMatchingService; - @Autowired - private VerifiablePresentationsRepository verifiablePresentationsRepository; + private final VerifiablePresentationsRepository verifiablePresentationsRepository; - @Autowired - private DataProtectionService dataProtectionService; + private final DataProtectionService dataProtectionService; + + public WalletPresentationServiceImpl(VerifierService verifierService, OpenID4VPService openID4VPService, ObjectMapper objectMapper, KeyPairRetrievalService keyPairService, CredentialMatchingService credentialMatchingService, VerifiablePresentationsRepository verifiablePresentationsRepository, DataProtectionService dataProtectionService) { + this.verifierService = verifierService; + this.openID4VPService = openID4VPService; + this.objectMapper = objectMapper; + this.keyPairService = keyPairService; + this.credentialMatchingService = credentialMatchingService; + this.verifiablePresentationsRepository = verifiablePresentationsRepository; + this.dataProtectionService = dataProtectionService; + } @Override public VPResponseDTO handleVPAuthorizationRequest(String urlEncodedVPAuthorizationRequest, String walletId) throws ApiNotAccessibleException, IOException, URISyntaxException { diff --git a/src/main/resources/templates/credential-template.html b/src/main/resources/templates/credential-template.html index 4f544b986..53701081c 100644 --- a/src/main/resources/templates/credential-template.html +++ b/src/main/resources/templates/credential-template.html @@ -41,7 +41,7 @@ $nestedEntry.key #if($nestedEntry.value.startsWith("data:image/")) - Embedded Image #else
@@ -58,7 +58,7 @@ $entry.key
#if($entry.value.startsWith("data:image/")) - Embedded Image #else diff --git a/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java b/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java index 233d90153..65b609189 100644 --- a/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java @@ -8,7 +8,6 @@ import io.mosip.mimoto.exception.IdpException; import io.mosip.mimoto.service.RestClientService; import io.mosip.mimoto.service.impl.IdpServiceImpl; -import io.mosip.mimoto.service.impl.IssuersServiceImpl; import io.mosip.mimoto.util.*; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.message.BasicNameValuePair; diff --git a/src/test/java/io/mosip/mimoto/controller/WalletPresentationsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletPresentationsControllerTest.java index 103bd62bd..0e0d2a35f 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletPresentationsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletPresentationsControllerTest.java @@ -49,9 +49,6 @@ public class WalletPresentationsControllerTest { @Autowired private MockMvc mockMvc; - @MockBean - private ObjectMapper objectMapper; - @MockBean private WalletPresentationService walletPresentationService; diff --git a/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java index 90914666d..7bacfa770 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java @@ -18,7 +18,6 @@ import io.mosip.mimoto.service.impl.LdpVcCredentialFormatHandler; import io.mosip.mimoto.service.impl.PresentationServiceImpl; import io.mosip.mimoto.service.impl.VcSdJwtCredentialFormatHandler; -import io.mosip.mimoto.util.LocaleUtils; import io.mosip.mimoto.util.SvgFixerUtil; import io.mosip.mimoto.util.Utilities; import io.mosip.pixelpass.PixelPass; @@ -901,7 +900,7 @@ void testFormatValueWithPrimitive() throws Exception { @Test void testFormatValueWithMap_AtValue() throws Exception { - CredentialPDFGeneratorService service = new CredentialPDFGeneratorService(); + CredentialPDFGeneratorService service = new CredentialPDFGeneratorService(objectMapper, presentationService, utilities, pixelPass, credentialFormatHandlerFactory, injiVcRenderer, svgFixerUtil ); Method formatValueMethod = CredentialPDFGeneratorService.class.getDeclaredMethod("formatValue", Object.class, String.class); formatValueMethod.setAccessible(true); @@ -915,7 +914,7 @@ void testFormatValueWithMap_AtValue() throws Exception { @Test void testFormatValueWithMap_Value() throws Exception { - CredentialPDFGeneratorService service = new CredentialPDFGeneratorService(); + CredentialPDFGeneratorService service = new CredentialPDFGeneratorService(objectMapper, presentationService, utilities, pixelPass, credentialFormatHandlerFactory, injiVcRenderer, svgFixerUtil ); Method formatValueMethod = CredentialPDFGeneratorService.class.getDeclaredMethod("formatValue", Object.class, String.class); formatValueMethod.setAccessible(true); @@ -929,7 +928,7 @@ void testFormatValueWithMap_Value() throws Exception { @Test void testFormatValueWithListOfMaps_AtLanguageAndAtValue() throws Exception { - CredentialPDFGeneratorService service = new CredentialPDFGeneratorService(); + CredentialPDFGeneratorService service = new CredentialPDFGeneratorService(objectMapper, presentationService, utilities, pixelPass, credentialFormatHandlerFactory, injiVcRenderer, svgFixerUtil ); Method formatValueMethod = CredentialPDFGeneratorService.class.getDeclaredMethod("formatValue", Object.class, String.class); formatValueMethod.setAccessible(true); @@ -962,7 +961,7 @@ void testFormatValueWithListOfMaps_AtLanguageAndAtValue() throws Exception { @Test void testFormatValueWithListOfMaps_LanguageAndValue() throws Exception { - CredentialPDFGeneratorService service = new CredentialPDFGeneratorService(); + CredentialPDFGeneratorService service = new CredentialPDFGeneratorService(objectMapper, presentationService, utilities, pixelPass, credentialFormatHandlerFactory, injiVcRenderer, svgFixerUtil ); Method formatValueMethod = CredentialPDFGeneratorService.class.getDeclaredMethod("formatValue", Object.class, String.class); formatValueMethod.setAccessible(true); @@ -995,7 +994,7 @@ void testFormatValueWithListOfMaps_LanguageAndValue() throws Exception { @Test void testFormatValueWithListOfMaps_langAndValue() throws Exception { - CredentialPDFGeneratorService service = new CredentialPDFGeneratorService(); + CredentialPDFGeneratorService service = new CredentialPDFGeneratorService(objectMapper, presentationService, utilities, pixelPass, credentialFormatHandlerFactory, injiVcRenderer, svgFixerUtil ); Method formatValueMethod = CredentialPDFGeneratorService.class.getDeclaredMethod("formatValue", Object.class, String.class); formatValueMethod.setAccessible(true); diff --git a/src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java index 4d88256f5..1cfea8b78 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.service; +import com.fasterxml.jackson.databind.ObjectMapper; import io.mosip.mimoto.constant.SigningAlgorithm; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.mimoto.*; @@ -32,6 +33,9 @@ @SpringBootTest(classes = {CredentialRequestServiceImpl.class}) @TestPropertySource(locations = "classpath:application-test.properties") public class CredentialRequestServiceTest { + @MockBean + private ObjectMapper objectMapper; + @Autowired private CredentialRequestServiceImpl credentialRequestServiceImpl; @@ -53,7 +57,7 @@ public class CredentialRequestServiceTest { public void setUp() { issuerId = "issuer1"; issuerDTO = getIssuerConfigDTO(issuerId); - when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(new LdpVcCredentialFormatHandler()); + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(new LdpVcCredentialFormatHandler(objectMapper)); } @After diff --git a/src/test/java/io/mosip/mimoto/service/CredentialShareServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialShareServiceTest.java index 3e93f2037..591d1c75a 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialShareServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialShareServiceTest.java @@ -16,10 +16,10 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentMatchers; -import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.http.HttpHeaders; import java.net.URI; import java.security.InvalidKeyException; @@ -33,8 +33,7 @@ @RunWith(MockitoJUnitRunner.class) public class CredentialShareServiceTest { - @InjectMocks - private CredentialShareService service = new CredentialShareServiceImpl(); + private CredentialShareService service; @Mock public RestApiClient restApiClient; @@ -51,11 +50,26 @@ public class CredentialShareServiceTest { @Mock private Utilities utilities; - private EventModel eventModel = null; + @Mock + private WebSubSubscriptionHelper webSubSubscriptionHelper; + + @Mock + private DataShareUtil dataShareUtil; + + @Mock + private RestClientService restClientService; + + @Mock + private org.springframework.core.env.Environment env; + + @Mock + private io.mosip.kernel.core.websub.spi.PublisherClient pb; @Mock private CbeffToBiometricUtil util; + private EventModel eventModel = null; + @Before public void setup() throws Exception { Map proofMap = new HashMap<>(); @@ -99,6 +113,10 @@ public void setup() throws Exception { Mockito.when(util.getBIRTypeList(Mockito.anyString())).thenReturn(birs); Mockito.when(util.getPhotoByTypeAndSubType(Mockito.any(), Mockito.any(), Mockito.any())).thenReturn("face image strring".getBytes()); + service = new CredentialShareServiceImpl(restApiClient, webSubSubscriptionHelper, dataShareUtil, + derivedKeyCryptoUtil, p12KeyStoreManager, util, auditLogRequestBuilder, utilities, + restClientService, env, pb); + } @Test diff --git a/src/test/java/io/mosip/mimoto/service/DataShareServiceTest.java b/src/test/java/io/mosip/mimoto/service/DataShareServiceTest.java index d825e6093..571290f9d 100644 --- a/src/test/java/io/mosip/mimoto/service/DataShareServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/DataShareServiceTest.java @@ -47,6 +47,7 @@ public void setUp() { ReflectionTestUtils.setField(dataShareService, "dataShareGetUrlPattern", "http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/*"); ReflectionTestUtils.setField(dataShareService, "maxRetryCount", 1); presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); + ReflectionTestUtils.setField(dataShareService, "pathMatcher", pathMatcher); Mockito.when(pathMatcher.match("http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/*", "http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/test")).thenReturn(true); } diff --git a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java index dd0b2489c..e7203d453 100644 --- a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java @@ -3,8 +3,6 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import io.mosip.mimoto.constant.CredentialFormat; -import io.mosip.mimoto.dto.ErrorDTO; -import io.mosip.mimoto.dto.VPResponseDTO; import io.mosip.mimoto.dto.mimoto.VCCredentialProperties; import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; import io.mosip.mimoto.dto.mimoto.VCCredentialResponseProof; @@ -15,18 +13,13 @@ import io.mosip.mimoto.dto.openid.presentation.PresentationDefinitionDTO; import io.mosip.mimoto.dto.openid.presentation.PresentationRequestDTO; import io.mosip.mimoto.exception.ErrorConstants; -import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; -import io.mosip.mimoto.exception.VPErrorNotSentException; import io.mosip.mimoto.exception.VPNotCreatedException; import io.mosip.mimoto.service.impl.DataShareServiceImpl; -import io.mosip.mimoto.service.impl.OpenID4VPService; import io.mosip.mimoto.service.impl.PresentationServiceImpl; import io.mosip.mimoto.util.JwtUtils; import io.mosip.mimoto.util.RestApiClient; import io.mosip.mimoto.util.TestUtilities; -import io.mosip.openID4VP.OpenID4VP; import io.mosip.openID4VP.authorizationRequest.Verifier; -import io.mosip.openID4VP.verifier.VerifierResponse; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -35,13 +28,11 @@ import org.mockito.MockedStatic; import org.mockito.junit.MockitoJUnitRunner; import org.springframework.test.util.ReflectionTestUtils; -import io.mosip.mimoto.dto.SubmitPresentationResponseDTO; import java.io.IOException; import java.time.Instant; import java.util.*; -import static io.mosip.mimoto.exception.ErrorConstants.REJECTED_VERIFIER; import static io.mosip.mimoto.util.JwtUtils.parseJwtHeader; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; @@ -49,21 +40,15 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.*; -import static io.mosip.mimoto.util.TestUtilities.*; @RunWith(MockitoJUnitRunner.class) public class PresentationServiceTest { - @Mock - VerifierService verifierService; @Mock DataShareServiceImpl dataShareService; @Mock ObjectMapper objectMapper; - @Mock - private OpenID4VPService openID4VPService; - @Mock RestApiClient restApiClient; diff --git a/src/test/java/io/mosip/mimoto/service/RestClientServiceTest.java b/src/test/java/io/mosip/mimoto/service/RestClientServiceTest.java index 27f208f73..7db422d81 100644 --- a/src/test/java/io/mosip/mimoto/service/RestClientServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/RestClientServiceTest.java @@ -16,7 +16,6 @@ import io.mosip.mimoto.service.impl.RestClientServiceImpl; import io.mosip.mimoto.util.RestApiClient; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentMatchers; @@ -35,7 +34,7 @@ public class RestClientServiceTest { private static final String API_NAME = "AUDIT"; @InjectMocks - RestClientService registrationProcessorRestClientService = new RestClientServiceImpl(); + private RestClientServiceImpl registrationProcessorRestClientService; /** The rest api client. */ @Mock private RestApiClient restApiClient; diff --git a/src/test/java/io/mosip/mimoto/service/SessionManagerTest.java b/src/test/java/io/mosip/mimoto/service/SessionManagerTest.java index b10a71fea..fbb982dbb 100644 --- a/src/test/java/io/mosip/mimoto/service/SessionManagerTest.java +++ b/src/test/java/io/mosip/mimoto/service/SessionManagerTest.java @@ -16,7 +16,6 @@ import org.mockito.MockitoAnnotations; import org.mockito.junit.MockitoJUnitRunner; import org.springframework.mock.web.MockHttpSession; -import org.springframework.test.util.ReflectionTestUtils; import java.time.Instant; import java.util.*; @@ -35,8 +34,7 @@ public class SessionManagerTest { @Before public void setUp() { MockitoAnnotations.openMocks(this); - sessionManager = new SessionManager(); - ReflectionTestUtils.setField(sessionManager, "objectMapper", objectMapper); + sessionManager = new SessionManager(objectMapper); userMetadataDTO = new UserMetadataDTO("Test user", "https://test.com/pic.jpg", "test@example.com", "wallet123"); } diff --git a/src/test/java/io/mosip/mimoto/service/TrustedVerifierServiceTest.java b/src/test/java/io/mosip/mimoto/service/TrustedVerifierServiceTest.java index 2d8faaca4..46f157d70 100644 --- a/src/test/java/io/mosip/mimoto/service/TrustedVerifierServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/TrustedVerifierServiceTest.java @@ -11,11 +11,8 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; -import org.mockito.MockedStatic; import org.mockito.junit.jupiter.MockitoExtension; -import java.util.UUID; - import static io.mosip.mimoto.exception.ErrorConstants.DUPLICATE_VERIFIER; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.any; From 7570b8b458bab8f6e4775c063aca0493e4220924 Mon Sep 17 00:00:00 2001 From: cyber-titan Date: Mon, 23 Mar 2026 17:00:10 +0530 Subject: [PATCH 832/860] injiweb-1871-mimoto-coverage added coverage for above 80% (#1054) * injiweb-1871-mimoto-coverage added coverage for above 80% Signed-off-by: cyber-titan * injiweb-1871-mimoto-coverage fixed code rabbit comments Signed-off-by: cyber-titan * injiweb-1871-mimoto-coverage fixed code rabbit comments Signed-off-by: cyber-titan * injiweb-1871-mimoto-coverage fixed credentialShare & pdfGen tests Signed-off-by: cyber-titan * injiweb-1871-mimoto-coverage changed context to list type Signed-off-by: cyber-titan * injiweb-1871-mimoto-coverage rebased changes Signed-off-by: cyber-titan --------- Signed-off-by: cyber-titan --- .../CredentialPDFGeneratorServiceTest.java | 552 ++++++++++++++-- .../service/CredentialShareServiceTest.java | 621 +++++++++++++++++- .../service/DataProtectionServiceTest.java | 282 ++++++++ .../service/GoogleTokenServiceTest.java | 154 +++++ .../mimoto/service/WalletLockServiceTest.java | 132 ++++ 5 files changed, 1685 insertions(+), 56 deletions(-) diff --git a/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java index 7bacfa770..314816a47 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialPDFGeneratorServiceTest.java @@ -665,59 +665,50 @@ void testNoFaceKeysAvailable() throws Exception { @Test void testMaskingForSelectivelyDisclosableClaimsAndNonMaskedFieldsInSDJWT() throws Exception { + ReflectionTestUtils.setField(credentialPDFGeneratorService, "maskDisclosures", true); + when(credentialFormatHandlerFactory.getHandler("vc+sd-jwt")).thenReturn(sdJwtCredentialFormatHandler); - vcCredentialResponse.setFormat("vc+sd-jwt"); - String mockSDJWTString = "eyJ0eXAiOiJ2YytzZC1qd3QiLCJhbGciOiJFUzI1NiJ9.eyJfc2QiOlsiaGFzaDEiLCJoYXNoMiJdfQ.signature~disclosure1~disclosure2"; - vcCredentialResponse.setCredential(mockSDJWTString); + issuerDTO.setQr_code_type(QRCodeType.None); - try (MockedStatic mockedSDJWT = mockStatic(SDJWT.class)) { - SDJWT mockSDJWT = mock(SDJWT.class); + String validSdJwt = "eyJ0eXAiOiJ2YytzZC1qd3QiLCJhbGciOiJFUzI1NiJ9.eyJfc2QiOlsiYWJjMTIzIl19.signature~WyJzYWx0IiwgIm5hbWUiLCAiSm9obiBEb2UiXQ~"; - mockedSDJWT.when(() -> SDJWT.parse(mockSDJWTString)).thenReturn(mockSDJWT); + VCCredentialResponse sdJwtVcResponse = VCCredentialResponse.builder() + .format("vc+sd-jwt") + .credential(validSdJwt) + .build(); - // Only name and age are selectively disclosable (will be masked) - Disclosure nameDisclosure = mock(Disclosure.class); - when(nameDisclosure.getClaimName()).thenReturn("name"); + Map extractedClaims = new HashMap<>(); + extractedClaims.put("name", "John Doe"); + when(sdJwtCredentialFormatHandler.extractCredentialClaims(sdJwtVcResponse)).thenReturn(extractedClaims); - Disclosure ageDisclosure = mock(Disclosure.class); - when(ageDisclosure.getClaimName()).thenReturn("age"); + CredentialIssuerDisplayResponse displayResponse = createDisplayResponse("Name", "en"); + LinkedHashMap> displayProps = new LinkedHashMap<>(); + displayProps.put("name", Map.of(displayResponse, "John Doe")); + when(sdJwtCredentialFormatHandler.loadDisplayPropertiesFromWellknown(any(), any(), anyString())) + .thenReturn(displayProps); - when(mockSDJWT.getDisclosures()).thenReturn(List.of(nameDisclosure, ageDisclosure)); + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())) + .thenReturn(""); - Map claims = new HashMap<>(); - claims.put("name", "John Doe"); // Will be masked - claims.put("age", "30"); // Will be masked - claims.put("email", "john@example.com"); // Not masked (not in disclosures) - claims.put("country", "USA"); // Not masked (not in disclosures) + try (MockedStatic mockedSDJWT = mockStatic(SDJWT.class); + MockedStatic mockedUtilities = mockStatic(Utilities.class)) { - when(sdJwtCredentialFormatHandler.extractCredentialClaims(vcCredentialResponse)) - .thenReturn(claims); + Disclosure nameDisclosure = mock(Disclosure.class); + when(nameDisclosure.getClaimName()).thenReturn("name"); - // Use LinkedHashMap instead of HashMap - LinkedHashMap> displayProps = new LinkedHashMap<>(); - displayProps.put("name", Map.of(createDisplayResponse("Full Name", "en"), "John Doe")); - displayProps.put("age", Map.of(createDisplayResponse("Age", "en"), "30")); - displayProps.put("email", Map.of(createDisplayResponse("Email", "en"), "john@example.com")); - displayProps.put("country", Map.of(createDisplayResponse("Country", "en"), "USA")); + SDJWT mockSdJwt = mock(SDJWT.class); + when(mockSdJwt.getDisclosures()).thenReturn(List.of(nameDisclosure)); + mockedSDJWT.when(() -> SDJWT.parse(validSdJwt)).thenReturn(mockSdJwt); - when(sdJwtCredentialFormatHandler.loadDisplayPropertiesFromWellknown(any(), any(), anyString())) - .thenReturn(displayProps); - - when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())) - .thenReturn("Test Template"); - when(presentationService.constructPresentationDefinition(any())) - .thenReturn(new PresentationDefinitionDTO()); - when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + mockedUtilities.when(() -> Utilities.maskValue("John Doe")).thenReturn("****"); + mockedUtilities.when(() -> Utilities.encodeToString(any(), anyString())).thenReturn("encoded-image"); ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( - "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, - "https://example.com/share", "", "en"); + "credentialConfigId", sdJwtVcResponse, issuerDTO, + credentialsSupportedResponse, "http://datashare.url", "2025-12-31", "en"); assertNotNull(result); - mockedSDJWT.verify(() -> SDJWT.parse(mockSDJWTString)); - // This test verifies that: - // - Fields with disclosures (name, age) are masked with maskedClaims - // - Fields without disclosures (email, country) are shown normally + mockedUtilities.verify(() -> Utilities.maskValue("John Doe")); } } @@ -1918,4 +1909,487 @@ void testTitleNameNullWhenDisplayListNullOrEmptyFromGetPdfResource() throws Exce assertNotNull(dataEmpty); assertNull(dataEmpty.get("titleName")); } + + @SuppressWarnings("unchecked") + private Map invokePdfResourceFromVcProperties( + LinkedHashMap> displayProperties, + CredentialsSupportedResponse credentialsSupportedResponse, + VCCredentialResponse vcCredentialResponse, + IssuerDTO issuerDTO, + String dataShareUrl, + String credentialValidity, + String locale) throws Exception { + Method method = CredentialPDFGeneratorService.class.getDeclaredMethod( + "getPdfResourceFromVcProperties", + LinkedHashMap.class, + CredentialsSupportedResponse.class, + VCCredentialResponse.class, + IssuerDTO.class, + String.class, + String.class, + String.class); + method.setAccessible(true); + return (Map) method.invoke( + credentialPDFGeneratorService, + displayProperties, credentialsSupportedResponse, + vcCredentialResponse, issuerDTO, + dataShareUrl, credentialValidity, locale); + } + + @Test + void testIsFaceKeyFalseWhenSelectedFaceKeyNotNullButKeyDoesNotMatch() throws Exception { + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); + issuerDTO.setQr_code_type(QRCodeType.None); + + Map subjectData = new HashMap<>(); + subjectData.put("name", "John Doe"); + subjectData.put("dateOfBirth", "1990-01-01"); + subjectData.put("face", "base64-encoded-image"); + ((VCCredentialProperties) vcCredentialResponse.getCredential()).setCredentialSubject(subjectData); + + when(credentialFormatHandler.extractCredentialClaims(vcCredentialResponse)).thenReturn(subjectData); + + LinkedHashMap> displayProps = new LinkedHashMap<>(); + displayProps.put("name", Map.of(createDisplayResponse("Full Name", "en"), "John Doe")); + displayProps.put("dateOfBirth", Map.of(createDisplayResponse("Date of Birth", "en"), "1990-01-01")); + + Map data = invokePdfResourceFromVcProperties( + displayProps, credentialsSupportedResponse, vcCredentialResponse, + issuerDTO, "https://example.com/share", "2025-12-31", "en"); + + @SuppressWarnings("unchecked") + Map rowProperties = (Map) data.get("rowProperties"); + + assertTrue(rowProperties.containsKey("name"), + "Expected 'name' in rowProperties because isFaceKey=false for 'name'"); + assertTrue(rowProperties.containsKey("dateOfBirth"), + "Expected 'dateOfBirth' in rowProperties because isFaceKey=false for 'dateOfBirth'"); + assertFalse(rowProperties.containsKey("face"), + "Expected 'face' absent from rowProperties (not in displayProperties)"); + } + + @Test + void testIsFaceKeyTrueWhenSelectedFaceKeyMatchesCurrentKey() throws Exception { + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); + issuerDTO.setQr_code_type(QRCodeType.None); + + Map subjectData = new HashMap<>(); + subjectData.put("name", "John Doe"); + subjectData.put("face", "base64-encoded-image"); + ((VCCredentialProperties) vcCredentialResponse.getCredential()).setCredentialSubject(subjectData); + + when(credentialFormatHandler.extractCredentialClaims(vcCredentialResponse)).thenReturn(subjectData); + + LinkedHashMap> displayProps = new LinkedHashMap<>(); + displayProps.put("name", Map.of(createDisplayResponse("Full Name", "en"), "John Doe")); + displayProps.put("face", Map.of(createDisplayResponse("Face Image", "en"), "base64-encoded-image")); + + Map data = invokePdfResourceFromVcProperties( + displayProps, credentialsSupportedResponse, vcCredentialResponse, + issuerDTO, "https://example.com/share", "2025-12-31", "en"); + + @SuppressWarnings("unchecked") + Map rowProperties = (Map) data.get("rowProperties"); + + + assertFalse(rowProperties.containsKey("face"), + "Expected 'face' excluded from rowProperties because isFaceKey=true"); + + assertTrue(rowProperties.containsKey("name"), + "Expected 'name' in rowProperties because isFaceKey=false for 'name'"); + + assertEquals("base64-encoded-image", data.get("face"), + "Expected the face value to be stored in data['face']"); + } + + @Test + void testIsFaceKeyFalseWhenSelectedFaceKeyIsNull() throws Exception { + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); + issuerDTO.setQr_code_type(QRCodeType.None); + + Map subjectData = new HashMap<>(); + subjectData.put("name", "John Doe"); + subjectData.put("dateOfBirth", "1990-01-01"); + ((VCCredentialProperties) vcCredentialResponse.getCredential()).setCredentialSubject(subjectData); + + when(credentialFormatHandler.extractCredentialClaims(vcCredentialResponse)).thenReturn(subjectData); + + LinkedHashMap> displayProps = new LinkedHashMap<>(); + displayProps.put("name", Map.of(createDisplayResponse("Full Name", "en"), "John Doe")); + displayProps.put("dateOfBirth", Map.of(createDisplayResponse("Date of Birth", "en"), "1990-01-01")); + + Map data = invokePdfResourceFromVcProperties( + displayProps, credentialsSupportedResponse, vcCredentialResponse, + issuerDTO, "https://example.com/share", "2025-12-31", "en"); + + @SuppressWarnings("unchecked") + Map rowProperties = (Map) data.get("rowProperties"); + + // selectedFaceKey = null → isFaceKey = false for ALL keys → all must appear in rowProperties + assertTrue(rowProperties.containsKey("name"), + "Expected 'name' in rowProperties because selectedFaceKey=null → isFaceKey=false"); + assertTrue(rowProperties.containsKey("dateOfBirth"), + "Expected 'dateOfBirth' in rowProperties because selectedFaceKey=null → isFaceKey=false"); + // face value in data must be null (no face key found) + assertNull(data.get("face"), + "Expected data['face'] to be null when no face key exists in credential"); + } + + @Test + void testMaskingDisabledForSelectivelyDisclosableClaims() throws Exception { + ReflectionTestUtils.setField(credentialPDFGeneratorService, "maskDisclosures", false); + try { + when(credentialFormatHandlerFactory.getHandler("vc+sd-jwt")).thenReturn(sdJwtCredentialFormatHandler); + issuerDTO.setQr_code_type(QRCodeType.OnlineSharing); + + String validSdJwt = "eyJ0eXAiOiJ2YytzZC1qd3QiLCJhbGciOiJFUzI1NiJ9.eyJfc2QiOlsiYWJjMTIzIl19.signature~WyJzYWx0IiwgIm5hbWUiLCAiSm9obiBEb2UiXQ~"; + + VCCredentialResponse sdJwtVcResponse = VCCredentialResponse.builder() + .format("vc+sd-jwt") + .credential(validSdJwt) + .build(); + + Map extractedClaims = new HashMap<>(); + extractedClaims.put("name", "John Doe"); + when(sdJwtCredentialFormatHandler.extractCredentialClaims(sdJwtVcResponse)).thenReturn(extractedClaims); + + CredentialIssuerDisplayResponse displayResponse = createDisplayResponse("Name", "en"); + LinkedHashMap> displayProps = new LinkedHashMap<>(); + displayProps.put("name", Map.of(displayResponse, "John Doe")); + when(sdJwtCredentialFormatHandler.loadDisplayPropertiesFromWellknown(any(), any(), anyString())) + .thenReturn(displayProps); + + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())) + .thenReturn("$rowProperties"); + when(presentationService.constructPresentationDefinition(any())).thenReturn(new PresentationDefinitionDTO()); + when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + + try (MockedStatic mockedSDJWT = mockStatic(SDJWT.class); + MockedStatic mockedUtilities = mockStatic(Utilities.class)) { + SDJWT mockSdjwt = mock(SDJWT.class); + Disclosure mockDisclosure = mock(Disclosure.class); + when(mockDisclosure.getClaimName()).thenReturn("name"); + when(mockSdjwt.getDisclosures()).thenReturn(List.of(mockDisclosure)); + mockedSDJWT.when(() -> SDJWT.parse(anyString())).thenReturn(mockSdjwt); + mockedUtilities.when(() -> Utilities.encodeToString(any(), anyString())).thenReturn("encoded-image"); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( + "TestCredential", sdJwtVcResponse, issuerDTO, credentialsSupportedResponse, + "https://example.com/share", "2025-12-31", "en"); + + assertNotNull(result); + mockedUtilities.verify(() -> Utilities.maskValue(anyString()), never()); + } + } finally { + ReflectionTestUtils.setField(credentialPDFGeneratorService, "maskDisclosures", true); + } + } + + @Test + void testDisplayNameNullExcludesFromRowProperties() throws Exception { + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); + issuerDTO.setQr_code_type(QRCodeType.None); + + Map extractedClaims = new HashMap<>(); + extractedClaims.put("name", "John Doe"); + extractedClaims.put("hiddenField", "some-value"); + when(credentialFormatHandler.extractCredentialClaims(vcCredentialResponse)).thenReturn(extractedClaims); + + CredentialIssuerDisplayResponse nullNameDisplay = createDisplayResponse(null, "en"); + CredentialIssuerDisplayResponse nameDisplay = createDisplayResponse("Full Name", "en"); + + LinkedHashMap> displayProps = new LinkedHashMap<>(); + displayProps.put("name", Map.of(nameDisplay, "John Doe")); + displayProps.put("hiddenField", Map.of(nullNameDisplay, "some-value")); // displayName is null + + when(credentialFormatHandler.loadDisplayPropertiesFromWellknown(any(), any(), anyString())) + .thenReturn(displayProps); + + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())) + .thenReturn("$rowProperties"); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( + "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, + "https://example.com/share", "2025-12-31", "en"); + + assertNotNull(result); + } + + @Test + void testExtractFaceReturnsNullFaceWhenFaceValueIsNull() throws Exception { + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); + issuerDTO.setQr_code_type(QRCodeType.None); + + Map subjectData = new HashMap<>(); + subjectData.put("name", "John Doe"); + subjectData.put("face", null); + + when(credentialFormatHandler.extractCredentialClaims(vcCredentialResponse)).thenReturn(subjectData); + + LinkedHashMap> displayProps = new LinkedHashMap<>(); + displayProps.put("name", Map.of(createDisplayResponse("Full Name", "en"), "John Doe")); + when(credentialFormatHandler.loadDisplayPropertiesFromWellknown(any(), any(), anyString())) + .thenReturn(displayProps); + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())) + .thenReturn("$rowProperties"); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( + "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, + "", "2025-12-31", "en"); + + assertNotNull(result); + } + + @Test + void testExtractFaceReturnsNullFaceWhenFaceValueIsEmptyString() throws Exception { + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); + issuerDTO.setQr_code_type(QRCodeType.None); + + Map subjectData = new HashMap<>(); + subjectData.put("name", "John Doe"); + subjectData.put("face", ""); + + when(credentialFormatHandler.extractCredentialClaims(vcCredentialResponse)).thenReturn(subjectData); + + LinkedHashMap> displayProps = new LinkedHashMap<>(); + displayProps.put("name", Map.of(createDisplayResponse("Full Name", "en"), "John Doe")); + displayProps.put("face", Map.of(createDisplayResponse("Face", "en"), "")); + when(credentialFormatHandler.loadDisplayPropertiesFromWellknown(any(), any(), anyString())) + .thenReturn(displayProps); + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())) + .thenReturn("$rowProperties"); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( + "TestCredential", vcCredentialResponse, issuerDTO, credentialsSupportedResponse, + "", "2025-12-31", "en"); + + assertNotNull(result); + } + + @Test + void testFormatValueWithListOfNonStringNonMap() throws Exception { + CredentialPDFGeneratorService service = new CredentialPDFGeneratorService( + objectMapper, + presentationService, + utilities, + pixelPass, + credentialFormatHandlerFactory, + injiVcRenderer, + svgFixerUtil + ); + Method formatValueMethod = CredentialPDFGeneratorService.class.getDeclaredMethod("formatValue", Object.class, String.class); + formatValueMethod.setAccessible(true); + + List intList = Arrays.asList(1, 2, 3); + + String result = (String) formatValueMethod.invoke(service, intList, "en"); + + assertEquals("[1, 2, 3]", result); + } + + @Test + void testFormatValueWithListOfMapsWithNoLangKey() throws Exception { + CredentialPDFGeneratorService service = new CredentialPDFGeneratorService( + objectMapper, + presentationService, + utilities, + pixelPass, + credentialFormatHandlerFactory, + injiVcRenderer, + svgFixerUtil + ); + Method formatValueMethod = CredentialPDFGeneratorService.class.getDeclaredMethod("formatValue", Object.class, String.class); + formatValueMethod.setAccessible(true); + + Map mapNoLang = new HashMap<>(); + mapNoLang.put("someOtherKey", "someValue"); + mapNoLang.put(LdpVcV1Constants.VALUE, "No Lang Value"); + + List> value = List.of(mapNoLang); + + String result = (String) formatValueMethod.invoke(service, value, "en"); + + assertEquals("", result); + } + + @Test + void testFormatValueWithListOfMapsWithNullValueKey() throws Exception { + CredentialPDFGeneratorService service = new CredentialPDFGeneratorService( + objectMapper, + presentationService, + utilities, + pixelPass, + credentialFormatHandlerFactory, + injiVcRenderer, + svgFixerUtil + ); + Method formatValueMethod = CredentialPDFGeneratorService.class.getDeclaredMethod("formatValue", Object.class, String.class); + formatValueMethod.setAccessible(true); + + Map mapNoValue = new HashMap<>(); + mapNoValue.put(LdpVcV1Constants.LANGUAGE, "en"); + + List> value = List.of(mapNoValue); + + String result = (String) formatValueMethod.invoke(service, value, "en"); + + assertEquals("", result); + } + + @Test + void testFormatValueWithNullVal() throws Exception { + CredentialPDFGeneratorService service = new CredentialPDFGeneratorService( + objectMapper, + presentationService, + utilities, + pixelPass, + credentialFormatHandlerFactory, + injiVcRenderer, + svgFixerUtil + ); + Method formatValueMethod = CredentialPDFGeneratorService.class.getDeclaredMethod("formatValue", Object.class, String.class); + formatValueMethod.setAccessible(true); + + String result = (String) formatValueMethod.invoke(service, null, "en"); + + assertEquals("", result); + } + + @Test + void testInjiVcRendererNotInvokedWhenRenderMethodListContainsNonMapEntry() throws Exception { + Map credentialMap = new HashMap<>(); + credentialMap.put(CONTEXT, List.of(V2_CONTEXT_URL)); + credentialMap.put(RENDER_METHOD, List.of("not-a-map-entry")); + + VCCredentialResponse vcCredentialResponse = VCCredentialResponse.builder() + .format("ldp_vc") + .credential(credentialMap) + .build(); + + issuerDTO.setQr_code_type(QRCodeType.OnlineSharing); + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); + + Map claims = new HashMap<>(); + claims.put("name", "John Doe"); + when(credentialFormatHandler.extractCredentialClaims(vcCredentialResponse)).thenReturn(claims); + + LinkedHashMap> displayProps = new LinkedHashMap<>(); + displayProps.put("name", Map.of(createDisplayResponse("Name", "en"), "John Doe")); + when(credentialFormatHandler.loadDisplayPropertiesFromWellknown(any(), any(), anyString())).thenReturn(displayProps); + + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())).thenReturn(""); + when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + when(presentationService.constructPresentationDefinition(any())).thenReturn(new PresentationDefinitionDTO()); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( + "credentialConfigId", vcCredentialResponse, issuerDTO, + credentialsSupportedResponse, "http://datashare.url", "2025-12-31", "en"); + + assertNotNull(result); + verify(injiVcRenderer, never()).generateCredentialDisplayContent(any(), any(), anyString(), any()); + } + + @Test + void testInjiVcRendererNotInvokedWhenRenderMethodListHasTemplateButWrongRenderSuite() throws Exception { + Map credentialMap = new HashMap<>(); + credentialMap.put(CONTEXT, List.of(V2_CONTEXT_URL)); + credentialMap.put(RENDER_METHOD, List.of( + Map.of(TEMPLATE, "", RENDER_SUITE, "SomeOtherRenderSuite") + )); + + VCCredentialResponse vcCredentialResponse = VCCredentialResponse.builder() + .format("ldp_vc") + .credential(credentialMap) + .build(); + + issuerDTO.setQr_code_type(QRCodeType.OnlineSharing); + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); + + Map claims = new HashMap<>(); + claims.put("name", "John Doe"); + when(credentialFormatHandler.extractCredentialClaims(vcCredentialResponse)).thenReturn(claims); + + LinkedHashMap> displayProps = new LinkedHashMap<>(); + displayProps.put("name", Map.of(createDisplayResponse("Name", "en"), "John Doe")); + when(credentialFormatHandler.loadDisplayPropertiesFromWellknown(any(), any(), anyString())).thenReturn(displayProps); + + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())).thenReturn(""); + when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + when(presentationService.constructPresentationDefinition(any())).thenReturn(new PresentationDefinitionDTO()); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( + "credentialConfigId", vcCredentialResponse, issuerDTO, + credentialsSupportedResponse, "http://datashare.url", "2025-12-31", "en"); + + assertNotNull(result); + verify(injiVcRenderer, never()).generateCredentialDisplayContent(any(), any(), anyString(), any()); + } + + @Test + void testInjiVcRendererNotInvokedWhenRenderMethodIsMapWithoutTemplate() throws Exception { + Map credentialMap = new HashMap<>(); + credentialMap.put(CONTEXT, List.of(V2_CONTEXT_URL)); + credentialMap.put(RENDER_METHOD, Map.of(RENDER_SUITE, SVG_MUSTACHE_RENDER_SUITE)); + + VCCredentialResponse localVcResponse = VCCredentialResponse.builder() + .format("ldp_vc") + .credential(credentialMap) + .build(); + + issuerDTO.setQr_code_type(QRCodeType.OnlineSharing); + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); + + Map claims = new HashMap<>(); + claims.put("name", "John Doe"); + when(credentialFormatHandler.extractCredentialClaims(localVcResponse)).thenReturn(claims); + + LinkedHashMap> displayProps = new LinkedHashMap<>(); + displayProps.put("name", Map.of(createDisplayResponse("Name", "en"), "John Doe")); + when(credentialFormatHandler.loadDisplayPropertiesFromWellknown(any(), any(), anyString())).thenReturn(displayProps); + + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())).thenReturn(""); + when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + when(presentationService.constructPresentationDefinition(any())).thenReturn(new PresentationDefinitionDTO()); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( + "credentialConfigId", localVcResponse, issuerDTO, + credentialsSupportedResponse, "http://datashare.url", "2025-12-31", "en"); + + assertNotNull(result); + verify(injiVcRenderer, never()).generateCredentialDisplayContent(any(), any(), anyString(), any()); + } + + @Test + void testInjiVcRendererNotInvokedWhenRenderMethodIsMapWithTemplateButWrongRenderSuite() throws Exception { + Map credentialMap = new HashMap<>(); + credentialMap.put(CONTEXT, List.of(V2_CONTEXT_URL)); + credentialMap.put(RENDER_METHOD, Map.of(TEMPLATE, "", RENDER_SUITE, "SomeOtherRenderSuite")); + + VCCredentialResponse localVcResponse = VCCredentialResponse.builder() + .format("ldp_vc") + .credential(credentialMap) + .build(); + + issuerDTO.setQr_code_type(QRCodeType.OnlineSharing); + when(credentialFormatHandlerFactory.getHandler("ldp_vc")).thenReturn(credentialFormatHandler); + + Map claims = new HashMap<>(); + claims.put("name", "John Doe"); + when(credentialFormatHandler.extractCredentialClaims(localVcResponse)).thenReturn(claims); + + LinkedHashMap> displayProps = new LinkedHashMap<>(); + displayProps.put("name", Map.of(createDisplayResponse("Name", "en"), "John Doe")); + when(credentialFormatHandler.loadDisplayPropertiesFromWellknown(any(), any(), anyString())).thenReturn(displayProps); + + when(utilities.getCredentialSupportedTemplateString(anyString(), anyString())).thenReturn(""); + when(objectMapper.writeValueAsString(any())).thenReturn("{}"); + when(presentationService.constructPresentationDefinition(any())).thenReturn(new PresentationDefinitionDTO()); + + ByteArrayInputStream result = credentialPDFGeneratorService.generatePdfForVerifiableCredential( + "credentialConfigId", localVcResponse, issuerDTO, + credentialsSupportedResponse, "http://datashare.url", "2025-12-31", "en"); + + assertNotNull(result); + verify(injiVcRenderer, never()).generateCredentialDisplayContent(any(), any(), anyString(), any()); + } } diff --git a/src/test/java/io/mosip/mimoto/service/CredentialShareServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialShareServiceTest.java index 591d1c75a..5ea2a6334 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialShareServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialShareServiceTest.java @@ -5,8 +5,9 @@ import io.mosip.kernel.biometrics.entities.BDBInfo; import io.mosip.kernel.biometrics.entities.BIR; import io.mosip.mimoto.core.http.ResponseWrapper; -import io.mosip.mimoto.dto.AuditResponseDto; import io.mosip.mimoto.dto.CryptoWithPinResponseDto; +import io.mosip.mimoto.exception.DocumentGeneratorException; +import io.mosip.mimoto.exception.IdentityNotFoundException; import io.mosip.mimoto.model.Event; import io.mosip.mimoto.model.EventModel; import io.mosip.mimoto.service.impl.CredentialShareServiceImpl; @@ -16,24 +17,30 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentMatchers; +import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; +import org.mockito.Spy; import org.mockito.junit.MockitoJUnitRunner; import org.springframework.http.HttpHeaders; +import org.springframework.test.util.ReflectionTestUtils; +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; import java.net.URI; import java.security.InvalidKeyException; import java.util.HashMap; import java.util.List; import java.util.Map; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.*; @RunWith(MockitoJUnitRunner.class) public class CredentialShareServiceTest { - private CredentialShareService service; + @Spy + @InjectMocks + private CredentialShareServiceImpl service; @Mock public RestApiClient restApiClient; @@ -80,10 +87,12 @@ public void setup() throws Exception { data.put("protectionKey", "12345"); data.put("credentialType", "VERCRED"); data.put("proof", proofMap); + Event event = new Event(); event.setDataShareUri("https://www.datashare.com"); - event.setData(data); event.setTransactionId("transactionid"); + event.setData(data); + eventModel = new EventModel(); eventModel.setEvent(event); @@ -94,16 +103,15 @@ public void setup() throws Exception { Mockito.when(utilities.getDataPath()).thenReturn("target"); Mockito.when(restApiClient.getApi(Mockito.any(URI.class), Mockito.any(Class.class))).thenReturn("credential"); Mockito.when(p12KeyStoreManager.decrypt(Mockito.anyString())).thenReturn("{\"credentialSubject\":{\"biometrics\":\"biometrics\"},\"protectedAttributes\":[\"biometrics\"]}"); + Map templateMap = new HashMap<>(); templateMap.put("biometrics", "biometrics"); JSONObject templateJSON = new JSONObject(templateMap); - Mockito.when(utilities.getTemplate()).thenReturn(templateJSON); Mockito.when(auditLogRequestBuilder.createAuditRequestBuilder( Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), - Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.any())).thenReturn(new ResponseWrapper()); - + Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.any())).thenReturn(new ResponseWrapper<>()); BIR bir = new BIR(); BDBInfo bdbInfo = new BDBInfo(); @@ -113,10 +121,6 @@ public void setup() throws Exception { Mockito.when(util.getBIRTypeList(Mockito.anyString())).thenReturn(birs); Mockito.when(util.getPhotoByTypeAndSubType(Mockito.any(), Mockito.any(), Mockito.any())).thenReturn("face image strring".getBytes()); - service = new CredentialShareServiceImpl(restApiClient, webSubSubscriptionHelper, dataShareUtil, - derivedKeyCryptoUtil, p12KeyStoreManager, util, auditLogRequestBuilder, utilities, - restClientService, env, pb); - } @Test @@ -138,15 +142,598 @@ public void documentExceptionTest() throws Exception { } - /*@Test(expected = DocumentGeneratorException.class) - public void documentFailedExceptionTest() throws Exception { + @Test + public void generateDocumentsWithNullDataShareUriTest() throws Exception { + eventModel.getEvent().setDataShareUri(null); + boolean result = service.generateDocuments(eventModel); + assertTrue(result); + Mockito.verify(restApiClient, Mockito.never()).getApi(Mockito.any(URI.class), Mockito.any(Class.class)); + } + + @Test + public void generateDocumentsWithEmptyDataShareUriTest() throws Exception { + eventModel.getEvent().setDataShareUri(""); + boolean result = service.generateDocuments(eventModel); + assertTrue(result); + Mockito.verify(restApiClient, Mockito.never()).getApi(Mockito.any(URI.class), Mockito.any(Class.class)); + } + + @Test + public void generateDocumentsWithUINTest() throws Exception { + Mockito.when(p12KeyStoreManager.decrypt(Mockito.anyString())) + .thenReturn("{\"credentialSubject\":{\"UIN\":\"1234567890\",\"biometrics\":\"biometrics\"},\"protectedAttributes\":[\"biometrics\"]}"); + boolean result = service.generateDocuments(eventModel); + assertTrue(result); + } + + @Test + public void generateDocumentsWithVIDTest() throws Exception { + Mockito.when(p12KeyStoreManager.decrypt(Mockito.anyString())) + .thenReturn("{\"credentialSubject\":{\"PCN\":\"9876543210\",\"biometrics\":\"biometrics\"},\"protectedAttributes\":[\"biometrics\"]}"); + boolean result = service.generateDocuments(eventModel); + assertTrue(result); + } + + @Test + public void generateDocumentsWithExceptionInGetDocumentsTest() throws Exception { + Mockito.reset(p12KeyStoreManager); + Mockito.when(p12KeyStoreManager.decrypt(Mockito.anyString())) + .thenThrow(new RuntimeException("Decryption failed")); + boolean result = service.generateDocuments(eventModel); + assertFalse(result); + } - Mockito.when(cryptoUtil.decryptWithPin(ArgumentMatchers.any())).thenThrow(new Exception("exception")); + @Test + public void generateDocumentsWithNullCredentialJSONTest() throws Exception { + Mockito.when(p12KeyStoreManager.decrypt(Mockito.anyString())) + .thenReturn("{\"credentialSubject\":null,\"protectedAttributes\":[]}"); + boolean result = service.generateDocuments(eventModel); + assertFalse(result); + } + @Test + public void generateDocumentsWithArrayListFieldTest() throws Exception { + String credentialWithArrayList = "{\"credentialSubject\":{" + + "\"biometrics\":\"biometrics\"," + + "\"name\":[{\"language\":\"eng\",\"value\":\"John Doe\"},{\"language\":\"ara\",\"value\":\"جون دو\"}]" + + "},\"protectedAttributes\":[\"biometrics\"]}"; + Mockito.when(p12KeyStoreManager.decrypt(Mockito.anyString())).thenReturn(credentialWithArrayList); + Map templateMap = new HashMap<>(); + templateMap.put("demographics", "name"); + templateMap.put("biometrics", "biometrics"); + JSONObject templateJSON = new JSONObject(templateMap); + Mockito.when(utilities.getTemplate()).thenReturn(templateJSON); boolean result = service.generateDocuments(eventModel); + assertTrue(result); + } - // assertFalse(result); + @Test + public void generateDocumentsWithMultiLanguageFieldsFilteredBySupportedLang() throws Exception { + ReflectionTestUtils.setField(service, "supportedLang", "eng,ara"); + + java.util.LinkedHashMap engEntry = new java.util.LinkedHashMap<>(); + engEntry.put("language", "eng"); + engEntry.put("value", "John Smith"); + java.util.LinkedHashMap araEntry = new java.util.LinkedHashMap<>(); + araEntry.put("language", "ara"); + araEntry.put("value", "جون سميث"); + java.util.LinkedHashMap fraEntry = new java.util.LinkedHashMap<>(); + fraEntry.put("language", "fra"); + fraEntry.put("value", "Jean Smith"); + + org.json.simple.JSONArray node = new org.json.simple.JSONArray(); + node.add(engEntry); + node.add(araEntry); + node.add(fraEntry); + + io.mosip.mimoto.dto.JsonValue[] jsonValues = + invokeMapJsonNodeToJavaObject(io.mosip.mimoto.dto.JsonValue.class, node); + + org.json.JSONObject outputJSON = new org.json.JSONObject(); + String supportedLang = "eng,ara"; + for (io.mosip.mimoto.dto.JsonValue jsonValue : jsonValues) { + String lang = (String) ReflectionTestUtils.getField(jsonValue, "language"); + if (lang != null && supportedLang.contains(lang)) { + outputJSON.put("fullName_" + lang, jsonValue); + } + } + + assertTrue("Expected fullName_eng in output", outputJSON.has("fullName_eng")); + assertTrue("Expected fullName_ara in output", outputJSON.has("fullName_ara")); + assertFalse("Expected fullName_fra absent from output (fra not in supportedLang)", + outputJSON.has("fullName_fra")); + } - }*/ + @Test + public void generateDocumentsWithNullProtectedAttributesInDecryptAttribute() throws Exception { + String credentialWithNullProtectedAttrs = "{\"credentialSubject\":{" + + "\"biometrics\":\"biometrics\"," + + "\"fullName\":\"Test User\"" + + "},\"protectedAttributes\":null}"; + Mockito.when(p12KeyStoreManager.decrypt(Mockito.anyString())).thenReturn(credentialWithNullProtectedAttrs); + Map templateMap = new HashMap<>(); + templateMap.put("demographics", "fullName"); + templateMap.put("biometrics", "biometrics"); + JSONObject templateJSON = new JSONObject(templateMap); + Mockito.when(utilities.getTemplate()).thenReturn(templateJSON); + boolean result = service.generateDocuments(eventModel); + assertTrue(result); + } + @Test + public void generateDocumentsWithEmptyProtectedAttributesInDecryptAttribute() throws Exception { + String credentialWithEmptyProtectedAttrs = "{\"credentialSubject\":{" + + "\"biometrics\":\"biometrics\"," + + "\"fullName\":\"Test User\"" + + "},\"protectedAttributes\":[]}"; + Mockito.when(p12KeyStoreManager.decrypt(Mockito.anyString())).thenReturn(credentialWithEmptyProtectedAttrs); + Map templateMap = new HashMap<>(); + templateMap.put("demographics", "fullName"); + templateMap.put("biometrics", "biometrics"); + JSONObject templateJSON = new JSONObject(templateMap); + Mockito.when(utilities.getTemplate()).thenReturn(templateJSON); + boolean result = service.generateDocuments(eventModel); + assertTrue(result); + } + + @Test + public void generateDocumentsWithLinkedHashMapFieldTest() throws Exception { + String credentialWithLinkedHashMap = "{\"credentialSubject\":{" + + "\"biometrics\":\"biometrics\"," + + "\"dateOfBirth\":{\"value\":\"1990/01/01\"}" + + "},\"protectedAttributes\":[\"biometrics\"]}"; + Mockito.when(p12KeyStoreManager.decrypt(Mockito.anyString())).thenReturn(credentialWithLinkedHashMap); + Map templateMap = new HashMap<>(); + templateMap.put("demographics", "dateOfBirth"); + templateMap.put("biometrics", "biometrics"); + JSONObject templateJSON = new JSONObject(templateMap); + Mockito.when(utilities.getTemplate()).thenReturn(templateJSON); + boolean result = service.generateDocuments(eventModel); + assertTrue(result); + } + + @Test + public void generateDocumentsWithBiometricsKeyTest() throws Exception { + String credentialWithBiometrics = "{\"credentialSubject\":{" + + "\"biometrics\":\"encodedBiometricData\"," + + "\"fullName\":\"Test User\"" + + "},\"protectedAttributes\":[\"biometrics\"]}"; + Mockito.when(p12KeyStoreManager.decrypt(Mockito.anyString())).thenReturn(credentialWithBiometrics); + Map templateMap = new HashMap<>(); + templateMap.put("biometrics", "biometrics"); + templateMap.put("demographics", "fullName"); + JSONObject templateJSON = new JSONObject(templateMap); + Mockito.when(utilities.getTemplate()).thenReturn(templateJSON); + boolean result = service.generateDocuments(eventModel); + assertTrue(result); + } + + @Test + public void generateDocumentsWithMultipleTemplateFieldsTest() throws Exception { + String credentialWithMultipleFields = "{\"credentialSubject\":{" + + "\"biometrics\":\"biometricData\"," + + "\"fullName\":\"Jane Smith\"," + + "\"address\":[{\"language\":\"eng\",\"value\":\"123 Main St\"},{\"language\":\"ara\",\"value\":\"123 الشارع الرئيسي\"}]," + + "\"gender\":{\"value\":\"Female\"}" + + "},\"protectedAttributes\":[\"biometrics\"]}"; + Mockito.when(p12KeyStoreManager.decrypt(Mockito.anyString())).thenReturn(credentialWithMultipleFields); + Map templateMap = new HashMap<>(); + templateMap.put("biometrics", "biometrics"); + templateMap.put("demographics", "fullName,address,gender"); + JSONObject templateJSON = new JSONObject(templateMap); + Mockito.when(utilities.getTemplate()).thenReturn(templateJSON); + boolean result = service.generateDocuments(eventModel); + assertTrue(result); + } + + @Test + public void generateDocumentsWithNullIndividualBiometricTest() throws Exception { + String credentialWithNullBiometrics = "{\"credentialSubject\":{" + + "\"biometrics\":null," + + "\"fullName\":\"Test User\"" + + "},\"protectedAttributes\":[]}"; + Mockito.when(p12KeyStoreManager.decrypt(Mockito.anyString())).thenReturn(credentialWithNullBiometrics); + Map templateMap = new HashMap<>(); + templateMap.put("biometrics", "biometrics"); + templateMap.put("demographics", "fullName"); + JSONObject templateJSON = new JSONObject(templateMap); + Mockito.when(utilities.getTemplate()).thenReturn(templateJSON); + boolean result = service.generateDocuments(eventModel); + assertTrue(result); + } + + @Test + public void generateDocumentsWithEmptyBIRTypeListTest() throws Exception { + Mockito.when(util.getBIRTypeList(Mockito.anyString())).thenReturn(Lists.newArrayList()); + boolean result = service.generateDocuments(eventModel); + assertTrue(result); + } + + @Test + public void generateDocumentsWithNullPhotoBytesTest() throws Exception { + Mockito.when(util.getPhotoByTypeAndSubType(Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(null); + boolean result = service.generateDocuments(eventModel); + assertTrue(result); + } + + @Test + public void generateDocumentsWithEmptySubTypeTest() throws Exception { + BIR bir = new BIR(); + BDBInfo bdbInfo = new BDBInfo(); + bdbInfo.setType(Lists.newArrayList(BiometricType.FINGER)); + bdbInfo.setSubtype(Lists.newArrayList()); + bir.setBdbInfo(bdbInfo); + List birs = Lists.newArrayList(bir); + Mockito.when(util.getBIRTypeList(Mockito.anyString())).thenReturn(birs); + Mockito.when(util.getPhotoByTypeAndSubType(Mockito.any(), Mockito.any(), Mockito.any())) + .thenReturn("finger image with empty subtype".getBytes()); + boolean result = service.generateDocuments(eventModel); + assertTrue(result); + } + + @Test + public void generateDocumentsWithNonEmptySubTypeTest() throws Exception { + BIR bir = new BIR(); + BDBInfo bdbInfo = new BDBInfo(); + bdbInfo.setType(Lists.newArrayList(BiometricType.FINGER)); + bdbInfo.setSubtype(Lists.newArrayList("Left", "Thumb")); + bir.setBdbInfo(bdbInfo); + List birs = Lists.newArrayList(bir); + Mockito.when(util.getBIRTypeList(Mockito.anyString())).thenReturn(birs); + Mockito.when(util.getPhotoByTypeAndSubType(Mockito.any(), Mockito.any(), Mockito.any())).thenReturn("finger image with subtype".getBytes()); + boolean result = service.generateDocuments(eventModel); + assertTrue(result); + } + + @Test + public void generateDocumentsWithMultipleBiometricTypesTest() throws Exception { + BIR faceBir = new BIR(); + BDBInfo faceBdbInfo = new BDBInfo(); + faceBdbInfo.setType(Lists.newArrayList(BiometricType.FACE)); + faceBdbInfo.setSubtype(Lists.newArrayList()); + faceBir.setBdbInfo(faceBdbInfo); + + BIR fingerBir = new BIR(); + BDBInfo fingerBdbInfo = new BDBInfo(); + fingerBdbInfo.setType(Lists.newArrayList(BiometricType.FINGER)); + fingerBdbInfo.setSubtype(Lists.newArrayList("Left", "IndexFinger")); + fingerBir.setBdbInfo(fingerBdbInfo); + + BIR irisBir = new BIR(); + BDBInfo irisBdbInfo = new BDBInfo(); + irisBdbInfo.setType(Lists.newArrayList(BiometricType.IRIS)); + irisBdbInfo.setSubtype(Lists.newArrayList("Right")); + irisBir.setBdbInfo(irisBdbInfo); + + List birs = Lists.newArrayList(faceBir, fingerBir, irisBir); + + Mockito.when(util.getBIRTypeList(Mockito.anyString())).thenReturn(birs); + Mockito.lenient().when(util.getPhotoByTypeAndSubType(Mockito.any(), Mockito.eq("face"), Mockito.any())) + .thenReturn("face image data".getBytes()); + Mockito.lenient().when(util.getPhotoByTypeAndSubType(Mockito.any(), Mockito.eq("finger"), Mockito.any())) + .thenReturn("finger image data".getBytes()); + Mockito.lenient().when(util.getPhotoByTypeAndSubType(Mockito.any(), Mockito.eq("iris"), Mockito.any())) + .thenReturn("iris image data".getBytes()); + + boolean result = service.generateDocuments(eventModel); + assertTrue(result); + } + + @Test + public void generateDocumentsWithBiometricProcessingExceptionTest() throws Exception { + Mockito.when(util.getBIRTypeList(Mockito.anyString())).thenThrow(new RuntimeException("Biometric processing error")); + boolean result = service.generateDocuments(eventModel); + assertTrue(result); + } + + @Test + public void testGetDocumentsWithVidOnly() throws Exception { + ReflectionTestUtils.setField(service, "vid", "PCN"); + + org.json.JSONObject credentialJson = new org.json.JSONObject(); + credentialJson.put("biometrics", "dummyBiometric"); + credentialJson.put("PCN", "9876543210"); + + Mockito.doReturn(new org.json.JSONObject()).when(service).getBiometricsDataJSON(Mockito.anyString()); + + Map result = service.getDocuments(credentialJson, "VERCRED", "req-123", "dummySign"); + + assertNotNull(result); + String uinTextFile = (String) ReflectionTestUtils.getField(CredentialShareServiceImpl.class, "UIN_TEXT_FILE"); + assertTrue(result.containsKey(uinTextFile)); + } + + @Test(expected = DocumentGeneratorException.class) + public void testGetDocumentsThrowsDocumentGeneratorExceptionAndSetsFailureAudit() throws Exception { + org.json.JSONObject credentialJson = new org.json.JSONObject(); + credentialJson.put("UIN", "1234567890"); + credentialJson.put("biometrics", "dummyBiometric"); + + Mockito.doThrow(new RuntimeException("forced failure")) + .when(service).createJSONFile(Mockito.any(org.json.JSONObject.class), Mockito.anyString()); + + service.getDocuments(credentialJson, "VERCRED", "req-456", "dummySign"); + } + + @Test(expected = IdentityNotFoundException.class) + public void testCreateJSONFileWithNullCredential() throws Exception { + service.createJSONFile(null, "biometricData"); + } + + @Test + public void testCreateJSONFileWithArrayListField() throws Exception { + ReflectionTestUtils.setField(service, "supportedLang", "eng,ara"); + + java.util.LinkedHashMap engMap = new java.util.LinkedHashMap<>(); + engMap.put("language", "eng"); + engMap.put("value", "John"); + java.util.LinkedHashMap fraMap = new java.util.LinkedHashMap<>(); + fraMap.put("language", "fra"); + fraMap.put("value", "Jean"); + org.json.simple.JSONArray node = new org.json.simple.JSONArray(); + node.add(engMap); + node.add(fraMap); + + io.mosip.mimoto.dto.JsonValue[] jsonValues = + invokeMapJsonNodeToJavaObject(io.mosip.mimoto.dto.JsonValue.class, node); + + assertNotNull(jsonValues); + assertEquals(2, jsonValues.length); + + org.json.JSONObject outputJSON = new org.json.JSONObject(); + String supportedLang = "eng,ara"; + for (io.mosip.mimoto.dto.JsonValue jsonValue : jsonValues) { + String lang = (String) ReflectionTestUtils.getField(jsonValue, "language"); + if (lang != null && supportedLang.contains(lang)) { + outputJSON.put("fullName_" + lang, jsonValue); + } + } + + assertTrue("Expected fullName_eng in output", outputJSON.has("fullName_eng")); + assertFalse("Expected fullName_fra absent (not in supportedLang)", outputJSON.has("fullName_fra")); + } + + @Test + public void testCreateJSONFileWithLinkedHashMapField() throws Exception { + org.json.JSONObject credential = new org.json.JSONObject( + "{\"gender\":{\"value\":\"Male\"}}" + ); + + Map templateMap = new HashMap<>(); + templateMap.put("demographics", "gender"); + JSONObject templateJSON = new JSONObject(templateMap); + Mockito.when(utilities.getTemplate()).thenReturn(templateJSON); + + byte[] result = service.createJSONFile(credential, null); + + assertNotNull(result); + String output = new String(result, java.nio.charset.StandardCharsets.UTF_8); + assertTrue(output.contains("Male")); + } + + @Test + public void testCreateJSONFileWithMissingTemplateKey() throws Exception { + org.json.JSONObject credential = new org.json.JSONObject(); + credential.put("fullName", "John Doe"); + + Map templateMap = new HashMap<>(); + templateMap.put("demographics", "nonExistentField"); + JSONObject templateJSON = new JSONObject(templateMap); + Mockito.when(utilities.getTemplate()).thenReturn(templateJSON); + + byte[] result = service.createJSONFile(credential, null); + + assertNotNull(result); + assertTrue(result.length > 0); + String output = new String(result, java.nio.charset.StandardCharsets.UTF_8); + assertFalse("Missing key should not appear in output", output.contains("nonExistentField")); + } + + + @Test + public void testGetBiometricsDataJSONWithNullInput() { + org.json.JSONObject result = service.getBiometricsDataJSON(null); + + assertNotNull(result); + assertEquals(0, result.length()); + } + + private static byte[] buildValidFaceRecord(byte[] imagePayload) throws Exception { + ByteArrayOutputStream repBaos = new ByteArrayOutputStream(); + DataOutputStream repDos = new DataOutputStream(repBaos); + + repDos.write(new byte[14]); + repDos.writeByte(1); + repDos.write(new byte[5]); + repDos.writeShort(1); + repDos.write(new byte[15]); + repDos.write(new byte[8]); + repDos.writeByte(0); + repDos.writeByte(0); + repDos.write(new byte[9]); + repDos.writeInt(imagePayload.length); + repDos.write(imagePayload); + repDos.flush(); + byte[] repData = repBaos.toByteArray(); + + ByteArrayOutputStream outerBaos = new ByteArrayOutputStream(); + DataOutputStream outerDos = new DataOutputStream(outerBaos); + outerDos.write(new byte[4]); + outerDos.write(new byte[4]); + outerDos.writeInt(0); + outerDos.writeShort(1); + outerDos.writeByte(0); + outerDos.write(new byte[2]); + outerDos.writeInt(repData.length + 4); + outerDos.write(repData); + outerDos.flush(); + return outerBaos.toByteArray(); + } + + private static byte[] buildValidFaceRecordNoQualityNoLandmarks(byte[] imagePayload) throws Exception { + ByteArrayOutputStream repBaos = new ByteArrayOutputStream(); + DataOutputStream repDos = new DataOutputStream(repBaos); + + repDos.write(new byte[14]); + repDos.writeByte(0); + repDos.writeShort(0); + repDos.write(new byte[15]); + repDos.writeByte(0); + repDos.writeByte(0); + repDos.write(new byte[9]); + repDos.writeInt(imagePayload.length); + repDos.write(imagePayload); + repDos.flush(); + byte[] repData = repBaos.toByteArray(); + + ByteArrayOutputStream outerBaos = new ByteArrayOutputStream(); + DataOutputStream outerDos = new DataOutputStream(outerBaos); + outerDos.write(new byte[4]); + outerDos.write(new byte[4]); + outerDos.writeInt(0); + outerDos.writeShort(1); + outerDos.writeByte(0); + outerDos.write(new byte[2]); + outerDos.writeInt(repData.length + 4); + outerDos.write(repData); + outerDos.flush(); + return outerBaos.toByteArray(); + } + + private CredentialShareServiceImpl buildTestService() { + CredentialShareServiceImpl testService = new CredentialShareServiceImpl( + restApiClient, webSubSubscriptionHelper, dataShareUtil, + derivedKeyCryptoUtil, p12KeyStoreManager, util, auditLogRequestBuilder, + utilities, restClientService, env, pb + ); + ReflectionTestUtils.setField(testService, "util", util); + return testService; + } + + @Test + public void testExtractFaceImageDataWithQualityBlocksAndLandmarkPoints() throws Exception { + byte[] expectedImage = "FAKE_JPEG_DATA".getBytes(); + byte[] faceRecord = buildValidFaceRecord(expectedImage); + + CredentialShareServiceImpl testService = buildTestService(); + + byte[] result = ReflectionTestUtils.invokeMethod(testService, "extractFaceImageData", faceRecord); + + assertNotNull(result); + assertArrayEquals(expectedImage, result); + } + + @Test + public void testExtractFaceImageDataWithNoQualityBlocksAndNoLandmarkPoints() throws Exception { + byte[] expectedImage = "FAKE_JPEG_NO_Q_L".getBytes(); + byte[] faceRecord = buildValidFaceRecordNoQualityNoLandmarks(expectedImage); + + CredentialShareServiceImpl testService = buildTestService(); + + byte[] result = ReflectionTestUtils.invokeMethod(testService, "extractFaceImageData", faceRecord); + + assertNotNull(result); + assertArrayEquals(expectedImage, result); + } + + @SuppressWarnings("unchecked") + private T[] invokeMapJsonNodeToJavaObject(Class type, + org.json.simple.JSONArray array) throws Exception { + java.lang.reflect.Method m = CredentialShareServiceImpl.class.getDeclaredMethod( + "mapJsonNodeToJavaObject", Class.class, org.json.simple.JSONArray.class); + m.setAccessible(true); + return (T[]) m.invoke(service, type, array); + } + + @Test + public void testMapJsonNodeToJavaObject_happyPath_withLinkedHashMapEntries() throws Exception { + ReflectionTestUtils.setField(service, "supportedLang", "eng,ara"); + + java.util.LinkedHashMap engMap = new java.util.LinkedHashMap<>(); + engMap.put("language", "eng"); + engMap.put("value", "John"); + + java.util.LinkedHashMap fraMap = new java.util.LinkedHashMap<>(); + fraMap.put("language", "fra"); + fraMap.put("value", "Jean"); + + org.json.simple.JSONArray node = new org.json.simple.JSONArray(); + node.add(engMap); + node.add(fraMap); + + io.mosip.mimoto.dto.JsonValue[] result = + invokeMapJsonNodeToJavaObject(io.mosip.mimoto.dto.JsonValue.class, node); + + assertNotNull(result); + assertEquals(2, result.length); + assertEquals("eng", ReflectionTestUtils.getField(result[0], "language")); + assertEquals("John", ReflectionTestUtils.getField(result[0], "value")); + assertEquals("fra", ReflectionTestUtils.getField(result[1], "language")); + assertEquals("Jean", ReflectionTestUtils.getField(result[1], "value")); + } + + @Test + public void testMapJsonNodeToJavaObject_nullObjectInArray() throws Exception { + org.json.simple.JSONArray node = new org.json.simple.JSONArray(); + node.add(null); + + io.mosip.mimoto.dto.JsonValue[] result = + invokeMapJsonNodeToJavaObject(io.mosip.mimoto.dto.JsonValue.class, node); + + assertNotNull(result); + assertEquals(1, result.length); + assertNull(result[0]); + } + + @Test + public void testMapJsonNodeToJavaObject_throwsInstantanceCreationException() throws Exception { + java.util.LinkedHashMap entry = new java.util.LinkedHashMap<>(); + entry.put("language", "eng"); + entry.put("value", "test"); + + org.json.simple.JSONArray node = new org.json.simple.JSONArray(); + node.add(entry); + + java.lang.reflect.Method m = CredentialShareServiceImpl.class.getDeclaredMethod( + "mapJsonNodeToJavaObject", Class.class, org.json.simple.JSONArray.class); + m.setAccessible(true); + + try { + m.invoke(service, Integer.class, node); + fail("Expected InstantanceCreationException wrapped in InvocationTargetException"); + } catch (java.lang.reflect.InvocationTargetException e) { + assertTrue( + "Expected InstantanceCreationException but got: " + e.getCause(), + e.getCause() instanceof io.mosip.mimoto.exception.InstantanceCreationException); + } + } + + @Test + @SuppressWarnings("unchecked") + public void testMapJsonNodeToJavaObject_throwsFieldNotFoundException_onSecurityException() throws Exception { + org.json.simple.JSONArray securityThrowingArray = new org.json.simple.JSONArray() { + @Override + public int size() { + return 1; + } + + @Override + public Object get(int index) { + throw new SecurityException("simulated security restriction"); + } + }; + + java.lang.reflect.Method m = CredentialShareServiceImpl.class.getDeclaredMethod( + "mapJsonNodeToJavaObject", Class.class, org.json.simple.JSONArray.class); + m.setAccessible(true); + + try { + m.invoke(service, io.mosip.mimoto.dto.JsonValue.class, securityThrowingArray); + fail("Expected FieldNotFoundException wrapped in InvocationTargetException"); + } catch (java.lang.reflect.InvocationTargetException e) { + assertTrue( + "Expected FieldNotFoundException but got: " + e.getCause(), + e.getCause() instanceof io.mosip.mimoto.exception.FieldNotFoundException); + } + } } diff --git a/src/test/java/io/mosip/mimoto/service/DataProtectionServiceTest.java b/src/test/java/io/mosip/mimoto/service/DataProtectionServiceTest.java index c7ece3cb4..3bf1ff751 100644 --- a/src/test/java/io/mosip/mimoto/service/DataProtectionServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/DataProtectionServiceTest.java @@ -5,6 +5,8 @@ import io.mosip.kernel.cryptomanager.service.CryptomanagerService; import io.mosip.kernel.core.util.CryptoUtil; import io.mosip.mimoto.constant.SigningAlgorithm; +import io.mosip.mimoto.exception.DecryptionException; +import io.mosip.mimoto.exception.EncryptionException; import io.mosip.mimoto.util.SigningKeyUtil; import org.apache.commons.lang3.StringUtils; import org.junit.Before; @@ -121,4 +123,284 @@ public void testIVChangesButCiphertextRemainsSameForSameEncryptionKeyAndSecretKe assertFalse(Arrays.equals(iv1, iv2), "IVs should be different"); assertEquals(decryptedPrivateKey1, decryptedPrivateKey2); } + + @Test(expected = RuntimeException.class) + public void shouldThrowRuntimeExceptionWhenEncryptionFails() { + String data = "testData"; + String refId = "refId"; + String aad = "aad"; + String salt = "salt"; + when(cryptomanagerService.encrypt(any(CryptomanagerRequestDto.class))) + .thenThrow(new RuntimeException("Simulated encryption failure")); + + dataProtectionService.encrypt(data, refId, aad, salt); + } + + + @Test(expected = RuntimeException.class) + public void shouldThrowRuntimeExceptionWhenDecryptionFails() { + String data = "encryptedData"; + String refId = "refId"; + String aad = "aad"; + String salt = "salt"; + when(cryptomanagerService.decrypt(any(CryptomanagerRequestDto.class))) + .thenThrow(new RuntimeException("Simulated decryption failure")); + + dataProtectionService.decrypt(data, refId, aad, salt); + } + + + @Test + public void shouldReturnNullIfDataToEncryptWithAESIsNull() { + SecretKey key = encryptionKey; + byte[] data = null; + String result = dataProtectionService.encryptWithAES(key, data); + assertNull(result); + } + + @Test + public void shouldReturnNullIfDataToEncryptWithAESEmpty() { + SecretKey key = encryptionKey; + byte[] data = new byte[0]; + String result = dataProtectionService.encryptWithAES(key, data); + assertNull(result); + } + + @Test(expected = RuntimeException.class) + public void shouldThrowRuntimeExceptionWhenEncryptWithAESFails() throws Exception { + SecretKey badKey = new javax.crypto.spec.SecretKeySpec(new byte[8], "AES"); + byte[] data = "test".getBytes(StandardCharsets.UTF_8); + dataProtectionService.encryptWithAES(badKey, data); + } + + + @Test + public void shouldReturnNullIfDataToDecryptWithAESIsNull() { + SecretKey key = encryptionKey; + String data = null; + byte[] result = dataProtectionService.decryptWithAES(key, data); + assertNull(result); + } + + @Test + public void shouldReturnNullIfDataToDecryptWithAESEmpty() { + SecretKey key = encryptionKey; + String data = ""; + byte[] result = dataProtectionService.decryptWithAES(key, data); + assertNull(result); + } + + @Test(expected = RuntimeException.class) + public void shouldThrowRuntimeExceptionIfEncryptedDataTooShort() { + SecretKey key = encryptionKey; + // Base64 for 5 bytes, less than NONCE_LENGTH (12) + String shortData = Base64.getEncoder().encodeToString(new byte[5]); + dataProtectionService.decryptWithAES(key, shortData); + } + + @Test(expected = RuntimeException.class) + public void shouldThrowRuntimeExceptionWhenDecryptWithAESFails() { + // Create valid encrypted data with a good key + String plainText = "test"; + String encrypted = dataProtectionService.encryptWithAES(encryptionKey, plainText.getBytes(StandardCharsets.UTF_8)); + // Use a bad key for decryption + SecretKey badKey = new javax.crypto.spec.SecretKeySpec(new byte[8], "AES"); + dataProtectionService.decryptWithAES(badKey, encrypted); + } + + + @Test(expected = IllegalArgumentException.class) + public void shouldThrowIllegalArgumentExceptionIfKeyBytesNull() { + DataProtectionService.bytesToSecretKey(null); + } + + @Test(expected = IllegalArgumentException.class) + public void shouldThrowIllegalArgumentExceptionIfKeyBytesEmpty() { + DataProtectionService.bytesToSecretKey(new byte[0]); + } + + + @Test(expected = IllegalArgumentException.class) + public void shouldThrowIllegalArgumentExceptionIfPrivateKeyBytesNull() throws Exception { + DataProtectionService.bytesToPrivateKey(null, "RSA"); + } + + @Test(expected = IllegalArgumentException.class) + public void shouldThrowIllegalArgumentExceptionIfPrivateKeyBytesEmpty() throws Exception { + DataProtectionService.bytesToPrivateKey(new byte[0], "RSA"); + } + + @Test(expected = IllegalArgumentException.class) + public void shouldThrowIllegalArgumentExceptionIfAlgorithmNameNull() throws Exception { + DataProtectionService.bytesToPrivateKey(new byte[16], null); + } + + @Test(expected = IllegalArgumentException.class) + public void shouldThrowIllegalArgumentExceptionIfAlgorithmNameEmpty() throws Exception { + DataProtectionService.bytesToPrivateKey(new byte[16], ""); + } + + @Test(expected = Exception.class) + public void shouldThrowExceptionIfKeyConversionFails() throws Exception { + // Invalid key bytes for RSA + byte[] invalidKey = new byte[16]; + DataProtectionService.bytesToPrivateKey(invalidKey, "RSA"); + } + + + @Test(expected = EncryptionException.class) + public void shouldThrowEncryptionExceptionIfCredentialDataNull() throws EncryptionException { + dataProtectionService.encryptCredential(null, "validBase64Key"); + } + + @Test(expected = EncryptionException.class) + public void shouldThrowEncryptionExceptionIfCredentialDataEmpty() throws EncryptionException { + dataProtectionService.encryptCredential("", "validBase64Key"); + } + + @Test(expected = EncryptionException.class) + public void shouldThrowEncryptionExceptionIfWalletKeyNull() throws EncryptionException { + dataProtectionService.encryptCredential("credential", null); + } + + @Test(expected = EncryptionException.class) + public void shouldThrowEncryptionExceptionIfWalletKeyEmpty() throws EncryptionException { + dataProtectionService.encryptCredential("credential", ""); + } + + @Test(expected = EncryptionException.class) + public void shouldThrowEncryptionExceptionIfWalletKeyInvalid() throws EncryptionException { + // Not a valid Base64 string + dataProtectionService.encryptCredential("credential", "not_base64"); + } + + @Test + public void shouldEncryptCredentialSuccessfully() throws EncryptionException { + String credential = "credential"; + SecretKey walletKey = SigningKeyUtil.generateEncryptionKey("AES", 256); + String base64WalletKey = Base64.getEncoder().encodeToString(walletKey.getEncoded()); + String encrypted = dataProtectionService.encryptCredential(credential, base64WalletKey); + assertNotNull(encrypted); + assertFalse(encrypted.isEmpty()); + } + + + @Test(expected = DecryptionException.class) + public void shouldThrowDecryptionExceptionIfEncryptedCredentialDataNull() throws DecryptionException { + dataProtectionService.decryptCredential(null, "validBase64Key"); + } + + @Test(expected = DecryptionException.class) + public void shouldThrowDecryptionExceptionIfEncryptedCredentialDataEmpty() throws DecryptionException { + dataProtectionService.decryptCredential("", "validBase64Key"); + } + + @Test(expected = DecryptionException.class) + public void shouldThrowDecryptionExceptionIfWalletKeyNullForDecryption() throws DecryptionException { + dataProtectionService.decryptCredential("encrypted", null); + } + + @Test(expected = DecryptionException.class) + public void shouldThrowDecryptionExceptionIfWalletKeyEmptyForDecryption() throws DecryptionException { + dataProtectionService.decryptCredential("encrypted", ""); + } + + @Test(expected = DecryptionException.class) + public void shouldThrowDecryptionExceptionIfWalletKeyInvalidForDecryption() throws DecryptionException { + // Not a valid Base64 string + dataProtectionService.decryptCredential("encrypted", "not_base64"); + } + + @Test(expected = DecryptionException.class) + public void shouldThrowDecryptionExceptionIfDecryptionFails() throws DecryptionException { + // Valid Base64 key, but not matching encrypted data + SecretKey walletKey = SigningKeyUtil.generateEncryptionKey("AES", 256); + String base64WalletKey = Base64.getEncoder().encodeToString(walletKey.getEncoded()); + dataProtectionService.decryptCredential("invalidEncryptedData", base64WalletKey); + } + + @Test + public void shouldDecryptCredentialSuccessfully() throws Exception { + String credential = "credential"; + SecretKey walletKey = SigningKeyUtil.generateEncryptionKey("AES", 256); + String base64WalletKey = Base64.getEncoder().encodeToString(walletKey.getEncoded()); + + String encrypted = dataProtectionService.encryptCredential(credential, base64WalletKey); + String decrypted = dataProtectionService.decryptCredential(encrypted, base64WalletKey); + + assertNotNull(decrypted); + assertEquals(credential, decrypted); + } + + + @Test + public void shouldReturnNullWhenStringToBytesInputIsNull() throws Exception { + // Use reflection to access private static method + java.lang.reflect.Method method = DataProtectionService.class.getDeclaredMethod("stringToBytes", String.class); + method.setAccessible(true); + assertNull(method.invoke(null, (Object) null)); + } + + @Test + public void shouldReturnUtf8BytesWhenStringToBytesInputIsNotNull() throws Exception { + java.lang.reflect.Method method = DataProtectionService.class.getDeclaredMethod("stringToBytes", String.class); + method.setAccessible(true); + String input = "hello"; + byte[] result = (byte[]) method.invoke(null, input); + assertArrayEquals(input.getBytes(StandardCharsets.UTF_8), result); + } + + @Test + public void shouldReturnNullWhenBytesToStringInputIsNull() throws Exception { + java.lang.reflect.Method method = DataProtectionService.class.getDeclaredMethod("bytesToString", byte[].class); + method.setAccessible(true); + assertNull(method.invoke(null, (Object) null)); + } + + @Test + public void shouldReturnStringWhenBytesToStringInputIsNotNull() throws Exception { + java.lang.reflect.Method method = DataProtectionService.class.getDeclaredMethod("bytesToString", byte[].class); + method.setAccessible(true); + String input = "world"; + byte[] bytes = input.getBytes(StandardCharsets.UTF_8); + String result = (String) method.invoke(null, (Object) bytes); + assertEquals(input, result); + } + + + @Test(expected = IllegalArgumentException.class) + public void shouldThrowIllegalArgumentExceptionIfHeaderJsonNull() { + dataProtectionService.createDetachedJwtSigningInput(null, "payload"); + } + + @Test(expected = IllegalArgumentException.class) + public void shouldThrowIllegalArgumentExceptionIfPayloadBase64UrlNull() { + dataProtectionService.createDetachedJwtSigningInput("{}", null); + } + + @Test(expected = RuntimeException.class) + public void shouldThrowRuntimeExceptionIfPayloadBase64UrlInvalid() { + // Not a valid Base64URL string + dataProtectionService.createDetachedJwtSigningInput("{}", "!!!not_base64url!!!"); + } + + @Test + public void shouldCreateDetachedJwtSigningInputSuccessfully() { + String headerJson = "{\"alg\":\"EdDSA\",\"typ\":\"JWT\"}"; + String payload = "test-payload"; + // Encode payload to Base64URL + String payloadBase64Url = java.util.Base64.getUrlEncoder().withoutPadding().encodeToString(payload.getBytes(StandardCharsets.UTF_8)); + byte[] result = dataProtectionService.createDetachedJwtSigningInput(headerJson, payloadBase64Url); + assertNotNull(result); + // The result should contain a '.' separator + int dotIndex = -1; + for (int i = 0; i < result.length; i++) { + if (result[i] == (byte)'.') { + dotIndex = i; + break; + } + } + assertTrue(dotIndex > 0); + } + } diff --git a/src/test/java/io/mosip/mimoto/service/GoogleTokenServiceTest.java b/src/test/java/io/mosip/mimoto/service/GoogleTokenServiceTest.java index 1255801a7..b03b26b75 100644 --- a/src/test/java/io/mosip/mimoto/service/GoogleTokenServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/GoogleTokenServiceTest.java @@ -3,6 +3,7 @@ import io.mosip.mimoto.dto.mimoto.UserMetadataDTO; import io.mosip.mimoto.exception.InvalidRequestException; import io.mosip.mimoto.exception.OAuth2AuthenticationException; +import io.mosip.mimoto.model.UserMetadata; import io.mosip.mimoto.service.impl.GoogleTokenService; import io.mosip.mimoto.service.impl.SecurityContextManager; import io.mosip.mimoto.service.impl.SessionManager; @@ -202,4 +203,157 @@ void processTokenInvalidTokenFormatShouldThrowException() throws OAuth2Authentic verify(tokenDecoder).decode(idToken); verifyNoInteractions(userMetadataService, sessionManager, securityContextManager); } + + @Test + void processTokenWithExistingUserMetadataAndNullNameShouldUseSavedName() throws Exception { + // Test when userMetadata exists and name is null - should use saved display name + UserMetadataDTO existingMetadata = new UserMetadataDTO("Saved Name", "http://example.com/saved-pic.jpg", "test@example.com", null); + + Map claimsWithoutName = new HashMap<>(claims); + claimsWithoutName.remove("name"); + Jwt jwtWithoutName = Jwt.withTokenValue(idToken) + .header("alg", "RS256") + .claims(claimsMap -> claimsMap.putAll(claimsWithoutName)) + .issuer("https://accounts.google.com") + .audience(Collections.singletonList("google-client-id")) + .issuedAt(Instant.now()) + .expiresAt(Instant.now().plusSeconds(3600)) + .build(); + + when(tokenDecoder.decode(idToken)).thenReturn(jwtWithoutName); + when(userMetadataService.getUserMetadata("google-subject-id", provider)) + .thenReturn(createUserMetadata("Saved Name", "http://example.com/saved-pic.jpg")); + when(userMetadataService.updateOrCreateUserMetadata("google-subject-id", provider, "Saved Name", "http://example.com/picture.jpg", "test@example.com")) + .thenReturn("test-user-id"); + + googleTokenService.processToken(idToken, provider, request, response); + + verify(userMetadataService).getUserMetadata("google-subject-id", provider); + verify(userMetadataService).updateOrCreateUserMetadata("google-subject-id", provider, "Saved Name", "http://example.com/picture.jpg", "test@example.com"); + verify(sessionManager).setupSession(eq(request), eq(provider), userMetadataDTOArgumentCaptor.capture(), eq("test-user-id")); + + UserMetadataDTO capturedUserMetadata = userMetadataDTOArgumentCaptor.getValue(); + assertEquals("Saved Name", capturedUserMetadata.getDisplayName()); + } + + @Test + void processTokenWithExistingUserMetadataAndBlankNameShouldUseSavedName() throws Exception { + // Test when userMetadata exists and name is blank - should use saved display name + Map claimsWithBlankName = new HashMap<>(claims); + claimsWithBlankName.put("name", " "); + Jwt jwtWithBlankName = Jwt.withTokenValue(idToken) + .header("alg", "RS256") + .claims(claimsMap -> claimsMap.putAll(claimsWithBlankName)) + .issuer("https://accounts.google.com") + .audience(Collections.singletonList("google-client-id")) + .issuedAt(Instant.now()) + .expiresAt(Instant.now().plusSeconds(3600)) + .build(); + + when(tokenDecoder.decode(idToken)).thenReturn(jwtWithBlankName); + when(userMetadataService.getUserMetadata("google-subject-id", provider)) + .thenReturn(createUserMetadata("Saved Display Name", "http://example.com/saved-pic.jpg")); + when(userMetadataService.updateOrCreateUserMetadata("google-subject-id", provider, "Saved Display Name", "http://example.com/picture.jpg", "test@example.com")) + .thenReturn("test-user-id"); + + googleTokenService.processToken(idToken, provider, request, response); + + verify(userMetadataService).getUserMetadata("google-subject-id", provider); + verify(userMetadataService).updateOrCreateUserMetadata("google-subject-id", provider, "Saved Display Name", "http://example.com/picture.jpg", "test@example.com"); + } + + @Test + void processTokenWithExistingUserMetadataAndNullPictureShouldUseSavedPicture() throws Exception { + // Test when userMetadata exists and picture is null - should use saved picture URL + Map claimsWithoutPicture = new HashMap<>(claims); + claimsWithoutPicture.remove("picture"); + Jwt jwtWithoutPicture = Jwt.withTokenValue(idToken) + .header("alg", "RS256") + .claims(claimsMap -> claimsMap.putAll(claimsWithoutPicture)) + .issuer("https://accounts.google.com") + .audience(Collections.singletonList("google-client-id")) + .issuedAt(Instant.now()) + .expiresAt(Instant.now().plusSeconds(3600)) + .build(); + + when(tokenDecoder.decode(idToken)).thenReturn(jwtWithoutPicture); + when(userMetadataService.getUserMetadata("google-subject-id", provider)) + .thenReturn(createUserMetadata("Test User", "http://example.com/saved-picture.jpg")); + when(userMetadataService.updateOrCreateUserMetadata("google-subject-id", provider, "Test User", "http://example.com/saved-picture.jpg", "test@example.com")) + .thenReturn("test-user-id"); + + googleTokenService.processToken(idToken, provider, request, response); + + verify(userMetadataService).getUserMetadata("google-subject-id", provider); + verify(userMetadataService).updateOrCreateUserMetadata("google-subject-id", provider, "Test User", "http://example.com/saved-picture.jpg", "test@example.com"); + verify(sessionManager).setupSession(eq(request), eq(provider), userMetadataDTOArgumentCaptor.capture(), eq("test-user-id")); + + UserMetadataDTO capturedUserMetadata = userMetadataDTOArgumentCaptor.getValue(); + assertEquals("http://example.com/saved-picture.jpg", capturedUserMetadata.getProfilePictureUrl()); + } + + @Test + void processTokenWithExistingUserMetadataAndBlankPictureShouldUseSavedPicture() throws Exception { + // Test when userMetadata exists and picture is blank - should use saved picture URL + Map claimsWithBlankPicture = new HashMap<>(claims); + claimsWithBlankPicture.put("picture", ""); + Jwt jwtWithBlankPicture = Jwt.withTokenValue(idToken) + .header("alg", "RS256") + .claims(claimsMap -> claimsMap.putAll(claimsWithBlankPicture)) + .issuer("https://accounts.google.com") + .audience(Collections.singletonList("google-client-id")) + .issuedAt(Instant.now()) + .expiresAt(Instant.now().plusSeconds(3600)) + .build(); + + when(tokenDecoder.decode(idToken)).thenReturn(jwtWithBlankPicture); + when(userMetadataService.getUserMetadata("google-subject-id", provider)) + .thenReturn(createUserMetadata("Test User", "http://example.com/saved-pic.jpg")); + when(userMetadataService.updateOrCreateUserMetadata("google-subject-id", provider, "Test User", "http://example.com/saved-pic.jpg", "test@example.com")) + .thenReturn("test-user-id"); + + googleTokenService.processToken(idToken, provider, request, response); + + verify(userMetadataService).getUserMetadata("google-subject-id", provider); + verify(userMetadataService).updateOrCreateUserMetadata("google-subject-id", provider, "Test User", "http://example.com/saved-pic.jpg", "test@example.com"); + } + + @Test + void processTokenWithDecryptionExceptionShouldThrowRuntimeException() throws Exception { + // Test the DecryptionException catch block + when(tokenDecoder.decode(idToken)).thenReturn(validJwt); + when(userMetadataService.getUserMetadata("google-subject-id", provider)) + .thenThrow(new io.mosip.mimoto.exception.DecryptionException("DEC_001", "Decryption failed")); + + RuntimeException exception = assertThrows(RuntimeException.class, () -> + googleTokenService.processToken(idToken, provider, request, response)); + + verify(tokenDecoder).decode(idToken); + verify(userMetadataService).getUserMetadata("google-subject-id", provider); + verifyNoInteractions(sessionManager, securityContextManager); + } + + @Test + void processTokenWithNullUserMetadataShouldProceedNormally() throws Exception { + // Test when userMetadata is null - should proceed with token claims + when(tokenDecoder.decode(idToken)).thenReturn(validJwt); + when(userMetadataService.getUserMetadata("google-subject-id", provider)).thenReturn(null); + when(userMetadataService.updateOrCreateUserMetadata("google-subject-id", provider, "Test User", "http://example.com/picture.jpg", "test@example.com")) + .thenReturn("test-user-id"); + + googleTokenService.processToken(idToken, provider, request, response); + + verify(userMetadataService).getUserMetadata("google-subject-id", provider); + verify(userMetadataService).updateOrCreateUserMetadata("google-subject-id", provider, "Test User", "http://example.com/picture.jpg", "test@example.com"); + verify(sessionManager).setupSession(eq(request), eq(provider), any(UserMetadataDTO.class), eq("test-user-id")); + verify(securityContextManager).setupSecurityContext(any(OAuth2AuthenticationToken.class), eq(request), eq(response)); + } + + // Helper method to create UserMetadata object for testing + private UserMetadata createUserMetadata(String displayName, String pictureUrl) { + UserMetadata metadata = new UserMetadata(); + metadata.setDisplayName(displayName); + metadata.setProfilePictureUrl(pictureUrl); + return metadata; + } } \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/WalletLockServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletLockServiceTest.java index 9e61ea563..164d2192b 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletLockServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletLockServiceTest.java @@ -120,4 +120,136 @@ public void testResetLockState() { assertNull(updatedWallet.getWalletMetadata().getPasscodeControl().getRetryBlockedUntil()); assertNull(updatedWallet.getWalletMetadata().getLockStatus()); } + + @Test + public void enforceLockCyclePolicyShouldInitializeCycleCountWhenCurrentCycleCountIsZero() { + wallet.getWalletMetadata().getPasscodeControl().setFailedAttemptCount(0); + wallet.getWalletMetadata().getPasscodeControl().setCurrentCycleCount(0); + + Wallet updatedWallet = walletLockService.enforceLockCyclePolicy(wallet); + + assertEquals(1, updatedWallet.getWalletMetadata().getPasscodeControl().getCurrentCycleCount()); + assertEquals(1, updatedWallet.getWalletMetadata().getPasscodeControl().getFailedAttemptCount()); + } + + @Test + public void enforceLockCyclePolicyShouldNotSetLastAttemptStatusWhenConditionsNotMet() { + // Test scenarios where LAST_ATTEMPT_BEFORE_LOCKOUT should NOT be set + // Format: {initialFailedCount, currentCycle, expectedFailedCountAfter, description} + Object[][] testCases = { + {2, 3, 3, "neither penultimate attempt nor last cycle"}, + {3, 2, 4, "penultimate attempt but not last cycle"}, + {1, 3, 2, "last cycle but not penultimate attempt"} + }; + + for (Object[] testCase : testCases) { + int initialFailedCount = (int) testCase[0]; + int currentCycle = (int) testCase[1]; + int expectedFailedCountAfter = (int) testCase[2]; + String description = (String) testCase[3]; + + // Reset wallet for each test case + String userId = UUID.randomUUID().toString(); + PasscodeControl passcodeControl = TestUtilities.createPasscodeControl(initialFailedCount, currentCycle, null); + WalletMetadata walletMetadata = TestUtilities.createWalletMetadata("Test Wallet", passcodeControl, null); + Wallet testWallet = TestUtilities.createWallet(userId, "encryptedWalletKey", walletMetadata); + + Wallet updatedWallet = walletLockService.enforceLockCyclePolicy(testWallet); + + assertNotEquals(WalletLockStatus.LAST_ATTEMPT_BEFORE_LOCKOUT, + updatedWallet.getWalletMetadata().getLockStatus(), + "Should NOT set LAST_ATTEMPT_BEFORE_LOCKOUT when " + description); + assertEquals(expectedFailedCountAfter, + updatedWallet.getWalletMetadata().getPasscodeControl().getFailedAttemptCount(), + "Failed attempt count mismatch when " + description); + } + } + + @Test + public void testResetTemporaryLockIfLockStatusIsNotTemporarilyLocked() { + wallet.getWalletMetadata().setLockStatus(WalletLockStatus.PERMANENTLY_LOCKED); + wallet.getWalletMetadata().getPasscodeControl().setRetryBlockedUntil(System.currentTimeMillis() - 1000); + + Wallet updatedWallet = walletLockService.resetTemporaryLockIfExpired(wallet); + + assertEquals(WalletLockStatus.PERMANENTLY_LOCKED, updatedWallet.getWalletMetadata().getLockStatus()); + assertNotNull(updatedWallet.getWalletMetadata().getPasscodeControl().getRetryBlockedUntil()); + } + + @Test + public void testResetTemporaryLockIfRetryBlockedUntilIsNull() { + wallet.getWalletMetadata().setLockStatus(WalletLockStatus.TEMPORARILY_LOCKED); + wallet.getWalletMetadata().getPasscodeControl().setRetryBlockedUntil(null); + + Wallet updatedWallet = walletLockService.resetTemporaryLockIfExpired(wallet); + + assertEquals(WalletLockStatus.TEMPORARILY_LOCKED, updatedWallet.getWalletMetadata().getLockStatus()); + assertNull(updatedWallet.getWalletMetadata().getPasscodeControl().getRetryBlockedUntil()); + } + + @Test + public void enforceLockCyclePolicyShouldInitializePasscodeControlWhenNull() { + String userId = UUID.randomUUID().toString(); + WalletMetadata walletMetadata = TestUtilities.createWalletMetadata("Test Wallet", null, null); + Wallet walletWithNullPasscode = TestUtilities.createWallet(userId, "encryptedWalletKey", walletMetadata); + + assertNull(walletWithNullPasscode.getWalletMetadata().getPasscodeControl()); + + Wallet updatedWallet = walletLockService.enforceLockCyclePolicy(walletWithNullPasscode); + + assertNotNull(updatedWallet.getWalletMetadata().getPasscodeControl()); + assertEquals(1, updatedWallet.getWalletMetadata().getPasscodeControl().getFailedAttemptCount()); + assertEquals(1, updatedWallet.getWalletMetadata().getPasscodeControl().getCurrentCycleCount()); + } + + @Test + public void shouldInitializePasscodeControlWhenNullForAllMethods() { + Object[][] testCases = { + {"enforceLockCyclePolicy", 1, 1}, + {"resetTemporaryLockIfExpired", null, null}, + {"resetLockState", 0, 0} + }; + + for (Object[] testCase : testCases) { + String methodName = (String) testCase[0]; + Integer expectedFailedCount = (Integer) testCase[1]; + Integer expectedCycleCount = (Integer) testCase[2]; + + String userId = UUID.randomUUID().toString(); + WalletMetadata walletMetadata = TestUtilities.createWalletMetadata("Test Wallet", null, null); + Wallet walletWithNullPasscode = TestUtilities.createWallet(userId, "encryptedWalletKey", walletMetadata); + + assertNull(walletWithNullPasscode.getWalletMetadata().getPasscodeControl(), + "PasscodeControl should be null before calling " + methodName); + + Wallet updatedWallet; + switch (methodName) { + case "enforceLockCyclePolicy": + updatedWallet = walletLockService.enforceLockCyclePolicy(walletWithNullPasscode); + break; + case "resetTemporaryLockIfExpired": + updatedWallet = walletLockService.resetTemporaryLockIfExpired(walletWithNullPasscode); + break; + case "resetLockState": + updatedWallet = walletLockService.resetLockState(walletWithNullPasscode); + break; + default: + throw new IllegalArgumentException("Unknown method: " + methodName); + } + + assertNotNull(updatedWallet.getWalletMetadata().getPasscodeControl(), + "PasscodeControl should be initialized after calling " + methodName); + + if (expectedFailedCount != null) { + assertEquals(expectedFailedCount, + updatedWallet.getWalletMetadata().getPasscodeControl().getFailedAttemptCount(), + "Failed attempt count mismatch for " + methodName); + } + if (expectedCycleCount != null) { + assertEquals(expectedCycleCount, + updatedWallet.getWalletMetadata().getPasscodeControl().getCurrentCycleCount(), + "Current cycle count mismatch for " + methodName); + } + } + } } \ No newline at end of file From 5d6a94a57eeb1da4b4ef8ddffab4c24fda43aecc Mon Sep 17 00:00:00 2001 From: Sradha Mohanty Date: Mon, 23 Mar 2026 17:07:50 +0530 Subject: [PATCH 833/860] MOSIP-41353: Remove unused config files and properties in MIMOTO module. (#1044) * MOSIP-41353 Signed-off-by: Sradha Mohanty * MOSIP-41353 Signed-off-by: Sradha Mohanty * MOSIP-41353 Signed-off-by: Sradha Mohanty * MOSIP-41353 Signed-off-by: Sradha Mohanty * MOSIP-41353 Signed-off-by: Sradha Mohanty * MOSIP-41353 Signed-off-by: Sradha Mohanty --------- Signed-off-by: Sradha Mohanty --- .../mimoto/testrunner/InjiTestRunner.java | 3 - .../mimoto/testscripts/AddIdentity.java | 3 - .../mimoto/testscripts/DeleteWithParam.java | 3 - .../mimoto/testscripts/GetWithParam.java | 3 - .../testscripts/GetWithParamAndHeader.java | 3 - ...GetWithPathParamAndCookieForAutoGenId.java | 3 - .../PatchWithPathParamsBodyAndCookie.java | 3 - .../PostWithAutogenIdWithOtpGenerate.java | 4 - .../PostWithBodyWithOtpGenerate.java | 4 - .../PostWithFormDataBodyForPdfDownload.java | 3 - .../PostWithPathParamsAndCookie.java | 3 - ...athParamsHeadersAndCookieForAutoGenId.java | 3 - .../apirig/mimoto/testscripts/SimplePost.java | 3 - .../testscripts/SimplePostForAutoGenId.java | 3 - .../src/main/resources/config/AuthPolicy.json | 7 - .../main/resources/config/AuthPolicy2.json | 82 -- .../main/resources/config/AuthPolicy3.json | 8 - .../main/resources/config/AuthPolicy4.json | 7 - .../main/resources/config/AuthPolicy5.json | 8 - .../main/resources/config/AuthPolicy6.json | 41 - .../main/resources/config/IDRepo.properties | 86 -- .../main/resources/config/IDRepo2.properties | 100 -- .../main/resources/config/IDjson.properties | 2 - .../config/UmcValidationApis.properties | 6 - .../resources/config/adminQueries.properties | 908 ------------------ .../config/adminTokenGeneration.properties | 5 - .../resources/config/application.properties | 60 +- .../main/resources/config/bioValue.properties | 49 - .../config/bioValueEncryptionTemplate.json | 14 - .../src/main/resources/config/bulkUpload.json | 6 - .../resources/config/clientPrivateKey.txt | 1 - .../src/main/resources/config/errorUIN.json | 24 - .../main/resources/config/errorUINIdp.json | 9 - .../main/resources/config/errorUINKyc.json | 24 - .../main/resources/config/esignetPayload.json | 7 - .../resources/config/folderPaths.properties | 10 - .../resources/config/idRepoToken.properties | 5 - .../config/keyManagerDataDeleteQueries.txt | 14 - .../main/resources/config/mapping.properties | 29 - .../config/masterDataDeleteQueries.txt | 91 -- .../config/packetProperties.properties | 2 - .../config/packetValidator.properties | 2 - .../config/partnerDemoService.properties | 8 - .../config/partnerQueries.properties | 135 --- .../resources/config/pmsDataDeleteQueries.txt | 28 - .../main/resources/config/policyGroup.json | 10 - .../main/resources/config/prereg_SendOtp.json | 9 - .../resources/config/prereg_ValidateOtp.json | 9 - .../registrationProcessorAPI.properties | 27 - .../config/residentServicesQueries.properties | 15 - api-test/src/main/resources/config/sign.json | 14 - .../src/main/resources/config/test.properties | 16 - .../config/tokenGeneration.properties | 7 - .../config/updatePacketProperties.properties | 7 - 54 files changed, 1 insertion(+), 1935 deletions(-) delete mode 100644 api-test/src/main/resources/config/AuthPolicy.json delete mode 100644 api-test/src/main/resources/config/AuthPolicy2.json delete mode 100644 api-test/src/main/resources/config/AuthPolicy3.json delete mode 100644 api-test/src/main/resources/config/AuthPolicy4.json delete mode 100644 api-test/src/main/resources/config/AuthPolicy5.json delete mode 100644 api-test/src/main/resources/config/AuthPolicy6.json delete mode 100644 api-test/src/main/resources/config/IDRepo.properties delete mode 100644 api-test/src/main/resources/config/IDRepo2.properties delete mode 100644 api-test/src/main/resources/config/IDjson.properties delete mode 100644 api-test/src/main/resources/config/UmcValidationApis.properties delete mode 100644 api-test/src/main/resources/config/adminQueries.properties delete mode 100644 api-test/src/main/resources/config/adminTokenGeneration.properties delete mode 100644 api-test/src/main/resources/config/bioValue.properties delete mode 100644 api-test/src/main/resources/config/bioValueEncryptionTemplate.json delete mode 100644 api-test/src/main/resources/config/bulkUpload.json delete mode 100644 api-test/src/main/resources/config/clientPrivateKey.txt delete mode 100644 api-test/src/main/resources/config/errorUIN.json delete mode 100644 api-test/src/main/resources/config/errorUINIdp.json delete mode 100644 api-test/src/main/resources/config/errorUINKyc.json delete mode 100644 api-test/src/main/resources/config/esignetPayload.json delete mode 100644 api-test/src/main/resources/config/folderPaths.properties delete mode 100644 api-test/src/main/resources/config/idRepoToken.properties delete mode 100644 api-test/src/main/resources/config/keyManagerDataDeleteQueries.txt delete mode 100644 api-test/src/main/resources/config/mapping.properties delete mode 100644 api-test/src/main/resources/config/masterDataDeleteQueries.txt delete mode 100644 api-test/src/main/resources/config/packetProperties.properties delete mode 100644 api-test/src/main/resources/config/packetValidator.properties delete mode 100644 api-test/src/main/resources/config/partnerDemoService.properties delete mode 100644 api-test/src/main/resources/config/partnerQueries.properties delete mode 100644 api-test/src/main/resources/config/pmsDataDeleteQueries.txt delete mode 100644 api-test/src/main/resources/config/policyGroup.json delete mode 100644 api-test/src/main/resources/config/prereg_SendOtp.json delete mode 100644 api-test/src/main/resources/config/prereg_ValidateOtp.json delete mode 100644 api-test/src/main/resources/config/registrationProcessorAPI.properties delete mode 100644 api-test/src/main/resources/config/residentServicesQueries.properties delete mode 100644 api-test/src/main/resources/config/sign.json delete mode 100644 api-test/src/main/resources/config/test.properties delete mode 100644 api-test/src/main/resources/config/tokenGeneration.properties delete mode 100644 api-test/src/main/resources/config/updatePacketProperties.properties diff --git a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testrunner/InjiTestRunner.java b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testrunner/InjiTestRunner.java index 10a3e2906..3819d3664 100644 --- a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testrunner/InjiTestRunner.java +++ b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testrunner/InjiTestRunner.java @@ -10,9 +10,7 @@ import java.security.PublicKey; import java.security.interfaces.RSAPublicKey; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.Map; import java.util.Properties; import org.apache.log4j.Level; @@ -27,7 +25,6 @@ import io.inji.testrig.apirig.mimoto.utils.MimotoUtil; import io.mosip.testrig.apirig.dataprovider.BiometricDataProvider; import io.mosip.testrig.apirig.dbaccess.DBManager; -import io.mosip.testrig.apirig.report.EmailableReport; import io.mosip.testrig.apirig.testrunner.BaseTestCase; import io.mosip.testrig.apirig.testrunner.ExtractResource; import io.mosip.testrig.apirig.testrunner.HealthChecker; diff --git a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/AddIdentity.java b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/AddIdentity.java index e41ac9414..3eb89c67d 100644 --- a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/AddIdentity.java +++ b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/AddIdentity.java @@ -1,6 +1,5 @@ package io.inji.testrig.apirig.mimoto.testscripts; -import java.lang.reflect.Field; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; @@ -21,8 +20,6 @@ import org.testng.annotations.BeforeClass; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; -import org.testng.internal.BaseTestMethod; -import org.testng.internal.TestResult; import io.inji.testrig.apirig.mimoto.utils.MimotoConfigManager; import io.inji.testrig.apirig.mimoto.utils.MimotoUtil; diff --git a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/DeleteWithParam.java b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/DeleteWithParam.java index dd0825983..729629f77 100644 --- a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/DeleteWithParam.java +++ b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/DeleteWithParam.java @@ -1,6 +1,5 @@ package io.inji.testrig.apirig.mimoto.testscripts; -import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -17,8 +16,6 @@ import org.testng.annotations.BeforeClass; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; -import org.testng.internal.BaseTestMethod; -import org.testng.internal.TestResult; import io.inji.testrig.apirig.mimoto.utils.MimotoConfigManager; import io.inji.testrig.apirig.mimoto.utils.MimotoUtil; diff --git a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/GetWithParam.java b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/GetWithParam.java index 43360e814..90c129575 100644 --- a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/GetWithParam.java +++ b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/GetWithParam.java @@ -1,6 +1,5 @@ package io.inji.testrig.apirig.mimoto.testscripts; -import java.lang.reflect.Field; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -18,8 +17,6 @@ import org.testng.annotations.BeforeClass; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; -import org.testng.internal.BaseTestMethod; -import org.testng.internal.TestResult; import io.inji.testrig.apirig.mimoto.utils.MimotoConfigManager; import io.inji.testrig.apirig.mimoto.utils.MimotoUtil; diff --git a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/GetWithParamAndHeader.java b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/GetWithParamAndHeader.java index 32eead398..60b1fae8d 100644 --- a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/GetWithParamAndHeader.java +++ b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/GetWithParamAndHeader.java @@ -2,7 +2,6 @@ import java.io.ByteArrayInputStream; import java.io.IOException; -import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -19,8 +18,6 @@ import org.testng.annotations.BeforeClass; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; -import org.testng.internal.BaseTestMethod; -import org.testng.internal.TestResult; import com.itextpdf.text.pdf.PdfReader; import com.itextpdf.text.pdf.parser.PdfTextExtractor; diff --git a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/GetWithPathParamAndCookieForAutoGenId.java b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/GetWithPathParamAndCookieForAutoGenId.java index baa2f6ca2..9ec2b8093 100644 --- a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/GetWithPathParamAndCookieForAutoGenId.java +++ b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/GetWithPathParamAndCookieForAutoGenId.java @@ -1,6 +1,5 @@ package io.inji.testrig.apirig.mimoto.testscripts; -import java.lang.reflect.Field; import java.util.List; import java.util.Map; @@ -15,8 +14,6 @@ import org.testng.annotations.BeforeClass; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; -import org.testng.internal.BaseTestMethod; -import org.testng.internal.TestResult; import io.inji.testrig.apirig.mimoto.utils.MimotoConfigManager; import io.inji.testrig.apirig.mimoto.utils.MimotoUtil; diff --git a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PatchWithPathParamsBodyAndCookie.java b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PatchWithPathParamsBodyAndCookie.java index 19712da9b..8139b25ce 100644 --- a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PatchWithPathParamsBodyAndCookie.java +++ b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PatchWithPathParamsBodyAndCookie.java @@ -1,6 +1,5 @@ package io.inji.testrig.apirig.mimoto.testscripts; -import java.lang.reflect.Field; import java.util.List; import java.util.Map; @@ -15,8 +14,6 @@ import org.testng.annotations.BeforeClass; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; -import org.testng.internal.BaseTestMethod; -import org.testng.internal.TestResult; import io.inji.testrig.apirig.mimoto.utils.MimotoConfigManager; import io.inji.testrig.apirig.mimoto.utils.MimotoUtil; diff --git a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java index 7b8c45778..bd8e4b099 100644 --- a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java +++ b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithAutogenIdWithOtpGenerate.java @@ -1,6 +1,5 @@ package io.inji.testrig.apirig.mimoto.testscripts; -import java.lang.reflect.Field; import java.util.List; import java.util.Map; @@ -17,8 +16,6 @@ import org.testng.annotations.BeforeClass; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; -import org.testng.internal.BaseTestMethod; -import org.testng.internal.TestResult; import io.inji.testrig.apirig.mimoto.utils.MimotoConfigManager; import io.inji.testrig.apirig.mimoto.utils.MimotoUtil; @@ -27,7 +24,6 @@ import io.mosip.testrig.apirig.testrunner.BaseTestCase; import io.mosip.testrig.apirig.testrunner.HealthChecker; import io.mosip.testrig.apirig.utils.AdminTestException; -import io.mosip.testrig.apirig.utils.AdminTestUtil; import io.mosip.testrig.apirig.utils.AuthenticationTestException; import io.mosip.testrig.apirig.utils.GlobalConstants; import io.mosip.testrig.apirig.utils.NotificationListener; diff --git a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithBodyWithOtpGenerate.java b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithBodyWithOtpGenerate.java index 1f279ba84..1395cb23d 100644 --- a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithBodyWithOtpGenerate.java +++ b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithBodyWithOtpGenerate.java @@ -1,6 +1,5 @@ package io.inji.testrig.apirig.mimoto.testscripts; -import java.lang.reflect.Field; import java.util.List; import java.util.Map; @@ -16,8 +15,6 @@ import org.testng.annotations.BeforeClass; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; -import org.testng.internal.BaseTestMethod; -import org.testng.internal.TestResult; import io.inji.testrig.apirig.mimoto.utils.MimotoConfigManager; import io.inji.testrig.apirig.mimoto.utils.MimotoUtil; @@ -26,7 +23,6 @@ import io.mosip.testrig.apirig.testrunner.BaseTestCase; import io.mosip.testrig.apirig.testrunner.HealthChecker; import io.mosip.testrig.apirig.utils.AdminTestException; -import io.mosip.testrig.apirig.utils.AdminTestUtil; import io.mosip.testrig.apirig.utils.AuthenticationTestException; import io.mosip.testrig.apirig.utils.GlobalConstants; import io.mosip.testrig.apirig.utils.NotificationListener; diff --git a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithFormDataBodyForPdfDownload.java b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithFormDataBodyForPdfDownload.java index c0e04a4ed..93bbb8346 100644 --- a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithFormDataBodyForPdfDownload.java +++ b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithFormDataBodyForPdfDownload.java @@ -2,7 +2,6 @@ import java.io.ByteArrayInputStream; import java.io.IOException; -import java.lang.reflect.Field; import org.apache.log4j.Level; import org.apache.log4j.Logger; @@ -15,8 +14,6 @@ import org.testng.annotations.BeforeClass; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; -import org.testng.internal.BaseTestMethod; -import org.testng.internal.TestResult; import com.itextpdf.text.pdf.PdfReader; import com.itextpdf.text.pdf.parser.PdfTextExtractor; diff --git a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithPathParamsAndCookie.java b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithPathParamsAndCookie.java index 131ecf013..6c999ff22 100644 --- a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithPathParamsAndCookie.java +++ b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithPathParamsAndCookie.java @@ -1,6 +1,5 @@ package io.inji.testrig.apirig.mimoto.testscripts; -import java.lang.reflect.Field; import java.util.List; import java.util.Map; @@ -15,8 +14,6 @@ import org.testng.annotations.BeforeClass; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; -import org.testng.internal.BaseTestMethod; -import org.testng.internal.TestResult; import io.inji.testrig.apirig.mimoto.utils.MimotoConfigManager; import io.inji.testrig.apirig.mimoto.utils.MimotoUtil; diff --git a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithPathParamsHeadersAndCookieForAutoGenId.java b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithPathParamsHeadersAndCookieForAutoGenId.java index 93a6454e9..5e79994aa 100644 --- a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithPathParamsHeadersAndCookieForAutoGenId.java +++ b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/PostWithPathParamsHeadersAndCookieForAutoGenId.java @@ -1,6 +1,5 @@ package io.inji.testrig.apirig.mimoto.testscripts; -import java.lang.reflect.Field; import java.util.List; import java.util.Map; @@ -15,8 +14,6 @@ import org.testng.annotations.BeforeClass; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; -import org.testng.internal.BaseTestMethod; -import org.testng.internal.TestResult; import io.inji.testrig.apirig.mimoto.utils.MimotoConfigManager; import io.inji.testrig.apirig.mimoto.utils.MimotoUtil; diff --git a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/SimplePost.java b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/SimplePost.java index 1a62abde3..f8778373a 100644 --- a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/SimplePost.java +++ b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/SimplePost.java @@ -1,6 +1,5 @@ package io.inji.testrig.apirig.mimoto.testscripts; -import java.lang.reflect.Field; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -18,8 +17,6 @@ import org.testng.annotations.BeforeClass; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; -import org.testng.internal.BaseTestMethod; -import org.testng.internal.TestResult; import io.inji.testrig.apirig.mimoto.utils.MimotoConfigManager; import io.inji.testrig.apirig.mimoto.utils.MimotoUtil; diff --git a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java index 2db5e83ba..0d5b73482 100644 --- a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java +++ b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testscripts/SimplePostForAutoGenId.java @@ -1,6 +1,5 @@ package io.inji.testrig.apirig.mimoto.testscripts; -import java.lang.reflect.Field; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.HashMap; @@ -19,8 +18,6 @@ import org.testng.annotations.BeforeClass; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; -import org.testng.internal.BaseTestMethod; -import org.testng.internal.TestResult; import io.inji.testrig.apirig.mimoto.utils.MimotoConfigManager; import io.inji.testrig.apirig.mimoto.utils.MimotoUtil; diff --git a/api-test/src/main/resources/config/AuthPolicy.json b/api-test/src/main/resources/config/AuthPolicy.json deleted file mode 100644 index 3628348c2..000000000 --- a/api-test/src/main/resources/config/AuthPolicy.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "id": "string", - "metadata": {}, - "request": {}, - "requesttime": "2022-09-07T04:23:38.117Z", - "version": "string" -} \ No newline at end of file diff --git a/api-test/src/main/resources/config/AuthPolicy2.json b/api-test/src/main/resources/config/AuthPolicy2.json deleted file mode 100644 index 525415bb3..000000000 --- a/api-test/src/main/resources/config/AuthPolicy2.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "allowedAuthTypes": [ - { - "authSubType": "IRIS", - "authType": "bio", - "mandatory": false - }, - { - "authSubType": "FINGER", - "authType": "bio", - "mandatory": false - }, - { - "authSubType": "FACE", - "authType": "bio", - "mandatory": false - }, - { - "authSubType": "", - "authType": "otp", - "mandatory": false - }, - { - "authSubType": "", - "authType": "otp-request", - "mandatory": false - }, - { - "authSubType": "", - "authType": "kyc", - "mandatory": false - }, - { - "authSubType": "", - "authType": "demo", - "mandatory": false - } - ], - "kycLanguages": [ - "ara", - "eng" - ], - "allowedKycAttributes": [ - { - "attributeName": "fullName" - }, - { - "attributeName": "gender" - }, - { - "attributeName": "residenceStatus" - }, - { - "attributeName": "dateOfBirth" - }, - { - "attributeName": "photo" - }, - { - "attributeName": "firstName" - }, - { - "attributeName": "province" - }, - { - "attributeName": "city" - }, - { - "attributeName": "zone" - }, - { - "attributeName": "postalCode" - }, - { - "attributeName": "phone" - }, - { - "attributeName": "email" - } - ], - "authTokenType": "partner" - } \ No newline at end of file diff --git a/api-test/src/main/resources/config/AuthPolicy3.json b/api-test/src/main/resources/config/AuthPolicy3.json deleted file mode 100644 index d7f53a6ac..000000000 --- a/api-test/src/main/resources/config/AuthPolicy3.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "desc":"desc mosip auth policy", - "name":"mosip auth policy 2345678", - "policyGroupName":"mosip auth policy group 2345678", - "policyType":"Auth", - "version": "1.0", - "policies": {} - } \ No newline at end of file diff --git a/api-test/src/main/resources/config/AuthPolicy4.json b/api-test/src/main/resources/config/AuthPolicy4.json deleted file mode 100644 index 3628348c2..000000000 --- a/api-test/src/main/resources/config/AuthPolicy4.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "id": "string", - "metadata": {}, - "request": {}, - "requesttime": "2022-09-07T04:23:38.117Z", - "version": "string" -} \ No newline at end of file diff --git a/api-test/src/main/resources/config/AuthPolicy5.json b/api-test/src/main/resources/config/AuthPolicy5.json deleted file mode 100644 index d7f53a6ac..000000000 --- a/api-test/src/main/resources/config/AuthPolicy5.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "desc":"desc mosip auth policy", - "name":"mosip auth policy 2345678", - "policyGroupName":"mosip auth policy group 2345678", - "policyType":"Auth", - "version": "1.0", - "policies": {} - } \ No newline at end of file diff --git a/api-test/src/main/resources/config/AuthPolicy6.json b/api-test/src/main/resources/config/AuthPolicy6.json deleted file mode 100644 index fb161e611..000000000 --- a/api-test/src/main/resources/config/AuthPolicy6.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "allowedAuthTypes": [ - { - "authSubType": "IRIS", - "authType": "bio", - "mandatory": true - }, - { - "authSubType": "FINGER", - "authType": "bio", - "mandatory": true - }, - { - "authSubType": "FACE", - "authType": "bio", - "mandatory": true - }, - { - "authSubType": "", - "authType": "otp-request", - "mandatory": false - }, - { - "authSubType": "", - "authType": "kyc", - "mandatory": false - }, - { - "authSubType": "", - "authType": "demo", - "mandatory": false - } - ], - "kycLanguages": [ - "ara", - "eng" - ], - "allowedKycAttributes": [ - ], - "authTokenType": "partner" - } \ No newline at end of file diff --git a/api-test/src/main/resources/config/IDRepo.properties b/api-test/src/main/resources/config/IDRepo.properties deleted file mode 100644 index 02eec25fe..000000000 --- a/api-test/src/main/resources/config/IDRepo.properties +++ /dev/null @@ -1,86 +0,0 @@ -# ------------------------------------------------------------------------------------------- -# Properties File that will defined from ID Repo for specific request and Response elements -# which will be used during automation. This is common place for update -# - -req.Documentrequest=Document request -req.notify=NotificationRequestDTO -langCode.key=langCode - -key=value - -#PreRegistration resource uris -#Make sure all resource apis are covered -ui.config.params=preregistration.login.mode,preregistration.workflow.demographic,preregistration.workflow.documentupload,preregistration.workflow.booking,preregistration.booking.offset,preregistration.auto.logout,preregistration.rebook.timespan,preregistration.cancel.timespan,preregistration.book.days,preregistration.max.file.size,preregistration.recommended.centers.locCode,preregistration.nearby.centers,mosip.regex.email,mosip.regex.postalCode,mosip.regex.textField,mosip.regex.phone,mosip.regex.DOB,mosip.regex.CNIE,mosip.primary-language,mosip.secondary-language,mosip.default.dob,mosip.kernel.otp.expiry-time,mosip.kernel.otp.validation-attempt-threshold,mosip.kernel.otp.default-length,mosip.kernel.sms.number.length,mosip.kernel.pin.length,otpChannel.mobile -private static final String preReg_URI = "/booking/v0.1/preregistration/booking/book" -preReg_CreateApplnURI = /preregistration/v1/applications -preReg_FetchRegistrationDataURI = /preregistration/v1/applications/{preRegistrationId} -preReg_FetchPreRegistrationByDateAndTimeURI=/preregistration/v1/demographic/applications/byDateTime -preReg_FetchStatusOfApplicationURI =/preregistration/v1/applications/status/{preRegistrationId} -preReg_FetchAllApplicationCreatedByUserURI=/preregistration/v1/applications -preReg_DiscardApplnURI = /preregistration/v1/applications/{preRegistrationId} -preReg_UpdateStatusAppURI=/preregistration/v1/applications/{preRegistrationId} -#QRCode Service API related URI's -qrCode_URI=/preregistration/v1/qrCode/generate -preReg_DelAllDocumentByPreIdURI = /preregistration/v1/documents/preregistration/ - -#Document API related URI's -preReg_DocUploadURI = /preregistration/v1/documents/ -preReg_DocumentUploadURI = /preregistration/v1/documents/{preRegistrationId} -preReg_FetchAllDocumentURI = /preregistration/v1/documents/{preRegistrationId} -prereg_DeleteDocumentByDocIdURI = /preregistration/v1/documents/ -preReg_DeleteAllDocumentByPreIdURI = /preregistration/v1/documents/preregistration/ -preReg_CopyDocumentsURI = /preregistration/v1/documents/ -preReg_DeleteAllDocumentByPreIdURI1 = /preregistration/v1/documents/preregistration/ - -preReg_BookingAppointmenturi =/preregistration/v1/appointment/{preRegistrationId} -preReg_BookingAppointmentURI =/preregistration/v1/appointment/ -preReg_CancelAppointmenturi = /preregistration/v1/appointment/{preRegistrationId} -#preReg_CancelAppointmenturi= /preregistration/v1/appointment/ -preReg_FecthAppointmentDetailsuri=/preregistration/v1/appointment/{preRegistrationId} -#preReg_FetchCenterIDURI = /preregistration/v1/appointment/availability/ - - - -preReg_GetDocByDocId = /preregistration/v1/documents/ -preReg_GetDocByPreId = /preregistration/v1/documents/preregistration/ - - -#Booking Service API related URI's -preReg_BookingAppointmentURI =/preregistration/v1/appointment/ -preReg_MultipleBookingAppointmentURI =/preregistration/v1/appointment -preReg_FetchCenterIDURI = /preregistration/v1/appointment/availability/ -preReg_FetchCenterIDuri = /preregistration/v1/appointment/availability/{registrationCenterId} -preReg_FecthAppointmentDetailsURI=/preregistration/v1/appointment/ -preReg_CancelAppointmentURI = /preregistration/v1/appointment/ -preReg_RetriveBookedPreIdsByRegId=/preregistration/v1/appointment/preRegistrationId/ -preReg_SyncMasterDataURI=/preregistration/v1/batch/availability/sync - - - -#Notification Service API related URI's -preReg_NotifyURI=/preregistration/v1/notification/notify - -#Booking Service API related URI's - -preReg_FetchBookedPreIdByRegIdURI = /preregistration/v1/booking/appointment/preIdsByRegId -preReg_DiscardBookingURI=/preregistration/v1/booking/appointment -preReg_SyncMasterDataURI=/preregistration/v1/booking/appointment/availability/sync - - - -preReg_ConsumedPreregistrationURI =/preregistration/v1/sync/reverseDataSync -preReg_FetchAllPreRegistrationIdsURI = /preregistration/v1/sync -preReg_DataSyncnURI = /preregistration/v1/sync/{preRegistrationId} -preReg_ExpiredURI=/preregistration/v1/batch/expiredStatus -preReg_syncAvailability=/preregistration/v1/appointment/availability/sync - -preReg_ReverseDataSyncURI=/preregistration/v1/sync/consumedPreRegIds -preReg_ConsumedURI=/preregistration/v1/batch/consumedStatus -preReg_NotifyURI=/preregistration/v1/notification/notify -invalidateToken_URI=/preregistration/v1/login/invalidateToken -preReg_translitrationRequestURI=/preregistration/v1/transliteration/transliterate -otpSend_URI=/preregistration/v1/login/sendOtp -validateOTP_URI=/preregistration/v1/login/validateOtp -preReg_AdminTokenURI=/v1/authmanager/authenticate/useridPwd -preReg_GetPreRegistrationConfigData=/preregistration/v1/login/config diff --git a/api-test/src/main/resources/config/IDRepo2.properties b/api-test/src/main/resources/config/IDRepo2.properties deleted file mode 100644 index d2cface22..000000000 --- a/api-test/src/main/resources/config/IDRepo2.properties +++ /dev/null @@ -1,100 +0,0 @@ -# ------------------------------------------------------------------------------------------- -# Properties File that will defined from ID Repo for specific request and Response elements -# which will be used during automation. This is common place for update -# - -req.Documentrequest=Document request - - -key=value - -#PreRegistration resource uris -#Make sure all resource apis are covered - -private static final String preReg_URI = "/booking/v0.1/pre-registration/booking/book" -preReg_CreateApplnURI = /preregistration/v1/demographic/applications -preReg_FetchRegistrationDataURI = /pre-registration/v1/demographic/applications/details -preReg_FetchPreRegistrationByDateAndTimeURI=/pre-registration/v1/demographic/applications/byDateTime -preReg_FetchStatusOfApplicationURI =/pre-registration/v1/demographic//applications/status -preReg_FetchAllApplicationCreatedByUserURI=/pre-registration/v1/demographic/applications -preReg_DiscardApplnURI = /pre-registration/v1/demographic/applications -preReg_UpdateStatusAppURI=/pre-registration/v1/demographic/applications - - -preReg_DocumentUploadURI = /pre-registration/v1/document/documents -preReg_FetchAllDocumentURI = /pre-registration/v1/document/documents -prereg_DeleteDocumentByDocIdURI = /pre-registration/v1/document/documents -preReg_DeleteAllDocumentByPreIdURI = /pre-registration/v1/document/documents/byPreRegId - -preReg_CopyDocumentsURI = /pre-registration/v1/document/documents/copy -preReg_BookingAppointmentURI =/pre-registration/v1/booking/appointment -preReg_CancelAppointmentURI = /pre-registration/v1/booking/appointment -preReg_FecthAppointmentDetailsURI=/pre-registration/v1/booking/appointment -preReg_FetchCenterIDURI = /pre-registration/v1/booking/appointment/availability -preReg_FetchBookedPreIdByRegIdURI = /pre-registration/v1/booking/appointment/preIdsByRegId -preReg_DiscardBookingURI=/pre-registration/v1/booking/appointment -preReg_SyncMasterDataURI=/pre-registration/v1/booking/appointment/availability/sync -preReg_RetriveBookedPreIdsByRegId=/pre-registration/v1/booking/appointment/preIdsByRegId - - -preReg_ConsumedPreregistrationURI =/pre-registration/v1/sync/reverseDataSync -preReg_FetchAllPreRegistrationIdsURI = /pre-registration/v1/sync/datasync -preReg_DataSyncnURI = /pre-registration/v1/sync/datasync -preReg_ExpiredURI=/pre-registration/v1/batchjob/expiredStatus - -preReg_ReverseDataSyncURI=/pre-registration/v1/sync/datasync/store -preReg_ConsumedURI=/pre-registration/v1/batchjob//consumedStatus -preReg_NotifyURI=/pre-registration/v1/notification/notify -invalidateToken_URI=/pre-registration/v1/login/invalidateToken -preReg_translitrationRequestURI=/pre-registration/v1/transliteration/transliterate -otpSend_URI=/preregistration/v1/login/sendOtp -validateOTP_URI=/pre-registration/v1/login/validateOtp - -private static final String preReg_URI = "/booking/v0.1/preregistration/booking/book" -preReg_CreateApplnURI = /preregistration/v1/applications -preReg_FetchRegistrationDataURI = /preregistration/v1/applications/{preRegistrationId} -preReg_FetchPreRegistrationByDateAndTimeURI=/preregistration/v1/demographic/applications/byDateTime -preReg_FetchStatusOfApplicationURI =/preregistration/v1/applications/status/{preRegistrationId} -preReg_FetchAllApplicationCreatedByUserURI=/preregistration/v1/applications -preReg_DiscardApplnURI = /preregistration/v1/applications/{preRegistrationId} -preReg_UpdateStatusAppURI=/preregistration/v1/applications/{preRegistrationId} - - -preReg_DocumentUploadURI = /preregistration/v1/documents/{preRegistrationId} -preReg_FetchAllDocumentURI = /preregistration/v1/document/documents -prereg_DeleteDocumentByDocIdURI = /preregistration/v1/document/documents -preReg_DeleteAllDocumentByPreIdURI = /preregistration/v1/document/documents/byPreRegId - -preReg_CopyDocumentsURI = /preregistration/v1/document/documents/copy -preReg_BookingAppointmentURI =/preregistration/v1/booking/appointment -preReg_CancelAppointmentURI = /preregistration/v1/booking/appointment -preReg_FecthAppointmentDetailsURI=/preregistration/v1/booking/appointment -preReg_FetchCenterIDURI = /preregistration/v1/appointment/availability/{registrationCenterId} -preReg_FetchBookedPreIdByRegIdURI = /preregistration/v1/booking/appointment/preIdsByRegId -preReg_DiscardBookingURI=/preregistration/v1/booking/appointment -preReg_SyncMasterDataURI=/preregistration/v1/booking/appointment/availability/sync -preReg_RetriveBookedPreIdsByRegId=/preregistration/v1/booking/appointment/preIdsByRegId - - -preReg_ConsumedPreregistrationURI =/preregistration/v1/sync/reverseDataSync -preReg_FetchAllPreRegistrationIdsURI = /preregistration/v1/sync/datasync -preReg_DataSyncnURI = /preregistration/v1/sync/datasync -preReg_ExpiredURI=/preregistration/v1/batchjob/expiredStatus - -preReg_ReverseDataSyncURI=/preregistration/v1/sync/datasync/store -preReg_ConsumedURI=/preregistration/v1/batchjob//consumedStatus -preReg_NotifyURI=/preregistration/v1/notification/notify -invalidateToken_URI=/preregistration/v1/login/invalidateToken -preReg_translitrationRequestURI=/preregistration/v1/transliteration/transliterate -otpSend_URI=/preregistration/v1/login/sendOtp -validateOTP_URI=/preregistration/v1/login/validateOtp -preReg_AdminTokenURI=/authmanager/v1/authenticate/useridPwd - - - - - - - - - diff --git a/api-test/src/main/resources/config/IDjson.properties b/api-test/src/main/resources/config/IDjson.properties deleted file mode 100644 index b78a17f43..000000000 --- a/api-test/src/main/resources/config/IDjson.properties +++ /dev/null @@ -1,2 +0,0 @@ -dateOfBirthEven=1998/01/01 -dateOfBirthOdd=1993/01/01 \ No newline at end of file diff --git a/api-test/src/main/resources/config/UmcValidationApis.properties b/api-test/src/main/resources/config/UmcValidationApis.properties deleted file mode 100644 index 2f8c62c6c..000000000 --- a/api-test/src/main/resources/config/UmcValidationApis.properties +++ /dev/null @@ -1,6 +0,0 @@ -registrationCentreHistory=/v1/masterdata/registrationcentershistory/ -machineHistory=/v1/masterdata/machineshistories/ -userMachineMapping=/v1/masterdata/getregistrationmachineusermappinghistory/ -valdiateWorkinHour=/v1/masterdata/registrationcenters/validate/ -deviceHistory=/v1/masterdata/deviceshistories/ -centerDeviceHistory=/v1/masterdata/registrationcenterdevicehistory/ \ No newline at end of file diff --git a/api-test/src/main/resources/config/adminQueries.properties b/api-test/src/main/resources/config/adminQueries.properties deleted file mode 100644 index 748b6ad0a..000000000 --- a/api-test/src/main/resources/config/adminQueries.properties +++ /dev/null @@ -1,908 +0,0 @@ -#create RegCenter with ID as teId1, regCenter should be under authUser(cookie) zone, in this these things may -#change: cntrTyp_code, location_code, holiday_loc_code, zone_code, lang_code. update them accordingly. -createRegCenter=INSERT INTO master.registration_center( \ - id, name, cntrtyp_code, addr_line1, addr_line2, addr_line3, latitude, \ - longitude, location_code, contact_phone, contact_person, number_of_kiosks, \ - working_hours, per_kiosk_process_time, center_start_time, center_end_time, \ - lunch_start_time, lunch_end_time, time_zone, holiday_loc_code, \ - zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, \ - is_deleted, del_dtimes) \ - VALUES ('Tcntr', 'Test Center', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ - '-6.453275', '14022', '944945765', 'John Doe', '3', \ - '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ - '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ - 'STT', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ - null, null); - -#create regcent by replacing the id and zone in upper query wit this regCentID(using this center to map device, machine, user) -regCentId1=Tcnt1 -regCentId2=Tcnt2 -zoneCode=BRK - -#delete created RegCenter with above IDs, here role will be replaced by username of AuthUser. -deleteRegCenter=delete from master.registration_center where id = 'Tcntr' and is_active = false and is_deleted = true and upd_by = 'role' -deleteRegCenter1=delete from master.registration_center where id = 'Tcnt1' or id = 'Tcnt2' -deleteCntrCrtdByApi= delete from master.registration_center where name = 'Test Center' -deleteWorkNonWorkDays=delete from master.reg_working_nonworking where regcntr_id IN (select id from master.registration_center where name = 'Test Center') -deleteExcptnlHolidy=delete from master.reg_exceptional_holiday where regcntr_id IN (select id from master.registration_center where name = 'Test Center') -deleteWorkNonWorkDaysUpdate=delete from master.reg_working_nonworking where regcntr_id IN ('Tcnt1','Tcntr') -deleteExcptnlHolidyUpdate=delete from master.reg_exceptional_holiday where regcntr_id IN ('Tcnt1','Tcntr') - -#map regCenter to device, device and regCenter should be under authUser(cookie) zone. here device_id and lang_code can change, -# update them accordingly -mapRegCentDevice=INSERT INTO master.reg_center_device( \ - regcntr_id, device_id, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ - VALUES ('Tcnt1', '3000025', 'eng', true, 'superadmin', '2019-09-04 12:28:11.553519', null, null, null, null); - -deleteMappedRegCentDevice=delete from master.reg_center_device where regcntr_id = 'Tcnt1' - -#map regCenter to machine, machine and regCenter should be under authUser(cookie) zone. here machine_id and lang_code can change, -# update them accordingly -mapRegCentMach=INSERT INTO master.reg_center_machine( \ - regcntr_id, machine_id, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ - VALUES ('Tcnt1', '10005', 'eng', true, 'superadmin', '2019-09-04 12:28:11.553519', null, null, null, null); - -deleteMappedRegCentMach=delete from master.reg_center_machine where regcntr_id = 'Tcnt1' - -#map regCenter to user, user and regCenter should be under authUser(cookie) zone. here user_id and lang_code can change, -# update them accordingly -mapRegCentUser=INSERT INTO master.reg_center_user( \ - regcntr_id, usr_id, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ - VALUES ('Tcnt1', '110033', 'eng', true, 'superadmin', '2019-09-04 12:28:11.553519', null, null, null, null); - -deleteMappedRegCentUser=delete from master.reg_center_user where regcntr_id = 'Tcnt1' - -#create Device with ID as Tdevice, Device should be under authUser(cookie) zone, in this these things may -#change: dspecId, zone_code, lang_code. update them accordingly. -createDevice=INSERT INTO master.device_master( \ - id, name, mac_address, serial_num, ip_address, validity_end_dtimes, dspec_id, zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ - VALUES ('Tdevice', 'TestDevice', '85-BB-97-4B-14-05', 'SZ5912878988', null, null, '165', 'CST', 'eng', true, 'superadmin', '2019-07-26 12:18:40.718295', null, null, null, null); - -#create device by replacing the id and zone in upper query with this deviceID(using this device to map regCenter) -deviceId1=Tdevice1 -deviceId2=Tdevice2 - -#delete created Device with above IDs, here role will be replaced by username of AuthUser. -deleteDevice=delete from master.device_master where id = 'Tdevice' and is_active = false and is_deleted = true and upd_by = 'role' -deleteDevice1=delete from master.device_master where id = 'Tdevice1' or id = 'Tdevice2' - -#create Machine with ID as Tmach, Machine should be under authUser(cookie) zone, in this these things may -#change: mspecId, zone_code, lang_code. update them accordingly. -createMachine=INSERT INTO master.machine_master( \ - id, name, mac_address, serial_num, ip_address, validity_end_dtimes, mspec_id, public_key, key_index, zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ - VALUES ('Tmach', 'TestMachine', '8C-16-45-5A-5D-0D', 'NM5328114630', '192.168.0.150', null, '1001', 'Pkey', 'KeyI', 'CST', 'eng', true, '110005', '2019-07-26 12:18:40.718295', null, null, null, null), \ - ('Tmac1', 'TestMachine', '8C-16-45-5A-5D-0D', 'NM5328114630', '192.168.0.150', null, '1001', 'Pkey', 'KeyI', 'CST', 'eng', true, '110005', '2019-07-26 12:18:40.718295', null, null, null, null), \ - ('Tmac2', 'TestMachine', '8C-16-45-5A-5D-0D', 'NM5328114630', '192.168.0.150', null, '1001', 'Pkey', 'KeyI', 'BRK', 'eng', true, '110005', '2019-07-26 12:18:40.718295', null, null, null, null); - -machineId1=Tmac1 - -#delete created Machine with above IDs, here role will be replaced by username of AuthUser. -deleteMachine=delete from master.machine_master where id = 'Tmach' and is_active = false and is_deleted = true and upd_by = 'role' -deleteMachine1=delete from master.machine_master where id = 'Tmac1' or id = 'Tmac2' - -#create location data -createLocation=INSERT INTO master.location( \ - code, name, hierarchy_level, hierarchy_level_name, parent_loc_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ - VALUES ('TestLoc_code_1','Test_Loc_B_1' , 3, 'City', 'KNT', 'eng', false, '110005', '2019-07-26 12:18:38.523228', null, null, null, null), \ - ('TestLoc_code_2','Test_Loc_B_2' , 2, 'Province', 'TestLoc_code_1', 'eng', true, '110005', '2019-07-26 12:18:38.523228', null, null, null, null), \ - ('TestLoc_code_2','Test_Loc_B_2' , 2, '\u0627\u0644\u0645\u062D\u0627\u0641\u0638\u0629', 'TestLoc_code_1', 'ara', true, '110005', '2019-07-26 12:18:38.523228', null, null, null, null), \ - ('TestLoc_code_3','Test_Loc_B_3' , 2, 'Province', 'TestLoc_code_1', 'eng', false, '110005', '2019-07-26 12:18:38.523228', null, null, null, null); - #delete created locations -deleteCreatedLocations=delete from master.location where cr_by = '110005' - -InsertRegDevice=insert into master.registered_device_master (code,dtype_code,dstype_code,status_code,device_id,device_sub_id,digital_id,serial_number,provider_name,provider_id,purpose,firmware,make,model,expiry_date,certification_level,is_active,cr_by,cr_dtimes) \ -values ('inActive-D1','Face' , 'Full face', 'Registered', 'TestDev1', '[0,1]', '{ \ - "serialNo" "Serial number1", \ - "make" "Microsoft", \ - "model\u201D : "ca3e7ab9-b4c3-4ae6-8251-579ef933890f", \ - "type" "Face" \ - "dp" "SYNCBYTE", \ - "dpId" "SYNCBYTE.TCI322", \ - "dateTime" "2025-01-01T00:00:00.000+05:30" \ -}', 'Serial number1', 'SYNCBYTE', 'SYNCBYTE.TCI322', 'Registration', 'TCI322L1.0', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', '2025-01-01T00:00:00.000+05:30 \ -', 'L0',False,'superadmin','now()'),('Revoked-D1','Face' , 'Full face', 'Revoked', 'TestDev1', '[0,1]', '{ \ - "serialNo" "Serial number2", \ - "make" "Microsoft", \ - "model\u201D : "ca3e7ab9-b4c3-4ae6-8251-579ef933890f", \ - "type" "Face" \ - "dp" "SYNCBYTE", \ - "dpId" "SYNCBYTE.TCI322", \ - "dateTime" "2025-01-01T00:00:00.000+05:30" \ -}', 'Serial number2', 'SYNCBYTE', 'SYNCBYTE.TCI322', 'Registration', 'TCI322L1.0', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', '2025-01-01T00:00:00.000+05:30 \ -', 'L0','TRUE','superadmin','now()'),('Retired-D1','Face' , 'Full face', 'Retired', 'TestDev1', '[0,1]', '{ \ - "serialNo" "Serial number3", \ - "make" "Microsoft", \ - "model\u201D : "ca3e7ab9-b4c3-4ae6-8251-579ef933890f", \ - "type" "Face" \ - "dp" "SYNCBYTE", \ - "dpId" "SYNCBYTE.TCI322", \ - "dateTime" "2025-01-01T00:00:00.000+05:30" \ -}', 'Serial number3', 'SYNCBYTE', 'SYNCBYTE.TCI322', 'Registration', 'TCI322L1.0', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', '2025-01-01T00:00:00.000+05:30 \ -', 'L0','TRUE','superadmin','now()'); - -InsertMDS=INSERT INTO master.mosip_device_service( \ - id, sw_binary_hash, sw_version, dprovider_id, dtype_code, dstype_code, make, model, sw_cr_dtimes, sw_expiry_dtimes, is_active, cr_by, cr_dtimes) \ - VALUES ('inActiveMDS', 'dummy data', 'inActiveMDSsVersion', 'SYNCBYTE.TCI322', 'Face' , 'Full face', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', 'now()', 'now()', False, '110005', 'now()'), \ - ('diffDtypMDS', 'dummy data', 'MDSsVersionDty', 'SYNCBYTE.TCI322', 'Finger' , 'Full face', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', 'now()', 'now()', True, '110005', 'now()'), \ - ('diffDstypMDS', 'dummy data', 'MDSsVersionDsTyp', 'SYNCBYTE.TCI322', 'Face' , 'Single', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', 'now()', 'now()', True, '110005', 'now()'), \ - ('difMakeMDS', 'dummy data', 'MDSsVersionMake', 'SYNCBYTE.TCI322', 'Face' , 'Full face', 'difMakeThanDev', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', 'now()', 'now()', True, '110005', 'now()'), \ - ('difModelMDS', 'dummy data', 'MDSsVersionModel', 'SYNCBYTE.TCI322', 'Face' , 'Full face', 'Microsoft', 'difModelThanDev', 'now()', 'now()', True, '110005', 'now()'), \ - ('diffDpId', 'dummy data', 'MDSsVersionDpid', 'SYNCBYTE.MC01A', 'Face' , 'Full face', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', 'now()', 'now()', True, '110005', 'now()'); - -DeleteRegDevice=delete from master.registered_device_master where code IN ('inActive-D1','Revoked-D1','Retired-D1','ActiveRegDev1'); -DeleteMDS=delete from master.mosip_device_service where id IN ('inActiveMDS','diffDtypMDS','diffDstypMDS','difMakeMDS','difModelMDS','diffDpId'); -DeleteRegDeviceCreatedByApi=delete from master.registered_device_master where device_id IN ('RegDeviceIdT1','RegDeviceIdT2','RegDeviceIdT3','3000025','3000045'); -validateHistory=select count(*) from master.registered_device_master_h where device_id IN ('RegDeviceIdT1','RegDeviceIdT2','RegDeviceIdT3','3000025','3000045'); -validateDeRegDevHistory=select count(*) from master.registered_device_master_h where device_id IN ('ActiveRegDev1'); - -InsertRegDeviceHistory=insert into master.registered_device_master_h (code,dtype_code,dstype_code,status_code,device_id,device_sub_id,digital_id,serial_number,provider_name,provider_id,purpose,firmware,make,model,expiry_date,certification_level,is_active,cr_by,cr_dtimes,eff_dtimes) values ('inActive-D1','Face' , 'Full face', 'Registered', 'TestDev1', '[0,1]', '{ "serialNo" "Serial number1", "make" "Microsoft", "model\u201D : "ca3e7ab9-b4c3-4ae6-8251-579ef933890f", "type" "Face" "dp" "SYNCBYTE", "dpId" "SYNCBYTE.TCI322", "dateTime" "2025-01-01T00:00:00.000+05:30" }', 'Serial number1', 'SYNCBYTE', 'SYNCBYTE.TCI322', 'Registration', 'TCI322L1.0', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', '2025-01-01T00:00:00.000+05:30 ', 'L0',False,'superadmin','now()','2019-11-22 10:11:30.854'),('Revoked-D1','Face' , 'Full face', 'Revoked', 'TestDev1', '[0,1]', '{ "serialNo" "Serial number2", "make" "Microsoft", "model\u201D : "ca3e7ab9-b4c3-4ae6-8251-579ef933890f", "type" "Face" "dp" "SYNCBYTE", "dpId" "SYNCBYTE.TCI322", "dateTime" "2025-01-01T00:00:00.000+05:30" }', 'Serial number2', 'SYNCBYTE', 'SYNCBYTE.TCI322', 'Registration', 'TCI322L1.0', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', '2025-01-01T00:00:00.000+05:30 ', 'L0','TRUE','superadmin','now()','2019-11-22 10:11:30.854'),('Retired-D1','Face' , 'Full face', 'Retired', 'TestDev1', '[0,1]', '{ "serialNo" "Serial number3", "make" "Microsoft", "model\u201D : "ca3e7ab9-b4c3-4ae6-8251-579ef933890f", "type" "Face" "dp" "SYNCBYTE", "dpId" "SYNCBYTE.TCI322", "dateTime" "2025-01-01T00:00:00.000+05:30" }', 'Serial number3', 'SYNCBYTE', 'SYNCBYTE.TCI322', 'Registration', 'TCI322L1.0', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', '2025-01-01T00:00:00.000+05:30 ', 'L0','TRUE','superadmin','now()','2019-11-22 10:11:30.854'); -InsertMDSHistory=INSERT INTO master.mosip_device_service_h( \ - id, sw_binary_hash, sw_version, dprovider_id, dtype_code, dstype_code, make, model, sw_cr_dtimes, sw_expiry_dtimes, is_active, cr_by, cr_dtimes,eff_dtimes) \ - VALUES ('inActiveMDS', 'dummy data', 'inActiveMDSsVersion', 'SYNCBYTE.TCI322', 'Face' , 'Full face', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', 'now()', 'now()', False, '110005', 'now()','2019-11-22 10:11:30.854'), \ - ('diffDtypMDS', 'dummy data', 'MDSsVersionDty', 'SYNCBYTE.TCI322', 'Finger' , 'Full face', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', 'now()', 'now()', True, '110005', 'now()','2019-11-22 10:11:30.854'), \ - ('diffDstypMDS', 'dummy data', 'MDSsVersionDsTyp', 'SYNCBYTE.TCI322', 'Face' , 'Single', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', 'now()', 'now()', True, '110005', 'now()','2019-11-22 10:11:30.854'), \ - ('difMakeMDS', 'dummy data', 'MDSsVersionMake', 'SYNCBYTE.TCI322', 'Face' , 'Full face', 'difMakeThanDev', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', 'now()', 'now()', True, '110005', 'now()','2019-11-22 10:11:30.854'), \ - ('difModelMDS', 'dummy data', 'MDSsVersionModel', 'SYNCBYTE.TCI322', 'Face' , 'Full face', 'Microsoft', 'difModelThanDev', 'now()', 'now()', True, '110005', 'now()','2019-11-22 10:11:30.854'), \ - ('diffDpId', 'dummy data', 'MDSsVersionDpid', 'SYNCBYTE.MC01A', 'Face' , 'Full face', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', 'now()', 'now()', True, '110005', 'now()','2019-11-22 10:11:30.854'); - -InsertSingleRegDeviceValues=('ActiveRegDev1','Face' , 'Full face', 'Registered', 'TestDev1', '[0,1]', '{ \ - "serialNo" "Serial number1", \ - "make" "Microsoft", \ - "model\u201D : "ca3e7ab9-b4c3-4ae6-8251-579ef933890f", \ - "type" "Face" \ - "dp" "SYNCBYTE", \ - "dpId" "SYNCBYTE.TCI322", \ - "dateTime" "2025-01-01T00:00:00.000+05:30" \ -}', 'Serial number4', 'SYNCBYTE', 'SYNCBYTE.TCI322', 'Registration', 'TCI322L1.0', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', '2025-01-01T00:00:00.000+05:30 \ -', 'L0',True,'superadmin','now()'); - -createDevProviderUpdate=INSERT INTO master.device_provider( \ - id, vendor_name, address, email, contact_number, certificate_alias, is_active, cr_by, cr_dtimes) \ - VALUES ('TestDPro1', 'TestVend1', 'testDevPro1', 'testDevProMail', '1234567890','testCerti', true, 110005, '2025-01-01T00:00:00.000+05:30'), ('TestDPro2', 'TestVend2', 'testDevPro2', 'testDevProMail2', '1234567890','testCerti', false, 110005, '2025-01-01T00:00:00.000+05:30'); -deleteDevProCreatedByAPI=delete from master.device_provider where cr_by IN ('110005'); -validateDevProHistory=select count(*) from master.device_provider_h where cr_by IN ('110005'); - -deleteFTPCreatedByAPI=delete from master.foundational_trust_provider where name IN ('TestFTP') -createFTPtoUpdate=INSERT INTO master.foundational_trust_provider( \ - id, name, address, email, contact_number, certificate_alias, is_active, cr_by, cr_dtimes) \ - VALUES ('TestFTP2', 'TestFTP1', 'Test Address', 'testEmail@test.com', '1234567890', 'testAlias', true, '110005', '2019-11-25 11:22:19.799'),('TestFTP1', 'TestFTP2', 'Test Address', 'testEmail@test.com', '1234567890', 'testAlias', true, '110005', '2019-11-25 11:22:19.799'); -deleteFTP=delete from master.foundational_trust_provider where id IN ('TestFTP1','TestFTP2'); -validateFTPHistory=select count(*) from master.foundational_trust_provider_h where name IN ('TestFTP'); - -#create RegCenter with ID as TestUnmap, regCenter should be under authUser(cookie) zone, in this these things may -#change: cntrTyp_code, location_code, holiday_loc_code, zone_code, lang_code. update them accordingly. -createRegCenterForUnmap1=INSERT INTO master.registration_center( \ - id, name, cntrtyp_code, addr_line1, addr_line2, addr_line3, latitude, \ - longitude, location_code, contact_phone, contact_person, number_of_kiosks, \ - working_hours, per_kiosk_process_time, center_start_time, center_end_time, \ - lunch_start_time, lunch_end_time, time_zone, holiday_loc_code, \ - zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, \ - is_deleted, del_dtimes) \ - VALUES ('TestUnmap', 'Test Center', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ - '-6.453275', '10106', '944945765', 'John Doe', '3', \ - '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ - '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ - 'CSB', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ - null, null), \ - ('TestUnmap1', 'Test Center', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ - '-6.453275', '10106', '944945765', 'John Doe', '3', \ - '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ - '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ - 'CSB', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ - null, null), \ - ('TestUnmap2', 'Test Center', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ - '-6.453275', '10106', '944945765', 'John Doe', '3', \ - '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ - '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ - 'NDR', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ - null, null); - -deleteRegCntrForUnmap= delete from master.registration_center where id in ('TestUnmap', 'TestUnmap1', 'TestUnmap2') - - -#create Device with ID as TestDeviceToMapNew, Device should be under authUser(cookie) zone, in this these things may -#change: dspecId, zone_code, lang_code. update them accordingly. -createDeviceForUnmap1=INSERT INTO master.device_master( \ - id, name, mac_address, serial_num, ip_address, validity_end_dtimes, dspec_id, zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ - VALUES ('TestDeviceToMapNew', 'TestDevice', '85-BB-97-4B-14-05', 'SZ5912878988', null, null, '165', 'CST', 'eng', true, 'superadmin', '2019-07-26 12:18:40.718295', null, null, null, null), \ - ('TestDeviceToMapNew1', 'TestDevice', '85-BB-97-4B-14-05', 'SZ5912878988', null, null, '165', 'CST', 'eng', true, 'superadmin', '2019-07-26 12:18:40.718295', null, null, null, null), \ - ('TestDeviceToMapNew2', 'TestDevice', '85-BB-97-4B-14-05', 'SZ5912878988', null, null, '165', 'NDR', 'eng', true, 'superadmin', '2019-07-26 12:18:40.718295', null, null, null, null); - -deleteUnmapDeviceByApi=delete from master.device_master where id in ('TestDeviceToMapNew','TestDeviceToMapNew1','TestDeviceToMapNew2') - - -#map regCenter to device, device and regCenter should be under authUser(cookie) zone. here device_id and lang_code can change, -# update them accordingly -mapRegCentDevice1=INSERT INTO master.reg_center_device( \ - regcntr_id, device_id, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ - VALUES ('TestUnmap', 'TestDeviceToMapNew', 'eng', true, 'superadmin', '2019-09-04 12:28:11.553519', null, null, null, null), \ - ('TestUnmap1', 'TestDeviceToMapNew2', 'eng', true, 'superadmin', '2019-09-04 12:28:11.553519', null, null, null, null), \ - ('TestUnmap2', 'TestDeviceToMapNew1', 'eng', true, 'superadmin', '2019-09-04 12:28:11.553519', null, null, null, null); - -deleteMappedRegCentDevice1=delete from master.reg_center_device where regcntr_id in ('TestUnmap','TestUnmap1','TestUnmap2') - - -#create RegCenter with ID as MapZone1, regCenter should be under authUser(cookie) zone, in this these things may -#change: cntrTyp_code, location_code, holiday_loc_code, zone_code, lang_code. update them accordingly. -createRegCenterForMapMCReg=INSERT INTO master.registration_center( \ - id, name, cntrtyp_code, addr_line1, addr_line2, addr_line3, latitude, \ - longitude, location_code, contact_phone, contact_person, number_of_kiosks, \ - working_hours, per_kiosk_process_time, center_start_time, center_end_time, \ - lunch_start_time, lunch_end_time, time_zone, holiday_loc_code, \ - zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, \ - is_deleted, del_dtimes) \ - VALUES ('MapZone1', 'Test Center', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ - '-6.453275', '10106', '944945765', 'John Doe', '0', \ - '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ - '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ - 'CSB', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ - null, null), \ - ('MapDevReg', 'Test Center', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ - '-6.453275', '10106', '944945765', 'John Doe', '0', \ - '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ - '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ - 'MRS', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ - null, null); - -deleteRegCntrByApiMac= delete from master.registration_center where id in ('MapZone1', 'MapDevReg'); - - -#create Machine with ID as RegCntrMa, Device should be under authUser(cookie) zone, in this these things may -#change: dspecId, zone_code, lang_code. update them accordingly. -createMachineForMapMCReg=INSERT INTO master.machine_master( \ - id, name, mac_address, serial_num, ip_address, validity_end_dtimes, mspec_id, public_key, key_index, zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ - VALUES ('RegCntrMa', 'TestDevice', '85-BB-97-4B-14-05', 'SZ5912878988', null, null, '1001','pkeyI', 'pkeyI', 'CST', 'eng', true, 'superadmin', '2019-07-26 12:18:40.718295', null, null, null, null), \ - ('OutZone', 'TestDevice', '85-BB-97-4B-14-05', 'SZ5912878988', null, null, '1001','pkeyI', 'pkeyI', 'MRS', 'eng', true, 'superadmin', '2019-07-26 12:18:40.718295', null, null, null, null); - -deleteMapMachineByApi=delete from master.machine_master where id in ('RegCntrMa','OutZone'); - - -#map regCenter to machine, machine and regCenter should be under authUser(cookie) zone. here device_id and lang_code can change, -# update them accordingly -mapRegCentMachine1=INSERT INTO master.reg_center_machine( \ - regcntr_id, machine_id, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ - VALUES ('MapZone1', 'RegCntrMa', 'eng', true, 'superadmin', '2019-09-04 12:28:11.553519', null, null, null, null); - -deleteMappedRegCentMachine1=delete from master.reg_center_machine where regcntr_id in ('MapZone1'); - -#return the number of kiosks from registration center table -validateNoOfKiosks= SELECT number_of_kiosks \ - FROM master.registration_center \ - WHERE id in ('MapZone1'); - -createRegCenterWithDifferentData=INSERT INTO master.registration_center( \ - id, name, cntrtyp_code, addr_line1, addr_line2, addr_line3, latitude, \ - longitude, location_code, contact_phone, contact_person, number_of_kiosks, \ - working_hours, per_kiosk_process_time, center_start_time, center_end_time, \ - lunch_start_time, lunch_end_time, time_zone, holiday_loc_code, \ - zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, \ - is_deleted, del_dtimes) \ - VALUES ('TRegCntr1', 'TestRegCenter', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ - '-6.453275', '10106', '944945765', 'John Doe', '3', \ - '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ - '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ - 'CST', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ - null, null),\ - ('TRegCntr2', 'TestRegCenter2', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ - '-6.453275', '10106', '944945765', 'John Doe', '3', \ - '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ - '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ - 'RBT', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ - null, null),\ - ('TRegCntr3', 'TestRegCenter3', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ - '-6.453275', '10106', '944945765', 'John Doe', '3', \ - '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ - '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ - 'CST', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ - null, null),\ - ('TRegCntr4', 'TestRegCenter3', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ - '-6.453275', '10106', '944945765', 'John Doe', '3', \ - '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ - '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ - 'RBT', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ - 'true', null),\ - ('TRegCntr5', 'TestRegCenter3', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ - '-6.453275', '10106', '944945765', 'John Doe', '3', \ - '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ - '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ - 'BSN', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ - null, null),\ - ('TRegCntr6', 'TestRegCenter6', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ - '-6.453275', '10106', '944945765', 'John Doe', '3', \ - '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ - '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ - 'RBT', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ - 'true', null),\ - ('TRegCntr7', 'TestRegCenter6', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ - '-6.453275', '10106', '944945765', 'John Doe', '3', \ - '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ - '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ - 'CST', 'eng', 'false', '110005', '2019-08-27 12:28:11.553519', null, null, \ - 'true', null); - - -deleteRegCntrByApi= delete from master.registration_center where id in ('TRegCntr1', 'TRegCntr2', 'TRegCntr3','TRegCntr4','TRegCntr5','TRegCntr6','TRegCntr7') - - -createDeviceWithDifferentData=INSERT INTO master.device_master( \ - id, name, mac_address, serial_num, ip_address, validity_end_dtimes, dspec_id, zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ - VALUES ('TestDevice1', 'che iris 1', 'D4-3D-7E-C0-8C-4A','ceec5f62-77b7-46f3-816b-3e734305a9c8', '172.23.174.113', \ - '2020-08-07 09:13:22.221', '327', 'CST', 'eng', 'false', '110006', '2019-11-25 11:22:19.799', null, null, null, null),\ - ('TestDevice2', 'che iris 2', 'D4-3D-7E-C0-8C-4A','ceec5f62-77b7-46f3-816b-3e734305a9c8', '172.23.174.113', \ - '2020-08-07 09:13:22.221', '327', 'CST', 'eng', 'false', '110006', '2019-11-25 11:22:19.799', null, null, null, null),\ - ('TestDevice3', 'che iris 3', 'D4-3D-7E-C0-8C-4A','ceec5f62-77b7-46f3-816b-3e734305a9c8', '172.23.174.113', \ - '2020-08-07 09:13:22.221', '327', 'NDR', 'eng', 'false', '110006', '2019-11-25 11:22:19.799', null, null, null, null),\ - ('TestDevice4', 'che iris 3', 'D4-3D-7E-C0-8C-4A','ceec5f62-77b7-46f3-816b-3e734305a9c8', '172.23.174.113', \ - '2020-08-07 09:13:22.221', '327', 'BSN', 'eng', 'false', '110006', '2019-11-25 11:22:19.799', null, null, null, null),\ - ('TestDevice5', 'che iris 3', 'D4-3D-7E-C0-8C-4A','ceec5f62-77b7-46f3-816b-3e734305a9c8', '172.23.174.113', \ - '2020-08-07 09:13:22.221', '327', 'CSB', 'eng', 'false', '110006', '2019-11-25 11:22:19.799', null, null, null, null),\ - ('TestDevice6', 'che iris 3', 'D4-3D-7E-C0-8C-4A','ceec5f62-77b7-46f3-816b-3e734305a9c8', '172.23.174.113', \ - '2020-08-07 09:13:22.221', '327', 'CST', 'eng', 'false', '110006', '2019-11-25 11:22:19.799', null, null, null, null),\ - ('TestDevice7', 'che iris 3', 'D4-3D-7E-C0-8C-4A','ceec5f62-77b7-46f3-816b-3e734305a9c8', '172.23.174.113', \ - '2020-08-07 09:13:22.221', '327', 'CST', 'eng', 'false', '110006', '2019-11-25 11:22:19.799', null, null, 'true', null); - -deleteDeviceByApi= delete from master.device_master where id in ('TestDevice1', 'TestDevice2', 'TestDevice3','TestDevice4','TestDevice5','TestDevice6','TestDevice7') - -deleteDeviceRegCenterMapping = delete from master.reg_center_device where regcntr_id in ('TRegCntr1','TRegCntr3') - -createUser=INSERT INTO master.user_detail(\ - id, uin, name, email, mobile, status_code, lang_code, last_login_dtimes, last_login_method, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ - VALUES ('testuser', '7234451333', 'Dummy User', 'Dummy@xyz.com', '818876500', 'ACT', 'eng', null, 'PWD', 'true', 'superadmin', '2019-10-21 06:50:27.696842', null, null, null, null),\ - ('testuserdiffzone', '7234451333', 'Dummy User', 'Dummy@xyz.com', '818876500', 'ACT', 'eng', null, 'PWD', 'true', 'superadmin', '2019-10-21 06:50:27.696842', null, null, null, null),\ - ('testusernewzone', '7234451333', 'Dummy User', 'Dummy@xyz.com', '818876500', 'ACT', 'eng', null, 'PWD', 'true', 'superadmin', '2019-10-21 06:50:27.696842', null, null, null, null),\ - ('testuservalid', '7234451333', 'Dummy User', 'Dummy@xyz.com', '818876500', 'ACT', 'eng', null, 'PWD', 'true', 'superadmin', '2019-10-21 06:50:27.696842', null, null, null, null),\ - ('testusernorole', '7234451333', 'Dummy User', 'Dummy@xyz.com', '818876500', 'ACT', 'eng', null, 'PWD', 'true', 'superadmin', '2019-10-21 06:50:27.696842', null, null, null, null); - -deleteUserdetail= delete from master.user_detail where id in ('testuser', 'testuserdiffzone', 'testusernewzone','testuservalid','testusernorole') - -createZoneUserWithDifferentData=INSERT INTO master.zone_user(\ - zone_code, usr_id, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ - VALUES ('CST', 'testuser', 'eng', 'true', 'superadmin', '2019-10-21 06:50:27.950738', null, null, null, null),\ - ('NDR', 'testuserdiffzone', 'eng', 'true', 'superadmin', '2019-10-21 06:50:27.950738', null, null, null, null),\ - ('CSB', 'testusernewzone', 'eng', 'true', 'superadmin', '2019-10-21 06:50:27.950738', null, null, null, null),\ - ('CST', 'testuservalid', 'eng', 'true', 'superadmin', '2019-10-21 06:50:27.950738', null, null, null, null),\ - ('CST', 'testusernorole', 'eng', 'true', 'Registration Admin', '2019-10-21 06:50:27.950738', null, null, null, null); - -deleteUser= delete from master.zone_user where usr_id in ('testuser', 'testuserdiffzone', 'testusernewzone','testuservalid','testusernorole') - -deleteUserRegCenterMapping=delete from master.reg_center_user where regcntr_id in ('TRegCntr1') - -mapUserRegCenter=INSERT INTO master.reg_center_user(\ - regcntr_id, usr_id, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ - VALUES ('TRegCntr1', 'testuser', 'eng', 'true', 'superadmin', '2019-10-21 06:50:27.950738', null, null, null, null),\ - ('TRegCntr2', 'testuservalid', 'eng', 'true', 'superadmin', '2019-10-21 06:50:27.950738', null, null, null, null),\ - ('TRegCntr4', 'testuserdiffzone', 'eng', 'true', 'superadmin', '2019-10-21 06:50:27.950738', null, null, null, null),\ - ('TRegCntr3', 'testuserdiffzone', 'eng', 'true', 'superadmin', '2019-10-21 06:50:27.950738', null, null, null, null),\ - ('TRegCntr5', 'testusernewzone', 'eng', 'true', 'superadmin', '2019-10-21 06:50:27.950738', null, null, null, null),\ - ('TRegCntr6', 'testusernorole', 'eng', 'true', 'superadmin', '2019-10-21 06:50:27.950738', null, null, null, null); - -deleteMapUserRegCenter=delete from master.reg_center_user where regcntr_id in ('TRegCntr1','TRegCntr2','TRegCntr3','TRegCntr4','TRegCntr5','TRegCntr6'); - -deleteMDSCreatedByAPI=delete from master.mosip_device_service where cr_by in ('110005'); - -validateMDSHistory=select count(*) from master.mosip_device_service_h where sw_version IN ('TestMDS1','TestMDS2'); - -InsertMDSToUpdate=INSERT INTO master.mosip_device_service( \ - id, sw_binary_hash, sw_version, dprovider_id, dtype_code, dstype_code, make, model, sw_cr_dtimes, sw_expiry_dtimes, is_active, cr_by, cr_dtimes) \ - VALUES ('UpdateTestMDS', 'dummy data', 'TestMDS1', 'SYNCBYTE.TCI322', 'Face' , 'Full face', 'Microsoft', 'ca3e7ab9-b4c3-4ae6-8251-579ef933890f', 'now()', 'now()', true, '110005', 'now()') - - -createMachine2Eng=INSERT INTO master.machine_master( \ - id, name, mac_address, serial_num, ip_address, validity_end_dtimes, mspec_id, public_key, key_index, zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ - VALUES ('Test', 'Dummy MachineTest', '8C-16-45-5A-5D-0D', 'NM5328114630', '192.168.0.150', null, '1001', 'pkeyI', 'pkeyI', 'CST', 'eng', true, '110005', '2019-07-26 12:18:40.718295', null, null, null, null),\ - ('TestF', 'Dummy MachineTest', '8C-16-45-5A-5D-0D', 'NM5328114630', '192.168.0.150', null, '1001', 'pkeyI', 'pkeyI', 'CST', 'eng', false, '110005', '2019-07-26 12:18:40.718295', null, null, null, null); - -deleteMachine2Eng=delete from master.machine_master where cr_by in ('110005'); - -createMachine2EngUpdate=INSERT INTO master.machine_master( \ - id, name, mac_address, serial_num, ip_address, validity_end_dtimes, mspec_id, public_key, key_index, zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ - VALUES ('TestSpecNe', 'Test123', '8C-16-45-5A-5D-0D', 'NM5328114630', '192.168.0.150', null, '1001', 'pkeyI', 'pkeyI', 'CST', 'eng', true, '110005', '2019-07-26 12:18:40.718295', null, null, null, null),\ - ('Test', 'Dummy Machine', '8C-16-45-5A-5D-0D', 'NM5328114630', '192.168.0.150', null, '1001', 'pkeyI', 'pkeyI', 'CST', 'eng', true, '110005', '2019-07-26 12:18:40.718295', null, null, null, null),\ - ('Test', 'Dummy Machine', '8C-16-45-5A-5D-0D', 'NM5328114630', '192.168.0.150', null, '1001', 'pkeyI', 'pkeyI', 'CST', 'ara', true, '110005', '2019-07-26 12:18:40.718295', null, null, null, null); - -deleteMachine2EngUpdate=delete from master.machine_master where cr_by in ('110005'); - -createDocumentType=INSERT INTO master.doc_type( \ - code, name, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ - VALUES ('Act','Activate flag test','Test flag activation','eng','false','superadmin','2019-07-26 12:18:40.718295',null,null,null,null),\ - ('Test','Contrat de location','Contrat de location dadresse','eng','true','superadmin','2019-07-26 12:18:40.718295',null,null,null,null),\ - ('DeAct','Deactivate flag test','Test flag deactivation','eng','true','superadmin','2019-07-26 12:18:40.718295',null,null,null,null); -updateDocumentType=,('Test','Contrat de location','Contrat de location dadresse','ara','false','superadmin','2019-07-26 12:18:40.718295',null,null,null,null); - -deleteDocumentType=delete from master.doc_type where code in ('TestDoc01','TestDoc2','Act','DeAct','Test') or cr_by ='110005'; - -createDeviceForUpdate=INSERT INTO master.device_master( \ - id, name, mac_address, serial_num, ip_address, validity_end_dtimes, dspec_id, zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ - VALUES ('TestDevicePro12', 'test dev2', 'D4-3D-7E-C0-8C-4A','ceec5f62-77b7-46f3-816b-3e734305a9c8', '172.23.174.113', \ - '2020-08-07 09:13:22.221', '327', 'CST', 'eng', 'true', '110006', '2019-11-25 11:22:19.799', null, null, null, null), \ - ('TestDevicePro12', 'test dev2', 'D4-3D-7E-C0-8C-4A','ceec5f62-77b7-46f3-816b-3e734305a9c8', '172.23.174.113', \ - '2020-08-07 09:13:22.221', '327', 'CST', 'ara', 'true', '110006', '2019-11-25 11:22:19.799', null, null, null, null), \ - ('TestDevicePro13', 'test dev2', 'D4-3D-7E-C0-8C-4A','ceec5f62-77b7-46f3-816b-3e734305a9c8', '172.23.174.113', \ - '2020-08-07 09:13:22.221', '327', 'CST', 'eng', 'true', '110006', '2019-11-25 11:22:19.799', null, null, null, null); - -deleteDeviceForUpdate=delete from master.device_master where id in ('TestDevicePro12','TestDevicePro13'); - -createDevice2Eng=INSERT INTO master.device_master( \ - id, name, mac_address, serial_num, ip_address, validity_end_dtimes, dspec_id, zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ - VALUES ('id1', 'testdeviceswat1', 'D4-3D-7E-C0-8C-4A', 'ceec5f62-77b7-46f3-816b-3e734305a9c8', '172.23.174.113', '2018-12-10T06:12:52.994Z', '327', \ - 'CST', 'eng', 'false', '110005', '2019-11-25 11:22:19.799', null, null, null, null),\ - ('id2', 'testdeviceswat2', 'D4-3D-7E-C0-8C-4A', 'ceec5f62-77b7-46f3-816b-3e734305a9c8', '172.23.174.113', '2018-12-10T06:12:52.994Z', '327', \ - 'CST', 'eng', 'true', '110005', '2019-11-25 11:22:19.799', null, null, null, null); - - -deleteDevice2Eng=delete from master.device_master where name in ('testdeviceswat1','testdeviceswat2','testDevicedummy','testDevicedummy1', 'testDeviceDummy2'); - -validateDeviceHistory=select count(*) from master.device_master_h where name IN ('testdeviceswat1','testdeviceswat2','testDevicedummy','testDevicedummy1'); -deleteDeviceHistory=delete from master.device_master_h where name in ('testdeviceswat1','testdeviceswat2','testDevicedummy','testDevicedummy1'); - -validateMachineHistory=select count(*) from master.machine_master_h where name IN ('Dummy MachineTest'); - -createRegCenterWorkingNonWorkingDays = INSERT INTO master.registration_center( \ - id, name, cntrtyp_code, addr_line1, addr_line2, addr_line3, latitude, \ - longitude, location_code, contact_phone, contact_person, number_of_kiosks, \ - working_hours, per_kiosk_process_time, center_start_time, center_end_time, \ - lunch_start_time, lunch_end_time, time_zone, holiday_loc_code, \ - zone_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, \ - is_deleted, del_dtimes) \ - VALUES ('59395', 'TestRegCenter', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ - '-6.453275', '10106', '944945765', 'John Doe', '3', \ - '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ - '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ - 'CST', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ - null, null),\ - ('59396', 'TestRegCenter', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ - '-6.453275', '10106', '944945765', 'John Doe', '3', \ - '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ - '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ - 'CST', 'ara', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ - null, null),\ - ('59397', 'TestRegCenter', 'REG', 'addr_line1', 'addr_line2', 'addr_line3', '34.52117', \ - '-6.453275', '10106', '944945765', 'John Doe', '3', \ - '8:00:00', '00:15:00', '09:00:00', '17:00:00', \ - '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'KTA', \ - 'CST', 'eng', true, '110005', '2019-08-27 12:28:11.553519', null, null, \ - 'false', null); - -deleteRegCenterWorkNonWork = delete from master.registration_center where id in ('59395', '59396','59397') - -mapworkingDaysToRegCenter = INSERT INTO master.reg_working_nonworking(\ - regcntr_id, day_code, lang_code, is_working, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, \ - is_deleted, del_dtimes)\ - VALUES ('59395', '101', 'eng', 'false', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null),\ - ('59395', '102', 'eng', 'true', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null),\ - ('59395', '103', 'eng', 'true', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null),\ - ('59395', '104', 'eng', 'true', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null),\ - ('59395', '105', 'eng', 'true', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null),\ - ('59395', '106', 'eng', 'true', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null),\ - ('59395', '107', 'eng', 'false', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null),\ - ('59396', '101', 'ara', 'true', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null),\ - ('59396', '102', 'ara', 'true', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null),\ - ('59396', '103', 'ara', 'true', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null),\ - ('59396', '104', 'ara', 'true', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null),\ - ('59396', '105', 'ara', 'true', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null),\ - ('59396', '106', 'ara', 'false', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null),\ - ('59396', '107', 'ara', 'false', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null,null,null,null); - -deleteRegCenterWorkingdaysMapping = delete from master.reg_working_nonworking where regcntr_id in ('59395', '59396') - -regCntrExceptionalHolidaysMapping = INSERT INTO master.reg_exceptional_holiday(\ - regcntr_id, hol_date, hol_name, hol_reason, lang_code, is_active, cr_by, \ - cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ - VALUES ('59395', '2020-01-04', 'Emergency Holiday', 'Emergency Holiday', 'eng', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null, null, null, null),\ - ('59395', '2019-11-26', 'Emergency Holiday', 'Emergency Holiday', 'eng', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null, null, null, null),\ - ('59395', '2019-03-10', 'Emergency Holiday', 'Emergency Holiday', 'eng', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null, null, null, null),\ - ('59395', '2019-09-24', 'Emergency Holiday', 'Emergency Holiday', 'eng', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null, null, null, null),\ - ('59396', '2019-02-28', 'Emergency Holiday', 'Emergency Holiday', 'ara', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null, null, null, null),\ - ('59396', '2019-07-11', 'Emergency Holiday', 'Emergency Holiday', 'ara', 'true', 'superadmin', '2020-01-02 11:59:14.79031', null, null, null, null); - -deleteRegCntrExceptionalHolidaysMapping=delete from master.reg_exceptional_holiday where regcntr_id in ('59395','59396') - -createHoliday= INSERT INTO master.loc_holiday(\ - id, location_code, holiday_date, holiday_name, holiday_desc, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ - VALUES (20010191,'KTA','2020-07-15','Labour Day','Automation labour Holiday','eng','true','110005','2020-05-07T05:30:46.227Z',null,null,null,null); - -deleteUpdateHoliday= delete from master.loc_holiday where cr_by='110005' ; - - -updateHoliday= INSERT INTO master.loc_holiday(\ - id, location_code, holiday_date, holiday_name, holiday_desc, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ - VALUES (20000191,'KTA','2020-07-15','Labour Day','Automation labour Holiday','eng','true','110005','2020-05-07T05:30:46.227Z',null,null,null,null); - - -createTitle= INSERT INTO master.title(\ - code, name,descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ - VALUES ('TEST4','TEST4','TEST4','eng','false','110005','2020-05-18T05:19:53.996Z',null,null,null,null); - -createTitleDelete= delete from master.title where cr_by='110005'; - -checkPrimDataAgainstSecData= select count(*) from master.title where lang_code='ara' and code='TEST5'; - -updateCreatedTitle= INSERT INTO master.title(\ - code, name,descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ - VALUES ('TEST-auto','Master-auto','MASTER-auto','eng','false','110005','2020-05-26T05:19:53.996Z',null,null,null,null); - -deleteUpdatedTitle= delete from master.title where cr_by='110005'; - -createMachineType= INSERT INTO master.machine_type(\ - code, name, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ - VALUES ('Laptop-0002','Laptop-0002 test','Laptop-0002 info','eng','false','110005','2020-05-27T05:19:53.996Z',null,null,null,null); - -deleteMachineType= delete from master.machine_type where cr_by='110005'; -checkPrimDataAgainstSecData_MachineType= select count(*) from master.machine_type where lang_code='ara' and code='Laptop-1'; - -createDeviceSpecification= INSERT INTO master.device_spec(\ - id, name, brand, model, dtyp_code, min_driver_ver, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ - VALUES('744','Cam','Technoforte','2020','CMR','1.0','Test DeviceSpec','eng','false','110005','2020-05-27T05:19:53.996Z',null,null,null,null); -deleteCreatedDeviceSpecification= delete from master.device_spec where cr_by='110005'; - -updateDeviceSpecification= INSERT INTO master.device_spec(\ - id, name, brand, model, dtyp_code, min_driver_ver, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ - VALUES('746','Laptop','Dell','2020','CMR','1.1','Dell DeviceSpec','eng','true','110005','2020-05-28T05:19:53.996Z',null,null,null,null),\ - ('746','Laptop','Dell','2020','CMR','1.1','Dell DeviceSpec','ara','true','110005','2020-05-28T05:19:53.996Z',null,null,null,null); -deleteUpdatedDeviceSpecification= delete from master.device_spec where cr_by='110005'; - - - -validatePrimDataAgnstSecData= select count(*) from master.device_spec where lang_code='ara' and dtyp_code='FP1' and brand='Techno'; - -updateMachineType= INSERT INTO master.machine_type(\ - code, name, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ - VALUES ('Laptop','Laptop test','Laptop','eng','true','110005','2020-05-28T05:19:53.996Z',null,null,null,null),\ - ('Laptop','Laptop test','Laptop','ara','true','110005','2020-05-28T05:19:53.996Z',null,null,null,null); - -deleteUpdatedMachineType= delete from master.machine_type where cr_by='110005'; - -createMachineSpecification= INSERT INTO master.machine_spec(\ - id, name, brand, model, mtyp_code, min_driver_ver, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ - VALUES('HP001','HP','HP','1234','DKS','3.2','HP brand','eng','true','110005','2020-05-29T05:19:53.996Z',null,null,null,null); - - deleteMachineSpecification= delete from master.machine_spec where cr_by='110005'; - - validatePrimDataForMachineSpec= select count(*) from master.machine_spec where lang_code='ara' and mtyp_code='DKS' and id='HP-06'; - - updateMachineSpecification= INSERT INTO master.machine_spec(\ - id, name, brand, model, mtyp_code, min_driver_ver, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ - VALUES('HP07','HP','HP','1234','DKS','3.2','HP brand','eng','true','110005','2020-05-30T05:19:53.996Z',null,null,null,null); - - deleteUpdatedMachineSpec= delete from master.machine_spec where cr_by='110005'; - - createRegCenterType=INSERT INTO master.reg_center_type(\ - code, name, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ - VALUES ('ALT-2', 'alternate','alternate center' ,'eng', 'true', '110005', '2020-05-30T05:19:53.996Z', null, null, null, null); - -deleteCretedRegCenterType= delete from master.reg_center_type where cr_by='110005'; - -validatePrimDataForRegCenter= select count(*) from master.reg_center_type where lang_code='ara' and code='ALT-13'; - -updateRegCenterType= INSERT INTO master.reg_center_type(\ - code, name, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ - VALUES ('ALT-3', 'alternate','alternate center' ,'eng', 'true', '110005', '2020-05-30T05:19:53.996Z', null, null, null, null); - -deleteUpdatedRegCenterType= delete from master.reg_center_type where cr_by='110005'; - -createTemplateFileFormat=INSERT INTO master.template_file_format(\ - code, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ - VALUES ('Xaml', 'Xaml Test', 'eng', 'true', '110005','2020-06-02T10:04:43.336Z' ,null, null, null, null); - -deleteCreatedTemplateFileFormat= delete from master.template_file_format where cr_by='110005'; - -updateTemplateFileFormat=INSERT INTO master.template_file_format(\ - code, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ - VALUES ('PDF', 'PDF Test', 'eng', 'true', '110005','2020-06-02T10:04:43.336Z' ,null, null, null, null),\ - ('PDF-1', 'PDF-1 Test', 'eng', 'true', '110005','2020-06-02T10:04:43.336Z' ,null, null, null, null); - -deleteUpdatedTemplateFileFormat= delete from master.template_file_format where cr_by='110005'; - -createTemplate= INSERT INTO master.template(\ - id, name, descr, file_format_code, model, file_txt, module_id, module_name, template_typ_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ - VALUES ('test-002','Test-template','test template','html','model-1','abc','10001','Pre-Registration','Acknowledgement-email-subject','eng','true','110005','2020-06-03T10:15:27.703Z', null,null,null,null); - - -deleleCreatedTemplate= delete from master.template where cr_by='110005'; - - -createHoliday= INSERT INTO master.loc_holiday(\ - id, location_code, holiday_date, holiday_name, holiday_desc, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ - VALUES (20010191,'KTA','2020-07-15','Labour Day','Automation labour Holiday','eng','true','110005','2020-05-07T05:30:46.227Z',null,null,null,null); - -deleteCreatedHoliday= delete from master.loc_holiday where cr_by='110005' ; - -createGender= INSERT INTO master.gender(\ - code, name, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ - VALUES ('MLE-Auto','Test-Auto','eng','false','110005','2020-05-18T05:19:53.996Z',null,null,null,null); - -deleteGender= delete from master.gender where cr_by='110005' ; - -updateGender= INSERT INTO master.gender(\ - code, name, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ - VALUES ('MLE-Auto-1','Test-Auto-1','eng','false','110005','2020-05-18T05:19:53.996Z',null,null,null,null); - -deleteUpdatedGender= delete from master.gender where cr_by='110005' ; - -createDocumentCategory= INSERT INTO master.doc_category(\ - code, name, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ - VALUES ('DocCat00','DocCat','Testing positive Doc','eng','false','110005','2020-05-19T12:46:15.373Z',null,null,null,null); - - -deleteDocumentCategory= delete from master.doc_category where cr_by='110005'; - -validatePrimDocCatUpdatedBySec = select count(*) from master.doc_category where is_active='true' and code='DocCat00'; -isActiveStatusFalse = select count(*) from master.doc_category where is_active='false' and code='DocTestCode11'; - -createDocumentCategoryForUpdate=INSERT INTO master.doc_category(\ - code, name, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes) \ - VALUES ('DocCat002','DocCat002','Testing positive002','eng','true','110005','2020-05-19T12:46:15.373Z',null,null,null,null),\ - ('DocCat003','DocCat003','Testing positive003','eng','true','110005','2020-05-19T12:46:15.373Z',null,null,null,null),\ - ('DocCat004','DocCat004','Testing positive004','eng','false','110005','2020-05-19T12:46:15.373Z',null,null,null,null),\ - ('DocCat005','DocCat005','Testing positive005','eng','false','110005','2020-05-19T12:46:15.373Z',null,null,null,null),\ - ('DocCat005','DocCat004','Testing positive005','ara','false','110005','2020-05-19T12:46:15.373Z',null,null,null,null),\ - ('DocCat006','DocCat006','Testing positive006','eng','true','110005','2020-05-19T12:46:15.373Z',null,null,null,null),\ - ('DocCat006','DocCat006','Testing positive006','ara','true','110005','2020-05-19T12:46:15.373Z',null,null,null,null); - -checkPrimDocCatUpdatedBySec = select count(*) from master.doc_category where is_active='true' and code='DocCat004'; - - - -deleteDocumentCategoryForUpdate=delete from master.doc_category where cr_by='110005'; - -updateTemplate= INSERT INTO master.template(\ - id, name, descr, file_format_code, model, file_txt, module_id, module_name, template_typ_code, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ - VALUES ('test-01','Test-template','test template','html','model-1','abc','10001','Pre-Registration','Acknowledgement-email-subject','eng','true','110005','2020-06-03T10:15:27.703Z', null,null,null,null); - - -deleteUpdateTemplate= delete from master.template where cr_by='110005'; - -createTemplateType= INSERT INTO master.template_type(\ - code, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ - VALUES ('Test-SMS','Test-SMS-info','eng','true','110005', '2020-06-05T10:15:27.703Z', null, null, null, null); - -deleteCreatedTemplateType= delete from master.template_type where cr_by='110005'; - -createDeviceType= INSERT INTO master.device_type(\ - code, name, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ - VALUES ('GST0', 'GST', 'Test GST', 'eng', 'false', '110005', '2020-06-06T10:15:27.703Z',null, null, null, null); -deleteCreatedDeviceType= delete from master.device_type where cr_by='110005'; - -checkPrimDataAgnstSecData= select count(*) from master.device_type where lang_code='ara' and code='GST00' and name='GST00'; - - -updateDeviceType= INSERT INTO master.device_type(\ - code, name, descr, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ - VALUES ('FPT', 'finger print scanner', 'test 1.0.8', 'eng', 'true', '110005', '2020-06-06T10:15:27.703Z',null, null, null, null),\ - ('GST3', 'GST', 'test 1.0.8', 'eng', 'true', '110005', '2020-06-06T10:15:27.703Z',null, null, null, null),\ - ('GST3', 'GST', 'test 1.0.8', 'ara', 'true', '110005', '2020-06-06T10:15:27.703Z',null, null, null, null); - -deleteUpdatedDeviceType= delete from master.device_type where cr_by='110005'; -deleteIndividualType= delete from master.individual_type where cr_by='110005'; -validatePrimDataForIndividualType= select count(*) from master.individual_type where lang_code='ara' and code='TST2' and name='TestInd'; - - -updateIndividualType=INSERT INTO master.individual_type(\ - code, name, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ - VALUES ('TST0', 'TestInd', 'eng','true', '110005', '2020-06-08T06:12:52.994Z', null, null, null, null),\ - ('TST0', 'TestInd', 'ara','true', '110005', '2020-06-08T06:12:52.994Z', null, null, null, null),\ - ('TST1', 'TST1', 'eng','false', '110005', '2020-06-08T06:12:52.994Z', null, null, null, null),\ - ('TST1', 'TST1', 'ara','true', '110005', '2020-06-08T06:12:52.994Z', null, null, null, null),\ - ('TST2', 'TST2', 'eng','true', '110005', '2020-06-08T06:12:52.994Z', null, null, null, null); - -deleteUpdatedIndividualType= delete from master.individual_type where cr_by='110005'; - - -# These data is for Auth devices, used by IDA. -crtDeviceDetails = INSERT INTO authdevice.device_detail(\ -id, dprovider_id, dtype_code, dstype_code, make, model, partner_org_name, approval_status, is_active, cr_by, cr_dtimes)VALUES \ -('devIrisD', '1873299273', 'Iris', 'Double', 'EYECOOL', 'TCI322', 'EYECOOL.com', 'Activated', true, 'automation', '2020-10-09 07:10:46.072973'),\ -('devFinger', '1873299273', 'Finger', 'Slap', 'Logitech', '4d36e96c-e325-11ce-bfc1-08002be10316', 'Logitech.com', 'Activated', true, 'automation', '2020-10-09 07:10:46.072973'),\ -('devIrisS', '1873299273', 'Iris', 'Single', 'Logitech', '4d36e96c-e325-11ce-bfc1-08002be10317', 'Logitech.com', 'Activated', true, 'automation', '2020-10-09 07:10:46.072973'),\ -('devFace', '1873299273', 'Face', 'Full face', 'Logitech', '6bdd1fc6-810f-11d0-bec7-08002be2092f', 'Logitech.com', 'Activated', true, 'automation', '2020-10-09 07:10:46.072973'); -dltDeviceDetails = delete from authdevice.device_detail where id IN('devIrisD', 'devFinger', 'devIrisS', 'devFace'); - -crtSBI = INSERT INTO authdevice.secure_biometric_interface(id, sw_binary_hash, sw_version, device_detail_id, sw_cr_dtimes, sw_expiry_dtimes, approval_status, is_active, cr_by, cr_dtimes)VALUES \ -('devIrisD', 'binary data', 'SB.WIN.001', 'devIrisD', '2020-01-01 07:10:46.072973', '2030-12-31 07:10:46.072973', 'Activated', true, 'automation', '2020-10-09 07:10:46.072973'),\ -('devFinger', 'binary data', 'SB.WIN.001', 'devFinger', '2020-01-01 07:10:46.072973', '2030-12-31 07:10:46.072973', 'Activated', true, 'automation', '2020-10-09 07:10:46.072973'),\ -('devIrisS', 'binary data', 'SB.WIN.001', 'devIrisS', '2020-01-01 07:10:46.072973', '2030-12-31 07:10:46.072973', 'Activated', true, 'automation', '2020-10-09 07:10:46.072973'),\ -('devFace', 'binary data', 'SB.WIN.001', 'devFace', '2020-01-01 07:10:46.072973', '2030-12-31 07:10:46.072973', 'Activated', true, 'automation', '2020-10-09 07:10:46.072973'); -dltSBI = delete from authdevice.secure_biometric_interface where id IN('devIrisD', 'devFinger', 'devIrisS', 'devFace'); - -crtSBIHist = INSERT INTO authdevice.secure_biometric_interface_h(id, sw_binary_hash, sw_version, device_detail_id, sw_cr_dtimes, sw_expiry_dtimes, approval_status, is_active, cr_by, cr_dtimes, eff_dtimes)VALUES \ -('devIrisD', 'binary data', 'SB.WIN.001', 'devIrisD', '2020-01-01 07:10:46.072973', '2030-12-31 07:10:46.072973', 'Activated', true, 'automation', '2020-10-09 07:10:46.072973', '2020-10-09 07:10:46.072973'),\ -('devFinger', 'binary data', 'SB.WIN.001', 'devFinger', '2020-01-01 07:10:46.072973', '2030-12-31 07:10:46.072973', 'Activated', true, 'automation', '2020-10-09 07:10:46.072973', '2020-10-09 07:10:46.072973'),\ -('devIrisS', 'binary data', 'SB.WIN.001', 'devIrisS', '2020-01-01 07:10:46.072973', '2030-12-31 07:10:46.072973', 'Activated', true, 'automation', '2020-10-09 07:10:46.072973', '2020-10-09 07:10:46.072973'),\ -('devFace', 'binary data', 'SB.WIN.001', 'devFace', '2020-01-01 07:10:46.072973', '2030-12-31 07:10:46.072973', 'Activated', true, 'automation', '2020-10-09 07:10:46.072973', '2020-10-09 07:10:46.072973'); -dltSBIHist = delete from authdevice.secure_biometric_interface_h where id IN('devIrisD', 'devFinger', 'devIrisS', 'devFace'); - -crtAuthDevices = INSERT INTO authdevice.registered_device_master(code, status_code, device_id, device_sub_id, digital_id, serial_number, device_detail_id, purpose, firmware, expiry_date, certification_level, is_active, cr_by, cr_dtimes)VALUES \ -('2a4af583-da31-4800-8cb9-9340643fd1bf', 'REGISTERED', 'FingerDevice', '1', '', '78467169', 'devFinger', 'AUTH','firmware', '2030-12-31 07:10:46.072973', 'L0', true, 'automation', '2020-10-09 07:10:46.072973'),\ -('9ac2ea4c-6ce5-4558-873d-575d130dfc29', 'REGISTERED', 'IrisDevice', '1', '', '78467170', 'devIrisS', 'AUTH','firmware', '2030-12-31 07:10:46.072973', 'L0', true, 'automation', '2020-10-09 07:10:46.072973'),\ -('097b9460-d3d3-4e14-8ac9-c95a734d5d81', 'REGISTERED', 'FaceDevice', '1', '', '097b9460-d3d3-4e14-8ac9-c95a734d5d81', 'devFace', 'AUTH','firmware', '2030-12-31 07:10:46.072973', 'L0', true, 'automation', '2020-10-09 07:10:46.072973'); -dltAuthDevices = delete from authdevice.registered_device_master where code IN('2a4af583-da31-4800-8cb9-9340643fd1bf', '9ac2ea4c-6ce5-4558-873d-575d130dfc29', '097b9460-d3d3-4e14-8ac9-c95a734d5d81'); - -crtAuthDevicesHist = INSERT INTO authdevice.registered_device_master_h(code, status_code, device_id, device_sub_id, digital_id, serial_number, device_detail_id, purpose, firmware, expiry_date, certification_level, is_active, cr_by, cr_dtimes, eff_dtimes)VALUES \ -('2a4af583-da31-4800-8cb9-9340643fd1bf', 'REGISTERED', 'FingerDevice', '1', '', '78467169', 'devFinger', 'AUTH','firmware', '2030-12-31 07:10:46.072973', 'L0', true, 'automation', '2020-10-09 07:10:46.072973', '2020-10-09 07:10:46.072973'),\ -('9ac2ea4c-6ce5-4558-873d-575d130dfc29', 'REGISTERED', 'IrisDevice', '1', '', '78467170', 'devIrisS', 'AUTH','firmware', '2030-12-31 07:10:46.072973', 'L0', true, 'automation', '2020-10-09 07:10:46.072973', '2020-10-09 07:10:46.072973'),\ -('097b9460-d3d3-4e14-8ac9-c95a734d5d81', 'REGISTERED', 'FaceDevice', '1', '', '097b9460-d3d3-4e14-8ac9-c95a734d5d81', 'devFace', 'AUTH','firmware', '2030-12-31 07:10:46.072973', 'L0', true, 'automation', '2020-10-09 07:10:46.072973', '2020-10-09 07:10:46.072973'); -dltAuthDevicesHist = delete from authdevice.registered_device_master_h where code IN('2a4af583-da31-4800-8cb9-9340643fd1bf', '9ac2ea4c-6ce5-4558-873d-575d130dfc29', '097b9460-d3d3-4e14-8ac9-c95a734d5d81'); - -# list of the query-keywords for the bulk query for device management data -crtAuthDevicesData = crtDeviceDetails,crtSBI,crtSBIHist,crtAuthDevices,crtAuthDevicesHist -dltAuthDevicesData = dltAuthDevicesHist,dltAuthDevices,dltSBIHist,dltSBI,dltDeviceDetails - -# Below data is for search and filter APIs automation, so no dependency on DB data. these data will be inserted just -# before the execution starts and will be deleted at the end of the admin execution. -# below are the only zones we should use for automation -crtAutoZone = INSERT INTO master.zone(\ - code, name, hierarchy_level, hierarchy_level_name, hierarchy_path, parent_zone_code, lang_code, is_active, cr_by, cr_dtimes)VALUES\ - ('TPRNTZ', 'Parent',0,'Parent', 'TPRNTZ', null, 'eng', true, 'mosipautouser', '2019-10-21 06:50:26.445996'),\ - ('TPRNTZ', '\u0627\u0644\u0623\u0628\u0648\u064A\u0646',0,'\u0627\u0644\u0623\u0628\u0648\u064A\u0646', 'TPRNTZ', null, 'ara', true, 'mosipautouser', '2019-10-21 06:50:26.445996'),\ - ('LFZL', 'Child1',1,'Child1', 'TPRNTZ/LFZL', 'TPRNTZ', 'eng', true, 'mosipautouser', '2019-10-21 06:50:26.445996'),\ - ('LFZL', '\u0637\u0641\u06441',1,'\u0637\u0641\u06441', 'TPRNTZ/LFZL', 'TPRNTZ', 'ara', true, 'mosipautouser', '2019-10-21 06:50:26.445996'),\ - ('LFZR', 'Child2',1,'Child2', 'TPRNTZ/LFZR', 'TPRNTZ', 'eng', true, 'mosipautouser', '2019-10-21 06:50:26.445996'),\ - ('LFZR', '\u0637\u0641\u06442',1,'\u0637\u0641\u06442', 'TPRNTZ/LFZR', 'TPRNTZ', 'ara', true, 'mosipautouser', '2019-10-21 06:50:26.445996'); -dltAutoZone = delete from master.zone where cr_by = 'mosipautouser'; - -#status type is used in status list and status list is used in user -crtStatusTyp = INSERT INTO master.status_type(\ - code, name, descr, lang_code, is_active, cr_by, cr_dtimes)\ - VALUES ('TSD', 'Tested', 'Tested', 'eng',true,'mosipautouser', '2019-10-21 06:50:26.054295'); -dltStatusTyp = delete from master.status_type where cr_by = 'mosipautouser'; - -crtStatusList = INSERT INTO master.status_list(\ - code, descr, status_seq, sttyp_code, lang_code, is_active, cr_by, cr_dtimes)\ - VALUES('TST', 'TestON', null, 'TSD', 'eng',true,'mosipautouser', '2019-10-21 06:50:27.193756' ); -dltStatusList = delete from master.status_list where cr_by = 'mosipautouser'; - -# auth method is used in user -crtAuthMethod = INSERT INTO master.authentication_method(\ - code, method_seq, lang_code, is_active, cr_by, cr_dtimes)\ - VALUES('TPWD',1,'eng', true, 'mosipautouser', '2019-10-21 06:50:24.650103'); -dltAuthMethod = delete from master.authentication_method where cr_by = 'mosipautouser'; - -# user to use in whole automation, with zonal admin role and mapped to TprntZ zone -crtAutoUser = INSERT INTO master.user_detail(\ - id, uin, name, email, mobile, status_code, lang_code, last_login_dtimes, last_login_method, is_active, cr_by, cr_dtimes)\ - VALUES ('mosipautouser', '5400020000', 'mosipautouser', 'mosiptestmail@gmail.com', '975366148', 'TST', 'eng', null, 'TPWD', true, 'mosipautouser', '2019-10-21 06:50:27.696842'); -dltAutoUser = delete from master.user_detail where cr_by = 'mosipautouser'; - -crtZoneUserMap = INSERT INTO master.zone_user(\ - zone_code, usr_id, lang_code, is_active, cr_by, cr_dtimes)\ - VALUES ('TPRNTZ', 'mosipautouser', 'eng', true, 'mosipautouser', '2019-10-21 06:50:27.950738'); -dltZoneUserMap = delete from master.zone_user where cr_by = 'mosipautouser'; - -# below device type only we will be using for automation -crtDeviceTyp = INSERT INTO master.device_type(\ - code, name, descr, lang_code, is_active, cr_by, cr_dtimes)\ - VALUES ('TDtyp', 'Finger test Scanner', 'For test finger', 'eng', true, 'mosipautouser', '2019-10-21 06:50:24.840922'),\ - ('TDtyp', '\u0627\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u0645\u0627\u0633\u062D \u0627\u0644\u0636\u0648\u0626\u064A', 'For test finger', 'ara', true, 'mosipautouser', '2019-10-21 06:50:24.840922'); -dltDeviceTyp = delete from master.device_type where cr_by = 'mosipautouser'; - -# below device spec only we will be using for automation -crtDeviceSpec = INSERT INTO master.device_spec(\ - id, name, brand, model, dtyp_code, min_driver_ver, descr, lang_code, is_active, cr_by, cr_dtimes)\ - VALUES ('TDSpec', 'Finger Test', 'brand', 'model', 'TDtyp', '1.12', 'To scan fingerprint', 'eng', true, 'mosipautouser', '2019-10-21 06:50:26.685205'),\ - ('TDSpec', '\u0627\u062E\u062A\u0628\u0627', '\u0627\u0644\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u062A\u062C\u0627\u0631\u064A\u0629', '\u0646\u0645\u0648\u0630\u062C', 'TDtyp', '1.12', 'To scan fingerprint', 'ara', true, 'mosipautouser', '2019-10-21 06:50:26.685205'); -dltDeviceSpec = delete from master.device_spec where cr_by = 'mosipautouser'; - -crtDevice = INSERT INTO master.device_master(\ - id, name, mac_address, serial_num, ip_address, validity_end_dtimes, dspec_id, zone_code, lang_code, is_active, cr_by, cr_dtimes)\ - VALUES ('TdeviceSF', 'TestDevice', 'test mac', 'test serial', null, null, 'TDSpec', 'TPRNTZ', 'eng', true, 'mosipautouser', '2019-07-26 12:18:40.718295'),\ - ('TdeviceSF', '\u062C\u0647\u0627\u0632 \u0627\u062E\u062A\u0628\u0627\u0631', 'test mac', 'test serial', null, null, 'TDSpec', 'TPRNTZ', 'ara', true, 'mosipautouser', '2019-07-26 12:18:40.718295'),\ - ('TdeviceSF1', 'TestDevice1', 'test mac1', 'test serial1', null, null, 'TDSpec', 'LFZL', 'eng', true, 'mosipautouser', '2019-07-26 12:18:40.718295'),\ - ('TdeviceSF1', '\u062C\u0647\u0627\u0632 \u0627\u062E\u062A\u0628\u0627\u0631 1', 'test mac1', 'test serial1', null, null, 'TDSpec', 'LFZL', 'ara', true, 'mosipautouser', '2019-07-26 12:18:40.718295'); -dltDevice = delete from master.device_master where cr_by = 'mosipautouser'; - -crtLocHier = INSERT INTO master.loc_hierarchy_list(hierarchy_level, hierarchy_level_name, lang_code, is_active, cr_by, cr_dtimes) VALUES \ - (0, 'test parent', 'eng', true, 'mosipautouser','2019-10-21 06:50:25.785225'), \ - (0, '\u0627\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u0648\u0627\u0644\u062F\u064A\u0646', 'ara', true, 'mosipautouser','2019-10-21 06:50:25.785225'),\ - (1, 'Child', 'eng', true, 'mosipautouser','2019-10-21 06:50:25.785225'),\ - (1, '\u0637\u0641\u0644', 'ara', true, 'mosipautouser','2019-10-21 06:50:25.785225'); -dltLocHier = delete from master.loc_hierarchy_list where cr_by = 'mosipautouser'; - -crtLoacation = INSERT INTO master.location( \ - code, name, hierarchy_level, hierarchy_level_name, parent_loc_code, lang_code, is_active, cr_by, cr_dtimes) VALUES \ - ('TLOC', 'Location test M', 0, 'test parent', null, 'eng', true, 'mosipautouser', '2019-10-21 06:50:25.31645'), \ - ('TLOC', '\u0627\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u0645\u0648\u0642\u0639', 0, '\u0627\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u0648\u0627\u0644\u062F\u064A\u0646', null, 'ara', true, 'mosipautouser', '2019-10-21 06:50:25.31645'),\ - ('TCLOC', 'childloctest', 1, 'Child', 'TLOC', 'eng', true, 'mosipautouser', '2019-10-21 06:50:25.31645'),\ - ('TCLOC', '\u0634\u0627\u0630', 1, '\u0637\u0641\u0644', 'TLOC', 'ara', true,'mosipautouser', '2019-10-21 06:50:25.31645'); -dltLoacation = delete from master.location where cr_by = 'mosipautouser'; - -crtRegCentTyp = INSERT INTO master.reg_center_type( \ - code, name, descr, lang_code, is_active, cr_by, cr_dtimes)VALUES \ - ('TREG', 'Test R cent', 'Center For test', 'eng', true, 'mosipautouser', '2019-10-21 06:50:25.785225'), \ - ('TREG', '\u0627\u062E\u062A\u0628\u0627\u0631 R \u0627\u0644\u0645\u0627\u0626\u0629', '\u0645\u0631\u0643\u0632 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631', 'ara', true, 'mosipautouser', '2019-10-21 06:50:25.785225'); -dltRegCentTyp = delete from master.reg_center_type where cr_by = 'mosipautouser'; - -crtRegCenter = INSERT INTO master.registration_center( \ - id, name, cntrtyp_code, addr_line1, addr_line2, addr_line3, latitude, longitude, location_code, contact_phone, contact_person, number_of_kiosks, working_hours, per_kiosk_process_time, center_start_time, center_end_time, lunch_start_time, lunch_end_time, time_zone, holiday_loc_code, zone_code, lang_code, is_active, cr_by, cr_dtimes) \ - VALUES ('TRCnt', 'map test center', 'TREG', 'address1', 'address2', 'address3', '34.522414', '-6.320471', 'TCLOC', '0000000000', 'owner', 2, '8:00:00', '00:15:00', '09:00:00', '17:00:00', '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'HLOC', 'LFZL', 'eng', true, 'mosipautouser', '2019-10-21 06:50:27.012387'), \ - ('TRCnt', '\u0645\u0631\u0643\u0632 \u0627\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u062E\u0631\u0627\u0626\u0637', 'TREG', '\u0627\u0644\u0639\u0646\u0648\u0627\u0646 1', 'address2', 'address3', '34.522414', '-6.320471', 'TCLOC', '0000000000', '\u0635\u0627\u062D\u0628', 2, '8:00:00', '00:15:00', '09:00:00', '17:00:00', '13:00:00', '14:00:00', '(GTM+01:00) CENTRAL EUROPEAN TIME', 'HLOC', 'LFZL', 'ara', true, 'mosipautouser', '2019-10-21 06:50:27.012387'); -dltRegCenter = delete from master.registration_center where cr_by = 'mosipautouser'; - -crtRegCntrDev = INSERT INTO master.reg_center_device( \ - regcntr_id, device_id, lang_code, is_active, cr_by, cr_dtimes) \ - VALUES ('TRCnt', 'TdeviceSF', 'eng', true, 'mosipautouser', '2019-10-21 06:50:27.732946'); -dltRegCntrDev = delete from master.reg_center_device where cr_by = 'mosipautouser'; - -crtMachineTyp = INSERT INTO master.machine_type(code, name, descr, lang_code, is_active, cr_by, cr_dtimes)VALUES \ - ('TMTYP', 'Test M Type', 'Test Mach type', 'eng', true, 'mosipautouser', '2019-10-21 06:50:25.446465'), \ - ('TMTYP', '\u0627\u062E\u062A\u0628\u0627\u0631 \u0646\u0648\u0639 M','\u0627\u062E\u062A\u0628\u0627\u0631 \u0646\u0648\u0639 \u0645\u0627\u062E', 'ara', true, 'mosipautouser', '2019-10-21 06:50:25.446465'); -delMachineTyp = delete from master.machine_type where cr_by = 'mosipautouser'; - -crtMachSpec = INSERT INTO master.machine_spec( \ - id, name, brand, model, mtyp_code, min_driver_ver, descr, lang_code, is_active, cr_by, cr_dtimes)VALUES \ - ('TMSPC', 'Testro', 'brand', 'model', 'TMTYP', '1.454', 'To test enrol', 'eng', true,'mosipautouser', '2019-10-21 06:50:26.846071'), \ - ('TMSPC', '\u062A\u0633\u062A\u0631\u0648', '\u0627\u0644\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u062A\u062C\u0627\u0631\u064A\u0629', '\u0646\u0645\u0648\u0630\u062C', 'TMTYP', '1.454', '\u0644\u0627\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u062A\u0633\u062C\u064A\u0644', 'ara', true,'mosipautouser', '2019-10-21 06:50:26.846071'); -delMachSpec = delete from master.machine_spec where cr_by = 'mosipautouser'; - -crtMachine = INSERT INTO master.machine_master( \ - id, name, mac_address, serial_num, ip_address, validity_end_dtimes, mspec_id, public_key, key_index, zone_code, lang_code, is_active, cr_by, cr_dtimes)VALUES \ - ('TMachid', 'test mach', 'test mac', 'test serial', 'test ip','2029-10-21 06:50:27.523105', 'TMSPC','testpublickey', 'testKeyIndex', 'TPRNTZ', 'eng', 'true', 'mosipautouser', '2019-10-21 06:50:27.523105'), \ - ('TMachid', '\u0627\u062E\u062A\u0628\u0627\u0631', 'test mac', 'test serial', 'test ip','2029-10-21 06:50:27.523105', 'TMSPC','testpublickey', 'testKeyIndex', 'TPRNTZ', 'ara', 'true', 'mosipautouser', '2019-10-21 06:50:27.523105'), \ - ('TMachid1', 'test mach1', 'test mac1', 'test serial1', 'test ip1','2029-10-21 06:50:27.523105', 'TMSPC','testpublickey1', 'testKeyIndex1', 'LFZL', 'eng', 'true', 'mosipautouser', '2019-10-21 06:50:27.523105'), \ - ('TMachid1', '\u0627\u062E\u062A\u0628\u0627\u0631 1', 'test mac1', 'test serial1', 'test ip1','2029-10-21 06:50:27.523105', 'TMSPC','testpublickey1', 'testKeyIndex1', 'LFZL', 'ara', 'true', 'mosipautouser', '2019-10-21 06:50:27.523105'); -dltMachine = delete from master.machine_master where cr_by = 'mosipautouser'; - -crtRegCntrMach = INSERT INTO master.reg_center_machine( \ - regcntr_id, machine_id, lang_code, is_active, cr_by, cr_dtimes) \ - VALUES ('TRCnt', 'TMachid1', 'eng', true, 'mosipautouser', '2019-10-21 06:50:27.732946'); -dltRegCntrMach = delete from master.reg_center_machine where cr_by = 'mosipautouser'; - -crtDocTyp = INSERT INTO master.doc_type( \ - code, name, descr, lang_code, is_active, cr_by, cr_dtimes)VALUES \ - ('TDTYP', 'Tdoctyp', 'test document', 'eng', true, 'mosipautouser', '2019-10-21 06:50:27.732946'),\ - ('TDTYP', '\u062A\u062F\u0648\u0637\u064A', '\u0648\u062B\u064A\u0642\u0629 \u0627\u062E\u062A\u0628\u0627\u0631', 'ara', true, 'mosipautouser', '2019-10-21 06:50:27.732946'); -dltDocTyp = delete from master.doc_type where cr_by = 'mosipautouser'; - -crtDocCat = INSERT INTO master.doc_category(\ - code, name, descr, lang_code, is_active, cr_by, cr_dtimes)VALUES \ - ('TDCAT', 'Tdoccat', 'test document', 'eng', true, 'mosipautouser', '2019-10-21 06:50:27.732946'),\ - ('TDCAT', '\u062A\u062F\u0648\u0643\u0627\u062A', '\u0648\u062B\u064A\u0642\u0629 \u0627\u062E\u062A\u0628\u0627\u0631', 'ara', true, 'mosipautouser', '2019-10-21 06:50:27.732946'); -dltDocCat = delete from master.doc_category where cr_by = 'mosipautouser'; - -crtDocCatTyp = INSERT INTO master.valid_document( \ - doctyp_code, doccat_code, lang_code, is_active, cr_by, cr_dtimes)VALUES \ - ('TDTYP', 'TDCAT', 'eng', true, 'mosipautouser', '2019-10-21 06:50:27.732946'); -dltDocCatTyp = delete from master.valid_document where cr_by = 'mosipautouser'; - -crtTitle = INSERT INTO master.title(code, name, descr, lang_code, is_active, cr_by, cr_dtimes)VALUES \ - ('TTTL', 'test title','title testing', 'eng', true, 'mosipautouser', '2019-10-21 06:50:27.732946'),\ - ('TTTL', '\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631','\u0627\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u0639\u0646\u0648\u0627\u0646', 'ara', true, 'mosipautouser', '2019-10-21 06:50:27.732946'); -dltTitle = delete from master.title where cr_by = 'mosipautouser'; - -crtGender = INSERT INTO master.gender(code, name, lang_code, is_active, cr_by, cr_dtimes)VALUES \ - ('TGDR', 'test gender', 'eng', true, 'mosipautouser', '2019-10-21 06:50:27.732946'),\ - ('TGDR', '\u0627\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u062C\u0646\u0633', 'ara', true, 'mosipautouser', '2019-10-21 06:50:27.732946'); -dltGender = delete from master.gender where cr_by = 'mosipautouser'; - -# list of the query-keywords for the bulk query -allAutoCrt = crtAutoZone,crtStatusTyp,crtStatusList,crtAuthMethod,crtAutoUser,crtZoneUserMap,crtDeviceTyp,\ - crtDeviceSpec,crtDevice,crtLocHier,crtLoacation,crtRegCentTyp,crtRegCenter,crtRegCntrDev,crtMachineTyp,\ - crtMachSpec,crtMachine,crtRegCntrMach,crtDocTyp,crtDocCat,crtDocCatTyp -allAutoDlt = dltRegCntrDev,dltRegCntrMach,dltRegCenter,dltRegCentTyp,dltDevice,dltDeviceSpec,dltDeviceTyp,dltMachine,\ - delMachSpec,delMachineTyp,dltZoneUserMap,dltAutoZone,dltAutoUser,dltStatusList,\ - dltStatusTyp,dltAuthMethod,dltLoacation,dltLocHier,dltDocCatTyp,dltDocCat,dltDocTyp - -# temp for test, need to add fields in permanent -#allAutoCrt = crtTitle,crtGender -#allAutoDlt = dltTitle,dltGender - -# verifying the status in DB when create API runs with only one language[i.e when record created in primary language] -createDeviceSpecIsActive= select count(*) from master.device_spec where is_active='false' and id='743' and lang_code='eng'; -createMachineTypeIsActive= select count(*) from master.machine_type where is_active='false' and code='Laptop-2' and lang_code='eng'; -createGenderIsActive= select count(*) from master.gender where is_active='false' and code='Genderdummy-0' and lang_code='eng'; -createTemplateFileFormateIsActive= select count(*) from master.template_file_format where is_active='false' and code='Docx' and lang_code='eng'; -createDeviceTypeIsActive= select count(*) from master.device_type where is_active='false' and code='GST31607' and lang_code='eng'; -createHolidayIsActive= select count(*) from master.loc_holiday where is_active='false' and holiday_name='AutoTest user 16july' and lang_code='eng'; -createMachineSpecIsActive= select count(*) from master.machine_spec where is_active='false' and id='HP04' and lang_code='eng'; -createRegCentrTypeIsActive= select count(*) from master.reg_center_type where is_active='false' and code='RegALT-03' and lang_code='eng'; -createTitleIsActive= select count(*) from master.title where is_active='false' and code='crTEST0011' and lang_code='eng'; -createTemplateIsActive= select count(*) from master.template where is_active='false' and id='crTempTest-03' and lang_code='eng'; -createTemplateTypeIsActive= select count(*) from master.template_type where is_active='false' and code='crTest-info-Template' and lang_code='eng'; -createBlackLstWordIsActive= select count(*) from master.blacklisted_words where is_active='false' and word='asshole' and lang_code='eng'; - - -deleteBlackListedWord=delete from master.blacklisted_words where cr_by='110005' - -deleteDynamicField= delete from master.dynamic_field where cr_by='110005'; -createDynamicFiledData=INSERT INTO master.dynamic_field(\ - id, name, description, data_type, value_json, lang_code, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ - VALUES ('DF-001', 'Technology', 'Technology Known', 'String', '[{"code":"Angular","value":"Angular","langCode":"eng","active":true}]', 'eng', 'true', '110005', '2020-08-07 09:08:51.607', null, null, null, null); \ No newline at end of file diff --git a/api-test/src/main/resources/config/adminTokenGeneration.properties b/api-test/src/main/resources/config/adminTokenGeneration.properties deleted file mode 100644 index 0668f3973..000000000 --- a/api-test/src/main/resources/config/adminTokenGeneration.properties +++ /dev/null @@ -1,5 +0,0 @@ -token.request.id=mosip.io.userId.pwd -token.request.appid=registrationclient -token.request.username=110005 -token.request.password=mosip -token.request.version=1.0 \ No newline at end of file diff --git a/api-test/src/main/resources/config/application.properties b/api-test/src/main/resources/config/application.properties index aefc909c9..305e4ef5d 100644 --- a/api-test/src/main/resources/config/application.properties +++ b/api-test/src/main/resources/config/application.properties @@ -3,77 +3,23 @@ encryptionPath=v1/identity/encrypt?isInternal=false internalEncryptionPath=v1/identity/encrypt?isInternal=true encodePath=v1/identity/encode decodePath=v1/identity/decode -signRequest=v1/identity/signRequest decryptPath=/idauthentication/v1/internal/decrypt -decryptkycdataurl = v1/identity/decryptEkycData encodeFilePath=v1/identity/encodeFile decodeFilePath=v1/identity/decodeFile/?fileName=cbeff validateSignaturePath=v1/identity/validateSign?signature=$signature$ splitEncryptedData=v1/identity/splitEncryptedData -bioValueEncryptionTemplate=config/bioValueEncryptionTemplate.json -idaMappingPath=config/mapping.properties -getIdaCertificateUrl=/idauthentication/v1/internal/getCertificate -getPartnerCertificateUrl=/v1/partnermanager/partners/{partnerId}/certificate putPartnerRegistrationUrl=/v1/partnermanager/partners -getPartnerCertURL=v1/identity/generatePartnerKeys uploadCACertificateUrl=/v1/partnermanager/partners/certificate/ca/upload uploadIntermediateCertificateUrl=/v1/partnermanager/partners/certificate/ca/upload uploadPartnerCertificateUrl=/v1/partnermanager/partners/certificate/upload -uploadSignedCertificateUrl=v1/identity/updatePartnerCertificate -getKeyCloakTokenUrl = /auth/realms/master/protocol/openid-connect/token masterSchemaURL=/v1/masterdata/idschema/latest -preregLoginConfigUrl=/preregistration/v1/login/config -uploadIdaFirurl=v1/identity/uploadIDACertificate?certificateType=IDA_FIR&moduleName=$MODULENAME$&certsDir=$CERTSDIR$ -uploadPartnerurl=v1/identity/uploadIDACertificate?certificateType=PARTNER&moduleName=$MODULENAME$&certsDir=$CERTSDIR$ -uploadInternalurl=v1/identity/uploadIDACertificate?certificateType=INTERNAL&moduleName=$MODULENAME$&certsDir=$CERTSDIR$ -authPolicyUrl=/v1/policymanager/policies -policyGroupUrl=/v1/policymanager/policies/group/new -publishPolicyurl=/v1/policymanager/policies/POLICYID/group/POLICYGROUPID/publish -clearCertificateURL=v1/identity/clearKeys?moduleName=$MODULENAME$&certsDir=$CERTSDIR$ -fetchLocationData=/v1/masterdata/locations/all -fetchLocationLevel=/v1/masterdata/locations/level/ -fetchTitle=/v1/masterdata/title -fetchZoneCode=/v1/masterdata/zones/hierarchy/ -fetchZone=/v1/masterdata/zones/zonename -decryptKycUrl=/v1/identity/decryptEkycData -retrieveIdByUin=/idrepository/v1/identity/idvid/ -fetchLocationHierarchyLevels=/v1/masterdata/locationHierarchyLevels/ -fetchLocationHierarchy=/v1/masterdata/locations/locationhierarchy/ -generateArgon2HashURL=/v1/keymanager/generateArgon2Hash -appointmentavailabilityurl=/preregistration/v1/appointment/availability/ -validateSignatureUrl=v1/identity/validateSign -vciContextURL=https://www.w3.org/2018/credentials/v1 googleIdToken=https://oauth2.googleapis.com/token -## As below are non changble values, move these out from properties file -appIdForCertificate=IDA -partnerrefId=PARTNER -internalrefId=INTERNAL -idaFirRefId=IDA-FIR -proxyOTP=111111 -wrongOtp=123455 - -## -regcentretobookappointment=10003 -keysToValidateInKYC=phoneNumber,emailId,age,dob,name_eng #partner certificate refId, used for getting the partner certificate -partner=9998 -signatureheaderKey=response-signature uinGenMaxLoopCount=20 uinGenDelayTime=10000 Delaytime=90000 - - -## Remove this from properties file -picturevalue=iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAIAAAACUFjqAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAABCSURBVChTbYtBEgAgCAL7/6eNhBy09qDi6gpjXZSxUU8o/jrfpDmcmY1QAOWhgTswv6sSm8zVhULlgst++8T51IjYNUHdI+4XZHoAAAAASUVORK5CYII= - - -## Check are we using these properties. If not remove them -zoneCode_to_beMapped=NTH expireOtpTime=180000 -demoAppVersion=1.2.1-SNAPSHOT -AttributetoBeUpdate:Name -ValuetoBeUpdate:Sohan ## As these will be based on regEx, move these out from proprties file passwordForAddIdentity=12341234_Aa @@ -82,8 +28,4 @@ passwordToReset=12341234_AaB ## Need to revisit these propeties XSRFTOKEN=7d01b2a8-b89d-41ad-9361-d7f6294021d1 codeChallenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM -codeVerifier=dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk -policyNumberForSunBirdRC=326253801 -challengeValueForSunBirdRC=eyJmdWxsTmFtZSI6IlJvaGFuIEt1bWFyIiwiZG9iIjoiMTk5OS0xMC0xMiJ9 -fullNameForSunBirdRC=Rohan Kumar -dobForSunBirdRC=1999-10-12 \ No newline at end of file +codeVerifier=dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk \ No newline at end of file diff --git a/api-test/src/main/resources/config/bioValue.properties b/api-test/src/main/resources/config/bioValue.properties deleted file mode 100644 index f40dee726..000000000 --- a/api-test/src/main/resources/config/bioValue.properties +++ /dev/null @@ -1,49 +0,0 @@ -#FaceBiometricValue -FaceBioValue=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 - -# -RightIrisBioValue=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 - -# -LeftIrisBioValue=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 - -# -RightThumbBioValue=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 -# -LeftThumbBioValue=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 - -# -RightLittleFingerBioValue=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 - -# -RightMiddleFinger=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 - -# -RightRingFingerBioValue=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 - -# -RightIndexFingerBioValue=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 - -# -LeftLittleFingerBioValue=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 - -# -LeftIndexFingerBioValue=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 -# -LeftMiddleFingerBioValue=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 - -# -LeftRingFingerBioValue=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 - -#BioValueUsedInYamls -BioValue=PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI_Pgo8QklSIHhtbG5zPSJodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLWllYy8xOTc4NS8tMy9lZC0yLyI-CiAgICA8QklSSW5mbz4KICAgICAgICA8SW50ZWdyaXR5PmZhbHNlPC9JbnRlZ3JpdHk-CiAgICA8L0JJUkluZm8-CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24-CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I-MTwvTWlub3I-CiAgICAgICAgPC9DQkVGRlZlcnNpb24-CiAgICAgICAgPEJJUkluZm8-CiAgICAgICAgICAgIDxJbnRlZ3JpdHk-ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8-CiAgICAgICAgPEJEQkluZm8-CiAgICAgICAgICAgIDxGb3JtYXQ-CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24-CiAgICAgICAgICAgICAgICA8VHlwZT43PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MFo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU-RmluZ2VyPC9UeXBlPgogICAgICAgICAgICA8U3VidHlwZT5MZWZ0IFJpbmdGaW5nZXI8L1N1YnR5cGU-CiAgICAgICAgICAgIDxMZXZlbD5SYXc8L0xldmVsPgogICAgICAgICAgICA8UHVycG9zZT5FbnJvbGw8L1B1cnBvc2U-CiAgICAgICAgICAgIDxRdWFsaXR5PgogICAgICAgICAgICAgICAgPEFsZ29yaXRobT4KICAgICAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPkhNQUM8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5TSEEtMjU2PC9UeXBlPgogICAgICAgICAgICAgICAgPC9BbGdvcml0aG0-CiAgICAgICAgICAgICAgICA8U2NvcmU-NjQ8L1Njb3JlPgogICAgICAgICAgICA8L1F1YWxpdHk-CiAgICAgICAgPC9CREJJbmZvPgogICAgICAgIDxCREI-UmtsU0FEQXlNQUFBQVdEYkFBRUJBUUFCWU1zSDVnd2NEQjRQQVZrQUFBQUFBQUV4QUVBQUR3SUFRQUlBUUFJSkFBRUI5QUgwQWZRQjlBZ0ZIUUQ4QWM0QUFXQmFBQUFBREdwUUlDQU5Db2NLQUFBQUZHWjBlWEJxY0RJZ0FBQUFBR3B3TWlBQUFBQkhhbkF5YUFBQUFCWnBhR1J5QUFBQnpnQUFBUHdBQVFjSEFBQUFBQUFQWTI5c2NnRUFBQUFBQUJFQUFBQWFjbVZ6SUFBQUFCSnlaWE5qbWNvQUFabktBQUVBQUFBQUFBQnFjREpqLzAvL1VRQXBBQUFBQUFEOEFBQUJ6Z0FBQUFBQUFBQUFBQUFBL0FBQUFjNEFBQUFBQUFBQUFBQUJCd0VCLzJRQUl3QUJRM0psWVhSdmNqb2dTbUZ6VUdWeUlGWmxjbk5wYjI0Z01TNDVNREF1TWY5a0FCQUFBVVZ1WTBsRU9rZFNRbFF3TWY5U0FBd0FBZ0FKQUFVRUJBQUIvMXdBRTBCQVNFaFFTRWhRU0VoUVNFaFFTRWhRLzVBQUNnQUFBQUZmWWdBQi81UGZHeEFPelpINllyNnU5bisrbEtwZ3ZleUxHR3piZjlocHNZSGlHTlNCK3htTWVqV09yS2d3S2dXTDJTbXc2ejZ3SU5oZGdJQ0E4b2pleEZBQ1dON0tOLzBhM2tNS3Fnd3VLNENBOFFBMVBJQldRZkE1bTN3RmxrNzZTaTg4L0FlQUwxWmFNSnlhRmt3Q05wY0xCOVJxbnBNZGw3Qld3ZGJMdXZHdGpRcS9nTWRVQURnZ3FnSWNIZEwrSGxqeXpId1hzcVZ0MzM0ZW84eENxQ2E2SG9qb29ZdnZQeDdOZXIxNnA1azFCMnN6VmovblJoNXZkeTFIU3A0Mi9BSFZKZ0M5M1huWW1yS1cwY3NZVE9sRzBVWm4wMnVZWC9vSThTeWNRSzczNVhTaTJ5ZnhuTHJNNEV0NExGNHZtOUZuZFFad2szSkxCSmdnOStyTHN3WUNxdWNBaWNrcFArcFEyUWMxWmFZRlhoNnU4ZlZLUUFncVdoT0FYc1lBNE9Yd3dyOFM0bUpHdFZ1azBXTEZUSXJ3VGlGOUJXWjlPRkp0MlB3cXZqTGZtUENRUG0xYkRZenVlNThtU0VmdWk1bU9GYXVZQmNuMnkyQ3Nac3UxdkUvdVdRMmpVa05RUmpGZHRyOExwV3RVSDlhaWpISkVtQnZxMXdReGVIcDZoSEhqaHBUaGNhcXEzU0RicVF0MUZUVzQvZUx6U1ZGQ09qRnpBclFpYTA0VlcwR0lORVBlS3BBOFJpZEZKNStnTjh4MUhpU2VYYkRqdWlJV3BPYjZuWXlYbi9IM2Q4eHBvdzhaM2pkMEVpaFQ5dlZJbWRlbXRSYlF1b2RhdkxLTG10UnladDZTYlNwWVBBQ3pSL2RLQ2t0QTBIWSthL0wrWWIvOFV4WTV2UXlvZ1QycFlwY1B2OVpqQ1pOdFNiS0F1bW1EeG5zeUUyS0d2RHVBT00wVVRObCsvdXJPMFlCdE5teG9QMWsxbERpRlBmMS9yVkIwbjdnU2hncHhnSndtQ0o0VE5sMFI4c0s5VXEwRlFtWjBLTExCdkJremZuUWVUSnhIaFFrVUdLMjBZbkMxdjZRRWpjajVUSEdMcnZjd1Q5Qlh3STZ2Nllsc29KN1lxSUxZVGR6VDhja1I4TXNtNGkzZkhINE04dmNOWWRCOTJVVmI0NHVDb2RoREIyVTYxcmpZNll3SzlaczBhcksydG1XeVVvL0FCN2tsMWpTZFZobHpEcGxGdUc4dThNQnFQb0xXdU9Cd1d5T0o4WVFOWmZya1FEaGF5c1k0YTEycjVSTmgyakF3VWJ4UU16bEhYU3kwcm05cHdHMG9OeCtJaEdQRkRHZEJLeVU1YkpJZENWeCtNYnZicWRicGlQb2hKTHRDeVBjNHpSNDJZTlVYN29qQWN3VjVUcDJ5eWlyYldoQWJDV2FjeGJBYzl3bTQ1ZEI4d0ZNK3hmakFEa25kTk91SXh3eHRnM1llTzl0ZmtTWWlQLzE1UVJXRkU1NnB1cVBST1FvZ1dpcUcvcHRMOHc4YWpGb3BzOVAzTXp3L2ZlWlJ5WllLdytWZ3RiNTBVdkVEOFl6S055Zk80ZnhLbVZWd2I2L3pzUDZCOE5ia2tobEVCd09qNUpORkRYdklWakVZNFZhUXk4YjNqc3FtcDRGSFpCamlWZUlNTmNOd0RIUUQrR0RzZi9aSXhKeC9mSHB1OTFpdkFFT1h2UTVaQUhPYmM0MXFpZ0RudUpLOGNOQjVFQ3luT2pqRnBXdDFNQjhpM0FsdFFHZHpQQnViUmViNDhNVkZGNzgvY0ZlcDR6K2FYQlhaV0xDOXo0cW1kcFNnTXFJYjQwRmNtd3k3VDFuNHJEaHc4Y29OeDU0THNNRmhuQlA4aHQvS2Yvem8yTTVpRFI2TGlJRTBTeGo1bnVlYmRkUkplbWxRbE1DbGFGbDlvN3VyZWdRZTBzMC9ieGNzaitjUFFyNWQzRnoxQ0JtNk1GVmhoejV4V1NXV2UvOVNUVFpPNkx1NVZZWi9LVTA3Q05NRTErcWxaejN1YldQRWpjWWxTL0VXdkFLOGJGYmZuQ3VVYjdhbjZPZjF0OVVKYWlRSkVBbWV6aVREVUozRnE1YXZ1TVBTZm1SKy8ycWw4QkZZRTBlek5ObmZlTEpmTytySHFkT3lqeEIvUXE5V01WQVd0T1VjRm5HYkNHdDRsWlJJRHEvZmZ1WHVWdk0xcTVKL3hPdWt2YUxuaHdkOXhBMVcrL2x4MnNFL1JnTnVzV01tMjVPdmlON0o5Tm1MTDR1UzNiem91VU9XNDVwaUx0cGxidDJIS3JKTTF0ekh5eWR6ODJ2TVRvZ01qYW1KMDBSY3RabFV6RDJ0SmRJM1hEOEdueWdIMUNTaWhSdHVvUWNOSWVrenlma2htd0Nnc1dudjRjbEZ4NzMzbVBZUVZBMEtXRFlyeHE4aHg4ZkRNZ0lvQk15V0xmU3VuOFE5T3ZBdE13NmdDS0N3RGVuRzhUZUZVK3R3MGZPNGR2dSs1TG5MU2lvYk5lbTZ1bTdhYzNLaE4rMUpONVVXV2dxNFdQOHFBYnYzQVpjMFJOSFRYcWoxYWhWekZNbG1YWEVkU3daUEFQWFRFOFVNNTlDVFVOdE91VkJyY0RSZEEvYmpRc0hJM2VOczVKSzRHVHF2a1Vud0p2b1YxSGVYcFlHdjFaSkNsaUNCWVVJOXFydGcvU2NCVlhZVDZXY1h0STRWdVYzR3g0Um9aR0JrMk91SVg2azQrcDh0UVc5L29aV2JzSUJQelA0cWo4SHhCeENUWGJocFRzb25BbjEwK0VsTlAweDhLOG9TbEcvd0dyVjFIdVRzYW0xZnRqSjZoWWwyWnhvckxmQ1d5OU13SEZ1eDNSTjI5YjBCTTYvVEwrUUUxSWpmbjdGTUlGaGQ1Q21JckJHeFZlTFFCNDllUDRnMWYvQXQxelRpRlh4MXJlVVVFVk1UcTE2VkFlMlkxWEF1NEpBZHhUUjZWc0FYZEU2Z29SYlI5N3Z6SllIbm5oQlFoQWtHYm54UlhWaWxFN1J6bStwOWoxNlRQUW1aU2F5Z0xJc0FXdy85R0kvanp2TWhzV2F0QWxvZjhjY1JOUzdteHZwcVJYMS80UkJoM1BnTXlMTVpOVXlHdFh0SkJmVnFpMElJa25uUUt6KzZyN1ZNNDg1b0QrWWNkU2pzcUlvM0x0cjYwRkF4Uzdxa1c3MGpuajcxYjIvYTNibTA3cE9BeTk0QWdldzU3c1B0SnpQT2h3QVZMdW0xTkdrdkQwenkxN3lTL0ZZSXdlVkM2VU5HM2cvYlVyVDZMVUhZL3ZpaXNPRTB3clZYTnJCNC9yQVFxakRYYVZOZENMSFY5MlVQaE4wOEZxR2dYSUFtODltNmM3Y0EwdHdmaHVxR2xDamoxQU8vWWRkRTdYNEpCaHlKRHh0bnNQY1FwVnl5RkJuZGUvOWl6ZkwwWUpnNzFoK0dlcC9ScTBZVDZjWUhjZ3QzWjRzc3NiMUtzL1pMbVZjbnkxQm5QSDNjU2JQL0tUMUIyT1Z0SGkxZG91RkJBUDhJTlBuQ21jY3pIdWVoNldmcHNHSDdYNUlWUWVKdm9lemMwL2lzbEdGZ2loRFpTQ2gyS0diNkR6M1g4R0pIcE1oWWd6K1pkT2JvK25zZERVMnhZdm5qRjhhV0Nzbnhxc2diZG81WDV6Tzc4VjNDVDhjSGI4Y2pxYzgzdUg5TTRuL3dZZmd1UXBjaEQ4c1RDeFJ5MG12bGxEMXZGUFNrWVJaelJnSS9NTGthM2x2QitOczJ0QzZ4NXA3SEorWUlDbmlBNm10YWRpY08rVzBWcldRTE56ZmtCanhIV2MxUGpyeSs1d3dQc001OExCeEdxaFNiWmdybXRtS2c1VlpUNVhxNStMSzNQNjhDYms0Sk84RFBPQUZ3aTFWbEhYdnNMMkUycUNEd3VOYTRzMDZvTzdvSVlOd0ltL1dLN2c5SWxEcmtvMkVJMnFwbUpQQ2ZNRFNXTVI0c1poVjdrUkdVblA4N2NMWXQzdlFjaXZDYy9yRFR1a3BoMVhYcVlMcDZKTUdoamxSaGxjUlMwblNHSzlGSFduaklzeDZyZ0RRa2N3NjB4dzc1QkJOSTBRSU9OUnE3THdpRkM1QzVTWHN4NGltYmNPdFFWL2lBRHlMSkxOUnF3UG0vbHJxb0NMMFVvVnNyK01MUjl6cmJyV3FmVm1NbDZvMEpyVElqaDl0TGh3ZkREQWlpVEdzUUpVZVM1TCtIZERHN1I2MlRBWHJCUVVRbXNlbVEvZGJPMXNpOTJNU1V6eEV4bm5UaStjQkpEVGlwWURvUENkeGlqaHFEOGZ2R0lJS3kvTmJ5YjdnNndBUm9WS0xJNlJ5MzJFamxjdENKZDVNejU5RDRBa2hDa1RRS2tuSjQxdTBFMUE4WUxvTVlGU1NGWldJOFUxUjlRSG5waFFhdUNQS0w2MnduK01uRlZjK1RucDNGcWVGU0Y0WkJuSWlpaXp2NTlsbTBhcytGb0dnOFZ4anY5bTNkLzNzempmaVREUWcyNHlteWc2clFjNDhSeGZZUUFURjBZV2EwTUF4dmlkMndMZTlpT1lqUjdISysyeEhvemNaRU5PUmFXMlV0VjRGZVgwc3JPaWF0Y0NpSGROd0plY1BYL3MvaTFLNlJqdCtxZmtvUnhtYURvZWdmTnhlUmZXVmEvQUNIOG52bVNEY1lUN1hKL2xMWXBkTEtNbWVJYkhvWkdacE0wZE1FT2FCam9IdVdFeWxSMjUzS0kxeDNRSXJEZEhnK0VNMHphTUNLbFgybDVZbEp6SGlpejh1bzJWQTJpS0ZsYSsrZjI1dHVidWxOVVpzaWY3R2JvZXdVMkpZUk9yWUExTHVXOE4xSjlaVk5QNnpKTDZpeVBONG14dHl2ZC80WjBWOTcya2lQdFE4NHErWHNSMk9LUFBlK0MxVzliU0RsdklmSEw1YW1lbFUvTkZjOUlEQ2Nyc0NQZDlrRFdVL1ZyYVJSTDQ0eEM3aDNIaUlWTllwMVhkejBDRnIwUW9LWFFidmhuckV1cHBXb3NHOUhFdjVTbDZkemRjNklrUXFKTGtmMjVDNGNZV0N0VDgzbnJOc1JoZDIwWXNBS2N1TTE2U0E3bVo0UTRyZ3lIeXRIRlNES3VUbnpUNG9ucGFqR0JpR1JER0QvZEd3bG5HNDY4WjBURUxCcEd2VERXbWlrOW4xTGtVaSsyOU5yTFVVUmJZNHNoNERZbGIvd1dveGhTRFNXdXQwZ0ljajZyb1Z3TTl2UjVEZGNnV0xqNjhxZE9uZWhoNmJaOGFpdFlkYUR0NGRWRG1oc2JNWEQyNkhGSnVIL1ZDSENyMHZEZHBrbDhmR1JVYzJ5ZC9QcHl5QkVnRDRpZnIwd0FLL09odFJpR1I0aGFQZVROa0p1ZXNUeU1CWFlROVJLMlIzWlB0WU9aemxOMUVFQ0FtYnRDMlIveUY3MkUvcFVSVXdKUkJITEpFcEZnaUFrNGI4YnFjbWhZRnpSTVI0R091VE1xUHg3eE82RHNYM3cyY0t0WUlBd1huSmFrSVZCWmdudHlhcTFjYUlwWTRQVzVRZEpIcG42WjRXdnRrTDhmdkxhVUltbDdPQXVEKzJERnVHTCtWalh0L0pBaHJTTVNzMXN2eG5PWkU2ZWdSVkdlQTcyTFNtOVZkL1NNNElWQlIzbUJyRDE0c0cwTTd6SjBaWjY4elpySE1qL2NwMkRNTllUT0FHL1c2NldJay9rQkdkaDE3S29SL1hBNlEwMDRPbFREcEhNNUs4OTB5ZGVscm5BbkU0U00yQ1IrT1lJdkZrL3U1WFQzTkc3UGw1aklQeVR2ZDYrZ0NJYk12WmhjSVdHZTJhQlZSMjdSR0RVQkRXQWR1YnUrRUpmcElqeEs2d2FCZjk1NHhadTAyWENTZk9oQWJSU1hVZXZMc3dpMjlHQVh0d0x5NFhHZURjYW9nVzFCd2dpMENhTHlibWJFMGdLSGZyRTNTVUhFQVI3MnpKYXFqTTdnWEg3VFdQZ3V5QWRHUWEzbm5sYThEOFJtaXEvcHZMOHZ4Nmw3eG84TjJQbUQyZkVOZDlkTGJCS0hHYkZtd2JFaGlPc1p6YS9PWi9OMFFTWklqOU8wL0luR2twQjJYMWlDYzk2bHNoYnJwRlY3UG9Kc1RjME54aEhvaUxzYXFwMXNSdUp4SUpxek1rVmlQWjBCaG16OEx3K1ZNaWhaZDBsd0t1QUFDUVFNQ2ZxeXlyNWFMVUk2WjRZak9McWNiaktwL1RwaDZ6K1c1S2RjWXhSdU5RR3UrTzR6N0Q2d2dyc3ppakpUS2t4a3N2Ymk0aktwOWpnTzh2SVdRNWdDVVpOaXo0UW92RUxZN0dyQkh5dW5hbFBhNklPWXFRaXpWMzV5M1IvNDVJRHlUZ2RueG1BYnd2OUNFZjBKbGZXVHdDandDUEEwSVM0a2JtTDgzbnJ6S0c5L0MrSTJOQkR2MjF0NGovUXc1VE01ZWhNcHA5bTFkYUNyWlMzS05wMVNObVk1Sjc2bk5ZdUVHREpEblZSOW4xY095TWtCVTNiM0RqdGtEbGtsTEVtY1lKbnpoczZzaGJWK1A3YlF3TXdVcllDdkVHdDBIbXFsY2syMDVEd2lTektCT1NwMDRwQkY2MFRXK2szOXcrRnJvbTk4U2FTMEppaHpwM2ZIMDYvTC9TSXJ3NWRMOGhvNTcxZVNkS1d4emRLRzJPemx0TXczTDFJR0RPbGFueW9pUnVmWEpwc1hncVBhRmZyWEZ1VmJFYVNlVVg3UUNNb2xOTUpTd082OFV3MHVhMkZyZEIvWFpWZ3g2UjRITEtIZTE1UnNzdUd5ekEzQjlhOUVleGJNdWFydzJiRE04Sk1ETUtjMnVmaFducys5dDlnYXdQOURHc3MrbjFCVnRYMGtKbWZneDgzWjgybGUrS2dwUXppU24zaU9YamtTSVZDdmlFTnpQZXpMWDZoZk5DbUtVaU1wUzltMG45ZExRanpDT2pOTWRZeXBDOGMreWRTVndTRThpYVBTNGpJeWRJL1ZBbGUwOTV0Vm5DTHZIVmwrN1JFanFxM1Jvb1dIKzFHRm5hazcrcDNIL0d6VlF0UEU1aFBoNk5Vb2I5WHNxdnA3LzZXNW9PMzBNY241UDVLUy9qbENiNTllQTlCSnRqcnZwaU01VWJQSVk4cEFxclE3YTNQSjY2WDRTUUVBYTYyREhYS2xBQXRSczIwRG9FejF0QlF3NVI3aVYyWjYvMlNwSU45SEQzSWZIaEhZK1hMNG1DOEdsQXByKyt4VXFkcTdRUFhBR2pJWmJKdFR4a0M5MmUrUHByTm8vbE9VSysrSUNSVS9IT3lOMnEyOUZ3OVMrUnlFM3FCa3lhR21pV2U0cjZpOHl3WktwaGdwQ1duU1AzL1h0TVR4SUtXRVFJRGNyS0xYeEUvTExmUWs5TElQTXJSZzYzNlVBcHdSK1RIZTlKSkhZZUg0QWpXQ252QWNtZHRmWnQ5TXJsNFFxRVd3TjcrZXdqeE9SZXlFcjllRjhscEtaaWQ5NmZvZ3kwaWZybHlxTmtscndCUFFzbk13RnpEbldEVHd5TWlFVHovR3lzN0NxZ3gyWldFUVhFNkdubFdHMUcrL09sVzlZeVdUbFE4QkI1eHdUdXRURHljaVlrWmxIcjdvL1FyVHpZMWg0YkY2UVNydGFqTHNDallTSHhhTDJ4T0hXY25lamJpSmRBc1orY0c0MlBNbjBybzFWZVh3NXNEYWoxOHpMS0ZYUW1ZM0tSVGxtK2xYbyt6cDRCUEJYN3pVYjZ6LzNTUDZVVlV0dExSVkR1dkNaN0MyQkZTc2V1YktuK0Nia2lUU0xUMFZray9IOVBiYXRya1JnS3pncjdjT3J4TVU2eDgxb2dsRGoyZS9wWjE4NkdlZEQzeUhiZkcxaUdtdWpqcFFvTEZXOURxWGs4eld6aFFObFBLZDBhdDN6OHh3eFBKTVNkU0VWTHl0WkdodURsbzZKdW56U21CQW5mWjNzTjN6REhjQmZiOFlyS2x4S2xNL3cveHhjRmhaa1FCaXNSSG9KRDZxN2Y4ZGtNOGJKcjAwME93MngxbTIvWUdKUDBtWTN2S3JlQitLblcveS8zTDc5WTA0UW9ybVh1NDdtSURsM1ZRUFVpNVI5NGFNZEQzK2wvSEFYQk1hT2V5QWlvNkpHTG95R1dGdDRSOEZHL0krblFwUHh2NnlWQXdzWThFWlhHYVV1S3EzTy9iUG5nSHh1TkQyNkpOTkVEN3R0UmQyNktSTVNpUkxEZlV4WHJ6bHY5YzhJMHdHV3RUTEhwbGRXMXMzWjdHdldTcGpzbUV0RjZFZGN1Y2ZLdEJZUTd4NHNlMWhPSm1vWUY0eEVyK3k4aEFSWmVIQnVNdTJmUTRaNTZTMHEzbHg4MzE3UGxDVlcxUUkzSXFDZVMzQUFpVTFDaEJ0WXZpbldoQy94S3BwZXp6eG5YRTlBWkd5eWhoZHpsVFBrcWZWbWw4RVBVUitPMVc0cEZmOUVWeDBjNmhxSEVGZ0FCN29JYldSTWpKWndxYllJRGY2TG8rVy84aEVpOUQzU1dJVmx2SXdCTWdMOEI3TlI3ZG8rY2o3V05HeWRzL0lEdjEvalZJUTVVYzAwcVJLaUpZaEpjYVU1UFd1VGhWbVJFWmhYa0I3cDU1cUNOUXNycTZ3QmNPemFlcHNkWVhFODRsL3NqZnJiOUp2dGU4QnVDaW1NOWR2LzJyOUp0eVkrRWI0Mm4yVk1ncTlKOTVCTkVZWVcxYnNtTjdLNDZjSkp3MUcwNXFXOHBhSVN2NTBkZW51Ky95NVdCZitDbjA2ZmtTaXhwdng3b2J3KzVZTjVVNzYydGNGV2x2Z1BsUGdXNVhTMUlsaWFNZU1OaVVZUkJ5YllURGxDOUNvZS85RjYyUkE3aVB2akxEQ0ZiNEVBUGhUbitVSW5HRnkybzhwbzkxUkFTK1hEa0U1QlkvSFhyWFBaRmgwcHVYMTd2NHRjNldOc090VEhSRmp1MllyZGE1SFo1c0ozNTh3cjlVL2M5eHdkMHhnSlFlS3hnSnNuOHlSRlkweUNja0lnREhxV2JWSWtVU2g5TWFlQWhlYmN1Zkc2YlRudGFNekFGOWlqMmhTeWFpU3pGQk1GMFRMT1ZXMGdYVjJIWmM0WElxemJOWVErRHVmSjRQWTR5d3RGRkJUOVV2NThVK0M3aDR5TGYxTTVFWCtPT1h5cjRhTEs5WUM5aTU4aCtCM3d3ekY2U2FRdGxPalBaK2s1WHVxV3hvcm1PK3hMRzlWbXNySHRIdlczV2lpS3RDeWJGQlNKUFJDWWlkM1BaNjJydENkeE5qNUZTem5WSG85djBENCtzWDhJbEd2cXE0T2xMV3ROdFFwZHJIL3pETGlua0ZOMHRTajBSM0I2b0FKMm0yNUNrTkFMY2xIK1Vuam9tRmgwWGdnY2thVkpwYWt6aVZhTGVJcmNLbEpsZlZITHFaeTYza3AybER4cjRRUnhMejdNMmtmYmR1eVZ2QmJLSFhLTUc0K1psT01hYXdzTnI1YWl4dnJmTEZITWV1b2xJQXpUNHQ2ZVFPckFYWWozZnFDR1ZXUTV5dEsyTmFzemJMbXZtYTFoRjVTOXJ3SGthV2pSdU5WenFic2d5MCs3b2IvMmZTQkpzU25BUHFmSmhsbUZaMzUxcjBjdEJQSWRUOGR2TUo0eS9xNnlJSkdzdlQ4aVpDcXMreDJvU0tXNm5zM1VtVzUyODVwOG13aHNENTFtZC9SSXc1QUFzTkJCL2VwQTl6MWhEU05wNjhtL3JhN0MxQ3ZsR1lNNVVXaWpkb2tUYzA2Y1ZsaGljZnhROXM1ak1JRUNXWDFCdnY0eDR4OG1oVWYrbG1SaC9rUTY3WVlmMWNOOGRPREMxbk5aSjBZM3JpQ1MrakJ2M3gveU9KUGwzVUNzb3FoVzgyeGpaK01UVU1sSHh4WmNKS1N2ejF4bmMzQ1pIMm9vYitJQkVaQ0FjRlh6bGJYQ1JtRHl2REhnbE5kM0dvbjBRamNzL3gwYlhCR0hBYVUrU2poNERHa1hPcVducisycE5rSlhrZG9UTDhaWkp0Uit5bC9ZdXBhWXhtQ3UvbGtmRVV1all6ZXBNN2FrU1FoQkVldnFRVDlYK3JVL2ltWkRxUHZ4Qy9XakZmZmVERnVVTkZuNU9IN0UybEl5RXBZVjRBelpYQmFLckhYMTVLU0h6dHBDVFpFeVdIUWtYd2VjQnFQamR1T0o1SEZaMzdsazRoOHVubVZBTERrSndyYk5vNnRtQ3hyQ2FmK2FvTVQybUthajZuQ0ZYQXFhZHo0Y1BkVkhqeTlHZENaRmppMEJYUTQ4YnoyWDZ5N3hUOEpEbU9YNVZWV2VFcUdEZ2tnMW5lNTZua09RK1JZd29KOTNsclhsODdUeVhUd3E0NWJIUHQrTWtTaDdlbVhIQmxkbmtOb3FaV0hhc0tydGpsSDRLNi9MYWduZVlHdEpsRU5BcXhxZG8yVUFMNE5kdXAxM1pmdytubnMwWmdSUFc4L3pXbW9wWVg3aG5xQXBLZ2I2ZVgzanFFaVZWZ1FUZGhJSnBRMUN3NmgvUm1MKzhwQlo0Z3drVHBWM0p3aVdNY3RjYlpaQlRkc3cydHBhdjFrUjNzQU83aDAwNDMvQ1hwL3RwVkRaZDZtT0ZJcjVmb3QxK0FndThzREFHUWljTzgwWTB6Mk1aaEZwN1RVQ3VhM1JQL0Jobk43aHhJaERGcDBhQzZ0SFJqQ0tEeEdqV3N4NnM0Rk83NHdGd09lYmF4cVdudmZ6RlRUaTk0Z2VpK3ZDZHA1bmh4N0drRzNMQ2hRVUVTM1h2TW9TZldFSTlaT1VGZEVKUzE5VmZGTzBXeE5wVmdPdjhvWWJpUVNTTTZ4N0gvUUpuQjhtalQxLzlzZWhmS3dRUGk3WnpYRFJyU01LaDRTYU1yVzc2WW9rTjhNeHkwTEVZbjVOQ0FpNktGa0VvYlBDYUhPNkVZdlY2RWVUZW15dEdTbHdEVmZicklxck51VTdNWng1ZjUwOFUwUUVlOG8vU1RsdkJjT0RpenlnQXZKK0FVQTBoY3JmZjh0TWYwU2Q4b0RNQXhqemNOZm80aVY4dU1jeFZaSUY2OEpTVXhQa1liZ3JYOVZpa084Vmcyb09rMFJpZlRPUGcvUEVmQ05OS2w2R2p3dW9zTkpwQ0tMOUhOdkRpcWtObmhGc04yK1RoZ1Y0dG1KMGhuOUpQdVJ6RWg0andPaDRzL2F5WjBiZjlaWmlocUNYVDBkd21ObzZvZDRnSjNuZXhvMWVOTWE3VUo5MHhZVFN1M2dvNHZPS04rallMNkJMMUpTbHF0RlJVUGF5bXRuRklYTEh5TU41QUxsVjByY01hTjVCc2crVjRFYTlsRUltZVcyZ3ZBT3MxT1NTYzNwcDhjeUlZbHE3MEY3WnBVTGtQbTBQQnZ2N25FUjhHai8zczdScXUzc3NFMDJRVmZITXlMZlVIZmZ3WmVhTWZqNmoxWmlYZWNtdGRFNFd2ZkFnbmhPSXVWN2h0U0Y5UkZiVlozTnhIQzk4Nkk3MWhrSlBqTW9BNE9CaXZoSU8rRGxhTHNJbWYxWUVTTnE0VVZENVd5R1pwTEcrMXhXMjgveGhjR3oyZTh0U21vOHFWTDFMbkdNRkx3V013em1hMVpNQmd3SFY4SkNKekcrVEJ6Qzg3TTNTRVl6dlBqWUsreDBkQnhBWEFBSFc2VDdva0Z5U0NRWnZ5TWlmcWxqWmVmTHVTQWRCVmFBTVV4UFBvaTlPUmoxSnVjK3l2MXVaeEpzZTFFTEtnaDJQOUV4UHlweUIvbWdCYUpGOGpXSjdSWXRSKzA0SnBqVzVmdmxYZXhEb0tXMUtmZ2JPYnlrT3NlWUwzT0kxVEF5NnFiSHdZZXUwdDk4dzVrSmUxQmw4RzlHMW0yZWpsWTgwcDl4b1JRL0dTV2lUWSsrMWFBbGNLZ21jRStkOVNlNFhQS3h0ZEV4Q1BLRCtML0s5ZVNaaEgyNTd3NURoWWFTVVg2cFJrVnYxK2VuTkQwcEJQOTd3Q2JrS0hLRUV0NU8rYy9abWRHa29OcWFhUXc2UjFnWXU1WGc1WG83Y1VlUGJlQ0tEMEhHL0loVm1HSU11Njl5UXo3Z1pyV0lyYTNiVVlCNnlGTFhtQmxJUmhTU1BYRmdaTVArUHpkczdpUFphZ3dRRmpYN3IvZy9YN25XM2lVTVRUc3Jlb3hjdzgzbmorWUJQdmFuYVQ4clF1ZUxtQVdNclI1WFJ0SlgxbFRiZzd1dm9wZnVDRWh4Q2VPSG1RNWlJTTMyTUp6cVNUZEVJaEdMU25uMVNVYlBtOWQ2MFRSbTFTM0NhR2FuTTVOSVo0YUVUd3JxaDdrSG9NS1VGNHJqOWpoWmRvbVppTXYyYUk2VzNPUThzbW5VNmFPbWcraElRbnNBZ0V1QytTQ1liWWVrYS9wQWd2Y0xzQlpsMjMrTWs2enlQMG01N1dQWTdLZHBqT0JTcDJ1S1NrQkhjZ2w5Q1Q5YWxQYTdaYkJzejc0UURleFJHS09TZE8xbk9jQVZrQVJOSEIxdVlCSFBCKzBvS1lHeDVGTFI3N01IeEdwNXVzYTFXWm9xSUtRZkNGaXhUZmUySGgyVlBlempzd2JWR3NLMnl5bVNCcEFTdXRxV1RyTkI0MWdYeURlU1lwYUVDNUtKU29aU1k2VmJhK0FnSUNBNXZlR2JzalpYOEhwZ2RhcmVqelF1akIwcHg3dVpsNmpWTklvVlFVOVdjM3FwdlFpS3NNY0dSV1ltS3d1eis4RDhxSkdML0JML0dWVlNTYUlqTlRCdmhvNVFSdDltc01rdS9yZXN0cjBoRUlxNUF2WDRmOWt6aFkyNEZTUnZXVW9wemZMZXpveWhTOGM1UnhFYytpTXh4K29jRGxoemZZekl2eksrakNIT25nOHkzQnEyOUJkWGpjMXJzL2QrTXh5dktsc2YvcGF4dVFMV295Q0RMZGtjM3NRRml1dlgwQ3pZR3VHdTlDd1Zlbyt4NkFDNkxBYzFLMTFqMzVGdytFVUVtdE5sNFpwd0ZqNlZMc2VkeVMyRytrd0IxTUpnZUhLYWoxa3lMUUFpcFFnSFNwenM5YnJkejZIQ1lHdWdTcXJtU3I1MGFURVJHQzVFSFlub3BDTlFKUnZkM2VnQStDYk5ZNVBRUnpTbDBTRDFROW1YT0pWWno2Uk9mNEJqRnBnMkhwdHJtMGdDQVdMZEQyVkJrRVpvQkdzenhZK0tWMU43MXVzMHVab05Obzg4RzlnK1JkaElGekl5aHRmZDBvZWNJam1RYTNGU0RoekFTamVEdWpRK3FLa0pQdEgvcGZXUXJsUGJsdDhQMGlRRExXNDNZSXhtRENOS0tQdmhYWWFFVkdtK1hhZ0gvNHVxWEpRTkZ0QWdQU0xKOSthRnoveVZtbzN6NVRpbDZVaWtMSlRiT29QVFdOb2kyTTllb1BRcGpFUmZ6bVNFNlVCa01KWGU2Sk5lNUIwSlI4aVRqU1Q0SEFlNDk1M0VpMHNVc1dNTFRDVXZXRDg2Mmp6TFNoRGZLUDRRMWFJYlY0MStrTTRZMWVYSXV2NnJsa0FYT3lDWEdnVkVyTVpnOCtqaDZQaWdoaTE5QWxqS09SdHlZN016MzBDZSsyUUhvdlVyWG5tMHBydnBJME5HNnFpOGE4Y0hsZEpadWpzNVdtWU5VWUozVGpKbkpoeVV6U3BrNnJ0VitqUWdWU0RtSTIxNGpkVVNSdWRpOHk0dTB2bjJkWFRmbzZxRjRFU1F5MjhCUmZkNW0veEFLNCtlQmFsbHVaSEw5c3V4b1c1NkViaWR1OEFSa21zRTU0REF2VmRXdXlEUkZpZWdQY0NzanBqZE1BQS9VQTVWU0RhYXlsSHkrbWhaTzN5MkNZMjBXT2dlNDNZbUswVTNISDBrZDJPZER6SzA0TThqNVVUV1JXZVZaWTJ4T0RFUlk1UFcvTytBbVhvTFJma1ZkZ3ZVQWhpeE9qRDFkeURmb2dqT1VxZm4xWnE2dFBHTTN6SEpBNSsxT0QrZlRveUMvSHhUaG1DRmFLcmtwVTIrTHRja1dhY1NuNm83N3RBYk0yaHZBczI1Qzk4QWMvZ3o1MExzbEhEejEvdzhqaFljQlc4U1l0OER1dW1DOHZXeVE5R0ZOeDVqR05QeW5KOGJKbGNRQkRyMzJvcEt6NnRqRndjY295NHJPdlE1ckhibkIyRjg3U2ViVzVNSUxuZFFPekRNVmpZMEpGaFlKckNaekxFR2Q0Zm12ZWRrQ3dCTG9UaUZyVlRlZ3VUUmxJL0orblNqaCtvUmlrZG9RVDhMcWlHeFVDcGZSMkdYYlpHeVd4dWRZUERPM3hyVmg5Zm03YklKSU9EY3NkS1gwRzdZVXg2UTBrS25QTE1xWlpYdnJRLzJrUHVFeWcxTjIyZjU5MVhMQkQ5QXRjSlNTdGs4Y1RpemM3TGZuYU9NUGlYY280Nk5VYkZwTnJMUEthMUh5MFlhZXlEM1BlaXRSM2pEMkFwT09hQ3cySUw3bEZNTituVjlha09rMFlZQmVTMW1TOHE0eEVFQzNSNzRQUktzaWU5U3dWV0VENWY1a2x4dnRYOHYwdmZWb0QyVHViRW1Qd0l2cWN5enMrdzY5K3Q1ZkRNYWgxemxEOUR1aDF1SjZBUkI3RlIxRTMybDBseFl2Mkd0Yk9lVDFrODVLcGxSR2FseFRRWXpncVBsaW5RNjFuaUo5L0tZUWZnenV4ckNPSVN0aXhFSkZRcjk1eC9EaWplYUNXZWVXNjlFbjdmQ2NWUEJ0TGNHYk1odmRKOUx5UGNsRVJ1S3VkMGlGbTdzMjdGZm5ROERkN21IcVdyb2xsU2NRRXdJVGpxL1FBTEVsNVJvU2s0MDdJM2tmbGQ0UnpRdnljOXhhd0RSTzhLRHJVc2ZCVWtZdjl6VGJsNld0eDhNSzNQa21Sbm9oMTJJRU1GS1o3MmY2Vk9hOWJIbkNEbk5NazRsUkRCUWFMY0N2VnorMkgzN0JnQ09yTitvVGwwN1NmakxGUlFDQTN3TzBaVjVoemxiZkZZMlJYc2NJTU1FcmRXdllSVWkxSVZVNzZNR0FabzVEN21RcUFwOEt6MXNubzJCRWZjVmIxYmhjcmVZMFZlVkFFNk9odlNhOWVGbnZ2YXlBdHgzMWg0VzQ0OFpDb1JKKzUvOFV0Tjh4WXNhWWI3YkIwdWxqVEx6akpwc0NOT0s5VnoveGJWbVd2N1lBRHhLRlFzdGdZRHU1aktaL1U1aW0wSUFPVU50UjFOQk13YUpwYmw0OE1WYXBaVXhXWlU1Sm51M0ZDVU83NjYvTE84cmVnQi9wdG5zV3c0Y3FjSmNvcFEzNFlHWHVyTkRwTG9NTEpKVk03Ri9PREh5cm9ySjBFcGNPTEdSY2xjNmRIUDNFUURSeEFjempja3hrRlJMQUF1dXNYbEsyZ25tckFDTDdwNkJTM09nTjJCWUZFbG0wS1BuckZrd3c4Y3lLeWoyZlRmdHJDeDdVQlNpdERQaDY1M3pmT0VHS1Vack4yanJmd1hNdHBwMGdLYzB2bk1wSGpaTTVIYzlTUis1VUhXcUFCZ3psU3poUHBMOUkzMEFTRUd0OWpVU1dEa2F3azk0WHZKZkhzSGRURHF3b0ZJT25Jdmx2RzcwM1lBUy9DK0NmeGtCNUFkZ2lac284UXIzSXBRdEJrY1V5aDVSRDRHbm9lRjhnZWw4RFZwSmZHL29kcDZDREVLVTlld3pYUG5XN21Hb0FOR1R0ck1PVkZXV0ROVGVaa1U1eTZwQ2krZjZseUhaZWlqNmd5REtjWGsrKzV3c1FVSDZpOXhOWk5EZVpyendOYkl6WkhEeUp2NFgzc2hYNWtpc09xK1BEc1JwUU1CYmxzTkJVRjY2Ylg3bW93U09xZFdOSm5wOVNYTFhHMWZxSC91U2orOWJiV1prMFdmTUVtdFpDZUlUOVFyTGp2TjIwcWVkT3BUR01KM05mUTNjczBUYVRtYW1pMFZZYWM0ejE0a2tBc1g2WTFvU2NNdEFxYVExd1p1bXI2QnRkWThaNklKOUhDRENFZDNGbTZhajNyY0NxczZDRitMb2hwMmFkS3FXUlcxdm9oQ1NoaElqLzhSTCt3UlJFUFlpemdzdmJxZXR4WEtXTVNKYVdVa3BWanlEc0FMVURIUWRTb3BvTStGaGFFTkRnRkZ1SlZZUGtpOGtvVEFoSlY4QmY0MzhLbHVFNDJLQ2xpTnNUQTR6aHNnTTBYQmZRaFJpMmlha01jZEsrS1hIS3Z0cWJvUEVKejFnWUZaejVIdFo0WlR0bEFTRE0wNE80WnBjSE9uWVh6NHcva1JqM0xHWWN4RWowT2hGeVcyYm5HYlZWM1ZKdXFraFJJMnBPM2pVeUxFTTdyQnVlRVYvMjhkWkM5RVhsY2d3TytZa1NQMVBhd1JNaUVmM1V4Tnd6Tll1K3E1WlV5SkxsNVlYSElQZ1FmZVNobk10NEFLcnhyeXZaT3Y5aEdNek42Zm43KzZ5WUtFVHFLS3g5UWhXbDUxY0xXOEVITXJxSGc5NWZjSEpkTHUzdWRaZERzZCtFZndoQWo3MXpxSVdpYVZ5VmZhdVlxZ2Y5TTRyOE9jUDZPbldKUjBHbE10SlF2ZlJxcUM3QlBzdzdibFZ2TlNuTlBzNFdYdXdwaXQwT0R0alpNTmc1dmZQTEhWS0RzRWdvMmVMQ05GNXA0eXpwbUxBektuWWIraEp3VHozZUJXcjk3ellBY2lCTFNjbU90K2k5ZGlpV1Uwa0tHdnJMRkNjcTNVVDI5OHl1cU85ek1tWVliVVI0WjFqWEVmWmlaRHhGUDR6Qk45d1Vlb0lvV1RaQTF6S0lXaWpGaVB1eEMvZC9MMGZPRFJsUUhOazkzOVpQcjlsVnQ5aTZUNnlPbkg4UHRTZjRmWHZpeGM5ZnpMNzJLVVBpYzltazh0b1Z0Z3RWNUNVTVg3M3g4anhSV2I1LzAwS2xSb0s5S29sQ1B4YjNDMXJzK2xoN01DS0VQZWZBT1ZlNkl3SEk5dFZLdUZVVjBhenptWFZGMWFxK1d0azY1U0NwaHlKWGRpYVMwNEwreFZrcWNGQ2VocGxFcFRlemRiTjRjbm1SNE8zYUNwVmJvYlY5V3pnZzlpWFFXMlRpd1FuaTlGd2taUE5aTTZqUS90L2owZXNpS2VxcXhnSnREWjVvSmVqeHI0YUxvTTF2M1RQTjZISXFMeStndlB1Wk5BR3hUL0w4cXVPRDBxdXlOa3NNZGlTWisrS0N4MzdrS1V5R2RiODExc1FwbzR6cTZOeVJSaklUVUJUTDRqeHlLR2JUbjFkYnZoMmF0RU5vRmMwQVVqMGlMWlo5U05NVHhOdHJ2Tkxsci9KQ2xSbHhIbTJXWTUrWlZEQXhMazlic1VtM1A0TysrY0pkdG5DWnRicVhZYitQTk5oN05xUkI3dzVFeTR5L240R3lPa0paZytEQlNPdjlYR3E5ak5tYWd3VjVaUzZVM2c2bnZsSUYyMjhGVDB5eUZucHJ0cFpoYkNGTG9PT2U1ZmR4VkIvVWRjTkRQdllFdjRVbnhkT3ZLSXYveDJNMklEZjY4YXZySmozcTJxUThFbW1uc25aVEFGaXdGSmh0N3YyMkt6Nk1mdkprR3l6eEJzRWlvc25naWNsdW9ldzB5UElvLytoSWIxbG9nenlzaFcwd2VsLzBGU0ZHQUNDb2lPMHVqL0hBSFd5ZUhqUS9xVnRNUlU3UjJJZjI0NlZCdU0wM3ZuR3ZtQTFGd2Z1NDBLd1Y3UnhjdGtQUjVFaVF5NnFRMFZ5YWwzK0tjS3NtL1JiRE9PczAyT0NIU3pjM0JOOElNTXVVQkhKZ05LTVRJbkJuWXhPOElVL011S0EzbHpmVUJsb3BaeDAzdnNnZGU3WEtEb1BKSGlSdlR4SFZGYjRkdFRscFN2dFpHQTNLcmRCblA0MTJaekNtM1o2Z3AyczhNaFFkaUU4amlMbE1sQU9LbGJ4SlNaZWJ5aEhzd2k1UDdwVlpBSEs0M2hwSzUvZjZ2b1FLUEZaa2U1M1hUQjhPU3hUTEpyVXBCVTR0cG1NcHFNWG83MkZVWkp2cEhLNzBTaTVnN2szT29IKzE4ck9iWVBuT0FGMmhhRFN0Titnb1pBcGxYbm40bEh6MGRTVjdLTE1xNlAwalV2RlIwWWlLVmRNV2tZK3NqSzdVaTJGWnprUG9RQld2TkFQWUNJZGJQRUl0OVN1Y3ozSU1EQkJIemJ2Tm1wWWQrY2Q1OExJODg4Zkg5R2FoaTNJUnhia05KYitUTzZ0WjZVQ1hvR1RsVmFhUHNFUWh0SThva0N4QWNVeXpFUlhEYXg4TDNnTEtiNURlNndubi91S2JvTUpHM1dkS2dXVXNpUzVsdHduSE9OODZkbUpCTU5EdzZRZGQ4RUV3dVhqS3FJZDU5VUs2MVoxdEgzckpSWTkyb2s5SEtmNEVlOHgrWncrMDNjY2FkMHFjeXhkaUVLQVpxYm9kR3RocDhRMmFNbFQ0THpYVjd1RWkzd2M4UkFPSldneExzRldMV1FaRG9HQkJmZ3QwQ3dZZ0U2R1pvR09YaDhFdVJFT3ZyeFJTYWNCZTBPTmNKQ2VHQjI2c1QxUjY4TmxNdTJFZEVoZzZ5U3ExME0veXNYcHA0dmJobEFBQy9kck84Sm5ROUFINjdvQ2FyOEdncTlOSm1vaDdRaW52Y2ZqS1JFK01kN0xSNVRPVFM1KzB0bVo2S2dGR0toYlJCeFp2OFVxemhvVlF2c1dWazkxR2ZIWGRUQXJRWEhIWEkxcmdCYUU0c0pRRU02MXh4Mm1qY3dEdlhTQnIvaVdYeTVnTkFJeGd0WUZjY0YwSEMycXZqMmk5T2hlVXNOeW1YZFpXSFZBMldKclFPQ04vVWFzWS9lUXQwOU9lWXYxT0YrU2ZLdmNLM3o2eDh2dEhZamduS28xYXhHMmNVS1VsWHg2aHdSMGpaenl6NWFlbmxpQW9sTFltMkgzQWtMWFZFNWU0dVdkKzRKb21QZllyRkVzamRyYlRFZm1LaStXeWJGVHorTkI0Y2hVQUV5K0xFa0pRT3lMenFHMFMydTNyMCs3Rk1kSXZDTmw1UTY3NWlDcWo0ZlVPNzZrUnVBdzNaV0J1Y1c0ZkhNRjIvaEtpM1FwZ3pST3BGOUFiU0oyOWVtd2RMNTJ1WWJIdnlyQjQ1Z2xEd0x0L1RYTEc3NEdiVlpwZVM2Nys3dDJTQnhydEIwUDBhc0RSOUdLODFyNlhsdWRETnNadEY1S0FZWnROUVpyTk9vbno4M2EzTUEyeVNDUWlCb1BVVlFRQUFNUDJLam12ZFhnRjliZEFqZTRXbmxXQ1pETzUyTTNtQ0t5eW1hSzJTdEpCWmpxdTlPYWJKTFVRRmF0VThHN1REZ2hOdndsYzJuZzVBSXdsSEEwUktXWHZtallwcHY4Zks4TVA5ZE95cWxHMWpPcmY3ZWRNTWYxaWdZdUtMaU9IZExaQjNxZHpIRFNoWWZwRDc3dzFYZFBoOWVGSUw5MkRjckJ2M0JrMDNWdnY3V0FiVXVPSzVENWM4ZEFHMWRZS1pGeEQwNjAra1V0NHgzR0dCMUlmMUtBS05xcy9Vc0JHY3FoMXYwdWdTTE01SGx3N1duUW44ZXd5OW1IZnNaZEkrOTRZSlgwZ2lwNjBrcUNEMU9CcnNBT2pJeGVwRzlZNGFjcFlLdW1POWlMY2YyL0xRenJGakVXa3pBM3g3VmZ3MkNnMGtiOXZzLzJQN0ZEUnZSV29uMTN1dDJ3cjViK1ZBaU1BcnJNWEFsdGxDWWgzalNtZUhtWHRoOXpwM2I2N0ZCc2d5aHV6YS9Ua21PbjlsN29ELzlrb3FHMTF4dVJjalVlWk5GNG5LZDQ2OVNPTTVHeFc0Y1hiOTk5dnNoV1MvdGsrcmdLM1RleElBQkZjd0ZuRzZGMktyZVRQeFgyakZEL2dRTmV6RjBFY1Z2eEtrcmJXTEJyVm9sUkFibkQzeXRkeE9ibUg0RWdJRGo1TXBMbVhSS2c0OXM3VjZnT2xLblB5UWhkRm5COFgrU3gxRzh2Ui9OdzI2ZnZQY0ZBVVVOOVZVYnBtSzh5RVpZdjNTQUNBUEdvSzMxUFMvcmRUV3ZUclROM0w4VVc5Sks3N1BSdVNCS1YrSVN6R0kzN1RJZ01tTnZGWnJlMGZaYkRIaWFiamNuTWI5Vk1uL20zOHRORkFxL3Z4R2N0Q0tyajFPRkxRd3o1MmZGMFFWL3UwUWQzdVlEWFp5NTZ6TEtIOEpDOHIrQXNQeE1QUUwxVmc1TjJRc3ZrbzFIWUk0OVFWQVZacDJhTzFhWmVkZG9jenlIK0F3RTZDNW54UlRYUGhmd1ZTbmVwZzg0OWx1K1dxMjBRdzRCb2F0dERTNWQ1NG5lenhrU3FtQllHeG5iYWF1NzdzSjZ4VlRRYThKdGFEQitrTmR1ZlVUcmkzVE95elBOWkdNUCtOTmM3MU8rbGlqK0g3eVM5MmhxTEQ4TWlRbEFqajVhM0hIT3FZZ2I3blh1N2tOdG43NmRMZENLTEZJcEpVdXdQdWJOaEU4blVIU3pjRHFhMmpwakd0V2t6eW81QmhCanFoWjc2b2FFT29IekRXbmZMbloxT2VKcDBPcytQVExiWkNoZnAyTU1hZW9RSjRIQVgvOGFlbGw5MDdpeHI1SW5xZ1dLSTVzOFEzek53TzNnNWh0VWlRejNHOGQ4ZTlPNU52YTVDekNNQXVwL1NweXI5QTRTMUNCQnZJb3dtM3o5cFkrSk4rYkdkKzZLSmFIWnJBdmt5bjByL3RlM3cwVEJtRXRyOVYzSTljcldvRWQzL1g5aUZYdXVHd3c3blNjdFFWaFNZRE1RYzMzbFp5ZlR3VjVuUWxzVWRNSmV1TjEraTR5aEFzWmN2VUtPUGxadDljNEsrN1NMSStBemRBWmZlWHBLZWl5dkEyWHFscmxJWVdnTGV3cWtwOHkzVi9pcVEwZTZMNk55N2hBSnIxZHdzSjBkUmdUNndsWVJ1WndHRjFlRURHeDhmcU5nSGVDMmc0eGlGUkwxek0wRkpQWHB0Vm9pV2Y3RU9uKzR5RlFCc2ZGdDZpNm16MnlCWU1Dd2RmeHg3cTl4aHNEL2RPRUJEWFhubS96ZUR2Y0s4azFqM1JrSlZpUlRwTUM4b0plKy90cmVtWkRKY25SckZTSzNsR0sreDRhbnZmY25aL0l0NXJNN1NncTlvenJNZ0hsREZkUGFJT2RQTU9Hc2xUd2l3TWZ5WnlaZ1Y4VXdwQ05RVUoxck5JbFBSaTJCb2ZETnh5MFJWYzl1S0ZmMlAzWVZLMzViVEdlQWlINjd6bVZXNVFEWm9ydlBXenF4bUJOZmJiTDQzc3ZpZEhib1JFa01qNUhuVWRobzVFKzdYVVM2MHlZdkxORHE5RGZqTjYyVGhTMmp4ZWZ5YWx1UnpJWFlTRHpPaHdWeXpuZUhtd0J3L0QxR1E4VUpNa1QvSWhTY2l1U202SVJ1SlU5MWdCY2lNZkVFU1hiZ0tmWk9hY1ZBUTg4SytYRjRGYW04RGluS2JhdGE2cFZNMGtmK3lCd1h1a0JQWG1rS1gyK0I5Q3kwbit0dG1QR3ZDcWE4SHhsWjNoS3k0N2ZIUHBwNjhHa3pjdURVWi9EdUUvZFdNQ2VCQVBENnZPa0g3Umk4Qy9wWVN4bnlCN1dHOFpHamZaUTJvOVMxY0VLdXNzWGlGK0VmOG1leFdmcXJ0U3JIZGdLNmlyTE9nT25PaVhUcEpQaWNrRU5US2Fla2E0V2ZIdzREVlNDOVh3Vjd4eW1KaXI5N004a3UvWUF3MUtQNTFoM2tpZmZEbWQzRTB3cUNacXNGTk91d1M0emFJS3RtZkdocjVKdzV2OVdkcUxqWnF3bzEyWkFROWZrZGdhU3pWSWtlTVRGeXNuRWpqQUEyZ3lkZSt4dkVuOVg3UkRGUDVPclFGaGNVQWdNSlBIZW5iOUk1Qytab3IwdXFSdGNiNHBUSEhsYWdVUStsbXIwNDBoWVNiL3NMOHdVS2tTOUEzeUlWNUQ3ajUzRDNDYWNyT0RiekYvZmF6Y1U0R3EzL0d4SDRIMldPZ29tZ1ZwTnhmZ1RDa1Fpc0lnb0pMYXRKUjloS1FURUxlaUFzK1JjaHROaEFTMjJoRWdFdXpQWnlWNTBtVzhGVk05ZWlKRGt1L093YklweWc1RVI2SU5WYUh6emdpN2VnZ2RabFFnSHBtdDA5WVA4OGZEZ01GVmphOHNucElLck1ZbDQ1M3g2R3NFQUZJMCswYlFCSjdUengvVkZZTE9KSDJtTUVQVmZmY0Q2clA0QW5GSzBPQ2pOcEx0UDBiSElUb1Vndjd4aU5iRXQ3R0x1UG1ScjVYRXo3ZWFVWFR2VlBIZVh0Sk0vOTd4OERnNVlzSDVSOWNCa2VVeWsyY0R2dzlOSmlQN0pXazVIcXBmUGRFV1Q5eVEwUlRaRzdaZG9adDNhRitCOFpNSnVNb3hvOHdHNkdrVDVjRFNTdlluUmpqdzVSZFFYaWYzaTVLbDF0NVc5dktWRzRHczdzaTl4aFhZbTJyZ3pmZ2hDT1RieExYelFERHdXZktIK3F6TUhZTWpRejM1ZXVCTjYyWnU1SXIrTVdGeWZ4QUQrSTB0VGFxendCakdEakYyd0tmbHhGWWRyRkxFR3FKY0lsM1pqVHRnSjRwMktoRmFFWkV6N1BCQUJhM0kyQXluR0xPQ0ZPRDRjbGdrWm43UytDVlpCaUYrODE0MTcyT3JNWVVSRHN5SVl2Y1Y3YnYwdnpFSEExcFNtdnVmY2xjQTFBU1NZcjlSOUViSFE3MEs1WFRZaHk1bWJWVmQwMHIrem1yeFByeGx3WjlITXZOS1NQU2IwREVZYldLd3AreDRQT25OdFl3dUdMQm9HcGE5S2xHTWxYVjJVaSs2QXNydjdIUWlaRnlJakIyb08zcW1sclhWbHcrQ0oyRmdiL0J4b0NmakdEbkZvUFJwUEo5QVlFdnl2SGFBTTNUb1Y5RGZnNHZ1ZEE0cnB4VGJBZm50THJsU2dUbXVVYUt6QzVVNWg5YTRacnptK21ndC9jMXUyUDJEOTYvb0tWQ0xZZ256QTRhanFFZjBMOEZRUUtsamNuaFY3WDJqWnNiVUlBVzhSM2VBRktKMDZqekY2QjFicmFRZWRZRUd2Ylo2OWk4aVJIY0xBWFNzRzI0ZWhRcm91V1ZpRTlRamU4dStrN0I3N1c0U0JJSGpmbytnQ0ViQWFJdjlTelNmU2hTNVN1VmNYRHpLZmlRV1ViT1JmTjhLZ2E4Mlo0RlVkckwxVUxNM251aEQyVXptcjdxTkJPNThEbWJuTDRQU2hFT0d6Y0NVTE9CSXg0Q255ZFIraThtcVBDUjMxUkVRWVdITldWRjA0KzFUNC9sOVd4N1p0T0EvUXZxeGhMaUE4YmptdzFKUlFuWFV6Q1pVSFRHSE0yakdLY0JlUFVIb0Q1UjNMWTJBNHNPSk02YTZNdndPM0lWOHRXbVlkSGI3RzVJb004NVRrQmdOVWRBU3U2S0VLVjRYa3JVR2ptZGVTaGRmMWF0aHhmQ1BlY1lIK1prbE5jZ1JSdkdyZG84MndWUUJSa25menNwSUEyeGE5NXJOQW91VUxibGoxeFlvYTM2Q1RIMEl5NmV4aFI1Q0xXNlkvOVdpMzdkTGt2ZitLUnllUTVDS0ZqZmx1Y1ZxL0lMNjVrb0J5N1g3RzQzakNta3phUHBra2ozNTRxU1NXV1RteCt2dDVuY1BwbEF0ZmFnb1VwRm1hK1JPU1l6a0VSdUNJdWwvSnpHZE1OcGpDT2pLWlFFUno2d2JhV2tFeHUvSVZUdTF4WXlTMS9MQ29zdUZhcmlkUWprMXZIUmJCd2V1aWtSU295RnNqQlEzOWhkMEhIeDkrSkpXckx0STI5NTVRa1BOdzU2T0RINHBuYm1NQ0J5Uis0cHc5cDVGOFlnZytGRllYUlYzVjhlb3ZURWwrWGdzSUhnbDZpQ1JrVjg4NTFzdWUxRmU0WVpLYmU0eHc3Q3lZZ0NzYjRSNzZSTitOK09wYkM5TWs5NHVRS0JSUXN5Z2JnUm9VcllLYVlhNnh5WDJ4VDZMODZURDliZS8xaFRReFdobEhqbFhOUVAzamYvY3lyb3hkbzQ1MU5DMnF0VVA3N2pOMkZPVzVQdisybG0xcDdPMTk3Tkd5eGVBd2VhVmNZL0FLSlRyWS9uVnVZY2hzS3dpZEdGNkxCVEtJcDUwSWwvd2lXTmNTSzhCREdxR3JlUTcwckV0cjRDamJmcXVEaDc3YjRRbXdoajhWQ0VKTU8vMUVEcnpTU1ZqWmgvZnBwTWtIUXJOOTc5ekp5OUY3SVdWVEdKNk9SU01rTUlTSzRKcDk2L0lVRE0xVnVrNGhZSFd2Smc5bUxuKzhndm52aGt2aFVrZGtPNkpTNVdYY0c3RWtvU3lyRjIrVDZlb3ZqMXNIM3NtUEorK3VPejlRMmRuVFlDTStDdjVLZHAvbUlmN2dvVnBlc0V4NmNETFlIelhseUdHZmNYbk4wdjBjMCtmaWE4aXl0ZGhVQjkxVkx4TlI4cjkweU90MngvQmdtWXVHVmx4MUtFWEd1MGFEaVh5bklUYk5wT0xQOVBTKzkwWGp0NktLd1B3MnpBRFZ1Y1NoR2daem84VCtpekNsNE5hWjMzU2VpM0Rxei9yOS85YTBuMlluRmJCSDNZYVluSFF0dTgyM3psYzZqOFhzSUxEK0ErdlNwWURhWXFSRGpnejNlTzM3djZzYitLQWY3ME9yZmtYalZhWk51YjEzYWZvM2N0SjZmckYxMVdtTDAyaHVpUno4SlN0RzAwNldLVGE3WmZ0Rm41UzJtQ2N0eDNHem0wUk1TUGpIY0FGVTZsZzk3UzNwaGtvRUxXQjZTeGxHalphdW5ybGZJaTFFOWl1WGd5b1dwLzM1d3prUlZWS0JBTlVHM2VsOWlWR1dVSU9vYVhYcGJlUG1nZG1FbEwzRVlkTjRTbkh5SUdZS3RzWEVCa3QxaTFuUDlzUktMMlcza3NvUVFDSllZTVpoUTZ3TGhUYmNxWlFGeDRBUkVLK3dDQ1RWNC9QSU9RQTBKL1pLU2xrVHY1S0JNOE1qRTkxRTB3ZnpyTytYMEw2cnBmUVhrWkw5ajBvRE91Nkg5UkpLQ2VNSkhLK3FIdWhkb0NPZ0JDdTFFQVV2TUkwOWxEOFhiVEcvVXdxR3Mwb3BtLzFEc0RkOHVYQjVOWkVZS1VhejNPb0ZsUzg2M2NnUlFHV2h5RE5KNFd6ZS8xYlIyV0VScnNaalpMc1JUR3BUWXV4NmRzMnpmQXpuazVxL1MyQ0dZMThYcFdESThYUDJ6OHkxSFNteVAvVU1VWjdXNVJpSFQxbkR3WDVPYnFKTXVyZzVLRVpiMHYyaFR2YU81YzRvTlN5QWN5MkdRaHVOMG1xQ3NnYVZVK3hyR0hxQjRJVGh6dkNMMEY5MWlZRngyQ0Q3Tk9ZNGFOYXlUSklDZ1FXUHJHS2xPTGxPdGVVemJhVndFYzRsM0xqdDhlbnhveTBodW5tV1VOcGZwdFlFek5oTHdmWUNxYkpKUzJlMGtRUlZmODl3a1Vscm85NS9ZYS90NkI5Y3NOcEdld1lTWUttM2ttZkhvZExaMGtNVlRCMlZaY2NIU1pKbnA1OWx2c2lldlpKZ2M0YlJrVjVDWE9sU1B1QmFCaUVjelhoREd0THZ1bkJXL2I5a0xGWWdkWVl4cnVPYTI1Ym1IWTNWYTltZVcvMnY2QWJZcWFKQXdXM2ZyRlBsbWkzUnBud3o5bzEzNTBFUmhBODZhbmFUMkFkOHdmMCtTaW9kWjRNdWNyQk1iY09ZdjZRKysxMDBDN0NKZUNSaFNCRm1QNFlQcHJ6YVlTeVlhVzMvSFFIdlZlc1lOL01ib3RvTXBRSFQzRlNhbi93dVNPT2N2clNySkg4a2tadldhclljTnZZSG1HUEV1c20rdlFtMkpmSkJrc3JROUJQMVFvY0JBZTlRcFZITFJ3U0ZDbU9HbkFpNzZiTlRaRlBzTzVzNHpEMkIzZC9IeFJGcURObnhOZG5pT2c4aUhsc0sxNVlCaWx6cmU1bDVQUld2WnA4S3ZLZXFNNHZDVnR6Z0lGTlR2ejZsblBlT3loWWhXTVVzWFNNK1k2TVNaUWxxOG83b3BIOE1wWm9lYzhzT0VEVVdHV3hheFRaL0p6ZmY1TjJLS05adXhOZlQyMHVNdzFpQnVoQ2d0enVHZ3Bjc3pqYWswdFU2RitmdVQyZVJTNG1MUG00ZlZOVzltS1FMUStNSzVQSE1UQXhRMGpBQWoybWpnUjNOSXFoMFVZNEFEb2JNbDYwOTVqSU5LRHVLRjY4WmFPQ1VRTjVqWXVuY2R2SWwyWktTQmM4ODc1OVVJOElhWXNWUk5GSDJRemg5WVNjbWt1ZkFybGhRRVcxekNIeW1rWEFaQjk0WUlMK1owelNpL2dJbEpwOGdNcXRHaXZ4bUdUSCtIRHRxOVgyNVQ5OHBzbHR4NGZtNko5M3FyWlhJcnJhTDJoRXZiTTloSWkyWGErVlhacWhtMVVJVkdDdHMrOXpsRXplQmI4WXhqaENDVlJZZUdCaGZaYjJjMHBhb2d2aE5IMGIzRVB6OWcvMnFGaXZTRXdZdDY3aGNRdTBkRkdSYmlUSnljRUZYaml4Y3dZTHYzblEyeEE2SzlFdkkyRURobUkyZGxRajN0Zm1DSE5QdlQzY2p0R2RZVWtxNVVCYVBSZ29EbWh3K1p5VWRPRjF5WmhteHA4bWJnWi9WYkRCc21tS2ErMFdxZTF5NVMxNTFMekVJNHBrL1kzNkx0RWk5WE5ZWVdMT2tmaVBxTFkrRmg5VmVaaE9CdHFTOXo2WTdKOGc4RG5aT2piK3N1eWVsR2RJc3ZzQytuMXB6Qis2bmd3MG92blRXWi9XaXBMM05nb214b0EvdWdmRnFTRS81QnBVZ0QzenhlU3ZCUjB1T2NSWExBSHAzNkZHTTVSUUVsSkFFbXlLUmt3b2pnbVVXKzlUenJIMzZWWWhSb3AvcFBsaXQxWG5uR1VERGFaKzhxdTUvNDdtUS9jSnJVSFpyenh1T1JCUmJiODV6Wmx5QVVWZDdjVGdTNUJITXY0aWRCbVdCWm8xZFdTaW9kcm02VXE2RnJKa3FGTkRQeU5Zd1lkeDMyUmErT21jcFhuLzhrVEUzdHB1VjJEd2JhRmxwbGUxZmtCQy8yZFJhT1NSaUJZUFFMQ3ovVWZjaXpoUTlXUm5JS0s1czRjV3IvZ01ld2h1aFByZ2ZGYkdKY3NpUU1BNC82NTR4UzdXYWo0aHh0UzB6cUlJYk5VZjBUbWdZdWVSUVBhSGdxRk5RWlh5SzkvdHV6MWJWUm1WMS94cUxtNFFVYkh3eEtoSVR3TlduVVNJQXVvYlBaSmkxVlNMa1c0T25kSXJUWHFaSzBXMUtLaDArckZyZjVFVW00K1RvdnFuMmYwMmJuVVp0ZEoyVkxnU1R5eFdseUJHTjN0NE9SbW43bmVjMTF5VDI5bzZTWXp2c01MUVZGN0dOQXMvYzRWMElGV3ZEMkFIOVlSS1Z0dDlLME5qcGZLWXRlYXJ0NjhiVk9VZFpvV0JXMFNHdFN6Z2U5QjgyZCtEamoycHlqcUZwSDJxQTR2QnlEdGEvcGNPaW95R09uczR2Q1VPM2dITVpQZFJZZUo0a2k2ZHVuU0xSMWhLU2Y0SzBOYlo5SXZFU05wa3hEM0pGbEhXZEoxT1hFNFJWbEt1OGZvcTVENll3Um8zWXdiNitrckM5amtmV3dyUjM1ZXo3U1EvczlHQTlHOW5McGNaaFROSFh6T2RHY0UwNlJkM1hMcS9wRStSbHBMQmZzZkxrODZuK3UzMVlhTm9mNmZqVm83cGdGb0xxbGVXRHFxei9jaUlyMmp2RVNIcUw4WGUwU0FaMG81WkxtSjhzSjRtQjloMURwVlpmaUJnTy9YcG5KMVljeHc4NEIwcU9obUY4a05kVlRKMjBMOXk0aG4yTXZFd0VoSTliOVhOeVdXZG1jQmp0ZXhDWld3Z2t0bENRcnlYcklEUWlmaUFQN042dlplYlhRY0JZcmw0a1pDTEZVZjVzK0FjQkRMUng1eG84VG9scmgzKzBwaUhxV2svazdLbmNFZnU1Kyt6Unp5WWt5WVIxTHZMRHc1S2ZpMXQyWS9EZkY4RlBEdHdXci9CT1ArOWZ3d0owV3pkSk5acUdTenN5RTZKZFNvSEZNOXpIcWJQbERETHljZTh2UmlnU0RYd1pJbjBJekU0azkxVkFUYS9pRVNQcnp2SXlTcVAzMmhHMjQ5M3dTY2hsaWl2SWhIZTh0VFVUVndJazdoTkxBRTc1QTlBNGRJYnFCcGI4QnVMNzdGcFhrUkFJRXdWR3VVdXVEcDNHVjJNQ3Bob05aWC9QaXRib0ovVHhDVngwUWVpUXA4bHVKRzgvSU4wTlA0U0RBakw3dk1MMUt6YXpzVENxV2FvUEtycFRLeHErVzlSTDBVaDBsWWFaZ0FkWHhESFNqUDlMVkVIVTgvYTB2UktxdGEyTDYxcklUQ0VCL0FwVWwzd2JxbU1hRk9xdE9kRThrYnM0UkhDS3JVNmxHQnpCd1MvS2gxbzBFRm16L1JHQktsRjR1UlZ0RW03akxXQVRZYlQ0SUlRSkxwZkVqbmIrOWRGcUNuMVc1dXpEYSt1NFRaZmsvN3VBZk5GMXJwYTBWV2ZPcVRuamxIMEtDVW5UdVhuLzlpT1FQUGZvczVweC9qL1dpdzdrSC9BK0VtVFRIemxocnRTZkxncEZOK243ZklNSStMVFB3dkNhOXphbWlhYXZNWkZiU1JFM1E4dDZhSktyb2JQZmFnVnRUcTFyczBPdkhYTjAzN1NBS0Zsc1NWSTErRVllUnR0WXNJU1hYTVVIUUNzVDYyRzcxMlRNUEMxZ21SZjhxUUFhK0dlSncwRnptM0RrUnRVVEhZTm9DRy8wWU1TMmFhMzlOVjJtS1NyTC9JVHRmbXArY3pWNG1jNDZHN0IzSmlvanBlYWI4L3dMbUpkSVNiMUFZT0kyRG1XSHBPSnJ2Z01zYnJDeUxWeTEzWm9OaHlTbWtJaWZUUTk5NlBEY1B4SUdRT2ZWOXF3QVcwOStadExxSmZ1ZWZaQW85MG9aYngrMlkwTFZ2Wmdwc1pJb2lXZUs2OW9FdnlWMTg3NDVOdXBWcjFtNkh6bWgzdGtURzNTT0EzMGtGTVJNYTljc2xoZVNuK3YzSDBtS1o3OXFkSElDblNxempHelRjY05kYm1hL3FsdU1ZcFBZMml2VWRMYTREa1hlOElnRzd6M1dvcklzVmhpS25sUGFPeHhpc0N3anhua2U0V0ZTcVQycnQ2Vy9sdEp2QzNTcElnT1VETUpyWkhoUWRReVg0SGJ0VzhWTnVTdENrZmVjQkRjRkd1WFVCb1AwdVpDZzd2UEhXZFZiNGhSVW4zQnpKckFlV2xod0FqSnFIZGhVWlM4UlJpM2xuY2w2NUZlSjQ1NytBZ2JYSC9VZTJyL3VscDlQbXdMNDM3YjdVUU5VU25LTSt5UStMd29NMnp4dTlMKzVnMlEzakNmdzR4VmNVQ01pRm91QmdHQUMxNUR6U1NmQWtSUlR1ZW1oRWgvRGM1RlUwa3RoWTl1aHI5a0N2cWhOUTJFUDFpemxVZUhONzluRmlnckdwbjF3eHIvSldoa2pONnRHS2kyaG91d1FyTnVwWSt2cW9NZnJ2b0JtU2FVSWlIZHBna0ZjN3ZEQWJGdGhyRUlqUW5FVEN0OFhZc1dQYityNVdzaGJYbFgxZUoxV2pQeXJJcXI5bm95bmpHUUFTYTJuQTZyRkdtMnJLRWxwRWhBakN2Y2Job0cxQk55NmlzY0JUdC9QZnE3dGNjNVBFQlQ0bXBLaEpmMTJuZXZBRmUzUEx0eWhyYUc2NnN5NDZzdzNkVXJlVG9qalhFc2laeXUwbEF3aXFsREtjTDRQbXhwNnV6Ym1UWTU0Z2ZoeCtBSkU2bjdhMmFEU3Zoa0JrTjUybFF0OWxlN3ZqcHE3MHptN3JteUJ6SzA4SlRJa0ZoSEZXOW1LM0JKRWcwQ0hvOVd5Rk4wVTloY3hRdGMwLy9Pc05HMmFDc3Y4ZTU3S2hkV0JOenprVUtSV0t5dWhvRjRXQ3ZKTlp6NDlrVWZOZDFZcDNxVFZBTU1ucjdXd1F0MzdDL0ZUUjN5YjMrbEJiRHZaWUE2ZzhRMDEyV2xma2JEY0M2NGxaTmdmQU50QnFab1k4VU80U2JLcnFadGg0bVNjTys4azM5cmxSVnc2Nm1FN0tMdWhHZUZZM3ZXWjJvWnBnNG5mSy9nTE16ZVJ2cFloM1Z5c29OcitYRVdURCtNdm8ycWVhN3V5Tk5YVDJiR2ZhdmwxbGRNdnllcXFMRWxldW5lZy9rbkYySTRnelpmZlZJTHA1VzAzc3BNZlBTZ3Z5MHBzbHZ3R3MvSU5lUCtBYkhKeEM1VTkvdXF5alkxbVR3bTFocjRJVEkxaUttcDNrbjQrREZMQ3hOdWYyMHNMbGdGMFgzekE1TVpUQXhDT1NacklxZVNpOHVGR1Y2VFE3WTJvOTVndnBXMy9hdzhOSHl1Q29qSUFicDJ1U2lBbEZPMXRTdk9mNmcxejVpRVJROE1odzRRb1R2Y3R5dEE5RUprVHRuUXJ5MWQwb0U0ejJUZWpBWVZ2MWtNRUgycVRZUmc3WHcwY3lHM25FNytSYjd4czBCVlhkckJibTdqb29Za2c5V29HSE1JU0VSRkFNNmhpOURiYlZMVXJ5UlRmUWdaZHlyMWxIOFI5NUlSNjNobFRKWkc4OTBzMEtiRHo0TFNIY1R6RGN5dmxzMG02M1V2YXU1MFdQT2t6MDdDNzk4MEgvSU1mVjQxMCs4Qk5HUmhHcitWVlJ1eUNBWnExVmE1bEp1ZURBYkQxNUlUa01ZNzVTcllyVktOaUZCL0pqNkNGSzFLOXZtZnk1MGV3eHAyTE4rVUNNQ2VKaUdvdWpNYjBPcmhnZFRRa1BZNU1ScmwxK3dsWm9lSkdaY09BTVhQd041ZjBjR3psRWhZWjBNMkdUY1VQcjFBYUsrcGttWkJjTTFwOHNTZTh1ZGtkSUsyS0xwQ1c3dzNlWTFaVXgrM3dQcTRMK0dOODFJbkVIcXQ3cnEzNWRlYUNRUHZDN3VpeU5aRWlzK3pVamVkQ010d0FzNVN4LzZQSjdod2RBU1NId0l4SDZseFh0MTEzVWFBWXBKNkVvMDVXaUI0R0grRFlEZUd5SzUzZmpYbTlGV3RFbjVjK0c1anV0TVdaV05MUnl1aUwvSTRCazhCZm1KY0ltWkdOK0YxajUvVW1YcmxyeWlZZzR2eUllaDREQktGUmVTS2Q3dVhubVJsTTc5eVRJYUxvNHJlSC9ldkNaTEVPaHYrcElybkJjaXVwU0JTU25pMlhOY2N5SnNrN1pXSHJvNXJNWk5HN2hIRUVEcEo3SFB3SXZJdmxycllaMkdUb1FzaUxWYjBwNFlab2duU2xCelp4MGhQTk5sUno3cEk3L2Y3TnlLTWlsTkRZSDAvMURNL0tKb1B2MWdjTWZONVFTMXEyN3Y3aUFSMTVXM0JCVWRCQXFma0lZZGxZUEl6ZXhBRUQrb3hqcUozZ2ZhUkhoUmR2eGszRys4bUg4OHlnRzdoZFNuVkFFbEhQajBmS2NnR3lIVnZLU3laYVFxckRKVndYTkZ3SWEwZDNxWlp3c0xyZGJYL3dOZDVoSjhaZHF5clo5RWZlUXl4ZWFzNjNNUm5kMm15YnBRUnlvZ1pJais2R2pZdU1ubFJnVjRQRG1CZEhsQjVaTjlMTFhlQVJZb1k3bkorMnpRY21xNXUwUm14cm0wdFJPNDV1SmdPQzh1dHZ2SUpFVXZxMjYxZWk4ZmNvUDEvaGR5UDM5eDNoM1VNWVJHTUtsYlI0MzFPZDNnZGpsUmtPOEtVWG1aREhnNVBhTC9ZVmRCNVFXOHArQXl0RU1oSW8zTzZ1Q0dRY0o5RHVyRkMwVGVMazZTaFAwTG5COG5xbkhVMkVqWUx2eW93ekhZYXMxUXVpQUZSa2ptT0ZtTEEvUWF6UnNudks2MW5qNnVvRzg4bVljeU0xNnhINjFsNEllR1d4S0NrUHVJRFF4UUl6NFZlVVJKbmhmbzBEamJqTHRTM2EvZ3F5T05QYlJrblZvaS9SZm5hSThjbU10QWZra05wQTd4QjV3VnJDUVBSNTljbGVCdUFmSEpwVnpFYzI0SkRUR3IySHphd1FnQkRjcjBqdmxwakZxcktXeGEvOVN3KzlNTndzMFN6N3Y4U1ZHOWlPem1QVjJnNldLTENIUi9UYTlRL3VqdmF4ZmZMOVpENDh2bE1DT2c4YmorK2xLbCswY2FZZDhlcFlldlZPMTB1MXFhWCtMREhSRDZJRXQxTm1vNEsxR21hTEM1NUpKdWxMZTUvM0NmZnJIZTVrVHNRd0ZiWldyYmV4cWtIRXJYeVM2NmJwZ3Z2UWdnRHZTSnl6RDdaamdLSUdsNXovVFoxYkJ5NkRqclUxQXM5L0Evem1Yc0xxdkpDZjVOY2o3TnMyMkowMk01T1BSTEs3VzAwNUtBMGFZbE1nYVkwRkVDMENTNTFFVVpnWWNaU2F5cjBBbHdHVjN0eWpockpIZkRXcks3N0hoMU1GOVd0czJtTnp3MEEzMUZTdGpHQXZpNXdQSEsraVpCNlIwY09PeTlWYlVTNFVFS21UNm5iY2J0K2hFczdPbmpKaTJmQ3dVZTZtblZBNm56Q2c5dkwyQXlHeWdrRUxIY25NQWtleG5kTFF4dkx6V2JSYWpkODY3OEdHK0lMblZOcU5uZkV3b3VCbGxCU3ZYOW9uNVdRSWVUSlpIVXd4UmtPQkkxVCtoODdVZWErRUZTWjkwL0Q5N0lTWDhyRUxrSGlaa2NrcUQvVVkyNExEVHVmWitiOUhGcXZOWUJhdnp5djhWRWJqZEg0RVhGRk1XMk52UFRFd0wyRXBOQVRtZGlvSjhMZ2ZENEtGbUFHeUJnanNpSEhRbW1jQlk5dkZTUDdHeGl6MzFDUlV1RiszSkRvaEc4bWxzKzVQVWR0OXhQRHN0MVZvYWVYTEdacGs1VVZzU3FHcmZMTnpiYjlUSXF5d1JVQUlodmxRd3VzOVRpVlkxUjBOanJFQXk4dnJCTEVLZHk2OFh2aWZudnVhVlptOGs2aHYvY3dkK1lmY2wrQ0VEL0xENUYxUjRITitoS3pYTzZPSm5UUEdFSjU0SmljeDVLRnl6dzNoL3hVYm1qZWpqVERncVN5c3FBRXJwMFhZWUd6bS9IbXJ0OXJRZlphRjUyRSsyTWI2VGJjVngzL0xXOGtsdmhsRWxhRnRJaVZkVjF0Zjh1TngrQUI4cVFVRERlTnpoeE1HRnc4ckpHVGQ5K1Q4WXRtQytqSm50TkdLK0JFNzFBNmJPVGdudUtyWjUydEt6SkZTZDVtcnNsMk5zc0RpWkdjTmFnTXlrRUhHLzY3ZEhQYUgvYjJoNkhhZzl1MW1Mc1J3MzdiUDk1dEFtZUEvTDFkdUhRU21tK3hLMWtNUUhUb2w0MHZmaDk4UmVSUFBaeEZQTmdSMStLdStIc0dMWlZPYnpKT1AzbkQ0Mjh1WkRsWGlJUDRBYk5yS0NQSE1EQ3JVOFhqKzF2L2xaQU9oeWJyMkZ3L1FqYVcrdUc1Q25Gb2Y0blJwYzM5cTNydFhTWHgyYUtvNFd5Tm1HcC9MT3VjdCt4VEIrVlY3ZjlwbXVJc3ozNDU1Q1ptOVFKbVhiYnFxRFBtWHZEazdINVFoeEQwUUIwR05uZDFDMHgzTFYyVk5pQ3YzUkRzYjZWUUdsd3FnLzZiR3A3K3gwd1E5dEh5MjFlVEZYU2VvQ0FzeVNQRmdYUEx3SjJpQnZScTZJNXNCL3M0S0RiQnJLVTh3UzN0Z3UvY3Q3VURXWThtdmpzd0F5YTFjYitVMElzMHFoMEp5NURDSSt0OFRFY0Y2UXI0Vmg1VEZNdElnVkRlOWk4Ylo4eE9GTnRHczVSZ05XWTc5amVaeUlDamN4TUM2Z0lwdWJtdExZSjA4elZLdG5CVVBFcXNhaXltL21PSi9NTk1iT1pFT2k2Zk1UTHdlMGVIK0Jta3FPMXMxdzRONmtocHpnM3lIRzBHck1NQi83TzI4Wnc0T1pJc1p3TnU4QmVCeEVCeVJObnRyR3FYc1ZZTkNDZGp4ZUhteDAyZzZJVUhYVTg4SmxlTDIwZWgyT0haTjlqbTdLTDI0ZFV1UjZIL1k3K2RPWEV0dlY0WGMvZm1ZZlNXcjBEdXV6aHppYVdHbjdHRUFRTzFZd2dQSEU0dWIxaUVab1JqODZEVDM3c1htWVd2OFc3bmhiZFpLV2xhZjQxaE1JeGRrTzl5Yk1haE9DQ3A5cU8rOHlOeldnMDkySWVBaGZ4L1Q3VVNndkhQdktUb25DTkF1K1RNZnRMZ3pCeDZzbDJiNmR3czQ0akpIRmkzSlE5aUZPMVV0MFltTWY3bVZxTzFOOHBOc0poTXZQazBvR0t1aHBTS01NbG1BSllCR2x5bmhzVDFnVnBvK1RDZzFHekFjNlBkZ2hGV3NmUnBob28vMUVHZWFqWmQvVWVYenViQmVSWW9rSnExS1l1b0F5NHpicHNsMUlXVkJTSUdVaUY1SUtpVG1veE1CQUQyc1lqU2hxcVdHK2hGODJFdTdLZ1ZJM05UeExjeHpWMmVzVVh5Sm9kWVlPK1ZRd0tyTTlFak0wVFhOc0EwOFMyekwxYm5hK3VIRlZVWmFzWW1zWVVvR2Ntc1l6cmRrQW5VQ296WWllaXdNeklQck1FOXpTSmZnZUgrR3JxVi9BNWpjM0ZjenI3RmhaNjQyc3ZSbHIwTWJic2J6OHM0cFF3cXRrMzliUmV1NHMyeDl2a1BMZkVJTEhYVlJzeTlqME9hTTM2RlA1WlVxbm5RcmJmVG4vZXA5c0N3VENYckZPU3JrTlVnek5zSldLUmJpZDdGc2RvYjdQWm1ncEZZdGx1ZGNhR3A2alZFd0FlMjBhTlBKa3U1bFpVL3Nralc4R1hJWE1hRFh1M21reVNwdHVubWNNUWEySHJTeHNaR0hZbXR4RXZqM2UvWWVnc0owRXlzNHYrcmw2ajlka0hTUXJ6SDZMVkY2NTZTZkVzQUxFN0ROeWNWUjhRN1pSNnRjbkhtc3VNeWs2d0FvQnlpUjVsOW43T21nWHBqTmphNUJpc2RMZW9DeWRuRzIzQzF5MEw3Wm5JY2lNRjJBaTNzbWQ3c1BpOXlBTWxmTlNzNllXRUhOandNK240ejE5c0VYbHA2Z1cvWVd2cE5OcWYwOWRDelE4NGZBb3ZuNWxrdUhyQjJlSGxlWlp4MU9FTERoVnN0Q1FVSC80WG9BR1hEYlJqak1PM3dYYUFxbHJvWWQwMDVXTDVxbHNKRUdQR3hDeUZPMGYyTUtQNERZcnhRZDZrdldnTDc1YUR6eXJPaElwaGJUT3NHTGZTZW1TN0h2blBHdW5xOUpEQUE0N29uNW5QQy82OUJ1cmpBbWswNjFxNE9yV29zRTlacFhPcnFwWUtPbVh2UHVKZEJUK1p1c05UZWx5TDQ0UlNEMlFySlJGeWZuNzgybEpNR245SHJnZi9ITVVsbzlkR0UzY1ZVL3dWdStxTGdZNTlEM0J5VS9ZU05JMnBHRFV5eUZ3QWFsUmJLWWRhZ3hsTWdHem1zV1ZBelc1K05IRXliVFE0S3RoUGNvd0dUUkppMmZsUE04MVA5b0c2WWVDSThxcGdpSEx6WXo3RnJ1eWNnV1pKaVpHemtHMU8zN0VnMlI2UDRQd3paRExDeUprNlhIWjRUdE5VRy9NYUh3cGIxUmRIS2dpcGg3MnNwbzFzaTFybXZWd0l1WTRqM1RSOW41RVR6a0dIR2xTcGZQTDFEVzFzWjJ2VEc4bklVbWlxME5tQmJxaUk2UDRoRHpDR3NtY2wycE1aTlRnQjFXWmszdWE3WjhyUzJEN0xaeHJnS3BFbVhNOG9hS0x5OGdJbUIyYlRDa1dBVnA3Rzdsa1kwVXo3Tkx0YU5IeWx6YUV0VXA0Z2dXdnQ2Sjl6RCtBU0E5eEZnYzJFdkZhdkl3MWxxc0lKYWUzNTA0RzFUV1BvMmkwamVPWEI5djd3cjNSalZkSnJuNTRsa05iYUltdnJsU0N3TURGSjNMNzV0ekRqWW1Cay84STdJRW1nVGgvTVZNYndRbW0zbEZJblVHNW9PVWxtSjRyc2tLSUxkd3k5ZDlVazdibjVUZENRT0IwZkg1Q0tzbzRjT1RBWUZQMEFMUzhsN2s5Y2JjZXp6TlhZU0QxNXpiVHB6aEFvMURrbnlZN0lRamNpU284amNyTU90TTFhUjF0NSttODhRVm9PZTFwd0xtUFJyanZiQ1Q3M0NDRjJScExoSnNZa1FNeUFadW9xcmhjYm43ckdPbkxEcFRWcDdqZFVjSUR1Mkx0WVZROWFocWFjUzRpNm9oRU9WVDhhM1lxYXBFOE5rZlZWMjlyMkxWOEdDcjA3dXh2QTFjYUJqY1M0eEZqazJYZEROT0J0MmNJNVRRKzZpMmgvTkZDVmdCUVRQempQeUtBNkw3NlNVMkRiem9pa3lwOWttWUdmN1UzRGJFNFk4UiswMWRhNXp4aVBPVHkzNVQ2VTlTclRsVlJ5UWhkbU1paitUcW9RWHdicTFqVEpNTEtWMjVIaXMxdDkyd1p3bDJ2dlUxQmgvYUtUT29VdlZ2eDVaK0pkVHFYNmRodWdLNWdsMWxvbG1haTNlbjZCY08wUVMwdlZ1c1ZaQXViNVU4dnltUFd5MWh5azNja3h5Q3FhSW9XSVJOK3c4ZDk0V2tLR3NmS2RSL0xnQi8wemxkSmN1VmE0MDEzVFlGNDZKS1RvUEtna3BpQmNha3hXcDQ1YVpDNUY0RXorbTZ0dVVxT0Zza2tDVUY3YW53VkNCMWxSYlc0UTd4azEzOFJ5bE12Z1NXYkFLeUdvTm1keUpoZ3BDTWlpSkhEZmU1T1RKMDJRM1BFajMrTGhrbm1rbGh3VVpIN2swZWpZejFuaDA2dTJPb1c5SHBSTFBzOXVBcjljckhYY3dQVHJ1bi9XMnJsVk1jMDdySEt6WXk1bUkyZzlFcG94SmJxWmRmSytVOHZqRHZwR2xVMnhFQ2RrRHk1cVkyMjhMenRScmhQdVNzZDkrTUY2eTdDY3F1RjhLV0VidlV0VDk3dHBPVUM1elBSRG5lRk1pMXF1dDZRbGlPMHE1My9YdUZsbmRMVGFybG85YzlWS0hEeDBNRlFldy9GZDdQaWNQVGsrWjNHUUVhUGR4VjcxY2s2enFRTDhGQU9ZS1JaRk44dFBFY3BMSjBObExWWmRkaEJobUJrRUdwcmw3TVM2bWtNYmFCbkkrbnNtRFhjUGNpalFFOHNobjFSeTJHTDNwTE5BaWdUL2lDa3crdWRKL2kvdDE2SmRnZ1BjSERFbVB1TlZZUVcvZTBVd1hkaEUzSXFET3ZyMktUMzdOeFMzRUtHdjBuekZUbGdlcmoxNzVGSkZuNkUyUUJ0NEhGTEJjdVZ3Nk1mY3FNOFhTWlp0RTQvOHlyWCtGaXFiQ053U1ljaHJXVVNtK3AxOEJsOHVDNHZzaVBkL0w2VzE3MHphRUZMMC9iUm9qVE8vdEtweVlISXd6UW5qSnQ0YWFxTjh0RGswSVVSWXJ4VzcxeCtaRHVMYzZRUFl2VVZwTDRna2U5RFNzeDZOMUVrTWoxMWxsRmlTeWhJR0NKMnROQWtMOFJwNlBwNnpML003bG5UeEtvVk12TFZ4dm9JZ2t0NWY1dit1NnJUT3N0SEtMNHZUdFpYblZTdnhic1dSSkttSHVNelpuM3gzN1VlMXJSMjZhdzRPcVd1M0xDSFNUZ3RhWWI2YzRnbXBNakR5TUVpdlE3Z3B0Y3FTelJhc0x4aDhGVGFFeEo1alBIMmNtREFFRW92VTNBc0g4VjdaS2p2WkplNjdWWTdJNkxmZ1I1NS9GRmgvRzVtVVVZM3V1dUhQVjBZYmU1SU9PTHR3Rit2VU9jNjNJS0FyMzJ6L25iMWQzdWIyMWJTNWVZd3J2Ym5QeldqRElKenVWbStsVG1yVklsTzVONHhpMnJaMDI4MW1ydTlrV3l2ZC9EWXR4TWl4cEdlZ1FCTVhyek0zN2lNVjBsOFRWVWswQ3oraElSMmVMTlV2TlRwTWhzM2RxdVBuMWZPempLbGRhNEpyTko5elpQdHdrSWkvbk8vNmlEY0VFMktkUmsxUzlnc3BUVFFLZjI1eGR5ZVlOQnNFZDdxa2RlUlNYN0pKVXNZcUNIeEdqcThhM1VnM0hvUk9XT2M4QkxtVGU0M1lNbUZoSm1sOFg1bUdkVmxrK0o1Q2Y4UWpKTGJWK0twSmRPUUE4cFZFbURhVVJEWlhObVRYZTFhdXhvUXhoQ0UvdWo4Tkl0UlVQT2RCRi9RS3hvam9UVzM4WEZBVXNFNEZITE9LQmIzbExFQTBETThtVUcrT3ZzbG5QOGtORUp3NCtqb1FhSThRZGhsTGJ3dzEyeHMxNk14dkhqTVNiYVY4eUtzRmVNUnRnMGhMczFkWER0U0dxUUt1cUtLSlZSM3NjSmVWZ1d6NmFQbDY4N1lsbmkrMUZOMWFLME14YWhoSWw3akpYd3N6dWhyRkRHbmNoR0hzYUQyR3JqbTlqai9RMmtkeVhpQWs3ZG9xYk1uanowcWxhZEtuckdyRTJrM1NGRVYxWkwrWXY3ZnpiTlFIK0dKOUxZL1dwMHNVUkY3YU4xZEZiMjRqME9vcloyblYrQUFrT002TlNnRjBIVVBqclZrY1h0Qzc3aDREQ01BTkZQTDBROWtudzIwNlNONlowV0oveVZZa2dGWm40cHJYR1dNUWxUQk9HLzFLS0p2eFBhdDJpaWM2VlZKNDVVZFVLUXNmSnFoa0hKUmRySmVmK2plUDAvNW50UElTQ1F1TVFYcnVrSFBZcUJpTnB6L016RTlUZ28vRzJ3d0tKTXpUZmI5TE9WTmVIWE10VmhWbXlqcUpZUGQzQ1JvMCtKcGp1SmdqdXNYWVRKRU9DYlZNTnhKRUF5UGMyeHBYSks3UitUdU1mNzY5OXk5eGdkajdnM3h1MUNqMVhHdTlveGd5Q3ZNYUdwZW14SmtFS21oSDdxQ0NLay9iYmRLM3E2TUFjNmVpOGNWakpqRi9RaGJwMUM3Vks4b1VpVnpiV3dQR09MSkJ3ckpYeEt5bSs0aXorZUNMUWMyTTIydVVvVCsxQS9ybkpaN3pkdWloUUZOVldFa29udVlCUUR3cjhLQk9lVTllZ2ExSnBRMVpQTnkyY1JmdjdleS8xVStDUmVOZW1sdHE3bVBIbWJpUnM2cVNNMkZzUVdGcUtoQnVWbGN6QithNE56aVNrNVRybEpqc0V6RzN4T2FSV2VSNnY1ZWZodm0rbmVZeTJ1SnRJdXRmeUt3OUVDWDBCeWJFRk12NXFyS0xPMjUwbE9jTkl2S0I4Qjh2WGZXK0FtWHZFT3dOR29BbGM5QkxKdk5VZWw4NTRubE5VM0ttbStIM0RZMXJRcnB3cTlzZnJZMEk5NklpZFBGdW1aWkZZbnd5OG43NFFjdXpWSHJORk5ROUF4Q3h0a0J5YWdsY1VBZ1hHTHI5WEwxSHh5MWlmV01aSDcrS2UrcU1tREJhcE9IN2JTTG5SRm1uV2ptNFZCc1k2S0JKOWx6cS8zb3BMVm1xdkt1VlFIeDVvL2xCQjJ6SWpnWjRDaW44M0VuZ2tESjJTMm4vTUJhbWg5ejFWcjQyU1VJRU82ZnlaQ2doSGhqSkx3NTZsZllVcE1KcmVMOHI5b2dKUU5RYno2SFdHaUp5RTNOcFZhWWF3RFNKeVdwb0p3UXVUVWpneDdJN0JpQ3lmMzhPNkhDOFV1dStKQ0xwWnhlUGk4U3REa1JqSXBMSlc5b2drU25iUERsYjcycGJUV2s0RFdobnpWUW1VaDFJU1B3VUc5ekplS3d2WTF5eFRIdWMxK1ZSdEhtTjU1T29lLzFhOVBMMzdwanJ4UlYyQUJTeW5SRXBlSU8zdjcyRkZnS2xvS0I4L2t5cjBmU2lUZDVBeUZrMkZTYXUzUGxMdmY4T0lRTnBJaVZKbk4yVkl2TzZieEpLMEFabTBqNkxLOStHaXJ2cVU3UUtZWEMzMnBYUGwrekVidzRBZ21aZ2RrVkhCUWI3OTA0K2FXekRiY3duSEVsYUNEY2JieTNtdVI3MEh0bmFuREFTSnpJVFg3UzFSZ3p2bVcvQmVPaHArb24xKzlWSlQ2NFA1UGloRVRCWExCZ2lYbkdIOTFWeTJmd1JXZ1d1NG91RTg3NWh2VFVYa1RSV0pqKzRUMVRLanI2SXdLZzc1dmUxR0FPbHBnOWxQeEZySHFhQ0E3ZVZWTTdwVlNrNCtzWDYxemdDd0VwUTA1VzRQVUo3OWgrVGdwWG54WmdQMkNjV0hRRGFwREVTTU9qK2JiN0xRZ29RaEQ3NUpMYUVxbi9aUG9kRGFFM1k3RS9xcEszQ0dqTHJkeHh4c04zSUtZY0hNcHFvd0NuK2Nsd0xNMVUxdU9udHA5ZVNhWXFzK0xHVHhxN1RHRWoxL1htdjBRVmtLWW9raElneXAzeFM2amRPYlkyNFZOM3BsZTdoSzljTDZtUE5iNFhsRm1NT2dvYkJWSnJaUWVUNGNSZCtqcjdKbjRpUkFFVnlBbit4NXRVRUpIOXUzK0srUlhDZlBKbXQwZW0vd1ZQRGQ4YXZDU0M2Ym50U0J0ckRoQU9BU2NYMEJGeURDR0NTMkNuWWp0c0dQQURIQkdqR25MYkFqRTJBQ3djUVgwckFxRE5GczdacXZxa2w1SGV1Qm1xc0pZQTA2REhZQ2VWR2g0Kyt0T3duWTZoQ0EwdDRYWlBEd2dIa09kL2hxWTNNUjBUTFJWL0dkWE9UZlc1bndUb1BLMGtQU2pzd2F6SXc4a0o2Y2V3VC9JZDRjSUNpM3pHQm9FUk54ZENEblZaNXRxUnpYWUZia0dkbis5ZGhkWVU0Q2Q0YU9vK0tiZGtUVm9jbGExUmQ3N3Qzbnl5VTFYRnVUMFZnRnBXMlREbFY5TW9sZEFzaWxaSDB0UEZjam1UUHFzQ0U2NGRpakovVW9rZG9sUkNqZ2ZmNGlVR2dsUTVUN05rbTFlTE83K2FyVWVtTFBqVWJCdEVIb05Cd2dkWk1vMHFkdS9KQUJ6ekhGUVgyamVtRnFBTTlXa2ExQTRhWHJuUlU4b00rOHhacWF0RjZMb2lFQ0VVQTdVWTVNODJyd25UZksvemRza1lJSDRsUmJTc2FqQzJZVmN2ekRaYk1pMkJUbTFncCtweW5FVzdZcDRxa1ZaTFd0NmNKM0EyaXkvNjFJUWRibXdsQlNQRStpcGRrS0dzYlpKNytBWkN2R3lkM1liSU50U1FSNzRBd3AxOWhzOHdURkRFNlJNNXV1TFpJSlh1YVBrT1dYMUd0VmpOWityZlBRdDhJeG9rYXRFNU5pelVtTTIyRlU3RndwYzFTOWZqK292RU5RR3pUMnljdG9PWk5sQWJleXpVZ3VteWNBdHFnc2FXRXY1enpvcGl6ekpEUXord3VDbEdFaC80QUpCOUJhalkzNVJ0WmlUN1ZGb0JKeEd2ZDlYVndJY0FXRVJ1UzMrK1NtQklWWWZhNDFPamRtV05qSitQUDhhQ1gzbVNrYnpMeXVkYzVzZEZDbEtHRmQ3Y3A5MC9XWWNaVUpuTkYzcy80cWxhTUFhOHNsK2FxS3lNMndHa3M4MTlQTURkZDRwaWMraElrZUlEMFVrOGVJY0YxcisvbFBna2VIc3BwUkxQaEh5VzNaOVE3SzlXTzJVSGxLSmpTeGt6Ylh4NzR6K3ZLK2djRDB3ajVzOVpPaHlQcGlpa2dCWEpuMUJ0ZFJCSW12ZmRTcGpsL0V5MFFLeWZHT3RpRjFXYy9lS21MK29CQVA3bDZ5RFhFQlhtdU5rNmhvdi9FZnorZEkydUF5QVZLcnJLSU1GZDV4OHRZcUpyTWdFeDBIcDRYd2dERG8rYWNUb00yRlFFUU1PandmU2gwS082b0kwUDhwR0pocm9wTWVMaFdwS3piRklMQjAyVEdQWkRtTGNCeGRmQjBjZ043OU9qaDR1My9TMkQ3V3R4YktOS3g5dmZLaVlwMFE2N2QzOXE1NXp4azVSUzcyODJ2ZE9jMm1QS1U0MnFuVFhyb0UxNk9vOFdaWVhEdU1DR3NXbVlHa0d3QzROaE9kU0oxUVVINkVOZjVjWkR5ZWRTOGpRUHRHMjBQTXA1OGdmQjlud3N2YTJBcTQvVkFvZlY1czlhOHJ2aGtZKzF5S2puUkJiWWY5T2NIbktrSlAxc3V1NVJvWUVNT3FOVDAwblR5RG9hSzczWloxMlFWc0JMVERvWStwWWoxSTNHQkpMeWdOQUE4KzlRZHBMdWxKeGxnQmM2SHB1TTZZV3RWdHljd3VOb0c1WERqcnU5c0RLVnRCcXh2WTlvbEJNN0hFZk10SHg0Wm1tUXRZSjBOOWUwZC9JU1ZEdlB0bCsvQWlHSEtweWNCY3MveU9SU20zTVQ3TjVBYzA2ZkN3SkV0bjkwV1RKUERNcFp5UTBwWER1ZkZZcHRyM1BBaDlKVDRyYWwxeWNVL2ZxMEJZQVJMdUNySStuTWc0bHVJdWJtU1BnYjY3N1lYOVhUNmtobTVnOC9WSHQrMEk2RVk1enBZUVhqUGdaaUFWR3ZQYzRvbEtYMzVMMDU1TlQrUjRsbHZjL0Y2WkFWVGZDbDhVSGhYTWNxbk9FcFFZVEVlTzNwMXFvWkhBYTB0eEUyWE43eTJkRk83dXU2WnNrSnNhc1JBb3YrRFFHVWh5eVFGbENEbmpYMFdqZm1xZTk1YmJvV256eFJVeDk5N2FISkEvUTQ1WUZEYTczckIvRmRhc1JpVlVJWGJzUjJEQ2FqRkJVc2Q4ZkRZcmZmRU9VTXQ5ZDd1SVRGSzNuRGVOL1RyZ3F3dVhxTUJUWlpObUZ3U0RwWkxvMVY5TnQrVUg2cWVZekx1YndOUCtabmJBZTFTZzdIOVRiL1ZBdU5ua09hR3l2NVZrMncwZDJGNjVmQlQ5dTRmclAzeWh4SmYyU1QxSUMzWjBMV3VqbU9QUmN0aTNEdDdBL21BcE5ZUk9uWjJCemFvZGxKaVZGUjhLL2VUZFlNMjFtcTQ0VXBmZTdwRFpOelk0WTVmc3QzbktpTUpiQXZES0I0SW1UczFjY1FaTXhISmRTSEJRQldEek81aWNzbG9ORk9BQlR2VHdaUm5RSzNMb2RUWmc0TTdpRWE1QWh6b1FZMnNpemM4dTFhVExxbU4vMmxqVW5KblFGY3BKMU8rVEFHNm5IaU1Xc1NaTlNZekNvNlhWV1Bpd2Q5UTZneW1xQmg4U3hGUjU2QXNVa1FncWU2eE5KZFVDT0c4ellTN0hHL1h3STNOK3ZHMEx3RGZJRW5vUHN6SkR2UjVLZnlFSTJ5SlV3azByeEliclJmaEZsTjREYm9tZFFBOTkzS3I1N1JNNTI5dXd1NWF4Zk9CeTR2cFo5QjlKMzRORVY1bGU2RXN6OGtkeHZ1RzZDc0ErVWdGdFlzNCtQUkF1eitJRFNQaEI1NGFqUTVCaitiMU92b0hvS3VBcmI4eUh5ZEtTOXozd0o5Ylp2aVN3SDhTVmNrSW5lbXoxN25WYWQ3N2dDVlJyOEJsbVBCUk5ycUQraW5LdE9WZGtGTVc2TldGak9KeVFuUjI0VUFITW5LUFEzQnhxZ3M5V0dIRnlaYmkwZWt5d2Z6M3pxVG9jQ1ZCdmJtcldBVkw1NnRCcVR5VThZYlRpdCtZZVptVTNrR0ZYK2o5bUx5Y0VNQWJ4ZThxL2txU0k5YTYwWmN0R2VBcnRxZHliaWFyZjVMeFY5NUNldjkvci9hSmlOMyt3dnJZSEJjbkc4dXRrZ3YwOEtFVmF6OVR3ekRsMWh4b3Fvc0RMZkVMbi83eEFOUGtJU0VGaEpmQ3ZtQkhJdUUwaE93eHBzNG03M3A3d2ZUK09LSXVveWpNMHlZVG9aaDMvdnczeVFxRzY0WGRQaDhjTWZyK2dlNFhBc0l4STlLaXo1UG93OTUyWVIrUDhtYjhSVjJ4eSswdDlkenl0WnhsUDloYVRFK2MwYVcxdmFjeWRWMGEwWGNYTnRJVkU2dVlvb2lQRnFBdFp2bnhVaEtYU2tJZXArRitNL2NsOHo3OVZsTHZnYkFDSzNxT0NrSi9jNVpsV1NTMHdkRVhIcGFUVzVpOHZidmJyN2hrMDlKVm9Td0NWRVplVDVVSTdSNnZmZmszSFpTVmNqdUtvUkd5UVdPNGNDMGRtdWNSRHp6MmF4cll5QnNONkxUc3A0V3ArVjY0K280VFpSbkhkNTQrR2Z4bks1TUdLdEU5Yzd2bkd4cVpoOEJ2YmdCeUxKVGFZdUR3ZVJ4RjNMc2NRNGxMRmJDV2xRV0lMcjNGOUtjaksxdisySXUrNUV3NU93ZTNzZERnMEgwZ2swcnpyNDNLT2RTK212L2NOdFNEcGtwcHV2aE5zM3dFaUlRQ05qdUhUcjNObEJIT0tpL3NLMXZZM1pwajk4WURjNGcyVU5BS3czQnFKN0lZc0E3QzVDUUFpVi9BekVSMGFVcFRjUkhzVWpSeGtGMEMyNFZyckxtMDVhQTFPMTFVTk54V1NmS0RNU2xIY1d6QjlYZkpMR01qRjNxRU1jSjFHNWZUSXRMREtSZGk1L2Fvd1BIVHczcXBLU3RiWWRZY1RRLzVWSndlWldEOFpWeVp0ai9RZ0Rra1lOckhhVHIxQW1tSHFRRThNWGNQYW1ndTRaTlo5M1FEb2tBbW03RG8yN1g2RXhJb3Y2ajVJQzZIQ2NMY0oxUWdXY1pHSDJibVRIZS92M2lNS21Cc3Uyc2xUb0dUTGU3SnNiY283Zkl0Qys1ek95a3QyTGJIOVY5QWhBNlFFTEttUmk2L3I5bGRnRU5QbEc5aHZQMzVWNmhLdDBVMTMyV1pKendjbEdsWnIrMko1cHpDaDZ4aWNBTFVFUjdxU3VOUGhCSXZ3cXVsVGdHaVJTVWFSMHpqSVFtWC9qcVFaSEpNQUx3SFh5cE5VeXVWNkgxdTZPNnV3MW1pQkM1cUh6VHZsZnBiaHBlTmJ3TGRtcmNTN09CdTJmL2Z1WVY1KzRNOTFLZ1M4M3FZdFlNd1gwY01FUG1TTlRVRGl4UHdIblZUUU5CQmxVeXF3VVhQaVFWTEhscXZpdzR4RnlBaTFVTzg2cjQwWEdaaDlIQkdXUFFwSjdmOTBleHY5TzhoaU92K05xRXFaeUlUZmRDVGkrK1RZa0RVYkcyakRseTl4TEMxaVVXU2lGUEdwQzM0S01OL0ZYWHNyRkF2amtoTWh2d29nUFYvT01vUUhUaDRIeTI0cmlNSTE4YkNveDFuUW1ab0wwRUNqOWpMUkVLTy9QeG84cnZPWVF6Y3pKdXhSQlJwRnNRZVk0U09Sa3h1WGxQTHN5TFZpb3FwcG4rTUVMV1ZqUFBaTG4wMEtRSHRSSVlhei80cmo4MVBjWGUyMCtIRnZ0K0FZei9UY2ZzbHA2U2NqQm5CMVdwTTRjcVJwNGM2Z3lvS2tvcFpqdU8xRFRzQkVxdW1uQXZSRDlQYVZNS2JqUWdTSEdFMGRqQlF1Tk5IQy9yR0o2MlBqeE9tMzdqRkNYL2hjRHdJNEtHUDJwWW13bVFkK3N4L2xBY1pvQmZXQVBXVjRCajNLNEM3dlRqOUxtdFhQV0dOczl6YktoY2ZEQWlyVXRPWkxHQm9NUWdKMU1UNGlKMy9ET3g2d0VTaERwQVlrdkR4bGszRFBXVjFWLzFwYVc1ZGpvR084N3NWQk11aHhUYms2NTdSTXRuckZtcW5PQTFzd2Z3aDFocDlQQUpWTkFaK3RrWHVFc3UvenVFS3E2WlltamNQL0tDT3M2UTRpdXhseFpzUVZZbXJzTVdNcjBVWHNLaWVxakVLQ2FKQW0vdFVxVXRQTVpISDhUTkU4MTVRZGQ5eVZIdkJISm5BeW5GbW9BR0dwbjdqRGFUNzM2bzAyRXpkTlFXb01HMmdENVlwK09pY2wwb05taC9BbVQ4Zmw2YkY2OXJjd0NXRm00V0ZXZU5xbVJNWklVY3FtaHhlTWVWNS9MRUliVzlQR1dtb09tTkZYU2hYTzdKZEpJd2V4eC8rb1gvaFROVjI0bTFyQ3R2SGx6d1JySG9HeHNFN21wcE5ZTk8wV09XQW15NzVkL2FPaUZ6M05abUc0N3ZnYlNQTURLYjNqcktCQzUydEdjdnNwU0lLZ01nVmhlTmV0RUFGWG5HYm9KS0xRcmRzQTFXY2FwT2N1ckxRZmFVTnl6NWNVUUR3V1FFRHNZVUlnYWsxSkl0YjNYeXp5NHcvTld1cGtPU1BCZVo3dWp6OHhlY1h5alRPRHFidkdPTU50L0toTk9xeHpkbktYcUxiWFVVdFZnUWlwblVzZTU2Q0tvQUorQkIxcFJ4TVdHRFUva3hNT1NXS2lldlF2SmNxV3NtUDUyTk9iRlZWOG9KdWphb3UybU93K3lrQndCV1ZvYnVCUlA4Y1JQd2dBbUFjYUorZG9JMlNzUkovYWZZQzR5c1VMRmVXdzJYV2E3Y01nR3FXdm5FNkg0MStJNitRR2szbDRITVRZS2JveGtGSFFWRmVoMlVNSkxCWmFIQi9Dc3M1T0dRTDRkWnlHdHlkOFcrRUc0ZFp3UGpJWlRNbFBtajFhZEV2TThjZDR1ck9WY05VUHkvOUk4Z3BMMHRwd1cva0VNaUpBUmVmOHR0T2piQ0h4ZSszdzlENENiaVZteGt2QTFWUXpOZXV0U0R2b0VMTkhueXZ6b0s1YUdWck9Kd2JpVWxlQThqV21FTDNpTnVKYlJ1UTNxNVlPeWRkVHNqWUpYQ1IwYzI5bUZYdms2NFNEMm5FS3V0bXBZTXZ3WFNUSXVJTEtJekg0Q0FnSUNBZ0lDQTgzMi9RNzMyL1ZTWDIvYUQvdjliOC84SDJGZDl2MlMvNy9mSC9oNzcvTjl2MFN2OFBxWHI3ZnI1YjdQc3o5KzM3RDc5bjJoSDdmZjQvWjcvVGgvWjd6WDdmcGJyNnZySnYyZlh6NzlYMVZQNnZySmYxZTNiK3IyOWdOaUF0TTZRb1BxenRkQlB5ejB1T3QwWjZRVjVLM2szTmRkS0Q1ejRvc094dkMrYjRsaWVXbkR2cGJ2cCt5RzdmUVcvTXo4R1l1djY4aE92SjJJL1JYNkk2UkczZDIrdzVoaE45MUtnR0lxNTZISFErTU13d3RhNy9HR2pQTzloNWtEdkJ3N0pUSGxrMlpCejl4TVJBaDh6MGpyMTFuL1JVR0hJL3lVV0VCVjBvbVNYM1JWQVhrZnZkYjVGMDZoNkMxSmYrcHhvVEREbjJuaS9IYUZTWVdwRmJtSDRDbWF2ZElsOVN6TmxZR2hlVkFTdDQrY3ZEdHQwMTc2NDVYNkZ2cHpYekU3UDF1N3Y0Q0ZwaHRNVVhSa0FTRzBBMVNoa3N0ZTI1bjJPZ2ZTalhQZHpVNis1RHFxdkYyNXpBaFpFWktYamc2TjZWQjJZNVlrZWt4OTVBVnRWSERudTdDUDJmTjVzZnIxcTI2RkFaVHpMdmE1bUtiTHpFMzVsYzBWcnNJaGNqVEZoeVB0cFRPYmsrS1lpZlNram1uR0lCa0xzQTM5N0Mzek1SME80ckxSVEVodGNOdHU2VnZWOE8vaGRPTWdCQmFjY2t1d3RDQmx0STE1RTBRQitPZlhaTUZ6cVIzNCt0N3pvSG1IRDZUZWViOUxpcWZrd3RtVXY5R2U2Um90czliK2d5ZFlrSzdpR2VHNVE3Sk1nTFJhZWltYlRaZkVlKzdaeXdTc28rQ1F4ZkxSL003VmtEczNHQ0tSaUpRS0hvM3ppczdFM2tPcjVMWFhBRGtBVW56UHhCVktiUDNMWDIxZnlTNU4zdXJqMXhTZElJZWxZRXRnaEl6TnBwYnBQQ0VDdnFkekFoUjE3bGVzLzZpUW1CeXlneE5wRmt1d0hhUzA5dXVJU242U1p6cDlrZ1pqbjg1R2dkTUkxV0FUWURhblZWNDFrbktRTzVodzErVndMNTM2N21sTXQzQ09UdUpaOUFjekIzbjMyWXhKbVNTZXdyNW51V2JGVGtrcWUwRXpJNk4rQTUvSSswNmwrREMrNUFxTjU4WTI3eWVBeFJJTGhlU0krVzd6Rk5Rd2FaZVlQN0RlL0RIVjFlYldPMFQvUC80UzhEV1BwQmF1M2NTeDM3elN4Mk1SZnIxNVVrQkI2U0YzaGdIQ0pFVlhFaUVabDByRzQ4ZzhKRENUczllZnFRaWgzSzVVZ29kMDY4cnJZVHJvZURwSkQ0TEo4TGpTTzBpd0tpQjh3c2lsbDkyMElkZFNPaktTUEt0TGpMTjRsNGhpYTRBVC9lNS9VNW1YN3hSa1M5WXBicTlFcjdRcE8ydWpxUVV3cXNmUGxrYXBBUEU3WWRNWjJMNldubUl0dzRCY2hQTWU0b04xQS94ZGFWbjJIbjdCT3Q0R25OZTRVN0RXV094M0tiWFJua0RrTWFuRzRXVWN3bmxka1VMMFdsNzRNSUR3NTh0MHJqOHJLRVBMdzVmK0M3VHdxcXEyYVZYSmg5YWthN0FUUXVsU1hYN0tYTnZ0R1JORGFERnpPSmxjYStkUzAvMitZeWhtV0IyL3MzQ25pYnVET2FmSjE5eCtsVnp5QUdHcUZvUVFFNzRWcTlJaFh0eUJZcmpOcXRRR0xIaGg0eTJjTmZvUXJlMzYwVnhEcHg2amJrd0FobFpzOXRjVnFhaXh1OG1zSTBKZE40VldMMjlMYi9xUnFST1ZiZ20zMWdEamdBOHArWmx3eUpBbGR0ZVh0YjhPZStyZUgwNkZNQW4rWld0dlVRb0Rpa2cyRHhTSElpMFNxMFRaUFQvcURZK3FSNFhUcHlYWkN2WEllMjZJZ0tvMUVubHZaM0doZjlhdHdQZkt6RUdWeUMvWU12QWVZSDBwbTl1TjAxeFpkYUsvWWFqTGJOL2lvcnNWRE9aazJmNHd0cmliM3YvTytoWVMvdW52U0o4LzJQbmxPNnZLRXBmb1EySWE3Y2pCcFBDckxxTzJtbTZiOE9hczdqSncxeHVkSnlrdElNZU9mQXEvdzh6TCt5Rkd1YlF3UkRtUGJuSkxqbVI5UnJqTitydHJNcGhQdVZlNWVkUzhPNEZPN0tDQ0VLbVNUSWZhUk8xT1Rob2hBT0pGUGV1SE9wTGNDVTE5UjluQWJoQWQvT0w0YmptYkZyeHp0ZDYvYnkrUDRsNWhDbWlTY3lmdUJSeUxWK01lemR3MzJsSnBMR1BodzZraUx2dUhJNFZEZW93TEJqZnZYSTRmcTBiSXY1cFJrb2VNOEtDb2tsK3pnUkYvQ3dLdXZSNjl4U3g0NGpyWDlBWSthR0lKMURJMlZDOW4yU0tWTnl5V3NzSFhPdTVLQzQvczllRGt5TXVHejFnNE9Jc2h4NmttYzFqdlRoa2EwdmxLRC9ycVFNWnJPellQVXVhWTRxZC8wQmZPU2ZlOENwVzVoVkdNM3ArTVVPdVY3OGF6Rm1PTTJnU2VqcE0rZnhSeStWMnFCMERIdkwzWEFOcnNaKzk5ZFkrY0dwU1pVR3hUNE5kK2s1dk43blcyTVZjUWhZMUFNb1Q5Zk4wV1BZaVhDZStaU1dnRGthdnNWZWd2NEVZL0VoZTdkMmpqVjV3eVNKOFVwM296YThYS3ZKVnRSd3RjeXlSNkptS0RyTDFDcCtJK2d5aWJEM2MzMGJpZVlzNDExcytkNjF6ZTZxTHVwSStMbWZTdGl4bkZoNzQ4U3RxRVorTVdvNy9WQVZSMHErNGJOTGpFd0llMEJRWGt0L3J2NC9saWdkWjhob0Z2Qzd3cDh4SVZSUEhPaTUyNHR6WVBZcTUzenpiODhYTGxBcmdlbEd6aFhtUS9KampTclhKYmFCMWFIZyt2dWNYeGs4ak1tTUVOeVBWNFFnWFpCRHhZTWxsWW0vb0pBdkk5VmFNSU1jenNTN3puMExaMzh6VkY4RWtqY3F1MUsrenhDWStEaWZ6aDVnUGdYeC9ndk1hc2tuTXVURklxaWFYbkw3L2d1WUhib09kZml4MTAwNmZ5RmJ2dzlBZWJGUGpWeWlEMnZGYkl0NU9uS0pmeXZ3djdpci9CZ3Bmai9WT1BTSTViRGw3dEFuKzEvamJWR1JNTWV2cGovTW1mTUNUY2E3RmR5R0crSWJOciswUnFHWUdlYWRucHJGNk1ZdmI4QlQ1NUVydVJwQ093d1dqK1EveThCNFFyWUorWE93VkVSZm9RMm1ZMVEzYmg4bWJmYU1ScTNqMTVKNFJ4U092OHFXQ0o3SXBvRWFaZkloRG5raXUvT1ZjcGtqOFFUcGdONTFXRmJEeFM3TmNwN2dJQ3hTQTRTUnBTeW1NYm5tSEZvWno0VlgrRnlXcFl0eGlua3BBb3VGZ3QzTlBUMUtwYWhOaEk4eFBkbDc3RFZjSFBCZVBtaVBwaVVlTXFVeFlFYW1yWC9MVi9XOXo2a3p3aTMwdVIrbzZ6TEtWa1VFMDhBODhjanNyL290YW1OaXpkY0x5cnZDS0N3QTVpd2dpVTg3WmV4WkQreDI2TUFsNG02Mmd2SjhyMHRMTzBFRjg4RXZBdTNPVGM0ajhLSzNhaUdPM0VnNEFTRTJyU3dGNkl1dllyU2VSdjVrWC9SUHorc2Vtenhhc0x2cFptZFR3RTVSVURKaXVtY054bUJzdDg2T0FTT09hOGlpOWdwSEx6MU9hQXJKbHBQbVliellEUEhEZEZna09iWWhFeXFaVVBMSzhZdksxbjljZlhveWl4OHdKbTVQdXJtWGdxeUcvb3hwWG1QNlEreVViQnI0L0pwdS9GU3FTWkczMk16MmM2VzBSZkpvZGR4WjlXOXdaZ0ZxYklSZWI5V2kwZkEzVTlhcFgvQXVpakltUFpnMHI1MmxXS1QrRlhVT0xtWnRKOW5RL05DcStYY1RVV0ZYcS9MMDhpcnlCWXA1QzRzVGFUdTE2R2dUeGpEcjRPUy9pQU1sM080N1hIaDRDODhwU0luRUlZcXQrZ29FN0lNSlFEa1pvd3pmYUxsZGZBYWkxVElSSng4SzNyVkUyanZGcTJzMFNzZmpVNTJqUldsR2ovQzNIN25ZWUlRL3cybHFWYmVyTGNOMmpiZjhzaGdvQ2tDTlB5SGJxa1MraG54QVNmb0NOOVpOUFEzRTRUa0dzV09GS0RZVDZmV2NKNkl2eUhabUF2OUlXeFFZU2NIVmZJeEZydVQ5b3RZVFZlaGtzSDFrMllqeG85RC90eU0wSkpZOXlmNzVnTkZrWi9keUo0bmh2ZE1mbW9CMnM5aGU0WmVwZk9DcHlid2ltRFdFd0ZxMVkwbEhaMmt1c2ZhdjRzbTBTTDB4NDhDa1NHRXNmZG9xTVhJTTlJUkwvUWk3SVcveEJiQ0VOSSt4eTZWdjcydXF2Nll3SXJncVU5OGl4cGJveTBwZXhseW51SEZwMklORmtBcUVCTy9pU2lPYnhQemtrTjlwUkthN0VWbmU4VUFuMVpoRHlQK2I2UUdkc1BXdkVpYUlmcWkrVHBrUnlvM09vSXljQzArVVA4aWVoR2J6SjVzM3NLejBGeit1ZGNUNDYwTFZxZnVSMVZYTEJoODExL0NHb0Z3S2pzSmNzMmltVko0NUI5OWQ1dWc2SC9iclVSdUFibWU1NGFET2N3Mld6eTBvZGlYcXlzTzIrUDhXTXBVV0RPSWZKdmpOc1pPZVk4TTFBRjFib2xtOS9md00vbnFFQ0ZEWS82TU90YVo2MGRoS2x4dllrVk5RVTg1Ti9VWmNmVzVvZUdzYmRmUmVTYzhnajNlaWVBbElYVmZ0VVZQRkc2RTlxVTczLzUrWkhoZTk4bWw1dGtrQmVpUXN1dmdyaUN4c2RnZ0tYTkRWazZFdXNmdWJMZG9UQzg4NXc2aUZXQ0JaaVB3ZWwvZ0dqVHhHd1pRN29NaXI2a3NmY1F2VERGOXNSOFZ4OFdiQlkvejBkcW9ncEhkK0RWZzlSYjRYY0NCQmhyUEF3RGFoY3lxZ0pVM0NDQUNDOFR1OGVzSElqYnZ4aXdVTUl2VzNsUU9oRDJBbGdhMG40R1kvVFFaR3ZocGZuWHgwbGNiMTEramFrOU53ZGQzQzI4K3hFYUxydFBrRDRYMzRlVE02YWQ5T1lCZStBSDVXaEp4WnpzQ0Z2bktyVCtySzM4RCsrdkdrNXl5N01raVJTUmYrUlgrbG5OWi9KV0NXNnJwbWtEVzBzTXVISGVScmVsd2NxMFV4cVZIS1h3WlJESVBWZzhHQlE5eXRSd2NsQTA5Q1FyWGtTYjQwKzVhWGI0SXpvZ3F2NTE5YUxOUHh2amNCSzRQdzFYaGxmNjhQb2RUNFpEQTFYVWRPaE1tRmY0anBWTzlCenJqT2ZsS3QwQU9GeTFIMjZXM0lVc1VQTjFJQ0NoYjdwVllzeGUxR2MySHFXSjJNSGUyUC9oRnIzaHVBUkE0cWo1dllTQ0pORGFVQm5pZTg0RHpBT28za3FzK0VoRk84L2c3b2VXcmpaSU81anB5MndxYXU0MFg1V0kvN3B2cHZMS2wyQkNWbFRNSUJ6aGJ0dzNUc3JGeUpIUUcrTWdaSXlHNWhkcmwrMG83RGl6djdsVU1XVnJkbUR0NnJVUEZhb2JWNG9RRUQzc01IMXJRMVd6MUUrWWE2NkZEWXE3UWVPcU1PeUdKSlg5UE56SlNYVTBNT2IwSHF2Mi92cEpDblB0cTI4ZCtJZUw3ZUFCbjREZENZb0pEejd0YVNpTlJXVXYvUVRKWFhVdWRXaTY5VGw5MHpzZm9Ob1RqUWg4bWtBdStiNWtibHF5MkR3MXk0aTA4TWxwY1lOeDd0LzhiWStsS3cyR1JBd3hHem5rRTdQRG5Fell3d3FicUZOQVFyRllKQ0dwYUVuS00yeS8xbWdFd0s4akN0MklWZmdWc3A3UzVMK0pyUzg1Q2lwZ0xtNVpjREtWYXNIWVRVRExRU3ZnUXFZM2Jpd0V2UTlseFhzWnZWdnpSUTNwWXFQcjcxT01iQUpGSjBhWUQ3bVhzZWMwcTZWWTQ5Yk40eHd1ZGFqcWpCSnVtd3hLdCtnS2k1OEFOalU4b2pDUy9qL004elF4TUpvdi9NamVyYXdUL0RCR1ExVUU2c0tTdTc1NDk2aG8wRmc2NDRYbVhkUU1jOVhYOEtuVEZKdlhPMG81bVQyU3NzTGNkWXJTakZLckhLM3pST2xBTDRWblE2MFBZNmZMUjF1VDNSSXcwcDVYTTF5aUJxY09MR0o2U1hBRzdTOUhsM3BiR2RBZUF3YkdCWDVrb0F2UWNqY2YyTTMrakRxZG01czZDRHpxT21OcEczWXZDWkNtbHJLZmZvYi83eEFkK0kwSE51Smt6R2ZaY3Y0cFVCQjZ3YTdoMm9kdXdBaG12S0RoY3VscER6MUhpbjFkOE9UM0psNEVKN0x2aEwrUWdCeGlpNHhxeG1MZHMrc1d1UmJjSy94NXIwaEovczJabHcvTzZZL0VJaExLVVI0TXhtYXJjMDV4Tk1XYWphNlMzbUdhTXFwaExpZnZFczkvdmNnV2VESXI3SzFYUWIyVUw0ejhBelpuU2dvb1k3cDVTMGFoaUNwd010WVk3UUJKNm5RMFltYVhhM3NLRWVNRUp6VzAzcWROazFGYXQveW5iZ2RKcnZwVk5tUGZpR2VCUEQxbEoxay94dkJxdGIzYzQ1TG1Qa3B4Q2VISjJ3ZnAvVU5PK0dNMU5oak1DQlg2aGFCV2ozMlFzdUtqREc0R2Ftb0RVOXc1c3ZFK251VVk4d3pIWnZ3QWJvSExLdVRRL0FiZlZJVitlUlNiTW5xaFdZajBqZXlaMUhsRW9EMnhvWFFVaWtMZjFJOUFuYlcwMkZYR20xYlZkb1hKZ2ZKNWZ0TnRRbDFjM005K0RMMWxDYTVMNlVkUDZRTytabDRjbG4yczUxNFIvdFJHQ05QSm05QUVjMzVrQjV0OUMxblZmL3ZlaVY0Y1g3Y0s3SFV0TUF6NThnZHUxaFZaZldvZW9VM25qbHdmbmlEUHpCR0x0QUF4eXlDUDBuYmViSkdWcXlaL29qTWpzV3l3SXE3a2Jwa0ZVd2duemtuOXpzRlZpTGkzekpZNFhUMXQvRTFna2V6Z0x3c0QwalhYUkFjUkZnZkt1R2xpNkxNa1JaVG56OG56N29UY0JiWlJEWnM3OHdITktucmhRa0htd0YwekZvVDYvRkRZSE9mcVNEbThoNkZVUjQrTzNZTnF1cVYyVzNNZHBDVC9QbnJvaWhxL25NdmVnT3FNWjJKOXFvbHF6ZnoyTjYzNGtoSjVNTnRxa2FGdFhmZnllR0toV21TT1k2MlJhbGRzRnkrNWNYeGEvQ3VFMDQ0YXA2TTUxenVuQVdDYTRNaDgwb1dQeFV0cUowTEVXWXhJOUhMdEs2cytOLzNhODBNQTZVUWRBbUg0eFZaVnJEa1VTME9aV2g0QUNoK1dpbE9BRnFkTFhGdzVrNFlyc2trY25KRTNVYmt3UHNMTXF1cnFpNTFOaWNyQytXUldRRkV0OFdaUGlwVUxQWENQK2g1Z3EzZzlwS0pBZTFvbzM1UUJjMVFwb0RQWHBWSlNjU0VqOVgvWC9IZUo4b0Jkd0pYYk1xanVSNUdUSlZaWkxBb1NuVEtJZHZQckNvbjlxTFNmcmVFR0pmM2hoaG5PZ0NvN0lya0ZpNitjV2s3RFdSbnBWK0VDVE9HS2hVSjVrQ29teUMxTTIva2hwUnlxZDlmZEs3TkxWc0F6dTVoNnlFSExyeFhPNGxLNFgxS1Z4NGtNNWhiL1Z2UFJldUg2MUxzSjlOaG83S3VDUXdjOVZOeWZxZkNjYm1tcUozWUwrWWhwWlVKSWRqdk9hWEpRQkxyMHZ1OHplZ2NDZHN0VEUrM3kzU1ZnZlp2d0hpTHk0d3kycGh1M0NQdFFsaVVDM0tDMlpUMlhacmxDV0Z4M0dTS2pKNjZNZzV3cnVkQ2pnNTQ0djhmYVFibFUwZ2NOOUZocE0xT1I0V1l1d1lDaGozMW51eFVJdXFUZzhGdytQWXNPc0xYU2kyc09XNHdnWm1XQ1FTejJaaHhxQjJLQzVJYXhTZldLMVJHaVdpNWg0QmtDUEpIaVRVb1BCaEhCeGRvT29qNEpaUEZuK1g0bXpBT0dmL2VTRUF1RXNObHNFZ2w0b05aSTNlSm5nV3FZZ3AydVdJTDYrSGNWc0t6MllmSzRWNEJVUXprLzNEQzlWSDZSK3gvV2xPQzVHT05qRUFaRUV6SnpGMmkrRFBSRkNadHAwbzQwbmRBb01mVTlPZm5jVm1qNGc2NHIreW1mWm9NSlFMMHhKOHBGcXlhc1UyNnptYUpOSUZmUUhRWkE5WTNZVkUvbGZXZWkyOGo3Q2RNc3FDR0QxeFNtQnpUVEViZWhFenliUzUyN3Vja3kzTG1Uc093d29CajN3TmRxRUJOcGQzK1dDbXNndW03b0tiR1REM0l4VEtXTWlSMTYzRkxmNzNnMEFoRTEvQUtDV1lHTDloZkRGWWUreGtFV2xiRGZHeTNlRHNhUjNiYkFNeFl1UXBKdXptbXhvM3F3eTBtdGp1Q2RCRkltVUJoeHNnRUQ1ZEI0ZlZjT1c5ZjFjVUU3OEp5dFBiUVJrYUZjMWwxSHc1Um1tVmJPZEdpNUxtSzYvUmVNMlBTRHd3YnJ3NTU2VjRFb0RNWmZBVjQ4SGh3Y3ZxVjVSSFNUQVdVRmlUVjJSeXZOd1hzV0RzMnJFYVBaaWZWUFBIVUFocEZWclRVbEJMRDgwUnk2SU9uV1hDWFlDZ1VCVmhZdUkxcHVjcm9La1dtbzI3ZVNoZk5UUkUrdXpYd0NMVTBIUFBSZ3R6YkVTVmFON2RzbXU4ZjJVeFg1TVJZTC9hdTdBUkNad045RVFXQmJQdGFER2V2ci9ZYjBOeC9acis5NTRDd0cwWVQ3Q1pHZVF4WiszeHFDVTdrcGhDOEpubXBSQ3gyRnNBOEkvUllrbHNOOTYyMnZoZEVyTEFUZUdOc3FoaWhYNXlLMmVyY2hUTEoyQmVmWGZiM0dpMUZuaU1sM0gzMngyY1lHNm9LN1IyaVFxMXFyRXhnRzJOUTZ3bnlNWXVEQ1dWVytOeThsMG5NS2NQTzVETk82Sk1hcWx4eXFUTFUvK01mSG80Um5NbldnZ2h1YXBDMDNaVkEyN2tBMGcvUjFoS091R0FWL1FadDZ0MUthRFBnVnY2eW80WnZMYngyN3FTYjN6V3FXMUNBbHlKS0wrbUZJMHp3K0NEZ3hVeElaSUdEQnhlY2dMM0NRdUE0VE5qUUdoRDc1VWxoYkFob3UyOTJMWHlwSkZYR2FoL3c0czNENzJtLzU0ZXppSmxTemNrbkJCdVV5NlhRUUpKeGxVWURRZmFZN3ZhZmd4eVAzeDZzWXpxWkdOcEMzdUpmTE9tWW5NY3NEWFRodG9KaDRSYlhFS2x5Tkl1RGZkay9iVVNteEFuZjJJMGFyS3NtNEhQam9rcjMzcVVwZW11aGxrZzVxMGtzdkU5MkhZZnBPeVgveUVQelQyR2d2K2h6TGxRZCtCTFF1U2txZHVrTTlPeFFEejhsYmUvMXp6TFFqT1dnOHZMUWJOczB2WGJsSmx2T1dDQzdncXhIbWRXaEZROGVjQ2xTUHJVVHMyblh2d3NyVTc4YTdTUHo5cnhxRXprZ3lvZ3NyN25OUGdpNTZrWSswWHJJWkwyOWV0NXVETHAzd2VOODhTQjdoVXBIcUhab0owT3FzRXBFSkc2UnJmd3d3eGNSVzBwUFFQSThLTWsxUEplRE9KNG51Sk9UYXNpMGNmZ3JRSlArak11YTZabDR5cy9YMm5VNXhHRjlLS1lrQ01CbTdzWlpWbEY1ZFdoQnZsaUdXYVl0Mms3ZG5iOHVZVHlZS0pXSlptYzhxcFZQcTFWTkhWTGVUSm1OMFlSamtmTU9RMU1JZ2wxVS9DZnhoWDZPNXBlSFQ2NS9xWmhvdVBkRTdIV09RUm53bEtYSDVJdHR3UWsxVUZoR3ZOZkNiWmY5dmFpdTVKMjhselA2Z2RxNkNqY1FrWXhjUkNsRURiZVlWYU94Sm1EOVBrcVgzQjZMblM1bStYbldvdFg4Y3hUQ1JSckpCYTArMzJYZzZMUGsxNXlYWjNtR1YrTTVENCtwOVRHNTQzSkxQQi9td2lsS0dJdkhZRFdNOXN6M3VDcEI3QUpSUmJNck96enBuZ2xIRTAzbHNIampYS1BBcjJRTkl5MExWTG5BR3FmaWFqb3JqVFRNYVRCMjJNak5rWVh0NmdTaEd5dFpZQ3o0T2MrbzRUa0ZHNkNwQkpOMU96U1dVNTFPODk2aTA1bUVDUG1zbktoQnZUQUdkck5sdnlFY1c3Qk53UVp0WWFkYmYySnArT0RMNGVNeTZrZERVUUlmcElheVNIbUx5SHNQT0FndFhsdFlWdGZyUElVOFBNaDMrK21QTEhCeUkzd1plREhQcGVSMUh3UkdSWUt3OTRwbW11a0JwRkk2YUdkSUsrNHZUekVOSDdLV2FKTmdySGpuKy9OR2ZJSkMwS2pGaG1QZEdWY2NwNVdrekZkYUFxeUg4V00zcGZMUGZpd2hNN05GUGZqVDMyUFZUaWFxTkIySFJnWEpEWFMwdTJVMk83TnpHMXVLNnI1RmFKZ1cremZwd1dBaC9IV0s0ZUI3eXlDYi9VK2g4d3R1NUNWSCs0SDQ3QWw4eldXSXZQMFFhTU4zNWRGNmJRa3V1TGM2Rng3TXJqZDQrY3JReUM0N0krUHNhSktjTXkxelNFQld4Z1pwWlM0MWlURFRBTVRqTXNUYkVUMTI4a3QxNmNnY2swY2R4eWk1WlRRZ3dGZ1dFQW1Oc1VoOHA3TllXclZoL2ZFb1ZMOHA1Z0ZBYStOYllCUWY0emI3ZGRla3ZUbFR4bWlFVlcvcmRORUhIbDBDY2ZsaDFqK2tVb090NG12NlMvVC9Gd3g4TWZSQ0llYUovbFJPei9ScE1OSkRNZXBhMGEyKy9TS2pJKzNzZ1p5T3pEWndMSDkxNnMzU2ZxU20vaGg1Njh2WVBJdlBEV25xYWZsd0hyeDN5Nm5uTVJWdDF0bjN4dDZNMGhaUFN5V3BEYm5OSzg1aUFVc2VVR1pTbEpRTTV2ZFc4WE83THV1NUxsUzdHeU8yTjBpeVk5UjlIdEMzWmszSXI5Q1lQOWdSRkhoOWFKUVVTSDh3VmZGQk80UGZzVXRrQ1ljQy94YldZSTNBYS9DSnNWSmcydGh4dGdZaEJZYSt2ZDJUSmlvQUFPb3h2SHRTakU2Zld0R2FsZ2VlckxKVHlETmdLSGZ2Y0l5NG9xZWlhR29yNWhseUhDcjRYUkdJYmhNSkh6V2V1WnFvMzBqSlByYmpMdW81ZThJQ1dFa2lxYmV4Z3ozWnpQekJ5NVpHQWE3M1cxQndpbDZXbHl5aDZpcDloWVNWRHArcFVuZHhzRUhSMWpIdlpzZmpyd1hzMVY5M2oycDlXd2pSejBVdCtobDN5b2lWanFydnZNeklTKzQ0Wk1kb2xxUXBmdnltVjFoejRKN0llcTcrcDdQelA2OVcwcWVEb2E0VWJZNStJcms2dERNMnptMGZNQ0MxV1RzN2N2SHVVd09MWlUzUHlicTZ1T3p4M1oyTGdDbDZ3SC9MZGdjdm84aUswNXJHMHNLOFlZWmd3YkhhWk1FbElicTJLUVpNd2VnczFVdTZ5TjVJRHZTL0c2d05uZ2U1K0UxZ3Y4V3dpUzRqWVAyM3BrMThDZUE1OVkzSGlFL0pHWDlDcEhNcnRiOWd4RXpVWmF2SmRjV2lQQXFFdTlHL1p4dkhWZDBPU3dBeS9ReTAyTFJaUTFIbWRNb005Wnhpa2NBd0QwdDNBbFYycXgvVVp6SHRZWXEwOFdydVY5dUVCS2FTNXFYeE9pOTRYZHZkRDVJNU5oZmdCN2srT09GanRBelRyY3d3QlRUT2djU0Qyci9YYzZZclRiRnRNU0pGcU9BZ1V1RkVXK0tDNmhVbWNpUVZXckl5RlRHcUpXcjFTN1RiTmtYZERFV1AxdDF3ME5rS1lWS3N0bldUMTJ6Q1k5L2Exc2hFeUVvOUhkaG5pdkN2R0VvY2Y0VnRQNm1rNkJKL1FwbnhLRkVzWEtRMEM5ZkZHc0sxMnVlNUtVUE9GYyt3K1BaYks5c2VoNFBSVUF4ekozMll0QXBVVENuN1hDdDU1bDRnU1V1QlYzS01qY3BwUFg2ejZ2TnJ0R2FzZjNEQ3BTUDNRZ1lsZFRSakNsWWdsK3g0azN2cFV1YVU0QVJzd1orZWU2Y2hPUE9SekRlY2ZyZUNRNnJWcjRjUjNIU3oyNkVqaDJ0OCtDTmdoRWZMc1ViQ0d6WnV5NFgzL2toMFNheWFxNFU0U1VpVE5GTTBWVzJWbkNBZDRBVFhkWWwxb1ZwQWYzbGRMd3VQV1Nmb2x6OXZRM1hNMGt4WTN6Z2tjSy9GdThCaXh4Rzc2VTVDbGdWS2FoUG5MYUVyNzk5bFpGMUwrbytCSEhGWDdSZ0NnYldiNngvaWkyM1JmR0Fra3B0L1dWWjU1MjUrU1ZjenBLYWNRZHFDdlpiQUJCbEJkdkp2aysvazlGcE5VUmZ2NmxNNzlIemdYQ2tQaE5XNzFJbGlqUXRvcDF1VHFZMU4vVkFmaWNVUlUyNEo5WDhVY1o5OEM0M0Vqc2VSZjduQ3ZtVTF6cktNek5sL0x0Q2IxbXF5RkE3VVkvRWtZbjNORTYwbzJxY0I2eVV1OTF6aUpVcVlsS3p6RE8vUnFId0Jpem1XNHpBTkhKamZ2Z001WFoxenBJRlFTdU5xaEFQSTlhQWhhUUp0TVpyOXBEc3U0eWEzLzdrQzVnRktmbkkyOGt0YTdaSVhXVHpMazFIKzdjRjZYNUxHNDNONG1hcWJkdEpnRjV3ZTQ4bitiVS9vQXUvWENEY25RV1RRQng5bUpHTHA2ZHFzNFJGT1d2U3pRalRlaEEvMHBjUnJvYXpIcFRUb05uSzhwVWdGd21SL0syTndXRTg4WitISVN1VXNhM1o4eDB5S1p6empuOGo1OHlQdVhXenorZDltdUJ5YmxJVks4cHdKN3J5MFA1dSt0Vy9WSGNDR25aR1BLOUtEbFpYNWpKdFpMRWxFbGVoS2Fsa3hlRHNMZnd1N25QMWY0YlNOcXlNcGtQQnFYMFJmYXdyTmxCTCtZZGRZS1RuYUVQYVAyVk4zbTJTZ0l1bmNmY2g4dUxGQlh0cGRaS0pESVFINUFnai8xNzFWSTdUcGh4WUhBUG96a0FlZjdmR3FKaDFESmdXWXJZMVlCNkhvWTgyQUd0TFNROFpZejd0V2FjL25mVWdUSDlFZXJIUW9hdFE4a2ZqZDlEVW9jUXhibzRKYWZCR2Rubjk1QXFHUTBFUEkzTmVKNFpyREVJS2tyQmRkV1ZkdjhJL3Z2eTA3TTVZWC9zVkVFendIZDRZanNaRU11akdPaEF1MDdtcUpYQWdSV3ZaVkNUK1hlMHNLRWhmL1dEb3pRUkFPV3NuaFdwTFBoSDl2akViQ1N3ZDNQa09YK0NkK2Zxd1RLRml5cHEvQXNuZXIzNlBKeG5JYy9QU1dKME5aeFZGdGEreTFoZU04ZUlqM1pGT0dveGN0Ty9KdFMzTUUrR2JrUnU1bmRncUYzNmhGYzIydTBmUkhXRVFyRzFGMkJ1SkZlbWN3ZDhqallwVVJzMnBSbUdBZHA5UHlvK1p2NkkrZ1dReDJoZC9kRjNLUEM5bzdERTZ6QUd3c0pETXhMQ3E0Qk9DaEhEN3lHdG5mU0pKS1loL0xkdzRjSWluL1J1TjR2VzVCaWJUdTliVXQxRWUwc1ZGeEgwdzl2UHhheHNHUmhVQmFuRTU5NTZTeS91S3JzVGpwODR4SDZheDNWakpvNG5DeGU0V1E3YWVmVW52NnpSQkhCWnIrNXlVR0traEdzb1ZUTzZYNDFDOUNXazVCa21udUF4YWhkU2psdHRzQjhxZDVLUXVqRHZkUElGS25ob0U0OG1qWDkzWGpFSXROV3Jkam5zbytoVS9mN09VcE9XZWx2alBMalBHdVRlUVFoVGRqOEtRUnlmcnlYWDAzTk5lTkZLMGVWVkNGSFJuQ3p0TytPOVlhNFVyQnVseThiUi80WE1EamE2SjNHZXBJQUp1ZjkyZE82ekR3VXo5UVpxaVkzVWdqZGljMElPNTFGNUxpY0k1RERFNUxKSkI1WWI3Wk5rNG12NFFpbjBlKzUyYUtQUkowa2Ixb3BsMkxkODI3aGVqamM1T1MwaUVBUFhlVGI1Zk1xMXcrNkV2N2NKN1VEOHduTDZKT0lMbUp6cjAvdzJQUlY3VFRjcmx5RXM3ckkxbERqRVNTbFJkNHJ5cHI3VUVJWUV1NkVCdllLQU5zU1NpbFBvQ1ZKMktIVW1oSWw3aGNTT1l3SU03QkNodTF5aXBWckRqUldUYWcrNUZSUmxQWVBQQ09ibFdERHZMdmZ1YmUvMHNpVi8yQnRBL3hEYTVNeitLYm9jRGhBZHZxVE1WVUlEeEJrRW5XMHVoYStlVHpWcTFteGowTFdha2EyRDREVTU4SEgxaUVoWUJoYkRiUlR3c05yWExxVUhHK050SlRJOTZlc1hLcHVlSm5nNXRuYjV6R0UwbnZvRlgzNVU3TjZUeC8rQllzMFZNRjgzdGl0TjRvK3VHNzg1cElJQW5xd1lmK2hkWjR2VnN1Rm9zMjFQZHRzM0tQZXBUN2t6STBtaGU5WWF1OG11bWh1a2V2eU85b244TG94dENFQU5lcmcyTmlKVDY5QTJJUHBYWmpQaHpuYWxpSnVvSkhOd3NFd1ROS08wcjNxR0ljTWM5RzI0eVdZOGI1QVczbkljb0d5NGZZdGdkRTRra0lpMG12eUlIZWRrbWJBMy8wSDVvbXJDZTZtanNWQ01TbWNmd2E0M1ozTGYvMUhQU2xCODFibG5tdzk5ZDNqWW5xSXVvN1RTaHlpaW5LRzAxMnVxdC9uWTRrSFVTMHZyM0RpdXEwUUI0YmNMMWZhS3NoSm9RNkRNdVp1QU9qZDFWSnhQbmlETmtGQkpIbVptaXpNbVZsSlFKMnI0SWxsOU9tbnMwczBKZUVhNmNINDQyNVBoRjd4dmdPTmQ1a1gxQmxVY0VLd1R4eWdUQm1vRXFCOHdFWXJOcG9UTDZKK3VpaTdmWmZBMlgyQk54a25ETGtwK09WSWFtQzZXNlNucEc2Q1hJSDJGN0dSdVFaSDUwanJES29mU00xbzZmcy96SFRyK0xOVmpLeVVnZDk0UVorQUh0MFdqdU1uaWl5SDJLcXgxbkc3QWdSNU9FenUyZTRadFVPUEw0UGt4NG4xeUxsOGY0Z3ZxbGp2SmF4amNOWFdacW80QUk4QnFoUjFWNGtTOThYUCtlQnRoQnZGdnFGTUR0a2JSemJnNzFSOGpMM1lEOHU5QWRnZVdmcGp6ZW42QzRPbkg0Vm00MDZ0ajBNcW9CaW9UUEF2UFJSREYvVTBndG15QVd3eDJ2TXAvdHJQdWhPakNibDB2MEZueExwTW1KeFZQSDBwOGYwcnZtR0lOc1hQUFZBQkw0bWxLRFlvSEhVUmN3eVUwb1dHVElGdW1VbWNoVGNOZ2hOcDBLVTRxVjZiMVBTT3ZtbWsyVEx5N2hSREhQdU9VL0VKRmRwVjdwQlZwSmN3R0VRbW54RzFLZ09LV24vTGt4VldpQlJsTTZZMXhrbXNTVWVUQ09HSXdldkh4akdHbWtHWUdUUnVSK3Myei9wZjhRS0VKVm93OElqdy9oMlR3UXY4TFJjRks0ejVueGx0NXhYMGI5WVpjZjBrMHRuazhVZEozSGFlc1dhZjNCRmMxVitUcFgrYTBORFVCdmRhWGljWk01Vm1xY1B5NUdpTE1DQm00NllQUG9obFJXd0Q1VG02dEdMT1J5aEp1d2xaWkVFQkFORnNUNzBaQ1phRldQQmFMNG05WnZSK0lNMFZNVEZaT3B1MFVYL3I3cVoyNHNuSlQycUo4UlZYSlJTMC9OSmIyczVuMTJqUlRvOUtPUE40Znc2WS91RmlER09xVkhFalRVRGZvaGpxS2JVYUNNU2QrUWdsUHZPZEFFM2Z0UlNGSGRTZGxjVnJ0Ti9haVJnZlA1VkxTeVhtSVFkZEZxcVI2RGttSThDL2o5TFkwd1lpTTNkdjJVcXBqVndDYjVRREdLY0JyR3VycDgvaWVEcFNWdzcrU24rS0p6STJocGRUenpqbmZnbHo4UWdRTWZsRnc4cmVRYkZKcldiWkNEZzcxMUU3RG1Zd3BUK2lQTWNUSnowendiSkNCVnBFRHgvZFVwRnFDNFRIRzlvMzZTbFIxTmN1VU5LUmxyWVZPZFMyb2RMeW5LU0VnZXZWbWFoUVd4ZG1BamRERUJSaVhQajFjMHZTSTA1VWVyd3NQNWN3VXdkZ2JKR2xITC9ST3RxTjJCYnN0czVYTHpvNWdWUTRHY2R6ZkNNTHlpWkNMVDhGb1JESEJJNWtlbS9nTzI4ZGQzbW5tbU45OTdOc25rWFpKalhwNjhXNFF1N0F6YjdobVdFQ3NiT2lIbmgxZHB5YmNOOVJ3U3RkV0RJOXBOTGNod3dPQVRiSFZzYnBGcnNSSmdGeWs1MzYrV0xHWWNXUm5LWk9lSDJwVktLMFV0U3E2c1hoRmtXK09RcVNHQThpbHA4clo1Nk10VVVqZng1RjZPY1lPQU90TzBRQTJhN1NJWG9qQ1lCQk1LUmJ1ZXRPTTVwWE0rUDhOM0M2eE4wSXNKanRDbUdpK3hnRVZhdHVNN0QzR3gwSHZtaHRjNzlpYWJMN0FFc3RaMitEVXNQRkk4cXBtWVkrL0FHS1A2OFN0M3d6Tm8xN2x3MHJRMXpqbmZDendTV1c3TG4rQSs4Nk9qdmlOUFJyMW96bzd6OVlYY3pjK0hVaXJNbzBMNG9kRWo0YnROakhFMDJDV1ovVU5zZjdUMVByZUxmaTRtSDNFbkhmd01mZjcxS2JNWjRaUnFGdU5DZVZTUndTZFUySFArRDRTSzd6ZG5aUkZFOGphZEJ5ZWVaZFJxazZLRUhIZDNkQm9yQnRDOGRlLyswYnZFOW5PR0VLZGJZM0hxL2ZlSUNyYzNiUHY0Q2dRaWJOQkxZdXdUcGtiWHo2TkZOaVQ2RW5CRVhSczRYNVRrTmROYzd4TjJGTjhjaWdoYVJNSjI0MFlSY0dYS0lKWVc1bWJmMkM3ckV0VXNxaSs3cG1GOVp3NVRnM2tkNHlFS3A2QStrMW5DRC9PaEVqUTFrU2ZWdW9wNXl5bGtpRXc2aDVpSUdUTVQ0dVJJSVJTZmowUW1ueGF5d2MwT0Y5dzFMYlQ4MXNtWEhjcVV6OVRweGtMVlhpblVVQW1pdFYrbGwwMWRxVEhTSmp4MjBJc3N5UkVoU0FIU3VFWlNRN1l5Z25SdzBEdklraDZObHZadWkwZHFIZHZpSFdiNVdBWW03MGxTVXRzcmNtYlpIbTc0cUs3YXRKdjBTZHZZUHBlRThzTzByWm9qRWM4WDF5QU9WVU1GNTVBZDhXSndnOUdMQWYxV2JyTUIrTUhUOTBqdUFQYnMrbHM0dDdHeENyVVl1dW4rSUJ4R1VVOVpHak1DVlFvbVhwMFo4cHNhdXFkbHJEL09tOWJPd1Vub09XQmZOQ2dQTC9tTFJyc0tHakZEb2c2ak4zcU9MVnV0YXhwL0ducVo4UEFuWGpFTldjUXEvU01QM1U0RmgrRitzeGdNK2dWWUVkeGlsYit5MnhBeVRCM25TQlYzYStwc0pqbFFGZk1TQm5pRlN1cFVPNXlkOUlrSTlTWGNHS0N0ekxGOUplM2M1d1NzOFdUeUZPaWpqTG1rOUxDdXgxV3lhT2UvclUranNwK2V5bDdFNk5BL090cjBUbjNJeVN1SlRsSE9CV2dwdnQ5bm9xcDV6bWlYazVLc1VocXhWdnhJRm1DLzE0aWNIRkNQbkp5dno0N1h4Z3hUb1phVUJTUUdqUzV6VGxzVWRBUzNPc3lzY3QvVWRkUjZGdTE1OU5aeU4wYnlkM2Q5bVRHeEI1TEhBZmxXazdPQlhxK3NjYkZyYlRxb29Dd0xITGt5eUVWWHpDaXhYT0NTak9WYlpwTENsa3hOZUpuaDdHZGJsV3BqMloyZGlqQTJYSyt1WFZQa3pKM3U4RVFYa1dCa1NXMFIxeGoyYkJWM2g1NmUzdi9IMlhzY1BVWkN6RFZ6L0J6alk5YXVWbE84dHkyKzhqNHFBYVhyVmhZdUVjdkF5eGJaY0taZnV1ZUczYTd6akJEamcyWjRwMHlVclFmZDUwY1JReVg1K3NTaXNuRE9jZnZzU0Q4UVlRUWZOSmpvcTdza1d0U2pXaVdFUmdPcjM1MmUyUG9uazFGWk9yUzhjTit1d1hycWU5bjVIS1dsRW0rRHlPUXNLcVdxc2dNVC9HdW1FeURZTnJ5eHVCSnJCb1VzbWlUVXZqSXlnNFZWWVZLSDZKRUNiL1Y0OTRuVVM4WS9FVDNDZE1FZ0dtbkpTTmI4bUdham54U25yenR5MlpwdzNaTWNmems3dmJsMmtZTmtkZDNud1hlZ0hEREU3TzZ2cVVqZ295cTIzZWJ4anB4M2ZKVDFsUUNNaWtuK2pIZmRUSGVqcWdjQWUzY0ZPSUlpR2lpMHdYL2RWM05OeTRVcFBZTjFBVXZZdklIY0s2VnZPanlMSktzS2JBZmdVVkdiNGphOUhDQXJSNDNSSzVLNGJCbEh6Q3VTY3VvclFuREVaM1JiZTJzT0l5WXdDMmRGZkN3SUJyNTR1L3c1L0pMODU0QkVKRUJHUDhhbmJZeGsyejMwMm5mbDNTR1YvUGZTelp6SXlXYXVsdW1tMml2VEgzK1ozUlMwU0lHM2o5emk4SDBsbjI0RmVXMzNFc1dvcXRaa0NOS1kzeDRMTGZsdGlUeU01VU1TdlJWY0ZJQkFGdU5pWUwxOEF1cGU2RnVLbGRsbVhQWFlDUnpqR0syOXNRaWI1N1hVVnFzK3NGamVOZVVLS1Ewb0dsaVVvSUlCbnM1SzNodWdya3hXT2czY3JadFdxbDNqUEl0ZkRpbEQxRDVyS0xZU0FjRTc1SnFhR3V5VUFidnp3TEhqcHFpbXZXaTlsMENHOVZRWFBUR0E3VHF3L0ZNaTAwYW5udnlrUzdoYkZ6eVhBWFFocXdSUVU1Qk15emtJRFhQbUZrUi9mTlVEWHhyT1JaeFczMEhoOVhUcFNBRnhuRkNITCtmdWJiUWFoK3dOMVZNNzJ6cGNFRXBQVmFLdFhmTVRJOEJCbmE0S212bm1RQ0s1TW94VDBjSjYzcXF2WHROUzgxQUJna2dkdWhEVFFuNUdRWWJBTmhHNXBLaFZtMHFXL3JRbHdoRGdVTCtWOFlDNXR6M1VvN2oyTDBoK0J1M2xpMTBoSU9aWXVCUUpLZm84NHNIUENvOTVnd0NCUnBqbGFua0FDc2ZpMGNkckp3V2h6UnBWKzdBM1ZleVBoZExvRTc4Rjh5QUFyaE1pL016U04zcU5sT2VscnRzSndieDVmOWJvL0pQeW10bUF6V05mMWhra2JlSW1JSUFGcXdlZW5xZTJ5WnZVSFZSaUs5alNobGtWbDFXUFVUL2NrQmZkMXlFS0JzZVlvbTJWMnJhck5aODVwQkNpeG9XNmtaaitmc2QrODRIbDlGMENFWnJhL0dmeEdrbTdONVZDTmY5b1RDWlE0eVpCQkZ0dER0VzhQNkowNmdDcXZuOHFvY0dodGZ5RTlFMGNRa0lGVWk0TXRSdFNmdW8reThWK3hFQlcvcHlDaGlBaUZGRFhOa3I3QTdSNWQ1SzREMWZiVmtabnZJWWRTaDZ4V21DMDk0Zll4Skdkd0g0WjJYaGI0ZEk5M1RrVHJZa3hLL3FSZytFV1N5NXhkZUJOQXlpMm5GS1JTQWV2R0x6L01UaW4rVUNyQUNQbzRqWkRkTi8wWWtlN3k4d25heWdFS0dIeXFUeWpFUlVGRnFQYTR4Vm01RVdLcDJxQ2J0ZURCSlFhMzVxaEQvSnBKaGdOazQ4NndTQjR6Ym10Z1hjYW5rUEcyQzVVN1FWYjhkdGxjMTVqQUVNREt3TVdUMTU3T3V6T0U5c3M0VUdWR0dsS1hYMktHTXcvSHZGOVZ2dG1OV282Z1E2eldVZ1JvY1dzSnpaWHh6MGZWTHB1MUxOQUI4K2tYVENSeDkyVzBGT0dvRUdGM0ZQVmxSTUdEalZjLzYxUDVIUEV3VWxBS0xreisxVjN2OWd5T2NRU09qUnRjN2w0OFU1c2RvdWY1RHRoaEJMQ1owb2xqOFJDSFlnNDVGRUs1TVRMVmZJS3JWaW5SdmZWa216aWJEaE5CZkluYm9EWWlzQ1BGbkRVclcveHY0RTY0K0RyRFR4aGhRTWFpMFdMa29rQ08wUFBJeHNBSmNZTzJCYkJDS2VnNTVCcW9nRThWdUlRMDE3dDF6VHhSMitSclk0Z0ZDMjN2NVJFTi9tcVdqUGx2UFRyNWZveGxxbWF3U2FyNW5MQnJCcHVNN2VOalkvQ296MUdrTVp0TjU3SW8xMVhDZi9COTFOclZLWWwzMWtENTI2OHRuZHRyNEpscENtU2Nsdm1pWFF2ck1yNEtwem9lS2R2d3FpWDJjSHhNOU9SRnJZblJmdFoydmJRU1lKeHdxdmpoRzJFRWYvVk5vbDU5S01LdjkwNENTSzh3NkhVaWF4cVZPRi9QaWFHdzlYdXp5Kys2ZFRtcXd2YmQzTjNwTXlGRG9NVGg1ZzVaMTFqRGVNUFUrOXB6clVBRkpuUy9yNXFwR1lBMG9uMmxFOGEvQVQySGo0ZytIUjZtUmIvRUg5TUpqay93OC9NUUxzNlc4OFo1U1RjYnN5UnV3SkplTndHYzBPQkFKRitJVW53SW5ncHdXY3RZL01xZnpFUCtMR0lncDVaTTRaNWxTWHhGQk5lbEQwMHVzaGRqbjBYbG1WZlVXUTI4VmV5b3BtRVNiRm5Idk1PSlJ3N1g0Q1V1U0lGOTg3RzhqVTRubFNRbkYwU1NLREowVmlmRTc3cXNLdklwMDVxa09RTm5TYjUwTkRRR2taQ1pkWjBoMXhoRE83ZHZ0d0F4QzRlelZYRm1jUE5YOFZwTkNkMUkzRmQzOHFVQjJMckpBWTdnWnZ4YjE1MXJ6Z3kxMjRNV3JNSEpKblo5MEYwTXNxRmVQWkZ4am5FN2FhNElPVmdVM2dqVnpNY2ltT0lLc096N3VJYWlPSHdkNDJCaEZ1L3JtRTRpNjFrV0lQZEdDUGdudjNJL1JWQjFjL3lTTDh4OTUrQzY4V3lPckwzeGRWdUVHRk9yczVzZ0R4c0tyOFl4ODgrTFR4TWQ5SGNuRjlyTm9FdlNKV1Q0UnNSckRrNVNRbU5FeDNOZjlnTmhVdlZEVlBSNFA3L3kxeFZkYXhhb21adDFhNzlBTGtYUXFhT01aWlJ4MDJzcTRlemVIMkhOL3BWeCtwbU9FSlhMNVBmczNXRU41R2ZEdHowQ2RzaWZUMkZFR1hteE5COXZqUERiVDJIaHRldHI5bDRtQXhBVHhmd1k5Wk9LNVJTU1A5aVZIMVJRZC9lT0JSUEtrSk1FTDNYaFowL216ZTRwU3F5NXR1NTU0anNRcG9TUXFEc2ZVYzh1NmZXNVhZelZWNTdyZ3lQZFhwZFUzQ2UrVzB4MVF0bWhCVnVCaHNiWUtENTVQRDExRmExb09OSUdDelBkYTJkVHgxbUxramZhZFpjdlA0OTY1RjFoNnEyNVpSRHJkc3JrR0pTckFQWEswUVFzcmQ3R24zdDBxMW1mWi93VmxzTExmaHpESkcwZTNpdEh3TFZaaDlTNlNjQmErU2JndjRsL2pYN3lYQVhaSTNNTHhFUWdPL1hzNlgvRmRpUGZiRlFzTnBYL01DbnFGWkVrTTgvQ3lYVDRxL2w5SzdKL3N5VndCdFArRG8yQ3VUVFNQYmVtVzl0OFBwaHdNMDhvNWdmU1dvSmNQV0lLcWwxUXFxWmJxK3lDUTdsK2JsenNodGhoUVNzUmUvRHlWdHNNRlg1Zlhqd052NjluSHB6NFgxY2NSV05DOEg1S212SVNMdndtaEVXZkRmYVJtSmVpZVpzR2ovVHY5VVhNMHpDQlhzcU1nZFJHWkg2OWQxRlBrdHo5cFY1aFhEUTA5V0tUZUFZdEpieFc2NTJ4S3ZOWkdpS3FNMFBaRG94U0FVZ1Y4YlZoeW9yR2FvV1lkYVROWjNZeS9PTU44NFkvNWxjcVF5WjZ3SmxPMWdjNTlOYTNLVEhDbWQwYzNCRjNrUnRvYjhHSDJPTjBKSHp0K2lSSGdTWGc5V3Q3OFk4djBCSjh1WDAxWW03UDlmVE5aZWplMUdZTmpPTGxlMFIyUDh6dG9lVG1aOUxqOXRBb2QxZjlra3NsTmxoRkRCT2Q1VVdkK2lvdkk0bG9IeStDd1k3NXlmTFZOT3JYNHJGeWFJUCszOHFYRlAwQkpDYVF6UUdTTFdvN053cTI2OE1iWGpCQmJ1dnZMUnVpZ1MrVC92SEIrSk5UU1RMUUJ3ZzBBcm56RDMyd0NhWWlLWWdhaTlUakJZcDlzTVNpaUFRUFpqdEE1ak80eDR1ZWl3d0tqVUlWelRHRFVmKzB2cHZZTUhLaFlPajFQL1BJd2d6RTIxQ0pLaDQvUjQ3SjRJMEwvdjZMaG1ha3hvcmRYcEk2WDZXekR1NlpKVWhyVVJuTGxrMVNzaXQrME5CcFBtWkJNRi9aSHZtL25lZ2xENCtwYTNnWGs2d0EzcUR0VXRtZ3lQRkREeEw3TnVqazVQRXJaV09FK3YyRGpaUU1rek9PMU02N0JST3hBYk52OWhmMTJMYzFZR0g0VHU3Uy8reGlMTFBtVGNPUE9NdUlMS0VEcktTQVZ6aE5zNFpaMktqeVoxRlFkUzhiNTdWU3FheWk4SnNhUDdzTzFINWtWMWxaVk9Ia3lGMVRxRzZwdHQ5MHdxaHlYeWF6SjJ1djhuS1FRL1lLWmJoc0NQaUJiN0k5R1ZrZlpNa0dTejFBWGRaMVZoQ1JuUlg2QlE4NnRReDFoTU5mWjVGUi9uaEpaK3FodVVOWXJtNy85Nm44Yk5UUzZ3SnlSNlRoN2svZEdWRnYwS01xMUptVmp5MmZhVTZzWjZNMnRIekg1S0tGOXdoMnNRSkorVlNwT0dma0NpdHdKZS9VUGF5enBiZkFwZmxWb1E5ak5MdjRqMGFGdVBJUmlGd010ZVdna3R6WDdrWktLSU1Ea2M1ZzFwbzlWSWZMa0U1ZWxwKzZIR3dDOWJqUDhoOW93dmwxei9iVkVFVkppM1Y0SEZQa25wRWVRVEcxaENzQzl1QXZDYXlLOVVXajhWZVE0V0ZvazlpME15SVpWN0V0VS9scENhbC9zNGMrWStycXFuVjAxVWQ3b3FjNFZjdldvTDU0QnNTdy8zaGNkZ1hvcDJxVzNSRTRKYnhLNGlOWU5FdzZLZHUxUlphdml2VEowMSsxVXgrRUU2MG13bzJpRnd3RFZWbVNnQzRuSW1KMC9McVFUemtYbU81MklISE41NDRoajlrNG5rTHhnWEkzT3NQa3p5elkyWUtOOXNtMk5tR1dHS3JNSVRuUStHVjBSNFJMSlBtRVBrRkE2a3ltTDY1QTdSL2dBaHlRdWhxRnBpVVJkcnhYSTBrbXRKNE50MXdZV1YvaTgyVmRIRGJUZWRwaFRBM2FOelZ6VkNZTjV6Nk80WGdxRHIrVE1IcmdBZllWbGlkK3BCKzZRU0xzTERuaXBMZlRXMVkwbUI1aG1Mc0pTQnFCWlNaTDFCZnpjMm0zL1JsdkIwbGlnNmdwTVdENFlIV0cwTDFNMnBFYXVxN00rSXpaMC83dmkvSzBjQmNuR3lFZlF2Q3RFZnBPWlF6MG9lNVBMWFZrekdHTTJaVS9Lc3pnMHJlcXQwWkdTYlpaM0g5R2xpdDVpbnJHaTNhdGJJa2loUFNEYllMMFRiZ1RScjVRSkNyVmlvT1lpbjJNUGNncXpiQUtmeW9VQ3JEOEZDUkhUYjEvUkx2WHFaRXpRVXpucFE0S244NGMyaXdmQjJ6ZHNTNTNBS1RZZGZLcXh0RmxhQlBRK2RaRDNzajJpaUIzOFh1Qm9aWWNDMXM5bEFlZ3ZPZlNUaC8ybmZpMzN6WTBqVkVDOFNrNTVoUFo2VGpxZnJtQlRwZjU2TmdCZnFRcDVpbERyUHJlY1B5VThNVnJCeVpGdmRuU0N5ZUROVCtIWnZ1MzJlSStqNThDd2hRNjN1aVhyOGJkY3pmcGRkOTNDMjNYaWJzU2VOQmwrdkg0QjlqWHFKL25SdlRGc1JEWGFjSVRyZ1J2S2dmaU81NlZkaVRPaHJzOGlGSW0zQkpXUCtRQ1FJYnZ0ajIwV3FjMFl5bHUxTkVNUzVpUmE1Wnk3a3ZoQVhKVVRCQktBN3dCb3Y3RlhsL1JtOHBmRmxaNXNXUUJ2U2xFaitLWmtLVVhESDRDdWVKelhVcnhlTGFiNVVFMW5WYjVNRlR2Q3dmVmdQYUVzWUpGYU1kVkQvYUFML1kvNUxmWThFNGJJRWdNYnl5MFpMSERGMHRkOHRNanFZMjNic2l0ZWhkTEJ6d0pyUzZOOXNTZDkyQUo5d29hQ0JXaXg4YjU3bFQvUVR1K05wc0k2YVMxd1BIOHRqMlhDcHFlVGdLbkhvR2srNGprUCsvR0FEZWM4bmM2WDdJK3NnQWhFM2M4bitGUkVqZUtBWmd0MldHcm1XTTl6VEZYbDNicXdaMFQwUUVKT1RLZllUWFFMc3l3NVRFZjZrRVdZVUpSaVRBWml5WkdLVVVPb1VVZjhxQm5sMFBsc1BldHhLSHVmUmgwRnVhd084NGQzQ00xN3RpWUl3MDVOM2N6NEtMNW9peExwd044aDRob3JTUHdidFBNcGRLTjBFNlg1SUVtSU5udEVRZWtHMXYwM29lWkcxV3RVcmVoaHBGdFloNlk3VFoxMDZlS1M5RFh0TlIxb2Y3dnY5eENRMHNrSitsRVdvU0ltODBFVUJMT0JoVTB3ekJqd1dRNmtZT3RsMEI0ZGVYeGFmZEF2cFRVdGRlZ2IyaUhDdzNRVzFJSnVtanJEL1pNUFY3VU4wWTBnQzJtdmRUOXhkY1FrUzEzTm83WVp1REpENi9FUi9zTGlPRCsya1lIc1g0dDFEdmlJU0VML3B4ZnlPbmV1K1E0MmYvT3V1YzlLS3lHa2o5MlZZU3BjRjhQNHZXNHF0bHJsZjFjUWxnYUwzM3NsQWVXaEc5bG5xMWJaRi9CcklOeERWM29KL0t4NUVOUkxqNFJJWjNMc0RnZGFRb2VBWDZTMTh1bS93Yy9UYU81QlcwME85Rk9sUjhWUE1ZL0ZKNXVCVDBvNTVNVW9WQU5ndTJRanJoSWV3L21KUmd2REVpb29nUVBzaXNja09JQkMwRzljZitVbjFPai9YbFRITCt0dmhiZHByQkxQd3V0VGR1MWNsMmdnL2UvaFI4UmN4WkdXWTdYTlJNSWdveng3RmthWldRL3RUemRIajVCbWFhdjhOb0JwZ011UVZXOXhkb3h5VlRuV2JpM3pIc21ZOGpSMVhMUHA4aW5QbGlZck9jQ1FDemw1NThldDhyMXpTc3ZaSzNKa2p1YjY1cXdrMUNIbGF3Z01YdzRMdTFxODFrUzBuMDNackNhRFhzN0VpVzZSNG0vYkhMaHVyQkZSY1pnVDRGNlZneEdWcWRZYUVSeTFJMTg1UGtEaitZN2dBaFU3SUpvSjNYMWp5Ti9ybnF1d1R5QjNSRFF2dk5ENzJDNWhHRHdnOW5uUUxqZ25BNEMydXFYSTB0K0g5MjZYa3FZdEcwcC9iTGZHN0dxUVV2U29QQWZNcFpabVhhTUZyZldzNGRYTEh4Q3FtcU1DNU5xcUpuc0JtNmZ0Y3dnTkhLUG1RU2dBTGRiMnEyS1J5M2V4am90RUk4Q1pYaTRaVi9wYlpERGdBb2lVbmFsNHlmVE1QSHErcE1WNjNmT2JsQnlNdjczRSt5ZkwyMkw4bmdibHlQVzZ1WW01bVBRSmZqaTh2TXZzNnBNY1pFQWp3eUZ4NlA3RmEwVnNYWkUrdk1yaWhqV3JoeWJxZUl5VHJ2dURIdnl5MUhGTWtkdHlRbXVPcUhJWDRxN0hMOElFWkxtaU9yMW1XK0tSNWlYZFJGWFdIeXNiVTFyRWtjSFNCRU8yOVo1Ni9lRnhRRFdiRVQrOGN2YURwSWRDS0h3bys4dGNPcnNpRzhOdzcyWGxsWktnZGJEZUxFMDNraHNzdG0vaWZHSzJOcFJjTnRrYUx2R1RmUHozRTRSQ203OSs4UEs2RklpSERuTDQwL2dGRXBMQ3R4ekIwbDV6ZW1hQUJ4b1VLUStxd1N3cEJSa0pRSy9sUllvME1IbmdoeFR0eGl1dG9uMTdCNENEOGhBUkhSTk5vbEtlaEZKVjcvMUt1anFnQmFBTEJtN24zaWdOSW90ZEFodjN2NitTTVM0ZWN3L1A5aHBsNUozQzFSTkZnY1F5c0gwcXBQUWYrMmxzMm1BVENoYWZrNVVrTGxnOEdZN0c0NUtXV0d6QjZ2OFdvRWFoODBQUGhaakphamhYQ0ZQbVRPaVpMMzJZYUNVeVdYdmlZVTVmdFAvQUlEWjNiRENSNUZna2hCUU1tVk1vQXprc3Voc2o4ajdGL0MrZmprWUlFVWlTa1ZHODdRaTBwTWM1S2RyUzVCczJpbTMrdFE5anBaSGNTc3VqMGRHbkM2VUtla0c3SlVQRjVKQkN2MkwzTTdaMERqMlZHdmoreklXcHY2VXBhOFRXbnY2TlpLbG9HL3dla1pGd2dKQzdjVWczNld5N3B1R3NvaWRhNmpGTmZkM1dvS0pjM3VsY1VIMVA4RmNJU3RjYjJjcUdaWTZENkxhbzlreTNTWXJUdWNQaTN1ejFoRTJKaTdJRGtKRFdsZzY4ckNrWnNiYlUweFlSbzFKdFFFN1k3b3d4NHlzcXc1WXg1eFRpNVhzUW9lRFJ0QXU2UUR4MnBqYnJBN2k1TEhwTTBOQ1dyak41V2NxMldtSnF3VFdtSk9LanpHTkRMcEJGY2F5eEhwbUVoMStLdkdFR0hCQXFnRlRIV3p4ZE5OOW91SjJNZHdGRFNjbzFzZnpVREpIZkhpMGpCRk92YUJOQjJKR0dqcVJ0WGtIU3RrUkRQQzhxRjRlbHdjSFUyRjE2ckI5ZFJjY3ErdUxyczNhK0VHazcrYzk0MGw3NzNCZDliZG03WUMzVnRxc1VDWXpHcjhmUnJQbEQzVTc2eUYxM2hkVksvbzZWNlpUdklRNGVUSlZHMExJc05tMmcwWXlOMWRGb0s4S0IrSlgxUFFxdkhBWjlrOGFNUUJvSUV5QldYdHNGNitOdXdYUHVGdHhkZndUaHVJZTBDcGZScDFNY0xrNjZiNW1CYkdUaUxNNDFtM0VwWXhpRDNyellzZHpibmRBVTRjUkI4TEg1dzF6QkZ6M2k3R0o2OEJaams0bS9kMVh5dDlMNzVNRU91a3h4dW9HWFZUWHkxaHR4dUtDU2hBRzZLOWpWSnR4d0dwL1pERzVTc0JCZXdCTC96ZnZkSFYzZ2d1STIvV29HOXBrSjhVckxyYjFDc0NrTGlXYm56a2JsVUc3YkQrbXVXaXlnMXZvWSsrdTB2NU1VMFZPNW1YNk00OEpwWGRNd3djMjY3YWdKY0RLV2ZabENCUWpkajRZWE9qRitlRTk3ZFNxTW1wNURZSk5rNDRXRGd3Z0pvK0R1SW9GZGlvaW5XdUZOamdrdGtFU0FDeFVxd2VqaCsyUkt3Qk9GaGZWRjgyN0c2Q1B5UmNPcmhyQnRJVXp2em1sOGdBUzArMjlHMS9TWDc2MDVYcHdjYnRGcXBaZ0VsWlNVb3Q1M09PNnFXMzJaRVRuQ0FCdmt4RStWUmxrZkliZzRwWTV5eU9tQ1ZFenM2ODVDT0dhVGlhMFNUTTZLbFp0RktIb2p3WjFGcEprblBZMDJlV2djTUU4NmVzUUR6ck1HNFdQcVRBa2lLOFdSRmtjSnQ3c0lmZnNWN3djNHluRW96eUsxTlNibGoyams1Zm5DdG55RXhIeFN2NGZaRWkzRm44ZndEN09vbFhjeUQ2ZjliZHpDWE5QblBXREtqOEpxZFdnZnpYTExTZ1MwOUgyb0djM0N3cEJkQ3pCUVQ4Nk1Fc01QQWpaUzlhVzdZSmtPb0JmZ09nSHJCZEs2VTRFS2lnU0F0L1V6RGFJNkRmaXk3YVVKcVluNXNHbzhwMG1OdHNtMkxORlpCSWEvUDErYU9lSG5FZkJBdlZTV2VpWk5sVEE0SlRVQTNZUGcwQlZxenFWTytYb1VTaUw1K1h6ZXV6cHdmK3orZ0FPK3VwdXNIQ29MaTJWRmx3dU42NjNka2k0eFdQa0I2UG9SYSs5UlBjTnMxN0ZlTU9hcXhhYld1QVMva3hOeDMySE15Y3dhdDZOVEZQNmladTBwWXRqbnYyQm5ONnJwYXRiVDh1cWx1NmVXSDJkUno4bWNEd25FbWVteTg4TyszK1luSEZEME5lMHhVWDhkNEFhTTlPOGc0Y2E2eWpvWUpHc2YrUFpGeUNsSVNCQ05pTGcvdWs0SWF4WG5Wd2Y4alRZYlErUFVqd1JGOG5CdEd4bW5nNzdjRkhTa2F4VWk4SVEvMmFMUitHU05GMTdxdzlPeU9JUzRyY3UxTDAweXhrSTh0emlaQk0xbGMwQUw4bkpOUGJVK2FkbnNEeHBsOGZic0o5eG9TS25TSnplUUVXcTdIWTFjNTNPMkc0c2RFMFlTWm9tb0Qwam1oYVJCL1hzVEZLd3dxc2JCbG5NdTJ1MnNlVC9xbExld1d6azhWZzF0SjdnQjROOGMxaEdpaWFGUVZkQzQ4R08xWDByd29yZW9IcmVwSFRYV3EwbzdzMVlka0JueGJwRTJWZktveCtaOHhrWkFMNHR1QWFiOE1penZiVU1IWHRVNXV2dkI0cnRZcU1zRkxkNXBSQjJleHIzaTJqc3ZxSGp0M3czZDFiSVZOdExBZ3BGNlo1bkQrcml6ZzlacVF4M05uZ3FZbGdYVERXRUVMOENqRXRhVFBnVjRoR3V5UG5ya2lERUkzNWxCTUUrbHV2d2w0eGxSZzJxeldQRlZPc3c3aUJJdTJXcUYzNCsxeXZVZHJNS3FWRTdoQk91MGN2RVU5UzVaRjVUaGdrYlRJRDdHenFiRHhvVXM1eHBRei9ONklKSElVS1BobGpKUlI5RHgyaEhXemtwL0pEelZLb0Z5bEt3YTBqRWtxaE5UaVJWeTFFaTRSTGQvL0pjVytxYUNKb253Z2lmRnFGZEZQcW9lTnJXNTFiS1h2d0xMc2hpNGNhRXQvM0xBMWViSThCWisrQWxxSGJYZlI3SUJCWXdlaXdYRk02UjMraEt2M3A0blovMGIzOG52cTQ3M3FMUlo1UXdpYS9HbUZYeThxZVRqT1Nidlcvb245REE1N25ZK25kRERsbUFnQzQzTjcwYmtTNzA3S0JGc21rMlpjUlNZdkRUVUdyZkN5SFdYSUxDSEw3M3RuTnVNNjRiTmQ4d2wxSlg2Y0tQODdycTFOM1FHcG9CeVdtRHFvbEswMSsxYTNsVGh1Y2ZFVm5HeUw5NCtnOUsrc2NFTGE2TS9LQVBYL0pWcWtRYkpOelhISjFqTDk1eUJoRm51bEdXamVLYjBKejRKakNRenNES0lmY2x6Z1YzSHlsRVc2NVRyeldFNTdPRjlsYmFhbGthZzgwa0FLaHRMbWJFaTlITWN3NWVuSSthQlArTDBLR2h4dUd6OFZMakhVVktjTU5QOHRlaURFVmFFU2pLZXUxdU9pVDE2bEdVeE9XL2xVRDRGWm5DYld3V2RlcG1GbW1xTVJQZXFQL1d6a2FLdWhOUVFYaFhyNlBUazJrYzZEWGlhNGZxTmY3dGpPWjR5L0hiZG9jNGE2aldPTEdVaXlxb3lxNlNPR05NRmZvaFBaaWlrdjhoc3VNd29SRVUxZjJlMFBOVnV4d2Q5Wko2WisrRFVRNmZhWmh6bWFwTm1IdTQrNGpZQVJIZTY3N2NuSkZ5bnozZG5IRXBwekRNNFdaZExDb0F3NVMwN3hMUk5aRjNrOHVmT2lCTnB1M1FBYmRicDV2T1huZTd4REhybkhhQU5vNDdBMFFHT1pNc2t6cHB0bE5ObTIzYVYra0UxYisrR0VITGp5QnNqZzV5QzRrS21zVGZUZlZSNUluMGlaWjZYZHNBcVZhenhCSG9zUkZhVUdXeXlGUXJSRnFTNExuaEQwTk9vZkw5b2xiVTV6blRKK2R6VU1makZzbGhnQVpIZnNLVFhlUUVPR2RkRzRmZUdtbmYxMVltRVZsbFJnY3g2NmxNOHhmblJiUU9Eb3pJSkRHU1A0SW5lS3MvVDBMSkYvOEp1b2RjUDQ5K1hLMXMxd2lMQlNMbWl2am9aZnUzMCtzNFdRcE5iSzFCZmFMRVdqNXFqY3JxMnB0V0dBMWFGK1BjTUpzK3NJY1ZJVzRaMFpHaVBVdnJKRkRxUmVWaFZQYWFQUGh2V1lUdU1OeHRWenJTWmQvZExJZnczMC9mcjJ5Mkd3dEdtVXlEUnRscHdva01UNmN4RnF3SnFuOGZNZnI4c2lMdkhFdFJsTWRNbWt4cThPVGd2WGRNT0tETnlOVnNxMUdPYUpHV1JqRGJ0Vm9UcXoySFVwUGpvNWhHOGQ4VGNkVUNLajU3NW5MaG1lU2lnQnNBcHNyTEl6ZTJEVXRCOXpPVEdrRWp3THVWQ0o2OVpoaVg5MDczQmdXcllISU5jN0J2UndXK0R4RTRNbVF2b0JXMENFN3JJdGNCeFVtYlRJZGhaUjJVMW55UDhTMC9qWVNYQ2ZUbXZZcmdRMFlROXNla0ozOXpVTDNvQ0hSbklDdzQ1d3NjckIwN2szdHpFeUpBTDR6WHBQdFZpNUlWNXNPRmpJTkQ3MzZGcTBvV2lFcUNRL2RMYkJubEZ0cW8ybGd5NkhUdWUyVjlEYjZhNytQUXFLNWdhWnB5cm1pbmlvdEpWa3N1cUhaNzJWSXlpME9MRDBYbkdjT3NzMUQ5ZEJQNGhQRVdNZE1sU3lyall1TkZKSEFDU2JDM0QxcmdPbWJBK2k4cFpNRmRQYThxT2lwckpPenZNZVpORXF3R3A3TTVJaGxaT1hGVi85Ry85RE9lVzlacktVK3pBd1dHakhwS290TlN6Y3YxcmtibVRsNnJkT3p6WFUyejBzZnR4dERpN2ZxcmlyVUhuMXA3ZWxPakhhSGk3bXlmb3cyWmlpSWlYY0tab2h2WUF4NEFxYUJaSHhrZUtwK3RZMWtRUG41MC90Z01PNVR2VmE1MlpJR0xzUkRoTlR4dUFPQU9vb1k0a0NsdzBjRGNWMTVUYTlpMmhGam9NT3FTRE1sd0w4VnpiTlJzd1RpempSWU9xaXljZ2dIZjQrKzRvNHZnUGJxT3hkZWZ2N0ZZbXdZWFNDMEwrV2RDeGxVdGJFMXpEZGVnN1VXZnM3cE9KQ2RRak5FQmorZVdhZHdpcjhYYldyTGJsUmZQbkt3cmhpUDdzNjZmaktsK05CdlMvZ3lFQmJhMlVMYndTdGZUazk5emZ5ajR4MmV0RWJ5MkFKaWlDcHFGSWtoK2lMUUkrdllsNWxiVjUyTVZwbTRyS1NhenlFM1d4VVdyOTFMbXBwa3paQXpqT2drdHQxdEVJYUZ1UHJsVHhVN0FTM3RzRnlOakdZU3ZRRjR0K2ZNdkc1NjZWaUVqZ3Y2enVZU2o5Y3RUNkhFaDRLSU95djgyYlpkUDBYN1NNa3EyZFV1WGNTYURZZ2ZaTmRWeHZ1dHFzL0w2UFlrZWUzUVZXajdTRXBlanQ3OHc4V3pEcWFyQ1VCMHJzZ0NONDFCUzcrdUZwNGR6NzVLalFwWStBK2Jzd2NlbGQvRDRxZmhxUU9OOVUxRERMcUtuSVRpNExBK1VvMEhmWGRHNnBtdkZiZmtpckZIZlFXN291eDRpMHRydzVRQ3krMG9icEJDaS9sU0dTQkllQkZwN0VQRktNVXlDeUQybkVvMEMyUnpGeWQ5SEc4WWVQaFpTUlRIZW0zMmgrd21GWEJreUdGclVJVWtIRGt5dFdKODBxQWd2dll2ZitJWkZpM0dZb0dCNDNuS0NLU0E0ZGJlV3pVZmZGSzVjekxFVlRsWEF1T3BLdHZYQ0pOSU1UV0hwbXR6eVJXME80SVBxS3hDL3hJRkZ6aWNaZ0VtVHNlQzlDUkxnYjQxczMvWitDNm9xN1I1NXhzSE5kTWN0M05OVkVuY0V6V1BmSTdoV0ZwYjRGMjgxcDd6ekhIM1FIcytTSmJadEJBRjZxVjJTeGVESE9SVTJIZjlTL1lEMnpYODArSlhiOU4zQmNyQkhOY0pETFh4UjZ5REkxN1FJbjV1emhyNE9oK1JIOHVTRUtWTHZNWksvb3U3K1poeGlKUjJiUzljR3Y3L2tJZ0ZtVEpNVHpHWUl0RjhjbnBBZkp6Wno0Tk1WMytqLzZJSlF6blZoRy9PNHRBZDBjaElieVZhVzhlQjEvK2Y2YkE5VE51N0lyZnBRWm54UzZRNVdIRGJ4emNjaU9MeDliVGFYTDFtVVJOK25LVWh5OGlydmoxOTZJQy9VcHlkRjZZU3laZWV2ZmI0aHZyeGlYb3RvTTQrNVY0bnY5SEtjN3VVNVk4cnBwV3lQdE9UU2FlRkxjTzQ0TzAwb3NYQkJrVW5SRytQUzBSK3d4UTdMTnhvUk9PVUhhRE9hZDNyK3dQY2cxM215T1VOYk9CUGRJclh4Szl5dHNGeDNpWTFGeURSMnJKenR6M1NhaGZIRmZ4dmJHMDdyTGlEcHN6RTBQUndtdERrc0lJYzVHYU5DcUhkdjU5OGEyWDZXNStMa0VQVnA3QjhMV245aFphU2ZIL1NJZEthdUkxKzY1V2R4L1dKeStyVFBSeEJaQjZDNC9FdlBSSUFQTFhlNGNSb0dsU3FhSi9pSlY1NEpucmVmaGhwUnY2Z0xkd29MVEJ2ZDBsUnc2TnYzUEZoMjFDdWtKZjBIcnZnODBGak5icE9TbmJuWVoyT2NrenVpVlZydEkxb3Q3UWlBdEl4aSsrUjNpY3pQYWxHNTlqTG5zeFFZR29DV3pZYTJuZUZFdkVBWUdQYmJaU2J2UHN3dVNBdWpidEZkalU5QnN0MDAxR0QwZE5iejN1b1ZPRkVDaVNvOGw5RGEzdDJCOWR4WDhKOHBaSXpKRDZ4WVJJaGxVcnlkVzYyYXVEMEtHZ1pCQldRV2ExRFVPbExmQ2grNmhzZkhqNnFyKzk1MGQraEEyYldYQ0toaWdQeDhZL1pER2hBTUY4NzBPQ2l6eUJXR29LU0dHaDRFUFJQRnFSU3FZZHVCOTdsWnBTQ2F6RENEOXBRRkRnaVhqR2E2RzBTYW1LU3F3RGtzZHgxUWJFMWp1T21scG5INThFNWFLOVFhaDZGdVdRWS9jNHpsSklMemZFc0ZJTzN1U2hNVUJPTWhVM01QdDhoMS9MQVBsRlpkaWN1dlFMdzdJekdORG9rc0dMREFPVXMwbWlMcTZWSGZGT2JGWkRGY3NxK0ZjaUNFRmY2ancveDFsSlV6UGUvVDBheUtXTmZxL0IxNWxYVG5mZzFRcXNOSkxtOHhQcThKdWE0akZIMnp6SGJCaEI0dGNEMUtKMjZnU0d1MEVVMDRndFRtVERWL0dCOWRIR0hzRVZUQlpoUE5MZnI1dGQvME44cmUyUmtQMDF4TGc1N2h2T1hBZXBrclpWRDJIUlcxdW94ZlAxSG5NN09ISUlKN1o1VWc1Rmw2aEs5WHpSTVd0VnBscmc3b0gwMGQ5cHQyQjZQSkhGN0tVeVZ6bFovYTRqNzlKZ3dhVkJRVmhkd1lOdDk0bFovZFQxSm02ajFncVhjK0p5NHA0aDZhWndFOFcva1lxbnBEMDAwcFZBMzFHeVJ6VDJMTjYzQS95TWQrWDd3OFBjUXJNYzhkTjFXenBPNWhMUGpENXJBbTJhSHlQUjZEWlM1Z1F3b1hmeVd6UnRnSDBoKzMzWmNOenlkLzhidWh0S014L3FZVlVMVUFIOTZIbEZTK0xiSWdnRlVXYk1SQkxLbk0xbGhGSVQ2TUEvSmVlVE5tU0U4ai9DTXQ2QlRpV3U0MEt0b1YrZUg5d2hMcE5Td2ZZWEo1dVF4NXNFWVp5cGVRWFBqR2dYb2NORnU1NVU1R1ZLTnJUcTJVQXVLNTYrMUhKRGEraHptY2tCWWFsY1Z3ckJjY3NQL2JMM2pleXU1MmYxUTNMd1l0dElWSEhJa0VXSzFLcnE2blpxVndFMDVPNFcyS1pJNnQrTSt0dG5CUW1kWksvb3kvektNakV2L3RpNFVEUzlqUXBuakRJb3FjV1MvRHAvMXBlUDFsSnhna2p2RVVTSTVidXpTeEYwRDExMGY5NnB6QzV3WUVkVjJJM3ZOK2I1dTR3UTNjUDRta1dNd2ZCSy8yYzhUZnlNQ0pvM21QemQ0Y0pibm1xUkNwV010R0krQ25jNi9CZ3lnNjdmVHZDRUNmNW5KL01xMXMxbTJxNXIrQjQ2QVI3TmRiWGM3MlpJdEp3cmVyL2JxYnpjbHp3cGVzSUFVMGlLRzFWeVBDMmZxYjZKSDd3SC9GdzdJaVNxU3YydThiaHpyWExoUGpyWDluQW56MUxLbjNEL0Q0Z2ViWTVwMFdWdEE4RDJhNC9mNWdscUZ5RkdUTms3T01BY1l1WHVsYWcrVDJzS1JvQ0F3ekk0RU8xR1BoZnUwNEMyS2xEanN5MTkyVHRQVnhmd0Q3ZlJWcXc4ZkhZWjJNWm9qcjFjL1FhRFhCaDROOHpoMitDL2dTUW9MYWdJTnVTTjVBWkRiVmdxS244dkxxdzNBcFRUTDdsMGM5LzJDYUppV2pmbGNEdmNiZ2VIVTA2VkFqWER3SXV2T0RVTFJUZHNyY1cxWExubjBXdmRpUDVON1Q5QjhVR1BGd3o0MG0xTWk0WjBXMnp3K1RMckp5NHBpTDZObGhGZ2hBZ21ob0pFU056c25DelpTdXljaG1GNlY2ekplOUNGK2FXMzM1S1lHZHFxVGdJMHJlWkoycXhUMXdWRHBoYStnbnlNd3I0TU9XR2FZM0JvdUlZUXFDYkp4RG9CSjJ0cjFVSW9hMnFEZUpaSU9kL3hjRHRhdDh5VEU4MkxQUXJ2Ykg0TGxOQWRWMHgvdWU2SVRMTlJWMzA0TFAwME5UYzFpck81NVFudk9XdnRXVWdnTE9rdWRPMDI3MGMzRjdBTERXR2RUMTFCZUJyTHJsL0lTVTE1TjNnUFVxOWNWaWRTNkhxK3NhZFVxdjl5VWxnejVOZ09KSVZQQ1hnaE5GaVIxa2ZYckl4TnZ5UnJJRU10Q3ZyY3JnVE92TDJsZW1VTGJkVERwc09EckkvSmZzS2ZKcEdhY1hFSStyMTlDaW5mYldxa0h5aXVMVFNsek0zN3dwQWpHUnFNWkR0Z0NETGVBN1JBUUI0eEUzTVN5c1FrU0wzeDVjaFp5YkFhOWRWN2IxZGtwNGZYdktyQW5FQ2JJb3Z0T3dpNEtRV1p0eG5xYVMvVzFYUkJPZUFrY3VkUDRNem9MRjNaK3lkNjdFSk1jSllBN1pMcG91M2NsZWZtQUVTMndtVnQzNDlEM3UrTEI4VnJUUXNqajRzUmVMRkVtVTE4V2tXcjhmOUJNMG5IR1A4eE9UK05mYmkwcGxwZUpCRXZkWkltYmZucjhyMzMrZDA2UHdMQXZncmJHWXVjWTNLejlUYnp3Yk9USTlib2w4RU9HbXc2NFlEd2tWczFucnZ5U0xiZ0FNdHFINUpQWXlteEx6TS9namFHczJ1d1N5NE1aaXFnUE5lczgxWGJWeWVSdlBKU3RqMVNPM21OWDlaNXJhUEFCR2hLWmJ3RlhFcTA2VnJQTnNmRVM0cDczZmhyZ203SDdtOXlXL2h4d0FWeWx6TGJBbTR3Qzg5UUxub1VJVnpoYlp3Qk1Ra1RIalNLZ1JWUEtyblNVUklNeFAyYnkrcHdtY0tXVFF0dWF4cDlOc3NiWmFMMFd5TitIdk1lZHduL1p3bXpVWUt5ZGJiUG5ZeEVTTjJCWXZUald4TWtCUDhnQ3FSVFFTdXdUbkU5WUZpOGJFcFEzRElZenJZR3lCLzBNOHN4UENKYTB6a3hud01wWXhtNjFKazVLcWF2THF4YkNrbjhHQjJlNkhJcngyZVc3V2hoZ2tlcEJ6VGlySlM5S2VLWWY3UTJTckZTZFh6aW5rVEM3VGdQdkxEL1NGUGRseGNrMkxURnFoZkVCNGVxOTJQdncxRW83dzl2NHF2TUZxeDY1TktMSHV3Z2ZUUDBmdlRtMCtHYUl1czlETEwwQmpKd2R6TTB0cUQwMGtsUE5CempHcG9DaTFRd0xka2xVWHRpRG8yM3dPaU9HNUo3eHFxbzk3anRma1kyUjFhaVRkWjd0WWhLYVlQQXlqbnVETmtRRmtFdG1IUWluSmJrNnBDS0ExTTM0SnMyenBHSzJEcnVnWEFkaVdlYXNRRDZnVHpYRGRQWFR3NzJnRjF2Uk50bWl1YUZkWlFkTjBPYy9zQ1NYNFUvRm5pUFBrd3hOenhlYmJodWhXeWkxSmRObC9lNzJNY3h2YTRqcE5qNVZZRkpRSDdPWkV1VXZ2aUR4akdLQzZlMkJpOVh0bHNaalkxSUtxMFNDM0ZwaUJhTjNnSnFPT1IrUlJGYmNROERHL3VVSitheGpyTTczVXRvOWFGRTJyNWc1Nkt4MStDNDRuTVY2cWU3ZzRNTWJwckp4TDR1Q24xdExGa2czUGpaQnBCNnlBV3FqWDByelBoMWQxSk9PQ0tYb3c0SVU0aUlRL00zM211WEhvejhFVndld01GeUhOVEF0NTRhd2xVejZ4R0MwNjBHUlhiSDEzT2puQ3VvbnVOYXRDVzduSlhxbUFlalczaWs4TTNjOUpiK3dlb1QwSklSMUxrQ3MzYlJ4eXBGSVZXNTJVajQ3clBBalpDaFVJaitMWUhaaDRSWkRaZFJDTmNLN25iVlp4NzgvbUM5QWI1OXhXaExxOVZicWV0VHFFdnEwclBXTVJneTR2QXJlN1I4Y2s2QkRSK0owTlQydnkySDNMYmZNWVd4Y212MlRYUTRDQ3I0YWdxRU9FMVBGaW8vQ1pqSjJpWkF0YTBvVE81UFJ5RTk1SnJ0UENZdUg5QlBEaWJXeG03WDEvOG5wTHhWZC9WM2JCamw3VEN2R2VIWDFtaWhKNndGOXl5bSttcU92MGlMcVM2OTM1WFpMYzJ3Ui9VWWExM1dSZHBoVm93OUh1M2g3Y1hubFVtNXB2bVY0NHRMNnN3OHR6endWNm4yZlEvTEY5bnovUDhKSnZYeEdCdzlqWk1HeGF3M2IxZUtHb1JkZTZIOEhPUmxlaFZVaEsrNHY4VnBZbXJYMXlvZ2lONGJocDgrZ2VkeVlXY1dZMGVzS2JQc2JpeDdUM2FyYy92SzhFZEZPK1FPZGRHMGxra2lQMzFFVk5Oek9oMnBPQUttNkV5QmhzLzVnc0k3c0hkVFIxY0l0SkdjN2pkUXVWR0g2aCtPRGJFdFZsWWphSUFhSDNLc0FnODE3cTlSVU5zdzhMSmxaMzY2VTFGRFBYcm8vWGJrbHZnYTF1RFZqb2RjVnBhUTlsYnlPem1MeDlLcmlaQnh4dTk3U2ptMmFiUGdHdjlJSm1PalUyOWdxTEpmbTVtaENpV3FmU2NPSldyVVE3WnUycmxndTJkc3l3Tk9TSVR3SHRYTVh0a1BYS1pJNEpBcU5veVJCUVdqVjBPWVFtVFNwemg0Sys2d0NFMjBZSFlRZUlrYWdVWE5oV2g3bG1wcUFDWmc4VUlneTYxa2UwYzROUk5JTGR1c1MwS1hrYnVvR21LUWs2bUZRUDkvUy84K1YxQmlmOXZwVVd4aktMODYyenNmR08vL2VKbERpTitEVkNxMmtaemRiUHZOTmxYRndxdmVxdnRtM21RQUxxSXpXMnR2bHNZSWEwVW5oUlpiemp4aXNMUm9sOHhzVnBUWUZsc25GbFhmQ2VsdUtMQ2tVb2lOSFM0MDdsTlliN1Z1L0tBbVRyWXZyNnNQSVhRQ0hpK0NZUVRjeU1aUXpHdW53QllEVGNNc1FheEVFSC9WM1R5cTZsUmovakhEQU5KMk5yWnp6QitzWVo3RzFNcnRJUmp0MXNRZmY3c0hxL1hrMEp1SGNUbW4yLzVVMTdCRktrdGV0ZjJ5Y1EwbHNOME0vWEJxQVB4and5OXBId2VMblJCN1hKYWJOY2lSeGRvREFiSVhSdG5Yd0VYSkpjZk1uSVNJaGt2cGZXWW45bzVpTEhWVXQ0czlqcEJJNXYwMng0VmJ2RTQxcHFPY3RaMUZhbGptc2VSLzI2cmxBbmpwNTNxNXlCaDFrQVlBYXNFL3ZsMzNjbHIycnNDSzZ6Y1F5ZmgvTE0vVmZoaVQ5UzViemV4Q2ZodUNBNDU1Mk1OZmZpVXdXOWpvOTdhcEZjU1QrdllGbGswRW9Gc0liSmp2RUpid21YU3NRWG95RXJoZzBWNTh2Y2pFUTRWL1JiMkhRR1AwNjluMlV3ZHc4TGpnSE5iUjlDbGdaY0VUdDNEK2RHN3RIRHRLLzFsaU5xeW8zdjlIU1ZxMkRnU0JTU0xwcGQrQnduQS9WczE4RWxmNUZleDVrYVNDMGF5anI1RDJiYjlzWTdUZm56bjlWSGY2WHkvU2REcnVCUjN2aENYZUU0NU1FeThDY1lGZ1NhRnhqNXE4UGZDSzlYcGFUUmNuQnd6M3pQNENGUnZTTys0ZEoyR054SDFaenh1SGNPNEhYL2ZpQnhtMHVldFh1d2sxRDlPamhnYjIwK05KaVpwbFRYeXJ6NTg4UTh2akJvaTFiOFFSZCtobUliZTkyeUJhaHhtbC96bklmSDA1VzVFZ1ZKWERPYjZUUTdROUliMnpmUWlNZmZVQmRMelBtL0dKYVVzQmsyUVFoQU41RGpKUThmWFV3R3BoUGhiUkdLVzIwYlJHL2krdGE1YWN5ZnBJZUJWRXdPMDcrRVZDc29pMGRuMVp1Rng5Z0lqMTlneWdUTEpsOUM2cGVHMlJuc1pzKzY1OHJ6Vm1nQ2dTRmNTZjBlTlgyblAyR1FOV3kzb0owbW1YZTBzS1NJYXZobnNrUmtwd3VzRkJDV2hZbGREd05RSWE3dlV3NWg1THVvZVU2dVQvT1VVMzFRQXZFYXI0bGIvaFdXVnYxcnlOK1pmSWVsR2lXV1dxZWE0dmVTV1lXUDhXL0U0YzJFS0I1Y0E4aHQ1WHFIM2NrQ2hEdnFOcEQ2S1Y3bC8zZm10STlEL0dCbDF4SVczMUNFSzZGdmhPSDg5UTYvRFNndVJ6cHczN2RXM1JqODZpYTdKakF6S1cweVA4SUQ0VGFXR3J4REhTWWd2eVZCMkhsT2ljb1NCNUFqYkh0amk3b3M5cU9MWUpTRFB3dG45cXdKTllaNzVDMnNSSHZzNUY4RGp4YnJZNHdra0JsWGNsMm5BS2gxOGJaQ1RyWDRMQ2xWUXRQK3JkSVlhQnMrd0tsSXFITHNGVll3TUV2TDJ5M1lYU0g0dndUcm1QQzRCMWNFR1NTSnlnV2RxeEZQbUo3enY3TTUvS0R5S3dlZ1ljOTJxYUl6RWlMekx2dXV1RTZCOFBqN3dDWlo0UUhyUUVDcHNIQTVQa29Va3p1ek9SODQxdjNkR0pVRXowQllxYVN1VFJQSk1WTXh3Wmc3enZpNG5SWlIvU05RMWRncFN3RjQ1QkdxU2pWekQ5dzVKT0pxSkZGTzg2dGVxMnFBUmMycUJIbXEydit6M1AxeVVQSG9rNTdNL0IraFNtMXkwby9OS0ZQa05iYlBrRVkyT05Odjd0SjI0KzhZZktZQjJ1S1JBU2o2ejBCQ3JOWWwrOFhPeS9tZzBKUWNGWGhUZm9NeU13QVA1RUtSNU81QVBxejVCVXRNbmRjTG1hN2sraExHRHM5Wm1jZWtFVGFqdkRMa3E5K2FkTHIzZ3JxeEY4MWNzcDlpMkQ5R2JlNW94QXdqREc5dXpsUmwyNkl3dXpYM28yclRKTUQ2MCtBK2JsTWtUckxpcGRMeVp3NzM5SjBtcjV6R2NzUVNsM0lwNFdueFlwdVdtSHNDaWVKekJPQjNob211MjZjQzdtK1lqQmxKblA3SVoyUmM2bTZSbFZTMzdYNTJBWi8wUmdZd1RHWlRBaEFzLy9SQ0xGb3VQQ2F1dUw3WXpocUZ6Y2JpQVA5VVNPYW4vZERpQmZNcEZ5RmxQSnh3aXJCWVppbnhLOERTMGp5cFNvRnZ2dVFOTWo2czR5eUxjSElZcEd1Z0Z2ZGlJcm9GZGExM09KZ0Z0WGVobFp6QjduS2pmbmF6RThJdFIvemNDNU9sMWpraVR2Z1Z1YzJPK0o3dlFkekFCYTIwdVh4M1piYU5LWXpLREVjejNhWWpTODNuVkhYUzhXb2lHam0rSEszNDAvZnVuVzNaKzFTNE9rV0lLbm1EczVZQ2ZpYWl5SDFqVm1POUVOejB5SXdPRldkdVd6V0RDazhjNENkVTdyS2o5WDJuYitqQWdKRHJaanlHbmY0MFdBSVNEdG1DbE5GeU9ZN09mOGc1TFozNDdhU3FFZDgzREcwZ1g4QmM3WnFDYUF3RlVvWGpFSm5ndEhoNk04UmI3MUlvaWwyU0dqcWxGMnV5dXVrbEprajBqS0FBdHJVcHE4cUJveG9WUVJ2USsyZ3pFWjlESUNPZXVGZkhrWXNkK1k2K3F4d2RVNXNXcVlta2V4LzN5VVhoc2trbEpYM0xjY0RFakZoZXRIV0tyL1pXc2Njam1ZK3c1NlBPZEdGdUhzYkdTZWN5TC9QL3ZMMFVMMWpRVFgvaCtXM3k2cnJqejRHNDlFblZ0SWdEUkJza1dXd2NOaTgzY05CVzVYaFhtR2ltTVh5WStkb010NlFmcFZCQjNNVnN0aE9CZlE0NmliV0p3WDV1WjJCcEJEZXlJZzBPWWVQeU8rY01Ka1dLdWlHWWlLMW41WFQwblQ4SW0ydGhjeUV1VjZjN2NYVXNteEpSWFg3YXppSGV5aDBGOW9KRmJOUExVZTV5bkw3bHRqV0RLMzJqSDZ5bmtGKzBPbmdsMnVQWURSbDZ5Z3BWTkFkNitKMTl0MEovTE1pNG1PMTloZHc2cTkwazBxU3BaKy9TeGxNMFE5VzY1MTJtRlhZRUZnWUNxYlRzSy8wYlBxa0hCQlBtVSs4ckRjWllaVlZiY2dHWjFyZGZId2FxYXd3V0VmeU81SUw0WVNtNXZLVmtpUXI3WnJUZmRaNTFYTndFSDlxdDZ0cEZhYzFOYjZUcHlJV1M4dXJuSDNNMzNFNHdoeWxzM0g5dVhhbkJVczJLaGhZYjFjeHdnZnIvWG8yR2swdWgwSGQyNkx1cWlYVHREcTM1LzVBRlI5OE1EVGFrUFVpVXhBZjZVaU5IVU16Si80WVpZOE1PS0tKMnY3Witqa3FDaFBqM2ZCSzdMUjRLYWNVdGFCZkhJSjdSYit5NmUrQzVKVHdvZkI1eVhlbkNSU01pTzZ2ek1DNVFIa3NXZWxYa09PTmQyeFFmVExXVHNxRkpGWFpLeDE2QXFocktWcml5Yyt2U2lyK0dhN1R3NXVMaGlVZDZqT3ZNeXBhK01CSWM5M0tvRkQyK2RpVlF3ZmFmVFRZMXcvUk82dTBiWitrTHpPSnFTTktUODhPcHd5VmpnWlcwVGVRYUNqM042Q2NueTBqUk1EcVhRWGxXU0l3SkNRS0NjUWFpMnlNM3ZoNTdObk1KSDQzMjJ3RlV5eWIzVCtKaTlZNWJxUWh4cGRUK1YxWGh2ekoxU0FoNmRzdXFLL3VHUGRSdVRaMGkxL3pHT3V1ZE1wdXFJSFBGaEV2anpJbHNUYkx0ZTJqOFk1VkgyR1hKRlpYTjhWWkxCbTA2OHBhRjVINzNTSHd3V1VQUEw1SVJ1aWZrSmhyWjJRRksybTlzRlllZ1FSMW5yR2dic2RUNllldE5hQ2VWZUdTMWN3MjMrOFhYMUR2SXVsTkFaVExnVmRybWRmQnp1azBKN1VURUtkaEk1azhFWXViVFdvV1V3dXg1WVEzejRkQzhkVDczbHE4anFwOWNNU2lFTzgrN2oxNGFFelpiN2xEZVkweXBLR2xqcG1pSmRuS0Y5bUllSW9MS215UHZBVnBDSFlZbE5jZWlrUkl0dTJZYnc1bXpVU0tjMm40b01GMzQ5N2JyWlI2L1NOR0tNT0IxSVM5RlA1VS9iNWJRNVJrOWp4bVdDODh4TnF3VHVlVmZXYS9TdWxnWm0yaW5CMUEzMjNVYzZUanB1UTZocnA2YzludGpkVEREdkZ1WXJCUjR5NlRuWkY4RVhuTE4rUk11YTdrWFhIaGpIbVVkU2N5eW13cFZ5bjRzUlFkNjJwSXRIdFRpL1B3M1VlUjdYWWNqdzh5SWdBekFlbVlITWh3d3FQSlh5MnI1MmVpbmpxWmZQNklPVVRmaENTQkxzeHNVZzdTdVJnTW8yaGR4RmhCR0xxbFBrTHgvQk9oME5UUjNWbC92STZzUGNwQ1V4VDFMTktYTUpTak9DNStFQWdQNk1BT1llbUlxeW1BazUxTlVJRlptbTdRaS9kdHh4Z3MyVThFZ1Q2d1YxMWp2Ymw3S0xXRGFYblI0OUgwenJoQ1YrNWFFekJ1UVo5M1VqdHpnQ3J6QVpvSVJMcHpKZzJpUVZ5cUM3Mkw3VDVsYndvOTRXRjQrQ1R4YTZZOStGcmJGVzBDbUVPTDF2RnhXVXNXR2JTanRHL013MXV3ckU1TUp2eTNhcUZmZ3RhcG9ydXplRnZZSkJoVTZIT2F4RUw2UlAvQjVObFliUXQ4RVIxU0Z0MTNIdmVVQkp4SUlzYnJlTDBkNTUzYTZYck1ydmI2YkQxcUdlWVN3Z2J1UHQ3N1hsb3l4Tm1vWGFucFZTVW1RV2xFa1hsb1dZVGQyV3ZsSGJDTUYxbWdwT3o2SDRBemw0WDRIa1BzR2trOG8yM25zOURKTHZNQkZ4dFNIQ1V5d1E0N3hPTGxkejJEam4xSkdGNjRKbFZwOHk1dHNlQkJXNXg0cE53OSsrWGVYYjRUU0psMXZPY3FKSWllUTJMS0dHZjNqZXVrbmZkR2wzQldBa1pHLzFYaTVHeEdKc1RZZnFGVGVIRzFsNDI3UklYWXNCWEZac2Q0aEJpd1F3RTZOQ2NqajdYY3FEK2pWNkZZNnA2WDJtYmRJdGRBcVk0MEJRcjhkUVQrMU02RFFNU3lnY3pZVEo3SVVwN1pUaXBPNklkQjdXcHRnUFFmazgxYWpINW4waGRUdXVYZ01pbVY3Z2c0Z1FkTWtLQWpDUTF0L1lLbFNCSjlUN1BzWjBmN0oyOFVlV2pMN21hSXdWdWVVUm4xWHlIdW9nYWJHdis5SVNEQnFnaldKQWJ2ZXJKemo4cjh3d014OWs2RkQwWmtaRW82bkJoNFpKUldDVUcydTJYOXFBN2RJeHQ5Mm5UWkwrZTdNd05sRnRuME4yd0U1dmJsNktDTzJFVXMzV2FLSWlHaW5TQ2Roa3k1S0RYdG12VDNRTHZDczM0dDFyM0NOVk15alNGRDE5MVBaQUdJaTBYdUhsTUd3enFTTmtZRjRTM0NNRVRVTjM1Z2xjdVdwU0pkREVzcXRUM2ROcUJnbjgrT3dFWWM2OW5qSTZPbG95N2ZhSkV0VWtWcEZrQnp0S1BLZUFhZU56OEdrei9hZXpEL3hJYmFPK0dKajZxc2g0cGUvVDJicDBtb3VVSUg3ZlhDa0dOdjZ6eGdsMFBaRlVsRHN3YWlGUytUc09aQzRhbWt3S2FITHBjQncxeC9Ncmg2ODNQc2VzQ3Y1TWw5ZFFZRHVwamJpbDZCOGRhcUJLWGI3SmVqRjZOS1prbjVoem82cmVISW14Umd5akRNVUw2QmFyNmtaZHI3K1ZZVVl6WngxZk5ZdUZybGl2VWp4dWc4K2g5eUtBVWNyUllYMXl3VzBpbzZMQjdteFJSZy8wZjdubnNjQzJkM0tFdnVFRXA4dXhOd2g2d2N1K0ZlM0wwS1E5cXNKUU82NElrUVFxU1VBTHdsT3hMdGVUeVVzY0VjdTUycEF4WndjZ0RrNVpyVG9WNHJ6TTNMVEo3aXE4Znd5LzZBTVNsSGtLaDhCYkRVM3k4bVZ1czZjRTRSQ3BzZFZZVG4vQUR0ZFhzbEo1TDVvT0R1VjFSdGliVDhSYzQ2YXZWbVBHQmgxRzVjckFlbTRqc3FJbnZ1eEt3bU56TTJSQ3VDbmxPK0JqUGRZai9VNndIek5KakRKelRHbUhtV25uTlZySkJxOXhkd3k5Q0NBRjlkazVKbFRlWkZwNmoraTB1T1RVbDJqdmJ2RzdYSE40cVhsRHNFRkh4bjY3VXlOZUYzUVFUWnU3L0g3WWloSUJzaE5wdHI5Rm81UFV3cTZJV0E5dmgwWTNSOTVOMDNadUxWdFhrTnZEditPd0xkTWc2NGp2NUtjRWxhVFdvK2tkVU1IWkd6NlkyRmxScDVWWFVqZHBhSmY5RFB5QVJxN3dNZzJBODVNRHNVZ2JtdmNHRk1tQkRQOWZKSGhqcUI3VkpqTy9NQ1FPTlBlOGhsQnRYL0lKcFRXOGhCRFJyOHlBRUtqSUcxZm9OT3JLZm5MYTFaRHltd3lMWDdwVlV4V0RaVE42RytweGRXUHlVK2dkTkN1aEpxbkppOG8yYXVrTk1lbUVPMVQxNGtiL1VRcGNrUmkxbFd1anNvaUNXcVA5TVc0amUwblpWNnhoZ0JlNkJTanU0ZW51c0g5Q1FZWlhLZ0JUVVVQZmM0TWRSdDlmOWRqaWdxVDdWUjBKR3hXVWNLcUYxZG9mL2VtUCtaZ21ibzVrUE5id29SZnpQcUIrbzczZERiU3JxTDJRU2ZwMFBFaE1EMkxmVzdOOFlIT283a2x1blZ5VlZHYzdLZnE4N2h4MlZBb1JpNW5qd3VCWE1KQkZoL0lydlh0T2pkUklWTThick9FSTVYNnI4S2lPQTRWK3NjUFA3d0toNHBPalE0YURTbWRDYUtHeUNnM2xsWm9aVVM5eUp3NHhkeWxoZXA0THNPL3p6cGpkVlJuK0lIbGR4R0JRdzB4MXpTMGdVeHVyY1pjTXFMMW54WXlYK3BaWDdkZmE0clg0c3IzZ0tTS1VTRHNoK0NxSlNxbHN4bGRjZmhTSlJNWUJjdUtZa3BVeThkbm9KZERLVDV1QXNLV0lmaEdhdnVxTXhGckYyd25ySUl0TzRDL1ZPMEtQSUpWRkI1VE1ITmlrQWFXZmd5bWxXaFVMd3JERXIra3g3YXhaZ1pCTVdzcHN5bUh2ejRnRHYvZkZJTGgzTGE0TlhwZ04xZ1dGMExwSWVXVWpvMElOVXJMTHRUbVpMU2wyanpXRUdUR0xTTVpJSjlPUW9FcXFmTjlab21tRjFQQVdFUGV2WDVIKzFiSTIzV3hacXNDY2Y3UXpTSENNZmdpNGZvcG5tRGIrd3NxVTJOT1pCdS9lUGdXMWxlTm1mYWRnK3FwK3VKUlo3WjQ0blpnRWhpQm12TjYzd1FiaE9wbGQzZHpTbGxCZDlkeFlUNlVHRktrbmNLR2hBWEJOVEZCWlJFcEhieWdRaWR5bGF2d05NaWRBdHF6U3JiNWJLRit3UG5YNVZ0Y2E0cGkrMksyZmRlbWpBUjR0dEM5K0V4K3A0aDFSV2FEc2tmbyt0YVFpOC9RK1pPbCtGdU5IbkRmMjlLM09iRlpqaTNQeEM1a3B0RnVkcytOWEg1WTU4bnJJN0JTMnFaeGR0M2NoR3FCcW93NXo4MDc4VDFHclpRbVl1VXd1NFU1Q1BrbVF2Vnk1UGtmY1NUOVJLaWZEK08wTGl2NzBTZW9pSXpJSE5qYmFvNWlwUlAvUnNGZjVQMzk1M2cxY3BWNStmMlRjQnlJcUFZc3RDM2hpdVFmbkd5TElRdHFiYXIzQ3ZYRC8rbXJEQnduZVg3UmtCTmt3L0IzejM1djJNc1E0TDNkaHpHQ0NRM1ZpeG1hM0VvWXk3dmVZdmdNRGVqNXRBdkUzMXhyclBKTG9kUlJQYUZoWVFzWUVqUml6Q3N6U3BaSkpQcFlQb29uRjFmUE54eWdBZURQeU4rQlY3bFh6dE1YVy92WW5DMHcveGhvZ3NlL3UwVE51QkdONXgwUytRbHRtcEtyUFVyWUNoZWFpbGw4TzlEMW1BWjUzTlcwa25va1ZQaUg2N24raXdIYnN1T1g3d0xTN3ZLNTVNUDdxNytUVXQ0V1JOUGpxUmI1bk05WlI5NzlYdlFjcjF4eGNyblR0YmpKTzRiRGYyRTVuZzBveGFPcmQ2VzlyQzJvOEQyd1BLMXFYRHU2UGN1dVhBd0UxeU5JUzVVU0pvSjlqSTZYVG5LSmNqVnNZMVpTK2UrTVEvNGpvdHNkdkFlT3FvUWYxUmFEa3ZnTndDUTc0RUZzY21XaC9SK1g4NWJnR1I2WitocWpGTGNRaUh0YklvRlZRdEt0ay9ESCszV0J3dEE5QWlxTC9sK09mbHRSZ0Y2SGdxU09tVjVwOG1rNkxuV2kvWWl2NUFoZ0dxSHM4ZmlhcXVuNmFGU0lINzI4dzRDczlFL0ZiK1R1Qzl1ME5Ldk91WnU3aFZtSk9lRFB6eDgzZEpnd3pTZXdsaFVnVitHLzNvMlQvRU1UcVZzNVZZK2RHVmN3cXFnZlRqMFNOUVZpZGpqYnltQUY0TjhjNWNHb2J1ck92WjArUnZveGE0RURLdCtBNEh4dXBWbGw0S1dwYndkMmdWR3Y0R3l6OGRBZnQvUVNOYWgvSE5zV29UelFrVDVQVWVQNzEyaTkxa2I1VDkrV2YvSWNGV0JsUFhUTFViU2FTU1NPZVB6YjZOQ1BxWFUzWEZPRXBjSnNlNzlaOVFPS1BYbU9kcm02eEc2cUx1TnZJeU1pVnJYRkFNOUdWbTM3VjJpczFXdytXNStIWlErc1pXM2FERmpDT0o2ZUpBNXRoTGg4bmJUZC9JRzJDWE9rTXltakhabmlvK09qMW9hVGRPNEorZGR5Rks2MCtwQm5ESFJpWExNcjlyWVE0OUVGN1J4Y1NwWURaTDFqWTBxdWkzc3YxUVV3WnlKREhGYlB1N1BpK1BhSnN5NDRJdEN2SDdsYlJnVlpBWWRyeC9PcGl0L05tQzlLL0xpQmpvekxCSnZpV0lRYmFxQUpRNWl0KzJjdVQrc3hVQjYyWXphQW10YVNpZFBmZ1c5eHQrZmJqWUhzRnhaMG50eGYzbjd5a283bUhmZmFKMm9WRUZxckRvNTY5NlpyRkkxTXZOZGNRdHBYbHplWWRJT2FQVk0wTjJ0NFZkMXJ5NzgxbjZqVGRHOW51eDhsSEM1RnpSTWhQK3c5MTNHOUYwWWNEU0cxUEEvQ21jTW4rTGtyYW1SMDRlV2NCMk1HdFhabnZHSVFPa1ZSMnFtSTh6QTRSZlY4UkluWTNCTHF3UTcrVFp4NkI0eWNqM3pOME1KVzRlS2k1M09WdWNndU1TNGdOY1RRWjZFRVVrcld3SlltR2F3SWhNaWFZZTBNaXZxaXJkV0ZCSml2Y1NWY2ZsZW1CVldudUVSa2w5UHFiY05WWWpRYjhDR0lJQjJRVVFFYUI0elVtNysrZENjUFlTcVJpM1l2cTdvczlXQjgrYVUyQ0h5L0ovNmFFTVd1ZGF1VUtFcXI0TGZwejBCVEg0dkJNU0N1NzQ3QXEyb1VvL2oxTmJaVElFdFhER2lubTVmQWE4UVpML2NoenZXNlNOMGdPTDlhWGtxdWtNV0t2VE1QWDEwajR0UzhORmVSeVpSRHo4T1BkWldrTmlBWVMrYWtQSjVER2NFMk1raGk0dVVCc1pvaVVjczFLd1ZScTZBdWFyeGZhMnFjMXV4SW80QWMxLzRGZzhmcmE2djIyOU1iZjJDcm1qRFFCcXRlRERvNnpIMTN0cnd1bFlrZ3ErU3oybFNKelFWdmZMVlF2Z01tNjA2MHlVWnlrRmprZFhJclM1SXNvZFROY2Q1bENnc0Zobit4SmxMSjV4VEVYeE8wNzlCMUFXRk1Xa0J3QWh3dDlvUEFaZUhRUW5qSmhWblJ6SFpnTmdpcll3SkhTSU9wS05wUStYdEJXZGF1Z3B0K2thWTBNbkkwMGlka3k5cnBjd0VaQVRRWkxjZHpKVHhTd09EaXhIeTZUTUhzQUhzTXQvVWJHZkE4RWtVbWR3a3g5cllOS2tJR0VEQmlIbHA4Qkp1L0puN0xCUlhMcUlTbk5uUjdWSHQzbGNwVWt6TlFGc0cxQkI5NlZodFVINFM2TytYeHZSWWRpVmhSWUNHYm9NTkdPdE82dXZsbmgyK1JBMnVCT3dNOFNUaXRKb3lodmhycnVRcmNDZjIzcXBGSzd6QklMcStvNlluL3R6bGtsUmF5c1RwTCtYNWE5RjlQNWdtSGV6RGt6bnZ5SVdRNGFSaDNHWmhzY1V6RDZlM0tkcGhLT1NnUWhiN28yWWh1YlZwL3FHcUNmalpQYXpsNzZwUXRZTExSNUdsbmUvdUo0YWsrKys3VUlra3pUejgydUtLbE1qaitnY3U1RVFPUnRtWllTV05Wa2lnUzJsckl1eHUxM0p1YW4vSm9XQzJWRWVaemU2SVBIQ2E2SUlaa214U2hWSC9vdUhVS0FXMG5VR1VSVzFNblM4eU9PSW9lOFlUSWZJSjVRU2FJaFdqSXhqOEhGVlVOb1MxZ3dzU1o5dzJySTBKUFJ5VTZLaGxHNm1YZSt0Znp5NWVjV0IrazlCa0xDYmI5TGIwMnVCU3c2OXRwUGZhVXU5MWhRd2dheHVUQ096U2h6TThsdFF4bTZQU29FNTlQNVBEdnkwZ3EwQWV0VEJCWjFZMGRSbEwxdlpXamtNc0gzWmJ3UGdiMHBOdjJPM1RJdmtkRnpDaTh5UDUyUXV0bUlxakJONDc1ZUFMMjN4OGhYSFB3dVg3MUpZajdkY0F6U0FpMC83ckFwdERHaVVQekM0YmluM0ZlUmlpTnM3RkxiTUZaZzc1QUlWSmVaVzc2UFh0Ymo1QzdlbmlwTysyRFVPNVhFSXJVWGxTK0RHSEJ3RUFYNjNkaWtzbjlsWEp1cks5aTMvYmxMVnJURVNDR2V4bGZOWmZteE01MnZUeW9va3QxZnQ2eUxqNnFWNUZnY0NYZVpsWjBsSisyS1MwcFV4Z1ltcWIyNUI5WmhYVmNHRGVkSjZxZ0psSjJncDkza1EwU1UzUUo1YzQwM1NqbXYvRld6TFNtbXI3dTkwTGhpN3hTMHVPZkhNd1QxWlNlQk53blpjWHZoYTFVV01kMmVzQy9DOUVlRHI1UmNlV3dySlFyU2hPU0pBZFU3NlZYOHlha0IxaFo5TjVicnN0cDFPdUxsZGdmeVlVT256eXNoQ0ViMGZaY1NrK3ZRZzlITk1qRHJobjZvQ0xNNUF0aU9nQ29tWGZhSXpyU1ExQjhyVXVuU1RKV0NpY0pPL0sxMjNMYkNnakZRdi9yZ21IQTAycFNZU0FhcWNrbUVhQXdWRDBWVUFKZ3J3RmRDZWxISmJUZVkvQ205WWFYblM4ZEZ6dTN1dU96UkpEQ01ZVzlrb1B5ckJCZ0R6TEFoZUxXRlFPYTljb3Z3cWt5SU1QNnR6VXJBclZlRTVLNURrblZHNDJsd21EYjBTRnFBNDQ4TjAzTmJOVU1EZGZRTXZ5WWt5OFVhVU5XTHRhdjk3REllTGl5TDJqT2NqQzlBT2Y3RU5rME4wczE1dUFuRkwySitscjZCWjk2cktESEJjd0RhSlhVc3FhU1IwZDBRS3c1N1k4QU1OYWpmdlhDMlQwYVNYQ3pYMm5iSko1VkVhQVpMWW5QaHFnNE1yeDRndFJXSWdaMDN0eElnWGU1YkJHTnR3eGpKdU40S1hkRmROd2ttS0w2eXVwSjhMRERuVlN1a3RnY1lGaVBqL1lNRENxR1ZseTJ2VmZ3NmU3UjBtbWxmdTBJN202RlFWUDJucGkwNXFCOSt2RUc2ekxhVDllbTd0M0dMK2VsVHBqZXFETCtGdmtwdVd1MUtZTnNoT3owZzJLSi9ZNWlTWEpGWnkyWWkrd1pBMVBMcEN5UnFwVDB3UGRReElkN1F5L1E4ZW1aOUlKVGRzRzZ5bHoxWXJpZnJ2ZTd3eFRqUmFsT3pvVjNDdXFMREJDWWViRFVOaXY1UW5Nam5BU2FzL1Vac05QUXZFdVg2YmZJVXJYZ0ZiV25FZzcyTWZzM0tZS1F2S0czUEVCVGJEeU5UcUxWcytmS2syeE5DS2RhcTlNcGVXWjZiYkNqblNWc2dHeXVPZXFhdURTa0hqbWxhbUhXYzhvRkF2bTVnRnVZZHY3MUhPQUx0RW90NjVJNHgrZXltSEtLVGRZTVViUzhKRncrb2h3WFdVNWNudUVkNm9nMEZ4SGpRYlpGQ00zb0VMT3hUZDFTRS9zalpXaHhQdXlwSU94SGhSQVFXdjZxWW1oZVY4TEtQc1pkOVo4QUoxTXE5bmg0ZEV1OERoZGRrTWJRb3RxeHVUUm9KV0c4NXZJMjFNVFN3Q09vN1B0MGROQ2NtdmJYUUxRajEzNzJhSEtXUGRNU0xReFAxaXFBdzlZdENiT2VOek5XR2JBOEpPWWRMQ2pqM0pPWVhLcU4xeUlGNytMMS9DOEVsTk02T0ZzSnZzYmM5VHBES3daVzdkQ1J3OUhFK1FTVElxakZmM21MdTlaK05PZlRObElUWStIK2ZJY2RCcjhlRlVUVlFMaEZxMTE0Zm9yVlVadU9DdXh3RkhDb1M1RzBvSXZ6aEpla3RLVjUwRllLQk4zLzVBVHJpczZLcVBETjRqYXFxWVZUNDNtSitqRDg4dUROZGx0VmluY24xMzRyUG9vQ1lzWnoyOHpoK1A4ZkQ2Q3ZtTk5zTmpBSE16UUJ0c05NVUo4dGxRZnhlVnVoMEFOajJOc2xjek9TejdWcFZnOERZSm85alFZdzFZNGcrS2E5K0phdUJSeHVNVlAzSnlNalZyOFAweG1XOVJETkFDQlZvWkFKblE0M0xBNmtSelh0NGNOM0orTENFVEFyZVM1T3lQVDJvendFTnMwYjgwdGNTZnQ3Wkx3bVM5elVKMXhFdWdiRmRmSUxRYXl5N1lrV0l5dm1PWExtSWRYeFpCczIwZTI2a1FsUHFzL3pScW0wMG1IdDZNeWRaOUh1LytOZncvTkt0UlFCM29FOWU2K2RkQUV1SmJLZFdWdERwMzhVaVlITWtZTW8yc1ZncDlHVVgzSFFNL2hYLzNjZy9CcjI3UndkWlE3Y1ZvRkNPQnpnTTI5MlZsM3NmcFlKb0loamF0SGc2c2cxeTFTaGNORDhtdkRRbmR6cXZNQ2xsNURuVjJpVlFVUWs4S0ZpOUVwNDJ5aE9NdUttOTNrckNqVktEUlNla0lrWTg4elNjLzNuOXRCaDNEcjJuZ205VlZCN1RHNm5TUUR6Z29TUlZtVk5LdE4rY2wxZnFCT1g4TDFNVEdOcU1zN2JObncwY2xHSzA1Z2ZCTTk4MzRnUGNTZm5qNEhqS1VMV2JTblk4TVlKNytmaFNXcFNjZXQ2Q2VVaGticmFyRDM3cVNNQzVlUXBsdE9ubEUxeVlrdk51OC9DcXlFMVZORitWbzgzRnAwaE5DWHRiVnZzYnc4SFZORFVwR0duUDh4ekYxZ1lUV1JsZkpTZk01YnYyTnRRT0JSWjlYMUZzcEdJcVVxNXM2THBucG9FYThlTE9ocWtXUkRmak9ibjhHQ3dBeW5oK1RJcmNkUUtBU2JUOXNXRU52SWFuM1RDSVViMXgxWGd0b01FVkEzU0N2SVNLZUZ3bU9HbFdpMVY4NEJ5NEJhQUkyVTU4YmdjbGNza05RVTRycUpFM0ZHUDIzUjBNMnMrSnhlQS9xQjEzc3dlNWRZbVU5bWgzQWsxQnEzczZjUFR2L0kyTXJtZGpzT1B6MVpOb2UxR2ViS2xRM1NFcVJGL1MzdE1mM2g5YiswRGw1a0FWd2cyUVBjTG1JTUdRMEhndlZ2VVlYU2RHQTJYN3ZSTHU0Zi95UitCd2t2eUdjcnRNUjcwVXlsK0pDSXBsbGN5b1FvSlZGUG9JT1Fkc0wwSmRnaU9iWUs2Q1lKT0lPYStqUFZRQXVneXkwalh0YjlKbmQvRlNQTlpRbXZicjB4ak5tRElONm1RazlXTGV3YTJGOVVaeFRqODF0b0FCRVVmd3prbUhVWGx1amQrb1lleUxMT3NlOXpIczVlR3ZWczlQNzNOMEQ1VkdxS2pJTk1uUDBsMmxFRkh2ZG96MlRYVGlFVlZVanVMWE8rRmtlaGh2QXR3RDFib3RnR0xlSTZENkxHdXNwQ2hkaTdiSGlUSDRDM0lldXZCaEFFQ1lOOXp2SllSNXVibkVnUGNVNmVMNEdNY3IwRThHY2hXYWVRbkxxTTJUUTNsZFJlOEZva2l1Z2ZyWCt4MWtiaXVhRWVHYi9GVmpPZkprd2FCcHE2U3NUSXE0VDBMY3ZJdGFmTS8zenRXT2pRZm9VSzAxNENiQTBUQlRZdlAzVkRQQjM4bXUwNUFRSGZ0M2NtQmU3M1JlenM4Y0pscFJCaEU4Qm1hY1Z1bzhmaTloQkdLNmFqYUpiUTFjT3ZjSzZqOTJVVit3cFFLYjRkQnluRFRBSnBVNVRwQlVSZzFTeVpDeTdWWi9iTGkyMHc4K1dydlFuQTlNbVZ6emR5VExxWkcyWUlLT2lBTHVOdnhTUXNWekRubjN1TGZPa0JhYnJtdUVCSWRDMGtCT0hmY3ZJQ3VycDd6MUNjTDBSTE91STdkNUlIUXI3eEtUbVcvT1ZocUJYMVpGWmNKdUwxSTl6bnlEZ1NPa24rOVVIc3JQOXp6d1daNFJxQUdtRGJ4Q3RHRzZ4WXJDdlFFMWQxK3VZYU1KQ0xpRXlUWlNxSHIzdzJrUnViaHdpN2FTd1dVQ2VJaFdBUHJEWnMvdXZoZXhxc2lONXpVbFBpYWd3T0hKenh0cmJKZ3B6NmFjWjMzK2E0S1lSeS9hNGVLNDJyWFJwUHRQTzVaK0F5MUFBYkI1dExTcVBmNE9vMk9nRnJPVWt2Qld5VVpLN2xpUEdINm4waElpY29MUFR1K1BuSjRDNmNmc1owRjlHdTJSN3N5dEt5eldFUTd4Ti93QlFoT3BHNlFBMXNQbStEejgyYVluTng4TThoSVhsNCt6Q3RWNXZ1ODhSRWdCelpaK2ZUeldHTWM3UllWeWtOc1JqVHFXeFI2UCtLVVAzWHlFL25EQ2U2ZWtYUTg4NmJiTGlQZTlUZWZxdDQ2TVUwcmszNkJRcm8zcHlyTjRCZUpaTGx4blNYYWYzWXpaT2g2R3BiMThtZlBQY1lBN24weS9sZjNIbGpBZjhCWXNLOS9kK1NOODFGelN0K1l0RkV3MnNyUHVNZXVITXQrSGRvdktsaTRobTFGeWd1L3I3NWMyQWN2TE9OT1hNL0tvaW9SYjB2dXFDREV5MXVtUnhzSmZpOU95NEVBd1hNZ2ZuYXhqa1FiMFdmejB5WFBub0tVSDArSUdPekd4ZUxITFloT3REa0pRTXEvMkZRSjRRdVBuRzBndTZIU2p2SGNKYW5lck1mREpVYlAxbjU0YkhsZ0V5U2E5ZE54bVV6TVdWMC96U3grMy9ESFVpczBzcmhNYjV2NUxIU3Erdmw4UXVhbVFQeDBrdnhYS3ByOXlwa1Z5VThWUmNwZmpBVnpCM0FNa3kzNGM5K1NrNEErVmtUNlBEYlhDSklVdkgzUkduSFB4amRqdDBJdzNvbHg2dUVOS2tsZmdNdU9OSkV2SXltRGhFcWx0SnZwQjJ1bWZzVVl5Kzh0K2Jva3hXOElQSnRSRllCdXNLMjVORktIcE5xdXRhVlF6dFFSWm5idEVhenQwYVoxbUZZMjZXNlQxQVovaytobi8ycEZjN2lrU2VzK2Zoc2dCZVhHa0ZkQVFlOEN6QnUwZnlIWXBXSWFaWXJYVlNJczN5V2lNY0dIZ0I4YVhEeU9EVlc5VTJ2YVhvY0RJa1FzUEpVeUlNU1lmWHZtd1JaUDc1Qm1Xd1hNdDA3dmlGM29xT3FPNlA3U1ZGKzFLOFU1eWNQaXAxN2ZZdW5VSHA0Z2RPNSt5RGpEZjJUcW9MRUpIWTZ2UFRZWnNOanBRR1FHTXZYTnJma0V6NmxTSnBFUGtiN1RNV1dPWFdVamIrbHhjSTF1MHJCRXFYMmE1M0kwNkcvMVdwOXN5YThtVWlyNDgwQW1iV1VUTEhqWFpOSXNMNXpMWkg3M3V3bHJsS1lMMEQ0L3RTWVhHa0psbWRZMnZ1N1d5SFl4T1dMSmt2dzFHWm5lZi9iOUJNbk1VUWlNYkQ4djdkSFNNZHVMYTM5QkdjT0tocWNwdHpUWXNjQW9XMlRtMWQza3pXN29lMW82NzM4TTh2SnBBOTMybmwzelpkZHEyVGUrM1VGaEU2R0xndGNNUnQxL1I4NEJrcDErWXQ0UlBFM0Jibml0L0t2aGVkLzJwTWNzMnlmSFN3NGNNQlNyK0dLREJCcGV2SStqTzVyeXN4TFZEckRjZ3lxTHpwTGJ5S3RCOStzcE0rK1NMY0F2RUZ6QVp3VHNNNU41QVhld1RIeG1yMXM4MWFHVHZ5bDh6Snpna1pqQlZ0NmRtWkJlMUY3d0JGcUI2aTI1cmZ3Q3g4Z056czV5Ry9FYUw4UlBVZ05GSi9Jbit0MWlVUHordENza3lKdFl6TzNvQUdJSlRXdDBZN3dJVUEzMGFoYVY5TS9zY1IwZkNSZEdOZ2JxV2xSdVlLT01nS1BQQ2hucVJUQkRUdXpVb2FWQldHTWtzcXI1bHJzU1MzSVc1K3JZYU5zTUdZdHZrUHU4MnIzY3E0WUREck1yWU4vSStJU0gxVUVudlZDQitzSWZ2NzRZU1pXbnlVdkw3b1ZOSjNWV2xBMlBCa01BeHM3cVJWNjJXTEZlaGpqazhWcFdYMHhnWWY5UTBsWE00OU55WlRtY3VTcko1bUwvejd4Z3N4cTAxdWYySVpxLzNEZkpidlpBeDlGbFNFSHlwQVlYd2dZSDJ4a1hmNVF6cDJQb205UytET0k1WHdsc0hXYVZzd1h4a3NhZVUvaURpVmt4bmRWVHNiWUdleE5vMG1yRFJyVmFWMzRCQkNxWGcrMlRxeC8xNEt6TmtsTmk1M2VJeHVhZ09UWnZleS9aVGpOZFFwNVZTeURMMU80RVR5TDNPcHc4citJWi9BNE9aNGJxdytpc3VDNzJBTUZBRmgvQkZ5ZCtVMk90K2tWV1E1ekJ6VnVnMEs5MkNMa0JzazBEbkQzWWFSeTJaclpwUm9QRTBMWjhvc1YvaUVZTmR6VytFV1BvalJReWRiOU41SXk5VGl1UnF2Nk5PNEtWazFnUm1TT2s4V3JnMWZ1eEdadVhidzl3UHpVbkZmRGtjRXg5dktxZzRuQkNUSW5TWEozZkE0ZjB3c3VsQTMvMW50a3hUYU1CTWtoWndLTmdtRlhCMTg5Z3JpZmNxNGMwZDlMenpNYjZ0dmlwNEhoRk9sM3h5RHRVT3NZL3plMlRqZDRtT0dKWmVtNktyZFZYSFhFMlRmbEYvem9EQW0vbU5tS0lnUGU3YzRzMnovZmRCK25DdWxxY2tGTDhNSUg2aHVONWh0Q1l0TlFTZzZqZE4rNS9FTGFzd2JOelo4aEYwbTZTdjVWMENkcTR1cUlUUWg0Z2dENjV6VkhFQU1JMW9XcExoZmkvOE1LOEZLbXBMdDdaMldiWFRVSVpYMGwydXA0anJ2TDRXYjZDZEMvS1VkTnJsRGtmS1N3NXVGY1ZkcUpuYWFJdTFTUjRTbzVXWEM4SERTWC9UVVlCOUw4cU85WHJKK1pvaFR3RGZiREZOaUFtdXVaVEIzV29ud2V6WkpNOHFnbm1qTG94Q1FDV29nOW1ZL0hSUFYvbzM5VTFKakNMYWZNTWJyeFRvY2NuQ2U4Nngzbml5dDA5Ti9oNjZYZWRtRDJsWTRJRHlkUjcxNDRnc1cyQ2daWHoxSlJUZjRTdGZ3ZHRwMkt0WFBwdmp6UWlFNUhQS0RVOXY2TTdJTFV1QUtxMWd4NmZBZGxnU3JSc1JFMHF6WjAvWDdzQlpaSUtpOG96TzE5K1ZmK1ZXRTd1c2IrS3lOam1BOGVJZGZVV1ZQc2dreHhsTU5MSjVxZmJFYlN1NUxYeE5RWjVEVGh4OG1ndTJTbGw4MVRaaHF2dzlQOGVLUjBqa04vUzdSdmgxN1BGNThvUk9qSHFOdEpZcDVmM3JvQU1IeVk2bG5lQ3ZZZXJBYjY4MjlEcTFlZVJzUEJJWFZJbTVaZmV4ZGJzRWpLUzNScVovZWozL2xCbzNCanZCeDR2WlB3WnJsdCtDRFRKblNpWExzVFlEbHVNL3ZrZjE1L2VxZkZIa1cyMVlMVDRzYW4zWnBkSFM1RHBzZklVTS9OV21kWWRKY1gyRng4b01ob1h0VHdHWDFLcUxNUEtQN1BETkdxaUxvWkV2MjFDK0VpRnh6aUVPQk9KZjMyT05QbmdiL01FcE1LakRFZ1hUbzNDZTBzV2lxNjVWQlRtUjY0YlB4SElHb2g5ZnYxYWQ4bGFmWkdqNHJWaGZjQkdiRVgwQzYxQ1NIdE1XbGxrTTRvOHhPS3NPQ0MwUEZVaG9YOEFwV2NpSjdoNjhPMURQamMwbWI3NVBEQnVZa2JFak1RMllvMXNqNjdOdU54TTh5NnJ5ai96eTBnT0hVMXdkN0lEY3dIdjduSUVqN0U1eGQwTzdhMm9nV3ZRRU9kamJPMDMvR25OdUpUTThJMVl5S05vcWw5T0tVQnBnUVp5OHpUaDM2aWZZZDJSRGlKRWZXKzUybnNWTXBLTkJkcllOaWRYMFgzTXpKSmxwNHVjdjJvWWRhTkZiVHNIM2w1WGxleWVEMmxyK2NCcFBIQW1VL1BVOFdTQWNET3QvZ1IzZDBhS3pFRmZIRC90c3htL2ZTSk5KdzB3bnNtWjEwU2lROWlHbG5BZklXUjBsaEZDR20rRjhuV0JoTEljZEZWMTJaZllGUWdjY2grTlNaYnVpM3lKODl2eHVaV0tXcnd3NkEvaE1vU1dsVzRHdzFOeXhFeXVKQWp1OG9TU1Vzd0hKTmxyRkFPMG1tcHg2Nmd1K1o2cDR4N3JxOTRPcUQ2Sll6SURhSVhQc2pDUDhyTjNqOE5kSkIrY0JYWjlDdlViNDZ3VEFSM1I0UVdqYjI1QUlNeTdtd0RjZEUxcDkrcmVKbjFDY0FMYk55N1B4eGk5cVJSVnBSSTNyTFRLR0VtLzlrUTdSckNWb0dmOWhKa1d1bVhNTDloTDB2bnhwTTkzbmliMlRPV3BUL1U5ZUcrUXh0ZHdOVm5NSHA3bzhrMmR0WnBsbFoxWkJTb294ZzhUSDZKZXFST2s2NGpNZzN0RDFZYVNrbXRZQ2RuaVVycGRtaStQRmk3dUpWR2dVRzZybTNYZ2xNT3ZJYmJzZ3VadmhSSnNRa1BONjlWc3VQRms3akdLanMxWlNhUnJkOThtcDFPbzJ6M0FzQjZxbW1tTCsyaGx2WGFFcXVKSWhpOXgwS0ZBMm5mdHRXL2o3QnJnN3R3MG43bUZqMm1mVE4yNzFtaUtUSCtIU0pvRkxMdnd6WXRqTEdDaXhuWTZZOFdma2VQYzZ2SEw1VUZFRkVXR1pCcHZCWE0zeXBlMkJrSVRwRlRJSFkyRjBPbnFqZ2Z6YnVOQXhIQ05OV3JkRDA1aHhOa2xGMitkZEc3cE1CYllIYThqZUdZU25sZGVPRnRqOG4xYmhidVJVYmRtckROM2VWQnoxcmpPeDZsaU51a21lYXJRN1RKeGNvUjB4dXVaSVNNUk8rK1N1SFRYYktnU1VVYUo2OUFEQThoOWFTOHg5NXVtQkl5UklRKzBJVkZHWnpyY3plMjU0Q2VqMVRYMjJKMU9rSGR5Q0szQktYZ2lSM0dqaGVYdlppdDFmOVZOcUtYUjJvcWMyRExva0ZqUXZoVjlKVFl4aUQyckZOSUp5eWdWMVBFSjFLenNBbURZcFVSUzE3ZmlPV3M0VllJb0VIVUwxbS93amRHbTFZL3hzL0hEZCtoOUVSbi92OXlsQjc1Zm01SUFwaDViRlZyWWluTkoveGQwMHgxUWVCUk5PSkwvR1RqVkpicmNJR2lWaVA1ZlpQYTVraWNPUW1XNEVLNncxUC96YjFMbDc5dlIyQ0VSdVZxTHQ0cnJOSzFNQmxRUUgwUm9VUHpUOWN6eWlHalQ3ZERxbTN5d2xSQlV0SFphdDdzWWFSTlJNRTJyZ1Z3V2pTeFJtRFlMVTJkanJ1QlMzUGlCeGE4ZlNTdmlDY2hMRWhkNGxZa3d1NFpQVkhxRnVqQVZzdmNlZXFNdDZmNysybUducHI3T0pTRTNmR2FrUkRTVGViRGIrazg1VHcyeUtWeFFocnM3eWdIeWtadEpSdEZyOFBEUFd6Y1pscXMveStIV0xiNVpCRjZoeXREd3lacWZXVVV0Z1dJamdTN0VpL0NDM29Fb3BYWGgwbDU4MElyM1BZcTNhY2Q1MkpxeGV3eXBuZVNBaVU1bisrbkpYRThFWlpKNklIUXRGSjF5cG5SdzNabmJIY3VVazVXeXRFOHQyN2xKV201bGFnMStIQStGR3l0UjMzb1NPMVN5UTVhY2dOdTFjaDlzaGJ5SnpnOHhtZ3VrSjRoTCtsRW1Ua25GbEZZS0VCSjF0MitqaThlMy9McU9sZkhvOVRRODArdUFlL2ZIcGl4aVpHZlMza291bngzMWdHeWZaYnpsOGQ5dGE1NVNjd3pWQlJ4RmNPRFNWbk8yV1NYeE9xUTJnTnIxWFFZemVSRE05aGY1S1UwWHVyNjVIdms1blF6WlFlWHV3dmRsb3B1M1l0YldZRldvYU5hUSsrbkFrYnVtMWdFOERWUWUvQXRTM2F2emRTSEdCUUh6UUZhYzc4UFkxWDdHc0hCT240d1hFbFVyUG85MzQyN01LQnNPaUhBZkFTUTVOYlJWS2l4U0lNc2wvM003dGhjQTlxRnE4SExUMVNQN2l2YWhLbXFicGl4eE5HM043NGRVWGgwRDdvZWdqS2dqNWcwbkVtT1BOOXhXNkhLQys4bnBBWmMyU01VSSs4NU5aeWpWeXNQajdNUVE5dW1nRFh2Z0NsZVVuclhMN3dCblBOZ3ZGNkJJVXBJbUZ6NGxFWi9mOUdySE9HSy84NlZldlV4bFIrVkI0aFRzQkplRFRweXVLazlRL3QwaG03djBNWlN1bHgwWERuRzBTQm51RXUrWEllTmlkRFJXV0cxU016N1JkSFYyUW90TXpYYkFqUEdRU2dpNjJ1YmVnblpYbXArYW9aRVIvRU9JRThZL2VVWWp4dE5HWHJVNURsakJZQkJocTFlRDVRamlrWWpOZHRFdFgvWFlaY0NoRHJ6MFVIV1ZEOWhFdE8vZVpvY3o2dFZ2OFppSjRUR29yZzdUWHhaTWQrYWVJamFuQ3ZGRDBSTU54eXlRSlhRZU84dktNVmJkdzBmRXpQRWk4NElxT3RpRUlMTmNZemN5OGhqUlFEakRPSXpKelFnYzlYejFTMnR5WnBSOW1TNkdibkdHQmwvVk5PTitYRmhFSFpFVzJJTXozbk1DTE9ybmdqb0RYOFg3Ty9DZkhTVHhwampJRFNxeSsrLzBvcnU3dW5JbUtmTmlWK3BQWE5xSGU2eXF1bWFOcXBjaDJhUlVyN3g5M2VkZmdDMm9XejVYaHVwN09QMnQ3b1BPU1kzVVVzdEJaUy80Q1RJeGJGTmR0V1VNRmppYmhOQUlEMDI0eEw0cEFaWWJPMXQxSkYwTHNLUmw4dGJQRldSdEhuQ1JFUmF6bzVNTEkzaTNNQ0JGNVNoN1ZCZDJ6N2ZXY3l2RzFQUFZ5MUx3OU51QUJzcDlMNmxiMnRPTExaTkUrczFBKzBXUTBGSURmZXgyK0ROQWpjS1VGSjVJT2I1UUdqUzRJcE1Uc0FHQTVvcmFpdUVlNHkxS3JaM3J5bHJQQkNNK1FvaG1sV3NPVjh3WkNlOFgzV1Q4UFNxQ0VEb3dxWEl1NTNObFZ1aE0rQnExUWVMTzI5R3FzSE5VWndEZkpuNWx6R2FLZFhVU3dNaUlCVTRYeWtOVTVoUkhRS0J4M2VXSlEyYTFxZlg1YXRKYTd0ZjhlRGpwcnR3VnJLT3FkNjZMZnpYdXBLT2U1aklrTW9lQWdCZ1RvZkRSRGlVTXBVQUhNdmtXN0JRaFZhbEh2RnpSVUI0OGhtOUNXVUIxSnIyUWI2M1REVUgyWUhyeFd3TEl1NTh6SnhmanpnVUN4Q2dZQk03ZWxjT2M2MlFhQ1djWG9CcEdPR0FScS9iVHB6eHZUOWs3MkgwU243YnZ5ZWt2aWJrUXE4U1V5U1hqamltWm9XMW5EM1RLU3pzRlFPZ0JoNWh4d3FtZkYrU1hybmJoUXFhamUvWTMyMGRpSUpaVUJyT0tWOGR0Y3FnWUJHUklOTUhSSWZyYUt3UEtQOCtLSFp3V1Z5OVBuQ2lOcFJZa0VZTm1zaUF0SDl2VTZDRzFjamdxalFxL010Mlg1VEttamU1OTB3dHhnT3pFVll5VlVKaGUzSjltNUE3TXNsK1VoTmRrMDc4UFg5VFB3aEpPaGxBV21ZOGI3ZWlIMmR0aDRxMS9xRXJRc2FFZXNGWkpBU042cmRLcnRmbWtiNFhsMDNVWHpTZlhSdmk1NXZZTzFoNk1wUjJSTDgxRm4xQkdiTVpxRkZVdmNrd21va25SN0dZWldObSt6QjU1N3JGUDFEUVZsZ0ZDbFlRNHhLaTNlUGlBMDRodDNqcVhkd1VzNmlGWnVKbGtOZG00WitFRGZ0T0lNVkFKVW03aXdTdkdLcVhXWk9HR0FjSVg5bm1NdmFWcThhRSs1SUN3ZEpJVnpGdVdHZzE4akZOQ3BSNG51WjZkaXdFQlIrd0lNOXJkenBYemJZZVdZVXFoSzMvTGQ3NWRocnFuR2dFejFCM01hNWw0VmV1ajNQeENzMkhWcUdvQzFlU21vMGI5b01LeWJXdzdtWmg0Ukg0ZnE2bk5LRXh2ZFR4QVp4VjJEbFpQWTh2bkhZL0pEV0l4RmNqL0owY3pCejgyVld3eG05REtyeW4wb1BwR250Ulh5NHd6ejV3R3hmdzRldlBCUktrL2RFQmpGK1N0RzZWMFYrZk9PWnlJeHhxWFYrSHhyQ1BVY0ppQ2Q4OURjRVVtblM2YWRrMzFqNzhXL3JRWXRBZDF6Z3RzQkpLWHBkMTV1QzQ3Ulh5SzJyWTU1MnE0VTFwVCtid1o5ZG9id3REeXBndE5QWHBQcjZSR0VJSFZiYm9taHprVjEveExVOURrWWdsdk5NdFdpZ1J1VHUxeVY1TnZIT1Vtenc2UER6UHNDalJlSmdaeTFyZ25EMFd1ZWZCSmc1Unc3TllyVjBlWnpRZWJPWHVPZFlMejFZOU95aUNkVEpMOU9pV216ZCsxeDNvcHJsRXYxbjU2RVVsWE5IcnhJSFphNW1FYlVzaVhHUmhkUzA5ZUNka2RqeHBMb1hyVlZ5UGpvL3BaRTFrQXc3TWhqVHFZUkVrZUhkYkQ1NXNzNkxpSXViWWJqeVF5WTAvaklzdmwrc3lIYXNVNGdwYXpxYi9vSGxJRUlMK0g4WFdHQUZOM1h6L2E5c0MxRkJpcTZxVzdnUTRqMlVETnVnejA4c2kxSXVFZ1VhVkR4ckljMURXQVNEVGNDblhFdXdwVG1aZjBSY3hiTVhld1ZHV3YzWVJEL1UrVy91WEpGM1M1R2pLZDNyN2ZpeTFVQ0N6NHEvTHNkaUNZT3RrK1FKNFErbHZVNEZRcVhYeFFjemZUbUVXYUE1VFlvMmQ2dWl4WktPLzB0aWtHNmkvb05ZbnNZcmhMRTd6NElrUDVxSWhRWU0wek1SQSszZ3Z1V3pHS3pwVHlhRFVPV1BYMmljQ1VTMHZock55NDBqekF0MlQzajR5aVBSUDBBNDF5a3U1bE9ycXQ5ZG4rNGNhbnJXY0RkL2FFN016YjVTY3ZzMkRKRGhmUVlvdWNHcXB4UnZrUXYwN2MyY1ZCNHUxRzNSV1l6elNBbHdSSFN0WWthemRqY3VKdUtwcFpRTEc4QTNDR0Vnay9CVmx0UGJVTys5TWpFYTRJZE1NSTZscmFFL2RjOU1NNVV6NnhTUjJuUVErdzBCWlFEWUJnUGF6cDNPeXZET1N4cyswVXdhMkt2eThWalB3eVQ5TlFNd3VWd3d2Z1RYTWY2aFIxSmw1UVdMU2EySWhHM0FKd3ZsMEVFbkZleTlyYXVleXhjZUtXZHQ1QlRVWjdIN2tsb05TL1lkTHpUUXVyTnNsclI2eWJaY2p0QVVtRDBXV0hwTmJJNEV2MmsvelQ4UzB5QSsxNGRTdWhFcnpsM1VTSTN0U0Myb0VINzZITnVWdlcvcXNxOXo4dE5wOWtwUFRPYnZKR2JxOVJPWGx1SUVocWFobStpeDg2VDY3NFJiMFpPUW1zNk5wa2ZYamZRQnRxbTdDUWhPejZ5dmpRNzdBdUx4SWJVYW5GV0VSSjBobVhEKzFqMktSVGpWby9FUVBFaEpOdFJNN1RmenVQMG81UnMyVlRRNG9QV21WWE1GQVA5QllBc25xai83Ym9pSTIxQVJkYkdwWXRRTXEvQ0RqWHc1ZEF3ZFR3ekZyRHpoME5Fb2VHanVIVWVBckpyZFp6YllmajJXRjFHbjE5UHdlL0h4YmVVTm00SlZERlVHeUtESDFJZk9FZlJGdkxVNnJCSzFCWHY3U2ZGb01ZWFJrWkRjejdKcFJGVmJ1VTZmWGhKY0hHWjhhSWxPTnJJZVhTVjhTSWVZYmNWWmVNZXlHWk5mUjVEbGI1OWFkdTdTclNKS3ZiQmVUQ1hzdlRwMTJpTjFqZUM3V2RzTmNiWHVkUWtaOEhLMG9kVVp1L0tyNEZqT3YyZUFGdkJiaXUrQTZZMlpkSEtXbTdOTGQvVkcxMXRtUGdnVS9zMUVUNGYyTTFOK3l5elprUlp2TERmaVQwSjBTWnh0MkMvRENicSt3Q2N5bTE1elR4VlZqdXR4c0RWOFY4UGdzdDhJZ1JDTEEwMnpsSm12ZEwzL2hnbmtXS29SNEd4dEMxcityQnhBQXIyc2lrblhRRHFQdzNzWWluS2hEZFVENmxlU0owMHFqV1kyWHpiallhVHhUbUQwQTBoVGlNZVEzWkpqZFZ2Q2FLTWJNRUNIZkF0MzFTeTAwVVhSbmJqQ3FZMGowNDArQWZ1Tk92c1hhREVicXR6RUVSQkowSjF3Vm1taFE1VTJzc3RKc2p1ckZaVGtvbGJNdFk4RjZiNHd6VWtKYktHYWRIazU3cnkzN1R0Zm4vYUhzaFNBS3NZekpZUElZMzJkdXNBY29ubXlJcGttNzhFWXhiOXhSOTkyZW9NRDFZRHJPMWozeVdnNElDVzdYSUdHb1l4SUo4SjJ2USsxazhmTEI2K25PVWdXRlZhU3VVRG9VSXU0a3RGR3hUeUwvd00vb3NqY25HMk81aUQ5NWlmZ1hzcS9KemtwZkFjY1ZRc2wreCs3a096SGtjaFoyUWlDazJxMld5YUkyUDh6UlMyQVN3YVBoalZjd3NGODg0dzR4Y2FNemcwTW4vZTJuL3hYUkU1SFM3aHdWZWhkcjRzV0dNT0RSbks2TjVUNW9nRjVuNFNQcGxoZ1BsU3VPR2RMK1JRdDhoZ0dRZG5wUGpYRGk1TEhOUGNJN2RsMUI0TXM0UFRUdm9YMER4OUtLRVFtTitoYUZDN1ZIYjNESlBLMWU4aHVYRmgwSnVUcDAwVFFlQnlIWko5ZzQ1S3MwZjVmczZIZUNFUnA5OXlVSjV2SWxmMEJFanZTMkZ1dWdkNTBYbzFKbjQvV2hiaUlYSmU4d2JpMzg1TnRqaU44OFYwWVRGcnloeVg0bGwzMEhsMk85YlVXUFlQZU45dzFFQmd1UGd3S0hIMGpjVjdWWjJpdG9hc1FvUEdGb2l0VzRyN1dwRTBaZWtsMGQ0aHM4Wjd6c1ZHdk1uQXJEdm83NXNqUExGcFp4ckgyZWZWTUpRTEU2MzlFbUM3YnpGdGVMNVFwWlQ1K1pua0cxNGk1QlAwQ1Q1NmFZc1U5a1AzR0FUSkFBYUxJVkM1V2lCcTdUM0cwUkpPbXEyT1EzR3puVUtMbWtXSDE2MyswOHhkdzg4ckNrazE4U3V0YjlVNHdRdXJ2S1dLdndBc1FDY2NvNDhEcnROM2xRU3JTNytwSGs0ZzBFRjJMTGoxTS8wWW5BZ0JhWGNmanI3U3JldDdoZ2s2ZnRqbUY5T3BLT0VycmIrd2FHK21kbmE1R1lROGJMTzFzSGtLajk1eHlXdm9Fc0IwUWZXaytkZERGTVAzRHBDVTBUVm9XU1U2blpVbGFmNmdIeTVQRExLRmc3OE9JUWFackJsUEFRODlDQTJZTDdlKzNzL3dib3NCcnk2Q1pyRTBWZ1ZZWldNZHQ1cXg5bVRDNDVOWFFLQUhIbHN5bDJpQWVLc0diL2Jpay9zRUVlZ29rMlJZS2tJVGpCdE9pdUd1cDR3amwxSys5WmdmbEV6WjdYa2w4bnp2OU8yZWQ1NGxjd3YzSzZVRVQ3MllSWGhrdE9LQjJrOVJIMVRDdjBPakVDSXY1UHFVbndNN3ZkUUZKRGxlazB3VXRuQ0NOdWs3QTJiOTdOWmhTU2pmZzhEeUw3M2JwRGV2OGZOeEhhY3NUTHUvWG13UmdvUXllSWRvU2cvQVByRlo0RkZWOGRJT2NxZk9EZmhKT21uY0xuTEcycUFvR005b21nVFlLKzE4SVdxUFY3ejNKeWlYM2Q0bnZDeTlsU1JrTWRDdSttYnVRa0xYNnkwMWhvTVUvbjR1WnlNN05jcHM2bEZaOWlZbytCZnE5aWwvVlZLczRZZ055TVFxK1lQNitOUlZrMGwraW9jRVREa3Z5dlJOZ0hCR251OU9jeVV6MzhSeEFuTE9qYkM0WDl6KzNZRzJQV1RsSmxKeEdyWFQxSWdzb2ptZVBDRndsY1JSVFdncWFnRTNTOU1tMGkxTzJtVVVqYUVwYVNZajI1NTlDTFN2OVFhdlRWYmVQcmJkajZqWEVLc3RVWnp1Y3JqSm1BOXQ2S0RTNFBMWUpZSFRITWt6clpncHZ2SnhuaENHbnl2QlJNVWwrZVNTOXFidDJZd0o4dHpFVGpqK0JsdmdvVCsyOHdRY3Rldm4xRk9BbVBFWFh3dlltM0tYSHl4cDhUR1ZnR2h4UFNLZk14NWNST3dJNTRuSlNYTW90dEhLTWx2VG0xU1dEdkxRa0VOQnJwUDJoZ0VmWVBMWmNJWlZDVmRVS2dLZ0xzbWVDdU1lSFlNVGZvN2FvcWhvQzJXZTN3d2lnZXdNTEp0Q1dYOHFhdzU4ZHluV3IrTlcwckhrSEIyZzBCd3JxNHZ3Wk5IVHJXa0d0Zk1DSDhrU1FwRXdpaFp4VnEzT0lSL3RRY21LTmNvL3VKYkc2Ym5IdkhpSUNPN2VhZm1zK21pcEE1K2lQalJaVkpjN3ZFZkhTZFJuOUNkSWdQZVRiaGhyMUsrQ3lGK2VreWU5M2ZSK2V0VjBBSS85T3YxazdnSHN2U3l2aG9rNmFjVFJYM2I1YkRJQlRPN1RLUys5cm5IUXNhYVBSNjVjSk9qdzNSWlo3VzBBTEUrQUNkcWxSS0lYUk10dGZ0Q05tQWRqZUQvNWMrYWFuMTBkOWplQXFaOE5WeS84eUxjUWZnQlF5UEV5M2duTmFWVk1mU3hjOENGcXlaM1JGSHlNVXk1UElQV0tPQjlVeVZIczhqK3llMkwrZ0dmclRod2Rpall3cUtkRTErMDZsbFFCRnJiQ2ZqVE85STVsQTF0NUFacVlGbENUQ2dNSSsycjFBN3ovdy8yVmRxZkY3M2RZZ3R0eUl6S2w1M3RtV2hRWkRSRXNJMnNHWFEyUDU2ZnYvWXFuektxT0MwR0lqdkFJYzU5YXc2endNQjBjN0tuT2pnd2M3K0IxUDFvcytvOG9NWDVqSmtHMWh4YmZZc1dNRjFzK01GRkduNU8yOSswcHcxZzBhbkpMdjNuUW0vVDFrbzQ0QWRicUw3eERLYzRZUUhlRldWNkVDdTBVd3BKTFRzTTRWM0pZVG8zQWNoTWhncnB4b3lsd1lLR1hmMGtTVTF4NGJEd1FVRzVxaFA3Zk1jNkFsdWZGTDFUYllhclZNSDAzZEtwQXZabDgweEpjT1I2b0Z2cXVkVEYxaExHNVc1S2RnV05mSVBpNEVwZTB6V0s0YjhRV0dGL2xHbDBqUTJpZXZ6SWtzcGhSM0ZOZFdpc1o3eUNVSEVMWHNaOHl4cXp0THpzemF4dW4xT1I4dnJXUVcwM3dQLzNmQjdwT28zK3lwdFFEdlFFNnIvajBRdXJiS2VTZTJqREJQdUYxREJYYVlEWlpUTEp6R0ZSOUI5Y3FqY0w4RklJSFNaR29vQVh2QWFTem5NMjVmQzFnY0s3aGxFYm1Jb1IzdXRDejJOOXFGemNSV0VrTnlid2dLSExzMmxhR2RkWnJhS2ZFdGJQRUVjREVVMkJrLzVCNEgyVjg5SU9vUFduMy9UK1dPdkVFT0dycDM2azQ4Zno2elpyWnJNZk4rZ3lub0dSbzNoQW1mK3BYbnh4a0Z2bjZhSDRhNzVVejNpMk5ycG9heW1BR0VuRVRrRlgxM1l4U1N1YjJPVzFmdlFyZ0ZDQjlIbjk3MUs0WnRPQXd6VVNubWtQRVdqZG0yNWVvOHg1OHhJek5wVzNpWGoraW4rVlBVUzVYajRLRUpyWCthcVZ3S015Y21yMjVPMVU1OUtEbzBMdzFTdTAzeVh6bldYN04xR2VqcUIwRmx6WjBCMWZ4QTB5ZVlmOTFTUFgvYmpNN1hOMWdMalVqWWF4eWpNWEhzbGlJNXdHak52eDVJMWdSZXRjVmxLMEtaeUVFbUozeFgrcUtiaWROUXZrdW4rU0l5c1B5c0hoSUhIWTlFZmhUaFN1OFlRR1RxNFhSZ01DL28rUmZESnVMTGZtdHJFOEFIVHE1enlFcTNYd3dqdy82TzB0bHVKSE5lUWpWeGhlSUl1U2p4MVlzbmJXZ09ScTcxODA1YStpeEZraEJ1S2ZiL1JreWtZMzlNcGdXSE5mU1NTelg2ZkRxSVlQSzlwQ2ZBRC9zMU96WG9FNkMycjhady9rdG5WcUJ1UW5OOXl1eUx1Slg0Q051dzNtcmhXRUcrbWtDWk1pZUMyTDhvc0dNWktBNGZDZFF3YVNxZDdKSk9tZncySmNMbG5QSEw5dTVCUmFoM3I2YS8xeDRRbzdnSk1Qc3A4VGFEL1YxL3d0b01OMjNDT3VJUVFadkxEUzVTWXFnWTY3UUpTMzVRQ28zbUpOdENWVGRSNDQzVHpBZnhFcm5oc2xKc0NQa3NuTUx4SjNoU1RWZG0wMkJZbG9BaVc5bC9KUTc3aGlBaVprMks0NUUvRXdycGRFaTlqY1Arak5SSkUzckYwd016ZFJ6QmpSZStPY0xOMUFXdFFQaU9hNXQyelVWUnNQTHVrSUJONzNnZERieUE3WFNrTnVleUhjM0JzZ0wza3NLOFczVVNqcDVMMFRHNThMcEEzS1VLYm05S2FmTUROR0txWWRDZnY1OHZselVCN0RWRlRJdmtGOCtkUldmalAvZWNueU9laFRRalVkNVJXT1M4eGNmNHArMmFBdDF1MFpEeTE0ZVBOWHNjYWZGVnFBekVSYnV5bjBWTS9oYnJNNmhPVGE0b1QwZk9RM3VHN2xxYXJvYzJmR1oxN2xIYUhEbjdLSXlZeDl5ZlJoQjFVbzY1QnFhb0QxcTV1K0lhZzZKQjdZb2pBV21veis5TUVKTENYMFBCN29sd1FkTTNRUHVGVnZiRmRXN2ZvVElpcEdUckI0c0UrQzcxQ2x6MXhlUmpLVnFvUTA3NnRlcmFZVkNBQi9ZcFl6QTE1dHRkMk53cWRBSmUvaXF3cngyeUlncTNnOEMvbVM2bjZhVGtCY2dMODR0bDlHby96UzQybTg3emo2bGpDM3MyQTNtdU01djZaMmNoWmp0VFBiMVppRVVLM2RoUlRhSmFaRkhPYk1ucm9QMWJaQU1jSUpqNkhmWDBxR3lLTzhtUlpGNFlRbElzVjlYVUpzSjNsNnNaK0Z2dE1maE1uSUdRNU9TNTlPVHZMUkxjbi8yYVU4MVo4QUk3ZDUybG9jaHRkem5QYkRIZExGc05zU1k3Tldka29vWi8yTG1lMjI2RWdFNHA3UWhsdnZ2U3ByT2tFbE51MU9acXo3eTNSa3lrVTg1RkNZRm5ybHgreVU0WHFyOGVnQlNxOHpySDlYQVV1R3JVcjN1VlJNWDJjMnNNZTkzVGlVSEljREFtNFlBSS9wYTArZTJHeFc4T0dHRG90N0l2ZXh6eHZOdkcwTmorTElmS0xPZ09iT2xmVjBGR0JZZlIzQzJEVXk4dlRaMlRQSVdxUG5uaHJTVk1Lak9JYVhLclhJS2pld2hHOVVXRUpNSUJPYUpCbDFYTWZSNXkvTS9ZTjY1VHJVNm1uSjRiM0tTc1FrK0tSZ2hhYVBWaUp3YzczRG5mb040M1dka2U3UjlibGY3UTBKZE41OGtoZ1c2WG1hOGUwb1NGZk5ZRy9uaC9SOVNZbGVvZzNVL3IvZTY1Y1RaNVhzOWlad3RHM2l2UExIN0wzMml0S2F1Sk5xWDBGK0t0dDdEVVE3ZkhoSGs3WExMdlRnSFNGUE9sRGRQUVFZVG9QbFdlZlJxVUEzb2V2SWZpM1BheVltV0JpTzBBd3J3dzJaSEhHQk1OdGl3eGV4RTJXYVhuVGZ4WEo5R1VGUG5kWkw0OWpEOXBXSXdJWjE1MFVIaU52YWd0WmpQL0ZHam1xZEc0Q2xLYW1OVHkrNlIxd2lEM09BL3VSdTJTUmNkdlVBWXZhUWtyTDZFeVZJM21uOEhxWm9qN1JZMWE1N1FVcmN0cXpnNVltRXI1KzRJcUtCTmZMOGhaNExMTDc5ZjcyMmU0WEd1OHdkWTI0YnpKZVFLOXpFR1ZpTzJPbG9VelRyVFV4eUM5RG9wUS9ORkVzd1hLeVNrSnBPL0RvYmlVS2pEQUVaamJWMGxydmp3KzJsdWpDL2s1S2VTTjFoTGprbG94UFVDcEkraEtaTCt4UmV6cUFhMkRXd2pHd3NrR0ZreUFydXZ2YU4rcTRFL21iMG1YdG01dHVEajFoNmkyWjYrbUJHRUZGdXFqZE5XVEJUeHhxcVpRbEdEY0d2T09qMGpuaWpOT3hMWE16V1VpUjdBbWhqcDgwQU53U3JsSEI0L3VINzFRQ0pnYjFXYTlmVjBXdWlDOEsvOFNUeTBkVVZ1RFJ4bVp5aTNxTk1pV1VvcG5xYWVqUG15emdOMlY5YktJOW9zL0JRMzVQcGxDNDFDQS96WHRqR290aEdQd1ByOEJnajkwOEdkQXUzcEs0WmhwWnlwRWMwQkJtdCt6YjMySFlIZmR4QzNBR1c4d3NFaUtwZlRyVVl6WnZ2ZTg1dUYxUlI1dWNGcXIySjZadXgrWVNxMEtaV1hiV0FzQmlDcnBQUWxnd3NKOFlhdDdvOUF2bm5jblRyTms1SXF5SzJpQWhYZkhWcmxuU0xUdS9xWXFxQjhrSC8yTWVIdGJ0OG5vWUdSaDlzSmlDUGwxdFBGMTZEelNYQ2xMWkdzdVBTWEp0ejdSMjJiN0tHUll2eXdzcTZaNFdvR3RaSTB0dXBLRU1CcUROZXZZaVdXQ1l0KzZIZ1c3UjRJNGlhSzF0dkRuTWFqaXZ0Z1Nrc3NFSnVIbGNXRi9DVlc1OTJ0d0pEL3F4UE5ya2RZdzNIYUhoaGN4WlRxVmZOdzg5ckpTdmxyenJINUlGUHM1SWQ0VHAxYS82elFzQUlHNDBuLzVCb0hCbDFlbkhBUEJ3R3NlQUorRkQzbGY3K216dUFnSy9DbG50QVpJeHo1Yi8wcHp1QkxZWW9uVUVJRXdVUGxLTHJ3VjVDNTZKVDNLQm9sUkdoUDhOSVR1UVhqaUZYNVBoSXdYS0REcnVaZWxFR3VZSUJ4ZjR4SGR4SDAvaHZ4NUI0UjRaMTUwVXRmSlMxZnFXd01Fd24yc0ZDVnB4YTQ0NngxUEUvcGh5RzVIV21Vc3V1cFd4R3diQmgrMDNEaHB6cnh0amxXdTdkalZhMGdJM0VqcGVOTHhveDhyeFdZekhnaXNFd0wrWGlvdGVSRjFySDFUQnUxcEFXNXhXMXFGcGUxWDQrbWlTT1ZSRGs5dFhCZ3d5VHh3L0kwTm9TWnFIbUl1SHh0ekVESVdwYU9YZUFIN1pkbGdVQjBJRzB2R2FWa3hJU3RpbzgvUkQ2L05WaXIyM09rVEpxSXlQbVJnYzdOTStSVExxV2htYzlxMXJYSkJUaGN2MVBucFVLQlpsYWhCNjRRV3FGY2hGSk9Xd0RCb2tXeW5pYmhjZW5nRXJrczUyY0wrUGkzVnNCdVExM3ZsejI5UW5YU1h2M1JWOTlCeDdmeHIrVlROWjJCS2d6WW9wNDczdDRnR3Zqb09hTHpONHB1Q3h1V092YUJDQkc2L1dWalBuZ3ZJM3hxeHlMYTY1bjBlcGFJajcwMUh6TG1BVUkvWXRnQ25zckswazZjL2xienBjeTV4Ym5lSHQ3NTBGRnpSdk5ZUVVBak5YSjlqS3NjQjl4bG1nbkNKZDNJeE9IMGs1dWN2b1FZRURIMzc4SytXMUQxQmM0aisySkpLaEZxNmZZNlVURENIUGIxNDJoZDBxczV4QXBhemZXYTJPRGNKN2ZJNUxYSUFUWTVSQVcweER3MTVQMTBrNXEvc3dYRmFlUHBIblRrbklCZml0Vjd3eDdxTU5jdzd5V1VXbElxQlowRkU5bllDNXdZTEorVkwxclN2K0ZLZG45NmpJaHdhWi9Gb01lWHFUNm1pOUFMSkFZTmFHNlduLzNUZk11MDR6N1FHTnF3WXU5dTdKa2xIZnpoaUhQdGdxZXNkbUYvTnZTOUtkK0JRS1NIdVRmRHUwa0lXSm4rTFBUSjZ2L2RNZWVxRTNXNFFJVjA0WFFLQUoxcWFYNTJ2Z2p4Qm5WK1BzK1Q1UVgwbEpySi9DVHBTL0FYVU9RazJLN1BKa25tUzdNSkdFOXd5TFYyRC9GUUEydFQ2dDlMamp3djlNVXZWcXZBNTh4MjhkS0QyVys3U3JEMi9VTitMTGJQbGwvbHIrY3RGVmdzSllVb0RjM1NvVS9kM2VVeTRxNkU2NkIyQ1ZObVRoWDY5TWlub0dlcFdUOXgwMWxHQmp6TlJDSUZSL29tZXcxMStQai9JeW1WWnpOU0ZsSTRjbjJxYVVNbFhqQlVhQ3RnMkk5amtIWndMNjE2SUs4M3VNQXRGR2tRd05Ob3hQK09jUyt3R2ZVUzVLWUNPRWJhRVNvUGc2VE1nMldQUTNwVDhaTXl5QUs1b3pZV1ZRN2ZwYUs0YnprZmVEV1B4TFBZcE9zdnhka05VYXdpcWxSZmxQVko3a05LZnJlVVZTVkRCSkRqaHRsL24xV0pYZ1gzVXBvOUhkWUlXbU9aeUFKcm9Pb000Z2wzNzhJcThYMjJScTNMdkRqMDR0WlJaRGtqTTN4Zk5jZ0tjT2NVY3dCaTQrMCtWWnhhZnJTbFVaK1R4TkdMZVNqRXRBV05IUTBMWkxuUWg5ZjgxMXZWckorcVhKMzBrTTNTTmNsRDk3bEtrc2FidThQS1hCUkNMZ0NSdVlOeU51dGNLM3FNUStOL3hpRlpQZk5kTkRueG1OaU5haE1mRzZmVkorQkZHWEIzQVFnMnhxQklPQXZ0REk1SmE3UVpzOVJENUFHU1FPME5JR3BNYzJRTVY5MDM3bE1XUXMxSURRQzVMTlJQbFlBdDdpU3FSRk5OdjhZWHNOYTBQT1c5QXh5NkFWcjk3aVpKVHdRVG9mQU53cHRaVzQ0eldjeEthbEtVdkN5bHNxdDY3bXpBL3A1dWlBZjg0b0hRNmkyOXFXejVVYUR2VHptRll2cDFvM2tEOHUwOWgvV29yVVB0UzZrVVRwOE05REVJaVV1YXhYN1NxYk85VVhCQlpQcG5rMkdaT0E1bUNDdEI3UGEvWGF2Y2FwYllnWjZ2VzJRcE9nekx0b0ZjUUwybE5QMC9tbUJLNnhMVzA1OURwazgwUFpCdms2TmZVeFVkemlRc0EwWkZlZTE1RVg3bjVFdjNFQkt1N1dpYnZobEdiaGhQb3ozMGZVdzFiSndwR29McmkrMlpacTM5c0R3eldESVNTOWw3R2dmU0tBSkVta2IxeHc4S2dCMXJxdG9kNldYYW1pdWx4ZzZvM25JcmdXUTV5MWUwNndjVitnbnVwTTMrTXhRd3JYVWFGUmhsQ0pCOWZhTno0ZXhjOUFZZm9OeGRMOUhxcWVQTGZDWUpOSGNDNHN1eitzR0t2bnF3ckxLc2tWRTNaV1hERjAySFhrb0xCeDlYRWZKSnBCeko2aDBNYlljQnQ5ZmRuMXNLaUxyWUV4V2g5d3dsajh5NGFDY2dxL1dLTnArTGNtSTM3YWttbG5XTk51RTFRKzNCd3FJYlRsZTU0MW0xa3lzSENxcndUSlZxZERzTFFiejlpazRYZEMzVlNZS2dUalVrdVJjY3drS3dQU2xGbGtnbm5aOGJ2bk5mNzlCajdXMSsyM2M5UFhYamtDV0VuR0ZxNXlvd1RqRU5zV0NSNFpkYnBnZnpMOVdSYTZnS3B4VGtlNVN2dE9lV0dlaVVpZGM1MldXNWFHYmNSNThBcWs3M28rc28ySnpReWQ4VDJmdHFSd3J4UjAyZHVEZ05DZXNtWitNWkpDN2ZodWlDTnVUczBqcmJMZSs3aGZ0ZmVYOEx6eG00UEdGNVFna3p3bnkzOUNoNnNRMlRhQit2cHcxUmIyTmRHTC92eURnNzJ4TzhsME9YcXVjdGczQ3VBSnZQbm55cll1eTI4Ry9KS1dkcmdOZTgzSHNrYmEzamwyUlgyby9PM2JrZDJxdTluL1dwN3ozdzF3NXBHWGdUQmhmU1h0bnFMNWthdmMySzgzSGhpRExGSDBBNmgwUjVYNm0xem1GYmZrQTlvVXdPUEt1aFBKSzArV0xqTXA5NlUyV1ArWHU4eEZ3VGNQRWlpdEMyWWxqSW1RTEI0VjlaWkQzWG0zc3JDS1dzVmtkUUQzVTd1aGRPMGZjVnI4cnJVeFplNDRSdm1TeFl3YkVKR1A0SDlpUzVMQkplSnU0VGJhMHdaM01iWStXTCtzRVcyT1lqODFMM3AwdC82SEJORmRkNEtBNzN6YjVOSll6VWU5V0RtM05vTHcyUkxtUGFud1hqYkl4TkRwdnN2bEsvdWRHbGVpZVBocklNVjQyUjVIVVJOVFRESUVGTUN2akVBUk5Rb250MjZHdVJRcGR6NXRlbTJENHFLdlVVNVBwWFo1WWtvUDRtN2doMjVQdW5malBXbmtxK1NOYmlJUHBuWDdpVnl2bGZSTTJPN2dDZ3VKYWlJRUpvMXgwNVB0TDUrUEVJQ21rTmovZjdvdTlyd3diTFN1ZlJUQldMVkI0UC9aeUw0bk56cWVacXNVSkFhdE5Ma1RqUVBUTzZreUtlSTQ4WDNNZkZDU3J0dWVRSUtxUGtzcldEREttU2RYUzVNajc0NEx2MGt1T3c1TWh0TzVyWVMyTFdBeVhnWWcwd1FIYUZaaVlHZnlMeVlxMUV6N1F1UkFsSS9sVktUcXM1cDM0SHgyWG9OOG4zdWlBREdkNU10bHNwTncrWUgzTUFVdVJyUGh0bWdWTVhkV0d4YjdPSHlTWkhRSDVhYTlha3R2NmpodUZHN3JxalcrSm9lU2tnd0plYi9mdmR1WW0yakFHYWppNjI5dmc5dDdoZzJDZkhnTFdoMXRTOGU2YzUyckNCbzdOa0tnbDJub1BIbTlXM0RJUWJYai9ta0tKWFRlRUN1a3dhYzhJZm50ZzJYODFHamx3VThHcVErdHE1OFArL1AvbGd5eTZ0dzRZa0RjaURMSkpuV3F2dmM2MUg0Y3hTb0xEaTAyTnBScEtBTklDVjNYcmhUV2Zjb0I2ck43dVNjelU3d0hidW43cVk2VVJpNnNhVTNDR1JUMUVESExacmdpQWE2dnJ6L0RGTWZZTW92WlhJU2M4VTZPWjI2bGlxTjFwTzYzRDFBODh0dXcvdlAyaDZYZldoOVZGNWR6cjdNclBNdWFrYWxaSEdEWFZQMDRzNjVHSG8zY1MzbXZOdTRUR2pZNXQ1bEswVFBuSXJjMCtCcEFrY2NaYlY5QlZJU1EzSUNDYUVVS0xJaFNXTis4YkExaTZZeU1sMW9XRXhNNS9GNjhlSDBGTDR4STBsWUZ2OUovTEU0cGFBeEVoZHFSZXJxZEVvZk1yQU9HeEY3WktMaHkrMVM0VmUxNkdTMS9DU2w1VlFTR3RWeFc3REdtVDJpRHlkQVZsSjhVNnJCMXJLMnhINGo1Vm5tWGZhK3l6elVRT1NSbUl2L1RWRUpvWHJYek9LdDZFcXFyTFp5NjFvRnZvME5YVUVudUFMa21hc2dPNlI1MlhZTWU1RGN0Z1BsSXBKSkFxZkY2cFZRSUVpM1drSEljdG45anAwVGJkaktQdkJDRXBwdWpkRGVuclA4QUI1QjFBdmN0Qm9vRlY2NmZiUkFOaTl1ZjlHY3FBb3E4L1NGRExPenJkRjM3Y3B6eXRXUHhaN2hVSGtQcGRkdytCemJBWmhTeXJ1TEhyOHBhZytIWEM0TWZGdXgxcFU3V0dVWmpBK0wxaSt3V2VkL3dXcGZOUk56T3d3Rzkrc1p0ejRGQjc5aktZWk1yd3VEbkJSeEVhc01VRnRQRE1kVW0yTGtjM0Q5MS9vTEorUU1OZldwUWt1cW9YY1AveDlrR3c0a0dRbFlnMWZ0dUVHY2x5N3dabFRRbTUwQ05oVm01Myt6Wk05QzdQcWFYWngwNmlyZmlTbmNETlRDRjQ5akRHRFlZVGNRWUh4cmR1TzJ5QW9BMWFCZk1lZnY0TlVTa3JrSjNYbkFsN1JXdDR0bGFRcURqY2duYk9Cck5qSDhWQlhrM0tJeXdBSEZwc2I4Z1k5cENxQy9OMHZURFVkZ3lZS1Fic1lmQ1E4N0F6NHQwREFEU01JNHFrWGoyQkZENzN4c01tRGtRaGFaMkVTcHhqSGdmMUF5Q0EvOU1UR1ppa0lPRjdvS1pmUENETDlQV09pNEJkU3lzcFNmZE5rSkhJREt6SWdSTEdQdGZadTlLQjRBUmo2NVNUYUlqUkhLTE1Ja05KL2VSZkFJaXlPSTh2Mk83Z1NVRDNmQ3R6dGs0amZEZ2t2a0w4Qmw5UWtvSnNLbEhOVmpnOGE1K2tMOTRQcForQis0Z3UweHFjeVFNVm1Vc3ZXMUZSdndQOEJYOUQ0STFZaDViL050WDBIRmZ0QUt0Und3MHlWRUFTcFpaeEtkc0JYQ200dFBPQkVLYnBQM2l4dUpGaDJrQ3BSRmxsajVpQzhiZHFab0Yrb3NzUWVjTUxPNk9oN2lBcGlHSEs3cS9YVkpXVHVDZW1mSjRtZmEvWU5FSE16ekFPK1AyYWhYcE9nRTNSdnZ2cExlZzJNRERyK1JVOGkveENuTU52MUFIWnBvT2wxWnlockovMmNMS1NUdU5FQTRHRCtXRitod1lLOFJPUXZIeThjNVg3cTRyejNwWE0wSmlCRjJxTGFBakpMTGI3enowK05iREcvUWpKQ1h6ZGxnZ0xnalo4L3FGSVpmUFRwTnVJQVZEaU42RlgreTBwYTBmVTdwa2dhVzlyVjJOYUdtak9wZDJZZDlTdU1BZE5MS2xBbWlwM0RVSG9mcWIyMGk2Ry9zQ1l2Y05YS2M3ajNuYmJOOVo1bGY0Z0U1NThYUjFHUFB5REF3N3BtdTRTMHhScmhvejZuUmZncndhT3FPdnhtOFFFVjFlVnJSSHlVK09JOG8wV0pDZllOWk9SS1FoK3htdjBKbkhNNWdHZzJydHg0cUpscnZEMmMwOGc2V25aQWwzWTUvZXVqMzlrN1dNTG1iT0Mrb0tLUlRlRE9OS1BiZndReEdNbjdoSC91ckEvVkdCRGFLSWRHWUQrdkw3dW1sZ21PbldnM2VPd2dUL0lNdXM5REVoaW9jRncvN0Y5a3dyaWFFK2ZEdEJSMmRQQm5Uek9OWXhkRWt3Zm1HS0QwSEpRaFFSVW5HWjZ2SUlyV3NBdUZ0dncxK1NvMmRCRW1kd2EwQTcvd0V4L0ZkMi9YOUhVaXJXWlozaHhkTEVlcndvS3Y0d2RzbmZab2hmdGtvWkptU3VlaXVHVlRjYllWejBoYkcxTUJSeFpXMzZ1b2hDSXlGenJ6K1lBZlBCa0dPRjluZm1KVUZQc2JBNWw1d0dGdVcwbjFEUS81M1JpK0x5VnBIYURvY1craUp2SGQ1a2xhSE5meDNvdlFCN3RnZ1didWUwWm8reFA5NFVqdDk0bGFIT3R4Z1FmU1JJUy9kaDBTNTZyNS9FSkZIU1NjNGN4TVVnZktFOUVvc1J1YVB3ZlFZN21uNmo3dFB5TnNQVEdUbHJNQ1h6R1pWOWhtL013SGY4QmZHd043bTY3UmoxM3FoSGFZZWpvQ1JUclFab05mRDlBbHZTS1U1RllGYzNnejVaOFEveTV2OXJxWkhnSmpMUFdkeXg4L01Ca2RLUEFsNWJiRis2cmZIS2FKS0VwS3E4S3dCMkVSTGlSTTVpa2N2OHJtREVpRlBUTVlwOWZvdGJkOGIrbTU0MnlReWNkeTZXU0hrc2xlekhVSjljT0NjWjBTNS9xWjdpSkdFWFRXbmdheFJ2cTFxdDFPZDVwTUpKU0pPdmljeXQxM2xQWVFYZG9hazUxTHdHM2YzMFAyVlQvaHdsZ2RuUVVXVkdmWHFYTGZvNk1HdWVFUTFDekZCeUVxVzAzNkoxeW1aRnEreWdzUklYRnJTRXdTckpCZHJOS3piVTlKaEo3eVZ6NmIvWFdBOGxsOFl4SUxQaUZ4SklMUlBGZGI3WGw0NWNscHJkZmh1V2FSZFozQ28zZ0dPTmFxSndOSTdSaEZ4S3Y2YVdCZjhkR2JWaGJqZ1B0cTFrS0FkTGZYMVhWZmhHcjA2bHFyK0didTJPQlFVTmN1WjdpQVl6ZldURWkyU2QxcjNxWXNLRFFYRnpXUS9pd09PZldhRlNyQUM5V0k0MDl0Tkdsb3o0ODR0ZmlhSnNRSWlTc1pqS3dzQ1NxZFpvNEl6ZXd2RjBteTFQejhFRFl2QXR4U2FCTjhwQVhacXBITlBjTURTZW1iYlZrNFNCd1lyM0hhTkRGZkZOa1FNNmZuVHNRQ2FQRDNpTitJZy9rZ1hpdGw1ZG9HWlZ5L2Zza00xTTVsWk9KeFF5ZXhvUnBSNFNDa3E1UW1EVHZLZi9jaE1OOWtmS3AxRVlmZUY5RUhoY2h5OXdQTlJyNGwzbStLR1NUTHE4aW90dFV3Ny9OaE5PSGNoS2ttUkFxWjd3QTNlNUdhYXdtaU11ZEZsdkRGNjVBZ0hNMElVSEp0M0NWbnJ4ZS9ZOGoweUJjd0dRbFpCckdnRE9wYm9ta0pZVFovMzZ3T0dXYXNaOHFkSDl3UXZxSEtCT0REcVFPa3ZNS3JpWUlCRnU0K081Y3hiRzJmUUQ4ZHA4QzdYVk50VEY2M0pnbzd1alMyNWlCRjdlSjdOYlQ4NG5uczJIQlRWM2hrZ2Z5cFhHNlYvVlNldkQwVWQ2d0U0SU5Rc0RaZkpqSnlGbGFKbDNrMitGelhLOVFTSFdHSmQrVXpJK2ZMQ0dYa2NOWnNpNXRqcTNyMElxYnQ5bTVPb05GQXRKZ3hwZnVRMC95VDdpU1J1RlFjK05PY1pKVnNxYlJiWENUbFJhNCt6bnUyN3JOUzI5R1E0RFl5VmE0Z2F2NWk0UThYdFUycyszREh6bVVWcmdZckhhSGlUVmJYYVY3dFFjNzhlMXBvU0ZSejdXN1phM3ZjbE5xZXFqbDJML1p1Sm1MOTJJZUtxb2ZtZHhYLzVmem5xZm5YRElKbFFIZEMrUkFOYnZhVjFlaVIwdkM1OHZBWVhzNEZIT1pFN1ppVXdZbVpDWmloWTdjWkgrdXMxbWlyMm1vUXk0dWdYSDRLNVdXU1I2ays5YnJFWStsZ2FNU05sdzJXSTFUSFViMS9WUnRnZWdBRjZGTWZ4T2JWeWJTOWFZM3hVcmNrV0JxUmRXU0w5aSt0cW45LzBOMmJHL1lNWTNvS29oaUx5YTJTcXFhbGNpVmdXYXEyd2NFOFdIc3dQOWlKSzFNaUtsaW43R3RqMGRTYlBHK2tMdVNQT1VkM0hObEU1Q1VWMjQvRHhPVDlyWUZXUEIxZnhnUEpvajdDbSttUTZ5dFNhRFZsZFlLL3hlQndsbVVJS3RBMEdCTHZLUkdkc2VwM2lncFNEbHlxS3Fpc2taaDJrY1BTME9nKzJFc2JqYU1XR3VTeFl1amtERGxUbXJnMDd4WGVuL3liaDFUY2N0YXhDdzNWUklqMXdxMkRlYng5MmJNYjZyODlzOTVNZ3hBYWJ1NllJT3lmNGtDeGlGbWN5c0JFMWNhY2hNZ1FsWnY5NDhsMnJwRU95Rk4xMTJpU09EWjhQNnpHb0hBbWdMYzN3SVA4ZVhUMDQ2bjdYbDIzUzRsK1NUb1N5U2lEdFRNb2xRWG1qVExlUHBobnNBMFZ6aDBZcjEwNCtMNHdIM2k5bVlQd2dvcmloak1PMFZnSnlRcHZmbFdGZmM2b0hWeGw3MTVVczJlNktPbWN6VUsvWjU1QW55TEw2RGU5NkNaeERpRE5kcnNDUUJIUU4xSWJJOWFReDMxbG1jVURQUHQ4L1JQUjVyNXFvUzdCNllwbS9XVmttU25vZ1BoWXJGSlRKaTA4bm1CTm40RVBJVWYzWlR0MWY0TnhoMDFEREJ2bkp2MHRXa1ZYNXBJdkRvTURlVTBzVExyL3MvMm1tNmYwVHJ4cDBQRWNKK0xUTHpxT0xreFlhcEdMdW9GY3d5N0JheGtGUzdYSUduNktRcDROcGswSnIzNGgzRG9Dc2VPajhuaDdiS2ErMExRQWlvbFp3RDNZbGFBRU9XRmtrcnZROW9yRm5KaXBmUm5TL2QxenllL05UZFRNS3lnK2xhTnNzTmpnTGZ3VENuMUpTeUNpeEtRbXFuVS9CNFErdVdseElUYzdPbHpMSGhqYWYvWEtWU2tqcG0yMDg1a0huK3dLOXp2QUdka3I4dkVvdkZCSmtzbFdGVkZXY0NVQWRMUmFLL2wwL2ZZT1g4Z2N2aXRKVkVRT0c0bi9DWEJtTmpqaVQvMlYvRk92QXZRcUtEVHU0RFJHT05BQTNKenNvTGdlMGJocDNDcEJZN0ZnWGpuTkl0ME10VitkVk96R2NVSjF6SU1sdDFQOHJnOVJaQW42ay9XanRDc1VOVDRIUkhvUXE3YUhqTXMwUzRxdTVXVjgvSU5aQ2tyaGdMdWtDSkxlS1pRajR6NHNwaDdJMlZHRVVvTXN3b1o5allkMERtY21LU05HOXMvcEl6N3NqamdSd2JjWVZVdHpNUGFNNmtOYUdiV1k5SjAwQis1eGxWdWQzVmtUTGtXRTdqbERPMHBqSiszYVBTbEdhaXF4ZlgrRXhBbkVOa0dpSW8xQ2lYeHJ1U0liR2FiZGpHTlo3QU9jWFcyVnNsbUFwZ2w0MnFrTHhzRzRPV203R0lkZjdrNlpEZVdibFdGdUl5TU15V3B3UHhzdUJqTDUyYmNybmthaGFrT2U3Q1cydXM3WGRHVzNOaUVzOVhYbm5yemhxem9LS0ZtK1RBTEFPbjBVK3o4bjBoWGN2M0JxVSt4RmduUW14Rk45eG5pbjBsR2RxNmpxRmhCZDRySEI0MWFnMCt6cEdhSGNnalcvOGhvZkZCS2U2SG9COFErbUVTK3drNEN6NEMrZUJDTnBjQ1JtdDlxOVlkeHFpVnZlUDIzWVo3RlZZMEtyMWNxTkhma3dLelJOYVg0UkdTL0JOb3loUVo0SzA2cllzbnJFZU5tQUlYQ1d0ZmFCT3loNnFLOERYY1NzQWxtcWt6aXpOUTFuNGJENGhyandkUDNkMi9MRjZWbHZXTTNJdHRjRmQxdkhVa1NMUzl0TkdQTkhqQzJaajNRMXpTRkloK1dJRndoM0tqVVR6eVBQVmZFK0t0cnVxdGhySmo2TkI2Q0FEcUcxdUY3dWtHQTgzS1kzODhoVFAwYmwycnZNT3dMQ2JSdXl0MlptY3Y3QW9CUVdvU0FpaWZXOEphREN4WURIZXZabCtUOGVYbDNOdkhNaUJqMURaaGZhZk11NDEzeHpMeTQ5Z3J0T01IdlRwbEQrclJXbCtrc3NWK1g0MjBxRGxqYzh2dlZ0ZlNrT1RCMEN0ME9aV0NBdHNzV0dBbWYyYy9IbXFQYmFVeUVmSGhiUk5zd3BRNTVsb2NCTmUzczRuVmcyZFdoVE9oOHZDZFJtMHF4NHcxTTlsSGZlc09WOEJmTkR1M1czUTUweUc3WGorYkFJQmdCdmNFcVVINDZ6cmE2Q3BNa3Y0K2kvSHdHMDVFNGhsNGhTK3NtdE5kdFJicHdFRFIzdTZlUG9oNUNFZUJGT1l1MnVnaFNJSjg0bjJkckl6K0FlUG5HTE1PWUJmMHhBRmpOc1g2UGZDbS85Ry9VWnBPd1d5MTkvRWdBUk5ib25YaVJaN2UvbnIzcnBFQjRZbVI2dTc2cFRJdGV0MTZvZTlmTmNnVWlpVWJYVnRwR2tJUUFKSE5DSnJqSGJxOEFPUERGZkJuLzJoNWpmaEU0VDhJVGhHZ0FPL29kaGxDQUZvK0dpVzhUNElzNlFmbEFmTGxpd3RHQXZLK3FEc05vV3ZuT2RnajVTSHRFdHhsTjNXb0VkZlNydWJ1ZW9Najc2UW9jVThKRHVTVE5ZWnU1Z2J6b1RHUTlpNVZyTzFYMHBxTE9HaG9vOExKSE11cG9KSGFZYnRYRWprZW5qZE1PbGN4OTBncUh3UEh5Qm1vWDR5bUhSZXBuZ0Z0NUk2L01xbEZKTmVYSzBYVS93Y1BwMXd6Q0FGQkNCVmJRZldSR25PZWhzSGF6SFFYSE5HK21jSUd6NmltOVI1eWdpMzBWQlRMYXg3UUxRYUZmOVhySzdnT2w2RFRkMkoxRUk5N2dxN0x1T1NyVzRySlJCM2V0cjQycGpldDMzaDk2RGNLZlMweWxwWVRmR3dZT2JidU0wMVZqZlhjbkxKZU8yT09VSEFUcERaN2c2TU5zeENnaXdPdjlRTHo0TnJTTzlhR0E4d2JkbTJVa1VvVUNlUWpVeWpqb3phbTI5RVpDQllteWNJcUNYZWJNcXNGcWhZZmhCSG9mMXdacjJPV0hCRDd6Q3daZ01URUluVVlOSURVTDlrQ0pvWUF2cTF3akhjR2dNVTlJVXFBTVdPdWxRRXlxc21SQW9oU0loREJtS1NKUm91NlFxY1Y3djBzNDBWRDNpR2J6eVZwL0VXdTRad3lpR2VWWlhxTjNqSzZodVFyN21ZRkE1S091OHdSZjR0UmRwYVhxMUxpQzJBc2ZWYUdtemt2Tlp6Z1cyWG1JMXV4V2RUTTRhMEh5ZFlJK2U5ck93RTd5ZFhlTDlRb3pralhtRllqQlJnNHdqTi9qZHVJWnBLL29HQkJkN3V1SDUydURqN2g0bTgyb2R5OGJyZWNodjRvWENaeFVZWHhObEo3dFg0cHR3RE5hVTNJQktiNWgxY01NS3EwUE1wY3JPc0gvbzNPY1p0L1RGMzY4YzhCMGlZYXgxS3NyQ0R5YXBMelRpcEszb01EbnlpOUFmT0ovYUx4TmJLblhKT0tBSHQxekh1aVh3V0VPTC9iYUd6b25QYWE3dnU1SkNBUkhxaUROLytGb25aUld1TE5KYUUrTkVHY3dyZHYvc2ZxZWZGcWFGQ3Q0L200cUFySTU1a0owZkh5R003SzFEN1RYRTJqdjdWMkgzL1pBK0RGRThDUlpZK1VPSW9RakN3N3poSnhsTzNMUE5LVERDTXM0YklVeFFSZlN5Q1pTbnEyMG5aUisyUWI3VWJpRXpnbkQvUjgzYW03bFphUzZnS0MvaXFlZlpnSnJ6WHl5OUtteEVNKzRMMFA4TDQ1K0lhaUp1OXRiaGFTOHBsNWdSTnp3NU9rYldoTmJaWDZwZlJLanp6UDB1Y1ljT3luUjh0L2EzY2wzTUh0a0NVUm00NmRXUHV0aVZDdHo2RXZHOHhZVFhVN0ozeUR4ZTIrT0xDNXd6ODErck5taEtwdDNLUEdnbTlNTVhNSnpmbVNwY01qS1h5dk5VdmlxelJOOFhEYlRnSXYwTHB0ajJQVC9YTXRiWVorTEZVTFdmR1VyL3pNcHFKSDYzQ05Ta1NQazY2NUpCd2xwOXR5ajlkOEpZS1hhaWY3NlBybmNJYVY5cENvaWhOUzBEbERRSVMxbllIVDJtQzJ2eFNNZjgwemVEOGYvbmRlczF4QURIRUNzZmlqOGtZT1NvK3A4ZFFjOHhzNDBTTXo2M1Zza00xakVkYkdjczBSbFlzbVRWeHFSUmtuR3JzVTVxZVdYNnF4ZUVqY3cxcG1LMk1lRmRrTzY3ZHZxK25samRQbysxMTczVnUxZy9QcnRvQm5wMTVFK3k1L1VlNmxpMGxSL0FYZGp1a3FxakRod0w4eUl6SVYxWkRSRnF0UzEzNWM5SnB6SWFQRE82aEJoQk16UnowaG9JMVhabjBrVUk5eUhpOWlQNG1jWkU0elZ6OE8vdWdJcVN6cVBKQWRTQWI4LzVwV0dDUHliNGY0S1dxYU9tMjBTS2w1bmFZWUNPMUR4VW0vS0Fyak1oZGk2cUVYZnYyTWJxTUE1Y1dNdHpRR2FnYnNZTmhwSEFkVHY3TUZEK0dPQnZIa3pnZHpOOVUwek56bVpUVU83TEs3MEJnc0NNQmNuZ0FKU09vWnFUaFk1STk3c0FwNXN5UUVsTHhSMWFqOXVVbXNjTU5qaVJJUnp3Y1dtdE9UREdBbGJaMy9oSERBOEVZMEdheUo5RFQ1SU1sL2ltam9oK0gwS2Z4L25YMVFOQ3E2aTNicnFVYmVyUENteE9CNkFidTQycnZQMmszOEpZWTlZUFpYSnV3MXp2Q0NIQ0V3TkZ0eUVKeTl6SklNSlVHVWNvV1RrcndSVFo2Q0VpRWJ6MlQvMjMyYTBrK2hoSkc5akhoa2RLWnVDanNrdkM1cGxTU0RuMVlHWFRjSkhneExkWHcyZDZOY1BuVlVZV3EvMm9pMGNYNCszWnVUZFZObmZybGw4a2JtRVlpTndqK3pGRENUVWNuVFBiZU9PbUx5ZWxsMDFFdktnSy96a3R3MWdXSGJRUlNoNm1TTVR2L0VMcHRaYTNwL3FmdE15c1BEdC9tak1kRkR2YTI3M050dnlNZit0NjNxM2I3VUx3ZzAxL0pobVV5VlhtQVJWU0w4bDFBUlpjTFlpSHFueWJXTzVNaWc1WnBkaitRTFRzbHMxdmdrY0tzLzB3OS9uQ3lSaUE1eGVqOFJPM3F4Tm5FVktkMDV2NUUwZEgrZ09GSjlQcG0wU0MybjJSZ1hESnhacWZBR3Z2WUZOOVVCbVJBTVZXbUFXOWNZeXh5ak15L2FCUHdqUEo5ODBYV1NaTTlTdU5HR2QweFduWFhHTXg0UEZhZXBrbTFmNEVXSG1iZEZJWmhMSzFwMklFeXYzTmhmV0oybWQxc3NTcWVNT2JjVjN1d0NkQ01qcjBVek0zMnJRRDJzU0xNZGNGeVJnV0FLbkN5MGdQNEpDbEZ1Y1FYZy9KbWlUL0s0UlBiQkFXMzlIVlhvYVVnQ3hFZjVtVk1zNzFoeWJQQzJDMTNoR2VwbktJMjllN2lvTWZCaGFMSlhKRVk5RE83MXVpT2tpWXpEN1ZIdk51aXo1SC9ORFBhZENCR2ZtUW5PMi9FU0dsVXFONXQ3VDBrZ3hCK3pDRm9McWVpT05yc3NKZHZ2Mnd4Q2VJNEw3M1ltMkkxVVV3WERCTXpidTZCV2ZCbkxtU2hQazhmR1hSV2N1dm5KdGdTcVVFMnpHTU5DMU9KL08wUlhrYnJRNElzQnI3b3IrQ2xUUU9oZm81K3B2Rkg1TStKa0oyaGxrbzMvSzF4TWVjUEthaTZSRHhKQWFaYlpyeUY1S0QvZE1GVzlPWm8rSmhKamVmYTIxc1FGUGpBb2FTWnh5WmRWWlB4QWxRUmpPRlJ0OEdUdjhEQjQ3WnJuYXpEbTJ5UjVaTVRrSWtkSXc0ZU5zYzg3YTBHVldnVVl2QnEyNG5uMTVLeTJVNlFrb3dxYlBqMVdVMXg5YlZQNDc0WkhqeXFHM3BkSUJTUGVselhtUUtRTVc4TSsyak5aZ1lrS1MycG9oa2tIbm5qVVRmUW56YmMwSlFHbFZCY1htRW8zTmo5bGlaTml1NzNVbTJXeE8zMjBBSnViL1ErY1hiV1RKekdhM3N4b0szeU9HYmM5aElnMHduMlBpOUdrVVlXWHY5aG4rR3A1Tlp0QTVrZHFDTXF2NDF4TzNFZFR4S2tlZ2MxejBNYjFFenlvNGJ2L3cvMnQvc3FwTEZOYVVUQVBQdURYa2JWYVNBUEhoY0JGeVJwSWw1NzdHREhsT2dMNEx2bXkrdzFKdVBVSmtHdUVscHE5dlVoR2k3VjNxVktpTVNuSzVQUWdYQkVySGUwR01NelNoWmtPWFpWNWZLVzZSMWR0cHVkdzFneWhQN0Y5NytKUEdyY0htbmRtVlo0R1NXSGdPUEV6WFplQjU0NW1MbStjUk81MlNSeHhIWGJJTDA4VXFoSGk3NjErbXZ6VTQrNzJWYzAvcDVCNHVnZ2hIaklmQ0tpTWlBVFdPdWZMTmV4Tjg0U2M2UDR0K2RFdmh5eTVoZGJaU0lTL0wza0V4ZUZadE9KMmtnVVk3aUZWMjdFa0diTi91MlRieHZCaUlZQjVwRnpuYyttcitPNFZKdkE3QjAwbjVib0tNMDArbUhYNDRLRlBJd1kwalFEUUlUYjhqQ082d1pDS0NOWkdPazBCSVVCbTNhM2hCdHFXS3VRS2J4UHdTbGZORTBtajhiOXo3UU9kYUw1ei83c296ZnVhT3hWN0xkRDZJL3RXbzkwemVzYnBBWkw2Q2ovQ01FSlUvSWFLb2wyN2FJNG5sSGtjbE9SYjZCTFNrV0psMkgwamJvU1dDd0h6VXBmOGtzcFBzZ3A3VFdRY2RVY1JIUXdsOFdZYlpQRzVEUnp2SVJEWHMzbklmdGZzRjBFcWt2K3dtOVhQWFd5ZzFON1ZrYjdiV2VXN1VUKzFFOEJ5UkxzMmlzRG9zeXAyUnEvRmxYaTdsaHZPRUdCenZpM1dSM3ArbVdhUlpONlJIUVFaZDVnQzc0bEx6MEtRSjRIeG1FL3JSV2MweWZvWDkrTVlxbXZYMGEwRGdFWDdacEgybUprbnkwa3k5OTF3K2VXQmlHdXhEUnEzTWFlVnhHeE0wKzRVZCszVkRYclJGZnVOVEIrdCtIVWxlNXdGWGxleUE4MUwwZW1ONzVMNjZvcEVCNlNqMkJBTXY5aEhEMGFaYXVLazJPbHcwR0YxbmRZbHJxZ2JEZmpMSWovRXNOWTFmaW5tb3E5aHI2ZGt2cGJXZGJXY1hLU0dwQS9ZVUtDeEFPWnUxaDhnWmpwQ1VJcWJEbW9iWElUM1lGcFo0enNncmtDOWtHT0hZNEVwR2dRZTBpa29IdE5XRGV5ekNIWlBWNFhsYUFCTHdEZFE0N0tscXVHYmlZUm1lMUM4Z3dvRFp2dGZnYjlINUtrQVVLR0JxZFJmSHBvVVBkbCtERWpWQTVzek51dHFlaE1qZS8zemtEM21GRGZvYTRMallPbXpGNmdzd3RlQ1JUamVOdWdKbWhiOTJ3NUJuSkZMTld6MXpSTlN0ZzhwRlNWakdHNFN4dWJOcDAwdDNXZU5kSnNUUzlpd3hrSUwyN2U1OTRWT3RwaGxTREFnS3ZHVXovSVpiRXUzcFh6NWdkeGRsNHdUWjAvQXFiVnpRbXMyeXp4bGJZNXZQdDhZOWpMa0kyaTZRNlUvMHhPc1cwKzg4b2hObmlpZXkwZ0YxTG9LSmdBM2lLUTFzS04xR3pubkJIN2FTSXp6UForbGJRaldsdUxtb0lZVndwYUcwSmVBMGc2SUV3V1VVanpaTnlRemFmWDhpZ2dPUnoxS1RGUk9LVzdtZ2hNd3Y5WVlpcldHYS8wb0hiVmFyQVloeWk3UVI4WTdTaWlIRHAwa2F5NU5LSXM2SC92aG10MU9wV252VS9kbjUyWC9ucUEyWUxmZlVmOTBHa1U2ZHRjK0VyZlVNMWtCdXVlZWRLOTBrYlF0QmpyWjZoOVVYRlpsSCtCUXIrUWtGV244QlptRnhmZzJFL1QwSE1SQi9idDdqSXl5bEJRQ1lsYVo5aXVkazV5d2tqd2JZT040WGxsNUc4RXhobU9uL0NvbHg1L2JuOURhR3lvWXpnOUd6Tmw0V243OGRWY3VDYnAyYjlMeWZFb2k4QUZTSFJCMGY5YzNQcVhmWjNSTUsvQW9lWUxGK1JTcFVCMC9DOXlCVG1rMFlBdHVRZHFmZEFZZmdIKzg0RXhWMUZLWEZONHRLRWhjTmZjSndUaWpIN29lMVVwME9vdE5QUXFTWmttZ2YwQVR3SUg3QlVnUGpWS05JbTFsdG92SEZsRVB2TVEzMnNMUnp5QkEwOVAyZTE2QXR2UmxTVGdKaDFiVUZhMmVITXlKeEEzSjFFNlo2eENrTW1rQVVYTVFRQUo4MzNxbTlNZVFKa2xUYUt5RGpBY0hUemRxcThEZWQrbGlsL2ZRYUR0N1pQMStUV0RPSnd6SDNQV2FWY3pSUXZWczBQYTJTYnhnSXoxOG51ZXc5WndDd3JQZjVZWm5QY2ExaGV0UFEvRVVYa0JFZDAwc3lPdHp2UGszMERoODNmYmRnZTMxeVVQNkpVbENQRXhEWkhTMmF1MG81U1MwRFVNT1pSNGxVa0daUVpFSjFvNTZ3WXErY2ZoWDE4ZnRvZzU5UGtad21ZNFdCWThOSTd1TmhOekl6VWIzbGtwTnRKdjVtTndOU0NBK3UyMFJNRExob3gwNk50WGt1UHZPeUFvTGZFTTdocGhyYldGSTlVemQ3ZVVIVThObEtzd21PSWxXZEdObS9HUFZjS3BzV0Nkek4rdU9Lem5SRmFmVW9UOGlDU040MnJHT0xHTDJrRWpDS1F3ZmRtNmhrVWIySzFHajFlQ2VzNmpxWjYyd1lUenkzVFlIQU1TV0REQ3BrYlNuTVdkdFhYVkpwTWx6ZVptTkhVZXhJU0JXMkVCWDdkUy9JdE5CT2N4S2ZJWGVZQlduTEh1aTduMXVnZS85VkxqdllsS09HSjkxWHJPUng1aUw1UFJza05USTBqV28zTXptdDA5V2ZBZU9wT0ZoZTREdjdNckJ3NG8ySDlWRWsyeXFGMStOc0NjbUtCL3kycEVoWndLc3cyMjZHamR2b1FBdnRPVEo2QVFHWkpVSnJkdmdRTVNzRDdpRi9mUDQ2Z2g2NWpQNGw2VzBGaUZNWkVaK0FkQmNXeExtYkpRMnlUelZtRXlwWnlKQWhGWi9VbDUva1c5ZFRBV08rYTJvUDVMRGNjSURMRndmZ3RQa0h3T0xLWVdVNHFpNStyRjIyUHAraklKZTlLOUdRQ205eEhLd1VLRU1QbHJqWU1KTTFhc0xOSkFkbHBTMm11eUR0RlpZcTRIZW9raExHTGFqK2xveFhqajdDajI3SE91TzRvY2VFZmp5b0tpeG1mRzZtSytLLzErOUxJeFhaK01Mdk9iZ1J6elJ6MjZvR3VSNWtGaGJEelVSM1FseDBUdXVJVnUrbWlYeDV2U05CRG9Pa1ZLdXhlNkNVcjFtODlGTTQvS1dPL0RqRUp0MlcwYmRGdE4wOHhWVEYxdDZtQkpFdjhxMFYyM3g3cktpck9rdkNnRFcrRnV1Tlloa1lFVkE4QnNTVFBWNjc0eEhwek5FdnJ5VWV6R2V5OTh6N0VrUGFvZkM5c20rZ3ZxL0pDaldiRVZGaWpIOGpOdkhsVlRkY2xHaW5wYjBpYUJOZ05FajBTY2dmOUxCeUNPc2ZhQkI2TGxPbldKMkxMeWRYd2J0UzNpaFlZMXg0ek80dDZNWnhSWHovUytyVUdQZmE0SFo5cHZPUGRXcGwvVVRGT2VFeGFlVE9lcUg5SitUQjFxWWdlblNPUmJweEFrQS9wN2dDS2QwNi9tT1BuYkZOUjZpQWhoWTVESUY4WVViREpZZHVoSjZlS1ZzYitFMWx1UVlLdHg3ejZEZUFPNCt5WCtkYnZjS3FpOEFZNlF6Snl4N25pbWduNCtDZnlIUVMrYlcyemNRS1ZnYkRwTDJhNzdOdkdyUldXQzJ5Rzc4bkN2N2R4OHl4alRRUWJqbVp2bXg5aisyZ1YyU2dRNWQ0MzhtSUZoOHljaXhWODFiOXZ3N1JVN3F4UUNFUjRZMkNBbWhZUHpRZGs2V1ducGtyUWRwSDZPcHVhYUhnUCtOL1dMdk5vOXpCYzZVWHNuWEJUbWJ6eEMrcW5XVStDdkJNNVVOdndnck44NTgvSkttejV2VUdnLzE3bE8zSVJ5d01lMEJ2UEdoMHJoTG9PSnBqZzR2ZVFPdmFkYXZ1Zk5QT1RROUdyRURZdHhDeXViSnljQ0dTbWVDZHludG9BSDQyZVZIZVhmYjR5a2VsWDBGSzYxTDNFTWRFMDM0RHo2cDB4cnlPSE5aazNWYTk5WkdwV2hLRXJ2UEhUYkpiNmdGTHJCRlBmNkdRUVY2bTQ1MVdpMEg1ejVaWXVtSGZtQ3hLQ0NvVjNVb2M3VExuanZBeDkwcUx2TE1UWFBIYisxYUhBMHZsMGxBaTRJR2hlT3ZMcjFTZllCSjIvZXlPTHB4V1RmNUlWY3NIOEpTb1I4RjF2eDg1bjc5Q3NXTkhoVnUySXMxeno0cmpLZHJvN0hObDZaVlpHK1prbGRSOS9lR1JQb0EwV2Jic3ZCdnA5bXdtRHZ1VmRBcWdNamdFbG1NWmg1QnNLV3hKdUVoUW52Qnk5Z0I5QjE5Y3RVc3FCbFhBMi9BcnB6T29YT1JQZ0FGZWFCWU1hc2lXazlLNnRKZ2RPdDJ4SkxyTmpNT0kybTNsL2UwbThnbXRSdFRvN1NORmI3RTRQVWFiWXhmR0trWTFiOXhkYmo0T0srT29TYnBzKzc0QjE0M2pnK3I5ektnZnBCRVI5di9tM2dTWVNwU0FTYm5iMGRubGNUSHN1QTJZZzV3K00wWE5MU2syZHdZUERZOEdSMjVzZmRQcEgzb0RPZ2F2SmxEQkZJYTZHWEFJWEs0VnVtanE2L3U2bHR6ZU4rYUtRa3hNVk9wWHRkclgvdWtBTkNLS2hWbG5PdFpsTjB1b1ZnMXhiMlU0QUZkaXEvU3o1MFVjY1BORFUwc1grREZEQ0RmN1Zpd2d2TnVub0k3T3AzQjdHaGtsbjZORFBSNE9zV1ovYWZXRTh0REJjTUVHeFdWVGQxQUM3SWJWY2c3eWdSWGtCcEVTclRybjZERVBlRmNjRU1nTHJTQ2NET1hHaGs5aEVGUE9kMlJBS3BJem1sb05VWkc5UW96b0hxTHZBdFQ1Y2ZIRzZTUWtoK1J1MElyU0V0R3ZsQVJ5WERTVlZaZURzam5yS1FXY3VSNnQ5V1VDU3JXeFdFN3NGU3ZXNk9JcUlEMXBUTk5wT25jcWIyOXd6YWhhVm1lOGlTM0toL3l3M2tSS3V3YW5aYzJlem1ST0JYcXltdDFZQnpBWnpMTnJrRDZJeDhlajBhc0I3Z2VQaE9wTDBEajUrUm1jWGJMT1grMzl4OHNpb1NmMXN0MG9pNFNnMlUwZDE1Z1c5c09ncS94R3hXb1hMbWR5c2FURm1kQU9vZ0dueXZscXJvckhMeTIvTndSc3ozUSsxeFZTa2tiUVpleTU4dWszK3JZK1RkL0pKZUdtaG1aMlZzTk1YZzFpZWdlYmg4NnY4ZXJOMm5GYmNLQUliTFN5cnpDcWNIOEdiRXY1elkxT1RmZkVmTTQ3Q2RTTWRiSkQzMGRwWEFaRThLZzY2cFhQd3ExdzlHWjZLWFE3WmN3VW5wbWFtNk9ONzlxN3ZvZmpXaEtyczZUZE5iWFBBdmNmV3hoRVJvWHpwNDNDeVJBeEJnZ0ZaMXgzdENjby9YUFFFV0ltZy9qZ3NoM1IyQlB3eEFZQ3drYytCcTQyVDB6cXdISk9pSFdWbndRSjZZYzE0SXdpdWlsUWhZcnZwVHFkNllGa3k4SFhkVHI4cHozRE90ZWE4a25xY1pEYzN5QzBBWkxlZDZ3RDUyMGd5bVpTaUMzS3c0YWdBY3owRFRTMjA4ZzRjSm9SUTZ5TTBBczhmdTVma20xRERVSWFqL0NSZjNBT2QveWJiZTNacnZKTUh4ek5IcVlQMHkwOW84bERXRWl5TkZsU2luMXVGckdKSk5ZVHNaaHNNNFg3Z1orMTZQbFZwMlRjQUZvRENBVXZYb0VTQ2IvRGVQdG9kb3AyY1Z3M3dyai9RMFo0ekhKL3BoN3RQVjBKNFU3UEsrRkd5Q2k0NFJySlQ0QUxKemduTW4vTDBwN0ErS2NRYTZBc1hKM0VFTkhvR0txVVY0cjA3dGVwc09xOUMrczhZVEgrbCtUSGtpekpNZ2gyaTVUV1gwMTlpYitCTU1YdDhPM0drYlAzV25nM3ZFRnBmREsraE9nRFRQZkxOVnJHRmx1dGlQQWJTM0w4NnBjenRXbElHdktySEwzK21jNlY3U3RCc1RjM2ZvaVQwdDhrQ0Eya2kxQXRxL1Z4bFhudzlGWTR5S3g4L3RMMUFvaEs2bUYwOC9hNVdnbUlONkZMRWRrQzJ2ejJaMVlqNERJY2x1TURIUmxoL2VXb1ozSHNwSmEvOXk5cWEzM1BJWW1sVXBQYm5sM2RsdC9BTlp2WjE2OURUZjFUUWFFem9BTCsyS1lRaUVnWWxlL0ZVRG03UXNPYjdoRGFjRWh2YUdFRFpQdWZzOVF6MUFFeUZNY0hwaTVQdFRxaXRaZUN1UzdNTmZsOWRJbmFLOGE2QmROS3R3aG9RMDlHM2tUK2pnSTJlNi90UnBUOU1tYXZKMTZXRDd6dHVVYm9nR0RGblRXblUvVWVmb0k3K2cvWGludlYya0RDaDBWUS9CbXZsQmE3VHkyZmNHaWZIVkhXU1ZCTzEyYUVrUUw2MUJwZEgweEprL1FJcjVqb3RiT0k4QnJ5VXduS1Y3U3NqTVBWcTVTZThldWJQZlJKalZOTXBPbm40MDVLMUxpVWdCODlNeERaNmFWSXkyMjBVa2RIb211L045QjFWUS9lLzdBekF6N2VHQld6cW9KbjlNUC81R3BueUY0UDhGOVgvNENBaVlIVGg3Rm9HYm80dDlmckFLMnU1THZkd0dXRk1EN1hRV3Z5QjBTVDZqQm9seWNUVUhPZG1lQzM0ZkRaZVJMUnh0YWIrdEJhUWloY24zUDhiSVd4d3NGVlM1WDBhZ0pHVWN3RlU5clBnMDZEV1QzemFUQzhMbDJrQWU3Z3k3eVB6ZmlCcEtCNE9URUk1cURVemhrV295SGtnbG9ZbnF1YSszUmwwaTVtYmZlQUovUDUvdHlHbTBsa1FySnZZcWpiUTl0TjBFbWxzdjBQejc1b2ZRMER2WXdTalc0VFRFWElFNm9hYjFlazhXYmV0WGdwMm9PamlSQk4wdm1hWGt0US9TVm9oc2NxVVVXNUFoRDBrc0xZYjlUR3JLTE84ZzNyUmNIbDFNQU1kcmdHN2dJYURCYUJCdGpUUGxyYlNEc1ZhcXN1N29SdTdldWRyYXhyRTdyUDVRU0RRYTE5aXAvSUk1K1J2dkdSSlBsWnB2azRlM0dPRnJXdDhRT3pxSzNvSjFUUDlSVWptaFludm1WNjJIODZFSTg0TU9QRXRNKzErZVV1WnFIRjF4UWd1d0FFeFdRZDBjOWM1RnJqWWJIcXZWV2JTaHNBRXpsSS9OM3BHYmFLZ2M4QVN1aHZFL3hTdlEvcmdPbUVGZHM2RWVZeWVnY1hNd2JaQ0YrellIRDNwNTB0WHp4cFFrQkpjQm5CcFR2N3N1T3dxWVNsSkRuQ3A1OFNRdGlNdVdiSUdFZFpXaU1aNHU4N2xUSXJrYTdMYm5Ib0xKT3F4VkI2SU01WjcxMVMzVmNoUndBUmp0MU05aG1KMlZJSlY3NDErRk1PY1NhSTFyUmlUMDRBTndCQ0NacEs0V0MwaGMzWTRweDh2ZzVKQ2wvWnFsU0g5VEdtR2xMR2haWmV2elpEZXJvcFhvM1REbkcvalRlRVRwVVlCMzBVWi9lejFUS01jTnkrK1F1OEZTK3NrVm9GcnFaYjhad0RGc1pqVGxNV1N3bXJMODBxbHpkK3ZnMlhITm8wTUVBS2czOTg2Q3Y1dVp4b2JzeTIvZWprMFp2RElEWVMzOS9vK2xFRUNhejNWNHpaeUdKT1A1YWl5VkVlMTNCS3ZlMWN1dW1rU2ZuV29VUzdnY3FMdVdtd0tGSzcxTG1IcGxxcyt2M3FrMjBKZGNSRXZNa0ZuaGZJU1F4SjIzYWYxak5FeTBjMjZLSUFZQXZWWUtvT0lpbmFMUnJqZkw5MURrV28xcWUwMEkyam9TWklvclBwbVgweDVJWlY5Qm1nNkFvV0orUTZWMEdHRFA2OVYxRnpZTzhaZzRUU3NYa3NMeW8raURtVnAxRk1PY3VlazNyQ0daNGY5NG40Qm1maUd1V2pnSVRIQmhZNTgwMmk4WlFrcHErS3U0NGpNOFduWWlLWmJlZmpGMjdaS3JLbE9PUFJHK1lTU1hTRjlFQ2N5cnFRS2dFYnlGNVQyeVFJczdNVUhiMG9lbGxGQ1dXanc5RmNUME50SElGbjRzY1c4cGNQOCtGVkhPcnhsby9FU1dUaDN5NSthbGphQlNyeHpBRWVUSFJBeko3bWUxYjhDbzMxSnZMTExmODJDRUJIdEwvcTM1SWQ3WlVsY1ZhU21KMXRrTVlJdnp0QjFhelpwd3RpcVlwcGhTMXRENlVobWtFS05vVXhXYVJMUGtXQjBKd2hIaVZ5MmphZmRaMEdCUVBWODY2eXpYZE1UdFd2c2srNWhJNHF6RkhjVWVJWU5JUmNMMUVtSVJQMWxFQmFuZ1l2b3VjVk5aOTNqUnM1TlVpcTNZV3hwaFdiU0JCQmU4cGpTUldpRkZLd3N0WXpFWVFxSlZpYUFGdUZKQXljaHJORE1lcnIxWG43Mzl2QWRsVzJHRmg0YklLRG1DQkFGU1B6YUFZSnhhNjRCbE54QUN3NllvbVFqZGFFSytOMHFyNW0zeFd1QUZYYUlQeGxZMHlrT2UwWW11cXdkMytBeHBXb1dtWHF3V3djNHBzYU9SVFN0YVlsdmpxS2l6YU9LQTYrSUswYi9OdWFDLzhNa0NkVHlEL3RjNlVwcWVubGxvUHZ6cyt5TTk3ek5NZEFXSFVVYVJjNUROSFhQWEVqSDdITUhWQXNtRGpQc0ErNDkrRWswa3VwS2o1TVB2b1I2TXpqMGd4WnNYOTdsWjlPazFtaEoxYW85KzNjUitycmtuL2R5cnpnWG5qUE1QVTh0Y3h0ZDFtUkJmSzFxenZJOG5uVkdyZVh6NjVObVRDQ1MwRDhkcHdrOEhwWC9UT2Y1Ym12eEMveC9UNVBiai9SS2xVYnpZMFQ2RnU0YTFWTFNJbXlZVTNKK2dDNWVvY1pKV08vZEJRTkJRRU41VHVpcDViazhidW9XbkN6WG1oQUYxc3lJMXo1d3hYd2dmQ1Baa3U0KzFoeThyZFNta0l4aTJIWXVnUWQyS3lRaXF6R09DRlFVRVhWNmN6L09mMTNDNDNJRzNLcDQzMjlPREx3OWJPZkVqbGRUeVNuRlkrU1dBSWxyUml0WXoxMVkvTzV2Zm0zRXFaNHBtekZYaU1mVzRoRUJzRksvejFidDNLY3RmV3ZMY21TKytTeUs4VThlVGZ5N1dPL0p0NVhXWUV6RDE5SDQ4cmVub091SnIyNndjcGwrMHNXbncwUlA0MW9tMDdBM0NhZ1pRSUlnN1NQSklBWkFIS1MwSjJSVmpnbm5MQ2NNQ3ZrSmtLa21RTDBvNFdaZDhIcG1LaTVmVFdHam5tb0xOdnVnREZaeFpGWEZWTUtuaDcxVHFFNHNGS1JBZXFaNWoxcm5EYlNHMWV0dkIxRUVHMDVsT2FqVVJZeTgzVmJVQW1WelM5ZjVmYzVUTUJWQnJrZ2hNc2ladXR6cVZTbzNrdDQ5TkE4cE82ckpZVTVpYm02aitFVVdBU1N4YUtGV0I0bmJYRDJiR0pzdE9ZYjJTUTNZR25ZZ3dVNTkrOEdhcUx2a0MxcVBMWjNaY2MvQWlCbXdubldKTTNqWW1PQ1RhaEdJWmZvbmt3VmlJNit1OUdsQkVGYXc0U29NeWJwekdOL25MNDgrenRoMXNXbWhHektyWGROeC9FdEFVMFIwd1N3eDVBYjV4ZUdQdDd2YXFnR01FbGc0VTIvaUc2SzQwRnlLdjlQZC82NmloMS9sekhqZ0dKbUtZWVYvcGRwcHBpN3d0NzVHSi90RnY3VXMvMEUxR1pZcHJtVFQ0dkMxMU42bnBzYWtJOHF4OUFmV1dMSmJ5TkRiUjlYb3JHZDh2Ynd6TnFia1FFVHRuTjBaamtzNGs4bTAveFNhK25zKzA4NHE2V092T1V6M0ttc0ttRjh5TUdneHFxZCtoVDVyMndldEhDZm9QSGZtNTFtd1hEV0JManBkdGNMNnJiRzN1WnJxSzBxenpCUEV2cnlyZU00TFdiREtpUzluTXpxdTRpVVNrWUpkcy94dm01TlFJaTBCN1Q3NVZzT0hpM09RWVpqMURkM3NIOS9NdDh0a0o3VWZiUUtDVEtWR3lZYjBjK0VldEkyYTFDSVFxWFlGbDVpWXp0cUJKVXZYcEk0YWNBV3BwemVNbjlzWk83VUxIZHB1NXBnQ1BOelB0aTR3OHcrNnB4MlVmZkZCSGFpY29MS2NjeHFvMXFuT2hUbVdkamw2YTRJSHpFakxzVmNuenk5ZDFiWFRabTVGUjNPL3BISkhxc2xpR2FKVUw3Q2lraWtjajVOdmRjZXpiL3ptWGpqMFE1WUxWTmI1Yk4rNnRWUHRwS3llUGVEYWt3a1J3cXU1dkU3RGFUOTZCb25UK2svQmsrM21vQVlCWUhCRnRzYU5sbmYzQXEvVHdDRjFhaU1YaVJMcG1PVC9JajAwVzNoQ0ZBbnBPWmh1cUN0enNEc2ZIOXpYU1B2MTNEWExjQ25QUnNjZjR3VjR1RTFUaENGOExHKzl1NGFRMmdTSG9ZSEhYdVg5eklCdThsV05aS0hiY1R2MVFoTWhtZFFkS090V0twL05oUzRVTWFRSHovUm1aSDhkN000a0VmM0VMeStRUGUvOVFMOFdKMnNGNWdIZTZRQmtmWUc0Mkl5WTUrazlUdmZ5N2ZPemNsMkZWZmQrS244MFlFZ0M1QTN3S1lQai9QbXllektBa3NYV2dyZTE3cndSbnNuU1dvbGRWTFFaVVRpYlBOMG95K2U4MXBmTlJSa2FUbHVJVE1ZV3g2bi9rcjFzeEh1dTRFWTNqNXhvcDQ5ZjlYVVlaWWFCbnJmOVQ0NmQyY0lRM3QyZmxsZEJmY3lnRUljdUFIVkdxTlJOQmFwZlEwOVpBcll4VlFhbktRQzBiM3hCSmJ6dkczdVZaUlU4c29YR1lxRXh2MU84Vis0ZS9zYSt6WitkVjltbUtDbDZwZmZhTDIyQWh3WGtPV0pzY0h4WnZKVzJyTDVQSzh3MUJBVUNoK21oMlovTGZvTTdrL3Q3M2haRWtIYW00ampOaW13Zkl2WHVRRGczZUVPczNyaDVRd3p1eW1MRnRUdFE1ZEFabklMTE9VamVwRytnbkhRTngrMCt4dnRsbjFrVi9UK01SdGxSUStKNVR2RktzUFYrZ1YxSkhieXJJdm5zR2g1Tlg4Si9YaFNEVHNFWGs4WWVpS3drU1dKRkFmdnFwUmkzQ1pUaHZLSkt4b2h4NmdkNE1yRUd3bUxSN2taUzJpRXdXR29VYVljQXMyWjFMOXJRbW9kMUI2bGgxNmFJSTdGZC9SUFFCNEx1R2xkT0p5WGlSdkJnRFFMbHdVY0laREtnOXVwNkJmMHdGczA5ZXZ6b0o5TFdvUTZkOXQzNUJHeDQ4alFYL1kwYktjMnlEUGFya3dMVzFUcWJnYlVWRmRtQzdjeldWd1JldXZjUXdzVlh2Vmw1VkhwZ1NLUzZISDBEMjBQczI0dFhnQUVYNmxhL2ptL3NDbW5OZ20yRmhSb2NmVy8yclAwY3FNSnVoc3EvS0pmRGFGSVVzdkdyNjd3VFAxK0hBeUhENU1wdjZkYnozMUg1dzhVUHRSRDJ4b0VnM2RVRVIrcmYvWVZ3aU14c09WNkJNUS94NXBycWhBb3pzeUpDYW43THpqNFZ0RTdIelI0SVE1Rk1SYWpsVFpaVXh1MlVNY0RUcE9VdUJUUUZoMDVhY3owekNIbldHRWZDb2g2QkJadEFFN0cyUU85ck9CTkluRG9GL1RIU21qUXhLcnZZQTdsM2llWHNIUERlYkhWWGxLTEYvcmJ6VndqNEp3aCttN3hBck1BS3RlQVRUVTBKT2ZDaEl6Q041aXpnU2RGWXc3OE5uYVROeGlCTFp4L3ZoZy9jaGpTMkk1aFJ1dE80WEV2WThHeG9FOVVtV2VqTzRDZUZjTzBPRjJsTG1FQ2QxMmNCL0hCbzkrYmVrbk93RC9Db0ZrSlZIamNvN2FFQkxvWDV3Z3cvOUZ0d1hEeFJzc2lhdHpLOEJRVXk2RGNkcGZQRmFuRUtJVGdxUWFvVWdtLzIzNEwyVVQzMVZpb3ZqVFJuK3hZMHp2Z3JJR3pvcFJhdnhILzkxRU5CY1FvK3Z4dDlZRjY3TlF4bzJuTUVmUmlWRGZmUmdxMW9yZXQwWkxTY1FuNmExVldPYTZBeEI1MHRsTHB0KzRDSHZHQnI2cTBhckVaZ3A5NzlHK2t2cG9EUDg0R2MxZXdtbitCUlg1UGtjbGp6ZzRRWWY2dHBYYms2Qkw4NThtUk1xSkJZWHlXU0FyYkpvN3dycTBlOFZOWGZFL2hHUE81aHdCa3BYbUNRaEpBNUUvTnpBMS9aZWRoT0luOGt0TGJkMHQxT0diUGQ3UDRzN3J0cEo5dlpSNS9ORlk5S3ZZeXVNNm1SWm9QeUt6OTFiN0hpTjR3ZXJPdFBlL21pdE5lYWhwQWhYcVFuWk1zREZwc0pFNFpYVGU5RGpRalo3bHhJbm4xdUs4L21RZmRMaHBlNVNTNjU4dkpucE84NFJINnlSOXA4aFA0M2VKMDJ4OUlvUmpTZ21jRUVDMjlyTnJzejF0VitWbEhsK0lySkZwdjRrbXlwTTNoWEpXbEF6ZlpRb1lBRjd2NTBKbjg3bE03eVViTkg5ajdHcS9XZlNnSFBPekJvazRzaFhkK21OdExIYWdrUE5YQ2hlRVJSVmJ6Wjdad2twL1hqTzE0TllSQm5SQ2tWaGpmUlM1RXpkOWUzWVJEMFYvRU9QdU1BZmJDMEgwRlh2V3BZMlJ1d1Nqb08yTzg5Snh5bWdwMjdRUk1KakxLck5EeG10NHV1VXJkVFYyc1llUzhja0IwM3ZobllwOSsvYUxNOGVoaE45TFpHVUszQlV3Y2ZnbE41Q0ZkcUxYWktLYnBwelJhZ0tNWHlSbUtCRk54U3JBZzVBNUtoNU91M2Y0N2tCVkRCWkRndEdBOGk5dUpGTkpQWkxXZXJwbHp2T1JTSW5VTXJScW5wRHg4NDFiZjlsa092YzBxWUx6eWQ0cWIrc1IvcHBkSGs0TGJGRkI5V2lhaE4wYkpmVkFtWDJzR283UW1UNXNIYnFnWnNBTkVxYjdPVmtUb2I0S0k2UVUzcUNUVG1zUEU1UE9mOWRvMW1zcWtjSjZyZkgwdVBSVDVwTGVVcWVkamwxZ21OY3lwam5CRldJcHNZK3VjaXVaZzZObTE1c1hhVXVFTFVxUktEcmxyeHJIZW9tZCtPOTRGbldIVGZBL21lSVE5Z2YzSVVSZXpsVFR5ekY3L3Q3a3dmOHg2RmFKanVFNHlkVEZXa3o5MXpBSExzc09CRTFaNWIvVUxqc2d1RFlKNC85YW9yUFQxUEFmN1V6T0JpTlpBeEZnZ1h1K1h6cjdqcG1MTWpvVHF0ZGNSRS9GRUMwSktKZUJoYmx6cStiN0RVdnFTY2pLZ1pGd2FRTVExRDdWN0RFM0E0cUl6a0haWDZkU1k4YnZHd2NaVjlOZTJxRFZDMVZMSEt0YkJWdWV3NFZsYTdtSE5iR3lWNmYwYzEzbXRVZE1HeDNWQ3MxeVlqd1ozYWdlcTFSK3JlWEN6T3pMNVpaZlBYam00ZEJkU05Lc0liakhFT0xjTEZ1WHBtZkx4ZzdSTVBJZUNxZkhlTWlEZE9Gbjh6UjIyRUZEeUI2QUJMcHdPOW1yNVhTd09Mb0FOa3VrQ1hYUTNWQTkxK2JmL25lcUpqZS9pTGN2SDF1Wm0yaUt1d3NwTTBBaFZZZmhrVzF4ank0YVc1S2tqcEJuWFFqWitjSUZFVWJ3R1JZMzhML0NiczJhbHBQdjJ1TjJ5bVlzTGNpRDRJZ1ZPREZqTUhUWkw4UGVHNms1TC96UnB5bVlrNE83eXF5cDUrM3pjdnlnTWVJeVp4VGtxVzVPOWV1c093Q2VMdE9DUm5EU0FpZlRtQktoUW9HdCsvMjVYMG1FcTJzR050dWZZMnRsVmtGc0hvRFdTWFlWUGZkTnBUNjEwU2pmZHYvZEZlVXhXbTFaeHRLaXZjVnE1M0hnSVhQRVBubGRVQlZBa2hPYU5PWTlkR1FxUmhlaEdEcWNzVDJnbHpHZXRYZVlBQTV2VjJ4a3Q3V0JkQkp3ZTBJT3pBSTgrNGQyUStaM0JVZlBHN2VVSk12U05BRnUxU1owUkZOWUlmbkhyY0ZCeXQ1WXNPNEV6d2dTSVlnOFBJdVJPSVltMEgxL282Nmd1eVp0SVJlYzN1MkxuSEVtZXREb1NZdlBZZnJLdDBPMndEZkxxeVBUUG95d2U5Q29jdzVZMFNHWVNnUVdxSGVJVzBYMk5oa09BemVqZDNrVzBMRWg1bE1UeUZmVWwvSml6OG5pdW9VWjFNRDlZK0F5SnVwcHVndis3UlJQSlExQ3JOZE1ueXQ0eVE1Qi9XWTFTZlR0UUhGajVjZ3Z5STg5TkVLaTlOSTA4VXRGdzZRNEZkcWZZdEV4emNFZE5lcXFSUmhzd2dOS0dWcVgyYXdSc0ZnQkxQY1ZzUXhxSWp2QVhwUGVPVXVZcENLNkc0alZjQy9zRjg3WWtjUXZZQ1l2MHFOODI0UHIvMVBTcmhvNmgvUEtycmZpSEtBTyt6RHJDVnpCYThCblpnMVY1cjVwZTJBNFY1NitKTXI3OHRlTWpZcGE0YUVEWmRqamdNaXp0VVhIL0huckFoSWljMm9uUFBtVHRLQm9vWHFLdlVnRncrWFZsWCtqeGo4VFI5bmlWcVVValVQcWN6cUd6S0o1NmQ2Sy9DV0R6M3NoRjFxYUF4YWhPaldtdHkyNE1mYjNDanhJNW1aYktDZ3BlWnI2dG5ibkE2Slg5UjNMbnZnRDJ2Q0x2QnhFNVJmUmZYR0x0U2NRMjdBdEN0QkpSQ2Z3aFhtUmdjL01mUHJWZ2FCT0UyeFlLS2tNZXlwSGx1bitzMmRLL1FtRElvTmdISzFBMUdRY1c3VGFIVndZZWRWRnJDME9oanBGa0xpUU1kUEdpZXNhVGxpTTVUL0VJUmVDQ3VBRDQxc2k5NTBSYVRMTnJqSnRFU0UrRm43UG5YRGhxd0ZJNlVXUnRzaGZZY1hTZE1TYnAwNzBpRUNFSGZ2UFNGVmV6WFUzZXR3dUVzTjNLSWVlbE5HNjBjZElBdElEUVdwaytKbFA4N0d6Lzd3cmZyeENiMUN5TmxyemFXNkhJemYvbm50NVZhRWtXa0dMcHViQXdNTmxZb2FXaE9reVcxdTl2Rjk4VXZMc3MxSkwrVWZDUlFaMm53MVFaYm95ZHo5aGlJMWZRN0lmdTM2TTJJbkkvTi9xcVg3cFdTNkNRbFFpRmtEQmxBeGQ5OEJEL3lFQzh0UTVGTy9EaDJ1bk9pZlNUeU8rdUxWZkRNUG9rdS9UYStBb3ozZ2ZnalFVTkI4NysvWGM0VHRWTXZEcTZQamRDcHJHUE44S3NuRitwaHdSMmdjWW9jM1Q3V1lIL3BKc1lsS2RMWWViUDNZN0pQYUlZeGE5Qlp1RGpaZWxZdGZMYk5uRVhuWjVnU24vRU9wbHozOFFGK0dOZWFsZDU4RHBJMTNFQSttczhkSmJEZW5jZVk5NzJ2TGhIblFaUWtDengzVnBuakNEWEJrOTgreW5EQ005cnltR09RbkE0TEp4cjQwRzJ0RWtjRyt6Z1ZMeHZBczZWSXN5Z2VmMGNvb3Q0RDhkRGNDV3V4YWEzK0czbnlUcE03d0psZFZDSWdFSzFzWUVEcy8xQzdNV3NPT2hCWnpPQXNQL1VVcjJQSDJmbzljVU5ZN0d2N1RBN2JhN0k4dk91YXdpMktEMVd3RXFYcTVpYUduNWdUbU1sVG9WeG1xd2FobXJOZnA1blQ4c2Q0NkJIN1Fsb2UwNW9qZG11c21KOUV5UXVKVmpkTW0zSll6UG4xK1cxREZaT0NRaTY0WkNNUTl0bkdOVEk3cjBKZlBvNHNqU0pPT1pvU0hzOEFxZDNoVktXUmhibitDd2RmWXRNWE53Zm1zU1k3RjRTaWkwOFpibTc0WFpld3JoQStLdzRzV2xhVk1COFI4SFY0QmR0ZHVyNEdWZFdjOFZSUmY4cUlNbzJGRW5VVHpPUDNoajBUUzNoY3JmSFI2N2xPV1Jvc0w2WHR5Tm1ZMlFzaFNZNFRSMHBzNUhIZ1JYaHcySUxYQWZtVUFqOGtVTU53MTRJVEFqY0NwazlXOUdDT0ZYVWJ6VG00aVV0NXJBaHZ0NElva08zdzJzaWdGYlNUWWVuSmU1OXV1dlNISEQxY1lROEF4ZSt0c1dxdlpCMjhjUjNZSnc5VlJOa0pnNlhuaWk1dHZUTzc1NENvcDFwVXRhUGR4S0UvY0xkMFY4bDI4V2ZCUElkRStPc1ZkNjdoTEJkMlhJelg0Mno4RUxwcFZtOU1FZllhYzhCRnExQWhRRC82dENRY1I0M2F2d2RlYytqSDRYT2Z1ak5vVCtoWU53d2Q2L1hLSHQ5YjV1OHVWaDJsMVJjUlhNT3NHVlBXYWNSSVUxcm4zWnNzcDZydUFITXZBRUNsV0c1aU0wM3I5Mk9RNGFFM2dIVjVRdlpwMUJXTDh0OUgwcjBzQkdieVc2S0QrK1Y0WUkzRGtISzZmWit2dmJsK0J5M3RpaGV0eXVwNHlSZ0dmQUtaTENHelNMVXA3bDZBbGJscU9uUTBOSkdIb1ZLNlpnL0t6ZUJ0TXNhK1cxeU84K3pFdHdSNkVBc3hJdWVkVXpzM2JSRVZaMXpOcnJFekpIQ2Q2WVhTZDZHVFVtK3VzNmtkY1A3cjhoR283UnU0eWs5NWdWa3kxYzVYZml0MmpmMzJqTk04NEI3dm5lYngwVzBjOGZHcUZPeTJ4ZExIZmJDRXk5a2NGR2x4SXJpNGFvK1p4eExhL0VGNkRBV2lVbmh6SUlMMnN1RjA3VUUrUFF0eWpvNTUxbTBnZGpwU0hkQ05zOTQrZnhlM2VnRkd1RllwMUVORVVnSjRHelU4eGtZZGdyT1ZkVDJEQiswb09icERFRjVpUWRXcjZGNWtTNXVocXVkV2lLNUlMTkhMM3hESENISUVPUDhFZnhRWkN3TGluZmdXNFZqUDdzckorTTBzb0hmQUh3M2tCSjRkRlZjZTBmYWw2RTRBa2lDREd6RHVZZnpYbHBObXk3cjBPaFdLZm9CTHRXUXhxVmliaXZOTDA1Z3dIakNsaHhXT3EydnF1Qk9nNFBNMTdLSGpzQzdWVnpPTjh4SzRmVzZNMDd6cVZOUVZPQlhIbDFkbHJCTlNVcytIVS9vZTZlQ0NLS1RVbEd0SmtmWW1QdEVxL0Z4UDJsTmRrVHhZcUY3YnQ0cTc2cjNJNWREb2NqdTVTMjhqTlZNNitIclB4N0VyajRlM25DdGVuSjc0ZWh2TUNPZkFRbkxZN0NiditSKzBTMlNQd0RqMGRUd1RMMG1ZSm5zeXdEaXloZUlqaGhDK0xWL3AvV1I3K2hlaDZ4THZrb0tUbE93bFRUS0ZJSDRoUnYwSDR3dXBlVHV6a2lGVDEwTU9EUkEwZ3JscGJEQ1pZMVdIOExYZHZYU1d4bVBvcnViMDhwL3BXaWRVZkFta25JUER2ZUcxclJ0blc1bmZLOWFTR0ZtbFdMR0RSNk1DQ2ZyMSttS29PWG81dmZSYWRHTEFLL0h5YnFDMjZ1a2Q3T2daYkNPbnU2L2ZTZkFjSWVja3REYlBzMi9teDZHVnBxb3FDOWZmV1hWVEdXK2hpam9HTzdpSWlSaXh6Z3JxbWRDakh6cDgzOFUwbjRsSGZ6L0hvZy9SZ01mcTdEbEZ2TzQvdGN3dXo4ZW5CbytvMEJvdHNNNXVqVzhjVUgxWTl0SHRoZU43NlVBdUFVcFNoVFBDN2Q0bTNwMEFPK1hIZnlYUmpyTFJHNTZXN2NqR09CVG9jUXN2cStVUm9Na284bXcwQ0tZQmxrWVRIamlJMjVpeE1xYXFrTkxPZmE3Rk82UXNENnBrM2NXQmJhT1h2UzJNdmRZVmVmK3BFT3lrTnZXclRDSUNCaDF6VFhjMmE4aDkrdUMzTXJjbFVuSC9IMlAxWUhSL2IwaHl2RklrUG1OMlZKWFNvcllNUFVRM0R6eHFGdTkzbmxVSGJKOXZNU0R2RGtZWVhQMUpEZnRvWWt3cDllUnh1SUo3SDd0VmJCUEREMjhWeERSTzBteFgrclFKLzZrVnhpQTVFU0h0Z2hJRkpnTzdpMmZ5Z1R3K1hRemRHeHZkNll5eHVJUG9hM1VXSThVbHdUcVVaRDNnUUlSUXNFUUwycm5oWGx3WVY0bWtyWTBZU3V6d25xQjhLblNoSTk2RExmYmlybFAxSXRoMFJPOEJqbExJd0pnbExpTmJhV05oNXlwL0dpTWMwc2lYWjZ0RitXY0NhN0R0WVpVRTNtZSs3aDZmT0JOVlFkNnIxZ3kvWWEzWGs3Y0VSeVZ4N0kyMnZaNWFLSWxldC9va0NyTWJ2NVN0bGgvRjBlaDc5MzNKMDBsbk5MRWo0ajNLQXV1YXoyOEd6NXc2SHVPVVhJbkhaK001WUgyMCtrZko2ajFVVnpYejhsQklIeUpXZkRzbkN1YWs5cDAreWVNSUh1NzFnOExHbk9QWlptTTg1aTFvM3JUVGE3QitreDdYWnNwUmQ5eE94azY3RE42MzdxSlVKQVNoemtUWkRtNTEwb3pSZVRjdGl2eTJHcm5rSk1xdGw1bmRpdjd6bnhOcWVTdFAxa0tnNndKYWdhTmp6amQ0QVdhTGl3ZUFlZnhwTmtESWJ6TXp3T2RNZyt0R29rZzV4cGp2b3NaZzQzbm9JYkI2YndrS3JYQVJxNm0xMEZhM0dSb2N5aFRPS29hMCtValdwSGczM0hJZ2RVaEU1SGFQaXhSUDJkL2xicEdMM0VSQ3hNRWlkMllEUXVJWVpoR1JOMjNQSUZrQ2hoY3ZIZ3B4ZzRlaU9iTEJrZ3RMU3UzdCs3STRmcXlyNDFPREkzODhpWDJLZ2hHVGhnRTNyMEk1MmxMamU5K0ZuU2NTWm0xSzRuSlBOZkQ0R3VyR2RaeGhSeXRCTVNCV2ZYL3k5YXF2UEpYSXNNVjRjOTh3TVZ6MzhJTEwwZ3NyY1lYWnppaEdFNXZBWFJvcE1XN2d5MXpoWllrVytRT2EzUmNFd2ltc0I2dmxLTFFRcVVEcmZ1TTBpSTd5VzhIZTB2aDB0RDBQV3llVWdITkpBMVQ4VmsvV2wrQ3RQb3M1ZjBKY3FudENESEpDc2h4MGcvU3V3QStUaGtlMnl3dlBLcGVRSFNXaTg2eGFzV0xHUFo5aXRSS0V1TFB5dE84NjVBZzJCYzFrcllqcHZvZ2VlK1NyWkNtVWI4T2lWQVFaa1lrUEEyWjcwRDh5Q3NHQ2M0RzRuNVFJdUZhTmI4UVdLQXFSNHh4WDFQQVQyNXVHYUE1NmxFV1JsZDQxQzcyamw1cTlCUkVUcGVROGdSTktjWTN6ck1zcE9tc09RRm1ybDhtZlh6eWNNQWU4QkhMVmNuY1F6clRITHRzTElVeHFya2QxVnpKVDF4NUJJVHF5VVZmNDBvZXRMd1hFQkltMDl1ajVHSmQzUEU5YTIxT1A4Z21BRDNOMTE2YjA4MElqeXNyWC9CZy83bzJmU29Ia0RIcjZJdC9RMnA3b1BJV0dWNWQ5WDZFTVpSdmFldUdsdXhUOEl4U09xNWRvK0dFNFAweElNSDdwR1J1b0R1eUZjZStNMXJUYTNDTFMzdnBPb0ErUzhwV0paa0t2QjI5S3M4YmdoQkgrc3J4Q3c5T1h2MERwdEFobkJUYmdESUYySkpzeVNaQ2NGcmVSbFZOOVVLcUp2Z2FKdTRWR25IemIvQlNKK2dLT3U2dnhxWmpCWkdsSitHRTVaVnZmVUtBVGtpL0wwQk5MaTZCbnk2eW1JRnNjN0owQ0gzUzFmOGZJTE9CdlFuWE1NMWtadklvRzNuSHhtS1FCUVVQODJBazZaRWhmYWtkTjRpbmsydUU1Y2lCWjZtWWFCS09udEd3QWg1UzU5V0thVlZ0VS9tZGYxaDNjTnlSZDMxN01jdXNQRjFsWDFIMFRjVkV6aldLUi84NUt0RXBOREhHVE5BbTQ5MlMwdDY1WmhtVk9oMjkyclE4THlOUnh2aWZ5TlB2TUd0S24yS3hqM1g1N0dMcVhEQXA4clRzVUFRZGg5N1p5MUFVMVZ0SDFJNGN4VVl1MEhYem5iRFBQVDhPTDBzUlNUbTBNcVp3QzF0RzM5MFRrR2NXckZUM0llS0dBQ2JQRWpwcjRMcWdKZm9oTW1CZ1BXeDJIZmtXRUtSOWp6Q1J6cjZwWkZGdjZCaFBWV0hsQTFTcG52V2hEejZ3eUVWc2JIREdnMzBVR3BYOWFOSjBpRGFtVk9sU01heHVsY2Z1ZHRjdTR6c3I3N0xRdzdHb051MnJnSjUzYTZ3QlU4VzlVckpLTVBlRENRQi9LbHMxWlBEd2h3OWJLMWM2SG52TUF2c0VGUWRlNlVUb1BVRkNmUDBIa3BRYUROY1NFYkYwU3dzcFdXRXhUUGNIVERmN1hXN2R1ckNrVm1qOERuNEVyaURZT1lxSmFibGgvckJ6eW0zVlExZ2V3dnFMS1VQOGhvUVQzUW1jODFWK2EwY3d2Z1o1Y1NTU29oaUZhdnBvazRGYjFRT3J3NmtPeVNKQVJNWXZqYktubWN5TjZMR3pHcGhkWGRDbnFoVllmUmR4ekg2NXZrR2pyR3VGVXRhL2NSL0NaS2Vkb2QyT0l0RDloTTJyZ1Z0a1dUaVpuY1FsaU9ndkZPR1didHVEcjhwSktrYTA1ZERFVWowWFFYUUd0Wi9nQjJxenVjNXhnS1FkamVsYlA3YTZEMFF6aS94ZlVVbThJRUp3ZDQzZ0dTaUZwM0ZXcGxmeTVuTU1kbnY2VkdCUDNEalNqd0lqbENITDQvRFhTZkxrMXVzWS9KZ0xWUDY3Ukx0dFpHMUJpT2xIY1Rxejc1ckZjZjVEQWF5Zjd6eHVzZmllVTVtSzh3MWRtNWRSMUF4VVAydnZ4Zm5XdHBSeXNJR3lEc0dIN3kxczl5VlJXOUFaOTZORHhPZ3JnbFVTbDhQS01YNXQrbkUyeEQyUjJ1QitxbXRJdDNHVWNEUWxyK09uR1ZiSWtOYklST0kwR2Zyemk5RjJ1RzRQdHBIT0RaNFJKd2k4SHAveWg3RzRwb1kvaUVjMi9YTTVyUXNrYVR0V3JFd2ZoTkJETG1BL0JmdGdyWSsva0xORmR3bUJzNkNnWWFDM2kxUjVqaTVkZUV5SFVWMGp4T2FQdjdPQlBXVUFmZVU2dEhFS1FwZ3RJNzVtZXVCZnZPdmNwMWxFaEZNcENacXNhakoza042dlI1TWIzZG9ZVGdHZzIxcXBnT09KMm5Fd3REUG53dFhOUkFSdlc5VmJrRGlPN25PTVFKNHQ5U2ZTa0dVQmQrRjZ4OFhGTjhwWGFCM2t0RUI1elppdlRFS0FKZnNHeFY1SWVYOVdvK2NlNVlUeHJFUHJzQWZrVEgzUW8xNFFpSnRRS1dEeGt0Rml3QkVoNndmcERwOVRDbWZwQTVKbE1ONEVaZEwyaDZ4RElqd1cybHlSK01OKzRkL1pUNHl5V3ZXci8wRTZRQzMxWFBUMHQzNGREQWVLZGVaY2EyYnNQWHE1eWFSSUhScDR3c25vbTFiWHlHSC8zbGxjTStHNlRPMWpVMmwzcHQyaktIT1RkSlBkWjd4MEZMclhMcmN5eHd5MlJXSnpHMGZWbEJaZVNZaXl2V3Mrb3J2NWxFaXBlb0YrU09pZ0x3V1FNZ3YvZlZITTNCWTFKOUZrOWg3UXd3VkZ5elZOK2w3UloxVlhCMmV2OGY3U0xJdUs2WVFkeEoyMWJZYmFFdXp0VlIxTGFmdCtSQm9DUHVkZ2l4M2xwMlhHQjdYa2pqV3JkQWZkZUJ2WnVSSHBNWXR6Unc5UUY1eGpIbTdRekRyTjhOa0xDYi9KaXFDajZEcWdkOVE3bmNiNTNEMjlBWE94OVNwTEVVZVdjS3dxdG5oL2lxQ2hiczVlbVdkc3JZY1ErSjEyM2Eydy94aGpCNlI1elBDb0tjVi9rNjQ2dng0U0UxQWRVVjZrZ1hlYURiY0ErMERWeDdrdENPazhpSkhHMTdkc09CaXRsVDRxS2tPY2ZRdEZUTVo4d2FqcTgxY1paWDBaWE9GV0luZ1lMUkViZ2ZsL05ZTmN6a05lL3Y2N1A1UXg5aUJkV0I3anZiN1U2bXpZNTNZRm02TXpOa3gwT21Rd0ZrTkZVR0ZJSjNLb0Q2RzZMbEs5VVNERWswMUx0Y1h4VWpPck5WcVJ5NzZ0eFpSbW5ia1Iyc2dZVTNmNG5DaVgrOGlqVE9SMXdzQm44YVY3UktKWVJINURiRXk4Zm9wNk04NzV3RTFYQU5RRWlaZS95bk9HK0Q2elRLSnVCZHluTDMvNEl5Q1VyNmF1czl3d1RXVElXNUZEcCs1MFAxeUFpd0tnZnpacExFcE5BU1FsbDU1U0lSY1c4UFJUdG5SZWZYLzEzUDEzZWYveERGVkI3OHJ0Nk40SmJhcGN5aGpFaFZYeWJWWjRoMktxZDVRRExIY2ZKejlpY0k1aXNjamJQdWJZanI3L1BXMnFMMmwrRzRIVUlSU3pIS1VuTWdKOW1nd2dEeklUaXVDOXkvQ3BPY0J0ZGhEMVJEU2lPeTY3Q3JDdEFSYzE0TW90OTRpZTVnZnZFOGNZUWliNXZ5cUtGRkJqa3pFSkNBaHdXVVFpYi9ZcE5KUUpxd3llbHIrSDBKcDNuaEZ3SkVnL2lBK2JCYUl5d2tYbkJmVlVrTGkvSUV2ZE80TllRNFc1REM3RVdDNzExVmJnQ1VLSFNlRXFveUVVZTJDSTZPZWp0STQvMTF0UGx1bTJ1elJSb3RId01nN1dMUmd3R3FhZ0FzLzRZWStMUmlEaDhqWjc0NVRkcDFpSGJPY0N0ZURRdE1JSUE4NkxBckxPeGJ4b1VSNDEvMFRQT2JRejJyaDhMR1g0ZkJLVXNJaXFJT2lYU0VQTVdjYUhsUUJ3Tlp5bURYYU5IS1dVNTFYa2p4TlZNTFhtaUxLVUFzbXdYdmVuNTlOL0E4WCt1WHdTZWRsclh6NFpVOE0yUTJYMmtHa2hZUTUwT0tuQ3k2YWpPUXB1bXBjZWRuY3Z3OURNRHJDL3NUOU5SNFJEMTRvU21FOGlZTnA3QjJEZVBtckQ1a0hWL2VHQzhjWmlxOUtML0hzM2svSHZIKzdoNW5yWHNPenFNZUZ2QXAvemdZSHExRUhlMkErYjkxV2E4OFZ6Tkl4UTE1VHl5TkdIV3ZFaWpJWVIzd0Ywa1ZURFhyWFZXU0tCVC9aTkNjY01jS0xkazFlRTR3V0hTNW1aS1lVYnFWcVZrdXZYbm95dGhXSlNuWGQ5aWh4Q0dRWVFGaW9abWxVMWxBaFd5L0psY0VCZ3krWlhKVm5zaVZLaXB0VUtWZU85L01RV1RUL1VVSEEyQ2x4cU82NXZQNlRGT20yb0xFMTJBTTl4QzZpRUFtTTF0aGlvdjA4VjBtZTZKVTNKM3dOL3UyR3Z1YWx2cGRlNGI3bi9yM1hjWGRZRjA1UVd6MjZUQzl4OENHRithbFEzMVoraUdSM3F5bU1Td0N0cWRvak5KY25sR2ttQ05IWGVsdzI1dkFKVmFodzRkdEp6Zk51TFVZcmhCbGp4UmVmbHBTMkxLWk1aZnpwbkFzaG1oSEVRS0c0UFBLYnZaZFdUYkhlaDRmc3lOemxOUFdXd21GTHNEdi8zRUN6Sm9aZjBzdTFqS1NhYnV0b080anFFbHJaQXhWcCsxcGhFMERWUG9veDhLRUxRTW1aQjJHVzBjbjg1ODdLNFNZbnlpTXBkSHdpUTA2VVRvcnQzb2J4UmE0cGh2emZIaGd2bGRDSU9zZllRWTJ4MVlVK2w4RlYzc3Roa2RtKzVtamVwTDJJczlhTVRyenJLanhzbW10UkpDQ1hrNnl2K2k0Z1ZyQVFYZFBCVE0remFkLzFKR1Y1c0xZaVdlS2pxM0p6LzB1aytCYnFnMzQvbXI5MnREcGE3WXpLdmdRb1NCb1hvbG04eTJqc251S3NodThFMWlqWVI5L0RGMTRoNThkVnpPTjBFeEZkdXJHK1Q2NDRqSmdMMFlYK3lkSUNzMmNoL0F0OTF3S1JVOUNQbGRsWW05c0cvR2ZJYThZTVBqYWJPRW11SEJUcytyVzZmcmhIdWt6dE5IZ1dHZnFEbmFONjhtODl4blpTMXNIYWU5NForSExYQS83N0YxVTFsR1lDK1l4ZEtacTBQTklVSmM1SjZMMlE3TWlBREhwMTJkbXhmV0J5VHAwYlBnMzUxajIyVytrd0pOZGRrQXgrV1N2ZUFWeVlocTRHUExlNlBYL0Q5K0tIbkN0Ykh5bE9BZDY5OEYzWm9ZRksvTmJORmo1SlRKbE5Hc3hWWkVWUG5QU3NzOHE5cVdpZ1FVcUpxNVBGYWJjbXBxdThKR0pDc3hmUlZCV0dZMUhMdEVTRERZeTM5WFFuZmdsY25BdEI1KzZaWEZFRkJHUk5qUWtST0NoQnFTWk9lMHAxNjlqVkJmK2xra2tnWjNHZkdkYmczQmZVb3QrMWVtOFc4SWt0dk1mZFJwOTVTWkM4L2pOdzBpTmhwTWJDV0pJSUlCNDRjSDJvRHVFbnR5N2JQaFpsV0hiZ2ovMHZ4Vm5ySlE2djIzS25LeE9SeTFzZC9sdThvZm1BeDR1L3NjcjE5MTRqb1lFVlcwaXRESmRlUzFPb3k4K1o4M0dDZVdIdGNleEk2K2N5ckRIc1ltekZlUy9GV3FyOUU0UGlkZ1NkKzVGUmdpZlU2Q1A0UG5OWFp2eFJ3Yms2cDdNNFBsRXV4RWNSRGtyRWlnR0dwOWF0aXk0S1JJSlVTdHFISzM1YitKayt5SVJWZG9KVWRUREk2S0JhVmgvbmovdWtwSXE5WVh6cGFiTG1RdUFPOVlqTTc0TSt6R3VlUk5ESkZ2bmt5WWxPWGJzbVhmNllwSE0yRk5FVnkwQVhwYWthTGE5UHpDZlJTUFlwQnBDTTV4VnE5R2FIMkdsM0ZzT0ZOM2xybiszcnREZlFoc2JxMzNpb1o2MW5hTnI4Y0JuaEJFTUdXS1JrWkZ6SnczbXBNSGlUZTlnTHhGTmtsb1M0SlpOaDlYSU9WaHJjQXMzYkhpelN3bmJqWFJvcUlEeHlBRDFHT3NkbitSU3FVTnlObFlpbGJiSWJDdGZCbk1uRkNwVjJlN1dSNU9WRmhyZXdCUGk0V2VsOTFudVZWY2F3MVpMbjhVRXpheWIwV1VucktIRU5DcjBXcFJ2LzMxemM3N2pROG5uUnJoTkZKRmtsdVZVUUl1L24vclRDL3dKTzFiSWt2WDBHY0d5SkNWVXgwaGwxbHB6aFFNZGJZc2lVbGsxVjE3QzZDT3RQeWswcENqZzAvRytNUXlYVGZYNW5xMFluejF3bzVuZVp0WkJ5MW9IcVV0Rmc5VS9tdFl0R0dTekROWWpNZVpWSko0V1ovcy83anFNMFlsTnpMamppMytyWWYzRHB5MHMydEJXRWZONXZWSFN4THJPVk5NV1NaT2x2Z09zQUNrTW04K2ExdjZPeGFRM0J2OWRrcFhRUmFjVjhnNlo0Nk1CMzcvTWl3YXY1bnZMQVl3MW1OV3BXdEJOTm92YXo1TE4rZFJGSW5TNFJxUDV6V0htN0NoU3dLT3g3dzJSYVM5eEFrbHlmZzUxMkYyQjdBNlk1amhTQ3BGQXcxakwrRnBQUHRQbnVQVTFCRnhkSUlrWkhZQ0NCY01ONDkyWmNrSUVUVlpHRnorSnRnVDUyNEpVSWM5M0Jxdktnb0xOeldkTHg1OEYrNHNldzlKUVUrdTVyeldVVSt0V1EyYWlKVldQNjQxU3ZmRFZFV2VPNXRkVG9VLy9Qb2NDd2FnbTIyMnJWWE9Db2Q1SCtCdVRoSE13d05tdXhlT1IwSXFZNGVodFF3a0VaV2hoVzlVV250WU5kb05zQmROSjErWTVQdzRCYUZBM2hOK1BxV0FFdEhWaXNIckdkZnJPQUY5eXkwUlV2TjhKeTg4MUoxWi8rZCtNMG42YnoyVmltSjBsbHQ0cDZQNFJ2WHlEZG9TVWFRNmpTc3dmdHU0WDRLN3pFb3hBa1dzZ2F6ZXl1TzFxa3BjdFNsK0FUTHNRakRpWmRJRnptZW5tTk14UmFKaFBpMmtndGxvSjFXc3krdDh1b2IvNDlmVVVXUi9sZ3FSSStkRlpTNEVxdnppQVpueWZiVlU5VlhyNkxXVU9wY3R3ZXl0K0Fsd3ZsS1phVTY2Q1RRWm1ZRDhNTmJtOWpTVnVaVWRiKzFnV1hlS1ZmRHRqS0dDSUxFajNBcVlYMDM0ZktlSElLQ04wcTA4d1ZmOGR0OGNOcDNhL3NwanR3cUxaM3U4WWJBbWNOZ1hoaEhwT3NNbFh3REowWUhxSFliLy9VQ0ZQWmJIYS95OEZyRnoyWWNPRHU5c2hXc0VUQ2RxTnE2bHYzZXgvdmRReDZPNGlOZVNocU8rNjd2ODMrYVo4OEdZNXpVcHpwQXlxKzZZV0hyaTRhdkNsV3NlMlJvUkk5UnJRaWlHM1I3UllueE85OXVxMjIyQS9KMG5vZ0k0Sk5vTHphOGxIUE1ndU1WRWdUb0t5OVB4cXI5Mjg3YVVYRC95UGJYUlBUeEdjQjZqRE50L3JyVitoU2t3MklXMWJUelhsaTlOblR0ODBLQzh1cGRUaGI0emdKaDBJa2FVcXY0WUZRVnBJY1h1bjZ4dHc3T01UOTR2TWE1alRYTTZneFBKYXJSdVBIWHBucS9wRjNzcUNwYS8zbytOaEd2Z1lVVVBtcW9jNDdCYjJoNXhmL3UzYi9DYWYzRFBxZDVhaTBCQzdoUENWRXZCaGM0c2NyVmc1SjRXaUduUjhHVWNoN0RTTUZrR2ZwTXcyOVcvbzBhMzNOdjlacThYbmR0bWsrWEVvOXliT0hvZ0I5ZHdHN212bWlReHJKUk52ODlndmNqZ095eEdmdGRPUEJ6Mmo1MWM4TkJQSXJtam5URE9XcHZHbXg5RWZZZFFrc2Q2RUZHSEFKWm1VdHkvbEVOVENjcUlYZEEyY24va0dBZkdTYk8wSHJGZnU2R3pXS1oxRHhOOTJxV0ExODVqZy90d0RvRE9reGNBRGJkbVA4dFh0eEFyR1lkV1NpYnd0YWRGRERwM1VkeDhmc2k1aS9oaDRtdjd6dUR5NmI4L2Q4NmxpbDliOHhUSmpoWWtPR2c0Y0tYUHVzdDhmVVhhWmpudU9xVC8rcXM3SkNMdm5mN2FWd0lIcHlENkpVZytCZ3JqUlV5TTUzMXYvMlFBQkFCb0FRQUFCTVFCQUFBOEJDVEVDQUFBQUFBRDhBYzVBQUFJQUNRSUJBUW9DQUFNQUdWUm9hWE1nYVhNZ2IyWWdSbWx1WjJWeUlDZzVLUT09PC9CREI-CiAgICA8L0JJUj4KICAgIDxCSVI-CiAgICAgICAgPFZlcnNpb24-CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvVmVyc2lvbj4KICAgICAgICA8Q0JFRkZWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L0NCRUZGVmVyc2lvbj4KICAgICAgICA8QklSSW5mbz4KICAgICAgICAgICAgPEludGVncml0eT5mYWxzZTwvSW50ZWdyaXR5PgogICAgICAgIDwvQklSSW5mbz4KICAgICAgICA8QkRCSW5mbz4KICAgICAgICAgICAgPEZvcm1hdD4KICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24-TW9zaXA8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgIDxUeXBlPjc8L1R5cGU-CiAgICAgICAgICAgIDwvRm9ybWF0PgogICAgICAgICAgICA8Q3JlYXRpb25EYXRlPjIwMjAtMDEtMDdUMDI6Mzg6NTIuNjcxWjwvQ3JlYXRpb25EYXRlPgogICAgICAgICAgICA8VHlwZT5GaW5nZXI8L1R5cGU-CiAgICAgICAgICAgIDxTdWJ0eXBlPkxlZnQgTWlkZGxlRmluZ2VyPC9TdWJ0eXBlPgogICAgICAgICAgICA8TGV2ZWw-UmF3PC9MZXZlbD4KICAgICAgICAgICAgPFB1cnBvc2U-RW5yb2xsPC9QdXJwb3NlPgogICAgICAgICAgICA8UXVhbGl0eT4KICAgICAgICAgICAgICAgIDxBbGdvcml0aG0-CiAgICAgICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5ITUFDPC9Pcmdhbml6YXRpb24-CiAgICAgICAgICAgICAgICAgICAgPFR5cGU-U0hBLTI1NjwvVHlwZT4KICAgICAgICAgICAgICAgIDwvQWxnb3JpdGhtPgogICAgICAgICAgICAgICAgPFNjb3JlPjY0PC9TY29yZT4KICAgICAgICAgICAgPC9RdWFsaXR5PgogICAgICAgIDwvQkRCSW5mbz4KICAgICAgICA8QkRCPlJrbFNBREF5TUFBQUFYNUVBQUVCQVFBQmZqUUg1Z3djREI0UUFQRUFBQUFBQUFFNUFFQUFEd0lBUUFJQVFBSUlBQUVCOUFIMEFmUUI5QWdGSFFFZkFiSUFBWDNEQUFBQURHcFFJQ0FOQ29jS0FBQUFGR1owZVhCcWNESWdBQUFBQUdwd01pQUFBQUJIYW5BeWFBQUFBQlpwYUdSeUFBQUJzZ0FBQVI4QUFRY0hBQUFBQUFBUFkyOXNjZ0VBQUFBQUFCRUFBQUFhY21WeklBQUFBQkp5WlhOam1jb0FBWm5LQUFFQUFBQUFBQUJxY0RKai8wLy9VUUFwQUFBQUFBRWZBQUFCc2dBQUFBQUFBQUFBQUFBQkh3QUFBYklBQUFBQUFBQUFBQUFCQndFQi8yUUFJd0FCUTNKbFlYUnZjam9nU21GelVHVnlJRlpsY25OcGIyNGdNUzQ1TURBdU1mOWtBQkFBQVVWdVkwbEVPa2RTUWxRd01mOVNBQXdBQWdBSkFBVUVCQUFCLzF3QUUwQkFTRWhRU0VoUVNFaFFTRWhRU0VoUS81QUFDZ0FBQUFGOHl3QUIvNVBmR3dBVGZON1VUZWdzTForL0RQakRqTXp0bGtmeWtvT1Zza09PNnFhR1JlSWpaZDFJc2xJZ0s5RENqTzVpQUFlRzg3MkE1SUE2RVJkLzdTcEdmaW1BZ05TQUFaZC9qOW1pekJDaDRnQjVEMVoyQ3VheEtzemJZdFdXRGx0amJ6aXFNOC84Q0lBOW4zVXBSb0hKYWg3eEYyUTlJQWYwdGV3RlV2dVdQQVNGODd2QU13TVJhZWgveFVSbGdFT1NvWWhacGtNaklqMWkxbFNLVTNZYzFEUHcwT1BFcGRoTVU5Z2Y5UzE2V29HeVk2aUE3ZHhnTjlEVHdRMzRQd25yUmh0SXNVNklJVVB5aUEybEdtR0E4VjFIbElEczJrWmJhZklnVDJqTUhTQmp6M01Tdm14cVIxMW55ZUE4SkhrZy8wSXZhMWZMTWFzak5KQm1mWEwrTURlSWxWZjFOc3JTck5BMnJzdE5teHRMWlVaNUkwSmFaYXFsRTMwVnNlV1ppekd5ZDM2Z3NnQThMUFFKSFhmWWRxMUR4VDFDeEtON3g0L0RnQ1VvQzZ0amlDelRTWmoyTXFVc0lkZjc2TDM0dmRMWWlDODN2elA4Wm44WnA4aDQyVTZWOHFxQVFRV3FaZWgvS2wySzhVNlhKYnltc05yQnJVZFJ6Y2xKc1kwbWJqekhBU3dheC9adGlJVG54MmJpSHM2NzRUc0NseGlhWlBZVUtzZk5HNDhqdW5zeFNWeWlmTWFNV3BOQUpVWS9MK3NXeXJ4NjZ0U3VlM2dDNnRMbFBKRzJ4UkxsdWl1OThYWHZOV1owVmZPekFXZXhoLzhBbjEzNkhUZHZlSklDbGNYY0EycHdEOUE4bld4Rk1McmlGeWlDRE9lQlNJUE9pN2RuVlpOQnYwNTdqNENtU09BK0pmdTlBUXBQZk03VDY1RnZBS0w0ZzRHYUMvNG5uYUwrcTNISmxDQjFMaFlzVFVtZTdUTEFVN3gyZm05ZGhtaXFzcjVtdHZscjJMNkpKaldmMGNrR1ZYTWhlODJER010U240NG9jdUcvZWZBa25hUHJ1OUJ6bUR4MXkyVE5abDVFcVZQYUwvbHZHaGRwWW5RenExYXRHSnB6cHFSSHQwUldoZjlWTnhqVUNXZXpBK285enNLNVUxcGRUSzYwcjNJL0ttdkM4djhIZU9oSmhQQlVYWUZFa21SdVRKNHZsUmdwY3JMSFZsM0N4czdjTWRlZy9nZXpqaFJjVmZPZGx6UFd0Vm1ZaW9KZVFSbzRQOTBCSHpORG9MTmhwVW5XQytuVWpENmFTTjFUcC9pVHBoSmVCNWpidHY4SERWMnVFbXlnSjJHVHo5RWVlWG82dnFGUjR0UEpjbThQMlQ3ZzJ0bDZMdWNRVUlwV0xOY29URmpuWGRyUmxuYk81aTZsTVMxVUs3eURicDZNREt6ZkpHZHdYYkdWdUpkYVUvOWViSUt6Qkh5Z3pVVTVqbjB6MGwyVHpzckljMnQxdUxxOXQ4UTBCQkJzNmMzazNuczdqRnVCQkxpakwzL2FpVlAxNU52WFUxaDQ1eVlJNUkxS05yUTNtUTFIckorZTZPNUZJOHEyUW1uVFFnUUtGVnk1NzRGTVVYbHo1V2dZMEJRUFRjVG4xaHliWTZXRGFYNTFrbmZqK3hNQzJrOVNTdFZCRmlHM0NzVStPeVpyVFVGT1JpaUczbDI1eE54d1JyRGhqWEZ5VnE2T2x6eGRrdDNYZTAzc0ZkNGQvdUg5aFZWTzg2UGNXdkwyQTduaVRnQy94U0tndUFETmtveW02dTZvYTZyY09KUWVRSG10VWs5TTcxamxTY0JhalhpQXJNUUNrMzQ0ckN1bG9Uejg2TmZPaVAwcXFGRkI3bkY1bS80M00xZWdvR1JzdFBWMFV4WndSVEp6elNSVS8xTmJoUkE4N0Q1Q3BrQlluL2xHalR5OXNPRG5vdFJGV3ZNL1k0OEgrU05UdXQ4UVA0YnM0N1dnb3dJL1EvVEd3UHJGanprSlpPYkY2QWRCQUgzc0xFdGZ0MHlqMDVPazFHemQxZDdKeTRHYXlDK3VIc25LRWJzUVJaMklvR0Q2MVgwamljUE92ZHRiSHNEeGNJVHJoQTZBTXNId0tFVnBXb3FVRmtrOTlvZmhhbm9hd2JKQVV6Y085MTlkKys3YkxUVEdEQjZqbmhKNDFYTzMwYzc3dWZRNzZSNlAwR1JLN2kzM3JBKzY3VUNYN25VWjhKN0VBem1PNnd0T2JRcDd0R1JXY3BHeGNCKzZWRHRlRit0eE9GZGlXaDFCcDhWRFM0SmVRaDNxcG5raVNSdWcyUTNBTUhOR21iTXgxdEdSUUVRaFJWS280dlYvWFJwN1JRVUJmd09CRkdMdTZaOVh3MG9SMmlrYUJVQ05RTnpNaHNOcFl2dlZkci9BblFsVjloRzdoNjJETUJFTGFNMTdiNVlLckFCTFVGL0NTMW1FMHJONjczMksvekJ1M1Foazg1UVM1Vk1hL0pJK21TbzJjM2RTbjc5NStjS1lWdDNBYjUzMjdrdVArbVk0WjB0c3lDZDBEZjdiUGdxdCtJQ2x0SDV0bmpSRzNJSnBzTitaeGh1OWFoUnF6OWlMZlMxMWhXN05ONkZoRDVacWkvYVZ3MUhDOWFhNXEza1Z6UHlmMGZhdEk3MU5lVXdWMitnL1ZpNlhYRmZpbmh6b3BmNUhuK281MDBFZ2hXcFR2T3o4eEdLdXUvS2ozL1FPQ1Q1RW1sSzJ6V0p6MFduNEhvTCtwTU1xbXg4emh4b0ZycU9JVEFkVGRnejlGbTJlcXRJZjV0TUN3L1dGMHpqUzBwak1xbElKZTdsVkF2ZjZrNS90SDArWlBGbjZJMm9NQVErak14ZEYrYUNYcTFYYTBjc2ZHQnh5UzNIYnVjTXpsQWZFK0JXVG56Mnh4bFlUdHdvVnRxeEFveFVBcVlUUlp0Qk1JWlNTbVhNN21vVk9VaGlFMlhtV05MNlpCR2w4UElHb0wydm56N0YrSG9qQXczYk5UUTY1c0psazdWZUI4c2RJSjc2VVFqanppMlJjc080S1gzUzM2TG52Sis5SWh1QUQzSnFtS3JEdUlNOWFGUTVmYXVkMEpXMjFuOHdZYjNVSnJIUHc1djAyVGsyUmFZL3NsZmcvOS9VM01PRWN3aXZmR2NucWowczNiZ1FOczRKR0JmdVk0R0p2WWpLWHVxbDh6OXZ3SVNOMDZzQkk0WDFoSlUzUWhuNXJoTlE5UVozVTlDeXdOU2dGYmVFcXZEVTJzOEFPVWdsMjFScm05SEY3TzJ4ODVhbFZyRUE2VnRVZmN1TWhZdmljQU0vMVNwc3B1L2tUazRXc0JvekVSSVZxL09Ta0lSWUVoR01TVUlpd3FncHk5ZldHL0hPV0NObnlra1U4TXFFUWdieHBxV211QTJ1TUEwYkFtTU04S0ZDNmp5Q2VlcG5QZ04zcGNOSkNvbi9rT0Z0T3FUSUZuSjVBM0FnNHBqSzRMZFRkQzdFODd5UmhvNHpRaFJqNWdiZzhPM1o3UVkyeS96MWVGVmU0NmFoVU1WcTdpYmZsWmh4NnBPNjdWd1lPNHgzUEg5bFdUL05MOVZsTlM4Qno4M2JHWE9sVlpibzNrK0E0Rklxenc3aUExamh2RWo0YTNGc0JVQWdoTTg5M2RzMk0vMXpENWorY1NHeHNvZHprSkIxWXU1cW1ydGJ5TGEreE13V3VVQUE1QzV5dTdTRHVSWDV1c1AxZTk2S1UvanpOMEZhM2pEakxyUXlYdWRNRDNHa3ptZGVIaG53VnYxMjVPU0R4M1VmVTVRTFlVemd0VlFybDFaS2ptdHNuVmp2WXdkV2t1bHFJZFlUWWRVZThiZ0h3VU04RDIyVG0rbkx5M0NvUU0yWkYrYjU5YTN5SFc1Wmxab0p3SVhyWHJhSG02R0FFMENnQWlDTlRKVmpMUiswODlocXkzQ3NEeFlrK0dLZ3NJNU4yeThzTEF0YW5lemdSQ3FhaXhKTjkzZDJZYm1OMFFtRENhUGlsb1hxRGJjYmhzTXczNVJHcHNRTjZJd3VjRHIvTFpOMm4yNjJya21tWFlqMTQzUFZwaUFsUisrandNUkdlTHIxdEl4T0ViY3JHLzNvUlFsREhwcEpoN1VrNXFXVE1CeERnak9nUVUwWTBPVDhnbk5ianhOdTkyUGZNZEVPa2VNUitodEVrN05ORUttL21tYy9tZ0dSRXRwWlQ1bEtQU0JDbkIxK0pDTks5dko4cmpKTkxsTm5ibXcvMGVMbHE1SW1hT21LQlI0SnMvUk1RME9malRqenoxMncvT25ZajJGVklsWW9seFJyaDUzL2o0SGdBQ0hjL1ZCT2tUem5rcU9uY3A5bGU5NzFPRzJlci9renBLWml5N2lidkpncmh4VVNsRWpGTmg0ak51YTF3RnZrdlZHQU9Ja29aN2ZNYzlkRVdpenR1TkQybVhudFVnUW9JSU1GcmZ3eGQ2RDFWS05aMDltNTRBR0RpWklXYWdGN1dJSkNSM0QzaHB2MEJKek9xL3Q4a1RvZjNJeHhJdWtZajVQMkxyWG9NTTJRb2xrL1NJeGpjSW1EZGZncUdkMEIrcjI5U2NPOGpxVUR3VGlyVUJKamVPWUtUMzRyTkF4K1FDaGYvQVZ4cXNSakk0cUFtYkJpWWQ5OWJpVlNwNmJQSE9EQlFSeUtjM2pCNkRvY015TUN3ZjFndmh1SlZ3bXhzcEc2VWxDNzVTQU5Tak1qWGZLS2huNGdvRzRIQnNrbG80RXJJMGJPdnBIOFFyMFh6d3lmWHhORzBPdENxTGNxZUplQndlZ2laTU9mL1Q2eGZzU0VpRUlld3RYTFkycmlkUnJVOU5UUWNoaEsxdzRKZ2JkZTVSQnp2WWw3aFhQVFowR3JKRmFtMmFVaUVjZFJMc0VpSkRIU05YMWc1STNEUjljYzB2K3BibHBVbjgwekg1S0h4OGxvRENyMEk1UnYwL3BoQzhQOHRhUVpQTk50d1I3ai9MTVh0YXd2VU0xQ1VQbnBacDM0WldJeFJGZnFzV1J4TkRjTGZxRGZ1YklZNXZSWmRjV3kvYUJ6Rndla2hJTVJ1RUQ4L1hFWjB2ZzNaNVJScXRpNzF4b3E3VU5NS1g4MHl4OG94dGs1M1VjdXJJcElWbTNaRzQrb2hSeWQ3WGpSZU0xMFpzTHRFd2ZjYkZ2NGZmOVpmSUs0cnBFMHZMdFN0VE9GNHF6YWVjcG9QNmJMK0ZPR2JrSm9GMnJsWDFwNWwzL0pSV1o0SEdmTzV2VE9RTkNvZUt6ci9MdlluNnlHWUI0endObS82U2tUM2VBVDhEdXNYL1RlZmF5bEpNcFdMR0kxMlJFZWw0dkhtOTgzYlVudFFaMGZDdGp6YTZ3QVN4ZEFhdHJFVXUrSldKdk1pTkNZNXZPUWZLMUorb1lGV0RTMXNlVEw2ckhva2p4RWpqcit4Zi9QQy8wL0E0OTN2TEJxWTFlbmVvaVZrUFNjaHNRN1pCN3h4Y01LQURGZjFBWlFpaTkxaXJnWmdseDgwazdkOCtQbjM5cWFhUGxCM3JZZWtiNGNUOVFicnNJc2pVeGxydkFkNDMwYWRkc245b01RZHlCdUhJSENCZkxwbld3STdBTDFwcWVSbFVPV05xbk5CakpnUTFYbVlGdEhVUU8yc2JqK2RWWUcwSTZOelZFdlR1cDJqRVlZTG9nQkhlS3ZWeVhJWjM4ZnB5REVmVEVuVmw5VzhFMzRBUXBHOWlzVDFSR05IYzZVVDBWd29Nb2tlakp6dkJLNGpIK0ZjQmdCU3JsZkpKekdjTU9MQkJZaDJSWkdHMEduRWNwTXVHTERualorMEhUbXhORG9WQW5hN0pWWDdzMjZDUUw2RTk4MFAyS2hNSGhDOXkxOTdQY21KVUJlUFhncWFRdDZMVVlpVDRkOE5jc2dkT2tuZDhHcC9JWDFidEc2L2xIVldNTCtwaEJNTnFWNjdIVUZUUUZZTUFrbHluUVROajgzeHU5NkI1VHh3cVNXOE1jS1BRb3lrWjRKVVZIdXNWRTJlcDFNa3hCVWFlM0h5YkNXb2RlaWtDZXpIa1A2VUYvcDF1NHd1WklOT0JValEyWkUvOGhTS3BVRllRZFlLYmE1MEVvaVcrWFpxSVhvWXFmd3JNS0RuWDhtWTV6eWlWV3dOa2lIb215U2NGU3ovSUNUV0cya2ZTbWdXSk4vb0hjdFhiMkdwQUdLdVM1Y0R1ME9zVzFSRlZKbHZVZ1lEZkhESzNCVDFwcXJNWFhjNjkwUEFHVXB1U2JyWWdlcm5DcndBUlVTMnFQYW9vTWtpL1dIaTVWVHdPaW5QQ3MvSk5pYlZjVDNyTDhOSjBSV25mbjJiTkROWE91S0pkSDhicGFUT09WcDlVbGdTY2I1TWN0Ly9BZ3dVdUlWWWVCKzBzSVh5N3htTktSNUpEcllsVHJoZ051T0JZOWk0OTZ6Wi80VkY5TDZRSVcrM0tjOXdWVi8raUtiSFcrNzBqdkR3VE54cmUxazJtb3dEdU5vc0ttUUpBSFlDZC9aUHhCYnhhOXZrOFdueFpPUCtCa2F0SXl4bTFFdUVwVW5UbnExRWlqUW02aHdVckhGSjZoZi9GOXRITDY3bWdwWVd0dXNyZTc0Q2hSaUUwdjBLWWZTcFI5UlgwSDA4dUtvZzI3VXdBSFEwYitCNFNYaUQ5ZDNveVp3Z3RTNlhKUHNScUhVNTRQY2xMbnJSRU9BUEJpbDVEZVZNU1Z2bUllWEdPUWRqVUxnUzJzWFJmSW9YNThFc0g1cUk3OElqVWNib2FyTVRnUEkxYWZ3dzdvTUh4MHFMWmZseXZzYU5STFVhb3cwY2NtKzlWaDJvMVJmS0RxUzlXdG1VS1hLSjNMMTcveXNzSmd6UCt5NEQ4OW9ZK2psbmJQS2hJb3Vlakoxb1NlS2hvYWJCWHlBSWVmWmQ5ZzFFTGpjcUdlNEN6WjBKSTJaYktSTTJDdG5RQ0Z4RmorY3pUVEw4UHBjeWtGQTFKZ0l3NnB3QVRzbi9lVUJ0K3FHWjJWeXJBZHhRems2SFlDVFEwODVPQkcvbmhmZzlUcU90U2NQRmVkUEJTV3MvNE05bVBkcmVFcjdFZ2M2SCswamNQUEQ0SXJTRE03djhYZTc3RVZWWncyaHJnMm5FUWJtaW9nbGFtUGdPTllpMFltU2UvbmR0T0RMQ01nZjF3TTZuNVNzUkQzZmhORVhYYTRaNllkMC90VmFtYTNvWk9PWWZkcDZRT012K2MxYVlsRzNtT0I0dkY2Uzh2RXE0UEFoNUtWWm44MmlzWXBEZkVnZzBkMG1iQllIa3FXbmhha3FVL0ZNN2tWaVhMdUJ4UjI4a0hwY1EwQWVUVlMwUk0rQ2lleHlnd0lPczErVUJrQWw4dDd0Y3dXb1FVK0trWTJtVkxBRDNrM0xLNXliMHc3bDFmRjZ0alM1Sm9XQlJQMlY0c293b01ZdzQ5QXdsTXNpY3FBZVZtUis3Wmc2NDZ0V0lhNmFwS3NXUDRSeFZnWklRMHpJRUgrYlZlZU9nTzEzSk1KUTVqT2lNMjRReU1aTzNlc2lVZmp1eTF4WXBzbFVpVnZ0cXp1MEVwMXFrMHdpNDZJOUxqTkFxbDgyTlMzMGUrTGhNYzl4SjdzdnBFVzY5MmFHUVRWUyt2Tm5sMHczSG85ckpzbVFPOEUzeGt2c0NIQnE0Mzh1cUo4Q1lWZnJEQm1zRStMbkZzd0NMQkhJTWswWXpGbG9wMW5tNC9SeS91OEJMaTlvd2tVT1BXS3dMUXNLZkpUODBRNEtQYnFvVnhBekpnd21rc1FxVnJiRzVnVmJIQlVlVjdNSDVUdHdsZmtYUlYrZWtmczJuSzhpeS9ISktGaTI4Y2xPZktjYUZLU1ZEQTBnbXl1Sk9zS1VQcHZDUnF2TUREZmRzeUF6dlIrVjIrd21VYlpEWkdpb2x6UlFZVnZNYkt2dnp4OVdTSTRjLzBObEFSdnFOZ0NNQnV2OXJlRDB5amx3RzAwMENwcmpXbXM5bXNtLzhHL2t5Y2NoSkE1enVsdTRjOU5VcXBtU09aOGtVMWJ4Z2pMRzl3OUtBYitRLzJZbkwzdWF0bTNNR1VWNWdnVWNRblVpQ3lGeUtkTjZleHhhdzltU1phTFdnam03ajQvZ0RZUU11UHNpL0VWQWc3M2tTcGxqSEFuL0FBS3hIcWVmb2pHN3orYTRzanlmRVo5a3A1cWdXQmtiek1BRmFXR29ZV3EwL0xqNjRNYU5rYWw1T0MrMXRmbHgvTzJHMFJvaEdqQnJ5NVVYUFdmTEhJc3ZuRXY2MStnWm5JbHN3dURSK2tpaTB2dkZuQS93UEJxbjJ6S0ZPazVmN1dNbjN5VnJROHFlY0huRUIvWUE1bFdZWnpNc3dsUzJzU2M4Z2d2ekNYc3NQOGtHcWozSzhCdmFCNWx1amJNN2hTeVhDbW85WmpHRnczWjJZZGNycGNEUTJVQURMamU0MDI4M0pRQUM1d2o3eXR2Y2QxK2RhcUxncUJhSm01bkpoM280d2lqL1p6cDBnYldjWjZiT1R0RHVyVkJKSmRubjBTQ2tQOW81YVc2ZzNlTlVzNzVzdFJ0aDBwOSttMnhZNE1Kc00wV3BJbmpaZXNzVGFVdU81c1dQaTdpRTVvc3Jzcmt2NHZqdjMvdW9ndVA0VFhsQTZrbE8ybzB2NVQ4MDVCQVVkYjdPVklNaDRrNUVXWklKMFNaTjk0NVJHVU5UeWFaS1FBY21EcDRUK0hNd1RaeXBlN0ZTUmkzTVIwNTJ0azVWRlFuVnUwdXJYalVuTC9kTEJZaHZkMkt5RW12Y0Z6ZUIrWW1SYlJ4ejIwZjNwOTFBUmw0eUJBQjBkZ0hHcjBZRDFNQy9PbWFqWnp5WjEzU01JNFRuK1YxMzZjbWJac25MTXpHNlgwVk1KSjVMdkNxaHNWVkl2eDR0R0pIeklONG5xdk8wUVRGd25xR1FNQnY5UWVqeVFHMy91TUZiOUl4ZVp5Y0Zab0J2SCtHZTFsejRnV1ZSVDNXalRVY2ppOCtYZ3VFY0h2ckx1VFc1YzlPODlEUkxlSitJaElMQmt2dE5TclE3bnpHWVdVWXdMTTNnZlhqSkdRUVRWb2VIc3F3bUJTUEtjaSt5RE9Kc1Q5aEtQMUhWZkFTcHhmVnR4dUlqbFNxZDdFK2x1R2thc3RxeE0zcHRqWmZ6aC9wSCsyRWlQOHlHS0lnbzA3K1RReEgzdHRtTUFWYUV4N0FVT1UwQXp1M2tpS1UveXh2b0Z4NXFUU3lNOWF5OFRscS9FdE5idU1lQ3M4aDFRb05rZW50RXF3YmM5dk42Tld6dUxyeEZENHYzZmluWDFtNTl6bzJOaTZ1cHBnOEpwcjY2UmMvNDlVUlJQUmpNaWZWVXlpaVo2Wkw3RElacVdYYk5pK2RoV20yVTlkY2cwcndRSnZqb3duL1hOaFE0dkNJZGt3aHVOSWpJUUVmVmlwSkNnU3dMc1N0d0RKdUJvTllvUE1ERFozSnIrc3Q1RC9PRmRTYXZnc0pKUlE0QURDdkx6V1FXMkVwOXVGMHBZamh2ckxHcWFYdHh2OTZZQllSWEZqc01ocWFXWk1VZEJUU1p2Y1dYdDQ0UjlFdnZjYThDQ21yME1STUxrbVpwazJRYWRuTjVlSTNOKzRRNE9HODAxSWZJbXFiNzFjZzFYcEtFdXR5Y1prVWJLU1ZNNk96RTBpK3BRTDBtajhGcUdIMHV6RW1oaU9FYXh4TWJlR1poRXdxYVlxdytYeVQvWWg1dThXblFWV3Z0TDRrNDdnb1ZLUTZIUVBvNGM0aWx5ejU0MHBRZCtYb3FwN0NFTHdQTVc3Ny9MUHUxaEYzYWYxaFN2MllIOVZBRDEvdnlISWUvT24yZnMwdDk5R1JUdklka3NxNFF1NzV4LzJsbDY2L2lZaGFNNEFkaE9DdC9QNGIwUHREbDF3dHY4ZzgvVVBsT3dQRm00U0pJc1NOUzVtWUI4RzM1VzZrZ0wrcFM5WGFNVUNVY1VFN1RwU0dwWGZMcnNhQ2xkRy9mUDlYakVCRE51M3dFQnZvQnllVDdhemhzUCtvcW14V2dGWWtIWWtLbUZNNG45TmR5UFV1WDN3VkFtcGcwSmFaczZVeDhxYjg5SjZrRDVzS0tKT245dFExRXBHakpIMVRKTlpTb0dQelhKZExuRUZTR2NTRG5WTnB1eThmUTJnUVFseFBjc2NiajhWbDU1emtIWlllUHdWTjA1WnQ5SkFVcWtYdXZySHN6d01kWjFib002U1MrZGsxd2tvUG1xbTNvUk50WXZTV29STmNhQzBCSzZidENqYmtZSkYvd1UydFZadGQ4NnU2SGRGZ1lrSzAwNHZBMUlkRW0zMTlHMjVkb1Erayt6RFo4WWZNbStyam1IREs2MUh6VFNneDNTNkdrakxZL1lhU1JQbDNjMVVEUjM4Vm9KMUJOd3NJZWEyRGJ1WjRWd1YzNjQvc3d2L0N6dXVFQ3pMMExucnVzOWxmcGZ4VlJ3VDJoQmwwRUdWZVNJREp1YlZEYkIrUHBjY2xqYlFSOHFYemFmdGVlZG5SbUhJSDZqcnpWSVNDdEkzNFJUOEllbUxWRFVFV2prZXBRQmNzVVNRN3lnVHBNS1dzbWNkbVBydjNvak9MZWY2Uit0SHFwVFNvU3VqRFRIZ3EyQ3BZY04wS1ZFUDdIdGFOMjI3Y1hJNHNWUFZRM2JhLzg1YmtRT2Nucm1HQjdMM3VxVjRZeDVyZDdOTUtEcm93TWdMTDZSU1VOYTFiSmsxU2kvMnBRc0dNOXVrMkNTbWZla0xIVGFBWTNJaFUrV2RQUm9QYTlqNS85eUxXdEpBQy9SMVNzUzN5K0EvZXh6UUJCaWhIMUc2Zkwza092TnA0UWJuRzZROFdiL0NHK2NSNTFnREthNVVXbnZTbjc4OUVCVERFQlBMa01BOEd4MVY2UWpjZklESmRSZnlUR3dIMXQ0NXFBRTRJZ085MER0bTdxK3BGUDNvazhiR003MkNtS0ttcVF5emhFdXV5YnZ5NDFiVVUvS3VkYjB3c0RBbm0zQXZlNFJDVUpiK3o0cTJFaVErSzMxdGdMT01SQWpsaEJURzAvYlF4eEJ0M2t1ZnQwSUFabnpTZEZzVU9NcXRmRkROSXZrVDc3ZGlVWnNKallYQlR6MWh2czNxeitCbDFwZUdOckR0SHZsL0grNStHaEdJMUd0OGJlNDhOWkFhSit3b1JXcE9FQllBVmtJK25YRExVUGpTVUkvc2s2VVM4TklmcS9iTlN2SmIxSGRYSHFvSmtDUXptcGc0MHF4dG9ET3RIelVoZG40QzVsVDQrMEZIZ3NUNGlNVUhSOFZFZENwRVNtSHlhSHdCR1pNUjRQYkVYTXVac24yTkEycFZHLzRHYmZMdzg4ZE0wQlhNQm11U0NjM3JpOUdJL3p0MEpqbkRVSDJscDlGSnFzNWVmblBqdk80WEJvRkRiMi9IT0J2R0QwWS93U0VXcno2L2xwbzZzczNRQkc1ckJWYWJnNXdMVzh5WktaYXlwZUxaK3VuR1VZVU9YRDFQWWpENXdVMk55dVM3bFRqd092b0NUOHBFOGZuVFc4VW8wUE5mRFBvU3kwQVJpWmpPVi8zN1BDNitrWG4wbzFtM1RtWUZPV2ZXYzROWUQzc3lvMVlrazU4SSt5S002TFVVRHIycmJwRE9NWElZK1NQR0JMMGVxbWIraVNqYTNwQWhXMG1icll1ZlN5Y0NWdnM1V0VqQlNRQTEvTEY3ampTUmFmQ0tiTkVpOHNyWFgzQ1VSS0lxeUhtSWptb3Mwdk8rY0licUNvTFFjKzlYMUZsZHpXQ0lJVGFZSEtaQ3hBdEV2b01OdWQrZmJzR0kramgySDY5MFNneVlkcWdJQU5HT2dxRXB0Z3V6cDNxUWJrK3paWnRTTjlVU2x1V0hUNzg3QUZEU0dXNzRyZ2NHWGlQcWI4bWdQVjlKaUttVndwKzJaWnhBZm5EbFhPNUpFRDVkYUs2WmxBVnNpVXZzaE05eDdCZ3RzZ1JGUlFVN1hrc2Nadlk3dDFvQ0RJK1NHNEpPUnpRdzZxWWhFMkI0ZXoyT1FaQ1lBMGdGczZLOEU2M1QzQWdveDN4V2k1cmJ0NlBRd2tpZEUzY0s5cjV5YmpHSnVxM01Tb2hOZWVqMlVtNWJHRmkvUW9wSDRKV21Vemk4OEFkUkl4aURLMmp5RisyNlJGZWhLNXZSNEZWbUhrbHhzR3ZURmR0WEFNU085b0tpbzBSYWVWYytaa1pmRmdDelN6dDBxNTNVQ0hPRjljWlVNdTQrckhZc1l1NEZTUDdrbitqYmF5ZzhzS3RMQnloa28wa3Y2cHhJZ2pEN1V0Z3NFT0sxVy9HV1lwbVRKeHRpa3JJbGtLUTRTSjlzbWhxMjZESXNLZjRzWkd4L2ZGMEhReUZ4TG1nb0M2Q2NycGpwZTNPMldZbk83WkZCdll1T3hRUTdkNTYrNkxCc0FtYnZWck1CamxQaWFSMERsclU5MUw2UnYwZUNqUGNtMEp2ZTl0dFVuMUdoTU14Q2VwRXJyZjN6d0gvWWRVV25HRUtCN0l1Um0yZklHVExJRG1KNjcxc2NPbkd3V2RnL3dpUlFIYkdYWkluMk96RmI5TG8rbmxHRFZaYXg4MTM4bW5MaXRHY1l3TnlWR2JzTm50b21FVFI2a1lOWHZ5cEFBaHdjU2FUNkZEWVBCTlcrMXZGRDlLbXloMktGV3A3YVJYcTV3VmhmUEdKZkZNRFo3S2hPOWNtQndwZ2w3SnpHb3Rkb0hwQnY3Z3NESUk0UjE2d3lSQzhURFk0ZTFjN1lMRi9FcWZGZk40RG1aRjAvM0hQcUQ2SnNLY3BDVmEwTUNWSHZ3eGRhUDBKaGdZYVI1RGxDQm5lenFlc0tYVzFHd3VycVQ3a2hmcHJ3NUQxMldqbW9FRklmM255d2o4Nm8yNUw2R1ZlQnQ0QUVBVk15d1k2ajNZME81NG5ISk01RmJoY3NBVXBKUkdUVThKRGIvaU1yVDFWKzg4S2s4NXg1amlTMU5qOUdpaVIzTTdBMzNuNG5VRkl2akpCMURYY3ozZHNwbTNsdXVVWjlsNVNiNGxhT2w2RXpUUElubHBiUWtZVm9UcnJUY1lyVmtpOGRVamV0R2ttYUludVRtRmR4eVQwaFZrNWY5bzRvWS84eGVlNlBEakQvUWhqeGNQQlUrY0ppMWNoZmtCaGNqYkRkQjJmd3AvUVdjVk4wNy9tdFZGWEhyK0tzUVNyVmM0ZFhOOXpSMitOZkZjK2xnTEluTW00VkdyejFvZUlmTFpXZ1VnSVI4TkF6YTVYWlBWNDQvTjNCd2dlSTNtMFBRVURicWxtSFl6ZTA5SVlURG5UVTZmQzVtd0hzRyszNi9SKzdnRkQ0dEo2ZjF0YmF3T1NSUWJQbFl3amVCSnYxVHdvOFdrT0tHODRnRjFrRTloeThraDd0NFNaYlViWkZmTG5jNjYwdGd1NTQyczNseGJaOUt6eUFsc1dPMzhrOVQzNHFrRDlXcEFxYU5KYWRibU96czNJYUFKYUJQYk16a05Gb0RibjQ2NmdUMVllZEdMcStXTy9BVU9UeTlDTmhOaUUrbUp4MkljT29FQmdjTWlkRkh3UjZvY0NGdDdvazlxRXZmSTBSRTdWbjVxRFhxbnFocUkvcXhWOG1KVUtBTVBvM0VEbTB1QnJYaXFsMFF6MWNpbjNJdzU4UVlrVlc2ZEsyUjgyK3J0U3UvT3NZRnNRM2w3ZkpQQVpBWm5yUjRUbGNrNzFzVWo1VXZEMGtJNDNRNFc1bVJURDJna2kyL3FuaElDQWdJRG0rclFBNUxGVVhzNXY2R0lNeTROYzAyZ0lEVlA4TEJKVE03M1lDMk8zUnNETzIxbFg4bzUrZ0tYUlMxU1J6SG1SREVMaG0ra3cvZkw4K3BpVW8yUEhQN2RaU3RQbldSbTBxSG1BSEZSRDZpWlNCRFBIeXQ3K0lZcVBoKzlyWkF0aUhlOVlidEhEdURNcHB1YWMxUkxBa25vYzEwTE1ZVzdlMG9NT045YlVXOVJtQ3NwU1dZckIvSDFBTUFQMExOK2h5ZDB4NDA5andlVlNFNDVMT0U4ZUJ4NnV6eXM5SVVTeDdkRVlLZE5kZWZqbEdicVdidjI5UkxmbnJNUHFyM1NmaURIQXJkTTVScHVnK04raVVpeVQ3VGpoUFV1Y1hsRmFRRE5kcHFCdkNRcXJsNHg2WGhwNzlrVkpYeXNBSGdxdGljNjhhYXFneEl4M3BDWkpVV1NVOGJCQUwyVFlEZ1IvM3BIYllIQXRTaHZGSEtWYXc1U3RTaDdMblhjTWVZZkIyYkVoSHJOckFYWEdxbzk1UGdDdER5UzdaWlo0TVNpeWlPVHdrOHFJTXUzQ1dtMGNpRmxLSisvSXlYZHJ3Q0MzTjBDeUZTVTlBdXBpaUZ6QzdIWUI4dTBUbC9pVFoyZ1pKc0JZNEtrZitiRkhHTVdSWCs5Mzg2UUF6WWdqNmhLVXkrM1FnUFlDZFlHd1QycEE4c0t4cHJyTFJWMmxrQmhZcEgvbUw3bWt4L1dvYStMcHF4enMrbDE5SCs3M0VVeGVwY0pXTUJMRFVlVHFnUzhjTkIrS1hxNzViMDZvb05ldTE0THp4d29hWVhxQzlrTWZVMTBLL01YZWJIeFczUVo3UTFtSnhuazBsamlRUWhGOG92dnZJRGpLU3lGUWVCUHRBNUQrN2pGZUpCTVI4NnM1SkQ5c2swY1RUczZPcjI4Sm5DSXhjNUU4RHQ1d0J6RkprUzBCQWY5RXNxZ3JyMmFPeFhWa01KaW5JVEQ3bjRibFRreWRwdHdFSDZvTTJYcWRjNHMweFB3RVc2eWlaTitSMkZFZ0tQaC9oOE84OS9pSkVxYUZXWFM1ay81ZlIxcUM1b2drSGYxTDQyOVVTS1RsbzFIRDl6bkZ0OXBVSHVsbWw3eE9WLzZFaG5ReU5iWkZLU2JGSXdiOUdTU29IODJYbExXUVlTMG9WNXpuRkN2ZmZteklPQVdhdXdocms5NHIxMDR0UXdxeGx3QzFvMGpLZjJ1NWR6TWpsU3ZYd0FZUEdTNHJSTXJMWms5elVNeWhNcEkvMlJTZW51SlZrWk9XekoySTNralFTTVhqbmdVRE5sRk9xbHBzOTRaT3krTWs3OEFUTWplUjdzeUJqelBuNzFUOHAzMnlrUG5rT0JjeTYrTDBrc2xPOE9VaW5jajI5ckJhRmplVmszVlBGL3I4T3ljc2ZlSXo0YjVEMFFWZnE4Ky94b0ljd2ZFY3pnSEhKcmRVNXUyRndCbE9WRG9JOUxTa3VoWmFyKzhvQ3lpUnp1eFpJZGlETzJTSlV2c2MrS0pkQTZTUnpZaDFxRUFuOTVoYml5NjVQOU5qSndVR21XQlA0aExaUGM4WGZkT0hmK29MQ0VMdWdRNXl0ZEVFZTh3UjZjU2JXT3FuUUVTUTFaeFhYcW56T0pnSzZMU1B2SGxaVVk1Q0dVc3E0dWgvS08rVUJkcFZ6Q01rRUowVGFxRHhDRXp4Y2xiTU5sK0I3WU5kUVlKbjVIZTUzbkZOVUd1dXkyTUNueENSaSsvL0pHdkRVRld4T25hN3I5c1IzYk5HaU9Tei94RE4zSnF3NnEzdlprZ1MwNEY0SVJ5dDFzV3F5eXpWcURmQjYxQlNxaWUwSGVmK0RQMnRhY1ZvOE4vRkRYcHhLR0VKcFNMS2pvU0I4SnVVNWJ2VDYzc3NqY1JSZTF0ZzU1dUtCbGNTUjUrMXEvOXo2NmF4TnlUcTdjeSt0TTFORFBtYWhqRDI5TVJseE83bVN1cERvc1dKQUI2S1I5TFoxNC9CbkUwK250MmMwcTFBMjZPZG0rVU1RblduejM2Q2hwTnJOMmd0UWROeExLMkR2dGJkYmh4aHpsTkkxdGhraldKZ1lIWkhVdjhZL052cTlIY09jQzZpaXV5UXM3SVNVekU4bk5qT3RpdmZXNnE3TTJmK1lXSXAzUFRjbk9RajB6OVVuM0ZGcWhwK0gyRDI1eURYbnR0QXVmMmgxRDVZZ2lRaWw0MDM3a01MYWZGeEk4M1k5RmNoeGlaWjlMTTBhaTc5bjhwZ1EzbGtkYUVuR0xrb2d1N3kyUkVzWCtRck1lUW1nVUl4K2c0YnZONHZjTzAvRUxvZ1dPTThpUU4wWWl4bWJrYk5kTzVjL3k1VGdkVG9YcVdMbm9PRWtxV2R6ZG5penJPOE9FY1Uwa1R0bW5sVDQrY1pNeFNPanI2S2pTNXd0WkdVUGhOZEY0eTRmQzJRWDBLQis4YVZSWG1aZ2VvYmRnU3hjeE5pQXJTWmM0eHB1OGIwRzh2Tm9iSWc3UUlIdjRZa3ZqbVo5ZWk3L3dZcFpvTko1TzJBWFlCVHBKcHlmUElRTUpaanVaQXp3OWp5STBUdWpoTWptV0N6VEJIRGh4NGtmV3daLzFmcVlRbEkrak9NT0lCUUdCYjhITmk4czRQL2JuUzdVTjFld0lycmplN2dtMm12amhHMWxLaUIwbExwZDA4SGlqZWorRG9XZFpZbitWcjZrcU5CbmVEMGZNQUZ5RmRJWndZUE1XUkdXcEFQRnE5RCtFVWgxdloydGM4UzVJazI2ZC9Sems0UlRPa3N3N2pNU2ZDNHJiNHVYa1lwTG94SzVIMllXd3hTL1hsWHowblRGaWFXa2NQcy9kWGF0SzByWGRhNjA4ZWVvVzZrZEE5ZUVyWjR5R25NSFpvbVBVNk1hYmIwVlhCaXl0bGZHT2oxK25NZm5QcXBuRmp0TjdDcnpKMnhNYkFiN0Y5S0VCTHkwaUZ4Y2hiZEZ1QUhaelcrZDJ6bGZ6S0FIL0U2UWF3bFR3ZkpKMFVoRDZuRm5ZejJ5aEtTVTdPL0FCakhZaTNwMGtvZTdGTitFeWN5cVB1aUljSTZOd3N1QlBmaXNRQzRBd3lFWEE0eGNGM3RGdUQ0RzNZZ0R1NzRmWmtqR0FOUzdrRkxGQ0E4dnVPL0FKZ3hjR0pLV3F3NUUwZ0psVDhmQWg2MkhoNzNMRDBkWXVEcVZkdTZsQTA4N082UE9MMzZTcHlDYWVaS0lKWGpvZFF0a2F3b1U0VkxrWGVrU2hKWTV0OE5naWdlSnVWVzNrVUNyMmRoamNreHE5Z0lFR3Bja05pYzhVbEFPWmJoaFhkS0ZjeGo5emxxTVNaK1RHenRnNHJQV3YyUkNjbG9iQkN4R0hGTzRWRzhudTd2eHIyYmwveXRpY3BpREYwTm5MSFJndFRZSkc0Vk00ZStVVlRRbjB2WHBMQ2JSTnlvVWJSU1BRQWZEWUJSWDk4RHp4enZJd0cvR1pXZGNuS2crRmwwV0w0QW4wWjRWNzlFV2ljd2JSQ1pBanVKUkZ4L2ExQnEvUkFFQjhsYzhHNDlnN2NuMFFNRW9ybGwyTFRzY0NaOFRSU3R0WUtST2NJQWdkbUJqTCtXUWJXRWZTVndVbFIyaVZFN2d3TDFiM0ZsbkdpRUtqTWcyTG1rR1Z4UzlzUGNabG1LeC9nNG4rSGhWSDFvRXVxR3JrRmRSSksrcnMySGdvYXJEbWJBR0ZMYVRTaHVrUWc4Z2FPY0F2ZlRBdm5yZ0k5R3RRdVdleTBySUNwdkpBYmVSRjZlMDk0MkdFVVF0MEFoQm9YQlh6cHd3emFJME5IT1IwaU1neGFUaUU2ZUt4ZGQrNXJVU2x0S3FHRTVZckMwTnlHMG9FNHpBT2xtdDY2cE93OHNPMEFsWC9ScU1lTjdzV2ZMTllQZU5FeFM0QVRUNXZjRExiQ2xpL212YlVLTVVDSVY4OVdpcmlUNTUycStBRmJSNUExcVVyczJRYW5zMTlpZ0RsOVNpeERJemF6SjIrV05pdGFNcCsvQTVxR3U0dFdabE9WMEZvZm9OanE4dFlmRnFuM2d5R2dwbGZlRy9GZTArWTlTajBPNjlJVWF2UG9ESkhJc0dEYmpEc2hSY0JRRVB3SkdBTnZSVlh6bFVXSnJqLzNYRnhXcDZQWGxlNjhqVGVPV3hDME5RRmhhTkVqWGhRZlJLVXd3WXVGcHlUYzFzWCtMMnlMOWVmNzFzblNNNjZ2WWNzMUVRTTRYVlNDSlNwSWRQbGJkeG93VjBNeC90emw0NjVFcnpvK21XWU9sUE5kWW1NS2h6VjNJTEhmbWovVGZiMVVDS1ltamxaY2l5OWxZbWVmeWl2alhTdHNPTWh0SDJCVXR5VEh1TDh2SS9XV0QvV2VYMlV3UDJHSjlqTUQ2MHY5V2xFK3NxL3R1RS80YWVmZnFmUDRXdUhoZ2pzSmZxd2pKck0rdEdoYUIvenU3ZEFoRHRoZW5vUWl2MzVJdXVZcXRmUFMybVJBdmthSkJnbmZma2dpZ3d2bG10MTJGWXMzTHpIczBFNkdMcFEzSHVrQWFQMnN5WU5NOVJ0cjhVaTB3UEFTaFE0L1dQZFNweHRiREZJT212Wkc1NlVYMnpvNmhWd0puR1VOMFBIanVIS1RoeS85dDhqRWxoRzV1T2NtWFJNOWRnSG9CRTJKTmo3QmNrOXk2Y2dLUEtPYi9Vdm9MUFhiMkRWczdSL3YxekxoWWJDNGJKWmM1WGZQbzFsQVNrUDV5ZEhXQzRrc3BZckM1c3BhRVFGeXNnSXBnVzU3K2Q1MWoxWGNUYlNybE9XSm5LYVBVUHJhNm9aV3ZkalJPREpjbTh1OTNXQytuOFF1RnptMDhmby9vcWF3WithTlRvZDMzWDlzdHQrYjRYKzk2dFhEaGdySWpobzNGR21udEFNVzVXVTIyck5lYko2SG03OHFkQm40MkhJbDFEQnVZdTllM1JOTkpWaGUwdmFFNGFTSVVFc05WV2ZwMTl0cE4wek5ybFJxaEY2R3pBOVpFUTBrQXMvaU03TEdkaUxIc3hjVElTM2IvSVRKYWp0eVR5VUJYcXVqRVprUjB1UWVsYWpscXhDd1NXaXJDeC9ueWpBK0lNNHZoZXQrUSt0S1hZdTVCSE12WWxLZ2hqRncvRFJJOXluWndqNWk2WTQ2Z1QyNklabVNHcVhleEgxMXlTNkx6QlJDNDJBaVRkUEN6WElnYUhYTDRjVkhEZzl3TlRpd1ZZLzFKQUlGaDdiTmtrdkkvUDlTQUlKNkpKWHBZS1daaTdXQlJzVmt6R0l6NEZQTVA4M1ZRYVQybXVnSjhjc2drM0s1NlUvVE00NmF0U2xvVk03YkE1dW1QTURzTEIySzZBaDF6Qy9RaDlsQUt2b1dBQk4xOEtKTTBWUTY3MjR0eUlNeEFnUGNQREthdHZ4Z1RRSEZpQkpnajk2M1h2MUlGc3lsQzlMT1UrMFNBeERQOUNsLzA0WkRHeW9UWXNQSHREZWpKNWVQaVd4QS9EQkd5VEJad05qQlpXSXFwSTFkRFpJRDdYaXlSZGQ4MU1sLzdkNHpxS2E0SDNxN2orMm9reDUrb201OEtpSTUxM0Fldm5xb201ZWliUFk0dlNVSEN4YnJ0czRDZ2NKNzExS0FkSXRWaVZIUGVEbXE2SU5uaThjYnZaU0RuOG9VSTg2bGx6K2RINDdZeHYvcmZuT2dCUFBtazZLUTUxZ2p3RU9LY1phNUl0VTNWZnJrOGZKYzBMQ2pCV2t5M0hFZ0hLTFlZdk5hWUdxOFJhbVpoRGFRSjVpN2tSS2ZveFIyRHk5S0p4Sm9EMHp5b25Bb2JlMGlVamF6T25LeE9LNzI0M2NqNDFTR3ZHUkV0djIveFF0YTNMcHFFMWNPYkUvNnhlcXh0emJid2x1MGJsK1cwRmJqNmlRUzRnUkNFdFNjVVJwK1YwbVRpelNCaEUrQlZTSTFWY2NLN0lBNjFZME9UbWZoeE9KUEk4Vm9jQXVhNmkvZWtXdE5mb2o1RlNnVlQ3d3g1T1hINWczYnYveEJGamFRQlV3eXI1SmEreW9WelduMmdNNXk5YlBHMW5QWWRVQXo5WHNuMGZLZnNQcXcyaDFQSlMzaEdwbkhoSXBsTks3emNqM1RWVUV2elFCY1FxSFhMQ2dBNDE3empTTVRzVHpzU0JibHpKRU5ISVFiVGwxU1FRelR3NFBsUnQ5MW1RZFVvNjJqdFREZUdFZkNnckVtbEIvSHBEc2ppbkt3aGJsL3lkd3paZ1htaHZmc0UvblN1SEtBcGVYTUtnRDNaSU4raWtuYmtQWmtFcTE5Qk9UMzV2bHRDcjlqK0RDcnFYYTF2a3RCaTFic254MmV6OWh2enZ4eHRvUWQ5OElwTWFJMzVJZlQwQUtYbDZYYkpOVXg5UFhvMGo1MzFDOHFWMjVBa2h6MklEOGdBcnE3YUhZVFkzcTFwd3Z5NWhkREZneS9YTzVwZGhzTnQ5UjNhcEZkOXVqa0t1UHJKQmVxaDMzSEROZW10bzhTdDgvU2Y1VWE5eHdONWRGZFJlMnQ3clNGbnJ2a1RYa1dCVlhNV3A1Qm8zMnhFa0hwRWJYeW1kcW9HVU9GWTNJdE15Qzhydm84SnplMksyQ1A4dXRmTkxaMThVUExMOWgzVXo0TW1PQVIvUENsLzZWemVqclVycnRtb0IvOEtRa1d3Qld1YVRRNWx6Y1FpQ0FwNkYrdENYbk1sdXhocHNBd0hiSXZqcjRDVXltalM5eWNvcHJIZFM5YmpZVmVVTWI2S1V2S3ZQM0hDRXFTSmZrZjh3Z1cydjdQYk9zeVVmUXJNcW53dkFlNENyTVJqY3RLNWxuUmhEK1VXbm4zUlE5V1cySkFhOUxYdWVzOHpITTFVaWJCMkJWM3VRNVMrZ2g2RDdGK3pzVnM3SXVhSDg2UHZTK3lxT0pJZzZOb0VUZGYzY3dFWVlTVWIweXBpTHo0MEpYYjNYQUZVMFNHYnBEQ25xUkRkbjFGVS9ya0k4Q04rOFhsZjJhbklPMW1BOFZTc1FibkJrdjZ0cTRMV0RISXB1dVBxNXJEN0RLYkVrbU1yYkNJa1R6bmEvMWJxN0g1K0tYOEd5dTlERDhneHJHbHBUZUhsSjhoYTJSeDBvY0lXV2tQTlE2UmFVcFVxN2QwM2hrRXJCS0c4R2h3RitmOWpLek80bUIrUG4xUCt2clVkeFp1RENCWGNSMlVIWjcydy9TdExNY2x5SFc2clBVMlp3OWJ3QlM3R0ROOGtvTDRUY2hJVHh5em5FMVRKdGlGWDdSajZJZmEyTFNJY1JBRUVuVkZsL3kyZXlSUGVzcU5OOEZFenRwQW9SSkhhU3F5VTkvRHc3bzM5M3luVGhsYUZQdktEc1YvWmpwOGdOSkNSZlF6bW9VVEFxYi84SHRrS01YVlhLQm83ak0xa2wra28xUlgzYTZiU0kxNnVoNVdOTWdwai9JMzdVam03TTlQdFhCdVNCdGNYa3FhV1FxbUQxS25ab3hwOGQ1Z0F2WDRUMVFHa254TTVFWGRGQU9FMEEzOW41bjVjOUVhTUJyMFRvYWZiNUZCVmx4eVNpTjhxQU95VXAwVUYydWVaTkFLMUZNRmhjRFN2d1dqem9hQnhDeVQ0YU5KVndTM0tWS0xFdEpWN0tRRHU3ODRPby9SaEk5Ly9mQWQ0dGZlUEJ5aTZNajdPYlcxNUkrV0xOK25iWStIRytMdkFvRW4yZmRjRlNJczQvMUg3MUphS1REbGVZMER0STM0d1grcS9OTzJlQ29uMGR1M2pRdDk2NW9HNXpTUVBSN1JZRDZqQUkvQ1ovSnYxWDkxSUlJbDZCOWJpN3Q1RGpzSjZrQ1pWQjA1aisrc1VSc3FrVFJxYWcyWnZFY0JWT2lDMGZVN1BIVys4SEJ3TzlYWFpzVFVpN3JieWErMkZ0cFRuLzM1MWNsZWFVYXI5MWl6RERJRW8vWGkvQlNNbXMvWEJJamRMeHlyV0g5UHJVc0pFc1ZzU0wvTEU2T3R1STQrdXVEMWIvQUtoMWhad2lWTm5xMnk2ZVJYVCt5SEFaVmxpN3dWcjZlSmEweG85Z1NacjhiK0FIOFJJa3Y1WVRTK3hCTzJKN3BWL0VZNUkwK3lnNEsybkdaOVc4enUxT0UvQS9Ea1diWjFHRkg1LzZqa3lwcHNrVzVmaUZyMG1mVnlaMFF4SCs4VXJVYnk4dHNlN3VkT3NoSGdkVHFMbHdyOVA0SGM0MEJCWkdwNmdpYjUyUERYcW1KU2hYa1ZTdDdpMDBEUDMwTnFEUGJkSEdvNDlaUTZmdjVOTVE0YndwTUV6OWFPQWhWaUxTbXdDV0VRUG00TGdUek9BVnQxSzM0dHlwQ054NFBXYjJ2WkNqdXJhNG52N090TVBGdUtFM1E2Mmg4T3VwdzJlTm1sUG9NYTF3ckQ3WUFCL25OUnhjcHZLczVMWHVEYnFSRmtLSmVTdTJMbFc2djh3OVY0a2VVSjMrZkdtRXQ2MGFBT0d6S1kvZm5NL0RsZU0yMmNVRDlpbmI4YUFvUGtZV1NBS0dqUGM2Q0hVQVYyR3E3ZUxYblFIRXp2MW05RktuQWk3eTUyYXFyK09pTFZ5SHI3d01SMjNscUVia0ZTeFkzVkNROEYwb2UzaThlelBDNzNmSnk2a0Y5Zk5OYlZxYmJoWjFuTTRaVmtHMTNCWFlZdVc2emJ5YUNxeU5xaHlHZWozUVlFcitEVkRvNWlUVWZpWXBhTUJQOVowdG9sNHBjNk5OZlAwWkVzbTllRllHWDVNWTFEQWxQRjRWbHpiYzBZN1RzbEx3QmswbUZUd1hSVFBLeTNYeHBMWmc0WklXTXo5dTYrcThmRExXVzMyRFBHNzdzYzJJemMxVzZqaHREdkdTWTh0bkdySWNZSktmVmFQbUxESzVJNEJYNTdpYVJqSmU2cDRQdlNVdzBwTlg1K2d4c0dMMmh3aHJaMWZRYXlDeGlYUS9PdG5FQ1V4TTBxSkQxa2poYVhEYmRTUUhNRTVOZlNpSmNjR2NGOVNBUjg3dHdSRzh0Sm9CQUI2WVFGRFRRVUpnUWZ5cUgycnQwcU4vZUtNQnJ0MDFhNFFJSDBwcjNvRmdlZzgxVndiWlE0NEJPZEhaL3dSVG1zYjFOM2plWGdhQ0dyUlMvSEw0cEpXdmovVzhEQk5FWTU4azdJS0M0SWxld1pPV1BQY3J1RmRYNDNRcERnN21xQ0dYSkZad1ptdnFaaUZ4d01YUFMrSVdtTFl0bGVHSEZWU1laVUIzNEl0TVo5REwrNy9MZGQ0S0ROalNkNTNjM1JDNElxd0xuOEswMXlxdnhab0xqYkNzenowQW1BUWxRbVVIMndnQ2VHUzM0WmpiRG9tUHhzNHNkeUlidFAvTTNXZ2F5L3BWUlNud1NTeWs5bUtvaXFkaGxhNlhPc2hyemMyMVREeTFldVUvMzBPaHlwQkhDUTZyWnZLRVg0cEtWMDkycFV5bkZadldObUNKZjgzWnNZckl4NTVBNlhkWnV6NGNDaFBTd0hlOGNxbVRlWFBWQmVSSTVaTXFHTXVuUktQV2xlbUE5bUQrM3FESHozbm5yVDFSZGFVbmNrVTBBbktnbGowNGIrakJZWUdWNDBLWkorczQvZEsxNytZRDA3N1hBcGpCRnhZMlM0WkRkZm0zOXYwRkJ6NTd3N0NrRVV6eStVRzNqMU9KaE5FL2kya1pqM0ZsQ2U1VU12MkFVSi81c0dKbnoyN3FUakp2d1ZzVU4vMzJnQnB0dUxqeFhTMVVVbFNTajMxYVhCbVQvMjZhMUc2MWRuUm92c1pRUnFlTWlQMVZuZWhKZGlkS3U5c0kyRlBGRktDVElld24yZC9rM3o3OVJ3YURhMDBJVXdyUU5KbmQ2dHZtZk92eENHZ3M4NzYrYWo5QnNlZzNtZ1ZxQ3Vwb3d6cEN0OGJuRmdUTWs0NEpicW8zQVdwams5NlcwcU5sQjMxZCt4YW1oU3B3V041Mk54ZXlySnllVnA4YVlCeG5EVkczZkE5UVNoVjloTW8xRHpwS3JURjQ4VEZtMEN2a2FuYXlISkZ2VThBLzNLalF3cEEzSXloU2hNUStLZVAzN0p2S09Rb2hQcmxhKzBQNi93S3pEUWUwanpEWTBjVVJxQVBlZms0WC9kWXRnb2VtemVrK0xxVEdob1UzRkRkODQydzYySGg1Y3dTMmlOdzV4RUw2UXdVODFwMi8ycTA1RWJJOTliaTd5dHVyYlp1VzJjS0tuUWxqU01tZUMxT0tyR29VdVhTRWQydTZQZHhTTHpWOURjV0dWK0xnd2Z1aFYzTXBySk9mTHFJODhtbGtjZE9MaHowZWdSUW9XYVhvYUZnbFJMWE5JaDdCMDFVYVcveTZ1eDNvN2pEOGpDdG85RFRuZkE4aFdvR3ByTiswYVVqV0F5cG5YVXRJWGRwbUVhanc5MkptQlBYNXliRElxOXBHZ2VBK3VTc0MxQllpQmkwTkZBSnQ4bmF2NTVKMlNVUnJvRytGdHRXYWRuQzJlMWowbzQyQ0pndEYrVnB5SkZ4OGlTRHgwNmM4VFpkSElpYlRLRTBXWXp6ampOSjBNRDRiWmtHbGZKVlN3czhUanp6ZXdmMkNaZXFXT3JxaDNzKzdEWjdCRWl4VlloeDkxWTNGR0dvODJZN09DbU5nYUZ3eU1Wd1Q4WDFtRjZqWTBua0pCWFdaVFN0cEdBMGJJdUZYZnczSmZsSWdKODlJNXFTdHpOTzBPMTV0TUxkZDlXZDlWRW11MFR3WmppNzgxRE95WkN2bG1STmNjcFowN0wxOElnY29lSlNSZ3hZcFlpZDJzNnFhNTBYQSt2K2l1YVVTQ1duZ0syOGlmQU00ekhrOVIrZDRzd2U0QnpCUWs1NkNBaEdRdDRjQjZhVi9mNloxVWtUUm9JTGV3NlhDbFJpY0YxSDJTRnhpaDl2SCs2M0dDcDZySGx5REhDZU40bFY1alNnUC8zblg1cDdXUncrTTk5MzhiWGtyMVNDZ3F1Qitxa2FZQ2wzdHNUdjRQMk93YittcDVSajNpMStmOEhVSVRRVG5MbG9WWHFEZWozRFIrMmw2TU1LNWorWnJ6WkN3SnVTYThxa1NHTlNaWlAwTHJSaEJndkxIdnR3cldVNmZBVDlSRFNuUXh3MXhJVmhTUXVSYlNJb0hHc1RGTTBFekpGZ1FRd0NLU0NPTEtUaHBEam9ZekpHQ1NUTWJsb2tsenk5THhndUxXeGRYTEpjVEJrTWJxSFA4ZzdTeXY4TGxyRzBtbUVjMjUwd1lOUmMrekxNdTIrTUpVREx2dVB6TkF3T1JnN0JDVnlMTnRLTzVXUit6d2RnZVNkU1Bja201VThIelN5eXVDTEluTlhpY1IvK0V6NmtYTGhwemREMVFCK2dBYk9YcGxCc2JKcGVTUExDNjhIeTQ4M00xZkR5Y0c2OXE2QUlHWXlaUUhRandkdE5Zak5aRGZ2RkdaUlRoZnNobFpDaFZ2YTA1Q1hWUWtXVkhjb2lrM1pIMnlhSHJQMkIvREVaUjBXNER1aCticHVqTTZnbEpxbklKVjlNZDZkdGZ2UnpiQWZ1UkF1Y1hiTWVCN0V5UWRYMlVDSkpBbnYwdll1dndnbVpvdE1RK1VORUNlc01adjJDWDNDYWZyTVRveVBiTHhxc01UcFdnc0thWEJhS3N2TmdiemhlUzVpVHBKSXdXNlczTE0vWWpxN25pMXY3cjNMNlgwR1lDWUIvNTZwaUZ5b2ZhRXl4cnd3eTFlREI2MEo2dEhmaWJZQlkvZ0w5azFoZFM2dW5RcndBM0JxTDBJNTJRRCtKRG5QQUh1Mk1hcFVBa2RsS3RJR2JtZlFxQzN4dFMvbS9JamNPVHBjY3g2a3RpeU9lQVJZRzJDRjVKUThlQmtQbVpOdm9BMmtZNmk3bVJYMUVqeVhTWEZqby9xTCtqRDdyem8wY2x6MDljQVNBdUlsNGdPWGxTaGFCbUZoRXNRcTVFcWppaFpxQ09yUitQWXpQRTBWOHVWRmw0TERGYmgrQVVIZmt1bElpRXg5QlZQdUwyTm9ScVhoYWJWNWRQMnBQcThQYUhwUTNzRm5IcS9xWU1hQjF2U1drUGVEbnpwMERhVWxnSXc1OWRiT3FKK1k1L3lNd3UzL1JMNGJpR2k3UHZuK1JNeWd4MytkMXV0VURvRGFKZU1ucW51U0puSVVjNmkxLzZOT1ZOWXAvWFF5eFZWRTZJMlZJbUlnWVJhd1ZMSHJtMmZwSU4zZkg0QUk2QSszKzZ4NmduNkFNTEZlTnNON1V1ZVFHZEJHOE9vemVaNFR2UmdmeFYvMkxJVXU3RzR4OHl6Q1ZVa2dkZ1VPV3poNXZXN1RHeXpBWTE3NzA1VzVtMDBZMWMvZFRMdFBwNW5yVDEyQmo5M0RwM3VuUjBuSmhXaWw3OGpCTWVuMlU4MFA1VCsrOTRxM3ErOVdDZVZYSnc3RXVOZjlDUTcrdzdHMnBJMU9NcWlBSUhwZEJVOVpyQlEzRkM4OWs4OVlMRmxOQkVkSWtMajc3VThOSnh4QWNKR3ZhSXlmVTJRSzJnNk1BTENqQnZuK2poYlM3RmlkRHArbGZiUXdJUENmaVBZU29yZVdnc3dHNEN2R2hTQ0p3NDh0L1JtRFJPU0hsSGE5M0pLMTgwUTkzTCtiZW1KVU51MUpOMkF6RldmNWJENFl0cll4aEJraGE3Rm8wRXRFSkt0N3Fqcm1NbWcrWW52d3FkM0Q0bFdjTzI3eUpkemNXN3Z0eHJVeEJxaFh6cklIdVo1YlhqaU5nTWJFRlZGVmxNaTFpRGo3ZE1WMEdLYkwrQnQ4VXVFSS9kNy9iMW8zUDdPbFo1MEcxZWowYXpEZ3hrV25WM1grNHFueVk1Tld5blhrM21jdTgwMjlkVlMzRFkrOWY0T1lEOUVzTXdSbjc3TkZiMVNSS2NIdEZXeVBYMURYL0FTU05vMlN1N29YYVdCdkI5TC90UmhXdm42WGQ1anAyQ1Q3YkZSdzFpY05jSVdmeWFsbWZVOWY5T1NMNTlsSkhJcm5NSHEyTjVjMU9RcCtOeTBoMmRJSTB2NHhlMEZwZlBIc1VFN0pvZmV1cmxLTG5SWktZZjlUMkcrUDU0YklncTgwbWQ0QkYwdUdZVUE4S2Z2ODdNWG5yZFV6MEora25GUU56RXNNekpCVENuZFhLaUwzbUFMTVg3WHZCZzdUVFNvMnhHeTVoTzF1ZGhINlJLcTRYRC9OcEVlTFlRVkdMRmpoL016bEFaK1BwZ2JzaDJEVXdOSW9GTHhhL1hCUlU5ZG9wUDU3d084QVhsQ2hVTjRUQTRwVXVSRzhRZm43TlNQdWUweGhuVlpPc0V1N0x2ZVpCL0txOWFFUjV1UktzeXMvTlFnOStSR2RabXdEdHlRWE9BRTFaOXZWRkU4Z25lKzNiRGppb2k2bW12RFRqMFpDblUrenhadEovMWlKbU16S1pYYm1SdmUzeW1YdklFdld3RGlMakw3VXdwbGtsczl6TUhRbFJDTFgzYzJxYk16V2J0T3pRNzF3ZlRzWE5hWEhmR1BBRkZCZ200Z2hwZXdjV2pjc2FxL0grZzhGK3ZpaXR4YTlBSjRCR1hrdWJDZlY0dlZoYmk3VmFnWHBSWUVpV3R6aFZKQTlySHVZU1VlMnBIMGNVZ0dhc3BTZDNVNGJDQVlzMkdwb0FXcFcwYzlHQWZ6YW4vandsUVQ4TmpDczExWmhpUndPN3J4SS9QNzJhRlFXd2luY1hJVzB2eG4wSkxCbytCY0c4SC91MWllSnl3ckV1RHU2bXBkMmpUTmU2QWhjelU1ZGE3d2U1T0xSdUdkUnZ2UjV6S0krWERRVU52aFhRN1ZGQ1RkcXoyd09EQ0FRSUlwL29HbFVyd1ZRKzl2ZTIrSDVOK1hNQ0tjcVhHWXVuOEdWWCs1anlIVkQrKzdlK2R5YjdkSUpROTJPM2hGT0dKZGJINzloMERBcWVVcjhJVEtaNkpqNktYVU5ONlN5UHNuNTJPb2c1bEh6dkM5RVBwOS9RKzhrUG02cHFTcHhhUEd0R1lhTDdNMEpBb3BvSFI2QmhoRWlLd1NjRnVMcTY4UDJmZjNzNitabUlXcEdpUUpEdHpJMHYvU0JUNnVMM1pTbXVtSkplVmhvRU1VeVJYS3BUQUhmenY1NS9vQXNEMFhzR212YUdKT0xLa2RzWERiWmZPWXBuR0FHdEYzMWtMUDhPUkdiQmJvOXFhdjNVNXVsbWZhOGliWGRKdmE2NHlmaFNqdG85Y1RPSlRvNUR6L3FZWFBVelJxWDQvZUlkejlHa3p5ZEVPbjBmbTRxNWhWY3pGT2N2Zm1lUUY3TFJtYzdlSDhReENralF4Nk9YdmpNbENRVGdKdXBKejR0WHA4VUZOb0NCYnVVeElOanh5N1h3MWJzVXpJeTNNcUlHWGtFcGlLNmZsa1dpQVRiWWRVb1Q2alU0TFlUcGpXd2FianpwS0dFK2o3TlVDWWFpOTM2c0JrYkJmejVJRFU5VUUzZUdaN040NFNOVUlYeFUrb01WZkUwZHMxSmZWakxtdytpMkR1aDdGYnV2NHJSdmpDSXVqTVFVb3R2TGg3QXZ6WllHR2NucVpWeStwazdZdTlVK0hnbUxyc0Zkdmx3eGcvdU5zS0k5NG1KaHYyOVpHa0xUdXRyWGsyYktoMGkwUnpCSmZyVzR0VXRBSnFkNWo3cnoyc3h1andVek83SjZRTE5oWm8vSGpRdUZoQUgyQnhsUGRJakhaL04rRlBIb2dmN1M4K0xUL1loay9wTERweGhaWUQ3QXJPYUdBdzludDJmWjAzSzlrU0FtQkQxRDF1dHF1SGg0NWtzWWZSK21CL3N1eFJXN2N1bGV4VjhDeUFXblY2VnB2alhNRWF6WGQ2NmUxNk1xZlRpQ3ZSUlVMUHBrbndONXRLU0E4VjZabnlCMGEzdUVEUHNJUXhkYlI2ZG9sdkhPRi9mU2JLQjBVUHV6eHQxbDdTUkRNOWpIbFdaQk1RMGhRQVhCWDBLRlFaczBMRGltMW14K2tnR0Nnc0lwUTh4cGM2VHZ3NHB2YjRFNVE5dklSQ0ZRNUNmbTR2MklHR2NsbzUrb1hubzhJMjZkWW9aTTRtVXU0dlV1blR0bXJNNEZMbW1PejM0dlZGNUpHOFUrVi9zcGM4SUxyUlJtazJDdVIvNEoyTHBUMU5ia2lyUUlCZWgzYWY1NGJRRkJuNVc5Z0pDaFkrTGlJbWdNS1J2dUR2M3crK1kvVE41alFBcWQ5aCtGTHNaejZ5NE1lWm5vaFhiZDBhNW4zMldNb3ZlVkh5WG5KTnZEb3VYZm91ZjJUK1JyMkp1RHQ2TGIxOS8wNEhHc2ZjQUFMODVoY3BqTGRWTmhSYTNXMlNhWjliam84aWFXU2lpYU54MnVnMGFNWnFGeE9RMEczTURweGRSblJmSU4xNG54RmowdUorWmpNRWw4Y28rVTJiVUE1bGxUT1pOa2lXRXV4MmVoTndQUys0ejlFYjhsZEN2YWJMQ2FlcmVOUkJCb1ljaEt6WmZGREtSb2lvNzY1cTV4eWNBbjA4R0pqUk8xeC84ZGFkRyt3dXBBb2tMVTNZd1RDS1pNakNHekpJSUdqOEFoR0NDTURseHhxUXl5azhuZTBFRWxlRkNxK0JYU3BzWHdoODd1MS9ydHNEVXFnV1V1S1NYenJsV3JkOTYzMS9xcVVucjlKaTBkeHNSVWxMY3lrNUJ2ZkIwa2RqRjBra2lNOEFmejF3Z21mTCtNSElndGNPazR1V1JubS9PdzRNSm1lVGtDTFJiSThWVWZWT1EyZDlPZEx0MGdZMXVKSEVNOUlDK2pwR3hERTM0aGYwaHdHbVcvWjR1YjRqNWJBMG9KakpXTklQbCtqMmo2VXBTZVNHbUZiQlorNnV4VWNxYTdKQm5lUmJQTzVSTWdZRWhGTGFzOWdaWkJsbit3VlVUdGJFRU1CVi91dVpZMHVLQ3RkZjNoWFVHeFgveDhZVm5SREQ1N2lqNFlSVTNKbFhWemVFd2J5bm41NXVuRHZ2Y1BzVkw1UXBaMWlZMXQwQmpqTzIzRnFxdy9nNmRVelNMdUc0RndkM216bDdwR0VINGkyNXZaNkI0NjlaeEdRSnNiQzdrTXA3cDlKcWpmNGNWazhBTmFsQ2RvZGFwcDV1L2gvSHZoUXVPQnNLMGZ1am84TnB3cEpvZ1U4dkdtQ0Y2cnNUMUxOSjkrUFNQOElSWTdTMnkxckhweXZlYzhrQnRNTzFyNmozYTVISmF5c0xqL2ZDVzIrVXlVbjBaRTFsUFQvbjBnL1FDSDVmZDQ3cHppYTV4bEUxNzBuek5ydFo0ZjFrbnBsU2c4WXBka2RKbkhxeUhZUlI1VUI4MkhMRFBZN2hUWjB0cDBDN2E4RHRKRm9mb1lRMCszZmhDRlpSWTMwTVRWeG5ZYXRtZ2gra2JyclZkV21adko3QWJOeHF2NWx4ckl0Vm85azZWbllEWHdGbCtTc1J5RWo2OUUwTG1hY2s3emFYVmZrNEVnWTFoTnJCMWYvd0NZbm5RdzZ1anpmVFY5NHVpeDlXUmY1M2Qxc0JFNW9qcWNNSi9xeWZVaGpLMUdiT29wdXJKdmhLNG5kNm1CVEQxTjdVdWgram11MFlobCtndHJsRHl0Q3Zkb0JXamRqbUFzU2x0cWlFanNaQld0OVRHLzJSRzlhQ25xdVB4aHc0WXBxWE5NZm03TlZ5dk82UTR4cjhDd0FuWXR4RnRidGd5TDhxQlJ1TnkrbjBxSXBDdjZidVJDRkxMaHhaT2IxUERHUlB4SXdXeWVENTdkNEtZQzN3eHlsMG5ycS9KcUU0MkdBY3dkTVBpZ0o2VDkwMW1qTVNlYW9QdUZUdjNZWCtNMXBKdnBjU3RWMXpjVVFDQytjVVkrV1FPTkxUNWREZjNMNTgxYmtMVGJKMlJDbFF2TkU5MWlvREhPbkN1dDhiUzZINGdKT0VkeUxpNi9nUUxhdU5POWgzYWpGUk4xVTQ0UlJVc21SSmEwODJMTHd3c3JkU08veTVPY0tCN2JRT3lOcGZLUHNVQlZUVE92dEF4MTVwaE9vRVhHeUNndk51K2lCNnlHeTdZczZWUW1wUGRLRDhjeGY2QmU0aUZtOWNWRmN6MHQwaGtTRVp3ZU96UVVuTFVoQTBqbGtud3hqQVprbGVvWm14VGUyTUgxVkl0U1VacExScnY1YmYydEY1VmNIVHo2UDZsQ2ZsMHM4Q2xZTjdrK2RPVGUxOGhseG1ib1lMNkRaeU43L3hNNGNlenh4Y3V6M1IyblFlRk5wMThVRmVyaEhKTW05N1lqRHEwaWY1N1Yvd2ZxaVZnaWdPTHV4OTZVL2FCNFA1aTE4RytKZldaclFqL1doRTZEa2podzhGdHRINmJKMHorQlNLY05ZYkFTZ1pjcHR4ZFMwMjN6dUZFUk5EcHkyWmZYTm1zVVZZc0FIakFVTWU3U25BcDg4UVUwYkRkaGhkRFZJNHJrWlZGV2ZEVldnZFY3dTI0NnlrVzVUSUJZVlRYWnJ1aEFaRCtWdThNRGhpS0R3Z1JUeGdYTGpjR2pLYjlNRXlmK05CNFY5aWsxSGw4VWNZTjhmbG52dTROM3JHL3U1bVpySnMxdTBoTVVlK1loc2hmTFNlWDN4Y01UZmFOMDBNS2oxMnU4aVRkY0ZlN1NBNDY1ZXo4aGNkYnBkSEx5aWNPaEdLSk4wdUQwVkNzaXVhYWdKa3RKTVFkSHJxeW5QK3g5Wmx5R0dyUVBJeW16ZHk0ZGdrZXplWU9EdWMya3ZYYlIxUUhtZ2VvamZ3Qm1JNUI4STM4cS9JVVU1RXJ1VVdiYmU3TDdmc3ZqQ3RCNkJpTVdTaTc3OHoyYmluSkdZY3FjdWd0aWhvV2JQeTdLSU50K2VWYWZkb0U4cXBIMzBmWkZEcDBRcXhuMWpDUFVLcmlpOGpNdVE4dURVejBieDJOdHVDeHY4ZGl1RFJsWDdWb1VPd0FNbTBROUdmSHBzeTZ5Qy9WSWpNSi91c1E2eGFoRWNTMW4yU3RvOGRrYUV5N05IdFBlS0drN1kyYmFjNEZkcytIUjlCTTU0WVpuZ2RTcWxJYVRIdVFwU3p5ZDRDckVoSkpxSkhhbjV3VGNwZElvZ0IwV2ZxbjJVbWQzRjdpQXJEblJFLzZNWmg1YlAxVVJ1OTJERlRHc1RmRU9YNGNyOFRqb05Tc1dGSkljUTdtOXIzY00rUEV0QjZ5MEUxTVJjK0pjc0d5OEJUSUN6a0REdmRtZ1ZXUTkzNjFrQm1Cd0RyRnRmTzlHSFJ6elR3emFQSzB1YXBnQVpVV2RUdTZwT094MGFPVThSYWh0WHhROFN6UktRUVNuYU1LZVUrTXQzRytDYVh5MzZWb3I0bE05eEVWWm5mTER1aU95RG4zSmZEc0hkWHVvTFlLeTduamNzU1IyZnlTRGNaVU92USt3cWRGODBSV1BneC9VUnZRMDhKSk9hdDNpVXlpS05USXRqaU1SeXNMK2Z4bFJBTzRpc2JaVW1TVkc5T3RPTS85a2FhZTliTDdwTjBiTGYvSkpMamhkemVnN1RSaVNuREd2U2VmSXc1T2tGSy9vTU9uR2lDeDQzcW5rTVJLZ0c4cGI4ZXVFK3dvby9ncWFTc0xVVGErY29RSlB6cUtzOTNvZDZNTzAyNndiWlV2TFhXbHE0QUJQZDBmT2pFUXdrYWZtSTA5Q3o0S2lXNDhBSURhOFpQNDBVUDkzd3JIWWZ5U1VlYTNHSkppWEFJNmdDd3Y4TUhGUUhzeXZLSjJSc29iYVFjK3hWdDJ6L0dxakpXVzFROGUySm9CbVRyd3M1UmJnOHJoT2pIa0R4V2JPamlWb0dDSitaYjlLKy91amhRNGdRWUIzWkxRMmJUK1dJdUJxOHlmVURKeVl0cDZGQkMzUW5nVFdnQU9rNnBtaHFqYVpSeTliTGJiUEw5U1FocjdqYlZEZFR1bGRUU2c5cVhzeHJHL1VwZy9WQ2pXelVuV3d3YXN1THlETnVyT3QzV05ySUY1M1EzT2k2NnJuSFVqcmYyMVE3UGNXOC9RZGc2eWtrVDhwb0VWYTBIZGRUdnQyZVZPZDdaU1BGVWx5VXZyK2NrM3VPTUg0TFdHNWwyRTdVamhtb3BVME5BMXVoT1prN0hubXZ4bHdSbTlNd1dEa2JjU0RBT3ZaaVNIZmcwcFNLY0hLeElGd2lkZ2hFWjVEa1dCOU80d3FsTDNlakZ5TGNNL3FqMitHSzVkK29XaEJGWUdwYXlaQ1dpcW1KbktRQkNBMXJoS2ROc1Fub2lPQVRHR2tQdjk0K2dlc3ZMM2JId2hNM3JJc3JaeXpGd2k1RG95WEYzU0RUSktXRGptR0hzYXFUM2s3dkNzSm4vSGRZZm1yeG14SC9Gc0hSRjBJVG40N3ZtM0Z5V0I3RTVrMXV4MXFibmpMU0x1QTQwOXFQR0kxNnNxSmRBZWdrMU13QklRSHlGb0RFMGlBY0hJRk9tc0grSklkdHE2dWtmUTdza1JCNFBuZHVsQUdIWktTQWF0akloYkZ2R29xeGUyMnhINlNVMWNmZThXY2Vac2RzaFhscTJQbnp2UXBGbExCRUdYdnJSalFOMjR6blRjWnhSQ243elByNjlseFdUUEpRaFNkbDNTNDdBdzJTdmhWbzAwK3hQT3g2MUczNUxmazlBaWdUR01IQzJuV1JtTDdESnpTbmR0cG9NKzZlMkxFUUhrbzBTUzhYTEp4VkVKb2VEWW4wT0htakdLSzNrdGtIRitHclJXQWdmNHZDbE1HQ09OaWpMM1R1ZXExaGptQWR6WlJ6cFlaeVpiODk3NGFRa05DNWI3cVJvRWM0b2puSktCblBaMVl0ODd0ZGJrb1BYUm5XaEcxRWtsWGc4MHl1L2ZNL05TbHlIY2owdzVXQWZvelU4K2NTZHduSFNNUURDQmJqMGRwc2VDUXpzYmFBTXRINWZXelo4YWNVM2xSWDZUUWljUE1uZFczUFRLWHBvTWdJYk83Znl2d2FCU0x1OTVjZkhWQWovdHptSVd2YTJKd1dYK082Sm9Bd2VJeExBZTVxOGJqYnc0eGNkdWdVZzByMFdYamRGWVFra1RQYi9jc0FHZ1p6NHVsS09Pb21vRXhBS2QvVFd1OVI4aFg0VVQ4N2tzb2VDMkFtMVVnSGZqOE00N3JXNUZEY0hMaHFqaUdydTBlOGVuQmpRTWdtOWJaYmFtYVNrRkZDMXBIais3S3ZNcHpNS1QraUV1YUZiQzd5eS9IY0NzL0QvVjRHcHUyT3FMcWtYbTR6aVJWQ3BNTFNoRVpyeklESTlVcHB4RDc5TjY3MkxKWjBURWlUZmJNYnpKRmNWTDhWRnlhVHczOTVKbFV1Y1htaTA3TnF5OVI4RzQ1ZTBwMHA2a1JZYzdJRExxSjM1OWxzcTY4U1l6aDRsbW51N2p0bFJkdCtFdTF1VWZsYVo2by9ydmE2YlRiNTBWT1JqVGtMWStCUThVSENSSEdRUDRvTDNiY3FyeG9vTEdQWFRsY2l3SXA5RXNvd3FxYUM2SHJIWjJCRXY0RGZTZ2pMNnhEZEduQ2pjWDF2eS9hRFFvSThhejYvUmJpWWpsWE9HTDVXaTR3aGwxdk4yYUErUHdqNlBqWFRZSXhyUDZIRnBxYkRob2RhM3dGQWJqOE00ZEVxakRmVzM4ckdhRitkZFN5T2FrKzJxcjdMdWYrWFE2N0taK3pOWVZnUHRUa1BKdElrdGg0ZkNqL2JVWTJqV2UrNmNpbGF1c0JkQXFES2pkMFp6eW1kRG92cjhLUUIySXlYSEQ3WE1JWlI5OW9kRlI3TFpZRWJJejRxanlGTjNRSTNvblB4SlFsa0pxSXdacG9OeStkYkhCQ0tTbWNNVU05eHpjR3kxS3ZWS0M1ditEMmQ1Q2VkRE4wbFZIV2xYM0daNGE1VmJJR1FibHdyM0ZEV3J4RG83MDB5OUNCM3pyUFRQeCs1S0JVNGJVbmJsUWY1dnBBb0ptd0dtck1QN21aeTdMRnFyRUw4c1h6ZmhGOVR0QnY0V2NubjNBN0dJVVE5cHVNRFVWLy8xdFRpRzMzbEF3bmZTVGl6UFRubUFMcEw5VzBia2lWc2d6YlB2TUhabU84d2k3ZnhKM2t3eVhZRzNlTWhUcnROUFpwSG9lUisxMmM5YVRiTVBKd3NBOFRjVms0RnQ3TUZIRDNoWHpDZVFnK20za1p0VzNRUGQza1dndmlzd2lMdmEwak1hOENVUTlqMmRFRUtUOC9MWm9WclFWeXA0N0R1SDE2T1g0MGZiQWVYYW5GTDFTUFpPUEpCS0hkNWFnNlpHM0NjZHROMVZLaDdrSWFUTVNvaDB3QVkzUWMwTU1zazdBdlVEcDgzbjMvWDNOS25nUFRoYVFldGtHRGNPekphMHFiUHNpUXdiaDY5V3RmL0luM0NpVEdSWmwzZndLYW1nOC9aRGRFQk1lUDM2em81ZGc2OWxlSFZ6U2ZLMVpTYi80T1dlanJPYjVMd1NtZXoyUW9UMmNGVHN0VW1yYmthdUY5RVQ2ODUzT0FqRzA5dVJiUzhNU0k2ZVN2d1dtcDVwKzJPbkc4UmsxdlowZnF6QVQ5RjRPdXBlRmF4cGk5bERTa0ptU1VqTkRKOXJmSnRDOXdLV1l4ZVNreEV4eCs0ajllZVpXTkw5d1VqdmdlZHBMaXQ0TndCRFVyMjBFOS9lMm9pVW9VWm5VNzBnNEhNdEFRRHFsRFI2QXN5cjZybm5Ra05odVBoTFlwSC82M1VFaTR3OFRGUHUrQVZabG0rdXFweFJzaXJCTlgzWFRNTE9hL1pVMkRLV2dYbkZaeEl5R3I2SjQ3YU5SRFQwdkR0ZVk3S1lxaFZrdzh2eCs4S2VITUIzcDd5cDkwandXanFnNjJ2NVd3eEg5TUluOGxpbkNhUEU4bTRJS3VDSE1acTUzbFI4RWV6Qmt0VWR0QlhpSTNUTXkvUVZBVjl5UjVvUzQ1MWVEUDRNVERYeWVJRGMxNTlQdUVia2E0aHBOTVRLb3lpRnY4dnhUbWRzdVB0ZUxGdlNYeXd2NXpWL3V0cjNjaGdRSjlnK29SbGpGVjlxdlA1bHRmaElrMngzNk5QNk1yUFg3enkwQ1RKaFdXMHo2RnM4anBXK1RpVGU2cWFHVU9WVC8wNENRc0F3cGtTU0FYNDl6TnROMFlVd016bTl4bUpEZDMvcjBreWdmeUZkakJOTlVla3FQam1HUEhFQ2E0aFdaYnlQTzJPTWp4eDNDN0ZNZC9sT29nKzcwcjI0UGRQSktvZWZrSm1iSWY5Mm11d2JjdktVMDlxOWlzby9lSFJRcGZ1OUlxVndFNkZWVjdCeWJnQVU3ZWpURjRXbGh2K1dBTHh5ZGd0M25xaHNidElZNCtEWTJNdlljN3FveVpqOW5wcS9MUmRod3F0clEyREhFRVBxUmdERTl6cnZYNDRvUTlwYkFsQ0V6SVNEemdXL2ttMXpyYkJpYW9pK3FMUUhKaVF0UTZrZkd4ZWFPclJVREZwcVVWdWtkcXl1WTN6V1lvUDdYeXpGZ2RRUiswV2JnVXhrZGpQMHpwWEdQbEd6dmZtais0L0ZmVjRtNWNtd0M0OXFNeGErbFpYNDJEMjE1TStaVFpzS0JBMjBkQUZIWXVWMVEzUEZ5cTZDM0JWaGhLT0RmTzNEb01mY1dWSTlrN0loZitNanlwSUhpWFk4d0t5ZnJLZCtjM00yU1piNEpEY3BFQkxyQmV4eTlFSVNweHo3STdEWHZvYlBEelNWVVEwSXQrcmRqeEpKSGUxelNSd0xIN09WWk9MZ2FIaWpyTWtlY01ZYzZ2bkhBcTU1eC9MZ2s5NzJVQWtoVnorbFJMT3plbDdodDAwZW5nUVcwanp0Njh5RU11ZGNsK1I4bHczM09taU1XMGlsSUcxRXJJTnNJUW12bjRDREdrNkdOR3k3dFA5K0F3aWVyN3B2VlNGeld6NUZBa0RVQlpOQ1E1eThVaTZKUHZjNGJvR0dMWGhybm5QZHp3SXdrYnlzblJOMnZna29BZWtERXo4UENkRjJTVUoyaGc1ZitBVEk4eWZBRnYzYWlMK0xpU29hRCtnaVVyV3JGVVdVNjRpaDlwamV5aVlIS2hnaWZwVDFSdFRESjR3bjBaSFRJQzM1QVd0eDVLb0krVmtzaVU1RHVudHJKdWtGTlQ3d1M4cDFhY29aemlkYWgyNVQ4SzRKbzN3VXhaMFprWnpYUXpoTmM4bTBhSFJSY0h1Y1B5YnZUQk1pbWZRQ1RIZngra09NVWsyQllaelVXWmkvbUtKWHBIRXB6V2wrVnZNaUZ2TERERC9tT3JqMVBjelI1WER0ZnRoM3h0eTdzbU1nWEQ5aWFVN21CUGpYYlE0aCtjUXdKZi9RUGlzak9iVVoydXlaNi9UU0R2bFJ0LzZ2S0NJQ3R6ZmlCTXFRNmtKK3dxamhuTENvSXdqa3VYdEwzTXg4QnZTSVdXeWVwOFdrZzRUdjltUjhwaE04bkNOWWhnWERiZlJFMGhaSVpZS2F1UGdlMlNNTzd5bVZBOFRoUVBPdDRwM3RqVlI1SjVIOUQxczAvU2xRTCt1ZzdFVUduRkNld0Rhc2o4eXlYbEx3WDNPNSsrcXJDU0s5alRsLzRhTEttdG4zQW9uVkh4QTl2Z25VeElWT2RqWkZNZjF2c2p4SUhKMysvZlBQWVZSVDZ6TS9Bc1lLRll5N3RFZXJ6V1BXOXpOVFVFWW42WHJUM2l0RTlkMEFkY0p4dW5HRkZSOGxGZ0NLYkZBYjlYTnlqcDVCa2xMZkdSQlVwOFYyeW85b3dhcWx3QzJhQmRjVHNJanJXTFVzdmFrOUx0YzFwc3FzOE8rY0s5YVZMcVc0OHc0T21Da0NOdDFxc3NPK0J1bWhlcW1lTW1SL2puVnhjdXF4a3oySWdoRk1uUW1OSmJtTlpuVFdyQmF5YWwzWHp0KzdhWUVHcHgrTFFUVzJkTm1GZDhOUVZYd0QwTWZUbURwYm1Xc2VKWndBMHhHRTFYODRLVzRWcGMzYmFKbkVlR2djditsWHBGZzZSMnFGS0pMQlR1bzdoTEJhUWR0TXNZemxraVU1QkJWN01sTHlMeTE0VndONWdhbW41UnBTWWRud1dGdk5YdGpQQmgyOXR6SXNtZGxZTHpFNDYwTzhCbmxHdmRsYU5uT3BKVUtLTUxTT2JaUjlsRnZFTUxZVXB6WTVnbFc4V3g5V2lYQUR1aFhFbittNVJOcklaRDNBVkF2aWVaWlFJVXhOWGduNVdTQ2ZDbDdXL3poNHRlRFZ1Q2NiREVqQWJZQ2Y4eU8rNGR1VnRrb2hsTk9XNU5JeWZnQzJPZGUrQzFpSXZnY0p2QlRiZ0hPMDF4L2pJejhROFN3alpnQ1hRUDZoMnlHRjRLN1lOWDI3aCt4c2ZUZGc2OTJ4ZENrbnRrcnEvM1VtVlY2RWNXMk1OQWhVZEcyRDhNZVZhNUwyVGVsdFphL3lXN05yQ3JmVGx3VWtDOHE0YjhzSXczeHMxN3FNd2l1aktIT25rRHFNdGhRT2V5RGRWVDNLQk95UTBZUXhLa2pRalcwOUVraFVBb0NMcFNuejBoRGtFVmVQODgxU1pWMGZHMXVKckNXb2ZZSkpvbkIxd0lsUzN0L2VZUGhsTmduQVRrelBWL05sNnRYREpSanRFNGIwckgzQUk3eGVUcHBwaHZuMFVJWmJpTDB2ZWJXVlFrSW5adGxFMHdPdGFmWUkraGMvY0ZwcGF1SjFPVTlFUnM0bTZPNUl5VUdzSEdnRmhyS1gvRGoxYytKZWVwQkxJOEdWYmxjQnVmZ2NQYXh2WW9aWFVMbTkraFQxUXVxaXo3Sk9LUUEvQXZZSk0yYytGQ1ZaN0p2NXhrc2pqMkpOMmRpa1VKNWZJY3hRZm1pNnRzMHdMTGlucFdwZndidkZGRUpjU3B2enBoSmtqQXdreGUva1U4a3FYZ2RieEVDRmdQajhjbGJOdTBUTE0wVHZQN3RTVWYxTTN1cUNUSXdkNjk4c1l5dzlxdFJqaHNyWVV1OVBqdzNHR2FVU0tOOTkwQ2cvaWRYQzhpUTNXWnZlM290ZVIzeGJmTWduMzc3bzVJNGpWNVZCVFVoUmgvUFlMbEcybWU4VTgwZ1AwTno2dWxmN3NIbU0zT1ZWQUE3M0todDBYeFQxTjFEN3hKa3NoWW9jeU9IdVNidVg1Q2xsUmhJMS8xM2NXb3BNNHFsYzlCaXl1V2dRbkszZ3VOcE9tUTRtSHJWTWRyTVJnVDdOc2dRSzhnallDcjdTc0ZKeWpoTEhpM09XejJqSUhhRTFTbUNEaVFycSs0eE13S20xd0tQQ05iVy9vRzJEOFVDSit6SnVBTG9kTHRwRG5oRmRPTWxKRktvVHJKQVNkdUZVUHpUNHVlcFI2ZEp6NjVzeTBKbFZLa3h6QnVwemw5TUdUbGZ3czNqMU5uSDhJYmpzaW5XNjhhdlQ4bXMyMTBmU0E2bGFFZjFDSjNENjR5SFh4a2t2d0swRTNvSmdRZzAxbU1YWjVxbUlNSmYzaE5lajRUUHhjSWhXZUN4Vi9NdFc3bTNNNnB1enFqYjJUT01wbll5WkxEa2lLY2hidFpNMjZVWGFObEV6emVObnZzTzFZUEIvcTZWSVFWbUpMYjUzRUNxRmRncUZWVzNUamxKSzREeTBUZkZOMnlLT1hnNFo1dytmZGN3NldYM1FqN0x5am9BcGlIdHY5Y3c5MzRoNzUzaFhFd1V6TldPNmpFSGF2U3JDMElTejd3c054alA3R1F2aGl1cmZrUHNIaHVqNmtPL0lWdmI2SUlZWnkyYS9DZUZIWnhuUEtndWxqWVNUZmRrU1U5UEdoSDdyVCtZcnJ5V2d6N0gwalE0dW5oSmNzM0VLaTYya0g4RkhpSmlZcG9qSWJtSGJjMnNSMCtPVUtmRFBXSVAra3N3eURGcVBiQXVlSUg2UVpZSy9HbGowc0VmbVIvZXVNN3NycmN4RUU4RFhjeHNDUUk5RmpobDUvOGNRRXljTEduTWI1Rk85bndaT2d2WTRRbWRlYXZVQlBLbFVDUlhWd0RYZjdrWUE3N1lyRFE1djl3N2VoVEdOMmNraWM3MTlqeW1CR1ViR2xjMDE0cHFrUjRoV2dnZmlHWVk3aVMzV0FYcU1wUERJZnkzb016cW9kclh1dEg2U0RiRkQ3NDVJb3lkd2xPcWhYc21Ka2hyRHhNcGI1a1V1N0Y1ZTdEaHZ1cWVaTVRoT1V3SnJKT2ZzMWtGSmg5QXQ1S3Q1d1lKUitaZy9TTFNpeEVWUUdnOTVQVE1kaERsWFdkK3N5eUtpbWJpK0E1SEJRVjh3YmVXOUY0MHFrM29oQmlIMVFUS0ZVaGJidmFTU2M0ckxYRnMwSDlxZ0c2elFSeTJYalhSOVI3TkJPbUxldWdOSU1lVnNkWldTZmVlUlV2bnVIcGd5T0k4TVlrNWZ5b2tlVmY3M29ybThhZngxd3o5S0hGSjc3VG9BTEhoN0VrV2tlWUlWOXF3QVcxQ0wrNWp3VllKR1hRV0xBUFVRSDhlVzdhTE1kckNqUDVUVkMxYkJpaUhLY1k5SWg1MzRWLzVtbm4vVTVET3A4THV4VmdyaWFPSGJ5aC93TGVVSkg4N2VBTElMeFdrWHI4L1ZPb3NFY2g5S3JtbmdUa2k5ZzcxQWtvdkVzdTdQMWJnaHNwdlo1bEJ4S3VIUVJLM0wyNnhaZ2UzaXNTSnJsWmpLbkhQNTNwSDRjcWJsV1dpNXE0SGhkT2YyUzB1MnVkdWhVM3hPeE5PMkhRQ1UrTkdxZlZtRTJUajh1TGJwN2Z5TGcwYzV4TTlGRXVqZnM3UUVkYVJUak5hQjZjZC9NekUwR24xRlpYOVBIdUcweFNUN2hScFhxbzExRGZsNkNrQm1LRWpsYzZNeVJxWXhSeUJuTGhJbHBjUTZMa2RMaENDd2JwNkxId01kUmNJNUo1SGVCME02VVBua0xrNDNLbG1ZZnVXQU9UbXprSy9rWFNGYjhKRC9PaGV1REQ1WlBreHhrOUI0NnNibFJYYk5RS0M0YmR2MlhXSkdrcEJ5VWFoNGhlUjZIVW9TN05wVjlGaCt2bUg4WUZPZFlQbXBTTjFHUE1Pc2xBbHdwMmZXczIxcEw1enFIUXpneHVPbnJrVWpoMXNZTzlyMFlHVUtZZElES3hPS1RUVm9vNnZIMm1oT0h0Z0NFbVhMSHlNaE51S3BTMzRRU2M4c1hwaGw2V3Yvb0h5VW43SVl2akQvYmFvdm5QTlRsV0pOK0tEZ3ByZ2Q4RVc4aVVDS1MzN2pmcERwcjUxUWMreEt5RmxOV2tCU1g4dXgyL28zQWtzWTNHOXl6cEhSVk8rTjIwTGJYRys2ODZSUzF1NDBScXJQZzczZ2JCa0hlZlBNRndmclVLdlVMOW9jMS9ZWHp6d2JVL09UeElyYUtCSkRzUGhodm9lem01dFFKaUJVVlBMUXJpS3pjZEpwQWt1Tkd5VzdBMHBQOUtmT2dId0pLR2xxK1BWZ3kzVEFTUHRUQWpjZ0xWaGRIQ3AycEtuSlpTdGdVWHJNQllZYTM5WnlEMXpIUWtLUUo2Z3dSSElldWxGbjZERW9TUUtiM0JXWnBwV0NncWMxZmNhaENrMEZWWTBrRHViNTgyQkVYUHZKTHd2dzRnbE0zUXNiYkR2SVZvMlRUVWFlZFJ6SHcyVEhpZnZRWUxydm1wZU9UVnNGYzRYcGFYSlh4NmZqOUNTU1lzcWRRNzF5aGRPSGQ0b1pGZllKZndmNHNVMysrWTIrZVdwdGhTeTVaUUxMK1BYQ0dNVGhBMm9BZHdReW8zdDRqVk41YmpuejhqUjUxZ0V0VWJ2UTltazdMSFd6dnRVLzgrZHB0b3NRMmNiV3FTOVBVMGxtV0Eya3RReWg2VmZWdTlXM00zUWdETEtNQXozQStQMkZ1am5MN3N3NjB1dnQ0R0JuV2FGSnpnZlByNXdpbk5NVk13ekQ1UGQwZXE1RTZHbUxHWGNHWEE0SUQvYTdmQUpmU0R6cUxVUktET09scVhWUmNob3VkWktYU0pNb2ZqRDkzYkxUVVdmZTVUcDdkc25DRmlYYkEzbWJ2emx4VkVEUm4wQndDZDBNTXU3WThHa3Jzek5STDR5cVR4RFBoWW14Q3BYRlRxOHhNZDhGY3dPSnZneEprNUc5eTVIM2tlbDY4UUNNY1ljWFhQUnlhTHA4cnFYK1IzZFc0RExSeENpVkF0alFrSVEwODdmenBCZnZQOXBBVS9rNzk5MlJUK3Y5T0NIMWFXYXQ4REdwOGo5SURPVFc4Z0V2SGc4RTRHbkgrY3lDeGFFOC9nTjE1cTQxcktpNzZPM2psRDZQMWpUaGljRW5UK3l0Z1l4OGRqWjA3M1dTYXVLN2t0OFR0TEJNTktvR013QWVxV3lkSHg4aUZVaXhvZFFaZ3VmOWpBMU1WS295L3Q5QUJpZzc4YjhLcFZ3YjdETlVqU3h1T0RMZ0dOalA4Tnl5dzNmeVRiQzI0K0lwNXVmUlQrQ2Znb2hYSVRWNXJzQWhvbndQWUpkZFlhcGVMNVptM3Vodyt6ZnhYTUY0eE1MbDhXcmhWM1YzWitFR3RWRDNOeVZ0SUhCa0ZJcXNBS3ZmUWs1aENDVk9XUDRTT3AzMzl0dVo0bVYyMGJieG8vOXFHRVpYbGN5VWJuOFRoN0JJdnZEaUFjejd2ZDZPOE1vU2NlNjZOdVQ0WHY2cUQ1QnBseWdzY3p6T0l6RkhzdnJkQXNKbTMvSVpKUDRWUXpmcTVMQzByM21QOHQreHVLSmtTNEpES051Z0JrSy9wK3RXbktiVGMwMnkvOFJPRDRsYU5CSElPd2J0a1BDaHdFbFRYM3EvU3RkdWtyMDdVQ0RkVmoyZTVxeGJBQkZESmNoVW1UQzJzcGdmd2I0UDlkVVNTam9vMWdkT0JVM3k3czA2bjhyMXl3WnB5MVVaWXpoYU0vcTVmMlhhU3hidzU3MnhNTmYxTjVvZy84RGpmZGpJODRyTC96SFpCODdoWjhYR2hUVThCL2QvVzVoNjZXRzhmaVlJNndlWGtncTBvWVVWamYvMyt3V0MrRTgycXlnVWwxQTVnZmlKVVdKbldNaktTSmhiY05PcUNoSUhkQlB5K0l5UVNGdWkyclJWalQwYzFGcitxRGhjVW9wQXlGK3hBaEJITVRlSDhwak5XWCt2cDN6eWpmM3dqSFpCNGdXZnNURFpMM2pGN2pubmEwOTVrd203RThUTTQ2Q2JmNDJ2RVZDcUdWKzNieU9GeVpWQ0FiSHpDVjdUSyt3QmVscGx4ai9zNFZycGpNM0VsaTVnV3JnaklTMHhDTEh6QVl3NzNDbDdOK3FYbDhyOEJlbkpXbXprc09YSkRjbGEzeU9TOVZIcVNFTjhGSm9sdC9mMmJLM09QSGt2NEg1VVpEMFRidnloaXE2T1p6bk9XYzUweDZvbVF2WHJqaXg5czdyRXhNcDEvcG1tYmxEbnM3aHAxWi8zRkovbDNmbk4xcFJSUWVrUFB6YnVIQVFDRGp1dXV1eG94R0J6L3BvZUd1R3FhWW1ST1FlQXZwZ2h1ZngzOHBQSzlFV3Y3T3dWVTR6U2ZsQ0JJVGRuWitldS9KNWNNMU9LSWxteE0zanFKTjk1TCtpTEJjcVQ5bkJaaDZUYkdRVk8xTVdzNFNuai9RTGJlY0hHYmpJZUR3WWhRdjB3dEEydmo1UkJ3MTZoK1NBYUlSc3RQVHlqTlFPaEtrc3VXQWNGdjR4eGdocElEVHk5UGJQRXBPZ0FOK1FDK0ZvTEZpR1FPUlk0S21nb2ZiSFNydVluL0FOZ0FmWEgrcjJvdmViWmZicUFZeC96VXhaMGwxczdLY3pldVhRMzR4bnIxdDNBU0lBK0I0SXNqaWcvUGUrd2pGRVlMbWVFWDNUNndYY0RHcVBnVTc5M2sweUx4TnRCRGgyMFNhcUZDNHIrN2taVGhpY3N3QmV6QXAxOGMxYXpNRU5LQWF0QkRsZnJKRkZ4NzN0Y1owUHBSdjNKYUw0ckM0bU00Yi8zK1VtbkpwMTdUTFY3clM0V1ZQSUZRejFDaTQxVDVySzlDYkRIMmdrWUhJSnFtOExkWDhJcmFjNjlLTGpVME41ODBLUWtGdW1DUlIyZURsZWJnNk5ad29VaVh5ZUZzUG1lbVJiUkw0RlMvS3UwVWlxbzNqWjZvdTYvUDNyWUp0STZBVW5BTU1pRE9xRmIwQkFQaGViY3BZRGt3dENvL1BFdWo5Tng5SmZ4MHlteTVpWWlXRW1xb04xdjhDbm9yM0lOWGRIbVk2aVdCYzJGVDYxSzNRTzU3bnNKcnVQU3FsN3lJaUZYVStlYkxaNnJMa25TeFJ5SDZ3TEwrbGd3c0NLbGRhZ2dBVWRRYlREa3BXaXBubytiRDZ3Yy9XcXBGeGU2bUI3RTFabjBDY09NNDlneGh5azlMaVRuQ1Z5SDhKREgrYTJ3VzR5SzhaSHBuaDZ0Nmo1M3ljRFdtU0JTWmtBU280OXZ5UTFVQ2NMY1NBQUk2WTlVY1IyQVJ3b083VkNLNlhkYk9pV3I3REpKV1Y3SVVISTVpeEQ2MVpaVEdqNHFHZVh5S2ltZGIrL0NWY3ZqdlNEUGoyMVV2TmozLzBETm1ieFUyMnJxYnQ2blhUdFV6REZDWWVGMDdVZWUxUmtIQXhGcXFPOThRclFEcE93RFR2b1FWdXZDNnRpN1NEMExQVjIwN3ZxZDdKcnVOYWxKa3ZZMUJxRFRmekJReXNjaVU1U05WYVNucS9aU0UvRHVKaHJkTXpKNE13eG5tWnV6UEZXL3FBRm1zbG42bElZV3FKVHV3c0dZUm1pMStkVHpLMFpVcFh5Z3FrdGpreVM1QWY3M2hzNG9paE8ybG10bjMyeFo2RWxXUmZKOHByZW5EczVvRldMSFdlbTNsV1RtM2FhWE5wNGwzSE9ITi9rUTJWWkdEV3N4UWJ5eGhpeEZqYUE0c2YrclFGL2piOU5CSW5nQTN0QlZDUzZTeVVkVDhjTHNGeHB0VjhJSzFBMERxWEdqOFBuOHdHNkJJSkc1ZHhMRXh1SU84MUw5c1FMVkRzL2hoRmdVeE1BNEd6UTVuZWFXRGg4VW5HeWxoQUNpaWxmUG0zaHdaVUNndnpFVllkeXZ4dGw1cWhZY0VnVlM3WG1PUFFBVmN4ZzV4MHRDaVM5dGtmTVRiaHZxZXRSeVFRQVZQa3FjNGMvRjdCT0ROZU5jYkorZDlrTE5VSFM5cFZoa2xybHJXb3FYT0hZSHgrakErbXRkSU9KM0hEOG53QTdWbENUM2R2SlhFZnBLZE1hTUpuR092OHNxNHVzbmpOektkbmhRV1BycjU0eVdENkl0aUo0c0VrSVkxeHdtVmtkVnFOVWtMZW1YSXNUd0lPMitRZFpOYTJlNkVQL0dxSkhzS3JrMVVnS2tITVJBWllvbVhTTnBUejRsQ2ZpSXd0cUJXYWllaGVnV1I5TE9GaG9CL1FNU3FrS0VUNUxCS0ExYTZwWlRzOTNFT0VIUmNyZE96aGVUTkVSdUFpcUVlTTdXY1BtdnY0cytGRjZobzlwSFdRci9WbDF2TzUwcjhndHIyVnEvbXNxdkRjSXQ0c3o5M1MzaFVtM2R6WjdWSWJudFZadGpva2MvWVdyYi9uNFRoYWhoUHE4djJ2d2srVCs2eUhJUU92R0FpaEN2OGNBNGZuY2hXcjNTNGU0ZVhxb3NuSkNQWGtqYVFEdVZsZnp5dTNvbldpZVhFOUNUV0pWSGM5ckt0RnFNWWl6ekhtY2hMb2s3NlJyUEprRm92bUcvT1ZHZ2NLNmJkWlE0aFl3ZUZvenZ0MllDWXB3YjJCMVg2emh2M1dOMmI3dDhNS0ZGS2dzK2V0UG1MV09NR0hxRUI0dGx1cXVyb3V4dE4wV29pekF0TytOVmw4ZHI3VXlPekVQcVZHaWxjeDNEbWZPUHdkcFVUckplMmxXcmdIempmUmxDR2xNNGpPMHVxb0ttcktUMzdhMm5ob0ltWm9DN2NuVjdyNWVCLzkrL05IdXU4WEdGZE9TcFJFU2VkQm0xUTZweG9hN2E2dEV1Q29tRkJtdEMxQ1dXWExSOVBRcVBBS20rbGxnMXRHTXBYclozbkViTGp0MmF6b2owMWxEMTR2OXpSNEpHQTdtaTc0cCtVSFJEUEpzbEZvT3lDV0pDOVU0ejNGcGdWeUlZREFieEN1djZaQ3Q5a3Z1T0oxYVhVRU1DK1lhMjZlT0JEQTlCd3ZSNVMrUEhaZzFVVFNES3FldURSOUJzdFE5REJISnhFN0x5SHRRL2tzckpicVhhUnVFR2FFTUF5Y1I3UkVOVzAvYzVHMElYSCt2Vkc3T2dyc0hlT0hDZUtycURCaEhUVGQ1RUtoWUNFejZLZjE0WTNQYmJ5SDd5a1JTa1ljVUYxMTFOYWpxaDVQdkFMcnJ6ZW5tVm9pWUgwQzB0cTdHNk1tUU5qOTVOL28rckM1ZDA0eXZkREJYcTI2aERuYW1QOGhTbTRlOWRXUEo3OW9lU2psK1pOM005RGFWREk4dEFRLzk4WjVPeVNFTk1xcUlXdm9zdWYvTThSeG55NmZMQytuTENlOU1FTUlMc24yVzhScUo0RlhCSm1IdGJIWHVkUDk0THdQMHVhSTZhUzBzcnRRQ0EzUUNKeEdFcmk5NWRaZ2ovcjZveUZCbkJtS0RURlI3b1FQZHJyOWpWUEF6TzlzZCtmWmdCYzlidldRajJLRDN6TklNalEyVmhUa1JtRUY2djBqbU1aV1piZER1dVRBWnVPUU82bk43bHc4VHRqMExyVENDTEcrMGx1MGRlY0pNRnlBbHpIM2FBazFXOVVQbEI1eGNlcGV5VEhPakFnbDhtWkJDRlpnVXJTVG1WY0tTQ1lrWXI3SzFyZVVza1d0YXZvdlAzbGdTRTE2SGRHeGl6VzI3cThZLzNjTnRHUG1HK2E1RkJJdG91YnVQeC9yME01cVQyV2trNS92QlMvSTUyRkRHSmJ0RXBmZjN6VytWWkZDZ0VEMW9EZEhrTVVlOVFqVDZBWHEwNWJGbFhLRTlaM3AvZ1pYNlRBZ0FuM29aTDJsMFA1ckQxQmQ0YmR3U2VNQ3NXNFkwK3ZscVFwbi9aNS9XWjdoQWozRDM2RWMyUURnWENTdE1Gem11VHU5WnN5M2EvcC9PbVNFUDA2TG9ESVlNVHBnaTZxQ0hycXV5RnVxM3hOaWczRzZnRlUzZ0srTTlEUk1uWXRWNWh0b1JONTZEekRkVzM5OWUydThOelpBVFA5WjVaSEROOHFrZFY2b2FZWGJXYlZ1b0V6OE1CM01RWmUrSkVRa0JXdUNPUmZsMHlRb2ZCQzd6aHpDQ2VpUUN6d0VJM3JGUU5UYlBManB2MHBySm5QYVJyOG1vRUJMbHRVK2NtTUpxeXRMZGpSaUNKL3c0SWlBL1g5WHJzUDZxK0lrWm1HQVdMN0s0S01UdjJSbzR1bUZhODRaazhlb2IveUN5Qjl1dkdvazAxTW5qUTNLK1JETEFjNkd0Q0JISkl0Wnp1bFJJd0RXd1hOVXh4Vit4RkVrZllYNDVXY0ZuV0xzY3dxVVRlN2lEWitsQzNiRlZHWUxvYllXblZQc0RFNk1USVJtdTBwRHl5R2dkcEc3QmNNbnFBTTdLbEQ4TjdQeDZITFRlRjg4WHpGeEppcGthbHN4Qkl4bWg3OGxWRVRjdlp1TzEzaTNNZTFDVjh5MDZ3b2s2RENCaFpkS3JKREFEZUdtaUgxME9EYml0Q2M2bkxxZjZGYjNBSUhWK2Fvc2hsTnFOdzdubmJmVG4rVmprd0svSURzZlliY1lCd0hFR0pVNnpnWnVTQU11TmEzSTJuRDhuUEVrZ3o3UHgwS1E5d3NFdDNUZzFDbUpINmZLRUFuODhPSk16R1E1dkV3WkhwcHFWOFEycDA2UXBUNXR3eEFBZnZtL2ZxUkp3WjhDRmxta3dQTG9RSWFzdFNEUWZ6cU0wSjNWQ2Y1bWxNUFZyRmR4RDJwVWdDeVdJVVE5UGVuSzRHL29kczJydVl0N3Y1RmFuWUpsc1hLR0s0d3d1UDhqLzJxaGpiT0creW1sTVlLbmxyNmUvV0NrQTQ2SWVTcjZXZ204dE53Q1J6ckZINUZicHFudWE3N3plRU5FSExodGJHdThqUXBJREdrRUdMNlJOQUhvQ3VGcnpCY2REMHBTYmltM0JBUnp5VjBXNHdIRG9kdXZtNERsN3NEVGNnWTNUSjVLZEx2U28wRXBBbG12TDhteDNhK1hRYUhRRUZhaVJKdUlRVHpvZjdLTDU3dTIyQ2RoZ0xkcENzcDF3M2FtVmh1bm1wYndHUTg0ZVVBWXJZdWROK3NlMmV2aGxwZkVITXFTMXRWTWRuQnJCdFUwTjdxM2k0bEFHVkN3WHpUMG5EK0N4YU93bzlIUEwweHEyWVYrc2RoM3RoZE9WTkVyMjBUR081WEtzSDhjK1JDeHBTQ01QNkt3cTI1WklSYmVNZ0tDNDNpOU9kUVVaODdwNEg3d09SL1hhczBUWWp6RVRvNTg0SGoxaURHbDJnVkJJU0RwZHlGaUtrTzllMGw4bjJ4Z0s2N2g0UUVKemwvNDFjWExvQVNOSCtLMEduYVFaeVJhODFRY0ZJWXdTUTZoMkZLZHZxUHMwTE83dStpRjl3UkhaZldOVmVVWG50Qld1Q3JENzg0NUtxKzZYK01YKzFWL2Vic2NONWpYNjdCcWh5OG1lbEovVUJwK09vVG9xUVpxUXVVVlJ1b3pHTlAvT0hNbUhrSHkxK1R0dFhzWVhyWElvR2tSOXFVQk1NV1hjRDMxcmY5MGNNUTVlekRIZkxzM2RHc2JZZ0UweWxMdDdUYU10TmhRYktlUGRWMXl5Z1VHdDF5ZFBvaXZHSm9NSjhPTG9GZnZVWHBicCs4cFZoZEhhdHNZUkhQNWN0ZTJhZFN6RkhITVR4Q0pBejROR0ZjaE5RNGJpbUhDM0R6aVdLbytKbWpPMlIyZ043RTdSdEthWEhveVBLS3FScDhVVWhrMG9xNVM5N3BHWm0ycHRKeDVET29TYXlMTUNOTkZDWTc1UGNOSURWUnFaYlJQRjBvRnVTdm95T0ltZXRvOXRTVkZLQ2QwaCtiZDlSM2VkaUYxZUFiOXdtRXRRb1pYSW1qdlpsaVJ2NElIWGt1aFcvclpIRGRtVmdwMDViQVdMNW5DK2VwOFlldWprTmdac0JteUFVRTVlMFdBTGpVT2VxOXpSVlExeEM3WnJ4Z0c0RkRvWkU3cFhCNlVieUJJZ1BLSUU5dEpVQzlKbTFtQTIveFpkS2M4T3lxcTIxRWJFeEhPbDlYODdiM0IzdVI3Ni85UGtRZ2lpVGNxMFZISTNsWXlTbHNvMFdhcHJlZjllb0dDcFV6MTdGbFJNVkEyekhiUXJLNExjSXhjcjA3Q0ZEYUduMlBOMGFyVmFKck84N3FBSEN5OHhVK0ZhMC9Ld0pYQy9rbm1Sekd0c05nbWN2QWI3dytHL2M2ZTd6YTdKdDd2Q0xOUGVrRGZLNE8yS21hMm1hK3FwWmZ5d1ozcjViSW52WkEralFJNWxUSjNQQjY2SXl6M2VDaG8vM1NPU0pLOUVwOUxpQ202RzRETWF0N1NITFBxV1dPWXdvM3lGNzFETHNnbVhUQWd1SmFIeHV3THVOQll2WW1HTllMODY5clk4WnQyR1FwK291VHdaNVJuaklsWFBYYUVoc0p4b1N0eXgva3U2UERhcXAxbWVxZjNpR21GOFNOSzUwbUFrRk1JTnZYcGdtL2tlbjlJeTRvMVI4d3p1L21xZ0ltUWJOanY5alc2UTRIL0ZCOG9ZVjNkd2c3SGFoZzRqR2dUYzVOTEpSTEFlcWFwV20rcTRUUllaQWlPb3lDWjZ6djRnY1g3SW90MGxaTXBKdTRZamN3a1FEbkVKQ3paQnlXNGY3UElObDQ3SkM3MkZBQXk2RzNJQ3NBRFR6ZVJpZXhEb0R3RDlaYjd2bUdPOHVydWEzYXBldTVoL0ppeEM3akdSS25wUHpqMUdyVkp5QzM2L0dNOXhya3JQTGRVbFlwSFFrM2RveWpjbEthYXd2RGtGbEFCYTFyM1pxL1QxUnZKZGlNbk11V1V0eXdHWi9iMmRacVVySUJUUXJINU9Vd25BYlY1TXA4VUVjWXRYMDNqd3lLS2RMaUNhM1JqVTBMaGVDYW9PTHhES2FScVphMTZKTlBDSHFKZWloYS9jOERmbkxUT2VKVDJmWFdaSnl1dnJ5UUl1YW5tejRrMDd4VHY0eXJXYUtNSXNoaVkvclJ4clo4TTNTT3haay9jN0tWQ3l2SnNhbGszQ3dQd1BBdStWMHVRYk4vNmhqbXFwYThmWjc1RllJTmU3SDNZWnVWdDcwWTNXT20xTS9BM2J6OGlTcExRaFdxZFlRTUdlRkFnbTNNUkVxY1pCZVdLWlpWN3RIcWwwNFoxak12dTJwVkVCRXBkSjUxTXArWjFIYzJ0aklEZnd6YktxMXdQWnRiNjYzUEVKeWVFd1pubHlMT05MM1ZlYTdUTk82aFVpMnE0N3huR3BZUXM2cTAyWUUvenhGOXUxbEVrMzJYcDF0Uk1WTTh5UHFITG5uWDVNaHYyRjdnZmFVK0U5VnlscFlYbUJEYVo1ckhqQzROTVI1ZWE5VlBrTTZHQlJxemNVKzM1ZTlONGJJbG05dzRVYmxDZXhSSVdjdEEzVzNZcU9YU1NwaTMrOXhwNlJIdFBGNW00ZTB3cHIyUklMWlkrZERoalh3Q1Uwek5NM1ZXSVNKa1o3alRBejJyYWxkLzdKZFlnbUdubDk4KzY2UHRka1lOOG53d0FOUW8xbHZRL3JNMEkxUzBrdUJYV1krNjByTlZ5SUx6NGc2MWpZZG1yVTJtMmpEaG5Xa2FBZ3MrVTZ6N2FncEdtZHdBaGQyMHNMb2dLRTE5VythdnZrWm9mVENOYTVyV1RpY3p6WWdmZkdLejZYV2FGelpsRm9JNHVHRFE0bThFemZtaVprbnNVeTI4THpUazBEWDJqUnJ3dFZIdzdsZDQ2UVFNY3Q1RXpDa0JXR1EvOFRJeE1QSmZOOFVkMlRmd25HZjljYzVTa1FySlhxTjRURU5EZ0tmREtTZWVPN1BUWHhZWk5Fa2c0ZmpDWUovdXpmaGZkQ0VRdTdIaU16OG9FNE5mZWtGa09YNFd4cmljSXpIVWxDSmduL0VWY1JTUGxxRmVNSitQVzdSYjQ3SkRTSzJ5a3lnMGtjbFlWQXd5NzZkdW53S2Jrek5PK2hIUGV6dzBPRFFFWHl6eDVQdjZFRTBvWlRLUnEvMm5CeSszQzk5SldlS0M0eitWb3hscExtdm8wdE0yQWdJQ0FnSUNBZ1BQOFBwcTc3ZnNjdCsyN2Y0ZmNEL3YrNnAvWjFSOTl2MldmNy91SDkrM29pdnQ5TW0rMzA4cjZpWG0rMzZZYitIMmt1L2JmVjl2MmU5OW4ybTM3ZXFIdnQrMUd2cyszbDM3ZWsvOUQwOS80ZW94UG5XY1A3Zm9mL3pmckhOK25aLzdmc0Z2MmZZLy9WZExmKzM2MUMrbjlpTHYxYjMvdDlGQytyMFo3NTBiMDhOVXFxTERvMTNwK05RNzlIVm9OM0dxR1FBc1FRR0tMMnhaODFyeHhOUFlDOEhmY1NtTDZTYlFoZDBBd0pQeElqM1RPc0tmbzZQZFBtRkJhakIvTjdkdzRTKzZyd3dGc1lWZ1pvaE5mNVZ2WEdpcDBWKzRvcDN6T3hmYnQ1amFncjBENjFyQllOK01lUkFuNGN1UncxVG5uYkRoWWx4cllDRG9sajloV1NaTGYvSG9zcE5lcW9zY2FqTTFWNG9DVGwxK1pJc3NQb0tneHVKMmZIaVlaSWRnRmllRStyeUxFMmRsbFVZVkV0dWdkcXorTGozTmFpenllZnk5MTcxSHA4QjNDaEMxblhFRS95bE9ObFo5bWpzMXlOY2wrR0lDellBUDJ2cFVhdklrdSt5UjllbTQ1bTlVdXhZcXZTYStjNjFNNHA4N0VONFpDWnVSYkZtd0JUSWsydm5VSkVvQkMxQXFWYTZYVkFyMjRSTFFuVXI4Wllpd2x6aXNZQmg1aTZPK3R2ZEJNby9ROXh6WXcreGx1TDQrWC9pVEVUd3Z5WjVlbXA0cWNIcDlkcWlaaUhHU1lOZ2x0bDg4ZTA3NEIwY0tOcCtvOVM4dVFQNFpydzgzQm9SKy8velN0cHdTLzEyc3RmTDY5SDNZTm1EYTg4a1IweDA4VEFocTR1SFZJNFN1Tmh1Z1FZYkFSUXVkc2VHWnNHRTJyTkxoOFZXV3ZkOENOWTFhNktEejZ3N2pibFBQTmVzYmJXNXZaY0cvSkswMUlzSFdlVVN3Mng3ZkVmdEd0SzlIMEl1dVkvWVlTQnVHSnhCOE1QT21DRmFUUk5KY0d2UlpoVmdLZWJUZTRQY3FyOFIzdWoxUU5URDdtMjROM21FcEJaTHJ5WEM0UjI1WnZPWWk1d2tQVjVUcXJtRTZSSlBkNllEdHFZSmRkQzhYUG5ld2c2elkxbEpLRnpzaHVrditCUFNnRnZrVTdNL2FCZllhL3lHSVg4Y0F5ZEhFYnR3QitDd1FUQzFoajRVdUR5K2REKzZWb1FFVzQwb0FVZUh3S1dHTGxxZ0FQZkh3VGxrVHhuOGJvcWV5dzN3dDZpN2dFYUNSc0xNeTkyYWxBcUs3cm5uR0w2eTM3OFdzNnlFRmc2ZU9RaU5uTHplOHVqM3F1ZkI0MVlWNkU4ZWxaQVJxY1pxNitsNGtXTWlUcEtiaExFclV3L3EwZm9Sa01TQlRIbkhtVFYzbWs5bHFGQUdWQUxZcGY5LzdhbGprc1J6TTVEVDZUSUdEcisvVGRLeDRpVWFPYUF3VXlnMWZER1pXUnh5QVA1L3FENkVOZ1VFS0NXNlZiVnpVSm5OOVNidk4vQWtjNERoTWZnR1Jnb2xucnc1ZUp3SXZKcm1tZ2hKL3dpRG5LNXo3M2JtaHdQcmNmZWw1Vjh4QzUrVldneGYxK003c09kay93clF6d2ZjeDRINnRVV2gxa09BNHVVNS9odGhMYTdFQjUwNTVHZmdkaWhCb2FxUFpFbHBvbFFQaTRDdHlvT0tpVHBDRUJGYUlpbk1qOHpSaWRaZjlCK2hIcXdSTWhoeHA0cUUwRnRDR2hBQmxBSlBtWjZLYThkVXpMdGNlN2J1STAxWmw5bmxENkwyRXErR1crOXZtanpaK3laQWhnZmVPVnkwTk1JZ3RlQ3hsMTBFR1BQZWpWVXU1bHpqSXFPdGd0cFJvSzArWGlMeDZRbVZyOHhlNDdsTndIYk4wZ1JRYTNHR0I1MjllcjlLcHIxVzk3dVY1N1JqbFRvaXZYQ05pUUxWWFpOQXIwbkxoM3QyaDl3ZGpIQlJvU0lGelY2TFNjYmY3MWZOa296eFg1OGU3enE4eTBSa3ZQV0lCTkVOcE5DUjU1dXh5K0FNd2VwSEZJTHFvYks5RW5LWmh3a1k2K2xQeWZrYXVzWk82UTN0RmRqWmZ2QUZMbVhPMnpnNWpESDVaeEFuSXFRaWxaY1RSN3RsT2V4OXBodXJ0RVhyNDZuT0phdFE5NWZOVmVuM1BqOExMSG5ZZ2htL1dFL1BZZlF3WXE0ZEZTYjh6NlR3RTJ1N2o4bW5kZm9PL2ZmMmFzSjVTeFVCRjg1b2NRVkw5MVVVRG9lV0FFNTlXc0JORjZBSjJLNzU3eGdNMXdqWGlVemFiMGFaNzZRbG9PUVpSdWN0Y1QzcnpJbkM0N2J6aVNrN3VLWW5GRllselpSNXMxWThkQjc5U2F6Ui9sUy9raHFVbkY5WTkyL0pYQU9CTWpkZE5ndDZnRGVlNndoMVFFaWtmUUN1bEs0bzQvWWJkbSt3TDYxWUF2M2tzeklrZ0pvNVkvL0xZQU05NzdxSEd4NkI2UGFIWlIxLzZFZ1NjRDdOTmg3eEljcFo1dW1sUTZQOXNrakgxa29GRDhXNEpEZzErSWdCRUlYU1hBRXNkRjBtYWJFdW0xTGVJWlJRdEFibWgraFlCaG1lZ2pmcTBHbnNmWVp3NGxZUTU0b3htUHdZK0xKUHNkU2xBcFVZMG5ZaGRuT0sxSlEwRElha3htK3BmMlk0NFlHT2p6WXVvRFFIV0lWenFXWmhiSkRQd2JMREt3NjFKVllPQm9acFF3Q1VUdE9VbDc3K2p4aVlsNnhIck14WHAwU2dTcy8yNEVJb2FOVTlwVElBRDBhRVQremRGTEtRT1hKNXQxNTdTam5COURBL0tNYlJjWlVVYWRlWC9YZ0cwSEJKYlpuTGVWc0g1T25jencwc3FhNmxTVGg5aWFoYmJ4VkJCQ1YxVG4zNGk0bytsaXhTZWsybWIwc2RzUExiQVVrWlpKTDNZVEZtSE03Q2R3VVZEczlnbHF2dXhvamVKL0R5UkplOWw5MWN3N1BjTVlwK0t4UUhqb3cyWDJRWllKTjBScCt2NDJNOFphaW1Edkl0UktsR3E2RzZXYUZtcmpXRzhNWkh1aTdSVE5vRGNaU2dhWGpFVmJ0TFlxY1J5dkJobnd2a2E5NTdGTW5ucCtlZnBvVVROZU5WMnpFVXhnNmlEMHpRdG5jQ2x3NWlqWUlndE9YYytSVVNCbWxVOWl5ZEYycXROZW50VWFWQ1NrNDNpdzRFMG53bzdKQWtMSkkwVk5TU2NPeE40ZTh6VnVUUjdNZnduZXFMcWQzN0owNktNMGZUM0dYL3Q3T2JrNEVEOTNRdHNDK3A4NHFKelJXelZOVUhIcUh1Z2hZV0JMTXo0RGMvd0w0N3Q2Ukcxb05WWURSNXIxTndQTUdmNExOWm8vL0NSVWpGZVVCVVhUTXZZcTNPYlBkamUzRFFtcGVZOU45UFZFMHpUOStONHcxejNabFE0bnJXWHd1NDNyTU11VllRUkpwMUNZSXRaZFNzWVRiZmZ5UjZqR1VVMFhSZWxyYW81V2UzTTl1TCtzOGdwNS90U3hqR2l2OE5XOE9DSWliMjYwVzZjbjJpYUVCbUk3OXBEOVhtb3FyckM4TGFVeVdlZmYwSzZ2VUFMUFk5YzlXVlRoNVcwVGF3b01aTEVhaS9rTnI4WlBPalhBMEJiNGpUakR5NW1hOFF6OFVPR2F0R0Mxdlg0Q1krS25IS1d2WmFhb056MDNIaGxQL21jbmc4RWp5TjdERDB6YVJOY1lCTnZMOEs2eG9Wdm9jOFo2SG1GcExwR0FrUFlyTm1xTTcxa1dURUNqRG1nSVY2aVRnSWl3cGcyVkhyZEw1RlJ0My9QMGdpTlR4dDdwNzRPTGpYQ0ZjeWF3c1QyUDJCRkVxdkIxZGxUZ3pJVXdFUWpMUVhJT1NZMTEvUlRFcGJ4c3V5SGRDZ2xwZ1pYa3J0V0xKRGVUVnVpSmdpOFRodHNzZjRnc0xIMEV4dmQrbWRiZ0tiWjVyclc1UUo1c1BKNVZ0N25wYktFU09VditLQTFqODhaSjl1VUFsMHgzYndGVFMxekdyTE84c3ZqTFQ1VVZ2bmRrQkZLclFVc3RKbUhyRE1UdUpqdWpmRDhuTmZ0QUZYRWFJaDh3Y2JIQUNwWXdvMmQrdXBSRGtoSGFEcDczVlFxM3d1ZFpZQlNLNERCSUJGMks2ZXJnL2NGcjBXSFBDL0JlcGxldWNNTmloVm9nSWlKckYxd05zRDhVSGNmVzFqZEYxTjhDdXNiNzBDQ2pzYWcwaVZsQWRsYlJqa0wzWDhPWko4b3BxVDlJOFR1bUorL05CNmdVMjlUTS9RcHBMQ0tHNitnNUJIMDlIWE1mNnR3QXVOVUV2a1NrTk96d1k5UjVudjlCcURVa3RNZzErT1hHTjVROWFiQVhXNFJEaFcrdzdZVkxUTFUvT2FNY1Q0K1hwclZTcUx5cWJMNGtuWGlBbWRjdEE4YXIySHhuS01nUmtkUWNGSlAxZWFTWHhZNWhrVGZJSmtqcHJlOXMzazY0enhEU0RuVlRvSkRDTHNoZlZjclZIVE4xYnd2UFhLZTFYdmd5eXdFN0E2QVBGaWRDeDQ5am9QQk9ueXU2SVNycVcyUlhDbnFEWHhsWXJ4VlgrRURRa0xHdkQ0eVJaTVNlT3VvYjZCUStiSm9pTlppMlJ3T0tlNlJadWtCNVZqdm5zMk9nb1M3Rm9ITlp0bkFyOHRLZ0hQOHdHakFpRXJMeUc2U2JDZEd4RXlmbTN1NXhxdUZ1Y2JVRUxhTkZNdURNRmFnUVVqTWpnWTlBcXpLOHdPN21BSExxUm1uVkl3b2JzdU5QVGZCSjdOU3NkL3JRUkF5N3pLSjUvcHg2cHNHdlFWbGdlYkdFQUltOERPcVJaRVJaMnhFYXVhSEt4R1hja3NTN3hmb1g0TGhwZy9uQjZLUXZuOVpnV2VJN1V3N0xqeVNqR2VEYkRaMGtaV050UFdFNENUOUZ3ZEJHcStYL0VHZlRNZ0R4Ujdla3p3Wjl3anVpczFiYjhWSnRFWkMxR3psaU1oZWN1UzZDTm1xeVM1SEthTnU0VTNIa0t1dzgwQWZOMFJZNHR0Z0xpdFFyWGpPaGV0N0lUcTc1Q0VnOWFXNytvNVFxanJCcHdpbWplcU9Dcyt4cTdPWDlCMHRiZWxheTdsd1JJNjBueGovTHRiN3NvWFJvSEJwVGtuZE12R3JlNkphZmVRNk9WV2dhWVI1Y2Erb2pXUDYyOGFrb1FMa1JVejFXamI3akZESUxERzIvMWhVSGxmVkJScUlGaThSMHlqaFJsQW03bStPVW9qSVAxSnl0dlpsNGZCa3JrQ2NyU244MjJUaEZraXN2aHBiK2VFNXNhd3hwdWs5T1ozeWpGNDNKTWJhc3BNemUxeVc3Y1FubHIrTmZHN1FaQi9maVVhTHFPU3I2SFZhMXEvd3ZEQlNGbFVhbjAxc0FsWjdBRXZ1bng1d3RqZ2M3clZ3eXVGdTA5UXNIaG5vcHJuajEyL2tpMEVUSXBkWTNtNWxtQVo4aTVObUJqNnRGNUlXVTBjSENldUlBYXBCem5WNDFTOURzemVldE42VlhEeHdqODR6QUdJNUtSVzBremRCaFhGQmw1QzloNU5JNjAwRTdNTS9sSzl0RmxkQlVqMm8zUDJZd1JsRlhXQ3pyajAwdnFla0tEUEorZUFKYkRYcU9CWmRYMlFrM2VNWklaTVJJaHJOK2UyS2hDYXBaSEdVbW9DNmFnQzNrU3J3WGNTWENOSFF0eHNZb0loZTR0UWF5b3R2UnVYWTlrb3lZbTJCb1BodUVKY1pMZTl3S09BSi9uSjNweTBGczI1dnZldEF3SG04REV0VGxNYkN5cytnM1MrZVZwOEdPY0lGb1NGNGFCUjdzWXVoQVN4RzJPaTFDY0RhazE2Y1RLenI4OUUzZ3FmZ2R0bXk5MCsrTmxvaU1wbFIzd1pVc1lQOHN5N3Zoc1QzYlZZWkFKMzNKaVRUY0NMNzNuSmlzck1TdGc0U251ODZ4OEdIT3lzYjZWM0lCbmZsSW1uQzE0OFpYNGdDUGF0TmswT3BySjJCeldRQTVwS0NORktmcHA5djVuNytIV2FoZzNzV1ltZE5yalJVQmFlYVBZSktxRXhHVFZMSmRBenFDdFNuK0U3N1JXSWprVDN5UjhVNjcxNUpYS1I2cUZRRis4UUppNXhrMGs3Ny9hMkhqcTl5N1ZmN0FqbE9jOEZIb3ZUekJpNDhFcXFsQjYxditqRkZRZFkwNitjNCtoWVEzVDFCSWRRcUltaXZnV0hYWUZhbzRzMXk1cStRTUg3NFZ2N2EzYUg2emxrcmR2QzB6UDJXeUZGN1VsSSs4Y0huRDVIUmZLZ3Fra2hZT2hNNGl0ajJKQU1EZkgrOTBXUElRWHJUOXBpVlFCajlqZXFHQ1ltMVRvSlduNWhmcjJWN0YybVpkNFZqMUhxT3FPTFlsaDUxN25qWWFwRU1PTUYrenFqOE1QRHhqSUw3SDBLcUJNcldxVVhYaGM4SFRuSnp0Y1pua3RkZXV0aFNXZkg5ZkRITlc3RklXTTdodkxpOHY3THZBaWR2K2hmTFRTZGk0TnNzZDZ4RklBZEJ5c1dMQ0xub3R2NmZpYXVUL2lSVk9OU0FSTjlwNlRXR3BKcm9KYWsvamsvVHR4ODdmbmFBSXN2M3hYT3hrUXNmY3RBckk2aUtxSDg4Z28vcEJENEJoSEY5OFJlK1doZ3ZHVUR6OGo1a0ZiTTVaWTFPUktXUktOVWpYdnlkYjVMOWJMcGRaVTVjMzROS1NqeUYySnJCM254MVpCRXM5cnNoZzVsK3pFQkZpRE04MTQ5amY3TnppaDhxTndndkkzcVFiSkZMRDBlQ2tyZUsrV2t6QW5SMG40ZzVUcWhrQ0xTK2dmcjQ4Z1F6cG1sTGhqUzJ6Njd0SktKYTZmK1crSkIyODhyK2YrSFpWRGxzeUNtNkYrS25MOExWa2VvV1k1YXFJanFHeHVzbDIwWGdINHlCczljZFlpNldDNUdxSlFaVFRVZXBndy9MR3h3anE0VEZQMzVucE5TbkdtdVE4YkpyeFJkWjBmbEhMQU93djllK0pvSU1NOW1qWHdFTEtWQTdDZkJoTXJMM1hBYTQ0dkw3RklpS095VkF4SklJelpoOFVRZGtJTlRQSm5iRmFBUTl3cnk1T3pjRUdlQTErNyt0L2E1Q1dsL3FuRGFvMzZwR0FLc3R0aC9NdkNSWXVVUG5BcWlSbG5SalF4NFNnRytwVThEa0xFQldWMHEvdDRpV0d6K3haaTFvQjdPUlluZm4zSjR3bVh4aHdwczVVTnNuYStYb0phek42WDBKOGF5MUpZbFhiVXFmY3ZUcllrWWNULzFIZkZHaitKWlRNdzZwSE5pem1hTEtLN0NXNGltTXphN2xhTktKQkFIUmh0SkxCK1BkZWpXNmc5MnpzRlhJOWZzY0gvQkZuTDdkL3FNM0tzclBPNjQyZ0xpUU8rN3lTT2JNN09uNHU4VDRmWENEMUEvYVZzS2tSOU5SUkRMelpNRitsNTdOb2xnSlIvdEw0dlhLVTlmaVlGaWl6TjhQb3BkYnRNTzAvSTRYMUJqbHlRQUxPTjdCZmxGWlNZOWp6c0lBdE5jN1hNRk1idHNaM3ljeHFEYmdZUDdoamIxSW5vK0p1WTdZb1U1REhxREI2ZjJzbjhNeHFRYytyR3Z0Q3NqelBQd3I0bjN4dTJCd2tHS0MxMkhqc0tUa1NEREQ3TGRobDFzVGFRM3NTMDVINXExYTZJTDFEbjgxblNDTTk3V1NURS9UNkgremUzYXV0eUNIMmZkNVN0U2ZUSmJNV0ZmbjhkcmRhekZUQnUzWDlGeEozRGhrTElWeG1UZ1lpcUJLd3ZuVmRYSXdBSCtJbXBnK203ZEl6YVRYMDlSeVI4OXNhRERBYzkvV2kvYmJpbVMzTG1iaGxtV0pvU291WmhZTUgzZFlMTVNmRTByemtEZktuQXVGUDhMdVhUcWpVTVZYbUx0TzlKdEp6UHdLSDI4bXBTOVRmUy9lVHN5Y2RnRzVKUlBJaG9OMHg1WHJwZFh1cXczUVh2d3FSZTgwaVJET1BBSWxOTWx2MUZDd0dSV2xwaGRhdy9yK0ZzaEc5RE10dGVPRHJ3eHdkaXVZVWxUbldpbVYvQ2FIVEpiblFCYWJKMEJUSUZuY0l0bHppL2E3Qm4reDJmRnZ1bnZWTTUrcXJTbUNvNzRVZnAvTVhOdXVmYytsbHR6TFdOZFhqUlZkdnRwUkN5K2xEdTlZV1JQOXJ4T3I1YXMzekgrd0kxWEtiWXdjckEvODI4R3kvL1BqaUF5Z1JQZjhzTEZmVGV2UUNJN2hJaEhwWW41R1dudWR1VzZMek9DNGQwNk9uMVlVVUZVM0hyOVNOM0tHMTdvaDVNclZ4N2lkQkcwWGZLcXZzc3ZkY0g0UDVZQW52YUluS1lOb0luRTUxK3Jia3NBZDBOUllvcnNYZ1JGQ1ZYT1FiajFKczlhTkxQVXFTOGkwY0ZVUGt5blRZR2Evbk9vRzlCZDB5em82Tnora3NCb3UxMHdKYUlmQUlyN0w4cjROaXpZanRxdWhPcHFMWWlkUlR0c1hBUUNkT2NqK2tCVVFsQWI2Tk90bHd2Y2RmL0JXSmlzRmZmdVNjVFdmbUgwMlF6WXJWNkgvZG9OOFpleHN1YzVYYVJXSnZYZDd2UzluQkl1RWRZbThtQkw2TUpOVnduZE8zV3dPekhOUmlPa2cvbUNOOXVveDFETFo5OTIxeUlPUWZiZTBOYVJidVRnd2ZjcFFPSlpHbnVOSjNuVDVCbzh3MG5CVXBOMGthM1NwcGZDWGNVOWZHT3FvanlqRTVTZWJENVN5UDRQenprTGtkaUxjTGx4eVhKbURtSVN0VGxuZkcrV2lYYzZINThSaFlqckc3V2U4U0lPRGZwSWsrZS9Mbkh3SW5DYjYvUVJkWmJYUmw4eG8yTjFlQVJaekpoVUplMWJYSjY3OXF3SGhpSGJjbmZqU3pLVkRsenVSaDVaZXVyOTBWT1lLcDF0bTZsdlA2QWdyMWtOK1hvSXV4aWdENlVnaTJzL0FDbG96Szc1Vk5ESjNEdDlEUFlqRE1ndnJyaEN2VlFXUXdHUGd3dC82L0pGdHdjbnI4VDJVOWhFVC9HMzFLQThHLzhkeVZ0VlZWNE9JL0hQbVV0aGpPTHM0VktYTldPNTFCUzJSV2VkTEd1cVU4S1lSWmFTaWc1TmpqWWtudE9TcDF0TkhaOU5SV3dJajBjNmtPL0p2ZW9HMXNhUlJ1RWE1Y1ljSUUzQWhsZWNxcElRR3dkWUw4SXVHd1Z1Y0xNUXVqbmMwY0hGUHE3dVRMTmUxRlh3VGhuTUg1VGFRdWpVTXhGYzc2OTdkS1ZFbUJQM1J3QlQ0WHJ3U25vajcrMUdjcWJ4VjU3dkN5cTl3cWNtRlZpdGsrUWtXZDhlSUhoTk5XQnRQeWYvTGdSek8yWjVKYi9uTjBDUEI2aGtHanBXamRQWndNTEFZQ2lQTExzSTIvcFZIRUdJcldqdzdtbGtBY3hhSTZ1VTFCWml2dUQ3a0NKRnJKWkMyWDZaR2RKM0htUk15SmhEN3dkVDVVdHpJVHBmYUFqcmc0ZEtPRnhuVHJMZnRvRFFBUjdjTUEwemdJdDZIVWNXcXZQd0pPbUY5d3FYVkZCcVhtd01pOFE3Tm54NVNIQnZJbFVtOW9WZm1LQTJMNXFEZis3RXYvZWthTEordnhaV1BtcHRZTXMxNWhHUkxlenloRmJXQU9ocENGTXlJYU5LOFBRQkNadjErQnYxVERhWFBmM0tkY1gxell2eXE4eDFhTUo0VXpIZGZZWFZaei95WXR3NG4zeC82MDNvaTAyeWRQMjdPODlRT3ZJWlY4TUJVQ01jczNxVTN5NTY5ZUsyU0djN202M1lIa04rTWxoeXR2ZGVSL0QvdUVxZnIwaGl2Y0NYMXdLaEVJR1NaWTMza1MrMC8yTWxqSnpObDZpeXJKMjEvZmtHdEZyZHZKckYrbm80ekU4U3plTzhXK2VIYzZmK0dmaWhGcU9DYStoekV6eENRbjlDMDZzNnFyMDJ3NCs3ZlkwVzBwVDBHTFVyeDdYZ3FCK2h2SG92dU5adC93U3lyUnRZSlA0S0VMV2ErUkJWTitEWWdaeHJLWEJidm5LV3VlcnFaSHpiRVUyVlNXQXN5N0xCSllCcTN5UElXSGZ0QzNRYnNQZmJqMlhzQ0YrbjMrQ282S0ZvMGJJY3NDaC9RLzRlUlUwb0pJMG1CVys2alR0SWR4STBTUnR6VkxaZEdwaXYyM3JyNTNXQUlhNUpIcFBtMmxLRWx6dTZaVlBuMHc0NHNPeDVBQXZQaWdKZ3AzN085N1RkOEZSY093T3F2WmZ5WG5vd0hKcWpFR3dyU0RVQWVkeVA1ZmFwZGEvb1drVEJJbWVIRFhlUy9DbFpFbzBSZVFYS25FbEdLVlZkTXdxTnlybVY5eFFaczJkZ1FtNlpoOWRwN0tmNWZWTmJUUEViY1lsaFdhVjNFWWE1TkxFbm5nbmdBb1U3eTZxbEszQ2lSZnpCdm0xZmpVQzRhb25XSHFyUDFDbVZTSEg5eUpVK1NQYXc5QVdPTDY2YUd0bkdqbEgyNVVnQjVpQnN3cnZhblROYlFLVU53UUdlQWcxWTZvREh5Mk1VZUJaN3ByY3NKYkZqVHBlQzNrSDVTeTQ4cjRjZk5XNHpNWkxEN0UwWEgwTmNxNGFjLzBCN2hyRFZOTzVvME5iYVd5RFhMVjczQ1hkNG5rRlhhZmtRb2FLWEIrOHVkckpHTkg0SDcyL1YwL29oVnBvb3pnM3lCWGhvRlE1dXA5WXVqWExHdHpZZkw4dWt1bFZERHJrOGVaQzFZRTJha0d6czdzYmNzMEQ4OWFCWXRYYjlPOVJtSW91bDJTajRaWTMrM0FHcVg3ZlpTczdnY0NNVjdnSE9YRGJaMjNFS21Namw1N1VqRmNSQTg4NncxZk1ZMGlBNkI2aWF0U0JmOFl4SlFWaWh4QWFsVDg0ZXhHSVROK1ZLdGUyOFB6VVRVRURPbmZZME5jN1RWWlFpVjlpemdNcHk5bmgzYURET0pFb0VyM08yRXgwRGVhVFMrdW40RW1sdVFVWk9tNTZjbG1ZM0NHeWU1ck43V3pLNXRKZHAxMm80RjMrQU96bCs2VVh4VFZHdjdOenllSmxPRkVrY0ovQTVFSXpWYnJNN3Z1SFk2L0J5WUFjcWpSWk1vcnJLNEcxOXRyQmRUTUczbnNrbWZUUnpGRmRrMCtkbDNEektLU1pyZzhQNXVHdVZJQVp4cVl2YmgwdXpUUm9GVmNVSTFzbVZId0s0VTFwSDAzK01YZWoyNitNZXRTcFQwOUZFYWgrZUJNUXdYbVVSU3l5dHJMN3RGdHFLTmQrTDVBa3cyQUN1NGVDT0Mrb0pseFVWMnlYZEdaZ1N2Qi9VaXJ2azhta1pQejhUTXJHcFBpbG5NRUxDZk9lSmdSUTBXQ2R6enFRbmViMXZwWW56UWxQaHYxa0ZXbUdsKzY1Nkp5MmlackxTVHdCZnI4Zks5eFc3QWRMY0dIS3RIVzh5YWVuc2RSQ3QzNm9vTlNwMFNzUEdLZDZaVDVNaXFkeDczVXpKMFBRNGVMNFQ4UEFZSjdhb1h5WjFxdkJZMk83eENka3VQYjNxdW9nMUNWL21oV3V5bW5Lc05FZmVJelFqeSt2c0psRlQ5STFRRlRZK0pza3dVVDJKaUMyVTN2d1RPSHgxMWN4dDd0akhIcnZydEFaYlVWa0F6eUxybWJOS0ExcjFPM3pGMWlzWWxJTEF4THdkMjZzL1h0ZllVSDMyVjNqNUY5QmR1c0ZtV3RlY0RQU2VUS3AzL1dTRnZXZUN3NU9iZEoydU5IZXJ4NllRYll3Ty9XYTd6WHFHS1Y2VGNnRisxbXhtTDJ5S2FjbTBES1pBaGpyc0dBZ2ErV3BpZGV4aGRzd2hBbys0dDlPKzFGcy9qZ2Q3b0xmUFgyVjQvNWY5MXhWbnVSYWlzaFAvTklUclo1TndTMVdWNGp3OEdmMXRndFhPQVR5VlhtVWxEeUxDRFZlbTRDelZ5SkdwUDNxRE9CY3h0N0lFQTM3ZW9GeUZKSTZqNHBVMGZtQVZ1WTVwaEhUNTJQcVNyQTdoUEZjY00zeHpCdFN2NzUrU0dRMUdBbUh0TFlSZEtIdUJHY3dlWGpXOXlDeU5sWHo1Y01pdWdETnhDN3FrVk51d21JbzN1WUtYUi8rSkhVUkZOVk1YU1BrNHZYWmE3bFZkQWwreDV2VElVenpXQ2FTYjNIWXhLdG8vbzJvM3NDQW83OGZyVDB5KzUxb1NjQmF2NTk3NjdDcVJyaTNZT0Z2U2hMcHJGOGpoMEF0aE1STXl5cUZHVE45amQ3Y21RTUVtSGxwMEtHQzk5OU9ydW1JY2tuL1NWWGFJU0liQlRiZ2pxdUdVZnhWT2hqbTZ5bno4dlI2cHRMdFowMy80TndlYmVreDk4cVhkSWlIL09udEdySXBuK0Evcmw4cEdkSHkxTGtGQitWSlhnYUk4N3hVU29od3lhUUU2b3I2OGhzd3RoMWd6VHo1aVM5d1MwM0NiQ3NwTkViSHpWSmtMeG1ia1U4SHdETUJRSDRKU2NBbTlmamFBbXh2QXpGTThBb1dScStPV1drM2FrNnhGTWlONGluVVl1OTJ3ZU1EaHg4akRZb1didUZoR3lKeHdCUE9QdnNJQWRROHZ1NHVYclB1bUpxcUxRZmtobEtKc3UrTDh4Q0tVQ1NtUFhqZkIzRkpTclRzMzFTdWV6bGFlVXRiNmF4Uy96L1lmTElsRW5UN0lTWVc4Zm9MRmJOVnYxZnVLZkEzQjh4bTM2ZXJUMG5pb3NxWFZ4SG5nUUowZzBhWk4wYkloeEZmUTB2VTN2TjJuRWtXRGsvMVdRZU8vTkI2aFQ2RFpiS3Zybmllak53Vi9xMDRrSlhlNWZjVGpZK3ViMzRuQ2FyYXVPQ1dDMmN0SUt2MFFuV3RKdWt5S1ZvYmtkT1lwMWZpM0NVN2wydHY0bDFZYTVRVlB1a0tPTnhnNVVxbklOT0poZDlsSWJlVktYOVp2TDdWczBRVk9FdXFCZ0ZMNWptNG50QURNRTBxVlBxb25ETm5pVlRMM3RrRC84SE9hM2VMRFJyUW5wNldnaUNNb0RsYU5uTW14dkFJMjJtNFc0TVd1cEljTEJpK3o2eEZWajJqRDJzaGttQS9aZDJsbEdZemg0WGpKck5vQkFHY2psa2lmRXdOQmtCM0lLVXJPbUVaOUk1REZ5SWVkb1RuSHhUK0tqdVNNaXduam5ReFllekRueE9BSStSdEZldU1PYW5VZDdOMDBEbFg3d3BJMnBDYVhyeG9mUHpPZHh1QXNIcjM4aGNObHhwTXk2L1NuL3BvenZiaHA2NXR5YTFTMGNuMXdGWjdmNjFDNE93bi8zb1p0VE8yQnNUTkR4dzY0WUtqbTJNN1pBRkRvbFdpQmRmanlHSnZjaGkxM2RQUmh4Z1haYWthYTNxQjgzYnJDS2hCNit3K0VkKzNFbkxXU0loVG5DT3NwcmVJSWJYYXpJY2NPaUp0U3pzaENGT1EwQ3FhTXJHeUYrQWV6TythbWVSc2g0UDF2OHZrOFBWVjNtcFJVNmJjcE1EMlhvZ2JFSklQamphbUQ0ZTJuZkd6NStvTWYwL2REb0ZIZEZuKzE1SzdjVG5sOXZKOTN6cTVUaG00aG1NakZpMFBmUnJjNjR2SWFOWnlSa0p6VGxMMW5DWlJkUkl0aWcyTVA4Y2hzSnM4dXVDODdXSnZ3SXlSWDZ3TlhJakhhdlBzeDZ5Yk96cTVUblduWHo1akpaK0VYa00waE1ReVdKclROZWcwSFJuQ2wxeldBNkEzZHZvMTBWUWJRMGlQYUpwaU51OVozb0RPMHd5MnVZdURncERmUjQxM0MrbWpZVWJLY2NhakVVQ0NPazZRaisrZ1VSTHRZb0N3MC9mQzJiYVg4bHRWbTF4ZnBVeVF2Y2hHcjhmc1dxYUs4eFdtbC9hbytDaTZuSlJtcGxxaSt1czhVRnhLbzlRbDBrSmdEcWt4RDhxbzFlNVRDQStNcExQV25GUUxESFJpbCsvaVNuTUZBRGVvWE9VdGYzUGFMQVVhT1lOdUdXVUhjQ3FqQU5yWkRyRCtLRHRRQW9uNFpRRFlrUTFBd0VGRk9oWTR5aXcwci92Uk1qRVBlTlMrS3RXay9wdkVRQ1VEc0dIT1Zoc3djdFcxdTU5UTd3bDd0ZHAwa2NNa0RhQ1dkZ0xKWDN0L3JCcG1VTElFeDlPaFRTYkd0Z1E2cjFKRzdoQXVvcGNRdExFRGhJZmxBU2luMklOTUxHUkh6b0xwV01qWFAydXNMdjNMSy9Xb211RFd4RWp6eGgrS1doZmVaVVYwR2ZOY21RZHZrQTc0b0NzQ2ZmQStjbTJuS1V3ME1uWEMxY0ptYlBncFhwbkR2dXRBeERwU0JHV0NCT2NScllsOVNkK25HWWZvSU9zT3Q5dUk3MkFWMG9nNVl2MnJUTVNMUUdXSWFxblMyQTZYWGpSU0tweFkxWDZWU2twVnZ2L1NBWmVIUXVCMTRvREE4Snl6VjVYTU9NUFVxZ0N1Q1lveDVEb2tIL1RUeEJiaGJrSmk2ekNsNmZvb3FETnFoQmNreVNvbWVRVE5OVjlxR2hrOUVVUXd6L1VGODZ4OW1Pd3c1dzhEYnBzeUpremVhVlhKUmRndW1sVFNLbGxwcXJObHZrSGMzZUtpWmVlNXNnMHp2YnA5a0VYUlpLVjExdzZvY0NNVGJlM1RQWExUN1FpSUtXZnZUWTU3Vnp3WC9GMEs4WlUxaW5JcDNodW5WQ3dZdlUzSzBZaERpZC9qS2xRM3BocXR2aTRpUHNERUlsZFNkQTNWSWxiMURCbDZSRW5PNHEzZFhRanRDUm42eUNhL1JjQkxTeXQ3T0gvRXpwZktzTkdsWTNuUGpqN1MyMFdHajFEV3hTRk9oNWJtS2t0ME5oY0Z0SnQ4TFJtS0RJNUhkYlZ6Q2VqYzRDL1hMUk5ZbGlJc3hKZEkvWXkydVE1cDlpa21KcFFhQ2o3bkxnUGFraFlXSEZGYnVyYWVVWlc0Uk4rcHVOM3hJSTZRMjJtdk1SNi9mRG1ReVBYNWh1WGdYYXhJWHdtaTRpbjNzUkEySXZzNlpyQ1QyOEljbDhYcnFHaC9MdjF1OFZsWWpORmxBZnRQbW5MNlNGNFNWSmp5cHpYMkR4SldvVzV5QThrUWVIVFVab3VINXR4aDFRYmV4VWpuaXI4YkJLZGlubkNWZ0VNbEpKaURRc1ZJZ3pIdkhZSG9nc0kvREZJTkc4VWthWFFXMG9nTVdTRkRFQVp2cFBKQVRTSTVXUFAwa0V4R1NwTzVJalVGdEszZEY4dnI5cHRUa3NkVnlHOG11dzd0TWUvM1BvZkFvRmJhMjExMnlyVC9xR0JQcnZaMDhDSU9OMW1DeHU2b3lKQzFucXRlcVcwSlg5c1R1RVl3R1NqQU5PT01XcEl5QmQ1eklDb3FFU2Z6WDk4bE1EUWlzaFlGRXllQ2VkNDIwRmsyVFpWUnhvdXlncWlrTHhPUEdKSHFlL0xjVlc0ZVhVbnJVUnVhN21mU0QzUVBhK0EzWlIwU2lzTEZGdzRObmlPTFBVTkRHSEcrWUk3VGZlc09Pbk5tcDFDd1pkeHpVM2RvYmlOcUl4Ny95VkEyTUJXZTN1VnZ5MXZqL2MrajVpdkxaVU5EQXBKN1RmcUFzT1phVWZOa2FGbGp0dFhvVkxNTWdRYnpJMHUySGUwaE9aUTRXMXFWa0ZWejBxeVRqbXNXUlVwSDBYZnZuODVPSEhWVmZlWmdTRm5PSDVGbit6dlZkYjF2ZzdublM1ZERWZlliWjhybXljUmlHczhzSEFxRzI0Zm1qRGxiMlVSZVdRN0Fna2RaeE5GZ3hUYnRmZ0YzdXkwUVdHSEVuWEtGQ3hsOFRhTEthTHJtYzUxWHFiS291c3lnK2E5dVozL2RPaEdJbFRyS0llSWJWT0l1aUpZd0w4N243MjM4cXh4VWhLTE5NRncxWVBPclZKcGx6YkFDTHdMSkN4RWRjb3hTY25FVjlCWFVCKzYxcHFIaTB6TTc1U1pHNVZ1YlpLWWlVR1RvbkI0SGtnbFA3VFd4aVVWRm1ySnJBalNYaXN4a3BJZUxDaUc3a05ua0ozY0dRR2JudHZ4MVlKZy9VYTZrRkJqQmJlcVdoOGJWMmFSaXBrMWFpditFK2FjMnRxK0t4ZGw1dnU3L3hOWWFwM00yc1dJZk9xRFBjaEF3NzNuSlJORzV2aVZoWExTZE5ZWUJ2UFg2Zm01N3BiUjIxbWtxMWRaMXNLZk5xYnRyT0ZjQjgvaDExSDFNdWFaTzdLR0ljM0xwajRQV2pZQWdLRTVCTHo1SmVvVUtxYVYvcExyUWdPc3lYT1QvTzV1dkMwT1VHcEdROHV3V21FNVZrQndwOFRqclJKL1VCMEd5alhXd1Z4UDcvc3NwYWl5NzA4SnZJQ0dVMFN1M202R0FPU1RxZVJabVptVUI0WjFTdFplR1Z5UzZCN2F2enhKRWhESHBrZVNEb05VNGhBTmcxcE9EUmEwdDB5c3c2TE5nVHUvWjhDU2dna0dpeHlEOW5kMzlRVkdFRHE5bWNQZ2RsMkpSOFlwbDU3ZGR0NWphYnphVHhsUWRNTVdiWUR0cWd4YmV2SStubkp0Um0yLzBPeFplSFptMk1QN3FYL29iOVRKNDA3OXZjQ0RBNUpLblNRQzBlcDdpcG9BUFNCb1dzMWxYRFZ2MkluYnJHbnpJeU5lSmd5OGlVRk1yUjZINnpBMzhMNGYzMytxSjFqb0JHdFRNRlVHcGdXaHI3ejN0Lzc1bDhIbXE1bzdkMGpMNDhyc3dDL2dvaXhhbEdsN1Y2NzZSdG15NUZQeittdy9PRXpIN1FIUkU1K0J3Q3dWVVk5TlZxVEFGcXk0cWlmVFZIdEJGSUliZUtHeDJEMmQwSFlZNmdPb1NrdUE4cmJoLzA1UnVOaXU0Nm9talNwYVZQVUM1VXZPMTBLUGpZL0JxcU91UDRTbVhEVXlkVVFDV3h5KzZyTEFsdUhxWVdaSnIvREY3aEN2Skx2N3JpKytnNzUwdEJXUjZKMEs2YURNd3o4T2g3V2hGNmIrQjlvdHBOME5vQ2h2Mk5lVEpVbXlhbGFqVDRqS3Ayc3V5SXRRMmNORXhJYUk5cGRLMW81aXo4SmFWN09hK1ZyR1FZNzdYdlU2cTdySkJ2ZktNL1p3Q1RvVXJPQ25IL215c1BNYmJ5eHdXTXhscUJuOCtQcmlCMkFZYkpxVmRPV0hHcy9NZURmMHY1VWwvVXhDQy9JRTB1bkllNkk3UklOM05WUmtiUFpGODNrK2oyanRxUkU1M3dQQ21NdFljbzczM01vVWh6UktwV01wYVVPcFIrUXZqRk9hM3M5bDhnZ2pBYTQ3alU1ZnZRbWUrMHNBKzVIN0dOamdpYkNzazZIQVVaTmhIQUZPdkdDaTlPeUNHWHA5R0J2cTRYdENJZDVuQjRwVDZFZlFmY1VIQXRjaENVUkpYcnRXWjdpcWp6ZnkwNWtPbkJMb1ZCbUxGOXJnVXRoWjU0VWcvSTBmaFJCekQ0dUNIczdxOFlmaXlVNjBvOXB4RFdVR0hOZkREcGxydHNhNk5nZlpGMkQ1RWhJb28wcWNJaUJScVFxRUhEdTZjbUE1MFpKcEZuVml3TFVSTUxxQWF6VStua1Zya3BGUUJFYzVIN0NrVVRWMlZOTXFHYlpReEVpOGlDRS93RDhZQUhUelZIRGlhQUJzYlg3YnFZdEFyYTQ4Nmo4bGlKT0Jlc015MnpOdE1MNUZXWWcrei9DVmNUakVKaU9DS0d6cTAzdzRKeXBCY1UxZ1IzNlQ1NUFmUzNic25hdmhIUFVyY29ZRGxFSks0QXkzSGFkYUdwWmlyVHJFYlFiU2krQlczQjhjUE04TWtONmhsQVVXWmp1MkdjNFc2cHpKLzFKK1dReUM3K3JSSkpRRXVLZ3MvUlRlQXZGbjZwbzFFcGN5TDVzUm1SMzRNUlZZL3o2bjZraWxUZlhqeTlwMDR1UDlVMldmVVJTMEg2Tk1wK0Fqa09GdUEvVlhHeGJrUmh1TFdrdjZyUGR5dXg3R0RwMnJ2bHpleFNJTHRIclN3R05LQ1lNc1I2QnV5aithNnd2L0wxQktVZjlsT1VNOXdGY1JsKzg4UUNRaFRTRGhndHBxdlFZaVczbmJlMmhyb1lDaHpGL3Z1Y0JJOHEyMzNuQ085T0FHbUJqclFPZ3VzbmdYY2JycXA2SGp1N2daQjRybzd2UlU2eHdWd29NUk5JWWx2a2UvaWZ6cTFKZlEwa3hLSTdXblJVVjFnejNoZkFORG1oblpDdGRUK3luTHIyRTBwbUtRcllGR0tHU3ZQNExFbkdUY05VbndvaDFOSUgzbXJKN1RRb1kzbHhBZFVNbHhaaEFFR1FIZVRrbE12dTBrd01wM3pjOHRmazVHdXgxN0ZacFZhL2thWlZzTGo1b2JrWHpMWk5Dcmg5YmNKNnhpeEk0cTgzdUgvbDFJaU95YzFhWFFyQlFWWTlmOXdWWk9wTnpqbWNXeVdZRXN3bG9ZNHV1ZmlkOUEvUFppbTBYcFRvY1JibVJLTWlKcjdYb3pjNlZZNjRQMnpOK3JRSndkc0NhRlZHRGpOVVNsenh3WjhlVDU3MVplN2RFZXRGTHR5TXNwM2s2YUZqMFlSYWI4NXlseGVGNUVTQmtqQ3VIRTZJZmo0dlBGSWNOT0phWWZqbkNkSWtMcWNndjN4azJEcmlpMTk4L3pmV1FyakJid0NpZUl6dHFWUFdDRTdsamV5OEFoSVZVN292cnZkakVZNGYwVVVtOWdPSjg5K044VXhJWWZpRXdiZFJLVUlyMXQySENGQ2o1SEZHY1BocXppZnV5U1pjZ2JhWC9ldis3TUpiSS9ZQ1hGUEFubGxSaUJ1U0trWVk2Tk5SQ2t2a282SE04QU41OUl0V0FTckxVSjFVYU9ZM0N1R1pzc0g4WFI3M2xBL0k0dnJISFJab2p4ZlR4ZXFKc1RHMGYxYlpkNUlzbzNyVElQMjlLbmNJYUNPTEduVzJYaXA5Vzl2QktoRm56am1jOTEwdGxUN3YwOXFHZ0kvR3hNMWRwUzJxSkVyS3VUbzV1dXBoeU9jTXpSbVBVVXRKbEI2VTVPRWtOK0dJQmlCeVBJVzQ2ZTNmVjl5T0RRMVZyVmtxRnFaQlpwWXd4eTlKQ0hQWGgrZmhoaE5TV2lZWnQ1YXVUT0FFUHBvanYrc09YS3VQOTF5b3gxT0pRTzBUNmJKTGhVY1pOZWYxUHA4MG10K3c1K0EyVWZvcm9XVGowbWJkaVB0OWFsSGtiT2hENGhOM3BOQ0o4WEFyUlM2S0ZKUzArR1ArNXdVaTBVL0p1WEtybGdhaWFjUklOMFJzaFo3S1U0TS9MZTNZYjRrT1pDdVFkd1hxRGh1emNpVkFDYUpYOUdlSVNubWRySVcyOVN2SHgvdTBML04vWXI1UEI4UkVYZjR4Tk5hUUx4UW0ra2lvWUVYdlZkRis3cW9pNThvcjc5TXZaS01aYmdEMk5NYmUrdXVEVlc5V3BYRTcrVWFlWWlIV2dLdW91QXhSY0ZxMFJZdVJWcGVsVEJxUFJoeCtidnFTZ0syMUFZeTRRcExDR1R2YTRUakhiYVFUUndFS2JFb1lEMjdiUU45MWcvNGl4d3FwZW9YM0F1V2NtbEFFUnBwcDcrU2hxVXRDRUlTbTREdEtNV1NMQUZDcDJmM3A3UlU4MGVrWXhSREhyc01DQlBGQWVyWmJiUnZtdnNkenZpbVF4cFcwc0RENGR2WkZzeXQyREJmbXlpVURRV0Eyam1xaG9pVU52MU15dVQ3T281VG1SaUtJZVl0RGF6c1gwUHBRK0hmYW5FY1B4eURoQ3pqaW44Q0p1dE12cHF2OWl3QVBHUmNaVXVZTHhheFRZVmZ2ZlBlNW9mdDkvNFZSbWM0MnV2RGVZYitrNjg0UXljWG4yMlo5MjBoQmw0SHFyUXA5NWpYaXJoYWxiRk14TVA5WHE5bXd0WndVTVpCdkpGTWZlMnhpUDQrMk5ReGFYcGl2ZWRHMzhSTVdUVHRZWHpFN0c2UlBjNWc0RU52N1VYbnExNjZDdll4L05ZcDBzdTNubDZzQ3ZsRTJXU3V4TVcweXhIMzlaMU5RUlZFNzdEcDI3U1VRRWo1c3FWVGpzeklBTmpROXVDN2VXQ2RGUHErdVZ5YTRjSWdRS2FyNFovRS9NSkhlTU5HR0xpUWNiNk5jdkwyNmZXTVJDZWo3UzN2WllRdk1FTHQxTHhXMytTWHZRZHpXWUE1TVBiNHgyU1EzV0tlRW4zdmxSazFXUEQ3bUltNFhrcjRrbnh5ZURyNGZIY3ZVNnZRZGsvbzIzSnFzcXFlRWRucjhGVFUxMXh2bFZGMFFJOUx1TG1pbVNDWkpvQ0xtaWFVK0YxdmoveUFNOE9ncENCTDZPT2hMa1NlZ1V0Q2ErbXk5Z2wrVnorOVBmd3lZb2diRVdSbEtlVC9QMjN1Qk5sOWxmNTV5MXVVc3JlOEFxQVdCai9KNmtzWnJVeWxWSGVnTndHbXlmbzNJZlBmdTBnQzE4cnptdVUrck9LbWJ4ZXVnYWNRNHIzb2hxdmVQOU9pT1JHQWlmMWVlWjdFeFZ4T0NjU0VWUmRWSW02WnJtY3V6d1l3TWp6dXZlY3VxTWw4UUkxdzJuY0lKcDBSTTZFdDd6N05Dd00walorMWlxdTh4ejdPS2Z5ODV4VzJBWUtOWGFGcUJRRzBEQ25tclBwSlBSM2JiTXlkUHpFZ21DSkpoSG9ScmFMcVM4UnBoYmc0bzE3THczN0VONUE1b2MraUdOeDVFRzBBdmdTM0ovNGVRd0R2Y3hPMkkzaXl1MGtpeUZ6NUk4RVJjZzRIR0wwRU9YaytDN3RkU3N2d21JTkNzZUVaaHRWMlFhSzRHODBvRVF6U09jWGIrZXU1SmZqS2V2YlFOY3U2UzIybW9vOEtWaGR6QVVscTI4dlY5OXJBMWM3N1cvaGhGK3lKdzVXZzg0dXlLS3dpZGtLSVRjYzd1NkxFVXFZQzNVdXlPN1l2Kzg3bnhUb01wSDlqY3FXNTlVU1RjeGRhYjFOK21NbUFIVS9qNG1rWDAzU2dzcUR0Y0lHeXpYY0UyVUhvQ1FLRGNWbDVVM1ZDR2NtdnFLUk43VTE1Q2ZrTVlJSjhwVUZJRXdiZ1h4aHV2YmV6bjRtMCtWVHEyeDNRU1ptekxOc2tMbUIvSzV0ckJCTUR4MmhDeWFlNmtGK0JTamRNOWUrOXhoYmJIRTIwQW5oRlJVZVpXLyt2bDEram5YT0JzcVpvL3BKV0xBSkI4bVVxaEZ0b3pQNVlzbnFCUGZWNnBkZXd6RVRaTHBkeTdWOGNHSXoxNHBtU0RRY2NrWlVqTkVHa2Z0MWlhckwwb3RxWTJBc2c2eDBrem5UcEE4OVNDbzFCMUVJM2M1Y0tLZzN3blJlanJNR0c3ZDh6SFBraWw4WFBIS0F1dHhwdW81UEZKbG1VdVN3RGwrbWtmS1Rva0ZoMXBFRmc3ZHJLLzBkRG9rYVg1RGsrZmJlSzhydGp5cnFmNWl0SDd2Z1NZZmhCcEV6eVhkaWlCY2FGWEpaYlIyWnBMekdlRzBoUWc1MW1kNTMzNVlmVVc0SVJVSklxTmVndGRhamZHMnhKTWRtN3hkbEg1dFI3ZDhnWFVtQjluQmlldmsyNWJ6K1pCcis0QndHUm9iZmtobTl2ckpQRmRPRVJPbVZVdEF1c0c1YVVJMFRyWkNnZCtzb1UyeTVib2lCeG9xVDAyK0szZ3pTcmZXaElGb2ZJVmpMbXRYbDFWc04yalYySlRTa1BQVWVPbFVCSWEvUVByTW5VLzhFeWNxdFNCc1NqN3prcG1jbko1RGNXc1VTS2g1NkorMXlSU3FXenlDclBZZG5QVllSVlZQSThlUkVmTkhqL1JtWFJzUmVoaWZKVi85dzJyTDZmWnVPYjdnNFpUemZJbHluRHBKWk9IdXg1NE5LNnlDTlBGUUZXYlBSUzBWQ3d4WmwrNXozQlNJT3dRVDM4WWluQTZidE00aFkyNjUvQi9zR014dW85K0VjUjlJdDJPL0lzSllYSWNLdU1qK3VKM3dHYzQ2SC8xR0ZqVlJQZU4rTCszS2ZmSjQzTDRkS0NiYjJMdkZxblBvNldNQnlwVWJtV1ltS3hDeFp2S3Eyd3BKQndZZEltUWZIZU51d0RSa0VaMHF0Y09samNqUUNsWGkrMXVKZWRqcGgrYzhXZlpsdUI2Q1doSzdPTU1Fb2V6VHZSZFp3ZTVYa3d4ZStmcmNSaVlRVWtXWFpwQklwcSsrbHBiNGoybXJhVkI1NTliTmUvVmgvYVY5NVJsTmNpVVZzVlN4ZDl6ZzRlT0FYQmxvN2FyaUp3dUo4ZHdJb1lnaWNFZ0FTUEdrYlFyZHNjNUM5UFVHYUs4Snkzc25ldldtd1I3djhxSnRLK3B1bEVyODRoT04zWWs4WjhuVjNFaUJZTVVKZTd1K0QrdTRYb05KOW93TVNqZFJJOUplMXB2cmdWRnBlSCt5U3cwazhOMU5JVEltWVAyaVFRblJ0NTRDci9KSDJFanNUTEUvWlRpUllIT3dUOXVkaHgwUDQ1ZHExV2hRb3IwUDhlTTZKMDNtRVcwSVo0NlVjQmZQVm5IbS9oVmtnL0hoRVZHcVEyVEN1Z003UW1hK3VkQlYyT2l1MkdVQ3VWcnhjc1J2NnRab3VRWjlheUEwR3ZoWUJFQ1NmdlVjUDI1TUttMU5idmU1ZGNzVm5IdUhjTTFHc00wQUVoUitpRUlTZnl0R0JZZGc2b2ZuL2R2ei9NYXBtcTlCSEJqUnB6eWhSSU9vZEVNRFFRL2ZBR09XZllmRFptU0ljVXN5aGdidjhTNFpXQkF0c1RCQnF5Y0l2UFIyNjZ2R3BJa3JIdUUyOXNGZk1pdDkxTWM2YmQrbUFDWjVRdmtOOHhLd2hiUGNOc05DZ3lrTGtneGpTbThQVHhTWEc1YTFwK2RsUmxiMHQ3VUcwTGdldlViNEkreXVJTjZ1bURoTVVtUlZ4clZmL1ZWNlo0UWE2UENLWVdzbHNPcnZneVBpdkhoNFN2cVhvNG9zenRTQlkyUUNscXVIL0RwazlTQVE1WjZMUTdnUmZocFNjaGZDZFVDdWNJNGgxWFJIUDA2NjBLNWt2YUI3N1JTWGNiU3RVWEFvTlVKNUpCWU1XMiswUnJwcGVMejdTdXQ2UHhJbWNRWDlFVGQ2SUhuZmNnMm04QVR1UEVObXRodzdveURvbEl3OTRyS3R6NndxU0JBaklZemFtbGZScnV5ZnI3WGJ0M1lIVTlEZjN0Qm1jczdCUllGYnpqTGt5TVZZTDVsSDAxUGFxaFdZRXl1YUdCMmllZWZxelVYK24wOE5mR0hXaEYxbHprdlNzaENodEpCTWhld1JFWWY3TFpCcjcrN1B4NzZyRDNsSUVEMmVuREhIOWRpY215RERoRGxQZ0FudWQvYVNpL0Q4N3FwNGEwWkFoMlk2REJpQ2xOSUNtZWNlYW1FWFczVy90dU1jNEx4VERYbHBRc3RlUEUrODhKMElCRmlYaVlhMVN4NERDeU5JUUEyai9ibU9LeUN6UzNzKzdCTGxodkVLTE9YNE5oUEp4QWtrdEExMmFJRUtmUUpHZDFDM2w1ZjdDQkFES2VPNUZhWWVxbFpWak93bUFFWGUvNU5SOXkzNmxLVFkrK053cUVTY2xLL1k1V3N1QmRBWHF1R2Z4cHVPT0RHaUNROHU5eS9rRHV6RExQT2wrbFBhTldlZU9uR0NzcVdBOFdiblFETzZDMng5MGZqZTFTMU91eVNKNERsSVpWaDZZY3hXeURsT3d3Nmt4Q1p4WVNBd09oVVU4aFJuRnA3RzdqeXlSQ3RoM3NTRnU4bFA1ZklDNXJnZVpnbkVhc2dneUlaVVRscFI4dC9PbHpOc3RLZVNMenI5SWpXbnN3V1RBL3VrQkZnaVBDZGxxb20veHJmNktGdm54WTlFTmpZYmUxenhodWlZUWd2TUh2U29FR25MRHJrVkNNMTZCeWlkbkZBbFBia01jWGpHdnpXcFBBS3lTVWhZVGQyUXVwZWt2SGFSazR1MllhMlNVcU4xN2FUWjUrMGRiREhFQUV6WmhTZ1J1QW9pZDhyaEZYS2RhM3MxSkdWbWpXclpRMlBwZFNQWnBueHdJL2VJbzExcjdpTkZyRndmQ094em9IVTJlSXFmNE9mZWZDWkZZMHBqMnh0U21XUEpETkRHRnJ3dVpVNC8xNmU4V29OL1llMUJzNnZIblVhdHhDUXM5WDk2dnRHTm5PaEdFKzd5T21tTm9XbEFRbGNwZHRZSHNRNm1TeWdaTnh5b2ZPdjI2SjB0S01MWXFKRUlUNVNlMU90TldSd2NMQTJpMWhIUUU1TTJjalhuYlV5b2xOMUp4clE1MVdOeUdwT1JkRmRmSEl1aTN5NUh1MThva1NVak9heFlKVTNDNG1ac1oybFJyRG95U0VmMTJDeVo3eld3NHpnelJpeUl1dW1nV2tyODlzZXN5SDJFQXR4VnNraHNablVmdnhNb3Z5S2VrOUNZS0hFTFZ5TXVuWUtOUDV5NVFUVjFDaEdIUlVCMFVsZW1LRURMSENZYXorUnpmSmoycEhxT1BWZFB3cDY4YXNac2RrTVJuZjBRckJvOTZ5SStzck55cHU2OG1ZNDRZL3lCSk9SK1RxY1JmbXNxTllYeUlqelFkQXFTZm5HWUNKQzBrWEdlYkVBcFRQY1JxaHo1TDB0M3ZpM2NVclg2NkdxUVlXSU9sUFFPRkZQd0xnVll6Z20yK2VveVpPck1CdkNlYlQ3Z2p2OVJlMXRlYzZhbS93UG4rYUtXL3h0bzQwMDRrR0pZM0JsbXdtM2lGSnl5RWVKN3YrbldZZWtrL3U3OEFqcGdMUFQ1NTFqaC82VG94NjdUQ3ZkTEw1ZGRlOUNBeldzWWZpRmIybHhZUTd2UitSLzVtNWdlcGt0WU11NkVqRTlRbmUwaVVwRCtaWk5aT0duTm5PeVNMWXYyS1FmS2xjbHBmSzhCM2l4WHU3M3NoWllwb21TUVgrMUxhSG1SSUVWcVJIeHc0ZVFjd0wrQjJmclVkVnNrRnFvY2g5dVRRWGViQWdvRExEQ1J1TndIQVNLQUxmR1R3MmdmTmFLWHhPMVMyVkxSdGV0cWgvVEVaeklXZEhLc1hkY0ZoK0F0eGEwMjV5T1NVcUY1dGk1N2I0S04raGY1MW1VS29RSEJlZmI2ZVFrVG8yOGZNbGtDaTQ0bEdxMDF0T1p0czV6YW5yVXVQcllGOFRFRDJBZjk1R0FicTcveW1RQ0JzTytCK1dMTFVyaERsa1EvZXBZZVgrUVdMMGNMdWVPTHR4ekZoNi9TdVhMWTFMSzF1U0pnQmc0emc3a0p5bnk5Yk82YXRpTC9QMjB2eGxhRWYvZjcwY3Bqb1l3L1pwN0VYL3Q5NlNWWjRiL3FVTWNzL1lvZWdGL0hsaHRGM2hUbHhpUWxUbzdoWDRPRkJPQnJIOE1JS0swVjNEOG1NdDdQMElWZGJJd0UrWXBYOHFnVG5hblo2TS9nN2QrOCtxWkxhUDdQdXZkUTlrNkRKU0hENGFnYStFK2xBeHlZVm01NUdSSTl5VUJHc0ZYVGE3Tm5mNTlFendPLzl4dnBUbmpObWp3cThDN203Nmh2L1kzdm9mS1NhMDdvTk55V1liSC90cWlpWnJaYVNzd1phemhYMHh4TC9HRmtYcFFQYnJxb1FOZEk4bHZJWG5MejZxQ3hIakxKRG1tWXlCMEhtc0dPcUpDT1ZFT2dGK1U5SDNyQ2JWcFBWZW4xYk9TUWdGTThKMmcremZHU3NmdDcrMDRlUW1HbTZEd1hZeXkzcTZYbnJuN2o3T21XUjlUQ2s1a3FhQkRuYk9nR3FZNHoyUmVQMW5GNDkyVVR0c2RVaWt3MVJ4TFVvcWhhT3M2NXEzM1lzK2gzY3RsbG9XVmczZ1hmYkdWUHladGVHNUFVbWhVVWgvdU9BYy9FNGhvaXBsa3NuQTRkVUJDaDBzK0Nhd203OHNwWTF6S3ZnRHQ0VTA2SEtteEdqUmRFcWlhZDgzekNyRy9xcHNEcE01KzhldWZEZTNtTWd2YXBUNmtGUnN5VDRGS3FxdHVBRngxVHNZOUxzK2dlTytyQ2RZcFViRklyeVZTdjhVMlFkdjlwUjBjQm5ncDhnb3N5UTd1WlkrckFRQzgvT3lRQW41NmV0S1NMMWR2bmJ3VVc5eG5wcEppeStINTNVRnhESUpCWWRYVFMzRW4rbXFTNTcvd0w5bHZoQmdFY0FQU09tV3Y1Rzk4V3daLzMzSHpqbWU3anZOVjVXZWcvQ2o2QUVMMXR5Z3AvRVN0aW91TWtndytaZ08rdVp1MXFoR0duVUM4WW5CVmVsay9HdkMycTJNZGxTYlBWUTNCWDBWOE9qUnh6ZHR4S3NUMEdsUGNoa3VEWE1IakxlYnlLWmdQdU9wUVByZVRCbU5ud1NVSjUwKytFbXBFSkFSOWZJSlpaMk15MnR1ZU0zM0MzNklNcHVGeFJaaDFuNDlCWTNYVllSaFZsYlJyTUNsTkhtS0RUTDZubktKZDRIVi9GWityYmplNVE2dk1OR0hCK0NQVUlIblFIb0Rlb20vaXNldDBmOWxFbVB4SXVjSVpnZXNaejJad1M2VTZJdi8zL09KN1lpY2VIc3hob0xqeUVXT2RHdkowVkI4YVZmamJJM0pZYWxXbUVRUHZwa1FSdWg3S2kyVEtQUFBic1hSeklvMitBSTNiU3hKVkk0MUtyRHZiS2RMeTlrb0cyeWM2R25nV1NlN20wVjlDVVBnY3doS3lsMGQ2K2Z2cHltbUpPTTZSd0VoS0tyUm5PcUlDUXRrdjArTVpYZTZrbDBUTHJvM1kwMGxwNk5RbXJLcVZGdjlWZXdEVEE3NW1KcldZc1F4TFluZ2ZLQXZzUkI2N3VyaGtvTXF0REJHSzhyQ0Z3blhyeVVZdVd2Q3pWY3JEazNBTEJJaUlCaVpmRzJhSkRBb0lSdW9Sd2RVdnFsZ2lxNStxbDVWZ2VtTERYRFIrUFNTK0Z0cFk3eTlERktLMGdtbkZSN0FoS25FN21oQkV5RjBRQUs0Q2FUMVJ5WWhFcXVjY3N0UnFXbHY0TUNaQVVpeUxpWllOckE4WGtuMGw0OHk1bWhoOGpIMlhRWlVrcG9oQUlkOVo4N2lkS0VJSVEwUkhjeDZnakZ5UE1PQ0p2ZXg4anFPV2J4UU9yRTFtVko4eDNVZ3Y0YUg2ZU5uUDRMamdRWnNhQ1FCLzNUa3prNXRFSUY5OFRUYmlZRmswUUd1S3kxUmR4aGdJQzl0Q3RJb3F0Y3JIaWhhMmdJcjdaMlFXRFZheHpYVXFNMXhzTnVKYVBvakdrK3RvSkJQRXRRTGtMa09mR0ZKNTI3WENwMzIrd0kyOEVXaE1QZ1g2OXdVd0x3ZnRzWWpQSGpwdzUwS082Ujh1Wk90WlB2WDBNenV2eERWUkRKYnhwN2F4UnE3TzBRalNFTnhxOXkweERlaThQcWJKUDVpYzQwVlgrbWg0Vkkzdmlzc1RjWExuRzNZbFY4a2xIQ0IrcEVDbDBRd3FzMEpqUi84MHN6bXhjOVBXaWlhbUhteS96ZDcxTnpaZXRRV3dPT085QkJLVm5VYmdSUnhRVndnc2N2Y0JER0V2WGkzazRGT1hDRXdOQ04wU0lpZnBLWTZUUFV4VmRjdndndWd5TTFVUUlMcEpSL1BLWWdHOVQyaTRJNWhpQnZEbzNvTStZKy9kYTZ4TGJ6dk04b0psdmhUeldKM002SXBxbDRMT3NlSmNKZDdZZUs4ZjFpcWlTMU1VQW50ZTVPckZpQmF5SUpzNUVHeUdoekZtaXJwRVUvNEI0SFRHYlo4R2ZDaDU4TUN6cGFoVHNCZmpjRVZheXdnYzRYUVFkWGJIWlJLVjdhdUx6bDVBOVBoMldZV3BRaVd3blM4U24rcFlUU2lYMXRzSlJheTg1a3RqWFNGVGxuU2dscDltNGZSQXBhYnU5VzlFUFZLWk9zbE9SZnlGYnlqRndoVmZhZVJmakJIWTd5eUNxMW9QNGx1WmhHcWpkcmk0Q0ZxNTRCVmNrQWpoOXJDU2libVNLdi95SXR5YW1Xa3h4ditQOThWNm9wREhxVnhwOVYxTXVlZHhvWm1IWlk5RTQrUkdBYkNLa3F0YnBidys1ZUVMZ2x0MjVzajVZY0czNWExWi91dTdyanlsTXVldWg5Znd2ODJiczE1eVd6dkhSUHpoMjdlTUxGdWp2ZWlGUm4zQUZ0aWFSQ0gwYkZ0N0VGVlBWUzJjRTRkMUdZQjBaZUV5Qm12aGUzREU1TFlycEpBU2ZMV0VwYW9CbGRJaTV4ZFB3YWxsMTJTNW1lbzV1UnVpZ05reVl1U2JEQjh0QTEzL2V6NTNPRGM5RlBGUDZhVVljc0Z3RkFFb050YndaMDNyeHlvMmpHWVc4cFpWeHQxWDV0a1RTRmRrWWhCTjJLVTdXSWpGSWNyUUl5dlliMFQ1U0tDb1REWm9OclI2aUVyWW55YmNxV0ttdE5oenNHS3cxM1l0YjZqL2FUY3RKU2F1NGs5SFBVazUvZmxPT2RNSXltcStWeFpaUmQrTEZlUDZpK3Q1RVlZS2tmYURmKzdPdWs2TzlRZFhqVlo2NThUaFo0VzFic2paZlQzbzFrMG1BOE1WeUpyMmMxN1N2SEFMOG56M3lZbkxVZ3doemZzR09iYUEraEJHSDAwYTc1dG5GbUJKOU1wYTNjYXZlYjdXRkFLSkRnWHlwTzhJZjNVekh3RE83dUpzaU5IajZMRUI0QlNRMUh4RGVKUXFld0s1NGpBUTdjN1dxM3Y0M0grdTdQaURBR0Z6THNMK3NIeW0xODA1cTdLdkJIcHFVU2FxMEZ1U1k5TlFSTEhqUERqOVpaQWpVdTQvdUhlR3kyaGsrdnkyNVkzeVA5c1NiNzRPZzIrMUljSHoyTzNrMkQ3N0pTR0owbUV6V1RBZndJRjdjNUswdzkwQi8vZ01wYnV5SXplL2JzYWtUbUI5VVkwTUwvQXlBWktWQlRZMGNucmtPaTVBSWNkZlV5b0h6SHBsdTRaM2hlZW1qWTRsODNwak80S043T1RkeTZFbjI4M3dibU5aNm1Nd0NHaGc0eHBzTldDa3h0UGxhU3Z2RXVTSXpnVEs0S2kzQ3JuZSs5UlpFd3RUVHpWckVLaGlac3RkSTQ3K3FpNCtad3FQYjR4SWNSYUwyMVoxV0NHOE9NeUJ5amp0MGJLQjJUTVFzcDRtaXFhM09hU2NWVTgzV1BBVmRHbGU2MS9FVlI5d2RoUWJFK0JvWUhQSTE3SHVKQ2JTbEtPYmF4TFR4aWFvRkVLZ0I5TElXUnQvSE9iZkJPWEpwbnk1Y0tGdkpiaDA3alJmOHVuam05aC9zaWtKNHNrZ1VnTHU0enF3ajFTTjZxOHVZNEtKRUluNkZ6RVFnQzhDQ3BFYnVTUndldFVmRzBmR2prNmt1UGUwQzhxVHBLL1E3UmlkdndPY1F5eDF0V3JWaWpya3hNTzhQZnNVdEVsdUQ3VjdUUzUxNExQcDdzYmZaWWdycjY3Vjg5UnN2ZWN1UHdKbUVRZ0tLa2RFQXVSRFlqbUM1WGtmYnI3M0xTNTA5U2FGNWdPeWNtY01vb1hNcnZCQnR0eU1Zd0VVaE9QNUxZd2s0WXZ0QVd4RWp0NUVlYjFLU2JTeGY2WXRBMW1zWG9KVGhFVzBqNW5OMzRwTy95eEhoSHorUEpwNWx2T3FqbnNQaERBWDhwWVk5WUQzYWNOSVFDTHVNOUxVMEViQlB3WHc0UjlHMHF4TkV2MTZDclRHTHkvanp2NVdKVXhTVkZoSUhMaE1xb3AxbDNpZmx1cDkvRTF5dDNBRXJYRU1jRXArNWgvZ0d3a3ZVNmlocHhCc2R3cWNpek1KdSt1cExoQ0RlL2pUREpsaUNKa0dNTjJWbHZvYlV1WDRFM1dsSzJDZnA3N0E0bUJNYWZKTnM4TnRmaHNYckFqMUxGenZHZlJZMGtmSXhFRXNNU0YrNDA0U3NicUlZTUFsRjJBTDJaY25pMzd0b2RkQ1kvMFJxd3hLOHNTRWdwUGROY3pWSFIvbWFycytrekhyWXUzakxraUtWK091MklKc011RlZWZWliSWI0dFFmK3diTTBNRFIxV2JNc1g5a3JDM1VVOE90aGxQQlF3ZEZVM21xT1VBeXpnY0hUa0J0L2djTzNkTzh2UkkwczlnT29nVjl6SzNmdFJpMnRNUGdaNDJPS1FmaFo3c0NYN2s2bnVvaVNTRVFFa1lZSmVnL1V0eDQwbkoyelNSMldkejJ6RzBIQ1N0bmdJZmthSStaQU8vdDRaSldSL0gyUHlkallJVjd2WDlWZ1VoUEZ6bXNlQnhXY3JhelNnaUJQOHZ6VnJWc0R3N2VnMHNOSVBkNFlpK09mUDkyNnE5MzdMMFdEUStYQXVpZ3FrbmpwTS9XT2ZRd2pxQTJaNXdXM1RlWUNCVEl1K1U5YU1HTDdWMlRqQ0p3Z2VXQmlCeGEzZTI4MjZJd3hsQ0VVT0lNa3lVYk83VGovUDhUZmpsVlcxcTJSalJjV3k5bFhCVTVTcnJLK21QbGpVcU45ZjFNUnpLQjZRa2VRL3ZYQkFpdVhpbHpGb2l1TExyV2l0b1hLY2p0c213RVNmWDdjdGVBT3JOT0RuTXliS1pWWFIwbUgreS9uUHZZYm9tOGxWVUlIWldURkFBR1ljR1YwYWRFeVV6bGVMb3BodG1POTRYVW1GdEJwZTFzUmo1Y25BaDBQWndKUCtBRkV1T2U3SjNFZGkxU1dpcXBIdzVMN2hDd242Y2VTQUlLOU4rcWdMdTNOdXB6U0d4ZkE3eUhlWUo5R28wK0IvMnBNUG9zemc3MkRkM0t2VUJQVGdiMi9hMlF2SWd3eWlObzB1T0VVTjdPRGpOWlBSK1hVclBLZXpXZXFIY1lEUHJ2K3d4cGFqeDgrbDFWS1V5Uk1MQ1kzcVZXNy9LeXZEVERRamNTZ3NJdjdSVG0veHRxTnNmK0V0UldkenhxamVKZkhDQjJQWjdveldhcHpWeXhtM3pFbVRZUGhSTmtBWG4rdWV2L0VWaUdFdDB2VGRrYXhpODN1UGdCU2VaQ0h5a2g0VUN6N3V2VVhkVXBvbEVSUTRjVTVseWNLRFAydzBwU1poS1crNEJmRzdXZHUvM3laNkVrZDQ4dWYrN3owYm9ETmF4VmxGR2pJbE84cDhGOFM2cnhJOCtsVmdmZU1wVk1jd1lvZ2F0QXVnaDdQRmxUMXpxaHRZMXVpekM0dG9TbzAvck9lbXN5b09USlNBSFhKcVgyYU9ZcFBSNlFWcDdVQXpRWmV4OXc2TFh1aFJqRld4VnIySmUxUVZpMWZuL1RlUks3aHBscG8xNXhocXAyRXJwQ2FHLzRqQ0hEcU5XdW5xUDdLOHhSeXVZekJSei9OU1pvU2h3NWo5UysxRUI2RVdCSUU4RFRvSytxMEFudk1jZGJnT0c4UFpFWWNlOWVHYWMyWVU4RXlyV0ZpTzF0bmcrZ1lMNHFoZWNvNzNUQ1JCTFl6Yy9yKzBIeHN3R29lem44c2g2c29LWll6ZjAyV0xZeVdoQW9BRGtGL3JQTmgwV1JaUGhyTDJ6VEtNbTJveExIM3ZQTkVWQW5lOHZJWWRQaHU5Rkx5Vi9jQ3lKakxlSXNvMG5SV3hublRMTDBmRFRRVjVBMk9JVkFlWUtqUWYzOTdMWC9IdFc5bnhzTnVzcGhKYlkrY1E4eFZua2pMS1lkRFMzYkxnOHZUTXJEcVNJZnFKeEkrNkpSSjM5MklTektITmlvRHpYQWVDRFhVNFM1YzRkYVlreGtZNkY0VHNLbjJFMjVPNVZBanFTZ2VtMlNvVEdidWQ5bGUyL3RGY0VCb0NteXRjK2dDUjEvWk91eHpPejRtWlFHUjg5WEpPaGE5WXkrNHZXemRPaUU3Z2RNa0JnRExPa1ZHV013UExCbWdvNmJHaUZHRWo0U1hoS1Z5Q1B4OHdzRlNVVm9IUVI2bFVyaE5RaHM4RThYMm9JTUZWRDUwVVEvNG1zODY1emZoejEzQWRBV2RtZGh3OHpUaGl0RlRqcFlBbEZoRWZjREdjdzBVQmpxT1h4Kyt6a0xtdFBTSmVySno2TEZyckNkajByVVl5UWZGS0RkT3JaNEdUMlJ4OG1SUGhVbmlsMTlvclU0Vk1UNklSVVNkUEhLUmVyQy93eFZDTTVSdDVHZ1NPbUxTRmpHNWx2RXdhSXE5VVZLSm50bHNONTQ1K1V4N0ZXcjBoTTVxL2Fyc3NENnNaYzZzZTNzZ0paeHRQUmcxWnJ4dEUzc0RKeEtkSUZlcnVWWnVobGxTeWVLMkFOWFZueXBjK2xESUhlNG92Rlk3VDd0eGI2MWZzL1pUVnFCK3RVelhxK1NjUlhYL1IwekUyNWdQQTducjI2clRYVFUyOVRNRHNBU0h2SDZwZy8vUkhGTlAxZTRMOWlzS2FnSzF2ZjEwNklUQ0xPNjBHSjU3MUcwcTc0WWZUNDM3ZTJaMUpxTlFsRWlzc1hUSFhkU3QvWVhUQTRFanBTS1NVYXZZNlBVNkloWkR1bUZjRWFuMVJXMzFaSDZ6VnRNN051R2w2dnFqSjdTVVh3SHBaV1RlS1hZZDRBazZ1bkUxTDRkckZPOXpJNW5sZkRBVGRYOVRpOWd3ekdWSjAwdG41TTc3OVVTVUtURzhicFQ3bGYrcm05OTk0L2FlN3BXc3NUTmlsN2FzalFmZjIydGFkcXZYcGlPWkxpUzU2R2xycTQ2M1crcFQ0YzY5MTZ0R2EwT2NkL2loamxuak9Jblc2SkUxdVg0ZEdYY1l0bkNFRDROcjVzbzIzcUZUZmFFOG5yK0V2akpNSUNmMERTY09yaGtRWkxPZXhqNWRjSzN2MDErYzB3NHJhRDdpQmZRN2hLY21QUXhIUjE2c1RjSnIzSVdYMFpTV1FPbmlJUS9vcEt6Y3NkaDVhanJEZE8zRXBlMWhiMnFlY3lSYmdCRXNleE1XZzJYZVBoZ1dHdlBCZ2pMS2xGU3BoMGdqSFJLZjZtL0djeFRyRnQ0dmVPUnl6N0xFTkl3Z2lad1FRM2M3cldJKzJ6aEhINm4vc1QxcEp2TXZSZWtNdkFLTW1NRCtUMEt6VHUwa1hIdy80RGtNU2pQTjBIRGhuT3BHUTlkR0ZGTWhtSmJxMTEyeUJWRWQ3WTAwcldrK2RUaHc5SFJmcm1XSFYvOVV4VFBjM04yZ3BONHlseHhCa0czVkJKMXVLUFVpdUtaK1BOTi9xTWp5RXEvQzhqbm1BRUVZMFhuNzc0bmJaMFRzWkgxdjZtMk5uYkFvQ1ptcnY5UmRHelBXbWZndUl3RjErM1psanZXeWk2NVUxM25NbndIekdkbzdEK3VBWVRyUHN2cHhuK3pNSy9wUUNXVnFqSmJ4SFRNTVpkalRQemg1TmdzMSt0cFJjR1k5NWk4Ym5XeE9nYWtWVERBTTRqbEFJM095WlFYUE1tcWNaUVpZWnQ4ZjNBejRtcnJVMVMwTnM1UFZoc0ZWUWF4eFRlY2UrNXBOa0M2dFlKWWJIVk1rWWM0a1FmN1IwazJpc2ErTzJGKzB5L3B3c2pqejFwN1VKeDQ1NDlMMVV4b3ZWU3BnOXYxSGxEK1pUYWJSMS9yMnVQb29LUzRDWHBYTTJlVk5LU0g5VXJpdWZJdVZ1cUhSY1B2RHpNaUEvZmN3Wi9BUEsydXBNczdaWnpHU2cyQTJlQnZudlNhY3NsamE4VkhQa2hQa0VteFFJY0tQSnplNzhGTE13dEFxbDNQSGl0ZjI0M0lRcndOcTd0ZER0dTFONkpFTzJtZ01OZnRZYVdFcWc4N0xXaFNXaWRGTWo4SWQ3M1oxZDdVOU1PTTk3UDBqNEVmSFFPNHlZSVFqczJGRitOaGI1TjAvVlVZZTVKVVRYdlJXZTJwaU5WNE9uV3FYcVpSNFltQ1k5Smxpa3UyUG40RS9vVW5GNlp1SU03NHJzaFVKSXFKQzhWcXVKTHVEZEJSMWMvQVZ0Rk9kZkVhTUJKalNaQ2lMWU9nL29WYkVISE43eWRRQkF2b29FTUQyUU44endWMzV3TnFsQThtTzB3NXZaNktndER3SzMzL1dVVFlVZlNwVTFmRk5HaXdJYmZKeEtlWGV4VFh5RC9WL0c1Z21KS3lpb0p6Z2liSFZRK0hkeEZZQTdNUGZzYWs2SmE0VnRJZ3RJVUZFdUVPdzRTdnQ3Y3o5eDFIeDM4aFozbXNSZERCdkplWWx1OXFrUkxSMEl1bERUUzVzNm8zM29SQUtEai9CK1VxUExOeEM5WGg5SU9QbG5wSnpYSlJpekRrck9Rd3orOW4zaGlmUGJISWJmWnJ6S0VaYk9hRUpCdHpHS2VoUTM5ZDJiNGdaWHpTQmlocnM0ZTVWTXBmTUxpbiswaU1qbTdEb084b2xEUFY0aEpjY3pGZDJqTlByRUNjT0lEVk9RZjAwME92R20zNWYrUktJMlJPS1M5bTZ2WVpPejMwSUVvdjdTRGY1U2EvbGNZZnJIeTYzeWduYUh5SEtqMndwNmlhOWhScldDc0xuV3N4ckxpTmhKZytNaHI1aDdDTHg2R3VKWkM2UXloYWYrVzl2eWlGVGEzRlhvMTV5cjl4NC9LOGpja3FRL0k2NDdyUi9vYnFpVTlvRWdWWkJDc0NIR2tkRnlKVG9qTnRUek5neElTS3NjMVViMExLV2R6M3hldzJzWk1aRUJiNzhmZEJOK3NLNG1STTA1a25xOG5DUnE3Z2ZOcWR0dk1Gc1lEMW9GSm4rZDM2eUhQUkRUV3lVNHMvTTVncG1QMjlpdFliVmtrVTBReXQyK1EvSnBwRnM5UGJ1eEpQVWp4TnVia1oyeGhFVDlsZkc1dXAraWpFVGU2ZUpNVWtvTEhSQmNtc2RtKzRqK1FjbFVXeXFGQUp3TVpVWWNCdktkQ2IvaEYwRWxoMUxzbmRUcFZrd2VhV29vZTVrMEhUam1SVlFZV1VMWmRUZUlBbWxrKzNaQlNMVXdyekpIeEtLN2d0ZGVNdHJxdVJjOTA1YmZhUUlxMDNCMWNRdmRsaUVTRTU5bTYraDlyalZUVmdXZ2pYTmVqRDFNNnVGU0RVVWl2clFwamJIVVZXQkhkdlYxYzg2djVZdmMrcTlDbmVxN1NVY1BhLzkxYlNpUVN3RTVOQ0U0UUlWbjJ2aHZiU3pQOUQydncvcFkwV2hVYjc2a3M2WmhWOXVEaXlSUjVWekYxUDBvMldRN3BWMmRxbEtMTHFZNjgxM0h5T3NFdG1QRHRaQWRIODUxU0Y4QXo2V25HUkVHbTVSQXlNeTNqWkZISXF4R2h6NTdoRHZuQmxVY3hGekJQR0RXcXEyVEZ6M1JSMFBIczRiYTRxckVKdkhFSktyN0J2OUNLbFdrT3dWR2JsU1p2R1d3QldqMDZHOGhWVXFZRlZ1Mnc3N3pmb2I3aThqR2RhdVlYOE9iU3loamk0ckdoTmhMVjY0T3FsOC84cnlHZWhabXNhbTA4b3FZMVN3UXRYWmxIVXVoNTRWQW14ZFpOdWFCUjlFYzMvUGI4WWtXbEUyWjRScFBnajJxaTl5czl3bVBlUm1KamsyZXVJa2VLbUxBQUdZckpYZzNGUy9yQ3lCL1ZYQkJjSFpWUWpySWxPTUExeFNyTzZJMFJBdUd1YlJEbkRUY3FlR05PaGY4VktselRMSHJEYjRTYk9NQzdsM0w0WlMwM3k2Z3ZBb09MZnA0djR0MnhOV0I3YStrMGhKUitYNG4zT014cXRPbFpLVWZRdU8zQmZVRDJBblR0a2lYbllQdFJ1bnNOVFVjTGJZd0dVb2ZzM2tRaW5Xa2VwNERSVGt5Q2dZaUNBSUR4NFUyV2kyWVVyOWFGdG5XWWRTWHF6RHdaeUZCNW53SmdObVk0NFJ2NGdFOHFvTXNuVjlPSklNTzBseFNEalF4enNtRWlHZXRFQU9Uckt0SVE2eTRJRVhoQ25WY1hmYWt0eXdTNTZNdHRjMnpDVlFmOE9XVHRQWWRhMFFOeUNjMklNRGdicnRTM1hwWFdRcCtlRE5DSCtGd3dlemhKL1o3UnhHR0VQRnZOWkx2TjNEcGQ2MXd1NjlwSU5IZFJMU01mUHZGbUhNbU9TZTBaMHRadkNHQ2l5WDRvQk5mNUpkeGJjRURkY2hwNG1MY0FpSXI2ak1iSXNZTjhucWk4aGRFOGkyY1plWTNGMzNtTDdRMkpRbmcvclFwM2cvUHgxKzZpMjI4SUVDZzhxenorVGJSVS9uelJYTFZSYjRoWHcvd3ljdEJNVkRIWFhqdk0yZHlRZXpuSmpWaExTbzBCY1BFbXJ0bWFsTVoxeTNCZjZrWFNIaHVtZ29kZisrSzJGa29KR29sY2VnVVpTLzNHcmdWcmNvd3o0U3BScWM0TXh2alJPenRrUEhFKzBMUFRUbHFITFp3Tlh4YnpGUkU5cG02dWtWdEZaM054ay9qM0JJOElHSmcrSDBjWDBCblE4SVQ2WERZOVRJZW9NVkhVWWc1d1BVaTlZTWZVWXVtSDFNZGxHSUcvSUdOTUliSHUrbGQzQWswNGlDMDZEQndNMnVJcmxBWU9CYnVNUTBNMWtuN3ZRaGxxK2xjZitVVDZyTWtxOWliNTM5WEd1cGs0aUhxRG1KZlVGMFkvb1VzaGxRaU80MzFDaTJKSGkwaWpPdW9TK3piMmNuMWxCdTRudDBPeTRJRTAwNTkraGZ5YTB1VFdJb1I5TU5yT2ZScTVyNGNEUlc5K3l0ZW9zZWhDT3BtaXcxbWtOT2lTeHNISkgzWUNTOGRoV2UvVUUxb1JHSEFFQjlUZ05XcE1jSG9yK290Z0N1SkpSK2JVNzk2S3I5ZTNHWDEwZW5rRFk0eGxJaS9LT3F1LzYzNHVPR2FmZ2Nud1A0ak13U1FpN3JjTWxCMU54RXdVM3hIdmI3NVV6KzNtQTBTM1gyeTBtaStxSmI1cXVpaTk1dWhEMFE3YmpyZktiL3lRbXRtSkJxdjZVVkIyTjk0V3NjUmdJdjhHaFpoRjhTRjY3WHA2a2xWSWxnMW1Fb2N6bE54YmxDeWhWaCtqczl3QkVhb0ExRzlHb0VFYm9EMXRkaHlubnRQZ1RRYVlPbUEvcFRUMFlOaGFtQUtVMlBPRGF4UlFHQ2FrTWhIMUd4bzhxNWxhT0l0d2kzYmY3L2hZR3FYZzcveUsyN1grMGo5ekpDMVNpc0MvYjQ2OFExcEFmNGxDQVNMTGFtaGZaYVA0enBoMkthUFQ4Vjhzd3B3OWdFR0Z0ZWRjamV1YlVaeXVCdXA1MmJ4TnliWlpqb3dyb1IxN3pNZEMxYkhsejBPOWdGZXIrS3M0L2NyVGQ2aFhMMTNDdkhFSnNXaVVsbVNIWUZiSTRlRUQ3c1VRaWgzVlQ2bWxCOHZMVUQvQVFJQndhRVQydUphdW4vcTEvbzhyYlByVjVmb2I0eldIM2VubllSbzd3U0xNN25zNWZ4NWptNGViU3FBTEtaeW1yQTJ4ZWdrZWoycHRtbzFaQjZFbTEvZE1uVFNBeUE1N2VhNEpXY094N2E1QVloNGRHalVISmg1Sm9DZ0krODN4NDZBTUZwRWQ0UWtKNmorVWcyRDFyY1RTSU1rRi9RUnRId2JyZWUwUUdyRC9UOFpwRHpnZnY5bVk1WmNXc0pNVnBpZ1IzbVVRT1JKb3pNSDlnZjQzaSsrSFZCT3VZeUpIVzFlSEFFWXBzRDVlV3ZISG1SWUFtY3paS0NQMW9ra1VpZER4SlQ1UHl6YzRZVlFGam14R2FNUWEyMHRJQzg0TGl0WkZIU3VwUXdGM3UvaWdXbkg3dEQ5R25zUGNpU2E3SE14NFNjL2dtMHE5MGhoUVlyODNmOTJLTG0xakNUUEVVTzQ2MGRSZTEydldDdWV1aDJlVHVUc0V6RVJnRGJUUGJSYzIwRmwwL21XVU1OdUNXdFlwTDgzTXY5OC9Pd0tpNVk4Q2xrQTFhNmVocGlXQzN1cDdVUStuZDh6SXF0ckh1emxHUllEdkdDRDdEVmI5by96Z0hNMW52MmJzb0JkbURSOUhSSEdONzR0QkM5YWg3NWEwTFZQVEFYR1pZUjZDYWI2ZVpzYTd6TWI2UWtmaHhPbTFOT3UzTkVoM29qYzNmRzZaQzhMVk9VUDFnUWRjQWp1ZkhJOXBkWlBTMlpacnJmdVZyVy9ZalRhWFFKbjBiVzRqRmI1OGR3YXNRTVh2L0M2ZkZvWTlQMTNId3E3RElyYmFCc3huQlRFQ2FFNmVFRXI3bmxKNVFRUWhnOTN6ZmREZzQ0a0xrWjFRaTQyY1BiSWluYTJFdm9pdmNETHlZZ2FoWG5LRlA1aFdGaWE5NUJmSFhNNkV6aGdDckc5WCtBbTJucTFzUzBWMnp3Q09QS2tHdWpzbXppbkQwRWNRbzJGei9TTTlQak02ZS9FK1dEQWxHZ2RLRS95RmowckMyU3I0QVFJSjV6WlE1S29LTnh5S050L1liNnRlYVYrM3MxVE1qaFZQRk0wcXdLQ0dVY0FwaWF3ZGV3YTh6MEJxUjZnd3lwUHVwc2RJZDViZ21TMUEvTHBYRENYcGpSRnZIZzdKdHBFLzF4SStZRmY0VFdXd1VBOU50S2dqYU0zWmRkRFVOTDB6clhZT1loeEtXMXVNdnZvTGFmWVZwSWx1Rm1uVGNaWldXZkMvU25NMzNTQ01Cb0d0L0NyUGFhMnhxRXNqaDRnTkFJUTlHaFp2YXZxZkpRVm1vT3B6SDlvUVh0dmtMdDZOWjNsMTV3VHVDN3dwV3Yrdkl1bG9rdmo4N3RUZTdTWW53Zi9OMHVEbUN1Zzl5MTlVQ1hselVzanhBcDltRzMzamQ4RzlxMWx6bW1OKzd2TUUxUmMrNEpBVzJzbUIzL09FT2pYa2luNGVjanprSkFrNnVsT2ZIZEZnKzNqWHdVMEY4NXNQd2pibFJNWGI2MHRITUV4UDJzamFhczhwc0xQOTJjd0NaVE12MmVBWGxYUGE4S1BhaU54YzJQa1dBcmszYys1Y2xoMTVXMndod1B5eCtBVVM5aGxnUDdxeGJuazNUaVBVTG8xdGNoQlZvamFtVFowMnR0dnlVQmtNb3JSaVI5S3NxQmpYR3NrRllaMDdGbEo5cTdsUjVyVGZacXB6Zmt0YXdXKzFmMm1pYWZYODBMdWJidnpSVHRWOGF0QVFvdkk1QURBdmZ3bXluTkI0enVVSnIxOERLS1lDTC94Y1Q0aWd2dURZbkVuRVhZZDhKNzB4b3pRMi9yL3hOR21QaFpnUzRQOFJsaDd1NmIyaWNFenNGc2ZTaDZXc2k5c1loM0VoVVRyR2kxLzFRRTIvRDJOT3QxSldqY2VHZk10eFBaeTlBWjB4WTdxYzI0VUhWOWhrQUh1WUF1K2ZxTUdDNWc4TWprOHo2TytRWU5mYjJ0UVJIOHpZM1VNaWsxWlQybHJSMnhvV1plOHJ4TE9kUXZYRllIV0xGSDdWeW92QmRUaUltbFZOTFNHTHFzTTBlS2hGM2UzNyt4ZXBUd2dNUVpYRU5Ib3UwQlk2c3V4TUdpamR3NkJsVnJjbHZMc2ttMEJjY0lNMi9NQ3RJN0lVVHFuS2Z0cWNOQlhjTG1XbVJVRk41N21vUVYvd3h2cE5UWkovNVpkUUc1eWxFUENRQzExMzRQdXVOTndRNU8yRS9FSXI3cG1uVjRabHkvZUR6NzM3aGt2dUVxZFgyM3FnK21YemoxOTdkWGJ4b2ZlUzNxSE5IU2crZVNsVThIR2ZlNFB0akk2V0RBa0dZZFFJODR4UVBhS0NSTHcvdUduTGMwS3dxanVUdm9pVlpDZjkxWmNubGVyRitMcURDSGttWHM0SW5DNzlzaGd0Y0RmWTRBZngzSCthN2dNNXBadkltK1VJcENPTWM0Q2VlMmNteHpwQ0xIbWJSRHFqMkxTTWQ3NUg1aWNHUmxXcGo2TU9INU1tM3NHTkRqQVBPOFJYZjRoMmRrTXVxbDJYcXFWV1BNVERNbVIyNjV0dXJ3Vjl1WWtVN20zTjY2UFg0RGxkTUlCdXNiemZrdHZPam5xVVNQOStjVWhxdlR0TzRxQUJScFI4Y3VLWmZNTlZuMkQrOWtMMHZldnFieENFMTR1dGp0aEx2M1QrWVpIdHdmSUxOWVVLN2J0dnVSNmxUTHlGK24vaEpjSmJuYjZkTWdJSTdxcDFxZVdLZGN3djJJRUdIckM5U2o3MDJjRDFsRXZLMmU3aEJvMDVjYVkwRFR6aUFZNVBCSnVpOHowUUFKOE9YRk1LaGdJeXdIclBWTGNoK045YWU2b1pUOHhTa0twUWN6NE9VZHhqTXJJUW14bkZaeGxvTnFzc1FUNXZFRGhVTWY4bUpmZTg3c2orSy8wN0NoWHRLM2dDbmhCdWFpamdPYlJocG9mM0Qzc21lVG1YVmpsdGxiTmVCajBhR2N0Rkg5VUowRThGNTBIc0xvZHl5bVlLVWMxT2hIM01GY05qUmpaWWZzT0NGWmJiNDEwNVltZ2tJVDltTyt0bm5OQmY0Sjh0eUhDbUpKYzd6cWk0VlZsdnc5YW92Tjk3R2d1U3IwQzh0aXZiZ1BTZldqZ2Y1cEU5QXJmM2tEb0pDdCtSQnJ4amU5OGt2bVQxSGxkY3cxMCtkZHFJNTRRVjhURnhaYndSU1cyQlRjYll0S0EvNjZmcHhKMmNKejBYUXcrUWVGVnpmUlcxQXV0NXhxQURHcWd5MEZuZmZiOUtzcllpODJJZFg0Nm9USTBjVUdPb2NURlpaenROZG1DcHoycWs2QlVVSmpwb09UUHd4ZDNsdGxvVHVVSmtsaFZ6ckpzbGZWb3RkUFBaNUFHQnA2RGx1bE1QQ1MrUmNhdlNES1dTaVpDaGtLREtOMkVJMkFwV2hTSFpGUkV4a0VGeU1QeWhyV1Y2dGVxOUZFV01qSzNYVGVFaFhpbHlaN3BxMVYza0ZrRlJ5STNBYVlUN3RCeVdwc1NrWnVjM1hJczFVM0k3THRPbGluWVhqbGdIVzZGaVk0bWRmQmZDRWZoTXpPYmVrU29iNkFLTk1SVFh0YlpOQlZiKzN2aC9VejAzdFBwVWhCaXJqcFVxNGlKL2VjTmRHZ0dzTzZqUXF0QldsMFV4R0xNTjJ0NnRab1pjeUNZVTZEbVNIL1Bsa2V5VGJGeGJac1lrblN4WXJPcER1MWtoZU9XOHQ0OVhkY1AzQ25HbkZpb3BUODY2dkFVODJ0eEUzc2N3RU5oQ2pFeHlYTExXMUtaMFZMV1o5RHVMK0c5bDAwQnZ6TDl0UFA0Z252cmlnRnBjc0dEMC94eWtmQksrUXMrdE51b3dudzRBQU83SUlld29CVXh6L0tLbVMvV0Z4RzQ1YmQzZzEybkRsZXY4eEdGSVF5K1hpNFFRanIrVU04NE1rRkRLa3pXUmc2aTZUYXFmTk9waUowWitGUnU1N001dGE5eXBEcE03Y1dUVnA4eTVEeDUzSWg3dG9XRjJDbXVKckRKczd4K2RsUDNHbDk5MDlFU0RrNlJnaGxWUkdVeGl6RElyNHphdWI5cTVQdDZuV0t5VXVmdDFtZEJZNnEzVlZoUE96OXdGS1dmek4rMndKd1B1SlN0bWl2QTI2MzZYV013VFl4REJIYWprVUVVY1FrNDd4c2UydThZWm9vaDY0eS9iN3dPZGV2RFVqbVkwcXYxZVdJOVhnYVFPdHM3ZGRKa25VeG9yanRnakFUNHMwVTlKYnR0U0ZJTFFlLzFZdDNxVnZZQVZucExBYW5DQ1ZWYks4OFVuMitmdE1YVGUvVTJRT2pyRHNLWDRyT1l6RE9PQXJTb3hLVmJEVmxoOHgwd2F3Z0lXR1RsU1BDbExGN25oM24vOUZ1THpGdUxWay8zdFBsalB2bCtxeGpMOEp0UEpQUmgrakMrZ0twNUdSdWVOMzJhRklXRXBta2sxbll2aW0wbVQzQ1ExRDVtUHowNUZueUQ1a3Bzb0dYdjkrQU5FbDZZWGFSUGdiYW04TDh6VW9ySElaeVBnb2lUUFZhQmpqR2xQS2ZFditWQ2ZFeElXbGZ3aWNSZ2ZwM3VscUQwZlFNTkdqL2syRGxyZUFWZ3pFRTl4TmNjMVdzVCt3dzYxNytPa3k0MDFDMCtNUHd3TWduclVtY2JxcnBlYkY3VTRST2MyWkFtbkZqVWI2M0IvUnRuQ2Y5VFU4WXBqNVg5dTlsajcvWlc2SjkveWJVMkhmeSsxd3QyOXJOMEZja0VJREorKzJpb0dheHlGc0hEWTdWZTVEajlEMTh5Zmo4L1NXYS84c3gwbVJMMnlaRHZ4VDI2elo0cG0vTUFzcmJLdktDajBYYkRFRDRiNmcydzd1Zzl2QW9udjc5ZXhIdUFZRHlEMU5mcytDaXlpNWMwRVgzcnEreE1VckpGem5hc0NpelRCcDA4U0svMGtsd25aVDZsaDhKVmZmYWpRdDR0MUlTc0pLaG5jWjlrVzc0S2x1SVRERXNXbHRUdGNlTVVxV3NxNUM4amFERUFOZlRkWXBxWlZKdlZNdDBNNmVzNzRDdkQwWFBKQ0E1SG82WlVkeFJVVGF2RzNPc0lncFNidEZZN2NlVEtVNWVqNlgyQ1gyRlNXM1RCY2FRTkVsMFhnQ0RVMUtvWFdROEoyeTdKcGxLa2crWjhhTUx1b3p0K2NoZDBEMkZNY2IwdWtFY3NPcjhHRzRxaGJYV01CQ0FET1dNSHpzNHFpRzhUWE52Y3FJbmtocXZvc0pjZm9sb2FlSTdPR1RiOThoN3lRQWFCNlVwUE94YWpJTTRLZGtNZUF3S3dzTDNxNE16MDNwWGk1czRiSE9GOGlRVXhwZ2ErUFYzN1h0R05ja2VyN0RUMWZVODlGR3lZa3N1eGlhTG9pZUhTS01hRDhXVEFuUmFxWjVDQ3VuM0l0dnhQY2UrZExMWUp4Rkp0WHVoYU5tY2ducEY1VmxVRUhkUXRTRVBicFlJb3EwQzBETlF2aFRHRXpoV0gycEQ1VWlZR2NGSnFMYWRrK2FIbk54czlwZWlnWFkwSEVGUU9aODNuZ3g5Y2lzdUxwUFhyNVNhd0c5TE1OL1BrSFZRdDUwdHIvaWI3aVl3VEFyY3BBV1hPTmF2S2ZueUg2QWg1T2lRa0NKeVJyaFIvWXFTYW9rcDVITnVZb3FBeXE2aCtQeHhzYmxsZUx5ZVZTdE1WSEJxb1NPbkFSS0g2c2hSMERBbmIvTWpsRTVLTi9LbEI0eXR3bmtTMkVsOExRUEhKZythejBwTVJ6ZlY2WXdnUHdSejlGRzFTRWRTZHUwQTJxSUdUUm9keXJiVk8wNFBPM0YvZjBuTmxaV3QwMFQzSkJtVDZha0VUMWxZWVduUnZlZGlxdFl3RWFaajc0WXpISUtjM1RiUG1ETUQvdXRpR1BuUkxLOFVaNllDVmkwL216d0V5QmhNQjBOb3VjUjAxYWNnOENLa0pGNVFWTFpnVEp1ci84QmhIYTBWckZEc3NndDUzc0FJdVc4RHJhR0VySkcxN3BpRFc2YzBwRVBYd2VZWDVWcVUyY2xsQStRdGNUU1I2RVorek9SV2FUTjJoTXh6SjlMR1hnb3pKUldlNkxGazRrelA1Q3pmbkZBNkJ4ZkRlZ3Y1MzRoU0d0OG1WQ0Z5Q3kzOW5KQ3hGamtmTy9kd3BsL1R6SnpBdkhhVHFJUTFCNVFaREFNV09qMTFtRUNkS1FqcCtNdEtSU0p1amtmRnh0MXVqUXdzVTZBWTh4YmY4V3JtcFJTQk5UWW1RZERBNGQrbTZGRDYvNzBQcSt3eWNaNXg5Sm9McE0zaGRvcjBsa1QzQmJhZE5VblVGMGtwNUhFMFh4L2h1Q1l6SnBrU0trcW1FbHpZdWZyUlRLQ0szWUhDamZhZW94Uk5PcnhtUXdJb2hLUzJmc3ZXMjFYOGc5eWo1RHFlRHhrMjhocFQ4MzQ1S3VNcHNTa3V5aU1pSnhSaXJKMU1jNVJkUnpBS1dzZkxLOTNjaHRyekI5OHB2a09lS2luclNvM3BWblNoRDBoVTVmK1BNcDV2dTRTMEU5Z1VEbDEwbEhITVlkQjhjSnlvQS9qTUFwMG9oam1mVW93WkQ2MERmei9SODlaMzlaTFdEKy9hc0t0VHBnOWNhVHJTbjdsbUlyMDBMZ2VMNUl4MmllMGtzd1loSld4Z2tMSG5BT2IwSHNaQUxEQ1BIYnVIZzVXUXJFbG4vRFMyTmczeko0ekVZdVMySUpaMFAwNlI5VmlqeVQ5Qmgxbysxb0d3Q0hyQ0QzOWo0eUJZZlhteE9WTk5tS3laZmp5N3JiTnJKd0xTbW14d1dEN291NnhaZDV6Q1RlSXI5aXExUVBmVDR3OW5vMWJObVBuM0dNU0RFQk9aRUtaclorc1hodVk5ZFYwanRRMWVVcHhoY0p0ZnpBc29CSHVncWhPNkxuWGNoZG9FeW13Y0hVQnhJV0tzdlBOMDV2ZVdsM3Z0ZVJTOVd3Mlp5NGMzeThZUXVkVDhiR1I4VStsck8xdkVyektuYURUL2pNbWRuRis0a1prZTh6Sy8welorOHdSSmhNNXhjS250dVFaSW4xczdEOHU3ZjlyZlFzTUY1K2ZSc2RsYmR6WXNjL2liY3hsUGRvU1lkWGtyTy9SWk4rUUVNSUJWc01tZEFtbDRpdXp4Q3dkL2F6QnVzM2IyMFVwUi91UlMwUW5aLzQ1N2NsZUV4a2FWa1g5aTFKOWl4WFVraEFWRGJuNk9hOExHSkFvQzMya3R1OVZGdEhZbEV6L0xtTmhVTTNVbW5NVzZSS1c0ZFJhTHkzNXhJSU9jb1JmNWdQYjd2amJ6UUcyalVDQVJUcnp0ZVpQanNjbmp5ZGJITWdWMmJpc2FrNDNXcFBuTkhtYk84VEViTmdBUkxXZTVrSG5kbEtCZkwzWDVETS9WVnl2WkJyMUhxZGhVcjVCOXZMMHdyRHd5WExFWUwzR0tXd0NMWFJDa0NGZmFuNUl1TXg1NTY5QzFrTVEyb0ZqaGl1QTlRa2J2dVB5OXlkY0c1elo2UVVkVmcxR3liaFFaNHk3QWhpRGZLZGNnbWlNdWFaR01QUEZKcDUwS3JnanFIQVhLSGl5QVgzZUVDS004TkNIQ0tyKzdLa1liMHdMWDNUczc2Q2I4bWkwN2F3Nkc0Z293UEdIaUVCV2lvaFlxa1VnRWM4dkN4VDFhMmFaZHc2cXIrTGs0dnJ6OE9XOE1OcDJuZ21pQWVqVkdST0FIN1g3cWl3UFlJVmw2cXJnc0p0MnQ0MVJnS3A2V0YxWFp6eDZlcTdhUTQ1c3FsQzZ5TWhUZWtQREhMS1d1cUxiUzczMGZCQ1hnVGRsNmxPckUxN204VEhzaldxS3NuNzR0S2o3NVpWSHdWMUg1NUJWaCttWDZuRTgzV3d1VDg5S3djemsyYVNXcHNDNHdnNDlYVlVaR09BQ0RKN1FUelpXaUJYSDBlRnZ2aVIrUUxMRHZJU2NjS0t6MXA0dGtnamJ2YnNiVXc3MlV4Ymc0b2lwdXFhUHZXR25oQ1gwa21lR0ZtdjNycWtQaXptTno2WTVWK1psblp5ZFBQWWtPYlFQZkZEVll2WUM2SVRhNS9FWStBbzBscEV0STQ2ZEk0ZWdRRWNiTWtwZ0daeFRLSURLZ2p1d2lqL3RPNnNGbnZtUUFhRmZuNGhkZXZTcWpwOTN5c3d3VVdoekZxSUtoZ04zWktZUFZrZHVZWkJ0cmdOQlpvdjJvV2J5UFF3aHVjcWRPTDBPOG5WRlN3Z3ArYWFSdjlQL1d1cXoxQUtHQ09HSTgxMWhiWHFpbmJ0M1R5eVd2QlQzTGNmZUtvMnN3Tjh6UVViUFFTa09UYkJDb3FxWTZoZXVEVk9tQ1pBSDBMU1VSeXVSUjUwTDZmZTVCMTgwdS9mRm9MNzhIMnNYUk55UFo0cnE1L0RJK1BrTUdKNEhkM2tLdGVKRzd5NjFJZmZuZnN4UlZFSituc0ZCY3RuUHNqckdaRmdIZHkzU0RxMWcxbmNOWXQzcHBaLzJsNnl3WElTT0gzRVJrMU5LcnZTd2FWV096Tk1BQlB4SVZLR25yeVFIY1AyQXRKNkJIb25xWDB6eiswTmxPdTMreUFSajdrQzFURjd4TkpHMHlzNCtVMTFDK0ZweXJkVjg2cHJ4blEwQnMxU01Oc3lnMmhjcDVYZkl6RzNRRmxmalhHQzY2UDUydk5oMm9aRFhQNU5oVEw2QW1IUjIyR2dhbjNLYVl5RTE0L3NPU04vUVdjbjRuN0krWUl5TkJTVitoTHh0VTdBZmxLTVhGa3ErcW5BNVRuUHkyVE11eWZia3kycEdsZDNjUzJONDNKUVZRSExSMjNwTWRTZmo4NTQyNFdLcmlOWW1LU3g5Y3gwS1dvWkZzTGZ5elpLMGZmU0h4MDNlUkU4eUVzZVFGTGRGWWxFdmZ1dXR1clpZR2J2YlhEVWdqRmFXQm5aSEI3NHVKRERySFVpNEZFRkEzeWM3VEFOeVZub2Qvd2prNWdIcWExc00rQjVzNnRJem5sUzlxb3VYMmlxMUZNakpWdlp1Y1JnZjVvZ2ZOUlpZREQwS2IzNmJzd3VrTzYrVzUrYXIvdFFUSjAwdzNDdU1DTmwxUnQ2b0RqdkNaejJRakR3NVFvMHZBNnVRSlR0TnVKNkhVRm5ubjcvRVZqNm5na3lJQk9Eb0hEbXVuWnlDd1BCNFBrWkFUUDFqWXVRanRBcnJVcWc4dmxuOVh2TTlVM3RoSG82UE02UlpPSFVSMG5iSGNQQUtJaXArMmN6K0VOOUJXTzBqbGJuK2NsbkJBdDlZRXh3cXN4NmYzeWppVmoxU2VITE1XbUNKOXpVL2FEOVc5alZRTEZ3c2ZISXphQ0s0Vy9FSnd6Rll3REVjcHh1RjBpSEpsUUNubXgrTHdvY1BrWjdteHorelYySlJ5QnU4VDc3aU1nNGJDUWw5T0U2aTg5SktRMlMyNWxiNVNyT3FibkFTTWhDaHphc1JiRkN1cnBUbXlSWUN1TVpTSGZScnpHd1BkTnpYTDAvdE5VNmRPTXRqQm1zR3JIQ2w0L0xwN0VrV09zeDUyQ0hkRWgwRll4c3NDOTNQdGJZRVRZR3EzeWlZd0hPTi9DMEtpTkNHR1pqbENVb0lXSURLbzBLVlFWZEhZTmduMC9LYmdJcmgxaURGRUFwQmdZODNTRVZDZGtGK3JPcGYwSE5GTmtxa0NLb0Erb1plSWxaeUkvd0Q2dldIbXlUbW45Z3ZZK0V1UTNEUkJ6MU8vaWZGNVQ4SkpiVlE1bm5RNENFMDNaeUJ0QjRMcU5JRzlDT3gremN3Mm1IbTk1T1M4RGlJUFg0ODZ0UnUvaG5KRHVUemxaRGUycjdXZ0xNbTFQTHFRbzlSa21CdFFiaWY1QlpvY2JIS3VVVlRyK0ZTSTZpTndBTTVzNjdGbHNPQ3Vmd3BuMWxRa1Z1YThjRk9obnFPZktqYThNd1FHeTROTDBGMUNTWS8yTUFPMk1DSmF4YnpMc2h5TmtXY3Z2YlhWSVp6OCtabncxdCtKc0Q4YWlFWitmMS91Y3pNemt0VGo1OTY3cGdkczd6VUkxSTYvaXQwVVRzT0lnNnNGM3lINUNQSjRnZ0RpQzM0dDJxQUZZQWdRVExBMzhHUnpQOEV0SEcxSS9pOXc1MVc5TXU2NlNMbHV4M0t5M0tYMFJzQW5NVkdITEhpeDZGYnlRajBDVWdYcWpvYnVFUUh6UzJlYnN5OVNWUkorQVJxQUFSVnM3YmZXYjcvQnV3cEtJYm8wQ2V0SXJiYTlhV1h6dUhpeGRSQUlzM0xXSVd3SUtZSWcrcS9OMHdRMXpBaUxRZjJST1VYQnNBWE15ZHJpc3RTdlhHaUgxdWVTODB0dHFkcGlMYyswaFN0L0ZNalNpbStaM3VFZG9aL2VIbXplTGxzVk0vUzZqRncxMU5PSlptZzQvSHpPclRPVjE5NlBMK1h0YWNCNkhYb1c0T1NBaW83REZyMzVuSnNrWDBrQVB2WG1idTRTSVc0THBsR2NkdXhhTlJGMUx6ZHljcTVRaTR6a2RjTGp0UjhVTXZDK01xRGY0ZjloWUFhTXZ5ZExqRytwU2o2VEg1SGlIeDZpTkNYdUliWjVrTmRDSTN6OW1kYTNrNmJIRW80amJtR05aZHQzdVMyci9jRUc3NWlFRHQ5d2NxOHFHdmQxY3dnaWhtZk9DbEdQSW5FNWdtS3VkamtjV1h5ZFhxd0ROd3I1MVUxSkYyV01TVExESHplZ0Qwbm93TlR0V1dpTWZiaG1RVDFiL2lMVWcvZGc4ZTBJZnRMdEF6OTBEbzNFUFlYYkJsUFl4aWZjSE43dzhodUQwaHZ4eGtjNml4Tm1Kajg4RlpMdXY0SFNLMHprVTloNDlvbjd2aktudmJMdk1pa082Uk1xMjJkbjdadnN2SWprOFozZU01OU1BQ3hZdDk5RWRCL0p5eVdobVRVMitxRUN3SS9haU9Jc0pqbEdpNUdCMnVPNDN0MDloY3pLSWVqaFhUbit2UmJxUXI5NmxLeWZ1b1BQZm9Ub1UwSmZsek9sZnN1SW5VZ0t3cHNxdThVbTNRdUllZVd3OTlKNDgxN3dUTEcyVzIxcmh4MWlSRURTd1VnVVUyU1lGSy9KM05PaHp0SFc0bEFvREhCejJKU2hoMW51QjVrQ3hFUVpLYUhJSzZ6VHRhRFllRFFyRVczYVk0UjBkR2ZzRlppVGY5VDlPemtaR1kvSCs2NXp6S1c3ZzRadGVJVkFGT1Q4bnZyWTNuNVJTRHBZazZob3FJUWJoZEhwTVNzTXBxb3hVMVh5STd3OVgzSmZkTUtwdkdSU1JmNnphbkNuL0NUNXRxZy8xVVA0Z01FM1IrMG1VUC9nbGdqdXB2ZzdnRmRHbUtVdUZKK3Q0VkxXZ3BFWVZnNUlFUTNrNVhDRlRvSVRRYmJQaVVGL3p2bDZrK1Buby9XMktqK1Q2czJGRDhuY0I0THlXKzJGeGhuMnpmaUxIVjFTNmxaZFhaS0tPaWpncHdNQWh5Q0RPVU1jNGFZRm5oOHNjYTdKbjVKVkQwTXNlS3lRcEJwTWh5VkpzSWZrSWNUVXBCd21rakxMbm1zZlUrcy8xdFExZm1YNHlUeHpyeGZYUFZZNnJJelkzWWRhMDFGVzBqNk5GMmZneVhZQ29WUUxlUHZUMUJPVStiVmpBUldmNlZEYTdGaVVWZGs2ZDdFajJ1dTIyMlNVc3V3NE4xSnc4cU9VeWVKaVBmUmx3Q2hEeDJQOGViemhtUkZaREJwa3V3alRHMHN2eXpKdjFxbGtKWWxoajN2cEEyb1BaMW1NZVdHeVBuRnU2dWhkRTBLQjNqdEE1eHJjOUNrc3kzeUJmVFFuTVNLVmkxaEZUM1o3Y1dhWGtVNTc2elRNNUJXVmNJaGJxalBVMU54R0crSzVXNm9Ea0VSMHRsMU4yRFl1UmxqUjA1c1RVYVdjZGpKTUdjaFZwRUN5UE55VVR1dDJ6cGtlRHk5NENOVHFhczBOUXkyaDBvNzVPcHNyWmpGTXBnUlczZ09vKy9QdWg1M2Jacm1rVjlWQmpaK0NNZVlXK0p3NGdXQWJYaU9hOEVSRHBSRnZWMTRMU1JCUXg1bCtEVXJBTWE5Q1FKV3dnWC9RbGNHZ2d2aVBDRjFCa01ESG1lbGU1NklWWlZaYzdYcURRTDZoU0JUTE5WTG5lWmxjcmlhb2lDWDVBTjBhS21Xbkh4bXJtbjh5TU9yaHhVSUgvMmZmVzUxczlzbk4yaHRwT1FlY3BNSnAvYWhJMVNHdGlMUEZYMnhpcVBiWVhTdHNpZHpGZVUrUTZmaCtIaWo1YklLRGxYbklKa0lQTW1pQWVkL3N3cXZCL1cwQ0lsczdNV2F4aDMrTnVwcURNSVp2V3BobUs4cHlucHlKNHB4VS8xRUxtOGtLUVFGMXF6VWJ2MWV1K292aUV1VjBQM0R3RCs2YVJrTERtOXJqSEFqaDVWbndVM0t0TmN4MVVSd1B1b2ZsQ2M5RmtVaWFwdHFXUyt1MGsrZDN6MEdlcWpOYUZCdjArMUVxaDEyU2lkYzhKOFY1ek5qZThHTjFLZUFGWm5udmdXdFRUSndmVVpUMWNPVWs2eGEwRzAxZGlQRURFK2RBZ3NDcUFZOVRUMFNnc0U3Wk02ZSs5Z1JidENSY2ozRW5WODhNVVRBSnR0QmFpQk5mK1MxVGlDcEsxMnkwY0VibVB5bDZzSEh5OFJKUDlXUlBpc2YvaTlqcXRXd09HeGdwaGFUN1UrTFJiaWR6ZC9qOGRJcjE1MkFtZGNiKy85VER5Q0YvMGExTmdNOVRvbVBVam5ISk54ZStDYU1mbG5NNjJ6ZEUvWHhvaGZ0UWp5Y09WcG9Hd3RNYzY1ZUJYU1VkRVN2a2VoaVBZbDhXODdYRFlVeit4Si9jS3ViVEFrZXZoODZaRGNtOHJVbkNRTVQ5UHgvRnZYRE9LUUhRc0YzWlRaZ0FGVEtzVWJya2tsNXAwZXFRSXRoSWFUdzc4cXd1RlYvRXlZRGQ3UTRZQVhnR0N4MWxMSlVSL0IyY3UrcGN5OVZJQTRRaERWdHF1ZzZJb1A0dDk1V05PZHg0ZkhIZUJ2OU1WRGQrVWM1QkpEWTB0NU1QdEQ2U1N6RGcxeEkrdm1zQVdlZS9ucU44M1JGZDVVOVVJTHMwMitXL2ZuRkJnWkxPUGJWc0JqUXI4MVdtZEpvdjBoTE1jM1NxMlNZOHRNdzhrZ0xHcXU2bmRGVTM3SytIVzNETTVuNmtvRDk1dlp2QVJJYmVyajZFNUllL3hUQTk0c1JqSVFLQWRyeUdpNDZnV244YS91UUgyN2l1YzRCMEdOb1BEWXJvTjVjcUJJWG0wVVNFNms0R1BpU0hMeG50ZHFDVFY5Z01oQi83WnNTeTZ1UGJsQWNnS2VwK0l4bDIvY2RNUzdzeVVkOURHSEtSaFpRMkkyQVpWaVFoeFZSa1YxSUZKK3pvdExYL1NaVDMyOGhVa3J6RUxvNlpLOGlRTUFBWTBCVm9ES0o3NGFoSTFXRFVVUXUvWVF0d3BsTXdadmlwQTZEZlM2S3YwQS9CZGVMS0xDSTduRXd3RFVlRXNUSnpHSzlOa2xUZGpUd1FqR3lSdzBRQXN3SmhSbW0vYVVWOFJYTDltczROWU5seDd3ZmgrZks2Z09OY0FZdXBtQzZFRVhrd2FnbkZaSGJkeDBtclRUNzFyaXFHZHBhODMvK24vZ1JlU3puWTJVL1c3a2FXN2RXQTBtRm9pdVBBZzFDUVl1Tyt0WkR1YXE0RHRyQUgyclQ0ZG1YSHZYTnVvdTNMV1RiMW9rcXI0VG0wZWJCTGplQkx6cXNlY3F5RjZ1VmJJVzJSZEJkeGRrei9WTnUvTHFDM3NzS0FHU0RGVjB6dnVjVW5DbE80VmdXS1RHZk4wc2RaWmsyeDVyS2pVM2NYZ2NCMFp5UVBKVTFyWitxcDB2NWpUYTRmWDcySUNuamRhWDVPVFBxek9aYzVFdHBsN1c1N2lCVDR0Ry9FOTQ1aFJjS1pSMlBjd1Z3ZzQyK2o0R1pjcEVzT1VRRTkyeVJVTjBuTmg5NWRzdlI3UXdRWWpFY0F3TmRBTjljdFYwbUlwOG01b3E5a3J4aGJsYmtiaU5ZT0Q2M1dQb1ZpMEMzU3NncTE0VENRRVRTci9CTmJkcFdTZjhzSEcyOXcxcTdyb041aG1JVEEydXpKZVR0d0d0N1BDUXVtbVFlSEVjVmtjR0JQbGN1WlRxWEZsNFdKMlRWQ1FVVnEwWFFydWdUakk2MDhtN1Bhd2d1MXZLS1pEQkRtZnlnMDM2OFNvaGZCUEVnNnBBcHZnZDhXenF4Vy9tZ0xNVmRlNmIxbTRaYXBnSFI4TEVQeVV1MytYWU44dVdHam5XVThXa2N4WFIrYjdCTWxBalowUjF2dXo5d3VnWlNyRmtSdDNETUtqZ2JtcjJxMXB2YkRwQ0tHbW5wQ2ZkWThkb01Hd3hYN0dkU0lyWlNRMGt0eFlFaWE1Q1lxbnBsSzlmaXcwM1Jld0s3MUFqT1F5KzdDdkhNWWFGVjFlYlJyRTVReVlxVG5iZTgvS0RLUjJWVGI5aDY0RFJQQXBuM3hsWGRHVXlYQU1NdFVweW12cWUyS3lrTEpmd2NHcllXMVdudFdXMGVSQ2hOckhlR1B4UnJ1VmVsak4vMFVZUWNvbHFKd0p4emJuMWdMZW5MVWZMVVhpSVM1dElCalpqNGNqMlFDY09ZRkkwNlU1NkNlWGlLVDZuazZ2ZTZBR1Y1Yk1SSEJORURjZm83aG1ZMEphZ2tqMmxsTU1Wb3djU28zV3JzMmk4RTJGL3VmL1RQVnRiK3RnN3hEcHJEUFVWbWJkZE5vY2w1VU5aYlRZMFJ4dzRtbVlJSDg2QWJzUHhMdkFUNVVIS3FtVzBvbFBYckNhQmF6MHNYSEdXZzJmWVpTUmlqcFY5VDhLejl2OUtqVUtQSXdTSHZlaHpYb00xeU40am0ya2RudVV3Nyt2OC9VU2FkRko3UXdkK3JvNTQ0ejNNRWJ4OHVLaGEvL0p3NDNWbzdKWm9GNUVBSmNNYmFWczVvWlNaajVpbUdTTld6S1N1MmtIOVhyZzFOVENaMEx1VjMzTU12SEQrYWYyanlncVltMnhkUEJuZ3NQeUtod21DN1Rab1Q3ZXR0eDh5L1RvcjNZWHFZNFBQSnBMZ0Y2TXNEVUFjc01zbXhYZU94Y0FqcitEVTcveU9UQ2ZLekNMN0p6VnZuTmFycmh5MUpWWkt4NVFRUlhLWndIWTVlOXNVQmlRdTBnU1pBNmcyR29DaVV4Nm0vTkN1RUsyb204WDk1UnBxeUZmYWxPQm5wK2h2dTRPbGtxZXdrV2l0RGR4OXRTOWxLRDdvQkN4T0xpck5YVDRuT3RvZUFYN2RnYkE0SmtzdnRGM01pTE9SOVFNQXM4ZEdoQU4rcFJWOTZYR1hCUk8yUTZLb1VwTVJ2QVF1WndVbEVzVTBpT3BtVXdQTnErS0ZvMEVsc2t4NXYzalE0aXV0c2tMb2JUVjVFaGFCUkxUVkxFMHBERDdaUlB3T2JxUEFjaDNHMGErSGhlbWNhcW82Z0kvYm90UWU5S1BoaVpORXBIM2NTTHFkZ0hwLzlTWU4zWERVeWJEWXN0OS9SV01OL1BkMm1QN05CNUdTS2hRZzJtdFl5SHRETmcxMUpwYy9PZ2dHNWdRdFg2N3JTQlNtM2pKYnREUnpiaTQ0S0pQM1d2eFJVcElFVUJCbkRqZTRHbnR3UGRCOTFGSC9jbm9CSkZUVnBOSHFyU0o3WkFUZS9PY05ka0Q4T2pQTjhsNS9KakFqeWkwNWRVamVnNHVhZDU2blROM1JwYWRNT3NhaWprQStxalRHbE9Wa1N4RWtpblRyMnhNOE1ycGJRN2xLdzJKbmkwR3hzck50MXY4TkpBamUzYnZCOHFyWW1lQVc2VUpCUFZnN3RFNGdwTk1nTnFYTnBaR0FtTVpKQkNMTS9rVGNJZGN0Zk0xYnVDYzBZcFJUbjROYzNKSWdMcWgrdHlSNE9sSGp1RTZLSmVaOEkrWlJsekxmOFlvM2dldGUxakFOb0tFRU13Z2QyVDF2aldsdEZQOVBlUjNuMW9jM3ZmclNPbks0USsrODJoWWdlMFdMc2xtMGc0eFJUa1liUEFIUHp2R1VwVTd0LzhQOUR2UHk4ZDZwUUJ2d25qeU9oWGE2TVdkUFZpSS8yR2R4d2RodkVJUFoyMFI1UEhmSjE3MmNWUDJ2NDdaOThWVGVGcTNqZmtwc25jWndZbHI4dVlzeEpLdzRZME9UL0pMa1dQTTNFN0kramVBTlp4d2d4RzdoQm9iL2NMVzVHbTZlUEI4dTVJUjNwMEtHUjZKSE4rcDlVSjlNZmtSMnRFaTdodGU2OFk3UE9ieWZjQ2FjVEpENzZWZlh1TEsvWWhVMm5tSVF1SDVNem51YmhRbEhWQm1RZkFTZW1XM2R6b1FkbHdjZURmUnMrSjFkOGJ2ZFlpdUVObEtFYmZpZElHeDBZZjUzUmx3NVRxRVNydzY4b1gyNmxwTzNxQWpheE5sdSt6OEN3QS9mdzFXZ21QZEFsMTdCcndWNzJtbHpieGJxaG4wYWE3MmRMSTMyZXBrcFRHZnRmY0IvT1ZSNE5IMnpHSklud0ZVSnVtQkFsdElxSkV5TEYxL3g3UmQvVGhSOTRCL3U2RWZ5Ym14WXdyZjl1S0ZBOEkvRzlsaUtQeTdZU3Brd3ZjM3NOSjh6YjRZcXdtNUMxSUhIMmhPT2RKRDMrTjdDWUs5MUF1c2lJSXJhcGVPK1JST2NDWVVSbi9iWkZRVEloRDFBRnkzM0FrRnpSejY1aUF1UXdVbmw3WWt1UGlmVkZ3bm9zU0d6NXRLS1B2emFVT24rb3Baek1EUExFZElhNkxuRklOQWRzc0xxKzJvbXJpUHJzejlBUjVueVFoVStORTNzWVUwZW9tUEFpOUs0VnNLUzBvMVB2Ukw2RHl1RlZKOGp5YjNGdjhFUStXbERLZk5vTHMrUUxlelR0ejI5OVljemYxejFiWmdHd1UwbzlyK0tjdGlPLzZZRDFPQXk2b09zS0RaU2tGVHJtU1pWbjQyN2hhQ1VIWUZpZ2FIUEIvUW9aRzBvTU42UW9Za05QTXhNbUhXMU53bEhUUkRNaDRsOC9BS0ErWE5ZVTkvS0tpUmFtQy95V0syNE1YYWZlTmF4OWNVT1M2YXkxNWc2Z0xQVTdNYlVvZ3dyNUxtdU1hcCs4c0c2cmYzV1lFZ1ovR1RLTGZqTER2Q1VHa2d5eDFMbGovUHBwWVprdVc4QkY3R2ZzcWxvZW5LaUZjWjFKY3FnMGdOU2pRQnowUW9UQ2J2YlJyNU9aNVpyVjJxWmVwSExOT2d5d0pScmtCNUJXcWlqN3RBNVJ5QWZtQ05wNUlVelVZbjY1S2dIcUFXbktva2M4RkdvWnh3OFhtOTJzKzBHb2pLRERTVFNaYk1uUHd2OUMyamxMZ0hxdUEyWnR6Z0NNOG1nTTNVY1BHalZFNndaSG5jSTFhcGx1VzFqdWJubEo0dWRiSDhWSXRzUENxWHQ2MURtTVNiR3VLZkxjYTBKUXV6V014V0dHdzNMWllGUXBHZ3F5Q3A0OWxuTFZHcG5rQmJoTGNGbzYrd0Y1ZlVKU1RieWZmTVJCOGxRemlKRGxLUWhuYS93ZmJKU1BENzZMOGFqS1d6NEJhWndiQUV1ZVhmbUFNV2Y0M3E2aGdtZUZaY1dQUk1qckwzbUs0QmlZZTQ3R3k5M21MeWZFZlM5S3ZjSnZTbFV4Ny9MQVY0Mk4rbUI5cW16ZGJwVWRVUWtvZlhwTzMyTjYvM3oyZFQ4bXFsWlZhOVlrMUFhNHpMbElZeklkczU4TFduNy9Ca1RlNG16YXB1TjJ3MWY4SkpvTnhEd0cyVVJxZlVma1ROZklBdHFPRlJUUzZ5UUJPclJMSzVSV3BBRzVkU2R6cHdxVXdjelkzRDhPZ3BTNndDOFFDNVRNVHZzeG9ycGpuZWp2UzIza2dBekxlMDJnN0p5akh6YUIrSjRxZmNVdHB5TWVRY2xadXJocXpobHg1cTNtNXgzMkJDdWNFUlJ4cHNHSEI3OXZnTENUd282aHV1MmcxVW8zWG9kUk5Fd1p0RjhmazNOeGlMWDVkZTVBUkZIMExmckFsRGxJd3AzUmNEMGxkM1hoYU9Id0sxYnp5SWdUZFJVSUxDV3RMbEh6Qnk0K09tRW9wbTVLM0dNeVJFV0RQVmxzNkV6OXllcVhNSS9NVXYxcmJwTWVGalAvSjU3emlJbi9KemlxaEZsM0NNeWJJY2ZTRFdCNG15ellVbDFycGswcjI0b2xEcXpYbUJPZ3BQMUtHcTd3eTJiYlBoZ3Vvd0hnWm0xaUdTbjF6b05NK0h1c04wbmZtaUtla1hHTGMyNmk2bU9tc0Uxa0ttTHNMZjhORnRiRnlIMUx0TythMUVZcE9NaXlDNWZoKzNOd3VYWUh3R3VZZnVJVkFlSEZ5N3hyQUFrRWF4RERXbHU3c3RSclNkMnp2a0o1V0s1NzRNdE1qU1czS2RNd1RSVFFGaEs2dTJpaldpcGx3Si9jU3FOdWZqQ0NuWG1PNDZ3U2t5MmtibnNRU0RGT3d4ZzA3NmR6WWxNTDZUbkN2bGNHcTV6SjMwT0g1VldGYVI1RHFuUUlKck9WbzBvMUh2dHpwdHoxbHlXZlVNbW1FS2pRdnMrajBaa09scDFWL0ZsVEl5NHNucmlhWUFpcis0NFIzSnkwaExoN0tabC80NzRyZVMwNFhuc001VEl6VDEzdUdFWVB1NHN3eVRUNXNRTFpHWC90eitRTkRiRWVXTzNtbTZhSU5vQkw5c3UyWWh3VG8rdFBCTndjMFNqZjJ1MzI0N1FHSzBnL1VhakVKZkZzQjlSTWs1QjhMK1ptOWZKVjJCdjhDbitBWEF2bXZrNXg1R085aVlUcVpqbHZhY1ZUZEdMVFdPMmZ5UW9XK3BST2dybzFzMFB0TGFwazVaS0xub1g2ZjdGMVl2SEI4SUpvNjhUMnRBVXdpaHhiT3crMHh1QlpEUVlkaHdiNzhDQnhEQi9vYnVWME1hY0JEenVFbUVXMVdqMk9vK2J0VkE2cjVKczEzZU03WUVCNHVGZmRiZHMxVk9sWDVkZ0dYcUtCV2dNRlVNdzZCTlNGS2dQY3EvVVdmQksxT3NXcHIzOThubDVwZU9yK0YwZGNZV0w3RXovTUVtckpkS2tsS1VSUVFiakc2bHF2L0l0ajNwU1JoWVpkT05xMmJDSVI0Z0lxU2k2VSsybHEvaHpZazZFMTZGTzI0TmZMY1Y0SUhGcjlscXhoTDRzNlA0eVFCc0JlOCtjRTdUOVRsOTJia0JzN3VNdUZ1dGVtelBBZzR1YnBGVlRCYmlzMEZFM3VRMis5bUJ3M0o4RG5ZYzNtL3FWV2llcmpBM28zcHJ1dFhZTENhQTFSYnJJUjFkMGFtYlVGWGV2ZCtPWUZNV0FQblFPMTB2UGVtMVZHKzFDYytmWWRMWkpmNUY0MnU4U1BOa3NTNnZuMUhyMmhVeFluMThSSFNBUERLcFFZOVk3NUhRT2VxcjVFd0hDQ09JODVneFVlclAwM0hzbndRV0ZUWEt1OUFsdHJNYzNaanJjOFMvaEtrSXVIT2ZDdnBNdTdhQkdpWUpOQkNzaEVONXVxS1FpcGE4WWFzblZML1FrM2NXSGtuN2JYckQ3THQrNFhUa0RMSktzZkxFZzJlbk9JQUJRbGZkMlpMbEVmektvZTdZOHJ2M09Na2duSThlSEJ1SDAvT1B5SEU4ajVBTTJCcUJDZXRPNkdaZ1k4aGg5QmVZWUtZeldoMnh5bkVvMkptTWNlS2hBeTkvTjJoQm5GUDczempKL1RXS2VKMlpBUzdIVTRBY0tzNWtWTDNNODFKMnNSTEVrenRUM3RkK2ZBalhWc0prQWFocGJFb1F6Zks0QTNQWE5xdzRxUUJwQ25ZWWNzVmt0SlpnVXFndmRrUzRVRldwR2dHaGJmUk5QQThJSkNGRVJDMGdvWk5nbHZ0M1JIN1pwSzVrVmgvU3FvQmRoZjlQMjc3cHovRnVxa0lCUDEwNU9aYWxiTHM1cnFyR05zMjRZLy9pYnM4RXRpZ2k2ZXl4amdsZDl6LzBCZTN0Z2RYejQ5TEJKQ1JQNi9semdaSFlrRm9jOFo0a094MnNhUVBjUmRVZjRTZVgzKzBsbTVSVHZSQ2EreVVWZnJpNUZuOGZSR3BualFkNGZGaGlKUGorOTRONVRyc3hEa3liSDJFZ2M2SFMxOGVoc1ZPYW9zNkM1MDJKcEc2YnJmem9lajQvV3k4YXROeTFwRmJSN0lHckRqc3Z4L1JzWWhlUS9NQWNOcEFBeG1qbGppUjFOZmlZWUc4STYvSXJDNXVjT2JISTgvdTdWVjVpMG5Pb2pQRmtNZmhhSjJwVWFOUlQyQ1Y4dHQxelh0anA0a1hmZUFoYTlvYTRnbU1QUEs4T3RsMllQd2tNc1hQaDQvcW9VSFp4dWZjcmQwUHR0dTEwU3NSVGpOMVQ4M1FNS0VoMXNoOGJybWFzY1lkcTFRbTBSaVVSK29PVkxxb3F0RkxnbmNNQks1djVGaktpWkoxMmhlT1BPcm9QWTg2MGk3UG9lTXRMRlljWmk4OTBYU3A0c0J3OWdHRUVINFRpWXJFMEdHL09JZm4wdXN0cUdYdFhtWXFZZzJ5UDg0eElJKzNRdVJKNUhXQ3V5UUl6blR6T3FFTXFPTmJSYjFNQWdPY3dIOWtwVjdSelo1UGxCZURnM1F5RitUTjIrM2F1bUo1MUZsOU1zQkhxaDNaUWlJVlJyYnlXMDlUaDcvRFJDSzlua2RaZzIwVnJleVZQZDRicDVQZWpSQnhVdEpNZzE3WXNKK3RsMnhpWXczL1dWNGNhbkxESnZMakF3bUVOWE9RTktwczNUUzZlQVhVaGtBNTdEanhtWG9CRFBsdER3VE56TkhnV0FET0NXeGpZaDMwNC9wWDFOMThJLzdSVVhtN2l1bHR1RFZCam81UHBsUmlOOGNOTFFkL0RkeDFyejZWOVRtYkZIRmhJR3hpRC9FNFNaSTlOaW9Ka2VGSmFaK3VZTkM3Uk10UWgxN290QlhzUWJsQThwYW01T1BzNWhmcUl5UFhEcUNTSGdycHhwRnlPQUNxRHVmTlR5cFhYUVFlVFhzTTQ0cGJ0Q21WTklTVk15L1o4S2F3RkZ6d0d0dDdUZDhNMTZsbkVOei9SNEkwTXd4dVdzZk1hSm41RVd4aTNZTXhYYTY2VEJPMENlNzVVWEcwbjBoSTdxQUhJUXV6S1ZnTnp3WjVMQ21Yb2pQVkNPaDVBb3VBQkwwR0l0Q2lmVnI0dVRRa0JqS2JqeG03YWZLdjhOWTZua1dpZ2hKekRHQmpobU9xSjJHNkw3UkpKa3FuSHRGaVZ3Ni8wNXB6aFE4SVQ4aEdJMVN1UDZtdWVlVVNwandJTXd3QWpzRFhSWlhhRjBDRWlqS0tRYzgvSHFpa1V3SysyQlpIb1djUGd6UnorN2M4UjVxSFR4UW1ZRlN0b3Q0U3NDYktBTjZvMDN0UU5teXJCNG8xSjZQdjRsN0htblNwLzUxaWNPUHZlbVVyRC8wdDRsbFBFemNRdWZxeDlWWkpHM25pcDRoV3JZdmE5SFpURVhEeDlMUE9QZVhzVy94MnY2aFJLdlF6SHpZZkpvMTU5TUZvN3VLZVdKdWZsZm5OclNqYUxlZlllZm1QSkk1c3VvMFh0S0U2VlhIQVczSjRpVVAzTTBJZ2RJcm4wNGhaUnhYMGswZjVHTE51T3JJdDhaU3JKUFlyWGs3RlluT3A2UXp1U1Z3WWZ4OHZVSVV2cHRoaWZXcTFuY0FhNkpCZVlaQ2dqMFhWd3VXU3lJUktkTVR4WVcrOUk3bmhheTRaTjJiSExpR3dHYWZjeC9yazNaTE9uL09QM05tak1Wbld5RlZUa1BXNUJTVk1Ub2RYTWxCRUkrSDcwNnAxLzVvM2RQODJYRGFOa3MvSElQV3pCVHZFUURka3FGTEovUkZpNEpiWmF2c2lLdnpaVVdVYUVyVHJhaHFhTm1NRVRwNmxRaUVMQmVhbzFzN2ZKWUhSNmNlMWNIQVYyNFF3OXY3L09qOTBQSWE1amJqajRhVHB2eWgrK2RYeUJ1aUEwaU1WVjU4RUI4TFhhMXpiKzZzVUtSUUYyYnV2ektZeUNnWHE3cE9TeUtyN0dXZWNqbWhsdjZyZUh3SXhuTzcvc0pGa3FCMU14UHh4bDQ4bkFYbEtsbXNET0Z5d0R0VElxdnlMa1FnREZhS0kxektrSkVnMTlvOEdoRStqZVJFc1BsM1RkbEhNTTI4NC9tYVlsaS91NE1xK0YwUE5KUXdQMTZBQXpBRU5vdUdOSEg4amt1cTZ6NjJkSTNQWVlNYzJrSExnYTJ2SkFnK1l3bWVMWU5WYy96UThZdlVGZUNZK0JaYWs1VVUwNnpiTXpNQ25TNE9CaE1CWFFINWUxeFJFbDVhbHB5c2lxM1A3Zlg2N0Q2ZmFDd21PVVRMM2lqYkVOY3pFbzFod1NvL1dXTjFMZVV2aXZsaGx5c3EwSVU2SSt6OGI1bUNXWmpKeVN0Tkx5NE43OFZBSGVyWjFJRmJmajErMW00akQ1dTFGYUN1a3BvWXBJa3VQWmExVjQrdFVFVTVQRjlPU1hLUVZUT3piZHQ0R3BrU2txS3dRTGhQZjV5RlVuY2V3RVRoa2s1NUROdUJXVHoxcW4yK2lZdmdibzB3RTZxYzRCT00xby9ra3Yyc0VUZWtCRlYwVWlpV1dGYzkwcGVhVE1vaWoxOEQyZ25wcThDdnlvSStKYk1RbnJicEhyWjdCQlVhVFNhekZub2g4Y3dsWHpOcU5EcDJvQ2ZpYmNMSlpKZllsWFNIcDdscXV1cDh6WHpialJaNDJQclBwMm9yM0JqL1JnLzVKUW9IRXJPdVE1VGtGYkxqaHFBeGF0N25aNXhUcUdINzFNSDNlUm9OcTYxOWpMSEhEZ2kvOHRXRi91NGVLcXV0a0dCbGRFeTN5ekNUbmE5YTlrb1ZvL3NaTHNvYmlYcmxTcjNTNjNCWGRVZ0RyU0pPSjZvUTVoT2RCbmRSZFZGck1WRzBmUkhTM0xSdm16MWJVVk1wQ0ZJMFg5eDdBaXRibnFiT24zbDZWcyt2b2plVmdZZGU0cGxoZEJMOWZyeDBpeW9vdFUvcHNnZ0JMeGEwS1ZTc0lIS1MvTE9EM3J6MFN3L2FxSjhxVStCdmlwcUF5VFJXVWttcWNtTFdpZEY4WVYveVBEYWVoWUwvT1JtNllXa1Q4OThWTTI5N283aDdjWG8vcjlxTEVQRUt1Zy9GMXpka2VVNWlDaVk5RmJJSmtMUEhNVCtMbVp0eHh0MCtMTE5SdStIdkt4TjVNVXUxdkVpZTJTbVJkdlEwYjMvUlVSNGdqWjRHdWVvUlJucUZ6VVBvRDBJSDhyaVMvTWs3cVdtSDlFNGE3VnAxUVdPekY5WFA0bGNuYmV6TkxpNU5aeUQ1MEVETm8vd0RqRHRFL2IvZFY5WG9wWTZleUpaYVB1R0xuUy9KT3dXWDh1N2hiWW9Kb1FJRVZnNUZoZ2o1QVdBK0NGN1ZJMmFCLzNubEVQVXBzRGdLVUt4dkVWOEFpSjFoazF3S2crdWRpSXlueVRXYUV3eWp5ZWIyczI2bUtINGZxeVpiT0ZWRVNmU1ppemVlREdBSHFaUk9kRlBDSFhLVlVOWmtvMTROQUd2N3VpU1Vsd0s1SURURkxYSTN4N3NUSkJuMnRDNWoxYUloNzhtR3ArUFNzcFpBMmlhalZuRUhvaWkrU2JJMVdIYTliTzlIeU9TcjB3QjZUazN6VFZaM0RkK3hqdU1pVVFaR3ZLQlpMQWVFeWtpd3NUTm1oUUI5cmIzcHdkOXh1ajR3bmh6VE94QW9wUUhrc3FsRGtkWUtFYmluVnFMZ0JRekRNMU1SUkJWdk80Q3pPeVAxOXVHT0hNUGdpWXYvQStjUlNpcHZzeG84WThVS3lIVG44WnFSb1JVVWw5clZvMTVoVWVBeXFpd2N0aXp6ZEpzYkdoNUpuZHgzMlpJbURWQjNUR0lsYTkyS0hLK01WdjhJNElHS3BvNWtLRWhkMDNrUkNqRU05czE5VGZ5Ui9NZGxBYnZiSkI5MGJEK2g5ZXAxSzA3Ry9yL0tybzB5dytBWEpjMmlSWm5uL29Cd3BvQkdxNDFrODBOMGpJVGZMN1JpQnh3MUU5aHN5bkpZa290MTdjeWtsclM3Z3pXQ3pub2pLajM5TGZvaXppQnRHZ0xzSkk3cEZpS1JHajBQTFBFWDRzWkJKSUFMTHlEdVVHMFlkMi9UUUZpYUNyL0xScVlEelFLYTgvd2wyT0FOWjViMGI4dHIyZnVkRkIwUTEzR3ZHM2t6MkU1c3JPN284OUhuRXJKazcxcDRlSERxYTlFbmcvZHNaSUhwVTRYcnNzOVFXaU81R0JPK1lYc0NYemJWb3hUTVAwSGRJZGVVem9tQnRaSXc4OEtyL0F5Z3VJZnFPWUJ4bmNGcHFFbkpVN0JtNmVpQUp6MnJvc1hvc2lIdGlvc0NZSGltMXRiTzgvT2ZEV2FMeUF2MFhtdGg5cFNRN2I5NlJqRXgwTjlOMGw4L1ZwT01LZzVSd2FFMEpOUTkvdDVOL3lRVVlGZC8xSmlQcG5hMy94RmpPUFdheStPZjRlQ2lMVkY5ZUttYS9uTXdrejdmNG90S1FuV3o0ZFFwY3hRbWJ5cGh4aGUvVXpEL1QzWnY3SGg1YmRpMXZqYmVab1B2VDh0L284b0l2eTBqLzJUdm5HNDd1T0Ztbm9ITEpzK3FOYlJIY3M5My9uLzlCcDAwWC9BVU1oSGZraUx4dktLajBsMEhBaXVCbWozRmxxcVJVSVQ1YzdwL3ZDTGJwaUN6YmUzemFicXo5WCtYclhkWEpCZnZpRFBOWkZ5ZkJNNEdtVWZTT2JIYkYyb2EwaDY3VGRybTZudGtjaVZOTmJKck5uTVZONXo5cmU2NTdyQTdzUFFEbExZTHpkQ2FOSkVWM3VhK0l0R2IxVlF0SkdleVZXaWh1M3hacFZ4QWpURDRLbmtLcDlaU0M5MlNjdVFuQ3dYTTl5VUNkT2R5U3hkR2ZmY2VtMkM0TnduV3U1Q3EyNTJiY0tNOUNUSktaVVhGalVGSk5qWFducEorYkhlcDE3aUJlQkFQSWxaM3Roa0VUMmxia2RoMnFEZDdSYmduOTl2d01CZGozSFdJTVNmTkhiN2hEUThGQVREVWhTak1PZkxBV2lkSXVyQ1cyb2ZJTGlwNTFFcDFRck5YN0h3VUtLbVlYMjZmaHVxWGNnTWNkd2RMaUdXY25YWlE4azRhSlpzQlpPOEhWVHFYTGRIdGZLeGRKVmdIZDVRTmNha05hKzVIVDdNdDhNTFZjZE9xYVhUY3R2dlZVaGNvUVJ4VHVSNFQxU1JadWllSnoyajc0Y29UUDZWQUpINGcwNlk3Q1FHd0ZVK3lHWUd3elA5bVg3Nzd0V2dmcmJ6NEptK0FTMjN3T05pamZCRzV3dUxTdnhvQ2lNTlZuR1ZIWlNTcjdBVHZyYnlVNGRnVGJUaDRsWFQwOTdWM3BFVVF2UkJzaGYzK29TSENXVUlFUHNGV0JBSXNuUXRGT0pZVnhoYkxzZCt4SVFrMm1KckFiS1JvZmpoRDJhcnBOWmRPaERnMFZrdDkwbmtRTCt3VlllWHducUVOY21NM3p5TkFjR0RMaG1GaGwxWTU4NVdxWFRqRHN6WVFpUHQ0TzNQUWJXaTI2Q2l2bW5PVmNmNGY0L1FzRzZsd2UvY1JVVDZXa3hwVEs0S28wQzhlR1M0Q2l0SEZNRGpSc05rK0pTMHJVOEE2NmtHTFRWK2xZR3JrNU1nRGp5WTcxUW1jczZ1SGJkUU5ua0Q5dElJanpaUjlTclUzNVMyQjBhbC9mZzZxNnF6TmdqUHdWSDdmdVl1eW5iUjdEQlpkQXFMREJLYjcrUHNWQVMyb3RQU3E2UlJhVE9YdlJLWUgyekRDVDcrSS9uRklaRThQUUVQelFJbGp3cUU0ZnJhbWoxUENFWjR3TjZNb0x3ZEFkTHViRWp1aUpialVwLzloMmNvRStJNGJRZnZtYm96TUY2TUgySzVEcHAwaGxvUWo3c2NKVjNXZVIyK0swT1ZhZEhNL2EydjcyYnY0SGdSUGhrZFR1QklnNHhpNkJJc2R2UjBML2FPV0xxNk9XbWJjbnM2WXR4ZUdxbkNGa0hUakdPUlplSUhBUlVzZkZPVTdqSlUxenJuN3JXaFVHa2ZITlcyN3Z1UEduaU12VFF0S2NHdVVXMENhTDBITG15QlpjcTdEV2J1bVprWFhGT3hCaGlUZmo2UzZqNkpGY2tXaTNpMjJQNlFOT09UaVV6MjFzbmlMaXhlOStGbWZtdGU3d0t2RXowNDQvbXNzSERqc1cwVkF5UEZzNkh2ZU5XK1h1TGNvVU1tWmlqLzkvMko2TEFZMFdPZm1iUExCallSTnZaTU9oYmYrZ2MvdmlJV2ZwOW4xa3M1aFN5dk1FSzlkcmFhRWtYRWh5clZFTmRmemQvclgwL0syejBIMTlwaXBuVkl0SlpDQ0h1ZER3ZnZ1dXNaa0JqL21PeHBJNVBBNFNNRU5WOTMxQ2RaUyttL0ZBSXgzN1ZZOE82YWxwQnRFSS9Ob2RNZmxiN045Yy9DQnJrT0ZYOWYyTEN6dXJRTU5LSlM0VFNJcGQyc1ZsRXZJTjFHTnZTR3pmVzllVi96aUtRcjVQaFJLeFU5RG4zaGF1blorditBelBaV2JlZ3NyS20xNytUNGtrQkk2S3RjalJQcjk3VGhrUlBZVVdGWTVFR2hiZXFGVXcrN0RUZVBRUTcwdlBZTVNjYU9CQXZxWTNETDdlRmI1Y0ZzbHoxYzg2ZXZESlJZU2p1d3loWm5wYXgvYndvVzRKejNEUEYwVE9XS21iSHo5ejBRYjFGaDcxRWlneERLbUFCMFd3SlRMZXExcCtOTVdUM2ptRHNGL2VKOXZubjJkbS80aTRidVNOb1V3bmJneGgwNE5CcU0xdksyK2VlY0NGRng1d0trN0hSMThmVjJrN1BQNCtEd2ZHWnFEL1VrRTBvYllyWjVzWEZGQ1dBZ0ZvKytTaHM1bXJKWHY2dmtqRGlScFVncWFLTlhkZzFVd1NEeGo3NjdCd01vcnowdEsxVUtGRWxFUG5ISXoyQUxraTNyUC9PR3VheUlxenAzc3RYWEE1czFreVpMcmdoRkhzVzlwL2NSZnU4VXptamNYSktaSm5TVTBiZnRzL0NmT1VQNmgwbDQxYThpVjRra1JReVRQd1Q2OTQvWFI0MDFscTVNZkxVZFpHcmRTbElEQkQ1Mk05cFkzd2k0M0FnV3QweGE4SUkybVpJQUYzWXRPQmlOdDJGVGU5OWdyL3ZhTnJWcnBBMkxneWcyT0U1MFhydytSektJWndVa3RIU0VEa1V6OTVSUHhkb0hpR1NoV3RoSXVZem0wVDZzQ2YwWmZRWjI0MTdINzJENE5xbXhodUZtNGQwa1licTFXVmhyNUFTNlgxMEVXdm9SUFpIbHJ1aXZ4Tlk2Ullucm1TbEJMM1orVkxwZHNRTjAwK3BSa2xvRXhBd0NrazZHVTIxM0dEV2lVc1pQd0J4OE5YcFJsbkZqZE4rNlYvb2E3d3pFY3cwZ1ZGQmhOWVdQNTVacUNDTWtNL09XT01OQy9Wbko5K1kxWE1jclBoNmlYYkdnNWdVVU9hWlVZM0dRdk83LzRkVXYyRGNmTk1NY1BTZXN1c1ErRGpRYlhRTmlqM2gvRmQvbitTQ0F3RU9JNTZ0YlpReDB4ZjIrdG9VcTNieHhING41QWowZXhKWHM2d2Y3dXRoRWs0VWdubEIrc2t2cVBqalB1WEp3V0tRWlo5aEZ5RDRtNXVzUHdoUFBaa1Yyclk5QmprbW5Ta3ErT1Vrd2JhbnNjV2dMWG91b0xLM25rSitVUEEzOVVEYWFuZklMVklqeEtldXI5TExaNnFseGdNNytDMm1uZFE3MHozd0Z5ZXV5dGhWcHdHRGZ6azJEck9xSXlYK3ViTUkyaEdpREFUdnkyY0FSbEtlR3hZb2ZWLzBiZURVbC9MQUFiMStxTWVvY3N4N09UcEhKekpGNjNRV1hiVTBWSk1CTE9nQUI5bkZURFZMTFJoMW9vR2VPVkZPcW14dUNUcThsRDNwdEVHTDRQeXVGbTNhaWZPYlkyVGlLT1licStXRDUrRW5jZ1ZEc3FvRnk0dFA0ZlpTQXg0UFpYZllJOGVrbGxoeE15bkVmQndPczA3RUlJWm5pTExJMFJ2Rm5pckswcWYrSVZRYit3SjNJMEVqZ2ZSNk81K2pFRThFT3RZMURLT3cxZm1ubFlna3BBb3NHeXViVC9VY2N6aWRvYjc2ZEpwY2J1d2Nsdys4TFhNQXhZTGNUVW9iSzNPTUNPdzZMYk8zSTlpQVRHNElhc1FOZ1ltcFdkalNkbmxQWHd5aGIvY3VKQVd5cmdiZWhVZHpjRHhvdUx5VVM0blEvMmwwcm5nS1hUVU43ZG8weGZhWFV2eHZERnB3SjROMzJaMm91RGNOWG15L0F4Z3NBcmdxRVJVWkM4RysxUXR0WVJZazFwWDZPVW9Ga3JjMlpRWTZsY2NPeUhiejN4YTlnSVhGa3NSeFU0Nm1ETWpnZ0R0R096b0xlL1NIS1NFNWJFT21rdWNlTlJDVVNLUkVoLytJbGQvQ24vTE84VWRMNWV6QWw3VWN3dE9iN3dtWFVDUk0ybGJMbW9rVlhCK2wwV3FRZHI2Q0NUT1p4SU5xQ1Yrb0czVXpHT3JrY2hrb3oyUlpseDdhSEc3RCs2c2pjWFJZa2hjckNHZk9pano4OTZhRkU1aDEraWl0clF6anlMQ2lBWGd3YnNTVUh4UUp4cTFra2dZZmU2VmgyRlFTbjkwQ3d5ZU9ZTU1vRGdNUGxURGNKTTFVbTlYMll0eGtTRkdXaTgwOEpMS2ZSZkcvbmFlOFA4djBUUEkvSHlzL1pGUHV4aS9OMjA2NjdrbXpCSkNKVC9jaXJCWGVCSXM0SlhrWjlJK21BUFAybTcycHpwQzVscDgzYUJCOTBpb1JDTUowV3RSUk41RFlHYmsxTDk0T2IrNzNSWkhhc3MwOXdkM2IyWm56ZDRIUlU4V1dQYjIyTXk1Mzk3cmxpL2tiRDBQNlRwKzNXRUxHc3hUcEFTRVZldzEwUlJIU05NZTVUWEozVUFJaDlCSms3a085UFArb1VpVWNNQTBla1grS1JaRC9qcVFIWGE4N3V1OGNOc2pkYzUxNUlGb0VvWlBFZHIrdjdGM1A5NGZsc2kxOTBPb0NjNXQ4aFZtaWJRYmlrT3VVOW5rSVpDVDIwUnBMdFIxUVBGeUNGMDE0L2FyVi9IdlNIUmJid3dJWThQaXpCSnRmOXdBaHVhVERMWGZzNnhWYVFoeElUUTQwVlhKcFJFd01GSTlCNmdZYXYrQWw2NUtUM2dDVnRRSUEyRWhhamdWcjZWNFR6ZWhpZzdNVnlGV0ZoZWlaQk1MQzZqdG9LTnFIUTUwMG9wZE9reE1VZGZwM3k2bkhvNGpCS1NwRjB5cWFtUXRSMnJ1SlZ2Z0EyaEtZZjkwemFwTENjVGduSzZDK1FFWFlCOVJ1c1pSakJ2RkhqZWdrTFpMZndLeUNiOW1CTGNkelBMUjZsVHI1aFR5NlJwRnE5WkllbFR4SG5TOGdqWWgyNXpnVWdBeGw5M1prZk0reU1RY3E0aXNhNDFWREY2Z2lpZWh2c2tKMFRRMXEyaFJVbkV0VTlNYjB1RmNCd2NWNUdIeXd1RlM1UzNBVHhrQWQvdFRwN3hnWHMxVHBSQmdrQ1dRdUR0TnQzWnFJaWxvaStjZHlxYUxwTE5XdXh3cTJUU2c2RDhLUjJqSmNxOW9VK0pYUVFub0l5eTU3VDZRUW1VR09sMzdkWHkxYk9oTEo5TVhFZ0tsdjFlMFBCUnRTbVMvSVRPTy85dFVoc3hxajBZMUtOWWNVQlh2RDd6V1VEbEQ2YkpFZlp2bjd1Nkx1clUzcTFqK2QvMDJFcFpYalg1Ym9zTUt4R3dKQmd6QUR4T2pWR3FWVUx0MlgrWE85eUlzMmxoMzlpMjhCRmFZWEVPay9mSmIzOURjT3B2WWwrWThPanlCRVhYOFFsRUZqeDV3dytuTVVOcFVQeEh4dzc0L1NjMzJ5S3BMQW4zY1hRWTJWdG9mZlk1aFQxb0tVZEdFSWZVRTNKWnNORVY4aERaUmtRNFRoR1VTQWw1SzUyRmhmT0JtaUY3Q24zRVAwNEpLSDZ6RXZ5NUpRQzhBN29sWmJ4bzJlZVdUK3M2a1FPV1l1bkJIc0V6WEx0SEJ6WWVpbFNmYlgxWXNMbms2TlQ2OFRYa0h3Sm95NXhjVlNTR21EMDRBcmd5U3luK0ZVdWMvQ3RQcGRiN2ZTeTdsS3c5YmY4cWxFWi9QTWVPTjhDZkk1TFBySUlPOFd0cFAwQ09nb2hWYkIrZGRsTjJ6TXZkZTdqYjhPSFRDbFBhT1d5T2VrTEJVTU5zQXBVSjZvdlpGRlU0ZE4vaGYrQTMxRnlseXp4d1VSeFN4Qkw5M256dGlXbWNGYUpXamtGWXR2Z2MzT1JyNXFKK1VVVUZMQUorcFgvY2MwVmR5ZGVwT2dGQXNqNUhTbUZlVW5WWHd6ZE54Rm5yeS9GMi94Y1l3ZDBNY0c3aVVVUUFqU0VFYVJNamd0NVYzUGQ0OGowb1gyYXk3Szd2bWxvcm5HTnR1a01Kb2xyUXNzVm1LMmhpczYrcHpmYXQrUEljT3VIUndpUDF6ZDVnVis5c3Z4QUJxSnF1SmlyL2RTSEY2RnJPa0dxdFlFZUlwMUhCU0YyZU9rT2pFVGVqQkhhQjFoT2tRdHJRRk1XdnhLSXo2MmNPOUQ0QXVOKyt2VFdnengxNHhFdVBvd2U1a2kvczNSVVdJWXVjWnY2S0hST3F5dzcxVldmbDVpUUwwdHZvcGQxa29obWM3YWc4QW9XL0kzdmJFQmR3OFZkKzlqaVFPaG1IRmROc2ROVGtKTTdUeVFONVl5OXVDSUdTdWNMaGd2QVpQUFhkaFdOaTZmckRBbWFTSXM3SXBGN3VML0ZzczdjRDBnWkRtMjRRUEFlS3NabGVPM2lyZ0FJNGJNbzVseGM3dm1kbkdabEFYKy91c3I4ZU94eEc2LzBzM013WDlKWjNTUnVaVm1yWk0rVksxdVBURmtKWUJTM2ZLSitoMVZnR2V0QnF3ei9SNy9FL3pRcjRvSGRRSDQvNU1Mb1FnTi9NcDIyVUQ2c0tpSWY1eU9jYko3R2wwbVRDcnhYZkZsbDBTbDZoa2hudmMrZnBaZDZJaW96RE9pV0x0bzZMZUNyZEJ4OEFVL0ZrcnV2NnovTC9TY1B2VjdxdFFaUXVMZnBwSFU0ZXZRUHRXdnRnYWxHdzFmWndCSkFzdzM4QTF1eGVaWTVYbWxuTncreklZZWFiSzgyVnpSQnRPcWZDdW5mb2x2aDFyRng5cHM3QWhZaDdFcTNuUnc4WDBtN1BhdHFhRHJHejl3b3hmL0tMcklTQnczUEtCQVk0NmJUdXUyUzFOb3hPTmV0VktUSG9XRUFtUHlxcTJmMmJOUDhoTUw0blhmU09sY0FHUFNhTVJGUzkxRWo2UFh3RWJvdkx5Z09IanlraVZTTS9SQTF2L2NwWSsyUlZhNjMxMGlvaVNvMVpNU1I5MHVGMnRmNlJCUERCTnFHUXJ1bVNzM1poS0YzZjJIVFdkNThWd1IyTjRPNHpPQXFPSkZBUXNTUWRWeXNMRzRMRG0wYkJaLzlSOVJNN1MvU21nVGJTQlJLTVF5WWY2WEl6K0Z5dWp0aEprdlpmWGUrOTd4SSswRnJ4dHFXMC9jcTRjSUpnU1NGSlZHRDFHZm0vV3l2KzhOOXRSNUhCZ1RNQ2YrMDBkM2hhYytxampXRW1ZV3lIeGs5UHFQczhiTDVYUGUrZWtJQVVsSHRPR2JJQ09UMW5tbHFvMmdmNytkakhpUHd6Q3BDUkM3TGVYa3oza1RZWHpTb3F5c1BTNEp1ekhBM2ZxaEFJRzJWTWV3VWQ2TTVKQ3ZFeTNyWkNwdXYwOXB0T2xPb3k4RHYycWg4R2pWMktpdmk2S1RGQzBwVFM3YTNCbGNEY1BjL0Y3U2RJbDR1VUxTMTNWZ2xKc1hXTlRVMExTN1dwQ2l5MG1uSkk5dy8weUdJcXZMMFBlakRmQ2RoSVkwaVM4NkxlN2I3NURrV0JuRFdFV29vUzJmZ3NWQ3J4aHk3Umx3NGV5OHBZQnlaUzAxdndibHNHRW9QdkdPcTVKSmNpRUNZajFFVHN6b1pxcjQvZm5pVFBCc3JYd29tOFlnZXFmR25QUFA3L2YxQm1RaklWcENtak1DczVBaXFxV3dhbmxKVnMvemhBWFlzVTQ4WnFyZGhCVEw2Q1ZHWURSRk9iT3J1WlJqZ1BoakVyMTFyQ2J3L2p2aEt2TG5sZUtqVFRqMXp3N29XZk4xM1BFRXpTRGwvaElhbzFrcDJDTEpBNXhKeW9rN21qZnp6cUJXMEhBNGN2d0VkUkdTUVNoM09kUG9sMDEwZlRKRFE5RzRnL2poRUxreFVJQWpWS0F6bmcySUM2dG9vTVRqSFJaaW5ZajQ5dGM4dHFqU2tlTlA4QWNZK2M4UzM3dGswV09qY1c0eitxMGxxNVE1MzJubGhCRlVKMTNVZHJaKzl3SlVoNjh1ZjBMZDZCWEF4czh6cWozaHIwWUsxZXMyc1lrQytYemszK3FISmF5TXdRNjJYdFhPOHlHaGZoUHZqeTI3clp3Y2ZEVWNmbGoxeDhwb3dSQ0IwZ3VSQ2FoL21aWVpIanRmdmxtM3ZDMUd3R0dxbFNvVGZLeVErRGpnblozeXYrc09YNEtYanBQMlpXM1l5eHJLUnV0Wmlja1ZGQXlVNGlzbkJGSHdiTmdxYmVjWmh3WUZXT2RnQVI1aVp1NXlLa3hKYkF2c0RyWk9DMXRNTDhSNGJvTGYwVnRKcVNNZTNJRUJod0pPaGl1Znp2OVd5UmJZbHNYUTdoOTJHR3gvdEkrL3BGMzN5Sm1GUHNUTk9SRW01WFZDL2dpbVJDZVlyL1hua3dWRFdSTUdRQzE2a01XN0ZSY2FPZDh5bzJQTkMyRU4vOWdWdGtZU3lNZis5ekdXTHk3OE11M3N4cVFUQzIveXpRNXFwUjdIelB5VER0cDlhRFNKK0MySU5ZZE1zcnZVdmZqWG15U0phWU02UXFySEF6UE1hcXk4dnducml2QVVzNnhtSkVDMGtoaTlubTIrdXZ1UHVaTHMyK0F0T0tjbVFxV095TjVJMVVyQWZXQmZFS2U4VldNb0lHTkNkSzN4ajNGUWVCN3Vyc0YyWElTTVBHZzdMYk5mbGRoME5ZL0F0VVBHSVduczlpS3diT1BiQnh6WTAyTk1kK3d6U2c2bWo2eXhQbVNxUUFjanFhSktyY09kamxkbVRORHdQd3YyeGtPcDlva1MrNGpXS1F5MVd1dGt5ZHJXKzlMbVlaUWcydllETUg5U2tPQkY5WW9qUTFWcW00R1JtcmJXSjVKR3hqUUhIanV1cDJuWWVKOFJITGdLRTV0bVpkdTdHbStuVEd3cXN5ZzJkeHBEaDYwYzYrdVZ1UVpQU2o1aThyNXM3aGxnU2JvdXJBdXRUWUhadnlQU0pTQ1JIQkcwK0Y5d1JUZXR3bzk5OFNhNkt0Z3A2Sk8xMnpwMmlwVEY0T3ZiNk4xaWxNNXVKbGpKVHVCL0psUFd1NXZENVdYelVaNFdEMGpNb1VMa0MzbUhtbjM0SFNqVnk5ZEI0S2JDYkhYSTJ4VUlXUDVKZ3oxV0ZQanl2NFpuQ3l0QXdDNlVmRTVZcS9ZWXBrTGxWZTVFdVovSWQ0dGh1a3d0eXUwUlVXREp0NDBtUURWNmpaUyt0Qlc2UGtwQlFuK29oYWhxSmJkT2lMUUpGUlV2RkNEVkpBM2V3TGFYN2FPS2lXMEg1WnVaMDYvVGZ3azI5QnlnL3dYTkN4Wi8xUXptK1ZacjYvN0Q4K29UUXAwem1IcTJBWlFyMzk5OCs2NldacVVsc0hIenFucG1YN2grMnJFb0IySmRNM3BzN2x1MFc1Y01TcUtiNCtsSDlidUovY1pwNWxURjRXVlJsSm5rbHloamhuaFUwWHZkbjdkeUZicnJFYWVIVU5EK2lwMWRkRm5hQzFTeGVSVDBsSmdGeWVNbGM5QkRpWGd5bUlqRUFkZTE0RVJRbVluOEZ0NUtkL29zUm5JZzRTU0E4L1hsNnM4c05HaXdiU3ExYVNLWUJOSVlNTlJhQ1ArUkJBdE5pSXpRVjlmZm4wRExrclhvY0xkZTFvZkV6eFhPa3lDU2NMVEhDajFsRWRwdHFiL0lJbGlNc2YyUnN0VHZmM3N0eXB3eWExd0h0Ny94K0RYakZJbXVHWHFNdVpaZnN1N1VOQVBoT2NoVXdod01LSm9XMGwwaHgyTS9wdVcrb3dXVmZ5cFB5OWpjRCtLcXRjekZzRzlTV2lrNVpQbkdPdzR1QTEwZ1V0NDg4YVJhQmtiSG05WHpPZ0xqVTdiT2x1YVl5UEhMeVUyTTkrV1JxVlVBSnJTNVNIVnJvMWhkbGc2ZGdmWGxGZkFlZjM1cXQxRWwvTkVGWXVGZEtWUGtzbGFPZmdDRnB3Q05yS0RHSGdyL2hMTUMwQ3JLaWZJaTc0QThpUENsdFZvd2VlWi9Ld1cxRTA2RnE0b3V6QTMyRjN2ZDM4MzAxRjJYeG93TmF6ODg5Vkl3WHY1STlBc1dDTE1TYXRNcUVDcno3dXQxUjU1K1ludjRpU2tVR0dENlpBUWZGSTVPaEZIQnZmSzNOVEk5QjlIMzhka0NiVWFTMm5oeFV3Z2huWENsb1VRSHIxVDFaWUVJWklTQkU0SE5KdFJHc014Q3VUOTlMWjl5MUcrQll4MWMyR1JHUElEL2xtWWJ5QVlEbXlCY003RUpEaWd4SlVoYUFBTm1PMFdTRFJaK3haWnQvK3h6UlNJNlU0Njg1L3kxZEF2dlNyL0xxc2ZPSS9zOXVRYk1YQXhSSFZWYVNTY1VaK1N2TXhST1pra1NTa0wyajF4WFhOaW9VUHYvVStvMjIwYkV0amlkV1Q5dFp1VG5EMnRTdk1iN0dibnJNVkNOaUJnK3JiTWJwVURYREZFampudmh6SVhKWmEvcm1VZjVEeXhid1lrNk9wclJxQ28zajFOWFBkOGpjWDVSMk5kWGtkSEhrbm9kb1N5aWlqYTdDOVRWSTdPeDd1dU9rbXQrNEo2OGlEMm1VK2oxdEZ0Z1FySWlaVjYyOFkrZmwzYlpjUDYzMWNGbFVtYUIrRnIzaHdMOWFENXZzdFhZS3c2NmFMbEFBZlVtM2xKeW01TWVxc0ZKV1pOR1Q3RldaczFOMFpTRDRJQWxDdmZHbzZ6QzZ3c3A1M3FiM1lSRUJNK3hzUXVIZ1d0OWY1d1JyUXcrcnF5MFVyM0E5TWVHMUlsNkZOallWK3VUNWt3aENSalYrc3U4UWZCS0I2eVVuS0p5czdMNmtZYjgrOUN2ZHUzazJuSm5lN1BVcnY2ZHhlVlNON0JOUUpEY2d5Zis0QWo3azEzZE54SlY1aWUrZTZlQklhR2hmSDF2M0dRdmZxODZWYXp3NmVMV1pkdCtnZUMxSU1teVJQT2luN2F2aWUzbWVtdSszTjhXZHlQVlg0SkJ3YS9CMG5lWFZEcUxGeGw2Z21BWnVnSlVXTC91RDZCWHFDWGVTZHpKOHA2ejRkb2lDdGxNRjBIZjJiM1hWdm9KQ2tJZUM2dWVCVlRPaWk2MlVCNHd0a00yN0NMZVFNeHNDZTVlcjFjdU1RQTRHQktmeU84RkZsV1RrZnFOenMvT1gxT2ZQUFJVclB3VWF2dVdNeDRDV3RBZEoyYTIyNE5EUlQvSndWWFE0SEg5azVqR0grazFUNDFtaEFQVnlLK1hSYXE3Y3l1eDdpTjQrMmV0VlpwZ0FCMlFNR1JET0k5K3p1MHpHRmsrZDZ0Rk5neW5xM1E3VlI3RjA2MUJuUFY3aVgwSGFzekRxa2ZNTkEzNnA0a2xxUHlsbjhaczdqSXgzakJrRlRtZmpEdFBETkt3KzU4R3J2ZWV3T0w0V0l2U1dFc0t0L2RJZ2tPSGhEVGUzeEtlZmI4RFVqUGdHRnBFOGxsVWZUUFpDNXFpaUxoT0VuRForT282RU5OZXZSUmE1ZzhjcE8rZXNlTENjNWNZa0JwV0UxSWRBeTBXdEpDWU9yT2gzYVhTd1JHSjNQOHRSeFlaV0FZUiszM1pGNkpyUC9RT0I5VFVBV1l2bW54b2NrdHNKR3lwMFlJWnZIYjlXalhOcklkdHBOY3pwUEpGVEV2eUtObmFJY3pldCtoMWQ4c01Ub2VXRDc4cGxCZ0xueEdVYTIzSHA5YmlDK2w0WGw1YXVXcjVQNUgxalN2MVdyaFlwa3BvU2NSRUQ5SzZaSlplVUtZSHRIODBUbWZWc0VRaHlzS21uUGVCZFZ1dmVpOHQrcDZwdzZJcS9hVWVZb2IzN2svUU1Oa1VVQ2pyQ3JpbXZnUWxYVDNZMnkyWkNnYk5EN0l3MHpYUklKdW9IdnpwT2J5akM5UVZkWUFWNnZVTUxybytYZERySHZPTy9LcmQ0MUN6eUVBVkNjUmU4cjNmY1NINFdSWDRjWmVWeUUvUTRVV2RyTU1IdzVDTWhsVXNudDlZWWVoWXN1alVmRkdMOWJ2SjZxL3pkQ1NXbGpna0M3NmpJMmY1WmpFbTU2dG56MnM3dzkvZXdwaHZQc0FUWVZhSUUzODlValFBZjFZajdFWE5FOTNVNDcwNlFET0o1dlVMZXRTckFtNlkycjI1NG8vR1BxdDhhc2tab1NRdUVIU2Q4OGxwWEZZWExrMVJTbXJRWFkzTktDRzFEUk0wd0MzaVpKTExERW84MzgxM0pUNnJXbkMzTUd2Z0JtbDJLejZUU3dkMXY0cUF2SWZXVEhCV2dtaVdyWEJjOGQ4UElZd3p5a2R0Q3pjMUdFUTdhWFNEbmZ4cFdERXZNY1hjb2lPVG5FcjFHNi9idkVhVVdoclByekVFZUdjTllxY1ZiaHl4L1UxRnBVVnpSSVl5QzI3MnRocW1ieDZnQ2lHQWxmNmJoQkdrRnAyOERDbXlIQWQ2a1BDZWNSRWVqTXRIT3pORHB0VThNWDFLZHg5amZKTDJjWHR1eEZoZ0Z1UmNHT0Z0TjJabTNqKzYyaDRLQ1RDMjRmSUlFRGdDZDNzRGd5a29FbTl6SVByU1V5ajlCMU56SGMzMkQwV3A1aEsxMFhHSjRiZGNKWEpSREJHeFQzcFBtNW1aWjk4RkFWNmI1MmZSYWlSQmk3cjhUbng5WEdLTFl1aUptTmRJNkw0VkFNRjVoMTZZZ1R0Zlc2eTJhM1JhV3VST1dmeHFxcEVCZDR4bXIwN2xyWjZQd0lyTXd0T0tXMVFxQ1VyVUJqb3UxMjE5OVZ1L0RzYzg5am9GRVUwZ1JENE1PRDNucmh6VHhUdWFtU3dQWS9hdUtvWTJJVzJzOUt5SlZkNXFHMmppN3VRZkt5TkNIWTBoV1RTWit5K09LV0tLdFYvTGlZSHJlcXJySDg0Ri9PSTNnakZ5eGMrMzVOVmNpeVNBUzFDa24rYnNIWVI2YzZxTVBiR3JxYXY0SXNYM21kZGJ5RFBDUi9oeUdMbzB3VHBIbUFVdVhmVXJ2ME05SDZyRXJBdHkwL0VlQXVKNElRVmpWRFlHTDBaMWR4cHExb2hjWU1iODdEdi9sZjR0ZTIyRnA2NnRvM2RsTGJIY2N0M1VPZVlubGhZYTNLWW11WVVuaGw3VE9RMzgzaklGd3RRWHpXejJuTmJvN3FsZ05PZlprYUcyN0FnY2tIT3Qvck9hOFJMdlpaSWJwb2RuTXZJc2RQcnArMDR3RG1zQXE1YXR0ai9JYjc3TkNuaTNyNmtZM0kzVGhPQ0pXSFBYS1NlemMyZ0JwbjE0a0QzUTRRZlBCOHVpbEFVRWF3U0htR0JvN2JUb2s1WXVxSmhJLzk4ZHRqSW9hb3pRVjNFNmhXdFJCdHdqZGN2RlkwRWFlVXBSZThwdWlER002QjY0bFZSUHE2Q21NeDdaa1g3M25GM1NuTFkxN05XMmpoUUNpdENDanhTc3l1SnRIaS9SMllCVzBNME5QTWx0dzk2aEdaOWRiYXNzenhZWDNDM0k3dlFjNWwzNTNuVDVRdUV3TGJQVEpkeDhvcmdlamY0MVExVzFUSjVyRzhvdEJKZzRqcmEzL1ZsWTN1anJwODVJOThpVWkxQWxZbXY5TEVSRjRrNXNFYk5aaE5uSitVajBPV1lrYWk5eE9lTUlvUk5FOG5pN3lDWHVzcUxzeEE4LzFiSi83NE50Q2RoQnhMWTdVeWkvTWRUU0gwdmZ4UEVaK1FQU3BpQ0hWcE1VTUY5M2dhYm83azU1TkkwN1BOaGlqcmtmVTNzcmc0c2FLZk1QWkFobGdVdWErMTNxdXpBZXhIVmlMTXFJZHNqSTQ3ckRZSElXd2tVUEJJV2Rab3VhQlV5VGx5V2IxZEZBWEFLa1kvMDloYXpESFZkRHVlbStWVnNRQnVyMW5MUWpGejBlK292bTlEallFdjhXY2VMYVhNRFpTMGRWRTIzOEE0djUyazJPVTluaWcvZWp6UUNaNFZPZTRhck8xaGxsS2Z6NHNjY1Z5NjhjUmh5MzlkRWxEZXNwYUhQZndlY2VXWDVKa1QvTko5d2ZWd1praWRFdWhEaGh5NTREMTV3aW1jTGFzaDJhRHVweUVqQnliZk5EOWN1VGtZeGZ6ZmIxbmljZTRLS1Q4ZVJ0VXppVFFzRjJYM3ZSeTEveU9HM2RvcEwvckRleFNYMEhQYUNXS2pVOUpKUXM0dnBsOUJ1Kzg0d3N1VkFTYzlOT3p0OEU5L3JlS0RreVVjd2dYTnNmdTVSbmplZk5KaHY0ckVRMldyNElHdWtyMUxLU3VyR2t0eSs3MVNnNmtsdUJmalp0R2Eva2cxekxNc3VaR093Nlk5V3krUlVDTmRlYTluVVJMbERBanhpTTZIa2h0UHVDOEJRQ3ErNjBHYmJrdGpCcnFpbkN2RUpveDJOSkVHY3I5OXdyNnpuWnRlUGVRZFZtTTNYeHY0ZWY3WGR5dkRNKzBxSC9NTzlIUmJsVzFOTHJRM0c3NHhFVzBuRnFRNThGY1U3VE1KYkVRNjdaZ1dac0lRek8zb3NFYkovc2hjR3hCc3F2bXVCWUsvM3RxVWt3NkNTUDVrS2JtMHFpT1IzYU1uR0ZoK244dGc4bTNYQ0N0bWd5WndnRDhhSVpNY3N5b1YzUi9hb2pDMi92eXphdXBKVUduNWZrdG9HcWFUbEtGNjd1OFZQd2xZb09DMkx0Nm1mcnJJL3k0NG1uKzdtTXB2YWdITTllbEdSUGJTbGtMbnF1eXh4UzIvdHA0M3cza2xwNlBYTUlhVGJWbm5COE9UT1l6cjBoQTFlSUlqZzJ5Tk5rQmplSk1ySHc4dUNUemZGU2tNTmY4WHJtTU9XeWVpSFN6T0VGRWxCSlZ4ZG5UVDc2ZzJyMU40VS90cU9LZ3NTUklDSjArSVBLOVJYZ1JxSFkzdnpnUU5DYmtjaUtITzh1UjhVWW1RNmgwVTNsYkMxL1Q2czJ0UlZhc2EveWdyU1lHdGlRNnJQREFFVEdZeEZ3WWtIUFdKZXhUcktVVEY2d0s4ZEtwcTQrQm9MakpnWGFUMDNIMnMvbHJ2TmdGcGc1MzJ1VSswZExyL1VKaWhrZUlYVHcvQjVUdEN0ZnhGZHdYcklTelNsd3dtTS94MnN4b01TS0JCTjFZenhHR1A3b2M0akYwdUpMNVlVWWM5NGJPMDdhK3JLWW0zclpIcGFxd3dqV3F3MTNpekhZbHExa0poS1dhQzRSbVRBM0U2bHAycW80WEUxNlo1aUhaRWFiSWpiL2FhWFdUQXk1TkNRVVdRSS94ejRFSC9WbWttSVg2QlNmbUpEaE1OMDRIYnJRMzhrcFVrMVBncWZTMmpJNUpMczhKb1BzUXlTcGlqdGZ1K3g5S3UyNW5JS2N2ZlN5eENVdklHM3F6WkRKanA0TzBrNXFiM0N6RFVPaGMzcVVpVXhiY3hjU0dvemFyejNVQUJ0b3hRcXZ4OC9IRVQ0cWFERE54UWRuMXdHa0Fnck5INWtaZTlOa1JxbzNRaGVKVFY0N2lPRWQ0TDdLQmN4aldXTDJYT2YwOVBIRGJXdWw4MDdkSlpTOGVUeFIvc3ZSSWZxcG0zOUJ6QVkwNVdja3VuRFJYUUIzaStSVHVnMTVoYXhzalNwOFoxcHRlWkc4VjY5eUtQTnVROFplYXVjRllBL2ZzTUxwZ2ZBNUxWcEV6QnZCbzZRUkJweWdZUFpHWGN5M2NuMGRpVjRXcmlZNGw4UXlSUFR3YlhwMFVKZXpnOGFiRkU2NmtTbXhyK2ZHRDVSQlgwY0dKYXRuN0Q1cGIvVm9PSXJyTjBWRzE2R3lzdHBzSU5pWW0wV1dCY09NMW43aUE2c3NLWkRQcEJHUXNBenZXVEgwYWtsOVpXV28vQUF0L2xHekF2OWpoQlF3T0hYdG5FR3VNbDFKTTJ0UUVkMVpYRHRjVFhSUE9xS244RVVBM0FmbjJXUXNPbHZDcGpaUkkvK3RhaEg3TW9WSHN0REhtU3FoRERoMitFRXNHQm10NmNaWFluMjUyVGxyZXRJL1JuWVlRNURyTFYyQ0FkOHF2STVLcGMxU3Y1cXFEYWFqOU8wWnJvOGtnR3FzZnhqSk5KUDZzRHlPZnZGQ2hCWmZOaW9DTzJWZmxBVTNoZHNyN05ITWJrQ3d1T2JTQTlqUG1GYTFTOWlRaXlKOVNDS3lua2lIVkFGRFlNaW50TjVEKytlaUtEN3lTbU91ZU9iKzZBQUJPdExheDVHSk1BcEkxUFJCTjVFcUN2OUdLUHZscXc0TWoxaEZIWUJZcjdHY1ZVZGhWa0wrUk9XcFpZYlhIdm4vWkhjMUhnRHk2QmxPQU1sSk9xMEl5bmQxY0FNN0g0clg5Rit4Lys3TzVhc2JjUGVSdll0Z200VUxCZGsyMjBVd09vVWYyYmsraVh1WlNxajNMS2tpUDc2SGh5RmhRNFNRTjlmaE9ScGdFUkkrMzVnTHU1eGtLSjFXOG4xb1AyNnZWdExja0VsVzR3ZTFxTFZVTzBCaWUyM0cvWGlyb0d3a2l0RDJ4cEhYUWRtWS9HdzQrZGNpM3JpSzhaR0M0Y2pwQ1JZUVIzZHkvSDcxYjMrU3llUFl6cEUvcDI5aGZKbjcvd3psc2VxMWc0ckZlMGp2REVSRjRsU1lOR29KeDAxbURRRStGc09FS2x2MXlZbTdxdzU1R0NZTUV1STZmZmJCUzNvLzRrN3o3cHlSVjU5M0MrVTAxVzdoa3FVMkJaUXlUM1JuWGM2NXd2d1hMSHBFRTU3VVJMcTByZEE0aFIyUzczVHBNcFpTbE1aTC9CaUYxMFYyMXZDaVd0TmJFOG13Y09KNlZHczdEbnZXK1ZSYnk5bTlXdTJ0QXAxRTVXWi8zOHQzYWpNQzRIVE55RkRGWjd1blVYek9WZEJRblZGUWxldzJhT0hCL2lad2pLdmtmc05iTUFNOHFLd3NwQkM5bUZSNmJFNEVGMzd4RWdYTkNyMnprT2t6WFVxU2x6a1JtV3FKcW5UU0JyQTNMaGhkVkpuWEZhK2RROUVUb0xRNmdZbnM5MzgySUlCaUdDZUl0Um9PL2gveTFZN1QzL1RXck9BbnlSY3ZuT01tOVpqVHI1bkZPYWs4R1BiU1MzanNrMDlualN2SFM4Q2NJNHcxbnRkdmg2cm5ITmZsK3Nka1VNQS9DQUZscmdEWEhZZWtUZGV4RFZkcmgzajN6SGhuWk84R0dSRnd3TFVEWjFrYjZzQWwxWnBvUzN5NGxmbTlLM0VLcE5tRDJBZHhqMHAvUWtwaGozY0RpRXZSRjdHZWs5UXBjbXZ1bDBLS2hoSEZ6YTNyNFQrY0s3M3ZrakVHYkFUMmlJcVRJV09PUGtSNmdMTzJrTWpWTjdOR3hubXo1aXdRNXgrbmxiQnNvSnFlTlU2UFh6NEJjMXY2Z1BrZkNxemNVZ1A0WkNuMDlsL3pLNXNybmh2ZWIrcm05b09najZqUXZncGczUmxXTlk3UEI5NUFIOTRpbHZyZ25FMWpFeXdmUEFCcVMwK2Z6N1JWcUJsYWJRSm1hUy9NWndrd2pJOUxhOWpSWGo1QlNmVXRVWkhzbXp1MVFPbjhBWmlqVGlVQm92TDcvajRNNmNXY0Z2QkNBV001Q2hybEkycmlqV3VOSUdPc1JuTldvZ3NRNEgvcGtwTG9QM0ZHY2UrSFlTV2hvVWRBekJzRUE2MVA4ZUtPSXlqdTdDL1AwM1p1Q2lXdndDSW1xanMwQXRjelJzV1dnalBmbXNWQTNJemdzaUNHeG9naWpoRXgxeTJpcXM2NitCVzczSGJuaVhGK0tyWi81ZVdROWpZb2RMMXZRQ0RVR0NJU09lZDNIQXNBMlNaYU42eTdVN2k5RC9YNllNRWE2UHdENnpjazdVZCt4SXI0REljeDJkQUpnSTU4d3hxQk90Slk4MnVyV0lnTzQ2cWRyZFFmQVBVbVFtdmUwdERIVFhQaEpUMkMxQllyZExlblJFUFllcDRudXBWUXVqNjZxTkRQaSt6cTZxdnNKanFOcThwZlVpMkVCNG40N050SEpsRDR6bVdyMUpSYmUxRkoxZnVlTmV1aTZRSjRrd1ZBd3NBZGw5UmFQek45eWszY2hudWtiT2RUWm05ZXlxQ0JSUWJJM05LeitiemJrRHNvcVFydDhMSHRTSHN2MmVaQVhIUVhMbUdXWU93MWlaN2xxZDk1MnBhTVFVTXc5YWpSNmhYc3VPZ0U5U1F1VW53Wk13blUvWnA0RmFpNVc2YnRzdFN3bU9HRTJtLzFBSjdyZkZjWDdZTk10ZHRNc1RWeGhSQ3BxekVKZ2tkZE1zSytzdElvTjJHTEh5b3RJTnRYWUwydks1YVQxSzQyN0pxNHY2bXVZU1lmenJ5NEtzaUxTOEx3UmpJRDU3LzEzcTZkMEZmSXlZaWdGMkFPbEIwNStkWHZ1MmROQk1ydnNTZG1WbkdOMjZMaGdHcUI4ZDJwb2hVcnQ3eGI1YTlxSDZGZUtydlNYZ1ZtNmlDakRPdDROVXNyQWwxT2JqVGgzNlQ0alIramJOWFVvdEsxd29zb2JyRTlLeXJhVEw0QVFYZDExT3p6c3E3dTh4WTBaem15MnpERWJnNjgvSUgyZm1ObVNPTmpGWTlHVEU4bVRMK3lKRCs5aTJxbnpBU20zeUsrN3FkY1JOd3g4OU9tNmc4UGpDaW9HcStYM1p1ZU9XYkozL0M5WVA1Y1ZJQkZFeUcwQWV1RW5DRFUyQksyTmJhK21XaVFOcWxJQzN3U1l2N3VzOEFMb1p6bDdHUVI3bkxyamlVTmxQcndGTmJLSTgyWFI5R214WjdYQ25VcWhTSzkwb0FVb3RaM3RQcWxOQ1Y3dTA2eFNYdTdBL2F5WmsxbW5nN1JoUTR5dG5BamQrQmx3Vy9nU1ZxVkJJN2plZ2tlaEw2M1h4d2JpdmN6NEFZSmtWVlRNOVFnZkRYZS9hcDFNNm9jZ0VUdjBKd01RenZ4K25Pd3pmVUNINTdxdDBsR1ErdmU0MzBUN0V2S0JKZ0RiditmQ2JRdE9wQjhUMzkxUHl0TEhYbHlWcjZ0b0JGUk5aK25USXltaWxody9mekJ6Qmt5ZFBXaTZmdWVENzV1ZzdDb0ZocWRML1diZmJHTStJQzc3bTZORmNMUnQ0c1VSSUtwTkZpZlJYRmcydjB5dmtTRXU1RG1DVWIzUEsyVWsvZk1FdFdXUllmU2tXaG05SXJNODdmWFZscjF3SjZ1T3VGZ1U5ZnZSekovMDNIZEFJSm9QNTRCZkVoQUg4UXI3anNyOVl2VkVLRE5BbXNYL3grUTZQVHRGS1RNUnFMeXdxY2dIMEkrNHpKalhEZ01HQkxjWG8zeHNOYjgxRGIvcmNvRjN3OGR3UmlqbGF3ZVovVDBKMGRUQ3NZUXZqM2p3OS9mRkJURmxha0RUbWwvNzlPSW5lTURUSitWWFpRUThDczU5R2hNR25uVnRIMjZqYU0rQlF5M0NHVGFQcnhDTG1IZHpxNkhkblEwQkRpcmdPazlHaDByclg3aHJ2NkxtcGFNTUpjb0xYR1JHQk1WT3FjajhocjlZekw4bnVmVDAwamNuT0w1RGwrWTNueXI1UEszYTJkaS80RUN0bjRYbFJFTDBiQjlIK0RuL3VCM25zT204YmorUmc0b0preEtRWHpEWDlEWWxaSzRpOTBlNGwyT28vZGhrclp0NStyRlFheTRVZzU5NmZaREZ2UnRHZkV3Sm5VYlNrTll2bDd0RzM0cUt3d3FicEZSdmdkZEhZN0JwN0xxOWR3SXVjczEyZDBjUCtWNE0yQW1ONVJ5VXcrVDcxODhwNHE0QUlTZHVWa3Z6REI5dUVNTEJlTGJHbGFHQ3d3NEQwMjYxcm9hL2t6d0laTEpUM1pJYzRHNEErUVVmMmw0cVRXY1I2NlBQbEM0MFhwS0tHZllpMHl4Y2lUaEFKbHJZbmM5b1picFEvNXhUb3hmOTJwK0xaU2hKQng0ZE9pMnQ1ZnNxQ1lPQnQzTVd0RmhLcG9sL2tUR2hZR0VHY0Q3R2wwRTl4WUdGTWt4RWF4d0VpbVFrOVZYcjVnT2tGMk9adWgwTW4yVHU4NTZvL1dYeUNjVUlZWEliOHVHY2N0Tkl0ZWVvSFczRGd6MG5xbUNCbEIwUC9VSWYzUlRxbTNHTlFoVFRZekV5NXVWQVlyTmJYTHoxNVUrUGZ0cTJYb3RaOHR3dUxpUVQ1aUE0UEhYeTZBQnY2R2VhMlRKM2pVSTd5Nmk5VWhobUNocWhieVdla0RldVB3OXcxRDhxaGJNZVRCRDM4QTBSaWxoelVlcXI5QkRZTytvU3VkeUFxTUhEUWg3UmdoQ1Azd2N5SFpVWXY2V092MS81Y0h5WC9YY2RIWlpLQkxrUHBBODYyWDJ0aGJ5c0NlWWhhZlc1VEZoSUIwRXc0MTlnUXpzVHk2VGdlVSt5cHg1ek9iNlNzK0xRUlNwNWEvMXpTQkhvSHpuWWlZbVJhcVljamtCWU90ejdwQ0xNUzBJSEUvdDJGVEtyVm5mU3JPRmtBM2IxeEYveW5sZDZPUldxUUlWK2Uxam9OQWpDVDA5RHlMSzJTaDBlb2ZhTzhiQ3ZjcDZIUGhqRVV6KzBIS1AzS3BsT0FQcS9RdDFNNlZ0TVpzNWFrWkFxMFZiWEdsaFp2dVR2VzFaM1NGWlp0MWtPMnpaNnhHeUxZblNMMUpPdE1KR05tYlczZDRwWUxCZlFjcXQ3R25aUmNSU0F0aTc3aDVQRGs4ejlzV0JEVWFISUdCZmJQR3VndHZtZFF2dVRHZGx0OVdIVkZOVFgrdU1PRks2VGlhNTl4TDRWYUFueHdKdXNJcG9ybGd1WWRMelBRZjY1WUoyOUdEaDkwSHZyb3hRaXpSSjMyallqZUkvdStLaWNxaHZKcUdyQkN2YXlFZzBkWTl3WTh4RzlqT3dOSk5TYm9aeXBDcEpWVUEyYjRKc2tTRVg1dEJlRTFta3dmaUg4dzBEZGU5OEFUQUtPRk9qWWhEUnVzSWtFR1BrNFBYNnFONmpvZy9jWEI2NnBGbDdsd0pCZ0FIcU95SDdPb0tvbGJFYVJmNE5qblRKZ21ZTDhZTmczRXZjMTdiTWpGUnV1aTgzSjJkK2F1QVRqZGo5OGFNeFFyYmgrWS92dno3NkVwdURRWmw1K2NvN1NKY21BeUFJSTBQeG85R2pEWjdDN0lpbVZWL2kwVkVnSVVwMjhuUlBEM1BmZisyYit0VmU1akRYU3dXQ2FMS0NXV3JFTGUzQUhROHQ5dklqZEpqMTU4LzE4b0tvZkZObFMyWFZ5Qm1aN3RtcXZSemVSM25xSTFtUkZrS0ZLSXdvelIrSmpwWWpKVnM0Q29Oa045Tmk5ckF2UjRUcjNaVFk3aVIrNVMrQ3g3NFNhWEI2RElmdkV6akJLamYwOW1jOE9qbmU0ZWtzaUVodTVmZmNNWjZDdjQyUDZ6eTBZM0lTQ0xicWNzRW1WZmtUMUxMMnhmTjFUV0tER21SMEJ5UUpNdkVNVXpmK0EzbXNtdjNSalBXR21Xbm9raytLalNQenN3Z1pUK3BmYy96eGJnSko3dFJ1WjBRelp6WmtMRWhyaEEwZXErd1gzVHY3VmJXWXUrcWNRbnd3d1BhRGV0TnQxTFZLeE42L1B6VU94dVlpYzFkSHNaU1p5N3IzOG1pWWVIV1lpUDlnU1ZTTkp4MXVYcUkybnBqMFAxQWdFZkJiUWcvbTJvdFdQV2lnU0I2WlFrSVdPaFVnNGZoQk55dVd2NU0yOHAreHp6VGViemw4a0U4QXhCRHpLeXYwaldHSStiWExQclVvSVc0VUNRWkQ5N3hwaHdUdktpMHo2bEp2amRTemxOd3NjZVJlbzdFSWJGcTBxNTljTWlxWE9pcXNWQml4QnNVdWU5ZmFpZE1oRENvdGdQcG9xYU4rTnZicXY4UkhKREpmcFErS2w1SWpZcDJuSDZyUHhMY2l1VWx1bEtxWjBZaExyTEVoMHJETWNnNnkwQVp6TXRQbFZjOVFZcE1keVhlOHRtcnFJRThpT2ZjV2Z1UzQ2ZWVwbXFjVGNySG02b3RsMktaZVc4ak80czRTZjM3LzJ4d0pITGo1eWFnSjREUGJNQVNacmFWMzk0aFIwVTJPY2grVGN6QlEwa1dqU3h3UXQxSmY1andiL3JkRDVqWUwycE8wR0JOV0RYbnV0TjdhcnQ5TGtxU3FtRFA0Nm9weHJISzZha081YVQyVUlmeXkxWjgxZE95K1J0c0RCTFdXejd5eFJheWZxcnd0c01PVk1hQmduWjgrVjVGYzROQVZVYUcxYXVzRngrZDIrNFBvN1hLR3V5QVlUWHpIVXVxODB1T1JKTGpSZkdzUWJWeXVXdlpFZUVuT1Mya0VnbTZ3NXIwOUViYmI2djRGUFJxK3RWWTJkN0t6ejFoa0ZIbW1heGNNMXRteXVNaEZBSm43VnYxVEJGMlRHVmh5dkI2elozKzdIT3N5V1lwZUM4WllTT1pGRC9EWFZIOTJaVWEyR015WHpHUU5NNnZkdlBLN1dNSTBWMlJiaTVPUDZCcWx4SldsejZ4K3dza1JDTVFSUzJrb3RjWWZqRnZOQXp3ODFuL0FaQW9FK3Z1ZVpqd2JiZk13R1RiL3dkbFNPOEZEQVRObXFkdlNLUWtjVVZiakhuQW1IVFBmOS9UazZRbWluOGY4QkEvMlpRWXdNVEJuQTZtOG9FclNDMERRYzJPMmtuODV1T0ovTkNXWXppcVVFNE9PNWtURkNTenVsNGlaSXZnYU5IeW4rbmg2MWNNbCtIT2lMQUp5VWozVDh1em9RWUNzUTA5YWJoeFREZkxqRGFCQlNCMkNVNnljM0FUY2dONWEyRmpBRWdtUEppRmVCRlhwTmxTYkczSHVoQktVOEx4VDBBUFBlOWN4VFUwMEhDNmpPcm8vVGg1S3l0SUFpTVF5dWFFa1prOTRWeTcwWjMzK21oYzVGVzRvTjhSOENJQm9ZYnI5RlZuS1pldlVvaVAzRmYrSlV2V2VRMXA5ZFBRYXNjTkI5Q1lrcXhKdlFpb0xXZDkzUW1hR2cvRCtyYmxaanZUdHlPOW5wYkZQOWVpTEFybFgzSUZJOVB0aHp3bklZc0E2aHVjT3oyOG4vTmJ5Q0RKdjFwRks2eHQ5eFpaUDZKZ0tQL0Y4NUJSZlFyY2xpY3hUVmRMSE9hb2xJY1VBT2NRSjB2WHA5YWlOUEc2RmJ2a2tLakdHMUQ4SlE5ZmZoQnRDRzZEVlRReUR2dExVVWhpSFdIandMNDVOak5tTkVxTlFLM0RyV0FZb3RvNUdTMEtCalN4a3JCQXdpd2RYUDExZGU2WU9EWVZWWllQc3ExV0VlSVBHWlJpbFo0OHlHUkZQRkNBN1I1ekZUcjU3TlZZWGVMK21NWFBFb2dVakl0ZlNNTUxlNjczblpBWk91WTl4ak1ZeFhpZXY4di9uQ3NGVjVraC91dkhIR1FmRjEyL2hheXgvcmdNL0pTTHZmVS9FVENvUjZzb29OYjFOanFCZFd6eXpPWTFyQzZGaHh4bENWR2diaU9WK2J3Myt1MExEdkEyNzMzc3lDb21PcFVUZ3JNMjBYVFNJNWhHWDlHdUpER2thdnpqNkd3UVVzQXlJY0tRTHJ1WHRYSzR4VW5BSEQvTHU0RDl1N21CV2NBNjV0UmhXeGE1M1lKZ2ZxbklCalFWWjRqVkgvWDRNYXp3bmQzQWJXRnVQa1B3dW1nbFVaK2dMNFEyR1pHOGNmVEtBZFF6V0pIMkM3SGNXOHErUWFHSzIzeVA3QnRTQVkrWWwxd3lYYmVRYW1IR3dKK1k2Tll4SDVVc1ZnMW9NSXppK0RVcFpHNU5LK1pPZ296RGFJU0NaVHg5SWFlTjdoTERqT0ozUGFhb0dhQnlIcGhQc0R0QjBGR05TQTZOc2p3THBoemhGOXU3eW01d0UzOEwzYS9ZcXE4NHNyZkFuYUx0MGFEeWIyQ3l4aHZab0pXMmpUbVp4ZVJsam9jMExQdWdJNjBlKy9EcHBSK1Nvc1pVMXUvalpmVGpzRHM2NXprQ0F1K1NuL0VSa3ZTYjFvbXYxRnA4RTBsUEkrWG5KL2htTytCU0ZMaHJQUjh2UDBDb3AwRGJhU3JCKyt1ekJOSjE2VmdVRnRkZXZKNmoxTlA1Y0o1a2hJdE5RR3E1SldHemtDUENwSjd1b25VcmdXenVKQjBzS3F2S3hQSmM2VFg4RFpDU2l0M0pwblptOUZmZFYwRUFOaVc2QUJKOTM2MkU1ZGRKZjN5K0UzaTJTZFIzQWliWnJreDJrVW9ZU21pcXdWTERaS2ZvdTJaaktuNE91K3pqaUY4Z0R1Wk55L2NwQUhIRGpoL1UzUGk4TmlWUm95cDY0UXFZOXh4RmNOMEN0NS9Sb0NpMXBrR2JlZVZrSnVsdm9ObUxXT0thbENzRktEUGJrMkRYKzFIODFFZ0JLVk1UQ2pzRHBHRmpiRXREWng1eE9QVEhJaGFHazY4aXFKZlV3Y3BMbXhuVzhrTGUzdjhEL0Y5dm1aNkQyTmdSSkwrMjZUSEdTNndCbTkrdmVwdHdlOEFhYkN3dUUraHFYSXJKNVRrTXU2MHVrb1FWNXZmSDQzaHZnS0RIQmljY2ZkVm1rYzhpa3hFajErTkxLZXVWME1uUUpQdGd5QmFUem1YQUNFc2ZoSTJEUnp4ZFJJWE5SQnNTYzA2OTZ1V1p4c1I5VU5Wb1daV3BBSFhLZmtXRnNPNXlubnlNbUNRWENHL3ROUXJhUXQ4Tk9VU29RYktwZ3paR0c0cktnQ0xCbzhXMXBkSnBIeWphclZmWDU4eVY3S1orVmxLZUloYXJLdit5YkJYZ0FHNHJ3eGxuYkQ1aVdadkg2QWFTa3dhakZsU2NhMmdiSnFSaExnV2RzNU1ySEF2eFhjM3ZyeWovaEhOVEVjUmIzWDdEMWc3bXVqb2R2UXFFTThrQisvNk95ZXU4MmFFWlU2UVF4MFNNcDZMTDlDU0NTdCtGRXhvT1ptTHgvYlh6WjZ1YWpPU1VjMGFVV1pSd2tlTzZmVTU0Q0FLRTdTQXhYaXJzUHd4cTAzeDdjckRyd0M4R0tBaXJOaGZ5dkkxTHBHRWthakRCOE1QL3BxdWoxQThFT1hoc0NjK3BiTDFzamNHUGxtcUdTaFlNZ1pma1FZTmJmTWVDOEJRbTRrUE41VVpJQ1UxN2xJamhvQ0VxNnNSQnV4OTBQNFZDeTZ2V0lqVjBjR0tLZ2lOMVEyeTVhSlZtTWRuR3NQek5rVXQ5VFB1ZDlDc3hiN0UrcmpMVjNFY1NOeDI1RWRIU3U4M0t3cEU5cC8yM3lCQkFSUlNtckxSUUNGdSs2Y0tOdWNQZUpySVV3TU02V0p3eWpTSWxpaU5RTFRLMmxqOE8xRzlrZUJ0TTdtdjZ5NEVyeDk2NUpRQzZFVmdrUnFjWThYNm9CTHNQQmdIZnBUaG5nTUY2SzFIdDRiMVRXNnJEUnhDem9PQjNlY0R3MTBpSTlmMmR4Q2o4cm1uWEhmVzVvVE00U2FNNWt6c1FXbFhzaTlEWXZGaDRrYkhUR1ozdkNiRjVGVTdOT3dVUitaWjlZWWxtdmtsTzdYV21iWUdoSXF0MVlUSGdEa0J0dExxZDE2QTRpQVI1Z3ZWN29ZRmVGY1dUSU55ajU2cFdJbGFSbVNIdmdhQUZ1ZnVyekhmcDkzV2VoMm1meEtGTWgrRExkRUdwUGVGMlhZSVVvUjBWVlgwQWF5Rm9TaCs1b2lQQ29NZFh5cjNaWStDSTNqeGhTMmNWaU5GdUV1ZE9MY2RSMWtaMGZsUDFzZXp4ZmJoMmFkbWpBMDVlNm92ZndobmZIOXEzRWZESThMdjFGbE9BeitZZFZwUGFlNVdZUUZUL2YwYlMzR0N1WkdBZ1ByaXcyK3hwYlNVTjRSRVdBUmtpZ1YrRmZSQkovZWlLVEVTdm41d2RNRUt6cWdlR1paUzl4OVM3OW9YUkhBblRLQUpYN1VXZ0tteUdhS1ZpTTZKRFFISVl1RGMrUk5rZjh5c3pNdXJnN1VPSlNSSlZFYTJ6cTh2SHdrb0tIcWhLSGZCUU45SFNWbFBmRDlha1RQa0RLNlRyK0wxQkJBS1E4akRTNC9waXZBVCs5WFpCd1lSa2RLTEFzcTRwaDRKY0tkZis4aHZ0RERRWGt6MmlFRHhZTWR1V3JiK0Q2OUJCMEJoYng4MW5iR29IajBVQnpQSVRQRVJpR0VQU296eXJKS0xweTk0VS8xR3dXWjBzVVVxWjRYV3I2cG5WUFhVNXRYRWpFQVRNTk9PUmtCOEJrMzJUSGFtUlNoUWxrOGNPQTltTkNrOFhzVzdPcWo3V3hQYXdSTDhNVnk4WkVWU2FuMGRPL05IeGZ6WjNxM21HK1JiN2cvekUxRVpTSFpBRjlvQTN3MmtGbnpXQ1BXVGY4N2RGN29mZVA4MnozUUQyQjdSbjZRcmo4a3FTcTJVK1BYWFpHbWdscitjSjBsY3psM0t2QWcrYThETVNDMkhSRzg2eGpqYTRyOTUva29zZzZLMXNMREZUMW5MTUhhMDhlUW9rd0kxdFVTYkUvV3hBaUhZV2Z4YUFsT2JZUGZaMys2a2hCNndRcVZkQmQzeTZZcDF3aWYxdUZYK3o0dStSdW5wWDl4eWdudGZnYkgwOVgrR0xVR0E4aTlXaDFwVVpsUHJENGhKMnRKMmVnMTZ6bkdJaXhXTklMY0kya0ZpRFhxQm94NWY2eklXdUl5MnVrNFF5MGhWZDNEZWk5UzB3UE13dGRqNDJzNUwvM1EvdlJBK2tTUHBkaFloWlc2MWF3akZiVEZWMXdoNm5aRFoyQ1F1bmNSdlQ1VTNZQlBZOW04MlFtNVVSenVSVDE1UGN2RGd1TjI4OUxHT3BySFArRDF5dkh1NldTYXpkdVhiVnRTTC90dEROU0lzdHQyMVdMbHkwaWZtS2E1RDc3R0h6SzR1TnduTkRLd1A4M2plbVN1Q2xETGZwdjkyREhWd1dTb1pOTjJnMWNSWVBSeXhIRWg0dzlnVzh2T3RVME5EdmlSUVBNMkZZSzVUYTJ2VjczYXA5SkRCcjhTZXNuVlFrL3lUeDRGK3RNV3g1dFI3Ty83dzBST0FvVllvYWlpTk9oaWx0QkhWRk96a3FmcjlkQVNiSGNqQ0prVGIrNDZ0ZjU1SkYyMVFIbDdwNW4zNktMdVVyUkplcE5mUXYxaFZ2SWdVQ1R0Y25BdW5nZUNiRktzVXJKeUdyWVZYZWFNSERZT2ZzS21hWSt4a3dNZnJsbzJCYldJbGd6dm9PaWpKS3Nac29oVWVXTFFoeWJiSXRtT3FSek1ITzdGNWJRVjRycnBqbzUwN0JqMWJ2UHA4VHVSL0xIL3hGWnZqNkoyb0taMVZuc2g2WE4wVmVLbnc4eThlWnZRZUVJQXF1Nm5WRjA5MFJkdVF0WitzVlExNDlwRXZkMlBuNDJWR3dNcmhocEovaEtjUGpueDZWQTFxcU9HcjRiNTR0RUhFZnFpcHNqc3IxRU5DanUzc1NNUWNwQ21neE5yWWpXczZDVEF6cHpxMUdwRjB0Z3BneG05QytoMVZlVVV3QnZjQUZnbzJsa1hmc3Z5MzhjQklkcEtnRHkvQzA2QkhIQnpIbkpuQnhocWkzTEdoMm1XYnBpN0x2QXJVcHJ4cmpKUXhhZWtSRHBZcEE1TWxqWDhETVlVTHpxV0xCak00elBNUzFkVXhJajdwK0cxQ3ppTXhlcXl4bmtTZHNZaEZrV1JLTnV4OEdTWGMrY1Z3aVo4aGV2Yk1lM3pFSG1ETFdndTRxajNRbFI3VnN0OENoNlYxZzBqeXcwR3BDRWpOcHpNWFRjaXRlN0RmeFg5VXM0ZVpGT3BJTGdBeEQ5NVdXMm00dVAwZm1rS3Q5WVpJa2o1M0ozQkNiL1lXR0plaTdXZHl1em1sbWVHTnE3Ukl5RDBrSjk2TklCMGhRQW9uUkN4ejk4UjFTZEFHVHFUUDZVSjJKSyt6R3B6NTlja3U3UU9hbEdlV0pIUE5HbUg4Sjd1Ti9vTThwNFM3YUJVK2d5REd3VWdHSUxlYUpOVERiN1REN0JyMk95UjA3cFBhd0ZuUnhUSjZjWmRMOHA5Vk5zUkw2V0MrOURNL0RuWEFtc3ArZTF4TVIzM29reGJSN1o3em9TQk0vMld2S3NjblJBVTlLVjczVjNjL3lMTVcxejFkY0VhejYwRXdmU1YwU1dMTWdHM084a0FSOFMvOElzSWc2eEFCM050dStvaWI1Z3k5SHdETlZnODJrYkdueXIwbWw5THo3SCt5TDZucjEzSEdOQko0TGVyeHh0K0taVnVTdUlyblZuRitaMjFKNldPdnJydFZVR2FsclJ5aVRoWW1aYWZjaUpQRlNjams0c3BDc0NiOGhwLzY4N3ZWOS9xUkZ3ZDNoYzhXQVdrSHgrajg4dHl3dVUxajQ0ZmtPOVo5dUI5UDg0dG1HU0lMTnNReUpLZlNqbTJueU5LRmo4NjQwaGF5MDlzRXpYNm4zUFVKT1FXSnFPVWxYWVpYbzlDSFNLcWIzL3FpVjF3anQrZlFhMjRtVnZzdWtDZXh3TnVCdlZzcDFoa0tjajBSL3liUGdIeGo1RHdOaXYxVm5sWkVaZ0JWbzRYVERyWXdJYzFnaGRFRzBsekxWMllFUnZiK1hNVENWRHNYazd4QXBPYitRcE50M2k4dEdXVUxhVVk2Y0JvaGRpSG9KSm5TTTQ0Ti9OeS95dzdaTldZQUpNNWNtQXRJenpOSWxMY0lyQ1BnNU91ZGdlUXhoR2k0NFlNOTN2QUNuOWJDY3h0OTMzZ0t1bHdGQnRER3hmcFFTS3E2SldSeUNpUkduWkRubmhIVmhjUXo0L1krbEd5ZEtYb3N6QzcvZDlFSkxxUnNLU1djbVNJa1pMOU9nelhOZ0wwRTJXaXBRc2VKMDFwK0tEWWtlOExudTIzSXozNi9RcjVaM2tJYW41Qm5yWGppM0hXTjVKK3dzYkl4V3M5bmxXamNqaEpHcFhGcnZnMnB5Q2hwNStPb2E5UllrdTBwMG9ucHhRQVpScmw0QlpoYmRRYU5EekZHeXQyTks5d3p3UStGeGhOQ01NazI5R3hHVnlhaldubjB1OVJqQzJBZzhpcFdjMExyajFSaDI0OGFSWVJFbHJRR2dROW9LQ2xqZWowK29Zb0ZrVHBKWTNYemZQOUk1bTVSalNyZ1ZDb1lIcDBZTWdoT2lLQ2xKNGdwanNIYS92VFBYNmNGaXFpOGt1RFNydGZjenNlVXloSE9OR3lXSCt5ZHZ1WDMrMjJhanJYelJITEFZOVBMZlFyblN1VXhCa3UydVlCNm5vV3VjWDVJbFBTcURuc0M5NmlaQm9Gb0w0YlRram5rbTNlSld1NEY0MjgweE9HVExPNWRUeXl3dmJmWDk1eTJhc3FjU0R3UklVbEV0TnFiN0Jqd2RzNUdvWHBEZ2kxV2JIYjk3RjhFY3JzNXhGUWtPTjZSNkUwOFB4SVZYRkI1ay9JeVk1WmQ4TG1BYWVwWGltMytNbExYMDNlQXlsbUNOS0dQaGgwSlJSVUpBSUk5dnR2ay9uY013b0d0a1VCRGRYQWpPdEo5Y2Zuc2hHenVHTnBzQ2d5aU1YcGc3LzBkT1JhaEZWZzFnVml5aTRkMTc1K3grY0xxVG0wZFhxRlN2bVhWNjh4a2xEUWZlNDlVbHZWbGs0RnAxN3ZZNVBMYjdTQ1lzcnZuMnF0VXJxVWYxU3BCYmpVa0FNeElOeTFNTTJyejNFeGFFTGY5TnVXQXFhcXVVV1BEYjl3d2I0dTMzc21rN3U4dFNnQnhPUGN3RDRHRGF1TS9CZSs3RytNUkRoZy9WM0ZkZ2t1dlNwY0NMcE9jd1pjS3FtNHBiZ1RVazdBSUVaY2RVR2VLaXpQNG9UbVpQRjlyM2RhMWNiOXI3S0VldE1oY0ZBZ3diN2NVZFhNbjMvbXZOUkJZOVh0VlUxY1g1YmF3dGFjcGJ6VWlEVTRZSWtBQi9WMkdwSlpYU2RyRU5xOTNjdjVxS25udDhLZ2tJMDFNcXNuTG9DbTlOblROb280cEhJUDFXb29BVGp0RWJva1dhUHMwa014K0JWZmF6WnJuais3ZjZ2WG5xTmlXUHJyWHVxNjRjSGZjQzMwTzQ3aUhyUVNPMFJDTzdXZlZIbUpNRmpnNHBoK2V0UXQ5Qk12UUd5c0NUcWdTckQvcUdnUERCNldSa1B4VzV4ZUl4eWNWK000SkVxQ2xKK3NmSHZIbWIvbXlETVc3SkZMR1MyQTFtQmZ5VENtWERqZmZGS3ppS1p6dlF5eWxMMzdtNTQ0L0Z4eE9UdDlja0cwUVNRSEljQWtQeDFaTDBkYU9lVzRrUUdjR1FDaVVpMzNENzNtbWhUTEdTcU1vOXYwMHFuWlZNLzY2ZmwxUkZncGp0aHpaRW1mRmpXaDJONGoxWk5JandGWGRjRTJDN1VyelBpM2gxODRUTjV2TFFmZExEZEJxZjJBTjZwK1Z1ZG1CSUpONFZMU3hldFgxdnoySnJjS01weGVJTVh6SXplUkRDZng5ei9pbEtsM0l1Zk8rZ21hN1BFTHpmektZSWxET3ErUStpWUhKN2VJNSsxQzFFdSs2Wlh4bjhUWktuOENnWS9MZU9rOVB3eTR1N1RNZFh3VDJyVDVDOGxUMHNoSytxTm1MTXBvbEFPd0FrSVZBYysweHJUZHQvZUFZSTR2UzNNMXNId1N5L2xSQXpqQ1NoNVBBQzlQejM5QkVlS3RweitZNzBUcEJjVnJMWTdmQmkyclpmRmNMUm1tVHpzZWdBVTJWR3dpZ0YrQ1lUNThjaUhPaC9nV1QrTjUrNXhyemxDU2dhYkxDVWVoTENJZi9HQ0lzM2ErMDlOeWo2MzVDQ0M4NzdPTWpKNlhUM0NNdTZQaHk3SjRZeHh4WkFHTlltemFNN09UdDQ1UUJvYXVMb2J6aTQwckJMRjZRbEVSTXVkaHZ3OUgwM3NSMjBTaVRLczlvMXpyKytpZnA5eVBjeUFRLzU0R3JQRkg2SitZcVFLVHBYZTJGT3grSVRBRzJYeURNNUJ2S0hqSm1zWlV3T2o3U3c4bHRYSCtxN2VvWlhoZDNVT043UXlEZVhveUdHWlRMbTJzR2tQeEFyV00vTXl6dHpQZE44SEN6WW1JR1ZZTGZZWE1MU2hJMFh2cTF6bnNkUkIyMWVvNkVtU1lMY1VTNGFDanhkRDRtNDM2b201dWpiam5USXhDV2ZEYllyVWc3M3lsK0ZKdGxhcm9hSlBObFZiMEtYUVlLdW9CZkZEMDNmTmNlL3JHSUo3ZVZLTVFtYUJLK0FVTzdmWitRVzlNWnIyWW9jTVNneGIxT3htNi9Bay9teVFWNWtQQ29CbG03YXRiekFMZktINjZEZUxuakZyeHZCOEpoMExCY2F5WDEvMGc5bVNVaGI2RGpzVXBWMkFPMStWelNBVFNNVmQvOHg0RUtkcE5TV0FkM2cydm96cmJyUUJmQWxValY3WVIwK0wyWnNtQ0FYamY5UjJEMytTdkxmOU15QkdqdkFVNFR0Z1plTDd0UVpldVJOQ1diL3pEdjBzQ0d4SDRjZVVUL04vTzQ2cHM2OGxUVW56QzMzbmwzRHNmYmlPVW5PL3lmV3N3TFVLSVBFc1BKR3BjRndTem8vMkowd3NTcHlqS1psZ0ZOeVQyUE5oZU8wRWZqamVaOHE2Y2o2OFM2UURRU1NNbmpBZEZiMHdWeE9KTHJFUjlrSUpNUjloSW8yOUVnSkxSVXIvNTJjVzlwWmxIVzZ0ZHVwUnB2NHZKbUFISzRDNUlrUUh2aG4zcjVsY3V1UUREUWtHMEFkRml0Sys5Vkt3Qy9FSTRNbCtSbitmc2YrMXhWK0ZKNlBoVmgxNndpRXFOc04vT3Q1MGFlTU9BZmt1L3liYnlIZW4yLzJ6YUlCYmRFeXd5TEhlSVZnUzFWbW05aUhmVklRVDVFdnhocWI2MFRRNitLWVM4UWR6S215WEtDNHBGSlZrNWFkNmpnS05XazRtbGdCbVNJcDlOV294S04za1VXdEtUVGE3S3MxT3pNUnliMmFCT1IwN3JFSm9nRmhzazFwTzRNQVJKQmlDWUI0VWZFWlRXaHFhZVFGcEYxdXg5K1NLWktwcUxhY0VwSEEyU2VpVS9OT1ppNEhiVzRkYUJyc3dGOG1iRnBLaTF4b1ljVVpxVXJSVU4xMy9tcnNaZTZzQ0I2MHFDVWtCVTN0WVlUa0xKaVBHMVpoa2oyQ2RPK3MrMGpTTHRURVVRR3NyZUhvVDJRbG9yVkx6YmFQUlhYM0RiNG5TUENwQnM3cklId2JQOWpTZ3g2bW9uR3R4NmMyYTRSL3hCMVlycnpNdktialVOSlpBdTlVb2gyazRLTWxUcitDQ1pxdElMbUFWUXRUekZQYnN0RlZHdkNDZlJEYmNYRDlYVi9XWC9WRXowMkdqY2Z1NUpJc24vNHRnR0xObTdwSnhxeUptZ1BuUUhJRkl2R3JZMHBVc21ScjdSUkRvRllSZkxVR2xvY2JUdU14Q2pFWTFtM2hEZXI0R05uakNoV3dIQ0thaEo4a2tibjZ2SDVJUWxucmZQaEdWL0g2Q1pvMHBaMXowU0VqcTdFaFJuMjR5dDYxM0U2QzVTdm9qWkxPUi9TeWpYS1Nha0xCUWEyMmUzMzhuOE5Ea1pkdGJIZmZRMHd5V3RlTUs4dnNENjNNMTRJTW8xYXdGZWlteElMNWVUL0ZNVjBpNmdlVmtidXY3R24xSGd1eENESk5YZGpGeStmVnY3NVBPVWlGWWZsME85amdiT1ZCb3ZSejZGU2hBT21qcG5FTXRXSWhiNEEwYlhVa3ZFY1lUY1NOTmJGOUdCUUliTzhtdjhjZmVSL1Fpa0ZtRHZEaGYzVkJZU1FPQ1ppTDdXYkJzS1VIZjFLUWFzYTRMdjlNNHdCVjJ3RnJOdVR2dDNaK0lRRXhGaDlhYWpVaElDNGhNMzhRN2liZTRTcFhBbUUyOXVFTGRvbkZqczc4V01wZy82bTdpZkhVUGJzODlkMkxoK2hJdkpvdkRBd0k5bDhlNlNZbVUzMkZNUjYvakdQMU5xVDBOckdyNk9aTldlT0ZjWWJvdWw2WGE4SytLbmtBbUl4bTlaemtYTVNORHE2TFZLcXBiUmxzcThiWXRLbjc3SDRqZ09EQk5PTUJDWG1ickh2dVY2aUhValVkSlhVZE5Qck51RFdCcUYrNXczRGpocElIRHQrMk1sNVIxREVnRHlka2xIWG5nL2JxT1JXSHpqYmtmS3kvVXFNRWh6ODBHTFg1OVRDQWZJMXhpTi9Tb2txdUQydGNZR3A3aFRPbThaeVpkK2lHU2pIQ0UzNk0zbWhPM3d5OXY4UkVFL3JybVUwRm9iaFlZMXRTM2lsT0xDcFZVTi9MQUQ3d3FLYTB6blVFejFKMnlSTmFGQjdRMmI4dkM4aEhIS3p1MnJxNE5VcVMxV1kvRTZiUllBcWx6VlFqcUlZdGUrd0Q5azhkb2tFcWtERnRoWmEzZnJ3Z1dHZTR4ZGJSVHYxYzIwU1dZV3FVNFIzU1FLRVpsQ3dOcVpvVGZKVDhuQVVQbE9uYURqRnlOdGpiclR1QTFsQ1dCelBFSDhMNURKYmJnYlVYektXTGV5VmtmQThaWVQyVFpTL1Rwa1YwSGdDMkl5MjRTMXZIVzZTNktaV0x5VTk1UkQ4R1gwQllRMkRPaGxDbURoSFRnanl4NmVOdTg2eGVkRnhYVG5LQlpvcGRUUkJ6YWZLdkRIeE43aEdyWVBsMGVyZjh0MFVwUzZpWW9SZmNDaEdJbHI3djFLd0p4QjJIMHBBc2NxTXVGWmNYRE54Rkg2Y0l0TXJDTjZCcVgwMklMeXczOS9jbGRLR083WGhXOWNlZWFVbTE1VEtZbUEzakxwbGF3Rmt0WlB3ejFCaWRNU0d4OUl1VnRNaXdvbXg5ZE04a0VnMmN2bU01QzZYdFZJRnNMNmdDMlJhblBENUlqRldxYUVDWXJlbm1yaFp3dTZxb0pxNkpkZDdYdW42R3JuR2k4U0czNHV1dHlMV0lseERaODNCblV6RXpTbzFkZUhXVTBVUUhUWDQyL2VJakNDSmNuNWZLNzZtaUJyVHkrR1BxWHRwTWwrcXpKM3M2OWUvVVhZT2hSSVZqRlJLNVdqVXd4KzN1V2lrWGVrWmQzU203MUJSQ2tWL0FNZ0VodFQwaWg1dHB3dFVSU3FmMkhiNlNsckhsVUZ2WjRsays5RmcwMUFDWnZ5Y2paNXVySk5GWmUwOUtXejJ5Ym11bm5pRi9QOTBjTnM5Z1U1WmN2NXlVYVIvMVZQd1F1Q3ZhVHhlTFVXKzBxRUlNd1dDNGlPR0w2MWJUT0FQNzREbUEwcVJ1TlRVTEJRaXNkOEFOaGRoOXN5VFpUa2ZCWnJKakRaRmQ5bGF1ZnpkbTdMTmdscDViZGxLRU1GSnBEQkMzazhUZzNkTUNvT3BMdzFHcDA2YjgzSVNJQ1M5ZUN6eE1SZU43WXYzYVR0REZUSWJXSWlXMjBqNmJ5VnlkNEtSdE5rVXQwb2Y1VllueTYyTjlUd0RsOEJkWmwvcGpUVytRVGhYdGdVTnlKZ2hXdno5a3NNOFUxWFlyNWliOEJleVpVTEZTMVBJTnlIMnd2OVk4Ry9CdmIvYk1PYWtCSE0rVnE1aWFMeTNiZW16cEg3Z3lLdFUvbXJ1MldydE5waXpjdll0ZHNtaHpoZDV5QXFGbVhveGxQQnQyaXM4U1dtR1R0NUh3by9XVEJJUEdJR21ySjB3L3M4Q1pRbGxFRFVRV0k5WFMzUE5vbENlMVoyNEp1RUdZYktDQVA2TjBSQkx5TTl2OEhSSXh0SGhVNzd0cjJRWkxjT2Z5amptRkxVZk9Xelk1eWpxSGtRZzBucHQwUm9MSzhrRlgxRXRzQ3JKUUdnbmdmRnV4YWRDeU9jblk3UHkvekk1dmxjYndTR01yYU5vQ1ZXTmE5K1NhUjZtV0RNeUE5UC9mbVp0bGRUTEZ1MlJTVzllY1FLL29PeHRQa2RPSmh0RW5xaGdlTk9jZFhQQ3E5OG91dm9FNDRCdTdDTjR6b3BYR2lpaGpuK0U4OUhNNGJMcDA2SjYwZlpxVnFlNVIyZWVpbWF1UGNXVVA2ajlhbHN5UWw1MTdDK0MzcjNycWhsR2plQkxiVkw4aEhSZThjUUpKUHJJVmE2YTRQODA4TkJTY2xJWGlpeVBGaFFXc3JNRmRLVXE4YUJYSnJRMUNYenBIODN0dm9IRnBvMUcxKzNOT2UySGtpK1N4c3djTEJUVHIwMmwxUGJNRERoOUlraXhrM05tWUZBQ1RUQnl0SFI2Y2tQTU0xQVltTERxZEtEK2E2THd5aHBGSy9QTENHK3VXNkRXWmg1c0JCWEZaZ3BqK2svdTVkTTF2cWEvd3Z5cXVRSTFZMWlzTXBjRUM4RC9LMDYzdCt3YWJnbmpFZ3ZMdW9SalY2N09YeU9nRlJTWkM5NFVsbnR0dmlKYllBaXVTZ01DaWRwbW5BOXp1TzdmTXhZUmFhM25ZRDhFb0VFZTNzNUdXL3M3bmlzS3oxMExpY2g3ZTdJM0lrY0MydHRQYWVUNDBiYVZDaG5tSE5VZFBLRjlsZjY1SjhmcC96YkZRajcrZUFSSVlvcmdYWVc4VjlwMUkrZ0pIU0xkK0pQTVFKZWNjNWlNNHNGeWJUWHMvR2hDeFdYdXpKd3ltK3ZlSFlQc205M1dTZnpiVmpUeFR4ejJpTzRwb0p1cEFNekRZK1Nac08waTRJd2ljQ0g4SXEyVFZmdzNwc05yZDZnOERzLy9XYUNnMnFxeVJyS2REd1p0aU1ObzZla2JrR1B2ZWduYXpUa0JUYWRnc04wVllBOFdpNmhZTkQ0WDVmN1hVL21YdHRFTVF4eExaaHo1SlBDSTJrS2dJRlBZYjYwV2pIMDRaTTZ4Q0dMdVBqRTZVU0tDbGJBYmZIenZFc0xVckx0MDlIWGw3RUZpTmxCSm9ydVZMZmN0bnNDbWdYaTB6dFpHR2lBNHE4MSsya1BlZXV5NDVWRWtrUktMc3JZOEFjYTBtcm1NSllJK0EyVy9EY0tIU2lCQ0ZicWsxOXNqcUNQV2ptTmhlNUZ6NEEwcmM0MGpwUXl6ZzREVzVTUERudzYyYlZKc2ZyNFJyWWZNRXBKcDI0bW9uQWpObG05OWJGS1hkUHdjd0pRdDNJS3lZdGhTbXpGODYzeHJDSTFVaUtxTnFYN2tlOFljVGxVN080c0NNdGhpR0IzL0VzbFRVdUJYQldLNkdjazFobVJwT3VtTVF2Rk1kTmV3UXNNVFkyWDNOOUdOc2I2Y0VucE50ZFVvNjBPNUV6YjFGaTBHTFMyMXRSSVRpRXlvTmRqNWJ4WGt2L0o2amJvS0pMVWw0L2xYRkFuaS9BUEtvYWxBeUlEbTlMeDd1QytBcExVYU53U0RzOThXVTAxNXZnQ1M4aGRsOE9CNEYvV3NqTDZHNlZXOEVtRUw0M21MbDdEVGNOWVFaOE5vSlpJeTcvbTJuQVFod1VjZWYzb2IwS3dmdGdPdU9FcDlFQ1FrMENJSkhDSDd1UGFuMFdLTFVYSittbnZwOHpXL0Y1Tm9NNFYrdVZGMXZpMXAwYUxuUHlaMlZNY2hWcEJ4ZEVET0lPV1Jlb0lMeEpiZk5tSWlvYlpqWGxsWjlxWDNPdEtqb3JZWDB6VTlkUVJ1MmFaa2FNaFR1RzZOaHJQOVJTOXZEeHlBWG9XMlBJUFpGSmNycDR6V2t1dTN4QUJxcWV0UEZ1ZWcrRWp4UEZLVFNRNjdhVHRsY0l6Z1B5S3F1QlRYOFBPU2R3eWVmeWhzdHdNTStkQlhlOXRCK1l0YlB2UE1CV09HU0ZKWDlWek80OFFSVUNERFF3R1lUbGtuV3haeVhvaTRnVVZwUXprSXBybTFOdjh6dGRGYmUzM01PaEZIaU5FaDFwMjhZNzNxeDhLYU5pZ1JtY2RkL1pWckFxZGtVWkNIQlloUVkvOUFWT3BPcEZLYTR1TVZXUmw3aFUxbE8vOThRc2I3Ulk2eHowZlNvMHpzTldaMElxUWt6ZGg2RXYwZHZva3RiVUlPWWFsYm0zN0xVblQxUDBSZG9wamgwZjdBd28vM29aWTNUaUNHTkp3RHlGTEZwZGk3U3h0MzFsUWtoSDBxaGx6SHIySDBQUWp0dEZFaTBXcTlLaW9ET1BKWTFJUjVUSjBkSjU0NDhUUTdOam5Wa043SVhRZzBEU0V1Q21kODNLRUxNQ2hFUTFxSnJXL0NCWkRoTFhJQlJLakNxbkkzVkQ5R0Y3cG41cXNoU3hBWFJhQmMraURwOU1sYlJiUnExa1ZneU8yNzJOMEhpNml1Y1lvMVpGd3NnTlNNYlpQNmZ0SVpTTytEdGx1V2E0b3pYL1AwTVd5TEFzbDVJWmNoT1JNYWtUanUzejhCdWZPL2hTMlFUUExVYi9oSFM5UWVLM0xsS1VMeW1FZEg2cE5BdlU1MitIeHZtU1VYZkFiM2grOTJUeE5VL0hsdFF5NkZuTkJQbi85Sjc1Y1NqbTRROS9VOWppcGtTUTVnMERENGhHZG5HdjI5T3FRUVk3eis0UVN3alJpZnNONUY1c1dHcnVsQnd5N00raHdsQ2xlY0lLTWF1SDl5UGsrUWZQQkV1NUJXNHNpNWdPVTRWc0tRMXV1YytBeUNjazUxQkd6c0RxNmZPbDdoYmJjV2xSOWg1c0U0U0FPZTFiTm8zN0lQa0hnYzFMK1pjTzZ2dCsyYVgxeEIrRjlYUE1OOEdPekMxeHlDb21DRWU2OTJUMklIdVlsU0F4QWpQMVVSeUFMNC9HQzJzTDgrUHAvQm5udTlhaUdWV2p6WFJFR0FwKzZGTjhEQ3hBb3UvTG0xcjRCemcza0c1U2dYcGdKQmU0d1hLM1NuRFdKaE4yV25Nc0NsMEFKc3lMeVgwUmJualA1dk5IdEVuQ2ZJTGRibkhLQTBhQi9GS29FcWV0NlZBWXduRUFRUFV6ZTQwV0k2SWRFcnJoNXRleXZDQnd1R2p3YzYxZzJOTDBnVnpXSG9GU09YSTlhV3lCMFljNmFuYjZUWGF6d2pGeEVrSGdKZVdVQVlLYmhzT1lMMFZ6dDZqYzZOTFIwYW5KYVRueEUrT0Q1WU4rNDJhQUd4WFdVQkx4Wk5uODZiQ1ZjVFF6L0FZWnhsUi9wTGMxbEZvemNGYnk0QTVQVDV4VFg1TlU2WFFNajhlMVIvVGI3YlAya3lXYUVpNy9BRHh6aVU5UW82ZFYzMzRaUW0vekdvcjdmSURFRmFiMEJuNFR1YTI3KzJYdWpUckdxSFBnWlBUaTRZMDdsR1R5UXNFeGk5cXRpUUxhUCtMdmxMSzlKR3ltUjZ0SUNQTE93MGd6SEFieUNTbWJnZjVmTnNhRE50b2c0QjdoM2hjVjhLdHFWN2R3NXczSXFjOTJoQk5FUDBPcVFpZEFWbTdkSWZPSG1zRmpHaWZseUdLUXdLVFhsdXU0YzRBd0RBR2QyTm05SXpGakN5Z0VQREpiaXRPaWpxN0JRUDBVYXRCWVI2b25NMnZZNUw3bzA0Z093MVo2Y3RUVkhrSDZ0N2ZGeGxCZm51d0xMY1llZTZLYWVJZ2dybW4rYzljMGszZ05IckRKV0dmYnpXTXJ2V3l2WnBpNXU3UjB2TVVaeWt2VUh2dEp2NG9TZSt2MXFCMWl6QTRTSHYyQXpHOXM4bFVrYnByZEJyUGpxUnI2QW5mZHpmb2NyK3pLRDYvSERQUTBDaHdzZm1rQzA2WmtKT2VzQzlnWEVLaFRRU3RWWmJiS3ZGcUhjNm9mdzZ4Z0dYWHRocVUycGZiMlRiTWJLb0lPNGp2TUU3TStCN3EreFh2YVg4OHBSN0NQRUx1cE5oTldFa05BaUZlckh5ZkpEcWZBQzRZUG84cFFMeDhhR09jczJRc2ZDSmR0WTN6ZEFjVTA0c0FPb093QWxKcGFxSFVSdFhuNjZwR0VObS9HQ0lTTmFnTWxXdzc3QjRSL1dOLzFCYVFtSUl1K1NyNEYreGFwaHFKMW1pNVcvdERMVVZQZTk2NXdxMEd0TXpOcFI5TTNZK0JjYUhUd0N5Tm5XM3dqUFhLV05Oa0l4dnhxVkVKaW81V25MVmhxV25mRUJnYVFsQXJIUHllQXZ1MnJKS3B2elVBQWp0ZE9CTXpOTHk3K29uZW0yT0pjTEhXOUFsbnVKZVp2R0s5Mlp6R2toQzBENE5Ca0htY0hXKzdFbFZrMHZPN09aNmZubXBFYzBiUjEzMWc4TTc4K2dBYTBaQ3dyLzZpeDJpMTBKV0EyNkFWOGVaODhvT21FYnVsR0ZXaWdHcWhIMkNCS0prR2dhQzV1WW56YTczSFB5UEZQYjNyWXpZTlE4Q3FNWWRyY3NDWXFxRGZTUkkzV0dHUmFXa0E1d2FsbXd0NDNWZ0ZrUVZLallZdVYwangzR0U3OHdXa1EzMElsWGZZUFBwRGlIZ2RVa0lsazJ4aldzbTVTZUZtVmsvRTd4VG5BNFVEVnFacWpZZXlheEdaMUd2dXlXMVJGdTJkdk9xSWQ0ZFpiTUV2QjFnR2txWUtyL2sxemIyTWJkZHl2d05VTWMyeXNReVJ1VzRpQll6UHBsMWQ4ZnJlSWZYRURGY05QYW5DMERrMVZzZWUxakdua0xqRWJFTU1DNDZMRFg4RkFveU9Fb1FKejVnWnV1R0N5cjgxRG5hMlcrN0Z6Zmp5Uy9EWlVubk12ODYrSE1hckc4MU96Ym9EL25uOXRRWmtsbGNVNWVpcytTRGJZRURYYjNRRjFuYlMydmJPdW9zdURQVGRoSVJGQld0SndNSmdGKzlJZ0lTVWg5WE53aWNjOUhHNk9MUFl0NUtNM1RmSHd2SkhneHdtM01EUzlRYjBZeWxYcWtrZ3BGM2d3MUE1ekhBaXVEY0Q1WVVFanJnUzB6N2U5bERWRmkxMUxiVUhZSnp3Q3BXbUVPMERKejJtZjRwd0owVi9nYmVpUk5YQmlDc3JDSWJuSnprVzBkUFk5blJKNXNHUmlDa2h2dHc5eVE2RHVobjhmbUNxZ0hoK3Z2RUhtSW56cGY2REdnVm9yWHlrSE5aTzdJSzBZbUFPWGhMWDV6YnVPTkYwdUh4cC93OGxPa3FpVUV4TkxTa1NYOWVnaDdzODAzbUorNElla3Y4bEpmTUZtcjZLRXFhWjBXYkp6dzdTZU1RdWJSZDFQa3JzKzQvRWU4WjJGdjVvaDlnczEvdE1ocVloMmNYeXVJcDRPWGt3WkZsR0lCaTFoeHV1aFBER0lMOUV0OXZpK0gwbDU4N0ZmVmVkZ1dHK0ZKREZMM1ZPZ25wZWs3WlkrSXVPY2w2dXBwRTZDTHA4MzdsQXh4c1hJOTdENTFsRWhrdjk2YmpBZno0aG9HM0haTFpUNnRjdUNDRVZRL2kzdElqYk1aQ3RIL0NyK0syUytETTlzMWFmS0dsNmFzZ3JzQzZlQVRiMGVuakJYeGVuZWpsbjV1a3h6VDRrOWVlVUhwVDRmd3hhWXRoRS85OHhuMDZCRXZKLzJpRGUveHRiRG85aU1iZzBzei9SSHVRSUd2d2ErblVFUk9yZWpCSmU5V0NIOWZTNm4vYUdWZTIyRjROU2tyZ0xYM1FsYURhcHA2Y3o1TWhJTGs2ZE9EOVdoZHZ2SXpkeWRBY3BHbjE0VUFvdTFBWHlzNXU4TUIvYlYycnFVck54cHVuRXlWNS9Yd3MwYWluYmJjdWE0UGVac25yVk11UDZ5Q0V2TGIyRk9tQ205NnNzUkhnSjZzanVaZG1kdndaMWpBenNiczFCYkFJaSszdld2OVFDdllyVkQ1QWlua1dtUzNpS2xLUVhsQWV0eXdRRm9QUjM2dWdmTXJSZ1dpVnFaNUNObjZsdzB6WFlpUVZCS3NIQjJTWjNJa2YyYjRIOUFGYjdyanBaSStJR0YxMVdGU2MxOUw2dHFEK3dEenpFWERBK0Nma3dLMlVUWUtBZkpaSW9GMGtaQWdvb2ZjMGZqS3loS0NaNTNrZVpxV3kyMUtzNHVvaTBEQlhPREpjNFlkVzl4UGVQQzNCaGVHaGE5L1hXYnk1aVVkaWNTdVZPY0RHdDY5RVBUYytMSFZWcldzRGN6T0ZwalY4TGU5YzlqVTk4bzBCZzZRSW1paStVdzZ4aW9IYXV6MUJmajJRL1A2SFJZTmxZa05MK2F3cGdzd3Y3SjV2MEgvcnY2dUtETDNhTnhVWU1QUFFMSERRaTR6cWs1b0Q0aDg3cHZUV2VGc2dPV2h4bjhxTFVucDg0emUzKzdocDRKWFFsOGtMSzYvQysvaGx2Wk1LV0t0dkl1V3RHTTU0dmxvRXY1TFpLN1JaS1Nod2VyL3ZxQXBxNUUrenkvelRUclc2TDJtdWE3d3FzeVgxUENpNXpEQzZ0TVpCOVFpY2VvYmN3QzZmMzZKT2ExZGk0ZlpGYjhQNmlPRlBXMzM5cUU4bTZxK2RqaVphYXdyWWZZSFM0NmJYL0ZqTGY3SGZaSllySEZiL0ovallVY0xwZnlsWFBoS3lMdUVIMGJPaXVQSzdVT3Y2cDRMNHZGeVpYSExma1c0QzBhdEpjWmJKdlluTGFaTitLS0h5bzE4TWQrZk9HTXJkeE4xdUJNR3VYZ0J4b092bjF3TVUzdElrRFRCUk8zN0sxS0c3bU42VDJOREk1REtUeGNmTGRrNFBPM0d4NHlkcWRjUTFLREZoRis5MFVINzRTYS9IcjhSY1h2cjg2YlR6dGxmN0dhK2YySTN5cFdNSmhhdnEzS1dOWVNGamkyZ1QyU3VXOXZ2d3NOZE5zdmlWczdIajVlS1B0bEc2RUtHMThqbGxXaFhhM0lsZDlxcHd4bzl5N01vcE0wVjFydmxYQUk4ZENLM3d5ZGQ2dDhCaE1pVTdzcFR3NVJZUzF6MmU2QVNLOXJzK1BEMmRIcDViL3Bpdm5nNXFvL014TFpZc09lNElwNkhiM3VtNWRJdkxad0lhSUxadHU0aWMxeThJNlBNSmgzbVMwL1hjMkJ4UnY0TXhBY1ZJNDc4Snp5cytqcTlMNE1LcFM0enZKS3E5R2ZkaS9PUlM5T1hQdHFFdENKSXl6dEY5bG00Snc1aEJMcUhRWUM5NStKZUhHVHRtMVc3eWtGY2poQ0Vuc2pKWTgybm1ONitaYW9vWDRTbkcxMlQ4VWFuV1lpbjVHT0ZOMGJlTnB5NVRLc1F5QWM1UWs4QUlsWUJzR2lMdG16SDc3NWxXTTBBeTZTYXRwV2FONHd5ZlhKeU1ONHM5RDgxc3NwaXIvV3Q5QTZnSU55ay9KaVJTU2FKaEd0SmdOQVdBSGo1d0ZiVUNoT0RiV3pSUlJzNzRmamhCbE9yMDdwNVpjbVBRdXVFVE1GTjJSN3U5azVENk1OQXJ6dFV4QVo2WEpKQkh1RjZWUmplZjc3ZS8zaUZLU2RSRUN5MEs4NjZSbFVERTU5ZnFZUDREdmxCMFFMRE80UEpGYnBJQXFKVjhjMXpPUDAyYkExQ1JYTm9vQTVyeFlFblhpYVZTMVhpbGVydmtORGQzTXd0SU5pck5JNG9WaG5nTWVqZ0JOeTVaUkQrVXRrN3FQSlk0by94YnFWYnVucFNVRmhZM090Q0d4TjF5T3NNRUF2U3lSTEJJVHYxNW5CcDZPNEc4NThoTVNHbTFSVWhWcXpDbmNDTE9ZQ3U3d2EzbUpvWS91R25rWTdzYmdPbktDUS9vTEs5SXA4dCtzclV1VitLblFORTl1VTRFRTY1Nyt3NlR6ak9pSUthQ0FDZ2VOaHllWncxTWlLS2NBTnlvWUpUVUEvSS94dmU0cmU0ME5CeVBCSXhQbFZhaHFWMStXK3VEeWNzQW9WSWw0WXRUQmlDSWxYQlhNOWdpZHVhMjNXN2dFekNCQkRRVkxaWndwWHE0UXJQbHpMbHhUMFV5ZE9hZEI1QzRYU2JpNWVsL3pLY3VYcGEyTlNFeHlId2I0bnArSmxqL0JaSkZNMjVadzQ0U0V1RFlRMDFReitEL1M0L1dyZWVxNlBLQ0l6dEZ2K3BUa09sa3N1aS9ad2RpaUJadzlOS3lLSWZpZjJzM21iVkE0QjJ2c2NmQVE0eUZnNXdmdjUvajhyc2hRaUJSNTd1bGttbm5KOTN2VzE4bmtTMGpyZlhqWmtJVGlFT2lzVVhYU3YwWVRHbzgyL1JpbU9YZFNiOEJTRzhDcndZVTlLZGhrQVdkMGZkTDlzN2pZY3FmTk5CZFBORmREZ1JzeS9RMEFXQXhLWmNtWGhDbGU3b2oxSU5yZjd6THcyNldIVnAxdWxLeGRuOWFWMURHd2JOMzlQZnZQRUtVM1lmZlROMFNSWkJ1V0x0eUJPNVpPUTVmQzdWUWVCUklqUTJac0N5U2FabDBaUVlVeExwZTZac1d2QVdqd2tKempaRFhBOW5XejZBcFFnS0twL2ZobE80cVE1R0J3K2llRUdQMkVEZWtVVURTdTA5WXhjZ0drOWZ1K0RaZUluaVE1VWt6L0xLaFhrL3VCd0ZHZVhMOXVpd2tNVzJsRSt5Mk1kYzFNK1RhdVpRblpjNlpQclhubHZmUTBxVkZpTzNSeUxJTzRZYTJsYWNOUW1BNmlDTXJTV2F4aWdsOEtVZ0x6eWJoTXRtR2x3RUtKM2pNV3NtNldkejBVR0tPOHFLZjFtNEsrLzRQQ3VoQWxSbWJ2Y0xlN2dTamZhT3FZb1FzQUpHVURFUWl3Z1Q3MWUrZ2pmS3ROcElOM1BIcU1BazM4SGszS21yY3FxNS9rL29JeG41Y0k2aWh4RnEzYkZBZEpCMlM0VzJiU2RTeXNCZHhkUXg4VlFVM0xvVzBTbTErdEdKNWtjRU5yTlJzQVVxelUrRWxLNFJxRllpWGhTQnhhUVE4WW9VcmpyalhhNjA0Zy9mdVNuT0NHT2N0MTJqZlhObERIOFdnV3NjZWd0WW5ZS2tTNkxjcWkyWG1MQzNDZ29OWitxV3dkdDFpRGJYdW1zMzM0V3JyZGJBeVF1VDhEQkx1YStCSjhqd0ovZ2NFZXBsRytpNUNrNitGTFlTSGdDYkMveFNHcWtYRTlwQ1VkUGJGUjM1aExDbkNDTlJMYWZBRTl5a2VNN1pOYmo2bmQ0QVNXOU5XUFV2ZlVYelJCbEdObDFESVV0dlJKelIzTzFtZjJqVkJRNmpvNXpBL25OdEtpZklVUS9SOU14Q1JROHpQR1lFb2h4VWZWejh1RHBQcGxLZFpVVERldWJDS21vcGtVbU5saUNOUFpEWisvdjVGR003V2JTMlU5VkJCUkY5WUtHS0sxay8xa2ZZV2ZJTlJpSkZoYlNxOWxMSzhqdDZ3QnRZUi95OVhTWDB3bW5GRytvRzkwNFFmSnBWaEFCaGVWSmhaQzdHbTJza1E3WlJ1U1doajhkM2tuRFZpei9GajRPbzRpM25ZaXlFWTRnUG1ZMmlRN2JPVUlnby9HNERITG51K0NRYTBwdjNJYUxIUlYrZ3FyUjJMbG9XakxUbTBsV0d0Vy92NFk5NndQR0s1V1dEMFpxalJwMDZtbElranVtdmhoZkxIanZPaUl0c2VneXVWcjF4RHFYait6L0JId2hCUnB3RGF4YkkyQTdCdlAxQnIwQWNTbXJhZ1VLWlpPY0c3T2wxUDBFM201a1R3c2ZGSTRac3VVZTFZczUxblJ0cVNPVU9lNFhvU2hmM2hjS25FR3ZDdm14UFRQdGxkNGRaK2RDWDU4MlRoQUJnekpTWEtIYndQTStCU053Y0pTUjREMlJldFl6M2d6Vkh3M0dub3E4MUo1b2g2eUgvaVF5T0ZHQ1lqWHIwR1ZoVytoYmdiNzVwWUI5Wm1XZlY0Z3R2SlFFeEhoMWVuY2t5VUhPUzY5L0lxSlExTmlOKzA4K3BxdGVmdzlNWDd3K05RZ2pMMTBVODhHYVh0OU1uUGIvZWdSckVnY1JRckxFaWxjdldTN09FNjhVSlRFTXBjSXBDaFZTT290eFhDc09CMktaTDVOQ0xRZmk1NUpVYmxPNUZ5dlZuS0NMRklvL0syZkZPcnJMWExodlJkdG5oSHZhUExIRndYNnJ2MWZSd3RuZmxneEZlSVpBMW9jdkU3bm15ckRldE5zVzZRMTFWdXd0Y2U2U3pyRmNGekhRaU1DQWVRUTFIUnFieHhiQmVGUmV5eTF5RmdRWDg3SmZOS0poNXROZWNNYm0zZ3kzSkhKeGlNcHFaZ0crelhVRHJIQ3Z4eDdhcmxOT2FJZzhzZGw3NFdnMnBRclFuZGg2Q3lqR3NZdFNPdGZOMkVJQWlnL2N1MWxSb2pZMGhtSVFiUHJJZ0xLQzN6UUw3ZjBrRWpmeWZwd1cxL0ZBU0t6UlVCVC9uNTloWEhlOWR0cFF4QWtTMzRScHhqUS80K09hVm1IUWZqdG9WcE12S1JoUHBBbk9hdVpZdy9LT2xWcHZtUWVMNHhhcWlSVy8rQjdIK0phQkFEYmwxbmpJRUlZQ0pCL05IdW9hWDR5cUlPek9taXBXWWJwNnNKWVA4bWg3VEFpdXdqTDFYbm9RN3piN1BZQUpTOUNaMm5COWMreTVZQk9xVE9JZjZkMjNoQUhYbmZnYkVwd3ZBdnBUcEdrTFFNUWl3Y1VEQ1R5a3hIZk5uZk1CYWdNL2Q2YTZJSWxGUE1Wc0t5U2NzaHVNOStXeFQxakx6b013a3JvUGFUL2U0TVdsY3dOcTJ1UE1tODFaM1BrNGdjN0h5UFluQURscmd0NVYvcllhY3ZMWmtVQmFSeE0xMnNpQXRVaGo2SHJJei9NR2s5TGZqaXFITzl1dEU3THQwS1J3NVl2T0FiRWVVOFBwdm1YK1hScml1TW9ZdXkrUlBHbEI4dmNLWDlxTUkyMGxqeHBiWW95aFdaeVJ3a3NUNGFGMWVwQkV2MWVDOWtabXB5d2pOdGZ1NWkzNVJIeEcxenhRWElkbS9ZV21EVmF3T2lCMzkrbk5LM2kxQllrMTVkUDRvOTk2eUlzL0N5QXlxYUVGTUErMjBOZWJwNit0Mk9xdU9KY2Fwc1gycU9yTFp2ME15RDhabytmTnBXTTR4c0k4UE9wUDJsVHZUV29CU2VXNytxbWZ1Y1dkeXZsY1NOYU4veVdjUkQwSUdaY2NFNlhuNVNnbTVmaFlzamlpQ2xTYXppQ1dtaXZFNlJRV3hWRzgvQ1R3MXhVc2duN0VTaExIUmRXcmVqdldVVjdUTEh5bFBSUFpSTCtMNVJRSTloTVpHVlVDelBneGRKOGRNK3VzWDQxRkdrNE5SeXkzTnR5dE1oL3V2MzAwQUM4WXNEZG9WaGkrM0tBb3lrS3VweW4yQTR4ejM5dExXS3NjQTRlMUN5QjVnQ2VsSVc2Zm9aak1LZWNJNjNVWk13YjBYc0h1UGlKWmpXeUU0aXQrWmpjVkMyR09ZQ1liVlc3akhXWFVES1ViVTZzazBsS2luckdDYUlyNzI0c2RpZ3dPeWVzS25DNG5hdnFHVllGWU9GM0RGVUhrQXg0UnlrVW50WnF1RS94VXh3L0ttT3ZhN3pHUnR1UG5mbnljcUFQaDdzSGVVTWVraS9zRUFGWTFZaGhMdnV2dHVkbjFSTW56b2NGK3RZSjJaZ2JCb2RGbHkzWi94L0xOaDR0WDlHYWpjZEVPQ05JTnRXTFNXODZoUzRIRE1Bb002ZjlvT0pzdVFEeXhDaVNXcEgxTG83UDlUSkExa21ncHpaRXU4YXhWQTBBVUdXZXp0ZUlFeUFKOFlvQVNFZ0N6TGszaEwvTXpnUDNnZXoxWHZhbWcvakU2aUoyZ1l0T3FxQkxuTlVDeTVYWU5BUHBpejkvd0xsUVZsNXFGU0NDenJydDZJNXFscExrTTZacFQ5WTBvUTRncThEalh3R0pwblk3VzV1bzVJV0tLcitxZ3ltUlg5UjcxNzN6RmUwM3ZERm4vRXJES3pTN1hYSWthWkxmS0d3bGwrNHlGUTFON01VV1BOYnZDYnZhbTZRM2wzemt6MVpQbEtWSGFGVTRHQ1RRaFhOYnBMY0V6T0Q3RnJJbFdzblcvaWJ1eW1qQnBaUU1mTEJsQis2YkRQVFphalJRdUY4cnBid21OM0Jaei9pekdHYy9BVHliSlFCZ2g2UkxUMm1jSGhqY1d1U3pkT2ZieXl2UVJweXdPZzRPMENBdXh4ckRMR0VCZTJ4bHA1WkVBaWxQckV5aUdzZUNORzMwTERlRGdEbkNJNnRIeUVzdkFLMkFtenRhaVlzWTJBUk54Ri9acndYS3FiNVB0bitlSFZycFdLN3JRU1lKc1pseU00SjluTjR4VTVjNy9NcGxUcFpud0VrRWVCTGpNMXZQNS9TTGczOFE5S2lJd3V5dnQ2dzBTcm9IdEJRTnVyS3V0VkFmeUZVZForNU1XSi9YQUIvMEZsZEkyZzRrZ0V2VXRsVVQzOFVReGVxdHVRaHJuNDF6RnBQeDF6bkx4RDNOMHExbElGVkdzbnkveUNFR2M3dWVIZFhZSGZxcU1GQ2dscHlJREFEOURpbHVzeHZpNS9aTnM3L1VnZkV4SEZveHJKeVl3NHZGRVFGdXc0UGJkTXpVWkUxeTZKT2RyZHlwWXdYOXE3QldGb1RWYWhWSno4UTRIN2JJWldTS3JYZERQdzhxVW01NklZNDNUcm53WnU5VmFLWmptTGR4STNmZDBvaHFIY2pid1VxajdEMkQ3ckUzVmUyaU80aWVta3pOQ0l2Tlo5RUdVek9mQk42akowa1J3OXdwdTlDcmVQcDN6a3NacDVEYmR1dUlkRGVUei93cTVXY2R0WDR4VWQ5YmxGUWpyT2c0b1JiRVFxakhBdzJkZ1VXUkgyaTREQXVpU2V1aHAzNE1HVEtoTVRYT0tFSHRFZ3IrQ1NydEJqb3krcUJpZXZzTkxaaVdtQWVVUmEwayt0eVN0NndnTUluV1hiZG4zRXZURDhzaEhZUTYyeWYyLzljdG5qc29UNzA5dVl0QnJOYjFBdVFQZ2JlOTlRK2JrOEI5MWErS09LZFZZQ2p2a21MYzUrYkdmY3FlbDgwNWIvUFlLdWpyTzVYcmN3Vnc3MzZiYXNTcWNzTy9nOGNuNVNBcEs0M0oyeFVtclF4Mlg2L2NMbkdhZUdTMEdDSzJ6V3hhQUJWd0N4Q2xQWVVsVmZZMlQzTHd4c1lSejJscm9wUThDN045SEE5dVZGMFJtbjRIbjZ0RjFBMFAwS0U1a2sxcHpPUUtCcXkrb2pnVGkyQ3cyWUFVaTgva2ZnbGpoeDMyT1gzbFN6TlRTcGJDWXo0VzR3Q1dndThXZll0ZkFudTdvR2I3dW1jYnlnbkJQZ1Z4cCtINU9zQkViYnFuMkZQdTlidnljZXNFWEwzNUZZY0N1a3VoU1plTEpLRFQvaHVCanJveStjRjZQeitSTzU4dUFJV25hUE5YRlhvcm55Ri9LdHFzVkJ3REJibjhIR2tIcVpaZHlsUTNCS1AyUzYxK1VPSUNpclhKNFpxcHZqbnJxbHIvQTN2UGlUUm1OMjRLZG1vd0tyYTZBeCtTUVRyUGNKMzZkeTdDQkR2RmY5b3hhWm91Z0RaRUFWUksrdjFYYjdUbUhtZlFtMVkwZnl3WlBROEoxSEVLYjhIVlZCelZ4dXllMXdzRTErSkxBOGxQekQxNjM1VWdkZGZkMlN6RUhmNWs1VUdIS2JaYjRlS3ZlME5WQVZtV25VR0FzMUZmVFZvOWlOZFMzOUcxd0NHUlN3VjdFY0dQdzJuYlpObGtObWRzdlhqVDlLWTNxeTFJSHViK0JpRysyNkhqdytON2s0RVJGTzhEZEx4TXQ5bG0yTnpNSTVIc1RkYk1zdW1sNDVES1pMOTA1elBQWG1WSWRKUW9UNEcwbUFmanAraGo4MFRqQmlZVUpoSWhWMzVmbFl1azZPdXFNMUpOYmVadkt6dklka2RQblFaYkFRcG9WSkg2VkZOdXBLbFZnWkFXaTExU2R6bXEvVFBVV1dWYlQvYUxNZ0dPRk9KSXI1SWVNb0VjZ0hnTXJOcWVkL01BaU0yZEJTOEFLZndubjNlR2xFaWN5ZnQxL0JmbE9FZEoxQkh6VVJidmZWZVRrWk14Zkh5cW1NT0lqNnBBMVBvOS9TdkdLWnlHMmQvbGRsN0hRZ2xOQTZVd0J0MXFBNGVqL0dTZnZhUnU3RTlYMFllendCSDF5VU5sR3BsWlQzbEZycmZhbDIzdEtOd0NXUmNxYzR2S2RCZTNtbTh4czU2Y2gzbWNWT1pBKzgwZndoaWhmTlcxOGJndGt6cmdVellIRzRBeDlxbmxka1I1NWNSUDN6SkxTTXdWdFNOaTlocUxpelRnZ0dFdGVMY29ucnpmeE4xQk41V0dqNWw3TVFpVFZNdFR6YmFYbkJ6WExTV0RBUnQrSjJ0cEVneGpNZ0lpdXJlSHRZc2RWN2h2bDFqcjZNb1NueVNpRWNSUmd4aStkTHZtYk5LV3BKcnJzZ2N2R2pnS2RPZVptRTJGb3YvRWZuSWVPTTYzM2ZTUUMyYktBemU3THJmSXo0M3E2YTZFTlR5NFNPYWdqbzFGTlVkaHJpMDRtTlhDME10NHlReno2NHNHZFJxSit6SnUrRVUvdmpZWVJlWmtLVHI3bDVqc2ZMR21UNlVWbHpKRTQ0STMrZndpeXBXMG45bmxIc013UTMyeTQvZnFNT1ZNSDlra0xMZVBmSEJQVHFTaGdrczQ5WUtDVnZGSUxaYjlKREZYZVlXTjRIL0ZlOUtuZnNtSlZlNmRMbkdYb3k1VVMzaVhtTzhVeTFlSjhLT29BUGVEejR0b1M3dmFKNmdadWhsREpKRXoyZ2pBQzBoYnpjMHArMlVtMmpFTStrbklSV1pqK01WSlp6R2lxMmxySDRVeUhOaE1oaDd5eFlUYi9jeUd0eVVZQTIxTVF0OU1oMkNwOVVsaXlDMlE5ZlZLUzhZZkthYTQxdHc3WUJXaEhqNXNMT0lRdndNNnZXbVh3ZVNQMUNwMno4b2M3MXc4MTFncHNmMUJzSkl6UnlCR2NmYmVoRVkrTGVNeWFZSzR6Q2pPUG8wcktyM0ljTXkyaG1ldENIUnNGUVNuSTY3R3UrK3hZZDFQYllOT0hRM1FOaWRrK01MQlBGdzFTSW02RnA1di84WURCMEpwMG1UVTNmWTh3Zk9QZnZGTWN3S3Q2b3dBbGFLaGVXQ2xwN2VZRDFYY09wYTJXbE52R0VWL3hxRXMrKzZLOFlYSWdZeUQwb0IwUUxEalEzVkZqWE0rUFRxQ0RWL3ZtanJmbWtsYjgxRk83U1BKSHRWd3UrbWt2Q04vdFdiOU5lL1h1QklUN2VIck9PbjNzK1BnVXFWRDRteWRZb3MzcDdZK2xSSlAzdXJxTHR5WENXUWd0QUloZDBtQ3ZRczdaeHVMK1c3MFFyenZZdGlMWVN4T0JoVWlwNnRWSWJuaE9rUlZKYmlGTFU3UkhJMkExTFFETUhlRkpXbmJhcTdPU2ZPNm1EcTBHZGpnZ1ZUTTNlb0ZGM2sxOUcvWURESHFXc2EyWW5IZzNIdWJ4aDlGM0tJSXBTd0JQalB1NG9mR0lTNUxCSy8yakJjTlA3UHd5YlJucUJZUm9vaHFRUDNMY1JXTkc1bUZaWFVKNDY2djNxOUNzbnlHRlRDQ2hKL0dnWDBvSmZtM1RCUzFWbHhCU0VJTE5uSXZVUCtOVjNPZldFNEZCTkhsUG1sS0FMaU5aU0ZJVndEeUxUeUtjczY1QTVSOGQrQ3kvVkNjaTNIR0xzQndXSmVZM0ppMk1GRWNNWTdUdGcxc3UzRDRBTUhsaU40L0YyOTJwdjVpTEhHRDFXTmFxM0hEdmNjMFU2RjVGSFJockUwb2RmSCtZck9xWFM1RTFvWkFNVmQycmx1RFBIUERZcjNEL1FnMWNnRE4xRUFqb01nUmdob0h4aTdNc0ZueUxUUmpQQjZNVUZWc1liWTJuK0tLbXBBMGJDRW5Fakcwc3g1NnNNdFFPeWtlN0Y2VHV1c21HVFo5VjFncytXY3lVSmxUcGdUbkg5ZktFZnd6TEJPVUZTV3RsT0llTXZxVmJIMTA0MXdPRVhCbzdRUS8xclVNbWFHL1poMi8zdVBiNE9xQWIxcEpNWXp0bXFseWpqakt2Q0Rxd2gvYVYrNUdnMDVXQmJNZzdHbTJFbnFueTJHUjk4blJCbjY4eTFqQU9NUjY0bkQxd2h1TFJvK3BWRXV6TXI0K21TS0RjOVpyNnpjN1ZYU2tiWHhSaXEzeU04ZVplYUFsSXh6cktqd2toWURjY2VCY3dCbUpVUWVuK1h2VlFnSjRJVTd6a3FJN1luRDBMcFk5UWFZcHQwdHlhVW9pUzlkQzRSVmRodnN4ckEzN3dEenB2dDlwdkFXTUpjTmh6OTF5anZvSy9leVJiRzJlSkdBR3FFbTF3bnd6Sk9TMC9OZ2pyeDQ0M0c0Z3NUZnNzYnpUSzlObGJEYzVFdUpPNnBrbzVHK2wvbGZOTjdSTnYyc01qYXRtNE92UjlRT3QrYzUvTTNwQk16L2NoRGJVbVpEb2VkN01hRytrMUhIWkhjNW1yWXN4THdscmtuSW05MlBLMWk5dm56SDg1UnBCVDRmVjJic3FrM0JCSHlaYWtkNFZzTU44aktkL1dhc0RNLzVSb1c0dEhieElzY0RSblh4M0pwWlZTb1h2MXVzOFJ4RW5EdjU0VHpZTzNrR2hRQXBqTXd1WDlzdU9maFlMQk05V2huUUlUUlNnQVV6OFl4aG00d0FKNk5kNTFTSzhGaVJpenFKcFdjYWZmSHF4Uk5QcmEvY1d6QWgrTmVLVEs5eWdnSDQySkdzcmNNTnNiSFZFVmlONlFGQURnL3ZhaHJ3bWtTV1htQ3NKZnh6QldaQXF1a3FmYUtUN25hYkVMem51TmRsNGpUbEY4SFp6cWlQUUl0bm1UOHB5UjVYOWZ1Q3dpUDZ2L0VHVy80SG5sVFJWcUVJU3k5RGMvYzUrZnJQUVRjQVNJSUJaTTNEWFFGd2JWS0cyaEN4Z3RuOFNKSC9lTXZnY0wrNENxSlJrMnJzWlVqTUFZTTJZM2xLZGpZSkdDRVluaEFtY3EyTmN5enFXc05BMUxlTFNZNE50VFg1R09GOVJFL29Pd3FSN3dZT2VmMkdDYUVUSWFzRVpMMStKd3ZmaUh5VUJTQlNlYUZ4ZlN5Y29ZVExJVTRaVlduNGJENFU2ckwxTnpDL2dYZ0VuR3hhMUg4bjhZNld2bGg3TWpGMzd4U1RjNHNZTE02NURJUlA0OUFBMWVVVUhYa1NNRG0yQTdjN04wUW56eEtNdjY3bk1WMU9YNm1kN29UOXZKL0xHUUpNd3pXV2ZHUzFHYXhHZkNhQzU1TTE1S0ZGZ2lNcFlEOGEwRjZjbzhIdytnQU1wMjVYWTRVUG5xRUdrTXdHSDluQlBxT3NnaUFoOVkzTkR0ZE9rWkFVN29CTFM2MzBBdy9vd0NBN1lneGNIYTI1VWdwYjE3YkZYWC8zbkR0S2ExeGl1Vml4OXdTT1Fxd0N0bnVGNTJ2bEdoNTNURENDMm5yRE1pcFBuSmZaUjdKdG93WGZPZUFRc3llUFNNWXdNWkcrd0YxWWtycVdkYnV3b0lKaFlzWVl2QVRpWFc3dktBb0Q0N2lKb1NIQzFIRzVSa3Ewc2NuYVgvMHdtY3Zsbm9kNWRlZHJxSGIwT3RYV2NaS1drWkZqS2YzYWh5d3gyeUhwQU01L3BsdEE1MDQ4bFNEd0JwOXFPZndKL3pCbU94K0RLeHowcmJhd1dtZEZsWW95WkhscXhBTC9LS3NFbmFrWEw4b0dIdEp1RTJGdGM2REFLNlhTV1FuVmZxQXE5QmRsRnFGSFowcFV5TkdUaVY0dEVNUkdwZ2I1c1VGcjNDcUdkblJLNGdYbGxvQWhUZjhBendlYXFBT3M1SzhPOE9TdE9ISzhqbE5ubWIxa2VGU2x0Sk5ONHYzUGNYVTlpS3ZyVzlKV3JBMGhiK1hLY04wS05aQ0ZDdU8wRkE2bXdzRVE2M1NkMTZzSGpRVGRYNVdzSHJiU0FxdVFiUXIzVnFHVm8wbXE4Q29EandHbUs3QjI5OWhMZFdkWGs2N0FLME51ZVNJbnM1cERoY3YyQmFaOTdDNXVDOURUU0NQdVNYTXh1c3lQTTJyTms2bHNIcEJVZlEyYVM2d1k3MDFGcmtsWXN2RnpoSlZVTmpwVHhwM0REeTRzS1R3dUFqOTlXWFB5MUJtOFp6SHpXdk5aNi9LMHVMY2VUcWZZMkVUbmM0YndONWRCWTZRMGxlUUsrT0lVczZLcExRVzJlU0NhelV5S1NnVmZWMHpBdXNNc2tHM3IvRGYralVqN0E4Qk1pb2xNWTM4SzQ1T1N5RnIxVG1QV3ltd1pseFhpcm1HV1ZjWlZzb2JRZGVPSzVKZkRXNGdzQklNYXJvV0RJdWhreGlWenRNUFdnSlljdTdxcHR4REhWZjlod1VNaHloTzZJRWVML2paS2NMdzgvMzZka1hHdmN4dkxIRUFGWmJkZHRlZHJHZ3pBd3l5d3dEWWtyUVFhUE13a0t6SmtFWkYvNkwxcnBnOVNmd01OUDRCUENKMmxoVjBLM2YyRHFJT0k1NG1LcTVxSXNWRlRpMVRTUHV3ZE1PUzVIWHEvelIrYkVEbXIveWk1MGJnNmFFSW5TQTd3MncxNG5jTVlXV2dXZENucjNydUdWdmRpTDdSelRHT3lvOUVpWHl6V1R1RERzSVpVWWFmSCttV0oxMWp1T3pQTXUvNERFN2dnS3pHbmNFN3lFemhGTVllS2JTeDBjU05VSUhZN09aLzhtTGEvTzFzaWtSd2RRUWRpcHptNHlxbTRJTSs2MkdYNmx1aysxK1JidVdFditTMTdMN2paU2loVkdRdm5QZUVnQmVyazR6N2hzUGZUc1Eya2czUCtzaXEzZFFpR1ZuNng1TE1SaDBoRXRhbVdhZFRLcDk2ckFid1dKemhaYjlvSkFWQ09FQTdHejhjdjA4SkRkU01TUnJNY0hjUDdzcjJYUDdzWnQvczl3VjVRQlJDQlc1dUlFTVpJU2xIYTRyaW51L3QvTVR4V1ZzWHVhVUd0M3BMTTl6RG82V2dXTEVuY0tGOGk5bWM0YWpnWlZPNmpoaExzKzlOS0N5VXZvNzBhSWd1MU9IclVQMFpTRU5oMlZrbkZ3SFRmTWg1MTRTdC9mMWxjRTUyNDFLNGYvM3MrTVFBbkpRNks2cGV2NVJ6dklOalRsUnpXSmFyZGdhSVdXTUY0MUg1NEdkZ1p4bGpBT1hkVkt0VGxkVjd2MnFoaUkxem9uNTVWOUMwYk1EbVFvcy83VW9odU0yUUlQR21FT0tIcnd2cnV4UU9Ua3p2bE92VFVGNkFVVkRnUTlYSTRiWUgvS284ZUdDcndEam96WkhVZm1Kemsvc3NTUnNRQkdXK3Ivd1E0b0FubVloQms0QTVKUHNEL1Y1ZDFmTzdiWWpHajg2amtJQzR3RG9vOEl4OC9MTjNzcXAxbE9oYzNQbUs3Z0xoNkNrcjdDTGw3ekFYcXJxZktOTE9tbTBNTWc1bkQ0eHh4K0l6bmdvUjRoaFNSTXdRNHVsRE1TY2ROUFM5OEd1R2pWcC9NYnVNU09NRmJESUxmMHozZFdLbVpUV015d3dxM1ZkUmR5Y2IyVGovbW5UalVVbU5ZQ0VmK2E1czAreXc1Nmc0MzVvaU1EZ1pnTUdmNjRVYTAvUTgwdE9QVUFKSWdlNmd0aHV1UW9DMitSamdiWENJMGFUYS8zekFOeTVkdE5HNHBXTTErT2Q0cGNHZE92cElVVmRsekdNVEhGcmVNblVXaXdRcHN0MEhYS09TTUNQNGlsZDkyaHY0L3IxNk9HR095c2ZXN2dPSzFwVTNuNUI5TnMxL0trYkM3eENIU0MzL2ZsbnkyZmZSVThQa0tleEQ0Q2I3WnAyQTBuMVphbDRYRE1kbTRmMU92RGVzUFBTdmZzUXZpUkVTNWdWeVVhaVV3Z01lUzVWWDVkRFBPSmhvQ3VXMFU5ZmJlaTRLK2ZIUnAwbWcwRjZKMW9XeVptdUtpY3FLWjF0MlZFYzBDbDhYSmVkUnZ3ck9RVWt5ZVkrdSsxNWpqeklSQmR4cmozM3hoSWZnd2pVL3BSZVB2VWViNXBQT0dadXF4REp4dVMxTjc1emJOcnFyL2FVK05lTlZOUU5DZGVxRVJXNjA3Kzl4cVpIMnB1a25YZ3dxNm1UUHJoaTBSMmNTVHJOZjk4c2xsLzE2bTRhUUlSMzJDREFuMDhlSUUyVG1BbHNTSDVhTXRFM0FETEN4YlloTHVSakVuT3V2eXJ0ZWxjeEZGUjdINFlHYTQxZEQrSTJrTXQvWG4xb2xvWjhpL01ZRitqWXNDVlRpb0tudHNYdUhrWHlNOGszWmVrckxZNlVmS0RaUmQvQzV6bEppczNESVplb09xaXBxNHI4cE13VFhDL3k5R3FiS0prOXlrTXptN21BQ09IRzVxWDVLMTdPMkRRRGVpMGMvK2RiUUNLTnVXbnRBRXZRb3oxYTdXNE1rR1Z1V0NhMXVrV2FpRS9pSDdwd3Z4QVlMTFVJQTlHQkxoM0pvRDNGUU5qN3JWOHlOSU9BbTZKaUpYNFloVUJZR2lsaXJzMWI0c0ZzOHAvYkRTR2ZjQXFDWDMyQmZFOFQxclpnRnVQaEdoRXVQVXN6dFFZOEFISG5ZQUp2RWNKMzFjcnhmUkRTNWFEVnJQQ2txUlJyc0lxMFVaNnlraVdlMmluekQ4TEZmVFhET1JHeiszOTJoUDJYRVRkajBPOEZ0NEcxY2hXaW5HWVdKMXQ5NUIvY24vYmhnZjAzL3dqVnptOGVVVFJxdnpDSmN4dVVPQ2crd0Z0VVA2emRRb0NVTDJOek1MYUxBMWt0d0lvTS9mVFlGOWd6NFc0eEpGWCtiaC8yWU9sWjhEU3lsMFVXRG9QU1JKY0d2bms2MjJ4VUE0QnJJK2hmdzhDS2MzU1h3ZUJYTkVXQVhtUHBqaWkvdGRmUlB1MVRSN2tDeHhEL2lrdk1CSFB0S3o3NGwrbFhDMHJqenZGLzBJKzdNaEQrdDZxWGhTVFZndUxmOWJUaG9WRjhaem5SY3RXRG9JU2hCdGlQOUFNdWFoWCtBVnhPU3hBRERXbGJFTFpxNi8vdzJabmx1SjltbVl0Y0RYOWorR2dVZEx5RURId29zSWQrWGVXT1dNWHVBY2pwYWRQY0xEWnhBMHpkUFIvVENXUmFBZk5TN1AvdlJCa3loaThtNEdwaVN3WHUxcC9aWmdhZXlJdjdpRUhyUzlyclZBeXdqYjVuWjhrQktJUUxVMzJmOHliS0gyQVlPcTNOOXQ0b3UyQVFCQ0dMTkl6NFc1Y1JiMkR6ODNQWnRPRjNWOEVWRkZrVE9hMXNJMnNLUnBXUm1GczV6cVhqZUJscnQrSEhka1FzZTJpUGgwa3JRcXpFcTJFVlV0dGl6V1cxbnNZc1RtcFVMWUpmdldDK0ZYaWsrWGsxVm5rbGREWmpoS1RRb203OXhESSt3SWZGaTJ5Uy9tblhJczQwRmhwTndmaE1uZWJoYXdsTXY0azM5QVAybHYyNVNEakpvNGE3QnJqaGQ2MERoUVlicGlhU2lkZ1RMZHBWNmZic21XOFd3ZzVXVFBYQUphUi8wc3NNRU8wbWlOcXZGVDd6K1MvaW44c1BtdlA1cjQ3dk9PMXV4UTBHSFZrSlByeSt0aUs1UFJoWk5XZmNyRyt5N3RaU1ZRRE9XOE9CTVJzaGZlUkEyQ08rT1Z2S3I0ZGZndkR6N013ekJkeVhMa3ZTUmlmUzhwN3dOUXp0L0dwSGlvT0VFUkpDd2w3ZGFNMXdSN2NucWxNbUFtZ1Rnb2dxSVVBL2xGNkg5b3lGODZMdW5LbUUxaUpMa0dISFRHWit3T05hN01LRWRJREJzeHRja0pEZFlIcTBNZ0JydkVCUVVHeTFvOHBEbWVuaXM4TWlzbTMxYXZzV2N0RUEvS1JiZXlUelMrREZORDl5aXloTno3VEMvcGNhOUFwY2lXSDVuaE8wQklmcVhzRGMzbXlmNEdCL0ZtSlorL0I1ZEZXVEFlcDFmVDRwNFBSMGhpRHF6c1lDNXV3REVLVmlZQ1lDUS9nQm51M2p0enpab29jWVpQNXZNOFArL1NGRHZRMG1ZVUptWU14N0xZbkhSNm1abHlTQlJZWW92Rmp2ZjhuMURiakUwbWI2T0UvdDQyOVVFYTNLK2lFcXp3TkV0SEhIMjVzOXpTaUcrSG5PVnpaK1R4VDR0VWxsRVlVZzIxbnhzeDZjbjlLdDkwTzVFc2p3WTVvUFBxODFxVFFyNVJvYUtlT0g4a1dETWwrT1A1azJtVU1RSGMydEtZVFFDNXEyZkRlT2hDUHhFdzdCMnY4cURlMnBNc3B4ajV3d3dQOUNIdER0QWdPMFhKUDV1clZoT09CNTJSeC9kSDZEajluRkdkZDNCWmFKaVQrVHgycDdpUzczNHlNMGxzekdWQ0FtNGxIdEthUHBKWWlyaGNoYnJmWXMyWU1sc1pxeDNPUFJEdmg0Q2JGQ29HeTN4QkRoRkQ4d2RKYkpCMGVYdzFnbVA0cm40L3Q0MUwwZzB2UG1pbTRUNmVEblJ5RWlTT1A5RE9pZGxDdDZtamFseS9uZC9vbXJaM1FKTDRubmw5WFB1VjlXK2Y3Nmw1dWNxcWNxbjc4U0J2U1JodkxqeW5yU3VidjJUa0VkdmdnTlpIeFdMM1BuOVhjYXFET0F0UVNYVmd0VURwRG1lTVRJOE9ERExVM2ZTOGtKbEMxZEFtUVVlWUJhcWZTM3RDWi9DRHZudXExeHc1aHkvU0t0L2FaKzd1NDlQcDFwVXhDMFYybkxaYXRGSm9wZk9BcXVWbnpqTWVSVlUvR21oQWZ1cGtvcWQvMW1SZ0F0WmZmNFo0Y2M2dFdjN0NwRndLSHFvdzJ2WDhJVjB0OC83THprUC9IYVB5UjlFRzNmMDU0anZZS3dwYWczTHM4dU9jNnZKYUpxd3pOSWI5bE9zT0lXZXN3aVJIMlpjUExnZWhUbk02OWRMZE5NVTlvQzRaZFExTW9oVnBncmZqSE1sSm1kN3pDSVc0a1JuSVVGclg2VE9vUnA1L2t2V2tWVytmRUNRckZrRENPUyszS1YzSjJOZzVlV0E1QmJ0TzA1ODhIZDNyQjFLcEdha2tKMDY5aXAwaTFERGFNc3MvM3lEdHE5ZHl5czIxWDRiTlZRQnBTMlZicjkxOHNDUWNZK2FjY3V6ZEYwSFhtc0FIcjc4TGxEUHpKNmQrcHdENEtueG5WUGsvMk9TSUx1RU5FcC9uaUt4L09DeUxLK0RwdDZrbDZPbjd0eGZPdm5Bc3duMS9RS0JZRzBWeVphWXBFaDVlUkJXUDdMbFRFaU5YTkdjcGo3RE56SGlaWlhRNWk4WGRQT1NWRnBTRG5tcGZJMVh6VmJPQklEMGV4YUtjRTJML0RPU3NwL3dOeTl3Sy9lZ3BZa0x3cGI2d2xPVWdqVmxGcUlDQWcreStjMnhnMmZsYzB4bngwRi93UTR0Z3ZLc1ZNalpJYk9qb3N3NmxkR1gvR3RKdmZodkhLWXMvS0g2RG4vQzFkSDB6Y3VOaFdtMHFJZERkU25JaUdBdjByZU5OTTREcUNmQmdyU2FZci9BbUlHZmo5dmhGOUM4WXpPdzhsM09ZNkRuVmVXRlRpZi9aQUFFQUdnQkFBQUU1QUVBQUR3RUlPUUlBQUFBQUFSOEJza0FBQWdBSkFnRUJDZ0lBQXdBWlZHaHBjeUJwY3lCdlppQkdhVzVuWlhJZ0tEZ3A8L0JEQj4KICAgIDwvQklSPgogICAgPEJJUj4KICAgICAgICA8VmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I-MTwvTWlub3I-CiAgICAgICAgPC9WZXJzaW9uPgogICAgICAgIDxDQkVGRlZlcnNpb24-CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvQ0JFRkZWZXJzaW9uPgogICAgICAgIDxCSVJJbmZvPgogICAgICAgICAgICA8SW50ZWdyaXR5PmZhbHNlPC9JbnRlZ3JpdHk-CiAgICAgICAgPC9CSVJJbmZvPgogICAgICAgIDxCREJJbmZvPgogICAgICAgICAgICA8Rm9ybWF0PgogICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5Nb3NpcDwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgPFR5cGU-NzwvVHlwZT4KICAgICAgICAgICAgPC9Gb3JtYXQ-CiAgICAgICAgICAgIDxDcmVhdGlvbkRhdGU-MjAyMC0wMS0wN1QwMjozODo1Mi42NzFaPC9DcmVhdGlvbkRhdGU-CiAgICAgICAgICAgIDxUeXBlPkZpbmdlcjwvVHlwZT4KICAgICAgICAgICAgPFN1YnR5cGU-TGVmdCBJbmRleEZpbmdlcjwvU3VidHlwZT4KICAgICAgICAgICAgPExldmVsPlJhdzwvTGV2ZWw-CiAgICAgICAgICAgIDxQdXJwb3NlPkVucm9sbDwvUHVycG9zZT4KICAgICAgICAgICAgPFF1YWxpdHk-CiAgICAgICAgICAgICAgICA8QWxnb3JpdGhtPgogICAgICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24-SE1BQzwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPlNIQS0yNTY8L1R5cGU-CiAgICAgICAgICAgICAgICA8L0FsZ29yaXRobT4KICAgICAgICAgICAgICAgIDxTY29yZT42MDwvU2NvcmU-CiAgICAgICAgICAgIDwvUXVhbGl0eT4KICAgICAgICA8L0JEQkluZm8-CiAgICAgICAgPEJEQj5Sa2xTQURBeU1BQUFBWUhiQUFFQkFRQUJnY3NINWd3Y0RCNFBBOUFBQUFBQUFBRTVBRUFBRHdJQVFBSUFRQUlIQUFFQjlBSDBBZlFCOUFnRkhRRVlBY0FBQVlGYUFBQUFER3BRSUNBTkNvY0tBQUFBRkdaMGVYQnFjRElnQUFBQUFHcHdNaUFBQUFCSGFuQXlhQUFBQUJacGFHUnlBQUFCd0FBQUFSZ0FBUWNIQUFBQUFBQVBZMjlzY2dFQUFBQUFBQkVBQUFBYWNtVnpJQUFBQUJKeVpYTmptY29BQVpuS0FBRUFBQUFBQUFCcWNESmovMC8vVVFBcEFBQUFBQUVZQUFBQndBQUFBQUFBQUFBQUFBQUJHQUFBQWNBQUFBQUFBQUFBQUFBQkJ3RUIvMlFBSXdBQlEzSmxZWFJ2Y2pvZ1NtRnpVR1Z5SUZabGNuTnBiMjRnTVM0NU1EQXVNZjlrQUJBQUFVVnVZMGxFT2tkU1FsUXdNZjlTQUF3QUFnQUpBQVVFQkFBQi8xd0FFMEJBU0VoUVNFaFFTRWhRU0VoUVNFaFEvNUFBQ2dBQUFBR0FZZ0FCLzVQZkV2QVVPNjhJZE5rMmtDMVduUW5pOS9Ga09aQ1NzTVJBK011MUxYWHAwNVhFSysvaUtaSkpHTXZ4L0k5SktOUkZLWURVQU0zWDdiV2x0a0VuZ09JQXVaRTVhcGs2cnIzTGlPdDhtRTZtR2d0Y1hDcUE4U0FqNkg3UVRLK3ZGWW5yemY4bHJKREh1UG44Q0FBTE5xSTFBSm5pRzRMVWlqQnI2THRubHNOVXBPdCtPWGRIREx3ZWJnLy9BOFpzWndCRGtwcVRJRDI1M3lSaExCeG1KcStvcFNicGxCVFFnTTFiYThia2dOVXBwOTFQcWE4NCs1Q3ZBNmVWbTdtRzlhaDkvYTBoNThhRnVVQzdURThFV3FMQ3V0RXZQY2NkaHFXZjhwNG5xRUNsREx2eFR6ZnlCemRyWC9TZFdVbmUzVG1IeGsxSDdNb1l6ZHhROVpOV2VJR1QzeGNDemhrUzVlZmhjNkdYZmFrd2orUGhZUmUyNWs5b2haenhnTXllbzhVSVdTbDNLcE00czFpM3JxYTZzRXBJS2RQa1ZGTythSWR5eUlzY1JINVM2ZDMxby9nYm5HeXV1MTNhcWhOTmdRTDhabDhacDh5Q0pDeHJsM293TnBwYTdEQllJV2FTcXVmZ0x0WjFJUkFlSmp0M0V2aXNrNnNlL0VUTGpkSlErTmgrZ1ZIRVZRSUZVYVpHSW9oYjZkUzVUekVaQnIzMFgyaElRSW1wcTYwd1JEcXBPWFgvTU9FT1NjNHYzdGJUWXJIbWIwYWpGNlQ3am9jbUpwcXpKOGtpSHNDTXcvdUxRWnlyK3NUK0FrenJ2T0J4VnY4TnRBMWcvMzUzTU5yR3VySmZSZTBzUzdCRWcrZkhqNkNhTnBqUW52WUp6RjRKZW1GOElWNHF6czZUVUM4VjU3bjlodC8wN2N0RHZ6YUthdUNaSVA5NjZwdHFHQzhuVml6NGFPSVg5WFdjTTg2ckYxU2d5MjR2aTA4ZVZyd1JmclhQem1OaXQzRHprajRkR3FqN2lQRjZVV2NVR3E5ZDVaVDJlUnVBOEQ3NVM1dFlWL3JpUkhrNUV3dG0wdkp6cTk1MlcrV2xJQmdUUlB4Z3RjQXpmOVJxaVRURW0xOGtyQmNYcTR4UWFyQ1ZCVEZDV1BVa2l5RG5yZmNvWmsrRDgzR0dPV3A4bGtYTC8yTUVIUnlvdVpjd3UzUmw2L0NvUmxKNDlOc1ZTTGRadkRQWmdjbFNHcVJPU2I4Nm9rY0Q0dGs3V05ISENIZXVsOEtZdmZINUJXeDg0QU9OdzZXWDFwVnllQ1FzN0JhZnNiVXA1cU1GSndTNkZSWXlia2xKRnZ4ZUhONC9ISm84T3VaVGorcTNuTjI4SFJCZkRiNUhHNlUvVklKRml3bWxmcUpMNmRZcFFZa1ZnTmJTeXN5d3pBdDI4cmF5NHZ1emtYb2w1ZndDdlN6TmNjNTFOWFE2M0R3UkFxU3FjdjJ2L3BqTGZWb0RwaGdzbFJoSzA0b0hLeEhmZ1ZDZVJwdWNQdmE2U2s0Tm5IdnpMclJZM3MxaFc0VkFleGlwNDJNR0I4eGxER2VveEtwbFo4dmhYSjJWY29aQW5wTzR0U3dFZlpMcEtiUXJabUR0K1BnclFyTjlpV25HVVFldEVrdEhYMFQ3QUNtZ0JvYWg4ekJUMGs5YU1TZk5yK0U0MWhTRDUyeUQ5MUpvbjYyeTNEQWFXVWZWeXJJeVVsQnJ0ZjNkMm1xNGZaL3dLejNqYkttTnhLRGFXSUJOdTFhcld2Y1BldzBrTHpQZDRHMHlmV1V4NVdCMVlQeW9WOHlOZlFwUVVtN3NPejg1ajdXZ2w2SjdYU1JQNk9IWTZ3cjlKL0luckpab0Uxb0Q2TDQ0Qm9TRllUemJ3R1hFNTNVTEt0MVpUM3pjaStqdVVDbis0NjhJaXNYbEhyUW5CTnk1OExCeHB3YmV3aVJDazNaR2ZWTzh4OG01bnBPOHVhTUhPc1YybmV6cjgwejFyVDlDazBZRkNTWWdpaUVTK0dOc21EUmV6QWtpVUc5bFNQUWJ6V0U1bUU2cmpLM0FWSjFMMnZiVU92T3puSXV0YjNoSWtLU0Z4MUh1TE4zUGV1K24vV2RVVEpUdjA0elVqK0ZpODRkVHFaSjh1OFpDS3ViZmgvZi9LRC9MQVpUeWhtajR2RU9JU29qOTU2WUsvZ0J3UDBJM05XVzA4QU80VjUySDRMdWliQ3g4LzFYTytlWjYvM1hOdGd0ZlRDS0R4SDhMd3BqODFBdHpvbUFuREZKbTYwcDhJeitWUlI1eVBJc1lPaWNHNGx1UVVSU1dUZ1M5aDdHekVpekVranovQ0d4S1RIcGtyM1NneXo4amFlQ0M2aFVuenl6MUtoL0g5Ri9KVGN1RTlsSjgremJySmNQZzNSZGFsWXlHTjJUNUp1Yjl5ODBMMkQ2d0xuVUwxbnFjb2R3OW1kZk1LM2N1NHNnNDlsS0RtZkhrc29rQ01nMUp4Z0RjQ1NzcktzSGpGSnk0cE9QM1dtQTVHdFFrRDNOTzd6VzJ5cWJ6L0ZhSExQZE9WUkJTMzViMzNkbm5OR1NLZ1YveGl4OVJpTTZnRDNWZFZyek9vNWxSVmNXMjFSVHNhQ2p1ZEhFVnhZaFZlR2s1N0g5R0lRQ3d1ZXJZMCtvYXNra081dkJJZDgvbmQzSTRuQjMvUnVEMktub25nV0MxcXRwUjJjUjJ2ZUdpUlJxZSt4eVhFcjJCU1BzVDB0Wk5zbkcvQU1Ka0JheGJxSkdhbktmbWh0aTh0dGVVZmtiUHQzUlVzTW9GTVRNekxsdVhFZFExYndheDhXTTNPd3pKcmVkL0pPNXRsM21wTDNmOXZjQi9tYjdtK0ZUcE91Vm05eDlpVTVjYkJjb240SG1aaWJTY2RROGcvU0hWbnNsL0dNeHhRMXhvdG04UEF6aWlXcWxEdDNtNG5ocis0dXBuRnRWbjBLemJhZ3ZrMEJReU1UMTJIc0RHVGl6UDJMZXI2QnRwVnlacVh3NTMyMVhqU0hjRU11SGE3NmpiRWpUR2lJT01XdUNIZUkvbmJKcE5jQWJKSEJLSEI0OHZVd1BuK2pPV2tTdVBlRDdXS3ROc0Nzcjh5eFZKUk9rUEtWYnI0VUNROXJ1VUlMWjFpSC80TzlWWlZuZkRrWUxCeW9Rc2orRk1XS2ZBakttNGdpV3p4b1dCYUZUWlRVVDJqODlmbkpQdk1xRi9VZEpkeE85alpDWE5YOHNBd0ZvRFNySzV3MzhiL3l0YU9tRVp3dlhteDVRT1MyUHVSNEdLa0IycHdnb0w2Y1BQMnhZT0c1bkJsVFE3Smx5SS9zVDBIcEVLVm0yV2FKTXB4M041ZWF4c3h2YWFpU3VBeTlUbDlEaWNIYUtndWJvcTY3TDdQRUJwZkI1Y3VaSDdhdHFrZU1aNUhHQ3NMSG1WSTQvREpQV3FMd1hTcTBTWDJHeGpvbmFKRWN4bXVraWptT1hCN29NOElFV2dUM0h2ZGs1MGFiNXBmUVhDUEpwTWYxUURWa2JSOTJvRm1LSDY3TmFLd09kWHdnSDVKcFZUdnBkdUkxZmtkTFU5amY4N2lEWnFUK1dMMUduZ3JCTmxIVk1SemJEUG9NTFFRYzlRZ0tGZmdPZFQ1NmZvNDlXNW9EdUc2S2RBTVhrRzQ3YmxXdUZienR0bnRzdHBZTy9aUnBLby8wN3lxY3F4cXZybkhRWkVaREJKYUdKdmJJV0U1UlpMZE0xeVR1YVpnWHN5MGJrSnlTMlNzcExzUUZic2JlYWNtNTdpbDdjQjEyeElKNVZ5Wm1qQVlickRMTWU5UFd4bnpKN0QvajVTc1p4Z2RXemJEaW5jamdEWlFZYk5rbGNsQVBYckEzK2pieHZWZlRXZXpibHRndmJYVkVPUVNDdElZUk0vNVlLTUlGN3VqVmdaN0Jrd29aK2tObk11REVTdXk5SkY1TUtNdmduaXFFM216dmRvRnlhUjRPclhWczdKTXRWWWZBN0JnN1FIOWpHR1FmS1JHSUFsZndrd0dKcjIwWkFLQm5jTUJCTUtGb3dhMDdxSzlVQXNhMGgyQ2xQdlBQZVVXNHNuNnZydkFOVWdoZk9XMFJPZXpoYlNwUkN6RlRSNFlUMjF1OU5vZ2JRaFdQUS83ZnBiZjhaQ3dBMHZ1SzV3K0lmTjZ4Y3JRa3k1YkxHVlRPcnVRNktkUGRLM2N1dlhiRzhDWnBUVWdjL2tqcFZ6Q2xXWndDZUF2eUxyL1NvRVBHSUFKWDduUGFnU0hOYnkzZ0JNcXVOWmRiME9WRGdGdngvUGJKMi8vbkxrbDhSUjNobTFPQjRRSlovRUNiY3BoSVRPeG9XK1lsajlXSDhmREUvYkJvQzcrOTlxdzhvU3p6ekFBY3NEUGQvd29RbVBQOVhDREozQzdIZmdNcCtiK21iK1hvNk9BUFlWb3diT3dzSUsveWJpbmhHcW9Cc1hsR25VUnBjSVNQbkRBTlFSeXpuU3F6VEhNRHNHdFdaWERkVGpBUXIyRU1GUTRPbDZnNjQydDcvK0pRWmtMUmlOTGRJVnVTVjJFNWlqeWo4b2lpMWZDWHJNV1M0WnI2ck1zV2Y4MTQzc0Q0UytJaXhFSklobVVMb1Jpd1RLcGhCa1NtUVFoY1ljN3A4a2ttNExYTGdzVWlxWmtNL1JCMVZid0U1UkhpM3NiOFZXL1ZOQVNBdkRqdFRJWktRbVFaTXVJL2hNUXp2enppSjhnWEdrZ2xhWkJJeHNRS1VubUh2c0ovYk1kb1A1YXQvcHVDd3M3NjNwKy9YOHE4UDd5MlBocHFOellHT0lWU2pTemJlY3VuT1h2WFowMmpJbWw1R2tsYTBYQUJpMVlncitSZVhPWTJxY3BvOGxMSURWbEpianhKVmp6OXVydTZjREtrRk9FK2s2VEF0Q08zaEVVek9NM0ZscEJ0bE1zaFlxMitnUVVyeHZSbHpqK0Vyb1N4NDRNaUppWG5uckhzM2xSemVaaExnZlpBRWtFSTBKc2ZBc093dFprSEdPM0tUaWhyQm5PQTNnL2RIVGZnVWUvTWZrUkVqVW5iUkNUQ1V4UzdEL1NJcTR4QVBvN2lDT0s2QzdFUndnbjV1K240K0syWTRrdGZXRHdEUk9XZnZoTE5kTUZ1UzRTcjhIMzczZElpUE80T3k4bW9WS09POFEvaVA2cGh5dkJocSt5Z2p1ZnRReE5vYXh2clVpbW5UeDh0aVRCdmVtVS9qVFcvOVhRM28wbzhRSis2TVo5c3E2L2FxRExaOXZTNy9RTCtvMG94aWsyS1loK3dwSk9FMTQ1Z2dXbWZGSjYwS0pWVkUwQUh2REpJeHR5RmRJMmdoYUJNcnBHVVgvWEttQXZiZUw3TnNyWmxwejU0bUpWNmswR2pDZGVZRkJIQ2ZRSUpid1ZLa1U2L2VLSW9RWVJoajBwWHJzcm1qdTBlM0FUVWNPZmFKenJDS2FYTHE2WkVpR2ZOcm1CdVZISGgrQzZvYTBXQ1dJa3loclV2aEpKNXJYakN6VDJhV0tRVDZoc2V1aWV2U1pKSUtuUWVwMXlWNWlIZEVpK1N3NmdJQ2RtQVFWZG44VmRuMGNGOFBIMUp5R3AzTGNmTzZBVlN1cWl6b2lhdzhUaXplenZIUUZkN0JtT1U3dG1ETHVYRkZGVjFFa1NiYUZMOEFaMFlNVFJYaCswaEZLU2JSK0NRbmwweU5FQU1lSGpoL2ZIcWhwdGdVREREOWxmT0hqNW1DQ0ZSSWNqWFd6VHpML1ozL082cUx4MEYrTi91TmRNSjI2TFdZK0t0emxpRFVkb2N0ZnpNVG92cVpWVTAxalMyeWNTYzFmZXlrQUd6Z0tybnYrSDN3eU9JMmxGNVZOSVdIcjFtNk1SbjQrOGNJekRZSFA0WXNOWUhMZ3pqZE1rNk9sckZHT1FsTHdFNTVOdVpYanl5ZkhEOTQ5SjlYVTdJUDRqS3RHeTNPVHZ4TWF5eWNUZ2YwSnNEVDRWUUtQWjZwMVV6c3FUYmNuZkFjV3d0NERXRmZTSWNoOWlGcCtreGxERis5UUtFY3J5YXRjZlg3M3JpUUU5NHNuY0MzUGk1M3R1b3p3OWtqbDVPT1h0SHRQa09xRW1XRWdWQ0R4R1o1c2lPQlFhWWNxS3c5N0toV2FBZGYxVVRzL0YySXVKUUJXNndNYUs5SHFMRXRoSnduUHg3dEZjaW5KRkJyTnlnMFIrbzBscVRZSEttSERPQkhPZG9rc2Fnd2lPblRuTFA5QmZNTzJOOC85Q2puMEtRL1d4Y0E0YTB0QzNuR1F4VmgzQWcweTlpT1lZVUpVMzB4YkUxaFBJT0hiRUE5NStMenhwbDZjS0ZBTldmNUtPbmdERTJGWmFhbHNkM0VFeHF1Z2tQbHZCV2JpdTFPcE9VTm1lQnBDRFluRnZEUDVJNlBTV3A3cnlYM29SUFdvS2NudXoyQzdUcGhadUNrcVk0VXB2alRpdzV4NnAwY2F5SkJKL1hCYVBCWng2ZFZGaThtUzAycUlzQjkvRzVWTnE1c3lkNldjOUZ4WUdvbnlvTk9VRTJLeHgzaGQ3QVV1Wm5hY0JDRDY5amM5aEVSSWs1b2lPWE9LMklXdHR5Z3lhT1UwRzFoTEQ3YzdieVdRdUFGMkVESWJDU3dPRTY0VzMyL0FLQjNVRU1DLzFQS1c1YU9rOTk4b1QrRUxjbGE4Z1dhTC95anBxb29FejVuZUU1R251emF1d2NOcjFkTmhOYzRnNkRCVXlXbHVFTGYvTHpVeVRKVFppZHA0dUdnUnNVc3N4QWxIc3NEVUZPUmgyMzgwSnBkL2FZWVlQNEEzSzBrTHBIU3lwOTQ5cGN1RU85QUVXejdna2ZHVUxqc1g5Yzg1QlhsRVdTaEJONHczNU1WWlZhYUlFNWFSTWlPZ3YzSk85QnJ6c3NPeFJSRC9QYzJmVzlieThVaXhmQ0JmMk16Z3dEdHp2YUhTR0hxM3NFVkl6UWRSclVKMXFaeTM2U2luQTlKb25IS2VEaDlZYlNYNkdxMzM1RjBCYXpNbUJnb3FIZ3dQakkzbisyR1pIVVpORkdjUmVSTk9BazVTdk1sZjVlQmVWNTR0SERWSkI3RGRwbXBMNXgrUmRDQzZWQ3Vla1lValU4VDJKOWsybnJVRlAzYVRLNkZYRXgvQTRscURyYVFlM1BkSG9YL25kanVvdit0ODQzUDl5Wmo2Vy81VUdGZURvTHgzQ0pvdWhUeUtLQWhhZHhLME1uUDVSazFIRVJkK2hPa0JNOFBpVmJZWXBnd1JwSUZRTC9SamYvbC9NVlhzT08zeW1HVm5BN3N2S2xMYUx3VEJSZTB4MWtyczhZNklEYU1UOUNmY2pyN3U3NUdsbmtld05Od2NlVzZ3Z3poU3Q1MVJZK09rYUtjbmhQWVJLeGVlOStqMk9oRjBKUHFKUUlzQ2ZoYUYxR0lmRWpQbDlBMHIvWHNnanBDYkl2eFg0OHRaTEEyZStMVTB1bEcxQWlQT0UvYll6MmJDeStZcGdxUmdKejNGd3hob0FaNWlvazd6UWVFYjZUWlFlM2lGNis4QlF6ZGZqQzlPbEZyR2w3ZDB1VEhKQ1ZxbGFhVk5Ea0doZGg1RGowTHc3d2xBOGw5bks5R1AyT0Q1UGMxbWRVQkh3MmFYd1UvekdSVmdnNDJnbHRsOHBvOXcxWGV5WXlhSGFSemhqMisvMndOL1R4bDF2TWtjMFRWdUt5YnZ3ejlYZW0xMCtDRTBLUVBERUh4c0pqZ00xdml2QUV5Y1R5Yy9TLzhOTG5VTzdVcHd0QW0xaVY3Wm5TMWw5Unl3RUV3cVU1dFB2Um5YNjJMVzBRUnBKR09Bb3g1bTRFRkV6N21Id1ZtaEgyZXZVb2VOc2hzV2ttNW52a01kSGVZekxyRjR4N3paVDdid1ZTck9QdXYweWcrdW0yWVQxWXBJa1BTVGhWd0NhaFEyYmxTVnNLZXR2NlQrVlVJSXlFcmZBSStlcDdIN0xaNkl6TlNaZ3hoVUZiOVZldGtxRlRySENnYlZuTzJhTUIrdkdsL1JsNzM5djl3TVlNNTVkcm84RSt1YUtKR1RRRkdzOEtTMUhIZHVXaE1tcEU4cVBwc29KMlQzWjkvVzdVTmd1eWQzclVyVEJPaW1ISnd5Vms1MVozR1NudkFtd3Nra040Q3hlZHQ4SFNNZUt0cmh0L08zYnRPOGhlMksvNFFlZ0JlcndOR01wZGpFb1NlV0lYQnZQZVBKS0lqUUQxQXZuRUFuUStaMGFMQVhSd1pJeVBxbE9kK3BlL2dnNExjRWVMcGNKNjhTR0NTYTlqbFhjdzFOaXg1TXdTT01Md0tEUzhaczIxVmJzbWpMNEJ5czZoVFZkK2c2UDFNcHBTV3hhUUw1SnBsZzlOSVI3YmhLVmtWdUtzTVhJekcwVDhkUEJMYVBvRG13ZjB5cDgvR0FBWEdCWTJncHMyQnB0STJtSVFuRTdpK1F2aU1wbXNzQXFtWmtDR0Rmd0dKVnAyZWEwRnJJaFFBUFVRM3Z0eEQ2Z0ltZXpJY2VjbERVdkc4QitFWmtrN0ExVDluNjBpZWhDN2VFMEltby8zaU02cldtMUJlekJGZlh6d2RyUlBrNlFlb1BucjZGMlNyZDI5N00vcy9pYzRNSDJGVHM4eGF3L0w1cFFkaExiNlNHUFE0cVpLbGpsOWZKOW1ETTlsQXNBMHZRMElIT0RZY0t1SXM0dndycXZiUlhyaWZ1OUhJdUUrR1gyeXlqOVVQSmhValVhOE9ORTJNNmxyamtGcjNBSDdVWng1b2NPSEpVdGVCaWh2a1VPZHREbEdMbDdscVMxRVlPdlZBeC9GWjA3RDI2bkJaY1l6aVZ3RWlqb1FSdHJqNVVOSm1CZVVGZXVHdmltMnFLSklYWllReXJUMzB2ZnNwQStHdTRPa1huRmlCYUMwTnVqK3lteit4Y0U4VDBLYmQ0dGlGcnh2ZmhMdEIxSHI5bDAzTHJIUUxvazdCRFlGQ3hRQnRPUm5UeUFqZGQzT2w2ZXo5YVhtc3FDaGdGeFJuWHBkQWZDV3hRVzM2bmdkWHBjTnM2azMrWGRwOGE3d25Ydi9tcFNrL29kaUN2WEtiUUFFYndNQllUd3Y1b3Y2N2I0UWY0b25vMnRKeDkyRVUwaDlPcnR6YjRQZCt2L2o5R05WSklsL2RUSm13OWRUeUJXdzdOdGRuYzQ3VXhMbVVpbWpCb21jQWp1Y1ZhYjdQRWtzN0JFUktBZ3lmMm1XL2h0endNKzlIN1Bsc1FTZW5QQkYzUW5PV3FRQmZLSWFibEJxN085d040MFREQjJmRytFMnlISDgyMWI0bnIvVEdWSC94aFpSWmErNHYxMGV4dktvYnZieXlnc1FPbmRhSWI4NTUwRXRLdVZiQi9pRFhKcFBLZlc1WmRJb0ZYa3paZDdYZGdnNmRadHpDazgwTitJMHNUQUl0TXo0Y09PQkFNYkF2bDFWaXo4RHBXOCsvNDFHUnFKeXR2L1BXRVg4bEtkZUVFVjhLNTJTZ21ZTDBzenc5L0R0OFpFQ1pXdExmaVhiQzROb0FldFdad2xUQ2IraHVHVml0VlN3LzcyTTdPNnRrdVlGOUtldnFjNHdxRk1UR0pheDhKRWhIUFd6RlNXb2kxQ1JYSEw1WFhRa3U1QkxXT1pralkzZGowbHV1amFiZlo3enJDNW1LUUlraHJEMW9yWmo2M3J6ZUJwK0ovT29vdXZUM25SMVd1T2hucEh6MFg3ZWJLbHNvb2NGalprUWZqRWRzanRQbk1NTkdrYXpzbGFqSEZFSmc1YmM5WXg4dTVlMXhUWEF3M1ZLWU5MWG9MZldSSUVxeThjUEdOallYTkFxS2xCTWhmMTBtVWtJb1dsVXJMWmh1SU8yN3FJYXBMUVN5eWxwOTFPUEtpOW9IckhOQm5BemN1bTdzZ3lsZmN1RlZrVU5kN2g0V2N1STVhVkdBRlVFS3ZSSU12cUdTNlpadlJkQTMwa3pCRjM1bThHKzdWNWhBRjlrN3ZKb2hDTE1FVXVSSXBiaFN6SHU4V0FWNlQ4M3M3S2pBTWVtZUh1am1CZUtLWXZzcGxDdC9JUTQyZzlQbjFZUGROaTNQVFNYTGRRZXFSdU5UVVFwUHhXcjN0YnhZMW91NGNUZzltV0FHNHp0Wkp1YlR5dVZ3a01FTm8vd1FVUmZ6QWdaS3lrMHJyeEhEZjQrK0lLVGRDMDJMN0dmWkYyYUJ5Vkd4Tm5MczZoODNhdFMrRjJUZHJzd0lBZkRkeGZEQTFBWWtubGF5M0tEOWhhZ3RMTFg3d2tuZnFSR1NSbm42cTZVNWhrV2FXK0U5ME5vQVJ6NUtzMEJvM1FVaFc2MjVpVzBOQ2NmVUtIcWI3TFVSSnRYZlRRTUtheG1mK0VDWDZBdDM2NnREYTJHR3NCUy9nc1BuVkE4RkVSeExQQTN6aXI3R3NkcVRkUXVudzhncUZhdWhoUWhRa2RpVmd2MUNGN25QQnVFSTQySWRpa2tFSFNvU28rRENoODNJZXhOMVlyZGhXQWVBTWNZWFZyRlJmRjBLSHh1ZzQ2RFU4Vno5Wmw5K3dOc0dVenkxbk9XcHhUUmZTTlF3ZXRKY3AwV1FUbTR5WXpjVkdZbTZLdGhtYVMxNWQ2Ym9LcWQ3WEs3WGt1YVFsOVQzbHg4Y3pMMWFQRG9RSnlkVXhNRDRNSGhsb1YxWm5UT21WMW5zZTE0WFZiayt3Mnl1VUZxeldmZndNeXFwbTJOVm1BV0ZMakRHN3AvdU5lakQ5L1k4SEZIdW1nN0dEUUg5NUZYTzB5amFSTGlvVlBDNEViYTNHR0dqOGl4b3dmWGg5RWhxS1cvZWgrb0s0UWJWblhjYU5JdHRZZWZWRlZnVFJTV3Evend4YjQ3VlpWdXc2cDVoSHBqMUJSMlIyYnk5U3pyaVBWeXZjbytqNUdmOEc3bjNibGhXN3FjM0l0Si9Dc1dHTkpqbHdlZ0ZLbWlwdVh2bTBDYjVmYW9qYUVUUXBqcVkxTlpGVnJ0Nm4xVnFuOTJ4ZlppTVlmeWNSYWVPbk55c0FxRTI2L1NYcHhaY2FTRDlhdVVYcExBNS9MRXlzanFzSXZZSlRjV2FLbHFGSyswd0RQVjJabnJid2VwZGhRMWdCTVI1dGI4NXA1OXE0OVNYRXIzTWxvMzVWU3lBendKYkhlMEJvU3RRTUIyRW1jZnRUUTE3N1ZoK3Y0Tk1Qd0taVWU0N3JTSlNTTFhPdGwwTnd0azN1dTVGdGM1UWNxRkZTdWFIRUNLOFRWb2JlWHRiK04rcWpMM1dib3BKRDAzZHhZeWo0RVNtcVVlS3dKVXN6KzVrQ3p5RHNBM3lFYkpLdTg2bW5DZ0JYbFFrQ2o2M1RHMEdkVjgzSS9aL3lZS3VERUlabXVZQ2dkM01tMkh4WmFMYmNmRmg3YlNNZzZ3alJzWG1qYnVJdmlMWWdsVGhJQm85SjAwQkhrUlZ5M1Jmb25YUWYzSjFWbWc4Y3NWaUljdWdrbUtuUFVLMVhZN1hyUkpHYVByRGxwY2hDaTFxTGpZUERlMmtTb2VQOUcvTkFLT2ZpamtVUjRPUC9iTjFmVUx6a3QzdEFleHE1YVBpbitPSG1HcjJJMFpUQ1Q0TnNJcXVmTFl0TTZuWTZQNnpRTWVDYm1INDRnVzNaazBnYm5MbXpqY3k2WlUzZmswaUlXRTJnNnV6UHNhbEtUdHp5QzZtK2tNVHJQZHpqV0ovUTJibkdSQ1pVaVA3WmdVMU5rUStpU0phYitkRG9FWVFieFFwL1pzU0ltM3YwbHhLWTg2MytpNzV2Y0dDZ0lqRUJxSGNvRFF6UGd1bzhMTWNHVEUzY2YzZDRvaXF1dzI2S1lpc1VmV3hOZFY2dDEwdFNMcXdteFgrMXJXK1U3azExdkhrbFBJNE5jTWgrSkxXNGFZdUp3QWhIMXYxMmtkSVU3c1hERm5mTEZJMVU2dTlGYjNMaG43VHY0Mm1Mc0t1V3BXRXQwd3hCeW1qek9WSlZXUmx1OWtHZzlxWjkydGNLbWluTFkvUTJiTUVOR0tTTDhCbEk2bHBDV2x3QzBPS3h2VFE2eTVpdHlIL21iZXg5Yk5Bb29KMkJvaURnQzF3WllaQ2NleTNPYytiYVViR1Y3eTdIRU9NTFQwNitReDVWVFIwNUhXSkZpRm5DSTlEQ3U4MGtTL243UW1RbVhNNTBVZDJhVy9uVUdjU2svd295OWNvU2lEQzhDSUxIVGQ3NWNudGcxbjduTXM2UW12WjVvUEszYlpPbEVkd1RqQWZaRE1aWDMvZjFMR0kzR1dEMmhoNVQzZXJicEhoc2FBbzErWUlsUjQyR3lGb2NVZWV1TURjWk9lVkRMNW4vWTZTb2xDcFo1N2lMUHV3U1liQm1pWWcwcVJCOXVUREU0SG0rYUVxc3NBVGlBZExqaFdaYVpPa09pdHpDbmJvMUg5SVhhMlYyR2UyZ1NNMmpicExsWkVEK0JFaHg0MGVEQzZ4RUJ0YWtSRzcwM3gyNGxxVEozc1g3dVFtd0NLTDhVNGNlaFJ0ckRoYlduTkFXTzE0a2lsRlg4TVkxV1Jzdk1ENWtXU2ZidlZMak1YOXFKelUyelZVMnFHNk9xMGdKeG1PeEFlZ3E2YVZjdHhrUWp4MVd2RnFFOGdoWk9iZmZ4MVFtMTMrRmMrYWdFaFoxQ0hpbytRbmozbnZ6MzBXUUhmSHhzaVVNUlBNWC91N3owM014WlNLcnZCVGxJZ1M0OFJpdkJqR1Y2TnlaUVd3Qmt3aVhRV3dTYU9vOFV3U1BTSDkybDloeFJSZEJ0bnNZSWRLc2lXOVVsakZxZ1IrVjN6elZiTnIyR1JFbWkzWlBmT1FtbWFla1o5ejhLS2EwM0dXbjdZQzJ4Q3N3TWhybmtvMmJUUnBMMlA2U2h1TFhQU2poMDduNzBXbDJscXF6RWN2YmpwNGQxSUN1b2xnS2I1SWs1eEF0TmJRbFFJSVlxbm9FMnR5MmIraHhNRnB1RGN6RFhkZG9uamxaKzJjTkhhS1F4cGJOT094WjhaZC9BRjVlOTMvdDZFdzNMd0hWd1ljWGJzS2NmdlVMUUtidmYxOEVlWG55SlA1eEcwNHA4UzNiSkdSQ0tNRUNmeXIvU3c3WnhWUkVSMFRPSkRuTGkyWTVzTysvTHRBL0VlMk5nMkFLazgrUHVDWmxyZkFJbmgzVkI4ZjBaR2UxVVBrbWZHY2NsbmE5M2hqazhUWDZ3R21idTI0YTRFb2FsaHdiYUNDZEdHQWhGaGF2eHBsb0sxeG9sMWdKbDdpbktURzByeHF1dzVFbU1nTFZIdGpmRzFaZXRuOXJUc1R4Z2tzZXYrb1U2OXF3dEJ6RUVNd2EybVZsZmtOOExQOGx6clowMWl3Zks5OUxVb0JQazJQcFZqdGhmMGF4ZVVML2JSY1lReGdhOGZqaVRBZVJEcU9HK1NMUlFaNVJ5MXZRaEFKTGNBUncyei9DYXdJdjljQjI0SitUSWRDWVZMVE96WTYvb3RzOHFQN24xRlJyY2dPOFlnUjRQUkd3Mm5SQWZCaWhxTUt1Q29aN0tWcE05VnRMRVBubnVaK3dvREdTd1dZdG82Rnowc3JqVTc0WTRRN2MvUU9xdkpNWElybGd3TXN3UGFuNVlmc0pzakRNVnhvWm85UlI3SDJqRmF6RjVHeXdqVDJ5NHMwSnRObEFyZGJZTXFZZ1VLcHpPT0dBZ0lDQTV2cGtBT0RranhQWkV2WGlZUXZqREhxTDVqRVEraTBicTh6KzRRQjk5YnZDTFFUUmpuTjNJQ0gvYW9CVld1ZVpZSU5vZ3F1MGc2UmxjcUJTR0tleWJ5OVN2Ny94cUhIcEc4c2NlRjdrcEI0dlJKdzY4b3N0Um15aVZiL0NscExPYm1OVUVMd3htdUpQRlEraXh5eTFqelFtNmxnQWFBUWxwdkNZeG13RmxsVUIxU2t3a2FLRmZybWg5TUJ2cVFwd3FoYWdwb3pwZitWMlhvSGR5WnU0WjU5bjI5cEFKSHRDWEdZV1RLQjNDRDgrMkEvY1NKbmdMeDRRYUI1NklHVHVzakhiQ0pvSkMwNW1STXB6eEZ3OTJZSitBMkplMEV1ZlFwSmhOYjZVQmNNTUhwYXZiTHFackVNZHhkVURaWjVuSEJQTUVoSGdXSTFXWHVXeENGRGxHc0pHMEVSYkFBb1l2T2hFNk8vUEZZbnBRQVlPd1kwMWNwUk83RC81RVdpbEIyNlJrK3hrSWZraGM3V3V0OGM1dWdvV0lkWXZDaUJ6czhndmJLT3RWbURYVDc1Qkw1MnAxSVd4bzNDTVFnZFhwQkpmSDFybVhOUEJNVEg2bjRNcEhXeVNMc2J0ZXZLMTdxQUxpQTg0ZjZmSGM0UEhNVDYydzVBVzFadGNlcXlGRlpNSVhyMGRwdkJGRlp2ZDU1amN1alBoeXlSWEFlTDQ5bkMrNkNpcTNMZFJtOGRLeHhnSmVhTzZCbWNQZDdjQ1dTbzlBSkpYejBnazE4SkpwMEd0R0FWNGJXQmRKNnoxdVRITVVua3U1Uy9CU2tIVmZUeGZlc3RoN3VsL1Jwa28wNENobktPNnNySU12MlFqcHFUM0ZVZERTYVVkZE5wM1NCRnQveFJIeGZPdmlMczBRSCtkUFJ3UWxST09lRDFmNjFjT3E3OXIzWE1KeS9JK1JDNjBIZmVlajA3a1dIb1lxZHN0N0Q2Sk4wT2MvcDRsWVYwT3NsOTB5T25OblpjWGFjR3p4djluNjl6RXN3VjV1SFFJQXUxdlFvMUN5TnVXaUF0SkJTZmxaV2crcTlMNTZzeHpEbHlkdURaNkdsaVZVVC9FMk9IU3Fld0FwNldQajZyVTlYQnUxQjhMUWlja1Q3T2ZEMWhPRnA0Mm4wcGVjcG0vczZXTGlZV0ZQamxSWjl1ZDFNUVE1QnU4RlF4QnpocTF5ZW1rN0hQeTFKT2ZhODJabm96NVpsWDJrSTVvYk9hZk5KdzBpVUoxQXNnZWMwVHlEbkNvQ2t0Smk2YktkQjBMSWhyRWhCaGc0Lzl0SmxMcXNsWEt5KzFnVXVabUFnaDFxZ3loVkJycWkvQWYzaVBNeFlXeURPRTdqckV1b3BHNVBPR1QvcFNvdGxCZjh1dlczRlF4V3E5eVVEWG5PWUZjMzhjRTFqS0xsU1Ryc205TlJiUWtQQUNNd3RCbzhKc3pOOGJDVDc1bjBadytPbmpOMnJ4MHRwWkpNYitjT1JhQXdvM0NVTWtqWGxuOW9SaFFFYzZwL3duU05wc3Y5cktpbHNBVzkxYjVjZnplZ2tvL3NVMVpzSnZmQ21QbnBqWDVBY0I1dG9kNC9RUFNvdmMvcVBublZyU1k1Ukc2ZTIvTEVUZEx6cWVOR3FNMjJPZDdYclJRU1BCRm1CNWZGdHoralJ0ZDVEd2RXY0pUYk9TQUc2aFBNSjVYd3A3Z0l3czd4L00zMzA4dmpGaFFFRWViM1E2c2ZWR1BTTzkyeE4xYkpPcUlVNGcyZHhIdHVsaFl4ZzRpS0VORWNpZEI4bzUvUFpPTVI0ZElUU3prb3pRemN3MHRXTG9ha3A5eDhVUGVuN1duTzZYTUltdG1CM3IxZnFhdnhTOFBpVmN0NlhlMUl3aXlCUXpRUi9DUTdJNnVjallVU2N2c3FGdUd5aHlCNWhJdGNvbHh5NU9oZy85anJzODcyNHVGU04rV3BzYUFsL0p0RGdJVXlqYWtTTWhaYXhSUVN5a3RUeHgwOXhkVjJkOW1rVUlnb0xTRnNnWVV5bnNxa2ZWMmxEL0FzSDFPdnhxQnhTbTZmamxFaVQwMFg4VjVoS2FEdHk2Z2RvWTVZSHYycE9qWUdXMm9VbThvanpuQytFYTdVMkdzRVNXbTA5OEtvbFFLUElrTHEyajlaRnRIM1BPcHhub0paQWExTndzUHYyOFAveDBmVURlVTBSQnZGOWJ4VjJLWDRjclZwaEV1dklESlhYVVBZekRqL2pUODNWWDB0YkEyZUdabGRGaEQ5ZExMWS9QV2JucmZXK2FBbzhlZVdObTJZRE1DalpxUnllYzlxV3FtQkx3UWpYeXZsVnROa1BsR3NROUtWelJDQnlIMWxrTEhxak03M3lVR3Y4bDZCSUprVG5KRW5KU3N4a1RMbTlSdVMzMDZ0OG5iakozNE5MQkJmTHltekNZUXBoYTdkeVFuZ0RRcUV1QmF6b1AxVVBsbHB3N3pUYXNzUWJGV2h2SFI0WGN3cGdlenkwVGJUYmFTVUJNOXc3K1pqV1V5Tyt6cmN2b01RWGFPdDN4MnVGd3hJTmVlRGFiYzFqbDNwQTlONm1kSHFkNUdxUVV3dTZNNUd6UGNTb29tUzBFVGV2ellaUkEyOTRTZmF5dktNbWllTTR3SE44aWJPWWZJT2lKcjlFdUFQS1Q0clFFQ1JsKy9CZ1B1OWc0QjBQUmdQeUhVNHlsUlg3aGd6eXZaOUhlbjh3d2djK3dwczlqVUFEV2tGcGg3MUdNT2tTMG1zcFdIcUxnbzk5YnhDd2pCNVdqdG4zbUxvQjhwS1pQanZyMzh6MEhCV2hVQWRsa2ppdEcycmVEd3kwTUZib0xLc0I1cHhEUGpXSkFDMFZOMkZzV1IxNnhHREJsQk03WE91aGJZOUI1aWhwU1dyNit6VWk1bFkyZjVhWEdvdVZ0eEtlWkcwejBtZGlvN0NzbFhiZ3JqOUlsV242N0Izc3c1NVptR0RGZmZWaXZKOWEveWF0WlhzL0I2MVB3ZDFFVUM2bnYxN2ZXNlNLWmkwdndJZ2UzNloxbWx0M3JXNEZKRGYxZlk0V1g4WU9BeFRrczNjZEFmK0E3dDVRLzE0MkpKazRWaEh4aWJKZUg5czVUQTVIbmUyM20zTlltWHh6NUI3RHB2eFA2QTRoV1pRQ0NqYXVuMDRxM3ZmMGYrcVJneTdRVVZURUs1NUJjaElaYUxiS2ZZWEE5azI0enNTT2tHNjc4d0EyK3p1VjF3ZE9rckJZMEdVSEt5OXdXb3JpM1NlcjJZSlo3RlFYcm9HTzl4amJjMXk4dE5zemg5ZzZGR29ieW9ObmU3SnU0QlNkbFVzNTY2MWtTakc3MHF0dG42SmcyeEpTdXJjeDBPVXhSdU1uVTBLQysvSUM2OVgvcElxaFQ3VENPQW04TUt4dDJpaUZjVThNTHlXeGJaMHBRaEJlZlpvM2JUVEJPVENhOUFpWE40L3dnM21HTWp2Z2hacVl3TERQS1djcitCRHRhZXgxTE5zR0EvWDNWbzlOdGhNdjVGMHZTYXVUVnNkVlBjM2JQWnpkZWU3YjNFZTRGcTVrUW9ET3JaNlpGT1RpRy9DSFl1UjJlMnJLYTM4YTM4K0t2eGEvcmgzamNNaHVya1JCdFk1RVl1NWVnUS93dUpWSVRrNXpGQkxsYnJJR21ZTXRmMWltV2ZxUGpmSHMyY1ptK2Z1bEJZeUV4ME5pWEtBTktvc1lKUUI3L3ZzQ1pvdVhyTHZqaHdwc0duZXVqeGw1OGowMkJnWlRpZ256U2ZqcGJHWUNiS0J6c0pnN05jaEp5bHpyMS94VEhmcmlOajJvd0NEWGlLN0dWMzVYM3YxMlhTRHNIakxWZ2g5b29hT1RNR21iajN5RFlHVk1ZT1plNWpRMU9URkovNElhK2k1R1N5RS92bXFGZEZCV3JyQU92bVdSSEQvWndyZG5PMnpFY0JYL0dFbXBMQzRiV1ZoTUUxZmZSME94WkNXM3FPQTJIK3hTb1Noc2Z5QlFqU0phREFsUVErbzRZVHBrK2dPM29Ia1RwN2VpUWRKdW8wTlFVOXh6THJwdzJ5RDJyZVdGVUtPRWhUd2RNQmpReDdpL3RLcytMU2lkTElBYXZDclF5VVI4SWdUK0gzZ29QZldZY2wycmxKQWIzYmhnRG44bnF2a25vOVZsdHpTKzZkbVJkRmxCZUF2c3BhaXpLWDg4RlhjOVkxcld6Y2ptUWJnUmZ3S2dEM0xPcHR0MEg5ejZUajlsOXZmV01jZHNaanhEQ0FXSURFTHJwRFREMjA0d0lEWXFyR0lCb1gzcTFmbXZmVU5rME96UWU4K2wyWkppOWwvZDEzNm5Qc2ZSS0JSMmoxVzlzdy93QklRYk9OcEFIR2xqZG9HVHZ6VGRUMFNjTGlYM1JzY0dOSzZ2MWpnU09EOVo2MzVmalBiVFJQN2MxMnhaVHduVktzSjVVdGwrR09WMytaMkZBYURjMWpOQ1dtenQyRkZucloyUHYwYVZTVHRvVmx5S0h2b2RUL1h6WHdmcVc4RUxXYjJTcWJpSVFJZ1Azc0VvN1hWU0JoWnNZZXd1cUxxZ3VVNEFOR1MzTnFmZFZoMzFxY3VVTmJVRTdGcGI4RnVZSkFvSjQ1TDZJL2tpWDR1OTFJK0N1VW5PWFdhK3ViY3cvVC9hZkVadGpudHBCV1gvc0xmWG9oeWpDZ1dkOXEwMzVQUFN1dGV6WGNjaGMya1cybTUraW1FU1NnbVl5ZWNUVmJEdTNCZVIxNkNjRjdNL2ZaRTNpc1ExckJkK2pEV2RQaUVML3NRdzM5Zmx0RTFQMk1KZnJhUDFxRS9yYVAyTUQvVm5SOWllVDZpKysyMHV2dnZ2N2RYUGZmZlFERzB5Q2k5MmNmMXh4cGZweHNYL0RSTU5lNlhVU2wrcS9waG9HQVh3cXgwNVhmNS9ieHMzTUlBMVlmMzRFOTIwWXYreXNySUZmblpWNGsyQndFc0tNbXFpNDBvSVdxQnljeTlLNzJyZmtDOGtlTkkrTTFnakIzdkxKc0lKN0NkUEpuem40YTVzbmtGdXExbkZoLzdhbEp1cG1HVFlSSjVWaDdBVHVFQUFsNzhNd25DMVkzQngvSk9ReHMzcVpGVGdMQkxmQXBkOUdNaVNQZElRckxzZzZBRVZJTHVlcDNQS2tGd0p6QXFmRk9oczRvdVBvQ3hwdnhGbUgvQjF1K1hiV0FpRHNNdXhLZnlIdkxGNE8xUng0aHg2dVlyTDFRbUNPSjRFNW5IVU1UNVRqUWdqSks4eFhLait1elVTV0NlaDRXY3k2YkVBYnVHRWRqbmNZNDQ4ZU5EYWE0OThEeHhGTWRlN1pzOThvb1BUa0ZJSDY2MzFUR0VPc2VHQXkyZzNIMlBkNWJvWTEzUHI5akZHS2FPUE9QQjlnWXRPaHpCV01kWm9HUk9RWE0yMVphL3N6VzNLRDVIOHZJUlE1RHlCUTFTeEFUSHlGa0FYMjZLbnovRWhiUzY3ZFVoN0tnRi94NVp0V3paVkJubnpoSURNVWZYcSs3UWhYaDZabFJrR3pRdnRaMFRFeHVNSjdGK2NlTkZOaUMvYnVXbzkzOU1LdC8wd2pGOFh5Um9RREt1TXcxemkwVy9PbHNpaktyeGY4OUFiY3dZMkdQQk5XNXNKbU52TEhpTGRUTGlnV3dRdVBxRDhWeEJOeitlT0xzTWFldUJkZ3k4VzJLbDBLRmZQUXV0S0Fob1JwUkFqMStldkRTWVBLTU0zazRvTkFmajJCcGozc1VEdVNhdmdHNjNEMDkydDl5c05zaVFxZXMzUTYzc0IzR0VzTlZUTXdpUUhMaE9ZVmZwM1dwVGo3bi9zZWg3NlpTeXNXbkRLMmxuOGN1dm13TjUvNXFOQ0U1ZDN0ZUgzNjZOdmd4NllSNHVJei9HRHIraC8ycFBZaVRSMHZBejB6K0FCSEMzRVhVTSs4dVRuZ3hEWkVsWVNUeFJrYjNNY2dPbVlnZU5wTjhSN1NvNWlDczl2dDFxRnZYaW9ZSjV3ZzRTbk5aMDNtS0NSWXRIaTZHa250K09iZE92dGRNRDVWZ28xbWtiUmNNdjhLWHBDOG56d2U0ZGJZdklYU1FaSjIrTERDc200L3VpQ011NktoODhiMzlvZ1lkdmY2V3I5Ung3MjFBTm1KTTFyZVcxOVg2M2g3ckp1d2J0cWk0dCtnRHpIUk1CQXRSN0g5V3VEaGIyUGpQNkE5QUFvd3Z4cmY4NjJiaGhzSS9Yc2wyOGRrVGU4cCsvWXNNMnZvSGh1NlJUWUFGNzYyb0lWSkI5M3E4UXUrK0NEMGw2SkRIVnp6ZDl1YkIyTG1tV1B6WWNEYUI3UnVJT3MreUdMSWZQQnV1MElZV3Fna2lhQ1U3U29hclZLeUppSmZZQjd4K053Ym1Uc25RV0FZQVZpRU5LVnFRU1M2TWxLSTlmRmUyN3pKR3grL2pEV0dIYitrVFpzWDNXSWluRmUxV0E0TlNkeTZRZWs5Q2p3UFY5ZEFDVkdWQ25wQjBtNThwY0FZK0RoNVJmOGliUHZqdkgwSEwyZExMS2hsTTFxV2greTRlUlpRSWVhbmZTVFIwbVV3bXVkcTl5NzFScTlLTWxaajVMa3NyUWgzV2FmRitpSFllcHZ6dUsrRFVxckRvb0ZXWUFvaDJVa0NxOExkWjlNdi9VNElHa0R2Y1JVcUtYVG1lYWtLYnU4SjgyOExUQUJJbmZ0aWtNeTNJSW5yOXNJQWUxWFY0ZDBPWC9BYmt3RXZRUVlFOUIyYmVvWVp4Q2lWTHR4cHU3cFN5Tk1GTVNkdDQvUm8vb2NYTTJRRm9WL1BxVjBUL0JXaFdXNFN1b1NTd3Jkcy9JbklObHlKbFJoZ1RQemk1c3ZJNGhFNnpSNlh2UjhXSEpIT0wvaHg1VTNFVXJiNC9ZZy9LUzdxLzA5QnBNQ1NvTit2WmZiWUpzZHMrVkRJVjBRajczUFlaMzAxWGVRdGN4MVdpcHdPOHo5Uk5vaGhjdU9PbCtWcTRHOHg1L2VlU1FRYWpvSkVHNmE2OG54dUdjOExWdFFLTHJGRTVZeGthZXB2S1hvWm9iaW8xRk9zM3Q5Vk1Wdy9maXZZbmdkL2toSE9hZytsSElrcEkxaS9tMGJraUZNSWN6ZWVsaXhUd05MYzlSZ3U5aDdIZFMxa1BrdWFnUWF1cnlmOFppSkhMcERMQVhqZWRNamMzWHJsMEYreHJIRW0rU09TWDR3WnZpTEEva3Avd0U5UXFXOWxTOWVhZVBDczlMdytEWklpeTdVRjM0cTAxRDQ1OFA1L1ZrZXl3anJtZmltVWNrNXNlRjJLSkFMMFlvemU1UVdkUCtiUWNjSzZCd2JzS3FwSjZpVUZBQk9DU3RQMXliOUk3cGp4TDAyeExhclFPbzQrYVFjTVJ2alNOMDFaRURiRkFHMUhrUlppK2RUbDliUUhyb2w2UlFUbk1IM2xoUEE0NzZuUnAzZjd0Umc4OFZJQ0dpWXpzeThPOUplZUJPeHhTS0VYNE43T0V4ZFlkd0JMOUNoZnRlL0J1dHVnZ3ZCR2dxV1E2SnA2UmEyYTFBbXp0QjM3bDlpYm1DWUUwa1VwSU1OT29OcVJMS3pvUkV4MlhnMUhjd1NUZUpPaUEveFMraWVCK2gySVMranphV0kzWnZqQXNYbzEzR2JRRHBpN1Yvd2ZKQ3dJL1czOGNOdEVTdWFFV2MvaUh2UHBnY055RnBUN1hmQXlhM3FOY2RHRlorZm5TWitpNk5rSWhlV2FmcHFiMnBpSi83eXBSRWxBdnBta0x2dkpEcXRQSzRLa3ZqZFR6LzF1UHIwSTN0TlBYcFVlK2V1SWZ4M2V4TFQxSklpN3Z0dzdQbHJlT1hwRk1hNkhKN2ZpbWpDeUlqcisyYkw0M0J5ZVNjTHVhY2FMbnJSWkFIc2Y4emd6bWxnWUVVRHU5bmlFdzFpUDRtWjZyWW84UGxuVVBIWUcvRTg4K3ZvbDY1TUtkR1BOMHVVREdkMWtHN2F0M3lncDV0N2Noa1Y5TVhYV1pLVDBUZ2JyL0ZJdW9HNVZVV0RHb05tWnBQd3V5eFRpeERKK3o1Q3dwNnNKS1VUeXJ1RlFUbEZVOUJBcnBaL29BcjNTd3lEWWF5bFp4citnazdDSG1BNml3RmQ4dXVNS3pIeFFrZkh0dk5RSElZZEtLVnBmU2QwcGk4cUo1eUdlbVJVVm1YdkxUZzErZHZsYjdCeE0rSDlIb0tVcmlSZUxVSXdsZ0hiVHJ2dE9yeXNXdXZIMmNsK0ZaV1drV1ZDRzhseWEweWRoMklsK2Q3eGRqcDVXMy9VVlNValV1bDhnNXMzS2NvS3dzMjd4bTBnUElEY01ERXBSM1dNUmFKR0ZRbzZDaXgxT3JJcnUzM241dzZ2ek9jdUpFUm11MHEvVWFrRzE4L2x5bXlNQXAyT0lPMHZIVWYvcVdUTEdMNy9yRGIyMW1Sd2VPNjlDc0xzTVdhNzlaMFFBeUduaU9laVJXajFlcHV0Qmg5U05sTlZwblhUb0lWWHJHc0FMQ1ZITGw1NmJmd2Y2K0xMbUlQdW41YXBLR1BPTXgxS0h2eURiYVdaSkQ4bmMwWm1UQkNzd0xCYjVwQWY0VS9pZWJucnZVekp6TjZtSnJxTk9PNTJGRUVyUGsya2hHQm0wQXYwSWhrRjZFa21Ndit2bmRFSlo4dnhKWDNBUmtKazR1MXhPWXlmOHRRb3NJa0pOWXhTZlhxM29iOWFZOXYwb3dOR0FNdHBXejBmdzl5Y0c3Yk1GL0JBV1JIWlZyWGdDY01FWFZ2TU1reVVmQW51R2NZVmE2VVlYbHdlekdsTHJSaVZwK3J2aXlhZUNHMjU0eUR6WnEveStkZThXOU9PSEh0c1Y4Y0dpNmR4Mjd3QldEUmtvRU41TFFjWnMxelBEalNQcDRCdmJKcFVvMUdSVGNUZVhYTGs0NUliV3lwMWZlL2tVRlliemhDRWNKQXNkbXJVS3JpRE9xOEJHMTkza1pQa0ZmVHBxM0dRckxzU0JwTGJVT1FEbVUrMG1lakh5MXg5K29FNC8rRWQyRXdtb3FBSkd1RE9yMGJWTERUc0IvQ3gwdW5OSFhObGRIeG5obThOa2Y0MDJCQ3ZFekU2MWpiRHpOSFR3UmViMUkyajRJMUFrcTA4ZGNEN0xyY2d2NEIva09udmxJWWNWcHUzMU1jb2dwRmNqMnBXUjB4SlI3MzM4cnZKQ0lvdVZIUHNta0U5ZWxxbFlRdytKRng1THZMMEN5UU5KZFA3bmV5N3g1cERqVXp3dmtWVFFNZCtIM1Zub1V0Q0s0Yk0zZXlSdmw5bUNxNUxZUGV0QUNBcWhqNUxyQlNtNzQvZmtoUmx1NkFneDJJOEFBTldpSXBkY3dsT2hiOXRkeTlYSldBM1pUVDNOSkowcXBGVVZwVEx0K00zTE9GaUlha1loWks2bnlUVWhyM1pJajA0ME9ickptNWo0UzRCRFlRbmpxWFBxbEc1bGFyeE10WVAyWXVaQmRoQmhlWWRsNk1WS01WeXlZd3FNK0h5VGQxVjlscjFGTjVVWklzWWI3djJXenFRQXR4L2tYUTlzUzgzQmZYRHdkMWQyM29XWmRud3A1YmlKZGt6a25GNXNUOUhtQkh3WlRjR1F4d1N0aURxOGEycExkOGRHeUkvTEMrTDBSMnB5WEV1THRDZURxc3gyejRJZXhjYzVpOGJYRWo5OGdWMnFxVXVWWmRuZWtmK1M0dXV1eEFoMHNORy9QWUJMeGZZMmRUcHg1VldJWjVuTkZOTitvWHppSFBzWmJ2d05ndnJySWxCZWtHQmpjWWF6VEh5U0k4VVNudE5RZm1tbm9jWTRPdjh6QmQvSkQrcDk3NENHQWRmSnFzaHlSZ2RkMWh3WlhIaFp3RWdNK1NhK3BJcExDdEg0bkhuOTJLbW1CakhTclgwRjdOdmRvTVRxdmZGZ1FxeFNyVDBzWTVHWEFrNm1YaGZIUnZFdTlMblNzeWt5RlFadmpyVFVBdGVTSzFnYXNLVS9ZNmozeTRrWDFVS2ZoSzdDcTN6MW8ySUREcnVLYnZmUFl6WWVBN3JKQmZwTGVvOVdFNG4vNFV5MGdUR2F4UXAxSjZiWG9vS0Iwc1lqdWRCRWJlNWlqNkFERG9lcm9pNkxkZ29TRyt5OG5mQUJuYnR6ZzBRZnhSa2x0YXhSNDlOK0ROeW9ndjQ0YTZEMmNRZGhLbElRUUZhcEtENml4THRYb2ZGZmw1M2tFZjgrNW5VOU04R1ErQWlqS0dpN0NYY1BhTG1GbENuMlB4MVFOUTE1a29LUm9CL0E1Q3lyM3VJMFdQQWUwQ1dwaTRVQXBkZGJCbDVaTUtzUk5HVFAxQXY4SjZkOXpnRkQySjk4eFJpUHFJWk1IakpqZVMzTEpsMFlGNTRXSE9PYStUeitqTEwxTHRaRmR2c2MrRDZSaS80S3F4VklHQUI2TWJZRFRVbGpnU2J1d2pxVHFBN3Q5ZUhDbzROTlgzVWdBNkYzN1JobjdOSHZ6VjBMZzhXbGZ6bHFlc0ZvekpMd0ZRWVF5eUY0SjNuWndON2t2S1dEVGYvcndWSmJlWFpJNCt4MUErZWRKRUJQZTVHTldsbFZOb2dZL2lDMzJhQU1malI2S2gxQytFSlQzZWJRajZpdGYvQVpvR3NrZk5SdlZLTGQrZk5uYjRYb2FzNzhRbTRGTktKUWtPNi95UDc5Z3FDRjVoaEV3OSs4eE5idUdWbmNrSlNpbWJNdGZiaWNTWUJVRkdudytNQmNWazFvbTdLc2dEaDZLT01LT1hFNSt0OHNYLzNPMEZnbEcxbXBjOHIrQjdsUS9Nemg1Uisrc1prSXRGNmtqUFQrZHdtczhjU2hkV2xGeU5rRWlzZUdScmlIbEM4ekRsekNIblNEZm1Gbk5MaWVnR2t1anVTWm9iN0pvWTd4K3F3Yi9hUkRnZVNEQVcxWVpveFcxTEUvZWoyTm9ReG1UNXpUSElGY1ZyeVlHOW05azR5QXh4NUsvYlgyS3Jzak01V3BZdjBCSTI0RnJsWVprR2xUbHpYYU5QVTlmY3ZrOWNFTVRSWEptSCs1THRMaFk4UUllNmFGY3NvalZGZ25DdEdJRk5rNEZkVzFzd1VieE5vUUlWQ3cxU056OTUydysyVk1qb3kwRzVJUHF2TmlSNHlQL2Y0Q1JkYkt3OEtISDRManJBejlZT0tpVDloa3BFR2xRUXVmM2o3SjcyS2VSYTQrZ1c3T1RKTEJIQnhwSVZGWkYyK0lCZUhjKzNwWlA5VHBmYUY4QzVheHpDNVVaLzFlR2xDZTMrTTdrc01hdVFiekNvRUtDcXNpKzFnSjhoMng1VHAzNFVVV1hNdGVEbnJtTHVJaVVnV2xjZmZVUVA5K3E0c04reGxZajZicE1RcXE4Q1hoYzVZU2twdDIyTm02Y1UxbldsaEFPS0JraTVOTm9sN1JZNkNTVXRuV281UjRjNlpLU0NPbXVqZkVIemxWUytTVXFwWkVDK1FiNGoybUVwaTJ0V0ZDSXZnaWtmaDM1eXNmNlRYYjZDNlZqR2oxTExVZDdyRW5MYjZES2ZsM2NEbjJXalRHNGpDVWdDQnJMR1BKWEJjWTUrMGl5SHE3YUJ6TFVUODdEbXFuMFgyQW1Nak9Nby83cksvekhrNWRieUhZZ2EwRXNlRUl0WWdXa053Q09JOUIzZi9VcmFBVDFDVXhwMjBQNmk0TmNCQUNLcFdPUGNOeGVXOUNDc1BvZU1UTWxhS1IxTEJ0YzltZW04bUpNL3N4OEVrU3YrdGdFUDlkcy9ta2VIdTAzQzlKKzJyNmlySGhrV0JBaHQ2WmF5SU1GVXV6MDgraTVWRENZeVZoTVNVcGp4SFZZQUo2YUFGTVpjWU93eU14djNNZy9hVS9TbXo0cWx3S3A1YWxndmJDTkJqYmxDS0tuY0JLL1BDUHNlTDVsbjVFb3R5SnFZbUJHakR4cEp5TStGbE92M0RiWDJyY2NIeG9PZVhRVlZQTWJIb2E3SXB4M1ZpcW1nWUhMT2lFZ2h1UW13bjZ3bHA2bVU2bWRWdjE2cTRDYTB5R1dIL0pGTFhWSzJRWW0yNThzdUppRk9LWHIzVDI1eVU4dVpNSjVtbWh1QkN3MExjUFZBM1p4ODB4Vmc5OHJXeFlQT1dLRWlXL0NWY2dHbVB0VEExeTAxeGszcGxNTU9HOXdWT2xJNm1LempDYVFDVGxaMjFlWnZmUlpCcVVFNGRFb1JuRmxEaFZiWjNjZmdybE5MV0VVSVFFUjg0Szl2YlpqM2NPWi95L01YSXRnTVpIV0R0NjVYSmhFb29PNTFQeUt6WmEvaEIrSlJ1NFNEM3FlbDVZdEg4QXp3RVNDaW9nUFlQbXRDVU9naWs3VWNWVmd2YXd0cStaTW00M2hXS3F6KzRRUExQOHFVVG1oZjJRNmtmODA0c0VoZ1BXakdOc2lBMzFaY1hKNEhPT29tTC9hRmNZMnJYeFY0WDJHMWxNL1RNYmJwSGNNTTF3QkxpVzNhOG5rOWh1bFRDYW1KS3JzeXVTRzE3MWRNT3JNK2JPRlRZd1FDY2hsdFBRR3E4ZjUwOEtwanE2R3JRdENrbjg5QldHOHBtZlBBRW1xQkZtRTVkM2U4b3BJSGo5OXBYamFxdlNKd1QyT3d4ZHR2MG1FdmFSYlkwUGcvdEk1Q3lRL0xQSTE1SmUyczVkNHpYYi9kNkpXT2VCVVJ0V2tBck1FVDBWLzdhR3lnaWVBbkx5WUora2l1aVZVUzhxNFdHS1lGRWRzL2N0TkdTZDdKS3lRL1FZd0ZGQ01sejlYL05OdWs0WnRYSUpsR29RWVQwc0ZWQTRNTy9odjhwV1pQb0I5MG5LVnRQS0plMGxUd0ZVVWE2RzY3WkRMU3NNeGJMa1NMQkl4dEk0ZExKZVZPbVVGdEU1MjZGWG4zU0c5ejNmNkN4ZEFUU1NITGRiY1lkaE85SGhoMXU1alo5QkJwYlZlMFQ4ZzBDNzNnaWxacHU0YkkvMk1waU9wSzMraUdWckZIRnYxVm1xaDJoZlBTTGpyQWhaZ2dMR3lDWUtJTXdKejNkWUNQWWpDZVJIaW84Mll3UmZtNUZuT3IzTUdJWjlwUmwvekl1dHNuZEZ0YWs0bkNQdHlFbXNjaFdLQy9sbDFGbjBaRWxhb3dWcVJBQi9WMXJYUkM4Tk9kU0UrTGlnSWJSSnI0L0xZU21ET01hYmtOY0EwZGVCbjBJY0Q0aEN6UzZ3bGtFbm9tSnNBSk9pZjZhUUh4RDJRaXNBbGEvNDB5UFlDVHNkRVV0SEtWTG8vSW9lcUVtWHVBSldpMmU2U2Nlb1c5SHlGV3g3c1RYYWk4WW9yNU84QTVzcGgwWGxtZml3K0dpeFErV28ydkJiZWVNSlpsYVVpOVRzSHdESEx1YmpaL0FOcS9yTE9aMlhVSnpQTkEwZjkwb0R2TVBqaEFRNGxvZGpMNW5VR0FHZ3QyUmlWTkp0VVZQSVFJT0FWNG1sd0M1V0lxeWZMYUFQOWR4b3krVUM1bEhMbHlUKy9SRW54WXlBYm5aa1hwazh2dkQ5UUQrRkZiRDQ2TFZpdE1xb2pRVmFTYUp1SDNKVitEb3BQeWZGVWRBMXZXblIydGdhY0VGRjNMaVZHL1hWeHU3Y3hLaXcvTFFJRHlJSWNkeWdhS01MYUNpdXVUYkFJclNLSE9kYzZXZ1piSTNOaVJPRnJucjUydDdTcElsSEFvcHBmSVQyREl2RHZKVUpHeTZWRTIyWHlSVzlVSGVwRUk3b1dpeWs5N2FBMytlMkdFT2svUVRxRUxsNUZyRndBbHVqeWZMbVNGeU9BZHpNTlM5MC85NWh3VFJ6RWgxbHhUL3h4ZUpQb3c5WkI1MGo0QjN6aUhzSmlJRGFvVThLZjQ0YlRTc0p2bGdyS1FaQnJIMlB3MHNWNkV2UHdWR3JCZzMzTmZKZ2h1aWplSGo4VVZuMEFnZjJQVEpsMDczbW5TNGtXYjVDKy9zQ2Rxd0V6dFZYaDVIbHFkVUdwbDhmSWNhb2RnRHM5N2ZDZ0R0bFBoMGxIRzZSSmdCaVdSV0Z1RnFHZTBBa2NjZDRDem10d1Ztemh1a1dwdEZ5clBvRTJEVmRHdVJLbWlGY2VOVVhOMTI0UzhxS2lHSDFiSkJvcUlJOFQxYUpVbnNDbWdnamFkOHlhZkYrMHBHUmV6VUgwY202OFBlK011NHVzVnNEbG5GYmF1VE5rWEl6MkhDdDcyaWpqWUpmRmh6emo3ZFV0aEFnTEUva2RKMU5uK1diUEdOajZBMnN1UFg3SW1iRnBKVWVoQzNDek5tSlpNbWYvV1J6blV4cTI1bmNxRzFJejQrcmhndkhUcU1ydzJZN201TVc0UnpHdGZpODI2UlowOWRGMU9NaUdlb0ZxRjNjZFpMd2NsR0dTV0lUL0dsb01JRnJKOTMvSzVJRC9Xc3NBNFFoa3FoQnV1dk1sV3ljRXhwNU0rRkNBSThzZTFaQ3h2RW5WZm8ySFMxYndQS1lNM3F2T2JWUnBSd3Jta29rNUR3RXhsUWFRRWR6dEp6ZTVCZDhwNVcwaVhLTWc4WWZwZ0FNSFMxYzZSVXJndWt3MEg1SnJKRFF3Y1VOMWhuOTN0cmdzb2hKdTEwdTNnYXNkUkdSTHNTU20rdWNtalNNdGhTT2FSTEh2MWd2dTJXOGVpVTFwOUZGaUpLckovdk1SOEthYlVWZmg0MUF4RlpEVWd4ZGs5cGhPbkNvVE4wZ3hPQTNLOFN0VUprLzBTL3Mwc0VldHVkQlBDdzBlTkNLbkdLcHBhTlVYejUzWHk5K3VqNi9QZkNlREpucWVUUVRrV2VBNjEvaEE1M1g1akVZZmtBMHpSMm1Cb1ZvUWlMQmR6aXpaOTdHTVdrNnhrdWZsWVBUTUdiSngyd1NtbFllTXRsU0NIc2JvT1ltcXpHTHlPMTlnZFJ3NVBXREZrZ2QyQjlkS1ZiMitPWFBpaXlhRDRVV2hIdWM1SVh4OUFKTWkxWklZMnozZnEvYmZLbVo4ZlFwWmNqRk11MkdtWjVaUXhWM1UwWS92RHF2UjhmYVVOdElGUTFGYVFlRGRpSzlMM3hNWTROa2xvNnRpekUxMURFNXhvRnZnMUlnVUpBRUptSDZMb0ROZ210MS8wQURXYmYydlovSDBjaEtzWTBzZlRwMGdpcHRPK3lTMnlDcHFLd0xGVy85MUQ0Wi9uNUZqNHFVSUJpNmxvMko1UlU3YkpwaWZpSFlocm1JLzZDQ1RHSW9ZZGdGVk1rRVJOZHloNFVTM2Q4Ni9LV0NHMDNDemYvcFE3UU9adnNqWUdwSE52L1VwRm95bHJjV1paREtlZDdsbWpndkpQNlZUYWZ3NVZ0a1JsN1JEcEwyTFhCZ3BtOGs1QTB2Nk9VanJqYWVHcFJmd0FnM29NKzJWdVh6VnJxbkFXYUUyUjBQZ3QwZXpzQWlLU2FDditLL2VhVzhkaXJCRmZSSnJzb2JKN1VYNGoyOURtdzVQdDMrMTFsckVuNkYrcDA5RWxpY01tSkt1WmtXdzJyZzBZeGJOQklqWUQyV3BvZ0R1Y1FTM1p1VW1NUmd6QkRSbFF2SE1WdkllRitaMHFWRXVTTldNYjJrbllZcjRJa3lIRm9ielpTUGQyZFhyaGdoa05DUGxCYTcyMUl0cGlNaGZBd04rR25SdnBzZ1YwSmdWUkYrNVhNTHA2eThxZzVpL3h2TW94MFlodlVWODdWTXl4QmtZc3NRUXRPdTNCOWg3UGM2ZzRnN1lnZjV3OEx4T2Q2Z1h4dlM4enBXbkZwbXY0VERLbXVCS2l3ZzFzM2FzNzcxWStIb09mdzZrb1FTVWVSYkVWdklPWHNQeFllNS9nR2JSeHkxcXp2clFBOHhVU0lUVGxhNCtlWkUyaGZLTjNHK0Q0Z28zaVQzMVh0ZGxmbHJKUkxnVjdyaURXQU5UU1p2eSsvQXE2bkVsZUFrVXNUMU5Idzh6T2o5VGNNdzFodVRIU3diNm1IV3ppOE0vZ0VtQ3Q4alZmL1NSelZXSEQzQmJLQWp5VGJRTGpNSllGbmRkVzBYMEFrTGhUVTRMWmxWUktYZHRmd0xFVEVxaC9KS1BySW4xMk44N3dVMzNjVUFGTUh5UHN3cVVrMDBlZStNNUQ5cjVkQTY4YzNIZE1OZmY3OExtbTJLenB4WVFJSi9XKzBqVmREak4yZHV2dlEwR1AySkZmMUtYby9wS3dqS29zSWw2NzUrY2dlVjMxOVRtWUVhTW9NQmsxZUk3bjBHd1Y2c3NXWkI2SEhrM3V1WkxyN243VUFlbWFjNlAwZzFmQmxleHlDdkg0SytReUx0SUpVK0xsandXR0JqT1BvaElybmJTUlpGZWphRTViTWhMczI5OGxSZGdOaHh3cTZod29qbXVFakFoYUQzb1NrdERWQW9PS1k1ZDkrYVBxNVVwL0pmTEtGY0xTeXNDY05HMlJMd29naHNTeFc2aUhHc2dObVlIY0VRTFl4THJSZU14WU0rbVRQZk4yazhEU2RSSUxSM3ZCWFBGNHFZZEczTGFlLzh0b0VPbVhKd0ZGQjBNTDAwcHNWanlUdlYvOHk1Q051WFZlQnJRNjNhelprT2lQMkY1dFloWVZPZUU4QzVvcGJNdHAxSzlXVE4zbUF3RUgyaWF1NlZnQTR0R3Q5R2JyaElpSHZwbGlIeEd2aXJESWhKV0MrdUlOWnFORlMxNVA0dGVib01KcS9LMmJNa09IUWROU0hoaG95YjlUbHdldDJVeXRWbkd0eWtnNDdOR2NwMEpNSWx3Si9GRnFGOEpCYkdDcG9VdFVsMTZSOVEyem1WMWZUVWMwOCtKd3dtNm9zTFovemNXRnVuWlNRaDNEcTZSZ2RqUWlnSHFYQ2pldnNyVThRWjljWTJGWmtsK1g4R0VTRGUvTktDVE02MXhpZU9rVytxZitMbktUTk16NWxGK1E5bHdGMUw0VXFibFBacnRtaWs5cTlVZHpTa2M4R1hRRnRaUjd6UzBDd2tYbTU5S0wwcG1lVTNWQjdjbENvM01VbWN1OGpKUkZxcU4vZGZ2YnZQRnpFVk1WZUNIdDl5c0ttSGRvalprbVFhV1JuSWluYmorYUs5ZFR5TUFSNEg5Nno1MTRPdXd1bHJWUGJuS0F2TzdLRDU0ZXJkUUpEekluU0tZMjhwVTZNdTVJNC8zbk1VSU9wcURONjBDN3JHb2xzeU1zQlFlMEtDMmh6U1pGSHJLN05VdVlvVUZ1Z1JoWkxaSThDWG02cm1OSk10S1FqZHZkOHNDVU9QT1pVY0MyTVk3OVNqTGNxT2F6NFY3eWg1TnpFeEFvRDBZZUZQdmlZWXVCNjIzdEZWYVN0MkJ0WTRaalhpamNKMGFuZlYrQVpMeXM1ckEyM216Q1ZDTmN5V2hiQ1BxVU93bzJGcW5ZUlhtWEJZZG9zSEtLZGRrckZYL0dqMG1SSHBCNWpkR2pmeSszdVRScW9TTnZTbXh1cEVLUDltMTkwNVFUcWJUNmxxQkRwS3k4WTdzTFY4eDB3SEVpQUJsTTVYR2VOeUlWc0xlcW9RZU9ZOUFheG1mdnQ5Sm1NVFR4MlBpSGVzemdSc0VwOTNqR0VRYjFhMjZscUlxOFA4SkIwUmd2MmpYdFd1aGFyVmlRaE1CQ1Z3ZFJPZ3NpTTVLQ21GbFRIT1RZaVU5eVp0Y01SbGdESVQ3eFlpaU4zYkFUSDVyMkpZdjNpWlpGNG9aN3duSEtIdm1ZV1hTU3VhS1NDTExFaGNybk96OXZpaHZVRFFrUVUzNEtULzQvMFczSFZzRCtHNG1tbkZrejFwL2QvZy9oTUlXSzhzWWowR3Fma0F5MXNFUUY2enFNV3ljV2RQVkN4aWxsbS8rSWFQTmhMOGtSbTFLL2xkTnRtVHh1Q0EwcUIzS0VKQ1dEU0lBeit2UHhqMUZITzZmNTQyTUlodWxWRUdoSEhVSEd6UGd5VjBHMzBxdjNGZUlxVU1FTGR5eXd6UURqV2F0cXFEbzQzRmJwai9JNmJLVk9QeHQxQ0p5VEF5MVB1WFdMNzdLeXVLWlFjYU9nTWhEYWFTL212T1gyVi9peEZDUWFLcmUrM0Q1RVN6VFFaRWZIbzFXZjhZR3lQYU5KVW1jOWt2bmtpOFAzMFUwdzlWOVVMOThzUHR0T0x2TkFaaTkwNy8yTW1yc2ZVZDZtZUJhMm15U0VaQUYrQ1FMTk96ZEFUc09vdDBDdWpnSTFkZWVzRGpwa0Y5RnRrMmhRZ1JxYnVkeEZPdWZsUWtteC9rRHRJbDk3dUo0bXJ1bkhLR1lxQXNSWnRSY3JjTWxxNVVQbnZwcjVHTmUwQmlCVTg5M2JqSXFUQzdXUWtBcWZiSmM5WTFrcHRPZkZ4ZjVVcUhUSjJBUVpqazRQaU95a2JYcmltbm1KN0dqbHl1OE1vN0pScVh0SG1kTTVva0c3bDlUbmY1UGN6UlYrNUprODl0azhQenp0SUMwbHVqdEhHZS9FOEtPbEZpTkQzR1Z3djg5RWJvQ2hZR2hRdFMxYmoxYWdiRjdpUXRPZHpUbHRRRWcvbklMbHhYZUlFeVN6SGNsek5DeUM5b3M1LzZQMWJsOXBDT2hlSVhZbGNoZW5IWVY1L0ZFN3M4TWVpcUw4a0JySkI5M05BMXNGS3BBaDNzTjhzaWlxNlF5Tk0zTzBoU0RzRUxOS0tjeUN4TXVydWMrcStBSXhhc1p1WVg4SnBYNTluTXJxNDczUlhxdFN0VGptR1E1VWhmekRzNWJTSzVVNTdYWXRxYW5sV3ZmZmhCT0h1ZVJwNXVVOWh0M2FEN0twM1VwWEk1SnB3OXJBRFlMeEhBbitRS2htOCtIZVp3UFQwMm14ZnFiQUUyNktZMlk5OVI2M2pET3lzU1BPSjZHOGlXMDR6VHYxcVJHKzBiREdpZnRQOTlMaHhod2xLVE80Z3Z4NmViTXplanhFT1NpdlVERTNpdzBiQkJYaTNiMi9JZkd2cjhmYlZjSGcvWUZUTUU2SUF1RnJmaytvRHN1QVRTM2UvQ2JDSk1ZeTBpOXEzdTVOTmViUVpUYi9LKzV6VTZkZGtCWnpNWHozMVR6bUsyNC8wbktsMklxd2tFWFF2eXlwbmpoQzEwRVlCTENNYjZyeUVUdEV0aDhjZEVLVW91cjYyRnhKbE1xZGtFWGplZnRiYUlBSVJrSUtldXRQSmtuUHk1NnlRRGxjc3c3dTFmNzdRNUVIeEtGU3FIUW1TSTF5bmhpc1pqWXFTZTNMdzBtTVRpbUYzbWo1VDdhRkp1dUtuQVRVTm1oT1J0VktZUmIraXpTem5ZV1JrR1JGWEg3bnZ2YmZKUFc3b25UMzlxQmx5bFpkTmcySmtPYXc1cGs2OXQ2a1JxV1lYVzlnMHY1WVExTnRxY0VnMlZKRVd6NzE1ajZ4eERaMCtvN1RtWENWRllnUmhqL0tBSE1kejBhZGxBTW9VZzluaUcxWlEzMWx1SkRrRGxuSXdwYzNnSWxjQllQR3o3K1E2ZGc0WVBJc3Bzd3hDRG0vRjBhY3JMSDcrTTlUMlhub0RCWG9zNmdsakZSZnlGVVV1Y05tNzNiUjNEays4TTd3NEhsYndBRzZmNGdyVE5keGs4NlQzMXJWNVpabVJLZy9yWnJBTSttc3cydnVXYzNrQnhzaGVOdXlzNU9xaS9ENmJkeWpWWmYzeHY2VGRybVpKYmtnY05yRnZWZXJQbXZkMVlvbzRLVDdIdHhOSUhzbVpHWkxZdGJweGdTZ0dISnk2THk5a3lvQW9MR1hvRm1Iejl1Yi96eDRyK0dsRDBPRE9RaXBreGRhMDlrc0NmYzkreDF3U001Y01zNmZJdzVHMGZiUjFiRlJLMS9iU3FxN0dOSjJKdHFzMkIydjA0emd1U3VsSTlFbytnMHNQZFpLeHVoWlhZN3QrWU16b2tYZ3NhWlJEUFZ6SXAwNndiSllYL29lRVdUTXhlY084ZmxKdWl6Nm5LbnQ5SzZ6THgzT2dlYUhud3JLekZ4UHlhbEo5ZUFJSDRFM0ZYbGFtVHdrbDR2a1ZjZ3AvNGV3dHpRUlo4N2ZuWlp0MlozT2lROStQZlRIVEpvS0QrZmRETzByUTgrOGFVTy9ES1pmN1B5SENnbnNLbFVlRHN5SFVadFNMVTU5bXU5cXdhMjY5OFd3NWRRMkFvZStVb2cyYWFVL3VwV0lIUnJyZnNCSmRzS0U3cWZLTDA5V2tpaFAvQ1hRWmMyNHJTNndJUE5wcGhwTkp0MmhoU1UrTlV4aWRvNDlZWGh0ZHkyYkUxTW9vWHFCVzFiRzBTODlnNGx1eXlSRVB2YXMrZmJEMlZicTlrVVRKTlhSZkx2OEpKdDJRUzVqaS8vRVd2SDhmZXFvMVMrY0ZmTE1zZ01TNHpabWhoQVI1NmNZMGFJQ2dZQzluNGNsbXJOQytVSjA1eHBZN0M2NUlkclBaMWhSaWFXMzA0YkZnT05VNTJtS1R4QnhmWk5mVWRsRGxYVU5yaVdMekh5anEwWlBydW90aTMxQ2toMTNvby9vSy9RdUY0a0IrUDNpMmZxSVdybHJWb3Y0QkpoRDBxK0x0OUR2TkgyNDJJeHBQRlhST283VGxubWNlTFdDd2paQVBFUUlDMExCM0w5UklFT29oVVMzN3JWdFhhZjN3a2YwV3lHU1l5QnFmNEpMNTJqbHhQQmlDUjJSWjJuaU1aTDFRckhoVVpHQW5vTHhVREsxbFBNMEd5MFpJdUc4bVpia3ZOUUJQNnNzL0xUUzY3cFBIR2lOTU9hVGo0eFZadEVTQUx5OGN2ZUg5VnRWbjY2d3ZQQmpwU1hpMWdCa3pzM2lJVkxrSnRFU2JGVGhKNU4zOVhRc0dORG1DQWh3bFk2QzVjWXRhVnRaYWEyak9mZDFnRFVYdWJkWlpIbTFkMmxUOVl1ZWxqZ1JLSXphK1VJQ3FLMXl1c2hsT0kwMEpyVmhBdUJtWVJLSXVFMVYvNmRlYTY2WlVHR1Zad25pcVl6K2VEUitzRHl3VnFBYmtYTGhBempEalFGN0ROS3ZFd1MrWXN4TldDRy9ldklCaGVQaVpISHJDV1FPdzg4eE9DS092RzgzTExsUktySnR5S1l0ZkZmRGpMVnFVM0VyeU5lWEQwTlJncjNzS3lJM0liNTBLVko3SExHSEJsVVNzVU9NY3I0RG5ZbS9NcS9sTG1iUjR6WFVQTDNleDAwZWQ3cDAySjJNOGVFZXEvY21wNGJ3M1NIcUlnQWl1WE54QldnMzYzbkpXd3dkOHFRUmNqTW1aSlQvY2J0OVhqQWxYTTlhYlBhUlh6Z3NzKzdqeTdkKzk0UUpPNTlHRVVWYUxIMnNrSFVhNzRsd1RMNnliRGRVRlpBMDYxalBpeDFMUTI4c1RNK2NROFBZZWkzMGZIMisvRVFyL0k0U1VQU0pMSkZRazFrekJqSDUxNWtacFVFVXJ0bTRZdjd2Vit1MTkrVDhaS1NpWDdFdUttVis1OU96ZnpLMG0wSHNOcmZpM0ZhOWFVdkxFUG53M29zSzN4OWxJUEE1aVZoam9ISXI1LzNIQ0dUWGdzbDlrL0FoT241enJpd3RldURjdlhwZ0IyZElha0ZGT3MyTHIzUjlzc093cTY3dUx6cmd0SFNwWnFwWk85UTJEOFRSWU9ZN0huY1k4TDVXdFNNc1crTnhpZGRMSUpRdDExYnhKRThrZ1hCVGd3ajB0VTdLRzJhYVJUOTY4YTJvcmJMM2hXTXh2OFhtaFB5ZlZUSDE4cnV1QjlwcTUvOEpBczZ1WXBYUW9iYUIxOGhCZnJvODhsS3lpUVJ1ckRKcDZ2UGpjMzZjMUhVNERCMDdNZW5GZlpLazNCUDRPdGM5VU5wYlNvNzRNcnZ6MmlXakJuaDZEa0F0TFlKNjh4OEVUbURVZFBha3F4cnN1Q3RablR3KzhqZzhNTWx5Q0F1QlloeFRqZ1VNV2daYSsvaEI4MHRhZm5DMGFsQWFhNVNCci90bGlML0FweWxGbE10d0duMFdHSDczN3U0R1MrK09zS2dpZTB5TU50M0FwZmxRcDBJVDIyM2crTnZxOTl4NXhTVTZWR1lkUWk5WlFUYy9yVERkNEZNZW1CUDAvVXFnMG1wUGtteDBNejZOajhETjFUUmF0ejgrbmxORzZwZEJjMlVBUDhMU2x3bFBwNlBLYVo5Y0pkaWFQSDFLbno5MmdOd2hUekkxempkd2Y5cU5rMndtaDFPMVJ3RTQ5ZVZuVGFYZFJ4bmZhd1haU0tNcHdLM04zeVkzZ3hZamRleUhLQnJYUTk2bWRRUGFYbVN1WmtXRDFLckY2V3pTT3JYL1lTMm9JblpXZWcwVEJ4ZW5kS28xWDkvSHJUR0pUQWE1RnF1L05UTklUYXhRU2ZmVmNEaC8wTWdWR1dzZFhWRTNBV1lzYlVjQWQrWjJ3MkdhL1N5ZzM1bVA1aG9NZDFjb0s0Rm4rRS9qd3ZidEUzalUwSGdqUytnZFZhRXhPN05JdzFUdm5QNE8vay9TSWwxbm1RdWlpdEMvMkYvaytzMG5ib3dYcWljbmpsMHBvK0puSTQyM1RpdDFHQjVnZUhnTDVqU1g1eEEyKzhnQzV1QkdYY2Q4eEQxT3VwVlVFNmNsZmtLQXR4QWRMRDN6c1Nxazgwb3VhbzR5VTR2TkovbXZNbGVWOWllSThMYVBPcEltcFRJVUZ0UE14YmJuOHV6cnRKTW41RFNNcVJJSDJodi9yMkdhb3pwL3N3RXZrZVJlT3ZQTVJnayt4SG5mK1FXMXNMUWFCL1V3ZkpPbVV3MEVmN0pUcURvUUc3M0VoYTlBVVFXbHdHVG92Y2xXVE5FdVc1Y3psK2o1RTIzVTJtYUxUNmF0bjF3dEZtdW5RWnR6eGpyZnlCLzl4TE8xSUQ0UGlUWm0rc1R3UWhtbGtrbmJqN3k4K2hmSm5ZUm84b2VpL01HKzNyWVEwdlZsMW41VGo1VWpMMlZjeWtVazNsK1J0UW5RcjlYellEcHNiMmUyMlJGV3lJNWRURTR0VkRJK0RCbExCWDFhTjdUSVR4dTFFY001VlRzeGFSb3BDREg2WWRkbFFVTzlkZ0JVRTlvVjNySGJlYzNOWjlxN0VPeVBqZ1FwSWFGWlRzV09TZlFucmZwakdQanpGK3JxWlBQbzJFN3JUU1Z0UUhFWUcwWk9HdUd5OFZta0d5WDdka2hSZ0VUNytsL2Z2Ynh4KzVtQUYxSmtqSHN3b3pkcUtmczlqd2xMYWlCdnRBUmJpa2szbDhFTi8yYUJ2UEdEa3RyTnZvalYrTkgwQmQ0WUNqMTJ4alZGcEZva25uaTF2UlpzcDlSNG5PU2haZmRnb29nc2R0S0VVYVB0ak5pcFdMeEEwa21SUjd0V1VOeTJKYW9ORjRWcS95Q2hzNW8yTk1UYUVSUjZ0bElaVmticlY4Q0xtdm52b3VsNm5kVGlEdEdScEdveDBqOFJOYVByR3B6VmIwSVc0d29xb1JmdE5TMXNNOXI4aVc0WjRjVG16aEZkZXUyblcyRHJJS2F2Z0ZkR2xCUTNqdjVYdER3SWhCWkhXMUk4SjlyaXhoeld1SEtNMXJmRXY1TkExNTMvZUJIdWYyZ0QzNm5sMzFtRjk2WVA3dW9LNnFhQUFYODVFbzJURmgzOXFpK3FYcGxERVB6bG9VWDNvMkdyNDk1VjN5K2orTnFFa0JhOWx0bWxRd2piSWZ4ZnVwOXlyelEzUWg4bjEzbHU0WHZSa0VRNENFNWdQOVljbklsNS9VRUtQTS9KSk5YbDRUMjcxZXA3ZW1BSlI0WkdWajM1L0xEU0tLRWt5VnR3aVhXQmZsVlhWckxLeTBQVi9nNlVoanFmOElqU2U4OHJXYU1lSHhkOTBUQk1yV1VZWWhTVFNaVENhcTVxZHJsNHJFdHZTRCszMDMxOFlBTXhBeW5NcEdJQTlmQ1JDZXR3NzN4ZnhlRmd3cVRqaHJFRFNZdmdtc0lwb0JPRHMxZnQ0R2h1b3BDSURKckh2dnlZczZCRThXdDMxZDFGTHM0b3RHL3BwT2hubzk4eHNFY0FsUGkxT3ZCWFJPVEtud3krb0x5dFVHK2dFSG5NZEQ4blVSL1FIMC9kZUlUdFBQeGlMU0U1azI5OVJQMXhWdEsrdVJtZ1grUHFXV3pNbFRLZ3pEY2hVeHRnRDVNWk4yQUpkenpaTzAvVkhIUlV6eEZ2bEgvRVJTUzdwQ0tydjhGMzJnbzQ3N1dDc0hWY0ZKWlRIYWJrcDFqekhibWNIL202NURQMnFrUFJxM2lSOWdRZFB2ZWNuaDdlaDNxak4wei92Nk4yb0RRbzI1ckYyTHY0dUk0WER1clBaYWFBZFRqUUdoUnczdnhvK3dCcGJUc1l3eVkvQXVoTEFzcUxQZ3kzM0J6a1RNWW9zOWJPcjIveGJ6ekFlS1pnT2lHWkRBbVlYQkxKQ1h4eTdHK3JhQjg0dlFJTmJPdDJlSFF3M1F3bS9oOFNkaVcvMXI5eXJVcWROemZ1dDdER05JczlSN2Y1QWRmQUh4UGkwRTZxdE1wRE5lclhuSVFXZHY4RkFUT2dxM29SZ0VPWW5tV3FiWG5POFhuZ1lFeklDSVFpZGJRVmwxUnBBQlltc2t3OUd0M1gvUTVpMXJyS21XQ2VPZE94bVMrK0x5ZzYzc0gyQlJwYVlwSVpocnh0K3Qrd05Zc2p4bHZtdjhrUHdqQlNvTmdQSEtwaWJXUG5rR2ZYMytsM0g4WS9Ma0toVnVjZkpFWEk1UVdQbmJsalJKN3ZIM2dWTmZVb3p0S2xIU1F4NGJqSHJWbFRaa3lTc1pJNUFvRHhRVzF0SFByclA4TTlVZjJPcC8wcVRDVVFIUWJTQkRFRjlzcjBibVI0MzNFYzV2Nzl1TnBPeDdtV1Fwa2lxZFJlTTllbnpXWnQra25iRmFuSWk5cWcvaVlXTit5bjFwY3pUMThGUDQrUkt4Y1ZncjdMWnlrN01ZY3ZkUzJSZUZWdCtOZHFkelRDSGVSbXlIdXBvZVBzbXBNQkpqUS9OY1lUdExJZnVMR1FxTkFCTDRwWFVBVUVQZTMxU25XY0E4cjZKOGIrK0xUQ0U5eTY1bktQeDRDdzB3SElVemFGdEhLYlNlUVE0NzFqRlFRVmZJRmZUamNIei8yLzErSWx0ak5yTjhGVWRGaWIwNE8rcno3Y05FdHp4aTkvZkQxR2tOZ01pZUtabmxSOG1yaFdlRlBDQzJJM2pKR1VjeGVZdGxuSWo5anVBUFp0SVdzaFR1SGRjdCt4RG9qTGxpY2JIbTBsb2xURjYxREJSaTlnWmxIMHc5Qk4yRHY3bERLc3BHeGN5UzFGWlVIY3ZzMld5T1dsNlNTRWN6bVI4aFVSVnYzZmpFTUc1cE5aVUVVVXMrcko5Tksvb1FPczFwZHZ6ZFFnSUw3dEtibXlhMHdBRmZOck83MTdQUFAzbVpWMklYaDk5ZjV2ZVNVeTZxVml3bXdaUW00TExBQkR4b3hrcVFWYnAwakZDK0hRdTB3aTB0QWRpbTJ1akFnTXNoeWFMR2taaldaLzFDVTEyeEZ6NUJmcjNjcUhTeks3UGdUUmFnbnpleWFzTmcvVm9pRTAxMEt2WEUxSE80RGtaT1BEc1N0ekp5RWRXaVVGUUxvZWxzZlJJbkVTWXFZa0lHRnEzRS8zMXc4RGpQeksxNEtVbUhqYVVYS1FEWTkvM3JIQ0JZK2JtNG9vaFU4d0pPRnVwU2lORTlVVEN4aDhmdnoyTDlpN0xpRm41eFB6dTJCeVlzTVhPa25reWU0TjNUQ2FwYWxrUnd6Vzduc3dVL1YvZ05GZXdXZ211ZStIYjdJYmh0VHVHUDNPN05zbUNUUkhVaWE0WUE1cnMwWm4zaHF1d1pIWnJaTjYwcU9BNEJobUJNMW5PVTJkWUFsQ0VZQVpzVWNaRVZpcXJ5YTYvYlJnY2xuS0tBLzMvTkl5WUhERFUzWWhkZEhRSndaQ05WZ3A1OEU3N3F2bzVtOW52eXFRMWE4bHJNb2pHRW56SkoxVmtCK09nbWdmK214ek5kaXk1QUZqR0llY3IraHRNZkR5UmpUVjhwcFJzTkthZlFSTk1aNDIvSzh5OXRqMU83NFd4NXYxQWFnQ0FSWVVVTC9iRzdrTVJSeUFrZlpZMHFTMENCYUtjbjhZRjcxNnIzZHU5QitZdkNWbWhBelJhWGJVd2Z3NGtGRllDUVdqQWlPcC9HdnEzU3EvdkZiVDN6K2hNZzZqN0lPekY3L0JYa3IxSm5heXRWWUVvK2hjaGtEa1ZObVk2Qm9BT2JwZmFSUUNqRGJnTzNDaUdJQzNqMS9RT3RhNjFwRGk4WHBEQ0grVWtueDNzVXIyRGRkcHV3c294bHFuUjlmMUxWdWJoQzFQSW81dUFIc1M2MmY4VDlDNzA2NVBCbWNzaEpaZkpjVEZockVPRFQ2MWNEQlc3Y0poc21iRVhBbzhYanBaQjVBUEoyUDBtVVF1OGM1N2sybXgvU2gySmVaY3I5WXBNWVBRN0QvQXFla0luOGd2ejg5WlNDNm9LZGx4cUhGQVBUWDY0eEVFOU1Ja0tZU1VObHMvV3VZTGxyVStTbXNISkhGMnZWRnVCYUNoVTJUT2lQUnk0bW41UWlCQWVBWWdFVkhUZUdHd2Z4V2lBTTFoNnFHOEplcU43M21WYjkybG5LVitENm4xUStiek1hZmhDZ2NqMXAyN1pTb3BJN3BVajhrUkxSU0pwb0VmYVpGTDdmeTBNYWtQM1BHbTRNdWxqZGVjZHpsMTZEc3lsMDVTNjJwYkxoR2RXZUVWVHNlYngrR3FsaHdBbHdhK0NTRnZEelhtZk84SmZOTXhPOStIWnJsc25VU2w5VFgrYmpQRUpOQkpNSVpTcE9iNFhXa3ZmV0ZCWThNMlVxdlZHclpxTER3OUthd3hCOFhubmFjVEZOMzZCUUIxWFM3QjliUXNqeEtDSzF2a21UbFlIYUppYmRCU0x6d0dJYnFWaThONUc5cFZVOG03a28xMzZUMS9RZjhibTluU0NSMm1Obldya2s0QmF5VlMwQjE0VG95OU1TcTVVQWFTVytNcCtUZEpsQ0c1ZlBUbG1QZWx1cUVwRU5hRjJRaWZDTkhwb2hxVERPK1N4NHZYTWVVY0FyVG5wUjJzcUs4dlhKVnllbUhDT0FGSWI3MHdZaDNQZk5YY1c4cUxRMUs1MEExTzYzUjVPcEUwaUVPbW9ndVpwQUFVQmgvenpkSURPTnNBWGt1WXlZbjdISTlQeFQyMnE5WjFoam4xTlkyVUMzdFp0NGNONXZ2UlNDcjNBMUkzaWo4ZGZ3Mi9JUVJxaFN6Q0l2NXV6dGlMa1hDdm4rZk9idFROY29yOXA3V2FDeGZnUlNTZDZXVUlER2lLeVZOeTJWbmRrZElFTDNxODhGcmZrSlN0SUFlNHRJSlRSUnNSVHNPYlVGSUwvMmNhL2RGeS9CQzJBWEMzR0xuZVZaSlJGZnZ0Nk1XMGV3Z1ZlYTF6Q2ZHaUYrWmxUeE1pQ2JCVStZc3Q0YmRsTWVsdlc4WWNnWDRUcjhtQStiRzJQZHIzQjE1bWJtbmlRb3pjbWhoc2toa1BCT2t2OXdhSEp4OXpXUUdQQmtReVg2QWlGTVpCbVl1Z1kreU9ZcXA1anZ2c2tPVXpYQ0tCS2NwU0c0MUdIRCtieGxYRDJxY21EdWRsOXNqQlBZa0dFY0QwR0s0NEdSQ2oyUHJ5czliWUhDdnBQY04wVjNSMzVWQXp6NzU2S2ZVakdZMnJYOENzRktvdEt6anJUZkJVQkZ5dERBdzUrTWtuM0lQNEprcnl2ZUZ1QVR5ZmN1NUE2Yzl4TW5iYjlQTHM1OUpRS0YrZVN5NzRwY3pKa2NPS1BVNHlmOEhQaEdnVVc1MTErYVBxZWtnZW1FOWo2dnNrc3ZQR3BDVG5CTzJWdjhESnJXSnQrNnZqNjVrSlhhS2RFODVtYitzU20wcmc1dGtrR1prK1FRWDN0MHZKTm1hRzB4bURhR1JNV2dxaEUzbGczY0xFMVNtNjZMOEJIMUxMZUMzV1pjeXNCd2hDNGRsc044akpGYlZyb1M5VDZtSENRcTBhREd3dTFtQUE2emFxV0pnSHkzak42UFYxeHBLemRaTFY3cHZNQ2JFTTMwQ0U0L3kyQzFBN1ZzVFJ6ZGdDU00rN3Y0L2pJdzFPaVVad2xrMU9vWEY4MUxFVElWL2plLy9mNmptUG5BNGJWVjU5eU9mRnJuYUkwdFFrclNqYi9MUG0zZ3VZN3kxNEt1VE9USnVBZmlPeUplVnplSjJDNUY1STVYRW5BZE9YTFdoM3U0aVFENFBqWVVYYmJjMHduMG5QS2ZtRktFTkdYVW9HMGxKSy8xNThJUTZOWEFUd0EvaG05R0tnSjlrWjZwbGZrRXVZWnhDWW1tdW1DK1NVWXlhd3YzNWxJMjNzOU40QmNpbTRjQTJXYnJQNi82N0dWTGNuZXdFUU9JNklxM2RhNWpnWHphQ3A5bDFNRkI2UHNIWHBZNlM5ZzNpV25CNGZRK0pIaHJvS1RQamdMMWRHWUtKL25WU0xxNWx6QTFiWk1vVVdEZ1dtOXQrVUNEajlNSXZjQVI0N05hMmprbUpVNTVnNDljOFVvSmhxOHV6bUdvZHlIdWFWL1ROMEd1RDNkVU0rNnd4MEpyTnBTNitIUFp5VHNvaDBCYTJielZteWVMbWw0RXA0V1VCNmszTmVjUGtFc2lud1dYdnpobm44YTh0aG40SFRLU0tjTnpuVFBOM0VmeXIzVFdzSm9rZ2x2TnFLNDgxK3ZDTEFZWDZ1VXlGV0FKUTVvKytacUxvOTZPd24yTmZPUGFXNG9BQ3g3ZUs5d3RpS0tEL1AwY210anFnSlZybG5oYTZvVVBYbHdhQUpqZExTRTlqVUtlWDFDNlk2RS9vYnZrTm9iM2pzWU1aaEUwRFQ3dlVtTUVrdGNzVmRjSXFUb3pFUkFud0h2bUlhd1BVbE8vMmpNYk5rZjlPOGhSSjdFbEwxQTg4amVsa1c0SDM1NktQTkREaS8yaC9HRlZGQUEyWFdsWHkzLzN6TWxWUitwaWl5WVVpVWVEVGVHUCsvSFZmZklCaVh0dHphZ2RCa1lSWGNBZ1RPWXMyeFo5Ty9tQnhlWGZmMXREREE5WDJqQnFPbmRET1FEZzJBeld5NHpFUHVQOWhWTTQ0cEJzUnIyTTFuYUJ5UWdGODZCeTN5NjdvakVKTHpjRlY5RzN0WEFKc2VDU0xJLzZSbnpoalBtd2J5b0V2aWhXb3F6MjIraWhBeldsUXdWU2Z4dXN2WE1rajl4MFFHeG1wUTRHZEFINlRzZGtsbW16a3dhT3BIcFRuV0hVMVhSbUxIVG1kdGFUV1B5VUc2L0tSVDRjWXQ1YTI1aHpud05KdzgwYUJIcUl5dXNnai8wYWpOY3k3L3lZY0daUDlLWE1DVDlQMGkwMDAwUjZtSWxLQVpvbG4wVzM4Y3dJZzZ1NVpOT0N1U3FsZGlURlRhbG5JZHFWUU5XNEFvZkFqbnVwelFxRC9kRTJpdmJzalpqZ1R0NnZIUWc3WWZTZFltT3N1THl3SjFPclF2T2doQnJ3UTBRK1QzT2I5NjhtSmtXcjJ1OSs2a3FsTFgwL2ZDLzJZTnhwT0QwSmlkaEpmRUI2ZVV4L3gya2hzNUhvaml3SjBCTkh4OGlUUWZDQVZzc1YrWkd1S3g5eXZBUGJTUFpTbE5NWVFYR3J0Z0pTcUFJcGxaZ0NoR0s2MUFIR0F6WldpdzVWZ2xORXdZOUpUeU1TQUN5Y1g5alg1NlVzQU5nWks3L2VidlhpYVdHV2dWVU1sV0JLcUg0SnlJOE40TjZxUWNiR01LcFZOVmpxN0J4c2oycjZHOUU3QW1kZVkwWVJZK0FCMGk2ekVBQm1OWmRwUUVCNzlPRzR6U0toNFVSUGl4ZXVla0ZCb0dwc0YrQkpXbjd1ems4REowT3cydHJQRDNXL3VHVU90aldsSUx4OGtBc3VqZTVzenRtK1RxQnZHWDl0VzBPZ3FHVGwyMzVXNHNuL3Y4UEU0UXBUQzhPZ1lBOG8rcEMwM3BuUVVOdEFVZmdaRVlkdHExUnFBdHZSVjlXdldHNjdFNUIyVlJMMjdSc2ZFTWEvT0pVaWdwU1RrcmNrRG9USzJYZ0FWUkFtSXlYODRzaWVYSDB2Mnk1U0loUWlUbDVhN0gzclRQZHlBYnFwZGluOG9sbThSa21GS2NnajJzZk1mM3JOcWpSeUlnYWYwNUVHSjgzNExoWEdIWVVTeCt0NGtDdjV0bkZYU2JIcnZ3Z3RNMVRCS1p5czlVamFsSW9yeG41cHRjQlBOU0xqR2l0MEZ0cFd1eXdrdDdDWCtMclQ2ems4bjM4NDBJWjIzTVkxYTFiVkczVWZUaWhyMlljMC96UDdSVVpmSEFzOXU4anhza044LzZEOEl4eUhIT2c1cVJWQjVGbUJhdHJJRGY0NnVadG9FSWxRTGJpWnpZajh6YUplZmpqQnFSdkR3aW9TY1REY2FsUlhRNEhJS1diR21WREU4ZXcwbktSR1Z2MzlweGlQbk94anJBZU5HUU9wZTVLL3p2TEpSVmphNUExanRad0M0citZVUR3Vll2Q3R6endEeUFrYU9PWGtWb2ZGamQ4cW1yQjBrblZHekNoMEJMb3BtQ0RHQTNhS2pyWndtQ0VZYlJTcHIzd1MrV0tJbFc1Ymh1ZE9jTUZqS0laN1RqWU5ZNURFRzBoUWEyQWhnRG43RlRkeEh1YW43amNYdzNYem5lVkxlTTdEcW5VRnIvUURnbWJiU2NiSDRXZ2ppTGFkTXBhSE50V1p5d2h6OC94NDRBdk40blFkdGNaWTJZZk5ldkNCbmQzTDl6T2NiTkZQVW9Zc2Y4YXU3cHBvT0NGMzRNcHc5OEg2aXF3UVpOeXBGYWxPMU5DTC9QTXZCMzdhU1RNSHd4MHFLMTUyZjcyV1VGVjBRaXJrUy9qOU43UG1PSHEwcHdvZG1aUTFGc3o3TDlFUnBRVUlEdFd5VE1zSHQ5a1pNTXVjbXhPK0JURU5hRVdyUWZyMDhiVUF1WXNzWFFWK0M5QnFneC9pT0l2NnI5VFFiV25ac1dhbmRHYXNHS0dvWTNFZVFGNVU1aU9ZT1hDdmhNcFRONHJJNVpjbHVFVUNWcU02anRoUGJ2SGdQNWZEUXRmZHJOSGl4ZUR4RDEwdkVjNmJUZXFKUmxCcDlUdjIwRnJheWNtL2FzZHhHbWlnUGJ3MGljd05VY08vZWo4NFp4Z0xYY2ZoL3JRY3A3L1plWGtjNWhIMUc2K1loWHZVaHcyRjZ1dm1nNzVRSDgzenord2NTUmVGemtub2pzRGZ3VHdEZ2E5ZEgrK3hBRWdpWHpRL1lZQ1dGbVZpODkxZUxkNGd1MlJEbXlFWmZsV2pBWDkxY0d1QnlTT010VVNIa3ZoUC9aVFRhYzY1M05qalR5dy84dzZlelYwamU1M3g3ZEVuZnZrT3dPR3pSOWtuUEFFeGM3ajAxVW1LcWp1dEt5cm1RdEhtSjl0WEZWMXZQWndERkdjZlJHQ0tsUHdmT3pGQllzdk9zOUsxanV2bmU1ZjRMV04vRTBGMkM0RzQvU3k5K0g0eUFtS3pmbUVEdEdEOHlpQTh3K0VIVjVVTENNMlljOHQ0NlQxVXBDNThiK2xFN3EyQnpEUVc4U0ZWQnJzbkNPWEpZR1RjWHNxaSt2ZlN5M0liZW5nUlZwOWliQStsbWl6WnhEU2R4RHlYYjFpSUdaZm1vOGN5MkVwRWMwbHh3d1JVZEFoak96MjhSZ1packdHQ0ZXeXd1Q2JJVlNRUzJVMnhFUGJ1YjZtOHlzc3dPbHR0K2o3cDF6Mjk4M3JyUmU2VndFTGpWMkNrSUkxRCszVU5EZHdpZzkvUXdFZ1FtdmI4UTM5Vmp1MllrbTYrdkdwNXh4TUg3K3MwV0RSZTByMGpGTk04YUExNEx0L053WWtkM1BuNWJNaGRzODBUZ1B3T1o1R0RWUmZ0WDVRM0NkdzB5ZUJ5aFJHT2ZFOEFQL2pKY1BuOS9YM3p4Z2g4eFFjdnFUUktZdDZvSnRzNnVZblo4bTRGa1BMdlJjc3JIaVNPMFlCOWJna2VOSHlZTTUrWE12ejc3bllFYVEyc241NEY2MWhuamNTSGVWOUFDZTl6ZjZGQnR4dTkrVHR0djZrYldNMi9HMmtFRkc5Wkg1dTJzR0JpeTVEOVhPMlUxM3p5SGQvMzY4Uzl0OXd1djRUOUNtN29iSFlYUTF4dUpXTzRYb0Rwc0tEcFBFb0taeFBCamtxU05hUTl4aDVKOEIvUUo3MHJpbFlCSXZKWVZrN0pOTnJJMWtXU3hGakdFTjBvTmhQcTd6R0JzWUxEUThZOGU3MTNGcEhXNUhSZ1d4bXU5U0ZoblIyZ2JOYnNJQVpFRkN5dEQrNjhzQmlGVVo0WVVCVGRtQU1VRDNaQUZQQWJacERobmpNS3puUlZnWXlSK29yT2VqYXo2L1A5TWZkYjBmd1BnSHc3Y3VORHNSNVI4Zjg4OFZ0N3pQTDhybjY0eGZ0cnA3b3RTaXk1Q1pxSE8wSHpGUGNDdENiRHF3SW1SRzRibnJNVytqTzNoOWhyakdGTnJwMnllbjFyQjVDcEF1NjM5UERqUnpyMHNOc2p4Ny9OUmpJbTNlZ2ZvOUdlOUFmYXpVMmNQbTZITkpYVTJoWXJUOG0rYWJ2SWdtcjBDR1ZUb25INSt6dEFxR0ZIZjRoNUE1d2t5NDVrNmF4MWRoU2Y4emc3RVpSWUdKdnR3MEt6NmxqQUJ3NFdCTUxIcWhtNGcveVVRVHJoU1grRXVPeW5WNGVMaVJBRVkxUDl2RUdBbjcrdUl5TExwVXBTTlpXWTcraHNCUGJKR2RqZFZKMzRLZDJmaGFjQWlhbnVPVWlXY2pXN3FNRWpwK2xvTW9Yb0IyMkY5RXcweVBoSlBDS0RtNUtSMUcrV0ViZngzMVM1S2Z5dVBPRHhZSWNrQmM4a01CUHU5T2k3Mm9JZVBDOUI2NUMxMFVnR2t5dkJyYU1oUFpCQkxRMTlRNlNvYm9Ba08vUUU0a2NlelNhakFUNWZLUUlYSW5OWmoydnpDVTg4Y3F6TUY3MWl2L3RwS0VCN0hyOUVLb2ZmNWJQM2pmVDN1cktKMk0wQVY1TktGQjVEN2h3dy9HWU15OG9xR1UzVStFZHk4Z0hoNWp5VGJIZm1qdmt2dEdvWXpDMXUxVTEwZW13VGZocUVDYzZsaFZoL1FISTFhMytCK2dnd1pMTnBFMEZvWFV3S0ZxdGVCQ2pRZ1ptVVBwOWw2Yyt3a2hnSHVka2c5L3hPc0gxb3Q3SHdCUmY3RnpqWlExLzZYWW9EdmxRV0JtRnRTZjhreUViYkJRMk1VQmNMY1ozYWlNclJoakg3R2NTR0w1VlBmbGdWekx3OGNHbDZYRzdIaUh1NWI2WGxnMS92YkQzdEFPeGV1S3BLb1BZbW9MaTRmRUlmYWFOMGJBc3QvMVkyYlR4NmJGdmJkZjFnYlBSSFBSa1pON0RheDFhUXRSRUR6UC8xSjZhYWhJVnVHMFRZbmpjRDRzWVIvMjlKcThwbW84Z1F2YkdKWGo5L2RLZ29UR3RNWDY2QnRnbDJabmVRbTIxWTcvVm1zdC93RGl4OFlLdTROT25UZDIvWG9yUmFyUit2NXp2M0VpVTZTNFZYZDN6VlBiVEM4MDNwMW9MaTlFUmRKZkQzdDVlbTV2WVBUVWIzUXJocEdTQk4ycEp3Qi9Tem9aQWU1WjhtdUZwK0N6U0grVll1Q0R6bXZyK2wyUlBueHFRNnJtMTczdEtvOTVNb24xcmcyZUNJY0o2S0g1ODhjRzF1RWhDRGdLSmdRQml0WnFtd0Z5NzZNY1lyOUtleE1xTG1Nd2k0L0w3aHRaTWpXOUlMUDZreXVKN2hwdlZBK3RldTNUUUhtTEFFUTV2a3hWSDI5eVJabTBlaURwUjdjRFl5ZnJ0UFIvTFpqbWp3UGUyR0ZnbEREOUxTUUcwaGx0QVM5c0dGSlB3OW5DSStXRmJEYjlROEFuNnR3TDVGU1k0SFRuRWtWVnNCaHV0MlcxOXZvMFdjM2NNTHo2TXJWTjVaK2hKR0o1N1lqNDVBSUoxdWxHaHMybHJEN2d2SEpsYWZNZVdzN3ZCdStGVm5zWEZ6K1NHcDRYYjFlbmJBNndRZjNha0dDVVJCcDhSV1RSekUzZ3Z6TmV2dnVxTnBxWmVIbCtCeEk5Z0tiSUlJODRNMW9vOHF1YnlhWEJSQVdGY2xJeE9kNkNaVnQxVnA4WktCUWZ3OTR1T1IxT0lsNTBKZmFYYStNN1Q3c2I3YkVWWDdrYnA0clV2OGhYcGhnY1FkakZqUGVLRGN4OE9MVUtQbUN5QU0zZnBKR2ZqUEtzNno3a3oxM2hrOGdvdGVNUjZuL0NtL1FWNFpURmR4RGhYL2cyK2JJQ0NsaHNMRTJrdDc5ZmtGUDFJTzVha0M1ZnBwaUVoQkVDaEZJeEJmaW9EeDh6VlpLSWpHWjlhY3R0bm44YzNSOXpaelJNdzl6WnJpWThaUXZTWXF1dFJZSzMyTThHSHlnUllyR0I3U3NING1PNVVzeExndWRURGlDY3ArT20vZUQ5WnFwVW41K0xPTDlYUDI3RnJieE11VndoTlZzSDVTL1pCUUhPZkhweEd0eE43dDdWOTJwNDZsQVVIQTN4MWN3bGN1MkpnMFI0ZWVKUXgyOXdTNHpjS2UrL3oxV3I3L2MySHdZdld0dE4zVk5pbFhyQWVyWHh1QXdzQy9zeXRLOXFBbjRySE5GUVVzbkRnOFRudUVKaUl1eU45ZDcrcEV0cHFXTWlKbHhHa1Y2RTkxSkpiOTlINWF0Tno3Z0pZKzFHMk1nT0JEUUhTK2VrRlU4OFpIM0dkRm1ncy9BL1o5NUdSTE02SFcxYzl1ZjNGTmZmeFRaNkJhOGZPMEhCRkpuMjdaOGFGdFlMYUZZVEsxSUJMekh3VHdDYjlaaG1pZ0VTQ3M1bzBjQXJBVHRXNUNoV2RtSm85UlJPTmx5TmlBRncyZDVaNWpSclFRVzk2MWh6cmovZllQZjhUbThOYVorVWtsd3k4a2Rzem5mcXVZZFNSeW9ueE5aR2M0cVZGdndWNElKOXdLN3A5Nm5tWUM0UXdrbzlpdVRETUhzZ3ZKS3VaMnkyUjBOdFFmamJKWVB4TytkeGFDMzRSVUk1eW8yS1R6VGUxMWtEaytxN08zMXJxVnRiaERRaFVPbTBkb0hPUEFKM0hIQVVDWFpFQ1laMURwVE9mN3dESWlqRWVRTW45R2FTZjRWN3FjSVVkM2xJR3lWU2FpdUx3WGh0M0VOT1ZXd2tXRm9XWnd3NkxIU3IxaTJPdE9jUklPemN4QUg3R2VsWmY4RG9FcGo3OGtDOEZCOHhnL2oyU3B1SjJzNENTcDgzZFBKenNkNXVsMW1yOUZHRjhFZm9DWUVscVJ1anRGSWJCb1Z4MTV6Q3ptc2p4ODVKSlFQYW4vUkcwYzZKWVdzcVlsVGIwNTZOYjJid2hwRU83UWFEb1J6UVBTYVZ0QXlKVG1LaGphN05mTmlSdURVemROTnJQWGc3ejU5UVlXY0JkbU9XcElWSGdWM0xpbCtGSUtiMTdmaGhERkczclBUKzR5SVlkNWhMK0tDd2R2QnhNRHBKdGc5K1JtK1dxejBNeEFYaG4xeXlJcFdjb0l4YXZRZHNmbVJycXNZTW82MHpDS2dJZW9oQ1dZMmp1eUJUN0NjUmpVa3kvR1k0Vy82RWhsWkQxVjZRemtqQVRRMElZZzdFc3BoS3Y4TVBuY0pBK0hTbDNmaE1MQlpMRWFoOVBrK0NCU0tzQlZ1am96M3lrZlpoN0YwS1JxaW8ySVNUN3I5eWdOSjZjZjFhb1F2WWV0SnhPeDlLZzBLRWdRamFEVEhrcWZGRE9XQW5YdjFsMk5XcWIzb1BzZnRqZkZneVdFdnZFS251U2QzRU9XZUhaQjJTNzhlRWFYOEZpalZON2tjSzhQYXpTT0w4Y0Ixb0g2ekpXYmhXYnRhRFdEaVpYYUxwV2lGcWVvWmJ2TzlWdWdvcy9XZ0JKQnA5c3F5c1J4S0E5R1JuNlVQWUZFM0VJK05meTJ0QkFHck8zSWVqaytrWjRtYU9FY3RtUzNFM2syVTIxNkxXbVh4ZFd2Qks1ajNYazFvSlRzZnlpcGlhbWUxdFR0c0hDSXpOeE9kZmJ1bXBKck13MXlYZUJPQzFDVCtiemFOZlR2QURRZnN6ZkhrTmdzRDF0S1BpUzRvalJJNUNBS1RvNmR1N0liMENSSEdkRisyRXF3djgyZGtLTnF2eFFhR0tYUjMwOERIV0txenZrdFFzblZvS1pxblUzTmR0U05XNUZJYmNvYnpPVnlqSlBZOXZudnFhM01XZWRtNmdNS0x6eGp4REpPbmd0WGVRRHoyekovOUZUa3ZoNlkvbTJZcVUzMENWMllONW02SlVKeTNlR21MMUI4MFovY2N2NWlIZUxWeEVybEFuWDBxa3g2S1hpaFVNRHoyc2hNcWNLQTZvVDFyOWxGbjVoeDE1TUcrYmtyYnN0dzJyeGdrbVB2cEtKbmFydHRObGVKaDhWVjYydjVTWWNpbE1qeXZzSVhITGFZQU5jU2p5NlU0bmlEbDRDZ2hNMitWSmt5YWEvRFZTVDdVNGVweHV0ZlFNY1RsUDBYR1JIVjdYYklMSm96ck5MRDFLeGh0WWpEbzJSajNiVDZqdUVGNnJySmxyRmpqMmhsMDh5SEdCcmdwOVl1eldLbGZ2WG9JNGJITHZhQmJYdkV1QU1wMWdRUjYyOE9hN0ErSGxxNEV4dG9MMTB5L3NIRTR4Vlh0amUwRkhOZDhlemx5UDJqVXhxQWJHOVBlR3NOMnE1YnNTek84Tk4wSkdJU0RsblhGaVQzWDVLR09GMUZiaW9hZVo3emh2eC93TjZCYWR6aWgvcEZ0NXkrYXVoOENvWUZodzBhajU0VnltQUJnS2dXNzVHYVp3cjZHWTdjR05SdEhwSmMrZDNTRXluUE5yZ2RpTjRnVWxjQktvT2xlZkFjalpBYkNlZmhTUm5UU2lZSlMxMVdpaG1rcmlOM3dTNEw3bDJ2MlpyVUJzVmhyOWYwNUx5V0h5WVA0ZUlMK0VqNkJ2N2haQWtnS3hrdUlMZGdvVjR1U2ZNd1l6ekxmT0trS1VJWUZZNS9hM2x3ejQzczM2S09NeTlFRmN5WjlzUmlHU1hHelJMK002VWdUMWIwWFRweU5VZ1NRVWlXR04wN2FRSnZPZStGVjNSdnQ2dkpzU3NZOGlWUXhnQVJNN0NZbkF6V0ZGclRTaGtSOW5ESU8vSFZheC9idms1OUExRU1pR2liTi9FNWRnc1BnVllRQlhOeGlCNlZ4ZWppcjl4R2lZNXRUZ0N3UG9vTTAzWUpRSmlKRnZEKzVHNko0d1VtNjcxeXRRSGVYaHg1T1dzR1pZOTB0ZkhEdjI4UFJzeUJheWE2dUFHR1prQzFYZEJGWkJ0Zm85T2tCY0tEbDJ1cnNZZWlURXNIeXIzNWlJM3V2ZkRDUWEyZ1J1bTVQTEZqTEZ5K3BPYllhVW9qY2lRYzBFZVNldmNoTndjRlNkWTJWNFZNU0RsK056Zk1td1Nic05HSjZhSnNiYVBPbnpoMkxRQU9VRzhuTjN0L202SWNPS2FsUjdRRUdxZGIvYS81UXVQME9mWXBTeER6NE5GU2FHY0dJaTVTRUtuMFZLdXBCMVdRMlBMdDBVbVgyZHlYelZBQlRwUENGRjduOFdrMzArc3BiaEZqWFBrZlFSZm5zaXBkVFpPdStiQmYwdEZXVExLTENyUStjM0VQUVNPT1Q5d2ZNUkd1clJmbVNtZWxXaWxhS2YvWEtOeEFpVFRVbHhERGpNcFVaWVlkbFhPNTc5V2NTZjN6RGlFQW5OOUgrb3JHTGxJSW1DdXlja0ZaUkNyNW8xTW5OMFNuc0xqcEhKQnluU0lwcGk1dUJZRmZMN1JEWElJQUN3c25Tbm5pYTQ3d2tMZ1puaHdJS29IOEpFTzVZN0V4bDNOdSszcDdNYVJ6aUY2SWl6cnh4R29BVVVFb0NQbmNsVTI3K0MwQmRCWHhRd2VjYSthQytXcFVSMmhGbFNqNCtUdGQwSkJnU0E1K0FnSUNBZ0lDQTRuenNiNndBa29xcjJMSktnVTlyVForaWhoQ3ZQYnUxbWFNSTZlYk1GR0dtVUFSS0Vnek0reHNqZzN2MTRyREZVL2tyT2RZQTRsajdJeHdHNkRFQ05yQmxkUFcvS2ZEL0tGTU0vakRIUUovSTFreDh1NXJTSkErMG1nSmszWU9IeUVUYnhKeHdLVzI1aVhlb0Nja1h3eVRWeHUyOE9SRWltUkFhNGFBZHBUOVkzMi9UQVgyL1R6YStxeWZzMit2Ny91VFAyZEVIM2UwdS9mODIxLzM5UGw5dnEzL3Y5ck9mVlJmUDhQcDhQNGZXaWI5dHJYMmZaby92KzNoL2IwUWY4UHNyZjMvY1c3OXZVbC9EMW83N1BjZS9iVFBEK3o2Smo5djBxbS9WWFA3UHNSUDJmWTIvcTNoLzIvWEMvcyt3UzM2ZlJiKzMwNzc2ZnNGL3FvYlhQZ2sxcnM5bG5hTmZ3am1iU29MOWNQU3NxOWtHRjBzaU10aEREdlpZb2x5MDFXd2JZVDZkRnB4U1JMMUJVdTVGdVBLRUZoR0lkaCtrTFJBUmxXMkRjTGh1M1Axd01yZ00wWk1XaGxuYWw1bWFjSE5ZWFNld1p4cUYydjQ0NzFyVXZ1OU1nbm5tWUF3bVNCcmszOENIaTB1bU02ajVHaGRrSG94eCtZMHFFT1AyL052SGdFOXVuSGFYazRjd2ZJT2UranQ2aEpsWUZ0anRwcDcyYzczNzdLNHU5Yk5RcE90aGRsVmhhVXpNQnBTYWFuQng0aFlOZ1k4SWd5NEhETm1mbzhNeXRkZS9lb25NUnA3RytkYjFYaFh6OTllU3pIcE00aWVXRzhUQ0dLWmZ0eVA0eG0rblZ6MVhkSUFvUURPYWNpb2JzR2NVTlpPMDZPZGtDWGpab09Zd2ZSY2Fxb0k0MnowTGlyVFhSODlQQjRpQlBjQkFmVTUzTDE4bkFsSkRjT2VveXRtZkRCaGVkWlcvc3pqaHNkTnNSbmNuWHJZZmlQOHN4MVRTMnZVZFFFQzFKYTY2b2NObGNwUXZDRnV1aHRXYWJLSVJoUXRVL2kyOEJUZlMyVUViSEhxWFVKWWRDdTQ3TUZIbDEvbnljUXF6Ukc2U0c5V250bm1yWlZpOUg3S1JrTVdTdlpPdTFXM1M4MDU4VEJKT1F3Z2lyZk9CVzFaekQ4dkZKQy92QzdUVVpTc3gyMzlwek9xWDF3eDQ2RGY0YmNvS0h6SnJSMStDdG0xZ0wzNEpZN0VhVTJMd29IR1UxdDhNNC9ubkJnbk04Zmg3U1Fldm1rejhVT290Vi83NXZ1MGpqWFNiUkdDSy9lMnRMY2t1LzB6MWZkelhjc0R0N2htSU9IZ3JnTlMyczZudGtKM1RucHBvbVIxaG42R0lSR2FVQnc5eHA5aFBTU3pTbEFKM09GOUhMd3Ixc0RicU5OdGh3OEgrUDhNWnhXd1VwNWZzdHpxZUpQNlZuMTQvSWt6bTBFUzZjZFdJMVRQY3kya1l0U0NxdCtoZlF4UXRGU0JEeTJaeHdQTVVjSTBTMi9LNUZlVWd6Wnh5NEVqeFU0bjdyUEtBZVhFSTM2Y3dHOGFqOG9iODByMTBhb3F3SmtuOW92b0JLd011dlZOK0tmOWh3Smx4VDNjMThqVDhCU0YrcGxJWkhXbVdlUGpQNkpMdjdvRmtqbTJZU2xlSjh6T0pvVTNNSTNEWWhXTmxWaFFUYVc4S1NwVE1WMmdEVmJheUZENVF0Ri91ZWpxbU1HbHZKZ1p5U1Qzc1pLdjJ4ZXprRDdzUDQxakpTcHNuL3IvL2Uzd2w0bnBRTzV5Q3Jsa1lsNTFQcDlDbWE5S21sdU40OWdMeUJ6bGpYTm5iRjIzTWVRM0FaVzRPdm5QbERtNlBoOU5pamUvYVFPRnNUZDlibUZpWm1ERDBKaWVGN3pFbUZERjJqVHkyeWMyRCs4NVhDMksyZlVMems1OS8xRjUwTTVsMmhLR04zWEkra2g0Q2NDSGFTTGdqayt4QXVzNU5PcERTNEVpK0NKUzhzTURWc0Z2WC9Eb0RkK1BkaG1IeEU4Y1RQdmNQUU44QnZ4ZFFnU2NBYWtET1ZzcHM5QTdDbXhJQWRSUEc3MU9LWUhBUHZpTG9Hd3BPN2dSTkNPS0dQZ0hpbHIxaVNpWTBlS25HZHBoUldhdjNyejViNXV2aXEwSlVJdVdqc1pldDByWldtTEh1TVp6bDJycTk5VzlXVTNLRGRlek5ycnh4MTJUeWQrYlUrRXdsbjVCVjdEK3h4NVdnRWwyMTV2eWsxTDVLSEh3YzVBZklnd2FFVzNrM3JOaXhqNWtXUk5XU2I1azVqeE54NkNBdlZvMmF1b3BhK1cyU3BoTHVhMzNOaDBLZERNR1RMNkZoaGFVUnZsWHhQcTV2UkF6MURJUUNJQ2twWkZQWXQzTUEwR3RMZURqRUkxenAxZXk2bnIyQXVxZkFzbkVleVVFK0dkSHFLM29vSUJQUHJESzVmak5ueHpsc1VQdkQxS3h0ZlhBd1A4VUdtWVM0WUk4MW9BVE9kbWx6TTh0T0pzejhOYUhOMi90MGI2aFhEVDhVK0VQdEQrSWVqdCthS3RXSVNTeVBxdEN1OXJlQTlYMjRvR0laZ0pGajh1cUxlQzBHQ1Z2ZW5HTHVKMHNjQ2pwRUJkekxHTHJLb0FmZ1pRbm1Zb2UvVjBVZjZNM09QUTlNd0xGcWZzMVR2Q010d2psbHQ0OFp3WnRrSmFrcjRqU0duMUdoaGJzVmVCenMzc1dvcldrcytWUndCS0JFeVFvM21jcG5zNzF4L2ZLcXdXQjBjS0ptL2wxck1jcFZnMHZ2NXJEOU5xbjM0eXJsZ3VyZ295KzZqL0VJamQyazdoQUhDckd1TEVrV1hlOVVIVWNiYmZ6MlZnLzdJMGRKMWFOZkpqNGJPc0Z2Mis4VmQ4Nml1WlIrQ1RmMlpyTXN3U1RURS9SZ2pXQ28vdFlscFdJL1VVaERlcUtCVXFpeGt3YTB4Qy9lMVpOL3B4Z0NwYlVpRTNQdDJLTXpwd3ZTcG9RMEdKaVRoYTBlS083UldGVDlzSkxWYWZMWGZTbUdyTG05R01KV1JWR2pNRDNaY2VPRGtDdDZDM043VW9oODBVRS9sU0lUUk91ck4rbGwyWDd2VWhMaHZSSUNIb1Bmbko2Zk5DNDJOV3lYbTVadk45cUh0S1pVT0Z3RzBNOTVWbDdORlV0VkpDWGxmSHZpd1NGNkFlSXZKaEtoRnJzUzJYbXMyTGVGN2Nya1hUZ05qbVpxdU9lNE00STAydnI5bG12Q1NxTlE1Nmc0YStEOEhaK0xwcStKdUpOYkRTSlNEWjhQNENrdzRaRFpQU1NNdExWdG5qdWxtOGRCMzVNZ1kvSUVnOXluS0l6aWFCL2xBeXhkZDh5cWc2TE9uOUxISnVNYUkzb3MvMWpuWFdldmtOQlR4UTJTNUtLUFh3VkdyU3Y4dDFFTmREUnp4c0ppRjB0aklhMHlXZEtMSFhOWTUwUFUyOFRLd3RNelhNK1lTYWJJYlpMTlBlSVlRV1dMOUZ3QjE1aFBBZkg2dVZjRWk4U3M3dzJsUE5rMFd3Z3A4M3RjSWtTZitJZGl3VEN2ME1zR1hUN0pNRzFYMVFiaGN5Z2FDZlhjQ3pyTWQ5TStDU212MzRhY285Z3FaY3VRdEhORVdzVkZjK09vTmVFZWdBYklEaVA3NEVWL05Cbi9mWmRTUHZ0MnA2SXVoSXR1dk9aVk9PUmVRZUJuSmJTYUVCbGJOK3oxUTJjQXMzWUEwN3d5M0NOdStiNVhCQktUMGIvWk9LL0VQQ2kwcUZHdHNkMzRXM3IwTnZRc2lyaFRLbVlRSDVYbVQ2NUpVZzlWWkt0R29HN1BNTW5iL3VZMzBucW9ZUUd3TVZQY0FlN0k0WWdOdHVSQUdSR01uUW9qWTBjaXd3Um5EYXdhUWZiUGF6SlFHWitTU2dpMGx2WElGbkZsc0kyQ1dIWVlxZUV0bHdCeWxCME1iREl4K0w0MUY5bmkrMFJXRmNnYUpaUUMvVzF1ak80UU1teWNXQU5rcXFNSWw3M2lXcE1yL29EdjkxYUNxTmtkeUo3S3B3bjlXWmxQT3lBZlZkdk9NdTVHVzFDS2kwdUVNWE11ZTd0QlJhaUpFdXpTQWprWkt3WGVQVlFXWnpwTU91SzVIaG5VaUc2enpzVURyS3ZnZGdJNTBjZ3R2UW5aTkpwYzNuQnlXTlRIb1dyY2YwNThpbUJrcGpwL3A5YUtaUVYvSFNqRkJSV3k5UjJZVkdLR1NUblNqUXFwUGZkWGFzU2RRc29SeEN5dWc2L0F6eGhCSjJRVzR0Nk4yTG9RbncxaENLWVg0M09wRUJ2cmpuU1NLNW1LTHRFdDZoWTgvUEpWK1EvMkU4dzE2NTRrU0FldFFnMms0VnJrUjYzcVBCaTNIK3I4aGxuUTY5ZFRFM1BQc2xwU2IrVGIwRHlGVXY5T1FFWDI5ZUI2NEhOa0NPQVk3SFVJVUVFZVF4ZjV1eWZvVlg3cEs0SUtDSTdXSCtibGh3TVQ0TVYvckFCa2VUWUtzNUErS1k2SnRUdmkyUDZkTHY3TEJadTVqcWlVMjU3SWhEVGU1L3hSZ0dsV3JMSS9CbEhmUStIa0dtSE5PU0pzWXVqbUJEZjdTeGI5UW1PeHlYNGxjbzNqbVpZbXJMZDFSMDdyQkxIZ2R2VUd4Z0g0VmdiTDg3R0dMUXZNa1U5K0lRUTdZYVFJd3J4V1FneHh3SXRDTlFXc29TejNmdmFPM0hiNWx2NnhNZnRSOW43VDJSWTVnNEFPYmp0ZmRiWnV5aVU3MUJJalBvWVFNcVI5VndzOHFYSzdUOXhjZHhZRGdvaFB2dGs5c0VTeUc0Y0RiaEdsZ0p5TVNjTU1seE1ZekVIdll0L3RhZ2dWVGcxY2NkUDJBUHpwZ1Q3KysvVDBhYk0xb0lwSERIQWlXSzdqYy9YWFlIajhVL3J2VEE4MExSZDJITlczSjdPUld6NzZYZFpsZk9DcmlaQ0tSb0JsallpbGtVYVU5K3FtYnRuaDNxQVFUaWtTSFBycWpXRmVuRnpCVGlwMTZrd0pqeUdCQVJmcys3eXdlL2w5MWFHaTNZdVdVZWNaSTNpN1pLNzJzSmdlNWNLbDNvYW4yZU1LVGhXUC96d291clNwWGc0Uzl4L3VNQ1F0Wm1EdGJyb0JYamVaUkFxWEh6dmJUOVdMMU51VDhPVTF4blJrZTFvZ0kyMkVTNFVVbnhQUUtIcEZtR2JnVnNwUi9JQVNna282REIrTU5oQmNTYXVvWDU2VVBsM0plRFBjVFU2UlB1aW01ejhBdFNKMEpQRm5YK0hxUDlnYjBkbzFMSlcrR1p2RXBDS3VuZnkvbDJpZDF3a1c2YU8vMzdvRlJPcGw4ZGphNk9IeVB4WnEwdmpWNVQ4NGVBcVlqL3ZpeERqSnN1RDV0TU14bFo3TTNFZnNucjNJZkxuemxzTFdxWFV1MWJyMlVqTWprNFpJQWFvN2gvQmY1ZTZrb2hkME1pdU55c08zZW9yKzhqL2hVbi9DYUFUTHJnK2xhREdrMXFwRXhibFFERlRCZW90TUtOcVd5RFZlQVNVUFlOSEdycjE5WENOYWdpMDg0WW1IMVVqQ3huSEpjb1U3TlhGYTduNmJtVDVzVFZERjhHZ21pLzhzVno2anNBQTdvbGpidDJGY3BSSW1jREtmeTNMWnlYMVh3cXVxdjliNHJUUkE1Mm45cWVCNDdSeFoxWURiRC9abEdCaldFUElqSVBTbkRDL0F0SElaMnRXM0c2TDNwWUZlcVNTTmk1Z3FrSS9qZDNTTGM0ZW9nZ3ROMWRBT1pmeEhOb2tWMHRmR3ZDQWdTVXdMVzZIaVpxdW5nVTFwOExZTFpDdGpPaVRkZ09LK2VBK1FYZk43aXJsUm44Y1k3VTQzQnNCYTlQMVJPOTBVb2lBUk1zWTRic20xK3BFTjRrOGF5VEZicEFUMzBtaDl3YVFYNmdEV3dsU1JSdXdXTUFielJONXQvWklaNDNaRlJNUllJcWRGRUxuWUpSWEtWb0dhQ0wwNnRrQmpzNGNubE5hSVZFcXF4andRQ1dVUUw5aW01NUYreEx0U1Rld2VkdGxSKzhVd1ZzYTRCTGg3ZEhVczJtc3R2a0Y1Q0UrbUVhTkpRYTNtZmJNejJmTlhGZXBMeTIzN2hpWTRCaUtRNDR0MWhxbzh6UUwxZlpRZ21tcGNLUWF1MTM3cDhScFdkVEY4aWlCL2czYU5IcmdMc2FDYXVOMGRZT01lRHdNOERHeGNpUUl0VGtsSVZwYkRkWG1EZWdpVElGQWZVODVNT2h0RHdLV2JuSGR2NWgvQWNOQy9ZZUVvd3NPdllteXNYU2R2SW1yREtsank1L0tSalMxMWY4OS9aVDFibUFYdUgxendmUlJxNHJJOFNPSTBlUEZqQWs5L2VDdC94WHZrZTRvVGkwcnFkUll0MzhmbTdzeXdrbEdmdWErMlp6c0ptTHhsREs5b3RwRU9OcWNZS1dxYVAydEZMTnVHN3hEUVUvYzFIbUZCZTBIQmZ2WTFsTXVDa3pBODNhMUljbS9veGMxWTd0emhiRTltS3lzZXg0dFUrV1ZkMDlnWmkyRlVnRVUxSWJzN1FzVWR5ZXd6REVvcUpDNjU3b0dna0JiNzJLWE1IU1hrYWVXRkZ3cTRZVWJ4WVVDMjlSbFZ1dXNXeTZoL24rTVo1anFqOThaWEsrdmF3SExHM25Oa3ZzdlFQRHRkUzhuTkRsNDBrSWNKOUNaZGcrODJzU0FOWmsvSUdXaW42c3FBNHhsRXRBYmFsQkFYc01xN2tEdDA2ekppY1QvSFNoNGZhUWtRTEJLY1JJNnVJVUFGbDA1SGpLNDVwSlk1aUxXREVUd0FLZzlnckNsVnkxMXQ4QTgycEwyczRKZDVjYmdMeHdvMTV0MWpOeUM4UXJFb0NYWnZRYVZ0cDVxaUhmNzRsZkhxaXltdjJ3QjRkbUFJRXJPaGtxQzh2VzRVSmRIUjAzQ1FQSUphSjAzSzZ3L25kTW8xQzZsSGZabmJJaHNXei9tVUVWOFpKNGl0VVc3dG1kLzRlWjlYQXFzUCsrQTRHQjUwdHJSM2FtZ0FGVFNpN2F4UWJDM3g2RWpwdzlQTlB1K2dOQ2Evajl2S1U1SEt2NStRMVdwWHQ1dFFHK0dSNmg1cVFpL1JQNGY4QnpuYlAxSDdNZHBGTVI2Q3BGTUN6U3JoMDFPQm9ra3krS1BkNXlKZ1E2RnFxUEV4aWtxbVlIaDFONVpueWpmZE81Uk92ZWZnTmwweXh5eTljZmI1UDV1LzBBdDFzbTllQzNHeUJuY1JnNm41cVVtb3R5eFlseld1UTN6cGljMHZEOFpqa0lTeFN0ZVNaemFMZlc5SFFKdjZsbm9oVnpVV0Uvd1NzWlE0eS9qZ1NQM0dyQTBsTnJqRWpFYUNoTzEwTno5TUcyQzhsL0Y0UDhuUnlJaUVremZZVEVnMk5zZXBqaVQxU0J6SlJFNXRIeXlzOXlqUitDUiszenNVcjlueVhLdXQ2Y1VKaytzYTJCMmwzcUpWVkUwWmtUb0VjZ0pjWGhBcTlvSG1ramczQmc0VTlMaWRDZjBUMHVVcTBPNFgzdWJwYzR5MzZSWlVLOEZEd0tMeUhudElwL2lJai9sWUZWZk9wZXdmTDZRaFlVdnhiYnZTaTFQc1VVbm9FcVNEcThlR1BJUE9QTUhQSnJoMEJKRHVDMWlVVWZlbDdzcDNpZmxFbVFmek1qNmYxTitTSWhuU00rZUJ5NFJGaU1KWW9SMkJZM0NPR2ZlZk42MmlkTnFtOTB3MXlOSUY4aERxRk1GUmVvMUJYdk9BYVdwd2FzdUdEcWJ2NllpTzRrTnpteGJlWm5kZDlEOURReW5sZFRQQWFLTFc5VDFrcHBsOE1PMWNPcGNlZ3RaWlpjM0pvcFA0dURSU1hNb2pQbmpqempWOFdtVUFmeWtCTFdJeEl3ZkUxOHYrOTlwK0E4cGxOdzFVamQ3Tnh5MHhCK0RHRGkvYm5nQmtzVmJGbEd1QUcvaCtHNVZNYkhVSkIwY0F0TnBUT2JRSHZKY2VOczIxTmFMZ1FsbU10K2NEQVJSb2YreXVOTzU0NS84bkpFQlRrczR5T3J0TXhoeEdlYk54R01VK2FlN2NIZXZ2dkRYT21Pd2pVKzBXWlZqQ0hPUzNFM0hjYk5yQmhva2hNU1NxSWhiU0lFaTFWRnJVUWVJS3JvQ1daeHZmaU43T2xCNVJueTgwRCswSnVxa1liQ2pWeEpuS3plVXFGalNuWWRmVXVaU1o0YjFsVDBOamFwWGE1Y3dIZkZXZlhQbUk5WWNBMUZhcDRLQUZUOExyaGt1MUg1YnM3V3ZGdXlaVFpSSUNyUzJNRHp0bnN2eHNXNm9sa0REUVA1ei9GUGtNTlN3WXlTN0g2NVdrMStsWWVJd2xSMjdtZk5zQThyS3oyMm5iUkJXQWNWc3p1UkJOWlo1Tk91RnEvWGNuYVdJbmdJS1VGdW1QbXJsUEJFSHNWODUzRlBOKzU3cFpMdFJ0VW5DMU1RUDg4QWtidlAwUHNYQ0xxd1FxRzFsZ2oxK0hJSlpKdk5CaDU3RmhYbGNXVmgwMTNibmkvamtmZFFSWTlFZEo0YkRxVzk0WXlQcTM3emdCb1F2ZGVYSmVvWklIckZyTWxUYWxpV01EbGowTWVGeDJHRzgxM3ZJU1JHRytXbi9nY003NHRXMXk5NjNaK28zOVZ6Uzh6R1dvWXpjbjRLdXNEa1B5bXJ0Szd5SkQwUUEzNkNuZHArcGZtMmM3b3Bmbzg1clZ0bHp6NWN3LzNDSjBIbi9GUGE3enNxbU5MMWF4cEVZb1RHU3pCYU8rYU9aSVc0Zi9EanhjN0ZZd2VLTW41V21teUc3dDg1VTNSQjc1Z2g2SnM3WGs4aC84SkdtY0Z6eHNPRHRNNG50dHEzMEpZTE1zbHFjZEpzaVBQRytRVHRCbEJqTVVoeW9Gb1BQUVBkNHpuUUR0VXhISE9oSmFFNCtUODN3TU8xTUdzaGxqL2oxNHpiT3ZhRlJ4VWN2NWZBZnhVL2dKeFVySkRtVzQ4Q2pNaVNKQkw0QmU3YnBtMnVZU3JEME04d01rdXhTY3NPWmNVZDR0TXBnUFRyTTJaNlFoNytETmE4eDgvalVuYmwydDIvQXl5WmxSeGx4NmI4SlJjSnRId2RORjNNV2JBTDBnZmkxL3E1L04wUVpJZ2wwYkRuSmYwckE3NUNUNGc5UlBUbCsxYnZtSzVTdEE3dFpDRHQ5ZUszQ3hXS0VBSzVWQlBuOWdMckMxeTNheG0yZVNRQlRjYTYxUUZHemg4V1hnQmxUOEQrNlBhVjcwbUZjZithb0xpbW12TXNFUnpjR2U5d2hYbEhyUXB6NUhhOXJ4UUtNOVR0bUpGZWJTNlNzQnRaSzBvcFQ2WlhkT0gyZ2pjQ1hjSHNnZ2w5c3Z4bFhUR1ZuWGdQdGZKK1RDVnpaRFZUbVkwUzYvZ2lYQVBGaktjSjZzY3FlKzM1ZjJ3dXdUQnQ2c2JjSzVSb1hRV3Y0NU5qRDBibXdtcDVhS3lXMVAybmdpNy9wY3pXREM1UDJQNWtwNVZnbFlSMklGekJINXpSajVsY0x5K0JPNC9YTkJ6Vk85ZmVMTittb2lXY1M0QlNzODZDS3BqQTFCVnMwYXNkOUNleE5zdE0yWVFGREt5c1FITmY2Ry8wN0tyY1Y4MU5NQXdqVGRSNFhhOFNFWVdBdXRHM09wSkhzMmhqMUpYTFV5OE5vRlByTUI2UFJMY2FuWitZRUZsTUhhYVZUMHl2R1FYamVxQUVIMUV2RmsvSU11WGp0U1BuQ2g5MW4zQ2tBQndHSzZib2UvQ2dDaGRBVXF5S2xLV2NsSncvZ1hiREo1VkEzcWNzMlJEUEsyb0YxdThJRWZKdWhnUDk4V0tUaXBRWGs1dHo4WEdBa0lPLzhiYml4aVFmd05SSjJyeng3aE1JVytUZm1zUU5NQ1VJcytEbTkvTlJ0R0xNa2dFU2VxSG5BY2hxOXpVR1dvQnY1TFNCV3V3QVF6MmlTc1ZaaFcrTHNRM3BIanZPNUVCVHV3MHpyTlBHa1pmb284eTF5M2xPdXZkb0RNZzg4RVVpSUFWd25NSUFVbCtOUFFMcUNFWUtsb2I1REpTRmFvWDdDL0cybTJrUmNWSTBIZG9hZFdtS0hGZlRsWU11UEhoUUp1cThLb0JpcTlPUk9rNTMrc3dEQ1NERnU3RmoyWXFoNVJEUVJpWjk4aENZcUxPWkVxUFhYM0RsSGVaR3VKN0ozc0FVcDBucmc3YU9DYWhlZkx1QkdhWENrMjR4N3hCWlZLVDd4NGZ4ZUI5OGNoWEkxKy9Ta3RHdDh1Q0x1TDVFaENZNTh6Z1hTZkszZEFUSUZEY2NGNnU5eG1HV1BtRk5wNGVSOGZ4NEdPQmhpOWdUUklWWm9wdFdUVGpIdEpFNHB2M2lhU2FOek5NcUxLWXFuei9hYjNxUG1IZVUwY3YwV1hxNWR1cUg0UHRoc3EzM2pSVjlQRjRrQ3RGMFJPUU9CYnczcGFTZjhRMjhmRUhRbTVnN2JEbjJCV2Y1TjhPQjFBNnl0REZqL2JTSFJDVVBKOUV3S2hRM1ZPcGtBeDN1aXRuOXgrZnpLYWhMZVY0VEp0NFdvTG83dytUenliL1lMT1BreFN2VE5QMkh6MEl5SnJiNDF3cHV0U0JQbTRqMWE3WnhlRDZNWS9GTVhFYTV4SDJoRVdFREdKbmdyU0EyZE5jdnlNNDlKaWVVYWpUNHlLYVl2ektmeVNLbDBHdHh2d1pTYWMzSFFRYWZKbld5c3NKUXJHYTVudGRsRFE0TGVaczlZTUpGVkt4enhBKzBzSW5BL0VqTWdlR1Bvak9VdCtYeUcwcHZ5NG80eXNweWVVN2V6SmVVT09QSmk1dk83RGRTRmJxNkU3R0NrVC9heHVmRVR0eDdKTlAwUkc1TDl2T0plL2UrL0VnUWoweG01bnNZYVljZXFtN09YbHBkcGN2MThOaHYyNUt0UFNRYkFzbHhCRWNvcEpxV20vbkhKMTkvbnFSU0V3S1dsVjlvaDFBelhXdit1VDVCTG00OHlGdW9ZNjRUczJQUkxhRFVEK1NzRXdWUTBLOHRGRTVPaVRFS0NLeVo2UFFtQ1FPNE92L2FCMFNRYWl2Y2g3OXlhU0UvM21KT0l6YkEyR1dPZEw1b0dzTkxzQ0dzR09HNnBjNFVQUCtydXkwUEhPNm9HSlFDWnNmdlh2NklEaUNBMG8yQ1JZQVVnbzYxU1dBRk0vdVRydTF2c2FxVmxTOG5VVmkrRkpJVCtmR1g3aHhJYzRkb3gvTE1nVmFPdEZBUlBRVjJqTC9hZGtBMmwzblFyYU9teVR1d1BLZkU4eXhOQ0VYeStrUHBQN1VoWlllYlJNZC92bmJBZHpoOGdsUlNyMFhpcVJKYm1STStTNWs5WllobDltUm5lTDZxaHFSMy9DK2w5NU1DZkQvaUlmTXQrU0pkOTRGLzkwUWh4ejlpZGJpNDhGcjc2MlNMNnNlQ3V1bllVaCtPRXRta0FNREpBU3RxR2tIcFVyN3phS09Tc1gzWW1ERlAzNHJEQnR3dUoxTnhBZzZoZVR4MkV3d3gwYlBsSmx0SHpVdm9wL0c1QlNuVkt2OHUwdk9sOGF5U09BQ3BBS0VteFUrUkdNVDNxY1BYc29LZCsya2szN21tMlpqN2JFUzVuQ29PT0hNNE93VmxIWHVWWFEyYUNlczNWcXV5dUhreUNrZ0FFcFU0K2VKQjM4WXJLNE9OaG4xY1pjeEVpalVLVURITE1iQkRLc09rV3FPTFd1WXVUM0REakpQRlN0NytVemZ5Y0hPS1lTbmsxZ0VWYS9wbXY5L2hpWlFuS1hVUFhJWm9zci9WSklLUEtWNmROOVpReGgxNEtDaUROQnhGc1Rma09CbnlyWHdTTXlOVTBwMHlrWVc1RUU0OVNoOC85VlhJUGJrMmU3TlBWQ1FwbXBVK1VyK3JBNm1BMXlpK2ZrNklPUlNRcVZHZ3RpTUZsbkRsS05IU0FrNDlSd284ejZUNHVrVEd0WFp2R1dUT2h6dGgrMzVRbG5DdUp3ZUxNdnJJMGQxY2drblBITWE0OUw1OUFJT3JhSU9FRWFyRGFheGFxRDFPeGdISVNoSTJPZjBmeDFoVWdkSUdNMUZmSWFwT3hNdS9jdXprZzR4aERzY2ZMbTlZSThhN2JDYmhlbHRZNzFIZ05DYy9DbEdVVFNMVE9GTlNMbFdjUzhZd0dETG1sSGFhTFNKaWdZak5TT2JFakVJWFdTNjAzMHl6N3pFalUxQldTUk1SbW1GSHZLRW4vT29WdzI0TWxKT1ZHSkpVcTBPV1JMbkhRL1BiTGNnTzNqS3h1NXVLUlFuSWJsQTFaZjI4YVRYbnFzNGtyODA1YnlXZ082U25Ed05pVWlHMWh6cDFaNmFxc2tjUFIvdjliSTNDdlZ2S3ZuNFdRZGovMFRwZHRpNWZLYTdPeFJmMUdQMTQ0SHl6Nmlpa1hvWlkwcEkwTCt3ZG4vTVhuY1FrUFlhdVoxZVZHVkZ5TmJpajBJWnByQ2UzcTBLeWxVSERXN3BDOWRYR0pEQkhtajQ5NXhWMGhHWFl6czhWUlJlRWpPbURNRzAvMGpXSGhYSThvZ2J5SnNDeTFJQjNTYm9XN0NweW02ZXo0aTNIMHlxWE9ISnVUWVdnaE9EY0JlWU52TVBISGQ3R3FTQ2UvSUd3M3JuVkN6T3RBcjJEYmhHY3llU0w5OCsrdDZTYm5VazZsTFN3ZS9DL3FucjJDWWVxR0h4RFRjU2c3TUhZZ3ZRcmJxUkJvQ3ZBZWxCTUVXNHl0c1cwVVRyd2M3U2VKc2VPNndoVituYzFGV3NtNC81aUdDZXlnNHA3NE9haEdtTDhKbjZ5ZUhTLzJKWGlLT2N5OTB3aTBtTzNUUEZhOXpLUXJVbFMrRlAzUlBRYlloYWZQVHFOekZxbG04Rzd3d1VvWE5ja1o5RE42NWtVWlVvMWxsdjNvL1ZMVThHR2FJSW1ONTRCa3FCM2ZNZ2dsMXNTU3Z0YlhkelBmVkxNNCs0M0NVa1RUc0RWUDNwUFVCa2R1L3doeE5UUG52VStLdmp3V1o4aG5Tc3BFTitFc2FwVHhwYjJnODBXTm5la1QzMmFwZnphRzZ5Q2g3RmFiSFVQK0NjOWd1SzYyelVuQUpBaEVZaU5KWlB3Njc3a1RhQjMyakhDVzBUVEgzczRwWGlNVEdPR0M1M00zYUM2U29FL25SZ0FJMjJvRHIyZWhiMWJueVVNd05TNXM3cjduUVdobXpERDBoQTkwT0ZPazVGbkVaaXRJVkY1L2RrR2FTb1JMSWl5OGdhTVZtbUFnRk1aNXgreFBEVmxMQlN2cmtYdHJFT2t5N3dKTXNkVWhOVG81NStwS3hlWXVOYVNNL1AzMjFGK3hEdWc0NC95cmE4R0k0ZWNDbVZldE9UUHlDYzZjTFphdjk2M3JGbXpDTnVaMC9jWUNzYXliN2pHOWNDenhTT0o3djk3K1pla3BmOGVxcW5ZWEJsdkgxYjBVaWMzR2lXcXBsamlkYTZNWkttdElvN2o5cDBPQzBuZnEvZFhNUUR6dVltMkVRdWpXSy8zMzZscXBhM00rbThtVFUvWVVzZzExSDlnWXpVZC9vWDJjb2RiY2RXRkpxeGVpSnNVcWRNb284NGVLSUUwSWRucG1GMmk4R1NiaCtLNHF3MmVxdTRCWSs0dkpSY0FRcGF3WEhTMG5uTmcyRGU5NzczZHdhSEtjL0s4a0hqSVYwdDdiclg2K3VScjFOZUUrRUJ6T0pvMUFwVkRscjlJdUtyTThuT1plVFNXaXQvVGVhMFhDTU5uODlsWEpXc0piNWxMNnViZEZpN2o3SzNXNW0yTFBaVC9QUXcrUCtJRXJuM1JYRkZkTmRhcWc0QmpzeGY0YTcxTWlrUWNoVDF1L1I3NHVuVXNpNzQ3WXB4U1E2bGN0QU5KbndPWno3Q1c5S3NadS9PcFJ6aTVLZFAxMElub3BwcUNuaW9xRW9KM2pOaCtRbmt5aVdYbWNUcy92ZFRveGcvNEFWc21VUFRZcWVSSXJhVGowM2hRdllQZ1kzdEhadEtsSG5WWVZrZFFnV0NhTTdXRjFLVGZmclR4bU83TVVmaGcwZEpLbmx0cDF2VlcyZ2dDSnlkSTI3WWNycGtGRi9zVDVoTGxJeGExeVBuVVN0YzhUdlROazY3a05ZVEhYcjVnV2x2VU5YTDBEWE91TEJlUFRSUEh6T0RLL1hsdEZPRWlSYmtQTGFxWUlPQVI3MUxTVDEzQWRmME45elNmRll1cmg0b2s2NlNpS2tab21NMnZpU2VzTzVWbm04TkM4aytHSS8xanlUYndpcUV2R0xuQkFOaGR5RGtWbm9QR2d0UlRKaVk3cUlZWjVNeXRqdFUxa0djRUJKTWRkcnJveFZEdExvcGlWRlNEdm1tU0hwdHlYZEFGUWpxZEZoRnFPNkovWmJscEpBRGpHQnI2VENDc3R5bEc5VDZhekViajArNGhMUlpwY0hiYUxrQWlzV2xOejM1THhOL3BmSmR4bDMzTVFwelNHVHp1RlBHWkp3T2Y4dHBsbzZ3M2VtOTFYSXZ6N2JHMFFGMnFqRXBOQ3hxbXY3RXFUR3lPZmdUZktUNmVsL0wwTUdOVjRtY3N5bHpVMFdTNWU5emRSaWhPTFM2b2Vnc0c0eGx0ZHlHMUtFb1M0VWJLRHduR21pc2hoM3JxeGxlQUx0Tkx2emQySXFiQnBETUU1T0Vkd1p3aTBvcHB5NzNXcTdSTmFFM1NIRkVTQURJTG9BZSsreE42bkV6VVdseHBFeDRTd1BZMTk5eWswSTdKUm15NHByWTBJUEJxVjEveDBVUUZPOEtCc0ZxbEhrczZmbEFNOWl3eTZvd1IyVzBncE9WSGdXeThycXBUcGsySEU5SkVpTTFpcFMyVkdRQnVXT2pmcnYzMmd4MkVJWkxGT2ZOdW9IcFNXbnVWTTRSMStEVXEzUGVHdFFDaVo0MkJqTGNtT3dHNzB3TVdRR2swR0tUWHJlMXdoK3hkTERoNUNSN1hxaitINlpSdkpFN1dWK29xVElvSVZJQjd3V2I0cUlDL0xxMDlLRWZ0eUFxTEZMOUlVT0hkMjFrVDV1ckc1Y2JDMWg5c1dnVFgzNGtDRXN5ZnpuNVl6aS9KVDhmaHUrdGE5Qy9wQ2JqdVVNM0l0RjNFeHFmZExRTm94WGRZd2xIY2cxV2E1cWlkd1lsS0p1YloxRnY0dWJHWlBpZzcxV04xRllzNy9hNm5rVTFqUEtKRjZoU3Y4alJFL0d2bzFMTUlnNEgwSzBwaFVhV3JpeUlJK2t6SU1JWlo1eGJVaC96Zm5EczNkU0xPQ2tXN2VKTTZ4TzZhQUR3cU9DRndkR1ZEQk41bXBmekR2OUt3ZEM1UHM4a01lZTB1MmE1b05jTXZWcjNxYWdtdzlrWVdRQnJGRGozcFk1UlJ4R2IrbklsSWtqZVlud3ZMbEFsRVZjaTA5bmpocGVoWEtJa2hsbmZwbHo5Q0FmUTdNTEU4TVZGYVpDR1B4VHoxWmpGR2JZNVRzNmJVcS9mVlhrUzZwb093Nzd0aDNOTGJsRW1XTzJMcWFBYTdlYWJsNE9PQUg2YkNEOGw4YWVJbkVLdjNnL2VzY1d3NmRPV2cwMTByQ1dpWjVYdEpyUEY1c0lvY2s5NkIzanBLRlFETGhQV2taMUpyamVZZ3dFODFPTlI1Z1pETDdRdVliMXpabXRoSGNNL09xakRXOXZzZmlNMTJOcm1PRXBlbXovVjBudWJ5clA0cDNhYTVHUmViOXQrcEYraU9RVkx1MmtQYWg3TnRMQjk1aFU4Nnd5Uk93a2h1eko1aWJDMDE4TXM0ZkcxaWFRR1g4aUUyckhkTEVLTWR0ZnpOV1RPQnVtdGlvSFRFcFpsY1pPbGdJdFNBaWl6d1RBdGpMZWdzdmRrdEtGTkQwckNIR21CQkFyQ1B0VEZoYlp6dTFUTTVIUFRoVnpEVmdvVEl4WGxITlFnejJENWNQbm5IMFY3Yk9idjlnZG1DTmhnVnp2V0laSjdlT1JwVE13eFB1WlZSeHlrYXJISEd2U3hSNCtzZE10QkhBakpJNWNHQlI1RmxhQ2QydjdNMFVEZ0JJQnUvaUN1SG5NVWRER3NuWEJYMTBFalB1ZHNseGcyc0lMSWJUVElVenNTdnlHa0tzOGV0TEVjVWlVWnNkN2hSY2ZvUThQNVltZENvMjJ6Tzl0VGtZOCtoNlB5ZTlNZXBmZTl5R2wzTS9kT2hoTGVERlkwMFJXTFEvYVNhZ1ZRL0RNWldnekRFOTc5T0ZiRXQ0MnhXTkdJSS9FQWNBeUVWR1J0YS9PR2RkNkJrcktIbVpjNyt2T1FDQ1N2bHA0YVhrN3FnVWFLVUoyWXE3TGl4cHV6blFXTXl6QzJtL0RkSWc3L01xNXRJejRjVFNadE9CU0FKWnBHZk41THB2VjVQUXhSWGVoS3EweHRsU0VFOGlMUmtMU1ZZRGMyME5jNkg0ZnV2SDdudkpTdzdBOEMwYVcyZHRDbHpnM2F3Ym9GdVdMd1FLNzRnQTdpblBINmh1Z1lFcUhFcUt0S2lwb3dOb1BRTU0zZzMrRk5aTjhoM0w1enJzb2hUSHpIWlhvVlZsLzMzeGhsQ0FMMHB4dzFab3JabEp5Z2JaTC9DWHFrL1ZwcnZ3WmlJeHlzV09PSXkzU2liT1B2S1JUellhTGlyblBKa0RWQ3cvamZ2YW5CdDAycWp0dEVnYzdqK3BvUEFpTDFxTWZqL1hjb2pCMnFySUMyNjFKU3FhSnA4TDZiQUptTUtMVGhQcXkreWNHZVhqWlAyeHZrUDFwTk1CMFpKYVNudHpRREt3MUcwNkRYSHdRT3A5d0Q0UlVtaGpDUm9xT2FtRVc1Y0ZiTDZUM29pdTVtMHowWk9hZFJOU3hWd3VRcmxZYlRzckN1TUdBRVY5VnVsZHh6ZEFuMzlCMkppb1U1Tkc0eElZRTNzYzRvYzFmZ1VQRFFEb3d6WU56RzgvNkFNdFVtQzh6T2F4RENRKyswdjJwZG9ZbFppRDFvbFhDWnlRUHkvM2RnUkhhbnBaUWxLdFl1djVRbTNyR2dFUEhBM2xUekVxbUlCT0lybEZRM0tkVEg1djlMY0V5QURhSzRTL28yMWk0N2gyMHJKdXI0djVUanh2djVTMlZzMkNZTlcxUEh3UnpERjZKT0l4YlFXU3UyWGJ3bS9sU09DTHpHUVkzNWJxWmk1MmtUdThvbVNKRGF1ZDZEcjh5MUFIUks5KzJYblY5bWJoSGJZek9VYWt2ZGgvR0FIZmxtYTZRZVZkc25kNVJkWTRtMlhaRkpCbmgzdWIydXJYOGkydC9TM1NBRUJ1UXhzdHJmcnFqV2lWMGs3cTR1TEZEWG9tb3FvcDd3NUVpV1d6N1BmcFUyQzJDRGhvWmVsTHZqMXBsZGorL0VxbDdJNVE3U1B0Rmw0akRzbCtaRnNvcHI0NUw3TXZDKzRNMmZWMkc3RXAwNzJORGk2SjNsRDdobTdvL29DM1p5a3pXelBDcml2OVcxeWlDRUdlN3N6akRMQlZCM1l4dXI3U2lURXdBSTB6YkthQllhQnRlT0t2WXlsanQ5MFNBUGt1aUhNYVNsMTRmU3ZOc1Zzbnd0bEhSb25BUm5Wc28vTGVVVFFaR1FzTFJHOXZnUmo0bE9Zd0xnaHd0VmZpWWZVMkp3c1gyZzVCK2xpTkM3WGRiUTVoc201OFdsQnBHejhyRDFlaFUwSXVTM1ZjMU42YThRdmF1M0xzcDY0TE5UZWVBOHZXWDE2YTcvQ2VNV0grUkJOdGdiQTZ3ZGxKTlc0RTE1Slhoekw3WFJ6Ym1HM0s5YzYwaWhuZTVnSlRTMm9xcGx1dXRoN3VuTjl6NFlydUN2MmE3NC9IZjFxcHFDalVCTVZjbG0wM0RUTWVVNnBWYzd3WFJRdlBNTEVIU3gyYThsSk1TbW1aNjJNdDNHNVFuTzVMT1U0TUFNZkd3TUIvTjZlbmFRMGM0Y1dVWUJFNEp5bTduWlp1bVhPQWdBM1NUeDZlRGdVblhXWXlIU1Q3L013VFRHKzFrZlpIVVBVWGpnRmJURWdBVTVLbEVKSDhBVlZZbG9wVDhRKzVPd0RyUWlFRGlHZDM1bEpJV3NteS9sSHBzeUxaTG5pcjByekdVdnBpdUt2Q1htRjNnZUtZSXdsK3haajVIalNmcklvUDFjaXhEQm4veGQ0OXN1MHBsb3M1L2pUR1NNaS9Jekk4VG5JTmFIbTR4K0gvdFYrRHdUUVEvckhCcnVyV3dRdW9oOXo3RmNIMVc3UU1YejB3UUNBRTlHYi9POC9Ld2U3VTIySzJOc3dVWnRCQmNaVzVLeTlsM01qZ3ZHYVBuYkJGM3dOcXBuOEtqck1CM3pSNVdSTkVCc0c0MVJQZXBjVE96UCs3S2pQMWNDVm1ZcXJmOTk1UlBOS1RMRnhyaTBuTE1wRFlxSXBENG1Ha1lzbnJWckh2NElkd0diRFp0Wnk4amJuSGxkdjljRTJCTlhQV29tM1kyemhtdmtuWjZ2RnU3K0taSGFOS2VuYVg0cDBRdlpQUk9XdjhJWDVOZmwzcmZpa0NVYjViS1FjbWxtWjkxenhQQWg2bjViaDJFdUZWaTFjandybXVXUnlmRmgzZm9zM1RFUnh2MEdUSjhxMUxKSThYRmU1dDJ1MGUrZnc1VTBFb1lESlpRcUVKcDBlU0E3UWR5NE5CRG1wUTBFUDNGSi9NSzR2WEIyRUFnT0tMYWt5Vnh1bXFxSVdSSDNVY1lYek1KYVVKc2hJdzZEdCtmMHlkWU1acFRPRGxXeGsyTWdSZU9SeU90N1dsYXlhc2FwaVdhckJPMjBPdFJ5eE9EOTg4RG9DaXJzYjFGUk11dTFwcFpnQzh0N0syb0VQTjVPYVJrTzBXaUNQRnh1Szl3eHdZQ2kzNGdJWnQ0Rk9kaUtwUFlZVWhIMkxUSldrdlRMaVZ0UE1iVjJ3Y2NSU3RIRmkyRVk5TTgzaG00ODQydWd3K3lLTDlIdEh0YzBLL3hST3RBcnlKTHJtVVdnUTB4S1dZeTBJQStjaG41YS9jUUR6cmVPVUpJQTdiR1F6b3RaclZ6bTcvdGorUnNVU3NVVWluWUZPZDVPWkhCeHZiWmc2UWdjcGdwdFU4TUhzazRLekNBOVRpM0lhOC9JQzR0RmFwZGNLeTNqZ0U3U2thWWovOHBRamRTaSsvdHkxcGZsb3U4TEI2YjlHb1FKa0hjbWtkczFCTUN2a2twSURSbU85MnNQVXVnUFpsWjczM01JQ29xcmZIakNNTmpmQ21UWi9VNG9keTRvK2pLT01SeXdXYXRwTVNzY0xXeXVGTjBLV0lVc1BiMlZsTENFOVZBbFVWaTBuOXRDYmsrSkZBcHVUd2tpRW9KQ3VqVzV2TndiTkN3dUZOMURvakF6dnkyVjNTeTZHaklOTnJBYmRTYlF1N2FYeG5LUjA1RDdHZVZXVDZRaytxQ0pWV01Mam80Zzl4T21TbGhiWnFDT21oem5pUVA3S1J4YTFBUjArK2kwdStEWjVxbjYwUTBXTkNlc3k5K1ZPeHJNM1phTkc0UE1oVWdaenhRYmZpMno1Z0txYnhLVFFkaXZRTVF2UUUrNzhkMTRobW5IRzRTRFFjS1k1bFpHeTFLbTJWeU8wU0RockVvZjdYaEJnU1ZjZDdqdDd4TXJvSzg1VHVBS3lneGhvUE1VZUM5aDB3Q2F2S2FTTnRRU3BoVUJGWmtqZUVpNGcyWkwyaXR2WG9RSnUwMFZseFE1VmVVcmVXS2dTM09jSTE0bDJ6VG1ZZ1BvaTh6VGNPRlYreHAzYnRqNHlidmoyTS9pdDJtN29sdjFsQlZBYTJWVXBoY2xXN1RGUVFjQ0Njbmg3ZkZNVko2Z2JzbG5VNEFydEtFcG1Jb00yd01oYjUwVlFnYThnU3k0M2E5UTZNSGFZdXMxTjJObGZNMWd2TzBWOHBpbGdmVlNnUVpZTkJ6T0dRUVlxVXMrL0ZmZkwwUFNlN1FUaVB5UDBwUnVsN0N1MFFYU2ZmQWhpRWI2elN3UlBoRnhMR3crOHFSdWFhZVNJVUJtTEkycC9yeHR6a0tJaC9qTkkxL09wbmxSa3Q4NERZSWhXZ3JwUTdKdHdhd2JWMDNiRkJpTXYxbytWQi93MEQwWjM5dVovOG0wYkxFK0h4dDZCZ0pXNk5TQzA1ZTVsUGFGcWUwdnQ3d3p0QWVQays1YVdYaWFoZUtIbFl3Nkt6WS9sejRjbEpnNEJHVEhVczJveWN6dGRWWTN3c3hzdC9YWjB5M0J0ME56bXhycVBmZTNvOG9ZUXN2Qm0zNTZjR3ZMN1JKcGcyakdrTHBxVGluRmVBMGc0ZE1ObDhYMjJVSDhyTWJBZXJzZDRMVFZ2bXhMaFVTNnZSbGI4bVJXeWIvUnFybDZPUnhCQ1dZUnRtU096cFJwY0I2ZjlXbyt0Ny9DR1UxTVNkczNnMXF5VXlzQlRpK2t0K2s5N2dTc3FnSGJzRitYYzVBOVpubGdtMFNtUmIxWEl5MDhBSDFsUkgwekt0N0d1RCtoRnZOaVRveTA4WncxUEpsdEZRaEJIemNpQ0dCVjJaZ0YvMlVZVlhYL1hBVVM4YURaZVRET2UzdkdMVmYrcGlsUEF2aXlrM3liK1pNR0JGUndGUWx5eTUzcytFWVd0UGFxaTAra09oMXdWWWgwYmh3UmE4Zm90L3N4UzRreTZJL1VmYS9sUENKS0pUSFFLY3hCM3Vnc3FnZDZQR1BoTytIUzd4cCtJRDZIcmpJUmx0b2dnOHU3N2ZpVnNlQ2xMTytCcUN3RmxVODJ5YmxxL0lGOEdxWVEzVWthQS9vVGhDVTZoTTJ4UWdvRXlTd0xLMUgrUzRKcGVMZjZqZkNLMnNFU0lxN3A1ZVBlVVA5dzNJL0gzaU41bXpJUlpvb0gycTVTbEF2MC9BdlUrc0R0bmJTOEhkYVFEMFI1NjZlc3ZmWGhxRUloTUplTWlBNjkwdFlkc1dCa2xvc3E0ckNyVXoxWHhWQlcreFdUTWI0bXpCaWppcTZwMG9lelg2ZkJUK0o0QVBwOThnYnNJQ1NqbXJkaUtvYVZZaFVnWG9xTkdHdXVkUDlqL1FmU1pPVGxLSDBCbGhnQzViWWZ5RzMvaVhQUWIvd2hqcXJva1dXRjNLeDY0Y1hUcHVGVGtyTnlhRlhxelArRmd3SVV0Y3VhTzJMMks1K3Zta3BONzFUd2VSbHlwZ01VQ2x6aFZtM3RKa3ZOQ1k4TXhDUGszN1BPWXF3N1NCZmVObVRNRHdYUTl6NW0zTmZ1MERiU0MzRGQ0aTBGVU1TbVNuMHNsYnNKZ3g2NG9LQ2NvU0lRbGhEWHNSR1hPTXZPSlFZREhHNEYrMXk1RGd2bUUyNkpmcWxOak9oWUEzdnkvRktwNHE2aVJpeXJvVXUyeFo3WkpxNWxES055TEFJa1M1RlRuSUt6NXJyUFRYVlkyalh5TWVwNUQvWGN3MGV1WEY4My9rZkJRdmZsK3Z4YWoybnlLV0xuTlI3NHhYeFMwd1QyK2F3OUhjLy8xcE1WRk1oUzI0aWF4dEY2Q3F2VitYNkxSbTBrbjU5VGVYR25qZy9JRDNTSHVONFFpdFFtK0xzTjUzdTdvcUxPYXdoS2xQaDcyc0E0bVVOR0VHdmtvTFhBeUYveFd6UTJyUjA3SHBJaTlUd3JTRkxQbHRzK2pSTHA0WjVibkxnRUhBc1huVStsQ1ZUNVFOQnhYKzdiQjZBWnNiR2NtbEhQVzUyajVFaW80N1VCOTZVOHdqQWNRcWtNakV3QXpEV3RqNEdGSmVEOTdrMEZ3NUVzTENvRFE3TXRpL1pkZ0hjRlVWejZoWTlNQ21laTlNUFZXMjFDbW1Ja0c0SFF3YkFHaXRVRURld2dTR0tRek9lWmpEQ1kxbDllblFyNGlqV0tIb010WmJkbHV0WkZnbnI4TTFCRkkzWXlqNytxVzBHcFJxM3FHVHg2QzhqSVdmSGEyKy9UWGd0SktLbXNvQTdlT1ZFNXROWExwVXhjUkQraDhvWXZjZmVOUmlySXFNalF4MTlzVENVQXpDWGFPTFRPd3FrRThKMi9DNmpDTEhoM2QwbVp6MS9mWkNMMk0wTzF0RjhTbUJBNnJwZVUxNERsYWxRZEpDd2E1QlZGWnJRREJkeXVYWlhjQ0p2S3ZMc0tKUEttcTFIUlBuMi9kR0xsK2w0cU9MdFVMZzVnZnQwQ0VnZ2NOWnAwWEFjSDl1MWhLNEZrRFkxUTNBZEZSN2V5c1J4cFVSNUNoMGJTMEtkN1NQNHpDZUZub1ZYSHJreHVGazhib0hlakVYQ0NobzYrK3BzTTM4bnVuNExUTGpTQ2dkS0lpSlBsWTV1dkZZNFUrM3JwOE95UzI3WVF4M083U2ZxT0pOMWxHN01OQktLV3NhTjJDc2MyRzN5YmJkeFhNQ3doRzFmV203TzN5MlJHYkZ4SktNK2hpaUIvM3BYVUZ1TDZIS1I0TEJDem5sVTRaQ2ZyTkZsdVNzdUcvcVNLRG0vRlN2Z1g2d1ZuWFpvOUN3ZVhXcmNrdXl6d2tVcFZEbXBlWHVlSTFIWDZWbWtrOHRSN3lZanVVK0llbWNmQVR0ekVVQVdzSWtUdUNHOStFeDZhVUlrZjA4c3pEckowNDVsQzdWZ0YwWG54ZDJFREk0ektpbGRoVTBGaEd0MkVUWlRBdmJvYXZKNVMyMXNPQ0FrV2tLSlFFTndXOHNIZDIwSDMySnRJM014K3hSK1hvSjh3d3JmMlZ1MXVTZ1IyWVdYM1ZhUmlmdkNBMUZHRGdUdWtoT2tDcU12cDNJWWE3WmJBaW1vL25zOGduTWJpVkVjZVM2VUU3dzRsWjJiR0hCTUZ3ZjNBQ3psbjNha2hRd24zTSttdXdROEQvVXFqbERaMm5nVDN5cHVFWCt4NlUvQnlieFlDSWMwWUdlUFZNYmtoYUpwWUM4cFJieTVySGdaM3hrc0VlNmpHd3FtOEhmWkptU2FWdUpDKzZLaHdvT3NJTGhNM2w1bE1lT2UxQnpUTmwxUENUN25UMk50aFVETmEyamtEa3RXZ3JFU2JESWwvWTNMNjFkdjdUR0lWVEhYWEpVS0swa21HbE5HZ1ZUODNFMkQrZ3ZvV1NjMUFudkVkWEJQMWpnLzc4emd6cW1lc2M4SjVyS0lIYUdmK2lTSjBRQjBNUkpKMjVJR3U3OU9tME5YQjFod0ZuZXRLUGVPZDdvUGllWTdmMnF2Q0kyQkJrV1V4SFR0OGx0a2syeThLQ0o2UE0rYW9qSm1lakJYcmlxdzMzOFNSTVlibVd3UjVtTUpqcFpuWW4rNFJzb1hsTExDL3g3TllQTnZ2QWZNSFFXVXdHakVJUDFHc3gzc1VVY2x4YjQ0Yy95SFk1Y3V4UVEvY0p3eTNuTG42SEJhK0NYZ2JaTnk0SThZRWJxSlUzWnpmV21RamNqZnFtcXRBT1dNdDU1WTZqSjNFSTIxbS91TnVUTmJMeTV0MDJSMkQ0U0VOY2VsYlN4TENCRGRxTWZjVHkxNW9ROGdWcHJsaFg4OVhSdnBKSFNIK1dkcGpMNmQxcTR3V2ttaEtvdnpYdWcxK1ZoemRHR2JjZ09xd3RpeTd3MzV0eWRDQmcyZlNENkx2YzMzSC8wbWc4emlqT2NISzNWSnpLZFlnYmRXWlpzOWdjSktLZkR5ZFRuUDROc1h6Ym9XK0JJaTVRWHJUaHdFMThIdGlhVHZXdUhXeUdOUGVGWjZEOCtMaE05a2dmOXdpZmNsUjl1YzI2S050YzlzekZIeC9McTNvY0oyc1RzRGliT3NqMDBUSzY2dHZ3U1NoeTZpcWcwb3hBOGh5NGlYZGMxeHpUcUR6V0g2UHByMWt4UmU4N2ticFdCQzRIS0QwTm5ESEZhMWRmOGtuclNPVXpLbS9lZUYyY2wreFJLbW1kWHFwSHVqMmlNd0c1d2VVTU44UXRHUEhWKzNrR1JjVCt6VGI1MHdDN0ZzU3FFNm9jTjdBQ1VJc0Q5UmJLZSthTE5mcXVoT0xWWkIvRy9wOENLVUFNNmxaKzNZUGRRVFc0TDBhbXhkUndSczM5OS9LT0FrRjhWOGpaTzQyQm1pdzREbGs0Q3RWZTNVNVZPRXU5dXIwYjZpaitKRWU1YWZERUhaS0d0SFVWdDQwVGs1ZWJTRjVZWUNPTm91SFdvM3paNFNQdmMvb2FhZzE1a1loMVMrUXMwcnNGMU5VMlZYc0dDRnJ0WjUrcUw2Y01FYU0wTjlEZ1BUdG42Vjg2NXJ5N2FrWGFFSjlwKyswdE41S1UxOHlrVEZhNCtmT0E3VTU3OXZjVitBcXMrcXltb3daS3dudzVIOVo1YTIzVUw0elA5MmhtUjBWRHlSaGMrdFkyWmkxS0l6czdPMVNWTEJOc0dDdVlUYjNZbUFKSjkrQU9CMTB0MnlnWDZOOEhJQjZUa0RSNnh2cjJCdmYrZVl3djlUelcxVytpQXV0TGoyZldlZGRDTko2anJWZ0V5YjBrcVVJbXVlRHRYbXpPUFBibkIwTHpNdzlEQmt5WGkxYkh5QmJhckJrWnBaSUhSWUxab3NiTnJPdzNyRWhmOExGU3FobEkvejNhR1o5NkdjOWRQVlBkSXpMZFJBeXMyZks5SmZ4aEJKTmljL0lkV216d1k1WEQzKzBvMFhHQVZhZkZZVkdrcXBQTVdjOXBnNStaU2NzamxLV3Y1UjNzQ0lyMzlVSHZTRGNBeEtHdGxxdHRiamNscDRQSU8wUkxwOUtkaDRYckxqQ1FoNEYzZlREU21mb0hyQ1FMTllyOVFHaVFHU0hLeEI4RWE0MG9keVFxZHJmTkJiaURDT1p0VUx0Qng2a2M5MmhNVjVyUWlCOUp6WlI0YXMyWlA4OE1yb3M4QkpnNis1MmEwS2hxb2dLUExjZlZJQWordVJnTXdQTmtia3pDMjREYW9ZYVNzUmtZS2g4Sms3a1RwMEszcmcvcURKcStFL2xxY0NodU1FRjZQTnpVWE5ZNEdrUUxXYUZGSDZVVzIza29DOFJaM1RRWkV5cnpiVGRTYkI3cnZiNlEvOGNLR05kYlJwUnA3dHVHanhncHFDMS9EOCtGYnJPWUlVWm9yNFlsNUdjR00xYTZQYWc2Qk9YUDhzV25IN1JDWEl0TnN5eFVQcGdrcmphVUQ5ckIyQmp6WE1UYUZqWTBVNEIzT3dzcEdhMDMzQndxaHdaYjlNQnNzMFdPOXoyN3JKTjNUQVpxdUVwazJ1YThVMDBvcUFkR204VWJNcGhtKzBGenl4emVXU1hudU50cUxVUnNKWHJBdEd1Z3pZZkM2d212Ylk1S3l1RGhSOWZvY2YrZW02dVI4dVZGcHJ0bFRJVDdYaUJ6Z2lybHUxZ2pmRkhEcWs3WEhvS2g4VlJtQkxteGZ1UkJxU0ZvY0FZRzN5R0lXcFAwK2hGa2tyV2RCb21CRWNsV3JUVkJHUzFic0QzN1RYSnFadE54RGFzTU1NdTMyWndzLzdvd1dIb1VFWmErTkUxaFd1bVRoU290V0VmTUtjd05qcGw1eVozMDR4WVQrdDFPenZXMnV2ODVaZFFtRHhSWlpPUWl3VEdCNGYvcmZCcjlsclZ2bGp0NFowWUxJVkI0T2dPc3NxUlkrYktYZ3ZaMHVFaUZVc0JmWktuL1ZtVkx0b3dKS0RNMXBZdjN0ZUloK2JDWnZWTk9MZ0gvMkNWd0VKM1lJYmNPMFdJRUlDdVJqa3VoQXpMUmlBdzFCcGE0TGJCMXpWdzllV1ZmdDFwSmRCWnUxaXdIYlhDNy9oQ3FFeW5IK3grZElFNGNONWI5M2d5UTBjckR2QzI0cDJwS2YwWU9OSklkNFRLNzNhWW9mT3dLTWxoOXBoL1puKy9mbVIwWkM0ampkZEZValhXUmxMRUY0ellSS0c1RVFpTmN6Zlh0Z2tmdmttaUdYZGN5akRqM1RGNzdoWGMvTXNBclZVY1ljbU1SWXJxR084aXFGdy9wUndONnplSXJZMERyRHZlWE41TkZUbXlxM0NXcU9SL3lJY1ZkcUs0V2FsNW41bWFTTGx3L2Rva1ZFRkxWK3FLVXRPem1PMzZ1b2xoei83aUNBdXpoVDV3Mi9zd0IzaithYVpCY2tHcloxdkh4T0hGNTZIYnEyL0tOdFRJTjBzV3Q5MGZkdlJJcVdjcWNRb0VXZ2lFcTJZb3NXZ0hYSmM3UEJuUXRWQ2E3OENtM3F6Y0ZmNUhScmF3UVdvaHVBTTdKWHhXUFo2dVl6T0cvOTYxSEhPenJFbkcvNDRxVzNyZEExUnJSTytHOUV6YlhEb3VYSHdoekFJYjM2VndnZTAwRExCeDFaTkJ5SXl5NUNIZzdwcC9CYVpmSVBwNlNYb2Fzd3g5S1ZxdUw4a0l6RjJ2TTI5RTdaQXBoTUpraGtkVkR2Sm1RbndtQ2NIL3pDSFBtYWx6NFU1QTVIOThJb0NscmRVRkMwRFJiNmsxREc0YVVtaUVPMDJRMHlDNldnN2dFTTdwcDZjV29GM3lrT3YxZmpDZFRpaSszOE9KVFRjL1pYc09qRUNITlNDNGVnOXN5MURuVG9WMFNKd0VvNmJNeTNQc1pkSlJSMm0rQ3hueG1vMzFIOU5xc09qaWp2RWtFSjFTUXppMklHbnBDcmk1Y0diUTFVSXlteXdMOEZzV3QyaEdUeVdJSjA0RlZuM3l2akJVWE9JQXBxdklVd3ozQ2hxdjF3UklZd1Bjc3NaR1l6VzNid25XVG9ZT1pCbFUzVXVKbXYzMURxTWl4cU41aWpKTC9FSGJiMEtNczVHYmFUS0VtVnVtQ0pSNUpuUTN5MW1VOXRJQW9VaDdmUE9EQk1QMHQ0cVp0cUQveXpHSDNlYUVVOUJXUjFCT3BSVzVsc2JXZGNUcCs0TXVPdVh4Vkd1ZGt1V05SU1BVRFpPVUlnTzIrTTRDUmJOWFBTakhtQnRhVGZmS2xIcGluVXhqQUVybndjcWtXMTBncGljZmttM3YyNXpNeWxwSDkvbWF5UmZWbmtqNFF6NXpqaHdqTXoxZ1piSmtMenVFMk5Oa0g2MWlCZkloR1NLL21LWE1relBkYzVQaUcxbFZkL3R6NWZPK2Nma21qcUZzQzdYYVpUVmh3a2hhRXFDMk5LNHBsTURQV1RBTldvZnBwOC9sVTNrbFlUcStXNzdyNU9NRDlBOG45VitnbEJCYzhnN2ZTRkF4U29wN2lIWllheWdQdkVVTXhZclVTZG5jK0IyV3pRMXpmRzI5cUZnQVYyQThoOVZVaWxSUU1yWXY5bzR2YUZObEpQKy9NNmdqaFllWDNsQU1veFA2M1Y5K0NDb3g4MEk1WVJ6VDMxbmw0empQYkNzVklZMHVWMnprbFh5bGhiSkVUMGl6TGthS1JkRmYyS1BpTHdYaHJhcG9vd2p1S1ZjSzNtQ2hyK1A3U1NpUHh3TTBCc0srV2g3eVRpNmIzc2kzQTd1bVRWZ1hYOFJaNHQ5Z0dlODJWS1Vlc1Mvb2pnZHhkMnljMVl0T0s1TXBKdUh6NVlhcnZ3amF1UHlkRzAyTHJneXQ3My9aYzFJWVMxTkh1eDluMzBNRDdLMVhROTYwY29lU253WUo0ck5RbXhyNlVWNkt1SzVPK2hzOTFOKytza3VzdlRhaE9kZnlxWFFjUlVRMjZDeWpDeE1HQ0g3VnJwRmVtZzN0bkR6RlRVSE1WSW9uVUdzU3JGTUoxdzFwSGtqY25SRTYranV0eWRWbW0zUW8wSFh1WVkyazlWdGJkRGhBNXRhZXp4MDk5b0ZqKzAya0Y0V3NSTENKeThxSThzUHBzMFpkRzRDOUp4SlFRd3ArVGVxbk84NHA5Q3FpYldsUmFwOGMxMGpJUEJvSmxMWFBBOHY1cVdmcHlnek9VOFpGU2RBY2VBUFREcDMwK3MySmVhMkcxR3ZrVDh0THNNalFLUjRmWm5ybVdPTWlmc1RnOEtxYnBFMytpWDdLNzJ1Z05pdlBaTEx2RHZ3OUVoU3N1enpyM0ZMZFBFemNQZmVtdUZyQUNZcUY4LzQvMWMwd1RaUDc3a3pPcHR2amU3WkZwU3M0NThtOG1XSzB5cW1xeXBKSGFRV2NHNjBOWDhleE5VVHNQbU5ZTjB5TTRUdDQzMWRoalRVQUI4Zk5VbWVCSkxiZERGdEw3V1M1cFhBS09DTEN4bUM5elRQWE4zTlBibzIzb3NTUE5LK3pSaDdzcTZjRW85UW9ranNRaEZBRWYxT25tdFMwb3Z3YXQ2RGdwazZJT3N6U2JsbUlCczQzN1gxbGhpQWZMWGN5WUNTMG1NYWNQOEJPOHZSRXBQY3Bmb2tzRG5pWTZ4a1FKTWdLVWNlOWcyc2xSc24wcThkcCszN2I5SU5Mck84bys4NVZqelZtRjVoN25vRWhzSnpEbjltUFdjVzZlZFozMWMzSytXZHV1SzNUQWV0ZTJ5OHdqdHlxNzJKcTVyMFMwYzJETllIdDR3UjY4M2lmZmFHdmx0eTJ1ejBnVXpFWWtxVU9NY1RjMVNuOXBaTGVrQlFJdWlEUWJIeTg1Uk9pSWJsNGFFMG1MdkJ5RFdVK3ozQ0t1RHEvbVlWM2lST2ZKSjdpRlgwYzZyQlBNbFFLZ2ZHbXdYMEFyazlZaG5Ib0p1TU9LaWI1Um9PdnNiTEw2a1YzUUcvOXR4Q1MzR0loTE45dVZmTmZ2Wm1iM2Y0UEIxQ2pwSmhkWFUyL3VvYzdWc0ZuNkJWR3I2NEFhcGdoK2JCTC9GR0tFM0lLSzdONEE1U1hQZVBkUWxJY3hyUHJ2UXhheHJZWmFDSXkyb3RMbjV6QUk1TlBNV2RKTWd3elZLUVV5V0ZFUmtQWnBQL0daRUw1b2FkNit0a1h2NURzQ09rdmNBN0I2ZHRmcUNTZGJOVy9LemFTdVhiK2ZkZnJUcUkxbm5kUDVJZXo0emE3WDdFZnpubUVmVG5qUExDU0xsTTlHWnEzUmo5Zm5zNnhqNFR4VmF2dnljaW1GbjgxTWtlcHVXMWxTV2ZnV01iYm56TGczZnMydjRiVGxHdG9sWUJ3RVBOZm9UVzN1UDdnTE1FeHhBWW9KREhrcHZJU01rYU8rTHQrS1NNVnEyOXhUQTJJczF1YjB5ZDJCb3RsVzJLQmh5VWI5S0IzUUl2dFZwWjhUQ2ZPZks1TkkwSW5HaGJ2Y1lodUMzSXo2U3h5VDZqeEp5eWhaWHFuTzJGZnY5RjhaRkRtVVNKSXpKT3FIUWZHRGNPcHZJc3h6bE00cGNPMk9yTmtYQS9ieW9GbXdEZEg0UmVad0x0WkNtZ0VFLzdjc29IU3c4blFWbnYzS0EzakQwZnlPek5PTGY4aXJwbVByMnR6RFJ6bVRBVFcyanlxZG5nSm10aW5FM2ZYdW0yODVRc2ZrdXN1c2VFRHd0WjJpQ0RaNFd5U2k5amswdHZyeWhKbW1TT0lxMXlGdUFPYUxOVGUxNU05SWFPNDAzdDJmeHVPWUY5VHB6dVRsdndINU1uc1JrZ1ZEa2hvVWd6N1dZMG9hZC9nUFg4RFNwTWxKdlJDenAvak43Szd3ZFNhT1hkY3h0NlBDK2tNaVJoeVlJei96ck5zK3Uva3FOTWVSSGYzK1lqSTNTUlZYT050N3loK0tIUCtXdHhqdmg1d1hXcTg1TmF4Y3hyQzYrMHRYN1QvZGlva3U0ODlHSzJodXFUUWpxaHRTVmZyZ1J3K1ZNUHRVWVRBMEMvQ3Q0cW5wQ0NvMDZreUl5OGt2ZllCajRNYUdsV0hzbXllNERqenpKQk1BRnVNNmFLdDBzVVYzdURpWCtGOWdOU3NDd0w4dTFFWVl0S1BkOTNPaDBhcjcwYnVTbTBBZ3JxSDlsUmpWaXl6aVc2L3pjR3pERXQzT214azZpdnR0aG5DdUkxaExvaVVTRy92bTBvVDlGcUxWMXFaTFFUM09FeGwwd2VvdENtYVA3VUhIUTIrRnQvdnc4TU5kZENWalhVelZiVm96WmFXdGEzbUFBTW1BZGR5TzQ0VURLWEJBQklPQWNEalBVVm5uc05BMWNTSnBNWW5uQitlelFLdjdSdGt5MGtqM1dVQ3gzTmZPcmM5emFEVUhlMWNSOFhEZmFCZW9Ga25JWGVFZzY5eHNmNlBJWU56OXh4QlVmSUNldjhhNjJRTFJESVhQdmN5UzdWSHlOMWE0M0RPU0lSdTQ5OUpJbk1wdmFQM0kyYlNwT1ZTNEhkNDlYSENMTnhqVnh2WTV2NU0xMCtkcVM5aENidUdEVnpsT3ZWUXdYbHdubG0zR2I1K28zS0xxN3JSdVo3enVVblY0RXZxMkJDQ09lOFhiVXk3eXJIY0doVythQzduZ0llMThsQ1JuRHVydXBIVnE0V245bzRkendiV09KUnBGUzdxMDE1UDZzRlBVMTdEYzh3WmEwczdZQjJ5UUp1K1o4TFpHUkFpYTl0TS92bHBvTkRQYWJsQXFNMWNkN3pIUHJJaUdHSXFYckRQcjduQ0QvVXE5Y0ZoTFNLK0NXMUd0YTZNK3dPbUp4Vks2NHBBTXlnZ2RuU2hUbUhrTjV3TlIvT3V1andUSXdzUE9mT2VhNDlWRXZacFNQSTBsc3lSdmNRanc5S2VKcVQzR3R4eFBPN3E0YTRjREczTE1QS1NObEVicytVbVd6ZVFaeG5ldEQzemk5K1BtNTI3dlc2QXAxMkFUdWJQSzJvZ0gyalpuaGhzT0d1VW44UkxUVG51MUw0S2YrQlYvODlmNFA4Q2Y4bU5mOW1hYXpMRWZsY0tFczJsMUxVU1lHL1dwS250TXlEbHZJZHBqaklaZTVoejFVekhDS2RWckYxcGVpQUd6aGJWM0hpRFlMeEY3NllqMTE5cWh1T2tNS0hWUldBbE40Ly9yYW9kZmVtQnpnRHJXdE5DYXR4ZmJuVndLRHJQL0tZeTkzcEZoU2FYWmQ1SlVESEFwWThjR1hwSWJ6Z08wVnVNcVRRUmR3KzJxbHF2Vlk3eXZ1NEE1elF4UTNuRVM3TmdRM1laRXdxNURlbEpEZnFuVGlMb0NQR0dPOFJxM2JxMUhYOHkvVkdpRGpwOFo1bDJja29iaW9Fem43OGh1L3ViU0JQekRyajhGSlVaNjNYakRsSEkwVHBuQklDUEVYeXppMGZZRFJvUDRSVGp5MTk0ZUNjc1R6bWc0VTBZNG5oSTZkb1Q3cjQwUmV0SFBTSEF2TTFod1VXMlhvaFNvbk54QndlRzVWTXJ4Y0Fqa1hyUUNLM2p6M3VtdDFRSy9XZ0tNcmVTZjVPbGF4QU9kK0hGNTJZdWJBL0xkU3ZwNmhLbFlhVzUyY2VmMXovZC9zbk10bGNEQUpiU2tHWEZXZkQwaVBWNE1tS0tEbEc5cEtDUXdmSUNOZG1FM0VQK1FBMjMvMG9LRWxHQnRtYU1VanJ2dEFEQm5oVXptbUV1U011dHVVaEkwS2lVT3pBMnBmcmdkb2g1ZHc4NXNlQXM0Zzk5T0JaVy9VdGtQVVIyNUcxTFpyQmtxMzJxdnQxWlEwZVFNdjF6YWtBTmRrQStTRGtIQmVveWJWdVdDbDFwTDZNeWw2Y1dBSE9uNzNIbTk1QWMxVUMyMjlTOWJ3bDZteGgyWGNaYldLMHc4NmJVaFNaSCtJajRQY0JvTUJldE9kWUVFZnhiVktoN3M3bS9vWmZ5SGdNbXpkbURCa3F6cldsZXFBZ1Bhb21hbU13T0hnSkRTRHlZRjlOSWhEblRDVWhlK2E0bEFua2NhQlQxMFJWT0poZGsvdy84QTVtOGkwWjY2Q3VOWkNjbUlLUEpOUUdVTUREUkgycFM0QVk2dkdzM25KUXp1MTVrU3Y1UkVxeGRuNWpiM1NubFk0aUdlWXpIbnVjVjhmYVRVYVg4Z0RyV001VUI1YmZBSHEwTjNZNndrMENoeFRQN1RhdjNPY2JsemFYTjhDL3RCT1ZRMDl3eGFKUGZqcWEyMVFxQmtsM3ZEejd5YVdiUWJYU0szY29uNEdjTUlmRkJacDlFQS9RYXROVFFqREgrRSswV0JIRmQ2ZFRUY2o3elBQQ2NKWkJWbGE0WHA0K0U2ZndINmQxY3NFM0NoUEdEZWtyc2gwUzVxb1d5Y2xMbGVqWXQxV1Byd21uYUJJUDFaT2wrL2Y5ZEZXbEtpZHJqUDJWS0RzOUUvUWw1SkpIWFZnNXd5amJLd0k0amFjNE55a25LZmdkZlA4SndpU29MZFNWa29SUlZvMnlxZmJFL05BL0ZJSDRVMnA3dGRHMVcyRGxkRGMwU1lZS0JWTng0bnpjbFJaV09GY0cvZGQ4Ymw0WWxka0k2ZTNaZy9ISVR2VGc0alRRNzZBS0xSYVdKVTlJOVozMFZEM25BSW9RQy90RExEMGxtcFpTS2ZsNXZzbTdreGsrL1lLR1lFR2FRUURrdVpCSUI1NGVBNVBWSUR0bVYyU20rTnZ2TVNVTnJaUGhUQmlibnF0N29TcWR3aG9TbTZEWVBMSVNyK2RBOTAya0RnUjJPM2ZDdkowa0ZxVWM0eUhkSTN0RVJvcFpkY3RYMUozVWhlZE14a00vd042TzRueUp5eUNDYzVwbU5MSGR3QUg0Q2lZVkovSDZXbnhVTkUvdVpoVDlzaW0xWEVKdWVlcllkWW5iTjhOaTlmN01udlRFbFJHQVBRUDQ1UDNjUG8vV3k4eC9aM2luOFNHWGo4NXlyK0pHb0dHWkFIQTQ0YlgrdzMxN21rbEhwMUdVSzk2ZlMrbEF2TDhjUEhrdVZONVFhNnpKRzB0RHJHUVdQdjIzV1FlaVZhQmFYSGJBNTJ1aWIrdlpNcjRKZUtweHVBV2dGeUwvZnh0WFhtYjg4MWdJTS9RMDdZTUJXQUtpVEthalZ2YUZmYlo0Ym5UelNsTXplZDZRSEJLWGNuZ2h2dUlXZXhOcWZkUEFlY3pMYno0bGlOT2ZkRHNrM0RJeDJVRE45aGZyTDB3TU5UaFAzV3c4bFRycXFVSVIvZDh6UHFTUXhkQnZRYk1neHlXNmdnM00waVNXYWdScnQzbmRxRUt3eGM0L1BIdi9WWU9ITUtwanAvY2RBTEtqdXlFMGVpK2hGbk9raDhkZGtWSEdtNTBod0Y3QWl6YS80V1hBekhJL3hPRi85S2pDY0poVTdpS3JLZHhiNXZqZHJzWlJVNm1SMytPaEpTVUV4bW5pSkRPQjRCbkJ5czlxTUNkNUdHdDhpb1NwOGJBUVRuMVZCZ1M0M2t3WDc2RmVoRWx1a3ZNWlRTNDZpRUlUTkl0OFl2Zyt2YmlZMDgrZENYamhtUDltbks4Mks5MlVLS3RhUis2OFBZNlJxQTRsb0FUZStmVlVlZkc5M1V1L2g2bTFKNHBvY2xGN3NOWHI4VWVjb1JyZUNzQ2o0U0w3a0pvWG1NUGZFZWprNlppeFBWMG43c0d5Z2IzZTFoU3A5L0NMdHlPU2l0T0d0WkVCTENrMXJPUVFGK0VvRmNma05hbnYrajQ1SDd2c0hoRkZZM21EMW1iM0xibjA5ZFpFWjNLeUJvWWVwOG5MQTBWTTl3VlB6akpHdWM4MkhuNmVxeG5MMmRJUmxoZkx0RENWN3ZEeHlRanZvVmFXWUxXOU42dHdXYW45ditDKzRPYjk3Ni80cWFYTkVhVUFmb2YxcXh4MEV2NVVjOTd5SWpFZlk3YXA1WVB6bUU2SXZaSkhES3JNQWNHNS9QWHJiRHJFNHQwUXBuLzhpSDZWSWp3bkY2aVFDRkQ2dGg1djZkVEFWZmFLZGErTnpEWWU4L0RUQzc4NWtoMUZsN1JqNmViU3VFMkJCZXFlWFNIdlNmSms5bUxlNlpya1hRcExsK0N3ckRRRUJLQjZ3MmlWdjljTFJTSjlnT0RnMlV6cWRWdWhMOUhReWlXSVZwVDBLYnBYbmJtemlPdjlEOS9ldjhGM3NkUDE2UmlTbWxFaklzWWJ5VkxvNXpoNDVtU0h4MytWcHRrSTRwMjZtY3FtdTF2azZKUTJQUlBqQXlnT2xmM2lhN0FUWXdLb1BGQnFYd2wxWVBKaDVnakdTMXRIbklKNUk1Y1BoRTQwanJSQWloeFdQblNzb21DNjJ3OEtxYXJNUE9VL2xFWU9GY1F2dFZSRWliREdzd2JuY3o4Q0sySld3OGhjWFdoZWxRKzF6OGl2cWFGVVZBQkxlKzBlWjl2VTBaNVBSbm45OWRzSlVUbUEzRHVadEZuMTBibllDWHQvZ2xSTy94MGJJVjA2ejVQTmhxZ2FhcE5YbzFGei9HWUR3V3ZLUTdtcTg0bitMd2ZMZUlTMWJtelF2MFpSSDNlT2JVWVkrRjdrRXp0MUk0MnZvaEtLb1k0WHFzekdYTWZZSzF4TWhTYWs5S0J5VXlPckdBdlVXVUJmb1pUTzJ0RVlsb0RJZCtaUnlYSlNyWjJ0R0Y5RVdPSDFQdnRLcVhrQmJkYWdOR0VyN0FlMUs3aloza01BcklqUFRnS0FqdnBRdWp2UEkxbEV2ZStJa2phd0FwU3ZNc0ZJY0tNOTg2NERyTFBVdUg1SUNOZkFPSXpFb3k4dHRvWnRJUHlnVkhnMXN3OXBXeElINFoyL0h5eVd3WVN5ZG0wNW8zVDBNcE54OFRvQ3IzZ0lTU0htenJsNW54Y1RZSk1WSDQxbTBDS1V5bTFsVjdudi9mZ1J3K3ZZTGRuQVBJWDhkZ2JFcmFEa21peWNTWUFCL2Z2UGZlWUY4YnkxWXVKNFlmOTdEU1AvZ3hwdGtVdENHTUhRbmFLOFZhOXk4c1d5aTZQTnYxbm5IMHNqOEtsY0FXMlpNZWlBSXFtK2orUGc3dFEvTWVzNUxaZEhMM3drYUdMQldLbVk2dzZ6NklQMzZUUFppTHRGd09MSnFaRUlpZVpGYWkvdkdKM3VFVFdqOGZ4MUl4Q2g3RHRrWmRaYmZHNDZDOENjQzRkbTR5VjBqd0JZd2xBU3dlVVhNd0RlNEtmRTZ4R2xoSitYSGI0ajlzQ29PclRHNzRNRGFxK1lEMSt0QTdqblFVNWQzc293MHpsd0RiT1Y0NHZkbXpiMStDeXNLeGd4cjVrK1ZUQTVoekM2bG1IQmxXd2xPRmVwSXBwdm5nODkxc0JNR0VHVE55TFFFSnNSZ3M1NkhIUDRVbXczUTJmRW1kVjhld1lVZGRpSDZTZzRpQi9pS00rYUdWL0NkRDQ4VFhERlUvaU1EanAxc08wakVFSTFpVFZwNnJ5Z3lvNUlvSDRibUpoNTFUYzJEdVE3UnptLzErWkwvcjdGR2ZYdlpLZTNvcWd1UHZRQjBCSTk3d2RPT2E4QVEvT1E5b2dCL0FKNC9icEd6OTVMRHlUWW5tM3NybURrbTdpVmRUSnhhKzhDemZSRGVGdWRvOHc0bEMyQnVHdGVOM0lIaHMvYmh4MmtJc21LbGtBRm5KRHV5aTZwbHlkaWl0ME4rVkczN0JXS214aWlmNkhtYmZnODVqdVBZb3JJUUxsRlU2WmdZekMwQ0VZaHNBbGV2S0JPVVRHdW0zYktqTStUNUdXanU0eEh6enkyN3lXd1k0cW40WTRCQkJ5NEQ3bFBlaFdOK1czU29raWhRMXNRcVNjVGZFNjM3elhYeCtHdlVnQlFzN1IrdEUwSHN4dXdBUGg0eXBNZlo0dG5STWtwWWJkeVZYR2trNXZyQ3AxU3ZkRFQwTGtGdHVxcGRQT2NRbnJTQUtxeFpNSHF4NDFqTTZVWWVHS05tNUxRM3J6dkFPbTZ6YTRUdlJRNE5KakhOeHl0WUxldGVobnZObmZIZWFOb0Y2WEkvMVVIYXV6dzBqR3NGdTdEWTdjTmVPVVJlTmJVTHB4cnhLZEpBQ1NBb1FJVkxvMzB1dzNmbHBZOVlWVzIzNGRQL05CTFk3clBDWWswa1RXSjU5ZEYvRWRqYUVMa3NyaFh6T1lxTVdvdnI2d3MzbE9TTndsUmxDYktFUHJwOCtKQU14ZlFsa1Nxa3BmeWVqVWdxRnBsWWMybkZ6eEcxN2NFVzI2MEkwMEw5bGZHU2lwVmsya2lFL0VFZ3d5d3lFUnZlSzBGVW01SWhOVDNDVzkvejZQbVc0WUZ2QkxkRVowMEM3OEJ4K2pjR2pQeWdZRnlBenlYNldKMXRjSWptQUxHa0M4anlmNzBVRU41OXluYklpN0FmOHdLNkREc2JsaHZ5ZjlHeUltUmhZL0tON0w4elg4OGVNclp6eXc1YlhKdTFkcGpuYnNvcWhFd2xIdTVSSEVNZDZsaG10R1BzMFlFNENCVDRaQVJHYWV3Z01KOUw1RS9laFQ1UE1adjZKQnhXWjdUNWRicEdSSG5LTUVYSElaTGRDazh3eWRtUGZ5d0N4V3lPVklzQWxPSi9tRzdRR0l0clZMSzdhQzgwOTBodDdDQ2tyelY2TVNCa1IyMlBkSks5SGt1bGgzOEZPbHZTMVgwSnd3bjR2UlNmU3FKM3VITG96SzZ5b29FNEN1Y2JYdEhXdTJmcDdDaXJtSU5vcmlGblRkenc5OVZXSXYyY2xDQTlnWUFWTVkrakJFdTVCaWhuMkZKR0VXK3dHcGI4MjJZZEdYcFdhcVU5QmVxdG5XUEU3ejR4MWhtbVE2RG9sVHRZUElzaVdPRldYZlpyaFQwSGZGK1VJdTh5elh1NDlYWEFNV3FST3NlOVBEMGV3MzVETVJQU2JzdTUxSjBWOUVrMEpMK3RqWndtY2poTWJQbE1jaExqYTJRdEIxaEliVk44ZWxoWTFPcEY1SFBwZ0xkZk5ITTNEV3laRGtJMEo2U2Q3Q1NtY2JEWUpPRE9IY3FibmJLQWtrTzJaOXVSTGN4cm42UzBlRGF0ZGVaNkJ4SnArRlRxR2ZWMi92K1BrWDhjZUM1R3N3VFZ4eWx3aHpBN1hEOG1iay9nb0FjWEkzT3ZGQTdxUHRwOFBMZHdEbk1mSTdrYmNKQ1hFS0xwYis5RDNoRmNub3IrWnpHRlhzZFp5bklPZUxReE1aQnc4T1JHc1BDV1ByNTllOHg2UzRGa1AxS0l3MVp1akozajJ3WEwvQnZrVm43L2Q1bGhBc3VBY1lSZm5zTnMySlV3MVBrSTVMWit4S3JNSlEzRXJzZnluQW5NMllMV0RyUEkyOFFMRTJFb0IxMW5tSWlwQzNEb1Q3eE95cU1VYklja1d5dXVQeWxKZGVGVHRCRWtWYml1d1JVQkJXL043RlNHbGUxMG1zUXUzZXI3ejRGd09SeDNQdFVDL2FKOVAxNHk2d0NIcGVTVDhtNmJVbWxvaXdaNGpLV1lIRW9HUzJSYWRZSXdnQVgxUlNLWWtUSGpiNC9PTmxpR25EWDlIWEFUR3NKcHp5YUFyM25vNmR4RVVMQlB2NjFsY21QeWprSno5WUFsaXFBMEh4NHprSTd3TDB0Tkp0RDlnTmppMGk1azdWajlIUUc0NmdrSi9HT0J4WDVoR2hNcE5EQjBsbUZ3VEpCeFpoQnJWQ2FWUTcyNlo3bDhPbEJ3QlBjd3RHL3BEelZoVXcvcWswaStRREZmVXZ2WnE5YXNETG9lVXBJbEx3OFMydFFWa1FZZWc3ZGpOaFhwVldqQVRyS3ZmOUZTeWtIMnpqTmYwS0d0anQ2RWNpSXQ5djJPYWVVa0xHUkVZZjJRY2dRZkZ0Q2YyNDlrTDMzM0Q0elh1TklPUmVtb0tTSkRxbmFIb0ovVm8rUC96MVdrUnlGRVZtTHhPVU5WTHA1U0ZZdlpoSXRzUGNOVGpyeVFnTnBjaXM4U0hSV3J6c3lOaUhqWU82WGtSemlyb0JDVi9UMVk2a3VWRXBUYkpqM2VUZFVFOHUxcytqQ0lLcENneEoydStRYWIzVk4yT0xjblpmRy9XSURZRGRWRi9LU0N6MlgvRkd2dG1PQTdPTUR2SEphWkh5L1pwSlUvajhsUnF3bHc0TVlPcDRBamNINUJnbElxL3RLRU1WSk1nWldsc21BQVl5RDBnS044dVN5RVVMUW5BWjA2dDkrZmNGME5jRHBaamVqWDV3djZReW96SDgzTnVTYmxNRmJjYmtYTUNuc2l4VUc3ZmJzaFdqakpvQlk0UlliRy81NllrUHltYVhQeU8rMUdJcXpIdnlFVm1BQ1FjY0xFNVJIendBb21GRkNJVWpuM292MFZFZ2x5T2xzWGEzQXJJY29Rbk40UWxYSXRxd1AwVnN4TTZ4Z3ZHR29IWDVlazNMTFVSZWExMUZZTlhyeUROSUNuY3BMTGhTc2E3ek41RWNWanNpdzBpc1d1Wk1BVU5aUmYvbGJJbUxmNEpnTE1yZmF4UWdaSlREMVh1bnBRVFM5U3VpN0crS2p4bmdIMlhxWmRRM0pjcVhzaDhQZzFIM2ZqdDVhTVk2bVV3eXQwN29xM0tscE5zbW1ZMFZZMWZiZHpaMVVCRytleGxLZWx2VytaejNuRHd6cXBTUkswQWJHQ3g3RE82ek5TMUlOVllHVEJoSklScXora0N4T0F3b3R3bXJBMXJIVDY0aVMwamtseURYRkxCQUpLeG5XYVFnMUp3Uk9jT2Q1eEYwdmhWQ0ZqVjEyVXRua04wNUZ4R3ZZUUJPRHZ2eGZ4cGxuN05VUXlQUVc2V2xITWxNZzlXUmIxMnB0TkN1YUVEZGZWTTV1NC9kdlJiaXhTaUk1eUJyS1lPUXg2OVVZNkU5d0NkK3pnQ3JuYi9zQzF3dkppVUp4cExRc1JYbkNJa0xZOTZNNlhIQXEvQldWdEo5MUFVL202Mit4QUNVSkZkdFV6VVlaSVJzSVBld3c3M2ZPbmRIellaVVNIcW1KeFhJUSs2YUpWSG9mT0RjTnlZdjVVaVMvdU5LK2lJWHVtcUkyQTNncUtxMm5IRjd2QlBvcEVOM052bmYvTkhEQTBjREZ0U2RTYmdxSlBZQVJKYXlsZ1dqQlBCNlA2NzlKVWtpVjNYU3E3UEZWNXdtWmJwR2hFWkRJcDgwaW5hT0t1am5XN1A5MHlpUU5xYlByTTdDNVN3Ums1eXp6SG9MWDlWSEVDUExMKytCVG0zYTdKdlVlM1BqcEpxNVdMOUtDcG9BRWZ1OWhiaE9wdlFnRk0rdWJvMkczd0p6aExPTlhjSkl2TzBoTEYwYmRxQ2c5ZUZqWTd3YWdGY05TdlN1WnZKaUEwU0I0dEd2bHZrNkt5RDZTTnpLT1c5Z0JaM1pGZ3E1V2liL2tXamtPSGV1K0lhVjVsSWxBeTZidmdrdi9lOE5LWXJEMnFESlFBbXlkbkUzUzlVZno1VDRiMXVJNWsrWjRwM05mc3ZuSElVZnp3U05TOGhoSVdVRFpqdXQ3VVllcWxiRXhTVWhPSTZSR08reWZWVFFUZjNiRWQ0d0poQ0czckJNM3FsSzQvUWU4ZzByV1VhdHRDa0xXT1pTWnpNelhGclJ1eGJGMEVpSWJCdWdORTBzS0pVa3RqVWtQbUk3bUdLUVUzam1yUytabWFkQUdORkxZMStVcnVONjVnV0E1RFV4TEluckxPRHMzS09uM0gwMjk5eTQ1MGhvY05kUG13ZWF2RXRCZmRKa3hXNlhxSlkzWi9oWGdQZE5sRmpwd2tDR2VyNXk1L3hnVEIwR1FTalptdUJpTWhIa3VrTm14UldoM3gxMlVHZ1F0UllQeVRuZ1BQZVErZ3djNWRjd3hsZy8xc05UdGp6eDV1ZUN1SmlJTFErZW8zMFc2cnFyaGlYR0psWGhRV3p5dHZPZ3NEa0xaY1BERE9uOWtTTk9KWVJOZUhPdHl0TmV2MG5ZRmV0NGpIc0dRN24zL0N4b2cwNEFqNFd3MDAzVnNKNk9xTmY2dkEwTmtNVVRrMkQwTzIrOHAwMkYrNGlndDVOK3dQaFQ4VXdCU1RiYVpmOFNjMEZxekYwOVQ1YkFUY3o4c0FUcTNuVmlyT0R4SzJHUDZWUjYwMlNkVkNncWRYRkl6R2lHUUEvdlFHZlZFbFE0cVd4S0M1RTQvOFlBQ2pkZ0pxZW85WE9uVjJqOGdXZ3Z6WnA5akxkQWIrMDlsUkhsMjd1WW1CNzZoWE4xNXRVUElHd0VuY1FrY0xydWFUeGFnb3o2RkM2cU0rZko1UnlGN3VuQy9Ic0xrQmYwRXRZZ1EzNHhLSVpoM0hQSUtTTzRzRTZJcXp5MGtXa0IyUmJpNEczVElpUGg1NS8wbEFpNG91K3ByMkFYaWt0TkNSOHErS1hFWlhrZnZVZFU3K2ZVb0pvcmg0UGFMV09WZHJTS3ovWGdUZ21XbWs3NzNJMERNUWdMYTZ5dlVHQkM2WDRGL0dvSXZ3S3hxbndFZEF6QnVmYjZQUHBjY0o4bExGV2I0NmMxRWpOWXpJakUwTTVxM0RQRjYweXQ2VmUwS3V6YkFtYldiWGdlZDluNUZRZ3laNXNicDc0dngxamVBVTJlbmJCOGRQSG1FSVdPNDM0T0VjVnE3Q2FaT3E5OCtBanM4ZVhUODF6UzRaTFJ0MWM4N0J2UHNJb1Zvd3h3OVhidDdnVElEbFNzRkMySEZ1OHFoQVY3SUpqMG9nZy9tQStDejRJdnFXdmVsNnRCTi9pWXVwcmo2bzViUGFQSStEUHlUdWJnTEVoYzV4d3dJZTVCL1AxV0N1UWptVlR1Vm9NWTU2RzIxRjBYVU53UkVjKy9MUlcrVHliZHBOVTA2aE50WDBVRFU3bDJ1Y2JYVjl1eEM2d29ZSmVPNnpqc0NoN21WN09teVB5TlJjVGRtK21DOU8zRE5rT04reFhuUllrZFVRVXFMZ1FpNEpSMUFMMXE4RVdsWUYzY3gzRisrOTIyQUtsb1lCOTlOQUhvQ21zVXNxanFOVVBGb2pkZk4zL2VFZjdURWJsNjgzYTB0NDZqVXhIYi9LMFhVamFzSXNQcEJKenY0bDExbmxDay9xUVBxM0lVa2RFcmxlSHZsc2lrc21pZDgyWGtZUzA2WWFGL1d0MFJBT0FLdkFwZmxnN2UzOW54REgvTFdzSWx2VGkwWWtEbGVXUnlVSVFHeHdUUWNsc0Fvc2h6M05UbTBGM0tLeWkvOFFRYjFSOEkxd1VPanA4d29ONnFlOTlNNis0cFVKRWpCZ0huUVR2Q09wQmgwNXlwbEIyckw5TXJEdnNOa2dhZHJmY0ZubWVqbkt2YllBdGZoU3Azb2JtWm40cjBKOUxLbzJ0L0FFZFVORHpmSVZkMXY2SURjeERsdFI3bnlJeCtQSk1sUWpJNGh3aGdFalI2SFNWYnM0MlFXbU91RllkWDFsbkhySHVValllbWV6ZzhQOGp0eHhid0RaOVc4Wnd6cXBiZHVaUktIT3dPQzNZYUNLVVlXOEhscDdCNXVTTVEzM3F2eDY1T3FHMVRHdVRYQ21USVRPcmFYSHVRVWFEMHBBRnFZTENzOVZrOWsvQ1M5elhyT1pLZVFmTVB2Wm1CNGFXWEdjTTZ4bUxLckloNmVSYXpBOVkrdGZSV2tvd2VCMldZSHIvc3k1OSsrd29jVkoxNEczUURiUzNWM2VsaysvY2xGQ090aURaMGJiQ1psd0t0aWYxcWJ4dnRUTnRBNEhvY1VuOWcrRllzUHlkcDk4czRUL1VBL1hsajBtOXNlcTJuSzJpbWdGeE80cnNIWHNQaStzUloyeXRiTGlnWVZrMEZmcnovTnBHenRjSDIydTM4U1BMdFE2WkViZ1JKeFFRMGxVbHF4czFOTjk4ODRxV2liemNZcnBTV2FFeDRmNXljRkQ4N09wUWc1RWtQL0VnZTA0REk3SFgyYzRud0R4WThNUENyWFpEZHdNRXZLS0RDQTNXVnVnSWYxN2l3Ym1VRFJFak9IekEvRUhFayt3YVBSZ08xT1kreDNqaTg5Z0lwMUlLR0xoMlhYYU9YMWg2dWlWOUlGT1NCQXJYc3VVbjJYcmEvcGlQOUtmRHBEeFhmcFlTTGhkcHhnQUZTWlQyOGc0Rm82U0Z1TTNlT0c0Sm9CTTZWZUVyRnFBWjRldXRoWjVUQnZ0MC9sSlRRSUY5RFRDN1lTNjVQcnhpRXR1UHVXTUhHcXlPb2ozK1M1YnIwVzZKcFd5bE1mNFNsdUVlZkl2MUM0VE9DdmJtZGVqay8rZStmUTY4dC9MM2pBdzZQSFVBaXhGQ2JhY2lPZjBUQzhtY2xmSEdtUEhQOWNLeHV1ckh4Yyt5QmlETUl6R2JiYzhnUzFBQnNtMmlkRml0S1grRFc1YmIwWE5YL29BT3VIM2hBeUc5OWsvRkVaME53WWpzYytJenV3SjJIZkNsRitUNEUyWXVaYXkyNkVsc1J2b1BMeXp1dFdmYnUzOWJpQWJXV0dvSmxWSUNmeW1NQWxUNWdaQkNoeGM4dWpsZEVIUGZBQ2xVQzNRU3NUMm02SEhGYnI2VUsvbk5wM2VsZHFIL1JOUW5mMk9IQkJZU01HNXdyYjR4RVdKb2hpcC93TVpNWXd0a1lIdHo1VDdRZzJESTVpN1gwQ2h0elBvZDdycURNV3J6OWhRdkZvZExQT1FSR28ydjc3VUgrcXNiWmJOQ2w1RUdZS2xON2p6NWZxd2wxOU05ck9kNU9jU2hZSHNZNzVCaWVoZENzWC9pZTJiR0EvRG9PcUx2MndrS21TRzh1NXhMUDJPOVEybkdDZmxVbkJrdWNPWjltWFk0ekJjcEpOU3pJTWlsUU9yMmlrWnpHQ0RxS1pDNmRwVklMSDJKd1ZSWTdjZnhTekkvZmpxSzNubmNwd3JydFZsb3V0QXVMVnZCMWJJK3JyRFRZZDExVVNISjE1cXdSOVJVa2Y5RVVIbURjemQwK1ZFVjYvc29ZbVhyMENBalZibEd4VlZjVzV3OVl0a24xRTFOYXFQWkc2ZUxRcVFJNTdOY1FNdzh0Q0krQUUvZWRVUHFmRmxHZ0hSK3libEdPS0dubUtBdGhza2hKWlRvaEQrZG9KSTdFcU5TRFo4RVk3M2YyMFd1eGVzUExvVjJOdzFqWDBRcGlDZTdBM0xIR1NxS0E1MXdMdzhuSHU4M2ZqTkNUWUhXM0hsZnVkdUNmYjVXKzdtVFdScmN5aEs2b3V5UnBxTUVyUFJDclJIZ3F4VEpWWEV5Q0xmc01zaGY5Ynp0eVJxenJzcG5CemJtcHZoTE1qNll5WDQ1b2pVQ2hkUTRlblVNbFpxVmNJdWpZQWpVQ2h0NTdHNDRJUTBGUTBoOVB5Z0pmb1IreWhSQVNxTnY2VUZuUlExSmYvTjBSNWFyRlZNQ2c3THE4WXN3Nk9uZ1lYYW5Sd0VJelpkQTJ3UEZPcVJGL3NXSjVVaTAyRnNLMzFxbTlhRElXWDFKc3BsNEJpMjFudjdhTzd0NlVqUlBqWEdaYldRS1BVYmZlVlppdTdLcVo1YmNXUEh0OUNRVlZtQmZlWjc3VHgrc2Jvalo4OWxVdld2RlNYZ085ZXZURDl4UGVrL1piTHdrb3Q3WTZUQ3JYUXpKV3F0aElaUi92MklrUWRERjFUQ041RmxWMFlNZS8vY0g0a0dLejlyM2tTRzR1VE83Q2RSTGRFMTBQNTh1UTVBWHk1cmlIbmU3aDF6WDVDUksyRjlSNEt2b3FHaE03UWErMDNsbHFFQXBadytxN3A1L0NMNHVIS0cwUEhrZGxLMit0VzRSelBqSXBXVnI4ZWhQY08reWNnU2ZDMWx1bEhuTDlac25nVlMzcE1JaXFFbE4vN25qeklrdGtZTll1dzF2NTdPTVdTRmFGR29oVEcvU09DTEcwUEFTTGR6WUZGa05WeVhTa21iQkNTbURlZ1FCSXZLZUpWSG50TUgzTU94VDR4VEJWWk9BNzVzdkJrTHlxTnJuUmdnYjNHVGdMVGNDYlZYRDRxUWxib2FmWkNBamUxR3pRMzlrb3MxVitwQWV6Nk9maHVseFVteWlweG03VTNZc2NEbXB3MjdES1V1TG1HU05Kc2lLT01qWEpvRE5ESVhkVVVPQnBlNTczbUxxV1VpN0QxMW5ZQmx2SVlidU1KZFB5UXZTMFFzeGhtK2JYd1NsdVFTajNXL2dDdzRhMTRkMVBvQktZWVgvY0E3NkRoM3FUa3Z2aHZyemRIc1luUmYxby91RU5NQmhZQWkrb09KeTkzYklrbkZURGtoOHRKMWVvZENJSTBkemxmMS9JTUNYZDVLRkdjSTUrYW9DZHFTK1lhQlRxcU9IK2o0aUhoZE1xcFBDeC85UThobHkxWnNZWm13VU8vek8yRzM2MTRRK09IM1V2KzZ2TVZ6SzFuSnRUZVJSNWhNeFFZTkgxYjF2eURmR3E1T3Z1N0E0SmlXZXBFUW1kNElWaHhQcGpxRzVsT1VyS2Iya0EraFVIR1g0MGpFbVQrbXc3SmdOOUVyc3BRdmxyTGpJT0crVUpVdDVsclBlTk9tWjFNajlmcXh4SHpDQmx1N3FqNnpPTFNCaEQvUFFXd2NzejUvSk1VNGdsS2M3YnFWU21QMVZlMnVRaVNXeHJOWVcvTXJsVlhkOERROExYMDMzcmFlanhIUW5zOFJoNDZ4eUx6aGlMS2trekZrOGV1ZjZ1UE9jYWdHQTZrMnJrdExPNCtGdUkzOHl6dW85TUM4djh6TE50b1ZXKzZCbWFXYUpSZlVIOHVYSWZ0citMQ1JDSzZBN2oyQ1VLSDZqR0dyZzFvaEh6bC9aUWwzREErT1UvMTJpNWtIdUdrN1hkVWRVejBGVU5vcTF6aTRRMGUyU3p4K0RsRmxVL1ZmdDVaUjArYkVYTldjM0g0VHBiUGQrdFM1K3ZFcFpqMExNRUYvM3YyVkFTQmhTdG9walltUEhaMzllaU40UjZCM1p3WlBDVDdYa3krQzlPMVRnck10T01aK0V5K0lnZEkwOEVaT1UrbDR5Z2E5V3dUVmxvMzJiZHU3OWdQeHFyMG54RnNnUTlwSkdRS3BjMWVIVCt1dFU2b2VJZG5zYjF1dWVSVVc0WFI3blczZ2tyc09rcGVhbDQrQy9tbVJBaTdUTkJNbTQwZWppeCt1S3JtTE5sTXRET3hQWnZocVJSYmY3cnVKM1c2RzdmT1lEbFE0eXlJQ1NaKzBxZzl0aTZPdFJvNmFBdWJDS3UwcHQ4a3J2b3pBUUR0bHJvSXpLaEEva245RzhJdmh5U2RsNldGTGhtVzVYOURXNlVLbk43S1BPZExkaXFUUlFiTGJqTWlrZFJQR25tNzYwR1V5VEliMjVjcU5qU0lqZTBIOWIzNTVkQ1ZrNzNQK0xtNFRrYVF0dU02M2xkUkRHNjQ1ZDJSWjVBYTRTN2MwRFlWQ1I4V0N6a2dtNFhjaEtvN1BZUlhLUis4dHNqVVp3SlpSbzNFUmNGVy9sQndzOEt6RWcwdlFpSjk2aTBLbDMwL3dwcnhIbnV6cDc4MEora2VneGhPQmN3enpJeU1IVG9EalFvS1BlQ0V4czdEOWRmdVI1bjBHdXU1VU55Z290dDl3TnJTWUkyZ3pIbGN6U0xNRnhtKy8yd3JxdFkrWFYrSWNXRHZ3WDQvazB3ZjJTckt2ejBRVC9NSE12aG5OS2xQQ20wdFpsWXV4QVd5dzBxdnNkMHRPdXBDMUtiUUF5MTdmbjBFaW1PYlU5QmZTSUZlbldIQjJyVlNuT0F6OVZzc3FKeTJsWkdvYk9EenhyeXh6NGhSTHJ5akRuOEZSSTNjQWxUM2cxVktwK3dPZGRqMEcvdENpNkxiT1A2ZlBvRDVKNXpRNjZBUHF1aHdudHJTc2NqdFpjd21LSEJENGR3VTZTUURKQXBOMmNUdCt1aDRDVzAvUEdLRDdSdFhhZWU2MEh1WlozYnRRK1YwYlBEVjl1R2gyTXliNFp5WXhIZ2ZLbFZNMnZYZ0VkQzBiZ3QzQ2pTdTR4RDdZbnEyZFI1V25HbXpGZXVsakdwWVNsK2RoazdjTzhjTGM5azNjbWxsanpkZ1M3YU41TWtqUkRDUnlGampaenFlTk5lbDY3Z1Fybk9jc29BdkZrQ2ZRZVpTRW5wZ0h3QXNNeEFxV1IvdDhVdHJ2MW5WZlo3eDEyS2l0MU5VaTM2VXJycGg5WW5YVVk0c0x2RVZCNUtQZ2JDN0Vwb1FERVlrTVV5T1BKQXJLeGthUERDeG1ONUEwZGtXbzBuVU0zbTBGRU10aEJEQmMrcHJ0TWN4UDd3eFVURXFDRktCWmozcmFkcnZOWEZNR3l6bllWZE5qb0NUamhPMlEybmxRbmJvbTFmYnp0dUt0eWJEblBPcGswRFZPTjNBTmFXVHZraUgyMzEyTUlFREQzRm8xSDdkOFRHSXhFMlZGQkNsUWpCZDFkOUROcDZFYS9nOExqL0pJZ3ZUOXJSYlh2TzZsOVByOHNaeXZ5K1N0QjB4bWFvNnBaQjdXcE5XVTYzNXk2RWxwVGZLNDF2ellWbFZlWVlFYVVpU0graFlOMjd3WDVrUWpTaWttODhBM2FsQzFFYjMyTFd4SHJRbnk4WmVXdmQzeFZzcVIvU2d4YUR3QXlJZjR0RWthMVdKdWZBR0lYcVV5VnozZXo1UnlLdER2RFpoVmhNSXFWK2xRSUpwZWdmSTc2SkI3VkZLbWYwL2xyUTdzUnhRUVN5Tk8yOGtRc0tiRUhpeTR1TXArdjlvQ0o5ckJDbU80UDRsRzhidzNEdnF1Z0oxUHZHbHgxT2NTQnlBWEEzT29MT2N5N2paNGFidXlya2p0ZEVDUjBaRllrUFpTY1p5RjVlQmgrTUQrSUZIQnlxSktZZmxENnhJdW5RYUVGKzFMS3hBUFRHZDRic3hGdDhMdGZlbDhKYlZEdEd3cnJsdnlVTE1xN1dyTkV1WlE4MUlEcnQ0bXNqZkx4TEZXYjBxeXZLTThra1JZYjlMWjBBUUpLd2pWRk5hN0ttM1E1V3lHMnpka2tnRVY5MWduNmlpRXJvZVpsaHJCZ0d4WVIwdWNrZWVnd25MUUxRdGQ5SHBhRFIzYUZCMEhmZWo3Yy9HaFp2dmxzbkcrUHJDR01pdm1xL0oxOUJNT2g0SXlnQkJ4MzRXNEZleUJhL1dGMWNBcjUySHk1aEE3aFQxd0F5VjRvbGVSUGpRcENjaGM2TGJFY21UQWordjR3Q2d4bGlaYkJVMkpvQnNwc0x0R2p1VFZaa2FuZlgrRFhSQ1Z2SHlOcmJZM0FrellOajNWbzhvSDBWM3l1RzA5RW5ibjcxeTVtNzdlK04xaFhla3ZUM2dqNzNhQ01zMWErTGNYdVd4d0xMSkZrK3FGOHpvdTV2WFJJQ1dwS0FISVpvUHBsMlBvMFJyMmEvYWhVQk5EeHk0NjdValR2bElnejdNdUlsOXZYNDJpdWFCS3FneVdVenBlN3FicHlFM2lvQkpSUHcvYWl5STBWbXJWM0d4enZDQVVXUWtaTGRqT05JUmZEK2NLbDBCdk90dVFjdFRhcnYwOUlzbDF2MU5RRzgvRWErbm9WRmx3OXBwOStYTUNoWmE5QUM3ejQ2SWJIR3d1NjZUdVM3eXptaFJvZTQvMVY4RFJ6M0VycjdZN2FqbnpEdUt1WVFoRll3aWNyZi9HNHBFY09TK3JjZUR4bDhaRzhkZkZwT0dvL1lhQjIxUTFmSDdoM0JtbHpjaXNOdUlxQUFVNXJwdldVdW9ZcGM5cGVMa1hMSUhUZjF0bjFiQy9ic2Z3WW50TnNOc2ovSW9odGVPMktrTHQyNDg3cWUrSmJCZWNRQ2JjSkIxVURGK1FpdE5NUlhyY3M1NEY2UFV5Mys3YllEc1Ewd2krVXJGaHkvS1kxSEdqV2I4bmt5RFZrN2pBRjRxQzVOcGJyVzdvMTdwWERkRkkwNGR3R0FBS2d1NldYdlVhUiswTElOWlVMLzhhWFZ4RjhzeEZOTGZIV2lVRjM2cVlWd1dabmpZanNPYkYxUTF6THB5Y3lQRFg5SDlnczBxSWc1K2dzVmNjdVhocGJLRExNbGFrSHVGMUZKV3Axd3N5djFnYmlnV0lvOHRwNmNMTkduK2dDTzlCWlVHUm1XUGEwaUwwbXhodDdScnRsTUhiU1gzSzJSUHdTSzRHZDFtclFEWEVjMTE2aUFoMjB3ZGFoN0lYRmhPZS9DOUdlLzYydDRVaTRVemJYTGIyckY5K1lEYkx0U2o0OGR5Rlkwck9WaW1IQ3NUTWk3ajhKaHN0ZkpEVndhTDlDU01ndjl4bmZXeGg5ZVdHditKT3I2SXF6TTArZTNEaU1QdkZzSHRQT0pYS3NIYzZ3RmU4QTNYMEsyK3FLYjhYL214YVlBQkloRkwreVJIbnpZV2xrQVI5MHVHVDNpMHZzTi85M1JoMGlmeDZ3T1VMNGNNci9PS0dEL3Z3TUdGUll0NFB6NEh0THkxTkNlbFhkb29hYVRvejdZWkZsdWl4VmdLemZjL2w4TFEyVmJ3RWFwQmd4eWMwVnRjSGE3Z2xpOUcyNTQ2R0FNUXd0R25qYk9DZ3ZVSlN3UWdWc3NvSnVoZjZFSEx6QjhNWmNBa0RKbGZsV2NnUHVPV2YzTFJzQ1BBTk03V0thRlJWczhzRXpBV3FCWWJxWWRjM0xONVBKaGpTOUJYbVpkR3h3RElOYXF4eDJBYWZOWXVNU2xrbllkMVpFa2lwL1cvU3VQM0NYSHFCd1A4bDhyZFJUUWFFTFZ5VVBIUjh3UWxXd3JueVQxaVltREUrT0ZkMW1ZVG53ZGlIbUMxL2xMQTU5MFBkUnhyUjFFbUpNZUhJMVJtZmVPOXpKYkd2WkpDc2R0emVOYmVHV3JBOW9FQ2VlalZuUEdyNWhUMER6WE5kVjh2YkhGaXNYWksxV3k3ZUxxUkxjWkliMlZNVEFnQkFvL2g1S29mMmlaUmVTelJWN0w3TU9Ta1g0ZVp5Y1JWY2llQUdnTWdNZWg4dUdIVjhhb2l5R25IZnlSTkJaUk1uNlhMdjRsUjNNMjVBV21zWEQ5YXVyc29mbFR3aUtLaFdTY0VwaHZUdVBSSlhJdUFvU1J0ZGZ0SmJvcitncmJOaEFoY2VseVpYVExZQm1idDlzWWZERW8yYnMxWkk4c00zQTZhZjZFQzB5UVQ0K3FhM0J3VDhIM0x5Q1dwMXpldEFRMjhxK3JFcFdLZG14VkVtM1h0QWErWUlyazQyREY4ZWZnNEtTSVFZTVlxWVlNdnl0N3V5SUgxWk1lL1hKWVk4SjhGbHdCQUdQMVNROTR5VUxWNE5acndLWFFBYUJsZkVlZWV6TjhzeTBBNmFrbS9rMzJmcDl5T01aT0dPbGxUOUNVR3krcWlPUDZZSnFTMi9SbkhneHljOWhEbXR3LzN1Tmk0dGh1dThsZTFLQ1ZDaU1mY3pDTGxXeHl2c01YVlpscWM0VEt0M3liTFdta1ZxaDErZXBzS0FTL3o2MU1YaVZwem9QRkZ2cWQzdGh2aENpNk82dExNd2ZRYlFvMHdjeWtNcGN2Z2pNaGNrNWMvWVV6QUNkdXdhWUp1NFVKMVhtKzdPVy9Yd01kLzhGb1grOFN5SWNkTjQ3bDJFeGdRbHp4dVBTOVFPOHJuc2lRT1ZlaFlRdFpvTjhxOXBvdTZqenVIREtJekk3cTRISHNhNkFQUUxoalBWRUx3NzZkQjQ4cFdNaVB1bzE0eGVvd0JhSjc2czljZlE3ajh6STJNZzZpRjJmRC9BY0RJdWcrU1k1ZFBTVXBxOFFLYVI3R3E2V3dmVzREUVhoTHN3cnlveFl4eVdkdWU4VFFKZUNsR0JRR051K0d1NFV4SDFwL21LK3FCK2c2VnZkbHdyZGR4bUt2amZVTXUySlBWR0FYMEJJd3dFNXdyTDRBOHdCelVxYU4xaktNRjFOemlEdjA4TGhZc0MreUtGanRDQnhIKzJvVDA3OWMrL3FDZVFWWEtscFZaU0IrZkU4cDFpbGo4TUlWbTEwV3NWQzRlY0ZBQVhoVWRCeTEyREdvY0RuZVB1ZC95bGZsRkxPcXFMSStRaFhzZkhjKzNRN0pOM0pXN3lLVmtCalpwWG5Za3hrQURnVWhaNm9MaS9qNnhNT0VKTWgxaHl2NXlWUHlnb1dOZE9uME4wMGI2K1gyV29Sb1lNT3A1dnVPQzl3Sm1BZTFDekxlQjlpZUk5YS84Y3hzSjhHZy8yVUtZQ1lHbE84RDY4MWpWeW42elhiSCt6MGVCSVhBMmFaWlJHcDE2ZEZEcmJsSjNzWis3ekc0bk45YzFubVBuUUZCL2FMNEE0bTV6Z3VUaDRiZTFPNHc1czMvMENoRHZQVkZmMGdpeUlxUThYQ3U4NmhnOW5DelVYMExZS2pvZXp6YStzVnFXTGVXZWtNWVY5ZDdTT2xRQ3FuL1dqRk9ER09TcXVrZVBzWTMxVW1pa2I4ZTdzbWZRdDE4QWx3OG5oMEh0eUExbWZmbmZIemxkYXFreGFhZVhxNm1yUURPME1zbHVkVHppVFhUdSthUCtVdlVIeWhqQUZrK2xvM3BtVXRWalVLaGN1WHdFQjgzQy9JckpMVDFPYTM2dGdaNmhtWFJFbzVxMy9NT2RzT2VOSlpKZXpCbXJRakFDS1FHVWxxUXRvM3pIVmtxOWpvMlZXUUZybmFWMk55VGRCVytzeHJKSXRzd2RsK3NCZEp2M1loaElhdkJ3a0lDUWpGd25mcnN5bmh0U1prbWJRQTVYaXBWb3V6bVpsS29IV3paU3BkNnkyL0oxcGs4M0EvVlVHcVBTM0N0UXFiT1RzcUhjRWkwc0tCK0pidEdCTXVPMkhpVko4a3JSMnRoUlZZQ1NkamhrbHRoK1BIRzVJODB1aHFUNmZRMXJvUjh3UjF2WkpUT0xsb094VjA0bFhnZTZGMWtVaHd5K2VIWllBOElpRFZCR3g1SDVsYTRJbW12VkFVNnU5RllRZVM4R0JUQk05Mlk1a1cwelRoRTBxNHdsb1NaM1lPTThyYkRJK0Q2dkg4VUFUSVJQd0lIdklTSGYwazB5N2FWVUtiSVJNbU9SOUEyY01mUCtqdk5UeVh2M1JPQ3hEeExJZ2hOdEpDb2pzaUExaW5ZSStXazB1b2thOHIwaXRYWW53QVJ5VmpINEhOVFNXWG8vZE9PWFhKOG9CbHhRY2J3UjFGTnZGbEI4VDgzbzlQOENlR3JyeEx1cHdad1VuS3l5dWJoWFc5Vldoa3NnMHZwUkUrbFdtekhSQ0x5SmUybjJwdTRpYno2a044eU9ITDQvUk9TWjJqZk9ETndWc3JZRk0zbkROYVZHamJVbGhFSVRFYzdBVXMwK3dYUksvWkxubE9COXZrLy9XcjVENEk3a2paQWErWkhHQVlEUS8zODdVZ0Y3SXlXUDN2QkY4eUVJVnB1WEN6Z3QyZmpyejNvVnc1VlVEZWFmMEptNm5DRE5FaElSSmk4MHllNzBtMmZJVTVwY215OU1Ia05tSXpLVjBUNkk5cEdUS3NlV3hTTytzWHJkLzBqcXMzTXd5aU8reUdhd3dhb0xaWEZxQXpRRTV6Z3NtZXdMYXdzRWhYNVZQMFlHT00rUlpjNFIrY3RQeUZxL2RGOTR5VnpKbFJRcldMTFpLTFhKMzVHUjZhN2RuQys1cWZJeitEM0lFMkUzN1hkcFJrV3VqNThNNkNsT2doazd6clhMaWpXTkQ1ZXhEc0l4TjlNVGR1UFN5NEljVm4zQ1g3R2wzNlZpNUhNSTZ0alVRVVkxT0lLNWhGSUZ0ZThGYmdSVDgvd2ZIZjhIVUxrUVRCbFc1UVNsc2NjR1I4Uy9hQmRRQ1VueTJEZDB5TWtzN1gvOCtKWWhscXdoa0NmOHQ5L213WDc5MUlUdHAvUWZ1ZTdIbUFEMmUwZGxKSnQ2SlR3aDVlclFtMEhpN1BCU2piWHJZWXVXZWtHR09EejMxMUZ0WUJYdEM2eFZ5OTVZaU1uRlFXWkVyKy9YY1FiRmZoWnRYSmZ3R1BneVBGVXM0NFcyVEtmSktJRmJVMGdYTDJzWTJIWWJhYU5jMU5RY3VYUE96dnZDb3h5cVNUU2hPazVabXNYWWVvbzRmd05qVWR1UndlVktGcE5tYWVPRE5PNjlzcXlXQ3lsUkYzTVhPdFVYNkh1c2Z1amt5ekRINys3Vy95V0MvMy9LeTRpanE2TDhsdEI1a28rMmcwaVVLSjZMWUVhVlZQZGpQUnREMFlnb2M3NUJwbm8vT3JzYlJyZFJaazA5K0lIQk5mRnZUVDFoTWMyNUU3T09zMlJPTnVscTc1NEJ3Z2Z6WWM5dHk0OE5ETWZJd0ZOSlAvTFN4enp2bzg4ZHBFTHhqZ01KQUpPa1JxRDcrT0FnMGN6QUJmM0l1RUh0YTFvVkMrTHdZNmZyR1pqdmJEaTB3UzlMSmI4eXovWkluNVF5cFRPTXJNMVh0NVdmVHhIckw1VEczdnJMZ0J2SktsUjdyaG9GMlp4dWc0U2V3ZzBtNWVBSTdKU1h6ZmE5aUZkYkNRaVU5OUxCQUE3QmRLUXg5NFRqWjZtcHlCcUhOMmNBWDdyODQ0MjR1Zlk1eEJ0KzMxQTNWc0VRWlAxZ1RUUjhDUTJPMitNUEVWSVRsSnpQNm9WUm9VdVArWkxtUUtjRG1UNVF6VkNXK1dqdzFHQnJaOUxmWHZ6RFJYdlJMY05lMXFmUzNuUDFDL3JWdUtXL2pBVGpGMlNuV1RLOEY0T2FlbXBGbnlBWnBCWDE3SlVjMmIzeE14Wmo5ZGI0QmorcFZYWlFCdEd5cisydHVCSEdVTzdmblFzR1RtRnBKT2ExTURKSFF5Qlp4aFNUd3kzQ1FwRGZmNmw4aWJkNmJWdDlXZ085TmFTOWNZSzIrQS83YWtXMmxybDNSMDY4ZVJYZ3FiWGd6VzFpMythdUZJN1ZUWVR0a2gxTlFiVW4xUzliOEM2M1k1WG4xS1dHUUJwRDJESnlmWEZVbXV1WDJaNHZIQXFuOGZMazcrVzBpNFFBMjlUbGxhOHlsMkY4N1piT1gwTjFmRWl1aDRQQUN3TjZUdUxUYnpuTW1YSWR1Z3pPWTU0RFcwSUcrQitYODhtRzhwdE9nVkFxMlkxVGF6QUNpK3hmU1FML05hK0R2M1hoQi9vdHRJMlVsYUVubEp3clkzVUV4ZWJNbGthak9TZ1VWZlZoeGl2SmNhamZIakdtZHh6Mm9URWM2SU0yaWx5MDZMUWtLT0R6SVdIQ0RVdTczUmw0RXBBaGRXQ3dCbktOb1Zkb0lQQnU2Mk54ZDd2TWVwekFuQjdUZmJBR3I0Rlh5ZHVDQlpXc0RqMzJhWlA1WmV6cHFpV2ZWV3Vybkh2dWxxM2hRTEFxM3lmanhFUkJkQzVoaHkyMWo2ZzNKMjBQencxTVE1ZTk4d3RZUlY5U1FZWEFyeGRKY0l2dVppb0kxaGFIemNTRWwrZGx1bHFacjNhQ3pzMTl0QjZJMnRIN1prQ0ZZNDNrVUwzL1hGZUMxK2k4RXlpdlRPRFlCeVV6RU9zbUNUVHdNRmhzSHpCcExqVkhSUlI3L1NPbkJ0bW5QL0hobkF6UGhRYXJhdHhBVjNxdmF1TEI4K0YyazhhTkRQclhodEFyaXBoQjdFbTBiRUxIeTZsQ2x0czExRnNzODhMNitHMWdYbnZtM2Zia0V6d2tSdjlmOVdFQVlUL0JBcHdCK0M2d3Joa1ZpNXdRdzZISFFJOFhQOXNiTGlGY01sN2QyUUlOT213dWNsSUY2c1hUWXRwUlJwUTIzN0dycWJrWTBWZit3WFRpWVZ0b3NNMkRidklOU1Jjejkzb3dVc2pnMURCNVhvYmNIRTBPbGZXVGtyZUg4VXAwcWxpL3E0V0ptUEpMLzNkS3krR2dLeGVMSDQ4MkxkRVdxdFAvZHY4NjBVNUYveFRKMWx0RU0vcC9YRWRHWGMrbDduWDByaTM0TlhiWEhORU83bmpwMWJiS2Y3K3RWNW4rYVBEUFU5VDEzaStqbkg3cWxSZlBGOTZsMTJzSnJwVGRkLzhoVG5Ici9TZk1zRGRtVXNMcjdxL3hwbWNUSzlBd01JeDZ1NzloYXd1MnptN1loK1RSbDZUU2hOSmdhaDlIQ0RkL0pNWE9zWU9MMWRKVTVnMS9LS3AxYk5uc0puck1rdEVYTXhxaVc0cVM4R250S1hpdXRJYWorUE4zS3diNVV1dzRpc2htRjFOZTVkbWE3QWl1YW9NMDhSLzZBL05qZ2txaEp4TlZqMVlNTTBRSzZMTDhvdUFFYWRNRWZQdEpoWWRkWlg5VnhnczVIM2RyQ2dlbDBuUXhDV0FNclpZWWNhR01tbEIyMHhBNGpRRlhBQkM3aWVRN3VhUTUya0VGUjBxVHJ3cW1ocERMQlNCOEZ3cGxtaEpOM2Z1dlROclhsRWU1MjVvVEhQQ0todVFlR2tVRzJEWW4zUGlOQTZnTWhuVHhIZy85TzJqRm90SzR3aTdGN0hUbTA2OXdqVnFJTTUrZUNyMW90dFlEcXArN1VQT05qSTU3eFR3Y3d3S0VocGY0SHM4NDdodDB0QkZEV3o2bE16d1NtU0xURHhIMkQ2UGdweVNLemJDOXdIUzJ0bUF1WXFJdWFrWktMb2VFZC9KN28weW45OTVxM0RzQ3lVY2FLSUlBUjdveDJqdUdNTE1MZkQwT1FQSnp3NmMraHVWekxPWWJsQ0xlVlIxRDdQWktvbGtVVmFFdjN1Um9WeHdHaE5SMnEzcFhSei9RK2tId1hLTFFYbXBGczZpOU9zYS9veStmdkhQbk1IL3BmYzZveFExUDVoNHBCSGhHQlY2U0tWaUE5VlJGcmp0VTRXZ2UyZXYvVng2cDBUTElZcE5BR2NTcU9NbDdITCszL0g0dXI1NFYzWWVZb3RnRkh2ZWZ6ZEFBN2F4dXMwaFJPWkVJMXlYMkN2ZDRvWHU1bzRYaW54Yk9QNTBJR3JHdG1xZGxQaUhUTVdqTDlJK0JuOVdrTUtaWUUyQmlOSDFqQzNPNEFFTGR5QVc2YTA0WXRqNll2elc5TGhHNGplcGNRWnFScytDOHFhK05BK3hUUWxxWStyTHNXQnFua2paV3JQMjhUYzJ1VEN1VFBaRytwazZ5UjJxRlVSMExpY1JTclI1LzN1dGVXR3JPcC90ME9zYXU0VTVJYzAvcGxWY05seFY5WXpXZHJNRjJ0TUVGK1dBeXU0Z0xrRGZQeUUwUVpiUnV4V2V2QlNvTHRWQ29GRDNqczBVWFN4L2c5NzdpQTNXM3doVUwzQ1dtSTljcFZCOGVqWllyVkhRaWdiUnFsTDFMVm5LZTA2YVJ0VnphZDNFU1dMRTNCc3F0T3V1WnBOM1JsRUVZTlNzYnJsSGNoSjNKUE9EcG45Rk9Hb2V2M3NETXVGbzRxUkJIcjhPVW5UVXAxL3M1T0RlYlg3V1BaSW1qU2NKamVnVllnV2NyTnZDblFIN2lLUlRHR21lMVhudjd4Nk13aUJnZE9TV0Rrdld3Ti9wQkNxMDdVR2lwSWxQNkp4ZU9Pc2JLbzJ6cUtOVUd4MElWN2F6VVltYWRWbXloOHJZeDc3ZjN5bGtRY2JiTXlveld2Ni9zRTY4ejYvUU5XWnVzbGlGYmRIbXNGaDFXVGhKeGlSRjA2d1lDMHQ0OUpMcnV2akJoRFduWHJrNGVDTnRIMmwvY1BNMm82SXkyWU9FNzRzRkhqVEZtRDVYRFFzNTJZWkNVSFdJLzVWZHZXWWZzNzE4ZHpDUFhRZFRVMzgwUGdJcXpmSGJ2Q3hZNHp2OEVDc2djd3NqMy9zZHFUbSthNUNoUkZHT0tlcFVZdlhBNjZkQTJFS2dYTldVZXpuYmtNYzFEdWVwZDdQeHBhSGg4cHcxNkxGNXNhcmVZamFHclI2YnJ6UHdwd3BXancrOThkd3FsV09BbDRZV0prZHJkSGIzeCtabEh5UjErclF6N2NMaXZCOCtmRmkrU2dDU1hvZlRsSnl0dGJvOEVrbUdvai9Rb2dkclkwM3NMK2hEWWN3a0dVKy9CditjRUNQWjFucmpVR2I2d2dxZlVSaXF3Q3hyem4vYUY0cXB1U3dqbXI2ai9TaEVDaDc4V0laWksrVnlBTDRKa1FkM3FWWnQ3dmZGRCtWdG9YMGFxdGxwRVhJb3VQL2hta3VyZkhZZ1U4OW5zM2dueXdnZjdUTDJtUkl3OXJuQkpZMU5aRmlpU1VhOW1hOXd0VEQyV09Zck55Q0NMR1IzV3RTVklSY1NmK244QjBRMzA2bnBRdk5nOVVjSWs5WXJUMEdGVVFJV1pualNwcFZreEw4N09aMTFseU9pa3l6RFdlcDREcnlWTnlyZDE4MUx0OHJ2UU1tamRlVGdvQkgramdTWWFrcWdPVDBCcmhTNE1JMUMzQVBYVnpsazhaTUVnRGg3WEVFOEg4U2Q0RGhBTlcvUFFpVDB3ODcvMzMxdlA3R0ZwZVljZWhxMmYyNEdMc2hxYkFTekVMVjQ0UVNNOEJNcVNmWWsyV2FWY2VKM1lRSllNc1FNcEt6Yks2Q2ZQcGZveWpVdmtsNG05SWZxanZBOGtmOTJWSW5DTTIwMjFvcXNLVHNDa0xmcnlBd2hERnRIK3hyUE1ibjBneHdVUGRKYVNhZEFSOWFzbHlsOEZ6WGxwbmFhRysyZFE4SXlpcWM2WGFoUncxMHJra3diUEowcFFXTk5LaHM0amFqNjN5QXB1cDkxcjR6K3pTSHNwTFBMektwdTNkUDZDd2VEWUVyRjdpUDRObTNZT1RuNFBhcU5aVEoyUzVnNk1zelhGTEZXQTVxSUs0Z2dQenExUHVQdGl0dVU0d3BHMVRoOFFpVEFPeDhXNmZVUEFERlN3V3ZwSTBJSFhSYnVtSldsRWFJd1BPV1E2T1huNHpVZThzeFMvL0VpcExxbDlMVEZRc3Jyak9wWXQ3ZXZ0ditqd01XVnNHQVZ5aEFKOUlmbFBOUU9OK1I4STZWa25FcFk1ZFh6NzRnTW00eVhiRHNwZlpNM1NwNUU0WHV4RzBBREJGZFVxdVNBaS94eG9lSXoybDJmanJpOVRST05TYWVXN3Q2R0RsYzBwRDl0NkJhaG5EMmtINmdLWW8yVzlnMVN1SjRXNXRVNWtnNXF0N055ZEpzVk56WVNhcmdSMHQ2NG5sbW9nVDRab2duN2h6MkEvSHFMUUp0cnlDT0FEeGplOXFQaWxaSWErcDJGNHplMnFpanpHTFFCbWFvNzVIV0JDZmowQzV4ZXlISHlacUdmcjlXc0hXN01wSDVMWllSNmlia1VOSGxHejF3NVVlQndadU00bHp2YTlWTElaNTNsek1XWWdMbVRocmppWXZOcVUrTStWNDFjMVFYczVjcmp0NitrbzZRMCtudlFyWDRhS1R6UVF5Y0hkMEdRWS9ieGRCZkVGZ3Y3UFB3OUVGcFY2QUppeWxTTkRsNWpLWithY1JhWDhCUElJbG1LSVVoMlBTUUdESjE5NFgxdWVNWmk0bmJiL0dKY0tEYWlnNisvNHlNUFl4MWQ5K0dHMk5LY0VwNTF1WEkxSTA3S25LZlorT05IdzIyMW03OWdaaGl1ZVBYSkxvT3A3RkN5UTdqK1cwTjBMV05TbmRhUlB6anUwVFdiUjczY2d1WGQvZ205cmdrOGVyU0F5VHVsMEQvYk0venhlZmFjWTBYM2g3eCtsZ0ZpVXNzWkd6enN1YkJ3K0J1eXlMKzQyVDZRbkV2U0ExeDhDUDhmNUoxemRtUjREcWgyTisvclc3THVtL0pvRmtpK0w1SER6eXBsY1g3aGN3QXFBS2orTlNka2NpdWhsaWw4WUkwWHNoNlRmb3JpTVdZQnJQMDZhZzhKTzlvanBxekJpbk1oUGdhbHFyV1pneXNObWNyeVJpOE1zRHJIK2tKNTJwWS9pcEFoeXgrUlI2SWc5RXJhVnVuc2t2ckhKMzNHYklqT0dRb1ExYkxnMUF1SlFEUmU0OTBRbGlLejZjZ0o3TkkreWxyREdOcm1CWFhzd2tHbFErRmROOEcybnJwNElDK3FnWSttZGJjOGI3b29ndDNWbVFJQzJpUTZhV0k3ODB1K1RpbHdpaldsRG1MbEZ3Qk5jbDdlTlptQjFQOW1UOEwxbDRTUFF0YVlSMWJ1MHFUMTEzVmsvSFYySCszaTVuRUx1OEVlUUFtbHBUcWlYZDlzU3pNUU5hVzZyOEFlNGNBamVuckpjc3Q0TUxXZXpLdVBqUmoxODg5WUQzTlp1Y2NMQUdlQ3ZGRHlJMDZteUUzeUNRUUMrVHpyNGhucnlZczNRVHRmOVA5VkoxRHhlVHBJbnh5MEsvdDVQeVZ0UDM4M2tZclMzRTJadXdIRlVMYzkyUXRTSHlBZzNNTTF2c1Q4V3NaTTJYRkpNcHEyQ2ZrUHhKWmZJcEdIVXVkTG43Yld0Tlh4VlNPOVBoWFZ0SjRJRU5NeEZoTEpvaU80THZ5a3c0RlZ3WmJsY2pDK0lxeGNZcGV5NlRvMTFEQVBDYUwxVzBjQ0xNYVlQTnphbFMzT2VJcGxPNHJnOW1QNHhSMFk0UTNqcjNseUJOUkl2SGcvajcvOUErajZsV2tkMFV3TG1JWE0weUVjMXZPVjN4VGRVWXQwSDVrNzMvcFlNNmszK0liSFRva3B0MWpYc3ZXSVVJN1cyUVZlMm9KS1duL2JYQW9keFFTVnUvZUl5bzVRZFVuZGJ1Q2hjeE5waHJuaVcxSXk5WGY3aTYzdFVPSXRYUllGU1lITThSdHpTdVNUdG1PNjVpWXlnK2dxNHVxN0VsYzBGeHQrckdqa1NVakVrRWlXVEpXZzMvVmtPVjU4NWZZK24zOVd1d3JtS3MzRDhIVFFGK2tZenFlVWZCV2ZjbFZXdEhxMjZZdEpLdnBVdDBreDcyTnNPVUNHSThBTnU5Q1BPZmR0SW1HYks0UEJLNkp4bFpwdXBKMlY1Z1FyUTBtVXRseTVWN0srOVlZT1YrU04zeThIWUFpS3pTdWNJZ0lQOHB3M2luTlU3cndVVHBUdzZMMlN2d2U0VXJFRS9YUWtSQ1NnTEw2bmRSSVpxLzJ6aGREajZZcDFTbkVYR2tBSEMwMUREdnE2ZVhPV2VMK2dCZjBrdzhLVjI1eGhiK0FZT0Y2Ky90Rlc1aHRhdE94aEI2UGZoNVNKMkU3UnZkT2xWT1ZlaHk2dktsK3JrZGZTVmx0WngrZnhMTkVQRUtGdFpPTjliME45ZnlBZDVwbmlmaWc0TDJjWkpMMTQ0UVYxZmw3Tlo2ZnVTN0ZHTHNvLzN1eDV6UUw4NDE1OWFJT2t3UUJwRm80bjJYK0ZxRXQrN2YzekxZSThSdXROWTNYSDJuRkNENnR4TXBIeVFEWGdMVmhKdkRKbFM3Wk1mUzFpenZ5NUQ1TW5UMzlvbWlDNUYxc016VEFhOVJTVkRnbzJaZGhzZkZ1cmNPekRqcE5mSk9nUEZvLzg1OGZHWGZMMjR4bXh1ZENMSy9UQzg3TDJWTlRUT0p1QlBZcHNMM2xPL0JkWXBWYkszb3pDZGxvTVVobEphNVdWcGJSTFRvQ29mNGUwTUMveng4QjB6Z0NQWWNaWHZ2ZFQ3V0hKMUxveHZWUGwzWEJJNDBybjR3bTR1Y2pBUGJDUmdPdWZ5Nkt0YU9nTmhtS21CK2V3QU1ETi9yTmdEd25EcmJRcnY1NFpaL1M0WHlMdnJSUDhQN1pQbzJDY1liVzVIdG81elRxbEZQSXR1K1hxVFBiTmhqcXF6VlZXL2FjTWtiTmFYeXBJRnl6Yy9WaGRGTnI4L0MvNzZsRFBHMVlsZ295ZUZCUkpxQVlXNDIwVmpaRlZVV2gzbDAvUUFvT29xLzJ6YitiNVNMckliYUFwOXVVV09XTkc4QzZZSnBqRFlDelZHZXZUem14UkNVb3kyOExjc0crN2RoWC9vSnplc216Vzg4bzJRTlJCSlhtZmxuUkdjYmcrSElmMTBlSzg0ZS9vSktVMkNLR01NTmlHSVFTM3REdVRKT2tRRTB6QlFTejM3RXZkcmhGWnFJNTVQc0VJdHkvRW5Id1RJR2Y1WU41Qm05ZEViUXg2KzIrUHd4a2cxa3pHQ1hUQVZMWDhuU0JUdUJsNEZsUHN0ODZzcDRtd0dPYzU4UGltMkg0R083VFNaaC92bDNWOTVNeHFnT1RnYTRRSTJNQ2cwelZLSHVaM0lIaWNDU2hvbXVqRE9vYlZDeDFVS053dGZhYnB3NGdhY1NYckROTGpzakNOa1ljL0VST2trTnJ3YnVDYW4wZEQzNUdNWHVIUUZsMCs0SDBONC9QanNhMzlyTkNOcHAzU29kSHhMa1ZoZ3VyYnFqVStEVThSTGxkcFRaRmJDQ0dla0RUUytrUnpReDhjZEQ1Qllzcm82K01pV3pvQkRxTjFGZDV1WnZxWXRlQ3VYS1RsNTNTdVV3UmlscmIzNkNtd3pYOWhvUHN6RGRVUVRxOEpNVEo5QlRmQzZ2U1VZWmx3QXlpUEhZanpHVmMwK0RCMTVaK3E2Vk9nMk5UV0VRUGkvN0JLWEtFNy9GMU1yYlE5cmxRdjQrZWkxcEt0NjZ0Q05oYVFUT0srZzVLajdsSGFjRVdYMmNZMkNLWSs0MmQycGZxNThaQUdHL3UvNW1EVE5xcDNldzdpY2FHQit2dHFyUG1CR0ZiMnF5Z09tbElMdDhoMGZGVlFhWFRhZW9TMUhoZ3Zuc2NCWHpaZ2Z1VWpQbkRyS1oyV1AyRS83TDY5bHVCYkxEaWVPcEJRanZOMkVUVWtnYm9oeUttUVA5dkVwalRUZXJXM2g5SWFOMklxd0J6MDFNbWtEVFowNkc0UWVPbXNwU2J6c0wraXVPTWluT1AzTWRMam9lV0ZiUXp4NVM2YzFWemZVaGdYNU9QTlN4ZkkrUS9ld1FnaW5lYUdBVG90QVZaczlwSkxGRnI5RHNMRHFYdUlWZWg4cXgrQnd1T1hQUU9oeDlHSVA5OHJSSVJqV3pOdzNSRXRpRURQMEV0Sy9ZMVRvSlp5bk5UdFdmZDZGT3l5ekJsY3FCNWNHSnhtbVdrV0hRbWhpWENTVmwyTnVMVVdlVEtWeDRxaUxhV0VDU0NxOHQ1ZCtEWWc3anhrUUo5VDJ3NWE2eHR2bGlHMUszbmhRVUhaVkJGNC9HbHMvUjdXa3dXdm9QYjFtdU5GM1cwY3lrcUs1a2J5YTcyQ1ZaeEJERDVjeTYyazNmZ3RHZXpvS3hnazU5N1ZobjEvclJ1Q2pNOVNpK2tSVkNxNnExTEptWXlJSjNpRGxuR2VSWHp4MHdZQlJibnF3TnRBTG5HSUt3a2NiTlgrczd3MjIrQVdGeVdndkJpMml2VTNndXJxS3pHVVhrZ3E5enlnN0MvMGtJQ3UxK2NadnAzMUFlcnlzUVRsSzhEd0VvL0g1K0x3bnN3MUxoVlJTT0dnZDRYOTRvenNQbXVOQ0xwNjhDaWtKdm5hajQ5bHRMcitNb1JLVjRnV0RPdDRQd0phMktnZXdnY3JEVEJPV1ZUVDhmTVRERlpDdXY0eXRLdCtMdU12cUFLLzBjS1dBb25hNjg0R04rdmd2WEluYm1vbnQxQWw3b1dnNmU0UFVqcEJwbktnWFRPNWQ0TFJ5c0xLWkp0cTQ5VDdHb2hFa0k0ZVBjTnNXcG5iSjc2YjFIZnFTNW1ESHVKTGJXd3dqN2oycEdXeGlmdUoyVEJnb3h3Ulh0ZERzWDFudUdlbk9DZFlBenhuZk9uRlRVaE9SNVVSalFyMDlibTRGbDhxaTd0ZkZEQTVnbkppVzBmME5VL1dtc2xnUXM1eTB0Ym10VUxHaUFQWHFUVUJPN3QwMHhNYXFmV1JUWEJ0UWc3NjA1Y2h1V211U2U3WEpONzc2OTg0dTMrcUxCNEI0YjRVYzcva2pNRWsrVWhsUnlFQTRWcmxuVkg5Zk9oeXVlMVlWdExiWC96NFpETkhyR3VpdVAvTU14Vkh4aE5HUUpZN2YxWjRETktqNitlNE1GVC9zQWtxcGZzQnRWd0ZsOElLVDJJUWF5OTNVakRjaFhWNG1tMytIRkMwbTUyUzFraVhJWkFGRUlQOE1MTUF5VXJxYlNxTWRvZU5VZ212YTFLU0Y2djJtV0p0YVhnQTJkcm03azhhcE1yL1ZMUkNSRUF6RGJIUjVRQ1JTZHdLcFp6L3hsNVRINHNZSXQyOTZ5L3ZwYUovTjU3RUw0LzRwRmY0YWtzbTFvRDgvL2pneUV3R3lYUDNmNkNzT3h5WTB6MXhrNXpVdXZzb2UvQndqV2dnZG9WR0ErYmNVSnZxRkZMZ2xIclQvUDFTc0lETkN1ZWQ2Y0R1Z0xyRFFzVXVWcmlVWExMcnlGc21YMWFCeE9VdndDd3UrOFNVWlpzQk1GNENnNk9RM0M4ZGdVR3RXbURpMURldjFXRDhNL3pmeFJyd2MycmY5MzhZeEhsRS9FdnBPZkQ5QUgyRjZQNVREamNsV2lOTjFCb2tyMG1MSE40aHdvcVkzbG5Kek9hNGxDcVArNnVudWQ4VUIzbk5hOW52RTZwYjZReWdMU3RMZ2dhRk1JWEkwcmdGdFpkbzdRZnQvTVF0Rm9ud2QyKy91ZEFwaThuQ0pubDdsMEVYTHkwWlBUOGl2Mm4yN1hnc1JJQTE4WTFSUFFKU2FtN2hadnByemNudHdkekRsNDB2RDNDazBQeDY1QlFUYTZUUElOaUljVGMyenpwTGVCWStXWTJmYTZmb3BIVGw4YUF5UUM1VWhEMWptTk04TW85R1JQVzZSM3hibDJiZWRiWjZIUnVhc3VwU0tnRVM1NGdvdmY3Y0FrSlBqbVA2YWxpKzhDS0hJY1BoWCt3QkU3YXRpejdRSDFxRUxrU2VueFpoR0JpUTZHWXE1WllVbU0ra2kyOENGaG4wV2xPa2swdWRkdnFiZlZDZWowYk44T1duWnJiYS90bndhZEJKMVhFM0FVM3FVRTZXSzVTQ0doRDFDSUVMckdLclRjYU5sWUI0NjFjZUE1Wk84Rzl3dFlIOU5ub0pDejFlckdWWVNVYWJ2MUh5RFBxd2NhZ1RHMmRneStOV1VtY0czYllkNFVWSUlRQlNhc2pudncyblNteUhxUGY0TEdwUjRpQ0tZRnVIdEk5Yk1aUW82VDFReW5yakRHZHRlNFhabHNmSmNDNThKelJtUnplYm4wQjVrZmV1WVErQmY1dHdDc1pNNjhVNzJWOG1GMzJ4WG1uSi8zTzRHcGZmckZWWlJZSUhtb1M3Q0U5VXFoR09lUXByQ3B6WHVXNmZ1OW83aFlzblpRb0JsUFJVbVp5NzlsKzN5Qi9ZT1ZmZkJ1MnVsbTM4cjVmeGo0NW96UGhXZVJneGZJZW05VUcycEVnUU5BSS85RWNxdDNxc0R6TytvcTR6MGxENkF2UVlBN1JZN1Q5V2UrQXhFZllrQnk2MnkxTW1iMzdlMFlWNTRlRk1lM3hLQm9UOG5SQjhXdHJQbDZpTVhxUE5EZkkrTUt1V01CTXNGdG5JSnQ5clBoRWtiUEowYXBBQUpkb3h0akh5NnF4c1pSSC8vYnJCTGlYYkpDbTJTelVZeitGNERta1NNcE1icEdpbTVLd1VRbE83QzROeE9GS3ZQOXJqK1FSRFpPNGl1T1A3ZFBNY1M3cndaY2tEWWlJTHN0aHRuRE1pRkErZ1dHRnBJM0wwWmpOZjFEVWd1OGZlQWFZMTVCcmo4NE10Wmk1d2RJalNsNHZPcDRXZmgzVXZSVm8xNXk5UWsrQkRhRW5qWDQ4SlFwMTZaRVcvR2RpZGtQMXMxbzFaWmp4OHZWNElSNVZocnhMU3dQOEs4a1IzNHNYcUtqZzR4NENxajUrbW9kYnJQMCtrNlpNRDVUMDArZVV1Q2luSFF1Yjd6TW9FWmtIUUxQd2R6blJWUVBuZ1ZoaE5KSnFScVJSRmhLWkNzclJqWVRsMGJJZm83U0JjOHJDVGhSM3NqWnNDQzJPNC9abTJKcXlCWjRoV21ucDJrSTVvdllYYXY5ekZVbWxOMnBwbHVHR3RNWE14NDFhMkhKcThxeVZtdDZxZm8zcVlTcG0wN0xSNk5GNXF4bSt1VHZmUzNZVndnb2M3eXdVQ3l6SW1zNTlaYlpNUE9idXUrNGpKcldQY2dXNHoyeVdlMlB5UHByZkJhR0lPaVlyUWRyZDBUT2piRCttOHM5TWJnNm9NdjEwTEs1SGFUTFRMbDVUR3BpekpNa3FnWm82VUJxRlhDSGJ0Q29mVTM1VkIrcGZqeEErNzhIRURYeHFPTnBWUGlOOHZBTmUxTldtY2JwNUpVZkt3VkpyeG9DTjlxS2toWjFTb0VkdTBPeHRjQUtPUUVpU0dmRFFlNnFQeFNYZ1JDVTZuU3hzL29hLzF4SHI4Sml5ZnlkUzRJTTlKa0tOODM1dk1QZGZyaUtIRDRoNHBuanVBMDFsQk11Mms0eVpxd1QvemVKTnlndWpwMlpMRjN4TVUvaVh5UjJmVzg3K3ArNi9wZjRtRU8rMVhuZlhDR2hyeUFmUTNYeEJEd2NoQTJZQ0lNVDRQM0ZoaGZJdW54RFJKUDl6ZDR1ZVpDbjh5YzdqVjdONi9nVUZwRjRsTHZkQXJtS3ZIK2RyL09DRE8vbEdmTGVtQ1dnTmxMOStieGxXMVBNTGJKMTBEclpJM21ocW4wZkFyekZqNmNTei92aDI5ZWh5WDFNczEzRk5OcENzODVlODNHaHArTWRpdmF4UUtQMHpmeGt6SWNmaUJ5azJSUXhSRGw1VGFWcUhRQXVRaTZ6MmFDbkczV25YN1JIWnRvc2FiRXhYaWtJd01qY0dHWGlORXFFRjFwWGxJZFRhQXgzdFlkMjArR0Q3U2JoQUEvQkpOUTlGdXFCdW1nOEo2Y1psRzBLUGtBMzlEaDNxcjVESHdGaHlkbVg5cEUzVWlTWERnN3hoZWFXZXpyQkYwOWFzOWREbGQvdDdEZkVFSWtsVjVpVytyWFJ0QXNCSmJySFpsUDVuSTdFd1B2aG1QT1RYRW5uWElwb1ViZEVoYTR4dmJRMWZWenQrOFZkRDd5SWptVmI3VmpOL2dtdEdTeUF2ejcyeXZHSDRyT1RobHBldjZkbzZjQVRMejNYVWRLWGVsRjg2ZW5GcEhMZUlmZ1FqdUxuSlE3ZGFaeHZiZFArRTkwUmIrRTI2aENyUE11MlFHOTZuT21NMEtzdXBWZ3NFZFZnMlFoYkZxZ1R1TUp3TGxCd3JBcG5VYmVLNmR1K3ZNZzVpbkNGNHpWa0dWTml3QjJKbXdHdnJQWThZTVU1U3Q5alVnR0hwUkplZmMxUFRYQjh1c3dtOU53bC9pTG1JVFJ4VFpFd2ppZnphYnFSNkR2Unk3eVZSU2tkbTB2OUxrUFpKelpSV0hEcVU4eXBqMU1pM1dybVVpeG42ejREYVFLMHJVMkw4M1NLYi83aXE1aG0rZ0Y3WXZTQjhaN3dCbXZ3VEEwK1pVYzZsckJIUE5jSkorNE5renRvcmtvVUg1OHB1UTJSUTgvNldYS2VnRUltdHZzS3ZVYkdWTFJjeDVmVTNqUXJoUUs3N0s1R0F6Z056MUFHeHI3czRyWldscjlWNkJYbkw1MU52MTFaeEg1S2RIZlgyU1RpWXFaWm1FK09SYzkyTld2TVVWVWovVU9KY1h6b0ZQSXRCdnAyZGxMUDd4VHBkMnRHWm1iSUtPTEV3bU1nRjFTZmZBV2Zacnk3a2xmbjFqMTRDcGtRRjhTQ2x5ZForV2NsaE9wN2R6K0FRbmkwNWVvVU90ZmJOVGZxYUtqekU1Q2V5TnN1eWFkbGc1bDZHcHQzWDVpNUpDQjZWbjhWb3JOaCtoQU1KS1dsUE1YYmQxVDVnWFE5bXFha1VlaUQrbGExUUxRaHlXV0paMVhUb2ZNTnRjRDQ0UHYxaFZkZEljaktCb044ZThleGRBc3A3ZE9kUlQ4NU40dlVubENmY0cyaml4TTR3TUU0dS9keHFaRWlyWWxKNFkyWlcyQ3pSV2VjazMzWDZPNDQ2eW4yTnhwVzNRbnc5NG95QTZ0TGhuWWk3OHNEVFpPRDJTanVxVnRpY05LVnRKWGQ5b0lmRkJBcEhWUE5Kd2swZ3Q4aXFrTGlNcytIcE9TdzlsWmVNZzQ2YkZrdWZRbFB1R3hGejNFejVWTkZsN3pJWkZ3ckZtd2h0NkxaQUl1QkZqaTc3dDRXbFNrQ0xDSDRzN3Q0RkZrb3d1cTk5SXVzSWM4TkpSUy9oRGx5ZFJ2czM3NjNBR0VXNEFKZDFwZzR6S2xDdnJ6RU13TTJoUW5wUzlvVGc5VllldTVFUHQ3QTVhVk1EK3dvTERYR0hFVWZTN2hoZ3JXMDV1YTZlRFZBeEJva1VOWDhQR0RCby9UVVBwWG9nM2FiNjhNS0MwQUhLd01DOEVsNm1ENW5RT2F1ODBpbjFHMVhnNWpqVmhFcWRDeHM4T2wwSnEwYkZoNE5IZ1RiWTBzc3ZpZTJHMnFQLzhvNTlJWGR1QlQxMVROYlhpdE0wRkZNN1dUTzFpUTRUa1VaMml3M0FrV0lieW1BZFhQUm5CT1pwci9heVN6U0JlN2lVa2dpNU5pODRlS0EyaHp4WXRYUVRUZFU4WWpGZnRiRmdCaXNVcEJuOEFHRThqM0hxM2t0V2hJYktzeFNHaEZsQ1g4ZlA1a3lBd0ljd3lzQWhGbytwSU92d05TYjhXaVNTeWRzWGdaVEUvZ215VVg0Vzg2eXU3N0hFcXJHWmMxYUdveDFGVndiNXlybEgwSG5GM0RLVkJMS09BdklYR3pGWnQ5VTNYMWR6S1VzYUU0UjlrUjR3eGdoeGNiT0c5NDVxalNKVXZSNXVtc1VHTmVCK3JUNFc4V2laNGUxeEl5MzVma0VBRWZtQnNla3NEdTBENG1yaVJ0WUVpVmgrczVveDB2aW1nSm5WQ0hlZ1ZUdEcrMWJBUE5tbnd0Q2pPVU9tMzg4MmM1M204dU5Ma29RWXVvY3dNanJLRkx6amp3bnEzeVpZdjlvMFlTTzdWTU10Slh2OVFDOFFUc3N1VHUvMm1MbWVUMzYvVXJmSVMyVURIRnBQN0dwVUhtZHBWZ2N6QjIzUld1MTZjS0ZJUG1DMyt2K3BsVjAySmJvZmRENStOc3dvZW1OTTNzU3E3c1pOZlVSQWlJZzRvb3lLajYrSHVmd0tVZzRXUXF3MG1vL2lDd09udWFKM0RyZUZtdnVPalBqZnVUY0dyRjZKNDZ3M1VpWGVlVFhMV1BPYTJYaloxTCtPdzNXMXBhOXdHUGovZE52WWJtaG5kbkJ5ZXhXS2lRbDZuRFMvQUkyaFpmOURMSnhIRU5wMmEwZmVZejJRVkFlS1NDK1gzd3VRa0UxMUh0OXhoWGpNMUI5aERjRHd2SUNGT1pJMCs0SGppTUhRUXoySm9GRVhCR1NvRzhqelZyQlRkdGdQaVkybTRjd3RkY3p5VW14d09QM29saHFEdzRwSjFKdmRVMEdCM0JRWnVrU0VBWHAyZlQ0djdPbUt0OUFHZ0V0SFFVT1VWSHlpT1JEZ0pvRTd0KytLd2VodHoxNXE1SWxqdkdtbkVDVzlkampXMEpxbjFLVFhHc0FQMFN2eFg0ekthTVRtY1dPYmR6T0JtTUY5VGFNcGJUOUdMV2l3SHNJU2c0eEVXUlFtUXlKWXlGTGZveEFUSFRUQUNvRVgyRGRGeHI0NGZDc2JtRG1idTI4YWhkd1BZcHVUWkdBRGoyd25iYTI5QUI0aXRibCtHNTdwdWIxc1F6cW5ucVJDK2NRb1lmOGZwY3NONDdyeENWYmhEV0dGd2FmS1RydkVqRGF4RUNWYXVHenY0SWlzT3lqR3d6N3ErNTBtbmJLMHhXY1Y2UHE0TjNaSGF1Z0NYTmpUcDZBSjI2WmdjaHdrL2R6SWdLbkZIb1B1QStQemhIT2FwQ3JzV2dKL2pSOUpYVS9NeWczcndwNG15bHpjOTJqaFRnWVM0RmZHVmFXcDQ4VHdwZVhFNzgzbEZ3RHRXdVJ6YTMrOC9TeFVZWHNGRGRTb2FwTmp2M1J1Sk42WnJ5RFF5d3ltbDR0anc4UXZPVStVK000cHY4MWRhOTFESHZLZDIxa1c2UmZCOEF5SmxsdHlqWG0xTXhDRUsxWjJwMzAyVVN4aUkwQUg1NGp5OUFFSkM0aXMzcHJWZ25vMzZtK3E1dUpFRjhub0o0cTBFdVM5MGZ5L0p6aWp6THk0U1RsT0RpYjd2UnRXSkRTMUUzNU5BRFpuUkR2RmdjZWdaY2lCTG53M1pmMWZyN3AyUC9IWnpyM1o1VHJWOXNHTHU5VmRPd1prdzc2anlOeGwzZVpQSk9neittN0M2aTNaQ3ViVU84N1JhN2R1Z2w4N1R0TE5LZFdnQm9IY1BSRjFqOGRjU2ltbm85dVFsd1ZDNS9vN2VhbzVzZnhibEtUMjdOSUxUS1UxeDVQM1dLeFUwRjJ3WlI1YW95UU5oRUk0T1NMTGQ0U0RxeXoxeWtYZng1bXYxMSsyVmF2Mk0xenZXTW1rdVdTU21mU2hPNXppbjVTOVMxRmN0eDdOMEZoSkdiczdVa1FKaURKa1dMNWxmcGFzQ05aMGtiSjRGY0RxT1JmQkcyYWR5THdyVnp3L0VneFFIT1hxTFBSSnBTMnorSkk3OS9ZVzBOZHRybmFvSDFFNjd5MnZhZGJsY2tjUmsrYTFCSU4xeG5qeUNUNEs5VC9xUUU3U1VvRFFSNnhqT0hFMWpVQUtFK2Y0SGlzSEwyTiswSUJGYlNsYWszKzlBQ21NY2JneDdsaS9ENk50UDh0K1Z5QmNWMkh5U0xTN01CT3piS3BwZjRqOVY0QlRFM1FBUmhSeEVCVkMyTy9SWGs4ZWttUzBkUHRTS3dtc0ZLdjhMVWJLaUx6cDRtU0YzWURFNHNtQUsxK0U4c2hrS2tqanJhTU1FaXJLUXFERVF3V2JVMDJGSW5TTEI0eW02M01VUW03Z1d0bFIzeHYxOTBkeTMvYW41MXVwZGp0eXJkWXppclhjK1NadG1Nbmhaa21PQnFwQ1lSbmZzcSsvVlpWU3I5ZTVQQitqZ3lkUzU5NTdEbXQyWDZLaG8zMklLa0tPb0o3UTVrWS9ZTHVyYms1LzNNc0Y2Wm1lNGhLRit6YVNHeE1nUkJoNFFEZEFVMlg5V1Z4eUVORXVyK2RWcWErdTFxdGQ0UFFXdVk1MGhleXRNbHZBUzJHOUpQdGo5cFBMQTZHSllscTMyOG8wMWtlaFJXWU1RbVdPV0svcGpoZmJRaVdrMno3d1RsazR4bjNPVjFCZm0xbE81c1VSZFlyaThzNWNOOGVnZ2VENG55eUJ1czM3cU9JcVRJbWZqTUI3VWcrQjc5V1JDSVdPMk9kaDVoYXM5K0pDcVR3ZmZ1c20xbnlhT1lhbkp2WVhTY3NsbHdSNHFId0E3ZXB1YWF3NHRISHhXSkFXa0lIQm9mdjk5UjFCRGNSb3gvRi92anBrQ1hmOGdHTm9paDJ6dklsUDh0TzJNdGxsYUZDT1FNaXpKUENsN0pmZG9mSVpxM1hmZG5pSHBTRjlHaC9CeDJteVRjUmpuZU4ydldub1VFZU03c2IzQTUwaGVCTWxXNStXQ1B0VUd1aVJjR3hBc0NXMHk3eEY4eWVCeWNKZ205c3NCeWxuV1ZLZlVjN2dVOExTb1dXaTFqd0tVdGhjL2JLSVlsUlc2U21PZ1hyWjVNM3dFZERjY3dNS3pDZkxTcnY0MkJGcTc0Z1p5N2J6aStZajEzaEV0QWJoQlFJUDNwc0NBV2F0ckhLTXpXTzJ3NWt0cEViUjZYSzZsNEdpUjRNYzk1NnBpUUViTmY0ZlNsc045dzlFQXBGSGFQd3V5eHNMUUhrd05BdkMycnNkVGVZV0h1NEQrYkk3ZHhRY2VjcC9iQVpsMHhQd1VsYVVjUU5OaFZOMXhOMkZmeWZWdUFNTjRBSVMzTXZ5b3o2dmc2MVYvYnF1alVlVlVhbTZBNko4dTZGU2FXMUY2YVFvNWdlZlZwZTNRbzUyM1NDbG1ObVViQms5QWlObmtUdm8rWXczMDh2WmlXN2t5ZDdDcFErQ1U5RnBhQ3BzOW9XMG1abGdXTUFrN3VSS3ZQNlo1NFFZeEs5YmkrUno0SCtrZkZvOC9Dc2M3TGdkSWNSUjdiSUZ3U2xueUZFazE2MEdoNC9nZVdtcEt5RXVKbjVNNCtkVzJ2ZUdhZFBIWUxKZWhOdmF1R0I0Z1RLWmRPUWFERU95WjVjOVRjTTAzT1UvOVAxdVV5SnBrVWpMaDNpMGxabE1aemRVVlNaQjFQOVkyUUl4UU1yNGowMHRjdEJxMHliWSswSEg1YmtQSTRQYS9BcXZDa1hkY1RtSTg3VkhFTW1xRWoxQXhhNytiSVRRbnZQVnNSVWE3VkgvZnhDcUZ6RlNDVFVKVUZmb1dqOVYyajdxTzN4YUl5N2Y4OGQ3QTRPSlJBTEU5ZWcwYy8vTTdBNVgvNStwNEZZU0NFRFhtV25oWVZzZjVhRWFPcHBrNnhUZXR2WmM3aElQTlN0R05HbXdHSjRVNUluVjBWcTRzK3VoeDJYTlBPaHk0ZXJQRXBqNWYvUmJpMS9ISnpsREJDaW9aLzZNays2dUNFaUxoQkd5QjFpbWoyYm5oVGRrQUZ5K3FDRnlDTmpJcXBOa3RFeUQrVXkyZENveG1za0Z2dGozZmVpNmpLamNqa0JleVBGWUlmM0dFMitQOG9PempyVGwvbkcxaXcvMmZneDhEVVpEcllHbWpmZTlwaXZ1TWxGWmhYdlZJOHBxc1UxU0hiUWhJeEd0WlJubG5YOE0zUEhSSnVQZUJkWFV2MFo2eGwxOHBhbzM5R3h2OWhwZU90bWZ6OE9VVWZsWDRyOVprVG1sYVhQMnlVUHJ0dTdiY3d4SVIxNnNieUVVSm80eXlNZncwYnJsWXpoTkRLNiszNXY0V2cwa0dEdGRkL2tzOWVZRmlXcEpXeXByR1ltYnp6ZHlUbVkyMEtXWEU0WVMwUWUwZ0Y0NG1pYVNOeWNDZWhZdGFjbzkzR1FvTEJjMGl6SitqV0tIU1hEZXR0SWVFWXljd05WVEJhaE14NjE1MWRvRm9id1FndmlneG5CdmpkZXZTV2NHR2k3ajVPWW12NFFVRURSRG5jbDlMM2lIb0hPbzc2RU5WYmRxaW1BcXZRWHpvcHdHUnc1TGZ0MDlOT3dFYmFSMUZRbytnNllwWnJ3djF1RElKc0M2VjZGZTZhWnZ6ME1jZGhZQ0Q4c3h5US94b3JjNnljbUYrVHBvQVFVa0lwaXpOR1Y0eWl6QXZNdktiTFlBeVpDMmt0M29SQkVkdzYrSDIwalpiK01iU1lsMUtaK0o1M2FWU3lqUE1CNkZCTUNwRUNnTlFXb3dWSkVaZ1k3LzkvNUpzQ3JXS3VMZnlxWU0rOXhZa2poL1NyRCsrUWh2azFOejIzZGNiNmFVLzd4cTZxYWNyRjZwQmsvYk5vSXRqYlJud1RWdGFkaHhRc3YzdWJPQmtnZTFweTM4VzNvMGRZaTlJNDFxMnppazJTbkliTlA3alJZSklMUVZTdVMwMXdPSUVzM0Jralo1VExHeFZwR3Raa0Q5UGFMZDdiajlrbFNXVlByQ01DSDRQR1RtR210N3kxS0oyV2RxQkdhdmVRRVhFNjZ2T0N0QXlXZVZtRkUzcU9DdzdITnhhNDg0VERhZDJ1Vzd2eWVsWWc4cDVjMmRTVzdzMHBpYVVVMThGalA2Q2NsUHdWM28rSEcva3htMUJJbUU2T2loQVdVVFZHRXBGVzZuL1FiSDRBN1J4Qlk0RGxKN1MraHBMakpnQjV2NkVvMzlnMFhWenJzcU9Oc1RhcThEU21kRVg3cHhidzhIVStkdk9mUERvbDdKU3ZkM0hPK3ZpT1B6QjZZM2tBeDBTQXVWOGJOeGFSS1ErNHBESjdubzhOS0I5VCtINmk5UWpPUEZtY081ZmZGS2hRUXR4SDIyekxXTHFWa01mbXZLL2RzblNOc3RqMnltbXplZ1NvWWpWdWJZSW9SSHFidmxHelNac0VIRnFkbm1HYkwvQy92dEduM3E0TzNYOVhEL25FWXBjeUEyNHNocTFrQzRzWDh5ZW55dEE0aWlmRHRwN2Y0a0Vzem8xay9KTDNDS3BnQWhwSGVNVVNibmU0YnlkTHhBZGx6UTZ1bmRLYmtTSjEwR3BEdHdXV1NvQndWOEVUdERSaS93a3BGSzRyMW5pNHFXREEyUkE5UlVUbDhqbkFrTnZqTy9WaTYwd2NxcTUyRkUxdlFtWFVOd2VpMVpITWZNdUw4TjFacGZDY09wQ0d5M3M1b20vSGVsMmo5bGlyV0tHRmg2bEZXdVBCeVNzS1lEdHZVeENkOGE1QVk2T0NRaFB1cTNDV2k3SmR3dDBvdC9WWFR5WE54QnEwS092ZG12dm5SWWVzS2w1a2hYQ3RlUDlBRkxaNndKT0tydjVsKzJ3SUpPcVBGY2hFekFVUlcyNUg4a1dmU3RKanpFV09XTlJDVGUwRXpNMHBxSUZkbW15UmpRSHR4YUVvQzZtb2twQ0t6Q3pQRDlBazRkbVZNQmt0TS9hUENrcmJpNDJJVjZHUVRSWWtIOUNxblFKbWtSVkJnNEF6NWdCR0JEOUIwNGJKSmtjL3JsRDdMVTVjbXpsVXpnTDh0Uk5vZUlPZ1k0T2NZTEp0TUlzZ3E3b0pDR1JRT0hSOTk5RWVLYldXZVJ4cXcwNGdLS0laNU40Nmt4NFlUc2xaZnVsdXN6TGZURkVoM2pEZS9xeHhPazdvcjJTYTlqVEV1aEpZZ1IyVkdOWmNnMjR2RjhyRFVxZEgyWGZyWGdrbENoVG1VekdBQVdRU1BOZjJHUE1SQ3dNMUZGeDJQRHFHT1A5K0NISkQ5dEIxM0NUTXlRNU5CYUlybXVVREFaRVo4RER2ZDhGbyttTUlObFZDeFViMXRKRVRrcGl5R25hTmpwZ2FjREZ2RjZVSjhjaXljT3BrSnZoRVA2b1dRUU1qYmVab3daa25jenBrL3hCOW9kTXdsdVdRNEdxSjN1NEdPeUJvMnA4M0xrYTBQMFliOXVHUFEwQlU3RVlGRzNoRFlQVThEc2xydkI3SUt6VERmN3ZtSUpJbWYwdWtIRURGeVovSXZUVmkrZXIxWnFCUXZxSDh1ZnEzTUNnaVQ1dWVsaTdzeDRqdVBtZzFiNHJITlQ1dk9td1BlL0pTbXRkZVNEWm5kK0ttT3BNSWxNTHl0OFlTemQ0UW1nQTJNZTVYRVJWeTVBNFRsazVZcFpLeHp0OTRxRDFRTGRMakNzL1B4RU5ZUWtPSFFCNVkvanVSc05rR25rQ0pUTDRtYmM1Nk5VUE42ZUhrR003STc3eW9GMndKSnR0UTNmdXZZdmliUHVDbGJuQnBJUGVYNmJHQldSd1JWWHdvWTFwMXU1TEk5cE1kSDNsZUZMeEFzZzlVTWNkdEJjVm15ZTlNT014Q2c5Wk5aRGFaTTQ2dVZFK2d3VU9WZXhuRm9VcG9Ya01JNklJaXpWTUZ0RmRJaDY5Q090MlZ4SnpBejZHcFZvYkowWVFSbkZVTlpOcHRtdnZoVXVuNFVrV0VYWkxzSjdFZFV3WVdGMHpHL3dQWkkzSHppaXhqODZkbTBnV2I2ZGdwaWpLaFozT0xTY0lSNmRvYS9Pbm03b0NQUHlpejE5UzFLNkthSlNGNjBLbTlTcm9aelJkNmh5ZzN3M0xlZUp2V1VBS0Jmd1IxZnZIUlVyZW1laU42b3lSbVo2WGxPZSt0YVQ5cS9JSlNhQnZhRGFMaS91RWFXaUxWNHJGTzJlMi9TSlJpTlM0SWx1ZFdZTVBsd0lpVytWZ082R1Y4TXFacjZKZC9NdHYzdnpYa1VSWFZVakRFdkhoa1JMSGIyYlJFWWU2SWJveWVXcVJ2Ui9mMitsa2k0ZExRR1pWTVhobEc4c3grNTN6N2t6U1ZaUmxtditIalMrNEswZ3JWcnBKOENGTkNGWnVlYVV6RnJoSElKWUZxMVpLeFQwekwxZjAyMmZxTW80azlweEk2ZFk5U1BlcUhYZnd4SEZRL1lKaTYySE9Rd1hlVmE0ejdUUVdFeHVIREhtYlErNEdid2kzaUZwVUpweEVYUmdqSkhwM3J3UmliWDhtaEY3QVFMVmJCZ2ZaVFNkY3FxMlJDSUpZWFZnTEJxRFI1bnJkajliMmt3WlRSaDdtRHdKZklOT1JPTGo1bFpJQVFxajRNdVlQanJJRTRxazdVQmNBbkNXWHRuTEI4bnVaZTNDenpwMG1HYThxOHBuMXhGOHdHcXJNYmxwb3lnM21NMGdRZFo0TlM3d0cyMVNMU3NoK0hGNHpTS3dXTjNHVFZHR0ZEUVZBdVZ1OFpMVmgzZnNNcnBNcy9aMXR6T3VPMUphNm1XNWxpNGxBSjFFT0hqNzZYa1dzSWFvTHFuQk16V093R05tMzdaVHZZRjQzeVYrNm5MOHdtMjNGclNNNjhsQWFSS1RDa1VnUDd4RmVQb3NGYy95dnZ6Nldra2JUU3EycXZ0WCt0MmJ2dGhnQ0JwR0J1NndmUWZCc0Q2QXA1MDRnTDRPcnJLNGM5RDRML09sanQrV2trZ1UrWFdldHZsbmt5eFBnL21UVkZtck1CbUtmUERKTGZuMXRBaG1RMzYzNGNocUNtajJWUDZ3cmdWaWVpRnVUNGhHS2Q4MldKTHFJVk9zMjdLNFJsWk5URnNvdFZseEVrQVhNbnpzcE1LZloraFgvSnBoZy9icE4xemsrNFMzQWVXUkJoanVMR1gydzA2OGdJdDMveVorRmQxYlJaM2M1VjVlS29PdlpZNFlXaGRRaEhoNXhydDk5VWJiM2ZRWm5MUkpuVCtSSGNGSW1mZTA5VlVCSDBQT21BelFYK1NFUzUrVWxxM1BGVVI2WlVJUkM2MFp6enByQlRZQmZNVVNzQWtDK2hPNWhxVllZQ0VMeWpnZUhDbWRIWXh1azhHbmIxT0dGSHBFMWtuVWVWNjlUOUExd1RnZ3h0OWVWOWZVcER5WmlQaVJNcjNERXAxZFhjVDJsVlJRWlFUMEJMUVJPUUkvVnNOaXZqcUlDdytKM21aaW5MYUlieXNvcUpCM1RZTE9FbHlrNWN3emJLQnZqYU1aTUdBYnIvTUdEeEg5N1NjNTZTbnZtUDlHZ1BVRjdMQTVZWXc1SUVVT1I1SmM5ZTdMTURsMjRTcGNwUURXcjhDdGRTbS9KRFJLNk5OcmhVV0FxRzFMQkF0SXlnOVdxRWZOTW55RG9aOWpWR05ZWjFmK3VBMVV2WDA5MU8xMW1ha256YitvNDR1cCtER2JiVFhoczlqczlzT2JwNEc5bE9rWHZ2bEZBS1lzNTF4MTFFbHhVVVNZS2ovek42eXZMY2JXS3JpTW9LMUs1eUVYTVJqN3hJQXYwY1B0eGJSL2RJVnRnRWhEcDY0K1VER2pseWZlYzFpTzhVNUhyaTQyNU5kc2RaaXZkRjhzdDJBMVRJMDFJQ201ZmtFZW1oZmRZemR0QTNqclIreGt0ZGFxbTZ5a2FsVU5oMVQ4U3ZUVURDRWFOUk1uV3FzK3licXlsYVVEcWxrSFJnOFVyNmsyRlJSV05LZWcvVmpyR3dLbzVKQnBNb0Y4cmF4aFU3U1hSSHFaTVRyTFdVR2RoNGdQaVZtQ2xxdGhhaUxKb05tbTdnM25wOThhZm0vTFpMNFFkL3JxL0orbkt3OFM5d20zREN0cERxd2szVlRWajVHdEs0MU5QWFRWVTJ2UHNhelVQdUVlU1M5UkVRbWh5Ny93MEI3d1lwRGNmZkt1QnFIc1I0dlhncUE1RUxTM2drTEIyNnBPY3hweHpEQkZONTVDZHp1WUwrS2tCQUY4NjQ4M0kvaWQ1RWJUYjdWUzlkaHVTRi9MOUY0Nm5GVVNzUlgrcnZMMnBqZXFXc1JrODhuZVVpSmlzL015MloxYnZmRkliOWVUeWVONEU0L1FUNnp5c2xVWUpPYmU0U2lRaWV1ZHpFNVlGa2EvWkJmMysyUnlpQXlYN3UwUVJDdytYNSt5OFZlWGxuZ2lnSUN6ZEE4L3d0KzBTK0kvaUVVTG9wNXlPeitJNnlPQzdjUEVoR0NSZ0s2RHhQbEUrYkl4aEFJcGVCV3RMRTFLZElHaEQ1ckxRQ3diQ0x4UVYrbFozc0hSVkpQcmF5SURQRGVXZzgzUURmaE5uMmgxMkpCL0dWS1NpY2xCd0dqa1J2S2ZvYXRraVZyQzFMN2xEdFZ5WjJFYnhsdGlmTytXV0E1SCt0T3RQeHQ0dll1ajZUVEtZL05pZ3QvTk5kaG9nbmtOcm84SGxaYjJtRmF4MllSNmYyNUxES2svY3pQdldTaXN3em1jV0hjU3A2enJsN0pXTzNwUVE4VEVhUUN0bUpVTWNiN3hjMmU3dVgrNlFUUmVOaUo0a21ISzgxNDdMMUFFNktraUk0aHBaNWVZclJoWjJxeGxqUXIzWW1nNFEvODhOdUEyNVpqM0h5MXFBeWxaSDgzVzcyMUZPbnhUZXhmTWcvdUN0VXozZ0c3ak1Fc0xCZ3N2MG1yK0hCSXVqSVpPalhpaTRkN1BKcDJhYUdsSm10eU1GQlg2dGpoWHA0SEFjWXArUUFrM0o2MEQreTFBNk9ZUXFkMElibTdlL3FZNG5pYUZmeUdrSjNyMmJ5WjRwRzRDK0ZLS3lKTmVhREJ4clJsSlBUSlFhQm1HcGt6MXJUbXQ0cmNvSCtHckoycG14Z1JrKytvOWxvQ2hFTVdTaHc5MXNvNmNRRmw2RHJZbUNjUFVNZml3Um9IblhpaUNmWDduSEZML29vL2FkSFgrNnp4dHBhMFQ5UVVpYktEeUdPRmlyaEFtc0ZDWnNNbXY5blhrRlZlOU0xVFk2NmMybE1CWW9EUFVTaGIxcTU4Q0ZVZ3FDZW10VDJFbmdBS3Q5MHVqUDlYQms4T3ZPbSttYndQSWNyTXVxWEhpUGxKNmNoRWFCTXFUaEJnN3ArS21pQzE0dFVzNUIybmlwVzMxTE1JbTVkTFN0ZVQwdW1RSHczNytuSmxRWnFvSWJUTnZpNVpoSk9HSjVOU3Y4YXBjeVBjTDlML3I0TU5DeFlHQnArUlNOalpnR0pkWWR2OTFNY1VIUTFLRUdBNFdmTEtKN2l4MUhObXJ6VkhINkEvMFFXcTQwSGZjYm5BZm1NWVIrcGxuZ2Vnb0wrOXNkdk54VnRzMEZjditaRkViWmdDM1VXdWV1blVPb2d6NHBPQURjeXZIN3dPK0hrQzErVTRVK2gyekd3T3N6QXl6OXFKb2wxZUx5UEVRVFFFdUo0alIxUWltWEV0ek12Y3RKUzB2ZWtMU0xtTFBpcDJkZTRiOHZrQUhlYUFjaFFSbVVia24rRTFjdGI0cm13cVlkZ3p1RDZHRVZocXY4eExBNXB6UTIzQVJSMlZoUzEvdFBzQ3VXdnVCQ1BWMVJrdngyR0FkN0ZuT3hLcW9VaXBJRC9CcjJtVmdqQStTU1FISjFVQyt5UVFwQzdrRkpoeDFwbW51YU9UN3JBU1NVdGE4MDZFOEl2a3ZjWlMzemFRMDRqRG5nWEg2S1M1MmtObFo3OW9PNElKVEdUbkE5aVZjODQ2VVJtYXN5SytNcWVYVGowZHFsaHhyQTRyREZjTHVtM05HZUZsNTN2am9ZOGxzb0Z6ZC82aTl2S1ZDU3hJSS9QTmhqYWU1NXBHMW15RlNqVXF0enhSMEdIbVBlRGZuRFFON25ERlpUQStPeks1V2dkakd4akVCWjAvTktlTG1CNW1WNklFOU9neGprWSswODRKZVRTYVU0Wkh1akZRRTdNWFI5L1IvY0dIMHozajBNMTVHQWw0YWNSMHpuZmd6VEFtOGNlL3N0eUd3b0dXOGpob1lYMzVndEYybEpjdk44b2Z0eHlsK2pXV2JlSHNxRjBrL1JNU3RhNEl5aWp3MWJFZk0xNVNtQ2ZPTGxsN1pLTVNhTExtTWVXSGpjZzlkcDRPVVd3bDVmclB3ek43OW52TEVsTXgveitYTWRtWVVyeUhRWU94WFBpZTJ0VU9CSjN1SWtFMlNaOCt1R2Y1YXd6c1hjSWdXaHkxWTN5cFlVWUV3OExPcXB0T2ltcE1mb3REeHBYMHNhWFMyVjBFVWc5WEl3RGJ5VnQ1ejZsdDR6MzE5ZHRIbTJybjRrWEhjQXhqZUFaMHE2aEpDbm5nNkIya21KdE5LNlRSampuYnNCK2x6cy9iV0dxV1F4a0RJeTBaYm5zSnd2cFVoSUVlbmpVbmxZUURVZncyUmpGRVBYNEtGSXRZaGRCa0ZSc3JIYnBMcGtFb0k3eC9LbktzcjVqQlpQMk9qQjNBbDh3RE1vUU5XV09OR01jRE5wNFNXNWpQUkxoMnNFUlE3cGZzb05xNm0zaW1ZMHVkVVNuWWdIWGlkdWVpRlM3NGdsVytGNkJMV0hOZFZaZUN1OGJvM0RocDhrYXVwOXJZV1d2WkNyTEV6aUlydmgzOXE4VTFhQjBEUWdNWTBQZlNSUHZsS0I3eFptVzFWTkhpWk5ZWDFxSGFvR0M4ZGtPcGFRQXo1RnkyVVRXQU1Uc20vemxZNlljTEU1eC9WbWI5bGdCMEFleGwxL1hNZm1meXRPL1ZGNjAyc1U2NmEyelNuRUtrK3JObk10ZzhYeVFzaFAreFJKNk8vQWJmNnNZUUVUbWRmODlwRG1ZM0VmdUhUVnBHKzAvMkw4dWhkVzg4bXFIZmovQW9TY1pqa1NRRHQzSnZTMWlIQjBzNGZrNWl0RnIxbDFKQXlEZ1Q1ZHNxQ0x6MFh6MDhBRitSTno4aTJhNVQyZzQ4cWdna3I2bkt3bDhhREZOeEhiQndMRW9RZDgxcFlSRDlqYmJnMk5KVU8vc2ZqdTR1Tk9pc0JJTWdLTHpXeDNHejVDY3JHNjZuN0FLWXErKzF5WmhHQkc0V1d6NER2dHdYaU95QVFkKys0VVgzRS8zVEEyazkweVpsdG1ZdFV6ZjZ4YmRoWGtEeTRZR3VZV0Y1VjV5VlkzNWhmMUlhcmt4OTYvdGZqN0RETytlYlVZYzIyUzFNYjNBWTNDTFdSeURyaUdjQXpIWllPaWxFVkszQit2VXBicnVqUEJCWmhBS1JXWXhTdWFFRklpeG1HVnZ0WE42WWtnRkNCRVRMUnVlL2s0SDk1OEN4aU9NZnd4UTBlV2FIQUx4bUNUa1BwcUlBNzJDK2RZM0gwVkZGVW9FaW02M2c1blJ1bldGdDREMGNka054VWZubzdmbDNlQW5SY0hIQk5NVm52UWFibUFkYldxemptaUlBY2YxRzR2d2RGTUtHUXNQOVhVUFVrbUJBTGxZSmc5SC9IMlNGdVZFMjlDZmVWazA3OG41bXhvMGJkZmFyOG5vRWx2YlA3SzBnSjdGNzNMOUVDQmxCTUZIaG5haUJFd3h6M1lqWUtkODhQYWwzQVRoZVRRVG1aUCtnQmxtNmJGVE5TaHZtY1VwK283SXNmZElWYXYzc1RudjYydmZpWHpqSUJuUkJSanJsZzRsVlVWbTdNdlJDVXFvQmFtUjFtUEVFemdXd2hkVnNhNlFUWDdpek5xL3BUMytkeVpWR21BUEdQbDlJNStwVGZOQUo5eDRicFErNEdDZWpFZERNMTd3WURqQlAwWUxxckpSejltU2x6Y3poQm1wS0xMUE1JenpLQ0tPMFFWQ0JXSUcxRGVpTldhc1RFUTFDYlRVTk1IWUhVZ0Zzc0JFdEh3clVoSjNEaCtqT3V2UTFLV3c0QlJ0ZlY4cmM4SEJMak0zMXRMU3RNYlhNL21TRDNsbmQ3RDhSaFBQbFRQOUtWVXQ2d0piM3VUWkJKckZ0ZFBJd1VRd3hhSlFDUGdqcEpHRXc2RW9sWmY3eW0yRk5NdEZFMnR0UE84RzF0cUdabnpZL0RoZC9GQUNrT1M3N3VUOThlQ0VFMGEvTFN1aTZMd29WdUNtSFlHc3BLTXNEeURwOTZuTnVERU1GbTJXU2hrbEp4dnEweDZVa0VPcTFPZGErRzlJSXJYKzY5VEtaajlkTmxVWHM4OElsS0xCRWlmeTdreU5kRXRxSUpqOHZ1dEJpN0hKNFpNdDdraW1qWHpZeGpMSkd3ay9YVTUvTHd2Tk8wYlNQNmtFSTVXL0JvU2NJSWp2cForZ3k5MTJDUlRVdmJpSTlsc1dpVHoweFAyc05VelV3MjNPc1Y0WEFJVnBQNXRxdnY5Uk1vRWdZUDhKYVNLeDRPa1d3UkpSd3dYbEpTVXRBYWhycmtGelZTTGlPUmh0emMvZEpUVE5pUk8zMjIyLzVKdkFHeS9sbzAwZlBXeVBNOVFyQ2VnbXhwVVRyWFlmWE9LY1FTajM1TzRUajdYaHVQMy9hOHQ3Skg3OXZXK3JyWnJtN01ndGlKQXkyQ2p6cU1XZ3VTalNVVythdDhMRzZPTzBIZ20xL3hmZ0VBOHk0SS9wS0FGSFh0bXlwYkZpVkFIdDlSeW8rZFJ0ZnJjaWc1cUg4OGxzcllBRGJOeW51N3ZwMzQ0dTdITGx6bWROVGdaVkJ5SVhwdFJIS1pmcjVEblhEcFV3NkNOYmpMRXBrc0o5dWs3R2ZtVi9PUmxiRitvUGw2dDdXSjA0ZnZNZHFCUkFqaEdHZmNoeXJZdW9TYUdiTXZacjE1aWFTNGxSdndrekJtcUZ5Sk13REF1WDVzUmZyRWt3MmFNbGlGdUJUYjFhR1lqeHM3aWhHajdZbGgwdngxY2J1ckg0NXBrWFQyaWxDM1JKekovMkhQYTlldWtNQ3dkSjhpckxJbzhlQVRjWXlwVEI5S1dpVGF5VmcveVROcDBia0JOSmhBS3RsWWFSTFlBWGNZbEJoMEFVNHUxMjJua0JSTkUrSU9pTThqR3V0N3doUFpKclF1NmNwYTV0eW5LN3JPVFRJNldzRUJVaHFMOVJ1cHJBbEdhQm1aTmtBRGliUkRhUjZaazR4YzA0b3RNdmYvNnc3cnc2eDRaUDNiVHVSQW1kZm4yN0VlemI3S2Z0SnRlQkNWRi9xcGRHS1BHNGpkYS9CNnJaMlZBZjlPSFR5QXBEb3UzcFM5VWNiZXVkZjFUc1diZFlzaGhsa2pOSWVHekxXK1RxR2hmaEtNSWdmSjNqdDk4VE5UbUFaTDFrZ01tbWx5RWdXUDZ0SFJNOHBXMFd3Q3FMNnErSklFalVZckdJbDFBbVEwL1NjV2NiM0pOVU9nci9JYU9waW5RaHJTMVU3N3pkL3RiWXErYVRsTkZSVFhNNEduQURqbkVLUmhaSEFEZ3FRR3BubTh3NjJjb0o1bENCSmZlQ01mZjJodXh5UGtPN0NRVnZSVmJYWTNoZ0s0QlpxVVV4V0RNMmNYRXdONjhQc1hGSFArNktpb0lieHBudzR0ZWkwMktqb3VpdVVYc2c2T0lNRXlkTzVndlpoSitUV3RhUFpnOXJhUFgvQnBCMEhjVVMxa2E5YUd5MXVSK0Y2Qmc5VkJDS0RUcmJLMFcwenNCWlZkSmVKNUhQYUtzdTI5ZGpkSGtqNkZzTnpsSVM2UUF1Tjk4dTI3UnlEMm1EYkg2dmo0V1VlZ3U0SjJZREkyNWVvK09DNUJ5VHB4dytHeVJvSHFnNnpjTzlsZUNUK2pWeHdnV1lBS3hQSG56OFRUK2FiU1IwaDlETTZWbFJPUllZSWNVSXZuMnRTdkR0c0NNb1Y5a0Z4akl4RmRvdVNHMjVBQ3NLMUxZMElVYldiSlFCWjRUR2lnV2FjUnlEWTk4WHdRSjUxL2tUVDZvRnJzK2RYZ3pXRTRkWjl1NGM4d0pXRm12dFg5NzFnRkNtZGlWQ2ZUUDlYRDREb1ZsR09FTittcXUyV0l0Z1J3emFLUU42Q1ZqelI1RUxPZGhNTkxBaUFKV1NtbTFCTGlUakpqRUNyN0RHaEQ3cFN3Rko4NFlTelZwWnh6ZUxWOXd0bUh3ZDhBUzF2M1Z4bEtIVU1lWm1jQ2s5VWtIMXFQSS94ZS85cW4yd2R3ekZyY0QraWlGRFVHMGhyQkV2bVRYOWxldXhienZ1NHFEb3dCaFcyUG9QZks3L2ZIcUlzSWY4M3Nya1Jqbk1wVWxReHhaZzNXelkyZUFaTWdrRmMrZmZxbXFLVnpES0VGb09rNXNqN240Y3JUOFJaTzJWQnVnTm5DQml6L1JsZndGTTZJcG1lcDk3S1BOalFqSnYveDNpZDhlNkMrL3QvcUwrTzd5algyQUVjRlF1MVZpRmY3cXltWkh4TGJNdTJTSDFIZ0VtNm9jaE1NSWZERWdBcEd1OVVNUm1EdWxINCs4TXZwblpTS1VBc3Z3OWhHKytuSEVMMCs4RjRjZ3NnL1RqbkxJdXVWRnhxOGJVek42eDNvQitmUzRnd2hva21uM2lJdEFhdFBiRlU2dTBBQjhNVmV0SjV0QkxaaHRQL0szemlnWlJEY0ZsTXNVVFIxUlFZZExhQXBvazl4VmtZTUorQ05Kak5IMW1wdktUT2s3eXNjbTJxcmIvUlJ1bkx2OHl6TGRWRFRQbTY5ZEdJZmlWSFZFSWZGaTJLMGJkRnZkeTF6R3BsN1VNM0Y3a2RoY0tZUFNjRVZXSG95Wk54c2N4V1cydHB2am0vekgwTmhtYS9MZFRSY1hMVWpTTk5DWFRaNnNSbldwZjVaKzBibi9aeEVaS1hhUzEyeithb0d4anI2N3J1SmpjWXkrZ3E3Nk1PUHBVM2xlWXB6Rmo1b0ZCWXFaSjErZjJPbGNDS3JyZjJja0duZGF2dml0QnZFTmQ5YllqN2NuUmRlOVpiSTNWWk5oN2RVOTMxVWlDYUtTVmd4dndrcWpoMUtqSnBDYkJWc2tMSU5qdEVNQ3ZubkRVNmlsdjlleC9TRTFTOERHOWl4azNPbVJXaXhmUUpVdDRteDRhdjlpYlVUMGFnZklPNUZ2ZTNhNXVMNU9helZsc3NGZUdXRWJmdTVLSEVLRXpJQ3M2Nk4yRzBHU29pSStIV0NQeEFUcWZ0VVd2aG1hM1VMVHAzMDI4SmsrbFdqYXpXbEJOUmJXSTJmVU9sY3g1eFg2M2JxaEpZd3J4ZjZKN2lhQlo5L3E5WXBINEl1VVgybXExeE10dy9lN251Z3QyZ1JCd2dlR0JHSjVDWHRSTDRlcDNFTkw5MnpvRWZuVC9NVnRuZUtyMGRza3JnbXNuQThLZEUvMUJVNlpOeVVhdUJJMUs1QlhTUjh4L1BXWWRhMWFBSGdwMXJveDF2OE5wSkRldlBKVXJHRGtqQmt6STVpaHJPVUg3Uk1YeG1qbGR5SW5YcmhDS284TXdwdHE0NFhUVnhzdC9aRHVWYlc1eCtFdVdLeVA5aFhkRmNZVkk1eHZuUk1OeG5UTG12Y3hpNkxaVTM1VC9Rd3pmaVZWd0tJOVVreUswZWpHYVkzcjFiR2ZiNG8xUW1XMUp4Wk4xL29VeXh6SkRDQUJxVy9maFVxMG1XNWIyc2JJZFBQVy94K0hRTVNzN3FLYlZkc3FZYUJkRjVFTzUvUXYrR2VTZ1J5ZGlLOVZwdStGV3VCaDcrNnZqdWFMQnozdUhFSDlwOEpKZkVMYVAzNWRXdHNlTVBCejk2RW5hM2lQcXQvaDdpQnJsY1BmZDV2bHZIYVErYXVNdmcxYmhrd0R2YU9nZEcxdGxpMUFBTmM4cUZGTFVpdXpTeDZrc2pvUkdqWkhiQkN4b1RoK2l3RHRsNkt5QzFDMFU3Vm11cnJicHdMT0JrbnhUQmFiVWdQRUwvZkRNbmZYMDBDekxobUtjMjEwR2p1NUthaVdKcnZuSnBpbk44VUlZUmVkN00vZW5Pb3U0Q1Uvb2J4a0llOStWWHM5SjI0bCs5NGQ0VGJNUzFaNmY3NlFBZ1hKL2QzQkIrR1BMSThZeXh5enVGTEdYbGowWGRqZkd4dzdQa2NWaHlzenVwR01TMkkzaGRmMGpCTTAzMzFkYTJTSGtZeUZsTFE2N2VqU0F6N3NCMXhHQ21RZ0tod1lhSXEvckZiUThKWm9nR2tIZHN3bTR0dTM3UEFtT2ovRjI0WDZTalZBK0ZDM3BLa05Tczc0cG4xNUMyWFh3MHBmNThrSVNrOHR2azhIMytiYmtoNXZyWnE2NWlPUG8yS3lKYmg2VGNucjR2MFBrY2pqYzUxeklaTTFOVmRHd3oyUlc5M3VKdXc0M1RDMlhxOXJCTU1NdUhVSlVFNENFNHFjWXdlcTJUWXdCU1ZOVHNzMnhOdHlHTVAyVXpGcHZVY0xQSUM3ZCt3OGR1MDFPcTVKNjEzem9nSEFWSlB5Y3ZPR0lqYnNraUh4RDJoL2FBNUhoQis0M3lFM3pZbm16SDY5ZEJldi9FLzVMRUQ4dWVCcFpsVmVtZmo2Q0NWZU1qT1lpUUVyVE1DSkZqRzdYSXZTaHRhdDV5czVFV0wzTjlsQlFyOTlKd3B0R0JLUzc0Q3Zubng5ODFrMHBDY2ZkdHNYL05xek11SThZZ0QwcmIzanhwa3JsRU5OTEc0bGNNeDdYSGVzSm4vTURhQXA2MG5jd0V3Tlp1a1AraUlJRjJxVjZXaHo5THA0RkE3RkkxOVhPZzk2Qjh5WTFGZFo5OVRRcndTUUF6V2RRY3dzcTE4ZzRhWVBJaVludEdyVWR0Y3ZZL3QzVzdPQnRNUUVYaWVnU0pFQVJsN0FZUnpPSTBrSEJrUzZLOGdyOVNhVHA0Y0ZOZllGM24vTEVYWVhUYno5QkZjTlFBMUdFTHdmQkQvUDFCOHVoWHNpVDNDellBN0xwNndwTFRtRHpXVmMycHZrdHJPUlZLTE4zYnlMYkR4MmlzVXQ1a3VoaDhwWFhDK2I3OWZkZitBcEI2VHZ4ZC9JRWw0TVY5WnRNSCtPNjNHTVpPLzg0eVY3WERDS3ZLdjZCZkRjRmZZQ2pFWS9mRlR4ems2a3JrazYwVXVZam5IZmNnK2Q1Z3VjeHVpY0NNODhyOVpOa0Y3NTU5TG5SejBzZ2NCRVVtcnh2ZHliaHRYbHJMb1VSN29pa2hPT0NoZHVHOUxaeG1rU01TR2paa2h2MXh6Q3c0ZVRmWXF1cWgzRUl4ZlF3VmZSN0JrK09WM3pLMVYvSXgwZW5SVUtJYVBHZkpPNWVKRUpxM1VsZ0kvUi9QdVFoaCs0MzlOcmM5bHZrWDJuWWtFRytleTdTTTdhNFA0MjJhVkdyVWo5Yk9YVWkvUG5QMitxNGgyL2ZYR1c2M3MraVk2a3BzTjJWVXZKbjVKU1g1OU9FdHFmNlNpd29nLzhTbjVHd2hWTllLQWM1dEJneStSQkcrREt4TExZcHIyV0RFQnl5NG1DTjlZSWpYM3JEV3JXWDZFSU1NS1FFS09wdUpneDc5K2d0cjhkZjRtV3ArTFFtRVVXeUQ2aTdHNVJtT001Q3ZJdFcwT2h0K0JGQzBhVjhDR3ZCVjgwczd6MDF6cTlDMlordU1VeGlub2JDSnVpSUNQYVdtbWhqdGs2QUNlNVBkL3BxYloxVmRGU0hVNXFPV3QxSnJESFBvRjZTcG9leXdUTUg4UmQxSGxNamFLV1FwZkJnS0pBeFJ2TlpUanFTckMrbll4azVBME1FdXppVDROMTZFQ0Q2Qjdqd3FkQ3M2SkNva25YZVA1dzBUOXg2dml3a0JuK0lsQXUwNGg2dnl6NmhxOFNsWHNHWUdXT1o4aUtnOGh4Y2hzWmJFWUtHbDZZUlNWT1NFVE40TGg2Nm43Zmhka25pNkFmcmx4ZFVzMUIzOU9HMElDZ3BZdjljRUxGQkpFUVlzd0NxVzZ1TytNNGdrWk56SkJSdmltT1hQNnBNbVdCVTErMTJKc0cvdmUxOExxRjkvVmlrTCsrSzhnWlQ0U0gyQnZQL2JWc2ZCVzkrKzEyeERnNHhZdXJTYmlXQW1GMGVwTWZpZm1qNjNORW5tNE5CMVdzMTVXRWtyRjdOVCtTc2JZaWtkWGJKeXhmbmxRL1g4cnJKYlA5MEIxZlI1bVY1ZmdzMDNIN1BYZW9pQ0FuSXhkTFNxSU9TUUlZTW1zS3ZDazJ2eTBNSVVncXZvZDh2bHQ3M2I5TlMwcjdNT0FaS0p1MmpBNjdqQlZKVGljYlJGZTlVOHVKU05jaENKSU1MMm10SzgyM1RwSEh6MmdWQlJBWWRkN1oyNE9vWGdaWXRmcHF3ZG9TcVIwMWFYYlltMnY0cllCRmx1L2lEczg4cDBkdllUMHUyRWI2ZmhYTm1FL0xCcmtKcllFVFFTSTR4MlIyWXlRUWVzNWU0L2x4b0FFbEFpQmpETjFNU0NUeEtkVWg3b3lCaWdWZG1jdmtNTG1xa3B2NEFQZ3Y2TWZYWkR4dEZlWE9Bb1JhZ1NsR1dubnhPWDlqWUI2RE9LK0J2U0pSL3p0MTkyLzFmc0k4akY4dVhaTC9kOFVVam0zVkpnMzNlVDZ3dENTUE15Nm9LbWY2T0NuR2VmYityRzZqZ25ickIxVk5EbWNsMFF4R2xwVVBoTXZlMU4zY242NDVpMGUrRUtma3Y1blI0Vk11L0tYV3luSVVaS05GWDUzR2VyWmtsRXlURStLY3ZWdXpnVFhnNUNTdXY5UFBONFRTRXhNYWRaaU40alVTNTFsUlFxM25lcm52UzkzYnJ2YmtUTjliOUdEeFpSYVd6VUlFR2E3RkU1ZUM0U1F2c0lxMjcwTGQxY0oxT2VBa1I2UGZURWpqM0JPL0dzei91WXowdGF4YXdzbjlCcVROaHNLZDlZOU1JMHM1RVFmdDVESzlaY1N3TkNGYnlzaEs0UVRvN1hPTk9CeHhDem9DVFVEakRjNS9JSklDaVN4enVtQXdkOXBxeHVsRnJpL0tHZm9DT3lUb3NVT3YrclVPNXIvOU95aUd3Q2h5OENpMzVsNVNBS3UrS1h4ZXVQR0F5b0lrQ2tJVGpDZ292K2F5cS8yL3JZK3N4M0RzdGs1cXMwVGRHY2FUaWZOQWZEWUMxTnpkaGluekpLYW03RG51V28vYS82d0RXODhEM2V5NjV5N1BBaWQxLy9wbkJtaUZ5MFR2WCtTTUlsV01vTUVTUUV1ZmZtRGswNGFKWGJZYmNsWW9BZzFlNStUYXNEc2pzYS9EQTZaZlNyWExWQTc5NkIrOXF0aGVlMi9xbmdDQ3BYTS9yMC9KK3E1WFMvR3QwRmVEbzk3V1VsazE2YWFuK0gzQnY0WFY2RHk5cG9JLzFMT3hNUmFOVktNbzdNZ3p3UzgzVjlkT216M3I3N0JhZzVDOUR1bk8wUUd0dmlxNVE5WGc4amZ4TlJWYkl4RFRCNTcyT1dlRGErT1VTeFBoTTQ2ODJ3azFoaEM0TzRsODI4aUIxbmNWUzJaeHlVRXdYK2w0YnI3ZmtWVERoTVVrTVFubVVJdm9QQ3FRSU5xaVJPV3I4TEZsdUlLMjVaODBXeVVXaVRKblFTZHFNOFRIMCtHb2JoM2lLaDlMVXpJR3hWcmRQb1RkY09UVUJPSXpvS0dWRnptVHVsTjJ2aEw0WDY4YUZjSlFheU5jR0ZQaDY2WW5ncjRSNDRmd20yRUlVYzBzUTVjb05VaHBibWN0Sy9Vb2ZFWXdxL2lvMFhUdnkwSmd0dzYwYTJiUWRjZlVMUjhqZ1p2bWlmZEpkYTZYamhndFJ4aDFzUVM2SGwrNVRFWkt3M2NHV2luWHgyUG5rV2VhUHErSWRickR6dElzVmxQUlZSd2p6Q0taZ2J4cGdjY3pRbnFSTWlnc3ZoRlFtVW52ZG9mT1M3UThubzd6SFExV1RDNjVDQkFEUVE5VW41aTlkVUtwNjF6Qlc4OThuSUZPbG9MMXZ5UWxzU1NOTVpKM3Z3dUdmYU5jd2Z2cmI2ZTF5N3k0alNFSWhOajRTK2N2eXlvMTYya0JhY3FiTWVOQ1RydllxNWhwbml6eXkvR0tORGZHL1VBZWpHNVcvcVhMeDA5eDJsZE9HL3p0NllrVGtNay9iSGFXUmVIdTJzUTlCMm1ZbXhxeGhQOVZXK1NLZXIwU3BHSDFVazZQenQ2SXV4SGJTcWxra3A3ckI4dHduM21SWnkrc3lMLzhtcWpRWW5lMU5xN0ZrL251TStLRmhscDdKNk1nT2ticWVrQXl3YkxoK1F3bkNIa3REMWtIdUxRMXBMcDd5Qm50ZnBTU2Q4S1BPK0E3aUJhVWszV0JzV2UydmlCOHJ3NzlvdjdBTHkyR1YraUNWVE1SeGs2WklSTk1aTzBVZmx2SkdMdmhWcHViUGNXY29PTWF2bmxFM2s3SlNsYVpOMEZCak1Yb0xQaGtpNXF0ZU9xamxuWEFmOEt1VXhpMysvYnlkQ1JSNzIrZDUwQjFPYjd6eGZvcmx6aHdJVWsySjg3VlFPM2ExRk96YjJMSEFCR2JQb0ZaNTdzZS9CRTR1UmhGYUhMc0Y4Uy85L1ZNRUN3eGF1REdxR2NFcXBtcEx3NUdDbjE0bUUrUkRQRUk2V0lyYlNMcHcycmxRODFqeHJicVp0TXVoZk43VEhiZHAzSmt2dGplNTl6MXFKcFlHeG5CcDJiZGgweGwxc0FKUWt6RVRJRGh2TEsxN2UvNU9ySVVUV2htN3pYV3lHKzNGM2pYWkN2TElQWm5pamtQYkI0aXkzNVpuUHpvUHZ3aU1WcUMzWkFxcjNoWkYrMFl4TVJ0RDVzOXRqWXlvck40ZCt0Ylh0RGNvNnlKUEo4eTk2VVBmUk1wblpYTmwyVW11cHBiVU82cHhmRk55UnhhQ05VSGJFbVZUZ20vZkhLdlNMTW85cnhVdUYwTHJoU3pqbnAvQmVWS2FvZlpjNHB4MVJvamxYUDRyU0lBWURFQWZmalFZMkxGVkpwRzZHQkhrOUpzZUhZbXpOMTJWcFVEdEN3ZHZGVnRnUkxRWVNRZmdRV1hzWUtwNG5sMG1URTFTSHhvTzA4YTV2dGxlNXc1bjNzdTVtbGs0cU9WcU9TTk9NSGZETTh0dnVoREZETHMrOVcrZ1B3dGZXSmpCUWxwL3ZBblFDazBRcTBPLy9mVXZBY29YNUpDLzJFTS80VFZweTRLSUMzN2VIdDkvbkZVKzdpbExGdm5mQjYzNE94M3k5dnRmd0lPSERIRlFHSnpodUJwcVAwVENEZW42ZEo2MmFVSUJ4enhzOUtlckU1SWUxVVFQUEl4OThMMTFNRERoK3VNYzJhWWlvSjdEOGFiQzFSOE9HVTVYREhmd0QxNVlZamM3OE9Wc3IyVlZLUTlNTlRlVDZacGFsb3hXc3MvVHh0RnE1WDNhbkZ5dlRaa0NWL3RqbE1LdkYrQW9Lc21NWHV2aWY2MkFZbGxBUUpNbGdLMnVjd0d2SWNMUFBWcmxtaExtY1pOSmVQRmhHb0RGRGQ1Y0wwczhxall5dDFKZE1PRyt4dS8ybmdoaGlNWjlyUnpPN2trSyswWUdLQ0ZDRFkwNHVKN29lOWxvSE9RajAyNUk5N2dpQjMvTld1WElyRk81S09SMndsbWFIalpBREo4Zk9mdERGRUtiSmFPZFlyQ1Z4eCt3TjBmUU9qYTAzOEVzV2dIOW96d1VTUHRKZ1MvQXVNVmxvOGpCYmJaaFk0aUtScmxPL0Q1QzRoY0hMdk9CUExNK0tEQUxsUGQ3akZ3aDEyWWhBUi9OMWFVYXhTZkVOYUIzeXVWbG5BN1ZvbUpTZVBaUWtHS2syMW56TEFIdDFjTDFZQURFVG5hZm95ZllnL1YzOEhGWG10bFBKSFpjZ0Rkdi9tZ2pzM0l6N2w5cHBSQU10RUtXK3lsQmpSZmExMDV6U2d2aHZPVUdYOVozakxOcnF1WFhRTERGWG1CU2VUVCt6QVdRL2FsRVBMTldPU3ZWTDJPOE9FRm0ydTdxTGpRZ2ZLZE5ua1F1ejF3SVBxdit5MkRHVFB5eFpxOTlodUNaSGUzKzUySUYwVzJrU1E1bGtpZSs5MnlvandiVjBUVmZKczNIL1cyQ05OczJvaG81REVlUy93eFhiaTZiajBMYVVNa0w1SW4wZVFSUWkvVXkwYmE4WURqOW94SjI0N2RIOG9rN0ZqMHZvSE0ydVUxeHVoR1MyaHd2K21ycnJYNHJPa1VhcmFoWU5teHlleHNGc0xCenNPUktEM0phOElIdkxlTk1pdXl5SkVOUHVBSlVQWDZDeEIxQ0V6Vjl3Q2hwUVBINFpZaWZDRmhMRjFJUXQ4NlpQeDYyZkdpMUVkMHI3dDBuZnNWeUMxKzJ3bGVtUE0vYUlrNGdoamx0VEtPRkhmVkkybmNiU2RBUWVDMVRPOXZxNnBUUDZvSjR6WEJkS2picTRzczkzbzVRaXNQTDBaeTVDVnN4b3lNaUIzV0lRb29UUk1xckZRSTFoaXlIb3RzMkZ6eXk4NFk3V3dZTFg5ek1JVHJZbjdLTWpwQWk5QkNGYThkZFZhOE1WQnNtOEcxOVlBZmtlQ0o1RC9OUkNFOEFsRVhITWtNZWk5TVdEVTdZSWp0UnQ0Q0ZTYy9hTnhjRmpsYmh2K1pRaEZ0S2p6ZG9LK3ZDRjgybEM2NnNoeHBFK3R1VkoxWkhtUDUwN1pta01sQ0NhaUlQcU1DcWNJWlVXUnhnVkxxVi9CUktLdEc2Mnk0Y2tqdnBNNkRIWWF5eS9RNGJUbUpFOGFpQ0RCa3NHaXJ4QmJRSjJQZXRYR1ZTWTBaSnozWW5GWmhiYndDaW01eVMvdXJGcnFEYm51d0pDRWF1Yk13Zk8vWWc1VDNYYythN3d3S2RuZURjTEc3UWFTK0hCWlZ5ZExUN0pVY2JQUnF1ZnBQR2xKTER2czUrY1lzVVBDVDdBWUlaa21NTXNyYVB1aVFoMVBJVHlJd0JDNTVXQU5ZREI3anRxa2huWFVTWDUvc3Q4UU1pK3NJZmxEZkVtYjFpQWhXZ1RlNE8xckFQZ01CNFJtR1VtR3plVWhRVlVxZEl3RWRCdVUvekVSbWEyWk9KVmhQNWFjd3RvMUtwY0VweWdyOTFOeTgrOXhtUytHSElmWHEzWnBFQUwvdWtkUnYrS2YxSWdNcXdETzhpdXRHSnNvRXFNSHFOUXJHNThkeGlyRmRXN0h4dWcrL1BNVkpRb3NVbmh3YWdYVVJKZC84aTRFYk1xcDluWFBoZGJyZ1NOeUdycVErKzlpbXBzMXUvTGdqcDRSUVJlRXZacWFGWnczLzJJVkxuSW11V2x3azhWci9RKzNaaTdrbnJrMnZNaXg2Tk9CNjR1Y215QzJTTU51b0NmZmdUWXpTaGovRWNBVW1BTVRmaGxNS1phOVdMeC90MmNNWGdROTA2dlNKcGFqb2tqSGc0cE4veU8ramhlZHh1WGZ6eS91bHdaMHdOcm1vcGt3SGlHUWFyZTJ5MmhCTkNpQjZVYmR5dlNOaUZLcXkybXZmZk5OSEFLTmcwd3ZaOUhMbGZZd1p3TUJQWlUycHUvM050cE9pbUYvaVg5cEQ3MUxSTlV1ZFVCY2c1ZDFTRnpHdUJWMVNsZVozRHc5UE01WngwUUdIak5xd0VTdTVBVm9jTzVYaitsRWxBQUtaajhaSEdGZ3VSSXhMVkhzZXlweVpRMC85NFAvRGtvTHloWGhkb2puOHYrMTBMNkNwQVViRkpvd1N6ZGRCWVRQZ1YvT1VyTWQxT0VHVmxIdlV2d0RGU2M1Uk9iSmlvTU01dkhEYWlhbDdaUlZTT3c2R1cwb2ZiYjJTTUNFZEkyOHRYM0lNUnZveGp4UVhKRndzcGRTL291STdxakdUZjVnVGtaTHVNaTJRSXYzZHdXSXlwQ05LMEFPS0p2WXNZYkVYaDl6Tm04aEhLWTlqTUR5VzNFclRONFhiRGFpKzYxbFZTdmNDM3EwYnM2NXF1NXE3TXJuU0toaEg2VUdOVW1yTitJTWtwYlltZjlGWWpVcytKSjM4Q2t0dnJiT1BPbjRpMUIvU1lvcElsdk8wMjRSU0NkTFdlakpZMm1NZTFBbGlNNFlvcGphY3FyOUZhb3hQL0tzT205N01ScUdaSGJYenlSZEhXS3Y5ZWgwK2ZDcS9UcDAyR3FwS2Y5MklFK25UQjhFYVA4anFRdlVSWjdDcWI4a2Vtd2VIcnI5WEhxWEJ3ODVITXl5K2dxd1VocXUyUzNJOHVMM1l3cVpneXRxc1F1YVlvOURPeXhaK29XLzZXQmlwVHM3eHhpTnExL0NIYzVGOXFBOXp5QWtNSWl0bGdUelg1dVBjZ01PWlpiZ01pa0w0Nm83aEVTWEIvMkdkZmROV3hWUzF2MXQxU2gyWUlVSTJPOHBaakJIVDAxclBrTDdTeE5UYUxBcTVzdXhtV0xlc3JOZXBtb1crcWUvUmJHU1BOQmtobG5CcExpTHN5emJLVER5UkZRUEtLM0xIN0RZVmJhZlJQRXFqL1ExakFYMG1TQk95cEFhUXZ2VXNyYjNoWXNUaFhEQWtKQnJ6dHBmM2tTaVAyeXVFVVB1dDNybkc1M3pUTGR4SW9IeC93ZFZlMlNpOE04VjZUcGl6WG0rNmVRUHdBcjFvbitGZkVuZ0hkVldFMUJybEhqZ0dFeUlsaVFGSlB4YUVSTzkyMzd0eEc3WDZJNWZsVUlubnR6WWRxenJ4bEhrZ0ZMeWQ2QWh3amp0bGd0TEJGKzNlM1V3YlRDNjlvMExvU0RTdWhsK0VWQ213M2ZlZnBqckFrcU1RNTc2bFRvMWZ2WWlnUUdjVDUzd3NueFVNck5VWDA1eGtONG5FSU81TFB2TDdWS0k5NzBiRFlRQVZjMDdNUTdQc0ZqS2VmKzVkR2toUGdsWnd3MGVHalQyYnU5YTluY2x0TDIrZkRlNUhpWTNiTHhuUTNmS1d2UDhFUzdiS2pEOXJuNTZsRUFGbG5VTHNPQndlOEtSZndLb2Q5UFhKYW5FOEtMM2V4RXFYNFU2WlZQVi9URzY5ck9hUEVBV1NxKzlJcnNLdXJEenlqZ01LTmI3L0VGV2o3N3RVK1dkTkFJQnJQSHYxNW9LWHphNTk5M0VBUmtEcnZCcTUzdnV1Rk9HelhjS2lEb0tLK3JRMHVZNFBza0ZkTzJBMUtFZGg1RUFrU0duaUYraDNjMkVTRElDbDZUNGZ4ckROM3JWVnBjUVFsb1NraDBES2t5QjRNODVXWVFPelp1ZzZYOUUwN2ZidkwwZVJBcHNoc1Q3U0FtSm5XU1FtZHZ5a3kreEdzNXU2eFQrQWwza2tSbS94VWtCQVNJZmh2Rkk2VmxwRkw2YzA0ZlByYzdpOG9FS3VxVlF0Y2h3U1B6SmFzRnBWWXY0L2l6Z2JFQjNBV3VmMmlGcGMrQng1Uk9takt2Q3UyblZkdUJPMmR3QmlXWTBVMXd1T05PQVNaaTZ3OW1INGVGL2NRVlBGeDlIM21meUJQdnZhd2xuenorSHpHbXU1eTNwU01MdDU0M1FYbnFhQkFoeHJUUExXcFgwUGwvSEU2czQyTzVNdFluYVlOd1pFTEJCREkzSUZ6cEwzaUNORldlWGcyMlgrSnFnSTdMcWVlQThvSWpBMjJ4cnBJQkhJZnlSMjRLTnNVNjhtU0hYQUFZS0xvb2pQYnFtMHk5VjBsN3l0Z3QvQUVMdDRjYmk0a2Y0d25pY1dscDVVN1NmSkdYdGVXRDJKWVVRNEdzVXdtbFVWTEVhN2tnendrcnJBSjA0M0dJOWQ0RmFwUTdZb1grNDA3RWlYaDh2RUdhWHZjUk9vbjI5ZXZPanZITHNjY1A0bDdvdkppRVRRYnhhNHg4SUZ2YTMxV3FNelZYa3VuVHl6MUpiTHZDcE1Zd3N4VHlXemQ2bnFkbjJ1Y000aitRYzBtQ0FUZTVuL2ZFM3ZNVko4emdvdEUrclZzeW9nQlJWOGRWTisvU2s5ZCswYWcvWGxOcW5Fd3lWa1h0NHRSRExqa0psZmVmajBzWnBpMnVENHFoeVRxOUVXQ1JrTytYeW9lQ1RBZXZ5MkxuR2EzcW9sN1dHZC9yVXVDbDByeFVSK25jeUp5S2VVc3VZY0p1MmJkYzQwV05XNG91M0VwSitBOXg0U3NQMWk2WWpUY2NYRFhQL0I0OTdyaXJaY0pQVzlvV1pLald3aC9QUERTenI1ajNCSGx6TUFnRVhxbTcyTE9sbjR6VStBY3RCTDh6bUhhcnVCbWhiTWFSWHdlSTR6dWFBYXpENmFUclNJeGl4RmdZYUVaU2VZNG9NT3RCejMzRFprZ1pGZnl3OVZFUGFTdzRtNWs0SEw3Tzg4RXNtSWRGdW1ZMVJCWUNsZk9jOTRwTHY0VjFSSjVZTTNaVmZXUE5qYUVFL2x4ODZQSlBCU0JCQytKMGdZNmFseFZYOXpRWkRnZWd0TG13T0IwcUJhNkl1L3V4TisvRW9FTFFTL1Z6OVBqU1dDbTJ1WENqYzg5SWI0eHRDcjlBcG5wZ2lzVlZCRS96K0Z0N2JuZjRFNno3b0xuRXRWWW9Qa25YclUvb1FBM21HOTFwZW5ranA0clZmMlpGRWp1WDIyN2U3VEh3TzFNL1Rhc2pvQml5YkdZUkJ4Ym5IdXZxZ3NoVTJwTDA2b3ZZYVlicVc2OWYxMUU3Vi9kcVQ4QmQrcExpaytId3VNK3NmYldvSGxMUTlCMlNMR0pNUUNLSjJPYjVTcENEN3RWMjRNUTFBc0tlQ29DZGQ3c2xCRENTajF0bGp2Sk92eXAxUGV2bk5DcFpoUWxtQWVXT3B1a1l6bnVQbVpPOWgwS3dMd3p6QVJSL0FWRzJNaXRRQlFIR1N4bFFCVGlKdHkrSTZXL2pYY25jNHZaeVJ0SElpWTJmTElseXJDRldCOFlha2xjNm8vNDFYZkdQb0tJRDJIOEdSaXdVMEpxY0JXYUthanE3bGNwUFl6c2pqVUhLZnVDbkI0NlZURnZLdUd6OXRNTmxOekFJckdTNnFDNGJLUkF4LzZPMHNDYkJsS1BtbDZiZnhVZHZ3TEVsRlV4c0hYV1ppQ1pEKzgxOGtPb04wbDZkSjB1ZTJTQzNPRyt4K3ZuVXJ5RzZVMTRlWmdlaE84Y1dadk1FMThXREs2YjdDVSt0QnBzYUZ6VGcrSUpFWFYxVVZHMmhMUjVYWFFzMXlZVmZDdUpPVmpZYUsxb1dNcWlJNmhDZTkxVFNaaE9Od1ZSbVR1WmpLZ1RpUWVZSEYwRkNLcnQrUmMxM09BVU5DelhvSlpkOGVWaG1FdVA1TWYyUm9oVUIreXlaaCttWXRrSkh3MTBoR3gvNi9Dc3dTTEk1MUNtSE14bnhicU5XdjhGdzVadUNOc2MwY1ZmTUxMYmR3Y09VSE1kR1cxZGk0YTk5b3M4ZmZsV1cwcUYvVWhtcElob0NBNDU4VGxVWnBWWU1Mb1VPcmNqWmhYOVIwMFlUWk11eEFFbThReEJPVk9iZkNaVVNtN3RnQ1pYbVhkb2ROWXB3TnFVZHd1Lys1T3dETmZqNzN0bXJXcnVQZHBvVjVkN21Od2s0RkRzM3RidHZpOTYrSnhSTW1xTXFJQ0kveUczR0pnMEd0KzMwM1NadndManpXa0JpcVFrSVdTYmhQYmhhcUVSOHd1V3FyWGI3Umo4RWliVTVkbjArZFpHSDBhak55bkltU0FhTnlReDF2a0JZMW9Id3k3WkY5RGd2clphdFJtOXRBSXNrSG9EMkN1em1odllpVEpyQlczL0RPUkJYeWpkaXQ1THZObWxuU2VZRTU2VjIwQ3VkVXhRaDFpbkg2TWZsbGdwbHlKZDJYb0dFakp3cy8waHpnWERmZ21YQ3AyUU5MdlhNdDEzM1lOL0JVTlovY0pYNUZUdjNRRytld2Q4cmVhQjZOc3puZDNzVEhlL0d0d1YzaVRFcjZRc3o2N3FPMnl3V3ZrOHNDL3Baa0FyZkZBZGRDaUFaay9mTTlEYkYzV2hRd0NQQVV5R1NuMVhxWHZ4Q1lndEp1VlNFOG9kSlJjZE92UXlXTkFtWGE3NXpkVHJFcXp6dUZpVXpQdGZXRTlZMGtmMUdGcXlydXFpYm9OTHl0TjJ0Uld4QXV4clU4aURuQThNMmNJYVRsekdvWUlBalpZN1lVcHlSZHk5Y3pZM1BPaWVmbm9OdDlXMkg1L3BTMUs2K3RVQzZyUmYyby9vNjZmdmRZbHp0a2JsbEFyVUtxRmNNOUpEQjQza1ErL2xvS3pINDVTU3g3aHptcDZ6NjAyUjF0d0YvMWN4Z04vNDFXeXp3aDVYenVFWlJ4UEtlaHN6L2NuZW85Ym52RU5UcXRXUnlRbWlKa2RaVGgxTHJ3OEZkSnpKZHB5R1NleEpLa0EwSVJJL3lQOFFVWndqQXp2ODRGNnUyaGtrS251NGcxbktmam5vUkVsR3VRR2pDU05DdXVENVQvSTNtWC9SNXF1T3M2RHJUam9PUnBFWkN3NzRIK0JnclQ1Mlp2aWNaeXRreldsdVFGQ2c1aGdBcEVzRFJLeitna3F5TTR3ZXlVamJrSkdoTnNLb2ZBcmhoaWIxb0lTUklBU0N1QmFTRDFPN0VEWFZrTFNxc2VjdzRuYkVzRG5ZdGZEYTZDbzBOTlJxNk9xQktMVEU5S2RFdWhUbU5tMWp3WDFLVU5sanRVMW5vM09vd3dMMXRpNGkvR2pHK0xQUjc4b0g3VjRqeFpJK3cyd1oxelVQNjFER2g2QkJKMS9FT21QcXVoaFNDY1lXY0dBTjZSWHZGVzg0UzNqS0pjVHFoT3lwV0Q5c0dBZjhNK0NZVUllVkxBQnpwblczeXhPNXpQOWxsSk1DanBlTS9SK1RRei93MmNJY0R1bHIveG4rMHNKQnJraG8wZm9Xam9CdVhwYll3NFVNT2l3dTlZRkYyd0lPVlVGdHY5ZlE4M1pYV0gyNmVsNnBaaElsNDc3T2VFbWsza1U1NGpMQ0QxZG81dDduYjZEOFVFc21Sd3pNc3NicHIzcjE2TFNjY0RNTzJ4TFB3THlWaXg1bHNpclBobnBvSldFeUpkUEJNTzdpSU1wRjJFa3A1QXNGVjJwMjJ6TGk5bU9jeVdMSG90YzAvdHEwdFlRS3dKVHQzUy9qblkwd3F4c1hab1NFT1R0Qnd2ODQvM1RDMXdIaElKSmlnV0RrRUNQOHdzOXlqcXp2eVlRSU82R2o0QXZDdmU4VjdSbDBVOG5FZm1uRUNRc3VjSmpyQzNURDhpektJUGdPZkZ5bHdWdllWWU8wcTBoeGJ2eEl2OWx1YnVraWo1Y294RitsOXFjNlkxbk5WcUpQL0NQblpmeEtaZEc0MURUT2s1d2hOVHl3KzdmZzhZV0VXUFcvUlBWdXRZdUNDNGVoYzJlNmVwM3VVbnU3Yi9tY1VuMk1uK2JmZ0lVTmVIdEJ2ZDZNQXBPT00xak1tUWs5U2N1eDh5d2sycldPR1NtazBNZ0creDBvUjRPTEwvNzc2SjAxRWxGeU5WZWQvdkZqazVvM3REbUU2cS9zWFZGVDJmaWNXUUZxWjAyQjBpenlzZHgySVBRRFBtUjMyb2JOeUdxRWFhQzJjd3BwSm90QmRoLzE2VTBVd1pzWlpLWnJjSzhmTTJZN3lFbDM3TzEzcUsyc0lzak1WdFpiOW5lZE1leW9wSlBHVlB1QkFwSWN0MDZpYnhDeml5MFA2QURwYVdPVFVhaE53QU1KWGhPRUkxNkowQ2xYc1N1aTV0dnV3UlJKVmFHQytmZlZTeEZHUDN1WVYyZG12eG8yWXZnTEc3TWJsU1NNNC9telUrUWRjcEU3a3U0V0JoUlRpczZhYjdtYUg3dFVIS3hCak5YYitIOEgvMk01VUtGSnJHeU54ZDhUaUtRT3VMakxNTk5kU0hEYnYxdGRHWmVwTTA0UVExb2V5TjBaU0ZzWnZxTFRiNTBxR1ZLQ1J4OTk4cEFFb1M4akxRMkV2aFhKVDN2RmFwVnNjSW84cFR6bGsrQVRUOXAxVnBBZzFpUk4zVkdkQlB2TWcvVlBxRlFHcWpkNjNvZnVmY1VsbEd2Qk11QzRKMjZUd0lKUmdSY2xCU2FwZFdGSThSbzVVYjVPT2tIRmtHZ1FPYTBZdWVKZ2J6QXd5M2Z0U3Vlc3FHSG4zQURtQkEzOHVHY2tCYkNQK3hjbnMyRW5sUU5zdWkrVkhJNHpPU3R4UkRINnNjc3pzeVpha2M0aUp3aGJOYWQ5dndSNi8zQ0p0dDZPRmpDMEVSQlFZMGVjTy9MR0tYR1dJYzFHRVBNM2xCVlhoNXlyVzRpSTBTMitwWWQ3bDBLaUErVEZENTl3M1psVnNnell2UEs1Rm5vdmw3M1hkaWxRbE9KQUQ4VWpUTTdsV3UxOEd6a0xMeTZMUG4zYjZZdEs3b2dnV0RhSkVOOVBPS1lkK2tZSU1DRSszVnhEbnB5RndMQ3pHRjRPRWJVRVFSSUg1dTRqNDI2alV4WFJSaUNjOHVwWkdRNi96bFdsd1IwaEVEdUFDWm8xMW1WanMyaGt6b1gvVjRsZWlYcU1Jczd4OW1jd2dpcjJwdVY2UzByc0NuYTk2MTltcnpBN2JtMXU3azdzTXg3Z0ZuTEppV0RoZTBtTGx3c2N0YWFYcWxsdFg3SVM4S2J6N1JTenpzdGx4SExrMWEwN25kaHlFMk55SlJqSVRWdDE1dUJ4U0dSNjNqdFppQnFrTUFnUm0wbzhTclhaNTRDeDJTNHd0eGVQS3RCTUVPT2dXUXdjL2pjNkNXZFRKbHkranorNXRRUlZTVDJJSXBTenVDcFd0aXZJTVlwc1lxUDZEVW5QdHd4VHczdXhCTW9CTUE3ODZRbUJrSFdNQzlBMVFreTBuM1I3RlhOUmxlVkNCRjdtUlBtbS91bzZqYlU3Sk5XZVNpMWdYa050dHBqVkd1cW05T3lRY1ErZS9PaGJZcjZNQzRyYjdyVnczK1EzQUNnSW5PaEtub05FblJvaVV5cCsvMGU5YmNIVHgwdVVEZTAyZENBdTlCSUYya3NqVXRzR1AvZXYxZE1BblNPcXAwa2x2NWJOalE0WjE1VGhTNy9yMkozQkluNVEzOEs5bTBPNjV6SG1FZG5YeHpOTGtoQXVTWDU1dVB1RzFZczRiQ2ZEa3FhQUs3QUtEbm9qTHVsYTE5OFRzYjhCSE9UK0lEaFJoaDdtTm1lcWtMTlcweldjR3BVeldZeUNiSmF3ZmhSUXV2Q29qOXpFelhSd1NMUGNXSG5KQzYyUjJTQXhzd3VEdjlPLzZKOVhQYVREU0hiUkRlZUpJSVg0ejczY0R3NUQ3UnJ4K0diMEpjTmVQVjRaZFZZM2dSd0tzM3JUbjdMczJkdEVJWkw2UXNsZUs5WEM1TkRrbGpIQjNLRzJGOW12MFNGMllVUEdSeHY4eWovRi9kM00rRHVrL3VWaHJQRDF0dWNnVGFobFRXWlNYSmlST0V2WTVyaXY4c1BsWHdaQ29tMERZNGhwNDNSeTczcCtIMFhBdnRRYjdTVG8yRVhQWjJicERjb25OTWdxR21DN2JRYlY1dysrZUhleUZXd0NjWU5Ga1BVWGFUWTFxYlBJc1MxQzJML1ZjOENrUkJYb3VYNGVZbDVwWFNOengvMVkzZG9JWlUrbUd6SGhmR3NlNVd0a3E4K3BMM2F2bHJoMXBVTEpWendrVVlvZitOSlBDbXFNMnllREgvR2cvWXdGaWFTWjBQeUpMYm0vOFB0dXJ6ZGZVV2h6Tkk3VExCL1FFTUUyM1AzcENMMTJkSUd0SW5iUERmalkxbUZzMTk3ODVLMFdxdkZER0NJOTF6YXl3YllEVDRaWmNRYzJ3dGloYUdRTThIRnpOMGZiaGRtNXlNZit3TStNbnhhbUxPQ2tlTkJXbEZvUmw0cXY2T1NPUEp1cXlBQ01TQXprSi9BZllGK3hYZjV6RFpid3l1K0EzSXN2S2JPZlJldnViZGN1UWRNRTBpTVAxUVhaUFJrRnRzZEJvcXRrUHNYajR1dUZzamZJbVlCbDhTUFVzTlFyZVBFOThKTS8vR0F6WDJyNnYxS0JhNFVQTy93UGhUQlFPSXNZdnpzRWxkV0I1STVFdWs4R21EempHSm9iN2hOVnd6N1FMZnBiSUtKTStzTUpJMWh3bzljODVDTnVpeGFVRlZzRWVHNDBVVUhJQXFuZ29qamxocXlhKzdvMmd0dHVVaGhYOU5oRkFSLzJnakRhNkd2WkhMYURxbnJDWkx1bldOL25mQW9vazlUSkZ2N3JHMjZRc1h3bndJejJ3cTV2dFcyT0MwTDU4NUcwd2Q0VVo5bEliSlRya0VFVi90d2dpd2tpOCtlY1VNK0x0VHlZQndiWlM0ZDlLUFdZRnY4ZTA5WUZkV2VYTXh3TEVZaGdnTXRwcG9RbEtzVWR3YWE5V3VZcmgyS2dLUUtIK2VPSWE5UzJPVmtCcC94SDRKeURLZkVLRW9TUmZOZDZwa1Bvd0hsTGx2ZDRoRjhFbzZNTGhrVnZ4cFlvSVNwUWkzN3Flc3d3QlhjNEFMd0NUMVp5QjQ0b1dZeTNxREYyRFhWdzhKY2RYdXNqd0FnZHRyZ3ljU2YxYktIU1htdm1JVzc2TVp6RXg3azBFTGVPRHBML01tVnRZMFRTMG1pczREcTNyOFllZ0x2TE9JS2oxMU16SDMwTkE3djB1eUQrMGJ4WXFOcW9SQmtwQTdIbWx1bnNtSE1NN1ZwU2JmWXN5eEV0MGsraytOMDlSck1IRWJoVFU1cjlqaHhiYVNNMFltZVJhK2pmQTRSQkY4RWVLS3BtTUllUUQrT2JHZHAxNlFtTDNFZmxHWnlsbnVZd3BqVjc4YTM1SlJVK1RkUyt3K09lOTQvMCtJQ0IvaThQdml2bW80TklFODhtNHFQWE1MR3FaQnhTVFBvbjVMTk91M3Npbkwvdk5JL3FMVndUTWFaUm5EbmZYQmViVDB4UXlxQ040NE4vTkZWbHRVL3d5UUwremtocGlZRWZMMk8rUWZ3N01vSWpGbjlyMWFUaTdWZ0ZBd3lKSXdHUFVybUNOL0tQZVFxQXRpQ3cxSllSdVRLcVk2M0dGbEk4SU5wWlVKM2toSmZLeE5yTFcwajB1bjV4VUVmOUdLcXE1NzhoTURjcExMSStKL3Jzck0xSFJJdHdIVjFwM2gySDkwaUFhb3FNMHhHWjd0NW1QaUpCV1VUeVA1UzdYYlhqL1dHNHlIT24za2tHZkorYkRhTW1jYVE3QWRmaUoxN2dXTUYxRHFaUVA3RE1TN3NjYVdFWnhSZC9CTm9Ua085SUhDcC9ZZWFsSUFlWFV1bUpMWjZ0OXNrQjVRR2FUWXJXV0NzazRvdnB0VHZXSUhacWY5dUM5NWFPaXdiN0NJcmgyVUVUcXRnUlk3VkN4UGFURUN3U3JuVWN0ZXpwY2IvbGg5NWMzNnhCNW9IS0V5TmNxSEU2N0Q0cU9EVkpiZ2d0ZHhtUi9Wd3FoV3JTZ00rNWFFbjFuaXVicjRldXdqMXFTWEtHVWhWVjdtQ0pGUkxaY0UvTjhXOXI4ZkcvNjNxRUZTa3IrZ2pQdzJUWkxGNVM1N1RYZ3RyQWwvdDZncXdVR3lKTmc1SVZNa3c1UDlBQUxrWDBLaXFFdk4vTDJRcWFMSUJCeXlUd0NMYXRQV24wOUMrZTdFL0JIMTJacUJHZ3hKc3g2SE50WFVoSUxWUzNqaVBkQjlSZm1GQ0IrWEZ2bTAxMDhua1YycTAyUUFZaW01R0YxOEVhK1FpVEpqQXhPb0VFRVdLb1VIYTRKdk4zMlNlTWJGemhjdVFwQ0tpUXl3MlIybnRTbld2SFhqd2hPa0t0SWtuTENPTG9pT0tabHlRb1RJRWZVMDRzMnRjTEhLTTJoQnJacTJpSG55cXNnL0RCV2UyT2Q3Mldia2JVd0p1TGwvV2N1ZzZyTDlzVFlzV1Z6em9zR0tkakhVaWFpaEpTcVNGTjV0aHJNWkNNMW1LbU9qMG80Q09MbkRSekpQa20xdFlmajh0LyszbUZOcmxRQkNBZnozTTJONWJKSU9IR3QwaUhTbCt6bVFwNS9KdUdPRFJCSUZuSU9VVVRyVytURmVlcko4S3REUTdYQjBxYmlMNllOWmJ0MFRxbW83TnZ0VFVDMGMvT1FsbGZEK2F4am05TEVkUzA4ZWxDankvUmtWYVRLRFpWZDVNaXBwd09YOVc4OWNubHBCUnpFTm9rcjA1NGRsSTNDTmtOWkFwdURtZDJVMkUyajBncFZqbDlWdmRnbytpK3lDSkJham5CU2VLUHhudUFaTUdkUkh6aTBHYWUvdzN1YzdEcWtXTDFhVng4dUFWZWhTbEF5MWxSQnZZR0orUDhQbndXUUZUSWVoazErT01KaWRabjZkYVg0K3I5Q2RjMi94QUdJSDh2cFV1d082blZZU3pBWVFyWWhwQUEydjhjVG45Qi9ha1lhTDhrcjhTZTVySmZsRy9SVjk3MXVibklnTmp3NWZ4aUYwR1NrU2VwVHpNQnlWZ00vc29jVmZ0RmU5SmNvaG1KV0ttNkQrS2dvQVQ3TG1lRnBhYnNQbTVtYytWRjN5dk4ydUdIc3VjTW8zNFFTRHpNb2F4U0IyUGJCUk9tREE5UVE1a3B2QUZCMTJxOUYydG5VMzMrRFFBcVBjOXIrdHVTM1NhOTBVTjUzUFhTbndTbnNScFdOMG9kS3k2ZFFOSnNRYXRkVXFiUmlsbnllS0dWN1RDNC95NXlORDZiNnp5d2xicTcybEhZTFc0V1BYUEtzWFU1eFZDU2JtV0E1NmtJaVhIYlUrMmVQVG5CZVBrSXF2amF4QXpnTHlnN0JwQVUrUnNzcGxCK3lEdFVNM3d3cnU5UjZQbDI5U29aWnZrZFlXNUtQdzIzR2FHM2ppZkJaenNTOE56dTZqRUZLeitzK0xkN3lmQzRsL2RtNDZsTkVmYTVDdklxMWVtOVJRR0VYQlA3Uk1McXV1UVlNZDJJeC9kVjVRMEp6T2VRc2toVXFqQjBNNXc1dTZzK2RQWG9lSTNOaE1qOVYxQ2tHZ2E5Y0diOEVMZWRSQTlhMmpWKzY0QWl6Ni96M3REV1NRSXRiVHVMcnFXNjdUVzhscWpBaE1od0g3dFVaeGRPZmtNb2JabzFyL0NuMXdQOE5ISFhQSFRPendPY0g1Y3lYYmNnVnplcmtkRzFkZmZ3QUxrWWxpNW0yOHpSRzAvd3ZJOVpWU3ZZTFkyajFDYUxtM05BQTU2L0MvcDZsQlk1UGM5Ni9Ld1pqS0VOVkRFUDV0Y1lUYWJsZDQwWjlZbFhCamNaTFQ0UU5tdE5rZ1ZGMkNZTEc3WlBQMzMzRk9FZHlMc1NyVzhES25JK3Q1WFZoSUliOVBRbk9wT2lncVNNaU93eE5vZUZiNEFLRWIrRkZYK0NaTGpkTHQxTitkUHVrcGkvQUxVWWFnbEZFTXR3blV3TXIzLzdJaXNqOHpGSG9nendlY2N3TDNOYVVCMUtrOUM0TklnY3Z5dGdaK2duekJLdHNrSVBHdFNGTmR1VDRrUFZTaFZSYjViNUo3alRvUHRuMk5FUlhOUW5VM0ttQ3hvUzA3WDhMdk5SM0d1cUJpelEwdUZxVGNZUTVsV1Q3VmZYd3NNaWRJcEJWV3FoaDBmeUZvVVlkOFhLRlJNcE54YnEvUFVOT3NuaHU0dTRBdTFLVi9PaGxqSkViSDhzVHg4ZXRMdEVGMnhKNXlkZE9qN3ZKSWh0T3I1Z0tYdWs4RTBzTFdNcmtWa2gzM0VGSURnWVM0SlZ0aW9FYUEvNWJZM2VxMy9rbC9TRkh5Sm1Ic0lqNGxLbWhORjk0ZWp1MVBSZXQ1YWI5ZENROUFUeCtXWWVBRVUzR1pKemQwMmlMUFZ0bW5mMGJhVnU3ZjVEaUp2bUc2aDlEN05ScFBKQnRQaWtPRkdFdktSUTZpRkk2QkhIdHZzcjBpZ3c3MzJOV0J4TEpmOXFKVmVmWXk2bUZmdEhKejZMREY4NVJIdXZlQVJhL1paMENaWFdjMlcycEd0TFRXMWV3STVzN1puMTFPWjdNR3kzUGk4Q0hzUldtZTcwWVBlUnlpbFFnSnhkbjNudk0reFJBbWc0aTNIQzVoYjkrRitCR1NYUFplSXpzZEJtN0xTc3QzUWxiVWVRdTUrY3R5ZUtSVEJ0U1B4eUtud1F1Q0VwQmlwcE5rcTlUWmwzOCtZdWk5amVoZTgwVGVSYmZKaUFsemZubEk5cWxYTjlxOSs0WUlUbzg2aExUeHBLRkdZM0RqVm5YcDVoTTZYaDlpaUdGU09IOEhPZ1R6VjRpTEljd2VBelMxZEY4ZUFYWXR5Z3pHWC9DN3dmbjlUYThGQ1FHWWFVcXFoSEp1cmlCRWt6K3piVFo2Y3BJSGE4NlZHN2V5L3pHSGYvRTRBSkhmcVBXaEpydklKV0swbmNaWnY5NmJNbDVJWVpFSi9XN3BMT2tkT2dvbnpLMVFsWk1qQ0dzWnZRWGZZTmt5VFQ0NzBHWEQxdTFaeDVxRkQ2NG1RR1pCLzM0UGl3TkZybVVIZGNxUklGcHdsaml1c01VaFFtWklnTTZ5Q01lZlM0ZGNjbVBEUFhYS0cyUzZmSVAvdC9aRnI5MmRuc1cxUGtNTUpjc3cwS1BlSGwvelZlV1RDeHc2WFZHc3IwNUdKNk5BOFpVL0RLdUZKcEdNay82bmNGSWFneDh5bE8xRGtUNkcrUmFsZXovMVZET1A4Q0tIZlkzOWNJWmowVWZpTEMwOHBUK01NbG5WTHVCMEF4b0JYTURPMnVPMzAwZDd2QytwaHNjMnBNNlRaaXpwOTMzeUlrN2FrbmQ5cmNVU1poMVJ4cTRIRWFzNlBDU2FMakdLWG1TQmRvVmttWVVEenllUFVjaGFyaDltRXBkT3dNd1lVMHZiS1JFMHdJb1dNS2hnczI0QkVKTStvU0luWktSdVhUR2paeElSQU9SSVNYYjl1WGJ1WWp6MytVdTJGRWhRbVhhTThrVk5XVTd5NmxKRGxDLzFKUUFhSHFMRUlGdE9hRk4yNFh3a2lycFN4ZlcvTDdMZWFYNldjSk5pOTZqUVVHWVcyS0M1QXBsMm8vV25CUkx1YzFPeXp5YUg3eW5ZUnJ6UEsyUE5QOVRuOGlHU0dKeGJXeEJlYWZVdjQveXhuMy80RmNpRHhpemlxbzJvZDR1Y1c4Nml5NlhIb0UwRGdOdkNLYXVBdHR2N1lVRml1bGRDcnhIZTNtUkgzL0phZURBdWtDUFRPQlE5VXBlV3loWnpUN2E1SXRCajFxR0FMUngxckRxL3g2MHdNd1NyQUYzd1NSS2FlRlJPTDZCcU05N3RoNnpKYytpRVZwRDZIM2gvRGk2aUN5bnFmZ3Q3dy9ZWnNiWSsxb002QWpwNEMyWTl0TjBkRENjNUFHUlgwdDFZVWRRQ1hqWHA0MlZwM1pneHBRR2tBUXhrUU51MjU2QnZQRDU3ZzhVSzhXQWxxMFZHZ3c5OGlvbGdXRDIvNG5SSUJFVzU5Y3NhNHRxWmRpV0dKMC9yb2lzbGhwRlRuNVZTekFZYTVwU3lTWU9kZnV5TmQ3WjhSUXRSNkxtcDkxQW9QdlQzeUFCQ3Q4UzVHQm5SSGcvcFIwd3NRTW5XV3NBS1B1RCtVWC9IcUx2d0xQRFI5bkRMTzYyUDVKMjU2VmQxYlZCakdtaWVhcmsya2RtVmZtUDVjNXIrblBSeWltd0tRVllhWURNMGZUS2N5c1NwdHlyUkJqN2NibnhLNDBlby9FMW8vZzVWbkNTL2YxbkN0ZEh0UllTT1AxYU94aVZvaXNJNlhFc1gySjhvWHFEQUorNGh5czRxRzVMZ01QM0cydUY2Uk5SbEZXYjIvOXo2UWxzdG1YTUhwekdlQkVjMmxTT3B1N0M1L2tPWmxuK1J2OXQrVmdqTkFtaXhxTytjRllhSWw1TXBxcC93cHhaTW8xbndNTVdTWW80a09FRldaaFBWL0tMVDVRU2svU09qQ3dIei9jTm9nekd2d3VPK0JjY25QVzcycUF4azE1UUVqbStpNlh6QkxKZlpUcmFmdW1mYXowVnk3RzJocjJpeVdCdnh2SktxZE5nRC83M2xlbUJoNDBXd0NJellESFh6M0ptZHlTRnpBUnFOZmd4MzB6Vk9sVlpOaUJLTkVkTE5hVmZYYTZzaGxiUDVyNFZ6aDBuT1c4SmJsbVpXV0JOQVJsRVE2YzlvOW12TFhYcHJQUDlYbklDT3NOREhFVGZVMzhxSGxvRlVDc1pCWnVLTWJkaXQ4Zk91KzVSTkN1bEZjRkQvOHUva3IrQ3IzQmNROGY2M2tHVmQ1eVdyaTBFV1Bjam8vN012ejFnL3g0bCswNGJzMGVMZVp0QnkyUFhBYTNYY1ordXQwS3hybkFhbEVtQVFsRmlYKzNneld0UGVjY0xreUsyM0YzMG9xYlJLOTkwSWlsVlN6RW9CNmFPMmVEOW5Ha3A0MXdqTytPSEU5Q2hxT3dtZWlSVUZFNnBBQk1hcDJmbjFuTmdnQ21PazRLd2tldW9nTU54SUJwdUQ1T21reVJTYUI2Mk1oSk84ZTU2ejJUWWo1TC92V2hhS3g0Y1VVbDVQQ1k2dXQ2SVR5Qytkek9oQk5PNWlGdlVlWCthTURQZi9LT204bWZyTTRROGF6THJvTnQ4NFV6ZHlDdG9PYlVGNXhZbStGOUxBTXFzeXEzcE9wb3ljMTl4UUxROGE3bTBTb3RxWDE3SGdsOEk0byt0UmJINE82R2JrQlV3ZGtkQytPQm5sR21GMWphMlFOUThRRUt0OG1tZkt2Z05HQTBiek5MRE5GV3orRjBnZmVQbUM0Q05sdzlXalhVVTh5SERXakVjbjdxeXlUSm0xSzh1TUttbWVPeHZPdTR2MkR0YkcrWkcrYWY0WDk5Ull2TWh0THMyb2QyaHVLSzc1czVRbk4xMzMzR3RibktmR0FmUnNQL0REUHJtMWw4M0tTdHJ4RDZrNWZOQWxicXB2WnA4U0pZNFg5MmpWMU9FSWRON2pGL01lQTNrRWdHNXJ4SjE1d0g5OWtBMUFRY1RCVDNmOEU1TTRZNjNJMSs1TktGK1hhUGp5dWVzYTlFU0xSY2RnNytWT1pYK01FMnlDdFVaQ1lsdkpmWjlHRjlwV2Y2SXVlT0JtTFVJdEFwSXhYbHJTM00zd0ZzTitpWE1NV3dycUpyWVVzN1B4NEFOWVlSNmZJVmRZVDlBNlYzZjFrYjFaREpyV2FxRWZFaEpQT2o4c0ZwWEUyT1gyR2ZlQVJ4dG9uZU1MNzhtQVk4ZVBYc0lzMTR4aFdzMGNuK2JlWGpCdVV1SWkzVDRnelpZMWVDamZkZXBFZFp4YmFUdFNrRzJBQlh6WDEzaTJBNnZMZ3BCU3dLNU5kSkZIVlgzcnJUcWVCQlB1dWx2WjU5VEtMSDRmbG4zK0lNZW1pY0tZUmJwKzVyOFMxKzliK3ZTK1piNHM0dkFSUTJWVGdHWWNYSDQ3Z3lWT0FMZ2JIK3BwUWhPYnJzTVNTb3A3dnVBVnljYVZwbHN1c0N0YWthQ283Z1VVYzJGK0gvRUsxTmRZVlUvZTIyUE9xNmhGZXlvaFZETUJyZFJvaXdiUm9RWDV1WEMvRkRodXp6ZjhhNnBJWXpHMklTWFhiNE81Qkc1Q2ZEYjZmV2xzSkRaa1g0NDJzc2xNd2F6WVo3MzYwaVpqajZlMFNrOGFuRGhUYlo4dzJoN1dFSjVTWWR2UEVmdi9MeEFvR2pMa2NCcjdwaVpTNTRRRnl2d1l6N0tJQWkvZXljbEplWDRsRGVZZ3FLR2YwVGVDVHRaM291cG5HSVkzRWdRRDRYMWNES0g1dDVwZVhYZFZ1d3FDekIvemMzejVIYWQvc0I4NnVQRm8xZlpsWmNpeXlCTWdzaDRGUkNBekdYNjhmbXlueVVka2xSdjUvZWlHbGZNN2dLcFlBSy9VYjdHUnRsdmRESlJ3blVwc2w3bmRjNHlOQ2ZYUHpuYnlaRjZWYTFuTkJmY2lrYzlrZEVESENYckppaEVnYmdwOTZtY2FOS1loVVozanp1N05hQWpjMytUdVQxRWk3cEhJNDRqY1dGdUg2alJobmppZFRXeEMxcG16N3RKMEhtSWhiWThXcUhROWxZays2d2pVamZEZEt3c1E3VzUvOGd3cVRZR2FJVXRQaXVCQ1NjSEs3MTNpazRFRFBSa2w2YThYMHFPYzZ4YnFybjV3OTdzOS9ma0xpSUpGdXo3QWliYnNUMTFjVllnTXVaZnpyMmhKVG5LUy9QWElzSWJEYlhVcCtlNzgzWk1mYVMzV0NJdzZDVXlNUTdWOUdzYlZQK2EyR3RlWmJUWmw0cDdoZ0NCTFEvSTh0cjFybmJYWjRibkxTcDFVUHVBUlVwb242dXduM3plRmtFN21mNHRTdDhrSTRscVl6VVBveXpPZWNpYmIzTFB5KzViSUEzdHppd3NwelJqSG9DaXBUaGx5RXcwelArWkl6bERtK0ZBWTVpVmJReTY0NUhxYkFXajJYZTlGUlZDQkUxZmd1TDBYbDY3NzRPQ09sVDJDdHZwL2pqZE8yRVhXRml1dkhKRHhhai91djcvQkpFdUtBbGNhNC9OamhBdEtvNlFjbG4vYUh4dEswLy9QVTg5dk12OVlUdFNZVnBDS0pteXRYSjJYOXZGODBMV2NCMUMzM3I4UFpxeDhxRXV4WXQyTXJOc3VPcHE3a2FIdTVTQnBRdldoZHBkTDhOS0M0NlIybzA5aEJqRWNab2N6Z3paY1l5RHZtT2hPeVdrZVQwM2VrZWlBdjdtenZDMkVCbFYxMW8wQVhoMXpVNTJGcWFQaVIxWTU1M25VenhEUURNMmhxZFNnVTk3NkVuUmxCbUUrbmVpNmcwT3NjMjlGYmphQjVGRkc2QlVpbEQ1RGhyK2JnU3lJNzZsNE9rN0x2cjk5SytnbzJIQkFZVTBtMHE0ekY5c1hBaExjR1VDUlFRZEJqNEt1MXN6Z2p0azE0VUFPdDdGaFlYY01PZ1BKVWl2K2Q0VERJZm1GOXVBWHpYUmNabklLYm81ejkyRlY3V2d3OXB2OVE5TDZrY0R4NkZsZXh5N0drWm1CM2RXbkJrS0pEbXFEZGZZdVE4MkhiUTNzdnJJbmlETjFqSkNsSEFKa0R6ZUQxcmFOWTVkQXhFcTBSeWRiY3kwMFA3NlZmZUpkOHJtSjhqUkhKWjhFenNLdTBqdDFESTVmMWJYWkVtSUlRaWVkbi9TdXNaaHBBRHMxd2NCaHdUYTc5M1FYMEJ1UFd0R29hcmx0Q05KU1NnOVhMV3VEZ1pHVGp3UnM1cDVPemN1WEU2bUxPSlA5ZzJFWmc4RXE2ekt6U0JXU3pENEhONnZwMFR2b0E1TlBETWp0b1Vlb3k5eGdFV2owYUtzL0NCaEFrc3YxV0ZsU0hGUERINVNrWW5GdExoY3BXTnFpSzByVE5QU2dhRnZPUEgyK28rbEIraHRJd2lVd000NFpYblo5djNWbXBJYjVVT0Rjak01Y0dNR2hrNThNWDdDeHZiNHRHaHByQVZBS0l2OGlvUUlTQlI1enFZOW9rSnlxSWZPZGNya0NPbTRXUytWeStPMWFlQnEzZ3hsMFNFWlp6MEtIczBwMktJQUlTbkNiSUNWeUo3QnBCWEo2Z21RM3UxQ29odTdQdWRhRXFGc09icUhLaG1KaHVTaGxZbTRwM3NEYXNpZmJ0ZTBJQTUyK3ltNVRSbElCTEx1OTBDaEswbStGYUgzcEg0NWVKZVJmTHIzTzcvVmpFeDJRQjNIVFBuQjRXdEVEeHlEL242ak4xMUhqcURNTUlkR2NKemVJcEwxcDB1Z3grbDB6ZG9HRVNmZmZNbzUwZkZHQjFxb3grdTdQbUVzR3pGTHJKbGdLMXJySE5PdEp1ckt0K01ZNEt5a3l6NlhkY09SQWpxYXZ5ZEV1T3RZWEwvRG5vbXU0WXgwMkMyd2NXRHByeVFrUG9hellVZk9rby9GeFZEeWlpK1VnTFpYOVF2bENDaXpEU24veXprUkcxUDE1R3RZOUZJRjhqaVd0Vk1jeTRhYlozZVRGaTB4S3BpSzB5TkJZRy90cVJWMVl4ODU2bFp2NnFGam1TdWRBMmMwUThJb1FxT1RSM3lQUThJL2Raa2Uzbzk2Yjl5VEhHc2RLTFc5OW5sNDRRNFM1UU0rV0dwdmRsOTFMQXROWm9DWWVtbG9mZEwvVWlmVW1WSENwb3ZmQlhRa1BIZWNRUVBrcnFTV0VjMHlKbDVuMk1HSDJybkdqZG9GREVRb3RWL05nc3BXaSs3bkw1MEtKMkNaSmY0TWZWeXMxdFZZRkEwbms5aDZNSHB2L0M0Y2VNL1lsTzM4bFp3T2RhbUJDalZDMlFzUExtb1I4Qnl5YzN6amNKbGpXMkdzc1lRQ1UvclNrMzNnN0pCSzluczNZdERJMkJHMzZ5bFVxa1I5S1hqbGFKaHA1aUxqVHJMeGpCMTNBYThSemRUVWVGMmVWcXlON1ZyZWc4MzBpdU5UMS9hMUo1ZDVZL0VNa3lselJCSy9ac1B3MzVTZ2hFNkpTZ3I1bnFaODVVeUdPdzVvNlZCYjBENUtjaFpsOGJJWFlyL2FCRjg1bFpKaC92TDhEN3hXUGcvRUJ1MTFKZXdyRldFQ29aRzM5VlpMbEx3N1BlSG5qNEZ2K1ZScXBjKy9qcHRGOGVZb0FINzYvWHVTdGRZY1pQaEFPWDFWbEZwRVNhZXdRek9qWkpabVVNc3NwZ1Arb1hGRVNadUl3c0piTmRhVDdCTWNqWWpqYkludnlQSmllYW5DeTJBU0poaHlRcjJZZjlZaE5zWkk4WE1yZGJWTHVzUmY0QXI5WElOcGZ4dTZoeDNIeVNRYTFjSU81aWJSVk0zanNTbVJiV1pHcXlvTGNiaFJOaWxLSUE5NVVUM0ZPeTJvaWtQaEpUZ2ZZdHNoeUI5c1dsSW1nOTVlSTk5WmFxb0hvR2wxeU9aaVcxZ3N3cW42blF5ZUZmcUNMWVFSVUJBQWV2REVydnZncTRucWZmY3ZIeTFYaGpwRGxWQk13WmdKa01LQlBwejR6SWNOemV4ZlI2YzYzZisyeEIrRlIxNEZBekFBVlowREV1b0J4STY5REl5cG16YkxPRDBCUHJnRkw2MlNIWjhFQVd2eDFDR2YyQkE4MTZuY1N5ei9HdkRpZzcyVmxZU3R5UVJNUWlySlR3dXdNMklEL2lqbC85bDU2OS9FRytmNmhnUXFTMVJFb1YyNzZzYlhmUUZ5Zno2dXhkL0p3VzRpSDloY2FyZDFiK0tOajdQWEY0SmZ6MWZ1NFNCbm8yQi9EVE1YTjIzQzJvdXptaHBTcmEwRmdvS1NIZDVwcWtaaGxKd21HMFpTY211QS92Q243cmtRM1Jwc1U3Ukl6aTRmU3ZSZlpvcmhkWHZ1UERVclNvRW9JT3YrRVpmczllSzAxeGpBZ0VUU1dXaDNERVREYnR5eGljYU02WXdlMEtMZXcrZDRXNFMxOU9RWld1Qkk2V2Z6US80RDd2S0dYdVVEMGZzMHNPayt6Y3ZUa1ByaUpsOWpjeUVKN1pJbVZobmJVaG1Ocy92WG9ITUNyNmUxU0lFblNaTFRaZE1aekgyc25iMmpRZDFXd202aWR2aXJaejFhYW9ZdHRFWVdRaG9EUFl1Y1JDUjdsZ2owajl1MUMwWDM2ZFpyVmo5ZDRxbDdaQ3NvUTVZUmprRG9PbGY2WjJCRkk4cnd1eHdOMk5hcE5MN0VPM3lNTk9ET3BMaWV2bGI0RFdDTCs1dDRJNEprbEc3eURyRzQ2aHNsRDhrSmZkOXJhRS91WUxmazFSeUc0UFh5cGEvdVFQWHVPRC9GWGtFWjA4RmFpS2xTL2VaSnVxMytVdEtKM054WmdBZGluNEFFQ3FaaDV3M3hNZUU2ZHlWeTEzOGw2aE1JSkZmU1NIVzZJbW5IZVY2Yno4OWdoSWg4ckxIb2xvYXJBeHdKaEtpaFJ6TkZnRWw5MzBabnRnZEg4SlRPM3RPZ2lYeFZkOXQ2eHdqMGtKMzR1QU5td2p2RGVjZWhrOFRHR1hxSXVPdDVhWXp0Ync3Q0drMlhKa3VnK3I1eVNtTzYycG5JY0lOWWRYV1ZJRW5oN3p0ckoxbGJybnVUYSsyVlBxWnorVjJLaVNBY2dxRFAyV1ZwVDBJMlo0QXZWNGsySVJMMnVvSHVleCtyc1NKQzFaQ3dIcmRSQUF1b09uSGM0N1paYnNQUHdHWXFZZG82MkVSWEt4aFEvRTZIYmdlMlpUMENBdWV2MHpjclR0b3F3TEFnekZ3Y25NMkEvUk5weEpORmQ3RWQyMUp4RW15azQwOWExOEErOWRBTS84SUhXVU9oa25qdENrOC9wZ0VYVDNWNUc5ZWhaMnd3ajlLcGxzM1o4MFZLNHFjdEkwY0ZWUDVxNkcrVDBsa0Q4VjRVTkd3WWxtenA2M0pEdUxoMWRaY2Q4WVFMWDdvMXl5ZjhtdzBabEdPbnJ6UFRpdUVvMWo0THpGTFQ5a1BnV0JXOUg3a0xtZkZDb1kvZmxXeU93K3p3VzZEaWtZbk9nQi9Pc2ZmMXY0Tm9vN1QxYzhFcTFxZWJEMW9BbTVidE90UTlsWDJERE9jY2lZNHd2YTdXWTN3UTMvWjFydzBSZVl3WExBNFV5YXlrUHQvMzZ4WVRBUk9Vak5wc2IraTZpdll3OGw5cm5IeUdFdlQ4dG9jb0h0QmgwTUdhWnRTNC9KSWdIUmloY1liU2ZDaHdSemZGd1R2RkFSbWl4YTFMRkxva3JrTldiMCs3Yk1ZNzk3NGVFMEhEMGgrd2NSSnJlWGMwdzYyMTJiUW9Zamc0Q1lyQjFnQk5KbXpKanFuQkZINDVBSTIzMzU3TlU4OFRqMVZXWnFpdE50VHBTMCtZNEttZkxoV0Nqb3VGQWdzcG1FZ2ZnMENoK2pScUpHN3FscHBiQXRTSGpVaXlmMmN2Y2RrYWNLQnVlK00xNndZVi9uSnRzcGlubjVRZFFPdzkyZWpjdGJzN1ZWcTM3ckdkYkhkTWxyQVVSRlFtanpTSEFoMDlZYXltWGE4amQxSElYTG03bnVaT0p0KyttSVl4dmw0blVHbDZMRzdua2JZbzRWUGwwOUJicFFtN3piTUdybVVoTUV6NE5pT29jQ0JNWC9sa3FOQkhvcGx6SlNETFNSZVQ2dHJDUkpxV3R3Zy9oTDArcXB5bCs2OTE1MW0zY1BiNWR1bTkxMms4Q25JMUV3WHdqQXFwL283NHJRTDhWVm5uNmN3YWtqcTVuN3dkelZRRThOZVp2ditOTXRBSVRSR0YxR3BRb0l4UCtvalp3aXB4WXJCQmFQR0pRVnlzUy9BRmF2ZUYyaGxUdERpVUV6Y3RxcXdjWE9TcUgrUEYyaGFUQ3JEM1A2OFB1bitrMVVWL25CN01YN29VT0tINSs1UXBicnFXZStBZThOWGZNQVlyck1SM3F1THNVYklBV3dOT1JEdmFkRW9hVWlieUNYc2tDUnAvZnlEOXJDRnNlOWsxOEVaZHNqdzNza1VTODl1WFA2aVMzTkY0T3hWNE0wekhTUDBPK2tLSHV4cXlzUDlmMXZFb0tMSExndUlRRWowZmtDYlBVYlE2QWR0NnNGL3JRd056dGkzdm5qY0tIelloQVdCM2ZrZDZsR3ZJaU5zWlAwRmpzK2crVCtQaGx6MnVJMkNkcVZmT3RFbENTM0k3bzRiWlpMMFg1bTJSMVh6S2U4VlpOODh2dFJPcWhrQWdEWmFmRWJwTDdLTmJEbTd6b0NaMHc0Vy8zYzUrODBnRXNTUDdXT0lMd0c5Q1hxQ2xEQXlBU281ZDFlT0grcXJBa1lyQ1pwRlBpTlN1UjBlS2daeDByN1Z3Mms3SG1LOW4yRHA3NWdydUFWK3VlSzlNcHo0ZGM2RFFTRUJaQy9lNkdzS2ZjV0NVczlOVE50RkcxWlZBUkVYRXhoRTdzNGFTbWJZZW1kYzVaV1ArcU9rNFdRKyt0ZVhCcDljTnE3TllkOGVjR1hJN0V6NUxCNmlTUzBuZnZDNFdzV2d2RWhmMnU5RTRXWjByd3FCTEVjNEwvbWhSaDREcEF6OGovTmJzYVlaYkVzQ2NyaTMwdU9SRWU4bTUraWhseDlmZXAwVTl6MU1FZFJHaFFKMUcwendGNlhCMy9lRFExN1Bnb3FDcnFCSjNsczhLM2p3VTdsSnB4VmsrZnFKVVAxY3JLNSthMkxEQ244dUpjc3M3YytKNWM4Wmo5VWlUL0Z3RG1YcC93RWtoN1JaRTVsREtZQWh0L0ZKMWh1QXZJUXR3Y3lIKzRINVlNQzhvYkxheDY1VExUYnNiMGJjRzc4bUljbkxDOEJKZjZ4YVRwOFVmeVNXQ01pdkhNNTB2TFVvaTZOako4elE0MW1ORnA2RWN2ZUorcnJFMU83eDI3QVEzV1hZNTBqdkEwcmc1OUpaRjgvUGhDR2xFbG5mYUl3SnlvTHFUWFQzSWhyVHo0SW1hZ09CejRxeElZaDRvWVdDdHR6RE90SXZNRkxZdW0vTHNUR0Fhc1Q4V3FEVXFSWkkvVFNYSG5hbmNnMHJOS0UvV2QrL0JMVFdpOXd4djFMZzVlUUxueGNMT1hIcklOWVc4eWtLZDZVdi9SZUZoQkFkdHVyVzlwV1ZqVFFHb1BGNDNEcWdyMWxjanJjMWFNRWt2YzU4VGZjdVk4UDZzc1BzbUNrZG11WFNJUzA3V1B2dXRQVUE2L1ZaTDN1NGUrRW1tc09ucmN5UlUxTUtkSlRXTnI3RG5GQmZJaVJWS2VZTk9Db2RtRXI5b3dtRmRRK1psNU1uU2JSOVNMeFpPUUg5VmQvUHJhSEJMaDRNUDFaK05kckN0ZTlHWHNQOHBEWWgyT0FNWUwzcUpTaGtCS1Z5dU02WUptay9mMyt6MmtVOHhWM295Q2tEU1JmMk9zZmkrQ1ByeFpQV3ZIaVFkREJRNEVTUWs0c3M1WHFBQzVtZ0xacjZaNWVWbGtXaHVjVVgrNVNzQzFYL0FVMGliTStGUGQ1RlM5VGV3N3lHZE4yVldCS2xUcmlhSXdJWHJ2ellkVWpmbjJiUGROOTk0K0tZNWl3dFRpKzNiV01ERVEvZXZZQzBUazljTm1neHNMZ1VSRGJOWkx3OEVpMVBBa21GSGIzMTJqZXkwSXBMTTc1dElTNU5MQ1VSZ2xUcnRvZWRSSDQ0b24vWHlpMExiU0dUTU5ybXRRTE1FRmRSdDVMbEt2bGZiTGUrOElac21QS1NHQmFNODhGcUIwdWliNy9WOTNjYXNOeHdZR1IxR2lQNEh0b1YxUkRGbmhYOVlJVEpNSVRXbC9CZ1doeXpIUHlZeEp6UjNmT2wyRXB5Umg4blFDZkVPWVNRTS9pRjZzblptTHprVmlPZUtRa25OQVRPODl3T0NrNjBCQWJjYnY2VmVPVVNaWGxJbzBGM1hlc2FPcFZPV1lBVmNpL0JuTWd1ZGNjOEl2cU10QlFadHovQlN4R1ROc1hNVDJlMHFYdTQ3VExBdzNOVXZYM2QzS05ucGRYR25WSWVOZXk3ZERFU2lWb1NvcUZlam1BdjR3NTcrSEJaZnlLQlgwK1o1WE4rTWthNi9FN3YrYTlzNmxPUUVHelo5TFRydzFrOXc3RWlqc3dZMWFYcGtDcU00Y1FaclFicVBtNWNXQTdKZDVESkZocDZERmd6b0JaN0hnN2E3VkVleGxxZHNqYk9VL0t4dGR4dnlHUWlPSFliQ1hmaWxiY1U4M1JncG5UVHJKRll0cnMrV1hnOXBEVjVjempGNFhRMGdPNktVUDlzaHFPL0ZoOUtKdmJYcWFZSDNWZ1pYVjlrSXY4NGZaVXpLTEhUMUVmZ3NRM2tRTnl1NW1hREgwUEJYdURmSndYR0N5SnhtVi9ZMUZFWUtub2psbi93WVRnZzBWM0NUWWZ4cnVBSW1kV3l5NkdIR1NGek93ak1xK2RVTXBLRThTSHp2cS9ocG9nK0xPc3dLblEvcVRoSlVxcWxkemhUcEttTm1nRTZLRjNJaXFJbWt4UlRLSTNCbE83cTlrRE1nd05KZ09VTHV0RlprdVNmTjR1OUQrZ2l1WURieklUWmZIV2VXK09rRkJnNUltdzliMW5rSWU4M2l4MmxKbU1mUWsxVFNWUjJzSWRNYnpUWjZ1ZHJSaGhDZHdFbXBVb1FWQXROa3RkTk42RFduVmRIZ0dzUUR2ZE9ULzIrRERzSXFhSHVBUGc1aDFJRkhLRlFpNG9OZzJBNU9XaTh6K2xiak05U2kvUzNLTi95RzJ3L1Y3cGRsdjYxeG5GWGVZUlVXVWdvbkJCMUVYV3JwQytYZldVTzc2dllxTE9Jdm9nQ0lWQzA5elNZVHF0V3dGQk1XemVCT29hUjM2K1JSbUY3bVN6OEh6ekhLdThTWTN6b080SDdyZSt1Y3Y2QWNlQitlalpYbFQ4ZE44SXJaYlJ4ZHU0OXhuRmtQUkZZRHpTU1FsUGkxc0o1b1djSndQZ2xzQkdiWklBeXYxK01wUEFtbDQ5R0hydjhGMDI1NjFoRHFySDVGaVIwTnhmWTMyMWlMUmJ4bHdVVW5pcjU1RzdpTkNqaDRTa1VRd05LanQ0VktFUzRwMWZTK0lITFhiMktZaFlETWxpb3B1SXhxb1dlRFRmQ0lmS2lIRFIrOXB2Q01mSzErblNzb1VKK3RPQjg1K2RXVk5GUVJUMHovdVNablR6UXlMeVA2VllnbC92dHJjeXVXYndBdEtTeFovcXJOZmRRVXZGWjIwQStveWNhUGFOTGtYR3lOVDNjMSs1MVFwZVRlalYrYXV6ZVpwNk5XRzZDaFA4Z2NNb0FxTkJ3QnlzNXoxL0JJZytNYXd0bUVTK05qQVJnUHZtTWtCd1JSTndMaDUycGQ1MFZjWTdIWGdYWGQ3WjY1UE9ESmNyajJMMCtKUDhhbHhSNjNuU2tnQUdnZHpjSFVvbHFBT09rR29WNDkvZis2OW83L3FnQVRZM0x4L3hvZkY0eGR4dUtmVWlqWSt3elM4d204bndQWW1oNUhFdTQzeG80dE43aEk0NHRvZnQ0NjQ3L2MvYkYxSVVnUUdLVUZpYTcxdndEVk5XT1YyVW1pM0FzMVpYeTFMeWFpS0cvNE1MamI3YXRmRGwvTElzM3dSd0l3Z2RheGxjWVBPZTFEd0VMZitpQTZKNGowWW12OVRzVDhrZGZGOHQvTGJ5ZUtwaDRuQTlBSzBkYnBVTkc3bnJZYTFBYzhsVEY3MDBWNVJhcjdlaC82dnBCRVM5djA2clIydlJPUHRZSkdxWUdRYkxWLzNBd2U4VUNETHhDVkNBazNiU29KbDVXMjRaOHBXV01ubDhVbG1GbnpXV3VOSHEzVUhnQkd5emR1L01NLzJrTHNHVHpQUXJ5TTB0UXZiTEd5d2ZyUGtLdFlSd004NTNFdisvNGNseTN1dXdtZXJkeVhTREtqeit6RzdHdnhmays0MmwyOVFaazNBZDRHSndlejBKaHk2dU94c0FFbDlXc2JXdE9ZdGgwUFZEWUNCS0orbXJoTTJNZWhHNTE4MFpvNlNjTmJsUEdjZWJiYTExNjQ2K1REcS91RU1rWE9JZTNFNVlDRzVON1lpTmJ4WGQ3MzljUS9vQzFlQzQvcURwNTVmSWp5aU1EdEpDdWJIMVA4SlYwV21TVkluOFYwRFdPY2pkYldycUxJNWFEWTFqYk1xaFpQNy9lMldJcGxubjdqNEJQcnJTZXdSMkxoa3gwMjBmNG1Zd1VneC9DYkxnVjY2RmN3eWpzRHlrdWEvbHVNZXNSWVl6dlAwN2lUc3hCSkp2d1VVQS9ZVmdRZFhxcHcvQ3RCZnU0Q3Y5ZmVmZVQvTHpCcFJ5UGZ1M011alpoUnMrSjFWZzBTc21sWmpZOGZZSEh5MzJ0YVlwMUdLMFpaWDdBeldpQm9TVXg0TjlRa1BPbEhrTjFOV3p2d2luQmdrMmdvUEN2MVZLNU41cDA1QnQxYUFFZzFPRGtJQitwakxXaURlQnMvMDU5NGI5ZE9aK3JnZzUvR3ZBNjJiMCtSOGN1UzhTQnZSeWlOa0Zqb2VsZjRGam1ORnUyYWZoVnBnWkEyQ2ZNek5LT29wck5TZVhxRkNjQjQwb28rQkpvZGFnU0p6Ym1Jb0dkMnNvdTY2ODlqSlRiWEY3MXIzUUI0SUZqSkxiMjN0N3AwWkY2S0xxSnh0VEdNRFRwY280UjZ5QmZ3TU96ZTJ0NGszdWI4TTRJS01PakVYdDdJZGxieDBNYjVxREFib2o0bVpMKzhjVHh4YTl4RjF1V3hidjNjUFBwSk5YR3UxTDY5VnNBdzY0WFZ3OWRiYnhFeXYwa1hUTTBXUFVoMmwrd3lJNVFIY1MyckgrajZYVnBDdmgrbVdCdWtTTTRMbEljWC80SUk1SHJWTnRHczgySHlDUjdOQUloOGpZUWwyMHJFNXN5OWMxQ0ZTbzNkdytaQmJsc0QrSGxmNXdNdTFCYXFWeDMxb2NySnR3OFlMNzJIbXFNYUR0WHg2NndoQm03Ymp3WjRESjVTcXh5S0Yza3BOVEM2aVpNWFVCUWtvRStKcFBnRXpYYkpjWjkzWVhaTlUxTlBQOUJoVzFMdkFzYkpYVTdDbXRHNVZ4L3B2c3BESzNucnZ5OWhSZ2RkYy9CQnRVazJBRlpHV1RzTkhMR0Y4SWpDYTVtRlNXa1F0SnJ2ZEpaSHVuSVFjdXc0Umt6dVF0bFVtRmZtc0J1QXI2aElwVDVaSm93dHJjajIvdmIvdG1hbHRJSkg3NXc2aDBvRUlWeG83RUJWRHcrLzFMdWtHbGkzcldESndKeDlVZk9mRENXMkdaWFEvWVlqNjBwRmpqRkNzSkRXSnRhc2ZzQWR5WnhMVm1VUmhSYTRGNXJseTJoWlVrNkdQUDZOai9JM2FrRGhSS0FBMUlxK1pjcHpuM3F5a1RrL3Z3Qlo4b3FpUUt1eXpoY1B2QXl6eitIckxlZDR2UnRUVE9zODNtVUwydzh2L3A0VjhTOWJVVkRYU0RmdS80eDhYNitDYU5WSXkzdXVGdmtRL3BEMWZGSmlvWERPay94b0pvTlhJWkVONGlFSFJ2OWFQY2dNWk9UN1pueTQvSXlhaUxJZTRoWG1iYytVbll2bHFmNGpBd2M2cXFOOHMxU2dMVDNyQmxKYkw3dmxiOGZvQXRFbSs4UkVlVHNIYXFyZmtDb1ZVWWN0RHhoUGxMYmZwK2VNNVpibmdWMHJwbCs5a3pacmJnK0REWmo4ckFrNnJKbUN5UHBxYXNVTDJGbzZVWUJBZWFBaE5IVytiVG5oWEkxS2x2SUpHRWpBOVZzTXNWbXEvWDlxTTJTdjJmUGUwRWEwUDhBaDdtd0VtNXBlbU5ER1hLU0Q5anJkY1A0ZlZpV1AzV1QySHFQM3ozZUVQWDF4R2grUVFWSWZTd0RoU2pnanBJcjIxbkZtcWVNaFF2azhNdWJWN0Fuam1SSWlNTVZwbEovMnk1SWtGblVPclphL0I0UzhpL0Y5Z05IWVNFMmVDL0dmazUwSGl1TWZOZ0tTdlpKS0Q5QTd3SHFOV3dtWStiVE5sdXk2MVNMSGRVS0JqejJ4V1Vqd1IvYnZXNFUvVGI1UzMwNW4wQXhSY1J0LzFnWmdzcVZobzZ3U1oyZ21aK01COHIzcm8xNGZRUEFqUlZzbVNPTUNUbEZucTVmclBrbGZFQzR0WFNWcm5pYnpRUHRPVnBTcjh1T1c0TXdTY0hEdTJCNE5yRDcyaEh2cnVpZFFIZlA0SkFNOGcwY1dHcURNekZXSlpuc3A3QlFmQmIrTmcwQ2dheGUvV3BiM0UvSGFCNWQzMGprUnNkeU9ySEdwWWFtVmN4SnFoTjBsbllRcG1udXFxcFZQWGpNc2VodktHZUpJQ04vNHllUStYY1JKYUx0R3h3Z3FueENqQlRRcUt1Z05VSytVckVqcUJZSUFuSzcva3ByeVBtekhxNUxSampzZ2ZadGhCK0MyV2xGVDhQdnJVa2p3ajFrVUVYK2VnTVdnVmo4bnk4Z0pyR09KV3ZyUkVHbzhkQlAvemFjVkt6bmNhQ3NZdjgzZldiR2pBT3FEVEUzQ3ZpM0JLak4vYlRXK0FxRWorbDJMSWpYMDRLMXc4UjRuU2xXMEx3RHVJYjlmaW9id1BEZEpGdSt2MTVzRHFSdEcwRmN5b1hqQ3Y0L3pYRE5aeVl1WVpsQjJEQkZZS3lCcW9mUjNQem83WjlQUU9NT2ZHbjA1aElNcHF2Q3J0OWpObXJIWHhBQlIwQTFZamdWNkRoUy9PbkJvMGZrREh1ZUxlR2pPUnNyUW5jK2tJZG1JYmd6ampIRjlsYmt5VWpxNHNpVWFyWUNuWU52dkdMYkRmRk1ZeUlPcUJNYmN1eEJvSStUc2RiNlJqa0hvRDVzWkovRXdKckViRWs1WnkrbDR0Z3BGalFjS0VqS0V3U0ovb01jejNDbEtMZGtDWjZnZGlLRWQ0cjN4QVBLVjNLZnROY1BjQkI0Z0F3a2F6cnFXdkVoZ0FGcGpNNVlHU05CV0dXUUQxVndIQ1RYVkJiYjcwcm42a1V5aEpENEtmNklQZm9RN1EyTk9jNW16dU53VGdDb01xWkp4OVBNOUVHcGdTUEY5MFBEWDZSOFl4NWUyRFVCb0xPakNXNU40cmpMOC90a2ZwM0ZWQ0JCQnlhdWdzQTNseFdhMHV2WmsySWJVWWIvTUVGdGFEbElZMTdvZTdOWlBweUJjV25aL3hwWCs2VFBub0hPRXdHcmdSVGVHc0N1S3MvZVdpVm1zRkZSd2x0WHU4SXhHcmVubTRxRmtLaEJqYlFrY254MlBUZDArQkF6VjZzS01kRWRCN0lDcVBLeU5iaS94M3ozazduT0dHc29xb01oaUcwMkFBemU1bzVSb0Y4UWZVamFaRk96ZEYwWklzUUE0c01IdkVoUmlWckE0N2gyY0o1V1pucGJtSDA2TGxzT1kvRmcrVU1ES0ZtTURDQ3BSTkk4d3RkajczNWtFUzBBbkRDVll5ZmRNeURQRTBVSWlxeHZzL25kdkt6ZFBza2tOd2k2WE1laGs2MWVsKy9ZRlM4TENaTWR0WkNUSlQvNWFkWTR6eE9PZ1phWE44Q0xNdkhuWVdoYW9vNThEYnl1TCtQU0ZBTUw1Nm5NbTl0Nmg0UUNYTjFsTXRyVkxheng3b3dyaWkySmVKUVI5UDdHaWlORnNDVGsrdTg1RU80N0dPd2xzMmNoQmRRaXVzekNoTmtjZXJ6RW1pUEhnQUM2OUkyNFhRcGdseGJ2dFhCZW45VHpVVWI3THc2b1BwWUx1bTJYcGtOWlczYStpUDFEUEVER3pSRFRyVndLaW5uV3FwYkpsdjJZMWZ4ZFV5WGcrZmVEeEt4Vm9JSXprNUFtL2h3ZnlUTlVybEVCUGNncWNCNzdXUkwrNlN0VVdqM20rRmt5VmxnUFo5QkZIRTBBNEd0cmtlVUlsM0t6VnJhQXdwVmxHb0psMlUvT0RqNVJIZUNKUnhzZmtjcm15UDZFY3BLQjVneDB1SWNRQU56NXF0cXB6ek9jVHRiUGE4SjJjTnRKVnFIbmFYbWZtMTE2WEc1aHpjalUxZGw0eVBVTVRickIvcDJZNXpHODVPRDB1cEFLckFrcitVanJ5Z1Y3WXVRUUQ0bUxTb1NXZVdFaGxodk5pcDI3ZURvSTVITW92eWtqL1hXeHVxV2E4U1F5RlJkYkJkeis4T2hidjNEMXk3Ty9SYkJRcEU4YXlRMFJnS040aUpYVFVmdFk1YUppaFN1N1VtTk1vVkxmemhFOFBzRDZlK3BmUWd6TGM5TnIwNGFhUXlmYitheHNhMWY2LzBXUzN3eWt0UVZHM1lpRGUwam9uYjBETU4zVnNYZEZjQ29GaGlsNVAyZEJ5eHZJL0ZBL3IzS3I2OVhwTmhvT2JIWWk0OTdqWFJvWVN1ZEJZTzBWUDhyQjRIb2tiS0NHR0hxOVQ5Zkk0VDdiNTU0emtkTFVUZjhsb21ubUNzUXlYT3F4Q3pVQ0JOT3VDb0lBNE1PRnMwZ2VlK0dhV09sQmNzUWwrcCtZN2x4NGtQa2kxUVB6NjVVMTFBTlhvR2Rsa2l3SGgwUEhHUEhQZXhSRWhlNlp2TzRQTkJGQkFqZW5HL3NBcFhKbVhYSmIyNHZoWkd1V2QyRTdVU0IwODk1Yk4yZlNsVzQxSkdNYTEvS2lWMGpNUmVuK0xhRnNrTElrNFhNczJibEc1ZXBQVkhobXVsWi9zVER4SUZuYjFlQUoyNTBmKy9zVWtiNndyWDh5MGxWOTAwV3Z6SEZJTlRqeGIwN3ZPZVppdlFmQWdUM2djZGJOaTA3ZFNDNjl0aW1TYWlMTm5GZWZacWZqUE9CdUVBWE5qU3pHaGtwaEV4UDMrVWtjbWE0eEx3UHFvVi9IMVZtUlR0eXl3SDZzNjkrVmtybllQYUtqMXNMQWhIbmhtb3duRnF4ZGZhLzV1MmxERkNEMno4WFgwdFY0NmhZeDBSMndBZUdrTVV6QVpLclRhaGloSkVsT2dSYVY4Rm4weEgyZWlGT3locGFSYUtMMDExVE9LNXZuaEFyY0txM2lZaVZLREwrai9lbmYxcEdma3U0N01hODhHUUF2Mk5KQlc3SytTWlAzNkYvLzJRQUJBQm9BUUFBQk9RQkFBQThCQnprQ0FBQUFBQUVZQWNCQUFBSUFDUUlCQVFvQ0FBTUFHVlJvYVhNZ2FYTWdiMllnUm1sdVoyVnlJQ2czS1E9PTwvQkRCPgogICAgPC9CSVI-CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24-CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I-MTwvTWlub3I-CiAgICAgICAgPC9DQkVGRlZlcnNpb24-CiAgICAgICAgPEJJUkluZm8-CiAgICAgICAgICAgIDxJbnRlZ3JpdHk-ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8-CiAgICAgICAgPEJEQkluZm8-CiAgICAgICAgICAgIDxGb3JtYXQ-CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24-CiAgICAgICAgICAgICAgICA8VHlwZT43PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MVo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU-RmluZ2VyPC9UeXBlPgogICAgICAgICAgICA8U3VidHlwZT5MZWZ0IExpdHRsZUZpbmdlcjwvU3VidHlwZT4KICAgICAgICAgICAgPExldmVsPlJhdzwvTGV2ZWw-CiAgICAgICAgICAgIDxQdXJwb3NlPkVucm9sbDwvUHVycG9zZT4KICAgICAgICAgICAgPFF1YWxpdHk-CiAgICAgICAgICAgICAgICA8QWxnb3JpdGhtPgogICAgICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24-SE1BQzwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPlNIQS0yNTY8L1R5cGU-CiAgICAgICAgICAgICAgICA8L0FsZ29yaXRobT4KICAgICAgICAgICAgICAgIDxTY29yZT42ODwvU2NvcmU-CiAgICAgICAgICAgIDwvUXVhbGl0eT4KICAgICAgICA8L0JEQkluZm8-CiAgICAgICAgPEJEQj5Sa2xTQURBeU1BQUFBVWZwQUFFQkFRQUJSOWtINWd3Y0RCNFFBZ1FBQUFBQUFBRTdBRUFBRHdJQVFBSUFRQUlLQUFFQjlBSDBBZlFCOUFnRkhRRURBYmtBQVVkbkFBQUFER3BRSUNBTkNvY0tBQUFBRkdaMGVYQnFjRElnQUFBQUFHcHdNaUFBQUFCSGFuQXlhQUFBQUJacGFHUnlBQUFCdVFBQUFRTUFBUWNIQUFBQUFBQVBZMjlzY2dFQUFBQUFBQkVBQUFBYWNtVnpJQUFBQUJKeVpYTmptY29BQVpuS0FBRUFBQUFBQUFCcWNESmovMC8vVVFBcEFBQUFBQUVEQUFBQnVRQUFBQUFBQUFBQUFBQUJBd0FBQWJrQUFBQUFBQUFBQUFBQkJ3RUIvMlFBSXdBQlEzSmxZWFJ2Y2pvZ1NtRnpVR1Z5SUZabGNuTnBiMjRnTVM0NU1EQXVNZjlrQUJBQUFVVnVZMGxFT2tkU1FsUXdNZjlTQUF3QUFnQUpBQVVFQkFBQi8xd0FFMEJBU0VoUVNFaFFTRWhRU0VoUVNFaFEvNUFBQ2dBQUFBRkdid0FCLzVQZkczQVVONHo5RTlsc0hEbXZXMGJGemNhbmVoV3dQVUp6aDNSeExodVBBejJsckpVRnRZeHNmNnlmOHJtT2RSOWFsSTVieXY0aDFaYTlnSUNBOHBneWJJdlJsUTdjS0VGcTZkbDNVWndhdkxKZWdQRVE1VmdHeDJZQ1I0SlhhSE9vUXRVWDYrdUEvQWhBeUtMVEljblovMjZ3OC9oMjFYZHhQT3dNSmNWaGJYOTlEQlVyM1pBWnl2emZ4MVFBT2VlbmVUUE9BOFBURXFxZjFQbU9GMkpuRi91QW9WMEs4QnBUQUxhUmVQOGhJS0g2MWJvMElrWGxZeHZnenViUVV1NWtwSnhnMTgrVUVpb0laZGRBK21nQkh5U2c2T1VwanVPTkdKQ0c3M3hlcmdjUWt1STdNREorL2Q4NzZwSGpzb0RFNGp4SW9zT0cxKytaNDJ3NVdaeHhtZWQ1ZmgzUHoxT1dDRDdtU3JMWko3VzVpeTRLajVjVWdGUmw0bEVBend3QnV3S1NQWSszOGk3K2xjaU1hOU9jRFl3cHFlU3lkQ1VZZ0FQOFpaOFp0OHlBQXh1MncyYXlnWjgxeXFKRzRKaTk0TmxZWGp3ektRRktTaWxuK3FjOFB5ak5xS2o0SWFnQ2xPMGFWdU9MeEdCQTNPQlg2a3VCLzRmSUlrNmhNYzNXUmNlb1ZFNUpIMlZSYmJERzNCYTFkaVQreWNOYmZ5VkRaaE04RG43QUpmZmVzSk41WkVHL1BRRTVURTlkY29oRkw2RVBZZTVwYTlkeENWdTlVZFBxOWNPQjFSVTJRSEFJeGtibmcwOHR2em1MT1BQcFhGUFZycXVBZ2ZjM0JaaTk1VmgveVZPMUlKMlZPVkVWVGVabmhnZlI0NFBHNkxINWZyekdFVzFOcS9ZTFhRWEw5UEJqR2kvb2Z6Q1RCUUZLVGNsMjFXeUE4cnhib0g3N1ovRWFJR1hiZmVzR0VmUjJFTEtDVjZkRDlTbUFPZUFZd0FScnNwSGpneS9DWU1vUTZqWXZoaVNxQkVVb0dCci9HR1RhU3BLMmR3YUllb1FMUk8rRFJzZVpvSE9lNkdCMThmODRSSE5OR0tWQnpDck0wV2xwZzFWNTdkS2FaMkNqV0ttbGE4bVhDYlhOWUVnTkUwRmlQakZnTmM4UGg2UUkrbU1JVkRmSUI1YnA1ZTNqZDdNS0VNNFp4SGp0V2U0aThscEZVSklITVp4dzRUd3Bpd0RIc0tMZUloL1NiMkdCbVdqV2N6eVdFMVZtYnNxNEorWGpMcVNFR1JkTWd6NTBqUDhwMTF0T0NRWWpBeFRSTC81U0dXTG5TZ0piV2FVSHJYOWR6T1lWY1BOTGZTZ1UxUldJK2JpanZESmxNU21Dd0JCWTJWNVNvUXNLZVRkN1FGbnA1ak1sWjZ0OWU3U0ZYNDI0MFAxNEdiZ1pSNjJlaGVpclphaEVpQVdqay9jaUM4Q3Z6alVJYTZiNStuZmp2em0xQndiVFM5cFRlTTVVd25HamNhOXAyZ0pvUVJuQ1pRY0loWFN4b1o2aiszemdRZnIrZmVGdzZkYmRZUUZYV1EyZElDcCt4N3V4UlY5Mk9rOVRUcU5Rc2h1QXhHSWNNeEtVbXViTGEyODBqTXdkRGtkaStYTDN5QjVLUmZDQjB3YkZCRm9BUWlsMlV1cEVkY2k3YjlQSDhoNFZtc0VCRmNJeHV3bnREM2MrRDAvbWFhYmdkOThUQ05qUHVnbjQ2aVFSdEJjMTlrbnJsQ000VlB6bmw4NkEvUWg0dzlZS0VCanZYS3JQTkp5ODRwRDhOeWxob21jUGFDdGd4WTJPeFo3M3lDbGdMckgrSTk4MWRMTkkxSk5UM3pDbys4QnlYeU9OUmxROU5hRnpiMEV6MlBpUFNCMi9vN2FoQk1QdUxMWTUwS2dWdG5YR0xRN2RXUVI4ZG1MaE0rS2tEUVBLdE5tNGdOd2FPVHFWOTBXOEFJTzdabGlSaDF3bTVZK09WbDR2SDQ0M0ZaYmJyckNyWlEzVGdYWDdIUnVtTGdJbnE0QVVYcmtnTWdYd3h0QnZmMldHNXMzSHE3R1R5bUtobnNXSmlMRHk5NFBWYXZzYWo2QTFQd01xQmNYczJsZGVYOFRTM25XOHJrbDV4TXVvR3RXbmppeUtOQVB5K1RrUFhBT1pBUEM3ZS9yQUUwbFRDOHo1dlZIQU5lZWZFcitSRWd2OGpka1FHdWs0cncrREs2c1VNL2lRbDh1bmtubDUrbHIrQzdVeXV4NFJ2a2VwM1lFOHBJY2lVeE1vb3pzTFJzd01UUitMOE5zU0x0cHJBVzZ4T0ZlaDhyVVdneXFiaFQ1UE5QcUR6YTB3TVJuaGJRdHU0bTNqbHJPTnhOMmp5ZEY5VjQya2ExUXZjaFRPRDRUUXVxY2d4Uko0My8ybE1Td0xQbzFPZ1JkZEZXNndXajgyalBtVUFOMzBleDlDaThBUHNRY0RmMjBSQU1OVWNQaFI4VFpHMHdrMzNJMGgvd3l2Wko2ZXphU2JtOWtRWUFwYi9NbFdLeHVGT3hDTTJpUEtYMHVSdXpWeWc1TjZFcHJ2Z3laN2JCNjIxZDZqZk5YVGNvaU8yc28yZEVmMVQ2UHlBSURuNUhRQ1lUTGZyQkdOSTB6c1FoNXZ5aVl4SkxMWlQ3cHZUcGswOG5xdG5CY1M3eEt5aXpFdG9LSFYweHZETGl6eERtVWgxcGJhb29mOVBQWlhPMnRQemlodDZRTzhyV3dtUzBJTTgySFRDR2k2b0d1bDVWeXlMSGxSQ0IzRENWdXA5dGpiQkJjR1pJRGxjUXVjeVVTdHZtWTlTOWJOdG5KQk5UVnlmcW1ScG9yamVrZU5IbjdIVjk5MVdOMDBSVVVDQTZ2ZDgwL3hpYytKZUJXNDZKcHhuZkFFcks3amZ6Z0hmemlxOW96WC9GQkhIYzZ3TEo1WUJDKzFzSVFNUU15Ukt0T2M2M01SS1cwajRDdTVwSHN3cXdFdEg1V1BOVXhHaUtNT0R5ejFOVytRQzArcjN4Qy9QR0NSVW9YSzJ0dng1NTltbDlua2VLWDRjNTlRdmxwS3lOSUVzTlF2U0E1TW5ZU0pHUVU2NC91bE03WFRJdTZKRXF3b1p0N0N6UWR1a21pNzJKK3NzSHdVS1Jnd2d1eGlpcmRveTlmM1RBREhjRld6MnB6ejU1bnlNNzVsQ2NVcVU1dmk1RW1QOXRTVXBGZjgzYW5qM2tjTWREYzN0MTM5Wjdpdkc3U0dqbjVGZlpVencxUk9TbE9lR3ZRNncwbURaczcxcDFXRlZTaFFHUmxpSGgvTHd3bjIxOFhTeXM4a0NvUHlwcVpzNjlSUVNYUlRYSVQwa0dmd2tMazdyWEo1VDhWY25pRGxpVUh0YUZ4eUQ1RFU2c2xUd2VVdWs4NUc3aXR3MSthd1JvdCtqMldqc3ZZRDNRd2RXZHE4QmxKd0c5cVNxWGdKOG9CNm14WGpXS2dKS1dQdDBiMHNjZ3Rid2hud0ova09hWlF6SlV5YUVBaGVhYWVERzM3SGtpSHlqT3VBRWxPWlNXaHhmVWNMdUEvSCt3d3VPeHptcmo5djFGVzFYNXZqOElTZTUvSmlzWEw3aWdYelhIVjF4Rm9NTGVlMWFtYjJ5NHBQaGtuSUprZVQwSkhyNmVlZWFnMzJzdVRiSUVqR1RYRWc3eVJUZ05Xa1hsZWg3SkY2NVQ5RTNmd005TTZ5aDRiUExIRm1JVjRDa1BMU3hIWG9NbXVzeVlGTnMxemxzQ09ERHMxMWtjMnVjbkxSL3hBSGorc1dFVEFLVi9kZ25PdDFqZVhNWERoLzdab2RPeVNDTXBXVnBhM2dZbDc0clMxelBIQ3laTWtMa0FkTXhJQ252R3k1ZmxBcFV5MmVWc3lJYjgvdnEydTd1RnU3dy9KbDdyd21LbERLTlN0YmdDdmlFamFMeFZJR2JOdmhwMGJtSGlTS08xWGJ3eDVodEdmdSt0Tmg0NkZITXR4b1gxOTVLbHIxd3ExUEYxdHFTS2ppVS8ydm1kZEpzd3pST2s4YlpwN3R2bVBiYVBIZTR5ejVnZ2hURWY3WXp5eWZxcHptbDBkZnlxS3RXSHYzOFMraUtNRkladHNNWG1RdkJEaXVJYjFXdS9YRjBUd3JNemVZSmR1NDR5TnBpdGh4NXRMV0lZSDM2ajIzcVRkQmo3ajJtQ2N3TVZsS1B6L2FTanVmMmd6T0ZUeE01YU1odm01ckNzbENPdFNicU9ndlc5cERZZExreXNSZEdLNWplZDYveEFuWnRKd0R4T3Z3ZVZ2bVhWTFZYQSsrUGZnWVZnUEVDdzJWaGNTTGptNnBnSWI1OTRYTTZFYUpXbmJoSFFBd3pCMlFYbTRzbkI5S0hKa3VmRUhOM3RqTFZwOWEwSGpVa3RQZ0l2bE9xYXI2OGNRWDBZK01IN1R6VU9WcTRuelo0cFp3bmg1TlZKU3U1VE9pZWhZS0l6eG1MTk50TnNYMWhOUkMzUndTVndpSzhxek0zaGxRNkk4TC9CNFpsM2tjbVJ5Qm45NVRINkY5aUpsTkIzS1cxclNCRlJDT0owaDZHcjhKYjlTejkxckRSTThjNFRGYlF5M0psSHM2U094OTI4c1JLM2ptRFZzMXRvSDR3L1BOciszRGJ0bzZKK2ZwQzI5UC9ienlEWlh4d2Npem9zMmNyaTRkRzB2aG1uTWV0djNCOERDZmZ5RHkxbHFuUURVZlpxanNUTkZxcDJHRFZmT1VEbXhRajBVUFJZRkxmekZ1TmEyZWZiRHorcGFvVW9nNzdydCs1WUh0ekE1d2tQR0VaTks0dTI1TEZnM0lWTWNpRm1PSlowd3ZjVE8yTUtLS1d0dGdmNDNtTzVaeDBXVnRaM0VyTC9WQzdRMHJGdy9rbGNSNnl4QVZWbHNkR01OOUxsT2hEQ2FERCtmcnVycTZ5eVNqN1BhcVZ3ZGdsbnp5RUZZUEZsR0I0bjRkTVgyZUgyWi9SUVdVWW9vTmxucUVGNHRpL080dzRIdHRWeXBXVEVEVmdSaVM1SDl0Y1ZkcDMyOXlpYVdkM2JCRXkvdTR6WEd1czBmaG5PTXZSSTJtVGx0TDJlM1daUXBNbzZSeGJsTVBiSEZZNFZoS2xvLytSMGhHUzJsU2txeFNSSUtsaTBVbkUvMG53WmdManlTc0NDK0ZUYWkwY25FNDExY25aK01HVVpuYlQ2REwvTlA1Q2JKbm5BRWlTYjFDbzl0RGg3MnZ2YXIvYXlFb2tMWFQ3Q09kUFVnZHVFY2hWRk1JTUxSblhzaVgyV3gyaExVWmdPVWQ4bWY2SGhPakZOeXJ3dUZEQ3JJNC9WOXYyNGJBRlpobUxpSlRuNURpMVhoRmkyemt0RnM3cXR4ZTJNbjN1MjRlVmlBc3M2S0djc1dka3hsd2Vkb2pWcFhlTjN4anV0WnBpSTAzdmFzTStVSzJvUUxNa3RKNFBKZ2VPc2FxT2xhOVBTakhjWkpuRkNOVWpFb3JlZFMwNTVHT3R1bm9EUU42bVhuV1ppcHp0NXBKb243bTU1eWVTekxuOVoyQTl6UnR6UERENUdMaGZnZVMvR2Y0Z0NldHI3OXdQY3FlWVlNRlJURkJiVDA3WUNFRDl6L3VTWjR5dG4raUpjY2ZBWXJJQVB1anpYS0RUTmxYSFlzUUZMS09scTlDS0oyZlFrMXhVcjQ3ZXFseEhlSEFFU3RueXUxOW5ybVVTZDhpQTYyU1BZVE53dXBKUCtjVzJPczYreWRLMVlxeUJ2VkRUR1E0SklidGNUM2JIZVB1VmtYai9Dc0xVVXgrMzFUTzNxaWs3d2F5K2hwbkRPZmVqUFM2RGE0cUI2OHJrNzM3NWRrcjUrbklwdE9LVHhVc2svMG83ZlNrMzlaTklBRVJnMTVWbkxoN1NhMGtLcEZ4TGx2WEtaVTFvWDZTd29mTmxnK1A4SEJDQ09nYU1DWDFQbjBKblYwLzZtWlpzZ1prazc5a0JVamdVUG40bnQ5MzdKbFRkeEVYc0dNUnk5VlBFdjFFUHJ5QWRSYnJEbmY5MUg1OE1ZQWtKSUpTNjBibEJDb2FxTThQRWNtTjVMQ1hWK3pGWDVVcFJxdzdianFEWG9YT0hqNUc5WTFyRDRIUWl3Mlg5ckNkK2wwbzBvTzhtOGU1b2xqQ1d1WTM5TlArWXMrTExlejhTV0xJdFhsYzArTk5rNngyME5jZzk4VWxFM00rQ3RQQXk1OUV6bk1YWkNnOHpWKzRlWno1Q3hwaWlVMVJRRnN0OG1ialpscnJEbExjWTNxVjlKa3lWenZNV1N6eGZ5SFNmTEVhS2pzRmM3a0dORWppWk9Lcy96MVV4Y0hQN3Rodm0vZUQwT040UlB2QnpnNGhRR05VT3huYUZjRjUvSkVLUXJiNUxFcFpGaHZnNlBxRXRMUTFCOGc5eHNDc1d3UWc5d1ROYWFBbXBKZnM3RGFpajIrSjNKSi80TVJWNlR5UFlVUjVYT0dPeFV3UHhiUHJnb254QmZBMDlWd200ZHh1Qkk1OHVhNk5OUkxkNmxabThSSnY4ekpRZkZCdExGZ3ZmaXg0MzVIUE1XdmYzU016VnNyeEMyNW5hVjEyc0hxNmx5UVpBNTlTd255SDB3RGtQWXdOM3dLM2lDQmVSVzhSYjFDNTJQb1ZObElROStGWmI5Z0RLVmx6aFN1RkU3NU9DRVV5VmRPTGg2bkE3S3QyTXlIQ2Z5UFU1Q2xHblFRMVBJQW00VHBTczBaR29YU0RlQkxtd1FrZitOeDcxNEJYY29rRUZXZ3ZoVTZEN05VSzdwR2FrT3pncTZyck80VFN0dVJUbDIydDJwQnUvMmxpUmMwRkNQODk0MDVRTWtMR1hYMjNEVzN6eVplak90bVJiVnh1Nmo0ZmZlZ0xhcVhINXFLT2xacUt4SXNCZm50RU5GRkwxazRuQjdjdU1taE1UUXNtMWpsZy9RdUZtby9YQW52RjV6dUlINkhURUpjUnlBNXBZN2pDREVhWHU1WU9zejE5Qm1hUVVpRDFmVm01eWdRWTA2dnQ3d0dQV2VDUyt1Rll4cnVJeTNJYXpNSURWY2NJdzk0V2t6eDlUS0IvbUtQc0xtaGxhend5NVhXMExjVU1FT20ydks0SXlCN2N6TUNQOGtVM1JVSEExbGtibFBGV2tpOXVkUWRaYnljVGZvMGFoZHFYQjUwYzdES01TZU9ZRWFOMXNrdlJScW1DT1dQemRmam9BUlF1UHZoVlhYVXFHVCs5dFNBT05QTlVXNE9MWW9Vd1hKdlJWanI2YXlLUEkvbU4yZ0hPNGlRRFdkLzlsSkhDRVRLLzhXd1g2ZzJIOS9PZnBDU2tJVWl1cndsTTlsNmFqOUZ1OTN5d0thVm1RM2Z0NUxJVjB1Z0hiZ1RwMWEwVU5iOTRtakNWUFl6UmRPcGhGbE1uakdJSmIzM0xMcGloTDhVQlgxbUx5OTZBbW96RzRSZVpsMlhrZUdXVStVbmxkVzhMRm8vWmptUjhQNzFucWVHK0xrQmcwd08wMllNdjh2K0NiOVhZWXh0U1NhRmNqKzYwYUpwN25xSGJ0dTliNmFlV3NoL3JCQzhpWllmdEhSMUVzb3JjK05KV2tsRlRwTUZJc2JGMm5iMkZoVDdOTFppTEhQOUVZZ0V5Vk1Eby94dkhzVkt2TkdhZU1Ec043OXdza0hkZTBlL2lzeUlPQjFiUTJMVG1XMHZnalFTMHpKN0czRWVjSWlYUkFRZTJzWWtpM0VjNGdrNit1OU9MdCtTTzM4WEphRzltNTFnMlNEMWNGakZKSUltWjQra01OTzRMc200QlN5QlJLSy9jK0Z6S29mb3dNeGNNQzc0aXdyaEdJSkRRbW16RWx6bXo3T3VvdEo2S3JUeWhFWk8reG9wRGFUZ1I2c1VkQVltN0ZscmZPRFlSZ0dtdkRDOWtNcE90N29SbzloamlxU05kUHFaa0NoQmRiOS82VmtGK2FvdFlEZ2I0b2ZHRW1WVTVMdnVXVkdYaHNDOXlPejBuRVBFQmtIYWZPNERwei80YkZsM2VSR1hzRmJaSXRyUks0NkRnUUkwb2ZOZm83ZjNCeG1hcEsxdmdsQSt2ZlhlV1FBL1VkRGJvcVR0U0hmTlkvTE9panU3RGRna3pSU1Qxc2dXdE5xelc2Sys3SUtLZkxwNzFFMUpYUDh6VWw4VHQxN2JYVmEvOGJLbU9xcTdYLzRFeXBaVm5CbVNSNm5tbkM3SzU5TVNma0ZIK3k1eUpJRzRTYjAxdnpmbjJKMU9mdWVud3F5VjVKK2JOcU1IWHlLWTRObU9MSFhOc0pqRHFzLzhxZXRwQXZpdk0xVCtMdms2VjV4Q0M0SVc2Zk93UnA1MC84QUwrT1F2R3ZJdHJQSEQ2SnZvZGVRNStjaTBHdHRTblAxTnRCYko2a2Rhb2RSZmZWVEE1UDgzZmgzQ3U2MkZuMDhLQkFmc1lpaTM5WDl4QitXdGsvTzNVZmtPcE5aTjRjdXhQbitmNlhOcnBYQVNDZDlRM2lwWWFwSHBzekNWVUhSaWtkTGQ1QWNNdHRyaXJiWEFubzMxbk5rK25ReHpJRld0MlFKbkExc3VSOWpreFo3eHV1TXlTZFEyNHEwV3ZXZFpHS2NZanhQRTcxd0NjcGt1VjVJTE50S2RWRWdXaVAreCszM1lKVVczQjFsc0VncFBEQXZjZklObzcrMVJOcGk5TjBXRG9nR0lLOTlFOUt0UmdDOE9ReWFXdDVBS2xBODJzVFByNXl1R25wV1FaQm81T3FVblhlbVJmSXNqQzFUSmx0ZkVxVTcvVXhaUnNYMU5EVWFNZDRaMDJNZHI5WXEzd3d6NzNWbzJlNWp2bmNnY09aa3NrQ3NLLzV4VWpBcmRSa2xXL09idXgxRVBpQXU5Wi95Y25paFVQWnN1SGU1WlJTYVZlNUNVZTlaVk5JTldiZ3VXRUNGeFlCcHFyMjhOdGhDQjFYMVROMDlUS1M2c2ExOHhSSkVFZXdjam1lQWl0SGlBdUZyZUEwak1jdHFtSUc4YzRrdlhNWlFJc2NUcWliUitpc2JVQ01SdGRFMmpDZiszZ01MdUFnV1ZVY1dVOFV3U0pDV2VFcGNzT2xRS2tNcDBrdzMxYkJOWHEwUE9RY2lEQ1VTWS9aakMvbklQRmcrcGw3REFYUk9lektxTVYvUWRLdzVWTjRPajJ4V2xRV2NtTHVLeUFEVUh1bHhSem01SVFZQzZuVnczRDIvR3djbFRJVjgrSlExSVBWQjJmTnphdExrREgvTzlRRGlQSmhBYXg3YzNibHhzcG5TdldUTWowUnByOTVsVzhValZzODEyc1FBLy9YcFpqUGVXZWRZSlRIcUZ1Z3FzT1l5WXJJY0dBaWs0VU0wNGtGQWttRWFMQ1ZFWHl4TzVxRldXN3pIRmYyeXhHa3RsM3lFOS9PV3ZGdU9RSnI4UlFqWE92bHN4ejVDTDJuOUFUWUpkZlFjejlLdjlNazR4dm9vNFJrUEtQV3dIeHVVb0pEK2JVamk1VGM3a0FwczIyQ1ZuWEtEamxQZ3dBV2swbXFLUmxsTEhkalp3QU1lTlpYOW8yZnAydTFlWCs0V053aTVyUXZQajR3cGF0aXRFOExBb1BMb09POEt1Y3pqMnlsb2dDMlVqS3ZmcGx5U2lGbnVsKzZmam1IRGhlVWpic2ZDL3lTam1CQkpVNVM5ME5vU0pZdzZUQ2ZBZUxXU1ZjZnhLeU9nMmVOUGI1RlJOVUp2UTR2MEgraTdmdEc4S0xZaG55akU4cWd5aGpqcmVCMnR3Wnc0aHB5ZTNIbVp5OHBzNUlrT00wV01qS2NpamdnNjZFMTgrWE9wdjd0U2crcDFsTi94RG9qYmtia0JPaVg4OGVMQjZFUjRoMWZkNXVlWElQQWFCWDRPNlEzQ3drM1BSMlBBU1F1d2p1ZGNaUkdaS2k0cDNnQ2F6dHNVZnpqLzdKREpFbGhWR0NRTlVZbm1aQXVDNnUxTEpqRmRGL0ljRmpxcXJRK2h1cFVwUW9FamQrczRKU3ByNE1sTnoyMTlad0gwVE0yN2RzN2xCcjVMejR4V3I1aXc3aGNReFJDMnNkZFRjZStCSC9ia2svTEtWRUNuSkhKcVlzc2FoRnJ2emM2L2FRNS92NG9YOG8ybmxuNCtpRG1tQXYrOXRDellIc1FwUkhaVTg3N1JFK0hzQU9RbGlLWnFDVHJyTENkRjArN3NhRVVlcE5ubTdFajRCM2lOQ1g4OWNOL1BUZGcwS3dPQzBjQWtndTFubU5jY0xhRUxJbFRtRzJFVW0xdmtjUDVubk1iVGlYdHM1eVhNWTFHRWJiaHJZR3VPYzBFM1dIeENMMFQ5NlVSM2MyZ0xNRG80Y3Y3Q2t1MW4xdFNPNEQ3dWV3aHhZTjZuUVRieFUzNXNqVjNKU0NqODgvck9ZMXRBYi9mNnRMR2NyS2hBRXBBeE5PVlZyYkNBQ3krakhXUG54OGNkVUgzd2trdFJOYkJNYzNJK3MvVG4rRFVSVkQyYm1uelcrT29WZE9kdzlTUFE4dGx3Y2JFMkE1bDFqVndjL1NDbGduY1hYTGhCNS82cnh1ZTAyb2cvYlZ0YWdzeGt4QURnOHdYcEJReEVadjMreGN3dmw0L3lMSGtmN1VhNlpDYlRaQS9aRzN2V094VlpFcElDZzd6SkZIdjR6bHV1RmlXZXNNdDRmVHFwZDhtTzhWaXVPU0pqcVRNOThOaVpXT3pKY0dSNTAxc0dxTllqQnZuS0pOemt0bzdDTURJWDVOeDFoVGJJZDl6UVNuTDZlZDlGY096WnZyZXZMNlBGMkZ3UHJWeGZnTWpETjM1MjNZWlBOT2VpNlppalcvL1JqeC9zWFVOZ0I1OTh1Z3BwY0ozVVVQQnZReVZRUGxHYmJXQVp5OFh2eDNubndDM2RBbXMrazJSMTVGNWs1UmprTWFwRHNNSXZhaHRwZGRLRDBoL3lvZGg3V3RlOWQ4N0RsTHYxZjdGMmI2MTVOMnA2d0VzUjB1ME5NdTVKR2t6NUdoRGU2M0lOVVB3M1V6dU9xcjNqY245c3NmMG5qbUQya3BNb2FlMUdVaHc5ZktZNk4vWVQ5MzY0OWROaTNodVZXTllwK3hGbW5weXdIbmZPWnptRzBuVkF1U2Y5MTV5VHY2bGt1WG02OFB3aGVlOUN0REhOLzRUaWZTQVhtQmRxMXdzYjdYcXIzNmVYL1J5bXlQS0tXMlpNVmJPTUs2TkFVZ3lLVTFzRHhLL0xTMDU5SjFQcENRcy91SFZiZEkvMDBreXRXcDc1Ny9kcGhDVGlQenRCcFNlbWkrT1lBQmdtT1NUVTg5TTR3b2EwYzM5b2NhZUdEV3pGd3dPeTlMb0xTR2QxZDhGRnJVRU5rOEYya3ZqMExUQnltbXlCSk5YMUZBYjJJMmowQVlxVWtKem9BNnFvMVhkajVWdURRb1J4b21PeWJpYThLdjNmakk4RDlyb3Z0WG9jMkJqRm1FWTZvN0dreVZPek5md0llVTdhRDZvbWhzSk03ZXhsaTdtdERkU3ZuY3FQdHFqZUNPZC9rSWhhcWVFVnIxQk9taWQ4d2lRVmh4UmV4SmdQMmFrQWtNSm0yMXRnTk0vSzJyREpDVWR1R0FqN016Nkx4QTNlTjU1NVJrWFlmRGtVY1JQdDlQMTNJK2ZRMmkyTXFlQ0p5SXFvVVlrVm43S3FEOWNKdlZ0WWtZRHh2MEk2cVhVV1dhd0VPUjErMWg5cmlmdmVSQlkvb3JNS2xvQTVFWVhXN0hHYm5raTJualh4a2YydTdmTXpPVU11NGR6Nm8vckNZS09GVDgzVDU1bWxlQjFaS08zSFlhK1Z3d2x2TldaTUdRdThtOHJyMEF5bjc4eGh0Q1IxWXR0UUNxdy9OU2o1ZHM4ZjJrang0MForVDNzZ2trU2N2UEt2Vml4MkFWVm0wbEJlbWh1SnNpQUZyYjYxVVF1UE9OWHlHa0ZWUFVWbFB2dmF0WE1YbVBIR3l4Tkd1NldZd0NBM2pMRWFPMTBiT2lpd2Z4aXZscDRDZEVOUy81RXEvSXN3UkpKRlFjZGltMlJKbzh0OUZyMHRaZXRwcEJYNHVEWXh3UGJGK3V0RXV5QUxHd2VYRXR0M0VmY2dUSHN1OTNuOUdQVEs4TitGaHh0TWM0Y1ptbGhSMW5NMi9sMUFoR1A0Q0FnSURtOVdidlFKdjBWK0Y2NDZZVnJlb3ZFdVR6Mlp6bDFqOFcwbGZHTVlUUW5BWTBpS25semVKUXp0cWJHMXpyTjExcGpVNEtzK080c2tTMEx5UmNTTCtWSWxPcmkyeGxvNjFOTzMraHZNdjVxeVhiSm1WdCtIKyt6SXJpUnRaamhRSVNhTlZ1Y3ZVMHo5S3dZK21MYmNGQ0dxc1J1NVdRWFdyTkZHdlA1L3MyR2x5bEdVc3o5TGM1d3RiUW9aLzJOUHYxbWpLa3p0d050dVVZemV5ZzFScHdVcERSU1hTS0xVZTlxamFsZzlta01xeWVnT1lUeVdPSXFkVFhINkdPOXlrYjI2ZFhMd2UyYWZrUWora01hSGMzVjJRZlBreFJJaEhZTlc5MllrZ1ZHNmoxa0wvektYWGVTalRXVGFhT0tRaG1aY3BTSDFOZzZaK0tscnNMNTRQRmlkVlprUEVBa0JvRUxEdGNyNWRNVFUybnZSb1JLRnBsUmpPYzZyV2x2SUtMV0NMbWxOaHRFMzZmYnpJZFBpb0xjRlo2ajYzdjN1UXd0ZnQxODQ5djJNUU9KT3l0aGtZVTZROE1IYTIxUzgxNTJSYWIzanZhcUZibG90aUpMU3lrSXNYQVRyUVJPeWtUTjRGS1FKb0crczJDeTZuWlBjNnRWT2FIckREY08wcXRGN005YzFwNTFETGRRbjUxWW5Yc1BvR1JOU3ZMWnkxaWhtdnp3U29SU1A0MHlmR1Qxd1plYUR1VnFlK2l3RmdTSldTNnhDNk9rK1hCMjdwazhIcEw3dzNKWUxhaHJwQjhzd0tEc2ppN2pjNDBsSTJhZEZZaG41SUpCZU5CcFZWUHQ0UFQzV1plUjF2a3hMY1U1NVNiMmpIMWU5cENhTjVETkN4dDBaWEdlaGg0R216ZUxHbEdubVpHa2c5MzEvemhjWlBPV3BqWGhLTUdDL1pLcWc3K3o2Y3AxZGwvV3Vpa0QxTVFITGlBU1JsWHVPUFRsTUd2Rjl1cm1pMG5EaTArc0hBUC8wUHJrTk5aU1N1bjZTQThBREpzYXM3VjVkcWNFU1NYYmJWTXZmOHJ2UTNlNnRDN1VoZC8zVmhCNVV2SW5tK1Y4SzFhTEg0dGh3WVpFekJrakVSeC9SSmhCVDRSYjdUbFJ6RmhUSDh0cmN4T2dPK3RMTU80eFhxa0hFbDBTTE8wN3AyRy96cG9XbTVPc1dNdllwV2xuMks2cHdOT3pmOWdYZDFXL0U5d1k0amh3a0dSajhoKzJSdHh5aEtSMDJqK2tweHo2VTRkdHNnMysrTng0Q0w0UncyT3dDMlBtVGM5YjZmVmY4eW1nVFhOWEJHZi9LNVhHVFdYQ3NjZW1odDFaUTAzaGttTVJFNjl6U0xZOWVwTlE4YzBSZnREVHNtMW8wTStIZjhLaS9wMENBWS9CMUtKM0pZcnJkc1lyanlsdGM3bmxhL3U5cXNwZjhXU0E4TzAycjRmV2lxUXg0eVNqVjRJTzB6YUhmMHVqZ0E5NlZ5Wk1WRjUybGNGVU9IcFVmREthQVVkcE1ZaUN1bm9mcGxxR1JqR1JnTHphcTBVempwSFRhTjljZXE2OVVxeU5DTU5Wa0xwUDRBY1o5K1NvNDAvUHZHWnQ5eHp2Z2o0L0U0bFNxNWNvUTZGWEd5QU9scXJ2R1N4dWJDalNGUHRPZy9qREVDR2FOajFackltczhuU3J4NzNqMmZ5VEwvOVJ5QUNDTVpXQklNanVjd0VUeWJYaXZLUm0ySUFFTkh6dGlWenFiN09MSnBlQzlsaHpPL28wMWQ3c0lrRVJYZThPaVR3QmZTZjZNc0FyMzcwd0JvaUVybVltMWZJY0Y0UDJmRnF6dFpyc3BUckN3OGIvbjNVUWZnUFM0N28wc2twcjNNM2tMSTV0VkhjZXZpK3plWGl0bjRjaUFrU1ViMjNrOEFqMllBMnNYb3lmZk5QZndrMVYyeHA5VEsva1ZRbTg4TjV4U2VDdnkxVmtZNFoySUtzS29WeFZTYlMxWUs4ZUFlT1k2WUZVdTY2Rmxua0lRU2Y1eWNkRW9kSjlBZHpkWWQyTVBnL256TTFFZm1FTlg0MjdhSzgwT0pMT0l3QllJWG9QWTBGUWZpbkJya2pvblY2aU5MSVZzYmVrU29NbllzS1YrSVM2S1lhaXptYmg3azhOTnhLTEJ5ODdzQ0NES1p3Z0lEbjhoNW4xQUlnamUvbkNTSjNlZm4wYmhYWXo5Wmp2bkRWdHQ3akh1bFhFSytoVnVSZVdaZmh6TmgwM3oxVm5LMGt6TDgvSktVSnd5MC90ZmFXQjVFSnZZQy9mODFSQ0hnNVU4Y2JwVWlURjdhSDlrMjZ2NGFWK0htNUcxMUZ6TzhZMVhtTXhmYy9aRnlab1RLZmlWZEZCU3lkZUtpSE81OHlDZnVWWXArc2RPc0FTUjlpdUF6ckVTd2dnRlZlL0I0Y3h0N3pmelhjYVlkWXRhN01qLzhyNlppcjVGRXJ0ZTdGZVBncXJUam1ZU1N3QmUxeWFzSEcxdFdoM3dNQkJsMzlQR2RiYXZ1ZXBhYnF1NmpiZ1JzNUlmQURCRm9kRnNFc3Awa1dkYkR0T2RpNTB3cG1JbXZWZDcxNDJZYlBVYmVlMk41Qzc0YU5sU0ZMT0VGZlVVVUpQRk5Gank5RUxNeCtlVXRUejJCZDJrQzhEM0pTR2VrTHBBZUYvMWR3TnhHdDN4dnY1OWM1RmQwbXI5aDF2T29qdTYrNHVBRUJJUDJ1N0s1V0VoZlZ2VCtWVXhqZHdKTHFMbG9ZV3piMGNYMER5NHFmNzBWRzhEcjliMG9UZWZyS0FXK1JSOUp3WEFCKzNDc05SVWVUTFZPdWIxdXduektaSFRzdmJPRmh4T0hPQ1RXS2JNOWttbmFscUREYmxWUWU3SFpISzkrU0tXZHpIL2ZoM0FhUEFEekdCRm0wRnRWdnE1bVZzTXNZT25xN1VWTUpuSWd1NDVBVm1VZ3lOWVA0T3d6cFY3SHU5bUVSSk5Zb0NvZWxhUVZ2Y0tTVExPaE02VUU2RXFDL1IwQ1dFdlJ1M2l6SXRjelhUK25CVUI3TmZtZEJYUElaMjJ2WUpuT3RwUWxmNmlwcmN0SVBlN2xrR29uWitIZWxMVU11UXE0TFp6RzJCZXB6aWRqVGIzME5WTHMzNHpPYXBmVTVRQU1Jbnh5RFhSUDl1LzlHcjBsTHlxNER2QzhwYTd1Rkk1U2thMGZxczlSdnVWZ1EySjUzM2M5RjNOdnY2TmtJVmpCTzVvdU4xNVpPeUk0TG1RcVloMWZ2ZVl4V2cxN2Y3eEExRHl1VXJ2cDNiVythOHBPTjM2aXQ0STFXNjJIQzVidmVSQzZGVGdWeEVDd1hqMTRHSEJLTGNBYVJsejEzMG94anZGeVdXazBvOVg0eHJzRkVxMGF5VHRNWW9NeHpwY1NzdFFiZzU0WlN3REtycDR5Zm1wQVZmTWFXZWFRV1J2dkwwY09mM1l4RmY2TnJwTUhHNlU1TTVaZzl2d04yeklPbzRrRW41SjNzZDZNTWxJM1R3V2Fla1lhZWtXdUpnTTNVZHUxZk16MFhrNmYxQmZodXgyVVFpRHBqc1FleUU0NEgvMjBrVmt2MTJBS2tQZllFS2NwdlRwaXg2OGRtMmxaRU43ZmZaaGxBOCs5U2lrSnNjWThhMFVFSDA3TitadVZGS21vRlBHK0x6dnF1ekE2ZlFzOEtINkM3cklSaGl3ZWN6OWVUR2lWT0gxRkRqMmI1UUVOMUszcjBvTkJybVMrM3NwYmQxSWw0cStNeGl1MmN5SU1UaCtrcEhPVU1OWW5BVjMvT3NtYnJpaDFlckxzUEQ1VEY0NzVqTlFXbnpMZ1dyYThrVkt4eUZIREhOaCtDRU96bVRqaHl4L2RhTnBKZ3RKdjJVZzZKU1RYZDhXZ1FRL3VSODBFSm1KcmVSN3cwdkphWHZ1NDlOSUxjMGpTakkyQ2JkaEljdU5VNXFuL3ZYTHBnUTY4TmVudytjQlN2RDZGbGg1Wnl2am9odVNYb0xBVGdsU25seUJNM3cwclpoQ3F4ajU4TEZraHNWYUluKzAraUdLN0NodXpDMHUyV21zTWc0ZTRqbjBlSEtXc05pMFp0RS83b2NLRTZ0cXVlKy9qOE1QejFJNUxRVWFnelFhOS9IM2g1WXhsQ01kWHFjTjcwMk1TTzV1TEVneFU1cVlBckhEVjBudDZDZzBteWVBRzAxL3A5bmFFSnJZUDJrRFJjd2QzMnA3TldOMW05bnRURVdraTJjYitpU3dxQWNvSUlaR1NJNnEyYk1mVzZ2bXJjanExVGtTK0wyOUFJbkN4NnlLRWpHSnRKRm02SVE1dkc2d1YxeEg0VjdNT0ZzNGZneHpnSmkxTFNGelNyWDVKYTllRkJ2bGlkL2hVRnRQdWRwN3o4YWZ1M2lzOWRWNElZUnQrMnE0NjU0RkdLNlhmY1ZYRHZocC9oL09FTDFLZGVZQjRUNm1uaGJTZjFUbEdoSUk3M1FpdElyMlZwcWdJd1pSU2pPcmRuVTcwYzd5dWgxbzVNS0F6V2t3eWQzNU9lUW0rTC9XVm0vZVAvTFBJUU9pZldWM3o2aWI3S0hXRDRTZnYyK045cEovRDZaQ0Q0UkdJb3ZraWd0RXE5V01aOG9NcldBUjFyWEhKcW9td3NlQjRVRmVoVGVnQkkxTE5kd0JrMUs2MWYvSmZIclVjSit3akR3dVpqVnpkMTZqanN1NjBNRUhyeWx6YUpSMGFZOFM0eDROQjVRUTdhNDU4MnlUMU4rZjFDRk5lSCtpeFNhdnl1VnBlWDcrVmU0TkpMTjZYZGthSmdveTgrRW56MnBBZWdGcEZUVFFUOTU1akxIMi9qUGRiS2JtTFVQekVHcUt0eUZoTEw4WjRvd3gyZFhIcXBhcC9TYXhCQkNyS0VrMkczTWdyMEpDZFdIbVJZRVd3R1V2SWFJRmx2bHdEd01qR29oSjNlelhvazdaZ0N5aS9VQ1hiUklVN0oxbWw5TGo5NHFKbllZK08ra0xBZXl4OTYvTE12OXVpVVY4cWJhS0h4K0VKT2s4T0lBb2lickxiY01zNXZ2T1ZINGRzTnMycWpYYi9LamUrVHk0TEtDZ09rdHVyS2ZqZ00yT1NVREd3RUhueGd0MzlEd0NxNm5RRnR4KythQXJzeTVaZ2VhU1Z0T0UyYklxaVpGY1oyRkdUbUdEc3Z0bm1UTzJpR0Y2d24vM1NrRTFPQUpnVUI3aUthTFNGOThiTURtQ2pZOTVWNGcya0NhVVF3QTJ3WlowNzBkOXBTNlpheHd4QXcrUzJOd0dNejJvYXBFdnhWR3RUb1FHWnF5ek8rUmdvMld6L1l2a3pDMkNTbnZlaEVjU2ZXa1hDZDBGOUxTTHRSQ1lqanB4VHdOcld4Y3Jya3pQZEVCNUoyZnE1Z0VISWNROFhZV2FFWjlaNUtmOTRXaDk2SVpvR251enhKRSs3WitkY3JzR09mOUxWbTRjSlh6ZEdnOU83ZnQ0VlBKTkVXOGpzanFWOHFNbERiUEljSHVMMnhjR25pc2lhUTRwbWsxUUs0b1BnSEYzRkNnRnB3Ui9sUGtwR1pKMzJkSE1BMGVha2pmRm1PaWxyd0tTVjU0ellzMC9GUDI0RXlSUDlUY09aNHQrVVdRNmNtTG8rY0xqSjZNSnBlMjg3YzM0VEpXaXA1RVFtWFBZQUFQamF4TE9sYml4bmUrRHpQSWlTY2IxWllVUnBFbU41Unh6VU50N1pFMzlEWHhTZTBXanJEbHBkNkZKWmRNZjVnZUVnSXJ5NWtEcDBzUHd4Mmx6ZWpZWkgzSk5acTFLS3V6VjQ1SmpsUktncVJoV294Kyt4citKODdycFA4OElPdHJhSW5MeWU4R0pSSk1aSldnUmVGTE5XS2FJQlVRVGpCMUI4Z25NZ0JqNkx0WEwvTVdCN0FzdngyQ2R5VHBCcU5oTlpqWDlMdG82c2FHL0ZPMHdLZytRelhlb3NxTmQxRGIvOWFIMkxHMkZiVzJZK1doRDgzVitPZ3hPUVpVUFphKy84OFZGaVpBVHljODVicVhpVGhIMmRtdDFsT1Vkc2FmSnNoMU1HbUpmT1RHRCtWekg0OUNNK0RVeWF4bDVLWEdWbG1SOXJYcStuamtTRlRnbG1qL2VDRGpSVzN4U2t0NDVmQ2ZUYmMrcnRvWC9DUmNuWkhDRTlVbVEyajdDWTZEM1B1dFhGd3JSSGQrTVdxalFBVjl3N1RwNXpjZktPSDVpeFp6NG9pbFBIY0gzMVdIdHYwelJiL2ZRNW1zSGcxMEZxTzdpbEV0UkNiUGFVN3liZ1krdmxtMGdsWXVWY1JNc040cVVjdGpFa0c1bjFFQi9BL2w1dWF0Y2tIRUJNbUVKWUJWMDBZVDZBRzVtWHphL1RMYTRrWExYWU9IaTRSSThOc3NwQW4xZElraFAxbGVtRW05d21laDBlNUFmNGpUUGYyQm1lalQ0Q3ZvdVdVbE15UlRrRGRoN1NSTm5sKzJMaEJ6bUQ4dE1PNThTVjZKYWhXdVhqNGgrNlUwc0s0RG1WYnhrTFBzamxIRGhRQkc0d1hRQkxjRGpGa21PY1BuUHliTitDQXQzejBGcVlmWGg2SWpDSFVraU9hMTgrcmxyRkt3c0RpOWtacXpRejYzQXB6VU40RHRlQ0R3ZExIcFFZcDVOSDF6T0sxSlZaZDZmbW5kSmQzcThNT3FVWWRsQkpRZUlsSlBRL1hLR2ZIUGdSa0FheUJhN054djRienZHQUJwcXlSZWdiYXVDUGJEdXhYdGQ2STQ4bzh6OHpHYVVIVUFTTmdYdjFhOWZWOGZ4SzR2SGFWcDJZUHlXZFduSW9CejE5TWIwUC9VU0llbFZPL3Fjb1paSmFTVXAya1crZU52Y084bDBnTEdtVjZONlEvRDQzV0h4RjhuMzI2VWZnTjcvN1RRR1A0ZFcvNjB6UnJwaTVGYVFXanhNL0wvTHFPUjJmT0NPWUlrSTdWMjMzY2JOZzdhSHVCbGcyYkVJbGdub3NhckNBQ3RCMVdzODRST3Q2RWxnSCtZN1dJNHNLcCs2WVRGL0t3U3RlRU8waCs3bEtNbWRuRlJoUUtvZGxLRVljNlY3NlRucDdDK0Rjb2E1Y2VFdlM0a2VyY2xvSVczSmlSaEZOeXdKbVZNeCtqZzB0ajhmRHREUWNrL0E0S2ZPcUQrNUVLVU1paVBpQUQzeUpjZDJvZXZDVmNvd0J1TER5K0d1blY4OE1tZUtqSWt4d3JIMTREVzlzMTY1USsxN0ZmZzdXdnRMcVdMU09YS2c4amNIdlM5Q28wZHJ2UjdIWUZGUHk5REI2Q3VwRitYRkdRUERQc0IyMEMwK2t6dEdJVDViYkJ6R0RhMGJTUXNTNE1KNmc3eDVrZlZ6eTNZYWhGa3RyRmtKdUpyRHltNGlkOUNLcDNQWndkM08wdXRndXdmbDVqWXlYZHlxWFdTSW5heWJjamIrNXNaTW9uSmRiV1F0eGJ6eUVTWncwMXQxVXdjZnkrQ2VJa2hzY0tCck1EbElBeVJod3EwVVVTNmdoc2ZhNmE0UHowYU9DNVp1MkNodVNGbDk1RzVsMS9WYTZrN0lIT1FnVUNxYjNpMzR0M2FhZE5WMmhYSlJyWWR6NFh2ajVxQTdtTlJkR3Z2M1pJc3dzU0M1MUt0SE1SdEEyLzh5SkxEMTRiZHlKQWFlZnkwaWpYTUltK1pvTzR6Q3cyUkorZUd4S3IxUmRiMHBob2ZZaFlnWS9CNTZPeXpwcTExbHB6M2orRUs2VGlsNURPR3VKVGxUNEtML0oyMEZKUnlDdmpPZXhWMWUyV0NBQmR6M3NMS1FxWVBaeGJDeE14UjhnckRDajMyZ0ExTVd5S1h3V2RwUVV0OUwvNnh3NGsvTXFacUxSeHEvVkxtN0VEWXY0bjIvSDVUdGJ3YlJ3bldWbjBkd2lpVnB2L0w1bjlHMS9va21yeU9USVpSSmZ4bCtLbHB6blZYTHdhYWF6V2ZYa3FueEwxWVZqRytHR3U5LzZBK201dWdyRVBQQ21CejBaZHdRRVN4WEJKOFNNc3BvQWYyRXdjQ0xYaThZNyszNnVxcG15bUJqQmtabkVKUFB2U1RwWGIwRlhUU21pNzZ2bTBnQ1lPQnNCdS80Uk9YVnNZbWNiR1RTVkxuL1NaOE1BM0hHNkNodkk3Zml2WitSWVlYOUFMVEkvUUYwaXJrVDBFL3pqWVJEekp0S3l1a3RWcjg4ZmUxSmZ6cXFjLzF2V3VubFJFUk9aV2ZvZGZHcDVybXcxOWZ3WWY2OEIwNEMyWG0rd2xiU09oWXV0Y24xK2Jmdy8xbzJsamM2WVgyU1RaSXZEcGhqenZxTzZHZGlQU05YdG5sK090Y2lPUCs0WW5RK3Q3ckEweWhhNm04V2FhWG1BVFVkdmgrSFkvRldjdHBuMlpON010REdyYmlLa09vTGpadFFPdXZhd3l6Lzg5Nm9xY0pNWmZpempabEkyVTJMRityTC9yWHFvYVBIc3lJR1duN0hZRGc4RHBOQVlUWG1kYUdZZk1XTlh1L3JWUkljUWp2eUdnZ2JxL2kreTBPOVdUYnM4c2dzV3Fvc3Nod3lpWkxSeXJQZ3F0cUVvV0drRjVoMktzYm9wUDR2YWZXOXdIaGg4RkpDaGFybVFxL3JxOXhEV0FvcW02Y0VUc3puejBwY21Sai84dUJWeFI5U25HM1I2YW5yYkZteVA3OXlEdnF5eHVHTUMyT0x4RHEybEoyUVdwK1NwN1hWMDBKZUZ6T0JteWZMQkkrWUw2S0VOaElwVFFiZFh4OFFFTUlpVzZMbk5wMWt6VllMWDFNamlEc2tMTm14WnJXWlFxQ1F0UTEyNGUwbVV5WEttRCtQdmo1ZktkQTZvc0gwUThEN3dWdCt6aXU2ZTNFZHlNWTI2dTA0dTVkaVpGT2g5c2pUUy9IYUt1cGNubmdSQ3Z4dEpHL3luVS9hUG5xNnlOSFZjK3VWLzRiTzRGU2xoemhpcnpLRUZqNFVDLytwMzlGNXlmNldTZFI1a2hEdHRYbG9QamZCZjNMd0ZmWVJrL0lQOGdzU0gzb3BmRzczL2RnS1h2cHpCU3lvWktvd3RjcVpFZEdlclJxTnZJYW9FLzZnK2IweS9xbXA5WkhwRCtma1c3ZkRKWm1UVTZKejBzMmY1VzR3bjdPYVpEVGlHU01qTEx2Sk1hZTZqVGUyU0ZhcUNSL3p3TFRVNUtkc2h2TnpiWGxMQ0hGOWsyMVhidTJYMmxCYThqK2VHeFNGMU5qSFJyUEE0bTJIQ2ZSbVo5bzJjd295UmFvM2E3T0lpK3BDRDBsREsyYzkvTkxJZlZYbVVGNlh6eG1hTjVsa0V5emJaOHgzcGZ4MXJWSHZldTBXL21zK09LMEV4VFFEYW94YkwvRFhsVHNnSDBzU2owRDdxL0Z2eTNRYXcrdGxLdzVXV0FYTkNRTEMyRWhvNmM2b3pVY2FXRk02R3JFTzZVd2ZhZmpIaFluK3ZJb2FIS05LVWRDOWRZZnVON1F5b1JMT3JoY1JvajhGZ1NNazJtOXBqL2VYS2tYeWZkTnhiUmdTYVFtSDJXVTBSdW80akVUSEZ2YndRTkdjajFQRHdEM1VrdUYxdnZUMk1ycmEyNUVPSGJZemhQZ1pZRkQrNUlabU81Tk1PeVozZlYvTSt3WVVibmU5SzViNDRJR3FCclJjTHNRb1FLaGRrdTV3SEFpenFOeGhLNnpJZk82d0srNzAyYmlPajM4VFBzOHNpMm5kcG4wOHo0S0xmS0xMTHdtNm9GN01BUi9iS0NGamc2QUdjc3hGVjJ1amtKMlZ1RXVZUkRiYXAvUmtRTnIvZkpqb3BUcCtEVEVYV2pNMHAvVHIvN2ZmRFBUTmkzNFRLS25HUmN4QU1rbWtRSmxvRHNMRktzN1ZmVjJjTGNXZ0xZYllSQmxZZDB4c3BWaWwvbUhzSGhPWGZuMWVnRHRITkI2T2g4aGV6c0FqU0VLU0VyeUExTlFjenJDYm1hU3M5U0pmWVczU2tHelF6NHJSSkxoMkRDYUNrc3g4YmIxc2JtbzlFN1h2aFc3aHJ3S2RWbmJCd0JNS284NzFFNWZ0d1htcE1xNGRpVmRaSEEyekZJa3AxdkJZMEZ0TjVOWENoUWlkY1Bja0ZYWGhtdmhWdyt5N3V6M3lQNExNUU1xREkzejltajBiS3ZJdFFKVVpvM0RzaUIrdTVxSnpHNTd3c3pIR3JpR0ltV2VINVc0bThmNFgwSDZCMEtZbWFNeWx1ZnpjTUMvbUtzRDhjV2xKb1RISXd4elpONFRhUDU5dHNaSHRGZ2F0TjhYdDVpZUV3M2NDUnpJZHdwcUpUT0lMejYxRlNaL1A5S2RyWnFyWi9vRVppU3dKMXdBMUJ1eE4yRWZvOVI4M3ZjU2Y1czhnbzRZTGpWbXBqWVlKaDhJc1Z2UWQrb2VGcHoyenhLN3I5aGpTVUhhcXFEazhkcEZqaUxubHBsQzl3VWtIUTI0clN2VGtpOS9HUDNkcUx2YkFVUjNhclVHUzBaTU1iZ3ErSFlUSUJKTnVZd3NzUi9EN1gvRzcwNDc2TStqQlNONC80Z2lvcnhWUUtJaVBVNVlyMkE5UUxqYkwzNnpJSDlUcGdHM25NMDFiMUxxZEY0RXU4WTREZVpTUDBXTk5YTGpreGw1dmZVNklNVmNseXFiby9zdFF4aVRnNkQ2QktjUFA2VFdpek5lWFk0UG1Ia0MzL2xpT3ozWHA1RmtLNzdSOVFhNk1yUkJpSHNSdzN5TGkzQVBZdlAyZ0JVeW9iRmFkOGtzK0doOFF6MngyK2dybk4yK0JzMEJTR2J5V3A1TEdQOTRiQjZVQm5EUENsTmY1WG0xUmNLeENxTzVZYjJVNkRpTXhkRHU0OUsyQXFGTkpCTDNTR096a3UzeERVT0d0bXpxMTNrbmd1YVk0RVBudXFhcXd6ZUt1a0lBSldlYlBMNUI0cTNtdFJTa1pzUk1hQXFUaEpUY3N2c3hyMTE2ZFJ6L1U4Zyt2SmxSN0x5ZEthNldEdVNNOXJoNWEzV3M2bXRaZ3NXdjB0SlQweENscE5idnpNV2FHZlJLUFRUamZOU1FTdnQ4dHFBa29raWRYUDJrblkvbHh2Q3Q2R2Zkenp0OUUvUGxqVCtRVm5ETW96ZnhNL0tTU2dlMDdwZnErU1pBR0JBUjFoWUJ5Qk11R2N2RHp4VDA3NXBoUS83cXRVaWZlVE9HTXBXVitBZE5xczZ1REt1YnRkUytTL1puODZsM1JXVXdmUlhZWFZ5NWsvcUhHOWF5WUtWbEVEckw3SzVUeEl3L3p6bUE5elNJbENyVG9tK0puMlJpUzNIdTFneXl5SUMzMVU2UlFBWDI0cG5keDdFaU0zaTJVRWxKVFpUenMwWS9uekp0R2ViM3ZvaUN6d0ZxTlZXUWhTa0NQT2ZDNXd5ZC9xY3BoajJkK0dodkxBTGVmQmNnMGdKVVFrbVc0WGVBVlZlcDhqTWxmSFB2WVU0ZS9VNjhxNmpiZnJKL0NVNk5heHp4R0tnemovWWpWbHM3VmhWVm1hQVluVjIrb1FPQ1JFUHJLaktLdURWZ2NLdStKK08wa25rMkZnTytrbHA2VVdnTEIzaWl4UU1ZTVVUa0l3Uld2amZMNUpkVWc2V0V0cGlPVEl2MGVIYm1tcEtab0RrLzFDNmMwa3JITTZTcmdzZklLUXZaNXdsUGszV3dwRTBWMzAraEhLRkQ5WUYvSjFYVTdHRlpCYlNiTFZiekxTT1NxaVoxTXlSWTdiaUQ1QUtFbEU2c3dIa3dHOEV3R2JSTWhqQnZ5RjJKcHM2TFd0cm1vQUJDbGE0U3hUMSs1ZVBxQ0h1bUc2andpMEIwMHNlOE5ZWjc1c2RTWXlIZ01BWVB0SGRUUDRiMFltNzNFQzgyajNPZm81NEZOU3kyTzFWYWRNN2JxYzZJeTFUWFJRdU5WNm1VcWl5djZ3S3N4ZDVSaCtlQVJpRWpkNUFvUkNEY1dvZkpOVGlZQnZUMnFITnBNd0IzZ2l1UTlUdHRvUVVaL0ttS2JrR2VETFJKL1RrdDNqMTJIUnNzK3Q3WUxXTC95NHh1RElzRmwvcllMcFhKREFQQUpZc1c5UTZidXNiWDQvS1gzSldvcGtXbFV5a2VDQmZIeHBmeVZ3d3oxU054czRDT2hEbFRLNmgxSUJoVVJFZ2IwZkxPbHJ4dDg0bkF5Z3p5ZmZqR0JuU0JUWmZiWE42RU5OalUrb2xDbmRtOEx2S2Via0lhMUc4R3dKQWdBSHcrUS8zUVIxazZPSXpRUzdzcUN1SVU4K2wwWGFLQjcvS2dGc2lDT3JzMnpXektyaGtGemhubUs5SVprSzE3eEcxdHJWZnpPcjlZak9CZTgzd1R3SndRT2RET0orMW1KaHQ1S2k3STRaRnVUd01qYjlxMFRvcW0xMzBtTWlkUnY4YjNYbFBWV1Z1SXBaQVNvdjAzVFNxL2M2UkxtUk0wdk5YZWcrQkdQSUtabWxvTDRTdlRXUUVtSGFwNHB3bmRuKy9XOWd4c1R5MXRzeVY1NE9wazNTU2JIQ3VXckdpbytHaElNRTFHVjdRR1hCZEhJR2dxOTRoSlpJWTJpS2tsUzRoU25pSzJ2WnlOcEFGbHJqU0JXZnE5ZzA3ZUtYdWtUOVp5U01pdS9rRHVCQ2poV0RTSEp4QjFJSjN6N05vbmo3Nmd6Y3lXbVM4YXNRZTZLellPZUxESkM1QVVhKytvUUhnK2lCV0tCb0pWRFd6WnFGSnJ4Z2FHSjI5a2tOd2VJWVFVTWhoUGFwdU5HSkpWNDN4dEFaY3l5ejV2ZEpCL3BDVFhJMklkS1pjM1FWdG9KRUZ0SkpMK3NmQTJTWk0yL0lNTkRKZ0ZhamtTWXNmbkFiTlFJeHMrODl1QXRKUVNKV1dFMDNVVkxoN2hLUWhiRHBqMlRUQngwK3k4RXVJZjFrSThqamhkSWw0MFpqMVVSWTUzMjhlTk91UFRoNEtKWlV0ZU5oYjhVem9CZ29PWGNNN0dJOWJNNDdtMU9yVnNuOTY5SVRnTUlMQWZodW9iZFdTY242eGR6RDFPSGZob0JKMlozNHlTWS9peXZIVlFaS0VqenR4YVlVdHFJaEh5Z29BODh5Vy9EOVpHaXZsMDJrZWN6OU4xSC90NndvOENtQ2UwVXg3TVl2NW5ScmlsdHNhcnZoWFA5aXdaL2lSaDk1QXRPajRZNjl4ZXJGWE5aTjlVdUU4VEQvUnBaRllXc0t3cXk4cHp1Z3NyaWVFQlpXTmh3RDB3RFE2TUhyT3N0M1Yxd2phbjkyZzJSUVJjdHY0SXlsbkhZSC9hRnJZNk9iZTdvY0dtMjFIYmYyQVhjSnZrRE0rU2k1bkZxM3BZbXpzcXI4Q2N2cDU2NHB0ajhRTkg3cGl0S1Q3NTgrMzhpakQwOGtCeCtnVHZnK1plU2o3dm0xUGZsZTJ3TURKZlBWYVE4M1JQWWI0SXhrWmRrMWZSazVKaXEwVmcrZzNydHJJR2pxcS9YWVFCZU54Wks3WE1PK2NPYjVjSVRudWkzWHV6OUEwdUtWTkkzODJTekVUdmRMeEo2MVJLVVQ0aWxZemRWUitGaGZGak9hS0lVUERpNjBsbWVCcGJ3Rk8zbHBMbFIyZTFWY1JNemNiOElWK1BsNVV1ZlhBaFcrSW82eTM3SExKQVBFb2d4cHZ0MEFWc1FpYkZ3VHE3QTJJN2pzMXZMVmRrS2Rtd0JrMjVGem9zYk1KYk1LcFUzTHJ2eFJMZmpWM2gvRkc3VFRFTXNReW5JcVJRdEJsdHBsSERVUTNkbTVLNHdoK3BxZ0pGV3FsNWZzOStSZ1VFS0duMFZhMU9GVzFvWjhmMGhXRmVkNzkyVGJUdDViZWp4amc5ejRoeGgrVkwvRVpYdHZ3QXl2a1htTld3dzNMNXhHV3BTTHlaT2c1OEJmY0RDUld1cG1KUE4vckFZSE5yNDhqdzZDUFp0TlJ4aDhBTTB2Mzg4ajBZUVdVcURpb2tuYnRNdG9wV1pVeWNpOXl0a1c2cUdwaXhkeDVEU2p4QUptdk1HSnJxM080K2hNOHRra1cxSXZoME1yWkFWSTUwT2NVQUx0b0JKa1FvVGtNeHFyZlAzNVRGMVJsNG96NS9sN0dKOWY1cHhOVlZXdVJLaUdTVkpTdGRKa3lxN1VEbkJwUytiK3czekdBVTNCRWlheDdLMVpLRVY3MHV3d0xKeThWQTlPUTZ1dGxaclJ3WEdJcGZSZTN5VmVJSEJjVmtIVmVwQnhIL3BaTHRUeHRhbUM5TThZUFQ4cng1Tkc2MURlVTBCdzdmam15VDYzUjVrdHQ2STR6Tk1MWmdPSHZsWVk5UTdhOS9Cekc5QktOWTJUV1g2M1ZEd0lZTGIvVFQrMDB2N1VVZEpiMHlYQi8vVXVSeElTQ3FYWklsV0l1RUxFZzdpck5PcWRUUGJETUtYS21nbDBXOHUwL3FqQTBMaWJ5UlJhNm4zM1VBaTBYYTRueHJuUElZd2dJN2FadWF0UkhqOGtxMXF0WW00ZnVXV1hDWHlOekNGamtITlpNRzBPNmdjM2R4S3RCK01SRDdRelJvT2pKOUtOckxzN0d4SUVydDBKQ05kbHlBVWkzYlQzZ2RudWFJdzM1eU5DUWd3YXNqdGlwWk0xWkNXbEliOE1lMVFTaTJ6T1hockh2OXVCREh5S3VEV3NpRGV3OU9ONEMwTlJJQ2NCR1NYK0hid2srUW8yOW9sS2VIN3gzYWpCT3pGSWZ5L1Y2M2x3S3RxNkQxUElrc1pMK0orak9HaGZCTlJlQmdnVlcvRkRLYkpxUXhVazdQaHExL3k4Zk9zV3J3amY1eTdoSmtYbzRMQW41bWlTOTBsOU1rbDZCbklBUHNIOU5wVUg1UThxVVFvdTB0OWdQaUZqVHlxNTd6aTY0TlBKR1ZiLzRCTk9laVFZaFNxWWpJNXd0S2xSUHhQM3NkYkpWNHNucUJCc3lmUEJDd21uUHp2amtacWc5UkNFUmFCdk9GbzFjTmF4T0FTV2wxajFGb25VWTk2N0o3em5GMGtTL1I3RUVNdng2c1JGajBnbkNUQWFRNkFpVm1pWFV0VXNBcUVkM2tnejRzUFI2SWpVZnJOMnl3bWlEN0tMaHN2Mkp4Mm1nQmRvZHJCVXBMZjg5ZklnMXBaN1p0T0VpbGJsUVRmQVg2aTlpbk5tMlQwRzQ4UEJUOEJjVzRzK2lrTHArTUJ4NC9BcXpXNFRrbzNPdWdhRmsrVGpxWDBwanRxR3JVRUUvdHZsdFRWVlVDUlppejllZS9FNWgrdkdHMTZJSFVFRUI0UWhnYU41aHJ2THVSK2F5a3ZzQnQrOEg1d0hrd0dsVXJab2YxMWdpdm5kWUFFYVNlV1NoNXU1Nnp6U0dLU295RnNjV2hYcHNDcDcvSDF0U2pOakZHWWNXS3Npdm50QTFqMzFyTEliSlFxcGRqWUwwNloxU3ZpeWRJKzhhZHpidlVnR2krMVlOcnB5NXRKN0NzOEFiNEdWcndsdHFQNXpPS0tHZldJNUhXTnRZRnN4R1RaQzNnNlJnZHIrSmVlRDJnNmc4eGFkQ2RQOHkvSHoyTlJXY1NrRnlWZ1BRMWpkRDJJLzlhYk5OanowRmlWQkUwTncvTCsxb0FlWnVYSG1xR3dlU1QwdXpCUXplb0N3VmREWTVRR011QlRjQXJENWx5VlZ1UWZqZGhLL3draksyYTI2U1BMeWI4Q1pMZVA1ejVYaWNxQ0ZyeUQzbktiMG91MTQyWTFQeTBBVVQ2WEF3V1VscWFuZ0lpRytQZW41T1FNNWdaVG00ZERCbDY3ejBJR093WXlXcHdXV3E2ZVNsMGFvZzQ4Y2g1Mk85QmliT2dwbmVWTU93Z0pYQUZOSEJLbWF2aFJzeWM4b3EzWThXZGNIUHQ2OGZSWW1aNHpoWjZHbGhtTFdLSXArNGY2SWVrL3VCSWRCYkhxSWJLa3NIcFFtL25MTVo4SE85bmdyN0VaTThEWjZnaUFKSjcxVGY3RGtEQkxDYkxXSGpYdWRoZGF1bTJ5ZlJVU2RFeHpJUWU4UUNjamZRRkFjOHF3OTFUSFhacVp2eUluNngzWmRmdkkydUZDcDJiUVRCSVZ1MDdsdTJZU0FLb0FyY0F4R1A3RU5DaDZscndSbmRqKzN1b3pMOVQ3VjdOZDRWSTJINmpVMHh3cEtoNlgrYWdOelRpbHdPWEtEZDBIeVlJQTV3dkliNUxPek9jayt3cmZ6WU5FQmwxYWQrUmJaa1hVMWp2ejNKVHEwSVJ1dEtRMTdmNEswMEQzZWppNHdpTlVwcjFrMmh2YVdhQkFkMnB6VGJLckkrN1BTN3hyK1o3UGd6cDJ5QnM5anJtOE0rL29hbGxrdkViNldXWEJVSjFlZTZGS044Z1B3bG9LaWc0T3lVenFxYmpOWEdyamFSR2ZtZmk3ZEdNeWY5NkVCYXRaY1greVE4bmpwOVJZemo5bmVlTEN1QjVJbWJ0bi9FZDBnbXhFVzg1elMvN1RrdENoNWwwQXl3U1pJS084VlpER1JFUU9TNng1WDdnbUlIWllNWmEwSnF5c05WV0E1WGo4SlBzYzV5MEgrd3RYNjZUdnluY3pzZGV2dVZERmsrdFBvcHI4Szd6NmNkd1JiOU9Ldmc0Q3BFaXRNR0FWU3d2TTVhbWdsaEpnZTdRdmVHRzNTZmgzMHpBcWhXV1F1bkNXcDVnZURGZGE2RUdtdUFIZG5LNThxZ2ZWcUJMWURrY2srNU5TMUpKQ3BocDhZMEdjUUVPbGh2WU4vTHo1R0ZBS1lPQ3NlRmNzbng2anQ2OUIwSXpKblVBWDVIZzR1RTZsWHpydXB1Y2xGWG1HRnVIWTBDZnRJTVAzQ1VMa3lkTG04bDF2M0oxVUNFdlIwMThhSklHZys0L3hHM1ZtWW1ERWtjTFdvQ0NCTUdZZDNaVmlpQUZJK0wveDdiRjBnWGdLeUkycm9DTnVpM3pZcFd1ZUIwb01rRkE4TmFZWmxpTnpXMzcrZE9qUnlGVHJsQUQyYnplTm5FNzFnRS94YkQycC9zZVlES0ZnTE1Ea2FKOTZUM2NCQ0dWeVovcXlmNVIxenpHZ2FTU0YxSU1NU2JVR01jK3pNUVBWa0V4MFJIeVVHMlltSDJzd1RNZmJtbmZ2dkZjMnhoRTA3eWtPQ3RrV2hpQm5GSVBpVVVCNW8wdjVCVEQ5M3dtTS8zVGEwYUtKcThEbitFQ0FUekgyekhma25aKzN6ck9hWG9XM2hqaVpVWUM2UXA4ak9rNUptM2JNUmIzUTcwWG96S0VmRGVmUGV3ZzhSVUN6TFZmTXhoZFppUkdvSlcxRU1GcHhORzMvYTcwQmUvTGgxL3dlb3RxNDN0bEYvZjRqUmpsb1E1SkpmWHFSWDhheWRyZmtoZzE1ZWdrQmxaeU00cmNaSkxjMmNibnhUeXdJTkNqa0hjVkZ2YTV5eHhJbVptcXBqSy9FKzVpbFBZaitvZk5Oazd2Tk95ai9uU1BtQVVPbHk4dGF1RGJ5dEFXUXNNU3VRNGxtNGpJUUlmTmh4b0VHTFlLd01UMFgycWk4a2drZUZxUG5YTHhoRlFvb250Q3hleU9zRVR2cFNJNE9MeGtselY5VzhhNEpuMnZ1Ni82ZzVTNHoycXRTNzRaL1ExOHVpdW42YzFLTGtwb2hyV1dYWnNqd1hnWFhHcFVJdkZNWnowQlNoOVZKRHRyNkVHSkdJSStsOVYrMzVEUXpTdElRbVVsdFZybGtHRnFKNC8vcDJFdWxFU1VnVlpDK0lpbmdTT1JaZGs1U1ZJemE3a2hMbEIxWUpNaGFaMUY1THFxMEYzZmhPOFZ6SzFYWXN6bUVkSjhZNlJXalExMDBFZlZ3U0JIRmtKUzlnM3JSdm5BajJiMjlyU09LM0k0eWNOSGVuQWowbXFLVDczRkExN1EybDB6ZFpJd2daQ0ErNDVqc2E2ZzdUemZGSE1Zc0hKdThkaDdkemd4cHpCUis3YlhWZGsyOUFZL0lQVVJGZXlPTkQweFpaTWx0VllOR1p4Yk9CZXNFUHB2ZmVUN3Jna3R3KzVnamp0Zkp4TlRsN2lKaWZXVTRwVENiZ2dmY0M0cW9oV0FYOUNleFgwWU4zbUFVK1NJdDJPa2NLREkzSGpSbnVPTWdaTWg2eDIyUEdvQmtIaVgzaGtvaUFkNlg4aTV6WVRDTGFXdndWMWhsNjM3TFJkdnRqSHVYKyt3Mkx3UDlUekRORFBYRFpmOHdWOTBLUjA5VUY3b2FZN2dzaGY5MzdkSnVPMnI0UENRL3h0S3BjL1NyKzVHNDIwcEFzQW83T0RkQmRDOWhIWGhWRWU5U3lHTWVwb2lqUE5hRlRrQTdPaUV6RzJOb09xNUE3WHpyb0FHbXhUait0N25qOElKdERoT2h2dmFiSHVQd1Q3aythL1pleFVMZTFlRWRPNzFjeldDRTROS2RpUVVjTm5NSjVEdDhtNit1MzV1UmRKcDJZUDF2UlZZT0JVcGpBUVFDa2tHc0xYUmFQNTdHNlNmY1dtSEVpREZjS0RuOXpvZlVvdHB2SDVtU2E0Z1B0akhneTNhakd3WGwyS0t3b0xIbTRCTFJJL0VtcEl6ankvYW4yZkticHJHb1BhMi84dytHMFBWZ1BXdjNraVN4UTB0NHBMMEpnZU05anU3bzRoZnMzRC8wc243TkQrU3kzdUdvQm9adGlZWlBmdFBPRGZabTJwQ2pLQ3ZhaEtTTWxJOUdtMTltQ3NNQVpNdCtOaFVZZWhxYWRGUkY4OUhvV0tHeXNqcmNjV3oyMFZvdWFJdGpsOFdEK3o3ZTNReEx5SVhwM2NiNFFBa1k1WkdtZk94d3FiL1RaN0VrNnFxQVRpb1l2cjkvaGpTd3djcjZtNmgyOXYrenloK2ZCTEhqLzhDOVJJalBIK3pBdDJWc2pabW41bTJjYlZPQlJTTUVUVldLbkRhN0IzaGNKWDF5dXRLTUJrTk9GN3dMVFZVTitxd3NjS20rVlY4U25xWG1LTDM3OW81Y1hRT0Y5NzFWSUp2OVRlR29tL2xWcXpQNk4xVWVJK0dyUm1XL3RaOEJUeDlZOWVML0JTdk1CUlJoNXVJdk5UTFNUTTg1aHBzZ0dkNEM3Tm5lNVlQLzYxbXJpOTdOVnZLMWUvVXFUdXJNdlVRemZZZ09GcGJ3TGFqdDBYMkdGN2dJNTRySUYraVBOdHlqQlcyRDlQQ2ZUSEJSN3E0L0tpVysrNHpjZDBJSUR3SFhCaHpKVE1tcnNPQ29qVGNVcVRZVWxuZGV5YVdVbUt1bFdRb2Z5Qk1HRko5SzZUbUpkZTkvK0FUSG90MVZ4U2hVcDRuRmtOK3NBMnZ0NjhheEpNa1BYbk9JM0lUeGhGT2RQaVFLUGpCaEg1d0R5bkxnN2N2dVRaMHJyUG9NTkZHcGg5VHlhakpWQ29nZ3RadjJXN3F5MjhSMEFhemhYaHJmbGh2aVBzeEdqV2ZYU0xBU1hzbDNVNkZmbTA0NGVKc0wwZDFROG50ZzZKNWpkWFB2RFpxMG9jZEo5L1VOM0FpeHNjcnVidzMyRkFMV0pZUDNudE5BR09tZGxmdlc0YmZ0cWl3aUJtRXJsT09wS09VQXNJTndBNGMzZERuRldKQzhXNkJYdmtBV3JXb0JITW1yU1o3V1FZVDU5cW5BcE12Sm9lYm96ZUJ5L1ZVRVgwcmg4MlFYNHgydEU1R0UrTkE4WHh3UFdnNHE3SjFzZnl0Zk92S0l5ZXd0UzZiVitrNXNvMGdTV0paaTV1WjZ1bUs3NWtLOFJJUTVJU0c5SzlYKzJxZVQvam5QenpyczNjWUtnOG4ySUl6MHplRndWSU9PcFVaUDl5cEFqTEZFbTVOQ3lUSXczckphQlNISC8yU0dRbTZsOStoRlp1b2JHTnpGYStzV2NLdG1jL1ZhN3Z2WFVUdnhYeDJ1a0pVMm1mRWRlWCtzVHdCdWZGWmRxQ0w5K0Y1QW83a1h4cWI2Ymsya3cyLzFjUlFaVlhJaDJ4d3hEam5iUm1Ua05FQ2NMTEtrd09vaEM4UEd5eE91ZGlRZkVwR3lhNG1aeG5NWi9JZTZmc0dKeHk4RDI3OFVYSE9ab2RDSzNpbUd1eExUWXZJODB1eXNmNGJhcnBiR1BqU3lDeGxscFZWdzdlYmpoNmk1MFp3SlJFM3lnZ01zL1hiV1Z3ZVdybXMxcXlyNURJSTVkTWk4WnF6ZHRtTzJEamQ4UFEvV0ErNDBXWDNoQ1hYeG1ZdUlUWTZESmVaL28wNjRWZEc2dTRtRkdxSGpsZzgvRFFKZm0xbkF3a2NCMWxZS1ZpZUFkRWNTdVJYd1NDQ29IODhvOGdUTndOL0ZQUnF4bXhUOTgyaU5BNWJvZmlnbmdoTHZlbDBGMDBjZFVEUGZBSGtKNEVBU2JvV0FYMkN4VnRkWlJya0JVNWdqcGkySmtWbjdzUE5kYk1FRkdzd0N5T3VXWTYxS3hiMEVQaVpLdmg1bmY0QzlKSHNlOHJjbndYeGNkQVBPb0E2OER3UmZCVUJ6bHd0N0dyUXg5RUhWMGNrcnhmVDc5bTBoVkJxZXRjNVluRGg1VzRGOHA1RkYvMHI1eEpOajBudXFEcU5EWjBCRDFmMGp1MEFsMkdjMGJxQzlqZTBTZ25rek9kQ0d3cUpWV0FhS2Zrc0NXZDFIT3pJVU9xTDNKSGN4a1hyeDdoRVR3cXJUSCsvZ3JLdCtwaHhJN2lESTJCdFRiU2ViekJpRmoxV1hXTEZWMHJkendEbzlvVEZrVmtpN3FpU2ttK3RrL0M4YWNXazkwd1BWSEJLVTdkRHc4WXVCQ0JBL2JpYUx4UDE1VkEvcncxSTZ0aEZ1eTJDeU50TkpzYTNWWklrdC9sb3NIVmM3dmN1bWxDSTBScUJEYStVSXRPa01oaWVVMTcvM1RSOFJBYjhXWStuNmRkZlhjazFraldtZmpDVkJYblpXQzMrZDUvSERyWE05c29mZFhQSzNXWDd3WXp0bVNWMnNTa2lvYmtyNndWVUhMdU9OSys2VEpFWFZVYzJaanpuQlYxZTJjTHNHMWxsalYxdFRRMGMvWS9JSGc2a2t5VDZOdEswSC9qTTh1bW1WcE04bU1IUmtIYzJabnBLNlhFWk1ldnpXTnE0T25RUEkydmNDRFlEQVRZdFVNam1OWGw5cjIvN0NiQzhUanZBSlVacTQwcm5zQnFRdDNzMDErVVhlajdEUm5qbCt4bjFFOGt5NU5Za0V5OUNLdWg4VDNmQ2JqUFduUHJ2ZEFJU1N2OG5DdjNHcWRWMmNhTkpCL21XYlJRNTVIbG83TDlyaWQ2UDU0VEpMUFN5K3dydUdpVmJHZURCbE0wSDg5OHhQYW9GNkdjVjRGWUpjeGw1Q0RrUUhuMVlveW4xYkZhTGRjNnhwUUpaS2tZZy9oTCtIcy9pbFFFYXU3V2lCRXkzaGNuZWJGckJjZHA3UnVEWlZEUHFLZzFFamkvL0hkT0tsYW0rV0ZWMmVhZXdiTkI2WVpvWjlPdDA1eVFGK0xXTU0wMVFGTVUvQ3dINVJjT2hWR2d4OXl2dkpiWllKTU9HN3dhV1RFdklqTWpQcXFZeVM5T1lWbUoweEJ5T2VaUCt5TFhPN1ZhOHNwSTR1TW0zTm1CdytIVXovWDYxQVFBZmxyMkhabkJSblcwVFZRaHdZSDdRcVZ6d0tya0JNWm02d25DRy9idU4xb2dJendROW0rSXQvNDBmekp5aVlSazNJSWU5SVYzWVpqV0wrc29vb0svVWNycUR0dDhtdEUydzFoaGJpTjNqWHQzV0RVMExCQTBqUWZSTE96WlpnTDVYaWlPanhRdHpjT1VQVkpxNzlZZDhMVmFEdmNySjIvZkozSmRSa2NRWDhUZjI5bUpVZjV2ZEJOYUVCWFZTcUtTYmlZWjN3aytIbzUyMmdvNFg5TjdEMkN6WGlxSElLK1BMYXgxODdjQUtGeDk5S3VjNlJEMjFkQ2hFbW42WXlvblUvOVROU2tzV2hmYVJZTm5keWVhL2VYcnR0bjhvbjRrY0VJNGFnbnhiY1ZYNEZkS0VlTzZ2cUdFZDVmdWIyMkdjcHpuaHYxWm1CRjJoZ3d0UFRObEFEY3AxcEhyQlB5ZXhVY3hIYUQvZGUvZTEvSVNpc1RYRCtNK0xGcE5kYktSUlBuSlhqSmp3REQ2N2FmOThmTTlGZGEyZlI2c2ZQRWtrM3RQZ1UzVEZ3eGpsRmZPc3JUckhSVFlGVktyMW1kOHlmUlg2dmJjc0RSYmRjRDM1YUVFSlMydzlabGdXb212TmdwakpKWWFqZmZ2MHpCcXAycGVsT1NIQUIreDE0cTR6Z2IwMFZ1Y21kRXRyQUp6TC82LzlRbWtIa1JSMVY5dzVQbjFsZFVOUGFyejcrV0lMYkdBRkpuc3JESUI5bThrbzNlVDNTaEFtZjVMd2RjZjB2TTI2bGpnT0JtTnA5Y09IRVM3VGViZEtodU5KWTh4eEw4b2tWSzF0Umt6NFE2WmNjYWx1eUJ2cnhHUHQrSTdEU0o1amorK3I1eVlvSHNYeFpxMC9wZkJjMlYzNngrQlphTGRLQ0VrY2hFVDdXL2VJWDFTbG1jbkUrYXB0NUxFYTRhR1BnbzlsQXJEZTl0Q29TcG9sVDBBWHJRVTRXZFNRdm8vNmlycm9TbWlkek1qWkF4Qnk0dG16YkVTM01zSTVZNmUrdGlzK1A4Y2wzQVcxWi81NEVSY2ZkSFRwZnY1c1k2L1MxR1pTZVZseGh3YllJQ01KbUdRWENjbWw4aXRvdTQ5VnlRYjE5b2MvRE8raFFUNWVnODZuL3FlczVMVkhtMDhtdUpTQ291azEwT1JJRDdET2dmZ3FERDNXNVllcjhXMmkvcDdpMnlOUG5vekk0S3hQU1lkamhXSFB3VUxMeFZXWHlqS2h1WXVrR0IweEpkc1VVcVh4YkEvQnB5b0hmckpxaytpN0JzVWl3T0pwODBUMmlUeDdBM293T2JlNXE2dWhRWFFnc3RzVkpCME5tMlh0K2JQTlowdGdYaDc3aW1nMkxTQTZnbTZQMjlGeFVuRWxLQjNaTGwreElWTTVTNUJFZDh2WlRVZWlKSjIvMHgyc0c5V2Rrc0V5TDVaaEc2N1ZvcUdKd3hxOW1nOTNVMFNNWGtmakkxVk1qeXM3dXR2UEt2d1dCVlI2MXhQUnNUb3hMNVNKdjlRN1BoMnlvSzVwcEoxWHpwcUNwZmEwbVREZ0g4QjNTNzR4MVg3ZzdqNlRwRTZ1RU82cjIwTXJsZ2ZEdVFpVG5DaEgrSHlQYkkyM0dHVkMvQ202eEo3bVFLZ0MxWW9vVnVGYmtJdi9MZW9GbHMwT3ZLbDE1bi9EL0JBaEtPT0JSWElJaENrOEpOV21iUVIyQmVJcGF5SkhhRGw2UHcyZ3Z0YnV4YitjdDRJanVSMFhWUXZ0L3gxV1h2YjJrcDVQcHV0bVJ0WmsyaERBOHRsQ3oyZTJqNHNOR2paUjlaT1lZY2FuOWtyWEZaZHlZcTVHTE03WnF3WHo3UlBZRTdsU2JiKzZBUkVIdFZIR3pFWHo0eDFaam5laXdKVHBLSHhwQ1Q4NWVEN0xSLzFjZlpwTEhHWStZaUcxQzk2amc0N3NxZ21rc3lPZHE3NFpDOGZGVjhNSkFhbnc4UHlUOUJoUW5YWU5IMmVlbVB5am52M3FWRWxncnFsUTdNWFppdlpIQlhiNnloWHRkdkJsVzd1bGtNS0VMbFAxTzFtdjFvL09MYkJUN01kQTBYMk51cmE3amNGU2EwOG5WVEprK3ZudXpsdmdsVklzYWRTMHlLUVdaNGZNZTRYSnpxWnVoTnQrNHltQVZBbkl0Uk81U3dMck5XYzdZSjFmdVA1b1hRUGpSVmxGQkhMRHYwbU9zZDVKektqMTlBQW9UcnpxR3JNSmlBdkVtL3BQdkt0WlNyc1k0dXI0bkU1eDJuNGxlUnl1Y1VrbmVvQmp1YnYzVHBBY0RrS0NSTDR5YTRJdStwWFgxRjRZOVB6aTU2NzRjQmZ5UkRCZU1IQ3BOWVRsUldPb2FBWElGcE5HQlBDcnY3QnpVSWRadDB6UGdYWmFVeFhMTTdQQXBKVXcyUW9aa2JtNWtTcDBYY2JCMUZUK2JkL1lRUUdDUVdCZUtQMkpwcThDb1lheUpFVytWd3FKczZyanl4OWdIWW5YYlVKeG9INVIzU0E2SUpnZVAzSng2MVhoWGxiUFY5NnVHbWZkaDBLQnl5QkZ0MkNEMTJMRURIWWo4L2xpZzV0Zk1IaENBamNNYWNob0pqaXVhRFkySVZsblFXZHVDbmxyMmpmcnQzSVl1TGNtRTNQRHFBRndpVHoxQmt6d05RbDd3WFRQdWI3aWtqc3JxdVFmOUg4OUJIUHFmOUdFSk5Kc0FpVEZZajRTMllYUjlQVW13MDFwQ1pOWE42OXdQZitUa3R5RmhKQm80YjBQVm94THpURnJvdFQxR3pVN3l4M2pEOVpSSng2TTVBY3JXVnFWWkJJUHYwWUFxRG5kb2daRmtGTGdLV3lkM1BRMkJEU2ttUk81am9KK2svVFlBTy93OVh1VFllNmJYSW1vbGllZkxDQk9SenB4eXlvV3lZd1Uwby9aLzdPbWgySEV4SVFyRGtXc2htL1VPTDlnK2hmelRSc2JwNTlIbDNPaExraEdqNW5FRnRFSFhXcUJHNVdhVzc1MmRGQno4UWw2WFZJUFZLY29MYUxNTXIwV0dQb21yVStPRE1sU24xOE9ubE9keWZhUmZtV2tlTEJwZEZhcGpHVFZ5M2U3azNGMkdiM1dSdVlTbWVMeGRYM2g5ai9jcWJlS1c5bHpma3RLVHBXdDZqbFlCZ1M5YnBCWGg3cWNBSU9vVmhwbjFEYS9QdnkvYXVjM0NGMEZ1MEluM0VDdlRCelRZMmwyUnZaWWs4cGw2VnFaclV0R2djRDhVL2xtTytsVDgxcDB4V20vS0dOeWI2THVpK2RHZDFaaVZkNGtQdHJoUkNZckpkUGVGVnVaMDR3TFFsVlhrMTZzTHNyK1ZnL29DckdZLytCVFR0bkJvRURKNXV2WWZ0SGw5VnBhZGwvem9UamlUdmYvUVpUcnV4TGlxNnhqVmpnTzZuSFJxemttSGhBYktZRlc3SGtxY3A3WVZQM2d6ckNySi9PQWt2K1FuRTBVYmpwZFFxcUd1bHJiM2dhT2JXM1RxZWJFNVNKTEVESHczanNDbVdOdFNQQVhXVDhtZGlIWjdyOXF1NE5VL0ZRTnFUTEoxOW9LdGVsL3kxM2RkMGRZakQyRms0YTlmVE1KZVhhazlwYk8wSXVwV1NGSG83U0c1SVV2VmVBWnRPR2RvNXMrVTIzWWJSKzRZOUI0d3NSSzIraDJjRTg0QmducnZQMDh4RkgreDdlVUtFS0paZHhDcjdNckVwZ2xHTUE0eU8wWU95NGo1RjFjS1RpM2I2eTFQU3hqanB2OWkrVDBlakhuR3FlbFFMMW51ZU50MnlmdmFYc3NTbVprNEpvZkd3WStNTEcxejQvTHhyejBMMGd6MlNrd21hUm8wVS96RWVzdkxneU5nWUhCMUdaUU92RW5McXVUb0xYT0FVV3ZqaUxLMGp0TnZTMzkzdmNSY3J0OEowUjZ3UEE0bFFrMzBZVmZQQnZSOWZQeWFIanpmRGgvbS9YbS93dTZMWEdDSk16QThZN0E1VmVXakk3c2N5d0M4MGJSREpPSnpMMTVaaU02Q1QrK3BzNWhucFI5bXc0cFBmWEtwVFJQNTc0a2wyU2M0OThHaUo5c2w4dmdBL1owK2ZiODlOYlhBbkhOZS9KbmZGUVZOaUlSREY1ODFJc2RjMTYvWFRDOFhvV0pmOGRUMU1vV0M4OGh0OWhzZ0h6dnM3K0Y2Z0tvOGU3ZUlwS1VoUmZUUlJnUml5VzhzSk54cG1YVTYyWnJGdjJ4YjJWdVNaSU9nVFJVbmEya21xcFZRZGREbS9DS3poV0MrMWF0V1Q0RjNRSWxQT0hvR0padDR3UzJIUUpjK3ZJbVZRKzE3allGNE0xdmhNOFNUdTd1Z3hmUFFjYWRMUDhrQmtKNUhFeEpWeGtad1NUUDdobm1ldFBQbktlaVJ5RGRudi9IZGM2QUpWZXFFc2pZNFJxT1p6S0FLajJqY2E5YjB4b3locEtwRXE1emhEaUM5bTRJSitFQk14dHdrVXk3cmR3RzhBUFFZWFpmVFgyR3F4R2s0cEJ0Zm1IaGNTMXAva3E5cUZuWXA3MlpWMk1LSW5Mekp3MmlRVTJXWkQ2dVF5ZzlXREROVTFLc1pkMHFhTyt3djh3U0VHSGhWUnVrWldXZnN2diszNEFlbkRzWldLYmQvWWdRMEVFTGhFV2MycUNiWm4wTGhlLys0UUNYL1FEMU5sdERUZXhuc1UySXpnMEsxQjFWSmpmQVpzYnJFWjJZQnMvdGdNcjlyaUZMd2h4NTQvK0xWNHpDODhZYWF6eEh6WTZQalY4RDBZdzArV0xwUEJXYmFMbWVnYXoxRWVIZ3ViYkhpNDAvWGdiakR0dUhBSFpmaG9nQU43OWpTd1RZNnNITytBcE92cUtDT2c2TGd0NXJmTloyOGptUmJJVTJxbTNod0pIai9WaEdOL3FWMFNVbTRFeEN3ZkVLSWgzTGttelBDVmxiMmJFRnBnc3NPdG9EUVU5cU1CWnFrdmFtN2JVS3hmL2RSak0yZ0xUeVhPK2w2OXYvenBLUXQrT25GK1BLU0NwcUNWZi9xMzBPRkJVOTJWZEI1a2JwcVpwalpZS0E4Q1NLY2JXWVRxNE1xaGh0YVNJMCt3Q0ZoWUVJbklWRWV4RHhQTnk5TFdJMEExZVBlSy9oSm1IblVtS3JIV05WVmFRWkJWTlg3c3h3VnNEL2VZNEM0Mm5TWi9rRW1qNE5XT1lJZzJVMVRXZHMrYXZ2VG5Tb011WkpRbU4vM1Y3MzRxdVdvWTZtVXIrOVlNWWdNK0gxNmhlMEtQSWpObU83TDBwT0VjTWRXWm9jSnRNMUc3SXNWa1BGMCtkZjFkak1yZnd5MXVINENEUXZpTkFKWmE2UVo4U1YrYzhnV0xNME1VZFRXZ2hRYzhNckRsOE5ZV2lGQ3VxNzEyMWF3OGJaWmdGdldTZXpmeFQ5aHhpc25KblFzWHVKQm1TRnNsL0VZb0N2ZG11K3NkSHNhSHVnNy9CWFpHWG1wRXNuUUtnUTFtd2h0bHM3TUZIRllMOUhkWVluS1RocStyeCtpRFl6NFNSeU5RVWVZYkdNbENKS0ljdDByaGhWaEJJNW1DaVBzd0N4Zjk3YXkydWI2TzlCMVJzbVh3U1FYK1JCMUZ4d1NONXp2YWRWQUVESnhzSnVZZWh2dXJUSzIva0YweHQra0ZJbVh2UHQvNlFMaFdUNDUwSGxGemV3VjFJVEdDQlkwMVIvRW0vWGFpclBrR2dVZnBtdFpwWWZDdldxbzhrSDd2Ym5tQTdsTVdUZTZjaXA4VE9HQzFWVVpFNGtwdWtDbm1EU05JYlRnbkdSS0M1VVNXNlJMM0NQV25sRFd5cTJuRlNrUFkzTGJGKzU2dzlWMGV2TkRiZkRYRjIvMkoyT2crdGU5MDlIQ3JJUzdreHFPWVc5S2VDWmptZWdsMFBqVnE0Z044UjZpYnI3L3Vqdnd5M0RCSlZMVVFyeitxZWFucHZDRTNJNFdOc3pzSFl4WlZjZDdZc1hQTUc1RjY4b0pjSU0wcWo1S0o4TXZjVGU4bG53UVpiVTlOdkxpTlh4b3JKbGxaQXBxaVFCeHYyKzFvVEZwOWtMUEFOMGNTZ0lLREJCZmd1L3hiY21FUTR3S1d6QU9qMi9Zb1JtYzhTVVppLzR0WG03ZW1OMWpINGV2bGVmLzVpcFRMU0w1Y0M2Yk9qRk8zeXBMSGNqaStBOEVjTDhSZ1ExMk9aMjlEWElHM2htcDNWcjF4QlB3WUZPdGY2NWpVelcycjFSc0pMTzV1ME9ubVNKVXhnajhxZ1drUndXNWI3enNsWGJoazllWE1Kb3VyT1BRU04xZ3hTaTJGSFBkcDViS1FoWDJkVmZUaGxkaExOSjdWUEJIUDJpUityeHljZXN4cGZpcFo4WDFWNmJUSEZVSzUyNHJ2YjJXQ2xhK2p3WDlEYjFHM0NsNWFYZXpSNTFqSUwzYU9QVGFPZFZmOS9SVjhPMHcxS3JLSElIVDIyM2IwK2JxcGFWNHpJSVJiS3pUOWpzOGo1ZnB3ejRaZlh0bGFYUjFGODBFdTUwT3hZcU1ocW9rOFQvanJWZ0tveTVrMWhqakwza3Z6aHpCZThBVk11NHgyVm9kQm9sYzFZVzlETzgySURXNUlHSkJLd2tQQTZmMDBLQldBS2I5UGlwZDltYkV2aFZvVy80b0JFWGlEYTNKTkkzOTgwSDFvaVgxbXEyclFIUXJCYmZaWVMvTVdiNk53cGhuTHo5Qld1TEpBVFhiV3ZDeEtXZmRrVDVWYUFPOHVWRVZtQkYxQlJJYmRBTk5wN2Flc2Z6UnpuT2J1RkJGYUsxRWlzNTM0TlFhRDI2WlExZ05jNmI4K3ZlaXpGWTMxckNyTGRacWxwZHA5bWFKRUN0UnlrU3ZZRlM1SHZLT1RzNkFLQjBsRGtTeDhwMkd2M1kvWlhHUzJaZEtqTkp1S3VnajRQYlNNdXJBMDBYVG50Zk1yRG5Lc2dJNGpyZnd3aGdnMEpZeG10bkFFUjFoUFR6U1pUVUkzMmQ0MGw4T0d6c3FRaVpFcDNNL3hydXNQRkNzMHFUdzZMSmdyRXU1cW9mbUhSTTFBNk9WWkZ6MmdNYVBFekdIZ3NSV0I5NkJ1ZEQ4TGhrK1FuemI5UzhoMGZyQWkzN3NRaWtEcm0wWjBpSWJmalpNQmkvaDF5YlZhMjJOYklZSzA1SW5pU1BCU2hmWi9KMUZyYU8xMy9YU3BhSXFrNTBYZWY4YTBHWHZxQ2tjbW1VcTVmUm9LSzRudXh1dzEzTktRZUFnWlNtQjh6VWNSWGRTa1FHYllJWmtkTzVhNUVBeGtwV0FnRTFHQzkxWHdlTk8yRVdYS0tUSGpkY0JJV092d2paMnZQU2FVVkF5V2tpaUdab0xvQUR2b3ozbjRXTm1FaVdEMkw3SktmSXZIRDB6NWtJZ2JhalhHYm0xeXpzQmY3WWwvNEV2MnpuZ3VGcUZTWjIrbmtsTXN3Wnk3bVB0aklXN1pJSENtQVVqRTNhUkRzNVgvRnFJZ1laRjFZZXBaVmtBc0VweElNR1JLZURZSWV6VWZCQWx1ZkNMWFdsZ3c4eThQZi93SzRZL2dmdC9sODJsZUtad2ZOMUZQTlVpUlJPSVFuYWpJZVlmcFFSSjhUL3ROZTJucUVjaEY1aVhLdjZHcTB3RFRpeUhZSTZBRUZGa0dnMldOaWRjUXlNUHBNdVZYSzEzcENwWDZ0WXYxQXZOcmtmVjRwMXhhNTNQQ2prbVpkU29GeUdUYU1jbnRCVmtHS2hrNURjODBuWVlERWRUbHlUZnRxK2Z3b3FIZ1FhRXlaUFE3M0VGay8wWmF2c0NOTU4wM25PU1VlZng1bzI2SGtTYnllM29EQ2JIdm9Va3NISUI3U3VjWnVGWktjclNTeDNKV2VBckF5Mkk4K3ZUMFBMdVNMVTdiYm82RmtneHd4WjlyTFZoYmkrb1ZQVTZPdU56cm1ITGI5TkkxUnd5VVVhcmhPalBjeFF5SkthQ3piV2dHdlZGR05KN0RicDhkMGo2Y1paZURqQjM0SDVtSjI4bVA3U0FKeEozYXQwR3NRRVJCZUMvMTZjTGg1VWhpc2lZU1NiVmp5ZFNtTUFtNFlZbjdVSktzL0tLeFVTMDVIV2pkemt0RG5nbzN0ZkRSRFh3bEwyZmorbXhwbi9CbnlxcGdYZTE3NkNTWDVhbS9uT0FyVWQ0aXpEQlRVaURuU2Q1d0N4R1dLU1htVjU3T2x6dWROeTkvSWc3L3Q4TXUvTGh2ZWdoSE42TisxblB4bUcxUmpHOFRIVUF3a0lHTmZNNW1XT0tsWCtON1BLall3bHVkTGdmeGxMTThWYnp4STBDWko4aWU2TFY4ZEZMT244OE8vVDkxN25JN2d6U3ZVNzVkQUo4Z0RkOXVoMTlDWG1BR2d5L2RoTGlKTktXS1F1ZllLek91UmVvZmxuU1R6aXh1eGxHdGlXRmQ2NCt1NGxkNk9VV2o2d1FyY3BncFBCVDVJUi9qVTJja1RBOHBQYXBiYWVHZVZsVUxjV3dOMWpDaDVucHFONFdJR3dabWYzRGZzOFVCNHFPMnhsV3FlWUl1OGEyUUoyZDNXdzdKYldaOWNta2xMUUxiQVdETEkrcjVIZjlSQk5IT2h0NFplSkkrVUl1MDl4UnR2NmJJT0I5L2pIUkdOVHlhcDdXZVBBOE1zMVRTem9Dck8wUW43ZzBxQ3IwRWI4M1lrR3lxK0pJTkg4TjZnZzgyamZqUDNJdnpTUHltbHpXSEl1RVVMMU13d3VsRmowakw3NHZOK1hxbkY2OWllUHBFS2dUQVE1MUh6RVRoNHZvUWxMc3hvYXhpSXhRMGFQWlJVbDJGNFNMNFd3eFNhc296RjhpSENaNkx5TjBZNklNU01IckYvaEk2QXdRdG50NnJwTDJJLzRHeXJNVkRvMzRiNnZ0OHdjc0l1eUUvVFFTbnVOd0U1UWNjbEtYNmR3SjlFNldIanFGUWVwZzl5U1NhanZEUTh1WHRFb0haUktRMGMwNWNuL3Z4bzRjUFZ4eDJaOUExeW9GM0lRZDRFeUtpTXFmSUtzZGdPbmlTVjlvOEwzOGF6MG5qMFVRZ05aS2lScTZtT2tEeXVxMW1OQ3EzQ2x5K1BYdnU4WGhJUksxb3VMR2IyZGRwTEUxanVUL3Azb1VMRWNDZklUb01oTHBxRVhOY0x6VytCK1V2aDIwUUhhV0g5ajIxM3RiTzFBQXA1WU9vcFpUVUFvaVNvU2hFSkIzVnNWTHRHaUd3OVludmcxQ3N5NnZoRytuWllma3FRdEVTYWN1ZmUvdk56aVNnd3hwSjRjQWZ5VzhrcGJBVkltRGdqY1kvSkx0dXorbysxbW5iTkRxeStTY2xzWlNOUEZmSEJKRkl2eGtvTFVaMDlUckRqZExzb0lTTCtxbjUzL1J1bnNTOXM4aHo4UG91SWozcExlRXFlRC8wcWZsSWt0Ny9VcW53ZEd5dGhFVmhzeGVyVFZHWkNyWjBDa3VGdERHYTBkUDZMWFlGYTdNbEVZVUlMdUdLUWYycmN0b0laMHN0RkpHUkluQWZVUjJOMW9PeDBZaVZ0NXdibldObHJHU1o5QmJEUHZOUm5iUFFqTExyMDYwcStMOHg2VDlUZSsyUFZWc1JMZHc0cjM0TkVHYVVGRGFCRFpFL3BNUnBBMXQyODNQZ2JOdWJTMC84SjdpTEl5VmRYVVhMYm05NDNVMWtwUFpOREhLN0tPc0RGd0xTVkx6S01FSUE0N3ZlejNDdFZneldNaVNhN2RlTUY0aXgwaHpjaklGbVI0UHRLR2IxeGlhN0lCSTFFMFliQVVkU2NMTmtDQWx0NGxueVptQ2NzbG1BdkdqMVJ3ejBQMjdtekFnb25lR2Jvb2h1RkRqRlVHNFZGTFNxYk1zeFE1bzFmRGhmdnl4WHloYWlwZUFsU1paT1JicElZWE4xczZ0ZXFKY2kwZnU3aTlZUGJMOG1zcFEyaXZ0eUNyYTkrelZENWVPc1VCaEc2S0FyTHpzdjk1bEtPYWhadks2bkVuQ1NhTFNxSG12WkJNUzgvc3crWWRMQVVWbkZZRVFBSmxXR3JmcDF3QlQwYytINlZmZnlUNW5sQndkUDZSQ0ptaVVMdUNLNVFnakhXdWorZWx2V1R3QUcra2VqM3RmVnRuSWlOMUViQW1lTGpJOUppK203Ui9hYWhsenJndVJkNGJ6bHdXTklqZHFTb3NUaTR3Wk80ViswZGNOUVVyM0sxMG5IOXdqMURBci9qVnpYKzVjUGF5OG56cDFMOVl2bjZMb1Jpd2hFVUY1eXBsYi9HR3QyR3prYWJ2VmhBZlVuZHk0bUc3VXlkaExQU252MnVlK2xvcUZHeW12dE5vYTVCd1ZVdk9hMUVkaTJZZCtGYkRmQWhqOVJhSUNITjcrTEplR0Q0YXJ1dUJiT3lYM3pSSjg3RkJsOU9HeXB3VDlaRzBYQkpjbTJBYjY4ekJacTJnR0xkenM4QjNDY3BVcW41QllyTlZHMU5nOE5lL2ovVEs0bDhabW51MWdWRjljbHBCdnpzN3hNbXBYY3hIcmJwSHNEcTFzRGl2VFQrZXJpNndmR2RLMkpoQkpwL1JaRmxSWGlBNVRGUGtpSDI4SERmK0kreHNwbkJUa3NiSDhLdWhHV1ByYmlOSXhUbkFtQ05XWXNjdG8rM1dsNzQxdzY1TWZrTnByOHpoZGY3NjVrUHZSMWx6UUxJVXZCQkxsWmM2TXRXQkphTE1ESDh1NWxZYm9RWkVxTzZPVG5oT3NVeUJydU1MY2pkR2lxL3VLQ3ZWSGlRbVNuQ0l0MFZKSzZueVFHRmhBTkduamc5dWdUZ3NhVXVGSUw3V0RVbk1qaC9IcHc0eklDQWdJQ0FnSUNBOHYyL1JVZnQrbTIxOVFWKzM3Yzc5bjNOWDdTci9oOW54ZmI5ampnZWkzMjlnTjl2Y1E1ZnQrbEkvYjlXRG42Zy8yMzdaUDh6N1VyOVNoMzJmWlQzMi9ZZDRIcGY4TzBDKzN1cGNOOVgwQUY5WDBmR3ZuRDMxZlh6ZnMrd3EvVVRmN2ZyUjc2dnEwMTlYVjNmVjJRQTlBQldvZGVMRFc2OHdURUlYMnhZVjc2dWtsbUdnUWJOK3JTOGlKL0xwWmhoZVBaTFk2dVZHWG12VlZiRmg3dzdPNVU2bi9FWVZuMlRQRUxTQ1hPSkxuN2l4dllxdGtZRUZMT3NkNnVab1Mwd09mbDNnZFJCTFc1MUo5SFUwaGVMb3AzZ3hudGtmRXB0bmdpVnVneWkrMUkrdXVRTyt4aUV3NDloZjdOekxaOEJaUDc4NWxMY090d2FvWk5IOC92eDhjL09qampOZXBUU1lqT3o3TTIvbFVoTlJhQlVsUFp5VWJFVllVd0FiTFVMMGt6N2s2bVJVVzkxQWVvMjkybU02SVNHM0N1S3V0ckhhSDVCZXAxWExSZks2NURjVVdPRVVYVUtIdVVSOUlobDRTRUdzVFFDdlRjV0dETzNpajRaeHo1NW1mMGJNTW5lWWxNaFRqeGtPQWpydzNVdVk1M1Q3bzNXcWFQNnpWd20vWGdXaVZQTzJDc2ljWm1TSXc0eWRoVTFmeTNsdDVTRWVwWDhMVHBLSzhNWEs2ZzU3VUxQeXlyUHFCcTRQUUpYa21LdHJZRVE4WXF5bCtqUXBTN2IyV0l3S2J0ci8weG94SHBvZ1k3RnpKOGVGWjhwYm1IaUdBVENZMGliSkxwaC8zdStuN3FyVkdwU3FOclFSdmlUbWEySVpMUDg2YlZUeTdHazBsRzlGQWJKc29xeHJ2OGpLZmNjSXpBTlAwMGx3TTZ4aFJveWJ6R200b1I1T3JIbDVtdlc5MjVvdEJZbnFLVVhhWHZmYXdvSmRYeXo4NS9TT3JFb09WNlhpMm5ETXYwSk45eTFkUUtaczRYdm5sbHV5TVFHbnVTN0d4T2g0djhFRUZlVnltWmM4c3J5dXdISVc1SHhnaFU4bStxSENHN3pmdWRwd21ZVjlZMFErZDlham85T1JNQklybzl4blV3eXAzbHlrQnZwZ3pNWGpBVkhORGlCYS9wTGJKUlM0dCtpUDlGVWI1a241QWFNTG01dnAxODFDR0J0ZjR0VTN0RWtpSWl4WmlDT0l6WTBacW9nSzRDYXhuVGYvZmNoOC9UYmtYTHNUNnVhMnQ4MUR4L1ZSUzdYcHJrWUZMRGpzKzRHdUwvSGE5SzZ0cG1qcDExemhDSGttTFRSempIZStMMnlQM1U1MWhDelladi9mSUNHT0RFdWlOTk9jY2lXRTlnZjBIV0VZTDR1UUhuM2E4V2FzVUF4MDVFS2hmN1BnTjA4Q2FCLzNCZHlsZzF0VW1LNWpIWnRDTnlPeTBiSFRNT1NTaGJnSWJKTUFJL2s2aXRTUmxKeUJZMUhsQ1VnUzQ3QmlyZHd6MlpnQnRYaEY2NzlIcUc1V21MNnZtMEVpd3ZWNkwzbXVVdi9Xdm9WMTljRnQwb3RObDhTSU5KbjJBTmRFWVdMRVlzUzdQajdXc1BqdEhqR2RUbmNEWUt2T0dWS0xuV1NoUTNOV3hJVFJlNEVqYXNFMytPS3BpZHQ5eUdVYzF6Qzc0LzFYdjhBNHlMMFJ6cmRBSmFOSFZFbk9BOWZ1dEdGOHdTcGpjMHdpVm1GdHFxd3Y3SG81Y2VGRjRJTllrUmpSTEpobDNJc3UrMDlCSkhja3dEbmlsaHZNdFZ0bWJxTklsamhHazhUZGwrNVZNSEFIaVcyZTBPNnN6eE1tSm5wMGROOW4weWxRVG52Q3VXbit6RFAybmdwUTJxMk55elJxZHF3UFFET09VdDUxZDdnUGc3dGQ1bHNJSEIvK2puVnppbC84Z0hFcnRTclhJTVZBK1UzTHk3V01nN0YzajNLa2FCWCthREdNY2x2V0h5cUpNNlVVK0t4Wi9KTWpNT2k4T3JXdTBMVENiMTJ3S3hLajZPZm1RU21TZFFwRmp1YzdPY3AyblBkUDFwaWVEdTRUMWRKZTh2Z0F5M1BFSHlHY0N3TXg0UUtBWnF6SkovZDFHVXo5TnVtV0RBN2o5UHBWSit6Wk5VbXJxWTF2K05VdHRrdFlFZ1RUZGJadnRzRHB0OG4zdmtnMDBMRkpMa0Z2Ukx0c3RoR2RJMGw3SXFaRFZNM1dZa1VPVG05cDFabVhtQTdrY0ZmanJtb1dVcm9QL01NejErbmw3K1JjWWRnMC9XNWdQY2w0bzN1cGx5aGNhQ1ZrTFZBTnVzazZWM3hLek1WY1dOclI1WHBjODZBMTBodU5zZldmdzBLRlZxQUZwalFzVUI3RFlySE9jY1RWWldKRmZhbENRTVloQzBaU0tEZ2ZFVis5U0RGN0NlTTJtTE5xZ1NpdlZ3cEIzbmdjVGlnS1IrZ2paT05OejRRdEhOSCtMRlBhRU1TQzQ4c0lYSVRKV2p5SVVlMkNCRnFMZjcrQm9ROWo3Qjg1RkEvZHhvTlR4b1l1dWJEQ0pxckdNTmdLMnpmc2NzVUExT3MwVjUzd01HVCtOUnZ2NHBsQjQvc3FOd0FYcWdTQlBWZGNqZURudWw1a3hUYVhDOWJiVDMvVXE3RlBVVUJCdGh4SkdPcVFMaWFGUlBhaHZPc1NFcEtMVUhsSWxQT1ZQbWZxZExaUXhjNkl6VzlwdTVEWFRpQzhZQkVUTU1XR1JLK0J5cXkrdlU0QTJkU0VhaUVXd2RqREZ3ZnhUOURwZWxGaUw4M0hNNUFNRG1LRkQ1Y2VjWVFjTmIzdzdSNVczOWhETlNqU21JamJqUVBpVHdaQUZRNmIvRGhoNXc3bUl3MlkrNTVkbjRMU2JhZkZxZFQ2Mlp0RjBDNHVIdlRlcHpQUnRqNFVpSmNWcnNMam1ndzJRYk03NXNvSW9SNFpOcktlZkw4R0ZKQVcyb3pWeDM4K1JJMzdsVmdNNldjTEgvbkhqODQwVVgyU3VEUEZrVEh0N2p3cjJheFUvMDFWblpseFdvRGU4KzVEMEE4UndLc2RQNGY1NEUyM2taK0xGMWNrT2UyNTFJZWFVYTF5b2tvOGVWUlp4MG1rSUVZejJzNWVoQjQwSG9oSEE4emlDNGNVZmJwMkJYVEpCTkRLYVBpVmk2OXNHZkQxcktuQ1c5clR6cUFQVGJFekF3Yll6SjRmMU1rNm1MMDBJQnZoSmFCMUZJQXFpazBNMnFqY2RydGNHeUdLSnhtUkdSRzJNR0RLamZqTEZnWVA0ZVgwN0FtK21PNFVUMXo4MSt0aFJBd3ArMmM4QTFFaW1uOTdQWUVRa1dUL09VV3BwWnpNQ2JHL2MxRmZhMHZhczZYUzdiRDI3SWNRd2lMVldROVZHdFNxWmRUTVlFSDlINVBRZnEvRVJ6Qlo3YVhaOUpuN0pjMTBJOEtzdVg5RTRMUTFkaWpsNG83eXNMTWFMOUtqYVRnWnZWM1daNVFzTkZxUzZIb3c0NDlVMDRmZWZuVWxWREFUTmI3eGtLcFJZUC9SYnUyNzFsTWEyRzErNHhjUkh5WTMrRDZidGxSMThmVEZiOWJvd1djYS9hbWlmVEJlWEJiQ2NDL3pDUUpVLzZ5Ym9peGhGcTZBUWlhTEJxN1E2NEJ3KzFOczZDU0FJRWp0U3lRN1EyK2FnOE1CeDFJMVhuUENDamxTRWYvUExIOXFNYmlGVi9JWDRKY3RLK3dIMVhpcStUdDFnR3o0U01kUnRoMVpzRnBQdFF2UjlJT1F5bWJ3c0hJN3pramNtZDA2QWNrNldITzRmc3RjRW9vQUNQT0JEc2RKVlpLYzhGM3QzbUhRUlZ3RldLRnBmcjZuVmNQNDNsRzA2ZUh3QTlpSENnTFNSRGo2SmE0QWFzOXpScDF0Tm1VcmVQakFzcmpXRkRmcGEwOU14UzJYS1BqK1lZWFlOTkNXVm1RaDdCUk9FdldscU1ObHArTXVONEM2YkZZYklXR2FGMjRxWXJ2ZURnVEp2dGluaVJtQ0N6WFV4WFlwYXZJTzQxUXIrekJsdys4MjhWaTV4L3BsYmhWeEZ2a3ZVNmswS2RtN2h3WVJzRlZ0S3BlNFlXVTlKMUVicTZZdVhwQlRnNUdaV2taWk5TeWxiQy9PMG42SjEyR3V4Tkwyc3A4N24zdWZHVnVQVThBTkhlUWFhSzFjKzkyZ00xWTc4MW9oZjBCaThvS3RpNS9CWFBqbWlES3d1U0RxclVxVU5mUkRtRU1NblczY0YwN2FrbWVzNHQ0V1QvaGFSQ0tRWnFqV3BXM0R1Ly9PV2tBQ3pHUHhydkRpZlp5YjEzcUFHS0ZvVWNVT3hYWHlEcUNZN1JSN1pZZjZrRVAwdnlRZmxQdDhoYTJKa2N5Rzl1QnVOWkd2d3A3ckRpeTg3S0pKR0RGdjRldHFhbGlDV3lKeHVUN0sySG4vQUlucjdwb3hUU0JCY1c5SlE5dHp2WlRvZXg5bUs4dVhaOTU2TmZRNG5iZjNkRHZUNCtydUpaMjFKUjNmdmUyMWRSQUt0aEEweGhkMnRmdVYxY1Q4QWs4Z3hRUmFEZE5XVCsxaUw2WTcyaGYzU3dWd241UXhIK01ja0h0RkkvcWtYSGxIYzJrbm1KeEZ0bkt0Tms3NmF2a1hyckJzMEw3d28wdE9ON2dQVGRMZU9pSnJ2UGx2RWllV2thRk1VVzNsa21veW1RVC9saG1NeURnYndHYU0xaVJyZGxHM1E2dTRaVnM0ak93NXB3QmZSdXZZRnJlTkEvYm43cFU5Q3p4SE5YZkFzejU2MnBLUlNHekNiOGlVN3JZa2NOQUtUSXNHWnRveTlVRHJNWFhRZ2RRSEt6VG9nUUdYT1BYamovd2szSXhFK0lGdkFnYU5JcENqT3R0ZVJlOUhsVkJMcUhWT0R0cm13N2lWRlFhK2t4Tnl4dVE5T3dPTW1IU2VKc1d5OW05RFh4MmNvejB3MG9iMkp2WEtnTkd2UzRnd3pvQVNJbTBsMWtFQ0c0Y25GUU1LQkxBYmtwaXhWV21DQzBSYkEzYzg3ZTllWnZxTzVxOUlTYitXclF3TW42VEZmdkVlejl4aTdNazBIQ2QxS2dkT3pmVWZzd1krcDJlRnZaajZIZzVJVzE1SWN5Y3RLTzNkaW9VOUlQeG94ZUJuWXZ4cVNlUi9NZytNVGh6U09qeUJObmxaV0s2RmZHWFRMWEZCbjVUenltMXlVWmdkdjY3NEU5a09zWEc1a3BQWHc2a2RMVVMvTmNtcm1idHJoZWVzTmh5Y0h1M0FJYVVsUUtNOENHQm1ZVE8zci9lNG9iVXZTUUxFM09Ha0YySEFtbnB5QkZNbFp2WVFxbFA4ZVRyOVMrU0pSVHcxOGZHdVp5V0hSNmJkOWF4T1hraWkwYXNnREk3WDZWMWlZWmZaWVJjcW9wM2tHditxL0tSWW9ScXVKdjRkbkVPUkNqbTRtTWRGMlR2MHNUZkRIS2xoSldEbjFEaEhSWkw0dTlrMDdxSFpJaWxrOWZ3ZDhqcGdyT1MwRVhDcFdEVXFDR0NQV2o4MUxObXFkcTh4QTRCZEpIbkxoaElXV3ZueUZ4VFFNOVNSY0c4TlNVeFlWcnNBQmxUM1I4a1V2azBSYlpxSUFTYU1lakt4WEREUkZBMFhpZTBBWVRJak15bU9LYVMxNGxvaTZpdkNoVHBqNVVjYlRTdW85MFJnc3MxTCtGK1B1TVllVU1MLzFtS3ZoOEZJcGxlalkvRTRkaFlROEZtMDhMSXRIZzJxZmVKVU5SRVpaM0ZCTW53WmRKMmpDeWQ2b2U3V0pTNzh4cm9CK2RkUG5aNUcxd1I5VGhpWG5zRm9uK3pqTUdCTlJYTnEvb2grVTZnbTBxbG9TVXc5Z3pqa09NN3dHdTlJUithWEpOZHZxRks1WFFpQWwxTWpEckpBcWF6R2VYTnJNYmRtMWtZZUVaRVNMb3M3aGRTQ0NNZmdWM1cxYjcxbitCTjZkNlNMaTNnVEQwa2ZwOXdVbmZqTExUMG5Jd3E1ZTJlWVdMdGZoVEZDYklzb2ZoUURZczFSTkVwQzdReGw5NDhwazF3bjdTRGF6VEJuVjFnS3c5VGtvNnYzR1pwMEJ1TURtMmN2VEw0NFZRSUZXUUpmR0g2V0tsM1FrNDVWWW1tMkN0WWY1V0RXaGdzdC9kajA4VnRldnlad2JLVkZNOXltUnN4RXB5WXVoTk5wMm0yRTJ5TTJrT01ldGsydVlINTJRb0xIMEZ3bHFJM3A0T1ljUGk0NE5KZ0d4ZTV2L01zRGRkMGVOSHN1UURCQ2RHK2hsQ0FRSXVibWgzSUtRajJUV2J5SlNkdjF5cWJ0bnFiWGxHcmxUNnQ0bXUrZWxMRGNrMlAwUDg5TUg4VDhnQ0JteUVFN0xBc1FMaUtSTzE4T2NTR3ptQWhQU3ROODNHVGp1TnRseEVSNkk4MytTUlBDVFlsckZHTzBJaW9BRGtrS1h1UlFxcmluMENhR0dUdUpWbzNHSXM3RU5Uc082V0VPbjIxNDd2eThjUEZoZGZYSzNnaVY1NksxR3RTQVRwbWdQRU9ZaXkyL3QwT1JvNWVaYkl6TVJ6THJ6WEpHdDVoQ0NET0pyQjVROWhQZGtCU3pWc0VSOU1LbWZjODQybWtoL3djcXZRbmJtbDBvYVZ1NHJjTUQ0S04vaS80TXYyVHMvbmxMMkljSlF5UHpRNEs1NTNybXc2enhpMGVmenl0WTduSm4xSkp1UW82UW5WYmk4ZFpYcGEzL1g2RDNVR0dLK1lPWDR2YlQ5aS92NjlGbldHMHkvSXIrdUROMnM5QzJBMFh5SHF3R3ljdmZVRDRRM29UdkVuUmFzQWthUXhUYlNVL0FGZ1JtWkpsa1Iyd1FaOWtGNE9MVzNkRFBJNHJaOHBuTlJYTFFFVmZmVUVCSlFqb0hVZG5vTk1kbTV2Y09xYUZtNmpRR3RxRzVQcEsvWnpXQXVwVk56bzYxSmtiZFhrR3QrNyt0aFBHYVRmbkhmRjVsSnlWdm9xdW9vWHJZZlZvcWhSQi9WK0VOcEswTDU2WUplRWNOR0lQOHpybmJ6Si81bTRFaWZ0aytwNlRLMHoweEUyeU1wMyt4ditFM05RQlFQeFAzT3oreklrTHFYaWhsemwwZ1FmYXdRRVhISjg1TTcvYlVUZUpOYkVWZE9pYW50Q2ZpcEZ3U3FEWnNrQ3owa3VSUnlmK3BWQko1TEFnZmFSd0dGcjdPRDBQUzFReFJnRVl1VEVnaGtCci9HSUMxTzVZeTlVcnVMdGRlSEMycy9jSkFXaDBnSFFKWlUrVWVIVWl6TWxJNkxER3FRSkJ0ckNzR0t0YURUTFh4bkZweWk4RFpvbU1HQnJRY3pkS1pkMXJhT0dmRmFvczhONjF2a0pvUlJWQ0xDTmw2SXdlQWtCdDZQOFh3ZTZGRW1sVXppRWZNSmNaVUowNG41bWdJWC9Mb1FSTHNtNm5zd0duNzR1S00vUlE4R2Z5VmJERUFCZUJzV2xoZ1draUhodzkvYlNUU2lOcTEyYmM2VjBTRTl2L0I5UlJuVnRjd1ltdHdXOXh0MWJNcEVWOUJNMDc2ZFpkakRhNGYxOW1TdXdBRDBxeUVaTy92dXpQSURoV3lRRUswS2VhZXZhUnlnMVpwRFlSb0U3aVpBN2lja3JsbkJabWh3WHZvZXNLVDBid1NRWGZMdnhuNU9yL2V5SWNoQ3BIS2YyQWNZbHJjOG1QZ2FnOVM2ajQxaUlhQmtMS2lOeTVtSUJ5NzJYWkFmQTduOU1qc1lybTBSYnEwMHg2aEJabm4rQ1ZYbHZsNmNORHZwOTd1dTkyUzArRXZFcXBRc3RaV0Y4T1E5YnpBT3pXQnV0eDdHbWg2OTMyaUpDdlh5SXV6QjJPZUZlL0VXR0V1OHR4cTU0YTY0MmxwZ0VoUGtuSlZSNTFXOUFMRkpuWjBlQklqZEg1WjF1UXhqMEtUS3RJNi9nQlBNdytYdk1aMFlMTjFLTjYySTh5bG9oUDJZVzd0UGxPL3k1SVQ5TVQrcXlLb3hGdFNkejFjcjB5UWNielpyRWZDSy9Yc2JqUVNsb0tnWXJJK29DZlVWc3U0S0VzdnRzQTF1VDZIODI4REJPSW44R29MK2ZqNkNjY2pyVHE4RUR1UXNJUVdMQm5zR1FWUDFNTXpBbXBOK1FoamRRaC9xM3YvcWNqbndWaHhHOHp3LzhRVkpna3hHUFNROEFKdEFoQWJlMDlZZk5ycTliWnRsanA3dTFqM001aURWaXBrOXdHUk5FVVZxNEc5Z2hycWx3Y2RXd3VyVi8zUDJzZnVETTlRRmcvb0ZWVytodlRaMGNvaTZOMGxkVW0wRmhibjh6TUl3K0JsSExHcHEzWFZwd3hZTWQ5d1FBNGJYOUlpeEhzam5ZU2syd1VMOWVTbEtYaFdUaXFWM2wwWENBSjhTbEtWOWFoRmNmbTlUZE1mekp1RUdyeWc5NnpXbDk5OHdpV1E4NW1LZmZxeXE5SGFHYnVzcTZTVzdNWkJuVEFtYThWS1ZNMGliY1lycXBvSHBPb2dmWlA5THE0cFliTnZFdE5SS3VnKzJlS0lEY05LbjJDQ05wWG12bGszR3FZSmVQN21CZkxNZ2FjRzFtU1lCenh2bUJzSm92b0ZGb1Z1Y3J0V0ZnbFJGTllPUzRVM1BNMWJrVElweVJEa1hQcDJwNE4xOXNtUnhIOUJkZ3JBYnpIYU5tRktyZEptNHhuVFdPeGtRVnZDK0U0OHQrZzBFbkd2UWVQSnluYWFBWlk1S2F5dEFlcmJzMWRBTldnQm9PcmVkNVhRZWQrbEFzdW0rV01BZXgrK1EzSUlnd0NxUUxMK3V3cVF4bEFaR3VqYVN2eUI2ZFNldlNEeklRblhnRDBSVk5aZEdlTzhlM0RZVTBsamo2SzNZRTltK1EvVkwxeHUyTGRwWTQ0MFF5V281N3Z6REwyS2VkdlRPLzBPT29zWENHcVh6QnRDaUNhQVpZc0Z1cStMSDJuL3pnd0FIMjdXWmt2ZXFyWEVaRnhuZDA1dUI4V3JFdk1KTEJwbkdiVC96MTJSRlJnTG5sd3lXczhpaVNsNm1oTE9zQ1JKS25QU2JIVDhJTU84WmN1b1JvQXNRVGxCaWlzOFVQZFZ3Rm9JYUxZV09idC9sQkxaeW5SRWo3cEhvSllWNldTMktacVFKSnRFL3BsYTB4L3czUnhJQyt1YVRUVkl5YjhacnlvOVZMMEtiR3NvNzc2cVlINWVvMmpUWi9tQWdHVW1TUTJQMjFiZjNoQzZTVXk4VytpTlpwZ0VFajN1dFJKVUNKWXRPcXBjY25MVzhPWEdzWm04MWVOS2owMzdOTjVhNTlvYm1iUzN5RUFhS0VlRFhPbis1Vkxwek1adjJ1L214WEhoQ3hXZVRmY2ZtOVJDRlhrVWR6Wm92NXJ1OUtlMWFCR2pnNkVuZzd3ajI3NnBaQkZJOXAvZXpoZkNicXMxNm82RWRYekRrdGhhN29TdlRtZXhobldJbktjYmNKTUs5T2tZeWptS3dPM0l6enVkM0I0WHh3T0Z5eHlSbFhHS1hiVU9La0liZXdEYU8yWEliUnNVaU12OGJ3MEcwL3M2ZGRpai9rbmVzS0lHblJEdExRWit6a0lQZU1ubysxUnV0U2o2aXVSOHQwTEtwN0hMTERaNXU3U2Yrb09UVmFJVGJ3bjEwYU1ueWtJU3JPWnVWZkc4dEVCRTNHaHpoSGtsWXNMcDR1QUpTY1Bsc1oycTYrM2c2Y2FOTFBwK0dIVlpqUWNZU04zSkZlVkphTFlHTlNRTWNydmpidnZYOEZ6TDU5cDNWdXF1cHZwdC82V3JwWmNBWHcrNjNnbEY2Yi9NQjc3ZjFhMUJ4TFdCb1lYRXhHckZOdU1SdWFxRU9QbGhYcTJWTWRzWU41Tk9tS0kvTEVYYmxLM2FIazU1L1poN1M0Z2ZWYkxFWDBnckpzMkE4aEhaZVFhTWFlY0JibGFKRENiT0lUVll3cXppRkNuNTlXeDQzU2g2ZmtGcDJLMC8xMG4rSHI0SUNiMk82ejVoRTgzV3ZhaEl6RWdVNnB1OFF0c2Nwc0FsMzYzTG0zemIwOUdJaFhHd1lySnpnUUtrWWVJT0FlbHpCdFU2bUtPMHVRTEg3TENxNFEwOCtZNWVsdzBadWljbUUxTTVLQ3g2dzBDQVRwR1ZFZVg4dE8vRHVvOFJBVTZOY1F2M1dacUhNa1gwWTJVOHZvL2JJdjVqYmJDK2QwbXh3RnlmTlZIMWdSdTl5Y3hLZjgxNXBEcUd1WWs0RmQyTTd2RmtDNU5XN09ydHM1UUhsMmdab1hqYUFOOUlJMTBESW5vUDdqcE03T2tjNElGditMeEVwNVZRZDMrTXhGWXRSekI0eitVWWhTMzdia3lJVXUxVjh4Zlp3SWxFSTFCT3dTTzZiWHhZRjlYUlpnbFhTV0dUUTNvelFtNmRaaWZlUWJjRnd0MlhER3VXbUQ5RlRvbmttQ1NIeXBaOFRaNlVIK1JHNm5FQ0VaNVRBU2ZhUUNCblBhZmcwWk40bzFNdllROUpva2UySDloWnR3TXRhNS9Zb21EQUxZZ3hEOFhFeDRZSlIwRy91bWN3VFUydXVvZ3JxdkkrbDB3K1JPTk9UZWlzUnZNZTFnWVRWKzRtSkNhdzdsN2NtV3VVRFAxaFpEcmdEdmM2SW5vaFdjVUQrWmE3c01WVVJLVVUyclBEckwyazVSbHIrb09PMndKN092TUt3cVNsRkVOYmxaeEdiMGJEWDFVRTBEV1RzeWdGTGtyd0hOQjQ4MHpXanJYVVQvcWMwTnd4M0tIOWlldldwODFXcFNPWE5SdjJTODN4aC9XMFVOd3hzcHl1aEZuZXZEZ3pXb3UyelpmRkNCOGd4cDlwdmE2RkVtd2VReENwcXVYV0tmNXVIbXBhUzRpa0lKQjA1bERVUmQ0c0RNMTBDQ2NrUVRKM1gxNzVLeFE1RXFDQVBvZFYrOHpaaXVUQ1YvNk5mR3F5ZWZqZkhqeW1RWGszUkdvelZ5L3REeXJpa2V5cFhoS0tDOG94eVBGRDVLUnB3Sm1oTTNVUktVY1Q2R3YwK0lpKzZKY2tOblJMRWo5QlQ5c3J4VnpFSDZyNTcxQkd6UENTWC80M3JYQ3Fldk5JM2NiL2UySkFDRW9SVDFibVdsWlJyL2hXdHNmZXZzVFdFTG5nNnVKTzRETk1OcitlRzJIR1lOM1g1dURwSEdjb3FUcXlZbWtMZ3dObTRtakkzKzFYZW94dHdJak9XSGdxZ1ArNnRXeEJ2N1krREVxcWRTalJqVXBrT0FjcG8zNTRBVFZmRjlFVjBDRUUrbUQ5dS9Bb0RtcGQwMzhOVm9xQ25sMEpjVmJjMHRrZ0h5OE0yZzFpNDdFMTBpQ1VhWnE3S2QzMU5xcXNqaUFwc25weEkzUGU5cEtUNVJGMHMxV1pkb0hsWlFTcHZ2NEJQdnAvdXo2bnVLNms3TTNTU2gyMUJZNUkvOGdMRCtDRFFCMFhUYlBTMmFnNElnTE55eXpac0NXY1VjbC9aMmFyRGV0N0ZFTXlIQWprd25WSFdySmVLd0hTQU5kQjY0L2x4VGJQS24vQWg1Zm9ZaFgvRkhZemo4L1VJV0pBR3FBOTRReWsxbVVuNmdZelN0UkJKd0RKS2E0dnhTZVZ0U2grUkdPdVJseGUrZ256MlpTRGU4VWc1TmdOckI4c3lSS0dCQndYclJJNERxLzg5T1ROTkhGVkVqYzdZZ2U1VlFnTmJ6ZnJ6TU14dFRUcVV4dHlsaFNyTjdWbXg2TVk0YmVVcEtzVlQwRitIZzgwelkvRUpjalVrWldFSm4zOGczd21lcVVlZm9UT05Da1FPYklsUGlPTjhFVlJUWHJ5VGdPZzg5NTI5N0w4WlQyaHJzZjI5N0R1TXBweng1T2YzSzVOR2FyUlNYa0FNR3NnOWY1NlhYN0NlcjFpbzUzY0g3Rll0OHpsSlJmUEQ0M3FQNzZpNmcwRnJUWGlqUjZRMnY0ZjZoV0RoYXFsRGZjQW9hZzdkeEIvTzVtYm1xUWlCVmRXUFdaUSt5SHZ0aVVzYkplZm96cUJLN1BsNTBvZWRxUndlS2dqYVBRUmh5ZmRJakpRZlVPcENuL1BGT21TVlF5dE5YYXFGS0FFUlVnZ2FjQm5GSnR4YUxiUzFIdlY4RG04U3lzRGNwVnIwaTF3UklLeVFKUTlpVHZHYThRR0R6eGQ5N3JlZk93UDc1bjYrdXNuMDNEYXpDaHBzU0VHKzZRQjRRUGpqZ3pHL2NQeFB3ZUgwMVA1bDZ0OFkxc0xBSGhVTTM5dzhMWm53ZTNCQWlmdmFXSXdIVTlEY0tSRkN5SmdzeEFTTTVvMWY5M3FzN1Q1RUVDMkV2ckdZdk9jbWEvQjF4czZFSEQxM3VlbTgyRW9UT0h4L0hrcW1LdjlCSUxyZXByRHVoUlY1VjIwWGJiK1dRaStsMllVdk1kb2RTRzV6bUNoRGNtTWtGY29mNXZlUVZJZXVyaTE1OTYzTkxkS0M0Q29hMUNWWUo5MmVjNkVXUTd5VlVNblhKaWwvS0o0a3NySU1WZWh4ci9mM2lKMC9DMkpvTXQ2aWJRanQvVVRvWWJSTXNtd0QwMDk1VnB4eWV5QmVDM1NabkhGelZZbWZWaGFkanVvZ1FEOUJ2cUZTY21tVlJIYkI4QytTK3UzTngzZmVUMXhPWDF3NXZuVVJHT1kvVEo4QXd4RHVTS1hXZVJkdThxRzNjRWVTWDhOU1RTTU96NGhNSFlCcWxRb3c3N2hTL0gwdHgwNGF0VmdmZkFKK05QeHBVa25jZWh3SnAxcTBLaytXQmwxak53eG8vTDBHOThqRVgyTlNnZE9WWEZlNWVxNDNjbUx0bmZRY3gzV2JKRTJZNjdra2xxWG9PZEhlKzBoU3BWRmFIdC8zOXRxUXRLZDVVN2Ztb0ZKNEhEQzNZUEJNbGhhdnliVnVwMURQUW1pdnV6b3RUSis3VklGOWNIK2ZMN2tTVDRTVXdtWnZ2emxkL1o4a3RDdmFQOE9odDNuWkt2UGgwZXYwbkxwd1RsZkRaOFRONEcrMjdrNlNtRk9Fb0lCVE45TUJDSU1hQm1EV3VqM1NIMmtLa0R0ZGVZeS9mb0NOWXZSNmNaL0hGWHU2cFZZVTJYbnpVVC9xbmlMdFVOTW5hWXM1eXp1cVYzbHFkME9mWXNlZC9jYklKOTlNKytRWi9zZjV2eHZ6TXVaQVp3cjJxT0FwWnlnR1lmaXBJdWg2OWFRSlFFTUJnVjFHdFpFUFd4c3pzaU1ESXVlaVNCUXhjTkJrUGlaRkovbzhVSStuem9uY0F2MzJpNEIxT09xaGFmMXhoZlh2Szg4R1c4aUt6VkZlRzIrdzNIb2FwNzcwMHRCM3E3TkdZSll5VGVjQjg1bnlvRzRkblFDSThNZThEZ1hIMVhZTDN2cnUxQXZsSHlwamtYV1ZJZXFkMzRlTHVRUFZIa3lUQjRobldrNy8zalhXbjQ1ZlloRGVuREdzeXc4VmhhSVlDZGlTRWdJVU4rclI0cWtzbjVZMTNFZkFzbExvaGFLZWFHbFA4Y0YrWUU5NjZDVGZ1QmFDenJCZ0NtWnNuWEdlYmpNVVdwSmd3UCtVV2w0OXFhNFNJN3dvQTlyNVhvZWFaTC9GMTU3MHNkaUxNUFdGQnVWSEJONUt0Zzd2emRwZDFPS3ZrQmY2N0tIQlphVFpmcTRZbXZ3SU9KeExaM2FzcktaeUxiSU1OZnA4TkIwOEdHQ2xmaE9yOXF6RnMzQ3dLZ2QxSGY0cmVEVExZRzFvUkVpc29tQ3lnV2k4TzgwY0NvSEI0VUdFNjcyTnpscjFlbGxUd3kxT3N5WFRGR0xwZjN0OTd1bzBDMmgrbkNudWoxaUJJVXhtVnZYNFlsNVFWUXlqR2ErdmZwbk9wTzJsd0ZuaHhhUVh5SUVqaDNvUE8zOWQ1bGJEMmQweHRlWWV6VzI5R29QcGtFMmJnemR3MzRzTHhNTXdUUjEvVitvb3Q0djhhNVN2OCtPRXZ2K2hxUWQ1OXBvYzB2L3puR09xN053MDc2bGwxZDNKT0hadGVmdlVBQlZmVDJidzMwenhBUzltYURGSHNuZVlxd2lKeXJoZ0NwK0NoK0g3SDVWcGcrUDB4Q1FkVExEczdlakU1OHFFN1d6VldoT3UxZFlNNjdxbi90b29haWtLWTBSTW9HY0hhemhibUNldThBbEJUQm93QkxZWHVITDFna24ybzBCeXdKNnl0dFNsamRDcFNJbS9ZZWhaL01ZVmdTekFOdzI0MWFoYzB0QXpYU01BUHlhRkFSMUxLamRuc28zdE9QcFh1SVl0UmR1WGFOejh3VjhRS2N6ampQTlhYRHcxYnlpT1pYc3haS2pPZWdTQkkvLzN0cVZKalZsWDF1b2FhYzZzNzN2NU5PanVPblBGK2dZRk1VS1FWOXBaWnpnT2F1b3VrQVd0ckRMaXBsWUhINytEK3N4K2V1ejNpRFR3RGFMZUFzZ0R3SkdMZ1ZMNENETFo1eENZYTdySVUySEF2bytTRHMvaEVVUTQ4YXBuQll6bHVjMkI3SzZETHVWNEpnYTN6dDRmMFFsTjBLaE4vQ3FHNEhlOXYyY2duVmwyc3NwWHpFMTF6aVBsOFpqbmNvWXlzMzRiQ016SFB2Y0FzTm5jSEtuVFlOSlBPaW9TcHZLNkhxWFV4NGVQVUsxQmErZ3QzRnZoK00wV0lHaEhZdWt1SHo3cFFsaDV1RTJidUE4SkcyM2Q5eGZENzRxS3FVS01sOUZCK0c4SjJRT1lxLzJYR0NPd01RbFd2NXBaa1RDTThwWUs0TTFxZldwYXhRTjZYQzlVdTFEUDRMcU0zaDNnRzJob2VZYThlUitQM3RiMERTd1lKcXF6ZzBZM2VqUi9qU3N0azVaWFhyMFdPTWNySE8rRElBUllMUE45ckU3Q0F3Q1FtaFlCYlJwZzBwaFU5bnpuYU81Qld5enZpUmdkRnZWazJNWWxrQVhwb2EzbFRoL1lZVkRSU1J0b2hMWnVBbUpCMmlMOEsvZkhEMCtpeHFNbTBpNVhRdGNLbEorUFNkZDBkQUtVcFhlM3o4L3pYcDZrZnJQWkpHS3grMnZ0b2x5MFljb05mQ3k2ZEJteFVTcElxL3BTS2FVQklQVjB0bFE1RkVJb3ZMMUhER1NKc21NNTRodGtudDdpZnBiamJjUTV3U1ZPaU4raS9FaTlLbmRvSER4NGxYcjZDbUc2Skord1NhTDM2SlFBc3V4Wnk4SDlXZUdVb2U4Y245UVp5YWMxdlRMcktEMGtaZG5pdFRxd1dzdmU0MXFaMnpwT0xFd3FNMEFJU2NXQzhZeWdyT3dSYkJlOGFGQ0ZhS21RZmRvcWJuVHQ0cVpoeTFOczRxUEtLV1FrVDNjRHA2bDZQWmg4SlRmV2p4ZkVTYnFQMW5zMlAyQmlOT1B4OUd2VVRvSXM0ek9VYUVRR2xDa2o0TWZiVmxESk4xMXQvTjZXeUttMzFTVjhJUkV3TlRtZVBjQXphUTBJUml2Y21ycUxiR29XajdTbDNoWnJ1NytmYXBwaWpyV3Y2aGlXNFlaVTB6ZFBoTlpvbVplNSt5bmEvMGVQdXNYdkIrLzA1bXhSaEJWR0tMZWVzbk9hVGxMd1Z5ZmlHYnBlU2dzQnAwRHNWMmw4TTVxS2tsUHo4RzNDNGRRK0UxV201WkNVUVA1RldDblNNQmFaeUQzRUwzc0p6eGx1L3BGVVpYSHVPck00azhzMUhCeHo5eXVKR1I0M2J5ODZTNzBoNnpKMi9oNUVjTVAwcjgrM2srdWJnU0NUcDM4cmpCSGozdHA2K056UjVERFVlMjVOVEFiQXRzaGZBeGpHRDlFTHkyV1VJMFEvVTl4S2VxbGFXZXd1L29XNnhhR3JlVzNDUGJkYjc3RUhKTzBrcnJKeGJlRzVBTnpGa2NWVGR4bzhOZTVNMjI3UGF4c2xBRlJ4eDZVVk1CdHhvbURmVldmNUpqWTlwRnVTd3FPVlBWdlNwbWVNcGYwYVFGNlRDSWdUanBUVlNLZVU2TWxKU1NlTkNhYTNYeWVMZE1rMzZjVTNvS3dERG9GWVdWMzNlTlQzMGNMa3FTQmZCZFArT1JZWXdBKzVvcnlvbWZsbzNjY0FqdXltRXU3a1JPMk5LWThZWnlHZXR5YTFPSkJlVUhIeTRHaFZ4Q2d1eTczZFp3UDVkR29lTzB6UUZCT0QwNGlFR1JmNisxdFo2RDJWUVc0cXl0M3ViRllNeGEyNytnNVhvWi9wa2hUNU13NWR4aTVpMmxRNlhydFRmRmd1blVvVitnMmovNXdDa1JyY3VzSkNXbGcxUHhMMDVsTGNGNU93OEhEL0JZU2xoNlVESkpPSjk0M0NOUlR4MjBWaHdiQVlydkJhbEg4UW12WmphOUh2a1M3cUsrU1JWK3NiNVF1L05TdTB3RldjM2pTblFTK29iQXlJTkc4SGd2TnhuWTFjSCtSekl4ZlFrbXhzMkVaN0cwNVBOc2dsVUJuWXBUMkZYL1U4bzdvRE1vSUVzdVBIenBVRituRmt0aGdmNUw4bVo5QUlHT3o1MkRNbmpmK2lQQ3FZY1RYQ0xOWTM2VmtYRHFCMWR2aW51cnFTZEJzbjlobWJxdzNIa0hQMU54MGhqTnpyMWYwSmYzcUVDRUgzMWxDdGlsNjJRSHl6WTFMTnJjTW5GbFZ0RTZsa3NnblhUL1pYMzAxZlBFVHRrbzBOd1YxU3hpV2hpL0liRVNSRTRIWWJDbTh6VStuNzlqb2loa3BGekFwTktrYjdtaWMvb3htM1MyZ05GYm1XclhsU1FoL0o3NTFGbEUwWDk5SW1mSUlsSjFrUjZPa202dkZOaDllRkJZL2g2WmJZYkovZWlXdGJmbTdJU295MzdCTWhua0tRL3B3WmNNaHdxTGIyTTV5WWtKZnNvaCtnU0pmMlNkUjhGMGpxSTVyK0ZaQWlCVG5CdHZTMFFhY1dkK0o4cmZzYVUrdlNESUNIbS9xVk5RSi9BRWVHNnUxYnQ3WEYzemoyRk5hQ1p3dUR2MDVLYTJkUTJ1b1FCUndXb2dmZ0hFdkQyU0I1aWdYL1NlQmV4cW5YUnR0SGNudVpYNElHYTFrS0EzZGpDM0NTcVJDYjExbkpLWjRRRERSQzd5OGRWeUViU2FRTmVQWUlYV01JR2Z5STZxUFIxOWF2dXlRSno4ZGdhd2h6WFpwdU1VVU1RdDlQNTZkWU5RaVhQMG9TZHQyN2ZTWThpcHBJTzB0VURGWmtLK3FGdk0zcWgyTGpnb3R6T0daYUp3Tkc4V2E2a1luZkUzL3NaTis5YlNRMUVwRzc5cVVUQ24rc2J6RXNsUngrYWFaWkhiZ0x5NU5RUDl0UTJtNHFaZnZmZ05xaDJ4Ykc1Z01QdlVZQUtCaWZ5SXE2OGhHeVVYU3RQblA5Slo5UWNFTlJTU3l1cFJrOW5RZnBKdWdZbXB2bTU1MVFVbTRXWjh1bDRKRWtkRjVDU3g4RGY1eU43RjBLSkl0alJxRXdOd0F6enhrRlE3cEVHY3VXTjB2Vzc4MUdTbERYK2E2NSt4YnJGdTU5Nm9jOUxzRCtDYWJFVEI1SkNNVjdLcklBZHprcGFOYU96QzJhODU3WFRwZys4OEhWYjZpNStxb1dTR2dOZFM5RlVRcjRRTysyU2JHTlpERDcxVHpvR0o1NlZ4emN2UGJOUWRBSDRmUVBHbkUzMUE5QWxjNWk3TStwTHVJUDNyVkJ1Z2lMRnNMNHlKMkJzQVZ3ZHE4aGVEMVl5T1NmYVB2alpCRThOb0luc2JPa0Q3WUJDWXhhZEJkS0NicFpSaEZYK3dpUjhQNlhHSTZQdjdTWWpxMSt3U1p5SlQ0QzdDNzN1eHl1WEVrNW54VllUM0IrdUxQQmFoOFpFS1h1NVFvdVc2bGd0a2NhTC9Ockh2c0c3T3JaYWZYTEdSeE9YWE9jRDYwTkFQczdKeUc1R0VTRXFJYUU4YjduNjJmU0lxWEVEVnJTUVVRUTJqejZkb2xsbDMzZlhvaHRlNDBrTktIaFF3VnZnWkQwUGU5YVJmV2VzOENnWmVLbFZPbndBMWh3WFRxZllRbGR3Qmd6UFV0S3J6RmhIMzAyeUFQQkdVeVdWdndzWVNYU2l6RHZEVzZybjBJdGIydHVOZnl4WWMvZXE2THdEbVVYWkY0UkJhRU92YWVUYmpuNUh6bFhqTUcwNnIzckNEUkRFbzA4aWwxNVpuS2g4TXFBVVVjUWZQL1lQOUpBNTQ3Y3BaeS82UjNsRC9NOG96UjdMdnRYelZjdm1rbHhHNXVteWYwS1JibzlOc0VrdmNwaHE5U1FMcFBaam5oUFRrbGlZQUdjcmk1cDQya2M3b0lrbGc2YVNoQXQ2bUNSeG5XNm5aS1hIV2F0WWFQdklnYmFDUHhGV0RvcnlGZWNvbndQRFVkRFkxbXdKRGl0MUNHeEJnL3lIa25maXQrYWlCMjVpZlA1UXdpSkpVelVJL2hLNEJYSnRRN3FSUVdhRVh2WmFhREVXQU1hQ2xIS1p0Zm55SkFuaWk0NkR4UHlqZFhHZmg0WHVQblRVMGw0QWF2dDk1Tm1OZmVVeXZseXNiVm9hY2VFNnlSL1RZWDUycStDczFqTDlKaDNiNXhwMkt3OHppVUZQVlpOVXkwMEZtalY1ZFpudkU5RVkwL0UrbGhUMGp4Y3FPb3BLL2g5bUxhTWFGOGsxbWM2dkE0dnQwS0YxRUNVcE1jdTZyZGdrMi9SdFl1VjJvblZuWlg1TG1Ha3o1ZzRYeUR2dm05UW9iMFRhMFNzdWo3bERrWEFSdmg5NzN5eFFRTEJ6eVVZKzBML3RON3NucWt6MXF0TUZROThpRlJzUlc0QStyNndidTZjSFJlUWNlVTZxZTRySFRQbG5HaEg1blBkWWpraUFERVl6a0xReWhCN2hxK2dCTHFYODV4SkxFWHA3Vlh3RmdhNmNNa0E2cEphRUduOG1FOWVIYmRNYWg4YXVWenJsUXVzdnZEcHpTVHpQV1BwYk1CamNuYXczTTY3OUNVcGd0RUo3REFOYkVPNFV3RkM3RmZrb3FiUzh2U1ZiWGJVaUJja056R2JLQnZJWlRxelVsdEp3cXo0RGhVZ0l6RTYyYzlGNTlsNU9mT2ZmWlNqdU1mdVRnQWxwRnYybEFiZ1cyLzFyendrSldkL2lZbUQrU0VuOGVnT1BITmtIYnlmNDRWQ20yZ29sTmo2blRXWVB1ZDZZTWlteml0akNrUW55L3FXNlNiTnVCaSs5cW96dlpCZW9ES2I3SlNEN2dTaHpaaWxwTlhvOVgrSm4xZHFqVlBpYXZvM0lnaGNTaTU1dXQ3YWlraDZncUFkSk5OUXdCRXV5WDFIaWZSczVralRzL2h6WGpLN1p3ZDZubmVBUjFtNFpJWlA3andNQ1NIQVpTU3QwamxQSGE1Vy9URS9BSVFMTWlZcUppSHpjam1NTlRoWkxqSDVlaTFxNzVBaTZPYVpWQ0N1OUlBanFRWW1xS2ExL2FxdjhvZzRmS2k3ZVBKZW1UWGRyc29WQStFa2o0VktjNGFiMko2dzZJMkZxWWo3VW0rek9BQWE3NW1zbnRwN3JzTnhLZDVuUmhMZ29ORFdFcm9lWi9SQWhiWjFieDZqUTRoU2tPTXU2dVd1b3pGYnRaanU3cTNTVmM3U0NTWE9YelkvRGpISUxTNm9ydFhqU0ZsZnVnSWJBM3RqWEJ0cklsb0czdUNDVGUva2hiUGRJbWl2MEdXN2VxdGF4Y2Q1cTR6dWdhS2l3TmJnaW4wVFViU0huR2tBNHJ3UG1PRWMySGxmMlNQaHY0SUJNaVZaOWg3bVNqclUyOHc0aFVtOUJiMktjbnVIUlNGdEthek1TVGN3RmtTVEZ3ekVJRG5iSWJBSWlCR3VNclQ1TmJDREhGUWRDVVI0WlFLQW11eHN3eHBXY1NJdW5seS9rTUJPL0lON3JrUnR4STJXaTlVWW1kdEcwczAvU2VXbHRpT1pOUnpROXFZa2gxQndIWnlVY1BHZmpwbUhyYTRyU2JvM0JSdlFKTjFIRFRXN0I1YjcxdnpMbDN3N2gyN3NTQ0lMdG56K3JZUTFUeDVHeEtLYVBBd291Wm5Pd3NDVTduQU5LL2gxR0FrUnR6Um9SVWFUSzhmcUxMWjhYa0lMaHBmVm1WMitJRXhPN0xDaDN5ZzdrMXhqQzNaTUJudjRVZTg5UDRoclYrNjVNY1BwVXFGc0FVdTY3K082SXdkcjlaYnVtRENOaFRvWFZMelBMRCtCb0tud1V0SkQ1b1ZOUjc0QXpxU0I2M0tCWkZHcHgzYVUwM0JpN1lYblpxdEhkMU1QUTNMd0w0RmptWkJhYTlNdWI3ZWZyeTZWMWdLK0tHTVkyNG9pd2JDbTNqdlV6SzJIV0FwUHo5ME5od05qRW04MTNRRW5UdkIrNm9kWHFrdkR5dGNDWEpMb1l6TnBTaHBveXl2clJ6RW01aThheU55SUJqVk52UnFvTWd2ZlAvVzB4eGFKbVJ0NEh3Ukl2ZkJTbHFtd2NzUWQxRkl6Njd2SVVrOTFvWXVCeWlXNUMxUW9KQ0VhNTNyc3J2NG5FR2txb3BHVGIydnBVQXZxY0VVZVRsdDVPQTJwalhxQ3F6c05aWXFEVnNQSmJEci80eEx5d0k4cHo5aG54M3gvTHBsRVZsUW10NzNHYVpianowWks3dHNaL2F0T1ZTWTFzUE53TkZzc1N4eXJnQjRJOUk4K1J0TVRNTWxCNUNHN2lZUndNa0ZVK210anM5UDZrdmgrckdCeCtUd3NoMHRUWlVVRjFUNjRoSXdqRC9BcU5aRzZkL09QbUcxc1V4K25JRXR0V09JSklXbTBZMVl4N0pqVWZqRkp0K01SZ2xNc3VIWk5kenN6ZzhaU3QvYkI2RzVyUFhHN3QvNHE3ZUFPaEYyNzhKNHpGc2ZMTGFKSkFicGprMFpNaHBySzZoVHhwR1Jqb3h2U1o4c05USW12bkwvQXNOSU8yaURkdmVYTXFUTi90UmIzb2c2VG1zb05HWFZuZUk5d09wUmErRUtwVFBWMkh4YUoyV2RNMCtaTjlRZDA0SUNoQ3N6ZEZFSitWN0hkLzRQalRWQ1pwVHhBSFhsUUtvSXU1bXFhYjRKRmZ2UHZWV1RjN2J3a2lEVHhRcVNTazhZQzN4Zmt6Q3lOMU4walpwVW5oV0FaY1pxSE9qOEFHd2Ezcmo0SG1hbk9xTmlvY29CTEMxRGZNRmxTWTBRVkZHZEx6Z0pCYmNra3hadXY1TE1VZkpJRlBXSURhZTBsdDJYZDBFMzZiMy93ZEh2NzdpZnJOekhVUjVuQ0pRM2k4UExTMWNaNTRVbDhqa2RoKzlLRkxFekZkRkRHZFl3QWFCelBnY0NCeFprSVRMTjAya0JUL280Tk9NMnhSMU5lREFNeFNOWDlVMHUyYVNwZVY1TTdIK01YZU9ocXZaYjhQQ0NVbUI4d2krZXZLQ2poOTNUUGRDSlQ1NXRjNVlTOVZmUXVqbGVaQTV6U3IwUzNUS3BkSEo5VEhybVBqdXZXUVZNUzY4OWlMNDVVSUJxTmdsb3FnT1pRN2MzUlN4VHVuV1FpNm52RHA4YUwwSktndjhBNkdqVUdKUDdoYWhKeGp2dHRPQ3ZZN0oxdUlId2txTTBwbkVVYU84bTd2VVorWDg2Y21sM3hHa25jZzVxSVhXc1VPMUI2YlhKQmplRVJ6RWR3N1c0aW81bnRvbmVWbVVodThVdW5xR3J5a0tHdnpHcW5qVkUvOVczRHNGM2RHMzBKbHVqYkgvWDRBTGE1WGZrVy9OT2xoNzBRSlhvQWllb3RRL2xvZmo2dkF0S0RUMFV3UXMycko4MXJrNmo0bTFGSDdUMm92ZmhFb0t3NU9paGlNMncxTk9MTE1URWduWjlyVkRTZnc4NU52RHluQjlQTHR2eFp3UUNPbTk0dnl3QmVzVThzaUpSTlBHazcxNzE0cDBla1FvT3FoU0tndnlxMmI2cUJzS2w3c2R5V2Vyb3RjQUxUWmI4T3I5a2FVOUNFbUszRmJnZElldU5CbHdEa1QvWWNHVUFvcW8zUjR6YVEveEJ2Wk9xNmR1M01wMGttZXpRNkY1QlErUHBGOEgzcVFZTE5oTVVzY21BTkNpbHJhaTZlcGRvMmY1MWpDOG96dDNGUnB4YkVKUmg4dzltZjNRWmxIczF1RGJnS0ZtYU12SS9LSE5HTGNiQUpvZndvS0Z2THFNbjArMm1CbUJrdHBWczdOTW5Lck1ldGtHU2h1TkQzMWdwOXN5THBiRmM5RVE0N0dpek1tcGdCTUlZdUZkR2ZOWXZ6M2wyQ0Z2cmN4Ync3UGtDNlg0L3hKa0dKUjZ6WnNBb0k1QkprdTFMSGFnY0s1bUMyVUwveHJzSEhueVJEbTMzbTBvNFJ6T01QbUdSTnRPUjRDQ1RvMmc3YUpuZlRLeERnU0hKcUw3aWp5VExwWGZVL2VEU1V4WEc3V0R2RUtoZjZFUjBJbHZQeE0vMEpTaGtCZFA5L1o3OHRBYnVRb0lMVFd4bFRSQkd1QjRERC9QNUlrKzNpQm56TUl2K0RXdDlzK1pJcXlJQW9nKzRqK1l6SjNwZ1VycFdTQU5aNEhjbHVYMzVhVXJrdFJOMHdsdkwwcm9STTZKYnVsYWJqSmxDMkFndVBQN2FSYlM4bXhNbWxRWmhGMVNsWTd0Nk1UaXVkRXNpYjlxN2VBZFR2cnFQNGhsTVp1WVhDSUhPamlFMnVSZGczd2txVEd1ZGVxbkxGNmxqZ3FYWDNXMGhKZ1U2bUVibjlxejRPZXBZMENham5WUlpzL1A4eFdQZE5hTDc1UXRnSWhRRytJQ0NZcWZxakpEMkp2T2JLekhsQWtjamppVnVEdWxjU1FtejAraTdnRFVtZkxSRXZMUk9wVU5MS2VRazNlajFmbjRBcGxVcjFydlFJOEZ1bWZyMDBOek50Z21zZ09TZ01OV2dlcTJmZmdoRFpHc2xSeWl6K3daUmIxazR0cEVlaTFtb25icVFwaVc3QzQ4bGRMeEJtdkZVSWRUdVVtQk02REJZREhlZ1IrVFp6NG9yb3BpNVZqYWpIUm5LL1hnSDlqM0ZGSCs5WnZIMHJidGZxVVgrYTAxVEtzNW8wT2F3WTlpMFFXL3dKK2V6ZWJVSzZjc2plYWk4OXF0YmU5RGpTY1E1d2IzaWMzL1BET2IrNC9mNThHOXVSQjNsLzMyYjZHSXVTOUZjSVdHQWtkTEVhQ293Q2FPR1psUFZWVVMvbnAvZU5KMnFUOWlydXVVdWpaOTdONHJWYUowRUpnU2lkYktaTGs4bDYzQXV2M0tvZjFHb2pzbFkvUG16c1dGVE55Z2JRNkdvMGplVDFiRUM4bmEwSTRyZnc2cHVGY2ZLSEkxclJKd2RLUEVHa2drbVFrNE44aURoTzFiZHdyYzZTVHkyRTh5MUJ4M2RrVVgrS0xldENyUEkzRlF5bkNjWUdQMEtnUEhydXN4Z3B1djBwam45aWFFK1ZXejRuN1FzRmUyOGhOM2hQR1BSU3REUmp5L3p5eklYclkvd1RjS0hYOXEvbkVTRTBBM0pYUmdyUVdLTzN3bFJHSmVQWXRXRENCS0dlL3BUd0s2R2F1NG44TnRqTU9TSFpIdXBCeWEyVHRQN0pJdUlVUTROY2FCVFJqU0hnRFlGVC9ZK210TXFxclVPZkFhRzd1aElsNU1wVHZNaFkzSWxJYkhmNytPSFVWbjl4cjhtUitmRCs2MnhZdWhHOXM2cHlXUDBSblQ1VXpiY2o0NWp3dUxtb0VSNVQvbktBQ0RDK2FxRnExbGo5SXlpZ2FZbDUxVGlVa0NKb0g2Vk4yTVFzWldWbm5ERnR3RDB0ZDZBK1htQktpOGo2OHBLRDFCd2xCWXRrY3Q4UThqZ3RPWGxFdDVJcUdjdFQwSmEvOHliSi9VMlZYV3pNM1hPS3d1Kzh1N3NJZjlWcVNnSWx4bHNKcFp0N0JsZDFUT3lOT25WYTduOUZYVVpjWXRwSlppcGFJMFNXeFRWMHNiclkwaythMFV3eERzUEJUbWtIMU4xVDJSYklReVBPdlF6aHMwT0xtbHFjdXJEV2pKVUNTWW5TSWdHOXRhRFcvVzI2UnZVK0cxZyt1Q3orWjdtcnRWTUlUYk9LeFVnd0Y4d3laQ2tsdE5sbnAwNWpIT2NNUTA1Ti81UldGSW54ZWZnd3FtbzlYNVB1WUZnbTJwSjQvSjhkTFlwdmkvQU9NUlZvMU54VlZnTWZoS1ppRUpKbVFJVGNXUE1IUHZXOWlaejM5QXFQbmF1cFF0Y3NZMUdqWnhjVjBKb1V0dXZJeDZyNUdBMmw4dWJaQ2gvWHlvdERwUE16cFFNYXpTQlN6NXRmMUxlOWVrTmJEVXhMQnJQOTJqMFRBRXc1VW9HWkFYRGlKbEhYeDJKOFQ2VzZaM1ROaW1tMHdZWXBvM2s1S0JNWm4rZGIwMS94TXZJOUkzY1ZWOVZqVlBmMnQ3alE2SkpVcEhUSFdaRXU1SkRhZ0Y0N096bWl0SFBYYkhJeDAyTnI2Z1RmeC84VWYyR1pPTG1aNVBpOFlBUmlSVkxNTThQb25pa3JYa1JQaW8vM1I1bHkycjAxY1VVVDdVdG1vRXRnRjlKd2pQMWZsaUlPaitENkk1VjlrLzZqeDZBcjVyNStsS3lIdkovMElmSzBiWk9saDNFL2U2d05BaVI4Q1ZpNTFEL3hnR3krS2VLNHhkV1g0dXpjMTJ1dXM0WFgvVVZRVEI2K1MvR2EvWlZ1dzdnUzRucEhuWDE0M1p3NTM3OFhRUm0zNTNhbTRVdldFcHRTMDZPVTBnZDFEWUFTaWFEWWsxbTMwWjdIZStPWEZKcjMxUDVFeXQwaVBkd2UxaHY0bkl2WFF6NnhZN1c0dndudE9PMkZkMUIzbTU0UFh5Nk1WWVVjVjdhSHZERm1laU5uRGgrekhxanZCK3Nza24wa0ZTNlFrZkVSSVFxQ2RyWW5QUUZudjZHamdSTjlnM2hLZ1YzeW9nL3pJei93ZjRsWjhZUUxCWUZpdEh0YU1RMmZRQ044cDhFdUgyeURpK21ZWjlJVnc1cTdjL1lHd0N4SHp1Q1RUKzJrSUVLMUdvbTNWNWZMbmdqUDJqNmk4bnYxemNHZk5rTUdPYmErcmQvRDlMZ29NK0NFVGZXMmhHbkZFS3daKzZPL3B5alBrWU5Teko0QlQ1V1MrTTYyTjE0a0lybGs4b1oxTWprTE9LVWRuc1kzT01VcDRjVy9Ua2c5Q0E2QVlObUZaWmsvb2xXS093OFRDbDU0NHZFeVlOQTNweHRRcU44WUxjL3Y0T0NrdStlNUc1a3JGdFFtSDJQWkFpN2NnTkhNZUhGK2t4bnlMQ1VMTWR1NXNwajV4cmw3c1BocElzODRLZ1VzYmdaTk9HSVd0WHdMUVNxaTc2Z0NBKzBEdHpSeTBBakpEREV4MUxhdE83OEtlSEtvZGVOWU1ScU5HcmlOL0tKMjJ4cFEyQ2g5ZFBnbklKb3VSMEh4a1ZFa2l3UVFrTXk0OThJb09LNEwzOXdKaWRVNkhlWnhVRi9xN04yNFlvaFZNS0dTRnZzajArYURIK3JSMjdUc3ZKcjZwK3JvczJCZmFjdmN3em1vajk4bHY1d3hRWTJEOTZVaTVaYVdmcHR2NmxNRi9vZGpYNTdCeUV5UmRBbU9tMHFyaHZuWEtyMnFPWlc0Z2p5QnZLeWN2ODluT0FJdGZSUGpBVXVFODdlc2JqNUZZL0t4b1JDVmRzUnk2YkpVRFZjbVJMZ3VMd2pmd0JzVnNodEN0T3NHUnpmeDk4a2lRbFhQSWFsTWVWVWx1cE1IQ09yWXd4M25WTDBwRUtHTldJMDAzMlZLN0hrWWdDR0ZUNzhtdTY3RUlDdFdHaDdPajlVM0RuSGY4Q0kwd3ZVVzJaVi9hbFQ5VWlzaXpQSjVsWlR4Y3ROSTJBZ0hkSUljYURBUHJ3ZzgzeVBNeENxbldseUk5ZTlKdms0Y0prWHNSUzRpOVFxbjE1T2Vja0ltbTZ5c2h4S29jUXBwNk43QjgyZWtNczh5NVdZeFhBQk50SzBqNW1RTXhnR3VTNWlnckx5T0IrWStXZjg5RlBHSG9kYkRQVUJjbVRtUEZySWNMRUZuY2Fmb0NtWnVZRGdtajV1Umo5NU45c3hvYldWUmRDSVFtR1BDUEVoUk9hTitzY1ZmcldrbXV3OUEvamF3Y0VWd1NzbXhNdzNiQlV6SGowOFhUdGNZcno3dHc0QWRRYXkxNW5CVG5ueXJNWlVVSVpERjhsMHo0dGk5WktvdnRmUG5Pb011M0ZYS0dmTTNYRC8yclJXajRtd3l2NEx4SUVKd2NNN0luOFJKNjN0dVhqSDZ1S1p3OFNhY3NPUUlCRHRRQ1FPblh1QzR3a1MvNk1ZK1BTTzdzd25NUHhZbWltN2pHcHJxZHBJY1NETmhTOFdpcEM2enUrRHRCbzBHdGhJMkRRKzIrdzlqSmp3Z1hDUmdCc2hCRWZ0OXNadTVEWFBSUXFLZFlMUklmMklXRkhxbFh2dVRuVWlFTjNoVmRpUEljN3hYN1p4K1lXdjhiN0svOUZqYkljRDJpTERqWkZhbnd4UUkzYlVuYzY3R0ZlYk5SUnRwUUh0dnRIWEhkaXRLVm83RmtWSzlmVWNwMEZKaExjMkVPNDIzOS9ndmFYVFN4YVE3M1F5SHlzTzlhSUNuSkZmRTVodTFZeStBblpXTGlGbEJYODBldWZBU3RLaE96RGNEQWMva1JPM1c4OWZobnhmbFB6eGtzbUxOejYzMGNMNTJzc0d2Wko4QVlmdXJFU0J2SktpMWJXM010bVROUnIvdFJwcktnUmREU3ZQS1BJV29FMFBqa3NWTE9paFl5Wkc1VkZ2dUhDeDNJck80LzYzTWdJY2hIUXBPVTE3cXVWVXVLY3FteHJ5WGFCUTRFMS9JUWVma0ZqbTBpdjJwcnZJVGpwZ1ZGS1NrTzUvVE5qbGZvMjVQZzh3T0FvanRpZm9PMnBPaWkxRFd2dm5UeVBCeXV0bmRSeTZiSzFxRUJCV3U0M0FFTHE0dE5KaHhrc3k2R3ZPbmNkTDN1aWtYMW93aTZsUWxGMWZLYzRsWmJUOGlXcHN4aDRiWGk2Q2dzcUk4eEFWa2NuZmtrMlREQVZDS3ZTZng3M252QWFOZE93RXFDd0xzYUhaMTM2VVh2N2JZV2U0OGtRcjExRGc3VUlvc1lCNGNIb1djMUREanlqWE9uckxRZk9pM1hFSmZpUDl6cTFDQ2d2ajNiMEpLcWRoMmxmZS8yWFVYbGNMNEJKQ1FLTTRjWkhPV1AyK2tjanFVU2lTWEIwT05nRU13QjVTbHdGUlBhR0lPUjZHdkFyQkpjWDZYOTFTODFBcmhrQWhtZFpNU1B4NnJhdVVrVEozVHBvemw0MEpMWE81R2tOY1E1YTZQWVBiYnBuRTV4bXFBVHAyeTlhQ3hKQnZ1cWJneEc2UU9RZHptNERIZ3c4clhpVENVMHVBWUh5bmhndkhIZkMveWdvTHRtSVYyNTBKalcvQUMzTFJiakErU3lZRU9RK1lJcXNKYmtmYWpqbHlzNlh1bDFLYXJJcHJlZGdVOFZoRjNLSlNhMU1iNzJ6TnlIUDNMeFE3ajN3dWJOMkFOdXNSSlRlL1JCMTc2dkJSOU5mZ2VuN0FWTm5OQ0trVXAreE1ZblQ3ZlIzWllDeG5VMnNwdTFmZTZZc0lHUG5aeEc0OFlRRVVuYlhRU0NOZzdONmtNWWxsay8vTUJFTWFYZDdLM0g3VzhtUEpHdXNob3NnM3F6MnI2c2dZT3liaG1Fak1BTnRUVUtkUzN3bFpLRitBZEtySENYZHBZUkFQV2x2amt6VVFtNDZLN2xCNUtUelAzVnR4RUc5MThrbStNbVJxajVJdExNQ0ZKT01GQlp6QjFpOW9nVGNDbkJyeU51T25yTEVKZzQ4MVhIdEpRd1doajBmdTZPak1wWmVaZFJlVG9CTDZoRGUwdHhWOWc5OHdVamFCY3phaDR3WFRta0N2N2VQVzg1RXNZY00zQXltTUhtbE1RMUZKMFhld2x1ZlozM0Jmc0EyREF3VmUrRjhpQ3JTbjR3K0VBTjB3eFg0THNiQ2RsbXRvSks1TEREczJuaWw2K3VTOGxia3hDbWdyTkR0NVM2T1BrS1FPak4vcWtPOHdsMzBTYTNxZ1RSSk9TTlRTUG94aDFWdEhjWnh0aTBFVkpjNEFEeUxKUWdxTXFqbzFoemoyTURZTWJZSXU0N1BHQUttME5xU2ZTYTlETkwzTjNDWGVzbFFsWnZvUU9XODlOTUJsZnpZZTg4Q1hQRnYrMDk4NFYrTTFyQWhRNGpVSkVUamgvS2I3T2pjTG53TkdieHRXWlVqYVBqOHkxSW9KN1poNTE1cGZ3dXJzL1VWNTVNbHRONHpwcjZIeHZYR3VPbnBXMlVDQnFnMkNiYXNIVmg4Rm13aGpjQ000RldGWThyL09UUGhtY0JVbVhqN1lkc2RHNXp0S0lPKzFtVEZqVXNhREhpUjBHaFdLV2U2NERmMWVZM1N1SS9KdUJ6bFEvVnJBVmY5ajBvN0JrN1E3NHVEb2QxS0VoWEJrK0hzZzRMYXFTNHdGL1RUSGY4dWNIWHBkQmQzZThSVXREYlRiR2orT2U0S1BQaXNoS25yVHJQeUR2MXRVVzNiZUNyL0VOV2kzVkFYZlFsb3h3alhDSTAweVZPRy9Zb0dadU1SRjRTaU9MWkJQWEkwdHVVQWZwR1Y0VWVVSlVpSWNGVWVOcDR4Y2lGYTZURCtmcnhEOHFvY0o0TjJJTDM2T3BMNTlPM1RTeXV0aDgzU1k4Wkw1azBBd3RsWXFnK2pjRUdRQ0h3UjlscTh0cFlmT3ZOUVpaOVZwcktYeGlDVDR0YmdjR09sZFlWa20wYisrZWtYbjJjRk9lOHM1RnlwL0JoQjJONGxiSFoyUkRXZUpnQ080VDZnSjNlbk5sOXUrZWpxeGw0ZUhNaHk4NXlTeFcrTjBrUHNDN0MxTGppaFBrVzE4bkRnTUpWNEZFWVcvYTY0T3RSZ2Q3cW9RTzloSE9sRFBtd0s0blQrcnJFTitYbUdTREw1UzRQSjMveUNCMWxYYzBWbHE3WnVmM1VSQ2kyRjZQOEJjRmtRMy9wei9pUHhGNHk1THFEOTgweFhtMGNqUHVNS2FaMm9rMHhvckpoSlpGNGlRUW12bnJGUTd3TU9aaEtiM05zSGpDVUZtVTEyQ3oyTXYwdFAxQ1IyR2d0OFUyTkdZenp5MWIvckRiZm91aDJwYmV3QlpSV1pkVDAycHhTc0Q0RHdET2VndXgwU1BMSkxxU0pjU1p4dG9QQzNuYzJMZ0cwa3dXS0s1NGVlL0U4UkFMNEpqYWoyZmNoeUpmakkycmxpTW02QWlTeWxZMUNNVnRFRVRWRXFIS1RaM1BUMFVVeWFOVmpuakY0eDRZUEF0aVdwK0pNT1BSQzJiM0JYN2M4NWVDcFNJVzlkMzBhb2VtSlpaaGY5SDRkOVZPTHVsQ2V2ZGc2NHVYR3RqNzNHY2N5NXBEcVVFSitWZ2tHZXpNTk1oaHFMbXRBVUxpZlA5eFJmT3JMZG14Rm5JTUo3TktTNmpkelF2R1lWeGxpbHAyNGsyNlROTk40bUVFeFJOdjRtck5LeUc1SlJyMmY5SXpjdXRyZDlGQU1uaUlEc0MwVnU4VzBqbGdOUnhmRTk0eURMZE8wV2JCNnd2RTVabnd1akxIN1duMEpjSmM2UHNCRFZVZmYreFJZcjgyR0xsclZzYytFaFcwTU82ZFR2bWgydll1SDhnVnlFbE1qMmoxbFpnV1ZFZThKNXZUZTVYZTZzQUpsb20vQkQrVUMwR3Z1OVJ4eUVBNWtCb1k0R0JEQlNRZGN2VmlGVE5CU3BQUXo0QXMyMWdvQWJYWmxnYWg0bGtlSkpuMzVKZmJuQWowT29WaHNtRC9qZTk0QnI1QVFkaWQ2MUpaekVaRllZbmJST3Nla0s1RTYreUxiQXdaVkdxRTcrMHlKSjM2WVhKZEloSkgxZnBFdjRwL0FiVEV6R2txK29mcW9YcGExOGhuaDVHL1NManBRMmFOR2xTVDlOZzFGMEpFK1lTd3RCbnhXMGhOSkhkemIwbXFhSFdZRjBWZGhUdDZ5cmplRlJvRUlyaHljSmUxWkEvcFlZeDQvbFVHSW1LNnFIaGlCVUY4WXg4SDNwdnErcE5vN3lDTXN3cUdTbWVPYXFiMlh1dWZmdjhVbnRpcDRLWnNYZ0VtUFF3NWdReGlKLzlMeG1IaDNHMFpYSUJxYkVJZXg1OG51MzRXbTZnTnRjaFMvbXNHUW1wSk8rUFlVUHFDNjF5N1laZmdFb3AvQzFCb3BTZzBkQytKRVJtZ29mV2hqMSt3ckN4Kzd2WDZBUWpvSjJQWDdWOTQwVUNjeHNkUTBYbVZkdDFsdjJDU0E0OU9KR1piM2ZHeEtJQ3Rkdk5MUXdaZXJaZmhNVDlXc2w2NlNCdXNJNjRKbkJtaXpQcjN6V0RYNXZPM3g0MHowQWxpbVdwQ0ZQMTZKY2dPRmRvWmZUYTZGbk5tb054eUdZMzZiV1JSeEQ3aTh5bVI3NFJCQTZ4K2FGdlhaSTExdy9DWjRKVWdsZU04aDBiNHpMTnRvOHoyOGZuTnFWYUtxK1NrUGM2cUp2RHNTYUVJZ2xDTzdTZ1B6MHpZakFrZE92bTdhVGFMLzAyQmdxYm54TmJTODZidUcvVlkzamt6UnJ5TWtMWlFralhUcnF3NlVOak94WksvOWh6dGFUb3NhK25Xa3dDVjduV1FXNXJXWGtyRUdWcjYreG5Da3hxTkk1QmtZS2Y5U2kyY2dxTGRZM1ZOLzltcldmcUUxQWxubDdmcis1SmxFNUU1UWdnM1JRTmY0UDZVVUp1ZnRtbkpXdU9ST21paDFISHBQdVE1VjFuN05ud3NyM2VxL29YM2Joa292eExta21xVXcrM2s4N3BLNUlpakZ2ZXV4Tm5CODIxQVdkYkdnRWR1TXJCTXNuczc2MjVvZ05jUGs2QUx0SnVBUG5NMFNJTWdyZ0RidEkyNDB2VkgxT1JmMGk3Umh0YW1ZUmt0NVpNaTdXbGgxb2ZoWCtXT2JmbG1xOFRiT2M1dElDYnVYSDdIakF0YkNzYy83cXA3YmYwdURURFB5b2JNZFQvZFovc0tQQlU2OG5aeXQ0RnYyam1sNGNlcFpOTnIybnA1aGhaRU4reXlvWkhNaEwvck9ZSTNpM1dTR3dRNFZsdkYxOW0veW8zc3F0OU95N0dOdEErWHhMOWc4U0cxN01IbGZRNTdrV294Wkx1bmM0TGpaNW9WRjZDeXUwZXNxa3M1TjF1RzRTVFNNcHJGZS9wbFMyN3ExNTFHMVJjbENtNndzdHd0U2ZMTGQ3WEFPSDJVV2N5eW9UYkZoUVRUa1llaWRIaWIrekFEckdyM05PRE05VTdrbmZQZmZjY3IwNlFRTmgwOVFGb3NTM1JrT3lqUjRUSmppQWxVK1gwQjIyNm5vMFdqS1RidGxwUlBYSi9LMU9qTTN1RTF0M1RlbnV1b2pwRDEvVGh5ZEJnN3MwbjQreTlJZXhpdy95V2Jvdk1ZZFkzV0NjQVYvQ1cxb3pyNk9pc0xTd2pzU2pNN2UvMDJSZkkvdEl0QTNWZndRNUtDM3N6UW5Zam1PQWc4TnozYTQrUnVxWlNweFM0SGhabXcxUWRCZysrMFdhNW80QmJwVTBVUFpSbk5PdVNuM3ZjbkZodys0UFBVYzFKY2prNXdIN0xjRzYzaTVxQ2hkcU9Bc0lqczgxc2NEaWJnMHoyR3hpRVRBY1dJbzRPZWVZOWdYSW9MblBKUEdwVGFhZGVlcmZ5Q3gzY2JMeWdRajNQL1RnUk1UMTRHdC90c292SFhFVEtueWhhQXdCdkQ4OElpSU5GZVo0MjlzSGxiaEN3cU02U0srSHlGOU5rQnlkQVJxWjRJbmlQS2JUZ3U2K3lZeGthU1o4ZW9jTXlsTUNZYTF3aCtoclpmRXJsU3ZwR1BvejV6QVVNa3BGQjRDT3BtVkdsRC9sRlYxelB0cWNKTFVFc0N4OThCVHl0bVFzeGxNMzJqNjl1VU43QzJZbzdZUmpzUU1CY0Myb3Z4S3RIeGFoKzhXSXQ0MTdqc2tLalBKR2paZE1NbHJyeXlGZUhvRUx5V0pabWVtUFR1NUdOUTF6RVltck11QVNsWGFPY3pSM0xVR3o2YUdkbXBTcVdzdngyWEhCcG83T2M3YktwWFo5dmVsd05FdEpwNHpRMTYwWTMxL3dhWVVCa1BJa0pjV1BEeldxVERiL0NWeGNxZExTRVkvMFBlZllGRGFTNjNyRFQwdUhXTXQ2bjd2c3hnV1dpQjBORWMyRGs1emEzai9STXhha3FVSjFSQjc0M3hhSWM2dVMzRkttWklVZ3hRcFdFZTZKd3VSZllhZW5xblFNdTNKTkt0dE14UlovSERSc3hkSkZpMU1OVFNvSExaVVBPVmFZQ2RSMk1oNGozZVNENW5MTE9neXJQNlUyemYzNXg3amoxNU5PNGFXZm5wOTkxbjdzNlJqck5SZzZxN1hwTHFqN3Q3ajBSa3pMb0tYb1AyTnd1ZFh2SHVyMmRrWXRHTWEyWndCbFZSUHZFOWNwMnlvWStOUnJRVjV5NFdCbXZsSnNNcHdaMU1GZmwyMkVFdVEza3g2TWZySnVhSmFBTFl3Uk8wc1FZdXZsTkRveUN3SytLek9hb09NbDRCWjZyMzVWZ0hxTUhTM2tsWkhpVmhjT1EyMS9WenV2TEVFdGtyK2o1NzFqOUVSMlJOdG1aNDArcXRXSHQ0YytNTVU0TXA5dFFscUxwUVNnZUtTV2x6YVdxOXdGSDlaUE52YWk1RndUbEVmUlBkL2ZvMUN3WUdhajI5SGRHdTVrNHorc1hjTmlJS2d4L1BDUDMraGI3VTRzeWJGOHRNODNIeFlrTnN2d2ZMSzFxbWN6aldDa2x2c0dvUEovZ3VzZTNReThyOFZ1SzY5UVdMSFlQNlRYWlpOUC9kaER5OE9MM3hsZ2VqZk4rQ2xYMHZBZndMZGx5dGR5K3lQNjhCbXVjNm45V2lWSFdRb3ZQdExOZUEyUk1SQnJITWpQd1hIUElNd25QeXpPdFplT1FxbDVFNzVZMGM4SC9XVW5wK3F2NE1MVjhnTTVGQkJ1aXJGUVYraDNmemhYV1VtL24yeUdWNFdRa25wQVNydUd1SStQSlYrL2ZyY1lBbXFWSEVKQUFqYUExUm14NUxjTXcxYmQ4aWFBd2VMdng2c1NSdXNTWkpCQllrYlkrZU5vcHZBTk1Qc05DbnV0c1diOGVSeFE0NTZEMjA3M0luQXFLSWNqWXRqdmk4V0oxTlJGTEIwQlkvcllDMUMzcm5nNVpQWUVNS1ZPTk9GbkNXZnAzNHppZW90YzUyVVhDcktKQ1psZFJsLzdna0xSS2s4Rk9zKzZ2Wld6cXV2UWh2OXNqV1VtUFhSSXBOdE9BQ2pQMEFoL29LOXFhK1J4Z3JWekMwbnpkVEtwOEpPVm1JejRTZEJGMHNjeERGUXJOVzRLcS9jTFh6aU9RbXMxSTF2TnlWTUlhVnFIbVI4Qk0rNTlZMVNqWjVKTm1Ba2Y5aUd5T2ZpZ3dGNEc2V1B6MWd6Q3FvWEtEVlVSNUorNmQ2RVc1N1BlK3BCTjdjUHlzOFZJcGRjWWVjcmRSOTVzTEFSK3Y4RVhVZHNKV084Q21uNlVoNkw2T01WL3lmSm0xampDUm44NzFRdjlDb3B5UUZNeVdwcktaSTYrRXlrU3J0TldETEVZSExYTTRsZlhoYm0yMmpVVWVSa2xoYmdPTEcrN1B5bWV3VElaTU9CVWF6dXByT1drZ0FmZkdjcURWMTlzcUd3M2dMMnl1VWF2WHgySmNLMVpoeGZWZHZyUjRWeFlWaHVnV0I1dEdjQjQ1ZUE5SWRIbmpteFhYb0t4S2Z3dTNMQi81RU9uaFlHbmxrWnhmNkZBVEp4ZHduRXlIVzBnd284YU5TOENjcHRuVGRKWVdJNnFhYzFCdG95b3VNNFJJK2tCdUI5Vms5SUdvVFRxdE9jc2dxZXRnZ3FCaXlJMVNscGgvY095OVB0NVdLNkpwTkdKczVrK1FaQlJQWVlpakxXYld3U3Z2THQvaDdsZm4zNEtrS3hUMFJQZWtSRVFqRlY1Rmp6KzhKY3RZNUovakRhQmRlcjhXQVZLS3A0bHAvVEpQeCsxWHk5K3YxSExlUW1NZ0lNaTk2WGFOTWRiZi9xbHhUZFB3YlA4N1lXOTFsaFFVU0J1WEJiZ0lpaVpBV0NlSFExYlFvWTQwaE5naXZLVlBybDhWNG9Vb2o5cXFNVWRabWM0SG9YaXk5WFZFeUFSTGNKemZodVpYNFEzdkJBdjRoZ0l2ZXZSaEdCZERQcENoejRKbEg0Wngyam5oMHdqY3ZkOHVmYXY1eWpyKy9XMFdiaFVVaXlrcVM1bm1XdlM0QkI1VjJnd2hWaDFJYjZhaWZNMFhndzF0YWh2SkJZcjAwdllZdFhuVGJKdS9LQnJTbXVIQU9KS05FcEh0RW5mdmhKZ3NvV1hhK2dhNUxRQndvbk1MSU9mNWtsN25vUnRQUldTN2puZWt4S3J2L09sNXB1UHpKSU9ZUUtUdHh4QjFXaDVNN3VuRkdrQkh2eVF2K3Y2TWxTZ1RkblBORThYZWROREgrREVYc3YwZG02MEhCdWd4ZEowbHJaeXdQQUVwWTlPZEtDMTRJMnNFcTlweklTUi93TEJrZkgrbjZVTHJaVlJSRHVaOHpEQVNVcHF1TmtBcjNpTDYyUDhZbDE1ZTdrdDNqVWkzR1BwUEFadCtiQVlqbklBc1Q0YTJqTTBCUkxNbGxmWll3cUVoNzFWT1VoNTA3ZEIrTTVhdUw4RDJYRk5iN0NEZk5xQktTV0tLTjhSNkJ5YjJ2bkYvcUNsdVA5VEZTbnVhQkVsODBIZUU2MHM0ejR0d1dqeDF3SGFGMklpTk01QTVMaXhsSUxPMWo3Q3VWYkI1TEJXRTBCb0ZCMFc5cDZDN01RRE5CdnE4V3hONTVxT08vajArZnRsZDBQTXFqaVlsUzJMcTYxUGJNWnVUV1lpdXE2RkVXc3IvQk0raUZ1L1ZNc2o4M1JWZ0VvREJ4bXU0L3greEpHaStLZTVVM2YxYXp2RjlNQTJVOXFzRTBrSG12VnZtRlhrK21FemhxRHplM1U2ZHZiR0hDTVVmQWdiaUI2dGxGNmc0NjEwVXN2bDd5QStwanNPSCtFNTB4NnlRdFJuSFd0UkFFaEdNUERCREUvV3BRbzMyOFc4dlMrQ3h3Z2t6ZDkvS25iSUFacFUrMmg3dVZVaEVkRXdqTDlPUzZ6alJTWkExZkZwZ3hYamE4YlJvQkVEYTRqT3VheWZBOE51bWdsN09JNGlYc0VXbkN1UnM3UlRrb0JZOHVoeTNvL0xwS3lRWEIycytPZnRYWlJoYmtkbFFrdWFnTGFMM1FPT1hIRDMvMXdlZ3VwS3RsUmZoSGxyV3ZuMzdmb1lnL01zVjZ2WXB2RDBVUjZJZFhNQlVWVzhJcDhJdThNeFlFWHBuK0ZlakJwc1JrNElrckVwcUUxZXAvQTNzc1JyZWlkNEtudnUwcjlYa0RKbHZlLy9KdTlTMmRYNUR3amhjc281SSs3U3o5dmdlazlwWExrdmNzK3lTZEtOSG9ySGtmZlRyV0g4QWJ4Ymo0RnJTZjVzQXJKbjF3OElOeUtYdVh1OGo3OFNFTW5PWUtzQWpKanJxOGZLcXRRUWZDMmQ1SU45ZUJWOUxxdlNmWERrZmxqWGhDY00wS28zQ3pMS01makcwUmdGTm9PTkMrZGxKUTgrQzl0NmxFVkR3UXZpa01pQzNDcXdMcDQzdk1tNmliRkdLVE16R0dERk50ZUVBWHo2SWhGMDJmNW1ORmhjV2xVVXNNQjlLT290WWE2TTdrck1NWEpBYjBpcmMzN3dIYVFWYjhhUzJkS1M4bURtQ081UlByT3Jha0VJSElqcENITUtSRmxUMHd6T0dXZU55emtwOHJHZnBpNzdUaEZsTUtOQ05kWUNQeXJYbXlGRVZTck5MVW53bk1PaVpvUEUzTTZQcElnRHNNamxHbkFDUFJ1UkVQOG8wN2wvOEJNcnYyL2JOc3lVZk83Y1dlUnVaOGl6aHNCRytqbVU1UzY0clBzTFdnTXN2eUdTa21tV0VzeDQxR3pUNERpaUc4SVlsbWVLWWt3SWZFemYxQzM4Vzd6a0RhRlJmbTdWc0RmclE4NWNhS3k0dGJZbXl5WlJ6NjV2OGYzRDhjcjVSSWJSWnJRNTYwaUtzNVJDSm12U08wQnh0SnMwUmZ5cDRYQk5mYkl0dVBsdG5xaHV4aEFlenkzeElieXRDVkJjeG4wVmVkdWtQRURhNnBoTGpibEhuS05aRDNkMFpRSHZJWjNVS2MraHE1R2c4TDVqN0N1TU9FUFc2OFRub2o5LzEzRkxwUllXdzhPWWJ0K3BzVGJ1UVBlbVNnblFHNFM4N2FtcWpEdjFCSUNkSURYMkJyUXRpaGNwNDJQTmhlREhSM09yM1dONFRCNnZ4RHh3QURrZkUyR1hnUEgrQkoySFZPb2RTK3ZDcFFXdG5xTHltbHFHb1BUZTB1b0dmck5xeVRPcnllbDhWTW9DVmo2T3NZcmE2QUF6Z213WDlrYTVlaTJvZkd6Y2ZKczJEajU5dmRMM2IzRzd2NlczbW9zM1hMSVNXOGxGOXVWYXNpS01oTGJzV0VtYnNjTGJLaW5ZNi9QdHA5WXozeVNIYnlTS0JiSnQ4bWpaTzhCcnRBYzFqZWI4ckJKM0tlUEJlSmJqNjF6UjRWa2F4LzQwTnJEUm1LVHdxTU5TWVhZazJnWnJwRlp0TlcrZ0krZEJWbVVObWU5S2RuKzdMUVNOaWVGOG1rYW9IUlV1eFIwZWRFUmdqSUFiQWoxdHhkTzh1ajlVcWRwbUVHa2JyQXJzdnJIbWloRE1GNXpjRzFOM0FiUzJ2QWdmUmloTjh4OFhIUUVEbDRMTXVVY3NId2RrVXRzYklDQ0dBa3l6bVdocVV3OXU1czliREIyZUhkSVV5TnpidzhFSHViekcvVlpQVktaRnNKelV6d2NNZ0ltQ3FzY0lLTGIwV21OWU1Dc1RYRVJxLzFrNG5YMGFVcS9rMEdrR1BHaGxuZ3RLSldETTg3TW1YMi9XVnE3NzZ4WGZHcGZXYzNqSElkZUcyM1U0SEN6ZFZCWXlzdWVJVTY2ZnRWZFRJQTd3RUF5V1BsUFk2TUwxQmxKU1dtbWVFVFdJZzdsdXFIVFM4bU85ZFVITldJbnludEZNOW9tUEFjR3hqOXpsNUc5NHp2ZkIxMkN4c2swSlMrcm9DUnJyREI4SE5mbkRZSWZWTXd6Q2RVYjJNN3ErTXpTYTJuRnhxMExNNWNXaXlocFZwclZNU1RGN1BYcUpjaGFCajM4MGpDVWViK3lMdGFWZnVOTUJ3dUhmYVpoYzdLcExXUEErNW9UWm1rWW92cmlJTWhRcG1rOWpFcmpsNEJpSVp3NXFnelpVdTNqcjFpVlBDc0hDcTJSbGNnTnNoMGFwMUI0Y0VZNTU5bFRSU3hmd3JLdUtLWTVTUHpud3lkZXdHakVxUDR5MTdaenVOWTllMjFQUXRlT2ZmUDBTajIwSnpMRUdKWUhYZEJlR1NVTy9PWVhyZXBZSks5VVdWYnQ1bkJROEs3NzlxN1h6d3dUK1JubjhlZy9LTXdGUDNjTGNlOTdEZ05xOExyV1hwVGJmNnI2bjBlN0N3K3NuSU42STUxUWhHSGNhbnAxZFE0aHNjNjdjUDdmbkszSTRKTXpsTFllMXJUdzNFdzd6VEdEdU16WE1NZy9xWjFsSWFTcEY2SVR6Yy9jRjgrQjdBaE9waG9YYnhRSGFiZkRkS084UWJxTTRsT1BnUU5tc1JoQUlUNHJ4WExvWmFNK1V3aTd2bEdScWdxa0V0bHZMTGxHUHpTSGFadEg1VEZJV3FIdGtobnlybGRGZ2JnbjYxamZyZHRPa2pUcUpXOUVSTDdwWVdLU2NRSTRNSW43VHBIUTBDYW4wd252a2hjOXNxMUI0T0M0bWtIcFM1TkN1eURkUHNBQ0k0aCtTNXVIMWk4eCtRc3NuaWJUY3FWc0JzY2JhYURuenhQd0NYcTZiVHpBNEdRSU91RXpJR3JFL2xCemprcE1ybnAxclJUcVJGNWJQV3ZiTUNoWXY0TUpIeDhTeHhuc0ZxUjJGNXpDQkVERk5kNTE4bVpzcHhsSlZZY1dyNTZ4TGFVRXlndE9md0FiQVhHcFRDRjRUR2lNOGNJUDVGSmdzVGJBaUhMRzFIZjZzQlNsY2dYa21FK0Vub1FyZEFlOTRzV3dxTUJSRVRRUTdrTVAvVGVwVHpra2RuakkrNWkrWnNpaFFwRitkVXBLZTMrK3ZMVy82cTY3cXdRWWI2b2grTHFneHZqUERQZDFyS1p5ZjZCZk9rT3ZLVjRaenhxeTJPTVl3RWhVZXEyMkxkTVYxeHZhNVJyNG1Wd1NpdzE0enEveFRlMTJlZnE5TDhtM3dvTVNLZG5pRDlWbkQzVXozRUNVQldURnN4eTBha3RwYzRNdmdIU0ZGTXJjNjJVbyswdXVCY0E0Z1NJQVZqRXZxUnhnd0ZxZ2lKZnpMeEdVbTdWYmhRWWd0VDMrbnRUV1JRZ3JpclVtQWtrK0lQMm1oYzZwbmhZbUVjdVNBN3BZMUNTQ0dzTklRR3YyQ1luUUpKVDNWeVFFMXhoNTZnMkNtS0FCMWRxTnM5YlJDdHRIQ0h3a0pjcm9ZbG5sNGF2VEJuK1llWDN3aFBTTTdZQmNDaEpxUmlCZzdHZ0hEU01iOUpOZ2o2ay9lM0VWQUQ2OFZKZ2JsZzNuZ204YTFGS2lZL2ZVTGFBTHZYWUlTOWdkOXlCVGtqTzhKWmttSDVQaVVUWW1zWEptWEFQVzRYMWRRM0Q2cFlXc3lnZSt4c0hPYmoyR2VBMEkvd3R4dnUrYWc2TzN6cGk5WGpzRnhOaUtrWDZhL1FBaFZQYURDM3dZNmJpV3JmTW56M0lZYXNuSkZzVHFuUnBLd0JvWUVlVG9kbmxEN0dXb2M4N1VzOXNFT1lLbkRrYytRdzgxbXZqQVArZExlSmhOek0vbDY5akVEbjQySjB2SExlNVVwZDU4cjB1UFI2b2Q2b2tVcFdpTGtuclZBdjQ1L0RhSTB5RUFZMHRFTndpOWpqVVhaU3MxSTIxN1huc1VNdzM1VG1ReEVJODZFQVNncHZUQ296bjBSSm1yeVBDazRlTWRNMlJpL0RBVkxkaG5IcTZmTEltOVZPMmhaV0tDRVhvc0RsUmhCQld1R2c1ZmlXVVNvZFJ0Y1dBZWh0VG1ER3dCOHpEY2hEQ0V5YXNPVVJucktxNG5uaHdVencxdUJBY3l5ODlvQnF1YUxwbjhCWnR1Ymh2QXpVVGl4YmtvWlJrQStweDFqWFRpQUtDZHFlUmFwMlFENXJtaEJhVnlqUy9hWmtFMklzaERnc09IblYvSDBWdXYrajIwS0RSQko5VHRGRldvZ2VqMFFuMWdiT1V2SWIyeEdkaWlQVjFNY2JoVjhETGNiY3FndHlUbUNCVk1CVlhuMkNxMmQwalRlQW83MVE4OEJMY3hESGFRZkRyR1RLOE9sMWZrejNvUGozcytobnVnVUVDL3ZHb2J3OEZRdGtFMkZaNzMrVTBBcHB0aERoTU1RMi9mVEI5c0lYQ0RqeDJnVjJOL2hsWG9naS9VZVozSGJhbUw3aU5ZUzEydEdWTnFDSWY4dkdBNDA2cWdlQXF5cnFzdkRIRUI2dWI3dUNqU0V1K3k1Vlc4ejhvQXE1M1NWVmFJbWlVbFN1ei96Mlc5YWxmZEtnZzdtMi9hUG53Z0F3Y2RteG1XL1VXclRXYWxTN0EvY2lSdFlDRElYeVhJQTA3bEhZdHhPTHJRcmlVWEFUcU80T2xqdjZWeXpSQ2xzZzlOZFdTa0pEeUtkOWIyWkI1S1BLVis0Tys1NzFCNkZROXFmWDd4dFVZY0hJemZGMTFUbUpoL0JWSUk0NjRSU01ZWFhjOXdjNFhiaUMyUHpjSFk1Z00xcUtSSU5kUkVJTFYvUlVqdnRvbThzemlPYTVGMkJiamJUMjNGRDJJbDZMOVFKVmZ2aXJVL1VBL3V2cm9VTU01S25NbDcyTW5MYjN6alV1THZPMFh4elVKeHRuZy81ekJ6WnowSmg0ODg0WFlmM3FFYldyQTBYNzY0UjdSbFdWT0drZnBxZkJyOWZiVk5wVHNrN3B2dHQzTC95VDZDTWhIcFdiMDkwVUV6VnZ0Qk5zZmpqYUpGMnRqVUdjUkpHaWUrbkV5ODNoamk2L0I2SC95aVBTdHlZNVlXSEJuMFlYbFdXdEZvQ2JtcXJKOUQ0V2wvaHdiZmtBcTQ0L3Jhdi96MHRRZWYzbC9Sc05iVEpzV2ZUd0dXbWp0ZE1Rc0l2OFkrbG5Bb3k2YkRScml4RHNleW1BMnpsd1k4REppSzJqWWtBRFlNT3V4dHFpczdPMWcvSCtDUDcxcTI4ZlIwTU11RXRBd1RodnM0Z1NJVmQ3SlZ4enR5U1VSNFpVUlBXaWN1RmpJaFBES1ZCMmdzMFpuZVFxdkVOOW12YmpEd2FxdjF2UitWMVByUEMrZlNPUDZ6bWd6d0xqL01uV0R2UTdKUHBVcU1HOGlialk4VGlib0RtLzJiQmlhdUN5ZTMzNjlPNWROQ1Z5b1BveW8xa1hhN2RuRFZTU0JDV2xZSlc3OWpwNE5hNEhqWjB4M0VOaWFrY29rYUlrbUZNQURXWTlqL2lwK2J2MmpEcmRiVE4vSUVGVzdNTEY5NGROVmtkaUZFQ1VkK1pmU2pWeis1MHFDenFOYjYrSktwcTdqWU1Eelhmdjh0cjdXZmdiSE0wcWNWck9xbWpVYUwyK3JwVW1DK3BlSEVsVXJNRXFBV3oycWRnaWIrZzBxZWFmVXRVaWVEaWlNWGl1UDlyMFp6enJxdlk5YXRoN1EzZjB1eUFVZlZFRFFRTEllQ3RkV1hVWjBXTVpCLzVDa08yd1dlQmZWK3JiQjdyV3hQaHVGZDJDcHB2cktKem00NHgxd3pHNjg0VWxsSHREcm1tV3VXU3NhWVJZd20zdHBTZGJpbldaZUU0S0JENnZxU2hJZ0lCeDNzOG01Z3h6OW5YaFFRTDNRZXo4K0orZklyam8xTGJyRWEyL0hnNi9wZ2l5azZOdUpTNFJMQm9xQlNaR2FOQjBFVVdoWWFyQXJOUDNVZTkvQ1VtdjRFdFJDWVV1Q0EyR0FNL3ZPMERGNDVQbHEwT0hiNHBtdDNSU2VUQ1VlaDB3bGZCVzV5OVU1SG85Zk1FQWUxZkUzSS84dHFzZUh6YmNOZEp5WFIyZVQySUE5NE1iVU56a2ZBSVJqRmo0Y0ZjanVQeE12eENOZ05uRXJ1V2RTUC9jakVpSDZLVGdXSXRRcGM4T29ubXl3aDB6QUVCSHZuT2NMWWM2SThGYWF1dXl4MEh3YUZUWUxkSVBMOG1PUGM5V2RtaWtPWHNLK25udlZVRlltbXhNRDhobzQyV1hLRmVOanp4Y1duWEpkbGFJeVpoaVhteFlJY0E2SS9WOU5pMXI2ZitKL0VtVWxBOW1RemE2a2l5eUI1QjhaRGFZSmxWQ240SlZDOFoyV0Z1eE5tZ1ZQV0hFblR5aGpucEhUWGFab2MzQzdSajlENGI4YVZiNlFFcThJQi96NkhZSVZXNGRQVzNuU2dxam5SMjhGWWpMT3MraUVtRXNKZ2tsMmVOQ1BhcTdrbzNnTUNFeEwxeitqVDZUU3FhZW1HRXpUQStha1hPakNhWHdXMjQwOXJyaUlza3lCcUExN3d6Q2phRFVlSkNtdHYrSVJKdG9ITGJzbHhreGJzUWo1NElNeVZyTjh6Tm9NZHB4eC9ydjl6RStkeUNLTkY5cmhpbmlzNWFscE13MDN5aWpXcGRsa0hCQXczUlp3b0lqUWNJYkJMdFRzTW1ya1VpL3ZGV1JGK2NEVjhzTkN6K09WS052b0lzUkNzN1NERm9NSDM1UlFlU25QMTUrWHp3eFJOZ1BUQ1h1WnVyQWNyc1diK2hpVnEwd3ZGcGx2RmI2dlFwRHN3eU81eTRoa1ZWRlBTSkFzMGJ6Y2ZKMEJUS1oxNDFqVjd1Q3ZCM0svWFFoUzRVZEpXL0xYS2J0aCtZcVczdlVJRHlnU1N1L3FId1pQZit1dENTSDl3YTJOSTJMZnZ0a2RRLzVOalBCRXkyeUdtK3ZXdlRDMUpxVURtaWJENUh4TjdZZml3U0txdE1lMlo3YnFPWmMvWFArOUVqMnBBaTErVmpoZlVBb0NKWCs4cnRxdVpVZlRQbjF2ZWFkSGx3M3FXZ1VOVlhLeVo4S1lFKzhyNU45WTl6S1JTcE9Ua0VmVmJlTG9FS1lUSGk0NzBIZ2pIb2hjTzhOUE03ZlZHT0xkZy9XWUhyeVpTNHpKRUxVbWkyN2xKY1FaSGRzOUVqZmNLL0szU1VtZTZXcGhMUTZEUmdSSUZTdTI0WU1YS1JnaTJrR3M0YlBFSVkxZENNTjRvQ0hYSVQwMEZoYXdjaGVhd1VQQlJEVFpSNGhlVHgzRTJQZDZWQ2FyOWIrbE9oZ2NqRVN4U0d2cVZta3Ftei9TUXVTRWc4dTRqbEMrb0FGSzdzUHpVYU81WGlGUHRrdEZLUDZDZ0JGeVdIUXdwTlFBMFo5VDhoQ3VVbDFxSmZKSzA1WW9DcGxGSFc0REpiVmR2RHZyNHQxT2tLSUxyNFI5c0hlSzE0TW5rMjZQR0svdTB6ZUtNVm4vai9JcGhobXBxVzVDR2trZXo2dVZrN1h3YkQyQnRGSjJKUmJXK2ZNZzBUOENibHFNQTJDYUhGL0J6OUNRaFd4QlR2OUtPVjd0T2NveThURHZteGZTcGFyOVUyVU9RbFJZQzNFZUlFOEVwWHM0NDVuZzdUd0NvZW92R1N6b1VMeFJRaWhWUW9LS1hROWpWMlM2Wk9HQWI4d0s5c2hFb28vd240eCt6N3o0cXNFalpkT1ZHbEFxanphM2VINWY1S3pETUFTSThDSzhKekFsRGRJeTNrR0Q0d3VqNHVQMHhwK203WDREcXkwbHBiZmNIcm5VelYrT0I0ZitYaTJPVk90S0tpejBxaUxjTXlSbjdCcFJYM2RKYlhSN1FvWm9ieHNiZVJsS09TSDhWQnNHQUc5YzRJT0hxQ05McHJzV01qYllYanF6ZmcxU0IzV29LUVdIZmZ1WW1QOG1JQnEzUGpPYjNnMnFXVEpDeWROWnM1S2NCWC9TV2Rna3hnZ2EyMUY5bmRPS01LdGRucnc5T3BXdGdvUUZIL2UwVktveTlTa01wcWNnYUpmdnptYmJraVRBMUt3UjlFSDdTMXRrNmNRZ2RreVZycXZJQzR5bWN0TnFFcWZxeGlHOFh4VkxxUm5SazJKb0hIODNEczR2U3lhSG5BblJCK210VXEzM1dMRkdFL0tZWWZQbE03djRWS1FlNFB1UmxWTjk4UGsvYy96cU1BcmVYNERRYmtrRDdmOUhEZS9NNm4vWUJiOFQ1aWM4Q3J1YnMyWTljMDMrU1gzak5tS2JUT0VuTDFpT3pSVXhXNzZVZGxXZElHcFpjVjhvdzdwVzEvL1c5Q2pteG9XT3lxaWxSaTZIKzhsNS95d1I0RzlCbnpzbC8zWDBMc2VZdXZldWJNRUFBaEpFTmxFSDB3SGFQYmhOZzhtc0tyV2VKMXE5T2NZMXA5eFZuQWdKcVo2QjZUZWY3U2diVUdpTHRHNmwydGdiYk8wRW1PVG9uL0c5RHVCR1AxcXdnZ3psMzUyL0oweHcyM2gvZ2ZqUllndmN0M0I2bDlJcXdEMVFlV2hVSXh0blZ6N3FWTGlTclY2N0xrbGVwQkJHTWFFNHlzd3p1VktzNndxd3M1TjNhVHIwbjErdVA4UCtpOGpHOExxbFBCdmR4cXdNOCtScG1ZZk1Hc0cyNlgxTEF2eG9razVGUjhaZVlJM1NtM0dyem0vVFM0anhCcU1WUWhxNnFNRXljdHBLc09nN0ZMY3FJRU9pamdjQjU2VCtZWS9vcUxtRDVsaGlBUFhpWlFRc1IyNWhIU2JPcDR6TFdqWm1kYmRDa1BETThiY2JJcFZlbnJyUE5vZit1UDB2ZWdQSEQ4Zjd0OUdBRVNScTQvNllOOHNnMlNnVU1VbXFFaWpXN3BFY08yTWg0NERoMG5hWG81U1dZNkY4eHBVN1VFYVNTWWI5Q1JDNGpUWGJ5VFJVUlZ1WGp1N0lXMnBFSnBjMldkb1hCSGJ4SjJldW5iWDdWUDdVcE5FcDd4ZUViQUthaXFjYWJQRFE0N3Nnd0ZxaHlNMVZwdW1FZVRzYjVDMXFSKzhNNDRNMHExZmlPQUJCOGVTZHZ2UWg0U2hoK0FLWCt5aTJOS0tDREs0Ny9XdzBpQkIzQTZvWXZxWWNQY1Z3d055bzA4NTd3QWIzbGdZa09HYVcrTTh5cjVtbTB5cjAxTkxIZFplWHlYZnBhaTRUY2RiZG0xSW1MVzlNbDdtSzI0NVlSUi9CR2xKbjliMWlPeCtWejU1ZjR0eFJ1c3RhWXF6c3dzTnYwQkxyREhyNzIyQm11TXVHZ0xwVXRyS050WVN5aGFsWlNuRVliRWppRVhjMlRRMWFpRFVHcjVLTmVsdER3ekdERUUzQ3hpU3JjTTB6T0hKUWlhb2o0b1FSd0ZGVjVBOFJwR2VGTXZqc0x1QXJLNnIvQ1NnNDAzcmZoR0NjV0pLdk00ekFqN1dpelVhNy8xYkc3bVRuVit4ODhyVW1OcVlCN3h3SHUvbEJoSGJ1RHAzTGdjZVI0dG1kRW1jMzFycmRVSGJMWXZoVnFyYjFSdWVNYUljOCtTRUt6emFOTzVHeVVaRGRrMWdwVkxhTWRNQlZGem10UDB4dTR2NlVCNkdZQS83d1IyWTNnSjRBZ2VCa2RPWGVxYlFKNEQyYXJqWE04ampBV3RZQ0FuQ01sU29BelNBK0ZnY01pOVhSTVQyMitDUUcrU2doRHBSTEhQV0hWWjAyRDZEczltUFYxaWllUDZJRncyalpiYlVIei9MeXJKWFhNaWZDYktobm5BY01haEZTb3dwMmRCZzBkR0lMZWtiTUJDSEVBSGg3RnVVYXowRUp2c1h1RW5INllIZXY4eTl6bE9kRmtGQXB5U1NPbnRwRVNaZmVGRUlIcmRjcU9wemxvYW9nT0w4QzNBeEZuMWdDTVJVOGFoM1hJZk41M0JNTmp6M3hUWXZ2UGdpWE5oeWM3WVFOWHZZSW5XakR2b0pRb1FyY1NkQUtZcFdqeWdmYU9OaWpBQVJmb0wzVW1JVE9zTUFzZTdyakFyY3FGZTJaMUpEdGVPcGIrcGMzdU51YjdGWkRodUozTWlKUjRUUklLanJWbWdKa3hQdUdXMVoyL1VNNnNaaDF0WGc2MmVsNkJiRUxYQzFOblZ5bUFoK0hhQlhnOWxmVVZNalRxeWNEb1BESHlFM2xtZFJkU2lEUWNxVnMvRUI5d29kTTZ2V1AwZ3Uwei9jUUZVek5DZjhabTlZZDZLOHdRcXRuWDVIbDgyRitVVlRSUnBrWHpFcVdHNG9RZUFJdXFNSVMrNlBCMTN2OWFvMzlqU0Zvb0ZORzd0NnY1Mk05QXFaQWJEUGlRVnYxLzdYV3VBcGhIdjFjSHJhTGJoQ2liNUxReVlpbENvbTZjK1F0UHpOWE9Pd0wyRS9pblNyMFFacnlSQXJrTHZXU0VBaExLNHVEQ2dQSVRKcFczRkZnZnVwWkFxU2Jna1JLUDJnSklaVSszdUpPUmljdm5IZkthdGQ5dmd6Zmd0ZWRIVkVvRmg4ZkhXaFIxQUJ0SS9xcWUvcEJNRExJd1dFT0FhTmdQTTZRdmlaWjBPa2NEUHR3eTlkcHhtZUxHc1Voemg2UjRMWkI2WTkvOE43bkJlMFJGTUFqTk9LQ0NZRE5nTmFrWDVnQTYyeTdWcXo3VkRjQUx4bWI1ekJoN2NweHV1ai9wN1o0TERmdVRDOFN2aUsvY1ludzV0SDNaanBvRFg4bVdUZEFlbU1PNjFZN2k1ZDNtRkdlOHQ5a1B4a1FFQnVGMWVxbjJxbEc3aEVyRDZlYVJwS1VUYk02czlXbmxyZUtWS1UveWZsSEUwTEVhdDZiZko2K1pBY1FWRWtIMkxUbHRKSTBXb25WTTIxcFpETzBaaW9zSHJNeXcvSnBqS2wvcE9BTERuYTZKWFZzU0NCcndoZHJWZEFFTFV4NStEaXBSVE9wRDlTcGVkaDNsZWM4SStHcWZhcUFiZmhIWnBsWjFIRTRBODAwTGdYN2JXblhTbHVIOXRROVVJWk9rNGZBdTlqdlE2OS9Rc1FTY1dQRUV5TGNGejAzeDVEUHZaeVlHR2pOZHBISytIcnE3cWpwNE5ONW1CcHovTEpOTUtxMXNWSStBTEZNbGc5cG55aEdSRmZLSjdGS05aRjhYOUJDRzVCNnVLUkRFSXNRRGRkTDU4YXhjSGdjVnhxa0hBNk1iN3V5RHJiMnB1bFRaeVRLOTA5ME9MUXJndXhJYW9qNzYweER2dkhicDNhZEU2T2dNWGlqY3R1UFM2UmNCSm1FT1hMMWNMY0NockVCaFRSMnpCZXNaaTdtNFc0UFYvZm8rMUM3dFZuVmY4WVNxUHJONGVrRWZVRzZuNVRUcVgwVlFRalMxVkFYamZWek1DS1gremRpYktJWFoxbXhQdUVxcG53RlNxVmd6b0pQdFNrNjZYdTdjUkZoMnJOcTFFbDJreGFxQ0oweWdlQjQ5SDcxN1kvcDg5eUY4Wjk3RisrdExwT3M1cU1ORWhRS3d2cUtZM0F1Q1NmNGEzMnNHanFvMkwyaFA5VHN2WUVteHJQa21iZTgvQ24za1FBTENjRzdPaVUvc0F2SjR6Q1lvTmJpRW9hTFFQVGtTSG1IWlh0ay8xYW9GYmF4S2R1WmwyalIwdExNWm00T2dpZythVE9PaVB0UGNoMk9OYlVLSURxZHdlcWJOZENySzZwc1kxOVZ1aVM5d1p1aUtZYkEzL1dvT2tuOEhXTzQ3dUtIeGhhWEc1TjVNaExpNHcrTVlyNTl4NVFLTXhuODNBQUJCWWorMFRHR3laRG9tOTlFVGlyamRVTDZuUFJ4aHVDenlMeUZucHJWN3ZINjR1aW9uUkJyRDdtYnVFMG9tVXJkY2JzWFZ6cUtiei9TRHB1NXJTY3pEc2dLeVFmWEdsK1Z1M040ekNDR1NBNzE4MnFpVjBmcnNnL2hYdmNUaHVRNGxIcTNLZGVGcnBJNUpOTWR4ZHMyYWx3ckNqdUN0Uk9YM1pvWGxVbG9QcTZSbHlWRjEwUjd5TytNemxGL3V0T0NJK2lzQkpiOUZwdjVWZEFLWG9Gd3M4Sm1NQmxJeVFvV0FpNTFyeU9PaHBjTGJLUFZrNWU5OW14NUxoNi9NejhpVlYveURGMEt1Q3dwZVJ6RTQ5MDh6K2U0Qy8zcmVudUVEOVlUM1A5S1FmbGVMUHNNQXVSUHRUcHBqSXJwYTdpV2xJSy9JY2RpOG5iekczbFJMT0hFS0xPV0ppVlFNdGJFei9FbGdsMEZWMjRKUHE0Ym5Fa0Z6dk1LaHRQdTFkWTg4c2xPbGoyUUJ1cDhnKzc1ZmowK1JlbmZUek8vWmI3V2VSbHZNTjVOMzdyNmJ1T0dsOGJmSGpZMDhyNS82TCtoUENZRE9yWkFVaFJSNTd0N1lOamlZa252Q2l2RVkxVVh0TTN3Mmk0Rks5RjQxczAxaHBTSzRmNlNjTWl3N3lEVzJoNC91RkJpNW1nTVFxWmY4SmdjdG55UEo4UU4rUWNEdnRaZmFaTzJIWDAydXlPcjRXdXdNb0hocWFRMTFFTUJla2Z6RDJFd3VxbVRiMnpBNnVzdVJyZFZ2bU1jLy9GUmpzNWZCdzl2Z2JDYUozMGw4UUY5Tnk0R3FQN1hIS3VhbXdIQjV2MXVWQ2w0VkphQkdLbkczRjRyUDJLc1Q5eDFiZHJiL0RDNDM0UmxhWWU3RERCa3kvQWdSL205VWZuTGhoYmM3R3dzaWVlR0MxaC9ISG96VnZKbk1XWU1lc3VkTTR6VkVqMmcyLzh2bnFLdm1OVzIvMG5NWGhYMjZLTTZPeDhJeTVGMnBSRURWZDVxZlhWOEpwSGkvVzIzUkoyekI4UlFEN093ajBLeG9OSUoycDFjY3FsRnJsbzRFNk5aNU1pbnlERWlqSjJ6RktBZjg0NDBjdlNLSGZLY2lIRTlVS1pCWUdBTGVzY0tuNDJqVjVqS2MvNk5OWnNJYWFRQkRpVXpkUUYxZmdVUHhNcEhVWExDaWtES3FtWmFnRlZKUFZjQmFUMEhtaG1vaURNWnNXU0srYmhJZDNvejRqOWg1SGZvSUNnckliZzVwTjh6aERodWVsSUUxalJGTjBONVRNY3dRVEhMM25neENuYWFvOVNhUXNYRnl6QjRmN2dMQzBydTlsaTg1ck9PdGxQcEt3bzZvUVFiR3MrWWo0YWR2TEoyaG9zQ2lpN2ltYS96VElQeTYweEtHZUhOWkQ5M0daRkM4UGowYmIydUpZMFJiT0pxc1VIWjNRakcvV1ZiQk4ydjhLVzNTaG1oOWRYZUt4VVFuQWx0Z1IzUDR0YnQzbDdqc1VFc3pwUU50aWRuRE53VkN6ekVUYVdON1pPQ1VsbEpSK0ovaVZOVytDNDF1Smx6MndEQ1BvUTFWZEczRmdXNENKdG9tNnZCaUF5U01vSmhvYU1NMThxSmE0TStpU0gya0gxVlgwd2pkclZWKzQwUTVodmFwaEt0M2phMVdMc0NkU21MaEk0Vm4rZkVEdzZnSG5BMVNhUWJlc0czdG5tb2RUeXRZeW5iVzRTa21Kd21KU2JTYXp5cUo0WTAzbEN0d0dXa1hTODkrR2kyUmRXaUpXdkl2MmxVMDNteEVGVTZXU21LUUZydTkyLzBaRlRxQ21oQUxMNzZ0dGZjQVpPZ2g3Y3JOYXVnajhtSnBHV3E0L29aai9OTk1uVzNpa0pXNHlTN2E5eU9rNDA0ZDFWd3RRTXFrQXo1aEY5d0ZvYUY5Z0Q0OENKWlYxZzg0UERDdGNJVzlwQWZPd3R3NGVMcStEeHBkN1ZHaE4yWjlzSlhHdmlhOFF6RjF2UnphanZySFRmN0N4Qm1JdFhjaHlUK0pqZFgzb3BubTFhR3c0ZmxyWkl1REFsRlhLSU5HUko5Tm9XRFk3YUdyQUhlNWZ3ckVxbVV2VFRNYWJZeFpDNHFWcnIwMm9QM1hrZElaNm5uclZrZEZuZnhsS1FXNFVxNktKOGs4ckdwM0dCMXUvZkU2UHdSaVFDT04xNTk2ck9meDg1K0s5Y2p5K2h2MEtkbTdJWVgveG9EeXp5NzJ4T1A2MmJUcldsY3dJb0oxMHN4RXpIeFBqSkVpMldwOSs0OU5BYnplRTVqb3Jzd2NZczQxNCtFSytwT2ZBeHR1R0lkaU5OUXozR01Gcm1xdlgvZzVCUHZaYmlOK0c5SFFuWko2cEN6UGxldGZqdmlRWFcwUDVBTzh6c1h6ajBlMVlFek9mQWxEYUNnc001bkdYWW9xVi9RSkoyUGxFTitpc0FnSUE0eVkwcFc3SnZzekx3WGxGd2kvTmtnVnllVVJjVnFPS24yY2NWelljYmtFYXoyTWNLOWw2MUVaSjc2V2tuZDIzVmxzeExMVFEza0NUWXI5S1lBMWhTdldsK0JUMk8vZStuY3JwKzZDQUFEeXlsYWs0UktqcTRLRExHVm80eTUxU1pwMW92djRWQzdnZXVmOWtsUGZoMjFmVEl5Q1dSaHRidDV2RUFaYk9NbjV1bnhITTZGZ0FSeVRCRGlMSkhNNGh2NXB1eUdHZmJkSkEvV0FXemlieXkrNTRXNTJUVlFib2VFdFk3bUsxM3V5Y0JWM0dFWURIZmZZcHc0VzJIT2hROGZmZVo0WldlV0pvUTdMVis1VVl1U0g4NVJtN3JwVTQ2aysyT0RvVjR3a2hoVmRNTDA4ZDArV1hqUzRlNzVITU5zV0NQNnVLUnVSWmxNMytuQytTTU92Qk0wM3oxWG56c1U2RVk4MjJnakNSQm9Bay9oSFN1UUNnZ200Qkd1Y01XamJzRE9YYlB2VzYvRnQ0Um5oQVdIbjFFQjZHRzJET1IyYUE2UmdLeFk2NnE3WlAzY2ZzY0xwTDhJWXBIdjY0ZitEM2g1MGlDNVBoMklhUmZrYmVOUVova21xaVAwQTBzSmQrNHJkU2lMclJXVitEdW5jbGhWb3paWnRTWnlFVElvK2FKazQrRTYyM1d3UGE1VXo2eVIyeHlTM1RjbFlha1lBVnBVTzdMODg1cXZsa0ZQeTJ1aG4xY3k1dThZSDRkTWhDbUltSlJpdjhGeUdzb2swSWJvc1Z4K2RXSFJOc091dkVjbWZJSnFIckYwaXZEMEVyUktwdkNNWVh6bE0zUjZ6U1ZoMFZuRmo0UUxJS3pNVElYR3BjUDRLSkdrcFpGTTJMOURncGRabW41WUU4OStFa21ZZFA0TCs5N0V3d3YrM1RsNmI4NnEwbGkrSFB6eTZpcEtFV0pqdS8vcVcxZ3ZpSTJKaWc4WGg5MkZlMlY4SW8wM2tQTFpITkMyQ1EyK1A1M3BScW5zK1Bmc0tvdzRvd2dnVXJNWlBHY1g3TlRTUms5dXBYRVNGLzNGdENkOEFMbnZZSlhURnQ4bVJkWjZ0OWJJNXNLQ0l1RVFRL3FFNzhkSjZsWUhrNEswQ1lWS0pxVGJma0JTa2ZRN2x4dVVZY0RYK0JJSk51MWtPOEhNbjBrTW1wNm5ZNjIyZlNwUkd4M0RRY2xCMnphdDV0czJEb3JFelVmV3h3NjNJL29qczVYQ0ttNWp2MzJLQWFxVWEvTU9DY0FuMU1qMCs1TmhoQ2hsWC9DUWlUblZyWDF3RmZmcEI4SElmbTBjWDUxaGJQdXNvb1gxVjdnYTZ6RzRYdW9ZdnMrMHhIQVFqeDdEWVJENW0vUzJFNXVqUDlrNkRPTFZYemp3Unpvazl6bjBlWWVFeXBDUEFqTWdXM20yeUFGMTA3VmNBcWNEaWFBRDFWU05oQ0tMdjA0TWN2cWxCa05Gck5QWCtjZkhidzB6QTZwbE0yR08xcTRpY05GbGlHM3UwZ09mNFV0ek5xZ3VzUUtHK1BTZ3NjZFRUb0dyZXpOcVA1dFpxRnVhZzNKSXJyOFVPZ01VajZVOS8vWWUwK2YzL2hBUXVqRVUrT0pNUDFCMmNsMHNvM1pxZVNjckNoMkg1VFlKOVdVQklSOUtram9STGFQMm1JdGJiSy80QVNsMVB5UElPbStEczVXSUlnL3p0ekVQbDVHMG1FdW5tQXNKdUZmR1dQRENhNEpZeXpoU0NaNFcxTVNJT0JvQUF4RHRiRUdKTlVVN0FQSndzUDlseFUrUlRzZUlpTWI5OWxVQkRWdG5DdGFkNDBrSGdDOTAyY2JaSU5NY1BEUWg5NzhBZnZFY2VBcU1OTm5VZFl1cmFkeDBWRzZTWDRZMStmQ29PMlhTVkhmMU9uRDdMOXhPSm85MTJOdlBscENYUkcxTWovVHJDZ0FKRUNobFhDQ0w2ZjNrRHBlQ3dqVUZtaE5JVkhPQ1pZV2MwOWNENG81WGhOT09GdGpRb0N3M201aTJkbWJ3cXVaaDd5aWxZU2E2Q2lSblFkQzhYSXZQMm81MFVpbnlsZHR4Z0VxUXk5dHRKUlZjbE5aTlNSTzBWU2lFQnlXb3F3WUxjUDVxSzYycDFNc1ZUbkErNG5vZnBWdmRzc0RmSitMZ2c5aHZINUwyUEtEL3RmZWZUdURGUllqdVlpMWpMZVZKaElHUjRUOW51MEMzY2JJUUt3cEN6dCtEZU5FNlEyakFQclRmUG1ONmsremdVS2JEY3VadGlyaHF4Y1I1T0NGdzI5d01xYTJtVXFINlhvOCtpYnYxT0R0L1lKYUN0UVMzVWhMN09DNGYyTDIyTFVaR2JZKzl0NnZnUVUyY0dHUU5uaFZLSG9GWkd1QmJGZ09uSi80RDVISjlzdG9EaytuQTA5QUxsSk9LOWJlVDF1V2FmS2ZOOEtHbXJUdFJNMG56NnJTb3pBUjJOTmhmN3RoQkZvYTlrcTMwQ0g0YnlibFl5YUxJN2N0TURrQlk4dmRFdGxXb3Zwa0ZYVmthemF5d1BXUTJVVnZ1aW51Q0FiL1I4bWwvUzRydzJJTlJrVG9oZTVqTkVsaXo5UDUyWDF3dEFTbkFrZ1lXK3Q3WjlYL3lMcVhnU2RiWHdHdFVnbmtWczlzNmIrSlpGU1cyRm9KazFQOHdoQ1BLLzFzVG4zVkxJMWNtQjlleXZCaXBZMjNNYjUrbWViY0c0UzRQTUtScTQvaUNrUXZ4UDM0UDhlUFk5R3lrczNFRHpkZGx0MWNaT3M1cHp3ODNnNDd1YUFjeTBhYUNoMnY3NkVQWDZSRTdBUTJuRTFOeldiVEQyZk1vUHRhdU5GOGc0TDR5b2tGdjRpQzlUSmlkM09tNjZtdXpTYjc2Z3ZEYVZVOU1VQVFyYjh0QjZLaVJNUUNLZ21ULzc5SUlmSFgvTGpLeWU4bVk3ajZzSGg5R0VIMnlEY3N6RVlTczBFczUyWGxGR2ptM0hIMUJpSm0zVk40Z3RjNnBWSXRJT0V0aXhMNkw2N0RGYkdkbnU0WHdRMWJwN3YwRHpuTk9JSEZiV2o0djlBOFpQdXZCS1pOUnNBVzlVMkVBN0pHWE1ZcTRVc0kwUi9OZmZnSzF4N0tDZ2ppQSsrOXd4OUdSQ0RYY1NkWDZ2R0ZlbGRhR2lyOGt2WTc5ODk0dDc5YlE3aVJzaWhXVVduT1p1M0JxN2xtN2xDdHJoWnB0SzZoRUFZekFKK1FpSjJRT0FockhNNzlKb2JKV2lXZ2VmN0RnT0lZUmhQL25rTUE1cmdJeTVsdG1SWEZYdGtpejZRdzBPWVVkV0F0NXplLzFEUllaVDd1cllSYVUxeE9XUUFkSjhXYzRpSzV4aUpMM244aGNReW5XZFM0UFBUUm9JbE92OGRkdWE1elZaanJMcm1wNGlYVlh2WUY1bmxuTVhXUVdMYmY0aHV5Z2hqZC85RExQc1Zlb2JwcE5kZEp2WHFMYUh4eEpnNEpjSTFCTFYzcEtrWWpWYzRNeU50Q0t6UjlHa1JIbHE5QTQvZVg1NVhsNjUwS1cxaEJsOTBnbXRQN3RLdE03ZUpLbUo5VEpidjBuNkQ3bEg1U0UyVWpRNkhvK0ZvQjE1TzZQQ0RQYXlycXAzYkJ6aHgrVFV6QXY4MVNuamtDNEg3MjIwakg1SWFRSG5nbGJMRGRxd3Z2WUtFbHhPWVoxL1VoeElFOGF1VVBQblFiaHIxeDRlNnhsSGNrb2RIOGc2QU1LeGw3YnoyYkVJMGxXMTRDcTlGb3dBazFQYVJta3dvNmlITFF5SWxmNTNFeW9TRFVyQmV4UmRYL3ZMYTFDdGtZQTdKcnZwT3VrS0x2U2Q2TERUT1pCQlNqYnhkQkd1QktuQ0l2cVplV2VXNWpsWUVYbjAvR0syaHRjTTNpNjV4VGIySWFCVlFlYTZVTTVRdkxMWVhvc1QwdmZ6N2UreTVRZWxFbisyT3lCTnVxSTJKSUZKbUFjK29Dazk5SU1tZXlXb0I2WUZFSzFPSW9sZ1ZJNE9qSHlZNVhkbkdFSmZGY3gydk9EaEFWU2d2T1ZEZUROT1hxb0hweWlSSjZOYjdPZnNZTEh4YTFib25EaG9acW84dTZGWjNiVCtMb28zaWFpZmN1VytMeTdsaytkQTd5bXZoaGt5SmZRdXRKcmcrb0xZUFRNcmpHY2s1VVZSWjg2UkszMlhrVnFNcW9aRk9nakw0YmoxeEM5d0pCdGowMndFMlpsNFVSR3E3WmRtUlBZNmRKS3NLNGtnQTEyY1FqUDlBbjhlRXZvamxJN29qOWFPakhXZjVTNUt3Q0pPM1E1RThzcXRmNWJ0a3JLQU1hakk2eGw0NmNXWWdNYmZzWU5yNXJibVhNUHZQQmV6bkN2OW80VmFOR3NDd2tjWlIvbW9NNWJMZEpiRHYwbVUzdmUwcWpwbzhRVElZamgyVmQ2ajJCWHp4SytCMlZTZXQyZXlmRTR3bDNjRHBsM3FxbjJWRDVJaGw1S2FISlJGdzlBWEMzNTVFWVFLQk1GZERyOGdWWnRPak1GK05PeWhOZGlVaXRBcGJqdUU0eDFTc3FUM3lFL3dyVmRINXcvV1lvUUtleFc2UUpBRWJUSEVhSEluNjFmR0hJMkcxZW96cmhibWZHRUZuMS84TDhIZVNJRmQxWG5JME5wbEhhZkFZR1E3WlF6dVdQUUMzbTIxcTRSVmNtb1pwRGlxR3N6c2J2SmVkUjN1Y3JMMnJ2bFVTcFhqYXVoMFJtelkrTnlkNmZJMHBmdUN0RzNZNmdUN0dZVTZjcDRZcmExYUNXQzZIOEwzZStMOTI5VUhFd3NlZTFEVDdtdjZqd2FGakxXTURDMURFdmdTcFBVTjNoMldDYlJVQU1GR2YxVFNYYmxaOWxmOUFydk1SbUNyaWhBdktPRnVkZ1NCQXYyYjZXS05YQ2tieUZ4ZUJ2RjZHOC9KWUpqM0l4M0pMSkZuU1lXVHkzZVZDbk1ZYjdKcm5neFc1d2NPYjE4bDk2dUVmMThkaUxPaGhUUlZIZG0rMWFWanBGMXdyZFgxb2pnNHh4RmxBQkhqL2VTc3pkdkNUbGd0Zk1zR3FHbmJTV2FVNkVwTDd1YmVKRUlvTUhQMnpPVnA2V3NMRUNrcUpEWWN5ZllyVG1wSy96VXp4VTc1VHZIUXFUc0hxVlR4NXkxNmp4STd5cit6dkk3WVN1WHdhZ0IzVVdOUm0vSTB5aDBpWW9RVDRLaXVQb2FnTEpRcVZtM0lMUnB0ZFFoRXhOSVpLZDl3aCt0V09rbGhkZERDRlFJeDU1VWcvUGdsSkNOVXROMWxNVWI2U21kNkd2L2g1Y0xGdlpqMDUwei9jMU9MaWJzaDVoK1phSDFONjI5dnBmS1d0eDNFVld3SE5rMEZ0RUJyV09PNTdmZW03VTlzWHB3TG5qcFpJSEhRdE50azhVV09WbGVMQmlCOEZ2eDQ0VFRIcXdEUTBuYWpLMDZxYkkyUHMwZS9nSmhvRTJUbE94czV3VGZncFRLT29zL2dsTFp4dGJkUjFMU3prUnMvUmRqOFdMNUNRbnpUblRLQUZFT3ZIWWpnVWZQRFo1SmhZTEI1aTlJQkNObVY2cXRqZUE0M294RVlHTXROUVNyUXFPSllTUUVZYlZWQVVYR2hLT25URFAycm8zSTV4Y0VkbGtHZ0JYQ1NUN24rUVVINTNhbGpydXR5bm5uMzV0UUJIZ3JJTW44VUdMeWZvS29TZGJFelNMeFMyUUgyRXZwQUZ6YTlNNWJ4RVJQY1N5bHpVNVJWL3R5TWFZYjRnRmRQdkRPQTFRSTBMSzRSVUxRVzlzTGgwemtJdjBrNjR1TWc4aTFFRy8zWGxQd0dYeG8yTVc2bjJTdFVkeGxXR1VDbzZreWhzb2ZaY3RGbk5NRk5UQjJHSXNralVBOXlhVEJzNXYwanZrRnIyTlBtMi9JVmJlZ01CNmQvOGNWNGtObVhlT1hpK0RGL3U2Q2NMbzltUitFQWJyRjhZeHZNcDBaVHRIVWJJVUkxb0ltMFhOTExRejIwUnNmbnFoZnRDYzVFZzQ0NktBaW4xTFRPS0c3ME5MNDlyT09QK2hqNjhrZEw1QTJIajBNT2RSN1BSRzBiY0xIWHZWekJvVWJzUm4xcWN2R3IxaWMzVit5eGc0V3picFp3U0JiTjNrQmIyY21TUGlFdjZOcUduZzRpd0RLSjEvaWpKNWxLc1ZBUVhORHV4aFp0Tkc5MFBIQjBFaFJQTlZjeTZ5a3lUT0tZSzBXYjlLRXFheW5RcnRrYzVTdkd5eGNOdkZFZ3VKNmNnSk9RZDY3L2gyaFY1YW44M1M0WDcrTWNaYkdDMG0wbkZUSUswSDFBNXNHMkxiL3JWVnZPVW9vdHBWUmp3T0I1OWZ0WDVieXdYeldBQzVUR1JIdVhCRy9UM21FNXJHSE84eVBhYitUN09tR3A4ejI5MjE4Z0FTTXpzZ0tzUEFlYzF3TzJvVWt4MGQyZU5ZUWZJNHN3eDlIREpCSHRwL2trbDZ2MFR4S3krdEk5b0wwaHZ1ZC9kVElvU3pPczdqNXI2eU5neUVTVGpVYVovSFUzMjhyNWxRVmdxYTRodytUVGtVdWNxVEp0QU01M1RMdHgxcjhlTWU0cHBUWEZFdThuZmVmOG1xNlU1L0V5dWJzdXBhY3BrNUtoTjdCUEdjd0pIYU5HTXBWSnI3VTVDcXNiaFFhcTB5UnB6WWI2dmhLQ1pKQnkwUUFneTgwRDhOQkpWbUc1SUh3L2JQWUFSMncxaGsvMHhsVHI5SnN3bklYQjk1dGU2bGk5RXYvakx5YlU5KzFPcEFCSC9CeGJmckV0MVJWN3dGT3I1cUsveHZ4MkFtT0ZwMEVidjcvdVNoYjIrSkJLMUUyakx6RzRQRHZzK3NEZXdudEtYc3IvUHByUFdlQTRPRWtyek04eXI5K0YvSjlMSTZRNysxVnErUkJ2WkFWanYrV2ZqWFIwNU9pcVVnZHlxbFdoN1VSN1RKUDB0aDZoUHZFblpZVFhCRFBDUUdndTRtaHRBVFBRSDJkSWN4MW5xc3h0M2QwT0x5L0xIY0g2NmJuVC9nUGNBZXVEaDhuUHNUemFGQ1FoNmg2WXZFM09SYkRMcHJQK0QyNlRjWmxuRnRCSGk0MGNzZGJjY0JVeDBYVWEzOHdQdW96cmp6RTR1Z0lXMTBhQlRxS0c5Zk5mNHhBSGR2azVUYkhCb291WjBHY1V5Sjk1MytNTVZ4NjFmTy8xSVlwV2g4djlYN0kxUzlTNE5URXY5VDErV0h6N2NTaTdMamJNWnJ3LzhpTVR2L1ZzekQyWm9aT3FpYnBidnpjQSttTXBSMmZIWmJOV055YU9peno3MEMySVJIT1pvTUYzS3lkSEdPU0dMbHdqcWR1a2NSOVRGV1VsVHFYcUxibjBjZ3RSZmNmSnF0WEZEWGV5dFp2aHBkUi9pOHJvb1Z4RW1UVC9tTzFUbVNKVS9HM2lVNE1COVRlZDQ3UXNQTHlYcll3TUlxQ2tWaGY1STZDdExQQ3llRXlpWmtudkJrdzlSR3gxbFI5c3Q5VXp5NExVSVFKeVoyZFZvTFNMNjAzTkM1M3h6bWgzaUJSNnl4WWZTS213ZmkxREdIQUxUZlRvblNCbTRWeHZpNHpwalpKaXRLTHJpYytpY2ZXMGx6Qjh2NnpaVnpvUHUyNWNHTzlacjlKSTFOamNnanZPalcyNEduWlNQeTAweVZvcnRSeXZZK2p6aitRZldldmx4Yjg3bUFna1pRT0YrZ25vRXNPak0wVFpSRjlOeFNVaXc1bHJEdjN2UlVQZ2xyem96TE4wZDVTaXRkbUlIS0lGL0VPWGxXdGhLcUVHNllCQVhweldCZUFMUWx6SE1VSFkxdWdERFNzeS9FRmMwTVErVXJkZkloOWNQMDVEYjJHOTVVUm8rSlhHNEpsOU1UU2dkUDR6WVBJMkRhWkhQbG1ZWHprakFHODJhaE1uMXdRRVhVaXcydE1LMVJQVk5RVStsV3V0aklYWDhDcU1aMHhVRWsrREw5MGNmQWpuN1pLU1Q5S0hOZWFCaWJoaCtUcjByNTBCRUthdkd0K01aVHRQZnpTWWFRa3VHZGQwR2Rienh6T0dvVGMrTVdZOVF6VlBFMHovQllidGJOYUVMdXdXdmhjZFlUZnlNWVkvelBHU09WTGp3d2oyUHZKQzU2M1hrdTBFWW03bk5oUVUxTGtyNnNCODNHNEdXL3FRKzZ6VDNsbmR0bCtYUkVETGVKVGpsUWdnNXQ1MXAwM3YvTkZPeWNjV0s3b2MyZHB1c3dER0w5bkhqbkdrSXBKOU5zcllZbXU5RnhlcGZBRnRML2NKbW0yRk1kUjdLSEJDNDhvVkFWNXVOWXFYdWJMaG1QRW9vQkhNRmMrWWtmazBCYlhlTmlObmRCdERXb082NHcvVGUrV0l5T1JVNzJUSFNPNEw1QklHdjZ5WU9wcitpR3g3bjNOVDF0czk3VElOVTUyWFJMRktxVDBzTDhXcjNKVktLa3NXQWRTanZidWlWT2l6VU1QM3VCYXhZNGFnYXBzYjd0eUloOVUvVHpwMzJ4Rzg0U1gwNG5iSlpZNGo5ck03TG1iNDJOK093Q3A1ZUNsN2xNbTFDdlM4ZjhQdm9hdkJ0VFNKcnAxKzcrSFN5bWdQS1Jid2RvcCtGSDlFV0k2bSswWDMvS0xTVVhYVEg0N1RtbHlsTExKQ2FFUVpMSXBuL2dPTzNKK1BhcEpMNWtYKzdjakxWTW5lR202WmJvVGtRQUZDU3JBUVdWNFMrU1ZFaE5Kbk1tVVk3UWZ1eFNLYmpyVVlMWVFYeE9HVld2bUh0dlM5ZEtJZ2drY3BLR0hLZWZJd2NpUTMwOHZSRWhuRDVnU0YwZkhYOC9UMWFkK2QySjdpK3VnbE41dFJleVFZOTJOVzFsU1BaNnhqNE01WHk4UGg5NXI0UHVQb1ZsbW5GMjhVaTVqblFqU0twWlFLMi9nK2kybDR6MGNML0VUV1lnTFZXQW1Idk5iUVR5dFoyQkh2ZGNDTnBZQzdiZWIyOUpFS1JDTzJ6OFd4Z2JDWWpoZGZNUUU0R0dFVkliNDE2eElDbmNCT25QeWxyVE91QkM5ZHNrdmRIeUU3TDFxandKalZhMkQ5enhZTmRZZXlreDR1am9oYW4rd1VCcGZNVkhOZmk2UmdPbEVFSjl2a25hWDVhZlMrY0FlL21wWkpHd0NwQjdWWGZhUnVIKzZPcEdrYjZNYk96b2FIMlRoOC9LUWxwS3czS0NPb3NHUW4xMEZ2aHZ1QVJFOVBXd1A5Wjlqa21LUWZCbUFwMnlOYTM3NERPVzd4RTB3SUkzdmNTNmJkNGUwVE13emltVE1iVDZUVUVZamc3YWpobC9tV0FlUXovZEs4VW1xSURxZTYvOUgrUFlpbFY2ZTJVeUJqeHJVYkFxalJyU3R5eWFYd0xRdDBPbmxtMzNmZ2Q0Ull2VTNndjlOejF5cDd0QWNYSXAxR2lPUStOOTA0Vkp3L1k4a2hFeEZYVjdEWXlIV1pkRGExUmY3dmZzTFBLekRjZXF6bEZLMVdINFd2aSsvWXFaZjV3Nmg4KzRINWM4VnY2bXV1K1pUYlUwdzF4SnJUSmtoSkc4RmxoTFJmajJjbGFUMnhPdG5xTnNadkx2N3l1WS84Q1hzQU9yYjRwbUhxSHNqZ0lyS3RxRlI1eTY2aW5pOHNlOHRuNHJSc2ZxNW1ORDVPVmhyYnJwbmlweFR6bjV3K0hsU2RMU0hhWGpZTnRnVlNOMFBmWm5tc2t5TURUVnU5TE1ZMmtxTEl3c2doZ3cxMThTc1dNSFpVWVZiUmlWRjFDNkQ2a1kxbXkzeDdteGRocFlQM3FKbVFqU3ZTZkU3ak5QZnVLRGI4MnhBM25DNXk4SVdQbzQ3QkJFdmtCOHlwcDBWY1pSdElaUjc2b0RaUzdxRFcxUFlpa01wM3hYaWZSYzloWVNzeitaTk5lT2NhWTU1eUdtSDAxbVN6V3YwbmNTWkVranRhTHF6ak1yd0NtZlhHa1EyK0hpTGVPTWhkSGZ3R3BxRnJhM3lkdVVyU2dWMmhWZ25nSjhGaU0wQiszWGpVTm41Q1BFSThZcitkYU5DS1h0c3FzaXF4MUw2UjRZc2txM1NiN2M3amVXU1gxSFhkeHZ4dlZDVGxrTm5UTnBqK0ZhSktoMGJPR3dqaktWMXBCOE1CYzEvc1owUnFzTHFKdDVsN1drSXh0MWtEeGVWQU9tYjFUcTFXa2hIbUVPUDdZQVIreW5ZYzlpaXdYdGZseDJBU2FhZUx1SU0xOEd3SWNrVk5ob0RJa3VnNlhEVGJvY0VhZkZDbkl2TkRKbFY4SksvS0p1anowV3IyWXNEN3ZybHVxSytGN3UyTU42QXgyeTZsWU5TVzNnblpwYVFNZkFOaVlmRk1xSjM1WUQxTGswSVBSRThFTmtsMUlrMEFuVk1mQ0tjNmYraXMxc0t1RVN1d2luUmdhU3JmR2RLRGQxVDFkelg3N1E2K3FyY1d2Z0NjY3d3NytiaURHZFdZcmtvNGw4MDBjZ1pvQy9VaHM2T0huYXB2WGM1QTNRcTF3eVgvMUE4WWRzK2d1eXR0SitGcHU0S01vdFhJYzVjYzNSK2doSDJNMXNydzJZQmRlUzNCMXFYemFseTRNa0wwblFlclJyYWNyOW5LYTdtQUd2QWxiU3Fsc1lvWXh5dkF6cVRVN2YxODNWbVV5a3B1UGVvdVA4S2RhSS9nTGd5bUVJV2JDV2IycDhKQ3NwMHdTeE5iUVBFMk1xM2c1VG41ZlQyZnpaTzlUbE03NHNPQXl2N0NNVjU4aXIyaVpyYlFPRXJ6djJSRUJMa1dhWWdtRytuOUpRaFlaVEhSL0puN1Z2R3RwbkF3MDhuUkowd0Y5SXRNUGZVVVZMeXFORWJJYjhKdTFiVE05cXVPL1k3enEzamRMT1BHTGVqdmMwWkRVeGxuTFpvU1dsWWJEbW5xMXlSREhLb2d5NGJpeTJCaFVDSDQ1Z0Y1aUxwd3pxdEtZYUZzSHp2SjkxSlVaWElNL2dGS3VXRkFqL3pzMlF1bjZYTGNRbXdaSzhIWnlUYzhrTnZ1Wmh1ZFpsYy8zMU9zWVBBT2hMbUY0dVEzeTFXTXZYVXZ4V2lPN3AzSDZWQlVRcUplb1FCSDZ2UzRoZjYraElnMElDbVFIMm5nVmxobG1YbU5OZXQ2dHRMcW5PTFgxVnBnaXZLVnh2aGtoalMyNVNrOXhVNk9NblVZU3VpSWhudFJydXBEamdRWnl3M21yaHRKclJuNXB6TENob3pSOEpUMnEreDVTenVaUllnLzJoUDlCNEs2MFVPVHFvY1d4NWllOWJhZE41WnlzVkZsUXVVUzNXMVpEV1B6RC9ZcS8yRENhRnBKQ29jOE9wMExZTHFodXNMMzQrVk5ZS0tVbGJRek13R3pRUFRta0txaGRxMmlLUG53OHV1Q2l5NDZ5Z0NTOGlWVWEwT293UEVodzNKczJuR0R1NWZHdGJSWkRvU1ZESjlXclZwV0gxZHVUS3U5VmNwK2lzbkw2V2dzTWkwaHV5dUJ1eDBoOEc5d2tDUTFwTzVZK2VKS3Z4dmVKU1B5SXlZSHNuMlhOcTVtRlBuVVFHZDQxakVyczhvQ0x0TFFpVEtuTkE3RW5wSlFNSmN3S3FieWV5Z0NqWjFFOWc2enZ1eTV1Q25SSTVOcG5acjdGTExhOTZYdUdmTzE3SHNoTHlCSjVkOWlSaHl5YVplckJFYldzZ1lYcUd1c1czUVVlc1Q2UXM4UVJSTk40bHB0MHZucDNJckk5anM0Y0NsKzQrZ3lMY2s0cktnSXBCMENMNTcxTnI1emI3VERSYmNkWjZnMExtY2RrWTN3bXBrNGVCeW04LzFOWHdZL1p3dVhKS3RBb3Nid2lMTWt1TGJzSnNVMEx5YWo3a2J0bU5TNlc3aWM0ZFdMK2l4UllWbGtQTzFQMTdrTDRNQU56SzZYb0Z1a1JnRStDK0tnUExxcnFBZmdIV2JsM2twYWZ3eXIzMm1GbkI3VkhVNHlmUkRQZHVoMXUzQVV6WmtkbkZvWlFYS3Fla00ybHI4eW9Lb3VUNXBxdmgyQ256MHFMSFJxVkdRYkMwazdRZDJBSlJSZ3pveUZkTWErQU5KUHFJOUlBY3Z5ejhLWU85ZTgrWEg2MUdONTN5enFuOWdiUDFMQTErVjhBZUpLa2tRbS9LeXZzUzFJbE96VW9nWXdTeTVaWTJPYmdPS3FRc043dGJ4NU5ad1hhdTZLN1BvL0R2M0J6dzV3T2VsNkFSZEpjQ1ZhUzJYRVMwOHUycHBxVVFPSlh2Y3RnTk94YXB4eU5pM2NPWUtRREYrR0hBeE1rL3dRMWpwTEhseldJUndSR1hkUjVnUzVKYm1ZSHQ0dWc5T0tkUk1iYXFjMFBrdVhYME9UODRUbGs5R3FzY3dsSkJwUERiWm9GQlRyaXB2d2hJNmVKZnZZWnk1LzJqUmFKc1JmNzl4cHM1UG9uNHFJNHR4RFplQWxxYzFHT0dhSC9ZN21sc0ZKTHl0WG4yTmZ5QUtIRUxNY08vaDh5SjAxOXJGT2Urbng3ZGtQNnBuQ2ZJbGhzS2cyQWdqd25EWXB2bE1lVDlIa3duMmY3SGkyQUsyYlFKdkhqMUJ2QXUraWYwblQ3K2ROdFpJM1k5T1NuRHZoSVNFMHkxWDAyMm96SVNIQkdyVmI1elBuN0NiUHFtOGsvcEFlTnBqMjdKL2d3MkRUdHJOTXM4a3BlTEpHVlRHNm92bUI2VFNHL1ZVMFdiUnY2QXQ1V3h2WXpKdE9PYVFzdEVDNXBBSVF2M2RPVHRmQU5HMXFBZUMxRjlyYjVuWCtQejNyQnAzYy9DZkZjclNnWjJQSGFjSE9NOWtueks4U09xcWxQRkNvSmN1S3IyWkRMbDBCQzhqL3NCYVVuMTdZbWRPRCtHVUR5NGt1ZDRiVTIvTXNRY0l2eE5uQVM0aW1pTmNpd2w5TzhlQ1RlUlpHWi9WRTg0WHh4ZkQxQkMrNDMrQWYxK2xuUk1xVjBtOWhkeDY4TnFOWU9udyt0R3pvK3ZQdW9hMTRPN2tqY2UxZWFFd2ZsdVhOaGEzMUdIR0Njbk9DbVllZDdwSWQ4ZDdSRSszQ3R0cGk0UkJWcFo3b0F4T1lsS1lCUGJKUFp1NWVEdHFSMThqN1B4ZHVBK3l6ZWhrSXdCTzFpWVJVQXE3VnhrWC9ITUJDd3crMmdzM25URm14V1NQM2RaazZGRU1vRzZpSDRSM0tGL1V0QWk2RVVqRVVGTjhIYjRaalh5RmY2L056VktibkVtd0thbXJ6OGRjdjlPenI5ckZnMG82QjRHalBTRGZTVEpxdHBPa1NNYWtYNE5JeHo1c2Q0dFZKdzBvSis3cXBUdHE4T2ZyLzFUa0wvTlBrQmJLTkdzbEpSd252U0ZNbDFpeFBDMm9QZzFVRGtzaHMxTTVCSlpNbDJqUlp3bU9WNEpMV3ZFaUJBL2NuMDJJUHpLNGw1ZUJKWGF0MDZDcHMrcFhMdW5YcTlLbzVIRFRkK1BVM2dJc3Q2KzJxUXVZQTdVODYyc0h5NEp4ZnR0NWRFTDh6ZlpLam9YMVVtQ2k2UFRBYjhNZG83UHcvaE5QbDVqWnYyTEc5Nm5HeUltRkpTaForMWM0c1Q2TTdNaldqRHpnVHlyMnRjakFMODhrQzJFTlRDSnVNUjl5ZUlXOUt3RExTUlRYYmdoY2N5N2NVTkl3SHlHZEo0U1pmQ2wxbFJKZ1J1dnVuc1FOUjRSUzVUMkVodmp6TW5xZTNrVWtsY0F2N0xCNXByai9IZXBoSm94OEtNa1JRbXNlU2wzQjZZUENyU1puaHNwM215OVN3U1F0MEgzS1hPdEpLU0dkdDFlQ2VoZUg4UkczWTIveTRKaXhJb2VDcWN4RUcvNDVob29oUG1FOFVoR1l1UmJIRWxLbXA2cEs5eHNqZk9GNGdabDRKSmJ6YzNnSUNxdGpEMEY3dy9TSGJwVndIYTgxMWxDKzUyYVZxalJ3UVRYVEF2eHc0STNSbEtQUlplUnp3VGhJajd0Nkh1S2ZEbTdVaTczeWxQWFVZNitMak5GM2JRckxFMmttMlZLUXc4NFByUmlRN0k3WEh5cXNUWW5NdG5ZSDQzYVJFMDJrbXI1b3RFR05vb1luV01aUVRISWNiME9ZTU9qY1JUMzI3TDNwNlhwc1h6NmVTdzlmOXU3N256Qk12L09raFcvZ0F0VTFBTjZ3WmgyVkY4R09UZ3hCbW1qVjZoSzE1T0l4QTZ2ZkZXRzBLSGxLdmpBQW5VRXd0ZDFwV1lXRGM5K3RrTTlHMjJEQzd5emZsVXFKVFNJVWNhSjNtcTZ1ZXEydHUzSmJ3ZXo0eEI0ZWRRdlFGZ1J1K2w1VTk2Y2RtM1Jhb0dyQTZZVk5lK3VEaGJ0cUk1bklXRS8zay9HUGdPTmpoVjlZZW9wYkEzWEl5T0VtZXRwVU9ZQkdDcUR4VDZzdWhtWXJRcjVwTlFnV2VMNXJvNi9qQyt1alJJWDRaZENSTlpvWHV2OGtVVDRYNW5QVU1DamVYb2pzYVBzaEdMVWxXZWtuTm9pWkhXZGtOZ2lFVm50TkZSek5sOXJlQ3llUlVZWTRDQTZhTC9ZVEE0MEs4eDd3aXhFK0FLcGlmSHRqQU1uN2pCL0xyMGFxZ1pzV1lYajk4SVFLUFo4cUhKRTd1RGFNRTJGWFVRRFp1K0czbkdlMFJBaUdlT0hlbXZaRktQTzFUcVNiSmUvRjVsbkE4Y1RETE0xSFVyTGJHc2loSUtEUFRPeTM4cE9EcmdNVFNaKzJra2lmcjQ4dFZBeFNWbmFUT2dwYmloS0czOUppMmxLNThJUFY1LzBpNXRRQzZQbi9rVXlXVnJwTEluVW5IbkJucWhvMGhRaWc0TTFJdHJzSXpmcDZGenhTWHRDYXBDY1BCMTBJN3hRSldVb3BZR3haUnF5bzhFRXFmcWZJZWpFbDUxcTh5SE9saU1uUEZwOC9ZSkVMVG5ILzJ6c2FkNTA0TFoyTEcwTkljR3p1Qm01anlYTWJqMFdubEZtaytGQkVMN0Q3QmhLWHVlVWdBN0NBWEt0YXp1ekF2QXpSQlNCRmVvUE9GbWovOFE1bmErWFUwY0NsVTlOMi81ekhsWmlkN2wyMG9uc05ETnRNQXlBanBEZnpxMG9iYm9INy9pZ1RIMDBBdHRuYnJYTHpSSjVhS2xnL3QzUllPNUZjWEpPNVpIOERXVWYvOFByTFF4TkVqQ1ZnelRUMURNVFV1aGV6bXJIVkQ3L1dYaVlQR2E2SGZWZ0p2WlM3S1A5d2JaR1lFZS95RC9MYWZNTlZ5akRaOURZNmdFS2lYWVhjNUxaUXBJMU5XWVY0cElJa2xOVDRtZHdFNG8yNHNmaHBEeFNMekIySnVPU203dk51a1RhSzRVM3ZiVGNNMys3c2RVckRPUklNZ253TUVGVVFmelNadXFFUVFBTm5teGZCYmJrVHdXM0h1YmJ5SnZSUEJtNkNtb0w1R1ZsOERzSFhvV29raWIzcVNUSE9rOEljWlVnVjhkZEQ2aS9URVJGSzlnalRHMThMOGRqdSs0eDgxVkdpY05Kb0tGcXY5ekNSTUdVRU9WVkNaa0FwdTBrOEovVG82Sm5BbzI4UXoxclpCd2s3R0xuRUVEcEZEQS94ckx4NEVjS1pGN29ZSlhCTGN3NFpJRVAxNW5icVBnZm9ueHE2ZGZsZm5OQktrZkJMZWNoa1d3cWZFK3dVZnltbW1WS1BLRVV2c3NyZU5QdVdGUXZxODh3Y1ROQnlCdGM0M0ViZWFOYi9OUlpya2Z0elRBbHgxc05QdllsaU1qNWowTDk3VkVHNitVZTF4YUtWYVZLblV6NzkzVTBocFpmRVFBWVpKS1hlb0dSbkxNWWtvMDNWVGtnRU5zVkoyWkw5WHlpd0dUS2JYSkZieEJqdGVmcFVSUE9WSkU4bi9wNnBQZmhqeTdWWjFDSU1CYjFtald4RUIyWVgreVB4L29qQWY0Sk4xcS9rZ1h0R2xRbWtDZW9STm1oUlFEWmlGcUJsZDUzMkEzaDdWUGUybURaa0tXSmxlV2d1WEg1bDgzNFZJcXkyRXJTUElkZ1Zva1B0aEdxalJZejRnYzlPVVp1cjR2NWk4NFViRUREVU9vRm5lVW53Y1dld1RMVDU4VUJIZ1dPY1NLK2pKZWhpYWc2aHJTSXZxdG1OVjduUm5TL2lOcWl4Sk1JdWtpR01VVTFyMkhFYlVFSVBpdDhFM1VlVVdxRE1OY0hSYjBDWE9PdGRZUFhNYmtZZHY2d2IwWUx0clU3dDR2R1dMUFcyWVhobWR0YkhtQWw0S3dRYUZaaGxsdnc2OHovVG5VN25DRzFUdGtDQzdna0FCVVBCRTZJODBmbkRrM3kyLzk4c2oxc3dqTUR1Z1VjR2NFeVVxeTdBZ1JLcythcEpiNHE4MXNySFNGd0JXZElYdlhDVTZtNkVub0JvSFM3NjBIT1dsTlNnbXNpSzl0OGJsMVpWdlRQM3RZSkhXNW9ndk90eFk2aCtkRFlPajQ1WkFNYXY1RFd2WWlIMEZwblhRR3dZUGt4ZU9KSERLdG03OGhXMTFrMDVKbDBtK242RGoyT3BjWEQ3aExBOHVZMEk4MjVIOVJ0Qnk4NEVCMVplZExab0hVQVF3elBLakw5NiswbU5ncmJCcW16VDVqOXdCTDJPWlhiNlFGRFcxSHZReGRxTno1ZG9HZ0ZuRGFJdys1VGV4REFGWWxSdG1Qc3BaampSWXhCWFVNRUFReEZpcFpTRVYwMEE5TUZRaGJJdTNxNS9ITmxNUVpWOUZHaTltcS9hZm9UMldLY25TWEZ6aEpmbmlZWmI1Snpkc3cxSnFEWTVoNTZpSnoya2VhaEQvUTdTZVVDclJCUHB6a1BMTU93L3hMOGdvNWdoWTlkampGa0ROZEJiSjNMN1p4Q2JyenNZS2UzMXM3Z1QvNW1Iay9sSU9hejR1ZEFZY0U5Rkk5TjF0d1JUSjlXTWdXMlMyZkNzZUxqbTNlZGxEeWdFR1UxTi92QTJscG1sbWFON0J6d0toYjRmQncwNW9RUkY1Y3h3RjAweXRMMEdpblJQTjFJcXBBVkdoa1BpZ2J0VEJpeTh6RWJwcXQ1N2V6cUZtZFVXTEh2aVJ0NDlOdnc2OFNQalZTL3pjY2dvcHZUU05Ca1JKOUJiaHRFZGpDNUd3cGkxOVVBV2RjUEl3SjVqSGpNZnR1VWVHMFV5bFVBV3hFdy9HK21uMTREUmZCUTRZNG9PQkhvVndFdkN3TmpPVnZVRXJUOStZaElsaUIvRWxKMi9iZjlBcEcreVFMUUMyTE4wME1FeE5Xa3JtWjBYSjVPODFoSHdkMDJkTGhTNGx6QUtCdWJDMS9kYitaTXpyUDNXL3IxN3VWd2lpL2UrS01Kb2JublN3OTA0WDYvWGt4VURuNVVieFRVZ3hWYTI5Q0ZlaFhiNitpT2RxWnJQd21UbW94WkQrSGMwN3BCblBJczhRMjd0MUFrSWlORTNSSndhY2MrbkNkak1PZWNxL0tGZHYzSTVNbDBtUGhQUUZyU1d5SW1kTXhSclZWSlZhQlJ4Vlc2Slk1M244eXdJZmVhRk40RVo1UWpTN1p3bStzSThKY3NGSm9BbTFCb0kzUDg0Z1F4ZGhiU3ZHT3cydjNCMWMzUE55U0srVFR5VW5BUGpKdHpZTjBtcFBZUmRQT0lEZHp4MVN3VSsvUTZnUUpaTTA0aU1wS25ncThEUGd2U3FicWQxRm9hdnRoWXVUYUk5d2tqSE5MRUlQdWhtdjdBcjhyaCszdkxOSFlUWmtWRmRuY2luSHhoaUZWYzdzQ1BZNko0TGFLRmJxOEw0OWY5M1pRd3BwSWh2NnF6SUl0MG94a0pkTzZ1bThCYk1DVXpRcDUvY0g0c3pGRDRUUjMyOEtXR1RkR1Ayd3N3MVNuSXNiMHErUUtreWdEOGI5bVlwZmZQRzUxUjd1NGZha1BjUjNLZyt6Z1ZOc2hoTW16VUVDL3gvNCs1L1lZdXBzR2owMnFtVVo2MnlsUkJ6am00eFpBZnU3UUxBR3hheHpZdzVwNW94bks3Z2lKREcydC9VTWsyemg3Sk55a3lOTGc0NGZrYUlJd21waFZzM3hBUG02cVNOL2RtZlN5S0krVWVqUDlBZVQ1RisrandKL0EvaHJsc0hSK3pNbGdyemRMQ1NRSjVYSFdHZkhNTzVWckdXc2pWQzhVRk5nazRmZ2tvSXpxU3gxS3oxOFRkd3Z5WXhTZStUZWw0LzZsK1JYTFp5bVB0eVlWbUxmaUFKOU52djR5QkhSN1VKU2FZREQxaUNUWFUvdHBvcWlMTXRqTVltQk5tc29hTlc0RWtxaGMzVlp3MnVuemJhVjZjRmdscVVDcU9IMDZ0bWZ2RW1hbG4weDJVUzlTU1M1UENDemhyelkxMXFWdml0T1YrSkhld1NlM21LbDN1SjJ0eGc2emt6V1hrU1lSWFZJelNCMU81TXBWZmpQZFFsOExWdVZ5R3ViZUI0dXZ2TFhCUi9zYVkzWFlmNDFnUUtrVkQzQTVsZldVNldYZTlMUVVLUEFnNVYxZExDWGZYSE5ZNWlaNE1tM3JDdHVkMXR4eHdPNHV6Q0pVb2VGTHRNaDlFQSsrZUVaQ0N3OVNEem9DakhpWlllOGZzc0dLRWc5MVFuZkd4aFdGN3FaVWdTZDN6N3lDVUJWa1BYL0V3aGNYRGFPN0VUbDV2eEliUXBaRm1yQUJxOVYvMWxNT0tlZC9MRWtsc3VRR0xKZ004c2F5VzQvRytrYkQ1SzczYi9Ka0thREVRcE4zZVRIaVBZaHJiNHYxNEdSUE11N3F1WW1ReE1JSEpEeHNvbzV6b0x0WHdrQnM5TFhqK2IrZWZ5a1JVc2ZuMCtVYitKQUlEeW9pM0cvbXhCSHZUOGhrN0h4RUlyU1I1UzBFUm5rR3RGYnJTWHlkVjlIbjNXdUxDcHhQVFpCeCtRVVU0QW9CdnJsakt2ek5vQXRzNGNvYXhQMDhsNEljbEpjZW94ejkxQit1dDliRHBBUUoyNDI2K1dzOUplb0U4ZmY3QzkxbndRbHpaa0w3a0REQlBBTEJRMlEwZ2pNSXhsS1ArT2JFOU9rNW0zZE1mWnZ3ZmRhZ1VTV1RSNitGazNhMlZ3Q2RCRXhhTEpWNk1Sa1BPNnBhTVJDUUQ2UEhaRHdLMXVnZHhBTGFlNzJHb0VMT3paamR2akd2YjZnMVU3dHhxK2E2Nk1iaTBsWWE3RmlIQXNSRjM0WmFGL0lNYTE2TGZpaUNhODhSbnhNZEtiNTZobzNwSXk4c0hUalZDRGlYMlh6WGJ1NnN4MWZsb0c0cGt4dk1YVGZwMXNCQ3psQ1g0ampLZndNaHJqV3crTXBCU2YxaFpVMTBIZU1JbHBZeHRNclJNY0NzSTMxd0RvcmpIMitTY0JNeXU0Vi9oRUMwZEg3SmpESCtxSmZMd3NzbHpkMjdBVEFrNE0yYnkyc3hJU3NxZk9mT2hUMUJSdzdCUDhNS3RoMW13bzZFUDFTMFJWMXNFY2JaeThlVDE4RWExVVRLb2hlQ0VIZVp4bE1uR0dUYmlKaXJ4OEw3c3EybXk1cTlDMGtTdEcycHA5a2ZZQmxFRGpDMzBNbUFTUHR0N0pPL0MzejlxSHRWck5KZVVRYlR6S3ZyVzVPb2VReEZ0WXYzeXRBNW9JN0VnWmNWa0RpYW54cGt3TStRSlBRTHBpTlprRUpUWnYyZ3JqZVVHWC9iRTlUaXpEaXJ3dUpKbFdLVGk1aGo5Z0g2YmlxakQ5S0w0TWFuN3M5alRjNDIyekNaMnZTTGwrNG4xNGIzMy9oMUdNOTBHMlRPU0kwVXJKSFZRaHBPYVZhMHNUNnZITkplQ3ZvV1duVlBwdXVZYndqbEY2U2I3c0JLYUVERTkxbXdsMlAyV1ZOWjN5V2Z4MDZZZk1XaC92SHJrYmlpcmRibGFnU0N0dUxMMHlvVUs1QTFsNUlpQVBtaG5hTnZ0RG10VlJieXlOWExIVXJsZzlUZnl6ZmxiZFJzeXZFM29OVTJ3c1l3dDAxbnJ5VHVlbTBQQzgrUGlXemVFNXJnRFVuV29mVS9mWWVTVHB2czViMXdSL1dvWjlwOWx5NlNlSkZwUUM3TVMxSFhuQmgrQ0pYOXdaK0d2UnU4Zzh3dFU2R29peTRITEdIaTUvUmJEK3BaQzBhZmdlTHk0Qll5L3R1RWZ3UUpWRHlVWGFhLzl6a1pKR2NhcnFtSTQ5TFptZFlVNlpwUU9jeGxlbzl6VjQ0SkV0anFUOEducHBIM240SmRmOVRGRStjeXBkL01QRk9LUzZ6TkFiZUwwNlo2TEdrOU9KL3dtSFRPVS85QVVYMlA1aHlqdHVsV2FreTlsOHJ5N0ZJZWxyMFVSV082RDFXTnBQcm5Nd3g5T25lak9IUC9LK0R1aXNWZkZMRG1JTjJIQmtZV2lOWFVoYzZEcW5wSHFhZGtaVE1WV3RpTUk4aDJRZzByZkZQamdjdHBYV3FVeVNFVmcrTC9hL2NWS0ZyTjREbHphTkdrdElQRE1JcWdibFF2dTU2NDhmOWFyWTcya3dUOGo5di9XVWMweU50ZUU0a2t4akdMLzFiYkcvRVlaaEluNU9keGpUR2NpcmViNC8xcVROLzVZVGRTQkkzRks4ZHRIUk9hL0g5eHhDdnRQWHB0a29BUFlYVWNGZ1pEcmdkQUFtajZqZHFiVy9kQzh0ZmZmbGtUWlVoQmNGWm84MnRVQ04rZnN6a1lFNFRDTXp2UFFTN21RNUI3YjF6U2FSRWw2M2dHZXZ3L1hyVnU4eFlYT3J3dTRXdi9PQ2N0Y2R2ZUM4ME1jOGxMMU9yUHE0RmdKVWgrRmJIejdoNkVjTVExaFg2Z1liajY1dno2cGk5Z3Iya3pYM1MrUklZOXNrNFlXYURxZHJqdE52b2JCbnhhZ0NObW1uRDRYeDRsTklJbmlDUU01dUJjK0xwWnc1aEZ5N3EwaG5DdmgyeVpwQ3Y1a0NPSDdWaXFySkY0ZDluY3Uvb1hzRUhZU1BCQTg3MlRWRWpveFJ1VWVqcHZGQXNjMGhCVEpjejNITmdLNnVKOTljSFFyRDJPV2xZTERranBFemM0d1NjdFRJZ2RnMUVoUVFlc1g0MmhJQm9yL0RtRHNMU29WZ1E4cDI2YUovWUMvMittNWt0QXpUTWg5bFo5cDJ5RytpcGpQNmJZSGFQNEd2OUtpSXcvaXc0SlF1NGZJcGZkSG91WHhZYzNJaUhCWmZOWnlQaEJHdWtHOU1hNVhKVHlwTGg4eGg3RFVkd09kaURjeEx3a1FVN3FXSnFqTDFRVTZkWnZTM1ZXQ3NDNkpRNGVmY2xmdkNGTi8ySWhQQUdTcDlFczNoNWRISDNYRmFnMEZHUzEzRTU0SC9wOExwRDgxcXRPUSsxbkVPRGs3Y2RsalQ2aStHSFV6bnFuZnI0dS9TYStGRkhueUZndTB6TGFYQ1NnVTZMOXMvOXZzM0RNR2Q4bE1Dc0ViTW1uOXhMOTdRNGNhNXZ6emIreEFwaXpWVTdGcENudnRZMkduVFNGUDYwa1l2Rk1meCtJSlJ3V1k3eVNWM3MrSHY1R3NYQmhMNkhoVHJKZXFVdGJmR25mT1UyV2VUemtSbG1aNW8yYVg2TkZHN09EUkd4dmxlSm5GUjErWFJ6Smt1bDlaLzh6UTdNdURzMUZkSFVPd3FQcXhjNVo1ajZIM2NYNHZIdTV1d0VpSWgwUW9wUmVjNmFEVjUyN0Y1ekJzRUE5MEcxM3piWGdOMkNnK2d1SythYnMycjhxbFVpRXhPUVVGQ3ZGZ3hjWWNLTXg3VEdaZWJDZGhvL3VwRDgyNU94TTBOK2p6N1pQSmVMZnJIL0U4R1Q2UkRVWVduK1hNUURlczZQVlpqN3Q2dmpQUWNiRWhTSVBFZHVlSFI0bG14WFFQME8zWTloYmV5STcyQ0V6L0xQT084a1krWGh4V0VRZmRLRkI3R0k2c1RvVzRxTHFGTHJaTklOMCtUUitJYWoxZkxLM3d1b2RLOUphRi93MFczekkxczR0aElKUzBIRm1kVFFzNC81K0ZlMzVvTDhBSWlsSVdwSGJrMk9reE5KQUpkRU5weGlFOVlwaHVNblkwYjNaWHlkZnhhc1ZRbjhXL0Q2aWFUN1ZiTlBkR0FnL2taNUJlaS93ZGE2N1FLY01ISEpXams2TVBpN2Eyb0NWUmtBV2xzci9KdjVvZWwyTnM1R3Nhc0pJZU8zT1d1dFlMM3lWYnowdzFiTE1IUjRUK1gzbXNOL2ZreWNEb1p3WWZRVkRJYXJIVTZ1dGV6U29tZERjZEhSbUxxN1BnSDIremtPVVdWaVFQcVJUbFhqODF5cnVvL2ljSDFnNnFWdDlEc1c3TS93RUZDSWZCQjJQNGZ2VWU3YWNwS3ZwaHJ1MmJhT1poaWNqOW5CWUtRUTl1VGx6Z01CdmJXUnFUdUQ3bGZKK0FJYnNKNEF5cjh6OG14dE9EMjc0bVg3aE9qUDdmRTJta2x0ZHhzME1uUitjMzdPUXdmcHJuRmZGb2duZi8xTzcvUTFpM0s4VXdWbHBzUDhVbXYzcVhBZTZFRnRNSG1wUEtDVWVWWEhveVVZMEd6cnZXTkpqUk9CZVpXNUFFdjUyQjlWdlpSOGtFaGhrVXhTRkRkTGlVRGhrcVZPcU5acGdWdXFEREhnbSt5aE1hMjl0dFlIaktUZ0hNY2ttd0x0ZzU0UkR2LzhHQTNIOVBKZk8rRVBFYkt2M3BsTEZQNlY2UUFNMjVRcWIvMFdVTVY5TFR6VmVoUlduOG4xZUpQMEFkcUpEYXJTM0RjUmd6bGErRnkrVncvTlhNZjlUTmdSS0pyUVJxdVl1cWVGY084WmhLT05oQmtwdW9Nd2lOaC9BSzJSQkNObzJmMjFWbmdhUHFEQk02NGVMWGtGemhLREdyZ0VLSDA0V1Y1Y3R1aHp4S29WRTdqQnZOQU0zQ1N2dnZ3My9SK3FScys2VkpGcE93OGZXRXE1aTg1MWo3b0tLWGtFcURHQnU2ZENLVUd5QTUvQVd6QTdjbWMvV0dMV2NSUzNiS2ZsdFY5MmhNc1EvWkJTRlZadk1mT2dZNndmU3hVa3FOcG9ML2kvdWJrdERUejljOVQ2bmQ0aEdzQnp3dkxPRXJMWnB1OWtqT3JPcFVlK01GRzJsTCtBcmliWFd6bmpxZzBYRjQwUHlQZTBwaFk0d0ZHVW9YNy9GN3N3a1QwL0tHc2N4cHp6d0hJR3F6Skh1a1VKeWlzOEpuRU5FbllLNDBldE5QTU5MbkprakZSWmlCNG10aEIxNnJiYS9oTTdBYWwxalkvTXZNdnVTbFNIVFNkRVRiYU9kTWRXdzhkd2FhQ3J1cmg0cVFaNzNYN0VzL3gxMWJ0YVBuMFdNa2dZWmdYQTA5M1U4VUhUMk5qU2xJQStOcXl6UmpjZk9rUGJlWm8ybi8wNXBPTjVWNGlJWGNXTUgwSmNFUmZDTURHejRaa2tWVHZROHpZTnhqMEZneXIzbHVURllkMEd3NThQRllKYWl5cm5ONnBrWVhvVURzQy94WHJ1MWhYanlsdW1kWnM3b1ZPWTBEZWhXeWdua0p3UHFZcFdLQ3RZTnp5eEZySEtYRXFXOWdqZ3p2cnkwdHg0eEtteHJrYWF1NE1iUnRqN29GRkp5SWNRMWVjZ3I4ZHNtWEZZZlNGcks1OTYrOExaZWc5L2pWT0hBVGZyZDF5N3puRU5QNUNGWTdXVEd6RUdFUWxUL2crS3dYaHVKa3dWMWsyZ2M5eGdxay9SRldmek55TzhHbVlVQ1BTNXZwOTRrcGpTY05rM3hrYjExQlFVL2V6V0pyOUVHdEpDdHMvdkpqUHBWR0UxaGVERWlBZnE1elVVL3k3eHdRcXk3cXEvdjFjVFJ6eFF0SnhaeW13ZVBDUVIwMHAwUGI5NmZyK05XTS93aHFzMGkwZGZOSVd6S2NnUS80WjlCWTVIbTFUK3RvZUI5dWdtdDh6OFd2TGRSZXFZcHJ0dWs0T2hoTUo1aFVteThIN3FHa0ZkeER4clgwcDUzKzBieTBlSjFCTUlzMDExNG1NYkUzdGNxc0NTWVlwNUVDQ0IzY0tMemZoaU1qa1RWMlBDenV0czVsVE9INkt5ZzNibnF1cVB4ZEgyWnFaNHk3UUtuOUlYbjE3eFZpTHR4RTZ3TWZYMFVQQUlIQ3c3M0huTnRuY1M3UFZxdzRkOEdnY21rTExhL0JRVDdQazU2OGhQZ0l0dGF0RTI4MmU0ZmwxT2tyNmdGVW9kR21yNTltcHJRbEp6TGhJTlladURZa2RpbFZqdW53SnVPVFR1WWFaalU2NGF3dHRiMDlLZmVxdGJjREsrdGdQUmJSQUNsaUwxWm5DemcrUlh6Z1hsenZFbTlWWXNPMWxGYVdsbjJXWXUyNFBJZzZhVk1ZTGdtSnNmbHp4NTB1Yll4dXBWSmtqWDl4SExESks5QmZkT29vYnYxMk1RMUhsOGpodndBU0xzRGVGS2JDY2UyTDZnbzJVeUcyM3pWeXRNeDAyVUhBeXdMdXVreGZCRk9PdWlxQS8zV093TkZGY3gvdDhPZVlnM2FOTGgrWXpvV25sZ2haRkZ5RHZKWEo5U040Qy9TVnQycThPZUhJelFVUm02ZUNVTC9TUVl1blVLV1E3MDZhRkxONVlNMGIwRVA4YXE5Nm45ZjRNYWhFblh5b0FzeTZvYVl3bW9zVVUrT2RaYWgvWnRXR2pNblBpelZWVmV4Y3p0QVB4VC9GTjFVRmUvSVZNaGYrR1NiTGdQTnRUbWxmUlZKNVR6SjZPRGQrZ21EQ0ZaYTlEYXRqS0YxTmlDOEtxTFNvZ2VKNkRyMG9YSWN0V3FXK1BsemFVaFA5c05MbDFSNkROOTcrN3NFSzJ0S3g5VENqS0Y4Q2ZlRHpma0tnejY0eCs0em1DQnIxbW1YK1VwZFZSSVVLVGRnbUk4Q2J2TW1oVncyVWJYaFQvS2NMQkxFRE1vK0ZTVDcyOTQ5NUJlNEdVaVpzUGdlTU5WekcrRXlPZEd6ZE5iRU4vcUlRbmt0ZGQySWY1QzJtc2NndmxvcHFrcGtBUnVRNWwybStFbFk5QkttSGU4TmFCMVdlUTAzSlZnMTdSa0o3TW5peUlJcUYwc3c3Mmd4YzJsL3JVTDFuUlEzZW10NVBNZkx3cHJiMld2ZXlUckxVeHp5OXBLMnZZN1FKVXQxRHp0TDRVUkpFeTl2VFBUYlpjTlNLc3lEekx1R2FJYTlJSFBtZjdiU244MHVyS3F1S0F3UWgrMVcwWTUwczFraUFhOVZyRzB2VFVoWWh3R0FnV3paU2hVd1FFWGdJSWxKS1BPbVZWeEdoNzdmRTdxemFsKzB5dzFWaGpUd2x6eDAzZ2kvZm50c2pEbHo1Qm5yRWFBdUc5cGxRa0RlYjJYbmwyT0k4eTg5d2prcGgxZDN3a2hZZVpsOVhGMHU4UmNkYVMrUHJRekkyUmt5Zjg2ZSswZDZLK1d0RXpRZ2ZnL3BHOXA0Tm00akw2RjZwZzZzUW54S3E3MDZBVHp4N2ZRUnNIekRwSzN4MnAwWXBJNTVMeUt3OWF3UzNhSG8rOU1yMmRMNkpNL3YzclRpTDJjRkRuQlduMnVxVnczN3BEMEtmNElkdmlqYWt2RmxDdzBYaUJFdEZvZHhFSGF4ZzBSS1Y0TmxUNVBzenJ4aXZYR2UrSC9PV010eEtwVExpWWIwV0o1N2RPOGtOdlBRbE1uRmtsTzJiRFlmQWppZUFKbW45MVN1aU1weXVueVpCanl4cDFoOElvdmVpTWkxbVBPWW93MHFGQjFPb3RNRzIrejZibmg2V0p5cXdhSXR0TnpaMFQreTYzRWovdTIzczlRRnpNdTRHS0RtV3dFelAxZE92Slc3S0RwaGVVNXZMZkpjaEU3THNJdEF6TTF4QWZGVVRRZFVMeXQxSWtrcGs4U25KZ0dxbkJuM0J1TXljeFRNMW5vbFZmN2NWbnNwUnBNTEtEMXFzR204ZUp4RFJPZjVkWSt5QjlKQ29zc3Q4dUVxcVhIaHYzTWdHN291UDJuNDBBeXBHYWdpNzZTRXhVclpoOEtvU2pqRVFEc2VuMTNrd3hKNzNaMG9ob2xXSnIzMEszTlhnalVYMUxZUHM3N2Y3WU9jNXNwZUZ2cko5dHRLYnJQSFhxVmRkYTM3WUNsTEt0NVA0VVZDTzRsdmtQUUpFcHdvOG5FQWh2OHAzN0R4MUxucThtclV0NjN4YlJ5Y2g4dlZzYU52SERFUHYvNFBhd1JvZEZkMjgzTlNYdTFROVh6WVNlb3JpcENCdnp1UG5WOUFOTVlrZUd6Z3JodnNDY29jL3l0ZU1uWFJCcWJYczY5ejVzcUFMUEVodkpXUFhKNUcvMGM3Y1B5alVVS2ZBeVVHR1diZFk4TzZFais4OGp1WTZhR2RWeW41VTRYbW0xZjZMWVhtcHRBNDFtQjdhajhISEExSEo5OWR6YW95S01nR01tbkg1OUEyUlg1WjhvQWF4YVR5Q2ZkbmR3U3pEV2NVOFdvRjFZMDJ2bmVjSFA4YXY3VVVNUUFkRXZuTjVxNVBmcUU4K21GT1JBMkdibmpFNWE1NHphZEhFUXF0cGxscXB6dy91WHBKdGVKV0FRUzJJU2JBV2tScHViM1EzUVZEYkRYNkVBaDRVTi80cGF0RnRtRDhTTnRrNTU2bVR5a0tKMjI1YnhpbmcxNEZkN3JnNk42MGVLbGZOMVhhZUcvU0dLR0o5NERVR3d2b2txcDFiQ1NpNC9Zd0dxRDRMc05UOFVvTGdpWXlQQzN2OG9PQnBocHlaMDJRNlIvZ2dJRCtVb3JKcjMyUE1ZYVpTZjJuQkZDMFBhdEkrRFM0UXBXTHgwcElMOU9JYzdJM3VJVm00RE00UGR4RHJtOWc2UWd0MG02LzJlZGQ1cWJ1aEREOU5vakM4cmpocWFqWlY0dFlhSDhKZWdCb08zRjZDRHlkWEh2c0JmSEoyV2oyUkZlcnlaQ0g3eVBobFdHejhqVEVHd21RR1MwTGRyOFdtRmVHYU5Dc21zN0t0T0szdmprL0xscmJPV0hlMkRTNjBETHpIZkZVYm5JUmNwRUF6VGJ0RGxiZzhlMlpQSDlMTTJ2V29iWmVPZkwyc3hGYThJSjJyR1dBR2FVUXkyTVBJcUJsdm5PbS94N2xqODZoQjU5LzI2WHIwRUswamZ0SHMvcy9QR3g0akVxaUU3cGoxY0FwYVdzR3piMjFOZ2ZkSkVvd1FUSWh5OU9qNVdEV3pvNWNIZUNoSkF2WHluMlhDOGtjc0RUTWJIWUJuNmltU3Z5c3YvWFdpZkc4eC80L1hOcTlJdUxkQ1M0MVIvcVJlaTYvRkZDUTdqL0V2YUFsNFBtVXFEdVUvMTVDd3BiUDFtYlNpTUltdkkyZERBdis2TnQ0dXFzR2R6Y2J1MVJtemlucWZvdE82RXVIalZPeENrQVh0MkZrMWlHZmJRS0llVGsrKzFia1hNRlRwOFdrQWt0dXB2OGJvNXdRZmpxVWtJYjYwL2JvQ0k0WndIZzlid0dieVpLTEFRR0o5N0V1L0t3aGdTbFNidTQwUzJUUnpyNUVzV1pUN2lpR0VIQlpsVzZPUVpqcGVSVUJYTS95RTkxcGlDMnQrSXBZT2pDSVZEaFUrOGlzcXpKZDR5ZXhXNzBXQUc4RzZTMFBvVlBiMHZzWVF3K0NkR1lRb2g3b001c3VsSlZ4aDBEcGx6M3pDY0tkZUZodEU0Mk9zN1FaQkpjbExNOGRUOFdnUVZYbGh2NzRKTlBXUnZrNlpNbW8zREhQakpnSTBMcnlSaDlkREdkcDhwOHRvSk0zbUZBZ2xqRnN3dExHNk1kY3pOMm83bnJQRWo3bHkzczZLaUs5d3cvbmRGVHFVQmNLbTROdE0rZEhRMzZlT0ZFcWMvRm51UExPbUF3emtwYVBQZzJ2QUsxZURyNzRnajJJZm9ZWndkclJVdFErbVFqUjI2dFdiVnBIbC9La25vTXNRSDdQNXhTcTNlVkxnYTNDSFZjck5kWlRhN2lrL2V1bFhVazNDUi9WZ1RxRDZZaFBhZTN5S1N1ZktxL1dxN3F5Z04yUC96WW0rdXNQTklzaGFVWTRvRnBHVW96bUdDY25mUjRQNVBzeFFEZ1dBVGpHN1g1Vm5PMHNWUVVCUGZDTEM2UGgvMmRDRGhKbkM1YWxKbllaOTN5SHVzTDBRR0piRUFLcGFQVnQ2WVNIYW9MWE4rZllyY3lzbjN2V0MzQ3VZRENheC9qTVRHMTA3WUZ6Zlk2b0tMUVdIUERqWktXeEZrbGJQSlhkT2VwVE12V3R0aEEwNSs3RTFHUk5lN0lxRithSTVtTzVnQ0VCWXgyYktyR2RWbmlzcmJ0N0lwZTlRbGpvWjIyQmRoY0oyL3RTUVJhYjZ0dG5YekU2VVVrVTVYKzM3NTVYbVVzcVcxWUFNMnZXR1A3dVNhbThFZDd4SVZkVFVCTlJwMDAyNUdkcytoWGZKamRQZzRsejZGb0hNZTdoQTgxWjlSTVZ1T2pJU25ZVWtlcWwwaUUvbEIvR1VuK0Y0aHNaRlJmbjVXQjdHZzU2TFBiVzZMdDBRMWdkRzBVbHNWekxJQXg1RkwzNFVESUd6MHRQQVptL2lxVVkrY3g3UHM0b1d4QVYyTTRYQkdWc0RsZjVTNU5pL3pURUQ4MGp4cm1Ia1hjbXU4ZC9vdjgvaW9qWEdWdjNFYVlKcjNIOFFobkdLeHZSa1pIT2dHYThuUzc4NkJVb2pYMzJaNDRDcmg4OVhTZlRGc2FDRXhRd29NRFlzVUo1dFhxdlNDR05ISlFyVDdUMmVCbDIrb1hxdTl6M1N3NmVIcC9ONGVSZVdmQURxZVlwc0F1cmRxaWxiOW13NDRGbXpmdG9YYUtybXhhUms2ZWhpZVZNU2lDamhhTEszNzYwWm5CR3NrS3ZjNGU1b3dGNTdQU29BTGU4YTQ3NW9HZFNZK2hoaXIwTlJRaEJoTXZEWFUxM1NBMEVESmo0Y2xFZ0hWc0ZsT2lCNThUWU9GbFVUeDVQK04yUVZQNHB6dXF2TDdxRjNJbmF1U284dXBSLzl3M2hDWml5MlptLzJzUGVRK1p2YVBJa2FJajF6dUhSVDI0WnRTbDdSTm9yVHdkbHM1ZUlYRjg3bXpkdzJ0Q3RCOExoNnE1RzdNci9laGpadlNuZ1oxd2VmVU95SmpHanEyWFYyQXozelh5eWx3WG8wcjhuYUNWTkNTd3Q0TEtGN1N0NUlJMGV0N1ZHTVo0ajY1WWsvS3A4KzdkZVQ0eld4VHZiV2VhKzNUcllmYkZ1UVg1ZXVKRjE5TThBN09pT0hwWFBNY2txbmJDMXdJNVQvWkY1YmhrYkFhWDlsaThTZk9IVTBSS1hNVnRoQXRBUzZMTFhXcEQ3TzN0Q005ZlFNUjYraVA5VDkrNFJGZWNSWjVqMHlHNjBWQkhXYzJCSVBzZEdlTjMvSk9aUUpubnlVbzI0UVBxOGlRaHlsL3RUdjhsLzZKNDVDWmlwY1R6ZGFWS0Rlem56Y3JjekJuTDljTzBiV2hmc01sSFFoQi9maUFHazNnVm5VQ2JwT2cwZ2VKZ3FrdUFaa0FReU5CTUE3MjdveVhqSFdkaEZLRzB2Wnp5SGhQdVFXUjBHRkVDUU1zNHpRQmt3dWdWVTc5cmNzOVZaYkZGNXB3T01vRTFPR0JRZEM4ZFdZNktQYTM0LzRCaFpIRzVmUndRM3QxamJUMlNEa091Szh1djFrZmt3akNNTGxPUE1wdWsyS2cyVkZFSC9YMWEvbXpQRGdZZ01KNWJGS0sxYW13SXdzT21PUTdBTXRyMWFLRGVzSWJkekZlOHZrQ2ZYamNvRSt6NUNOQzhyZXhtZXl1ME12Rms0ODFtT3kzazU4czRTOVBCc3lWc0duRGpKbGZZSHpPbVIxM2t1TTVZbnJRMWtVMHdrZWF4VzlTRG0xdEw0TWU3OGIrR3IxUzJVeExqZDdCQ1AvdkpJK290bmxHM0tIUGxDaEFYU2xsMElaVWJudXFUd1FaVWRWZE5yVEcvZUFVcU9mNENoVCs1dWMwb2xTVzhRazNHY0lRRXhwVHZmaTJmUXR3bU8reUg2ZVR3V1JEa3BSVXNxTzFLTm5XRzNMU2hqa3RMZkZDRktpMk9laTdicU9PeHdELzdwcCs2SjNLMGJXL2M1OXd0Wnd6WllrdldDeDh5ZUpmNVNxcVJMUFNRZFVRbWF0d2VNSTVXN1RkV1ovT1JpVE5LVUtaVGtneE9iNzdudGJtcEVIbzRjYVc1Q25BekFCeGdDNVBRdWxhNXJNZXE0aVg4Uk9DZ2RsNFlYSW4yZWltelRNdlBPcEtZTlJTRTM5bjI4UGxERDcrSlArUUt0Z0NzdCtmbzQ4Vm9XcU84QmUxQ25PbStRaFMwUEZNenh5dHpXNFdjMG1rbmt2cmdCcnJWOXBUS1BBTDBZLzFNUHVYMDYvRHlhbXdVTzVNQnE4SS9XRldKTXhpWXdxREhSUzJSaXhDTjh3U2Z1WUxiR3EyajFmYUY3Y0xVajBDUU9aWHVTT0t6aGFYc2YvUWVmQTBSaUNDQ25XWG5iSWpQcVozUWlZckpMSkFZY1NtTDNEaHJMZm5uZU5FTWt4MnlrajJIaFhpanQxRzBIWW8zajFJMk9Qdk1RMDBsZzRNTktNMzl6YnVvdStFUjNuMWxUU2QrUVNWTUJ1c3NyTnhvQ0RMTE1oVUxlM3VBUmdSaUlqMk12THRBajdJek4zRDI5ZCtJZUNNM1NQT09NOEw1cTdzSC9McTk5OXh6V0MvZjRFMi9zREs4eTJIY1g5SDQvMU1OQTVXRE56c1QzYUNuYlZrMDZFUFJWUFc1WnN0SFdZamhGUjRKRjVuMGhvZVJpZ3pUdU1jZUFRNE5EeVpTVy8xLzJWU0ZSL2ZiUVlxaFNHMlNaUHV3c2VCZmNYUHhUSGxmYWhlckk5SU8rV3RQVzcrZk5BTmxEbDE2RnJyeFhFNmhmNjV6QVlGMkVBTmViWmY2ZWpjcE1SWUkrck5qMk00dFlnaDVSZ2NVSE45OWNLMWxibno4eUJ5eE96VnVzZG9lL0tDakkweXVLZGcrOTVYd2FTbDJkZWFoeVVlUDhlelZJYTNGYm0vY2tMeEwrN0JoRkRrTjNvR0FNeDd6VElad2VrRFZZb1p0d0taeFE1Zmdpek45MHRMc01FUERWZmVjUlVCM2hGRW96OFFVQVhGeVFjdEVOc09hTXNYYkNLVWpNVmNvS3QvZm9sR0xlaVoyL2RhMUxHOGllQ0drb0p2NVYzdUV0ZkV6ZkJWZWlidElxcEZWYXlKdm1JK0ZQb1dYVjJPc0hWVVlxN0NaY1RVL2lMZ3RNQVh2WllDWmFKWXVodEZsWDJGWGFqUEhIN1F5bDg2VHlRZWZzSmdibWd6Z3RnSUQ4S2lpdi9pQkJ3MXRhTkZkSGxpQ2xlNThKUTlDZ3cwTEk2TDNtNVF0dkgzSFNaSGU4bnFmYTlXSS9xZHJsRXoreUVPRXhiR3BNVTZZSE1wNDlYMjcwV3VsQXlBamZQVzArK2U4d2VGSTVpU0l4K3ZWcmU0alFJVmtNdkYwNmZMemlUUFBzQzNEYk93R2dIMzVrT0E0eWZkMUhMZS8vRnN0aVJob09CUlY3S0d6K0tRK1pIK1A2SlBaeXBDOThVUFI5dmNub2tSL3NIamh6V1pXWTJZM0ZBbjF1R3h5aGMydUkxTUhuWTJNci9mT3dWTjhoL0RMMTRqUktRa2xXdHl1Wjc5eXV6Zmpndmxrb0dLeDJNOUlocmVHZjlRVUNRME5VRi9aSmlnR25ucHcwdE0rTzdmZHd2eVU0emR5dHFmdTRjdG9DcGVUVTFoYVRXaWVsRjFsTWtBTXFlZDVYSG1CRlo3WVgvUTdZdU94TmM2UjlJLzhYZmwwbkF5VTI1QmVkMXJtV2lwSkVnMHV2Ri9SVTZQaFcxR01LNTEwQi9VWGJFUEdTL2xleU42eVduR0xDQUtiN2d6cXJkaHlwUTlHVXI0RE9BKzRETE9WNkNYVzgvQjhmSCttVW9OT0JLNlQ5ay9WSVRmSkNudDVaNXEwRTdja0l1bEpIWG1IU1pEeXFiemJ2SW1TOUJuV1JkRE0rVkg2dElwdTRqeTN0K0JLUXdSRFdBU3pUVTZsb2t3S1lWbHhyWjRhRGxmVEZub2lROFU5eGtUbkozY0QvS01GbXFWWmJQRXByLzFrUGxVZUh6eTFIS244VDVxRVVMb2ZQbkY3a3E0UjZwWXpIMnoyYnZMZlRSTHZZWEthWG12OEp3WDdXL1lqb2NrNmZTeGtyemRXbUF5b0RIdXJBb0pBcnQ5Q0dvQmpHYTFVdGUxeDNLdGpKVy9BdHI1NUs4M2FXYythUkE1RjFqL2VpVmMvbFlzbTN1SXNVUUhLQmhBcEphQ0JpMkszL0thWUo1UVRUUy93ZjdOQVhKTVEvMUdYcU1keXZaODRtcU5JRXNoVkJwWjE3dzAxbWdDZ3JnWXNQWTBORlM0WGpzTmF3OExnOGJtMW1sS1gzZ2NTdEZDWUdTcHgzdGtqZFdGZWFQdGVlaE9GVXlya3hnZ2lBd0hwWkdYVmNIVW9rRVNsSmQ0dmhINTY2eS9veGx4bGEwWktOZTdoN1gxa0dCTWc3RC9FYTM1d3ZKdEtzYTFTUzU1b1VWUGZLQjdNSEl4alB4NDRic2xoZ2VGRzJDSHkyam1QanRIMUcyZEpGbmxjS3FYRnk2Z2FzSlhJSGJhZFhIc1NsUU5ycHZwRVBpYUkyTGxKNy93b0lDSUdBeXZCMWx1NlZNUGVCTWsvdWFuRFJFaERPYksvVnEwUFZDYys2TldQbGU3R1pGT1I4R0Q1eC9FbjlaS2RUWUJTU0RPTUVLemsxdWVseEJ2V3JHQ0xnWUN0QzNwVGwycDJkMnJ6b0x6U1JSMlc2cWZmaXpqTUF6NkJqWkgxOTJaWEhwWFE2MGVHUGVJSVI3QjFKeVU5akorem5CRDY1NWFDSGIzcmFVd3hzYlN2VEdPNEswSHFtM1d0ckJpbGNGZ3B2SzhaY29Md09ESnFXNFp3b0Q2V1VPdUtEOE4rT1dZbDg2UVdLbE5xbC9xOVlwbWhUcDNhOUM5M1I3clhucFplNnFhc1AvcnNWcHRMSzUwUWJKVW5RZWFtZ0htLzBiR0c4aCszUzZvVFF3SXVlYVJjSGwrK2hBOWI2TGNkdTJqaDdCUEtKWE9QMElqaTY1SnNXby82aENVc3R1YXo5OStuL1NrdTJDbTdCcEpWVTZoK3p2OXNjTGJDcVVPdTg2U2NHcnRpeERLSDBuL2NucVFSU3hIdythaURGYk9CdVBLZXBzRU9xK09NYWZpU0I0aEJMbkNCc2hvU1g4VkJpMzNwcHZyQ1VYdVpSZjZTM2oyWFpmRHpIeVBZWXNTU2FBUE5pTFNaUkdLaURVaXFlQUNKSzJSQ2J5TzUyQld1ZzJLZExTbzJKOUJpejV0bW5QaWNmR2hsSmt3UkJwUHVDMU1XWGIxanZhMkxTK24yb0dFZnpaR0xNaU4zaHdURUMyU2dzQXFzOXZMSFVnMHJWbnhPdmNsaEpJMjdxQ20rSFZTTE5nS1dDWEROL2hoenpJS3BmTWgyL1V1VlZhdFFSeWRKc3lRbWJoaTdUTG4zdHFqZVpjc1kvaEJYRlpHNmp4SUNxOUs5R0dDeFFLUDh3OVd2R0ZVTyt2K2xoRHl5SUVveGJTZWRmR05kMDJqelB5WUJUeFdvZjVrVklLSDl1Qi85YlIxZEJnR3puZmJ5bm1TS0lsSWVIZTBnTEg1YnlvMkFLaVhPaFNBZFFFSDdyYmc2V20xNUFBK0ZJK2RXbkVEZFB0MVU5QWcxaHhCTGFCUXJLcEdlNDdCRjg3OWpadzdHY1I3TE8zaDBDMVRoV21pcUZsTW1kK0RwdVhRbWFSWGpNSjlqTHZramdESGpvVTNNYmlwU2I5VkM0SkpBWUJMcE82NkhzWVpXN3NjOVhsMWozdWJXRTgxSkd6NUt5emYzK1BxemthbmFZSGNUTzVxS0hnWmx0d2NHTWM3RkJJQ3NucTBQY3ZyOTU4K2UxZFR6V0twZmFoeUlzWlVJVXFoZ3NXQ1lqRGJYVlFHYWxybTJCSFZ6OXJrKzlvRTNUNkozcWJwaHVBQ0luRk5JSjNNY1EvTmJmYjhkQ3ZMVnY0WmFrVmN6d1ExZzhLbFBzc0dhMGp6VHVxSk15ejJYWnRoWUJQalV6VmRvVlpPYVc1VUFXMDN1Z3hxcnc5Yll2djZoR203ZFBHRlFjREhyUjV3bEZEbmlDUG5hT1lxQldLSUNPWkEwT0w5Y0JkL2lPOVkwQVZZemFqYzlxT21YR1ZjVmd5cUVOZ0JIZENka0Y4bU80TGFUaEdWa3NSdkpNLzJ4Nnp2cWRreWNrU0ZnWkg4bXRVZWZwRHZWcU11UnY1VmJtc044VjZNeTRXKzNBWGp4cGZjSlNJYlR3Njc0TVNZdWRRbDY5d1REL0p1TUhMWkhmQm9nQmYvSndoZmh1dS9GNC9jRmRSNUJGT0J3V3ZCNXZQcFNEZU1XYWhTdHlGa1BXay9UNitPc0Z6a3djejY4bHlKKzVXTkpFbHowdjRJUk15aGFmZkhTcEl1YjI5dFY1aUtJSmFDME1yYXVobll6eWUwVTJwYkppYUE3NllqVzJGZHBkcXVyQlRxcXdLL2RENStMYzdaV0lqN0dGS3JFMytBdVpNVGh2K1VQUUp5dTcxZ3JjNzNKQS9wbHU0NkIreTJKb1dIRVpwRC93aUNJS1Y2bHJGVXBEQzUvUWRrODRyNzMvY3BWOUxZMmsxcUxvNmhqemNtMnQ4djhkWGhoUlpIN2NoNFBSZ2FKWGxpbEVZUlFrczNUZ1JmQjMzckYxNG0wcllrUTlTLzVqZlo4SDI1SzR4Ukt0OWc1NlgrNFJpTGVQRm9mRHhMOStrZFRFcG94VjQ4MlV5S2FkMzd6Wjl4MmE3OHkwUWtQWlFsTXFXdjBWc0g5eGwvOFU4NFJOdTNxdmtxM2xmT0g2VFNhY2IvSzM5UzRZK291Wm56bFFZRUxheXFjQlB3THlSejg4OFMydWpXVEUya3VVVHU1a0NGSmczWDRFSWo0NGI2SFF1b01KV0l3YkxacEUrTUFUbVQrenRlRkNUT0I5WUI1ZWFKYWh4am1DWEI1VDZBMnhjbGZ2UE5abkgzdUVtOU5vNHZvbFhBQXJ6dUlzOHdEeDE2Nm80MktGZW5NbC9lU29yaHpBYU1qQWprU1ZKbVFmd2lhdXhXS2JNV3dFVDJiQXl0KzhxcmxJVEtxZGsyQ3hEYTVsdmhBRmYyZHY5alZ5UnAxQU85cmVmKzZHaEtHYkpYa2NndXRsRVMrMWdld010blE5bHNzV1dlNzcvMGlza1I0djJPTVVwUEhDbzRheXNOSS8xdHRwaXFxY3MvdHM2TVN5d3V6REhILzdaeWVlMlVteUg3dDhqMWhScVVVY3M5MmQ3YXRBVE5rS20wY29oamRCaDl4ZWpvVTh6THk1RnZlWlNXeHZ1U3pqQ0dOODRkVDJZQitWUFZBNzcwSnVqeERZeElnR3ZKZkVnVXkzZDEvdjZ4UXpLSmtEOWtXSi9HZjRuU3p2ei96eG5TdHM2ZlpCL1JJYlVCbkZ4MDRYcUZoRE5PTWwyb2hRUDJTTG96TlZyZTQ0RVZ1Ris4ZGxTQmJIaU8ybkNCRnRkTVFNeDVMRU5oYjJhSUx2dmlNbTZ3ZTBaZTU2bXRhUGlPbTQ0VTVPYWpQbytLQ1IydFNrVFhzWHZpKzh1TGJSMllydVlIaG1xSVZiK2dGeWJ0ckFqTHdoTCtpejRLNGtkM3Y1aGxjLzkrbWpaazNFQXFTdElmQjJDdTYxc0dLejFqazFRQXZ6NUhqbDlwQUQwZDl3dUhtN3FMcUllQlQxUzJiZlN4STZyNVlpS3I1azJwQ2VoZHFoSUx4RVd4QjlZcktneG93cC9OODBNWmg2L3dWTUppd2NxY2d0ZDVDL1Vuam1CNVpjVkp0bGVQa0EzRGlLVm5UVElMZ2VCaFlkVE9jVU1DSmVnZHhIVEQvVnU5RnlkNEhFb2JLTVlDZi9aR1FQdmV0aEhCQU5xUUV0UzN1a3hZRXJjM3IxVGtRWUp6bUFzdkN3VlFmK2lvYVdaUGhRWHM2eVVocENtUDA5Y1k3cVkza09GaUp6TTlHeCsxMFNIVEpUUXNYOThNQS9UTDNxaDVtOXVhK25rdGxGL2hNK3VNNThWalBSaitaYzRTNjgrVEZ0RjhiclZuQTJWc3BVM2d1LzJuK2tMeDZ2UktkY1JVcEorMnBOd2dFUDdPdHJUaTNRRXI3U3J5SFpFcGFKRzJlYjNsRmJDVVE2ekIvWTE5MUt3djh2QTQvU1o5ZUhvOExDdGIzRGY4T0htUTJnbEtTOUJSbkU2a2FGVFpmdUw1Q3VLV1NXZDhEMWZlRG1rTWdMMzV1TEx0NEIvS25Bd3hOakRRYWlGMnBkUlRNNFVsekVJcWJGYk5NREFHNFRLSzkrOWQxZG1TY0lWWXVNRnRkczJuL2IxdDNaYUdNL2k2aUJueHdqeG1mNDB3SjdoNDlFWEJSQnA4bmVSNmFhQStqY0djc2hudVpnUUZwSzEvRDZOb0xPT3RwaUl2MW9yWUtUK0phQnpWUTNFa2hoUHQ1cG1DTVJ1TFoweVNMTjN3dThacXpDR1ozV3JXNGpleWFUeXVuREhJc0twbmxMM1dKcnJJeVFzemtpRVlEckVhQzlVNVI1ZDV4Zk96dm9PNG54ckRSbUdpT0YvSEpGM29tN2FJYXdUWExTNDRwemVVT1JCd3I1RlRURHpKeVdZRnVwQ0pqSWo2ckVRMlllR2FSNVIwSzlkT1NrREsrUnBod1cxckEwODhUWUNNL2FzTkplVTgvTE9DWG0wZWZiV3dYUHNhRGc4WTFtWW45RVVYQVY4RkhpY2R5cVFNNXp1aUZtR09IQ29pZkNaQ1NHM2FybmprSCtxUUxjbUh1WGl4U1dtWXNHZi9GZjhxdmZtL081cnRjUU55WGJpZGtPM1FSUGpPOEl2NXZ4QWR6UU5PQWNwbHcwQzd0TWJYd3pKS1N2Sk5RcWpJWGc0YU9XaTBjbzNpYkRoMjByc2c0dEZpTjQ2RlVHTFgrdlIrUW10N2p3VHpLdlc1bUd6SytGaXQxTUtDeG1jNWZSUVpQV0JjMC9jbXJ5UWhmZTJJMWdDR3ZUL1BLU2FiZ2F4ZjREMERrTkNKbS9WT3NOUkMxUlNyUlBCY0dmb0RmcVlsWWg1REQxQWhuWTI0LzBwQUNzVUFiUlpBeEVBVzFXTlh6SXNrMGNyTzVQUDRYN0JHWGdtOFQrWHZmN1lHMDRWakE0Y1pHc2JsY1VkSUJBaE0wWFdidFBaemJRK3llMmtyb3pIZFE2bDVLVFdHSUwrblpNRWR0WkJlWmgvRUFId2hKU0JzUlRCY0g3WURrRlcrbEw5M01JM0tpZFFVQmdhRVF2V0pqNitDU0NvMlV6MGRVVW9KZVhNdk1vSzlDc1dyY0FGMklhaVEyUm83OHNZMTQ2VE1Pa21SS1RUcXU5Yk1SS1d0RE52OFVRaVMxa2pXcHZCcm5UemVnaEJKUTl2NWl4OUJmekJ4ZkpHQ3h5Sy85am5aZTN1RVNZalVhTUFEL05ONlVxcUJLSFg4VE1VUGJKL3pDRFpyOUtZbjlDbGE1RlJGdHY5RFlEV25nSG9kTVQ5ZGN5TXMxbG1FZkdacTNhekM4SnhIdXU0Q0NRYlZqZ0pybDZtTzlxdG9Rd2NsQTh5Uk1YUnhzODdPditCSWFpSjJ3M0pFTEFVRGJRb3FxN0JXNnpIWm5seHBZSWtDOG45QW5iNldOOEtIbkhUOXgyVG4zNjcrc1NLSjFxU3JKSUl5b3o0MFdSQ1g2WGVQaG82Q29wVlZYMExkdlZiZDRwTG5FL3BzZ2l1ajJOMWVENHFDYlU3SkRoaHZVYkRKcFhLU0o5M3gzdENBT09xeHpVRHYrQzREejU0bzMrV3hoZ2I3dE1qUnphbDduUE5DQmlCSXVhNGprb096Q09TRVZCTWxIcGxsdVJSR1ZPK0dGQ2p5NlFDejh0K0dVQ3hKajdpQUt0ZG03SHFyc2EwSXorekVsamNNNys5WXU5WmNyN1dGM09TQmVXeFFwMXJvVzM0YmNlbUw3dlgxb25ZRjFjeVNyVSt4d0FqaE1zNEtJTTZzczhreHo2WlpIYTBFbEQyaHFYY05HNEd0UWQyZUNWZkErUEdVaXp6TFA4WlE1MDZ2dG14NmMrM3FuRVpaWFozYjM2QzVzamVrTWx5WVNFVTZWVDFmNzljU0ZNUG5aQ01FNk1zWmd4YWNoTEZpckZuWFZIMEsrYmtNcy91NzU4bWJPSjZwZTJvWTBIQ2RLbEphbXZUcTJjWHgrUndLTXorZFIvbFlQMjNhRUkxbi9iZWpJM20vekd4eTN4SzJ1RVdWMCtmc3oyWDJYaWlmTDNWWkJMSmk1STNLVkRrT0I5ZGE3b0M4Q1M3QnZyYzlSbVlXUWc3bDZ4VHp6WXVvK2QxTkhlNXNMdUVWSTh6V29ONDh5U0JDSFdaTi8zelFkdUdxWW9EVEN3Rit1bE9GK3MzMW8wbU4zL0ZBVkU1a3dvOTc4M2tMNW5ZT0hqWWFVd1VGZ3BqdEhxdGRXa1hNck9DTktkS1dERnp6djV2ZVd2NkEvYXBuUER5WUhMOVZTZjlEYVVRejNCaUs3elVVUWcwOVRJVWdLQ1RVNTAxVkMwbjlicFJmbS91ZlhMYTc1T2F4L0lGUWRIalV0WEFvUXAzaFJOcHBGOHFsc1JNWEc4a3A4QWNOUk5WMGNsb3lsTi9MRWhLc1JtNGs5TG9xcDRlYnE2WnFQT0NpNkNRZEdKTHJsZmhFVjNTc1FCdE9Cdk5FZ1pWTGtyT29XS0prcUVndDFMOFNDaDJ5STlqTFNxM1JSTUNqbzhsVTJxdGovcUpqenJpQWI5VGRIa2NoMTBPV1dIVy8xYWdreHVRV0dNcldHYURqcURvYjd3bGdFMlo1c2tlK3VTeHQ1NDRyUlIvcEVjT2tRWHNLaklSN1U1Z3kxT1FteVZGNGlxelhnczBSNUhXK1RPTGRyVTlrREFGdFR6MDBGYVlMWHhNakV5dW9IcE90T2d4elYza25NQnhoaGpFeVdKRy9DOTJia3VscFZJd0FjODBxRUt0OEkwa2ZvZUVlMEdOcHJtREUwRGtGTWI1cDE3Y0tQcmNmUE9qRW4zMTZnMzZ2Zy9WK0RpMWNlWEZXcTJubFpwQ1NvVUNDaElqNHFuSWo0Zlo1elJuS1BGUHN0K3VaUTJDQmI3cEJ3MHNHR0FVT2w0YkxLWjJuVUhSbHk4SktsVzlvZkRDM2pyMkZjaHNlQWdRTDkveVJxSEVyMHR4OGkwR2hQZXU1UXdGbjlEV25wbU1uZGliS3RxS3hVdkprWEdRVW9sd3hra0JyNUNPVzlROWx1UGx2c2hrWFdKSGRKcnk1R3Z6VUQ2TXU1dk92d1NDOENDODdpSTlZK1hQNHVvSWtJWWdvYXA1WXhQRm1xS1dSUFN1N05vRk8vV2Y0Q2lYM0RjUXNjTDJYVXZWQmZjNUJFS2ozSG14K2VOUVloTGNpK05wSUJIMU9nSXhuaGthdlRYWWlQNkwrOGh4Zkt0Zi9LWFZqM3lobWtYYVpkc3ptZDh4bzBqSUE0RWtRN3pycUhLY0VyRjRMQ0t4S0Y0YXBFZjVYanJ0S0prcU1ZWUlSRGdldWRkZURjL0ErSzFtQ3RpSy9zdjQ4VVpYWGdlVEVaYmJrS3k4UkFtcUowZTZheDRsb2J0c3BqYVJqYkpmQ1RVZ0xVbi9WNkxhdDBKUHdzR3lsWDJrcmxEMUxZbERLREkybnROQUZxL25kNzZyb3N3TVoycHVvME16RmlETEZ3aHhIc2F5UXRGckpkZjhkWDZXemI0V20yZHFyVDFaMG1rOXJiT1lGb01IY3F2SExuYWVUckMwNktaWURzQlNrcEhNeFdVS2JxOUY4OVNpT2NwaE9YWFQ3bUtTSkJUdXl5ZVp0ekJTRU5nbk45SURnYWZXQ2E1QkREL0FaUVdSVUlXRUVwZElsUjBBTzNhbUZvQnF6RkZtNU1FOE5IZTdSSXZldEg2S1ZBWlZTcXdOYnplaTlMSkU1eFJkaE0vRVBXN3pTVDMzeTExV3VSN01xTXJNNTh5eEUxOWhqQ2syUmlueXpPNzgrR0FLWGhtV0FBVDl0djU1aWNhUDRBYlVJTHlGQVJuQWppNjViVnNqdkkyb3RVTzBOcVRNeG8zbUtXczNXdGFTR2daK0JGR2pKMDlmMFlZOG04Y2Z5TFZSOExrQnRpeEF5L3FXQUdSS3lBeFREU3JDV0ZTY0ZvUUUwNDd3RXdGVndiblprTFdDdnc5ZkNTQ1B5Z2tYU3I1blVZYVBDaDl6cHkvZllGR2dNWVFZNHNTS3JOVGQzU1BSQmZmaW1kV2dnejlyeDBmRitNRTVBMTJmK3VOSE81SWRVUDNrOFZrWGNjczcxbGpqVHdQS2lnQzA3QWxJT3hOb3VGakZiTWd4VU8yTmNiYkxiMlMvQ2ZGemZDeHBTenZvY0J2OFdJVHllWG9WZGlpcEtnRVZkcTZKelVDZVhqRHlqcDkxWjVpVVhRaC9wY2ZQQWJVQkl4SGlOek9oaW5HQ21UajY5ZDNnRmFEZXVmTHpuY1dEQXF5bHd2TkV4Y0hqdFVuUlo0T0tyaVRVSnh0bzlLNWF3ZTlWSmQwYU1hamgrUktRS1liZkQvVmtoVHg5ell3K2RTN0VXdk0vMW5hV0g4eVZHUTlGZlZvWTN6TWxJSkFOeEFwZjVYZXJMRHp4TDNhSU13NE15WlpXWEtzL2NpaTFBUnVsS2hIVFMvZE15MURPMVhGcWVqcU11U0k2QzFvZ0ozOEFGTEwrd2JkRzgvd0Y3Ry83cHFYREhoZDVkV21tSmQxeFNKVVYrSGV3Ni9XRklCK3JPSHFpdG0zZjJwWDVWc0FlUUUvMWRTLzhoK0JEOTBYRWVQR1dDUnVSYXU2UUp1YWZiYk1WQkN6Y1BWdkExT3YwL0hLZXFUMitobUNEWTBtT2YwR1ZNMmh4bnNNZU9kZEx4eDl4V01oRFRGUDZoakNDbDVxbEVGUndieVpxRVp6dktGS0xzKzdybURod1BIbjYwRkxPVjBrVHczZXVNUGdTN0pjakxMcFRNVENIbllBMW5FVkFuZThSY0ZpQ1FzSGxVVjZBdlBxQ21RMzJjNnVsWGh6R3FleVk3dEdtV0ZCYWdkUjFhTlA3aGtBWWp0UDMxeXRwd3gxZVozOXp2YVNpeWRRSEJWdWxjY2tuN1ZXTXAvSFRjWWRReHBKaUNZRFZxbXhOYkR0b05RL04wWXBVdVpjRSszL042eElXM20vRGRock4zSUFYZkxZUVg1T2VrQlpjc2VmUENNSWtNWWNKalZxU0VlR3ZHRUVWMi9HWDdFMitCa2c1ZE1iQ3luRDdXaVFHSE9LUVJHZm1MOTZyanlBYWxMMFpVbDBVbUVWU1QxanNWYzFrd1VseS9nUSsyMkFIeENtU1BCOXFqNkJjZzFIWTY0bC9kaFVMQ1krVlRoaGt0bVFINkpQY1RJeUtiRHp6TFUybU9PS2Y4U3ZwZHJIMGRQZmwvdk5ITVpjMmFqZVNwVkhXWk16SWljVkR6Q2I2eHlQV25USFFxNTd2T3Z4RUMrM3ZzTmJjYVNUS1ZNMzhONFVNSm50TmNtdkRUSWVMZTZQSWNGNGE4NmQwYktrM3Q1d0xwMXRmWHM3SjBDU0VkNEdDbEtDSVorRis1aVg1RG9iT2hYcWJTN3JyYmdLSTF6d3JPVmZqSGw2dEhHNkNMQWNmN2ljUHVrMDRTWTFtUXJvNnJoQ1RIVW1jV0YxUzdDWTBUNHp0b2ZHVFRQVVFPUVJPODRsVkRlb2ovNEhKTXY4U1NaVFIxYVVMZTZwM2sxSGd6UmExSndwWVl6RUk4dVc2N1lnYitsZ3Y5bHRqWFlXcjRWRUNUTTlNZXg5eFJWT3AvNkxHU3luR1BFcFFqbFVrNWh4Nk5icjB0SmRQY2VmWkhheFRDUG05Y0NIZFVldiswYllDRHQrdzdnVVlxZmRVV3AvbERFRk1WRU1JbWRLRlIxN054by9Bak5jcTdGNzJhSTRGRWEwWllDbDJrWEtBS2xvaGdIQzRVbWV5Rlc5bFZqTUVWY3RjK2pyNFByeU9WZkIyWmdmQ3hIQXo2QlpueUVHV1YrUU51Mk9nYUlYTUdyV2JmQmlYcWhqLzBUMyt3THRqeGxMd3FmMXhsa1BLZDFTVUdpMXFGQ0FXZGpCZWVTSDB4WXNZaGwzTDE2WSszd2llVWMyUGEzNUVHZXM1YksyNUxUMDVnL1NKUHIwNnFkU0k2ek5FWU9XSGp4L0J0UkxUZ1NGVHN4QzloSlpDeDBWVzAwU2h4eittbDllUXZTMzRNZE84YkpLWmlzbGFKakM0KzFpWmFqbVhRVlU1QTBSeTF3bytXbldrZ0dsNHRwSmZOSGdwdzFsaTlwR1lSckorOWNDK1ZrYWhCQXU1UStiY0dHRlQvS3BrV3dsVFVMZy9naG5VQ09ISVgyaFdvZnpMTkdFZHZqY1F2MnprZ1ptUldlc1oyak4xYjVrcDFCN1c1MlM4bDZHY2dOckNxUUdHOFJlQXBxVlIxN2pjTTU1U1hTYVk4TjRiUnpFZSttSG5TNGtxWHdCdXJ0RlpyYXBnUUNzajZxSTExZTlqbUJTZkpmMzAxek91VFhqM0NyMDlTYjFZZ1A5ODNPNzh1NHhVSXhnMmNTdFJZWlRzN2VvYTlUVXJGVkhwQWZBL25BNC95NGJLQ2RyTlhLMXhKZFBOMXVqVE1TQVBmVCtTQW9PTkIxNGtFMGp5cjNPQlpESWdTMFNtRHpuR2k2cW01Y01CVnRab3RPYm5RNWtmalJ4dkh5V1lLbUQ1MzZYQVNWUGRtTzd5a0c4YkI5amRnV0RSTVZwaTRob1NJUUtLTVkzajlJbmQxc3ZDTHNITmZwM08wTW5JeHF1RXlWa3Q0UTNremtZWERyUWtTdE5kNEgwYTNOYXRHUGdheUx5NXVrM3AvYVhnWkRnaVUwaFRiUnd5OFBBR1EreGR5d0ZRc0tTYURvMythS1d0MkhhSkFEbm9XWnRIdkZFdnB5T2o0QmFkUXZUVkhnMkdESjlSMTlmVzdJZW9scHpCQlgyaEJ4RzY5a0w5dXF3R1FMSFV2M2E4WUVNVkptdFVOS1YydUJ5eGI4a0FSMG8zVVVlc1BtZUU0aEsxM1RqeHNvOUdremVtelo2VkVOWHhDTlZoazBIOUlCaXp6elJYNm9vOHZTOGc1SW9odzJmUkIxKzFHUzUrdmUwOUhIZjF5QXM3bFpJSkpKVXdmRG5lZzFvZWVWaGQzWndzMUlqa3N4c1dVTk51dmpyOHFHNXllT054UG55QnJJQXFWZGloNnlwWVd2UTljZzVPZjVxVmYzWUhWRjhxa3Y1c09JNGVmbnlGVGRXY0FlM1ZzdVMxM2xxNE5qSjBxanNnUmMrVGQxT3BnZFdSK095NUpLMC8xRUt4QnJweUxqQnlrZzg0NVI0WU1PcER0SzJ0WXlXNTloTmlzazNoQ2ZQS0E3MjRuakhaelMxWlUxYXhxK0JWdzVtdmhiYVB5ZlZtMmpTMkduTWo2SEQveFQ4dkFqUmRWMDRydTUyVlVmRFdRRFVmbXlNM1Mzd21BTHVDNVpIT0NkZW1vODU5VUFBNnQzUzlWRy9Fa3RhbXZPK3BaTUNCRU5WUjh0eDVxWWJCbkVVaUxDWmZkZHlGMXFNaE1VekFlZFk2ZVNKanVTRm56ZldHNUdpU2hQOUpuaGpOc0pTR1BiM1pQZlpBYkJFUks4YTc4TUxESXFiR0tyVDBiWDN1TW1uSW16ZWlKa2NNNVo2NXUvNGVHZTEzcVVmbjFNM1JSd2dGNWRoaks1SHZxZGxEelZIaEdpdXVkeTNpS0w1YUpoN2MvdmplSWJ2SFZ3Qmpyd2F0dGxvMGF4ZUowb1lNcUFKL1lzYlV4R3dBUk85aVpDUC9MMWM5eWJZdUpiOU5sSEVyczNWcVZPY2dKdmVqckJPbmRTbXVFcG83V3lMTVNNVG5nNEphbHlyU2pQRVh1bURFTyttb2VmWlZ1eXMwbEZBQmllOC96RWJMRGh3UlQzdG5CYU5mbFUwYzQ2WDQza3REbUxxZzZkcGNTTG9iTGIwME53czNFWHR1K2p0U095d2tXVk9WUERXTkgyd20vVXVwSm1JUFFMSktoQ1pmL0pUbWtlOVUzNlIyeVp4SFowU29iMHZNZ0NSV2UvbjNiVFZPNENmQUVZN05Ba3Fzemd0RnVqTS9vT0Jab1k1N2RUZFBHRmkwSXZWcE9PZFhQQWd2ODNORnFsU25XYS8zUkxUOFBVR2I4b1dvWkJGdXVmd0pBTE5RdXZPVHdlMHVUU2IzYmJwNFFQeERycGFGVzNUbFRoajBtekNWN0tJWG1oVy9JYkdZOGgxaENoRm0xeEo1U1BIcVZ0U3VLcmRXOVUzTVE2MVh1Y1ovR3Uzc2cvNEQ5WnZJUHBYZnJCbzVjZWxhcEs0NUtteXNwb2htS3M0WEI5YzE2TFgzaUp0RG00c1ppY2Urc2hGL3l5WUdaVm5teW4yTDlBSno5blVLQW9BMnZJZ1dSSXh1bTUwQ0pGUnVzS0tVajloSkw0V05YV3U3VVJUSEVyR0JYTmhRK2c1c0x0YUk0TDVKM0dhYmtHU21RdEZSdExnQTc2YTR5eU1hamZUV20xako5S3FYeWpWcEs2eWF2N2p0Z29tVlhpdTZPUm1TMVNFWXBVNmJnZGtiOHBlczhPcDhWaFJaekxMTjd2aEt6ZnFuUllVUWZOVFBKVDMzTTdOc1pZUFZZMUR2RU9aK0o1TU1CemFhbHZ1SGNma2cwWStHaFNnWWh6d0xUQUpqd043K2N6aElZb3VyaUloUEJUMW0rbU1nSGdVNHBoWUVDcHhrT0NueE1TLzIrSHpreGY0MFNuQ3RjT2pOaVFpUDR1TktEMEM5SW9DM0dCRUtkWFlBQmZxdThLVkFqWDIxZEVJblBIYXNhWjFrZnhacndTMWg2TnRhVnV0czB3Mmphcy9CVHFtQjZQN0x2eXZ6c09LWFRydlhEdVJIdzZvSDk3K1hPRG9NV0RpVk0zM3BXRkxrZ1k4dXpaL3FoSXc3ZGFSMXJiSHREcTdvSnZ2OU0waEh3WGtuRWVPM1crQmEyUS95SVJIa2wvdFJQTTJjNm9UUmpwN1RaT3RiU3JJTXBqQjdFNVpOL1JzRktJMVBha2VZWmpqcTZ3c3lWQWJLZXVUQ2t6T0RIRS9wYVIvNzlmWkZhMDN2aDdMUzlVMi95Nkk1cGl0eW55ai9MRnVIZjZrdnZPTnpwWUd4UEs1QklsRUtoejVQZ2w0NEJQMElxeDV4TmZKdkM1aTYyZ2FNWk50aVo4emVJRWx2SVFpZ0hoRWtWOWVCbzVjU3dUdldKd25IQ0Z3Uitrbi9meWdaK1U4QWprSGZiQm1CbTJIZ3U0VTJaYWFZQzZ2YTFiQXAxcHE3SllJUURYS1lwQ0U2d2JYTE9pajVqdWVOVG9WUE5ESUJsMXY1RmNPanJOalpkemIyMGZuN0FEVFZ3VE9uRzI2UDlJRjVmWUJidFM5TllBZ3lSdUd0emhySjF0SWhocTVYamlWU25CTnY3eDVxSHh4c043U0JsMklIZ3RFa1BxMWJDY3dzN0IxUktCLzEreVVzY1lRMHc1M2JoUW1ZSk5DaTBTeXFjdHo2SmZIZ3hqS3FudENuZWVJNXp6ZDhZZmJLUVFZY2NoOHNTWWNtVTB4SHl2RTF6d3QrMGJtQVBmYjE2b2x2RiswQy94UmpzWjZHaFZRU0JMNEsvdk9hOWE0MWZSS2x3eHZqYkxxS2hUSXpxN3ZwaWNDcUdxSmxhK1lrQnlmUG9vaW1tMjRYR2NOeW9rSzlsMDN1dUJjZzFoclZzTUJZK0RxYXBTaUVhRFR2M3paWFhoZ2I3RDVUUzZFbXViRURabVJ6MEgzKzA3RnM2UmZ5QXd5RHVSVmlzNGFUU0dXWEgzR0QyMjMrQWZWbW1EMCs2RUxHdXMvekpZdTdhNnpCWlN4SUhLSVFUdk53SzlqTXpPRjgweERML3hIVUhnOVY1YUQ1NnJGVDlWSUhGY0FqNjhSZ1R4cTFlc2FTMERIcUppbFNrbnBwRlIycmoxSnM3UXVjQzVzNzErNko4NVBlUUxFdFFGRXg2MlJraWs3NWFpYWZkVG9HTkF1L1o5bnFPaWd0NHowMFh1S0V1bGwwMUU0VUlBWWtoZm5BNmE4RmsxZGxocmNvL2grckl2VFh3OUN3cm1Yc1RqRHRDeGFGVzI2TjR2L1pQK0k4YkNENjdWQ092VGNmMjBvOGtMU3hsOFNNVDcxUFVGTHR4SWNtSitsQUxBRE5mSjFMa0hMR1ZlbldCY1ExcExmRWpwZUFPSjVXekh5WEZydGhpRFdmcnEvUldOb3NWWHVjY1E1TmJIRUc3WkFnRGs2dE5oS0NZcHo5L2hDTG9ScmVKRFNNN09wbU1jTDhhNC9MR2FUaENITnlPSmFDSk9NbFdOUGFGTzhDb2wrMDJvSW5wdUFmZENRWFlQS0tWREZFVU53eVM0VHAySWtoQzVHaVFtcWdMUUYvb3V0Y01xbmxWT2k5WWNNQXdqdlpiRklDNVpnTktkOWxiRkhlNE1lVXgrRzg2WkpqczNOUDRsNlRYZE8wUVFsakFRamNZTnZRN3djMU5LTVE0SS9XNlpEdGNaQjZ0ZSsrRUVaZTFucG1nd010azNhOGF0alUzdmR5am96N00vSkhYbDlrdlQ4SUxyYndhSVkySjV4SXZDb3VnTGl2ZzZjSXA4bzVUTWI0Q2tNdmpxSThDR0UvVlZYM2xQbWk4MkptQlRhc2FOVFl3UE5tNVdMOTZHT3dIendqZ3dBOUs5ZFhSOGhmN01zbDVUUWxBdmtmSlFrcnZVbjhVZzlUa3RGOUl0aW5UaTJsb3htdW1TemV5LzFFOVEzK1VyWHd5OHIzQTFHRC9pVkRBVS9Jck1iZGRYNTN2c04xaElQVWRiN3FEVkZHSGtNUkd3b25Ba1pocGxnOGZNUHF2b0EwTXYrQWxLcU1POVJidnBFeWpzV2hqNnh6NTZmWDlnbDhGN0ZMM0VRU3pBcmhaRDdDM25EcEFldktUUTBQR3IwQkFNS2l0cys0UUQwdVI3ZlRmV1hHSGY4NkFENldZSGEwUUtQMGM0M1NqdnhzVXRGUTdxQUJvbjF6QTdFQlBaS2ROeFd6UkdUYmFWQ1BqeXhsNXJISVc4bG9qNWo2NFZxUzE4dEp2emhBMDhJSDZ0UENKTlJBTlpaV1BYOEE0RFRueFBDb29tay9uRWJ6aExKWWRQb2prQmhrN1JNNXBOVzdLSUdhdERodzRzRUpxYy9DNGE0QmQ2YTRzcGZ1NWVtajBOUE4rNlBKTTFydllIT2R6WFpubjcyQTNTcjRGbjVhN21xdDZOQW1uSEpEcDMvY0k4cHl1YkJXZExNV2ZYSHFvRkZoSnBlTjJkdlBXYnd1ejVIU0UzMWNHOEVTRjljVzgxRVdTMU1xMlFSTkRBdEpIV1hRNFdtSWJldDBYU3FNTjdYY1RUSmZzNnVJenpvOXFGRWY5TlpZK1MwdHhjVXdMQUthZFpMMktONE9UYjJiT3AwZE1EOExPQVphU1FGZ1BlOUdyb2kwZllUSEdOVndrSXZqUlRWZG5hTkdSeWY3K3hRQ3g2VnRGMGx5Z0g3SnNXdGY2YWtocFRYbFVZb1l6d2Z3STVSRDhjV1RkUjd2V001WWVrVmZEdktCRXZqOVhYcmVhT2hNalE1dXZDZVc1Y3VzMmNNOUFGZTRkaEZqc0dodFZiSTAyYnZuYkh6V1JOcDcybjNKMjM5elNYcnU0cWxOTDVjVndZSDZ6K0hueTAwUlRVblc3Y2tDZjZzUEl1cjB4SXZpQWI3dWQ5ZElKOGRtTEVrdmRMaTdqSlA3TEZaNXJBcXFpNUZrNW5nZERqMW1pTVpHWG8vWWdZdEphKytiZElzNjZsYUNCQlFJY3d2MTV2Nzlna3RUN1lmK1NoSDZveWFocEVGZDM0cVpPVy9sYmdmKzZ6Sm8xY3lOdFRQOTNhUkdhamxGUzhodzRDanc5VnV4UldnbytKT2F0TERIanlmSlhlZjVsMXNzaU8yUWp0UDhzL0xFNWZuTm1TcHJxWXlqdDFzQUNiQWk0NE9PZDllanV1bGdJY2lPcGFERjZDdURsSDFsaUJFbXlOUVlVZm9Wb0t1c0RaZGw0Y2lBYlBtcytSdnd1TmZxZHYyNjQ3ZHphc3RyRVdHMjZWMHloY1FQbXJXM0g1QmRJU3NlRjh5YUJEQi9Fc0tTR0RCcDM4SHhpYWpSOHJOUEZNYy9pbUpBdmRCRjJBZEJmenowK05sZUlZaElPN3VqckpwT2w5MXFnTitSNjM5enpUTDJ2SzJ6K2RSV1ZGTFVaTWVvWVJZYkE4YUUzYUtkV3JodWxsNS9xUHRyKzNGdm4zK1FEYzRoVDZWbkNwSHBzaUwrdDA5QXUyeFBzbWEydklDazlRTis3c3hGTHMrS2ZmUWdWTEdHRG1RcDA1UVJLSllKNXkraVBPUVZENG1tZkVSNWtwZE1UbS9tNEgydFBrajRZUDJyZGVvV3FZZ2gxZHcrNFQ0U2t5YUdISTNrWFM5M3dlc1QrWFppbFJqQVBTYlo0cTNFNmVXUVJ4U0dabi9TYlFwai9wVmJMc28zbGZmVTFwSmwxYUFTZEZudnlLdS94cGZDYUQwWHVDaHRSVVpzb2ppN3hFV0JTZ1FQR2N3U3pLdTRidHM0LzVhYmhyY3p1YWJSRld3V0VJVjM5b0lqVkNhYUgvMTUzN2kySi8xallDMHg5c1NGWlRDVVMxYW01V29WRmZmaklvSDFGSk5Lc3RMK3F2OGRFdDNXVDhubzh3VFBJWFVlVCt3elRXZXQwSjB1akNLSVgybTEyc2FXdHM5MmtlUkF5TGxDVFpKcXczTmZlWlp4QlpjM3lMQ252OHhvZ3JkWWN6dWRkRXNad1loS1J0ZE0vcGtremljUzVaeGF5T3VIakYvcGhLeVA4dkxUdGsrYk45LzFNNm50L2wrdTR1aGlvV3NGbGZWa0xpblBkZm54NFB3a1FWWnBUVjVNL2JqMVhQdFczckJVamRIOUd3dDlya0w3SE1vUWowU0Y4YUNsVTU4dG11TUFtc05BRTZRcTViS3gyQk4vMjhob3ZaemJXL2lNYTQzenRtakFuVVg0bm5OaFIxU3RDeWN0OFRwZ29INzNFZHQ1dlZDVnhnb1VXenF0Sk1USkFPZEF3YzU5N3hJTWYxR3FLNmprMTFtajhXWFY5TW5IUWIya1J0dUk5eTd0dUNLZEZTcmp6SkttUFJBNnZBeDFJU2RwSGNDU0RldjF6SXRVOHBNcXFodVQ5b3J5ME9PbnUxU0RZUDhsVWlQNnBQU1JMcHp4S1ZROVB2NEJZbnB5ZHVOTHZXRkVXbkdFVVpPNEg4RzFuQUpUT3djRVJObC9TeFY3R0kxWGkxVU5Tc0hlaExPV2RER3dCK1lEbk9xQXFJY1FtK2pITFRWbGw1b1ZZbkxTU29NWktvTUJxbmxibHp0QmN4YURMVlMxczhCbStLcHhrcllLMlhqM05xTmpibXVXRG5YWXY4T0FCYktNVTRBWG5qV3kyeEd4TEVnOXNxU1dtY1JRM0ZTTndFeitEZVNtOEE5cjA5aE8rdnNJeWFCRjliUWJHRDBKWTZSRkJFMS95WjI2OCtJNW42ZGxRQ2F2eHR0ejBsaCt1ZUFlazFaWTlsK0xGVVoxYlU0ODRhVWdaamFrNndtcHl5Nm5zRy9yNWt0d3JCaDk3eW81WnFXWVZjRUIreUR4SHoxd3c2cW9lbFRXbU8wdmxDZVB2N2V1Q2RHZE9uVHZPczJjQ0xubyszTWNaZEtGU1lleHJGc0l3Q05Rd3VTVkZaQWpiRlRxMURlaXJFZHJlSFM1cGZRY096c0sweUhmQjlIRVZCdXErb1Erd1ZsdjZDYzd1bG43cTZDck5lRnNiLzlkNkF0TFpZb1dqeFVXZE1QVUtyd0t0SW14cVVGWkNyaHcxSkticUZaeExmMnI4aHZubnpzZU9HR1dKdTE1eW1LMTEvT3NWRXNaTWExaGsyTHdzV2FtZXhvWUdPa3VIbU02RDlvS3hCd3BCRGQ5d05XY0VETEJneU5LbmdFb0FrSEM0Rm5CY0xnQkxKQVM2QUtqVUlKYmxha3Z3Tlp6ZUl6MUNiTW9EcVBicHk1U3QvL0IvMHpYOFNLZmlac21TemQveTNoZzRVOGlQNlJYVmVGdm1vUS9PS2g1OVNVRnR0aVVOSWllanBNNjA5NnlsRFlQbXlnVDdkaEgxbTlpLzdTWHZSUHdqZ3FoNE43QVBWc2RKLys2YStmQjRYa1ZSK3Q5V0V3N1J2VkxkRW5mRlIxZERZSHJDdHlRYWlhMGxjR0xHVGEvejlxTGdTVjY3QVZJTVdJTC9KTm9rRGc5Wkg0WS9oV3RQeTFUTURRbkN5TXcvbTY0cytYQnl2SDAxZktUdk1aczdiMUNKcUE2djA3cThiUFh3UDR0cUIrRmhxU29yYy9TcEpjRUp6bFloQWtUbmdkU01scDB1aHBZVnJ2MFc1LzA4emcrYWhKWTkwOGlFMGdaVWNVT28wWGpKcEg3N3hhSmJzdEV6dFZlQk1oN0ozU1ZtK3hUcFUxQWE3YUQ3YnVabGpMQ3V1T2w2SWpyVW5vRlprbXBXbTRWWWRyT1B4Nk1BVGRxZEpQNzZMNG42NnhSZG1XSWNMR0N1b2ptZWs5cXBoMGYrbHJlRDJxTjluYXgyenpGTDF6S29wR1p1dTMyZGkzZ3hsYzNaUmd3aGJMZkxoWS9qREh1a2V1RExITUR4NWVUYlVkeXd1bXQ0Rm9raE4rOGFwVTJSRGk3d1YvMEFkejRKNjluMmRtdUs0Y3owZjJNSVN3T1orN2IwN00vQ2taL1ZWa2Z4amFvRUl1Q3hDT3V5SXJFbEV1YWxuUkw3OFRLZys2Z3kyOEJ3QTZMUDZPSGRyMVdZRzEyK2RWWWtFU0JHdEdoQjVoNFl2bm5nWENycUdnU0FYM2pvNXZwUFdONGl0WlQ3aFp2NGRSQ1BVdkkxNmtPMXVhNnFCb1VGWFBIMzQrRlk3Uk52R2NMSFNPSWtMWkh6UXZCd0JLNG40cnkzR1pNWWFCVlRtNExLVi81dzJzbFI5bDQxNzNCbHBtK0xEbkFON0ZXZWcxWEgyNS94NEt3ajYrTFA4T0ppZEFtMGQrVXdIRWI1czBocGZzcERVaVYwaTBDcU1MaFFLT2RrNnNrSDI1YjdnYlBkME5Ham5DMGliZGRzSXVMN2k3cTdDbFVkVWpFNnNJdlczaStEcXBRTlRZVEVycS9vdkVwbWhsRHFMVjdhUlMrd2dNUzVvc3hrbm0wenljRVRwYkRxVWNqKzVzeERzMTVJbkYxQ2FYTFp1ZXJaNy9hRUMzblJkRHgzenVvWnJNbzIxZTBmOVlMK1FyV3pCUmlKK0U0aURrQWJObzlpdy9oZlFlczhtN1Q2WWxvTWE4em5QQ0toMVI4WTh5NnV3UDFvc1A5aWZwSjZZcWZSMTRtTWtsR0k5RzdUUjU2MEk2djY5R1lGL29NTC95WXcxc285anhBeU9EZzFDZmhEaDZBNmt5OHdJb2FBV3JsSkZzSk5GQUp0ZHRDcjVJbWRVOVNpY1N0VzBXZWVFT2dwaEpCUUhweUFvZVhaQ1F4Q3RySWlXQlU1WTFJRjhyeXpVZy95WWZOdmlPM0YxNkk5dCtVUndybWx4Lys2OGprVjVHanU3cWxJd0tKODdZRzZVK0NpbEs4ajZ5TldidGRpZkplNnF1Z0RMRXVuM3BteHFnbzNaNGdQWGVpS2UwU3FIRy9GWnNQN0NlUGtUemhkZ3NlM1AvUm1zcm8vSnpYMm4yS044ZmdSYzZlSHgwQXU2ZkNOUjBsc0FWWEoyOG4rbXkwVVpPRTNweWptTWN6OXUzeHJJVHZnQ0p5VnJwRVptMDBhNmxQRFo3bFNna3J1bmUzcFhFdk1SbTdIdEFqK0FHNngzZVlBbllMWUlnSkxHMHROb094RjM4ZXIxYUgySjBERnBMS2hNaTNZamhyQlJGUTdmcFZxZDZ6TThOMVFXNUFxeXhkQUcrR2pZV2ZWeTJudlFwaWh0Y0dzeEV4ck8wNTlQNDlsb0s0WW9IM2lPRi9zS0RlYitEVEtUd0hmdTVGcXEyTDdLZnhpVmJzK043ZVlNOVNVZ29rdnkrZmRQOVR3N3ppSGxFQ0Z2SWpUZE1YTFdXaUM3UlBwNnFlUTJwbmxyREoxdlQ1dVFTWFc2TE9VZHE3bm1pTDVjUHErdHZ4YUt4bG5MWEY0UTkreUZ2eHB2dG9sVG1qeU5xcFpnRDNTWGFsQTg0REZPQ2h3N20wcE14a3UydHNvSzB4TjdPNU1sVUIzejBxeVRqYXF0KzRKOUgwbWNPVzhqSmdEWGhVaUthcVNpQzRCazNNZ0RLNVNTWVNQVGM4V2cvdDJKOFdHU2UyS1N1K3hKTDBiZGZQR2J1UUo2YWxoVnYxQUZTTHkzb0VnZ0lzL3Y1U0hzVmNub2NacDNFRDUrK00zL0pTd0ZvUk81M0VJYkZqVDc3VFBqb0RyNWlRLzFzQ2o4dUpSdjVmbHFGZUo5ekEvbzE5QlhKTGh4T0kvNmw5aXlZb0J4UzM5Y0tpUGlsVjN6c0xPdkh3VGJEdnVYMmkrODBXbG90RnhXVU9QZjIxMEFXeUxkYnhGUHlBb0hNY1ZIYVRqVHFyUTkxamhtNDBZZW4rSTJ0OWNwY25OZ1RTU0dlN2ZtY0dlS3pNcjlERkZ5RFJSdFVzWTRLUHNpUVdRbU1GaUdQYW45a05USnR0WkpBWnYzNHBuZUVCNVBnbUVCVkVEaklTN01mMzFNWWFkTml3QWZwSTZxZ0pSUlRrc09xWDFvSDNtR1Z3SDhrT2x0TDNXYWJObWRUam43UDNWQVBzQ2pJVUxmdXB4dEhQV2YvMlFBQkFCb0FRQUFCT3dCQUFBOEJDanNDQUFBQUFBRURBYmxBQUFJQUNRSUJBUW9DQUFNQUdsUm9hWE1nYVhNZ2IyWWdSbWx1WjJWeUlDZ3hNQ2s9PC9CREI-CiAgICA8L0JJUj4KICAgIDxCSVI-CiAgICAgICAgPFZlcnNpb24-CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvVmVyc2lvbj4KICAgICAgICA8Q0JFRkZWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L0NCRUZGVmVyc2lvbj4KICAgICAgICA8QklSSW5mbz4KICAgICAgICAgICAgPEludGVncml0eT5mYWxzZTwvSW50ZWdyaXR5PgogICAgICAgIDwvQklSSW5mbz4KICAgICAgICA8QkRCSW5mbz4KICAgICAgICAgICAgPEZvcm1hdD4KICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24-TW9zaXA8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgIDxUeXBlPjc8L1R5cGU-CiAgICAgICAgICAgIDwvRm9ybWF0PgogICAgICAgICAgICA8Q3JlYXRpb25EYXRlPjIwMjAtMDEtMDdUMDI6Mzg6NTIuNjcxWjwvQ3JlYXRpb25EYXRlPgogICAgICAgICAgICA8VHlwZT5GaW5nZXI8L1R5cGU-CiAgICAgICAgICAgIDxTdWJ0eXBlPlJpZ2h0IEluZGV4RmluZ2VyPC9TdWJ0eXBlPgogICAgICAgICAgICA8TGV2ZWw-UmF3PC9MZXZlbD4KICAgICAgICAgICAgPFB1cnBvc2U-RW5yb2xsPC9QdXJwb3NlPgogICAgICAgICAgICA8UXVhbGl0eT4KICAgICAgICAgICAgICAgIDxBbGdvcml0aG0-CiAgICAgICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5ITUFDPC9Pcmdhbml6YXRpb24-CiAgICAgICAgICAgICAgICAgICAgPFR5cGU-U0hBLTI1NjwvVHlwZT4KICAgICAgICAgICAgICAgIDwvQWxnb3JpdGhtPgogICAgICAgICAgICAgICAgPFNjb3JlPjcyPC9TY29yZT4KICAgICAgICAgICAgPC9RdWFsaXR5PgogICAgICAgIDwvQkRCSW5mbz4KICAgICAgICA8QkRCPlJrbFNBREF5TUFBQUFXN1dBQUVCQVFBQmJzWUg1Z3djRENBcEFVY0FBQUFBQUFFM0FFQUFEd0lBUUFJQVFBSUNBQUVCOUFIMEFmUUI5QWdGSFFFMEFaMEFBVzVWQUFBQURHcFFJQ0FOQ29jS0FBQUFGR1owZVhCcWNESWdBQUFBQUdwd01pQUFBQUJIYW5BeWFBQUFBQlpwYUdSeUFBQUJuUUFBQVRRQUFRY0hBQUFBQUFBUFkyOXNjZ0VBQUFBQUFCRUFBQUFhY21WeklBQUFBQkp5WlhOam1jb0FBWm5LQUFFQUFBQUFBQUJxY0RKai8wLy9VUUFwQUFBQUFBRTBBQUFCblFBQUFBQUFBQUFBQUFBQk5BQUFBWjBBQUFBQUFBQUFBQUFCQndFQi8yUUFJd0FCUTNKbFlYUnZjam9nU21GelVHVnlJRlpsY25OcGIyNGdNUzQ1TURBdU1mOWtBQkFBQVVWdVkwbEVPa2RTUWxRd01mOVNBQXdBQWdBSkFBVUVCQUFCLzF3QUUwQkFTRWhRU0VoUVNFaFFTRWhRU0VoUS81QUFDZ0FBQUFGdFhRQUIvNVBmRzZBVHppTEU4bkJvL1o3cURGOEpubUVua3ZsTVpzK280N3RLK29hdG5OdDdQSjBWQWMranNkSU5jQnRHbjgvT3BFNWtlUkFUMHc0MVF0OExnSUNBOHBCd05EanN1bzhZRGROV2VoVXJpVnlkN3k2QThTRFpLWlBYOUZyalJVbmMxalp6OGlOdDJodUEvQWhBT0Y5NUpHNW9Samtnd0tHM2lTbGtIemVwMHBGRGFjTExCSGEzRjFueWRYRi96cWNUQUhMU05zZjJmYkYwQU1pbUJFMlNYYjk3MHNFblhBbFlTbi8xTGpvVlFKK2U1TU92MC8yZ2NEQmUya3JGdGoyR0Z1UnhkM2JpUXkzK3RyV25pME9tRzcyNXhEZ3ZXSW5tTzZZQTdJdmdwWlk1bkV4L3RUbDR5V2JtU2FCWm5SRHVjektpb1VvVzhkbEFQdnZZczFrTTVKU2ZKN2FsRnhOcW1LUnV3SkhWNERHTWxRQ280RFJYN0JLbklZS09lalBxNkJzY3RWaGd0dHVKdmxvWG5wekxsTFlTaUg0SkxmczI3K2ROdTJlTkF2R0R6TUpBMVJoUFZrNXdQOWlUL2xHK3JkS3EvRzMrTTErUWVuOG8vUklsZUdIWUU5cnlucXdOb1BvSzVXVXB1c0lUcW01MlpLRUZWeVowYjFmenZjNkM1M3VRMXdaeGsvOFhhaWpnT2c4M2I1K2J0c2Yyc2djUzNwZUY3YVZIdXdPS0FKN3dYZ3RDekVQei9EWG5ydFVxdEJwaFFXRTJHMU9KeHM4QmRUcWxtcXByYTdvNkgwbk96Zjc5REZlSU1QajI5OS9QSk1ZMVdNWmNGNWhXY1RpcEhzenpjNXRzczZudW9hZVJHU3pEMjkrcGxuYzdSWFpWZjRPZTNGVjk3c1BxSXArQXpxaWRwTWhsMDc3cFlxMHVvclpQWXpPdHZ4elVSRW03anFGeHkrQy9yZjV2K0FXeXRRd1kvQ29qa05INHZhSEQ0QTNzUXl0T2tSei9YZWFScDFtdWdHQ0RmeWdIZllUWWx1Y0d3RitjYXNmVUVuNktsMnorajUxbE9yN0hIWkJZTHNuVkJ4c0I2c0hxcDdsVVFqMmtlNkZWVzJldFE5cjgya0lBTXdsQllhcXVKMnhETDd2bzBXSkYvUGdTMWNZNUo1TnRBWHVrZGNIazg1V2Q3QndwVnBEYm5naGs1Smx0aTJsVUVjQlZDRzZCVy9WUHY2UjR0Tmh3aEMwNDVXUmc5eUppdjNFdGJNTWhXK1RwTUkranRrNEpDNWpuYms1eU56YUpNY20xR1J0SGoyMUhPUmFKbUtQaDNXdXo2clVUQnhLZC9OS2ZlV2R2TkY2ZElPek1EQlgvZGQxSlAyeVZhRmJuZUs3MFh0MnVoSVR4VitGU2ErWXY0UHI4ZXMzb0tiZDlRTElrck56dEtjYVZVbUxmN01udmNmenZZL0tUeW1ZVXBnZkwvTmtyTnFZcVkzTitOSTNmY1Z4N0E2NnZ3ejNoSjhETHBUODNCU0xzTm45NEcvVEtNY0c0NTZTVXRIazRpN005T2I3eVBzT2ZvRzI1R3hLV1ZMdmJ5UFNjVVNDV1NJa1dMdjI0UWlyaG1hdmwyVEF4bnpSQ3k4MDZFZ2Era2paRzV6RDhnemFaVXZiZHdaN0dlZ0R5eVlld3JZejBleVRZU1N4bm81cVRqTjBua1VWSUpLblYySjdmQXRBdGp3TjVmUWRENUF6THlxdm5pSHdpa2lSU0hsRGhaZjZmeDREOHlJZktrWDBxZ05RbkY5aG5ON01keU1aa1dmcFNCN2FrOTF6eStoNldhOHBucUdBVWdPZEVaOWw4VTd5TE1wSEo4OTZqdXVyNDB0N0VjUFJYZldYNStlckVWYVd4T3kvalBaZ2xDakRPL0Jadk01K3ViWDFZYlV2Q0g4WUJ5ZjBLenY1Q2hMejJJNjA0WWVnS2FJRWtBZXg3aG5XZ2pSdExnZVpOcDFvZzZ0QW5xOEN1T210dUFPTVNUN1dEQWxvdnNPWXZiblhDdzNydEtmQ3ROWUZDdlI1c3IrOVVFM0x2RWVXVjJOY0w3Q01QRDc2ZDd1YmZxTXdnRHNob0VqUlgyL29VSk9kQ2ZHTC9XSCswMkRYUHVmeFdwdkhXdDlUckcvSnFoZmhnUERSNDFTTm5tblc2aThuM1FMTUNHbEZ5VDQwTGdQeDc2WUFNVDd5NTZPRDM5aldOSXZsZkNiM2tzc3JCcng4bFM1dVdyVEJwK1VpVjV0NHdxWlU3ejZhWUJMY0NudlFmb3A2QjdJT3VucFZtQ3FSNmJSNk8zN1lVVXpuWlcvdWhhQ2VKaE55TjNHMURSdHRmUE1oNkxpWWd1TlRwUVpzT3BiL2JDaTlCKzRHLy9tVlpUMEpVdGdGcDlQeS9tcGhYMnZLWUhmd2daUUhRVnZwV2JweHRRWEw2UHA3R285a0NKZ3NFSlhJQmZoQWFWSDVCMGQxWXVvSWFKOWFEQ1RkRW5MNXk5MCs1MFlDaXB1cU1KVTEwV0lKK1ZWUHB1S0VseC9STUtLSkdvWm5JS2FsMGlGWUlGRXljYkg1TUNYd1RXWkNxNjhLb2VoNTBLcWpQdjA5RGRIejNUM1hyZWhKVmJnb242SzBDOUhpbmdtVFd3QVpyV3pwVVVFQUFGWWJKSzVQek1SeXoyUElSd3FkN2R4d3JMYWk2SGhkaVhCc3JRQlAwaGJPUkhMQ2lpT2Y2d3p1MnBRcXBsUGJPamNaa3p2OWhLd0NNWWNuajA3K0J3REI0bm9wRjYxQ2t6UEhvMU9XWkhKT2lKVHA2RFFjSUZlS3NaMUd6ZXJWbmZIaWd6SjF2L2ZaeXg5aG90N2dyMGl3TDgxcFprRVd0a241aGNwRy9icVk3NXBkcGoyZjgyUHhQblNjZDFRbytqUlBYOU4rcHQzV2RDQzNjZTEyT2M2eTdsVXJ3NnVYSVF0VnozVmdkVDI5TzBDbGgydS9Sc2xaVHNTWmh5KzNFell5eFlySm1DQWNxRHM3bVRzamZJcFNtUitCeTE0UEEyM2lJK2dGa1AvQkVtWlo0REdGU1RrUTZYN0ZISnorTjFQN0dBNjVIejBLVUMwaFNYRzRrZTBiQTdXcW5vRENVQUZjMTJJV281NDhnUU56MUV0MU5nbkdNanJIaXM2QW12L1ZiQTllamhSNHVMbkczZmlndDFkU0ExbnJVRjNNVGQ5NnFQUm9hS2w3ODEvT2pmWjZmWjg1anEyc1RoYnJQMEVGQU9iaVlWSTBFSDNHS1BrNG80VWprTzVKaktyelNVUDlsUHpoa2FGZHhOSUZZQjYvSjI5RDZJc0pmS3QyUElVQW5JMW51dW5uZXlGQlhlZnl1NjhDZjdISk8wSFVNbDVIMFFqaEVOTmFhc24zSlNDOTBKS3Bqc2FVTXVVS2FyMmRUOVlwajVyMjlQRmdWQnVXYnBTNVdRd0VkU21lRFVKMFp3M1lyMU1NUEFUcndWRi9KS3h4clk5WGFRWUJiZTlrdlNQMHlwemgrSUdyZ2w2UEp5N2dBZTBJVWVjR1FyRk8rZlY5aDFmNnZiZjMzTEdydUlmTHFJcGlRV3JoQTRNdWI5c2I3UTN1bTdkMXJzTjFZMkRwYUlXNXk2WFRkMTB5MXpQZStIMCtIQktFMWVPeGRzcndUajg0MjB0MVNXcEVhSEVtcnFhTXhyc1Jjb3hMa1NPTktoK1lJSUUrWlFiNlZUUm1FYmg1Yks2dVQ1bjZUUmYyRWd0UVV2VjhqSEpsdllqbmRKR0lWYWZzV2NkcjFva2VvZ2c0aElJZVNzSG4ydU5DSm0vcFBoL2JVUFhRTnNBQXdzYi9WSWQ3eTBFMjNKNzFqSHZXckxKQXRYUDlWS3VwTjExZ2F2VnNROU5IOUxaYXcyVDJ1U2RRMnVKSHJ3QUN2YllMUGZpR2VDTjNFZDZneE1menBsZ2dBdWtjMVlkUGh3ekFmMk1aazhZTSs4N2drWDVMTC9sd2hocnUydXBjWHkyMUNtRm1PN1lSbTdRZlFtUkMxYit0ekFaNzBXcktTOFlHYkVWYWozSWRFckIwUU8zU01SL1QrYmRDbjlqZ3JBZEN6YlJxR2VEUVZ5OUJkejg0RUpaL0wyQjN2Rkl3bm95YU1FU3gxV0ZyallXb3V0NjRsQlpxOW5kazFMVTFuWVMrNi9qUkxJOThVczFsWUtuUzBGamNER2x4UEZXRkpGS3BkSjR5VkowSjRQSVMzMWdDdUF3eDh5RzA2QjFQUVFxbHVxT3BHRzBRZCt3bXZzb1pST3JwTElKSjBaZ1JybkMrVk11WVBZYlNxRHJBQVROOG5hNHJEQTJJRlR5Y3BiZDBhTG5sYk5aYTI0WE5PT24ramVGVE82ZGkzV0liYWhJNzdDNzRONzU5bjdhRStpUTRsQXlkNHc4Wi90OHpQeTNFT0RNTmkva3VNdTRYSHdFZ3JtNzFSdHFjSW9hZi9TQ0VkL2FGQ3NFc09NUHRxMmdOQ2lveTB3RlFkUzJGZUczMDA5WlBiTTEzV3BxTzk0MUEwRExqNlMvbU90RmF6TllXVnd5OXNBNmRjbWpseE84VTZ3R1IyZmRkVENsVDQwT3RlUm1iVlpVaGFQSmxUMEtYRlJVRzNSOUF5MUkrWERSYWpneWN2SnNmNnRvRVhha3FTNEhwYzd0T1AyRnhZNU55K2JqRVpyTTU4aUtXYlNoNmtKbmExbmZpT2ZzZFJwTC9tek5mRXNyVisyUU5NQ2o4Yk1Ia2FXK1J4d2pjSk9HTjBNaWlzWVdLK2Q2S1d4T1M4MWw3VG1QZnc1RlFWT1hBWGRHYjNlRnRNTFZyMEpVcEtsbzN4UFFOdU1RaEs2Y1ZPaE5FRmpWbi9MS0xHNFNER3E1bGFXS1RJVC85bG5HenF4QTd3M3RCMk44Y00yY0laU3NlUlVjYjBjQkp4Z25Ma0MydUxSL2RxQ2hJdzdIdGc1MXpSNFh6Z1NRS3YwVzcrL1A2ZGRJd1Y4eXZrQlBLWkdFbUFPTmVRd210WnVjNW5xbHRtakxGZGpSQVZLS2FqUnZzOUNubXpUQlllU2Q4ZGUwYmtVU1VPMmFpSGtCQXBQVy9SVDA0U1lEa3FmMmtScGRGYXZwK005YU5DWmxhSFFJTDhYWlZPbTlGV1p4ZTkvdGZaYnIrUExybWcxcnZuQ1A4cWJrOVJ3M0MzSnRkYU1tSW4wNnRPOWJSbURuY2NEVHYrczVyOGd2T0NsUU10QzhIcHBIMVBCdTh6WGtVTUFGd2poRkNFaFBib2VHTkNWek5LUHQ0b2ZSUkdURFpjRW1BNFFMOHdUcWZtcFFyMGo1QUFqMnpEZVdDUEM5eTNRa3ArKzhmVVFzeS9SeFBKMm8xU055d1lWY3E4WTExdTYwNDZ3d3dVZlF3WjR4a2dmN0FRaXBKT1h2MDlYK0ZMRFRoVmpMUjlyQ0wxN2pYY2Q0Q2M4WGJGbG5ia3E2Z2ZCY3JVRE9PSmwzUXY4aUNHNVF0c1JBS2pOU3NVREQ1L1kvMEdpNzhjSmhYOUNBSUZTd2xHeHN4bGpmMllRMDlSVzloSWlhcWpuU1BXc1N6ZHZXNzIvc0hZdnQzNEI5bjZBZHBKczEyK0dwL3ZzYmx6aTFFOUdScURxeFV6cHV4ZkoyOEYvZk9uSFNuRGZoTDZtWDF1RW1MeWRxdEFJN2dvWXN2b09QZktvZU1kcXA0LzR0TXVUTkZzYTJNTmJybHl2Wk5nbWVrTnpjWDM5UnVDdWhReFpsOFU2OGVMZGJmNy9vUzJXa3dEZzdiNXlteklBNmNRaFZrSlp4bG5xOHVFVEJlWXZibzZzeWNzVkloc1ZnSVFxVVAyTldwSlg1dWFPcXhsalEyeC9wdHZSYnNQK0QxQUx2QlZSSmhzWS85RXVTbzd4Zm1hVEVSVkEvMlN1RTVvcmdORTRjd0tXeG44M2tYN2ZRQWkrek5Gc2cvM09aNys2MjNTT0wyN2gxRDVWQmNvU2ViMjN5bHNCT1hVSE40UHM4MmttTk90Rmpmd1FoYXlYS1orRUNlME9yT21YR3lUcnVuTS8yelR3cDg3a3BvWnZqODg4T29sRHVST20yQVRyRUlIR3NhcGZhNzh2M0NLZU1XNTYwdVhpMVA1YmR4NjdGRkhtK1Rjbm1JRkFvckluSWhHYVFMTDdubUpldjQ1eHpMQkN5QVdqaXJhNVZPckxTaURDYXo5WTFOeFdiOTExbm12RnYwcVAvU3FIOVpZUUtkUUkxN1padS9LSmFKeUlXMzVNdmdrcW83REh3QUw0MXNOZWF2d2IvcHk4T0lBY2JjU3lRN3dPR1NyYmcvNnBJcWpTUVU5YVdiZjBIRHFBbFMvQTV5VW9FSEJzK1hBVElaMGZQOEc0bndhNy80QWUxSlpPaGxFMU1XUmIrc3VEaGxqSGNyVXdMekRXUGdwb0pPYVN3QlhwS1lUU2JUZkJTQm00b1RrZ1JTcnpyeW0xak9MeUlvdUU5bTZIcXl3MUJ2KzRlckFMbC9IQ25POWhVYXJ5TXdaZkc4KzJRMnlZYUVoRTVoaVNwWW93ZlFEOFZqbmxIT1RyQkUwTTZnT1MxcW9KSGtaT1ZZYTJZZURmOXBiaEpUdFp4UTZJZTJlR1g1dEVPN0R5OXZEd3VJZHR2YnZMUVZMREd1K3htZVVNaVh2ZTRCaUptbURKN1BUdGZGMDNIeW5vclNoWHpLc0NFd1VGUWFldEUzM2Z0a3Y5THdobERPb2JRSnNCMVBrbm5GU2thM0RxaTJuTDFhcERZS3lhNmdQaU9RTUdVdU82eFJxWmNTbkNuem0wRUhYME0vOUtCMTBPSmZtcCtnR1FZSlErUGVHTEE1UW9JRVUxMUhqNUtSeURaREJEVzdSUldnemVsRlF0aDBoS3dTcjQrT0syNHk5ZGpjZUNRaWhGa1JUWlMybk91VG5ybXRlOXo1NHRQMm1CTjdLVlhQUUQ0V2YyWCtvaWVqeHhqL2lwQm1Paml2Mkl4NVBVa1d6MEpBSXlvN1dJbUdIbmpkTUtSZG5lampmZjRnVUxtOEZnUzBqKzlZaUlnQXFTbFpkTEMySWxkWXIyL1ZMSkh3bW9FMnF6a3hWS0tSdzJNQ1RXcElLMUprb2pLc1RmZ281bTladElzR1o3bHlDSHEreXErOFdMSURnUmp5R3NWa0ZXbmpuTDMrNmNWeWVWVzg4WmZhUjdMcTB0ZlpYVndLMTRqcjZrajFDUnB3T0s2TUhVb1VFVW42N1pyeUU4QnFTU2dKLzZvL2hmOXc5YmRQSHF2cjF3MStFdFFVYVJnNHJzSTk5R09UZmNJN0FtNWhTemlXeXdQcEhxSDBhbldRNlRaUytHWm9tdzJ5aDZCdHkxd3RPNGxyL2QyNm9ZNDY3d2V0Q2syNWZ6ZHZReU5TZllCOTRiZTJ5c3F1eHZ6cTRaU1NGMGliL0tiaXk2cTU5aUtPaWg3VnlUcXN3UkQvdHBGU0JEdElvbk1ZVFM1SExGbnJMLzJHejBRd0ZWZ2w5WVdBVzcxZ25zR0dFQlJvN0dzQ2RXK083Y3oxWENrd0J2L0o5VXNmWis2bkZpWHovTjlkNjhmWTJjZS90dkN2UnBXdnZrRGZkZ0tMRmxoaFhDa0JYZ1JLOXEyeDZqaXlXTXJFY1N0UTVKeElpbnVqbTJ2Vm04VnNOYzNFUUVOMERtcE42WnMyN3VVZjFnL2NRR2NoYjQ3ZmZmNnBHTWJLME9mclJlbjlpbWtBK25XNkFQL282UXUvNFBRVXlzUmNIakROcVNRSENpbDMyc3lQQUF2YklsRzNQdngvVWVxQ2RRVXljZ1N2UDVCWlFJMGZlRUJWaS9JTlIrZ0doWlRTaDY4dHU1ZGdlZXRhYkhzSVhVSlpRbmNXUVV5Y09lcTNtcms1REJPc0hVblBPckNhbmIzdDd6QkNUR2NTZzJwamJYVFllK2FSUnRlVkhxWklOZm9hUFhBRlFHNXdRc2VKL1dHVXcvam85bHdVd1VydHlzSjVFeWRIaDRyUXlxVjd5NDJGTDNRcDBWSzhrcjNncDZ0YmtCZW5KQXZFZHU1bit1T2htY3ZPcE1rR3F1bWdXQmhOSWJqcVpKUHZ1aWUxdVVJY0cwU1RTYzlVZEMvdlN2SkNnTnd2V1h1UWtmR2NqU1hmQTJlMUlyNWJlaW8yVElPcFhjVXVaMmRSSXhDNDg2MUk5R3BrMUE4MnpOWXBrSDV0SjM4LzNlY0lhUXRtTnNjSzBUemZEOHJYQkwvSjhTbU9JUEFQcjZ3V0FGbzFTcTF3K3doa21qUFMvdXNiQ2xsVXZHcGYwQXlWdU1Ldys4eENNM3BBemhDRkxmR1BISlRTWEJOaWFkcmdpNDV2L2Q5SHRkbFlwT1pKdkhkd0dmKzZ4N0VFUm13d3BiL1ZsR3hLM3BsdU1INDUrUFpZYm80ZmppenRRcUoxVFVPQ3FWZXVBUEgyM1NWaFkvd0MxcEJoSjJYeWhTOCtHZnI1bGZHVnM3bUk5Z3NZTVdzNVpJYWlCSis4S0NERVJCSnYxQkpRWEJUNGhNL1R1M0Q0aEpndUVHYktTTW1WYzJ0R3Z3bm5RY25KQ2FqM3Y1MWY0YzFKcHk4SEp1eEQ4VjlEL0cvbW1sQ3ZOS3I0U2ZtSmtNYlJkK1Z0VEI3ZDRnZnlRUXgwV0VjcXRqS1dVcFhLWDBwcnNFQ0x4Ri9QdS9aQ2NYMEpjbFRVZVdtc0xMd20wd2UzOUl5YklmakFqNnRMMHBIL3pyNytSK1JPZEdHd21DTEN3angxQnkrU0czNVU1RGdmNU40ZnhBUW1UMFIwTUlFaldFWHVhY0lVWjJzNDRkTDR3Vk9KYlNqVE4zNm5mNXlkdEVzMytYbUErVmJMREhYaXVzZGZrTFozTnVCaTBSZm92a3I2QUhBa1dFYmFEcStteG40SWExTU5MM3JDWTM1OTJXTW5yZFQ5T01sRHc3b21TZ0VHRjZoSjR6WHZHVVNlU2FEdVo2TEMvY0pVWTFUNDRsYUtNd2hUZWR5UGkwaEtnT0k1V0lhdkZMenQ0RkcvenJRMms1OUxVTllQRmliWG0rdFI0OU56SWlYZzJJejdhUnhzRW1zWHVXd2srYjloam1YMU9MZ2o5NzJPbDZPTVlIRXFyWTdZcmU1Y2Q5bnV1N09kNFlSNUJMR2JuL2sxYTBvZ29ZUDZqakUwOUlJYU5zdm1nd3lmM201TTd5RElEdmx5MmkrYXl5Y1VQYm9tYmtWRnJ0WkxkLzBCazJRMThLSzU3eno5SWNNandQODZIbmszT2lFbDJLdm43ZFJwWGVHbzlEZFRZanVoR3JHMTFydHFEREREaHJLUkJVUDRXbVhwQWZPczJ3bUcvdU45Ni9SajZOK1UzRi9Cdmk5cEVHM3JaSzZTRCsza1NQMURrMVFGM2FTVjZOTGNOVnhGTlB6d3cyUGppSGsyYWJ4RTB3VHlIaVZkV1NOZnd1ZFVJMTJoV1B2NEFYMktoNjBnVFB6ZTFQWlBJNUlNaDFYVzMrT2J6WHNIV3NyZjFCM2FoZlA4bWRzRC9ONzlOZ1lUdDNBMzFDN0Nua0NsWTgvOFlXUllYUStQM3kzUlp4N2llWXBtbGlnSUhMb1hGL3lRNlBqR2U3cjRIK29sSDgyK25IOWtRMG9DUVhVTURuUHczSm5BMXFXZFh5ZHphR2lVUDI1V0VxN3lYNkd6N2N1Vld6QW1lWWJreDF0REdmMnJmajRacVdlbW02SzE5N3QrMXl0RWJvNzcvYWErTGVRRC9TUzMrQ1RHZzk1c3JSTytIVkZWTHZzY0hSVDQ4RVo2T25XSFZMbC91bFJXdVVxVjloVFpMQm8vNDE0SVl0d1Y1cHd4NFFMU2xYd0NwR0IxVyt0MXFTc3JiVzE5SzM0VHE2dU1CbHhhVTk5Vm5KNWRxSWNFc1lHd0JKb2dJL1V2amdHalZDSFArVGtLNzlNWStnZmk4SWJndGJVN3dtNnFUY3NDQ214dVZPWEQzcGxvcDhISHkzQVIxeW9aZWh0Y2RIdEhqZDJVT3JHQWZ4N2VOSytmN3V0eHFPdHFCTU1PZTYvVDNtSU0xRDQzak5QODVSY3lLLzE2cjk1ZXR1NUlBNzVORVlialUwbXJ6VU9VQTkxNlJRUTB3bk5GS3RhUUo2TmN6SFRycEpYTW82cWduendzaGJpY3VCM2lsZTltUXRyZ0FWS20rb1BlRTY2QUNSK1VidUlaWUFiVkc3YmRWR1RhVTh1bE5KVy91ZWZPanRQUVBuQWlmRFY0bGpaZmNBTEhPaEo2L2FyTWNIemVuRWVYYkl1RzdwL3dsU2ZsUEs4emREZENnbC9MTC9HWjAzeUVKOGFkek8rSG1sa1lLMC9sMzFXeUhOQ25KUUwzNngzbXZDRXRWMHVvbVk5Yi9PYVZPNURVYUM3SFBkWi9HUnV5M2R4c1lKZlVxMElsTExwMW1uNnVoc0ZGS1l1Vm8wNkpPblNxV1RMbXQ5L2cvK3Y1Q1JlNWNDR0R2eXNxZmlYdzlkb0ZsVVNpemljaFZNZjhTcjNkWUl1L2JOTWtsT3Fzb1g1UzFlS0YzQlM1OFMvUnZvK3kyTWk4YnV0bWJFdXVHSEhoVVVNaTJ0S3JsRHlBUExVTE5rcmxid1FwKzJRMWZmcENBNTEwQ25kWkhGRUNDR1JualBjQmFsVjYzbkI4Ull6YWkyb2RPeS9XcFE1YlZuYVZsTk1NUGdRR0tCN1FYVnFGeDkyMUN6UDVwckwvR2NubzlxT28xb0VSVU1xOXRMSkt4TDdnQWVBSUZVSy9lUUtDZURIVVFGUVdHM0J1WGVxQWVsTXM5NytnQmFib1RwamRyelJBRlh1NWlpcVduVjYwUHBnc1hxNFBtWnhVL3ZBSUtUSEdoa3FLMXRXS0hzVXM5TG9aVWFmYjQ4ekp6VFJFUkFVYTNsTWEzb3YyQjMrbWd5bithb0lZTEZYYkcrS3Z3bG9RTThFZ05wN3RFclA4ZWRGT29XcnVpTkxxcEdwdUVmWlNwb3NML1YwU2lHWk16eE9QT2NFNGlvNHp4aWlxbGhXOEFwSnp3M1hiT3JsTjVyUFlUeUNseVZoakQ1ZE1aUVNiT0l0TStCclArMkl0OGlteW85aW15ZzZWYy9ZSUt3bFZZNFg5Yy9IbXhoWUxmWDY3MTBYcHNUVFhGa1Z2bDN2cGZxMDFSNVRYcnpjaUZjRGF1ZWJ5VE9DSXBTazhmYTRjVmpWOUxldlpWQlFvbmx1WTRqTVlwNFNReW80SDRXS3YrRWFhMEpuYzU2eEFQV2tuUmFtb0RUSWVVdGo1V2srL2xyNUJGNC8wZTdkK21iRzZyOGV1RVVaZnZicmFSZXlUSTRoZHduY0w1SVF5M3c0ZnhhRkVjUXZhV3BYcXVIZG1haGFiVUF2OXBDbDhMVjBaVzVoeEROVHphYVpJZlhIMzlleUZYT0N5ekplK0FJeUdMeWQwK2d3bXh5MU80aVphQjhRZ3lEbVRKSXJzMm14S0xnMFgwNVN3WW9GY2tYeHJHMkMyYVFpb1pWc2kzbDF6MlcrY1pZZjhtWXBtOGVUTHhaSjhvUXg5b0ltdHdUV3NtWm5uMURWWHQ4UjVjTGhabHhoQzN0VEFkWWxNNGp5Y1BaVHpJeU5PcE9pQ1BRU0RUTzhzQXVHSFI2ZWhQbWdlSmhNN05NQTYvMHU1Q2RhTTBUMUhxK015Q2Y2WGpjMlMvK0VUU3lDOXVXUFdza3hJc0llaW0zZ2VGZzViYXgwNEptenU4VGt1QlRkT2NubFZkT3FIVE5QOHdPN3NsNFk5NVZJWXdCOTRhRGthL3FGanZ2aXFJSDdUM3BaU2h3YUx6bDgyNE1Wc2I0UmRkYUJKdlZZK0FHa2RLZmdlcWhRZjdic01SeEd0TjR5WGZLTzZPZEJlNFlsR01USnladkF6VnJqNWhObndKYnQ5bzV3cEVGMDhWM2JNeC8xTmtBb0RmdEFvQmpDUnRIN2FXYitTL056TWxOZkhqSFA2K0hPNE8wUGJJSVg0a2RZWGpWaGdseUxhczA3ckZCc3M5M0JCYTIyK3E2ekF1VGtVMXM4UTg4dTN6WDhwbVJSK2UyUEZ5NTJXZ1BUNDl3VlhwU0tYNjBHa2N1RW8vdFYyZXhHa2dYb1hFN3gzU0I2SjNnNGRRTlRzQWlmN2J1T2FCRWRPaTJabGdxMXByc2dNNi9DbWpkbXZPRWVSdXlDdVpQN0Y0T1F6aWpCSHg3Y3ZmYnNpcEsvOHBnbWdaMHdJbmZvU2JabGx3Tno5RGlIWWRjSm1xY2RjSmpGUUI3U01OZmFqRGtsYnl6dURJc1lLUDI4YmNwcW9zVVBzTWsrWDVDWTlheTYzdzdOcFlhdDBOT3J1M2R0SVNkMC9tN3prTXlPWjArckhoYWg0RE5Lb1VlaGVlVGRDN1ZOOEVYa1ZvcDUvVU9YVitZeldOYjhLWlFENzhHV3d3SVRNanBOVG5iM01YeGhLb2NxYTNVS25uOHltRFFROFBkbUNpN0FWK3FvNW01MDcvSVYvbmJzVnFoWkxiek0rTWhlanZqejdENU04eDcvNnplc1BRa0ZlbHVqYjV5OFJmQU41V3EzeVROemxBRllXYk1RY0pwd2xVMkUzOTBYUVJ6aXhKbkNPalZRT0I1QjFEZDBGUGFKWTVIN0J4cnpaSC9VbElFRVpGOVhtenppKzRRbTN6YXUzUjVSL2lkcHpna3VJb2dWZW4vUjNVTUZWaTFUNlYwT250T2JWNHJyTnRRaVgzdGdmMUUvUUNKNXA1czB1Y1JQaU9KZFlzZFV2MytBYWJIUzhFS3NwUmFmSi9VRnVnOWxDUUNNRXZCcXgrNXZaWHdFQmZuL2JuS0RaN1ZWMlpYeUlPb1l6eTRoUzhuOFlqREJNYkdvWEsyVGhFY1BOaDNwcGtvemN3bjRoNUcvYWdScFZPdG85WnJXVGgyMEdXZkR1V0hNdnBPWWNHWEFmU3lVU1BNYzYrbTYzSG93aEk0bmoxNFdsR1Y2WDFDT29wTmxrQlNSQVRBb1NrT0hQUmZXL0d5NkQzejJuNHlkaVdEcmxWZ3dzRzJoMGZDeTBvMzRYRnNOTXRkTzZ4YjZqVkFPdlNGWkZXYTRoQXhVVDIwaFMzMUhkZERhNHBkdW5lNDl4amVlQnVDZDRUZ3ZudEo0NmF4cEx0ekx3N2tXcysxUnBBNnVsVklwQWY4eGxNTU1BWHlObDNnV05pR3V6RUFLWUxzM01OcENrZmMzaUhRMnIweU1KdnR2aFpkSERiWWlHYjNONnJvWm1YcjdSNW9YbFhyb3RmbjRkYWJ2bzVpMStqZVNodDdtV0h3bk1kYVltTFMyT1ZDV1Y4d3p4dXJTSUxLL2ZPSnQ2aVFQOGRUTU15bkhnWGJON1ViR1BzYzNRZjAyWjQ5OHZFZmpjUjI0YzArOTNwWFBwL2dJQ0FnT2IwZmJyYU9iMzhBTnRJd2ZoMlhpOTExL3pXNlZWRGtldlFDTEEzZmU1UlROdzF4L2JaYmdpeDNHRVNqUjEycUt5TW1ZU2g2TEZjaEc5SzAwVWZjZXhrOUhwVXdqSEI1VDJhT3grZnBrYm1zdVVyS1BNY3pSNlNSVW9DVGFWcGtIZEV3dC91OElCQW9vZmk2WEl3U0dPdW9mV0xqRFY3UXMxZVVwZzJwcE1LNHVXQXJBZ0tQUStuZHo4Ykx1WFdHVkdFWE1XZXNteTI5ODVhOXB5Y0ZZSysrc2tHMllzd0xhL1NKUjhyZml4Z3FHOUlQMnZjaCt2QTBpN2J0Ty8vUjdXVFNBUnlzd0hrazJPMWJqMW9TWUdpcUsyekw3R3Z5ZW5hMFRFSmt1NmZQVWlMOEE3WFlTMko2N3N1clp5aXZTSGEzZmlMZWJwcnQ0K053d0hrVzI0ekRBQVVOWWdZb0lFTkRTZE1aSDBrY2Rla0F2NDRMUjJYYTRHOTBQWEdUeEVaamtVUnRvUEEzaGtveVh0Uk1zZkV6cW51eStadjJVamdNellZTHZ6M3FRSHk1UHFSR0haRjhaenNVQUVDM2V2UHFTd01wTEs4NmNzWDMwUGh0eklVZkM4TS90bWh2cHgxYXhjRzQwaEUwN1pEQmlOUXl5SXhHWUdOcEVJbzNSemIybFY1N0V2Wm14TFRsZ2cwbGJpejNGWEpYeEdDZGhtV2dFY2p1a0NMUEFsVElGV3h5dVJRc2ZORUJ0SGtjY2FCay9oSnhWcFNzUVlkNDdOWXJtMlMzckZzalFHMTRuWUhQckJyL3JLdmlWZjN1RG5uRStYQUpKaVpHVWV5aWZqU3h4VkNKMVVBaUtldm9Yc05LR3U5RHF0VHQ4TWFqOTJMSGRGNE9RMEUvem01aDVMd2I4T0VkTzdOWGhPMFhwTUQxTHZuRDUzMk5Pak1sRUU3MXd4U1I4STROZ3pQU1dVQVdXZk5aUnF3S09GMldSWGd6dXVpU1dUbTl5Ly9MVnlkTDFCaitSV1EzM2ZlOE9RdDdod1F4eElPSUQzajlhV2RXczNaQ1I3Rkl6MGFwaUFjbGhZcWZEOWhNTmUzS2h6WHZFbFFQdGI3MjM2L2plbkEvVTFXZmc5TUZsK2R1RWRJUmpBdUM1Z2NUTVRhZTJrSkFWektXOTFSZTFHY2xaMm5IV1ltVTVibStVa3NNUXAyYWVuMW5JeEM4RDc5dFBvL0xubnlSMWFoTktSdkhrYmxrVDRVQk5QbUp4bHMxbEZPa3VjL3c3c0JraEdzei82ZUFFZUxuSm5vS2NGU1ZveU9na2hJbHkrMUxISG1seklBRGhEK3dadnAwTVRFeE9nUlRXTCtkcDJlcjhuM3JncHRnMUw5OFpldFNLSHducEJVSjdOTUEvY1FhNkRqM041aWxQWUV4NXlvZ1RPQk9mSjIraUpnb2xUN1c0UzFDOVpyK3Nuc1hMUy9OdG1DaHJwQ1dsSGFOWGgxL1ZibmhJOUVRVy9KMnh3cXR0dnJ1SnZoeGZhRC9tblVIUndtdUF4R3AxMWZqZ0tUMFYrdElWRExGeVZzVktoWTg0OVZ4VVlweXdxdTJLSll4RWlFSmpaNjRSRGxscEtWYm1sK084bWo3TWJnODdvT213bzBzdXp0NjhlVnR0dWl3ekphbnp0dS9RdXhuaWdadHhoeVVxSGdhK2RQV1ZrUmsyeUhFSS81eHQ1TWQwZXdNanNkZmhXZFZ2OTdYUlVwcEN5M3lYRStBWkNJZlEzQmNwcll1WXNnV2hCRk5UVy8zbmkybmVDdll1UkcvRGh2L2s4aGlJOUU2QXl0eDFhM1RBeE9TemNJV3lJeTI4S0dZRzNIcW5rY3NIaGE0b1NuNWd4ZE00RnZpam1IRkhWdzFFT1RHcTBiNHRwdDlJN3RpakhXejVyRlFobGRBcTlvR3lMc29pQWVNNFMvZUlrcVN5a2FRMjRTZjZhcTRDR29mL2haMGNwckdiKzVTUE9zSGN2VGpHSXhTa0tBMHNLakN4SHNodDg3MXlHbEUwb3pwWXJuWkEzSHY1cklWNVhLTWpZRDRXWHltRUFUM0U1TzRTbDRmU1c4VHFWS0hEU0RnNGhBaWlXRjlOR2RrZkNRNENIVkt4K016WGRKSXQ5azIxQVVMZm5XRDJ3dUV6TUs0OFJ4VWVORnA0cSsyUDRFZ1M4Q0JnNy9UQllwblVQOVdQbXZjcy9EQlI5bGl1Mi9PeGJhM0xFK2MrcGc0VVlkS1RpWEVnSzFLbnZRTEtQOVl5OE5UK29XS2xWRjZoTHhZZWx1YUsxSE5XNkRUaHdKQkdhaXFuNFRXU29CdE9WYzVxWFZNMkFlRjRuS3kzQk5yTG1LZG1yS3BMaUJhSElVRDdKUzFUUTlGWnJFMXF3SFpDSmtrRHdMU2dJZDA5bXhjdDlKR2RPbDNJNVI3VUJSc08yTHRDK3R1dGpKNytnOW90M01FKzFEa3Bid0JIUlBraTQ0UVZPdFB5YmlreHhoVXZacndXWkhvVWNqeWpDZC9CWDNqRU1zYXpKYzEwWVR5QjluQmptN0tPZWRCeVh0c2pSUFlPRTFFdmZ1N25saTJVd2RhaUhNN0dCYmZ4THltd1NOdVdWS0dXZk0wcXo4MG9LLzFrMmdrNkpSdVdQYkJCSXVHUnNZUUhPNGdUU0pPL1kvMnRVQlQ3dDd2Tk9nbiswdjNkZG4yQmxmendLMUFEYVd4eWFRZWM3TXV0VW1pZjFORWlGci9rVk5CaURoZGZxUGwyZTE3NGRrZjAyRm9DV0pvbUJlL1UwRGN1OHByQmZxMVVzV0tGaWZiNXRRZERqdHdrNmZGdW13eHBjeE42czQ2THJmZ2RXaStFejdOOWhVVDMxcDFQQVJjWFhRUTFCZzVta0FsSVE4VVlreTNock1rZERpdGVObW96UVRtZDN3QnZNUmhOODI2dUk1bXM5SFZDbE14djNzTXZkSTYvc0QxY3BxVDlHTlhWTzYyT2FJdzY2aVJ0dThIK3JjdUtocG9yRVRyV0I2ZnBMRFBFQnJZakl2am1RYURGZjArbnArcmxodk9ZQ1BTeCsvQjlOMDdtY21UL09PT3orREJ0YVYzY1o2aTJTc1NRU3NTaWNvaWNtZzIxUHN1bUcvU3NQUG9xWVE2YXVyUFVMTCsvNEhsVjIxSUdUOHlrSzByWE4zRHBHUCsrR3A3OGF1UXpRN0tqNXBzeVFRM1BnT1o2bWgybno2d2lNV0F6UzdYTjU5Rk53aE1ZMzBnQXQ3c0JRRGk2bUJUdHlLejBOU2VacVp5YXBBZytmUVhoZys4cUJZaEJPME5qd3d5LzJCNUlpTkQ0UENlT3BybjZERkM1VzNOdGRhOEpUMkdoSU1UNndUZk9OTEFnbUQvMGxtTTFpblgxaWh6RENwR2hGMUJyT1F2MzQ2ZHJMNGQ1M2l2M3pTOWlEM21Hb0djOEJmR3ZuOHdpZ2JnWFAvT0RMa0htT290dWVZZ21PMWZsZXRVMzJxWGRhWlRsZHY0NDI5K2xLMFl4UFpJZ3UrQWQ3aFFZamo4MFpKeE9DMERDR2lXU1BVbGJtRklrUEowcytmd3hYZk96V3ZzVkkvTU9JaFFiWDFkT2d6L2NlbnM2dnhZbGpJVFdrNXk2VlpvanovZFM5NmlCOVZlUkMrb3VWcFR0M2JYdmdTUFNkY21Ib0JUZ283RnF0VURwTThTdWNoV1JQUCtld240RjdPdFkyRmxtdjNMMmN6TGUxcGdtbEViMXcySjlSQUwwWmdsckpvaGwvQWJxWCtIUkxlT09IUkZ5UVpQbVgyUFQvMExSRWxHeVhwZTFnaWhTTGk4blB5RUJpUk5uUkU1cXFSYjdwUmppTnQyd2E2aGFIdmVDVHV6VkNFaXhsQk5aUFRpaHM3VW1yTGxOdVc2aWZqWS9UMFY4LzVLbCt2RFhjeWxSN2NxSGVESHlDK3UvZW1jT2RER0Q5UENIUnZTTUZ3ejZJcmhBMW10WHhmaVc3UXJMY0RDeVZnWnJ3R0Z3QitPdENuKzlSajRSUkFiR3VydUlvZE5SOWMrc3UvMDRORmNDblBTOGNKaXJub1VtaExGVkd0cC84enplenZnOXlZZ1BrN1pjR2NXNW5WUDFCcE02b2ZBMVEySGkyY0ErYmV0WEpGRWVoN2ZId3dmdlYyclM0dDFwNzBEeGZFUUtFQWY1TnBqRWpSeGZ0d25mQWhUbEpEajlCamRDakFRUDVCV1BNZlVRUk14WWtNNlVXcmV6LzV3TXJ6dm9wTWJVeS9CVDhCaURJZWFoMU1XZTZGZjRwV0lOelU5aGtHRndkYmZMVnpzOE83ZjFua2RFSUZXZUZ6US9RclYrb3pNNkx3QlRIMjc2M0V2N3lmelNablNHaTFKYkIwT2xXWWVoTkJTVDJGOHZhVGxaNzNJVks2dEhEQ1hnajdzOG03UVJTNWhOUlFqY0VJRUh5M013ZzRVTjQ2c2ptdHZsNkYzbkZTNExGUmw0MjNmeUpOcHB1VGE5V1dTR2F3d0ZXQ2doMFJ0WVg0aWg0ZGZXUFpZeEVpaEpWTFpUSGQxWGJ3L1dWYy9XZTc3S0hyNno2K3RZTjllanY3TkJuOWVobjIyb24zYWR2dTBmSDc5SGhRbmp5QnpFYWMvRTlxZkFJRldpR3UxQ0RwNldreVdvRHlFRWlZNzRhVis1d1BZVm9lR2hWY05STUlKOStrWkxNdTQ2bCtEbnFnT085Qjk2Unh3Zng1UlVQRzVUbjNnb002Vng4YXF6SzRGVjdHSklsaEhPSDkrbWlTbEZBODFxNzl0SVhjVXM5Yk9scXdlWUV1R0owMkt6NVUwTTlRbXlvRDZDM3AxZGFIKzlQWXNUODhIZ3JnSTFvVGIvNmtJTk1MZzMxV3VMS0gvcHhmVlJ6YzdtRmdyYU9HM0lNNk9ScVhIMVJhdGlHZU5oK0ZYNWNhbElzdnJQQjdQNS92K0NTcHdDc011RjVsUkpLcVpkSXQwdHFzZHVKcHlOMDBFV2gyN3dwT3BEUDdWOWZYNlkrODI2VVZPY1BSdi9SQlRCZnYzWFQ2a3FGMlQ3ODVhempjYitlMUVMV2ZuVlZiYkNwQnJSYkJseXo2dFJibTVCaVNkYkhYZ3JPUW1kei9RbXJ2cVNGTGN5N2RZTkpSQ3FxWnBnQXkzNnMvbVBReFZIN05WVEJ0eVZIcDloeTdmMEh4ZCtMc2ZYeHE5S1AwcmR3RU9xVVR3YjNzSUhYdlBHQnNBbzI3aEFKWFZYR0ZiTmZqRzVEY0JwV051NDFZVy9wb21CWkQzdUY0UzVoeXNoWEN5bkhjK29sL3FoL3ZxNFYvMXpFdnV5UjUrc2JoUXliczRMZkl3V24zb1hESWMzUHVlbHZhQ2Y1a1lyMklkMVJiQU9zMmM5aEozSHNsNjArS3pZaVNDcVgzLzFwNHJGMmhVT1dNbXl0ZHpPNHdOZ2hrV1lsdFlDU0sxL29YOXgyS3ZMSmZOeVVGZjQ5dXhPOWl0ekFJTTR2ZzlBS3ovejlWemk4dFlCRnNiY0grUitRcHRCMlQzOC9OTWVhTHB0UG5uOFU3VVZnYWRmc056MnJpa09IT2ltZWFkNndpUm9KV2dIY3pPQ29tbC9DeTRaci9NTmdQR290MVpuSGJNWi82QjFEeE5ULzU2dWpoNjZHLzFnT0lrT0FVcGsvYTRvNUpDckpXNm9UWE53L1VwR1BaV0ZtRy96dVVXck9IUEEwczJVNkJDNE9rWlo5TFhqUEJic045S1ozNml6S1VBVXVhOUdESU9aeXN6eStYV2JJZCtrZmtWeDVLdk5lNjFBN1dtVWdJQVZwVUoxeElPc1M5aVUyeWRnQUdMeDNCcCtaMXlFNldsOVBlQ2QzdDRmSnJmVXhlNElKRzFJNHN0a0JVd2loZGZibk0wMyt3NmMrbTZaTFF4VEFhakYzQXZsSTZLdGNnR1RrclVYSXBXNkpKdXVrTHQxM2tZekE2L21IWUN1UGNaU2ZLcC96YW0vZDNsaUc2YVFkWFJUdUJjSjFQQTc2ZHpTaHdyeno4aTBmdEk0cjRDSkZBOXZGcHNWeWN0Ulh4ODNZalh2VlNiRnpQb2VTSFA0aUdZYnhuQVlXM0lQb3ptb3M4U2h6N3h2QXZTaXdVNjArYWl0WXp3MHVTV1Zaem15YWNhM3R0VlZLSkFsWXMxUjJEMUY1NnlHZ1AvVnJ2M3p0UGQzcjZSRWhNalNvZzZSbWFrTmZsTUpFbmw2ODlzZUMwbE5NcVFkRlZaNXlNdFc5TjlBTThmcWJJL0U2cm4yMGw3L21NaXFiZG9uMXpOK1o1WEh0blhmWnIrRDF2d2NWS3ROaUVsRjI2Z1c0RXovb0tTTVdjWGI2dlcrekp0aUpkZXdKVStnRHJybXRVYjYvSTNZQ0l0czEvbE9rTG1icWpiS1g0Ynd1MVdkMVlZb1hiMWV5M0poVDNOUUYzRm4zNW5rOVkvQnQ4Z3MwajdYVGIxZ3NHVStUT2dEK1ZWcGRCWlJSak1iN3BjT290S2dYdXFMenZZc0NIUkNPN21oc0o4YkZnd21TY1R4MGY1eHEyVEdYZStTTFhvbmZXdkxGOTRjMFhWaEpNUFhLdWZEaEZtWVFkbHU0WWJqYWpaMG1HTTJ0QlhGbU1VcGpLL1pQUS96MmVlZ3l0REFtd1NpSXpaY1FnYm16Mk9hTnJrem10QzB0ZlA2NFA1aTgrdHZtcmRyVVdiVmx3ZHhUMm9qL3E4YXk4YStKcjJsN0RuYmw2TnROUHV2WDFuS1JyNzR4bG1PeWdhVE8rWERMMHlHdVF2T280aTZhdHR2aE03QjdadmN4WEhzKzhWMk1QQ205S3NVRHZjamgyQUR3TG9LQTRYSkpsZWp4cGIvOU8vM1F1dmZTSzhraTRrVVplSGduVFNOTzlmejVocG4vMzAxU0JndzVGc2NNWmhuQkE3SzRTRENuQ2N4WGlNM09XbWJkWVJRWWR1YndCUStRVTVtTmM0UTlMNXZ6SmhBQ25sa055R2k5Q1cxcm9veFhtZS9WRXpFYWxmM3R4NnJpVjlHdy9iVWtoc1VLeDFEMnBNNTNwS1RKYVdzYWRicUhTVHhVc2R0UFBIQVpyUXpKckdNdjVrZEJVeGd1RlpZV0Y3V3NWaXVvaXc1U3duQW9sanRpL0xQRmxoYk1pd1ZxTXFtaG5aMXBzeXNUQUw1SjdvTk1JdlpsUnFULzIvVndreDAxR3loTGFBWUs2eFhsb1E5eHQ1MnRmYy95UWZyYnFkK1BOZHBGQlFOYlFvclA0VXltRVg4VndCWC82U0hVVC9lemhkQUZYQ0RZSEhNazVpY0ZYcjFCL21nZ3NtQzJlTjlVTEhXNFYyWHlFb0pRUmc5c1Fyb1RxcnE5TE0vV3IvVHMvUVR6VmdaTU9YYU4zSFhkcTZzcCs1VndCd0s4RHhLZ0YraHRBQWJyYzltOWxRQTNtbXdhbldMY1ovVzdsV0h1WkxiUkFlQlNGekdJSTBORWNhSVpWU3lCU3JZOGVLbUxkY2d4L0lwMUk1UStRb01LejcwRWM4UENWQ1FzVUhLUVh2UHVFSkNxeG04VGQ2RGFaUW82TnFObzNiSURlVlFtREJPOXJKQjBQWkFXV2ZTb21SZXVyanJ6dUx2ZjdOTm5vZWgwd21wQktFT0lXeUVQNzBNb3V2MVRpMDhOUk10Q2ZEQ2xpSWpDOUVhMWR5L2ZFZEJwQVhGQ0FxNnl5U0hTUUcwenRFd3NpZjZsdFJiNkgyKzRyWTdyUjhkT01EWWRsdFdDdWd4aHdGQVJLb211RlZzSVQyUW10aytmYWhpU05tZTl5S0NOeVhwdkUvUDZ4ZWVKRm5nU3FuVDhQd3B4eVNqTXorWU5kTFA5b09rM3ZHWkxzUjg3NEpaNEU4dzN2QW1pZTZsczFaL1FqY3NISnZIWlU4Tjg4ZEJBdSs1NnpRZ0hKcDhmT2Z3U0l4dkpGVEFhdkxLeHZHMkE1WEJJdlZsWUtIUlhINm9UYXhtZ1NXM2xOZUdHMmlaanJOM0R5NXlSNFd3UGJTYXJ0ZzBLam9ZZmF1RFVYQlZuVHJRNDdPUjB5ejRjMVh2MEVkcFVBa3phZE9Tc3NnT3ZacERwSXZ5Q3ZyN1hZeWJYTDV3eW42MXRxVitKamt6UmVHR3g4VS9LYWtHcWo1Wi9MdVk2SXpPTUNSbmlwSXdiU1drSXZPNnc0NExURDkxeHlRQnRIbGkzaXo0QUxSR1BhbXVzUWtxdHZTVkdaNjZwNUNxRTNtcERwb1d0YlNyZTB2eUFjVmhBbkt4T3FrdWxJSzJianBrakxYUFdlMUJrck5kVzVVMmFoODJYRWtaWjB3VTA4ZCtuZEt4aGM2U1lEenB0MTU0ZlFJRjBsUm1zRE9tZzF4bjVKMHVYRVliTmw0cHBHemtycUZ4OVNDTElDSUZ4SFFxdHFiekdwNGNmUktnOW1kMEVrRjVTVDVRK3Fld0IyN1JjZkpFWXVKckJZSVhObFNsd3VZemFneHYwVGxHUVlVTy9LSWVXc1dZRUxIMExha0EzRFRESjh4MDNpdnk1NEJRNTIzR0FUMndrWUVUMWhOVzdVU2RLT2NOckc5dWRxL0NvVjRNZEF5R2tRRmpsVW1wdUs4ZThwaEoybGtrNFkwNGg3dHN4OHJGYjVKOU1PU0RwZGF3WVZ0UGtKOWphQ1hDbUJMaEdKYll2NGFxVkRpVlNRR08rVDN2QUlVL0VxSWxEa1VrVzhkenM0T2xvbWh3cVZ3WUJJN29XWnhpYzBOcUgxSWMrckJEYm9yWnA5S0hZZHQrcjU5cWpwU2JvTnNET21RTzZRYzNYVXNwYXBYTWJHWHh3M2hzY0hTYzFDbmV5Rm5xekpKaXRwWkZReFFTNVFPdGg0YVU5QmE5cXRYM2t2UkVySEFhamRMSUV4emF2bTJJM2t2MDJTb1U4VTBLV1hBUkJWVWtKa0xrT2djelI1QjR5ams0SGZpN2RZY1djNUd5N0JDeHpJOXBjaDNUcExYUmRuVEVDUWphMG1lUnZjSFYzdVN5MDFsR2U5a1E3d0dGdDdyZjVpNHIzWldrS2NBOE1xMmZac3JnODRqYjBQWXhDdVh2aGx2Ky9wcUFiTzdNT3l5R21nSk5WYWppMkh0czR0OFBxb0Z3OHhNd1llRS84MHRrcmdQWTJndWdTemYrVVZxYVZlMzg0bVBPRFk0TE9PL1hwalNXWGF5MHNsK055WjV4M1oxVHdudU5pL3VOb1oxVkVpUVNyM3BzZCtSdDZmTjRFaXQwb3Jkc0E5UlpPbnpSUm4vTks1aEZ2ODFBZzBGN2J3ZnBuYUEwT1N1bTJuVy9PMmVyMGFMSDlpcmRzWGU1QU5lVmp4Q1llZzdyUE9MUm4yYStveDg2YmdRQ0dOVkZtRmxIbWxrNkcyUnhYYmU3eUFhNUd4eE1VK3lBUEJURmtEcEdyS3ZuanlRVy9vZVZTMHlZZUtlVHNubmRQc3ptUE5RamliNFJxbWlHbXZ0R3hLbW9DUmM4MTZpRnlJRVA5Q2ZUUTcwdjdJUEM2d1dnTk9LVG82a1gzTk92ZXpON0ZwdjhzTk1OR3JMZTAvZDR5bW83WjVjSy9QMlh5M1BIcFVqREp4NGZMdnU0S214bmNEeVdwL3pUTFhJRzF3ZnY5bXFMZ0JHYUJ2SVpxM29Jd0VMRjJZMDgyMkdjRmwwcDVzb1NvbElYcGFPUUlWSGRWcS9aKzNhbmdjTnprQW85bzBGVVRtRnp2WktidFU3bkZSbklSUWM3SUlLUWZ3S3oxL3psekNKbHhSSEVOS011Q1JmNjZyQWVpRzBYNmpXSG5kTVFzWEtFb1o2YkdpWGpsS3Z4OXdQSWk5eU1MNklNZ0ZGcDdDZHQwTjRiUi84NUg2dXdCME9wYzFZaS9PemZ3a05GRUN6QlpaaHJUNWFnaVJ3cUFkeTMzcUovdnFuNGtxaEJja3FHSU1KcDQwUGVIM1E1RUxjN3ZuK3BTTzQrd2RnWmE4U0F4ZHdqMnBaOHZTeUQ2bE0wUXZKNng1dFoxcGE0SCtlT0tTUUF3T3BnRHRhWld2WkVzQnYrTmlkRm5jOFFJQlZkcGtqVS9Md1BkMHBlQmkvRDJYeStrUHJqUEJpa2FBQm5LRzhKNHdMR21YWjdSTHpJL3MvVmgySkVwQmwxTnBzb3cvelIzTEpzWW8xRXgvNHBuc0hnSHVCSEp4YzVyZmNGdWhWaTZwZXFKTEtWMG1YZkdYRnZOTENSSERYRDVXM29XT1F2dys5YjFkMGdjNnova1NyZlV6dG5uSTNTV0ZnRFFyU0tzMVdGR1ViQ245NmVYQmlpS3pqTjhGdmFqbXgvcDAzNjZrY0lYczZ4a205Q3I0VklnQTdHTXNsK3NhVHo4L3kyWUhxNTRha0d1TllWakZlY2dUUE16WG10aXlkUm1QY3hZOWpiWmVORFFJTitjUkJRb1pqR09UZ2hZMDlSRGZ0elo3bklmbkU5UTZ5RzJ1TXRkU3FLNVZySEdMZk9PZDJpSFFIRGxLR3N2UnVuc1c4S3hZd2FiZjlSdVkxZE1FQWdXUmp5OFVheC9pV3ZFaU9waWtXRnIrTGZZZ1IwbXBXRFpocndTeU1EVlNWQ0w1NGpNSjVXTFVieXVOandublU2U0p2VGJjYUpVR21ReSthT05lbG9pcmkrUHVoaG1GTUFaU1VZaHE3L1o1alIxZDdUZ2hvdTRDbHhuTStRQUZ1Y2ZvMnBBRFlDVU4zSXhGZ0k4a1BDTVdacFNKYVRiSTQ5Z3pDTTJ1Q3p4cHBjcUxkVzkzOEFKNlNuWWR0UUFkUGVST1YzaUtBRFpKTTl6NmF2cGhJNUZCZlhFNFVpcDZuelVyMkpXaFp5cXEvUE8zNWFxclNob0MzUGVIQzJpZnVNQlFBU0pqdjRnVzhjRS9udnRVdGVRSjg4ek5IMGtNNllpeDhHdUZ3RXA5ZmdZRE9vK01RREJRVGFKSTlNei9XRnZmOFlGLzVHNEgvQnhqQmxFOUZGRXNQTHVodyswbUFLREJPV2ZqZFJPWVN4OEJLMzdRWDZJVCtCTEZJTnJCaDhrcHJBTktXTDBUMEJpWjRYcHRILzA0S1E4U0xiRXY3THJFZm0vWjVvaks3VE1wU3FKeG5xeWcvclkwRERhbjhBbXFZWTVqcmphcjRvWG5MWUZ5V2p3bkZORk5PTjFuOEpXQk00emk0L2ptTy9zZ2dKWmJmRlVSV3lOQXU1ZGExWEdPZ1NIV0pROWIxek5vR25TNlN3b3dOcVl3NC9Kc3Y4RmMrK3A4eHR4VitvSzVVd1VPWkFFa3ZCZ0tXallhTlBxckQ1Tzc2cnlCZ0c5aXFxT25HWTJwL3ErM1pEN1ovQi9ZbFY2VFY0dmtTN04yRTI3WndNQkF4cFZFZllMNy8wclBhbEdCRFd0Qk1YbFFJMWtuWHNvSEtFOGQycmg0U0N4RXI5MTJVT1V1bGRnbXNxVnh6R3JHOW4ranhGcER0c2JOSXNoQmEvalZhaTk2eG1nRWZ6QTRHMkk1OUZHRUl0N2pUTmZXOElaRWRydlhFenBEQ2FkQ0lMSzdERGFGb0pOdytVNlo4VjMvVk1rUklzUWZXcU9qR2I5U0J0L1BFcy9qQTYvVmhGM2xPQjlUbG5raGl0K0l4UXd6TitBOTkraHF6eHFPK01NOFhZU21VR1ljdDBCbGozcmRZTnNmRE01THp5cnFCeWlyU0hpSHl2U2FpamhQQjVWTVovS0cyeWVkR01OUExLbVk1UThVV29wdjZXZ1NFNm5VT1JJeFZMMDJPZUo5Q1RVcDVybWtwVWJVbHJ5elBrZlY1WnZTV25WOGh0MU1ERnFWR3lNU1R3WjNTWWY5YXdEWXBGVHpOOUlYMUhCUFJRM04xV3lXK0tNNlhsMDB5aWxNWGVCUUxDVU83RHdUc2NiNXNyM2xRYWtudXg3YUhkbEhWQVVxd0dYVVRLdXJuTGdVSk40aDlPSVdOcEVCYy9CVHVqS3FtUWpsMTl5R0hpZXl1eWdhYXJ1TDlJaUM5QUlOeXVRempDK0VESkJ6RVA0ODAzTzZ3WjMrUm0vbWY1V1crNWw2RWVvL0huY24xSG5hUzRQY2t0aTkwSjdyVGVSSldPbWxZVnNwdjhUVnlEMkRzai9IZ1crWkFhaFRGQVNLanBZS3NjQVBMd21BUmNMVWQvUExnR0FRRFl5YkVac1IxdDE5QnprTGJZV3pRUkEzNDUxaUoyWnE5TG9pZkRBdHFQazc0SzdCdGhDVDJyZzFMWS85Yzh0SjZaRmt5UnQwNWdmdFkxWU1KVks2Mjh4RUxxR2k1TWFYcHJnMVFGTHlSaWpSUnF2cEJtSk5GSkpEWEpmU2pmVHYrNmhzTGcvN0RZM3gzM1RxNFUvMXBMS2NpdEx5eWdlakh1THo5eTZ3YkdKNUkxMFk4REF6WDNtYzBXYStsLzdtNUtTaXZaZzI0eDEzQndRS0JIdFU5NnFoeDg5TjBSSjdScWkzT0g3MnVqc01qUXB5Qi91Q3dmVGk0TlNUNFdzS3NrVHI1TVhvZXZRcXM4NGdIdm9aUDdUVmdxN0EzVG1BVVdaSWVrVGNPWHpYdXEwb2NQaGs4Y3FsZWZRV1dkS01KZkZ3K1Y3bmxtVm1LbVI4aEExR2o5bWFSVFdPTkVyZyt1b0tONVRzUUR6WkdkSGg3cXIzNEFUenlBbzZtNHZieUdMTks4WGtFZkdKY09ScVNwZ1R4WHloTGxKQVNHZ2EzNzVLVFZEVnBWekQxUm9OazZEaGZwbFNtZlZob3M3aEJVYVQ1MjZEaW1odjNhLzVzRzBJUExNRDNTVTYzTzNFT0xEa1BrQWtoWk94VFFxQUt2bS9NVDA2ZzIzQTBnRTlpT1o1bzlMUkRrUmkrSkJIMzdhVmFoTFNBajdWVVA4NjNLaTJsVC9xbVE5bzF6K0JRRjZNWEg2em96QW1UU0QwYkJVYktoNWxEaThJR3dBd1RDUWluVm9ZOTlxOEdTcG5oUnI4QkFZaElwRkk2MjhrMHRGV28zMGREZVBFZjR0bERqelg1TVhHNyt4blJ6ZGRYU3hMd3JXRmErYlplZnozUEE4RzNJUFFMdDl5RXNNMjRkNktwdVk1WWFUSDBuU2JrZnVjZjdTeDBzMzBuKzlxK2hKK0ZqM2NWRDRWOWRGNDM5UW1wR3lXTVhrTi90YlY0ckdIelZpKzF2Q0NuK0h6dzcxbGM3ZUZFWTdSbDhMMVVZRDdmTVg4MGFlYUwyakl2L1pnaUNGMW5NRmMzRm9IbzlEQTFkOW9jY0txazdHZUtRbnhMMHgrSU5HandnUlgwSlA5R1IxbG1oaUV4RDhqdXZoREVtU3EyRFBlVXliMnkySXhpWWQxZWhIV0hCQlczWUpXQ0lwbXFNYXExQlFoQktBRmkwaFExY2YwSnRaRWp6amFyY0lwL0hYb0NaM3BVaGg4ejI1czhWVkNaT3N5RmpZemJycFpHMkdrb1Z4R1NuTVYvSXhIb1ZFV2xST2xHNll4VTArVy8zYTdyMFlpOHVtbGVJZXBITXR4VDA3b1RlS01GUEZsM0hSUWUyN2I1YmhYWElNN2I5ZkJWQXVYRGQ5WTdDVHlPV2hJYm5kSGtBU0FUOVBlRWU5aVZoYTl1MzFKOXFsU245Yit4MDlUNWk5a3JoOGluWWROdHFUcmQ5KzJ6MG9nNis3c204dTUvQmpLSTVob2hpeVhWMyttTFNuTWl4RmhmaE9abXBSaGVMVG1zeDl1U0RXV252QW56ZUtLR1BXeUJYb2tZVzd6ZU9CUjZneHZhcVN6akNpVC9VOUN6RTE0WjhrczZQWW5ocVVyQ1RhS0FtbEVlMEkvZ2o0cHUwY2d6dE9sZmRubGZ1WXlsWUJHaVlUK2dKc0ZQUWQ2ZUcwSGFYY1lyNVFlU0tjNGhoRmNEMzI0WXkrdDVoQjg4UVROREFSb1NNck5pUGJVRmpsclVPMllXTkpaYTJvR2FSczdYUVpQK0xkaDhmVVQ0cVNKQmVtR1lpVEdHck1vS2lUaXNheFJ3a0VyMmxaTlE0QXdrdFF6bXI0c1NhTWk2KzJZUXN1T21tY1EvdnlOQXlaOUxLQ1NjYXBUUkcwRzRiZGlobXF6N09vdm9xc0FGRFFJSTgzL0JwVHhsWWprRmNZZHhSWTBtdVI2NFMzQTZDandrRC8xeUU0Y21nZG5vNDV2dnR3Q2ROeC9OeG1jZmNWYmkvNTVCTVRzS3VLejExT1UrZ0RQL25yZWx2b0tMT0IzZGZxOWNSdFhSdXlVbmZpcEhNbVJQbi9KOVIvSlQvSDlhS3NuMzhWMmFzVmlaaEExS3VHNzg5N1I4bElhVGtLait4eGhrL0I3eTZ1dGFWS3EzNFA3ZnlidHFQWkhRbkVjUzFldnJkbXlUREp5Qmc1YXZ0dksvdjNHN3NSMUR5Um44VERTTTREUVIwdGpFbW5OWmxtVUFvSkNrbDBXd1h1azVzcnlBZ3Rxb1B2TFZTdkIwUFh0WVA0aHRmbUtSQWpjZU43T1NScXYzR0Uxa3VTdkN2TzJVdmQyWW0rZVBVQm9LY0Mva3psdlVNNHQreFd1NW5kVHIzWUZFb1NkeENjdFhZR1BMQUgvR3dZNFJ4U3QvUDhsb0UwRkJyZG5tOGlaZ1lzOTJLRGptbmd5SjNwd1RtR1pqaEhXVGVOWTNZNlhzaUhxMm4xSFZuN0RVdFRxQ3U0dDdlOXRXSGl2K0V4ZmVDZmtHRDFvZ1NTKzRiL25Lek9uVWtmNkorbkhGUENFT1V1OWxndWZzUjJNQjZvN1orUlZ4bjI3Wjc3cE9uQzVXdkJ1eWZNUFhNQlVSSnBPakg5cjZRR0VqaEhkTWg5OXNuSk1WdzRkc2ZQN3FybVFSRGVOQ1BVS3dNZkFRa1RJdFhveGR2MWt1TGJCVW1QalR6NTByQjFrYVJLRkR6R1Y5TE5sdjNRVzZNUE9GbnlKSkNGQkpVVDhTNE9rQlE4SGVjdkgycjB2YXpSclJKanBjcVZCRnZ5enFkRVRTVFVGZkRuWHorZWVIY3pSTzg0dmdTQVNTa2h4NDN5Tm84bDAyWXZzdkhjNFZjSzZERmE4dmNpVWVTUzcxa1dzR2tVYm5Vd3VnT1c4QzdpVXJOR2tiZldDK0RKdVJLY2QwQkZGVzVMblNzYmU1TERZOW5oclhtMlEwbHQ5WWgzaVpqbkUyVHRYU0p4S3BtQVAvVXZOcXNwSXErUmYwaFduTHBFZXVqczkyWStlVlFrNC90ZlY4WlprYzdESGdONTRYWkZDaXl4OGNUYlZib2p0UU9kRE5kZUVKeUhkM3hZa0laZmhCU0dVczgwYm1nWUV2NW9uL3pDc01WMnp2WUFWLzJlWkk2V2FmUkRoWEJrNWVjdlNBVVB6alhxRGRmMWJrWjRxblpaNUpWVGFIRGZEa0tOM3FWb3R5YnNIdFZIQXo5aUVvSUlCQUVaeEJtZmEzOFpLaWliL1Z3aTNJSjdpckxpWXV0bllNNnQrazBFU09CbWR4ZldPOW1DNHNVT0huK1FmTnlvTXRIeTBaYW02NkFOR3NsU1JoNGsrbzkyWjF1WUxwM0U0UjVRK3ZtbWtjYjhvb08vS1NaaWVTZUZIYXZ6UmVHa3h1K2hwNm5LZ0hCZnc2T0ljVkJvM0ZSUzdYSmlGQVY3dTR1WURWY2VSYzVsb1Z0c0lBRDNIalBJd3p5QVcwMjVBemhWSXlOUlRPamJxQ3VsTWZkOWRSR1I4TDd6NXpLSVdtYVhlZlNjTjNlWEpBZ1JmWnR6MmcwTTVaQVBZVllEYTBPVDEwK09HK0pPZHRsWDNjMFVvNVBGUkNhcytOTTYzUTVubzFFS3JLRlcvN0FyUWRSRW9zUGRrVjQwK21XZkRFZytWUnlxSzVSV3NMalZIWm9OTmJ4dEFOR2RDSzJ3MVR5YXcwMTF4eWhFc2o5SHZRaE8zYTRWNEdiMkZoaHYybkhCd0FiVmRVV1cyNWhNS2kzUXdRdFpUNFVZWG1aYlhWN2tJN0VkRnIvM3V4YnExZ1BvV3J3S095eTBEVUh5djUyeVhHdzRlc0dqQ2RBY2ZuM1kwTVgyTHoxaklzUlJZZ21SRlVHSXdUa2Yrd1lsamRFeDBqSlIwUStVV092Nkp6bGFxdEZyeG9xOEVJZE1lT29neWpCdmphckhOYWtkQnZtUUZwY2xRdjM1ZTI4OE42anV3WitEalNOeWFid2tqcncyVlNRN3lod3ppL3FtSjh0dkMvem4yY0Z2a29WU2huY0pZUkJlczNnNnB2NndUSnNZY25BTGYyNFkvN0FjSHNmMUFrcEM4c3VxRG5hbC9oeEFJR1hXTWNUMnFpZUdmNm4ybnd6MG1hd283OXNUSDRyUjFKaVdBblpWVyt2Q0pxcDIwYy9Fc25Hd2hlSWZJRUJqNjN0U1dQWWNsTE5RSEZpM213RFZMSWlYWVdXSTVJQU1aRHVVNmpTaURtQUwzTTFmeWh3R0QxMzhQZktoOUw5R2xmSlZlV3pzbGxWS0c0MUpUWktCb0d6UnpCV2t6NTVUcnZFcUNURzFVR3pvY1hKV1VteDg2MGlXVE1tZjR2Wjd4VHBrZFdpT25DOWU3Rm9uYkVFTTZDSDV2THZSV1lpdFcwWWRRdG1NM3hvZEpnUlY5QU5vbzN6azEvMHlzUlFTVGtvMHFEWWZuUTNIS1NvekIwQUtXTVQ3SU5wUW1OZytqbUw1Z0R3c1J4cGxvdkRjYzFxcjVJdSt1QWFTdTh3VktHYTlpOTZhZGNsellpN2ZibzJhbzFwd0pDK3V2UXFyNnRUcExNdS9hcEp0VmpDOTljRjAzckl1Umd3VmMvemhjK0hFcHlqZUtMME5wbEVVbkJud0NPbkRZMUVGVWVlNk5YamtIb1FsN0FLT1oyT1ZqVkd5TlpwOHJxVG9Cb3J0b2tobmgyZDF2M1g4OUNyR1J2TXdsUkVDTWxqeTR0Skh6V25jN0pkYWVxaHJqOE9oQUduRVJYLzhGc0Q5YWZXRjdHSDV4M3hMSkZTUHdlU2NVYTVPdFBWY1B2WDdoN1NGZG5QTGpUMnNpRURMa2ZzaXlvZVZsQWJEdFdEcS80VnVES0RZNWVHSmsxQ1NRcDUyRXRSeDcrM3VaZHF5ak9yQ1dzZzVYMXFEb3hTUE9vK2tkYTRxZHVnZlFUcWZtWWErQ3U0TUxpL013LzBPYkZvWTFpN0NwU1IwSWVXcEFvWldUUDAxK1dJQzVNSHN6ZHBnNGRsOU9nbHNkWWsyemlRTTVqc1FSY2c1dk5NOFZGUW9FMFBMMWNSeU9IQ1NlTThzT2g1UEx1d0wxTzkwMFhGNi9LdjFNMDM0RTdIZ0hQZWdpSmdLMHMzTFo2bVE0bU05a0lhTWloK0lWZWs5RUo0L3gzaGoyWnp1U0E1Y2w4M1JwQ3F0SXpnK281T1FnUVpORFNRVFBUeVZDS0UwVnA1ckt2UFhtTENYajBpbFFhWklBcVhXY2c5YldhclExVk9XUDBpRnZqTkZqeUJVQm5penVnTVhWMUIxbmtHOWhhUWg0enhXMlVOU1did2p4cXIvUnVyMlBTd3QvcWlycXlXZTNxbTM2VGJVTjhYZUl0MUUrWFRHc3NmZ2laZm9FT3BydFo3dlZsTG45dVJiTGNuNklWT2dLc1BSSGNicGMvejRGcG9sVUlsNURGaXVsVXFWSkFLNkw2K0sweVBIUzZxbkNrcWRQZ0ZON2VJSDdaUmdWaDljcmZlczBBTUNPOGJsZ0FwbEV6SkVXNXgwbXlMbFQ4c3ZXNW5VYVVsM1NFVU5iZytndmN5ZTNXSEQrcGtReHRJOS9HQVdRYk16a1pWeStCTis1UkNtRld3QjBNRDZEdHNZVHRXVVN1UjNFMmJvSCs3blkyY1RsZlNYTUFZVE5OWjFIVEZIRmNwbkJsSHo4K09CNkl2amhDcERPUlhDUHpoNVZoUEtmQytEa0NVcFVtY2sycWRlVjNrR3lGaVR5dmhNbjFmdVd3cDNEVW4yZXlDZll2MDVTYUhSRXk5MmpNWVc0Ylo5MDZjWlFHVkFCMU1sNGErZGdEMTFXWThUWElaUkhEaHl5OFhSdUJhUDNzY2hSL3hxR3hEbFZWbHlIbmhsdnRJd0h3aUpNZ0MwZVVudy9ZbStFdVpSbUZvNGFiUGdkVEswR1QycXlodmlHT3RxbHF2NlJCRUE1dnJDYkRBbFBHNkxpWHNhUmQwQWlqMmt5VUM5UjI3YkVsZCtweHFVVUd5NlZUSEVzeE85QzU0blhtSHM5Z0xKbkxINWpIdTZ6a0NRVnppcGF5NVpzbHVTbWR6K0xWdnJQemUwOFp6Rmw1UWZEZ0xQVHdtMWFWQTVhWkdVQnJBMzVkaG9UZUtxZlpraU14elBaa1FXQ0piSFdIQ09ZNGF3NmJNdC90UUdSOWxnVUhVVThVbUt2aTlUYkVobEY3WTY0K0J6ZGFkV3M1ZVFJTlNxMFRyNC9GWkt6bzhVb1Qydk5oYUdhV3J2bGpmQ2NjZVR4MXZIVkw4NER6ZE8zc0poRnp5c0ZuY0V0SHo0cmY3RVNaUThyWGZIVUJyWmcxcjcybDJ4VU1QUTJsWkJTU0lWVTg2ZG9DNUpFYVNNeXNrSi9BK3B5VUlHQW9FYks2M0lHTHlpUlFvS3crUzFhZzA2K3Y1V2VJbUNlTzZPdlFvMFpwbHpRMFlUdVhqN29NQUxyaGRxV1NQRXI2bUg1WlVuZWszYWJMWXN2S3BleDMrcTExTHJHSjBSQWltQkRJZEVEdHprWGJnUEY0bktOazlnQXhGcXlqa0hsc0w2YkpNbUpudXpMY29BN3hOQVppUjRra2VpdjkvRkpZNG9HUG1acGtZaW1jSld4cmpIQmxhTXQ0TkxaQU10NEI2N0l2bnJ3bWM3akRqcFhHbzQwWnZ5eHVZTUV4ZHQralBqcFhpbWUydGE4YkNTaTFvUHpsZlloZmFHbjR5TkFwUENVc1NnMkxZaldHblUza0V1cS9TUURobWVDQWxlNHZiT24rY0RVU1lJdFVnSmVNamxrMm1YcmF3WDd1Y1VUYlBzOUlrbU9YZGVUWFNGU21EZ0REMnFoTmdGUFFlNldYUTZaYjJwYTlJdzVpQ0g2V2grMDhNVW0yb3RmSVlidVpGUHVzZkdTMzg4UVhOUTJGL3JCdlM3Sm4zYk1uUlprVWFFc01PL1VFMWRqbHNFMmFnaXJ0dDJaSXZBeHJkakpOMlYza3BML05Bb3NDOG1zdDVxUmtCaHdVN0xXWU9EQzh3aStMNm1uUThpOG50c2RpY21Ya2NVTWI0TUR4SjFQMGtVRGdUVGFWeldsR1NzYk9YenBNbWJ4SVhlZjNyVjI4dHprU28xTUVLY0ZqN25BNXQvWjhvK2tWRFV0L2ZqRTVjNjNhUi9RZWNva0IzVkFWeUdpWndKTGFCVjdhTngrYjZ5bmVtL2NjK05IMG1wejExQThGbUcrRld2VUhQdktFdSt5a0RlcEZtM3ZrSE16OS9UR2dNcVlwNWgzV21wUGF6MzdqV281RFkzbUZUckM3SzU5QnJHYm4yWnBaTi9kLzBnMGR3UmgvMkp5R0Z2K3JjZldEOTVCd0J4NFlnN0hma0dXZHo4bUZVdDZ2K25tWUJoZVRyY3VKZVI4dVh6NTJQVWh2YVlOSi9BekU4cUdWeThoK2lWY0ZTc0hReE9Zb040VzlpT09mdkIxdmR1RWg3MnJoK3o0d3BEN2xleWl6RWVWS3JKMnRYdXA1aktvUnRZMzEzVndpaWZ1WEsyL2hYNnBsTjBKM2tuUm1Ic3AxRmpKZGoraURKTlQ5K0lORHN4ZjJpdjdoN1JJUGYxdWFBMWl5SFo1OGkxSmdSamQwWm1vRUI1L0RkaGtVSjU0dGJCejlDS3E2Uis0QytoNzgrdmlRcDhta1NnVU1zdWlVVnVqU3NpeGR6UkIzVXE2WlVUT1NmTmtaZElUWUFvNlZDWDFTeDg3aGxNdURJWWcvVVpqYWI5RGFGa1pIeVNsMzMwN2RXeTVPSWdMdmI1cm1pWWs4cTF3d0N0SWRGY1dza0VpNE1DT2dCam5mZFhwOXFvTjBvSktQQlVETHJrYjZ1bFVidm9xVXlNWmRnZVRhYUpMbXhiMllFNFZnMTdvYzVuZE54LzBpV0l2MS9RMElVa3UrZGtGRUh0b0c0YkpxWVhKNG95SjR2SnMrOUkwQm42SDlLdEpGSGFHWVdOZFRsdDRMcG1UcWs4RzhtS1BsaERUeE91cmkxcHNrZzZ6SjhDZVdFNmNjMVFWMlRTODBsMHBUWXNEVlU3U0t4MUdPb0dqdE1WYldiZ0RSWmd6Q1VOMkdja3lnZzFIZGUrb3MrNXJrOUN1dVJqU1BVMFYrbkZ0UG5wQ2MyeGRDVis3NEhOZHlpdnJTektDSTVqeDNPQ1E5dnpsSjVQOFBTWTlibk8zWUtPdFlNbGRMTmpUaUxHU0ljWElKckNZL0Z3T3B6VlRWeFFTbjBybllkYUExNkMvOXlYVXYvOEdoZmtMbVZmOVpITWF3WEVYeTNFTWdKUEsxUnhJYThLeUdIdzJwenI1c0ZwUzFDNm9hM3BnQ1F6WVcxbE5lNXJLWWhLSnBSdVk3TVA4OVV3WEFBK25TNWF2ZEFZTkREK2x6RkFIb2lOV0g1aDNrNnpaK29NVWZsenlTYk93UkNOUkRKVzVrNnp5V0pUU0RVK0NHQ3hBa3ZpMjJnZjFSc0NmbEM4cWVoWHV5MEpqZGRhRjRrYktoRzhxdnEvZ09HYXhJUUpYbnJ1QTNSVXNZU05sM09XWktRVzEycHkwbDNMNmdmdjZQbDNHWUp6ZUNMVSt4bkh1RlNIaU9LNThFVmJoMlJXNXhhdzgxVXgyUXM4N2ozQTc5VDdDb09vUDkvNWZUZmgzUTluVzRvNmtMeG13L1ovYnRuTlBPYTZkOG14RUN2YnVhVWIwWWw1SEJUYkw2RWF5akJLd2JkQnlFaGNRL0hWZ0YvQ1NSb2NGZnpKTStHUVJKcnp2T3ZXaHpWak0rYzdIV1lZb2l3ZmZxbHJJS2c2aituL05weWVhbEZSZTFLeWQ5Zk9hbmlqSjhvZDdNRzZYVm9CR1RDbnQvYTVNaU00NmE3M0tqTlN5L1VOT0hRaDltWWlDUFVPZXI2UjVieXZQYncwUXJRUzRSR2wxOXNQd0EvWlR4U0puMGcydW8zY1ZuVkV4VUxPNHJiK0s4a1pOViszaGJkbG1jYVJuajlEcU1xeFovRUN5N0NsOG9OQitSQUpkOU0zM0ZOMGxTMGN3K1piRUIySzRENzJqbDZESlo1UjdTWlNzZU13YUhsbG51cTRQQWZTclEwclRGTTd5SW00VkZWcW9wMjZGZGh6Q0dzMmp4YkNsN1hoOWIzN0ZSY2VmTWY4YVdRVHlNTU1aVzVCOU54NGF3bFZKTGJkVllIUFhmYUdQL2VjMXVjTloyazl1RHlrUzN0cU9TOWdVaEl2MTM5UlVQaEovQ0NHZ2J4V25lYlZwVzZjL2htNlNVS2RkTEszdnBhQThjNUJMU2wrREEyOExHNHNldzVtOHRSVFExczRMNVlWWlRYd2hqK0NXK25yUnMvaENrWnMrN3hISkNWeVBYY3VTTGZwdHBNSUtDNHVGMVJQVzA5eEJxZ0xtQUZ3aDA2bkR4ZVhrcmFwZUhzMVFiRk5IQTd0WXV6L1pxN3pwUWc3N3ZYMjZMaURLYi9SUjN6UEJyd0pVV0ZEb3E5S3BURlZFQWd3WjhFUkgzSjMxd1ZFZ2l2YlRwV3ExZWtHeUtNOS9zTlJGL3l2c1JXR3ZIdkUvalozczM0N0ttRUR4RWVUTVFZUzZMRzhXWkRrdGRPQVRHWEovRTNxUWhXQWlENTJVc215eEtDSVhTOFhPdEVrWWp0S3R0RWhkYWU2cmVuaXNxbi9pMC9LZTNQeG9ZK1YvcWVsL1hrOW9qMmFKdDBnN3JEblloN2kzWVZobE10UHUycjlOUFR2Qmg2VWoyN2ZYa0FjODdmZzNzSzZwWjZpN1RreUl5SWgvY3ZPNVFNSENOZmVWWHI0d1JaS0sxNTk5aXF2K1NZMDNWSkRpdEg5Ui9PWW1JNlMweUtQZlJpSXZTVDVJN2lvTEZOTnZFLzJaaU4zWDZ4MUtiblkxN3BOemV1R2NUb2dLeTRFdGIzNm1KTXNZeHZqY0FFNmlIaHN5Z3BWclVkVnlxWkUzOS93MEdiSWZ3bkxIQ2dzbUZCbE14VGtEUzRkaGEzM0NDbUtNcDB1em1xZGxBdkVqeWdNcGRMYkxsVFZTNTFrVXNoczRpWWozREdtTThnaHc5NXNSdWJFa3ZETXdPQjVFYzB5blJ1Skl0dm05UzVPODBXclVTTmJHSTBVRFZ5SlNORS9GWlJKMnJXcWFDUmJ5OW00a1FjRUNTL3l4UUQxTithaXZFR1BuNTJzK1dhdnFXdHI1TDJYMnFQN0xQS0VJb21TOVYxdW91ZDZGT3lHa01HY0hiZk5WcHJaTDk3RGVvMVJ0R3NrYWFSSzFoenQ3MC8wNXRVM2dFTXltRjVXQXlzdGtmM09HZ0ZGcUtKek1CMHB5eWRQQVZsR0M4dzJoYnJiRTlVSGxjM1dCV2lXMnUwblJzY3l1bzcrVytWR2ZHd28xUmlPUGJ4bzBQMG1oUm9oU29PNlpvbzJRUTZvUnRPRmFLMzJqMnZhV0Z5eEhBallCeFJXa003YndjcEJpbjdiZHk3aTRxUXZTZVJUZUowSjdIOEoyWVBXdEFhVHBFVEE5RlY5blVxbVp1UW51M004bDdIR3ZKV3N3WGdJbWFnZjRTWUdRNXI2SXVXUE0xTkNjTk9DSmJRRFR2OGdUNTNWRTNRSVdHRGZ0VlVhRnNjaTBwa29LSXE5N2JlVXBZeHhHK1RjZjc1azBFUENQbi92My9YeVh1SG1ENlYwOGsyZG1aWDRhbW9UL0dyWGJnd2hBVUh5elUwbEtkbi9HcGZMUFczcHhDb29yenlSUVFKdUxUQ2dSWWRlYmhBY3RaMHUzV0sweUJETE1EMm92aVhWb2xHYlFGZ0FvM3dseUVtaWJjakpxQTl3cmJReWVRa2ptVXk1VFh1T2RxaklSV3hGSDFraS8rZmNxZ0tPaFllZFdVRFNKanFxVDYxTnhmWldsNURqUXlhOGlOMGZWVnl1cldCRmp0cGV5MGw3dHIycnhVQXgxRGlaNjIwUEtDOHRnNjFCVG1Cd0R5YWhFT2h3UDR6Y0tkVGRoVDlGQVNla2dDMEorcUlwMnpLeTZ1bGd3bHpCVzBSMVdTcmZQNFNmc0J2ZGt2Z09YVUd3SEo5MUMwd2dpRldrZW5Fd1pobFcySVB2Z3RjRGY0Y3MrSnBSSjJXQzVGQ2NyRjZVUUYyMVFEbWFhciszaktkMmlVWnZjc0Z4L2c5UDFSRHNVU3E2ZTYwZlphMHFSOGdqTmhZTm1CQTlCNUhLMG9YdU5tM1h5dTNaNE1qc1BucTFKT1pwR2czUVZWSnpYTnBSRzBaYU5BUEZJMUNmdTNNQ0Z4TVdTVGFQSS9FK3JFZ211WHNmU0pzek9HbEdIelBqR3pGU1FEdCtzbHMxNU9PR1hvZG1xcy9VSEo3ZE1CU2dKZFgyZW1MbWJSNG9KTjBHT3IzeG9zdVBvZE56bUt1eFBoV2FxNDc3MUZsSGcrbHRQU0RVL3RETTBTcHBrSEh1UG91NkZNZFFYNW40U0RQVVpaV2VIWHN6bGx6QWNrM0YwY2I1ajhHak83WmZGL3ExL01oNytBcHNvNnlJNXArVkFqUEFURjJESmNkYjV0Kzd5N1NQTk80U0pDUG5DQmcxNFRrUVhVVE5Lcnk3THhNQ1RiZUY5SFY1OThVNDJ0OGRraU1keHJncXl3UmZ5U01zdWpFZ0dOWm9yWjRUQ2V5Y0ZBKzZkNVF4WHpiOHliU3UyY01CekFXRUlPTUsvNC83a2FXeHBoNTk4eGY5MmpjK2FsQnBnbDhTaXFqS0JxZXdxd0VaRS9ucThucmh5QllSaGRJUnFrZTFOOVI1bDc3NGY5S01YZjBaam0xNEZDdkVQTmFqU0NPaDhnL2ZjbHFhZHFKY1dJb3Zya1VKN1hMQjQ2d0IzcVIreXNPK1k0M21lMjJGNDRHd2FoQnZTYWppWlBEWE93ZGl4N3MyN085RlovMzNEcng2S0ZsZUIxcWhPMUVXNThzSXc3NFB1RVd4NTFuZ2ZYeUNHQ1NIU0duNlVhWHduOGdabGNOc2xjQUdHZW5hQUpvSHg1OWtMeG5jNDdaUnVNQTRJTitVeUVjMXlUN1FPY3hxKzZOSXNmblRzLzFXTEswWUpIYVdzUzdheFBVRndYVCs2MCtwMGJDWlVJYUJBV2h5RVRjTWthQkNDMStHK3dvTHRJSXRJZmtSK2M0bmRyeEc5WUJ6SFpIQTFJWitxMmRhdDFGa1dHOFdrMXR2bTRMV09PY21XZWloS1d2MW94N1pRaHFnWTUwN21uY1JrNEo4NGd2RkViTEhoZFFFbVNYNlA1RmZjVU9JeEVDYllWNFh3dVJPVG5zMDdwdFZ4SXI3UkpQcTRrUTB3OG1OekZ4b1BTOGZlKzVabUhaamhIdkVxYk9XN3VTdG0vQmdGVFRSUXgvN3NkWEJUWWdlclpFVzRRejhLdWZLV0tmRnlUR1h1cU5pT0UwN2hJYUhNWXhvelJsR2lvZEpnVS94ZjUraHpVcGV5eE1BRkEraFZKUTU3ak5LdE5VZ1NJemduV0xPaFNLRVBic2F0YTBoUDBQYktKeXRmWU5GMHBocWx4d0owaThnb1lmR3BnNlRzeGRHR0t2WVBJMVhtTXkwYkRjQTVuTkxMeEQxc0VHbENMNDZ0SWZWajh2MkpNWkwyc0F3VklRUXprWEkxTDBsaHdyTlppeVdHNVBGWU5jVnJtN1h4aXhBWnVha1kwMUpQYjhLMmZLWnlrUnNQU05icTNDK0FIdVpJWElENXkycUpySnVkcVdqQWVYekZnRUtrZnA4Yy9uOUJ2VWxJKzBEVWxqM0FiYm5ROHpJdU9SMzRhK2Foam1QTVZTdXhIMEdMeXRjUkNodkErNkJKR05HV29WNFVtTVNqUTdZcWNlbkJKWFZUdTQ2T0ZrYlJaOTIrMEhSY1RjZSthS0VBSkkwSy9ycDFXczNvWCtpRTdKdm1ZTEZIRVRyQ2NTNGM2M3JkUXlUaHV0V3FEWGsvNFBnT05iSW1NWkRvL3ErM0JoK2RZb3czaU5PZFM5NXQ4V05IOWtXVlBtSytyR0xBVVUzZnNUR050OHgwOXM2ZURpNzQ4Mjc1RWN1ZzBKaTJXa2ZtMHdvdy9zNW4zOHd3eitvQ0tmRzBWc1ErOGp2VnNYQ2JiNll5aXhGK0UyaG9BZ005NUNoWk5FSU9mcnBrY2t1aFpTYThZTU1NMTd0aWlGVHJYQVJYMjFSb3g4aUNqSTFUaU5xaHYySEVRelpqY05jWEV3MEcvaHFmS2FsTGJxU0ZCY0NBakhocW1IUTFmclRVZkMwNExFbjNLZlRjdjRobUFuTzBLT0dMaWlqdjhNQWJISlMwK1loU1REM05KWllOc1dhTjBmTVJtZUIyQWU4NlFPc2hITFVDTldzN000eUdzUDl4MlptQmVxeGxoaWMvSk83V2liS2Y4TjhmYTN6dkZqQm9JNEZuUTl5QytLSHhCNTQzNndpNS9EcTlFbkM4M2ZwU0FBMndET0R1RUxZTDR1a1RsNGkvWUcyWXl1eU02aDB1cllTVUtGcDV4djJSRXFCWFp1ZmtIZFhGMytWejY0anZhUHdtekhoczlRZURoSWl4b21idHpQZTI2NUp2SGVWcmFTNFk5cUZVQndDbGtqNU9FbWxhek5yKzhUa1lPczFKUTJYTnZxNzg2MUt6T3Y5R1ByeGQwWEt5R1JvdTJ4K2l3NzJYcTBzUmhhY2RtaEhpbWNoQXhDTjc5Rmo3dHdmNWt4OGxKUkJKeDFZbU5vbHV0ckcrY0EvcVlPT1BwbDJVaFdiWnIzZUh3SW1qbVJHejdQeXFibkZCVUVCcE45UXptWVh3U3Q2WFhZQkx2TGJsVmZ5U3EzdnVuNmJqdkJyVUxONVMvT2N5Wk9NTlp2ZTMvMC9lZ3JLN0pVYVZmcHZHWlRqcEhOMFc0NWpmVzdoVEpCbmt1Mk5YRzhlRGxvSlBHVVdmS2dxWitpV0xQVi9YKytEcnJJSytVTDRUQ3c2c1NJNXV5cDBSY0JXWVdjQUlJREFwTHFkeUdET20wcFR3bWd0bmZnYlpZaUJ3T0lTUmNjTlRGVGVEM0t3bDNXOWRYTCt3UFNaOUdrU0FvWUJNQ1lpTlRGWVdVdFFtZVVIYXEwNzdSbkJCeU56endXTWNic0QwSnZMREt5c2FSR2IzNXRCUXpFQ2FMZG45bkR4U3MwZ3NXc1VTWDhLUUFYbGE5c1ZEb0x0QXp3VllWcDgwb3UrdTFObHc5Vk9Hc2ZvQ09Zb3c1azNHbkVtRVU0Tk11RjJVV09YK05mOTVYcUUxRmlVRTZBZTMreHBVU0FWbjJCRHAxRUdJV09XaS9QTjNhcmNsY1JZUkdZZkYrUzBiQ2c0N2tncWs3enpvM0hPL2ZNNjlEbXZ3WEZhMmlKNTNrcTFwUU5LYmlVdCtpbFV2ZXFPK1JHZ3RGM2xKK0V5S1FZMG1qKzRZRHRDWWo0empGMGwrNHFNZHgxVVVieVR3SE5SaEhSeThnd2xqNXJ1RGRKNkcvc0thMTY1Zk1ZbW1NTXhNR0xJTVRleGsvaC8rV2ZhdHJMV3Zrc1lQWVN4bytPclZMdGQzVFBwcEJHd0hFb1J6ME4rRXpNWmtDZkdmV2NRKzdlWis5ZFJLeFAza0ZkZDlxbGNaRlZHbDVFNFIvVThFZzQxMEFoSlNLVCtZSWpQWFFYN0liV2FMcmdPRVZoNzlOYmd1MWsyNEkrMWNVemFsL1F4SXVMQmd3czU0YVNJN3ltc2pkVTdxcUVjalVMMmM0aDUwWlZreDBOdGtIVURTVVltMkZjcFJZM2pjSEx6bk5QTHFvY0pQbWV3NkQ5blRnWGs4NG9ReXR5SDhFcCtHNVZ1b25hZStnVTB5ZjRzSDI2bk9hN1RhVlZKZlpjcmFsODE5MkpaOWxMVndkRjlHNVlhZUM4WVBubjFCM3V0QWZuK0M5WmY0Mnh5dVF2VFc3RTZiSTBYSGRvQ3JBWlJRTDd2aUdsYXdIMnU4T00vbXVwa3owV3pXQWw2clVrZWhwczAxZGJmVVdybnJWTHRNVTFIWWlGRWJHUDFNejhXMDBwQUxUZlhtSDZzakljRlJzaVJLM3FVRmxONGlpUUlrVktvUk5WcXVEbXpQNzl5N1d0L2llK015WWttWEpsdUg0Z3FOK2ZNR2lLdDI5WjJQVG04K0lRQnBRd2k1bk9JZXV1blE0dDJoaHN0YUwrcUduc1NEMjdGVmtMTTY2YmkvMzgreWFLOTRaMmhUUStaRWhuazFld1A0WTNrYzFJUUJVbXNZSXZvUzJ5UzZUWU42bkFJWmloL3FUb0l1ekF0OGpFVE0xY3QrM2hEWm5KU1ZUanhySnI4dFVranNaUzkzTzlFL0xYMmViTm5oeXdXMVVKdHhTYnhFNUFrQVhMQ0VYVkgzbU5KYnp4K2VmTkxYWi9YNXMxVjdpTWhlQUlVamp2YXlOT21nckt0aHpEU0xYdTlVTUhQRDlOcUNlVUpJYy9FVm5qR05QeTBrOWlxZXc5cDRwVFVhU1dHcTdaK0FtQlZhMnFkM2dwZTNrMU9PRXI5TEw3TlNkNGExemNXMC8wdmdEZ0JhLzFGdU9EK21JMmY1MFdLWWdtZ2F6L3ltNG1KTVVxNDVMMnQ5dCtQS1ZhQ0Y1UXBWeFBlV2J3elB6YS9ibzVGU0xuYkhqU0FMUDl3U1g4OGg1WmNERTRaSG5jRUE5bmRxSTdWemNNM2ExcTA5UHBORmVvQjludUlaUGV1Z25IeVVWT0M3MnBiR3pzYVI0TjRBeUhjZGxUYk5ZRzIrZWxtWUNKcW81YlltYW9wT3RDb2tPYzg3MU5va2RwcWp1ZzZDY2g2dzhEZEVjN3FjV0Z6M3ZCNkxIMDNpbEdnSHI4Z3RpazR4Mk1PZ0Z5L3ozYi85dndEdjNlZGxremR5NE1oWWdGazlZcGZTQ21YSzdFY0szTmZ0bFBYRzg1YWZNT25BUDc3UGZXdVBXRlpqM055VVFuK1UrTVVnWElKb1U3OVVWMkdQYzRiTWNxaTdKWk90QmdQbXJ5SCtJUDJCL3ZERVpvNkJCNk8rYjBtUzQxdHVWOGluYURwRmY4bjh5OVovTFpBSWtWN2tNc3pJN1AzbFhvUG5wVFRmK0NVaUxMNld5d1N1TmN6VUxYdlZIV0NYb2J4SU9wdEtXTkgxZXlCZ0hNd2VCTTlhWnl3RGp5aHp0YWJuZlIreHgvSExuVkd4cnhTSVdQYTFjZ1RpWHFPZDhyOUNkUnJFaGdrKytxZVlnVitkQzVveDdkaXBKVFNKQXlBSWsrUXloMVo1QURuSklubDY0QjREVUtKSFVHL2loODNPTFkvbk8yVTI1YUhXZzBiMCtOTDREb0VKMjRNd0o1Q0JQd2g4bEQvUXVQelA0TG1QdEJwRWVJenFoZWpUdDFBamZLRmpvQ1JkbWhpQzNINCtBbE1RMkhkUVZyVEJqREJGcmQvWFd2czZHL2J3V1B6aWVOeGpOWktwS1ZkZUpKQUVWL25hNHBYNXlEK0dzRHp3RG1QK1VmWlRDb0tkZlJhN0R3V25FNDdSbXdiejdmUFl6aGZYU05vTndRd0RVN0NrRDZiNjh2OHJpYUE3cEdSUWYwTFFsOTlpRWVKUzRENk5Eb1d4QUJQQ3lrdEtNMlozeW1od3NWYURlWWt2d1pMeHNMeXdBQkYvKzJuK3Z0VnFRYXVuNEl1MUtHSGVmR2xnT1BSRlZ1bS80QVFzL2FwT0FnMFZMZFhacDJydzR4SE1teDlNeXZTWEhtMURRWXg4WWcrRnVQOE1lNFloTTR5SzlicGFUTWZwV3MzNjBVdHVscHhIT2dTL3grR3RIWkdnTWJqSXQ5Z0tPWnNkZjk2Y2s2N3VWYjVleWZHamd2SU9VdDgwanNhSFdERnJFQXpsQXdXa2NsYWNkRklLZUxHR1JGdUlKV1lxNGFwYWQvb2RFb1k4TVpRSEdycitLT3o2K01hMUI5b3lWNW0zaDNua3BvVDI0UkM3ZUlVSHBITzBpR2h1bzFPYzhNcUloYkVEOEFJbVNoL3p6NjFPMHU3U1ZXbmxXbXdnaEJ4N2J2eVBRZGl4L2txWDBlTGdvZnorTnJCbVZoVk0yZFpLN2VUQWx1T0xxZWt2cU5UZ0VMUi9wTnJNL3hhb2xMaWZ3MGFQRkRZMDBaZThyaDVYaldmTFhGZGFvNkdEbEoybjVsRmxpb3JrQUo4U0cvM1FubCt6Y0JlOTBDWnFlMUFIMVIxNDIxbEt4YVNHZW8yTUo4WDgrZWlxRWsxNDUwemk5UnlnWlAxSi9rV3NGZGtNRS9FTzBUV2JyODlSZ3BrbVlzRDd0ZWV5NXczSjlTeDZtOVdmdWN3V1Q1M0w0NVJUWnpQS3QrOS9SZ0FLM1dLeHZhV1p5RXU5M1g0ZXF1aUtCYm11dGY3KzQydVRYdGE4dUdMN1FvbVV4WXFRMDVxcTg1YnY1S2xJbS9WNTB4SzI0THlFaEptR2o0M2VTNWdSb1lrQWZFbXp3eDkvMGpUT0ZCT3VvZHJxUnNMT1U3TURPcER6Z29CdHU2QzRVZ2tYM2pHMzIvS3RGdkpka091RlNqZGdhSVNYVXNNUU8zbnZ3ODhwdzUyMTh3dUFqWThOdE44MmxYUTF1Qjh3YWtQZlhnN2VJdDJVSjhmK2JZOUY2a2FxZmVUL2Y5YWprTDZTU1dDWFAvQjFKNUpNQkQzNDJNOFhjTG1SeXloNHU4dGppZVJidC9QSkhVMEZqSngwbzJySnBOKzJGdWJERGFrL01RV2w3MTVWRHNuc0txanNTTStob0VIZHJlR0ExK2hCZ1lrMmsyUFZYRzhwSFVDejQzcHhaR3VjaTMzaU9HMng4NzFwQ252SGI3TGpwbUZRQkN2V1h5Y0xaREJJMTB5S2s2b09iL2pqUXkwT3ptM3RWVDlwNGJFc3VEV3JCN2VQQkhYUjVJa0VtenJrRjR6RlhuTENXOXVDMW85ZmxsczJ6QlJsTDNwMmlzNDU5Nk5YdjdKdWtxN3o3WDBleTdOSjlpRGtXaXNSWFpZUUtDOG15SmtzZFU0N01EVE5MT0I4VE9EMHlvZzR5eFFkMkN1clhsVUE2ajRQREtIZ29wZVgyWHppTXp5aVQxT1Nib2lKWmZQUFA0RlhxOTg1TXFyZElOajVQZzY4TmlWRENVcmpzRitBQ29yNk5rNTRGYzcxcDEvL0FOT3F5R1Y2cVlGS0I4Nk1BbE9ITk9zUnRMZGt2dll5aE5XZGQrcGY2ejVReWVESDZXR2Y2d3Jka2dNaWlLRG54cjFFRDM3ajdqL0RuNlZIaUxVTythY3psSUp1MWpYaU05QnY2Q0IzenZQUFdqbGtVZDlBNnplUXBlNVlHMUh5R252WnE4Sy9UWGcwN1RNOUhxbEU0TjR6emRxdHdhZHl3dlJMeGlua2ZseEJkZFBvQjlDazhwdENKN3pzUjhhZEliR3JJWjZpM1ZOUklIaG81cm1maGdXVVMrVzg5S2pPNEROWHZNM2FxTU1nU3JxOHBKUDByUEgvSk85SDQyMEtCZ3lBMGNkSWJkTU5yWWt2bTZiVnJJUzY4d1AxTGN6NWx2U3A5djhHUVc3eExOQnh4eVovRzZBRVVrdVc3VDFuZG1kMXB0V2RQejZteTdIVlZIR0YvMlZOcVpTbWRUcXpyTkRxMkVIYnUwZ2VEdytJM0xzdkFHeWJxUzBkY0pzZENnMit4TXk1UGtreGJCL01Zd3Vldk9sUFRNOFQ0RGpQWm5DZmk0SEdCbTNiSDJjWUhRZHR2RzBmNWpXMERmREcrWkVJZDdVRC9vTCs1eUowKytib3hES2JMN1RNbm9la0crV0FkS0lWWUxrQjNaK3JUeUJmYnBscjJycnBxTW1kM0RvdkpMeGJMSnEvL1BCZERMeDZaOFVDSG44S1RLWTY2dkRvenlvd3JzZldEZWh3SE1qOTFmSmdJSGJYMFhKNHgwa2QvV0pjd2djQXdCZ29GMjRYbzJBc01NL0U3VEhQVTh3TU1BaWNwQVJvamd3WGxiU2M2UzAxVlVCUjU4L2NQQmVSUXFoUGhqczFkMi9MU0RqT1ltTm9PVEMybWJONk9YTWNxVmRXdUFiTWs5enVveVl1QmNkM3pmZFcwbzNtYWNUTnJoT0JSR3ErRjJPenB0L1lMWERCaUl1OTVzVHhOK3p3UVl4YmtIVk1kdDhuekh2OTViMW4vSHdRTEVMd2psWU5NSkF0WkQ0Q0JKYmpsMFpvTk5nZW5LUmZ3Y1dxM3hvRUxUMGVSYUpJWTYzdW9CZFE5SW8zUER0ODl3ekdvNVUvYjlOQy9ya1BpSFdaMysxRXVmb2tybWRSU2xXTHpJaVEwV2cwbktGcTZEb1VaSEI1dG9NLytPcldvODFqMzdnczk3V0l4WGdzQkV4cXVFZ0ZkMk5MWEJIZ1h0eDExT1ZWejVGRGFpVExnMkxtVDcvS2ZWVHdVNVV5S0lKc09vaHl4U0ZnSXVXMkxVR0xudElJQmdoWmo1WWRjckluS201SFVsbDBUbFpKbTVNZjBrd0hUR3Fyenpub1FMeVV6bnpGTk1GREdHQnpNbmxaWVdmb1FsRjhRcmMrWXFYSlhQMjJaNEgxYWExL2ErVlpMSUVZWEdDaVlYTit4eUFmWHFJZzZBREx1aUE2Z2FncFVMOWdQdEtLVnBqb2E1cmIvY3RvTUVUb3BIME5maHU5L29zbHZPUkkybCtmWFBNSUVwenFDajhieUhFN0VKYTBaYlNwekdSSVEraXJidzUyMTgwbnRZWnFpOS9ZcVBMMisyU0VrcFhqRitnaHZNVXlCOVV4d1p2dzRWcDJWTWhiUFA5eWRESFZ5Q0VsWjdTNTJPSDlxN0lWYVBYZkprUk1aQmxjT3N5NlNVUDg5TVBNTlRJVlFZN0ROM01KYmN4OUV1TER2TEZqZTdheHZsL1lMc3g3dWRlcXNYTk1HWFcveTNXc1doTzR0TWNCL2Y4dThRT3VUcXIrVEZxY2FoYXU2NnUzR1JDak5na3EyNUVQQ3ByZWxjaWFtQUV1Ulg5MFNuc0dUUCtGN0MyUG5YWHZrcTdxTG1ycmZpay94MERKL3hxenVZUktxbWpTZm5TRk9GSDJrU1BNQ3ZZOERyeXlYTW1pcnMxMy91V0I1WHhxYXh6dHV3eURjMy9aTitKRzRYNFR2b2tla1lZaVY5NGs5K3NYWUtHWFBjZ05jVEp1Y3R2WE9Eam45dUdNOVZKa0hNSUxLeEFqbzAxZ1RUbXNEWmxlWmpMb1h2SjIxTHEzbGx3ZWJUbWxaWjh5YUNxNG1RY3RUaVFwazRJcmxaSXBvQ3FmdWF2TkZ0dWN0TWNZcGlybUpicHlrOWZOdWdkK2RHT2lNVnRQVHpLM0FCKzQ5RUNDcDg0M2ZkNkxIei8wOUp4cVlJZHlmVVlXMENPZGF5M2ZaKzVxMVpabzIxQXp2N1AvTDdyTHljZGpvMW0wd3plbkpNN21sYUp0NUJldFRVb3Jya3E4U242aFhwa1c0YVEvWjkycWMxTG5MRE02RHB2eVk5aVJudWNMcDhZZUJmWTNDMzFmb2lIbGRkRzVDL093c3dKMU9HcWxxbWFpWFUxclVNdU5NcTliVS91dFIxSXVyTlVQWExUdHQzWXU0VXFxb1NOQXZGY3MxQUdjYlMraUtpOHo1UTYyVk9QdUs2L1VPVWlvK2tlbEowcFUwbVczSm4rWWZWaEJTQ0x2S2RtMjZqZC80eGk3SWdMTXM2b0NaRmJWWGxwTzBvdDYxK3lrWEhZeHpsVnlxYWFlRnlDVzlNdXZJY2oyOFFjRm1GbG9yb0drWHBSQTVab1oxM01PbUdKNktIT3NNUWduT1BkZGc2c29JNnlJekZ0eXlQS3NON2drOGlKQmVWZ0hkcXd2ZWVzWlh0a05FSkN3Rk5vcThSQy9kRFJpM0hqaEdubEJtSjdKMkw5bmYxTEp2eHBSWXRJdHZSREFQd2ovV0R5eGdKT2o4aWxweTVYZ0NpRHhqWUFjYlEyYkphckdTVldjUDFhbmE5c3F1dWZtYzhaTGZMZ08rbWorKytYclJKaytscU5xS1FmYThuMzQvVEpEZFd3ck1iMExFN084c1BYZTB1WDYvMkc5VjMrY1VBTi9aK0hnUjJjckVxVnh6Z3Y0dWY5ZTF5T3dLTW12azdKUzBCUmNjdHpmQVp3Z2Ivek9JbHl4akZHME5DK29lMG9YWnN3dWkyRVoxVXdnQ3VHK1dYVFdHZUNYdVJIdVVoRERYRE1Falp2RWJRdHREU0NwS1k1TzQ5NDYvYXRlc0xGS1pIenh2ODZ2dHdIaURnZTBHZ1pLRHNORmtrd2pITnRBQlBGRzN6bm55UlduMnlrUjkvNGs2NWxORWR4SFYxT1NRQXkrV2FyL0NsZXQ0Y0FEc0FGTHMvOEJxTWtpRmM1ZGhJcThFUzd2aVA4bEZGVFNVcHhHMzhTZXV1dEFmVk54R3FDTEVHRzNjOHdub1JCdFRybGUzV3hiUW1LSnljMitGY3l6SzFjbC9PanhCcndqU0o2YS80RUF2cHZCYnVsQ0xTalVETUJNaU1haEZXWmw0OVl4b25OSThrcWpxTWJiN1VtSEcwRDJsQjd5TGVlWmZZUVpSMFNXSXlUeldkazdRNEloaU1lN1VLazd6QWN6cTcyOEx6OGhyc2VhS25sVmxvanlxK3R2cHQ5UmwwMzcyU1hUYko0RWpCWXRWOUJDa2NGRVRqeHNORE5zQzNGcHFra1RQVEttNmtKay9zOFBJOG9wQmRZRlcwNUpFOE9MNEthaEFtR25hMGQyNkNwdENCeFFBdm8vVE9HUE4zbEdGMjZGOXBHVzlidEtsZTZ1S0hJRVFLNG5LYk94ZWRkcUk2RVRBbmJEUTl0K1RPZ1RJQ0Q0UGZDMUpwRnppSVBQM0Nta3BnK2xUWTlURkdXbld0Zm1UcnVYTDFBamdVN3dvQ09pMHVKRjc2blNmQjVEb0lLMnNJVkF5cG14d3dsSkswWTZQdkRkYUlaU29LdWZWOTgydGk0NnEzZkFnMkZZZXRtN2NWRW9ROXJtMmpHUE03cGVJRUlNaVZKeXlWUFpmK1RWbjRDa3lBNUVDZE1RRG5vay9OSGY0dGZCMzZnd0ZOMGYxRXAyYmNNYWplbUN6SzlvN254dWdTZGJEMWtKVFhodWYzNUJHZW1pWFg0WjlxblJscHA0K3JOUzFJQ1lzZlpaRWpXODg4aWF6aWVjSGFpcEw4T0taazJVbWI0djgwU1hyQkZWNjY2REgya2NEb1l4ZWZKZE1oVXp1MTdXWUZmZ2swRllaWi9jSkxCOS93bTRjazhSVExhS09ReUNsMWpsOXNmOUpPUzNTQ1l5VytOYUZSZXFVMzJQaFNvRXpRZmpPcmYyTURJb2RLcDhwM1dFeW1UQVB1Mnd6YU05Rk5zcjROYUJmU3pBcDY3RWNjSU4vdnh2RnhoakVGUkJkbUNkaldKM2xQNjluOUlJRVhoVStHNjR1bFlZUlEyL0lDUFAzb1RQdERsRy91SFRKZUxmcU5XTzRFVWpGQmhna3p1SVFnM2JKanROakZ6SGF6bUQ2Sk42Q2ZLWitubjRIMStRRVhIeDllQ2F6anM4ZWFndEtPRnpYejBEbGZid3p5NWJMNjNMTjRQZjRCUE45ZjRVWXJ2cUJPWXMzbVNrVklPejlFbk9uSnFnT1cvQUdwS2ZWejY1WHphL210TUFHTUt6b01PbXZPcktCemNxelJSS3VOcGFnbE1IQ216bTdZbFo3RWlOWXlFT1RMYTkrUi9GWldDeUhYQ1o1U012V0JJcHhkTHErS0x5dEV4elo5OE16NTBpSjVQZHRVaUZIUFIrQmZjYTlEN2czZ1lXQW9ZaE11VnRQK0grTFZqT0hzL3dWVkhTbjR0SVNyeW9hU0J6MnBDcUN6MU11S0R3R1dSTFVnUEtldUtOeXV4Z09zMTY0TGpZYUxnRWlCY3lPL0wzV1ZQeElGSlNXeFlyMnBRTDVOeFlTVi9TZytvVTFrUU5lMzBNMlFLZE8wMldvTlYvT1F4ZDRwVlMwTWdLZTkreXNROTVueDdobkVGV2x2b3dYcFZTTzRsL1ZjTXhHSjI4MDU5aUtKdW96YXJEYU1EUFhnTnZoMzh0cjhoY2c2dEVia0FHUDdDK0crbnI5YlJKNS85ajRrRjJJYjFJdGhQWEZra21vT21zb2w5SGFON3I1WTV3eUJxZXlseUpIcVVZK1UwL0JSa3pMMmdpNUxka3pjTW1waGJoVmZ2YjdlTmNnS3ZqcW5KbjBId3UreFFiVHNIUWxPNFpOclhKZUtHRTM0MTdNdGptb25QR1BlL3JNTVh6RW9HRE0rSVJGODArY2Robm8yY0dMdXdLUUJSTk95VXU3MW1sbU5Jd3M2ZHdUTDZ2eDlvd2pKZmFGcEVhL3p5aSsxNFNhU2JVUXRnOUdIYXJRN0NabU91VjFwNklraU8yYUM5VVUzMVpMdkRxSE5DVjI3UkgyYVNURVlSZ3pUclE2WkVla0plaDk2NkVXR01IUWczcTlEbjQvT2JjUDJ0Q28yU01HTmJqcy9MdGhSNEpJTXhzTjJkNmxaRVpkUTlIdFJkcU9EWFp5SE03a3RXd0hUZHNVR2w2dGpNK1RNVmJMVlVoYnUrbFhsZTVHUTQvakN2WWxRN0hYNGx2bGZ1RVEwMDdIVjhkZ09KWU9CLzhjUkoxc2YxbSt3RFdqZTdFZXVCWlh5aDQvcE1KaVQxVWNQMHQySXBob1dpVjc5SnNCaWFkejNna2ZkVDFLR1BwNktRUTZJU2NzelRMTlJHdk9KWFQ5S1lIOStPNVUyODZSWVF5Y2FhTFZhRXhjbzJEWTRRTkJKbWJDa1c1djk0UFRSc3ZpVW9yd1Y3eTFtQjd3WG5qVGNTSVNSV3VETUQ4WU81dlNzUzJNK1BkRnVOY3FlZ0FpMDg1SkVoazFOSjIyQlRJVG41M3N5bUt6cFE3T2F0bVA4TTNDNDViblFMcVBMb0pvRnprTU8vNjBNRnR4c2t3WlN6dzlMRkFQbHJmT0RPeGJJR2N6aE1CRzVLd2tONTM0dDlranlTa3J6d0FLN2t5Tm16Z2VhMHh4ZlFQenVzNUswVGRoc291cTVCeUxJZHJKK2dnUDRub3Q2dGV3L0tDNmFlRmJuM1JtQ1h1dXpHRlY2QWVuOFBLZkp2Yzd5S2wrVU9UWGVpajZmM0VsMVpGNVd5M2dpSkt2UXhoaGVoUWlUREZNWjNtYnExb1Uzd1EvVUMwV1dzcXMvOTdkZ3VBZ0lDQWdJQ0E0VDc2UGdDbEpONFJBNHBxN1d3Y0pxcTR1OXF1eG9jd1dxazdsSVk4VG10UGM2MlEwZjFIcDE0Uit0QVc4QXdGRjdjZTM5ZWxsaVNSV2wydlVtaEZmRnEzMFZkV3B1czVaTXBUY25wTmNya0pwODNrNEY4alV2akdaZXlRQjJ6Z3pPWDZ0WEtWdEFIKzdqbTB6Ulg0UVN5ZGRLNHFjWUg5M3pyK0hpejgvTHQyVHZDUW55N2VhRlJmUnh1QnYzZVBFaUo3S0cyYnJDaDNiMUdObVFtcXJIdXB6cmh4Kzltdk04dXZQS0JyR2luaVIyQUJXKzU1bVYyQ0xYdkwrZU9uTXJRL2wwN2F5MkVLY3AzSldSbUJJWnZWbGVxWm5yVzZCRUJoazZwbHl4SFUzQ2Y3VXQ0NVREMTl1Sk9NVjc4N0Q1bkV5TjZ5OGNxRGN0dHVObnNGbEFhUitBK2ZSSytoTUpUL1dEclBtTHdzNlpud0JLNmdBenBnME9xMVZJVGNlVkJick45dnRUWDIvWWlmOE9zbSszN1JINjdWZitIcUVkOXYySS83L3R1UCtIYjVmYjBuMzJkZk1mT2c1L2g3c1g4UHRaTiszcksvaDlsamZaOWp4KzMwbzkrMzdNcjluMmhHL1oyNC90NkdmMmRaZjdDdmgvWjY5bjdmclFkK3JxSC9OK3RTL1o5ZzMrcjBVZStyNnVqOW4xM1cvVjEvWDFiMVgwK212OUo4NTFWQ2RXYmVjc1Y2RThyaUE3ZGVBbzZlcXFNTnozVDRIRjJ6SktuRXk5RmxJN1RCTkt1SXZlYVV1T2E5TDVaLzZNVEc5QS9sVlFXeHI2VXZWYkljekhISXNMei9SREZBbnVva3BpUjE0aENDK0t4M2hEWTRRdXM0bVVuNVRzU2xSRVdGNVo5aTFTejcwdThnbC9XYXBaU0gzc3dRajFsS1JUTjRkRCtXUEZWd1I4c0xucGw3bTBQaUgzNUViVTh6cytDVzd6TnI0ZUd3U25mNUtpVTdqUmt4anZkUmFyc3h3bU9pQzc1N01nMzVNTXM5aUhQNmZRUkptNFV3Q01YWEtIUGI2VHJIcUVBM2w3RG1LUHZLUmRROHM1N210VVorZ09YT28vUncvRFNkS0tsdFFJK3BxS0poNC9BdktzWHJveXVuRHAyd0RmRDB0M0tySGVza05wZEg0ak93UnRMYnBTbU1ESTIwZDB2MXRxc3EvbEdNRTRaRE5xcUcxY1pIVTU4dHBNOTZ0bkxOMWtTeFJxQmVJYm85WGlWa1c1N2R0Y2haRHplZzgyYi9XbGZZajI2S1lmdVg0dXFBckVDb1Q4Y1kvZ1kzQzNuT1E2YVUwTVpiZkVhb2V6c2NRWjlSajlVZ0REVHluOEJiOHdOL1hqcG9iaDVoOFBLRmdEQmFSZlJRZXBHMkFsYzJjNTNtaGJHNE9USDV3SkEwVDZZeEl2V3JONXlxaTliZXduTDRWdjRKYmpSRGFNck5FMzZIN3J0N0VUOFkvU1IvdEJRam1Td0lEcHRiaXV5V0I5ZHVTVTFiREVDOHRycUJ1ZWVQTDEzZ29kbEdHdmlYNmZQWlZXRzlaZjhpNVdKTFdBWHIwZHBwNkJMVDBBQ29JdDhPWUVJMGROWTg3YUEveklDaWFTVVlTMmozM3pDRmhtaTh5TkI2eXgrZU5TVHMvMW9HVU1WaHNsRUlCSytQV0U1dmxjd1d4bzJNMERWMDZ0NEdVcEhTaFF6UHhHanVpZGkxYW5nQUpUSVJnVVpsODlacUxzd2JxRjE1SjhtM2dVZW5OR00xNGNxMGd5eFQzV29PU3dYMDFQOVdXZys3cnhwNStCN1dKcG9mdWFKaXpoNUNmUGhzU1I3UTlzRHlJSDliZmxqemp4L3pTa0g5a2YzOGtvcTBsTmNGdkdpZzBFckFNNkY2VzYyZzg0RklScTJhVndtaFFzNlc0cEYyL21DeDBTZ2EzUzVLc2VXa1FTNjNxTFhYWkhyak9CRXBpWVFBeGtuYWV6a2hSeW5FMU0zcEtDUzVDWk5YblQzVnlZMWxZN3Z4aHpEcXRCSTFBVVNhVnNUa25kNU84VndyNmtzMERsdmJwNDE2YXlUVzlzU09TbXBSOE0xREo3QjJuZ2hlZWJWb2RodlN2QVdvM1Ruc1VwejNueEQvUTNwU1BXU0xMd1Z3MUt6czNVM0hJMkhsbENyajUvMWc5R0pJV1lkUWZCaUdlZ1pCVEZFc3FISy9NSjBGbzduOVJna0tXcmZXcW81VXA2UzdCTFVHc0E1WS9SZEdVRGJWT2tZRW5GZGJuL1ZTSnpJa3g1WHpKZkUxdTVyWmFWc3FiZ2FJYzNaVEg2OGVHdnpidmc2ZDdhbGdreWJiQVdzQ0ttTDc1UU4wS3NBK29ZTy9wMEpFbThxVFBVNWdZQ0xSZmhrcGlHaEtUUW1TdGExQm4vS29sNmpYb25wcUsvTmZzcXdlRFJEVmdFM2FlOFA0YkZ1TkJTWU9UUHBOdkxhUnpQMjNob2RPVEowZkhubDV3bVd6RXdzYk53SGc5UGcxZXdXM0FydDJEb3dZKzB2cThjSzlWR0NHcjZ2ajJlTXp1RHNWRTlyTmR1dEMrQUxrSzhLNks4cFN0MXVjazVUc3NjZFRzTW9YMEdtSjZIc2xHUUozV1NLZlJwNVFRV1MzT3BYNXNhSzZaR2pmRVkvczd2bENHSWgxK2Uzd01XRXluNUticGlVYXBOMi9hR1U2WEJOVmVoeFBUcytqRUhaL01QOFZqZTlFdldSNXhPNlBxR2ZmZU0rMVE4cE9KclNBTkNpbWw2VVFacHRRZFQ3ZFN0a1JUY0pZU2FwMWZkNFg5OGdZd0V1ekZ4WUlVcjhoSkJtTjR4d0xkeDJJaFJjbU9uTDg4RDQ3cUFkRzlsSTRIN1J0Skx4eElDSUgrVnk2blRyYTExL1dxSHJMWXVQRVdLZ0JiWjMyZkpzYVhQVDRreTF6d3ordkNCTy8ySUp4SkZ6YTB6ZnRtRzNQcnQ1Vm5IRXNINXVRWjJmWERNV09GdjkvVk5ZR25sYVpDM04wQXEyZi8zNDJFdzhSUEp6UHMzZVRoRGpneUVvMURpd0JXdENBMEFQRDZiRjlhS2xZZkZmcVNvUURQVkNqYjRWeno3ZHdyWVNObjBYbVBvSjZ1em80SHNwY0RFSVlwN245OU45RVpnVmtjR0docXNQOGJsTEdaR25pL1MzSVlUVUNrK1NQZmd4eS9IQ1lPalovR1RJZExLclJUVmNXZUxMc2FEdlB6dDZiU0tzQmZzaEZlSXlKalVVRzRObVAySDNUSFRHejk2aHBxaVlrZDIxdWFLZGZ5SGt3cFRRTGxxYUZFVFhRc1RaYnZYeHZSL1dqelk5b0t1S1NyQUd2YllCNEtPaHhqM1YzSkh0TjRJencxWDFnOEsrbms1bXpiUTRrOG83bDZtbkE1R0pheEFYcnVndTQ1VFF4T2lzRkU0bWFUUloyb09oR3Z3bjg2SGt3NENIditxZCtWc0NnRE43MEJ6d1Q2TXhSazZOaGtoS0xvYzNESVE2QUxURmFVRXNzL3pZamVZL2VnYmhzd01GSFB2V1ZsaFNpZVBtb2kySm8xWXJzL3lsYjNMNEdyVnliTWlMTmptZVZjemFUamVMR2kyNFV6cSs1SFV0SFBZM2RvYmFWbGpxT204elAyaitkQ3h2NFdNanV1TnZzbjNvY0lUV3VKUnNJTXdtYUUvY2dva2cxMTlMS3c5cVpBZDlod29IeUk4N3FhanIxRGI2ZnhFTWYwVWtwK2VDUkllWWswcjBHVTdQcW1rcldNSVk5N1VCRDlBSG0wbWNuZEFJejQvY3V6NFBCK3lmTXlEaWtiaS9mZ3NuYjAzTy9oclorMmRySHkrK2FyV1hUT1dWcDRvanY1ZkFGREh2Q2JaVFVETFZMLzBVZUVPcTZ3UUlhZVdNdnVrVXlXM0YyK3dHd1lPa2Y5NkFjRnNOOUovZG9TMnc1Y1NHODQ4S0JBMDcwbDJMcDJpSVZZeFkzN1ZHcHdhU2x3NnpmUlFKRnpYcGhoWkJ3OE9PZnJXQnRDajQ1VXdSSjNTTUoySWEvTldiQzU5TXFyM0pTam5jdytsUS9sN3g4a1R5Skx4dkQxU1k2RU9HMjFsVXNVUWlraVR4V3AxamRsS0l6SS9ZZElFUlQvcTlJamxuUU1uUXNpZFNtS0QzYWRDaFdUM21UeWFhQ1dyZjJmUmRvSkZuY3JnZHU5UnhMbkphTWVNcDJZVkVzWGZkbTlQQkRzaDdKT1RSOVdsOEFKemNQeSs0RnlZczI2VjdSWnkwRFYzNHFlTUhab1J4dktuT1VlMkNLUEs1enFFd0lzZVltS1FVVjJaRkVrT3dPN1hFT1FyVDZXaU5VMVU5U1JYM3M0a0drUGExaTRVSEpMT3BqYU1xZGVKYnhIZm9aY3gwSzlTL0NMUDZiV1hOYlQ3VEZ5MC96UzV0S0xpRlk0YTFOVHhNQXc0dnFRM0lWWVQzRkJGaU16Qi9UcVVKNElpVWFOQmtCb3JDd1ZQRWt6Zktyd0pvc2lwYnpweXo3RVJ3dXRtYXJWTGpoSkM3Z3AySW9uTGdSdHNqbFFZZUNLV3dqazBhNlBJRGUzVTZxQTZNV1RRZ2kxV3RscEIyaWJ5UmExRlYySE44TkhPTW9LMk5SQ0N4cGdpQncyUk5mNTF6YWhnaFk5UDlQT3d3SksyVGFwSU9FS1gySWVNck1DRFIwZW94M2o1S0thekVyMTFRNFBMMUpMYkNNektMOVIzKzZiMU56L3hqekREdTBTVENiUVpBTDE5NjZvb29Pd2lXeVR3bUtjNmpoRGYzVjJJN3ZVRnFvbTl4ZExQcmpNWGRrVW1zdDY4WDRuNVFIbmxmS1dwRFFlVlF6eFJvVFFxUWpIdTd1WG1xYkNmRXRzc0FvSVBjTXdzMmxMckk4ZUF1dUUyTWh4ZU1mUXlTazQ2dFJPTnUwM2Z1VTJjVTJTbTZ2NDBPUnhtanZGbG5WaDV0blBwV01vcDd4UWNWWGNWZjJ2Ynd4ZWovWTlZbytmbHNtZm5BWm1CTjk4UTQ3cDdpTmJnc3dhQ2FhQzBYYXdRSE5DZVpQUVFjTWZHdlkxRlJVaXh6TmliTExQU2Y1ZmZsWllNaGZrWW53UGIxbTVEenBEeVVtclF3bEpvZzR1aTBjdk45dU1JdzNNQVVSei9DVWUwc3QvMjZ3TlhRaVJaNEloSUVGd3I0ZkZKamFqa0RvQXJLd3c5NG1RN3FnL3lpbHFQQWVTeERnd3hhYnZOK2pqYUU4S0VJSFlTMGQ1dkI3VEg5OFpIK1N1L05mV3BGYjFtTENIZHdPdlhBQ29FV2poK0hodTVPd1E4Vi8zRDF5cnZLc2lqMG5QTnZvSGlRYTFNK1c4NzdBTTRBRnAyL2lMVXpHWjlVMmk2MUJWYXhCK2dhekhIeXpnb0xnall4M0lWTk8rNVhpM2owVGFyS0NvVTVENGE1UDdOWVBKZm9Udm4xQ3ppemZMdGNuOFJneGd6ZHErYS9QWVlQT3lCZjY0RjlNeG9nSFlEdUxJT2xSa2lZTTFSdityN0ZLekxrZGtTeURHbDRRd2ZmMkh3a08zbkh3ejNnOEhVQ3FqcVVqdkg4eTg0MisxNExKZW0xSmhhVVl3M0I1R2Q2d0NnNWZJbTl0VCtzMGZ6WmJYeGM2ajZSUUx6TW13RXJiNUtKb0hWczJodjNMNDREWmxMeVhLQlhXRmZ0M3paZUVKcGdMVmxTMzJ6dnYvcnFJNE1NMEhNMkNFTnV6SmZuSE9nK0xpWFJmQlM3MkYrUVYxREFFTkRaSFpXQmk4RndUY0JXSDN0MkdVaHY1NTVlcHlEZm4rWmxDK2dVbTB1dWQ0dzdmekZ5T3dKOEdKNno0RTdtSGNVNlhYZlJibkJTRjVmSGJUeGxnWnFhQk85Y0ZleDBndmNsNE9lb21ETldGNG5GaWZZbzJJUzBBaHpONmhNWWVmOXRMUzRhRUFNSmFVRFl4ZjRUdlZIc2s4V2ZhRGZwOW81blJ1OTl6WFkyalZ5UytPS1h4cUNEVVVuZDR1cVNCMTZqYXY2elUzTWJ1NUpna1czNFRLMHFhYXk1V1d5QWk1aU83WHVva0F3T1prV3g2WjJqd0xUeXZmVCtibnRiSnVqV3RvZGk4S1VVcTlNdys4MUN6SEIzMldqYks1UG5PK3JOVTNrNWgzSzZEVlJSeDFPWmRNVDhwOWZHSUl1MDU3eHUrT0cvaDY1RlBRa1hSTnBrbGRUaUVXMjhLSEJ6UitEeGlUYjczY0FYcEluQUZwZU1qaVZQam0xRW5yQzlnQm9OdWtzWmlBRWQwdGxTeDZHOHR2ZTNieDFUZFVRQlo5VXlzbVZIak14bkl0UlJkNy84S2hrbnpoWUNpU3pxZ0FtR204MGdUaXl4RVE3OHpmcUdxYTFnWjIrNkF1MFJqM200SWhsVlZ6MlU0TytjaTd4M2Z4NmZ5TjkrK0VtcFdZQTYxOUJ3NitJWC9aaVRYL0xYWDg1NVhwME5lTWVYdGYzdlJYVlMwd0FHUkt2M3pGWnZRa0wrak4rc2IyQ2FiZHlDeGI2TGIzUVZ3ZjZER3UwUkxUNSt4bkhOMzFpVjMyZUFEa1A0V3RtY1dDdWVhWW9Fc3BLS055MkxMN3E1R3ZXcGtFK2JicGxHQUJielp2bVdzNCtqNWxVWFF2SGVTZEFZWHZUeUI3NkhuTnFxZU53cGVGZW04NUxuYUFkalJUK1NINFhiYmRjL0ZnbVpVOTlVQUgrUzJtclREUU42cnI2WEZXN3g4bGdFU1pkWWt3dFd1WUhUQ1JWSGFSNFZpL3dQUUVYbkd5YnVhMng3S3Y5VGs5TG9PZTI3NWlUWHkyT2NpV3dzSXZQTS8zZkpFVVcvT0ZKU2orcG1saUxnQ0FURUJONEtESjVOTjN1UW50YzJuYlRIMXN4RUFkcTh1aW94b01yTDF3ZFdVdWF0L0FwS0JXdmR1dnJ6THV4YzRVZGhXbmhMZGdLSmpnWW5LbWs2T3lKWGVmNGwyaDFyektMSHk2cDJqY1c4dDhWWE8zR2RtU2YwUGdKbWVsa1NDQ1UxbzBtUlpSVm5zWWVZODRCb29wZnhiaEozaTB3Y0pRS0dlTEtVTzVhbjhSVEZRS3dESlVoL1p5aDlCRDQ2Y0M4dnZpQ2FIWmVuelpPTUxDY3pxelhOMW5ITGpUbUtSYzR2aUtYeWp4UGhpWGFyeTNMakk4MWwwUTRSTTQ3TVcrU3pvYVBuZldJKzY1aWsyUUlhNmRLbWFETUlkSVdHaU02TlllbktlYU5NMXNhbzZhYTQyK2JKRmcyeWFEL3owd1puL2JSczVUdWlvUWJBS25LdlVmUXB4cERCRGk5TkhrS3dQQk1WMHVmZkVralhjWXV3KzBFOWJ5dGhGNzFsOURrYnloOW1aOFhLclN3ckRyYlR6Ylltbk1ZeEZrQWxmK2Nva2hGZmhtc3JuSGx5c3VueHJxMlNOU01ad1B1UkVrVjYyWFhvNEF0RnVMVE5BTEphcnJ1SVNDdC9nMEk0ekNvemxtTjBIMEJDMDAySE5WRFh1ZStlMFoyeUJJdTdleUVtc2UyMVZiN3JkODJENkx3WlFGdVBDemE2Z3VSQ0NxRWp1cVVoK09xNjlGUHNmQXRCeDM1S1A4V2FnRzUrd0twbGtQTzB2S0MrdGZuOHlpdVlXVHEycllVUlZOQ1RhbDRtMFJQbkJMUnFncy84Z3kwZXlVUHR0V05NUkQ5Z2lTUmYvUkU5TUthcm14UmREZUdnNWcyTFdBQ29nVnFQZExyV3NUQ3NjVGQ3YnhCU24xeHBPZnVDQnl5QnRjTzhRUWEwTmcwU210QWh1Tk85cHpkRXBKb0pJWmxjWTc3UEtjL203WURONzVrNTl1aXhGbmtDa21wSEpDaUc3NnVwU0ZPaVB6WmpReE9LTWwxTUIxTzN1SEJBb3o1OXFKTkwwSFdNM2U0VWpIalNTVVhIVWZicFdPSTlaVjNBaHNITEk2a3dLRk5aZ2xzSzNnS1VRYWVFcW5XUE5ISUJvK1d6RXdOckZIQ0hHS0lONVBVbm12Y0k3YnFPaExncVlxSjlRUmRwNmlERENmY3QrNmQ2V3I2VVN3Vko0bW5Xb09Kd29rYU9vaHRTN3AzWXJ3YWswM2dDakhOazdPdEJOUTh4amNxYTNkQ2lOc0dhU2dkMlBrSXFrR2cxazd6bHd3czVDU0srVmovbmVCWWIrR2tYN084TkNwWHJ3b0FtRzFQODV5VjRIeHpCS0wyTHFyc3lBRUM1bVA2UTZ2QWh3QXlLQmZxbjhaME9KV2crdUNZMW9WZmV1NlRiSmd0SnBYU1BMRkxrOVhtTEtSL29SQ1YwT0NxZmwwSWtUSlRSS1RrejdVeWNMdndHcVFTcVBPWnM0RlpmV1F0N0Zhbjk3VloxSE9STTIyTGFQbUFoa1hVaUt0QUIzMDlxTk9jTEFUUTZCOTlaS2tlaktWYTd2UXVBTnNPSzZzWGgxTENVbEYwam53NG91NnZiT1NTZ2lrYkk3eGg5TlpFbXNROFROajRoQ255UnpwZnVlT2JVQlVOeHBNamowRVEzd2l5M29DSk1DMzJkdnZwMlpxdklBcklhVUUzRWxhUEtBbDB6U1lIdGdGa3ltQTZPcmJWazRIL21ZeWh1MlcyZldIVWQ4V0Z3SVdHQmdxNGlYaEpHUUJWZ1hFbU9ubkU5cmFDS3gzQkZMdWxtY1k5K0hHQVdISDMrRk9ndzk3VkFGMXZSTUZYZGpMTWl0d1NacnNHdlZvZVhkYS93dFFpNUgzQU1YYm9US2l6ZzNGd25UZ3FOYXBqZC9KRTZ1NFJYZHV6OTk5SFhraG50VUF5VHlXZURyMzBjV1NXSkMranN5Y2ZaSThHblE0aGI1M2w0TTZSMyt3VTcvWXpYaHlLU3lXaGFCOWwzUmJnMXozaXFqamhWRHBDaEg3cFIrMTFlV1k4QzhhZkJhOG9Sd1dubnk5SFFVVlZFalY5VC9ENDFLL1kyS1ZNZmZGWEdhNVdmRnJpTUtUTHduaVAzUlI0a1pKOVN1SVVFZFdIOUdxUnhLTXN6OFFXNkpiWFRTSU5KcVRVN1M2VnFyMUpORlFwSHdLVGZ5eFFEanM2RWVQSExrM29hUWpFZk5iMVFPN05uK3lyS1U2aEpOb0Z0QTgzd2hOaXJicXBWbm9WUjFkY1hETFNxTEVoSEFYVXRXRkNjYUFMRk44UlpLVlozOEpmbmJOOGttODZIYlo5R1AzdWVzNlpNZGhSOTRzZldjcGFFRU41a2VianB0SGZXdVB5dk9meVFXMmFqaG1MOEl6WXoyWEVsYUtlWHBoMEM5SW1kRTdiMUNRNjlmQ3RTZk1jb1RCdElwNFlxWmJEUk9OK05rVnZxWCtxbzFEQ1hhbkt0dm83YmVsWDhSMWpjdzlvcVBSdCtqWmorQVlwUnRGSmRGVm96V3ptZzJkaDJnN2lNYVF4blJKUGROQW1sN0hSWG5yTkZ0UHlGRGNQY0dZOEVzcnFVdVh5MUZxM2pVZWk4MmZBdTMvMEZUeHJEMGlnVk5CcTlYR2kzcC9BeVplUjZUT2ZOTzQrenJGUVROVThuTFlyYjFhcEZvcmk3WUNMcUhSNUpoNCtQVE1aYUl6bHJkczZKK3phSGxwdHhmOXN0dm1TSVVjWEs3VlAzTzhZT3ZrMXl2R2s5ZStjN1NGNURZR2F2Y1VMdmpwVjdCTlFyVmU0WFNUK0ljUzVyalBCSEZSK29MYWpjN2ZaYkoxS3NlazFLQUpRbzJLc1VjaWY5TkVRcEQ1YUtsdUZ0dmg2NW5MQTI4S1pzeWZXZFZjVjZ1dFFCS2luYS83aHFOdWg3L1ppbUN0YzFSYm1CYXk0Y0o2V3lLWE9ycUU2bEpnY3QvOUVCaVhXWStNblMzeWE4cVpmajlxSERXS3dJbmZNbWlDU2lMcFFWSG1sTHNPbGtuMGtuK2MyUitxdDFnVktENWhXZjdlejNHbGlYZ2NZM1lCS1ZyekVBNEFpUTdhbEtaZ3RCOXdFam9vaHJhTW9UYU8xWVhwck5RZTA1THZIZGNUY1pOekk5bG9sZWdKbFNGSzlLSmF1azBVd1JyWW5zUnJmNUVJZ0U1bC9WazcxV0p1UVNMTVF4RWRBckVhMVpQajVCS21IMkRpT2hoZVczTUpGSkFWQkloNjMrRlQ2SjFydkRPcGU2Rzl6M1c5NEt0d3p3OGIwZUcwVm1Hc3hDdEp4aVpZeGZxcStTd000YVQ0OHNrcUloQjhLWHFTWFJJV2N3SnozYVJRMEJZVHIxanBPTm9DWEJEYjF1YmJocFl6WDJYQzYxUUhRa0M1K3pKMUhmSzkvTEo2TlE0Y1pwVUJNWjhkVm52cGNnc0hrOFJGcnF0ODB5dERJblVsWm9odXpPUG5lTklybEx5L0QvTUV1NGxGRFBLWmJkdG5oZWdxRUJveFhOMU5pTjQyaHU5WHJ1OUNpQTVwQ0VGTFAxL3RHbzU2cGY5Sll3OGEwbEVQNDF4KzErc2JSV25IZy9tT2lrVkJDdEYwTktWL3VnMkFvTHZrQ0M5eVdqOTN6bXgybHNiMU9MbzhjSmlYOEFFb0V3NTVlK1ovaXhNY1FhdGg2cW9hY2xGT01BRDNrbFR0cG00R0tCQ2ltTnUxd0RaTHBBdFVCclUvRlh1emI5a3dHNXF2SWswV09NSi9CSWwwc0pNaWw5TzByb1J5cXBFRWl0eU9CcFpmOXk0UTg3MEZzZEgwVnlqQXZrZG45MkZ1TUVuZGhNVlRUeXBWTC8wbHV4S0d0eGxMUTQ4U3lGRXRsaXh5T3AyNUxqU2NYMTlHN3Q3bDI2SkxrMGFsUXN2ZHAzcmVGbnphaHZSaFJFbjlaNDVTQ0drVllMZzR6cVd5cDZjVjAxc2pSRUx6Q3JTeG5OSFh4aGxpL3c5enBReEc5WnVPMW04OTM3ZkZvUHBQcXNraXdCZUZ6ZTNVSUJBNjEzT1dKS0RYWDNIYWVZcDNEbURuazBKSlllVXlPb0NmM2NSZDR5RW5BY0NBeWYxNVNlUTc2dWRHOWdNSFA0WFdQR01NVnZBNjdaM1NTUEE3V1VhVzRoSlI2QmlPbnMwU0hEWTFnVzZqMytBQUc0YTNESEJSZXU2d2o5U0VYWDE1N1J4RVcxUEQ4OHFrUGsya2xmcmRWaHZ4Q2VWU1NjVVlnWEhSMEl3WTY3WjhOaTFxRDRTQXR3d094L0dTSlIvQTY1S3ZTZ0Q3RHR5cnVpenBDcGpYcmE4c2hMa2JXVGo3NjZtU3JZQkVCd3hndG54SHF1VmVNcWVBNmsxcCtrVnBZMUJWNTBXQ3NwaEs1eXM2enVLZzMya2YxK0MrWVNOVXFjZWZ5QTVuZUNTYlVRVDNtYnFHMTVNVkVPbDQ1a2l3UWtuRVU1YVh1aVY1alBrb3c3YkhBdkdKdDhiNDg3QVJ3QU9VRC9GV2NSQnQ1VlhLODRpby9aUEc1S2IvT21DdVZsODVpNU1lOWJ3RnQ5WmxsdHpRZHVhU0NmODhVcXFIUlp3SjIrL0YzcnZzOUVuQ2kweERPMkNUTUVBSXVzWEZscllBN1hhZzBEUUpybU1sUVg2aG5ibXZUVmZNNDZud3VIUHpYZEJPZmFzUVdseDJRcnduSkdoOVp0cWJyaDJTdFl3cHR2dHdLcjk5elVlVkd4SzZUd2phZWZ5Umg0ZjhCbUtVbHVVZ0gyQXJDc2FKazZWVlFJL1pjMEpUWThDLzNpNDNIYlVHaHhiMCtkWCtyN0JNVnZvRHJVbXZ4ZDBTemVhejQ0WWsyNHc0L3pSWnRSYUxUVVBpWkFOc0JHZTNCL2hIY1NHeUNsZ1pXZ0RyMEMvcEJDaGppOXhoTnRCTDJiQUFaWUY2WVQ0Z1NhVHZIcVJQeThXdmhzWXJVNUZ0cGRTWVZwemVMOEdkSGpqL0tKRlR2UlZkKzUwUjNVZmg3VFFBYTBaY2RucjR4ellPSUwxQkdheTE2MnQ0U3pUWVlxcTRTemxGVXk2RzhxQXpVWlozUTJUYlE2L0xvTVY5cGJnUXVqeHp2RmVGYTFYbVI0VWFpTUs1Vm55cDNYNTEzcmJmcHNPUkhaSGJzVkNsZUo2b3dVWXNaMVErdysxd0JVRzRSTGhQZXV4Q0lhL2lxMEZtZXdDek5zREdxM2s3d2UxVWlyb0syb2VrY0lESFpBTDB5Z3kweDlhYjBNVnJ2SkpCYjBWZVpmblh3eVNGTmFUbERaQkY0ZmFhbUEvODZVcktmeTdGMklub0ZpWGE1VXdKNURUSEFGUU1CZkU5YlZMVjd0Rm9YOExOWHVhdW92QTZHVTBveG1VdDkrbGtObTk5NGpJSjZBNXBBN3hWQzl6M0hDN1dKbmtxZHdVQ3VaVXVCNWpScTN6dndiVEliNHIya2t0TXVjTndIb3hGeGZKOWtyZWo1N05icFMvUkdENlpKTEJuWms1cmdOTUdnV0ZnSU9EZ014aWM2WTkvcFNYejVrTHFzZEhBZEpHYVRpQWVGNXg1dDNqeHZyRVZ5YjZQNEh5cGFqaEtsTGtBdCtlOXJ5OUZELzh3RFZ5Q2tIdHcwbklMY004UkFDOUJjT3hHV29sR1Yvczk3SDE3b0xuUjJJY2VpK256UnVLTE9iU2ExM0NlL2oyak0xS1BJVG5Dc2ZqRDN3MTlqekV6WFk2c0tTVjhlKzV3MzdGaFR4L3VUZmVnODhJeVYxbEpScDVCeWJLVnE5TWFhVjg5VGQzMi9IN1Z0dDdKRFd3VDNPZCtGTitneGFLN2hqMmhzWlhwa0tWWmtTbjlIb2lTNnZDV0VOSklrNHN0ZjBreTBURkc3RDBJbDNibGVYZGNMVGxuLzZjSHhkazU4eEpPYUtuZHlTbklXWGsxU3krOENlUFQ2SUN0eEVjZXZ4d2NMMXFsbjVDQWVzdzllOWk0dTZKVk5YdTdTR1gvZW5LN3o1REFiYS9ZTjJ6a1ViTXM0ZldsK0p6VVhXS0dTOGk4QzFDYk45V1BmZW5LUGMxUDQ4WmxWMjRnN1NoWWJHUU9oWWRmZzcvQ1laVklVVVFCK0g3OG92Vll5VkMxQkFYWllWQ1R5Z290NUREUXZxZ21SdkliV2UzcWZrdnRPaU5JSEpRU0t1SSs0TFpmU1lYQ0lzR3dFb1VKWGl5NXF5U3Bua2NTaE5QeUhqZ0IvYmZDQzdaQWI0VmI5ZTdMVEtYd3M5b1F0alFoRGsxNDJtdnNITVFhN1c4M25MdWhUanhBLzAyZ2VzMWZkOGFIV1AyQ2tTeE5rQnA4amJ6Q3ZDMnZFNXNGYUhvZFRZSE1tN2c5UXcrU0hzVVgyWWsyRDFCUnNpK1NHcmQyRzE1SjFPMzc2ZFZvZWdYSEhZUjdZNnlkZHpwVklkSVVBcmlTL3ZHMmJlMzhxUXlNbWdWRDNlTlRPQUJiZ1A3d0VPZFpaVUpieXZ2dXZYU0ZmYm40SThwQXF1MVFIeFhKZUtIUmYxTFJiNTJXa2RYV0M0STk4NEZrK0JzbnY5TnF6amg0S05CS3UvcjBCMFY2SnUvVnFISWdWSzcxZVkvYmxsR2JVMVh3K3NYTE1VTWFlZUJRN205NkRsV2JIY3RjZ3RGZ2ZPV2dCb3M4N0RZUytFV25hNnh3NUFUMHlnUVh5d3lSK3FqTFFZelFIczZtdlRINnpFR0s4OVF5aEVsMFNxU3J0V2hOYlJpTmNxcytEY2x4UFFsd3M1cHpjVjRVM1ZHV042eUhHMnd6bFpJTmR6NG1IR3ArQm9sUUdSemV6NE0rUnhHUysvS2FkSUxUN0syMmR4OUxhTFdmRFdBUjZGbjFiT3BEcm9rZUU2N1htVHRTdnh6VTZRSXdVZXlsMUoyUjVYSk9WNkZDQ3B1cXdTcG4wYnRDNmNrMjYyVHR0WFRxNVh1MC9xaEZNdmh3eU81N0c4ejJGS2dPekhCQmZ6Y2FNR3J6R0FnbDAzMWxLU0xiWjFkQ0xMNzdhVlBFbm1aWi9MNGJCZVZWRFg2djlpVUl0RTkzT1JtbUN3WnB2NDdzR0lmMlI1QjFmbWVQdjB0R1p6RTRuQWUrazJmWFh2elpLdVBZWGZjNXdnbkpySFlLdDFaL2l6U1JKZldtWDhhMVRkMDlDMW55MGh5QWgrWk5NTllVeGIwNFp0UWhYQjI1cnRXTFlVYThwelREcFhSNGFFZWFYZE44RzJHYllndmJUTThuWGNQU1pON3FFdlFGdlc3TlRHb0hnK3BPcTRPRXQ2MWNzOUlvam1rdXIwNTRQZ2lGRElMZktMRDczQjVaOUdWQ1FuTjlOVUpsSnY1cU9iMStiVXkxNGVBekViUmJrR3lLRmNFRDB1Y2RhaEcrck5RWWc2N05rMEEvM0pMbFJoUFByaDdaSnZ3NHE5YXdiRVhHK0t3T0QwWExuQlc3M0dwNFdSYUp6enkvMS9QQVhqdmZ1NmNOT3piUDRNQ2lZaTZ0djZKWkdWalUvM3FnQWJOWFkyUHBTRm9PR0ZQMjZZK0VhRTdiamR3L3U1M29LM1BKTDlKbGx3QnFFR2QxZ3dVWlhCN00zZkpYSTlibDFxdVVZQU9mM1JtWEh4c2doQVNMZGRhQncvckNhaUMxNXV5UFBFRlZEZVNuWVdOK1lkbzkvYkFuYitZeUcweDVqd2RXWHFJbkNrSldsZFBBZld3bS9zQzRRaytSY2tLUDc4RVRmTlgybEZpaGxta1ZsMzlKWmM5YUpkSGNvT2FhY2VDci91TGJNU2NYdjl4czJRek5YS2lzcEs2ZGpIVDVVakhGWjZqQW1QVXdWNWRncXZLSjZmTVpUNmhQT3dBa1NleVZvSUI0SVBLWlphc2hocFk0VXJBamY5U1p6ZWgwcEFXc1JPcXcxNmtLRWJpWVQ5bzV3ek9HNnpwTmI5dGoxUzJ2R2FNNTBoMC94TEM5TUlOb0xIczZFbWF5aDk3bmRrc1dTdkVaWTJReXUwRnorZW9nY0Fpbmpaa3NqbCs1elVCSHBQRFdVSmJhSnY0dzl4R3ROT3U1bWdRZUExcG9Ha2xYTWNpVkFaL1Uyd1dEd09taWRjUkV0dVU1SkJzVUFOMTBQaER1Y0VlcHl1Yjc5aTY3VllXU1ZKUTMrTTNGbi9DN3dScTIyZzFYRFlXR0grdW5zT29zVjV4N05xSnkyeEZLRWtRSStNQUMwRzlZRmN1N2JZellIRjc2NHV2WUt6VUl3T3Y5alI4K1A2ZWx6TE5OUlFQWkZ6SWlxRm5JNnRibFY2VDZJdHNEak9OSWd5VkNqNXFkZlh1Z2s4UzhVeDBKTDZjc2x5TzdTL1pvVnhYZXFDRko4eGJpS3h6dE4wNnBjSEpBNEFWN01mcVdJcmc4dlRuT3V0Y1NwMWJqYUYxakcrNUNRMW1YMVJWWTBsZERubkh4RlhjczNBRnlESE81SS9raEhFS0ZrQ0R1c3JLS3hXSzdiYm4xb21zY2ZuTjBMUjhnVmpOTnVEMW5MbUoyM3Z3aUd1QU94Y1UrTCtVN1dKU0d3NE16UDhUdWh1eDhhamFVaGxyZHl6RWplQlNZMFZUbXNXNHhNNWc1R0V6M2E0elg2R1pwUDl0aGthUndFbEZsdHBRdjNZR3BvYnF0Q3Nxem1VM0dqNXpDcDc2c0xRNm1oTVpXQ0l5SlI0TTY5b0RlczlzcHZKZXZTdktJTS9BL1NETExTU09MVjhKSytLOFp5bW05cHlvZDhCQm50SkxaVmUwMHNQay9EQjdBNDFJSk9oT0NDcEgrZXp2dmErWmFVb3VaSkhxTS9IZE83VXlybGZLaVJpUG5Hc2IxZVhjQVZkRGI0WWVYNDlMRTNLZDZRZGtwNVRMdnBZQVFHT25rTnFIOUxUSTdiMXNmZTZCbit6VC9KdDdjSC9lTlJSTjJxZzA5TklmSTZwZW1wTE16V0RhTUtEaEdGbUh6LzRxbEl3VU5VUy9xSFNhREErNzNwVUNCMUhsM01STm04TkNOOFN0Q0RYR2tsZTBZdUJrdDVjYlljd0krcXd5TUlkajBGUVIvdDFTa2N4U2ZqMHlsWjZzZjFkWTBsRTZXS20rRWF5UHdqY09QUDZsakNNbUlnNWlZZFo2eGVTcHhzelhNWUF4cTZtbTlNcm9Nb21HbzVSZTZJVmIrZHdPVjhkUHo2UktESFhRS3B6NmVMaGpSTEdUai9LTy9DZllHTUU3LzJOLzZpejJmQW5Yb3kxaHlCMmhjYmsvRFdraHVMaDIwN1dmQ051TWtwcXB5TFI5c0hMQ0hWcWwxRGxYcEVQSTNLS0UyWmlTc3Y4Zk9IbjA3a0pKWjVyRzV0VTVEd3lLWTVZU3VaM1NST2psanBxclg3NnltcGp1eDdScmhYT0hoNk91U3Z4VjZ1aERoSERGM21OSlVKbG1JaGZqTlZ5NE1zM1hRbzlqbVdNcXJzNWtmNXZBR2s2MWFoa21FNCt0SnZRbE5obUFVcTluSTlLa3lNdklWZ2d3RXJGZ0Fqd0J5VGh5N2QyUzJ3RFBLYnNqR29nZnQwMTdhV1dLU3N5eTUxbDhRUWloZ3Vtb0FHdlFhb1FraWtjQnkzUWw1alFrVDJwd1ZnUndManJQZDlSOUNJY1BTUDVwZ3BVNmpzSVlRM25NYzExMjc2K2xhOGpHd3ZVb1BWMDA3OThjQ29MdDFxSWhUcURGTGFNZEY0WmpSczhpamFpdEpNZGNjMWZGREdtanJzbVNFUDlVWEtJQUlFTXlKVHhVSm9nNUhIZThadmI2WXdJWGR3aHNIbnMrMkdNK3FqVFBGU3c1NEtaY3l6NTdQdFlSZWphRVRtUmU3alRBWTJ4Z1dDeUpJZy9mMnNicEQzSkNRYVlZbTVsZW11b1QyVkNnclpTY1pLclBrTVZlUlFQejYzVWxPbCt5eGsyY1BKT1ZKL05VTnRYWU5XVVNmaC9xVktXRmxIWWtTY2ptNXQrbndPKytlcjJxNUZtM1g0enBRcmsySTBOZmh0c2VMa29PNnBPSHVhYm5iRlE1UTlxQWZ0cXNPLzdOYnhRMVVzdWJIVEZjblh4aE44UERXSTdyRzFpSlhpa3dBeUkrWjNoY1g0Q0RqdlQ3a0FYTytZVEIxdU55U09lY3Z3MUVvZjJxSkFWQXV5OHhEc1RWSkxMaVdvcUdkVm9GcDRHR3JWTFhGd0tHYk9EY29ZaHkvYlVPcGNsZ2ZCUXRKZnVxd241TDJ4NENDQkRwdUt5alhSVGNmc1QwTGlySUVhTmMvMGxITlllN0I3SFlQUlVpaXl5R1QzMTMyZ0R2dDRTRmEyVkEvd044blN1UUNDNjRZVjkybDMyS0ZkMjRZRWxDTk1CamR6SmN6M3FSR2lqSlV2WXZxTm93UkJQYXdidHJxUlY2S0dRSHM3VjQ2aHByQ2lSTGFYY2VLb0Uwci9qYnJVMy9VbEpmWlRuQSsydmpZQjkrZHJsVy9tRWoycVora0lwQmNwSXRvRis1SGhTOGoweGVHa3hUTllqU3B6U1EvU3FkSENoblVRa2NWMWRGTnpmNHNNWW9Pa1RZN1I1MnpYZ2ZWQ2NUYk04K3hBU2U4VVlFcTJyRGtiNjg0QlJ4OHlTY1RBbFBYdTU4NnRhOUtjanRmczFNR3JtcW92Rm1wRjdQV2lnditTcXZqQ29IbkVtWGhEa2lHVTFpb3NiOXd4WFhPMVpxendWUjVBWmFVU2F3dG52bVozMWJLOVBlN1RzUm1RUmtwSC80cHRlemlxT0NQeTdWcmRFWUtkVHdTTEZnT0h2RExqZ2x3SkhXcUxpV3J4ZmxFRW9Ccm5QQzhFKzhQZ2k0Ri9TQlBaek1wMm04ZnRiaVJkb3AyMjlMNnVlTDNiZDUyUFV6N1Yrc05lU045NmtnMWw5U3k5Mnd5LzhmWTNPdGxsU3k1T1Z5ZFhJdGUyNHBnUldabVA4U0RCekFUM205WjVCZzRQV01CUFNKSkF4UE9JR0UyQ2c4ZGE3UUtjdXpVNEZnd2ppdi9nWXVML1BpQzZVT2NDMUt2TTVUYW9tb0RyYU1Dd3dGWGlPalZlTGtHdlIzNm9Id2FmUDdDKzRJSmxnU1plMmlyTmU4VVROeTU4ZHRqS3lMQnNabjNzc1NySVJqbVIzbm52NmQ1MVViL3FuUzYzQnJsYm9vV2JXOWVhTG85d25Wa1dXcklPREtRdEJMaDJmTmFqWENEYktRR05YYmpNcVJadHRiQ3pTaWxzTzFPdElsdGFlWitMZmZla2RTMUhZL1p2ZE42Z245REF4djQzM3piNTVDUVFEZkluQU1rRVZwazRMR3V2Q0NuNVpVREpZUThySEhEZjNIV3hKUGdOTmUxN2QwelJTR3VOME9ENURMSTYrQlFzVkN2WGZjMWVEZ0ZDTG5oVWltWDdLeHAvOENncTZMRzNBNTc1ekd6ZFFSU29GVHljb2hlaHhEU09NVWVPWUt0SWlIRVJOaVJuNkVDMnR5NldIWFRBTXN6cE5LdWx2TGRwaDZrVXJsRzFtWHI1YUNSQlZXNnZQaElOdTJialFuTjBnZzZhME1xTEh1UW5YbEV5eE9PWHpzdWEzZ2I2V2s5VXc4VThGQjN2OVFNeHpOdkRUMGpPY2lncHZPS0d4aG1XcXpZdWQ0TDdYd2xDVVFTYlhMY3BZbGNRQ2d0TWEyanVreVhaWlJnTHQ1NnRnK0pTSmNFcldqN1hCaGtIRENyalB2TUhmK3Ivcjh5TXpzWXMvam5kTnMrR1lIUnJPV1NkOVF0bzdBK0VpZFc1eDF4d1VQYWZudzd4ZnNuY3RydkF6UFptNWdHUmxRMTJBOWpuemFPaVNPU09ISElZTVBWYjloTnppaUo4ZmFtWXJ5cnB3TkFHcElZM2RmUTdMWHA5bTRqdllCMjZFbXo2aEZzQWdtMWp3R05xbk1ySUZlcm5hNUh6eE9EN0hYVE9uWW5mMUs0NzFDUTJWUU82N2FFN29vMlk5blFITmhSMUVMRTd2UloxTStiTnNCd0JoL2JyMTZPc3plVFJOVVNpVjFOUHgxbU1vSnFVMFJhR0NNTEE5NkhVVXFoQ3ViaUdOd3NvOWUvZFN6YWI3VjNHY0htQUpIMXFxd0Fmd3dNRE5ScVRZOWJ1cTU2RU5rdHNWODM1c1M3aTNaeU1OaGtWSlV5ZC8zMitPZG1SNy9MQmNsZTN2VkkxS2w3OEtIa2xOem5Cbk10VmZUUXdYT2FWTFBVQVdJakZ0STBHd2xtb003Q0RDWFVHNkU0Um5UTG5tRkF3N0pobnZwb24vTXYzTXJldW10UWIvdmlJVjF1Q3IzNldQR1ZydGVRa2p4SGRBeUJ1NkZpSnZxK0lheWlRcUdBQlZwVHJobk1vYUFmWjVoMUVFSnE0akNINkJHMldrU05LdTFiZXR1cC9KM3dqVlN6R0J1aEk4NTg2dE5OMGtzd2hRSkxmTjRuZU9saSsvRnNrbjF2Z1ZkOTg1WlpiRmQ2a1BiWFc3TWFSRU5pNnJiVSt4aVpkZXFPMlBBeGQ0eHNoSUJmak9IYnI5L2g1RVFtcm16ekFzQWhHa3A5S21WTkQ5dklJRlNjY2J5UXBxbnpwWnlvT1VOckpiQ2NqZUJ2enM1eHlySXZwUHF4dFlKcFpCQXlqWVU4UHRTUlB0QkUwT0lhT3lSbjJ0czFRdmJFd3lzNmw5aCtQQ010czZBd3ZJMmwyeG5EQ1lLZkpIaXFLUzRXTzVFTzk3QWtlRVVvNWxVRUZjV2pJU0YrNS9xRGNFUXVPdkt5T0ljdVJaNUF5V1ZYRjRBYSs1NXRoT0RoaGF5Q0dDdnlSV25PSm5OYVNGeGdsR2p5MlZFZXgyeW5TcXh4eDRDc2xtazFFNk1QVFdlcUpZWEc1QnlmVklFWkxLMjdXQzU5b2I1Unl1cS9mand2UHlFdk1WTlp5QVNFNDhjUWs3Yzl6dXdsNlFXcWVYMEx1c2VDMThiOXo1UXdSQlpDcWJMMFdoTE5JOGVGdDg4K1R3a1pvcS94bnRla091V3N5TzY5V21uNjRVQkVadGJZTXJwVHI5cmN6QVVXbm5TOHZvRm9GWkdMbDJnOSt6L2hmc1kyVVQzQUlUaWtxRTE1NjlkUjM0VzNmNTNXRTB3VWdJUnVaVVpVVTFGMzZ4aWlURThzdzhNOXZVMEdhcDZMK0VnY3drbjZsRTlXMUg2K1BySzBTNTlPc3lUN05KWG43cFVoRjRtQnNIMmlicExLVXRFWkQwbERJU2s1ZWwxV2F4QXlScEhaUml0elpzcjR1VE5WUWZXNVBQazFkd0RjcnRmZW14ZFllazdaKzBYakVZbldzajRRZ21lNy9ybmlvT1NNRHVUVmRrMTRCVy9MTStIQ1dOaTA5YzlJNEJ0bmRvMldqa2NWY3krclA3aWhYME5sd1Y1UHBLNTNBMlZGRTE1OWtLWkh0ZUhjOGpYYVoxVFhqWHd2VitEeHp6YzA4cWhqQkt3RW5rcVZ4U1JoOCtYeUw0S3pWNCtnUHc3RmdaMEs5ckRsYndGSi8yeXBwUVVkUkhGRGp1RnJ2clRrTUN4ME10MFhob1oweHFWdDY1bzhOYUhsdHgyQTVIRjZKNWxKdHR3QWVEZ2llemxySXJnSERVTjNoSkYyMFRrSzlJSU9xMTd3eVFNZC9VZFF5QnBsSVNrU0R0ZlVZQk55cU9IMFVXZjJ6anphOFI4aG5hN3lzSWdQZXNGdlRrOFFEVW16V1BSckl4YktwVGw0Y2RudWlOb3Nla2VnZGNYbEFOakh5RHo0MmJYa1N0V2dkSjJMSzU1eXArYVlabnN1bDJGd3UrbEhFOUVxNUxCNEJJNzhqYU1nR2x3SDZFR1NWZzBKOXIyb1RxLy9PNWtwRzdtTHVpVUFENEYxUFljVFpWTHI3VjJVRFo4ZGZVS1B2TUlNamRBeUdaRkhWbllJWVlEY2d1ZnU1dmdFbURySHBISEZ1ankrWTFWamZrWUVSRmZiaSt1RWdjVkUra2ZESEZGZjRqekJPc1pTdmh6RGFONks1N0l3SWZORlZZRGxyTE9wSEhGek5HVnRsL1dUU2JYZW5ic2o3MG9YdTVtYS9sMlc5WU9wRHpOSERnYStqbi9YMXAyNU5Iem5iQ3pVWUdBTTE5ZzJ0T1hWMWlpanhPaHcvWWQ0emhRZ2QydDdLUVBNNTBSbVE0bGNTSDFHbFNIanRrVnBLdm84V2lFM0RPYUYzcHl0N0EwK1A1Nkk1UmhaZXVROEtaWHNUaTlJeWRhUXZsZXN2WTcrT0o1Q1RXcXpIdEFNME5DSUl4WGxxREhpQlZzbHRZWG5mUm9ybHdQRm5ZbjhpZlllOVNYRmRlUGc2bU9NRlBVdUxsaVFmTnFkeU1FUGp0bGNPMndOYkhzTWF1L094UDN2WEMvQ2tudFZoc0FzaUd2NUhnR0p1bitON1V5ZktvUUZkelFKa1g0cHNweWthQ0FWM2RtME9CWG9WQXNHOG9xUlBKMFVmUzhjMTBUOFB6a3VoQ2JWbCtuSnZ3eGFMMGUycXdVR1ZFM0xGaElvRnBCcXQ0dkx3ZmNSMjRDczhuV1oybDRiNndjK09UUDVIWmp4c3diMW9ReHJMd1FpNmRpUkJhQ2ZXMVBZWVZ2QkVJQUVYV20rczRMTmRpaHRFWnRlZWVsVEZFN0xvWXllVEVza1dvT1ViOHVnZkx1VklrRVFnWms0QVZJTThQKytSaUZyUklEM3JXRm56S1lUVXgwZWR6bFVaSjI3cEtmbEliNmxjd0hSOWRSK1ZHL3gxS1ErZk13b2x1cnk1dTA1MmoyV1h6V04xWmQ0ZGRtSzNvQ1I5MzNTY0V5clJKZnNteHBDdjY4cndrSFJEdHprZ1NYbDc1YVU0ZXAza0wxMzBFSjlLVnVWZXg4djFiUUtINFZ6Vnl0eFpvWnFmR3B4eWk1Qmp6RFZIQUFWNUVUdjNSMnRGSmk1VmQwV1NXSnZQWGtBQmYrTXB6MjBGVDhwa29UbytQZkN3dlhTWVU4b1NweDgrUFVBVHNITWVqbDdETlEwVThCME16KzVxV0RrdmNwM0ZrWElWSXRySEJBcHRRcnFuWHR4RWhtL1BDd2ZDUjlrNEx1NlZ0ekxaTmU1UnA2MlF3WUNGc29HcGxNQUpoajJwd0JzMXh0cTZmUG4yU2UvQ3RDRU00MW9xOU5Qd2Yzc3dLK1ZxTmQybWtLekNQZWhrQTliVE1hOFJCK0VmaDhaMWR6QXU1cnVDOHJpZDZ0T09XTjJqSTlNV0E4RHIxckJ1Y0FkY0l6ekdsV08vbGxPRmdEWXFxMEg0KzJ2dk03bmZ5ZHhObkhLazMwU3hxQkNzemxYUmtIYnhyQS9zcS92SkU1VisxUHZNeExMT3BYZmV6L1hXekhIVHluWi9aMjJJN0d2ckhQcmhBWTJweDhzN3RkOUI3SHJmS0pCQ09YQk9FU05Ec1hXc04zOGJtcmlzNWhpL05ZcWg5bUdiTytzSmIrYzhFZnh6RjI2YmxrS2F6ZDJHOFFjL3dSQ3dhbnFJQnJRYnJvd0liWjBwWTZWQlVERmJ4cW4rS3lKWlRKYnRaNXhUajhvK0RmYnBKY1VBMjZIeFFCcTV6anVtUXFhK0Q1d2NLVlJrcC9zNXF6R011TVIrUDJqUTFQNGg4REJSaTJ0S3RNc2dsL2RHVXBjdytDcHJuS2R3cWRxcFMvWXdLeU5XSTVtVGZxQTd4d3R6Z1hpYmxKRVI0b09ZTHBpSi9mTzYzUjFzMzZEcHZMRmcwbmNpSUd5MjU5STV1dzM0b2FNbzlQcG1RdkRvY2Q0STVkNzB5OHdJVFJxT0FHTWdoTkZWWUJwdUlUWXg4ODRWMGdUTGxJbVFqK1JnWkdhNm42Q1JURnEzZS8rOVhFakJXTmFZVUExVnZwNzdGeXdYVHZBTkRteXpYNHBPcHAyU21CMUhXbFU1V0R4THNlRUlJdFNKTmNiNDNNUjVENytoby94aHNaalU5K0hDYm9oVE9MWS9abEV2TFFjM2s4R0JMRFY1M2Vtb25sZXNNNGxwZU5OQ1VranBrTjdFY3JTejBXcDMxY1ZreE5CQU1aUm9aMzcvOVcwaEJRRnhxemtIKzgwcnIrdzRyM0tKdEdQQzlkS0lMMk1tblZPVUk1V2Jac2VRdlA0RVR6OVcwSmtSaU5qSDRvSEdVek9lQjc1ZVo1UjQ0SFlCRFVDalZMenpiaEw1clV1Mk1MS09iM0hPcUFtcUtXbS9udmtweWphNUFVOGFIQWJGMjgyWnJVN1hHN3F3RDE5bWg0S2RlMlRRY1F6NWk4VCs3Y2dEQ0t5dVN2NzZ5NncyMTAybkRSTyt3UWVDUk1CR1EzUkNqWUE3b2VlT3FwUUdDMlBUYmxjSndyVU9tVmxBb3psSEdrSDNwUFhQZ1lKajhUSUxRSUtYUEdOVFdkQXMzbWh1aEw5S2dDcUhhOWhuTlFmejFGQnZzMCtia1ZZSCszZVNkMThRY0lEQlVyN3hmTXdEejlCOUxDbVBReEpSRVl2UFVlQ3MvUk9LSDQ2OFJRdEpxSFR6NlVUR2lXNXdnekxkT2VwVzJTMkVCd1h3ekVxRGpIUzE4Q2ZtS3M1cjU1R21lMkVRN1R4eVJLOXdyRFdSdUNwVUhaZmxyVDJLdFRzWWh1ejB0OHM5dEFHclhxZjQvOW45a2xqMzlHUUhDUEkzOTRHelY3WnZSeXNhVW0zbTlMR3BiNHVDZGM0NndCdmpVUW5wZnE5eDEyZEFHUmJYOVBGSkgyUGo2L2FFdmU0eVVaVmcrSHA4UXR0eVBnOVRPdFY5TlBiUjRFdzc5angzNlduTUJWalFjRG40SW9CRmJINHRNN3RNZHAzTlROWmtscUt5ZVFxc2FGZGU4RzgxWEZNRWNwT3lRczFYQWJ2Ny9wcktQdWFyUi8rSEtnREtteWxiZ3Y5NTNZUWh2Z2pXQTBsWW9BcHFLZTkvTWxKbGY2S1RxeWROSWRCSkhOVzl5dzk0WWs5MUZLWHIyRlZ2eWNHam9QS3hiNzlKM0ZMMVVycnkrTFpkTXBhK2ZOWjRsSytMMmZTOXFZNm9BMEEzU0dmcWtvb2ZYZ2FXYkZoNzZSQm1NdnNPd2pWS1Bja2F4eTBmWFo4VWpWUDV1RDdPN2JFWWcxS0dwTEYxNnpQRGpNeWpSTlR5Y3Nma3ZDWElJNHBSa2pFOEVsNTZzd0FqbU9Ob0hBdmdTajZFWlh4NDNlMTRJSlh6S3pSM3FpU0N1eWx6VitDSVM4WnNtVkdDWUtrVmlXYTZyMU5aTUVOS1BzaGlmU2RCQlZ4WktkeG9MUzRYZXFPZ2hyZjZoTlRNWDhsK0doVk9OUGdhY2dRRnlQcWpjZHlHRmZWTDJzT1ZVS0R6Z1h2Yzc1MGluWDFOaDBRaEJMS3lyMGliUXBHZHpoTXNoRklTZ3RIQ1p4Mmp2Nm1ZRnRzV2xRVXp6ZVJLOFp5WTk4WThhdW4rVzdETWdKM2pnSUo2dnFRdUZSY2pqVWlzWVgxcEkrNGppWi9jTnk2Y1BZTzJBb0l3UjVUcXBkbDh3MEhJQVZ6V0lLWTBTcTFsay90YWlveDdPZzBhNVRJOWNUVkJQaHhrd1hkdlN6OE5VNjlTRmxWYWlVYWN0Q091eXh0bFV1RmVDc1NGWFJuMW44MmxVR2J4dk4yWmM3ZnJ0cnNQclg3S0UzTzdTSStZdS9zTnlFWmFnMDJGVU9rR2NBaHRsaXhDK20yOUdCSWNlWHdJMThpTGFTTGtsOEpQa2dYdTAxQWR5V0ZlTWN5a21iSzhkKzJoTTErQWZjY0RuK3Y2VDFxdnRiL0FoZzdYM2FkMUE1RS9SNlBaMjNDSEhTUkw5S1NjQ1VHWEYva0RIdFB3eWFkWU12dWhVSXFKU2pNeHpNZ1ZqUStxdGh2eXFRdzNQOFpPWDRkNUpkdjB1ek1LcUVkeHdGMUkwRThLUWdSQ1BVQ2YydGlzZUhjbW9zbVFhWURKWFZpRE85Q1lGYW9Ma2h5ZWdlRW1lYldvRlpZTXUzOVNLY0NITUw2dHNuakhBNmpvQlVqTjIyb3dXa2RjcVlwZTlqYytCMVNjb1JCM3A0VS9PK25pMVNtZkpSSmpnN1NZQ01oaW9tdnJVaXovVUcvek9Va0tKZVdUWUFPck1Pa1Z0MzgweVJaSlQvaFJ1UFg1UnhNOFpjR2V0YVhvLzc5cFNFUmFNeUdIcWRvWEYwanc4MXJxVG83UkV3UGtnNTNUOGNhQXdzeEk0N1NKQ3hSYXdDMmJSSzBmWFMxOUdLc04yRU1uamJtVTJuaGRKNW91Q0NOM0N6bHQ4M0U5SHJIZ0tNVDhIR2k0L2dMbmwxYm81RWttblAvMW1MaGY3SjRTRXc2WXBvNU02V2hyNmJpc3gwTGlFTTFHYVJWRU9SSG9pNC9zUnBGRHdDRUtUMUw3MmxzODNUUkF1RWRVeUdYWmU0RlQyajJYdDR5R01GK2lSYmFaZFBMNzV6eEZIYUlPVjAxYjlPRDJCb3duOVQ5YWVZdkhhNnNsOWdzN1ZDbU4vYlk3WEkwL3JnMm9lKzNLdUVYRTRGeWxjaVlISndwOG0vcnlWS2JNU0hlMmhDOTkrb3R5QlJOR2pJZktCMzdzOFdwaVA3WmZFK0FNZUo3TEJKMFIvanE0c1QvMVM3VzhKakhtcGJubVFrMFRKZzNaVTBFaU1jZTRRcThWNHovYldhV09NNmJnVUg5aEMxNlh4YUh3R1FvaEhkNVhRa3FZL0pqR1dZUGlNblVFTEFjV0oyL25oUHJGbEs4R2hFVjdFYlBjVDQwbi82OXNwVFFmN1lGalpkWVZ3TXlBTXBtT2pUc3R0VUlBSjFHVTQ5b3psS2JRelNxU3Jsb2hJWUZPWHNUenhQdzFOWVdFcVdWeFBLcVNpSS9EYy83SFdpMHd2ZGtkZURSUnBOZG1RYlF5UllKZWlaQWM4M2x6aWQ4bFZka3R0dVRweHI5Nk9YYTU1RUZGWG9XMTZET2RIT29YNE9IZGxsTVlRRUNkK2JwaFJXdkFwbjdmTnJTbWRKZFpBRENxVzRFYURmbi8yQ0g3R1V0RXZ2aFY3OFNXclVpa3ZKTFBUTkZaUTJ6eWhPSWttKzFTTEV3UldIQUpxdFFLTUJUcTN6Rms3M3pWVXR5L1VwOUZhK3dpQmY3Tm5VWDE3UmJDWUJiTnp4TDdYY2xRZkFlUVNLYklTWlFyT0hvcFc1b25QR256Q2dRVmZROVZEQ2R1UjJ6RkYxU3MwTS9OSk1TMFh1ZDhvSm4xQVB0U2Z1eXhOWXlBRnBKazV0OEpCeVhOWGMvTU1jaFBQRzh2U3Q2VzJSYmJhYjhIR0tOUFQxbUhPaUs5M2ZVRXJTMXRaSXMzYjV2K0VJVDdwbFRjZDEzVVBTakI2czlha0JCdHp1bXgreEJaMnhlSnl1RDh6SjhCV2pHVGhqbjVzNHlMMmJrSWpFRGM4OU1uVnZHRlBBTEhlcGRMQ25jdWdGR1grOHdMZ2FVNVhhejhwVGxLTFhHSjU3c2ZlbG0zV3B1L0Nlc1luVkpmNzc4MVZGdXlwbTNaampRT0k0VCtVN0k2SHVOMFErTVJ2NXZteDV2LzEwV213ME1pM2Z6ZWRLeVVpS0pKdVVFdkJ3dllLTWV0dVUrc055UndBN0d4MUNTSmZDNlF1OHRBMGdEcUE0dExmbUN0aWhOV3dtNC9ZemZDdTZqQU50QlFSN1duRmJoSGp4QXJzKy9ZVVhZbEhFUUx6NEUxeTVsbUxhblpiRkE0cEtMa3FIVndTV3BsYmhRbmpQZTM3ZytxeWFCUks1Q1QrL01VVG0xRmR0YmN2alE4V29xSk1jdGtNeEljd1V1bmxkRXhIUXo2eTVzcytxRHVJSU53dTJnU3ZTM2RJRFVUUmpxY05Md2JIZUxMbFgyS04wbkZHaTlvVXlNelpZMVZ3QUd1NG4xLzhHRExEWHJTS1JFR1drajZxd2srUGl3dDBaWUQrQjI5M0o4bnBuQTZ0V2NRSmt3YjZ1UVM4cHRXNTdJeFNFRG9ycmZyNmFqWjVtUVg4OUdoNDhBelNzNkVpZjFnOTQ4VXpNczc2OVltZ25EZm05WFUwZVlBNTVJcnJ3SFVZODJSWnp5VzdUeCtvYVUwOTNrSkNQMEF1eThPTTUrRE02REZyRFhaR1JRL0RQVW9rVzc5bkpHVmhWTU91Q2plaEMwWGlhci9BYUhUQ3M4ZlBRSWFhQThsdmo0Q0MveFVvR2Z4UnRFNkhmd1ZXMmptUHNiL1A5ajVYWnROaytSQkdTaUJCQm9XYnVTVTNSKzZjUXY1bkZRc2F1cE5yQUV1Sm9YNXhvMzRNWitpL3JLUktwb3BVT25wZmUvZHZxcytLSmFNNTQrSktMZ3F2Vkl1aVlCNVBFREtRZEFUbTFoeWxpWE5jaXBDb1FHaElncDFHcE84SU0yMVB0aCswVzZ1c2ZDYmY1NjMvcDV2UXpVU2k4MDV2Vy9qTUF2ekZrMnpBSGRCcTVUb1RPdEV0REFrZnpwbldRR1kvZEpsdEM2cGd0VHo3NDNwRitiMWZTdmx0T1Q5d0ZnK3BmcHVkOFE5WDZSc3dSb0xoaWJRTlB2d2FXei94RWVjQ05RQ3d4OVQ1SkQ1Ylk4VFhRYisvb0dGd3BVZ1VaV2JKaFBlYURBNmhudmkvRWovTjU0L2MrQmVaRmwvOXRlQ1FRM0hFZ2NNTkdMeHRPMVRsY0swM3FpOENOWllXUUxhSG1FS1ltNk9EaEJmSEt4R0NtRTBwQ2o3UTdTMW42ZCtHZkkvNlNFalYwa0FqdUtOMUlYdC8vS2VWNnJ5dWdmVUhGT2RINWQvSGl1L005SER6TUN4SzRWQTBPbHBQWGVjRUlQUlh5V0dBSmtMRFFXc3lwcCtSb1VZeGl3Z0xjS084NEdlRzdtcVdJcmI4dDJQdE8yYjNpeFFYQTZ4WkpYU2hhSG9CdFFSd3plcFVlTXBYSS9RT1ZJUzQvN2srYVFEVW5pQkJaMGM0WVo5VENVb3cwNjFHTTRFUkZZbVNNSW83YmZqUHViZUFSMWtRdWJCZlVIL2k5RWN1dFkxN2VibW5KSkFiRWREcGFRQTJ3RFZTMGwrdXloN3AvdHlFMExiNS85T01CemFFOWZ1dWhVV05hZEFBdkQyanlpRjlBNU1IWU9JcU1TUUwrSHRoS3FlSUVqN0lDNTZhM0dYUlRtYk9pNmIvZW5zd0xmampndkpKTTJuaWQyMG1MeWtWeUxGdUFpWWJ6MU1PQXNabmZMK08waTNJUWcwUlErQ1U1M3NtblNrZG9IWGFzU2t4REJMbS9TWEdWNzBNN21HdWRjY25RRWVuM09SRjU5c3oxd0JXNG1WbkliWVhhYm5UTVJhV1ovV282bmhPOG43NTZpeUVuR1NuKzMzOGE1c1g5U2dPSVBDay9VWVpOSXVxQUJ6RmY2OWlTdG5iOGVrdVVzQjhPNDlFK2xGQ2Z5cDhlNE1pRDUrcGFkKzU0dDFYNk1Rb1NxNit4MDFMY2ZTVkNVZlZ5eEVXY0sxckFZNDI3MU5nZmoyOXFlZm1NMXpBb0I2NGdveFpIamNaWnlkbWxVWVBiMjFYU2kxYW5wQzdEWFRDTmpvbUttUk0wNWZOUkFlRlkzSERhemZUSlhXdE8xVVExdUYrNjY0ZDhEcmFCQyswc0N2a2J1N3p5ekR4VGIzMHBxb05qVEI0ODZXRjZzL2tPN2FiUWNENVByN3JXajRoZ2RkUGxGRGowZDFpNFltQ3NBREpMdU5nZVdDbEdxNnkzSVFNcHhUUE1uWFFZV0lYc3YrSXkyOCsvYkJqQXF6VE9DUmNjck4zaEZla3prV3ZzbDFmbytZK05MNWFBTC9BeXJJRnBVZXZmaktrOTVXVXZ0ZFp6d3JudDVqRTR5MWRHUHZQUzdKSEREMGZ2TS9jdW5qT21vSVp0NXJ6NVdleThQRSt4Q2IvUW1jUlZJRjJkQlBUVU8vSWtTVmVxalJEQTgxZU84MFFmcDNiWS9hdGE2cXZRV1Uzd3Q1OG13bXVZZm5jYVBYamptNk15dWNzOWlkc3VzaitpZVBta2FlL1pqRFQrbzhtNjZndy9wbW15RUxEWHpST0ZJUkx5TEtueHpjcE4rRGRyWDRkN3pRSk5xYmUzclU4aUFMbUFrUUJ0ZUZVdHlkRkNzY1F1cUJuUXZrT0xXbjlocXRxZkdzRWhWd05XVHl4UVpOUGVlVUNDam96cWkxRURKK1VTTml3aXI0TXVHakdUb25BZ3JZcDdldFJoRHVmM3RUL3FTSHo3UGdweEU1RzdybnIyOHJGUFBER1kxeHpSd081NGthaEF5UnlGMkRJWEdQWWo4d2I2UCtxNUxoZXNBellpYkFuUGpFUXYvVDJ3RFVOL3VtbVFoemV6RnJNRXpBRG1UYjlmbys2aU9BOTd4b2FzblM4YXh4aFE5QzU0TnJDb0Q4SVpxaGtyWDhMTGl0alY5TmtZL2xYMm9DWmJrQVRpeDJLMXB1UlRCNGVzNDJhK0swU05SQkYwZFhKMkV3UUJlelVpMEhLRng1eG9yQUZPNDlFOS8xeUJRc3pFelQzdVRVSTQrOHhXdVFOWVpUeXFycmNKUmhHaGt2Vjd2VXFMWHZvOStSb1JORlM4QnVWY0lxME5kWDF6dmJYY3ZKVGZtMEYrRjVlODZUdnpsNml4bzdCVThLZWREQmZxczZLVlVFMmhQeW16TVQ4SVpycmxDMnoxbG9sb1UzejNyZy96NTBHVENFM1B4bU1YY1A5LzB2VDJOZjQ2ajVTQytBR00vWDdab2xwWEpqYkRLOTZGQ3BFT2hOR2FMOUduYWI3UXNGenBLWjZzU2M3dXhTOVlGZ1FEcUFuZTgvbmlyNkUxM3FVZStBUnc2Mzloem9ZRjAyeXh5M0hLSWpSdG55dzE3RHUxcERMRHB3OU42bXFGV0NXS04rWGx0MWpaelFFdjJTbEhacVI0bWxKekc2N055Z3h6THBVUlRTWURPWmppZU5wdmNERFlpRnR2M0xWTFBpMUVMdWxGVHVmaFBJZHF1dkx4aStaR1NET090OHhMZTdML0NxQ29HZmRRN0xXOFJ2SEZuZnhSOWlHV2pWQVROVTYwZHZtendjMWxvQ3VEZUsvTWM4cnY4QzFnVTJOdGk2TmFuSC9WRTRoc3gwQVRUMFJwSExyS00yZ3M1S1FmT0taYVhwQjJOR3N6YnBjME9xU0lvbng0bXRPRTg0cEJ6T2VQSC92VnNYcnpVM3lFVGRER2t0S3VmQjU5T0hkb3hSL3ZUYnRUQVQ4YTBTaXkxY3E1aXUxNHhzaURsZjFhWEdZc05JdUVNdmtJWjFRMTBEcHdRRDdzLzNJMy8xMW5rczFXcmlTOXVxVEg0cmI0dHNIWktDQ1B1Y0p5NnFzOTNsazdkNHdNZzBBT2JrUnpmTjJvQVVrNVJkQUJXTHE2eXBDb2hlWHNZWVk2M2NEQnFIM0JJZFVsSmx0NzI4eElBeXFmbmQ3dkNXUHY2RWJsOStvRGFlZ1lmKzdlTVE5Rm41dHNHMGkyb2ZGb0U3R3hNcFJLUFVIcE05djB6NnQyME1aUnN1ckg0Q1NJNmlPeTNmOE1DVE8zcEcxVVI2R000NFpYaWxtVlhuU2JSOFAzc2d1bmdIczNWRjNQVnN4WXMyRFpWUnZsKzk0cmR6QWlneEJybWR2d0N1K0FpMWhTRUpQV05raU9BT3BVd1FpWGVpa0VsWG1rYTZBemVzMXAyczV3NUY3QUN5bGhpS1VjU2RKK1IvWVlzcUtZZlhOaGJPTGxqL0EvKzZMRjl5RFhDdzZSVmFoL2dhRi9NNlRhUTd3U2hOQmgxTUg4YWV6cGdpb3hwcm5mbVNWRDdWZU5USlZXSU9tRzVCT0JLK1dDanEzOWF1YzZ1TjdZK2trQkp2dnVQdk9KMFFqU0lyWm93akt6aVdQaE1yY3BYLytBdXpib0hVdmxJQjZDeExJVzdFYnh2ZEljbHhQSjhNTUdzdDc1VTFTRm5lSG4wOXBucmF2c1hzT3FDS1BSMnE2bk5UZlh0aXJoQmhudjlyUVM1SXNXWVZBNm5pZmNLaitGWUtCcXk0bC8vT2NwZzdzMEtyUGVaU0w4TkRHZG15QmVvdGRKLzBFNTdiUXZiVi8wU2lEeVFKQUhOZUoyMXhTckxzdTBPOHlMbWE0dWE0ckhPTjEyc3NNM2JjSHJyRjRTKzVtdVQwTzRYWUhobUMxemlmb3lzNS9SQnJjZW5WcVV3d3ZESHpTcDN1TWlqdElCZHE2RHJQY0l1TjBKR0FLTFZEZGNQKzF5UUxiRC9PWk9zTENkU0pjQitnWTZXTlFkSDBoYUVESk5DSjg4dUN5b052NStPOEMrSStNblZpNXB1T294dGl5VEN1QW1PTk5zRFlXakpBWGlYQ2lTVXhXVHI3VE5hZ3poZGpuaVltYjV0cVNpc2RKNnZVTlhGYStJcnhUOU1PYWg4eC9hZzc5ci9abUF5cDNjWUVtcWhxeFZEcUQ1M2l5S1pyanB3N3pUVFdMUXlITlR1RGozOFUvSC9JaXZTN1FEbURKVHBLaFdnOVZVL1Z2Wno0a0ljdW1QSTNvd0s3STRMNmdsNGh3V0Nobk9SZDhsKytEWDFwRDR3Y3Q2a28wWW9hTGJiK25mK0IwOTZHZkJHcUMzZDlxYlBxU3dXWncyT09qdzI4K2ZIbTkyVnBuOFBOdXFsb25xVThVT2p6UHh0cERlRS94dW85TzRHT3Y2VzRBV2grV2thZWF3M1A1MVpyeEczeXJBNno4cGY2VitnVEErWDl3YS9kRlAyL0pOWXkvcmRJQ2VMSXRZc2pZZFpBQSs0SWxPbTFMYUUrTEFpak5NWGliQk5jbm5Sc3djQ3FISjRVbUVOQlBhNDNIM3Qwa2JmVkF4dGI2RU8wRmV3dGhPWnhpSmo5TDk5RkZvT0VxK3ZJY2x1NmR0YWlOdVlYbUl4NkxUNERzaGlONWVLQ3ZYSCtEK0MxOXVmSHk2QlFZRWFFbEQzZnk3eGg5MmgrdEVBVjd5VHdhZTJJZHVVaTh6dm1GMUFYR1dhNHZGeGl5N0NHRXNHaVJobjlIemlYV0ExS3NUK3JadGJaUE5ydmZiWEZTb3RzUXJ6SlMxcWhKaVpGL0REalVxSVBGTWlDMmxpSkFQYWxBVzRwdVoyYmlBbW5iZjIzNDg3VUc2eUUzT2dBZjh5N01WbHBoOWRKYjhMQTZ3ZW9ZZzhneWpuc2h1empNMzJtUWUxT2Z0azRabDVCZFNqTC9LRDEzeWZtc0NVQzA4Z3ppODkrNkFTeE8xVS9FeW1RSThzdnorWDB0RGpsOEdxR0RFRjdaMkVheGJObnpCeU1BemxlUkgvd1lTbFE4YzNkQ01UbE5SWWk2NTNibTUwd2d3Sm9wUml3WEh3N212U1VLdVRDaW9waTl5U0Vwakc0YmpPNjhNbG90eEx1MjI4Z0ZtY1VBRVZzTHIxTXk0bVhpTTVDc0FXOGFXOUM3UW5IRUs0aGFNY2F1K1ROY0Vtb3pxcUVHei9pdEFmQkI4M2Q0VnQzVkhCRkZnV0JpYmhVMGlsRm01OEZ5ajllRnR0Vnd6S0Ixb010QzA0UWdhK016aU9jbFY1aWxSVFphb2w1dzExSXFPeWpLNEo0TFNodUdNRGJYQnlXNmR0c2JCZ3hwelgrYStuM2V3L3FPUVZJZnFROVQ1bHNhVFhwTFlRWXZoLzFtVUszVGRuTlVSMTBNVTVVd1g4UFFQUnBlU3Q2dTAyQ0NxekFLUWdYTzNXMWRxNXdtWWI3YnFCSG1lNU93LzZRdmVZelVlcFdWdlYySyt0bTVHYlIyTjJqT1FXbUpPQk1KS0xGYzBCVEpjYXRxa3dCU3ZkY2ZuN2dtY0xZd3ZqejNxV0g5ZW9wcmMvR2lZVnZBVjYvYlpjR2JQajdpcWI1ZDJKRE5aTk4yWTc5bjJ1QmtZdVl2MDU1TUFoRmIxYTdaSHYxbzFBaGZoR0ljV2hkbWlZeFMxdy9ReWJYd3RCVnRPKzgvcVVXcmdKbEUyODJXVGFtMmU1SzZDZzBZbmIxMGwzb1ZubTgvdmx0SHVMMUM5Q3hreUl0akYzUGE3ODhYYlFTVGNTUEh3Qi9HSXMyK05aTGlnaUtoVTdxUzZXQW53b0o0WVVuNVlEZ01kSnhqbksyemFncXE5QUpzdndTb1htN2NXYll1b3FRSVdKWS9rZmtybmM2OXNJWG44dlJ2ZDlLTkl1NGdONVphUXlFaTBSMmR4algxdlJacUFXc1JqWUhlQXdNWGhINjdWQjk4ZkgrOW85eTZXUDM4c000WDdjZ3AzS1REZ0d6M202QjBWTEF3Q2NneEM2eFZsdUpwMW01dVFxYmppT3c5cEhJSncwK2duQ1lVZHJQVC9kWUI3dHpxV1gya2J4Y2VaU2FPaGdJTGZSQ1QxNFM3OThjQktmeTRoNEVra05BaGZVTURhYUdtbHpUTkpIRFVwWGVRUEc5T1dzdGZMdElqOXJUZ0ZhemxrSm1pUGNEK0Z1ME5yR0hyaDBjNERUVkhMQ3pCVHQxeDNGbllkcnBVRTlZZWJhdjZmbXFpcFg3RWFlM3U4ZTdLbEdjV3Q0czk4alR0aHpZYUhCaXJnWk0xUG9YNjJXK00yaXUwR0ZWbkVlbnh2dzFBVU03eDhXYnJhTW1pM2V0dWNEVThubWVHcVBlTjgxZk1QR0d0K256aUtKZ1ZNcFVCdmN3TmtpaVhNOWZYU3Nwa3hBclVWZlAzN0lxWmRkZ0trTkJza21FSFZDb05va3BhbjREUDhES3lUMS84Uno4VjljTjZTb2lhbU5TS2tWcGs4Z1B3N2dKSllscllpQTlreWswWVZwQVFNNzJKelduTUYrQ0ZLaXdqb0xYcTlKQkpIZVRmdHE0QXM3YnhpaW1uL0hKbVYwQzA0NnZtS2I5VWl1Y2VJYU5Ddm53SHlvSHR2QVEzNFBRbTBnNDhLVkJzaDhMbHpFSG4zMDJLVkxVMFpaQWhFaWZXQy9uSnNSMDZ2NDltU05Na3hIdXU5L0RqYmVYWC9iQW5CK3NORFZ5UFNwOHRheUtKaWtkcHpMaDY4WGpNcnlNdkM5Y1JVUHF2cGozclhrekk5U3RBSVdKRmxLNWdiMXBITDBrQW9mcFJidmx4L0s0TjczRkJwL1R1RkdFTlNydko1NXBMZEtrZE9FZVkvd0lzZGV3N2hRbHk0cFFwNTh3TGpBR1FFaGs2Vko1NGVHcG5lSDhLV0F4SHFDNHdXNktwbkdJMjR6emdWOUhwenNkc0h5VVNwODVZRFYyWldBSzVqY1ZGdXhpeWJLRmlvaC82QWtTYXNyTmVLVVhDQ01xY1hWWE1vOWdjVUh6NEt4eDhaM3FxaVZxQWMzVy9MODB2Qi9JaXJ3UzIzQ1JqVzhwNGo5eXhJWFNuVlVLZUNGaDVOaGlaeTJqZkNwaGptTXRRd2V2ejJrRkJJRnp1MFd5Q2ZWaENmMkpIaDJoSEU1d3ZoYzdnbHFhWHpPd3J4WlZtSmpVMUViWXNpWFF2VW5DeElKcXVVU1R5UFpPR2toMHVrbDVxZUhLZUpDUDhwN3ZjeFN6VXI0ZW5vT0hoRlFFRk9WaUN2dVBGaXMydUg0Ri9VcHE0Q1NpWFZ0TVVZdGpwbS8zcUJVbFYwaXFLMmR5K3FFZVhTV2Z6c2JHdmVBU3RaSG8yek4vdFpTZDlHTkNMTXluNW1VQkNabEtZei9XVlJVOFA3T1B2dGZBRjI2dTlHMVpkd2ZYNzkrV1EvNTBROUFnTzVkSG5lamdhNXRPck9DQm5XOUFuYVpFVFpJdnAvbUpPMGJaQi9yalNGaWgwSE9aeDljdXBqd1h0TndCbVBadVQzR1pjSjFFYmdWN2R0YUtjc24xWXAxT1JyNnNhZUdSM3NCcFhRVmZlVkJDVG50K2prOHFuNFRKK2FBS3c4UmlUSFlxc0E2Q25nM3BwSzJaODQ3VmNkOEdrKzAyVk80QlV0aDYxOFpkMGVMVW90VTM0enVCOGZQOVc3amZmTEorM0pGNWtzNFNDNVZGbGVUKzJGNmppQmVqajh4KzhSbFN5OVVSejVqWmJUSDBDbHB6OVMwWGU5OGg4NUJ1ZjBTN1RaQTltZUNtYzFhZ0pSSFp0QVQydWJuUjFJRmRmaEZ0MVpMaU9lSVMzMk1jTk5YelV2YVBWMHlRRDUzVVVLL295eG9HdW4rbkRSVm5nVVM1WnJvc2tyZ3RkSElnOWtFdkVLcWI5TldTSWcrazdLc3BzZUNUVXh6a2h2WmhuNDUvakdJV3hQaWZLOENoYXliUml1NmN6ZndLR2kvSktBTVhUbm9ZTVA3eWNIL1BSdE50djFRYzdKa25McG40czVMVEd5RTkyNUpGY0NzMGlRWllhUEFoaWdCRDI3K016czBKVkk0ZnJSMEpLekJLQXNYY0grd21vaWxtRVgwL1lBdmlsRDBOYlJ0L0dnN0ZHMFdlMHZXdUxtSlcwRnJDanVxNGozNVQvMUh1czlxRFlWdDVRQVF0R0g0WG94cUNabldBY2I4ZEVud0JhZXAxaHA4NUp1eTdvVjRYL1RZNXYzN01wWXJyc0NtejJaZ0VJYWFqTnFhMlZRYytqNDc5T05XNEJNUkJOL3l4L2V6QkcvNWUvL1ZOeU9vNG5oL1Y3c2NENHltNEtmVEh1RjNTZ1ZmUy9ZaVpWbWc4dkRKY2Z1NDRlYWVyV0hJYnl1Z0FRcTluamh0ODRwZnFoc0M2YlJLRVBqOEdieTB6Ly9Hck1uck1nZlBGU2ZQTTl0U2JFWVNGU1I1Yk9ibXZkako4OTg0bjJ4cjI3OXZlVnVvRzQza0RxcU5tU3ZuTlFwTnVzUk4wSjVYdTFwOSswb0JqdCtYemVycVA4RExOeGNIbGdVa0NtTFRPRWQ4ZmwyMjZWZzd6bFRQN0Nqc3VldkYvZmh2UmtTcHk4dlFSbVQwSGswOHdCeUEyTkR4d2ZoZHAvSnQxNDN1NFdqSzNkZi93cHZTRVVZSWZZZFMwcHM1QWxERXAwaVRBQVdpNVhFeHdWOS9RS3RLb0FZTVZ6MDhHYlZJbWZ3amxjeFZnSDlESisvQjMxSzB1RjdNdDBVWHBmOGNNTHg3RWVzTjZyTVZJSHVtWXRGK2pqZ0tmOHBydFRGdnp5c1plejkrK0dsMnk3TEJGV2J0V0NwdDNMK09nNWxJZ3ZRWTAwQWZoV2pEbGhDV1VoM3lZandoeDdaaHBETmVBSnJhbGpwOW9aRjUwZGl0bHVYeFpsNGh6SndiN0dZdlNtbFhhMmZKS2JVby91c0xiNkxSdEdiY2RrbXpud0cvdHJHcEZSVStPTGplUUFSVWpOeGhwTG5SckZWSG1tZFdFb0F1K0NLR3BKSEFmellYQWh4bHdWSzlNV29nU1hiMHJDQVBBMVl4ak1Rekd4VUZaNllUbkVrSzF5SDAxY1NGVHhNVHdKZERDWGhQYzJsTjIybVpZcllVZ1pjSGcwYzRjYWU2WXlSdlZ1UHlpOTVVcllDOTFnN3lYZjZvMXFpMnVqaHNHTkpMU3FzSTNlUHA0a08rMDZJWXorWktlN29rRUhjNUdlQW55Ty80OXRKdlNIa2drQ094V1VQY08vUUpaRHlKSnlsRmhIVUlmSEFMYmVFMnhXdnBTRDhDelNwSEpiSVRwZGZ6RnI1QWNxNWhJamkxeGhkSDFSZnl5MzFXeE5CR28xcWVQZHl2Q2VNaisvOFBtSHNaQ3cwVTBrRnk1TThWRS9vVUpYWjB4aGw2MVE4N0dEajhmM2MyeHkzcjFzWnkvWkJ2TG5NcUN0OXZvekhxVW9CcDZCTnUvbGR2V3p3MWwzdTV2YXBiNWlTNmFnU0RqcmFxOXhyTEp6Wjc1WW83SUJBdU8zb2huRFlwWlJjOXVPMnh4bnRqZE5rTktFbzZVWFRKa05paUxIeHZmMWdMcXllZ3VTZWd1ZXYrQXQyc1RydjJ0N0lTQWFKaTRwUXlONkFOT1ZTUVRRajNNaEpTWVF6a0tiNFRMTlBVTE9CaFgyVWpmMFgyU2JPcHpGOHFyU2dqbVFnY3lEeitpNnRrT056bXZRL1NUNnh2SkdHMHdYZGlDMFU1WHV5WnZHT2d3aE8rMlQ2SW9hYWNKOHF1MzhUWE9pTHZ1b284SlNIUnROTGRueWFXNmFZSTNObHg4WU9XVGdTcllLb2VXTTdRUGtObFVIbTZtM2hvRXV4UkN5WVlWdEoyQlBmWlE0UEp1OUJxTnFmRGVTQVZobEhBSGFucmttZlFUN0d0SHpENHFRRFRZcThFWnEzWnVHclVaRG5nQTRKbEQzYWNUUExNcFdkSm13Y1dBcHVON1RHb0tHQ0dRNnZWZUxTVzVFZEZLUExHTnpscUtoenk2Tk1GTlJ5ejRkQlVyRHh0MEduWDc5V1VBZEhlUllqUC9GTmFydGlodVpQVU1zcnhmd3NFWERvMjc1WFF4V0ljSm0vWHlFUEV4VFkxeGhVNXZUUnlQSmFXVHBPSXVzY2x4UlhMM25GaHpiTzJYYXRIM3hTT0xPdWFlWkZ4SVBidi9tYXFPaGlxK1hmRVVMYTlNVmZjUW1xTGxQSFdBRHFnR052YnJtaDZYaS90NFVIdlZKY3pKNGFOQXA1RXVpNERQcElRUU5sZEFIL0VEZHBvbC9kRUFsb3NQZHdnTG1GallSdWJwaTRYbEdYZFJraG1oL052ODV3WHR0U1BaYW9SemxnY3EyTlhPOU9nY05DMXJtbjZLajRrdWE3Zlg4elhIbjN0SE84VjhGaTdySG5udWpHZmk5aGUvWXdONUpuUjJhUlZUaUl3Rmk4KzZpQ1pKUEl1SWUzbkZzSXRzY0hSNmZiNyt3bzZsMTFyNG1Mdi9aeDdPalBRMWRTM3lGUzVKQkYyMkZxVWxUNjc5VkEzQktFSER1dWExQVVlN290RlZxd21adng0a0dJZkNhc2dUVVVDOFlqQWhhY1o0NWp4Z3Z0UEw3MVFpTmdJeVlsY3VIbzhoZzArK1UyamJwb1pWbUQwVlFqcDcweDJpVGtWT0ZnaTkrT2gwWFFjWFlJalU0N1BMR0dNdGpKRGxFK2phbzhRcTVDTVdGbmo1dDhheHMxZmlOTmZJMlhlbTN1SG1BK25EVHduZWNmN09ONExGM3ZDL2NldmtWRmZEeVprRldnZDk5VW1BcFBvSWJpd1lIeTVHTGpndS9jRmp0Y2hyYTZxaXVGdFY0bDVOcDdnZXJpTmw5MTA2SCtYQ1pqM3lVa1ArNHdMVUNnd3AzeVFaR3NHOGVZWkZaT25KTjJyZ0dvV25hNDNUZEFPUUtjbE5iUi92M1RMVUFzNkgxTEtscjVYYi9TQUQyK05mVEc1cDNGZlBjdjNHdFpybHJmd3VkWURkL1A0Q1NGK0pyWlBVRHMya05BMzhrb0NiUGlFYjg1WUlkbHZYcFlLNUUrVmpvNy95OWRNWWkwYWh2VjVMb3FLY1JsRW4rWk1RYnl5dkF4U2VJeGRDUUtMcENQbWg2dklENWpsT293ZS9HMXliNm5RU29STUt6cFhtV0lNOTZLek40eFRhMmF2MWsxeVVoT3BUc0wyYzczRkhtQnQ0U3RJb0xqNitkeUF5MDIvM3dWY1ljQWZDdm1aSWE0enFmZzk4L3FwTjd4aDcyTkNaZ2VnUTBsa1NQSjlXbTlqK2dQbE81T1RJTFZJMzFqaHVCTmNHdWtWMSsrbWtOMUpIcWhRZDcrUitlN0M4dHd6WnNKNEMwZEdsMnc4aTN1aUtlVjR3WUZVcUU2bFlWZDVTWCtzcURVV0t3Wk1YVzVQS20wQlNUMXpENW1rNzdtRnhSM0FqQzFuNUpPVm1VUEMwZTFYL3FaM2RIZ1Bta0NaRXA0eDFBeE1ueHBZT09iQWxZZVk3aWJHOWxSNVdhL1ZXNzJNcHhVYUlxaFRiaHY0U1Y3S1lwUDVpaXIxL2dUWUIxUVJqcXg3MkNCZGZpMTlxd3J2T0FpZ0ZKVTRwZXowcm1KYlJZN01NSUpndUlxekErcE9JS0VQOXlXdnB2aGlsUkVzYm5DcFRCZFRxZ2ZIRmk2RVp0NVJidXNrelFyaEp2cUJITGwzYWdxL1J0akljMmlyOGlkbVpaMTM0VDVtNEdZVFYrdmxlbStvRkVsMTJoNHJvMUxpTDFPNjdQcTVvVkRZdFFRUWJQcGVLWi9xV2I5aEJDSkNrdUlzQkQ5MDBtTUNqT3dXVUROVzZjUlJ3T1JaRC9XRjV3NjV4OEhUS3hPUXAycDU1SEhkMDViMkxjbjlBejlDL0pRNTl2RUtYWWM3OGhUUkhUcUFscER3eitNZGEzdStqRktOUUNNZDNuV05UcUxRVk1vNFVTT1BkdFM3UGR3dlNnTTJuc1ZXNDZlMDFzNTNBL29YRTJ2ajlIcmZxRE52SWlSRDUrTjZZcVpQNHJpZ056bi9OaXI2WllZRU5zSUxweFhFYmpZTml6RXBEcytWWERldWd4R2l5aC9iR3p1SDlNbWx6d25mZEdmbFR4bE96eVFnMGpTZURoVzQzdUluSVZkenpNT3M0Z2NXRDJQWldCcDIyOWRVTm9WTFJwU0laVjBITzRLbnBKQkF6UXBXblBBb2ZOZUxPOXVXTVdIYVlpQ1ZVTlZyU3luT2swS2RmUURJSlBIWnNWSEJhZXFDb0k4YWt2RWF4bTBNUmxsSjBPVnhOVUNDbUpqZ3BQd3BwVVdyVmVURHdkRXpQOU1GMkZPZmVrTTA4ZllidzNXTTkzZkxVMkdxaGVoV1FSQjhJOXVDbjdIYWFlOUhrTVpBZURENDNyMjdRcjZ2M1RSVVRBd1FkekUxRFlHUmNRa1RYUEVOcHZwOFYwY2FnYUY5dWk0QngzdEM2VFJ0RUFpN0h1b0RabXdlK1UrTVQzdFdqT1VxS1V3YUFtRWNTZG41RHdGVlViUnNqUjVidVlXYkdiMGxmb1BpVUM4WEVjaml1cmpJaTdMZDc5RS9tRDAydDRldE9BMHUxdGU5MXR4SVBXY2M5Uk5HQkNTbXJDYlFBT241andzUnRoSHBqNjlOVm9rM3NPcTFKT2hqdVNlSjFRNHE0L1pmNkpKS3QrTWkxL1hLdlBzZFlHVkRGWmtlRnJZcVl0bDVGZ0VsU09MYnBlbzBzMmo0RkRwQTlmZDhwNnI1NHBMOWpad3E5ZzhEWnNmeVdTMHI0em1KVm1zU1NKVyttQkZQRHJkeXhyeFNXUTEzaGh0RXNzbTV0QTViRjB6MVdrSUJ3L2ZzL3h2NE03d3NLOFpxVG42RDIvbzdjWkNqUFEzOGltTE9BbkVSMC9qZlBwRzE2TU9sdytkOWw0cXp6aExBeHFHZWFPTTlITTlhaGg4RTdyanBTYTBaVlk1TUl2dEg4SllDLzl5aXp6NE92U29Ob1FlWVJSZEcvQlJhTUFpeVdxL3lqb2tSRXVMWnZjcnhyUWN3SXFYYmVMMDhMTXBlYjlabmYrSGJpTnZ6OTB1UWN3ZElWaVdrNnN4dzNGY3BaUWUrandQNWVsRGVHL3h3NUxzWFU4Ykk3QTQxb2hpSFIyY1RYOUpUTnZvR3hMRDlGejM4UGZqQ1Q1TVAvVTFzL1dTaUEwektLTU8vVlB4RlB3Z1RsN1g4SEFrdnpibmxlS2lrbGY3VEt3TzY3by85RS83TVFsNGMyWldXVkRDY01kekN2OVJEcUFHcjIxaUlSQllsTGxPYVRndERzVE95dTdKR2EvcUJmSGFDalhVMjZDWHVRNHkwQ1IzZS84ZkNYVG40VU5KYUI0RnUyR3pFUFdZMFJGN3F0MkNLb1poNWtrSWpnU1FCcGxBcGp3S3UwUnNBRjBMZ3hZMm5VZU5ZOVdzQ1ljZWRrWkxlQXA3NS81d1B4NUZibVA2aWVEUFY1eVBoMzJZdzMyMDRoc0RuZUU5VTlNRmhsMTM0alVWRVIreHE5L0FZemNBMVlEK0Nmb010TUpCTExJclN0dkU4K2dpK0M5TlFUOSsxYUJ0S1pWMk1UWndVU21NcXl4Q0gvaXhsck5qZDJzM2NkOGFLcUNZa2Y2b2k5cTBGUU9lUDVpMnROT3pLendVS1dUYkVsUXdqVzB2QldDUnZvOUYrSlU4ZUpmMzZUUE8zeTdzZ0FKVGFQVloxUjJZcUMrWlAySG4zamFobzdRdHJYZEo0WmtqcTdFenVVN094OTZCamQ1L0JIUy9ZQmM1bFFHUTlHdCtxZEtvRGtkVDdrRDcrU014WituWnkvUjI0aUEvTlVzTUtXQnpvR1R3YjJFdlZIV1BLVUZiekdjMjNmN3pLR1M2emlnQVp0QTRuclRmSHF0WnFXZlU5NGUwaVA5dGhoS1lrazhIWlhnL3RNbjZzMmFPOExxSVdxaGpJUm5kMHNyZXppSWVjUnhpb3NsQ2FBdENtcVc2SUFtaGc1bnc3TE9MTHlRK2V1MjY4ZVJiVGJNaVdteEtZOU1FNWZEVUh5NytWVXZ0OElKRkYzRFEwOUo1aFN2Vk81ZU9pTFM4RjhRNU9jTnFHYWJCUTN3SXlwL3p6T1FZVEx2allqK3hJU3p4SlN3a0FHRERHUnFvWmJDcnBoMVgyMFhEZ0d0c21oN1lHbStKVHd3MzJrSjlxRk1zNUU0ZGRiTGlLUGtFbXNXbnIxbFdRSnhWR2h2Ujg0R2JwN1BqUnd1NGFGb2JhZm43UUpPa2J2eVp3UDd6ZUErYXVuUisxZjlZUGdBeFRXSE5KbzRidG1GemVlTzYzNmx3bGhGeWxiVktLcWY5RFJWUzAyZVEvTVFBMnBUc1F6TnZxZU56NHcxL1RaUW9VV3dnNk8xcnkzc1FsRGxRaFVrczgwYy8rZ3NGR21RVGFoUXRrU1doL2VEWmhXWUZVYVBkdDFFUTBNK1UwSkRicTVaelk1dFJsdzI5d0xUYjJvQlRTeG4rS3dMZDVTTklSRnlua01BVzl6Rko1ck5GZjY1MDhmOGR1N09QTitsNDY2dVFRWUthd1VzOXpwM0Y3TWpjc3puN3lITTRnbWVwSXRVZHl6V3dmdVZhcnFYL0lBZ3I5d2VyNWRKdW85blg3ckZKU2hyejZDNzN4V2diYzFlbGlJYzBqb2o1RjBYV09VQnlWS2lJWjhTRm1XbFpyR3ZZZmZBTC9QdXhNaVpXYjN1bHFwcDVEb3AvbXE5STFGdU9HVTBuNElEc250VTczME0wRVRWcXAvcEdHQlNza2p5bDFRK3Vta3ltNWNyVDVSckhCWDdIa3hGeEZQQm4xN2t5VDFKK253TXpQNFZ2YXpsNkYwcUptbThWOVRlaXFzMzhMb2Rjdyt4cWYxeld2b3BjZ0RsUmN3by9mS0FPTytWSFkxbXJtYy81SnlWMG1SRVRRWms0aVZjTk1ETTBhaGJWVVRnQ2RnczBtMmxZOFh6bkNPMmFGSzRoWEhPRVcyVHNFWlpvUDA0Q0ZNVzNjRUpUbnR0cFlHK1NHWDFQTXpqUjZxMmVaZzVaenp1b2xJOGdvMU9CVnhZNHJHSngvemE1MnR3ZndhVkdVODZUVC9Obll4RlFMYkR5N3BJcVhpTXkwMnhTdVVUb09vTGxEbmR2L0haQXR5TFg2R21IVUpxREFNTldVeTUzUGZFRmFVeFJMLzE5a0E0YXBUQ3cwSUlmRjRMN3diRDZSaEZ0TzRhK2VYNHF3TXNucVRPTTJBY3FETFVycml0YlpBbUZ3VTZoZU96OUNzWjZyNnhjVytCdzV4bkx4ZFkvN0JQSndpTXB4bExYaHAwN096QVRiSDduVzVZNU1sUmVwSzBOY1hBTnZIbkhlQldRWUduRkdYeGlTVGJROHdWK1JBb2tuL2h3RkZBZHdZZkxoVnZLOW5xa1cvRVR3Vll0Y1h3NXM0QXp1YTMwaHRNTGdobThWSmFZQkNacUhNZmJnZUxQbFhqN3NoUVpNbzBEeHdjcGVnaFF1dGV2MGIxUmp4ckhvWU9QY1NPL1JHRlBrMHlGSXhESmRJaHR0ZjN2QzFYRFpXaFdnb3BBR2xrbW90NUIrV3BnR0MrMzlzWGI4S2FvOXJ2V01FQUQwOTNGb0FsQmpyTGhVWWhOdEFYbm5ueGZqY1greURzcE1XRHE1ck5mejNSOEppbDIwZFZnRXBkUGdYOWVkYWRYL1lyYnVscXMxT1FxN1NTcUlBVTNSMXlSZVlISVhLbXVQUFd5SThpd2V5eFY3TG9kY2Qrd3Y1V2dVeG1jZXhYZmJYSTVLT1BtYmN1ZlJPM2FIMG1uMSt0NEoxc1NnMlMwOFBDanNkNXd2bCtGL0NnUmRZcyt3dVUvR2VXZEdXYnNMcktKSmlEc1BpWGxTeSsraXBtS2graDJJbFRMck9vbkR6MW11MDZBWndvZHRLWXQ3NngrUzdsbjBQS01yb1Z3M1RCQUYvUDNibkoyQkJUSnppcCtPOVFpQmxpd05vcWJWT0N1aDh1dHdDdm9FVjRqZDUwQk9XdlFUOWFGNmFHVWh0L3JHRVI4aGJCQ2ZxU1I4VzRWL3lzcXFhdTBmcDBVUmhLKzU1TWZDd0V5WVp4SDJKSVZMSndPNGN1Vm9IeWRZSE5qOUNrVUd0SHpKWGZsZ3ZmRE1wRTVBUm8wbExaRWtDSUpyNWlMVjRGMnRHMS9HRmJKalMyOWdFYXd1RFJPV3ZyMEp2a0drdkpJZmtmcWtEU1pyME04dXNLTS9zRHZGSSt3dEpFOUNORnBMekZ2ZTJKTm1PTVEyMVl1YjduMzRkYUQ4YzNHTmhQbW9xT0dLc2pZdW5pZm5RcTRTZCt0MkI4Q1VuSWZuTXZLWEFqYUwvYnU3ZzRRbGxWci9OWVVXeTdOSTh4NStLQUIxRFo4ZXFEQUh2dytkdHBudjNvY3V0RE1nYlM2N3B5VjY0cWQra0N5R0w4T0FhRmtKdUgxVzdLNE1qbVdWVWRSQmNod3dYQ2JBK0dWRmlnZmVZdm5mN2c0Z0k5dWVJZmcwMXVRVy9ZemlIU1ZYVEY2ZXEyc2RES2wrZmplcWtabTgvdnJCM0F4YnNrL3hRa25ieWhLWGtkRGsxQ3czLzM3VTRmRmM0Uy95RVBndHJIdmZMckpnRFVBeWEwWlJpNkJlZTdsektUOUlvQlVINlFqakc1LzBKRk05eVp2S1M2Slpsd01sazV4R1BDeUM1UFA3MTQwaGg5eFpobGkvSmVhR1VJeUg3RkZFV2ppNVdWMjBsM1RVZWovVEx3eFhVS1RNMlVVeDgyVHAzcTk2ZGpXeHVyQnp6ckVzSlVoRVJFY3lFbVljalNKQXRzbjUyd3RzeGo5T1J4QjI4cXFXdFg3S1ZlZk01WVgyRnRQT3lDUXBQcWxqRlVObXp0QzhkWVJGV01qTm1OZ2I5TTdHaGxkWWgvOWYwSmFYeDEyaE1ScDlBTFNJSWl4TDQ0bkVnK244UmtFOFE5MHpYczBoRmFVdGpQai90elZrV3pUWUdtNUF0aGphWDYvNlZVSlZTZ2J2a2NtdHNrSjlFdFZQOFY5YytKTFFEZHRtVWZNRnZQc1FLdlZmZW82ZktqeElwVXJ0eURodjZ5ZGFjdWkxV3lLM0pnRzVTUlB0U1pjd21mVFllL0c1ZkttbWJ6amx5d2RTRGJTRGlFNmVpRkRYK3gvTHhiTGI2S1NqMVNFY0dWWlFvSzh3RTZMZi9Na2RmamFZWVR5eW9VUkorTmhBa1U5TGtnbHNBWWVBekVIeWVWK29YeDUvMWNNQkZQczE4QWNLL3pPZGorRVp3TWdtQzNHVWFOeVFKN3A4ZS9lcE9VNU5USjBwNHByZDk1U3ZJUmlaVGtjQTNrbU5RVUxEaGpQTTRReEdUcjNlL2M1by9BNFJ3MnlRYStYRzVCaVZjMGFoOUo1SEtSUlZHaXhPNVNhT21JZFJ5QS9oUXlULzAzYWFxT2FSOVZIQjhnbE9LQ2FqOVF6RjY0VEhFVWxVOTJmZVdxTkJzVCtkODNaSjJZSnUxU3UxRU5rbm5qU2lXcTNGa3BaUjE0bGlKYnN4eGlydVlJemNpVEQxWElqUEh0MG9FS2N0ejgvd2sybVJrc1hpczJCSXBmMUYxSGtwR2dhMXcwWENPS2txSk9nUWF6aWZjdmpqYW1DenhpS2hpSEFmWDBxaitSTkc3YzVjMG94bXlKTm9pMDFCVDJRRDNJOTFHdE1ZVzZocnZzVi96VTl3QXBtS2NxaDE1R1dXczJKV0xqK3VUTTV5N011NlNFTGlCajhtSEIwMFFwNlYyeUtub1VKK25RelhNNEd6RjBnYjNMS1UzR1dhT05tdVp1MlB6M2pUUmNNMVdhcTgwTHM5dlY2OWhNalpjbjE2eitVRDhLeW5rVzN5ZTlON3ZMajZialNTRFZEVGlHQ3duQkVlWlJjQVphSVRiUVJibHBMSUd6TG1SWklPb0J1dnNoWGM0YnFwTVc4NnZocG9KVnh6Z3h0VWpPWXBLbVBoOXJZd0ZrdEtaWWNTdURKYXJYc2JlcnpUaUhHd0tDVkJZT0RyM0VNRVlreTFRL2owc2F1R2l6NzRPVXYwbC84Q3hBMWVLNmxjRkJNVzJYT21wTndMbGYwSndDa1hkT010Vk8zN29QVHYyVWJnU0taMElGNDdhRi9JVmhmRmdoNFhqd08rTnlxaXFwSG9saHAyL0RFNTY0N0ppazVTRkx2b1NnTUZXdkFqcXVrdWtud2xDZ04rUEl2aXd4UzdxbnlDTzgzSHp3K1hEcG5vOGx5RWhlc2xtdHdhcXl1aHdhL2RqWnM0OG1sdFJScFNkUEViaGMxTWlvbktFOFFjWWpYWTFCdk1paTRaMk45Sy9kNHpoVTUrTnVIWFF0YmZNR0ZiMGU3d3VzNXZkaVBLZGo3clJyYTRnZ2t3UHdLQW9za1dBeGZRN2I3bllRUmJMTmR4VWhZSHBKQ1BsdHJFWTgxYUR1cFhjZkZHYWJDemVPNllQS3ZXN0dFVFZQVkJRM2hDYlZ0RkdDUGE0cWwwSTlveHpCVXUwSHFXellFYVRLZjIrZTNNMHJEMFVsYU5oNmljSEhXbUJzbkZaS3hnd3hSZTgxemZ1aTFkVk8yYXZJcGd5M1NzV0kvT3BhTkNCaEU1TytWVHdkZVdRakYwcitiQWtMeTliUkFJaGQzK3VHdGJQaGJFb05peHo2OXNsam8zcFlvemo3R0UzNW51c2cyRVkrODJ3d2ZCVERXWThCSklLbTA4NU1MMHBsd3paNkFtRjk2L3FRWkgzWkZHQ2ZQV3B5eGx6WlFqRTlTa2dqVG1rbDV1My9ya2FwSkV0Z3Jkdm9FRnJHcVp5RXRiM2RoYU9rZDNielBmekR3ZUFsdE40emhZRm80RTJMSXlSS1VaKzhRUnlrY05pM20zdHFab2paUXZxRU5VUGl5dEdnTE9jdGt1MzBUQ2hENlpKc3dmZEJaa1JqS2tkSDBIK1FuckJVbDZrRERIa2RDa3ZIbld0c3kzL2ZPdkljWVVsb3diQWJkM05IcDRPRmRUb01KTk1wN3NSYmFvOVlJUVQ0ZWFORWd4bVd0TjdtblNEQThuQ0FldnNnOVA3eWRkVDNUWUhYYTdub24zRm5CYjc5eXA0bUFmbmJid243QzVKSGE4Rm0wL2xmQjJDR0dxSW95SytrRDBTdnZ0b0FYNDU4aFEzSTNyNDJ0K3RqRzkwZU9DUGk5anNIdEh1aWhTWXY4WUhmMTdnQ2pXY3lodk9aL09UVE1abUovNEc2dkdkTnZSTDhCOWdveFF5a1YvVXdNNWxoSmhrR0pxWGFYcWZ1OXBvbTFKR0w1N09HbkRxR2d3YVhPTE0wR1BoYnBMSmZsM1lPRUVMSGVzbW8vZXBwaXNsU21SdCtqMmphMWlpWURQWkQ1L0pYUisrcVlCM2pPODJ5NXF5Z1dhZjhxQjRYZWVlRzk5c3FiQ0d6WkpOTmo5WHB5dUpMVjMyMDVFQmR0dzRXSWNRSzlIVjlJSzhBY1pZVE5oSmJRVmJrRk5mTHNqZUwyTFRDR0cvb1RQTTBWbzJVa25CK3UzNnJjRUorMUhJL2hCUWJUVXcvRHF4ZVJ6YkxEcG8yQ05maTc3YnByNjRCbm5rVUdQdFZOaW9aWGRsaWFYUGhrY2h2MVVXQzFQb3NCRmhML0FoOW4vMGwzSVZpNm40cEcrRjh4bVpOTW00VC9jc1RJR1JSTDBCL3Z1LzdJL0NIcjJKWEZydmdKWGdPNTFJMXBXc0tCVjJIaU1SRXhYSlNHMnlnSmhMYWkzM3lON2VoL2VPanVveEt6cTBocUh0bmxzUEQzU0pFVE5QdDFZczljVU5MREZTdjVOeTMxVFFlSmN0Zm82bitmYVBBTUtEM25OTm03eVpYd3doZ2xPbW9Say9xWGI1R2tnSlA1Z1o1NVRZRmZwek9ETVpCZW9hMDB3MDB1WU4raDJUb0ZCOC9DK08rZTZVWGs2QTM5ZnJ3WjJUb281ekpjdW51ZGZWQ3lzclpCVjhzYnVrd2ozR2ZKWUtoT1gvRk9BRFdocGJScm9wUy81MFdkWGE3RUZjV25iMm5uTVFpdlpJRmIyUWNYWjNIOFJON2tsdWR6QzR0QW5mam1BdEFOOVpUVDRDdVJSK1NsamhtakxMcVFyKzdvNU9pbUxSTDZreFlrQWJYekQ4anBzRG1oU3F2MGQ1M2VtODRXOXBheWYrQjdBWDBvVUZnMHVxb0M2SHhReTN6RE5WdWhubGt2NEZRbDMwcTFsYmdITjNPSTZTV1pCUlNnY2k2YkEvZDJmcUVMN1dHaGJmMFhZeFFCUXJIMjdoUWtTa1hrbkNHVXNhS1RTYWl3TFhWNVl4TENyaVNCNHdrSXdBYTluZVl5MkZpWXp4T3lZcmhqbk8yWEh4M1Rid2ZpUVUzdUIrdGZXV3JPWkxsWmFabGdrZkRaSGUvL1V4MHJiKzZxNU5DQ2F3Y0JZcEYyTnhmVlZiV21SUGxWck1MRlZHbE9XdFNYTUtyTUUzUVU1WHRSSER3Ri9FODlINUJHYXJLa0NzVEs5RFNxSkdheDgxVjIxTUxkVGwzdmpzVGlqak10SG95aW8rMHlGVGV2aHBFSHVScWJseFJ3bi9taC8xZ1lzRFBXN09UZENWT0dmang2aTRLclNRZ0czSjFtSy9qQStwYmtMbUc2WkJZWWltNUJLSHNENnhQTUdyUmJLd0JQNHRna0lNR3JZY2RIK3ZGbi9wSWVjV2pPVWtjeHJ0NUxucXhqU3kxN1pOR2NvdkkxQVNEa0dQWXdwYXV2UkFodmp0ejB6cGJzeDJvRUVVS2lRRVZkRDQrSlVUV1Q1SHVyZFF0NTIyV0VrT3JVRDFBRGcrYmM0cU5sZmxMRTlnZnFROEhxT09lK1hlZFR0UlZvN2F5REtLbittN2VSTUtIWXFSL21aaXhmekxVNjhMQ3BPT3VMaTY4ZzYvUVNzdElUdms2VFpTQUdCVldrMVFMN09QOUV3SVJucW55ZFlWMEhqS3VMMHcrWDB2Vllkc3FwaURLcmNPdWEwRkZXQ2RvalpIaWRabnZzNGducXRsZ09XSUY2d0pYN2xkc05SbUZ6SXErNXZjQi84U0hCTkp0RFQvNjA5bFhZYk5wRTFPVDlCMTFRbjdBUUxtNWNKZzJhTHZZUjlqZVllTDFseW54WkhWSmlOVG9hdWV1azBZT3dCVjhub3F4aGVld1I3dWIybzdTTWpyU01hR2ZZVVpiUG5LSko0eFREelF5ZkdYTnNPTFhkSGU4Q1ZaK281ekxETmxUL2IwdUl4b0t3aDl2VmRLR3huNHF4ZDlpdTRTRlBvSHdLZjlnOHVDK3NCOEFiT1Y3NnE2cWJ5OVdwYmNyMFJvaVZaQ094Y2pZZ082VlhvbTZrRkIrbW13YVAvY29xenhFRnM2VGh4a0pSR1F5bFVBWWJRRXZ4L253TWN5b3psZVdIR004aHV4blBaMEwxc3puNmpOblJ5WlpRYU11THZBck9GRGNJdVBaY1Nub2hycWw5K3p3cDZhakxJTWR4bkJDcU1Rc0JPbnhOZ2Z6dmFCZ3djZkwxNFJ2aUEzTVFqRXUzUXA4M0ZyM3ZDRHZqODRJRHYzYUxDaFgxTWUxZE8raGhsODNkeWVaZFNJMEZma24wSkttNkxtL3ozcG1ndU1vNFoyUVFYTjJRaGtyaGVFRG1mcWZ6Wm51OEk0bjlPQUlNSGc1UTNzaDRtaFdUM0xGT0hRN0c4UlhtT1VCeko0SFN6L1VwWlZTeVp6Rko0bWlpbDBadkQ4S0J6RHBBemN0R2kvZW93Nk9RNDJqTzhGTGtzNWlhTjkzTE94bHdsczY0MXN5WGdTS2RheXFDU3dVWlNSVEdISmVwbjg0dGpZYm1ZL3I5Q0o2QlR0aDBOMGVGS3VFOVN6Mlc1YjYzWkRaNEUrUnh5WWlWd09TUGxuSnlpajJVZ2wxYWt3MzZFZjk0LzFKaXFLd1dUUG15c2grVDU5ZUFyc1FGN2x1UVdqRnBPb1FXbHcvVWl6MEgrT2ZPZGRiWFBDM3FHN05wV1d5eUpUaTYvaVhwTlBheHNJQWxPMG9tckUyQWRvSEFvL1JCMDVXMlNkUHVYdHJUR3hOelNwaWQ0Q2NGRXhER1ZFL1ZkSFp1S1J4VU4zZWtaYzRYS1d1VkVNSGZSNExqSC9LY3R3TVV3UDgvVTZiMWloV3lmMWgweVBvdXgwSVBaRjBVUFdrWVlMc2wxSlU1cFdpa0d5NUlJekw2OHpBOWpZYlhNTDY3czJ6TG9FN3Z2U2U3UXdYRzB3TlVreVRBV0hqa2Urek44NlRQR1pkZ3haRm9VZ3BYaVNBeHdHRTZaTGFNQWVwb1hEVE9zNU53WjR2QWpRZWtRT2I1NGpxOXcrRXl3Ymd3a0VpaVBxM1Zmb1MwWkNnQXJmc3BCbWtpYTlxSkJzdlRzS0lWcndSakx3N0xLWVhmNEE4VXF5dHFCQlROL0dZelBGVnZ3clE4Zk1qSWZhRFo4ek00a1NsakFIL3FrVUgxak1vU3F1cjczd1ZoSSsrZlYreER2alg0cmFhNEhpMzd1bGxTT2dnZUhJMXFweUxCNENuMFd2OFpnT1NiUkxSRXM0L0E0V0FqN3F5M053cUdSZ05ocGRUOHVZbStKRVgwSmY1ejFpTkhaVVMySGZmeXRQMjQ4VGdKeDRML1Q4U1lKL3ZuR2FZNVRRRkN2TDhKWjdmMzhWeEFhcFR6dVQvaW8xQnM4N1ZZZ2pZU1FldDRZbFpZY1NKSHVaWFJKVlhQalJNYmtRSXJpZFN6N1pKQjFEWGR3VVN6Q1RRNG1SSForV0pMVkV1R1Q0NHZDdWtPUmJFRngxKytPdUpLOEQyek0xMG42Sk9FMlJmVGtFSkw3Q2djU3AxTmIzeXExUEdRL2U5WnFFem4ySko2bjFZLzVCQkZRQzBHbW04WWF1bnkzQlVsblNQcjFLbTVEN2ZnTW5vWUwvdzZjQ2VHUFNHUklxUVhmS2x3Y2JhbGJVT2lZRVhxb2JOQkpoZm9WNGkvNXRGWEcwZm5ycWdUMm5SQ0tGcFgxNi9rYUFpeXZBYVJaSVcveVZBaXJxdU1FLzFtc2phS2pkTFc3WjNqRHRROVZBZTJOSDkxVmtwSUllNUxaa2x6NE1qeUV2Mk1vWGJmSER1VTUwZUMwc0xVeVRhWVMvY2NDS01DSlJJckVOSEE2THpmeG1pVTNBbTVmZ1YzY0F5bGdtNEh2bHdseWw2dDBHMmVpak1OajVYOW1MdW9XRUFpQXQreE1UM2k5MXhvazJnS3RoQ2N6dUdTWDBhbnRXMkc1SVNtZEMvNGxkc1NpZ2U1NUxBNDBON2ZwWHFxQy83ZzFiRi9PMFhCMVN6b0NPV1I4RzE1NXhaQnBaWG5EZkJVelVmYzBpZVlTbFQ2NTJ1VkNDd0U3cmNMSUlEc21Ed1JzMW5uOFk3cTljbDdmemMvdEh3M1NHeGFSbk5HWFlZOGxEWFB4SHYxN05ydFc4bDZzTkJjK0lCOTFIYXVkY3hQTEkrNks3RW9YTDM5ZUhMbzk5akREbTEySjhGa0JrU3NjTzVrSUh5Ni92bHFqd0YzemFFUHo1T1NENDdKZTZCMVY3NnJ1QUdSeXMvVS9mVmxPNTRETUlRaWJzV1l0UEJxUnd4OVVaeWlZb0ZEdDNxaFg1YTJERkY4eUZPdnJRcEcwb004bWViUnBCWHFVMnVVS2lvT1B5akFGbjZWSUJqVmtnTHdpd21aMjBMNmxzWHR2aldHSzdvNDhNRTkyY3VheVloR25sa2QxS2gwWTVDKzhJUDFVc2FNaE0xNURuM0NQNDZ2cWZYaWFsSjNScXp2d3dXS1d5QzJvam9KL2ZiMHFRbDdsK3VuOW1vK3V2WmFrcjVBdi9WVzZQdUhucXNCYzZRSWtVYjJpUjZ3V1N4azBZTWhtWDBQejRmWTdsME0vQkRMdXdnWFE0NVJTTCtLMnFsaHNsc0tRNWFJdlBud2ZORTBPWHgvNXUwWUF6dzZOSE1TMER2YVBFbXJ6UmNEZTZMT09SQU9WMjFrLzBXQjZCNzJzZXlVaHFGOXBvWEo4bElycW5ibS9CQzR3SDNZUC9iazhyU1U4eTVIM1pRTGFCQVpaRlBJTjhORFYzNG9RNDQvb2FsaWJUNUdiSGEwT2pjWFBtSmNxcktyU1I0YjNUb3JjN3hlNjlndzc3d0grejQ0UEMvc2RlRTN4Mm1XdGYwOTJveDd2dnc2R2pyTnA1Tkp6TXdDbWIyZisyc3ZLTjdwYTVUNHlJaTlxWkY3Y1JWS1BXU0hvODdaMU9JRCs0NnFoODZuTmJBVWMwcEFFYnNPNmNFRTR2UDBrRkZWYXIxSmR5ZU9WRmZ6KzZmSFRGODlZNTVxdTJ6eldtZ2xFalp2RVpHUk5Bc3paR3dYZW9CM3Flb1NjNHhtM3Z1aFJYUElkVjI3akViSTh0dlVZRW1yUGpLOS9zbDJJaDZRZ2o3NXE2RjJ2UDlyZEg3ZzFNU3JCdDVYZWlXSURCUE94M2tUNlVlYTlDWEs1MFFPYm5lMnNDMitoNVF0cEwxWGhaS25IVFJjaWRjNVRMZEU0N0NOdk9kK3c2OTZxcThnYmxrNUVjeXgxRU5yOWVadTQ0VTh4SDBBSDNLckJPb20vMlBpRW9xLzBQRXlzVzNoRHhsZVNTaDM5aGJUWDNIRkljSnFNSnU3cHNZWWkzMzBEZXFvYXZvaVRvOXdvOGJKR25obDR2amdaMkIvWU0zcjdYZzdiZVY1emJpb2x3ZWxLb3BXcEliVXlmMmx1UElxNDhKOGJSei9EYy9YY2xYZ2MxcGJFRjA4S1Q4d0tUSzc1cGNsbTZEWHZ4UHBJcld5VEh1RU4zaUdCSWRsMWtPcVMwbzJ2WFhBaHVYK1RFSk1CT09YUFE0RTZxVlFaNnl1cXRVZVRRZW1PdmUxeFAzQVFKeTJQL2NsL1EzZ2hpR0ZNaDJwdGsrZnJLSU56TG96SVpISC9YVXFVYmZaTkRWd1psZEx4Y21zOERzWUxDa1Q1YlRJUWw4dlZzUFpKUmpHdU1jQ2ZFV1JoWWM3dks5Syt1MWZYVGd4REZwbWhBWDBoaU1hSU0yZzlNYm90bUhxK0IwRzdjOFFieW1TZzA3SjlEYXpydTJFZGFsZmpGZTh6UG15K0FtcUFCVEc1TEhZZWthV0krdHBCWVl4ZWJWUGgwU3luZU55ODB2TWZVSHNtbjd2ZEdmQVVvOGN5MVpkcnJ3OFZCaThYS1F5a1R6aUVmTjMxRUl1MUkwcWFoN0ZKL0NhRUVPMWc2WkVGMmNPM281MFp6TjdaNDM5OEUybHM2RlQ3bjdwRkQvK2RwYlZvcm5lNmJrdTY5SkIyb2ErbDNXNDVvOWJUSDU4U1BValdqcXc5bmhlWE5paVRCVFdEaFpNMFdjYWhUc2llMERiWmhyOUE2eXZlUTFLeUY4MUdVektFK2VKUGdhdkovdU5tdlhwUXFxcWpwYXdqR2wzaU81V04yUytHR1Ricm81Zk9mT042NHA4K09DZ09mUmRNRWltYWVFVHZ4Q3NkeDkyNTVNSVcvUjdZcjlESWFlODdxeFhac3Z1N0VCc3lQWUdYaGQxbk81TXJxVk84NjE2cDlTbk5POFlGcS96UGJhYXA3bmZuSXNVZGUwWE85dGJ6cTFpUHhncXRoRm44WWxOQU4xbmRXYXl6enlCeHhPU3BlYWFYVE9JNUZlakFnU1lHaXNPUTVxYjFtVXg2RmdHWU81Z3R6QXloQkNMZ0VOaGczZm55MEpScTZoSWw2djFvQzJuUFNGR1Yvb3lmbXFQU3ZLOC9RQjJNeUFaMmhjdmc2aVZHZUoxWjMvVnFtNWpFdno0M3pnR3ZUQmFRc1dhQmdRNjBMNVBRUUJvSHFjZTdBdTJISEhtU3BDTWtDWHNIM2h1UHBnaWdpVlV0Ulhub3ZiUks2VDJRaWx6R0toelNFUlh0dXorMlJoUFFoZ1M5VS8yWTc5NlJiUkZKcGhvMUZ1VGdBMTFqYy9NYVlVc3hZa2Z0RllpTW5Yb3hMcC9rZmxObE9RVW04ZUVyK1BpUjZQUWJoV084QnEvQUtYdEE3VCtHNmpqZ1lTUm1mbEJhVU8xUHBwYlZJZXdVZTR5cUpUUlZjUXFaZVVFUnVwcmgranBvVmg2TkdNWnMzRVFqNWZLTTNmUkpSYU5QeDk5OTdpbEozN0F2M2FEdE45amdYejYvZ3kxcStLM1NFa3FxTlE4SldmeER0VG9vdWRXRDV5elNKRVI1L1FRbS9HOTZ1VDA1cFZ3ZVlUaWJpL0M1aUlucFc4T21WZlZCRlV3OWpUR2FmSVZ0SldEakdUZEZrL0JIdHQxbEdUN3lPeUY4Sk5tckRZdktCMGtGNlRVRXdqSE11TXE4a2FOU1E2Wi9rWndtVCtyUXlBTUpBeE1UZ2dJbE0xNENQUVlCbkVoa3M4TzdWbEpSZGZtakdqS01lOE1HRXlDaHZCYVlwcUlhWjZBU0tUMFlyUGNReFgyS1ZoNTRrWHpIcFg4NXFlRXhSeXROV1hiZmh6MWovMXVGVzV1WEowOElEdnhyZ3E0cnl6a2k0WUx3Q0xVMVloVVl0bTBMRlNuWHNEYmdKWm1wazZpSENjRWVuVksrM3JmWnFQYTQxeVZRdTJuRWlLTWhBdll4Z2VhczhsVTJHV25NL2tRSGx5OGFPWmRBenN4VEVwVVl3ZHRHUDd5YWlDYXZOcld3a2lMQTNyd1lBR2Z5eFJ2ZitKNzJ6d1dROTkzT2tUbTdKeW5NTE8zS3ZDbEcxOTZvN0R3RzNuQTNmMWhxTVZzQ3JvWTdSNGdyQVVmbCthSlNLcVN1cXdqcGNSNkVFdUF1d1lHS2w3UGZ3LzJGanlyZUVGeXE0MDV0T3ZlSEtsbksrc2ROY0tObHFOMm5GTXdQTklvMDB6V2ZFU2kyam5RQzdGSFVEVEtBa1pFOTZKL1NCTVFhTFc2WEFDMlY1WXRqSjFxSFFhV2NBOXphcXBLa29VVldreks2L0F0eWRJRE5hRGZlNmVPa3VNY1lKTC9OM2R6UHF1bDN3QXFIY3FCNC9XajZiYnpIL2p3ZDRuL1ZrbmJCY3FIZkVVcHdSVGJ1ZjNudWhGRVFybkt5OHFZbUxkckViN1JnWlo0d1l1Rm1MdllrRVVFUG9wSHk5WmpiUnJJU0JYOWtzdTBTeHI1Zm9UaEJYODVPaTVmVjlLSWpvSTFqVERnOXZrNHBodXFUUGpvY0JBcUZOaXdLNTZ1K2tudDZmQjdzZXZVc2d1V0lQajdaSjh2WnZNajVZbGlPZUV5SVVDSWw1QjdoZjJrUzRzU1A3dGNaS0NPU0VCaHpvTElOK3ZaZ1pCQ3ozcGJWVnJjM1VjSkUySEFScHlvelpOS1hseHJnbnU4VjJWYWNodTZWYU5pUnd2MWdXdjRIT1BCYTZDcUFMUks2RHRiQVI5UlZVazRZb0dOckx2Q2JKeGJqMHp2bDR4cXE0ZUJFaDlzRUlJUHVyVlFXZHJjcW45Qm8rYmk0MzMyUkpFWmhqRmxZSXM4NGxlblo1eWlHWU9Mejd6VU1RWkFpak5tb040WUp2MTRXZ2hxTXRuVmgvaGZnT3FGM3lVUkhRdDZyY3VrbHpFR2NwUFNWamdpM29ha1o0MnFyc2Q4MlZXTmJoVDk0OWdlZnExK1J1MWJkUmtXeDBaTDZSUWVDYTRKUmJQNUtSTVVSSGMxdXhFQnFnaS9GSGxUbXlnaXY5Mnk4ejEyTlVyanR4VUtGeTlGL0VIOXhUWmZPZVVtZmdWT3NmU1R1WGpmT3Fkb1EwSkJZd0F4MElJUGRSMS8xU0NzWk95bWFjcTNGOHJLY2R3SXZnSFJ1aE80cGxuc0Zud0pqTzU4eDJ2VldrQzJ4YlBYTUQxRmZyalBtSTdYVk5uL0c4dUdhcWVjT0ZKTkhhaDJaLzZiTW42M2NheTBsejhiYWFjUU9md3Fjb1V1YVpWeFBHM21XZkNMMmFvWk54ckJmSDU4TkllaGxiUk9lcUJJdTJEV0hPU3ZoUUxXVnhDL0VTNmpVdXlIL3dWcTY0ckNJaXF2OU13VldpUVVnOCs1V2ZYTHEvaHRkSlJwalFZRm9DaklhR1FCTDZkQU9jNTg0bVp6ZHA2d0h1ZG1EZFFSSzdnYU1iWTU4UWxaQlhzejRwWDZFakFvU2g0UkpCbjEvbk9SUGQ2ODdUNExGdzZyaXhqYjBGVXUvZXZ6N0hoaFlGNE9uOHRZWmZvUUVoTTIvQXJJL3U0TEk5UWE1b1pwMk1NUkkwYXZTY20va0V1Vmxzcm9adlI1VjFIaEozVVg0cXNLMmRXdUNtT0dlUEVsNFRpZjY2dlBRUUhyNXRvVHNTVjV5QkprV0RwZXEzRlIrK1NBc3RxYjA0RUU4dy9FNGNjOWV4YjVlUWVQUzJGeVdSZ242anJ6ZFo2d2FEMS9lNG92NVRUbmlDTUN4RUM0cXlwUmRIeG9wWnRvM0FOam1UbnBtTTZwQzJpeEZ1MWtmUjBTYW1qU25FaHhyUDlLS0hXeWdETDVCK0lyREt0dzBsc0N1anU1cEdLaGxaMnQybEZZcmdCZkVmcmZoZE0vMFlMVlhWamk3SThDL3U5czdBbnY1N0hSYy95ZWJNMldhYm16MG1TdWFWK2Y3ZW50M2hhNHc0a3RpWDFWZGpCejJLem9CZDA5VXBEbkNYVGJnSEE0VmFHSHpRalVYcEYxR050SVZINndxckFSa290SXcyY2IrdUNqdHA1cHNRb2VraDFkYS9mbWt3RDdLd2VyOS9wNmRRRE9vaU83V3g1d2cvc2Rva1BxZDBncEcxSlV2VVV5KzF4Vlc1NHFmVkVNZ1U1QXI1ci9iNWNzMUpPdkJPTENMaVRiZDExYXFnS0dCYUFWVE5QUVd5bzJhTUtNS0doVFIzQm05T1VjQ0FxNFZSOVZheGRCM1MyZEZCY1MyMUZubis4OUkzZjBXbytkVCtrRnFmdHBpc0RXRGxKL09TbHE3UEVuNUI0ZTBHSVlhT1JFcVZ3QmZ5SUJKMCtmMUNhOGkwVENLR0lTY2NrbWlXTWlVNXNuYndnUGRhQjhyanI0ck4xa3RydVhsWmpQMEpYdlRUcXlodFYwcnhBM2RQdFhENTRMbllGeXkzVG5reFZHTTRDN0NIZlQ4SENQMEpFWmVFaGpzSGZNbFdnVmg0TU5XQkd0SjhGNk0vUG9kQzBTT1ZnYkxpd25qNVg2dkNtUFhiVDFEeVorVTBtY1c4dkRDK3ZuYzhiRlQwOG1CVDJOWkl1cGxzZkVoYjc2SzVVMWp0cVF4MXFWTE55QXRFa2ZpbHBQMHRmQ0hKenRGbmF5ZFZQWVNjNCtVV25GaEY5UkE4VmNGNEJyRHJ0Vk14Qk4ybkRxZ1I5UG04RjJnWHM1ejNjMDF3blJaam9GUmo3TWlXQUlSeUN0L0tOaHJmcldPR1Vwd3JCeFJGMFI5Zll4Q2Y5bThzdktvbGVvUXhITU0vaTlGR0pQRFFHQUlQMGJ6anV3K2RnK1k2aXpjbHRIUlQ3Tm0yWkdlOVU1ZlZTOXBMNnFiUDkvRHdGbUFGaHo3MncwejlZcWMreitiM25OejhFV21KaEZyejRQb1ZSekhxakFRMkczRk9Jem13ZnQzYUFuOWptVnJmRmZKOFZIMlk4dXMzeFhxdlhsVzBZZm1oMnlCd0srcEUzdlp1cWhtT09qZXM3Z290Y2t3ek1UZVYrZnZPMVV5YlhUTlF3K1h2RENNVzg4L0xTWlNsZmNCeWIvT2xGbitXbW96UnZEd3VyVlJOcU9DZzRTWk9nZTdnNTRsM3NpUkx5Wkl6bVVTNjBlbTFiOHBYOTAyV21zQjBUTlgxY3MwOFMxWDZWWkladGFwRy9IdDlGUEdWdC9COFFETjVTSTlaSjY1YmtMbk9KSmFyamIyeXc3YklrOWo5V2VTZExGOWcxTGpwMHlxamtpdEJZc0wxL202Y2tIbzZiekI4UWRUVGQ3OXhHNVRuMU93MzRNQlJQVEJMRVd2b2hhSmFnUlFYMjJ2NjVEc2tHZ0J2SVVOQ3FzNWthOXpvaEVua2ZZS3RoMzJ6SXFicWlUbVg1bXE2bForeUVNNE80M2c0WjNiTWN4NThudG5iNW9lQUkvUkIyWjZZaTJYTmN3eFJDejIyNDNGMDhKVDhmRVNnNGkrQnJTY3VEZEFjUkdpNGVIRE9OV2FaT1huZjZrdk5hK2U1eTQxUWVpakY0VFp5L1B5VjhCNXVNeDlvM09uRURKbWlhb1AzbG0xNkszU3lYM1Q4ODYyUXZSdmtFRkFIbnpHNFh5OGNnalZ2d1RhR04zamtLaHJVZGNsemRTZkZUZ2E0MHlMSzdwb0JRcVZlQUVEdEtZNFZIWG1qbXNtekQzLzFQc1FPS3ZScUNIR1U4SGVuTmdJOVdpUlFpbTF0RktoQllUUEFZL3NYdGU0eEs4N2hmNDFDREltTGtqbmZBbDRiTTh5SVJpc015MVNpZDdlVnZnYmNtOWJ1SnJWZE1IU3pLc2tFTjl1S2xEYU9SVWdwNDB2em1QRnhRZllIVUpnRUVnNzMyd1VTbzdmWDR5c3dRY3RXYWhUTkR2Zm9INkRIcmpjdDhmMWhuSmJzRVBsZXBZVTRNOGJpVlZuV3NwS2tETzJvUlFFejU0L2pXcktiRlF4eEFXdUVMNUZIMXQ1TTBWTSswSFZ2RVVnZ3JQN2M4bHNLdVdWbnBzVXJFY0NUSzNkajZKamRCUDg5WHdxakNhbGdvaERVSFA3ZjgyUGtyRHQ2Qk5mcFFENHNHT3pWN3V1RTFMTEJGTCtIWVd4U3dQNkg2L1ZuZEJpbVhyaU9nN2pFOEpINnRhWXRWZ3NjcEc0NHpWdUhsSk9acjBVVGl3a1E4SDVzZ0JweTlobmxvYVRUWU9RQUxZU3IyU2ozVElJZGJMWUZLa0NsNFg1c0MrRW85VS9vVVJkSWp4TzY1Q1VXRmdEMTQ0S3hxSnBZTHNKekxLMnZidnVuL0ttTEorZEJ3UDZzZWp6R05wdWcxSEprK0FQTHk5WVA5SEwzOVRJQ0dDNUJBS1ZUVUhHcDUySkpXNDFRcHBKMjRTOFdBOTc2S0RXWEM3TC9rS3oxUHduenhJMUt4ZGlkVi9EZ0lRT01Ld2pLVDA5U25vcERDN0ZuWEFuNW9DMm5oTjhYZlVvNzEveFY4eDZMSW4rbTFiQnNDK09BRWhVQTJ2b0svOXdjUTRBK3Y5SjFaaGU1OXZmaDRsdEttaEFTZklnN0YxZDRHZzByOTN1RkR3K0xWUGMzTkFwL0lpZFZ6RzFYTzlZaUtubW5QQTJBVHl1UVkvZ3JYQjEyZTRMUVpUZHI3eUYzN3EvZUJrWjBSVEYzeTdCUHdrQ2U4bFBMUVNjM01ydFpmTjIrMzBDOXR0REtmdTczK2FFTUVXUUh3blFPUW1QTUNXazdBRmpmTUVYV0Q0Q0U1WVVqVFZQSmlWV2pWakkzcC9wTWkvTG9YWDJyYVAzNjVqdTV6YjlDV3BROUFTVU5Ob0JuL3A5dGdhc3VBMFc3V3Z6WE5VTmZaRmdrajdjS2Nta3BISndxWGEyeTFsdWxNSjIwV2hENmJyRXdPVVhCZW5YRHAzNy9oLzRJRnpHYzJuL0d6d2V4K3hmZUQrRTc0SmNUd0ZGaTUza2pvd3l3eFFuZHNkN3d6K21EOStVb05rM3ZhUStycm16Z2VicjdMdlovdUdCb0d3dDZ1OGdNUStqMm1KaW81SlUzVVM0bU9OTzJKbThyZThSdm50aTYvTzJQOFlQV3lCT01QdENEWTAzdC9NSGNqUHZkakRjSlBzcGNLbkhRZjZZdkRPWEJsRnJXckRVcWJtcHFTcnVRNTM4dEkxQmhzaHdNNWNaK3RuZDh6b2E0bXM2OUVyL2hpMS8xNXdHbWxrZ2pMRTQ4OUthYkY3MkhUemZQVU5SdzBNeHZFbjFoMkE3OWNNeEMzUDZwamxhVm9wc2JTYXpYWnovMUhJcEc2ZDF2SFR6UzVNYXJEbWZhYm5lMHAzWGQ3Rm1WSSthNnJFUkV5YzQ4cDNwU2V3YU9NSWdPaDE0UVRxWUFSb3VtN3c5Tm9XL0RhVDlaMWdsbzY2V1NSV2REYkhCaDUwTTdpcUdCMm9NbHJOMytkbzFhM2J4dzRhYzJFOEgzY0RuTWpGWjdRVVhVOXU2RWM0RCs5a01YSU9wRjJjYytoOFM1TkFReXJZTkFLbXRxV0E2My9oeUM2cFdoSk16NWV6YldML1dKUnJ3QUQ1RTF6VU1LQ1FEbjZVdXRjTGRCVERUbk1MUktMdE93NUxUN2lDUHNoNWl5dWF1Zzl3d1hSRGRtWW9aZVZ4K0owNTEyYkpLWUMrMmg2R3Mxa0hJOGxiOCt6aUorbGNuem8rOEhOcWg5NnkxMklNQkkzNEpYbTFTVlFLL1hlQktjcTZHeW1wQUhhY0lsOExjNnEydUdtSG9WZ09NTlJWdUFDalhhaTE2RmprRGU0QlBmOWhMSUJleFBLamduVC9HNDVnY0hRVkRVZFQ1UzNRNnBXNkd3NHFpaWNSSHNTdWVuQjc0cE9vVDJBVXRKZFpsRWloYnJ3ajd4QWtKRkFDemdxb1JyRnhlMkNRVlkzVmZCRzlzdDV4UDltV2FOVE42MCtKV0V5d0NDbzhrWUZyTXUyQzY0azI3VDdVME1ReDJTdWZ4MEtXOHowVi8yT1VwMHllNzNBMUlYZHJ2dFBVbWlBWXNoeFhaaFZyQkJIR0dlTjZLMUZMWlk0QnNLSnUxTkVXaDJtOFBMUFcrVER2eGVHSVdBUFovaDZzUStYTlAyNjFIT3FUTFc2Q1ZwMUcxSnZGZkJ5NlErQ0JnSGw4SzFRRXRReEVUejQwT01HeWZHR1BVM0oyNVYxb2h6bjNyMHBCZkFiYURHRGF0c2RGc0NzSGZCd2VSaDlpMk55T2s2N21NV0xrUWhmVSsxOXdhdXNHMVBkTThvODRjTzl6Q0tMV0s1SVUvYWpIdHdJUTVlZHFTQy9JSUtxWHlHRDlFRkJ3N1RGTi9FZDJDRGNmUHFyNE9BbWNBZklYYUE2VkpsS3B1cXlvT2F3TjNweUN1N0sveEIvWTJqZkdRZ0RoSUg5bkhrR3R2dDJuUXV1QVJYV1Q2OXB2SkNzc2FreHRsZ253R3o3bDRzL01waS9zamRaa29nRTFIUEJYTlM4TE1MUlh2R0lOM3M1WFUzWjNDMDJIbmwySHgzbzFubi82ZFQ3WU1qMlYxVVlSSUZNajlFUTZ3RTNaejViYlY4ZjNYSGJ6M2RwRHdLaTVlaXNyU1FoTHFHMGl0MkoxcytrU0dtNGFvQ2M1WURLQ0YvUHJlMThQN3JaTDNqSlo0dDdnMVE0ZjdhdTR0V3J5OTlIdnIyN0twSkFEeWJjMHBsb0cwQzBJZjhPRTV1OW9vSWJ1T1JkMUlVbGh0QmltcVNUbXBZTVM2UjR0dDRQYmo4S0V1L1lEOG1rNUtlMWdjNnBURjNRQ1ZRSUswVFZZeG1EVUVGamxsL0lodDNIRTJlUzQ1WE9rQlUyRU5USkd5UytVRUwwWlhzTlhGSDlyaklKWmYvNmc2cTF3L1ppdS9sOTRqZEdUaXgvV1FFVGxvVTFlM0E1TlRnYmFqbkkrOXJXMWRLOHVzTmVzaWVSdjArTHZINWlQU0tyNFc4RmxFd3ovZjRRVDRJaWhlOFlGVjZQRDcyRGt5ZnR1cjBxWjhVOVE0L2tmUHR1SnBRNWRjTjNlOStZVDN6RmM1bFdqYXBMMW1uTVJ2SWZ0anptYzFGZ3piWEtndmRqeXhyaWdaVG52MVM5L1drVCtaL1JwdDJWMURxTXlxTEx4a3czY0pMK3JGbjdwc0Z1bzhIczIzTjRTQjZlL1l0MVIrTHlsN3RsRFJ0Qzh1K1hTSUI1b0VHQzFLSHFGc1JZVHVpUnlEd21tZWNsakwzOFhaUE5ZUlprMi9jdE9LRzAyOWRSQlVEc0tXRjN0NzZ5SzVxY2JlamlSTVVPUlo2dGlmOXFZSWxxK3MzWGdTdGY1SHJyVTBTY05QMXM1U2FFMWhHcjc2K1RZSXZXSkVRMjBDZzY1VGVuKzJGZmdiOXRudGJYOU5PZUVROVcwSFdLbVFNMWM5VW45Z1JJc2hPOGxHNE5tcmVVbkVkWlYxNWxCTFRHSlRFd3RQYmliUXVuOVQ5ME9ZMDVwb0FxVnV2SFg4WmEvUWVmS2JqaW9WOU5DRGk5c29CT0pNVGUvZjZIZjM1SXpIVXJ5em01cHI5MXNReDEzamUyYS9wV1M4SFNxemZpeG5jOTN5RVU1dC9OTDhETWVGb01nQTByamE2clZjL1ZWWDgvbjl5S2VDdzFzNTBiZlNqYXJLNVZXcGNleXlYYkpDZzZIK3VrbHBPdHY3QVVob2g1YVNBWE1mRVRZZHY1clAzcXNJc2REc0NNMFJkOGpPSnlJcHJOZGpWdXpSeDFxS1g4VDZtS0VXTGRKQjBxRGJnRklYY2JhaEljdElKZ29tc05HYVlOU0UvSCtSbTFpNkIzdUt4NldyK00yVERjelZvZis4b0dKdmVqT244SlYvUXFsMjBTYjYyUnhuYUJhTGErQ1REK29HSFFBZDNxbFpHbEIrTmRRejZlZEFEaXcyd2hjNTJjYzFwWWpkaUxNZkxFZkNOS3J5N2srUU5DQndSbmxyWkppdkUrSmVvS2FoVWJZY2toWTlINjMzWkM5bjA5Q3NXUEcwOHUyMzhXY2xHM2lhM0NNUnNTZm1lTE4rd3hONFA4MHJ3Yk03cmVPM0Zha1o1NGtMQm54V09vY2pFTnJsWG43cmNjSjBYTlhUcWZiOXVWTGtLY2crbUROZzVmeXZPZk9QcjcvSm0xSSt3REsxd2ZqYmtyOWl3MzZtdGxJbTU5NFFCYlAzRHBoRkNDOHhqelA1RVFuL00xRnNyVUUzN0VsU0NTVnhSbWpIRGo3L2kxaE5TczJmbWlndWJaSmJpV0FoVEd1OE9QV1czTDJjdlIzWGFHNmRDZTdtMXhCMDZnWTJTQkY2ZTVwOFdyNVMzMXpieWNObElrYTloZWxNaWczUTF5V2p1Yit3VTFrY25UTzFhU0lNMUdXVjNIQjJCbDNRWEtqUXhDQUVBUlpvL1BvQWh4dWV5ZnJLd3hWQ0dZdUQ5MFJ6U3VScEE2TGJxUEl3ZHJESnpiRkUxd3p6enV2UEQrUjRlc2ZZSjMyRnJ2SlpOK25DcHhyM2NKRFlSbUYzeTRuR2p2YXVUSVZlQWxvWmwrcTVNUHlEbjRib0kvVllIUnpJbzhDNlI3Q0FQV3U1Smt6cXNEb0EvQlloWSsrbHJja1YzL1FNbURYd2FxZ0lJT3hVbVJLYUlHR0M5QVU2UHFCMG1RS293N3VjVTNkRUlzZTF3UDBqOFM0bmJGTk5vbFhUWjZtaVBuY1p3ZlQyRURRK1NrMy9DNGRaTlVzYjFFWm9oU25sOFRpdzdoOXQ0YUZrUjVySGsydDJnUEVvUnlKeEhUR01TamxDTGhUNys3S2RERFluemQyQldaeDFBVkYyUmJwY2Fqc2NlUEFVOGx1TUdFNEN0NUJ6NURma0xmWlZBZ0I1VmZVZHF2QVlNamNsL2NXMzJMSjZlcE5oWHFaQmhsZlFBdmZFWTlDWEtzYXNqanhwaVNDY0tFclJ0Q3ZVdERvRFd4WlYvS1UwVDdwbW51S3MxWWhWb2NTZXRRZHNERHRHRFhMNnZxSGIzOEovMWJOdWt5WnVtQWtWbHcycFFGc3Z4R2lKdEpZTzdzL0lqbjRhNXVscGFMblcxdVR6SXk4enllNVZiSThUMTlvbEZnN2Y4M2Q0cHNMQjRwYlBxU2ZCejdGUmQzb1hpUjU4U2VoSDI0T2E5N3phaVZ3eldYc0ovSmVvVlZJcHpDWmE3T3lxN1E3TmhxTU1nUFp3VVM0bmdZNSt3RUUyMG9ZWmR4aER5YWJQK1dpWExhQTQ5QzNXbDI2aG5za3BoY2ZJTWR1bGZnQ2JIbW5KdTN2Z2c0b09nVmd1cXVtcGdzTFdyVGlEcU5JUlpsV0ZGek1QVlNQOVVIYytGdzB4TXZRLzFGY0ZmWWJnOXcyTldqSzJoM1BVb0VwZ2dKR1kvZloxaGYvTW9kR3krN1Uzb09ZT0JHSkxXemw2K2NrTzEyeW16czF4cCtqUE9SYjhDRVNZdUd2bW96K010WVZOTkhZM1hjd2kyZndkSVNYaGFyVjZCOXJjQ1d4bmRDeEJQSmZXRDhDY21wYlBCaVlQZk1nYlJZL0ZIUUE5Vk5uS1ZKNlVBVms1TnhlZ3NpVEJENUpPaGdKN2QrYzBaRDNGUXZlN1FWWjhvWThMNkpRczR4N3RtK3V4M0RzYjI2Q0xrWEtocWF0bUh2bG9zSkpMVlRRSnhVYnFZVk93dVhGSGx1b0NmTzRocGF3LzFzQmlTTHUvY2EzZjJzMWlMNDBFMXFBSmZOSTRGWFpCZ0JDOFNvdklaUCtNeXdWTVJQT2dLNk5TS3B5RjhxTFRvc1FnUmt0c0lxS2tjY2tDRkhaUndKMkhENDJjdnpQSjQwZHIwR1FtRjhBZmVweWFjdDIybnBYN0g4OExXMVgrZHpFYUJqUUhubzRocjRpOW1vMmpUUjRERVZVSjFtT2ZUL3NQSitXYjE1eFJQTE9zeGlVSVNsaS95Yjg5OUJpdVU1VlhRbmZNZmJBWmZSbEpwNnI4Y2pQVG1aWDBLRTVMdEUyMnFZeURvMk5Rem0wNDdoMitpMUJPUFBVWmg1cWFVMnJWV2xEekFUanBCV2NnRFk5bnFEWTgvdlhnOG9pSzVzZW55UTJCYk5GR1J3eitMR1ExZjdKMFFpMFlrRTFLU1VnTmN1MC9lM0ZFR29OR1lmYTlvTk1XYnJVMVFiZEl4K3lXcStIVWZ5Nnpzd1UzUitZQjFUUGdxZ2tXbjFPZU9RaWJHRmJmTUtWMEFrRnE1SnFrVnlwUHVJMjdUdnlVOUtkTjc1c2V5ZUVBdU5GV0I2c1Z4VHhDRm9CaVlyZ3pUckgrVW1sdCtLbi9DeHFCUHphZHR4QXA0NURVU1NWajhDWjV5amN3dVRidEFhd3RLSzVVRy84Y2lIb3A4K01ITWRVaURrajNIQVZPNWxYQXN5TEpQMTRnNTVSNndIRUJwZ3I0ZGZ1eHU3VEE0blE3QkFhenZ6MEVoSkIxUkhSMHEzalJnZktQWkQ2T2YwaTFZWVZFQUc1K2VKZTFpVDUwemo5VFpzYUFDNXVvWWs0UHJvc0ZrcFFUbmJJLzJ6OVkyVERlc1VKMEVXbDR5UXlseU80RWJVWE9yK0xrZ01Vc1NpWjkrV1hCVGpnVk8wT0c1MnczcEdWU01qejY5WkNGRFlXNHZQOGpyRVplVHRvYlVBUithMGxURFhoMERETlZCdGFYbWVnenRBUWRRSVJhOVpkUVlxS3BXVXZqRkNqYzFybUlQNVBqckhrMTlHSjYvZTk1RXNGRk82aVhCMytET1ZaeVZSQm44NkhIWVlmUWNaUTc4NTVkL0ZSVWU2TU83R3F0T0pxUnQxS21NODByQ0dwdnFtYmNJcWt3QWlJYUVKT0h5NUU0dTVoT2JFN1FMUUpuYUtCVnVtbENhcld5UHlSbXRIVW05VWM5bzhaVWJ2eG9CaEJpRmF6OXhkT2tidFJrT3dGZFg0UndRTEJVWUhod05lQ05ycXNWbFo4WUI0YytQWFlJVUk2VldrL0dDYWpyUlduNFM1T0ZaYUZlQkxaVUpObzUvQm8zQUxkdi95MEFPRzhUdys5dGVrdjB1WjdGbE1zeVRkTjI5Y3hkRWNPd3dUelA0UzM3TjRnWEFnSWpINWpMcDZBN29PV3JubXVXV1VHeDBlVFJ2UzNnUlJDTytrOGZ1Z0U5dG5TMC9sYWlNNUNOMVY2T2NZdUh3NEV3TE9UUHlSbHBjZ2ZBcmVWYjR6YXMyN3lEa1VaN3NHZGYxL2ZJR0lDeG9BQTh2TGR0WUZBLzNwR29yOEJhMXZPNlNGbXBkbWIrRjVpTGU1UkMrY3pDTVM2bmdIV1R4bmNJT2dBNVA0L3JzVHJaZXg5eFoyVnJuSlFibTlwWFR0U0REdDVFamhoSnJoTGRrajBDTktpc2RQU090RnFJK3JleUNNK2ZrSlJkVHlFSXJsOUtZR0F2Nm5VRlVNTGtwY0FYK1h6TTd1WEdvL1lXYmYweUsyczVmVzZiL1JuRG91NFRPRHZOOHA2d095N3MzSlRCSmtFYWd2VHNLZlFndnZCVEkyYkNtV1d6d2M1RlNtT1VkTkx0OU9MUEhhb0ExZ3JhQ2dpUzVuSkZ2OWE5OVRzcmdjWVpFblhBVDBuRGJMajZxOTRuVldtS3pLSVVQY2czUGNJejR2WXJKQmFVOHcrdm03TE9BLzIvUGRHdCs0andxWmVwa1JmaGJPNlhwaXRMZ3NRWUlhNGYrT0lveWh3R1ZVd2l2Y3J0NGt6d3RPaTlYZ0RObkwzckR0ZDUwTWRvaElIaEpBWFpaUGUzc0NEMmltcFZMcmVpdXhYS3I1b2lZT1ErYWxUNkRuRnNOeGJtREF2b05wNi93RWlpZEJTTVozaUZCODdnaHh0LzArU1V6TWFmMDFGWFlGU2xVYkZPbWtvdjExSktQcHRCR1JQU09ublRpUWRieVY3YUZ1Z1dpcW9VSE80bFI5QjdJRW1oL3NvQ3E3dmpHYTJEdENZQklQNlh6YmppUUJKOEVmK0x0cTlWUDkrRDlpYzVtQSs5VjcvSTZrVFVaNndEZ3R3N2wxRW5jekIwc3Y5TlpSbEJGbEtRd3R0TVhmMkJmOTlveHphVjYzYVhvYTJibDYwbGtSU2loOVBkUEd2MUdLcXB5ckhrYWhkamt0b3NBVnd6dGxwcXU3WTRsOVh3OEdvTElpT3pvaVVYdlpJS01nZmNrajBmeE1pS0JFL2gydzErSm1GR0lKWkUzZlBZbXVCdVF3TzVDakZtaHhKbFRKZFBFY2srYURBODNjWEd4YXZYa3NoZ3FobWZsQjBjL3pudGRROVlMU3h3WkhsSmhQVzhNZ1hZNzFTUmNRV2tTK1ZZSEY1UG5TcGswa3FxWUt3UnVJU0xLdGJjNGFtMmVqa0ZncXJkSEJ3ZSs2N3drREZjQmxBbmg5aXFBZHJJZHJIRFljRnViNWkvaElqSXNvVGc2VnFTSU5oYUxpb24rcEZPZFYwTWVJT3ZremdyZHc2YXlFSFdQYkRtdXZxWG4zdzJGYW1nYWVDZjkrcnY4YkVLNG9qUkV4eE8vT2FubTlZZkVWQnBZZTV6TXA2d084d2hSYjltM3J6MGRoSWJrK21saEhGc1kvUnJwNDBYdGtZNVZvN1FJWnNZSGJWZXBFL0tvcGtOMFYrazVSMmJnWFM2RTdkME5ZM0NEUlEzeW9QSUVwY1pPLzMvMlFybUlZek5RcHI2L3NZSWNlRElEOGVWc1ZGZHRGakdMdWdMRGxOR2VlUVdQSTQ3bEZiN3NuVnZNWDQyN05ESGZHb0FhbnVjbUhFSWVxenQzcjdFR2Y0UDBYT09DWEN1cGFONjZ0bHJuSE9oMmRkaDhTM1lscFdURkI2ME44bFBXZTFaK2UwUnl3OHV1bE5VMDl1OUp2R2t3SzJldnZBdlpweXA3OEp0djVHMUpPdUtnWmJsV0VQT3VJL1NSWEt6QlZjUDB1OFBvOFFORHVjQ25TUGt2eWlvV2xGQUZiSmNoWnZBTVphQko2aFMxMnE3NWxSbXY4MW82MENoNlJVZFZjQTlwREIyTlEyNVJnVXowMStiaEZMdnNSN01sYVdSbnVLSVYvbzZaUXZHb2N1UFhaMkV3VXJ5SUxpc1FtQWFydWFCOS9XVkY5T21OaGhPTU90dzdmZlk5Sng5YmxpUnh1KzkrNmMyWFJiSVpQTzZ3V1dTUGVEUld5TzgvK0ozZHY4UmQ3S1JWQVZDdGtUOVNhUW41NzdDUVpmKzFMNEVCbW5IZTNFMzI1M0JNa1hDVXJLam9ZN0JBRmgySmZEd1lMQnVTNXNKQTVNc204QUJuWmxURFBGV0pWRGFXamJZUlovaUhueCt6L1RzNThiaE1OYmI1L0VXYWxValZWWGV2NS8weWlYcHk1bnJNMUZsM2tOTm9PS0l5NHlYS290cmVCc21mVFB0MG9YRkFIakpNbDFDNlo5dnF6cDR4RUJCNzhlcStnbTF6WCs3OXRpdHpzM2RMMThSZjlaQkFQWkpMWDhHd2pKbVpHWVp6cHRCenNnTDBZT1BDN3pJWEJuaXpPdXRWWXQ5ejJ6YnRpVUNoWVpDTXpNd0Z5aWhKRGVGQzlZMkNzVm1MR1gwWXhGRzliRzN3WnRGN0lQWUZPVjJ4TnFZTEVLVy9UZWVtYVQyb0tGNVdkbjZ0U0VIZHVlV1lyS3U1V1ZxR3Z2NHF1VFgrK2xkcjFsbFBSaytNSW5GVFNXYk9LTXowWCsvMUFPeDZWMmJ4TWRCaUExVGtCbVFWVVFCOEFXZTdVcVhWQ01CajNFNFliZVZBMElBendESDcyOWRKTXZYK0M5UTBpUXVKR1Z2VTh0N2FwdkUyY1ZLUmJjbHNVOXBKQXpkOXZXV3A0dVdIdm1IT083c2d1OUZHb1V0RHRma3dYWWk3bEZrazNkWVRqWVo4dUh5d0xuZFRwdStmb0VTQm5WV3ZhbFlidURNbjBVM2k5NWtBemJjdzlmWCtIeTlEZFpTNlNCL3lTa21hNU5xWUM4VDZPaE5uYW0wTlNDUm5wZ2h4eStQVUpQUUg3Nk5Dc0pTOVdaYTc3eGRaWlpPQnNMRExBTGduWm5mbHNvUXpYYnZOSCtGdVZXZnRTNmxCM1BKd2ViSGV1QTRyRjdXNS84dDhqdVJneG82TjBIbloydm4rU1JaY0xaWE9MNUtkNFBMRGZ0RHFGeVlSRXpVbnMwTEM2SnJxSkw3UWxsZzRuanpiRG8rQmlrRUg3NG9iT3p6TGN5cVdmL2dERXhaajhTTTNocDBZN2dyL2F3UExNV3pGNVFCa3ExQXEvbno2TnlEc1BKNnBGbmlVNmFRK3JLU1Jpb2RyNTFXZ1g1Q0xkTHpBa2dZaDcxOS9kS29kejVYL3pDazA5ZTNUbWhLUWQwV3dweW5EK3NnY2hSeEV5SElRVUVRVEg0UHpJdWZoZ0F0MzFLaDdKbUZzWTlzL2tGRGdHL3ZRV1E3RUU2cDlTdkpsNWtNU0JrZVpCbUQ3Vkt1QjNWSTh6b1JTbHQvMHJRa0llSFlIWnM1ODZENUtDU2k1REkxMUVDNFZPQmtiSzJOQ2lUM1dTd1R0bWg1cXNJTWxQZ0RvU2k5czZkNVZzSjRQTHUwRkVaU3ZEaHJZMVhjbWxDRHVvYTlpSkk4M09WYUdsV0YwSkRTeFlCYWlqbFFYaU52ZjJRWWN1NEV1VzdUMUZEN2VaYW1pN3BzdnNnZkhKZnZ5L3l2VlNId0laWlI3SVU2ZzgzOWltQnd0MmhubWlFdnMydFZUQ1I2TmhSN0phdk9EUThwc3M2MGpiRUEveERWejYreTB3RnV5YnAveGlnYnBpblV0bDhuVWlmN0pnaHV6Wkd1aUIyREFxYWpKTFhXWk5oL2tab1BnMnR5bDZrY1pjd2k2dnAveFlQSWFEUjY3Qjdqd0YxU3BVcG5DRXdOS00rKy84Y3NzSU5kRWRGUGxybVpzbmg2NE1TZFVrWk5LZkNPS3lJUS9HbGpYaDJRVmRINmM1bFNYT05ZQzJoQmQ4OWlyTml5OElGZTNrMmVnNlFreEhEZ201Mm5PcXVnT3EyNlRYMDk5K2UyWWdmbnVCcDBhbCtIMVhQQVlITzRQNWI1TWhPSlNZV2puaFJnU3paOWN3bmIzQWtPTTdNT1g1Q1MwYld6UTFQVTF0YTFRVlljUGR4R0x1UDN2akprNVVZcjZsL0lObzZmcys1OUZOR09Gek9PcHNCeTBsRG9tVkJTVi9qZmhsa2xSY3ZyNEI2ZUNPWDd3VFVkNkxDZml4clBOVnVSRzlOVG9MNlVBaE5xMnZJdzhsK2o0Ky91OFhOSlh0a1JNQ0tmR3pyeitDWmF4YmF1MXd4clJpVVZ3Q3VQeWpMdnprdHFsOXdjZjdVSzJhb2hhT0hteG1aQW1tekM3TllUYXJ0aGpobzJFR3Z0cmdqN0tmQSttTHlueVN5UHA3OHhZN1U3UzA2Y2t1UUNwMlgrOGxWOFBFSkpmTG5rNERQUGlYUm1nU2dWTlpoUnFLUFgraVp0N1hkcUs0N280QzlLeDhOTU1NUHJ4UUUwN21TKzB5WjNVdFFkSGpSQ1lrVVl6MlhsR2RORzVkMVd0Z2dKOGFBTDZySUVVaGYrQVcrT1JZcUppVi9lWDNEc2d3a3BDazhvZ1N5YUJ2SUd0TXFQSFZwNHhBWkJQZkorSVN0M2ptZVUyL1ZOeFBEaHVuUnBkUEhmZHdlTm5pSDJpZzAwOG9JSXpyeGpodGJQdUhwK1V1ZExPdDEvSEsxMm05QktKZzNRdElPRU1IYU9GUzdLVHZWVGNmeVZETXdYNmpYekZiTzBKcGJpWFhuVk1SaURhSHlsTit2NlNBRmFIOEpkajNOa2Fla1IxczRCVDI3K01ML1JYOEtqeDRNZzRucWRlSmllSHNjd0pGZ0F2QkVUWXBLVWFHUHRFem9WOHpmMjdyMW91NzRZRjJUQncwK3dWWHlvbCsrUFllbUViaTB6Ry96eTJ3UlBGYmZWdmpkWVRKRUVKRzhyMzdIeWFxbTQvUHlHZlN3UmRveFBnc2ZwMDhRajVhUXdJNXhXOE1lajNhRUJoayt6V1hYVmpZUDdRTkdUbm03S281MmEvaWZlZ2xQb1hQY0xwaVdZYU9qU0R4S1VidnJqemN1U1pYZ3JJNU50WElZNm45eU4xWWpUajRobkIxMEFZTHFiakdmQVptVVVQMjBlRXNiODd5b2Uxb1c4ZVYyZk5xaTZDWUsvck1HdDFNU1FVRUM2cTVOWllWUXE1WmNGUTF1d2twQ1dpVTV5MXNxcUorYlRsREFjUzBFamhkcTNSTGhXdU1CaUhBb3Jqa2ZIK28wMU84a1VWeFBLalV0RHNwcTArcVFXOG8rTzRMYzREME5wc21hbUpkUHc5S09sUldabTA3ODRIRHRPY0JBN3BFY1hVSkpqWjNGT0hoZXJEQTUreEQreVFMR0F4eWNtYmlvem9KcStaZ29JeFVtMzVveW5XUjNYMjdYM3NMZnZjNjdlem1aVE5nOTB0NkJBeG9hdFZ1NzR2bUxYWEtnU3BjUDdkS2NmMkRvaFgwZml4a2dSalR5OVRIaC9PN0NCbVZZSGRDdHNHQ2J2NXJoK1pmancvSnhTL2IwSmcvZXI1WWdDMTNRZEtUNlhBWTNFYmhLTThwVFMrUjFnUWVQeTBNYm1XTjVyc3JFdHpYbmRMeGtlcTNEdXhaRE9ObUF4OFdSRVJsb1lpZ2tXYjA2cDFPNWgrTS93ZklOSW1TRWhoSkV1S0ZibWxZVTBReFVvY0VvMTQxbk9ZTmh6UWViSjRORUZBVGhHTWI2ZDl1QWRyTmRoaWk5cVF5Qk9qMWdCY2NyQTJxcGdKZVAvWXI0N0hONEtoMDRQK2VZV0pIZ3U3ckVqM0tHWDVRV3ZUNEk1SW03WVYzRitod1Urdm5YWS81dE9KNTdLc1pSTCtqWHpDeXRhdXEvekZ3M2RrZHhNNU81NjY1bFhPUnl5M0VaNnRYejhza3I4NUpkbE4xWmJvRU4rNThJbU42ekl4NDY0L3dzVlhCeHFxejIzUnUvZlBLT3JIQjRPWFAvRlVRdUFpOXYwcGdlYjhQOSs3TTlmZjN1WXpmdjdJQTBwcmlyWHJzWm1Kc0JoS3pwbCtubFNncmExZ1ZKdjZRRTBGUktIaDNRU013TlNVRXlKU3FyczFsa0lwcnVrRDhnK0g5T28zbGRvY3pSOXZsOUhlOUlsbGxOMEY4dU9MdzFsQ0ljNmRadWovWUpXcC8yYUV4VFJvazZxM1QxUnQyMUlscXBVNTNUbU5OckJHbndjUDJBYzVKMnFKMEFsQTFYR2V0b0JwcXV4dXh0WXRkUC9DMmk5ZDlWdk1ZbkxBZlpyNzZENzFwSW1mdUNEVjArdUVJaHFkcEV1YUFHUDZ3ai9WRitPSmhucjFkQjFGbE9NbXlWZDNSamxOMGF1M2pZM1VWejB4cW5ZNDN2UUc3L2YrV2NNSThzU3VPL3A3ajR5aW13TXRnOUR4QTRmMENWZVNtQWRZKzNLc3dSV1NwaElFSGZvNFBhc29jU2RWdFd6c2dRZ2VZeGRIekZKM2FjRkZXK2VlUFBGeUxKVS9ZVjlBWXE5YWlCeFR1RndSa0NiYmw1TUdJRGxYdVRPU2taem1id0gxZWU4TlBBcnd4TC9wZ2ExN3JsZ2JGQ3grWlBpOHdMa2NFSGozN25ibUZVVHNMOEpyMFAyQjBhRlB4YnNIUTFsa3ROOU16cW5ZV2RnT2t5WGRqVjZkZVFVS0pPUmJrR3hCdHpQckxPdFc1T3BBU2tYT0lPR3RmRzV6UmIxbzV0cXFuRmxvR3ZvbU1mZVIySWRtQ1lWTmM2VXY0SjRISzc1dmRwN2xPSmNlRHptK3RoSHI1RC9mSWp4RStva25TU2NBYXJlZ3QrUWNwL1ZrVGQ2OEJMRkF4MG9JZmlZbTg3aWEwTTBMdGc1OEUxck54Q09PT0drUjd6SzY4Z2g5V3BMQ0l5YS9MZEtlNm1yVjBYbzVwSTJnOUplaDFEUHlhUWdwTXFTT1VPSGM2WlV0aDdmNnN6TldEUEE3TzU1WkNuSFdWT3IyNFIzWlh1WHROeDRna2lmWW1VMHo0QU05TnNiTzNsWFFyb2RseEFKNy9vdXpOV1BPK2xuM0F6QU14b2pxKzdpOWNVTTF4NW4zT2hIRm1WTVdiQ3hadjk2Qnpza1JSV2wzYnVaQ0M3eGhDbVJDL0U5NUNzNVlJcE5ITzl6a2gxa3EydTF1akZ3cklzK0hLZDd3eUlIeGVaVzFTVTNneHc1QTFGY3NtbUppR3RTdDhBWGh6K2R6dFJRbDV4NUxUQzVnWG84YnZTNGpiUTR6d2JJQlE0YzdEcTBOTmo5RzhHV3dqck1FMEhocWhFaHE1cXRJYmYyaTJDVkxWc09xMHIxQ1MzSThlemc3Tk1MMkFReDJicjFveEZKK2o4bGNKL0FNYkFwK2lhREZTVm0yTFUxOWZvNUFLSTk2TmlROWdqSitZTTQxZFd1UnprY3krdkIrQVZJcmxMTkp2cXBTdXdDdHZ1MXVrOXpVTTlES3VZaXRQeVFnYW9IVm04b2xsTk9RcWg2c3IzVjU2Z2dzL1lSZnRmaThId2lyYjRhc3ZqR2tiV2dveTZrS2xUekc2YU9ROFlmSGN2ZDBBZlk2emExNEZFRzBMTmQwRnkrYStSUXpQK08yVzdiV1dOc21oZTRKSlNQY08zdkZxZjUrbGRqbUxCc1ltWmpmNE1CNU9VVmhXVDlnWmNTemFxUVJqbUFiNk1VMEp1VHpsY3NUbXd4N1Azc2RpemIxYzErV3ZqM045eGUrL0M4dzlDa01MSDhQODRyUlBZN0RleUhsZlVndW1ZRi8xYmluNFQvelQraGVkazFTY0gyRDUwQ3N0aXRESXJ6c0pWY0ZpVGhxZi9WU1ZmSHRKSkJPOHphdHpUbU1EM0RwTGNmYjU0WjdhVFFpY0VqeW5oU2NJd3JDbWRVeXRZZG90czNkeHBRZnFDbHFzY3lRMXJCUU5iRW1lSkJ5RDh0S1VKM2RoalJsVHZvQm1tWUc4SVhSWERHZllMZjhtdHp5Y1dqOVAvTm5hSHgxemRudmxSc0t2Z0M2dVhXWHJuQmR0VGlsYlprWHhXL254NHg1ZkNvb1JMNlkzYmIydWJSY1pPZ2VlRmRVZS9WdjBmNkVTaUNacVpudnRDdFBmME1mR1phT1k5NTRYdmNmN0lNK1hwandpMmdna2FLeE1SMXhiMXpiWG5iTFh1Rm56bUQ0Z3lOVk14dk0rTnloM0lyN3VXV0kxRk5JSjJBdHprb0hQNzA1VUJTQlVrTDRJNGJNc1dTV2VuZTNIbGtWRjlxSXAzUVphQTEyeTFtbjFwbWRhQnFPbHU4NG5WbzIvVnpVY1ZCaDFsSDhhMWoxSGFOTDVFTGFnZE1CMy9LbFhHYks1MDJzTlRkcWZabjY4STJpZm56UzI3Y0xzcWxBMW0vMXo3Q2JiUk10Mldkb3N3c3JMSFBDd0JUVVZYVHB2THdOMlhndW42OG10ZmFDMWpiR0hUb0NQRkpaRlNaUy9ENkpWYjVCSkkvcnZhMUNsVzVhU1hla0M1Z21sSEQzaisrTHFST2lrNlRRSHFyd2s1enpWNk1OV3VsajNta24vMGJCRXZyekhKTjRsVlVDT3ljZTVNRlNnT0pUanIxb21ScURlYzJpYzJ0UWd6VEduUkl2SWQ0V0RtK1pWaU5OeHdTRjh2NDRaN2xwb2pvUnZSb0tNcnVISnorMFNkUXRhK1JPTGF3MkFPbEEzV0xQOXNyamtqbCtsSDZqL09IYWw1R3k1M2RDeEE5azVyTEJ0cG85U3U3MHZuUEYwQ0IrRWdXbEdKQlErQm9EMXJVZ0ZxekNpdFdhT1dWTnhUd0RBQWJ3M0x5dTVkWWZwNStnRFc2OGVJNng1MHdiUW4vdHNKZldvem1EeE55VUgxejJXZUpBVHdxSm5yRmI2OUFaT0R5K1pQOGtuQjFNYnJaUFRvUTF4TEpNdFIyUnNOTGlwSm9pNlA0Z0QrRG1FTC8wZXBVS05xcHUyY2tuUmtBWmh1V0RjYjlTTm1jdXFQME11UjBOQ1FhbjJpQ0FNV0tOVEQrdGR6eE9PZ3dhZHlYWVNESlhjajE4RlE4UXE3Rm5yazZ3dmFLTkd6Z1FvY2VBREczR0dCRFFIRTJycFU4dm9lOTE3T3lteVhJcXNOcnZSN2EzWEo4aGhtbnR2NzNRTlp0T1hTVmdXbGNZYUg3enoySTJLazFCNk10T3JNZzdZOW5lMlFGYllQWU5oZGxnSGtyczlOZGQyKzFOaWJkL2wvV25ZSmdoRVowV2VublAyaEh4RWFPcWg3STd4WWdONXdMVWpLTWtTSGc0dkJILzhiZ1dkR0VqTVovU0F2Tm1Oa1FZU1M1cUIxZDB1VVo4TXllZS9HSHFYclpjVjBlU2RaamxaZzExclFycmNkZkpLaUQyTi9HaVMxWUtLQUdjbzVNdjZLSHpYMEpUWEl3WkNLN3JyMzB2NnlpaERyeXoyZVZVVnZXTnhPQW53dWxNbVozMWFuOGN3YllkTEc4RDhlMWd4NUtGU2FqdUVpK2Iyc2tDZVZtaC9yR1Joc3lNWFNQWWtLemFDSzBkSGV4L1o5aUhScjFLYU9XL3EyeWdaUENaQnVHa3dmZ3FWQ2VrOGlzTmNTMFZsT0I1QitIdjJtUnoveDZNbWU4RDBwUTBINkJXZFFHcTVoOEdicWhQRHVaMzlYU01sTklKaXlEQzdVM3M2OGkxd204VFQzb25HY2cwZXNkY0xHVldjL2tuRFM1eHh0SzNJblFsNU1RNzBSbFVKdW1wN2FvZFQzNnB5Zk1EZjJxV2VWZTlRcWtycTRzNzRPV0VJN1BSMVhpTTBoeXhuUmRhSHFaQzkrcVl4cmVtc280eEF1aU04bHBhSXBxQURPRU1zOWdYOVVIU0tRQkMzQUdJaVhIMHd3NXQwellnNkx1amZ6WjhnczJBM20yRWpGcnV3dFdiSzNCdkowL240THpVTDhlTWNJTWp0ZGVUVnM4Nkx5Y2YxUlUyV0Zmd0daZTFOdmNEMlZlTjVIQmQ5ZExtRzY2L1Uvd2tKMVJQclIrU29peDBLaVJWTlJYRW1UVnRYUDQwcGFvUDdXTHJYYWhOYldlb1ZZeXg2dTc3cTZsQ3pmVWlBVVRUNnJHdUh3OTN4T3hkRDRTSzVSWGdrSmt4RUlVWldNdlNNWVZXdEFBSXNoT1NsUVJDcFVmWHpaeVpkL0RjNWdBTnBCdnpISTM4aytYeTJVWlV4aUdqcXFDS2FaT01nK3RnMUxJUE5NSlI1SU0yYWxWYjh2YVpZUGVObC8veWlzRVJrVUt6MWxURlZMUkNSUDQyTWVXL0hCb0Q0SnlLUWdzYndoZXVTK2pmVG5aMmJzQUJyVDN0U09EUkpxNVhhNk5ZUEIwMENYVldSNlc3NFR3dlRyaE5JQ29DYm44bkpwWVp2dlNBeWkydWdneUJEbVVBeTQ5SW9YZ096SkM1RU5HNS9Md2RNeDVqcVpUVlIrZmJGWlFNdVJMcXQ3Y1JuWkFBNnE1MU8rR2hTaDRGM0o4bW50bkpHK3ZRNjVNem5jM25lbmNYRGtNeWFLZml4ZjJSSjBWK2hwSHMrTGVLSkJ6a2dPMENEWHhydXdRU0lGblp6UmxiZTZBVUVvcVNBT3djVUFadjJFeWtCclNFSjFTbU44aWZNa2NPMEZuSTNheDBoaTZhem9rRHFjL0NWMkRMUC9RSkE3Y2V5MmJQMDg5ZjBRaGRxdjRWRTJZNmRMRDRRd1ZiNCtuZGVwY3puNEZNbE9OOG9QL3hKQlZDa2JSdHQ4d1h2bnVRZXdIamVvVFI2QVRYRzdEUDlPQ1dOVklDM3JkcUM2TE84czdpK1NBRnRZc2tiUHd5RWtoQ0NwODBiWmk0WmdBdjFXV0hITUdqa1o5bzRlU3lMOEtXb1Y0Z0cxelVRMUk1MmhBSG9YZy9lbWFhY0Z2bk1DdHI4aEdsQi9ZTmhqcExTdmRjSmcwOENJN0RoUUZPeFhEb2h6TjNNMElQdVZLMGdhR3VGSmtuVDRjQjB0Qk9oc0g0NDBhRzVqZ2oxbC9Vd0c1VHNaOEh6cXJxUGFoNC9lanJCcisra2FjWk5xR1pkakZ6OTBBUXFNUzVCY201SWtkWDdMK0F4YkpLRnZDQ05sK3F0Zmhna05pa2VhZXdCNVRpVXdHR1F4OE40aElBejZBaGFOU1JJZzlUcElsTWVLcUJ3TlViQTd3dmR2bGoyWEpHY0hSRnJCeUUrZjVKWk5wYzFQZkJYQS9KSnJ3YVdSWXAvYnF0bHozdk1VYjI3UHFXNlFyVElneHY0dkFnWUpQR2Q0TmRZYTlLRzJPc0JQU29kWmZCZ01ad205VlJyTW43U1VPMk96c0lyaU5iY01lSmtQTi9IUGxIMGNKdEJGZ3NPUkVzeHIvVUxEaEhCbEZkWjdKNzRFMkk5RWlrQUF1SGJWZ29KSWtKVDMzUUhIbjNpcFcwYy9UNnJ0OU5pOFdCK0xLL05zdW1TbEJqUTJLUDJnaDJpK1BwZTNna0FqdXdSeGtEUUlQQ05hUWFQalZ2bS85QXJ0L3J6amg1MGR6VytSV0VyOVluVkh0bkFhL1ZtZEhXaXV6UVMrQ0JSMXdudENvNEl5SFhxbnFWYkhTekYvNjNKc2U0QWR2eG1ZeUpKTUxRUlpYcXpOY2laYVN6SzFUNzAyZit4VG1nQzNvKzNFTHJRZVE3OEhzUkg1VU9hWHJGdDc4N3l2aEFCQktBTHptSm9yNFl1cGpLVzlxay9xQkZqSFlwZGdjaXhWTlFmZFVneWpFY3RiUzVZRVJkQ2hRMm5waVZoclF6Y3JSOEZ6cStTUG0remJoZktCRnlDRHErQTg0b21jOHR0VHFZRk1CODRMa0lxcUtGUmtibG9pd1hvdjJOUDdmNDRCYlVZQ0VuVmxmdjZlQ3E1bXcyTEF6bXE0eEc3Zzh3WE9UdG1HbW55NDdHcGh0VzV6QmVUU3JOWUJ5aW9qZmNmdmtmSkRESlZueC9YTWhneGhCcXhEUmtFVWg2WjI5UWc0d1pCUGkvMDdtTEdoTldnanJ4YWxNZEtsRFRFSTQvMnZFek5vZVMrUDNCQnkvV2R4Q1hQcSsxZEY2M0huYTlJL1Q1K2ZoTjB0Sm44bzkvSTBBZ0Y4NFVDTXJPVG5uQU5vS05nVkNLeHVHU1BPUFdwcGl0VVlab0swaWY4clFlK2RYZ214cmcvK3JJUFFLSWF5RVBCeHQ5YkN4NjlyZ09CaE0wMTR0c3VxUmczZEJhaHc1dkxid3B6WW9oSzI0WHAvSHdEbWQ0ZGh3UEhUT2xvTS94YlhkTGhYVDFJaFVNcjhoMWhnRFByQU13R3U0RGxZOWJmN0E2djBQb1BvSkhuWTJibXlkSUFJbGFxbTNQNXVHVk45V0pJdC9Nbkd4NzZuc0piSm1YbDMvWFJBNUVEaWVhVktnMHZMZlpKbVh3L1AxVUMzVFlaNHRreWU5bThNR1NaY0VjT1MwN0dWOVA0Vnc3QW5VNHo2dFFXTWp6L1JQWDdCVkhiU3c5N1IwOTlZbzVqVzcrZEZ0T3hTbVNTeW5jOEpwSjl3dXZUS1FhYXpHMFM0MkNjenFkRmtDdk9BMzBUcldFcEVhZ0Z6aHhiNW5KMTMwclkrcjhmWGhxZWkxRzdRc1R3ek1UUXJKNjA4ZFplUWkvYjhYTmc5RmlzQk9Lc2JDWGpsSE9kVDFySFlua09wUngvWW1vN1R5bGtzN3AvSjJ6VDJucHVtNXBIRE1ja29lQ040S1ZhaDk0RTJhajlvRkNvUDA1OFk1OUxDTWRicS9ETTRFb1FwaHlhMHhuTGhDVit3OVdBY2N1MUxiNGlVN1BMOFJXQTcxMTVYd3B3Q1NHbHN0eGFRckFidDF2Q3ZzY25ZTXhmZkJjVytLT1F3WlZlcThLZFAyMWY4aEhiUkJCK1JNaFdYaDNQem56ejVWOGs5aXJwZ3lrbVVEL3p4OUwrUklYZ1QwcS8vVVRaY2R0MDhBTERLVHI0bnhTeTNVZHFZR29tRXM0bHJoWURqazJjcmdVaVMwREM0eElhZ1JDeUYzLzlNdWtoZzVMaUhuelZVbjFMRmdWdmxkeWNVYXVqMU9yNVJ0VFhPQldsczg3SXd6ZGppYlhuQTlzd2VLQmRRR0tsQ3JjKzlTdnVXQ2h4SUhmUUhNVWN5WEx3UFR6T09maTAvanBDTDV3NTZremsyeFVNRkhLRzU0WGhGbE1GdDNvS0NFUVpHSjhnZ0VGVlBpZEV3ZUVoczVqMWFPZFdCNnZwazRvUmhvalJnUzVCR0xEa1JOYktRNnNlQXFVN0JkVUdqL0sxNlducjNiM082b2JRTW1DcGZNcmhWeklvWUR5VTZHSlprMjNWNjZpNUJZTHlSSlo4S2Y5cXRLRVgvZkVrY2VCYjlOa2FKWjdSbzZ4cGRuTGVYWkhyWHZJNjUrSWlESXFhSDh1TjZaSUUySUVlQUFJelN4MWV2OEx4VVJPRVFJWnBUU1ZJYWFud2k4c202V3lHaU1rblVtS1ZLZmhDaDR2OEdmQW90a0FidVVVKytXM1pxa0F0MVlvb0RMQ3VlcGJzV2oyNndCY0FUVFBaSERMNWMveG5DbEluVzhjdlNYcmYrOThndXpTWWovZEtLZTlvbXR6bkFVOWt2VCtkYUdIbEhxdzVYUXgxZm9BcjdvVG5ISmczTkdhUEVURU93TEk2Q3lFMlQrRDlkUVJHSHgxZldUT2MvZGZpQmNCQWNtUXVDWGNNMi8zT0V6UmpQcXVOa0VlaXNFVnBRREtUOHJRREh2Q01mK3pJNUk3M3FNc0hpMDNCcnJVYVI5dWRxQkxBVFBtc2xBTWlrcHQwMzR2SFpnRHMxTm01TDl1SjcyT0tDYWtsRHl1NFMydGxYQXI5aFJFVHlLSS9JcG4ybGZ4bjZ3cjdVSGFid0FZUDM5VjR3dnVYbXhGQ1Z1bGI5MVhVdnoyVmxLZzNjUnBua2pLOVpJbW11UWUzZXdsZkdXZWFOa2NFOVVxUWsxS3ZxVksvZmMvM045WnY0bStOd3pVWG1DUEV1bUpkeUtVU2VaOGNMUmlNa241T0lvMkhjWkVYY3FVM1I2TVJZb3d1WGg2QjNXYUl2Ty9uWVM5S1NEb2paMUQxNVVTK3ppdlRaRHc3UFErc3JOckVyalZxMXVLMDZzZENIVzFuNmFuZjZSVk5YbTRaQ2FxT0FsbmtHU1NpdVB5b0t1WUlTVGFSOWF5K2RSNlJvM0tiNHlWRklJbmc0VnczWDk5ZjFRRDJWRG1kR2dZR2Yya1N0YjlMZy9Dd3pYdW1RSzlIa0Zac1hTVUgvTVUxSzJ2QjFRSlFiZDN2aVJ5aytTT3pRT3FZRGZ3cDRnemlGeW1tVFMvcTArUFViRTZONzBEVkk2U0s0QmgwdVBKZlZ3bkhMdWJ5K0lwdTBqdFdJZ0lsaUJGOU0rcnBncS9QQnZPN1BXRHFjNVlVWm5YcG5IZEp5N3Z5SDRlSFBBOFdoUTgwUjdyd3lBNHZlUm5ZTkhCcU9nWWdDbE9QQnBHSEVvZU4yWUs3MHh5VkdVaEh4dUJRc1EvZHpZQzFzVjZQSlo1a0ozS2orQ2kzVk55aWFZZlVLNU1ML05tbjh0NXZndEg0R2V6Q29PNEJXcVVLeFFZOVI0eHAxMXpTK1hoQTdRZkpVR1BGVFNaWVhJQWxYQjNzcGlQbk9yMFc0UGRIRzNzNmtvOXE1RW9rbXc0aStUcU92TUQ1SmJWR1dtS2hyNjNKYXM5SW5ZaHUvRlh4b0hXQ3AzdGlmKzl5cEtNZXUvMHhreTYzTHBCNnN1SW8vMVg2T3JwYWE1VHRMUGQ1d0dWcEN6bnR5S0FVdzBjeEV3aVQ5aXVwMHFhOFFMOVlNZFpZdm82WG9wRHVNMm9LSjlRVGlIRU9uRFhWdEplT0RPNi90aEtyclJwL2RDWDdEQzE0RVNHZW0xOTk5Vnp5ZjRqWlUwOW0rejVLVSt2N2tQTklkSjI4U1o0dWZtMnZxVXduZlpBZ0FVTWJxRFU2QklNeTcrN240ZlBKaVBZbE5tYWRSYVh1YjgvclBQK05mTWFGbXpmemFRbWdmb2pCR0tIa3NsY0M0b3dBTkxJU1R4N210dnRpOG9Tc1h2NWthUy9pSkREbEZ3SGtGUEZGRllrY1ErdytYWUlZQUk2WXdURjg0My9OWUNoVy85RDZkTkRHaE4ybTN6eDJjVm9jMllLZFhvU1NQRWUvOFU3ZG1wZ3hZMDhqQkgwMlBuN1REYkw4MGNXQnlxSWhxUXRzcWt4bDRuOGlyWWIydVJxNlRPU0FVOWVzMldLNmoyRGYxTVI3clJRM21DTW5xSG95VVcwaWxJek9mT3pOY0tjYU5pUUF0Qy9BZXZqMUxQK0Z6M29KdWQ3V0w3UjB4di9hYWVGR0J5V0E2K1N6bWZCVklSam1sdGJzYVlibUFEcE5VVVNTQ254RUtjVFB3OHRybThjY2ZIWmd0MzlzYUV1WjYzb3JwUjhXQjA4QUdpcjJyVE9BM3ZWV3R2Ry9wOWRXYUdpUVZqUWtGQ2o5WmJJYUhOOUF4NnlHT3pkdEova3A4RUE3Zm9LK3lmbFhGdS9PTmZCZHBmVUJMa3JiUU5hQjljanlBMXNRdXd4SUZtaVp0TGV0aTVQUW16b0Z2ekZObVg3TTZIQVoyalBkVGIrbnV3YkYvQUZCL25OUHRZOEFqOFJYM1MwdC9xM0piRVNNT0ZBU05RcUlqcFNUSGdLUEdPalRYcis2bGxqQkFBbVQwVnBwWVZHQTkvMFNGYlFYRlRQQ2dScmpMczhFU0VWbWpDRkd1SjQ3dzMwUzdFT3YxenpaM0tSWUdtWUw0Q3VsU1M1cVlBSUJGNlJjU25VUDJnNlpMRVAySmZkQStCZUtZdU5TNEJiNHAvc0dlVWFhZjIrZ1JTSUkwamo3dGhuMXdjVU9LV1cvREVtYWlueGRzenV5NEw3M0p2WnhUM0lqaEJSVW5OVXdiL3BTaGJqVTV6ckxDUk5LeWtVK0JCYWt3SzE4UWttVjk3VzlGck83OGpFVDJ4aUhjZFNDV0pTc1NFU0N5OUN0SVZJSHNJZHlOYUZ4WVJkckp0akxxR3JpL3gwdTdXZ0tyQWxHUXhqWGoyR0x5ZGM5YW5CRllTZm0waEJXbHBDelJ4dElmNURocE5OWmEyQlZsNE1tK1ErZzlVQ1FZV296S0NCWDNsU2VQWTlEZzRTZEdzR01GWUZ1Z2J5a3ArR0pGSXB4TjdZKys1a2RvMXZpeUdGR0NpZVk2Z25GTFN5eVZ6YWZsamF5S2NjTHRQY1dTaE9NaC9iQWh2MmQwKzJ4djl4QkhKSkM2SXBVVEJ0aTVJTUJGc0lkS2dHL2M1ZTh2ZFdUbEx2WDRDdHVNOE9nd0Y4VjByak5nSzJONVdZd3c3SmNSZmpPRmNlVFZ1R2dTNUNLU1dQU051RHRvUTJZMVdQSzNIVlYwdXRUeWllVlQyVUVhRmhqajJSa2w0aWV5dkVLWm1QQ1N2UDUwK1JmRFRFdW1xY3hnM081cDRZcEJTVFhTaTQ4NC9uUzhsbE9obWFSaFdFZGx6VDBnYS9wZG5ITFBhUlFKckc0RW1KNnFSN3g4TFAzN1pFUmlqRlU1N1llMWxXMnRHZlhRVG5UbjZPM0Z1cXYzQkU2K3hlM3BNVW4rdTFMb2prN0VZUlI1TVFzdWRkZUk4cTRxaDNpTlF6RlV6NVhRMmo1T1NQTzB1UjRNL0FUdUp0R2JVb3I3UjRhSzNuSXIrRHpzVjQ4R2RxaUsvbjQvUGxHd3lZMzJUTmR5QTFjMnM3UER1eld3YlozZ2tQc013TytTT0NIYVZHaGUrbVdNelpoS2FQcUp0a25zY1lVeGo0bkhhalJzVXRxc0VuQkZDQlhrckxJN1NwQmpiNk1pbXpSVUJLNkdhYk1FQTFybnl3emp1VENPbEV0dGpsZWlvSDd6dXNXcFdTK292NjFQMFhWRUJqeWNSdlUyRUtXYnpLNUo3UWhPRm16TFg3NW1Ga0toSzJ1S2dvMmE0WUVaZ3F4ZG9CeTFtcElPV1VpR043cWE4dFc5RnlhU256K3dHMHp6bDliTjR1Ym42aytlY01aeEJyaFhQOHRKbWp2RXNrZmVsWWZFOGxPaGhTaDlZbzQvaE9kTEtIRzlrS1lEQlY5QzdmSU9UTE43QklGNDI2YVZ4OVZnSjNlbUNzSFNNY0NzUzRHRUpPTGFnSEhzbVp4MXFpWEdmRDlUNk1SVCtqUFdGNTRTeW1kZjVlK016Q3ZQRGV3YW1uUjVCakczN1pPNG5oazdBL0cyNjNiWWxxdXBSMURxMW4ySUNvRUtzeE43cVlnd3hTRkMwa09iMWxNYmV5Mjc3ZzRoamEyMWlTaTc0ZHljUkxGMkZnb0twWlA4Wkh4elowYnFwa0xYMHk1cXNEMHFLeUlDSjhQNkJ4bGxuQkJNTmRuVUhhUUJKYlAyMEd5anpIbytwS1ZrNHF2TU14TldiMXZFK1UydCs3ajk2V3czUWtKMjlXK2VNMnFDNEZydTc3YjdNbEloaTdpQnUyOCtRVEFWTnhsMFdscHFqTktLNVBsTkZaSmRyQ2lEWTJ1SjgxQ0YzMjJkdFp0Wkh1R05Gd3Y4VVg4K3N3ZTByQytMeTdhSDFmTGFXNlZjd0ZwZmZUVlo4aFIzR2MvMDhWTWZUUkJkVk5BM2J2VnhYLzkvQVF5eU9kRGV5MjJWZDlPczcrelhuaGlKL0xib1Z6SFF4NVJUS2pvSDlxRk9ubE9ZNStXL0RPSFdiUDRocUc5VWJrQ2Y4YjhOeUxHMGoxVWhzRDh6OWNjN0p4WldoSXJicmY4Z212Y2pyLzhrbDVuTHhjMmZHR2l3SnQxSDJ5WW12Q2tjaG9IR240WnVDNTNDNlh1cGpsOVk0bEpaRi9oaHp0VFY4Q0pIRGUzQS9qUjlOamZBRlAzVlZ5Q0NLdmN6YmpWTFpZc0ZsTVl3SVZLVVIyWlhwYVZoQmNncURqOFZWcnFmZ2xDV1FQdnpyRmtKcG91alBzSDhCVU83K2hCVi8xMlFVaHJ5ZjlGYlZhbXN3V3FsSlNnamM4Z3E1TC8rZVN4NS9kam1iR0hSMmZ5b1FHR2Nnc1hXSVdrYjBmWThyWmlWOWE1dmpmUG1CRlFESE4zZFZEa1p2bnU4dG9JMlhwR0MrdmpyTGVhaHgzZ1FxME5BMGNBVHBWNGkvbUFUL3cvYjUxWHZGVEN0N2p4TGwvOFBwSnVwaVQxN2Q1RVdWWEIwRyt3Z3A4QWFNcHZKSnM4N1RmR1dzRWdGYVExRFZMTGRib09mb0l0U2EzUWEzOUFvTy8xVVdJb0lYU2dOUTEwQWFpcm9QL094bE9vd0hGeHkvRU5NOG5EZ3dpUk9RQUdhQ0p1L3ZtSWFNc1lVUCs1V28xd1dES0UzdE1OcW02aUFqYURuZzdCOEw3SmpDNStKRmI5MnBtd0lpamJ4WEdkQTNVMkFEdkE1a3BQZnhsWloyc3FIbkdqZTQ3MStzTDhlU0RvVHJ0eG1RNVlHZEoxMEQ5WXhRblJHSlUzVjFQbmx6RHpkU29ORkZUYm9XQzl5NGg1Uk5OKytlb2M5RWZab0FWR09OVzZOeVBuMTRmSzF5VFpDbkVOY1MwbXpkTmF6ek5ydkVsWTRYYWk1VWMzcDF4TXhCR0RIT0Q3ZmVEdVU4UlNUcTk4Y1pKSjVXdnVpWXpUNCs0UzNzdWM0bFpGUGhiN04zYVR4TkJkaWRKYnJtdU1EWG80OFcxS2dybllSNnV5dUxWR2J5dmZoR1ZGcVVzdDJ6d0l4REw3U1pQcll1NEZOS25jbmVVMGdiVlNIcldOR2xOMHNialVlVHdPNjU5eGo1dnVpR0N0UVFLMFJpemg2eXRTN0RYOFBmQ2Q4anJwT2Uxd0R2OEF0cmkwNVdaS01HNDlyaWR3OWo3bzJWdkw1UGxIZkk1a0w0SnZybkxZS3dPaktBM1p0cm1jMXg3TU1hRmNMT1lFcmRNTXUzSzJEYk1rRDFjbTk4UEdqVlJGVDQxRDZpUjc4ckQwaUNudHNVd21jSGthR21FOG9nT0xqUzFkeStqUHRCd0dubFZva1B4U1ZrbVJJbEw3NVVOM3hkYmtMQTdjcWVxeHVBa3h3cUN0L3B3Z2I1cEdQYy8rQWdZVzc2NmdjeFFCRVBhTHZtTm5zYmwxbTg1TkVLblIwd09vZGw5V1N2NWJQTmVINWZqT2NwN1RQYktxSlVwdy9uOHY3Q1JERDdYVGVGYzJqeTdpWHVjN0dnc1JFYjYwNWtXSEhPc3V3UGx4alpaYVY5VFJSOXRtR3plbm0xQzBPQjBqL0FoK3Z3MU1VNm96SnNJZ2FwekVrNHlQeEpFZHM3Y2JFOURiaklvUldLY3pseWIwcElhWFBNT1lXVk9sSHNlQUVUS3NOYmg2ekZCV05sVDE1eHpwc1g5aGpwb0Vmb3dKNjZRV1NIRndJcEsxb1FpajExZk9HbGRKWWJIUG9GKzhmY0FjSXpiTUZicUZ2NzB5SFVqNW5wQUEyWUQ1WWViMWk1SGkwRGxzTHZMc3ZBZ1Q5NmJVZlBpcXB4YlI0YzV4cERxc01TNkNhZm9qRjlUMUFVenUvc3U2cTI1ZWVHbU50UmdPdXZrTEl4QmJZaldvNEJ1N0M2OXU4aytvNUJBNkhoMFQxTkpzdHVzS2MwWmdyaGQzaG05NERxSnpONXV5VHVjcCtERUVwVFFrVm9KMzA4UThvUytrc2N4a2hEUHJjZi9IV0JKSVhYb3UvSXV4QVoyL3djNGNUcGVhazJPNklhSFZrK051UzZJUmI5ZjcxYnl5TGVMY0o2bk9xbEZrWDhjRnFTRUhZVzBpTDFLRWN0T0tNR0hPMzJlbUErOElneG1CQmhZNVRpM0UxR3RBZUpiakwvZ0F1VjM1MFFhVlhud0poQ2N2QXA2QnNIV1grd3ZHL3hmaUo2WHptUHJRaGNuRnJtN2Q2KzE5bElTMWxwd2F6WUh5dUgrTXNpQzFOUHFFa09UTlh6WmtJSW9QUDk2dllEWU1MeDNIbUVVY1hwSFczRG1YWmZ3ZmpzV1JoQzRkbnllak15dFVaME1iZ2FmRUtQdGlzT1ZnUFdyRGJjRlJTVklocmN0QTlZTGpmcnhKMGhiTWpVcXp2TU02Y0dwY0prQWFUNGdMT2s2NWZPbU43Qm4yS1NEcWFFZ0ZJb3IzVndrYmtpREhNTk5UTVVQVkc1Qm9aWno4UzFFbXFzSWNURG93cjA2bmNUUTBLTHdsSmRkWDIreHA4c1lCRzJBZGsxcTc3S1JjaVIxeVVrd01kelkyK0F3QURPN0hhMlVDY2toNzJQcHArbUtGWmd2OUFERXYvRGlJbEJ5VFdycnZGQ0NPVUxab0JMLzd6TjBLSDdGRmNWR3llcERqNERMcS9SMWVqbnl1MXV4QXNGcUJydVM4SXB4emRONyt1M3RVWlA1QmUzSUZtUnM0ZjkvTGRJMVIrMGdPSWJzdERSRm1WSlJKSi9qZ3g3dFJYa3FGTEdNK1VnUndsRWZjVjVua1dzMGJaeWJQazZYUkdpYjZ6MmlEa0tUeVIzRjhZTnd2L1ZJSXB6aEhpOW5zWUFTNVhzRnB0OWczSjJOalZMSkhSMUJ2YjFlVFJVMFJUbDVQcXdnZDR5dmo1UTVmR1dtaTNhYU9ZaTNLRFM0anNZQzZWb0lsaVh2NGI4VjFTZU8xVjFRRW9HNlNtNzlyZjJGNndNczhSZHF0aktDWmd5MTdXeE4zV1FrM0NaYndpMFA2ZXVZcEVxRkVtTG5iNG9xTENmM0VqeVR5eVhKdkpadXdFZmhGZC95VCtFN0RnUVkvcCtTUXFaU2lSY1p5d3BkK1dRRTNpVWVnOUo0VmxGSEYxclR2OGdpbTQrTWJ6MzBQYnVtd1N5RVRWcFYwSXQ0WDcrZHdkOXN2dE5SejBRbzhUajJidnFMdXBaWXUrcktYM0JRbXhwdFFuUkVObTI1MDJWcS9yYi9UNHJXN0pxdE0vYVZmR09Vbkt2VitaWjVwaEY1NEN1RjFjOGx4UFczSXFVMldlS0psVXMxZ2l4OWpEd0JKM0JlbXVCUFVRR3pBanpFMmdhOTZGYVJNc2VCTzdTSWFKcit0SnN3cnBtczBRdGdPZHZPU0tMK013U3dNbm5BV0pzb3VLcTlmeDBDUXowRThrTTFRa0RidFNtWjZlMTZhUFhRMEFCb0dkZUp0VXIydnhneDFmbTZEY1F0UzUvMlBxY29NUWVXVWcrbmRwY0R2QmdQM2ZGcHp1MkFPQThONG9zVC91TmJuYU02bnZmbXI2aEpadjRkc1QycHprdU9sbmdma0IzZ2RlUm02enkzby9YcUppcWJzUXk4WVkvU1l3YmVRSXI2aVI3eXQ0TFRyeHJCWG55R0Rib1dCd3VnNVppUXlncWtRMWp3cGZPYnRteG45VVF2YW1NeitZbXQ0cFJob0VGZUlKeWRWTUpCc2NYOVZiM21MWUwzMDlwWGV0UlRjdlc4TEorYmZUckhhZ1Q5SDlTM1hsVlpoZmRydER6Y2xUMlFEQm5Gb2p5RlEzM3BuRnJaZE80L2RkMmgvZVRvWFIrK29CdkFIOEpDTzhlSVhtMWJHcVppczBBc2JIYjByTDVCeWNPNUNCbC9ncHFGOE9YWHdkQ2lEeGE3dWIwRW9TYStDMVI1U3k2Z3FkS3c4QUZLaFhHb3VFVFc3TUNTZUZhR1FRdzU0SFFTZjZpT3drdzVBRkNsMEpXN3VuQk5IelRjNzkyMDhsNW1obFNMam1wT1VyRTlESFl2ZVgySnBxN3JvcURUVVZUWCtxZUwyLzh2NS92SXRJQ1dyMW1sN0YwNGs4VXlSMXp3d0s3UTBLSFZRYXJjbUdGaTVCVm5mTWIvRVZpQkZGcXQxWlQyZVYrK2U1TlBjeVNJa2dQM09OckxYeFJ4c3FybTlaWUM5V1Y3Z1liL0FUd2tzM281SmJzbW50czVvNWJkS21PeFRpaWRCdG5GUWdXN3VTcHVSZE51TllYYW1ZdlIrRTh4WGgyUXFRQXVRNWZsZTEzSHVDM2JXcHErZDVtNWVpQ1BSTFZmZVpVQlpud1RFTHRaajFNNlQ5ZUJsaWcvVTNDWXRocUpMd1NUZUhzekNBMThXNlgwbVh3V1M5YkozdWZtN3g2Sm5LUDVJV2l6SnlCRDRKRWpCbjlyQjZTVVpMTnRQdDB0ZmtaWEI0YThERUpzcmRncjJBc3AvNzBJUnlDekZoOG9XcTd5NWdSUlFIVDRHcmt4Z1F5bXdiRjMxK3hpYVJTYlVwalQ1QTZZUkFycnlKQUZLWGRaY1RFMk5sUHhIRjQ2c2pKdmU0Sm1icVgxTE44K1RBdDR5NlFna1pqOXMvL3daeGU3MWFEaVRsc3Y5OVJrK1B2NkxRcnF0cHNBR2tMR1dsTVh4Tzc1MytPRU50d1lwd3hUNlh1eEpuQVBoZ0I4QTVOdy9tTWxXOS94RTF3dnViWmZTYU9jRGJHdC9uYUlLY3VkaEVqNWxMZ0hjMjJNZkRobTQ4Y2paS24vWVllNDdsL2RST0JrWHd6TElRUHVQbTl0M2U3MmZZVmVjalM3d3NzTWR6VkNzSXNULzVPOTdST1YxL3JkQmVVNGFxZG10TzR3b0NPZThZbkJaTjdYVUQ5TTZsaTE3MU9PcGRYcHp2RC93ZG5pemdyekY1MFBrbU82eFJEUkxzYlBacEdyUk11T0lCaWlHMWtNaUp4US9Rc1JJTXpqVFVvR2xvL09yRlU5TmFwYXhwNEFrckpDVUtqV245QVIyQzFJVnhXRjB3VVNYQTVEZWVCb0UyREF0WHhoK3FnNVA4S1VCSitjT1VWLzlsUDl3bCsycFN4M0ZwWWZwdkxvTmdUSFFBSGdsNU5XbzRtb2ZIVzBTRmkrM0ZDL2R0L21HVlhiSS9UQ0MxbHR0bWhYMm9oV2pHRWkzNC9MV3FXWE1zWDh4aGpicThDWmFodzdZMitZVzVGdmcwU2NHRDBCT3hvNzdGRDF3MWxwQ0RYNE9MYk1aQzRJNldOdUhLblFZNnZIN2plRzJOcnBWcEFZWUJyajVvYzd2cEw4TXB3U2pGYmY3Rm1uOFpwSjBwTWRyN2ozMmF1bXloS1YvM0lLRDI4RUhjV2Nrank1K3R3Y0ZjNkRtZUtMZVpoS0pVNE5JVzVNNHlhc2VHL05QWDNPcTdQbm5USFFiWlRMaDEzS09ReUx1SURWMk0rOXVRa0RtTG1nWithem4zODZkYXB4bUZ2RGZMWXhxbDh1WmUvblJuWU9HMk1PaHBGblRybU45UDVob0IybC9FZmxlT2FUT0JWNms0ekZrR2c3ZkhtczN2OEpIb21DU1QyalNudTg3SnAzTnhldmpRRys3YWxvdEpqcDZvemczU2lPdWw3SDIrRDJwUWJ6RVFlNVpwdG5ZdHNBSTBiaWtybTFURGRYRWZ0TXlhU0RENVRWZklLNENBOTJMeHpCRzlsa2ttSGVuMzUzV29sb3FCeVNGdUcrZHFWZkZENzJlVHVJZWVaWStoK2p3ZVBrK3ExT0RDWlVyZk9FNE94ajBZWmx5MzZVZlFndy93VnVEeVRjQ0ZRM280V0VJODVMeHpxcTUwUEtlb1EyN0s5aEpnR1dsbDNjSDFEbWJaY205U0wzSlV0bXVONCtCMk5HV2VWQzdhRHhrZVlkb2FZcmdlQ0F0RW5XRHFScFFMaW9TK3Z1YmpkczBQV1RvbnhXTHB0b2EzQUpoamQ1TWl1QnBxaFpLQU1qNjl6cmY0WkVqQW0zbHM4ajBrdERDTHF6MXJEd2VOeDF0OHRlazY3ZFRhVXRhQlhQSldEN0VUYmE3Y1NGU1hLd0pTUklzQXkzSmdFR3dQc1FIN0ZnaVplRDMybVpEME9POW1mTXkxRU5ja0NaQTRVQUM5TEVVdEllYzJtQ2QySGcvL1MyQ05XYVhBcVVtY3N1UHdIeDBNdzFmeUt4N29MWk9YVzZXTDY1QjBXci9GVTZ0ZWo2YlBHMnkzRklHQlI2S1NhWkRmOUtmbm0vT3B3d1BRektaZVQvMm9qcnNpT1lXOUR4djR3VTA5ZUtBSTdBMG4velZ5dUxpekpnL2JNdnRsbTRiUFYxZzZBRVpIRGQ4RWkyNm1uRDBmRG80eDMrd1N1Um44c1UwaUdsK2RGaDZubHpmNDMwZlVwdmFaMisrQTdiaGFwZGNTV3h2cWZtWERHRzNuK1VjZDBBZ2l1TmhEcCttNk40dlB5V0txV0ova1VuQ0VrTmR4V3A1bEVSVk03d1MyNllpWHptNG1JWkZ3S0pvNDVFaGhOakZJc2JodTdiRFUyaXd5RklZUG84Z09SMS9OUDhFRFpJelpSUWpIYTJuRFVtL2kxWHVqNzFPb2x6cW0wcWVGY3VaNmZVbFcra0k4VnJEdFU2aHRoQXNKOHVGL2Z1TmRkbGJ0aytBMk9pK0pIaG52QVJIUnRUUFRicHNsYlczY0NuNFAvb2djWkxlaEhXV2FqSW1jU1RpR3JmdEdmekh4OHhkMnBpWjJUQWFSVFVlNWV2RC9FejVYL0NUejhSbU5mZEZiRzAvOXJrUEp2SmJXc1hlK0pMQlBRdTBMQWx6QTVBMWV2aXVwVzNOQ1RyNUVKMU5uQ1BOeEhDTXl0UmN6Z2RxWXNxOXZuVWtqVWltdDNEaVdkNUxOdXg4RXVpMkc2SWYwRFdiNG1uSUZDcW4yU0dBZWUxZEIzR0NFTHBNUllHQisyK0RoT2xkb2xOSHdYVXkvNzNYOHJRWm0vU2wweUdZS05paHh1em4yUlYwbXQvQmh1NWJCc1M0aE5iVGRXV3h3WE15U25ja3p2dDhRbnFhalpBMVdQeEYzbmhRN1JLS01VQTY1Q2dGT0NZKzdoWXdrK2lQbEZIckNjTkd3QVBLanU1YjdkVEN6eWdXeUpzMmpVNTFwbWRCa014T3puYlRNRjlSQzBqNnVFNVB4OGlPcjVxR0dmZXhNTXg1eVNMejdOOUFzOHFlTmFvN3RraFg0QVlmZHZnY0ZleFExYUdxOTMvSGVDcTFIOVRkdENRVDBQbkN5Umx4eUZoTGRIbzFmVXJzVTBXRFBBbldSUHR2MnhhY0FmVVdYV2NZN3ZGYjlUWW9XZVU0dWJzeUhtRUh2Vk81Szg0ZUJ0UWtHa3BpTW5nV3lSclNnREJ6c3FYK0JNajBhMC9sYjBlNExneENqZ3Z6YlUvem9Zc3FoS1VhSGtVMjFLV3dLK2ZDUUIrTXB3bjdkcThYaVh6RlBLRUFPQXVsSDY2bXR1eCtoZ2s0b0ZsRURPWWs5b3FWTUtLYmx0Q25yU1NnbUx2aDhFVC9VaEZTR0ViUE55MlRub0NDeHZld2t1VUVscERjZWdpbCtKK2ZnWGRyYVBZVGVCemMvSmRaZkNwM2JDdTFmVVdSMUQyQjh0RmtvdTdmckI3RUgrWDA2eFYvakxTNEJwQUpjY1ErVTFvSk1GRXRNYjlSdlZNY0ZBWVQ0bjJTYjRPVEg0UityRGRocVBMTk5xTkNsQzUzdDhiYnE4TSs3RkJxUUlnSHNwMTVWNE43WCtxS3pVRlRSUlZhOHBKSEZuWHh6NnNRVnBBZ3pvNnh2WGw1eWhTbndWNDRJbDg5QXBFMHdUcHl0RktjaVZaamFHQTdDb2VZakNIL2xWdGpjckM2WUhpRXlVZmFqVGpEMTJ6aDhnaHJWSjBSRjFqZE01SGp0ZUlhMTh4RzFkQ1ZXZ082NXBZSlVuQ214NW4xaXlLaTVnajU5NVYyRnN3eXVpMis0QmdBMUU5TnhaRk1EeXFFckt5b0JUZ2p1OGpiWThCbDBHT0dRcHdBVnpSNXYzN2JjS2FvN0gveHFiaDVYOGpsaExGK3lIbkQycmVOL3QySDlEVHMzT0Y4TFN2VU4ydG9iL01kcWhpeHMydjBremNlQW9UL1U4MXZtbWg2ZjNMKzhKZDdZZlVncmF5M2U2b0ZGSnBNMysxVWVkY0dkQzh6ZWJOSXd5U0RnZzVMb250blZhRk0xS2FyZG1wa3luc2t4eEtrQmx2VDJjdmk5SW53L0llZDBzUEIvSjkzOGxxczlqRGV0MDVpWi9DMS9pbTBON0lscmVkaXZsVnQ2a0hxemdBbEVTSXV4MTFRRmEyNFZvZW52ZHF0NVhFZndkV1JkYTJUZTBjTnNvOVN1ajBabnZvaXNyZENoOSt6bVJNWnNBK1FuZzNzYVJFRWRZdHpseVdYSHpYTERrVDFEeURjdXJoRzFyRGs1b0F6dFpZWE5QenFWY1BCenV3RlU2akNpTHd5NlFKN25YQ29hSEhNRmN0TFZpQWRtaWpDcXBhdzdFOFRiYlU0NjBnTkZmVTdtTTgxWU10OXlhR1ZFeUlXUWtUeWNxMUpiQTNrUVpMK1ZONnhuc0lKdHVGSjR2RnNJM2xDN1dMZWZ6U0h3cFpPb01PRHFqQ0JOMXRjNEUySHExbC90MW5NS0xSRXZLZnR6aGpnWmRyNHgvTFliRGJxL0ZvUStmUDNTQTZjZGJKTmhDcWl3K2JYS1VBMFBxODhHdkNnSUJ3aXNxbkJuZ2JtNDVtcEVROG1UdzhXeHJtL0pacTgzektaTERQQnovanlaUUtkSG9tTXhnRGJua2pGTlE5UnVUSHlzVklDcVFuYkh4MHpLRFpUSVNFNTQxRkRZOHFYbksyc0NIWEtvd0lWMEFqSHAzdThsTWlqcFl0b0FTZHMxem05MmdxQjVqeWVjMzczUmlnRittVFRnMmdzbkpOcUZya2t3YzBoazlIWFFGdVprdlFjNWhSNWNpMVNKM1VCTW9Zbzl6N0lLWlhycmFKaHJhUGhvWW5mRlR6bU5RV25FQTJYY2N4NEdUMTE2WTFPcFpvTnNnQnRTVlVqSmxDR3V3WWZ5NEFVMXRuWlhFd21SSGprWDhmS1ROSWRkMUhnQkw1Y2hPNVpYdFVTam92cnFGdFhxeHJUUmhMQW9QZVVlRnYwYTE3eVdjTVU1Yy9XL0wrelBlclRJZUJjQ0dkRC9UY3ZNVFBkV1ZKeFdLQ05CaVNUOHgyY1NkUS9pdGZUL1hINDBIRVBkRUF3TE5GMTNOT1NKb1BkMHFvbkhRMjlLVnEwdFQvakFER3BTbkVWbFo2ckhjYVd6ZVEwL0RqOENlbEdRL0lweDNjcSs4dEhaQW8xU2w1SXN5d0hwTnJacW56bWF4dktCOUlsbGFtaHVpWDZKbi9ETnIyQ3k5cE1oNnYxVXdlMi9FUk9ldGxSNUcxakRud3g3TkR4S0xxOGprdTNZUkVFZzQ5YWxiT0JVclB3cU53WEwveUNuZE1oSlJoRnlwQ0ZJdGN1eFFHMmN6eGszRGVydS9JWHBrYWNNWHhnNnBpd3l3OHdiYlg1cnNEanA0QTlIMno2NVo3U0ZQWUgrWXJYOHJ2bVk1WkVNMGQ0Q0tOSHV6WGdzTURqWTdUR2hjNlM1WVFVbWt1QmMvbTI5ZUM0VUdic0R4LzdFWUFkZTV1anNQSnRoSzF4ZkVwb3haaXJHUC9aU1p5TVVGZXU0N3pzWTVnTGhkR0FVSXdXckM5NFo5R3J6dnhqcmxzTWhBRWc5dHNLUElPcjY3N0VWY0NLaHRocndmWDhMMUtpSVI5Ny9VbEZpWTltTEVxV1Baa012WjdvTHB0NFNsVU1aMEJHVVN3cjhwZmVURWVnRVI0K0dWdjkyQ2JvUXN4ZjVLSEFpNXkzcG15NVdaU2JmNjVidFcxVVFyZ1FwbENNaEdkNW9uNEp0dUFkRjhBNkE5RFc5V3RmbEpobGdDdWZzU2xZeWduRXVxQ3prNENPSk13QzlyT1FLbXRYbTJzSEVoZ0ovRklFM3d0MW5RWmtreG9UZzkrZUlUQkVsZjVDUk52a2d2L2JldGdrWWxWZlBJSE91aFBnRGdLKytpemduSExTY2M5YnpTRGpzTWF3OXdKTkxVNWcycUI1LzBqS204elY4NU4xRW1lRFhjUkdQWStnL3E3dDRYa2VObk1GTHZSVjEwU3RYdS9aL000NVg2d0t2SUNEMGhLZ1hld3BsRGtPWDIvTFkxZW5jaWN1VUFScktMNlp1WlY5ZlRCNXI1MldLdTZMZTBqMjgzT2xHRFRZbGpxbHM1T0FnNyt4SUw1SkdwRFJnOEZnMi90Q0duV0FzZlZZTHB4bFBsMGxyMlVwV2xSbUJOYWFRT1hQWng1ejVZVE94V1NiZTVZbktTWHAzaGdVcC9kN2l4aUFXRkkyUjFZZ3JqU0N3VURXWTNGbXZOZHg3SGdQMm1ILzNUSHJDdGxUNVpEYXZSNzNEZzlFUGxKSU9aNzJLTThaSEVOU0xkK3VsNW9QVi9LNlpxaCsxaHBsZFU1SVJLOG9oZ3pWa1hJMk9zWTIveC9va2NhKzZxckVVam1nV2luREZVV2V5Qng1eEQxWGJ5Sjc0ZHhpOHdHRmxGYnMyb3VIRXRPVkcrMG01WVpOWDQxbWlMWkRYWFdiN0ROT1drY3lGcjhXVm53cVZpcGg3VC9xYUNYOUV6Z0lvN2lZMlVqTVdSQTA1TWMxMVFyeDhTK3ArUjJuWWVvOEJhVmx0Z2xDWkhaelRzZ0duUnF5K29aY0NsaHR3WWU1dms3c2gxWk5aZW03ZnpnUUtwZ3M1OWlpaWFJZ1dsNDlma2VYTjFpUDFDb05NY09ldEtwU2ZVNFdZZ083aHVzY2dJdjlGV09sU1g4WTdwWllSZWxHZnFSVGFXd3FpTGNidlRlcmFjR3oreUlsR1Rydy9yd1ZBaG1CdkIrUmpDVE1QR2tpOHhEcnZHMDlIUmJDNGZ4eVRBZWQ3OE0wYjNYMzJ3dm9XY05YQVNSNkxOUzJOUGVhUXhwN3dyamt6QzVUSVdmWlpuNDlBeDROandyRGVLdjhWdzI2OElER0h5Mjl2S3owMmk1WEMycE9rRFRnS3U1YTZaOHQ0K0NuN2ZWV2h6cGt1WDBqNExIaFJiNVJxZG1zbENMK1hWcWRyc2xma3VOaHBYZ0NCcTdoWjJYS0RPeFBSVlhlNys4MzI5b3dwcEtZREo5NXRHLzV5UjU3WGVKTjNvQTkxTzJXMHNRT0I1Q09KZE9DVGlCMEdtKzhBSFZmY25qTHozbFJlK3ZYSWF6dVpwYnk0ck1ZYURiSWJBQ1pQVndwdllEMjl4ZHlGTzBJUDlqVlZvaXpzdHhZTkZON0dUZEdyZlF2OW11Q2RZcGROenVOeGtCejdtRHRvWStLa2R3Qm53WUhJQ3ZwK3hPbytmYlBqeE9lZkNTZG1ORG9GQ0M2anVmN21hcHYvaFYzWWlFUmxtRUpsZFhpZ0hCUTBzNWNJcjJXQ0xMNzF6Rkh1ZmRHejFYRjZLc2toK1R6VXBCUVR4YXNpYWZjNHZRVWJ6U2plSjI5ZE5jbjQ2MFVId1ZMc1hwM2NROTYwVlNXei9PRjVaMVpRdFdlQU1ST1dMTjlvUXliTFJRM244RitrY1RkZTk5dnpKbEVCTHEwQ296VXRtU0NxTEdGSUc0MWphS1pGYlVVajlpekJPS0ZNSzlMeU0zeXcyNkd4NE15RWlpRkUxRlhodGF4NzRVNENKa2FPYlJ4UFQ2VHhOOG9STUxrTTJOVVJpcElsUWhXSENvbHBqT1pXeitKQnE2dkV3a2h1QzhOb1ZqNVJpYmN2YlpTM0FnYkd0ZkVydTV3YngzeUpKRXlzeXVrK1BNSUl5RkV5WGpnQ1BVT2tiS2JPUUhhbi9mZEF2dVp3TGlUdXRQUTJYaVRBdnRNWGlFeEpDdDVlMVZRdmpvbVVoL0hrQUNERjU5dXZtUXRBZlZSYXltTE9kdy96Q243cm1ibnhWb2Zoc0EvRTgzZ2psR3RYelRDVVlLejRtY0JMWG9jOU9JWG5XOCs0Z1NDYlpnTERHM3duU3lSRmZFOHNNOFVZenZVb2VDeTFFY1NPRGpOVURSVFNUU0hiaWlHa3ZtTm94bVM1SFBOV3JZSTRUZUhFTmhFWmFlUjM0eHFudFUydmF0a0JHSDI4SWsxSnA1KzE4SkVES0tDR2w4RVJLdHVtR1BsdXE1RkpDT3NKaTE2QVVBZWtoY3Roa1pKQ3lsRXNnZmVlNmlTUjNMam1Va1ErMzJhZHQxbk1nZCtxOHRwM25ORnZ6Q05LUW9XWCtibTV3QjFxUzZGd1dOSHZMZ05BWnlYTEE5K1JOVElVTzFydE4rNjMxN2FGU0xwMStsTHRreWNVSk5SSTFUUVdsMGMwbXBVSGZvNDVrcWt1elBIdENwdzZmc1hCYkI1dCtXVFNEMWZubXRrOFRjV0hqRm0vcnZGbzJrc2JJVEdiVGhlbXNReDZibWxKL1c5K3c3U3ZoVHgrQ3JZL2lXcldtSW5ZdVc2RlEvRjFOUkV5ZzVRaGUzaEhOTlk4MEttNXFCSlVFeUxEZ0dHTlZ2UVpULzhaVGg3NDdQNlpiUWFGWHJ0MURSTWR2ejFrVWpsSXhKbFJNY3M1Skliemx3UzBxclpGb1VuYkVpUHRpMHFHaHZ3YWhZUjRvY1JTbWo4SUZLalFtaTlvUDNpTENkQjVsOHRBR2orTkZyZUNoTHhWMUovbW9qOExRTjNYUFREaU50TitiZUFpakhzMUp5ei9EKytlaUgvSEdsQkpZREo2QWZRYXJqVGphcll3KzlFM0I1bXI1NnV4c2ZkV09KZmZiSW8yeXp6VVQ5OWxWcDFsVmpSWFN1YlR1ZThlL3pBbzFLdTVoQ2VnZDVlQW5XcW5xUVR3U21FRjk4TlU4Z0JrUTlqWXI0UTZkMXRNNXEzYUQ4elJibjBndDZRcFRZZTc1Mi9qb1IvZmFVaE5PZ0E0RTlZdWNLQit0TkdpNC8yMmFScTh4TjVwL3JXWlBzMW1JcU5xRnFSb1RmYXZBSDc0dVlIQnlGWHdzMiswS09hcmNidzdwZ05nR25JM0dZR1Q5ejV0dzRuM2JISlRTMDdmd3IxUU9KQU5KV2R6UWhWUFVpRHQ4M21WODJ6NnJPLzA0YjRRZElkV3MyUDllMkZNRjIzVS96WW9zZGRoaEpDOE5KeHMzN2JPOE1SQXdnYlNVK3J1MHJ5VHNIUGpMdjQ4UWpmSjN4L1dLcXFzdC9YSWoyNFYraEJ6TXZXL2F5d1haVk1keVl4ZUpET1doS2d2TTljL09MLzM5S1lPazZmdjVaWmJPcGs2NXU1M2YvbmZIUDdtclBUU0IrY2FrbmxVUWx4ckJSSW02bytmWE9uRVlyNWdrQUc5d29hOE5tTmcwTStHd2NGOGVuM2NHRm5LQjFkN29QY3F5V21pR252YkErMDVWUWpyU0FSbThHZ1dCZGc2YzBzSHRLOEUrL1A3N0t2SHFuZ3hnYjRWTVRhL3JNK3lhS3FkTHJUcUN4U3ZYcWZuU1J0OGxsM0FNRkQ3Q3huYVpJMFovVHFnYkFjcDVqUzA3SlJhcjlWdDljbGNYZnRBOFhGQktsdnd0RDZEeXdtdFVNc2kzYUthWmt6MWhkSkp1ME8zTzdTV2pZSmxZNTBjVSs5MXZRM3NRdG5SZXZXWlc0QjdKUkM3WVZ0bThVelErdXNodWtkRlNkQjFZU0E3bkNZdjlOUkhPY3FNdDU4cGx3a1ZaK3JhMDNFa2JUaXkxREJnanJiL01uOUo0UzljZFFMcXVRcnNyWTdoNFZFMzVvbEJBaUIvN3BTend3c0hyajAzZExQQWdrYm1pVllJeE85VCt5eGViaUN3VzhkZlJDWU5zcCtMMS90M2RscVZONzlMWmdGZWtFeXZyMFJpVWpKcUVNcUxtNDJYWlFtSXJ4R1VFZDl1NG5yNGRrWnJsOVVvQzhkbFg5VUF2SmpreHNiTFlkdjVZNzU4enZ1aTNHUmhnQnplZEhvVnFaYkVHQnFKOWJGUUhsdlBLUzdFY1FOa2hWT2hOL1orRkw2OUVYUDJQZTZUbldzZi93MEV1aUk5RXhReXIzTGgxWlJPQ2lVLzZrQndKODhWTmdhZlRLcHhVN1kvbXIydUZ1NDFxREhHcExMZUtCa1NkeUlEUm5MclRldkx4dC82d09yVS9IOEY1TGN1dU5tL3ZRNzBlMkpZWUFXN1pyWEJOME5STExDcnV3VzlXbEQ2SDBTbUhZMmRRUXNPc0FmNHEzV0dPV3VYVkN1WjBtdlRIN0JNNjE1VnptU3ZNTDlOeGF1NnBnSHJFOHNUOWdXcnRiTm5XeWRhYTZxN01uQm45dDdPd0Vtc0VUa0NOU3VTbDlFbGE3VmVsNUFuZjh5NkhyUzlVclR1VTU1VlQ3WnFFU2EvRHhScHFqT0F1VFN4bFJMVDN2MTNVdW5hYm5GMUMvWUIyRjZCSXpEazFJejk4OENsc3o3c2tTWUNYL3lkam43SG4xNFYxYjJoZWVaYjQxc1NXR2pNbDZmdnhJV2ExZWtjdngxK2Q4anNPUjN3S1VwcHdzR29oT0RTRGdZc1k4dWhFVnYzMGlqM0ptV0ZvT1ZnS2xmbTVvZ1QzTlZ4OEdPVkpPWXRVTHV1a0V3djVLMExBM2N0UWFPWmw2NlpwQnFkSXFabkZVOTB3QkIvdC95b3ZucTJXV3oyUlJEVlJ0MnFEQlByOXRuQ0tUL29RcWR4bzZ5ckFEajBMVzAxZnZSSG8zQlVOSlBLSXZCU2xiOUY1eHN3MkoraFhvWlByUWp0MGdSWGRBTENVVzFtMnhQTlhmclZXZnNNbkVTaEZXS1QxNWd2ZjJjZlpucmo5QXo2N1BCM010MGx4UW5GTUFlRFk2dHAvUlpGOFpMOWdOeU9JUXhQaVVGZUlJUWFtMGJpU2hmOFppdFhhZFhzRnhmOFIyQlpaWkhLaXAwWVgxb0ZSTFg1aTE1UFV5c1VkbmFyVTJqS0hEb0FLTzltUEdHWU1PUDhCRmo2b0Z4UngrTVVHaVlham1tYy9WVG5hSXpNTHpuTjQ4RFVSK016b3RlbDJFUk5TQ1pNU2h6V0lITUREREFzbnd1bXNaajlaSEFnNndnK2J6QXdsWGtwZjNNZDNONGt5WEFRNUFqQ09IeXdnVG9XTWJScjhJeTJMS0JraHRKNkZZc0c3THljdHhMd0Q2dUdaLzJBeWNTdVBIcjJxeUpBdWY3KzNWenVOdmpEa0h2UWYwYnl1S3F4MCtSSElxLzg2WDJ0eExUU0dNbG4xNFJqcWZXS1g4YjhiZG53S1dabXFsOHk2T2pQRXlzazU1bytBZnpkNDNEbTRyaWZRTGc2RzhiSDcreE9FT3V4eS9wblQ2VEVZUGpCZlhhNDJVOVVTV3M4bzc2R0xKM3RhbmY5ZlNJd0FYWXlzWTZaNnZ6RjVXZ1hMZUs3SndJRGhvY2NReGhIdXVtM2dmRzdodXFNWDZlejlwSDlBbTJTc1NOaFhzMkdMSERpQnVuUG01K3phSGFLSXRiUmVYN09GNEZpL3V1MUM1ZnArZm9Sd2dmQmNpSytWYlpOKzM5aE1lTWhOYVZqRkswVnpyL0Ria0NOdjE4amVsdWx0NlhHZm12RHlNUzVkUXZpL1ZyTUU5N21iM2RXZGdtaVB1YnFKR0lmTWRKRUZQdnVyMWpESVhyWnRWMkpJN2FuM0FBWk9QSWNQODVqRFpDZXMyWUhYYmFtM2hsdSt6dUpMdHdsa1UvT3BxTmNFRWNKWXRBRGhEVks3NWZtNzMrQVhQT1hyTjNIRWljaWNIWVhZeko2MWYxZ3BDZUFMTWJDMmM2amlmQzlTZ1FXNnEzL1ZRNWxUOUVtOGNRV3AyQ1lxcGtLTFpBaHlmSU1hS01FTTFpNUs2ZFFLd21wQ2xORmdpVTdEelZ2UTE4cnRpRmFTOWUwVElTZHM4a1IwazJRZk1XQUo0NHd5SlBHQStZaUhHY25TbUE2SjYzL2ZnM3hLNTlrSjlsOU5vTFUxM2o4eEtNL2N5QU9YQ3pJY1B1ZzFWOEtOaFRaZmg0WnJOSlJRdU85enR4ejBDZERkMWUweDVVbWZKYjJ3angzdXRUWll2TjZLdlVvTU9nUlJhTmRWTVJiY0pZTjVJS1R2V2ZtZ2JaOExSSW1PU1hGWkwzZzcwU0RlRUdIeE4xVmtNandUeWhIeHBGUUJGV0Zjb2hMNEt0Y2QwQlRlb3RSN3h5dWFWbjhzUU1uMC9ZR1AxWmdNV1ZiWXordHRJUEpsOVBjZG5BNWkrQm5OdXBQams2MFpjSEFqRUhzYjRRMm9VMXBkMmVrN0w4QTFxald4bFNneHpwZVdGUHYrSjByS0lDcUk3RUNBaU4rQ3lMSmRCL1FOdnFUYm5kenhPQ05LQUJCcW5mNThmY2dqS3lkM0JUbVQrT1RYWnZPOUVDS202VlNwN1JvSnVPOTN1Q2s1UDlBblltbnNodk1samtST3NHc1pEK1duMm5BVk5JTlBaUjBON3FYM2lHeFZybDlTaFlRYlc5K29KK1NnOXdjeDlwcDNPcFErbjhWSVF0RmdlZGFHekdsc3RJcEg1Ry9RYjNEQ1VjOTJQWWhCYUYyUkh5M2hpSGdrUlV1NStXb2hlYXFLdTlaK1d0NURJTEp1UWpTVVlSY1hyRExTY0t3VDdJdFlKM3dtM0l0WEJFeEVUZW84MWtLOWRZYzV2bllVUlBra2V3WXowOGNqVHFxd24yMy9OcnJZMlR5bldWcUREa1hqTldrMm5FKzZIdkZGTElQNUJ5aU9IKzVCVHdSL1F2MEV2Z0pRUGdFREt5d0dFLyswM0Q3NnF1N0VLNVoydTV0WTI0WU5UOTVnUDJMK0d4OWJmdytYWUF4aHlPVmhCM2krZk9LcEtKVzY2YmlVRlduemhxemNtMXpjRy84S1NmdzAzdGs0N3dwaG5IMHQzc292MWUrQ2IxWEJRaFg2Q3FWM3Y5OHBrajJpZHBmTm53eE1sZ0RTMTdwS1c4K0ZOVWNBWFc2aGVhbmNHTXlMVmM2RFJ3WTZ6dHBHWHpCRFFRTlQxb25QVzRHcnhYb1V2T0JyQ000TTNvNENpbEQ2aEJKMkVPQVNHbUEzR2FqUHA4ZnFrOElFOXZZcWt5VUt3bVJZd1JzbHpya2FsemFtNDhQbkFlVDBleUV5UmtKNTg0UW90Mk1yODN4aG1LWVVNMTUxdjdZYXV0dVlYWFh4eUttWk5IeDVaOTNld0hiZUVEZjU3bW9LYm54Y0V0OVJaWlgyZkZoeTRwekxaM3pDblFtV1VUSERQV2x0QitjYTN6b1hFM3EvcXNGRGU5VXF3ZE9ZUkZ4Sm5NMHNFTXpqcFIyS0RwQWRwZkVQSkRSbVVBV3Vkc2JDZTY5SktBMmFuc2Z2eW5Md0ZhNzd1L2YxemU4T0FVSGRNb3k3a0QyUmRDYUROSHVmbWt4OWI3MXpqYldUejRQL3o1WWRWTmgzM2hZUHFyL1dPVU02a1dEQWl1OWVBeHJkKzhiT3B2UGIxcVA0a0d1NmZ0RW51Q3JwUlFHcTVhaXE1MDJQZDl4bHhiVXo5ZkVIQTRVS1hROEhQRmV3VmZ2WEtIQlRwbndkc1AyMFd0UXdGRTRydEhucHYwamxHeXZpNmh2OGVFY2Z4NFhUVUtHYmtkbVBWOG80cGd3RnE0cnpWUVptSFRjSU81SHkxdHRJR3E1OStGbVRhTXduQ01CU2NCSU9BNWxYRk4rdnlmdG5HUXhLZm45eXRsNFdSMzgvb2Y4TExFc1JYM1g2L0laSldaNHhMMEFNSUZSK1JpSEx4NVRHeVo3TDh2S05QazNIY1dYVVAzTXVlVXpOaTNmY1VYYkNEck9uYm1WVGJubGhuay9Hek1GU2RLMGFMUVpLaDZlQlhTcGY0R0x2ejBheGZHbWVvWXNhMHdETDhPNWkyYmUrVC90aTJMY05jeFhwWjVvbVlvOTJpWnFkWG9qK25yZnlTVlZVa3o5T1cwRC8wcFRuRjBnZktnekNmY3M0RGplaHRpVjNKbGxoaGtVNjRLTTJGQ2RWU29iZk5qY3k3NTFLcTh2QmJKWThYSG5GSnZjVVFDSVkvekY3bEJPbmlxY1Rnem1iVjZTZlMwb2tjMkh4TE55WU1YMlkrdnlLL3VWWER6bDJVUjdjVllzdHNjd2F2RXhiSkIwdWhkT2VyRmlHZ1BjWlc2YWhFaGg4b0hsRUMyWnNCTmNvT3ZTSG5xa3Z1UU5xMnovR2dScHdCT2N0Yk0vSnJIKzZXL2ttMkd6dUFTNEI5bS8vVDkrME9lNUNwbERJZkRyd3o5NXFJVXVaYnk0aVo3d24rOGk0dDJSNDdQN2R1aU9jdXFkN1NaTDVCNXIrZ1pocVNWNXA1VjA3SFlWTmZmaldiM1ArY0x5S2Q3UmMvazdOeFdOam5mVnNEamxKYXpUWVZrVE1KN1ZFdnIwUDJiSnpXSy9zcENWTGhRZ1oxdDdnRmI3MVJzNy8zQi9EcEtxcnhielRvanNJRDhqTWRVZTJ5d0tCMytRY0g3VHM1bXhSLzlYZFhhSm1JT083OTZvNFNYZUhqUk5pSjlib0o5NlI1K2NSNGY2ODJ6TDhXb1hNbExkd1pEa0FLN3pqcTRXL3ZER09yQm9xcjhYYWxpenFyVkErM0U4dDR1MHlicm1oNmNGUjF5ZkNjdnNnUllteHpnVXBGSE5rYUJDQXRmMno2MkxZeWxTN1NQdGxPdEtRM0xlRktFOUJRaHNjZ3Q0ZXBZNklRdDhDK2NWYTZUS21OZHk0dCtaWFgrK2hnMyt4dEQvV2tHenVKUWZvMFJ4akd5aUpYR3JFTk95SGo0dEZSY3dEbU43a1VRVWprWDltamhIZ1FjQVIxUDAvdllUaDZhYWRZdWUwanA0WkxPSDFBbDZYYWJ0OXFWZWlONFdpYVlkeUZzdHpERVlvVjZ3TkpQRWNUbFFPY3VYb2VzYjJxUGkxYmxSMDVSandPcFgvdzNoRjBIUk8yT3FsdzU4WmJDODdiVUdRSjZRMG9EZ3I0eFJYZHJ6dTJ0TEVBKzEwTHRLWDY3QUtuamhyR3RFSzdqMnBxSHJBcjZ1ZXR3Q1RVdHAvRnlna0FLcmErb0E5VkRnV2x6Z1V6NXhQejBSdzgvR3luSXQ0MTJxbGNqVUNON2IzL2hqOGloeURuRnVtUlpiUnQrZThRa0tDVjVlcW91dHo4QjM1UWZLQzFsNFA3eGdYYUdZWCtxb00rWGk5NHo1S1FNZGtsL3pVWHFwcWtSMmpnYVJpWFdmTGFyb01VK1NrV2ppZFVWdHl6TVZYeDlEbGtaWXBLRklYK3pURHJuR1A0dnJpcmk1UmpJQ0RNMkdzSVkyQXR6N0pDTFZ0RU0za21JdFVBKzZ2NzluTnNxQXk0OHhaM0pyaWxjdWYvNHVrSzYwSUZKZWt5MUh1cVl3aEgvYS9PdlE0YmxlS29LZWU0citmMnNsRkJ3czlxYzZmb25GZG9aNzRlSVNYNFRaQ1BrUG9LNElQb3BHYi9HVzdXM1ZQYmgyb3B6QUpjcElWdjRrc1ljZkhZOXhuRXlBamV1YmJiMlNNTFhSR2V3Y2N4aFl5MUFNK2h4dkRmQTJFWFhNbFBmckgwRU4xN1BQbFN0K0xyU2NLTlNKRHY5eW5EMmllTUczQ3ZVM2ZuRytwTDk2djJUVVNoOER1SnpMY1o3MFZQMzB4VzlGM0RGWW9waXExTjVSa2ZObzZOL2lWYlVVY2VwUkV4SVpMS3hXdFVTVVJWSE5HMXRsUGZGVWxaQ2RXcGZKdHUvYm85d2QyanpxTjdQeGRPbkFtK1VzZWxHYUhqNUlKZ0xLM3hZL0VjaTBjSGRVN0oxRmZFbzFvVjlPTEJEK25hUjA5V2c1eGRnN1l6TmJabGd4emdaclhiT3ZXeGk5SDVSSTVwWi9xOU1xOC85bWZYd2VUeEo3dlBTdUE0WDV0aG1ZaEpZNzJIUjMva2NPZUpZZVpRT1ZJbVk3N1RKODloNU1RZlVSeTNCRGJQdGN2b1ROQjg5SG8wdDk3UGo1Nk9MSTJ5WjRFVk9mb241L1VNM1NzbDFqd3ZqWjRITzlSZnN3OWlhamN3WFhpb3RvMFNHR3paSUZodHNrVmo3dFJ0N2FDa25nYWcrVUVzRmRFd2I2ejFLWGZscjUvai9LQTVISm9Vb1dGY0JYd3ZWZGNMS1RWdEg0QW9lbm1NUmFISTBCMjRWT1BJNTJKczB2RjBsUERMT0lnQ0IvVmN3SWppbzZ0UzlmVUJVczVOaWFqWks2VnBuWTFWN1J6VnErY3ZKS1FGSGZpalFncHZjNWxNM0RjKzVUd2E2Q3ZwM090Ylc5aDVZTVhXVExwa2pqaFduYzFUZmwwWGgvVEx6WEV4UU0xc2cwTXJoMGxudGxpSVhqMGZkVEJJMzk2QUNydXhPU2dsSlRVOGVtRjAvcytmZXJPMWNhKzFiVU1BNDNKVXR3WWRRQzEzMjc2bzJxSkdFTE8zTHR4V0lET2FDeXpHc0M2aHlKTnplVTI4L0JXVld6NDU0VVY5ZXhkaUpjbG5YUFpSdWdhY0FuN1lQUG85LzhOTkdaN1pZcXNiNmxEMEZBN3krTExSN1pxem9Pby9pYmxROExDVmczcWkxcThScmFwVmhXc205YTlxUTc0MGtoSFM1ZmxRUlNMVzVRMW1yRXU0MjY5U0xHWjdKL0UwQ1BJTFQwM1k4MDdSazhORkdpY0VFdE12Zis2SlByMnlhVUFvaUk5QjhnckEycGgzYUMvV3d2d2xqemxjaGZoWEo1WFZPc3M5UkZ5QUNGUEx5UVB2N29FZ0dZRGs5ODdzaUd5eDlBRU4xUmJZRVJJNkpPS1RrN2FyTWpxdWIzeEJGV3ArTE1XdzZuZ2tNWkJmbzl0RUFEaVhJOWY2d2hyb1oweXJSM0dhR1JiakR4Vm9ZTCt5dlZIczkxSXkvZGtvZGJVT0tpRjRpcWRYc0pxZUpLUHBZYldLWUQ2NHEra1ZlblhhUVNGanRtOStLMFBVeCtiQjBrMzBFbHYzalBpUjBFZ2o5WGI1RC9PL2dOeFljODdEcmJRUDZRZmFkRGZZL0JySHM1QlFPY0JNSGZ1eXE3U1ZYY3lSdTROZmJCeGV6RDhaczlwamNZMVpHRm1CODMyNlQrWUxvaW9xcUlmRVVXNlgrS3JsUFdzSXd3UjZscUR6U0EwQnFKdVA1S2Z5VE16UG52bWs3Tld1bldtWlZFNloraXI4d3hDN2g3c0RlRFlLRGRvTm4yeGxXSkVvL3hldXVsQ3N3Z0N4OUt0SjEzdG13YlBJZjVxSjR1NDBrQUVRZFFxS2prOFYwQlEvWEcrNjJJTldMOVpDNGx4Q2U5TlE3UGwzb1RhYm5DU2V1UWMreHU1OXZHMVNIWHduaWE0akFRZ2J4QWwvUlgxcEtYUk4xKy9PQjRxd3c4cHlrdDJhUDUwTTBWTjBqMm5Lc2lROHJac3gyaUV0aWVoQjYyQjE0dEVLZjA4VFNwTVhKNHlhUUhMV21pUXBrN0xmRktnOUEwZDNaam44R1NqWEczN3BtYzQ2VnNPM1MrYWJySFRGVk9WblRLV2pMWmdTOVp0c3l4cm9DKzl4VXJSdWdhUWN3TzNYRjBpNEpzN0tlcVNVSHFaRGV3RU5rSXoyYjJtbk5KdVl2OGhGbVliWWdUS3lRbTQzRm12MDhBbUtGWGN3WWFWNy9uN1JmNTArdUh4RzZlS05YcDVsY2R2OWFYTmc5eDhib1p0KzdvMlZ1ZUEybytrQmtiVmhSNElnRlZuUS9uT0NhbG9sanUya2tiMzFHSHJ0N3ZtQk5HekdGQWZlbHNCSjd3VHlMOGpjNWpEUHFubWJyQnJGYVUxWXlGc0Yyck42MnhuU3JJT2NQTHArbDgzaWd4T3MzOUpuOTBUb1U5a1ZqK2dUVlpwRG1tNTV0QWgwSXdWSGFxNlpkbjgzMHhENVlVQjN6TUxiY0dhNDgvRVdJK1hHWmtsTU45eFhxNjFrUWJmM2syKzJMK2cvdVBhZENiVTZHTExuNTRiRUNPbWd2QUt5RVRDK0FPNTh4TEg3L1hJbWNkRVFTRElTU0V2alNrUE1MbEJzRk82NmI2Zm15REpNakNreUVCWjE4Z29wbU9ibWpCeUNxU0hiSy9yVmJNTE9ZTzV4V2pkU3RSZXpnUUxad043c2lvYk9vQ2NtQUMrblI2eUVtV01vOFJqMmVoNWVjUk5ORnVQeVI1SzhlRm1mc05aSWdqeXprQkEzbGJZQWc4ci81R3FCMnVlN3lYZU5Eb3dMREpUS3AyK3lYcjdPeTZLaUZ2Zko0bTFKM1BIMFY5SFBNckdqd3gxS2Ura04vMFN1QUQ4VHpxR0ZtcHp0UUdVWnZkczE3Um5EMzU5cTl5RnoxS1VSR1d2d3VjY2lxSUluZnZySnVER3pJb05Tb1IrUytFeGtLdFAvU3g2SEROYy9oL3V2TEJqdjlZazRZQkhyamdSMWdwbmlkTGU1NnFianAxbURvbXQ5bmtTMUdkOTl6NEhLMkZoYkVqMmpwWUhCcTRSMFVJLzA4cTdZOE40dWFDTllUMktVeHdmaEh1VjU4MG5qVmtEclZlNndIVHpmQk9JbTlqNkd1SnN6eURWTUd3Uk1mOE03aytFSG5MYWJhM2NEcndlaTgxTGw4RDRQTVhVUjZhc01YWGZXdDdmS1hpUnVaSGd2YTQxNU9aaDN3TnFYQnIxMzg5WEdZTno4NThDNEh3UTR6S1paOHRXRDRNQjgyeFJkQnQ3RkZkQ2JVZlhDbGpFbWNWWkhVSUROUlVnWGYvQTN4TGhDaW5XYnFDSENjSEYxVlFwRVFnb2JNb0UvbGdHZUV5UytvaW1scm9oNWZ0MVc1VWNJRWRDWlB0Rk1HZzBCcGNaUXh0bkRMZVFFUG9WUnRuemE2K1ZFLzBuVnZ6azdJekRFUllRRUZTUS9wc2N1THZVMlFidzlPSS9RbWJDUDRsZkFQVHRndW1aOXVjZ21tZ1VYbUdzRE1oQjZERkRKSnVIUmc0UzVYTk94RzVQNlBVbjJBSThQbDZya094VWxwakJLWVRsb1AxdktSSEZxVFZoUjUwdmhuUTRNajRnWHcwalZ6Slk5bmY3dUlIcHNoU1daRGFrNkY4QjF5VktkdGVxbVFBV1ZacUFhQXlGdFJlazhZaWtjMlUwNG5EbVNMUGNmei9JdGZ4dk9qMktUR3A2akdsT1Vlc2praW42MVdpVFVyc1ZDdDlwS3VUeFBvclN4amF3MWVESFJPd3ROK3E2UzJWSTRONlBkdWFRMllxV2RwNDJTejh2cmNPUHJHNTVVb2lOb28zVUJTcVFYdGEwdy85SnNZeHozeVZ4U3p4Y0hXYXZhNVR6Y3BvN29MUkpjMFdHYzRaR0RKWlpSa0wwY09MaUFhUHhVN05TRjFPakxSSGxZQ0ZJemEvZTdlMk5RaStnL2dVeUQwdFRaSi9nbzF1amEyVG5EaWRnUlhGR2c0emltR3M0WXV2bXVuVDBlRThaV3dhVUt6bjhJVmJ3MldxUkgrb3lMc3dEdVFEanlFMjZINnBQTW5EanQ4cng1WURPc25hWlFXL1kvcDRKUVo3eVpNVmhjbnJvZWwxQXdITU5YUGorclZpUWlYKzhuRzdBSmcyb1lxcGp5b0I1a0VxOVRzcHZFeVQ4K3NMZnQ4SDc0SzFDbDBwaWdMdG9vYm9XemRocmJiczI2RVgwZmp3V01LcHN5NUdITlhwcWpnWi9SeE5vZzE3U202aFUrczdNTjBEZGMwR3pNOENJLzRlUzlYeGs4d3cxblhJNm1hNk9IbCtCTTAzRmIydHpyaHNZODJvVkZQNENCeFBCUDhhOHdwNmVDVzcweFRRNXZzcGdpemdZbldTSTNQMzR6OUZpbStRZHEvUmovaGJZRUxTNEN5Nk9aSDRDbEhpMjlyUkVBbFQ0LzdnZmhsRFBhWktNWHNDUXREa1E0citzb1Y2NTk1K05LeENVTFROMEtOYVNxVEIzUnIvY2toZTJUNHJudkZNZ0M2cHZhbFh5T3BxVUhNdXd5UDcvMDNIS0JFZndvb0hrdnU5S2JCd1V4b3ZSMkxBc1F2RmM1SXFienZlZ1lWdUlSMGZ3cXV2czRwclkvRnlYK0ZyazB6eEY5SG54MjFVbUcxSjh6WDJlbEZSdjJjSDgwdzlPZlhsc3RFczY0OTRNMmhhOEg5MnpyRzBKNXhKYWVMcGZDc1dNb28vdW9HWEgyK2JpaDVOSVo4QWZEVVdIa2JPeGxuQjdad0ZSVjV3RmpPKzduaUs1K2tFUFpobFdUcDN1eU5UQW5PT3FzQmxMK0lwMFFJbEtRMjJjUWVSem5FMVI1ckR2emd1QmlNckoyZFZTeG5TZHZyQUVOY2YyVmlZNldyZXkyTmpSdGlwdWg1L3NKOGxxMG5lVkdqRmk4VnlVZTE1UUlsY2s2b1ZrNi9XUGk3ZUwyaFVYdWkvSnZyVE8zYW9ZTFVLb3VVb2ttc3dsQjR6VStTU0c4b1Z5TjVGNzBxa0V3UGVNTk0rT3NaaDZtNXR0d0xjSmR1UldONHJPbzF1amxTK1ovREVQVU1ZRWZpOW50QWtUNDdUakhtY1hTeFpWR3dqVjgvUGg5KzF3dC9wdHdGU3FZS0NVMk5YRHF1Qk1iSHplL0VVRjRvNGFtME9jYUdianlnS3d2NGVPWW0vTXVLdG1yMlpDcEt1QUUrZDFYaEcySk14K2RBckZkTXFKVkFMc3VWRk8vc3FUbW4rRU9ZVnR0aWVyV0h5ellXRXAweEJ3ak03UU9SeTk0NnBZcGt3Rk8zRjRneFlHYzFQbDgvRGxxOVRrMEJCSjVoeFRSaVVsQjZ1K1Jtc0FxRTlFdmxCYzVIamRYTjhxcVYxUG9kcE1GUi9uK0V1WVVZdEV6VjJGM3VkY2p4TWlCTXhJOFhRa0dGWDlDYnk1dkttQTY4TWYxeGRQbUk0c3QxL1M3aTZqYUw2N2RubFQwMGZxUktpMFpHWE9HaEErK3JjS2I0dXh1OG1RcUNLYmM2K2lpRVcrMHFtMmNlMklsVDRLaVNDUkNYVTlyWEFxTEZrWEZDbDl0ZjVFY2NHcy9odFpDTW16UExnWVdYQ2RyZS8wdjRwM25WSzVqYU9LV2VHZmpxZzJINWdCT1VsV0VBM3Q1eWFsWW8rdE5oUFJtOW1LeUNmR1VJK3F2eC9uQUZEZ2JJVkxOL3V0NWtmN055MHU3eEpLL2lybW9qbVBmdzVRU1RCYXMxdGtxK0lTQ3pwaVF0b2I5QWkxYkh3SUExRzdpTHFXbDIwNE9kVHRONnkrNUN6T3RRcW9GMnZyRXJ6NUVsSEUvSno1V0lHSEJhbXhUNXB6RkxIYUFRaUtrMUwrNFlZMUpYNXZqa0txSkk2TmUwY2R0cW9lYndhSDBpeGUvRXpmRTlEWnZteWNVcHVoWlg0Nk84RldiRWRKNzhWWXcrNzV1Y2NsVUoxa0JqaVloVlk4eEo3YXJvUGtvcUFzeXJRV3JJL3RycG9YSjJ5SlpmaGRvemg0ZHVVTEJqVmNaUXRqMGJNakRjOXdRU0g2cWtWMHJ5SkgvYm04cWNod25zWFlpNDlnMjBoY0hHRkZFYUJ1MjRiM29xM2NkZWlwZGV0QUd3bnFPSjFwU3FybWRnOHJQUTBOYWRlZHpXR2xOVE9TYzJNc29lVzU4TGwyUjQ2SWZONk9NRm9HZW9HRjcycHpKVDlGRDQwWXRXbHFGdVBHTDBtenBRMklzaitWOGRqdjBCWnhld0gzRXB5VDhWbzBuVjFrUmFZaFEvTk5BUDRodmhlZ1ZkQzBKa2hKTE5FR3BSSzdCTEN0aldDaG5ybEFGNjZoQ3d0TlIrREc1SmVKMEZOdVNGcEo1TmI4dUR0Mk9ZYmFqaG9Qclpteis5a0lHNWVJd0J3VzQ0V1ZQWTl3WFFyNXJobXZOWVhDcC9nc2I1MUkraFlqbjRWc1pLOXU4ZElSdjZEc2hraEpyVUVIL0JUS1JRbW5WSlFJbWJvTzdqZUJySFpwOGx6Q0VldnlFMzFTYnhrcU5DUTZ2NjI3S1FySFBLZ2tta1N4aGo4YWRuTzEzcU5XNG13bEp0K0lOdDZBT2NlWmZOYnJYNnpNK0p4ZUtTZDVaMlQzS0M2VE9MMnJCNFBuclFHWG5FYjh6VTByUlNzNURRWFRVUWM0QzE4Yy9OeFVnbzRNVWZHY0N4VmM5WU9FdVBHMEZ4MUxsNURnb2dncjFOZ2N2ZEttT0E1Q1hJU1JCZU9taXFnM3BPK204bVZLUEg0eTRUekkrS2hFQW5OL0x1ZDkvNUNUbjVUbDdDNGpaNGQzS3U1OTlESUZ4NTZGbGUyR1h6RXczQ3U3YUFsck5yenZhMXorb0JGZDRkaFN5algvM1lDVlZkRTdoUWhqdGlMeG4rMlpyM0FRRGNLcDkzM2FhT25HRDVzd1RscW9SajB3YU1BNE1CK1RYTTVRSlJNZzU5d1ZzUVFJa1hKRGh6WlRjTDRkQmUvM2t1WkV3NlpRaFNtR0FEWTRaVzBZQjIrS1NubjlybEdoUHI3a0tJak1leDh2aHhnd3FXQ044RGxSeTZWVVNtR3J2ekNnaC9Oam9sMDZiNjJ6M2hGYlZUZ1ZnWjlBb05jb293OFlCT09nZFRJZktUbWxKTXRTekVqTXp6amRGakgvb1RENWVza0IxTnZhUGZEVy9hbVdWVTB0emJwRmMvSFo2emlJVE1JWkI2d05xZW82S2NweFh5blBwbjVWTU5lMjY1SkZjQzk3U0VVNXpDd3ErUmlDY0xZQnhZd0hFN3YwUlBqRm9wMnFheitzdVFoWWpPd3kzQzlJWmJBVlFLTE84ZW1LeHN5QXM3V25aY1VVTjJNdXRTZzg3Q2F2VS8vT004ZFh4ek84L2pmVzZmdUhYdGhqTGZSaVZNZnhtMWJVZ0hmT1Y3bTJTeGlGbVpFUFRvNE9iV1czdk9JVFhnZmJ5MkRmQmFLbE9vSVRXUmtGQmdJNW1CY2c5RE5La1FGTG9RMFVjMUZEK1JYM0dLU1k3MzJMcjZUditpU3dZZnUvaUI2ZnRlTzlqdVVxODd6eFZBWVlNZlYrWmdPbHF3R3dTNDZXZ1BCa1ZBcVM4RmQyRjJYL3o4Z09yd3VxdXkrT1FXL3BPTUlLTjI1MFQ3OEVsS2pqRDNlVmZMcWxYbGJBYTZudDdDL3BGcFNqYXJTWENGSjRMQndnSVUrdm00cWVYN21aQTdhQUNYL1FoZGJaRGZYZDJCYlZ4VmhFbitCT1c3QXBvcWlOa3Z4d2tvUnl1NStNbHlyaVpRVWZza3FLVm92MzhRNmtpY0tUZ0Q2blFjY05JcVdCMDFsUW1idGdlbERVZkhGTndrcGxGUmRYcGdIa3BqNkhjZHdDT3lrMFh5b05qUDRlcUwzaks0S0VoRGpQNzdzRHl3b2crNENLWGU1bTdiZjhaRjEwcHRPSXM4d21hWDY5Y29qeXdVVGZrUlJQN1RydXRwblgzSXVZOUdsZDkrWDd6YVpjekFudEhqL0hzRVBCblVGdm5XYk5wbWxVOUNQbTFPV1E4Nk43TXBsWjRCOElzWVZiTDNub0wvbGk0czl5OExIaXZSQUtTclNrTjN4QU9SWlhmSHhZYUFEaGpiV2l4bTlycGNmMmR4dlIyY3hzSHE5TlFNQVBNTnpOVjh0WXRQMC9jS28xdjlkNWgwa1VLQ3IxeGpzN05EVGhzdkpESUFMU0VlY09MOTlDSUdmZklKS0xvYi9EVTY1SmJBUGdYb1hTWG54ZjJZSVQzVDZyakI2cXpJdU40OE5tTjUzbVgya0JlTmJTQ25uTlVpV3VjTVYyQzQrUUE4bzBJdjNkOTQrRFNaUDZ2THFkU2lGdDljSjFsYkQzaHo5K0ZSSkdaV0JpVUsxV0owRFRLc2NDcUhWV002M3FmSFZxUndCMGR6Zm5hRUVPUlBwekYyRUJYL0hzNFpuYmZWN2FNVS91YVFMa1UxL010SEZGamNuY01ET1F5ZzZ4R3Q2ZXVDWE1uVGVpZ01RdnFtSFVrZjNLYWVPWk5MakFneDR4dTJNT1dwRzJYVTgrZWh5dk9vNEYrTWdHMVJWZWRHOENRbzlWVXlHS3dCVTZ4cFVHTHh2Z2s3ZitjRUJ4Y0tZY2NINWJ2cnNkNmNhaEQ5cUlYRzUzK3ZDWDlFaUljUXVkd1prdis0ZUVLc0NtTHhHWDlLamc0eGdzc0l0Nm4yMGUxMEQ3WENLaUpVK3ZLcm1RMkROUDRSTmRmVmYzQ1QxZi9XTTh6dXVWaGZiV3gxWHQ5eTdrUS9Pc09JNkppcGh4RTBQRWJyMWlDcklIWVhRRVRieWIzOEVnVlU2TFNzMW1aT3g3VFAwOGcwQXhlUmN5UjA3dHRMdHNzZEl3cmU3dmRlQ1grMTJBY245Y211UXNEVkE4dTd1TUJBV28xY0x4V29nQWd3eDZRdlNwYm1yRUFkWkhNNVJtS0U2NUpJQmdLZ2pjaU0vaUhPOEU1eitGRDFXQmFuamUyVU1WNkRtcDdpdUxqZ0l3emRFVmlzOGJPSFNyVnBESmx3a3pXbnpJOE1EWUlVODkvTlE4V2NqNk9QeUtCY0VFQWgxeUl6cjZ2cml0UndUV2pOeFJaWi9KTXlyR1NyMHZNbnU4Y1JkOEo5RmlVc1FZNjhWN3lPRXY0M1NreUl5MWRWRmNLOEdZaERYUGt3SDV3b0JaTUl3VlF0RUJKZ1M0Mms2aHdtTlhGSlMvVDM5MVMvWGdiUWVVOTNqdkFVS3FTOHk3bG93alpqMHMvUmpLUzh3aDgrazVQeXZEVGVLVGw5dCs0NTg0b3Y4YnpKa3daZDVhZVl4Y1R1WDd1bFBHWmVuYUFHekhtT3Zkd0JyOGxWR2h4dEdtNzI4ZEFjUTh1TGZ6YlVjdjFRcktGOUYwQzBDTURqb0VXYVI0TWg4V1Rld29RdTNkSEdlelZMYUV2UDNWRm1kbEJLQ0oxQVNyVkZaUXFQYTdXVGRkaU5YUVVqb2NiN2syQzJuR1llUWFQNnlzSUFPSkdYTmJFQU1STER0dHJXcFg5WjkzNFowUTNjNW1zaEtDZ0ZpM0xvUnpNT2N5V1FBdlBkaldVd0FkcHZPOGpvSkhDc2hxT2F6Zk1zU1hOVldaZ2JjSEdaNjVqZFZ2WnFkSEhreFoxWFBzWnllb1g5WGtGZlJQd2UvbW1VSFducmJ4Z1RQU2pxNmEybkFhUnVKVXIzUmR5Y3B1aDF0ZHRYUk9mNzFkUDJCb2VJa2JJMk5KaTZKbDQyVkFmaU56ZU5wRUlYV2RPTVB2OVowVlBGK1diSVFicEJ4ZzhMM3JuNFd0bFVuRXlYTkJ0a0lNVzlNWjhRck1iTVNCamhyek03UlZWQVg3MXhaMWd3QmxLWWtaemFNRjkwVzl0aU90OWtmRkFpZkVxbmxHVXZHYzJLeFR1SGdvbXZDaTc1NmViT3pSdXhxVy9kY0diVnN0Qm5uVU5MS2pRd2JnVW1sZ0dZK1VYVWM2cnpvQWt0Rkk2OEtWSUhHbG1CTVlOQWlLRVUxUzMwY2ZZa2FiVXhkL0hwWWFEc011ZURuWktVVytoN09OVVEzbFZzR3JxbnNqb1FpQjRxemhqM1d0NU85WlBBWUc2NXZLOHh5T2FRT0JTKzhFWHJvMlltbWpxbGdUMjJKNHZKZEJvMitQMEM1SFNYTnVMWHV5dHMwL1NGM1ZFZDBJTU1HM0hVOWFpemxLZndjb0xBalJ0S3lwVUpxdXB1Q0Q5RWJkekloaHVxRnhhMzd5bWdWNDlYNHlqVUE1WmcveENHVUROUkV2WHJoUUduRFppTGxNdndnNUZvOHgyVjhiSFA0a2xQZGJoRUhFZVN6T29OR2djNTdQVEJPVE9UL1JxN3YzeXFUWlZZcmRJQ0NCcWNkMWFGNjF5LytORU8veXRkakNDU09weHR2T1hBWFhVZEhXZVNTSDlzSEFZbHpWY2FpcEJleVVhTkRRanRLY0xFczh3L3VGOThJVzQ3bmticWk1bGZYcXdlNml5TW5DTTQ4aE9XemYxdzBqVjYwbnZJd1YwU0FrWURtYTZUOEhNSktaYkljUHZsQnZyTUw4WldtRXI1TzFkWURFVUkyMS9saHFPSlBZYmNyZmd0REl5UDN1MEs1Yi9tTUVIa1REUUkxQ1UxRUhXR0s2U0U4OXBNYWtiVnhGWHlsUWJUaFdQbnZCNDZLVG0yOTVLRWhyTW9kZ1NmZ2YwRVVkQnUzNWdMQkVNdzJETUxTaUU5OGd1bnBsd0FaNDVJYlBhdW5ZblJrY2RvblRTQmRkTHRmaDBZREgza2tKQ1BOMUE3U21SMG9QNWFIajJKSW9NaVRLVGgvOTM2d0NVaXFmb2dlcnlML1lhN3JzKytkakRBTmNqcnZIL2lYZGRjeldTUXZvYmE4d3VQcEd1dGRLRmpTZHZzYmk3NUhZZzJ4VkEyMlN5Rk1YVUlIS0dBcDh6dzd3L0thOU83Z1JieFpyeFlnaWg4NXdOY2NZbjNZb0FIVldnSy9QbmZhaEdscjlwOUwzUlp6b0JsaFR4WUxiK1V5TUNCQWRDMk5PcUllOVpPb1JzbTlXalNLNE9vOXYvVHVtRUJTK0FnaksvVzhJMlNLbXhJOFRwbEVWcE5JV0JqU3VjNWJJSE0rQ0E2c1FzbDVxRW9pcVBZOW43WEEvSW1UWUxaVlZQYzNsb3ZRcUhWOXV5eVNWRktFZERVbTduYzl4b1RMWHRzNGZNV2RWbHI3SkVNZXZwOW9ad01oYzBWbWNKV09HL0tVUjBXWE9qWWVNS0RWSEljZnhmQjNncXNWeWhCTkg5WjJud21McmhQdU9uK1FvaHljc09PY0RuUjIzbVFLNXRBQUlYcTA3WVpHNzJ2VUkyTEUzN2NXRXM5Q2xEZm55d1Y4TXc4anBOZDNZVEJldEYwdC9PcWpLeXFNSXh5eCtkSGcyRTh0TXJyZXRVVlJ1WmM5Q2VNOS9KVDhNZG1SUFJJM2grMThTNXdRcGNIUFlVYVI5QjNNRGh0Zkh2b2xVazFpVy9ydVhvQ1ErT08ySHJTNnRVVFc2bUd6alZIbkY5YWw5UUs4U2hOQU1nNTBwRlA0NlJWcDVPdUM2WGhGYzB6QW83TXpsNjBZS1pVaFp0bjlsbVo5MEwxemliRkdSQUhaRG9ud2kvWHl4aVV5RUwydHdOeUZ4Uy9qTEhLOS9JN0xPTlVZbHNiZmdjanpFM0JYYU4zcDZGMlBYdFZrK3FrR05MM3RBbWdMdXUxeks4TSs4Z1RWWTVwZ1g0SE81bUphSUtzMGRGZ2I0aXR1dG03N1NYd1JPekZlcXYxSENpd2t4NDMxUnovcVYrVlo5QmU0NDFrNkMreDkwcktaZ093S1BoTTNVdTlONTNhY0hZamdvYnlKdFFtUk5oVXBNNjhacjF1UzNHV3UwKzhVVHE1RTBZelN2RjZGcklVOW1xTkpJZm0xMVUzVy9Rd0dyZGtKV3h4NnpibWJHTGdyb1BHWFpsZHpVUndzNEJjZGZJdFBJMWtBYkxReE43cjNlTlF2a3dTdE1kaFFnOHpQb240cS9jQ0JKMFl1c2l3M3NLTmFtSTg1SkQ1NlRRQTBtWXJkRjNxV1g0SnNOUnBCMnBER1VReDhIZlZscEwrcWFDalFXWThKMWo0NGs2cWhpK21LMkFMWHMzSktqZldoa0VlOVc5d3ozdTkyU3dUVjFTZjZkWStBWEs4Vi9CM1VBWEtwSUMrV3l5M0o0MVZmVlRVaXRNN3hWR05pUVExcUNGR0pPMlIrSUxDb1UwdU5pZVgvQ2lTQmdSL0IycWYzTFR3Q3VtVTVUZWdaeTZGT1hvZjc2RXZiZG95T3IyS2E1ZEg5aHpaQmQ0OW55N0xJdWc5eVBHUmFvQTRtRVQ5TExDSzFCSnFzNHptNFcwdzFYd3JrOWgxdHo1UmN4bElrWXV4VzIzRHR1bGM0TGtQdGUzbVEwT1BRTE83b05ieDdRVEtxTHBRa1QrUHJtNk5temNpcWlvZ0dZV21lbXJxV1BSZVpDL3pvSyt5anVvRDl4MjB0VDc3VU9RRmhLQTI1ZUhrWUp4TnE0ck5SQ1NXcldkb0NXSXZXUE9MbDRkSEJSQTRROEliVUlpTmowV3VKRmNMU1BSNW1adlJrN3RxaE5zaEp6S0oyc0V0bUlWN3Uzd29aU25hek9LTVpTVGkwTUxRSXMwZEpBSjJwckZnYkV4eWdYQ3VVUjlLZXJIdytXNVlGUUIvOHIwRjBVMUhYeUk5enNRQ3l3bi8vMlFBQkFCb0FRQUFCTndCQUFBOEJBamNDQUFBQUFBRTBBWjFBQUFJQUNRSUJBUW9DQUFNQUdWUm9hWE1nYVhNZ2IyWWdSbWx1WjJWeUlDZ3lLUT09PC9CREI-CiAgICA8L0JJUj4KICAgIDxCSVI-CiAgICAgICAgPFZlcnNpb24-CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvVmVyc2lvbj4KICAgICAgICA8Q0JFRkZWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L0NCRUZGVmVyc2lvbj4KICAgICAgICA8QklSSW5mbz4KICAgICAgICAgICAgPEludGVncml0eT5mYWxzZTwvSW50ZWdyaXR5PgogICAgICAgIDwvQklSSW5mbz4KICAgICAgICA8QkRCSW5mbz4KICAgICAgICAgICAgPEZvcm1hdD4KICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24-TW9zaXA8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgIDxUeXBlPjc8L1R5cGU-CiAgICAgICAgICAgIDwvRm9ybWF0PgogICAgICAgICAgICA8Q3JlYXRpb25EYXRlPjIwMjAtMDEtMDdUMDI6Mzg6NTIuNjcxWjwvQ3JlYXRpb25EYXRlPgogICAgICAgICAgICA8VHlwZT5GaW5nZXI8L1R5cGU-CiAgICAgICAgICAgIDxTdWJ0eXBlPlJpZ2h0IFJpbmdGaW5nZXI8L1N1YnR5cGU-CiAgICAgICAgICAgIDxMZXZlbD5SYXc8L0xldmVsPgogICAgICAgICAgICA8UHVycG9zZT5FbnJvbGw8L1B1cnBvc2U-CiAgICAgICAgICAgIDxRdWFsaXR5PgogICAgICAgICAgICAgICAgPEFsZ29yaXRobT4KICAgICAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPkhNQUM8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5TSEEtMjU2PC9UeXBlPgogICAgICAgICAgICAgICAgPC9BbGdvcml0aG0-CiAgICAgICAgICAgICAgICA8U2NvcmU-NjQ8L1Njb3JlPgogICAgICAgICAgICA8L1F1YWxpdHk-CiAgICAgICAgPC9CREJJbmZvPgogICAgICAgIDxCREI-UmtsU0FEQXlNQUFBQVlqZUFBRUJBUUFCaU00SDVnd2NEQ0FyQTdjQUFBQUFBQUVqQUVBQUR3SUFRQUlBUUFJRUFBRUI5QUgwQWZRQjlBZ0ZIUUVSQWZnQUFZaGRBQUFBREdwUUlDQU5Db2NLQUFBQUZHWjBlWEJxY0RJZ0FBQUFBR3B3TWlBQUFBQkhhbkF5YUFBQUFCWnBhR1J5QUFBQitBQUFBUkVBQVFjSEFBQUFBQUFQWTI5c2NnRUFBQUFBQUJFQUFBQWFjbVZ6SUFBQUFCSnlaWE5qbWNvQUFabktBQUVBQUFBQUFBQnFjREpqLzAvL1VRQXBBQUFBQUFFUkFBQUIrQUFBQUFBQUFBQUFBQUFCRVFBQUFmZ0FBQUFBQUFBQUFBQUJCd0VCLzJRQUl3QUJRM0psWVhSdmNqb2dTbUZ6VUdWeUlGWmxjbk5wYjI0Z01TNDVNREF1TWY5a0FCQUFBVVZ1WTBsRU9rZFNRbFF3TWY5U0FBd0FBZ0FKQUFVRUJBQUIvMXdBRTBCQVNFaFFTRWhRU0VoUVNFaFFTRWhRLzVBQUNnQUFBQUdIWlFBQi81UGZFeUFVTFBjTUJlVWZGTWhxbU56VHNad3NDdVpoNVN3bEN1T0xpdlN3LzBHR2RmVFk2NlNScHdCTHd6aHFqQXZabG01Q0lOYUFlZGtQOHIzdytza0pzMDc0Rm9DQThVQVJFaG1sbit0YU9GQkwyMkdDaWFFb0lWaHBCb0R4VUNlcGg3dU9LMXBXbnQrZ1g5VVdlNGc0M3FkcGZZRDhDUUJFTk5iQTU2R0oyOVFhRVUzYzhUU29Rd3p5eEM5eGVSS1VZSGRlYlFZN0tycnBYREhIVjRrQUpCcnEwcjJiOEpBSVdaNy9EN1VMdGxpR1NCQWVzZXlDa2k5enVPaFdnRkVGZTd6R24zd0d5TlFqZWpaRUhsN1AvWElqdjF0NzIrY0hONnRBUnNwVXNsenhyYk0waVhaVUxOYXFRTFBZOFhtNml2bVcyYVluNnVFc2RFVWZkMnNUY2pvUTFrVnN0S1JuRDRUaU9LOEpnRDhEOW5ueGJ2cFVNWlk0S1RTRzZWRWgwZmF6MjVaV1NNTEdPVzVxSTlCL25lY3NlQUdvbzJFWnU5S2wySkc0WDgwQVV4NXlleGRWdGR4bFFCOVpoOGlQRHJDclhjeVlKRys1alBLL1ZqRDZPS2RCZzdNWTFPcUEvR2NmR2UvTVRGMXJJN21CSUlhVWY2aFh2MEtBOForcXhRRjMvai9JRnhEWEtJOERZUVhQSERUdnZQS3RUUEhpdTRoc0EraVFtclJHOFkvL0dnSi92ZFhIaG5tcHd4dzBkdkpmV2cyd0hVVlZjMlM0YjJOZWwzNTY2eGlEUFRucjJtUGw1SGw4SmZGUmVueDlLdWJnZWVneVZsWmh0ZUZhTGl4OGo3dVoyc3pUaGJ5ZElmVWdLeXl4N1RCTEVyUWNQSkJXT0wxNHNUMmtucm10bmNIMHJ1OTc3TjFDZW4rUm1DTGlURWYyS2hBMGZQTEVOQjg0bzlsLzFtWnVZK1Jkd0xpSVM5SEhWck9tYUx4MjB4c0dFeEFlQ3M1SjF3dTJqaTJRcVB5Nk1HUjluYmZ1dUU0a3RvQ1d4TmNkYkZaWHRTSDJic3poZ2xBc3JwbU9UY1VsR1lXZzZNNGsyVXdyam13WHVSWE5RajRTYld0R3ZDQ3BnTWQyRGxENDRDT1prMDdNUU92cEpVNlZ0YVJBZ3ZHbXoxVVV6SzFUVXlFRXRFTkwzTDBzRHhmOHJjWHBjaXFXLzFqSm5BU2ZXZHZuNjlwRk1Ka3NmaG84VnNpajhkMUZic3JraGZTN3hrVUh3SnZXRDBEMW15blhIRkZJUk9keE5GbUJleDJwenZFK1UvMFlJZjlsdWlGQ29VMFdpaENWS1dZUFpManJ0cWg2MUpFdmQ5RzNVMTdQUXZSWS96djlzc0JwLzJKNFVJMWk5QXNPVi9Pc0VXMlVZMlJ6bkJZaGtTcnZEZ3FYSVd4UFRvNi9GOTBBUVkzbGt3S1Q2ZUV2bEw3UU5FT1BvU3VTNEg5bW1IMWN2SFNoOXk2Z2hqN1I1SkdKcnF1L0JEYTUxNERYRTNyZ00waml2Tlk0UXMxSzk3SzFpVllqNUhGV0FTRmI3SzRUNnVUUlhHOE5qY1JuakRZUVdHdVZDZno2SCtwUURFUU5sZE1zUENpK2krSVhCeFhwVEZCODc5MnVJKzNldFdhUGJnM09QSEtlcFoyNTZWSDJxZnhYY1kwTXJxN0ZWSC9MN1d4WXN5b0h2NkRKQnJDQzZ6b0xxdnhRQnJSL3BMaFMyZnFIeXBkdkx5aEhuRDc4SXNqcmF5Wkx5djlVcHVKT2M5M3UwTW5kTjNBOUlPNmV6ZndTVGU4cjF4Vng4bkxFSXJoRW9mQ3hzb1RkdXhDOHU1R3hMNjhvQi9vTXMzZTMyd1dLTTZDUG10ZmdDQXRtVnhkVW9CLzc1YUwwcFo1ZFJnK3hsRERDaVFCU2txRG9OU2dBMTkrbi9LbXpMK1FYbjBXckYrVEFLSWsvYVRuN2hMeWwyc2JBSUY2SjErd2JvMHpmSjgvOHlTZk1sUHpwb05mREtVQVhoSzdIa0Y0VEZSbXhsQWQwRjhrdE5ubVVqMGpJbWthK3lCT041ckVoUFEyZDhMYS9QbzFHSFVCZDc1aUhmQ0E5NFE1dkIraldFUy9IQUg0OWdrc1VZejM1UFRxUVR4UFFIcklVZ2hlWm43ZHZlNHlFMlhSMThyVDhmRVpnY3B4NTlic2JWRFhwUlNKSUFGTDcyNkxRMnlDVlByRFdLREFLdmZyMXhWMkdiWDNJR3RmdDJ3Tnkzam9Jd1A4YmZYZ2hucld5bzFlSTBTeFFDM2FWakFQNGw3dE40Nlg0RW1od3Y2OFk1bTRpVXpha2VxUEMrUDhaZFc0U0pCMGJxRHlEM05xb3NDK2ZZOUlCeWNYUFJLSHJJMk55MWZSaGNPd0Z1WXNML3VUZ2xLK1RTTWFvRGZCdFlHSUp0YjFyQ2wvNmwxVFE5bkVoR1pwQy9KTlNJd2lPTVpLV3ZwOS9BR1k2b3pOSFo1V0pZQ1JtVHYxeExJWTZBRXpiNHpGbzJCOEhFZmV3NGFJOTRHU09mNWhaWmhrVWlySklMMmdpc0FCMmIyOWRWeGhQQTBxTHU0NlNWcVVSTk9obUZJMnZvM2dtUFlURlNtSGNTUndYdVl5dTV3QWkzZDduS1o2Y1FUNjQ2SElKa1BJM09zWkRmYWQ3WkFLZDcyZ3N0TVVxRUY4OWNGM0NCdzEvVGgwbGhUdEZxdG56eFlzRmpaQjdKT2tSbkJNZTFNUUQwVDUxc2RIOEhSMVYxbVRuVVRxejlYaGlRV0Izd0xtWnc5UUFlOVhlbUNFSllnMGI4NE5wOTRseUdEQzBJRzdPcVVHdGFseE1HL214WHZqbjZoVVRyVjVvWGdvdk9rOUZUa0tEZEVPZnlHemJ1dHcwNVRBUlVKbmduTmNYZDZQNkVnNHB3NkNsNDNiKzNMaFpLWnhSZno2Q2drSnBhQlYrSldBTTAvWHZDZzBzdE80UitmYm90NGUvL0NGU1o1UUxXVVBWR2o5YTN2Y21SQk1LcnhEdnBxUWRmNStPN3RTbTdIODl5OWtHenduUzBxVWQ2aDNTM3hiZDIyckpGWXpNS1QyQmVCQXBabCtQR3dxcVVTN012Vk0waEdwbHdqT2JLaHhmeXhDaGNrcGVqd3lMank1cy9HTGJUdGJDRjJxdm1PZVRZcXRsYmdpWVpZbkZzaFlsb2kyUWx3YVk3ZWlXTjRxUzF5ZVN2SlVldWgwNzBuNUFZbUdlYVRtOG1EQ3g1T2lLd1ByQzBMN2pEcVN6UHpSeXVjS1Q3cjJTNDRVNld1bEdnWlF2OG9ERDljTlFWMDI0aUR3ZElSdHp1UlZlNUdrSGdFNGRRdUxVenlaVXh6SEZJdHNBOGtYbEZVTTJNREhjYTRIekNycVdwaHo3U2F5TFR6Uk43L2dhQnV6ako0UmhMRzEva2NUOU1tY0lMQ21CZUZNeEtMek5qTDhlQTZEL2NtN1dGSlZpK1V5ZlpqVTF5M1lVcXhUMUsvZVBVK0UxTFZWbHU3VnAzZWxEVWViamI5TDhXSDJXQk1BSVNCT0RMOXVUZWRFWVlzVGVYMGViRS92QklSUXQ3OHZYd0pSZ1JlbytUYzl6YkYzL2RveFV2VUpJNXBPb3ZablY2bkZ0OXBYeEtrZmxEWndGSUllSTlBUEJyNlE1c2QvdElBcFh1cXRpQ1dVNWZXdUtFdjROS2puRnRSZ285akFMUDRwR0YzUUkrVXV1TkE0RUloQzJGSWV1eDkrNjRnTTZwZW9nVU45Mmw5R0FBK1F6dWo2TE55MmhjdmtmSTFMa1lOTk5MaFdUS01xTU9qRENIR0QwYlNycE9JbzhVeE1kYzdvd2l3YkE0bVF0M0NtSy8xd1cvdUFiRG8rWkxSSEliaktYUmk4bEIrU3htMUNteTNrSXEvUlJ3WmJIaVZkNzM2aldldjdMT2VSaGNnOHQyYWRrc2xnUWp4YXN4by9WNUNoa2hzVXJJby9vcVBIYmN5TjZEb2ZWWUg2NmlXdHRVZ1F1OFNWL2lkSzlHelV4N1l0Mk5OSHoyc1lsNDUxcjVZUzZKekZzTnFHcmduaUs4U1ViZVNwaG9XeFJCVDJiV2tlSDZaZ2pKUElncWRxRnFJWkluUytjc05pR1dXVEhXYTBYQko3cW0vRVRROFNpbFZ0V3gxNWFLTFg2TzNVWUNVdzg0Q2I3S0lLYi9QSThxaUlTR2MyRTFlRFpGZ2k1VlhlUkxxdURESEkzZWpCWnZrRGhDZHVJWGhaSzY5ckhMaTA1ZXhXZEhwRjByRzNjKzZpSTA4b2tuZGNpTzhHSnRZRFlZbkRZaVpHbjBDOUo5a0thVzVsV0FMSDBNMDNmRXM0TVluL1VmWWVNQVRrSkVkSmhWb2RaY0dJRmRFSFJKU05uak84VC9yV05EOHFUUHFpQWJ6QnR6R2ZjRHdxR3hQeThnK3JVaTMzT1hjVlBzdXQ2NkRWWlRHM2VkVGYwU0ordmF1RFpVNzAycjlwNXBnZms3cFYwVnlXZFJWSFh0V3ZYYUlkdmIwV1NZdzFmS0lWT3lKM3FjUWxVMXoyS3dsRENCZ3VDTlh0RDFsT0NIaEVaOHpYQlMwL0EzT1M5eVZyZ3F0RVR5QU5hM3N6WS92Y3pYcE9XaFpTajh5SU1MbE9hRzQ4eXcyV0NSVkdXc3hYYTJwYis4QXZHcDBWYjdGQlN5UWp3ZlE3SHJnTkdvdXM2WG5BZWJmcVpkd3JwUnZuM2IvYWJObXYvWkNNMnVDZlhyemxMUVpYQ3NaM3N5anVXSklQeUN4UGJma3k2eEJiNVZoYWUzSGkxcDUvbVc0NGlQdmxIMzIvTDFib2ZNQ1VkNlFCY3ZWeVphdmtZRFJXd1RLbldoUnlscU0yb2p1S0p1TnV3UjlVbFhkZXdKSHpubmhHb2NtbXlCNDhkTEN0Wm9COFd4bCtDV3BWMmIvbGMxQjQ0cnNleWdzMnpyclVBVnhSOWsyLzdkejFTRUhia3Y0SlFvNHVwMlJzNnl1d3pDemFwNTZHVkZCZFV2VE5MS0M2eUdIQVhnV29vTC9vR1o5eGJvUTJDWGFsaUdoNHYrR3pDa3U5RU8xVjJ6a1JMT1h2a3lENUw1SEhjVm4zc0JIVHREN0Z3UjBrbXczdlZTVVRBWldxazlWdzhYUFN4WU05N1g5SzBNNlhBSUlrZk9hdzZvbXM1eldsZ2FMOXRBdDhqb0JTR3BRMWdzWGp5YWlPdjJ2YUl2bjdRbXFyajRJRm5GSWlmOURxUXZlNnZHOHNhdWRNUWcyYnJISVVnSWhXaU5ZSHlrVkJLbnh0T0lMelJKN2ZPMmI2OHExK0FCalp4alpVdU1QbVgvcFRZa211Nmc3TUhiSWdiRUZNN3NYMHdsZG1lYmlSMWVpRHVuODNtRGNDdjY5N005R3BQOUh6RlVvR2pqRDZUSWFKMGRTdHJmOTVpVFZjNVlrOGRtS29RMUlPbkI1eXExTVlwaVZmMDNjb2d5amtKUHhWMjZYOHJiWlplVS96Wm1hVGM5NGwwVWo0dUd1dDZJUzQyZHcwUm0wSi9uV2c0aFo4VUxVWXdFNkQ1SE9YSEdtQWRZVjYwQWpHdlI0RnNML2Rsckg2bWhyZFRPQWEzR2hibHFIV2RpcXhsVzVGakhlbjc4Rmsyb043S0ZDRk9jdWM2L25BWTM3eVFUKzZQN3FIazNobk1PaVFOemNzQVN0ZWovcEZTcVd6ZDFTYk9JNGg1Wjl5YzRhOEwrT29Gb2ptQXpiTE9Vb2tFVUkxQmp3UVVsQm5vR29wQU8vYWpXMiszdEZoUEUwbmRsSDJWYjVJUENzaXlWdU4yNWhrbkQzWldzaEFscTJGUE1vY2IxSkU3YmFlTEd0K1VtTDBHeUVXY2dnT2pPclpVeno2dnlwTUJ3YUFzQ2pVMXZlNTUvblNoRXhtdlFZblVrcG9ybEF0WWIxSFZqQ3c2TXRISGR3a3Ryd1VzZ2U1MXZERGkwNmxLUWRIMFZ4bVdacjVKS2lmSUlEUEJJcjdML0d1SGc0MFpjMHBqbFhFSmN6WFA2NnpodUxKZkF4anNPQ0VhYTRRdGZmV2FqSXRiTFcwaUxEMThhOFFEMWRHdmNyTlQ5ck9VR3c1amRGbTgvdXNid203K055SFhEOTB2ZVVZVWNTVU9wdjJVWXRwc0U3SlIwMm9iajg2TWhGd0lvL3ZoaDMyNDFFK1V0cUpjbGd3YTlJcERxYmUyV0FLMTNraXVHQWdQMzlmSHMwWGd0M2cycDQxdGRQaXJweXJrSnliQk9RTFZzMytFSExmN1RJNEp4S1NPUFJZZnlja3JXeUNmbS9icERGemxTN2E4WEFjMHd6OVpqWDQ1Tjd5U0VnSVdLUkJYQXEwMWUvWUd0MC85WW9yTGVlempKQnRTQ3Brd2xqOWVCRzNuZnc3b0IxN3RPUFFpaUhLaExSMS80UmVnRTZJdWtFMkJTelY3cEw3MVRvV2JqTS9PeG1nT3VXclY3NzAzcE04VDNiNkRZQ3Frd0VSbTFxaWwzVGxDY1BjTFhSeU81ai95Nmkvc1Q2OURHdTN2M1FyekR4WDRDd0c2TzNoNjI2MTNJSTVDeFNuemFQOHFCZkxwNEhwaHgyTDVDbituKzdTeDBVLy9idUZIeEFJQkE1QlBSRGVtV3J6d0lnYzJQSjQvUlk5UC8zMnN2eGtCbzF4RVNGS1liV3FkRzFxc3EySVhVZFAzTnBNQXp1bzN0ZWZncEVvL2FXaXhyL2J6Tk5HdFJQSDdteTJsZTE1alJLTDErRG8wVXNQTEg1ZWRnTVcwNUJOOHpNYXMzeW9UaTBOVm96VzE3WStCVGRFMC9VZEVEZDIvM055Y3dnTWwzKzA3WGJ1MXNSOFZtS1JqcWpHMUxsNzRLUW9HVVlQa0ZvQ2tWSDlaTDFlVnZldjhvWnQvMkZ6eXZaOFFmOW94bkRLc0MvSVhtelBTS0lycTc4eGcxbFcvUFhPU2IwdzhkRytOa2VBcXl1TWdEKzlGUi9OU2RPVVN4UEtVUG1LZ1VPVXlrTkI2TXlJVFQyeHVXOEVDZG80WmMyVjc0WGJkcDFsZGUxYmpHellrSGJhZ1lxTUpCYnZQZzhhc2x1Z2Q4RnNxblV4cTdveDNGK0lRcXY1VkpSTno2RVBqS1RIQUlhc01YZnN6U2pySzE5cWxGcnNpaFFRQUl6bzJPS0p1Z0hRTTN2ejlOWWdJdWFNeFZNbFNaR0xhcGk5YzkvS0tuclg5Q1hIMEp4ZldXMkJSdEdHcndsSEdTd29keW8vTmMzMEFDdFV0L05jakNIMThCREo1eStCTmdNdGREZnhoYlF2cFBseS9NbW02RE1mdnRleDBySjJpZHlaM2NZRy9YMG1zaUtmWVhaOW9ENldwQTkvZmV0cDcwYkw3K1hrUVVVQXRBYjNHMlFFeWc1NW9TaUVYdVdsWnNUdEF5LzdYUTJGQ3JETDhTWjUwbC95WkxaUjJDMGFMVHJNRmYxSU5pZ1NsTy9GRVkrU3BaYkN3N3hDQjBHTWxBVGFCOXRldmhKS3hRWTc3eVRjbW50VU91eFlWRzhQT24xcXgyWHBxZi9SNitRNEJ3NTE4anFlVExkWTNpb1dOZHR1MTlSbW5mRGc4eFkyWDhZOXcwdEIyQ0JWaVgwb2ZSbXljbXlDVmRScXhEQ08yNTlhYUFQRjBUTGk1L3dQYldjMXZscm94WWRUdUVrSG9YVEEwVWdLNy9wTFZPLzZsUGMydGxpTnpwS3UxY2czZTF3MkJCVXk4TTdjVUk1M0V2cHVEdER0U3dKVVhaaTVya0pzYmk5cTZseEVqSjdVSXNQcTVlWU0rNXJCU2VOM3gzVWI5RDFkZjU3a3F0SFdaa1lNeWVadzlDSGdMVSt5WXhEc01vZENLOG1qN1F1S1ltS0hQNTZCMEE2cjcxZGl5a3Irb0grcWY4bnhTUXFYNEZTKzV2QjJvR056V0NhZjhSVkZNcnd5OVIyMTgwdTRqUHJqSVdIRHVoQzhyZlllZG1nNzNyV3A4OXI0VEdoeVUvM0NPUUhVamdtdGMvM1FJVklTK3ZzQ3FmU2c2WEJLOElBQnpVUG85RXk4R1c1a3lwcDd4NnR4dTB3SzdNdXBoMWlLV3N4YmNTZFVkNjRMT3U0ZzhMNXF1R1lPQU94MWVtWGVEcExMM09JYnZ5WmVhMEhtTmI0Sy9ldUtEUzNzODVEQnJ5cE53M0tpZkVidE1tTUh5QlRhU0RlajRqNExYU0xRVG1KZ2tDcTAvSFMweHFLMGJlY3Q2aGtzQjMvV2NUbzhZMngvcmprSEE2dXgyOTQxTHBpMnRicXZQdEwyYW5UY0wyc2ZPL1NEOWdFMjY2Z0xyajBlTmpxZzFWdng0OUZVdHBRc3ptRm5RbVdOU0syVWpXZ3JhTjYyK1E0WENsMmpadTQ4UXQ5VnZaN1RDUytGM2RTcEVBekdndVVWRGw4T0hNTmNuckc5cHJUZ1ZiMWRKZDh6YmlXZlltdEdpMHhvYmFmZ1VVVm9WUnBvdDdURXduam5RN3dGNGhzL21pOTBaVktrWnNsbTJPbzJ6U1NoaFpwZDE3N1lsdGJQK0J2Q0RZdmFqTG1iV1h5UnhQaFBDQi95WGwySWJyeCsrekllMkw0bDU5OStFcmF1cjVtckFIZTNUWFYzY1BickYxZnVUSURIdzRvelZOR09RS3JvNUlGU05WaS9HQnhyWDZpYThBNXpuMjJkVU1QNklhY3k4ZG85K1VCckoxMzRoK0t2ZTBhd2NydE1VWVlkbURORGMrcEpveTBSNk1MTnI1VTJYS2k0dG1IU3lsZFhtcUpKa21xdllyZ0tqUEkvVW16d1B0Ry91cEFocnBJUFhzRDZmNUdaNXB2SXZFSUJaclRZMjVNcWlaOGVlNEtTWjhDV2lXdDQwMm9jdmlRc3JaMFhOUWU5MEFCM2FNdExmZ004c0o5NmI5WmREQ2ttd0ErVjF0VDhhUTFYWkFhVVFtUWw4ODI1VjJqTUwwQWZSVkNjTXZSTFZpK2x1MjEwd2lwQ2VLcUJDaEpQYVVpS2xZeEtSNytXTWRqSHp1eGNoVEtoZWpxN29rMTU0c2JlM21yVGsreEFEY3NoTDZJNnF5dFdqYVJ0d2RpaG5PS3ptVFZ6enVJNUhtemN0dURpVitvQkprbUZlMEtQVWtmQXVWOVlBVHdDK3RscU1BY2J1OCtxZFRzeHpYTisrYlhvNHY5WkdZQ2FQeUc4Nm01S3pkek0xdHRIcUxUOTd5b0xicEhlUTd5a3Y3ZWVaRGhoVkhiSGdqY2hMS085em43eU5rUWlPdkZ1OXdTSWg0TVQ1RU5rU0VjZUw0cEJPOWxnKzhnRnQ0VnVKWTh3QXd1SkhXUms1SnpDbFNQWmxXTzlBWjRndVYzSm01Zkl2YWtTdkhUV3hldGtWbldLSm1PT295YTZpVXVYNXhtYWFoVkJSTEQ1R3o5eWRhaGFoandsbVJnSnl1OXRKZWdWUHFvbThRWUF0aDJLK2Q0U0h3TWtubitvNlY5eDhWblFDMk9QejdGOURENHpKMmRNQjVUeTdwRVNEMDM1UVdPNnZZTmkzS251eis4VDBvNHJKUDFJakZmbGFucTFTY0dhWERrRjRKTjREbC83Z1JiZW1oRGlDSnY4MUNDSzVhSG9GUWY2OG9pRGZhaklvQ3R1b0RhU0huL25HUlUxM29XNE1xZDkvamJ1OVhJOEJoYmJzdE5mT1hiQmxzb0RjSmNGZTFPMDRSZnZQeHVmZlpMZ1JMZE9OTU1jZlF2R25BbjJGMzZGNm5ISmI5NXV0Z2NnRStzaDlNVEJnRUhvZDRkSVB3VlZ0OWpUeC9xMmlOWVdyNmpGNWlKYWlhdHJZb1FycmNybnVyODJ6SGo5UUpmdS9Fb053MWdqRWNld1djSU5JcUpqZzlieXRNZC9wVnhHNUNuMnJSUnJEVHRCSTBTWHphQW1EZUxHMlZ1RFRzejE4NldiSGRVR2xXNG9meUErbkUwNmlsQ2VYTFJHbllraFRHOUpLcjZPZ1AvYmFwWWNtallnT2FFZnJGSHJRYjFORlUrOUF2RlNOeXdTSUNvVzRHQyttTHY1UU4xbFA0MjhONVk1bVFKUXFhaUo3UmU2SThPU01WU283MUExVXhqaitvdjhnZ1VtS2RQNnZFeDNkRk1NdVl5cHhXMUFZQno1SGVId2hOaVFmMHR0SUhLS2ZOSkxpckN4dkRqdzNEWnRGTW5pWVJ6T0o5NUw4MWhBc0VaREdNZ1RZQ1d0eXRKZ3JMZHJIZ0JzY3ovQ0NmVk16eG9VU1F2ekRQb000SDVTdWVSVjBoUGI4ZWU4bzJobjA0VVBLTE9Oc0pHdEpHTW1jcldPRXZkTzBtQVFVREdIYkNndWVZTXFQWHFIN25iRFA3c3hoMHcrU0V2RVVNT0c1MDVGSzdLUmVSNWhlaE9BSEFsUnBtR3ZVd1MyUGk4T21yaUNIN3hJTTNkMjQwOUdGemxYRmtpaDB3M2RqUW1QT0Vma3J4ajBJMFZzZWd2bllYek9sc200UHJyeW14SUJZSWFvbVI5NS9pRGZQWGt0NXhxeHFOeTZSL1dVRTFKV2NIN21OOWJ2V3pkeWp4OC9QODZsbkIzbm5kRFljaGlZVC9wWmhaQmJRL1lLTTM1T1UzUkdJNVFDNmY1MFZkMFVOSTBybjkzRkhJRTROdU5FY3k3bFZzcVk5dlk5WTdyaDBhOXZOZjNGaFNpWWlGQ0ZaMlVqVlFUZFd1ckRmSkwwL1oxUjFvbEJXcVJEOU1IZEJ5VXdjWE8zdHUxSENwWU1XQmd4U2tmRXM0Wk1SSmg5T3lNeVdCVHRWVHlYaERpbm9qWU5nenpTc2xBQkhQWmJIQ0JEcEVFaWxuMHJveEppR1E5NVphelp3alNBZEdVL3lSQU1kdS9zL2dZSFlGcVdEbmRES1IrUUVhaGFDUVRvaEt1NTNWN0hwMmtmdkhSU3NQam5QTkFBWlREWVlOSnRISXBNaUVqWjVoN3hhL0ZvL1o2dWNnSnVOc0tSdEQwUXBQRE5abGNyL1huZGMvZ21qcFN3Vi9NR2o4VkJFTVpYb0NLSllnTDQxd2JGM2FKN0VHK2hmUGowaUlyeXpSZDFlVjhRMmsybFRWeUYwY2hGWkV3YnptWHNtMHViWi9RRjkrU1JKZlkxQmt0clRGKzl5dmtmS3pESE9vcFNsNFZVM2ZWbzZsbVZudXNQdGRyRmNnN3NWa3hIeWMvU3NMbzJxUElCZm5HWnpnWHMvSTRwV0YraWVNWmFIVUhFZUJwd2xiZEl1cXorNHFDWU1aR2N3OHFWeXRFbzFmT1RQZ1hWelc1NHJoeWd5RVl2WWhMbVlIU1lxNi9QRFhpZGtDQy9TRHRCbHVvYzR1dEh0R3YxSmFaYnhjVTlKejZSMUUrRzg3UnNhTUZreFhJUFg3L01CbTF0YW10c2FxVG9zMnBMOWttT2pIQXV3L0pIL1Fqc0pmRmRWWDJnYnV2WFdkbEZWclRpUGswSkVlQWtHYnlHTm1YMm5YMm4rZ0Zvb1hhL2FhVnNTQmxmL0paZlptdXVPemRrbGxBSDVpYisrNXcyWnQ0cVNWRHMveWRoa1lVOEVmVGl4aFNqaFJyVVhjcHB0bVROMFBkbWJmQTE4RG11cTBkS2l3enM4TG1wL3k2WGNicnJqZTY4eHFybFBuRTJaRW5jMndsRS9MUUErc1EwcDlVZXhQN2lrSUF0SmtYRHJyTjE3dnljbnQrZEFSY053VWQvenFTVXZtWmpnMDBLQjQzNEJCS1J4NVE2anpTTnBobG9ja2p3bDJyUDNCYlhRZWxRcmljUFpOd3d5Zno5L1dIN1M5dzAxQllIckk3Ym16M1VPUGVjWUpyeXRTT2R2RTJjYlo4aTJ2VjROYjIzT2c0eVZMTGM4VHVGSXhaeGJ5MWpGK2E1NnJzdVpIRlFxUGs1Smw2bWlyWXU5ZVM3YXdJayt3TG53YW4raWI1dzFzUFFaL3FQSFdSdk16bk0wUHVoa3ZuK3laWW4yc3dZaVJRMGJMcUtUUlBZRGVVdzEyMjRPOFg3MEJHTkJMVGhxN043Tjk2cVp1SXBTa2F1UjJTRmJPNitEZ2t3N2hhZXI2QW93bzdhYkFDMUlmeUhBZ1hNMFJtdW9QREw5S0QrSlZab00vbUQyQnZ0SlptelEyOGI0eThmejdYV2ZrRXZMa2gxb3JCMVM0ZWQ4ZXhpVjFPenErc1JJcUhCRml3MEdqZ2tiaTV0OUY3d3BEZmZ4VWVHRGt1VnVaaXBXTGh6Z3A1L09yejlCNmpKYXJiQU1sa0lZZnduWWdnWXdOSldpMjNoWFJ5ZzZlRUs1VjhqZFFIR2VzaE5TRkg1azJMQ1FlQ2pwRm5kQWc4YVBwdkVKaW1lMDR0SElIamdCaVlITnhPZXFQRlMvWDFLSnJqOTc0aWhHM21Ec0V3RitVbnFKdHFsTStLTHF1bjZabmVjU2ExeEJ5dUJHRlBOUllFTHhpdlRvbzdEVkY4cTBTYnFUMXlFaFhMd1JqLzZuNTliOXdBYjJzWEh4ZWhsR003Vk1QZUhmcGZVUjgvU2NJSk10OCt6NmRPWjBaamtOOW9YN0c3amNnaGlEV28veGIweWNZUnFNOTMzQXBYYVVkbUxQcWIzeURBbktFMCtQRngyTjJoYk9KTTNNc0hZRXlkUEVXZ2tjLzF5ZCt0NHZjQW5TNjgyZXJId2Y2RUEveGUvSW1KZFNSVjZaZVNRK0RoemtiRDlEdU80K0VaNDByK1RLZHFldVRzMENhd1A3NmhybDBiYWk5bm5WcWs3UU9ZZmJ3Y1RlVHIvWXUwVjZrQkUzbEhyRnM0K2ZGeG0rT2VFNURtbStTcXBIdFVxZEEyU3hIbjlYWVBJS2hNYW00L21ZcGIyc3VUTHVvTWtGcXBKb3R4TjZlME5xYlQyNGZKRnVLeVVpUkU0eWFzMHpJcFVrUGtNUUVpbVhZeFRIUCtZYUxGcGo3b2J2TFpMVnBUNlFaY1NsUkgyNEtDUUg3Y3dPcWU1SVBCa2tzZjhQL1RLdjQyZm9YMS9NcHN0SUZjMGI5MkpOZytPNVZ3ZTB0QlBpd0YwV0hweWcwdk1HWnVpcjBvckV3b1VHUWkxaG5PU3ltYm1hZ1hDSjlOMlB0UDYwWWdsbXMrZmFORlhacnlkMGdWRDlNeUtlSklDejB6TXY1RmhhUXIyTjdzcFN0ZDRyS1F3cEdscCtkLzMxT1crMXdzb3h6ZEZHMlFwK3M5OHlUbTF5ZTlmS2xjdmVwWjVTaDlmR1JsS2NVamdwY0VDZlZzTmxNZTJBUmZGU0JQVWg4SkZ5c2xJUmF2bmdaa3FkV2F1SHRnOHZIcFdybTAzSjBYcVhZeUx3MTQzRmJkcDdNSENmSUE5SGMrUU11SXZaeFRUNmFrWW5wRUJSeGZIdHZFZXZkZUI4QldJL3pZK0Z2TDRRSnFGNjBIVW45ZkxXQSthb203R1JoVHR5VHByd1A4c0xBNTZ4dktyaXRGajdUYVlpSCtzelVwcW1PcmxkYVo2REZaVStWZzREUDcxRjAvSEI1bVMvdytuMDhEY1V0ejI4eUJZbTJFNXZKbUtkbXgzRU1DcE50UVlvMnJzczIyV1lZdEFhd016eDBjRFZ1Z20vdFUxSmx4SC9ia0lUMTl6TTR2bEhra1FwcXlESUUxWHZCK1B6ZjlyV3VoQ2J0TnVkNUpmcm5RNUFzQjNGSlNON3BmaUxjWitidnQ1eUxJaTQxZUN4L2hIMGVWSkwrTTdXMC9hT0JBbHBpY3JsQytSNS9aYlBhdTdWKzBSbmlXSEJrU2V4N3pDWkFvbktoZ1RMbVhsUmZpNmdPMUZFZG9mVE9oVG5qNUFqMXN6SExFdjRIU1RwS2VoWGpmRWRGZ2kzRXorNjg5bDF5TWdIV3lGaGgvQkxWaFVsdzJHZ2tRRlNsQ05LbVBmOW9NMUhEZjRjajdKWFFCdVRTaVIrQjBBUTgzTFJPVGs2aThRRWRkL2JBVXFDREJzOHJqZ1hsNnlOOEtQN0JQaG9HVUNhVDl1UnhLNU5xZGVoQk0xaFJ6VEt5MHlCeHZ6czNDRWZHK2srWHVJNHNXeGREalZBVDNIV1FybExwTGZiNDFlZmdESEswNmxQWDVmOFJIc0tqMzRhdlZ5K0JjV2swNVJxWGJXS240Q0FnSURubjFRQTBkcDhiZ1VoeGxTeUFHNHBMb3JNOHRPSlQ3K0l6OVNsQXhFSGFRWk1mMElWVFNhOGNKanJvb0tuUDFZc2tsbVNjcmdVdEpwc1ZwUTVTV2FvV080bnFvV1lFK2ZzWFJzaEJpQ1dPT0JrODJrSm1hSzBHTVozUDNiRTJQVFAxQzIvRDNJNCsxcVBOT2hNTnExOFFxc3FDcy9hZHp0emZwdzNGd1NBSzhjMHdXRHhUbE84Mld1NThUdmpYc2lpdjJmVXVhQjNJcUJ0akVvcjZqRTNqZDlGUGtHdmR3WmN0Tm5ISGozK0RBSkRoOERFemJFUGh3YUV2VVdrYUNaTXlvaW5tVWN5Wkd2WG55U09rSHBURUZpK2lzY0tHQ0dRdmd0djdTMDVEWXlVbVBPVFVZWGxVVnRNUFE4QVBLekxDMGdPdllIbzlFdDROUGZiYXo3MDJkazNZWno5YnNwVkVqbXkyOVRvTDRLSHJ1Zm0zZElKK2NlWkNpL2ZLSEZWdC84R1crQUZPekJ0YVdYQTJHYiszWlFJRTd1QzNIYUp2b3AvNE9PcWk5a2xxcEpCRXR4enVCU1k1eUxCVEJYelB2MXpobm5vQnUxQWhVNGU1ZmtBbWgwQk9jNFppa3dSTkZMeEhsZTNjdUZEc0NJUXpxcWVnWCtYcXpFTzlXNUVadytjREUvZ05rM3FGclpnY0h4dCt4RzFwdmdRZThlejQzWEV3MkZkWlkxVlpRaGMyS2owSm1TUU5KY1Y5WDV0Z1BnQXY0cFVQdW40NkhFQUJXT2p3ZTFJRGRoYjExN2NoUHg4MEhVYnBWTTRHUlFqOGY5S3JENGNVM2xjZGFTSzRubzR5a1pNRnp1eVFqWHRLTTdVWk01d2tJRkZxU1hWTSsxMVFoa2x0eWJXOEdDQTVONFRrNVg5U3RuWmhNMjN2ZWF2aHpYTXdGeWtkNzlYanBEeGNNeE9sVjA0SEdNUktQNUJCUDRzczVrTHorNUJZM2ZISkxlOEl5VnJOQ1pXc21HZUgwMy9YVFpPU1M0Sno5cURpS3ArRHpWd2VGQ3JkTURLVkZWOGZ0UWptQnBBUFY4UnovSmZoOHBVYnMvTFBoeGpxNU5aMXFkVXpVMmdvVHkxZDFlc3pFSjBZWlZPR1BzeXFHZW4rY2hvWnpsbVNWWTNJMXpuMDd6VFk1UXZFdWVYNEx0QXVaS1F1cFBzaExoWFlxeHRyMDhSbEpDT0Z1ZHg0MWcxMEVJOThsRmw3Vy8xU1UrMmhRWGZLOGl0STZnSGxTb0tRVGpoZ1E3Njh1WHVVMmhJYXhsUmg0ZHNxVzBrK01Ld0t5SU8zbDZWMTJRaGpEVXhKWmh1S0N2cVVYMFgyNTBYdm05N0p6L3lrYkNzYjFIVkpTQnk0a3pPZzZYOGRMKzYwQ29odXlPMFlqazBweFdBbFh6RE5QRS9jYlBQb2NIeU83SjJiaFYrTUpTYjVmb1doczcxZ3pRbHRxKzF1cW9FVTZYRE1MMllXRk8yS0VEN1laZGorTDlNREt5LzZGYnFlcVZjcmtBNGZpL0hQaW5FR0d1TTBER1EwamR1QzloYURZSHN0d2ljSzhocHozdXFvSFZXUDVvZzdMVzU3VGxnYWtvUDZJeVNqV011a3hmK3Z6M2NWczJiVnR2dGFTVXplRjNmSFhxMHNSYVNNTWp4VHNLdVNJT044VUtsMjBzYzB4RnJrNW56NlYwbENSTmVSNnBPV3lvcS9ZQUdDbUpsc21hZUZWaFhjR2dwaG1xblY1UFRCMVBkSGVUcHNuYnNtZkNqcVlIOFlvU3dod2ZNbGVTVUhXZzJYTWpIV2JaS281R003L0MrVEpzU2FscVNGd2FEZ0hGVjZlUlh1ZDBzM1hOS3ZOUFp0QzVPQi9GczBIOUVZMlpEZ29BZUFnWlZVTGdpTktJYzNFenRYNWVmSTliUTVEV0hPMDBkVmxFaE1IWFVRcDJKSmhGaGc3ZDl2M2UwUlRoRENpUU11Q1pUY1pGQWZHSGdZaGRyd0UxRnEzNk5wOTIwVU5NTkZmU1dNUzVBQUpoRFlDU2dRWUxhVzFzM2RiZHNJWXd6dWU5SFJnb0M1dzYxcVVUdE9tb3VrYlc3K2VFbDdzSDdWR0dhOTNoOUg5Tjk0ZlVZTS9FT2p3cHlyZUhBRlFoS1pISFAzc3FoSDIvVXlDMm8vZnhsYndPelR3K2JrMTIrYysrSVZObFBldjZmZHdjV2dxZllQWWdWMEFySTR6MW96Q29HWTloMVVHT2wvNEpLeXg4Qy9tV3laK1JMUmQ2UGZMTEMwcmNMbE02RkFWcUVlM1g0ZFdkcm9xaHBNQWdYZWlaSVoxTzBESUk0WjZmVDdKb1haVkNCbUxRbGhUWW1abE9JMnliSDRhRGptbGVKZEJmMGgwM252aVFWcWUydExyaTNuTlEyZnIrY1VDZnNYL3lNaU90dHFCSk0wWTRpWEV6MjZxKzJoTVh4MDRpbDBDVmw3TFpZWVp3Nk5TWlp5clVJVGtscTA3MGdBSnNjV204VFZrWW04VXZLSmEvenRCVTl2ZXgvNjlkK094WTAxaGcxbExjaHF3NVRqbEdyRUJxV3NHbjVRdVVPTDFSZDVYR2RZSnJ4NmRVV3NwVDB0L3RtYnkxZ3pwaE81TkdrdzBDcjBNeDVzVm5wK2toVDlBUW52MWkrSXp0bkxzS2x6eUZjYWpha0FnbkhncFlocXhlSGFodXorSEpKQnlsNVRYd2l4czdpSGxJbDk2aVlYbVhlakFONlB4SmpicWczZU11b0RVakkyT3IxV1N5RmRqWk9Ta1VoREJHSUZ6M1k1ZzZvYnJiY0N3Yk5OcmhuNzFzakZOWHdWYjFZMnk4ZWVsRzZFTFIvT3RSZ0d6OFNLeTg5N0l1dEVOTksvbXFtWWNPWW10WU5ZUHE0NzVZa0xIK1ZNSjl4VmlCMTJ2VnoyVVBkU0QrYW9qenBTM0tLZjhpYS9JMTdVTFY2OTVIcUdZZjFFRFlrSHJXQnh6S3R5SFluMGlaNDRVTUd5cm9GYzQ1RWNKUnRNQkY4M0duTlkxc0tXc1JOUm9NaTk4cnI5em9sK0ViTThtNWNodGpFMTBrd1RJallZbUdsTTZ3LzlWS3JqWnhlcERKcXNrTmJXMURtRnI1ek9pNkdHR0s0V1pKYzdnNkZ4MmZGTFh4WTFBMllkZGNnZWFoYjMxdWVOUDNNT2M0eGRFMjFOMmw0WHg1YmVhb2E5ZnJrK2VHWnh0OXNWZWluL0JUQ0s2M0cwZTRzaUJhUXZkcDNpNk9kNWVjQTJadnZnWHJ3MmdpejA2N2xqd3N1ajhmeWRTcmxiZTFlZzZDTkxsdG1IUTBnQlJpYTVUQnRpdXlEb1RzS2plV0x0UmY5eDBvNVJDeWJ6ZU9RK0FmdHB4WUEvMXpTL1JGVnZpeVJaY2ttbTNRaVpVSE4xR0xqaW5Jb0FWMlg2TWlnMGVkR1h5YjRWRU1VUG1rSTBsVjZDNy9BWk5EbEVrUGJCblBzTE9zR09pblhFT3VqN2hhQ3BLeUNHRHR2cURtWXB0a1YzNGVmeCtKakx2OTBRa0t2bzZrM1lCSmNBUFNMd1YzOWc5WGhld2JDVXZ5eEtIMGFNbGo1SHprSjl4UEZxTmV3TWRCVWVJc21FSkhQMzc1ZzREVkFOR2JTMjcvdVl1ODR1VWFsdC8wLzA2RUlnOUs2eWR3cCtDeGpWUWtRNU00c21Oai9LcE5TclVGdjZzN2p3YmVUcmdSdTU3ZXhsNHpCUFJFajdmY1lWYkZQamU1Yk5IT3J1Ym9IRXZxZDJ1aU1ocm0zaW12aGVnT1FaWE53K0FwWXBIUUMrN1hoNjdGZmRUZ043NVRlZ1Y3YXV0bmpxQTZLSjlxM0I4NFBtUjZjNkE5cTBpNFlCc0RPU0NjbjNLa0g0UlFOWTQ2UU5pbzdlQW5lSHVHQTd2NElKSjlhOWNvN3RDMno1dkxEblA5SlN0QkFqQXFMZGpzR3JSMTJhSGdpR0xkQmhJTHp3dmhUaEhoNDZUM1FBOFMyOGdlSXhZb1JQdGNDeEF0ZGRKeGpTbHhRMzJWdDVvMVV3NHlTYXFBTjJ5WTIwRWFwb0FVQ3BHd0lDWWNuY3pCb04zaVowN2g3WUx3dm1xTU1JRWNwU1EweDg5Mk4xeDJoQnE2bXgySTFIN1VhckRZSExGREMxLzlrYUwyalFnNDllU1RPVTNyUlpTTE5tSWNLWWlRd25FL0NzQ0Zra0tnazU5MTV6b0VkQnlreHA1NzFsakFEVThnNVhMYy8vcEdFblNPY0Rpb2F2bWlXdHJIRXJJdHJuc216Y0FqdEMrZ3RydXUzT20vL0plcTQ5Y2poWG5UaCt0T0dLc09ldWNTUkFVZ2UwRUdqK2ZxWEh1dlQ5K3AxWVZqMGd6aEpTNzZCbmhZcktpeHhuemVOaVpvdWtPalY2NUZ5L3dHZmFyb2ZUTHNnRmQxMWh5VGdpOTIybUl5RUxvS2syNXhDanNLU3hadWRpMVNJV3hhVlBuVGF1RVBLbUsvT3JFQkpYM25oSXhkR3BLTEw5WkdsaS85eUJKY1gxc2tkQ0M1TEl4UEk0NmpUY1NhM0ZqbERJMjNlbTY0cGs5dFhKM0hRcnNwMlhGbnpxeGJpaThPS2FwTVZWZTZqRkN4U0M4Zmc2NUpBeVBvMXlBUDhiVWpZKzNiL0NUWEIrd2FsUkVqR29jMHk4UXV6cDJ5VW9MdlJOUnJDcjBwcmF5YkJXTWJScmJSWXd0ekoxYm5vRGIzN0pkNmVNRUFsMlJjbGQzZmdKc3Q5MWpNbVJoS0ZOR1pkTXNWcloxMlZkVlN0aDRBTHA0d3p4ZCtFMnV6U0k1RC9BT29GS3lHUWdvSGdPVmh5YitoVGJ0aFRvS2V2c05QWE1KZ004VjcraGIrbXoxLzFsRjVyRTlnRHgyZ2dCU3ViRWtESDgrVGlyelNEN3dPMm9hTk5CV2NwQmo4OE5reVRoNzUxUFNKNWZLbDBhaXhjcXEzMmdNZDlEVnlkRDJOM1FxNXhWMnpRZ2dXTEFpdkcrNmIzbmlXZWdpa0swRi8rUkpMcGRGa0w1VmpsYXV3RHdEYXoyR2NlZlhFa085bjU1N1ZwbXl3V3AxeXVqamdrL0hOa3M0NzllRVhveFBGQVBaYVRncDRJdmRaWDBtQ2NpRVZUbFpUNFJzREJIb3VkT3I3bnAvbTVtNFdYc2tGeFRuZG9NbmFWNUkzOVpTbEh6b2ZzMlUvOEZyNnlxRyswMCtzc08rdGsrMjArbjFGSDM3ZEsrMWRBbVhvaXdCbUZBbHNNb1JsVmh2VktaV2tibUdXR0gwSW9uYVJoSDFFTjY2aEpZUEdPbTFKNzRRUTBYbmRnMXBoNGdMYXdtR2Y1VjNJUmNyM3hvWHFRelVwNC96KzlJT0Y3YnJGUzZOS0pKb3RlVzBXNjRGT0l5YWpCaWNxNEd2VUpxcTlXT1JwRkhRSnlaY3o3cUhHd0hzMEExK2JoVWZvcHBoaU1EVllldkpJY2dHZytGM2o0dVZPc2JaNnJiaER5Sm5hRE95K0p3dURTRXRQL0h5bGRmZzg0VmNjZVE2R0NMWkl6bmhPUGJVTEtnWStXOW1IbU10TTNFMHpyVVEweC9ySjBGK2JVMUl3UzZ3MXBFSWlEc05jNm9VY1UxUjB6S3JHZThYNisvbkxJejltcklhR1IxclA4eE1HOXVuazgyMVJWZUtPWkgzUmRGVGpUVlpiY0NKUnFsc3Qrb3ZOOFQwRU0vajM2d1dJM2U1TGNTWmRaU1haM1QyenFWSERGc2JXV2lBOTdwWHhhZGViZ3lkQVdGTHcrdkZTaldhN1VibTFaeFZpUzZkSlNFR1JOVkRiMWhZL0tCMFgrbnVYUmNveEZwOENucGtYUzFOdzNGb2FRM29adVpWdHo1ZXV4Y29Kei9TWmMvZHJLT0Q2Y1YzajZuY0doRkppTVJzMlQ1S3p2dE5RbzIwZTdkL2VuSm1IZ1FCNlkydmtIbEIxRFYvcWVZTFpJQzBJTDYvc0dLZG52bnZ1VFdIaVEyRUN6VkJaQkZ3VGU3UGs5VGhlZ3hZNFlNQ0w1SFFpei95T3hHTUU3TkR6S2xadlo3dW5rWDVnMVlwNTB5emQvVTJmWlF0T21vV0dFaklVSUhqRGlSaFo1bVpqYUQ3VGc5cDhYd2x4V3cyR3ZJT1N6YS95anFtWFpQUmFtbWIzZzZRWC9XeUpTV2FlWjVwQmlIZ04wTXdDeXlsMjVFY3hGZ1hsKzRHeUs3RGNrNVgwUW5yelhwYU9zb1JNb2JhNWNvQ2JneVdyaDE1RjZIcU5vSTJmNmxNYUM4OCtrZWw2cDdTd08zMTFwelRoaytrZ0xYQjBMbkliUUd5VUxIZG05dys0VmNvRXhWTlIvRm5QaFljdHQ2N0c5ck1oNnVORUV3ZVNNSlgxeFg4Wi9DK1JXdlZ6cHVDekc1SkJ1ZTlOaWs2Sjdyd3hLZVFPdTl6c2JDZVY2d2MwOTN2eWtOMHZHUzRmL0xSeGduMjhIYmJWMzRSenFyVGVHYnA5dzIwVmo0bnlaSkRIWkJpa21IZFhjalEvYW5OQXlCWkVLVUZ1VFpyZWZScTlZMXJpTXZDZkQ2OE01L0RKZlpoM1ZRRlFGbzdLSTArQlRSUnJKV0VuMm9jV2p4ZE5MMlFGdVZnK2NEdm9vWS9DdndTK0lBMEtxRDdsOHRldDRKcjZoOHFDODlncDNvdHRnaWhQUzJlVUtYWWhRU090dVREaEJNbjZVWWZMYXlZY1BPZ2FDL2sxSlRrMW5OeXhpWkRLNTBjeXI4V3AxTDVvU0ZCVllpVFFTM2ZiS3hwL1VvemNzWHBlWWxHWHRMVGdhcVcveHBZeDIyQWxnMnlGeVQzZFhjaitOMVZwVnRoM2Q5OUFxajkwaWpWS2dacWFXUE9vVmZyeUFnQjNWcGhvRUZESjVFejZoeG5veXdpMjhMZWhKeWVtY2JLVHcvTXdCN0xPUmwwMUhHN3ZKNG9YVXQyZExVejdab2wvWXhZbHl1UzlWMWt4bFpRL2lZbDdNNHJpTkRRSXc1NVRyV0IxZjZ0dGsxdGw1bkFTVjlsdHgrU2RkRVRPMVJYMndzL0ljaG94VldyYTdjRW1WNW9la3N3Z1IrOVdWNjM5VTNqZlJiMnlTWTJPNy9vTC9PbFk5N3hLbURHSVpNZWhLczNqbjFLV08vWjMyVHZXWmJPUjRHanRneGh4bUV3WENsTGloS3hKaEVSdzJVMFFVcmZyR2drcGhwbkdGWFU3czhCVUJnZXlhbHVyUlBhTEVxQjZIdHk2SWxYaGZ1ZXZmMzM1bVo4YnFTTVRLNzg2SkU3d05KS3o2aXhRWWgzQzczWEh6ME53ZE5xTFhoNGVuZE5UeUtCLzhnQ1VBL3JJbTZUVnhpUE9ySURtZXIvaGVEdFBrbUpxOFI3N0V1NGN4aCsxWkFoVmQrVG1NTVQ1WDFkTXpaQTFMOTBhWWtTRUNxWUZOR2ZrMlo1Zlp3Wk82VlJPUmRMUHNNOUtlNUxKRDhEaTBscFdpUkxuY2RsSzFUY1FkUklIVjFLYzhhZHBGZktLam5PZVMvRWIxWHdIdXJVU2RDRWg2bzl2UU9rS0hqSEFEN0NUbHRBVm05STZTczZlYVBsbjgvQ29KdjVNTGNtMUk2YTFPbm8wbHRoNFVDWVdGeXpWVEZBZGxTV1l2N1pRMVF1aFBmSlM1cE1EY1hkc05sWVRvVi95MVZKc2hmaThnNEpDWlNXbXFEZnYyKzZEQWlmWXhiZytvNEFTSUlvcGUyVGVqT2ZxaG5vNk1wbTZLZEUvQTVsbytRalNURjJkSExwaVhmbFNWRlJia0FpWDdOdUxRa1pEYnVtb3crTnA5aE82OEx6Z0RoRm91SlQ2elcrb0pRNXdsTlhqMCthYnpreE9VMHZibVZjTVd3VDk3eFlOSHdRSFFLM1F5SGJBdEh2ZzZYQzFPemlONkNaNStwQXZRNC84d3R0K0tPOW9xMjRPckpLY0xYSkpzRGRyVEczQ29HZ1FTaFNEY0NTWUh4eE9ETFFiRFJObEpsaUNwNnRKZVFGNUlvSHF3WWZubmoyUTYrNk1sUHRneDdTSWs5RmFCYUZodmkyTXplbnN1N2RsanhxUDhKbnZMRzVMSWJVclVDUHJYa0VhMTJXRS9VYXh1SHlqSDBMeHJCVkR5ZWN2UWVncmtjSnR2S01XWUhOZWl6NTZ4ZWdQZ3J3OGhJNFEyVjQ2SGt3eVV4d3pqNm41N0VGMUMvVEFzY3g1RjhhVnovaWl6eFZMYXYzU3hnS3U3dEdmTEF6b3FKbFNKQmRvZGZma1plTElYeWpEZXBZL2MzQ0dwNVFCRlN0NS9pVUhxbnl0ckJPS2hFYmdPci9kRFEzNUZRcDlKNnBuWXpGSWgrdDcyaFZHSElJeXRIazg4V2xDOEhnMmcveUZvdFFvcVpMMjB6U0JRQit6TkgvaWVDc3FJVHQ1amdTUTlNaVlJaGRHRXdjMjRHQzIyWDRVQkJ3VW5sbldNa0xUY3ZIUVRIVGZmT2wwRHRZSzN2QUFjSVFEYStYeG85MUxkMGtPVy96Rlppa054bFRFSVRVN1djL0tybHo5VHRMOExScHY5Y3IzOUhqTTBtLzh5MVF2TXAxVnVybkxnY3lsais5em11Wm13ZUNQdk55OFNlMDFFd0ZNdTc1bkFLNjIrZ2VScEVxZHAvTlRSTDQ3V2pQVHRoenNwZVJtT0R0U00zZDdiZ1RxTGpLUWM1WGsvNUdIdWRTUmlaM2VPL3habE10VXNrWDdpbmZEOEQrQ25ZVzJOU09FQTlsMVFVcjFUbWJXZGh1b0FXVEpvTjZkUFpNTU9xZ292ZDZFdG1pZ2VDV1lLY0c3bnFXbmtLWTZoZlRNYjZPTWFFakRyR1Z3T2FvZXJBV1NwZ0N0Z3JxUXpHYXpmaGhXd3JKYTdtTGNIZHUwYUZ0dDVLNjdHUVJqdEJxS0JveG1BeVNBZ3kxN2Z6ZFFqYzhXdFRRNkQyOHU1RWVOdzlDYXlJMTFxN3daaWI1eFdyZHF2SEpNcGV0d1NyRS8yWkh6YXJBQ2JPWTF2eUtjalJjb3RtZ0pNU0x0eTdWZzM4Q3VkOFJQV3loK01sdlAvQWl0b0YrOFR2S0wxZnM2K0pSVTJkQVhWaThUR1FtUWpaS1J4cFVBc2M1cEhNOEppWm16VkNNbkkxRUZMclZUK1ZCQ01idkF1RkRNckk2cUV1WStwSWVqVXFhN2tNQmMweHVWZzBwVnU5YnUxQ1Q0RWhVWVlWMk9MNGZ0M1BXejlpT0RadkNOQk11YjZHNzhVVDlJajRtZXhNVzR1dW5DNHZqZnprMVdyQ2d0NkpXL3RuajV4cE9BSWJMUThhVS84Mjd3ak5zSmZaMU5aRzFGUUpGdXpxTG02aDNUek1relZsNXFGVUhEMkFWSTlSNWxuV2hxcVVZWXlTRm5XNGN2c3NhUnFkWmNsK0hFMjEvUDJ0UkhqTFhtUjdndHhUSXpGcHRUMUkxVjF3Ky9DZ1NlM0xOSGpTNnFZTlVWbEx6M0RNRU42OUt6aW5GK3J3RVpzMGxLTUdOdThXRlZQb1FDMDNLUzNWS3dTN2pQdXpraU0vZGp2L01XRzl6QjBpWnlXNk1PdXF4SXliZ1dTNjdsazVyZUtjRnNLTk9jOGZudkgxQkU0bVR1Vk9uRWlMd1p6ZEpYK3JGYlFpRGpwUWN2SlN1aXRwQnNRTER2T1cvejdqdDQ4RC8xdHROc09NbTlEdmRiV203bHh0aHgycC9iMGd1UHkzOEJoVjhoZ3p0YXY3eFFmOGVPVHJJbWJaQ0ltQnB1bWxGallsRlkrTkYyK3lza1djdG5XT2h0TTBUcHAyMy9JNlpWZGxINmM2L1RLN3dhaGZxRW51dnZYRWdZaVlBK3FnVjJnT09rQ0dNTGJiYlpraDZSNEpyK1lXZ0JYWE9yTFAyRENsbmdPRUN4UHVjNXpCRTN3alBYQ3pGd2YrVzRrQlg5ckduQlFrd0VtOWtITEUrcnorcU9SdnR2RXF5RW1PZjF5RUFseU9nVUU5R2pSdFlXbUw0VU5QSUV0aFUva0kxMGk4WHRZM1NSSWFGQjVtWWR3ZTF6WDZQOUdrKzJ3T2R3NUpVZ1Arako0UlNSZmI3clhzYk1RbW5lZXdIKzZBWGZHQ3BMeVYwamF5dm9FdW5aOEkzTEdiZjlSUVZ2Slo0ZkN2eWwvL20vRDJ1RWxuWlgvUUVLV0VsTDlDWWU5dnhpeERuOHZaUkk1bUVMOUs3YkJ0UVdVWjg3a0N4QVpISmNveEFnbC9oWDhyeUF0ZFM2ejZ5VFdkcTFrZG5lUmlKNWpCdGxJalorcnV2TTFEN29OQ1NWTzFGWFVtVmNSQVlHUmEzSEY0Y1lTMThIMy9rMjFzN3VNRnByOVlsNktianpiZHo1cUJrcjZXRkJtTWVTN2c4WS93RU5IWUVqUFVvK2JYZlpXRHZzcVBZbEZXc1kxbEVncVREWkNpRExnSHFaOHhEV1FoTW5ib2RMZDhud3h3dU10VmNTVlp3V1REdEFWazY1ZkJLaWJoMWpvUHBWZkJnM1Z0cE9wZThjT0VqMlBhRHRFaEl2ZVdXREs0cWxmaWlTOEIrSXlHajJzdEdMVDVBSXlrQm5aVmYwZTJyVGpuM2FHVWdlV1ZFVUZMUnRiUjd3MitqYWtBUHUzblRSeGVWWlVxbTJwU0NiYVhtWEtHc1FOZm51OTZ0QytxNDcxMEdlQUhOQmF4cWFkTkIzRC9XMVlnUjRiQVp0WWJUWHFwVCtwRHViK3c2VzdPdStSeEZWSm83bjlJcjUrM1pIbDRuM1RSWGRid1Bkc091NGlnempyNExqcXBPTXd4MnVpYlgxTDRUWUxObkN0bEZUSU05Z2NHZEU5RERCQ2FjUXJBTXFWWXp4SHpFaSs2VnE3UnNMYS96SU1xcWkwa1ZQZkJsekJRZlNKR2wwOGd4UmxQeU80dW13empTd3lmNTVFR2QyenZZWm1wd2RKd2tMM2pEVUpwaWFMZCtiakJ5NG85WHRTTlh6WXpTWkJ0RzRsNXpvUWVLUFNhL2tBemVoSmdNN0tOOVNoSnhKQW1BRmhzZGNrUkdiYWVESWZpb2VoRUlFK3MrMFBoQmtyejFZV1JaYWtBYzdMMjZoTGNMTjkyaC82aXI1UDE0bG5FWHhGUDMxakVkektlaHNkK2pMbEI2N25RVlhNd21nM3M4TE05L2xsejBoRzJ2WjlDbFFHbFBFOWRMTjR3d0VmRS80Q3YxRUVBalhiQnRqUzRldklCQW8rQ1JmWEdubnNrWGtPQjdLR1pYZHV0WVd0eElla2pqeHFsQkd4aTFnMm8wZktNVFVrSmxJc015dUZ3cWJnSk84eVc1M2x4THF3alIzTElib3FZVG8rR0cxUFpGTDd2NDlNKzFhdzkyR2RhMG9nQmdtVGpwTENGcTBJODQzRXF1TzdRNzdUbVJsQWhrdktmUTNZaXhNcDd0UW1oVGZKenduODBsQ2pDalY2QkdrNFZBNkFleXhrWlF5aFhsbjd6eTdpTXFoRW9ZckRPOUhVQmZDRG1ZbUNUOUZzSEFMZE5SczhvQ0FCcy9HNzBoZk1WWEIyYXpHeFdkOXdwZzhLczdsY3Mxa2xCVHhFbzliVVZUMUhDek5aOG5WV1pIbGpzQVZXbEJlRThLdWo4T25rMVVKNkFzZ1o3bmlTUWdkMmtNMmJFK1BuaS94UTdKUUtKMDNnNm1jOGtadnUxbkpuSzVKRFdIRlc0QnNKb3dBTi95cys1K2ZQWi9pUnBVdmJNZEFqekYrL1p1U2REQlpsTFFVWEFKM1dENFJjYUozbG04enpVdjk4VENjRGdsU1NQd3AvZkVpRjZSbjRPL1FKVFEydVkzTWVBRWs3b1FRSzBDRnhXQ1dibDFRK2FRaUQzQzNoQysyenJyL3gxUnN4ejd6cHRWYm5aK3NzTHMxUEpya2ZRNXFmWVpEWWFkK3RrZlFTRDh5WVVyRDVSQ1JPNW9VUUZVRXlXWEV5Ny9PN0k1MU4xRUkwb2xrZ3YvTk5JMFZnUzVpeG9kd3J3SEVraUhZRmphS0Z3ejRTblFnTDJlVEdPeldMS2RqdDJxd2UwcWdCRExNWU5FQm56aXp0TUFhby9IUEZjdE9OMGdwQnEwa3JwRE1vVEM2d1QzT0t1amtXUWhEVDRuSDJRM3I0VzZhS1ZXNkR1cHI2N1ZkTWd5WVU0eXFWbklrN1NjamVxV2twVEhpa1ZMOFdTaXY2cG90bk1qMExiTDhGb09MQ0dldTBBdGVJSEJtckh3cjkxRnB3dTI1SW1vTXpBdmdYNDF0VFhwL3pFSDc2Rnp6NnF2TVZNTWFmVXBPdFVXZEpvTGRadnE3Rk1mYnpHZDQ3RTR6Zk15ZFNoRE41Uk5GVlF0ZWY3bndYSWRzWVpYdFVhWGdNSm1vaHd6aW5UWnpZZHh4WUtZK1dyVW9ISTFFRDdKUlJSbStEM3paU0l0UUZDWkxVWTVmVXYvUm5oVUhTb1hRa2t6YlVpTDU4UExSbnVrZmZpWXJhRE1vTU1NSFlLc2hiU1lNd0Q0bkZCVkpNbFFBOHI5czFSUTBDQWs1Rkw0YW5QV2ZBRittVkw0bFNMdzlwdC9ZODE2cEtOVENGOFlueU9heWZEVHRtVktpOGxrVFFKeVhZOHVoa2lHVHhXZ2YzdGhRbVAwWkt6ekxvTDJGa3paeC9iT1E4d2JpSHJaWHoyWVIrSkM3eHJiRDloS0NuRUt5SCtWTnBBUnFCQk4wYmZzWE5LNEFjQnJIaFMvTnlnM1czL1dIRXNZeVFZd3Zvd0F0ZHd1SFNkS1paOU9jRDRHS09icWFRNGhCNnFjUmdNTmk4REtST0VwZ1o0bmFSRVpuWWtTY1dLTitlRHBwWHJleXJPZDVKc1F6VzlOYVpqZWZjKzI1cHVsRGZMMUZDbW1CVC9NcUtLckl0NzRTcGNOT0Q2RTdvQUplYlkzRDZPU1ZCUVhVQ0oyZlJyV1k4N3NBQW1MYnhMd01SZ283djgwb3pUTVorOWdpMWFuVXJNRStZRzJFY3RaVE9PMU1lQmh5TFN3V0Vjc3NvejVhaFdRRjBtdTJvSFBXOTFSa0R3MVREVjNrS0N1R2lMaUdDV3BrZXhJVTRsNG40cjFkcW5DY3hlY1pVbE9ObW82eXlXdGloUDBTRmRibnFlRDcyc2ViRUh0M01CdFhQOTJqSngzVWk4ZmpybmV2TXBNNFBicmI1dGVLK1J3R0lxU0NrWFhaaUp1SkpBWlgvRFJwVlN0akpESytGaVYzUStMNGk0ZE0xR0VjWUxNeE00ZERORWpGeStFK0FXaEdPb0tiaXByaU1XQ2l4QWZWRHYzdkN6SmVYMXN0OEhwdjlkWWVCaGJXUmdSa0k5OGlvU1psakgzOXF6MUpEbXFRNzhCbHAzRHNPOFZwR0VHb2ZydWE2OGRwY2czV3ZpcjUwT1dlNFBXVGVHaFo1bjJlMGNZYU15YTgvTDJwQ1pma2ZkbEFKUVFUTlZIWkdha3pCMTB6QUxOY0RwUlFjdzZjaGhDNlMzaWx5ekQ2d2VIK01MbFJlMlhpMXBBTzYxWDZncEUxV2NjeUdzZjhlUC9RUmZlUlNBcVRXL3RrZHpXckQ3NXB0TmpBTDR3TEs0SkJ6cENTYXE2NnRzNVlpelhaVkZRZHVjUlIyNUxOc1g5bEsvcXJtcHNiSENBNmwydUE1bDFqUkp3SXZmbWU4WC9RbWcxOHAwYnAzQ3ptQ285cS9PMGVDak5JV2ljdXFQMy9LaFlYTStBRWJTcWI1UDdGL3VaVGhFOVZHR3k3REs3NS93c2oyMXRHMHFkS3ZwOHdPT3MxaUF1QjR5dGNlTXdHZUV5MlU0VWl4ZUJSZE4rWHJ1Nk9IeFpIdytQS2dIVGkzMkdLWExZekhjT0VYejdadFh5Y3RNcG5VWVd5RE5rcHpIWEM5enIrK3FpMUZqc2p4dHAxU1B5a2lqQlhta1dyUVhqVkowUmJFMjY1Wk1pMkpiQ2ZnVmtQa0RLendwZEFhNk81eUE5YU9oY1U2c2J6MDFRcU1zNVpkZmhuZkEwblRMUDJuV0tVU0tHQms3RGRrYnRVancvbUQ2c1FxMllBSTBESjR6L0Y0YXBwZHZ1RFJTNjU3REU4Vy9qdzB0T3ZaM0poYzJWUSs4b0E5L2V3aTRuc0FHNTNoZnZXZG5GSnVmbjIvU2M0bHZkWjVhR01CY3pzR1B6OGxIdDNJK0VMemlqK2hmOUd5WHVvQnJXQlVIYTAyQmx5VmsxcEMwSnJybFBya3JIa0wzeWxXbUtwVkx2NnpXMDlNaU1VaWJ5bHpmd3pYTGZaamh6dlBYdEZDeDhsUkc1eU85d0ZoZWl0cFhacnhGRTBGaE5rMmxMZEp0dStTN1JjWlpMTGlBQkxNWG84Zm92VWNNTDhjQjkwSG5CSDkrSnhrWGZIR2N6WVBZa3ZJNlB6VXU5SmlrT044dlRBWnlBNWM5YjYvZkhFT240WDhyZURnYWIyR0c1WGFCVVFlcnphci9teERUb09xVzdEZ0x2TE1xYXNnYnJaYktXY3I2SHh0NnJrY2Npb2I1V25ERWR0UkJaWklyT29xZ290L1k3UXdVZDV1ODAzSHplOWVSQ3IxNHY0V2twZHBpYXdqOFkvaVBuQXZaVVpZS1lFcXgySHcvWE9aQy9RL0M5MklBcysyMjlhTytuWVhsZEZIQmlCbG5pN0hWbjB1Nk5SVVVEOVlRSG5yMnlTV3huSnYwRWNDckNZWVByYnN4SWZZNU83S3B0bk50TTZIZWs5SFRROUpnaUpCODFXTGtnWEhCT1hJcTAxMmNkNTBmN2VTenRFajRnZ21tTlB1K0g5YmhqUk55MXphbUJLQU85UmJrQTdyanNFTkFrOVhpeWtCU1VLc0JmRUl0ZnpnSjBDcXVNb2JuM0ZtZjF1V2VQZW4xYk1Md0hydDB0RDMzcDMwcEkyTGp2R3Z5Q1RsMldzcGdBbFFyTExtS0lNYlFsQjFiZWhoZzJ2c0VDNkNpSE9kekxmazBwNEJjRmU0ZzBDUG4ySkZ6K3J3emZvM3RaWEZNclRjc05xaGx1ZUl0QU1kbkVLeEdDOERrTmJEZjl5NERtWVBYNnJqZENEaVdETFJrTlNtam93R2wzNFZEeVVJU1gxYkhVT3pTNlZpN1NxdktzaVJVQVBuKzN0c2dsTlJuRm94Qm8rQUNJbnNwR0xyd0hNdUpOVkJhMDR5WHlvdk4wV1cvZndsZXNFQmZwT1BsWXgva3JpMXN0S2d1QXNONTloQnJZaWtsZzJWNFREbE1GTXlWczJXUkRCNmUrZG9CS1M5V3FFeU5wbm1tUStWcmU3UmNjK0l1OFdoWUJTMTNDTEZGTEl1SnVDWHR3cHZub3pqa2ZtSkI1K0pwbncyRDVxV3drUUdOUitYSVdkaFA5V2R4RlVvK3hzM3hlcHM3OU9DVFhKdmFxdGtUdm43Si82N3hRNmROd0NXZURIaUp6eFBtSTJsNEVyYXRHRk95eDQ3Z2Y5ZU1xTUxiWXdnNE1xOEIrM282ZlV4T1grSGxHYkp6RXJObUNFdjg1Q0NFbmlaRHd3b3pCaUhwS2o2Q1VXLzBIemJnYmR1OXZYbFJUZVNqTWdwd3lYaXdZTXdiN2tzZnJBNkQ1ZVlWQlE0cWVNbElHbDhJOTROdk9ZNSs0MzBOR001UzY0VzhyT3RrT2NjRmFvSWhvenVJTkY3RHJZdWhqcWhrMXB0N1VuMDgvTXBFaE1Kc2tmdTcyOVlRRk1MMGxTOE1FSGpreHpJYlB3cW52c3Vid09qbVFRUmdMaDNRc3dtRWdBUzBaOWR6ajFrYnAzeExnbmx6TEZqZitiL0RNUGJyby9JNHl6NlJkZU1xakk4NlRqK1gvcEtlQml5ZTdHQzJjZzJVYVhPeEpJSGxnY2pZRTI2M1lJanZ4YjkxM1JVYXhaYUR2MEYydjd5aGdDMkRVcmd1bExNcGY5ZG1JZzBtdmFnd0NEc3k3aXBKZkVLa29HcWN2N3pUelVKQnMxZ2FwTng3akZURU5oanJjZzVnQkJId3NlRzAvTHlkb0JTdTAwTENlczlXZmtxbzdaN3owZFRuZ2Q3OFJoMUZmZGZXS2JaQ0Ixc1M1WE9XR0xZQXZWYTBIbGYwZFMvaFBPUmRNbFdaZjdtZnB2MzZuUVRCUmdDQ1RKT1N1UmQzQVNQTEdXWkVaZW5YMWhTMGRPa3YzTFZERnlnYXU3OXM1a3l5cE5lOFltRVRoQzVlSVRoVnJSckE4b0t5M3VWZlA1ZitxOGVUd1k5clRFcnlwUGZCb3I4MC91SWExeExxQ0RxdXNRMFNuTWlKdXI4dStOTWhMV3k1MXdRdUt5R3BIVUlrNzR6bW1FZ0V1YVh1WUphMkt4K1dxbzdVMG55T2pXdmdJdUJZRGVHYlRvRVAwSnBmN2ROUml2MFpXbkZ3dXhUTHB6UWVBK3FMbnNxcjhEazQrdU84anBGUmc2dWl5T2tiVitaUGtqN1I5b1lqMnI0U2dINUNDU3RWcFlFZEZiL1hBWWNkMHg0eEJJYTVLTVAzdzRQSW4yaW16b3FNQTBncnZBOC9kSE4xWWlQT3Y3ZVRSeHo3Z3BET25oM042NFJtNERoYjFNc24yZktqaEZiWjV2N3h6SlphVDl6RlV4WEpXVDFkVU4wOFRlUmJJWnI2Z1JPV2NvWURqUGU3TkJEZkhWWWtrZ0JlUXJpcUEzVkx4Y2R6d3pLTEtaL1U2Q1BiSCthRllrZzJoZ1QwRnk1cVlVSHJGMHphVlU3c1VMU29PSEk0bnJMVjlHTFRlZy9rTjFDMzhrUGtBaGRBaERCSUpqeVMrajJKVHNqZ05GakhoSHIrSkRFbExPMVNHdlQ4NWloWS9zeng3OFkzNVQ5dlgxQ2huVUlEcmhTUVFJZjdONU9WVDhWVHVaQW4wMklrYXZnWXJBSVlvS3YvYkVzc09rY1BMV2Y0WnpwUmJZT1dPVFZWank0dE9PVHJLb3Znb1hwVnB6SzdnRkhYWm1vTld2K2svOFNGRzB1UVg5djNwKzkzWHNKWTB2OG1yTFJPMWhDcWdjSmhuMGE4WGZNRXhNNGYvb2NrbDdlTThjaERGMXFjTTRISzVuMGxVT0JFa2t2Sk5OUnh0eFV4TVZPeTJ5K0hyd21ZR0VQVWxwazRlRERvOTZ6dVA0NEl0bmFYdkV4Q2lOYVlhNEdlOEZNSlFza0FmTy9ZTkMvMWxHRVVqNmJYa3hjd21uakxZUWppTDVhVlBwS2VkQ0pnMzJKYnpxaTB3OU0ya0RZaUdlQ1c3cXo2R0ZnYS9JYmNWOGxhU1NxbEpOMDE0cDVjNGJsYk05cDlFOWpEbk5Hakp2dWFVRGpBcVNhcUYzUFZQbnk4am00aUV3WE5zdDVVVkZKMDF3Tjl0QUViNFAvWE8xQXN6MHhTZnVwd0M5ZldjN0M2c0VTRk9CQW9ReHZZVlV5YTRTbkljMDIxb0xNMHprZEszM0lQenVkNHp0S1hlbEErcG0wajY2MVR4d01yYVVsREM1N0twZFdUUVNHVTc3eWpiNGFUaTYxNUJpcjBSVDJDSkZWaS9aUXRHVDVnVzNiSnM5d25uRDFDVDFySUdIZDE2YzBxS1MvOTQreG1wM3E3VTVpWUxCVnhJQzFqRWw4UWlxMXQwSEo3TkppbzlydUlEOGZsUHJOWlVvZDFDZHFPaEtXd2xhWUNPWXc0Wnp5ZGFlR0R6VmM1NkczOXV2cUtuNG5RdVlXQ3ZkOTBhSVJOdUFtVnpLTWtrZENnU3lJTy9UendMOXpmWVVYVlNiay9lRWhjaGZsOTJZYUVXS2JiWTc1VXg5ZFV5T1NBa1psZm9CREtMZUZVM3ZWV1F4UVBLdDFIVDhCNHNHOXNtOUo1WmFVMGF3TnN2OFcvZG9tRHR5Mzd0RmtqR3JKRklmRmZ5NDlkRVFaUmhHdDc1T0xYQmRCQmN0RmZCM09PR3lubjg4ZEpPZmk4aUZLaVNnNDRERm5EaVNMdXNNMThkRkNObk9nYnl4MUIrSUZRbmR5bndONWd4WDU0bFlxYmkzRDk0eG90bUxuWksvOFFyVGVoMlp4elE1VUZWL21lck5sME9GcmR1MnE3SGVETEpNWDh5ckdqWG9aeXRmS3dmeGxlM1U5U2JFTW5pa29YM3lIaElqMmsvd1BTenNRcGI5VlRkYXhYM1UwcnQ0U2Q4N3hGYjBUQUZFanI0ek9oWnpmUURQZHN1bmhoTzVJZnlLSDNoVzgvMHpDYkRwRzRRQ1NnT3RGMi8rR3RKd2RRT20vQVh4WGI4MGVhVXBxeHlaNzgxcEx6cnAwL1NwV2lJWWNSNktCU2ttcFNPTHFBcmhpdDNlanRxSWJ2YTQ3QVU2dlNqOXVldU04Rk4wQVM4UWxha1VtTk85K2xKdWNPa3p1M2NwSTc3MzNtbHNtTVdVbnVmNUNaWXN3cmhTQ0x5TWJPUnlKaFErVkhld2l3bDh0MDY1bzlDNldjWGZhWmZmdXVLTkRkYnY5K1RHVCtueFVqazRKYTRMeWZEYU94OXRQZU9lSzQ2Z01OMzBJY2M0TVJFWXdpRkRRelJVdDlJVzg3eHBwWkNwRncveGVKU3o5L1RsR0E2MUw3MWxNZW15UElKNHR6emFEWWx1RXZJWHlsMEpURC9MakMvZHJiemdvb25KRkkvOXpHSnIydktITGNtVUFCbXlPNmQvUitYL0NLWVh0cUl0TkpMV050dW1zWjVKdmJab0hFdDI1TGgrcXcwa082eUhkdXFaNUx6cWpNSWV6bVRCYUZoZEJkNXkyT2F0TE9GQ2xoSVJHMHFhNDNIYUFqMnFSK3l0RzRwanVBTDByNWZXTEVZV20zYUpTQ1JWTkZvQXJnb0NpWkVGRXpCS0VhV1dLZndDWHhSQjFsM3VsbEJIcVJrbFBzb3dxSUx5TlVMek5rTlNYd3FYNzhLa3Rsc1Z0STZFZEVyTFVHNDdhckkrZmk1bzcyRnlETkJvNVBEMkthditCWjgyYTlMdG1ybU5YbXFHMTA3VFBkRHAyQkVCbmUzdTVLbzlQdjNLcVBLYkVPT0NOU1VBN05kb1dXQ1ZwY0lHYitqdTVQaXNvT0w4YXJzYzBJSWRjMmtydmoyTlpQVGtHbTJDUmRVUWNQTTVhR0FvaE9nYlRXZ3ZPenZCU0ZFeHk2VGlXSU45ZlJVbnFKdzMwdElIWFFaa3lEVHh5M1ltSzc3U1dVMzdyODhQUE9oWVBNUjA0cXNSQmsrQUJ0WHB2QStuNGM5YU1oWEQvT1M3NDVUaUhwa1gyUmUyNGhPa2ZYTTBrMHVjLzhJdXR0RGVHNm1SVGY4QlBIcmRhenRTT3FSL1pudk02QWxFZDBjaUtUY3dHSWx5d2tmd0ZUSG5ITFB4ZUVndkZ5QmFHelRBMHRCU0Iva3RsNE5kb0lnQWlDRjhaV1Y1T0FkalRCM1E1ZXJQaDNjTlVld3lhcFAycU9LOGdOTmQrZzRlRWt1WW9IaCtNaE5zdkVEQ3duZFFuTWZpenowMi9mVDQyaldQaThydnZFeGNkMmRBbkphNUQxL2lneHZQOGR6TDUrdGNxSytTS2U0VE9EK3ZTUWdBZFhQcDhMYWJrd29BendVc0s3SDVMWGd3Q1Q4S3FCZVQxcUpxc21yS21ERURnN1REYXBNZ1hVNTBCVEFtZlBnSlNaSjAxKzRtZlo0c1ZGVDFXVnJqeXcvZ0VGZFNLMnovRjhJc05DcHAxN3d0WlllVEtQdlZZUm1KS0lNbDI5T0lBcHNqZGNwWW95eGYrbmdDMDRibFBhTUlnU3ZmRVNBMjJUcHJoY3VmNWdnMy9PRXMvdEhzUWNBQzBuMWdqVzR2L0xsbUJ3VmM3K3Q2bXNsVVFHcncrS0xtRHcyVy9lQjUxUXZyU3pwVUdkK0o3Wm1ES00yaVROc1hRVE15TUNWRWh0VGJLZmZLb3Y1UGxBYmRVQXdxdGZIR3U1R3ZiblNuYmlNMGx6azdTSjhZWTFQMzRKL3NsbWVJdkM0MVhlSjVZMko2YTY1V2NCdFV3RzZibmJaZktSdlF3SnpVYkdFQ1liZHN0VFNPYmRKaE5FaExDZEFKbi8yVjJ4ZkxxMTBMRHJGR2hMQi9PVk0wQ2UzMm44VnRoVS90dVArWkNhYWh4UEtLNVJiZHltVE4vOWQzVDgrS1NSdy9qRS9BWXl6UjZpUTE5dm1OZXB5ZWJKQWtjU3N3WFhjWFhkc1Q0RHhtTHQrZ1Q1UWpOd3ZvekpPa1Q1eTBFbC9VVkpITkFzTnpVYnFoRDJNck9FZ0tlY2RjMktPMnJ0amdDa2ZzQnl2NVlVS25PZFZmdVk5MmhWR1AvTUhrcklxRXc0UGdoT2NvYkhzZ2I3OHFhejhSN2M5eUdrakxVVWR1SHUvYXAxM0ZrY3NKOHlkQ1FEZUw5U0YxY1FCVjMxUDBUZHlaNXdNWHd2R0x3TEdRNVlndGNLQWlmZkVFOEtJRW5QeWNhdFJLcldnOVEySEY1RlBOeE1wbDZBNGxvbXR4SmFaUGpyV0hVdTVmMTljcVBIQWxNbjdiK24wSllTd1gzUzc5V3lwQ2pybUQ4Y0FYWm9SR3dHSWFEK1hrV3hXV0NyQ3U3dDkvRHpMMWRLRHpZZlMvZTlsdGdyRkk1eDNhcnphTHVoVlAvWGs1SWJ6S3ZDN1dHU1hPYndiUEJ6VW0rWEQzUll4TzhQQXZBZUxyQkRHd0FRS3VIZnF3ZFowZVlYSkNUZG85Nzl5SHVVM3pVNFhhZExNUE1IMEcvS0czaU1mR3ZUQ1FENmxJVGovdFcvQWMvcFRKRFpBOEk1TEdCYlIvNWRFMnVPMVl5a0E5QmRVQTIzZjFvQ1FoQ0tIYWlERlVLdG55R0p1T1V2dTdaR3NYVDNoQVM0M2ZFcTJqU1hhaVpjNTl2SFlDSmRrMDdaUnZLRlFFTjYwR2JXQnhabjNpYWRaQWRwaUxRWHUrRmJtQlRBdENlVUJYTzI1bGQyWlB0NjVma1c5anZBYURhRklTMS9NR0NGSFBHT0Z2eGt1c3hpNWhGalpWUW1jd3dnTkJrdnh1UUl0am9vV1dJT1Q2MnlLUFRJLzhGNERwTDlNL0sxTy9RTVAwaFhHSCtjRmc5RmoydHNXUkRSVGNDZVE1MGdrc1FlU0d5R3prZ1BFTGVpMWtJQVBLUVlkUHM2KzJvaHcxaVJUNmNOZ0dRaWZjWDJKbVV4SW5iaWRzQnZEQXJoa2tlSVJ2dTl3ZjNSODJ0bzBWQ2ZvNUxnS040UmtqaUtOQ01lTkozd1BEWEwyR0UyRDMvTnZsbTVoRkdQTzFRSm5iUWtpcmdMMy85QzJuT0lsTlUwWTI1RVJaNlFqZDh4bTVTK3g1N1lwSDdJeG9tR1hBVnN6UDZKRW5EUkRRRmxOS0Vqei9lVnBJQ0pDcC9PQUJqeVRPeVpaU2FaZlpoSngvQmJUbEdyakNBTzJjOStPeEwyb0NRamhlWW92bnp1eCtIUXBrWWxnUFJselRzRHg5eVhhSXFpekwxNi9UUjNQNlNNRjdyQXpkQ0NXTXRRTWNqSXM0ME9nbTNveVpIOG9NUHU2NEw1VmdMU3UrQ1BMZ2t5UUFqSGVjaEhsUTNCcmwwUkx2MHdjSjZ2SFlCQkxBWExHMFczT3NDNy9ZcVB1b0kySElGZkhrUlNtMmM3bDVQRGRROGRNYUV4ZmMwSzA1N0F4eGdEM05MZUxmM290OUZCeFlnYWdjQ1BwWTluU2tQQnNDNXJxMWJaVHc1dk4vV0wxZDR3RWJlZ1dHTTAwbTQzQnlUZUNJVlZnRmNtVVpNZ3ltNzlsdXp0dFQ3VkxFVzFiTjZJNjRmRU1IdjRXcG9qQ2t2TmRmckV0ZGE2bkxjbzVOWk5WK21GRjlDYnhwTDJpUXpGNWxuVWVmUWNRT2ZXc3gzSkRkMFZhM3VRTHFkUmVKeCt2V1Z6SHJab0o4MGtsVzczb0FHZG9Cdld2MSt4ZGw0WEU0RWNCYWMwZUZ0QUw4c0l1R1A2eGhWWTJkVExyZzFJR3BUY0hNb0I5TG1NTkh0VGY5UEpWMnhIeUpUUDl5TzV1eVl3bjdSSDFxdFVxczlGSXVGOTBEZDZYaTkrenEwNUhVcC9qNVlZalllRWkwaTJramFOS0FkSlExeVpReEpKaC90WnAxdEd0NnZaQTVIRVQ4d3ZhVFpiSU8zN0NYNW8vYW5hdkpkaDVBSkQ3TFloLzVqUUZLbG9XQ3JEMnUzYis0ZDdkd2ZaU0ppZFY4WDdOTmIrcm5hQlpMTnJtN29xUUVPSGFLdlFheENaTDlnRUloUE9OVmZEenAvWnIwMVZzQnFiN1BDblRvTzlGeWI2aEdPRFhIeVpNTnJONkpaUURxMVdqK2dlQXhEejJDekhVV203dzkwUnB3b2JsWUVPMkdWbGRIR29rS040S1loeTZWMTE0UFRPdFRkbEJFWFVkVllTZnkzbEVKSWVzVk52NHg1cFY3RG9BOXAyNlc3MzVqcktMNzNxbjA5dTYvNDllaVFMc1M1dXcxMlBhZSs1SE1rdjJRRGpRY1l5NzNpeGFwakQ5ZGVJTlk4TXpFOE5iTlFKaU5PcnBkQTdaaWc0UldaY2t5T0NjQk5rNjlwWWpacUpwSFI0b2E0OU1wRExHUGtqZ1JlSm9YOWV0UXBqTzBuU2ZwNGpFbmxqVnlSMTlrdFRMWEV5WXpubERwTjBScGJXMlJ2SUhCR3JVUHpZTU9maHVqeklualkwT0hwSGpUQmF5YmJOeUFiWHJBeWxVcU9Cd3pCaG9KTFlOWXBtalBrdkt4OVRqY0l5QVo0alBHQkJSNnJBNGxCN09oTlE1dkJpZ0xCbVRWdmxXVmt3YVRmNHJKeXlDd0pRUVAzazZYeU9qZnVCZjE4clk4U0ZMMmxHMEg3LzFCb2R0dGNIbHZTYmRqU0pBd2tTWXFTQVUzMU1tQk92Q0NpQS9TMWt0NFptMXlWanZOOFJQOWdKK0pLcnY5NEtpMDh3RXNpV1kxOVNXN1cvQ3QvUTJCbFNOaFZvV0pJU0xuVHZmMmpGN2p0MVNhVlZuaXNRRldjazRIa0M4U2tDanRxSlpvZ3VnNXVkbm92bHJ2cW4xRFhrN0gra2tSc2lycXN2KytmYXlia3hiQUVONFVQZnYySWpMRXRwOXFxZDZnbTRlSnR0RGRrdmJEMzkwUmE2cFFlNXNVZnd0anF1SmxaanpxaDhjRHkvQmRhTEtNa1YwcEFyWDltK3U0MFIvOEJjcHJxVUQ0Y2NaZ2ZOc2hLUUY2UTFwbWw4UjRUS01xWEk4WTBENGpKcTZERmgwQ3dxVjNpWU54VmpFUDJuLzIyRnJSQlNNRVYvMlpMY3BVdkUwMFBaTWtHNUEzNDNsU0JkMzFwT0I4enJxdzRBZjQ2bGpBRzZXUzRYelNCN1pKWXIwZXZ2bVNKbFMyK3ZmcmI0bWdFN1lFazFobEdKYXZLcVQ1WnFNdDhFODNubzhWTU94cm95ODF2azl0Z2g2VS9KVkhlZjhnMExHWXQyYXpCbGxXZ00vNWJjQitrRUhNT0tlQ3I2OWd1aW9qS2hKbEo0N28xQmVlWHgvTWUrY2trdDdxRXR6aVlZcGxZSXJYbGVxL0lnOTY4ZEpnTk5Jb1g3aU1aM2tYaDNhVzVTbUlXZ29QTDhENmx6U3g0ejFLMG95b3dQOGlWUmtPZkNpck13UXFvV2ZvWjNJd3hIYzlaNTBxa0pHT05ySjduQWx3cnRTZWF2dGh2cEV5NGdDS2ZIeXZyNGlQOS9PYmtheGptWDkrdGowekZNTDdzWWZNRWpjQno0bmRhcEptSm1xV1prMXg3M0c1MVpiWlZtOWVDMVQvYjVlbEt2RFZrN2NYY1ZrVjlBWmZHSFZBV3BsNnBub3NtcTIwbmNCTWk5Mk01SCtxZ3g4dEVNcDhWVDZ3aDJmMWFDbXA5NzlYVE1Tdkt5aFB4bytzNGdVaHMxKzJwTnhEL1JoWG04emNJdjNaZTQwSkZjSDB0M2NHRWJUSTRGc3ZJRU82dCtQOFFmeW9TUHNjU2lHRkNVMjEvelM4b3UyYkZSOWlidXRuV094M3VoNS92N3FzSGZ5TkxsODk3d2kzRW1Nc2pHZjhBbm42L0s4U3VJaENFT3FQZ1ByY09xc3p1RFJmZjdjc3VLWVJzNDVsT2dVeWVOeWVnR0licHNRT2VUNDk1bjVzUEFhQ2RLQURuK0tsRDZRWXJLNVRKQjB2NEFhM3o3WDJkRlpVNjNab3VTUGhvN0h1dVk2UlZ6QktPQy9mSFpUUERTeW43a1FzT2IwMUNrWGUrUlM1ZzhYQ3NqbS82aGtEaDdCRnFCczRkRys0alpNN0EzWFVLbk5VL25KMHlRV1BSdnZVNkhuT0dNYkRJT3ZaOEg5S1R4THJkRitaaXhra1BySHJSaTAwMVBnQzFJbzNLWW1lL21hcUN1TEs1aytWMWR6TXhaWU9UN3dIbDdzVVRwTzFhdW9mNkhqMlllNGVDQVMyQ0xDR0VHVkRFdnVtU3hQNnlIYTJpdkFyYStMeVpPLzg1cVJ4cUhNNm05Zld1T3V1bEgxUVM0QUwvQ2V0bnFENWFNYlhJWlgwZXEvQkx2R2d5NVFTd0hOa0JTT3NqRXVkZXhXTTB2MW5GbG1hRlBHaFNpRWZTUUtjVmpGUTIwOW12NVRqREVGNkJFWlJsSjlNVktTdWxMVFBOTllseEN6NVcyR1AyNFRHZDNRa1V2N2M0VGZYR3UxWWFLSlVWMUhpa01vb0gxNnFwVXN5aUlwK0JxWndhbW9kakwxSGJGNjk2QmJqUDJUNndlYlNEUzZJWmVsR09KY096ZmJwZ2NQblNkYUZJa0xHVnBvRjFaeWtRcGRQdnFIUnVmTm9QQjZzYi9OVGRaUGswUXJhdDZ0aWg2bjc4UXhWZUYybXRFYUdsK1lBdkFOZ0ZiNjVsRStjSHJYMUgxbEdXWHp1SnRjT1hiN21EMHk5OGp3OWJiOEVzQ05PcExvWGVKNFBoaWJ1bkVVUmZVVjN5WWNKN0tqMGZlRjMvS2pISVJKa2JvdXFRK2FEM1YxR3dTenpZWTNFTE1VQ0haTENVREU4R2hoaWx1Uy8zd2g2VEg4M08rTVRYUGZJSG85M2lBUkQxRVMwNGJUOExYQmdRN1V1VzNjckJxb2twc2haSzdNMXRoTjVkeHFNeUl1bURvQ2Q5V1YrbS8xTy9HQ2RuWHhOYURyVGhIeG90VURSaVo4dlpndk5pVjBLbVQ4TEY3LzFJM2VSWXoyVFd6SzJQekxOcUVXZitnTmp6aDd5UlpMR1VKcTNEVldHbFBqcm80cGZ5d3BJL2pFZ3F6UGxDMHFuaUxjRHlkSWJmQ3d1NUVsTUpnb0hDWnAwZkI3OE9xdUdXNnNmRkgzZmNEV082WlJyamYrMGF0bkNXcG1SN3VOYkIzQnZMSldxMExFNGdzdTdROXNzQjZRWkl5VUxDWDZnbEdFZVpXNVJtNzhma3pMSlRCeENBVTBhV1IzaDhNcVJXRUtLR2Q4SCszSGJ0L0V6VUFvM1RRdHdDSWw0ZE0zNDUvVGxCWDFzN0pScC9RSUNDRG5UdHAyNGxUbzdmQS9vREc3dkxETjlsK2ZjdkFhSGllcGtUT20yeUdyZTBxcUdlYzhaMjlqeDgyTzIyWDhrSXA4a3l1c29zSk9RUEx1cEd0aU11aTdTZnpXSndxYThBMFNLZllQbWl0VUdoWFA1VFRjYVVDRXp2eXB6VWVNY1pUUFdJZnd6RGd6NExIQ0Z6T00weFNZQnZwVkNvVHRPRXIrYy8vSDhRT1BEMW1CL1d6TkczbkVlQTNZN1J4UHc4c3JsTGMzL1B0UmUxTXNvSk1XZmpkbnFndTd3RkFOZXB5YkFneEpzUVkzVHNmQnRZNmdvRTlmMmNMQnI4T1dOTFpJU0hGMVM1TGRJeFpMUFlKaHprN2QwazljTW0xdWxURm5icmpyMmtpa2VQVDVSRlV6VHpGRlpVcmh4eVNQaklWMkhqbVZkZVRtdDgvMVQ5ZTZ6Mm5tSFd6Zng5RC85MzNkSDNUd2J0bHk1K2oxQ1RnblIyTldQMHZJVjdCYzFVN0J1Z0x1a1diVzg4TEFQSzFhUzBLL0R5WSsreHlLZFIzUlV1Qml4MXNsTzFmUlNBdGxua00rM0tHMFNqR3lDV21rVkxCcDEwWnR5OUhMQ1o3aFcvdXU5QkM0KzV1RUE3RVFaeE5zbDQ5WWE1U2xjWVQwcHBDZUN5enZzTTlLKzFITmE4bFdVSERDSG1xM0FtbXFvN1gwZElWbGkzUTg5Qi9uSnVVKytWb3U4dnZ4bTI0bS9jM1k5UHNPWW1OL0Qyc2xpd2hLanhLcS8xUjRGK2V1cmovM1ovTFlESHdFZ09ucTZIRGllSlNnVy95bWNHYU50dlB6MmtTU1VHQ1IwclRGZVdhRkFYQXhtSHNLcFdxbmVKVllyckpGRjc5N2lWendVeHVhQTVVejBiYUxURk9qYUlhNEZMNHJlbHl1VWMxb21EVW1oc1lkemdHbVQwUnlLNE5KWHQxRTVtZ09laWJUd2RiQ0lsRE5DSW5uRzJQWk5ZSUU0bktFd3l0aWVabHhZYnBBbVpyaHhUZ2ZTallnU3NoWE1BSmVFdnltMm1wTjNlTzlyL0xsOVpRRTJPS1lmeHM3c0UxK213aDFPaFJaeEF5VnhOZHV3NEIwZW1KT0dLV0RBVnlTdUZBcGUvZERlWlVKNjE4bHBISDBqam1vazJHTXRiN09wNlU5MnFDUll2Y0pkUUttdENDK2VkeUwvYzQ5QzVaWU92dWIyclYySGlxL0xNNlBtV2dkdUxHbVJJTmZWVHo4dVExcFJLNHptVkc2cmI1V0t4ZlM0bnAwSHJ5Qmg3V092YlF3d0lGcGs0Ty9HdjlDejhwb1dRRmZLVE04STVKWkdFdnJGdkdIOTA0RGJUcVI2UVJ5dGZNV2hwdk5abjlGVnNqNTQvSUdBYVdCVExkMDdjTExSNVpqam5LaFZEd0tTMnZMcXV1Q24vU21rdm1QNnJ2TGV4TytCSE5EV0NaNElsdXhuVjErc0lPN1VDcG0rcVNpakN4Y2RDYTFYRUZFR0pKbzI1QzhMTk5zU3R3OGg1RFo5bXY3aWNGT3ZvZGVMR0dPR095RGJNUDF5cFE4TWtqVXZGUktZV0NhandSeFZsaG13dHpLeDdxam1PdDBTMVJqaFJzUWp2R2pZa3dlQTIxS0Y3c3NtMUZnYktKeHJKV2lVczlqM20ySHcyd0d4OUMyVGNDbE8vUnZRTm9iTDVudSt0bFRvaUluaXh5WGdWMlMydDFtamRSSjhVNjVxMWNBbUFkblJZZVhkVHZJcXhESnhzMGczRTlXeGpMNmlkSytsMmQ4YzJodlpUSkxLTFpOYzVyNWZnUGZlbUxhUER5bkFGMTlHMnRPWFlOdWJPeFN6R0l2b0hQTHM3elFlamh1ZngvSDRKMVA0RVlLNE9HOHhQRkVrdkcvbEM0UHRBV1U2S2hRSlROaWI1ZTNHTktZTWY2d2orNGNITjJuQjRiYThENnlpamp3T1NTRWlGYlh6YmFGZzRxbDljYkdUMmFGOXN5Yjhaa1hpRkxYTzRqMjN4YVhnT0JyeFBxSDlsVGpldVpnNEppNGc0Vm1rTGZsdHgzK1Q1SCs1SlJXMmRSU1FuQm91M2ZibUFzU1JWN0lubUliTXN2SVlLczFTZUllOUNRZWVwdit2a0FTWUZvV2s5N29NRWxESzRLbUVteHpCRzBJanJFS2VzWVB6czROWHBqQnh0M08ra0F5Tlgvd2tzSlZSMlhTdHlYUTRDM0VQWnV0Z2FjL0NML1RNQWhhWDVnQXhTVmNYcm1mZXZvSFNLTVRKdE9mSHgrcHRXdmlKWjhXYUFjMFNTa29QdFRTMjlzTFJ0Z1U4RVYrcW5EWlFibk5iTmFrTjVRaG1nS0h1SitEbkwzK3RZbHhiTVo1OEpGVVZyVVVtRDFMc0lPV2lHOGwrVDM4L0xHb1ZsZXBCSUVTckpldjd0c1V2TWFTSWJnRWZPVlh3TEI5WjRQQXQyMzZwMDBaV0w4d2JScklJU3MraUFiSnF0a0NzMi95aWIxUnNTZy9sY1BTUnphdjlXMXJLeUgwbzVrdFdyYUtiaUxiU1NUZmc3TTRDb0xDRGszejBXc1U2MkhUd2NHOFdqTXk5RWUrZEJiR1FkRXJ1WTlCZkN1Tm9kM3JWUm93bXZubDlhazQxTlMvVGhLRk44UEpSSzNWTUlrK05HZlBLazRnaDBvc0xNb3pPVlhNeEM1R0NLdXRBWHBobms4SnVpWjdDUDBBSHpDTjBtUlNMeVdLMkQvcXBWb01sUU1qSFZOWHR2NTRjZEpKQzA4Si9JemRwcUVob2ZXaE56U3hIQWdLOWpyYm5Bby85d3g4QUhzRmMwWk1YL1lET3RCamRDV0VmYWc5ZWZyVDZtd2xFckw4TjhuVmNuclJMWjB3SlVvbEtzWmhIR1ZlZ1VBa29DUTNvQ2RuMCtYSGRSK1FvSURNL1hmdGIyRDJsTm9nTFJkb0lHUUkyMk5CcVhxR2o0bm1heGU2Q2lrWmlwVWlCODNNMFhJaFFhVm9PeFhoRTdwS3Y1b0VtQTJYY3g5NFlKYnFMSG1Wc3BjRjRQQW54cEJsZTBKV3N4OVViUUp3NFRWb0pwdWtkL1RwdlM4MnVHWEFOWUJKc3BRL2FPMjNCc24yaktFMmU0N3kyT0I5ZG9QeVlWWndnaVZTdmZKMm42Zmw0RlpveGpzQTRlb1pyRGdQb2FQSUdwb0lJWnBtcnFkS3BONUVKZFhWeUYvTjhkZitKTkJrdGdNSUthRXdnN0xhRlJkMHdJbGV6VE9lRTUyclFRQ01jTlh0NTZtNUxYeDVJUWZqa0MrMVFuNmdmOUVqbW9MUEtCQWdsQkFLKzNwbmxTMnRQbnBJOGpSL2hxNm8rM01vcjhDaXlaWGJ0c05kaGVpZkR4L3JuS0dpb0JZRmdZbXFnRWNIRmZyTXR4elN3Z2VFRFozd0VuMHFEMnF4R0RXK3BLbEZnV3IrMVpoT2s5c1VxTDBHWGVMeXI1anpjL2ZEVlZmVnVGUkYzS2pycjdLUGJGMTRYNU4zWU5XZHRVWXE5eE9CcFhhemlSNnZrZGZoSFZ5SWdPaXg5QWpnTW1GN2V3RkJHZmhjMzhsVDBrZGpVcUsyQm5qdERqZUNheXl0bFdTVXFFTWVZTUl3Mk5xM0FKbENEVUZDNmdVSktsN045MGpqQ2FiQnp4dGdxMzZnT0hUemVmek10eHpHckRXV05sS2Jvc1R5UHcxK2pmUFQxTndPUSs0bjA1K3lmdUU2OU8vRWJmNXkvVEFBbFNPSGZmYXpUeTZteFJ5K2RJZHRxc1ZJa3ZWV1poYkRzSnlpbjEwZzN0bWlKaDRqMUlaaElUWlNRQk0zQmF0YmJuMGR5SDA1YlpOdnJxQVAxNEFpTndSZ3VjbzZKbmpqY1l3OWxZc1NaS3dEcVVzOWxPRFlvNC9TZ2FzYUNEVmVqYm1aK3UxNGVEZ05pb1BwaXg2Qkt4NC91eG5yOVJkdnBNQTdZUDdpOHZxVzhNaDFEdXJtN1hMdjJtNnRTY2hONXZZOHdsNDVNUms1NnE2Qk1hdjQ1d05EWlMvMi9rRFVpWVkya0Q4b2g3eVpVU2tobTY0ODZoYWJXUXVPWC9ZNVVxaXRQckt4RDJDMm53WnlCY2ZsS25aNkxOL210RUprUjRpSHppQ1JtekJieTFva2ZmNDdOZk9yR21pbG9xQzVzRmRlQnRMaGJqOHBIT1k1MUtrTlFvY0JjcElHR2NERVFMOUtxbERrOHlPVkVIUUdWb2E4K2xYMTJQTjk0R0gyRnRBMVBFZFB3SFVGZ3U4a1U3S2lCcEtCdUFlYUJPN2lWSHFBckEweXEwaDZ6MU5MK24vdmVzVW85U3V2TmorcmoyaVJ3TFdUV2NBaE1YZFBSU0htUnA1Zmk1VXlnelpvMkFCTjdYQ3JGWVJieXllK2FpbWJXcmJ3YSszeENiUEZMNmZFS1dGbHV4VTlzOUE0eS9ZcVBnL1JuMFlKQU9PQXlkSDhoRDI0aWxkLzR2c28wVzFINng3U0l4YUNBUUZVRVVmSWdTRGpvK0lVdkNVcWRvSlU5eFhJdG9TS0pxanJ1WWJ6L0hRc1BjdVRpVk9uNjFsNWhDbjBxTUVuSjhVSG5JSFNyT0txY1d2Nzh1S2t3TjN4S25qL3ovUUlJMmRVdlMxY3NKQjVXMnlsRnh3cTRoa0Q2eVAraGJVckJrSTlXekdBVUFEMVdKWkZtbWZwK0RIUU5QZU56VEdmWC9IYnBrTHVZRG1QS2FsTUZ2eFFMeUZTK29oalh5ZmFkbklzbm5ZNS95NzJkQUZHa0hvYnFjU0ZxcDJGRDZibVFOSEN2dUNrZXJLSUY3VFJnUi9pb0VJUTczRDB0azJpOXB4M0djMEVCb0dxamRPbXN4cFpSNXdMSnZvU1RSTzUzUnB6NEdaVGREbGRoSTFlZWpRTStlQzlYQnBkS1JHZ2tCMElja1VDcDhVYTFqK1ZGV0VEMW1IUkdnUjIrcVRmWnF4b3g1bm5ncE1mMVJMSTBIWFpRRXJkZEhPRFk1bS9RQ3VCT0ttU3Yza05CZWRRYURXMWRMVFZVVnNweHV0NXJhdzRXaXh6WS9VMFZwVUY1Q0UzblVVbmI1d1VqRUNqNTdQajIzY21GdUVBaHZYQXhHQjVRc0ZhWEhzQStROTFSNlpzRUZVVlJpdWh5YlVjNWlJcHp5UHVCZ0U3WExtUGdkbzBYc3BTQ2FJLzlJV1VnUzMvbml2MjZDYlJ5UWw2RExQOTM1QjZrblh5dFI0bk92cTVjTnM1bFdJMXJib29SVC9TWTZKK3ZWeUlDRS9QWUlmdVZqamFrSnk4ZFZXUHhXUEtRZGJTS1pxTmtjMUhqcE1DL2xYMXNWNlZWMDE1SGk0S1hLMWJ4Z2VaQ3daSkpFLzM2cFo0WVgvRWxwVTNjU1E0a1QxTGlDSjNvRUpJY1VyaXl2YUJpdE52a1hpUTdLNWxpeDdnL0dITCtTNzRIOEhwbVZVeWJVcElPbit2amdIWG9Eemhtckw4Z0JLZ3Z4c05pVjE3aUtpdzZTUSt4aWRpZlRaMDJYK2toaVZhMGd1RVVYa0pFTDU0QW1FYVhXcTI4amFIeC9taWVzNXR0UFB3YllDeHRRdjNpOTY3cjNiT2dUOUFEUDUxTTlMc2NMQS9NZGd0SW40TzZtODl5Ri9pSGJvLzFKMlBHZDdiRVVZZ0hhSk9EcEpLYjlYWEE4bXJKeFRhZ0tIR1hzU0FxMlloYlV2QmpGdmcvcGhHR1JuRVllTlA4V2RCdzU2MDRvaXVnYk5tVGllYWhVYkV6NUVUcHFLUk1QVW5iTmYwOVA4b2h6dFBSRnkzZllpUHBob0IvYmdsRk5oZmNwV09ocUl3Nm1BcjRyVU1IL0FyRFRIL3FleHpqQVJ4dDdveHY4ak42bHM4NEdha1lVMjhnSVBjWjZaRVNFWFQwQUNWckVSb1YwT00vbU1SU3NnRGpwL1BTb2ptM1U0bXE5d0pJVWlPYnRhcUZGaUJHbm1GQXJnRVhvajVnUmZaVG91M0dJMUlpU1B1SldYeHhnVnBXMkw1ODZwejl5aC85UnhlTWJKVkc4cW1CMWlkSXFYRnVKdHhMMHBwcVNDKzYxVXZKNjRpeHFLN29BYm1DTndubWZVVUxFNDV6Z2VvbWQ5RU5jVTZRUTBDRU1OQldMQ1U5cW16NmpsRCtydzQwRVVZczVqUENoMW9icllZdTVCTW1ydktYclU4VjgrcDkrdEo2VGtuTjdFcVRhMjdrckY5VS9jTjNPSzFYTmY1eUxQblF1OUFZQlJITUplWnRhV0xzajdCYzdTR0xDcnJ2L2Q1ZEluUkZpWXE4RnB3MHh5dG9mU1M3SW1KTVBFOFh6MWVHY2pONVBtU2EwUlcvOTZNWnluUjh2WG5rN0dubTJlSWVYYWlEWS9NOEFiZWlZUnZxY1FyN3dYQStIbDNtMXBhbjFla3JmNFJ4WE5oUU15OUZrWVVpY3FSRUl0eW53bkU1ak8xMXBxMll6TkZFalNpOVlycCttRFREejA1ZnBLZXg1dEMrV3g1L21xdzFqcWs5TFhsMS9maEpyQjJhSmtIc09iRGptcEQ3d3ZLd2ZieWxkRWtvRlpUQUdQRVl2Y3pjb0l1aTZuU3NNVW5scDRwSWpPYXViaCsyMm9GQk43RkxNb2N2OEtBZjZlVUxGelBKc0xVMHpCUEVTemJDNmY4U1Q2cFMzSmo0SExsTHo5OEJnTVhUelRjejBKSjJOZmI5UXVna2pLRUR0ODF0RnZqRVhRQnR6VWt4bmZUeVE0c0o4Y3RqQzhTcnZDNDNURDl5Tms4U3hOSlJDeHpUNDdBTkxJZWkrVFFVVFJybXZocjdWR3g5bXJvMWVCUnBDbXd5cWNOTG93Z2NBVStFMUdpTklpNE1YcENkSlJGQnV5cFhXRlh1OEZTYUZSLzVtYURUTlJwSWZVcjlQcjFhTzhOZFlud3VLOU9sZVBYRTNkcW8yWVdKWmtBZkcrM21aMFRYaUhUMzBXcGpWc1hGWWJhSm0rZ2V5ZnNhVWNsOWdLVVRlRGhnby9mVDNObXUyK0VsVEVrelUyaGhvU2RnN0EyaUM1UWN6ZkROM1NCK1Uza002Y2YxeEZqeDlsSnhETitwN1haNFZ5K2djRGV6czNXWnYrZzJVa1ZjbTMxd0ovdjhpYnNRRkVCNDR5M1NFVzVoaThIa2tlU2Y3akZmUG5zdnlubXV1WktDbzRBZGZQOGZHZ0RxU0hsWityR09sdXNEcDlTS1JhemdGQmJxOHgwL2hLQWozZ2ZMTmZEOE11Y2lmZjNpNVE3UVcwYmtKNG1LRHUyN0tCNWJDRWdYSVVpU09rR05lT0k1aHF5MDFJRUxOUjA4NHAwSkV4UjgxSTkybDNnY243VUZiN3M4bWF4ckFuaDhWWnI1RjltVnhSTm1zNER0MStJaS8rMlEwMDFoeHBHR1hrOXJnM2lSaEs1N2UveUx1cVpyNEZtZTFEaDJaUjRxZ3RVMklyTzlKN0J4c2F0czlBT0xkS21uQXMwWnJSbGgvVFlaK3FyS2tCV01ia2VDZUp4N1JqR1loYWY1WVdiS0taVGJwK09BbVM3b2FEWlNuYVFSTmd0bkgvQTFtcVo4SDBWUHc0aURna3RxWjRrMlBDWS9pMmNONkRINmhXSHVrWFdIL0tZd3QxVXYwdFVPbVhQZGdodUJyM3FpWDZXUGwvRmRXdTNqdm9DSTR4WGNDTUVRNkYxbkh5bXlVSE5JSzJ1akNHdDhlYUJQd0lCNEtqZjlUOWF1ZHdxQ2VBalpndjdhQVBOTTZpUW1RVU85WDBTc2E4L011VTZVN08va0pxTlZMSmUzY0Z2anpRSVBUY0VTTWpYOFNyeUdPQzJnL1BGbTJ6clBLMzJHTXBZaTZLVmJXQkF2Vk00RlpEbFB4OENON0lsTk9KTVFHR3V2VFhGUVkxc2dkdUMveE9YR3dLWkUwNmxqR0ZMbS9zbnR4UmxrVlNpUVpwcnVkdlMxalZVeWpXTkNTalloYVFVSjEyTm1IWWVLSHJTWXlsekpadEFyZTNOam1kOVJsRjgxeGErc2VRLzhoMkxLNFFPODFEQXlVQ3I3cGRQeFFWWDdYbnU1S1VOQXJwVWxtd2J6QU9GSS9od2tKb3BYMDgrWGVOcG16eVNORE1VWjA0QkVBSSttYmFjZFFhbWR0RXJTZFJnaGwrUzNSNGgrSzU5T3Z6OXVMNlljRlBXL3hlLzlIZkxPZmc5Zk96a3VZVDRITGVHQi9mdzd4dVJCZVg0djMyT1dlV1ZKSjhTdUNFTHJhcC9ma3lkTWNLUHhqcExKcG1uNFlzNlYrN0owUlUzd3FHSVhSNU1McGxCUE9mMXQ2NHdUeUVES0Z2VEl1dk42ZThHc3VJcG5RaHowUmFKcFdaaTgycmNvRGNHdU5RWXc3dlRySkdiK0dGK0wrZ2IvcFhOTGh1YkZGR2NJV2dHUWJobENwTGsxVU9kYU1GZnJ2ZVZjbjJaMXg0Tk5YN1dSZFhTZ2xsMzN0ekdRUm8rREFldEV0aHZ6L1IwbnFOcjJ4Mjh4d2tsRTNXYlpBZk9oUktwVHJCeXE2SDBCc0phcGtIZytMdFN1bkVuNlBaajRicnVvYVB5bUlYVTBKSmpVenVHNWRsRlQxV0pFOUNpQlI4QzlpYjVYbHhrTGtERWd0WFREL1lvcnE4aUtqRUk4WkNDVXo4MVF4N3FaSktKU2swcFhCVjROeGdDZDY0a2EyVEFJazFTMzhuWll5bnFsRVpVeFQrNCtaUjlFQ3RMc0RkTFVHVjdrdHR5cndURkE2MFZudm5idDBYWE9kK2F6Q051VTZtU1VBdStWMWI3ZGF6MDJkQTdJd3dqZVJ3TSt6eURYK2FUT093M0hlWSs1NWFKR3RZaUNPUUNUTHlkcWVTSHp0aDFucjNqN244L2pFbCtQeG1GcVA5bGpNWUp6QTZPTGtkZ1BvKzJwUk9WKzlHVEhqTkgwSEJud0M2VFkvZWtkbGs3cFNteUZTVEI1ZmZnV2hjWWNtVVlPQWhqVWgwUmUrbG0vSEszT0xiNCtPYnh3cXhXSEFMSkVKRGdaVDM3NElkenU5bHBwdXB1djBOWkc3cHNLT0U5ekZHU1VxTWdmN0JyckZ5b1AyRExlZG9CRjhtWlpmRStwRHNDdHRoR2wvdzdseVljUnVndVJ4RTVoZUNjOVdPMlBXVkczc0YwcjluVmtDRVQycDZYQzQybEsrVldqOTdkNXdjYVJBZ1cyNlhTRnByZ2NNUTUyVVkrR2w5UTJXTXo0Zzg5YWVKdGo2TnIrOCt6ajMwUEhwYkZYZDZRWmh4UnE5YlJZV3ZySUEyMGsxL1k0cisxSWNnVUl6UHFNcHgvUC9BSUprNWhwcEN1UnB2cHplTEY0R1dFSUIvMHd0WGNpSU04c1FLamZ6TDRHcWh5RXZjTXVid3FFZzRnRURIblp4NlNVVkt1YUhGUThtK3k4YWlxenVjZ3BNZGFzeGhYUGdjSHZaRWhDRHUyUllXZUI0NHhEcjl0TlVCMjdybHRpRHdjUnZ6ZERhZWZwaDJpMnowMWIzbVprUENBRlRWVk5GdkFUSVFualZpR0YzeFVETGZFclVSRVh2UkYwU2hrRllMVDVYanJBditINDNVRkg5U1dCUDZaVEt1UVUzRWdjVXN0VGE5elBWUlVyeWIveGtnYlhOL21XS0ZoMlNqL3V1RDRIcC93cHFyNVNCVnRBenQvY21pWEQwd2VjcCtUaFJENkR4R1VoeXp1cGM5TDQ3cSsxVFhiNG9Rb1lwb0JNRTR2OWlmTVlwc3JXaTFCdVRGVGtDamRUWFZ5U0U0SVZ2N3FkRjI1MkFTZGcrS0hyb2pqWENwRzJ3NmxPSWRYWlRLL05PdHBZc0JkRW9FdHAveWxURGI4MFBPT2xhOUhPbWQvdEkyaW54UGRPUDU5OFZNTjZSbzIrOStQNTI3NjhPU1FhSlJqa1FtVlNZVExNTWV2WEI2TGpLd3BOcWFOT1VHLzIxZjN3cXpqNW1HNzBJajBkNUg5TzUxWExBVmdxRDhsQnVwbkV0ZDZZREpTK1FxUHBwL3NWb0lZSm9IdmlGd01LSHpLNUxZWUNjK1V3RitjRTdFalFROE1LbXE2RFVkeXRrVnFmOXZxbU9PRStMb3RKRGNmR1JJYXh1ZmVSeUpvYzVWMTI3RWZpZTNpem4ydlN1eFF6OWlpVXRFczBsRHRGRVd5ZDBmbHNsSEkrWjQwOEpWOUtuUWZYNTY1eFVxRitNdHpLb3dqc1NwaFlOYmFWVENJYWhweVN5SW1MdzVudzN0NVBCOFdTZXNKVmZKVW5nRnVQdytGMloxMm94L2NYUmNLQUQvRFg5QVdvR2lNL3FrbUo3OUhKNHVDTWJ1dEN1bU5XMmVlYzRpcU9DUEVOOXpIOElvKzZLeUQ1SkFrR2JTYldaRGR2TEk3NWZ3RnlCZUNXb2sxVnVnUlNsdHErcnl0ZXQveHI1azJjTnlZcHhhTVpYL000c3VtRFA0bUdMUVJCMGhlQTF1Q2dFWjJtb2tXSmpnY1p4SHdrNmVWZlQ4QzFVN0l2RUJLRWoxVjAwQnBBa2N4MlgvQ3MvZTdUTEFQeUdJRk5vV3lvVXo5Yis3ZTZZUzM1YmZtRm9TOXBBNDRCVzJJeCtMT2kyTzA5ZHVDOVpmSVl2Zkg5UUgzU2xTanZYcFlKWWRzRzJ4ekp5WkZ1TGNHNWNodk1udGNSUlhEV3lHNlN3QmpzVkdMVFR2QTcrK216T3RmNnlXY3pkT2I5cDRQUWF6YVo2SGNQbG5JMm9sczcrMTcvbTB3ZDFyUDVFMFduOEhtNW5mb3kwdXJNei8zaDRBRFdxTk9hN0YxNXVOZVhUSmdiaXVXbk5YVHg0YnkxRE1PZkhOZEtRNHhubHUwYkIrM0FINis0dmQ3dmhyVWU3WnJOSXAzcUM1TDhOdkMvSGlrdWJ0R2s5N3JuZVBDc0Fvd3dJdjVhK0N6c1NZRWpqdTdMSEFVNUp6U1dQQUJWb2JwOUtOa2NYdytxT3ZENzd0YjUvcTZNdHlLYXVtYVpVcm5paGh2SHh5STZOU2dqTHBpQXM1MEZDUHJvVW9yVWdRaUs0SFNDb0pxYUFsMXg2QVE0TWFSSGhVNzJzRFN4djNhRGwwZy9NSElIM3Ixc0cvVU1aMkFmb1FWQTRYdWxoOTZxcGxFdk03UnlzdDEwVVJ3YWdEcytsZ0xmTUJ3TDBLUjNkSlRzQ0RCSXY5UzlaNEdNa2g2OG9SbGovYmgvSSt5RGx5ZXlCdVhtbXNreG9CNzl2S2pPU085MFVKTkV1ZzVyVWlpSldvbHVMeHVKM0piT2MrWEZYeEJ5WGx6KzFxWHZFZEl6c0V6QVl1RVErbDFCQ0FmY0tOZWt3dTNkVys1YzJWRDRhT3p4eHRCQ3dPTUtQZnIyT2lXYTJXd0VXMXJBRXgzaFJtbHhpSndwTlJ2U0JZTHdIYlZkNWpYeEppbk1PT204L0ZNQmdrUVV0NFNTaGV2a0JXTCtMVFVmZERtZGw1dlpxcE4xcVZ3TlRaSjdWbWVwRitKREVSNHlXYk5jT3gyaFVpMVUzaUhTa05yZ1psZzJIaDhHcTZiL1RiRkIrSllZQTl3N3Fta0pYeHdTcVdya21TYkcvYnJNRmJxU1k2V2xub2JnanpWSGZ2RkN5NHJOUTllVzJmSDh4UDhmYVRsZENjSXhEYnUvMmFMV0R2bnkyYjdNcHNYbWh0SGdGcUIxUXBOM3JhRGovVlhTbkMyZWE3bHlIc1dKVzF2WmxScll0THl3QWIyQjYyRHF6djU5SG9hMlZJZzErOEZqbFdObHFqcFMvSWdwVXptNktOcUgyb1l1SGkvZDFBcTd3eXBNdU54cGdLZ2g5WnZNNFR0aWdtWkt2aVlseW4rWVhtNVBjYURkdVJPU1pzL0h6VDlKSE5icmxQRU1YZ3paalBlSHpVUEg0YnBvTkMyMjNsWW1oRysyckFaYnJXWkJ1SW1HeW5xeC9lZDlPdnNHU1FnTU9idlBnSDJ4VWdVeUw2b1VkTHVJUnVVcFBxUUkzVjlSNXJmVzR1RlJWeDd6Zmtzb2ZKMU4rT3ZFQUg1dlRjaERqQTlOa3AvVDAvZTlwUDJCYVBjK2p2amZUdzdrVU5TbE1RdklZMG9BMDVlOU9WdUk0cnR1ZElVY1NKWFhwQkNmQ2pDeVpIRHdYMm9McWFZQzd4d0EzOXI4bUYxOXZFcHd4WmxNUUdqS0lDbzM2ODNxVkhHTW8rRUE2ZndYcGcxU1doQ2xjdW5qMjJCd1NHdnBBV2pPZFordktqSEkvdEpBUE9QN3J2Z3I0Wk4vWlg1WHR2NUJPc2hWbDRBUHNENTNxMWQwbExtWWl6cXlxMkpyQXBpZEg4enk0MFdrYXBSdnY0TStuRlNIUUxMaWpHVVNQNkRTRnZ5YlJLS2Q4WjFqMCt0eGRmY0NsZGRqTzcrem5LS0VVZkd2UW8wVDJOeHR6OVNyZXQvMmNmS1BlMXlUY2xYWCtUeUlHZklEYm5GYkRlbjM0Q2szRldORTQ3dm5OWUVwMDBWYkNhQUUrYnpINlI1YkZtR0JXSTR0bTBCUDBEK3MrMnB2REprbmRIa2Z3UGhZc0RSOVhSZmNJbWExM3B1eEhUMWFhWlNEdEFIWlFCcDJsNDZGK05TWXZHeFJhQjU1VUFYdlZqc1JZUkpuSEJEaXZsblliYzBnWVdEd1FOcG1oTmI5MlRIdVQzUnloSFR2a255d0N1WStTUGIyNTNvRmRYL1RYNldzMzJSSzhFaVZ1YXI5ZmdJQ0FnSUNBZ0lEemZiOVlKL0Q2TkRGOGhQOC83a3UrMzdITDg2M2Z0K3pKL2I5V0JyNmk3OXYxMGY3ZnNKdjIzRHovQjlWcmZiOUlYajg1ZSt6N1hxKzM3RzM4N0x2dCt6a3Z0K3RoMGZJdy9oOWNSZmI5aUgrMjcrSDl2MDhYN2Zmd3lmQ24rejdGajl2MWQzNTFYKzM2MDYrbjlORnI1MVg3ZnFNYjZ2cXBQMVdPeURZejlFbzFKRElOQ0pVOXdLS3FGUlZxQlN4NWVkdEJoYzhMZTV3ajNhOSsvR2xOR3VIdWFFVGkyeEh5MHdmdUF4NVE5N2tBdHFKRU5Dd0ZQb3ZLWTZWUS9ibnN2RjFvdzVsRUg0QWlSeTc4bGsvdmJGWFRjT1J4WVVHbXBIejhnbDR6OTNGTXdLaEx3UFZ3WndhOFpyVlU5dk5WQ0lEcjRRSDB2YjZNamRvb0IrWUY1djBkOE5qbWtCaU1rV0dZR3ZSaUZtRGZEeENNOWV0NURjeWgxWnM2V0NjNDNRRUxMeFNxRExRUGgzcHUrQWxYOUFlYnVDbjZld3BBOGJma2Npek53d3Y4Ui9tTGFrbUwyd3JVelRBbU9aQ242TU4ySDc5MnM5eDlXMk1yUUlkSFJOUnpYVk5yTHl5bmtDZXZVZkVuckI2S1RZd0hCa003U2JUMmREdGY3K3NhVjlSMkh3OHZuUDhzL3RvSkJFaEVmYkFkSzVBTWJMUnB6NzM1bzhDQVpaUzROU3h0b09zWUZFQnFoZ2RpTTVmdk9JTTdQMTQ0bEpxRGtQd0RxYWlBUmlITmJVR3J5K21qVi9mYnZCU05CL2RscUpGbXUrRDltR2Y3L3Z2dFpmam5UaDkwY0I5MzhKelhNcjMyS0RhS29XRjZacUl1RzBPVzBkcy9xZDhKWDh0SDlCQ3VPa1BPN0RwRDFlU1cxaFovVmlITjNQQ3pJMGROTGRLVzc3ckl5c1BsK08xNWl6V0JIRXlaL2t5d2pVWUV3WVhnc2dDMDVCNTQ2MHpLUVh2dUZ1aExzSVd6Rmd5bldiVHE5VWJPWWU3QjlxVy9IVzYyZGc4RFZ1ODRsaFZ1c25SVXlWMVlsRGU4SVJIZGxSenBTdGRMN0tZdjV5dk8zamNMdEhhK0NzSDJHUkg3Mk9EaEgzbHA1Qm5qaHFYbk5jb09ZU2Z3N3Bsa0lMT2dmeHYwN3RuOVEzdGVGWURYb3crRUZvd3NqbnBGYmdSSnpFQmdnVlF6dlA3R2F1QUxBcVBSOGdjKzhVYXJYejMyL2t0YllGbjlWUEJhenlvaUpjeHQ2NEZUbTUwL3N3NkZ2OXJqQkYvVFdNcDUxaEkvL2tUbWJmRndLcVZHV1hENzdtbFVSWU9TN1N6R2MxQTB0OTJzc1VhRGptdThlQVRXZEhPcCs1Y2tmWXdWOWJEV01UVjlnWHQvN2d6THlqRDkrdS9HUElIWVdhVVBSRlBYc1p2UW41WmJjd2cwbEdwVE5YS0pKMkRLcGJneWFsZWRGUXhxRHVtbml2eUw5akgvRGlBZnpZRXdqVThyN1JkeDJleEdVYnllZ2JPaVg4T2diUUlUV2FCbTNNbjcwQTVzSy9wNzZ0MEF4bDJwb1A2dDY5a3htSkRmb2Y4azM3ZnJUbTRoS1JwZ1NCaGx2TkRLTVlOWmFUZzdmOGlKYnVxaWNQcHRMaWRGQUo3cC9qTm5abVBsL3JLUU0wL2hFTTFrbTFQWVRvWUtyc3Q0OVNDYWc3K1dzckMwd1I1TEg0WEk0TVh1YUw2cXBuRUNuQU83MTBNUzVoWEdkeG4rNDB4VmV4MUVhOVNNc3NONXFIY240MG54aDdoaTJHbFYrVG82dUdKaUkyTnh6R1Q3VWpUY3JuWllxOVNjS1ZiNWcreEdJazhNU0daSGZSeTQvVlowZGI1YXZPaGROM2F4dnNyNXJmZ0U1TnJDVVE4WUFqUDJGYU92SFFTQmZIaVN4M29wMWZPT1g4UEpjSDlaZFFoT3BjeFF2V2ZzV3V0SThrTEl3RWx0UzViaDNJN1Y0alBJYVM5Uk5qb0o4bVBGWWtpdGIzMEhYeGN2OUVjZ0NaVXBkdXdORzFzOW1qbnJyL3F1UHp2ZGxYWkZTZHJRdmQ3SFZtTG5VbUVsR0RrVk1FWjBBSmwxZlR3ZENqaTIyUW16Y0l4T3AzQzhBaVhOOTdkR2JzclBYWWY0cW1BUU9melJ3dllqT1lKN0FGcmIxY2FiNE16cEd6VlIvUzgvM3J3TkRjZFZrUWszcDJGWEpDWUZEcEJxUXBoVGJ3TWt0NzRuUkxoL2hUSHJuOFZxN3lRUEdLYlZoOEROZi9xdjRpQ29yenNXS2JQT2d4bTFpRDIvTFlvTVl5dDdIc3RSREwvOWlpT1FzbjJrSkFvbU9OWXhIYjZ3VkF6N09CVmw2UzRZUUZTVC9rT24zcnl1QUdkT2lJakhoS2ExMkR4YlRHQ3I4TVdaRW5MdklyVndOeFkzbC9ybFJGam4vblVPdkoyRU5sTFprYzU1OHVEM2gvYXc2L2x4YnYxTUhkOEVLQ0pZS0J4Q2R5TTBoSks4dnF6SC9OdlFKMnVkem5NSW1saWNILzZFb01NeklxTGNZMUZuSm9CY3hKc0d5d3JMeW1BblN4OGI3UEVzYVVBdXdXa0hsdVV1aTdVRFIwK05RMnk1NGdoS1lYRHA1TXFYQ1BYUGVLblRqK2NjMldiNW1zdVM5RHdkOTJ4b3F5bi9KYW02NEsrT3NXY2RPbU1TWWhNSjNXUlpSdnFtcFFHcFhVMy9NbVg5cFcxcmVzY1lObFJuTGNsaTZWNjlXeUZKVy83Zkh0SU9sYmZGY3BHMW5sUE5kZkdYZnkrSS9mNFppSHBmOGFBdXdKbXVYVXdFRDR6ZXZKMlNZVitucnZpS3RDTE44MzY3cEFQd093VkE2MmFsVjdHWDFjNFI0WHBjbUNydlhlM3N2VGg5L0FNcVdwUGdpMVpUbzlyZ2RmYnFOeVZkWWs0UzUraVNYbkxPZjNjUGFwVTkrNHBQdjBrekIrcHdDTkpKekErMUorZDd3NWt2d2szY3dSbHh1YXlpK3oyWlF5QUt3RUZ2T3prZllreVo1OXFOTFdyMEw5RmZoVmxQNnFDOGM5WHY5OU14N0k4SDB0Mkh5TDJJdU5KYUNaaWQvUk0vbmZpVGhpaCs0ZnFQbnBXcElDYk5VK2dMa1Q0R1lFK3oyc2hGMFBQa2JuOW1RTndqNk1TTkhkcEkyWkhOOTNhcE9JdEZuMTVYdzk0ZlMzeGpkNTY0bFZvZkpIOFJKMzVjOW5RK01aS3Y2K2VSR2pvUmo2NGc1TVRrUEpoNHFPL2RMZjFIdzVSYmRIQUh6MU9TQXRialdaOHJYaXdmT1UxU1c0RnROTHlyVjd4N29tZytwd3R6b2d6S0hnZFplTVI1anpHcTEvQ3JTQ3hDVFJaa1F5TU5MeHAwU0VSdnBCd2FUbldVTEJPeVltSW85dFZKNG5KUlFFUkFPelNGMTdGWTBHUVVLVDZacllvNFJSdzhqYk9KWklpV3AyZVl0VGxoRjZaczU0WTVONmhMM05FbmNTTFJNcTlOa2lBK1pQRHJqL05qL25ESVZLNm9kNzVwYThNTjYyNFl3UzI2Zjk3NHhBUU1BWWpTbkowUFNGMDJTMmpyU1dlYzAyWUN4aGJkV0tVRkp5b3Jzd1VlT2lRc0MxQUpqQ240SHVnQUYxbDhEQ0VHWDE4OHo4a2JGTWYvZ3B0RVo1TTRnbkZrR2xoTkhUQ0JhNGlSQlZ0WjhQek4veGVEcEtBSHcyWXFGaEdSM3IvczdocGwxaHllSnlYQkpmb0lTWE1JNGpFNVFNcE5xR3pQZ3dBaHcyMFJwSHk4OUxtZE9SODlXbGNQRmRPZEwreFgwc0NhS3duanBUREJWZTdzOXd0cHRJNStaTjlRVHdaNW9zVjhmdHArMURMR0dQK0dYT2dpMkRUUFdCSVpLbC9mNi9FUEprZVNyOTdyNUUyeEpFeXNGNUhtWjJlMGIxRXRUM1hTWVlxZ29LNVhFY1F2OHlvajBrZzZOckRxMWt2ZHBOL05MQS9WVGdadjB1L2dSbmJLcXA5dHZjcUJDcVJPYU5xMkxDaUIvS2ZLVVJ4ZEE2ZGdBU05ES3c5RTNUVnVIa1pvSjBCeXJVZk5TUXBnalpIcTFSU09jcHplWWlQTVFIbXd0MVJnaU50c2VncGJaUE5wb3FVWmxxdjZvQ2J5VE9VZEpqL21MYnNNZ0Y3Rysxbmsvdys1SzZ5c1c1VXBiWVd5UDEwZldRMkV5YklnUWZpTC8waTFhV2VBV2V3V3Y0VDhUYjNvN2N0MnFtRFFXVDZKVHF1MEVQOFNEcktFMXNEbXV2U2IvRDdUYW9LYXF6eVBLQ1o1bkVqNHN4Tlh0OUtKUnRHT1d6QXNkOWJMTUxRZWF2RTJ1UVk2eGpFQ3ppellzakdodndkMHBXelo2Q1dhYmxxT01VWUxKV2JHbkFrYXQ1dGZoaHYxR3JYQVZNSHROVzNaWjFRenQ0M1hXVG8zR2p6YTFFSXJZVVFNcDBSOWJzTUgwVjIrN2pYOEdjYlZUSXNZL0k4Tnd5NWhlZURLTnFaNTQvbkpDaDFwYkIvVUkvR01ycmVTS3pnUG15MnBsWkJTUjgrL24wOE0zK3AvdEp0eDBqUUVvU0xDanordTkyTGEvUDh4MW5ERGZpb2c2OFVqZnNQYXVOaGh1a0FGNTM5eE1WVk9IVDNMTEhWNUs0bzFySW5xMTM3c0tNN3ZDZ2NRdmY5bjNydVZPSm9NNjIwRUhNWkxEdUlKQ0RCc1IrYTZXd0NzVWN3MjJTdnlUMExWZlV6bmFLb0tIbmZXbTVjTjArUC9FY3JwYkZ2Z2NWb3RKQ1R4cDlsc0ovVkVUZFZOWFhYcHZuYTlraTJEUFNaTHVHN04zcE9uOTA4V1pKcWhTaGQzSS9NQUVTenF1YmJUZi9CTStCRjNNTjVzazM4UHVHSDF6SFdTbWkyZjNwOWNBY0w2cDRNK1NhYU5yeUpkdm9oWm9ZK2JpczdDbWJuYjV5aXIxR2JxRjBPelFaQ0NGYUIxdEtveHRDKzRxVTU2NFJ6YU84QTdIMVhuaGl5VUtwOGhUTUY2UlRpQ0diN0lUVTY3b2lCcDBJZGxJeVZQTi9heEV0VmV3dDZ0QTE0Q0tBejl4TVc2emZ6MTJvYXR4RWVPUGZRbitHZU9acGlrRHI0TVVKOHZUeDk5UC9nMHVibEp4aWZMZkM2NENmMCtOY3AzWmNlNTB5QzE3UG1jaG01c2dsNUFBb2lUZTJFeHppdE80cTZFQWEwWXpPUkxyaWZkQS9xMzNWVGp5WWkvVStXdFNDZGt3Ym1XR0NZMTA4TDhyQ1ZaVTlZTmdYbzN5MkxtL1VIbkZIVlI1QXVpQ1V2MVdWbmMyalNoNVpxV0hldlFwTGlBSXNqaTJwTVhmZnExWFZqWXNLY1VQUHFPRFk3YVJteHFuRkZWUjM5M1pvSi9jbmdYWm9oa1ZxZUhkRW5yN3F4THV2N3FGaU5aYXh3YjBzMkpXSlU2YXRzYlpRQmlrYUprS1pqSzR6Um9xUzY3dTE1Wnp1TEpNYmNOamZsNDIvdk4wVklQNlBQVUJzTzA2TlRKTVNPMzQ2MjN3M3ZHSlVONzluK2pRUTM0N3k3NVgvcXNpSWtWQnRVbEp4czF3RnprM0ZOMVdMaXlhUlplN0JrL0hValhpdHhPWGE4QzRjTUUzMlpNUk5XZEhrMFNmR0JXUElrZmlDS0lka2ZVRmJwemNrU2xSMUhtUUl2L0N5cFdBSEFjT3ppMWVCQXBvVGdGQ0pRZzAyZ2cwRlZScU9RekN5U3BxSmdLcEVBSHBOdnVEc2hGcVNWY3I0RkRzdjlyL3Zob2NIMExFbVlnSWlzYm4vT3NOZktGQUFDZ2NtYlRwZCtobDdFdlVta1VpSTBDcGRkY0xQZjlEdEl5ZE5CRjg2UlVILzBmSkJmMUE3UUhOVDJZUDI4dmtpckxDNi9oK0hlS1U5WXgxckU4WVhGRUYrbGFjbFFIVTBVUXR2d01XOVJEZUxkT1BaTVlmaDlPRHk0eG5DdkdicjY1bjN1VE1IeEZycThhSWNMeDNvdXl5aGwzTFpJSGRHNk8xRTR6amxra0FzT1NBKzdNUGhyN3ZVV1VhYkpLRlZqZXJZT05DUUREK1NWNjNOa1FUOWV4S1M2STdOWEFWYkVBSDNnUHRWTExFRFRPZHllNnRyekdBbFdIM05wRjZnTDRySm1sUWpmWmxXTGZLeThReURBRHBmOFppT1k5WjBnTDF4N1NZSDkxcUFPZ1ZuQysvT3YrMWNNQmF4dFRHbzFmVDFuVzJaYWdHdEJoTE9HVmlSMkJmdWw3cmJNNzdwNkE3MlZOZHBSeW1yYVA5aDJHUHhSRVlyTHVtcmVBeEo5QlVoMjNNcjNKMGFWQk9EZUpSY1UxYXQ4NldyS0RMeVFSWjdaZ3hMTDNwMW5zTE9vWXZDemRvQmhHbFJiWHdKUVZDUHlxTVhxK0hhOCtSVUw2WWJEdFVwQmJERHdVcUVZSTFrcy9kZFY5MTBBN29GRktKdXZZM0JLWEVBLzFRV2ljR0grQjJKZjhoS2NDTm5mVDJ6OExDZkgxRHZFZzdqNFlKV29LV00vakZqUHdWeDRUMHQzaEdPYXhBcXpLL2M0MlF2bURXVlVRTHA1WTBZY2drWWc1TFg1cDV4R1lkbGlXM21KL3UyUDVxbys4aTlpa0xMSmsycGdieFRMMEF1d25XRE1rKzZLWlowb0xXNlZzdld1RWlmYnJLaFcvRm5BRmlYSXl6djk2bkU5cXlxelZvUkl3SDgxREFEaG85MXNwRnVuQzFrMzludHdidTM3NkgxUzZWampXcEdid3RYMllFTkp6ZEJNRno1VXZEUGFsajBzZDhVMWxSNzRDL3VMeEdkY1F0NEs5RlQ1TGxnZ2ZuaVg2V0tnMG5QTER2UzhRMFdnTnRzRHZRdFMrS2lEMjI2UTg4TmZETHk1aHhNeDRwSWZWd252bjVoVjZDS1AzYkN6YXBRLzE1R0pPRXBCR3MvdWF0dzZXTDcyamJhaFQ4dFhocTJvK29yMWdTZnpFdlRyODIxaTBNdDBUYXBuRlpxM0l0YURTUUxEMC8yMlRkbVNUcm1QVkRRK3lyMnBLZkxLRFFZd2lidDE3eFBPZ29aR0V6N29jTTVZZGQ5Q0hwZ0h3SDM5UnQ4NnU1bm96OTEyWDdhaGt5VGM2bUVBVzIxUGVLcWtVNTlIVmVBMHNYM0ZFQmJoSnlJd0oySkpmUUs1aDQycFVuUzhNaVBFSk9yUUJLbnZ5OEhhRjRDaGpXOUlXRXpORDI4RHJEUmR2eHN4YmNUc1lCSnNVbXpmVmY2eC9uWWhIUGZiVlFJUi9ZcWFPSTVLaG1UM0cwUmFpSllxek8vOEs3S21MVVBlWFZJLytVUDdPUGVhNk9YajNNdXQvR1JreUZkM0Y5TzBBTDc3SHl5SWJpWW9nZENvd2lIdm1pYmRKWVhUZWFXZ0F0SDVZZ29wQzZHYklMTGovVE5UVnNDbjhvandoS0o0SnBGVDJyN0VNTmI1N1FReWhNS1VZK29Oa2Zuc0FxRURFN1NFdEsvcXljenZYK1p5aGtPelJ6ZUtXMHk1YVB6MDE2UjMwVTB1WXl3V292QkZ6SzE2Sk5NcU1HVzdEbXF6a0V2ME9hNS9wU3BJZzhRTUFYeDZscC9pd0Z2Mm9HVEUySmk4V2VEQTRLTzNvL0FOd0V4Nm04dG9lTGVONmFnSHEvZXV5a2tZeVI4b3UwclJXZjhpb00wZXU2MFUxcU02U2t3aFBUcll4VjNESisrWWY5TXIraDdaWmV1alRNWU1oYXl2bFNRSU9aMkJFU2JDTWtvMUM0a0FXZjdZRElRRzBvUE9MTXRjU1NsYkZLUlVQYzYva2t0ZjJheStyRGVkZE9ZbnBCanQrczBjMjlLNDZERXozVlFCRk1TektaaHBEalV4MTdZVFN0MExSNk1UcnlCUzkyMXVFc0hYeFc0YmYvVzhrQjZmUkYvcThTc2psZ2NLWE5tQzQyNHhnRjVPMUVxL0J6aG5EZFdHOTd6R0VRVDh0T3VoTHMrWEN0Q0lJV05Jd1VPeWtzdk4yOXRlaVpsVjVrZCtDR3BUTzFhM2FydHVCamluQWlEeFgxaVEwbDB0dE0vV2J1aFdHc2RrQ3FMZGxkamt6SVJVL3c2cndHdGNEblYwQy9DNTQvTFdyekYwQTNRTXFNYzBuR1kwVWQzQlA3REdRakY2T1hXeFZWREF5YU1HRFdrRTNNcXNZWHZZd1NHVDRWMmhXOHQ2aVR0UFU5OXlEdEdvOXVYd0dXVmpUazg3SkVuaDFDNGJkZ2JVTUxtd2VGQjJobGRvNTFFSU5zK3Nia25GTHFOMW9RcFJsSk52VlNJTzdIWm1GWEdXdVZTelpMQTNXUDIyWWhlVTNDMGlsaUozUE5oaWN6dndFTWNUKzRzUmhNQzc2c0VzL1RZSDVWcFVwRVVpUnZmWWZraWFaWGp0d2dYV3F6VDZtYnIxNFJ6UEd1RTdTc2svazJyTUNkaGozRGxBNDFaM2pCMFF0M1lyTlZJdWgwN2g0NHZvWDNUWG9Tb1NjWEZYTXhqRFZwMnFmZmxzR2Jib3Y2WXNldnZWY25BcnhYQTFqcHdMZzMxeGtXbmhMT0xKejlsR1M2WUpzaGx5SHhSOTNINlNWRDFiYng1TGlOZDVwMnppL2diWmN5bFhKcitOM1Y5UU8xU0krVjkvaFJHUWczZFl2a0ZCU1gzR1dha0YxTGViRzFvMXRra05nemhIQTU0SVNmWU9LeVhGTkFLcldxZXFEWjNSem91ZnJjK1FQbXh5NGwyMzBaemhoM3Vnd3dxVThueXowMlJVdW9wVjkzYzlxWXlIZU1DeGUyaWlVdWozaHUyd2I5cW9icnRkSUZzUm01aXBSc2RZS0d3d1htZUg3KzZPSEJ4V3FKVHFDR3lyOXQ4VWNURXNmOW5pdGs2eUtiY242aUpqWldyTnlzYktrRkFCM3FObWFiY0ZXb05sTEV3WUxFUm5Hd0oxMk1PaG5VbjVYTjlBODBEU2MzTlZNWjRKbkhFTkgyR0owZE1JVVpDQng3aGhLUjlUS1ljaDAvc1NPUGJsNHYyd1kxajJrUG1xOXRoMmVNNUxYZzVzaE0zWmkzQWJZY3UycHd4NHlwZ1daYyttNXgzNmlBUlhDcnczbWo3aHNMTDJub3ZjcWJZS1pjaG12S1dsd1dZN3JIMHUrWURMb2JPYkZFLzBqTGVXbythMitzTWVrNDFBcVZXT0I1MHhqelJsVG9SMFh0YnJMMHp1SHhYelNwc0FWb0tNeEpJVHM1MDY1Q3JJUERIeW4rRG5zM1NkN2tKUGRJL2dmV1NmMWFEZUVGUm1WUVhCRDNYQ3VFQ3Y0Ny9WQ3MzZUhxeE1ob3Q0QUhlTUpTTVFUOHNxRmprb3J3bEczY21aU1FVYnhCazJJUVFHWHpNSkxjNHMvRWJ5TlZLWFBCb2VEVERnbjFlVVVKVEE1T3E4K2NoZjBqZExuTHh4SGRtSTRJa3lQUDVwQ1UzN2htUk5reG0zNHJ0K1BZdExFMCtScHhiamxtM1FQQndNa1k4NHJzWVhWZGdISFR5QVh4cm1aWHhiN0JERXF3S1pCOVBLQld1MWlqZExDa3ZwNWozSHFOelRjMmd5Q01uV1ZSOUc1ZlNXNEJtdjNuSG1TYmdEZFgwS3Zlc0hIRlVveWJUTys5NTdOZEJwakJvem5DUUJKOUxLeFp0ak9rMUpJTGNtMkxXUE4vYlpqUzRCYjdpSVgveExHOWtIaWlpcEtQRWY0Nzd0YW1FdVVpblpNeGZGV013SjExeDBRMzBUUVcvZEZlU2Q4cmpmRWFQYytldTRZSFRwcUlwMmMzSG9HT29YT1NlYWQzc1c1K2oySXNjYXNhSXJhaGN5TjBHbjBDUzVHK1NsdjFKN1hpVkNmcE1jcUd1ZXExS252b0lSYWgzNlIxdmxpVDRDdjNNSDI3SXFqZi9MRDU5b1JBRGxGZ1dRM21tSlEzVGtvcktPaEROZUh3V0hiQTR4VkVaRThWT2p4OXI3YXJ0czluc3lIZEdlWTlQa3Z5bExHVjV2Y2Z4TEkyMDZnT1hCTGs5em9pUGRwQ0c5aHIrQ1NLeDl2ZE5FbGxIR05GNVRGUlZTL1JBQzIvMDVuaUdUM0FZN1JCRUw5Mzk1Y1lWaGtXckZyRVVwazRkdWNoanNjZE1KU2FvUjhvNmMxWHNUaVV0NGNodmRrdlYyWGlteTNlSzhQL0wyOFJycCs3NnphekdTQmRiZzRBUmlIQUpyVVpCNkNTWVJYQllOMVMvRTJneFVLSlJkSzJTTUE4N1VBc1FaSnEwd0VpRThzeGlnaWtzNSt3QjZLUlRBYnZjTktIQllCWSt3UTJmYkI5dmtsMXZYNHBEamFpRkVGQUlBSngreGsyNUx3N1I3cjNyWHJZR0lXZGluYitVSnNlMFZ2b3AxazJhd0NtbXFsa25RUWpUMUxmS0VsZURwenZsRDZteDFBaHp6NStMa1VHb3BBb2h1WTJOcUVTbitEdTFQWHJ4VDEvWXVMb2ZmN2hLdExuZmhEZ2hjQ0RhOGE3RktUUmhrVXhxZFBuS28vMXRzRm9EUWJIclJtMS9ya2d3cnk2ekFZaVdqZmdCRnRFaXVsL3hKbjA1SDBPWC9yN0NGTXZ0bFg0ZGYzdFNnM2xLazRlY09RVzI0RDRhVTRFa090NXBPTDFXaDcwQU5JZVA0ZnpvOWhFK0RkYVpYVG9MZEhQSVdCY1VNSVJOQU9HbzdIN2FEUzJGNjh2NVNBdk8vcEY1ZGNPdytoQTVzL3RJdS9IQm9Wb0JlWERzNGxjQ1VucVgrY2NlTGpOdUkrS3VXLzJXYUEyZ0pzZEtpRnNqVHN4K0kxMEE5ZFJ4ekwwaCtCSGFxY3lMZjdFUkdTNFJvTVM1cEJyeW15TEFZWXVkKytOUDAxTytHZUxFVXFiSmcvd25OYnVROEJrVERDc01tNllYVzluYnIzSEV3eHc3NjcvMXpTK3M2RUZVYVVnWGJwM2RTTVRpOTVqRS9GSDd3SC9RMXp3cTlyeWRMN21Ed01LUE9SSjF3c1Bwa09TK2FJWHB1OU1VcERsSUY5UmVxekRuazk3N05YUXphdUNKV05QQ3FtbXYzZTRlTnBjTlM0dmtOUkhoM2VGN3pReHlXRE1xM0JmaFo1WEVjeDMwRjVmKzFCKzh2SVN4MFkxWFRGSEZwbXFqYXo0dlgrTisrZHAzY3BWdkFQMi9RdHBtaWhHTGtWK1JaTXZQeFBkbktORkJqWHlxSnJtV0xyN1Qwd09kS1l3bEtTVTVlbUNRcWdTSmVRSW41UTh6T3hCWFJhanhYZTdlOUxEUTVlOGpqUGl2S1AzV1NYRVNlNXlSNDZNT0o2bWZGdmI2NktSZEU1T3pjcmZUOWZLWXhLOWZWdzhhMkFXUklFK2I1WnZ4QlpIRVlVS3owdWlTdndFTHVicDE1L0NyRzZtZlJEek1NZUx6ZDhxNVZpWmFlTXNCRmNUTzdUMmg5OTI0TXZPdng4anVOZWJVNjZEeVhnUzdmWkY0UDg2cEVaY2VWRGt6YXhURmJmRjQ0TmhSQWhWdytSaG1KMUErejEwSGxpN09vS0RweWNaWVY4M0hDNDBuVUZPZGFJcHBtRTJxM2NobkEweHVjY1pCd0hxQkQvV2I1ZlR1N005SWtvMTRtajhvZDVSUmE2Q2o1TWxRSXR2K0poVlZxRHFORGo4b3JRM1lVYjVTUzhIMWgvRStwM3kxY0I1TGhIQjRSL2Y1TDR3UDMydUtzVW1uUVRnb0J2ZysrSTRqV3NPdWx5dnhjRjFuRDNaSWUzbTM2c1ZMMnZNS2JOL2J5WEo0TmdZZGJwdjZYVmxYbDE4VmdLdUVVa2tuRUFkbWROOUNQUzlOMjBlU09mS0N6NkpIN3JVa0pya1JjdEZ2aWpReGtoejdkNHpWV1hwTVlrTEllM3hsK2Y3emtKbGJqczBPVE1iR0JJdllMdkg1eUlKczhscEJpWEtkb2VHZmRBQVJ4SVNtWFRwbXFXYm5GT2RBd1ZSQ0U0TDFhNFFWZk1ERElXVjhXK1AzMi9rSkJhWVNvNXl1WXBEOUExMnpsV25UL1lzanBDSVJ6bTZFWUd5Smo3WWVJTThpQm1YMmJqZFBmeVlnRFFsOWhtVWFjM0VQeGp2WlQ3VFRFRHJWWloyZ3pkaWwvVDVzbkJjY2tiQktCRWIzYWdkdzI5TGwvVVdaMEN4WmRMWlNaNnRMall6WERZeWczOEM3T2d5MHhtVElKTlp0ak8xTmQ2UWJMSnF2dUhkaUFGem03L1FiaG5oUUJrTnJnRXZRTVVkYnNvKzlaakpKSTUxQUh4cUk3UGhQN3BMZE1QeHFOaHpwdEZOZmx1RW1rcEFaL2FINGFLTjBzeUEvOEI3Z2FwOUtzZ3llVzJnNHFMUThmQmRyU0ZzVUxOdXJJdmNoSWtkTnZuMHFlZGJNb0JuaTlxRXdjT053dzYrV3BOd0NhQUhOR09nSkRINkxmZWlpcW5zdjVGQXZzbWRUU29uWSt0TWtHNEo2M2JaVXoxSEE2Q1BOSDFrUEhHNXN2elBoRnZIN0NJS1ZydW9ZakVUTFZuWDJkRU4yVzBkUGIvZm0wcEtSQk5hTS9tN2IzRUpVRVJkMTBWMm5MS3NGeWZUME9WWlNPNDlSNzltRVRWaEVUalJ6Y1FkSVdSdVRtTmk0TmpOYjV2QmhkZTJmWXNMb0V2OXhrTjFsTDNsY1FaR2hFOWN4d0VDc2MzNU1SeEhuWDU2a2ZiR2ZoTHlCQWJrL1JaSW9QSHFmTU5Ya1dENXJPSHN0V1RxM2NZUm9yeUZaL2FEbFhVcjJJeHA4aEJYSGRXdUZ5NzQ1NjV1K0YvRGxzaVpxTmR5NE81SnpEZFdJdGY3VDZCNGFzaXZ2OHllR2lQdGpuYnY5dVVlMUUyTDRjY0Z0VTF0dmRyeE1MSkVaOFhKNmlVV0hDYnhmUXc5dDNTS1dIb1diV1l1bGZWQ0NKeUhhSGplSGR4QWdkUC9GZm42OW5BbThZRFp4K3JQWWVrU3VPZWxJMTVWWFJ3NWhvQ0kyb2VpYjhiQjlwWDZYL1BqOWRKTWJudldTTGtRdDhEREdwaHhrcyt3YjNOeG8yT3NHTVJ1Tjc3QThHMm52K0FNVnU2ODlTMy9FdTRDbmUzN0d2WWN6WDE3VmEzdndxSlRJcWNzdzZYVGtRZnp0Sms5ZnpjRy9DZE1id2tXdmVESTI5c2tJelByVFFDVmQ3T2RGbm0zYkxYd20vSnNscCt1Tkp4b09NQjJhak4zQVJhNHQvYW1aeXk1RytNL1o0a0FCSE1XSmQ5T1ZHLy95bStQWWxFbTN6Q0FyaGovZHgzeEpoMXlRck5WUTErY0dCbzh4WkVKQTlRSkZraERwOXFXMmwyNnBDMDBrc0t2bnVpd3BOTmdnVjVxNzBtREp4MmltMUFXUGVrU1ZNci90MHNsdmxHQTN3Z2o1b1JWS0NIeHNySTFmcWtKd0lmczhJUy9tUFM5NHNVcTRmNURoSWZBRVR3cDhqb2JLRm9rRkJNUXhjZndwVzh4c1VzM1M3ZStkMHJVV1oyQ3h5aHlkeVo0MU9IVGJjcHIvMEx3L0ZXRUZKTG5zQVduUFcrMXFCT0tUaEt0SFhXNzZGYXZnYnJQcTM1WUtrUjVyRm5lcG4zN0NqZStnb1NBcVdOMmh5aElNNVNqb2tSblRXTVJYN1hFc2FtbE5UU1laTEJ0THlBYnpBVFd0WExicFB4NVJFZEc2amxOSk1tZE5DRFJTR0tvMVVCdjY5V2pzdEVPUktKMWZGWVhSaVlNM1NwZWxzN3JROHRDdEsxQ2FTblhxQzR5SG8zeTZJNm1wZW84QjJXcGtRNVpmcVR1YmdnYmg4WVdRcmp6eG4rUGoyRkRDNVFIa2tGbHc2ZGVzZk5xZGZ5VEJ0R0VFTlkyWTUvZjFPMXk1T0wyWU9QWFpNU24zTExBc2lObTR6RU1oR1MzOEp0aUhKZ25vNW1TeUhtNEJJa29oMU9vREF3ZlVMTktsZFd2cnJlMjc4ZmREM2U0R3lHWlRycXBFblFreEEzSmFqNWVrR2wwWGlmVVdCRnVsNFFJY2p3YlpIM1g5ZlJqdHFKYVFpNmJCTHhBUXRVa2l4M21waDBsSEZxTXhlN0xaNlZZd0hFTDFIaVhGOFJQdEY5SXZ3dlNmWnJ4NFpDQkZENXRMV1Q0WWh0ZGhNc3pjSzVWZXVkSjN3RldrMnd2MktNdHFVaEE3N0VOcGtiRWhnWUt5SXVWTDRadlR6N2lCSVBoRGdwVzIwYUlSVGpDc0ROSWlacDB0VWc2QVVqUkVYMUdZNU0zVlFaNUhTUnV2ZDJzL0pPSmZ3bjdmSW05VXZMV2hNR2RBWWFsbUxBSWd4cW03My9IY1piV0NacS9kN0YxdGk3WmVxenNya2tWK3JnajV2Mm5MODc3UE5RVVp3bTN4dDhKMW1pWWlxSEpJVzRRdE5JcTA0TVdPOUZWOWZyNEhFMFF6ZTd2U0NiajdZNHozb3ZqNHBabkQyUlVFY2FpWU55ZXhZUXcyd0taMG54c2t5OTNZNTlZTElERWJDV2R6eXFjcVdaVjRic0luV1pjU1RuTTEra2tUb1dCYk1ndzNoU2kvbHFYeVpVQktkb1cyMkdTSjFCNWo1QU5SdGkya0pNNlliVWxBbU9wdkdoTXNNT0VwUitLcWhEWWpPQzhUV01tOS9PT1VEYnZidzBmTDdGRHN1NzRTVzhlYXFad0QxMHJKZnV3Y0JmWEd6WUZOUUZaY0hmYnFoeDM0enltM3ZKYVRTdTFuZEc3dVRYMHdUNXVBTWtXRDN3Zlhsb0FROXo4anpWa1ZiaFVGS1BXc3NnWGVyQndUNDRjMUlmWmQ2N2h2N0g1ckYwaTNSU0RkcENMRldPSHZTOStuQTIzalQ2c0dBMkFnTTFJQVd3NkVzWXlEbVladHpuOXJXK3l3aXViMW53bFB5RlA1M3Z5SjhsSXdFdS8wSWcxb1BFeGdxblU1OUwzTEpOSmRoNnl2TGF3NU5UU3NQN0dVeFJPMkc5ejhOZlJEdlB2VXM2clRSVisrNDVpK1l4aUlHWUpVOGNpeEl4ZVF3SjBOQ1J3cGEveXAwdytwekcwZ2ZGbnZwRzduY2JwRWJPNi9NOEJsaCt2cjJUSHROek5zMnBBNjBDUTZxaHZoTDBxZTNWS0VmVFpNODNsd2JpWE9mMGptcEpYcU5YNDZ6VFZvRTJGbTdjUEgrdDFqV2ttTDJSWEIzTWtkdWtVeks3Y09na1p6OE1xZVQwSVN3K3RjNno5UHRibzV3VXVYbGJwZ3hxaHFaV0pjNHF6YWI4bmpVRzFDNUNiZ1dWRCtobHNVVlpRaVVEWjlRWHlKbUE5SmlMZzNWMEtuNGY2WVdESGZEWE5EdnlSbVB4UXgvZ21qU2pHc2RNb0VSMFM1OENxS01FTExyandnNHhHTzVGU2Q4ck04ank1RDlpWDJnYWZoOG1yNDVIRGJZc2xHZEY2d3UxMS9oRTJLRDBDbzRmbTdCMis5Q3dtc1daMXg2UlFmT21LYzZzOG5CQ1dxeWRPb2VIRFU0cCtRWERBVDVwTVBVOU1JRFJlVlVxT0JGS2o0WHRpRGJYQ0VGc05rV0NUc0FDbFRjTUQra0crUWkra3h3Mnl3bEplOGVQZ1NpdS8wdVZqaENJUElSNGFwbGR6bDJ1dENJT1BiYjREUUd6NndBZHVQa0FzbC9pSjJmUXlFZ2lFR05CYm5FWk9tZHVDVkppeHNEWlRtZkQ4bnVjTUpkNGg5b3VoaEtBZlFYMks2TCtWVTdsQktCYkE4TjF5dTZ3WlJuZm50VWw0aE9jc0NGOTlCUllWdG9NTjY3dFRUWVg0ZkpNUTFNbVhnbmI4NXB4ZnlwMHRrRGJRQTZDdUc5N0ZlZXkzWWRMRlBhUDFBNzJXWEE5bitVLzQzZnZoaDRXNWlkM29iSUppaFNBMUFvUFA2Wk9Qd3B4RGQzSUhlL2c4ZzUwSWxXOWsyZ3ByTjQ0VCtjREp2bkJENlhQNEx2SEJ3NEhPNlVHcnc5U3R3dmFYdVVmTkdTNk9nemZ1NTRjVVhNazZRQitBKzRrbFBTVS8wQ1dWYmNxWm9xc0FWQ0hOeFlRQ0d5c2tTY3hGRTNUbTNqT3pGWVNueWlZSTBza1oyb1E3bHEvZ3YyV09MZ0VVNzY0dzlCMXR4aDJnSTdhSDQ2Und4S1E2c0pBVzI2aERnZzF4YjRMenNqeENYMXVrdGZDeVVSdmMwTEw4UnE4OG5RZ21FNnc0YzU5Z1V0c1ROWkRQWGZiUHZqdU4zTi9FOTNrbWUzSEp1Rm9GNFRRWmdwNjMzOUdxbTNtdkN1aXdUb2hTM0NBOUxtUW1vS1RKdzVDQ1E4Zit6Tm5pYlRvZmQ4dDhHZGJzNEwxL3kwNHdadTJ6SGNCQWN0dzBYU0lsaU1BOVJiTm82b25ocDllM2gwZEN5NlJQOSt1WFhtYXROck9qN0kvVGZMVldnaG5lcmJYdVN0UjlndU1ReWttUWJnRkF1ZmJhZjFiUVhjWkFEckQxOWpOZFVJMTREWms3MGx1TDVvWkxPajFTQ1NtTEt0S3AzUGM1VThiVXlQNUswNTRaaEFSbjhPQ1ZmQzJsSjBYWHZQS1hESXhZZUlMbzU5SVJ6aXRwMjY0K2lnOE1VN2NqVmFZVWYyN05oRG55SlhpYWNDQzJrSUphYSt4Q2p1dFpUeXRwMGVob2FYbGhpTDFEUHpLWmgzSS90UmZ5aDVtQkw3dzd5NzdReXN4SFlyL0Q5N1o2UlRUQ29EZ0hZR2RVM3dLYmI0VERVcUY1Nis4NzA1eEVGSldxcGNjUzZ3R05yVVJnSHVDanlvVjFXMmtHK2psbGZMZXllZFFsbDM3UmFsQkg0Mzc4VWd3eDZYUmRldTMxa1hsSFQ0VXB5R0ovMjRrVVNHT011S1IyUTNlOUdmOHNySXEwN2lZSEg0VTlZUFh0a0Z5YnkrTi9IQXJXdHpYeFZwc1I2VVc2TW5GNHJSdnJaSTBXbUtjRlBxRUdWaW8yNG9QVitnS1UyY2hTSnAyRUlvdkZXRTUxM2haVTIvaU1vaFlCbEhqRDFnRCtyeDlvbjNYSlUyVnBMYTJmK3pTUjhnbW5VM2xTblFIUElXMWFnVnEyTENPdnlRNlI0TkpGWERoL3hEWWpnVjlsL1BxODczc3NRVXQrOUJSWWtXYmpJYmJuWE5qVTl2eW1TVVZzeVQvRHk2NmVVcjlBRDBTb0RZVkpVVzJLYzJadml5WlhVWm5YV1BHSXNmbnNoK3JYaDUyYnp2M0NFNjlDTkJDSW52T01zQzhjUmZ6eU90M1EyQ2d0Qm93R2d3QmVFYXJwUXRPTWo3SE9qRkMzeXo2Sk1TUHJDaUFwaDlNVXdCWXdrbDNGemx1V3hQaUxyd1ZYUVFmUm9vVWEzWkM1cjZpSXpOWWxlZnN3SkRHaUlNMW01ejJNdmJYRVdieWE2RXRBVi9ET2dKa21ZNk9QbFJsbVZOUENBeFJnRnRFelVoTGQydS8waEM1eGh6WVZ0WFV2ZTNFbU95NE1WOElXR09sRXgwS1luMjY5NmtuUVg4K2ZJV3VUUlZmaVQvQ3RXZDEyUW1USE5Cd0svdzVkdlIrWmV5WjZTWHBRbGlQaTkrRFFJQlM4Ry9iK1YwYVlZZW5tRytQNEhEN2hOZ3lZOEZ0WmZLb3ppeU5CazhjbnJzNDdXNWNBRnhheUZrMlZzcEJwV1lSVSthRWljTWJDNE1hcVNleG9YT2RBd2x4dGZqWVNkTVFxbndZS000L0tlbWFDVHBSWkgyWGdCNFpBOFVLb1d6bE9icEVoQUMySlpldjBRRUxKc2NkWGZSbndBcVNPYW8vSEYzVXNGam1XTlJqa05XemQ2dU9ETGRxTzYxeTJYSTFndVI1QjhoeWNBc3JhWVlBdWkySWdHQUNoaVp2U094NmtLekNNSXhTUXdFb0YvRXYrSEpOMXF3NXdpMzZ3bW1lWVhUeVF2MHduODBzMFdNYlp2K0ZFNnhyTHRUbmpaNHhVMnJGdUlzOS9SRlhFUTZXYWJiZk1Qak9MZ1c3UlFTdDI3WTY3dHJBRHFVREJyM2ZzZnJKa2N6bWZmdVJPcTkxd0JLVXVQTThoc0FNeGZxUVZkN0pNaDlpZGx0VFRtdGlXOGhNMGtyZ1JDdnhPdjN4UW9xa2IvaEF0ekNOdDVnM1ZHdGVqSmNuYlZHeUJjdm1tVEQyV1RKT3F5b1NLQjl5VGl2Y2Q5ck1aOXRsWWhjcWpzOXBrUnFPTUx3L1dLWklUWCtHeTZWVGo5WTVhL1NpUndaSEM5ellVdjBmWWpzZDkvb3FaWlF3T05FeUtzMTc5clUyM3pNZmcrVEtQem9jMlZuNDVOSndyMlFHUUpabm5QbUJIdUFSZjBlTXR0UmNFbkhkT0VpMW9YM3BFdFUrMGhhMmliRW9tSzJyN0h5UnVmY0w0MmRLbURUaDY2cjlwbWs5ME1idEpjVkx3NlI4WHR0cHFhMzl3SCtER3hET28va1hpNTlZQzVMMGdtQ3Bja1FGMUFNV2R0Y0VRZHp0am5tQmhPMUFUc3ZPTVoyNzIyN25OK3VnSFk1ejE0ZnQ3NXoxdFlrdXJJc1FqbXh2VjJIdHpiekVJSmxXdTZOdG9QUUZMRmhtZE5lRDc5UUtaMGE1ekNFcDA0WEMzZ0VPR25XMEQveGpoaFYwV0NiaE95MTNhRlpmampjQ3ZFaWtBbEJGV1oyWE9yM3NNRkZESEZtbEUvbVFNN2k4VTFrb242TThNOTBRMGZYdlEwRE9KejZkTkQ2WXBtWVJ0N0NXUlNWSmFoK1ovaTJvaUN1L21vSTkzZVBxT1c2dzZsUCtBakMvUW15TTA2WFFuZU9QbVFTdFFjOEdxTWJSd21PeUlLSk5NNmZzbnNCd0FjOU0xNlNVTFNWRnR2SzJkdGVTaDVEbmtSaXdKRDlaNjJBMG5WN21kUDNhT1BURkhWQWMwajl6YXJxUkpFRnpKRDdoK1ZmaUs0RCs4cnRkUGNrcHlWbWJiTFQ5YWNuVitHOFdsNXhtNkUwTmtWeTZJTHhhUzRKbUx5ank1TFpZSk42c1dYODF2Z3hnYUZqOHdrZzU2RHRyM0JlaC9IZnpSVGZBczU4eWp4dkVIYWNNTjMvODZ0SWpCMHROZWVadDFxN1krT2xGbFV4bC9NZi9PSHVuL1lMSnQzeUMwNzlZYW5EUnlGWWdsdnVQK3VCQ3Q1OHlPNnU0WldRaDhzcUpFMEhjaUZIdFR1Qzk2anA4TzR0YTR1bU55dUJMamcwTkF3QVpjZ3lqbEVUc0NZemU0Q0JMbTFzdVJObkY5eURFQkNkdXZJdEE2RzZEemI2R2hzZmliZ0x0WXAvemwvcVhtUXJmQUh2NnB4ZzNHOHZtYXFkQ0pSdDRnY1JrVmF5UGpJSmtQS2d3Uzh6enlLQUd4WHNORm1vRUxWd0xjQ3I2YUpIdkVZNTJqaVlvWis4azl6YlVqRGVFQ3o0ZkMvdkhIQXRBeWFMTVlzN0lHbDZqQll0ZDZUbGs3eTdscitwTi93OWRsVE5OdFJmWjc0OUJqd2dBUmd1bk0yN3BZUDlUS0k5VlZWc3dISVRaWTVNc0VLYmNIdGNqSW5PNng0djZETG53Mmh2eGFjRFExRldBUnJUMG9qcjVNR0VvYUt6MFA4SXd4WkdIQzdWZHZZTDBHVnF1c3FLcFdET2E2cUZjaVl2cHNnMVk3VG96YVNmZmYvWVdxK1R2b3ZKRFJXWWMxek1WcHlZbjM5QWZzNTcvS0xWcTVsVHFESVRvKzRoNElKSkhyRWExeUxmaHF2dzNNYWdNaWZoOWU0SVRldnc2OWNxM0Q2UE9MelN0MHU5cmZaL0tjMlRiMjYvZzFOMzhjcFVWUU1aZEhvL1FLalJtZk1ZNC9ucTBNRlQrU0g1VUdzOHpMUHVrT21UaHZnMVZQTHcyWFNFV0dMUVpyT2RIYlZzZWVwcm1VZEtTL3pLS0hOejB5Y3Yxa0dWUzNneEN1a1p2OVRVUlJQS0RXSGpLNGFxYlM5REVUc2w0UFA4bkMrUDZRY2thUENGME1qNld0TnpRdDM1WGIvalRIRVN2ano3c0RHWGY2V01YZExRRUxNdC9Rd2xUOUc1dGZoWjk2SldPK2Judk5OUTFER29LZjZwRllOWGZDRGR5cnIzS2NyQ1pRVWlGK0lWNS9PYi9PSGxMdjBjZmhldG9BeVBtOHlGeklGUFcyQXpkbDE4ZlV6VzVrZCttYUZKWURKSEpTd0ZRZWw3aERpcHlxMjg0YmE3eWw0Nk55NWI5ZDVDOGRmQ1pnYjhxNVgxNUhyWTFOOStvQ2JUdXhEdkJnelo4UU9kNmU5QWpvSExWdHdTUDRmOVExaVNCY3FtWXJJM083S293ekcwK0g1ZXVsSXE3djNuU0hoMWVwYzBVMFVBOWw1b3k1RGFoWDdCYlJZUURtUTY1aC9VUUszUGROTUN0ejI3MytwZGt3bmEwTXgvd3R4OW9hSjFQR29NeEluSGRYR3lCMlVrMytLdjVsMWdaYWY0OWVRc1BENGFIME5WYU11eDd0RmNFcVR2bUFBdExqdERlTVJvdzdJd3RsWUZXSUtENUdvNmdKamF0bWRTRVlwV0oxRHE5ekJoRHNZMTFmVW93Umw4QzZMdm0zeDNCWm53TlBTSUhQUy9Jb2xtdGNnaFU1VmRDZWQ0Wjd5dVFrQ25KcWJCQXVJd01oV1J0L1pNa0JtWDVDVk9naWtiT2FBbWFnZWxscUJVdVp3VzVNQWFyclFqTHRTQWRSVGwxam9zL09iV2VVL0ZwZWQvOWd2Z1pobmlzcWt3YnpsZ1hGY2RBV1lBeCtiS1dvbWo5SEkzUFROZTExYzYvRWp6cU1VWHpPTVlxWHlRZWxWdWRjMzhpeUtOa09wTFZMM1lTcTMrNy9scHgzaTdqVVRYZ1JDWEhjTXM0dk56dFBzSTlzRG5xSWpaS1pIM25hM0tEU084Qm0yUk9JNXZ6aGJnZUlhVDlrZE5ndjdTME5TQTZab2xmcUg5NjF5LzB0L3p4OHZxMGIySHJ2T3JsWXFjajdPRFk0cnNLUVVya1MrUXRXYTJRSmhkcFdlWDA0dWlUWW1OYStJaHU4T1plMkdVL3Vsa0E0eks3enc5MmdKU3kwMjZMSVpvcUpaVWZTVGV5Y3lqelpOMjFtNCtZTnNub3BmNlVCNnc3Rk1xUkxoa0VQdC9zaDFrQ21OK3VnU1psd3dvUmRFMitwVnFOZ0RMdi9lay9GMDg4TGpWQ0xzc3duT1E2U0JPdDU4aHlVakdwbHVlRTNNMUVsZU9CWUU0ZlRxcm5UVnA1aVBGeGxEU3RWMjJtaDJoSVk5RmlSSWxvZFl2M2E3VERqZ2VGYlAxVlZ1dlg5SE1RdkRJNVU4ZWVOUWkzNGlNd1VmOHUvMHdnYVQ3b1pyY3ZIbXVsQ05ybTFkRWVHUXhwVjFPMUhZTko2VGFMN0JpS1BUblBtNW5NekxiV3RBZmVvWm8xRXlhZU5lM1BsY24zb0xlclJlUExWbzFKaDQvVFpYM3hESWhPdjIzQTgwcVpVMDlLTS96K00vNzI4TzdsT3NtR3IwSlF1Ky9zYlBnM1pLcXl5dWlWam5qaE5uWFBDcW0xVUZkbjE2WUF0S252UllxVlFLSk1DdlRPWXFNeWdmVW53TlVzaXN5STJiNGRCUWd1cjZ4WG1HbTRrQ2VodlhqeWlvc2lBUmVVdnZEQ0pkc01UeTVjaytXa24ydVRhcGRsWU1CQVVlRkd6c0ZkejJoSjJiZVEvZzAwZWsrdFRsV2JHM0N5R2VDL1p2RlBXdjkzRGNMbmtSL3pvc0xvb2lkR3EwcmhBd1ZwbThnbTNoZmh6VURFNzRSVzRWa1dsMlUzRyszUU5lMEdySlRFVnlFVEhuRmhJMitRRzF4UDdqOHFkdW5FS1YzcFJGZVZZVnlHNFUwd2w1di9YMUVPbGpLOEtWcVpQQTFIWmkwbWdqYlpJUlFUdHY5OGdhdSs4TGplNisvRi9zcHorTTMzTWdDLzhnK3UrQkxuSmZQUGhSNk9RWkN6bytJSEd1STNURmx6REpMMUpHcmU4SmlTWW9lemczaXhiZFRHSkUrWk03UkJYVkNSd253UmE4LzN1b3dVSnk2RlhBdkxqK0UzYWQ4RWc3ZjJaeXd3RG9VbkJ6UExhNUVOMHEvemtLdjRwUVoremhtZG9TSTlTQTFNdVNaL0J1eHpmcWhaL3Y2TjlkelptdzMzRHczVWgxd08zNC9aNWs2WHE1NWNibEZWVFlNdm1xQWYyU0hpNXFmZDdGZmtEczY0RWFJQmU5TlduOU1aZGY3RmdLY3lRYzNKSGtuRnFEUjd6QlRPMnBIbFRzMzJ5WFQyOUZiZWFQWjJSRGovRUNTZXdwTmJUYWVuQUhyMS93dWRVSzFKM1lDMXZxVzY4ZE54cU4weDEzZmthVXE3THkvUVRLRkZoa1g2cm5VSzdEOTBQa2xwYmZFWTlRTjVBNTVRYk1jaXlvTFpmbUlBSnNkY2hTVjkrSXEzU2ZVdytaRmJkd2VOUGYyRUVPcXErcmNSSklxZ3FtbjY3WTNLWlF5MWZvRHhLQkpsbFhWWGpucE5tWFlqQy9sMktYTm9yQ1AxSEU2U1hlZzFIYVpYRHFOZ00zQWp6dVJPSDNTM05xRVFzREdDVHV2Vlk1akpSZ2wwVWJIaEx5eE9pVFNFaTY1OEplakxlTGZ5QWU2WTZCK3NUTk5ZQ1ZKT01mbVBxR2cyTitOc2RxTHJPTERraVBobEpvbkY3Y1Nxa1BQRTVhK3RXQS9CdmdmYjlJdGxva2xRWTdKTVZWd25IUTBjUFNoZlk4R3o4bHpqMkZnazZ3bFBLVzg1Vjk2R2FqcGx4bkovckQwTlVFZk8rL0lmNkZCcXNBZnhNT1hGWm1acCtwS3lvV1Y5RjZKMTQ4V1Y2U2pXR1g2Vnh4WVFxK0VRc0xQbDJWMGNGdkorK2QyRmE3WG5VaVFPeGlJT3A5aGVQOGVOUytFWlgzS1JPU0p4blJ3bGd4VGRIMWYxNHlPYUF6RDFPUVIrYnJqTC9vMEQ1bU9KQndmTnlRNVpTMzlvV0RhcytBUzhacmtrSVlnWVpHUHlMMGF4T0RENnVYZHhWTTlJWUhQc2lpaTZ6SFJhYTk5NWdqdXBKeEgvSGE4M01ob01UWTdScFpaVEN3NGxDQklCQnJKWW9GNnRWVzROL1dETVlOak54QXA5SVJaR0FKUUZ6Z0NRcnhVckFQSnBwZWxnT05hSUVhN29WVU5JQmtlYmE1NWtEaUJXbWJZR21QaE45cithZjRsbGZ2RGxmNVh3dDZOOHJLTmg5YjViRkRuczhGc203N05zbEI2dCt4RzVkQjVzeFE4RW9JKzVxZ1FqM1lwaTRqMG0vSmwvQklqaDEzRlN1enM0YmY4M0hDdUVyalp0VWxiWENCZlVaV21OQTFhQ0hscmRsSGN3WHUwOCthTjhwcUlGelVScUpycDVySktmak1WYTI0RVoyNnYxSjNOa1V6VHM5TFh0dm9pUzhSTk0vdDh6UHRSRmd3YkpDMWJLWmRtWkNCL1k1U1dFaFpMUGZMZFkxVHlrM2NkeENLZWRkUHZxZGc5MDZWb3NkT2gvMFowcGVSL3JMa3hTL2FSaGpZMTc5b3Ywa2s3a0UvQVAvQ0pYc1cyWnpES2NoM1dEck8vS29kU0t2STFFeFZhblBualR0aThqZDRyeW8xSEZVczJLN2pNT2dUVDEvTU9XWm8vbVBCeFQyVnpoaSt1d0RRUGsyd0tuK0tZQTRCSFhFU1VRQXpraVQxV0tIVW1RMTdENHIrYndZWVVOcWVZNk1xVFlXYWhoNlA4V3FKaThyOStUQTdIMWF2VUNHSHoyM3o5SnEvYThZOHVwK0FHNUkzckIwN0l0dTdKUjYvZ0R6dStaTDBlV0p3QjJuZUhBRG8wb2JWQ3BRNkZ0N09TWSt6UzltK1YrVDM3bW1CdVFSTExSVGZlNFIvQlVKbWdxa2dvWmdOK3BFV3R2QmdncHBUN1IyTVJYMEN1OUszb0JXNDFDalAzMzhmWlJvaEFLY2JubmJJWEVBVmNpbzBGdmlySENKc1ZLNTZNU0UrSHJ3Uk1PcG5ndzMxS2ErZHowdFR0OVQxaFRjRytVdFIrV2NZWWVadW5uSi9WSVUzUUdRM1hnQlY4dEliaE9LQXFZZForVlg2U0Z0cHNsUG10YjhaMW12NHRJS3JPYm5zcFVJajQ1SWtxQ3V0U0doL2lJcC9LbkVZeWE4S1NrN29BZ25pZFV6SmJHVi9qOGtRRWNxWWNwWGZXWm1IVEpMZ2g5R3orWm1NR0owQ3B2VkJBY1lXbmlqcit2WXdZUCt3MXYrKzJZOFA1SjV3YXFoMDBIV3JRbHdQRlRKVnFhd1FlZEFObUxRZjd0azkxTDVielZxNjRvMXhqdjVPcnF6MWlIVHhpQWUvRVo3RFNaVHRldmdYSWFXcHZCS0tSeWNQM0hTeS9jUjdHcjhrbTlRaXllNkMrYlZDcTM4Qis1ekxPYjZpOGdNK3JYWkdDRnc0MkVNTTZLRnRicFZnV29uRGVxclpaeU9aeTZXYWZaUyswSy9rZXdWN3BpV3hudzN5MEhTbVFtOFA3enEwVnM3cUpjT0J4Lzg4VWdUTnJwbE9QeWZaUXJFd3EwaFZ4L25UdUU1eUd2ZTc4SFd0aFhrRWlSeHhKQ1hDS1gvcXZvV3p4eVNYZEVQMWl5WWJHa2JtbmJibE8rWDl6N0poNFZPOWJJSlVUcHJWOTJab2Qrdi9Uc2hsQmZhREpncEVyVm16N2RKVXlhVTNuK0pXNmxpS2RWWGlOVG1iMWZkdDZYQ3liZTYyWi9MNkxVQlhPcURQR01SVk15bkw4YzVWT0tOOFhzQkFqQTI2MHAyeEhQOHJzSlU0QlQxc3RVL0VTTVlYdUZxdXFpYWtUT3Vab2ZqSytUbWlMekdMZFVCcUZaOEZIYzJGZldqc1BNR2NTbWFWNzhYK3pKNG9yTDB1MnhFdkZIUGxzWjVhbFpjaW9KTGZyWjA5SlMvUTExZFpjdkVTbUVxd2FnMDRVOGc5clRodjlCUUNER1BhQmVDR1NPd0c5RWN6SGVocmVPZUdHWVE1bG9iL3lqV3JPWS9uT2wyMUg3cnBkd05FZzQ2Y1hpc0pVbGdkSlpBWEhlcEZMSUw4bnpLRTNGY3grQTh0ODdFZzNzVzdVcmFlalRTOWtjQW05YVliL2xlTUJqNE5nQXRXK1pEbzMzS29mdGRUcEpuUWtUaXpBKzRPNHBPMUJYVjNpZENXRHg3YkdvaGhMV3Y0OWovenNtQXVVWmdiOWN5VkozV0M5UDEyVURsaVJtSEJwaEtZM1Zoa1VLK0htWE0xMitLdEY4NytPWDc3VFBXdU5RTFZYWkNvWWtnUGlKVEZnRE95ZmY4ejVGNUtFVUdkMXdEMHYxZkhEK3lYWWxvU0tCellHUGNQS3NTQ2hiakFQN1RTa2ZmMzlOSStWalZzaWZGQkVvQ1ZIT2lBQ0c2REZOOGIyRlFkMUd6V1phdUJnRTgxRHVFYjExamtTbHFnQlVZMGhuekxTQjh2VmxUQTRmZjQ1U0NtUXNtU0JlUUNVY0ZCaVhpWmV6bGdINjVzNzhFbHY1S2g2cHY5S3ljTUNacFlESS9yZXQwN0N6ekxuWS9GODRmT1puVzJGVWNkSG1PcWhxR1pVczZrWUxObjFKaTVmU3hoWjRpSG93RjJjTDgzZFk1R3BGWG5ySS9GUDF5M0NxL2QwdU56MWRJZ1FFczBxdEZrWjk2Wk9XWWZzNTE2UExzVjcwYk5nYWVOSVB6ZytsQkMvemVMTFFZWWFsWVZJQ1piUmxSQTlqZk5IQUZqekVDZkVRTXlYNVh2NWMzSWx1MmhvaHNZQjJMbHlSa3czVURMcHZuUnpRckUyZFVmRW9DcVFpcUV2c0M5UjdYaUhNaVRMM0tOanNNRjlCY1dJVlNnL2ZKS0x4UTg2RTdCbnBHVm4rY1ZNRXpMZ0xHZjg2cms4Y0RhdVNkR3N0c0F1ei9WcG41U2Zqdi84UUZqK2FqaU9icXZpZkRkUTNPZUdYa1JBTGhOZTRRSkdMa1V1SmNOeDF0S2Erb1hXem1TaUVOaUJoQUs3TFBlYnMwaExvSGdmUXdKdUloazJmb2tVQUE2eHdVaCtIT3JGdDd2Y3JFUElmNEJtaXNkNzhTdkRRWTN1T0lqamxLNlh5TUdxN3V6K2lqQTB4YWNWeDZHTFczZnJKSVZRQWZvWExnUDJ5bTllSXZDci9hVG5SQ3BqTW1LNGQ3VkhDMHV6K0dBc1l1SElLaVY2ME05d0hla2VGMFVhRk1HZ3BzNlNrUkg4UURJallyMmljN1o1c1lvUkRiQUpmZDROaEd4ZzZzbTc3Mk1sZlQrdEh5eEtMTjB6SjAyb0cwSEh6UjF6WnJkaVEvMFVjNUlkeWlvbURwZjA5M0IrUmRSdzBUdHNOenRyT2p3d2hHeTEzNDFvblVQa2x0TFRPQXlYTEt0L3IyVFJtYnVraHRGWFBCM0NiazBZUlhlWWUycW10UTBpQ1N0OFZ3RkdwQ3FwbUNyTlVXaWh0WGdncWtKMnVDNmQwOFdmUzR2UWxaSDRySnBOb3Y4NE8rWStSTnZJbFFkSjBCTk14b1dUdGt0S1EvbS80bUwyNFQ2STZSWnVPTTBYTTY1RmhSaXdDdXRVeUhZbVU4bkVmSFM3a1JkSk5tUENBU0d6UUd1WTlVbm1ZWVpqV3cySVFnY2FmQ3RITytiOHZzNjNiVDNKWlQ3SXVaVmJJMG5aTUo0QlFmVVVyY3V5eVU4eWw1TUVTOUdwQ2RTdXk3Y09XUnIzelpRTzQweVl1WFdEeWVJRkI1SnlJWVlBNjdQM2NLQ28rcVF6VVhuby83eklNTU1vdzdrZW1GYm5aM2xEWlk4bEZ6OGlPUEkySGVkUElPNVRlV24rSmwvN1RHN2dwOTR2bElMUmNMUkI3QTIyWTM0dWZKM2NOZzgyZ0dzOUYwTXMxMlVvZmlNcG9nanZ2d0F2bjRoQ0RyN1Q3OUlaemlxMGtZRitkUHRQVnRVZ3dFU3dBSFIwY2JJMER1M1VzUFBYeTFGdzNIMHBDNU40U2U0ZU5KYkhzVTFJMEFrazJnM29WZm4rUkZZemVPSWpYMEh3aU5SQmpDSThGUWtZZ0ZJUC9aWjdDMDdjU1VFVjBOajhicFJrL1Z4VGVzRTcrR0JwNmQwRy81WHU0R3hNa3FtSU9UcnRNVmlLSmFnOTdpZEVoUldzS1BJL0k2UVVQb0dnQWZRZXVVVkkwQXlaTGpEL2xkc0t2NUNVQmc5UlJQc2RLNk1Nb1l3aFNHaWJndTljdWhZK2FKcXB1MEtMc0YzSWFRWlE5NG4wczY0VmRtVWQ3dmRYSHB3cG0zY0dueVhGeWFaaHE1QUw2QmRiRmp1UzIvMkJGOEVNVXd6aW5wOW83aFdOdE1mNHlCNmZudjlqSnQ0d3hZS0p1REc1WnN1Rk03SXlvSDgvVTNhWm5uNWUrbVdKM2dqTk1Rdk92V0lmWVMwcXJSQlZVNWx1YUMwZFc5NFlRVlNuYVZHVU5VY2VJckRpUURQSUlRRGxzcFk3YnVBcXdaWk5iTnNDMnhFQjVrM0dlZEhzczZqekNnT1dlajFIbmdoQ1JlV1dvYzZpYkpyV010TW1FMDVuL1pHNzgwU0NsYjZIZWd3aVBSSmJMYlpaMCswMXFJOHhFS0E3VU1nZE96Q3I0eTArZVk4aEJmRmhZWUphOWJxWVMyd2RoZkVFVjZDWlV2Vyt3SGIwc05CYlQybFBRY1BPQ3hWUHFFKzg2d3RRNElTOXZybmdadzdiYkExLzZmVEVpMFQ5elI4NkhWcDkwd3F1d2p0cmJZOWRxZ1MwSFkyM0l1dFJLUFB2RG9leWtZSlNMQ29wVVpoWlJhRExMajhoTlV6bHFUMkcvWnNxWDN5ZEZDQ3lxbG1heVBWWjRlWGx3RHdPVFUvT3JJN0lsSWFSaFRPZDJTVGhDRTQwRGs5RDVrdlcvMnB0MHYwWXhLYlF3cUJMc1JxeW8xelpjemNaV2phNUNxYWNjUUZ6N3F1eERuTGFZL1owSEJwVngxSnlVYlJFUkljK0tvYzRxanAycUNuWTRGWUhoaUVPTHZZUVBtT1QrZGJ1QzJDcG5Wd2JDQ3ZLVWh1RjB4MWZRbm44ek5yek1GM09rY2xickd1OGRwYUZpRzdhTUk1bmVPUWdmTnZVOFIyYllDaVpJci83VURId3ZkQys2VXFPWDRha3pIaWpYekVWNFFWZVgrTEJJcnhKZzBqOG8xZnFjRFgzQTF6Qkp5U1llRjR3VWlJSWFhNDNXVy9HbnM5cVNMRENVYmxyZG9RVjNNOXJlSzlBV3dYbjhlK3B5OEVXYVFoTUxUaVFieXY5SDhLd0ZsU2FSRVhNdjlmcXVMUDk1OUtDME5TTkhiOVQ3djA1V3RxMUtNZWhaZWdpcGR1eHU5eGtpYkVQOUtsK3hVbUlpWXlyTlVyWTVqbHlKdFBTMWR3VDc5MEhydjgvblM4bDVWWjZxVnRHMnJCLzBxdHVRWjd6OHFlV2NLelhDRjRObXBnNEN1K1dzSU1ZYy9pYkVkK0NHbUVHQklpZ0k4Z1V5L3JxWFY0dkVnaEJQaTI1eUZWb1ZTdFVLdFcybFZFZFNUaDROSS85R2czM2NWRFBxWmxqZUdtYWtRU1RNMXBqdFFValZYdXZCUmFjRitVMEpyemtodzR4QjlzaWZZUWNXeG0wOXViWXc3SVVwVEk0aDNHZmhtNkRoc2w0YmFyUlUxRm5oQUtDZjNpSkIrWFFPZTR4YVVnVTRGT1VaU0JUTzVsb29zeUdQOTNQdlNaTVAraEhZUTh0aTNSdkhmWVVqVDFNZDM5NDJvZTRIdXNpTDcxRE03dG84dWVSRjFJci9CQXpIRkJNOHc5VzJTeVFUemQyc1JwTml1ZlFIeGhycW5aMGxPWTl2NnZBd00zWW5jUUd5V3ZJTkRmOXBEQVpqUFZuNThOU0Q0NVVBUU1MVmNHc3NaNDllQU1YelpaZGwwY0xVeW5MdXJqQ0F0TlpEWWRpbHU4TS9OQVFkSjJXZmllTFY2S3k5Z3NUaXQ3bGNRS0RFeUhFOGlXNnkxbjYzaUlhODFucXJwM2dhc1ViOEFJZDJma1hHWkNUWUg2MGo0ZFVaRnFia1ZFMmd0azZoOWkyc2NvOEpJUkhJNVc1a3lxaEVqUmZuZEg2ZEJRU2F3MzYxQTJ0VGd4VG00WjhOdy9wVldVdHU1VHh4VkZPZ21UZWJLQmZkZEFKY0JXelkrZEd2NXhRSlRtVUUwc2xIQUpQRXVaRGM5QnpSVXh2bjRiR3gzblN0TW9BSTUyWVdzQ3hCRzFjS1FiaGtQWWtTSFN3ODdHcTRwbktOZFRwUGZqKzhHbkNPVUtnd3JGSXMzS2NqM1RWTmtKbnhFVFg2a0xoaDNpcmJtdnZZeWJwdHdRM0ZxMUZ1cXRiZWFlZ2Q0ZGFESWo4NHhlVUg5R1NsRXV4S1pvWm10eDhMT3N0YjFZMDZFdG41SDNFRTJZR1BKV1gyQXRMcVFjNWJHenJnV1lwQ3BNd1U1K2d4azBYZk5TWDVTbWwyTmxlQWZjQ3AwZGwyZytFVnA4dGhIbHZXbVA4dFBqSjJIY2xhME9CcW01dTlIcUgwcDhNem5vODRsNzBlZW01QThxUzRVYTRjWmxiMFk1TFBLd1RCb3Z5VmUrUWo3MFdmTlF1SXVBMjhFSzJQZ0JJbjVURzlFUTk4WTFscXY5OHpMVFUwNEsvQ3NHdVVmVk1tajZibmhEVTVuby9Od2crbmRKSngwc0ZMS1NEL05QU1FvaStodW1MRnVqYUIreEVJWTlDa2ZXMDAvZWROSHQ3WklvNUd3c2dOMjVKMUhPTVYvaDBzbzZ6UVM5VjFVSFVPdzkvZmlLWE5Wd3VoUmhxRlZHeUx0RDh6NFdDVHhjbHJ3U1lNMU96b2p6cTA3SGs1eVcrc3IyRUgyRDYyWW4zeHloWXVNTHIyTjlEOTJQdUkyb29jMzhkSVZtTnBybkNTb1c2VitpZTNZbTY4bTB0UUdoblNnbW03T1ZZN09Fc1RWSGx0WmFJWm83cHdRV2t0cWJvUGxuYUR3Z3Z1R0ZCb0pWMmVZb1hQOHRiQWswT1FKNFFLRzFVZE5NcHI2ZHhRbTErQmdGTnZQdGIxSm9keUFkdjRITU9TbGRYRW81dS9OTmllNWlZYjFWQlFibEE1QTFWN2xoZUQ3bXBuZVdxOTB2cFRydHBDYUU2MFE1NFEzcFZPTFRVU0FrR2hOYzVDVlpFREZwWjNVSG5NNTB1U0QyWDErdklJQ3YyU2N5ZUx4c1RTNTZkVGJBcmxHdk5heWhCL2tpNXc1WGtaWXBaTWdDWDY1NmVpL2Rhb01hV0wyTmVaUDNCWk1vMUlYVWxPNVAzb1RSOEMraDNSTmN1WnR4SVVKVW9lT3J3aXdtZlZKWGtFeEFBaWRFNU8rNUF1MHJyQ250R2pFY0hZYmovT01ETDFRYnUrV2FYVWZKbUsrTzhxRWZMb0NQZ1pFaXoxTDNDQk1sZWZ6Q2VPYmVTbGkzN3E2ZWsrQXZYcWZseElOWWVmOHV3M25UUjZDRXI2SCtsTGU1N2JsZXNxK2p6M0FkbGVvNlBCcVVQNU5LRVp0RjJKTkY4cUZxcHlXWVhacWtuaHlIVVJTOW5PMEE0c0FGTjVhWThOYXRMMWZDS01OMEdjZ2JxRnpuNW5uWnlZT1psdmZ5RFVGUmplandEaytVQUhPTEdTZDRXWk03d3FHN2RwTmxVbE1kQ2RMN2xYWi9MSGVuWitMN29WbUhWRGJ2eTEyZW02VkhsWTFvZHNDRlRDeExMTlhGR01HS3oyYWxlV1A2UlUyZkVnYnJRM0RKSEZHNjZQQnRuQkhmQ2o3M3ZJOHQ4OFJNV1E0YTJhU1JoS00rZng5WGRsRHpXQXRNbmY5SGNpVkpleGdiTFNUK24zR0dFVnQ3V0FNdGRrN3hUOGNFUGRxRDl0SjdGYkgyNDZEeEl2V2VCVjRVeU94T2FuSUwybmNPano1cVNTcnQ2NGJUdE1sVEtHMjJHU3duT2VKNVpNMlJDeXA3dmY2QUhzU3VHc0NrL3pINUhGUWlnNW9CS1dKajY2N0dPdW4yVy9RRGpyeUoyRmZnaVJNOEFpTFJ0TlE3WkJZbHM0UXROUjFyTXFBZENGc2M0TG5MTk9xRlcxZGVwRU5GZ2xDZW5nTVI2MlFpUStMQ3ZaQXcwUUNQcERwcS80UGVQc0llMUhkc25sbzBKcTlITEcwbFRMT0M5SE1pOUhiNGRmdkRlSVZiUmpUVUFKa3dTeFNtUEJqKzRYMW9GczRqRUpKdnQ1RHptbG1JajVWSW9velFuK0RpZGpkaURiR2dZRjZIUitPSkdKWTJ6Q1JmQ3YxTlBjU3EvQXRpSUZkd0hQRWp1ZDV6aGYvVUJCU3VTZmp4OEZxYTdQT2FkWlpjR3RXMW9SRUtYUzFseXVZSGVWRWt5MkQydjdkcmNTK1ZDbHZjdnNNNnZVRUxJUjNaKzhRNTVCdFA1UCtuWlNnL1EyMENWRVJrZFkzQStHbktZNWtBWEFaZm1ML0ZxSzNKUGNBdGZ5QkswVGE0MDlXRlRlZGFBdHI1OTZ5cC9oK3o3NDVCVHp2dlRhWUl2eVlTd1pMbHVwa2pCMU0wUEdKRUp0RkdrNklYOFNpY2tMZmlYQ2I0QkRvakhlVktzakE5dTB5bzk3d3hzek5zWkNaNFd3eTBLeFAvU3ZycFNwSTc3NTV4OVMvREpOY05NLzJsY1Z3QUhOQUNZR0lHM1MrWlpWSm84Ym9QRVZ3eUVsSVV0QXhuODdGV29nUDhObGNzTGFLbThsaERLb2RlMndjQ083dW5LS0o1TVBRZWpKNUplaUdkTmswM3RrL21DeS9USXRpMi9jb1QrN0piY2hwL05udU5ucG9NOEdzZkxydlBBbk1JU2g3aVRnamVybm00dE9EdkgvRDBrdkdXWWRWUWFuRG1vMkFhaXF2bHg0ZlphU1ZXVkwxODZxRUdqdXIvekdENkpLQlUrWVRXelA3Vmh3eUJlbVpZTTM3Qy9IVnY3WktML29MNjRLd2JzY2hqWjlvblJENHBXK0RjN3BHaTRNSWc5VVN2azB1Z282bEltOTY1Ukdnako1bCs1SGV5OWpMSlJSdXBKS1ZtdUxMVWZub1lTR3crbFV2RU1ReCtkVDF3emc4Q2VzVEw4NjF4YmVNcS9NeE1qUGJIS1hOdXdEb2V3OWEreVg0dUJSdlc3bEhGcmkxaFFKUW5Ra0lXeElBZHRjbmtyRGV3WmliTldLbW9mclFiTmV6d09PRkpmQjh4ZTA5amRUNitlQnNpV1Y0MytCZTVYL01raDdDR0lJUXQva3Z6K0VwSGhWS2IzcDQ4c2pic1ZBcFZBbWtiLzZTN0V0NVRmZTdoN25wZkxaR24rM1M5T0JhWnhYWjhvMXY5SW1TK1NWQy9jWnh0R0RPMVN4OHhXazVJOUpiS24yZEZqY1JkNkhGc21wRnZpMnd1bit0c0NWSStGMUg3OEdYQW9ScDlVU3dIL1hXU0w1S1dXNnJxWENGMmVHZEFPMXM0d05FYTR3RHh3T3IwRDNGWlQzZytoU2p1eWZjZU9WYUgzZUV3S1czendvZE82TjU0Sk1GaXp2ekhxN2FMM1RZY1BoQ2dsZG0vQThCU2RyNjFRd0Vtc0swZnBINGtDb29VYmZsZUh2ZGZMTFkzbmVxYWFsWVBoajdOMmRad1FyZTVBT1g5dHMrMk1JN0I1YVZ2SXBiTFRKOEEyVTVMWjFqcHFWbkhQeFRVbkJ5QVF6SzRzYWthOWxZQmRlNlFGTnFmM01qcWR0SHlWQjBKbUwvUWVjeFA5SkZKYXZocHNhbHNSc1NJVWVFanlVNUQ3aW5lUXFGY2FKclUrdmZnamJ5L0x5R0tzdFFRNUdpTWlSZXZUUDNHd2xmUi9xU3NaWVJzMkFzOEdrVkYyUk1kQzRNbzRLeGxDczEvYklTTWRWQUEzTm1hUFdUOU40eTFuMkJGK0dMcHYya0Q1bVc5SUpFQkp0dFJXRlR2Tktabmg0VWlVNEZkenl1K3p5MUFGY29HYnE0QTNzQk5qODNnTGhEV2hZTVNxRHZTdXBFeUdJR3VvU210WVA4b05GKzZtOEJHdDByaWttckUwTGdBc2tTMFFYQlJWbDhpUnRPVDRnZ1lmaFR0SjBVMmRSME44UG1INm51NUJ1STVPNCtjRnBRVFBOZlhKWGZJSU1lR0paT3JNa3N1R0N2bVBEWDhhckUvYi9Dc2NRTUhLTnNBc2Fxdjk1RGNBbWhRZERJYVM4TVd6cG5RSG56bG84MFphTmhRb1ZxY3ZmbmFkVEFxNW9pK0RGQmJadmxZbm9QMENhcVYwRDNvdUg1V1hsSHpKMVpSRUg3TUpJQjA4LzEvc1FPOXRMRUhDUnN0Z3pMd2JQcXRYN05adlNRME9sMUxFdkdsVFZhUHZUL0VMT3lNdVp3SXdqd01Cd2o5Qi9JZmNkaWNZN0NxQ3Q0YjNrNXpubDVGTUsvUFF5MktIN2xudGRWVWQxNmRZcDBDNkgzMkx2d0NFRXhzcFgxWmh6dnpPSExzRDZ4cXg3ZEx3S2d2ODd3b1BEeHVKL3kyUlJCSTJ2TXdsNklTcnQ3VFBwTVFJeGMwbjBHQ21RUTJacjBobXRFdEljczB5S3FmNCtXM3llU1hFOStPcXYvM0FmTllHS0VVOHVCVVpLM0toa1hCSk9kNVRFbXY3OXBkS3JhTFV1TURtWTNIS2R4eHhEb01YRHFzY1JkLzRFd0NSY3BrREZuRTEwdGpmbS9pZE84Sm9HSmVkU2JWRC9LNVViM1Q1c2hubXhFdjgxZStTaDhGMHhoK1dDS2RrUithRUxxa1dnTGMvR081ZEpkcU10YzRGT21lZnE5RGR4MTVSN3VrcC9FOGxweDdzczgzR0VBa05MR0NTOC9hSEVnbkt4T2ZGZUQzKzliV0NqbDV2Rm5uWmlGSDQrQ1JpY2tJTDZVTEM5UFpnVzlVWm5RLzNRR2Q5czF6UndTQVBPTlpQQytCU0YxNjY0RU5QM3VRTlBpakF6UER4cm5iMFd6bm9tR1hITVdiL21DVUFybTY2Um8xUVV4T21iR1RHMXBWZjhGQ2p0Tm1WY1pvZS9hOXhIMm9rQkozOGhJdTNhcVJhakRSNzl1dnBwRTl6OG5MTURKbWlGUVBnRUhVT0taZzljcWltUk9zQjVaeENFNkxrcTdmaWFKaW9naVhWM1ZybWVuNkFuMVlnUEc3QVp0bUtDai9zT0FYNVViVWZqbTY0ajArS0pWM0I3QkV3dDUyYVBSQmJUc2g4ODJQOTFLemNyWWlJOU5ZejJFSlpQbXJDYzFScUxGVnRoNDhkTVZ6eENHb0pYOHkwd21ycDJDTGlmR1JQUnBCYmtsdGx0WHFOUnlOVTl2TEJLZFpkQXkvU2hvQkViRHJMRkN4eFpPczc5SGgwZWhYYW9HMUNIWFBlYVVTK1V1RG9WVGtLTEozcU9KdnJFWEFxQlE1cEx3TEliQ2w3MnVnYWVkYWNmM2ZibjJJWXFFclRwTnlzOUR1UU9jUXlFZVQzeExRMURrYmRkRnUrWUQ3enREejBVb2UvVERreFllQmRibWdrdEpKVXphblNHbHhZT3JpVWFhb0g5aDRzcXhjZHB0cER1c3VnRVVJMEN5UjFacmk5ZUhnYmxONHdkZW5XRWllMThCQTd4Tko0aGwwalhlWEJLQ3I2YkFVbWlFNk5BT2FlZG5ndng3MElmdjB3Wlh2UmVRWHZsdEJUNW8zZ3dWMVYxWEp4ZlZnd21KNXJ0WDUwVkc3RWEyMkFaWGpZdjMwR1FKanhyNXVueVdIWkdKVlU5TVNRbm5FNVB6SkFXS1hSU0EwaHdQZFgrWmxiNU0vWmpiV2xkemdvZ3lvRnFya09zQ1piZDgvNTYzNjJDdGJFNTJLem42MUJxMFpacTJoZXNSdWgwK1NRNE5mT2ZwTTYxOEpWTW5hNHlzaTdPa3JuVkYxWitnc0RReVZ1ZVEyRGVXRVdnYXl1ZzYzd21NVkxiWmxsU0JrSTJIZjJocUJLRVRKc3RNSDNnVGJyV1N5MHM2V3kxdW9PTVlDQ3dSUXJCQXhoWGRROEVuSVhSbHlCeHVZbTkxZzVSRkRLS1FOMzVLWmxZSXNKVmVOcFNHVmtUNWNWV2IzL2pjaEs1bmUvUHhwSVhPNlNzRjRjaFBleEZZakdjQmp0QU5VbHdONll1bDRDc2VnMnhoNkFGWXhpekN3RHRSa2xGTWlRekhoTEtUUkp1T212UFY3Y3MxMWhZakxXUDR3WHdCQjhXYnQ4eStHSVVueHRPeUJXT3daM1BoSXUzNzdPbU8vSjJKSXBZM0JnaHFYQm1zdkdscHFoZ2lTL1ByZHpBYTM5QnJDZThiamxyb0FqT2JETVJGQ0piaUdXRUZ5QmhDK3BuUUo5V0RraU5YMGpiL1U4ZTgzREdRYnFNLzNHZ1l5NjJOWlM1VnQzeDE4OUNJOUFUYzFXbUU3cHphUmlqL3Z0Mm13cENmN0RNTko2OEl4NFFVRUd4dXFvelZDc2FBZyt5TjJPTk1UdWNuMkFKR2lVdnBjRVo0RnlPZ01XNk4yTkgvQlpueFA5WHE3VnFWaU5WWkFKcjBoclFRTTU0SXRTY3RrWFJ3c2JQRkVzb25RcmhmVVIwdGwwRWlMU0N6YVRVWldZUnFOSktRbmpwWlg5UWRZV28wS3dNdmhpbEprRllIZmxDenFWNmErV25jdFN6YkZubG5IbzE2SklhOHc2cjRFcDNITm1zTHF1QlU0NVgrRUZCS0hJQXUwZjBpY29kTW5GeFUvOTJHZFNERDhyU2FoR216NnV1TkJCdWFUems0cFFSM1hEcjhvd2ljNG52Z1VtM1FxaFc1MjZHTjgvYTFDL2g3M1BQZERMSytlKzU0TngxU1g3RGVTZzhjcUlHVmJaWE1EMWhOdXBBU3RwSWJGWDkwL0V6bDUvSHlBYnBRV1lMQTRqTkNyRXc0YzBIQlp1MUVGQmNrZGwwZ1VtUHU1LzU0L1FBa2J5N0VkUFNzK2IvTXIrWUE0U1drT3lsTzBONHlLeUtPbGFnZVB2SThhOTJQSkNQb2RLdGRSRklpY0c0R1Q2N2c4UGh1VEpmK3JzME44QzNlWXJwK3daaVJzbURza0RWVkFPdU5kakFIWDB2UU0weTBIVmlWSjQxZU9neVRTTzhzaEdWVENuY3FtQkZScm5pZWxTemNtSnpUQkxQZHNJOWpNU3hyangwS2dWd2hrZE05V2U3NmxLQk53TW1CeDlXU2x5L1VtYXM3NjJuTG8rcUtXSWFHZUFCUEFXTHNkODc4dEN5OTVuOGgzNVdRWEpCbkZaQ3dQbkRUZzJmNjRkaFkwSGVHOWtXbjkxU3NYNEswVkRBbEJTR2JleWd2VXRvVlVVZDFSQ2JwVnZXTkhTaDYzTmp3TzJQdGdveUdqMTFvVmJPR01HMVVITEhPSFMwZDE5RmtuYlU2MEg4UWRtNFhONFJycVV3aXM1Q3U5NXZQM2RIbEthRWVHK2xBQkpJTWxnMGdIY0l6Z3FUQmJjeFRKd3hGdDJ1d2dmdWx0Z09UQ3o5bHBuRllYMG1hdDJoUVlUbXg2T0NyK25KZ3R2ZGpzMURsOGJBUEdtUjE0OG44Rkg5SEhCN2d1bjcxbll5VmlYanZBeXhKMGJaY29HOEpubi9YVnlyVnh6V1dQazVwU0hUWERYamNoLythY050SEpxSFFlKzBlajl4dXBJY3pRNVovZUpkRVM3eGlKS0gxL0hocHJCMFNGY21aeThoT3pxR0R0NjczSnVzNHNDOXRQQ1N2Ri9ja0p0MnZFTml1bFcwUCtwdEF1MVN2NkRZdWk4c21VZFlvdjNjZzBTZmRDSXNRZUpZdk92OUNxcGNueElSYVdiWjhEZzVBcWxzUzY5MFQ0cW5nMDhkNlhrOWliMC9OR0hrR1Z3VU5CSnU2K0dmbmMwdnFkTXdQRVhVeHp0em5NUjNjb3VQYUFyREVIeUpRVEU1YjZJbTRXaExqSmFWMUpBUWYrNFhna09YK2hYT0doRTExY1FtdE5TNHJNZk84a2NDU3IxUDNCL1VCcUlhUWp0elRsWlVNazRXZTloZGRGMXlhNGVocUZ1RzFVdXl1a0l3U0RwWk0vS3dyRE5KcmNra0xYYkl2Nm4yMmZ3NXdUSWhtd2VKTVdXak9vWUFTZ2xOSitPK3hJdU4wVE9mQXc2Y2dSNW5zSytVd3dSbUtTOGxNZmdOSmMwZG53bk03K3ZzUVpaeFYxQ3VYMnl5YW1ERGlySnArSFRjdElIOHBaZ3BrZkpTV0FuSHZ3U3ZLU0hrYkxLaGtOOFVVZGN2dWgyblgwWE16UVFac1NkSFFVYy93N0YvZ2xGRUdXSHdGM0ZYeHc3MFc5Z29pVWdoM050L2lGSGYyOWJRNSt1Sm82S3FxQ1AwWTdRTjg1NDA3cGs3blg5bC9YUEFQaXVOc3J4TmVtcGt3THFxUEp3MXpYYVpYcDF5ejVMbDlZeE50Qjg4MCt0RjNaekMvRmp3WjRSWTdEOCtoQlcyQWxWSGpBeWFGVkpueFBWOU42c3hXa3BXYUp6a3JXb1Bjd25hdTNrc3pTcHk0MDR6cHFLeldYTzBOdEFSc2FzcDA0T2Z0UTRtaDA3S2cvWS8zVmJiNUwyN05WaXI2Z0lUdkU5dk9CYmZFSzNBcFBVWFRsbjRlTUFrMmNsR2xJY1JLdUE1YjBJZkdPUC9SM0xTWVhvZ1ExZlQ4bnphRUdSNDgvOGlka1Q5NG1wK1oxT2VyRkdqQ1dWMUxQYXZHMHlQaXhEK0F5cDlSUWlmMTNxcTZobGFNS3pZMlRzOWpiNkhDQlVhWmJMVzdXcHVqNWhHemU1c2k3OGc0Uk12SVlPdVRaczZ0VEE1TDI3V3p6Ym5wL25ucHlOVzBic2J5N2l6UE5WaTFqUnZWZEQxVXZkbjhUbXdXU1lud3B6ZkloLzdhUEVrcjBrcURSSnJTWXNKM2I2M1B3a2xWekowT2RlWEdCTEkvcHQyajI2Y3VVZG5DZTZpR0hlLzZad3Z0MU8vRWxmUDJ1VWlDMS9XbnhtdTRoME16RStXNDFWMW1rMDFaQmc2R3UzNWpwRndWS3JJZ1Z3L1lJR0hsNUJscHRlNWEvYnVmN3VaZjRpcmNTNVMvdm1zTE9pRkJuM1V6eGMrVElrUVNPUDlOY0U4RzNuTHVLZHRWUlFZYUJLWnJoQTNCT1dPZnc5eS94RjRXMUJxRnhZQjl6Z1ZVeW51d3hkRHMrT2NkQlI0VjEwdTNEdUc4L2g4SzFBTTM5V1NnRTdoSWp4NktrSTAwbE9NanZMN1RFT2ZzSUhESWlJZGtTaUVsMWdkRVNweWs4bEVLbStxSmVCYWEwNHU1VU13RG5uYWVYVktQRzFXbVlPanBKeWRad1Q2QVIvUFRUT2M3eE5kTXJiSlNjbHdiWXN6RklxK3Z1bmRXVWNoa1N6VzdqcCtNbERMRDNrMjlsSFh6N3RHWVFvMEtLc1ZOVGVzdllyd3NqT09FeklVVEpJdmlPMjhja29OaDNJdjcxa3Y1dGUxRUViNjFiS3lsMzYrUjZVZlVHT3ZLY1BnOS9QeGdlaWljbC9zdWZCeHlQVkVTbUN6RnhDUmtlRFoxL0Nhem55WEhmOXE0TWVudURrcW1BNU1RaUZteTVyalFKazJrcExleEhhTEl0c0ZReE16NXZURU0xQVR2aUFrbkdFSmltV0JHL0U2cUlTVEE4cUNwK05zQUw3SUZpSWtVNXJRNEVlVC8yWFdjQzFCdnZJUHFydFZWN3lNaDN1cXhvVi9ZamEwSk1SQnVRR2E5S1o4cHhaRG1qa1pubmlDZkc5QjNybE9ISXMxcEFGaWxyRWcweDZTM1dpREZZODFDcHZJMTI3NDBVWW9wYXZtWmg3NDN3MUFGenRWN2pzU0prRExEVTdGTk8zeHhaWjBSTjZ3ODhxMmlsdlJjOW11ODdtOU8vOUlhS0VVN1d2UXFBUXArTkU0T0hPZGxmU2grUVZKQm4rY1crUW1HOWlodkFnYlo5b2xCcXhqSWUycWwvTFhySVJOdTRua25tdW1FTExaTUd0aG9QSmFSNkhLdmUrL0lQSlNDc2V6eEQwcHNvbzJjT1BsNmxVNUhsby9oeWxyazFnU1QwR0JSbitqb0FLSTFhaVErTzFaRHphN21aK1R6ZnAvZUtBQWcrRW16UnZCM083TGJPZ0hEbDQ3cHZoTVJJblQ4NEJ6VTJhVFpFV2pMWDQ3UlVmUldPdEU4Y1pwN05hd1lRUVRKT05WVEt6Y3ZJWVU2RTRubkVML09IMmlBejA3RkZWRmkxYnlCQkpveG1GcERkOHZxZDJueVk0NXhMWEN5UmZQZU00akl5c3N2cUovdDV0ZlJyV0VKZEphQUtHd0F0N1BYdUxqdkFWTHY2VUpLTnAzOHhrd24wdys0bW1BQW51Ly9NMm5NMFRweU51TnE5c20xNDRCa1lOKzlvTkpHMXRjOGVTNFg4Q2c3V2IxK0tzaWlidXNSemM1azFXUlU5Q2R2YTFldEhiYVYyOS9IMDEzQUw0MngyOUVvR1U2NWZoeWNLR3FOUGk1VGNTTzJNWEF1QmVwdWZRZTRIVHZqWVhpYXdPK093cDFWSXpIcHpuTk9HRytyQ3RvVFNjajNiTExib0UrTEdQZWs4U1ZuVVdWSmdyaXhiVHpTYm0rQXlIT1BHMHdiV29QU1A4N0d2ZWlIK3ZJK2NOdnU2clZFa2srSjJqSHd2VTJUSTRUb204SzFRRUFpUkEyZFFOZkZ5QlZpMGNhY0FEUUIxQmVveGVVUjRNd1hqYnQyRjBKQ1g4R2ptYnRQeDBFOXhHK21ZNlVHZGRZSzFzTnIzUHJuOTUwUTNFU2w0aldqcU5YbG54VWVTS0szQm9kdEZacTE5TDBDQXlkVVVXMDl5SzdNSW1RK3RSU0lWM3lkNUxJY0pZTWRvYjhvTTFQY0Q4TStwSXgvZmM3QXVQcG5mbnZkMWtRai81dUthYmJjTFNVcUdubXNNT3pqeW5Ga0JaekhoSEVSNnNKV0FjTGRWRWdSSGMwanErUHNFaENQdDJ2VXdkeVA0OVZnTENJc2p2RzF5TkF1cVdTeHk2R0kvOGVXOGxCVXB5UGNIUlFJcXlZcjZzcmdVQ0RqeS9LdHpZRlA4MEFNRkZXb1dTVzBITUJuZ0ZSeFByNmFkSUVEUWxHc0wvK2F3ODQ1cnQ3WFovTGlxWFZYUWt2VHQ3dVY1VEJPMUJ3clpXWEJobEU4ZEpnaXh1NW1VMERYWSt6clhyMlladzVZVm9NTGlFM05XblNHMTJlM214OU8vUUg2NUdIUmY3VHp6WW52dHgxeU0xU1cvdVQ4bmo4RUZKanN1NnloSlR6SEkzb21CclFqcjhQemxpR1dDQXVhVzJvTWpHZnp2bDhJbDdaTEFqTkwzZ3hiWUVoSy9uc2VZTWcyZ2QwMmR3ejA2R0YrN1JCSlJWM1VCUjJvN2tsWDJqaTA4eXNrNkNueUZqNEt6MWgrSWxJS3lDN0JmV25FUmQyUDAyY0YyZE5KNmJFTEhyeHRVb3Q3TVRkNFJZSVhnNGNXUmlUMzk1Ym5nYnpZZnY4WnpkZWR3MExLYXRtL2oyQkkrL3k3TzRaS1NDSkt0dFplZndmbTM1MERWd0w1QUJtcnFWdjh2enp1T3VmSWpSNXlURm9nV1Y4OHRVdytsYzBsdlpSRnBGTnBuekd3UFMwZ052eG8xVE9Kd1ZRei9PVzYyV2Y4ajhUbFRjdzRqR1Y3c0R2d2V5MjdNWDFobzRmdGkzME00dENQT0IrV1NsT3FoVHhDd1dtT2xVazZvQVpVQVBsc2tEeHh4Z3YyZUhFR3g0b05sTWZSd2VRdlVRRDJtejY3aVFIeE9oVUd4QjZ4SFpFb2RqSERldHM2UnhoSThJaEYxS3dSajFnTzNBZms5S0FmcHN1ajE4M1YwenRrSEQxekgvU1dLYzcvM2daZStyTEZOMmdoaGxoL2IvUEtiK21abGswM0tjUHB6Y1FxWWlONTlYSFlaUE14Q2RTWDVoV0loRHZIbUd4UlhBcDhNQ0t5bDZxd1Q4bEQ1eWdSbzkveEM0bkh4eFJtK3pEc3lEdG1pK0djaGR3NWNSQWY2NjlUMGJmVHYxMU85ZkVkUWhBRzB0RGJvT1VXUjRxdVhEdGZDVGxhNXZ6Z0RrRnAybFdEMWlJNnRzUW5FbnNFcExhaXFtcEh0eWVqTnB0ajRqUWJHNXBaZ2tnUkNFcGozaEZiS0h4UGVubWl2MzFVdmlEbklGcjdOTjhoeWpkQyt3TzZXbGkxcGpkdXY2TFc4M3paSkZBdXVtY0s3TlVtTVNRUDNlWlZ5Q1V0SHJFdDlkNUlCSmY0eWpGaUE3ZTZtdnB5UnBSbCtMYW5BY0hLTWp0RXl2Q1BBVEh2UmtxcllmRnNra3RVYmVtUzd2aE5TOXBxZy9yMEpxMUNSZ1hialRmV3ltdXJNSHZldEhNbjFYWm9EclZQNGRWYllVNXdGSExXMmhGM2JzQi9GTFg1V2NnTXZzZnpDRmZVaVhoN2d0YVJ0TlpaV01iNTkyeTVCMXpsRmY4STlWVVNCSWpFcDZCejBFTmpxSWMyN0lKdmtOZklLR25yaGR1VTFOcVdHd1JLUDNTR3djMWRYTlRRekZpOHRzSnRLTnNvR2pNVXFzM3Ewb29hZ2RtdUlIVFdBNjVPbWxMQWRFK0E3TjhLN3FsVlB0eE1tWmIzVE4xc0hQSU1DS1hndy9iTnhOZzFCTGxzditHT3BFKzhzUlFaaWE4czdqZmR0SkpubU1aNlFweGlqSTdsM2I0QUhFaGJiRTBRWDBpVXhIYWZuNDUwVUlxT0xFYTd4eTd1M3o2VG5XaEUrYUhWZXRRVS9nMG1OKzMzZTlqdi9DUnpBUEczbVVGOWJ0a0Q2aHB1KzQxdVd4YkYvcGNSajR0NXgxdjVvbkUyeVJHc1JGWFhZZko5MVo5dlg0Ly9SWk9lcEtydWN0NlY4MVJUa1B4eS8zNGFLcXBsVVAzT1Y5UnFzYXpUYW9hZGNtZ0RvaDFEZUt5dEdPanlwSGhNS0Y2SGt5NDNUdVR1cGdMUXR0VnFtRU1Pd2VhR3ZxcEdCalBWS00rQXJndDNWN1RWU3VhY1JRbnh0ZHdmQm9tMjBkeFVwcnJHZml5Uk5ZZEIrTFVRSXQxNmgxQ0l2NzdUaFBudkpwQzhDQUlaV3ZveEZ0aGJIWkRFVEV2YUlEcEQ2b0JpaUtjT29ZU0RwbmJhemY3c1NZcGQ2MlVJaHYzazh1VVAycW8xOFhLdXBKdCtDNXdQMXM0MU4yVFRmOXVyWDFZVGFOSjFJNWRNellKNEJlUnQwY2xkQnV0MTM1dkVxWlFHZ1ZxdU1OQWdUU1RtUlJlM1puZ1k4ZWJXN25PcFg2emJtaUtXK1dIQWhLVTZxYXVnZFQ3a295VEJvWjRLZlpHSnZONnhabUtmbE9XakVOZ2ZWRU9iU1JMeldWUUpjQTF2QlZnaEM0c254K2l2NGNzdzRPSmlKYWhOME9YU1VrUUUwYzd5Z0dXU2dqWVNDTW5EUHJiMTk2R0dTd0M5c0Z5dXRMMDIwc1F4c0trSnM4Z2JoMlNXcVZqWnY0V0FtdEZ1b0JNQ2Q2eGNaMFZaT1RDRlNXVnZWRmVkR3I4cUtCR3JRT1lIWXhlVDc5bUE3YlRNdTZ2SWZNYVloYkJCWWF6RkhSWERsODBiVjVvc2d2ejhTVitpMHpNODJ2RUhJcE9BaUY1Q3VNZ2ZyWnhUTm9iLzRCc3lCZVZKSG1LREVqcFFaNkZBNFdiRFhVUUFzTzg3bjAvNGg5ajVPSzRlUXNBMlFac09BZjhnd3d5blRPUWN1RGxieVREb21WdEVnL3VuQTQ4WCt6ZW8wVmpzQnl1ZjBTWnRDUksxcDVRYjAyRUROek5QZFFndVp3elk3Nm5yVE9TdnEvbUY1V2dIcG9jZmpOMU9DdmdRYXVJeDJ0THI2Z1NQOG02N054cjFJR2ZGNTUvK0tDM0lCL2drSmQxbTVqUFh5SWIxWjB1aGtNUjhkeXFReWg5VXN1SjF6OFhTeE1EbWVkZytXdFhCR0pWMitwZGdlbDkwTWdIWXlLTnh5aHFBbkQvUjdialZEVHZ4K3prQ29BdENqYlR5ZEpGallnellmU1BFUVNhVzVkRnpZbkYvU0NSRXk0VlhOVEJZVWZGNTJyZW1wMjZqYVZkZ2lwWk5KVEdKOE91WUlNOXZlc2VraUoxQnMxV1lBMUgxSDZva1puMkN0UjJ1bWdoMzFiakF1N0hvTmY4MDNTWW1ILzZPRVFMMG9tb0tRb0xPeHJIZ0VoMjRNY0h4Y0p4eFI3eUJoZXRnNHBSTEJ1OGQrYVdNQkUxQ1RoeFkvTmwydUx5SFdxQ3QwWEE2dzczWDVUeUV2OWdKOE4yZysyOVNITmZlaEI2T1lPcWx1YW5wd2thYWFOR0xmbDZQb0ZKWGhWOUxLVG02Q2syZ1RrZ0gzZ0M1Y0duRGVtNFhFR2t6STl0YzlQenlPalJTRG1mZ0d4N1B1ZldCeEJ0dlc4MkJ1ZmwrMHNwTDRnelRKU3ZrcGNUOU12Q3FjbGdleW9CVm43L0xZYkNGRExKWDZ3U01LdXZObWNPRE9MVkxzUXE2akZPbkQ1a1Q3Rlo5TlpOOGJySXZibHMzU1A1QXN6Zko3cHdnSjZpL2dBSm1zcmY3ZGxLWmNFKzBOby9pMDVwQ2R2Qk9QWFVzNzJubTNyaFI5Z2xNRlFoMitqU2pnQm9tWGNLWWdlMnpzYzc4bS9aM2dWRWFWdUM5YnpvbTRzLzZQdUFwaG5sYy9wanZkeDh5aTJERUh5UWVORlVVRXVjTlFpNmV5dkVnVlFyeXI0V1FDeWNzQnhGYlg0V000N2pGVHJBRGpnL0MxWHY2VzBGTjhHNE5ORVFYNEVJSEd5aWR1UDBDSm1wVFliMzlUbGx2SnptSTFFelVScFVheUNNM1VhNEdqeDBqbnd4QzBaSDkyalZHd203YmNHRm5LbjNiQ1BkSUY0TzdKeHp5dWwxV2ZXMHZlNXQxb1JPRE1DS2dxTlY3empyUy9QZzRHMTNEN1M1T2xhQkJoNXhrRElEcDRSVG9yRmxiUnAvSXBmS3hGRE95WXp0czgvdmN2RCtnc2M5RUFCSlJGK0tRWTJOd1FrZS9KMEdRREtMVDVaOVc4UHprY3d0cnN3dmRESlR1c01DTVZWbzNjcDltemNydFJtZmFiZjhVNEplTituNDdEelA1a1hYL2sxYXNkKzJJR0gxWURPa0FQR3Qzb3ZaRjBKYnJWK1RPeUE3VGVHeE90ekp0K1FXSXNFdS93Qk16YzFKTzAvNitiZXVUTnRBVU5PVlNpWSsvb2ZlK2RIZlIrS2RxTTROZmJodFF3clNteWtYUXg4KytrSCs3amoyMWZXSC9XUW83bFlSbTNQYzR2T1RSU216TExkVEJxTU1NY21UbmdiZFhTZSszelU2L3hNa2ZQUnNkTHk0WUFzalZ1WDhOdWhPWjJKS29pRzR4VjZqbkdLT3BGbXhnUjI2ZEhleTdyeUR2Skk1Zy9Td3NvVElVRkdOTDY4TkcxVkVSYXF5OEU4d0pBc0t0dkp1ekM0dW1RNkdYblVBaGEzdXNjeEV2cndpSmdOejRIeFpJQnRFNTJBRVpCR0J0YitPY1FoMkRLVDZMWTk3dVJuVEVPOEpiczJzaGMxQ3djQXZ0bFZQY2lNSWF6SSsxanExbHQ2Y2lmdUVldFVpbmJhL05YZ3daR1ZzLzFmb0g3ckZvS0R3eU1RRGdxT0ZEMk9pUHZGR0QrYXh0Nzgvc09sNE5TWTdqZnlQTkU1VDd3ZFhWSEZHZFBDa0hUbTNKNlVjcFZST293M3lLbjFDZDRUWUFGR3pFaU5pTW5OS2t0VG9VM3cvcXpud3FtaTVVaEkxS1FLQzBGZlQwN096RlVkbkF6cnhkcVdOZUs0dlZIVXptU09zUXV2NjFsaTArWjhlcEFXc3VaL1NaU1hVVWR5dnZaT3hqamowVkduWFZsQ3E4MFNlbkxPTTh5dU81OXNZd080d2laWW91aVRlZ0lZbTdiTis4Y3NISW4ycVJmZTFQODNVNjExTTUzK2VSbEEyeFVQOTJaaG0vMmEzV1JVV1ppRU5GSHNjVnluNEppNnVPWEpFcE9EaU9MekVoVFd2dy9rN2NwYkxIUFlXbDV1Wi9ibGUreExFVk82bDdBUlVDSDY1cDJnOVNha3NHM3RRTTAzWHAzdG9LSFFlUTk4NWh6ZVJWTG9Wck0vTThhOHNuazkzMmloeWY2UWhzV0RhOXhzRFpyajdObHNwSWp1U1VzbFZWcjFDN01kMFFTaitXTW5ML3lnOTV4Wmd5SFFhbGZEK2ltSlhybHVEUDY4V1ZkRnA0Q0ROTDdWZk9WRG1NNEMyL0hoTDQwV1gvRTBvNDZDQ200cHU3c2VKblJadGlBTU9Ma1hJTUQ1L2pxT2pSY2I2WFZCRHQ1U1dVK1lvUXdKYTR2czk4UTdUbWxQRC9WYVR4UVhQTlBKdSttMnNob2ZDTzVIYlZxZEVOUGkxRXlRQ1kxcktZSjlSZ3VGM1VWbjdlYXNDNFoyenlsdkVaR0pVSHVTenNMdU9GL3JYUExXUFd0QjR5cGFCNkx5VU5pZHV1Ujc5MTBhQWhxdDAzUitJWkJzMUhHUEtIUzlLeEhMQ0R2cDY4L0NjQzdXVXZzYmpwUXpwL2hBODhuMENhSTJJektlWnl1RHZOcm9hU2ErZmtISS9XN2N4elF4dFV3STU5YU11MnhQeW9mOWoxRnp4clJnZ0lBWTZRbTB5NWFXU1FGNDBVUG55Z2R3ajQvU3dyZGtqcVBoL3VEbk03dDZlRU9SbkRkbi9DVTBUQ0U4RFZKbTV0K1RzaUEwTmhuZVJjTmM1WDFoTW1HS25pdlh3bUlXQVdNZk1FczZVa28xTDBiV3loWUoxNHlycmpvbGRSVlh5TG5VVFBpeHdrUzFTVmxNV0hvd2tVTnFrUFU4Ymh6VzN0VDQvY3d3YVk5dEkwdHZORVhXMitTWkdHeGRZd0Y3TjN1ZElQcFhjczBWclp2R2lUaS83UlBVd2hGcmRRdm5rZ3JtQytUUkhoN2k5eVpXOTl3aDlSZ1FuOEF3NEY4UmJNNWtvd0J0VW5NaGYxYkpjQ2hTNjFrR1BDZUZOU2FGSG9SSVBFUlJ3c0NxTmlpQ1lGOW1DbW9sQzg2THVVN3VOc09tR1k1OFozaU5OajN5UzRydGlCMU92dVNrMC92VDViTmsyYnhWVytMMHBZWldaMUM2L1NhZ0RFNWJnSnFEVlJhYmNtMEVHaTVqRlV3TmNRNlREQ1pKVDc3L3BudFMwb0JEczkrd3EwbUJTeENYOVgrQzhNdDcvZXgzd1RxMlBHUjAzdXlqdmMvNmV6a0lYR0gwMUlhRDR2V2JRci9iQzhhd3VMQTdRVG5VcXBjaWFOWVRvdnhDOGZYdCtsWFdlVllkR2JiVlcvNEtmSFpHK2dJL3Z3aDJ4bmNwN2Rxby96aVBVekVNT3VoeXBZOUNwMElSNkpMalVETW9KdHdKZTBGa1ZHV3hiM010NFdPL1pDQXZSc21HdDk5a0tJdVB0cnUzTU9abmQzQVUzcVJTb3JoVlV0Y05nL0s1MVVxSWgyZjI4QTk1d05Tb05lRUZIZ20zNXZ1Vjg1UStUejEzR0JRbm9sUVU2dDFubHRxMHU1S085YWR4TnA1Lzg1Z1NMZ2FBLzdnS1BnckRCdjNvK2k1a1U5RmU0MGdLWGlycEozZ1NkMHBjTm5MTUp2ZmQzdXlqUmtRQjNWUGJ5SmtyWVpaVU81OG9EVGZuU1g2VDJBVE9pam9JTWNyMXRMdjh1NmVEcFhNbGhoM2FwQVE1QmF2RjZGRmw3bnBXRDZVQkRCemYyYXhxZnRRTGdHWS8ycWk3aDdFUmZjWm5CZkxZU3phL2JjZXVPcmt0b0tONTFhODYxa2VZQlRvczJUY1hHdVdWNEtoMEtYUW1HVG4ydWp3ajlwSXRYWjg2RUp0c1N0aWNGenh5MXRKY244cDUwQTZHYVNSYW9ZTklOdEJ4Z0kwdE00TFpNc2RiWi9xb3h3YXJIbVhQai8wb1loTU5ESEltQ2VHL1QycEQ2MUJVbENXYVdmYjc4aW93eVAxYVdaNlZXbWtlb1B0VEdtb1I0MW1WNGJnT01oU2JVRlkrZkdDbUFYVEVuSzRic0FEUXN6N2Y2TDZ5SUNmYjFDUUJra0pKd21LTnJ2bkdTblpJRUUwNTRhTEo2OXN4dElEL24xZlFkQWg3SUJKZmlvWWZCUjlER21sc0dCYktTaDNTQ2g2WUVvb3lmOTlYWUNDTW9oeDlwanRTWXMzSkI2S3hLSWlvUTgxWm4ybXFjQ1puc25YamJjR0ZPdWRXcC9KOUMzZ0l5TjVmbW5zMWNsemhUUlU1MHhGdVVnbzdUeVc4UDRFb2l2OXhlL1gwZFRGZE52WDJHL0JXbUo2NnE2WkV2YnJKR1ZyWkkxcnAyNHh3Q3R0Ri9MbHZ3VkJkdUtTV0ZDSzNJUUMrL2ZRU3pzd2FITURuRjRvcllmVFpBM1BUZTRtTG8wVWluN0lFV0JoODYwRE5kKzVtR2M2WXNGbllaaG5iT25TV2VYUEZDbEVvUzFBTVc1K0ZKTWdSbmt5d2padkhWVmlUWDhuaHdpanVZd0R5bjdQeW5kVUVDUWFpL0FjY3cvb2w5OC9zeHA4bGZQQ291MkdGS2JpVVFQZVRhUVA4bU1kTHdjYXVlaGJ1Tng3RlJPRkRQNVp4NmlGWmZ4bkIvUDZNMTFBYkMxNDdEeHhGL3JmbFQ5Ylk3eFp3VWE3MVVNNXgxSnZ3ZTFkT3BMU25pUTRZSjNrSW5VUXNwQ0hVQm84bGNXdThNbTRMZU1lMk44OFZNU1B2Qy9PYk1oaFpwUjdIMnBqM280UTZGUGVPbEdWelpJelFSYzNNaDBOM3Rkdy9rdXhRQjBGRG5OZUlIQTZ3czFmVVIxZU9LWmR5QXh3MENxTFNIb0YrejJjbFU1UlJ1OFYzMUdOdEhGQWNmdUZ0YUF3TFdYeWVlZHQ3UmE5ZnVST05hMFZ2Y1NRSUc3bi9QMDNxWitUMDUwelUyazBLQnY4SXBJRndTWHg0Q2tVbU53TmZ3QlBIbmJMckkrNzVWQTR3WDZYcFBiVTFjQWcrUGUvNTE2VHRwZnI1Y3hlOWlmZkFVaG90bjdWQTNPcVhpdGk2TXJXVE54ZWNPNlhVUWRBa29sWEpBSlNBTnhYMnNiUDgwZVZsa0lIZERESmxVdGg2KzhKdVhuTXJsM2ZnZnhOWUdnU1diMDkxYk1NUDRwMVN6WHBNaEVpVy9mZTdQS0JvMEpaczJNUHlBdzRkU1dFYWVzQ2lMd2MyWG9FNS9CdG5MMmpFUXJuTDhzNXBrdmk0K3V6QlJEcXZDNG1ZSmgyeDI5b2FQRzlobDREbThqVlBsaWtuOUNPMzI0TU90ME1aUTNlWjZpcC85SHJFWFNxL0MvZmNJT1U0Y2ROUFhHdWVxbVJzS2pkdjFzM2JkTzFZWFFqcmcxUjZDb3k1V2tlM2Fuc1o5bWlBRHU1Y214MWU4TWliTHorOTBBOW8xbSt1ZUpTNGpnQWd6blRBQkpqOTlaZGRJb2F2Z002UkYxblJxZC9CVVNMWFVVK0c5UGc3SUJ3ZzBVbmxXdDZOZHlJNmdqVHgrYWlNM3p1UHFvVll5cEs5SjcwYmdhL3Z3NmNCUURoekFnaVFNOVV1RU1wN3Mzd0xCRWlPeFAxVFgyUWNtNklYNXBudHAyZmF1MEtvcWVPY1VsSG8vWXRtMEZNcFlJSURGL29jOHptUjE5NVg4Mk1IWEtCMnoxWEEzUzVCZGVpQWdJNG5UODBkQk0yTnVwY3B5OUhOT2Z5LzdDUTlDanF1ZE1yUjZmcW4rbklld2EydTNWWnZqbUF2cUJkVlJOT3RabUk2bGpBMmljd2F1SXhBZWlFNDJDYjdSTWpXdE1RR0JUUDN4dE8yamdyT0RpU1E3aDZQMFpZTmJvSlhnbFo4Y2hWK3oveTkybUJOQkNycGxqUVYzVGhwZjJ2RDJLQk5UamgweGgrWnoxSFdYZnNEdU1GaEJ6RHBrS21IZ2hGemVPb1JBRk4vbDFJR0V2SExPYW5RUE8rd29yV2R5NFVYRGtUelpOdGtpOUtmblNoNjhqZWJHTHZlTzl1K3pQK0wxUDd1djk5OVlzUXFKbEZYTWFsY0pmdzROeE9YT0FRdk9jYjFjcHBEMVFhOHM1T3AxMHdUbjZsdmpWY1YveW9XT3B3c3BqVDZ0UmxtbTRsUDFjbzErcURXV09kRU5QekpnMFhmaXZrUUhybG9TQ1I0MmY4TzdSWTRRa01oNmJBaktvVFEraVVBRmtxb3Zvc0JkRDJrZmF5QzJ3TWZPSGNJWnM5WWNKSE9Ib2E4T1RwZlgrZUFpUE9EZFZ4QjZKRFRHUFNyaXZmT1JjdUt2M3dUNzdBZDNxeTl2bytabGpvcWVKNTE4NHZ5cFR6SVE2dXRZTCtvRm1wWnRpN3VZMVM2Q1VLMmVyOHN3ME9DYWF0TE5FVXBzREQyZy8xSmUrZlNOdHl0eWhsVndweWpGVTByVFNVZ0Y5a2ZuL0NQNnVFclNvQTR5SGxaVlpIeWJPQS9QYmw0Vkt0SGpVcW95aGxyQmMzbWhBNHVSandJT0RHLzlFZnVFTzd0OXRUb1VnT0hZODEzVEI2b0F2NDVQaUhlbWU5L0FUOVIxelAxN3g5VVpzZEpxNlBKQnQrYVpXNnpnc1IvNVpWNXRQL1dWK3ZJZzBOTTIxZ0dnb01URlFYZGFJQmJ6MmZJNkxsY0gvdjBGUzZGODBNM1Q2Y2dQQ2NON0RTcFhWMjM1Z1Q0Z0tTNHdwdFU3S0dWVzFRRnZDQ2pZZWcxYVBrSzFwa0c1SnpSb3V1WWR1aWtRZzFzUWxlSDVsVkdoMVQ2bytWWVZVVDRIcm05RTFNYUxYajlweHYxZEdHaEs4OTRMUk1aVm9vdzBTeEdDdVNNaGhvN1RST3puUmNGT2FBRFQ5RzNwTE1oc1JGeml6c20vQkxHTnkxbHRoeklEbmRSTFY2TmZTajRKYlZLc2RkZDM4L1ZDL0hQVkpaTklBcUM1SGh0U1V0Q2pWSnlISno4elBBTnVkWDNWU2FQcmp4ZjhuU0VVNHJISm9TVjZuTlBaSDFvZ2MwTVBGbmVreVFlVmhic2FicGw3c0VqR2FUdWZyUHM4UEVGVzFQc2N1OVJGR1NzaE1JR1pjRXdRMVlMcENCUVByN1hUME9vZE1ZTFZZek5XdmtFd3RHM0UzbmZncDFRNG1zS0src2I5aHc5UUJPUGNGYnhEUWpzUGRVRitFVnpaUUpiRWxYeGZudGNMaklSSllKMkl2WFNMZWdVWXRnNmtETVBqRkpzalZzUERibVlzL3hkSUcra1BmNWU3Tk83QjNoaUZObXhoSkh3KzAyMUE4U0x5aEoxTEtXSWlTVjM1L0s2VGxRUStyT2MwcDgxcXpjTCt2ZUw5WmZsYVNLeW1yMW5IeEZoZTFHaHA4Q2FVNFg3dTEzS2UzdC9yK1UxQmM5NzlETFIrRjNROS91SGM2VHZ1bld3UXNXZUtEMkt2QXMzVW82ZUpVcndOSTFBUXhBVy82L3lFNHRXT1gwMW5hcm1iSXFjSGU3YzY2dGh0TWloV3Z6a1djNytGUThIVjdHNGw3K1RGbXVQSHRCYTVBQmt3QW5ac1p0S2Y3NEtPUnpvSEgzWlFnZjJqSGVPaXQxMUNzbTJOUzBVMlZjbUlVSmJJaEJZdGQ2S3Y4ZDdOeDRUeUNvakwrcWFIWGpId3JIeU9MeDErdFA0RWxXbDRLdzQraXBiRzdUVk1rd2RJQnVhSldiYVVNNDZWQ2Y5ZzBvNVFiMVhwVWFTbFhyRUxnRVQwQU5mMFVJeEF3b1JhQVdTS1pidklKdkxkQjlaOGxRanh3UjEzcUorOEpDeWpSV1orS3JzTU5UT0pnN0E2QWY0clQ1akJTK0hnSE9zdW1ydENJcko1Q0I1K1JKMlMwMUtZVjNkdmFLc21UZ0hvQkdoMERpTkZIUkhmZll5bGVqN3lPTDdXdThyR1A2WW9ac2FNU2R1V043UHJzdUpQSGdUSitRclNwNXEzMTVZMHBDUVlsNGRlOWJ0VkxjQTBESWMySytuWDEvZWg0d1ZnZHlkWU9JZVE3eVRlbUtENVpRTmhySHUrbFlNNDZDTmhSVWw3Slllb2lFKzRsRWRPOG1HcEwxVEdjR3pKMThMWG8wbzJJb2hGS0wrUHlKbFJkNC9hSXgzUGtSUDYwVDVLVUoxdXlVMXZXbzR4aGRZWFZhcEFMbEJJWWt1WUpEaU1yS1d5eWJRZHFKMTl5YkR5MitlZS9mVzBPYTRZYkdLT3Exa0NFODVCYm5VVmluNlAydGw3VHgxSHBRbW9iNi91Ymw4aFE1dVYxK3gyeGpHeVB4b0ErSnMxWGhJS0M5SFZTRTAwMTlmU0xRUzV1Zmo5OFJVWVlxQUN2Y0N2azRyZVNObTdYNWwxTW55ZVNEdG4vSFhHdWU1Nnhta3A5SXo2U295RDI1Zm5pR0xEL0ZZa1dCa1JvZkc2dU41dHFWbHpRWjgwR29Qck5JODJLT0s0aXoya3hQR2kyM2pvZUxqVUdnVGZlenFkRWttS1hFY3pjaURBYmRtUGVxTnNaenZxbWZJZlhiUWxTK1h5Qk1rR0N2TWU5WWNHNG1LRnlSQnlXNUYvbHF1cDNyMGZob3dXSzZYR3p2YmlDUzJNYW1wZmpJdjV2SmpTK3dHd2FaMDExeFpxZE5sbFVMUGd4QmtCT085Q0Q2b1M0NVJmcFV1cmp4UnhINzhsSHBvTk5ZLytUMVZlQlNvMDZuSHJ1WENPUktJdE1YNkg1YkpaYlhXWjl5T0VWYkc1V0hXK2d5SGtwdEk0QlRsTThmYk94SkRYTGxRTm4wd1lReEJvbThHcGlXS0NWNVU0VmNMWitFb0c3YjJzRFd5dG1vQnFIT0NEWVNKd2svWWR0cDBYd2liUVVOMXpTeTRZWGdmRHRwN0JIcFNXb1I1THpDY1pabzlLVlFFTTlvTEFvR0krU3EwaHZhMGJ5V0xWWmpBOWdpa1pHa0gwMjVOZkw1Z1c3N0RiWTZpSGRvMk8vZzlCSVk4L296bVZyeHJMSnVaSnBvNnlIUzJreVlMY1o5WG5hcnpNcE8zWkFZelFBanlEdTFUeis0czJaR1VWekJaRjZTQm1RSnhaNjRMdTJibUZNMnNlNlE5eklScDBLNG1iNUJLWXFKZHFlSEhhYWhRMFRyWnFyNXpiTVR3T2VvbUZRTWg2R2VhQlF6bjVFck1PUEpYL1B0WDhvVWhGQXZQNU9abHdab3d4b296U2d4OGp3NFZSbFJSWkRISjBTdUdVeEFGZlI0cjdZekM1emdwaVUra2E3UFd6L1JyRmEyWi9zWGRRZTBZZWVVMFgvTVNBVHo3dlJ6MEtGaDNLdG5HM1JKaDUrbFpsTldBSlNWOGo5SExQc053RzZrdUNVTjNwUCtISThQWVFKWjArVWVoV2dzeTI2S3UrTVBuV0tZRjF6YWd1dTM3SE50SWFEd1RSUUowdnNLcTNPRVRNSTluWmZSUUptbjBKcDhBWEE4d0IwOHhuV3FxMFgwKytFdjBiWlRPZjBXVFZ2aFJpZERkbEVzclM1V2ZxakF6TUd0U2h6VWd3c3NPQ0E0L0RsNUlPM2VlczNnTU1aUHgxZU9aVWpNQWJXZ3NGRHR5amNlVk9mL0VyNE9iWkpjNWsxRDNaUmMrS3lJZFp2bCtVOWx4OHpBMmlYTUZjWExMaTlYdVVuY1h3MHRVNU85RStUMHlxaWtHcEp3RlRUTW1qUUJuc3pJL1BMSHNhM3FPSWVCSExzWUJlZVkxTlNuZmI4cTd3cVFNUFF3NDBmdHJEV3pnUTZpV1lPRjMrU0k3L1pmUFRXOEdXVDlxWTl0V2R5aVRkMDRnRmJQemtwWDdQN0VSdU9Vczdpb1FRZ3lpTDcyeXBlb0E2MWZvN1R6c1FDd1E4eHVWT1o1bXFtWnIvYjBhbVNEVkdNTmFZK0gvTjZ2dWF0SnhCbXNOVkFKaTVDMm9OMTNoTWE1MFlNVlg4ZnFoajlKRTZUcFp4SGF1U0p0ZU16aHVmbXNlU0tzbDJ5cjlOZVJGRFJXcDlPRnhkalkrRU5jSUtNTXorTWViMnF2RFJYbmxtS3NFcHdFUDZmdUdnV0ZxWWhwbVp5LzRvbXdPQU5kQktabWVkN09HRTZvUGE1UG8xZVhyWmZ5UFpjWVpna1dsZW51UnJpamp5U0d4bjl3bGRrRnJRcFphWjdOejc0S25SQ2pETm5yTGo2ZEdvL1dtUE5KeFVwcFBDV3FrNFBIejFmN0JLMUlxZlZPRGFPWEdvT2xkbmFlV2NwSEczYkRvaDlDbVY3c1NOclRaN2gvaEN4bVBObmRpT3hhWTdVSDRqYUl4ckM1R3dQQ0ZRZnpEcVE2dnVkbTN0TDQ0Q1dhTGt4QjJtMTl1bnRLTzEyZHBISkxtc0FicEZNZ0I1L0xSYUN2ODh6SlI1WktCZXZZRXQzSjZiOHprZVVUdWRpRGtUOUpnK3hZMk1PWnE4ajBZVGthbWQxMmpMWktYYkYydkIrUHVCZVJCOWlJeFQ0NDcwRENpQTlSUzExeENxNDF0eVQ5aFAxZUw3aGE4MXU5TzgveS9Fai9KeThrU3phN205R1dVREVDbmxCejJhcy9MNGxnYWQvWlZvTEtVdUpWTURjY2piUlZKVHliM3BhWHRKN0cxYjRKd0liZUhqOERPRnlvekRjL0h0RVp1eDJWWmhYbzVXOW93TXl4UFpsSFFOOE9DZGVBRXdOQ3VGOURUWE9CVzhnVzU5elNZcU1uZnFPcEpwcHVMeWNQRzVTSE9aTEIrOVpwRlVnMk9YVjRnNVZUaUlqT25BakFpSHM4UzEzS1RJUFNHMS9NOFZkRDBhME5zR0hGYmhGKzNoVUtHL1EwN1VOM3p5WWdlM2FWU0Z0U21nODBWeW5pRldSUXhqSXBDUWtta1MrNUIzT3dheldaRTJoYTdmVldZNEtkb3RLMXVjNTZ5RlFnVG5BdTc0dC9qMkxjdW9ZeW9JblBOaElZdVNEV1B4aVg1ZjE1ZmlJYVhQL2hEUGxpUlhhSGJ6QmhFT3V1eVpmV0M4OTNseSttaTYyc2h0aEUzQjZJUWhTbFZiS2tsUDMvNzJycXRRY2dZcEZoZHpnK1NsbVZCVjBObExiclQ2WXo1bzczeGtkdkg4K283eURac0R2TkJyWWhxblAyOVIzNnhQLzEway80VFFBcEZDOHppOFhFS21LQ2RnNjlSR2lpeEhIVEFJYmh1bmpXYmVPdTlPUTZIQk43dXVZSGV0WWhJRFhRK1hqZnUrd1lraENmUllaOUVoQ0hoVTAyU05yL2h0MEI0OW9VZFkzR0RsTG5pQzJxR2N2K3VYQmZRMEhDbnI1Mi8ydk0vSWJCR3hCVWVzMTBLc2VtRnFiRnRhR2JUa01hUzE3Q0k2ZEhHVkU1dm9XMUNSQjB0L1p0eEFxNUtwZCswVGRLTTdhYWE2WE80S0VhM0pwbVE5R1RyZmpjZXd5K09XbkR5NlBqM2lTMndUYVlNeWJEQlYrMVVCR2J2bzJRU0R0blVkdjN1ZHc4WENpNjVmT3lORGswZWtGQkxZTlZScXhwbjBRNEsrVE9oUGZCQ3J1ZjhZUVZoRm5yNmZ4NnBJYmJkNUFuNDc2NEVGNEpINWF3VmIyK1V3TWJDSXNKRUt5MGExQm53eXRpdC80TmpXQ2Q5MDAyQXpFeG5na3ZmMWJVWXZFcFFabG5taFNoQzBuZmpWd0Vuai9TRmF0ZG5qK2JXZDRjM05PdWhkRk4wR0E5STYrVXJJakhTZFcwUUF1MnREV0tmQVhIZk9qaFUyWkxaTGlQZFUwb3htR0l2ckdrQ0NOTjk4bEhQeXpRYjJZK2syQjFOTGp1VGlpOGIrajhhYy93K0grMVNHN2Q3b3EzRG9QYXViSVFZSFczQTI0K3dRM1hjdmt0WERadXIrUGRoUDlYUE5zdFlLTkJLMHRxdVZPNTdjcnBzUmNTNTFSRUVkYVpDSTRwLzFLdk1pcXgxNTdGMVNGNlpNeDJsUldmOURHTUk0TzByamdWMzVoeFlxNk1vVXd4TEsrenBhMnhLMnZuYjNrcVNtVXIrdGdsSENOL1dTNHpKMUxwc2Z0dGttMWIyR1RFbDl6ZGtTYjJJeXNsVGVFQ21EYVA0MGozV2pvNmszZVNjNUVXWmZkOWN5MzgvR3p1WVovTmtISFJndFIzLzhSWnp6N1lkYktUNzJoOW1icVpaNVE3aXQxVDdya2haNkRlN3JiS2pPaUQzMUZqUmhPRENPTE0xN0RVQ3ErWm5QS1p2RzNYZ0ZCUjZXV3ZpRVlxd3pOVWtwMnhIN2hyRzBCU0FXZWM2SW9MOTBxRS9jQ2Ryd0syWlZoT3crMFR6VFFSZkpoVzh2bjRCK2poN0NGZk5mVHEzSGk5RmhWZ3VKcjJkeGlya3U2QWZpbWlWM1ovRFdpMnJXb08zek82WnNRU3pja1gwZ1JWZ2F2eUlhdFpmeHg4OEk3WmVtRDBtNllkUmo4YitqQkV6N1RNb1c4Y291NWRVbStjeTNNYVowSC9WRXR6SHExTCtQdHdIRjhvOG1RQmFnMGwzSzhJWmtXSS84NlgwU0ZBcmdnTlRUV0x3RTFZL0d3Q3I4dzM0VFZpL2VPRUJhVGlVR3pUVldCUkVnNHV3OVRCMENHZkhvRXg0Mk9PdFJ3WW1oMVdDU210V1pkNWV3TW9FMWxjcVJqRERLNlBaeFQ5Y1FCRGI1WlFPeUFhQ3ZXNUV3NGxnS25uZFJmWnJ5MGFtVzE4RzJkaVJYZHZJdUhEbk1ScSt0VTNjQXZBa0E2cVBrUDZGbXZneGgyVEhTWDdhdlFtRDVZYnJ2VnRCOEcrWEVWSjNrWVpXbU81YXRBSzRmdWVVUEZLalZRdjlkNnlaeXk5cVVIS1JhOWVRUE1tZWJIeDVkOTNWMGZYZ0xZQm1uTWdoVEJYOTd3MXZFSnQwTjUzQW1Sd2tCWXgzS21raTFoeExhY2NnckhWd0RtdEcrQ3Z6MnVCTDkrMnp4UDRtTDhPQ1YxWDRDYnhUQmVKSk54Wm9tbXdYQkM4NEFQYVJ4SEFxZ0MyU0dqQVdaSXdHLzVlbHUvemF2a2xhVEJqcXptZk1JNSt3VkZ1b2U2UDBORFFrQmVWQVM4MVJRQXlMS0luTmI4ZlozMWZ2V09WN3VaNm5SWHdJVnRuL1JISFRHbDhSNlFld0tCKzd0RXliTUY1Vmg4bzlidDdKSmpOSFkzbXI3ZGhzd1VNNllxL0I2Q2NHdHYrdU1MY0UwelJlSHlYaURiZ3VoelFOajIydlN4SzU5OEMwVjBQcjJrdUhjVFJ3U1FMQk0xRXFqcmNVdGM0ZXRUa0UvMllsa3hLZlFSUmhYRHRDMFQ4L0diNzdoWUdRbzRNa0phbndJbXZoNVlTb1hZYWZCeWFrQ1JhN0RvM25HR3NteSs5T0tkcldDZWZXdzF5eXBXQ0FieW9KQUhZOFpNTXh5ZEtOaG5DV2E1NStDSW1UcHErRzAydXlMa1hueEpGNlRLUE4wYUFOUEE1ZXZMaFZFQ09la3UvME9PK3NER0FKcXZFbzFvQlh4endqbytTNGJHTzRLZU5LQVFlV1oxaml1aGY4YmMxank1aFJzWFU1LzNxdzd3OXdMcjV6L09GMWxhcDMvSGtWckRYOXJVZWxnem95WGloeVZOVVJqeHNyNkYrZXBNaGpUb3RHRHo3ZjlHck9nckxSSWEzL0Iyd1Y1blZFQW1PMDlRQ2g5emxzWXB4Zm5LQUc3NGJwVm1jSklLNXcrbk1kTUpLSnFaM0RLa25EUGVBcWVnV2NaclBzTW1EdHEzQ3QzUmptK2hqNk5TVDVyKzZ5Y3pmaXBkMVBlZVBSbXlqVEdISE81VVRWcmV5MGk2NWpKbnphNzFBelBod292aEFUV21vUWVROTRuM3ZGNDBRYVJVdS96YnM1YnJ0L3R5RURBeUlJQlFkTG5Mbzl4S1BJT1VvMzNqajlZV1lqNE5INjA4RHhjQUpsbVYwUzMrRmo2b0hYeldPWFlYWXJuaGVtQjB6WkJUaUw2UExhSW9UYnRwNzVEa3dWK1M2QmZ3dHFEM3JVR2dYekZoNTNudVpqRlQ2S2xRT3dhRVlBQ0M5bTNzNGU3MGtSdk1aQWRud2FVYVcxT1RQcnliTWpOaWhrSUlGVk5TdHRPdmlaaDlHS01PWFRVdWJjMnJXSzVQOUFGM2FkUEJ4RGhRTXZad3NSakZTV3cwYzIvaHVKRTdxOGNUcEFkaDRrZEtaZDhVbHljT0J6TWd2bUpEMmFpUXZUenBCbSs1MnNuMUNMQXRGYVZEWk9vWGl0eHk0Szg4b0hKWFBqUmZNemRCdUliT2kyUThrTkN0TjlGenFCM283WjgzVGUwemFrcFpxQVpmNEhTdXJJVDVyL2tjS1hhNXhCK1FPd3NBeFkwbkJyTGY5dG9xRnBFR2c0OTJxUXNUaktwRGFTUTJPS2J6YjRHYUJqVjFWcC9oaVNsdGFqNFFCcitTVGlqV01YdzJaellrd0RFOEFqa1JIb2hpV2tPV1c4dTczNzlFYmlpUGJkSnBqMGdZZkRNOWJSZ0dyTlkrY2JZMDE0eEY3Nlc2WEU2am00Q2NuVVNWQVdqSUxCUEJmV2xVekV3NU9qSG9DdXdkbGZVWUc0dEx4WGVhMzVYakdBUFVHSzNhYjNDYnBFcmIzMStidkwySDJaWUp2R0c3OWdJazlobUhKSWRaS1JjTkdJanJVSzY4YkxGSXAvaHQ3N2dia2pZZ2JBRTFEQlI1VWpvSnB5QjQ3RjBwTXBCb3BHN0hEcnQvRzVLSHZncGo5c2gzbk9za0JZMDNqbDJHWTBqRXc4WDRPUUd0N3Vld2kvWGRka3BudlV6WmJ1MDVMVGNjWTI1VGRRMEhuSEkzamhVOWh5aVg1UXJWT0hnaEJ0dTVSYVhvb0VFTnlCSVNZakZYcWtMd1lVaVdqMWFMMTY2M1VqVnNXTldMbXdHVDg2cmZDQzJ2L2RqbjRGYk54OVhiK21JNEU3cFF4OE1YVzA4WUUzeVpWS3VWVDk1S0t2L0pRQWREc2dud0FSekxTNFVvUTFxTkVWU2ppdDIvS3gvbzNqVmpRRkVKcUFINUNwZC9zZU9wbTFHT0g0QWJhenVGam94MlY2S2YrQXRlditCTkZuZ3VNVS8rUjdaNFhpaUxWT0NOQVBXaEV5L0l0VWVZQmZqOU9GRXRlZ0QzQVVmR0x3Yk1HN0VTSWlrZlpXOUZrTEtMaWpaVlIyMmFONGZzVHQvckUwQitXYlVzSlhleCs1V2ZrMm5EakhqYSszMHltczAvdDNUZG14WTlGMmIyS3JFWU05a2oyVkZzUEloeWVSaUd1K2thalhzMCtYVlhVT2M1aFdlYmRLT3hFdFdaM1E3Yk9ER1gxT1NocUZTUEtOYTZHU0F2ZXJVS2NMUXYvVUMrb0JtNDJhNkVaRnYzZ2lpU2JiVThkS3YwMkk4cnpDcmxGa0ozQlFXdENZN25icWFOSWFpcXNVWU5ScWo3NElwK0VxZXdvelB6K2NjMFdvZDlPU29aOWFpa2VjdlAvMjFOY0NOeUhTM3NBN21yT0Q1dlhuVm1EU1dOVU9lMGFhbTNrWGFaOW1yVGovSlQ1WGtEdXM0Q2FZb3F0QUxETkl4SHZYZEpicWxodkhLZnpBczNEbGsxVUlTN0l6bGFjYitFazJWd01WSnR5dlNFQnpxS0phSjRnTlpOS3ZyL2xhWWVlcVNZbStKNXhUTEhBa1lyVUU4NGFPRnlZUGkyNUdzWGNsOUwrVndvYlQvZ25GNktHOTFsVmJReEE1MXBzVVllRmpvYnRabzF3dElPcUxPdjFpNGpqT3FHbzlHbUpudW0zNnljZzNOMlVBWnlRdUE1dG9tRENxVVI4K2FnOU1PRVBIcDlOR3M3bE1pcGZXa3grVENJZFBFcHBYRElZMk5VelBDL2hMY3I5ZkJ0WENMQnN0aWVuaTNWVnVNZnZmTXdXaUNUVld3TTg3R0lhRjhWV2kxc0E2Mk1nem1OWWl2NDgxb05SV2xOdGdacU8rejZsQ2l4cG5tWVhTMGREMk05Y0ZseHFZa2lDb0lpV21qY1JLclpyVnA4OXI3THJHaWVrSUdDS216T2VzOEpPV1pmRDl0Y0xSSGJyQzBEeGZReTA1Um5SNjFOV0dpOWZVdlcvaHFhM1VlbE00Rml2OXZ3RFVvb2UyN1JUcUs1cDd2dmFSYTcyWGhTTzhEU1FieHVXVyszbGJWMWdXVWpZUWRvMDNpeVl4RytENVFZWWVFL0JmaVh2UHozZytQcmFaMU5pSko0VnlIZEFUbFRXQ2lJems5OWh5QkVmM1VOeVF2OGV4L2k2OXRkMmNaeDdlL0g0ZEhmYWpuVHEvRThFek9vQTUyUit2ODVuY0pzTUcwV1NPblZ6azdGZ2tqdlFPM093d244Q1IwS3RqbUVpcCtwNzBQQWhnWGRySmVYdnhwdHNrOUlPaGp1aE9ZREIzL0lNTzV6enlraVVESUszYURIZzNMMUtma3NkM3ROd0tWVkhCUDNuZStEMnFWNWdzbTBCUUY5QzlBSnlOSkRBbERlU21MSEI1eFVXbVdkaThydC9TUENJNlZ0UUZMNGZod201YnRkS0l3a3cveEk2Wit3SmNQRUx5NXk1bU9zQjh3WTJURG0zd1Rvcm0rZXZ0WHJEQ21uWTMvUmlwZkxJeG9wditCU1RlcUlsQ3pzaTJtYWdibndGQmN1dXJ6ZTFpL3ViS0g4SlBBVldjSU55QjNna3RnZS9mb3ZIMC81U3oyd2h0THo2U0lIQkNHa2xmeGxwZkcyZ1RPdnY0d2hVcEVlUlkzdVpzSVNxcVlYTXZXWWI2b05LQXNIYlJ3dUgxWFByOFdiMDA3YVhtUVBqOVZYKzJ3YnVDQ21hcDMwVDBTMys0Z1B3OFRNOFR1SUs4N3lFRTZ6S2twVllQZDZtbkUwMEFPbm0rVnZtNVNneUJXdlZIL01yRHZMMGFVMmoxanRyY3R0R1lDWFNVbHhyTnVSZU9pVlowTWxrOVpvd2ZhamV3WlRtWGVFanFGZWFnTzhzSi9tZXM1eUI5QndZUkF2MHVYZ2VTTXdDb3dycjczVmcxME5kV3RIdlZMNlNyVm1XVjhiRFhmam5iT0VjYzB4c1Mrd0V5SGdkRDdwdTlHT3Vod1UvM043RVZxekxwM1Z5V0d2aXJOTGsvTS9VTEVESnFCLzB2SllaZzkxMWhYcGppWGZVZWNoTEl0R1dMdkYrK0ViYUtEZ255Y1pZUGpaekJ4M1hGYXRRYjNGSDhjbGtwQmtSNTdQUWQweFhrQjRNd3grNEQxamhWd1Bhc2FYTGxhNlRyZUt1UmVXa1R1bnU1TlZtUktzV2t5RXEwSS94QVdFMWcyWWI4ekNSNmI3clJUSUt6alVzVndaTXZ5WnFZMXNpWG1FOEh1S0V4bjNLMWdqK1hLaVplN0VadEJOTVJwTEhadGFvUTgzaFlGZVJBZFd4U1RERGlBdWEwcm8wakdXUUZHUkhmcnNqZkFSbkNGb3lyT1VTUGVSNzc3YTk4RXVQdm8wSDhMcXc0UEtRWHlNZzNEdDRTendaYjd1K2wrOFkwOEZ5Y3krcTFyWGRsbndkN2I3QVVINGtPV2xBNEhFYk5uZUhabFJBNWdxcHpCMllKcGFFbUdnTE1rZ2xVdDkxN3M2Rzl4MVlheGZ1WHpzSlUxWmpnRWJSRVB0U3RTbTA1aDdhVDJBQ2J5NVpmUUdEVGRqekRWZ2FNelpZcFJFdVE5aGd5OU4ycVFMMmVoSWljT0hsMTl6b1NoYzVlOUFKR3BQRFpCOGRhdzJkWlBQd2pDcjdaalN3Q2pSTWQ0bWlNYU9iZXQrTGFLSDdYWXJrNXc3RVJBdmJSZjM0eXBoTlFFYURCNnpqVWdadlFya05DRldoWHZiS3pNRFJzN2dHVzJEN0J4Z3o0enNiTUp2cVlLNmg1ayttR20rWHV1L24vZTBBSDdweUFVdzN6bmh1alVWVlFjNFFkNWc0bk1xVVhUV2RkTWRjL3JrUitQN0lzZ3FWZnVWd1Q0d1VGR0hGL3ZMQngyL0Y0RUdFZGlJWGxSd1Z4TFNxWExCUEhGakFxbzlmOUtkMXBQYUI5QldoN2FDQ3loTWpBVmtsenBmWVNzQTdkQ3I1T2dwbUJROW9MdWtaSVlFc3NXN3o2TFpaWHN5OFRsdXFSWXFpVGhDdnRSZEZlczNYbFlWTjJEN2Y4cEVnclVESlVpa0d3dzBhUVJtaldhZ1pPNU1Hbm1CaE81WGJQRjhtWURBN2pTSU5QSXZWNUd6WlRTL0R0VkJndDhhckR0UHdMQ25ZZnJxRldLS1lnZmMwbVBPUVF1WmkrUWl4TVZIQTlmS3UyTm9WNCt2Q3Yrck9SVnhSNzVpQmw3YXcrRkJWZ0RGNHdpTERrNCttMFVNSUlqbkZiMm8vZ3lFSVdUcWdlMUc2TTlsMGZHUGxnM1ZvOUV5NSsvZ0JOV3cvRGtoL1lYNTBYSGRJU1BGQklETEpENCs0KzJLejJ3R2JCaExmRm15N2tjRmtpTjJGZm1VTGVDTHkvVllZazRvOGFOT1dXSGVSd1c2dWFoUkpNSUtnRW1wWEVJdk13ZllJWDlidEdwTS9kM1pJU1hqMEhJL3EwT3pSc2FWRnZTU09CVG0yR01MZStUbVNSTHFLbVF5UEpBRXZzQ2ttZFBteE8wNi9aK2hnZFZsWFBXVlhCNUlwYWtaUHFxbnAzcHV4aEJjTCsxblJzeVBOZHFvdnlLNUZVU1VTeHVVY1JJOExSQ0xqbGZPcFdCRkpjS3JoVTRnSnRjMkV1bmpYWWhtTkt0eFlvbktSQ1l3cWdJdXNHSWN3V3NyZ2ZwdjA4VTBjeGE5Uyt2N1NERlJTMm9zUGdLaEVKQ3RBQ2hjZHhQRGo0bk5ycUpzMHl3L2swN0oyL01xR0JsOXBCc1FhcnVKU3VFbzd2NURiT09taVNzTmlWRVh2bVd5d1hzSytaYXhzRFpuUVArbTlGejlpdVBXV1JnQmluYTdqSUNVNmhWZnJqNVVhOFN0R0hUV1N3OFJkZDJrcUE2MlE1U2NmaEVtbnZHT1Z1amJOenJMcmdBY0lzZlNQa2kzU2xGS1p3bjBEdFZWVmZkKy9KSVZYdUVYNVJOZFJBQjhXekpna3ZkSG5scjRpWnBQQ1R2SS9HaFpXQTN1ek5XVFNkSzdtWTBscCt0alRnemhQc2tRbEpQWEtnMHFtNGdsQWxyT3BrWmhCNjhFS3F3UnBkQ1hET2dtemxGYjNqeGhRcU5tN2ZzZkN6NXhSQkdtL0cxWDFDdkZKWTBJQXp1eVVWcjhxdXZrYkx2T2FISHdlRzdPWFZJTHhBS1dYZXVvVEd1VDhvQTMwWS9jQ3RHNjR6aytnbHJRTXV5SWFWcWtvNXRkVjRBZ3JJak94a09vbEFjQkZGRU9MdHh5M3pHMjdPUXB0VXFPaVRHSXl5NXQ3Y0JkdmxoWS84OTBESHllMWd5VDAxbXErbUEvYW1XZmxBOFg4bmlFSmV3NStNSWNMbGFiejJ6NWQ3MC9uMFZzdXdGc3U4SGhwV1d3cVpwRG9ucWl4ZGxiVUpONUljL01UdzhnNlh0ZzUyRGV6UUFQa0JMNFp3cHJkMzJLYlhrc1JCY2NHS0pPNzYxRTRqUnpEN0l6UWZKb0NBT3RzUmVDRWIxS3JmN0NqSDVqVWViWDJNNytzcXVZWG1WMWQwc0o2OXNMQUNzRUFKZ0JObHB2SW9qVWtXeHdvTEhjWEVmdUY5Y3I1MWNpNFJlVnUvWm43aGdnbXJSTXlRM2E2azRyN0xqL1lTQ2dham9RTHI4VldxRjE5TTlLVVREcWZqa3kzMWFsUERxMDV0R2JRbk9SbmYwdnJJVXp1alVFR3lPamU0aWhGOThEcGNjdWRlN1YvNDlxQzJJR3NWb0M0WVpXeHBlRVpJclEzNVVvZEE1WlNyM00vQ2dXQ1BKdUt0WmdFQmZMbDhmWjhlWGo0ZEkzZGg1bjBETnAxV3NLQ1FXdkVZeDdSdEYyVnJXamxWMC9pcDVNRDFndzM0TExycnFZaVA5d0ZlaEpzSGtPZFVnZlNJd1RjekdvaU1OMzBaZ0l3WW5iQjlOZFJhbWUxOWZtcktnYVNxTjFHR25ZWFEwb2pwMWdNQjY2VXJuSzEwM1B0VUJPMkphUWg3dWdGS0w1RFZ0Y3pHRUVYSE5pQ1JEWGd1OXJjdE1DYmxzeWo4YzdENTF5ckR6dklzaHdMeHY2RnlNcXZVQXBzekFvaGtjWTh2UTMxOVM1VDZHa2dWcWlKQ2ZwNmZFTVFsR0JaZGgxN29wU0ZtSjh0aHBaaE1sUFNmMlFOQUxqRFFKbFh3ay9ZYzQ3dUMwVHpLOEMyd2lTTjRJblJjK2RpV0lqMTNucUxoS281QW1KM1dZZTd3ZTUzcUg3ZlRsL0FXY0ViZFUzUGYxZmp0NXFBQmFoYUp2b1dLWGNwUlFtZGhQYXEydFNGVnBKSFZoSklURG0xMEsrZW02clMyempHdDcvRTlhUE8vd0pUL3VoRU5BYTZqNHdPaS8ySm5JYjhYeHA4bHlXL25Tb3hqT24xZG4xeWhRNmRpTWVKV1JmN08xVDJTV1VqTmRBUlZUV2htSEdpMFBaak90OXo0dUZzdytUNVRrWWFrK1pJTFpCam1vamRMQ0RHT0NCVnZJcXRhMTZqaVNJdE4yM2g5TFVQc0dkZnJSNW1tTFpWR29DZFUvcm9WV2tkRHl0blNGZzhtbkwwbnEyM0ZRY1pTTjJ5Ym9KWE4xT3o3dmFRWkRUNHAreEtWSm1LZFJicGx2MHdCK0E0SmNYaUV4c3BNTlhONUpsV0JMQzNwTmR3L2RNNU1lVGRaU0FpdlJIUVlUVm1XL0JWWCtpUDdaYnNjNUFDL3ZnR29PaVYrTkQzTVozc094aktUU3ZEdmpQRVNSWUFnUkM0SXRFSTFQRmliV01tcERnenBtdFRkR1dOMmNSNFJKeXJyRG85bmJxRGsyOXR2cHR3QmhkS2RoRTN2eHo3U05WT2x6SXJtaWdVbTlRdC9IZkNNb2JBdU9waWNzbGE2UFk1T2JjV3o0cVZuVHd2V2hKcUErQmUxUkFGVG8zV3FTazdnem5ZWFlhQ2dzdE1aTVducHlKajA1cmUyaHovcVdPOEZacS9XbWVMQmpSRmVKT2hFRDhHWXpiazFKSHVvaFQ3UlN5ZXdSeUc0MkNTMG9rRDdDUTlwdmxUZzJxWDU3OG95VXR2aVFUQWpYZVFiaFVaa0JPZWw2L0EwdzZyR1A1clA3R3ZRZ2JJZ0c1a0tLYjNnMjc0QjdpWHRqVkRzcE9CVHdCTnBNYStOeXBtYXdsSGdmY0Q4K0hVTjlBSGlKeWpGYkVkOGVlcUFXWjlmZmRibkVoczBFUnB3Uk8zUUlRL2hEejJweDVJdXBTUStlSEVIRUI4bVJRb2tFaERXL0N3R3doTmhuNE5FMmhXNDFLbjMrQmM5NE5XaDJ5ZE9HYjFZQzNpRDJiQkxJNzVxSHMzMDZQZnNEamtqTXpaU3lXQzNDdzY0QkhPUWtYNVlLTmN6ZHc3MVN3ZzM0VFB5RzBVSm80TWdkcGk4cGE5dVVVajJHOXp2VDhvNDJLNC9vVUZ5N3NjOUpFdWNYNlY3Z1dmWGMzY1pLenFJZURpdC9EOVI5UnZTUklvQWVvVXM4UjRZcER5K3JRR1lHR01YSkNmU0JlbllINm0wVDhGNnQ4TWpOTmxoV0c5Zi9aUGZZdVd2WE8vQVM5eXh2eExUYUxUdC9OSnU1OUcyNGhZWk5uUThYWllGWGFvOGROcTNrTVdwanBTYmVnTzU1VXplVXVNcUxXRzNtc0prSWR5SS9lNXNMVWt0K0VJeVBnVm02SVQ2MEhPb1ZhL0Fsb1Q3THQ5VW1SZTVoenp1ZHdrVjZVelQwSURnOCtpSExybkQ3bDcrYmFSRVlZZVVVRWZKek0yQWQ5aXBTNnRaVVlkZGN1bGE5MGRGYWRMTGZTdVdOSE9EL1BkbE8zRWVKcGdPblBjRE9wY3hPSndBZ1YySTB6YmRIRzFCVVRzbkdvRFNnQW16N25SeGJ4SU5Gb0VNOU1ETU1qem1NRmNzMjNXdmpBRUhydW5zckVobFJlRDFEaVpCcDJPMHJPeVhIZlFSRzU4VWhRemU1TUp1bVpLQ3F4djk3aVQwL2FJUElrTU1CeDA1UWlZSlpLRnQ1WkdEY2RSMjBia1pZMmVTRm02M2NtZGZWZmdyVEVRTFpnZk5tUnRJZllVeEFNT003MUlRRHNsaXZSdklqYWg0RnJiYWZrM1FwWEJCaDY2ZEhZODVDeXNWZzV4ZURwdXVybmRjVU9QSUhDaTl0S1lMaktCYjArSkZsQXBIT1M1NVJBb0tWdVV5ZXNwdEp5QU1SeWNMOWUxNTgrSVZXaUZPWWF3OENtQ2tWTzlHdTVBMm01bEdjRE9Bd0E5M091Z01KTzlNcHhVNG5rTlBrNG91UEM1WkV6czdrMmZYNms3dVhrNGxOTWZmbUl2ZC9GZ3dNUzRkVFRoZW1DOExhbDlzeXRhUG1YanQ3TWFENzYrUEM0VzlDTXFwTytZL1kzOWZyRXJjM2JFdVNPYmY3eWdaUm5aWnBCMlJPSnJpaStzSEk0ZFlqSitSWU9GZ3ozQ01YSnlFWll2ckZMdzd4emI4V1VqNDVRTC8yVTJ0YmlVbUo0Y2ZRdXd0N1ZJK05tWXd5bEQ2aFJOOXZuYWFwTFhXSUQxOEFNZlg0OVZJZ3p6Lzd3a3dDMUkwbXZheG5PMEtpVDRYdXgzaVNTZjhabGdCMURBTXprd1hYYVVZam8vNWVqY3F1Y3U2clJQQ2tKNlppTmU0QTZrb1hIaGh5ckVhOEMzUTlJT0NldzVadmNWUmxLWkNienh5VS8yRWhBYmRvUThuQWxQZjhNMGMzMDJ4THhsSXVuODlMQ0JyTHI4bUtaS01JbGw1SzZhMFMyRkhGVDJKblI2WWFacFFTL2hYWG5vU3JqclZZY3JYbkI0N3F0Q3NUVzk5bkpLK3MvQ1AwM3h0N09XQVA3NXJ1WE1MUy8wSzk1TnNMUFVTckpKRktDUmFybUJHMktTQjV1Q3FheHkzcHJoMWVDTEZyT2NpUWZNdk04V0trVm5aT1krSytwVC9PZUdGRHIwZ3pla0hGdER1TUxsQ2VWbHVJMTR4YyswZWVXalNNd1M3RzdIMzVqRUJacW8xSy8wTVErbUx1RHdVOUZMbXgrZ2lLdmUrd2JYVE1jMUJ6SUJqOXNhZXo3WU8zMnlTby9uRTdWM3Y4YUh5NDVRRGJHVVI3dG82Uld6MWRPR2VSb29QNVUrRFlDWnB3ekd0UTlDWkVWMmxaSWZSS1pncDRYME1QL0F0RHBhRDdHS2ZGYzFlc1ZSV0RqbFlROW8wMitwT05lZDQxRVhvdjVYNEtlNmJ5UEdXV3BXNXAyQnk3ODBYRHd6ekc5ODJvM25mN0ZEclVHMjZZWklaajNxWExKQ2pFcWliekxXMDRtcFFZZi9oUGpiOFpFdGZNeXdvaEdWYzlxT3R4RHVtcEtnaVYvUEkxRWgzaVRaOXNzWlNINmFLckpGbEpLalBVNkY5Y3dYYnlTOFFydjNFdTgzYmJhTm9GZGI5Ym82VllSL3FUL1ZaUjRpZjVSVUxBM0RJcWc4RDNUZGY3Q0hvTHBNUmVUSy9vcVZ1N0QyalY5NUphMi9zRVlUbHpsdVMwWkRpdHdZaU96VE02N2Mxa0Q3ZURqMndnUVh0Wmh2aUVJNGlqb290UGVEbXhwcERCZCtVemQ5UXdSczhDUHdhbUxvaWo3UndCR09GT2JJUmdZdUhhcFNoZDR5eWtibXRIemJDRjB6emx5UU5JblZkOGV0aFdmd3JQSEJRYXBhYy9STmQxbUYyaEpQQU9FNVZxNytUS3gxYnBmRmpMcFY1OXEyenE2eE5nUVdyTWFwclN1VHF1MUdxWmFhSWdNOS9jOGZjUi9RZ3R4dUQ1TnliWjNUWjJoR0UwV3I0M3ZqV0U0aXlPaGt0OUJTQXc2QzBpbnl6cVY1UEs3RVIwMlNSb1c1MDNBNUt2ZXVVSTJPaE1OVHFWL1lMNWhUNndCZVNaOHlJTkhRYm1sR2dmaFMyK1ZRNDZMSjRJOTdQUjNSeVZ0Z3dtZUVZTGlqZmM5RkQ1UE56YTBDL0VtbTZTVEVWc3NjNUNkQis5dHptWFBQWXltRE1HaktBQURpT1Juc0pDcHBkZzRsYUJjcS9GMVc4Yy8zckkxK1VaVG9CQ2U0M3NObWZQOVBnY2NaOGdwRytVYkJ6ZVRVUlhjSXB4emc5alJia056REkyTXV3aitmSm82dUNUL0xhNEd5eVNveUFxK1BjYTJ1ZFRXZ1R5QzJnbW1wY3B6Qi9qR1dyWlhXOFN0M1pRY3VXN0lYcVFCcE5hTDV4TXlETytuUzNyMEVuZmM5MzFYUjBHdTRGaG5tQlVMV0djK21MZ2tCQnlEelpvQXhSa3FRQ3VQZ1pQUDg1Q3BHZm1lclFRby81U3luZnEyZHExZ21xb2o3U2w2bGsvNTd3UG5PWXJrZjR3Q1NVN0tsdzVlQkZrMFBOaGNGRXBkRjVXblRNME9vMHZOVnF5UHhMOTU3eUdHZmxlM0h4d3E1YXZxcHB1d2tLZDBCc3EzUjdhdlZPVTBJZENkSC9HVVBRVXJiWFVwM3BkTXhnMmROeXhmMlRXWlJaVlBEeG9BTDZhL0hDOWxUVXNJRzlFQ0Y5TXRnRDlybnFGU0hBdE5wbXJMczZTdU8zTXdjZWFHeWM2YTdJbGVNOXBPM2ZOdjJXTU9Cb0h6WHdZbU5KRzdRMUdXUFlGaFdPdkV2QjFUNmF1RGxVNU50NGFiTkRWeG5nYURQZzRyWDlYMUtIYWk4ZkpreVdZQlI2WXRGNmxsM2J3SEtsWnRBMklNT1hLV2krc3JkajJTWFdRclhqRWRRclFRd1FONlBQSk5OSWUrK1B3TGpaaVlzb01mQmpLTVlvelR3dS9xMDVXMVRncE9UU24wWTFIbEpzOG1JeUdBSUdSZUgzT0x2bWd0SFRtQTBsVkF5WVpwRlRRZFVDWlNzRHJaaTd4TkFmbGhLa3RhdGlxdXUyMkFZTkFRWjRGSExXb1N6Q0NRdHBWenM4cFBWb0wvT0ZkZk5pQzdsUitVMVpMUTg3dGpJUStaZ1NHbEhvcmtENEk3dGdPL3RFRWVYOWlTNzNJenJkNjJ2eGFsYnBGcWZoZW9mYlNVa3dscDNvbDVsOUVGaE1DY2pXSTgwa1YzMG83MERXRjZoVUp6SXRkZkJackUvZEF2L3ZmS2VvOGlQazdxR0hLSVIvNUJkUU1EZnpPZkdZTGVteGVqUGx6Qk1GWExyQ2JUSTBTRkJTWDFZKyszWW9xZEtxL25tSXpXZjhnY0VGd1hpMzM5L01mcWFZVFhNNDQyMlBzbGQxd0NMY1ArV29LbTdQYlY3cGRHVjZhQ3llUW1wWG1ocGg0SEN1MFArWVVCWWZ3bW9udmRoQmRjWHd0M1YwSnRrSlFPbXNnNU9zNGVOb2IxL2FJZzdxcXh4UmQyMHRiUG9ZdWQvUWdnUUFmRmN1d014U0ExeGh0Q2ZLUXNmUjJ6UFlicFRuaUtyMmF3SG5yZHhJZUZrbjJnbnBLTHA5VVVMRzlNWHRXMEtVWW1FeGJCazJ2MUZVNHRBeExkR1R6Rk5aQmYrRkl1amFuZEZyZXdZcGMzWHhDbUFQNkxESi9jRTNwNUYwWW91YXU5NnJGclgrcStUYWp5Z001NGNnVlc1aXlTMitZcXdvWk00QkVlNE01TXJBejdUYzdlMExpUldJOTZFeFRpQXh3QnY5cnBlVWMvekl3NTNlMmFyUE1Ob054WkpOQ0ZueVJwbmN2a3RtU2loUHRCdGVEZ2JSM0UxYzUyUElWd3kzZlJRT241ODBCT1ZJRndzb3NEaWNPaXQxK0h3bjNzVWlFTi81UVRyVlg2Wlh6bmUrb05IOVhrOXQwNnJhREp0Nklmd0RmcGZOOVRHQzNWcENNRXltTE9FcEdaTnZtS2hLWGMzbXpCamYxTW9tWGJFQWNFUS9kSXJUWFFaYVQzZGdFdXp0TmNzcU5paGlZUnc3ZVpDVnVGc3lKUGRpaFZ0NGpqOWg0NE5JbSt2bEhZRjdCRExyb1NsYkRqQWM3a1hWS05WaGFpSmw4TUtFTDdIbkoyM0E3SE9PelUrQ2ZFcEx4QkdYQ2c4Qi9aWUZ0U0NrRVp1NnNTNzk3WUNnbHVHT3dzSTlSamViQTFqTFpiVHBVWnNrZUJERXA5aHZzNGtCSTRQWGV3eHZSblJNZVl5WkthVkIzQjBEd2x3OHhLOCtiWGRQV0Zha2Q1WVZxYVhDRTdTeVRUS3lDcVllaEhlTkxPQmw5Z3lxNXFZRkJXcWd3WVErWGt3Z010Wit3eXFjRWdjclJvcUpOcVpoejFsdzRGZWN6cG43dngxNUNtTEpXY0NsM0liT2xzOHppZDdIQ0UyVVJZUWMvNTlEWHBWQ1hLWEI1NjgzZGQza1QrNVAxbjdzdytOT0hjOXlRN01POFR0TzNMYzJEdjN6UWtDalRza1dJa1RIbGNwdDBWMEpmSVZQWitPWXFwK0FQUWpQNlVCOGFGUFhiUXUyd0toZnlKWkozcklwMUZkTmVzYk1oMGlYZktvME1ZeDZBeUlYQjhRWng4K3Z3U1RZOEtKOE5hNythTTJxZEc5VlA1TWp6STRkU2huWUx5enhxeWp2dFh3SVpXUnFYakd1MXVCc2pzNHVmSldiaWhhUGdEQVlTYnNZeGtTMWpzUWtHbHp5YjZZc0JhSy91emRMaWEvRXJNL3dXN29qZFlpSFU3amVlbWx4ZFIyNGtzcFdEN2NodlhQVTgvM1RCZzM5NUMrVjV3SjdqVlVSV1poTE1ySzNidUJGN2hWb2lyZ0lFemNJRkxNQ1B1TVNNSXZuaTIwU0FjNmdFWU1KN2dUTndhN0svSlJPNU9zNWpIRnAvd2N0ZHVUSmF1WE16M3craDd4S2lhSmM2Yi9LNXU4bkh4S3NvSDNDK0c4M1NnTVdSUW0zSGk1TXd6Vk9HTnpQSGo1YUVLTENRdTY3SXNlRnBMd1hMT2Qwa1JnMmZNNkozNjRWL0lWT2drYXpzWnI1V05NSmhaQVE1L0U2T0ZPOVpneW5FaG5PbnhhbzB3OEhXZkcvcTFQYWhkeEZ3bGZuMHVDT0RzYjFueENlMUpidWtFVUl1aXQ0RXRyZ3JzUE84dXdaMkRtWGZlUUhSZUE0QzRhb3puYm1YWmZqTVZxMklqdE1MV3VhbTJEWGk3cnhZamJhU2xpbWhGaVVMc1RKUkpxZE5IdW55aHVpSDdHZktnS0FQaXZVVkcvamVmZVQ5cVN3Wko1d1Z3eDlRWVJkc1dLR2lMUlVjWFNZSHJHYUZ1Q0dHb2FVOStsTGYyQ0RjV3dlcTZmSURhU0RMbUU4VVcyMkh3L2QrYmxoVlBvdTF4bTZUMVZmaXhHQWR5Tkp3cVBqY2ZWV2xOSitVUnNjR0pHMngwcGI2dG4vQ2Y2K0RLNjlzakw4Wm9DSlJYay9xUTc1WmtLSjZvTmVxZzVnZWxyNG5vRFpVZE02MnlnampkSFlSd0FiKzdmY3BxK1pHa0VDcWh1VWVUNjJUUXIxYUhGM2NjdDF5T3pDc1BMUlBpbi80VEtrOTVkVCtGa2xPbDdqdERnNS84dk52OUFjcEpKWkF0SDY2ZmE4MzA0S0p5ZlpKaU5Nd1NTOHp2R0hFcGZjVjRibmhGSmFvRjRmNHJ4aXJGNUY4M3JvODV0UWl0MDhudDhvMjYxeG9wdG1qbjA5d0h0OHB3aHovU1R5cXZHU1hkYmxYNlgwVVh5UUI0WXVLaUhPNUZhbUNDYjhibWhKWFFQMWxqaW5QcURqNUZ5NHovcE9Ed3VEcjZzNW0zTk5PcEJQYjJLZkZVUE9MNitRVTNkYThwUGhqY1ArQ3F1NGhZVG1ySyt2ellkbU5tbWt0OHVzZitZbElHYWlYZ0o5OTJ2VGczbFE4WmVJdnNLUEhRWUVvVHJmTHNNNm43N1BmdFBPeUF3YmhvOTV4ejRNcEhtVFJyWkZxaC9VSDhsNk5yTDNTNXNzcTl6ZGc1STN6RllFYVMrclBtVm84ZEZiZnljVW02UEtpMjhOTG5IdWNEbVZ0QjlSOFpSbVFSTE1jc1YzcW9KbUora21mbVpmU2k2S3lqS2FoblA4eWYrMEpIYU1tSzJIcnJROU85WE5vU2phdWxSUmFKRktiZFJlbkZjM0xzRm9ZaUhTYTZHUEtUTTZHQ1RCbjN1VkpCRXNzQTdRTTJBcDE1K3dxUFNRdUV5OGNROG9YMzIyZzUwL1orTkgxRGwycXd4K05hK3BOYUhQNU1yb3ZqS0NvK0FZeFpYbnpDemVnblZ0STVpU0VkZnVYR0lMNzhGQ1ZaNmp3eWRrcGpSRVUvWVVCNzQvY0lSa0tmYVlhUzYzV21QSTRqSFNucjJuT2FVNUNobDIzQXdhRGpMT1NOYTdBN0FIa3FnYkZpbk9teCtYaTZBeGtXY3YrZjVyT1dHUGVjYnJBL2xDdHI2R3lXOWRuMTVOYmFKMUtLNnNSZ1RTMk93aGFzU21CSEJTNVhrUjBDang1NnBEUXVNSSsxem81Qjhkc283eGtKMDEvVUM1dWRQTnBkZmdaaU1vYUlqTmhzMFVuNGpRTDhTaXlWbzZMd3J3WkRPbHRCeXJmQStUczdFaytMbmJqQWJGeFlrQ2QwbkdSWDdTTWlKTUpER1hGUzFlSkZFd3BPSFdub2ZDM2J6SERobmFpb3llYXpxbTdaOE5OeFNnUWlUWTRPaENkK0VDMWZmMHcwSW5mMWlSUjRmaGNoV1gvUHllbVh3bW90Rlc0OHhHd3ZVREo5Vit4dWU5TytEa1luVFc0Qkc1TmxISTlUYjZnTDNNRUJ1UlRCREZ2bDBxbGVzVHlpWHlGZHN4bmdkaUZ5LzRveGZwZXdlNWZmalRUaTVFQUR0eXM4bEVsT0lrTUhrem15WG5SRll4T0FsZWt3V3B3VStBT01FOFlacWRZcFdvYlNqWkt2ODNRTk4xbGVHajYyNmw1YmI2RWxXcGRsUlcrcVdwQXpuaFJYcEt0a1hKaUdHUTVJWVRwSkYxN3l5Sk9SeEgxejRmei93a3pScUxVTFljV0lwd0RMNkVqU2gvblZYQ0VqWDJ3bk1DcE93dksyRGhDRy9kL0hNTTVjYk43OGxocDZzWG5pV3FoT2Zrc3YxRzRsTmRrVDRUcnpmSHpXMStHVDFYNjhRUjVZNFJPZnVzcFZlak9Ick9vSG5WUkRQVmROeUNOa005UER5eHhUOHZGTXV5SVB5Q0MvbDRQR0RxL3FKKzVlS0JlZFREUzlJRlVYVDVHdTVka01GYi9WR1RkcEYwTmZQZ2VCN3JLRC9yU3J4QmlCUnBUeXFzM0hucGl1M0xUS0cySzA1VEwrUTd6S3BkSUc3NGNreFp6NEwwNWdXdlMzOCtiSFk3bGFzMllVZ1pEeXpSbkhDRVZ2QW5hL1QrelNlYys4aWVlU1dpVU1SZjNNSTltM2xpMm1jUjRWaUtqYllMSDNpdkhsQUYyUUtITEo0a1RMeEVGVTZiU2ZnZGJveFBjc2tBUmZWbml3aGk0N0h2Um1RcjNOTGtsdzBpaHU0WGc3ZENCb2kzcStjSFVRS3dhbjUrUkV1SFhiZFovSzdBKzltYU9wR3Z2bU45Unpad3I2eERhQU1sYTNlSlBNd3c1and5cHA3SHhndWpOb2hvNnRsZ1RoQjJRSUVPV0hyYTJKck1sNHpOV3B4S3dIb203RE5wNElZVFpyQnh0dHpCTG1udjJ5RzBHYWI4UGhFTWFBZzk4dDZBelhveWpqL1QzMnRUZTAzSDFIWHlWMlVOUk1KWjhya2UxQ3JKM1hsRTJUQVBUaXVsZi9lMFpkMWRiQ0xhd3dsbXZDd2NmajU1Vi9jQk45NzBpMERHdFordXExbjZjbFVzMTZFR1Y5RG5nUDgrQm4vcVdZa2M4SXhyNDdwR2VtSTVLWFRCMWZ6RFphTWhWV1RsZVFnalV4ek56YTFrQVBCcHQremZ5Wi8wa3p6c09jMTY3SUV6STV1SUNRVk1rMmZ1dEVNUTFWSDBjQk1SNDBtUjdjRzR2SmdWY1N3Z0V4U3RySHpXYjlacDlxTWVoMWJBWkhTRnB6WjliY3ZBNmdKV215cVREVXdocTA4d0pvZkZsc0dNK3ZjazNNaDRGeU1JczNHbFg3aWtjdVNNWmhWdGdWSW5LdHRpWVlteHFSeXd4U0pNdklaamwwelZMdUhRMzN3VHZldU5LZ3l3NU9BUHdNMnljK2FzaDJ6UzFjdG1hSDNmaU1ZMVExT2wrdXgzcVpFMmQya3BvU1NLTjNlWGNCUzhTZGhKUjgzSmlIOGVTNmpZdjUyV0FURXEyeUFVNFF1WVovTjVSd3E2dnIrUmtoSytHY0lYaXNtb2pRdlAzY3pnbUNWUGkzSVZ2YU5kcHBOY3hHNk9LV3RvM1ArTDh0ZE5wMWU5VjIrT2YvRDM5b0NuNWFBUG1iQWdOd05jL0tCZkxPa2NZaHI2MVRNR1htS2FMRVpEN2ZJdUxsNC9NOGxBYk44dzNvWVg2NHk3Yy9lSVl1NlAzUzVUbURIU0lnRDQzbURNWmMrR3dqc0ZwS2U3Tm5OdCtFMldGTkxlRzhWYlFTSHBKZWNvcTZLbkcvMzdMOENINHUxU1ZQcXRQcjZOVkhuTzFGR0o5ZnZaMnpSZm9YQ1kwUWpRejhDVitjUzJxczJPcnZ6amdaZEtpbUdYMEdVL1psUFVzQ2MrTWxjb3lTRzBmNnk0NktiT0Y1NGNobW15RXFwbWF4TXdYaW9LSVd0YVdRYTFnMVhHVURuU3JiLzE4SjVJZFhOaHAzdHA0VzBBYmRuTjNqQXpWcThFTWRLSjh6YWUwQlBDV3Rpemllc1RwWWg5dlhrUXFKcW44TDBlZFlKengxSkY2UzVla0FsTld1OFZCQUJrYVNlbDdNRVo3T1ZRSmZZQkVXaEZZMnhPc3NiK2x0TXdManhPMmt3M0VDcWJITDJDNXNwQUhLb04xQTJZdy9abDJDRHRzN3FGTGd1dW9LMEtheG5BS21lMUJYdSthcWFjZlpHN2VPZ1pKRW5rT2VRWWR5QWpRcDV2UnpTSnh2MzhPRmZwWm83bk1Rak1uOUdjNC96L21YamliTE5KL2lTVDE4VDdZblJrUy8zMXQwUmh6SjZnMWwyNnNicVBQVVgyTlBCb1J3VFR5Ym1hVll6RnRWOWdod29jWGxwVVdacEUzZ1dkcEFsU0h0d3BjVXpuL1JLbSsrNVpYbm1qaVY3Z2dqbWV2UzR2alYzRlF0MU5EejJsNWFNVTRnMzhKa2dVbUZicnppQ0wyblJndGl2NUxpbG1mS3NsRTdZdXNDc0VVeUN2QzdYZGVJUlc1WG9vbEh4YWprTGZmaS9tVTlWQVhNbDJocFVneC9ObEU4OHQ1UWo0dUNTcE5SRk5rZDY3R3FiZzFWaWE4S2tQc2pRcnJCc1prRzI1MXF5U0dpSlJsOHlla1ppSEU2Mjd0S2FDUFVNbzRlOHN6d3FzNnBnYmJBa2YvTU1wNUw0eVJvMUlFUC9OZ0FuTlUrNWpQOGtMWDFtdEFQYjBiSW42eTRyckV1a0h0NmVmd2RSMnZlSW8rMDRpdGN3RWRGZDJxamM0TXdjcTB4Z1MzR2tPazhScHdrbnFubkdLQnN4YUk0M2pkYUlMb3haempBMU02a3Q0cWNoK1d3VXExd0pWT0RxVzNRNVdDYitkWVVoYXB1YnZDNndqSGt2eHF4cU5Bd1NrbExSVXpINXZzeHQwN09CdUVkSHFzVVYyZ0RPb1V5YWMwVVdld3RDNDhPaGlvTW55Q1ZKOWlUVkFpbzF3UUU2VXRvYVZaUHhzcVVFd01Hbjg5WXlIQ2VPMHR3cHRYeUNyVTQ4UkNPUlgxWGs5M05RUmRoVTZRWm1DSnZjK1pzd0NOcDlXVG4xUG9nYzAvNDRWSm9qaiszYXZmZGZuUnhsZlhLaHZkaFo2T3pRYVJ0aFR2UlkyM3VFWEhja01HWTNVUmpjS2pzMFRNeFloR2d5NjdWSWliMWRoYXNkbGRVU0cwZmxiaThKMUdDTElxOWFNeEZMK09zMjYreGsrWnJyVURyYUZXN2kzREZvN1N5d2VsSDMrcjhUNExPbGM4anh3K1FLYnN5dFY2ZVRWTEFUaFE1cFZUa01mQVVnZ1F3YTBLQVNaVlVhekdTZEcraUJaQTNwOHFhM0tIS3I5aklma3BuVE9HN2lXNmw5OVJZek1MdSsvVE5WcU1iSVA0NHVqTGJDUXRXb0h0RUV4b3ZBY0RHdFBmODI2Y2wwdHFFMldERUZqazZuS09YcjRoYkdXR3YwY1lYVjc1b0hocXhwb2dwMzg5dnZaVEZCUGpBT0U5aWx6TnhPNWZyV0tTMW1zTlJDUDhjcXhia29rZjFIVlNHeDlKM1VOdE1ZV1IxUTNZMWtZeXdmMllLRWpaN1lISGtWYm1Yc3RGdWNKblZRUys2eURDNU1hTjh3ZUVNWjVyNEdPclNBd2pWZ3FJMnU1eVdvWk5scHM2TXJSRFJUbElOTFZpRjJOazlKcUptbTJtb00xdVZHb1pMZ2gxcEFNZ0dBS1YxaFliWTAyUzhPWTlhcnpPOVVuS0sxa2VJdnZKQkxJNHpyd1pBZkxjM2IyQjFJcHNxS25hMkFTSnl3a3QybFhJTUh0MnNCL0lmVGZDWHVIenhBYitkOURsQWRPOHkwUHdnRlFtbUFVRGhJWTFkL3h0Qmh4bVpDdlNmYkxrcExNaElSeDRlYWRBN3dtV2k0MkdDTDFRclpDQUdJRmxmUjRpRk5ZUE5QRUtvMy9xK0U5SFhhb0dJSnFQOGpLUDZXVFJtdzB2b0poMHlJTTdCSENXSHpEUGwra3FnUHRRY2pObDdCenJQQVRJSTRBTTJ5RGxHWDJueW5XYzRWanFnbHVOT0pWanpVSmc3SVhzV3NUckJ6aU1zanYwc3Nrb3RDWks1MVlmV2daNU9jeEhTM2hEUi9uejFvdCsxMGxzeEhsVldtTFNsYWVoR1Q5cGg5LzZzeHdiQWp3bE96ZjlVRXhEYklBOWg2UmhzSFIwZVp0Qk5lWHpWTCs5ZTlYY21EV0lSNDhhbHJJY0daN0gwNW5JdFNMMHpxcjIyWWZmdVA5VnJXeC9NQlZFOUpSOW0rV1lxNDNvNUkyNGhrUkViTzNtSWhpa1Ayd3BBR00wRmNGKzRiekRLNUh4dUxXS0w1bDY3QzBUYUp3LzZPRVRtL0VyK2RMQjJQM0FqMVJudkVMalJPaGI2K25ZUHlzbXppZ0NwcHJqMTE2TW9UbHlwMGRNUWZPclNsSXgzOGtTTzMyRFFHbTNkdVQxSC8zMDM1YzFlOEh0a3BOUHJFZSt0UjJ1ZXdLc0M4T0NwUFJEZGZuR3B0RkhCYk56QU5SWFBsT2FhdHFuSUtRMVJ3cytKWXFkQVducjhkUkdQcjEyMUY4aEJKQmo2Z0pIVnZ0TTZxV0QxbDczTStkYTEyam1CQWpVMHhaU2RqNGRVNXFFR1hsMTYrTFFOOGQ1K0VTSFVXNWgySmE1azdsU3p3OG55WjZrWkN5Z1RKVWFoR1dQdyt1Y29sSm9xclZCbDZpdnZmYlVaams2aUZNY1k5RExtSFh6NTNlNDhvWWdTOTNuelQvL0RGRUVwcUUyOHhHM2xISWY5OHpBa0huRWxNRmNiQ2F0WEhKdGNDTDA3UE5mNElON0RGekxJWGRDb1poUWxReEovVU5jNlczVEVVbGpqelNwWldZclZWQnR2OFpRNnZyV2FkZW5TT3ZGdkJNL1RHUktZeUdoWmNaUXkxSGtjQ3BVLzBIWEh3aCtuNzBzbUpCclNGeVU0UU9OWmV3SmJla29VM1VETTV5MWZ6QVg0bGlZeDBRSG5FOCtta2hLaUpmb2UwV3c3bjBhbU96RDRxZWJkRlVOcXp1cWlPMWdCcDhNdHBFbWVzZ0VCa1huZEgyRlRmNmJYWm5OU2IxWWlKWDFjUFBoWU9NbmNpK3VSQlNKYUVZMnplTWI3dnhyemVmdGlYVTRTZjZlMWtzNENVeitkNFBtTzNuMWZVakxtbm1hUXZJaE9jRnZlSEdSZi9NZUk4K05yMWxnL3JPQkJvVEtmdnVSZElpT29pRmJwMlM4c3hZVmRiSzVMbzA2WnB1Z0dGMThwY1psM2MwZGFpTHdCR1hSbk5VbGs0QUpBNitlY0JaNWxQTW1MU1lDRTNmMUZaS1loOERneFN5akRQSmZGb3lBTjJuTFF0UDZJSkFJK3hpakN2MTBFQXRONXlLTkFTSlg1Yk95WTNIL1BxL3ZoSEk4VzRvNjNiVFZ5SVdZRTd5RlVnTkVBcHFWVVNyT1ZpUllXbkc2c0hUMDFsaElKQnZvOTJJZHlVSXhPcGo4UTU4TFVOby8xT1VKUEQvSTIzTGZCV2QxdVBMUGtBNGJFNUpEeXY5a3VIRWYxYlBDeWFDeC93TitidzVxb0hhZU5IeldhbVo2NUJzcnd0bkxTMGNPemZvYkUrUEZHdHlLSTIwODBnMjRjcERrUDJ4c0xRT2tIMHVVNzBPdkN4VGsvbVAyWGFDV3RtVXhzZG0zcXkyenoxckxUS1VSbXZFME4yRUZUbnFkU3hxbHh5K1JPUXkwOUhVUG8xWnlGeERTSDZFR3dzdUJFU0hVN3IwbmhoMjNwalp3UGN5aDY4Mmp5SnZIaGE0S1R2RWp5ZDdUYkRUcWdqYnplT1MvVmtHTzQ0Z091K3Qzd2N3YUZsTWRYMkRtMEppcEQ0dHE2K0FyS0xROFlsY2V0OC9zaEZVVlZCWlIyVHFPeHVQYlBlT2hrNVBZMnhsdDVvK0doZnVNNm42UmdmSGxqQXlyUTl5RGFVWkpVRGM0TDJ0VEZEMTJzaTU4UW13Q2NUd1c5K04yTmwzVENlaTk3VmVTdW9IY3lCY2w4ekJWOEQybGhpa3JwY3lURUpuYVV3dmtWdDhVTG13aUx0RWtJU1d0Mk5qTlNuSTV5c01QYm5Ha2pmenJ1Y1VnMjlDbDJtTHRPaTc5OXl0M3dpaE14cGFRNDUzY2JZMlR4cWpidjQ4eUFiSWtqRmRqekNBSHl0bGtyWFVEcWlaZnFGRTdsUVZjdm1SNWd5bzdiQUVlWUdRNWVSNWRDMUROQXNqL1lPQlMrSmd6VTg4VzB5QWhCME05UEhLRVcyU085c2RWZklKTklBaHZ1SWE1VWxuQmxDVnZPSWhaSkxaWXVFaHJCK1htNnlkd29DME54OGlGcERLeEY5dnlQeUx5V1BFcXJHY0FidjlzSUMzWWs3cWI2YnlCVC9xYU1mSHJDOCtvNFExb2FUY1J1QmNsUTdtbXROVnQ0V1loSk1OLzFnNGpOR3d6UDdQR3NKUU83MFNwdGhkNHIzbm5aaDhKeXRBLzlyc2RPUDMreHF4cFJMRDUvR096MkhZanMyMWRJUUlHZzMvbUhqakF4aDQ2RVp2bXR0SW9jUUlaUzB0V2JUaTM0SCtqQ1IvV0hBOHRkUWk1WDZuVXd5K01TYkVFbEVBK29qOEtIVmU5ejRiSlQ5a0xBVUExaWhXZmNoeURzUlBOOXp4Y1QzaFRaNWVaY3E3QTRwUW94ZzFOUHE2a3NDcFZ1bDVldnZJZjNnMVIrVVZlNndGSHdUUURWMzVWM2p0Yyt0dW9sb1JFb284MmNrU0h3WDVkN053blBaOHVlSzBKdHRKOUx3cTJsdDNKT3U4OUQ5ZFFFWTF5UGFsWXl3VGZQdFRIakJwMGZSdUlwcDR0V2VQRkNrcDBZNjgzK3dVVE9yNHAxd2g5RGlPTDNFRnNFWXRKS3BTalpGdklST3JnYVFCMHUxZW03Qzlmd2xTd3pLZVZJTzR3SlBTZXk5T2lpeWFyUittc0laL0pjTWVlL1FVZTh0bmNNOEtnT3NjQTZ2TzMxMStBSmVqcHI4bkRNZnArcWprc1R0WXhqUkhhRWc0RkwwbHJ3TnlrM3FUTjdUa0JKNytFWXVhRm5BWU95N0xib2VhcVV2UzNRRGcwU09aM0Q0Y2JjV0FTb0JMV05MVyswaVFTdFREL2JwMHVRdU1rbzltaHQ4OWR6dWRUNG9HN093b1Roa0s1TkFiM1Z1K2NUS0YwYUgvc0xmbm45ODlFK3NmRVp2RVRTV3Q1a3UwRk5RWGFOY1pJOXVwbWp2YURDNWdUNGlaVlh0UzF4SzFRRWc2U08vTmVMeWNpeXhVR1M2ZTBrM2FzMTJNdFFtdk9mSFFGSGdCenZMY1FGNEVxTkxadTZwU3V0cWsvMGFtaXJSMjdyNlliZmEwcTJTamRybi9GZU05NXVEb2ZyYWZQUWY3c3V5WURmNzh4bzNycVNudHhPUW5nWFRCNFpDbW9RVlltdnR3OUZqaFlSRkhzSGl3TVdydlB2Sm9MUWNzamlTRzNMK1h2bWg4MVdRNnZENEhjRGtzcWV4Y0FmeXRxYTRZcVFSbFVCZ2JTaDZVWm1QaXdMdlVRMENqTGtRSjBnVXlyVVNwQ3Uya1RxczE3ZFZJeTFIL2JXQWRDRUpkems1dnd3cmNkNndDeTAyQTNDZWpDdnd4R09LZDFWZ3RHd1phK1RkQTJTSGVmbjQvb3YwaU1aRm16TnRJWFJFQTNmdnlocEZrS2gvNmJuUlZsQzB3eTlTUkhXMm1pRWs2YXY0eFFaMzNMWUZTNDJWbzM4QkxGTHJEUWZUcWtpTzJ4STdUbmt4cmUwd0hMMXNjeEpQSEhpQ1NVRzBhSEVVNXlxbEp5cEZTR0VOb0puSm9SNTZBMHBxWjJuVjVidml5NEkvSmZWTmw2WVZ3UFVXcS9sMmZ5QTY1ZUNkVW5LL1JJUEdjNDRpeGdqdHN6djZZZFdpYy9kcFZlc1FFVlkzM3orUzJ2S1UzL04xUmVGdG1GRE4vWGtnakpWV1pwTzVpeFpBK2ZHT2h2R0ZkUVUrb0R5aEJzRXljS1RmcU8wanZMVzMvMmk2RGk5MFErQXB6VjJ4WGVUUW1veDR1RndsQnh2N1NocFJSWlYwZFVpYUVxdkI5ckRCa2d6OGIzMmh2bk50UnY1dUY4SUhDNVBSdDVtUzRBK29Mc3d1K0Z6WUtNT0MwdnFtMmt1dG1UYkZSY1Z0Wm4vbUN2Z3U3WEJSQlJSeWV6aUZnbnloYmJpNmE2WDRmYWdWYjV3Q0FqQWFOeDZZVEdMdEFpMnBURnZSOERVYmtHV240Z0l0MWxIb0VFZ21jMU9uaFkxU0lxZ2g0QUZXMHB4NmxvazBMSnUvdUI1VllmeHVuRWVsamltcHJoUkFqSGp6Z0pWQkRpdzV2d0x1VVY5OTZPRmw2OC93QmVyREhDWkU1VnY5MXovVEtqc0I4M1N1am5TalhXTWFnbERFMzNNK0lYQ2thWmJ1S2p0L2xvWUl3YzdrWnQ1N0xQSTd4Um9sbm0wWHJUOHlOdlBqRlhXQkRKV2tYc3E3R0FSbFMwcVRIdFk1VFZvQVkyZCs4Uk85YlFzb2hnRFZ1dHI3QmFPcTMrMVcwNzFNem05RVBPM1FjTUNEWjNhQzJkaXppSytIQTEwdjQyYkxGT0daNnd6WDE1TWN4UjFtM3FrdFA2SDJnZDBmcVBSNWkxYnRhMC9uaWhsTEh1alFNSGdxWWlYSVBzd2ZVemRuRFVPYVFwRURPeUxpdGN6bFVUOHpnNmp6dUx2RzlhUzExZGxmc1NCZmp3M1MxMTRGb1EwbENuYkh3QWx3Sm95MmY0ZXpsY3Y4eVJqMWdqSVk4ZEx4cEVNTDBiYWFkd1R5TEJwOXkrNHAySDY5a1JNcy9LQnZyU3ZYZ0RPMWFldGIvVm1ldXF4cXpjVVB1OXk4RXhobXpqWTNBejBiMTMrRU82QVpDNnFpbTZhK0J0TXk0cmwwN1NyUzlrazlza3hociswTEttamVrRlc1VmRkZW1mZ1Rpcno3MnIxSFRRdnY4NnhtSmpVU3NVa0NVdk92Z3dkQ2JBRFVIQVMxbzR6UllNK2EzblU3Vit4VzVHTEpQRlg0c05Eak14czdlODlOMzBSS3RiaitWQ0NCekY2dDJSOFlHei9CcldwSDN0VkxGbkpXSmRsdnpGQUlOa0dDc0Fhb1R2SlVjVWxJZlZaaCtQbWQ1OWNnbmkxbHhEY0xLb1Nva2NienBEY1hLclk4SURMcWZxYkNrSnRxRmkwdmxobTVtc2dLSVZSQWJrOXQ1T3BURXk5QTR3dHc3MWtUTE0wdW0ybXM4dVJHL3VuRitvRnFXUk9NTU5IVGtnVVdUNTdpNnpvcjFWSEtYZFFaemNSWFQrMjY4NDFFRzZ3bkMzOEE2SVZDS1FWdjNpelJlSlpKdVNGR3Y4TnhXYVlOYmFNaUc2QzJWRXZSMmEzTjlUR1YwK0puQ1E5dmxtLzNvVHhaQ0J4ME9Yc09vOElxM1J0bXFFYWxFL2RmRWt3dVIzT2JqRU1ySmtuaWtZbGsxeWlJeU1LVERNS2U0WXc4N29FMnpqcmo2RndqNjhseG5MN1laaEZFMktUK0JlZWxnRWg0SmNzWXVqOGpEb0ZhZEw2c3ZQb3E3NktVcVIrQlZVaEdia2ExK2cxd0JFdFM3R29KN0Z1d2tuS2luZnB3UVQ2UWJCL3VSNlgvQmN6QkhudmFwaWdMQ1h4N0hCZDE0Y2szNTN5RTdBaFlXZ1dHQjBINGRZYW9NVVFFNGRXU3ZxYWE4d3hRZkdsMVRVdlBYKzN1TFJQcVRNODJLV04zWVRXNzc0QTlUaGY2Nzk4MGc1YlZnRE1EdG9SOGs0V1JvaGsrR1dCZGdmZ1hoaCtjR2xXUlpPK3ZnNGp3SVNKcGZmNWNvY1N6U1p3N0xkTDQrRE90SXJBUjA1R1o4SkF1YjRjUjdvNDE1dzk4ajJvVDc5eVFIM2RPdDdiOUdhQTFyMnpiRlRWSWJSL3N6K3JHaHd5WmxlTjRyMlltTE9iYVExcDl0N1NxUkpuR1plWFZFRVQ3Z0ZpdlNsMU55RnA5ZUJEc2xlSFVmMis5eXNZeTVPWDdiMW5ta3FpejZpdzFWOHFjbnVabS9CaVA4SDVTYm9taVArazJMdGc5aHpFTEY2N1JUNDdtT0ZxZnFaazNNanovTTBBOWx3dVNVZlN3Qlh3M1d4aFVUK3dPaTF1TFIwZTBzejV5dmordWFDOXRHemR0a2ozTVlVZE1kZkdUTG0va2lSb2w0NkRSelpydGVna1lSOVB6TWxIUjBNOFdQMndudnpNYXV6alpNRmxybm5hd1REaVVQN2FSa0svWno3NW5NQkt1T0FWMlpBY2JpaGtQZnNTU2FHRDNabmE0U2orUVFRUTdPZzNzK3Vpenp1L2lnY1lUclJmaS9nWHRBZWdRbjlXaFBtVFA1aFo4MzBiWmxLTk5RUXZPbzhOcFZHbnJZTFJteUhuWmFCMytvOHNWeDF4bER5dzBZbTBQOXJmOUhJdGtDTEl1bEs4UzJCUmRnTDRVOFhHaVJCSFFlK1h6QmdtTDVOcFB0TGkxZWdFaDdacjVRNlg3Z3dXUUNsOW85ajFFRzFWUHpEekd2djh0QmVLOGx1ZXJScjRzUHU1aG91NitBei9EVjNJRkFtSDlTeDk5K2hZYjJtTmhnZlFYdGsvQjF6NU5PTk00bnBmWXdHR09ReTRpVUVSNW9MMlFSMGJSRmJXQ2lpVVhnWWxLOGM5SnAxZ0g5RmltNVlRQmFCVmFyVnYwdmduRHNqbnh1Y2pVMmRhVWtFQlBjZHkyc2NBTDNFb3cxSENMeW5BQzYwQUlmdCtkMGpvMEV2ZTUzSms4dnY1Q3dWZ2ZVSmlBcHBIMzN2aUpVNFVURGNaU0ozcnNlVkpENk9pd3VtVFZ6aThiTElNRGpLZ2hxTlpDN2F2MjVYQkh0R0VPNUFOcWUyR0JGeGNLYzlUZ0NKajF4T2pic210Zk8vcE5VLzFpNWZZZitFT1dQSk1sZmRHVjkrelZwL3hiN1haMEtxWld4L25DRUJPZkQ3VnlYSGxvVnUrRFNTcVVtNFFKbFkrMk9oSG1tUlI5cytHMEhPd2IwSTRVZkRCZGFtb0NiM2pGTlVtdHgyajhISktESWNJV3pBWGo5ODczbWpjeHI0eHZVcnVoYUZXZFpiS0QvL2dEVjNFd29aenkzVUNucUEwTVhsaXpEU0V1NG82bzVUU3hJQjIwQjhPdnA4L25KUCtnNjBhbCtoU2RpMnFMaE12aUNpNFhhWjRCUGZJMkd3ZGRwdnFUc1lIcTRVbDJPZDlMUllheUo3M2ZKend6ODlDMWhqVGkzaGdSTTFwNmNJTHNWQ3RMS3U5N1lRL29MYklJRGVrTm4vWXhPUUx6QjBnZU1hYWR0aER4dm9kazFkWDdrd1hKVHd0Z1VxQ081c0FjTERGQjlBSjNycldpMmZ4ZDBJL0NKK2RXM0ovY01GN3ZsSTJURkQwaGtuUUVnOEJ5dW02bGgvaEJBd3VlaEc1bDZ2c0M2YTlrQVVIanQyUEhOMjgzK3c1YkZyZDd0VGFtaVNHbk1KaFBVT21lYzhtK0pvaHBzK1RQbzdEQXRETGxiN1JRL2FNVVBEeHlqUmVTVlBEaUovbU1USWxHbk5icUZHYVZZT0hQRnl1bWh1Y3A3dVpkS2hIL2NJM1MzdGh0T2ljTGlYaWNhdkFZY3h6blZTTDhvYkt4ZEMwcFJKNUFEdENUNnBGNG9LRnU4TSs2Q1ByZHpZYnl2WGtsb2h1NWxpaUNpY2NvbzFNN0lKSGsvczZlZVJrRWhMYW9lbTJLL1VUdWF6eEpXR3JJZGpVN3dLcStZZGd1dlpkRDZDQ0JzMnE4TG5vbmxzRTFEOUpnZzJ4SmtGTUxCRFFpR0QrVXh5VE0wamZORkhBWWljaGtXSCtKL3hMQjgrR0R0dm00cTdtNFBDLzFKMDJJMVU4TWhoVU9xcXg0NFNBald3SWhWUVNKMjI5dG4xNkJuUTFFM2owakI0aFhVczFmV1Ivc3MwTDh1QzdBSlBqU1ZCcWJsRFJLV2pMZDJhK1VKdisvODUxTkpUZldUT1FuT0xIdmR1aTBWdGFGb1ZNbXpGOGt5ekFESHBnRHA4aU01MEpFbm95RU1VTFJTdFp3QTdiTk1KUkxJelRBWTZqamVXNEM1Mi9ieWVOOTVTdWtLSGtaTVh2OTFCYlhZQWliTm9IQmFaaFRFeTVibkRrdm1VSk1UUS91WW5YMUtDWkhZUTdyMjdRWDNCNVovNjFzVThDVTVTeGFzQ2pib0ltV3IreXFjZ3RidnlKRFQ3VjU0QzNWMUJmbTQ3TmIxRC9zZEpxamJ2cmtrSjgxNUs2TEZhdmlmSklwbDBFaXp6UzNEV21UUVFDVkdTSU5ncWMwdHlGKzg3SkxvS3lrYk9Od0pybGEyYk5RRDN1ajI1Y2NBVHQ3S1Nra0Q2QXRxd3Q3OTBmOFlLdW9rWlNqYmdhTGF2N1FCWnJiSkhveE9CUSt0d3pTRVp1akVYcHZhUThNbWI3dXQwTEMyckp2dmpiSW1LZmNHaTNEazJCWWgxaXUrWFJ3SGV1aHJacEhVOUlzVGtlUmZlcFdmS29ORUx4T0loR1Q4cldDNDNVZ0hMOXJGMllpcENSR0tqamFTSTlBc3BtZlc5SDY5UHAxTEswSHJRVDBwQ2RsQmwyZHByV3hyaE12Y2gwTUFCd0pocGRKelBWc1NCVXgvTFJaTVZhSmtzMGhReFZMOFVFdUZDcmx3NkdRajhHNnpjMjJLV1RST3J4S3FDV3o5dVAzSHZiQ280QTA2NFJpY1NVdEduelpOYjN4L0xzdCs2Wk5ja3FEMWJwb2xnMXp4TkhzcW4rK3dmWnd3Q2VzZDA3aS8xYkRNSzUxRnJrSFJXelJTQi9aS3B1T1dMREc2TTdwRVdoaFRrYXNGYXRoZFpFU1Nnck1xVExoWTArUmlkT0FzZHNLcmp2MHhVZkNPdUJYRFUrd0lVeDREUTFITHdoaTllRkhFNUJ6UGlyVVVYUDV1ZTc2VGlCUHBMbWRvQm1qb2g0STd5MkpnZWRxVERTSDBQbFo1ZzdWZzdsR3o4RHVybkl5bXFsVkQyRndPNFRNQVlGU0pJZDI2WExUNUpqUFpsZHNjWktKY0JaVWp5VXRQZTkrVlVKQTNzVGo0K3Fwa0srTkUweThmSEM2Y2o5SEpIOVhCRDROMXdmTzE2MEtQR2cvQ0hGNElvNFlaVEdXMUdhVll3WEJJR2kzaHR1Y1h0VzBEUlhRWFM4d3l1Q1pFMitVZi9XTVl0ckt6Z0kvZEtVRzBtMXZ4cVQ3ZTAxc09mTGdvODlmRVljUDZRR1hkb21OWHF5SHJqdzA5RjRUUk9KY0J5ZUx3dnF4TlZISml1dUMrV09mSURTTENVY3JLc1ZuSi91NnpSdHFHNjVPcy9obkNwVDBWYno0cGRMQllIMlVJby8yalhJYnFjM0dnOWhlaHV4VjF2ZGNtTlBJeUVxWVYxT0kxVjRrQTRhYjRUbWdWNUtPR3N1Uy9mNXh4dHl4NVQwQzQ1Q3AydGJXbkRENEZ3cDU4YjRTR1o1UEVuMHNFemlKYi9CT3VjNzFaQ3cveExzWjU1VGlRWDFRRmNjK0lBSFlwempWaDBNZzA1NFRLVzgwaHEveGZIVENPaFRGTTBhYUJibWRnTTB4OWU0bVk5UXR0Nk5aaVQxRGVIaXEzT09lbGJsc3BSY3JPSnl6Z3pEajlPbjZ1WXNWZTVpUndxZW16RjdTYmJodHpEbzlieG5iQUVueHJobERzSUJXZ3BQbUF1WU5wY1Q4bDNneGRtQ3IrRnNQVWZJZVVZZHV2MlBYcWZxNE5FdU9iZEVWMytQeEpFWTQxNWdSMHYyYXhOSWlqZjl2OTJ4Q0FWV2tPcjdGZDUvWW04b3ptZ2pSblJ3RVF0bkVYY2EzdnRnWlQybXI3MzI2bU5EYlkyZS9vaVlvOFp2dU8zOHIxMjFra3laVWwzbWxsNVVGOXhKN1hhNmNrWFJoK0tyYUZUZ0svN0crVnZvSHA0cE9lcUhFSG56dnpTN3ZkcnBWSHNuY1ptQVlINU5CYzlCT2JJRis2QW1aY2hZUjN4NHRndW5RRzMveTFrc24wOXIyaU9idGJqSjdWTGhWTUIrdEV4WlRmRE9IbFhKVHNDYVJhbnUwUzhvQ3Y4ZUFqeFcxeE80K21ndDVMajBWSHp1QTBqazJrM0hmVFpud1dnSEFQbVYweFlaK2p6K2ZqTWtJbFBHOWFmMkxqdm1OOVJFZjlLNWRwZ2V2S3ZpNUJRWUpIS2JWaWZRYTBjRHVRaDRML1N5QTZjTU9rNGZleUhNYktBeFdsb2ZxTEU0aVpCTW5HL3h4RWVnVFppRUw2Zm9zMkVNQTliSkFYT25WdWRLaHR0RWxsNlkzb0x1Y0V4eVpZQ3VyVXVqQ3VmL2crSUxiQWlpdkkwVWVSbTZvSDJUcnVBRm1paXFOMVV1Wml5KzhmTUd5Mi9vRi9vYVJSOGtiK01ORWZ6UVFVbmZTWG9JQkh0Ylh6UXRXR1BVZzFPTCtXVVY2UTBTN0RSK1pkdXBTYUNkQVowWG52Y1ErYWM1alBKYWE2UzI5d244U2M4TmwrakJJTHQwRk5hSG41MHROL2lDRFpxcVgxVk5lWjViVjdySDR0WEtNN2FHTjJScThvaXJiVTdvMzdNTmpDdlQxenlRZXpRU1ZDTlFGOXo1a08wdXZNd3lCaWJTVGVMVHlVeEVJdFJmamI5dll3eHJIZ3ZrK0gyWnhDN0F5dVFYMlJ1TllqWXVtYjJLbTM2TUpCaXFOTGxkZTNGMDNYMjQ5anovdHE0UlJEazNIbmh6dkpOUHNJMitPSDgrbnVuMjRBQ3lQTWVEN2c4UzBUbmIrbVdPK2xHaC9wR3ZiTmI1aWdxcVA0Z1Z2SGdKSFRFSGpSZzM5QmxPS3AyTGthUlpLaHhmUU1WRkY5Q1pTNTM2aVhicFRibCtFOFdzZFlQZ1ZkQjdkZkw3cGwycEhucVFHd1hxeCtQZzllYU1hcFBKMncxcFA0c3NlRHE5RjFPVHZ1QnN6Smdya0RFUHRQQytjUGloYVNGRnVSUDBKaENIQkoxeEZrZHVaSHZGd2x4NC9ndllPa3djSU13NjliL0FZRDZlRnhkN1F4NDRTVUJVOVVnT0JCTUV1d2ZKcG9kS1NsU2JoOGNCQVBKZ0R6RWYyYjBqcldVd3B5cW1ubWg2UVZXM05TOUI2WE9QdldLUXhRc09ZMll1cHNwdjI2ekwvRE4vM3JxNzJ6Wjl1VVhHSGlwMHM5ZnlqN2VZSm8zZ0htSGs1OTQ0Q25WaEJuWHRIWFYreUttQ1RYQmxJQlZqUWVaelhzTlRwQnFsQlMwMTI3a2YyTHFlT2VTYmxyaHJLMHExUzRBNHFEWlgvMXNrR0tkWDNiRCtsamtNUGt1SVUwNVVobTlyaHRQSGdtTmdFeGtocmlIOHd2UkFzOGFzOGFlQWdESU1VM2dYWGxnemFJeXNLamRJbXFOTUFUdUIrZWNsWUdqam5DWCtLTmVrK2V5VUpvallUN0p4ZVVoMDUxMjh0Q1IyQnVRK0h5bThVaW5SZ3A4V2hBSDZsaEVJTm9FUjFpbStIeUIza3dPMkdnNklwRXZ2RHBhL24rRCtuM1M0SXdURUIzdFNxWXVWUmNadFdiY1ZpbytHakxjNnVIb1hTRTEvbDBSekFlUnplOWNlZml3c1BWSUUwV2RvUjExSnltWERudlFqM0R0QVNrQ2E1QjQ1RklrUUQ3NHBHRjJGMU9HOUxValdTS2I1ZG10cE1uNU5CWE9jMDVKSSthS1dLMHpHTHBsVXVJR0hlQUJUellFMC9VQmFyV1pPWjJJTWs0OVM0aUkrZmtjQW1zTE5DVXMvQ2RRSWxvblIvdmlKYkRqM2oyQUJRR3ZURk10YzF5MytNa096RUtJNy9vTG93MHp6VTV1Y3ppVnoxOVdvMVpETXBRUjNFM0tXQmpGZUlpWUFyQk00V1hXWVpPOEUrc3U0NXBKUXdRc3NjcFlNdjBRenk3U1FVeHdFdzlhcHZyMTV4RXFwem5PbTFRY3FHcXB0dVdBRUFodDhzRnZQL04yblVNM0tpSC9VMFJ4OHhPaTA2a0ZMbURLcnppN3pOVndyOEtaUEQ4K2lsVlZ1Zm5OL3NWUzdsVkVJeUNJOTBxL0xEVmNOZHpCdU4xNitDRnB2blBjNllCTk45KzdWcWREd3ZWZ2dFWnk2ZmZSU2t1VWZhcUhYZ3FJWWVYQUNTZHVKWmJMRkRrSDRoNi9iL1NNUDJmaTFIM2h5eXYwVk1jWHBzcXRDanVlQy9qcTlGTmdyYmJLSXFIK255c3NwclJwNkRlaDdnRktGOXVodUFveWdqVWg0ZkhMQnBndTJvMjl2SWZIUTV1OEV0YWRWTVVveWMrNGFia1hiTmNwaFBOY05SeWk2RVZqMjZYUStEZmY3OFI0Nm1QREpubWFRSVk5UVZyQVZqS0xaR21RVDRHR3RGY1MvMnhqS05ocGU4Qmg5QVpBdHV3d1dTTnJIUEZhdHFHLzV5K3JkWXFvekhzcVo5enFkbTJXN0tIaDV0eUpneE1waEI4MDd5MXEveWNyZVhDSVNieGdLbEphbkxGUVc4UzlqLzdUS3pRekRLR21uVHpuYUFYMDFGdW9GMGhjVGZ1YTRsRnIrTDlQQkdneVVFNGdSblF3M3RJeTcwQUVoRHpkVndWSWR0d082RUN6ZXBySlIrcmlZeEg2VTdOY3h5OThzMFJWRWdpanl4T1oveDJhVTlxaE0yMENHWUtTK25rbXkvUVV3Wng2bjFwMVJ6L2pnRzZ2WTlsTk5rMGlGR212RTB6MU56NVI0amRZVUhrT3dEdHhHMEMvQWNnL085aUVkci9qQXJjMTc0UUhqdHFYeVp6YkR5bjlQVnlDbENWYWNtVjdISitUdzdiL0s3cDdHcGxHR28xbnFzNEhzQjN6TndKTW53NUhFRkUyV2lwczdiVFVCQ1R0TGJvVjZZL0xUS0ZrY3dZNU0xeDEvR0lFbU5SS2pVQVVnVTRZYStzeUxQN2RpL0ExcUpCSFMwNlZRMVQ2aW82dzVyQWY3VVVZWFBzWjFOQ3VMdGxLazlqR1ZCNXhpRTlCNGwrL0g5dDRVVG1YWHNlQ1BxRVoveXZ1dVhYYnBndjM0MWZndUxVTDVCeXdwUytrMkVyaVVZenUzb0NZNUV2WXNXZDhqMVlrVXNNWXF3TGs4eDZMbG1VRGxiWnN1Q1d5NWhmbkE1TmhWNDFRMnRNdlk4d1ExNHZDV2VoaEVNaDlzYWxWWUsrVjZwQUlzdUF3Nmd2YTRKdll1N3hMdFFFaTB3OGpnMDAvREVMZVFWeDV1T2p6cGhFWUE3S1BNV3Bjak5VU0lBUWVJWWpEY29MNTFndFVOZFJtNlVIMWNTOFVKSmZhVmZwOSttVE9GTUVyeldQWFZNdC85MVpwSzM3U1JneXdMc3VoeUtMbk5YendGb1llemZMc3BnQmwyZ3A1L0dZNWRLenN5U2VvNzRzQVNXbDlMS2RyT2M5UExGUmMyaklNTXJtR3gzNjFvV2ZYYW9jdnkxajVWQ25OR2o1dDkrZDBPd3E0SVB4dHhpVlE2U1k3Slg1dUhvVUdodzRLZGR5WGt6dU1hbCtlZHk3V1hmN2w2TGtubis2cDZ6MCtic0pkM3ZzcHNjV3dXUEZpVGMvcU45Z2U1U1FVdDBKeVBLdjErS2NDbHQ4dEozU243MytpcmRNT2lhaGM0UUN4Y3ZDN0ZFZGlQVU1LWGFWVzdJNStLNmI4eGtFL2l0bk1GSDBzZ0loSzRQYXZ2dmFtbDFkTlNMTUNndTZ5R0lNVG5wNW9vNkQwS3I2Z3BVMlUwenA0ODVzWCtrK0Y4QklrMy9wczZCUFJ0YW9ZVGVUQVR2ZlR5RXRsOGxGbGFXUTNzdm5vY2l3MElBVzhQV2FjT0lUejRuUmhucDBhSlI0V1duNVR0MitwaXZXMUZ5OE5sNWNSTElSalFMNWtVOW1ha056Wk9BYjJRUDl0UVRZaWpvMzBid1VDczdXWWo3NXdLUmVFY1BYWW90YjY5QjBUQWtSVEt3bloyazZ2UWRiKzJmZzJHZVJqMjBvU203eXllNy8vRVp1YTVodDRjc3Q0UG8xMUxtb1MxYm5RaVM1VU96Q2NoSDJYandMcklIbHI3YldBeTcwMW1qcE1xZ1JZOXVzcURSUGJSZjF5WVB1RkFHOCtDSzlmUjUzTkNIUVRpMWt4OFhHL1JXSGdxRVZXOGUyQ2ZGY3ViRngySWRHM2FVejgxK1U3dHM3VGpVVUhESWx1TW1HNkxhb1FaN1ZhYlFGUlkwVXFDK0ZINVpmWjNYM1AyM2lSUHFMdnYwTDhxUmMrM0JRVE52eXlXRmh0c2FQazMvTlJzQkFaZjRLS1pwbGZKc2c4R3FKdlMzemw5VStDVXo1QVY5ejdNNzhvemF1dFlTcGlFS0dlMlJ4SEV3b1pGS1lrRkVsak1OMHQ3NWxpNFFqYUg5Nk53T2NEa25rVjduU0kwaGxhNEpDK1dLL2ZmcjY1ait2UmdQSkxRbWxQTytrSzBxVHR0cVNCUTM5L2V0TzhNckhPTFlCeGgxT1JPdmZobzhOMVFYNllnOUtkVERVQlFkSldmcmhNMGYzdjhhaGQ5NDFCdWlZT2tuZVdTN0Jici9CZktXSXlZdnBKaEk0VXJnNVhHaVR5Y0VJZzMvbWNCSUt0RDlxbEx1Uko4UGlSQnYzN1I5ZnJOREt1bkR5YXpLVnhaUW9JMmZxeElCRFg2Zk4vVG01T2FyeElnY1NFWGpVVFZjU3dqNWs2MThLQ2dYM3R3Und2eUtFK05ucW1TRnZTNHZVdC9Vemlnc2Z4QkhxQVovenAyZ1hTUllyRDMwTTYxTUdLeklWM1YxZDgxN0h2YVlyVEVCb21TTVoybHp3M2llWlVyZVVmSmsxdG9iZENEK3pubG9ZNFJJaVJ5Z1dVQUVKbkJGMVdVRm5QbnJEYzY1eUV1K0R3cUZpS2ovSk8zZXBMUWd0ZzZzVFpKamgxclMwRGN6TllYcy91Mks0aDVCdkN3eDJ4OEZWbEtjcEF6SXFKSzVUR2d1R2Q5TVFIZlBIWGdhVDYvY2xVZ29JN2JiNHJLUFA5NERKL0tPK01oaS9ySlQ3SnhNMTZGNWRobzBwTHZadkxHUkdaSGtRRVB2OU4yWTVxTVdtYkR0UW1YYmFlMFVqd1ozT2Riak0yakZadTdnRHpISTVPaGxSd1lTT2VZZXpLUXdrd3IzTEhpN2xVQlhUMlp4VUN4ZmxNN3NxSzVPTjZQSGdFTnZLNVNLbkE1K0U1WktEVDBXUlpFMjA0RmJXTnBYYnNTMGNublJMV0ZsRmZkek5BTk1VQzVrSDJSRWRTaHhEMWpXTTI0ODRJS2RoVndIUFV2a2QxT1QyTGlKQldYaFpmUVRSZHlaM1BmUEZmRWxlK21sU3VpUTRFZVQ3SElEdzhTNmxhSm0yZTcwc2psMjNhYUlobk9NbU1OemJubVpyRzNMVXpsWUtlbHpySUtVN3l2QW9xbTFuYzVuSStyR0NsejVRakF0aFhucmtqbEN5NGkxZnR4SFVQMjU1bE1lbFF5Yk8vZEhtam94USs5YTNaZGpSQzI4ZGxNOGZDTmpLVmJCOHU0dlRwTy82ektqb2tVYTNCdkxwdktTMStNN2dnU3R3YURHZXRGcG9LUnRPMDhnYVBkQTZXME54K1RIaUhCT2FPbzd6V0E2c1d5d1YreVRTbi9PUU5ReGM5N1p4a2RDanYyTDJTVjUzYmlEMnhPZDhoU0FDQ0o0ZUlWZnJkK2k5d2JLcGcxNHJZdFZHcFZmdW9SdDBGek84QmdBQkZ3QnRlRVl1ZUJRQWF2OUJFaFJzLzJ3aGhQSG5kWGxxSzRlOFp3emFnY3pNdzRVUVVXb3o5MklxaFQwbjhCalBQTWFrMExjS2lYUjV5Vkw4SUZtVi95Rkx2SHlvSlBSZjdlSmJEV1FEc3oxMVdxQ25ZdkJEUUhIRmQ4WUlITmFXeWhtbzl3UkFGNjRRWHpxdkwvZzM0cGxnZlpqOUZkYWI4YW5UMkdicEZSVmtuUnljVzZFMFdQVlpoL2MyZS9hRjVrSzUyVzgrWlQ2UWNOWGtFTnBNcDJzYTJ3a1lDYzF0dDhpSFhEMldnOXF1RTRHcTZucmlId0ZFeE5STlVXREtiamc5N29lSk9RNHVXcmwvN3ZPaGNTOXRIQS9RMEljaXZjTTBrNXBSaWxaUG5JWkRld1JsNzRTZ1NMc3dkMDFUQWU5bFhnVFBncGFOWjdpampKdkg4c3ljVEYxQngrOVVmZ1k3Z2hPS0svSnplMDU0NFppalorZ3BmSGNtUkJBdE5hZW9jNXNFT1ZNeHV4SWI5WGx5bUVwQXVQNXdZZjFkV21oRG9SblpyRUNEaSs5U3ArR0R6cHFxYVkzMGgrZUVSRWNjY1Z4SFVSWXRhcUs3MHFtQktNbUEzVDRDVUF6WndvMXJaeGZHekprdXlkNXAzV09yTndHVnA4bE1rUVVpQWQ4R1hhTTRpbGRKa1J4VVB0TVQrSU5mWXJjL2c5WWV4S21IY09Ic0FTQ1RIUE8rcGVMbnc1N0Y0WVd3TjZVZ1FaMWhNVnlmY0FwL3pnUVBiSEJrY0hoV3AweVhtNEhNdTJmYkJ5VmQzak9HMUgvZU41QVdNYjFacDA5ZjI3aHZINTU3Uy9YdnF4eWdWWnF3RGRKMlV0Ymk4TFYwMXZKRHVnWGt6OUQva2FYWmtYeEtxOVBDa3ZlWkZlOThVVjJPeGNxUmYva1VMbkpLODMrMEpOSlVBTkZWck9Wb3k5QTl6VjEzVXErbjNSTWtFZ2VhWEUreC9MRDB4WXZvVUQ5VVpuM1dIbFhjaWJwVkdzZWdtdVZyRzZvOUd2cjlNNDE3WG5tYWxaTFExWVpZL1JiV1h1OHhjRlRNR3ZDNktRVk1peXhLVDF2Q1ZDRHlqL1JCSTBMS0xEVjM0Y3gxamRiUTRkMFZYcjhJLzVRaUhUakVlNE82ZDVCZkV3MHVLQzVTQ2tDRmtoM2xyQjI4ako3K3VUT2N6ZUZXblR0MjJVSGYrcEhBS2xicm1YaUhEUTBCa1pLYUZlWDkwVXhnVFRFVU1FMFVNbTNxSzBCUDdjZENTVUtIUTl4bWdoZG1xamlIcDFlZFV3K0hrYjJueVpCL1dNUzdTaW8xUFNzZ21HaWU2S2Y5M2V4ZDhtdnhTckJEOWl4ektZK0tiTUNVRFFQMVMvdXdhT0pubWYxZGNESkFESDlrVGE1WHhpa2JZY1hvcUpEbGYyUE1CUG1ub0ZXaEcwa2VpbmVkMkxiNHNnbFBtZEF4eE9tS2pqUDVVTkN2T0xiQWVMLzFKYk0xMlpZeTF0OGxCZGNMSlZSeWIxeW5yQUlDSTdnNGFYTHQ3QWR2Z1MzOG8wMmg2d3p6WnV2Ylg4d0ZYY210UnRQa3VGNTdQR2F1QmlaOUgyUEJxUjI4eEJSamF3aWsyQkYwU1dEdUhodDFRMVJoZXFRNnJHM3FvMkIwN0lFaEdMQ3NmeFR2Y01VbStNRFlkOE5BK1ZJOUc0M0VuZlh5Vi8yUE03R0JtZU9FYWMwN3dhN1p4WHRuTWdzOU9MTXNhWUk0Qzd6ZTBCUzFucXRRSWZRS2VYbE11dUpJNVdJRGxDaVJuZGNjSktpVkhISWJEWVlocTJOdHZJQUJLV0hJVCtPL2YrRGNkaklMREh3bW1mM3lIUmJsR0pscThVNUNWald3ZWkrMWJCbm91M3NQVWU2R25XOW52ZVpoaWRFVE1BT1ZwTllMYlUwZWMrOHpKdnNFUWdoTDlvMmVhaEtacmc3amJSaExvMnFQeWUxaklUZUZEVGUxQUgvQlZMYlliY0I3a3BUbVh1bmdEclRIVHI2djluNXdyZk5OSjlmOEZHWmJsYVZKRG5XTExxSklRTnZzRzRSL3M3WTd4bk9ZOVg0UXpkUmRzZ1JhS3JBVHY3TnZYZWFIYnJKS1FGUFRHUHBzcU8rTTZvU3R5WUFWWVNEemhkczd2dElyckJGNTh6V1o0WmVQR20xTTcxT3ZVeFdBR011OXVqaG1jdmNXa1FtbFhqZmVBQW90TmwvOGdYNUdQT2h5SmN6dlMvc0J5QU9MaWJRTlVObHpjNExraCtoN3NYck9WWm12bGlaU2hEMFF6UGNKU0NDRmN5M29scklqQWU0QkRadHlrM1hLOWlPelFxYzk3bmNqYzB4SXJkYzUrN2tKZElDd0wwcThRNnNveFpScDhaOTREbEEwTkFBdS9waCtJT3dkYUg0WVlmUFJSYVBTN2V0QTRxdjBhSGNTWUtRVkpsZExrRDBmRS8yV0ZpZUd3T0pPcHNwNWRZRGlGZE5oQ0pnMERUdC9Bc1p2NkZTNlUyTGN0SWJmTnBCU0xhanJ0c0JpUTFtUEhlYnplTlg1TjEwTEVSTnJSd2VSOU5FQk55aWlTckJ3QjBvaVRFM3QrZ1MrcHZ4a0FwczI5M3pYTmNpSGJMWlRhcFRldURXdldmcUhzYlVGL21wQVl5WlVhV3NkdFhQbk53Zy84aFJIL2ZkNTN4WDV6Z2pWK3ZwbVpQYk5pSjJJYWk2dU1jRlMxQXhTLzFBd2h5cW5TWUVKZVFrV1JGb0FUNEJENHN6WU1VS1lCU04xbDlZVjYxcVoyVXlvQlJHemtBa3o0aDdIWHZQdm0zNTdoNDRUTEpnY2toM2ZTVGc5S25PUExNSm5XV1diQUoxODREcThKRTQzQlNndmp6NElJVFlmQ1U2Rmg4QytVVGlzbFhLVXdHUE5CcDgzSzVzZmRRZEpEMXAwbUp1SVBIUnBwQm9TZTNJcm9acUhBbWxFREdOSVBFTm55NjFQV01HZUs2U2dQL2tHbUtXcWE4RzI0eEx2VG52eFZTeEhtQmFXWDVNUzZSMTc5ZTFiN1dLMm13VTNEcGZMMzgwNGZ5amNxT1FhVXBReUFjS0xqTUwyaDlWeHJxVG5LdUp6WXdNRlU5YXJqNlZyV1ZjSHVQV0VUUTlkaEg1bU0yMFkzMUM1N29kQVhuNm4raHo5NUw3V2cvd3dzNzE2OUpXZDJ3QzNlSHdPeGtTamI5b3hMQ2swMHBTTCtLOVF4V0tuQkkzazZJN2g0VGpEN1dTb1JDQzc4R2pTdmQ3aXZTbTQ0bkhjMXpDMFp4MFpjSEc3ekQvNGFxQ21KaW5aa3liRTlvNlVHRFR4VlF3cGRTcWtEL1F6SW5lVlV5dXB5c1JLNWVKRVdBdGFtOXY5MUg4NDk0bFIwT0hNU2xOSE5QcUpoTGs2ZEVuMVhUWjJYRU1PaUdEZng3eVpLN1hBZ3Ntelg2K1JBSFFuMUxKQUsrYkQ4NVlCdVI1Q1ZpdWYzRml3Z3RoZ0RyMTZ1ME5ZUFRGNVN5dkVXY2p3Rlp1c2ltNEc2TllERVhUd2ZQQjRrL1RFdkpBWTN5M2l1d0djOXk0VjJOdExRbUlSVC9qNk01WDlYWkc3M3ErM2t3ZHVoazVlK3ZGc1NReUsvcVRobDVkVk9DWi95em55TEpUQUt3RWhRdWdVTWVCc1NBVmNEbU04aG1JRkoraFEvdVdRc0gvZEJIT3hHVGlRcWpYZytSNEwwdmZYYkRuR0JLZFM2UlU0Ly9KMjM4dFR4NTBxa0grU08wMmtRUUs1T3ZhcUNzNTBXVy80WjdrSEtTVERMYU9xeXVEaGVPL2FBWm5JZktUQ1M4VzhFVWpDUUc3OW1INFhzY0JzRlNsbWl2ZExwalVFaEhxWC9CSHRNK2FXdzhwbEZGRE9wdmtSU1BWaUREVlZleDV6aXJnakRIRUt6ZDZjb3JHdmhBQTl3VjFkVEcwRlE5NFJheFZNZFJiSm1LeGlpRy95cnd6THdYWkVVZlkwVWJiWkovaU1jeW5ucFRZNWpkSUsyeVpscWtOaWhtS2N3L0w2MkJvWHFYbHFQUFdmVHJTd0lRaHE0Wmk4eVM0bGxDM1NjSGorQVhxSzZEeVBQQzlRR1ROOTlFSXp4dGdpSkNOZkt1NUppQkVWMnoyYkhMQTFVVVlabkVaRzhKYjFEZjlUclFOaEV2aUIzUlVRcmVFYXJmazJUdFNBZ1RGVU5pL2NNRjQyVzMraUU5ZVQ3Z3o4Wnpmbk9IMjJLSlBxUjFuOHFCb1dFQThUT0dweGFZOGFvcmV1Z2YxcHhNL2hVNURuMnNlZzNCLzZTTGx2RUlUMnJocy9kbmJhdElYdC9ibmwvSWRTVUZFeWd4MUV1bnJGZ01XcWQrRS9BT1A5VUc4VEQ3N092UnRMUHVMaWthaGFZVFJ1djhUb2dKaGlBa204N2pILzA5VnFUS2lsSW1RVHFub2NTZUVMV1pLSkZEbEt5UHFzNXJMY1pOTmZhRjJQS0hpTWIvUGx0Zi95V3UySUJtbUUzUUdsVXhTU1NTQkdWdkt2Q0EyNGFmNUcwemE2Ump3RTdaOEVqWk85OUQ2TEkwKzBBYnlxMjFsdktrYVh6b3RCUnVtdURDUUU2WWlNUXprVmwxakE0c2F5eldGQWJ3aWNiY0lMM0RmRzU5NHo2eUViQjBXcFZZZ0xlbGJ1QWIrOWRGNlRpT1h2enp2RnZoOEZVSlR0azI4QWtzZlIwaGZuMlp6Vm5KT0xHbUdOejAwZHV6Z25wR1RXeFZDQ2JwS3JaeC9RcHJzS1NMOGRMVlhnT3RsK0lXWDlmR3V0NVlnR1diSWc2Nlpyc2pDS3dHVEhreE44QVdiaUpjblIzNTRuOWlqRjJkMUF2cGVpeUM0R0NRRlA5S0VYWHlPVng5bVV3VHY3dTY5RWVsa0pzQ21wNGVXWmg3cVZZeU1OaDlKVnlYWEtWMjJUdnNqbkx3NkFJcGd3eC9kZEFONUM3L1dpTCtZRkhkMHR6TFhNbHF2MlRiSXIxU0k3VFVROURTdHI5M2dHWDZVSWpzalN6L29jY2Q5QXluamxmVUk3TzZTNTFsd2xaV3hVcGlqZ1FER1ZzRktYK2VIZWYvUDR2VE5NY1oxQXkvQnVRRmpzY3hhVjNYQkhTbkdhQ2VLaGlpcDh0UnFBcUpGYytYYkZCWmozSnQvN1NYcDVkd3FyaXg5U2QyVVZKL0FvT2ZwY3djY1g1WGVZcm5oVlRQbFBZZUxIS2ovRlVUOXplTzZGSUthaHdJdFNRS2RXRmhMU2NLWVBxbERnaDhUcHpERkxGWVg0cFo2dFpUVU96TjFTWXI4MDB0ZEZLTDVKU2pJOEtueGhSTjRsLzM5SGNPdHhYc3ErV2EyQ0w4eS9Xb1gzUSsxSStldjZxWEsrYnZmaGhUVzFmM1hIcWE2ejBGWDBJRTRTK0FWa1BYSlYxWVg2VFpuVlppa0JGMFZTVWJGTEhVbUxtYTBOZmxqU1lWUW9PUkw0NHdDV0hKY0YzNHN6Tkp1RnZvc013bGMva01hQmtaU3EyWkJzWHhERFExcndsbmJUTFliaWZiaVpUOVcwcHJ5ckNrRFovSWFqS2JhUVlHZkpqZjdiSk91WWR1VW9aeEZOVE80Qk5pdFlkRzJPREc0bEduWWROVmFPV1lCWjJMek5McTEvOUN6MFVXYlFpYlRXcE9JUGcyZkQzREVwMFN3ZEkveWdBUy9SZGltYWgxbG5tZ0ZKRzcybnova0ErQkdHeVJrRzN3aS9HL2NFcHQyMGNYZ3NXaTBPMmVIMDdmWlc4eThHU09rZkJ6QTJaRTJENTE5VmZYOVJQYzRYNTA3cm03VUlaNG9xa2FUTVd0U21WVXJja3VuMC8yc1JCMUVFbk5DckdqU2d2K2tvei8waUFTWVRMcmxvdGpJbmlkSTk0amUvS0lsY1lpMUMrQlZOWjUvUXVwNjNnQ1JFWFBSZzd2UGxhV2Z2WDl0TklvWFVSY1Erb1lzbmdOdVEybWRpZXQwUmp5enloVWtuNUlSYWZHU0hNelE1NmEyMUNYZ1BmYzByT21pOC8zNnFGbC9uaUlmV0NPR3N5YSt4UHRtL0FQTFo2UG1qVkduOFBibzRFQVNmSGFtM3BjM1FsSDZXMDQ2WE9jSGFDNUJSb09ONEhyWkx6UENkKzFrNEx5T0FyZy9LY3paWG1yMGFQWldkU3U5WklRQit6RXREZVFFSHc1eVVzd3lsVmRYenZsdEJWYlJ6M3FTWU9sWUxYUUV1cWwwdTVUZzZjMXo0WTVhenZvdzcvWm9TTjYydDRvU21wcXpodXRPMU1rN1ZuZjRGbHBiMWNEbzZOQWhPeUVUNmxZVjFkUVNVVW1QbHRCakJZYStadFFRLzBYOERUNmY1cC9CME0rK0RrY3dBbmo2VVFiZjhyVCtrWG1nR1M0RHlwbDFyQy94UU1JRDRBZWl1enYxREZUMHVUTTNpbXpHSEhTS1JRRWRDekR3aWNYR3lZR3hvQ1ZHVUk4cDU4K0JLbXhCWE55QWdwdG42cGxVc1lSQkV1SnZROUYyeVhQUkt1VXRxQk8zU1Qvek5zSGp2Q0tVQ0VrMHdHT2NIVnpFMGJvd3pxVzNoNHBxTTl2OUZrV0lpRFdMSklsSVNvbmpOcFhkbTIvZmFjd0F3TzNMTjBKc0QwN0NwWFFTSVNqVlkxTitUNHE2dExuSXNxMlVwVkpkZWFST3oyZDRNczU2MDUwZGlHTDRIL2ZwMFMzR3cyaHVTb05NN2lHYmFCbStzRFFiWDIzd0JSN1hIaGlNVWpJbFJyaHRHUzFJRi9wNFgvR0xSZXVQRFVGTklDeVRUOGwyb2FoenNQMWVoaFNsaWlpRG1YeHpWZnkyNkt2ci9kWHFqc0JYamZBWmZCSlVxOEp0dkFJcFcyQlppVlZLVzJWbkVpYXZBc3BBZ0cwcmdYQmNVK0Fjdkt1TmJ4REhQa1IrVWUrQTNhRkh4UGpyUEl0b3pvaFFNbW5vN3NXTCt0aHhQdFEyUDlXYWlYS0dKRHlUUG9LWmwrS0JWam5uNi83d3NBSmVIUWdQUVpQNmtXU3hUNWRxaFJXcDB4aHJvQStoendUdENFZzNaZFdFZi9oU01wc2xMM2VjdzJQQWJDM1J3RGg4bklqdnVUOWNDbXhEcEQvWG14OWhrN3o4eHE4Z1lQWHl3YjRwMDI0M0pISXdVcWs2Z3RZbXozSzRoejNkK0xXdlhYK0tqSWE4VkpXR1g3Q2pvc1dCcGNUdE5kQlJCeFhoMUhRRDdESXljbnI5NjM4NzlzUEhaMTR1WHAvM0VSWnMzZlltVTlqakEwWG9MeGpkOHhCRGJjaDUyek93bGdSTDN2YUtWZ1ZpY3lyMTNSenZWZUtaZ0Jqb1JGRmtOL05RcDFsQ09VTU9EOG1VRUVuQjBWcEx5N3ZlRCsrcDZKU3F5SzMzNHQyeVFJWEhhSHI4MlErZTdiSEh1NUFPVCtNMkd3UWRaUVpVVTZsa0w5d09RYlhPSnUzdEpPeXRLUFh4UWR2ZFB0Nml5bUw1SFkrTDMwNWtESlBYNG51ZUtsa3lLQXZwM201RVRaaklTV1NSdytoTHhHdFRBT0E3VjVGbE9zMnE2MXMrMmZkN2lHTUU5RGhpK1Z3aGFIU0hTZ1hzMXJjOGppQm5udzVkdFlzL0pobENFSy9pbk53cFF5c3M5NEJFQ2pqM09lQkJCblZnYVJUaGI1MHR4YjVDbFJFaDFDU2ZNWVFKMTk2NnlETzhDMkZsQzc4dm5Gb3g0d0hndktEZ3Q4MnhsUVpHbERYRTVsSDZKMVpRVVl2UjAwNUEvNGtWSFh1c3ZoRDNsQ0txUHZEZjJtUWZiUHprR0xRTXh4bVdLOUptNlU3WXpMdzUxY3RFaloxdCs5Q3dVQUsxa3BXZEZxRXZaa0Z2MVpXbm1XVnVMN09FazRDZHFvNm5lemZtN2M5R3VRUms0Ri91aExMSE5jQXhHaFplUVZ5b1VndUxKeElJUzFlVHRSWG1QNTRaV3FrV2JZMWw5RTc2NFRHbGxUK1BTempjTUh4Y3d0Y2JGWHZvYlFhZjNhTnZ2NHd2V0RGMG41U0ZwT1NxZVhRMjNBV3hNRDlSRDU4RUFFak10dzZVOFFLNkcvWG5aZkI5UDBoQWdlQTQ0VXU4QTJlMnNuMmtoSHozUUxmVk9iQXF1UkMrREkzekg2SlNZK2Y4Y3lCbk93ZnZOd2FDTVBaaUhGUTVWR1VvS01hRHk0MU16TWpZdzk1aG1NOEd1M1VVVEFFTXZZNUxxQmtNTkdUa0xHZWhQYTdKcExGMVJMaWd6ZzkwQ0NybGNDMGwwZ0NWd3dSaWU3ZEpaeUhVUXdGak1zUk9aR0xMUVo3eDU1OEJYeFJaUlVyUGNnbUgvcThwVHNWU2dDWU50TUxrMmpWV0p4RVZCNDRMUG41dVZkQ0ExQTlYaWdCSlZrR3BBQk9sd0swbkZGNWZxbUltN1NsSmpFejIrbktEa3pmMlhjVlUvTGlQVEJvZXZ2Q0EzcXV2ZVVDV0NBd1UwQTNYZHY0YVVRQ2oxVVJUaEc0TnNSWGVvNHZYL0sreTZ4RzIwMFJNeUk4VW5GZCt5bEwrY0RtU0xyTHRyL1BKaXN4ZEs2RDFQYXB1d1R0TEJScmdiMkEwZDdHTmhKYkZ5K28xTjcxNVN2Z0hGV0ZNa3U2ZC9oWG41V0RMRzBRZW0zMGVncnhjUGQ0aEJDRXlNYjZaSzh6dDBXRlVZaDNVSnpyaklXWEtoTlJCRTBpZk1MQXhjZE1QQUlIUmlrYlkyeFZ5YnFuNVh2TEp6V1k1N3N0UVA4TzVGOGNET2Z6cjd4NFBoaThjVnp5c1V1b0RmbUs5YWxqYUFUaTg2R0tIb08wZXpFSWt0MWR1V2c4M1p2dzVvV0xmWXIzanFNZms5U2F0bFl6MTIrTnE4WGdYWTRMelVBWWJPNWdkdHdraHdmWnQ2WDU5dTVhSzFZRWVRM1Z4K1ArQU1aNUJtTHFNc2pqQnZZTHVnQVJpTUhCdnI2Y3hnYkdQa3B2OExBVkhDZDVVY0sySE5jSTYvaXprTXVoY2dmR3pDeFNIKzNpZ3dpOHlGMnBoOTJzN2pWYi8ycFc3bFVjTVZyeXEvRkU4bHlUYWxCV0xIWmYrOERNc1hpdVc1cGtYSXRWTzBDTVZnT3g5NldraTBGK0k4M2JXMGJnRDhoR0dBMXRyYVRPcEJnY1g4eGxCVG91QWUzNzVPMStiVDlvTWFURTFZQnB4dHgvQm5EZEk3bTJ4ekI0V1B6Nm54VFZZRmZ0YWM2WE94QllyTFFNNTRNMXVEMU9QRzBpK3lpU0tENkE1cldMcjYwTWtYSGdBQ1Y2WlduMU9FQVF2N1dxRzB3WGl2NzBEMUQrMTk3c01MUS9MNGxUY3dGaTBBRG45NlVnY2ZVR0xGQjVKemlBblZjeEJ2am52OUpGT2pIQVMrbVBxQXBIdGFvblZjcjlqZktGaHlGNkVlYWFIbFVGWU9IVGIyRnpVZjhtN0dwYm1admN0SWRCazQreG9KaUY2NmNhTDdhb2kxNWc4RWlaUXNReG12T3k0V1JXU1NoK3c0djVtS2w1T3BkaXhKNUU3QjJsMnZ1UlY1bHYwVWJ2U0Zkdk12c20xUUJ5WS9pZEI0R29tS3VDVnBFM2VWZXFUT3Z2UE4wWWVPcjhzT0RNQVJvdmhvYng5a2tpdElLdVhWZmpWQXkrdkI4c2xvcWFCanJSMWhnUzdXU1dFZDU3N0lpTThlM2J6bDNmL3hNYnBjZkx3cEpBZ1VQRlZZMTBKMWRSMjZkeHFXRS8yMDNpQm1KSHFtS29tcmhNYzh4Y2kvSFY2NjI3bzlmcG1XcTJTc2F4YmZiTy9MZUs4bWF2enpYaHN3TEh3TnlXMDhhVCsrc3VIcWhRbTI2VVA5WGE3YkVaVktvb0NJS3BsWDY4RUdLOHFhUUZYSFhuMDhzQ3VSMyt4OHE0bjc3RS9yL1FTZ2I0dGJXKy85c2lGWitIQmtQZ29MMkVwaVdpV1Z1UmsxbTUyelQ4R00wS1JHU2JQOXJqODhnd2xlQmRHTG4vV2JOSDVBTUxma2lIczlmYmY1RTZQVDJJcTZXY1hEem1oV2VRNkpNdTlNMG94OHVxMWZtaDVvSTVnSlhuQUtjaFIxclY5dDUxUVNHQjJFcHlJemkydFFwTGhpclRqSVFCSG9ycGExMlBRZHBZdDhGVDM5QTF2eWFOSjN4a2VrM3BEV3g5ZWF0QnFWRDZBZzVscWhXdERBS2N1L09JbU9CRVZHb0laZVlEQmQxSGtsSGFDOG05VWpqbFdDZlFMbXlnTVhkbUVJRjhCZ3ZRbXBkTGd3NlRmelBGOVpWc3ZSaVpzUWhqZG8rRzhqeERnTzF4Ymk5SUg0ZEVWTVhWVG50dzhZQ1J0ZDk1cEduL2RrS0h6NnowZG1PTmJnQzhXdW4yVzlMN3BSeVJMTWc1M2RwU1NNTC9aR0tXMVgwNmJPUFR4SHBOYVVIQWNmK0hSUW1KTHJocUI3QTZ4U25ucHBLNlowQnlEM2QyVzMxWUVPbWtQN3lKVVUrRmczTGpkMlNFbjZKQ3Nmbk1qZzV4Vk0yL0NkcC9Wamc4RWJTa1orNGhqT0Z3dkR0U3pRNzMrU2oyZDR1VDk0cWQ0ME1uRzVDNTI1RnBnd2dlNDBiTGtlY3RmU0t6ZVk1Z1JESEFFWkVzRkVkWkpDYTM3WWJqZnJxSW5wWXNJYzVRNXRvK2NRL2Q0a040OGNrVTExQzBUYjN4MzhtNk5sbE1pUHJjWnhnTE1acmZJMCsyQ0ZiYXMyajUrY0NQS1BEMHZabDVld2RTMnVIUFkyM24xRFg2QzltZDlsaWFmVkh0eWp0Z3JsQVpYcTNnZ3BIY1AxZCs2NDZZSFpJQWJSSGdqNzVwYXNUYzVaY1pPWEliQkdiWit0T1VlL3EyU0svYmx2aVdjaEVjbG9kU2RYZUVsQmt3a1B2MFdTbHVMM3hwTGhXVFFuZ1VyVGVMUTRqNTRDMm41cytPQ05MN2JTNVNKbVNoZzFIUzFqenZXSEtRaTVqMnlndVI5QlE2RTRMSzd1eGNyZnF2RSthT3J3S0gyMWhNTkJCWFlXdXhMbElsSDhLU3QwbEd0akowQ0IrUForcko2UklDa3RDeU5YcVREME82UkhyOWFiclBwS285K0Qzbk1tTk03aXYvQmoySkdsbGNtcVZGQmZraDFudzlNUTZRS2l3dkdYWnl5YTZ6WVNMczZxelc4VGVnc0lMcTNTYUUzNmxBdXdzR29CamFmdFg1Q1Y0QTNJVVdGdGwvTTE1STVLK3lpMVJUYS9jaHBMVUdDMExtSk1sZ2pCK3BQaGhLbS9GblRtaTRMOS84NERnL1RsRGFvMitIeE1SSzF2K3pCaDdhdnk4STFXN1ZmdmczM01FNThwOHZTeE9nRER2RmY5cHl6NFRueUUyNkcvdEU2RDlDTWZKSmRKMDhleDQyajBTbHlNMXdQbWRxWG4wOUZvVmxSdmpOZFRIMUFDSjg5ZEw5NFhxRXN3d1lZZE54Z0pKREEwV3BjblNkNTFpSWY3SlA0bFNOeU1PVEx6dlYwZWtyek5XdE1WbWVJS3JTZlBSMVUwVnBzSVdMV3RPK0NhM2hmaXBmUGxJcTRka0tTcll2clFmV3VJTzFUdVdCNWRRRDRTeFhHam91SDFNRVA2dGwxNEpMWDloUFpYOTROWXp3OEE1TzZrTkpiUEZCOGVQbkpSbW1tSXYyeUhkc2x1MFdTOFh4emVqZlVQbEVjVkFTNFRSSys5QWlRTUkrVHFSYmhsNno5MHZtK2FmVzNPbWhjdFlVQldCQW95SzB3eVF4THVNdjZZRnJIRW5ZeWZLZk9UVVowZnFEOTQxcHphMGxoc1kvVE11RndoRWtzU095SitYK0J6VWpLZDFNRWExSVA5RnRYaGtEckJmRHlGMDhvaFR3VjBUQmYzR2RrUWQ0Um10OWwxY3NMU2hpOWdwQ29BRTZDcGVPbUtIV0loNlllNm5qYlBUaC9STGFEYituL2RmQllkUDJsRzlaVVhQeUpQK1dUMCthVzFQYVJ6MXpZQWNWUExtaitnU0VZaFNvQldhNy9heE41RDg5bldRWXN6d1VXenljSzdld1FEK0FoSEJQZEtOeVExRFFZdlVNaWVwRDcwcFBMY1R5NlYrSnBLai9xcWxSenVlRS84b09EMjhQNmRZR3pkTkthYXBweWRNTzBSNURyY1RFVFBHQ0M2aERCTk1kZ3FzeDd0Y0hzRUhlc0QwblA0WDFIajJhaWkzb0l1R01oemxNVWNQQ1Z3RVB2ZDNWL3hjalYxRnM0aW13Z3l5RVUwcE94SWthSDd0UmFnQWJNSjZyNkxRWUYxcS9tQnZyWFhoVEczUytYdk1PVnl2elhXWittRXdNZ1RZRDJRbWhpYjF3MktmNnpuVEV5UFg5dTF6dHFsMDBWNGp3ZjhNaEIwdHc3b3BoQldWWTJBcTlnNGFyYXlFNXJLQWY3cE1QMFdkYkZSWDA1UXorNjN6SUIzMldQRDVXRVBCR2k1TVNjbWZIUjZlTFd1RTFMQ2ZnR1I0Zi9YZGFBcmZ0cXcxSWFGWkFEdy9tWkwxU29zbWFZNFYxZDdtdmhCdE1RZCtuMVducnJRQzZxdW81SXhuY3pGRVZlbTJCckdTemlGV3ZhNmhtOEg1QjUwaWpraEdBUVNBTmN3cms4VHZWWWhJZmhueExyenIzNGlMVmxodFFnVENyekZzeFhUUzBrY2JseWNqM1Znd0djVHpwYUZUOTNGY3ljelI4MmZiZi9pRERSQzZxL3JqZDNDbmkxemRmbE8ya29OelNlQXA3aHlZczR3R1pkc0d4cUhmdEtPSkQ5SHRJQlphS2ZnMkp2TmxOcjNZTE5Kalh2WHMwMG12ejVzRkF2OUZjT2xlcGdEa0xSdlZCKy96cnp0WGJybFJuV1oxcUF2YUY1QmVPUUJBeEk5Z3RzWmVhUDFSc0doQVJXMkNGWnpzeG4yLy9rTGdvVG91cEFRRUFWZFpBUjdRTVpKUGVEcGVLazNFOW5TOFVORHZlc3N6S3BoNVhlUHFHK3UxQUZwS2FVMEo3RWZPR1I4TWNGYmQ3aHdZaVlJZnViS0JDaGx4QmhiUUlHenhvdDNWUDV4a3ZHMm9nVDB3amlRWUpmNVYxZDJWa2JGQzJhVlZQUmM0WGt0bG9xVG8yeG5leGlwQmZCK2FhZkFaZjZxNUErZ3U1MGZ6Ti8wdmZrckpGZUp0T1NEeG9wUDRpK29XUGY4ODI0TEo4ZHZNZitBTytxMmVxMjhGS3V5YWFobjBoRHRXUTJ2eXdyUWh6SStiSnZHR1RyRFZWbXMvTmw5akc5ci9KL2tBS3BYbnBkSTBxMEUwVk02RDYreHB3VFUyakVQaUx6OTNUNW1RQ1AyWnhtc0FnY0pFb1Jzd01YVkV5SGJxaFlPUTErRUc2OW5KRzJZOVhQVFJQL1YzYjZTV0o0dTg4cTJIUm5PZUw3QnE1Z0hwQ1NZOXZleHhXckl3YkNEWXpMT3J2Y3M5b1pMQnZZamtYMCtTY3kyT043aGVXUFR4dVVYS0lZdVhkRDE4MlFXSEM1Y1g5SjRsL1h0RTZ2YUNmU0ZEWW5hTUlrZGhoUGpic3E5dVFYWjZQYm5RYzJkdWlwbWlBQytzcWJnU3JNdEhUd05JVmx4T2FvYXdaenk5aURCVHNFTy9PWjcraWEvSkFtSGpXL1hjREJGTUhmZFJvakxXTi9CTU1yc3ljRXZOdWNCRGo4QWlVbWIxZjhobHJSVjczeEt0OW5ESkNwbXNGalpibDk5ZTZYd2RNejhPMEFiU2xseTNKL2h2alk2Sk1ORGk3SC9YaTZjUTg1TzlnTWNCTDlsRkNmcStNZUZUeEl5a3plTnhGcktjeUQ2MUs4V0Z5M0tONDB1K3VsTnNzTTZEWmRRWW1Ba09LeVh3Ym1sYzBHbXpCSVFqNnhtRVcxOXhuTnJXN2dGU05LZWowSmtxZWFXcW5hZ0E5T2s4QUd3SGR6emNZanBFQ1M3aWtwVnRteXN4VzNpVURVNXFzUEFsMWxaVld6U2ZaWVpMUEcwSFJKemoyYkRrQjh1YVIycFF4VXIrUFpRcHZYaHBzREFQT0xWT0dKYk9HbTlHWU9VYjJKNkNOSi8vTnlKM0ZQZ0xGa0ZWeEVWZGFqWE42eTNpc3JkbXhKWjRxNlNNY1BFdW5HNUkwM3RMRktpZFF2Ymt4NVBEYmNMeERBQTZ5M0JUMFpWL0lVdkorUy9sUXc5bDQ3djhzeFNSSG0yQnJxNURQa1B5L1hmYWRheis1V0pwalFVbXhIeXljUEpjUHBUdkVFY3ZrNXFIMjJSdHQ2aEdVSE9XcVlLY3B3OTFINDZsWFJIUkI2WUlxQjhhM3R2ZzhsUHdzaHY1S1hYZ1kzQ2poVjNvNjduL0dOSVAvMFZScHVYMytGTzBVNU9ZcjRXd1BQYStTZHhjdFlIN05RQjR0SjJDU2Zuck9ZM2piSHU1NlYwZDBKcVcvc0YwMlh3S3dXRlZudmxmbmNKVnJxSThzVUVyenhWcC9pMjVGRE5GSlYyOWtHMCtkcEFEQnpCdENKcGtsVDFLaExIZ0F3dXdMRXowRlRTaXc0M0RZSGpWMllQN3hzOWQxR0RTU0JLK0VDaTZtU2FPWnZiUDlVenhQN1hKY1F6WXFzei9nNm9nK0RDVDlybUJmbW5MUmJNUWFxdTRsY0lQZ0hPZTNUMVYwcmJZUG5zd2xvOTNsa2tlZSsybkswdEJ4c3NYTk1sbzRQVE0wbnJVRlo4eXowZ3hyT2hqVWgrc0hMVFdXT1pvRlVTVWdCYVJqMWJFRnJEbDVROEYwRGQyWDlDZnpVVFl3YUc4WWFPVU1OSWlBVXVyeFFKMGRGbit2ejhPTzdEYzRHT0VtcVo4cHFiT0dLT0RiSURJR2Z6MEIxdExKemFLNEY4eVEyRmFnUmF6a2ZrVmtkZXI2N2QycHladnhJekE0TjdFMVRyQUh6RmdUQndqdUY1SGVCbnBrTEhtbkczVEhsS1B5K1V2eVpZRVA4U3NLZy9pTS96cjB6UnFaT29WWWFIb2lZalAxbEZ5VTB3K3dpRk1UeXFKNmtvQWMwY0lVbnhpL1lkRW5icGwvNE1qQ3BGTENXRXJRdTlCODhlZktQSkhhZHo2OWlrODZQbDFzL0NqTDQ2TVYyL3orb1psMGlIZC9OVXpLRW85MklKbUZvQkpxWnA4aTJoanVVYmZIM204Qi9TWnRvOUY4QkNwb1Z5WDNtZ0MrdGlDRGRUTFN6TEJXUE5BUEU1TjRkYlBlKy95LzBOaDN2ZGRXVjd6U2lzTlBiSHE4dVoxR3hicXAveldMNGsxTDdsTU5pUFJuODdrbUJhOHV3cU90bFp5dVYxTldSdTVIa2RpWHRIanUyajR5SzJ1MkZINnJRT3EzaG5tZ0dFNkQzTzluK0xhNVVTNTRDZklUZDdnSDFVZlBtU3c3T3l6V0NzTlpqYlo1Z05yTVludE5BYVpHZWdBNVFxY3A4M1F1ZE9oT1hqdHFiUUFKclRUMFUrN2FRNk1WY08vZE03T3pUSTJzN1ErWHpnZnVHdUhwd3ZVWEhXT1kwYVNSclB4NVdMaHVSV05tenVmUHJuekU5SlIxMXFtOGMwWUhuRkRReThJZ3Y5MHN4U2czOHFJWnB6aE41VHhuQ0c4S2JZRUxENEMvTU1Va292TGc4b1ZqZnhZUURFVm9YcER6clhUNkdNczJrUnBnWVh1a1pBeStzNlN5TmZwQm5jQ3JCVW5BU2lRR2t4NmlVcWQzd2FPNmNXNGFNUjc0L3grSnROcjNaQmJXL3k3cUQxME01dXQ3YmYrcThyZW95blZ0UDhFdDN6Smp1em5hMW9lZWMzTnRsWWk4MlN6TnppdmxQWGR2YnlrcFZDMFJDS2VmSkVzTHlKTDZmOG5Ja1pqb3ErSUJFTHlQazdEK2NmZnFmbG1STS9aRDhEdmsraXpMWkFkVFZGbDljSzJQNE1PVXhKNkF2VHRkZHhHNmNhVlpSWE5SWkRiNUZPOWlNZXhTTmRKeiswMVN4eXF4WUh4bzNLc0Z4WHVwYUdLaWdZQ0M0MHowam50WGUrVVhRNUZtSlluZHE1ZHhTUTZueXRYQjhPU2Q4VjVCOGNPSFh6bFZDanozQ2ZnSEpJdUJ6cmlPRFhqMURhRnM1TGNSSkhFenBVRmpKR1BwOUFLVkhVcGJPRDV3dkFRbmNUdE1mdzlXTDk0azh6T0RTNDFqK3lSRlhpZlVWY0hzY1NwdmhJNzVKSGE3bUg2Y2tRZTJ6bEN3UUJtZDBjMnJLQkN2ZUcrWDJqUXN3WWtSUmFVREZjL25KYU8zZlYrWlYrRFBxYnh1bDA3OE1JRFdvVk5HUXh1R1I1VnhVOERwd1pnUTVaV1lHSUd5ZEpZOHJKTHRZdlBmTDJSQXB3cGUzNC9KbUJKZlN2RlBjUUYwaXVrYnl6eklud2Jwb3FSUDN6RDlvU2lvWWRPVGdsVmppczJtQmt6YUxmWDFtSmRlbzVFd0hYMmR6dEtoRzZTOC9vYkdUVzhlN2tETm9Hd0Z5UWVKNnpaNzQrcHNadG5nZHhxRE9ITm5acDd1UDVvZ05BajBheGc5NkN1MEhYallCNHBRTzB4MHNqaE50c0NLMUdOUU41ZTJCN2F2dlhqOUNBZ3NaOG9HZ0UrWFFwa0RZK2J0QzhzR08xeUFuazRNWmVSTHNOblV2NmlrMEszTnR4TVJ1UlpnYSs2YTdINExoaStwdUh4bUYxd0w0UVJ4UE12UnZCbEwxNlFEU3BHVzRuSWJyeW5acmkyZjAxTDRwV0NlNkpHRjc2SnQ1aFBBcnlvSVNzQjczTkkxT1huSXdaL1Q1VG16MEF6T1d2ZHNzZzlVUFNQUWR2aGUvOHBGYmVyb3RURnV2enRuM2ZYaVM5ZWpKNVRqWmFiVHdQRUVBeWNiU0xYdWRNUXRtcTYwV0Y1blI1YjR5bVRSRjQ1NlplM0RVRlBoRzRuN1NqbWFrVk9VczRLSjg0YzkxSTd2Y0NYT3ZVZ2NVMDJIaG9NOFpRd2ROQzIrYThnUEV3dm5XZ1ptcWsyMXhzalRoMDdlNmhPZloyck5iZHM1VHIxdWZmN0cwTVdaRlFic2M3VktKUmk1NTlzZFI3R2ZTVDRuWWZaWExmaDE1UnVyRGRlZUVNWURmUVg5OS9oUWh5Z2JrU0lFampoNW1jc2dzbW41eTJnNXkwU25md0ZrM0Y1eE5PQ1BzWk9sM0NVbTcwRGROKzdER1VGbFpVMEgyYTJWMm0rbG16YysyOEJkcFNZcGxGeDdzR3BXNllOYkFZMFBvVTlFMnFhS0hrdVZjM0NUTndxSUlRNnJWengxdFU5UFdUVnRMVGZWZG5kN0pwa0xONkppMHhIU1FkM1NrbjZFYlh0T3JQT3pjWHdoSnNnOE5qQkl4MTVqVjVZMCs1MEdDU1JoZUpZbnpWdXhReUJQcVJtb1RSekN2S0V4aW5ybDVaeWF0VjlpTHpySXE1NXplN1FJOUdTVktmZVJoV1RiRk03dk5MOGJYRGdSQWVSNm5sRW9KUkd0Z1NzK0Z0Z3VHRUpIS0lzdGIySllHN0RQei8renFCT0hJZ05Ubm12MkZra1o5b3VxSlNhUG5ZSnNWVkZVdjJmS2pJcmRITS9oQ0dsQ1R2U3BoSkI4d0RncjdzRVJ2VkFTZFM4SVoxZzhDYm45V00xdHdnOE9DR0ZUUHkyaS9kNWVYYzhIOFVOQndheHg0MmlUdzhORGg2Q2VpNkZSNCtjSHRXVS9zS2d0TzJJTmdWU1RrQjJscHFsak12OFBXUzEyTE9ZcE85QnRiaVRwRFBLckhmRFFtYWkrREZLREgvSlJNU2xJdktuSmJXOGU0TCtlQTB4SVFmVDREMzJERER6aUZ5M0FDT0ptTGtEbGF3dUxZanQrdmJPaDl4UXhxMWJ2TXdmQ0xHREhwaVVJT1Z3VHJIUk5nZE1nazZKN2JHM3FlamlSVGlEa3dTeEx3Tnp6ZTNJZFlhQXlSWE1OL3hZeHc5YlNDSTRpOVc3b1oxcHJGOHQwN3FtSDhTZGpMVm84OXBlTWFIZnZlTEUzcitLdDVTeDlYTnBXeFhPeHJleTI2eDRWZmhMcys4WnJvQ2VTMHZwR24vaXM0ZEZsbVhzS3VJWm9qcmI3enJpQVZDMnd2QUJYbDJmK050NHl5RkVzSnNCNjQ5MU11NERyakJtWTRUSlYyN0VVMWFMYUF5Y3VYZCt6dmZDQnEvNGs1bnNLZXlRNCtFLzh4bmJ0MlZFcDJScmNHVi8rMmU4QTVjOUlGblY3bHltelYrejU2TThnNE1NOFpCVVoxY2EvRkM1S2d5djVic3hwWk1XRlNLTDNhYnNxaUZ0YVVCckVLRCtNcGUwWnc0LytscDNnYjN4MVlYaGt5bHhYTTl0b2dtdGFQUUlQeEt5RDFGTHBiL3FzSVFHclRpTDdyNkZsWk9xdGRES1NKM1V6TVRZK2Y4cmJEMDV4VHkvaURyeW1aV1NlWnpFVmMzOGJ0cHQ5K3Q1NVVOWFZuOHNpSEVxV0dndS9nL21QcHJJcWc3NGtlZ2JwVklGTDdDdnBvMitVRExqTlFMVlJQT3dvNDRvNjRWeU8zaGRqOGFBNEQvMnRiSWswMHJBOGpsQW5BdzRoYnlwWWdveElhVUQ0RU1GNnJTZit5dVBpRExJVEtyS281VVg4OWpJUys0bFBTVUJJK0lxdEk4MWlxL1RSc0FpMWNXWndqQlBIWFRqZG1YUFVESDZ5djlyY0RaM0pBR202aGlYUmZQMXBRMDg5R01qVzQ1ZTFaL2VmeW1WbGhIVm9ZY0hRamxLUWtwM1kyNU92d1pVMGVKM2VybFdMQXQ1WmFlcEZCMmZKOFlaMzZFL2NDaFh5N0IrTTBzYzV1V2R3U1kzZHdad01qWmgvMS9iaDdydGNvbFIvRmNpTCtXOEtiLzhFRTVHR3grOTJvdVkxeU03eHo0bzhrOHNlTzhUNGVGQk5KNDh6SVRHb3M4OFVpalFYL0NyQnk4T3JKbVR6Ykx0QmNBUDZqY1R0UVBkcURLYWcvaHppbFY2Ykl6cThvOGErN3dLMjFlMU16ckhsVk5RNlYxVVJkZGZDUWx1clV5MVlkeVlRUmcwVTZ4b2k1TU10SVc1cHQ2bnpjMTdKdTBrNEJkblNVNVdwc0MrK2oyQjBIUUFFZ1F0OGRtaTdpaW82TzY3NGtza29wdTVCSGNqU3dOcUY5NTU0aTBhVGZ5MnVkOHozZU9TaGlZdmdGNTN2ZGwweHB5cUNBcU9tN3FZN1JHZVF4YUdSaW4vVjVtUnJJNXZmbC9ZWHN0T2lmWi9PZWQ5anY4bnhuRXhOWnNxTUVzUStnamdxdWhhZGR5ZUdlNGhzcTJGSmtUdy9pT2w1elU1NnRMWDlZMmRkQWJwd1FBL0xESzNaTVJrZC83WUQvOVd3ajJqTUMxWEhNczV6RTN0a3l5OFdqK0hHQ1JXTURXdjdvaXpad1BHSDRSSDFBNFdqVXQ4ZCtMK2hWT1p4NFN0NENMeEZ1ajZmWVBpeUxLVGMyelljSW1GeDdwWExBekxCSndiOGoxUVp4NkZZSGpJUWFtVDFEVlN0OWNyUlU2T2wybm8reExUNndwdGhxQ3o5cVNUWTlBNWRocFRqL3c3aW1BNDEyWmRzbStLcXlNTXNmZ0w4eFFJcDZ5SVdNQkNTMFN2T2l4RTIrZUpwalBnNm9wNTV2UzZKeGd0SmpPKzhJb1EzaE9pVmtlV2h2SUI4c1djTU5zNmpjSmJuQ2tOVE85V3BIdzZpWEhDdTBwTGhRQ0NQY1JwZTZzM1gzd3FTL3I3cUhLWW12OGFwQ1VRTDI3Skd6VEhoYXJnallBSDRDM1luZnlLTkZzc3dtVmxxZzE3VUR6TGJrRlFsRGJVNmdaRFcxTXdNeDRwQ29wcGswbUIyMTgveW44RkN6TTJ5VjlXenByTS9DdmpCRXBUdTBwd25VaDJ4b1kzZnJjcGtyUDl0VFVUdjdzM1JSU01Jdk0zaGI2c05EUzZHcjVFSDhmK3VmUjB5dkFUMVA4blczVER5Y2xlby9OSXFuU280TkN3Nnh3ZFFXK0NHemRuYzZSeENpcVJrTjEvUXl2aER4d1NhV1gwQm54M1pmZlNBdGNpaThhRlNoSThsU3ZuU0tOcHlHK0EySTJXbzNJVVJwdFlKUnQ3ZmhFdmI5cGdCQ21ob3JsWUlWcmNOVVJZTHg3RFAxRVM0cTdKRE1JQmQ1cjNGWEJ2cXNIWXJJWHhaa0JsWkxEV0xKRUlITWFuaFF3N0ZEUThIZHNrdkFOQXNwM29OamFYdVB3NWcyY1djNFF1M3c2WWhuTEhyeUJ1SmRvc29XVjMzNGVqckRMV3NSLzFrMmRqMnJ3aDIwYWc2N0xvNkcxSkRsYythS25FUmlVaHRLWG93TVFNWkJZOTF2ckZ4c2xGWjVOaWhrV0dnKzN0dzYyd1pYUE9FaFlxNVpEdmZZRHhOeFBIb0ZOc2E1U2UvME42SUFJR0gyN0IzTktGWFV4d2xsdEtwK1FUMUlUSEFYdnpQbVFnY0FNWWw4bkpENlh4SWlFbVpNejhEYVlISG5ZVXNJTzZ0eHcyWUxzWGVJM3NqWUgyR0FxSGVRUHNzNG1OUlZlckxEQTdZRytDYzU3MmtHdEJCdWtxek5EMVRxa29IcHRsVGozdjZ6Q2dQZ0V2MjNWQVZmSVVVOWViTGpIMVlsSkFkVnRGellEVkpETTdPT2NiOEdNU2pycDNTSkVsaDFHeHY2bU1iM0VKT0VYUlZmckphaE1CS1QyMkhWdTV0NFZsL2JEN1N0NDNkK3NnNXo2dUNyb2RxVTVnV2txWmxVQXRTdXptbzN5MFp1QXVlQjdubXVZb3Z5bllpQ2xiWmQ3L1NUVE5neks2U1BXZ1pRWGdYK21jMktiY3Q2QUZZdTE5bWxUdGUza0Q2T1JUZ1JtYUVVZUxPanFlWHdRa0U3aFNneFRIdFgrejUrODJRQWZKSEVwOFY3bFkzbnUwMjFURHlBMllmc21NaFM3ckdHRTl2b05ERi9GbldTSWZFQXloVVF5RUlORDR4K3AzWTFhMCsyN29sZHgvUXZBUmZhSUh6UHQyRXRvdGZITWJ2b29jWE83SDRRMHhPZ3VJTVJJbGVFRU93MFVJQ0pSVUllakJmR2tYaE80MllscVNKRUxVOVEvUDFBblY2YS9nUnRLRUxmN2g3VVNqK3VvNENIVGtOSHZWR1U3dUtYT2FEQXZ1TjQ3OFFDaVFnaVQrU2NlVzFEZ2w4d0w5cTNOUFg2TjgxdDNHaGVTSWh0QjlVSjIwclNtTWtqUFlNTG4xem5PcTRkbFd3bUFFNG13NGs4QlZzVmxJNXNrbTczNlhKZlhyUE9aS3lRcjFGMjRhV1ZXOGhuclpveHlpd1JYNmZGU1RDalhuYmU4MkY3cEZzaW9HNXE5Z1pSNmt6ZzROSDNsMlFlZXBXS1dsb1ZPM3BpdUdVa1dqaUZsVzRUcUVDMytseTV5NEtTcitQcStrUmQrd0VncHkwMkdLL001ZlJ3eHU2TjdPbmV0NUQ4UzNMbTlrc1VUNm5TZ1duWTBEcFZpRjF3Q3lpTC93cDExOEJTcHArdHNpRFoyWDVwbU93aTBJckMrZzYvSHdrTCs1OXdJZjJLTmlsTk5rSHRpd1hCcm51cXhVZmlHdGVFZWVkZExBbTJvdkxaVDZTZEY0SFVKYTZId2s3M1hJcFBVR3I0alliaWwwNmZhTFRHK3dERXQrUGdzTnhrZGU5WWFSRWZRT2ErdjluWUNaQTh0NFF0WU4xaDNWMXEwbENZSFBraHY1Q2hUUG43d0EvQ0lNc3dlQ3VXYmZjejNpK3JFSzVOZlJrTWs0aEVCbE9LcEZkZys2VTRadkFzMGIySTNGakIwSittZFNWOWxIVzZ6dEgwZ1I2eGZoMEFkSDBnZi9WOVlXRTNkSGlaaGk0SzNaMkdoTU5WVFQvVGFmQTl4cEhHSEN3M2laUG9XNzhqT3F1WWVjU0R6Z0NXeXppdjVNNThEdEQ1eXVCYWIzWkdIcWU1MkpIYUlDS2pIejg5TmxCcDBjVUVMN3YwMUNIMENsYUkra1R5dWZmcWtQWmNTYjJRTlRTamVqWUYvOUJFZi9jUkY4ajNlTHBTV2RVRW1hZTZ1d3hWVGU1clExbDBCRDZlWjgrOERqdGVYVVRDSW9BdjBUdVYvUEs2NTJoUG9SL2pjOHV2dFdVUnVFK2FsaGdMbnR4T3V3V3pPSVhWV2Z4N2hDQ3BZUHR3TVpMZjBaQmRQVE9FZjd4QzFBbnVxejJtWUkxTEt2b2V4dG9kWHhkaThWM3BCVjJoN2JnTEFhYlRiY3hpZ3ltVVk0Y3M4NmJYTXE0ZW9RWG1rMTlOVllOUFpBTjBXbG02bXp4SGQ2UHhPNS9GcEl6NFpjL0s5eWFreTcrQkh6T0FVeHlJL2ptYjJGUXRGN3VqK2F3d3A2ME9MaUJ2ZTBhaFlvRGJzdWVsNDN3SmZhWHN6cC9ubDJKQlNQbDlkSmFWckpTOEw2L1A4MWxlSGVqbjZpTU5vWDlhK2c5K0pSWGRpeTVNeCtZTzR6NkVzdy9lRkdkRzNLQTZUazBBdmRHSFNpdG9oSVZZSnRxNTZ3R014bnduNWRBWVBoT2xqL0xheFVwMGpqRkx2NERkVkhzSEZqc0VWcDNpVFY4RTdqUHAvQ3FlZFFuMENwOVQrUjhOdG83OEg2cmw2bDFJV0R0bktSUlpBeGdvQXYrZjRjQ0RneDdLNlE0ZkR4MHRyTEN1ZFVSaGVWZW5UT0pKbTJvcWRSK0RmSGhpeWphUm1udmZma1NXWncxQnhaUlhFaFI0NUF5QkpJSDhkaXpBUHpkRS9kdkUxSWc0SDN3NmFHdm03K1VOOFZ1dStUNDdwU0ZJUm51dFRHRnp1MllMd3h4VkhjQUV6b2d1OGxzVmpWcnU3VGE5OHdUdFpTWHR6RGVIZUNMMlp4WlgyM0Y2NW5CZzg3d0NSejNxdnYzMk1WajF3Zk80VytYRVlmZ1VKTGZvbGpuNzBZMWZINHpZTnBCLzBldHgwdXdVaEJBb3FJUm1DSDlCb015RDdDZVFBOEx5TzVpQlNmNW5hMkxBaTR6dlVwVzBxVUgxUWM5SE5XU1BVS1cwdGVLVXBINWV1Mk0xMlJSM0hhYlBKZnBUV1l6WnJHNEFneVQ4OC9mNVE2R1NSSFQ2U3lSUUg4OStxaGl1OGhYNGh2bXhacTNaRWIwRVY4NkwwRUxYV1Y1VUU1NE1wdXJhY3R4TStEbEVmV3NjTUZoaHN4ZnMwZzdmcWtDbko2UVdrRHhqa3hBa3h5RERhL0xUVUQwcDB1eFFWSXkwRzBRdG1VbUpIbklXRVFjSkZoM1hXcmMxaXgyclphY2lxbXhXOHRLTEUvRXBmY29wdzViTE52am5rd1lETVJ4Nk8xcnVIZFdSd0l3TVE4Vmk2SGkrajJaa3lCUjBIWWpTR0pRdktKb2JNTU90c2hRSElvc1pQcWgyV01oaGpUVUZjYitzejVwK09FWGhFZGVHdXB1eVRmRGdieE9JZWVNUWZKRVE1S2dLdzdHZUU5SmMzdVJ1a0d3MEZwRk1qNmFnaExBKy9hMStFU1pEZWlYdGQxVGlVaGNvU2dTR0I2SlZPUjd6QUpMczUrT0JWdVZvcWVQSEoyQ1lKUmpKeGN4V0EvYUdJak8zMGNEekQ5WHJubmlqQjF0TjN5UEgwWGtjNCtSS1ptQlBTWTE1dVMvVjdVVVd1N2dsSjI4NEFIbVJxTTVTSFJ3VkdCaHJUTjIvVGlnM0tVTVNqRE5JVkY1SXVhUHFaRVFpNTlEY0dlenlEd3pBenM5QjFFQi9pRG43R2d0cVZscmxZbU90Q2xheG1DSStwazJQaXh6WU1yWkhleEVxUndZMVNYb3FBTFhOemthVFRac2JXb1gxV1JjVHN1bFhpaC9JWEZwUFl2eEVhNkFGWmZ4NHhsTk16Zk9JdVVSY2J1KzZxdmhhU2hmaCtYdTZTa3ErVmFER05hb3VLcHhZT2I2QitBKzFUZUlJRzdMM01SKzVIdFVURFIwZ2JjTTB1S1o1NFBia3hBRzViaHNINm5IbVErMUc3RWZwZG8xbDVjSjdJSWNIaDNuR0pXc1lsM1F2dlhaYWhKdlB4NVU2Sm1MUXZvUURKY0ViclFaNTIrQzNSRnIxMXBaZC9NVVVSdjN0UWgxMi90UEIraHdyMXNtTm9CVWY5bE1TYjhBQmh1MDZ5dU5mdWIrUzdNN0RiSUhyQlJtL2ZFQmZNZWZtVllVbmdnSnAzeXVZYnFIZ2xRYjZDUVZtSHNlanFhWjlNVHowYXJDRXJBdXF5R2srVWYycmo4UUFSWmk1cUN3bnRDUDBmajBLM1FveEpsZ2ZwYnRrWkdIRlRTdENBR0JLS1kzOG5sK0pLOU9RRkZ6UUxnU0toUExORG1ySGkvWnNIR2JJZ2RTendDL1pXOXU2aW5vN3NuNElVUnUyQUNUOGlGVjhDanBHNnQ5dHlDdk5TNTFjdTlTY1FzaW45K1ZSa2pLZlcwQ09pblhOVWpuNXQ5eG8zOFhRZURjcnZqampMUEFrRUlhU1RRazkrSUVIN2NSRXdFNkhsYi9qdjlTT2ZkaWtmclFsSlpxQTkxeDJEWDNjWjU5cnhZbUJiUGVHS3NaTkZJT3ExU3psSnJCU1Jid3BHYm5UT0lxM2pZemhwNERjSklibDVremRqcFprQ0lIVDh2VnhYZ1lFYnBwYUVjSmJzY1BucVZGWUNNd20xUDRzbGI1MkxTN2JUN1I4REFDVUptYi81bG9xUVBUVVZwWkNrQ2lOalVCcEpNeE50NFpxZDQ0eWwvMWxibllDcnpZR1JPc0RmZS9OcnU5QTJ6TjN0eXhCZmhvZDNRNzlTcytMOG5MWnFaZ3MwSzBxNUh0dUZqQVUyWVArdkFMRmt3RytpYXV1bndBTjR6cjI3U1owakE3dm4xclIwM28vVHU2Y1FvTDFPWHFwVld5dHFtN08wMEZrNFhvYi9zdzZtQ0lYUzRNMHBTc2NaWWw1MDFOR0ZibDJtM1VGZlhzUHdncVRiWkhGNlhCMEdqdVJUMElmTDFWZ2I0ZWVLOENnM3JPVnNtd3JoUnYzVlp4c3lHaVp0eFlYRFZxYWY0VGZEb1JSR1RnZkk3eFIxUGQ3aG0wYmRUdXlVUWZ1Y2hlbHlLdlpIY1ZHS2NMVDUvNW56NVVIMlh4L0ppdU5KOE5SMUxUZ1FxWXlnaDFsMTVEUVE3eStDcG1BZ0EzWGVIS29Tc1Z0R1J3YWh4SEJ1VVAvd0FrNHVHYVhYRGI2SzMyUk50K3BJbVV1S0ZVWVlyQkMySXc0eXFHTm9JZDJxQmdTWGpXWko0TVhOVFI0dk85NUlWbkMvYWdLRkNVdjlvMGFmbno4WlFuQ2ZscUlRa1VBcFRNb0VBOElwVnBUNHlhbS9aRy9rWHJ2VGNxMWt4TTFGUHZ2VVEzaFdLYzQ1TzQwUVozRlpXZ2NzVzFUdi9BK0cvTDZqZ2FmWGVCcVIyaEFoZ1RpbE9kWUx0VFB3ZWtvaWNwTFo3aWZjZ1FpL2ZjZEFmN1kxQjEvaE1lSXM4UG9YTi9zNS9zVkJUc1U4QmNiVzgwemg1MkpTOVA5LzVCNnAyaCsybm5qWU9zNlZVeUpPSlFwRmN3Q2wwVFVsUEo1bzJmNEZjRHpQQXFqYkF3Y3AxakUxR21uZVkxSW5VbnFBWEJjOTZsQUZqSFB0a0hSeW1HeWdsakZoMjFZblMzY0V0MFlEOUtzdFhVYm1kTGZGSk5ZUHM0VS80cVlueHRIUzR3ajJRWSsvSzVXbzN6Uzh3bEU4Ky93bXduT3lMdk5ISS96aXJxK0l6RitSK1A5RmtPSmFEZk9qVDhzTlFBeGhVbVZsS0R2SU5KMTMvRk13OERzci9NOFB2cFFQemRRNldvWkxyVDJyRE9UcFY3b3dtYUladEg2UGtJTXZZa3lXV1hObzFMc0hCaEh0dzVjaUthSXFZYXlKcUY3ZTdPRDB2N2pvaW52bTYvcHoxdVI0ZFNKcCtXeDZzZk5sNk1TcTk4VmlBek9oTFpNY2RBOWNldmlRTWNkMDdnT1IrSDVYVmZaZjZyYWU1dGRBaVUvVkN3MXYvWUs1amF4VHdpa2o2OTlZa1BzZXpSMVdtNUM1c3NmNmhXSktUTDBiWW1yM3BHZ1Z4SnBLd0IycUIrcTVxd2VaRVB5K2J5YW9JWkVKNDBocXdlYkZObkRMS3M5bzk1dkpwL3F0TU5aSFdiaHVhWTVjdEREd3ZZZjVVNVptY3UvaFdmS1AvQ3UxbkIrelRLRHhWVUNRWGZ5b3g0R0YvQmVvVDlaWXNncU5tVzBkQmtyUTUrVXYyTEozc09Pd1pmV0xuclB5Q0l0OUszOGE3V05QclRpcnFwbkRIeUYxWmE4RmRUN1lJc0FQU3U4YVl1VU1vOWszY05xWWRPRVh0djlHc1pacVhKZTBJK2Z3UmpjL1FVTVp0N3lhOW9DTzdFcmVMUjdDWEhRemdqOUlGWEFJZDNNeTJjL3pLUWdDUDhkSTZubnNGN3NNYkI3Z09BT295bDFVSUR6VGFXZHp2aHIxU2Nma09JZEpSQTRzdU9Vc1k5N1B4NW1sdEdxcEsrSEN2UDQwVjJPRGxMUWFrU240MFByZVVmaUFDa1loQUlXaXBqZGZxUGJpOFRUL0VxNEtkRUo5RkNKMnRxRTR5dENWMXFmZVdUVzZEbERFbUNaY1FtUVJiclBGUlVaYzRTakhKYmw5N3hKait0dUI1Y1FhbEdNTWpBT3BQeFozdjMyK1pCZEN5UVQxMXpYWDg1aTZYQk9kY1d6UDZoWWVRazhTQWI3U1dqUVFMbVVXeG9nQytHOFNNTHZKTjNJUWdlUFkxY2R5dG03Q1Rib05hWGxZL1N3NTRKeE1rTDZhVzZIQkduYTd3UGJyN2xRVEl3cmNURDg0NzdsR0Uya2l6Z2hEOVo3bVlySk1DdDFWckRXK3JKdDlvMEJkd3EwNTJ2L3BqT3J0b3NwR3poVGl4aTY0RFRqd0FRdjZjYnROKzF6NENDekVBSjdJdHlMVWRtL2pPbi9BaWVtTTVqRWdHRCtzbjF6M0JEUTZnbmxsSldNYVhnT3oxSmFNTHIwUHk4a0E3T0FNK3k4L3ZOdWRFcm1xcStCenNqalRRNzlud0VXSGVtQVZsSmx2c1p3a09IZnlWZExDbU1MUFN4elBXZWs3amNvWWVINnhvY2N5Wm9yNThTUjRZVlo0ZG45ZEdqeWw0VkhPT0xHcFhjRFRxbGlWcnptQWY4RWJnUThNL0tZem16MFFhOU1uWjJ1TWtoNU1JQksrNWFqMmlPd090TjZvc3FiUGlTVkxudkNONG9wUjRWR3VTTjRPMEFxY1J6RCtqaWVveGlyOHE4YXhTbUhOU1JDVjJnZEoxRzJRU2ZkWDJ6dE9uQ0p3L3BXZkFLWGVzN2JSVk5ZNmt0MnpmUzA0cjFXU2FDSkhvRjd3YThwODd0YnJySjdGdGx6dFVodGlWYUNCTlc2SDl3Y2hCNnE5M1dHZlpqdU1zRWhlV09MMHdUM1pEOXpmM1YrWGVyYmJOdCtLVHdqRU5MUW1sUVlWNnpiK2dBM3NtczdxWEtidS9IWjZwVW5ManNHNmkyQy9LQklQNWsxblpoWCs3cXlra2tPTkRSKzFXRFZmcW52OWZLNjFaaGYxRElnQ2ZON0o1S2JLUGJkLytVK3kyQkpHQWZIZEZ3NEg3aXA1eUJncDVsU0xTMWlQU1RFamdMMURTNEE2eHliMU9jYXhCRWxJOHJBb1NvVlNEWW04QTUzQWE0K1JZK1lIU1NaaEtLdFJNOCtXTVNYa2RyZHVFbjhGT0pZVFQ0bXFpYlJWdjZnVVhXV3VleXdQWXdzbnEweWJUY1lwbmdxaGJ1RDFuVWNzSEUxT2s2alEzeWswSHdjbmJNMVFwT0lIbkkxQkxKc2ZpdERkNEdIcDZJdTMwZW8rbVM0MGZQc0wvZHo1SnliZ1dRaFoyT2pzUUdJRklFSVNXcCtXZXBuVEl2clBqdzYxeDdHcVp0V3hvYWI2MUw5OHVxUGFUalBzTGxmSFNXaFBUQ2dkUnFWVE1va2MxYVJCdXkvYml6L3kyVFRXUWlwOUZMd1NxOVRYcXBseDhPbFBPRkU0aDJSbDNYSjdRRVY5Q2dSWDAwSjlzcXVVNUJqckRSckQvVzV1eFNpanFTQ0tlVzlzdmxjbnM1VEdJLzJJVWhXU21oWkxGN3M1TmpxWTJHYlYrYzltSFZ2UXAxWWl4dENCLzl1R0x2cThFYW5xbnJQTlo0SmVJSmNTZC94eVlBSDl5VTU3VTlZdFNOeUF2RnU1ejhZckZiZVdJVE1LSi9kK3M2UkxrTXRkR0I3MHF1R0t6TkpGKzlCOXZMcmRHMHE0NGNnYlBsdmhQWXZTVHlMMEl5a1IyUloySEpyVXlybldic1F2VDdHLzBmM0xCUzgzcyt0R3ZPM2VJQlNRQ3crMTQ2YnF3eE5PT21OejY5bzFQTk55bThzRDZWaHl2RlJNcjBHQXJWUDJZZEo1eDlyWnhPOURJcnR3SlJ6RmNraFgxY3RiUno1MEh2UllPdkppQXpoUHRFaGhlTlJXOUREakRPTUVuaWJtVENtVmwwVUo5UUFxendpUTM1eWVUTk9VenpJakNsZ1NKUDBaTDFwODBJVFVkSUdXVDI0WkVrc2JqR2hiL1BPT3J6a1QvTHp1cG4rSE5ydnFSZXFaUUt1V0I1eXMzcTVieGFSMDIxODlTeEMveEpkR3U3djl5OXdpdzV3T3ZJVHpEbE9NQ1hxOGk5N3A4SktEQjVCejFYTTFZU3U2WWlxcEtqRURMZndCSHZUM3o3NjYwanJDazV1dnlJNW5GV05McjA4ZDhSYzIxOWdXMDdsZ254VlFHSVhHTXFjZGdmMEM4cHRZTXcxMEVBblJ6ME9IVzh2Z1lveHBBVFd3L29CT085Nm5yYUpNS040R01adStiNlM5c2QvZ0d5S0Y0aUtRS0oweGxRdy9idDVId296dW45V0FXeHZUNU0xS01GMXViY1R2N1JvelZHMWhabFNtblAvVzluRDFNRlpwSi9xdDFrMlNLT1ZWRFVLbi9UeWhCaFBseFJERmVDYWhJSjRXaEUwYmFFMzJxN1dPZTZTYVpYU20rbXpZbzY0K3Y0WWtuU1MrMXN2aXhaUGVlRWxDODQ4bzZpOU5PYlNZVlpaZUxKTG1rRmNGWDdCTWJGSzMvSGhMb2FBY1Z0UzZwZ2xVVU5YMjRrSE9hcHg0RURFYjd6eXlJQjBQWUtjU3liWDY3VDBEdnc3VnJ2WlZNM0RtcnZhd3Z2OU1ROVJka2xGRytTR1dIRm45c0pjN1Rpb0UzZnVrVFVyaUtWM2RaSTljazRiNW5MU0VhY1ZSQ2dMeU9xdlRjckJDeHdBcjBISXJ5aVl1NTVjT2tZckI4LzJFSFpGRHRhQUxxYUloWkh0NXQvQVVpQnM5QkZld2hmc1lTU2lkUHJXbHZRbmdKSlVrVnNQNnJCcTFRM2ovU3ZjMjVmTTkxLzBFbzgrME42c2VlVTFjZmE2Qk0yWDJBWHdIQmtkS1paRFpSK1lDaElYZHJtKzdLazVLTGtUUGtTcjArOTZTZS92SmtHdVFTWjNlN01pZWFOYXdueGF0VGRlSXZhWHZkcy9GSzRsNWhuckZCdWVEYm53TVpCV2loY0tHdGcwQVlHSUx1czNrUU8xWDJoemxpSFl4ZUFlT1Uzc0FuUWdkeDYwVnZmL0I2ZnFLcW4rUEZqYXVPVnNXWGNyWFVaT1JYTjNFSVJLOEs4M1BEVC9IaHdnS0RESjRmYVYxSkorclhxTmZJQ2FvQW9FbHBqdzhHbFpHK2phS2xIb24vZHUrSmRhcC9pQmRhbisyZ3BwSFJDSE1qK1dhQ1p0dlYyQVVjZjZsUTVVVGNvQ1djb2lLN0VrT2ZHdHFOR1Y4emhlaGM1L3dEQitmZDgydWVZNHJjc01id2phWTR0YnhoaHlSRlFsd2VhU1BjNUZQam9kTzNTcUloa0w2OUw4RVBNWHMyS1ZocmRsRktFZlRSRlk0eHBJcS9PVURsYm9kZDUrT1VVcTRjbElkV21YYklHSktIN0RUdHF5T1JSRXByUStyWDVSZjU3WWFrcURobS9sdy9xZ0ZNaDk5dWMvNDFlMEpldklvalJBSy9uMUYwOHpCOTlkYjFjaXpYQU5tdnFseGxsV2xsMGFJTmFGN2VzVUlZVlZCQTJiSFo2MG14OEtCYTVrNERkNXpxRUdSaVNoN2VDZlRtQTYrNHArV1BtZlBOZWNZQnFSZHRabExDSEc5WVpEWjQ3dDhGUlJlOEQ5STM5S3hRVjlUMU5rZGtaeFhROWp1U0hiR25vdC9IVHpPcitzYkZVRFN5TjBmT1FDS2pBOTZUOThJUHVHdXNMRHZsM1V1TUhRK2tPdjh1YSsvKzBMYWJsbkRKcTF3SGpOa0ZnTUlSblJQUzJScU15TklRZ2NKTlk2S1lzS2dobkVTVjFMQzRSQkJNb2xBY1dYODU3QzMxb2FUUHhxczVDTkIrZktiK2NnTUJTRXNEYVJjUjFsRURDRVZ3RFBSUlJpeVhMcUN6MW1vT0VncjRhVzlhd2VCOU1mSW03dms3WTd3NjJSTkYzY1QxTDF2TEZKSFlnQmtKb092QzA3NGI0OGpncUJqMmtqVGd0bDN3c05LOGlpUXFzYUM2MUV0M2JwazRBOEozcFcxT054TTd0d0kydnFya1lQcTdXZ0M1RGU1d251aVVTTDkyT1ZkbTZ3R2RsVDRIMjdGZytISjZuK00yNkhuQlF4S2FOOXdFSG9yYmdZd0hxcUxzM3g2SjBRbEhGWk9CR1hyRE1kUHJURTlxdVA3ZzRhRHRvTmltWllUMkpQM2pyRzJXZHhRdWNGWThpckpkR3ZRRW95MjJKdmtqeGpLZkJYamRQOUFuZkkrNTNWb1ZKWjNZb1FEZ0pVQk15RjM1dHZqZW1qWkhIWEhkV3RSMWU1allHakZsNDQ2WDZVWC9JL2FidFRjNVp4emhSeXRlRzVkYkQ2dmcyc0FWeTZ1YkN0NWxKc2NNM0o3WnJsVUx4QkdnMG01NW16bFhHRE5iOStocWN4Mm1xb0FQRlpjK3Z5Z0dFeTI4UjRiYnJBTzFvNjNqTHVxMjJESjcxZ0RRbnV6TUNhQi9xbjhFZW1tUU55L2ZXTTRGdWpqMzI5S2FzQmozamFyY0gxeTJCaGFIeFg5L0RwcHZQKzVrRGJ4dmVCamV0WmZ1MmRVMW9DSnIwbGppVy9QUGNCbkR3YkdSZVFxUGRQTjE3TlJaRXVMd0ZwcFJkZWNhUkEvQ1VkRlRCVnV4M04vSERLRWdRaEozVUxnSUtQNHFkVjNLZVlsY0tJV0l0WXpYNExqYnBJcnQ2RWtFSjJVODl0K3lQa0c2eEdKT3BwWS8vRC9DRDNWTHVHT3RGdFZYZnVQeURjV2NtOFpmbDFkcmoydHh3TUdJelJPMjBWK05COVQ3dVN6WVRuWWFvSUhLV3MwY0dRckJaY2ZWWXBmWVVIQ1hJRm4rUXF4eWZnd24yRldxVWkxWm5JaDlNN1NkRE5pREl1bnFZcmEycE5LdGh2WjBBSUpJdFFzR2cyRmZRU1BnUTdtNU1mbmtyM0NTeEZOVHFQQzdnWlhTUEVjN0ZVLzhsdzh1UGNIRFRjSW05Zm9jeVpzMEFlak1LNnVWRm45ZUYwaXZNbS83NWNDbjdJQ0JnVE1ITC9oWFV2RTh6ejNXOGo0ektOdHJ1Ni9BaEFqbktxaDdWRjVZLzlrQUFRQWFBRUFBQVNNQVFBQVBBUVFqQWdBQUFBQUJFUUg0UUFBQ0FBa0NBUUVLQWdBREFCbFVhR2x6SUdseklHOW1JRVpwYm1kbGNpQW9OQ2s9PC9CREI-CiAgICA8L0JJUj4KICAgIDxCSVI-CiAgICAgICAgPFZlcnNpb24-CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvVmVyc2lvbj4KICAgICAgICA8Q0JFRkZWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L0NCRUZGVmVyc2lvbj4KICAgICAgICA8QklSSW5mbz4KICAgICAgICAgICAgPEludGVncml0eT5mYWxzZTwvSW50ZWdyaXR5PgogICAgICAgIDwvQklSSW5mbz4KICAgICAgICA8QkRCSW5mbz4KICAgICAgICAgICAgPEZvcm1hdD4KICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24-TW9zaXA8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgIDxUeXBlPjc8L1R5cGU-CiAgICAgICAgICAgIDwvRm9ybWF0PgogICAgICAgICAgICA8Q3JlYXRpb25EYXRlPjIwMjAtMDEtMDdUMDI6Mzg6NTIuNjcxWjwvQ3JlYXRpb25EYXRlPgogICAgICAgICAgICA8VHlwZT5GaW5nZXI8L1R5cGU-CiAgICAgICAgICAgIDxTdWJ0eXBlPlJpZ2h0IE1pZGRsZUZpbmdlcjwvU3VidHlwZT4KICAgICAgICAgICAgPExldmVsPlJhdzwvTGV2ZWw-CiAgICAgICAgICAgIDxQdXJwb3NlPkVucm9sbDwvUHVycG9zZT4KICAgICAgICAgICAgPFF1YWxpdHk-CiAgICAgICAgICAgICAgICA8QWxnb3JpdGhtPgogICAgICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24-SE1BQzwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPlNIQS0yNTY8L1R5cGU-CiAgICAgICAgICAgICAgICA8L0FsZ29yaXRobT4KICAgICAgICAgICAgICAgIDxTY29yZT43ODwvU2NvcmU-CiAgICAgICAgICAgIDwvUXVhbGl0eT4KICAgICAgICA8L0JEQkluZm8-CiAgICAgICAgPEJEQj5Sa2xTQURBeU1BQUFBUG5GQUFFQkFRQUErYlVINWd3Y0RDQXNBQ1FBQUFBQUFBRXdBRUFBRHdJQVFBSUFRQUlEQUFFQjlBSDBBZlFCOUFnRkhRRHVBV1VBQVBsRUFBQUFER3BRSUNBTkNvY0tBQUFBRkdaMGVYQnFjRElnQUFBQUFHcHdNaUFBQUFCSGFuQXlhQUFBQUJacGFHUnlBQUFCWlFBQUFPNEFBUWNIQUFBQUFBQVBZMjlzY2dFQUFBQUFBQkVBQUFBYWNtVnpJQUFBQUJKeVpYTmptY29BQVpuS0FBRUFBQUFBQUFCcWNESmovMC8vVVFBcEFBQUFBQUR1QUFBQlpRQUFBQUFBQUFBQUFBQUE3Z0FBQVdVQUFBQUFBQUFBQUFBQkJ3RUIvMlFBSXdBQlEzSmxZWFJ2Y2pvZ1NtRnpVR1Z5SUZabGNuTnBiMjRnTVM0NU1EQXVNZjlrQUJBQUFVVnVZMGxFT2tkU1FsUXdNZjlTQUF3QUFnQUpBQVVFQkFBQi8xd0FFMEJBU0VoUVNFaFFTRWhRU0VoUVNFaFEvNUFBQ2dBQUFBRDRUQUFCLzVQZkd4QUpWT2QzeHpjWWp1MXc2NVZGaEtwbnZQRGYwMVYxVmdOWitSUG1ZOEYzSS9wT3hrbjlLK0dyTXF6VWRCUGZKb0JvZ0lDQThZQkhIK1FEdzhHRWI3UmJQeXFBOGFCcnpZSlpSN01hS3lIZ3djNU1nUHdKZ0QyckgwaWU4c0lpVlFOSFZoMDFTdFI2MUUraFVpaysxUkVFM1lrRVdKRExUa1ZYbVA5MVNhT3lnWGFBdzFDT1FiQ0lvRm12bUs1VWFSWlJBRVcraUc5S2pBdytYMjN3N0U4ZVZJVXJPcHlRTVVEOFNxL1pKdVM5dU9VNGNhNnVNYXErbEZwcGFLNlFoa0cxT3c3emJFdWpBSEhrSXFZYTM4U0lrQlZzWThzYVZGMnhNb0Q5c0J2NTRFeDV1QzNUK3BQMUJ2eGt2d25mbVVDK1JqbG9SdDJ6Z1Znbmx1Sy9mUFdlZUI1S2JUV0JQQXdWQjNzTFMrRUZ3RlYxakU3UHNBSmUvYmwxTFBiSUhPc3hBSHgySnl2S2dsZGdJc3djczNUL1JqLzZpMkQreXBFMTJISWZyaTJ1Sk9DdVBLNlRVc1I4eHRLdllJUGh2RzFDQUxUYlFiQURYRTZQa1dnQVNMQklyNWVUYnI3TjFpK0VwV3ZPVklERm96elVpSC9zOENsL1BMaS95LzI5V2lxRitML2RyN1Fwb3pscDFMYW9oZmYvRGxIbi94ZmplamlwcnVqak1SeEtMdGlubjFESmtNam8vSDVXaFBqeDB2RXV0WXFBL0VXTkFMa1RuU2dCakxKdlMxQ2prYjZjb3B4blZ3RG0vVTVVQWVDN090WEdUSzhyZUhGemV1V2dSUFRjczFHQ2NiNExyS28wRllERmR5NG1qR1lWMldSVGQrS2tFRzhJdFBYNWlQM1RqZGdwaEcwRWdOUTJwcVFIV2lSVkRBVVhIVTFUclY5MXA1dUhXQjF2aW1DQzVhZUpiZ1BCWXYzY1VrMXdpV1NHL01DTHVieGFTTUpQbjN0YzNHWWpnNVNpdlB1RUtWdnNROVZMTVlOMUFTT09JTEFJMW10a25uYk5jaDBIYlBOSzI3UDd0OXJCdjF2MEdoc1EzYlB5ejN2N2VqMnplZWVvbytFOEc0TkFVM2Q2MEtlUGdmR3p3eVNsVXk0NjBMaWtjQzV6Y0NneG9JV0RBRWkrdlgzbTBCOHFscS9iamNUQ1RBZ2FveEhROEErcGlCZ0h4MzFwV2RGbnB5ZWFmOXBhTmtZV29ZcVRpMzV6Sko2Qno2c1J6d1RnWnlFOFVIcllYeXBRa201RWo5QTJmNG44cGZmSVRYem1NTGRjb2ViMFo3UzJ5NnRmNllsaTMxSnpnMFN4MWpSRkVSdkNJT0ZWTnROY21EaWFqTGczTG1TcndXOHJXMUxsOEp6WXkwbHlsSzg5a0swQWluVGtxaG5ud2Fyb0lyZzVpY2Z2VWQzQmFtZVJ6ZjRRWDhNaHM1bW56d2xnc0xlWVZjbjRUWTJDNzgyVHRpanZySXVoT1NXK1FlcXpkQUJTdjQwZGVXZ3FFQmVJTk0vaHJhZ2RXM1VteXc4dmNsVkZDOGlkWnZaSGM5VDluNFBLdDJOTURBamxFZldRS1pTbENZNWRTN242VkgxdExUc0hZRGFQUW5PUzVhclRJOUo1czk3WDdWaFhSeWZwY3hHOUc5ODZiTVdrcHdkVTdSN1N4YVI2YnJ0eHliMmdsSk1qNkNHeWo1S3R5dTRyVGdoQzB1UlRwQ0NreGY1RkZSNVdQa1VTbHB2aTVJZ0pKaUFrQllZYk1DZkJhWW51VENmM0k5SExZNUtVV1I4cTlHeTY4dTJVMzZVdW4zaUczNzRMU3ZvNlR6Q2UyMmp5aTV2Rm1HRVN2ajFsNDFhc3lra2NTaVNjcTdqZ1FMSjdlK0ZtekFoL05ENnpiSzdKd3UrSEVGZVE1aGxyUnBxUVEzLzhwN0Jhc2tFeG5Dc28reWI0SitwMnVmdVJVVlRjdE84cVhjc1o4ZUdFblZjVE11TmpCOHh3aFlGQ0h4aTlWcjdxL29vdndOdDRmVlZLYVk0VExkbUl2UXRHbXZqMlB4SXdRc2c3bElvdlMzRnpqMVl4bERQNmhOcXBBSUE3b3VmME1kc0ppR2l3UzJ3Qk9xRTAxT2VDS3lGSHVpS1gva3l2RFlsNVVjQXM0N2xsT0ZHRXBZNm9iWlN2QVQ5WnNTRCtRS20zekEwUVhqdUU0S3liWVhUVmZYQUVRdEF2Uk1pQ2dJRStZaWtFVEh1U2NDZUYrREpQeTdZQW9od2JIcDc1eEFBU3lkVTE5YmtqbW56bG9DTGgxZzI1Rk9lTSt2VW5Jb3ZyNWwwS1Y1UDdRQ3M1cGJ6ZmFBek9TaXlFRUEvNTVMRFY3VHpBMmRLOE5EVXFQd1BGSVBxTVNTblAvdUJRY04zRTF4K3JqemtyaTNxVTIxYThhQ0o3SWdCaFpaZkFWaEZhdDBoMWZ5cVZHbE9lMGhpUlYrakRPLzlnWnZqVmxzUWUvejZuT3RDYVpVMXZ0OFdpWWtoMDNLYjZ5cVdwemhvOStMb2E3NXJTY3JuN0Q2SDNnR2hBbGhxb2xDWkRpSThjVFl4ajB3MTlUVWd5ekJWeEJQS25VcFQyQ2daU3Yxc1RDZlRvNHpNYmp2MVFzeC9nRUJuTUE1ajVDWDFiRktPcWtJODJZSjIvelF4cEVSL1NaRVN5V3pJUHhOYlo2VnhDSmN3UjBMV29WbVEzWmhQcmNHMUY2bkM1MEV1WVVaeHVZWHQvbEdzOW1tbkxSU2EyWVhXaXJNeGVUV3JsTDhUTVJiNUJlME13azNZVGd0SE5rN3FBSGo5aHFQdkNJMHRtYXlsQndlYThtWGo1bE5vd3VMMXdBVkQvQVlhblVhN0k4cHFPTWNBdFJjaUpPMGxlczcrRER2Y0RNMDFZdGxkU2VOdnVaM1lYbnZlOExObWdlR2J1WUhIQWlWTlBEZFVwY3JVTWp2YXhYWU1BR2d4TkV5bjFidkVqMTFld0U2WnYxQSttblZsR1hBclh3Rk4rTndpT0ZJdERvYm5tTVYvZGNxUzJCTlBYMmUrYW9OalFLeisyR1ZXOEorNGtqRGZob2RFTEMwNHdGelVGbWY4MXlybnZ4bE53cEVuVlllZ2ZMcjBZVHkyb2RkRGJnQ2dsVnRBZmg1S1BnRy9PVmRQNmVVT1FpMVA5c1VOSzllK1MvZ3FUSnRBOUZVbFEwb0hGTXdPWW84dW5YcWlqRDRvTXR4TlBqNmRBVzdVZkI4Wk93d2wwNEhXbEl5c0lWUmlQYk1iTWh4Y3dNUiswbGNzcWwvanR3eUF2NkVjWUpGU2pXZHIvY2JqaktFNTdXbldQSi9yV2V5emFtWnhIeGpsSFgxTHQxSFNnOWQzTEhWbWpMWnlRVFBWNnNHZzF2blJSeHc4ejMwdzJEOFFpOVJodndhUTY2d0E3ekNlZ1RnYmJzeTVqYWhmWDI2LzJaZTF1Qm53L3FLUFFaZm9qV0hYN3RtWnU3Nm1TMU93VUl5dms0QmJzOTVtR25qdFNUZVlMUkU1d3pkODQwRkRzUExNR0o2all2ZTcydEROUmQzU2JBb3U2akI5ZEwzVDhXdEkzTHdhUXdSVUppS01scm81eldsSWJ4RjRFVCtZM3BnUlJ0VHN6YUtmZUxpeUtOOW5USWNLSXk0cmFNVXhRNnNGZFNjRk9LenlweW1FdEI4TDNQRFpsMzgvQzdUM2F4a3JZVzBxKzdTVkVZenlIMFFDdHNCNHN6aFowbm9DeFlNdG9QdFhXc2ZZeWliRWV4TkgvTkNWb0RYSkU0YllmVkdDK3VMbVRwQnhCejZYaE8rU284djlaeS9VRTFnN3Q4cmJjL3pROFY1WlIyR3dKRUlHMFQxMXlFUlRkZVFEWnJnWkxkeUdHaW0vS2RYQ3ppdlAxZDZkQU5Mcnh3eGd4TW5SSmkxSWIxQlhmWFA5Mk1ud3paVmVPakF3Qk4zQytQQytrR0hkeDRqQlhxcVg3bkRnNTd3b3p2K1hBSEJkbk4vbks5alBNTlVMbGJlNk1vMy9Ra3hZdWVKV0J4akRPV0NLOXI1bk40alBMK1JRdStyM3lKcENSTUY4RVlqQW5NUmxIU3ZQR3kwSGFtNm5DRXMvZHVteUErb3ZzT0tBTkp6eGcySEVoenU2VEQxY2N3cVk5MFdhbmp5V2hQSmtTRGtRRkFqeFh2Qm14YVJrYWFqOUtLZDRXcGNTU3YrT3M4RTE0Vko3UmlvM3NnZGxjOVh1TFoxckd6Sk53UGFTRFFsZSt1K0pZUFc5eG5Pb2Q3RzlzSkFZY3l5dHc0dVJDNFVLVWo0TkN2dDJpek5HS0VqVXp6Q3NoSURxTjN6WVlaZXJNd3ZiNjBGNWFKQ1dsMVdCQ2QrUVovekFTdE80SFRqNlRkRWJyY0dhMmFrMzhIQ0d3OHNLbTJvZjZXM1d1ZCtXOWI2VThHTUlReitZT3Y1YUZZdEZQbU9MU2VvMk1HcHZZaU1pUjBsZS92dE5rdmlxLzZZNERFWHF4MDNnM0RpbWlrSU83NnJBd0VYWENGeTJ2RUJaTVE3Z0x6cGdUSmxvMy9JUkcrQlZScHhXRWhvSXJ6cTl0V2JtOUNNZVpaQkc3VjIvVXd6TzRCNXNFakxHaC9Rd3Y2R0kvV09vQS9QblBiWFhwRXZlakROYkx3UnVtdUJ5aGZ6WU1JQ0RISHdVN0EzejFSQW5FT0trTjBvcFFTa3FZVGVGOTFtMXpWWEdFTC8zYmdhU2I2QWp1L3ZpekhwV3c1QytUTWdNQzBXaERqREV1ZkY5RVVnYVNMd3VpdW9kYVlEZHdGMWNMNVNFSTh3WVBQNXJxMHR3NDN0bmtkelNwTnlCNWJIWElPODNIc2prYXp4UDc5NWpqbHU0MjF4TkpJNUlXUTJIcnBhN09URXlheDdqcDNySVRoRHQ2YTRBNCtiTWp2NXFGeGZRSFJRYzF6NzM5WjdyblRnT2tSVVlJQ3JYdlNtWG8rQmsyQU54UnUvVENOaVU0dzBrQm9qSS9MYTQ1SnRwQzBxcTBoc3JpRmkvNmtUZ2ZBVVFlK05pbXlPeW1PWWIwTnhxdzhYQ3J3aTU2dG52OFZBSDVxUEw1RlRSVlB6eldnWk9hYUdmNDhJT0kxR0R5OGJ6dUFnazBNaGhyL0hSTW9HemNzZ3czU2dsNUpuYzBLV2V2NDBFWUF2a2g4RHlRb3hlZ3EvUFVYdktMZVlmN0dPN2FUMStRRGVtREQ1ZSsybFMzdVVwT0kwTisyaXVjaHlIdFRUL2NBWEcxRWlxQkRwc2lpb1RmQThkRkpHK2xkRitFUUkwQnVXMVB5Um42STlBUHhsRU4wcmFTdWRxaUQzWXphakNLOEp2UGNpTkFyQmt2VVFWS0wvbTRRbXpzeGlza0R6bjZxT1NrTjg1NjB6UFh4OFh5NzNHMS90WFplRjIyamhrTm00U0ZQT0QxU3p0ZFFBelVqK3Q3Wlo2cFMvRUtJNURUSm95UFN5KzdQdHNwWnNxZFRmb0d4eGFucXNRY3JkYnlnSE1OcCtpenV5Tlc3L2ptMUdVOHZ1VVNxcWlxVVhOazJyQ1IzaFArRmw5UGw5a2RNV2pEZ2pvK3VUYnFEbCtiS2NYdVh2OHZ6MkdnUFhRVFZiVUFnNDlka2FqQ3YzUVJ2d3EyNW9zZ04rby9ETUN5M0R5dnYxVEo2c0FheGVrTGVhd1RPMk52SnFmMFBpNHg1dFlMZWtRck92eTVYTy9tcUVyQWIzVmtlMlVkRUtJZENpMjdZRXVITHcyMjlUR3VaRmdQWVQvTkxMR2ZVUmJZeG43TWVRVXQ1eFplVjBYOUtIVm8zaFB2dHBOeEorelZWUU5FdG5EREVGNk0rUUtGTElHS1dMUFJHZmh6ZEFhTlduQ0JIcmtqTlV6djlETzJwUUhXdFRoTERmWVIwU0Nid2l2STZUUHRlOGdUWFlseUxWL25CcG5wWi8yZHhiem80VFVqNUZtZngrQUtmRnJjZDMvNUVxYjJudmlwVHdlVW1EVFBTYjZwQ0VvZHNHaVE3cW1mQStDOFJjNEpGT09veUNISXJycEE4QXpDWFFMSGJ1Qm9wdTNud1dUTFJhRGwzREdoNG50ZHJTcmtpMnRWZEtlNmR3UkQwN2RWUUkxdnNEZytXQWdXY2RQQVg0bFllNXA3L21wRjlzaldnc0VQLzBHeE1rYzc0SVpOcXV3ci9tUmV3dllQWVE0K3NOVXVxRGxORmU2T2paM3BGQ2RNdFRSamdmcE8wMExnVm5RWHI4SWZFbHQzL0dXdVRwMW8wMVVxMjQ2Zi9pQ01ienZmL3ZRdktSNEZKQWg2VVJpbngxMDJoeEhDYndtRVN4WkVhcWkySDJPZWJwdlI3WWxrSlRvbkJSZC9lOFFTNk9ORldiUnZTa080TlF1OGI0VEE0NzVwZmJHQlg1dHArOEptb2FJRnFHTUExdjFra1JzK042bzUweGxiUFhoRldPOEdGSUE5bStTazdWeVBJOThqODBOZ0xJenhQNEY1bVlOMHdlUHRJY3VzeTk5SmNMZzVCbkFNY2RaN05VaS9jYTRqbUdMM2JXb1YvcGIrcmJhRVlRa24zeE1Yb2JZTnB4ak9oc25GS3VSbng5cnJuczEwNTh0cVZhQWZkOEdZSVFNdXpLdzdhSnpld3crOVJxNGEwUzlhUE9hZWtYbzRzR2s4cU5qWWswSTI0T0xQdmRoazRqWTQ3SDRJZUl6WEFFSnlxWWRsZkY3SmxibnlxUVVlUSsvWWdUSEpMemlrc2dNV1ZjL0FPQWtTMHFiNlRlR2pSTVhZUGxMUGFHQ01NNldJeU12UEt5cXRKMFNTWXdtOHQ1RkZDUzNmZXNROFhKSmtIWkZkZkVIM1plTXdMQUdDWjNZVDBzWHRhbjFtSGtZWDBHN1gwdFlJVzdYdzQzcm0vay9uWDlBZThFelNlcHVaQlJzYm44VG1rVUNiZ28xWHNjYjJsRXgvaDVDamVrSTRXOG8xbExaNysyMmFsQm1WOCtHcjNVditramVkUWNWMG5KU1duNmNkS2pqRys0YnhjcGtGR0NzRzR1dE5FQ0hwWnVjMVhNWE02Q2JnN1pDN2RVLzFPU2UyelNRUWdTNTVQVzFqMnRUR3hLTXNZZGpHbENpSU1GNndleWszZ055cG5ZUUlQWTZ4V3IyRXVNRlcvcGhzajA0ak9VRElReEc1OWkvMHBVVTVyUk9JekxWNzFDeEh0V2RENnRvNldxVFUzMERKZzNtNTNscWZlS3BOaEdTRVNOb29SSTQ1UlkvRDdvbmM1VEFOR2hNeVRoZElRenVLeDQyMUUyeXhnWGlRU05LQjRsSXFHVlMyL2FPMDNjZ2NsOWEzSUJhT3dNazYxYzdIcStnMXRFWUI5Q3ErK1ZmTlJvOXplVm5FZjVPdnpjbGJPeVlDM1drbXRHS0o5UDVtVldzb3dWVTZ1SE9hSWl4Y1dtQkFnMU5GQms3U09KaUsxdENFK0JZMmlhV1AyOEJzWXhZSWpxc1hyR0hFdzRwV2J1YzFSQ2lHcnJzM3BySTBqOWhGeUxna0t6SWpHT0dlc1o5dCtpQzVQaGFORDlmdFAwY1ViM1BQT3ZXWkpZTTRXRlAvYko4OVFhajdWU1NKdFg3UEkwby9heklBTS9CQWNVdzlFYnNkcVFkUDRqSFBUY2FrVEF5WTEzazRKTlloVURFc3dhdVdwcm5LYlIwUjErVEpidXA4d2VyWG10M21nSHFpcFU5SjZubVg1bEVuRjlwSFJQTWd5RmcyaWU2TVpWK09uQ0FJVHRVRE54cXJoc0dtSEdRTlF6OE1JSUlYeGFXNWVjYVBkTGlFVWZVbktKUzdzZjlRR291Z1dTcS8wd2F0RXdkN28vai9PU1Q0U29aUWV3ZFlFc3IzcWZLVGxVOTdTSzNDcmIxN21zYVdRc2p3Ynd0a2lHWjVLSkp0Rk8rbmxoVS9jMUtSZ0VOUFgxZnR5M1VtNkZidnhBWXlsc2JUdXJ3eVRHb2I1a0p2NWw2OEx0blhIUmNtRTVJZGhkZThCYmxZMDB0R2Z2QmU2RmJNaWtuZzltS01lRjl6N2d6T1hkSzVMTmNiTkEvOXNrNXl3SzZIbW04MTRwbU5qTzlWbVBocmU1VDJiTFR5ZWZFYmRQNVhUbXBNek5MSk4yMXNvdmtaR3AydUVFNUpyTjJDVWNGWDE5eHdXaldic3oxWWdZRXdCK2tOYk0vdTlzNWcyNjQyMzFKeDhaQms2b0cwSmpzQVIrVVVnMC9kNzZJeU1kTkxxb0FIeXFwWklwMS9TRXdPelQ3Rko4ODdPMU9qNDFRcE0zVDZJTURad2NteE4rRk5JN0tqYXloaHJNL1NFaGFycm0wcllobFNrQWpnZk9sNU9kei9ab3ZXN0FyNitTdlE2bVV0T2pMWlo0S2d6eWRYZnFLRVZmTktjeEJGQm9uMEF5bTZGZ1hVeHE5VEhqSE1lTDVvU1VuOEpWMXNCSTVraEZQZE1YeU55cmpMZzNQM2N6TFBCWDhzcU1hb044akErOTlDTlI5amFRVkFXOXE2L2JlYmxtd1VrOTJjTy91UmhvZXliRmd5TmM5Y0dlenFBc2l6VHNJYWRWWnZ0cU03azBVNStLdkt0L1lpOWFwcFhhSnlTb3R4THI3WXBLOUVBcnU4YWl0U2NCZlVUbXU0WStlak9IemZTWHBvd1diTGdVbHdzNktuemV1NEpHVTd6TEQwaEtpQld2emNBTGVycmhKS2ZPOEF3bDN4UkhpK1BsMXgrU1FLakJrTzBqRnpSY20wd0lrRWpGQWlsOGs2WmlQNWp2NkoyMzJTYzgvdXVjUVVhN0tKUjVQZ1Rwa3cvVW16NW5oSDVxYjZ0dVFaaklKS0pGRVRHcm8vZnRyRVNYWnRkMmdWZDdZN09HeVNDS211WVRzMG5IamxaSy9qUTJxVjZmcHV3Yk5rRTZPRWx0ZFRmNUxOV0tqT2crUDRPSGVpZjFIaGM3TDF6MUczSjN4TmRDZkQwY1Z2VGdZVjd4cFU1MnRpYjJOQitxUnVDU0Jyc085M01HNDdTKy9EWDRDQWdJRG5uc29BNVdKOE1zNGpZMlByVlRYQzQzR2luUStNbzZWSElxdTFmSlR6d0x1SEk2YkNNQ1ZVM2N3ZlJXK1FPa3F6U2VPTlZScFpCdEMveCtkeHpiZnQ2SEdubFA0eVdGS2l3dHNWN3EyeVBFRkY3MHU4WERXdU41bVAreWt5VkhkZk9FTzE1TGdPVS9Kd0hpOStpNnBjSVFrK1ltU2xIdFVvc0JHeTRkdGE4T1JaK1hUUTRYYzhyd1luZnBRaVhFczB1eG1jQ0VzZ0p2T3pnOXBZaU1XL2U1SW9sV3F2MzluTW5Fd09lUDFJUEtjRldEb1FiaXE2MUdLMDViRnN4VjRyQy8yNEcwZ0RlTnd4eXRDQ2dwbTFnSkhseXpLK3hmb0sweEQwQnhuZFRoSm51NHV2TkkzV2I3b3ZPam52UmdCTzNNZ203NHU3ZzlaOHJFWEJJSFJHSWxjU0lhWG1pRTUzY2g3cHBwUEZtTEJSNklDOHA1S2UvMGVGdUozNStGM1pYM29FMmRwWVhFNVU0U0JsenMrWElneGY3c0Y0UG9NTW1JT0cwZjVCcktMRjB2bEU0aEt2MDZUQnZpSTBoaEkxakxDNnV2TmZSNkdxcUZvZFJXcDdrQWtHd05lMUQvWUNNT01Vb1lkYXE4ZzA2U0dObEF1YUloT3RHNFR0bzNOZHExOGh0b3BYS0orSy9jNGN5MlR5WFcyZlBIK2huOE9rTis2OGI1MzlwL2diZk9CWkJYNkRFTWRtZDJ5WFBhQy9qWGZ3ZWdUbSt1N3ljaUVudVhoeWVjQTlNbTZMMWptYnFsSTZpem9QNEltKzN6S09CSTJlZGUyUWE4alBaL25Ic1ZSNFU5V2xwT3pWRUN3TzRkcncyZjJQekZVZkFDcjB3OEVsY1U2ME8vS2dTQk5yRmhxamFVVGtWREtrVXFOV3FPTUkyQTJWNC9MdU9waTZGdGVGL3hWNS9BUm02VDkxZEZGbTFYaFVpeWVNaG9WV01yRHhUbHdGZ1FJU3FWMXcwTzRTaUhyem11TVAxdWVTT0VZVTRuSk04MGdPZVd1QlV2VmFFRnF3MmViclpHNXhYM1pmTW5JN01KcENJSmtzZTJZOEJtTHlYbHE4bzRiSU9BNTd1MWUrV21nRzNHWURVTzFwTCtPcXBIekdIc2NESlVseUNyVG9XYlpJV3ZiTnpDbnRTcVRTLzJlMEFUd2sxZGFCN01DVGRGM2RYa21mZ3cwREhsT1VhN2ZvZ2FsZ29KVCtJb1B1VnFkaHpqUWdEY0cra3ladjQrQVA4SkkzQjRQbC9YazdzNmhZdlZBM2NBU2d5L0huejA1UndUWUgzaEk3MThSeUg1VFZuYnZlZ1VSa1hVcEZ6bDU4MFBtR0pyUWhoRnJudkNFRTYvVlZobTNvMFc5UkJvNHRUL2g1eVZaRUZ5NWtqS0U4V1RQbnhubW1wVmRjcDg3VEEzMktuY1pVVlA5WUl1WTBoVkdtdmJpRzg5cGp0R3NKQXdpNVgvWnpyekNpQ3NVbXRXeFdUSWVIbDFidVUyMUp4MDcyQ2dZeG91YVRrNkpHRDV2Q01obEhldDJtdEUyODFBYk1IWXFxM2UyRkpZVWdsVVl0TDFwb1R1VTJDaVhreHhSM0t6TkVyY3RVaG56MEtrSEhETlU0dEpZM1RrQ0Nud2xqZEhsVVlpSnVJeTB1ZExsQ3VVS2ZKZXo0aCtqbVpCNnJ0Ty9qbjh5a2JyazJ5eDQ3Zll5ZzFNdTh4UXBtd0t1ck4zUFh3LzJ3ajZJU2lZWVlqRTFHVm0xSysxbWREejFsMm5GZWxwSW1mTG5NRnVjRjJmVFZMRmNUSUFxemFsOU5yVFFoc3REd0x2OXhXQVJNQ0JCcllodDBNMmdQNyt3NVNuVVN1RXFXamxIaklnSzl2OVk1NXcycWoxVW9uNVk4OTh6ZDZXNS9MQ1Jrc0xUMWVOdTBGRmF0bTFxTWl6bDRZaVlxMFQwSWpXcC9LOHFIZUR2dVM2OXFWUXhHUUx6WW94aW85WXl2MW9RdlcxTTZoYUN1bVkxU2htdjk4bERzeU5VMGVJTHhKb2Rwd0o4K1QxSWplQ0pUVlJic0hybFpUcTFlb0VzWTd4S0Q0NTRTcXVRc3hsbTROYndqZHltcGgzMy9PS2ZvL0xmcFVJa0ZCSTg1QzN6bDREcVNoTkxucm45YmJyaHh3Y2xnRjZTQmpTZG1vZTc0eFp2VnpleXI1WHRjdDBlZXh6akJVM0l6Q0dJUkFocnBYV3JyTTQvTHZseTJkbGkyY1ZWdXFpNnFMRk1WUjAwSTNIcjVJOS9mdTNnYXZvVUd5cjRYK0dIMEg1cXdSUUhxT1VEaXk1VnBuWDlxcDk2MnlsaTVLL2lSbEtINVFBVnk1UUVCd2hUdHhva1BiQWZoZXZtb3VQNThNbDhhdk5CSGhwTG1xY2czV2pKV3RxN0tEbHYydUVOc0pSRlljZnhIY3lBM2dyRlAwbVNyMitWVGVrV0VwblBPMTg4b1cvdTR5YzV4WHJOUk5RYnI5b1FxNTJTV2Q3bWRNaE1aM29uMTNzRXFWaW01U3FweitvNWdGcmUzN2YxazlYMTZhZjJMZnZySVRmZnN6ZjMrb21ESWtldlpQd0c5c2VFbUtYZnhGRXE5RkFSU2k0MjZLYmVzb3c5a0MxTDhUWTdSNWJNNFRUWFYrZHhIWEtXVlgzNGNBV2twQmlmVU96akFScmtEbmlVOGpXQ2VKd2VxV2VleC9mSU1ua2pORjNmSTBqTUc2b0JsdGcrK3dJbmNHWUhJalk2cS9HdWJqZzZEWjRCb2lYck1Bald4N0VsYm82bW0xSnVvL1BxMmRHSjRSUFhoUXRIdUFHdDY0c3lkeURkQ3c4bVNBS0Zpb3Vmdk8zZHF0ekUwWWJFRGtKK1VPRjYxZEttaFphZmgwbXhSekdWdnJsU2RuUnBMb1Y1TTluUVBKekg0djZqZ1RMcnJqaGJSVUpMZTBzQlgrb2FwY1RlYXl1ZVA0YnZHZTNTZHdvY3dTREExSWp2cEl5bUdaa2Urb3NMdmhqLy9JZjlKS2ZxSmxJRXNJRnE4MmlmRjE3ZjR4bk5MNjlKanpxcU4yaFZYeXlxVFRCeG95a2R5eGdmSDJsbkU2RXd6bkJiVHNZcWw2dmJrSEJuN0tCWU9IWWdzZVBydkozZHovMWVKd2JweVJ3bEdZcS84RFJKdEYvcTBlOHdCcVJOVkxvRzVWSi9ZMXE5bjB0anRwU053N0hqZkp3OCtNakdxd3N4OXlidlY3b1FRV0NZNk45Q0RpMjVNOHZENUZucjJpUjZGNTNMMi8wTVc5WWtZOUIxbENxaU1Dd2diSW8xZTZRVW5UZXlpRjlFTG1JZWRCUDdoK28xRFRxNjVNYXJqQVBkeTJKYnBKNjNTc2ozT3gzcjYvVmVBMk1nNnBmRDdXcG1VUzQzenl0YXc5cEJ1Z3dTZ3hyK203QXVkVElwZ2N1d2FLUFZKN1NEMFlpbHBpK0NZS0oxdVBKemZNN1ZRcXFYbmpKU2VNTmRQVVB6NWdCcC9pT0M0Kzl6WklaNmhMZUNWN1ZGS0Fjc0hrWk82NFh4Tm5LOFRPVTFJZStYRGtNK3JtVHNRcE9wYWMzY0ljL3pYSWYyRjRsQkZaTlB4dWUwMnQrSDMyZGIrVXkxblFJb00yU2E1TU1hM3pXdGNqZmRVakZHR3BoQ2U4ekxTS2RlU1l5Z1RUMkxrdmsxRHE0Y3FLeFFZekpIOUtVbUJJSzduaDY4YXJrZWVoYzBRRytZUlF1REo5UGQ2eWl5NDVpRTQyaFZvdjE2eU5rWThzUmQ0MHgxU1RvblhFV0MrRk9oR1NqVTlGRVNablRLeVdmU3doNEpTb3VodWVPMEV2enBRZFdFZGRTOUcwVFlyb09rUzMzTG53NHl3UG40Z200Y0RSTnJ3UmU0RWJRYTFwNUo3MFJNSnljWEY0V2Fwb0NCa3hESVdQcXJCbU9zRHZyUFN0QVdSREw4RjhuSXNUWjlPbUhwSmdPd1ZHTzRPclgyQ3Nla292dEpUSjN6RjlXSlV4dkVLZVlRQmhqZVdwdllrY3AxVUJVNVBEWTRrN3prYUdDT3VlT3VibDhucm03VGRkejF4ckZqRno5MmVqb0VDSStZMkpXSWxrdkNrVUROQ1BPVUJQODdWNCtrbzdIWi9ZTnFZZ1NoNWYwUEpkZEk4eGJrMDliSFFJbU5uR0oyZDJGSWQ1bTdaeno3dXJYSFpWbHdMSWMveFF2bHhQOFIzRDNWZnk1RGdUZXFSYXFrcnBvUlU0dkdldFNPWlhhaXl1N2RmYjMyVWJrcGJHVHRoMFA0S3ZXeVc2Znp2OG5ocEZUQ2NNaktlbUxrUmllMGxqNDMzYmxmbDhOK0RxY2lBNEVIT25hTS90Y0RQNEVSVlZ1WWhjOHlMQmV2cDdCR0tuU01pV0xZc0RacU8rUEMzT1ZFNndnSjFXWDBudW1OOERXOWwvQ3lPSEdhL3F0UlFVNTJYdW9ucWVlL1RSM2hkdXczSUNMVmRQdEtRNmlZV0dhUVNwSHY3N2podFNMa25QaGFxU2F0ank2MkJtUDhTclpQY2wxaVh5dmNONUtFd1pid1g4clhZeGtJY0ZlSDVVK0JHaVRzR3g1OWhOY0R0a3JaREg0eEo4Qk5RR210MXZZR05rbmY3ZU5MS0xWWXBlaWExMSszUXpQVzJxSjZOQ3Y0d1FCdEExWFdQa1RwQVVWbjhoK3dwUExlcnh2OWVmN08rNFBveW9JRk9BN1RCUkNRTzViYU9TdXN2eTlOaVlVOVA1ajhLZzNWLytnUlpzT2pxMVRzbUYwdUxNSjhKai9EdUFiN2tBVmxZeUZXTit1cjVicE5RVG5ZV1dLL1dpMWNSdFRDU0ZRNm9vOElDYnFDYmZhSDZVTkU3WlFYYzFrUUJTVTRycmNUTHRFc0NIcUZRT0NEME5LbC9GdXE4OXF0SDBWMTJvM2ZJT0RYUWppR2Vrck9VdXpkVURra0ZVRkwxUCszeVc1N0tzQ2FMaVFQQW5JdnVENi9CVm40elVyRFdSSDJJbEM3YXdSUlJBQ2M1Y21rL3lienRkZm84aWVpTXdYWUhHZC9ZSlpBZEJ4dWlJNnhlTWxjTzhhYWJEb2FwWFFIc3Rsc3VlY1FyV1o3c3IvT2JRMEJ3OG5keTlya0d1VlIxWXlxR1J0MGk0Q2RZZ2xMdzNwalhEWDZLUXpKUCtwcUJwemhNK09MdTBaOEMvR0xpQzZkSWJ1MDZnQlhIcFlueFVZbnFMd2liR25rVkJ1L2puVWFNckNtd0c1RmlDM2t0UHJOTXRSOVZmWXpkV01IYktoMDhQUjRYYUhCRG9Qd0N0eUsxQ1cxQkR3YVZjTlpYTmo5Y0VhTGhXbVZ6WVFmZ245TVNSWGRNVHY1YUErcEQwUGF4cGkzQkZuKzAwQUpOZ2hKYXI5QUJwd3J1MC9HeG9JWjRMVW1oWWJzZUNWOUdwL1FIKzV5c25NTHNFeEFWYjM4aUF0T2NjcU5td09yOTFCblFET3NJdFZqSmhyYkZLSjcrRm56Q2h1NGlKOEtNeks0TlliRGJMaVBpMG8rc2dpdzlMNzNYM0RCSVN3MGNqaXRuRWNCdDlEdjZZcFVmNkRvQThtangxU05MTDN6d2pBbitJTVhQWFFqRTkrcVFLNkpyUEJpTk1qNnZXYUdjakNGRzJMV09XdFFrZDR2dkhoNUhpZVVqVGtxZ2FlS1J5eDhURzNtd3pSMnN2ZytMK0pVaUFXRVJyTWFlOGJ3dmtkYzd3RFdBS3VZNFBRRkNaVmhSOTNGOUtjQzc2RkVZaWZyN1F6YW4rMk0vT1Q1dEVpLzFPZE82cUxKVGhMNmh2YWt0eGNJTk16OTYwdFdjZGdxNGZRK3hmQmdxOHJDRjFBY0ZZSDZCbFowWjlpK0J0K3ROQktFWWhnb1ZQV1ZuajFLaWJCZHdmZkkydjBuRGRmaFg3dW45SXFyUG5ueDE0MzZneWQ3UHE2QU5VWHoxL0NybFdrNmdOeHB4ckZZMzJPT25VSk5UMDJOSWRFVmpHbmNtbFlvYzE2bE9oczZKdkVvT3RlQVNYaVNmQkgvUWxMZExITUF4eWdNcHp6SndPKzkvS1hHSXp3TGdGSThTdlhBZXF5Rk5kZ2VxWmhnZmFiL3cxbDVwRERMY1E5dkFlUEZOeG9YRDNNU2ZWUy9IWURQa2JFV1VNTmsxTjZWOXVnc3kya3MwNjRxcS8zaFAxSzVnYkZyR25rM25RT3R4Qnc3MWtsTWhJcmNXdXdHbWwyVElUdWJpNDBFVERWNDBiRDZsVWpYTjJLU0k3Y2ZNS0hNWEtYWUtWT2dJZU1SYVRHTHg5RHM4cXQ0dVhucVNwYy9RS204cUY1VjF1TDFNNFBBWjZvVW42TVdKTUpZUEhPaUdieWtJbnptY2dLUkUrSWp0OWJ3cHpmQnh6MkdGVzF6RW4zM3NFT3BQV1RCNHdadm9kT0pwYStmekxoR01aYUZJNTNZR2hweGpTajZIMDZ2cExCbHU3U2ErSVp5U2NuYU1RWHF4bENrdUxYODdIbldnd3RkTDF4R3d3RG9BRE9NRUFPZU5oc0VlTzFFaCttcUVMVVNDbUdMWkFOUjJwNCswdTM4bUszaTNwTmVLVzhlMUdqbUhDMmpOODU1cElXQ2FIcGo0N1JBWjV0SUgzZ3NrUTJ2VmlCeTdYampMRmRKU1N1VEFmVG51aXJ2RnJrNWpWVXA5RUl4RjZrNXo0TWdwWEZYY0NxY0Rubm9IdHpnckRBS0pTeGoyMVppSFVxRHBWTmV5eFAwNFUwRUV5VFV1Ym5IR3hGejVsUndCL0JzeVpDMTN0eSs4MW9HYlBtNlc4c0RUVG91azBUUG9yTWVqYTZDaUVLNUlCaDllUEpvbzVLY2tua2p3ZUI1dStOa3pja1A2cHczWXI4eC9xc0QzQTNicXYxa05qSkdGeVJOL0JwWmNtK0VOclZyZEIrb21hYjdKZndmOXpBUFhWRTZ0UnIrSUhrcmRCUXVienlab3dzVTR3ZGFlTnpDb05BYzBvQ092bEdUOEN3UzNoaU9rNkJNekVMVUk0bFNIanE5VEhQSDB6WERHdmdJdGlrdXo5WHQyR3FxVWtoelNRQ1JOaitGREllbVlOYnZDcklJSW5KYWVoQktSWXcrdFQ4WiswejhJNjhCNHdXMnNvb0VSVTNYWlVndFJBa0pUS2tHb2NKUytuOENYVFVFNng4WFdmVGZLS1R1NEFwTHRtM2N6cDNZdlVZRGc4VjAxWHhiUTRxNzZudFRiR2VoSEIzcnZEdzYxcXVzVVV2T1dIbmZ3Wkl3aUtaQkpxb05jdXdSY29LTG5rTmxGcXhCYkJtdGZtbVpVcjdvZW8vM2RuZDZNd1hIUWswYkdhN0FjUEJrR1lnbkhQMlVaWkd6QVh5eE1uMS9FeTMzbjEyTGlXbVg0SXRWMU0yU1Y0QlRERkpieCs1eG5mN0VvdFpoWW80U1hTNFJHN00wemFsbzh0QzFMMTVEenFheCtxOGtoQWQwQk1ldnZhUWIxQStTWXE3ZXREZ0R6bXgyekdOVHJGMzVkVy9kNVFsTGZnV3kwQmZwMnppdVp5OVJ4dnRBamhMSkFKUEZOWXQ2ZVBZRmVvbEpiUW1pdWpCZmNRUDdLSHNZWHFFdVBRU00vU2I0UEJBRUh4Z0xlaXE1SE50T3RFNCs4dFdaSFJ5aFFtbEFrb2ErQkxKbW9FSFZRSUc4TGF2ZC92NVEvQWViVktrZFo5WnpGb21tbXoxMVNaY3VVc2FPakxDVEhwTWp4NytRazVMZitkeUVkN2tNOGprclJ0SjZkdDBvL3ZrQ2hCNm9EclZTeUNWdk9vaDZJeDRLVEphbUM4K3BuaUtSdzZab0prWWNhZlFmdndlaTA5UHJ3YWlBSGRLeUQ0czdGY1RTdjh2MWFlQjRMc3VJRXo4RnpBaEZLRC9FbzZBOTZSTFowRHgwbmF5ME5Lam5pSVVtUEpGaFhFVE1yaGtPaFVDZGFsMWkzRnM2dDhQcy9lcVhNN3Z1V01zYlowM2s2Ny9tVzhZR0czTmZ3ekxLMHB5UVR3SUdiV1VwU2FYQWh2UDdEa1JueE5JVDVTSUhSNCtvOVVsNkxPV2tiUDJXVlJGcDZ2L0pvZmttU0hiN2F2ZjJJSWNzMTIvQjl4Ym0rd3FOUFlubEorWURJT2JVbXo3NjluaWtYMVorSThSSVdiYXRoMnhVTGg3aHp5YmJnNzRJTDQvbGdNVmxQVUdCcW1UMmExS2JpVjM3dk1BN1R6SXNYZ2NDVVJaSThlazhHbXpCYTgyRDVTVmRZeEI5dDNmT0I5bld2MGo0bGE4YjhORXQxdFhCM3Z1R2hQaVgzWGFsU3BpcEh6YUs5ZUtEUFFxc0o5Q3FoMmhtS1k3QmprVTVScG94cHpQZHNCbU5ab243bVZPWkJhN2srVzRwaUhQUjUyTFJKME0rOTdoMGkza2xnZnVjZWRvOXNicUFabzB4Qmh6bFZlR1QrenlCRkhLTk5PZXJFVzlEYUczbmdLdFNvdTJGKzJZa0xNNWloZ2tyUTJPc3BZa0tZNUdnb1BVZGtwdFkxMGVhMjZyVlR0Z1pZYUJFYVRDZDZneDNQclFGOTd3TG5tWFRCWGxGL2pTVWlwWkt2NU9CWTdNLzZsUXJyVURKTWh5QmtlcytYend4bGJLbDIrVktpZDZLZUo4Rm8yUlFlUVlUbkRkc0JWRVY1RmdKRjlrZWtaS1k2djZ0bjg4UTNiektjOHp2MUlwOXpzSnZMN2FPdXViNER2dU1uSXpNM2NjNFlhV0MrNzlPdUdTdS9NNzRYTXowM1laOTdiT3BsYWZXQ1V6cXBEWXlxV0s1ei8zYW5NcHhlNWc0NWlCbWhYWFkvUkJKV3ExaHpwL2dGdDYxSW9neUhLeUhWWlJqekZhZjgxQ09wZlp3bmtvdktFRE91MzlRSGhXOVoveVF5SHlTY1JRYUpkbHZZcUFsNXRUdXRYSGZZK1QwcnlCWUZBdU9rMGNobFhEVHBFZ0ZjbDlCUFdaUFBleGNxdHlKSW9ybHhhT0Y5a1FQanJDU08xODU2eVJ5Y0NETzhSTGl2a0dVQjRZYVBCZ2Q4R1ZyL0RoUXZxcjZtTDBYODNKODZldjdDUHkzS2hnR2JjQlV3VDczald3Wk1qalE0MmZpcWM3QXFON0NETDRzMU4zUHhzRDNyUklQbVdvUFdqODFtQlJHYmtlekRrNS9aUzk2bGpvbm9MN1E3WFF5OHY5d1VsSWkyaGhNNW5jVElJN1NMQTRmZ0IrMlNmWDlsdkI2cXdvY0JxMGx2OTZITFJhWERIN1IxYzYvOW1RdU84K0FIYU9rWk9QcHRtbC8zZGMyOThTSHNhSVBFd1dYRTVOU202K29TajdwYzF1eVRXRVhsZGlqYVZsSTA2dys0cWVnbmJybE9iOFZyMm5Cdkl1RXU0djYwbEZ3bUd2YzQ1WHlycHNuV2xGL1JrcWdaK05rMGZGZE42RHp3Qk1uM1h1S294ejROWFJhamwxbHhSNHpuVkd3MU1WdkxGa01XU0FIL2FWWFN5dmZ4VEw2YjJTR0pvc2JrUHRsdzhOVWpzdXJVNEFraXErWGNxaHJoOXY0STR4emh6RG1KWkVxN1NhWUJ5NmlIeFNBYmZXZ2FkRmtXS3ZIWG5ZaGxzMmFxTEZMVkRNNWRyTWZsM093MW5NYjFGN2VqTmdTY2pxdFNTZVExSlk3cDJoMlR3YXFBNmEvMEVIckIvUGxkZ1ZZZ2ZIeTFpNldYMUVSV080RmpFOVFLcUpVeG8ydHFXekZoT01MNnh2OVpFOVFFaUU0dURWUVdrWi9KcVVnRWsva0YwV3hLTExVUkFWOFcxekJXSTd2VlYvdThzd0J0UU8rZENTejhObytQVXNERklhTFlrSEhQd3A4TlZxd25DQTFPcWxaYTR5Y1ZwbkF1MXNUV2lMNWxNNnZiM3VkQmVqaHQ3SGkwZ0I2UGhqdDJyb2huYUdYcWRpQndmK2dCMW5PeU1rRStSbWZhYzY4T2lGemdyeG5DZ09SUVpCRkVIdFN6d0VVWW5lMDJyZ2wweCt3VndaZUcvRGE0WC9SZWJBSzBCU21jOG1ZWUxIN2lUYzAxWjh2ZjQvRFc5MUs4c3EzTkNlNG9SSHVuUHZJcUwwSGE5NllrNVkrS3VhT1hMek5GLzNJcXFsTWFxSG9MOWh1Y2R6Q2JDZC9lUnJFZDhycGZ6S0N3cml4dytKd3FndzJKNURoK1MvNVBzU0RHekl1WkZBbURSbW00S2ZjVXVxQTlpUVF0M2dxZ2pwTFd3OGRxS0xOTjZoR244cmN6N2NHTndrd2U3UmdYUmtKQWhZWHI4ZVlkSnJsSVpLWExFWTVXMGMzc0E2ekpxWENrbW5GcTAyVk1yRVkzZVhkcFdHLzJVQndtVUVYNlh5SjVtWnVOM0lmZ0o1eEZRN2FneXBmYkRDNHhrUlpqK1ROS3N3Z29LSURsN1l1NFE2VWc5aGVBS1NiclZLMzU4QXlKTnloZDlGN2M3YTBKL1RzRnNobXdoai9hekkrV3FXM1FmeG5Gd3BQWjg1clVPM1JpeXBkNjl4RDdHbHhrUVVzdWRLZ3MrQkExVmtxYlY4WW5NbkJnUkRtT2w3eWN4U1dSTWdvT28wYmV3RG1pM1ZMaS8xZG14TkxURnB1cTF2ZHNvRys5aHhSUTdvQVk4bDlkaktYN2VsRjZHdGRZSUdya2tvUGlaRkpPTFlRb29EaEk3dk1PTllyT2tIOWZqd0VXY1RKaWg4QjJqUVk5YXFIRm4vNWx5aVpPektNaFZaWFFtZ1U2VFV2bzVWa1Zac2NzMTlLcmEwR1JhalVkVlgxOCtOZjlpVVZqNXpxUmFENjhKZW5ESndMb1l3MHVtRXBRdTd1NWppV2x2enFZZ0F6WWx3elhXZXZONUIxZEJEUDZkY0NGeWRlUGNvNjdxYmhqTU9NdDdrSWdlZlIxMVROZHFNaFJyT3dXYkZISGZEVVNXNmE2KytZamdMWjlGWGVBMzZTWFNPaGhoNjcycGg0VWFNQzZXZlpJcHRHTkxzR1F6Z0dDVXp5N3JZSXU1T2JqcjMrcUhQTHFxTGsxb0hHZFJZbVdMdjF2RmNpTXY5Tnc0VjdIZHJwaitRK1QvaEpvd1VLTXFHK2U3c3JSOXRRMXZ1QThPUm9GZ3BrV0I4N0J0NHlxVmh5NU9GQ2gyNXlGRFVxZVVnY01XaE1BYXZVcWFuRWFNdW83VjNwUnY5L0pPNjBMS3U3M05LUllEZ3E5Qm1iTkh1dEZqRUtiNDVBdmV2Z1FTazNHUXpIdUVWSW1rZEt3Uk0yMFhuc1dKQVgrdzNtakN6RVk5eHl1NTlzVHNWc00zMTZoVU40ZE5FNVNUWjF1d21neFVWazI5TkFQZzc5Z1FrWXVSSGt1M3hJWGFBVTZSVDROYnFIYy9rQ3BGTjhYQk9YazAzdkc3S2plZ2ozYnNTb2RZZTVMbHZPem42d2phSFBYdmNaNFNxaW5rcGN6dHV0a1lHSnlESmpKZVZDYUcrZzhRZWkrb0MzTWt6cm5VU1R2RTBzcGtlQVlnbnI4UkJLdDIvaDh5a2dQODFiOHY2Nko3elFPRzFIUHFkVHJjaHJTNEtlakhjYVVFMzBFQWt5eTVlSkMvMGp6N0Vkc1pseHJNSWhDNURDSE95MmRrdHRGakNIaEJ6cytqNmhDRFlhMnNWVjBUMFhFUEw3K1JWRjJDOVFEalFLZElBV1J2bjRhcjNYQUNuU1JZYVkzL0Urd3duTHNKWlo4ZENWaTBUOFVZdEpvTTBDK0pvVld0TmljdVNJWEZOeWxoREVYY05oSC9MOFJBOWN4TXBRa2lzbHIwT3ZEWVMrQmlYMWRXM21TcjVHNjhTN25aa05MR1Y5RElWNHhYZ0lkMFFybUxRLzJxeWhtVXFlQkZOek9TK0VWR0lOeVFzU3lYVmUvSWd3L016NFdvTkdxS0IrQ3FyOTA0UWRROU0yVHZDVVBmaFRQTmF0bHczVkFGWnBjcU0xaVJkTDJRMXkvSlRDMTJOUlpkVE9ncWsvTG9aUUljaldZT1RzQTltdG1udGlqQ3dld3NTUFJzVWJuUzVYdUJpT1FSeGZaQWdXY0ZnQ0VLWit0Y2dnK1B4NXpkMlFra3ZxWnVobmZjRHVHSWFqdEN3RlVscHY1cDJjUmtKQXRMUGtTR09VWnl4OG1BU2I5YnREdDExMFF0WStFMXJNZzFMeVpya2g1YWdzMjNFVWVHU0ZSd1huK3dpTHFxcTU3aHk3NUtsMVhQS0hMNWprU0s1S2JBbTIvSWloSnd0dW5lSVZ5TkxDRE1MQzArM2tmZi9LSlVNcTV1eFFjdXIzbC91eWJuOGwveVc5YXB0OHk4WjJRcTBNVlBPMW40NW5BTk4wL0RjUDBUQm5UdFhjVEJxQlUwTGIwOWQ1WngzR3A4MmdmbW5tWHpwRVpQRWdNZDJTcEY2WFlsNXp2S0pGNU5qVi9XbTBjY1JCellaMWtDdjRVSjZpeW93dDA5UG13RnhKcG45QS82aWdiaTJzcDNYQ2dCajJ2aTVEeU51YnhIMk1Yb0VkU2JQN2xKSmxFNlBUd3F2VnBrT3d3c1c3a1VnVUtYVUx4NjJISFE3N0RxOXJmOFlzN0FUSnNVcWZZYXFRam9xaU5BdlhCSnJ1ekx6S0RTbU9wanV3aDVDQjZOWU1FenJiUkFWZTl0cksvSXdlOTJ6MmgzQXhsSFJRWVZ2RTRJT2cvbVBDaEMzNDVnTDVsb2JmaVpiVmxraFozcDdVMnZJaFpKMm9NRGJxbzBzT1U2cjI4bjNkdFZ3ZTlUZEFrZ1VISWNuNEFZejEwdXZZZGh4NGZZVS90UmpmNjc3NzVDZ0t2dDdwVnE5aGl0cXFKYmc4NEUzdWJBemd2OTVXZHUydUd3eEJRT3RpLzdaVTVqajlZNHlldnVWWitKWWRGUWYzZHREdlNSam5kYjduSUt4NlU2K1FacGZFU1QyUWhOVXhPakIrekYvSENLeS93dVFLNTgvdHRsbjVGNmVsSGRGU3p1clNWL2VqWUxZNWFjenJZNkc0cXVnT3dTOWlTVHFab0M3WFhVUTFtWWQrT2d0bmdaTmtGQUsxNUhYR1oyckJNNTBHdy8ySkN4dUt6cTdNK0FCNFdaM0plQy9vMy9SWlNsUzZOQU9VektQVmhkQmhJMjgwS09Xb0VpNU83dUZWb04vSEJhVk02dlNWQTgyTDJPWmpNOTdTZC9RVllIUmFMRkVkUnZkU005dEV2MS8rRWtMRnA5UjRKU1Uvb1d1SVF3YUFlRytGelMyd0N3dU9vSVZKamFhUU1aUGtuWmFGVDBoYWVVSWgxS3B1WXZ5YjVUaE92YWpSWG5pS2dRS2cxWXRHcE4vQWVRSGo5UTc3NXdFd2NDR0ZrUkFMT1Nta2hnMjBtV0JLZTZjZUJHRFh0TmlaakE5NmZ3WVkxQ3k5WEJGOXRoMHdoQldzaGNiYUZaY0xsdmlGZjA4Mkx1TVVud0hxZHdJUGtBS2NkWVdYdEpzMjFmQWFKOTBjaWgvQ3JwaXpUdkMxQlZJWkdKbzNDWjY4UEpTSWpIL1FrWW4vUklIYzhkL3NTMVNvbzVKVCtkb3ZqdXV1ZzFiSWpKTzh0N1lidUVBanowVFl1V1FZelRPV2VhZmZJSHYxc1JySGNBSENWYkQ1bjl5a0dGTHEyZnFCQ3RIckl0cHBmaGUzNFVrLy9BRFZ0Y0ZTSU1jMlh4amQzUnVCTzdTc0xTYnpZeXFwOEFNTzc5RFZZWnlEOHZhQ0tOdEYwcWZYdGhyNWp4NFZ1aEt1VGI0YlhKNUR3K3BCajBmV2l6ejlvUlhZYnp5bjc2VElaaEtBSmFtOGVsWE5qWnY5UU5hMXdydlM1cWZZQXZjQ3pEbEdMZFp0ODhrZXRiUnlWcmxpRWJoU1BvNGZDUkNmNUxONGQ2Y09vZGM2a3Q1L3JORElZV0Q4eE5FQnhOQ2wzbU9hZ3FKYU1TY3lrOXIyTTN1ZWdHRjJwU3htSWRtcEtYb0NZdE81NjdBc3ViTkEvYS80dklzQWJOSFIvRWxwTDUxMFJDbVp6N0RaV3ZhWnZTYUpreGdjRXcyb2tIcWV5NU9Xanh3RG0yd1cxNW80NGFpeTJEaUpUbjJETmpkdUx6Q3lHNHI0bXF0SXAwZ1E2L2lrYndMVnVMUHlzTzFUYjYxekRyNTlnQUovK2R0am9oMFhsUDNtQkNvZHAycGlJWTVpWUQzWEZLV3Q3T0YvS3VnYWVhdDAzYTltYlg3TitNZjRxZEV2Rlg3Tlg3UkpMcWp5SFltWHA5cll3Y1dkdUVLQyt2M3prS1pnWGFqVkFqZXVEenFMSTNFOHdSMmZIczByZ01ydkkxUWR3M0dvWjRlN0l4SUZxdWVGSDFSTWVuMStEYlpsZzgyR3puWnMwL21zZnVQYm9KSVRJZUhnbWduUkZOOStWdjFRRUdRdURhbEpab0xXWlFMVytlbTBvNXdWN0Z1N0g3a0ladktmVUxkeXVvUDh3RktEejE2QnZOWkEvZG9oa2xXNHBRRlFHRlhSTkJXWUZtb0NyVGNKS3lkUkYwYVVPSWRVelBuUS9HanlEbEZ3cGNvOTc5TEdYdWU3NTBENWxhaDl6OTU3K04rcVdlZjgzUGRhSGZ1aTFZTXg2OXN6N2J4bFdDVmc3VjU1SVovbUdrV0hkWmhsNU9MMmZBVHRLMGpaamZyQVNKTUlKb1ZBdTlVeWJQZWtmNXg4ZXdrMW93azVXVGJhbkR2V044Q1FnVnFFRjZXblZ2dURMaThEazIwdkhCeXFGQ0VZeHNpZHo2Uk9EKzBPdVFVaDJHbjNNbWoreGhuZTcydGpFU1FvNitzcGFhTitydTRQWkp6V09WbG5wNXRYSnM4dmpzVUdETzFaL1lUZzkvcTFLaDlaSkphUEM2REdEbE9rbEo3RjdGWUhDOWpUTFpMSGthMUtRTms5TmpxZlBablZOUG56cDlyYkM5TTFFNEFzTW9CYldEWGw0bS9aN095bmFkWW9HWTNibGVpNFpWWm56RWZVcThEMWY5TUpZRVRtV3AxWFp1YmZjTFV0L2Y0VUh6dDMrMFFOaVFSTnk1Vmw1bEVoQXpZVWJBSGkzMFZXOER2S3g3dlU1ejJmRTBKSU9UdjZlZXJHek1vK3Z6WnFaUjlXMG5jbytEMmJ2RWxoMVVSbmt3cjVMbFp3T0JqMUQ3RncvRlRwNFFyR0ErdHFMYmcwY0JVeHlPSS9tYWQ0ZkpqT0R4Ni8xV3hVR1JZQUtYcENBSFlDZTBvaEFWREIrQm11QlRoSEF6eFdqZ3JGS1pCb1l3Yk9udUkzY1BrMXZ1RHRYQlVZV3BjMmFtMmwyVEVvcTlva0lXekMyM1NZZzA4YkN5ZG5iZ0NWcWMrdTVPTU1NTjZWVGJiYkFRNnBIclpJMExCeVNpNmFrVmVCUUE0NFZpSXpFOFFwNzk2OUlDR1hUdUs4SmNPN2F2RGlCMmJtRGFJa2tvRWJUbk9vOEYwcUN5dlZ4bUN3UGxpR2Z1WHlqYjUrM0VXY0xJWDZiR1RodjRKZ0lMSHhOVmEzQWozTDVLY0FYcWpubHVVSDBhZlprbXJPbHlyN3NWTktINWxFUkNjVmFWSERRQXFyQVRuUjBmR1dRTDRsSk9scWJMc0lTY2hoK3liNEFlclVvT08zYnYxR213eHIxc01qTFdzVWtNNXdLTklZRE4yUVdBcDRlT05SZUhqMzhuL1VvZEF5V0hjR0JnQms5WkdJdkd0VmlRN0tHZ0Z1ZWFVWW5MT2JsMFZUbEt5NUM5OVRZNlM0VFI3U2NCdkpxYmhRdW1EQXQwRGRZRUJKY1RpUnpGTXlLQ1hEeHgwTEgyRnFpRE1uSk9VT3NmeDZqWG9iUWhSZFZPLzR5aWx1MWx2c1ducEUvdnpNWXRmcS90RVFlR1Rsb2w0b1puVnJQQ2VROVdiUXVoOHZTeDB6L1FJdktJakVuMElNYmhWcDlldDFWd2h0amNmZ0NxOGs2RzNmY2JVMzhmalpFS09hNlRUam82dXNpc3RCUktJRHkxODg4Um1ld3VMNTJWZUQxSWFjRWIzbnJmSGloYjJJYlpITHNjamZ4Zjl4UVg1LzlZY3llRFA3Q0dQTWlCemViN2FwV3hYUnJsbWNNQjdmcWUxY3lUTTRaSmJYeXlmRVNkcm5zUjM1cXM0aGtoZGJUZk9KM2s1bm93cDF3VFEyZUxobDFWNUdGK1BUVHN4K0ZJUWo2NlJ4UVV3TXJ0VzcvY1VNcEwxVm5zUDJ5SXhiWkR1ejAyc1VNQjRBYlBkZHR4NnlLL3pYR1ZPeE5iVDZsS3BFaHFacSt3Y2hvaU1ZbDBGZDFFSUZhVm0zTmdXUURQRVh5clA0ZWQ1dzRqMy82OUtGYjEvQTh1YnhHci8wVzdEZzRjMjN5MkozSXIrOVVmeithRU5SUit3NGkwTnNzMy9rZGtHOUFBZkJxMW1GcnBBUjlsL1pQQmk3VWhxYlBkUEJNODE1WmYvaDNZUWlrdE81US8yRWw1Q3ViSkorMjZhSzltblhFMEJydlNHcEtwVW1pNWhEN0R5YXRwbnphZ09uc0orbXBSMUN4L29SZnpyNTJvbUFZN05MT1U5ZGlVTTN2T2FUb1lQVWp1UjJxb0Ezd1c4ZkRSVjVndTdtNUtrd2phUEJ3OUJvejY4TlpwZ213TzkyQk5GcGR0em82YkZJSlR0cWt2SkczblBHV2NEMklMQ2dCeDllYmkyemJGcUhJR3RWK1RqUEwydDZpLzNBSWJ4Y2Q3b2g1aW1vNjA5eVBRMTczK2g5dzJ3Q3poYll3R3ZqVDJwQTBSVzRrQXk1TmVHeTFZNllnNHgrMjdndU9oNXMzM2poMHBwcHBtYVowRXhvYSsyNWM5S3JZc29oaTYzSHdmVFhaNHVaMG1BazRqOHhJQ1RJeVcyR09QMXNrVzlWSU0wdkZoK3pmSVV3QmtONVdOQjh3dlozczJOZHFpb2VZbFlNc05keXYyaHQ4ZVZUZHhJZWFzYTM4ejlpOFhHZW1vTjloSXR1WTU0WU5BQW51R3B3T3VyLzBHeXBlUm9VcDlKVHNJNXpEaTQvaHZYenlkaUpRYjRxMlRmWW5ZWUI0YWFrZFVqZ1EwQjhtVFN6eVh5UEo5UEl6MENSOFBjZjF3V3ZmeEMxM2NNQU5sU0lUU0s3TzFOMHNHbUNqUWJseWRpVVVqZmZuNzlRZDBnQXdJZ0dQUkFLaFJURG5zOXQ4ZVVBa2hPWXpLQXhaSkYxSTF6TXFFRUJyZEhKZEhlUm5uQWVCODRha2RsTTU3K0NFU3ZDczB0aVlKL0FSdmZGdUJwc3UyZEJyTTBabXhvaS9RU1BjbThxVy9YT3RsVFYyUjFxV3MwVkZROU5aOEdtMy9Yc2ViK2YyZkF5ZTZNeDFVTzIxTEdRWFhLMWYxZFpFUTlCcnUrcDMrb0tPUzMvemFhZjE2U28yd0hNczdOeVI0UUhJYVVFdVhXN2EyM0c4Y3RZdjJRL0prb2sxdFNZK2NVbDgrT29ZZkg2WDNmNmFQb2NJcGw3VHE5MWFnd1o5T0RORkV2WU5sWTJGU2tzTW8yb1oxNnNPSXQ5aDNaRUorQ3o4dXJmWi9lQUlkQ2RLUnl6M1BxWXk0d3UreXR3QU1qWk9wRndMSklwR3FEcTRvQTVhYUVsWmVhclVhRVprVnZGa3VzK1lxYnB4L0lJajBIelRRM1owaWZlcXRCeDE3Z0pSbEtsbTZKWU85YlJ3NUdPTG5ISkY1VkQybFpPZFRGOHplM3d2L01wRXdpb1BrczNtcUo1ZnRuaCt2aktVWXlOSVIyaGdHdFBHV1JkaUxMRzFTbUJJUjZFbkZxMGVBU1FPeUhXbmp4YjFoRWowS05HUTcreWNnK3Y4VkxZdUpCU2Rsc1JsN25wcW1HcEd4SmRQVjFzZ2pYb0pIOEUyakU0NlFqTVNwL2l4ZklEN3NtZGhPRjVQUUNnTDdJdnREZmN0RUtqalY4UzlPV0U2VXVnMWE2aXlOTnZvbENFYWtOL1pBWHVNWUR0eDlDSWJDNkJtbmwzUVd1VDd6ZUJabDVKa1dGS1NhNDg1d082elpMN2hBRDYrc2lPYTAvWjNqMldiZ2dETjFsT3lRQjkvZVVsRmFvcEpvYXNudXBUdE1QOGdKUWNOZENWVXliMVJxbUpSRE1sM0lHZE0xdk1sam42eU5mODJ4cWhzdHRFQUhGSE5XNk1Eci9CYTllbDFOZDE2WXVQU3FDcXhjMWdyUGp4SUxLdTVxMkM4TWJRdzF2cFd1eDBFMlJiNThLOGVYVGxUUjEyaVJPNkI1cUFLTDlvUVRsQXE0UksyVXFpRmtGU1V0azhlUGovZVpYczF5ZkxSbUpzMUl0akZRbnAvQ2NzQzRVY0I5NGg5MVBIeFdXTEVCbHFZNXkyZ0N1YzFDK1dDQ0M2ZDc0RXFEUzc3TDlpdnRDc0hRY1JENVI1bVlJTWhXWTdqS3dUS3FFTTh5UXJseGo0VFhSODVCN1Z5REpRTm9DdkFNQ3BaTW9jUzZOODV5c3Q1OEdtS2N0ZG5qOUhlSTRHOFZvTm1oZXEzc3U1aTluRFd6VTVnVkhmdjlScjFIQWVVUU9sTGgxYzljOUh1c2pDaUtUcS9aUkNkd2V0K0VHWFl1eVJMYmdsYWxmUEQ1aVpTc1dCbE81WFJvNXZabGpWdHNOdGsva01pem1hRHAwa3ZReEwyN3BFcHNjTUY0RERoRFk3cmtZSTRVMk0vMmZFTjlCdmZxY1ZZZlc5aWR6cDZ3NzI4RkFWYXVLTHM0VGV1NWdLNExLbjE1Sk51OTlRN2pMWE9rT3hKdS9uc0ZEei9Nd2NpYUJhb3FHK3l0bnVPbUxDRFlwNFdYRTc1Z2FHQTkwZzBBQjRtNGh6OEJDeGU3NjljblR4bTkzVlkxWWZaSVFNeGJiZElCeXp2ay9mSVE1QThuenl0aEpka2ZINXNMM01GRnVUUUlzMjlObkdreVFHei9IVDh4NXR0WFBnRDJmbFVXR2IyaXVxaC8zajBydjVrTkpxRVJVZXArMmZUTWVScTZGMWFWSmgyZ2c5d2xTYmhhUUNXVGVvQmhVRFhQeVVtTmVmTTVQQk1sMXAwUFFWL3JEcEpxeThnNWEyaDJvb0xBaW9iN1V4OEpKU25nTTlibE9uWW41cTRjQ09OZTM2a2tUTklZSGNjaWdVdnplVTU3TXcrMHprM2R1QmFNRzBMZzMxM2UweE4wVFVoN2NaamM5TnhkemgwRm9uWUF5UUgva2YrNWNGY1I0SGdGd0Z1azVYQm5mNVVKRHI2dW1STVF2NVZvUnVDNHJ5SVYyay9xdkRHbkVrc2NVLzFudUE5aWdpZEJWSDZWZkhzMXJmN0h5TTFPc1NYSzZIemNLQlNPK3NWSHU4R1UvSEJnaStLTmp4L0I2UkxtdWZZTExvcHB3d05kT25TZGh5MmpONDhIcjFLd3hla2N3Z0wxUzB6RzRIS25tMGFadHBEKzVXQi9QTzIvVnUvNk90SzcwclkySCtUTElXV1BreTF4MVdGOVN5T1lzeWJ4a2FBeFNiZFZLcEZrQ3UwYWtIUllYR1pHQTJHSTNyamp4cEdCc0tWVEw4Zmt1ZWVkWjBHWTVyaFp3VXVhYWU3MHhDQ3FmN1k3YWxFSFhEeSs0Qnp1R2hTbHR6eGFpZFBXUnd3VjJNM3hxMWtKWlRmWFZEbHJnZkQ1eERhZSsrZmNiL0F0YVdHdURhT1pIR3JnQy93Y0tlUHJLSUZPeE9rSmhyVXN1aEVWNEpNK082RHkzc1dFcFdhRWdieS9IK2lsQzdtbmdtakxpd2JhZ1I0Y2tIYzltWFN6a21rajJVcm1jMUxuU01zTkNOem9aYTdHVEQyRC85SmJNMVdmQ0VXcTZrdDZTaGhwcmhpZnovTHhZcHE1VWRBa3I4cnRNZnlRWVFrcVF2MTlBZmJMdUliY3hna0lweHU4aG02ZC90T2RDSFpmb3pRRU14d0kyczkrS2VIS29rNEJoaHdMa0VwdU5uUGQwNmdiMUc5RjVuVUo5MStuYnRkczVVbENEQjF0RWU0TGU1VmpqTXdIS05waHQ1UHlEQ1VqNnB6YTY5ZzRKcjBBaURwanFkR3NpbFNiOE1FMll2bGdNZEwwV1BPZGcybGlVZTQ2YWQzR3BYVEIxTFVmQnYxU0llMklOOVNLQ1I3MTZVMzN1T3NPNDE0bGxVVGViK0xKQUthSUVFNUcxc2RPN0tJeHRIUEZUZ0VBL1BvUnAzSjRZUHRQSWhQaUpqOG1SVHB1a2czb2JSQ1gzbnFyRlo3bTBBcFhSTmZhZjY0ZVhQb29KblZCemlrYVVlMkttM1FWYVVmd0NMczVYWDl2Uk9yZVQrQ2hBTm9lQ1NnM0haaFN4TUFZTmVraFl5UGhlWW03c3J2NTlxR0Q2NVdoV25yZXpQb0VvUUQ4WnAzZ1U0UExEcGJ2MHVHek5aZDl4ZFB4VVYvbEc1Q05YYXN2MExZYUhFZTQvajI1c0YxS29oQVFHeTllTjBORTUvMXFmWW5ZeHRCVVRPcmMrMHNQcml3VzZiNnY1dFpSK3R2V3phTTJPQ0tvMkF5TnZ4bkNneGMxWUFvTlFRRDZrTUFuSG03Vm9qb3dTeEw1b0hzVXY1QURVbjRtOE1ZS3lsZzAwRlRWdHlGbFV5VFF1dmRXWk9VNHhiVyttWHdVRTVQTzRXYld2SHFaRFNZazI1Tm40eDhqYy9mOS9KbE52cjJkUzdiVlpTOFlvQXZYcjVWTmZSTXFDSUU4ZFRIc3RaVjBxQUYrdEZUUUZ4VjFGQjhuWTRNK3BubkR4MUZqNGZQSGl3M3cvR3VmanRDQ0x3THZqZ1podVVKeGpsT0tOR1pRVGl3ZVFqNDBuM0JHSUdTdHp6TFhUdUpQQWpJdTJQMmRBblFrRUYrL1U1OTA2QldqeWVHTHJYVG9WSzVVSjlEUU0wUnBqdVVjZEdSZ2F5TDl0Yjdza3hoWFJjekpXYUFyNTVNZEE4clQwSUh5R0lLWmhJTXg4NTd3SHc3aG1xdy92eTM1VTVLek9IZFk0SWozdVFtSnhQcFpyYi9TdEhoUkQyYSt0b0ZZUnJpSExJMzF1bmpwN3R5TjBMSzdDK2h3VVg0KzBTMHZyR2szTTRVQU9SajVLU050OWtRUnNPWEhlUUJHVTd6Nng3UWdUTUFEYWMwY0tHVnpuR2pFQ0ZWSEVGNzNJUWNQZktHempiak81U1FuUlpMRm1KWlNjQVRpUjZYRnBZWHRSb3UwVzBJVEVaRXFzTi9yTm5sM1QrcWpiR1I2MGttdlhHaGdjMEFMRW1hTThGMXh2VXJQd2xjVk5xZ0djWWZXbktnUUhuTjBwdUlzZS8rQnhVemVlQlhmcWJrUGpMYytYenVpNjYzMEQyMlZMaE9EM21YY0NJdTMwcmdBVG5LSlo0bXZ6MHZvT1FtWjFGTWJUOCsvMFowWnV6UTUwU3JNUW45Znc1T1lIai9EQU0zRFIvd2wzOEZNcXkxY2FGc1hwdm14cTVsUnZRU0ZSWno3U1NpMG1TSUZCb294VEVaV2tWZ2k0dlRIQnBpY3B1WWF0U0tYYTZTckJCbTBacXkvTCs4R01GQkhlZTJadGNiZGl1WmxEYXRQTW4wM0J3UzhyQ1hXb3Vqem5tNUZWQUpuOW5DM2ZqdU1jYWNMZDE3NVlvaDVkM3c0SXFkU0lhQnVsbEdyTjZuYjRBQXRGdHFDa3JyZGR2b1IyUjZpT3ZoR2ZkWWxxbDgyTzluVXJ2MWJiSTMxMHNCZU9TV3czdE5vSXRjQ0szaDJZNjdQVEZndzROZmRTSmpLTHg5T21zcXNDRk42cXRBM3FjUjRwUXJqOVh5b3hPNTliVU04amZWdmVMUFJLSDAya3RrKzNYR2dKcjJOMlFGM0N5V3BtcStvN01nSVFoVzFPMHFwZTRsVCtmdit0N01HN09Id00vcHpmemhTK0lPRG8zdTZsempFd0h6bnlFZkFWWlNzaTF1Uml6VXRNS1BTMTk4M3A3cFI1TlNadXNvRHRobmFIVjc0OUZFMDFjdElQOCs3Zkk2c0JOUFgrYWdGYUtHNWg1VGUyQVBlbGlCODVEMjY1RUJWV3duWnBTZ1ZmSXFsUExSYlJ2bTBXcW5ZdUNUdDRBcFcxUVpBMHRIKzc2cC9jd09NOXYyR2V2V0pvMGxOMTJLQXBWN0FXTGpqUlhHSmhSR2VualJpK3JtcjVtVUJmajZqK0VHWVIybVNJTHlEN25rL3hsYXdweFFZMzEyeG5BWEJKRjUyQ0k2RHQyVWo0N3cyQWVkU0h3aFUxRjdJbHNpSW9seklmOFRzZ0dNbjhZdXR1T3UvdG5oVGlMY2JnT2k2bHJFY3JwSFFueW1xaEdWOU5GcVN2OXZVSEQ4R0prUWNmbVp0MW1YVnJVTXlFZzNlL0pyVVNTNHI1c2FCTkVPWXE2dmwxbjljbEZVZ1U3OGYyYkp0RGhGc3lGSEhvSXZjM1dEWlNNUHBLRzkrUlE4cDZSMzB3ZjQyVjJTYW1lOEpuWnM4Sm54UXVCanVmd1lyRFRPTlJ2WDdWeXVCODdkdFh3Vmw1R1JOMWg4L0ttSnYxWDZQNms4bnJwdTBlbitkSzNGbFEzdkRyT3JRQ0hTOW9DSTZDNzAyYzAxTFdFTkVNVzE1SEVzeUN5eVF6RlBmRTdIMkt2cXUxdWc4WU9jY1g1RjBjem4venRnTjZ3ZG9lb05BVWc1T2JPbjFJNit5YnM5V0ljc1ZUL2xUOEMzLzJvMTJkUmdrL25YUHlwOThya3Q0VVhVVm1UalVpUG9oQnY1MkZzM1RCVjNFVm1yZStsZ1MvdERGektYcUxmaVhkNzBXaTBkU1libDJnMkxudFAydDFBeHErTm5WOXU5WUlYTVBDbFJReDVmQ1JqMFFyYWt3VmhLMnoraCt6S2k0Z2lGZlhNNEw4NHFUaXJpNzVmOUZzb0V3K0ZPMFZFQXNTM2dlZzFXM1VwTUVwcWFsWmtSbW54UEhSZWwxOHJDY1RiQXpQdWRRTE5OK1p4d0VLSGhvakVEeDVjSDNyK2s5WDNzYnBTdkQ5RC9aZWhVVFhwU0NMQjc2MVVYWENSU1hxa2JBZHhlOFJOUGZvWjRsMFhnQlZ6NzcrcHI1TUZ5Zy93a20yVnFKTmFpUERjdUFYVXpwMTVRQlQ1Wk1jRys4eXJ1Y3RiSVM2K2xFb0NaSElFRjc0aGxMWGtremY5Uyt5VEwxMVZXZlFVc1lrK0xHQS9SWExiVzZBR012YmJiYmExU0luTS8yWTd3WG96cnRzM1FRMEI3WXJqYkVZR3M1YzR2cFhjQ0RsaCttMFk2S3VVVEhFb29ad1VNa1RzeENFbjV1SjJFUFppZHN6d1htMlVBNzlXNklMNHFuL09JNDNYakZGYS80akcyYmFnaTk4K2NLSGtLbTFHK0YyTHJxNjlXTWtPZ0hRQ0ZPY0NPQmFoY3h0RnN4ck5wQzNMTzZqZENrWWtOd21OZjhKOTFTQTZvSm1Pam9RTzhvVC90TTV5YVpkTCt4QjBTdXpRUmorZklLZzdoOWVCRlBmbWtjYkpza0FSdHFrYW40dWd1K2Roa0lUTXQzdzJyQnBVWjVwdXpzM2grWkpERVhqenBnVDRXYnpZMzAxdHBmNjI3ZHBjdWkveUMzRmVGVUczY3p4Wk9wazExWEdjWTFPcWZiUnh3NHR5OVYzS3psaVNiNTdaRFBjZEdxNGJkS1BMaEVicGNCSmlqUm4rUWVmVXl5ZHlEdnVYMXlMb210cWNRa1lZMDZyS0s2Ky9BMzRXMFpHZjk2ZGF5V2RJSTI4Y2J2QksxYlVmN1FjUjgwSVRSbFJKOHM4N2xPUUxxM1I3UEprTmxyRkFYMDhQeDBrU2xiRk13OWx0SEFhWG45SXNIR1Z4VWc1OWFTN2JJajgyMWJrWGp0KzMrT2RwK3JadnhVVXk4dE1INUFySnJZSW1zM0FQOWZaNHFwaWlPczE2OUdGa3FyVmRIM2V1WFpIWkdyZWh0NzJkMDNlZ1JpU21ZcE5iUHI2VzJGR0NFSmZMVzFPdjRuRjhTUDYzNGZQNzlUbXZHWldrQlhiMEpVcXJhaUdrVVREZmdLaDRXMVlNcXFqNnJqc3VDZFVkcWNlQUUwUTFXbmlLb0MxR3lsTnlsM2VwcFYra3c1TncxaUlMWVVBV0ZVbHpHa1BsT2FjTzAvZllac1FDSVZoQ0JDbVlBZnR5R2JzZENZVll5YXcvT1RzMUcyWCs4UG9yUEdPVHc4a0hqeFVUUnlPNTRBZUFlQUM4Q2xSdWNEWndodXl5VmRqQnZNb2NqNVpqd1I3ZTI3WFNqWjdJVlJ3djEzRWtXTU4vbno3UjZMNENBZ0lDQWdJQ0E4ZjIvU0IvdCtpcy9aOXViK3o2OTcvYjlNSCt6M0IrYjdmcE4vMFBvM3I3ZnRHcjdQcnE5KzM2YUQ5dnUrY1A3UG9aLzIrLzUrMzdDWDl2MU9mZlY5RWYrMzJZdzZiNExxaCtwcGw1cUVzRmcxZ0xwR3NTRWxWMkNTMVZpR1pjUEVlVUtDdjlaaE9TRE9KUDZUaWJEeUlvcmdMNW4wcU1Yb0NWQ1VvU3AraUZOeEphSUphaVZLZE1vUWRRWEIxblFUT2lMcHZMTmltTjVoTVd4SklVWDdkeGc4T25Ib2dnOU1zYVQ2TFU1bXhaWWxGZElVZHJUZmRzQjhjTVYxK1pWWGg0TUN6a2x0d3F5VWhUZjJjZjd3dERPQU1Kc2IxUHFkMkNESWhxNzByZmpqb2lCcE91YjAwNWFEZzRuZGV2Q2pQbCtvK2JPU3QvY2xhTHg1RWVCYW1SME15b3NBTDdUY08wUUZFY2RaR1N3RXNUN0lmZk5zUnZMYncyOEFsV2tGSEZ3VXRWejVQSktDQ2tKQzhtL2JMS3c3YTRrM2plZ2JQVVRUa1FzazF0VUZCdDZYVGtINElNajdpSlBGYkh0aXhzb1Z5NC9TM2RMVkMzSHFXM0I5TnVXWWJ1ckVZV2lSOUFpUWZieGVEZEZ3R0xHNW5QQm1FcnpveDZJc3FMNm4zUExNZDhxZ2pFM1Jxc2ZVTlpPUWdsYXNVNmZta2t2U2pmOEUzTS9UWlRFVTQ1cENEK056TEJlY3pPWG9rdExtQXd2L0Rqa0lDMUVOWHBEcHNhbkhaQ1BYbU1vTFNheENXRCtpNFpjcWhIZmttaXZ0UXEvdks5a3RVdFIxSDlyd25tM1hPNyt4a0pHNkpob1AzbzVHS05pemkrVXFmTXJEN05BeXQwNzVOUWdOU1l1c2RYcjloZDVmQ0o2QVV4QWx1bU1tczk0eG5LMnFjUWoxTFkyUUNmeHpLRnhrd1FsN2Y4WVpIQzZ1RVI0b1ZOTDR4aUZIUWc1OGpSdlVnVzVjTnpkeVFsRVZ6RU9RTGRtVnhvaGNhZnJCMURoU0RkcFpWMW9UM3hUTjlBYWloRFBBcVNwWmpZUkZCbXl2SDluM0xwZGdEQVg1ZzRsckFsYzlOeUk1d0JiQlpYSzBjOCtCWksza3BpV2kwZ2VBNmg4cDYvUUVXaUs4QVhXRzFSUlR0d1dXZmxSczdxOFRCWGlwKzRRc21uL1NPekt4MlI4SWdERlRhdWloQW9Wak9GUy8xR05jaWhKd1UvVlk1NHd0akw1aEtJMDFuWndHYXhGemd1WXVsa2hvUUlrYVlIa0tNZTJDR3dWREFlTFZwNVhOWlpLNFFzcStrSHRJcHRoRGhhd3pRcm4xYnVyeTI4ZkJUcmhNWWZNWWhBS1BQaUJhaDJYc3NvbTczaVBTVzRZQTRKaDBYNkY3S1pLRHZ5YkpzdHJzNGl4eGJkQS9WRlRKRzlRVzFRK2JVdEJGclF3anNmaUoycU1lT3NpVjl6NFk5WCt2ckE1SHQzZzdCUDlBcVMxclFGZFJYMzNRVElvdTJ6SzBtR3BXWG5zVUl0aDZkS3BCZGNUQUZoS1NsQWEraTdnbE9xRUJxTDV3cHJwZys4MnBvVEpPR0FwYUlrNDFqbVJ3VC9XdERiYzVMM2xsTVcyMk5jSTZTWHVhWm1tY2VYWWkxZHVpdVUxRUJPZVJWQTR2MXZaQTNBbDdXMVB4QUlwSW1hLzZQMW51aUp3UklkbnJ3bGFuUjJGNnNXWGVhMmdOK0gyTWk3SC9PUDZ0Y2RBSitFeTY2dXJNenhKQWplNTVNRTQ0UURDeTUvaUxZUHZhMmd6eHRZRkc3Tmt2SFNydHduWDBpaEZyaUhJR2FvUGdzblg4NWM4SU5Cd0ZTSzlyWUQxWmZOeEdiR2hIc2kvaDZUcnJrL0lNS09wNGlCM2ZKQmRBUUt5cG0wNytVbWkwdVNsMmlCOGJ2U29zcXBNajAyMVR5N0NkNVJnTW1YOWNGcFBqY3VHQTZwQXBqOVdSQTRsSXF3R1AxRjZFdEJ4dnFHOFFYQzE2TU1IUk5IZE54N0pHbkFqa3BENklkT01mWHdEay9wbm93Sm5DRFBsbGExQURES2FMeURxSk1JNmFEOWtkQmdEN2JhNWNBbVpFeEtsMVE1SzhicnhQaW9xK2VyaUh0WGt1WCthQ3JxZjFIUU92MDdqcThFd0RLblBOQThVOGhPaHN3K3hoYzR6OVRMVHJLclNGUzBOc1RidGQ0Rlc2NFpxa2prMmtraEZ4a0kwN1hCV2NEUWs0RUtLYmFzOE1WcVgrTGV5ME9JSWpocmhpOWdtSVBwUnhOVEJGZE9FOWxkQkptL014Z3FtYXFRRWs1SG5hMFhuREw5ODJQa2xkSnFwMWVXQ2lLcnAvVUtpV1EzUC8xSExmUU5vRmxzZkd6Z1BUd0JKSEoxMVpxbWNuRk9FRThGaVByL3BUb3lwa3lTaTdad1pwY1Ztakg1K0s4cXJWMmR3UEFKWEphN3BpbHhEQVMvY21PS2EvM0pkWXJsdG43TVZ2MVRpRGoyZWhCSXRGbytZaTRBMS9aUkxkOEkrMHJqQ2U2SVY2Mk1rRlYrMXNKdWI1ZUQ3R2VnTTJFRVZRTzFHUzRCSW9MeCtjYldxS2xaRlVwUTNOV3dRNFhOUy8xdzQrdFB1THpVbVdLTVFoS25rN244cVVzcFc3VEZNZGxLbWF2RzRpWDZqcDc1d2xoamE1c2lYSERVajZ6VWR2U2ZSM2JGcFVoZzRIVDBZd0drWUExZ21nRHVGYWdvWitYazFHQmQ1UmhhZURrSEtiOHdLU0NXR3RtQlFLWlhnY3F0Zk1lQ2JOZ3VBZGpTcUpZbG9aalVnTFVVQlRQWWVobUVkaDdBV3NQdzlRbWtxNzdBbUNucXdGV3BTZmJMWHN3NzREVzRoZGtKTHhYTFVFQ0VveXhHZDdBR0UzZWhhMFhKZ0FLeDFXOEJBS3NTYlVad1hPMU00eGZzWFZ1TVM0OW9JY2habnQ1R3BoZUZ4UGxJcXZIZEFUQnJVam5uR3RJQUFKWG53Yzd4VGhMdGdDTEdnT054d3QvdFBaWDNWamZMaldYSWNDUmk1SXI1cXZtRjdyOUdlb2owdktsVllBUXFxZlB3RE1sVVNIc05EcDdERW01amw1c0pqakRBTWJYWFhqclByRzcrYkFxRHFyR3c3dEJiMVZGeHdCcDU2YUwwaFp6L2xudHd3T3p2NVk2Rm9Cc2p1Vm00UXcxOUY3SEcxdUI3V04zTzBvV0tsMGdSNFJPTHdSaVk4TlJZdEpxbkdJN2NpS2ZrYXJFTU1GRnpqOXpiR2xuSktpK2wrclluZGRqUmw1WUlsWGN2Vk5MSnVJWkw5Nkphb3dNdmwzanpVa1JQUUtuNE90TTFibUpnKzB2TTZ4QWxJNFZKZnkzRjBFSFZvaHQ4WXJVc3o1QTNLZDFLOXZXN2FqNW1nV0pQdGJtOEtncjc0NjFOcjhkbXBNQ0ZmYlJDbVNCOTlLZ3BEQUQ0SjdLd2FicnRMQk5hM2Z4NDFuT0FtallHMG81SitkMGRvMEJpYlpaR1Mrd0t2MGVlQlBQdkxEYjNXZmIrOUtSK01GdlNJd0NqN2RRT3lZSUJ5L1JsWGp2dVJhVkN6cG1XcVNZaFRXN21DTmZJZEJtZTRXdUpaUW1ISWNCTEVoN1RHTXdYb2ExMXRad1ZOYnptTmlpc3BacGlTa3gvWWtsYmhCTWg1czBTdmJBS0tKMHp3U2ZyRFZqZ0o4Qks2WGZuemZTTXRXRzRldTRxOXAwSlUzSUp4YURrYTk2MC9YMWJGTmRzazlVZ1pDUjEwYit3NXB4cS8xZG93ekhLOFlGbU5qZmxoOUtwb3RFcVZ0dkdkdE43VUorTUd6QXhxUkxjaTFjQ3VUUDZON3QrKzR2a2tjS0hQZkVORGN2MzNCRFlQNWJQc0RNOHRMUWUzTFF2RHpyNmUvY3YvZkQ5Y1pkR1c5RUh6SmZMeHZHS2NtRmM1U3R2dDAvaURRY3RCaUQwQ3NmSVc0dXZIRUt0WjdJV1pBRjJLaDlLWEVFVCt0dlZGZld2MnBwQ1RPd2dlQnJJQ2hKL1gySm1wb0RuNFZ1WTJHKzc2SHdudThFbC9QSjB3Kzhpb2lzS2hINFVjTFMyWnppbHdYeW5sOTJrL0RZa01JblFwM05LcmFnZkh5ZGJtcHJtZk1ONlNaTmplSzQxTnp5MnJjSHo3WXgwSVJOczVROS9HczVybjZuZ1dBVGN1cC8ySTFxQzBIK2RSWlJKRzhxQVorVll0ZWxHRlhmMXd3dlRVWUtVdG95VE90NFBWWkw3d3RNT2RDWE9mNjdkOTRUdEJhU0d3azdMTW1sTDlhOWVFTVhHb2FkcmpSZVI4NTc5NmlFcUQ2bHlQWmpvbkRWdklyWlI5ZkQ0R0swUmlHRWNNR0ZwbTlzOE1pWHNaMGx2dUpCQVA1QjBKeWZvc09XU0NGS1FzVXY2amNxV01oRG9QVy9IMmpPOE9RT0txYzZRME5FNVN4c3JMT2ViT1F4eUlyU2JUTVZoamZWa0p3L1BvMWFLUU9XMEw4TExicmM3aHBJajkwMlNHYlBBTk5xaE5td1EyZEsyaEZQekJjYjdvZVdsUkV2ay9JQjMrR2FqYjdGVEJYQnJSVDdCV2NVMDNIYjdrTk51TmFzVDd4Ni9zVHdKWHV0emxadEkyZWxkbWNGVTBGaEFxdytyQlVCa1BmR243dVovZ1d1TDRFWmxEN2dhQzRELzNiUnJpNTFrUnBEdnh0ZlBtTUxMVDFTci9LUjZNM0xxU3F2MWQvclJSWXJ0bFhNSi9TTzNQM01udUhtUVlNWGJBbW5sTnkwZ0xXTEFxRzNKTlV3OHlURkFPSzNqVk1PVUdtWUlHMG5JM3V3ZDhWQTBtTzh3VXliZWJTS2dYajlFZ2VsMk5RVjY2bnVROEZ3N2E2UkIzT0xndUl0N25qbHZVSTZ1ODFVTGNqTitVVkZBZEFiQ2xqbjR3Zk0wRWtvLzFOVW4xckdvZ2pVTGFZbDFzV1dTR2g5T1Rhc1ZKTHRISDc1SzZMNk5YVCtqcnlVZFIzZnMxK2VtZzZtS2pBRStzb1hMcGVrMkZIUjRIemdqQzBsazhTTTR2b1BWUlNVcWRKanpzM3ZkdGZhRmtLa2FYc3dFQTI0bm1FVkNwQzRPbUtNd2lJZWtwV1BPTjNPYUk1ei9CTnlrMm5aYVFUSkhzeDcydkx1aW9NRDVrQityKy9Qc1RsUHNRWm0zSjgrNjhsL3hDVm95MGJwWG8zMWVvS2Y5N01ldHBreVpaeTdVWEdVdXc0ZDhtRWxPY0hyTFVBcENjMHJPWWl5WkUyUUMyd1FvYmo0cFNXcXF1Z0VGNFBjWmlBd3dBY1lON0xVNmN6bngvUktaRE1XSVRhT3dVNm8wV2VhenVjcHBpckJsU3RraStzeGp6cjFzcVNtSUUvU3p1RHBwd1VacUJJd2VaV0NNSmk2dTFHYW0rVForRVlMMit4ZDA5dzZIMUM2L3NxbmEzeVYwV24yRWxPek1xYjRaVFp2OE1VR0NrQ3dzUHprVjI3REdxc2NDV2QwSVNFR3F1M1lRSGI4eDBxZWRFYXZpMDBJWWErV0JlNjE4Y0hOdXk1eThoWjE2ZExGSlZpd1hrUGZ6cFFyQUNHaEJ0QVhiMmhoTVd5UnRHZ0NYaUFrUUpQSGJoYlM0aVF6VG1kL0pLaXpBWnB1aXMvMWdMakw0QjZhVnhQd1BmMDJkVDhtd2NpalMzNlI0Yzd6a3Fxbnk3bHZYWFp3MTZTQ21ZU2ltcmdza29Wckd4MlQzSGlWTWU3WWlGOGp1NTJUWjhlR2VTcmVoTUlMS1FBK1ZscXpwRGxNT1l1VDZxcXFKZVJBcWRUUmtSb2FOQStGS0xuTUw2Wkh1V21GTUM5cExicDRCdmZvY3oxNVpKSDQ1UWtiM2E2c05FSUxCUWxwbHdwd2c5MDVnUkxoYUxNK0x0MDVsVWgrVkFKZjBla0FiNXVWaURoU3lpZGs3Ni9EdmEzODJQaWhMSEovcUMrN1FWVVFSaU5EQW1kRjhYTVBGUVZmbHdWMEdUdnVHUlozNTdiakVya2dPVTYya1orWWVXT1ZScFFNY0hRN1hsQWpFeENDZHFYVUNtbnBuTjc4dE9RemdRdjVQVjFPZGJHbjlNV2tqTmpaZHhWdTdCek5iZFRhOHBmK3gwczg1SVFLWmNyUEhxTFcyMGVNZ0hEZFRPSnl2YTR3RnRmR1A5Yzl1cE40ZGFMd3dtUEN0dHRXR1NZR05WSGN1b0JPWVhxRFdKc3NSRTVQMWJ0b3hqNTdjNjREZnQvMDNxb3BzNmY4SWhOMTlOazZJNnZRTmhlakpaK0hWMmJJLyttcFdVdmJXazgyVXIwa2lnTFd5cm1QQVU3blU3dzJBSG5zcFVRdGxJTXBSNHZPb2twSElNVmZBN2s5VUd0dkZKWHdlb2c0VzJ1YkU2bGpueDVEVDJ4TmlidHlUNllZK3QwOFl3OFpTd3UzczRzTWhDVFdVaU1heDNJcWRtczZoM2gwc0xEc2wvVjZ3V2pRZ1BkRTgwWkFoRU4zdnRjZkZHV2dNbW9xbGp2eGxxNUVib1oxYjlPWjV0bVRub1dvQTlHOFV4NGJRbnE0NFc0aFEzT1RmNlJ3emZCMnM4REhmQUhYY1M2bmgrcTF2OWlYWFpxZ1FWU0paZFJCeWJqK2xVK0g5RUNQU21ZUlNYRk5hVUJrS25Qa0ZNZGxGSzZnWC9ENm5zK0hHWVhHNktvWmRLRllGSzU1QzdLRHM3djNDdFBXMTdxUWkycTlHVzdLZEpqd2UyK1VpNUk3ZC9XODJFSHR3ZGJSV01jZFVLZGdhMzlzdW8vRTR1ZnQ3NS9qRTVKQzZzRWJPYWIzZ0ZpWmpESnR1UGNtdDBTMHNPSUNRdzNhekJ1Z0tFWDNteXcrRmxkZjlJUGx1a2JETFVEbWg4QjdqeWVxVEczWnhuR1QxVTNFeHh0Uk9Ca2dDOFdUbWMzb2VSNEFvY2ZLTGdzMkJzaUpFWDVoa0grNkVzWk40MGF6ZXpUaFBOTWZEOVcxYnBrUFNyQnB2cStEa3V5QXJENlUwdldRTXE3MzNnOE5RdXFoN0FOY2xZRGRSVjkrSTNjajBYSElBc2R1d0w4cWNXY09aTG1ySUtUb1IyMFpMQmo2NlpRa2krUGRXVWMxTUpvYU9OM0lnNm56MVRWZTV3UnNPQzhhVWlUSnc4elNqZUZJbVNmS0E5UW5SM2pmWHlnaUlEN044QWpxeTVVNm5GUU1uQkN6MU9jMVpNcTFmaGNKdzBLQm9oendlUkxpcVkyLzRaNUlnZE5ia2NhS3lCRmFQaHd6ajJMb1EveXR6SHZISlEvcWdwcTNvWkFiU056RERPSkN1cUpxZmkvTzJvY2tFcGYrcktJQlBGMXduQVRKdU9lczBORzhVdGpQVDM4R3hEckpxelo3QnQ0eS9keXI2dXB6Vzdic0dUdVpTWkgwcTVMUThpMHVXOVloQ3lncXQyMkkyMGxDNFVoQ2d1Z3NGclRibTZWYXJrdGZRSWJ0dTBlWDhQc1ovcVZiV3ZNQzZldHppV3hKMWkvbTVNdXdqSkRyS0JzZkNIVVJJQTB3UzR4aHFjdEI1ZytZWWhVcUxuRGpQSUx2VWEwYjVtQ0FEMXFPSi9LdjU1SUF4R1pMOGd1Z0xyK2Naek1sZlFJMGdrTmtuRGE0cXZmS2lPQnNsMHYxTEh2Z2NoU1FiNG5sdFc3b3FYNFJZdzN0MllCczdlVzlMOE5TK3hhT0VGMG1CNmxBZUIwZ1Q5alJEWmplRzBWU2RGdFRNMUdpS3JKZ3VKY0xnQmlxRDFnVlRvbDRFbFkrTlFtLzdHQUo5NDYzY054VUZQeW5LYlVrUnpDM1Ntek1nVFdadURCWWlWRnlqclZWZXZma1hFMXpBaEtwKytwRllNTUVpRWt0bW5UWFJuL2VpV1FOOFBiTWFnZHhZUFN5U1dMWDFla2RnNDBCKzNvRHRxbnVxMjIwV29peFZ2RTB0UWlMbVM1Nm5IOXAveUZCMWd4c0kxRDM4WUp6dzI2elJ6NEJGVnlGRUhhZ2toWmZjL05oSUx3VEFMb0FBVStjaHZrQUsxcEQ2Y0JzZ2o0VlZML21DT2VOaTNHNHR3SE5ITis3OE5XS2pFY0VVcSt2ZEcyN0w5OGpCcXJkeG5iR1Jkc2FuNVJDcHBsL3hyeEtpeFJyWDhibElob2FkQ3QxcFZMZDduaS9rR0FjTDNGMFFtSXFucWV3RDM5dXoxK0h3c3NlTTkramd1c0I5UTFuZCtHNHlIVXBzTzNtKy9kSEk0RFc2RnhDUUIvbmlHbHZhL0MvaDB5bUpkOWdTR0VsM2dkNU9LK3lKa3F1QnlNSlNFQURvaG1weGVGWmQ0ci93TWZMNlFBc1dQUExmZHI4S0ZuUS9JZkNzMHBiMUg4QmkwM0pGdEpXTGhQc1BuZkVVL1JPKzMvelZzeVZESkg2SVNLc3kwM21WOWpyRFQ1YjYxS0dkRE4zZFM2bG1rZjM4K2RFbGUvSURvVzZOSW42YVJFalpsdjdsZUJ0S0xsN2NPelpGN3hWOEd0cGg1MWZWU3hRR1ovUFBTL1NYcnBsUzM3dnowYmI3eHRSY2pUeE42T0ZvWlZwTlN4MEJvSmlOcVAyWW1JUkY1L3lsK21FcWFUaWorSUxWTHBYcU5seHdlZS83eFlaQzhqa1FzR1NFZEw3aHJVaGNzejN5clpwb1d3ODhGSzJOem9YTUd4elBwSjNzUVVJOXlmK0hEU3lQMzhzU3dnemJ3eWhZc3RYMU8rWEV5MmhNemMxVUZvNTJNUDhMZVJHdy9EeXRNbUhSNml3V1Y1dVRKNE9SWGE1bEU4MysxY0JpWFVFTEU4bmlPY08xSlBJZFNnRmdPYzdodExuVHFGYW93UXBGeFhrU1ozUGExUytlR1NyMEhxWkszVEhaUU5EaE9zaHNXTFQ1aE1WVlZkOUdwcWIwUUlqalpiemhoc2lQWW9RNVpGQWpLcDBqU29PN1VmTW91Q2orVWJNdFR6c1VYcXc2bmRNMFpjL3VHNURJZm1HdHpvaW5kQ3EzNHIrOFpFcGNiMC9CUU9UUnJIeUVhMkJMdk9odGs4ZTg1OUVlcmxpYzRybjJRTEUxRVNwQ21QeUhNZU5adHBtTWQxeHNyc1VhTFFFekxweU1XdlJkNDVLRnZqN21jdWJ5Q0x5cWZ2MlExemdmdXNpclROREQ4Yld1ME9reFhuZTk3ZVU5Vmt6U2IwM0RCUWZEYWluUldGZWtUenMzQXJGdEduYVFabUdvQ2FWMUtYdFUrVUhjQzBMcTgwLzhtNWtpQlE4N3RnL1R2VitLbDNxSmk3R2swUmtydFZRRkV3b3l4TW5iSzhKNW11RjBQY1lkdWsvYmFSS0VjenY5TklFL2NwOUlSR0NiNlpVdXJab0FjeG1Hbkt0YTdIN1ZXbE5WalBDV2ZocEZoRHFJRzI4TFdpRlR4RjFxcHlrekgvM29JbHhhWUdUaHVIYWx0ZFVBVEN1N2w3NHhnWmdWbDlJQk1RRDFuWFhHNkpUbUk3V29Ec3NyY2VwblcvZjVRM0htSDVUcHF6RzgybktYazBnMjBzdFRacG80cWlkVDRvaW0zSUF5eWFTazVock9HNEZFS2pvcm5kcWNWbUdjUUR6OERSdXpNdWMvdzZMYUlvVGdtUElENGJsbU84bHFvRS9aZW5mNmxoMkJFMXZQL0d2c3VYWDVwZlRJeFUvdmRlSzdBTVI1Zjl2RkJQTU1iWnRWUis4NWJEQmpnY3JHQ3ZFMEg5eUs2bGUvZ2UvMHphRUpjTlNmZUw5VGlFTVJlNlFQQ2ZnKzNEaFhNdEVQOE1rUUVaZEV3RkZkK3BRSmFDMHhaWFFHRlUzcjl1dEpMYmpCTGp6ZDVlK0Z2S1BNZXFaYXNTd0J0anBEcU4yY0VCNEwxdm5QMTdIQWphY3FiNnp3SFVIL2NxbHYyQWg1MXZ2SkFpeWpSNGR4ZUE1Y2NaVis0VDFNbGIrSjVBWVQxY3VNaFl5QlFQanJxTm9TMXpSUmhzU04vc0l3dGVDUXNmZEZtaFZkSTZ3WjhJVk9CUDRiV2FkdTFETHdCU0wwL0ZacTU3NDBNUlM5eXB1UFdmbE40aHBqWjhzK05ZR0RwVk5Yd1BPSXpPdVd0cmlLaTF0akU4Z29rNEVQNFBoVkIydldMTldDWmZSQ1RPaGtoMXhuSGY0S0M1QWNXMm51cnpqazlhbWRkYndGZ1FiT2FEamZpc1pSQ3Q3a0NHTTdBYXpXSjFIOGJYYkNKTmhVc3VMQVF4Tmx2OEsyT2ZrUkxUb2dQdDMzdTM3cUVxNHROc25nWENwMUVlR0ZRMFE2LzFPWXg5Zk1aWWI3d0pJS2pKSGRYTXIzR3JVNEFPbHhpTFNuTVBjWTdyc0JWZWY4a2hsQ2hYN0FPbXMvTm5Wb2xid2MxNHdMZDQ2SzZENG9FN2JVcjlhUldPeXNQcDZZbTlPeElEb01UelUrc1pnd3E0RUEwbUpvTm54MWJuOE1rb1lqSmlJKy9hNmtmN1dzVkN5TGhiTWwrYjVCb3VETVBCM09WV1JDRjJKdVd5bVorVU40SjdqcXB0NG9mOXJmWGtmdUpuMk42cThnbmFQQXgvUW53WGlya0lza2xVZTEwTmZiWWdZaU5PVW9iK0F6QmZTcHRURDYwckMrRmllSGFuMTBPK3hQYzBNNTJUZ1BiS0VEelRNWEl5U1d3MkJqTldSWjMyL3BLdW1FK09vM2VCMHJQNGRDV1lEWWZlMVJCQzlnZzE1ZENDTDJjOThVQllXbGJYN1I5ZmtLWit2aEVabXc5Q24xcVpuZmFoUzdEcWRyNDlUa2Q0cXlmNjNUMnhNTVRvVGR1UitLYjdBY2Z0dzVqOC9LanJhMXAwM29OaTZLRVlnZVNoY0lxeTBrN1p5bkRvK1kxSzd2clh6UmRmUWN3YlFTUHU0ajJBMU93S3ZjblRSdFVrbEhvRGpSelM0Y1VpRXk1a2Z3NS9GWGRWVXRWdG8ycjhVQlRoNEREdnFHekVmMzlWUE9NOHl6WFJOU3dtL0hsWDdlZ1JvYnhJWS91UlVvZm04am14YjF3ZktpRnNWUDhsVGduSlM0TkQzYlZkV0Voc25Ud3U0eUZEUGFGQmJrVFBIR3FBVVBteU92WjVsRkxvQTRYSHZYQlRWdUVDaHRDMnVkT1hvbEMvazRYWDZQMk1vUTV6K2cvVDZWZEJ4TWQ1TlNIaUpTVnRubHd5YVAwd1lPaWtMUlJCM3dFRHRZZ2tGYU0wbHlvaU9QZ2FrSWV0a0tQWmMyQXd2cUlxZFY5ZjNHSUNOeG9vd3lvbVlDWXZUSXErNWdJbXdvbm9JLzhRelhsMU0wa1Q3dmxHZjlhL0RQU2FhajJKSy9lb2lEZFpOeE1WZklKNHlGY1JiN3dnMUZ2a1VVaEpISHNQVWdFUEg0RExZWnhJaUlUSWRCczB0SEQyelFvT2crekRrQTl0OGF6WFlQS24wOG91TVQ1b0QzVG54b2V1NUxKRWJtbTVYYzJ5NUM4UXp0S1hVOUVxck1CNitRWUNJZ0lrMjF2L1FLdkdVeXovallpYlVXTFMxMmJlNWpVdzFEdFZXSUZOQmNBbFNOUjZtNlpzOEp3Z0pzSnJHUEFEL0h5M2tTSEFJRnRhR21ldDU3bC9QbnRqa2NEbis4SzFDWjRhWlBmU09lQk4vMitVSzRCM29MbzlNcXlqRTA0WmJ2aXJoNE5zdW4rOURsUklNS3RxSUJ2VW9lQUFlZi9TNUNuQnlvWld2czZueGVGUi9adGFWbFFleFhDM2pRNHNrK3krREsxZVFpbVBDbmRycmJpZmluVGxOTkRBc3lCbVRBRHNpT3lia2pycU5ZbTJ4emFMZnNXVWJVZzFkUytqaStIdnhaQnVqN3c5ZHVsMTlxU2JLQmRjakVJMUFzbk1vYndxQ05lM21DcktROS9UTkdzd3A5Z0xaYkNlend5emtLSFN0VnRLdENTNzc1b04yZU5SQVhnWkJaYVdaNkVaUWw0c1NGc3dWbUJBd0Q4OWZQZkxVUE1RY2kxbVFRN0dZQ21XelVKSTVYQmpJUHB6TzJpUCtXWVRGUTFjb3g0NG5PSUpyMmR1WTBXVHp6Z1RBQnFZOG9EZm5GaU1BbC8zNXg3a05SdmF3SXNGYU85L0J6cDFYdmJZc2Voc2hXVkFpcFhERFV1RUFvMGdteUNzSW9aZFFWZ3BaWEwwL3EyekpyUmFVNGtpQVNWMHN6TzNXcEFwQzFhZnBoLzNCY29KNGJhbE1Dd3pKaWR2ZjltZnhZYmZJTWFmQitSNmtLVEdIeTFTVFNZaTFmRVAvUDdYQ0x3VEdtVEdBckNhUVg1eHQ1R3MxdnRjcy9QcUlFeEdwVGdCblVLMDRLaVBvUTRhWXdBaU9kMlJjSlZ4a1FLeXNYcjBrY0g5TWxzR013L1NnWmVVWG9tcnNhZ3RhR2xkcjdWOEkvbkVwUWV1M2xYL09OWnlWdDEzaFRkR2dBdWpHNWx6NVhVb05NcHZqM2hXdkJkbEtmY1h2aDZHWXF3dTJoeEdFV1dSdGc2b1h2SnlRSWtWR2FFaHd3dTFjM3JuOEE0eW42emRVTDhHVmdtU0JBVE5DZWhjMGRRTXlKcktrT0tYQmhaMWprcHkrN2g2UW4zbEpTbWlzSjJrRmh1Q1NIbFhQVlBwalB6ZWg0TGRrTlBjNktZdHNGeTRhMFlIUWtXVXR6b0Y1V1NiSndsTnlMdGJJM0RVd1NLM2xSNlRaSXg2NlBaS2ZlRi9QdWxXS0RVUVErMEJhYWNqV1dienQ4OFJCanRJRWhGY1lzKzgvZWdxTjFrTFE4TTBmakdQZ3dqQzVEWFA4RWRiQ3FFYXRjb3ViZ0s3R21GVFowUDdZWHU2RS9MZCs5Um1ZaDJCMkpZWG5EV2g4WEtTdTdrWlJhdjJPTFJ1TnJHM0E3MEFwWGJsVXprNDZSd0R3em1LSnlZUDdVU2tQNjFsZ25rdmRKQ3JqcVdXWnNwRjRJVzBFQURmaUJKL0dJSkhVNWprY1ZrUjIvcTh1ekVLSlRHRHNyYklIcjBoVG1RZzFveHR2QmlieHhBMGxQMUJrWXYxc0xFZTFhZWFQeFhEQ2lRbXozaGIxaUwwTVloNE1WNmRBcHJ1TnFXTFdUY241ZGp4d3A1bU1nQldhMDVsWWFERWd0alRlU0F1TmJ6dXlNZGFlcW1SVUFKVmtDYVI3MWNxU25FYnc0aWNVaTFDS3c3VWN4K2x2Vkp2aHlZRXJzZW1OV1crS1RWMy9GWkNHV1FsdXcwaVZUM0liU1Y3aExvaDNqcXVnTEtCR1NQWkhIS0tyMWRCTUZhSkVpUk9pVmVZTGxTVjNVOTFxMGlVQ3hIYmNTVFZ4VG5GU3krWlhtTXV2OFQvZksrdnV5cmo1R2cyQWU1NVVySG9tY1BVQzdNNmgydmwxeWx1bHhYQWo1WCtlVW4yN3BtTDRJWERCVjNtcmJGd1Z4enRwZmdQNHpobkNhMGxFUzd0ck55VmJjcUlrb0crUEtwdDdVcnk5VllqQ2NtTjFiYVFnaFF4L1RrSXA2a3pDZzBsVlplMFppUlpvWW95UlFtWFdZbjBrbHloOU1QOHMzOW5OaGxsdmZqMnJTMkc5UDJVSjhkM0V1TldmWHliQlVGVnBIa3BtQ0diOFVYRjc4RndBS1BFM2dHRm8wbFJTYTkrTjF1cXJDZkRpOFd5SktxSFhXd09CdWRDRGdmRVhTSStBeFArZTZ6aEVhVzhaeXdQTHdHR3dndXdpN29QSWg4clBlcHlQb0twTUdGN1JmUE1vSE9ib1FpcnE1RjNmNUFsTWllc0lhZ2Qra3RKMWpmM2xuMDdlOWtRdTFZK0tOOFJudXBiRUs3NndiWU9BUDVNWlhOTklZMWFRdlFuNDhHUEtVckFtaHFXNnExWVNZWGNrMDN5c2VReTdxR05VSHByTjlyZ1l4azhLYnZOcDJNV0wrM0dVaWJCcVYvL2NWZFdGaEtMQm5PUDBQZ1RRTFBIbHJISUF4bStuY016TTFKRGF1V0w4RWJrNFVZcjZGK1gweE9oYjRncVBNQ1FyV2JTNG5TeVFWZU9wbkQzSXZlUHc3eWJFRXRNVTJTUm9waENOaXI3ZUIwS2ZJNEZrMU4yd082OXBrNnVJQXg5Q2pFcXZ2WVVOa3ROeFRZU3gzWVpHdWM1elBhZVVGa1o1YkVNWk1TOXlSOWMrUmtlNTgvdk9PMG1rMHJYa3JlNFpTaVRwNWhwejNVU0JFUzRPUDFHQll2eitndWhTaUJSaXNrRUo4MGNzSUM1UkU2cXgyRThVQnc5SEJqOWRSV2FlN0JzTHVqdllzK1pqUlVuMU53bVkrV3k5VVhBSUVLN2NXb01GNDBJcDdKMFlkaGRPU29sakNLVlJLam10ZEhtaWQ5SERWV2l0eHpVakxJUU5UM1lIRWpoQ3o4Y3FtdEUweXFtT09MakZaUjlGYmpFTWpzSmlFZFFKUkEwOUs3UnMzWjBpNkZOTnlrUmpYeVRzYXgxVE1yZEwvaURjUFRoNlBtNnJiVDlJTVBRbThyeE50Q1FMc3A5QkEwQ1dkR0xzQjFwQkFibjdqblJzZEoyYmNjblI4V3Yzc002RHZuSkR4Z1JUUDhKV3JFR0xJNkJucklsbnZoL0MyT2EzOTJDemEzaU1SVXJ6K2FIOHd3czRHUlpxQzlMbFZYWWJaUW40Ly9WODdjckF5YXNsMWoxZHAxVUYvSkVQa0tTQ2MrWlRJQzM0VWdZdm80bVowaGl0RCtaUkx2SUdqd01QM2JBMmZNZzN3d0h0QTR1SW81cXliYXVtVURCTUlWV0N3V1FtVlNZa3RIMnM4eTl5dWdRMW5lWDVLdDRNbGZvODNvZmhxcG9Nb3AyeEdTdi9XNHZtRTF1TVA5T1ZLMlVJRjJCS3pSZllBUnNBanoxa09lUVUvT1B6bC9hS2cwdWVoR0Z4WTM1VHpMOEdNVGgxMXZWODBpVG1MOG1UbGZHYmwyMGIzZEUzTkJMYzRYbS85dnJpUnlQMW4yTC8wM0hvb1plcXlERjRPYmw0blZLU1FqYWdhSkwyWkpLdDd1UEFLV2tyM3kxRnZFT1RnaVN4bit2T0k2NkVVS2FGSmhFN25acmV1WVlId1RRaityU3VCTFppRnpxWkR4Slc4WnN3K0hIcmVLbldlVjlKeU9KNVJENnpBUlF3RHpNRjZlTmdDOUtFRjMrSzIzWHlZU1NaTEI1S3FXRGJKYmM5cWt1SnQyTDhHZllkOFo5dmdPVzBZbzd6TGIvV0dJZ3hFOWFQMHpaU0tyU0lpTDlYZG85NllPVjExV1BMVGJKWGJ2NzZocEJyZ3BxZ1pReTJqK0ZDc2IrRUFONW9BNThtb042d0k3aFFYUURvRWZrNVgwbS9kNE1TOXc4NkpoVnFnbDY0Rkt2eWgzSkk5SW0wY2QyK0hXbFNQL1czR25xRzJ3eS9IL1ZBYzdpVFpSbXlLc0pNd3d5aXJIY1UyNEJ1eVF0b0xzV0VIdmIzYURuNDFXQUJON2l2Y0NDTUFqdFdMbWFkSTlyOGlpcCs5NHpBMm96b0JBeFBFSUZhUnc3b0tqbXkrbUYzUTRJZlN6VTZaODZVWFlOd0lJbUJrcVI1aG0vcW9hWTlVT2h2WDNEV2YxM0VsWUtCNWxFemlkRXUySjdDVERiaUliSkE5eVNZbjlkaXg0U0diaWFWNk16SFlKa0RCcjNNN25NVk5PTXlZWFlWQVQ5ZHZxdlpLN2hjTU1UdXBsbitQS21GdGhNR1EzRmZURnA3OWRyaEkxcUJDQ2F1WnM0RG1MVy9nTjNnNjlTbytYTDN2cjhuSkIxVk1GNXp5SmRCb1JHZkdmS1FDUGV6SVE3aHJ1d2JwOC9NV09leSt2bWVzbTVRdFJWNm1YMjBPbEtiYkp6cFlMb3kzRHhBR3Nyb3NkK1dlQ2VobE5ockFvZEFSQ2JIeUlieXpFTzdmdlhpMm9qdTVNb3FPTGFiU2VkOEN4MEFMNG1aUnRPR0ZkcVBINTRlL2NtUEVCMHFpSUxJZG90enN2OGFKL1k0RTM1ZjJ6Y1hUb1hPbnNSWTEvVm11dWNPcnB5UnpNWkJLMWFVdWlIVU15cEVBVXRzdWVaZXJ0WlhNaE5KOE5FNllkZXFESDV5WE9CMittbytVUGx3TFRBbWlwMWRQS0pRTGdWRzZnbm13N2ErdTlaeHdYWERYZVlIYzk4NUhBVkVmb0RqNHJza1ZxUGova1hqUDlISHYvYkNkZW42M05sWjVram91V0FzN2VrNE9mQkUvN0hZdzFTaFYwYVFyOFM1b2JwUVA0SWk4UDltclA4MXBpOUVSSTF0RTZwV09LY3NhRzZEM3BWcC91b0ZiREV1Ym9GR05CUm9FWXp1QzloWm5hR292dXYwVHRIR0xFRVNWdHQ5NVNnbFVrTHNCK21uVmZRMG5IZkxxRnZ6UWM5a05iZzl6Ym8rSlIwU0lGSkk1bndRSUh5NEdQalhnQVJZR0p5eDJRTm81Sm9GWWpZcHRHZDRnMy9SQ3RQSXZiTUZINVJFSlQwYkhLMUZYOGpxVjIwTjljMW8zRkxoWjJuZjNFSEc5YUptSzdSOWNjNzJhbVlyMnZnYkp5SitwTUNQWmRhQkJLbDNRWkVwQWtjQTZXNElhV1dSNWVPTGoyeXUxdTc4cGNjcnNnOXRwZEh2aURHUHZTS09tM2lkZmdMQVRZOHNyTXZmdWx1cmpzd05KK1lOV3prVjhFb3NLMG1BMzU1aVJmaUUrZmplK1hqVUYzZDk0UlNnV1pqT3c0TjJJc3hjeDNQeWozL0JaR2VNL1NtQkJXMmFVTExlTEgrelFjaTRMREsvRkloTWltWWp5RWJYNHhnTjg2Y3FqZnBqZEl6WG9oZWl5M094cmpkS1RMSTRDc0pNanNGclRCcTdHWnNta3VDQXBLRG1OVDFzK0Z3TUdhMDdBM0MvRm4ybkRUNjY1Zm9ZT3JRMEFKWVJiVC9ZVFNMdHJrMVBXWDZjdHdHWFAxWmROaDVObFNIcGFUQmlVNTBVck1vVHB0NmJReDR3U3hSemI2SElQUFZIR3RGMjJwSDEvMTJhSFdWeFhLOW9hbVBoamVFek5NdHNQRk1qMnBxSmEwYWV3d3ZyRXpTdTQ2eDhPNFNrZ3ZYUW5YUnVndWxNVzc3aGdZQzJjejBrdUgwMTJaUy9LOTZFeTlYUzV6QXlGV0V1YkRjK29aMmhnb1lFTDZlWkNPVzZJRFFsR05Wak5KeTFGQkFPV3RuNksrbTNUVDRWZ0dwdTJkL2FQTmY4RjFmcUhDNGlWVTc5K2lhYkw3T2NKK0ptWlp2a1YrSVFQWi9ndFRHRW1IRUxuOVR1MW5NVkhKR0tHOEN3ekkrQUZFbDE3bnhQTmVmTWFsMUs5WkkwdllKRVVmcDYzbXEyMGVIcXVldmd4Qm9mcG9hc01NMVY4Z0FKMzRPaWFpRU9seGFUV1VuTVM1TFNma1ZrY2w0UnRrOEhTSlc4ZWk4dE1ENlUwOFBLNnlLRWpIWFhab3JmdWh3cDc5SndpWlhkZFMwc3R0VlNrZzRQOVlidE9VVm9qT04yNGdRN1JoYVNMZzZ2QVNaR010QmtEdkhlZ2FXRTRRZTJhNE9IOXZNamVlN3hxU293N3hhZmNTQUV6SnJkNVFYRnBPUzYxV25UUlVmUHhXVHlRYmpXMzZRQkNDUnBsSnhxci9LeUg3NjNEalYxTXQxN2JXTWpjWWZicVFFV0VwZzNVc3lzMWJQL1cyYUs3OWdVNG5VN0ZaYjMvV1p1SHlXV2tqWXhYYzFUY2crOWxUZ08wMGpWcHQxcXJSVjRTamlBTmxjeDF3Sks0RTdLTVpLd1ZzbXpFRWtmY3pXdHhxOTk0aXE2a3dMNUFXdDVKZ0NRK01jdEJadllPajdKMGJvaW1WUVJNS0tYLzRHR1ZFUVUwemJCQ1FyQkFSb05wYmVMVmZtRnR4RThmaHc5eUZVdUh0QVJEdVVodmViV2RXM3gzazFwdlQzdXpnd1BsY1JoYjlrdkNua3UrclJhOFlxaGUxRUZlZzVGVG1ubTZNV1FFcUpYbjZ0ME9jWlZNZ3VrWFMvelp0dGVVOG91dTEyYWhyMFMrTDNRMjVaVzJNeklVZWZZZGZxY3dqTHJxd1kvbk8xdWdHemFFeG5ENW5tNXZqREd1R3FqWWNobW9XSElzWXpFS2JhWEZlZGl2bUR2OGU4WGxicWRoM3o1eWdKRDlYL29qeTh1NHFYMVgwdHNRdGNSRVF6VW55Q2NXOWhLUWVkR1ZkUTZ1UkFiekRNL0g3MUowRzd2T2RucmMvMTdOOVAxNnJXQXBvTDY4OUhSOEh5Tm5kZ3FnckE3UTNhaDNHcGpBbkZkQm4vWjFLRUZoSzRTVXRjSW8vQXdoRmlIQ1ZuNkFxNFUwZFlhTkRMUDZ4ZUdjVzcxQzdyWXJIdERYc3dDOGxwNW15RG53VGdCRW8ybTUzMXlSOU1pWkpDYmI1M1lVK0gzL1lHbG1WOVlpWmJ5SXJWOC9JbEppRGk1bjFWaVFURFJxaWFTdFF4QllkQk9sQUxGNEk1V1N5UWwvZ1lHT2FZYW16empiWU10N09OaW03UStpNWhHS3VRNFpoOFVndW9yR3pMWnNnRzI0TU1EQXpJYVhHVjJ3MG9QQnJmWWwyT29NR3ROQm04NG9GVW0xam9RR3FvcXNWOG5ieDBabGsyUzU0OHk1ODJrNThCVnd3T3ZvMEJ3NGNKSXJ3UlpTTFFjS2hWM1RoV1dLS04ySUhoMjgwbS9hYVJ2WEdWWHNrV2dEcmY0a3hJaDB0ZktnWkJZUmpYS0tZY2xydGRWd1pENHVNR2tCWHVXR241c29VVG9xa2ZvQ2hVbnlUdXcwemNKR1orUENPaW9yMGp6c2x4MktvaG9UM2F5RnVtdmswazdtcXF3YldNUEFWVlFQU0dYNk4vdzZEYSsvVE50RUg1SkpueXFnUUdTLzI1QzdtYTJXbXB1aHNQRDh5YUZNTWZMNnB1N3JPVERjYjFNeTdVcUk5bHNnRndEU0owTHRjR0ZnK3ZDRUNjRG5mOHRydTRzYk8zTEFUTFcwZ2xLOWFVWVV6U2Z6Qjl1VWxDNERMMENjQWV6akpnb3NQaGd6VDZtamJQaUZlaHgzMzJzcGVJd3NDVjN0UGdMaVlkMW54WklWbGthalNvWlZZVXpXVWJzRUxGYU5jWWxMZ1ZJTnZkMzcxVjd2clRQSzNremdWcHltT1Rqa2lqQ3ZaMS9CVDYzeTBJNVZ6S29aSS9sK3gxaDVUTG4rT3RobXU2aE9aVldIaEErRkE3S0wvYmRveWE1UlkrK0I1ZWwxU0NkNjZoQ0duYWpXbnhJbHZHRThraE14Y241ck5DWnZybktqRVNPTTdQYzU3bzExVTlRZFl4ZFJ6eFFSczhPZTRrb1dYZUk3TU9tQ0l3S2FxY0cyWVY4YVEyZVZsMXFMUzIrQmdkRzBPU3lnNG1SR2ZlaGxFUEZxRHc4OEM1YUhzVkpsbTRreFJ1WEJOTmRTNnBkeG1wOURWYzlTNkxiSVFqVTFxWGh5bCsxeHR5Y01Wd3daQzkwdS9ZYVg3TWowc2lYczBtZlZ2TmJBdGdHbWVwb3VYRGYzRC96MldPbVRiR09mbzU0cHhSYU9tb3pDNWhsSDRaeEJFVHVRTHpiSnpYelduRkdnV1Q5d2Z6UmhNRzRHNDBSaVZvTmQyL1liYlVRYXR1eHIwV0ZUUzNuWmFOamlWaW5rUTgxUnhOeURoUzdBR0lOOWVmSm5aQWMwRTNZS3pNMUF0a3FzeUJDSlhZZGRJNkJoKzUzRkpKbUNNcVlEdjBwK2NTUGtuU1ZzekEvRzljVFRNd0RrWXlTUEZXOWNNY1NXL09Vc0RMSUNxUGprd285b1E4ZFBsK3ZJc2hlQUdmQU0wb2duay9HT3JxRXBxZkwvZGhvVnNxUGV6TkZGbkRXUlArNFF4bDZaUXFRSkJBa3BWRmtlUHh1SE9PV3hXSDYySFVJMlZESUR0YzNydDJUU1JDNGVZb3I2TnFhYjVhbUZSYnl5ZCtIQzhsOGZVd2VJT3pqYmpIRFJUYW9DR2ZBVzlHMm51Z3QwVTMvbDJpbURCdW42dDRhZCtTdUk4bmFiaUpBeENhbFA4QnMwdWgzTnFtSFpPY2VnbDQxTFpCQytkTTEzRUFRWTNKMW9CRjBSZTBZc3haVUlBMldOV3dMTnZIQnpOLzEwdjB1eVhyRzUyVjBvZ2dCYVRDQTNsWnhTZHJEM0xaL3c1L25zMTB6NmMycTRRb0FvWkZzb0Z5SGtFaFJHTGd0T1YyRFUyZHRSRTNFb0tEMWo4WDRxUkVyWWRjaFU0aXhJd0NsS2QyZGY5cTRob1BaNEFaRG9RM3VMT2h6NkJFTG5yZ0RLQ2JFbVVUbVZMNll3aXBYMmlEN2ttTEFLeW14b0tabUZNdm81a1hpdnR0TDVzOE4rYTRoWWZXMUJiUUVRc2FkT0FEYzYrZTB0Qkh3L09jM2w1aEJBcEo3UDMvVnlpSjlmdHpqd0J0OXcyTTRvMTN6UGdubVI4eDJkNHUwdHMxelVHREF5Z3h6MFUvVzA0MG04dE9Ldktpdnk0UkwvdHZ2ODRXSlpJUVZEWlhBemJ0ZlJOMzNpdnk5eGRYakRmT1RYQUo1NC9XMGlCL3RNbzNZakFLYktKWHlIMTNiK3BIdWE1ZzZpMXlyZVJHZjgwMytXMVZYS1hQaWNHTytwLy93V1BQbTZHc0NLWW45d293bFJKK0FzVXkwWjdRdmxSaVJWcnh1cTNNa1hyYi92NDA5NDdpKyszNjRPY0loTkdEeU5XRk9pSGhlUGdVZ09yQVdyTzdCWmc3SUc3TnRhVU5TUWFkV003bGI3R05Ic1JxTTB2MHBRZG1PdHc3OTBydmNqaGRhWWVua2M4V21CVXFYSHl0UFRmTTR0QWhCL3VpMndBMXVVVHU1YW5EWVJYTUI2bHFEVWdlaWR4U2FxZC96UnBqYVhDMER6UU1RTWtwYkZrU29XMmRhR1lzSGdHd2tiSkRCUGI5UWV1cFhzVjY4OGNadkR1eG83SmtwQXZMa0dqYVhJNW5XV2VZZjBSS0M2WkVDSVAxZHpsOVo2WHl2WWxiVGJPK2h0dnQ3WWtDNzJTaC8zcVZIQnlzQmZzYVdEeVVzN2lFTHpwWmlEVmdKRUgzaHhVRVJQeDA2U2FkVWh1aHFXTE5Ec2Qxamp0Wkx2NXVTOUhKTnVCWEhSRDJrRU5MclJYWWVoMGVSY1VHVmsxQVFSd2FVSXRISzRBY2tVUkM5dDVmcW9sT1lHV3RvZmx3ckVJcnhRdkdsNnEveVZKY0N5Z3hCb1BTYnFMVnl1bjJzV1Y5cUFua1h5cnhJRGtxQmpxSFUvUnNTOWl5cmJ4M3N3eG9GYk9leHl4a1pWMnJINWtsTGJYTU56R3ptMlFuVkxCZFRqaWZRMUlJWkRrb3hESEJkbE1OYUdvTkthbysvWlVBeVZOMkgrcVc5di9WS3hCa3VXeWJObTBJSnBnTUEyVVcrY0cxYmNpQ2FVK0VYVjNmMWM1Vko5RXZmODllajdsVElCS2lKbDFJWDJoWHNuWndibDlOYjAwekE2RndtTFBWbjVmZEZLMEg4RG5JVXFCczJjTW53ZmQ2b3o2TU9mWklER3JLY0ZqUWhHSDl1c3hiTkdVVUNYb24zdXk2YVZHZU1BTFBhSUt0dy9kcmpTUmlIUlNxZXFUZkNGUVhwQnlNSlVxbFBCWlJiaFlzdEI1am1IbHBTN05ab0F3R2VoNDZPOE1EeTBQYzNyRW01L21ta1VJZXdtTjNwbGRqS2FqL3pKeXg0NW5oa2FrUmFZZmpSYjNsQm5vUDk1dW1TdldLVFhrazl2RHp0TkRpZnFKYnNET0VqajV6MHl2UWZMK3N4NngzV2JNYk1IaWd4WjFDL0FpaEhvRkN6Z00vUzZRQUpkMHNFV3UydUxkWmM1Z1NTU1hYdEhrNjlFYTc3d0pRbldMSlIwUUI3dS94YUlXaGdFRWp3WTMvak5rZ3A4MmU0U2U2NERaeU1yb3dzWFpGOVJtVGFlWFFTZFBrQ1Rmd2dsU3UzWHF1TW9UOGoxdkdYMUhtYUVzR2sxNURIUkd3VE9aaVRBZVBIdDRUTUovWk9DaXNVRUpaVnBteXk3S3E5RHdSWmtJcExBelhhbDc4ckFWWjlDQzdLd1ZDVjNnS3NvbGVaTmJ3RTVjMk00YzVVV2lpV21jNWE1YWNqOFYwWnViTHovSm9ldmZaSXE2cVJRNmtsSTFPN0NRd3lrRGZEdjRYZ3VVald5WjhtNGdFeDVhY1hkVzZFd0hxQ0xkazlIaHlwb3Y0ZHNQdjhuZlJWSy92cDJZYTZQOWNYY3VqZWh2MjBramZnQ1poQnpyd0dXck0ycEYyOFRHaEdHMXRZanN4bzIrdGl3aHNXeWg2ckpMU3ZCeko2ZEpObUZvd0hhS3YxbFZtNkxZdzZNVGxOSnhmazc5WDRXTVY0ZmkyeXVKSEVoVzRQejArL3dEODIySGNHeUE1R20xVTRZby9CYU5iNy9waThjMmV0VTNXTTR0b1VpQWNIU2N4T0c4aXhYdnBtWi9Ka1BLWGxiTEs2YUtrcld1ZitwckxsYXBDWHF2aDgxczMxWmphZU1xVmNKdG53Mi9rVi85NkZVRnlCbHg2YVFkNUE0cXFlQUdZdFlvUkxJVDE4RFRUaEdTa09uZVVpODNaeVBZbFB3d2c4SG90dXFQY2lQWlJuYkZoOWtOTlZ3c1V4anhCMzM1VWI2amZXcHF1czZXOXFMMDQyTGswL3B3WEtHL0djc0hZdWk5QWdCUzdKSnIrSzVlRUlvK2RBNllHWFlNdDM5YkFIclVJKy9ibVNwTitzS1dVREFoR3MwdkJjU0N4NEZzcWR0VTJ4djdjZkQrUFpsR3JZKzNNeTF0Q1lvTDU4ei9BYzRCREptWFo3U0l4SGRIZytGNnNNZ0ZoV095WEVockd2R3NDT0lNUFpnaURHMU1CZzFVOVVsSUpKNFVoWkZBaUJibXN0YmZhRlpQbzVpN1B2VFNaUXZFN3Y5Mnl6L2kwWFRycG54VVZyNVNHam5UOW1leWd0OVFKWDllTUhOempiR3J6U3dTczdZUFZyakZNSHhpTTNLZDJoVzZlRTlUcGNNRTAxTTdKT21HT05HR2xMRHkxTW9vUmFselYyKzU4Q25oSktjR3h3Kzk3SFpxZHduU3gxcHNYK2lFVVRVd2wwY1hiRkdWUko3YXlJWmZ5TXl6RFpuZlJqT2MxM0lXZTdTYXFFdWlNenAvaUR0d25PaTFoL25mY0VvbXAxMFc4N2tMenNaS0JyNldsQWwvWjV6Ui9Wc3ZSZkhVaFJjYmg3bDR1NUdCWnBCM2drNzl2WjI0b3dlSFNzeExhWEl1N25JRldKMWJtZGhuTnNRNUFWVzZncDY2Wm5PWjVOcHN6NkR1MlM5Yms4K2lSMDRtYzIyVjNPbiswbThNUVQrSmNkaUhTYlBZZldOTEM2d1JHdFF5RVYxczVHYlBBc2lHNDQzTDRROE93LzhQaHJnZWF0UVRJOTNvcGoyZk5uaGlkdkxMTlVWOEJWWm4wQnNEbWZTUHhuTncrMUx6bkNpZnJvTEN1ajR0aWN5amg1WmxXckNzdGh2NVF4ZDdBN1h4MHgxWUpWVUgwTDNZZkRQVU5nTVkrTEsrWTkvUEl2anZObC84b0pxRVdWS3VvRU1sUmhaK1o0Y1UvUXlGdklUTFJSdVZQZXlabHV5K3h3empSMnJsenhZWFdncVhkZ3BKMU9LbjRselR5RkZxZHl1T0FnOFJwbzFldlVSNk9iY0kvdVQrNzNoNmVLK3MwV3BHZitSUUJCWklFNWRvbmFiNVhYdGhDMHNISENNS0MrdFM1Q3lNcnJhVUZHQTFPYTBIUWFXY2pEeGN2NHQvbFFDOFhTU3dYQVZhWFVuZ2lHTXlzNDVsTEUvMU5kK3hhQjN5cXdWZmFpcHd5TnBOdEN3bmZtd3ExWTZ1a3BhcmZ2ZzBaMUt1S0JWNmE1V2tGWlRNVDdjekFyc0xOdFdFQkQrNXJHVmU2RWxiM05CaEZaTlRrWjlEc1BuY3kvdnhBWmsxOXlrYW40SlMvZE1jNU1WRkZpZW9mUDk2cTZkbStzeTFUclRtUFdxSm5ZbXdVRDNzZzU3czIrbnkxNEEzbzlzSGgzbnplczFOcFVLempiL1QrcUVya3NtMWg1ckJpK1J1TTJuaUZvZHh1M0tRWGZoZXRORUhqQWE5SFk1WTVjQ0ZDaVBJZ3dacmdnbWpKSlFvM1J3K2RId1ZiVjdSUWR6WjNpN1c4UEl2YVErZFVJUGxhU1NJUnBkNG9jdTM0VWgzdDNmR3NKTUI0cEdWTTFQNnlGOVJuYzJEQ3hsaWx2SCsrQTdyR1hlUzdoaXZEWWVjbFNWWFh3Yk0rSnRuSnBCRXRocm9BZHl1SDdWNVRObU1hUERMYmoxZFdtdnZGd2hvNG5scVhUa0dNTnRrbFJINjlleVMvUTVtZmhqc1RVRUFNcEFFMW5CVUJtMXRXbGZrVUFkWFFMQlZ5a3pqNWQyM2N6aUxFbG85TE8vYWdXSkg0RWFtaFZXTC9CRjBGQVRha0lOUWt4UnR5M1ZGL3VtbDJXQTBVT0VHMjM4MUhYeHZFNXViYTQ5eTlKdUgyMENqRkxjc2YzWXoxN1o4Tm9GNStLeVZ0R2lLK3owcXppek5uUjJvZkd2M0czMTNYSUFRNHUyY1JKSVhaY2tRcmVqb291Nlc0T2Fnb3paNlhyQXkyTllJOEZ6bGpCaFBwS3NwUWRMQTU2d3dSbkxkWDdYc3hyZjVTdXlwTkVNVWQyQVA3NnJvT1R0bGRJOXkwa3RtMWp5Y05sak8xNFRNbVZ1S3ZYZ3ZUTXdNaVJ0WDNFU3YxazJqQVpsbHREMUN6UkU1Qmp6b0QvQ2UrSW1Xc0ZRVXU1TUV5VHNBU3g3dTk5akZUYlVSc0FvZndRYnIrSk9EMFU3MHF1dzhpMWpUVjVIZlQ5cGNqbFQvSnV4SFJ2NDRJaGZlY3dKeHhVOGh2bUFaSFhTaE50eUkyZGVwdllId0ZCNG9sRkdYU1VyTmswdExrV1NaaGVrZzI2TElyZkF5ZVRnaTV1L2VYMEFBM3dmaU5qUmZtMkRyQktMZkRHUHZudFRtUkE4VUhsVnJiUGV1NGNpcmgxV2NGTGo3M3MrNUF3Wi81VUxKMUdQc25EcFhkTkZGSHhNdWdkTDNpWHdUYlpadFd5em5GY1Q4U2pLL3dUZHU1RVk0OEgrVHltL0RtUHRkdmVzc2d3bks5Rmx0NFZ2YWtaQk1ES3FSSmswcjFzcGV0KzIzdER5RjhhcmtCTTBoamVRL2dwUWtBcGhEdTQ4eVZTZUhtZFRtQk81L25kRFQzcFl0RGxCKzJFNDIvTlNTK0lmN2FsY3dGL29PSmhDd3VGcnRUUE1FUEdqWitwOEN0ZlNRc1pkbitWWCtiM0FxWGhCMkhiVC9PTmtzaHlDRE83dEdDcDFmRHdIMHFvc1hNYmNuN0xzOCtId0lRaWwyWUVMOHF3cDFwSU5lRzZ2ZGpDbmNMb3hBUFAyVVNuZVROVmVDMFBsRm0vTXJsbDI3MTZpU0hoWkthb3k3OUlPQmFab0k2Z0FnblhZZlhQamZMN2czdmkxS0Q4WTVqMWdCZUQ3aUMxZkF6NnlLK0hiQm9RZ2l3Y0lOVUFFeEV6VWYxT04xK1BzRGpobUJuV0h0YlM2elJtd016QW43TVd6OGdzcUtoMUcxNEI4K001SWp1Um1ieitNcjFFNC9wZDBBdFJGZisvV2h3cDBZc1g1UU43QWcxQnRpdkY5NDRrZGkrdVEwWmNKLzBsdlhwZ0ZZRldmemxUT29JelNKckx3aGRWQ3VLSWcvSUpZaktMb1NMSGxSbDhjT1hUK25TNjgrTXBXb2lQOVNrRHMzTnJlSkdwQ0dlZE13ZDRXQS9IMXE5aDE0MExpR1oxM3NrTU9hZDV1endnK1FiSlhoKytRdHN1VUhoc1RqRDhjckJBR2huWGk2ZzhrZUI1cGQrbVlxcHRKYmowOTlkbjRLd2d6bDduUmtjR2Z4WHhkTFUvQXJmVm5TUFRpUmFsMGNDQTdCTFRTeHZlQ2txUmZHcFYxR01sb3N3N05yVmp5SEpLOEl1b21VeXpGbEpFY3pQOXAzTGFCRmZtV0J3WitMRUVZR2krYXlHVUJ0dFNoWVZFaHVidHh4QXJNNjlDUTlLNDZzMloxbHBlanVYbkZ6RFZjQ3pwUWhqcjY2T000TWVVbWM0cW5FTnQxYnczUldMS3Y5RkJKNGZVL3Y5UE16TExZT1drb2JmY1BXM0VoNG4wWjRGZ2JWT1hmMkQ2QkV3WVNGVmJua3puVkMyMFBRMkxZcTdBNFJyWVo1VnBuTGliV0VLM1JEUjZUcWRSR2tGWU5tcXJHYkJNQ3d3bjBBbnEyRVljSy9MdzNIaHJ1eEZZUVE4R2Z4MkJQSkpDTWUvM3V1azBOY0UxZzR3SU01NEpodkszTE9QeG5aY09BZnFZQm1WYm13SGJ6Sm82Rkl0aTBUbVV5ZTljazRHbythZ0x4SFU5bittTzZ1bUdkeE9aN1BOT1psS0syWE1SRFhGbXBaVndXOHk4Z3UrckErUUh0Rnk4cmFQZEZGV0RVTHVocXJFZ0VodUhZMW1PRTJ3bGcwS2JmRGxaOHV5ZXBsSDNQVjZJYncvU3FLTFlyYjN5U0R0cEFTREVja3dPRDZWK2FPdERsZzZPU3JTVWwvaUJiTElIYlhMOWpDbG9ZQ0pEWGZjdXhvNkNhTTU5bVVJVGt0ZGltNmc3d1Y0cndxWmkyUk1ua0UvMDBTeDV6UkRyWE5ZckExY3hpWnVvZzBSZnZ4bjByWGJ1NWZqb2dUd0MvV3FZTzNiQlJjNzRia0xCVEJJTFgrcHRGTWlBVzVod3gxY0JOTnkrTG1Jdmt2V0pmNEk0c3hWZUtNUjVkbjdyM2tGY25NV2RDd2xqcHY1eDZVc1huc1Z4NHhEc3ExUUZ1YmZndXMvTEx2SkxXV0lrRFlQSUZjTG9IN1ZVL3daYUtLNURGYlA5ejdDV0UwZXNSTW42dEg4OWlsQ3hlYjdXTWNsTTZ1Rlh3S1ZsWnB4V3pYREZDQm9IVUtmOTQxelc3S2ZjUnVJUUhhcmdVTWtLNU15elB1aWZMNTZQSXgwTFBtZGFkVFUyV0ZsMzRxZm1sNHN1UFhIVDczUkNJM1VXQmxlWWd0TEwySi9MS2VIR3JVR2dXL2ZvUDIvMCsvWEMvTzM3d0pwbXVLWWlyalhpUEpPRnRRU25CWE5yUllIR0VxOHdsQlNacllQOU1zYnFVZTNlbkhabmVkYjdEYSs5UzZSUmFUZmE2WWRRYURFZTBreGQ2KzJtLzIzSkc1TGEra3gvTXpRdVBoUE1xYXRaejBtVm96djBIU2dBbHV2OVJHN3N4OWdjTVlBZ0U2TDZ1YzZ1MlRPak02WkFueUlkTjc5VWtJaHowVkpuakNUQzFYdW5mb3ZwUjg1Y01zU2RLMUp5ZWtxTmdDcHo2YnpJbUhvWkdLRGgrWG5yVnBldVpQVysvS3gxY1RZYi9MLzNRTnJvaGNMRmlUMUl5K2NZK0xuSEtYZ0I3cDdCM21qT3JGRVI0Q1JhUkpFRDlkYlREUWswdGRpaGljTno5US8xNjB6Z2ZGN0pTNHdxaUJ2R3NjWDVGL3VkTXNPVUhsSmY4VTg4VE1QNnNhM2VDYjRNZndMd04ycnBOdXpwbmJGRDR5RndLSVh0RExlZjg3RUM1WC9vbnJWL2MzL09wdCsrTER2NkpRNm9XeEE5SEZqcE1qVlU2ZDFXUWxsYXVJN2xrbkZIRGczL0RXNDhXVm1xK3ZTQXJsenIvOGs5WEJLR1hTWEdnUlVUeW1ESHV0MGxGMS9teGpzd05qMk5GK3MvekVkV2k2MFJSWHhtc21TRnFxODkySEdVckRMbG94b0dWWHVUM3N5VWVPZ3NRQ3RQc2lVU0hxWHBycXBuVXZkaEZyakN1N2NHMkw2WVVscmxqL0Irc3pKWFJXamczZEZvWERFMzhKdGpEaDJJTzdLR1FkL0FKT3p6WDI3TnlKcjJMclpTaDMrWVZmNkdsUWdManhTbXNLNDNrMHRNN3pKSzBDL1QvYzBNNTJSY2NXVlpJeG1OZGlXNWUzWEhWelRGSEl6YThRVlV6eCtXZ29ZUTZXVTVhVTlaSzhXL015ZHlkc1BTaHBBREhEL002K3NwMnNCUHBLckgxcS9IdU1GWHJBdG40bkJoZzM0NDFjdnd1bzdCdTFTTlpRU2FySG9pVnFNRVhEQ2JJZi8zakxCWjZNS3k2M2VtejhHaWFJbnlCSGZYSU1sdU1XNlpTSnBvVnc2RzRYZHdEZ1o2TEVLZ0Fqbm91dzRLeVJ6SXNhYTJqMFJJSVFFVm1mNWplR2ZYS1NUL1VJMElQMy9Vc2E1WE1pVEpOQVMxYTJuUXd1RXM4T0dvTFREMFRSN1Z6ZG5UbGkzRnNGNTNaOCsrSHhuL0JSeWg4VUNLL0hYREFNQXB6djJFbHlxNlhyN2o1SXlMQ1g5aVhwOXZBbTZlcTQ0WlZRRUpaUUdaQU45ekNYSDNOWnJNL2FySXBtNW9TaE5PdzRMNnhBK2NtWkdHVWRpOGRodDI1Y05iRmRQSnp0TlNiV21FMEVKLzZHM1BiWEpVMEtzdEdLbXJXRmxSSDVjRDRGd1lwWmV2WFBjc3UzUk9nSC9KRDRpVDgzb3FTK09ocUFBOC8vT0poYnFuYytlRXlCaU43TFdtREJqVGRqbHA0bTFHcUtzOFNTYVVLL2JIdzJGVVFxcEdac2JLQ24xTHJGWXl0MTM1SjZjdjhZdDg5S1dhVGdDa1hVWm1JeEdhcVdEay9aQ0V5bU9LdUpaM3BZandGY290T2owb1pBMVJvR2FDaSs4MHlGaUtBNHpVK21kQ2ZDaGxjK3g1YWRET1FTZlM1SnBCdFpnTW1mTlhrYmJYb3hlR1hpRjV0SjRXSXNCRDRWUXorM2VSUjdvanJ0aXFwNzdsbjRzeFRqQTdwazVSajg4bVhSSE9mb1J0NFBmSktiOWNkM1REYnpjcjd4U1JNUmQ3YVlsbld1WUF1TTFlbVptdGd2VUdjZ1JtNUdNck5XOTdXTENhd1VvcnZ6UEgxeGxET1pKWDBZV0VzUURhZFJOYUs0dERrRnhVZWo0aHpTMW8xc3M1VkJNUm45TElyWkVjcDRIaVdOU0JGUFhudEVPaWNRK3M0ck5RLzVmYUI4bTgwOU13TzZiVkhrRm9va2xzbmZzY2ZxRGtPTHplamFGNkQwSjdQOHV1aVc5Ry9vU2ZJeStudVZVdkpFMFRuVExSWnMvQ28rWTcrckphOSt5SUgzMDloV3NvMmFmRjc2Z3cya1cwTjlkeXJDcHdoV2syaWJUZzVrZDVpcjNZeUhUcGpicWNPM2xIL2gzRDdSL25qamkraHNPTE84bm1kbmNRTEdhWWFUUUo4dmdNU3h4M1FaMHhkZUZYemQwREFucVNvNE1jcWp3bW5mMWp5a0hvMXNDWU03OWlMRFNCbEZjcG0yOFlKb1RQaFFtYmp0c2lVaTI2c25DYVU5NnNFbVpaLzYzaEN4cmJiUlc5U0duZzhLZUxwSDRJWCtqVTdxODBMSUpvRHVpWWpzUy9ObC9nMVdwK3hVemtISkV0TTRaRDlOTG9ISTdNVEIxTVFianJOd3B5VndNMXcxOUx0a2FNUUtzUWNZOWZmdWdzZTBHMkk4c014MW9QbmpFY2FMTFVDbWZnZTRFRGNlWU9PSEQ4Wm50UU5rSUpoaHp5L1dEa205K2VHNVlneDBtK2hnSCtEY3pNNDM5Yld0RE1ObC9mWnRnNXhRRis1WjBPZlRBd1NDOEFwMHpWSExOMHpYbTVjbnpZOUZaUG5XY0pCNGNvNk5BWUFIM0lpZk1HU2gyWnFkNCtWVk4wSjcxNmpQRVpId0FKbCtCdDZDdXhjRERlTkExVEo5N2J0ZUFFMGdOS1REN05pQWhtZlFkK2w1MzJPcTkrWnBhbWNmR1NWVVhVNnlQbUNGaTY0Y1loVDhyanN5blZNMGNWR25MYWlvV0NTZHBqSFVrQ0hNMHk5bEkzczEyZ3lEdC9xcmthUkIrYkhLWlo3TFRicXpLWGJ5Rm1KUlRybU10MVZpZE5iQk5Da3A3ejdqY1BWY2s2dDZoK210aHBEc0MwcG1GS1k5cWxZLzMzbGNTQ3pEbXo2Ny9raWt1UTkzRThoT0xMeW5ObVlRT3FWYUdmZ0V4UW5tYmxVOHh4aExUMDRqVk1UYjMvcVB5RE8yTW9RYXE4dUNTdWdRVW1IeHQyUFRLN08vQ1ZTbWh6UHNOb1pqYmgwdmFKdjBoVDVXbEYyMlZjSzl3K1g2a290YVpUNVpsQkJuckJGM0hvQld0M09mYUtxQUkyZ29vbG1ZczFpanFIK0NvalpQOFBNcWNlOHNvcWVVenBnQWQwdXNUMlRXRTJTRitOQjNuZUMxRWZzQUQ4cDE5Q2k4aVFmOEliQkQ1eUN6NmFkdXlHc3lkRWVQMUdQeGpQTUtickdRbnJQb1dBSUZxMSt0VTM4Y3l1clh2cWJTYlJUMndlM1lmcGE4UFlpMTJ0R3g5S2daSFVJcFZDNnJyZ2VyTnd3RzBBVkQzSlNjTk02VnZ3Z2s1OGozRzlhNmJaNk15V3lKRkwzRGd4V1ZzQkRVUXRWdnB2RWtxZnlPWDFRL1dMOFo0VFNDOEpjWFIxSkRpWkVodkU2by9XWUlmcTlFMy8wKzRLY2d5UkljS0UxbUd0a243ZnE4cjROSndKOGh2dU5rTXJ0YVIrU3JyaWt4SU5LQ0Q4RE53YUo4dS9QVThabHozWFB6RlFpYmF5dTlrdFBXeUpqNDY0aE54Z2FiYThzOXRXbGgrNEQzZVgrdm16eXlnNnFUTTkyRml4L2VsckFuQmV3N0dvSkFVcGx4STMyMlQ3RUVBck9QRlF6QmJSR3V3eHo5NnI2TUtBaEF5VG5LNUhabDVUeVp3elU4NURJZHk0ZEQ4MFVTQUVscTBaQUc5eDlMR2JKQXBSVFJiNEZ6d3l2b0h2UXhVdEl6N21QTC9Ta1R4WndreEVCN3FkcjQ4RkpqYXJyVWloOGVIUVVKUHZUYzhuUVlZOHJSdXBxQ1ByT213NkIrTUtWWVdvMk52ZUdIN3poci9mT1dPbVZJNmdEMkdxVi9pTklVZ2dlNll2OEd4bzYvR0o5SHhQTzNMKzFNNmI0V3BNVHNDZnlCemg5OG9HcXByY2Jhai9ybjNUakNwRWYyMmRCcHpwZ01lK1JJMFRSa2ZJbWtPaXUvVVRKMU9tZXZ5UUdDRUQ5QjRVNkJzSE1GdVo4Y3lIMUIyWmFSbWlRdkZ4VklzeHJEQ2xTVkdCMDlBbXlzQUdXVzlIenZ1YlBTL1RMN1daVTl0UVR5Y0VhdVRZRE5PTVB5NXhWTFRicTNFYm54TGJ5RGpDQkl2UWR3WWY4dzRaMmhzcCtCRnUwck5tVDA5TlA4SmpwaXlXaWpncHQxWHpreVZyZ1NsbWUyWTg1TkVCVWc4MzRwaXl4YmYwNmNEdWs5L2RFVlJvRXJuTUxTZW5pZFFETUhuemQxRzZMclJDNmxTaFkwSkNLNVlrRm1mK040MmcySVlSN0dkWUQvQm9OVHFEZHFySGRka200eTlqRC9DVHF1cFRFQzlENXc2eXQvdlY0QWpLNGtsTU9TRHBCUjhzVlBHS3hxdm9SWUZGRlM5b1ZDUXhuWU16NmZFSFlRMTJhUHVmdEFwSlc5azg1cURKZHE2eU5tNm9STEhXNDhKNEQ2aERoWDJUWEdOUml6ZFpKMm9vSXVoNjFvMnpyVGd4T2NpbWdMejljSlNzMHREMnMrcEc1bUV5UVJrSEowL3dFT3p4TytBYjFSaWhEM0ZQT3lKSHV4TTRjY2ZiZUwyaFVIeEU3NUJOQmt3WlNwYWlNM3plaEgwTVF6MjBnSmNOYlhTNGl0QnZXeUhJV1BrRzdVT0xJRjJTVnZEVkZUQ1YzVzRUT0w2R1pUUXdhSEt0RVdxSmRwKy9xWTNFWkJtb1Y3K2Z0dG4ybHYzWG9GeFphZy9iazNjaXNUUmpmRC91b1JveVIzcjFTNzVKUnh5TXRCMWI3L0ZwaHVDOWp5N2JyYi9sYm9sZEhrSUxSK3d3L0tCWGJjOVpyMlVxWkJDQ3lQbHFreWtBM2FGdjhucWQ4TEM2WXZxZ1NJaGdDNHdLaFlCMTdOd2NBS2pXSndyRTVYWGc5TnFZVDErWDBUVktHTEJEQmhBVHA0cVJWU3RibTUreHhDcnhTUEtMODNwVEMzNXV6ZEZwa0lUaUFnZ0pIM3ZOQVdYaFE1Tk5UKzVhSm8xdjluVTRpUEpzQ3ZuRDhZN2tOMU9nRXg0MDFwanQ1Nkk0OFUvbmszSmV5dHRSKzE2NDNQYWt1ZlZBWXFqbmxkRmF3WjVMUVRmbFIxZEdSNURMb2szdGhhaGdyczVMd29oZDRRVkZ5d25IMENValJFYU1RQjZZOTR4S3pKRmJqL1dXUVFKY0hkMDRydVRqVlEvZEdaQ1llRjhSV2JEQXV5R2RhZkdEMHY1ejJHRGJiWXk0M3dtWlNlSERweXBnWGt4OFhIOHVOR3BMZ2F6K2ZSckREOTVSU1FtUGk1WUE2eHN3OHdYdlBybG5SSi80TEt5Q2NkVlNjQWpPK0NhNGE1RGtLMFdxQW4rcTJENTZ4VmVwZ08vRFJ3U0Fyck1STGlNZWxWenZxVGJoaWkxVHVCNkZJK01vVFE5YnpzMGxiTE9QeERTOWxxbnhPUDNjaUtXd2h0OUE3YWdiampxdVlrNGxCaE1MbmdON2J2Rmp6Y0ZOcHBaVytGZUFvQXVwWFhJaVUzVXFVTTY3aG1hVGNPWXhydzRGc0NGeEg4T0gzM0ZRVGdUaDBmS0xJeXpobFpLaFZnbTZwdldnNWlUM2V1VmFxcmw0bEw1eDNjOTZKVXUzeEh0blcwdnJGVUF6c29RWFI0cjZId1M4Vk1FRGZXOXJYU1FnUkNFbThZMWN1TGxGVUZ2MHY5Q3FUeFZmMDVWazA1eG5XRlpaeW4rZ0tSZVF6czV1d2JubC9OM0V3VmJRckFZeTVpdGJWQVdFeG4rNDNsd3BxT2taazJMUjAwWFpKTDBuT0lScUJvMTltWlBhd25ldlgyeC82VlNYajU4MGM4Y0tGWXNjVDl2RUZmZnRTZDBpUVBOSEhucjlEaWhiRVlHVWFJdksyWnFlWWFacEhWcDdsOGxHTVBldlUzMnJjS2w3ejA2SUk4SGNBSkEzYkJlSVJ6a0g3SXdURG5GWTNIVXhxN2FWOVlQRXA4MnQ0RXIrSGpUNWk1alBIQSs4QVUvRFNueTF5Qzc1RjlZaTlseXYyV3hKMlIvWGY1dlJyZGhDeVY5QVRVcGRWQTEwTTBHV3YyZ0FVZzhJS1hZVUk5eFlQc0hXMWxHUXR1NUF4cHpsUkswaUxYVmV2OGVHRE02VTZhWDQxQlJZTDZIOEtTNmtncWJNdlVtTk5IK3grWnMxTGlpdUxTN01jQ043Ui94ZnFxNGUzbWNCdGNqTXd3OThHTEVsZXV5dDdwa2R5bEV2aXJvY1NDcmlQSnJBK0NBc1l0Y0N2UGtLWU5uNmVENkRZaVNpZGlyWVJ2dW5qejUrWUk4RFU4ODlaZS9rZ0s2N0NjZW1valVHOXdpVkw3S0xqQmgrcjFCQ1RSaDUwOVVsTVJKNDIzVm9CeGVSczRGVnJOS0hnWm9DZG9ZV25IYUc3Z3FuRldEVlUvQWFvWFhRblJiQXl1SXNCMWkzSlhvbDFvSHREdnFnL0pFWEQ4aFRYcjJnOG1TSjM3SUgzY0x5b3hmR0lPOFdHMEJXZTQxMlBhcy80OE1SY205Z0N6R1NmcVVLNnNXZ1A0Nk9FTjU4eDBUb1NOVW83S2hLT2FITjRvbTNpQU9lRGx2MmhyVnBGM01qalNJMWhiRTZpUjlnejd5YTU0N0NvZkFjL2JJYnoycHNmbisvSXdONC9RTmtNMGNOL0lxL3UyZVlVQXJtN0N0WnBXZmxtUTlKdlZaeTJiUWg1MkVrNzIremRHREV6c1JJaFdHZUt5SStmeDFtdS9jYnhyWGY4YUNyVDd0OWNwYVpCVXdqZkE2ZnpWVWtpZXVML3ZIR0FFdkhEckxPemdNYTB1T3FiY01McUNMQzJZdkRJcU1uS0w5ZDJKbitwYkYxbGR4T0pqOG1nejNsSkE4d2pHMDN4TVZxU1VkaEFEOCsySWFqVy94K1p1b2dzc3E4M2RQQXREa1VLYWpwTFZ0TTI0cko1bUNLVVBHeVhRc2RuOGdOVDJFRG9qckhQdXF1aGJISmZteTVzTnhuYy9iK2VCY01zcTV0N0tsWWpZQXgrUzd6UkJUOHFodDk3UEQ3Tm15QzA2bi9sblU4aHJzK0VSdHRmYXdaZ3VqcFhzdHB1SUhOV1p2c29RajJTZGVja2d4aXZHTUNpaVg0cEVmaXRmNFZLWVdlaHd5NnVzdFF0am5ZN2FDaGh6a24ycitSSFBrb0lBNGhsSTFmcE9yRUtlYVJ3ckNNYjBiR29JYWxPWFZvOXZPWTZRbWNnTTR6NmlvdzNyL2x5SWtOdnE4RWhKWi9QVlJtVmxDVXBRSTc5VHYyV0tLVFV6alRaRmduWEJZaUt0cEhPcURxTjBLRUxwUXNZSTlhMkFPZ0tyVlBPS2VJREFLU0hWTlFnYlNBVjdNREtTTlZ5ZGtNUjNId2c0TWFrMDJVK3J2RFJ0UUJQbUx3OUJEdTEvVUpPaERQVkhmU09nemY2Y0x6U3lkSjRJRk1DM0w4VDBiZ1h0SE9jSXBkWXBwaksxbEViZDFMZHJ5RU9PL3cxRTBxY3BldkNBUHJyQ1NTdEFwTDE4bzBmd2tobUwxckNRVThPbE4wUVA4eGw4YWxQRGw2WmRETVBvZGZwUkp1ZXlsaVRKSDY1TnlOT0ZyeXorQXBqYXRXNmRJTzVFakh2K2V4TnBOY1I5d2JlTFJwQWJaSWVvRGVxRk55RWYzVldaOHA4SWNiaGF0U0xlMlpGRlJNeUd1RlhBMzFIWHhGbDdraGRVRkdnK0VGWmVPVnpLZWFpSVdPOGtib05SenZsTGp1WnpqT0JidEdmcm42cnQ5b1EzR0wyL2o1N3dKZXArYXVxLzlFV1F5QVRRL2N0WmhWdUlyWUtZVFQvZVlRTURwZkpIUjJ0OVV5UVFLVFNjSVcwazJhNDF2cVNjaTE4L1FFakx1dVhvQVNmZlRVdTg0L2MzMkh5elhhUEhYL0crUnBrUS9VNEcvVUpNVUJEWkRhdE00QXNmT2dXbkpNTStHTDAvMUp2OXl1aEVaZGpoY0hVeG10OHhzSGVhT1RZdEVyNTU0OUZ6WVM2aE1obW84em9ZL2QrbkVFWjdLNVpXY1Q0VFYzelNxdUhjaG5rNFZuOFMvcWh2OVl1L2NZMS9xbFRvTDJ1ZHFockhsNkhyVFJ3cnFJcXVjODJFaXJISEhzRGdiZGlNWVlTQnJNdldwNGlaRW5UZmQvNTJpeVdzYVVFWkJxazRoeS9VRXV6VnpTV0dXNllTc0FmU0pFOUNPLzBKMGhuRTBWVXBBSTBxNXladU9UdU5vR0RQQTAwejRHZUp2akw4RDJ3MmFIRlRvY1lKTWJhZHd1UFpud3pEQUEwdm85SWQvRVAwQmQ1WlNlazZaZFkyeFQxUURkSHd4YmphT3RxUXZ6Ly9mdlM0eEpDREZybkYzbzdaQXF3cWFUcCttS1I2M2NSZWxzWklJOGRLbjJQL2drOVV2SEU4bEt1cHJZckpOeWpZRFgwdm9za0gxYURyL3RMOHhpbkV2Uk5ycXp4ZVFyN2IrcTNjRENkbjRmVnFtN2oyV3VEZ3Z0aGcwbko0ckl3ajNOZDdSY2FYbXE4Y2dXc2FmWFJkNXl2d3JaODBSOStUWW9adndwcS9WVFRZUHdHVGNnUnRtWlFBSmRnbUNTakVCQ2diTDA1cFZHOVNtM2JUYlN6dkdpaVZ1VDlzTmZEM2xrb05TMHgrbW0zUTlRaWNJRHFMVEp1VVhsaUNTdGRkOWRuK0l0emVFRkVTZWJTL21idW5EQ08zUkNua0ErbjFxL3dVTkJNOXBOL1JCVncrWkxWbDF2SUVKWkZCeWxhOE54TkxaSlBGT1pTS3JPNU51WTErWnMvUXhTaWE0bWhSSHEzNkplTXljVHpFL1dSbzgydjF0UktvK0lIYTRrUzlvQ0c0V1Fab29vM215L0hzTU9UVHUvQTloZnc4ZG5yVjV2TkRNQzRBck5hYWNTbTJVd005ZE5pKzNyTnFtaEczcDVMTHlwc0p4Qm1VbldldW8xeVVNb2JqVEcwOXhGTVNlNkMzZlZIYTJ4dnRvMDltTU1IUzZoTkIrTllpaHlhTWRQcW9jT3grTEpLVkRrakxCSk9tQjVlbDZ3SHpVNzJyb0xvaW94bUFram5Ia1k1cnk4MkxiYlVTUjJLOHpzTE1VYkxnNTFIRitzNmxwNDdJNmdrb2wvQy9BY2lidVV2RXRKTHJCRXEvak85TzlWb2pOdGJsMjhkZi8wVWJzZ1RDeXpHcitJZzRQd0JtdFBVKzVXRVM4Q2pxRFZMUHhxc1c0UVNzaHpESk1TOG4wVTYxVXNhd2MvVGIvVm13SktuZXJONFY1a0RTT3JndmpzdS8rWTZLSWFVM01zN05DRWpBcUxHNU4wNEZPbktjaDRKeXpOZGlZK0t3L3dwdmRMUHhCVkJ3RGNZZmJtRUVlTEtUa2x6dTNyajk5aUFKakdWTUFmRE5TclhVSlRVNnI0VnhGU1lvY3ptQThwWE96QlNvanZaOVNwVlZiTmxEZzJTYm10SzNJNy9vZ3VUb1Q0cGVCYXBMQ0JtM3haTXpMODdidG5TVWwzMG1NNlRGSW4zYmdYaWxjQ051aDBLcHNyOEhTYmN1RUpOa3Njc2dPeC9VZEdySWxpRmtYMUlRYmxmQ05RVlZKbm9SM095SDJkK21SNVZhOFJGKzFYTXBIbG93QkR6anNBY0dtL2dXSXVwd2VZY3Z1V0QyNDRreFVoUXRQaVJmOUtjd0lSSmdzRXNaSVUvV1VFa1lnUTkwMEtaWnp2REl2emJZNHFtcWIzU250ZldrblZaMXJXdVBLTzY1ZTlmNHlYZTZCL3ZvbUw1RDVyQ0xiZ1V6SEhVVXlKQ2xiVXpON0VGRC9XVW9vMXRKY1VqdHdKVkwxZmYvR2pvb1p1RWd3Ylo2eEozdFlJQ2hsUHRDb1doNUFSekI5ZUN1dTEzOEkrd0hDMWY3TnBVMjZLYzRlb0k1YzBuL1k3WlRTdlBGSVNxZ1FxUVhGL3I4WEtuV3BlUThFQ21nOGFFakZOenFvSkVtZ0JWRE5Gc3BPN1FsOFAxcHFGVGt4empzSEFaMURraHVlQUNzTUJCTmg5R2VPMXJNMjR3aGw1Tld5OENHRU44M2d6WE1rU3VDeFZ5Y3JTNW5tUjM2WlYzcEY5aGswOG91MDV3b1VyWnVLeFVTMzMvUVEyaHpBRmtlT3VMN1RMSUQ4K2FnVjFVdmlmQlIwTEwwWEtzUzdaRXFJU3BwWjlTWjFJY3R1MllKSThEVzJMWmdCSHM0U3ZSd2k4dXI3YVdmWVM5RnVQSW9LZXd6UWxSbnpKT2RqTlZoRWt6dS8wOXk2cUVCZ09VcmRkRmlVL005dW1RM1lFR0xodnpWeU1kMUlWWk9lSk5BdE1MdVFsY2E5ZHJFVTlpRFRwdXYxUkNXRkZITEJkZ3NVck9PRVU2Z09vakFvZEJOc3hmSWVKSWNrdGtNS280S282Y3F3NTkwYVJVL0VOclMrbXVLRmg1Zms2c0wzbXNTZ3ZwYTcwdmxsZ1NIU1BZRzBnZUVBVW91c1V3MFRKaWpsVmhidlpSVkRtK0cxMDlIaTFFamJaM2RaSWNDSnk1OFFIUWNnQU5xRXUvRWlIN0RYTEtOcnVXNklqeDJac0c0RkxxNWVXSVlNTmdSR3hpZUZvdWtWZHMwUklNRGVGUjFSamgxR2ppOHdINHYvYWtGTnVBaVlOaENqSE9wblBtRjc5a2N5dzMxVjErQnM2TnQwWFdQT2tCS1gwWUdtR3lmTzFKYWE0SXRJU3RiTXJZZi9OZlJsb3RhUlBUcnI2R3FaLzByT0NjMjRPaDA1NGNHei9BU1pyV0grdTZhcTBXWllQbTNma2FjTUtJVlRVL3pNdW1KMmJqcytyZ0o4OWVDcFRxUzdURFk4MnA1d29EbmZKcEJ2ZGxnZE9LTksrQkcydDl5cEszM1dzVWVIRC9DSlc1M2lueG83bEVJNUV1ZEVLMUR0bXl2RUk3N2pOUWZ2Z0RRMWd2Y2NoamtVWGpPY0taeVpEbFhXVzdiWEQvMkdCam9tNTNOWk9vWkRFZFdBT3Q2QzMzMmIzU2tUMWpvMjRMRjVHZWZLY1d4a3FZcjByUFpyaTJ4NlJtUEFQc0RIVlNXSS92ZkZYV2ovZndJYkNxQ21qQ3JXajlIeXlvaFdmMVFCTWV5dGhkVlVZUythNFlQUy94NExzeFRlK2tmVUNvdlhhMG4rT1ZicDh1MktOTDM1dmFmbHg1QUF0L1NFV2lqYmU1QklLM0UyeGZKVDNhL0IyMWF3R1VSYjlzSUZ0Si9ydUg1L0U3b2hCUk9BL3Y4MHloeUtQSmtDYlVRRzZaNTE1TnplMmZ5OCtYampSdFZEYW94dWRXeHQ0N2hyY3lzODFOZkhRTWxoaU9HYzVjaXBHMTZMUW04amJNN09jY1YvVEpGdmN5UTg2R1JPM1lEalZiUS8xOXVrWVBEcUE4YzYwZnZVMDBBWUJJWk94UWZuODlmbE1vb2hIbDlhdW0xaXJ1MmlYbFh6aGVqWC9KR3B2aldpOXRJY0VzVVhVVWdJU3N4WTQ4ei9Hd3pNRUZMT1B1cmtzTEU4bEFaVS8yRmJYekt1cWZoTHVYK1Irc2hOWS9qQUhPajFjaHg4SFd4dENQeXBpVllDOFhNdmtGMmI3MXZzSjhRZXBTbzArclR0bG1vcmY2dVVYR3FiRW8xeEpKMTlZYmtBYjAwaE9uYkFjRkJaMmdweUdDYVN1OFJabEpMNVZQcFN4UEgvbTVSK243STlTV3c4WGowYU9kYWMyTncwOW5YaHNMWjI1K2V6R29CL1VaYWNYdDV2cll4cUZGbnhqdXBRMTlJcU16Qnl6RktweVN6aFVkSjI4VU9NZTFGbk1hZzNka3V6TG5Yc1REQXdsM3FmcjdyQWdlMnBnZkhhOTdlRnIrOHRrOHBOSU9ocVlFZzZtNEl0N2dHRml6NDJQa2dJYWFMaHJQS0YvRFNUT29VTkJld1QyUFdyOWFqL043MUU1eXZJUmszQ2pNMXhaT0NRbGk4cU9nVUgvczgwQytTditYNlp2aHJhaGhuK2VSTndGNjJNQ0oyUmd3Z1pzSzdsVVlpK3FlZk51YjdZMzlGVVdOY3NwczVMeHRWZTNLYjZBOGZDeVVyQkpEZi9TaVNsZEsyS0pKL0ZlQkMrYzkvUi9MTytNdGl3dWt4NEtmcHoxb1IxR3FkVU1tOWVaTzJqS0hvb2lUYzBoKzMzcFB1aGppUEZGUGhlWmhXMGlpdkE2NDROZ2gwa04vZzBjR0J0VHpORHdhdGY2R0p4ZTVPdUxJQnJhS083UjcxUE5sRzJUTUtmRDB4QWdPR0xaTjRLcHIweGRsMnBTVjF1TjVsbmFFWW9hemFIMnVTUmRZcWNjV3VodDVxOEJVYlVPemt4KzJib2pjVDZTR0h4eFo3b0dVZlZoYmNkenVEOUoyUGlPbkdQK1Y3bklMamhBb2VtLzhVOWRzeGx1RjFtVWxaS0p5Z2x1dWVNS2h2ZHIxcEllQ0ZEYlJSbzB5Y3NIZjl0Nm5hbWN0QysvSzhMcnlEaDFScUhMYXVCNHNrOU1oWEl4Si8xUjQxdExVcXVoZm1SRjRENngyQU91VjBBUE8yWVRjMTYrSjJCLzhmdDVQK0pRSWhhN1R0bUNTUlR5OVhWRGs5NHdOZS9QcTVQQ0RrRk9kdzROM1hBdUNhbEtKSFlDQWs2b1FUYVYzVmR3dmxlWkFqTkpNdkc5czI4TlpyTDZmK3FxRmt2Qjg0RldEREFldjNoc1FZU0FaRytIbUhWVDA3a29oMjB4R3NyQUtGMU9kVEF5MFVESnRKekpnejcyaXVudWNPS1FUY2lnTExoUG4weXY3WmVXeDl0dVFlWWtiUGJkS3ZydlNJV0d5UDNod3BHN1RlOVFBSWpXM0s0YnZkZGdBdm1zVzhTbGo1KzN6WHFTcHJ3R0wvUDdwVzR0dmtvM3hvR3RXVDNPWjR1dkR3QzcwWTc0ZHhlUDh1bHE5Tkx2SFBuVFZiVW5ORW5HTS9NMm5JeEtBOENWMi9NeG9vNmE3VGJ1UXIyc1EzNUtKMlV3MFZFVU1JVHlDRmdOVjF2NTczZkQ0SWk0bUpLdXdvY0k5a0tPR2dBelRqQ2VVakp4N0dtR1BSR1UzVkR3WWFBNzdYdEtvZ080VmRTd2x0Y3djVHN1QTlsVXhac3RSMDVqd3Z4VXRHbjUrMHN5TmhUK2ZhZFJpUUNoVFEvMWt1VzVzcDNoVnI0RW56NlJSS3l6SnhYWXJCZ0pWMEluaVJVU0E0NUhjZTJiMFpZV0FlV1dsZTdpVWY3KzFzMC9EdXQyeklEZFVVZFZLVitLZm4xalZFbjRNWTA3ellPTE9JU3gzUEMzbi9CUEo5eFRwMC9RbEZzUS9jQmQ2dE45QTV3K1RTVTZvaXNaQUhGRWc1eUZiKzJrN0hzUjJkTThPVkxQOTYrZzFaTVBhTDZvYzFkTXdLZFl5STR4bVUvaE5EdWRGVEhCS3dnanU5dW9CK052WnZrLzV2eXZoZkNGYnB3TlVJS1YwSUxnQ0YzV2dxWjB0Q01yaUNnODJ1UlA4dFBaY3hybjlpUERmaDZMcHhLNm5DR0J0QmUxVXI3c2VpU2lXaDluTUo3aElrZTJOQWRndXZxRUE1VVFTZE90MUhRdkRYM0pjdkFIQWRGSEVKd1RobFAyUVhGSkpLSXpBcHQ4ZUVnbTFsblVoeWJzMlN3MlBKYTJMdmJaei9kN0F1TEUySUdiMDB1bDVHZjBubHdGM3dlS0UxZEhHclpIRFRSdGVpQzhTNkhSWllaWTRwSHBVKzJOMUlyM1dIS0pqOFZOUXhCZDgvYXNJYlQ5TFMwK3BxdURUanVmNTBCRTI3TzJRcURLL0tJVW10aUs1Znk0aWhVTEdVdjYyTDJnemlFZUkyODF6QVc3OWo1Rnhwd0VYZ0hxTnJkNFdjR2N5NkJSUGFhVUVKL0NJbnZQTWk1Z0Z4WXBJYWFMQmtQL3BzOVFuQWhQNFptTXNYVVV6aklaY291Wis3bHRuUDd1OHY1aGpDNzVRU1FnWHVBeHV2ekRiblRPYVhRWDFrL204a2RXVzRWUFFYL1R5Y29nZjh2VG9kQzBPUnBCZU1YUDc3UHVZRFNsWDJVcGF2R0NMTmc3d0kvM25ZU3FCaGFOaGt6UHNwV2w1Q0JBSjhIY01rT2NXdEdPTGthOFVUWXRiV2JZbzFtZkh5VmhNV2h2TlpEOTB2amR4SjVKdVhCZ3lmMjZwNm5IcmlsbTBJaHBFeFdrb1BmaFZHSUoyN1FuYmkvTGszaWpKWHlKRnZXLzhzcGh1dmpQMmZzVXQxY0piWVdleCtSZkNNektRcE5TTE93ZzIyME9mY3Z6Y05VRGNvaWRROXpXUkk3cnZtY1JNbW0yMFR5MEpxQzd1U09Rd0Z3L0k1L0QwejBsYm9wK2x4STJFR3ZpL2VVWE82SGg4UEdEMzgxRVdobUVmOGEvaWZEYmNSamZuY0pLTGVKdmZNeVRIT1AyNGZnM2xGVEl4SENDL0RwN3Jic2VrUGJEQUl5b2Y4L1FmQTVjZGJic1FlV2ljZkRPSEJZWmRjVTdNWHlVRG1sRWtTdmYzdlYvUWV1R1MrbkVKcFdZWGtLRUN4MGFaNjE1T0ZYTFJET2FFYXNsL1dXdnl3NWUvTW1PeTIwKzdZSmFtdFJCSzBFZkxVQk5saHlDRzFZUTAvd2hjd05Kb01WZ0dlTFhjMFY3ckdXakx0OFNMS2hJVEw3RHJLNU1mcDNzM0tKenNrL1hCNmtOZEE2OVB2NzRPYUJiclpLaVVGMlloNkt2OFhKcTB0d255Qkk2RlNRMUlZNGxKZkptQXNibDl3bWJhUWg5dHpXWUtEaDJWT0lkQmFNQm1RMHBya3dQNUFiREdpbWJrTU8vZDVaQ3Y5SHNSdGdTb0JMUENLSGhKbnVLZzgrUDllR2VKVVdkMzg2NmxOZ3NjWXo2b2R0MlFxdjVWcENWNitEaVhLM2J3QzE5Zy9DVW1FOElLN251WThkd0FIc3BNQjBnZExaOWFnWG5YQ29kOXZVSDZJRjZmSVU5d0w2SWhTdVNnaHFveEtycWxwbSs5M2FMME1YNEp6d3k5amNyK0lWY1ZnRU5OM1VGS0UvbElESjJCZHB5NG41cTJVOU4zdlk2dlYrSkdpd1ZrOG9VelZkQVZDeDhTYVVwcUNVL2oybXpvRnZMQTc1MGFLL0I0elhka1hRN0tJRDlZbFZHSm4vWmcwcmVrM0pKcHNJQk5vM01yUXM0bXZCYmhmbUJjb2M5dDRpNCtlRFFnV2ZvbGsrazNiUVJ5YWFXTG9oWm9MYWN4ZTY1ZVJZOWMwOWZnaGZyeVdxcnZzR3FyOVBUWUV2NERjN1BNQTU1aVN0WnNyc0wxeE5nOVNFM1MrZzg0VzZjQWJuU0hobnhnaHNMN0NEVU5nM2x6MWJPL0h5OHcxL3BTNUp6bkhaR3hOQ1NiNW9lR3RaN3dCSEdHU3dXNjFhOXVLZHhETE1hZGNkcUlEV21EejFXZ0dJR1VWRG1MTTlXSUd0MTgzUmJHUHQ2V3IxVUxJRXV5YnBUTEZaVVJYZnJnRERCdXZESUJNTW5TOWxZNVRnREVNZFIxZWZSaHRFazZoWVhHY0ZUdURpUnFnMmI1Vm9jcm5YTlpOTWxidmdWNWpXeEhFT1Q3S3VkQXhRY0JDMWVKbUxaS3lFazc1Z0Zva0k5OWtnZVlLTzN4Sk5GeUEycXhvaVhFQWpnOTJGUzVQNEU3QTdtLzNwVmIyQThTUHZxUFVHbzJZK2poZ0lWNnptQjBvT0QvWFoyM3BjQU9RVjN3M3h3Tmo1bVgyUEllTmlkRFRSZXhDc3UvVGVFT2VKZXJvNVpVL1lwQmQ0S0M3Tm0yMDdIZW1wU1dpTTFEUy9nSWZXWXJuWWZ6RFZnWjhSb015WWVMdXN1eUNyd2hCOXhSUCtiM0VFbTBDNXBNZXc2WVZ3NjdaWTIwYy9TL2l2MDdqSGc2Qzd5Ujh4eS9wT0lZeERscFNmR09QVXVrK05tMmtkNTBLeTBBRkM1WC9jbTZMVHVOQmM4ZmkwSDJ4TGhlMjl3Rm5wTHZtZ210UlkveFNRcnNrcG1JK0s5dnltWlBmMSttRDByT1o2ZGIyM3BOb0dRaW5tM2hjNFhxS3NnS2hrTVU0cDVqM1I1YnNYclduNFNndjM5SllmWmZTWjBGOG5OenlROFJXNnJycm9idUpDT2piZHJJVi9pUU5uVTFlemdqQlVlTllpU0pKVDBKMDNPSCtNVTd5LzE0TFcreUhYZFBEK3pLMDdieFN3TEVGWnRncEM5L2toekp3dUIrMzdKK2tSakQzRlQ5Y291VmJFV080bDg3QllXcWJPKzZwVXl2WlFlM1kyZVlSY0hwc3pzRnY4QXlhVGtNQzhzOVo1M3dmeGRZa0JWZ1RKOFhjNFFhK0tEV2psWjBGK240T25DR3M0cmFnT2E4ODhDcE5tRFBDR2F0dEFJUVhBWk1ybFJ0emZZWmt5aDFSQmY4TjBVZEg4cXNCaU9GQ0JzcVlieEFRWk9LM29uK1lhQXA2OVpQRmxlTE9EVDVNZjVpZm5ZWUJSZHVEbUlkVTlIMVdOekZHVFZzcDNKOXNiZzB3M0I4R3djczRtM1h4T2QyNWxXMkRBckNDY0VOK2ZRV3VYUE0rMUU2cFdDbmhSVGRwVWE3ajFWZ1MyT3pDWkoyZjdPR1A4MzZielZkK2Q4bTIyOUVEYWZEWHRkUFBQd2FEQVUrTmR4RnY2aHhZS2FsdEJJVElhZXdPYmpzYVE1cGlxN3p2UnYrQTZ1anF1dW9vUEltWStESG1jVy9venVua2xXOEo3NGFWKytCUGxoa1VTR3VKRFRCYnZ0NHlWcy9ITmYyaVhGTVdGRGJlL1hwRW1OaExobDl6OHRKeFR2TDJnZXU1Q3ZMR0FQQklyN3RMS3VIcnlqc3NVcnZOSUplVXMrWFNiMDIyZnJ4WHN5ZmZsbkdQaTNIS2pRZU1icFJyeDFwaEEzcWEveERRa1VOODdjYjJ5R0I4RHh3NzdOMXNqZndpdGtYbHJpMGVVMHBVWXVHWDNCZlphNCt5TmtnOUV4UDI0OTVCcndHVjZQUDRiUDJ4Zys1dHpnWEs2c21XcW1uY3p6Tm5kSm5OK0JVa0IzOVg2WVZVWDF2dm9MUVl0WUJXaTduRDJ5SWY4TlVHM1Vidmg2amFpN2lGWXlPak5RU3RIZHdoNnVXR05FVFZJNjJSTXgwTUJzNnN1WGxuTUZYTlc1NUVsYS9CZUM4d0plZmhpd2JSNnpZMkdZMzZaVHhRRXFlNGd1czFNc2x4azEzQnFpNHNHUEJoekM4Zml2TEJvcmtkY3V2bXErMGdSVDdyYnhKZnpudFRmc1VseWoyZUY0Vlo3TC8rcE91RlZzUUdRZm1nU0RLZXRtY0ovNE16SjJjV1YrNGFoYUVxY2cvSER2emdjcGxINDJIc2EyUitNZ2treXRSNGhTWFRuZ0xMVXVFallHUEs3b0ZBRGhYRHJhT0xFYmJNSDJXV0dhRHgvMWk3NXJBeFBGYjBkbEg0OVNZNjVGZmIxU2JUT3dSSkd6Nmc2SmN0bTJCTXRQVlJvMlh6WlUxM1dxeVRBYnBkd3JiWXIyTjRVZ2RSdzV6ZGc1b3JybS9qVlBHbGpwZzNWM2N5eUU0QTRrQnZGaDZvK0IrVm9vRk9nWjVyMld5WkVkR3RtbENpdXFIQWlJdnhMVDBSZ1JxeDh5M1hxWVNRTVFwK1VkbCsrTkZ0OG5ZR2tTclBmcVFaS3JiNzJlRy8rUUNuVkJZSnRnV2g3Wjc0c3c1dm02RXNxR1FmZFZIdXRDMW1FN2NCUUUxZXFCb1N1U2tLSDlQS2VuQStId3hrWDl0dnFQMWdyOENRZWMvN0NjQmxCeWV1T2k0c1BTRDIza1A1dlZaZ1dVMDgxTk4rUEJ5bWVmSjB5VlM3bjNKNkt3UmUvQWJzNGVWTHo2dkFZbUdVSmRCYmRwTDB4UDlRTkVQZk5oWldTSzVVcjF0ZXo5cklUcWJtcWF3bVJjMWxzTXMxaHY4NUpwdUVrcEJuSXVERndKWjM5OFgreU82YnBsM1l0YlV0QXRJSmthbnhGZjJ2ckhkWDJWUFZoWmN1N2h5V01sK2RmOEczaDZOeDBmR3NuQTBwL1BQMXA3WlhCL0w5MS85ZkF4ZzhhaE9aQU9NTytTemwwT0xkdVhvazFLYitnd041NEMvOUluMSsxSk5Xb3JZQllPSEZ3OTVGaXhTbFM2dWwvVkRxWUZXc1ExQXpSZEdXRkthOTUrbTdTVGNZblQyeFhyaXAxckN3cDcrRyt0MXZna1NDekxRUjFNVDUxTHdJRnYxb3hvSGt2UGJXUmU1TkNjRURvaGg3R1FSSVhTOHM0L3pycGtoSHhzcmNHaVB1dm9DYWdJck14dlZyeG44aEMwdFpSbnVtYjljNGV1azM5YytqdFJpa3BmemQyb1gxWDlSaURHOWY5UkoyMGZ1d1BPRVFsVjk2aC9TVGNmVEVPRzRrQ0ZxczRMTmpDR3hPOERzbzIwLy9NL0FOWENaNHZGeVViSXFYTC8wZkI4cTkrdmxnaDB2Z3VXcUxNNWo3Tks2Yy91Z0pYUHpoZEM1am4wOTJmYnZuQXU1eTNlTUhDeHRhUmhITHVWODdnbWtaQURma2RIWlIxWnhLampLUUhFS3VWOHFRR0ViVUswVW1DbnltTW81cnFnR2tKOUc4em1oQXhyYWtVN0hURTRiWnFnbjRDRThXZjhaTS9NOTZ0MUMvTTZXN1I4UWRmMGUyOFA4WHdDT1B4Mm1wYWIzZmNlK0hWRFZZNDI0SDBaVndCMGwrYWFIVGdnMVBGWmMzNVlsYlpkWXpOT0hUMnlpMzZBUVZsS3c0Nkdad2hLQVFsWDhRY3lRT21vMm45NTdOVEdwa1BWb1ZVMWkvNC9jdnY5bUJTZmtxbXdtTGVRS0EzMnNxb21vNTVrcXRnNCs3R0FZd3NDOXA1UE9FYmZZYkZMbTBNOEQvVTk2UjJiYndjMnJWQmZJQytMZ3JRMW44QlhuM3FkUlZ2U3Jqb0gwZ2l0NlR0em5TNHpuUUNTd0dNa25BUWVjY1NoK1VEcjNwYkRTQi9yT2FpN1lRWGMyRGVuOEt0VjQwbGgzMysyMDh0Nmw4TkhSYUNLdzdQYjNEMFQwdzhaWnEvSjc0MjBtempQYXpEWktaT0VZSDB3ZjZsWHBnUWxDdExDVGh2QWZpa2xxc0UzYms5aHRFbUtMN0hpMGsyUmhCdHRLbXphUUxaUGZGVjFCWE00ME5QZ3FxVkQwSU8xWURlUkJrV3AyMjhlZC8yYmJJOEVjWER3KzFpUGdWZW1WTGh0aXpKRHpIamdOaXA1RTlTYnlRUFJ6d3V2amg5R2x2ZVNrS2FLZk12L2MzZ3luakZSck1vZHdTcUlSZGs5R2xjRldZZWlUdDQ4VzNMaGkzQWp3MnpvMVFvODZQVEZRdTViT1ZxTWpiTUg1QXU3T29tSkd1amExdE9CWTNFZ1A5QzU4VjN6ZFlUN2NiWUZBdmE0Kzk4RFkrUDBIRThSSStwT2VkYUswdEdsVXR3NDNjWk1zTTRFb0pzRTBRby84YVUxS1p4YlJKV3gzeXk2bUhod0NqUDFyOUxiOFlzamVGRTB3SmdQR3lldjFBUW5HMG9HSGRLQVl6RjV5ZEdjWDVnQUR0ZDNBYjVadkdvZ3NOWHNiZXVLQU1oSEtlZmRmSkxZMndQRlViUjk0cDgzVThhN3J5TWp1Z1hCaE5hRVp2WWNrQkR3TWYvVCtaaGFVNEpJSGFOeXN5a1F0amhjUU9DMG0zV1Q5RFNVby9TN0NmelVnMUFhdUhYeVUrWlhjTnQ1QlBlRXZGSDBKOWpqR2luNFhoa3VNSUx1RjNhZHB5VHc1WjZrd2FsLzZWZVB1STBaNy9Qemg0ekU4a0lzTGhlYU4rU2t1U1NwWVBzcHMxYjhGc01TeEFWTWhIY0V4RytlTXVOZU83bSs5WW5qckx5U05wclcwNDRBZ0FQRURMeFJEYkdZVDRFTUdHWGZlMitiR0ZCaE1PazhpQk0reldIWTBwTUhoeDRXOXhFWm5aOW1vb3VnQnphdCtMQUJnUWhzZmZPbmcrMjM3WHB6Y3RlRWJsT1JzSFBHdk9UYlJiZFl0TzdUTUVlY3kxRXFEUWtPZzZVU21PRkxpV09rbEdSam9MTnA3MW9lRkc1YjBjN0RubDlsTWI3NXpNSGRXZlJtYnhMUWVMbkJGaWFMVGlHUXBjN3l2UVR1WXEwUmNQeTVIditPNGhRSXV3MElFZnUyUU9pdTA1cTNjUCtlMHEvTTBQZ21UR1JCWlJlWTFSdnMrdm1LMW1RZngrbUo4czZodklnUGNReTd0LytocVJUaFBMT1EwcUtmOXFqWFNpRVA4ZVN1TFFZYWgxUVpsOEhuVTBhNlJleFlNZW1vR1QzdmhOVHdTT3ljNzRhdjhQdE91R1dzYkMraTZQZjR2VVo1c3Z1ZjhkVUpDY0V6V2ExVXJDL1RaL29HU3l6bXhyYnpwNzF1aFdhRWg0VTZlMjZkendYNFhhODJnWnAwdDlvekhlUmVDZEZhbUM4Rkg2ak1kSXhFcy92THc1QlZBd1BCTFQ0MVFTL0ZiaXZ3YXpGV1BCY25VZE0rWVNNZS9JTVFCR2trRFBTWUtSNXgzOXRuMnRlWE1KdGMzZ2tKOXZEa3IzeVBxdXplNXNsZTFOUVF0bldNS1JrOTM0UTZ5Zm41dVdzbEF1aW1JMXhlckx1d3JzMS83bXZYUDMwcnJkemxJNU5iWm1uUUhReFNLVTgrTFFuYzlTd2U5eTZpM1dkQ2pvbUFRdExKdHRrcS9kLzF6Sjd4L0VoZk1Yb3hVUkJaa1AzNkpjMnhVV0pCbXJqS2pNRGNCei9Bc1l2endUeEFzT2tVT2YxWTNXbXFYSG9NbG9BcDNVSkY4QzdtcCtvaVB6dURoNUwxQTlDMlhGeE5PblVsTVhhOFBWTWVPazlIYU1YMHEySTV4UTBGeFJCaFJ0NWZrMWF6ZFh3WFcrdWJJWGMxdDgxb2lNQUY4N2FzbHNPakJVRDJHZFBHREF4MkhENVRjTjc2TElzR0dmL2lNeHNoSHpvdFhUQmJnYSt2YW5aazlYc21nZGt4NFZMeGs4UmoyMUlKR2dIQUdDUEJOOFZtczgwUk9iUWpXWUh5RXRGVVpVaUZFZGw4eGJ5djhIQW1SM2ZjV2dqK3JwTW9LdlFhd1Y2SXcxNllRYjdweHJWWmFzYnJBSWg0V3hPa1dDWm81dVpGZ1JvMmg3R1hSSklocWdKVkxpK0ZjbnZIRmtYR0lvcXR2QVB2dGpiVldYMXhmdVNTVFRGSitJTElQVVJOM3U2QkJZVURvdW54R3NEMys5VHE1QVpMTytZV3N4elJoUVVHSERsZnByV2c1VUM0QldmTlpsWHZYTkpSaU8xSWZBemg2VkpmQWppYUNSMmhvUnpwSkN3dlVVSWtKUkt0Q0hvb1NuSnBvWXEzTFZRMm1DTlZMKytlck1EZzQ5N0d4K0ptK2lUR3VpWmx5bDNSdnV1bUw2SndUWXI1OGRncy8rWWhtWXNkYVFOU0FmRUVHQXdPMmN0SmRaeUJ4Ly96RHgvSDlBWGRyNm1sQ2lSWlJVNFQraWlqdE1PWFdIbzVKTDRDRW5ocVFVZExKOEZka2RtRlR1SVJaREg2c2Z5eEFEenNLUW1hamV3VWloOHpUOE9pSW41OFQvSjFTdmhGZ3lYOXBBQU5RY2VIU0dQKzd2YTFmSFY3NzVvL1lZeW9kWEZvT21CUWZ2ZE1YZkF4aEI0Nm9xK1g0bmJzVzNtOVUyZ3ZlVXV3TEVLblE5L1QxY3RaQzAyVFJVa1l0SkpSYmIzY3l1S3lWcUtDLytmYXBDeFR4WkMxcjVXcGY4ZVltRVhKSC9LRmdGSm4rUjJIUnA5YktKZHR3SkViL1JXZktKR1FKSlQ5U1dnY3NrTTJsaUJkeXN5SngrTm9mUHFNVXVRNTRldHM4R0xmZk53TEIvM2ZFSzE0N1FpSEh3TlJCdURORVdPaEpFaFJvN29BVytCd1JUSlo3dUs4MEtuWVhPL1hTbjA5akltUW1yWDZVSVhDODFNdGxvclprMkNSRXJxZkxrMTZiSU0vSlBqcmhaeGFtZTBZNDMrNDZCS1l3ZWdNT1RJQWh3YWVQSWExRlRMbVBocWoweHFQbFpEVGpQcHZ6R3JQUkZ0UmwxYU93ckpXcFJ2L3VvN0pRWmZlTlZCSVErZUdwaW0xVlhOUnpTVTh0dmo3SVNGL1FmZE1paExxNm9NU1pFYkJXMWtERmoyeURSRjR1NzFKQ1NuY2N3M3BZNXlzNE9rZXF4VzgxTWxMamcrczFXNC8wR1c5Ym5vZ09vaU1ZM1J6cGtDaUVMSG1BaUczeXJVb2VLL1VER3hNc0ZTY1VkT3ZJMENGTTU0Q2J6Um9TRityMU0reFM5dnVMWTQvQ0pybDB1Q2YyRlNERUZQaDNMbzlrUUZMdTE2aEF2L1l2L0FzSTV4VHUrYWtxTVZWdDVkT1BhOEZCOHVEcHpSeEJlVFBSb2VFMmsrb2tSbnhYSnhxLy9WSHBldEtuU0JZSWlWWnhtUHQ4bFFMa25jaUl1WUNQMFhFc2FIdTJDcXQ4SGVDMlprREJyQ0RvRnZMU3g0SmNHNVlSQkhCU2NwNTFEeVN1c29HL01tMGE3SUpEczljYlIwakR0SXM2MHFsRTk2bnNrbHdsa2pCSXc5bTdJOUVIMmlacjBsRWt2S051NTNaUlZDaVdsUDZjVmFZb2RUclRSVllWL29rdDY3SmNJZGUyUURjWHlDWTllUHliZHNUWnRadWpLRklqUFM5RU5nTG5EekJmSmdpOWJWU3JaYjZzOUNlUjd4dytWdG0wQ0dEUkVlSkw2UzQyZGtydHU2TGlYbXI1UDE1MGFSOWVPK3RPNnh0MzhTeGViU2lEUS9wRWJweWVwTnhKalFYOEpPbFh5QmRtakJnSnltWjE0dDliaXBxTll6dUZKUE8wcUJLOVFodHNDbzFsaWM3WDhMS3BCbjUxeTdBVDF0bnZ2QTh4VFd3MnpQcEFKSC9sOGVaV3paaWtReFlZMUdxSzNUMjkwOWRWci94dkp2SDNVSXgxSlZWNEdNOGFnYjkwUDRmVzV3M3dRY1ZvSlJLMnBsQlV0OUdTbkEweGlJWVQ3V0tmend2MU1SVnFpbmh1cEFYRVFleE9COHlZSzFYVDRacVRDaFIwSEVLQnljN3daRXFxd2hoMUtHN0FSdUszWUpCQnZ3NGwyakhCWWdLVFJEOVpmUCtIWVI3NVBTUkY5Nzd5SzNWaitDYkF0TkhFdWZ6M1AvQUhCK2ZYdTdmN1VsZVIwdXNSRjROWGYrS3JZK1VKeVo2L3ljZmt5TmNmeXhqOUVBYU5CVHlIQ1kyMkxFajNwanp1bHVhVFVzLzVibnJXZnlaWUhlMXprSWhCamEvVGdKK0F0WmcyTWRmM0NhbU5xd2xiV0I4QnNkM3V2SmtHanpxT2hVcTIrdkd5NG9pd0pNUUJEL1pBVnd1UlhFTGpjRVhpb2RyVng0MmVZd3ZHYXJCUHNBbGZCU1B0SVJ0MlZGcGdBMTVlVW5oeGJYdjc5ZW1SVXVUZVlKSXhQYzc3Z1lDTDZQTEtoQzZzWklycmZpbEp3KzRGSnUrbXlMWWtPNnJLR2x2VUsvV1N0d1ZVc3F0UVNLbHZRajhWV3BuOEpORVZJNHRjNzJIRXRTYjZERzdOM0JiemV0bEpKeGptTEEwc2dHU01OWnZiTEszNFVYWDZFSllpNEJ3ZzFwNzNxNmY3cHNldDdQWXJ4bnZnZVhidm5qTkc3UUErYnAzeldxL3dRQkRLbDFCeVEzM3NsWTdwSlVwVHJvd1dFVnlscG9sRURzb2pmWitxYzFuRGE2VmxwVVVrZ0U4Y1U5djkvejQ5TVVleTdMRFQwYlJIY2IwZzlsajh1TmltR0lpb09oMm10SzEzNEhFTmZSU0Q2RVpPQUpwc2tXcEhXZEllQVkvZzhYUHc1RDByVndkeUN2RnAxQlNQbGx1TUt1RlBKOGZ1a2xaL0RJc1NqbW0zczl2dTJaM0x3UVlDeWdQdG15T2ZqN1NKVVpZS1dKTGMxcXo2NEJ4R1Y0RmdvcGtDV2RDTVA4WEZoWXhYcjR5eitJOGhYcW8xbnVrZzJSWFdqVytGR2w5Y1lQUlhBS01JVi95WGRiczRPSVlGQ3B6d0NIZHFuQWhKRWpUcUJUV3hXWitQQWRkQ29LSnFXc3VtVmc1R2QyYk10OVNKNnk2KzVFRHY2RzNhbzNKSkRoTk9zR09LbU9HTFV3bXhxUjM0b3lEQjE5L1FuTDNvcGVxZ1k2eWZFUUx4L3U3cG1ZSmd3U24xejJMRlhKOEQ5M1pFdEw5RDBPWGIwNFZSYlpxUlJjN3lkN3ZsK1JjUnZPM1QyYjREaTI2ck1ZK1Jzcm1rYnBxNVNYZ1lrdU15MGFrVlMwMzIrK1kxa1kxdHc4eFhTRFEyS21LZ2RMVVRhSU9TVXRLVnBlL01DdkE1UTlQcmpLa1ZnMkZXYllpRWVGaHBZOGF0QmtxSnp0LzhQSi9UL0k5OUlMbUNYQWtlOEJxUkNaZTdOdndMUXBaaUhJSHJjVzA1VmQ3OXRTQ0FqRlgwYVBPdnpoV1BsK2xWVTFEZSszQ2RCcmR4dlFHS2d6bFh0QzdFL1NvZG9oeTRaWVJkUVlUOEdoaWE3ekY4SUlJa1Z6NnN5YWhtUUltRlc1cFl1OTZFRGhLVzZ4dTk3REIybXpNTnpmT3JFZkZTcENtRXBZV2JncUZMdWJXZCs5R0RYOWtYRXdvTEhuTDBudURUZmJGSGZGZGx1UXZBd1lYUzRwdmN4MzBQUXl1MmxkNkM0NmZhOTR0OHdJdTVSWVVzTDllUkl5YmdLbktXdHR2Y3BtZGhSRFB2S25XMGo4TE5YNVJTVGR4SFNyQ0crajBoT1VjTitwOUZXaXhteEdSVXNnSHp2MzFSNW1JRHVYUkZpMVZWTXFmRTFCWkU4ZkpMZXFqNUQ1MUpORGNRKzZVVU1XUllDOU1ScG9MOG1OelRaTERrc2J3cGlpZVNPMWpUTkMvVUdIdmdjS1ZPQUhZcXE3WnRFSStmc1RhaU9JQmdGYnA0UVJLOEZUbys4K0ViaGNZai9STGtqNjkyV0h0NmM4NGcvMTNlamtycGhrT0FsdDJnN1RSSE1JYVlXSEgxc05nUTVzVHJodUVEeGhSOTRUN1U0MkZLK3ErYzFxRzdTODJ1SGN1b203Ymd1c2ZCS3RLa2JIMWloanAwdWxMZC9GK1VRcXNoY3lFa0xuVDBPT1ZqMnhjSVFPaEJRUjh2SllVeE9NZFhkaXY5cmczZjk3YlAxSVNDZGtSZXRmRVBJcEZoQ2RMOUUyMzU2NGpwc01uUjhPQ2ZENGNsNzFQcGlsYStqR0Z3VCtERlZ3OURZazZiMFNiRmtyVjJlaWpYUEtFcURKd0NOa0lDc1FFQ0I5QnJqR1ZidVJBT003R1BxcjMyNWFxZmQ5TXU3VmxGZUxoazJKMmVPT0xabWV3MFR6MjFPazBybEtnNlNUVEFENEJJVzUvSFJkUUtWV0N1YUxMZUpXRlF1dEE1QXZvVERrZnN6SlVMeDNFV1A0QVR6UGxUV3JUT3ROYVFuWjFFY3lDVGVsendoV1cwVUVFZk5wQllGTHlISjBzSVN6Q0pWVzZZSVdWa0dYdVNzN2RnZWlUQldEN2FZU2ZvWXo0RC9BTHovUHhVTFEvTHdEMnYzNCt6dGxVaHd1SUk0bWNQQzhHRVZYWlNpa1JjVHFQb2lHRzVZYll1NHJYNXM0T1NDbUFyejRWdTI5VXR2TCtXWFNCNXQvaWVIVHBQWmROS0ZTRFJmMjJEWFBGMENtcFJmQnZjeWFJRU96WXBKYmRDZzAvOWRNeVlHWS9IZUdocU82SGs5Nm9QNmVEQ2tvbk1tQkRFcXlQZGIzalJiQlhhdkF0VnIvQmRyVmJPYmhoOFVZWWRET0g3WnNGTXlzRW5RSnU5U3RwQmZvMU55L0VoaHpRVGhkREFRb0YzS05JcE8weDlPc1ZyaFlxL0VONWRBbVB5VjgvQnlqbWI1UG9xQ3FsQjdkNVNseHY0TkRVM01adjFtY3l6c1dSMjA4L2VTdmEyQXlGVlYyZTNGR3lkd2xkSHo0cUhRMllReGZPcHdxRGZxZG02bGtTcG9NMGNmb1RQOUVCTGw2U3d0MS9oOGx3bDF4eUFsR2ZlMmorVHhTcWsvRHFSdlZVTm05c3EwN1ZqQ3N0bGpnSzFNcFRnL3lhN1JIZ1lnVnlJQklYVy9YTnN4cUhIU2dtSHhEMWtlNm5tbTM2V2xpVmE5TmNqdGJ4ckFSb2Vqd3RqZHVlYjRzbU5qbkU2MnFsOHJFb1NzQVJUM2QwcmtvSTRxTCtrREdiN2dYQ2Nkb0NyeVhZd2kxNURvQWtHVC8wL3lhNGkrdDF0L0xGY0hsc0kyMUpSTXpCNHZyT3J4TmZReVJpVFJiYkhlVHY0WWpVMVJ4dFpPNTNhQ0IxTVZjMzZiOFQ2NHBiTkVoeUtQUFdpMmdvYjZHSzlKdVRQczlXWUdCRFE0a1o5MWFISFI4QUhVOTlzcm1TdkNVUVd6TGpWYVdmdHF5VXBsMWF6dUljRGxqNHpycExKMllSZ1Rza2JpckdpRVRpK3JxUzIrUnlSWkRIY2dSL1pIU0VFWnV0UFRKVUIrVEx2aEdWODdTRm9VSHNIWmZtVTBhMFNHK3oxbWZwZFFwWUZDZUUvOWY4aUdHYnliZUZSYlduaW50Q0NyTmFvRG1XdXdMeUxvS3hVdzVTSWovdTVLemc4bzBaWXFMbFA3RGQ0bnpTWUZYT0RVTTh2blhiYldUWU5zNnJrQ0NHTHVzekUvWWtydlkrY0MycXl4SkRkSFdpOWlyUVBNem5ySVFjU0ZuUmFGZDJPaldRcXBna2FManJKZkZqeEVNTTZ1YXNiU1NSNjR0V0pjam1ncmUrWVo1WlJtMEt3dVNVVGlWVGxTb0NWQlRKcUMveG00d3RESkFxZXk0T0hGYTMyVmhuMlQzWnJVUnFIRC95QUhPQzh6NXlRUkN2ZnRCbUNnRmkvRFMvUFhvUk9KTDhGQnpSa1FTbENKd1dvK3BRR2xxVEViWmQxQnl4QWpVYmNGUWUwTkV1TUVvbktraDdUbG1INFNxV1BVTFJVUm9lRGNyS0tBSjF0VWFkb1gwdmxTKzJxbm9tOUM1VHNpRjJpZ1U0THRvMFEwZWsySVhuUElFZjJ2SUdWbkoycGxNQ0ZyQzA2MnR4WGpUUG5YeFNab0MySHI1dktBYlJzRXFjNGlqQm9kM1lzVkVsV0luTDhHUk5wekFQeW5rbzRyS0QvWWFIdDQ4MFFrcUtycEJ3ZU1hTXVxYUtzR0lVaysxc3FOaWtQaWZxWjczaS9KODB6RTJPRVl1KzZpV0NaVEdFWHB1cnUyTkJTWlFORUpMREpicWNxaXcxMnVaU010M1EyQ1ZSY1lGNGRzR3lPSWh2Vk1vbUVPeGNMeVphcnFSNVJUck1sdTZSck9xeCtIOURSWHZsck44OTVZbm1xT3RHT202dDZoUEc2RDJVQWRNUUxDM25PWktISkJ4ZmZTZ1pZQmk1akVza2p0b2dmbDBTY0xpamtqZTFnTno0SmJ2ZXhObTRiTXg1Y0VFbGNNNFdURGo3TU8veUtTR1hiRnBpbytNTE1PZ2laNmpxbG5YMUN6Q3RNOWxVRWZiMldHa2VBc2pYQ3pzK1EyTkdvd0JJK2hpdjhQUVY2QU1QV3IrU05QV251LzNHZG1qTDJGVnp4OE9sbE5VbytqcHdIcEYxUWpydXF4eE5kZzhlRC9SVDZ5YmJQVS9OMHpEcm1QN0lqOVlIbVViZGNhaHYzUEYrcWF4TEZjanNNS1E1SUFmTG94dUo3enJ2RmgzNXF1UHpxZGdwNXdDMWp0dkNjalJBbEIzdXF3cFpZOFYrSThRUExQWHM5UkFqZy9keWFmMzNlM2lxRVlrN2pURzB4Qm1JWUI4SEFmbFBXbEhIVjVwM1IxTnJIbUFycTVNYzErMEEycWZsNFVkWkZwUDlOYm00MW01LzkrWlMzU3ZrZE5ua3VsOHFVaGRCUkhZRkwrQ051WXNhSWh5bmd4a2VDRE1jVVZmbWxnSUI0SUYxbmo3em9HTWhPSHAvUFZLZU13bVU0aU9tc2lUYjhrYXArblFRUERmajczc0pzZEQxQmFlWmFhc0hWN3pNcmlVQTFlTEpRcFlMU08wUzZXbnR5QkRzOUFKTTg3REprUDZYUy94R2UrcWU5QU1sZ0g1S3lVay9tSjNIVjJKZHBFa1BpUGRBOUVmVkMrMk5JN1g5TW4yL2hENlorUThuODZ0Ui9CazhMVlYwSjMzekF3V3NGUCtxUnBUaEVyYjdTQVY1K0Zya2h3Z0phVTkzdVJwc3Y1cE4zYkRQUG9USGNhMFB3d1NLaTFlZ1FwYzBXMzVlS0tRVWhFVGJFa0hLSFlyZGx1LzJsTEVPT3FVZVoyUjNnd1RVTjNPREdVeTcza2ZPdklZVWh6dEdQL0lNbFNWT0x1djFqNnNDd3NoT01DalZjeWR1S3FGY2x2RHNmQmFyRytReUVxQXhKdTdJTWpETnZaSTJVdE44MGdVTjlUN1NiVnRyQjlibWNFU1VDV01VZ3JJNzFKc3kyclR4TCtKdE9IQVZQamN5bTdybURxelJlVDcxS3o5OFI0aFg5WnVsbjM0STMyTkxCRmpaUlN4bENVZ1NSaTgyMzZTZ3ovQm1WZFhMN2ZaYVdYcXFpV3BwZ1hIbGNvckVQaEVmMFlSYTJEN0Zxb0h5RTRWclBVTDNoK2ZCVVA0WmtTOEdFYzdzMzljMWtBNUtyMzl0MlRXaFI2OERhbEc0UVc1OTNtNjdWTzgxbmNXZk00Wngyak5iRDBlY1BudUVWWGMrR3grYXVwb2tqT2padTBtRVlCeHl4ZGo4L2hRT0kxRVVoSkJGQit2aHFEVFhESkRRbWlVdXdnMWdtRG5wSnk4enB1UDNJNjNNcGVReW5CRk01TFVmUDdYN0lybWJJWU5MdWdXU3hLL25jQ1UzTHdIQlpySkFvVStrcC9lVUlnT0RnN243VXpnOXY0Q0ZOUEFHM1ptRU1jSmQ1M1VhUUg1Nk9hRVBkUTRrZ1ZYcEZZSWtVeEh2WE1aYUZxaUMxRldPcWozSjc2THFKRjRhaGg5S08xdTViNjRuV044MXlXcUpKcmVqZ1RlMDJjS0hhcjBlcFMvU0ZJbldYODJNUmMxT3VOTDJlV2xZaTI0alJYNGtiOFpaZjB0ZkhOcHY5SXAreTN3Mm9vM1JQakVVNFJBaUJab0x0R2taZS9Na0VQa1Nvb2ZjSUVoYU93NGJXdXRHR1JxRlhGYUhvRjhxb3l0VVAxeFZiT051RkpwSDBrK2k5MzUzQXljaXMwQ3lXL0RxUkUwazVqc3RMNmlZTzE5dXFHMlpQc3c3Um40TXExMUxrMWN0dm8velZMaEVGNUZ0dWJobm82RzlOTUk4YlVCb3d2SmZsUWxUN2cxcURueUU5T0JJbk1kdGVqQ3hEWkVSRTM4L25HM1NLd1VvTTZEakZYMk5INUtxeUZmbVlrZHJQQkFJejVuV2FOODN5REJzMWFPM2gvbGRZYTV1ODg1VXQwZWdmZCtKVTJkazdxMzg3UUpPTldKRkovWjFaaEtSK1FzeGdBdmYwYkdCZUZVdVp2NGk5ZjZqQUhpYnhteXBlZTl0cG5zVGhWZ1hLaGp0aERyanJHeUdtRXJmVmMvd25xK3ZkZTNza1lsVDNTNHJoNUZrRnRSRE83SjlrRWpjenh2dDN3VFo5OThDbWhzeGNKbFM1Zkg4TkVJUDNxM0JmVnduNDNOM3h0aFV3Nkw5Zk50TUFEbWJTVkJHMTk0VEFQRFRleXk1YWtWeGJrVU1CR0hMMHpwS2dULzFWb3JrSWVOSHZIc2szeCtrNE9pYjR4Y1k5akJ4d1NlSjJwc0dzT2tZSStTQmFrSlBPUWo4OG5INUx5Mmx0aHAzeVZSc2ZIQlZNU3FUZzVMaVZSd3BhZ3NKWStKUG1wVFlFbkR3VjhMY3RnU0hQdDRCUk9WS2g5RURVQ0VRUmNGalZJY0gwZ0dRNGh6c0xKdE5SWGllcEhDRmxvcm04MGV6RXAyVzZCcFgzL1VCa0ppK0k4TERjOFN3eVVPV01jak5FbDA3VDkwUmdvaVhOM1Z1SjRFRHJ3cEVsRS9IakNmZnlDcHUyQ0xDTTc4VU1jMWdGaHVKYnEwa08wY2J3RURYVERGS0IzRUxlek9tQzF0S0FBTk1Pcnk1bUM2QlFOOVVUUGwzRW8rUmxmNEtJNFFsMFRkc2ZLVG5OZ3o2MVhoTkszWVdCZmdNZVE2UWtEeC84NjJSTkI4eWo3TUZLUkQ5aDlHYm5tL1R1OE4wbU1kQk9XV1VnVUR4VGM4Rmx1VmphT3BHcGMzaWFRenB0QlNPaUs3R1d4aWpQbmdxUWczcmVFZEorcWJjSHlxUGF3YlFsNmUvRm0wYTI5V0lsUVhWZTRmYWxNc2dsUDBPSjMrREVvbDJWKzdUL3pMYUVPeXFHbHBHL2VBTVpsNWt6TWs2SnJqbmJ4TDBXcGpuWDIwS0ROVUh5citaYzRqZzlqNnA0UUR2UmZEaXllOXJRSURBTzlPanlhbmRyQlZIS2RkRzVKU1ZmNEU1M29Rc3lyc1RLcjdzUE83d1huZlBDVnVOczBub2RySUpadlFHZlNuVUV3WXFYMnBiU3RlckJEU3RPUkhEcXFDaERjcWVZYTdJVUVsRjJQeWlHRnR1czhLaWZmQ3JRbUVkMFhWZ3d1cy84czBFSG5BOEhOUzlwdjJmNWYzNUl6K3dJc1d0TC9ZQk9UdTRFZzdLWmJITlRDNnE4SVlKaVNnRDI3WDFLL0FYNVU0YVhaQVZZQWZxZFphbG5TYWFFVHFGUGRCODQ0K1N0cGFiRkk1WWRyQXZwUG41b1dMSXdiUThham04aitGWmRsMHl2NmJNbjBpTWovRXhJektYVlNTZkZQdy85Wk1LVUl0UFJ4aVE4cjE3VHZUWVhQR1JNRGVZT05BUjY2YWJGT1JFMXJZMnlZbWRRRjNjakZrdVdzUHQ1UXVaUmNxMDN1L1RySER4ZnBnRi9BaGpOTUdGNDl2cUhZcHlCdzFaVXJReUdKWDVFSUZUU2hDYkUyWmRUS1MyNzJuSW5GL3dMbm5od0lFOWtnZUVEcUIra3AvVzZSMkl2clBwOXA1bW4wVDhyTHB3SCtlRSsyVkQrbkVGOHRtK0E0WDVXRE9OK2p5NnNDa3Z4NEdlMU5TOUQ5MUJkSG9BYkZYcWh3N3pVaDRRWW52WWl3UUNZNDdaTm1vWDM0elAxMFFtNVNET0RSY0xNd0FZbXhQR3dCcy9ZUFNnMUVSOVNDeTRCTkl6UVEvd1J5N3Jzc1NkS0kxWVlSVmlIM1ozUVRJaG82bFpqbEJlM1ppb2NucGQ1UVFjSzJkWGQ4cHo1eCtEUGl6YmZoNUhKVS9CUjQzbGRSUkFvdE9RS2hDTlUwc2xFc3huNXFZUnl6NmR6amo0OTNRVU9yUGl0SmNicDF5SVRUcCtxeWhpa0w2T0Z4Ri9jSkZsN0JoRHdRZ01DcDgxVzk2YkMxczhTSDdCUkIzS3NCUXhLWWNnZVlYVGpUMmFsSDVILzFLeHVYVk4rK2hRL0FZb04xMWorN3diWEhPZ2ltdmdyT3liUHVyakpWR0xucHE0d3NTcWFBRDZlaU1CK2IzUVhZRGsxTEQybHJQZHVjQ3dFTGgvTGZaRk5iTzdsUDBKSTBTb2ZQUWdjTkhzdkpPakl3M3hZVkVSRDZTZjFPa3NnSlVhT3EwOXZzdHZpanV5YmxsNUxzSjFlYml0Z3N5VWFZZ2hreDAzVkRnM2R3bVhiTXhuRCtjK1JQcnBMbCs2ZDQwcHB3UHEwUUZvbWVTbU1DcmtYQVkyWnJZcm9XYU5GY25QeXp1Q0FMOHJldVRoSzl4TndnSHpvWGl5T3VTRUN5QUtlMkR0Wi85YVVwODlTaU9OaEF5YkErcjd0YngyQlpLdUhyUDNCSENFM2hJVHR3RGFrc0ZqenJhSlZKR3djL3VaTW55MWtiSHNwZDlFOHBxWDgybmdOeUh3UWJ6T1V1VmVTeElHTm9oS0NkTWMybkFDRStGbEJwTnVzelNKTHlUaTFqTVZlcTkwTDJVVTFPemRpSjZKUWx5b0hrc0JJVFFRZENOMHZDZStFRGZIb0pLNkZKWXhvUHlKYkV0bGdDQmlvTFkySWxqTVlPYzdpQ3FMZGY1SDgyV0UrWGhJcUYzK1h4bnM3ZWRGbE9aRno3MkhDYUtSWTlWaEFvOEJKdU9SZGZwM1h0WnJsWFkzTDlYRUJjckdIM0tjeStadjdsaUg1REE5Nyt4dHlKVnd3cGVmTWdzZEpMQ0JlNWprQ0JFS3k4Mjl3TXdxSkdBdllPTHlveXVxcXpraUtmOXNtbXdWdGJIbWhFU09EZEk4T0pjRUFrZURqNGtCQ3p6QUNJSExKQ0VDNjFoSG5rWUxtN1piM2JQei9QdGZlQmwwQmhDZTJ3a2NQTUdXOThhZDU3dXpUa2ZPY2dxcnc5Z3BqVW1NcDRTTklEOGhpSVNMTytucjQwaGptbzd3ZTlidVE5VTNyS29CVHBhZVdDNUxLK1ZKQXBMekpWR3lOWExaeXRjSG9rMWhoY01Wd3VvakhMU1F6NkYzeFlVcnJtRUJ6ajJBRkE3Mkt2UmU4WVp6TlROQVpBYjgwaDNzU1A1aVg0eHQ3L1dzd0tlczBNR2tZSnJhZWNhN2U5OFpoUHpOMExYQjJsK3ltOUdXTEI2dTYzdnEya0NmbzVBbzRXdXRsVWhrbXVzeEpTbHUrVVIrbXpGVGJZRjZwcW0xaVBxSHZ6Z1RrM1dsU01DRW1Pa2w1UGEwVy9YcjlqZDA3MXhZM0xEMFp4RzYwcnJ4VTJNT05SbUlBN0Q4dTdGeklUR3Q4QTE0ODU4MmJ4cTVyRVF4cDZVZW8vbGZHWTJjUGxZSmJxMTZlTEwrVG5Md050SzlsVTlXaUdUMXRjZVZSL1lhdFptaHJtUDk0cFdsQ0E1YmIvRWhCcTVyeFVRUXV5ZzIycHpRaWNHbHR5RXVVelBrQjlZbzV5OUpvdlRrRTA1NGoya3VlK2NEYUUrOXg0K1RMN3ZTU3QyNkxlTVdRd2FCZThTa1lUVTZhR2R4ZmFZZDROaUx1ZmY5Z29lYkRUd096bXBCSU9LTTYxK2RSa2toY0tZR1hPRFI2TWlXSlp0bTU4SlpHb2E5OGt5NS8rYWI0ZWNkSWhRQnVuVlhJdW4wNW5PZnZ1bTJMVS9Oc290c3RwOVVjNEZucjZFVVdoSmNXeDJyUjVxaS9WY2NBWjZJS0RrR3pucGMvR3hQSlMwcEQ2bmxoc253Y0prZDl6b043bUhPRTdmcUExUDNIWFVLYUNSc3JmVXdqS1A0ckI0Q215WlRCOW0vUTlVYVFlNTdjWnNqd3JKLzlhVVVyd2kxTWd1c1QySDNTd2E0NmxvM2ZoVXlyTHk0WW92TnNtbHhIZkR4ZkcrMWIzc0JKOFpKYU5Db0dVb0NTMjBRd2RHMU9KeHhDZVhSL3pnQktwK3lYZnpFZk42SU9zUXdFenE1dXNqOUpPZitYUit4dmNHNVBneEE5KyttOTh1Tm5oTnErdnhUajVQTDA3Wlo4bTVmNzdwVWNhYlpubURwa0VhU3gzMlFnOERDZVFTWmRzSXVpTmMwcGROZU1laFpSL01yb3lBNzZwRVIxdFhSMjYyU2I4c0VhY1VrRng1aUphWGtEbVB5Mkk0UkpNQzRuMlFWU2JXMjJhamFQeTNrTjE0K3dwbm5pbHNtZ1dwdElkamhCWGRNa21CQktuNVdLRjN5OEdsaTZwS1hxRWxvcEpGOUtMekVwc29UcEZDRy9oUGVETHBCd056V3pwb1lzdGEzYkxCdEpLQ1RCbHZ1NUhHMVlCTjM0TXhGTkYrMTZyNWJ3L052NytnL2NyNzB2N2N4a3dVZ01zWS9HT3M3Z2JQN3diUjZNVTBQemFCSnZNOFcrall3eDE2Y1paRVduTGQvNDhNOWswRzUxUmI5WE5mcVB5eWNuZ2xaaUNaTlBYb3VjdVYzWDM4bittcFpzUHdIbkFVUEZlNGpSQm9TNWdscTgrZmg2am42aXpHR1hSWWFHeGpzMWx4OEpQcjIyYnhadzdrL2dGdTk1V2V6MVpjVXdueitYWlJzNG1icjU0a2xTMnQ4bEVKdmhiMEgwVnkvV2xTT3dHekl6M0JXRXlkKzFuZTZZRGxabGdUVTdZNjFxUWJEMmVDOGdHK1NFL0U1bittaUdTUkJ3L08yTlFnaXVORmM0cmh2YVYrRXdTd1pINXR6a0JNMGF6SVFOb0N2eVR2Y2RRVHowd2pwQmZ4dDlxWGhRaXBQa1M5L1FrbHB1RWt6eDBPMmFUblJuMnZIazFzTEl2R1FsRXVOWXA3V0hMbzVjaUdUSXFZcitkcC92TUlTSzZITERyRnhrUlVmWFlTRUx2WElwT29XcVB5c1g3L1VMQS9tYWxBdlVHRDhDaXMybVM2a052amFtODdUYUJZSFhuRk93TU9uSFlybTJxYURiaFFYTk1YY1RaWWc0S2xhY0dGdTlIWUVjbW41d1ZyeGRTWjczZkN3Uzg1SVlXRklLaUVpZVNHSk5ydittaTZmNHdjbVpmZ3lzaEZUWnB2VlRJR3pOUDFIV1VaM2EzTHo5T2FlT25aeXQ1ZzFWei9RT0d5ai9QbWtseDY0SC9CSHBYeGlrZStjV3FSRTBGd1F4QjVubGRZclpyWVVobDZhSUJKOEVmbWZjV0ZRRGpBanFySjhqU3RaMVVlc2xJRnNzaWx0a3VtTHc3K3ZiVkpsV0VsNVh4a1M1d1FZdDFwZzZobHd1cjdJS1pseThhRGQyK2lKTW5vVmhGcHd4MzM4L1FFUEZtVldzSUhpb0IzSGw2a3Y5UmJzYnQ1T0RkVjVwSDRjbXhDZ1l4UTNtLzAzUVdxNGZCMWtSQXAyZ3F1OUI2ZVZ1SU5TNjFmUVo1WUhyQ21XOVh2aXo4R2tLcEhhRHhwNHYvUndUelJhMklDU1gzWFRhTFJwbHFxaFE1MzdWQmVwb1VsbmRNRlVrWUNSeVBHTjNuVVF4eEJHaE8zdGRrRGZxanVFdXpDNGtDam0wbmN4cEM1STFQRTNVZVlUT3RqTHp5S1dtMElWWFBtUyszOE1KbnRVMy9CK3ZRcEdta0lRMkErc3hoU3RTdkpaaE91S0IzR3ZMVDNOYlk2QkhNeGhYbVk4RFZhT1J1MHVMeUtOb1lDc2RUUVl0WW0zRGJqeEFQWXpsMlR6NzNUSm5odUlBQlQ1SGZ4N013QmxabnpVaS8xRmRvWnd3TC95VTAwRGNKd2lvZENTT1F6L0tqTE9WU3pVeVk3Qyt3c0ZsRVQ3NzFUeGdCNkc0NFNIamRRaitnVDNKeFJkUkpaUUc3T1JReWFjS1FpRkZRZmtBTFBHSDAyRFZROGNIZGY5S0M0aDUyN1FuTDVUbFFxTzJHTU50WEdTcDdXR2NSY3FQa3VSSmRWT0x6QThnajF6dzgvMnAxdEhheVRVVkwvWkJCYXhham9vRS9qc0ptTnFxajVZVUM3R3Y3cVRRVDFiYU5rekt2YTZLeGxLcFZnaXdJaUJGMUVRUmxZbk5hb0k3QzZ1cUlieDl5cXRHT2h3UmxVRFY5dHlNVURiRjhOZ1hnRmQ4UTgycnhPeFVCeGk2aVV3RWdyellzOGlxMzFlS2NzMlhHZkF6WUc0eVdoNWF4NFVCeGVvNlN1M2VWb2daTlVwekxmTEhaS211RFRqTWxRU29tcFhkbVc4RDQvbjZpcHJ2YVlKcTZhZ3RRUDdIcENvd0xkUERzeU5NdnZ0bkpaOFNsc2pTdno3cmFrbHRIZFJmZFMvNkM4dGoyOGNEOVBqNFBkalloZzZMUVBnbkJLblZ3YTRuSFYyODlsUXlLbk1QenlYaW05bjRjM2NvOW1mOWNsdnB3amNrT1dqekhSZjNwWjhUWDBNSE1NSzNRNGpvT05Sai9XaytYeGZEWlE3SWpXcEQ5SUVKVVV0ME04UkMvZUQ5VlFqRVNKN0xyV285R2VKSUFnU2VYWHVDK0hQb213UHFWTEZhM0duT1E0akNpYWx1MndsY2t3MUZmWkFRWWJqMEpvVTJKK1N4c1g0ZVNRU2V4eCt1MGRoRjNaR0QxZnZ6bk5wSVNSMitTTlRWVjcrWmRvV1BydnZ5dWlHV0laVlBXRHljSldjK1FuUnI4eEtZQkxYZGxwR1FGUUF5bkplK2pDc2xrbzhnZEo0UWl2L2lsR1NVOE9wNXJDNm5VN1djckc0UHZxb05NQ0JHdnNBWnYreDViZURvVCtPTTgzMFpndHBpZjNQUUU5UmVSOVlxOEcrdDhoanVGWWJQUTJUckZFS3JzZGhCVjNOSFREMSs3b1dLZVdTL1lrL05qaC8zaTNkTTdCaEFFWFBQMkRIN2JvWFo3TlgyNWZKQVZYVzh5aWMvVi9wRFcrb2QyWEYvSXZ1R1ZIWisyeHVZMitFbXQwbnNVVlhKSVZLSnhGN2xNY2dsQlFHSk9LZzZMS010OUZkbzQrdVpjVGlCblJTR0RFWS9MemJwUFlnVkpZVTJmejJTN0xGUDVEcTlvWHE3QkdsaXB0cWhwZ25mMmxnTktybTZKSGplSE92SXZKOWI1a29DbC92SlJ3elRSNWJwM0hRNTBkcFU5QmdMZ3NmUjlCMm5aUDYwZmhFaWVGQlBHaGVYaEZGZWRXOHR2eldIdGJXME9tQm5vQlkyWXNzYjZqN2JTSFRoU1ltdVdKaEduVkNDbXVySkNhMmpUQXAxdjZwTHBHZytjSDdmQ3Q4eWovblBjMkVjemdFQUZJdGpOYTlnNzMwMVhCRHJhNnBhVVduZW5NMzRZZnFyYWdxOW5seCtpSlluZFZ3VEVHbkR2OVJrU2JGdkxyejdKOU1tYXJmT2ZBT0lmcitEQlUzSXpiQXU2K1dmVHZTTGFYdjcrSmplNWZobzFvdkNNZXBoaWdURjQxODM4Qmwvd1FOQ3pvRm1VSjJPc2FZMUJsSjdPT0RCTTA1eUpGdHJHdjFQUDNZWkhicHlIclloMjFNQ0tBUmw3c0daWllmcEdBbU9Ga3BjODRJWkk1UmxnR05KM3U0N0loclh5Qkh1b3FneTRMaWJTaHEvOXJzVkh6SnpCQ2dMZTZPWC9SZFo5WlJNbzZFb3hPVHlIK2hJUWgvUDJ6NDAvS2dZOURuS0pKV1dDM0ZsTUFkeE1JWGhjTEYzYWtYVDVzaUxxbEhTaTdVN1BnUkdsQkZ6dlM0RjVaYWZwNkNNajhXWWw4ZmlKVThjMU45TytyS0VqQWpjY1JCZ3V6amszY000djJLZ3JQcENaNk9Xa1JMM0tUc2I5cDNMQk85TjI4RlJsWjlCNzZ2aXlFbVBHcEEyQkNrUWtVckdwRzQ3RWtHV252SjVJSHBvWjYyV0toRVpRQmh0MXhMdHV2S09FdE11RG9CL1pQM0MvbU14TWcvNUIzWE5ETjl1aUZERmkxZ3hiWE9QaVIxU0xyZXVjb2N2b3dFTDAwV2F3dzE5eG5NcWg3SG1jZVFPck9jdHhyYXJrQ0NhcHlOUkRUbTc3dTJLaW1DRWlGUHI1MDB1VHdCdzZmdVExZUs4U1dySFJMdnMxVVVaMVpyZDJFT3VscFJXOWZocER6R2RiaHNZNk9JUTVvVnl6TFNRaXByWFEyUlltVlQzK0dWS0ZDOWhob0tPNXNrczlERngyc0VNeFY4ekdPYzlXa3JHbVJLRnlwZTY4SkxLR1BreDdRZ1YrTFUvQ3R0OWl1enZ0YzE4WlJHSWgxT1VtNTNCdlM1bWczZm9hRXNFeTl3K1MxZ0NqVThLSE15akZwSmYxSnBNam5EbzhYc2J5bjNGSjFuWHlpVGhONTVUa0pMWmpaby90WEdGRWU3TWtqTnNsa1JMUVl6SVYxZWlTOWJIMDVMRENZU0hYOXZiNzN2ZVIzcVVLWTBkalJEUFhmbG1RRlQ5dzVSWU5oYzZ6S2dOUlFWeDY1emJTbHd4dzhUTEUzK3dZZTBVb2tldlNvZ3YyeFRBN25EbXVqS3d5ZWhBV2RXK2owWUltVUl3SGt1enY4Z29KRjNhUStQdzR4eFVYakYyM1RHZndHSzZha09xZEhFOEdBcEFISTN3WFpGQThxQ01LZ09uK0lZS2xzSmNIK0JrZWVGekdZb3JLelFwZEdKS1JqbGcrSGd1VHZMVmVHSXoxVUtpUXNlNEVnTFIyRU53YUh6bzBPdFIxalRvdVJvVXRLaUlCRUhuUTdxTWF2RjZob0RFejBEUDdKbnFXK0dSY3VqN2VpTFBZck5sVnV3dXdmdEdJenUvOWt3SWNmcmhaREFXUEZ6d0FMUTRNVFpSOUk5VmhQSFJ1bWlzTlgxS00wdzdCZ2IydWtUT09hUW9qbUJoS28rRStmYzkvVWZJWG5nWHhZK1hIbW45OVIvYmI1cUM2MXQrV1BGbU1KNnQwY083SkZSVDVURWZJV1E1c2w5U1hNMnJ0MGxpT3g5UVFkNEozZzZzMEN0eW5PMmMvTzZ0bXBiakhaL080R3VhZXB5SmZlWlBKL3JLSnY1Zis1VXNVb1FUS01YNVM5MGExdlhxNkFUM3llSlcxRTJLbXU1eHdEaWx0bWEvMWM2b1JtRDlWenBLVVVRazBDcFc5bFVvQ1BXRk9uSzU1RnBxLzJZaVR0RGd4V3c4cFlNb29pOXJyTWsvZ1ZhOXhxVForQVpWV3lFV1FjSmFKRUVtN2dBSjdIcFBOU25EVXpqRTZrUGNEVlNvWDExTUdBY2pLU0YwUVcwTU9pbDMrRGJuV1k2d1BNbGxUL0JybDZBMmhYakVuWW42OWtiV2ZZY0lIam0yOVl5T2V1VW5VR3ArTVprb2JacXlOWGdJVTdxMEY0VDVtb1JYcUp6QWVnN3RkVDN6QXgveGsweDhTWmtoSnM4Q0k2cmpvVDEzYW1SV3F6NEJTMXNjM3I4Z21pUUFIT1dyQU1iZmZQV3FwZ0NJWHhrUXRMTHFXMFZ2S20vMVl2M1BCYXJXUHd4U2kzZ2xjUytISGNzVkFtazIrT0NFVEhYaUsvcERqMmZ6L0RPcjhGUm1nT0wraVBlRkhEL2RrSkgvM3hxV29kRU4zd3YyNjhYZEhWaDlDYitEUlBrd1pUeTREVGpJKzRKQ1dMYTNPQ2lOTGNmOFc1aTVQM2ltWWdDVHJURU5URmFvY095MHR2ckN2TmhidzhiVHkveWJjY0RsZW5xU3JMdHhUTWtMcC9FUFJHS2g5QlFkSnRtYUNhbDBuZFUvenFQZUNGQ1FiS3ZObGJFQ0hmRjFJd0FlcmRxL0J6Uk5SYUQzaXFLdTByTVd4ZkgrcGEydEZoeU1RY0NOOVVweStIWVFUbHBOZ2dkZEpYQTNrK0p3Q3VCS0lWS3ppOFNvODQ3STVRVDVuektIMm9naGd2QUErQkVsQm1qUkxyeHk1QjVHMkllSXJadTJSbmZKOVFNZHBBb0ZxaVpwQ3p5aWZZaGFuRjdiRVllOXhmZGxmSTR1VE9SeXd1cVRiTGgrM2VNTFdycmRmeDdaUlBRMVhINjFCTE5vZ21hNlpra01OME1hK3JLUDlrM0NEcnBkcVFOako0TCt1UXQ3eXM1ZEFabDBkekoySEM3R0RQUWhsUzEwOFVmNDJpRDJ5WVBzVXY2Z2dPQ0pVMFNURkNkdVlvMGVHeDJ1cjZCT3Q4c0V6ZlBqMFZGUHF4RG1Sci9pMWRzYTlIeUVQbEkzb1dRRUc3ZDNkbVRTWUZtMW43aXNGbDhqOHhzMWRrQTQ4ZlFGekR0cDQ5TzJUWWVBcDI1UGZoUDRFQkM0STVHdFFiSkluWThDYzRyQ1RvT1hvL0RZazQ2R0prbkE0eG14WGFWSk5KRnhpd0JGdUJ6aHFVaDVMWkc3S0oxa0sxZCtHSGRXcnlDL0h4Y01SQkdKdGtjL2tWVFZrLzBZb0s3a0lydUlLekxxZ1R3NTVoT2NoNlpTOGpHdzlUOWtKbWVZbC9ITHowYkQ4TVBtbk0zT1pQTytUdmhYazM3NjJFL0JUTFZQaERQN0VIbmFIVU9MclJHZHdsVVhkV0VwMHNKdWRud1RzeVIvTnE3SHUrUTlST3B1V29UZWI5OGtWR1hSdVRwU0FNb29saWF1dENZYlhFeGM5ejM4NmNJNGVvVVlTWDY1TC94Znpjemt4dFJvM1VYRi9PS1czMjRORzExd2lDWFRxcjRtdmlVNDh0TlhFWTNsSGx6YnBSckN0TzhqYmwxMDJwSmFTY3l2ZFRGSEhCZGIxSXMzVVdIU3lqUVRoSXp5YlkrVGlUdmNXaDg5ZGxUV2dDZTNYR056UCtrb2ZJb0Y2Qk1qT0dJL3g0dWswMUhhaDZJdE41OUhJTUFNclN0MWY0ektuTEw3YzBVYURDNEwzaDJ0WnJhMXEvTmVZRUdXbE1QU3F4K1ZSMHB4RlN0THlZdlhtMDhzM3dadzFWaitScC9pL2FYZUVTU3ZzZjBOVDg2cnV4d1g2a2h4TTcvVnhxR1EzbFJPL1VETDJwUVM0V1RUdG9Cd05ralowTFJ4WmhndkpRcnFEVFlRS0pZU0NMZmpVY0RvRGRyRlIvS0o1RG0rdWE2a2RsRkVCMTg3a0dYMnVFTVRVU3MyWWV2YUdkQkdaNU1DRWZBQXUxc1Q3bjBCNDRLWmFXWDlDWEE0blZnOHRqSlZuNktzZGFtMFM2NjJTSnIzTmhZdk11aDdyK3lwWVhUaGFQa1FROHR3MW5EWTNJVWJkMHFoSWE1UFEvU1R0M3AxVlBaZCs1NFlPZUhOcVFIR0plM0pPbmM3Tnp3dms3NzN1YkRHWS9oWlNTRUIxQzFkUHZJZTB6RjlFR2p2STA5VGhZcVZ5SG5BNTNqVitNcnNQVWhnU0tLVnlPSWluYldVaElwTU1Felh2MlFqUFAyZ1lQd0dkWDBvRXVvN0JmazBxSmNlcU04MGpGY1dFNEhScmtJNmk3d3pQMVBaVERMK295dEVUaTNVV25WMG5HOU1SakFVcGlRaFJuY21xUzBYeDhWL0VGaE5mdGxJRmNaRkZVZVBJeXZLa2lzNS81QTRSWUdod1RrWGtrd3VtMi9aVjRneFRUTEJHdVBPdkE2ZTJYNzVwZGR4RVZsaW03c0V3M3oxY0EwZEk0aDhYTUhlTTZsUXZkeHpsOEtSTVFmUEo2bHRXUjlLSlViWkpjcWR6NzFxL0pXVUVoVytMWm9lMFQ2bTcyWjZTd0g2Nkl4SDJ0YUZ1YjBNTzFqYlYyZFlCaUphbERIcTVVYjdJZXJPOW04Nm5laldwK2ppSFJNb256ZmFiekppRmRJbU9sNXE1WHk3d1FVeDA3ZkFpQkJMZEdzanBYZlFKcDdpYWxGek5kYzdDUDJYWFd5WnVxUWpvbzh4RU9wUlUydGdwRzJwbUJqVkhzZFIwVEpuYlhmTFFHSk1VSi9idDYweCs0cG5VbnYwTnRqMVRaZWl5V1JoaTVmWmxBUXRLemRFUjBDNWVTcXNTTHd3YkplS3N2KzVTNzRnS1dRVlFmU2YvSnk2Z0p2bDJmQStYeDlwNGJjM3d1Y0dYVG83ZXIvODkzeGF6QUpFKzJZMUJlS1VlQzMwMFNzZXd4RXgzTlR4YW9CaG95UGJuR1ozai8zWjNnNUpiYmdsYk5ZR1J1elFQWGV4L2tlYjB5d2ZBYzFYY3UzNS9pNVV6NXB4S0lJZW1yK0R6SHVKREdBT0VOdUlVUENtSmR5S2xhb3BCQUxPemxZMjJlbEk2UEZQM3hiaGdhRzd2enFFb2tHbVppVnB6QTVjdjhINkRwdExNaTc0Slg5emZFRm5tRFA5MTRSaFJ5ckx6cTlocEM4WWVkSEVmdWs3VUNLVG8wZWdpUGFuMFMzcjNZRkJhdDRBM0RaKzZtdzRsc2RzR3FpWWhGTHVNaSswTFlRY3E5YlhRcVlpL1RzRk1HaWJoS3BkZVpMWW1VNVFpR1M1QzVWSU4wUVNwMGtuNS9nYWpBSjRxWUZKNnNRTENWVUd2ZlJCUmFyRVMwVFlxQU1xNlI1ZXFZKzYyRi9icXpab1BIdmZzRGEzQ1ZmZFhVcmlzZ3JsbEY3cGZzZC9EVTB1NThienFjR3EweWRGaGZZaWhHZ3ZCaUlmRHJzSEdkekU5UkJGSWplQ0l0d291TU1GclF2NVZNNlpIKzMrMm5tNno2dGRCZUtzTmh0YUpqU1hpbi9IUUoyOVJaSk1uOWNqWEo3YU83N0k1UUZTOEZOeHI5RmNIV0lhR0hsdDRaQmJtcDRSRGpyVFcvejRaRkx4OEp5S2lsU3RxTVNsMG5TMUhSVldKaU5ITVh3eDRVVkhuWk1IOTRHQXVEaHc5emV6UFhUQ05FRnhJSE0xSlJyTE0xWHlvaWxSN1YwS1JxcGNJZWgyaDVOaGpka0RObzl3bkVBclVTSTJVeXpsRHlVN3RWVGRkVHk1TnhuV2UzeEtuQ3NyNUhkRzI1a3NLVTBvRUFWeHNaVVNCS29TRU5TbUs5K011UC9zdXFtSUkrVkxoNmRWTERtNSsveWMwR00wcSs4eWZJTmFXRlNtRHpFZ3JmV2RZNzFMYjFjbXlUZ2UxUHAvL0hlMmFmdWlSbHhrSGd1MWp0aEp5bHBUeFJlQkxBYkI1VldLbnZnMmVZN3libXhRYW8vV094bWpqTGhWb2F2SlgvUWErbEl6K0pSQVVVbkJqTTJ1UFRyNlRCeWZvcCt6T1dKWWJQSmRYUkQxUHhhNzVCRnhDRDhPSDliS2JYT0I3SXBqVnVMSHhQd1NOVkFzR2JtanZJT1I0N3ZWblZpTllhdnFsTzNJSHFSUnFSaGYvSWdWUi9ISlVNRW01UTkyekZ5YVlvcFE0alpNSFBvK2QyTjdLdENTcHBXelVWRk5OVXZiL0x0azNVbVBreGt0OGRJSkZyNGJWclpVTGRDNTYvQWJLSUNRQ3FLUGhDVy9GSXRWUCtYTk1RdU1wbXpDc2ZTdzUrdVZNVVpFQTUxNWVSWHhtN1dFZVNxNnZDOTc4clpwM0lZVGtmREVKR0dYY3g4b3h4MWJwVTJPbTRYYk5qYysrZFA3bm1TcFdobEhZbzJvT3pQRmVlT0w0cTAveHEvWVBaU2pFK0grRzZMUUZlaDdVMTllR2ZzWUxWN0JkUjY2RktTeVBIRW5rZCt6TmwzcXBnZmxRMHd6N0o0UmNkVTNZcDQ5NDVCL0JlU3dPaTZlK0kvWDM2aUs2bTVGUjdIMDUwRDN3a0RGNCt2SldJVnhYbmw5RW9wYzhETEdyZHMydDI0Mm5ySkJ5Y3VJSjBCcGFmVUgyYjZOMlBHZGJMdzFYVkZzUk5jbkZISXQybzdjdWc2enduZlI2UUFKekFFaFcrbnd2VmhhNk1zSHl2ZVBhMmQ2dkljdU04eFZ2WisvVzl0aUN2NzZtY3dnZTJhRkx3TnBIVnp4ZlpyN3ZHVlc3ZGFZMUt1SHZ4MExDeGVwK0laNi95MnpkcFo5c0RVL0dHbWRYSDdTNU9xckFlOFdpczRNYjFMMkpsaU03YTVqSnF6MlUvc1RiMHl5eGl4aHZVUlRtZnhETWNHcFNsTS95blNVcXNWZ0JSM0xRUFVhNUZBZG5YdDVIZkJTdUJxSUp5Ti9Nb0JxMnM5dFdaYllHMzdXR0xKODBMczRWVm44VVIrQTh2c1ZtMmwvazRZbXZHdHYvRllqYkNHMmMvcStlZ0JTcUhNUTBuV2JCZmliWTlRK1VsQU1YYTMvZVBJSE5jMFk0SUt2RDRJNnR4b1p0dXFra0cvOHBvMUFIZC9aVlVydFcwOUZGVEs4Wk1MdXdKSXZTZDZkalRXYzhEZ3dkb241THM0b2E3c3ZOTWFNZVhQRURUYU1Ba0s0dnNERHlxbmEzMzF5QTJoTVhUdTRaVG9PNHpYdkdyYSt1VXR1cHhmM1lJNGtHV29sKytkRnhmeEJvRjN3cU5HNERkVlM1NnRYbGxOcVlxeXZJVUxaQWFwVkFHMHFSd1B3blcrdmxhQlJqNkRLWHN2eVh3bDNuRklZYjNDMnBCeDRyNllJdWNlSUs3RzgrdXI1dlh6QlFpcTBmblRFMDRDT0pDREN0THc5UkFtdVdhZDU5dUN0QkFFWXVRZ3hndy91TXpFNS80WmVvTDdvOVIrcTkxbEpadVNmRTY0bUVzQTllNzg4WCt3ODdhZDlCWm1tZitTWFd5UVVjRHZYT2g0QW1GTkRPcWdEeEIxY0VUMXJXU0xOQUwwbHVXa0l2NC9jUDcycVpWVFZySUhlK1VSUVJsZk05cXFrbTA2cy9QcmlKZmU3dUdDUS83MkpWazdWSkVaRWlLdnp6SDdDZSthaFdVc3ZJb0FVUzZpUVBGdDJTTWE4cE1kT2MzU2FpeTI3akNOUDRCQVVLaTMvU1h1V3RocjhQMURGbFJQN09HM0FvU1ZEcXlITVZGNGtOVUhTbGJaU3N5KzAzR1BDTTZNMmZ5bUZqZk1sR3pjRXowdW00Sjk4M3dtVktzRE1DbS9EVWl1SkFybmdobVRrbjB1dThmTno0a0JWbFAyRTJCdStpRi9VNUpsdVBSN2hFaHp2Wk4xMzNhUmhMaHZtbnJUcUxUcGljYWR6eHlsUzltM09uWjRTSk1pcFR6SmY0bmJIK0RkdWoxTHA0eEswMEcvTW9iUjBDUm45Vmx0U3d6L0dXaWNwTGdmMWNBbmE0b09kSkR0WHlwbFFxWURkRGhBcWVLNlBwTmhlT2FjYmdPblA4QUl3QzBIVVdpK1ZVUDFOSGt2azdFdWtmNVV0d2FBZGVYWG9CV3I1MVUrU3VQWHNIYVhrNzlFN3ZhK2psbXUrSDV6SHRDNW1vRFB4Tm9HMWFuQVpHRFNWVm95ZGJFSXZGcEJwMTBhUnU3SFlzTTVnY1RRcng3eUtrL1FnNUlWZmgxcXl6NFJPMnlJR2FONStoTDFsTkplcmhKOVRQTmlsR0FRVTBYM2hjdFlFenExaXlsbFArOEZDbXRSaEdqQngvWlZ2V0t2NDdLcVVCUGNYQ1pFU0dObWN5VHBrWlB3SWdrTWVFdmVGN29hUFFPbVZ3OVFObW1mYTN0U0tsZ3JVQkRQcFVDTUNWYVA4amRlQ0ZhWFhiSTd2RWJJUnZhc2ZVTjNFY1RsV3k5c3d4eEdMM25vZjUvRjgzbWN4L3I5OXM5SUV3VEF5bjNGMWdJY1pyeHFSYkY4MVRTQ1NQT1ZPaTRPTjF5Z1RucG1lRVllQ1p6amZyUkN5WWNNVUF1V3haV3FQcVNRbVlEYndXY1NIUzFpM3ZQNHN6dGMyNS95aUIwMGdlSmtUcno5Um9jTW5IQzRYVmNhN0l2ZDF2WW9VaTBwS2Z3a1c5RUhmaFpYb3JUb2hYQnhPUitSMjh3VnRDL2J3Q2VMa21jQTNHbmlpRXRSL1lZaUpoVTdEZDMxOEJTdW8rdXdFSGd3dnIxOHRyN0c5SVlwbjRlREpsOG1CelpuQm1zTzNJR1NVZjJUWG5ET1o1MWdqT24vcTZmS2tTdCtmbTk2TVZIaDlmZENCUXloOG42dVMrdGFXdlpsMnBodWxHSUg3M01WamhVejE5YWM3Rllkd2RKVDJOeTFBQVIzb1U1U04yVnJ6Snl2bjh2c1FkVGx6RHFBK0JFQzcxTEpSQk04Y0NvR3JoY1lOR21tN2FNRlMzYU1SdlgrTDFZaHNqRDhBYTFtalJzUFM5VTlvei94a3BtakNLL3k2QTFBcDZTcFdiZVpnTlBzcWxtcG1KNzMzd1RzSTJaR0NmeEVicjFNcS9vRWRPbWhTVC9oTFdCb1NsVkUrbmhyWUhMV0syWEMxQ3hnd25tbDF6b3EwekU0d1ZPZnRiejl5R0VZZDRvWHFzcmZxQzU4MU5JdGZuNVNzRnJUNjJ0ZDlLMktLbGpQb0JpUXJlSFgweTM2dU1IdU12N3U4Vk9uaUFOMXBpS1E2STZYcGgxUHFqTC96aE0rWm1BMC9HNTZmR2RqS1ZKQ25JaC9Nalh5Nys2bE9hZEp4cDRLcGxhNnRURU1WemU3SnV3Mk1GeExwTk1XSk1KV3BZaCtqQldVSUp4MkRTZUpFaDBjTWtiY1FvRE83UndTbXg0MjBIOE5DSmxUSG53NmVIUkdZakg1RExaMlJPK1JyUFoxYzV3MGIzbTN6V3RDSU1wR0cvNEIzVUV4QVplZlVHN0tVYThxWW1OL2hDRWN2ZDd3dTBOM1dZMG1WWGI2blVYUWIvSytrOWVLSFFSR2YwSnR2VXorL2g0dUVaRUJyYzFHeExqemg2YklhcFpGaTFVbklkYnZ3eGxESEtiS2czcGVVcE9TWmpjdWFZWlB5cG9QOGkvdTJyWFhrVEs5dVdwd3FmRlBaTXA0Tm13ZDhrT01aMTd5MUZvN0FQcVZFbU9KNGMxUm1jcGF4cjd1QnU4a1BYdVpOVkM4Y0Y3TjR4MWVhZlZNVE5sdjU0a084dkk2dis3NHRvdTUxbjNtR1NZWFBvZnRZczc3OXVTZlgvY0pxRFRaUk9tMWFFV0Q0V2IxY1ZCa3hhN0g1TGx5Z3Rhc0dXS2pKR29WWHJsVHRiM085RGJERFFrblcyQVZNSWgrWXVvbFhNcHlxSit4dVJOVWRXZ2lVNERzeW10d1dOaFIxVXB6Yy9WQ29wc0NvcHRJV0hYcSthdkl5NHh1T2R2ck1hc2t1dEVCRytlMmVYTW1TU1p1OWZwYjlDT2RkRTdXK3M2bTh3b0ZwaGNUT0JqYmxQZ3BZSjVycFAycFc2V1ZNa1pCRXhXaVpibWRxcmlkenMzdkFObWxxTGVQUGRqRnJvMm9QaWRCODVsa1pxK1Evc0FIWVBkVmszQnM2bjFHTFozRkFKYjdnL0s0T2EvVjhYRTlwTVRway9JVmFyS2dPYlJkWWZseU95TS95a0dCYWRubjUyUG90MTVqSlJIUm9WYkhPZEloK2dacUJXN2QrYXBNcUJTZXl3RGlraWsxZFBSaEhqTnRPb21vTHdxSGM0d2tRNlFDeUJiSkh1L0YvcXc0a0Q1NHZ4SUZBM1NyWWZMZkJoTEVrMzdFTDczQTVjeU9kdDhDQ2dZeG5RL3hBSXYvR2FEcnIza2xoUzNVWDRQNGxaOVNWeGNGWW1VVGpRaWh1QUxLc3lhcytKSTlkdW9rNFNGWDZPekxKc21HbDZBMU4zek40aEFsZXk4cVlNSGFCZHpLb1BZeFFPSGI1NHNnZGs4c2pTRzdzblA4a0NVTm1sNjFPdVE2ZkJUTmFOOTlkMVM0Z0prRVdpWEFoTWxTRUNtWnV5MzJGVWxrRmNwNDhCZTdQK2pZbTRkUmNwU25YdG9sUEQ4NWRvUTZNL2t4MGJzREUwRTdkWTJLdmhWZjZDM2NiMXloZWlMeHN4SG1RV1d3Uk10T0xwNkNZS2M5a0szenE5c1hyMG16SExxSnBFczRobEpqcXFrS0kwczA2dCtIaTV3K1RtMmY5b200bDJ0NGlESGNXci9tcVRZVjc5VEJndGcxMUFBaUloVHYwZGdraHA3SHZMaUl6M3U3MDZBOC9xdjhNV3NXMEFwcjVKMnBtK1VvcEFzUm5Ga1dtK0dWUWRRSHp2dXJuYTBRbnNmbEgvVXo2dUxWV2Fmb01IRkUwT21BQ2I5QStvWStaMWdsQWFHZHR2TDFDUzNUL2xoZnZPSWNvdGEwTy8wZlB2TFVYbVNMVUdzKzNZa3gyb1FZUTdQSmFyZUFFeVhOUUYzVm1XV01pdTZ3VFNBanNtclR2NWxTdDRLSlpabFlUamlVNWZRazB6aGpYUHV2Q0Z6UlA4SDBMMm9CRlh0MkJFYVc1TDE1RW4yTWFmaGxodjFPaEthQzJERk1yaDNiLzFVMVlQL3RuWUtRWG1hNVllcDlGQ3BJT2p3emsxOTh6Wk1TK2RIT0lMdHA0RVo0ekkyL0czelUxUHhkbHhlTTlaL0tMT0U5SEZRaFQxUkQ4aVc3dXZySUVRSzlyMVhmc2hvL1JTY0k0cGxKWnZPSEhDdXc4dFB0ODJPZjViTU83Q0VkbEcvTjVQM0RyOU44VHBCa0R5dEJOcEg3NTZlSDB0QVprblhuL280QW43c3lQQk1ITngydURKSHBFanlhVnVHMUlIdmNiRkdPS0F2UzNyVXdpUmtpMFZSZU1aOEhyVFlQQ3pyRW9HejlpUGp0T1J1Nm5tRVJQeExmZkovUW4waU14MkNlb2V3VnZnRC9kaUtXZ3RaUVdYakFPRGplaFVpWExmaHphZ2c5Vko1VnNLNDIrNVZiRXYwcTN3RUluZlZ3bWl3ZWVRelpTUUwrallGQ0ladTBSUlJ6SFBJcUdQdEliODg0WHJzRUttdWJoNFFzL1dzamhDbDNkUDRGdzk2U01TRVZBanBtMnUrK2lhcmdvZm1LNVB2aTV1Y1llWHpwN1p0cUFaVW4wVHkrZmsyY2hwb2lsaEdtMWRKYkcrdVNYVVZJSTRRQytIb3RCNFRaWHdKSzVpVklnV0ZBOVFYRFdTRDIrSDdGd2I5NWFnSzJ1ZW1vMEtxaEV6SllWdjhnYkRsSC93MURCYkZ1Z2Zod24vZ2RnMnZBUndRUUNUMDFPcThPWlpHeG0rWWhiMHFJQVczUWJ6UUVENThPRVZNeXE0NmRJQ1FxVm8vejNiK1NnKzQzaEdUZnBIWUJhWHY3YU01dWZvenowL2N3WEEzdTRnRWV3bVAzdGhZU2ppVytoQy9lR1Bia0dSdEdRVkhydE1JN2dkbXlCR2J3UVppbXN2R2R6VUpuekdtNTk1SW5DaXhiMWtvRnRUeDhDeXZ2V0dhY211MjBUYUVDbXV2a2FTRXRPUytwTFdDRjh2Sk55Wk9TOGV5SDA2S0hlazhzUTRXQW1rTGNCTFBaTUVteHJ5OWFlRmRSaVgySjRpbEYrOExRUGhPdTc5S2I0QWlNT0dlQ1EwR2Q3aGM4RHdNV004SkNuZm1wSzZuNEJSTnJOM21IUC9aNGVJbUlsK1B4QVErUm5YWERNeExiUm1TcDVXcHUxSURBQlBDWnhmMVorTHhQOHBkQ2swQTJZM3lWbVYyNWlyMDFwcWNhNXVEVlpiUTdKNHdSMVdLOHo0UmFPeVg5UHBnQkNmdGVPSjkxZS9TK3VzaDFtbFdXL09XNmhIUEFXZVg4elc4THkzdTN3bW1ubGg5MExPZUM1MCtlQ0NPU1JjMTk5T3NWblpMQ3RIVWpYOGFyNWdlRDdYcWJMVXVNWGM4c0ZlYk9GOXR4WUxPQytVMVMwUlEyd21JdStJL0VNc0ZSOGdjNi9tQXNVMDR3SU00dFgrM1A0NUpFZE1ib2J6c0dXK2lWNlZNeklaTUZ0OGcxNzlUcGkrSU94RzZoSTBKV2pUOFRvMjRBOTlCMHZudzVnNStqM1EyWmx1TXFqMzNVd1hONnFOZW1zbEFlajhKUTJnaWEyM3FxaGcrSDduNU90ZjcycCtKYXJmdk9YaWtaMXJxN0E0SzlJRTBNcFNOVmE4WmlpNkxWL1VrOGVHYzdYQUtEcmNNRVhTOEhuZjlvZzJFNWprOUcrQ1ZtN09oc2tEQWN4OE1Uakt2bDZMeUEwYzV1VVNORDZNUlJTOE91dmcxSzZsZmVuL2VBYlVlQ2ZtTnJNbUtjc2hURG9QK1ZadTVwc3VKUTR2eE5xMmRnSnFtSlZHVHA0Mjh2NVRYYlZRcGw2TEJycThvbXh5cmg3RGRxdlkzZEtSNWxMSnY0c2plU1FCQUMrTkMzVUZDVnNQZFJwZThIT0JIajNVaGFaZXRscndYU0o4ODBpZW1OazRaVVlCNU95NzkveXlQRFlVdVpuTm5mNmtBS0V3bTFvUkZXZzdWTkdabTJTcXg2V2kvek9NbHVudFprT2x1ZTRtMjlYd3FoM2N3UVFMQnByTEw4VjNPTGpOaVVRcFpGcWw2aUxPQ2JEOGxyNUxhMVBVL0Z0Tkl3clZHaUJETnB2bGFVekl1UnhsWG5GNEJTVG1DUUVqNG8yelRwVTlkUnJ5cFR3cmxITlRxRUhMU0RqdEdadmlHWklPV2RqS1pGUTJTMGpRcjB5RjcxKzA2cmJKT1UwYldrV29Ub0F4MGxqS0dNc3VzNUY0RWx3OUV0TnRZNXZPVzN2TUFyamUvdWlaTDRobkFYT3JabHVsVHBTYmtDdUpMZ0VXUUV0dHNTYlNLRTVsaHZmK1ZoczZML3FRZ0xzTFpNNVIxa1ZacTdaZFFqYkhwUEFWNFV1emdkVExteHlPdnFvVHlDeFJvNUM2VWVsbTRxWXJ4anZtS1hyamFmeEdyZjdFbFNLelBBcmJuM2I2L0pha3dPdXAwT3hQdWZMRm44NkJxODkwUE5Sb0xZb25WVDVIZGd0YzMxTFZiQjRtak5DcTQvMWpETE9Ib0pjdHl5a2N5R3YrMEtzbmRTZ1pkVW15cVV6REJMbCs2Z0MwUU43UTI0c01PSnk5SU9DV2g3Yi9WazA4MWFhc1dVS1RRaVNqYzdpUTBETTJId3pyOUVKc0VYUC9hbDVZT0hIbjBIYlBUaU9JcFh3TnoyVCtNMldGdkc0UEpGTC9YWjN3SDJLdUs4a01zRnRvSzFxYkpBaFRZbmJibllZRFZUdGl3d1Q5RHZXWG4vMEtPcit4aTZwOCtVTFh4aUJWWGx6TGpOL3lkcHRoamRNUmpxd21ZdnV6UWFKTWs1TXJqY2tCQnpvdHcySmEvTnNUYml5L0JON21UZE40c0gzaWptRzZ4Y2dxRHNNdDZNSVpjVDJrU0NYVnlxUWZiUkVKYnFjSzV4dUJ6Ykw3QzFqUUUxRDZKbklYaGt0SzJ1ajlaSXRNUDFhRlR3YktrclZ2eGhxUkp5TVRwOHQyT21DTDRLTmY0R08zajFYV1l3RHdHNFpzb0wwMmpNOGU2RVBRaVZ3U0UrSkpRcXJDaHZLUzZGbEVzYi9QUVo0SnFnOWE3TmczUVB0eTZjVFllbm90RGV4KzJ6cG1ON0g5VDhSYnMzeTF0MllOVXhqZWwrOVIzRVVlUk4yMG5XeGx1MkJYOTgvSWhoSEhZa3grMUJFOUVncWJHYXZlb3BKUjRGQUdEWitaY2wvUC85a0FBUUFhQUVBQUFUQUFRQUFQQVFNd0FnQUFBQUFBN2dGbFFBQUNBQWtDQVFFS0FnQURBQmxVYUdseklHbHpJRzltSUVacGJtZGxjaUFvTXlrPTwvQkRCPgogICAgPC9CSVI-CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24-CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I-MTwvTWlub3I-CiAgICAgICAgPC9DQkVGRlZlcnNpb24-CiAgICAgICAgPEJJUkluZm8-CiAgICAgICAgICAgIDxJbnRlZ3JpdHk-ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8-CiAgICAgICAgPEJEQkluZm8-CiAgICAgICAgICAgIDxGb3JtYXQ-CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24-CiAgICAgICAgICAgICAgICA8VHlwZT43PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MVo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU-RmluZ2VyPC9UeXBlPgogICAgICAgICAgICA8U3VidHlwZT5SaWdodCBMaXR0bGVGaW5nZXI8L1N1YnR5cGU-CiAgICAgICAgICAgIDxMZXZlbD5SYXc8L0xldmVsPgogICAgICAgICAgICA8UHVycG9zZT5FbnJvbGw8L1B1cnBvc2U-CiAgICAgICAgICAgIDxRdWFsaXR5PgogICAgICAgICAgICAgICAgPEFsZ29yaXRobT4KICAgICAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPkhNQUM8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5TSEEtMjU2PC9UeXBlPgogICAgICAgICAgICAgICAgPC9BbGdvcml0aG0-CiAgICAgICAgICAgICAgICA8U2NvcmU-NDc8L1Njb3JlPgogICAgICAgICAgICA8L1F1YWxpdHk-CiAgICAgICAgPC9CREJJbmZvPgogICAgICAgIDxCREI-UmtsU0FEQXlNQUFBQVQvY0FBRUJBUUFCUDh3SDVnd2NEQ0FyQXo4QUFBQUFBQUVpQUVBQUR3SUFRQUlBUUFJRkFBRUI5QUgwQWZRQjlBZ0ZIUUVSQVk4QUFUOWJBQUFBREdwUUlDQU5Db2NLQUFBQUZHWjBlWEJxY0RJZ0FBQUFBR3B3TWlBQUFBQkhhbkF5YUFBQUFCWnBhR1J5QUFBQmp3QUFBUkVBQVFjSEFBQUFBQUFQWTI5c2NnRUFBQUFBQUJFQUFBQWFjbVZ6SUFBQUFCSnlaWE5qbWNvQUFabktBQUVBQUFBQUFBQnFjREpqLzAvL1VRQXBBQUFBQUFFUkFBQUJqd0FBQUFBQUFBQUFBQUFCRVFBQUFZOEFBQUFBQUFBQUFBQUJCd0VCLzJRQUl3QUJRM0psWVhSdmNqb2dTbUZ6VUdWeUlGWmxjbk5wYjI0Z01TNDVNREF1TWY5a0FCQUFBVVZ1WTBsRU9rZFNRbFF3TWY5U0FBd0FBZ0FKQUFVRUJBQUIvMXdBRTBCQVNFaFFTRWhRU0VoUVNFaFFTRWhRLzVBQUNnQUFBQUUrWXdBQi81UGZHMkFVTFBjTHM0eXpxMENpVU93aGRLWXU3QTBvN1dZcnhjc2NVc1dwNkpLYWh2Z2JraUlveFN3MHpZbzlGZllFTFpmaEJNNnJwZk9BZ0lEeWlJZHhOaUo5Y2FSZTlCS21jSzRkbWZ6QWdJRHhBR2JyS3B5bWFZUUwrUzRBbzZqSjdNajhCNEQ5WWhCZE5UMXBLSG53QzRRQ0xBeE5UUk54MVFEM2cyNUIrU2lOQXQvSFdBQVlyWGh4eDQxL3FpVFZrS3VtTjhMTnFEVjlsSFR3U1crQW85UVI1Z0FxZ25CUGJ4UlYrRmg5YkNHVEZMMnVMQWFLYTYxcS9LVEF1ZCttcW84TDkyZ2lSaGdDT3dtWml3cW5wRnE5ZFN3WlFtQmpZYkxLb3RZQXN1a0Y0OUZCc2kzQURBWnZ4SEhncmxuc2tuMXFFQ1dNTFlGVDJmdHovdkZBeGVMaWdMcks4ZjFHc0RReEx1Rzk2NWc5eDRHNGRNQUFjSVJxemh2c1lVb0U0MU9jRzVJMGN0Ny9QOGdBM0VDL2U2ZkVVdmo4WmY4TXMrWnd2Y0VuMHQvcEw1c2wzZ0ZHczB5N0IwaTRIUElmU1plTlFYUlBjbHQrR3I4aS9PNHBaMlpxbEFObnhCRHduejl5QmlDczYxTEt4Yk9aN0ZxMElDZzJRRjJrMVBGbE8zRlpQcDM4NUpLTlFCUkN6RGlFT3BMcjBFZHFINTY0UjZlM0w3WHRBZUtIZ3VwUkxPZDlZRGtIRFdFb2IyYWUzQktMc29jRFFENUJuNUY3bklOU1ZlUXVKUHRPOEVzWWRHYWJwM0I3eVVDTzVHMGErS2RvcDFuQlV4SjVPSGlKbloxblpQNGFROHpNeFNBU0xySlFIakV6aU5temNSM2EycEk2dFFiRyt0ZnYwWFJ1NkZLK2gyTFoyKzZaQTBVOTBJYUQxUExRRlN5QW02TmpCWi9RYnlXTnhGdjZXZFNxSG1yd0xOa0pWbHl0UHpYZ2ozRjY2c2Q1VjZ5eE5UV1dTcXBGNWx0em9IaFVhN0JDenRIQlZGamxpemcvZjFOUXNPay82SnJRbXgrRVNEeVEzdlNWSVd0SkpVa1RBUFhvbzdLcG53UnRhME1vMitMKzZDOENCNlJxS1g2dGcwY0FLeFh5OXdxQWhvS1ArRFFNaEx3K1BpeHZFRE9vOXpLRXk4ZEFvNlBvTzljdS9QVDRud0FJbnBreWU1bGZjckJMWHh4bEVhQjJzTGQ3QU1lai96WXJTakNFUXhBSUZ0YnhTS2lXVW5HTHUrTTJmM1J5MUtvbXZvRG5VdHJJMDV0YjRyb0Q2bGQyWnUzOG10S0VUeHdVNW8zMUl5N0VGQ0xvamtORzV6U2RhcUV6SktaN1JwcXc0bVRLeitUSXFvMjhRUWZ1N3BVQTFFY1JFbVRrWVBsbFZjY2V1KytOVFFzU2VrMy9BRTBsRHRROHJjWGExdU1vVGE3TjBjWHBNVmxmRWhtWFNkbks3ZllhbGcwM3JUN2VIa0Jya2tsZStIY0taR2N0NktBSjJFa25nOFllK3lMSjdnMjZLRDE3TG5uNGdFUzdaRS9Ib25oQWR4UkcvSG9tZlFuT0NiVmVYcmFsOFdoWkRIWWFnSHd1RE9lWlBOUGhFdmo2MUJ2ODdxK1k5L29SNE9VZEoxNUV4WlFYYXVQSU5heHdlWFE1dUJPOVg2ZmJxeVpzVmhQeU1uUnVsVXRVbUtQa1N5R2VMaGdRWEdpZmlpTDdubWcxUE9DNFV5cXpndllidmJDL2M2VDhJVm82TDUwNGhQdXJ3UDRhRHBXODRHRTRhMVJVN1h5WXhjaEtRYTRBbzJSM09QOFNFWEIyaVBNZ3Ruei9OWHBJYW85bUMvdU44WW9SY1QyRUYyZXFPYkZyMFFDdDZFcVVkMVkxNGFoQ0JHaUpCTWF3bmtVS0VOa3djQ3BsRWtqMytuWFMvZ2Vuam5DS2I5WDhuTlBuTGVQU0NObERISjZjUm0rQjdkVEdLQ2lkVWU3QUV5bkZUQm5VekVzVUxpb0YvcTRSRTlVcWtqdlh4SEM1SUFTU0VRamFjN0ZINzZ0R3RiMlVpS0NVMTUrbEpBejVLeGJYRzFzUlBJZnZER3U2NnBEbkZNYitGcjlPcnkvOURvU2FTT0VwakhQTmlxS1hKVHJTQ3JTRFRMTm9acTN1L29mdmdCZ28xak1OMmRuc1RTcHBNMmJhN0Z1Z2hnU3pJWm1DU2pCNDBjRnFkT2RabSsrUVRuSnhESTlmK0hLS3JEakNoMVVBYUN6Qm1HdFVUQnFDMkhCbG1PdFBDMnd4NXg4WXlOT05ZUGhQa2t2TUlDd1VnbnBmc0JaUCtDb1BkbEJ1dnRQTHIwWkthV1ljK1JZYXNmSC9hL3Vjc0RTR1Bna3Vpbk5UWHRBSWpEVDlESUVJOFlkMVIxb2t2OHltOEVjckh4a21HL0hIQTNjZFlMTzg2MStVOGRLTEhHbVlPZE9PdlhtdTJwUGhFMjlKOFhhQjRqK0RlYkk5ZEs1Rmx3OXN5RVQrd0Y2VlBnc1h1L0VKNG0yVHFMWjlOOVBNK0t5UE5rR1Z0N281MDFBMWJCU0JHdmNGSGZ0RGhORnhDWmltWVY5RjhvYW9jMnRQVlJYeFZvOHJic2w3MHhycWhXN055MDhEU054VmxXeGltTXFSbFZzQTlPS3F2UU1LWjZHWUl6bDNKQithYzJFM2RaeHVsTWc1YlZjVzJHTlQ0RjVBbUpYWFplVTgxY04vVXBjWjh4bk1UWEtpK0E2YzBqOCtUMVRzaXhOU05QWlNOajRLVTZobHBmbjc4cFluUDlwdXJwY3ljZ1REZ1BFNW1kcHlYTEVhcjNJQk51MTBqMWVDK2wrcGZBSEtOaDBGRVNFcmJRdlc4eWg1R3BraHJ2Y2lIbWNGWU9DbTg0YzBOemNFY3ZjLzBzWFlpMURFL20yVTkzbVlybXJobnNhdFdUbVorYVpmUENQa0Z4ZCsydW5uMkgwNStzUUNreWtJTUJ3UHJ1Z0FtbFVBeXJaTzlPc085TTJMdTRUVlliaE1odFpUcWhYN3h0Q2lSc25zUi9pMUs3TXVIMlRtY05VdmFCdnhZdStmcWpjbTdvQmNzQm1XbFIrYko0RG5lZDNWUU1ZUUFhQ3ZkcVhvTnBtbDArM1drSThKd0QwaXlJVTlXYVdaa3JsUWo5TU1RdWtBT0R4TEJyYS85MXFjSWRyUUhrZVZwekR1dVQyakUxd2U3RVhKVTNiRlFsTGxLOVo1Ykx6WVQvT0NNNzBLb1FPU1p2dnJPS04rTTFIdjRzd2NaSnU3ajdVQmh1TTlXN0Ztc3l0ZDhjUFZmZk9iRGJVWSt6dEpoQ0FsZ0hMUVNOM3RGbU9BMjlkNXFVUFVWOXhsOU5yNHk5UEsxN1E1Yzd4OGczT2tXcmxmUFdiUkpOckRBNjVTcVhDN2VSdFhMTUZDaVZpRjRNbSt1cHFUV3VTMWttMUFmcVBKSjRBeFhEU284VjhROEg4UllUSXBIYjZTZnlJL0MyQk9xN1k0SlpidDI5aXEyUmJBU0xiVnBCeFFLTnlGRzVlR2ZCc1NWVHd5L09vWC93cWVWMGFoSFFnR3RiSWMxcGtwQU5DZ0pMU3pEaTQvUlYybnV6SzVGVlJRb21KWld2TlNTVUxyaUlGMUg1akJIS2g1ZUFFUGFXalNoS213bWRWTHc1c0RreHQrem9KaEVHbmEyek52Q0s3VkdxT3FvQ0l1YWhKNGJRQkNYTXkyZlQ2U2dud0I0RlQxN0MvQ3lqb0NWTnFyUVoydXIvY3d1L0xMMGtwUkdwbHBuTjREd2JzU0xCUllFOGVFNTJVeUpxajVxSTQyOERLZ2FpeFFBZVlISGdCU2FkUXFsMzl6VkRvakhqRnBINUsxcXZZWHo2WjdmUjNUQXhMbkgyMnlUZ3czZWlIYUl2Z1poNisyK2xaZFJsQ2k2b1RoamVWTm5uSWZRTkV0bkpxdXJrblUrTTl3YzZRNFBQQk5CeDB5MzFENHJZZXA1eURHNXhhV2VIMzV1c3Q3TnN0Yk55OUpwdXIzclhyRjVTUEc4bi9Sd1Buby9WUEE2c05lRGtQclJzd0JFY1ArRU1xWWV6V0tHY0Y1VGFselR6TW1OdUdIeGZ1S2V5MEJ0OXI0VU14a0tDUDRSR1ZHYVBXV2grWlhpUWFPWnNQd21LN3VxSEowQWs3VWcwbVQ0dTdBRzcxY2taMXEzbHVQOTZWdGhaNWR2WTZMOU5zR0lUdGptQ2xLUWNWdEJ5MGU0ZmVJVEpBUGpsUVBLOWJPb2RNZW1pY2ppRkJnVWF6dTV1NndiZjlad2Y1UTRSMjhnODZUT0ZVa1RreGlKWnB4b1F3bVBmTmZ0Q1BHQ3duYlQ1VVYrWkdNQXQ2ZnRRWFRVRnU1clR3VVdmRy9VeGhNQmtMRFZYNCtlQVlFYzZ5NGJLZVF3ait0d01scnI3MzVZbWRIcWhKeUloR2RMd3lSUDJlZkE1ZXBpVVFVZ2hSd1N3Uk1YU2lMc3JxemNRWS9wRTFROHh2M3V0VFZWYmM4dnpKelFRWkFUWEFMeXpKc0xxc216VWFMNlZWWmNtbjNXQ2xQNjA3U3drSGR6SGtCejE3OEZNcWdJTWk5c1dGQ2Z1Y1ZJTWdMcndQd01PY21CUEExMFQxOVJldE5qWkNuc0FHSGg1YytZRE1WUk1NWnNzYUNWcFNtNHpXVUQ0K0xuS0VhU1dvbGpUM3ZqMkY0bTZaeUM1RnM2RXhZbEtqT3B2Z3lYNnorRUtiOGEvU2VnNm5CN212R1R5N2FvRVJ5NzkwQllKcjZMQ0UyUllPa3hsaTB3MEZ2UUpmV0c5aExXTlZTdmdldkxVTjV2Zkw4MGpKbGNjL25IYWZkZVRIUS9uTXNCSTlKVHpKVklsR0hkcE9FdDFZSEpCcTFrd2ZNS0JKRlREYUZhV1ZHZlRGY0gwYis0N0pZNVpOOWszUk1scTdoazZvOGh5anhVUmluZlBFK1YyVnlhbHFUbFI1Mmt6c0pnMU91VTJuY0U1bHZONTd3V0VVSDNqejRaYnErQkNjV3ZFOWRMeWpSblRVMDRNbkxlczhqbE4vREg3YzNPUklpY0pqR3oyajhNNTdXS0VvYWpXOVBmOHpFQjRTc3NuclZ5TUZadjZlQi8ySHBpekM5WDZ6N1JYSUZibk5qWFNxdXRZdVM2b1B4VjdpV09KQzZrUThvZ001WVM1TGdOQ2lOYmtLT1FxUWNhcUt3WW9rcVR2QllnRnY1cGlHQlIwVE5nbW5wRXlvNVo3akZPbWQzNGNYTnZDckRoR3VURG5KNDE5Tk1pSjd5MmRrTFBmTnZYSW1kZGV1OExiRlBKVEZWTStXcG9jM0V5OVJMR1VZWTlvUEhYdXZmOGdkSkpQSWh5VHU3ZU5yMUtqSk1qSjZzTVQvbDlDTU1lbEhZS3ZkY0dtR3J6ZkZ1WkFEb3pYb01XYVpwUEl5ZWZDWVdLaExTNXVXcnE0OFFyU0dNZlA3M0YrRDRGb2FHV0loNWIvYjN2Q3BQM25MMHZlUkY0TW1XTDVxY0xCbUt2OVBqbVVzOWRuZEVjazRsNDRRK1NtWExPZFNkdkFYbk9NdjFFcDZYTVdzWDhveTkxWWQvU0NEa3p2dm96dTZRdzJTeFRhditjQmlXS1JXakY0OVUrZ3FTZWw2dEhVOTdwdCtReHNaK1Y5L09La1lnSFhlV0hKZ201REdmTVRVcGg0Nmt4ZFZ5MERHRGxoMmRxNHNtb0plQUN1aERsNlc1Y2prK29Jdk45OWVvbFBBVTEzNk9vYjhwc2VpOWpNV21aSEkzMUt0eTdQMFBpK2xIcjZpVXdNRjFMNmt4SEt2d0JrRDRWMjlIeTd1MlBTaFBhTm1HYURxM1haZ3BLbTBxeTJ5eXhjcjMxKzdDbTZQQmx2ZkFHOE14Szk2NUx0eHpCUlc2RjZsRE9UbXJ3dTVnMmVuREtrTlVSRjQyMGNxWVJzakNrL29KN1I4REFyaHdOY0NITExsZkIrWExkbFhhSU14WllvbldSbWhReFdPREtmajYxR0I0V1lYZkhPUkxwdUU1bFN2R3JJdEt2eHJhYmR6Qi96RHoyWThpUWRXVWFlNXlPMThrNE1xSkdhc1h2UWRaK1g2dCswbDQ1elpXY1czNlU1WE42NldMMEMxWVVMeW1ZSjQzbS9OZkNVZmkzN0VlWCs3VG04dTBTcFk4N3BhS1VZdm5OWVA1anZadTB6anZBZlVjRGJJZEpUMldjOGV5U0g2NUp4anRPWDIwaVNmR2p0QkQ1blc3dmplNE5NbzBvSC9ieVRHUUxLdTVyRGtrcmxDS01wSjFjTXphQWo1TnVRVzlidjY2RWNVTHdNeXV5aU9Ta214dWtHZEVURm9VSktLZ29zbmNGOVVOU045NnNLek16S1NkZWh5OEdCUC9mWlRlTjVZa1J6OTIySkxLdW5iNmxqZVV2ZXpFZmc1a1hSYU5xbVNsZzFCa0hlSFNnMGVFMTAvbW9UeHYyVDlwZURkSUVCZHRKK1ArSkptcWtIeTlZc1hGREU4bzdTSmUySjhDR0I0UG0vZWRwTlVjOXZVMmRUdHJXYUlOWk1jNHNkNlRJVjltblhJSEJGM2xtd00xdjFVUmY5WVN5WmNKL0dOeEVVek9qc28raXNDdW5tVUliUk5UZFFUVlZ6MDdwOHVaSlE1bFFHR0FPelFlRGtFeHNQc1ZwbjN1dFh1dktqZTQ1MDdsNTlXZks3MVIzU1FROFJHeEtoOCswZEUybnF4V1ZiYTF0SzJHSjZidGVPK3hlYVVoUFM0Z2NaWFljSFhpRWlTMHptMGk0Y3FzaGszZG15a21TTEdhcy9BYUFwTDV2TS9WblBIc3hjME9DUlRmM05FZWgrWHpZd2NheU5tdlBYcm9VN2d4VkIwSEo4bG54bUUvTnc3TFFWcStWQmYyV0JyT0dxbVBseURNOXMxM1k2R01sMUtWcU94SUhhT2wxbnlsbTJxYnI3cGx5bFptRGpOVHQ5ZnRXekU2UjBFZVc4QnV4WWZISGxlMUJlNGhQRVkySDZybTRZdS9zRzAzR1VYRGJCeVVPQ2tnUHJiRVJQVS9kUE9MbnZ4eWFHOVZpbEppL3lhc0FCZ2lIVHU0SlBNUE1pdmxRUGw1QUNoRlVSclBsZlVIK0RHQnQ1MnNaNDlHcFp6TWpzMHFiZ1NnL09vdDNjcFpiZGh4NDQxQVo3bG8yVWNhcVlxM01JV0RrRzVtejNuNzdNZU1JVWtocUNlL3BZVU8zR3djNEYrUGJHVXMvalBWL2RMS1pqcnZFRmVWUmg0SlZMSmN5endDeERMcDRHL2NFMXpzeVRHR25tYkhuK0hFVTd5eWN3amw2NkU0eFdSWjhIRHN3QVlmcnRONXFWVWpoandCNE1Lb0hoZ0NFenpmeGp1TDJqWjdEdytTZE5nSVIxRUcraFcyMkdvdHVZemx1RU9ocVR3alExeXVCTENIeHVJcldNM0YrTmMyN2cwYmd4WTNGQjFwUzBBc1QyZEhyUEQ3dHdpM0g4TVJvRThwTjhWdmJEdjBwNVpiRGkrRUhFc3VrZEp3Q2pIQjkvMkxvejdXWHFMSmp4d0xjNGdyeG1ZZmk1Kyt1RUlJek9BU2krMUpwRFpsZ09sbWNZZG5PS0JlYkU3TEU4QWtrRU9yMVJja3FvZ0htZFJ5ckl1OGJmRGt5eTBqekxLanNkVEh4MnNrdGZtZjZBYWtOMXpQUGlvVXprbVpJSVRIaHJFZEpzY2xYU0NlamZKcWdMMDNRMVlPaTNZSHc5L1F2R3o5MGhFUktsRDBCTk5pK0dRejIwTU5iNHFMdVA5MVQyZitNbnZoTWJJOUYxVDF3NHI0SkdxcTdnc1JtVEtOYUJabkxham95cXdXbnp0bjcrVnBkRjArV2oyM0tUa0xmTmFnQ09OenVad0gwa2hXSldUbDBuVmNtNG56cG1qcVpCOVlKcWlDSE5Eb2xjRDMzYVFhUkl0RTlqQ05mdXovUlFYTHZuTzlqL0kwbS9mVVRpWTNvUjhmSjYvU1ZQdVRBUjErK2YxMlAyU1J5aXJvZXlpaStWUGMyWllRM3NCR1F0Wk9SSzQ0Tzc0M0hzVUwyWDN1bU9nT3pFcjFFei9XdVNHUGNTME9Odkp3Y3V3VndhVXJ5cFZZTDU3VENoOTB6ekg3K2RHdDlwNTVHb2Z1bUdYWHpmWFM3eGp5T0tHbGFsZzU2TVVwdmNsWTRvSlczOUxzc0JsZ3dkUkoyRnBlWWdRUU5QbmtFUFdrNjl3WXM5YitxUUdPYXA5dDBWcjBKcStLdmJaOXZtS2FOc01kaEpOL3pPM0NaRWIvUDBrUTF3anloaFovSHBvcTBVTjUrN3lpSDVQSHFKTHRIcTNrTHZoZGJoZUpjZWEwUVlzQUhxTjdSUHJoSnlJNUk5VlhJT1BOVDJiNDlBTDJUTXpzT3Zid01zeWUwQ0swdlZLWFdoS0dsVzd2WGQvMzlPRXBVN3FzMjNKYzVBRWZic1FoMUdwU2dsUlNIazlGTzBkM3JjRndtTVRzNXExZkZ5UUk2RXFKS1J3cGdHcDJzdGI3ejF6UzFibUFrSHJZbTF3NlRVOWJ4R2hiaWJMRkhNZ052UTkzdm5lZFpTWng3YTJBODMybk5NeS9KMFdnMEg4V3FXc3d1WEZZOVd1ZnVwbk85dGhzK1d2OU5UQm1qMytFV3cvOFBNc2NSQ0w5NE1vUDNLMS8vbmM3ZXZCa2hnWkFLMThTUUhHZ3RTNnFNdXFxUDMzR3hOOFlOM0tlTElINkNhcnV3ZUU5NWU4SmFrNGtiS25UcndwUWlZbjk4Z0RDeTRQSFpaMGloYjEyb0lpeklESkdMSjRmWkdHbWdOeVRhUVI0c2xqcndGdTBsUDU3NWdqb1RkNWZPRkFjWUpsdmNBVzZkdTJuZHZCQ0hXMDd5ZGpQbUNJWXpBdVFFVHF1azNhZDhNaXlJei9nZFYxQzUvT3o5clE4TTdTZjlHZWRlRWNPYkZSTXJpQzNnNG9ZWnBnNWs1NDlMZFNmQmRJTGo0S0ZlclhmYk90MUs3UFRtc25UNkJhTVRVRkU1bm9LS2hCUHBwd0Rka1BzeFBGa0F3b0ZKZnRlZ0lQNHhiK25mTGxsNWQ5TmpFcng2UHk2ZDdJZWtJUStwQThob3dzd00wSjF4KzI0SFA5YytTMFBGMy9YN1NpNzdxb3pleG53WHdvZFBaMEFJVkFPaHlsMnZudlZRNUNiOHFBbmh3VUFqRFJhOVBoTXowV3JWOUNaaEJtTTFpUWxQTW1vbTg0Y3hUeHZ4bVlmS2UweTQzN3FxSzIvS3N4SzA3WlljdFdSdXRsUEpjNGROUHlIRHN5T3BWdXQzY0ZQRzVobVBZQWNYa2NzeElJeUloeHE0L21rNXU1aHNWR1I5WExhaDFRSWE4dE5EYU5UTTl2M0V1OWM1SXJUUmtGNUpCT053ODVuaEdYQmZOUHd6YS9ia250WmwyWEtEYVVoSTdrem5JVnVobTd1RDZSQVlKVzRRTGJrOGNLNkVXQUZOWStKL0FrZHZaRXFyWHJaSE5vMk9EeEE0M3hHOTB0SHdIZmE3bk5vUjNYMHErcUF3RXFqd0JYdkxadUtIZWNtOVF4ODJSL29IZUJycm5Oa0ZCNk93TS81UUhacVNFakZXZndrSEZOazAzLzlqTHJxYUtyRGF4bHFVUnJ0ZWxaTko0VXlQVU4yNURkNFd1ankzVzRvRkhZbUZnUG0yVE1oTkIwSitheHVlVk50Y0tCeVZRRHZyN3E4cHVPSVdYeE44V3pLNW1JMmlLUGNIcEFwd2pSaUdESlpQS0ZEdjBQUEg1M0lTVUpPSUN5cyszZ0kzWU5CaDRnM2J1RHU2WUJxamtQaTgrenloTVd4anBVQnRGVitUcHFYcUpNNUhUOXloS0kyYVVWVkppZ0VOaG8vZVFFSXpoeFNlOU9EQ0hSVVRBTkpJZFU5NGdIdnVCeWowNytTR0x0NzlGaUhGVFhvMFVnRGNLeHYvenFIMk5BZjA4RGs0Qmt5VW40STFCbXBwZzBPNkVjVEN5a2JnZnpBMG1Db1FoV2RlZHJPQytncmpXaUt1UEllUjhQZHhZQlBEL3JxZ0h0aCtmMEcwbWRTRTZvenNEZzJ1c2NtTmRpVDhBV1A1cnlCd1ZNci9QR0RjbFFIMCszdUpBZ1hLS1VCb2ZpRGp3YU5PUDFMYzhHODZIVVdBQjhlZ1dNdnpPbGlFam5qblBhRzVhd1kreUpSaStNekJyZW5CZ1Jmek5KSTlmY2xiOS9YbTdOcDRiSTg5Ynl4Rm1OWmJQRjVkaVdVVENJT3VVcCs1K3lZb3BlWUsrUzVtY0tGand5LzNReVNEY1NDREtjL2tTL1VQYndzMDZGRmtuYXNsV1ZzUjdtNjVRNE5mZ2owalNyMy9zVk1qMnBzL3hSOWpFdE0yOG9Zem1CQlNVOVErN1hGMVlHSVVNdXU2ZXBMbmY2SzUrL0FwZjBqT0YwNXhHdEUybU9XZzBwM2FxL1pNOUZBVlpSbDk2MVFYZlg2Unk1NlhaeENVLzdrekNEVndtQmhOcllvUEN1TTIxOW9pK2NxK21wWndGS1czQmExalppTEJPaHYwZEd1Z053WjFIOC9OY3ZBZml1ZFdiNWsvMWhkUW4zOGhhZ3g5UmdYNmxDZFIzeHBJZ0Y4RWRYMU1oOTB0S0ZRSko1aTZYamNOY1VjeTM3M3YrNlAwTVF2YmdjVmtYK0h5Y245VDRlWHZQOFhoaUNIQncwaC91aGMrbzRZNUE5UDRCZ2Z4NUUybUFhVFZhWmZRRURESE1ZVzdKbW1xZmxUQ3JVVTRVOGFqQXFzY1RUZGtoTXhrVWRHMWExUHlEMUlUclZGZm5NMWxiTFphMjRRTFI5MWFta1kvQkJnWExZYU9PcWJsdndibTBpU0NPV3lKVVhQejFQVjltK2Y4NldxbmZuM1dHSmROQTBjbFRkQkE2K09vaWdQTnAwV1ZITlE3QitsN1V5UEV1U2VrTWVVOU5kTEViUi8ydHNCZjR5N3MyV25uOFZoeGxiazlUZ2FQaXQ5MDlVMU5NamVrNGxKU2pobWhQS3c5WG5MQldXYkM5ZUtPYnMxLzFqWjhobWgvbEZOSFovb2JFM0ViTWpxWjErcUNmYVVMTjltaDZmZmpDN2dCbHlkZnV6eHpHc3RVaTBHNldRck13MDVMbXVuMXdHRllJT2hPV1oxeVNUOXJuMEltT2thVzFkekUrYWhFQnA2TTYyM3V6VTlONGhHWUoyanFTZk90VC9RTzRJREl3N0UzTElnWkd2U215cEVJcUpzd3FHU0ZWbkdFRmI1eVIrblVZYUtWeUJyNis0TmtMV2hiMzdsemJ1UUVRMk91TnZYZXJoeUwrQk9EZTZ0aE5lcG9CWTYxSllXYUFDbHdQc3M4UFl0elBYNTVZYTRnYVlzSWtwcC9GZmpPNVR2RXNWWDJPcFNvTmdPY01scDlFSXdvcUl0SlVYNnM5RmNHM3U0U0dHWC91TDl4NDgyZEZyUWxrakF4TTdBMC9JdVZxOTk1QVRGaW8vUzZFMUlzT3hLdmRhNVdWVmZNOTMyL3RjT1BsQ2QxV250UVdrZDB2UTd1VW82WU9lVktGdTM5eTJwSjRJU1RFOGxIQ0E1dDNFeG1EQkwvVWFlbFI3S1FYeEUvT2VManZPYVlNUFd3L3RMcGtsMVg0Q0FnSURtK21nQXdNYTB5SG9pNk1HZVkxQ2NraTFZSzJsNllsVnlnV0pvblFJVXRVNHNOM3RaNk4rNmRrZXdqMU1PQzhaYU5SUVhQRnpUTFZmOTZVZkJNelp0VkZXQW9GT2pxUllOeVdSclRHdHJwWEo5RnJDVzlaZEUxU2hwUXJkalpieXA0U2RaajNrUlQxVWYwU0NLdS93UnBWTkhHeXY1ZG1QbzBnSS9zbXhiTDdBajFPaVdJVkFUd2FqRStHYjRrNHFNRXhzOGN2RG0xRnVlVUt3Zk11UG9aNTZ2QVBsaldoZFVMbnk1aWJXMW1hQ05nMFVieUEvRHg1QlJ6c3cwQzBEbXQ1bWROenZrK3J5bU1MVFZkU0FkaTFOWEFaVDJXL3g1SzhxdHg2WDNaZnpLWTRmUldCbDMxbWh1SmJSK3V6QU5paTVzZmw3ZzhRbXJQczJjUTJabExWYXpoc2pKVzBzSWdrZ1RBZGdyZ0loTndrOEd6ZGRuV094MEZQOWFkSlVZeFZxZno1WEowdkV6NS9oY0UzMXpWbTJWWUZTZEdheTZ6eUQzYnA5eFdvYWRwVUJUOHVPYkFML1dCOGdsZ0sxWjFSWk9QZmliUHJPSUtWQmsxUUY0SEs4bjFTcFdFYytGZmVjQWxzbitWVytYclFLNnRHRys0aTdRSUVzMVhYbEJVWk5aMGZ3dGtsRzZOR292UnVQYnFsd3pMd0tCQWR3Q0k2YjFadzdBQzlJZG9WVnNvV3hGVndMOFZmVHhKbHpmSkc0eFp6YU4zd3NLU2k5Vyt6OUJFL05PeFBJYWswZXI1eDBRck9VQnhFbld1YXM0Q2VOQ1ZIVWZCWmN2R0ViRHNCWmpaQ1JpU0V2aXVrM3IzOXRXdDkrMlpCYWpUb0IxQU9rMFJucnQ0Z2xCRzFnMTlIQ1BoU1ZISlV4eXk4aWduUGh4VzAxK1pMcXdkMHE5L0xBdk9PaFE0b1piOEx6Z29nVlVKSDVPRkdlNWVCa0YxK1dVdWRyeGNQTUxiOW43c2o2Q3hPVXZzVXN4QmRqanl0ZTlicXgzdmVmcVlEY1NGWW5sUnpHSENXQjl2NUFjVlRZWURRR3VUUjZkVmFlSm1JVjBIQkFTWmkxeVUrMjB1UHNSa3dOeURPd2xTMC81SmUxSzlZdFN1dGUwOENRclkzSE9TV2llZG0vdWRpTEpZQVBJeGRXa3k5VDBaRGhwcXlCUFRBOHhkR25nVFoyZlo1VkdqMjVBOHN5TXZHMUQ1M2ZqcFhtN3M5T2oxR2ZGOUJsMnRCbDFyakVBeFg3bkt1UDRpLzF4M2RBN3ZtNG9xcXRtSHArWkUvREhFcXIrUjVZUjkrN0hES3AyUVJXeDFVdmdWMUdDcjJuenJtMHRYdnNvU1J4VS9iVFJZSkhkai9FNzhCQUo0a3NWeG5oYW1WK3hkZTJCOEVDQW9UNGprcW1RdnBtU3JaSzg0Q2pLMnJlVXAxamtNaWU4a2lFaVMxdU4wNzJXeWtQU2F5N3dseWpPQkR5VWg5VU51TjhEVXYwRFNIak5rRmRyUTZkdGdSbGVMVzhRYjJBSlRlSDAxbjRHeSsvUlY3K09mcGpwUC9DT24zRFM2N1dCd0gwa0Z4TmY1dTU4RU5nMWF4eGdwUm9rUE9vb3Y0MmhyNVpXQkgrTGRURC9HMHJsdnVGM2FobFlYSHJNWGtESUNMaWNyTmxqdVdiR04vOW1tQU1Zc0FSb2tTdC9WaFNSUFcvMUQxa2llYi80dFRKUVhsYVdUay9JMVVVQ2hXWXJndEtGZGxMZnZQQ0tFVkU3L0owaklyaEtudDB0L0xJSGJRbSthek9TYUZ4WUlHc3lpc1g0L001UjVWeld4bE0vTE14ampSQXVCOEhrWTRHNjBXR3RBTTFXem1TREdwMld3eEM2a3BqYXQ1WDRKdjNXRWFnQSs3QXNpNjZUS1pDVklCdTlGelROY0FHQlhBZ0ltZWVlbHhtaDMwVktqTjBWL0wySU8rOWY4K2VHdktGYmU0Q2R2ZTh1NGxMd0VXTmRvTEhjV0kvYXRTVjhQaEUrMXBrVlh4NTVDSm9wNWNscXhVOFlXdVZ6bWxRTjkvV3dIMEp5N2dWRzhUa01NYk5CQ0VRdEYxaXFiZGd2aVZzY2o3T2o1UmhDaW41TXZJekEzTmtZdEVlSlRNMUNGWDlFZ3BZU0xoVG52UjNtbE9zbkNVc2FKQW85dVFDUWs5YWV3TUxsK0k5ek5WWnVqQ2hLRlVSc3BaRmNZS0J6aFlucWpBUUxITEVST3JNTm9GQlpheVg5dEIweG1TZzB3WXhtcWlMblB4Tk5BZ1laRVlaUHk4cnNmQTdZSlJHSW9NWWljeWljTGxVTXdQUTFLelNQSHlqYkJBaGdVa1FtSGFFQzV0TmxsUVE2VmdVMjRJazVlcHJ3d3p1YWZVNmM5NVU4RmtVVVByZVVzMUdGWDI1ZTlqTjJJWC83SVlJZHhpeUJ1SGgxdUlEREpBUU9sSTFlL3RUVncrYVZlK2F0elZtUFBhb0FwckQvVlI1V2pPYk1NdEwybWZQa05HRjh4WTU0cUZuK2VNWjFuTExTa3lKN1lFaXZ3SmhWSWJUWnJnNHpqYkFZcnJUOUI0cTFuZFZuUnhyVHF6ZG9ZY3ZZZVBQdVVFdDFUWFNiUFI0U3lmRXRJeGpmY2tHRUc4aFVxZnNKbTlPdVVkNlZNRlZFY2JiaE5QazNnMEE5NnFSU0FDM1gxUHBjNkZwanNvcDFqSFpFcnhaV2wzeVhJVzBsa2VNR3V2bXcrNmNwTU5SN0VJTCs3Z0lUenVhQkFkUmlELzFmOVRsRk5jd2N4NGZCTlNsYlJ2Zy9XK0pCU29lSDRVOFR0QXVib2xRWXU0SXN2bEtWbkZITHFyMnVib252TXRXOUl1QnR4OHR2a25ybnJYOWhncGJMRDVPdUNxUUlpdlUvb2ZWTnBYU2lsMjF3b0RHSjBxNXY5cmRVRExLQ1ZPcTRKbFB0QlhsaVRHN25NSnZJekRTTUNQNVZMaFB5Sjc3aUttNzh1SGpaNkJjQXM0SGFOdFhzZ1o1SFIxb0svZHBtdVJyUk41Rks0T2ZHR2ZZQjhGNk1HS1lVV0lrOXh6UURWOGg2L1EySm40ZzZ2Q1RiaGZlVVJhcWF3MERKT0xDcnA3ZWFOOEN5QkV4RUFObVUwcHQxMGw1ZXQ2RDlPNTlheWY3eEM2cXpHQXlXZTl2eThScFhDOTRBWk1uMHhkZis5ZWs0d0tjd1RsUnBMeCtCVy9yakErdXhvVTRYK016L0ZGazBldnA0TjFLZ2V1V2VCSTdiMlg3K1NpaVlRZFBjb3lnY1paMi9Pd3hka2RBWnRhRTVRNzdpNmJkWDNIVnFER2hGMEcwTWQ5alN6dmg5WDM4NklGRkF3bmpzRVpiSy9qeWNvbTh0N0hVV0g1K25GYW9oMFpTUGoydDVTMGNFNFhRUnhVNHl0S3NpZW11L2I0d1FVVmZWUk1sa2F6YjZrZmtQM0pUL0ZSQ0RoVUYraXVDbUVyYW9GK2NrMVB4dE5mb0tMSU5BVWxMdk4rRkx6UUtOMlJvZmttOWdBa2RuVTZKdmFoQURLL1htMmNTWTZTM2hFMm9STHlQQjFiSHZHZHU5VGd2NGUxVlBIb242SEJNMm9Edmd3Sy9XejU3ZjJWN2VTUm5kV3NYMkdtcGM1VnNmTk5ua3lXWjVScU85VW5jQ0UrakFMRWE5aGRFQmpwRCtiZnAzUjRDck10RThTZ0g4aTRxWk1rcEIvendTTStNL2FISzI1TFNPSVNHQmIrUmlOME9hVVBJKzJxVjQySURvakNJMzhTN1orQ2JlZk1DMGdQUHZrMjRQKy9PWGpRM1o4YW9ua0FWNENzUmsvdVBNMmZ5Z1Jyc2I1Q25lcUYwbXd4TEVFUUFJTEVLN2l1Y1BhT3RlYXV4S0FzaWNsc053WnQwbFdteW5uZHNpVzluWStnMHlUUnJlOVF2NXFtdU9wY216cE5VRnhGeTAzdG5uNFpwWXJqRUsxRWNRNjRNaEIreTVkL0xNZkJCaHE2RndxenBNZDIwVXdYYTdMYjhkS252TWlhMm42dmx1L3FNbE5tYjlaV1I5Ymo5bHl6NnkvMnhpYjlkSC9XWkQrbzBmYmEwWDIwYi9COUFGKzl2QXhaUWthL2Vaa1JlaWo3QTZsVEVueWRxZnBBdVB4enlRNTN1UTlvVFIxOW5ESUdrYXU1UUhKSWhnWDZuV0hPamtxMVlMUTZ6ZjBIZFl3SW12Q1B3aDJqQlpxdklYanRudzN0SlRHTHFwNFhyRzlUV3ZMMXFqT3pXWllxdzRvQlF5UVdUNnBNNlcrbWJJN05IM0t2VkR2Y0JCL2swUmlOYTlpakNGZzMrTm14OGszekhHd1BUYmp3UFFWb3Zpb1NyUm80MGVJVUl5WDhIcVhyWC9PSzJhQmNPN2FYa0c1NTJFeG9hVVExUGNDSjJTcnZwN3VFL1ZiS3J2dmk1c3B0WExwVldiNkZZa0l4dk01ekxPSnVRNnJWNVg5R1FwV01VZDRXWjJUWkR0aWNyeHg0c1U5R2NCenhJaGJ2SnNIellWMmxoVlNsMDJLdnhwMThGWEN6QzR4U0V6dXdiNUFzT016YStxUnQ4dlRWaVNQbEtUbFAyMFJsOThQU3FjR1FkMlY2aGtuQ09CamM5enpBanVnb210UU5IRHJXbGlTc3djdmFIRDZPT0RBNDBYR2RQUzhIdEg3SUhaSXIwSmtPQURsRjFtbGxMK0R3Q3h4SGkwM3l5R2cxN3FnQWd5MkFKU1JYVHA3eDJtZUczdXFnajBDOEtCeUpoT2tSaENFaFV1OTFYUGdLdFRub1FRVFZtTTVvSGsxM0c0bTJJVTJ0SGl3OGtxT3A0UXRIZVpRaThIN29LTjRPVXVSa1hOZ0xONFNsdDd1QUkzdGNDRm54U2hKSlhHa3h4TnBxQmd6eGd3dHZZZEdOQ1JpZGtQMnpURm5BTzFtZUJrYjlTTVlveFg2MzhyTUlieC8zMzBuMGpsdXVzZDY4OExEdHZ4Y01MR1B0MmRLdGpMb2JZM0I2R0RFVFFkMlEwZ2tRMmdHb0tnMnJEK3diZkxTa2NSditZb3dTMXBrbVdkWi9EZXhkWVhnUWtZY2RudEFKM25hdElwUzk5emJpZFJsbVYyL3FKemtVLzVzQXdHV2FCMEVLbkU1TkIrb1Zibm1CbVQyaEx6QTBjejFxU2JnWXdGRTREZEsyRzZ3ZWlEc1VsNXVsVGlRTTVmdmRuRmVXdkcyZmZIRmIrTkVrZnFJV083VllQVkJXQ3JxdDFZUWNIMUZMZjRhOUVJY1JONG9VV3Z2aTQrMWJjMVRMQ0V6cDVHUzRXcFJjTWdSSHhGYVNZdllDRXVPU2xnS1dpS0ROR3dRdW0zTGlCNEJKdGlTNVhwVEpaM3JtY2JBL1BjUGRoU3FqbElHWWRKaGJWeDIrZVNNRUxqaC9hREROK3g0cU8yVWlXMkVZVm1aUTljdm84c0xDSlBjVGhsamxBWUFPT0JRQzJYU2FlQ25mOWFOZzF1SDZMVlZFSUtxSEgzNVlLRzg2OUpmd2R2SkdzK3RoMUkyT2Q5K1BnZTlDS1lybXpzWnJ6RksxamFSaUYwYStJTFZLWkFUekJoOFhEeCtrbkxuNHdKb2NWMk9RNG5SZ0tLanZXQzNaRWpZOWY5YVBLLzV6WDIvRUNDQTlqb0ZlampaOUc4NW1VanJ0cEZCUnpEcDVOMTBWU21sRHYrUkhXdzlkWGZ3QldJcjdNNmdsdWVkT09SOGVGL3RUbEt3R25qWk5NZjRHRmNOS0JueEFLRlNtQ292eStQTnc5TTVWcDZ1YlQrWThTTmM5ZFB4SVoxNEd4TjJ5cVc3bXY5SHFVcHRFRWVoYXdnWFBLTXFubzdlQm4vWTd5RGdRYWZpQkpyczB4eFUrZ05KL24yQnlRb2N3VjFneDRPR2NRd3RvaGNxRmhFaEF6bFdhbU0xTncrT3RhVjJQek1PeCtOTU9ZcFdqSjR1bEZHaXBWRG9JWFVYNkxwNjdSL3FVdDdYdjV0azhpck4yUTFBVVdsVEVKcGhON1dOQ3ArTEljd09yZHNOQ0xsb1hBZjVtNmY1K2h1NUlicElvVlljOXNZblhuK1N3aURZYmpwN1dmc3EyK0kxQUhnNXJwc1BRK0h5L2hqdmMzVHcrbFp5WmlTcGtMN1pNVitsY3hBUlNwc210bmN1L01zVmtEckdraG56TFVwcGpweERxY2VtZDc0ZmtiaEd2dFd6OUdMeUhYNitnQ3JaZ2tZOVhvSXNNc1FQRXlMVEdxZXBOWHNVdmU1MWszS3RyTU5kZHQ4UU8xWlhvL29pb2xHbzhQMTgwcjl1MFBvT1RreXA2QVE4V1ZPYzVobTR0aTlrMU9ZQnQzc0h5RnVRanZtd0V3ZFRtd0IzVFlCcUJJajdma1NSZVRvMUhVYjJMNGFDa21EMWZ3RzVCamZNNGI4dXdTNWphOEYzT25idmU0akx3aUZiOWNYR1d3bDEyZUdoL0pOdDczeDdPeFEyZGtIM0F1b2VUNXlRdG1wVGFnaGxhWUZiU3ZEUkdVd3VkUzh4aVlsd1VicEpzOXlGUjFjVmRiMXlBVE9SNVlON1BHV0pMNDBUKzhCTGlnODhHYmZTZzFTZFp1aXkveFJvdlBwN1E1TDJ2Zk9NSFRzOTBnbXUwb2NBbUhqenQySzVzY3JoSGJSQkV6VVYzOWExL3FPWk5yNlhlMFdSbVNzZlI2cHRaRXRKbW5tWkVjOWF2WmI3bWlsTTFQTmZPMitNRUJ3VW1KN2FuNGdwNVFvMUFEaXA0VGVJakRZR3hzaWxzMWhuaDgxR3pJY1hjVlpUek90SnY0bzg0ajd2a0Y4ZVpkT01pWkJsWFBDd3dxbVlHdVZzeDRJMmt2YUQyMUczVWQ4aVJaZmk0Z2M0VjZDUWVmZGZXdWhheDdac21HeitNMSt6aGFGd2xSei93UG9UWWlrUXN3Z2hYR2Z6Ni9CVzZZZkRyWjNmWG1RWFBrVTc3c3BrZVM4dzlmT1VFTWdFeXdzVWliQXBVWUJQa1EvOWw0OS9UODNtNnZkdVVReSsyYTZSbm1ZbElFSXlOMkxXRktBTkZrWFExREJBYWgveEVoSHpRNCtGKyt0dUU0MjVvRFRCaXRiWklDMlpPbXdLZEVsZ3FaWmtDYllyOVdOd1hONklTaDUvZWF1M0IrQ3BCd1lKdUpLVCtNOHhGQUdQc2R3ckRnd1lVWHVzVzFXcWQvcEViVER5T0ZidjQ1OWYxU2pHMzRncHBVQS9YOFBZbS96NVpvUDN4R3hhTUJnK2FvR3JTYXVyMHV5eDA4Mm1iMHBYbFpneXgvTEF4ZUZxUlcrVml2YmM2Z2VJcG5mbjQ2aUlKRzdnUXpjc0lRRzQ1MnFvMWpDVnBzYlgxaXoyVWU1MW91YlVnaGtpaUhReDgxbVNJR2hkU1hlN1NORWlpQVoyUFlKblIrZ05mWlJaT0g3b05rVEg2b1Q5ZkxEeG5LUTBsemY5aHZmbUNWQmlLcXJTUWxKcGsrdUNReFIzWHRFcUpjYWlRa0tqM0dzUHJSWnFVMnd4U0o1RGRycUc5bnFMdkQwb1d3MDM3OEdtaXR6M3FId01BVDk5dnpnSXhWVUlqLy9NRkNxR0pxSzBLOU0zZGJGTUF0UGVjMWlQRzJxUGEvd2F2a0NEVEV4c1RoSVVqQktycTJwN1k5NVFRejkvWjNWcG9kaU1xZkxPVGIrcDFjblRkNmxXZDlPSS82aXpqeGJjVG05cVJrY2NWenZERFZNQk83SDY1ak55Zko0RUp6cHQ5aDlNWEtvZy93dHJneUJGa2w4WlBqV2pWbXl0Y09iZ01MV1I3KzNhZkx2MDYzMVhLVFMrUHJ0SWJDdGw3RHhtWS9WSTlFN2ZlT2NMZ0oyeXRuN1Q3WjYxUE5xUnRGLzJrR0I0NHhyYlQxL1FoSTMxeVVDcWY3RUtkcjgxaCtoTDd2a3BGZFdOZ0tvRDJmWHlMOFJ2MER1RGZvREtkZkpkV2oyZzE0RW44WUVhS0lNQld0OVhqVEZnai9kMENVUDFJK3lkRlk1OWpHMGMxZzEzek5ZZ1FQWU9ldUFmT0Y1ZGw2ZVdLTm14ajN6UU8vWmNsVGJmQ2hmSUdsSVhjQW4zSHhTZWFUbWVJdnBTZWNnZ25LS0RCbTFDTkRtRmVKeVhQTmlyYnE1MHM5Z0l5bzlVWEttM1lVaEpDZC82a1hjMGMyR1o4QXFmaFkzTGVSUGVIQ3F4d1N0NWFwRDM5TUFqbmxkczh2SG9UdjM1Y004ZUU5U0ZucUI4eUM3TmlJalRWTzY5SkxoQWdKaHhocnc0cTlWSDZNM204c2tRRVRJYUhpckhzQk8zcVRJQ2RsaklIZ0FhR0pxQ2UvYlhpWDJFYmZtUFpFMmlOcm1PVisycUlsdlZMbXI0ZlpLdnljVkhoOEJwK3IyZXdGbnRYeks3ZTFvU0RVejVRZEpxQkI1QnpxZlBrUFJYQ2lsSmdSVFZoaW5mK2lKSEhWTS9hNFZkTUkxbFBQSEViejVBeTlKRlkxeFhjQjRTMWhBd2dXUGhRRzVXc0dOSzRtMjJqQVNRMmhRMnRkbmNvUHYrNDE4RGNiSU5abVl2a0FHZURvQ2lzbXUwK2w4NEtMaXdzaFJEdjBqYUE0eGo3NEhGZC82dXBPY0xKMEpUaHFRcTRBd2FGKys5bVhVck9OS3FvbUdBcVFPR1ZiK0FMUFo4ZHdIU2w0MWhMZlJQQ1FDajFSWGY5amRhV0dIb0VjMStmVDRuYjd6MDhVU2dnVkZDZWZNUlo3Tlh0aGcvWHg0NDA0eURsNDFsd0E4Z1F2RlE3SFk2ZTAyZFhPbDFURDg2NUliN21nNnJ3dzh0WDgra3ZKU2F4MWoxM1QxNEI3U1pDY1RpcGl3NzFCdFh0TjRseExkQWQyQk5hWk5VOVVFWDl2TDhjZ2RkQlJ1RW5PL0Y0MVZHZC8wQkZET2ZLWW9IbEhndTRyZ3pRVHFzYmZyaGo4UEhKNWxEZWpuSWlKc3owM0p2eFlud3NCOTh1bGtVZElQTGhuc1I3VUVEb0NXYVd0N0IwNUk3cU9tZ3VOSllpa0tISHA2dmVMcVgzNXR5bzhCemFXVk9hTWdScE1CSFFkU3BGc0owWVU5cUlNK3FkdjVXWEQwVkw0MW51YURtNXRnUStIWWFOUmVwTHlVdWZTNGZIMGl1dCt4ZkYrcDZoZmh3eTdGZ3BXSkZqOCtKemZ6NzVBb0NibDRuUmZ4T1YybENmRDA4VXVDREZoSHpJTlU0VXZlSGRqNWRNTkNnelFwRmptVDRaNjZSMUlGWk1UaEhhMzV1dWEvclVCUG90Ums0VG5RSGtuVVRVTzJ1U3BySEZRdEZHL24zVHV0eFBYeDgwZjhucmszSE1vU2hWWDc2d2QwMEc2Qlo1U1RrQkYxTWJxdGgyNUNvakpyaDA3Zko0NE9JNlVyT092dGZaVFFYYVlMNmI3K1hVTmNaWGRjS0Yyd0NJOXRuQjJ3WStQOTRuOVlMdWtIVUZNZEVnbmx5QUJ1QWlKcGNhNzEwR0RnUFN1R0lpdktUWFhITk1IQ0kzUGM5ZS9tZGNaSGZ3SHJ6cEZUek5FWFB6NHVyMmdiN0tVQ0N6bW1BRnpTSjdsSm5xcnhJZHAzSXg0TjM3QlYrZVZRbnBoT2l2eDNGSDkveTlDNHhtTmFkYjBmK2Z4RjlucFg0N0dNRVNSck1Vd3NkM2pLb0xDZEw5TElDSUpJeUFoK21tU3o2V3JSYm5mWkRnanpKMk54bENHc21oR0hNUkJNVkk2QVREeXZycy93QzBtZFowZVpYSEs0bWxtWVMrZHRXOWtya3p1dEhTZTgrNlV0REpYcS8zVkxydmVDNGxKWG1TbTVGc1JmK25Db0ZDNWdtc2JVMDYzcVNEUktyY0xaVjFDODJiM2x0TEcyUE5oSVJ1cnFIUzdZQkgxNGQwaXJIdFNVeUl3R2NmUEIvMVdZZkpYb3FHam5kMW1tZXJGOGN0ZWYyNHRvRTdpRml5RlRuTVFyZmhONFlTcHpkQ3VBZEZicnpiWUs0U01DNXNmMGl3TzFsS1NyK1FhZVFneEFQS0czaUVnck1GeTZIQlRQLzJRbUVKbzFyYTc5cWoxTnMzeGFaTUp4RlYveU9pOFNwNFlKWURJOHVGWWQrMFFqNnF2YjRxSHVSZytHMnlNUGpnZGJwdVdUQmg2NEVTYlppMEUvZkNaMDQ5K2xINEJOallmc014ZWVRUlZucXhqY3EvbmxxUHZjZTJ0MlVDb2xwUjFaOFRpdk55SmN6WkF5ZjVVUjRlUkkzN0lsV2xzcWtXdW9HZVFWekhzZlNKQU16TWVFOVFMT2ljRVpreWV2RHhDM1NEc3JlZ2xFR05ZMGhPcCs5VW0yQjlWQVVYRWt1UkpDSnduR2I1Nk9KSWYrQ05kZHpmSFhrZWptTy9SbVhxSXNrVk5hVlA4NWpVa0NPOHF1Sm5Cc3JRSFRmTTNzc1hPUmErYnFjK0hiYnRZMnhlSTRpYm1JQVd0QTBFNEZCQm1SbDNvOXp1ekZqT1c5VmFVeE1mT0VUWnZ2SW5yM2dUSnBPNHhSNTBnTWdNUmY4dmtZTHpvaW03MHRUZnFwaFJhV2Z4bjhNcVNGQ1czcGRscU1sS0FLd3dRT2NYOVhzNXdPSTlvTWtJUlFEelNjd1pBTUd0TTgydytTTDF6WkZKUWkxUHN3c0ZWVzVvbTVZY1dxNzEzUGIyR0RZd3cxT2FGNU5CSmwwd3JESnp6OFp6U1VIVjhzRE45K0s5Y3FZenVYSGpjNHM3YnV6UlNOWlhUZXNaL2U0MldLNysvT1VUby9taWMvc2JqdDlBTzNYNmhrWHUxOXFYZFJHNVFjQ2lHaG00dmtXMFN4MGhIWjJVbE5jeEtrZmdFcU5DQitoaW9rVVJwbnA5U3Q3NWtmbnY4RVkyNTlSVUw3UnNqMGJTMkN0MVFqVFRFWHRacHhkN2JGVUxsRXRWeU1HMGxoR3hpM3hyVXNFUVhVQ283eDIrR3pyVmtFSS9yNG0yRElEcVVnUTR6dWxjQ1Bldjczc0VPOVV2UGhPTU5wN2FmQzlkN25lc0o5RVBYempPWFlsWHo1TXNuMmhGZnp2S0NLQUJSc085WDUvT1JOSk9EM00wM3Z6NkxxbkRKMCtiVXMyVDBycklHOHFEeCszdlR3b0R3QThBWW1DMlVzdUtrUGVhS0hqSVIrOFhrMHE3cXNRNXZkekdEN0g2U3JUMUg1dHkzL0VPQVl2cTJVMnlhbWJ0R0xCdm1OaVNERG8vUldwbS84UFlSbEJhNTdwOHBtajdUV2ZjMk1HdE96aGtrZHk4Tk9PemhROFVBN2RqQmh3TUJMa2I1T05BeTBZWGd6dmowWElqLzFpcmR0SkhRc29HNHloaSt3cEJrUWlEdkdmZEJsY1FldTBoRzVDcUFVdmtNSTlsYm5sVktYTXJ5U1NTUHNsd2xnKysySmlzZnNuV3prc1hvbDVDKzZTUHZRVXdrTjRqTTV0NVZwT3FMa1VLNFZUOUl6V2x5ZHBMOUpBNUQrRTI0cC9JQklsaXEvV2ZNR2tuUzBZM1VhMFAyZS9aU2VwVDJ6LzFYQllmZk4rUUY0QzZCRTNuZFlnVGRMWU1ibDBVbmluSml2RkgxZmpXSFhQdk44N1VmV3hjOVBPcSsydTQ1UHYxS2NMeVp3aGd3d2JiYllMR1RRbE5WNVdFemJtWGI2bXlXd1pZRkk1WExZTEEwSTdyRFdLbVAvZDJNNFJzcm9pYkFqQmZ4ZHVwMGdUS0pjTWEvMFY2MUIyLzhyckFCeWVkb0piZFVPdTZUT0UrWklja0pzU2w1UkJ6R1Zxa3FDU25Fc0JibGpSZklDb0ZtaGFwMWo3dUZPYkxXdkxWQmxZK0dYdWxjNUw3TGRvUFRIMVRoeFZ1QTRVb01BaHkzbWxodmlyRzd3ZGhsVkVGYnRJK3dpcFNNdUhyTFh0RkFxdSsyVjdUVFd5RXdtaUNJRzlha1ExbzJ6QmsyV2R4MytVcmlXM1o5UTVRaDJJUjd2cWEySUw2TUVpbXBrYW5XYVpWZHNadWRZTXJRSGRielVjRU9CRDFDRTBYN0FnVWRYckEwazVQeGduSjFES0h0MTBxVGZSeVdwNjBMSGJmZ09IWUx4ZGkvMFgySG5QbkdnbEZoeFNFZ1BGRkRvckNrTTdSSFpISUdWNnJJMFNWU3lZN2t5WDZNc2Nac0s5ei9NV29BR3lkMU0wYnd5ME5GQkV5d3B1aW5MdjFBZ0hjK2wvYml5VTV6YkV2MVh5Vy9lREloTmZFb1Z6YXVvUjA4TXI1MnZ2VzdzeGh0MllURk03RUZJSzZNODhaeEc4UU40dEVIVmJOQ1dFV1ZKYXFWeTF3UmZhQmNNRW1vNGFoQ3A0dXA0bnhOdndXbElQOWZneW81WDNJWThQTElzcVIwV1hucytobFhPVmNQSVRSN0lBcUZ1dmthc3hQRVRPR21kdHpCZ0U1dWdSWTVjdmwzTUpNell3MnFoYVN5eTdlYmNJVTNmbjAxRmZSSGx0NGtad0d2Y2FrQmJZQmw3WFJqRGZJSjNodjRXMmkzTTJNbDd4VDhUQXpORGJ3Snd3dUM3bERFcm1NWHF5VmlkRC96SDVlWkdwQ0VpWm13SmNxNC9xY0dGMHg1cUxQVU9NTko5dUlJUms1eFFVU2RRaVdFNXgwdFZRa24weEw3aVp1WHhPU21INkdzaDVWaUJUcG42WjhoQUpkZlA2cC91YkhTSGhqOHNnODBUTXFSOGJ5b01XcWJPclR3QXlHTkhjV2dTUnBvSlhCUnRrQzVza3BaejFDeHhUckNUalRsYUtFaEgrc2M5ZTdUZ1M5SDFEY3RCMGJDTmVUVUpYMVN4bGU0bGcrNmxIVTJRQWlKdTVCd2xTZFNCT0JXa2IyL0pzZWRxUnNXYzdQOG9YZWkrZjg2eHVHcFd4aUVCenV2aGp0MlUrek5FTmR4WW5YSnB5dS9BTlN2MDIydm9EdkJ1V0QxNkZ3bGhZcWoxeHFxNFN0NlNOQWxXVWY5c3lBamdVcDNta0J4RllPZ3Nvd3duOTJSdGgzeUZkZVIwR1NKVHd0QldGMkltNXZrSWw2VjZrTVgzd3hBZ1lMeVZ0M2QrYW9Halhhd1JCNFQwbDNPcFAyOTBaSW1QbEVFa290aGpnTnVFSFQvZ3BlajR6Ui9hODhLei9wUnFuZnpsbzkrWE93TnMrbE5pVm9iek81Mkd2eDJ3QURJQk5Kc3cyb1krVXV0SjNmZFZnMEVsdnE5bitjY1B2TENmLzNJdEtFd1RlMFhoWXRySFNEVjRnalduVjUyaGViUnF0LzlxckQ2TXgwZG53bGdqYUZvcVlYcnNMNnd3R0RTOTNpMEJ3M3JhK3JJYUpTSG40UDVYMUo4QnNtYUxCR2U0NHJ4UHBYM21QZkhmakFNRVUvWW1EOWZxU2FWWEJXaFNOTkRyMnk4UHNOUXRKaFlzT3Y1ZWFQclU5VWNvUzhJL2pHcDdhdEFxeGxtVVJQNmRYNlRISVBDbVJqSWdUOGJFemlaY1lkNy9XL0lKNjZNenJnV2RFclYxa1JFTm9abzAxQUh5bUV0SFpiay81NmtLZ2V5cTZaVDVVQVlPaUFqWkhudEdhaFR5OXI5b2NvZnNadkUxNDQ2WWFRME5oeFdQNFIxM1RHM0JITzhJaWNDb3lrcE1nNHEyR1BmSVc3K1F0YUhMYTNlWGxoWEx5Uk1NYVd6aG5WOVV3dU5uUkZvV3ZQNEYyZy9PQ1RDY003WUtpMHZoaFhVbEdzUWtTSy9yaTRyNGw2UmxGZ21sRTdkc2pnb2F4QVVBVC9XOWNHTkJoM1BwNkRmUE1WS2xxQXNBQ2k1dDFSMGx1b0puaFFuM2l1enVvTytHWkhRbDVwTFpHMTFlenl0V0NZV3pYSVJVb0ZxaThZVmFLa041ZTRuVzR2M0VKbnJEcVRCYkpYMi90MU1aOElpelVkU0xKRitlUUdJTlRJdkxxRXdvM1pMTEl1cWp4eWV1b0hPREw1eGVZTFoyZWtGam9DUkxqRXNDbzR6bFl5Y3EwMC9WRW5XRFE5MTdkOFdFbkZOT1ZWUWs5ZlZSUTQveVhmeEYxNkdtUHhqYm1jZVh0ZU5oWE9kVlMzdHdvSERBVWJ1SDM1L1dEY3BVdDJsRytqS25DMVdOQ21uc0lzR2ZZZzJubEN3R0JGc214MTN2bjN3TnVycDNGR2g5T1hWYzVHSGJZcldXZG5Nem9xSWxDY2pSYTBERmFqYWd5bTRTZm93NFpjc0wveGhMTTlGbkJmMlYzWWxrOTlod1lRdzhTdXRIZ0lLOGFQUi9ZZU9oRERCMnVDUjkyWkY0ZmxLNXJnYjhTbS92SGVLZGhkT1lOYVB2STBGQndjYnZvd25USm9qc2NUeVdBL2tua2hsdy9QdUsrRXdDVWxWV1FKUW9Wem9rY0c3T1RjUk1hS1pkYm1zMmNmYnlrTXptRzI1bzE2cjVKNmpQdlBiWjZhUHc1MmF6OUFma3BGUGxYQUhJa3BNN3Fra1BiMGRWTEdxSVZMNHcydm5vOTZVSUZjWEFNdkhuUXBkUjB6Y2tVNEhoYi9kVjEwUEZqNTEyQ2g2QVEyZlc5dkRkK2syY1JXaXVIaGpvYXNLdmRKdEhoMEI1V0VSYTFab0FmdjZCM0Q0SGVDQktOcnQrZnBiNzZEMDFqMUM0MXRzRDFlWVlPcHlwUlc5aXhtenJZdXBFcnhrVUpTTEFUTnN5VXBVV01Pak5vZjBDc3o4MzB4bktyUlUyMkRXNFlXK2tGcyt3WU8xdTBwSmpWbDR1d3gxSUtYWkgxYmtkcjZzZ2hZelV6M2NFeXVXcTV3bHlET3ZSbmh3MXMwZ3I4ZXpoTTc0eVpKcThPK1ZETE1Ua3lobW5UcEQ3RTZMWC96MWQ4TDk0c2g0QVlyV1craG5PTG9meEl5VzNscnEzK1JlUnRGeXFLR3Zya25PdC93ZElaQmFYZWgyK2dmNXZJaUQzTFJYMnNkbnRZZ2xFN0pRMDlEK2RVSTY2TDhCakpzVGMzbjhQb2hvb3dLMUdLVThDdUpRQmhIWnhBSTBCOW5tNTIvcm1PME9DQTJtenI2ZEFPbUVyckRVa2QveFpiaUQwV081aXd0SnRidnI1T3lmOGZraUN5cm5ScUJNZ21SNnNaK1BIYm4zUzRHMjkvS2xiWXR6bC93NWVQN0U1ejNhUXN0YkdHbFJLQXpVRUtnWSt1T2Y2RlpiL0ZUREhqSmd5eFBLZnN2V281TE1zbmNjQWlNMCs0R0J6eHEvMVpUbTBRLzNYenpLMStDNGpPZFY1WXp5Sy9nTmZaNWYrZkFISWM5KzBxSDRSMUNKZEhhVWtlZ2sreTlJd09TUVNqazFsNDhCL1pTaEJlL2lJQThobDJabVRlc0NYY0NWYWladSt3MjhDdHVBV28rNWZHT3Z0VWlNUkwweFJBb3M5RUkvZzlJRENxcndrMmlCamJzbnFWNkRKWVZCaW9FS0F0K1NzV1Roa2lqVytyMUtGQ21sN3FzTkZxSlY1V0M4My9FV3JONWZrMWR2Qitqb0psMzdZUmZqY0xkbEpYa1RrQWM0ZVQwVHNseVhHNWFRamhkWHAvdk9yejZyUzdHOVRvb1NYQ3hJeWwrOS9OTmxnSVNNSExET1p3VFNHQnk4YzI5OHdmVnNuWW5YVjByQXN0bGxvajBOQThYcXFGYXpvdUtnSEl0eCtNQVh2ZmszRFdHNmFXQnVpR1FwS04vNWo2SHVhU1ZLSTF3QXVpeGtRSFJDaXQ2bzZtbE5nanJiWW9ySDN5RC9DSkpXZFlHd2RuU2FUTVFWY2NpVDNxZ2FXeC9UaTU1U1I3MjV0RFpXcm96NVZaRHUvZ0h3ZUZKb0ZPY0FzMDFCclNiTDNodHkwTDQ1KzZOaWI4NmJBL0ZVUUZZQlBlYVBLTURTMWJCdzRxOTllMnl3UUJkc2dVKzM4bnNGdDY4aVVkdWh6cEYwU0dNSVcvUGNkUDkyZC9kNzVsSXg1amR4Q2xYUEVwdkw2dlZUYnpQaDVleGpScGNIeHZ3MDdFamFQanRIQSt4ZVg2RmVpb25IUzNSUWN4NWd3SGcvVWFuUjRsTnJ4M2lheFNERi9ISTZzQ1hudStlSm5oc3lZK21CZmhpS2xvaG15U29POG40UVU2VFRSTXFxcW5mcmFDdWxqOWgzejQwaklRT2lHNm9Nb2lHN3Z4UHg0RlppbkRxWHpWbWlsaTc2OWNabVV5bHZXMTB6Qm5hSFpOYkdjQW5xVlkzK0wyOWRFcmFVOU0yVmFOUDJsUGJCUnQ2U2NLNHhLdmZZTmVOQzZWY1dlSHRpcjhyQi9FSytZV0lveWJZVDZZMTNKZmxKYTJCcUY3OGxoRjNoUWxlaFhjSXpvVkNieXZLSFkyUVpaUWwyditTTHdoZ2hJNThtL2dQNFhXNUhOay85NGVPZ21ncEtyQm9sbjFlRWg2Ym10R0FoTkFya09aTFdEWXZoTFdTWjArZjdsT3llZm5GMm01dVlQaEhtTkRWMFBKZ3BFOFRHTHB3L0FrUmZuSXhjd3V5WkN6ZEhseWY2aERaQWVRalZKSUdGTWpXenBKM1Y0R0dqQWZ2c3VzLzFoaE9BOE5VRkR0WFhjOTIzZlhiY2NaZHNMb2N4RDV0YW5Daml3cjlqREpIYmVmZEtJUUplc2JGZkxZNGJJYnk0Q0d1SWV3aVZQNzdtWkNoQ3ZMMy9LRU1LbUcvTXB2Yk5oVWRuRmdJVkZVMmRsSmRTdVZwMS91VzhnTFJ2aWJ2bGtZTHAvQmtLSjFQeDVpNVR3cjAxeDc1M3NMdTB1c2x5dnZ5eEJneVBocmd1N3NERW9uTHlZVjJtWk12TVFhQ0gyN25wYmo1ZU9jTW1WVmo0T2pnSmNFZ3JKMVN2NURQY0hrODdNZWFSRlNQZDdBejQ0SC8zZS9QT09Qbjk1bU9UVnZGd09kd2NOZStWUjZ5cmZLRkcyZ2ExV3VTSXYxcTZtdWs3aCtFb2p1dk41VVhzZEQzN3E4UXNxTG1rQ0hUNlduaUJNeUcvM28yTmZQVkkwTmh2ZVk3cFpKTnIrVnU3SGtvNHFKa2VEbmhVTDNhTnNTUTBpRVAxM1E4UHlUQnZ3VHJkbDQvSTVYSUY1cW5qRnVTeHBaNkZFc1BoMFJ5NFJFMVJxbE5GMS9IVTQxbWJkU1AzVnpyKzNhMzg2cmFOUzgzUFpGN3hObGdZMzBYNTlwZ1JVRVVhcEVYdlpaYkZqL1orYXcvQmJlNm9qaCtJNWhZU0VwQnVGM3BRclB4QXEraUFsQldEQm1mVUx6MG1VT0tSNHpPRm1QK3BKNzFicjB4anFyL0hKckVsNWE0Z2FKUE5MQVV0S0loU09rbk9GT2U4M0hHOE5oTmw5cXphVzZQSnVmYzcwanlXR25FSnRQeVBla3o2RG5zTHRtcnl1Tm1lK21ock5WZ2hBa0tvK1ZseHFDcUlTSnVBdDVrRGxmZUQwSGUyOVlIL1RiUGcvL2hNanVTODlNV01IVHFYZC9oZk1Ubkp5ZUhwcWh5TmU0VzBUQW43TjhUQVd1UnpWdUNzaGNjMlpZYXFZMXgxdkFHc1BHZDdYN3R0S3U3WmpLTnQ1a051YXdsT0kzVnFJN1VkTkhnczZqVzl1Z1U5VjhYN2dLYnBTN2NvTWMwaGZneXhGUHZpT0FSbVJrMzBrVUFCclZ0MWdhbXZWUFJzRUZUWWRBaGQva0dnQWl3RndzcjJma0hZNlUzRTg5aDdtT1M0c3c1eVRTSmF2eWRmQ0pnTGJjdlg1dDI0eEd0R2FzNnNLZkFaMjhpZUUxT25ZTXp3OU5CaVZOZjF2aGZ4b0NjWDRnOGgyTkRYMWhqREx4WnNRK29wazd2c2U2ZVNPbDhLalM1Vy9GbzBtNi9OMkcvZHBhQXRpUVBHTGFNcGlYZFVoZENQSmxXREk3aFptM2JYUW8zek1udnd0djlGNkViVTBvaXdudVQ1MFF3aFB5VWpGOXFnUzBUSU9hL2pRYWNZSFNzdWlETisvSFdXRmFaUGVHUTJvR2FpaHZSRnBOWU5WdU50OUxYeWhOWTBmMFFwaExXeDZXSzZWRUh2cytMRkRIYkk5ck9VQXBjM0ZEU3prSmVPVEgrZlA1bGlOM09zcTM1cU4vY0l0NVJ6UTJoVTNaNy9odHp6Q2hPM2RucU1wOVZDRGw4cmN6OTFhbXpJZVpkR3BDdUxKZ0UvVWZqTVp4NnBxSi9hL1dkM1BMRkpwd3RUUWFuV2VoUlJRUFoyZzhvNWVJN1U0VVFQeGFKY1ZOa3NvSDlHL09hcGRxOWwvTHNsQjJqQ0xWODU2bloxbVlNR2xBSmtVK2dac2RxWU1LbjRpdHBIWWlVb25JdUVIdWRRYitVY2xITDgzSXk0d3creVFSazFic0szSFVlK0h0NmJOOXZtQmhrWXRnTmVUYlJobE9kRHRNYmQ5bitodzFoVXdnNFFLbldjWXFmbWhCeGp0YnFSRmVvQUJMVnpwV2E0dkRzd3pEK1krMXVtQVVKN29vZ1VvU0x6WlAxdWhGYThnVkROUXJWYVZ4aHM3TTUzNGpzR2VkaEhkK3gwdzNqY3poWTd6NVVvRjZBVGgxZjl6NmxiSWd1c3VVWCt1ZXp5Mlh6N0VHR0tYM2szRzY2S3Y4MEJ4L0c2bUJxZXI5QVBjbFk0aU1ieFVJUVFjSXZrL0plc1libFJlMWFKTGhUZTF5OGZ5QXZBQ2VvYXowdlk1YjdQaEFuZ0ZGSHFRQ3F4MWNpbHJRM0FWTDAydUF0VG02QXdmZTl3UlM2VXVzTVpycjFBU0NudjBYMUc1b3B5WkYrVWpLTXVqcWNSZkptaFFpb0VVTzdZay9uVlFwNkdyZTduWDhOT0tTVlNJeE8ydmFJcHU3cXFHNlJ3TDJycXVxalU0czJUTGU1ZzByOTJIZENyaDlEeG5sUkNvdmJQc2lsOFRDN2xKQkpBcThYLzBLVkJFck5CSFVNMDZsRFFaaXJ4enVPb0hWMDVINDMvakNOR1lWd2srNGI5MTZqeFM2Zk9pemNGM1NYd1RrdUwzQisxSWE0a2ExM1NEQlcranBGeDl4UlFvYmt4NnM1aGhwSm5TZ2lPVnhKSEJtNHhTb2MyVjNtUHpIL1M0S3hUdzdxVENESE8zdm9COHBvOWFXSUp6VjQ5S0o1VlVwaG9sLzJMNEVZdlNxOU1EczlnZWVPQ2VBZThhbHJWbSsvOUFTT0ZOMFBwRmJBRkFaY3ZUOUl5eGRUSXRPMzNkME4yNVJ4VHJ0dWl5b1JjNWh4dnVHbXhBRCtQaE1sVXRBOXp0V1JDazVGTCs5Z1NQUy9MOWkwUHRHbUxCOXBaTEg1TGtWT3UwcFpObEtYZzhGNHB4dk5wU1lEQUMwNllBd1hvUDMzQ1g1aW5abC9oRWlEdVl3V3Q2Rk5EN2wyK0g2SUZmSHJta3VmZTRPdWZnZFI3a2lud1B0Yjlyd2NMREt6YTBMN2tDbFh5K0lzK0pBK29oNEQ2T2lnR2E4eWRxKy92MWZDb2hOUy91STFHMEhKN0V2aFdhVGw5Y2wzY3hwS1NLUS9NUWJ6cWJUN21SWmhpZlVhU0ZhT1BhOEFLaE1xUlFVMHgzTGZmVy9EV0hFUUJheENkV3RGSTNqYlBxRUtncTFsZGFuM0VKdUFTK2pMUWlVR2ppdTlXTElvMVo0ZlYzTHd3TzdjMlpnRW9YenlXcVNJZDI4ZXlsV1FLWG1pN1J0S1FzSEszbFhqOGppZ015VEExOFVvaG1aMStzd3Q0YU1uRS80S0Jyam5HSTZTdkFoTEw0WGFjT3cvcVBrSmFXS2xXZVdsREszRVlMS0ZaMVN5NkI3czVwcWJuNlpWK3h4ZU84VlgrV1UybjJOQldMeDg0R1FYTUVGbnJrOTlWRE5sb0paZFhLRC90Vm83Zko2SU11SExxNGgraVVTb09rc2ZuMjNZSkZybWZTbFNZbnFOaGI5MmNyYW5nMHY4N2p2R3ZWT2l1UWN3WlQ3TXBtU2N3TDdnVDRwdjZRLzJmMXFwMGRaSzFJNFNrNFVvM1VpVjh5R3VIZ1ZFS1JCRFZ2V3NQbVNUWnFRRFFCejYxaVlGU05TR0FvYnU3Uys3SWVJcWNaTWhMVkg4eldHL25LL3FDVFNlRU4ydU03YUVzbEpuUTQzMWJPVDRGdGc2ZXFUWExRSnNuMmJhcXAzYlc4SFlSMzhHVGJidW9ia0NQcUFWWU5OZ3R6Ymk1dDZLL3laM0dXcHd1cWpxTGNtbWE2NTNBbWJEMlM1dmhTSVZ1TlI2NFZzSXFrWEI2a3JmcVdRYW9GeFVIdkJzdytZUDJmb2RNZVl6Zmc0SEtOMVNaTFBMeEV1VWZNV2I4SmVqcXJxWjNIVkgzZVFLUFFaYTE2SXQ0V3hHVTNhSTc0VDErQmVTQlp2TFQxd2tDN2Z5eCs4RFVRVXArNFBEaEdjYU1lVExHMWNhbGJ3b3Mxd2JybmVSUUh0MEljc1BRL0tZL3IwRkJCYnBHbU9KaFM2cGVWTG44bmZDNDEyc0d4RTFtOVFHTmt6TDdRamZKbkc0NDNyZG9FYm9yRzZaNmc5dzVoNTRBVUhSemJGNmVLSWxvYmFDSzhORFJKMFZxbXVRc0I0eE9mM2pHaUtrZ0w0YUxNeE1lM0dnR1lQQi8wVDZWQmtuUlNDUThBaENzUlFBbG9PR25MNnRyOFR6UEVwemZhZ294aUYxZFB5NGpUVExpeU9WZ2NXUHNTNWIvK0Z4ZC9rVVkxWkxveGwzOERodUJyanhGRVBYZnFXUk5XQ1VvMm5kWlBRalBRYmRaMHZVZ1IzbFBFaWJERHdzb2NWaWU3a1lKcXVWbWl4UzQ2UzhHSFgvWkI0bWlYZGM4TGROdFliY3BDWm1mZkdtOEZjT2FheDd2RXY0cS84cEpIclNXVWgrK1NHV3hBMWF3TVhIYkNVL3dyY1p2Sll4d1QwZXAwMXJZR256R05iT3RHYjRhMjJYMGpmVk1jbmM0TGU1OXpENWFoWXVvdGRUWk5MQTFkMk9yRFpRUy9pWEpsY3J6cTRFT0FMcS9yQ2E0d0JHL2ZtK1FzMGxyVnAvbEVUWEVWenJjZmwxUUUwYWcxZVFQY25mYUd4c2pnb2hSUElqSDErc0c5c1YvQTkwN0tDMGw4NFg2bG9JNjF1WTNPekJxMDRwb2J6ZHV1TWtwUTlDVnEzb1J4aHdQR1h2UUgzV0tEU0NoNVZpajRrRTlpWFlleTRkSzlKZTVMTExaVUFrYUNEOERwWkJiWE8vY2hpZkMrK1JSZ2xPQ1NhMGIxUnJKNzNzbys2UDlMQmxmdzNnaW1pUitqNHhZaC9QeUZLNC91dzU0UndwMVAyaHpKMjB3MDlwNGVEV0wvV0c5UENYbHh6YjNWNGErUE11ZGVUNTEwRGRySWY0VmdXbGlzQTVlSDBhcmswbWpXWmZpU1l6NVpGVnNvNEFRUXEveTNmWFg4UjExQnhKcm8rK1FjSkJuQ05maWZSRW8xeWRlb01sdnI0SVJ5VjZIU045S3AxazJkamlwL1h1QU1zQkJNTXh6bWkxSHFrcGJYdU1TN2swMFpMNWdMb2ljemhZc1RjRCtOZmFFTTFka3FLNHBDa3ltRldCNEJEN2lVeXJRWURNam9mL2wvcFVhZG1FWVdKS1FMaG1pZlE3RnAvQkFlSzJtQWJVRHBYQzFMWUFIb016RWxCenFYZjR5czVna2QvQnNraHRSN3JST1FDQ3UzWFNXaU1qRGM0bWVZVGN6c0w5UEk5WlpLR3dVWTRVVTR6c2E4aVNrWDFHdXQwSVZvOFRGU3BZS2haTlNnQTVmT3MxY2VzV09UNjZRRzJWbGthOXY3R0d3T2hKaWlkcmdXZHM2a1NMZHpwSnlseFQvVkVMVTZRUUhVeEl1K01lN0RBVnVTQ3YweFhKV3ZHeUNCekI2ektzVHJYV0xwVWkvRzJjZGRDQUoraC9Gb08vZlYxT3ErYnI4ZnhUTEhrUHBPcVc4U3BzTmp5eEo5MzFNV3VpYkdhSmhJWVorWjcyQ1Vmd0l0ajJKdmxmWDJMT0tDR1pEYXY0b3VTQ1d0VWl2VE1ZeFR2ZWZhY0N1NzYrcjdPVmdIdi85YXh6eUlWRFNwSnpiVjlySkYzRmhUUU56a3lOQWpzamJSMGdXQ3pSNkNNN1czeUpWUHpiLzM4SmJQcEg3elVDMW9oNWJjRW0zdUptMkt1d251VmI3eGl4R1ZqeW1SY0drQ3htWk5LTElJaTMzZDlIRzllZDIwbFIxWHB2ZEd2cWN5RkRwME51TTBodG9vMHplRkx0ZnRkd0lpLzJmS3k1SnlwbW1FV1c1RUI1Slg1K3lOQXRMSHdkTWhOQ0FDSUlFNGoxSUlRRGJaMXp6VDdUNnUycWJOQ01SalRucnZpaWlmN0tCMDJuSFVLdUJFcWNsWHlIcXhqNDZYbkhIQ3hYaTRHWENaeEQ3MTFuM2JGaUJyMm1uQXVyVHovdFBsSUxvbVpTYWF6bEZTbmRrOWJ1aFRBOVRnZzR5TnF0YVpwdVVVWnBTV09iRE1HejZDRjNqY3dQdkY0TEUvN2I3MXpWU255bElLUVpkQXJEc3ZjenAxSFZrSW1IMGk2aTdJRk5PdENMTE5lTWdrbnFMTitJR2hmQnpzRmxEVHljTE5TSG83NEI0YlFwTXNUamxVRUI5UW5WRnJXYkJYYzNnZW9BOGRrK2RRajFISDRraFM2c28rd3FuSkUxT0I1WmhpWGoyRkphZXJTY3BmNG5oWERIcW8zSDVzVkQ0ZHp2OFcwV203TTRGeDNKaXNQU01URGs3eG1iMjlhQVBpdU9mc2xHUTBPdzlJZTlKTFcyWTR2clhoS3JuY1JBakZRNXhjd2pib3cweGpJVXJYVkFIRXFST1lEVGZGekZjL01DTktWK3hidnpQU0dtYmdQdEdSVmdtaVpjdlNiZXVRUUduWkV5RGltZWZLRWViMjhZZG5NMldKSVBGRytJQWpkYmJydjM3SUdPMjd4OUdvMFJVVlQyZTh0SXpSR1QxejBvdmlLWnJhNHhaRDRJSDArUWpXMVBkbCtrZkpUYVVhaUgxSmtnMFlQRVpsY0V1OStxOWx2R2hkK2VMK0xRam1RRVR4T0tpdGd4M2V2WWVtMGU2bk54ZkQrM3VvTEdRS1hEb2JCMUsrMlpGODluMVg3SWhjUkJsbXRCRDRObEFOZFVDOVVHNkM0SVZWa2dpbmVsMzMyYnFQSlV4cjJiRjljNTF0a2E2S2dCRVpPNWkxSkJ0Z2dTczRpZ1JJOE01WnpjbWRwbWt6ZnN4N0U5UWlWRnpud1F2S1M1UzM3QWpzK1FOc0hoaVgzdG1jdXhWYndESE9KRDdoT1NGdTA5Qk5HMUFTaEhrK2xacmhqRWJhS1JQNUZiOW5WZkE4UjFYbjJ3SzRaSUt5UGRaRnRvbmxxVTd3dlVIcWtlY2ZNK01TYlphRnVOT0FWRzJKK2xOanZuaGFLUG1jdHk3M09yWGFxTFR1WXM0a3VHeHJIeTBueDFtVVhEemNSd0N2T3JjLzlUdDJwOGloYzk1UTFyQzFmOE44cWNBVmo3RGVSam8xUXEzaHJ4Ulk2RFNXWm9ZYTZ4OWsyaTUyaU0wMVFZcFhTdUlYSEtYYWtOR3FhVkFYUmpvNjVuRC9DbWsyaExhUHZKSFc5dXZGM1RRbm92MzloYlIzbXVJVzF0bVcxU2hkS3l0blQzS0JaM3pySTJpWjZwNUlFbzhBeStpNFhQYjIwWE9HdU1QMnBKbWlhblVoLzMvSGFoQm1IdmZiVzlUb3h2cjhKNlVCUVhDZUoxaXVLVVppejZobzNmVDJ6VG5yNmE3S3BHNmFtcGJlQlJFSzBJKzl0OHR1SmwzV1VXWkJYbWdhc1U3ak5yS2ZuTXcrK1BEcmxDbXFGYWU0Rm1FS1ZtVCs2TjVMQUx0Rk1zMGIxWVFKMGMweUI0UDhIQkJLNlBGNFRTL1ZrSjgwZWF6NzgraDB6NFZQeHZGMksxeEdNcDR3WXRUdDY3MGtVdFVMcjMzam9LanB4V1V3cTN6K0ZjT3ZWWVNTdE01RUQvb3JuYTBSMDdJL21UbldsaDZQMHR0RkN2c2FWMjBKVWVNRDMzeHl0Y3QrdGJWaWpTWWZ5TUFBU29ZTzYzTTNZY1NPRHgxMmtxOWtpVjY3a053Z1l2dW9GZzgydUF0bUNNVFhCNDIxcDlOaDZGYjQvR0luaVh0R0hLc2ZyRlFDajlpdkpveEZERkdPejBRNk1hZjhBNTRqVlpwME1zSktNM0l4VUxCVHJIcGdtT2JLWnc1R3Q2U1Y0MlI5RUdTZFMrTzRlYTY5OFJFMFppYXN3R1JBV1I0d1IveldYc3c3UTFXUFgvRmg2MEVERHFtYlQ4VmVWQkhFQUdzNzZSUlQyNE42b09RcG0zaExkc29iNU4xTTBJa0lYRDZGbGhhREE5aUMrN1dORE9JQnBrL0tSRHBKeDR0Tjc4VVFrTW9lc1owczBuaTdKR1I4eWozY2poWDZreWllMEN4VWtLSUE5U2FLd3cxWUV6ODNvUG1zRk5ka29DQlRkK0VEc05jem02UmI5bi9FRXF1MTBYWGY3Z1NSNzZaemVEUlNWWHdzUERmOUtveDZVVjhFWEpMc3lZRTdCSWw0R3pZcmkzVnN4clU4UER2U3UyWHVWVGVUMXNCSHNpSmJzTjZwSEIyM0hvNFRLSnJOMkxRV21nMGFLeDdZdzc0VjZodHVEbTJ5WHJDWllUL24zcmRYU2xQalJrdW42b2hYM0l3Y3NIRHpIaStQdHdKaXZabzl6R0NaUktDZFdiMHRtaWt2WDZmZFhLMDB6WHlUazRVaGRlRkJ1YUxkU3pwbzUrMGN6WEZrVjZtV3l5UWhXOWdMbTVjUWs1RjdzZldHSVc3N3FvZ3VrMzFUZ3o2c29JbCtCSjVEMnhmNmwrYmtIWERUL3lLOGZPYmhMT1dPSHpyTHE2dXlCTXByMGZsYW5sRkxuRTZ5R3lyUGR5UVZLcjdRcmJZRE42US9YMFhZMFgzUEZQeHZrWHRxSnFIS05LT01nejZReUNoMHlDdk9NdHlpVDRXZUhhSG4vaHozNjJrM1I3dFlIaFZaeTlpTVoyMTVaOXdvTjQxNXYyOEJwVjZORVJteEpRVyswYmFRZXVXbmVybm5wbkJET3JETUpMYVVLY3dFbytPNFR0ckI0MmJxelNHdWNaQnU2OVhka1JPRFFZVnQrOERWNDJpMVA5WjZpMVR4R25xcWFmRlFzaWhKeHNRN0Frd3d1dDkwREtneDgrUDNoV0Y4NlYzYncxRFlaSk00M2xxNkZIbE5ldWNCbkFhR25jbHV3Smc0UVNpYmdNeFRlTGl4SElsNS9VaEFXdzZ0TEZPSWpKZjUzSTRrdXl4NmsrK2p5bDdmc3RTWm1MZWxySVJIZ243RmtpRjZ3YjdERnBNQVBlN2lxTzRzcis3elRsb1R0SzY0K0xqN21jMHpsZjlRZGJTZ0M0V1E2aDhtVnNmVXoyb3AzdmlQYmphZ0pSbVJDNCt6UGRZeEhwSUloWGdtdnpTR3RUU0JXbEZxdWZucTVXbklIdVpXTUY2aDlIWjZVbXRmMnhHT0xiVCtKOFBWSXhTbHNDVm9JVUhnZ1EvOExsdkgxY0d4SkZHc1FmaXV1Vit4VzM0U2xRcFloWXdmckhWdWdqMHdtQjFnSlVPVmdPb1FYNEQxNlBRWlpLc01CekNoR2JYWFlDTW9GeVNIU1loRzA2UzJaaU5IcTBSVFlBN1ZSU0U3aWtyYjQwdUFlNjRNNmlsL2Y0aWdXQXVnaHV6aGxuY2JPbHNvK29ER1Vub3lSOCtlNEtPZFlqY1c0VkV2VXR0S0h2TDhtWmdzWTFqZGdpNjZncmFzamE1aE51TEpDb2ZScHlXUDB5cTV2enlOY1lVTWNCeW85OVc2aWlHa3MxdUJWTWRlK0NHVVVabUNPVm4xdzhhMnBRcnBjWkJWNTEzNFVhVDhyazU0K040M2pQeEU0blpOT3dwRlc3NVZkUXZCcnFFZUd3amMxNTdsNmtXQkNQWTB1L3M4c1pDZWJJT0UzOUQzemFQUlV5SlFweXJNMGNZcUM1bC9EQWdQV3RiYmovbElxQVJoMXhiZXZWWlhjZ2JTNGsrVk1rUTJQN01RWUVpek9XTmFDYWpBanB6M1ZGUEJTUllBVzc1UVRlOE4vRzR3YmpwQjltcG5HZmpiTlNGdGxvbUxmQWp4RzQ4S1IzdlVpOVMvbXdiR3dyR1cxVE8zNkJHRk5rMW5DbHhMTk54b0V3bTBnR2tNeWdmeWkrU3hCV1NFZkVjb3ZKcm5yaWJ6d3QwcjNibERUWXVFdU9xaE5yZmZCdHhyMVhMSUVxcW1CaDVITy9WMlRWYlljUUU0TVpCNkRPUFlibm5ibWl5eEdMcFV3TGRYRE5JNHVUYVpubllUNXR4VHNDc1EyVVo0clYzNEY4RE9UUk9aRVFMeHM0MHlGMXczSUsyNlpoT29JNGtnVUJSc3pWQ2c2NTZRTXZ0T0lVdysxeU1wYWM0VmpCTFBxb0FnQXNiOUdrR1oyRDZhRUkxRWRBZ010TU05dkVDeXV6RHJnTlNFeUdBcS9wbEZXWFIxbGdGVkdFcGZRZkU5WWNIK0pWRTFwRnNjVFNBSE1LL0ZOSDFHZnhPbkJDZ21MNE5TSERaa3JFbWc0eG41MXB3TzZWSkUzWkNCb293MXJBZHliN0ZjdS9Dd3U1dkF6SnBEZXBWcUlacHloTjl0eXJ3cHNzL05UYjhaNkp2V0NJNmQ1UnZuMlBJV1dOMkFmb3BWTXJDeWRGbjZUUHdaZ2ZWUytQQzNRY2dYSTVWeUlRUEpEaE5QQVhsWWR5YzFIY28vTU1rT0R5ZTVacUdlbll3c091RDZoMVF1NWtvOU9LU1RKK3FOOEgvaE56S0NCVUc3RFFwMVdCWng1bkppTmU4bWdKZDNiblhYak5qcDEvenBKNTZVbFlvRXdSTzdENjU1S283OXdDYlVHWlBacWdZcU8xK2lkSEN3ZVgrNjVtVkYrNE5uRzc0NjVIQXcwcWFjZjU0dUJHa2tZcEpHRTI3WHhMVE8vcHBNVFU0ZnFvUUdUTVZLcFkxbGtucmhmREFTdUxNS2ppTjA1RTE0bVhvOCtlZHBVeDlPUUh5Ni9ycUxmK0Y5WGlRWEFHMjJ2cnBsM0k0b1M0UmQwckd2WGxuWmJTODltellMeUtITXZweGRpMFFpUm5aaHhOV0lPbUxDVk9sbU5jbGY3eEhnbmd5cVV6eXI0dCt6cmJEQ2NmS3Q5bWY5VVdVOE5pVHN4MTFtbG5OS0ZscWlIa3BIZEJnR3BTQ0RsZFdHVHNuTzBvWVNvZ1NteTIvOXNzVlorR0lUbDF1aHR3MGFvV1RHMHo4SkVSZ2JRRHU0WnNWNkRDTXBJb1k1YXJPUEMvdlRrVjlDUUxBUEhlVWNvYUdNcHF1dnU5NkRUZ2ZlYmFiN3RNbFN1WjFucXdCRy8xcGp4NkthSnVWUDAvbUVsRmt6eDdxQ3lTaEpGRVZHMUZvWm9nd0E4cmgvM1hkd0w1VXplS3VqYmRmNDJ4MFI2bzRSOUlZU3pnUjh1bk9xWWhiK1UzK2MyUG5xUG8rSVBVNDNwelZNOEgzOHZUaWxDVVpycUtBZ3NVMTR2ekp2ZWlKalBWREI1MHFub2ZnVjVCNUtuQXV5MjRhVW1UV0xqaVlibFVobHdvT0RvR1NTOUljTlcyYno1d21wQUF1K3ZWa0NSMFUxaHhuYjVRRHNSZTM5cVpaZVp0VjZRdEE0NVVUTk1nZE5hckRQajlLYjNkdEd4Um1kc1VzZlc4ZFJwdkRld1hnRkZnU052bUQ0RkU4S0lpMVFndnhSYUJMNVlRcHNtSXhTNXNadE91VE4yYkxsdWZ4ODFqQ0Q0SlhjNGpJVEozaDZYaEludnhQUy92bkM0NGlrdjVMVzVKKzd3T3l5bHVCZGwxQ013N1VVMG9sWXhnbUkzVEpwWUpidVA4dmxWdktmS2dZaGtIRVVxaDE4Zlp1N0thRHFxWTBuLzJCeTJjUTBtQ0cwV3BKaVFwYmozVkNHTlhZdUo0QVBMbHVJYXFmbTJLOGg3YkNDWE1FamhWV25yQmNaWXFVRUtYUXBYYmlsd0JZK01Ha1FnQVQyeTJWUjNtSVVtT2loVUxwckY0T2o0NFIxUEhLekxTcGdqL0w2aFV4bW1kYlJ6M3lyNDY0aXZhRjRBOTJKczZEWEhCZk9GR1JPbzZPcHlsVi82ajd5VVRmVWlBbjBCdXhHbTR2bnQycC9zYk5iTjBZQXl5YjMxTzFISFcyOWEzNWhVVWpCWSs0bEpwWnIwVk5PV0pLYkx2QnMySzJiSVZKVFMyL3JKdk83akhCbEQ0TFNmSWo5R25yaGxFbURqcFRGT2Zvdzk2WWV3aDYwc2FmOHdpeTBvY0hMYy92QWNSUzM4dWJqK08yN09tNzVBMmRRKy9uaU9JTkhjQmhaUG1ZSXAxdk0rQWx1U1RVc3RFWUNXcHRIZWdpTk1lQ0dJR1hERmdlZVViMXovcGFHYU8zWkdzMnlzL3RCL3FPNmxNM25zenNDOGFjRzB2N2NLbStGZDNiYkNhUVB4eVcxZFJEZHNKY0UxSldmbkM5OUxaRUNGYnhVbTg5ZmJaMCsvU09ObXhjSXRta2kyL0VJMjd1ZXU5S2l3cE5kR3pQZjZic2pzak9Fc2FjeE9BVUZCdjd5ZHMyN1JVYmJpeGdkQWI4L2FQZVhyK1lKWlEyaFNDUk0yVGkzcmw2a2VRVjFtUlM5WlhyakVpTHB4aWc2bDdvN0hlTlU2cEVDU0FKdDcyOVh6Zmx4ZlBBZ2Rlb0NoSzdvbW15eUdNUTRqZVVZRndzYmcvQkhaY2FLUEZGV29DZkp6eTRVZXV6TCszb2lJcUVXaFVkZ3RGM1JTS1pMVDI2K2RKVDBQMnp2RXhDbzQ3MU91bUhqWXdnV3lpUll3R3NmQ0ZxbE5WU1RIaHQ1NFEzNjUwYWFNb0l0d1NHWlpTOFJwRUVybmFiOXN1bnZlRFJreWdST2toMWIxdWt4ekdkY1Q4OFdVUTZ2NnRycmc2WXBmcFJZSHVNK2tlV3QzNnRMQXJadGdBZkpSNzFxVVpIWjVISTFENHBURktUdlhlNmlWb1Q4SFI0YVhhWE92bEN1YXAxQ3N1NkZrNXI2bm5iYkVaUXlXYUZoeEVISFF0QnJXUEhTcjZVQWE1SzUzM1FLa1hDMlNmbnNnZUUzM2V6Vmp2T28wM2daYkRMR2ZkeGxldUh2RlRwV0V3dWpDMHI1d1dpYlgzZUZWOHIxS0NMRG45eU5QRmU0ZWkvQVNNUjJ4TG5JbUkxSzhRRUcxR2RNc2RyZm9UU3plZFJlOGIxTWpSN1Vzc1BSQXFnTG5OS3VpcW5FUG5kVm9FTGwwaGVqVmtLUE9xYUlseEFleFZrOWMvU0huQTFtQTVXbnJxUFBvTFAzdng3QUprYlhyS3N1UmZCeW1tZ0NFZ0VsejgxRU9mRTViMnU3ek9Hdk5sakN6YytBWFJ4Q1Yzc0dTU0dpb0VTeEM1UExaazN0T2F5Z0ZJaUh4MkU5TnpVbVdtSlR6VWIwQ20wUkk1dW9hVzlOUWJhNTkwdWdoNTFQenBydmNoMGRXQ1lJcTBBT3Q0WHQ0ZkRJektmRkdzQUFxeEtyMUY4OEhuWWc4M0s2bEZ0WjBZaEdaR3lXNnRYdUluWmlOcTYycWV0SW9mdWU4Z0JSdXZQdnRDYkFrQWFpbkJ2VTZkaUtiTm9DeHNzTUcwWEJtNXgvdGpJd1RGWkNNayttcmZUc3NDbXk5emV3MHlicDhTNWFkalh4d3NDNzdOU1VHUHVoVjJ5VXJFRVlyZUYyMHJTVjFwVUNnVmE0Wkp0bE5MQm1BeEJvWVNBejh4UzJXaDRZZDUxVUFOWGQ0SEJOdjJ3Nk1ZTkFnMzlWSUJBRTNudzN3dTgrTStDOXR0YVBEUFgwT2lBSFg4cEhwbEpIY0g1ZzFFa3FTbUx4NStCM3BQanVpY1JBcGRiZHVZV0tVbnNjV1NWRVNNeHNpVmNVRlYvQTRiRXFkVituNnEzWUQ5anFLTkxFc0I2bHI4VCtWUU94UW9pbEUzRVN4ZWpVWkFQa296QlpxWFkyRWN3aEVVc2dTYjVpSzVQUEF3YjlPOC9HRm5xbGN2MnU4emFDN1J6SmhqeTJQcG94TGtFVURMNU1XSUtBaDRYeVpKb1gwT2kzd3RxQms0NVRiZWJvT2NlT1VHM3k4R1JoNGQ5TDZoSGdjWTZRWjV6ZWxDVlRmNnlOUEplYTBOT0xvY29yeENUcEtUNEJlcDVGUTlTS0Q1RG12NDZsNk5qelk2OW1XZTNBWm1NUm5iam9pajQwZkFXZkViNUFHakdqYnpzRm9iNFNWNm1rMGpOQ2FyWGd4M0dSQnY5cTZHR3V4emVrZ2twZUtIclJ2Q3hiNkNiRi9SRE4yM0luTFM3ZGRZQk1ZUHRjRjhkSGk2bHRkTWtnVHZUa1pNbStCUS9zVzVad0hhZUJLOXFjWGhjdXMwTk12RlVTZWhtcm1aK3JXSGkrTEFyVEtRM3JBTU44N2M3RzUvWmZVVmYwTFg1UnlmT1JmL0dFVnRLalVZbWZPRDY0U3ZSWTE1dDYyc1VCVi91UE90WUNHR0cxMk9ycjVwVkZTS3drak9SV3RXMndCRnVtL01HRlhwYkdmYjIzYUVIM1ZtRVNJL013ZDNheVR1WlhTc1lYc3JtalU3K2tPc29aL1AyT2hmZ0pHaDNQVVBnSXpYOVluYnVnSFNaeTYxMXh2MEVYclVUVG5nZkNnUkVpaWpHSHVNL291WHVHQ3B5RFdmUmdqWUJwM25URUludGdXU0M2RWsrUVJySlNBclJzWmJDNXh1QkZXWitlSjQxc1c2azN2ZWxCQTQ5U3ZidkI2VkprRWZldzJITTBRVGt0N3JsQzhpcWdZSnU0eGFVNWJxMWRCL0xXRDJmRVVnbUFSZS9JNzdoUXFrSU1qOU1YNzRiL1MzSDlwSS85aWVsWnRSTGlrOVZEbXdwYnFyZklJQ1pFNnl3NTZaOGN5Nk9GcXdHTGMrTkhlOXZudE41OWVpai9SclZEU29QSy9zaWpESjRpSENpbkJ3clNDU3RyNjlxblgvdmNRaVFkNU04S25wQWE3dkJGVDgwcHAwcW1DaEZDN01mWEh1RFdjSHpwdzByMW0vQmlwSnBOeHlRd20va2h4aWh4TFJsY281ay9yYjJ4NkZ0YlJQclJoYS9TYUk4ZUtrNFdRZEszMDUrNlpOQ2docFh3bjh4YzM2dEN2MWMxQzIzaU9FSzVHRGpUVUE5bHNlRTBTQk04QXpmUW1EeGhqNSs1aEpNWUtiQUEyRmNUQ3pQTEsxWWFZRUJ0aGU5Vmd1UFZtOTlyajVqN0VXejJncGhZMmRBWWFyKy9HYk5uRkRxTUh3eGxpRW4wTW9UUEZSTjVnUjdkQjNZOEZKTThveGhqcmV6dDFuc2lCSFpYV0NRK3RrOEFnSUNBZ0lDQWdPSjdSQURCOU5FaGFPeGVTQm5aR2t1cnJuMm1ROVR6UVhUaWNqWWlXQno0R3NHMEUxWmMzMi9XRjMyL1JmNmZPays3dUY3N1B1RFAyYThiOXYxY1g3UHRVZCszVWI5dWlmN05iblA4UHJLNzdmcGw5UG5WL3dmWnEzMmZhWi90MkgzN2ZxM3YyZmE4Nzl1dUg3YnEvWnFHNGYyL1VFL3M5L3pYenBQMi9ZTGZzK3dQL1QxTDM2dnBsZjAvcnFkK3JTTDlWdGZwNk5EYlhjZVh0SENUWlI3VWZnOXBMU3dXc3E4WVBLY2xnd0JRdHhSMHYvNUROY0RYalA5S1lLV2MrdVNKYWNNOTlCUDhObllkVENnSDU0U01DSTVJM0ZjSUtCemdVV3pWZXZMcVBHTzFEMWFseXo0VStGcElaVnFDLzIrQzY5QlBERGhCdFpvbVNrZnBXZXdyVFFZSmYwNlEwNStsQ0UzWWFUMTlLQnBadzB5cHN2SHBOL21HNW1PblRyTzBaM2J0SDRaQzB1R05rZVRLQTA1RHl0WTJSb1ZxVm9xYmZIcEU5b2RHYUJsWEw1dmNMeWlIUlpNNFNGZVRhN3hZcm1BVllhZkVVd2Vtc2JxbWx0bnN0Q0JyQ0gwZ3BvWGRjN3BHcjNtNFVkc2ZlNzJYeis2MS91dmZFVGxIVEVvR2JzY2J4TktPdmsvTUowV1ArSFZBNDdGM0JVL0tVWHo4eWJJSDh2MHYvM1c3a1NTaWRBdC94Wm1IU0ZXS1JRNWpwT2R4SmVIVDZzVVI4R1k0c3dZUzVENDEvTjZhaXM0aG9ITkxsN2VETHJFenMweHgwdGpaL3dmTHZkazBZR21BSXpQOFdMNlpFOXQvanRKeWxVVGROVksvbUFIdE5RN09xTEsxNXI1NXhPV1pFYWwrOXFJTzZaSDBRSHNQWXdBd2JwaHozUzBoTDU4L2E0TnZ6Wmk2OFBxdmNlNFFETWFtdmQwc2R2WFNXMVpZOUpMN3ZzaGkzWW1SWEdKais2dnNGMGRicWcrTXFsTEhPRmU4TXNzc0sxMkpqWkVIaytaalBUekFnWGY0UUs0cUY3T044T2xIRGw3eXpFVzdMc1BhRWVnYmZkM0NadEJnbHVQN053YXROQWs1eFM5NnJObFlRQzlYd1dkRmQ5K1hBdk9RUFVzQnBPanFTanpINDR6RjFUWkovdTdIL0Z3OHdiTWo1ZWdoN2dXckFoTWJPN0l2L1BDRjJYN3pnWjJxOVVsZldMMW81cTdJdVVHR2VrbHd6WTM5bDdqUXhmRUlSem9KcnVkaDhlVVpaaDR4TURZdmt5RnRlVUZjZkhibkNNZExSRFdOQVB4aXBqS0tqZ21TZWFmL1pOMFFDaXFoVFBKRSt4UVB1aDIwcmJzR2xJYWUrak9RY1p2dXlvc2wxajduRXNJVXhaQnRHZU9QM0pqb3k0NVFEWnFhRG8vK2VHeWt5MU1lZE1tUnNpZEkydE5xWHAwZVFpbU5aM1hpV2ZUSk9XTW9WRmJScWhSbTJwVUdKcUQ4UjJObElPTml6MExsdVBhWW5lTWc3S1VUVkFFVXdDV1psck5hcC9ZSlRlUUFsT2dtalpOTlFLSC9TckE0ODY1M1d1SURGbEpvVkZtZXRRSDFOMTBmM2pKSkR5VzN6d2hoNHUrSHNnd2thdDdRWm5EVGxMTFM1eHZYR0ZpcTlidys3c1ZDbkl0OGk3UThrUy9WWm1jRmRIem9WZFo0Qmw2S1pObUV5UGNNMlF0d2RLUDNESmpBUGhGZTNJODBjZTBtM2Q2aVBXbUQ0VEJjUDI1bk9VcEJOTHRuNmcyTndxM2tyd0RIRnc4KzU5SEE5Yk93cStrQm9UbjZORCtoYjE3NThidDBUbVZyMlhSYmppUFJTaHZnbG9RT3owMk1haSswYUl3VXZJOThvWHVIRGRpVlZCQ1g4OXp0ZjRabEduWUJMVUU4SlZHUmV3SXdNbVpjTGZTQlZPV1BzV0ZiQzZ6SGFBNUFHSXdrckpWclpGODJjT0NDYTluUjhvc0hUUU16NjdRcVVJMVZNVnJZZ1VoTHZUOWErWVVQR1ZEaWQrMjVpaU9SUS9CdUVpY2VGWUhzSTVqSEIxbzhnWDdGd0VZaXluRXZ2ZFZUcVVlbUIyQ3FjS1lIU3FPbUwvRzhjVU1mdHBmNTNJWk5tUUZuSld6aWdiK3doaThjTXFoSVVxWHZ1SHY0dEJkb1h4ZW9MbWpsUHVWMmdhdHBkdENTNkFIVSs4S1VlT2dKbXdaRlhoT1RsTzEyNzQ0WGpwZ0h0TnV4ZlNjNWtuUHJBb3NuVGY3ZFhXcTdTVDFtRXVkRXJ1TFdhQkN0aFZNV1g0c3RUOFRaVlNHMSswZ1lUaHp4VjY0WTBIMG9ibng0TkVtY3pxenJHSFpISUw0V0lIL1c4emlBdmxkaE91SHlHUHBVcG1VUFZndG9ZcDZUR0J6d0ZOQ2ZNLzY4L2tuR2xQZWNtcmpMcXpZNTlJNE5lVytpdXdPR1RQZ3l6cTBya0hHcktmeFFTQ1M5eUl1eld5dUhCM0E2dW85U3VvZXNqWTcwZlJabXNZZFBPVHk4RWJPUVJCRXRlTEJXZktJeHBGekFjaGs3QzJSb2NGbVRNTDVidHUxVmhoN0lsS0pka2FmTE00R2IzY1E2QnpCVkpaRW12dyt5bm1pZGkxV2RNaTdVS3RkZHFZTVJGalA2TGhrZUJPaDZtUWg1aS82dWFWYjBqWmIzRmRJSU53MEJIKzZhdHdrVDIvT1NybXRSREV3UVFmS1VoMjVzaEpEUFdCSVdxV0JiKzR0MG5Mb2FYRUN3VUFhL2xSelhyWUE4N1BQTWNYdy9paUVLUkszWW9DMUJvYkRENUZVTTQybUlTVGJCUnZqK1dTQ3ZaaldYNVpvTGRIMDB1TFQ1QkY0bFVEakRYZ3dMR2xTSnM2NFR0OXBQWnJpRS9YSDNuUUR5T2pWNjEyNmFDV1ZEQUR1dDh6UjVYR0VMMXVhRnNxUENnajk4c05hbFpkSWxFbGIrQnpwbit2YlNXWS9KdnFxbWIxZTljaWhOZFpmMDlqS3h3ZmVmSm1saEhJa25oYWd0ZTAyMjlrY0ltcXBoMFZMTFE1akNGR1JiTTNvT3RYR1ZSV21aQzBQamtJY1NESTJ4NHdJOTZ4SktwUHU3NHpDcEZmWFJsNzZTNjBoU0ZXWGF1NkJPNkxWTTcyODhEa0JWVFE0dzB0UWo0Y0ptcUYybnN0ZGpmeURJaGE4eENvOGdHWDBYTWVMT1d6Y01OUDQ0TmJKbkFIT3FYMWpOeGNhRG1UMnFiZ0Rrck1JQTFpNlJmN2JKMGFEVTgxempZeWdEOGVaQnlCaGhHcHBPS01oc3pHaURrRTdabFdyWHpFTGV2UTZTMHlCcTVaWEQ1SFNyWGI2OWQ5TkEvM3kvQlUvVWRsUWxxTzBoM256Qzc5d1UzNFJSWnR6NUhtTGhnM2ZiREdpMnVJQnlDMmdyTUtWeHFNaHRsS3NqdWhuM2g4WHQ2dlliei9lb1B5eFVNTzM4ancwOEVDS3JWVkN5S21lZklFdVQxbzlFMngvdjFBd2Vvb2lVKzZ4dHROeHozbHFaUHBrM1BmRnlEMVR3RCs1aFZycE9wWUFrK3NUbkU3bG9uMjJoNmo1bTFoK0tNNUsxNFhpMm1WaCtlMGdvWFpEeTBoV0ZPZnh2OTIrS09oZEF1b210L3VBNkJpR1daVFAwY2RjUE5WREhyQWFkVmNteTdlYlo1NWZLOUhCWFRZOWlDWWVodVI0SUhmSko5bTU3TTIzdkJxRVI0dGNxZUhCL1UvUUFUVUs1T3JmY29oM01LZ2R4aTlTVkJWMjd4b295RzFJMFQzN3pzUVlFVm9PRTZ5KzBlcEQ1QUNNNHhTblNDZlVRc3JWRiswaGN2Z05EYmRaSld3OVVXVkFrS01XOGtiT2xEYjU2Snkxam14eGF3OSs2Q2wzaWRHNjJtUnJsUmZ6NlozRlBYSkNyRlhqYy9iMHdvMXBQMitjbDVTWGpnWWxWOFRuUTVFTVNKelgzSFdhRnF0bmpBM3h0cU5CZnRtMXlSbStQWjVFbHFVZ1g2Nys0djI4ZXIzMGRrWjBsTkVxWHBwL2FjM0ZkQUNDZUVSMG9LdmhRSXdyQU11UTIyZ296MS9ORHFPQi9semxUSlRHSWN0TUNlR3hxNkloMTdMemZJZ25CNjRuWVBwbVltTUVpamFwSlFvcy8zK0VBL1J4NUREeG55clB0UXY2d2FRWkw3Q0hvQkFOanN2TkNraTRHd0tEZkNHclZNcDJBdmFqUFg1Qmp5M0dITHIyLzJCMkRCODJjMXczTXgrUU04akdlYi90WnJncjM1TklXZnBXbG9zSkFLOHN6VjVHb3JuRjdPWXJFTGVPeGJuL3FwejgraWVoOFhPNFRmcWMzdDVGczhaZ05oMjdUUCtLNVRQOGNFaksxVHBwS2E2Q091NCtCQ1NYVlJXd0dTVDliV2RlRG1CdGNyVjdlSFVwdnhWUXp1NzdUemVUajRMd2toOElJRDFoamE1Z0drUmhnb2NUTVE2MllsYW9KS0srN25xYVpubWIza1pVTjBMb1gvUXFmRTkyaWZBWUtRbzkvd1AzSHh3VFN6dWNxMTIzSSthSFpYZ280UlljdlVvcW5xOUVsMzRNdTh2M3FmejdlbXVxVkNqL1Z2dy9QSWY5QlFLNEtRaVd6WlUwbENKOTNLUXZvVEpHak43M0hFaXNkVTJvOXVJTFl4QlEva3pCdEM1TVJudUFrNkZwR1F0WllyTUtVWXJKZ3ljc0RrTVg3SlNhVFdvbmFaRE1CenRFWElueC9hSXZNaGVVZU5WOE5wdUl5ZkVjYmxvemZSTjRST0pCcmFLbk05WEljeWZVN1BGeXJiTTdwNXFnRHBtNUtyRG1XQS83NjNYK1Q5UDR4Qk9jQi9hTW1OdmdpM3ZxOFJwU0Z4c1hybXpUUEZQNjdId3dEd1FWRWF0Z3dwNVRRb0s4WkhuUEM3OVhhWW9nc0QzVzlraW1aOVdVcFBkTzhDV01zNDNpZ1ZZNk1rcTRGcmt3NXBsWmh0NFF0cjBoNlNoMll6eUVIemZqMFVZZEd0dkNxdndDOThsUVNnSkF1dGt4a0RVZ05MaTJ0dGhiaGxoUk1TazNyM2NCekZnNGFKV1Ztbm5lSmhVV1V0UmF0cWJCL0dQbnZiR2drS1JzNHpZL09Pd3ZNWitYME5nc05tckpPV2xlZ29neUYzM2NIUWNaZnpNb2VldHFWaTJBZ1VnUFlUeTZkMGFWYXE5a013V3NPd3hxeks4QWVPVjJWNGhOWWF2OGNIS3VPVW4rbUlrakpXekNjM1A5d3AzekFCbmF3WjhKK1Rob1FCV2dOU2tsK25UQ2pRVHdTcVlCL0svRzJLS0xhY05ZSlFVTXZhWkREUjJyM05oT1l6cktZYVkybEdVZi9PVjJidFdQbERMYnhORnlUYmE5Z0VCc1M0d3ZNdzh3cWxZK0ViM082VUFNbG0zR1ZjdUhjN3drMjgvd0lvdW1hR0JpWjcvR3hSOUJ4Z2ZjQnhjbXlKR3kyaXRralJMSnh6NHdOeURIczVQMUFpSWRFSHJ6ZWZ5Y1Nqc1QzVUxDS1N6M3M5d2RzT05hNlVvRmZtNHpYajZrdCtORmFoNU1ocXM0VGwxY09vNFhMdi93UFkxbUIva21XYThjODI4UVgrbFpEODNHcis0S2lZVWFiaE5KaE9UeHRnNXRwVllxdHQzQkZxeEF6Wkd1Qjh1REdzNTkya25ydjN0UG81RzNkTjJuS1hETTM5TllQcXMrVHQrUGNqM3N1aGU4anl3b3dVUDh0M0pLYUZpYjZnNUxaclg5UGx1ZGgzZUlYVlAzQzlIeVNGRjhTZmJOL25KSk1Hd0dCNnlFaUVkalJUd2E5MC9oUCs1TGtuRGYzRW1Tejh1ZUh0bXc3L2VpZW45VitCTllHZFNjZWlsVU1rVzRRaVZrNUc1TGhZd2xEVHpKZkdtWk16cFQvRXRUWXZiUU1KSTU5ZTMzSU5xcDhISUdZMkFrdWZFQUJHK2k4V3BvSVJmOGFYMG9FVTMrUWpYQjZCRVZEMHcvcWNySzkwMHQxQmxEbldGWFprU0pERXFDYjIrSFZRZGxoZkh5VUg4RTBXNVBGdnUxM1NQenFLSHY2R2d2S1ZLS1F6b0ZJVENLZUdFa1RzbkFIa3FKaEx2QUk5UHFVdXdkeS96eGw0L25TVTloY2YxM2k4OHkvK05rZXh0cVc5WmR0ZHBNbmZVQy9rNnhscUt5em81MC8rQzYyNXNqUXhyL2RBSS93YzFURzF6SkNHd25WMjBkNU9FVytyRkJiQlRndFROZWdGOXlCTUZwOFdGaFVCd0NLZ2Q3NHJDWUVuUndUTkYrY1dvWW5qdUpoQ0Q5U1d6Rlc5UngzRlhtU0dWUlNUQkdBSEZKZTAyd1JMQzRNL1hRUWlzWmFodjFxWWt2NHlUK3o3Q0hWSzJwNU96SnhsbnRQNnJmTkFqcDZtNHNGWkR3dzBXNTdGSUxLL3hucVIra0t1S1lPSXNWNktuSG5mNjdiUVFrSFR1THpCYzFOOUlIRXd0UXFBY1hGN3BOVGIzUTNXMk53YkZhVEttSmNmV1BvZlEvbHZ0VXYzbjM5cVdWbEtFZExyd1luc1pUdW4xT3pEUzFTciswRXFDTTZrTklndDlla0dOMWtEVEhQL1pBRjZYVmJqd2FRdzFTcnF5U0ExK1ppRExnYVRva0JuM0ovbnVKSXJFbjhSKzFVWjF3YXUzaGcybVBuWUV1cHd5Y1R2N2VqSVk4Y2ZVTmljaXh2cWpwUlNBVlR5RXNNZ0xRWHczb1JuOVIvZ1NHcENQTnMvR0ZBNlg5Zmw2Nk5PWHFtWEY1b0Rib3l1MTA3T1VMR3R2bCtyL205RC9TNytCOW13aVRLOEpVQ1V3WEttK2V5aTdpVUtKb3BMODFWMHRja09ocEQ2cjZxc1JoR3VRV2JzZzVKTFZ3WDZiU2xyUFlHcmRMN1ExS21mSEFYaXVuTjZZMkpUTSt2MERBMVJoaUw5Qm9jRVJoM0NnVEdZM2VWdmhmK0dONnN5emtkMDc2bGZEdTMyQld0dHpPVDkwRG9tTWVGR2JTUzJBNnV0K2t6dWdIc1VuSU5YSXdVZ095eFhjNHFKNEcwUnFWMWNjNlZ0ZXJTck15Z3gzTXBsT1FXbW5OUnduWG02TG1JRkZnZUVUVEhyNmE5NUpRWXREekdFdDVCVWxNdEx1bytNelNjcFhhUmNkWG0zTEVJRnJoeDlVTzd5SGtHUU1ZNXB0VUhDMU42WXJkRW54Z081Ykc4YWRXVnhsRDVYN0czaGNuKzBSWC9RRTZodW9YZ1BQaTFXT2xmcStvRnZtWjBwZ3QxM1lKb2FtNlF6ZXpyRTNmTk5yc3JyN0hHTUtSejlCRjg2ZHhkVEpDd1FUeVN4ZU83S0ZleDRLL2dzL2MwblEwNlp4di9SYjRkeGJZMXNQUUJqY2wrV29tZXdrSTFQSkFKYTl2YmhNV0QybUZ5dnRGUG5XZ2podUh5ZXBxcS9xNFZZV09hek0vQnl3amRQNEZUYW13UHR2VXpxT1AzOHNtVHF3NW1ubVovTUt4T25LMDhEQUJWd3lyRFNRUDM0bExEZmdmMjQvb0JOM3NnNjBEMVVBb0E2LzFIMytUOGlxOW4rUjRaQmNzVlhmcWJCai8xUW43bjdqdUVtSjF3UEQ4V0lZOVllUFRTdVNGL0dBZVhuM0dGa2V0Y2VOblBBdXE3L0h5dzlGZ2lvMndzS1hmRXRaRzRxSVh3bDFhNVBIVFhMZUkyendiNExMSlJuMU9mZjNiSXdFRU1XSkhFQmdnaVJLQTV6eDBTa3I1aElWU2h4L2doQmprVkMzbnpXcHNwZURpbVBHWE1OZWl2SGI4SkM3MlhLOUxRNDU4VUFCdGp2TTJmeHppUVp4SFZvLytFZ1JVM1g3RWlGazhMdS9Ud0JrTVo3em1Sb1N3ay9tV2dacGVueis0UlFRS2NoZ2V6QjdhbnN4QVZxaFJyS0VSQ3NFQm96aXEvOWpzRFlkY2VxcUxvMzNKczdBcUtMb0lJR2xXWWkyNThpcTI0VThCZjkrSGVlbGc1RDNSM1pwc09UaTBKZnlpcU53ZVljdGZTdEU0Yzk1emhkdGJNZ2VtcVdLOG94WVZHcU5QRW5aRHpFQmVSUU9WZzlGRjJJTWpZVjVLZWYzaGNDUFVnclY1L0Z0MnVWcVo0U3ZnazBsSWY5ZTdVcFA0QTg1K2NnQlByUHBKUEpWK3YwWHZ3SWhEejJEWmpnbG1xOGZWNkwzWXdpUjBRbXBiQlRMZVZjSVdEUEJzenNUa3kxcy81cW5tbnl2N3NhNzV4cVhOcE95dEtSc2hJY2g0RkpOeUx1S1h5b09lWlRMemdzZE0wc2pnUnVETyt3bmMrMWQ5U2JYc3lsZWZUcithOXkyTlFmdUR2Y003cmJDRXBSRnQ3UGVhYk1xRGxVcU44YVo2OGJ4dHJnaXdzaERIMWFOaUlXQ0VSbHpYVjNXNXpkeEdvWDVTNm15ZEpQNmRLMjE4TkZlc1lVc3lXVkNKMW8wY2pjNDFLM2V3dFFaQ080Q2Rxd1lBSFpnUmtvMFdha3ljNDhNUlY4N0Ivc2ptOU5HQ0h2UEVHUTBRUDJGMXRoY2JrOS9raFNmdEljQzZoNnErTEVyai9hanYvSW5kblpoMm5EbzY4bTcvbkUrSW54Ky9VVWxMY1ptQkFBYjk0SjJvNmhQa1B6NXZmT2RObm5jM3RoSDhnMVFOUE4xZlJXb2E5cWs3RmdjMEEwcEM5ZEJZQjBuNzFZUkw4b2pUL0NUODNXWStwc1c3RVZmQUNyRVlHOVhqWnpJdS8rRXRFQlI0L1llZHpXT0FpNXcrMDJaS0Vhd042WURwM0RFRWlYNTluVWFONllTNEcwbEpVYW8rOEw3N0xYbHdtaGw0Q2oxREkxWFlzWDJyRGlXdjR1a1JZZnA5SXZ4QUdZbzBOMFRqUWNwZW5NeTZMaFdKaUJqSE5hdE5kVmxJUFQxVmFIb2hBQjRPQnRiVk95VHJreG1JdVpMdW1XUkdhQ29YYTFSOThlNkJLNzk1cld4QWFJQ3Iyb2hYdlVLVVJCWUJYL0dISjFFZS9wMEYxeXc1RTJqaWVCd3crL3hRTDBZMTdpUXBtK285QWNXMGlKRFQ5ZkxVRzVZUTltYnJlZU1vcFQ2ZzRUS1UvbEtpWE00M3J3aTRoL1hzblFJcmE2WWNaRTBaczA4WDBTaUx4YmhjNGs3NGhJOFk2MnJwNE4yODFrdCtneXAzMzRhL3RyS2hCQ1BmSTljUGViNDVRVWtDZDJyWEY3WVhQcE5UdkFvMVY2bjI4MXRPVjhkVVdmL0tSekZuN1Y5YzhISzh0Umk5YkJxSVhzZEJNUFloQmhnZk01TDJpWXM4YzFEK25PaFA2d3ljcWNwZGE5T1Q5U0NKVFhmOXEwZEVENWtwdkhKdHQxU3dxYVlUS3Y4MHdCeWxYVm4velFzQzNlZGJlcWxCVWFGZVV4aEpVbFhRbzUvTTNYUFdYdUYyenVORlZyWUhiOVcwUzBDR0YyM1h6QmRGYnNIb0pLWUNkNzE5ZVQrRWVKSERIUi9SQm1NRDBRZmphTkU3VlMvMnYzUXFNTWRrMnJyWVIyN3dWcmlJcnVpbXZHSzl4NjliVmE0T1dsR3o5aWlWMjNUQWsxd3lDZy9UT0d3RWFXcWM5T3F5OTVrUmFlM1M2ZkQ1S2R0b1VIYXp4UUtkTGI5WjErMldLRDhTNGR6Z1NiaytIR0d6ME5YNHFRUmJmTzNCcVVXdjVBTVpDVU5icVVkWk5pRFN5NzdNWUdaakJWWlZnNjQzNlN1dUpCVFk4anMzQ2ZlNDlUWkg1RWRORXhMUm1ST0pwU0liUCtJelJuckR0RWtoelJBMS82bk1IMnoyS0VQN3FUS1VibXAyRWZRSE5MbTNkeEhUK1JMTitLeDV6Qk5XckdpclJkclBtKzJUTEUxK0J2MU91bWcyc2ZwRzBpZ01oKzVmdjh1RG9pQ2U3eVZoRGRJOFVaVFhqVExZQ0RLcGRURjV1RlhIU25FTUl1aGREQk5ISjJueVpsMCtVdldtUi9YY2RZNC9oQ2JEbGtOMzhXd2IzZTVyTTBTN2s4NXh4a1c2WWNsa3UxUmQwdjVoanprUEdSbmt6WlZlbTRPM1Y0Um4yMVB3bW1VUUw1eVVQUSt6bnJLZlJieFBCb2pqbFlBRENsN2xxVEpqQlAvVWdaT2ZBZ3lHaU5wS05QOWxBWlVjckN2UE1rUGNhUXIxcHFCQlp0WXNreVZQNis2T3N3VjNtZDZjcDNOaFZuU0hFVldJc2tsRUVpeU1PWWcxcGp4NjE5ZGtlT1VZTHBoL003VUlvWEk3SVNYelFyRmRuTkVybWVyM2tDWU5OTUtFOUlMQk5yU1dkRXUyaEYvRHpFQWdveDJXSFE5MXkrSHMwbDFURU54bFNpVk9BTmZJRjdZWjcwRGVLOGtrNDZudElnc2RQK0JSMDdscUcveXFuLzJKdmpLNURhUm8rZk9nb3hjQmlxOWVmZ05DdXVnRGRubjJIR0k1NG9Gd1o1Q2NYN0h5SURncVdZQWNrL2dhRGNhVFZrNzhjU2k1dnRuaXlRc3NjcThFUVowZ3VIS1NLOFJQZFBTcjNuM3hHWXI5WDVYWjhwZkpkVFhOYlI3TFU3WThjYWRKMmVwSlFkRXZScStZc0d6ZmNnTVQrV0V3d2o5Mm1TY2tzbkY5MGE0UEUwZm5CT0puTHdYVWtvd1JIVHlESDA0UlpwVGxQcjhPenVLQk1UT0hldHNtdkJ2OVR5dmszelZITjlBZ0N5bHBaVmd3RW9lMmJEVzFxNk9DYU92T3lnSHVKU29uVTNxZmZidkxyK2V0SGlkMnNZOUZuVjFJUEJqTTRPSVYrNDNRdmk1TXY1d3dTL2VuNU4wQm5SNmlydG1tRm9zMXEvZ0x5TnB6T3ExT2JtOThGOUhGTXNkTjRQOW9ZTERhcE5YVkhWY1hwL3pWMXdSbGJSL1cxR3MwWWZOeTk2eUVzZnFLcFMyZ0tPN2Z2UVFoN24zUkRIQUx2Ukg3akJWeWQzbjJjMFRtbkZQeUtMSVRDc2JJVFZUT3FjM1FRTVl5cXVIYUpFUTBYanczTG45YWpjeGVSbk0wZUNvRGZFbGVxbFNIcGJnM1dDR1MvRUJNNGhOQ1lNVXFHVmJob2FiSVY4dGI2OUNwUVk4SUEyVHBKUzdlanRUZUZlSGRiZzJtZVF0bVBIb2FjT3k2VUxGbkp5T0cyR1c1VFQzL3V5NnpFVmJRbExMRmhSS3VtVWV5TDVVZXQwZXFTeTFnQTdDS2ZmVG8yNXJ6Mm1iQ2lyNzhHa3pTTERudkVIZTlaWTFhY3hWQjBHdWZpc3RVaXJRK1pEL2JJdFpLakw3Uit1OVJiMzNGQmlWTmpLR1B0ZlRsYnlacE1iUnB4Vmo2M0hIZnhVN1V2WTFGTjBQNFZOckVRWXZhVkhjUU9rZnpONmYwQy9rdjJabHh5NElJQjdIM3YzRkJVNlBBTGI5Wmh5Q1MxUVVaOHNzcUdlTFdzQWp6WVkxTHk4Wjd1dVJFUDNpcEk3M2JDdm5oS1ozNjVhQVFKaXJ2THBGRUhydUZYbkswQW02Z053ZUxmUWRaMFBmRFArNnJRUVQvSDJrc2RLMHQvcDR5TXVhd1FnZzM1bjNNRVBqWjlYaERJSlFER2dyb2lhb1IxY0svb3gvTm5OSk5WZmR4OG9Wc09uZ1VVMEUvWGlPZ1M3dGsyWnR2VVkyN1FDQkNUQVBkdS9JKzN1NTZIbVdZdFdINnhlMDdFK0YzS013ZVNJREVpM3hxcTByV1FqZkZQMkdVOTliNXk1eU5KWGpXMTNqbncwRURvY1NEQU5sT0RucnRad3oxL2pCVHBSN3NoRHU5VGVFcVhNSFR1bzRPQ3VIM2hPVkdmaE5Uc0UxUGVFQjcwVUwwZTJUUTNlN1RzdnpNZjUvRm11Q2VMdWo3aEJCS3FobXdnWklXV3c0aUpHTkVUem9IanJtL2xpWHJ6N3ozQ1NELzRZb3p3dFM3YjBjR1Y3em5SZjhDSGh2dDVQcGRsU3JIS2huMlJ5aTc4YTcrY1c2c1dlTUZFNDJzdDBkcW1teU5JVVAwQzdvRVNjWVNXelJoelcrbVpBWExmNmF2NERlYVdudkNkRVdHdkpPeGNITVMxcXdjdHFaVm82emxibDNYZWVyM01xRjMxTXlmSlFtV05IaGtVWmlZMU5kWDc5ZGlYWFoyMnArOU1CSFFFM09GT3JveGNMR1AxaTN2bEt6MGJLYmovZm5NTWkrMk5LYXJFaEkzQURQM0sxSUdNS3FuZHRCalVKT3dCWm1jK0dhU1g0YVV2ZWdDbE1VWElUV0JtT3hvUEFUMmhHTFVIbzRKWFBTZitJMm1LME5FbXhSUXhZdGJ4SXF1V0tnZ0FvVmVGcG9zbEFvMmxuNnZGSEliaDVOYi9SNmpRTVZXN1hTQ3VtSDNsU3BkcTh2ZXpVS0VTRHN4NE4xNFp0emxXSkY0aVRQeUxBZGw1RkpLT2o2Z3U0K24vZWxQQTdidXZPcU92anB3Wi8yd3VLNTFPVkk3RDliSTJvRCsxbUNycEhua3plUHV4NU5NT1RBNkxIY0FZM0F3MUdWbmJ2eWRoZUFaN3FuSjdSQm1pT1BIR2FKcGpPSlF6ajY2TEM2Mlc5a0ZSaWk0VnErN3BYYmpGSnZkUyswVjc5UGlGaTN3b1AyNTcwS2owL21tRVhQdVRxZzNVZUR3RWtiTVFJb21hYk9yT1FCVURnNHhBK0I4cjdtNzlUL2pPZG92ME53SDR6dy9iUE5PQlBESmpoWldFNHllb25xODdaVDgvaVA0N0NYVHVIUnQwWFY3Ym9QTlJ2ayt3NU45NG1aRXIvYlZEVVVpVy9yRDdGQ0xDYytnL3dzN016TEhuejhkS1I1M25pMEJOUWNGOCt3aWMySUlUY3VmZnJ0NnIvZTBSUFdXZm9RVkxjS1FZUU1VZ0taMHdMNmE3dlpVNHQ5TWNTU1BOc1h0RmpqYXl4c2I0a1NJNm5TM3A0Q1JHZzdVQnk0N3YxQml6NkI2TEh1UnhwdkNHVytpS2NiRGJ0dFowK29QdUpUZnFzR0lyRWRLdUR1aVZPOHNpYS9HZ1VCcGZsb2V0bW42b0F4dHdsQ09wZExUSG8veWM2WnE3dFJmT2RYcFlDbTdXU1p4MG8xU3ZvMlorSCt1TGFuWE9TUmIzbXJOckVoaUhJSWVPZ2pJdzdLL0lDUktwUHhYc2hFenBjWTd5b3Zaa2FVNW5FbEtSR1ViTEtOSUQ4Vk5jODdCLzJBemNxVE9uaHpXQ01HMXhWT0FyZEo3bGtKMkY4MVpWdzFidWlYcHY4TGdGUWxHVGZtTTJ2Q3Mrem1PRmhUbVNCMkVKNk1lZUU3Y1pjSjQrZ20vUkFtejB3QmZwL1UwTVFhdmZxZGNJSFQ0ZTJOMUd3MEFMa0lmaFlKSVA1YzlFeE5oL1pOYmtSR2hPTmFwdkJyOER2dGp3bHJNVmJ4V1JiNm5veHNrQU5WSkNvVlo5YmQzTjJsWkxXb05LZDhySU10NlB4K0phNllZOUVNeVloa245QnpVcHJvSzkyeHBnOTlzVXhoY2RuSnZzL2JYcEdacW50VTdkV0U4VElEUlZ2dWdOZi9MbUptUUxPTFFmTXZFYjFYcVBHWWR4N2NqcDBHRU0yWmlqSFVyTUdHdDlPOUVZb2pPYkE0UTVidkFoYnUwSS94Sk9LeVBJK3d4SkFqd3UyV2w3c0FCYXBBYVFZaW9yWEdYRjhORndWL2dpOUg5Tmx0aW9teFhJQTNpTkJsMmJZNDN2eG5MZDhmZHY4K0FCbXgyUWt2SEdPOVNZS3BhL3dUSUtrNVJ2dUptMXlzM3lzVThGUFZaZklLY3hIUzhwTDIwQ3RrVTUvcmlEMmYxT254QUQwczZiL2s0MHZibTdScm1ZRjRxb3gxdEpESURtMHFNbVoxREVUaEFRSUdiR3Z3YlhpdWo3aHo1TEpHMW1sUWlCajB3NXViZmlzUXFJK04rY2pZN09iQXJQSk9PU1Q5WVlRN28yS1JPMlFTZXZxWjVEbS9zQTY0V1RyRFQvVkNpVVREZDlpbU5sUnNRSG1aRlpOTTJmUnJOb1REenpzekpJWldtVGlhNFp6OVpKVWJwbitYZXpPL3ZKaXBsdjJRWEw0bWU3MGIySFNqSmRiZkZDWHNMUkc5elZkWVlWYmQ5RVhDd3h5ZW1RZjRQZUxoOHJJZzljK0dZU2F5dm9VenJEYk1TL0ZmaDdQZTNvNDlDd3lNUWJ2UlhrL3ZmRndqbVV5L3BUOE9YZVZwNVk5VTNjSzYwbm9WWmhPWVV5NlFZaE43UlBxRDVmWFFpUitlMmNKeE5PaGVEL2ZPTEFZZ0dmcUNLbXpvUlF3YTFqdXFteHJCL2RoQ0Z5c1Jhem1HM3N2dmp3aGJGMGZVVFloc1UxS2FLK3hwb2Z1YzFhSU1ndGNDUlVqQmMwYU1sR3V3Z2dGd2xtUXB0a1RLY3FxS3pHU0ZkUnhtNzJ0NzNRNmpUdmZTUmo5Y01yUHFyTEhYTHFKMGdpMGsyYVVPeVYxMlpOcU9LN2FFZ0ZyUllTVS9KQmpVYmFIY2pjNDJJR2ovZmlOYUprck83ckFNZ3lvekZDdlUzVVoyU0twL3dSZHVCWEt4eWZRdFAwcHNUWDJiMnQwY0lNbmEzNjJqSVBlOEJ2TXo4ZGFiU25wOFFGakpxTUhJaEFlSjJ2M24xaXovNlk3SHI4a1ZNamJNMHNUVmxsRFdiRmZSRUNZTkVRVldlTUZYUVlKU3YvVEFFUkkzeElNY3MwN0M5T2E4TnVqK1ZxQ1NoQk5ZWWhGcUtPQ0FFTGZZb1pYd3Z6OWUvaGI1VVRLS212a3RSK0lncHdjd1BXT0o0Y1FKVW9zeTEweUUvSmVIaFYrUHF5YS9RMEtoRmpMS3poVm10bEIyYWg4eEVLdStjc1Y2N2RyVHVSUWJzSU1pZEdhT0owbG9mdHMva01GbkVCNkhKeWcxV3VFOGVzTUZsckZNa3g3UEtLdzRyakpwTkIxTG1ZOUtWWnk4STNkK0o0NWQrNWVhZVRFTmVJTE1peVdibEdvL0FJWGt3QTVwRGtsQ3B2R0JBWWttNWpMdmF5UFhGU0plZVZTVFY5N2tGNHZDMDJCcGZwanRCM0cyY1Q4SjBKQVlCTW9uV3RBekFvWTZKNXU1anZWaENpcVhGQzJLdzE2cmdLZTQyZ1VJMG8vdURFN0UrNU0vZ0psQ0FtY2cxa003ZUJ2emRxVWFTdVE5d1hpZlJaYVA3cEVPRlBmSi9UdGNXVHdLVGZOdWUrWXFsVWFYSjBkWllaVjJUdXpKaDZueTFrMFNGb2oyUG0yaU9mZ1dnTWEwUkNjK25wd0tmeU9jL0tPaU9MaEFUM1ZzbksrdWNqaW42bDVWOWE3L2c2WXpEdmphWW55ZmV1VFFkbUtsK1BUSE93eVhpQm9vbzZGamF4OGVQV1lHaWEwbmV0SXNIYnB1ZHVpSHJDRTQwMDkzeG03dFFXc2NFcUVWL2dxWHQvZDVFMm9Cay9TVzhVdTJKbi8wNjdTLzVoWG5RM1pZaituaExtZjcyN1N0MHZKdjduak1nV1dxQU5ZL29ZQUo0VGdJak41TDgrVnZaS1kyYkhwYzlpMW90ZUYzK1B0UU5aMmdCU3FkVEVwMHZqYnlJVFZ5QnRFM0ZpYjVoWUlHOWpjVjJmNkprRDc2d0I3ZldyREtiZWM0MlBRelIvRU5RQjFoVmZuRFIvSlBBdUlWam4rNS9yV1h5TTFoL1JDOThaWXhFWWU2YjY5R3lCK0JsMXJSUExmNitxYzFHdy9hZnE2blc2ZCtmN2NTdFYvWVZQclNEN1JHemdKY1lFQk9EQkZ1REcwd1VrS0pnTmpLRzQ0WXZ5dnRLOVk3aUNkMzU3QzZLYlJFTzE1a1NuOHdsTHc2RmwxRnVhRUtJRzZMa3V2K0plVEtsaTdPMm43L1FxYXc0VHVSeDJDWjM2WElLaEJFYlo5YmxQVlYvTHkvS2hWWEE1MElub3FJaHQ4a1RNQmtKa2JjZkRveE5PODJoRzNJRXVXRjh2OVdNaCtBOHlMUnlRelVCZ096bndicU80M0hVT29GRFFXUmZiSFZiemhKUkpLbUttd0RpaDJBMmxoSmFIUlE1MHh2bUtqY0FrTjZGTkp0RUVZRG9HVEhTbzhhMklBTjQrQ2lrRXhNOXVITWpWNEVPMVowREl2L0pDcGpJbW1tbHlvRnhZMTZUb3JpL2hUZ3puN0FiSG14Z3Zud01jSkxrOWhjNUhjME1IZVpUNlhBbFVQZEtvYlRxSE5UTFdVVjdYRHgzR3dxOHo2TU5zRG9SakE3dzlKRk9reUhRMkFEbHNCUkRhSkRqUjF3UGk3aUdqK1lCUyttVncyeFZ3SU5jaWMzVnVQdk41eTF4RnRtemVlV2RPRGF6K0t1Z2hYbVZROEhHemw4QXNNZWVDc0FqTGtDcFFGL2pTS3hheG1OYXZDOUoxNVViQjRFWlBhRkNlbVJQWEZFMTI1eTl3MVc1TmMzKzZoSzhnTjl5aEhHOWRDWHEzRzVSQUpPVXVVVE1mZUJiTmgzWGd0TWFadnhBenl5WGFZYnU4aXRWcWpwTGFJMVhyaUNGYWJJZ0h2M3B5S3c0MU5abFhkN1pxNjNCUWNHMUNNb25pODJ1UjJwTzFINGV1UG12L0xRak1NMUk0d2ZpVHN5MjhaOTQ4aXFmSFMxejEwSTFWRWNod0t4K3pxTzdBQ0w3OXE5SHFmMGdpd0ZnRzA5ejlIRHhUY0M2SnhPUmlzcDU3ZTVkSFU4cklrSlBWMXNucm9sWXByalFuQmZ1bEFOc3paU1N3QUxra0haOFowUUZhQzRNbCtmMDEzM3NqbXZqeStQMTRyYmFwU21JZTl4S2cxcHdKWmZqcW9ETVVuTVVxK2lORkQ3N0NzMWgxOW5MS2FhTEZIMHFWWXFlalVoRDJVcUxnTHVVOXRnVkRhb201eFI2RFpGTmpTaTNNWmpnZTNuZlJFYW1EZXBUaE1ZYit0V3VodFpteEV4R1BNdVpJclJDYnhxS3F1SlhnNlUzZVFiZmFLeVJHOE1jdHNVdHl2RWxYVm4yNUZFNy9ZRnFyaWFoQzF1SGVwTkhablZMenJpaWxyWmlhQWhhQm54M0NLNXZCWWRnVUtGY0FJdnhoUVlhOEZhMjI0TE00aWxXNnh5V3hmcHd4dmM5ZUxwRlN4VStlOTVaTmVhOWZIOUhUUUU0NHMwbFpsR3diTHdnSjlpSDlsdllDMWtscDRDeE15dFJTbExjOVpJdng3ZDZVK3RvQWt1T1ZXYnhObFlUS1hqbDM3UnhsczRobUxJYzUrdEZKQWQwZFVtVjMxakRnZHUyNmlHR0pxYzBhb2dBTUtkTGNEY3lyR2loTXI4MVFZYkgyQXFjaFpBZnBKOG5jL2tjVkxEaEZpaVpOS045S3BBdlZhcDVBQWJEWTVabnYwS1A5WC8wUlJJcW8wOEhmR1dHNDZjUEI2VlN2RUZvdUQzdi9ZUEF3eEI1SDl5Mk5XeCtLZ1ZMS25xM2oydlhBUkRmbHc4RDBBQVA4YVhRM1dZK1B1VnE0blhXYnBkSGVCWnR1S1l4VGtUaWRwOG5GL0IwaDQ2MmpxZHlJczJndHhEbkdhTUg1T1IvYUhaNW9CbTV2RUxjbUg2YUw2RFBhTk1wMXBHQU84em85N3loamZKVGpzU0RPVzdXaXpsSVZDVG9xMlhIQVhpalBnVzBxNThoRkZFUEFVUDNJNy9KejcwM3dZR0ZVU3VzS2VRWnh5TVJOYkc0Y2dDSnBYeWJ2aEtPTHRkcWZtbjQxK0kxa2dUUGt3SjVJRStoKy8xeTJRdFdLdnVua1FmdnpDMy82MU9WeGwxN3N5WVkxRmVCNUZpRDhRREdmWmpEWloya1psWlgvZmVIN2kwL08wNHNmeFVFNDZjRlBrZUwvSU5GV1JiOXlDVlRzOWhWSExiK2k2a0M3ZWxLc3FtaThBOTRrYnQwK3hIVjZxc2k2RzNwL0pJTGl1ZTA4UVBwRVU3dHE4OHNuSVNxZ2tRKzlzY2V6c1VzOHkrd0JScUN4aVZSRHFnd3RsVmlTbFVmcE8zKzZoTDF6ckhlMGgxaUhRZmhnaVlDNE5XNWdWb1NGYURGV0lpS25aMWlxK0s0VHM0Y1pPcnlDMWhMZmMvcGl4d24rc0tkeXpaTFEzWCtjWDN4MmhFdFlBdHZncXhneksvbzdUSVBLSW1rNlA2eHVvRUsvYk50VVQ2ZTdSOXFEOUJWenNQQzhtNlhKSkZOcmkwSnhOVm9vQ2ZjMXRPQmhvVnA5YmRHMzljdGpmYkpQRVNLT200UWlUWmFrYXlzQkFqZ3ExbHBKM1Q3bVJJYnd3bnBuWXhsRVZYdFdTQ3ZqenZmYmRYcXd0SVUxc1FzdG9NaHVFQ0pHRUtKYlN2OUZBZDVqRjV2Y2ZGTHZMd05icnp0WnBqNEEwRE9EUC9NWno4UXgzU0ZSUDk0Z3lSOFV5SU43ZFdYVFV2dEw3b05wNG1hZDdWbFcyZlRJRkpkRkxPM2YrMXR3aDJ6emtxYWlZSGY0UFp5SVdrUFh6UVJIYlptZ09RcXpxa01ReGM4WE5KeVNic2ZDdzhFNzNXMUtvVndPbW1SbGdTTnJlc2VkU3NwMmRHOG80UnphcC9QTHdmRThteDd5azV6YVl2N2k4c2pRWlBFdVB1SWU1NFpxRXdlS2tWNE16dXRGcS93NFlzc256U2gvQjNPL1JOMWlGcWFPc01KMFVYRDFjSjBaYm8rdWFHVXVRcWY0SnhTZTVQdjdzelRvdWFNUlhsR2JoYnR6YWp4ekg2dWJiR2JpbXlZanRJVk5BZzNxNlJ4TS9BQjEvNEpoamt1d2ZPM0xEeW0zZWMxeklCRWlYTTM0bTc3Vm1EYjg1bDRWTkgzdUJ2T1R3MXZFZGRBVjVjelhxOHEzMHh4Qk1DKzdPNnIxWjZPZGtYUVZEWk1JY052Uk5ucENLN01MWHJBQzMwTlpKU0N6V21qaXgza2lEMVcwa2hyTERGd3dwVnNzWmdzZ1dKc1lBYXFOY25MNE16WWUvc1lCczk1NG82ZmlUTmZmTmp4dll4aThVRHBRY1BLd2RQTi8zSFVTZ2J3cXhhajhTMjhsUk5lS0hORGl3c0hqUmFHQ3htai9mSm04RVlhS09Oc3grY3lSbVJIUmhuWE9YT0lJOXRSa3FLRTdTUHAxU3lqY0R4VFlXZzlXVmF3eGFjc0FkWnJVK25NdzY1WjdVcll4VmprT295VzYzdWorbDJ0N1FvWFVCZ1pycjVlM1dFNDNyWjdJRE5FMlcxS1Fya1YvdFB1UWtDVXYwcDhXS1N1VUROQnBWZ1VMa1pTMzhGUkZMdy9vOWpZL3N3OHAxZFZmMkxtNGVqNHlqZ1JjcVY3aGo0NTBBeVpLNGZwMzRQOU43UzREaXBOTncxa2JiK3h2ekVhRGdFc1hGU29MYVdibXJ3RkIvMHpBaXRqejlxZDhYWUxURlVZUG93dGs3cFdhQWsxalRsTG9GSDE5NEhCS25yR2RTK3JNa3licHZVWDcycUwzblI4RWp3a05vK0oyYU1yVUhKNU4zUDZJbTVReFdDdkhISllyZTAwMVIvbFVVQ2FRazdYQmJESGNnQ3VnVTFra08zQUl1Q3RVN3p0NDYwQm5YVGRKNXNUdmhPZUFkN3NxR2crbW1RdnJmYlIySFE1N3V1ZnNiNURPL250YnBLbTJGZGcrMzA4SlFUWWFON1U2Q0FvNzYvWmNwVXRibFdBUlFheDRrRDhIUnVYSTF6NDIxWHgzcHpLQXJIdVNwR3FBYlZnaFd0anRXUUUrYzgyZE5xRFR1MHA5cGNEWGRCMEFPR1dGZHhNYVNncnI5ZDFoTUdUY2dLdnNMZjhidkJDN2lSMEEvbDJ1aXNEYktvR3F6OVQyaHFWMUh4L25JanJhTHZMaE84eWVPRmlvRC8xb3MxSjdNQ1EzVVRJQTVabHZucVZxdEZJRkkweERXNUZnWHZUam10cDl3WnMxbFZoYWljbWFsNWwrUURQZk0ydy95K0FRUUlCQUhjRnpMVVVFenU5Wkl3ZnpMK25tZHEzVWsvQkdNdVd3ckpHQ3F5MGEvRk1abEhDeXlYRFFMSThHd1M2emNIaDBLVU5IaEF3K3Flb1FPOGpFU09kVVNlRzBDQWtrVmtHSVhraWRsT1RyaGNXY2dMZmF5SStGN1V0K0JKdGFwS2xQZUR0RTRFOTVITnpnS0hEK2E1TG5BVXRFMGc0ZDdEdElobTJvKzZac3RmaVRHd2YwUU1CcGQrRFhkT1Y1dUd2MGdzdnBzL0x5Z2dzOUtqdkJFUW1xWFlnRENXd0Z5U1FUaGlxMDNOYmcrYVdIcGxqQTl4aUZnbGlmZENuNEdQQ1VkMXRRb2Qwek1RL0VuWmZQNUcrSVorLzduMUJlYWZac1ZhejNubDh6eTY3aG9ueUxaM0N4dkxpSzE2eXZ1ZzBOUG10ZG1CVFdTVStPUHV5b0d0OWRtcUtlNlF3NVlCaHVVMFJNU2VzKzJpVGFCcXFQcDZlaGdDeHBnUmExY3djcmJwcHhPL0I5MDdCUGkxbW9RaGtwU1c3dEdjbi9XVWl5QkJsQUFHU0FReHBNQkFqUllhM0hzQlptUU16c0VScHZQS2N6dlQwbHB3Mkp2bDZDQ3BvcWRocjl1ekNseXZXSGtmbXp4V1pNNEh0WlVFUWR0bHR5UjV2eXRmaFl4WjFlZGtGSFVJUlV5dElMVUFSd1pDU1ZRaG9lNE0wWGxKSTNNTGljMFY1eE12VDN3RUhnSS9lMFc4VlBGYlduZlg1QVEyOWJ4UXdDVmdUK3VKbjdYWml5MEVPY3M3bFVxTzVTeHZ6alJtV3U3YTdEdklIeGxTNjV5U1dHdGRFaTErR1lRSGJ3bW4rbjNJN1g1NUZpY2R1TlBTMUVBWVB4ODZ6MWZiREh2Z0FlUER1VnRnYWpsWFg2NklnODF2eWRIRkN5UHNjbGh5TCtkb0pJc0JuYTVDNkVhdEp2alF3Z1B5S1E3VzFhZHR3ZjdLSTM2VFFPUUNOMUZKclVGTkNKQTMzc3NnQmVBaWppalR3WVIyTzd2QnBnekZ5OU4zT3RSOU1nTjBSNEk0aVF1QUpDZDVYM1dVTzhOYStyQ0xjWkpBSElNVTg0VUZ1cXlDQXRSNko1Wm1tNk1iTFdDWjQzVzlmS2RxTUF3bk1YMDVodXFiUW5OV0owYU9Obmt2UmJqdEErUytGTllDek5YcXlML0VyODlnYlJ3dy94UU9Jc2hpOE11N0FNUm5VME5hVlRSbCswa1A2NTNUZi9haVY2SlhiZEdqY2pOUU9MQ3R6NVBkblBQZW1zQzBMeGpUNXNKcUJ0SC9kUXoxbEJpYTNVUmxFWlArS3VlS21mWHh2bXp0V2RBOGdtK2ZnSEk2VFBPTURCOS9NMGFNMGg1emdCcDFxRkZ0WllaeVlTWjdMY0M0dWtBd1czZDFJbjZ1TTIzODdBSVp6dHVhNWw1N1hRQ3ZvSnJ1N1V4WFcyYy91VG0ya3lSQTVXRG0zdDBjajFxV05UaHpUWlhxc01KWldFTUtLeUFzUWJaZVJIQ1hWcHpTQjlZQnlTaEhwNU13cUtEZlJjNkRVcFM2T1BYSi9sSWxSZXMwc0FWcloxUWFMOHlmc1RaOFRSQm11R2FDeDFRdXcvenc4cFNuNG9oMG0wdmZoRWdLZm1DdUoxYXpQc0tFN2JoQU9pNFI5ZlBvTmtYamhjQXJSejRTdzcvenhOSVFGSHZUeks2OERDbEdOYmRnTTZRcVlKcmdtN3RNUVFiZHJYNHUxRUYrem5UUGxLQkdDSk5sUDFpOEJNWU5EQ2xhaVVlVFMvQm8vUG40eE9ma29vL3prNTdVNjdzdkJnY0tBb01PVVVKRHp2MndEOUttL1UvbWdPeS9meVhaa3l0OHl2RnREdVdOSHltbnFqa2FZWmh3UTNPUEU4MWVsdjlET3lzZjEvNCswWUJNa0ZZQnExV2VvOHN5MHpNdmpnZmxTWDNIS1JvWGFZRTVQN1duTHB5Nm1BUVRSSkw3MkU4bjVZWE11RTRuRElZRHEwUW40bEpjOTAxUElwK0s5S0Jkd3MrdXIzNW9tZEhHVGpObnZRRHFSUFpIRk5nTjErcGt4SkNrdEhXNTg1c3dwRklqL0dQMUlGUXFMWkJHM1VZYjBvbGErQWRoYXZqNkRxK1BTWmdPWnV2UjE0TEdFcmhsTDJIb2NES0lXUUxkNFprQ3hkYmpxbjU5MlAxdHM4bUtBWThMajE0MDlMU3ArQ2lhendVemxVLzM3OG01andLM09ENXhTazFWWkVSbFNORHE0Y25MLzh5OEx5eTBtSmtYQ2s4WVlOU05wZ0ZDd1dHYVdMOWg5MzVMRXVnb1R3azFWcjhDOVJISDgrcGxYMk9yUmZ4eWFFZSsra0RuZUM0U3I1TTBXUFJYSkdwQW1ucERWTG1VRUt4K29qem16OS9iMjlSMGRoM2hJRHBUU3hpd09sNFFVSHFzWk5Mc001OE45cjQ5VVdZUXRTOHJrTVg0SHJ3a1NTZnVZM084bjVpaFBUbDNRSEdudHpGTjdyQ2RmUkt3aDFXbFJTS0NaMzA1cDMxZUdQbzhkdUZ6V3NFRC9DT0FkK1JrVXQxY3NPK3JsdjdVMU8zTzd6Uk5EUmo0Y2krWG5TSUFFY1p4RVI3aXVzTDhUVDhFQm4rbUo3aTl1WCtad2RqaU94MmFUVUQxTmdxcWNMS0ZYWGI3OVVXZ2lEUUFHWnozZm9mdGFTTWlCdXcvanJtbVYyOXlKdWZOWWI3ZC9sOURxRkJzTjF3eUZaUEVWSlZ1WEo0L3FKSWNkdVo3ajVORGdNbjl1dEo3aFJMQW9DbFJsMU1idDgvUTV0bE1NTDA1T08rR1puaDJ1REN4Q25FQkpLdVdMWjVxSnBwbHo5STZtVHpON0hIQUhWdlZuOHExU1VEVHE1akowQnZsdHFyOHowTjRvVHA4ZGRDSERJZzZwS0R0VFI3ZDl0SHhEMHF1MnBiM3ZDZXZLdG5WL0NoMUV4ZjJteDB5Z2lNZCt0YStHSWw5Y2M2SHBzSk5MczVWUlNBWEd1V0RLbnFjSnA0Z3NFZkk3YUgxbEJoSXRrY2NYYlN4WklNTTVNK3Q4RmV5dUkwbHAyK2pqQkhXVDRWbituT2ZkRVd2K0M4YWRFaUdhdWtoVFJzVi9KNU9uZjdWWFV1L1I4UUxwZkZBYWFhNnpkOHFVNVBkeXFSR3lmaDhVdWI2cUVBWHdxaEFiZkZHdEZsZGdTZ2pZTW1UUDFnL0RrUWVqRitXK3hPVGszT3hXclhzbnE2VkJnRXhkM3l1UHZlcUpsOEVPUDZqMWhwODJuTXBmREw4UExDaEt5OTJEUE4yVUJuTzh6dlRYU3BURGFoRVk2UFZ6M1dmblRPUXA4U1RJdWt2bkZoa1o5Y25QaTRKSXBreHNWT0U3QlZtV0tvbWpHRTUxOXk0RVMzbnJJN3lyTSs3L00vdE9xa3IvZmJSdmRkNmdtaklBREJSYzhjRTMvSmQ2QnR1Y2FnaGtzNE1iQmJDSzBCYWFWanRKdGQyOCtNeGM3bWRIbUV1Tmw2bmZ1L2Z5U20welluTFlXWUMzelI0OG8zNTdiNDhHSWlkU3JpT1dMazJIcUJzRHYyRUJFY3B2SWptRWM5cmhxekxPVE0vd3VIZ2FVWHF1RlVrOTV4eTNVR2NSZlFCL0lDM0hVY0Q5cTYvaDIyUkdtVFlnb0ZjQ1E3R1ZlajhEeUgvQkJJUENPam9WT1NHVHUvSEdoalpBWDBja0xtVXV5UG1LQUJzMHk4OXViL2ZOT1RaTXNpTXhMMlFvbVZPdndkYmhXR0R4N2VmQVFsclArUzNVY1pldWhpRW4vUzBxZ3ZUZGJ1MWRaS3huU0F0cFhiM3U2QmJ0STZQdU1EKy9SQTVvcXNqRWYyRVFFenQ2a1pUOWdyMDJVeWRncTY5MG9rWkkwMG9xd3JxOWNXWERZVjE2TjJRelBiWUlGNWR0RHFWUlgrQ3VEdllRUmZBMVFmRVRaSW8xSkJxSnNHT1RtMjVkcTY4bFB6bXBaQ2lmTmVEb3R1UThQY2kyREtFVkJ6VkdSOE9RNHRjYW1xRVI3bWx4dnR1a0Z5RlVLbFVwNW9LcUlkN2REcUtmSlBHWFNaMXY4RlhuU2FSdCtsajA2WHd0bEl4Q0lldXF3bGE0dHNlWlR0R3pST1haeWpTdTFjMEJoZlNzSnl4UU8va3UxQnNKU1dZays5ZW01SUNsRHRaQ2cvU3VxWWdrTWxpbEhidzY3R2JrOUpJUHhGVDgxdytub2hGbHRTL0R1QnVqQnRNdDFUMCszMy9GRjdReVFJTmZHaGg4OG5LbHRlOTc1N3NTaFYxMklhRWY3Y1FlYWRWOSswTWJHU2VtSlhUczdOVkh1aTJKc3haNlBMVnpQNitJWXZ5T3NmcENZeDE2dU9ra3lvTU5GK2lUL0wwSysrMUs5NEtDdE9KU3lJWTZ6TTQyWWFNOVpDZXhVb0lPNVFXVTA1RTZFU3crYkJpS2prenVkWUdiQlNvNGZSa1VXZWN5QkpjZHo2Tnp6ckNsaWpSZDBtcG1pbUZqOXo2TlBSRUY2UHhqRzllNUdkRW5XYWtDTzVyWUY2RUJtMHR2SDczMk5NU3RLc1JDN3pLV1FCVWNlSHFrRERMUjd5ZjhlbmRQV1A5aFRBSG44Uy9uN1E3UGxrMFY5N0h0YXJUampES2lDR1V5a0gwbWVYK1ZVK0JkVWNkcnlpQ1FXZFh4Z3E5SXZZYW9qaDZpU0Noa0VsUU9hYmwyR2xIMTdCWmIrd2tSYW85T0pkYStEOFA0Zkp5UjluMndTajg1Sk9lelhMem5MYjl6b0t5RGQvTVZJaEhpZHY0amNFaW5tdExNamg3Rm5NeFFNNkRUdmFZdlduaG1reSsyall3R1VCbFIweFBnZWNyUGJHTjM4NkdnSGR3bi9CcE9raFE1MjFwcEordFlVK09QM2UvOVVSdnI2SS9MRHhPbDVscG5MQ0U0MzZFUS9CdTIwY2poSlRpSXNiZnN5VHU4RUdZM3UxQnZlYTFYbTZjanZZTVFOOFpTVG1ONVUxU0ZhbjE4YzIyMkVnblZHNitGVWUySHlBNk1kZ1dnSi9Tb090MHBHTnVpVXBSdXlnWjQ0TGlDVWs5L1FQNVhqU09lbG1Hc1VScGJ1RWZZOXEzWldhelNoZExjVEtIYit3cldKNTl6MGxGMEZ4bmxlVjlEWjJSNWlWNUo3OEpEaDFXWWRCY29lZTVvMTMrbmpjV3JvUnVzQmdqQ1FZMHFIRUJoSnphZkQ3c05OTVU4OTVNbDdlSGQ4djZuN2VnbVhQNVg1UysxN3ZWeGFrTzVET09XdEpXMXpPcC90Nkg3WU1QbWZNUWNOTENUSThKTkwveTNyWnBCZjF2aS90ZW5jVjVOWUZReEZwUXI1c1p0YXloMVU4NkVpSm96Y09pNFk4MFJQL0NjMXZDUjhxOTNuZ2dRWWNBRVBCVytjNnhMa2FySmgyQ2N4N2h4c3E4c09NZ0JYdHREL1hQcis4NUFHeHZZOElzUzlReVNxVDczZExab0F0dlFhYU5TS0hFUEdxL2ZNYXd2RkM3OVVHNVpiUGJaOVhNRnl0bklwS3ptOEdMdVNXNHVNQkh2aHVmSy9LWkpnYW1idVBteGQwa3ExUmxQUXBnUStPTDkvZ3Rad0c4bTk4VEhmamUvcHcrZ1JveCtHU2h0L2RxdFFxMjFybE5kOG10QTlqb3dmWGlXTG5idmV1VHQ4M3RrOElhRzNVNGZrOWRyTGJ0Z0tvVUZseklxb0JQZWpUaWVhdmdFcWdtOHBwaFFISytEYW9rQXNNcTNSSGMzZGFoa0pPSCtlWjZaTHlUMVJlQStta3FUeXBuVE80VWU5VmoyMHBWYlRQOXpVdVhlNTBDa1Z2dWhoYTM5dFcwY2hXbXVFNGZXc3F2NkZoa2R0aG1YU1lxYXFMaHlXNlJwc1E1aGZKUmNGaTFwVXhZcGJ6cVljM3BKbE9SR1F1RTdjZ2hLUzZRdEt3SG5kZlhjNk1yU0Z4anluaXZHTWhtcWswSmNkOWtVZlFvMEErZTBiMnBlN0hOZ252Tm1Ob3Zad3dPVUJkbEJ0bWpvelZHOE9UUTJZWWF5YnRPK242ZlRiUTVUWWxja0hyUmYycnAvb1ZiSEJhbHUxTGdIb1FrMXBMNWhGSWhYaVhnbEJ5NXRPczR1MExHWkhFcFNUUEllUWZPNWI5OHNJNWlHa1VKSEJXbTB1alRBVi9IRE92b1IwdTRXVERvVUx5OFk1WG9yb3ZaQlVaMTVLTnpoa2VjL2R2VllkUFc3Y1ZoNVRmV0N6ZkZvU0ZLNk52SS9aSUZLVHg2bzFTWlc4ZFUwZHFsbmVKTVVMcU5tSkxjVkVQTjBPL3AzMmhKV1E1TVFqaVFTalJZN1lLRytYdFFRNzNHMmF4ZmxmZWpZdFhGMFh4L2d2YjVpRnRIdmdpczRUQXBEQkdmM2ZzdDQ2TURiRUVYYUR6VnNOenFGaDVZZExsdXpUVk85U2Q1S0s1VU1vYm9ubi9uL2VPVzI2Tnc5VUJJVGR4TkE5NDF1Y21vYXhwb1QxRkhpOE9IODBpK2gwS2tSNFVqSTZpdjlvR0xNMTIzaVIwNW8xb2JhSXlVU3g5K3R5OVpWbm5jdVdmWWgrc2gyU25NeGZWaEVJZEd5OXo2b0FYSlBLOFlHVS9UU3BEb2dtSk9mZi9QSnFJQWtwNmlqZC9Xc2NnRW9vZXNPbmFMOVZXUUxOZklJN1Y5L1BLSG1GMXdwN0RRMGJFSk1qaVRGZ1lBZy9QZUNNQWxwZlVNeGZzRFNQdkYxRk9tZjkwTnRvczBlcmRVTWdnMHUwV2dVK1NvUkM3Q2dIcE5iRVluM2hqWE1SQmJMVXJ0d1huQzBOQk9CdncxQzdmSCtVV1NGT0oyamNhUGVHVEFJeE96WFFjcDFuNTFsT1JuTTlLUm9hbm5hWUpFcXFnYmtBdGNZdUZCbTd4OWZRL3VycHJMbHZ2b0Q2Q01ES2toVkN3TlRRbTNFdXdaY2RGV2ZXQ0o2djQ1RUVaTWZ5MFpUTHpxcVU5cUc3TnBLM1JPbGtmRUVxOG1wYWh5S0VLdVBrUEJTaExsMndac0d2WklHYWU5ampneFZZdnU4SUt1bWo0N29kRWNVUFpJeldTa2V6UWF4b2huSGNoWVpCczNpQlRXOWZQZE1wTHQxSmhzOFVpbkRzWjRqL1BIVUdGZE9NejJMaGExdENqRG9QTzV6b3htR3dIbVZiaTdnWCt0Q3hJYU5CU0xBelNpNHpPVXlTeE9lY09qc1pUT1pSM3RvU1FQZ1A5WUpsT2xiWlZCc0NFaEJJb1QzR1J2OGh3bHNYbDVqWG0xQmlIK3IvTDZwcFNTOElMeFZVTEdFU3lGKzVEQ2tvdmhld3N0cjQ3dDRQR25BS0tRVTJMK25DbTQ4cUdybGhaVXdJcmNXUWZsemZkREZaamhZclFBVzJiWmc0WWhoQ3hnUjBNY2d2a2dqQU5ZTjZQWjdNdnVRRm5aNElZWm5IZkF4Y09CODFCUmJoUDhaTVZibXA1QkE5NUx6enRwWTlMTjFUTkNGV2pFK1lUU1hhV25UU0pjUHorZm1wUGVGU004VFNUQ3lYRzl2dDl5K0l4eUVjUW9QWmpnZFpOY0hKN05RY3o4UmE1SWgvV1NhblhKYTZxOXYxRkwyVVJIRXZwUVJvVElwQlNPelMwSzRwTlNUaFg0THU1SzJXZjVJcUtjSkEyRGkzVnNVdmVwK0M0VWxsckFpZlZHOXdSUWZ6STg1aTZyYnBQbFQ0M0lIZFFiWFNJcmZvQ0JBenkrL0w1Y1JSa2ZDTWpRWW9NSnZBbU1TK0tMNzJTdDl1LzNZZWdDZUZnOWpPVFJHeDN6ODFGcUxhTWlqSHVOeWxwaUN0aWZNaXFHcm8vQUdQWFhueU9NRnZqSkFCTHRTK01sUkJtRWtISUtUeEV0Q0RPL2MvTDBRbmNxOGtlMzlCUXlBeU5XSUpzbW14cGliaURXL0dKOHdRQndIRTN3UTZVVkcvY2VXVUNELzVoWEcyMHN4SW5oN2pzK3d1K2xwMW5VekM5bm0raTVCMVNhdzg3TDAyUTM5c09iRE80dHlKVTlNTHQ4U2tDU3RQMGNZVmtIT1JaSUxOWW1GWVlNcFdxUEFETVg0WTRHODlFdFN2VW9mN0ZmOEVxUExYMThHYlNpVmJiUmhGQkZPMWNTWGxYSk82c0NyVHppYndCRG1OK05YQ1VDVFp0bE9XYmpmcUQ2SmNnM0M4aXhHTjluR3prcDAzbHhuWGI4anFtcVRTYTJRMnYvbkkzNE1JWkhsVmhyaEcrNmd1QVNZN0twZTJPMGdGVzhZNzVTVFB1OE12Y1RNM2xBSHV0WVFMdG5vN2FyOFlNZFJHeTVzd1l2cklHNmtxbjBudmdEdmM4QkFXclVaTzVOOTYwQlMxUFBmeUprZHRxUDNiemNyOUpNaUpoYk1Uc25OYUZZUXluQk5mNDNhMlRwTjh1bVdEaVZwbU1TdzhXRkl6NHBFTXJSbFhaTEFPU3ZldzBQemd0STJjVDV6dFA4NUViUFNvOUF1cGZyUUF6REFLVWJhWUNlTEQ4aG4yWWhQcGJXaXE2ZTBuR2pheVl0SDRROUNkNUZRY2oyRXRRcUxEMU5HTDZtN0tnS2hJOHNMZjU3T1QxQkV0c3gyK0NLMmlZY3FyNkJXYUVNMTkzTWE5V3JrNS9JUkhORExFK0E4MDJqTE8wQUZMUmVBU1ZZV0d5aytuYldoSlEvRFJpdWtUWXFCdllZdzEzUWxuOWtYUVgyczBxWllwU09xTm1ZNy9WaVRPbnluRXZ4NFhLYkMxbTllQk5GejliamdtSTVyNlhac3hoWHFxSk1JTzhhUEJNNzd2MERUVUFyQzBjalVINnBIc29kczlENlhFZ203OW9VY1ZPbEdMclppR3pRbXhEcUQzeTVMVW9Ec1NyOFlxV2V3ZmZpOWxFVDZsWDBhSFRWRGZXbjNnSThLeUJWRW5TU0x3SHQ2WWp5Z0twM3F4blBmNGZjb2hoR1dBL0FPcFJudEJidWJhcWxodjJ5SE5QdEE3OUdlR05INHBKYmtxc1VFeWdhdTd3Yk93UjBPTFV4TlZiZmdYOXVDV2xVa0EvY1ZQcmxVOHR0TTBzaDBuVFFvMENaR2FwcDZXQlErcjh4d1N3VkdHVTRXQVJoSE5pZWg5K25WUjNWL0tKS2lsQ3p0aGUrd0dzNjR5dDMxS3ZTK0pyd2JBbEt0VVM4WG94M09jeVJUZGI2MXM3a0ppYjJZVzI5MEJUelk5cCtxQmZFUk1iU2drT2JHS3BkTUduUmVmMWsrMCswNENpcVgrbGNIZlYvZEU2a09EUXZGL1JyQXpnVzVPUWJmTTB1WDZFdUc3YzFvT2M1UDJFMlUyOTJvN1cwb3FQTUpjTWE2S296cFdDZWxjVE9NM0dnVkF1NDNpVGpOS1RTNkRtOHdIbGJwdjRNY1gvckJsdFltVVprNlhNanRnYWpRQXcvMWgrZjRYazYwQ2N5c29ZaW5ZQ3M0c0xjT1p0VlFwRUY1RWdHeXVvZk8rN2locmR3YWVDR2FjTmpid2NNQzAyTm5lVDhNOW05cVd0WWhjKzNReEY1RThGbm8zcGJ5WHg5UmF0MmZ5eFpWaWM2aTZEczdXVGFIYnZ2VWZ0bW5oR0lIam1IUnRMYk9wYlo2TDM1cVlucU9STGhFbEg5Rk5JL1VOcVZqeUJsNWltSmQ0WXpvcW5PNzFkaGQvaWJKRy8wQTBRK3cyNTVyNitXeW1rVDByb3ZkeVhvTTF3ckRnVVR4NVZYSGVGK3MvcjNiY29SK3k5d3pOOUxQZ3VCa2dvV3d5S2FXcXJaVit1MVNLcEliVDFoWkRlcEU0SmZrbWFrMHBYVVhURnpwWjRZYzh0VGFXMlhVcXZraFFzQktYYTBBZmlJTHlCQ0c0ZGo2ZHNOdEw0RmtxQy9YZ3pBNTRESlFhelNlNE9UTnpCNGhJWVhwcS9KMVJsSjFmSW1yY3JLMWNUMWR6azFldVVoOU80ZVFEU1BIZWtzRkpkRGYzRUpDeEpzSmZIYUdOMWZTU2VOcEpvQlFra05GODVBRUs5WlJaWDFqUVBOeENyWFgyZW41aklhVlRpekY3bEJwSk1oQUVvTHZRbllnNXNPdFVtbzVUZm1wTkdXaUFDdmFwWmJ2c1ZDaWFWWTlWaWM4OGpPMzd1c1dCeTRaRnRwQzVrWnlac2l5QWxkRi9QL0J2bWtMdmRITWZHYksxMHpHZ2Fna2lJUWxlQ0lvVXhDYm9tbGZkU3ZTMERCRU81N0NvcVlhc3Bzam5xT0tFbmNOc2VjdzRtRU92WkpJOU5VbitRblVJVWxGcUFBNml1UlVxSEc1eEpZdlF6M3liT0w1eGxRTFdBYU9hV0N1YjE2TVRDUlBhOW5KcGxtbnhiVmxEMGpRMGozSFc2dmFGQ3Y4RmhaOERKd3E4MTZFckJ4THBaVDZIZ25PSWl5ZTlwU3NsbmpZbXdhdVlVdDlrNGRMZ1ZLSjhqRE8vSGMxcE1lMW1ocFZMeUNPZ2FwZ01oRzN1ZkcveXZoM0RYbVkzWU5sK3VmUHNmZkdXUVB5a0d4alNNcGJXaGQ0dXh4d095RWcvOE53bzVwMzlZWjUva3lXV0NPNFJ0Z21IdVg4bGlaRjcvR2FJK0VqWW9OOEpjRjJYSjI5Ym9nem52ZDU5aERpRmx5OHhJZUFEVG5DTkdkajBydUxKcGVuQ1d5R0hwY0E3SEhET0dHUFZ1bXVQSEEyVzg2VHhVYWtmdWtDYmxiUUpzUjl0OFduZzBmK0ExTzc1VWp4TitGSjZ3K1FndEdBd05zK3NhVzdKemNwdit2ckhSY3NYRUVHUDZkMEoyZ1FhS0g2T2hEcGU3QVF6bHJUUkxMWTZ2eEs4S0FXR21EL0VDNktYd3Jod0M5Szg5am9pZVJkTFduN2xaTUcxbm5oQTNtWWMveEt0eThqdytzdk1sMTFNdkdQaFd6T0lldEFuanV2aE00OTlOKzZxcWIyUUJBVWtUbjluZ1loUVE4cjhtS3dya0VBb3l5eXk4N1VYcHpKalZJUFVkelhkM0lUQ1BKOXU4c1RWajgvcDNhQXlNaEVXL3lsU1c5R2tOREdMc1JPQ2lOT3FvUjUwaEVncWtpbTl4Y3V5ZmNDRUpMak1mRkV1QkJCcGs3bW1IRXVHbW9mWXBaOFdSRVRNNXkvOWRsM1VTdjdKWDVYNWdXLzNJTmkrYmRReW1jWWtNVkN1SGU3QzBUeU0wdTVPcmRFeC8zQjF4cHEzVXk1NTBoVGJsMHl3cnI5RmVDTllTUnlMemZxR2pBNUpmQmh3dENTMnpOWnltS2ZURHpQcktPRk5aREJTVXo0bWpYNlVIWE5Weit4UitKMEw2Q1hnVFpTYjBwcUNDL2RXd2IwUVIrSU4rSUJOV0I1TjBML3JLZzZTU3JJR21zalI3TEozU3N1cmsvUFlDSmo2U0ZjZ0RmYm1hRW1Ld2tITE9wRU5VQ2x3aVpNSzdsUXZYWTdsNmpnNWFNNVhoR0FwWWZ0ZWFkUHhVMW50cmtpQmdTS1ZaTUJqTjArdWpVUisvWVZ0YTlsUWdINktPMm9YaUREb241THhjNHIyMGZTWk1wVmExekJETlJpNTFmZm5GTEhidXBWLy94Y0hUZjlrRHhLd2o3VUM0OXRPUFdHSlB4NEtsRGdNdFduSGpsWm95L1JMVGVNWXp5L0IySnJUWDBOb1pTZDJoenFGQVlzZzFRV1dDcERoQVo0UXhXS1JxdUdLRVdlby9NUGduQnA3UmxIVm1ZOXBiU2dkNlBTR3o5Vml1dkc2K3dSYTVDUllCWEdBVWoxVHAyOHBrSTl1QXhmZmszTVVUYkx4TW9TSk4xeUI1dFZuUkZwVzd2TVU4OUFTTFU1SWJVaVVjczhNOE1sOGVaTG5QdE1qSTRSWW1ZWmlYN1duN0hmWGN6aDF1RnNrbTdZTmpjOFExcGRMTGtoSThjSVpzUnZTVUtEeFVvMHhieDdoOXBMRlVvSkFqY3dsQllpNFBxNmVYb2ZTOE5sS21LbkNqNk0wbktVaElBTks5MUVoUWdJNUppRVhtcUl4aDdvaENjWEIveGp1OTZESEdrV3JiRHd1US9WeG80L3hZb0JoVjc0U1ZaMUFhblZFTEJIYkc3ZEZoNDBGSGJ4Ym9BUS9wYU5sb0tSWHcydUVhQWhKYktFWlVNSzR0b240a2ZkMWpWTVlHYklEc0ZtS1ZhQ2VwM3IzZUlXdXhiMG1ncHJtUVZNT1c4WE51eUE4Qk5pbEhKTGNjTnZDcmtocGVSU2t1dDA1NWlIcmhUSkV3RXMxbndtRG84K054MG9FK21UQlBHaVJuUlJiazhqNHZJQTNUWGs0cXJ6QTg3M3BoMHR3bk5UUU5ha1k1bWhFVkVuSEdiT3FtZm9qRm9JSEZNdHA4eUxROE5US2N5MDNWRU42c1h5aFh1TTlsTExMSTNreklJRmpmU2N2UW5TeldqOS9yZFB4ZnY2Z3ptblFTalJJNCtxYnBieE53c1lSMFFTRFFZc3liMUp1ZUt5MEFEQVBkRG5MWWQxbzFWcDBrVGFGWFFBZ1RYd0YxMnlhdjBwRjNBTmQ0YVFCL21KNE9FWWdMQ1ZiZC9EM1paT285U050TkNBa3gydzFWTWJCL09PbllzRmJsWnlBNUtqZ3I0eUtITVhaS1VmOGttZjNBK1l4NGxERDh0OWxnYmh4bUFWZ2xvbFFkTzFPWldqTEJWYko3alRIVFVpY2hFYTc1SHlhWXRjNDJqQlZiWTNwSW41akxPMTBEWGoyUUJwRWJkK1dDVjNGVmtuTFVpSUVMZVFGV1hoQWJNMHVUL2srZGt6bS93REkra05xVlZPVDAyd3dUT0lURnhLTWNUMDA2em5WOEdlTTViNndaQnVwcldXQm9yQ0gwRU96eEdYN0dRczc4NDNJRm0ySjJ6amZOZVZoNkhKVk5vZmM5TTdCeTRMUXBncVdSUE92d2h5dkNob21lSmZYNU5PdURqVkJjVWRTQ3AzMFJVVU1oTjZUeTVWRmloYkEzU1V1ZzBmVDVkNnM2TVdLMjZyMVVYeHl0T0tUV2oxNDdxeU0yOVNmT21HNEtDWHlVdWdFMU5Hd0tJNEtib09mRVJHTm5TUnkyNDVEdS84Y2xTVTBvbG1vMjFhT3NLWjg3L1kvK2MxUDR4bnQ5TWVQSUpIZUFkTU1PblhkNnNST1FXZmpyZE9NaXRPVzdMdkxjK1hYNXA5VDVYQm9DQ1o5Zlp5aFZUcHUrbmZaakpNbHlrY0Nid2N6N1g3ZklpL2l3K044SVl6TjJvUXFvdFdXek5mWGNaclZYV0paRTlXT2Nqc0t2YW9ReFg1cDdZY0t4dGpVVDVXdnJ1K0pkenJYbVBYZWppcDhTd2svVDVnS0RkSDBNMlJ1YnZ5MHZDWFFLLzQ5WDI4US9KTHZobGwrQURzUFNzUWVXMHVXamNHUXFzZXd5TXBZbnVKQ2lsSkFtL2NySGN1c1JKa3Urak1DU3dxeUJHQk9aL1BBQmk4R0FlbEVUK1VpMG4vaXc0aTF2WWFrNzR5SDc1eVVGUWNXci85MGFVK0tiMWZyY3o4Z1pjRjFlUkhwaWRkdlAwTDlkNVowc25BVVdMZHcyckRqT2VEMHM4MGxrN1h6Rm5WeG42UEh1Y0lwcWphQTdSa2h3cXFMUTVYajRaWUxHYzRLWGZEU2w5WVdRRHZOb0pXWHcxS2VNUlZsbHJ5dWJSbUdqcHVHSm5ncU0zdGYvVHluczdoUVpkSkIwMlZmNUJibTRqMHVzUHVSZVp2azFwNDJsSGVHQ1RJUmxVWnBEV08xanBEb2lRRWtteDkxT2VXNCt4M2t5VjcweTVhTTE1Wmp1RS9FbmRyVnZnZmtML3cvbVBlU2JVQ3B0UnpuQWhRdFVVRWtYaG8xMjNNbmNyalA2OEk1aXF6STFqQkNmNWZjZ1diUVpISktKZnQ1Q01DQlpCbFNFZDc1SVl4bktGRG9HWW92a2tLZFlHQ0Jlc3VmNkQ5NlhJRXd2cTFlR3BjMVRWRTAvaWp4UDdTZUlWemhTSUdVcXUrbWFkb0pJd0FKMmFydEQzR2FEN0Y4aGY5YzVxOFljWVpER3g5aXBGMnJTRXE2WTltbVdYRlRsRm14cVAyT0xmbk5odkdjQVlJUDk5WTlwVVRjeUp5cTRvdU91akVtS2hZWHQ2SnE0WlFRRk9meWU4YWlTUUhIMDJPMkRJanVzQ2RTRG1uM1JWUVVFNndPeDJRaFdSK25ycW45d2NRUm1seXM2YUtBKy85cFQxU2l0QlRXVkROUmNRdEkxM1ZQUmNvZVYySWVYWFhSZkVmTjdFay9HT0VYblAyMVV3MjNNWEQ5ZmkyVDVydXl0UnloNGVRc1V4T051MVc0dkVydnJ0ckRZQXREVzhpRmxOMGxVZllTdU51dmk3RktscGVOR2tlTTBpOFprQTRITnhUVGlZRHFPTEFhaGhMYTh1MVk5STEyUCtmNjBYWWhpaVZBcFJwNDMvOWpRN0FlcWNBd1lHY0x5cFBMcGYyOXE2SjR1REVEOHI3V2JvTkgxOGtkVGZiemtDa3loK1I0U3VrajRvb3k2eUdLN0Ztckg3NXNzQlI4STNzeDFkZUpXUnQvT25jSmFmOHBpK3lBZXVFdXQwVUN6VXk2YWZQM2pmemUzbUJDMDIzdDA1NFI2NG54S1ZYTXVLd01UUTNld2RXUGdtRU9SWHFmRVNVWFZwcnJFK0pMOWZQdStSMlBFamtBL2ZEbDRSOGI2enpZc3h3ZU5nQThmd3JEaS80YTNCQis2UnFCWkFYM0MzMXJYWnQ2cExESjROODI1bkg3dUI2VUJQZHQ0TzhwbEhYanorN1liR2tJSHBaUjRRZi9FR3ZMVVBjVHR5TDYyUnJwdkRaTEpsZmllWXJMM25pTFZTOTFUWCs2bHZ0VHlaR2ZJN0gzaGtCNlBzaldNeEZhcGk2NXFxYzJMVW5DemN2WFJCOXhjZTV0em5qZGRhM0hXTHA4bEFyblpucWl3bUp4Y0VXSytqd3Ywc2VLcWRCWXpvZVcvYmMzOW9LQkwydXB3MTYveTNEUjRZak5Td2s5MkRQU1Yxcmo1Y0RMcjRRb1dlNG1OVXRIbW5WdXFwOC9JcE52RjVYbk5DSGFFZndHOEE3OXJnMlJNdnhpYXRzMDJ5Vi90S21hTEVIclhMcFc4WnFTUGU3S0tNQ01OUmFHSmVqS0lERG5jOWFkNWlmRDc2N0czTWRXQVBCVzhxb2lPd2d0NVRiUlVLQnhmMUhVcTFtekdLc0V1Mk1NNGV3WmI4MzZvRU5yaHozRnlRWEJvYzJxc0tveDhERDBweFdVZHh0RHk5QVV3dE1ETDBSWDRtdnVDVlMvV2NUQmJ6Y3Fxd1orMjlWV3ZmaGRvVXFXWUpSSVNGQ3RJSG9aV0RKczFrYTV5dnZBVUJiRE4wdVVySkdUdmlvVkJxbjFVWkxDSFBKa1l0RkxQVklIU1lxcDQ4OGo5RC9JU1pDUzRRM241VXpaYXk2S3NKNjIvZ3I1WDhIcHcwSkFYd3lsclZkVGVvM0ZQUmd0eWtnWlpucGIyNGlMSkRndkxhQ1BMYXhXdXBPeHVqT0htNnhQSlhiL1hvazRqeWZtL05aekErRXJwK3FXVjlFRmdkSWdOVFp1S0NqVUd6UGc1Q0pmVmtvbDZjSkRoU200QUhidlVkVmtkRmcxVm5WNUJ3TlRmY1NhZEJxZVBMZlVUcXRoOEpRRmtoWTZ5VDh0ekZoTU12eUJWRndsYmlXQTJ5V21mTjlCanhYTHBTRmQ4Szg2THdUR1Eyd3JUUW1jUDRzRGZncHM5ZHNRUXh5ekpPWVk3UmV0SW5VZjExM3NkcktpZlBMY2xSRGZvY3RKUVpPMGZBWm1JME5tVm1SQjJYT0ZKU1pFQzhETC9GbXR6SHhXdis1dWpIcDBlVlovbGpGZHBobkxEOWpDWUFzVjZINWQyeVhVd2hsNkE5QzhhRWZGaDJmTC9kKzEwQ2RCWUNBSVNTZlloc0FrdU5GaHJwZ3p2cktFK0ZDVlRyVldSVGR2akdoeGd5RnhuUllNbnc0S2pPUGJUTlhJQmZ5aGNoWFRVR0xqc0dtY1QyY3dVSHdjVGNyVkR2WElLeG5oRFVSUHU4S2cveXE1d2x4ZHBjODVBR2tRWHJqazREZHozYlpkZG1DY2NNckJvUm83c3ZybmpiS0h2UnNLM2REVDhtSTNDTEJsL3h2YzFWcU5BTFBhbEVNN2htWmJIRXdMUDNGMXpKbUh3WkpYdXdWKzdxdXNzSGkxcUxHNXZ4VGgwQ3R5ZEh1aU1HaThIcldOK05hWWplM0ZaVDhZUjFuQ0pXL1BQMkgwTGt2THZvZjdqeU1kUllxUFNOQmp1WG5GZkRvZWJlRFFlL2NkckdiY1ZXZHFFd20rQ3Z0NzUvME53eTRSMDhYZnhFUkNpMS80ckUrZExnZkgzM0lvOFlIQjVKMXJXVlhmdkV3TFhzUXJCMm5NTGllYkc1Kzd1Y3VyZkZoR1UrSGpOUW10UmF1ejZXYTMzbGptRVQ3aW01VXJFeGxtVkxuNUZJdE9TNmttcGJiZDBZN3hWUXFqNnhkRFNYN2dEVjkxMEV1cXY0Z1Z4L1k0cDNZY0lJTjFIdkNmbTJYY3hMeGVLTnZ0NDVBc0tWRjZSTFdIT3lnNyttbVVzalVtZUlweHFySGdOcG9QblZ2bGFIcHlWU2k4VGR2M1Y2KzQ1SmZjanJUanFDUC9DcnJBMXdkMXdBNVhFYlc5cElRVGt3SjJQMWlSdHJYTlFyMG5hUHZhM20yZTlNdGpXOHpmdHllMkUrbWRxOTV1VU1QOHJreGQ4SkNlRVVzVjRCak5mVFcwaFRrRG01OE5RV3duUm41U0lTcEErOGZMK2JWcWNYWm8yaEhQbEdPREpGQ2dYZGhFUXJRL0pZTkI2MS84NFdTYWo5djIyYjJXTzBvK1pwMU51eWpHbUZoUklxTzJteXJFdUdLUGZJOVpYRDJ5SVc1Q283WWVYYXZycnFaTXRvaERSMjNLME1QWFNLaGZaNnFMY1FqM25yUm15VUt2aWZIcTFWdSs0RnI1TllYTXdHMjhQc3ZVMEpyamxMNE11ZmQ2MUpQQXVEOU9WQjBza3lzSGpHeE1sZ0pmaUtPcjdBYWNEOVc1a1NrU0g1cGZJcjYvTVNXb2V0MFY1b0FGNG4yWjdrMWlHU3ZsalBKTHJPV2FiVWx5ckJKZmhkSXNtNmFUUlA3dWE1eEpKS1NScWdUSTQzaE9yN1BmanY0dElpWUU3VTlxSVA3bzNhK25KaEZyOHhEUXpkeSt0OVg1Z3J1MkdGYldnb0Y5Qk0zZG5hRTdQSFhjVVBwTGNpZU9NVStvT21GbExubHZ6Vzd2Q2Z5NTlvYVRCcTJMN2w2Y29RT29mUXA3ZCs2L1JYWmowUXpDaUFhb1ZlVnV6NUdVdWUzaG52U1Bhblozd2NhUVJCejdSdjJJMVRMVjRKeWVoWHlWSEZoMFM5YVF5My9XUHpFblp4dm1mM1BqNm9uTHJuRDVuL3lmdGpCZ24raXJBSVQxY1o1MTdweXFaRzVrNUpXMzMwaXJpMzlGYUN5TGdMZ2FBanVacGdsYU9CN0wvUitoN3pyWWt6OUZRSVRzRXY4d0s5TkswMm9IZlpiRTF1cmxwbEl3VSs3QmkrRkRaMmVnbWp3anNNZ05VQUlQVU9xeTFISGozTkovWWVybldDd3lkVGJjWFFQdWtBWTFMaXhUV3BaNmNzdVBMajR2ajNHU2p5c3VLNHQxRUlvQ3NjRUE5bjlzYkp6UXhlcSttR0tyT05LQ3UzcE9Ta2VUK2l4TTd2bUxjR0JaQTYyZVd0T0xRWVNpa3lpcVJKcXVJK3RrWEc3eHdPbVJIN0FzQzF3ZW00K3B6anFGaDd4bzZpK0hiWDlDN0xWa0kvQmJNby93M2ZnamtVbmJIaWVjOW9MNk9lSHVEbHhaQ1ZPTVpOYzdBOG1SeFVnLytjWGpMdkVzeTBtVEpmNnczeEhFUlRVL0EvdnN3a3ZCTlIyQ29XK09Va3h3eUtRZUV3RzFhMkRjWXVnU0VRck5hUFRMSjZSMmF3b1NBNkZmTjh3OTcwQVVBMTZxOGZkemVqaWZqYXlqeWx4TjFHTWZvcUNvVzBvK0tEaXpZRStnVUF4a2dEWVNvaktreThneUtUNVF2ZzlsYjNtS3I2V1p2b1ZhSTNxY1NlamhXWjAyVXF3UlJKNGVNZXY1KzR2dk9VQ1Bqb3NTM1pRTE50VW9EWjlrd2xuODJDMkdqTjJwSS8xblcwSXcrd2pLbytvUnRRSFFiZlhmTExCQURLcUFnbXZUL3ZRN1FtZmFLYWpyL3ppZ3NXV0NWSE1WS3kxMVcrVkdyNlUzM3IwNFBGSktaUVJxMUhjUW8yZk9uTndNdks4eW5kSVJBTFdyMDFPa0p6Y05ic1lVamlvcjlUbzAyV2d0aktKQWxsQzk3UHRaN0ZleTFoS0l4MnZNZmJ1ZU1zTDQ3N0NaVzVzSzFVUlc5a1J0VjEwL1FNTzY3SEJQWDJ6bXJxcEVjc1o1eGE4SE9WcXprblFYSlJ5ZHFMNXIycmYrS00raGlldVNCeHVObW9OZE5ocWV4TStOK25xOE9PL3pQVWFPd1RaNURXNDhyY2s2M1pEQkNUZ0dtcUJDSGsvelZKYVl2YVp1Ukd0czU0U0ZlU2Q5cEppRCtCQXUyVUpYOURESFlUTXBsTkxuVmQzVXZvU2JBN0xLVWRPUVU1OGV5WVF1N0ZsNkJwK1dkV0VvNUtjU2RNQU14Y24xbi9MUTdPc2lEdjRUZzU5OEdmVGx1Z3JtRUdsQVRoTEpteEFlcVFQVnl5ajVRVE12L1JkWXc4RWJTTW83WXhUYkYwamI5WEg1S2FZclVUNkNodFQ2dytpSG02dDNnS2NGQXM3czRIYmhVQXZjb3lxWk5jRGpDWDNsRmFHc3ZGeFFZY3N0eEFhaldLNjlzTzFIYXNRYnNXV3NMTmxWUEM2S0tUM2k5bU00T1ZRNVpwWFQ3SWdnSTlGakZwbENoNHZNUzJMUmcxV24vRFRsMFBIUVExeXFxSTZkSWVmR2x0TGhoeGVFRnFlM1RFV3FZSW9wdWJTVUdnMXZxOVljWngvSDBmMUE0aTZjcXBJUmZTYWxBSzE4bE1VQ2pickR2aC9lWFFVZ0hoa2dOZTc5SjA4c0lkTENsSElkOFhQalpEL1ZkcXdlRVByZDhvcWc3dGtkZElROVBMN3pMNlVKOUlIRDU4NHZHY2ZDWU1HSHZPekp1MW01NWYweDFCL01FVHFDdnNIQnMvTy9rRXhPQVgzRHBMMGhYQm80YW8yQVNuNURtbXlSQ3VWR01QUEFjZEx0SldwdTc5MkVlTjJqcTZPSlB5K0g1MVFKZjgxd0REcjBQQ1BTeG5sam5qNld5NTVNUGR3MWdLc1E1S0VUZXI4NzBzV0htY1BwSUVmYUJlNUgrdzhrbGZTUVFwYmZjRFVObDI0c295bmRZaVpZRUMwK1hTVmJvNExoK0FCelpzSGVSNXpuN3FRM2pEZlpGQkJxTjNwTDMreFlPV3AxZEN5QkgyUEh0MXNBMzZWSnVvTC9oa1lLRm5qaG5UdjBlY2lyK3hrK2pTelg2REtLVmNxT01ZN1VrZ3Y0NjVmNWcvT0RlOFlkT1djaW5qUVBJMkJMRk1DblJQNWxpVGRvUGxZODlueUh0Vi8wQnhjZS9OWEJ6dVB6M2UyRUs1TDJmNHh4a2ZsSmticzdjTHMzS2xicy9MbGRGYkxQeWVnM2NmRE01eWhKSHA5c052VVIxWVRaUjJLaFJFV042MElQdEQ0a3Jid3B1QXVTYkxwZlpJdEZmK25ndGRrNzRhR0F1Z2Z4eU9uK0dubWF1bXZnTCtNYXZCSXBmYllHUUJuTnlGV3lUV1E4dFU2ektTZ1F6cTViUDN3bXFvMmFkendabUxiMEFtSEMySHpycmwrZGFEbDFsNTlCSE5iSUNRRm8rQmVVQ1ZrYllOcTg0Y3diZGZUdktPTCs5YU4yMW5qYUUyekY4YXlqb0ZRVkd5YXh2RmJ1dUdRUXJnUGI0bUZPZGVsUjdON3FIQmRnUjV1MTJ1eHJ6TDJrUTdJdU1tT0pjL2U4Y29kdXoyWmJzMTBTQXVLSC9ad3pRdGR2eitvYkJ4b0tmbDgrTGtHcFJscmczL2tFTkpKcXZIMnF1eFo1TGtDMnE2aDBqZ2R5RE1NMktxQVV2dnQ0ZE45a09sTVFvRUdPV3d4MG1JOWtOL21mRCtwY0JORTJWUGM3ejI1Y2dMMGl1OENhUldTMkQycmppWm10eGlhc0d0bC9HbnQxK0cvNlNvcFhSRWExL0FUbVRVTVVGTEI0TGhKMTl5bFRJZFhCaHhacFdFVjdqVHRMSEk3Q003K0VUTUc0cXc1NUZOSlJuWHVyZzJOeFlWTDFteFVBUkpCMnpobHl4UWg2Q1RLZU9wdVkxWkVVUjFSKzl3TWRFWFowZjk1UU9QOXZkZDVkb1JFa3NKODJNTUdaSTFRWnNjRjhCSFBqYkFGVmRQcDhQZmFjRUM4aTYrcUZDa2dVS1pNWTJRenpvbU11MnlzVFJENmhmUXFTNzBtWDd1Z1BBUnNIRjc2UVczR0kveDhnUGcycFQvVk9UN1hXbjZEdlpMS21qK2k1OW0wam4wUjRBcGluTlp6ZEMzRnhvME9lTWJXNE1kRXdLY1pqYVRUaEVuOTFyRmpZVllnUk1OV3JUQ0dLTkNyWWkxNEZvcDJBbU55Wk1xT3lqM2ZnMGZEdStEa3B4STl4Q3BPdjlmUnRaUFRCeEN2WEJkZnp5S0wxY3IrOEc0eGNtOW9tYitBSnRLeDFXaXZacnVTNERWdU8rb0ZVaE1Xbklxank0RlhyNTJnV2ZIMFNWVytoK2JHNW5FQkJxRFc0V0tTVWVFWVladmtEb1FJM0I2ZEplYWlqampEUlBROWIxNzBTSGlYVzMwa1pLN0dja1JTa0h5KzB3WHpudkN5QmF1TFNzVzNOTGk5UnJYMUtoUFVLVXBuSEUxelBCbmNiNDJzN016VUxiZlpSMmtOSFRMM0R3cTNWT3J4andWUStsNnYzOHVjR2tOT09UNjZYaFdhNHFrblBoUnFNc1k2M1dNanJYMG9xOVdKV0Z5NVNlRk8yOWU0RjVsMkc4amkzVkwvak8vOWpXNEQ3QmtTK2tTa0p5RWRkaE9wZm1hNXpiZGtUSTlYZTRkYTRucGQvSlZQZXVPZTlsSHpjdnVFZFQ1cU5ISTZabmZSbURYK1MvbWFWV3BaYW5OR2lrRC9Wb0Z6dW1xRFJZcXhRMXRMYWxLVHZoa25vT1U0d1RLOThQNXc4bUZGOXNJekVTMjBMR2NuWVFSSDJsY0picHpISGtZeVRFUFo2dlFqTXloeUg0TmVhQU9Sem9kSkV5QkdNS0VUWnhXemFZYlR4TW9GSElCQ25sa3N5RmtnYmZJNjB0anRuZXRHc3NKQWlDRUFYL1pwd1ZGOFFnZjZNMzRjSHdLYTRFWUd4ZCtJazdRbWtRdXkxd3VkRXMyMW81QXBveGRwbVJVQ253RFl1OHBOaWZBMExvV0o5ek1FWVRzU0JBdDQzWVFtOGRPVkNzazc3cEFSN2pCeVZiVmFvS3NRZnlpbHIyS2hIRFNvaS9aRUlyRXlEMDllRml3eEVDYzFieEpNdnlHaXh1d2l4azQ3SGxTK3d6Zk5tQnA1UGVrUHNXWmltUXRzVVR1RGZHYy93eUt3ODYyMEg1L1c5SzZ6SFFtRU1xd0U4REMvejFpOENPcmZDM2tyMUFJTFh1eHM5bGZSa2piUDZMOGZNMEVpbk1uOWw3aHYwek1lNFBiVSttcFpocGdFU1ZRc2xxZmg2NTE1c2MwQkUwOFhxS0pQeTJYc2MyZW1FdENENzczcmw4SVhrWm1QcklsWThiZ0ZqeXNxMXZ2OUtGUUZ2a1VXUmdFc1NzNVBDdTBsRWZvR1lNTGNyU0h1MitCdE52cmQ2YmpSVm9uTURJWXpVTVhOT3RmYjdMRWMwWk5PWStVY0JCeVBjQllYMHZjaDlIV3RCMWdTYzNvQjNIYXY0OE5sY2Q2ZlpBa01YVjVhWnd1WWwweERLeElhL3ZzSzM5RS9OQzFydGVML0VselAyaDNpZTJ2alFsV1psUGJSZEVnLzl0VjdFNVB0OXlYOHVqaHNJTzJSam9MNUh4OFF6cE40cEdXczY4cUMwR1VoaElrQUx6QzlLN3JNa3I0enFYUDlCdG90Y1RzWDM2emtWNlNUbG1NQ3cxeThOYks5a1MwY0lYcjZEREVDU2RFMXBFOElqSG1McTFVUno1bGZ4WEVSejhzSzBzeGo4SURFMnBpUmR3MlFVWWhSS2JybEhMT29TM2ZMbVFhVkhsUFl4eDZQaUNaQTBjWDBKa3dCZWcxMGpiNFc1VW80ZzlpdERiVmpjZis3dWtKbW93ejM0Z1lrMEszbjB2YmI2amg1dHdtVWl0bWVlVElXM3N4RjZyYktqcTVrVVR6NVpESHB5dzZzM3dKcGtscmJCVkRPOTVmV0lWWWRiWVRtMEVuUGV1N1ZacmtiS05kKzVsTklhUStsaHZKd0xCdWdIMldCSjY1dld0bTBOM242cGZVUkt0T2s2OGlmSlZCT3Zod0ZxWGNIRjVid25HeC95bzBBSlIvMzMvYWFEY3NzMGdwWVRUazEyd0JLT2wzV2VVZDc2dFJ3UlJQRGx6KytJcjVzTm5BUm5DUnJXQmpLVEx1c1N0Ny9ITDZXNGtJNmxHaFJjSzFqTGtPUXlVR2U5VnhVeFlwVkdTWDlCTVkyUnIrTWUwR3JpTXFxVXlsbUxUTmViY1dVZ0lhWXJsQmpHa05vUkJYUmQyNk5MV1BiYTk4NlFYaHFyVmNreTRPcm1IcW9DTjgzMlhnSnYrb1JTakc3bHYreHA0aE1hU3AxL0loaUgreU5Cb3pQaW1wVHlUMGJwcW9Oc2wyMy9MU215bTZINDloMzlHM0wyeWFoUDduMGl2dDhpN096Qnhhd09jV2lmcVVmWVdjZG4zUkdNV1kweWsvcmNBdFhQUWZYMEVlbHk1bitrNEFkMnBiWGFESldubENTQkZwaXIxVUt4V2RhbVlsdjQxR3RTZUF0Qk8rdGRmSzFNOUtpWHFEWVorVnVYU3RSaG1QeDV0dU4wQTZDYllkQlhyM2puL3ZXbUVWT1VPTitzU1hJVWVoMXZiWUwzWlQwNlZiQ2drdGQ0K1ZMMkZFV1g4RnhoZkVzZmpKRjk4enhhNW9GaEc3RUF5OWF1ZDJabEU0bU5vc1c4UlIycjhHam9ZVnFxdnZIOUxBeWJwQndodEJDRXRrTDFKd2o0SzRwbEo4bkhHcm12MzVXZVRRTU4rNXJsYTVvNGtBRVpDeXRoL2NBaThWMlk5WTJKWWpVVTNnbXV5bUdlcUFnUk4wbzJDMDFCME9YeDlRUm5lSk8wNG1VM2x0TDU5aFIwTzB6aHhxeUgrNkhnb3picXhwZGtZRFAyUXFtVGNncXNWQ0FsSXI2K0w3THZ5MEVkdW1hdDR3L045YmQzTi8wOVNyY1hMajVjWEpOMFRrT2JpVXp3QzJwYkZORFc2aVJSVnFkRndmb2xVWi9OdGo1NWR2Mld6VXlOQ2RqQTQ4M0NNdEtzMFNFNnZ4MndIRU9LZnVRNmt2aEFBU1E5S0ZqcTBnTHc3WCtkV0tGUXhmUlIvcnlSQnhpUmJrRzVndGNuUnpnRFF0bDBkb1JGOHFObzVHS3FXMnZhcFFMWmRkaGZxUHFEQkFUSlJwejVINnRvbHNzVEpuM0gvUHUxWEdIY1JQZEVuSUpZK2c2VjN2SmZKb0VkYW8zWWp2b0t4MUptWGNJWm9FZCtEM2dqUTJGTDN5VjgxeXIwQzA1Mms4ZGtNT1ZaOVF1RXI4Y1lNSm5YSmZCSDhpUmVYZFphRlhzRERVVmdsUkNYRk15bTVWVkRMQjZTOUdIMDRlTHhsOExqeFpkZkdNSjkyZy9KM0Raa1p6akRaS3ROK0lRUk4ycW1TcllLdlV0MDQ4L3RmU3NqR2ZYZ3N3OExjUXhqSzNjSHBsUExHT0xpTXJxRTQ5b0xJMTU4b29rWG0vVWh3c1VqaUZWQVNVRG9PUkpnWnUwc25lYXU5Z2I3bWJteFA5bE9LaVp2RkxFSVV2bjNraW5YbjJrOUxIVmdqNnBiRnlLYm1CbWZLRkViZlhUMDBRcG9YbzYxcHJEcUkrVEFuYVIzQjc1YnU5S3c4cyt6RDg3Q0JsY0Y3Nk90WXBvMU5mNWR3UzNXMlAxQyswdGlwaENnU0dwaWFSTVFZenk3OUpYL1k5SnY4bkhCNEt1SEs3MHN3MThNL00rVE5UQlhKbUNGL012ZlBIN05jS0hKSU5ER2krZ1cwSnMzOGc3TEJDSW1QUEpJTnFlMkVpak5IN2VsV05FZFRjMVIwanFVQVV4Tm5GakhDQ2hrTVFPalNtRGZJNWZieVpWcjlPeW1CeHp0RTlmazVBL1lSZ0VMaHhEa3E2WU56aVlLVnEvY1dSaGUyd2ZKY25HZjdQeEVMOXJyVkhiRXhBMnhjTmx1RDJheElqbng4TWR6c0poeUZTbXBtdDA4SGJZV2tTa0hWaWxiY0hqa3VQNnZLUlY4VDJJTG1iRVQ5KzdrZ3ltMUV0Q1B4T1ZSNWt4dmlJcHJJaTAxYlZLRStBSVU2dkFpKzcvbVZWOGhZWC8wRWdLdjQ3RWJzVHFBT0w1M3I3S2xoWlBLMzBlNndBLzFmOFowVlFDODJlWExnczVRdlJxMWRNMHJyS3lIczdiVGw0QmV2UkY3OURyMVBhUjI2dURxelk4Z0xBaGZjcUY5VHliek8wV2NSbHg2d01qY0MxekFld0MyZHliRHpWN1E4SE1DV3g1Y3l4MEdBWXEyWVM4Z3ZPRFdaajFrWkZPdGxNT1VGMXA4UWVqcERaUjFHL2pHNXB5cHltNXpoaDhYWDRKbjlEK0dKaUhWMk1sWUJNL1Z3Q0NoZGpVQ1g0a0NtNS9TeWpFWHJyRFVPWnVEMGo2eVNEb0ZUa1FscG1KNXpOL0lQQkFCekZseXJMWmxpdG5WQTJNd2NzaVUyVzNzOHRPb3hTZ1grcjdGL0srbXEvalgzMndwbTE1eFlEeXpyUG9wTWx2QXVJWk1hbk1QTlUwWFhmamRrUjlYeDVsUkFJWDF3eVpzTno4bGpEVm1YUExOeEJUaU9hMXB2MWJiSXl6OXB6c3QyVnB1cjY1NHZ3MCtRSVFxRDFPWjdjSWpmdVBON3ZSd3MvN3hXcUVNMmVibE9sNGVHK2Jnci9nVTE1NVJrdUgzNjZpdE5Zd0laV2QrYVhzR2VXamszRng3U0IyWXROa09NbjBMNGNtNkVGTFlDQUVEWm5SSFFCdWhxUGxKdXh1cXI5UkYydERRTjg1NGpEMERvdWN0MTlCSVMzWi9lc2pOWE9mY0d0MzhkaGNjcU1Ccmt5WDZNbmJiS1RzdDhYajhjbTQ5OTRnSzNzOU1HVWErNlk4VzhzSWRkOVk2MVRXTklXbTNIZFM3dmEwTG1TZWFLRDFMNGMxZWJGNklzVzZlSHVNekdEM2diYW41Um9NaCtkSHZ1bVpySFdCeVVuVXdNTmZPV0pOaGk1bnJHclpFalEvSjFReFZoUTNsdE9DME9rTm1tZnN4d3lidXRRdjVlMTBMa2poN1RTZEw3TlJBZ0VqSWJOV2xaYklIVk5CTk4wSzlEOVpnbzc5T21HMzlOUlQ4NVhpSCt5eGlCOWcwcHBlVkRIblVtVFV6WEk0SjU2L3BIN0VqWW1jUGJzNmxqTmVHQ3crc3JTRWgrWER6RHhIb3dRUUtncjFVeWlnaGhWYitqWHZCMGlDNDJPalJDOEJpRzdSdE9CZWp2RjFUWDJEaE93RktLWDFZMy9iZ3JiVWpaeXBBeFcvRFBuRmNGODdWMzB4TlgxbkREWjc4VlRrOTFQTFIzMnM3TU50dVY2YWl3U05WYTdqWDNxNlgyNnFpejhBbUlteVVJK0xMeURod0JlS3IvelYzMUROb3FEVDMxaVllV05WOWVmMDUvcHNOK2xiUEpZd1FjWlRxWHFueG5Nd3didjN4Z0tZVnJJcGdkRlY2MVVhZ2psWjJicjFtMFpKOWpFaW9paDhHZkovRDBjZFRqd1ZhVmhmUnhVMnkxK2duMmZPajNMQmVUdGw4SXpldnpWRGdGNUNJeGdidThVWlREa3VDdjk2aVZQUzdRNm10NysycWo5ekhzOE5YR2plVXZlS25KWHg2VEd1VjVycmM3SEdOZ2dGYVVDNUFUT3NrOU5xaE1zMzNiU2xTWE9YOWRDMm1ZRlRCMkkxQnJRYk5mUityQzM0cDVQSjZjc204RVZCcmptMThUTkpvbmw3aEVGdUhnM2JDMG1XZlRIZmlwaTh5aWJiajdIdEdaR01ZVmpFWlJQazNOZkc0S2R1ZDlEalIxRjRlUWsxL0NFci9oU0tTcyt4TE13SndVZGRKRjI3d1p1cnBvcmpkQmpvaUxBTzl5NzVZdWxZSFIvNU5mb2REV01RVnNPeUwrZU5JNUtvYys1dFMvUDlWcEpLbStpMm5saVg2NEpYQWVrM0thanM2R2hKdmdpdENNaHc5cmw5NVNjU2g4WDJ2cXZPMWlwUmx3RlgyM2laUTRnZjY0ZGEvQnY2NTI2MmVNdVU1MmVHMnQvdXlsREFKd3RzN2pCWHUxWjhCb0w1SHlTNHgyQlBMNHptSDJpelBuWTMwQ3RSbi9BSFY4alJScFAwbXBKdkJvNmg3Uy9sWWJoZDBESGh3a09wQVVmUFlFOWlPK1lra1R6Tk5UZGVYQ1Y4TW9Zdmc1bkpIQnNPS0tiVFJucDVnUk5DeGp0YXQ0UGRvcHlUeDJwbDdCU0V0d0pkWXUzUlFjc0p2L2phUngySEEzKzBCbDJxK1lKSkkyRlVwWU9kcFNHNExYalpsejUzSkh3WVJVUHhFY3hFdmRNaUh0THBuYyt2VFFIek5pdkFNNWhlSS9ueE9MejZJTWcxUVU3d3Riajk3U1M3QWZxdmlKL2MvZEpMRmVPa2tFQ1BLZmdZWWFmelhtTHQwdXBlVGVwZUVsNkFXcDAvOHlidXFXVXdUVlV4bHNaNGZ1Ym94MjJpOS9KbXhMQndEa1ZlVE9wOThNdG9sbm1HMXhYNjE0UFRZYTRtVlozbEZ3bWRaeDU1MjNJeXZmdldiQlFjbzR4NVIvVmozcHpGeDMrcGJHWEl3MmsrUC9jYk5qNTg5VjI4am9ISlVxZ2hyemYxbUQvVmtuTFBNSGFnbzM2TXZldXlzdFUzMkIzZGkwcFRGTEYzK2Z6V1FvQ3gycFFsbWVSSmVNSy9aalVCOEFHQnFYOEcrRWt3MnM4dFQxUFNSVWoybVJnYnd4QUNNc0Fkd2JHTjRyWVVqMTNXVDlmdEgxbkhxT2NUTitZTHZibVZaSTZhTUhtNWVyQjNpMXpISDU4ZDRPLzZhaU9sUFUvVGRaVSswc0I4K3E5d1lZTm5nRThwQW9xYXhmZ3B4TUxJZWovY1QyODFqbzlXMlcrd25LT1N6Mkhsa205TTFoR1Nyck81MXo2TnJnNHYrank5b0UxeDZLWURuU3RmeWZnUXo1cFdud1I1bDdIRlM0Y3VaSkplLzBMVklnNFVkdGt2dEtuUmhsaWVVYmw4eGVYRlJwWmlQK0RNK3NrNFFmem9oaVJ2RVhqS1VwQzVjVCtPV2tRYmlQbVk4UkkxV3RHaDdJYjFTRWsxNk5SOTdVU0tSQ21sd1JHcUdWazRFWFVXMVRmWkl2VkVacG5EZUdYUm1YQVp3Y2p2OTdzaU9QNHlvMnd6bTZGdXhpb3pZRGV5NTdPT0pvK0xQOTdzenpyaTlaK3ZibnhENEczbWpDNEdwcWVET1d5WXJDd0NVVzhod2M3RDAwOStqNXYyR3BQR244UytoUjZqL2ROK1h3SzBKR1hJMmtlcmdEdzJBSU9STURBOXpCTVRtbFQrd1oxVWNLZFNsR0l6anJiY3dFZEI3eDQ2QkdPbUg5ejJOKyttL1hka2JHV2hVS2xFUUgwa1R4OEpKei9hNWpBMjlZZjJwS0l5a09EVVBEekUrRUViTkdkNitLTndsM3B5cTVjWFRhZTR1cHc5Q1ljMzNCckVjVSs0YUVrczVWdEowbEJCQTcrZTVEMzdHeHdoVkR6UnliaXpwYW5wVWIyeDdLQ3A1SnhESnZzSjZ5RGdlT2Q5dzlVVHY3WnJ2Sm9GdTBOMlA3VUhvZlRBb2NCNVJaSnU0MXA2NzUrSWl6S3ZoeDdVMStaUHZ2dmtJS3ZFVjBGa3JzQ3RLZnJpa0ZkZzdYK3JKYWlFN2I3ZXBpb1JneGZtY3lDcktnNytRckxJdFRyckRvMlM3bUpKRVZUdGVsSkVQWUJyUmVCVytSdlRmWEF2WGVUWmlwY3NuNjJTUlJITStrTXN3MWhFbktVdkNyZ0tRSWN6VU9qYzI3UGZMc1R4amNVTTVFS2NzYzRkYnZpSWM5dnMrWUk1V00yN1hIa0ZZODZXYWluR1BCcGJrMjlnaEdlKy9vRlNGNk1FWTVXTXlFemtGMWJSb1RyTFBHcFpyc3EwZkI1MDlEeGMveFA4QkpVSDZkZXROOTVhQVFjSXh3RW9aTmRyRmNTV1ZmSWk1R0dTU245RHR2V3ozVlZGaVVBUFZYMU1TcnNpUXBMK3lpWWtFZlRFMDFNYk9Hb3RSVUhuYUxhQzZxdnAxTXBtNzhMalJmTmQyN1ZreFY5cVIxdkdTSGZ2RFNUVE5QVEhOb2p5Z09ZOVdUUUJIbEZ6ZUxWZEIwZ3B3THMwU0dyMEU1Wm1zbWZqMHVxR1U1T0xLMDYyT2JSR1I5anFzY0Rjd2x2TEVRVFE5a0tBOFJuSU5Ocm9RRkQxbS9Da3FoZWo5cXc1T0lkOUY5QVlzamRYWXdPWTJQV0trYS85OWk5YUJQVlZZdHM2aUxzajhkUWVSUDVxY3BXRmF4WFN2ZDJBRGtyMFVHRkxzTzBJaTltaytkQ2ozdExoRWJ2WTNqelM4emsrL1ppSjVha3IwTlFsVTB5UFprdUFlOXZtYUlTRkd2VmhyTU5mdFIyUnAzK3VEQkdqZHVDMXE3OGJXMGU5VWZ4aUk4TVRwWWdlbnBIdFJsOXBFTEg2WnFwM0xDQmg2Q29hcmlpbHJSblNuY1Fld1QzbFgwa2l4QzJlNDN3dlV5YVA0c0hqV2VHS0NTekxKNlgveEduOTIwT294MTh5RTY1NERTRDl1TFVoQUltaU9CZVNxaWpKQXhBZ0I2UXRZRndqVGxCV1hVUG9xbXVyNjd6aEdKZm1Pb3pyWC9YVnpvaXBtZHRFQzlPMXVRRGdFRFFnZ0VPNkppanhXWXI2NHpyV05yV1VGUHBVeXVIRThKSFpMS2JBL0h5VGdaOU0xdG9zS3BQczRndjhpeDgxT2RUV2hCRGRiWUZFbnREd0pGZnNxbUtDU3lnd2JpSDNEdlVlYm9WOW16dTh4WDdQa3ZOb1psTEJWWlRLcnR0bVUzQjF1aVE5V3VuMnMrUU1lRDV6TkdMVmRQZDV6RGVUSjVEekZabkQ5Q0ozVXpiRklSMDg4Y2d4OEF3b0FMdTh2UHRMRmNaOE5WNk41WktLRFlKaEhHMlV4ODQyK203VzZnTWp0QzludXBsODRHTnZueVlHWVNzdG1YNkduSGJyNVRjakx0N2swaVRSeUJRRWwyNkRhdzY2TmZVYTFxbmJqVVdUNkthRUkyUzlrcG52dVBDLzBpYUxqWTJqY1NyQTF1RjU1WjFaTWpyRE80dHBMdjh2VHo2WHRlWmpSUzlLbXhKMjdpdEFMOGZOb0dSdmI0N0FjdnByV0Z5MllkTnNPdVl3eUU5V25hSHJ4Q3NvVlFoUGFCY1pCcHpiL2dpdSs3UUdBcy9BdUkvTFVpY2Z1cjFkRFVlUFBTdHJTb09ybFVFcXRqM1c4QnZaZDNBZ29iTTl3d1ZTY3BXRCt2UFdZaFgrMTFLYjhtYTRZQ3BOMjVJc2Y0a3hoaVZMYVNqTVlQYjlxRHgvczFZbU9JMjJNc0tlVlo2T2N0cTd4TFdwWmoweDhsK2V3MFRPeHd2bml2czk3L0VBR1VKTmZRUytFVFU2a05VMkwzVURwZENDT0JCWGdnMkZyL2t6TUZ6TytBbmw5L1VGUkRzb3Jyc3hxS0JQUWR0WGVZNUpCbnlMaWFBekVKTUpiVTZGd0dJR0ZuUkVtRFAxZVgyand4dTdQS0pJbXBRMWF1ZFFCTnVPNXhkYlhuK0xDV3ExSXV4Ui8rc05rRXJFTEE3ajkvQ0pYZVE4ZEljRVVPL1ZVTC9TOGdYeDdnS0pwQlRnZVFTcW8waGJxM01Wc1cxVFhrRzFiWC9wRjk3d3B6SjBrUytibUhKYWlRcDZyQzg2S0Npa2RtdWlPRDdGU1l1NUdPS0p1YmY4VXltNEpMK0QrY0FJRjduWk81OG5hQ0VUL1hqdk5PRkdWdk9VUjZaZlVvbjlaUzczdDVPRFlsVGRNRnRkWkVDNmd6UlJkRTc4UTZXWGFCQktNOTFoOEx6blU2S0tnWk9hc2tuR1NFc0F2ZjFpUy9YMGcxZ1dOcndPMm1tRTJnRkN0cHAvVnZxYm1WdTFzdVhSR1UwUXhKN3p5WlZtQ1cyNnIxY01XeFk3SXJISzlUZVl2WTg5ek1iY1hUVzNVbEFtajlkRTBPVytuMDhvMklPdTlKNmYzYXFIdlBzRHpSSmhIekdPWFdUS0RZOWpwS3pOVDd4aHhDODdoU2I3MnNJT2s0bGVERTIyY0lUQUlMMGlMMnhDUENaRlgzbitCSEwrZHoxWnhkekF0N1Jkby9Ea2JnaUxiVnM4WnhiczlTdEpReUIxUG45ZHA4aE9rVGxXeG02cTlGUHZmSkthTk9zbHVFSGdTbjZLcnhEbnNsUmVyRmNkWFRzQmdwSFpUTjJ3anBIbzAzNk1wRVFkbUQ4N3drc1B4dVBqN3VKR1VKM1N0WVNOUk1FdERpOElITkp4aVRucGlSb0Z1Slh5d2c2WW1Ga2VsMTNIOGcvVTFBS2VGYTBoV3hPUFhhWi85WTBBN3JhaUdSWTd2dXFlaWhVTkZmbDB2OCsxODBtLzdvS09uM2VSZm1kdVlwVnlpL3FkUkJKZzI4Y2RpWlBrZFMyQmRtRUl4QWtGWUdWdVlpUUJhcDl5c2ZjZ3JsbUFrRTVHVzg5VDJ0d0hzM3ZVdjljNW8vMHk5NTJCZnlDa2hKeERLeSt6Z01wMjN6UHkrUE1yamlFZ2U4UTFGcmtBbm1naEUraFJ2UDRZSm1XbjRqdCt3MUdicklWQzNFYUxHaHhZOVVVWEh5elplUC9QTkdzYzV0WHBhelpSaVdWM0NoV0hxVEp3akU2bmxBYXkzTkRSRG5PcWQ5Z2RVRWtiQWcwREtoTWVMS21BSWhWM3A3M3F2S2pxWGlUdFVBZFpBVEpEOHNNeDJuN0xNTGY2WFc3VVl4WXA4ZEJPMG9BYXM5d1NJVW5SMEJnWmp3bWVxa1dhQ0I0Z2FYRkxCZEwvbGo1Wk0yQ3dja29xRUo4c1RwRlVTVkEyVm9rYklMeE1tMFVxc0lpUzNKNmEzWEM1OHdSajVnZWF3bS9Ka3Q0UTl6T2ViSlRMdmFsYjJJNFY0NUhxbVZnK2txMVhGTjltMEl5TFk1eVV1NG1TbjBhUlFXKzZ3YTJ5eCtacjVpN1VhMG9UNXZRR0NsODQrcXFHamFCZW5ZMUhTNi9ROGtGWmdjMEJ6NUhzVkVjM1ZHRm4wVDM3ZHBOWFNmaFg0MjkxRDhnZ2NxWkdDaEJkYURCZW94cDBqTFE2bHB4ZVpJY1psaXF6VmJZc0NVaDEzMGdmL09EblJsYnJDbFZKb1FNeklqcVA3SnliQXVQV091QU1KNXVpVmM2ektDdHk4WGZVbW5DMklNUkJsM3p0Rjg2cGRGWm02SGF4QzRNMjFrVXR2NDVNRHA3TFhMOXZHMkZlZ0VGUGtzSXJ2SjJ3dVJxTG1BVFYxTWdlOFdEY0NrRS85Wjl2L2Fna3prSzJBMGtLRHN3bFhqUDdUbWJwUndHS0lGY0o3MFVEMm0reTgwQXJiY1Nyd0NjaHJjeDVXcUFSTUU2UGJvS0pmSXBhOUdjaE9kWWJMbVp6MGdUZHVQbUFKemYxYVJsdUVRU3RzemFyQU0rdTN1Z1duQW1zVWtkdnZVY2dHZWNXZ3JqNUE0T3Q5bFl1Ymp2M2pFc0RBTi9Qb3lvc1V6cm9xYitPT3UyWlF6YzlvRHMvZVlDdGF1aldjZFV4SzU0L3JBQmd3cExBTnZmOG52bzFTUTRUZGhnZ3BvYUJMUE96WENaREl0c2cxSkQwWmR1cjdzRFJmeWJKdkVGWlFUa1ZsK0t3SWZtMk5wOHJMOEdMM2t6ekw0KzdENjBZUVYyZ2c5Y0sydklDaGQxRzMrSDB2TXZpRUZBbDc2b0pzd0FkektzbzFmWTNWV3JScEM4STF1djNBUjRjQWhMZUUxcUYwTEszUXpWOE95RFlBK0ZjMHRKTHRIdFFmb25NMHFnYzJ0UzN2aCtIb0w1TXpwSVRiMGVuSlhKdS9rMkhxaGZJbzlKOWQvak95MHcwWUFRTUtYQ3FRNGNscnhEWlFuRi9sMWlzZkhTT3F2VjRCc1JVTGpmZElxUElONFJPZTZZT2JYekdiSTZEUzZVbmVSM0s5c09xSHJaM21VVCtTUWhFN1o3UFBYbUNkemY4d0pDMUhZY0YwUlY0T1JJUThSODFDSjIyRm1Oc25WdkVpQjBDSVEycEVaeVZnZ25BaC9VOWZEaTNRTXZqSmJLbzZqT0QxTnI3NVZsREViK1RkRVdNdUlhNElydUt0V2ZZV05ka25McS9zVFZQSjgyOWNVcXlvNjNBWDhESkdEdFZmNjNKL3hsZHFXZ0dmRnNKd1F0NDJFWTQwdkhqd3JIdHlrajZFc1RzVkkzWGREVkhnSDlFRXJQa0VmakszMnNsZ1dETXV1dnR0OGhDWHYyUDBLczhqdnFHbGNJUTlwOVlnYU5CdzlmQXYydkkrNFBwTmRVZkgyTm9YdDhTaUozazBnb0IwQ3QyelNsSldnZkEvcjJJa1JXdWFlQlJXWnljaGVvemJpckdFQllFZGYvODVxbE1tMG45S3hYY1hqaVpWM1RpZmo0VkFRdjBXc3kvTkpKUzloeGZ6bmJHVFVCenB2c0s2QmlYRUR0Tmdsc2c3Z0ZwcTNObCtRVlZheVdjVG04Qm9xMWtUcGdmS0MyWHhRUDBIaTdlNkp6Z2d1WE1KaS9LajB6QXU5OFlVQW5mNXhTd0Z4Y1d0OUc0bnE2YjFUZE01UVNGc1pneVVJaEtlR3ZXTCtQVFFjYXlNcllFZ1VCWXFtdEp5a0pIc1ZUNWN4b3BIMk9kSEMraE9pY2pvYXJBYkxXckhyWXF3emhuNHpEMlo1TDlzdWZxblhoKzJtZUd4RmlGSkE4ZFkzN2NlSS81dnlMMWNwSHRhWTdzZzZPb3d4MTFNVWcvM3NBdDFPR05WMzhYbHdSWlR5Uk9YcURxZC9TK0NHN1Bqdnd5VnRsRGNZUzYxT29MdGJEUjJZWkpjZXZtanNzVFNLcDErclhUbE5XRWJWZHRvblorYStqOVlnVWxLMTgvWmh5dWZxb2U1Qk9QZnM4d3J2bnN0QWpoNmx4QkpYMUc4a09lM2RNcjVZdmNORC9EYkpWVXVzYk9JM1FsK3RibGdnL2RHNmdYdjROSEV1L0h1MUJoREpYUWNWV2RoYjlpNzNFMzhQcjNCVHdsYXJVbzBOaGhZWTJsVjl6WEFsSGVGRGtBOFZuMkhHNGZCSk9lQ2NZNDExVzJnSUFYTlFnbHBUNnEvZ0Q4akVlVndicTRTWVZEaGpKUTR1azJVeW1vUHBNUmg4L1cwRzhqaWxiaHhoN1h6L1dmVnoxU3Mycm5sWWdkcVpwTFJ5Q0Z1UVQ3eXhod1kvR0JhQWZjR3h4Y1MzVlRuZWJBcENJVFIvM2NTNnIxS0Y2VUhXdU92NEZIbHYwNks1eFl6U2xSU2hxN3l5KzhGYU0wMHBGWFhCbUxQU05RTTNvVmNLQjBYVEl4cmdkM3BSYU5yM2xkUStqVUVaYzE1dFozV2srajduOFRXV0pRK0VNaE9WNHppSmxyK1Vhc1AvZUV6amt6RThqTVl0bW04dWV1b0ZLNDZKYk5wd1VuVXVqaEhwSEgwd1VkeERCdEhwYTVOUTNJODh5cDJNc0pmUjI5UFR0ME9YdG1zUE5mUE1XYUJXV0V6ZjlpNjJqTmNRRkQ1RUttRitORURmM256bmlTT2dtZTFZOXlVN0tQVnFOTmpxQmg1VlNhdG8wdnY0MVY4TSt6ZE5kaERKcjJsdjVSMGJwNkhnSElwaDR4UWhjcm1FekREZWsxTWVST1hDOEY4bGQ1TFNSb0dtVW5RdG9scEtMMmtoc3dERDY3SzMvRzJ4WWIrTklaWVd5YWhrd1JGVXQwYnFJZ1pIbFcyNXFsOVVxMDg0Mk9JRVNGWFJvNkQxcjBlRkQvY21ZNi9MVlQ0UUxpVFJQYi9NRjIxaVJiVldHM3pTNmpXclhQMjllV0h6OHVERXRPRGNvd1ovdmJ4ZUUxdHlqVEZ5MUYzRlMrWXhSRk9aREhMZEVNajBuNGNSOENLUWdsMFVGaVV2YXdJTWUrbW94UCt5VXpnZUdMNGNjYUVhQVpHRnV2dHk2L0V4bEhacXV1ZFJLUzF1K1BHZWhqSXFZWTcrMllscVdYcTRTME9YczJhTXIzWDlqQ2Z0SUl0Q3p2ZEtrVHBWZk9GeWV5RC9VOHp0Sm5xcGFlS0Nzd3QwbWdwNWp2b294dll1a3J2dWozcStMbEtnT2FQY3RMM1dMYzB1U1l2cC80bElCQXNWbEhlWC82WjBuamlCT1NXRUR2WmM4cWVPS3pOa2d4V2c3bXhvWEpINmN2NS9VMjhBUWZtZFFjayt1MUJkTGZJSkN1TVJBcHZlODNGUHhGSWdmZEJmVVdMU0VWRDkrMmdvcmFjWllLS1NRWHJvY3gzNG1rWXhNMWFob0lPWEN1b1ZZck9tYnFGYkJ4R05relFQc1BHblBmTk0zMFJPQytXSk9zemM5cWsvR0NzY3FYUGIrSE1iR29WRERaMmdLTDNNcFIzZnQ1MTFNeFR2dWUyczVzU3lmWDk2VGRWUHFQOHA0VkdRV1FjOFdDWjYrNFlMWUdGdVJ3QmRYQStzS2g3dlZ4RWNzVU1UM2FXNS8wMXM4d3QrZXl4cFB0a0RFSTJITnNXemRCOGc5bGIrOWNTNHZpbGRIQ2JiSkhheVJmVm9QMTMxV3JOVDNnZkJ1U0lKaFFJU0h0VGVWeldrbDlLT0hEYjBXRUJHYU1veFFnWEJTYTZtaFhHYnhxcHFFSDlYOUJQbUlMTk04YmRqUTNoczdvYm1PTmdrVVEwT1dsUWc4U0lJMXFlTjJ1K24vamJwQ2dEV2JFYTVJbEZES1dmTGZZL1hIRVloME5Dc2owcFRidi9HRTlJN2xsMjFTL01LN0xoa0g5UGJlRlBJZTVrempFeGtodnhhaGNYRjFFRWhCbzhlU0N4c0tNQ3pvWHg5MzFCb1pPNW9HOU84T293TVJoTzZ0ZXM4ZjFpVDRiYzF2NGF0UUF5SXRGVFNYYkJiY0l4OGhQODVPVitLZGpONXBLUlJBZTlRcW9kcG82WDdhRSt0WEM5V1hTMll0SzZoLzdDSE9TQjJxOUVLeStwVHBBdlJ1Lyt5dHJOeEdvQ001Y2ZXaEhwVnRDWnQ1ZUNKSkJRMFRrdWkzeVl2ZGF1L1ovS09VWXpSTWhlWVZ1UFNPc2l3MWl5VERDRUgrWWplTW5udlFmRFUveU11QnlsN3VLNXp6K0xrV1JYMDdvZUR3dmFwMDFCNUFMZW1Jei9TNm1RSzFIY2pJc2lURERybTRqOWlKQzZPa2tGbHVGcGduRDIveDIzSFhVMGNHbE9pNk0xaHBMK1JDSmtxeVVpclcrT3hLVENyTUpjM3gvRERoZ3hXaFBoRzFpNjd0NWo3Uy81akprcWUzbVNyNVBJMGZBYnJvQkJTWk1Ca1BWN3VCendCazBBZy92WDJOWTNmcDJrVDJkMHIyRGFYREZia2pTMTVBak1JaXhaRkppT0prVGlZdU1Qbno1d2FRd0d3N2xwKzl1OUZDUFlMdU4xNTdoRnlvbi9JOUZZeFhUVTVrZnNKajVIbHdDbEtpOUUyMjBhVDNKbUNYQkxKQXM0dEFvNzFVOGpST05Ma1JBTDFKS1czcm5rVGVOOVJ6anRSdHdDd25wd29UeTRsZHZNbTlOM0RBNHhlNS9ZdUFQTmZoaHl1akhYdVFVOG94dTVoVkJHZUdNZXA3b3V5d2VkRDhqWk44R1lqYnJHK2dROW0zZVZXTHZXdktoNEJuMXZ1RnVxVDRIWlpaS0VGeVF2U1F6NmlmS1FhNmFmd2ZxUXlIKzFOZDhCajRveU0xSGJsanRPbEhQdmIyOWMxYjZ5MkNUOVJsaE9IdlRqK1ZpSXJVN0FlWHBzSWdqR1ZKT2JrY09BYWNWQktoMnpWTkVYTkRzL2ZCbVZsUEwwL1RLeGNUcXZySS82S3FCYUQ3dGp3bkdud2FuUU5wY1UxQ1JjbTZWelF4NHRvSSswNjVHL0Z6WXA4YXpUSE9GK01VUGVqcVp0YUwyekd6ODNDcHQ3S3Nuc1FENUFHa05LcXRMa2RxcFZWM2xhM2Q5VzBGU2JObVpqYW9RK0NzNHpLRWhDcHI5czVEWGhkZW9na0RER1ZsT1RiUjhkTkN0YUpieHhTMUtyaGxIdUFOcXhUTUtqV3NUTmowRzNCSEk0Rnl2T3ZtY3hDYUdZQ2txSTNSMUcyWkcvNWRRMStOcGlZTFByamIxRlhqWCtkdGxiQlB5RzZHRTJJdzMyd2hoeDFtK2lQV3JqNVFOcU1NWmxYZjk1enBBbmFxSXRPR2hCN2U4RThURWkrREt6b1lZWmNNMUFMUGJ1M2hNdXhCUnRCYThMZUpNRUZGaXBjOVc3cjlmSGZSbkZlZy9EOWdFS2xtdkNNMEJDd3lROHdJeEphN0RZTEtTY2YyWHk4ZkY3cEVOLzdpKzZXcDFLUzN6VC9xVWI2eDlGNHZBTWpLaDNkbm45TSs2VXQzazNKNDNNekdLMzhDODRlVUluY2g0VWFWdFErK0tQb0g5SFE2S1VraEg4alk5Z0NseWI1Zy9ZTnk5R29HZ2lRd24ybXJydURXS2NvU1YycTNNWURhdWtQYXhJM3hwOWtRdHM3c1prcmlwNGIwU1gvMktEOGZZN2ZpZ1NMR0g4U0lQNkwvbHdFaFlXbW0rOWRJbmNQYnhJdENlYUxCU2h6SVpJOHFGcU1MK29SaThpKzZaUnFpbzc0ZUI1cDFtV3hONWVMYlV6K2ttUDBIbDBwZG45Y0ZWeUcvckJMakRUYjF0dUFma3JENlRXRWFhSDFFcWtiWXZwTzdWR0JoMUlSRVZMclZleXc3T25UcisrVk1ENUM5bmVndTdlUWdwMkhRUVZ4Z3h1ckRLeDcrVnV0cFlDMEsrRGNFRVpQWllJWmVVemRneHRRMVVpdjRRd1A2b09qT3VFOXV3RCtpWGdWMGI0NDZ0TnczTHRMWGVlNWhRZkd3ZjQyT01uSTNndjFSS0tvMEhsWTNPNTdiejlDbWZnRmFsNFY4ZENEOUZkNlE3VWx2RWhlUzJZVlBmN2E2aG5OY0tQRU5oNEs5dzFHVjcwazIySmt5ZGhRV0pXNE9LU0VCNUdrTEtDWnpoSEJuLzllNWdjTGZHZlJDVGwvamhmMlFqUFdkNkh5QTcwd0w4bW1NL0RVelBFTTI2bG5oWXhjSm1mZXV5SmVWZEhOditBVHdBZXJFNjRTcXMydVZTK0RvMEhWVWlTT2dWSjMyV0ZwallJMlFyeExsL3JKR2JtNkd1dFZDU0YvaGxVUkhZK2p0NGUyT0VCY0ZTYnlyZ3JITWJZZ3ZMdXdUKzR6U1NrcTAwZHhNdFFUVlJJTnJDOXFFcmlxMFlQT3pKUzVtWU0rVnBsaWRrYjlwWDFJOGw1bVJYVkc3YXd5V1FZVWcyQW1BV1AzSUpTcENCYTZmTW45bmxxdHJ0NjZLd0sxQkdXTE93c0VnZ0hYZ1EyeFdvOXNlMWxkekI3MlJQakhJYnBXbzlsNWsvcjlIdEpyQk45YVM4cGVlU0piRUhGS1R2RHdNR3NhZ3lTdVVBNnppWTMzUk8wY2dSdVIzR3BMakNueXZOU2sxU2UyaGdISVhORWZlUXI2UDdHd3dqcm14RS9nQ2kvV1MvVVJqenNTakxmWkRRVnQ1QnZNbFVScng4enFKWUJSbElKdkN2WXI4NkxxeWxveFp6aWQ4YUUxNDdZVWdma1F6YjNvVk9sSlJLNjhHT050SXk0TFgvcEhOUmUrKzZOR3IzSTRjdHdIeXg3R3l5OXdGT0k3MmUvU3B0K1dUUFZibE9YVmJ3OFZ5cUpGRWpXMnA0OEVWTEtPQ05BNW14NTZta21xNVUveDdIQmJoalQ1WDVBNllKekNpdjAzTlI5clk5RGFyUWpKLzlNTm1WbmhhVWlQTTNxQktsQWdwYk5McGJPTktYeUo5K2Y5Nmo0S1JUY0NKSVRuYzE2SHpFWXliMTM5L1UwNjB5RFVINnJNZVNrNzJWdmc4NkFJQTJRWVFtUXpleldxVWlDaUZTUmROQU45cWlEcTFHNkFWNnNDM01RRU9WV0lGVGxLeDBlNkhrSXJ2UHF6alNCbm5uR1ZoVzUyOHFpVVk4SG0yVmdDaXZFRWlBcnpmNXVVRFBUWEFGSDFKYWszM3h2NlVyeUUwdi9LOEJKMHp6ZElzZXhWeE1jL2lBNTJqUDVzQ2RFb0xxemtQb2FadmkxTmpVSFNHbGZ3OGs1UTIxY3dCeGJ5MDN6YU9DMkNaaUt6aXR2alZ6TnlSbmxnbnM5bjJQbWpLUWgva0JoOHlGUThlRm5UelBCbTlQR3pCN3p4NWYyVVZieFJ5anpJUGdwMnppSkdYSFFNZmhtMmtoMVpKd0FwY3doSkJ1VEhrSjNLenp4bHVPOG5NZStNUVArYytrOXljSFZ4cEhkTXBnbjVJVVAwSHNCV3BtTnNJdHcrLzFrZlR1eEg5WU1hWXpNOGUyZHp4TlkrK3IzZ0tHb29sZ09pWlVLSk15MzNMOGJXYXpLZkRDa2dYKzVWc2dTNzdpcVhNVFNhL3licFlHSmdCdjFJWFcyOVRiOTlSVjdPcjFlVjJhcEFHZlAvc1Z1Mks1dVQ1aGZvSnNEVi9COVlRTnhuM2FCTncrRVozSlBrbEE5WGRGU2pVdzlGb1pyait1Um80MXVKNXdJbVVOaUcybUdGSDJZdVA4WVFJY2hKYytlUHBRS01YVWNoUHZhdHlETTdaNWpCOFRybGM5UzlMZEIveG9mTk9MTmxLdXZkVGt6djBzcVkvOFpZQy9jR3Z2dVNydWVXTnB4UmlkKzNDZnlKUEZNc0k1Y09hdnJGMnRTSlJGOFJUZC9WM2RtaU96RW84V1ZRRDV0TEpKUVZ2RjdnenZlL0oyVXNBLzNuUlhvdTRWNjdOV21vMVRjbEtEMWowNThsMXRvOGxsT1F6a1B2SXRvc2RwazdQN2cxSXp0OTBwOHhVM2RqVGtra05QZGRKaVhCT1FoanI4cVF2NXNJSmlhbTVtV3B0QzBDejd3Wm1QckRIVy9kOVAwbG0wb2xNRHhOc08yUHdUaGp1R3ZKSTY1Z2FwVUIyZThKTlNrTFFqSXlsRUEvYzFld21tUWRnZXJ0RHJhQjBFZU9mK0QyeHFwVTFydTdoa09FQmF2YlFneVZpQUtwMUdXdEk5UXgreXdQVHZlN3Z4aTlrenhhU2cveFZPV0hyVitYbS9lK093NFJIY1VzeWgybTQ1T25jNHRwa3FWYWhsVm96NmtLV3F4SWRPdlBqVmJDQThkRUx0OW9kdkNUN3g0Y0lSaGlOVHZ3eDJ2cVQwRU9jRmRLeHpFN3RWWGt5SVNpd2kweXBhaFRYb3pDM0Jac0FuNThvSWMwSTJzUVNpSVFpNVhhYkg5OGVickpITmhmQjBVeU5vSzczd0lMelhyUytJK1cxM2oySy9EdEc1eVZudXY0Mnh4R0JUTGhUczBoWDFqSytHUWtOU1NZcytmSE5ybE1oUW91MDlzYVpIWUh4V2tjQ0xEUGxza3YvemcwazFKeVBwZ2ZuQ2Q4R0ZUSjRMc1FmeEFYcm5meFdaMTQrbHBoV2phRDZGbCtJN3JBWVg1d1pCS0FibjhXSFNPc3cxVFI1ckFwSUR1cHo0OEI4UFpCNloyMVMzMkg3RHJGY1IvWXMzNW1JY1didEFJcjI1cDhLK041ZWFtcnlES3ZDZmNRQUJ0bUhwaVlzZ1RtSWlOanBoVW9McUNOOGdQamgza1ZQOG1yem1vZEFkZ3pUUm41ZWlES0xDaW9SUitubFNhWXhGeXNMY3VaODBhb21ZejA3dzNTbzJDWjk1bHFFQmIwSDB3OFNnUjZPUzVtelBrY2k0eWp4V1E5eXhJM3ZNbmpYYjV0ZmxiQngxWUJNYXo3cXVjdUdGMnpKa3BWQWhhRGcyb1lxbkNHUW40emRmWFcyRS9DbWdOQTRQOUxyQms2NFVvdnlhU3VpVkxxN1BMc3ZOZmd6U0hXNTE4Uld4TWtjbzYxdlFQb1djMHlTZHJWd3diemMvT1krWlBXVFdXa2p5NEF2Y1lqa0Q5by9CSDA3RjhJY1JjalRKKzlqYml2STRIYnRNN25veEFPYms4VzB2SDg2MVF1RVJUNnJkWVBrQ01mY2JrRTJxSlFhcGVFT01zbmF0RXFZOHlCTlVpc3UxTzZLQU84RlQ2WG9sM3NOeXMrY3ZSeEozT2d4cEFtY0Z4Nzl3RFh6UXEyc3F2Nkx5cVZsQithWi9tTjAxSnVhL3pQZmpDOURhZ1ZDQ0Y2dFF5NkFpWWJjS2FhY1VYU1dZRVFLMFhhV1hyU2NHVnBveENLTzVEMzUyYXlrMXd6ay9Mdmk5eEt0amwrM3JUbXdxbno3NWtGaVc4TmlsQzNnVHNGYU5KZStpMXppUlIxNkFyeEo5OUV0elVUUys0MDVvZktndFdtR1Q0RGtYeTNpMEZWRWI3SzB0K0ZkL1NvNDh0K1RCODNCZXdBbTFMSEsxbTBoZzFFcHZML2J3OFlsQ1BrNTJZTDh3ak1HYjdPc1pxdXpMWVBSQlhlZXRMWGFha0xJcDllVm54VmY0enp1Vlo0MEIzd09XQm1zY0k5aWdjeXF1dEN6a1ZrS2xNdC9VQXFXSm1OUGpYOVNjaTJwdldpSWhHc2M5TXBBM1VLOFExbzcxaE9aNlpBRVlmVmMxMi92Z3NEbzd6YUZXZ1hMVGg0VFJvUFVHRWdPYm9uY0pocTFDdmZXa2xEU1JsU2FrZW9tcitUMi81Tm5RdTRKYjFTZGRWN3daUU9GT0ZyU0dqcnJER0lIT0hTbE4zSmRNdjMvMFBVUXhXcFJXVWpwTjhudWh5eHhuSzkvOGpLd3psME1xeS9zekZ4ZnBibG4xSkJpa1YwcENIV1Ixd3d1REV3TEIxSkpRNndxRmhWMXBPMXVSb3BHcjgvSmpWL3RWcyt1ZURNTHcvQkNNblJ4enF4M3QyeUlIckxoWmhGclNWNnQwK0hXekdTWmZ6bWQyN3ZzVWhHbjJGbU8wTkRVQWJCSUF0a1RROUpxYXkvd2tremNOM2tROUFTQzY4VG40VTlNRDBDWTFJR3BNU0F1dXQvQlpscXhLaHZSZU9GVUUrbm9YMU1OMlNDNC9ZcGpmMk9oa0R5a2xMT04rTDQreXFWYkpVOGRodmM0UW8zYzF5MzFidU9rT3F0a25INEFseEZJK2RvcnJjcmpTYVRvd1ZNNlF1SXZNNEpyZGtxK0pDNFlxMWFZSWM0ZGlLRHFnSVVHa0QxVEMrOU5jN0pJa0g2S1VVZVlicjREWkpHTzVQSFcyL0M0c2VFTGRGNHp0R0U2SGIrSWV4TE8wb2Z4S1ZUL0xPRitXMldvN09MSFFPMkZ0MCt5MWlNYXRjZ1k0ZHMzVm5vNDg3cFUzb3BCU3czWVg4aE9BWUp6YjM4cEs2M2pNVmlkZVJnV2NtbmZ4RWZ4eWl2NmxzcmNoQXAxaHR4a2dqMUFyUkNidGRNeEtneWhLRVYyYWFaSURhWEE5ZkMxdGdFamJJbnJIdE94aGk2dHNGWVhOelhGR2tkS2VUMWdDYkRPTXF2S1VKc3UrWGlnTWEwdHFOMXVlZW5RaTdXZXBLV2tSUUcwcFUvb3JxTFZVTDFHWUlITERzYmRWZUtnTmNqdEpUZGljZkY4RlM1WW81SVRzNkV2MUtyeEJSc3lvUDZZUGo1MDFUN01CMHJNQS8vS0hxcjlNaWpEcXhOZjRzYTI5UGprVlhWQXU3eW02SS9KRWErb1lOYmRiM0lLS2ROSi9tVWdPVGxrV0EreS9xSVd2Z3JvOUZCdDZKc3RReS9VMkt0N1daQTFlMGRJckttRkVJdzNTN2ZmZ2JJZHRvT29GUlhkdFFncmpiYU1BNE9jR2xlRVl1QkZpOUloZHo1Z3NQYm4waGsyYlhmRnBBS1F1U2pJNGo0VjcrRE5YdXVUV1pnV0VDV0c5b2VyTEdSbXozNW1zS3dRdC9idVlNd0dRNEZac0tDZHNkaG53Q091QzNmcnVHRHI4eHJLcUxDRHFDYmdvVHNZWHJQdjNRVGZQZU5uMTByb0NQWnRYU2RFQVJFQ2xyRldQdVlKUWdXcUdYVzM0Y2FxTVQxVk1tcEY1MXFWeFNISi9wZ1kydkhoVlRPa3g2Q3lNTHl1VXIwaHJMNmdOMG9XeXJYdlp5S0JJb2NQZ25obXNXaEgrVitITFp4dHM2czRNWDBXOG1odkpLWjR2ZGtrSXpTZVE3bTUxaVpjdzlUMzFhQ0hJYU93dWxPd1h5QWVwZ0Z3VGw0MzFSb3c5UHFnR2tPREJDdk9SaFhMSlM2T3VLMVlJRXRQampSMVNEVzFGWjVzNGJvUFlWWnRIUWdEYWlSN09BeSt0N29YUTZPaFg5OGVRTWk0akpLSUVIcXdTbWxaVDdiU3I3QXBWZEhkcExRNEx3dXFKQjBSMTdrRmR5OFJMVktvdjJuUGhEYU1nMGxBNDRpYVJjZHpSbEJOTXVBei9RMjVtMTdNM0pyQzNRRmRvcGdBTC9CR1k0cndOb1duRDBvZFEycU11amdEQVdieHFZQitUTU80d2QzVjl3SWpyYkhSdGZQRVVwOVkvUGtyc0JydjF3Mjh0YWtOUlF0OWszMTV5SVZJTDBZNEpmVkx2SE5Dek55ZHdHbGNvcytSVjZwVlFPZU9LSWlnUG9STU5ER2NEZHVJK2Nnay9pN21McUtNdmcxS3hzNUtoRjRaS3ZBVDdZTklFZHZxY3BNS0ltbVdFZXg4YUIyV2I2cGxKbmVFd3N5ek5jWnBqS2VDdS83RGxUSmRNZHB1SGRNZ3V5cFg5dERqTXR5bGhEcEZnSnRRSk0wM3VSV29DMCtIb08yWWZzdGZQeUw5a1FhMFp4TVVRREdCSEJQK3NhQ1FlblR2cS9MRXBycFBRaUJIMVV3ZGt2OXZ5R3FndW9aMUx3Z2J1WlBBRmlOaDJpSm5lcVZsS21JcVIxYmhsaFlsYmVuSVRJVWEvMmZxNXN4T05CN0JLZ0ZQQW9ldHo0SVdDREYxVjN2ZWRIVUUvWkN5V25SNEdZK0RPWkhCQkxwa3JlUTc0QkNjeWVkRlROQ1ptdkZmUUV4R2pvR3F1cUsvTVFaNUpZSGlQdHA2MTNLN2hJcWhnQ3c5TGx1dzlXYXBHS2pwYW12YksvdVU2RFZzVTUrUTNKWTRUSCtDbW1hOWdLWjNnNVlmUWVnZmYxQUlaZHFNQXZEbWlqeElNY2daL3F2NmU1NDRJd2pZS2NkUitlUXRiWFdCQXZxdzhIQjJnR0VsZyt6L2MzVmNCY3pBd1pQSG4vUXh2SFBOVXUrN0xKdE9VYmwvcXFINWViTVVuK2pWVHVJbFMxc2IvR0xXOEpzOUt4ODM5WmxRc09lMkgwNEZUNEptUVNMOFcxSzByNXpiblpHVEJ1MXdmVzhOVUUzWmpLa1NoelpPSmgyNDJJYUhudmp2T3ZrWUZYL0duZ0FSZjlJUzk1WWhaamkyeWk4TkVRdDNxTjg0YzVqL0VXemJUYktobE1XRDFXQndKUGNCalB5aWFzUG9uQXpGTmhGT0V5MC9PQ2Fzb1orek1nR0ZBc1JPWVpBSDVmM3lZRytNa0dUWThSOFRNcnlaRjNyYWJNOUE5QlkxOUNnMDg2SFIxa1BTaVlJSkZXWTRkVHBxTGhKM0RLemNDQUw4d2xxYldHcVRoOUFkZ3VyTFhLOUxHR2U5Uk40YXYvRW5TRjVjeWg0aENZYXh1dWNMK3NaSGhPVXIydGRjMk1yWEhoWW1pbEJQZjhiWW9iTXpZRUVZZTJJSDJlcWVubUY0Q3puMnpTZEU1WG9Cbis1TGIxZEFkQXpRaTFWMTdwTzF3NmI3WHVrZnN0N2o3REJoUnp3eDNmZkRYUzUzc21nMU9kbjJhN016cHErbVJxUkhJR2lvVTNCWHR0akJ0M0VDT29hdzh5NE5oSnEvVDhUTVR2SklGRThWemFhVzdoQ3dJV05UV1JKY0R3dFNpalFlV3dXb2EzU1pqQkxkbVRTbmh5RVJJTE5KcXFlQ0FTMGsrQzBqUHk0U0lBYnRwMEFJNU05YlZZczd0d3NIejdCQ2hLdUZTVVFlaVdZK3JiRWxrQzZ0ZzYrWWJLN1h1bnU5K1BRRkVLMUdSMUtTeU43ZmFjbWtJbTBMZ2RLSXhpc2J3MDRjS2x5QWNJZ0swTldTTG1WdU1iSEVSd2V4anRWYkJvemJRcnhNanBCVjV0ZlZDcjBnREZobSt0bUhXbkwrbElsVjZXajJ3TWFSaXBjZ3ZCdDBmekNsS1hSc2V6TkxPL3RYVFJnWEVxVnFNRmdYWHAzVnczaFlVSEoyTThhejdMblYrSDVIdm5sdVpUbW40dDdmcmJoZDNYMjBUbU1YYm9vSGFRdUE5dDQyQmJiZ2xaRDVwcndGSEdRZlZJbGQ2WkxvSCtrWmltWFlsRStRWTdCdVVkejRkTW1IZGJ1Q09RejdXb3d4L3ZQRC9tRFMwcGFkalNjTmpIVjBRUXpIbUtEa0t6VzJiVDRLamo5NkErOFhpcm5CRmJDWU1vMWhuSzBqK2JaVngzWk9qdEs5ejBJeTFwcUZvYXBBZlE5WHFIS0VJZDd3NjVwbVBPSENKaHJaNW5odWh3OHZCWjBrb0FIVE9xcXRIcElmOXBneTE4NnVUdldTQU83aUg1U2ZiMnFzMmExUk1rSkg5Mll0NGdRaTI0WXZ6S0g2Z1ZITVlqbEQzSGh3dC9BNnZpUVlaSjhOMi9zTFRkZ3o2QVd6QkpVbGl1UmdScWxaU042WVFraThsMUl0ejRqTFZTMlBPMW92TlltbzJZNGE5UzlVRmFCTVkzNUdBZDIxN014L252a3Y1c1NiamhRcVJ0TlI0a0Z2UWo0MWo5cy85WlQ2dzdjZWJ6cEljTDFpbk4rc01aWW91cy9tSXBMSEhQVmVEREJHTVl3bmJXa0lSSEw0enhQT0Q5bUxENGhMN0dmSWxOUEpQRFcvcnp2YSs4M29rSXBYTjZxN1JuQkdra0taR1hHQkZTbDAydTN1cFVwRzkzOG5hMm1Ub3JEWldibWt1ZXRUK0l1WXJTVWdWWEdMaG5LcDk2clVWRXplNE53RFFDQmJVbVRwTlFiMHJQQkVDS1J4bGprZ3doQ1NjcVl6MmUzZ2dRMnF1VnRwZzhHVDlmdDJqMnRXNTNzcmlDR1ZoSkdnOXNrS2lxTFlUY085YUVNVzJTT240SVlmelhJNVlRdGJ5Q2l0RXRZemNydzBMeW9GaUhsbDRJVzc2VUJ0Q001U3IzSnN0RmRjNlUrVGtYT3hEU2V1Mno2dmZoS0F0OStJR0dLREdnOTlBWm9TNXFyRm5LdThRK2JpeFVtdjNjKzFJZjk3cDJzOWN5TG9Ob2l3eGVabU8zUmFNUUM3RmxRSXJENzJteHhrVFZ4NldDNVlhRW1sQWNrSm1jd2EvWko1bStWZ0RGSjFod3RFejF3YzArZjdONEtlRng3eEl1N3BLc2NVRVUwSWQ1SmdpelhWTUF4eUFHbmtNUnRSVFNmcjFpMlo3L1k0RlV3M3l0Zy91ZFF5UTR5ZTQ5Z200YWU0OTB2YXNjSWtwQ014WUVzdWIvV0NhOHZqTkh2OHlyOG96Q1BxNDU3cmpIOEl3NVFSUlVzNGZialBSVk56TTFRU3RRamo2bmtZaDgwRm5XcHVaR2VETzl0Ym5kbEhhYXlJZExlT1ZyM2tFSFQxYW1vZkh2SUdLUSs1cmdiTlR4K01xenpaRHRMTkYvWU5vUkp1bm5YUUhkc2gvbDI3WTdIcnFzR1Z1S0lCK1Jnek5VYnVaM0dnMUlpU0dXcDhlUGtqeFJGWElMdlRwVnBkRGtlWlpjVFc4T2FwQjY0L211Rjd3Z0Y5NWRXOXhJRWtURlY4bFlxK3JpcFhFc1N6bFRqNkxIdTdVaG5WZ2pEbkFmMTN5bm5UM0FsK0NWUHpDYVpMNEVFZmc1Tm9lSkdxM3doaDRnbSs0Z3FLVVplVjBDOU9tbFh5YWVJU2JIeHRiN0RoR2t4Rm5KN0Q5SUo5RWF1cUFvdXg4T3B1cGlyY0dpOFF2TDFocTBRSURaR1NtcmFyaWJjNlNVbFJ2VkRhMU43Vzl1cVIybUNKT0tlN1NOdmRaaHUwakxrY25jajhOWkIxV2RqQ1dxeFZBQWJOcmo3VGFsWFZISjl4WldoNVhrRjBET29qNW1HVlhhZmd0c01mV015cnlwT0VKVXYwa2Q4UzRaT1ErNHd0aXdNYUswc0ZaVk1zbjlmYXd4WDFuVTFGYTJyMENqcDBrN1FXK282OUZpZ3VqM2t3UmNjeVNKdVV6dFRZcGpad0U1ZVNMc1g2VS94S1BNMWlyMjY1S1g0QVRjY1AwVXJEY241RXhBL25wYndvTzRVb05jWWZaTHg3UkR3N0FvT1VpcDFUdjh4TzFFY0lIOStiWGhwdEdWbGJ4bTNsUTl2cWdpRnhaYkJWbThyd0RUNXl6MU9Ka21EbGthTkRUL0Z4bnQxMU1QdlRpK1B3eWVXWFVtNjVNTEtndk1JUHBsYzZaNWJaNFlIQ05YNEpiRzlVQjNJY0MwTEE0YTljT0doNzN4MEIwdU54MWRORkVTeVI5M2NuUDNtbVNJaWdpV0hUSm03ZERVWUJXVVJ2Z2JWSCtpTS81ekI5ZDQxNXlQSyswSU9QMU4rejZ4d3g5SU95Y3pwMVYza1lRbUxNY0t5VVJYZzNwSjVDRG5leDgvWUlYWWNsamR3T1VzbUNLcCtRdDRtcGFRNitJQUdHb1haQmc3b0VhdFU5RHhqRmxBSlJWSmdWZm9WTlZaM1o3Y0VNSnE2ZG1MT2ZOclJuTTVzbGJWYnpaRVFtczZTdGpDQmM2RUl3QU96aDZVdHdHbHFQRUZNU0tTU2VsMXRTUzFqc3lNUWFhQkRpWjdhR2JMbVRHeDBMeFhnUEV1dWNXTVZ3eS8wVERMdW9FcGo5Rkk3dG5RM1BnbW9FcHBqMzhXUFZ3a3hpU01WREdkcFFXWFhsajhQVXNaanJNOFJuWmpuaVM5NE9TZ0w3akx1SDE0dGFCVWR4TjJSMjBrb1pjSFRFWDFGSjJETFBnZ2V5NkVTUTltUmhsMGpzSVpOOGYvV3JoY2tseXFOUitFRUdyeVNjcFE3M3dTNGp4SlpaRFVKZ1R6NFJ5NmV2VGFkaXRGaU10WXpXSUQ5VCt0K2UvbzVacFdLeWhNd3c3T0NOV1BsbkprbHM1NG5qcm1aa20vZTl1SWVuNGlhSjBLSEdtNXNVd09vUnk5ZG94ZWhtN1BEamhTODhKNHIvb0g3ZTF2MWFTMklPaDdJNm5ZcmNGL3JhTGxNSEtETTVmV1pGNm80czZodiswSUdOTi9BRmdWd3lMZm9WUWkzNWcyMWxDRGJnZ3RhY29CTTJIM0w5T0FJaU9ZdTc4c3d5aSt1YWlTbktPdmhPOTFSS2lyNmlJZ0t1TzMwVFpUV3R6cVJYVTVxcEtRRXRGT011Zko0QzdScGFXck9MRmpVUDNPdGhPN21GUVl2NnJ2L2sxUFcxT0g2TFNsU1hraHlvU3NseW8vaWNLckdrWFlkWFkwV0RGaGVmaGFVZVpEc21ib3hudEsyaFdaenl4YnlNNDRDdU1taVZtSWtyQldiQ21GTEgwbzUxbGZpM3d5Y3VvRHNQViszWkEvNkFhb3VqZmdEZk5vQ3ZyTlZnS3VQVnNkdTNjNG9TaHZaVnNCMUxPN1FadUJOeUFpYWhLMHJVQXhFQ0NwOUVnRUFmeTZRUXRRb251amI2allrcWg1UUYrVlBkTTJxSHRDaGdwK1lpRVpMbVYxQmFYeDZ2SVBJSGZtR2dSZFVoYW5GbGNLQXQ1ZFRDQzk2VFE0N0lRc0lwYUgvdVhFQVNwWU9ZTHh2dTNMTHRRcVlDbDBhd3RQbE5ZcGJESEpFQ0dtOVpnc0ZMTGxDR3Q4TUgrSytJVVdoUDdEMUNtZ2IraDJnSVZURXdKdmt1VjVGY281aXhYS2VQNDl3bktReUwwc0ZBWTdLZC9ISVJqbXhPTG5tMDIzQTdmcUdZejBuZ2hhNWloK0xyZ3ZLdWh1d3lGcnR1bzZodmx2NnJ0Q2I0TXYyTitJRUlvZ2ZxMitPVGRVb1BCY0M4d0hIRVcxWG5BNm1aK3l1SW1wSjlrN1ZWOTh5YzZoZWlxMzd5MHNaQmJBaExGdi9LYkJ2Z3JUMy92TzAxd2MzZ09mRkRuZkZrbWQ5eUZGcXFodEU1bU5PY0RFdVdUcUlmTWxjQU1Xc1BPTSt6Zzh1c0dPOTgxZ1I3Y3A4aGJ3RC9OWGVaZVh3aW5rVmRSdDdDaXJ0UzlTVkNXK0RnNGZyTjNDU1E1cGpOSjVmdWFybDRkMXFpeTdML2x0S2s0alU5a001UU5YKzYwbjRTckw0UGM5L2JtdHRXbi9ScmpTenh3ZFl6SjlnWjc3ZytsVmk0R2RnN0R5MStSK2V2enBnSFRkSDNITm1tWmtlaTBsd3N5bXVCK3pxWkluMFcxRHhLSGs4Zy9CUSttS1ppcWlLQ2R0TDVzbXJxd21vYXJHZEdhSkREaDBnZGYzdkJEVGdKbUMwaHM2OUJ1Rlg4M1d3Zy92NlJvS0hiTEM1SkhQVnRCakx4d2VHR0dENFRzOEpFN1N1MldKcXk4TGgwM3BGRFBRRDZCdGwzMmpsVzVza3FOVjMySThweTJNYWFEMjFqYi9SUVRDR1BlNWxxRFVtMytGaEQzNlZQTERZWjZYNmxwcCsvZitjMHRPWGZiRk9jUThOUmFHZTB2VUZ5MzRVTjlTR3Qzck9LcmkrNzRzUE9mVGtEYzNEVHhMWStGS2NNYnkzYWh6blhnYVB2eDlpOTVtNnlwSWQ0VDkwUnA5TWpOTEptWU5tV1BsYmNxSHZ6WUQrbk5kS2NxUTNuMnZBTkZTNXExZnh6a1NoUUdVazV5T1ArNUlHWDJHRXMwNXZseHkwSG5SZnFISHJzVEQ5eC9LdnpNQ1NuYWZEaXFXYW5Gc0k1ZmpPeFpsVmFzZGdoeWtTRUh2b2EvMEJzYTJVV3BBNnIyMTZzYVBlWTlGWWYyb3o5bjRWa2lrRXYwUFZldkZkYk5melRteXcra0xpN1RPSEoxbmhmZGdISXVxWUxHSjRsaEh2QjRUcmVLM3cyelF0ell3OTRFNTNvMEw0Si9iTWRtMzVaUHdUVkJOeGp2b2pKakFOYTJxemFoMWxjdFVEc0t3RnhjYlBsTTJmbTlRL3lTY2xqRDlpL0N2Nllab0pmUEQ2ZWdoeHp3bkpjOW5GUlRXelVMcDkyeTRBNVJlRk16bzZtSnBqVk51ekVlb1FIZjFCVG1WZnJkTVVjbk1pNGlXZTZrbGF1MWhtZFhFVDdla05EOEE3ckFReSsxc2IxMHE1eklsbGxsYWdIa3JIRDBzZVp5L0FiYzJvN05pS1FhdlBFbEhjY3FuRzlLS0I3a0NhTTN2VWJvNWpzRk9tOTJRWU51UmZLWjBOdVZ2dHZrMWVldUhlN2JKT3hPT2ZIMkFncFpla2QrRCt5Si84VHgwTjFiWGplcGhpaHlSSFZ1QXdJcHMveDNJMlVwU0hYejlBOEdPQ1VPU1d4cnJlUEVoT0grczc4Q2RidmlaWHhYOEJtK1lwQkNPQmpVaFhycFBnNUYxU0ptRDNqUk55TU8rQmtyNk5sSUVidng3cDRieGZ2bWJQQ1NCaUNYQm5DTFhCcTdNd1I1Q2ZQNlhoNnl0NWQvSUlHbHlsaDVXT1JTckNJVGwydnB5cTR0c3ZFNm1Ec2Q4TWFsaFdUWVJlRVdRNHVHWGdPdkJtbkU1U2t4M2NZbEJWMzdrRVVDdlRPb05pVHFDMGF4R2JMS3dzVUxncnJhOGxGcS83WGlpM1lhc1BpaUswZElqNjN1NkNISG1NdWhSWUorUUt1SHJmMUFjTGd2U1ovNGo4U3ROaFNFbTZrYzRMMWN4Umk0QmhmYjh5bnA2SVRIUlZtUG5wUnBKNld3NGRSWGRxeC9DRjFDQ2UwYkxLOWFXaWxpWTdWbUVRdzBqNS85cTJ5RnBZVlg1VnBjcUtOZkJRVlR0ZTh5U1VrMlZhZGd1eStBYXBmUHBtVndTaWV0UGliWjVWNkliSmpvMUlmbWl6eVhpY2poN2FDdzVGT21XZFpCdUhIVlVFdkMrV3Z1a0UxRXZiUFJTcTNZVHdGOUFROUZQTVJsUk5zbDFjQWt0TmV5NExMbWIwNjBhQjdjZ3lzRnQzOEJqZEZIVkFQbGZRVjhnYWlEQ3hvY2lRdXBoalBzdDNzdzRYVURVbllKN296VWVQWThyMG9UQ3dRVVdpS3QwVkZ6bkhQSWd2WjZ6MEpwQTY3YytZeDV4VUFnRWZxRWFNSmdHYzVvaXE3WWhaZUhWNjh3N3VVb3plTWJRSlZmZTBlWStOLzZxWmlPK2RDc2Q2WGNQSEVNOUxtbWVScklzR0pHK1IzQUQwQzRzRHBGbmZ5OS9VZ2htc21acER0dXcwbmxJWDU0czJBTEVlQlFMV3JPU3FaTk1vM2k4QW9TWVRtKzJQbGNFOStSQnRSZWlHaGhBc0RLY0VzUkl5YjViOVo5bjQ3bHJYZ3FlV0IrTXlTNnVpVGN5QnhUWE44OEJiUy9VL2dLQ0pwZUhkdVVSMHc2c1h0cFE1dm1WVStSbnh1VVdOWGliUi9DT0NPeWlHSU56QkRIYlpTWkpMNVF4U0M0ZkQzVDY5T3ZlYlhlcTJOdTBZcnAyOUFSVFRhUmNVYVc5d2xhRDluZ1FwVWlvRFM1KzdmZk9aa3JSa0MraHBoTERna3BteE94RmtmSWtTQU5tYUl3R2x2aUVxaEFSR2JRRHRYaTZFckhtV2h5VjExWTd4MUtCaU1CR0R3QllpaVpBMFVyOHM0cnFIMXM0a2xpRGVKaEZqd3dBUXBPSjNUaWhNeDBnUGRzWGFvTGlVY3Rid1hEV3ZsR0RWMWRtU0tuZUZ2TndmZzlMbkhqeG5tcUlJVDhDNnNEdlFyclZVNmhvY2pxeTVlVzMyWC84cHVLMkdwdEVEakpVWG8rcVRkdVp2SnBoeTBEWG41YUwwUUdFMnJEazI3MXpDaTVkNTVEck52MS9HY1NKVU1ScStsKzVRL2FVMnlJcUdZOGNNR29qdUFxc0c4bk5ORDdnUW04b2FNWGtaM3JTck9udnlMc3lGK2FYRGpOc0xRNVk3L0N4TTdZUVk1NDB2amxVajJ5QzJRbkFIRGtZNEVFaForTjAzMG1jWXdMU2xIMVZMTTc4Q3VXNjNuMUVJbGpmVVlaT2J2VW1XcWlIVEpDQVZzOGlCK1lRYU1XaEIwZmlyLzQvVndNOU8xNDVLYkdEeExVS3RwYnQ0ZDllVzcxUDBGSjNoV1ZHSlRudHY3dnlOcytJQlh5WU43RlJ6VkhQbkh3b3JuOWV5c1BpSmg0d0NSOGV4ZXR1c0U4ZnRjU20vMnpIN053cFoyTnBiU2lDblRrK1VzVHFUa1gwd1UyRXF5UW0vMGNwK0tPVk85MkJFRjlkSnBNNmpaWWlpMUsvUm9yMHpsZXlsYjdRa0pWUVJCTlpOblg3emVSMVNCcVlZbUtZWWtNYmgzeHJwK2dSa3gydm1Pa1RoUGxoVFNOcFMzbmN4c1h5UWhGdW8yUjZUZEtRRzJaOXd1bTFHMnc3MktXQk9UbnZBc2dwc2pCSlc4ZU9VSzA1WEtoR3g0dzFGV29DdEtneVk3Vk1PUjRRWW9oNDRHc05kMC96Z1U3dWRZVFdISHFjZnhWNGxEWjV0ZGdYSi9JenppSUxweEZ5Nnk3ZkpUSTRzanV0MDlRWG5kbElCK1IyWFUrU1paVjBmWVJMQWg0UVdiTlBmMGQxQ0FBYnJIMG5McHEwdm0raXRHYWpMbmVMZTRMc2NWYWM5MWRlb3RvbTd4MXdBZFI0QU0xR202Z29mTURHMFhYb0xFTHpNQjNOVWpzYitnK1RGMmQxVHJLeWlRTUZnUGU4bVNTUXN1a3EyOXYyUGZRV3liU2xIdlJsb3B4OUdTUnNzdjU1TTZ4NGF0RFJWdzhLUldYYXNvWk5LY2ljWTZxcXJsaHhROXJwQ1J0WUhQTFpuMlpMVjlIUG9oS0crT25ySDl4SGJKZ3c2eGd0VmFvNEpOejFIWDRIZnJGRFJhZnU1T3plMnY3OVNUVWxwK2h2OFJtdlpvWWxQMFk3OWErcXVwOHJkVDdPeXdrN200c3luMUM1QkdKUEZLMDczTEhuRnNiWVJ2V0JNTE5mQ1lDa1hJVG1qN2dySXdCNkFpOVpZbEExVXNueHF3Y3VQOEYyV1FGRzJYSHFzaDkxdmlRUWVhTTZGVzNOT1R0UkIxeXFkV0RVakRjWU5hSHhnNmJnVzM2QmFGMm14NFlkbFc4clFZSTExeWNlQmNuVDNhdGNsZHkxU0VNU1NaVS9vTm9VeEd4U0xzNm1NY0lVVVV4bERyeHpOcXo0WjR6NlhuZm9qUURXZUdZTkJrOU1oaDkvNmN5VFRLNXZLOUFPaVJleUc0L2JUcnNwaC9YU1lyeDRGQmRVSUpzK3M5Q3FqUW9kY0NsR3prRzR5SDIwNUc0NkFPSE41dFdDa1RHVThVMU15endQMnRrcmFhajE0bkZpNUcyS21BdFB4dE0xSUhQeUN6OStNTlBHRTBkalQ4RkFmUDZyUGllVG5iaWpQK0dLVEJ1NmhHL0l6dHhZWFU0Y3ZHT2VEVnB4dDNTN3hleDZVczZSMTRwK1FuaXdyK2x5RWc4cmFwWE5OOHNqUGpKeUhlTW9QS3RoTUNJS0pJR0NGRm5RR1BlcTgwQWFnZlY1MG8yWlh3MmNkNitaZy9oN29uc3BIS0Vzd3ZMR1pCd0tCRmRySzc1WWV3c0xQUTNmUlJ5ay8zTk9IY0tuMWZzVkorRmJYZjRVWlRYbWZVQkxWS0h2UVR2d01LejhBVVJsVGQrNmxxWmxpd3pQMkFaUlpTeGZIY0hDRzVXN0N2MVVtQTZ5dUc5T1RWL2VqcVV6bmJKZHkvbXdXd1ZkdXozZkp1SmY2b1RsRyszNWZORWRLY2poVzc5ZXNPOW9wcEVVSm1TODJPQWt4azNaZ2lWbVBKZWVIbHlsNUhGcGpLdStVVXhwRjNHT3IrOW1uMmxlU0dMOG45Smt5cEdRazRVUlQ1bS9Yc281bFBUR0l2MGs1NENQeFJVaEhsVllVRlR3OWtxbjR5SENOK1pIYkNKT0dnUVZua25XaldGamw1S3M4Y2FGTk12dGthNGFuVm43bFRrT0ZKcllFT1hjWFJNRnJQOEZjbjZiaGlRVGd5ZVlXY2V3NVUrVnZGckxDQmkxN3A0TjBodWpGRzlSQU12OU1XWEhCZXlhM1U1WWlmU1cyczNraVBmaEVEcG9zcEZlSWFLSm5rV3RkeUtDZC9RbitiQlRPOVA0QTNTTmZucDBKMTVETVFHMVhRV0ZidGM1Q1M1R1VqWGg4cU9xNjVQeHpEMUdHNEF2cm1GYUZQRW9WbEZWQmxpc1BUTmdNK3ByK1BMTXcwd0Y1SXB3emhlc2V6cXhmSDQrVkNLYWlKazRJeDNSQjNtc2t0VWZ1cEZBVi9VeWhsRWlQaUczT0R5Q2tKbUJuODN2Rks2OWhDNDJMZFFURzEvSlpiZW9QSzdOM3NKOEwvNmp6TVlsUTBPT1J3bUpSQVZGVUdwTE1QZmVGbTVuTVUvRk9LUHRHVzJoOFRlNXVzbGFta3NKMU8rNWk2MEF2ZjlIZ2lZSXdIbVpQTnBJcFRsOS9TT2dwZXY5cEs1ckVWeWx0SGJDTFdla0dEaU53b1RLRFZMN3NGSThGd2VzS29kRk4veExYb0xFRmNyTFM4cTlVZUJVMmlZSzdQeEQ2QWw5MjYxY0lUT25pR1JmQmdkby9pVWlBcCtvRmZJc2wrb1NDbStOSU5DY0xwdldGYXIrV0ZBTHZpa2RuVUV4MzNiSHh6cWxGUFMyWmNPTHhmV3poZGFYWEpsL3NTUzNXYlY1OWtLV0NKcTBtQmt3dGt4YkZkSS9TU2JIdkJGcmtNcGIwTWRzYWNaL0ZGRWdRd0UzYUdOREF4STJIaFJkYS90Z0FxNjV0c0VjQWxYR1ZJb1l4dS83cFJvVXdZeG5reE1ocEpwVFYwSVVCZDhNSVNENnhkRGphTE95M0VNWWF4VURFamY3NndJS0l2S0dpUzVMQUxJTCtCRSt3S0FnSWo5TVM2cGdnUVdLcXpjWDJSWW51SUJzaUt0Zm0wMVJaTDlnUHFBT0xrMkg2QklQbTFqWm9vSUhtVERzZmlPZFJPa3pDNXVkenN2NHh5b0hTYXRuOHdUZXB6Z0VqaGlwaTFhQzkvaUw3Vi82aG51OUhFOFBMOVgxYTNkaFY3Q1htOW5vRjhjZ2ZJOUUvMTJndTE0cGUxakNhR0wrYkt4eERIRHdncXBYbU1oNzB5QS9taVd4WWV4cExTdGR3Nm9UQXBzZWVkNWtsRXhzRHBvOGEzS2NvdThDcGd5QURNdTByUTg1Vm1ScGpudGxXTnBYQUhOYnp2aVpWRGQ0OXZvU1FMbG53cVgxdEhOZlNPaUJxVEFobDRVZFRHMTJIU3NPUWRDU0psOWF3UzVDYWhXUU5uejVWeC8vVi9DWDFYWWhNNWxuWGdRMkxxRUN3UlV3YmNTbmZMaTJ2cS9rZ1pGYi9wSVBTL0VaeFlUQ2Jwa0VHRkc3VXZyREd0M0FrTENEQ2VURlhmS2htSUoxNXBZSkNzZnVWeS8rZnNQVnlTekhnMTRXeXFXR09ZSS9WQS84ZmozSGttcFc3Z2JZb3ZwaW5jR2dPSlpNY0VrcDY0UXF1UnlTVkhUR2pDUm10MDJwVUh4NS9BS2pMbEFCcWFLZ2hKZXpXYWxlektSekhFS0VnV3UvNTNmZVQ2NWdQMFQyUlR5d2J5ZFd2WkRDK0Rzc1VsYWRPSkVSekY2ZFlMbDBwRUFDVEtVNGFWN3FPV0ZLN3BrTFVBSXRXTXNHcnFTRnVoaGF3U0IvOUk3UlhmdUYwNzBxRzJnV3F5b2JpMy9iYy83RHQwNEtBR2xlSlpCRjk4WVRrbEJkY3RzeUFwelM4b1pIcXBKSXFPTWhtcDZYMTlYaEVqb3F0TS9mN0hHSkV3NUZUSFRJQm9IVXR5RXBhYjJNMTNHdDBaRkQ0SEJSQXdsRmlNQzR1U1h2L05LWjJLdjVsaWhYZnZwVGU4clpzcERkQTJRRmRMUElLWWRpZXhjYm40UUFtZWRmZlpTRmhDRGxlMmZ5My84aU5VeUdaSWkyYUo4L1dmYk9rVXhRb0ZlYzdQa210eERvYkMvbmt6VlRjZXV5Y3RNdzZ1d1pjTzZCWUE0Q2ZYZlBpZ0VLR2lROXZBOUgvdTJoUmRySzdPMnNENUR0Uko2OFZYaGFWR2ZnVGdKY2V1OHlielBnRTZHVmpIRjkxaUIwK1NiRHRPMzkzTWk0MTR5UHlFRTNTMmUxMlVhakVqNHpaMVo4K3FrQmQ1ZkZwVGR4Tmc2MEIxSXM3VVpDRFlQa3dETVVuVmp2V2VKVThrSTd5SWQ5clVzbTNCWmJLaHl6bU5zWHl4RlJ4VzVzRzhHdG5FSGNlODFsNEE3YVhheENjem82c2F2VTA1NE0yTzZ4cUpTL2JBUWo3aGVvdFRRbWoxVG1LVWJQTVFjNldSVXlIVTVna0pvK3p0NjlsNTd3bVVubW5waVZhNlkzME1CWnJ0VE11MmRNa2hOWEkyVm5hRklra2JaKzZMekRBQ2hpV3ZENnc0bVMzUUVSK3lzajNncnVEMnJQODVHZVRqZG5TbUNhVG1NODVjbnZPY0gxVEp6Tng2OFhFd0tSRHF3MHFzZGdkK2hkaVk0OHY0dUpoMjUzR0tMUEpyRVFpUVZaVEFOb01lSEt1RUl2aFZVQjJBWkY2RG84RkJPUUE4cE5zN0dySFcxcWsvQmZ1aDZtampQV3hVT0tWVURYek5sTUNtVHBVTmloZzhXSWllSFp0ejJibjRtaUpLLzQ5UEs1Z3RMcjBYMGJ0d1Aya2UwamZCSlJreWJuaXBieTI2WEFSN2hGSWM2a1paTGtreHJ0dmRRWDNWaWFCZWg4QWxVTEFwY0QvcW1oUEJmQ2NiL0JCOGRYcCtuUkRuM2xPLzkrd3Y5RDRya2NpM2I5M3kyNk1TT09SbVQ5ODNZM1Z0b09jaXlVbVJWaThoTkloa2lPOGZ3djczYmFxUEFScUJDZGNnZ0lFMks5YVh5S09GdWg5N3lFbzQ4a09aYVJMTkhQM2NDYi9PZ2sydmNQQkRFdE1DTFRNck1JNEZxelV0cEl5eUVFRjdKTnVYOTBNNnkyZjhXcEtFdHpwM21ObTg3K0lGUkttSmhYbjFaVmZWd0VVREFmVlY0RTRvZXMrdmlEdGZPVGVaczIvdk1jSTZYbVJ5QitZMzFSUGk1R0hHeDJVZUhzRDdvblJpVnZIdUZRSXdKN1NtQllCd3JhU05Hdyt3ZC9rcERFazh5WFowVFNoUUZlNldaVEhSTy9jQWdOK2hiQWdNYVc5QWxmZk10VzBUWjBjU3k2RjdtbWpxYmRSNFpyWTNucjZjWllFaUsyRFdVWFI1L201K0pQQUlwdTRvSjFVV3YzVnl4QllZcWtJWnFxbUluUVY2ejAwWWVOV3Q0NHVVdWpmUjN4eEV5TU1EdUp1aVlHTlZwc25QS2sybC82b3pKUGJ0SVEzR2w4NmRFTEZjNnQ5VE4yT2IyYUZGbTBLb3BnR1Y5YTFrdXdWZ1dETE9ldVY3YklYM1pUT1lScXl0NmM3dlpmQjR3bGU2ZXc2Tko4UHpUL2dVZnhYd3g5RFpMcGo4cWlGSDBxNTI5Snh3VE93Q2g1cFBqclh6ZUp2VFpwbUVsSzgyYVJ0QmFJNFB4MGc3b2srbi96djIrYjE4UzQ4WjRtM3gzWmVnSzJsMHNDZTR0SWhPZXJXM3BHUk5qWUVRd2E1dUhVdVJGMnR1NkJrclhZSEYzcDMzSXNFOVN6c2VBcVBCWjNsc2NMSHk3dDJ6NUEzSGs1UCtuQmFzNUJTVjZBVjdJQ1l4WU95LzE4YTU1NEgrQ1d3MGxGdHpwL3FlSnZGL0NEL0VjblVKQUhmaHdOUkRFM1k3cFJXcUFxMURDajF1cGhMQzZkOFBucHgrcE00TWxJUHBQV1dFMkJHeEZVT0xaZEpJVlFsTlZQOWRBNUFCd0Ivc09nZlQwT1NFNkhVK1NyZDFscnpVUGdNVGF0bmFQQjlmTWhEWWVPWFRabVp2SDlET1pKcmNWZm5zNGM3eFliT3IweW8xYlN0YmhsN3VRYU5JRDQ2T1kzQUhraW9mbHhRM3ZNME5vR3V5dmpkd0VCdjVLNm1PR0hhaGRHdWtTWTJ3TmZmUDJtcjcxU0U3RVJaSlpVZFZNWERaTUZaWGx2SDFURWI2b3AwN0pURDNOc3pPaEtNYW1FWlhSem9BVWV3RUpGYjhEb3U0VEt1bTBjYVZvTzR4bHE0Y1c2aDZjQW5pRUtYNDNKM0RqRE1VUUxOQUlmaGplVUFWNUw3eDE4em5tc2NhTHdzY2p5aXp1WW1hSVdpV1J3OUtYVm52VWJyMEJ5dXRCcUZNdDgrcStLTndxV2s3ZmdIbm53eTQ2UXFKalp1dU5NdFliWkNWRkduTGRSZkt6UFcvRXQzVEFlMDVjV0dxY0krZ1JSeU5IR1k2Z2dQRC8vWFVUUktNL1NUWUhNUWlEVW9tYmxDNDNWV2w1VVFIMnZrMUEvSHFWRk9zakhQeUthOFpWVzJlS2xSOVVFcGJYVWQ0eGc0bDFrTmFNUDlTT0ZTcVZKaWcvTjVhcTRqQ3krQ1R1TTNxMVNpOHlraTBoa0RJR1hKOE9YSkVFdndyY0VBUFovS0dYRXB0VThBQnFlYmNRbDE3bzFITnVBQ1dTcFRBd2w5MU5XWHV6RVFrOUt2bHMrdG5JWC9WK2ZiYllKWHk5M2VwNWZSQXdtMTBhbnk5K1hhSDE3VTBVNEs3MnZMSTJIVDhnSGx1VTd2S0c1ZGtSdHF5amxZWVh0bU5PRURWUitnRUZLcTFZbVkxUEdYRjl4ckVNcm55OTYvcGdiWTlaQ2lSdkkyTG04ZHpYUDhrMEV0djB2d0xNZVVtalY3ckxHKy9yZWRLUWg3T3ZuSGgzOXU2NCtEVzk1akdJTXlXUXVuRmM4TWcxSTJRMEwra1BPemN5R2VCS3FVSmhrWG16SHFNaXFGaXRpNS9TTmNQNVRrWm5xcWdqeVBTV1ZOM2hnTXhNNVFtNnJVMkhLeVJqYjJiRm9mcFNLWEg4ZW13QW1mbFFMS2Ivbkl1WXVqZW5DbHdDTEk0L2JKL0loTkVPQ096SG5SZkJNNFpTeXgrZmVsTzliVkU4TXZmTEtKeHRQVkUxRysweDYrRjcxeEF0Q1BYcGlpZW9la0ZnelZjc2RjMENqTkFuUS9aTnIzM1ZtcVVBdmFTUEJuUGxvaEs3NmwwWmx0OVJUODFONk01UWVnTE03WnJRczZMaE1TQ3pDcmJvZ0FRaTVIb24yMENOUzZ5RUptQnhySTR4Mlh4a1VUOXA0czZob3V3YkozcVNDVkFWTmUvbGFRa0FjaEszdjUvOTlRK3RiNVJEbGRrMlpGazdVOU4yai9DTWZXY3NJa2tPZm9MRUhLdUNUMDUrNXQybEdSMmpOV0JZVXpxQ2xiZnIyU2Y5WkpvbE9nbGlSQjBqY3B5WmkvcDZqT2lKM01JU3drNGRCVFRBN210emhzdjloZzMvekgwdzN0ZEptU0M0RjZxTzNCbFhjVit6TVF3OWF2bnZvaFJaRitDM2FxWTZXcWZ5MzcrQkc0aVFIb2p1VTMxNzVJWWI3NUR3ZC9ucVdtWVc1aDlXSG90aXR6MXBBS2U0K3BhSHp0bnZwRHVqVWRHdnFvalhZdm1ENERyQ3dRVGNPZzJVWUxZMDAvbk5kZGRTK040YWYwYVpCYUo0aHR5Y1RxZloyWHNXV2E2L2lhSkwvWFB4WTMrYm5CVjI2YmtndFBubldwY1VhSk1UNGVNNFRzSTRkRkJwb2YvYW92eDQ5RjlPcEJWSEEraktUYTBWSmZrMEl4WlZ2T3ViaXNBeW1SVXE2bk40QjlFK0NJcFZHVGd2U3BJK2pRWFUxck1ZbE5UeXBsUmtJRGQvS1dMZWZhcVFmUlRwSERDa0Mwbi9KU0k1VTFlVmxZNkdhVG9Nc0pyS3lkV0crNHRlUmJELzU5ZGRvNDdxd0hXaDZMN1hFRzV1dVg1N3BkM0xWSU5tRjg2Wko4QzFPRWZSK2MyUG9WM2NMWXFpbkJKQkZhVUlGZUtIU3FveWl4RkNzMnlhRGRQb3N1T0EwQzkyL3ZJNXFKZUZPWHJ3QVY3NG9FaVRab3Y1cWMzRWhTd2xEdFpoR3pPQXh2REpKdnMrUndmMkFHRzJuWVpPdnB6ekhHY21ReFBROUtMTi9RTENDZzljRzdnSEVSZlJKdXU3U3RiYnFTWWlkTkhBcEVoTDUyWW9LRlo4K0tDSjlWTExnbzIxanJraG1kME9CZEFUVC8zSXplTWhVZWYyenkrNXNnbVk2Qmw1bjBoOHR0bkR1VkpyQjZNTkQ5UEtmTFBKeGVwU0Q5ZHpEZ2NxN1hKcVhqTktNcFd2MXBCTjkwQnJkVmNNamdjVC9QUm5TR1BIbTdrUFFDbkRaVHR0aEpVM1FQamdlUW15SXVGeThoODhvU2IxMDlNSG5UOGVQNVpTZUwzSzNrTzlKK1VNOW5RWjVwRG0wVVdRelVvQUdSUGh1N0tlWkFpYjFmcTJuNkY2TDk4SjZLZVVsVWJWRWJSQml2N1hVZWtweENjdkdEZXNRYlJIdXlkV2xxdER5NVk5OFZvWTZOTmlvbHA3WHk0bUtzSVg5andvLzZRc3gxNjVTYzN2QnJHREtnbUZPL09yRE5GM1ZjR1hhU25qWE5OblA4b2JEY091eTZKNVEwUGdPZ0hrampCSVNPMk5oNXVQdHpTYlc0VWYrb2lianNFOTZCSHNjcXlNOWdReGludzN1eTJQakxSQzYzRjRPYlB3N1J3NDBwN21lNlRVekZ0bGFVRUUrWE9TT21nNDNXbDBWNmlFVkJqRWhpVWhWeENiUWFWRW1VV1pPR3FUREVSdmJGbUhwWDZjeDJZcUIySFhnNGdadWVrc0ZaRmlLck0wclVmaTQrQUZpRmV0SHMyb3FDZXVlTFJ0aGU3aWdrOGxqSEpaZnU4bWJvNk01RysxNU9tSnQzVHJLaHo1enFnMk1RTnE0VWcyTW8yZEJYRVcrRWVQNHcwS1NzOWdsS295Z1BFVnl6aUJaMmwzNHQyY3c1aVVJQWhaSEdCcENuK05DaWYwSFBKMmh0eGhSTVhyS3c0WkI5VXEvVkQ5aVE4M2JYYU1uTmhYUmdyWnFGdHpzWTkwM0x2WGppSWhlc2pCTXV1ZWh6aGJ4cE1EMjdqWEk3dGhyVXBwemhXQllMWlZ0L1dNRmlISmFxTXZrcXZieFFBSXEyeldDUGF3SGQ2U0pKVWZ5SDVhSjhaUHRGbmNkNnROSEhTOHFmenkzQkJwTGtNMUxRdWVMQXZRSVlvd1lsOUtWNXBRWEF2eUlZa3JlU1ZYMEUyTnpTdDNhTllFT0p1Sm9vb2xUcjBsbGZLMmgxZU8rQjhoVW1mbEVzRFhlaG0vYVFvd2JPZnA5TEtvd0lZZUJsZGhtakR3V0tZL2t2UDVwd2VlTFNEaG51VWgyWmIzbjJxMSs3RWk4ejI3L1ZHTW5rY2d1alBnVVp3dzVMNmZPaUhWaGVPZnRhWFFiTnZsMXplbWduSDlrSkNzeWZkZkY1UlR6eEI2dzlyS3k2VlhEM3p6enRaU2VqMjVQYkpTelpSV2lYQksrMlVvQzVaUXFtR2R3aEViL1FFcHk0ZWdqNW5lTXB2UFpXNTF1c3R3Y2VvMEtyOWlMUlczMFdVdFpqamcyQXNkMlpHclB6TzBqY3Mwa2t3Wmlyb002aU1mOXovRTNlaXFBaERMeWJDNlBEd2pCc3AvalV5N0tpZHN0bGtIbkloN05ucmkwdk5XdnR5RmtEVnd5S0FFT2grRHFteFc5dHJDUi93c1o1cjd3eUwrVWdNcEZRWlZORkNTYUtoaFVoU28wWUxpbjB1SXBSNkRqaEdJZEFLQVlTc0pBb3VPd3k5S3FRYVRHeU9JcDhySkxBNXVjaTlydzZmVktzNFJhN2dZVDljakJnQWs4ZXozV0czRUlvbkFVeThRVkNtS0FlT0N6eDA1MXZVNm9XQ1VIU094VUUxVW0zc2lFWkVvSmNnWXl5eDlMcXpsZVV5YnY1Wk0xWnJFUHZXaXNtUWFiaS96T0pTR1lTa2lodHFqSkxEekRqNDhOdVFoeXprM0owZVZsTEg4bzJsTzd0RU1nNmMwZTRJWHdscjRBaW45UEx1VDFpODM0UWQ0dXdwT2dJQ00ySXFOZ3B2TjBRaHNocVJYVWkxRXBGcFJWUzlCNHVsTXdrSSt0cllteGxpVGp1Z1Ntc2RNVEpiRVpSQXNBNzFWWTd3NGtacUZIYWwyTlhJajQ1c1dyd1M1YlBJdEdJcFVBWlpwUkhrallGOVNXMTdNTUppcVV1NW9Dc3h3VUNmTlc2SFJEK1BreSsyTE5rTW9SYzdtajkwczlGNWhTMUF2UjErdndIUkwwblVLOFVEN3NLUTNxaThNSVVVRm1MUXIrWEFVRDNralZtZ1FWbk50ZDY3UVR2TkFxR3V6VnpXVFlsL0FSa3RiamR2ZTUxTHErRWlFYmFIYzJVdWY3V1dJclZKTG56aUpkMVNLYm1JeFlKS0JXN1AzTG1QSm9LcGpxYnF5R0xXOWcyQU4vTnlESWp1cVNUN2RUazBveVk4WkhaaXJDYmM0YXZrWnp6TENldFBHK1c2UTJZdkdPSWk2V2JBbm9FUFA2eVJxbjNvSUo4MitvUU1hUnlYOEtXMGVHQjNzMGZNelBIckltRGRCaTFDWWxSL3hKNVlyQmpGQ1l5YTlOSngrU0IzbXExaGtIN2NUYUg1S2I0VGpRQW1RVmJDR0d2NEtvekZ2WnZBN0Yra2JxOE9mNzRhMHhZUW5PbVExbWRkWlJXSkMzWGtKZ0hOWGl2czB6Z3Vhc0RVQURMRVlBc2V0Q09wczIzVGg2cXdIQ0R2V0dRdDRpNFFvTnRJbTBIVzNJalZKdFR2UHdhWndRcXdrYXZzdFBwNzd5YWdmaDcrMW1STERmRXJHWlpwM0NsUi9mQmpOL1c4V21YelZQM2NBYlg2OGsrOC9EWUlGUWFZaFpYZGh5UXVoVzZHTVFkMTFEZHdtZUpjNE1wV2FZczk5V1lrNUYwQ1VWWUhrZWdhbTE4dXpibldNK05CSEVuTnRGZ05kRzFSNmc4aGtVVldKU1FjSjlDK1BHb0ZwRHVQU1Q4R3RpMGpWbkpkL3ZXbFpJTXhWVXhwWExtRXJKNkxrbGU1TlI2SGJjRTB1ZHk3ci9TdGY2QzBLR294OHJMazJ1RDBIYUdxSVo5S0V6bGx3bEZMNlc2U2tJKzVScEk2bzNHQjNSc3pEQldoR3YrMW0xaHVQeUdINGdjMmJxeFZiSXdsRGx0b3BCUSs1MUhjTmFhTWRqLzB5T2dhQkVlc3Q4TmpIeFRXUUZBWldVWDBOK0JIS0JFUGgwTk1Wc205aVNsUkVLS2tGbTEwc0NpM2YrM05qY1g3Zmp1cU5YVlVIdTloOTF4MHczUERzb1dIdHFHVmV4M3ZQajNRcGR3dWd4TE56SDJFVHphUGxsRlRnbXc3QUFweXZ6Z2lKbFpGS2pFZ2dIUVZCUnN5Q0JBL082RXJ2MW5EM05YUkNLaForMjZyRjVORElIOUlrNnM0Z2pBU05wMjNZSVR5UHd3ZzZDQ1hsaG9QQ3RRTVo4Wk5Bb09JZ3JmaUQvVTJSdExEUzVlVTBRa0krWDd1aGRwdDdtMitjNkhNcU9uVXZjQU9mRzBQTjZhTVBKZmdRcVJxbU5WZXR6c1IrdEpoZ3YvWkZjaGtlU2Vkemp5a25ScFZLek5VbGRVQVdMbFBLTHBKRnNOWmVxYkJPemFmWVZ5QnVLYmFtQkhybi9DbUFiZkw2QVJkRHIrTUJiTjR2THgwaDYrNEI5eG1vUFpMSUpSOTl6SFE1b1FaSnljU3RLeTQ1TkgrQzdLdE1sanhVSTlIM3UrTHFhNVhsTTA1VmlmeEpnUGhUancwLytoM0c0dHI2UG9BWGN6Rm5pTFNKWjV4ano4T1FPKzFjcWoyUml4QTdVRzgveXd3aDdwamJXM21KNXlpOFFpV1gzODg5UW1iRndKV0NUU1pYdSt2ZmxWcXJXblJTMmtyY0tKYkdna1lhamMxUzlvVy9IeTFSb2tvNGpqMzIrL0VXSlQySDRqZFVrZGs0M0QwdFVIdk5vWnhJS0dvZlpQOFJPVFZtbnN5S3huUTg1OWxTUFVlVTJKenAwbnM5eWM0c3g2MlM3U1VDMCtaazlPdnp4RGJNZW45WWVYbkNNL2pHYmw3K3NmbTE3aGx4VFcxZmJiY2lVdDhLeXJSSFZHSXFZQThMZmV4a0pwTHN0TDRDWVVxNFdidll6RUlnQnFEU0hmdnJEbGRDWGJZM0w3ZUhCOHZ5UE16alVLT0x4Yy9xNWF1OUxyYmx5RWlkOHkwOUV1dU85KzN3YkswQ2R5RWh3d2FRa3lFbU5zNU0raERrVjBZcWRJTUZiZWxoTkFnREN0VjF5Q2djUmF2NUVhOUpUbHBnZDM0c3NxZXRnaEpLY011MFp2YStXWWhtaUtXNVoxNXFpMDRoT1ZqK2JuNGFUR3dzUlFhc0t1T1ZaSWVHZnpmVzc2eSt5d1pFKytadGFFbVdGT3RvYWo4SUhTOHJtVzRUNXZwSjllMnRsSFkzM1R6aG9MRG9YVk0xWklaZ0d5dHFqM0EvelR1Z1BCUnZlNEJ1dnJETndub2FrUjg5c1UyckF4Y2JOTnlpMmpRb0JDZzhhSENnRmd2Sk9aNkpWQzZXMFptcHZkaGdpKzcvOE1pRVNFTXVwUkZ3NWlnQmdCT1Ara0JKK29IenpqZ1FZYUx5S1VVV25xMTVZMzUxU1o1cUxuZEtKNUloWE8reko0Nkh1MW9oU3NVRUV0Y3VVQjRUYXAvZDhPWjBVKzhOZFlaWUJrUlhXR0tnV3NEdzNuN2F5VjVqQXVmWU43clIrSDNySVRtazVkN1FZVkJuNC94QkY2ZnR2Zkk3bkI1S3Y4a1VYMmQ2TDVOdG1WZVQxSDNpUlI3akZOeWhKb3pJYUNYQ2wySEhTWk5zNWtXNEFrV3pQU1padTAvYnQ3Ui9vNE9hSDNSTG93MG5uY1IrcGREckdTQ3NvTU9zc2NwbG1SaldCZ09vMjdXajdDK0xnTTJWaUtReDFBWEFsNFdoQnNiOTJaUFJXcEJpdDBZS1R2b24vZWtCYXJ1c0hsdXlmeE9JUHNhK1VkYWpSRmxWRWRvL001dXUwZ1FwRm9zbGp2YmxQVXBxSzNYaVl1cnIyNWx5SW4xREVUdUlsUlgxUEx5VzhwVy9FT3hNdkVlOWVuRVA4bk1BMWJkZ3gzc052RkZOTzNBZDZoYnYzMlBMc0V6eWJUSjdjWVBncm1YMktEUE9Kazl3aDlQZUdUakdiRFBteXlVQWdLbTFMWHJ3RWQ1L2x1NkFjeEVqbWVVNElZUWdpZUlJa1JkVDBteENyWDQ3QmYrSGJlYXZMNHZPWVRlTGdBTmlSclo4eXhYWmNOVlIxNFMxOEE3NXRLMnRUTndFMGRBVXM1ajlZRXZROVA5eExxbUlTR3RnS0d5M2I1WkhTTllBSWdNRFRoc3lGWjFaa3FJeTc4RTFUV2xudkNvTHQ4TEpmWlcvOEFrOURINE1FSXpRY2dnSEs1MmF4NXdyNkVQQWtJcDVqNy9HVmYwZlJOT1hSMEJ6aXVYZHhaV3dHVE83OXNSVnBxMzJtUnNwS1ZWRXRiZ29LVnJKc2JRc3dQd0E1eG9CbE53U0FrenQ4eGRSOW4wOVZoSVV6cGNGMjBockUveERTODdONHdrRHZpU1VuanFiclJqbU9KR1M1Y0dMbjNjU283Y1ZsaHQxQ243L1VudGh3dFVRNUlQbmFwRE95bXBFTUhXYVdUTTQ3L1RXaWx2UUVIeW5iZXdqR3kxblRQZ0EwV0dmYVc5aGVOcXdWakR6TC9Eb3l0SHVLTHNkUkdITUNybU54K2dGcVJKNjFmMis2bkdLMy9xeExScUtVbCtWL3A5dStmMk8wWmJ4d0wzWk1XdDA4dXZvMXlWTzJaM0ZLaTA4N3BTYjlIWFRZQXQ1MmwxZSsveXJNRit4N0FBOHRudGFvS0ltbll5dW9HMVk2NmJ6WTZzczlQRWVteWZBc3VXdmlGM2hQWm9sTWxzTitiOThNT2pMNXU4V1AwMVNVRThiZjhyeCtSR09mZTZmaUVMODNLcUhkRU9kN2NKRDhZSm45Nk8yK05kS3MxUnZ3NURiM3A1aGxiTjNJZDNNV25QUDhML05Tb1J4d0tSQVh0WTVSSW5CQ3hKWTdzakN2c2MyY01TeENPZ1ROa2hJUnlsVFpaa05PS1dTOVdaK1RrS0FaS3RWNjhvdXdHck90Qm5PR2s4SzhHNW9RbGxEUXhUNHZObDJBSzNPT3cwVitFMFE5SHFhc3IxclAzTEMyZmpsV2ZVYXNrZzhVSWZ0cTRHNm5iSEtkUjNlNWM5a0JqRkc0aXRlY3dkWUlnMFppNmo4dkdoYkY3R2lZbWV6aWlyMXptRFhJOVV6Q0hKRmc4RVByUXA0Y3l3QU85c3FkaVJ5R3Q4RVJ5WGY3ampFaEUyU0NZVTJUSzYyeS93UjFEcG1yek00dVF1TXhwNS9CbkVWQnNCUHVTVWIza0k3T1BZWHE2c25hSys3ZUNEeTFzUjBERmsxSWdIbWlmeUorZ3VLT3lVWFNhcDJjRmRyVnRHOENvTDdzaENnckMxRUh1RzR6TWh4aUgrdmErb3pyWGdvMktLcTBqLzhwcXgrdWQ0L1o5S1lsdm1hR2l1OURSSnZ5UTBhNlNNZUl6cHcvTGllWG1NVnNlbmd0bkdZRnFCYUt3YnU1cmFPZGgyeVEzTDM3TUcrYm1CbVpvZmlJL1A1bnIrY0FEdzdrcmdSUHVrdHVka3QrUitJWHl5b29OUkhFcGFyR1J5STBXZ29uWWlSV2dqSkNzVzZjL1d3VDRhNVM1aHdYY0JremRLT3RUTHVxOXBhOUdFcDdieVBJckVaUEsyZi9TcENxcDhMQVcxRTRMNU5CYXNCWkhnWFhWemRQQUYwR0E1YW9LUjVER2xTUTA1L1hDWHZPc2p6SjVSUm9qQ1Q3dmJIVFA0YWIrcUE4VE5ZbEIyZThkZnR2OEtETzV0WFEwL2UyZlJEUGJ3YStaUGtYc0p1SnltQzh2Mno2cElkZUVIaU9pWmJEbzN3cUtxQ29ZZm5ZR2xpVFR6UGZwL3h1dCtzSllQaGdrN3p5ZVhsV1Vsb3A4WnhET3VMUC9DYWZaU1NJRU05M0E4OFJDc0V4OVk2WTlaRkdKUzFvbVlMN2taOWpNR2VmR0pBTmJqbTlGV1dCaFN4UG5QNUhVSHZDV2ZGb3RwWklBajl6aXVFL255ckRVTmg1RCtXcEc2VkJhaUdPanVzU1N4a1p3QkFnZU0rdUNZamU0dGdOcys3RHRwZjZTZGIxS2ZuMER3S0ZkZDN1K3hlU2lkcUlDT0lJUlRRaEpISENQK3VrSjJ2b0hrbWZ3WXZGWG54VjllRGczMGRTT0VSdVNhb29WMWc5UDc1aVdWVUtFc0s2dHAwSDRzWG1WUEJPeUQ0VkQvTGtZTE8xYTdLUXdnMTZEMUNnVmdrZ0E0ZjNsYng5SmZaOHhvU0NzSVdxT2w4ei9MTHN0MGE2UUlpZDY3Q2tPdmlBeVlvOW5rRFV1WHZlZGRuVWwwcDlTMG5uaEg3M1RudTBGU1ZtT0ozcCtBdHRYOGRFSWZxMG9TMUFLQUMydFZBa2RqUkc1Nm1jc09xa2J4VzVJNEhhdnZtK1BORW9CcmExMFZBRnFkOHRCZEFXbnpGa0Y3TFZpY2svOVFOMlRacVlXVi9OaDR6ai9MZ3VRbzFIczVITVVld0Nzc3h3cTNiNlJsRUNNN1RpaWM0WnN0YWp4UFBqSHRmSEZzcHJKZWhwaEJudnRwMlpVQitJTWZsRnY5Ry9GdHIwMU5XNnZsN3J3RmptUDVNMVdHQ3J5U05MTVZZR0lndW1mdm1EOFQ4Yjg4dkpsY0FsOW9ZV3Yrd1B3NnhCckhCTmx1ZExiZEVWRU5jQzRzYVBMK3huaitWQXJOL1hoOEZ6N3RnL0NaSFlFV05ZT2ZPS0FPTndCNngxQU9IUHF6Z3JDZFQ0emFlWjlzTGhDdlh2M2NUQ241Z2J4bDhWc1RBOExhLythdmJadWdJMVRYazFVK2wvY2s1UERrd2lkQ3FJa1N0c3B0bFNaUStsY3JsclI2SmVOZkNiL0JncjlLTURaL01Na3FFejI5VXZ6RHJ4VHBmUlZqMm02TGVnODdIcm5UaHAxZE4rYXR6N1RhNkpiUkxxUUFHZUdrRWJpQWtGbmlaTlFud2xOc0ovbUlxRzU1SXVBY3ZDazJRWkN4N1IxRzNQOVErMDZVV25Rd29TMklObmtGOW9oL1Z5Z25UVGVHalFYTlhHaWVNZk5QenFmb3F6eTlJaU9YVHM2MmF5VEllMDVKNDNvWUR0SkFJVDNvRS9EVjF5NWVPcTBKaHZZSlR5MW5BZGxKOEJId0g5dVRCelBYZ0hpNVB3dUNuZ3duRjljbzB5N0FMbHF0U3RSWExTeHlTSVVhUjZ1dnI4M1BSd01XMXFBZUZ6bE5VMFB3T3NETkNoWTI3VnQ2cmdodUk3bU9sU1VxR3hrRSszMXBVWGNKcjlYd0VBbHJJaDNYNW1FTHdJTVMxZGdUNXEwUGl6ZVlXdmtmTWwvVkVJeGtKbGlLOXk4UUVMQXFTVkl1M01ocmdqK2dqa3BuRlE0QUlwOFJHN2NEOFprRW1pbFhrMDE4TTZ4TjB2WW0vVVZyU3ZWK3I3QlNBVnhVY2ZqUVhnSDdsMlJCQ0pmcHRNUmRGMUZrYkwxUjc2OXhueUt2VVdvZlhVZ2VXaGxidy9pTHNjRTZFL2V3MEl5T0RHVlVFcXdUK0ZXM0o0YW55b2pVUnBwTnZIczZWL2xMN29qbUVrYlpnOU5uVnJSd0MvR1JZMjd5QUl0WUx6MHRUa0ppSU9ZbjdxeEF3QXBuckRjWGlHZ0g5eEdpbkIzWGhYZU03T3A4aWdNZ1pwOXFZY0lRTzhLWHpnNVpTOGVtUVJvZUcyU3g2Z3I2Z2d5SUhqRll3YTlEMzJNd0E0SnhJRkRiYmVaZUhkd1JLaFovaWFHVzZ0RjQvZE96bzd0dTFaQ0I3T1EzVVlQZnhaMFh0bjU5ZkZBR1h6d0pWUkZ5ZnlTV3I0ZUR4WVR2emJFdkNTaXhjcUlteE0yZ0lNaDB2b2ZET1owamNsNmdtUmFYZVVWQkdZbHZwRmJFV2lDRklmTjFoRk04MDRmdHN5UUtPQUJITVBjVWNxSVhRa0FmTkNlSjRIc0IyMHZ1YjBZeVg5TUdnK1FpTkpVckU3Y3dXa3I2SlY2eTlCbms1MS9xemJLNU41SXgxZ2xKTThvN1VsN3daOHR6THhsMmRxTm4zV3MwYll1dC9NTlA0anI5RjJtRE9Za2dmZ2NWcWJsN0FRRW5STlBxOS9MR1V1WUpaL1FQejZXZGthY3VjKzFNMlhHNFpvZEp1VDJLTFExZ2VsNXErU1E0bFFMTHpraHBkcVptVk16ZlhyOThhVjMrNWZ6YkpKSTBQN2trQzU5MWJjSzJSZkNlcHNXTloxM3p2Z2M3NTV1ZUVOd0VJNk0wWGk4cEJaZCtrOVF4K2JnTXI4RmpWcEoyN0srTkd4ZHlkb0o2cXB6VEZzQTZVckEvaW9mdHBqc0ZsZ0ZCdmtnWkZLNGIzVXE3VUJVSkY4LzJTeldTNnYzUXVsOGFTZGdFVk1reC8rQzE1QUNseHY2YmJEM0d3b1FwZFNFRWxiNlRoeWgyQjVuV2I3bzBSOEJiZGRqbWlhVk81N3BXZXpXa25TRm9wZzVEdGMwSjVYU2tuOG9OWE9LbDZoYUwvR2psVVBRUmxpY1FYUi9vb2pXeGtWZkVCR0FVVDJDZmNEQUFyNGhhQWJBOGxlRGdmUkhBMnNJMEkrOXV1SUVxN1dVZ1lmRG0rbDlmbmZBVE9oWndQOER6TXNwVlN5cnJsanhERjE5NUc3Y3NnaEZwWUZRODBCRWpaajNvdTJ5TVJHbjlLN2NyQU5uUUZGQ2IxemxZSFpobmRNMUVRTnpCaXV3U1ExV3JuemZiZE1jSzFhNHNaV1IrWGtab1JQaEZVZzdSN1d0WFFYckJwbTJCRjAwMDVJREpTS3J3ODRCZVFUc01BR1lVYkVVREJtNGg1L1F3MklXU0IzTW1tSWYyamI4SENHYjFhS3EwalVrTHhNcmx5akJGbjJ6aWpMYjkyeVFtUGt4TVpnei9QakJicnFYNTZQdG5pMGFVVjk0b2FCRU9ZVngwLzVyY1NXNHBSeDJ6QU1ZNjJPTTdXRVZ0WE1tU1JsUkhRRWhlNzY4V3BRTjJGTnhMV0FUK0c0UFhmTG5qMjNhd3I3OEtxUTFwSVQ0OENKcHVOZStESnFyeCs4WjhQM1hVdTIrem9XZHBoa0x6eUhia3Z2RkN0dmowbVNIUFhscWlIT3BLSTc2bVpMRWNoMWVSc1JucEk1N3NDeDA0Uk5hOFpiZm13bVhvR3RkdEJQUDFQcUM1azNvT0tlYWExenR2OThiM0wxZnZLMm0zMW5oUTA1WlF0MStxK1grMDF0Vk9CYlVUbjQvaTZTcEZxbURDKy9NU1dzeHRJRzRSZEVHYytCemdoUVo0ZjBZWXhQVmlRWEtqZ0Zvd2dXSWMvcWUwajJIMy9YTWJRR0ZRSFNSalp2d0lqTmxSVkRUNVluQXc3dWhnWnN1NXZXUi95NUkwQnBScXV0U0pvUWZOdDhuSTQ2ZkhhV2Q5S0JXZE40aEZRK3RrMUFlU1RkdU13cEIwUmZXTDlQOWZoZlQ1c1RYdXJwMVJjOW5WZ3N6RFQ5bE1yM1MydVYvSlh3RU95MWxBemJOQUk2eXB3Y2tCQVJ4UFZJTXN4MFNXSmZISmowMldhRnhNRDZBMjByNFNCcFpWelNxbDZRU1FiaXp1MG5rT0RlZ09RYjNnVGZTQXZCbW9uUkJSMjNqeGlIbzNabUVYQmhhZG5QWDNiaVltWkZ5NHdIMnRvRWpiZ1Rmckswd1ZkNGdQUHVhTllMLzNWS2FjUzJYWmpuZExyYlRoZkVVaEVPa2paNHlsZUgrVWlQMkhoZlFsVUlBZXp6dGdXT0g2b0ZLMGkyTTZUeko2NkZaeGs4STU2cHpKNVcxV3pBbG83SDNLNkJrVGZHSTVuNGlibTB0Wm9BdzJnY3VLSUE1RTFQdDZkc2tiTTI5TkFXODROUlVmUFlGWlNNT0VnbGtBTGkvMTVtNGFSZXpuQUJPTk16SWhGbTlSUG5VMlRva2cwL3QxcHh0dm12dXBMQlFWL0FMeWNsNUhQK2tQaTg2OVJIWFUrR2RBRnBUczZ1VVpBUTRIbmF1RGZmSTdrOUY4OThsQVExWUVmcER2aENMM1VkaHlBZWtENW5ST2UwaEJpazFuV2MyQW1Pb3BNaG1HVkpVR1BtUjZNU0FtRFZTaERQRzlSRHg1MGRrODhTdFIxN0lUTUJZTDA3NUpnUUVRdHNEZGJYSW5yTGZEYXBrUEpGcFRWd2d3NVFxMVFMOUV3dFhLZEZINS9hdTlQRld6cmt4SURwQTJzb1NjODhxTDBPci85QnF3YVJjZUhERVBwOS9iVU5NWmpuQVVKbjA2eTg0VWpUU3gzbmNUanJDWnFHbXRPTDRid2w2U0RydnZkMHF6aDlzUHBmNlZzRnVSd0tCZFU3ZDVybXVCYW01ZjllU0RVQkRQZk1YYW1lSzNBdUdOVkFCTUptVDlremU4NEdUTU5sNk1tby8wWnRlU2xSWk5OT1NpYVdhZldZeUI1NXZmQmVKQm5uRVl6dTZ5VDdOVmQ4cmRwMnBpNk5JWFl3aldZRzhwVDMrdmxVRlorMmJPZE5GeE9tSHlwSzQ5WkNtMjN5dzhZbVo5QVM5eXFObkdPaEVObTByR0JZUWlKYWlHWDYwY1FOMjA2UUtaU3Q5SFBmcHRTUERTU0dYMnNCR2NZaGVrb1NENVpsTHhBdjhmaDRBK0xXZmlINFhndWtVbzVoaE1ja01rMStSYS8zQWlnSTNBQkNsZHpoWFh6cXlGcmViOWZZaFd5UUpibTVvejNNazU3SjdxeUErL20zdnMwYjZnRzJrMmtINSszOUtpMlFuaVBKcDkwcjVHeXZWSnUxclFqL1ZLNjdDMm43VmJYQkN1YzJ6OVBJWTVwNlBUUWtTbVZ6TGdKNjhRR2psTVZnRmNJcHg1MEZoSGZ0SnZCYkttU2pKdFppNVExVytaWnpOa0dnays5Mzh0NW15VGZTR3laUkhmZ1VmZ2pqYVZyVnhoQ21NaGFsYWExUXlDZWczNWZuZjBrVDV0OHEvdzlSdEdoUHh2eENqelE5TDVRSnVncDZYME04QUxGOTZzNzBQYksybnFTRnJnQWQ2eWlqbmZLTzBxNFJrcGM5RWFxRUpNUTZlUlpDSHllc1QwaDZrNnhlNVdQYjE1Q2lpY28rRWwvNUFLS1UwU1lMTWZwWmdKaVFpK1hHaUhSZDBTUVVkREdPR0hrUUtoeTJTT0o3OEdGMzJESzZCQ0wraElFRDJOQ1pyMk1oa0VDVDhSa3JGaVc4WVQxVHJheGEyTUQxQ3dITHVmOWdwbVhSY0xDRzQ1L0tpeXNOVVExRGd2SUNBUUROK0NNWkZZRktIa24rUnZzTnpZZHFHbU5zOE1rcThLeXI1SnEyd3ZFVy9SakJqK01tdmw4L2Zmb0VRTDFITUJZZlZaNHpqY3BoaWZjeDR2dzl6QkcrSjhkcjM1blVKRzZlWmI4Rmk0Q1lFNi8vUzNsWmFqSjc5MXZGL2FMSHRtUllCT3llaWwyMmVjeGJpNkJ0elFOZFhtcjNmS2dUS2dVRWpzbTdZMzNhd3RMK0FjcUxOTW5xRDEwbnFPS2J0Y0RHK3N4MFp3RmkxSTRuazRjTDVWbFZ1NktFQzdBaXVxMGJPbmcrM1Mrek9IelNLNVp6R3drOWdhdEhiaW5IVDd2NEdlc1U1UUJzcTg4V1RzWTA5YVFQZWpzYkhWWXV5b1R6M04xeUs4eldmbVorcVB1VU9JMUVyeFJoOUxHamxFdC9heFBuY3JaNDN2RC9FTC9BbGYzeG01c29tU2NXRjF0blEyUm9COGUrWEVRaGIycTJvbkRDeEtmZWlEclcrQXgxckJROFNESm4vek1jQko1VWtuWUxFNW9SdXNoS1pNQm5aTEdib2V2ZUMrZk9nOWtnMzJuYS9nQmcxMndSSXUyeXlXelpNMElvUUZXVHYxV3pKdWgwNUZmc0Y5bmIxQmNHc0Fuc2VmdEFzajRYQkdlcStjdTJONmsyNkt2NCt5Wm5xR3EvamhOQi9VYnZOTnVHM0dXMmh5M1NUVk80YjJCSmVONjJTK0FndjVvM2t5ZG5keWwxbFhueExVSEhDdHpSeld0UTh0Tm1hRFpRWG9WUjh4NjNXVEh4aEJ2M3JHZTJtcjY1K1pMR3hQeDB0Z2k1UmhoVzhrN1lNaHpBWE5QMHFxMkN1bWVacW9JZ2RYekNaQ1VFU3k3VWRDbjJmYVpjQ2pPYklRMEJudjBaTnlpUXBlUFFvbzg3T1FMMjdjK3Jhbkx5MnlRNEhDM1JuQUpzSk43aVN2U3B6UnZzQ0pCZm1SUVVWUW1YeEQrZ0NNWmxnSlhiZTZGbnF0NVFOb3h1d2lXU0hhTlJzODVMWHFBb2p3NGI5TTVSVk9OZDZNa1lsREw2bXR1K2FBZUZ1VmtuK1A4MFY0RS80ZGx3L1VZN0hDOTZ3QXUzMnZlaWQ2Sk9TKzBaUkp6WXV1dW9HWjBpczEyNm9UQ2hmbjgyUlRlckdXUENNUlFmMEFUUTdtdExZclpFNEhNWEpyRWdrR0VTSmx6ejlha2xHRXVSWlo5Wi9CbmtWRWFDS2hSR2h3b0gyUmdSOWlBdW9kK3owczBRdWNUaUltN0xyc2VRWEF6RzFiQ2M3anZCVCtCMExzY0ZLeTJIRnRRcXltcStwMWdpK04wdVA2MVdLcGY0MUNZaXRQRGxnNDZWWDJYSEZRaUtSaUpKYTQ0eENNZ2pvdFljamtzSkE2MXExR0krNjJKa2VwNVB3OHhickRzaW5uL2pYYlU3NnF2cXY4Mm5hcTczR2NiMU1yd1hadUhiNzR6ZTN4d2I2NFczMWZhQ3RuWEZaaXlwT3ViUnJZdmlreFhHci9NVHZaNmRoZ0JLZTBUcWhONU04S1VKM2JVYkkrZXZhVTVwTDg4Z1V6VmFVN0gwK1l5a3ZHNDVYQ21vdFg3RU5obC9wSHkzOUE0d0JscFZyZDlOQVA2dDU5SkQrZWNWb1VVY3RKNTlQejRzZVJYMlMxb0IzNFlIakdhbTZ4UGwvVThmM2czSzQwUU1YejhaV3pkRzBKOUV0L2g2dE13SmFzcStaVTlORjJ2cjVMNVNKTzJ2cGRRQkRvOGdoaXk2K1pHQk1NOTR5aGNlN0hBWW8wamFjL3U2QjNKdXYwcWIxYklTYlpibUFrS0QvMElqOXpUQUtCd0U0a0ZoNHZkVUd1U3huRnV4b0dmMVMwVEJMc0FaK3Z4bW0raW1oV2ZXK2k2cHJKNmM2bkZtL1hjN0FGVzFmZ3hlVlBaNkxrdVhtNnFPeDR3S3YvT0FNL2RnRFlQSVV1ang3eCtrUU10QlpLNmkxeXc5UVQvTE5sQXR3bnVLdWo4WVRvVG9zY2N1RnZxd3dQS2VxTmVmQitsR2pMdHlXTVR3M0RMeVQySWo0YmhmS2dSVllRV2tOQkJWUXJCYU1YaHc4V3A4d2ZiVXIxZGNGd054TDJHZ3dXVEljK3BIQ0dxbjQyZ2ZtOUpVTncvbjhiMFpVSG1ucEpOdjJDTkI1MjB1Zy8zUlpIL2NmbHpjTENjVU9vU0tQL3NSRC92SXNxRS9JQWJzTWdRRlpVWlVjOThadERQQmo3WFBHTHdvckFib0dycWdONnlDb0hKYTFRMEFZeWZ4dHl3eE9Tek5idWg2Q29zZHl6SlFudERsSDNkQWFFVXNBSWFXR2RkNllDeWlVR2FwSysxbU1XSEFCaU5LSkxodDRkbFlKOTZ5bTdxRnR1NUNWWnVUSnpNZzlaQ0hMb1IrVHJJaTJPUTl2TUFuWFhsck5XWXdDUEhPcFpXN1VoQ28yMFJIUHFWQmU1UDRMOUE0UDI4amV6UEgzRlFJb1VoWjFOUUxFdDRoM3BpV0Y3a05mbUdlSzZRR05ZK1NFOW9UYTFNdnc3cFk4NjNFbUhNNlFaSkU5Q3FMdGY5aUlJdHZXSXRYb1VFZEg0ZHVtWUJFZFloa3J4ZTVIcW9RUkladXpUNmxyNkhieVFGblRjaGdDUk9EeTVMTGhLNktycUhGd0g2RXVDY1JaUTczc2hDVkFOM0k5ZnMrWVoycXVtdW1oak5jMXJ3cWkyekt3UDV0MzljV0p5UGJyeW8vQTNoaDhaQ3oxS29pZVlGNTB2Vi9nRUFqcnVrK2dDeG9uYnNtRnA1QTBtNVZWRTllNC9UT0ZWR3JBcG1TL012a1N2UzIxejhFdXgwK3F6d29VdFBGaWRhR1BHVHY5REU2d0NFRWxOTUNZY3BHYXFBNFlzZTBDNzI2d1g1OXFtQ3I3dTcrbUtLSUxnWU1zTzdMQmJKSW1FRDhyNDh3ZGtZUVBBdnlqdm04YWtaS1FsM3AyYzRrb3VYTTVFeVJjS25BNTAwUDFIOHM0QzdUVThQMmN3QVlrYTBhK1VRTm9DUkxzZ1Q0L1dwT0pWUUQwV1g4a2h3cEJlMFJURHprUWFlVGNyZ2JzTUhiZWpzY0x1Rm5UYVF3U2tKNUZHajNJaFZrWXYrQUkrNHVyVTAybjhPdlNQMFZsZmxvYm44VkZQb1JlZG9tcXB4L3dRbWFFZXZaQUtjMGR6MjVUcEFYTDZkV1BwZ0ZMamQzWTdaNXd0eFU4aFJYZ3ZvZEsrUnVQRmZib0x3KzhZL205SFNWSGdmdXF4M3lQUDlCVWlBcHFLWDI4bVdrSWtuczN5Zis3SnBxYzB3MG4xclZISzgwNVlLTHk5cWlMZDQ1djZUVVNhTXR3VzlKOEVuN1U1Zlhnc0x6c0tqUEpvWFd5NmJnUVlyMGxXMU8vMW1XOEwxeENYbXVxb2ZEYXFmNkFzdGhWYll5ZmNRNjVYdXV1YS9HZnFqci8xS3lMTFJHMUI2RVBJeENkS2RSeTN0R1c4bS8wT0psMlU0aElvVHFIOVJ2VEs5ZkVMRnM4R0pCWm16M0J4d2Vobm15b0FhTXVzL0tDdFUwUzJXSVpXbzdrbnVuMitTTWJzTWNES0E5dUVqUkRxVUUrNVkxZG9UQzQ2Zy9vM3p0aGVkVFZWK1pubno5T05vVlU5cUhqRXBrR2Q5SGxad3lML2NFSng2ODJibEdlem9ISGtUVUMwRkt2MjhEVUNTQ0ViQlBIb0dsTVhFUkU0SXQzd0hTaExBblB4VHBMQWF1R1ZsU2t0KzRwSS9UMnE1YzJoeXZCeGVOVHR5eDRsWGRhK3hyS0lNcDkxakZpSUZ0WHFIb2luQTZyVmtnZGZsQ2F4aUlESWx0YjIyMGN0bjM1ZzVVZVFHa2FJbUJyZS9Vd1NGeHVOcS9ZQUFQQmV1ekZ5a00zQlY5NVNpVDdrL2cza0p3VjVRREdSRFp3eFFsTTZ1WExvUlZuT2R6STFGODRiQ3l4MVlaY090em8zWDR6REFKRVdib085TmdCbWVGQVpuMEhVRTRuTVU3YnR1TytVaGovYjhZQU52UVBZRG9EelRBZzUvZG42VDZwRGJBRW5rLzBrNDNkOFNiTHpQamRibDM0VlMwVTBzTlpNUGpuZlk5ejRwY2FOQU51aTRnaDRINU4rTTloeWRVUWNleUU2V2ZGT1ZpbkdVdWFJSlJ2ZGpqQ3YwYlJLVkpjQ3hHbE1CeTI1cUExK2lYOEpmQ25pNEY4TG1SV1dKYkdUaG9xZGRqeHJiS255SWc4aklxYXY2SlVSVndON1B4c2tlTWRqcVZVcng5bnlhMWV1Q2puSDA1ZlR5dXhMakdIOUJuSWR3RXpOVmtQWW5BMTBMMjFnTHEyQVBMeEVKVHNvY2FiZC8yNDRQVS9ockhPTjZBZm5VL3IzNUE1U1o4c0dFZytCUTgrd0RXT0JPcnVZZ3ZtQVZkdXZxRzlnQmZSWHlpcURFclVXeWxVWTBkRElyTGp6WjR1cXpQOXNzL1FMQ0k2emNvajQ0N3FwK2gweHlMbGlHRUNMTDNXdnlnM1l3WTZTZVZITnREOUtqMll3S3pFY3o4ZWxJdmx6azJnNkZtOVNhcFlBNWxjY3k3UXlrQ0E0eVB3MWZwa2JJYlVxemd1cVQzV2VmUTFOdFR4TldSSmlnQTMyYURnRlh0NDIzVjRFQ3FDc1ZJZkdlMW5YVzM4WGpGcEN5TU5BR29ZQWhVS0gyc1dQdDlva21KMVc5alhXWnBHZmgwcWhVTjZhMGw2SjZYalhRR3h6N0xuMEQ2Z2o2eUlnZ3RNRFJtN2hSTHRKYW1hQndwUWg0cFh1NFY4ZDNxdkJseXFjblJHNkpTdGlwTGZ2M0YyQmo3NjkxeHMwYVp1SVgzWXNjc21tVHBOZWVUNmEzelZMZmVuY1pOSXRMbnRWditSUlhnaVBKT0EyVFV2MXVjb1VYanlnM25aN2dza3lEZ3BUTHZJSm1WRVdWVXdSVWNZa2paemQzNU9RcVhkai9aSjRxc0VuTzlta1piOWZ4bFB0VDM0cFpZQnRKclhjb0g3cm9mWWxkb2VXZkUrOVloN2tsNFkyOHRJU3Z6bkIrYnZYUTlpWnZ0NE9uL0tLcHF0UTM0ajBSZVc5b3NEeTNpK0IwNGpmbEE1YklNYnhEZnpCS2RreittL2hQOVFsOUNyN3poVWFjK0l6Z2pqVlpxa0ZlTjBTRzM4dTloZktRRC90bHh5Njh3T25DRzJNbzZFdFRZcWFhNGRCeXVmSWt0cENyTFpzQ3c5UitzV2NEbzlQRForVGkrdjZOM3hHVDVFL0x0K1E2c0lCcDU5RjZEYTZuOVFRUkxYWEMweVA5VGxQRVAvTm5POVlUNGEyQnZENkl1Z1JpMmR1RTlhSnkwM29Nam1CMWVHZW9QcjR3cU13dGNGdVE4Y090bE9KZVNvSHU1dy93VjhpNS84TE01d1dTWWF5d1c0OStpUm16Y2JzMUNTSDJtUDFVdWtVZW9pM0hFQncxVEV1S1FMWW8rdDlhczZjTmZHZndtUjFabjFJK05WTVRLSXZoOE5mT2pKTm01VSt3R3N3MGJQRDRKUW8wZWNUcDNOc3VBenhBMTg3cjdsTUp6c3VEdXNtVzAza0p1QmZIT2xhY1h5cHhyRW1PNG13alVtMlhxUEZTTVdpellBUy92d0JlSEhFSm1vczU1by9uMjlQaDE2b1k1dHRUSTRkdk9tRXdDVmdZYnptZGc0M2xGdVlpaWhHazRveXZpWmE3clZWUmF5ZU92aHpqMnhHTUZUMFo2akUvUXgxUjZTUlRXL3oyZGl4QUQzcjdZSE9ROUg2TnBvc3U5dHM5bUN4Y2pETXI2c205cG1lYkpTcXB4SEYvbTNqMi9OUVRLdVU3TFIvdFQwdnhWbHl0VXkxdGh4VXdKSC9OZ0NFSlNkM084OUhGaUI3eTZHMjNFQ2IrTll3VzRDYm9WS2dlZ3lic3BZSkZMem1uNllaWUNjVWhFTWJnZG9XYllNaTVkenRZa0RTY1BiL3FLZWVuc1BPNFdVNDRENWxZR2d2c1Y2VjltYm5PNFhpREEySW1VeTFtTEdhWVh6TTdqcHg1TG9Ya3R2RG9OdlRwUWp3MFBRWDdOcmY4aDJIWU5vK1h0MzdSVTMzUStZQWNRMCswMUNyc0NjTlVTUUxnQUwzNXhsbjR3dHg0SlVsNFRZamF3dEZpcDB3ZklCZzRLbjJSRmlUYWVvUDhkdWNKbGVyYmpKVHVtVWdiemxjQnVySW5rMnNMMEZvVGYxV1RkMERLNkxZanFyNWtMaVlaTFFsU0xYY3d1aldiNU5FcXlVcmdMbVM0WXZNTDlVdDJmS043QktsQnB2SHI0czdQbzZPQm8wd1Z5aEpTRGF6aXJLbWs4Tlh2YnhpVDZyUjJLMXVHclFiOUwrSEM0THVkc05HVW1FZWxZTzFKdDZGdkNLRXVJRCtwc0FGbHFteHlwcC9lYmQ0OFJibnozdnk2UkV4QWRIbi9xaFd5MzRpbUVVaTZ4OVpYNFVYKzJxWkNQWWhMdS93SjNlSHM2SkF1SWdtdWs5R1Zid0R0cE85OVN0M1BtelFvRDNLZk5rWVBvUG1VNUd3eHlkOVFLamRONk11TWYxMVp5bkFUSUZzSDcyMUJVRjdtSCtkRWdxVE55T04wL0RoTlp4M0ZYMndiWDFLWElmQ2NnbzlydXNtcTV4d3RUbXB0NWlNbE5HQ291bkR0SEtORHdHWnorSnZPY3NPTE01QlE0TjF4VEU3Q2lTRlhUSVk4RlFMVWNERUVqazlmRi9ObGp3aENsTEhWYXNlbEF4L2ZrYndJcGRnWDZqT3dnaHZaa1hHSWRLNWxuSnphekhuMzMraWY5NlZlQkwwc0Z3WW03a3lURk13L1Q2VEdTMElVNm1vRkhkdnlhWWVNcFEwc2ozNDFzSlhYN29jeHcxK1RDYjFsTjh2SjE2NEI0MWJETnpXSnh6aWZwNVlBZ00wUXFqUU5iYmVjYk83aEFFbDkrVGMyU0Q0clp4d2tzZ09Gc3dOSkphdG5aQUF3dGF4emtLNyt3eXAzSzBMd25ocVc4bEsreE9NSXNRT0ZsTTZOYUdxUkl4WDJDcEZDeVZUZUtvRTJmZHRHd09Memd3dHhVUXMyeVpNRHdQMlRhSlhETmVEZHJjY2l2NlVKbE5IUG03ZGs5K0VRbllkYjdEa3JBTk56NXQzS2krb21SVkYxaDA2U25ON3dybFFScWJZQVl4aWxDNnp1eGc1QTVndm9uWEY0ZnBNbzFNVkNPUHJmQ0VHT1N5ZEs1eXlxVG52b0dLM3BQa3JsUTIrSVZQam5rOHZpWHFYcURhaU9JREF1NS9IQWlMVFBrT1dDZU1iSWNxeUtIWHM4SDlrRTFQU21sVkNoRkgvVGp3VXVEUi9tMkFOb28wN20wamY2TVNtVlZhUUtPa05QekY5bG85a0pwdlVHR1J2d2lINE1TaVpHTUYvQysrUG9MbFZkS2tvVkRpSXUwUVByVHlSOE1PZkxhVUZkOFozM0Y1MFA2dHVwZWZSd2I4WkE4UGp6S0ROWE1PYVYxU1ZHR0p5TzZrZGQ1SWs0SWQzL2wvRHhiOWg1RGt4MFlzY05WdURtOG5Qdi9UK0J1K0QzOTJoNHJ3Tm5RcWNvQkxTMlQxc0lha1J3YnIvWUkwNHRTVUlYNVFxaTlNS3YrNWhmUFFBQVZ3RjRKdWthbTFJdWVqckwyU01jcUdWY1hMMGRMU3N2ckp2VExkRUhHR2JUVDVrYXZ1eld3OTlFZHp0TGgyZ05xKy9JUXFIbzFWSmV4cFA5Ly85a0FBUUFhQUVBQUFTSUFRQUFQQVFVaUFnQUFBQUFCRVFHUFFBQUNBQWtDQVFFS0FnQURBQmxVYUdseklHbHpJRzltSUVacGJtZGxjaUFvTlNrPTwvQkRCPgogICAgPC9CSVI-CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24-CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I-MTwvTWlub3I-CiAgICAgICAgPC9DQkVGRlZlcnNpb24-CiAgICAgICAgPEJJUkluZm8-CiAgICAgICAgICAgIDxJbnRlZ3JpdHk-ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8-CiAgICAgICAgPEJEQkluZm8-CiAgICAgICAgICAgIDxGb3JtYXQ-CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24-CiAgICAgICAgICAgICAgICA8VHlwZT43PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MVo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU-RmluZ2VyPC9UeXBlPgogICAgICAgICAgICA8U3VidHlwZT5MZWZ0IFRodW1iPC9TdWJ0eXBlPgogICAgICAgICAgICA8TGV2ZWw-UmF3PC9MZXZlbD4KICAgICAgICAgICAgPFB1cnBvc2U-RW5yb2xsPC9QdXJwb3NlPgogICAgICAgICAgICA8UXVhbGl0eT4KICAgICAgICAgICAgICAgIDxBbGdvcml0aG0-CiAgICAgICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5ITUFDPC9Pcmdhbml6YXRpb24-CiAgICAgICAgICAgICAgICAgICAgPFR5cGU-U0hBLTI1NjwvVHlwZT4KICAgICAgICAgICAgICAgIDwvQWxnb3JpdGhtPgogICAgICAgICAgICAgICAgPFNjb3JlPjc5PC9TY29yZT4KICAgICAgICAgICAgPC9RdWFsaXR5PgogICAgICAgIDwvQkRCSW5mbz4KICAgICAgICA8QkRCPlJrbFNBREF5TUFBQUFhK25BQUVCQVFBQnI1Y0g1Z3djREI4VUFJSUFBQUFBQUFGUEFFQUFEd0lBUUFJQVFBSUdBQUVCOUFIMEFmUUI5QWdGSFFGZUFhc0FBYThtQUFBQURHcFFJQ0FOQ29jS0FBQUFGR1owZVhCcWNESWdBQUFBQUdwd01pQUFBQUJIYW5BeWFBQUFBQlpwYUdSeUFBQUJxd0FBQVY0QUFRY0hBQUFBQUFBUFkyOXNjZ0VBQUFBQUFCRUFBQUFhY21WeklBQUFBQkp5WlhOam1jb0FBWm5LQUFFQUFBQUFBQUJxY0RKai8wLy9VUUFwQUFBQUFBRmVBQUFCcXdBQUFBQUFBQUFBQUFBQlhnQUFBYXNBQUFBQUFBQUFBQUFCQndFQi8yUUFJd0FCUTNKbFlYUnZjam9nU21GelVHVnlJRlpsY25OcGIyNGdNUzQ1TURBdU1mOWtBQkFBQVVWdVkwbEVPa2RTUWxRd01mOVNBQXdBQWdBSkFBVUVCQUFCLzF3QUUwQkFTRWhRU0VoUVNFaFFTRWhRU0VoUS81QUFDZ0FBQUFHdUxnQUIvNVBmRXpBWkx5T3RIQ2pYR0ZmenZ6WlorZjF4dkU5cXc1Z01zVWtnSTc5WDB1LzByVFVDY2RNYXZwZ2xtdDExMUlXd2V2VUpYOUNBZ05lQVUyK21XRFVBMkNXK2FHUS85S0F0Z1BGdzk0UGFiTUlzZldNdU8xTkNrcVpyNXc1SFBwNUJZeUtBOFZDdWVTQmkzNEkzT0hHQjMxNVZaQ0UzNXhlL0xlNzhDZ0FCVCtsWmFIMjh4RXN2d3BRWVc4ajdhWGxYWFJ2UitpdzVzSis3SVVBM0U1bXZmSTFjWFNOSHhVaFlIM3dZVzdZSHlldnc4R1g0NnowNVJrOTBZQlMyUHVwdVFhRnJSMWtlc1lqWlBheDNra3VwNENKYmhkT2ZxZGFxY2UvK2ZCVlNXbFNBSitwdzRRM1RjZzY3clAzSzRiSHBvaGI2aEphQWZxaFpSVkJPeW9XZElxTXU1TFNhMjlUazRRQzVrTHdRYllJRnFYZXJKOGpwU1ZvK0dSZTZDV1RkSEp1NTA0dXFMamdKV2ZSK3Vua2RpSitMdHEvQ2NJWWFrSjFMN2pxMUNmNHM5K1hKeno2Y25hTDhpTkNacEl3YU5NQ2VaZjV1SElhTzRjREpqMTZIMUZaS1lXWXdpdHErMmNURVJRQ0Q1cEtxc2t1SjFYbjZxSjVtbnlTWjUvUHd2dllBR3VsanpKcjhZNytNZGZNVEFQWmdvcU0rODhSWFQrcE9WVTZjMHVKUlV2WmdKMEhLQjRzR0QxWVUwRkQvY3BoZm01TEx2ZVRQcHVNYUN0ZmtUeUpyZDRja0orZnhsdXdJZ0N6cFRPVTdaYlJwQjJXS0hFWjRFQWtIMHh6QzF6aElDYzhCYkRlTDhIZG00Y24vQ3IvQ1RRdm90dStYSjJTZSswYWphUExMU3ZDZG4vMHVXQnR5b3M2emNSd3FFYnBCcWsyR2JVcHlsMFFMT2Z0RE1aMERqUEs5MHR6TURXQmd5VWNvTjhrc2hkU1RjSVZOSm04ZWE3TCtHK0Rzc2xNSGZsOXlnU0Rxd2lvOElOM0FEbitsWk5UQXRoWXdrZVRzTWFiaDVmMlpoY01LY3BFVEk5OThVNFVKNHdvdXlFOWIzS1pxWUdTbm11STd2ajlWUE5ZbjZzeHZRS0ZxQjVhM0F5UVBSeGpaTkFpbm5BODU4OW8xckJDWC9pVVlHaFQ3QU5vSjArYkd6SjFBaU1WUi9XVThPTUE3RVphQTRnRGM2L3FuVDU4VmRTa0NrbE9yOUpEclpRZzkzRGtlYXZ1aDY5enJZS2NlekY0Q2MyT2daQ3NtRTBhaE0yY3M2ZVkybDkwaHZnN2hiL05LNVZ1VXdMcGJTZVpGU0pGWEF5aFVWbm9XQ213QjI4bkJWdXN3bWs3b1ZNdDVWWG4vYjA3ZzBrdlViRGl4cW54NDVJZ3FQWG1rR0F2M3V3MCtSVnloM1VtOFJiM2pPNDNKa0UvRThoWXdiR1l4VXREZzIzb0RYVmVhNGkzOXhmVnlReGd6YmczSUJqckd5SlZoYjU4Y2NEdzZzVXBCbXZRMmx0UXk4S2IzY2Q5ZldHNkpQcFk5Z0tPZ3B2M1pwaWgrZG1jTDRrTkEzNUVxOWpBc0NnUkM3TGVtaExYTERzL0hyb2R6dC84dldXUXIyR3JaUk9YR05rWCtGN0lyQkk3eWg1OG1weGU3NEFvenNIdjhNdWJEM2lBcU5qc1FsL2NDemlUZ2pEdW0yK1hYWmU5dExHZW5mR2xGOGhaVjUvSkNrN0JVT0RCMEduOUtpampQcEFweUlXdGtvT3QrZ3RNWi93WVpOa21paE45b2docEt2UDQrOENPbUV1clN0cHNLWUU5ejVuYmtlQ29wMTM3L1NzOW00TTRBTXVMSVpkRGhvNWdNM1BkQkd1YUpUQTVkTDNCVEsxeXJ0MHo3RTlnNVNtNWxOM0VqQVI1SVF5eTNqZGJBN2lzN0gxVVNjVkwvR2I0NkE1bmRnY1N2MmNBYkYyWlpreXN0TzFjYXRIZEdCV043Sk9mUmZmODB1VVd1ZzFNdFNtbW8vdjZhcGRHakI3b2NlTWREd3Q1MDZJeVo0WWpjV0FQeFFENHhobk1GUHZGdlhrR29wY2hXVi9VSE1tQWN2VVY3bjBwbGZlMU5FQVhjMSszZEMzak1xa0NML3hWVG5yVjFhWTltNERwQitvbVZMcXdvb3JzbnhXT3lPSm96ekd6OHFhL01uWDBzS0tKaUxVcHRDS05IMjg3RmRBdjhkY1lxcENMTmo4Y0VJWUZFUjFNdU1NbnlRaEx3MXhYNnZKdStTcjcwSUE5citrcnBDeUdYL3FRMUI4bkhhdE5Jd21vaXhWaitOc2dhQkpxV045a1AxUEdVYis5ODVpNU5JdVRIdm1wckVuSGRQQnFQeEd6c3FFcDNaUWc4STR3UmtQRmxMN0drc1Bkcy9IUE0zUTlUT2FQVi9VenFvUEdvZi94bVNoRlZVRFgyc3FBYXIybFU1bkdpcnN2MWMzR3lseXFvd1UwRVVLeGw3emxMSTY1UUUvU3VsVkxhTlEwSWY5UGgzZWtaZnltVTFwbWIyZURqZFliUmMwTGkzbVhsdjgrTnFWUWdlZVozaUowcFJpbm5XVGN2VkNjMFI3cHhTUFFMdGRTZEVEYjZZeDlMT2NXR2lZSnF6V21sMzRZdE5XYThnK1UyKzBsTTJ1dFdMT0ExNnFSc1RKTGpGZGYxWUhteTVTMCs5SnV6eHhGRjZXYnZmaTE3QkRFK2ZDU0dqU1lLaGtwSGtubUVGUjRJM0pFbzlMWWtDYWY2SUtUTjFGWHdxYW9URHNuN0JCbE4zSGZsc0pZUDVGY0pQYkk0UUVvVnhONzBtU0xvU3hsVEZ2Wjk1ZUpEQ1VzbHRDQXQza0FEblM4dXZCSDZ3UHJCQ2lYUEN4V3o4SnpVVkpFeTZtanhweFFjZlA2Ym10dDRQSTVJaXVGeUwvRDJndVFyVEdBbTZScWRTUUdjd3Z5WUdPUWVDVnBURStDd0FiVmx3ZUpXTEVpOG0zMUlhejA0OW1wSmVTUFFMQzhEMktlS3d3a0t1Wmkwa0FzVjVZeFlCazRaN1JlUkllaGhRangxWXNvQ0lLOGExQmsrS3BoQ1lGWjNXdUZFMXBVU2NWaVJIdEZXWHdWVlR2dUZPM29rR3ovMnk3RW1kRlZEOEs2RDZpTnpYTFRMZ2lPMFkxamJEdGN6SlVWV3hUVkhHS3I1eTh3MVNXNjFTdDhIWUUzSkl5OCs1ZGUydkdsMGJTMit3b3ZhOXJ1aitaaHJoSDNvRHhLS0dzdFEwR0ZldS9zVTZHMUt0ZkVqZXpLLzJwOGZHM3drRzVHazVKZlFSenoyaFRGVGVEdjQ0b3lHMGlpcmVlRmRkTnk5RnFmeTRHSnpUWUxFczAxdFhNa2FtZ2UzL1liUlhyMEZmOGpVS01kU21HUDkvamV2NldVMWQ3aklSS3lkZmNrTWM3WnFnU1FPZWtTWDV1SUs3a3VSRGxiTTE5U1ZzRzBOOExEVEJmZTRLY2x4T0EvWnhrdFRmcWNqV3dvRU5ZUTVKK1BpcHdXV2h3UE5pRXlhbkVaVW5tNVFReGgzMVFocDBoZkVTcWorN1BsZW1YS1htQ2lvUHgvMnRQdlJqaCtrUUp3SUVOdmswVkdacDJ2Q2ZYS2N5NnhTdEpDWENMejRpL1VKQ1dTTkxOSnZJQkVJNFJSc2hIOGpjQjM3T3JFVjhaNWFEZUZTT3NXSkdCMFNORG5ycEp1aFFoMnZHUk10bEh0VGM4ZHBnNVNucFJwa1kxSUpJUTlEUnQ4bWhTY0FHSzFBSmpZOW5iMHY3N2ZmZm8wRHBHR24zbmF3c0Q5Z3ozNWFuQ2F1VXR4alVuRVJpVWJtOXAxeHJRY1Y3Wkc5N0xqUEpPRU1XK25vL2tFbzlsbDVIa2ovUUZJY2doNlFldTNqRjlmbWVrY3p0NGhqN0JrZjZSb29VcER2cTNwZFhrM2svRWVOYUhuV2pWRDhiT05CK1VCREdyL2JmM09pQU5vVWhpQWttMndiaUN1VGE5bEY4c0ZZbHJzM1pwTEZMdWl3M0NjWUpRQ1N0MCtYVUdQNzZSdTUzTlR0RUxremxPT2VUc1ZhZjdGaUxkWXhua3pYamFhVjNta2hjNVV6elZ1U3d1ZTZkU2ZjV3lYSkZpMzFyb2g0Tk1GZ1VOTEdkb3B4d2g1bXlWYzNZa3ZCNC9XM2VHYjV3WDlWeTRIZ0lkN2YxRXI2ZHJEWGQ4UlU2NkNQZkRsei9mMUVPL25DUno4bm4xcVNMSHBCMkNPOE4yc09UcFIxQXJsVEpEcjViYkorQmlhTUNtYmVieDFOS0owY25sKzYyT3dqa2RtRlBzL2ZQbGpBR2dEcm1kWnJKUkhZVjVIMmFYd3pzdGkrUS9FNkZ4bzhia2R5OTdndXIzNXRSclFDdElUc2Naa3dKUlpVTFpPVDFIWWVWcXRrdTVEdWlJT29ZVGtyNFFVQTNCR2VaTnFseUlRbkw4UDhoZEVrVy9qN3lWc1JTYUlzcG90OThrS0ltZmpLNmVhU2RneGNUditBQkRUNWl0RUVpNkQ2UzhIZkhNOHRMeHh0ZWN3ekdHNWtidEFqMFA4QTA0Y0pGdjdpNGR3Smt1NDBjb1cybmxlZkdHWWFhS0ZyeGZhbFBldnN3cE4yeTFjemVQMFdVZ1UxQnpEY3JwSENSR3Rncm1pamlmT0tlcUJ3UTFBeFhQajZBVW5OSHhlbTZMZ0FkcVhzNVFLd3o4M2FGWllBVkpqY0JrZUxDVWxPSzFZb2pZYWZNYUc1YmFOYTh6eWMxQWZiN1NlVHpqTUEyeDg5Y05CV3VXenhtYVdXSDFZVzkzRG00blk5eUJwczhGR3ovdk1Mdmt6UjlCV3ZhMTFpbVV3a3c2SVJzMmhJeG10ZjFjUk14bTNIcGNPQlE0TlBDeUlUdmgvMFpSbkFyaHVjNFZGMHMwdVRTU2FTTXViUXJGWFFsQm1sc2VvcXp4WFNab2QrNWUzWkVxNEJpTVFUeWNtc09DNHVKU21ZVGJxdG9lcGFJMWErVXQyUG0wRDRrczk4Y0F0U01PcVFwQ3JjUTcrS1pTMmxONXFBMjdhazZFSU9JM2EwaXJ2V1EzbEZJUndGbVRCcFpGcnY5U2JwQnpZWFVnM0NIbEU2N0JraXVpVzlMUTVqd3hqb2hkT0lZUFYyVkx1NmFaY1E4c3MxZ1ZtaVJNNEJFaGpFVk9mcjFIYkxJeklTcGxmdUo1dXE2R0Rzc3hhNGtYUHNBYldnYmRVdllXNVBaU29ydVc4cE9rZDd1am9MQ2NUQTlSZVY4Z1gwTlNub0RZLzh0NDlVZkxYWkF5VmRCbzlld1RDZkw5aEluYWxZd05peHFNdXZoWTdiU1RTcEtIWEVDOEdDU290ODUrUFJPaytlRllXUCtYR1JHVS9oelVrS0hUR0RkcWlQMHEzdTNsaEk5d0dTUDVJT01nNU0vMzBOM2hjTzkxY2k4UVdWNS9hald2b1hjWm9La1psMFhUSGFONjk2ZnpXVk1jOUp6bGtZZTBRemtveGRiTVcvSEdUS2RuRGZSYTRIaGpxV1dyYUVETEtIZ3JXMlVZYmZEcTZkenRNcGlZWWRKZXd5S1VnclBTeDQzaG11SXR3SGZvTVVwbWVzR3l2ZFhtYnBwMEdMankwUHpkZVdLNURseTdVOVNWTXVmNzg1VHUyNXkrdk5mamVxbURMaklaNmw0UUNaT0dTbGFrWUpRdWdUNTZadUI3OERnc0ZlVnZ1NEFTNlFmVjRnWU1URkRBMFNjUjlJSGlLdUtrVUYrdVZ4KzJ0T0J5SStCTFFseVlpc2w1ZUc3T1V0YkpCbGFHekJBYVBXVmc4dTIyMmhZZ1BwZlNPc0k1VkNHUUNQSkxodVQySCtwN2dTdlEwbElNVHdMYzFMMkZwbWtCQjgvRWNyN2NZSHgrQjUzYXU4ZXZtTGJZUFh3Ulp5UlJab3BIUXBjR3dIcmw0cDNBb3gxZkJwUGcvckZFRTVIcEtHTWM4R2IvelBXYzBINGxMZExDbzUrTkFMeTRPYzZNc0pqOHBZSjQrTCtOY1pQQ3pFTzZsMDZDWlRTOFF0Uzk3d1FDa1BoNWxUYm5WeEFNMHBsS0ltUFFtYWNlWFQyNk9OSjYxT1RQUEticEM2c0cvME52WXlEQ3BoT1RyMjE1TzZVL04vQnhIQit4bEpONTV6TTJBZnQ5ZXpFbWFYb0czUXN4QnEwd3k5Ny9IVXhYaVJJWGdVaWFEOGNqUXFYcmJOZWlkeFV4N2tDeVBrazlxUkM2dGRvWnVNZGpwOGMvMXA1YVU5RWpUdW9hcFZSa1hPSHMwUjRLRkZmZjJEYnJibXNtLzVIUklqbDZZdzljZzRyUWhFY20vRnhsSUYwWWc1RE5wQ2pYcTQ5ZEF5Tk54UllRc2xBOW5NWHlnN0FVajgwbFA3YjBHRTBvenBPSUUvOGRRMlFRVGpCZng1RXJHMUdOK21QZVRKa3hNcFdlaGtDdlVieEdxZnZRNWRaQXVHREU4RTFoei9jNVI5aGZWUkU1SVRNbm5Edi9wb2lla0lVMU9uWDBqMjNvNXcwWVVVblBmazdyMW1DamVRd3dCZ1hSK0U4WkkxK2Z2Sk9NdkU2R3JYNGlLVkVUdEs4ZS9PTURkRTJ2V2xVdjhGZUxiTGdFN2U1bG0yNXpBc09NVFlkcEVZTU9nL3p0OXFpMG9zWHdrVGlyQ2cveDFnRmg5QWZKc3BGUmZESFZ1RWtPdkFRM203MXZLU0FZVWVKTHVodHUyOS9iVDlOUmhyeHhSZTZIUjlMQ2FjcUY0U3BaOEZpTzV2VHVaeGFBVFYwalRaaHpRSXVYSDB6VEJKUEk5V01XZzRTSDJtWitwTXMzb29FU3IwTnd3eGl6bU9PeVV2bXZraU94K054NnppaXNlVjVwV3VJMCtJK3lnaUVTZHYyM2ViZXFuNVBPU3l1UzdMSEE0NlRPbnJxcWllbjB3UW9MUG5YeWR0TVV6Y1BlbGdJaEZWL3B6QTNKSGNQRWpjSGQrbHBITDhZMTVBazRnczZzV293MjdZQTd3b1N4YTFIaUlQZDdZQnJzbVZtNmJwYlNxTVl5UnRzVlpsOTRIYlgrTE05OFZUa1BDMThmT0VZOThOTTBHdDVwWHZUUllhSHB1b0RMNTNXYnFSRGhSZlVya1ZuSTlRT2VnOHFDOTJabFNYdnAvRnRDZEx2ZElRRmVVZHRwZkFQR3A1U1VhZ3NQSld1clpGNGU4T29OVkZXMi9VTzBzMU5hK3dJb2w3THVLZXFQd0RkL2lLVnBlUTdHZnNYMjJUNWg2MWw4emRuQllJRGhvWlpDeUt0U0ZJQzFodVdkTm1lam96WWtDT0plUUpzc01MRHJUZFZhamZzcmovREF6V2NqVE55VjlnZm1ySG1NWHdwbVFscXV4enNpV0pDcks5N1Zjb2phM1RhRE5ZTmFBdmZmbUFWbEJYWm5ubmsrWVhFSmZ1ZHNxc2dzRm9WeC85WjRzc29uZmVDTEpmQkhNR1o4Vm11OEd5dWRsK01SRjA3emV3WjZqZjhwUFlaUHZRR2MvbVd0NnY5ZE5nelZvTUpDTUF4bnZ2TXNpQXp5ZzRSYWZCTExTeExubFBhbkU0UFRQQ2F3T096L3hQQ0pnRGNDVHFxTERndXBud3Rja2E2YUU3cGYwcmovU3QxOWh0b1BYMGpLNUxQdGNvNFpnUWZVZ05ZSTRiTmlORk0vSjJwUHpXWmZEWUZWOFNzbk5wVGhBbDh3RWpWS2FnMFlpeGljS0RXalAyOE83VlhFMDFudG0zdzR0eW82WHVvb2dHWjhnZW80SWVrYVNFejZWUE1rR05UeUtXMzJyS000czRLMUF3UVNUSUUwWTV6eWVYWno4Vml6My9mN1VxUTdveHlBQ0xabEZRWXB1VGkxQTQwZjhrVjBMSTNRSkI3WnNnenIwZFlxL0RzREt1TXdNT3JUNmFrRE50TmhCQWJXT0k0OHZhZk44SHg3Rmw0ZjlMNFNEdzljQzJ4clZsdTdmd3ZkL05nMmtoN2x2eGp2M1RDYUU3YjRwcms5YzRYalNUTFBCSFY3WkNSSWxJZmpES0JTeG9KVnhEdk55SG5HT2hCZlJZQUZReXRMeHowVjIzUmJNWEk5Nm9raGN0b3Z5SVRzRVA4WlhnWHRiVkpnaVo5Um5YQndpOTlOaDFtMmgvSVMrUS9lWWpURWpyZUxtaUIrNW8yTnFTMWJQUy9JV2NpdGtzUzg1aUpmd1dxUk42SUJFc2hsT2twRjd0L3BZaW0zQXR3Wko1Yk5NcW8vREkvdy9BcUNDcmRjdDdhalRtSDlZV3lwTC9aY0VHU25qNEJPK0dvb00ybVpaajJCT2FSa1FDTUtQU0QwV0NVMUQ1MFVkM1lBWkEvdGNzQkxOSVp3ZnMyUFV3OEtaRTB5WWxwd2FJaUx0UHpwK0pVbkpHTVhtT0NTK1I4SnNNZ2R2K09zTmZRSXB0WmxNUWhLKzZYRzM3Uk5yeEd6MGdvcWxRS29ma3FHS1dGUXJSRjlFL0VpaGtFRlMzS0ZueFBNTkRRNDUrL0hFUWFBOVJ4UlNJcVpoVUVyRmFYMmFyVHJXS2h3QldEWUlVa1N5SnlaRVZ3TWhoNVp3Z1FtV3BvTVYrVmpQd2NuS2V1ZmJSemhSUmplMElRYStsTDRFbm5HQXF1ZmlyTWtzbkdDeURHTVNzYUJIelVXVWVvN0JGa1Z0QTlwNGk0eXJqTG04THQ4Qk9RQ0hHYzhsd3IxVTZCb1BCRFhrV1hJUFVkRVFLenZUc3p6L1d6a3J4bnBxNjl0SiswUU5wOHRTYU1MTUoxTVl6M09iZ3YyOFQxRUFOUVFaL2Z1bFd2dGJsTW04S2x3MExHQXlpcHByb0Z6T016c0Y4aG9rdTg2akpseTJRMGZwOEhYSVQ2UHRoRmwvZXVRNTZoSEpUUU9lV0h2ZjFIdWNTTTRYVmhLQ21GTmQvK1BESDdrL1V3TmZYcDB1LzYzcDlXRDFQVmlvM0VlVElKY0NUeEdCM2RKa3g4Wmh5YldZcjhtZE5NQ0docktoNDdscWNlOUdFcm4yU1E4YmNMK2lTL1V6bFVEKzhlR2FQMzNJanlUVzBWRVVySi9ZMFQyRFFTNlQ4N3Btc0R5UWNaUTFMRHJCS0NmWWlFZndHSk5NdldLQ3k4b2Y5OGd6dUFNNldkY0srbFN4alJrc1ZuQlIwZVQ5SzUzbVlReU8vRm03ekRmYnlSNjVZTWZkVkRiUnRjdTdVRm5aWWdrTU9yQVNCVnFZUzRnUWNjOUt3bENGTkRvdytpMkZFSTcvTjdicXFwcVdUclMyeHJWNGFpNmpwM0hKMWhmSEJlSnQ3MXgzNjIxempBUVlsVVFPMGpZdkhaSGYvRmhuUUtsa2o5dHlRVGRLMW90TEVNTTZVWVB3Y2c1cjRacnBuNmp0Z3RyQWhPdmN4N3lvM3MwVzk4eCt1R21RS3RiYWxXSEZUVnJJMlY1NXVyb1dFMURHVkozc1o5MDVDUEFPWVpVYXhQRUZUOElRVC95NUozSm9samxuL1JiVEZSK0l1VnY2NE9WOVZoaE5weG12YmF2bStZbHI0TDJHY0dvYTVSWTBYTlpjUlZmdkZaZVhIa1VTNWVUU2x4N216UEUrVjlZeFp3TEQ1Q2NWTjdwMGlzbU1LWmpVVjR2YmQyYzJNbkNGTExnQmp0Ui92VHRlQUlrTWxZb3MxWldrUjhXbXFmR0RsbHRPVityOFltbzNXQkNsL3lmTmpjTkFSOWJTTGs3eStsZWhBOERzVURWVTJ2c0Y2cmNaMzVzZFR4b2ovZi85YmFIVVRNK29MOStHZXJ2ODdQQjhIeGZvUEkxTHpTYkZ3Qk5CcWtRb2RyOS9UNHFTWG5ubE9KODFzOXVhanNYOVRIWHVuNUFWZFFaeVF3Q3o5cFVlYTNlcDF1SzRFeHloRVo3T1JpWXMyYmo0USs5aDhKM3ZQY2RrL1ZDTG9hMkJGVVk2eHlwZFZsR25wOGNWQ3Jac1phS01IMnY3clBuSlZualNlaTZHSzVSNUFNc3dSWnltSFp0QXJOb0xSODBIL0VyR0M2T2lTYS9aZFMrb1QzRDd0Z2U3ODJRZ2MxeFEzNlEreXZLSHFGNDI0SW9oRHc2SnJVNDlzYXQ0ZkkyM1I4UjJVTzNPV3U4aGdtOUZjemxTVHNqWU5vbW8wd21TWTlpZVlGNURzcEsvZ2JyZ3l2Y08zTXc3Z29maFJROUxMWkF0dHdCcU1VZDU2dFZCQ1k2aWpnQlVBVklVK1VwU1RsY2RBNVVqUmYzaWZsMjZHM1l3Y3M1dFpNQjROV2ttWitiWWVLS1JNZTZOUG1BM0VhS3N6WEVJUWpVam94cm5pS2YybHk4WlN2QSs3MkFTdmlZSnBWR29WbDVhb2g3bnA3RHI4UnduS0lidkFQY1FEWTBGOGR1VzlVMnd0VUY3bmJGVGhFZGdkSTBvb0pkSWxtbG9mMGV1UURYMFBXWW5uWjk5RXRrSVdQemZQM1E1S1lVZjN0M081aWJPc2VFbGQ1NHBEU1lOY3RsSm5HV1d3Mk53UWQ1eXA5SHRyUmNOOFlpOENGamJPY2JRMUlyMCtuamVsOExJY3RnWHRrSENXSXZkRDBWU2k1ZGpkdG14UzdOYk4zTUdZZTdUZ0MrQWlyMFdhay9UcTJjaUxnTk1yaGxYVFdVOEVzVnlBM3NzK1F4REdTNVhqWUNlRkdLOWpSWVE4QU5PdVpOZHFJMmg1WlVTa0ttcm95UDAwRlF1V0szRVU0NE5uWjRjVmZyNVBiUEkvWDlDVG0wRkZBd2NnWVo1ZUE0OGlhYm5PZzN4eWFCUEgzU25LaE53ZTQ4Sm1CSWFHYnpWdVBXNkxWNjgyQWxBY3BlKyt0UnE2Vk80eWdTUVRRU2I3Q1BLWHdFMVdCKzI2ZnNuejVnR1huQ0dDZXR0NDlKMHhwYlI3R0J2Z1F2TFN6TndBckF1elZJbWxKNm1rTXY2Mm1yOWZad2dTVVdnQ0pHTkZRSDFPakxlcFdSNUFkSUlRak1zNjJXank5WXdsdDVWNDE0R0l3c2lGL2JuWmFzeGc2eHpiZ2lKdmxjTzJwS1plUDZHRnRMcXE0cGFPM0NEYVdsZTRwUjEwOU84UjN6Q3BOUTdLbi9YMUtqY1BjTEU1Tm94NXNqT1c4Zm5FVXlpZTVwK3dPZzJVR1RCL3kzZ05QVnBMQkxRMGhuejdHdUp3L0NjK1VJTlBnb256UGFVazBmY2VRQzZkMFZrdFV1SVozYzVnS2Nmb1VFUXk5MjZSN0NjUVlndTA1bnhZT3BZanhjUzB4MkFDb0sxcG9hcCtIQkdzOWxRWEN0aC8zZTg0SzZma0gzeS9zSXVvQ1IyMFRySGN1TmxMaGlnV0o2K1Y4LzNUMnlaYkxHbFhFRnQyN2tDVnV3YXBvb3plYTRuNGgvY1JrZUxFZ1RhWnB5cW44UmtaODQwN29xM3VPZ1p4enFTRGRVYXgrd29QbnA2dk42VmxXckI3b0hEQWU2VWlldnduRnR6WFJia1pveml5dFZSajFrVTI2U1p3RHZzQ3NmdndFbUNuK0tFL2toNklBUDg0UVhab0pXcUN6RldyRG40YkxFMzRRUDVHREtseWRsT1NaTUtsb2FCS0JkR2pvZUZPNTFocEVWVnluMlVNMXMvQ1BoRUJmVGRSN0wzVk1PNGtlYlEyeXo3a2NvRTN0bGRsSnNBdG84U3h1dnlrWjBYRXg4RDBSWmZyUGprc0hMZG03anZDVjRDd2tqZVhQamd1SnI3NG9KaEo1ZGh0dTF6QU9nb2lVN1pFTmZLQkVDOHNoaXJaOUtDMHRBNEsrSWFVd2E2ZHNuamh5WGQwbW42YjZhU0FyR2liZmZvL1lTa1lHalNPd0w1M1poNWliTGhtTjlHTHhNQnRISmZwVWZSdzdiRUpERnJCK2pJVXpESituRFp2RnE1aS9KcVRwS0tjazJuL0g5RHNXVGZ4REJFbmZROGtQZHN1NzF4ZDFRRy9Ua1AyM0lIOXZlMUFoRFRHRkhFbElkTWxBbmtkZU15S2t6MTRyYUQ2dzdlc0RMT1BSd1JhQmlXS3ZFTXVxNkovbGtKSGxhQ2dPZFU3WEg2eEYvYXlKaTBJWUh6bllVYVU5eVF0UzExMU01eHVKMkt5VjRuUDdScUw0VUVYWWZMVHRhRE1yUUdpbzVMRDR2Zk02c0p6aWFJV1hqVENzS2dkRlF5V3F2dTc2YkhJSldDcEZnOHVIUjFWZU82MHhYKzI1QU8xSnZwT0tzdkhWMDdCV0syRDlONnpMNHM4ZW1QZks2Z2FweGVYeWtVMng4d29QeWNGcElZNkFkMUpZVGx0UzJmNHltWk5pNFV0Ull3Y1FobEVZQ0VBbzR2bEF2Y1VBS1ZjQXAzVFdzUU9mYzN1UkM5L0h5NjI4dUFHWTljY1h4OUdHampBU0hYSEk2cWk5RlZGSEpxQ240WFhubjFDNW4yalpGNWkxbjV3c09SaXVnSDZINTJVeHUxOTZhSTFNOExrNkNvckZPZXB3TGVkeG4wQ0l0KzEzWk9INTVsOWVqeHVCYjU3Z0FkbHhEZ0xUV04yR2pFcFRMdlNHMjNVQk8ydjZiS1hYRy9UQTJBWitKZm5HYWtEck1Zb09ud3lVSGNLeHA4VGhJYlYwVkQvQ3ZXZ0xiMkRpQUxEOHpSSm05ZFVqLzVyUVV0b24zekI2ajcxTk9YT1BlRjhSNitZZ3g1ZkZtVG94bExjbzdUamxyckd4OUVjRXAva2pYTE9qellRUUkrZ3hMK0FPUHRseGRjM3c3OGYzTU54eU5EWVI4QnZLQzE3bjNLN2hOajFzTllUd0dBUkgySExMT2NUMXlDMnhQb0hRT2U2ajB4L3BCN0sxTmRWSS9yaTVtVlpMUmE0a0tGMzh5YVNTSXBzdkhvTWlZQm9aZytqTUJmVjBsYnoveWVSMmgvMXVmTFpJNERONXFHT3REcUVNNUZzdC94Y3BOYnFNSmNDOXk1RXRqSk1kOTRmSXVRMTRYT0UxcWN0d0JKSFVORzJiVzhMRWhIMXJ2bjhlM1lzM2lseDI1ZlRQRTd5OWN1T1VKOXVXRkhvUEZoYWl2Ujhoa1RWek5YUi92dnNDVEJaelZZY3lTZ3dXeGw4Rk45K2pTR3ptUDlKcEdnVXNFaThXTytwQ0JDNzhMTm5KMmdVZWVSVGhJL1cxd1pNN1Q2Sm9Ea0FYT2lDZnJIa1U4QWxHZUJoTEZTQ3JsYjRMSWc2dDRDclh1cTZ4NHdlU3dhTXpzMjRKRE1UUjUyTi9xNndGNHNRcEgvU1B1NGFKcUZRRU91OFMxMUYrY2ZVaEt2TnplTjNjQy9VVll6RWZDMndueEdHV3BnZmhBTVVuUHVDcituUlBMZ3NTekZFUnNWQVRZOXFyMHkyckt2U1ljVW9PVEdrTk9Fb3hLWmZiSnZzd2FYclZNYlNjZVMxNS9ZWnVJNnhTM0gwZUw1QS90YTFycS93bUxPL0wwK0VTSTVoVENkVGx6a3kxNk4wbEZSdVJjVTBPUzBJYWNLcWFTazVnV2ZaeFRzcEE0Z2NiTkRLY01zTTQyNFpSN1hNT1JTdGc1UVV5c2JXUGh0alZ5Zk1tM0QxMG01LytyYjVicko0ejNYRVVoTXFpUElmUEtTZjJKdVEzQ2lPWjVJcFpVK2t4eEJoMmZQL0ZORDlnSlk5T2J0SFUyQjZUaG1tU1MzVXI0YjRpYU82NXhEekVlYUJKTW5iMlpBOXdHTDZlNGtyQlVQRzFuaEFmWEJEZnFpVkdDejc4cjdQL1JDd2JFVU5QaEFFZEFzWmsrd0RkcDNWUmtYNzNBNXhsNGxkQ3pFeGhXOTRpYldTYUdRNEh5Y2Rhb0hpVEV3Rk93K0JzaWJjU0wraXAxMG9vYUlPb2cxQ3VnWGNNREFXVXV3ZkJ4RFV6bG1IWTQ2bHpaWlhYUkhoQzB5OTU3anUwWGNlRG85QnFsTWZqYlhBUHE5cXJBTFk2eGxDOFJOcUt4VkQvWUFGSWhXNXQ5WVU4cE81dHFMWnE4T1JQRHhUN2hSZHJvZm9JZ2pQNDdsQmVsSkY5WVhBS0I4VXRsTDIvQW5OS1p2bVlmOXZvWW4wOTB6Z0Urck9SRGtMSnN6ZUwrWXVxZE5lY0loeEx2Uldic2s0TFBTLzN1VmF3WnY2dHM3ZmpjcnMvZVRlalpHdE9LbWJRQXZIMThrSlpZL3I5cHYzOVg3UEVyV3JpSVV1YU1scVhzNTNJbTVjR243dnBwMFlJQ3huSHVkUW9IWTdpbk1SM0Q5YlBuL2NwNU9oa1ZsamtjMHhsTW9NcW5mUjVEYXpuNXE1VmwrVlVoajAzN1VOZm02clYxZDJDNnlKQ2ZkeHBUS3JJSFVGTi9hd2J1bGZzK09seUpIdHByY1htVHU0d0FNVnplZUxGUFZSaU9sSUN5WmRaVDVpZVJwTzlacXdCa0JpZzhkdlRIZFp4NC8wRGxKaGJKcURGUXNBRlgyOGlyOGtWNHVFU09kOE5WVGJRcE0xUTdrKzJnL1gweDdRUURPRUJVQVovQlVha3kxNGhZV0xCaHVNZk1nc0t1aGdzNlpqMVRDSUZsSU9GeldIYXh1L0RmbjhVdkhCZjBvcDRyRXV4NHpDOXlKUmdTY24zdS9ncmxGWHpSY2tiOHlhVTNaYkZsRWlYY3hIMGlFWkxqNDBvRVlCSTJtZDJQU3g5dG5wb2FFdmRjRnpPb2g1dytURzhyOUVMUGI5RHRuUEdCUmJKbTBieDJsNkVjZ3Z6QTh2YzJ1enBYWDlOMk0xd05EOFpSdXJmUitUVFR3STFKU25iNG9idlMxSlVDRnNkcGF1NHpFRDZvT1IyUlIzRlZxalBicTVKRjZlVTYrYlRBNDNDekhzaUw2UW9UdXpKRExiSGZIRVdlRENzTitibHdPWXRCWUZ4S1VIRFc1VUdlRWMyT0RJL2p5ZmFhQ2VGeXBzVDZxWW41QmQ0Vll0bTBxc082eGl4MkkwTy8yMWZSdnhyWkk1MFNXMGdlZTRDdVFqWW1TNDVMMXRGK2NqM1NyeUFQcWxDZ3VNSWR3OFhPalBiTFlyUUVJZ0dEak5jWW56NzkxdUtTaWp3bkxWVjNSaGt3WmtJdEZyVVNFelNQcGFKWWJBb1ZscVJueGpFanVZUHNVL3hNemFxUWx6YnBoYkVwelhYVVJ4VXEyaVZDMjdWS1VkT0h0Z29OdU9JNlgrQWJsZ2VJY0dQTU0zam1VOTQrZFlKazNIZzk0NmRWNUpJUFB3RHppSEo1endBMS9hREdJQUx6ZEF5Y2xsQXh0TDlIMkw1eGxXYnlHUU1kUFladHBaQmpVMFhDcnJFM2FqVHhOUVJKcGY1MVV0ZU9EUHBTZU15c05uWmVtTmR5SnE3OUV6Mm1FRko5djF5WkRXL2w2bUJmRlQwYTFvMjFKc3djcFZoZ2F4WWZJZUY2WlVsRWg1TzVabmJ6TVJmbUs5TEljSnlNcmtIRW95ZlBuTnJvOExBY3ladUt3ci9HOUhpOXBUUyt3bXlsS2lmdDc3LzBtZm1sNFdwY2wwMmZiWkxRZ0ZlbGczYTN6WHlPTklUMDlmbG9NbjUwdlVHQTB3M1ZqcU5pRFMyaGY4RlQ1VW96RnFkY2V0OXc1UTBlZVNTMi9pbVluVDVrY21YalNDbElObysxanhScHZwTUlEWWM2UStiSHM5QkthOThGSkp0ZkMzZGhjNlVmRE5ZRFlBdFkvVWhsSWZ2WmpWZW44dnhEVTRxa1BrZjIzTTR3WFFuTmo4VUVHbml2aVlUZEFPU0xTR2l2M0J4cUtjWTdpWTZpR1RoOTBoUHpOYzlWais2NXpqMHg0aUF2NmwyRjZwbnRaaGUwSjRCQ1VvUTVFdmJIZzhvSjVRSmFza3FCNTB5bStQdjlMT0tFemJoeWg0TGNnZHhNVU92SXIxY2hOMFpuNE53a2l4dms2cUorcE9qWGdnSm0rQWdJQ0FnT2VmWVRkTVozMXNBSmdJUnJvVWh6VjI4cUdxRU1ROUFnVSttRnBTUEl1Mzk3ODU4cXpNR1hnTkFlaEtLa2lvekFNdUh1N0Q0eFVNYk5obFI4YjlHa2MrcE5vUmZvd0M3UDFJaTVtT0VZRmtYby93Zlp0VW9MUThqTTU1QVI0Kzd3eDZPWEpOOEQyb3REaisxYXo3Z09KdkNxMXJOMWtQbmM0NGwxdWozVk0zWnJEZ0s2YWRuKzNhL3RwSUpLWUthVUpLbTVtYlZTRjZWYUxjY0RURW5Tc1JWWGFJWEZoWU9iVVRSWERrVStwVUFRUVl2RFhmeWtkVGh0M2NYQ0RwOU1kRi8wdGFnYkxQTFZlVTltdWo3NXhGTk9qOGVnL3hDeHJkclh2QlQrdEFiTW5jSG5VempUQm1nc3pqN3ZlSElUZ1NqTE9UL0ZHQllLa0pOL1dCczc4ekFuVEVPS2pxSFF5Rm5YclpSemVMQlVUMXFFYVRZTGVEbTNkZXpYMGNlT3dpYmpGbEpvY3pVWXEvK0FUNUtqQXI0cGU2VmhvbnJmU2lUWWgyRFVodk9aeWZaNVh4K0hCbXg3dHlFZngvOXU1TVRsSWNIUld4ZnpORzlwMHk3WVNaRERrdmVqbUpZUDlEVVRjSnJraXNudU96THZ0eFpJT1ZZZHdaSkZ6L05LbTFZV3RzRVoyd2g4TEJjUFcyRm1HMEFKbVQ0SmRqRHordGNkN1Qya2VEOUJ3L0tPajRSSFJjdWFNNDZzNWdzcEd2aUpSOVlOQk1iS1lHWjU4VzJZaWpsMGxuSXdjbXBnQW5lOEVXKzdiMWNNSWpCNUN4SG5nQkp2M0haNXJNZm1mMHc3MXRVLzRMRzI2bWthWjZMdTNDT29nVWkxREdUS2o4bkVpNEt2d0xtWlFNMThnakZ0YWVCd2dXei8xWm5YZ3lNRDZCa2drTGJMNElCQUJVamNnTlZxU0svbVB5c2NnTGhXYkNsR2xWbGdqazkzcUpZYSt6cVJlaFZYSE4ySGo2eGZuOVVnckpnY3ljc2dMSitpdEExdkZTM1dXVUd5OU96VWc3U2xnbE1xc0VWeEhDei9lYmloK2hxbSt1T3h5QUQzWSt6TjlYSGRPZDgwU0NtUE04bGZqM3lrOFJSMktCdFBsVXd5alZTK3pKODc5NTNrZXNSYjZJUHN6QVdCRWdYeW4vQWl6aEUyL0ttTU1PUDNQR3Q0WGRkekNIaDcyT0dSWU41d0dFc2d0eFphNEJwV0EvMXlNcldxem9wMkxZYndlRTJRUjFkNi9RN0lPY0M2YWdqSFBkeFBwa2MzUGVjVTVUQjBKSzFZUWUwek5CU0lUNFlabFZUOFkyMnFndUVDK3M5TzlHbXdiUFVmWlord0t0UFBhZGNOWnE5am1DeVdHNXFlTE1ybEMrZGQ3WVl1dmVndTNmdlNCZ3BMYWRETHNaR2FtRzZ1N0lsTkFIc1JaanFjbnJEZFpJS0Mxdzg3Q1YrR3JmdTBCUXlyZzJqWFBSaGZBVmVIYVJzVFY5WEpsWTR4VmZhSHdNM1ZQSmpLMjBYTy9TS2JSMWJYbU5QTkxXK0trbUw1ZFZvbk5QdDVFWk1iR3JqcDdzNE8yM29KckFsZ25nSjBFWHZZMENSY0l3bkN4QTZtbjc5TVFxZ3EvRHlrUFQ3bHVLKy9qYWtvclc0NVkweFZJTVdobGQ1QU02VjRhTDZCYVd4N2Y2dTMrdDFFMDhkOVVlc2h3cENTdWQxZm5mNkVFcjJGcFp3UTI4cHZtVTVBYi9QdmhuUzBpUnNLY0RhWFpoZUJnbmRLRVBpNnBJRFBPSExHcjRhNlA2Tk12b3hLa25GbkZES1RkTXY5djRza3MvaDZESlMrbDZhSHlHdFVvc0Q1bWR5WXBvbU9IWHVpT0RyUy9sMUxadFhDUXJSZmtFckhqL0NJMnZkcmt5V3JvOGZpYzlCekVGdWVZVEF1WFg2WlMxTThhYW1LMVNSOUNuaFM2TlJtb3U1cGJiVjgvOEwzWWxuSy92Nks0SE5SNUZQUGdIaFFzcnNaVHUxTy9kZVJ4Zk1uc1VLZTdlYVdaN2I2NXBvL0FNZTNJcnk5KzV6cTEwNmxITUtLL05JVUdWdFg2UDh0Yi9lcVVNaUVheDcyY3o5b05yTTV6VW1BaE9DNkxRWkVxbGJnSFJNWk1XUk9HZzZuczJTalM5OTdoSDBhT0FkdUZONXJUMnN4S1gyUEh2LzA2azZnRlZySkIzTElINzZ3b0pwa2lMTC93alFhd0dJM1dsUG02UEZLS3B0blVLNDVEL09udzRpeEpoU05jQ1NoZjhvVDZuVG5ITUhWRjVlN0lDTnBJWUxLVmhIZjYvTGRRNWRJcWZzZ3JLTEZYVmkvTnoxb0RBR2FPK2FEVFVuUkZ3a0VLQ2lVbXhuTHBoVi9Ga3ZsMzRJYTNpenN5WE9kbmRYUjBIbTdFM2VuK3FxbnAyYTlQNHlOaFl0L3BTc3J0cWF4U0dDWHZKY0tmdTZ6RHVORExpdUU0Q0NWeWkyZVBPbGhqUG1zNmhLMkZVTHg1THB6emNlbjVTSTdpa3Rra24veGtrVW5BZW9SbFoyR1N6cGU5d1IyMUVwYmFPOVZWUWsva3I2L0pIN2JUbEtqNnI4d2dWR1p0NmVUSWY5VXBYV1htSzFTVmtoQXBhUExTY3RXVjBocXU3L1JvWTZzcGVtZEpreFhMN3FNbkpNT0tKOERGTThLNkRPcnJFajloNW9XbkE0YUpRYVo4cEwva0hnbjRSeTB0cTM3T241TVg3OC9EZG5FalU0RGk5VVZlam9XY0dzMkVrUmMrQjA3T3phdCtaZEhXRG9HWjJzaUJzbVRrOE9VVW43dVFrbk8yVmlQM0lBUjVNM2NpU3ZPV0pkU05uT1pSUjdYNEJFSUVOd29hbzZtenJqeG9yWWN5czdXVHViTU9EVGJVUDduN1FzNHQ2eHhtNzgzalJxQ2xocVBUc1h4TFIzcG9KZGZwenc0eUJCa2N4TnhpMk5PcVU0bmN5dW1YZStmcWc2R1BsYXl3ZVZ1dVpyelBEWjRjZ0F2b3R4THNNZ01VMEs2NDdOTERpUC83NHAxVElWRnZRd0ZkdHhMMXJ3UjN2Y1dQR2JWZXFnWVhXZGliYlErVGFFL3M0YnFSRGdJK1JTMXVMeFRLMFVXMU9UdFd5aCtZeE5WUTFaTlYyWmJSdXFGVWR0dE1lZTNnQVo2N3BxTFYwb2RLa1g4Y0Vla0dMSVZCS1VXQnJUbXdyZjc1TVl6TjBYL0FVYzJNbzVwTmZTSnRGOW45aG16a3BTMnZ4bDVDZVdXMGdLb1lPKzk1dUN4N3BhOFRNazhiTmY3bjJzeUNkTU41UVJ5NTlJS3Ryc0JxZUhDaWtmUUVrd1RPZmIwZkdEbmVxcExKVTUxSlIxcFpXL1B4VkUra3hncHMwczliUzJ0NENXZ085YnV2NFo5NE5DODRZVXJUc2pXbWhGUHk0YzdhalNLVjN6WEJSV25CWFZSb29WU2owV0VDdmsyZUFKTFhZaFgwU29oTXF0c3JDNVhwVzFzQ0YwWUVoTVZFZXFBZ1FvdnhtSjRvdklqcnZSWkJVVXVmL2h6ODlsNmphWmNQN0RCdERlN3oxcFdsMzNDSWV1RjE2NTh2c0t0UFJzVEt4emM4d1VTbndhMkZoRmpRVGE5L3oya3VXUnhQWXV1STdteFVsUms4SUl4K3RBMm9qbUVMK0ZwMC8wdmZHUjlESU5PQS9UUXpWbXMzbkxQRWNlRExYVVlFZ2VvTXFRNU9ST0lQNnBKVlU4bEllV0FiRGt5aWY3THpPUUliU1NTUlNOQ0twSVNIdUxocHJzdFYwWDdtUy9la1hTbmV0eWpRdFBod1RuYUxMRVdQeW1LUmhSdnZkWlFyZEpJMUU4cEI5czVLR0dXT2cweTd4RS81QjlCMDhWTDVCNTUwa01ROC8zb2pjdUtoNjhzMjhMSjhJZE1sWHNBZVZHdndtci96bGJZYUsreE9Icmp6cmFTcHdaT1Q2SzdqZmZ3cG5PYURxcUZlNDdaMjJjUi9zR3lrcU1HL1Jzb3J2NEJRYzZHYTlpRlJKRGVYQmJ1QlFNUVczZW1OVWpVRFlrZWNpamhXNnAvS0xxMFNYbDBpWTZWblpySUpJdGVvcXh2MVgybWxKZlNJRzlZZEN4cWx1U2dtNzZ2eXQraEdySk9zenBsWjFKc1BaMU1HcCt5cVUrZExCY1hyMmd4bndNY1VzV3UzNG02b1RQVE9oZm5ZQ2F4ZEkyOEphNFdaRk8za2xpakY1ZTJkbzZFSG51UkY5NXJFUTd1ajd0U2p1cDFyYXJ1RVY5NGkvUFBPN0s2NSt3K3FmTkp3WVhmc2dGQVhRSEY4cG9tbWovaUpNNzV5YStCZWVpUmRKbUpBdE1CQW5CNXNwUEFEM2Z2OEI3T1kxbGpnSTVBVFhCMHRpRFZMMU1rUWowZHR4RlY5WkNCUk5lWXY3UGNZdkQ4ZytWTGxrRmpNNEdjZ3hITG5ySHFYOTVQZCtJLzlMdll6aGo0OC93bTdrU2doaUJqN2o4eEhhQmJaSkFnS1NXaldrU2RDcjdaZkxEekt3UlRtNFUzZ0JMRmpjQWdGbS9GVEZwc1JCZzNIdWFDR3MxMnBDdGxLRk55d0hPOHk4RVVjdmphQytTU0ZhZFlkbElnWFVqNFBja3dhbWNHU1VFdGtwdXBoNFVCOW9YeDhRL2hNTmp0M1pydnZsUlhSWU9pSkZZd0lqT2ZGaXlhQ2hrM3Z6R0xGdWZxRFkrZFFxNU5QYTJBMG1XQlE5TVhRT1ljQWxkeXh6cXhBK2xjaFZWWmFhY0NTL01QWUdVSHNGZkVWY2pwWXJBQmt6dEsxVXcxOXdkNDZXNDEwMnovSDV2QU9XUDlWVVNNL1Bud1ZvYm1jT0RQNWltM25JMVRiYXlIWjdRU3JBSnBCRXFzZm5acWpreVhlRnBDY2NrOVRyZmJldnh0UnE4dHlJbTB2NnozYVFoUnRRL2ZhdVRzekpDem1zQ21xbDZYcHFnL0FZSXMwSTBhaGk3TGhOYzVtWUxNU2h1TnBhckpGN2hjQk9DNDEyaVVPTGllcWhod1ZzaW5ncTVJWmxBYXh4STNMS0IvWVRSTlFOU1dmMmVabjQ1eWZHVnhVZWMzYWZXYTA4R0l3QVEySkZtSHZTcTNWOHh4M1psRlhGMHpOODFpeE45YVJSVFo0NUl4Qno3aXBIMXNGR1pQRUkyM2s3YlBPcENRQlJ0bGQxM3ovR1E3dEU5YnNlSEM0aVBMd2RPRDlwZjhvaURtSS9qTjhxQjNrdkVkbHhZdE11dVRadW9keVB6WENZTVNOdFdibWgrbGJVMGgzN1BOSmVwTFFHamJHY2FpbnRZdFZZdXR4Zit3Z3BabklTVEd5Qkp6d3pZdklkODZpd3JuTktJNk1udCtOK2dSTTdnWU5QZFZwcXY2OHRHbmNpaFFPY3FvNkVaMXVnd01iU0RGNGNJV0N5MnkxOUFKYXFiTkw3SEdWVXZzc09uRktjeURIQlpRU0l2VmJGeDZZNVJLRnhHd0kxQndxd1ZPWmFzQmwxcjZ0V2xaNnhmaGhFc1JnTTJXcWhkV0tlYUtoREJWKzFXN1kxck5iek9RQ0RkMXZJZE8vSVd6MEdFc1F0SjgrbEFDL1VJODBlV3JDRUE4ZFdBN0ZCZnIzVEw4VU1IZ1BpUFpGcWhwUGJMWWZmQkMwV0FEcmpOdlliNXM5c3FubGdBK1BjeGYxbEQzMWxlL1drcSt4am4xbE1YMk5aK3Vreit4bjMyMmNuOE85ZjkvMUNuOE82QU9nTlM0cktVQ1NQMXlHVGxyNktqTUtyZWhUT2NkU3ZMUDJ2ZkVianZvY0xIUVQ4djhEMzJDSnJvdWdpKzZTOHJoclIzbVZ0bTBUNTVKc3IxNVh2akFFWXJWdnB2TWhkVUF0VHNoclFMbjYvL205WHdKV0hSamF1eVp2L09FTG5xWnhSbWIybE1qN2pmVDlEZnlic0VrWUJVRStPdy9Cb0E2K014L2VaZ2dqTnNXYkVzWDRTV0NYNitZN3hTUmpoRzZDM1B5YmMrN01PU3BpQzdLNkdHdFBmT3BXOGlFcm02SHNkWkhEaFBBMGFIdEYvRi9NWFNFS0Y5TFRJZTE0TzBlVm1qL1RuTU5qYVlXYzFXcVpPZGRuS294cVFaT2dvLzJZcFlsYVplMTRjZDlLRUg3MzZJL3VQeUFER2ZKU3R6N0lwaEJwaWtPZjlvdURNVytYc1hqM3BqSHBKUjNCMGNhQWw4cnY1T0xSR3doWG5paG1uTGF3T1ZEZXFZWjlCNXJ0a3FVb1g0a2MyU2JhSDhjaWZQakFpQjF5Q0xYMzA4TE96aWI3MTd6TXA5N1N2em5LVVl5YytFT2dDVzV2Z3dld2JESzA3VG1US1BPYnVyeGFONFZYcDdkaEZiSTFyQ1hCOG5OWW9rSHR0ZVBaZUtwY0tpS3RzT252dnh4ajNManJ5MXVGK2VuUVJ2TElmS0hkekl5ODcweG56YUhBdUkxR0JRWjF5d1JESUh4WVFxM2xlTTZyV2pId01EdVNReHpMZTVYeVN5K0dLUWQwcENiWHJqK1F5VmU1YThxQTJ6Z0VTRkpkZm1ubkU3L0FHdE9pUzZsek1nVmRId2F3c0t5SmJWell2Z0JnWFhYSFFvN3Q3Z2VYcnBsdzNHc3pOUDZQOGgyR1NhT1dRN3hBQnZXTDVtQmdxd0pXeFNuNk1HMzcyMFR1d0R3OXRhZUZzS0ljMFBJNWdKaG4zZ1U1Y2RJYVJuYW12Q1hXejdJRi9oRXhWQktZbGFWK1JxRGdvcXMvUDJJa2FHSjdPMGxkQVFnT2hKL0pSb0RYVHhNVnlpZ0RzWE9BYzhBV25PcVJCMzMvSUhucXZrblpyNWdZNmZoRTZCSWJpL3BDWHVmV3p6TysvcXFPVXFsYmQ3UmFmOG1seUZLdEsyQ3hueU4yN1BETDhrNVpwV2NqQXJKcGU5YkxCQkQzWDJ4aGtXMTRIdVR4QXFhK3hubURSTTRvZTdjVDVRZXk2M2tRUnhlb0lPdFA0TEFwcTd2Z0xmRTVtYUM3Tm1sQkNnT3N6czM4L3d6bTZ2SzJvYnlQRFE3cUpDK3dUZ0RmL1pHb0l3MTdoUG4rSnZ4dlJQSGlUOTZUMXl1VzZhT0lqNVdUck56cEYzN1pXYTdVczZrWVJWTDhKUEd6Ti93L2FkNjV1VUJlLzFPOHdNcWpjTEJQdVpHRXp6cXBvdSswb2NYRVRiOU5jU09vcWxWNXdDZjdzMWF3blpwRzNnQWVPSFpTMXNCZWRHRWQrK1hlbVNuck8wUHhwZTNTMjUzV3V0eGZ3QWRHZkl1V2R5R0liNEl2ODBjUGl4NWtxLzB4eTlucVdCRG1HeDlVOGFGTGdOWkFUbHJ2MmJTcGxXWHJDaVQ4N0grbVZzemM3M3d0QXN6VWdMTUFXT3JoRGZYL1FFYWdZd3V3M28xaFJSMXV0d090bHVQTjZaMVVtMzBjbFBrNU05RFlQb0l3Zm1LWDhqK2FOVzhtZUp5Mm82T2NFdEJMelgxbk43M0tJWWFqSkNBWnRrL1pQSCtUQTN1UUZuZGIvR3dVaXlMUzdBVWR1L2pBMkcwcSt1NjRvSmVvczdxRWEwT1h4eXAvOHJCL0JrTWxBYS85WFJrWGFWQnd4cnBlQkxqaVJrUmc4NzZoc3lSLzdUdjZWeEx1Z3ZJSVFqUlYxSjFCTHlkMzNjVzN4M2JVYWU3VjVXOHJYRlRjR0RaTmFNWUtDRS9PNnFSVzRsQXZnNVg4cEU1ZDdSVkpId1kyekZnWlVkbkRUcFJjZkdjMHJraVR0c250R0tkZWF4V0tqaDJZMGl5dlBtQklsejUvZHBNV0MwTXVpRndGeFA4V0xwK2s0NnJYa09qZ1NrazJHbDNJeWtnK0hqUGNLTDZxZGNqc0Z4eGh1dUtvMldPUWdMckRxZG1reEt1bXBvMzA3VVdkcExoVmE3ZWpzcml4dmdIS2Y3THh2WnoxZnB3TnViL1UwdVY2VlRNYXVrS2RCY3B3M1I0L0Y2Y2ZPOHN5VnF0MXQ1RGszdmNXNlZ6c3RId3BGT0ZnMkhtNUNuTkUrZzNZMkxaT05hZWFoRmtsT2RwZEhGQ0RaVitUbnBTMVZzUFpZY0wwdEE0SVljWVJyM0FRajYxWFJTSEFPUlY5eTJXZ09iZm1rOXk0V29lWkdGQ0R0MkNkOG1oTFpoR1pOWjZqRkVULzEyYlZqUFR0UjY0NWEvZTVSWVQ1NkxBc1pHakxIdnhpS2hmUHV2Y1F1Skk5RmcxamN4aUk5TTdSZzZGcDg3eFA2T2NzYjJjZjBlOXlwSmZNMnpVRjEvZHhZRkpsSnh3WFBBRUM2bHh0YU5qMDlxUXFXbUNBZ1dKRDE3aVkxNXpQZC93aE94K0M4a0JEaC9DTjl6b3NFYVRnTzF5Q2xHSkw0TVdnSlNKcFRBcGpqYnBMeUpJWWoxK2NyVDhWU3JlMUFzRGZYL2RxVXZkV3VHd1l4K3lEeEFDVnZxZk9DdXloSEdSaFRycjdvRkpQZm5GYmkxS25NdmFMZVlFUGlESVlqa3c2OStvdEVNLzlndmJPRktmWjVCNndJRlNiaHVvbFlzb0JFNTB6MDRQeUVpeFNNWm94eVVwa1ZxVmJvMW5jK3hGdUNHa1hBQVlSNVpxbHNJenRLQjBic0w1cUcxdE1hanpaaGk1QlhUZUxKaTRZc0Z0K1hPOGJvdEU2MHl3WDd6cUhJSkwrRVFaWmVtT3JUZ05ZUmFIR0kvZWJFTllYTjdPbnUweUVuWHFBcW9jdmxnUy81VVE5aWpDNS9xQmdPcmJPUWd4a1FPR3YydkNJU1A0ME9iYjNWVi91d21rTVk4eEE2Q3VkQ015SFR5c0FPK1BpZlpFSXZuWmVFN0xtdlRlRzY5UlQ0alNocVlNa25lZk93KzFCeURMUlpTNGJ0VUtHdVBBUG9rVXZWZkRoOUxNMGhNM0FUWEJLNHNKSDRmd0g2NWlTbmVYYkI3VWlkUVg2Uko0NTZjZXA2aWV6U3g1MExsMEZKS3pxM083S1JvS20rUDJKd284c01uVkRyaGhLMG81dVJBTU01STFTcXU2amZrbFB0OGUvNkhtVktISGtvTmdwVFliTmpwTG9LZGlVdERVN0JiZ0xYQ0MwSXl5ak1VTHk1NlhqYjZXZitVaTl5K00wY0MxZ1hxeTZ2elJld3hPUkx1b1dEdFlWNUNHSktxeW56dmNPNlhjVDR2OFpHU0dleElmZE5xUTRsSFFRMzhBOE1SQUdzazhWd2gyVFJrc2dVbENVaWJleitYRmV5YjVJRGYyWE1IaHpuUUxMaXhLMHl4eVBVVld1SGlOTkZFbGp2N2ZydDgzbElZcHpPQUp0UWVXRkdOTW1aMnJRVG5XYmszQndUbVJ0M3BLU1NDdjRJc1U4VGVSNDl2djZ0Wm92NGd6U3JIVStaVVFvQ2xZSXY4ZUtraWlSNUlNeXgvYzJiSnMzZ05QMFBpV0ErWmVnMjI2azFMY1htRUVkWkxZY3ZuaE5lb1h2YzlOckdsVjFDOFgyQkU2N29DTlpOaEFFTUVVcVhFdGlZWG92N3lwRHlVU2xaaE80N0JYQlZ1Z3FEUzRIVjhrSHZzblQ2QnQydTcweVlValc3SGk5TDB4VnVOS0NGMlAwNUlOZ3FVL3I0MmFuaG5ZMmllSG9lTUdGWW5KdlNaRUVFYStNVklyWlZETFprMzFzZG9SWjllVTBpQlZ0Mk4vemlJZU5STWJJRlRBem1HQ1ZNRkFDNDQrV0RxUXFxakZIKy9wV1creFhJQy8yV0NmT0JiKzczNzZScXR0QTk4VWFicmNBdmFWUlp1NWVubTdLMlpaWEV6dVo5WFY2ZmFxN0hkQUNnNlRqZlFsdG5UZ3BBK09aS1pHQnQ5aWRHNjBUUTdNbHBHaGhDSnAvVEQ4Sm1LOTZXSUdQMGVrazdXWllSM3MyZFpNZDQ5bWNYdFcvN1RJckNRVDdTZmk5TTBuVGV5K3MwS2FUdUk3L3hibmk1QVJlV3lheHdHMW9MN1NobEJ3cW8rSTlFd3dqUjdUcjZuOTRWaUJRQVUyVnZFM1JvalkwQllzaHhiemNaejBjUnppZXhGNm83Q1VRdHpPNE5LN29aQ3pKWVptZm9ZblVwYm85c3h1NmlLTk0xaEhsbHZ5Y2g1ZzJwckFERThvWVlHc0gyZkRrRHJWMk5OQzNodHdsQi9OTDVRdjdHL3U3b0M4Y3RwSUNwbDNKNUpYY3RwYyttNnAwaVA3M2J4U1lIK3Ywb3A0Nkhuajl2UTNFU08xZXJLK0x3RFVZNWorKzQ0ckQ5dE1jR2pnTlBwYzE0Z3FDS0ZnUmpEWE54cVBtRmRacWNEQm5tOWo2YzNqWE5XM1lWUFpIRmFpdUx1TU4zeGxxd1VKRERkQnNscTJ2a2ZNdDRlZkdmUk5EN1dJQkJKOWFaZjRsbTJSMGhDMXRqUDk3Mll4eWhPSCtRdU9BQzdLWjhZZHNnVWQxS08vSWNWKzB3Z29MSFpNdlJOcSt4dXpqUHlkM1ZWWWlmQU9QeVowREdCUDNIRzJtQkNxQzRLQzJDaXR5dmpWeU1zbjF5NktLR0NXV3dueTdMc2RYcFQ5T2VHdm90Qmk3Q0Q4cG1XbHlQVlM2dWdxczcrOEdPdXBvK3BDSFp4QmhjdWlwZ3YxU2RIc0tCZURpOXIxSFowa0xEa01meXBuM0d3MXNlYUwxbGVXb2p2K0dYeWcxS0VrV0NIeGMzU1R6T2pwVmF3WHpuZW5IMXlPZ1NpRGZDSEZNeU5YdnkyK0FmcmxjMXNoekJ1WjMzSFp0Qm03SXRzbENtZzlqc0syTHBpaHVmYUdoMmxqcms4OXJLT3lHWElMbzl0V3NMcXZJUTBKbzhhOWtUWDkyblZuNHZQZHppNGlrN1BKQ1pVOTd2SUdXOXdhM3JUNnNpRzZGK1NRbWVOVnpwQXZBZ0NqLy9QZU9KVVNzbHlUZEZxK29EYkQ5MVQyL2ZJNkhVNkt5cmtYQnR6Ky9ERU4zY01QUHZTeTN1M2xaaklDU3JkdFFvOFl3b1B3V3RMRHZ3RExRZ2lxM3h4UkJTR2dTbHZBSHB2bnFXSUNEWHYyQ0lPSFphZU11UWNKY0xvQnVRNU8yMUhvZmxzTGFtbnlPcXNlcDkzc3ZURElNYlFkSzdhQjhqNFdCRlFNa1VkRUt3ekdlWnEza29IcFoyajRxazdxUlB0eHhsYXZUN2xYYUF1U2p2ZnJScHp2Y3UrMkV2YmJQRmdYU1BlWHNrZU1QWWRQWUpEZ2tmKzhIMXdQSmtBSGV6NGNVaG4rZHd5b29qcVp0T1BOZ2I3YkIvNVdCSjcyVUFIMUVvU0Rqc3NjZFYxYWFqYS9FanhNRFFTWElIOFZzZ3VyZjUxbFl2MGZTUFpURGt0ek5jVjZreU4rVk5UbWFaQTZQWnFKbUViUWlWL25FemVnVnlZcUNNbGtqNHVhdmdaUnlhOXFyTjNUNjJLaHFMN24vTmZKUXVscDZ4UUlQc0o3MFlrMSsxRVZDSVVCTDM2ZEZETDZmSm5TSHQ4eHNVTjRlczQwbGpxUms0TzhBek5xOTdmd1o0dzR4c2VrYi9NcUgvSy93YlE5czF0NmJEbHdneExOeDhmY2U2b25wOFdjdTJnMXl5NDZISVF3ZU5vY0JKWEtXZW50OTROLzE3L3hjM0JqS2JuMTdSMlJWMytzYzBjSVRaQUtkTS9yNHc5N0NpMkRYWW1oeFV4K05VMG9DNk4zbjgxcDJPd29jTyt0NHk1UE1NOUFBa0R6VVNFNFBHSC9ZY3ZUN0xIaC9tR2FIWkdiYWtHTFR5K0dBN1FaUmZMbVc1OXRYdnRzcGlQS1cvK2N4ZjhxNWEvREpIMUlTL0NQQmhTeWQ5d1JvZVlzWEcwckVRejN4T3RjekRJVUkvMXcvSEFOK3g4eVFsMzlEcVg2R3N0R2tlU3VZaUtpNHRXRFdmRk9uTDZrNm9ZSldXK3prRWtuRkY0TzRzc0I4Y2ZZNmtwdXJQOU93cy9UR2UrREhUS0d0MXMyUlVKaVVFb3d0aW1wWlZLMGRISGlmS2hyL0YyQ2tvbU1TTkhQT28yQWpUdlVNTXBKK1h0ZkJ3S0xkT0x5cVNYVjRQZWNNZUE2aW9nWlR0R05tMVp2d1JJaUorTnBDdWxFcEd2eFNzNWdXVHRCR0ZNRDd2K1B5WjQrdGEvRzVQN0w0MkZvSndwRWJhV2M0eEpDQ1M5dytJREtYb1IxZ3EwRFFCTmFNRlJUdEgvSFRPWjVaOVJrWVl1em9UbFJ3bjIzeDd1V2k5WlFybGwvenczMEpzU3VHdVFqVVcyVjhjS0ttbUVlRVdvVXNJbEdrK0hpNktka2ZWNHZodURiQXJZbjBPSWlRZC9IVXdvYVl2Qm1VNFpoT0lnMHVvQ2VEcjNKWndCUHdTeEk0V09YRFZaSE1VSGs2SlF0YmlWcnRaOTZDSW9lb2MyR01JOXFxb3ZkRVpFZzRGc3l6cmdGK2JETmtzMzQ4OVlIN2R2Q1c0eHp5NUtFamROVHpKWDRTdzgza1l3TDJ0ckJwVUYzYk1oeE82Q0l5aFg2dWNtazJUQ1QxRStYRmtyaGszZ0dCUllsOE5tUlNEckhVRFh5N1lxMGRKSlpyblQ5Mm5rQkt5RHpQM2pXMWl4VURZTnN0NUNsSno0K3hHbW9HbHBKV3VjMGNQbXFNK01sZzF4SXRFOFRqZWZyZk1sRGFTWis2RzljZWlsUmxjeWJmWlBDR2VTdXRua21oQU1SRUgrWTljeUI5ZkhOVVZJSzkvT1lTRjVDQzFzUXlhbDVoOWtETVBzL3FxTlZvckVCWWk4MlJCQ0JWeDVaTGdHM3F1MDBFakxFWXFSUFZ0R05rMHBFazR3WnU2enliUStlTmZQQU10a2Y0WHZIbDVMSmZhVmh2STJCYXdRQS8yQ3o0NkFOYnhIa3RRc1pNZXNVSFRPZVkwK1RiT3czSlp0YlY0ZzdiUXlIMnRqbFlreG81WVdzVTMzOEhzQzlQbDY0YXJGcUUvK2xtL0dOOHp6ZHFYRzB0eDVYMUZKZTVYU3V2SlRRbXNuTVV4eFlPbmxnMGxpOHBHcTUwS3dScUN5cUp0VDRuTmJrUEN4dTBEU1Rud0ZFaVVEUU16OEZ5UWRESXdTNkk4NUR2V2xPOXdGNFlKNytvSXVvN1BKR3VHL1N5bFY4MEFmNVp6S3VQTXRKVnFFRE5Vd1pJZXJ2TUR5dFIwdnl2MzBGcmsyblVuOC9RcnNzeElJNDhaOVVTZWQvSUpxODd6bi9nZHMrYUhad1h1TjluMTRVS0Y5RUlzYlBNU0tkbkRWVi9UU3NNeE1jL0lwWHFYOWtOdjIrcm5Ndks4R3VZTHNqQXJHeFUyRXJMNFpNU3hiaDZLNFVUSTl5REJGTHBrOW4zVG90WmRhc1BVVFV3Zytud0xDdWIxQlh2WWtWay9BOGFBV29RSUk1NzhPa0pGSTF5OW1lWUdxbnFUZU01Nk9nOEdVQm1WZkMxaVNTamFWbUtRTFNHQi9xZmRZNFZMTU96NUVSZ0Q3Y0YrVFlaNjlma3NRaGFUczBDWnVnbnBhTU0raGNFemNLak5JZndZRlQxY0Z2SWZjM05FUFc3UGc2VTJoMi9OU1d4bVhhS2Q4OWVlQlNIL1U2RDc0MjJSMkFrQkV6akhzR2FOY2hxNDl1Y0lBSUdjS3AvQm5ubXRTZ0Exd3JIaDlnYlRvaHUyUndROFdSQ3g5ZjRTQ0htcXFBT2RBV2t4N0tDWEVqc1p0QkFJOERaRDBJSGM3ak1HZ2ZLcXZ6cnhXeVE5UjJTUnNWNUQ2R0xwLzNXRFY1NWdKa1U3cDZPVkF5ZFpJMG5NNUtQTVNKMGhob25ZbzY1MVVnNk9FcDFjWUZVRVMvSlVNWFVFMXA3NFRENy9mOUg1VnE4RDMxeUlWaUczcEtQdVJMby96K2ZseXlSdFIwZmRBbFlqRnI0QnlnTkpiRlA2WFJQYVdxZXJ1dVkwM3M0T0lhMlpDdGI4dk0yanNqUnZLR3hvTWt5UndGMmZJYjJvZW92SEFuMWUyUVI4TkxMdnBhNCtLMWVsZ2ZLTUE4S2VCcG1MelZwUkdKVlFaY1ZTci9NUWRhUTlYYzE0M1FrNGEycWtlQXZWYWxZWmoxTDN1YnRMN2RoR1M4c3IzcnVlRGU5aEI5N2ZxaDBoK3Z1LzlaRGh3R2FwT3BpcWtQSVI1dE5xanRzYVR5enRvMnRhcWVSUzZOTEtaTWFCZ0YxeERRQ00wWFJpdnZLd2lpOC9zYXFJNnNiWnJaTU1sRi9iaXlIcGUvQzQ4SUxMWlc1QkdqYzd5dk1EbkxLTDR1bEJFYmc4NzR2TG9KV0xqRVhQZWtIS1hrUXUrc3hHOHhBSU5qa2s0b290Y2JwWUtQMDNSZFVQblBVYVBsN3ZMb3pRVTJqdWFLMUdXWTN5UWFMd3l3eWJTRTRLbnFnbDVVV0JpRmJWMm9iNWkzN2FEbnpKRXdraVlCNURDQWNVQld1TVgzNkxVUGtWczFaejJ2TGlpeUhZeXNLYjUyVHFrNjdEaEdZK3dzaEJoZ1RNSStvRTVZeXhQNXl5YlgwVlpwbkpENmpQWDh4Y1R2SzduSEdlcmd0TUMwVEg5anVhRHhzNFRHU2tnQW90bTN3QVM5M2NObGpUNHlvaGtLZ21TazBrNXQ3Vm5yRHdDakNQbEE3ZzVJb0tPYVdRdEhtSk1rbldlOTBSTFI2d3d2cEJBUmh5cjl2d1Z4N3d3bWJLYThnWWZiY09Ldmp4VWRNT2NmYW5ORDBNcGw3U3luZkVJYll4SXdoM1AxeUd0WjJnYXQ3c0d3d283aXJHcWd6N1dsWGY5ajN6bXRwYmhpZHo2ZXFZYzNGRFZoVWpQY3kvREhzbitDMjFvZENJQVNGR3VOdW0zQUFOdzVKckVaMGdqcWxMeWNSNm0wVG5HOFpIdkFXR0M2OE1ZOW1rYVhKdERSTnZmaDhSWWtySy94cFZpQ0ZQeVM0czdFenBlYkJud0xmblpsdC9aUlBrZGt0QngwQUR3SmplV3g2NHo4OUpvTlVhUFZYR3ZYcjlzWXNqcWhLdm1GbmJ6V2ZjUUdOUzA2dVhNSlgzeUtSbWVVQmZwQkNBaDBVa2pZLzZNK3NOcmQ0MnFZR0lHeHlUdlRKeFJaU1RraUtsM0RacEErREVoM2trTXpXcUZSOHZoblNnR2cwUUtuUUpCQmVYLzNjbU5KOGpZWW1Sb21aUS8zaHdwaDhPdGNUU1pRSExzTmFwOWtJb2k4ZFhqOVh2alZlcjdmaVM0d1NoTVNMcmljbFJIWHdlSFhsWE9sczNubi8xbWtSWkFKS1FlQkIxN1hxbzVUa3RIZDVidUJvcUNselNoc0pMdlR0a1I5U2ZSY0UyZktEeEJBM2YrMnozNm9jdGVsQjNJcXZMVFErUk1WdWdJd2pDYTExQmpxWkFPeWNRSWkxeU1qUlU4M3F3WVo4UFF5T0syTVpzSUk2cmdhaThyZWxUZkRDT0VlekZlMVRvNkNvTUl4YmtwMnV2SEhSUlhlS3ozS2Exb0lBRVFqdVpPM29GbXJUTXdLOXpIM01TNVBjWlRKMzFPSEpldFdDSG1GWGZrbFpRcXY4Tk9qVklUaThRREN2bXZKR0lDYUhxRTE0UlRaQk1MYkxlQ0dLYzgwVEp3c2xlaC9iRW8wY3lEVjdDN1pNMFlNbXVFcEJrU1V2T3Z4SWV4NVFiMVNMZGM5WXBIM1FWc3hjUGlqdi9mdlJocnUvL2NNdm5xMlpRdEc4N09TdThoZy8xTzhoZGliV3cxSjdFM1lhR21kWGE3bVVlUmFjaWdjRGxZYVlPUWJDOGVqSCs5ZkdIdGxNWEhPeW9kbEhsblV5OHpZS295SDdYZmluWXJZUjcweFBTNFZBWUppZWhtUU5pUzhCN1NNRzhMcnpFazhTUnUrU0ZVY2ViRzJ0S3lrSXltUUE0RjRCYjh1S0VxY3FacGcwNXRUM0o0S3RtMU1sL1l6blQxOElpY1IxaTNnWEIzMjlKTEpycFZIWFljTk9GM1BKcHp0bEZFUmVwUzZPdmF5ZnlCNHFuVDREdDkzMGxmVXRPVEtZR1VGdnhmMlFqRlF2T0tpY3RPS3dhOHJlMGg5YU9nY0t1SDM2YlJqRUVGQVNYMC9GcDUyWm9MZEpmaS9PNVNGL0NRTkZ4QUwvOUtTTmRVeWpYaGxhNjMrMVlUZGIxNGxOZkVIUnQvS1pQUlV5WGlFM2NxWC9VcWtna2dSOEJnclNvQldESE5rYlZKZjluTEVPVlJQNjBrSDlMYkNIY3ZXNjB5RUVoNUY3L0tJeGRQaFY5K1dhY2RvR0l3ODVTYUhrWnMyc3hLQjhSYkk1L1RPZng3RzMwN29YbDAvVDhicEhiazRwblExeWNjWDlWMEtkSGFwbGZZMmlqZHd4RWNCZWRPaTdmVytPbVRyNmtaQmRRVk54azNBL2NKU1NFMmVqb1p3eGZ0NjNmQXd5UWNRQkd3WjJMY1VRbDJ4K3B6a2p6OGxmSTJ6VFc1SHZWVzdwVDQrYmxjUTVTY2NoZStqOTNoZzlFRThURmxxOGhxSW1FRmcyWlF1MVFOT3lCSW10WFpodFIyWDVkditaUTdvd01jV3pFVVFBekxBVVIveFlkZjg1SE9abDdaUGR6a2VSSXVkcHptVlp5Z0hWZnZvV3UzVHpOQVI5czVQNWtGMHhKMmdtNXJvcDNYOEtQTlNtK3NCNll2dER1QXFHcGtqQTQ0aVdZSXRsNW50b1dYcHpWRkh4THlkNmxPVGVKV2tpMlpybDZOOHUzcUsrY3pGajFRSG12Q0V5cFZsdnlmZmZkNFIrU3l5eklnMnhZUFNKaFlVWVVhTGN0cXAwUDgyWFk0enBSRzZma210b2VBZnZPa3p5US9jWVJIVlZPUmhPem94SUtrd3Ayckg2cE8zaDlzai8xUVJtTld3Q1JRWmZxeXY3NTIwQlVKMGJtd01YZG1CcFJraThMWEVqRm90UFg0RnFicHZkWEVLakp6aDZsMW5sKzIvUGZ5MDhkVEh3OFI4OEs0NG9rVlBLRFl0NU5GUnptVVExOTNiaFU3dUlIQXBVN1BoODIwR05OU1llVXVlR1pkYTltNDY2dFltK1FKOTJQWkhjbFh0WnZiYTlKM2VjVDdqUXFJZ3VDWFh3K3pSbFVhbzNidnZFMUVqV3NuRktYQ0VBdi9GeGx6bzVFNU5kdXlmaDIzWWZSK2NhaTJiSGtBd1ZPNGRBZmtiR3pjYXExa01xYzNXYm1hSU9NV21VUm15Z054OE1nTXVQYk9uckgveXplWHpSZFBYZUhXL3ZTYzF6SFNiWEZ4R2xoeHlhSVB0emVEVSt3WG5NeWc4RitDSzNwUG5FVU8xaVdkemlsUTYzZk96RzhrYmtFNHBlaTc0blM3WEZhVTVoL1VQRHpJeXRzMWlscDZWVDJtQi9zeFVqa3MzS1N6SEpNaUVsY0ZjVFZwdEJoYXpwUDM0c0M5NEFZSzdnQW5aeHVjT0FuZkNsR0RKdTIvdXI3bUZDR3ZTMUkvaHBxc0NDRDRUNVMzcXYxSVdsRllTNWE1cDJCU25KM3k5anpLcTUyODNtekFncUlxZkJMZ3FaTy9rWUVubk0rTnVXUU1xZzQxMDVFb2JSaGo4T0VCRUJHd3B2L0pzNkloc0REUEFld3RJZ0RVK24vS0ZHL3VreC9XWlZWaTQ2RDZ4Rm9pZHZhdGVyYzBXOW9lY1lXOTk3aDg2Wk5DSDBsY3NHRUl6YnBVbkdDdHl1ekZhR2JHS3NhYXJKRVB5M0RGOEF6UldxNllTdWRFbHdZVDBtZml0MGd4Y0h2OFhJWGJuWlN5R1lYZmROejNkTExiNHZBZU9IY1VoQkw5MUx6MWNCUU1ML0JYWENKY1pYb1hyS2h6N3Q2bUR6ODlaVkxubXJqbWNuL0ZPTjZiVURrSmFHVDZJbGRWcmVsUktvNmtRaUVqZ20zY1RpWFk4dEJNS01rSWhNMERxOUNyQllkNjZtZXZ1SjFjRUl5Qk05L2VXK0g3N2xaL243ZEZuUzNMWFFZd0pkUUZBZFRWSEdFNkNRNlFpOWFHWWRaSVJFVHV2OVVYZ29JUEM0VFVCQ0dPVzBUR1JhdUErZ28rOHVWVFpLMzM1Y1FGYXY2N0ZIaEVRUEZsWG5pMlFtUFl1VHJrT2NVcmRCWTEwa1BPekRkNjFidThEbWdZWUhpVVBEaTNQSTZnQ2NIYXUxdk55UW5aR3BWdEQ5VG1JUXZQelpxWkxLaVI5TGcrY1pqclV2Y2xTbmcxdEdrcjJleHliQlBXb1lVdVpDVnJJT2FtaWZReGRLVDlNKyttL0FLMXQ2VE9OYzFEdTBReUdMUysvdzJZUU9rNExrUUIxTHovMWhkbWhvYXd0UXYwLzdVZ1pvbFZvVjVkaXFqUzBVY25iQitmUUpXd2t0NC9DckFldmZiNERHMmU1SEt6VlFrQVU1cE9pd0o2TWV6b1k4cHJlb29zbGZrUS9zY2pjN3ZBUWJuM1JkMjM1NnZEQVl4UnRpWEp6aSswZ01CWW1QSk5SbWlzK0pUYUltdFpBMWpPZk1sVmd3VXRmNllYUUdKZ0ZPVktXSWhnUTN3cWxMeDR4TnBlU0tpSTd0S1dhQm1CYVhjRkxrM3YwbVA0WEdudUhCK3M0NUYxTnAxYWtueG9wTGEvVzgwT2lNbS9OZ3ZkdFJCK1JINS9odHBJTjJnQS9pajI3NVNzSG5DOHZZN2k1dHJueDR1Qm9qMndSdFVQVERTK0xQNzJPZ3VyUDN1aEtmbHVZYnI4N25VUTA5TnFyNjQ0UVV5ZlpieU54cUlYc21OTy9WeUs3ajgvZUpLWjVMTVhzdDN4OFhyT250dkRPbE5ZTUc4YldhWlowYzkzbEFnMG9PMCt6VkZHRmNQcEVLVUZnMjZ5VkhvZ0tWRDdZZnVxTEJPeVozc1doYXlxeVdIank5WlorL2tVbC9HN1Q1S1YvWFJ2Tkw0ZzBvNWJkdGVseE9saHZIemhxL284aFVzbWhMTVcweUlZbnVHaWduYmI4TGYveUd4M29VV2hjbStod2JydXVsazRPc1JKNytQZ041TytGeWJJMXhnRnZRUU12UXVET0xRWUh5Ui9XT21RN205cmQ2MmpKQWJFdkJTelErYnJmZW03Rnhvamh2aWs3SzlvM0tKcmloWjhhTXNkeEpuTWcyTDFhSmszNEpTN3F0ajBaUE5sT01NMUtiTHhQVEJvM2MweUdTRFF5UytMWk55cWpRNTY3d3VMSmxUakhvUTMzTkhqSlVUV0pVdk5STDc5ekNSdUNnNnJTcXpUZGZPRmVOZ0V3ODMvQjJaaFR5aDFUajNjNFVESEtrZkQrTE16ODdLSTd2UmlJSnNRWmFxcmFCY2RZZm1uUkhNdERSSzlIaVFHOEsvUUlPRExObWt4aVYrcXQwbjhYMWpQQU5UWUNQUDhGRmJQbmRsbzlLVXhsQWIrWkhFYVNkbHF3cFdxczA4K0gyZFI5Y3FDMzVkakZWUFhibmhGdUx3Q3NJckpUcndiK1hTSnNzdXNwUk9LUXBhckk0Y1dtU0JRalpwalltb1lYamdWYWV0QUNFd2lTMDVTOGUzSVhQa05DUWlacG5tdzF0a0hKS3RWSkg4NWVUbW1mdkxJL0V5V2RScm9ZeWZ4cE55Rm1BT2t0RTJnWUpBNzBGSVN6QytqMEZZSTBxTFg5RGRjbTBERy8zZVZnUmFBVnp4RkFmMkhYRk5pZEwvSzRieVltR3BHOEZUY3gzWGRrdHhoSU9pakVHOHdLKzZ0TVBjbVJqK0FEZkpxZFpJYkdkQmRIZ0JTMlpMd1lIbGQ3OFJpc1JYTkNpZ0FYemFtanFuRmt1NWgzb3VQN3JadkwxTlJYcmNBejdkVnYzcWd1YUxxSUpEVjNrR3RQMy9lcXFhWE14L1p4blNubGdpeUxTcjlvWHVUblZZK2ppQmhhSGoxSXVLTHg3bVFrOVphdStKNm8wb1pUSFViS1ZBNHFtQzJhWHlPVDlUUG5LZ3kzQXgvbUoxQTRDcGxIWS80c01pdThMcW1vKzdXTUtyYU4yWUdlYmFCNzgwMWNaWjd6aUsrcmtHSzlTU0w0Yzd3bGVmNnJVMGpodkw3aXRkUDMrUUltbVB1NG83OXNZclNQWG5YN0s5TWtGTXp5V3Jpb2ZXVDBNVmhKMHlDemlZbUhrcG90N291NCtFUmdZWFdSaGUyWmxySjhWdWJlNDExZmJGR2hVTE9hR0xMTjdXOGlvanJCblpXU0RGMmhSWnNGcHliMWUrMklUMS96NXlZUjJtYW5OdFp1MEEyUlJiWmthTkxMd3JGR0ZaZk1iSC95WGlSUk5WbytGdGhPT3BRMlJmaExxV3lCMVc5R0pQcU1BMzJXZnJsY1Z2eWdKeFBuSTJxUDR4ZFJWajBXV3IwR2hxZUlweHJ6ZWNnTzhxU3FLSjBNd3c3c2Z3a3NGSGV5MEMzdlpqQldFTUpsbnozeXV1bmZoS1FMVDJZV3paTVZWQk51TmVFa0JjZDUvQllxcHcyZTFZNjNaU2NVK1E4WXpndWw3ZVREVGxyQlBaeHVxemIwRUYxNG1pR2dEbGovUzlGZktVM1NiODRNUTNmNm40TGUzN0tEK0VmZXR6c0oyR0hCMlNId21CRUxQSlM0Nzd2Y1A0U3BCVFMvS1c3RHRHRTlYZk5TWEhlMUJ3c2NIWTM0ZTJ1UzlZRHFUVVVaMEJvdGdmUFhLelMvcmM5bWhDWFNBUmhOZ0ZJV3F3T1FrUUtYc3NqNGFtclFFN3lTK2xsRWdXV3hoZ2lNQk9KU0NDeXhzSXUwSGpJc2pVc2dXbFJBQlRTSitXemw1WWlMek9aVDArdzFqL1lNSmgwd2l5eHYxbmtrU3I2RDVtNEhSYXhrV2ZRS2E0TEl1Z3hEU1NIdWM0aTE4djlSTitJamgwaVNsWW5FRjNzOVloVkdnVnNvVEQ0NFNlNVJwNTFwUGFqM1J5b1dFVnZlVGxkS0RXQklRTEFNRDQyUE9TZmFvbHhjWGpuanl6R3ovQ2ZLc3hVWTUyY1J3bnlUa25PbTlPbStpTXBnU3Yra2JkYTlTTUJoWnVKaFMyU1lKODd3SEpUVDNVZDFnRFo3L1pROERMQ3ljalRzSWtqbWo0eWU4ZlZ0cVdER2VOZjNLYXhibjV2YkhXTm5tVWY2ZzBaczJRcm43RDNwSHp1bklnOHcxS1VYV0Fxd0pIYWpXTW84aVJmVVNoNE9ReUJGY2JWZlpsY3NHbnBpZk51R0FtY1Fvc202NVhNS0x5SS8xaS9JY3ZDZWd1eGRMZVlHR0kvUWtzWTZnRGdackRSMnBuNkFNbTQrdHNDdkV1WEQrMTZXMnh0azBHVUplV0w5ZTZvck5QY2pWRXdyUHRhTFZNWlA1Snl6VzJzeTVoZXdUa2tFRkVjaWNPa09kb0xRZFNCZjBYYU5rZlJscmtwWWIyYWhWbEVBTS9sQVlyQnlGRENTR3N4WitRUnRzWE40SE4yTld0M1A3REd6UG96MGExOHozdmtsNkE2NDV2eW9EcVBPSlBnMEgvZk95UUtmUW83WnBIOThFb2xpL1ZjWmpxTEUvaVhCOExpOGY1OVZkdTJqdkJERFduRy9IR0piWitSNVBUMWJDUzQ1UmF5azYwU2tLcHZhTWVWbmhOWUdvY0JTREFvcldjR1hpdnZpaGtVQXUybGs0QU9OWTIrUG0rRms0SFU4SUYrUDVwOHBtcFFUcG8yeUFjU1lON0U2ck1ZL1I0ZmkwL0MrdUZDaVp6UTVJS2ZlZkl6TFNIc2krN0pEcmk3OU42VWJFQTI0M20veEErTkRpT2N2Qk80UmpWRG1vaTd1bEJrYXNaMFBJOWk5a0VBRjdWdm0wY2FuNFQxcWFCVlk2S0FSK2xHWXFJWmgwTjllU3V3UVduV2ZNZmJacGE5YmY2cEtFcWVqZ0tDRlRHTzVUQ29kdFZLVG5DODJNSzNUemNDZXJ2TjBvRERaTTJYK1QraE02UUhEV2ZxdDQ2RlYzSHMxcE43M2F4QVNqU0hjUGF4a3dvNE9tbktHdUw5L2JEd1NDVy9VUUloTWdWcTRHOVNMUWZxZnc3L2pFK1NSNXJVWWtOMjRCYWsraHJrdFVjdUJESGRJT3d3ZGd2UUlXdVNDZnNtZGloT0p0T0ZYaXJsdXV2QzNMV2NSc291SmlTNjZ2RzQ3dlQxdXc2Y0Jja1QwRmJqZnRXSDF0NkZ5eEtBZjBFRDVFbHBiRHVzdU43OVFQM0NZeTVkQlRDNFFYNys2cVJnRTFnZi9kcnh0MU55L2JtTGFrclEyVUZtYjJTcDQ4TnZodjJtelppdmxHTEtuOURXOFZqWmljMXJKaGxlbGt0SHFnTmpqYTQrYzZLUVp3Nm1YL3EzRDN1UWJaR0NXQ1dLSHF5M3JYZUJMR0wvMk1Ca3E1U2lhVUhYN0FVWWtrcC9wMVJ5Q2ZYV25xVzNEWkI4ejNqQVFMSTJ4L1B3eXNvUU5nYVF1UWtuUGw4cnhrQzVjVVVwSmV3Vm5Dd2V1R1BkOUtETHZCNUozemVRUFhaVytjYURHWkVqNUcxdjR6UVJpK2hZMnhaNzZkT0pleWJCZHU4L0JQdS8wT3lHTWNVK2ovT1FLRnduQjBZM1h4RkcwNDMxNzdKazJDOTFVbEcrZnhHL3ptYmd6WDZDUEhzeGFWL1pmNm9ESHp2OCsvYkE4eENuL3I1SlI4SXMyanNOUkJ4ZzdrRlYyM2JlWEtVNHl2MjFHN0tpQkJWN3A1cmgrY2ZzV1NsaGNEUkJMdXJNYkx4WUNKTTlQOGN2ZzJwQlJpZXhSRllmeWthVzhwV2VsVEFIVkZ4VUZubWtJZ0xMV2ZDRTg1OGVhcmZXNUswaGZxY1EvZmxOSzB4Y21XdXNwMnN5NDducXNvbDhZMHBoU1hwMkhSWHZVSGNlY25veFhiYlY0ZkNaQWFpdUE0a2h2NzB4MGlpRXQvZVJHZUR0K0srZ2FZMHoydU1RaUJPbko5Q0N3bW9TeEtXQmlHQndJU2V3MVpXWmpDdjJCdDFVc1ZudmFRaDU0bzQ0bEpRZFJRZmhVSEdUY0ZTTE5IeENFUitiaE9vUk1jNTE2b2NYRkxzL0NsSUZyeXhkd0tYbWtYTC9Cd2tzTyt0czBaQzE3M0JSVThBcldxSnJ5ZVIvM0VEUTkyVGdrWUpjQi80dUw0ZFlCMGJDZkxRYkcvUWRXaC81cVZWTGZiUGdPSkNIN3hHbzNjSGpNeE5WOWh0M3I5cWd4ZzNDb096WDYycGE4T1lTZDJaMTZ3QWNiYkRoNnBBOXZaMmx6VXBOVitDSW01TVNkbGgwZ2ZNWnpxd1FwMkh3YVd3SWJaOVJjKzFLekZTSnAvS3RGNE12d3lmdGVMU1J4R29nbmJhelhUMWVXc0tmdXNWT2ZOY1lNUTlEaEhIZmhUT1VSVmZFVHE2WDhQZjhFUlExa21JMVRLbDZZWE5ueElLQ3p1aTVZUXFJd2sxV09LcWlZZnBVNlNwQVZTa2s1RFBMMkNSUS9EaW02RDJkamJMNWlTRXlhTDRyVXVDeFVIckJQWEpPNm55VkpjS0dFa2h4MTlxdnk1QmdhZ0hXam9tT3RlbEtPaXcyeFZnM284VWxueEIzOVNrNGw3YVhtbENuTzhHeFJSZ09DRk5iUTlZWDFUOHFpc0ZVUXNQRUttalJ5N0diN0o5RnZzRnBtNHU4MlpDN0o0RE16S3czR1BTS3lTcFluSURMNFVwUEhFWkdVazl6N3Q0M2xFY1NzeCtFalVSeFNjSS92c1paeGJvb3JjR1d2NGRsZ1UvQ2Y4R21rRUtHZDRLUmZEOWFndTZUQ2s3YjljcUdlbVdoVjNtWUVqL0NrWFFtRzY2MXNlcjlUTThRaitjODZIVE4rT3MyeWxORFVrUWRrZEhCeUdNOUYwS0lZZldPSGNmeXRmdUpUSWVqV2VEQnBCcWU1OVZMUFVmRy84TjhYVDhCTEJ1NldZYjZPclp3bWdnSkd0Q2I1Wmh5QW9oMDZRQW11dzd5SVkzVFNRYjlUQyt5WnZFNmFMOVJIdlhlTGhXaVhzZmF6VlhHS3pKQStMV1VndGV3MkV0ZTk5d3dpWUc5UTQ5cWhnNkc1VWhyVkxNTk84aThqYTAzOUxzNlhEWDFPNU5ISEFUOWFVNStXaW9VT0k0aFRJSWMyS2FCS3ZCZXpyUm1yaXdPY1V4RjFxWE9aNVVoWmRuNzUxUWUybHNCWHBjYzd5SWplQ2JkOFhlUnE3cHhOTUx4VFVWYzZoajFuc1hGa0UvV3NWYjVJNmFNZDc5ZC9LWVZWQVdGZXNWRStPVHo5dkQ2QVp6QWY5TnFXS2l3WUorSGlqQUlZYlhmL1c4UXFFeUdhNkVKM1NiL1V3ckVFdDVUeXBMbkdaM3BZdXYvbldyY3RGMldveFh2V2J0NTU1aU5yTTZoakYvK3d2TDZFYW92ZzRHMHErWHB4a3k0dFJ1NnN2aTZvaExYZ3FYWDYvVzV1NHBNdWtPaFM3VDRvd1lVM3VTNytaYTUrdC9GaSs4WFpiVXdDOFdGakpkQW1BVXpGRlFvdGRnWWFsWlg2NXpRcnB6aWpETDlnSXlmcUZzK3U5azNyaVA0Rk5QZE5wZ3NRMEhmQTBieXQzaytoRmRRV0JnK3dUemNmOUUxdTFZRTNkNWtHTmpwVU9oVXQxa1IzQ21sTWZEUHBUejdsVnp6MVFRUzNrY2YzZ1czQndHTzhEdnJrZFU0OEQwYVJyS0RaNVdscG9ZU2tkZk84L2xpK2lYOVlieEQ5VHJENUdKK2hZdWJvUlV6YkdEMkV5NS9tblZnZlVhREs3dG5uVVMwcGhBa3Z5bmc5c1FkdEpkMERub3h0UHJEUVBWdkhGY1VyMTRMajhOYmh6YXlZbXFTejl1aWl3NnVOc2pBTUFNVURCTFNFYWlldllYTmY5TG9hQzY5ZW1uNk52ei9STm12WnFGOXVyZEhKcTI5bDl4Z2JhWGJxdkYyQnZtY1V0VHphako3cmt4UEdLQlpBVTdPcnpLdlloSFZwWVJRN1BaWlQ1OWxRSHVUdzhwSGk3aExodnBFVFMrRWlHZmRheWREcEZIYWxrUzIrdENCOXFGcFFnRXZMM2QzeWZNZGNJYzYzMHNGNjV1YmREMzF3UUZVS21EeG40K2FFVHoyRDcyaTFWWStBUERCdjlvbXhIQVBoMWUzbk1vcXN2STRWM21yT0Z1a3ZzUVprbGdkcjRNOENocnhMdlpIVDJFa25ib0hEY0xzRjNIVTV5MUcwbXdCZE84SkIyZU5DK0YxUloyNHpjQjl6UU43YTg1NnRUa2RiWnI3cEsxNEE2bWtEUkdqdE9UQlZMdlRVa3Z2NDVGcGtMS1pWMWJhSlM3VTUzL0ZOaXU5ZzZRdDNFeGY2ZjZRQitUU2gveExXSERuRjAzN2FwZU5KK3l2cldmTXVlMCtNSjF2dnB5a2I2QXlTSmM2d25jOTVGR2syaFZlM29jTTU1T250bzJwdDl5RzRDU091Ym85bzF6akdZUFE4MnF6bVNwY1NXMitVcTJxeFhYREpaeFJoSyt4dUxtS2ZNU2Vyd3owbkF0Yk9KQTdVZWl1UENTVTBZakdRTzFJWHJwd044RXRkRjdpWFNVdHdEcUgrQTFTdXRmSGdoaVVFTVJqclkyNFlxTWFPZzRXTm1sU2pQN25NYTRVU2lsdmpYQUVXOEJwbTRPMkY4Z1VIU1haaTh0VHJveHgzYW44SFBoYmhhTmdUZHc4RFBBbVZPMWxyOFJDSWd2QjFIelZrbnhQOXU5WnZnRVBhdkkya2tVL2R5YTFzUWZnWm52M3BPVXV3dmJTNTZkVFA4Qi9xOWNsbmZHdjZhL0pWOXQ2TTVPQ3dBRE95YmtzdGNYaGk5TEp6Mmd5UWQ2TWx1NHhOSlpGOXVMRnVFbmtibnNyYnFjU2kza25seHBMck9tR3lidVlmNzVvT3ZRY21aaTlVbHdPUnJxWFVUQmsyNDdvZmhZK1R5OWd0S3hiK3NZWlQvNmVoak10Q3A3aHI5SlMwTmlGNUZHNm9pQkF0ajhxVXkwSnhERFZrSGwyUlFoeE5OMGQyTTV0SmNsM1BpN1JXcEFZUXErQ29XSGY4WlJuSTB4SVRIemxnOEc3VUtGb1Y5SzV6VFBPSmppN0crQ1ZoZ0luNVhpY29Qakk2NForenhLUjlmajVQUnEwd1NBVWVXN0ltcVpDcXRvY21adzljQWV3cTJXVVBGTVVSTnBHWFB2ak5BNXU0Ui9oa0QrcjRzalpHKzIxdkw1em5sOS90V3VvUFdDOEFjcjFOZXR2ZC9rL3FSV2kzWHp0dElud290VC9Wand1cVV6MkVRSXFzWFFGbXp3bVRnOTgzTS9VbXlEYXRxMXgyVFhwZ1FYN2tqOUxxZEtDemUvVEpIczl3YW9SS01wMERnbmtJN2F0Skw2cm5MckFRcjVsazlYYnV2UnMrTXI0aUQvZ01GVG9yREVHQlR5Tm85TDlhTW5hdTMrNGtLQVM4aEpOUm1WeVhGWS9qL3dXOWp5a1RmdmNKblFqVXhOU0tLUjFFNWR3citFdjBQaVY0SkYxd2xUVFpWdGlTQS9SWnlBKzFFQlVjQkM2dU5jMzhiWXFMemJEeUE3V3k1Sk91Q3BWREpEcjZYblowa2Fmd01oMytpNmpmcVJ2bWJJcm9SMUVaTmtEYm4wdUNvM1dXMy9EMnVjZ2UvWjUvNGJNSE01TDBCMUNFdnBZRXl6bmhQQnhjdjk2M2lUcVZ0M1VKR1FOc3hJYTFESkpyNUtuN0ltRGZlZ3FSTVJ5bk9yNjFGYjhNYUdBeVg0bWhWOFhEM2JkbmF6cDFJY3BqQUpwS3VCR0FHNkdvUXcyWGs4MFVzS2dRM0hxS00yWmZnakxmaDhjQm01Smtzd2thSzVEWlU1cmtVQkJiR3RhM1BqZ1V6cHlkK016eTB0a0Nwd0VvNkxRN09URFlJWkhmeDRyQmFFWS9BMjBMRzNrenYyZndwV0ZML2VrL1A2ejU5Y29UemRLbTdpS2dFOEhkaUc5VXZ3RDFucnNNZ2pXUkhoNzRDWGNpeExXbk1EckJMRlV5MHZrY21WanIzVFBkUm9HekYvZE4wcDR3dnNZWktCWC9hQkhxSTlyOUVwVldYS1NKWEpJclR0V05sRFdCZTlPbXFnbmtwY1YrSGZuWmVGUlpSMEtzOXZsQ3JSNVNOOHkwNDllQzlyTklvT1hSS0JQSUcyQlliMk90ZldvNFJ2OFp1NXU4YXVvbmVZb1BucEpQYlJjLzh6c3NYUnZteTRDSUNVSTREeGtoVkdWelRIZ3FNaWxud0lWbzlDZm5aZGgrbHFPd3JhNTM2bUdScEJuS055Uko1RTFjQUhxdzA4Qkx6Q24xUmNJSUt0S3VzV3VRR1pudS9GK2JtWW9BZlhCZldQaU5wWk1rNDlwblozeTNieDJYYXIrSXpoT1d3b0pCb2xyTWZyNVVlZU1GSDc3ZmxnTzQzL1VTdHZRVEQyQWxBOUUrVDJsRU1pQ3p1MzRmTFd4ZmI0TWZ5eVh5ZlVIUUhCZ3ZZLzV2aklCb2RWYmFweDlCM2ZXN3JRek42ei9ONUxwQWZ4NTB1UTN6aWd4ZG4rS0YvaFh5NkRQbXBJZGRvSW1TUTlBRnFKcU1jVHA3Mi94amlpNVdKY0VUZnNUNFlDeXpoUDU4U01OcUFHSFpHaE1EYnIrc0VpT2pYTTJqKzc3ZCtYNUlJMG5xUUFwUkdQWG5sQjFvWG13RGVhYk9TZytZbnBwM3djenBGQjZqaUFiNEZucDk4d0cydlJiNDIrTmVPbEN6aXJFTHlrT1FTUEVramh1a0ZHVW05aEY5K2lPUUpUTE1IUmVWakpodW5EUGdtZTRBUStQN3l3Qy9TVXZHRHlOd2pwWXRoL3Z6Vyt1K1UvVUFNZkliMGF3M0FYOXA1NzJ1aHRIVUR0T215OUlYbGlYcDdTK1J5cC8xNHpkcHdEM21vWUU3c0xFZWFaVGJhRTBsMFRYYmJkQ0JYNnVDRnJGU2E3eVpSSTd6dEdNbHZGby95MU9xaHMydGQ5eXdvdmU1a1pPV0VHdG1JRUIzRDBjcHBJL0wwMHgzS043MUJGcHIwQ2QyVXI0bmdLendoKzE3Sm80b09DYk14d3pacjhVR3FyL2U3V1V1UW9rajJIVXVRUHhEZlRZaks0WkVpRVhsa1MwVjlTbHhhejEzRWpVOC9yZld6dGZ6YmlhTUhxRmRITGF4VDFYYVM2NFZqNTUxMEdRbVg2UHhzcTN5WlVGaU5pSzNLczBROThjakJuaFc2dzhCNXkza0NaN2p4MEJZUVFOUE1jejQ5NVYwMi9oMmxvTS9FdW9JQ0NZd1V6VWpQd1VVRE1EcFJvb0Y3K3I2VlVieVcvNk5JYkgyWEJlTXNRNHI5aEM0R1V3UkdOSUdORTVPbGJzWS9rTko4Z3U3MG1BRWswT3MwQ3lmSm1Kb2p6S3lndVUzL1VTOFJNMDlvQWxFRE5aSm9aNXc5ajRaVDloVXNKV2p1QU5NOXhQZWxSWFB5TkZtRXZZVnoyak9PaVFPVXlMdjdLMkF3UUhRdVRPSkVQNUE0MS9sREJEQ0ZscklzTnBGL3F6N25rNVEvd1g1YW5nOFlhbzZwdkdOY1NpODFvNzYyUVpMbk0rSk9RbVZNbmxPMzZYUkZZZmhseU5sZVk2NXQraGNRa1h2cktiSkw5M011bzJFb09JeDczQWpJVHdmdFV2WlY3VUFleVQxeW9rdGZ4L1lpWnM2OWJ5L1RHeWNYWTBuZFFjeUxrNzZ5K0dXLytBZS9maTZ5OXpqVGFtMXdpZ29maWdyOUlzRlZjK1ZmZHMyUkJxcCt3VXZjeWdmanVldUJJeWZEbHFhUUt0dTBMbzZ6cmNXeGhlK1JieEwzSjZrV0E5TmQzTktBcUViQ2gyOU4xTm5GcUZKU2Z1eXd0dVRUN3cwUDZRT2RQNHNVSWlIRjdLR0dQT2JvOG9xSG9zNlFBV3N4YWNrVzJYQUJ3bXhJUytseDlVSnNoc1RNL3lTT2lhZURoUllQUi9oNWx2RU5vZ0pFTUxTWk1yOXVpckg1b2VKNTcvdWdsbWhQZUZ4Z01paTJOMi9tWTcyaGltWjRyV2xoTVlYTEYwWlhWVWZFaUVubW1XZXhKcFQ1eTd0NXY4dHowVnd3UmVMNzlScUduOU8zUDlEb3dyZU5XRFpYZXZJSzQzbTh0aXJ5dElaSlkxRzZtZCsvQnRPcGJrNmlQbElFUTM2cTNqaHZyekMrcGNCWDNqdDBTZVFvNjNjazkwWVJzakZrNmMwN1lLOFRHY1gwVVNna0xXQzNzTW8xUGN1NFBJTjhmWFVZRENQOVYveVZJOU1EZ0JYQ0h3MkdLUFdVMFA4djJBUWltQUxUYnJ2V0tjbStnRHRObGlPSjMxZEVwMTZNSjNNOXE5Tksyd1JCUmdkZjlBTEs5RHR1R1RQSTdIcHZqYTVFQVUzT280ZytSNlJmSzV4N1Y5WlY2Z1daSWFFWldyZFJKM2NkaTROR092Q011ak9hVkVtUCtvVjlqSFM2c3ZtZEl6OFplcEhidENldlZ4N3RDbWNUcmtyeitDb3UzUTZjWXdHSEJuZUpESjd5RXk5K0g5cWduSlo2ckNzbERjNmhKYkp2N2QwQ1BzVWMxdzYyUjg0OG1BR3dDU1paMUdEbEpJcnNST2FUZkZCVHpVVUJmYTNZdGh0UTdkNWhCKzMwU2NySzdYVlVOSTJaRUpBRk0xZFFHNWF0bCtvZ0t5N3ZRMWJlRjN1cmI1MTRqd1BlMmFhaTBteEVQNHQwL0N1WVpvaEQxTzcwZVZWRFBNNjhDT1pzaUhyT08zajR6M1krSm45UFVaWlNFRmkwV2ZSQmpCaVZaT3lybXpGVzU1WWpXNlJ3RktLMVZEVG91M1REUXc4MEhFSzRTZWJEaFh2UWNBMlorMjZHRWQzWU8wQldpMXR1RFhSQ2hjL1oxWnN3RGRrckVlNkNicDVqS24vWkdNQTdGUGRTUmJCSDcyd0xhQXJYQm9OYjBWZG9HblBWaTB4NUNXTXJnYVl1OVpvdmtUdFU5cDZMR2N0YjJIQzlrWndoeHJYRnpLN0VTK1BXYXdQNUxuOXMrQVQvYWNrdG9lOEVqaFRBMExiakJKVlBnSnIyZWZIUERzZFNidGtVQVFNVkxQZFlidHpsQXVPcEJzZks1YjBjNUtYWlgyZy9kaFkvaHUwRUNvUjZlSnVveXJ4c1NKKzlZNUYybEpDVUpaUGlubnU5K2lyUTV4c1BpUGFzeDRIaEhlMWdlZ3VjUm1QMHVXb1F0VkhOZHdqaXV1VVJFOS9WS3ZKazE3QXVlRFY0TGNrZm56VUNDMWdtU1dJZ25WWWh6L0FkMllPNFFCYVN3S3JNb2xlODI3ODV2NUpsaHJLQU10azJ6OCttWEtzZG9BMG0zVVBwMmEvVTA1eTRjbThRUFpQenFTK2lZM0N2UEdqWVRHc1U2NlZncnNMa3JqckEwVDNCMGdFNFRTUnR1aE9wOVB2b0lUWGp2L1lMK0pOZ0c1N1hEYThXNThsb3NiTTA0M0NvZ0RBcE5tNjRML3cxRWRDMi9GMHFPZVhtblpuQlBrQ1NWY3BhUVpPZExFMkU1cXp6R2xZYWZWZmJDMlhLUGg2cURUOHJ3R2JQY1NUWlpKaERWWTdZUTFZOWdtOXJ3N0ZPNDJVbHhrYVU0bGpQR3ZaamNrUmh3dVRLbndoYWZDbXNBYyt3Rm1YVldqVWpIYmd1Qi9vdVBKaVhwWEFJOTJHelNtb21VbFFpU1JhOGpoWGV4Tzk4MUM5bVVib0ZhSFJNK2gyallnZ20rMmZEVHRkczA1d1NoM3lmRHUrc0tXSFRhSk1QaXBLYi9UeHhyR1ZjMTY0WmpUUW1MSVFrMVFZa1VnSTBuVnVGZXp0aCtrQTZOdlZyRjFGZmJjVmFxZGVIWTdNZ2F2clpWYmU5clhaS1g5K0g2SHJidmVjWW03VGhDWk9RWUxpU0JZb3ZQMXNuZmhKbTBzSWYvZC9kRFdVYjV0ZWVXdnFvTHRPaDF1ZDF2WDhwQ2cwM3YxWEcxRTdlWUpJdStITXRyQjZGcDBGZEpvazV3SUN4TzVIa3dRNEFML2t2RTVBOGlkcUdRRThTVWtLRVBnNDAzNjdXNE0xWjQ4RnoxZkc0aHA4RE5Yd2lzc1k1d2ZSaWdMNmdLZ0hPYmhEQjBDTTNKeEliaXZQUVQxTTU2Yk5ZeURTYUJNRk1kUUVXa3ozUVloaUtCdWVuakYvYmpramM3ZzF4L0pNSmlsUE1xVjEyczZldEltajlNeXo0cXlWRnJsUUMvYzNKYW1WdzVKcHBRZkk2SVlmanRmVWlON1B3N1lIVFppUkgvVSttenJBSHFzdWRqOUd0L1RCaExzM2dPWm53UXI5UDZEaUlrM1p6WDFMR3RHQWpGSUh1eVUxdEJyTGdDYWZBcHEraXNTQ1FqWDhyaC8zNGRvdFR1ZjZsTTVMQ2NwT0pwTFhMb1JBSS8rZG9BMXF6bDh5d1B4NGVXOWwvejV6TVM2b2tyeU92d3A4ZEIxM01WNlRIMmxLWFpQM0ZxU1VXTVdnN2dPR1cxejlyN3ZyOTdIOHA4bjl6SGtRdnE5YnVTZHp0ZEJTcEpMcFlobThLdytMRkgyK3FhQmJOSXZnMjh1MVlKcU9peFRyd1o4cm1IOGdPcm1xM1plSXZnUXVPeVpWNnAyc1pXWlM0MVh3d2ZGMHdwQmZrOEhaL3dEWmUrVnFObmZuMGNXNy9pSERGQTRVL3M2bE5mcm5CbGR6TzhsdXp1TWsyZ0lWQVRGTkQzZ3lrWG1oZmZwS0hiRWFNQnNxbGhhR2M5b1l0c0U2UlpmeWMxQmpCMFFYazNwTEpXZ3FpNjcvOVUvMlpVT0NkNUxzeXRTVm9ZZWNZbVhRaHRSQ2dib2txZEU4dE5BdmtFU3FWM2tHV0lSNFlBdVNPZUQ4UUQ5RlNZa2J2clppTDZubGVyR1UwZDlZZWdMNFdLemZLQTg5clEwQWR5c2FzUTh2ZU1SMEZRMDRrUGNodVNjdlJ1Z0hOSStxTFVxMU5tdHN1WnpoVlFHUDB5V0lWTWsxZ1hzYktjZjl5c0RzVEltdGZWaCtmdXFUNTh2eE5BSHJRdkVrNFpMc3M3Y1lWWjJmOCt3NENEZTNHYkhkNnMwTXJxSHh4Z2wzNklCMUtBa1BjRm5tV2hHTXNrU1BRa0RBaVJ4WW1maGVoanltMWthWW9TcmRsL1ZXV1RtYlNCYkNEamZIbEFpVE5BU09YdEFUdmpYNkJ1VkZYMzJKZE45Y0tQQWJ0MkdMOHNIZlhhNHYydCtkbHZFcWhic1NXT21tTzZBb2R5K25INytVbnBJWHBrSU9XeDY2VnA1ZUJYdHB2dEZwNk1NcTdMdWRiM1BmT3IrQUppTTA3SGw4SEtLbW9OcThvK21rK2JQblFHNGQxRElNTW1OaEQ4SzBhc2RieWgrWFdXYXIyeXpsWE5XL3IyQXRQQ3RkMzY2bXoxbVFYNU1KVGR3eEs5QU05Nm5BbEIwM2gvQ1RleWtQTXl6cndtdmhmTDFnVlJZZzE3dzVwOStDc1ZFOWRGZk0veVA1bDNvWGNrWGhkcjBjYXhza05WSGpxWkNTaXI4ZHZUb095MmlTNWgyN1lLRWtXU2lLRCtGYVh5WkNxZDBoY1JTbEwxWmZ4Z05SVjI2Q0FCbnJzZUt6UURvQXE5bGpaUHI0ZmQ1NFlwTjAzdHJZMFprUkRDcXZOdk4zY2tOYVg5UWc5Y01HTEQrTmppdzl2UjNWT1hhTy9mKytEbmlEeWhSaG13OS9JM2RTdmluZGthYzA1dlFCSjJFUm5GWUhoRDd1Q1NRVzQ3dEd0VU8rcUNneVhzQzcwUTlhTUJQZ3NScmFWR0tzeDZIRGtYUm1wM2REVlk5bzh3M21pTVdObHgyU0wzb1ppS0g4WmI0Zkl1ZzZjblVnQmI0THErWCtSNE5mMFpMR0o1cmpJcXVYY2VUQ0dkVk5PMmh0ckZkSUtnM2JIRXpRZHdWd2Z2SGJ5MkljY0doMnpRSW95endVTHdWc21kMy9pbFRDNkdPVlFlYkpEK01pZnJKRDVHbDEvMktrVGFVODlFMXhwRkJqZkdPUUQ5OW52eWl2OVhUOVBYODJZS0pxUFdpQ2hwL1EyRUtMd3pUdkNsdFpKSTR1L3F6aGx5cWZRUnNyUWJNVnluaWw5Tk1Id3lQSmdYMDkvYUtRbnRmMGVVM0FROTRmUEk5MG9uUHAyYWdyK2FKbG42VnV3MWFBSWN3VXAvZEVSdTBSalFlaDdPSUcwYmYzcC9XcEVUbDFFa2RDSDN4c2VjY3MrT1V6RjB0SCtsTjI4SjFrNU9Uc2tJd3QxT0xGUDVGdVJzZEdTWmZSQnRob1QybFc5UEV2RXA2WHdnUlcva0FZeEVoSVIvL0NvNDh2RXdrNHZjQ3NmZTZha1dJQ2UyQ1h2ZE5WWDhoU0IxVFZCK0ZvR2FRWllZZ0ZVZi9DenZ4a2tFbVpFbXQ2aUxhVHJsdDdaZmxzcjRvdnpwVFFwdldTK0dGRHNuanlCc0tna3IyOE9PanNUT1JpWkdReXdPTkJ4a3M4ZjVxcmNDOWl3M20raVgrR3lTUWpyc2lpdDQyeGlVNjh0MGdQR3BEWGRna1NDVVpMV0U1djZjcmk5QysrTXNzTGt0eHc0UWFtbnQ3NlppZUplUVdtYWt0N0dLTFJFUW11R1l4bmNOR01rTG8wVTVNWGFlMklpZ2ozRkxhUTBpZXZhT3ExTEZsZUpIUElGc1hYOG1ITDlFNjVCNmI1bWljN3dMdjdCZVRRY3M0QWNRdzh6bllkWmw2cTZRbk9VSmxlblRXRWhOOTFob2czY1JIREc5NzQvQVNDMTVHYUhJa0dyZjhKRGxDZGt2bElWTnRRUTFnajgwTjVQUkN2SUdLMkZsZlZKejV1V1JLTUg3S3N1WldkQ3BUWXVMSnhXMDcxd2R2ZmYwUk85eEovc0QzZmgrVW1wYzBGY1JPOURzSUdSUlRjeVkxSnp1RVNEcWlteDhjMzgzTEJvTkxDbUd0U3RtTjlRQm1NMGJHUDZ4dVp5am1oRktFYVA4YjJybmVmbmJyZDA0bGJ5enQ5amwzenhWRUU5Tk9LYk5kMVlaNG91S1dGT3U3OVg2ejR6bGgyY2RvWWFMYTVIRzg5ZGZabzNqTC9RWlpGVU9PeXcxUi9IdTZtUkdicGxFZDlBdXFETUZMKyttVlBYSU9mV1A3akhDdTN5cm5CbEFnMmt6ZXgyZVZIS1hyNE52OUFOZVc2M05hR0pUcDNoeisvd2FETmZJVFR0SUhzQ212SllXL0JVSHZTOS9lcVlrcWJSaGJ3MFZoeGo2ZVJQcmg3MGsxMTBDb25ISnRVdEFFLzF4MURTV0RWa1k4cWoyMjF5anZ3TEFEZDl6bUtFQm5nUy9EdWlMbnBSYS9yMzFQbm9kcFRRMVNkem9EUGdlTVdwNzBEOGpGNkZkRzJJZkNVcWZmUUJtMXMweC9WOXNPa2EwcFV1eWxjd0RZYW1MaFcwM0VSWXkveW9YL1FBNW9hR1A1djh3MXFMUXM4SXh2YWJ4UUt6bXpVcnRDNStUc3lwZXBwOGxYUVNZblpmeHU3NGJnRXpsZGZ3UFp5ZTlpWU1HZm1oTVhuTGIrNDUrVm4rVEhGUXp6YzZpM0dOZUsvR05OKytJTVBEeUF4Vkt6Zm5Iamw1TnBBaUdMVTgzdzdVWGw4VTl5NDg4eTZEN1RuMExQMEw1QTF2dmZEODNkNW9SaHZRaUxIVWZlVm0xZHFhb3g5TU5kME9OeTZ3dE1LWmZmS2FOZWZQMUNqZ2h4ekhRdmo2N2JtU0tjWTNZQ3dVOUlEUW5CUWlXYWlRenRvS2tYQVlodWF3VjYxd3ZrUWxSS3JKcnlsRWhvY0owdGMvMDMzRUFKZVRzaGMzdUJFQi9WYnFDTDUvTXZndUNIb0JmMlNDRDRZTlhHQ1YyWlQxVHpCNkNyZjlETTZEajAxQnY5ZkRBZWk0T25CS2hkUHNFTHRzVi9HZWZHNXliYUhmaU1JQk9iS2RoN1ZvQ092bERHbXhGUCtOaDhSOGFHdE1jT0dIVGVpTEE4M3pSNEp2MDlsT2FybEphMUhPQXJ1VmF1TzJpS25odnJIT2E1cWszYWNWRnlSNnVqa2MwNmZRVE42K2lUM09Wb1U4alIzWERjRFVzOVNwSEZ0cUprRHU5SmUzMXkxa1cyMXVUSUlXNUN1SG9vY2RnU1RJSWx0VUpSa3F3L21Ld0xMbXFORUZvaFBvOEFtL08xZ3c2b1dtMHJ4R2NOcmJ0RUtSTDNtMURIc3NuQytvMGx4LzVhNlVTSk1idDA5R2E4eXBIV2tqbXZDUjNqYWsxVERXbXlYSmE4YzhQL1czaFo0SlZQbFhTTUxtQkNhbmIycnp6WHJVUkovTDh3NnhJa1FWQ3FocVNqRUhKT1VQNm15am9MSzdPMzBldzZqcTlFbGM0VXRXdUc1cW9aNThUbUNrSHdCODFSNjhJZjU3U0VuQnYycTkwa2hQNjMwZEs1REg5NXdQdkJPb09jZEdBVzRxb0o5eUVLWHIrR1FCa2pxKzZZMW1wVlJxRUZZRkZOaHhhZFgwK3VvVWtUYWdRd080R1NHVm0zYWJ6MHU4YWJmRVhQaUVlNUc5VTR3V3dweit3L01LdXBrR0duMFlFWlk2SUtuWldjaFZuaGY3NFRNa0l1a0dHalhPVkRyNG5ubmNSUExGWWltY054N0JlM2NlWnRuUDNwOStkazFuaDZpc3k2L3FDWjRzUG8veXRwMHI4dU1jL0NYNXJFNFNjVEhpaTBVTGhvRFRaMzJabGExL3VOcWZWdHczQTNVSW9yc1d3czZPTHVBTmpBMVVqM1RyOTFYOGRSNlliR2xuWXUyNHV1N1FIaHlnNW91RC9mUTg3ZnhXTUVwdG8wV3MrVFFaZXRXZzJubHFYOWJUaEt4bEM5UUk4VjVGMUM1MC8wZGthWUkzWEVZM0VXLzRZc2Q4ZnNEbHNUT01VMXI5Q1hNelJ3MXU5WWVGdHFTeVY2QWs0UjNNcnB6SXBvNjN1Vm1pTmplTGREYVM1bGtKZ1dBZFJtNUdFQlVMT2p1TWRUYUFJS1JrMFUxb1JjWTRlZjZmbWFnNjZkVXJLM0dwRnFmUS82SkFjaE5ESm9LTjhpcGUzaUxEMkIyRlNicUJhT3gwSmJweGlDUWdUU0F1VU5TUmswZ05DU2toWlVacmNLbHNQcGpsbmljM1VkMFJVMzg2YUFYN2hwTmZZckZvbmF5aU5ld0lydmdNbWI2a09nWTQ3RVAyVUljZUs3cFdLTDBxQU91NFJycmltd1ZML2ZaYXdRZzVYaU1hZWtXaU02d01ML0Y4UWdsM01hNFJNVGVMcjVaZWV2UTZwaEQvbVNXM3o0ZFFsQnliazZocE1KRUE2YlRGaUV2akpsQStSaGlTTjA1TWN1OUZ5V05FejU3MCtERXBML2tvcVVORU0rTjBVcGlVZWJINTBuRzcxb2lJTGM0YmFIenVZZHBWWVpyUW5TMkNnajRlbXhBQ1I3VnVTMWJZTGgraWY4clY2eEFPcFpRK3R2K1RRVTNPbSsyd01pMnp5Y3I0SlZhS1N0bXpBWi9hdlhsbXdqM080cUdZS3RTeEpWSFAvQWF1cElOWDlBRzFPZWNUWkI5eVpaR2VUcjh3ZDZzcTN5OWgrQ2JKdGxnVnZteDh4L1pMNjNSNDFEUUM3RUE0blB0YjByZUdpLzRCUktCaVgxalU2QXVFVmxaMFB6YTI4L3pXWnlub01KNUhKL1pla0pRSlRyeUlYVVgzRWhibDR2aTJZMy9NaWtMcjZRVHBWV1NIZVBsWTVLMGxYR1BhZTFpWlI1OW8vWmVzWW56NjhqM2dVUjBydUxScjQwTVFKbzZkQzRuS3I1c0xIWmlXZXNLbWNDTThTTUZoWWY3YnhsNkxMcWcvS1hPcFRwV2pkUHlXZkNiODhNWW5IMEZSbXZ6ZXlFUE1Xa2dDR1hMdU9uMks2MHNZeWVlN24zczZOK2Q5YjhlaTQ0bFFIbHdOVHhMZ044WUg5RXErM0dqcUt5NDE0Zzd4WlN1dkdLdmh4c2NiZm5sWmVuaEUvOTNQN291ZUxXM2ZOQWY4dE9vcHlMTGt0SWxqYm5JRVl4cUtsOUJLWDc5UVAwOVZrbW1FM1Q0dzlzTE9uVnZFVklPSVBXNFFNQWZDSlh4bVlIVm93ODcrR0VKWGZEMk95VlpyOW40MGdlaURuZkdUcnhES2pZbDc2ZjhJUkJ3azYrMVphbmh1MzVzNEdweUR1Nk5hTUp4WHBrd3BUQVFqcWhreFJxNys5UlJFZk82V2JiUVQ0YWIzaWoxNkgwZWR1MCtvZHNOL2F5TUxiV2k0WHhhYnZvY0tIclB5RlhrNkw5QVBiT3Q2SXlhZTBWN0JSQ3Zzbll3Q3MrOVk1Y09TUjJDVVo2amNDZVZCcElta1JkT3RHQXVWcEdWQTRsQkY5bHhOWTJuVlU4NmVqWVhQMm9XS2ZTKzZFeURZMS9ya3RUZk9HcStsUXZNWm9HM2g4Wk84TWV3eTNpUGNZODZFMTZycUJMMWQ0Y1FEdlpOSWJsaEllaXlnSFQrSzY5YmhrMDdndlhxQnczMlJYQlVLbGN4cUFEQUl6Rm0ydW5iNE44YjBlZ1VoQXdHYkM3emgzRVpZVitEM3YxL3ZBRWxRWFV5QXF2QVVMSVhGQVJkK3RHdFRaU2o2N3FFczNDWVJWYTk1Wk9PZXp1SVNQOUN5NG5mUHVWU2IyNG5uRzZQeW1DV3F6TlJKMHFDUkE1aUtxTGNMcE92NHdWY2QzNXppMUdJbmJJUVVNQ2h3bHdxUXc5TS8yYXhYcEpOR2dNMngrZjIvdlFwbGlrdDF4U0lVeThxRDNjTGdrSjJGMzJ0S2xoYW9jbFNPVVpYNmNFY1hCb0dvRjU2cEprSmdFTDM2QjJrdWNzTVNXTmgvZHFoOHpLZ0lSZ2dLN1Z5ZUJ2NHNJZzNJczVvTG90UUJhT2dPeG9JaW9BYnJPN25qZzN6T2UxT3A1RnpIRjJOYWltVUc5c3NWeUpWTXBEMUpzTTVpSlEvRngvdGRONFlpMzNRWTVPTUo3WitVM2FvdDBOM2xUbGxJYmhXUlplT0o1Ym1leWlvN1FtbHlYZ0N0SmJ6STVwY2R6QSttZlgrTHFXZ1pJUjFYNFJyZUFFQ2tRd1V5MzhMZ29oVE1HUVJSSG5XRDI1dGFRcVRkK0htNURxK3FuN0RmU0UyZVpoMmxDRnk2Sk1iWFBybDFaUStDZloyYmxkbWF5NlRvNDVZK3ljOVFMamFmT1F3K2F3YSt1bkNETUd1Tk5JYUVFWTdjK0daWHVtNWQrTGFBWlJmQ1VaRWsxaUNnZ1FBQ21pWmwxcFE1RVJ0WmtKYlQ0UkpRbmd2V0kybDFudldiTUpNT1A2MFlpNHpad2FLcGE4UFZ0SmVpRjNWUXY4MSsrWTBSbjg2T25QK0VRVC9WM0xPZWxqUFAxR0hQS3VBamU2cS9DdGNieWhOTThEdy9zSmdXc2czNndhT3RVOWN4cnBTQ1N2QTg4aTd5TURpTXVzUTN2K3BLbllBZGdubFlrRUFYYjJUOTR2blE2TXNrKzd0T1ErdXhxS0c5WDN6MXc1bURTNWdNS2xGVnhTM0tBdGR4NEpoeERPT0JwZWV6QlI5ZG5QZG8vUDhGeTJ3STZNaDVKZ3JHdlN6NzY1WnVpTjM5dkNoc3B6ZDRMR0NzQkZvOEloM1IwUytQcUdrNXljWk5lRjVyeHl3OGZtMVNyUjZBSTZCeW02VmN1UjByRExLTHRBSGc4VWRndUxmOEJQWTZ3dFoxVVliblRFYk5qY3JOTmVqUDNMb29EN0wyL0lpMjFqM05hUG9PVm00LzZueVFMVUZ6MW5IL2VQVW9Sb0NVV09HUndvVVVrUFlUS0RuaEpDVkFFRFFYazZaSlluNFVObllLYllYbDVXV1REakRhOG1GWEY4T1A4OGRTa3ZrZkVMZk5qTGoybjg4djdGWndzc1M1bXl3WS9NMVZELzJoaU10ODZMYnRVRG5HYU1mQmtSdlArMFdNUjFwcUx6dzh3U2xoVFJjeC96WUJBdkRtRG8wTjRNVjhoU3RXTDBsVGRLQ001MlNtNUN0Sk5CQWliRWFXWGYvbE9zbXl5SVVSUUVZcHJDU0x5OFRreVRRYUlJaUtRVCtJc3l6MzN1cHJDcUJsaFBVaVhXVVFKT3ViSVhWdG9ZNHJPOUpOUmVHU2hVVzdlV2lML1JBcGU1b2VuQXF1RHJON21xV016dUo0TXRNb20wTnNlYVJLYTkwdUxYRlpTemtnUmpqYzAxTk1kTWtUL1JQNjc5cXBWL2JMSk5HcTJHU0t6RkRacndxbUg5SVhZMVNuMlVKY1pFTEd0QlRkMUhTaU4xSnNVQzBDMUxmYjdEQ0F3ODFyRlpIc1ozb1J6UGdSb2Rxa2x5WHBTbHpFTWExOTVKUnFuc0hxVVJSdlBKeWxQWUtmSzNQSSthWlRidXJHV2kxV1dHMWhtRmVTcTBuR3hxb1lLNXJwdWdOSjJrSkRSV1NEWERHNC9oL2pJeFdEcG4zZGxTTHQ5QVJxUE91bG1TU29XUVBjMk9yYkxZV1h5dER5V2J5dy9OclRKQ294WW4rcFVhWnUreGtxM3pGdW5rcHU2Q2ZsNHEvcWtNa1NVaG4wUXc5T2l4bi91Z2NxWlJYaEVvT05DTU1ZaTVGSVpUQnZ1NWwxNWcxdHJqcjZuOUVGQ2VWREh3SjNLYzVyRnNxVFRLN09yUEJmR3NDUFYxREhnMk5XRUpPaXMrVXRndG9iU21rbEplYXFiYmJwWnZ4SFBCNDZjR0JFRCtpZUZRZ2pNSTVacWFuUUliOTkwWjhzQmVBTkFESllWd0FsRjF0MHV1T2c1aWo5QVhML3JVYVpxaTgvek8xcEVFWmNkbCt5MGJrR2ZieThTTVZmcklsRmd1VjNCUU54akVmaEtDSTZKemtHdHJyWXRsVDNybmZ4cWJMUmNESXZPS3k0bUFHZW1JbU9vZm9xNDd4QXRuK0lYQnZ6T2owYnErekV3Z1lRZmxYSk9KQ3BTaG5UbkdVNjcxR0w2RzJRR2t0KzhrekpvSmhyNDJDS2Irb2daWDJ2SGRFelgyNkprRXhPenVxRXlnWHU3aWFxS3lidXgvS1d4YVp5bWErbUtWckVLdGlvZ1VrWUZ4K1MyWjFTY0VtWWNXaFNzL1RTdzU1QXI2Z3dUMmFNUmhJOU5yenRHblBzNWFIWDhvb2hvV0JZN1FpVStqUzViUjlsME9YUDhiU2hQQkp0YUt0bmxKNThZTlc0TzQwVGtEOFRrZkd0STdtZEt4QU9CL3BQemU4cFl3SlA4Sy9SbXk2dFZXRjIwd1pjWTcyRysrcUtJRkh6SEJZbDVxNFdoYk14ZEM5eHZpZjAxY0wrNlZBM1h6cWlzcnZTOWhSb2lhMVorbDlSYU1IcXdjSHVUNzllMkg1Zk43RDEvVENNcEFyS2xsMWZuejhtWVZoNXdSZ25SNVpQcnViRi9RaTZ1K0IvcThud1c5MzNjRlFEU2tJQWpqRDFUcEpqT3JMcGZya2FBWkZNeGNoNFRpMnp6dnEzeTFUT0dHS1d5ZjlUOGpXRzF6SVNZNFRkZFFJb0FZeHhyZ203Z1Jaek92TTBFUHAvaHljb2oyS0pYeXI2VjJJNWRDbHF2Rjl5UXU1WDdIellZK0tDKzhpdkVjV0diUTQ5U08rNU0wTTdtQlFHQ0FyeDZlVTh2dkVWZGptY1dwbXdYc2dzU1lTcWVQeUwyK2lQam5LY08wN3FiTG5WdGt2YWVFdVM2ZHZTUjgxZ0NjN2lSUWVieWVWT1Fybko3VktXd0FyUmFMYWp4bTgwUmJiUkEyVXR6NVBNL3Y1QXk5RXJWdjBTT01ReVFueWg1VU1JcDNxdW03S3RrQXdyTkpVMGZQVk4yK0w1U3VwSmVFTFpvdTVOR1NpcWlZaXVOb1EwTWVqeWRsSXE3ZlZrNjlRd296bEU3czlhTlRJVlZPU3pBL01LU0w0bXJXWUtVRmhoNkhUR2VxVUExNi9QU3ZWQVhCaVhxMlFQSEhmVjMrQWpGRERtRXpVUTlGSjNZQ2MzalAxQS9hd3VBclR2RDZ4eFpRWjhSZkZrUStQblJpTXgwb21mSHlCdHIvWGxPbytWOU5DZ2NWMURFRW9hYTZmTjhpYkw1bXRSZ1N3bW1SekZBYUp0VzJubkRSZ3dheHZpMlBodTZrME1TL3pkNUxUYW8vYlpGUytWU24zTmh6YWYvS3lVOWFTM2tIY2FOUSt6aUg0dlRGWmlqbmorYm9XVk1relRnZmlwOEFScnprVXBadlorMlRPWDhCT3l1eWthNjVUUkd2NURmQWRPZEhiUkQ0SjhkMitsMUVraEZ0MDBzYkllWmNCcHUwaDRyenVXZytZZCtJYXM1WTJ6cWhKeHVuaGhTdUFSNEFIei9HSGR3Qmw4Z1dSUnJScWMwRDJEV3hoOFYvdEV4VzUvR3EyODB1U0RKaWx5RURxQmMyZldNdXE5V0kxdmVBakpPTGNydU9tUTdTUmR3a2NtK0huSjgwb2Q3NWZDSHhubTE3N3l0ZS9kUkZrajFpY0U3NE9tcU44VTJzM09sSzZLemFZLzJSTWhlaERvOXdGdjF3Y1M2Yy9Za3hNN0laK1VKTFhIUVcyZEpkMENDYkNPY3c2c3dlR0tnT1MzVGk3Unp0Vk1uTG0vZEN4S3NIUFY5V0hhdTBqZktnK1hJcE9qVksrQlNEZ0t1eCs0UU1yN1RtVU5ZWWhRQzRsZTdKbzA4K3YwRXFqTld0RXRZbGVmZm5oQWMyWE9ZZ1dNeDVLWEs3WkJmTm9LRjB0WWNrTUcrV3gyVWZBakZXZng4Y2VEaG96TzJOYXNYUkloRHhTQnh3Q2pObE0zK1FlYVhlY2Yza1FMVjl4Nm4zdm9lQ0pmdTV2SDZJcW5TZlhGQ1B2OGlZZWZ4ZEdhOGttdm9DVm1aazJuUHJOUFFIVG5lT2RYNGc5eGhMbDFJcHZhL3cvSFA5QjF4N3VkUTEweXFxdmtwb0JYbXJsSHBOSG9pU01FQVlMempJeVRhVWlnODlWQ0JHYmJxdENocFpjRVhEaDlQNVMzaE1adXNHdVJhR0ErT1N5M0IwT0RnWXdPcWhob0RkZkRUcmh4WEQxU2hCajdUWS9EUzJHaVprc3BGSkM1aFl6QUxFYlpxdGFRUlpKNHZRbStuT1Zha0l0WXRvOWZDZ1BnT1k5di9TQ0w1eUhIL0gvOXZ3TDBDVjlNb0dUU2RSODRqRVVVL0poSEZKeXdkNFl5Y09XVEZ0RVNSRkcxcThnMGlCTlRKNmQ1ZjVrNmNMLzA5enMyYmRPNFV5cjR3ODBWRVVIUUdvWmhMMzdGTHpBck9GcXJZM0Q5M0lKTEVBbFZOTXNocU5VYngyaWRobGEyUDNHZGZleXJRRG0zYmxXTDJtVEordGV6UTRBRk1pVHJBdXlDb3BhMWVLTi9LN2FKcGpNTU1RY0I3RUdYMWdGZEZDNTZGUlE4bGVHN0pTeEh0VXZ0Z2VWT2xEbWxYYk9VaUE0TE1qTkluQkJkaGNQYUlCWnRtM21CWklYSDEyOE4vZ0lDQWdJQ0FnSUR4L2I3R1A3ZnJndjgzcmQvWjl0VCt6N2hUOXYwdFArMzdHYjluMnBYKzM2WXo5dmROK3owUi96ZW4vbSszMlUvNGZhcDc5dlpIZlo5a3YrLzdaYjluMGt1L2I5b1grejdVei9oOU1iZlYyOGZzOUJ5KzNxWTRmMit1MyszNnpUL1oxYmZzK3V2L00rd1kvYjlERi90K3NJdnAvWEVmN2ZvZzc2dXpPK24zSVgxZEhZRG5WdUNEUUpXV3Q0b1VCS1NJd3pqYy94MnJEdGs4eGVZNEFNVlBGbjRMRHpEWThLVG94dFluaWRLV2crQ1VSbmluZ2tod28xNG5vaVFkVUdUQkk1WDJaRTJhVkFTVzZuZjJ0dFFVSk1MQWNjdDlidmRBeThKd2MwRUgyTU84Wm9kQVZsOXJZUzJwa3pJb2ptVXJPL0lQVjZhOTM2Y0RKTGlFT0ViVXZJTm4wQytlUEl0dnJmVWZ6MlBjVzIxMkVuM29qTGdNV2ZLbVhjcWZtY29LalpZMHdURC9KeDA5SWdVYkhabUpmMy9ZMG1USjFBOFN6dnpxZHIxc3VFNlZaaTNVVnJxTmJOUUhpYjFTaytpc0NRYmNYcGV0eWpUVHo2b2lBYnRsMU83VExBaStTRzVTZm1JWDZOM0J6KzlQYVFSOVVnbzc1L3FrcmlheVlDbVpmNktoWmcvRU5XRmJVWVhtYUJVL1QxRWJiZDRLa3NYQ0ZXd1BmMHE1WjBJb291VENZaUhwcTVVOFVUVXVWejd6YkkzdDFiYWd3ZlFubUI3WEhXRU92N0kwM2pPTzJhWk56cVdhQ2U2emNIRWFLc2x2OTFyZ1JZYlp3YTJaWkt4YlFJUjE2eXkzWnYxWW55ZHhOdjlRZDhrSW93enkwZmlodUdqSEJ4bzVLbndGeEJEOEtQcUlkOUYwWlVJUlFoaXBSODNseUdZc0pTM3h2cDFNTThxSWpRb3IxRk1YdTQrekpsQ2ZsRmM0dEFmZEEzMjZkc0hIRy9IeTRvSmdhY2ttNlFaZzZ1dHFWVkprL1hUL09BWGpKNzJRRmZRNDZjVGNFRU1pOXdVYnBNTVhZK003dVdyZWdLV00vamR1K2xhT1JjZS9CRTNnZEVIUDRJcmhFQVFiK3ptcHduL2VudENjUXZCVWJnMnVvVWw1b0ZtOVpmbGFkMm1OME93NHVQcXIrN015TWljSXJzakpORHVBV0swVGF3QXk2RDVuekZFblhraUhteFZZSUU3NmhxV0ZCTHZKMHNKUTdCc2JQTkJJMjJySlBPNnkrdFo0Nks5MFEyMStZM0tvektWUTFNTm54RmdSN1Qwc0gxOTNEajBDa25TWEZhaHVmalp2WEl2aEhjY05UTHJwMTlQdTBiOGNFVk5xZU9ka3JwSlR2THJ1T1U2R0Fxbk42V0ZlYnI0dk40VGllVVp5K3YyYzhrSVhrTGYwYUd5ZXVyRktORVBINnFiZGNybldYeFAxNkJ0N2pnWURHSkdFSUZiSyt3aEtJcXltcGttWjlFQ0htWjJBNk81amdFcEpDQzkvYjJ6Mms5VUNXWktPYlpsZWYwN0ZrRUM0MlFMUEdkd2h4bnBRc0VDMk5BL2U1R1VtdTF0eGN4L1FwVndKNklpSEF1TUdzUkNxSDl4VllSa0RsakVnSXBqMTYrQk9aN3VEZmFvOUlTajUxUWN4UjZUZ0dveGR3QlVHV21Ld3lOTnVnd1Z1bVBVd3J3MUh1TzVjRkdVTnE5cTE0TWM2a3FZZ0ZBVG1reEpJNWZ3STZkOW1lMnc3cVNxblJTUXE3TTIxemEybEszZWs1MTZQeldPcWpUWlFkRHRSYmNnbkRGMUQzL0FPcEZ2bG1mbENNS1NMSUE0cGFkRzRFczdQRU13Nno4RGRLZm1KMU5tczhlZE9LMmVHWUp4NXY2dlNhdEd6UXZXL3Qrb3RjV0JKK0dLdjFnU2doVWNVUldhbERRNFhiNERvUmFjK3dFM0phNTdja3kyaW1TMzVpNXNZV0J1RFBiMTRSWDhUM01SNDBqKzRYbnVZZXNHUU1KNnhFSjRudmZ5S2xBeEFJeVRmWS82VE8zM3VFNm5pQnVyYnFzMzYyNHQzVEVxbHFIak5GWkZlUEM5U2hZdlk2ODBlc01VeDJpUk9UQlAwWnRzcGhVaWtMd2ExbFJYbUNrS0VWcVdXcm1sT1RpZWtUcllpb29iT09jOURwKzU5STJ3N2pOd3Rpc0tpcTVrTnRHM1JtSjNqbG5mQmEraTZ3bnNvandiYkRCa2xUUFpISU51M094aExyTDRkR3g5QU5OUWNkVjlSaWo0N3EvdGZtZVhCS01IYlp6S0hJUUF2YjlhaUJiTDl0ZG81NCtZY3BWNUF6V0l0cnNkTnhTN0k5eU1abmVzTENSTDZ5dVBNRHBsZjlVVGhqNkJXUXVWdERGTnFHMG1VNGp0YW5nSm9EeDBSNzMvRUNSbFlnbXk3T2U4elZwSlhNbU9yUmVCTy9MMFdoUUt4b3l4QWYxNDZGdFFDcWRNbWYwY21oSGJ5Uk9hb3NvVUpmY1lNekV2Y0xjY1hveUh4SWZORWt2aE9lcngvVWszL1pOaWoyWFNRM01rajArRlMrYkgxbThOR1FDSTZvejNJcTRsUHlNZ1dyL2t2bS9hRkNCWm80MFNOaTJOUEdMTE5OTHVwZEpnNVJvWDR2QU8wZlNmUm56UHEyMkNpbGtRekZIV0ZySXlXWkxuOEIxQ284ZGUyMTRSZUJqVTV3eXFoQ0w5WnFlSlFISzEwbkRzWlpYdWNXYkhleExzS3RqcE0wY1pBKzlOSmEycTAzRUo1cmJZTkxRRE1jMC9leW9MeFFWTnpWcndicVRwT3gvQi9yWUpwV1psa1lqSlpKQzJySzdHWVh3ekt1eGhTZ2JKdFlsbWtTajFPdGM0YldFaFZ5anVkekhFUTZkUXZ0NFhodFVpL1drREh6OXIybTBJUXo2L0lGc0hxRmlPYlFqaVltYkt1NHM1cEliUFgxc01Ta0FjN0cwUXJiZ2lNYWVMRDBqUG50UUh5L1pEUnorZDdFanRtU2tGTXBHR1pjRTBMNnNzSEdSdHF6SCtuSmNsQk1kcTVOa0wvZXJ0bUFZb3FCOUlMNXZFL0Y5SnczakRVamV2akVZK0puTlhXQjVtMXp2Ry9tdk9lOVpRekJublREM0sxTjJUNHNBaU5LMUdVQ3hOcFRLaHJDVXlUYTJzRStUSHhoem5FVjRCajhSZFhpM0pqUFJ1SS9jVDNVbmFVT1p1UHRNbEUzYlJpcWdzNHdmRG93eVgzb0tZeXNiUmowYzVCOGVHYXBCNlRFNFFZR2lUT2NweFZaM2MxVTZnNnhrMmxDV1NhcWplNmhCWEZJWXNqSWl4M1pHZTFwN2hvaFhNYTllNStObXBobmk3TGVWdFhESk45OE45a1FiekV3M0RpK2RTZHBLS0ovd1NUOFZPTldtVVdPVzcyWE5vN3UrTlZHUDgwbmQ3RVhtbHI0bzVjbmErQU1mOUs2Skd1bEpyTEdwWUVIODA3dDdiNC9PeDBMaHlGcjhJYTI3eFRxTGN4QXViL2dVMzBmbjlWV205bW1EbHR2ZXdlREMyanJ5OWZvOWtGZmJvbEdIZGxiQzJnaDV1dnVkRjNFWW4rTEI4dUIvdm50ODV6SGtHMFFsdW84Q0hLaThVeGxiS2dqWVlqellWWGJrbW55YXVVeEhRcGtxYTFjZ1pWQXRwbXl1a21FdUJjekg1TnpJSjRiMjZDdGVPRTFWaGQwUXJ0cUdFWEZpT3NFKzd5STR5bG1JdDY3ZG81SXphRGttYWtXZ3cwTGVCNVd6YXhkb0pmV3RLNGZocFF6c2FueUZqTjVzWmIrTVN2aUJRQ1Q5ck56TzJ3UGg5T1ljZkx0YWhGd25mYTFPREdvc1IvNUlCbHZlY0E5dzR1SHgzTk9vRG1sU1lDRkdHWjIzbEd1SHpONVl1eWNHcXczSEFrQUVpR0JsS2ZwNjJYeTNJSFZKM3BOWW5uMzMxTnhuNHdJMmZubmxaRWVpVFVCVGxxSFdINHh2R1pleW5QTEZEK0NXdmJYZXd5RHBBWHJja1Y4a0hKRkJCc3JuY242U2JZejZFMTNFOHFzcUtJditVVjVFU3hZVEpWNVN5SEhTT1RLNWkwWDNQMDVJMTFZM05iOVhVU214UXBEZjVIcUQyMkJaejIvS3JHVzR0NWROS0RSb2V3K2g1KzBSYnhvOElCSk5lMkJ6SW5sSXpyaVc0Y1pEU2s1Vkdiait2V0xYWEluclY4aE9ZNzZYd1lWUFh1MC92eThWUzJqVnUrNHNqUEJxMUlwMERuZlBIem56SlgvMVdJdndXLzh1bmdBQTcxcWRySFV0NmFHZThCL2ZwanZmZC9PWUtpaHRuR3UwbXRUQkpnZEZnWE9KdzJidWF0UDBXekc4bk5CeE9VUHdZMGRQd0J4VTQ2OHlBQjhKS3k1Y25zeW84YUFvTXk5T2duQjdLUmpJQWovblVuSWloMVVGY2NQTWVucG9pWXZsZU04WGI4RnJWMlBPRXVKN0lKYW1sVVN6eDhkcmR2Ri9QbjU3alNNQk52dW1kMFhaLzR4alE2K2RkYnVFa0xkVUdSc1N4SEFIQlpiVjQycUdvMTJvMFE0em9Cekc4WmhJTHpDVEg0ZnIzejBTeTJpM1V4N2NqUEx0THZJbU9xR01WVzIvTm5wQWpCODBRZnIrOFdkZUNmMVJKaEFvWTlpWVNVemNxNTdiczd2RFFxQm1PMC95aWNIRkYrV1M5T1FNQzJVR3N6aERPQ1ljU1lxcXNTd3NwbmhROE10SWNRaXkvRWdHY1BlcTdkandOTjV6dStzc2MyMU92NkZ2bVliQ3dIY1dielNwdk9GRU83SVRoY0NMV1dXSU1RT3orTVFPM3k3WndpempPSVpDK2FHcEkyRUZEWEIrV3BZOWRvdnFTajV6dHpiMEZheFVJS3puMkEzNGNNR2FsQ1NsMklubTNrK3RpQXowNmFVK0drZHJEWFQ5eVRKd1RGODh3QjY2citqVDUyaHZOVFVibFRRYWE0WDZXQmNDbmZNbEE2c2JrWFVQMXRRVDd0THg4SVNha1g3T09GME01YkR6aGtRajlHL3hNUCtQMVgzRG5iK1YwdWtZTy85R2pwdVhrbG4xNjRka2FuTWNSR2VPYyt1NTBnMUxDVVZlV1B1SldKY0FOSUowcVhua2s1NkNydmUwejFSVnhHUVhmQjJGemZFZVAxNjhSQ2JZb3l6c24xd0dVMWxTSE5GT3pIQytCcXByMFpFSDhKMmFDWjNudEdyUUh4U2dQemtIaExsTFZCWkx6NVFtY05PUSsyZ1hEYlBGQzZZWC8vUk5pUzIwQmg2RE5POW9aQk1sRWh5U09kM0ZSazRHS0hXUVZsZXhHVGFUeFpKRlJFVnR6S2g1c0xTWWVHclhLY3RETTIzYTlIZGZ0VnpKaS9UcEFLSm4zRXhTeStHMTFJV2RjejdDcXRzZXpUUng0c0Y0b2YzcFA1YW1DcGVxZVlrWlBONTJUdVhwTEgyZlhsTzBmeUkzd3RGSDlOOHhudTFkSy90b2F5RXljcGY5TTlxanYwU0lLSHA5ck5sOXVpdVJ0NzJBOFFkSnpqOGNJMHNlZDgybkJFVnE3UEpIQytHZ3plbmk3Q2EwalBwS3pVK1F2NTZSaGRrY3R3VUtzQzhNTWpQakpqMDVUQ21wak5YL3YwZUEwZkRkMU5KTjlIVk82RWFkbFVyTllKL3JibjFRV0JXRHFRUU5HUjhNNWsydFRzRjdRdnFKa1IyNU1JYkZJeWJObXpJc2V4Z0I4eFpVaGdVWWlHNlU1ZXlEVmZqOHo2NGFSN0lqMVYxaHBRVkNPZ0YrUVYzM0RUQ0hrUG9RTzI3d0I5UE1RcFpzdFp1Q2RTUkpRelZQaUpneHFrd3pzNnk2NVVpVWlMVDUyZ1lNRDJDTjlqWU1rTXo3VGhLU2diU3ZjVDZGay9NVVh0ZVYwMGFhSi9pbm5kb1VzNjlRTFNaTFBtb0h6ZEhRdHlDZUpwMHgybWgrK3p0QUpxbUFJeEQ0YU9oMFlaa0YvYUpvbnR4T1V3RWVYc1FLM3Q0ejFRdHFqdVdjUENSb0I3bG5VWjhNLzBMRDlSalp6ZEg2YWU1ZUpKUy9TdFVXQktwNWFQTmdMQk5Ta1pWWUJtckgvaUVOTkUwaDhXYzNhWXc2aWlkSkNnWWJrUzd4d0FhNkVuMDZUSitUd0E2R0RwN2VUU1lyUzFidjNtM1Uwanhyb1pRUENwMmFBeGRoNWN2SjY4SlhoZWRsMndvdDhpT0hRZFRWMkZRck1OeHJFTUgyWkU1engyZFo3RWZNbzBNeDNSUHpna1h4VjU3NS92cnA3dTIyV2hMVTkrRXhlN2FZOFNYRnY5T0pndHRENVgxSDJXQmhZSFNodFlSU2dEc3pvT01hdFhRTlUzbHZ1OTYzUXdpRGZMY1FIYmNuOHYzS2pKNDBBMkdoRm1RaHo1UnVhM1NraWJMWWlXOGJPbDl3dlNqbnVBU3UvZzZZV3RYQlBjM3BNK05rU2FJY0lwSU00RFhnNzdLSjJSSm4vcVgyVFpKakJoOWxwZXRNU0dLM3ZsNWFZS0NsQm1EaGMrUm8xK2Z1cjRWa2l5Zm1Gdno5elNVNTdlaVAzTkdwUit6VWRpZ1lNUVJpZEN3KzF2bkVvdEZPb2padGNGTzQ5VU9UbkFuQjN2c3Y1YnY5eU41QjVubHUxVkdjVUsvbmgwcDBSL3llcEpvOGFPQzh5YitEU29IL3p2aDMrdnN5V3h3VFJOMmtoR1JESGNVVW9odmgzUkpFY2VJTk53SUZmeEhPQkZpb3BjeXVONGlPUTBONjJpK2JncVc1dDMyQWZjaCsrNy96TGJVd1JldnpxVjNIUVNpdTNOL3lvV2hSMUFSODdtOEFtcHEyakFyRzN2U0g1SFFLcGduT1BjdmV2RTQrb3FMdUtUUkpvclB5cGx6bmRiSkFXd2Q3ZTI1dDNRVjRTZWZPa3kvc0E5US9CdHpaYkdZeDNydklYRVJGYXJvT2FhYVg5ZTk5Uk5xYmY4ZGtMbHpTQ0hsNFNJeDhFUEUxc2xoQ3JZL1Vsb216SndLNTRRU0hKdG9UN1VZRnlaZzlrTzV6MHQvcENCNHl4QWtFaTZrSlp6b0t3aHdQWmpEUTdxRVdEVzBrVVZZNHE3NGU4VHhmZDhpWHVETHlzVkVjLzBhcEFtTzE4RW1rd1NRWDdQaUJoQ2N3Zkg3eFhZMlljdmNoRzdjMHowaWh6V1FMcjIwaTdRVDI4c2o5dTEzS0JKNXF3NEtDRG5TTkU3WXhRRkJ3U1MrR095MTQ4eUVsM3JHSFpOaHo0bHA4RHdmUXJrUGJWNFZHWDcrOE5sZDBKUHI4OExrMEFsNC8xWEdPNmVBN2Q0MXBxNHVHR2VxbDc3NGRnS1FrcnZHVlJEWUZ4YmRMWGdqMlJsOUNFUlhKRXJkRC9qVlhmcklYa2xPZzNUSFh2WVZhYzIvMXViblQwTmNRMysvbGprMFlVVkVjWWpoTmRqWkNoSS9aMHpndFJxdzlYTXh1L0c3Y3czcmZLdzQ2bmFDaHNIZzNtWUVSayt4SG92NVVLWHRDY0RRNmdiaFdsaGRhMi9vT09IR0IzUDZBZ1IvaDBTUXpONy9MV2lMcndLUjBDUlk0alBZU2E3cktqVVVERlRvenN2YjZuTUMya3RjMmVLcVZieU9rOFd4MGxKVmw3NC80T1NSY2VHU0JyVnVReTNWSzlZMjJmWXh6WXViV0N2bHBBOXNYZmtkZlpkb3VPVDZDdUdKSUhVNldWZC9KSFJhdTVsWldpc0wxam94Y3NuempnNm1Md3BVR3NOZS9IWGZuZkZOUVJ1VTY5VHFPL1pLWmRLK2phdmU1N0FjZkpPRkRKNGhNV2tZbFE0d2FFTEpKZUthUGE4VVRZUkxVOFlqaWhXVlk2d2VhSmlaZS9oK2Y4VW1CQjlWTEhhL2gzdWhLTi8wV2V6Qko4aFVuVGxma3VRcVVoNGJyeEtvL0lBcHJvRVFkQlJNMWJDZGxtRUF2R0c2WlFVYmpjaWJyRlBQc1IySE9XemFWR2pJQURKVlBjNzd0NXJOTTRKNVc0ZXh0SkF2clZ6TWhBajMyaXpSUmIyOHRFSUxGaGZzVG1CT2FneHpsK2JEUHpPcXhtSGdvWFRHM2hGMXJuMFBJMnZKdjVHYTdBSzhIdVVJcS9GNzVOVlRyRWxHelN4V2RlaVJ6T3FQY1lyQ3BzNDA2Nm1iLzZnSHNpSWdnbzgwZVF6OTQrQXpXaXNMdkxwcHd5MThiNkVhMTFRc3FZZndIQUxscUl1UHpPeUF3NFprT0RoNE02RGtLRTA2VFB6Y0Rud1gvaDRpTElJcjdyVzJEK1RzekZ3QURvSUZmT1NYRzZDTUJmaEM1K3JmMC9Hdm9NZFphaHNiUFdVM3orWU14aHFGaVU1di8yQXZhRFVUU2JSTlIzY0c1eEd2RlA2RVRPSmVxQ3hxQ1piK2xZczNIY0ZnL0N5WHVERkdZSTVuSk1wWFltQ0lTMENSL1kyc2dsbHgybUtzaW9VOWYzeHhrb1BVV0J0a2l2L1EyUXd4cWRqaFZ1UWRXZ2N6RlFTOG01S1YzZHpTUGwyVkZWOGpIdTFESzJMYlA0TkZOUkZFaEJrUTdONEh1b1FNWDhiV1Q2RUlEc0tIazVtbjNmTGwxUTdoNEdmK3pidWljZTVOUDErNWw3bnl6MEU3T2MzTWJQK1JXazQ5b1dyR0FvZmZPd0ZING0wSGhQZUVpY2lZdE9BU1BYQ0tsakRWZkloaHNlMkwzV1NycC90WlFrTmtrNkcrMytPTlBTZ3BnNEF0WWU0bXloUHRaai9GSzJOZEVaZmVzRjhKT25iQ2xmdStoK1VKNml0YlkrSVliRnpVckZGQnZ5cnRUdmhhdG45S0V0ZWxxZVBqVG91cWJNTlVnNmNFWGlhbzB5SmVpa3p6V1FWdDQ2cmlwcmRHWitLNkNSbmx1ZVNVd2ZxcG1UMjYrN3VoREJsUkF2NEJjYndBWEMxdkx2RlBHUi90bysxamZCa2FzQ3FwT1lvZjZob0VLZlpETDlRcXdQZUhOMytPTXlVeUVKWXpKUi9HUTYwSGJCY2FQMGtrRGpucjFsNmxvbFNtTk0vd3ZqVWg3NEhoMjA1TFJnenk5UFc4WW5nZDgyZUhnWDEwZk96R05GTHBhc2xSUWtHZ25DdnBOK3l4UTROaTZwZGYrcU9OMVRPdWJJWkpwcS9ScEFyNVlUd25SZ1NCRVd2ZTgvb2N6YmYvMHNySkM1NnUwYmJKNHlZWDlFSk5MRnUxZzhnNXpieGowRTFlVk1FdHh6OTNZaEJhdFhFaHRjK3JsQ2RFNE45QVkyRTNSczhMSkVtd2pIN05xQVJNdTZ0YjF5UWNOWHpCKzVBY3NXTExYamdhNkQ0SmZGeFlLT1QrQStmNUNGL0dUTFNGYW1iQ0ltWlFuR2JING81WmZadEozaW9JZW85dThwTHYxTHg0N2M2L3JrY1d6RnVWU09NT2l1ZDdzLy9KSVYvS3dMR0p2VnpTTEJXY0pRemQydmtHd1AyQW1oVm1BOEwxaUgyYlVFQ0E2elFLTTVJVUYwcGFqbGgxT0o0cXVHRjErVDg4L1oyYW4yK0E3OFlmK20yc3ZoOW9lN0VtNHpUSitrRUl5aG8xaGE0M2liUGd2dVFuTG91SmpHcmk5Q3NpQi9iOG5UaGZSMDNOWjh6eHEyNVFacXVMTGFCVXVJWTAzZlZPRlhoc2FLOHNPNzRVSVd6bUlTdUJvamhyTHJ2Wjc5MHpldW8vaW1pYWM3V3RpNVNyZVkrYVc3WlU2ODc5OHRBM3dVcW5abEJGNlhndndDOFB3WnNHM1VGMC9lSy8zYXZTcC92MTNIRUY4RFNvOUt2YVZBR1ExbUZYVUlKRTRZbzBFUnZKc3VCemthdmxhY25yY1VNRlhKYjR3YVVNTDcvRHdnZWo1cWhDdHVtU1daM2dNRnFaRVFLMHVPdHI3bFhndlZGcThSa3oxMnNGU215Zm9RbmxuZWlicFNLYWNma1ZsWXpMMXRDdXdxdDI0RGNGdmlKV1MwQzlRQ2FzZmNvdkhyaXU1M2YvSGhSUG15bEsrZU1FREg0d0RKdURvakoveHpoUk00bXNBeHpxYjNLVjRlZEpGSnZqcU4zMGVWdGIrQmY5ODRaeXFrV3oyZERUMjdHL3o3Tk5Tc1ZKQVV1aUprWVF6VWFCck1HL0FoTDcyNnFZbUlJLzJlQWVwbTNZdTFQV3pDMVBoZWFjVkVXc3p0VFlMd1hlbkNPRXdCMDhTTGlRSnUxdnY4MkJNTUFFcVpyajBSVExpZ203OVpDZXJWWFhWbHFyMGNRdWJJTm9HY0lySWIwUncrY1kyRTE4TmNPd1pwNWRndTJ4VndiaE5sY3YxaU95TTJmWlFVVEVWQzBmampFNlZDZHlyeTRLVTV0eXVkNnF0cXp6bXViNHNXZUFKMGxoZkd2dUFvMW9yL3NuTjJRbmtveE4zTC9PYlpRU2s5cGhEWVAybFU2KzE1UUQrVkZSekpsbE00N1FHNVRTRGVmYVV1VnBsb2RrQ3hEa0toRy9HSWlCSmYxMUlZL1d5YkloMEptT2ZyVjBaZ3R6ZE92cHowNFBaYUk5Y1JJeEVWNlY4OGUveEhKbzlDdnNjd29aa3VmRHNSOWd3SHdhajg1MGE5SExxMmZvOWRxeHoyZmFtTjRkUVNqMXZuOGdzQWpjdFB2bzVjaE1CQUgzQmE4ejdlMFd3R2xkWmhOcEdlN0ZkVnJDWmtlUzNYMEJoUkNKYlJZaTF5UExEZnB1aWQ1dW5vUWE5blg4Z3R1VXRaVlcxS2NpWmd4Rkw4VWptKzFheHRhdHJaU2R3U01rWFN5ZDhSdjBZaGhxWjQ3US80V1JORVBZbUREV0FCT3JZRVc0SDJzQWR0VXlCdEVxcUdvVFgwODhOQVVlcC9BTUJGUVVpQ2oxV2tLVzluYmtCbURvUHhSQ00zN0lmNUY2djdwc0hBK0l6WVF0Ymp2c3U5NENYaU9XNVZiYmpoT0xDOVgrdWVET1Z3QUlkUlNXK0NTQmJPTjBSK0MvRENhZlIyS3I0QnlrK0VZQXRRZ3p5bW5Sd01sVnpOTGMzYytRUnd6eHlpT0JwZmZlT0tJNlBGNUp5Yi9NaGhXN1h0UGkvODhYMVZCdlFlaWc5ODdOdlRtR3BtRVJmTm5sbTJLUDdVdlUvczZKeTFET1hVZWNyT3d4WkNoTzlCcFBLZXVrbVVHV3BOSnQ1akZNcFprYlVqQU9FU3VxUG00c0F6SklYSmdrNmlLWTN4S1lmWlhkMjRSdjR2Z0lLMWZyaGl6NVl6eVc1bXdOMjlGMlR1a2psbFljZE1ka3BQM0lSbXlqTG9qbGtxMDJwK242TStCMzZvSStOa1JkTUZHZXBZUTVHYmQwWjFjUGc1c0E1Qzh4cjFmOEhkenJRZnhrWHNQZmlJVjVuL3Vmemx3WW9ENTVCSkhSTUYxUS9BcWxDWm4rZWlTRDdpTTMyanp0ZVVSQktRK3pFWnRseHhqbkJ6ajBydVRxVHZXUDJBaTN4TlpqU3ZUMkZzenhEa0Q2Uy9ETXUzSHE3WUF0R3FFS2ZUakR2T1E3VE0xL0xBY1lqYW5qNlMxRHoxQnF6dFlKRkM5SUt3eXJrTUo0VmZUK2o2aWk0WTdDZGY2b3diN25KTVd1TEdsS2U0MCtjbWs1bG1oSjJ3T1JtaDNqQjV1S3krSVhlUXpTUlVrMGZLakNjWGNCMUl5MFVhS3lPK29jU2ZlcytBTFRaNTdKY1NzVDB1bU1RVy9VVUZ2UDBvODFwYzFQTnN4YXVHWFBzN3Y2bHpSRVRNS3Q3WTVmZ1Ryb0NacUc4NFZjUHMwbzgyNDdQVisxOWlTU0FqaEIyWm56aWZOS0hyY0UxQ29VM092UzBJalJtM3lLcFZ3RnRPWVY2V0swMEo0cDMzT0JISmN4V3JiK3o4OGFMRWlVS252b3ZHQ3BXdFNGYzAzUkdZRE15bFlmUXpsK25QMk5pbDMxdHRvekFBOE5YOVBVdEN1ekdDMlhtYmNXam9pMjRDb2liMVJkMG1maFROWm9rWFlKajlnclJRV3lqRXhiejl1eG1nekc0RER3OXNZcVI0MjBaVGR1Y3Y3VGUrcnBEUU1HMFoxODRsTWg5Rjc5RkpKZy9DcTdscVJ4aXp3SXg3b2FEK0dpV3Uyai9aTGU5c3NaWW44eDJMT29MY2pOOGxNWUE5b0lCOVBKOTJ0OFFiZVA4ZWtJRzRvZWgxZXU2SDRBZmRXc0RQUmM2dnhqcEwwUTJIRDFVN1VZTGl6QTNTQmVJOGRMTU1BWXhwRDZQb1k3akFWU1hWdmFOYjRMRkN6eXhUNUczZFkzWjR6QkZpK0NYTm1hZ1BtM2g3d2pRRDZhMVpYSVM4WnpBM0ppU2pzcjdnYkxXd0dlRkNmenh3WGE1OFpXVDM1bmE0S29ldk5kLzZCem5uZzIreGxOc1FOVUJWc3hwdDRkVlJNcFAyaUYxSkM5QjhtMzBHbkZBN3RnbE5BZExUcEt3SjUzemt0N2hJNUxabTRKd0hiL2Z3QlZRZzJ4SXNDclJydW1QZE1mVVpPdkFZYWxIbDVUeW1vUHI0Q3lRTEYzRS8zcEhyOEdSbnNmY21Md3diVDZwTDJoVWlwVHBZZ05RcVhtVkZXV0NyclpjNFJpOHRkeGtnQVBOeVI2c25SRDcvL2VMMlRHNU8zUUoxK09RSzJaVGxrS0xUR05UWDR3b0EzaXpJQnhNcjNVYXNVVkxyZ1AxQVh0Ylc4NzdJZDhrb1pTYnB5UFgzbXJWQkU1YmZ2b29WUW1KVWZLSWdKUHpwVWM1VDFDbk0zelhLajV0UWNLMDF1bmNTK2xTRDB0S2hBYWRwQWlSV2xEMkdGUEhBVElwM1lHdHVybjk0cDNCNlV6VW5mZEVMMEprWFZTVG1vNGNuYTdMTFF3NFY0NFJCbWFlbkRaZ09GYTlGUkNhdktJRFg4U2tuS3hzSkNKMGd0OEFYQ29hK0RYRTVrZmltTkJLRlh0ZSthSHoxM1RBUEV2RzY1N1ZRU3hNUXhKSlhBOWN0enBIemZjWXBQdmRhZWozMUFOTGdZdmsyQVRRWnRLZTBWYjg2UWoxQUduRzViZDZMdFVFZzVOMTFZeVRLZTlDaGwrTmI5WU8zcFdiU2RsRXJLMG9HTUdtTkNQZFg5RXRpcmU2dmNVTEs3VFlnK1NIcHpNcFlaUUdzWUdmVzE4eUQyNDBBa3FLbWYvUGJVVzJxejJJbWN4b0UvNjFuTWVuQ3l5SmZmMGlxdDN3L3NjQ1lUWjM1RTE3TU1xOW42Y2dic0d2VFQ0S3cyNXFqMEwwUE5jd1hQcUQzZ2QvTThNNGpBY1RhUEgwWGpsK1JFQVZxcDdMd0M4ZzVrYTFnWHovQ29KeExveGpQd3ZVR1p6aTl2bmF2MFl0RUpxSjdHMktLanpyTkpDM25vNnJNRVpBT3hjcXJkRVpxSEJNZFNZSGJPM2s4U2h4NlFFRklVWks5ZGM3MllrQ3ZDdEV2TWlhMXlKY3NMMkVacTE2Q2ZvRnREcDBxbXVrZE9uOVI3OGN4R3k3SXhIb25CT1E0T0tuYXV2YXJmeGVpUHpXcm92M2VHRlFmenVTQkUyU3pQbFVlQTJ4dVpxelJ2VS9uNVZ5QUdweE9WcUtIQ2JNS3I0RXM3ZlI3OUhoeFVlYkxUVE1pa3FyL3FHVXZmZ3BjLzluMHpyTTI3bkpvcFhRS2xDa0hpZGY0QnZLaUdsaGVqTDc1SHJLZHhkOXRMU1VzdmczWHk4QlR1bEFkQnU1K0ZxRmlZR1o2UjQ2R3R6ekl4djRES0x2M242MFYyQVN1L3gvaE9tU29IeHFQTC9NOEg3Q1VUYk9jMjdsd1JjSng3eGsrNFFyQURtM0cxUCtjVThmOElOL1dhc05tNXlDNVVUQjBKSE1uMWovK0hkMldBRU9HT1lUL2RWY0tJVmJpdlRMZXFYak5sQjFpSnJheUNvWDZ0TU1oOWRzUWNRQVpieXdWWjArQ3lQalU3NVBFSXAvTnN0NUNyZWhKMTV6U0dwanZqczBvbGxNNytIcUIzTjIzYVJORWtIZXRsdFlkbmhibGNFY2FZUjY1cFd0bTM1b2U3dk1Qd0s4VWZDWk1FRmE4c1hjbUZ1MDU2d0x6eXE0WnhWVGRrSGc0Z3FBS0N3U1pERDZzSEhlcEc5SHAzeTV6aEl5UWxpZkJ0dEpOQnlzL2tmNzltdTRsb01pdzhpUVFCY1hxUDlQbXZTbTVRTDJ0UzMwK2pYNzhPc3Q0RW5XaEN3MWxZTXdBY0VhQW5wM1lMY3lJL09nejVWSDdwd1hFOTRDQlNNaElXYzY0a05GUHZXL2o3WktCUklBTlB2WERaQ2Fpd09hNStsUmprclZNd1ExbGJjYmZWQlFwbE9EQjMrSDB6SkZuVi8yZkJreEFNNWprYm1UV0pkY0JPYTFoanVrQUxzdVlmNDB0NzlheGlUN2hDUm5kaExzUHUrN0VPemt4MlU2WG4zWWFxUE8vclVkdFZMSld5STZOVmVsMU9XNWZVWVRXdTNBa3pVVkZTQ1RoV3N3NGwzaFpUalkyakdVamEreFRuQlNNYXVpWVJvZTJ5YU1LRTNmSTBNTUM4Q015NnFVNHBTUHloaTlhNnl1Z2MvTmdHV0FST0VnSWRJak9MRmhBVEU5aEJPTkVJTDRNVHNEczBsdHN1dVJ0cENzVGRHTVVRbkUyQzhpNWFrNWt4cERKK2llSEVVVGp2Z3RnaXJjMUMxY0x5VVNNMnlTaFYwQThIa2djZVFyUXQ2ZHNNSWs4eWJCRVhsL2hCYjZuZDY4N2dhWXVRNWtlTkpmS0ZkbjdXTUIwQy9aYUl3TkVVRi9IVlBoSTh6bWIybCtPQVJkM09oUWY2Uk5DdWJwY0ZZaWY4MzVpSnA3RUxhTE45ZktHTHdzTk9jWGFWaVQ4Q0V3NUlxbitnK1orc3E2b3BtK3RzNU1jcDE1Z1ZqaHRmTThVS1hLVEt6djQzTUN3clB6djBGWmNzYWdST2dNdlI2YzJqRTlyL2U3anYwVFkydnlTSWZvbUlzVG9wd1NoSTAvTE9jQUs5dk1ReUl2bkNEcGFIblQ2czFOaXcxd2QxM2FJdmszcEpncmpPUjNNSFBpcmJVSjM3akkwMGRhOWkzOERPWVV3S2VXUXZQT2hucHpwL1JUT2RSY1Qrbi84QkxRVU9FNUNKeDNSOVdWVTNpbkxkWCt3U0ozbEczTE5wanNkY0pvSzU3YWpIZE9DYTNnMGNTZGF3V3AwSXlzRHZoVWsrVlZnMW5pRVpqVUZyZjNtWnNtVTJvMmdsMFZORDVHKzNNR1QvV0NZYWZtdW5abldwTEMrcEtxUjRneWpQTTYrNm5XOVNkZ1JvODFEL2JjS0JRUVVGSnZZd1hWb1g4VUttNzRWMTdaNmlEc0M1dVRzZGIwQ1dlUHNkbXAvNEptSWVROHRvSjFrRE5rZEQ0QVNucUVrM2twaG5OZEhaWkJLOGo0WjU4RnRqem1UclZmZ1hxUjlUNnNHSWI3V3BTdkdYK0FJMmJPVzQxMGZRVWNjUnRUcFFOVzl2VU1WblhISXFZT2EwWnBvUlN6T25UM0VlRnZtaWxOanhjb1kva0FMT0F4aEk1QmV0NVRncXkyTHRCUGlVYnQwNHhweXU2MjZ6Q3VhbWlQQngzREljMjlocVZITFVYZHZ1U3hLeERNWjRyd3hIWEkrTlc5TlJabUNvelozenFUK2VBYXRvRGM0ak5WTzZWdmdSYzcwdi9xUVBpU20rZE1kY3VzNzVrSzBKOUt1V2d6aTBtODZycVZHekYvcXpXTU1iVDB3TGVqa1U2U2ZoZ3p3ZTB2d3JaMmNyTXMvRlR5NVFjNFlDbysvdTZmdVVpbWZmQ2d6NlRmNExrYTFJdGhkeDJ2REpxeGJja2dWQnhydnRvM0c3dWsvdVh2ZVVKM2V1OWZGa3ZMQ2xNUkJ5ZEU2Y2NhaVVPc01DaE9EUlFhQnAvMHVDVG80TXZwMFY2YnN2a0hKNGZhS1RUKzhXbXpOL29mMGk0RGlVUi9uSENPODdMR0Q2VmpmdmtIcUx2LzdiV2ZYZHo5OUY4djIrQXFiQkhPNnhwNWhwYXRkZFZVek1DTlRBMHl1VmZQcFNwL0E1S0FlRGh4N3NxdTBQNFVnVVF4bmxGQmlxZWZkS0drNkdza0RsMXk5STc0cUdKYmdMS3VWVGI5L2NyTlVqMDZCMWgzcTlqaDhyU21xcU02a3dTVW00RkEySHAzdldNbzg1RE5TS1NUbDcwY2wreUpsM2NVZS83bDh4Z1lLWmN1eG5paTRDUGc1Y3B3NTdKVFAvRXRCSW9mbG5QVGc5V3ZBdnQ1c2VzSkhYeFlxM0gyQ1owUWw0eFh3WEM1RDJVaXcrR3YyTGtveERCTzVrNlNTNHAvdTFtNWhFZzJpUEo4TFRxb21pVDlUYlpINTJ4eVhFdGpBRVVab3dlQ0VuMTBXZ094Z05nUDAvdUpaM3BWWUxOdWFkMU9jQW12NUtKQTQ0ajFIWDFHQkd0dEYzN1BTRnFPYzc4ejkvYVI1bFJrNUhTdSsvbTVUY3V1VXo2NXRFbkFaeTA0TW5DTjAwd3d3eVFoY2gxcURzYjdJYXpUa01xWDdNa0lPN3gzTGJiQldrOVQzS0JId05xR2pKSTJkU1kxNFhBcFhXMDlTc00zTmhSV3RybWVRR1dOMHJGL0RmWEdVQnpPM1ZQcmlLVEVlb3FUVU15U1doQUhPaEF0SkVWZ1dVR2NpckpPMnl4dkU4UXliMEx3a0ZhMEJlaFp1RHdlMTBUTVlPRHZuckdMcC9uUFhpZ3FzUmQ1QWNlUWVieXF3MXFkQ0ZlcFdSWDhkZDl2dXBueUs5dFo4UDRmQmlldjdyZXFHTG9MZFRwekk1YXJwb1ArREFWalZSWGhiN3NrbENjUStaZUdsQXlBWnFQMEU0bUNkc2NxYitUa1RZVm8wVWZscG9UbmZNNXhHNjgxWXVqMTdlNnBHUU1CTHN6SC9Ub1RLVlAyWEZqOUFvcy83aDZSeUpjcUFjd3FsYWFxSGwyc0VTc1JSQkcrOUhUUVRkRGEyR1lFWkVQSmwrY2NGaUxnQ25aclNMQ095WVBDaTAvRWovVWR0cVVVczZUcFhPYW1nbjBoWjB5SkQ4NHh3RzMrZFJkaEV5NmVuNTlvU0c0SGlKczV6UUd2ZTNRNVNsbEdlNU8zdUFZcmlxdExoV21VZFM5dkEzNU0wNlpTcG5WTGVMeG54aTVpMzY0ay95eTVGc2hLbkxhVGM2TEYwWXowL0xib2NDZWhWSkxOYndiSk1jVEtSOWxlVzF3SHVhdWFkMUp2NHUwOGlUKzFDckY1MGRQNjVVVEVuTWxzYmdvYnpobWEyVFRWazM5SStreWpTWWtzZ1JPM0JCUDdDY3JKTGhmYjEydDE4ZmdRYkY3cVFIYmZSMzZhVHBVQ2NQSkh5OTZ0S1lwM1J3YUhCNk5ma0pseG1tNUk5dEoxb2ZTZU9sK1VLMm9HYnFuODMzR1R6L1FPNVQyRjBmd0JjSjdvWWhoc0VwNHp2OHMzU1BacSsxZFo3OFc4RzRiL0JnRkdMSUVQZWo1UVNDOHBQdEQ2NnR1ZDZxRzVERVhYbmlaY25KRVlWR3B5elVQMDFUdFN4SzVNKzdmaFYzQUtrdmg1Lys0SEtVMXNkQlVsZzAyTVNTdDUvNU1HQ2lucElZMERXendpYVdYOU1wTUQyT3VTdXk3clZYZUh6ZWVmRzNsdWl3Y2ErcTJyM0xFTE43USt6NkVOcTZLMDg3K0hzZm10WEJUcVIyNFBwbEVGTmFPMVh3VW42c2Z3aDU4L2RKbCtnbmkwaVBRS1JwazU3dW8vR2tRUGhLb0hEU09wMm1KUjZOT0Jzc0tIcmxHT05aQVV1cTZzb0p4TjFhSlRsYk5uZkN4SGhlRGI0S29jL1ZXTGhocEJLY1gxMmpTaHlZU1VMMzRSTTVxa1pGWWpBdUViUmluc20rR1VoOFhHM0NRTks1OVVNTEJiNEVhY1Y4bXJSaG1Hb1RFTzV1RWxLVzFMd2tJQUczZ0VPSFdGdXgxTm1YenRxelhuYTZ6K3FtdlhqeWk3N21wL1c5YzQ4ZDYwRlR4UjFKTlRQNjNaSTNDV21zWGZVUTlJdlF3VE1jWkEzbG8rQkJTQkFVeUthYmdxc1Z6amNOd2MyZnNXa1ZlVHFNTVRrTUdDcUF5L1c5bmlkOCt3eTFBd0QxS0Z5UXFuSkJQUWd3OWMzRmZRUkR5d0ZLTjl6bDdaeFhSaDlxVmVuSTNwUkpoSWI0Nm8vVDRubkwxcnE3d2F5U3RDYm9tem8xa0krdFJ3dWZBUTQvdDFJamlidEhaeFlBWWYzcXMxVURBNXR6U3VxRUFWUGx3QlRGckE3WGFyNWhIT3N5dlRXVU0yczI2a2xZeUpEaFZZdTR5Qk15Tkk1ZXZpUVk1VC9EZkpWRkFwMUZHc3l3anhIN2x2VHd6T1o3R0hUbnRyajJXTlNjRnJIV0RFM2M5K3o3WXNTbWwxcEtMS1pBVitQL2ZxdnNGT2IrUEpGVU90S2VVcktUUEFqczdKakVmWlIvK3pxNDNoSi9WdDN4SlBMbHduZXMxUm1MdXpQdXJZSHE4dmlaMzVPbDNEZnIwd0xENTA1RWdZV0hPM3gxenlJcjJmaXU2REVHR3RXTHZoK01jMFhxbTNOQVo1QmczamdlSHNKSTUxV0pzZEhPRUhNc2piYzZneEZXVWdFZGthVzZjMy9Ldk1OdWlPOU4yV3FVYzE2aDRvQVMzRy9YRlJEVC9lY1NFUHplOEVMSkVsQVFvVWMzemtlMFZaMGVyZFExY1NpZFFUUnl5aUdBM1JoTkRyaVVkZXdRU3BiUGIvc2VYUHBnL0E3SGNxTnBSdkxOZ3Q1RnZBVzR5R0pHTzNjZHQxVEtUNXBOQ2VGUno5aWJPQm5yaHFCREpNOXVLTVpGL3hTNEljbUZnR2JTcE51NjhFYnRFeTFqRmJVWCtjS1hxdEcyZ0hkUjkzaEpOcDRXWC9OR0diWWJrM3lXYTFRNURsbC9DUnl5anUyLzJXdEJjTm5yaXQ0K3AwOGlQcFQyckRaSllJT056Q2Zva0dTOUp4bHpic1d3VFJlQVBvaDhjWGV5VGRyRmhNK3Mvb3c4RHJib0lzVjRyektvSW04SXFqbm1pMlcwT2tyaVIwVEhwRDZoZXlMcG9rMzB2ajJRNmdETHA3UVArVDlTM3FUbXVaUWxmRFlaWTU4VUdOaDBGZjVtdk9FbXFta2hpNThMdE1rOEFCWjhDdWsrMVdYNkhOWmJvU0FSellkUktWRWxOT2RIVk1OMm5vS0dTREp2cHJkTEtSMGp4aVBHb2tXV2V1SUtmNko1VXFTWTlVSXNzU0swUFJ0eXBTRjVYeXlsWVQzWGQxQ1FQbUFOOHRoaGNtODUxeFRLbnRVbUx0NXd2WGE5VzlEdzUxVHM0L0tKVSthM3RoUFBrTnkwTjcvUFJDYTcvM1kxWmZyMktBalRXR1pxVXdsQjcxRlZBajdURFlXMjIyL1pKTytKcGVYdWs3TmpKSDJXOUZLWnhrTHhoL3NES2Z0WFRuK2Q3a0tIeDlyMUtoOFk3UUwyMDB1MklKTmJxcnpycE5xS3BCR1NXcW1SZDUzcjlMYlo2ekU4N05oMGlsd2NQaUovbGprdzk2VzdybkNNWTNnWEJveWZJeEYyMzFpRGJweEp2VW13RjhMalR1WFlyVVQ0WjhzTzljaUQ5aXMxVzlaNTRBYkczd1BtWVZ4RkEzcWE3a0ZNQS9TVlB0dDFUMWc2d3BTRmQyRndxc3BoYWxWdlpteFJwVjJsZEpwdTdCTXR3TTMwUGoveU94Mkh3SUg3YVBLUW1jMEZNTWMzYkVxVW1DWWp4d0EzT2MwY0NaZTRlSmE2VDlaaTdtbmhRWUU2QlV5YnYvZnRoZW1makhjcUJUTzlrQUthVlVabjBINnFQNHRZQWhRQVhJRUVMaGwxUlF1ekFaMFVSY3FUMUgzYXl1d05TQkN5clBYWnBneU5EdW9RbVJ6MC9DV1ZTSkxaWnVnOTVZNGRzRC9ucHZuY1B0V05GaWxEZnhXQnJXSHFVbUlCcS9RUTFmUE1qRWpsSDV0UjJORUpmMXdnbXpBZ042Smp3eU5aelJuT0p2aU0reHUyL3p3YVpIdThUazRCaXJmOU9WclRCanVyU1d5WlVJY1J1TTlEM0FuTGdBaFArMXhVRjJMSWhmazZGUkZzd0xOQk5Mb05VQ3ZNbUgrWkF0cVF4Y3VoOWZQQ2pDMXAwdW9HaUdrT0N6d2Z2SE5OaHRsSkh6VGMxZ2hhZkpIVklBMlo3U1YrQVhrUWtEbkpBajBXbXdmRzVINDFNTS9WN2RqTUEydWl6TXlYaUJ4cFFBazhVTFMrbm9CQWdxVkIwVmNRQ3pDWG1FRk1kYWpST0tiOFNHV0p5QnErdWc3RGJKekpZUXRwc1E3Ujd3aEtxaVdBM09YTDJXYTBGWFBHV2Fxa1VTbGRHTlJsMmZiTGdFVlU0V2xRaHRxcG4wVzZ2RDgrdVVkdEpHMCt6cVpYWFpDRnZpcHE3SGlpRHNNYVJzVE1XTTZNc0ZMUnpFSjFqbjZKTzhWWjhYQzJFcFpOSDRDVjYwclRLZlRMOTNuQzYxNFRKZUVBNnNjSkw1TzBZODBweVVHeitWYm50N1VnTVV1WnZJcDRWWnp0RWFIZ3RBYUNyQ0JWalFJY2F5ZzlaZkd4SmpaWUtYekJQTkczVmlWZDlEcjRRZ1NwTnVQOEkzc3J1YWdKT2hkS3RxcXhtSEpiZEZYRCtlUmNwanZCdlZ0UHB2ZEVjOXV3Q0E5V2FWRSt6bHNzR1RiYkYwK2FSZnY5WlA3WW14RGQ1SGZyVHlnbVg3M1FUTnpNeDBIWE1XVGtyZHQ1RDhlUjBhUytMUkdMMEtvQ1FFcit3QlNTUlNYczB1cytYYWtCK0pydkhmVmVORWpxaEw4U2FKMVZXYTM0MWQrUmtYc2FNVE82ZXd3QjVYNVdGR2lRTWlSZjBkVHd1eWpYclhCZ2xKL1FxczBiUjhWMzA0MWN0YWtaeGMyOXNrd2ZUaGhqem1QbjRDaEgyNHRqVjZBbEkyaGcxVm1WMitSUFg4cGVXZkRaNCtRYUlIc1ppT2hKZnNNbHp6QkMwY3lmRXBFa0N3U2xHQVFXUXQrSldLYXJKVmhtcHZnS1Btd0ZTK0hpNzBtRmQ5eFVXSUtrZFoyM1VCWkJIZTVsd1N1Q0NodFI4aVgyV2FHTUFWYitKMERmcUQwZC8zdjROSXg0THQ5N3NvTGZNbkpLTDlqbExCRzlWczBGTEJvREpSU0tWN3hDK1NSOWVvQ29HK0libmVuQ2ZaUllrdlI4bmZTMW5aQmI2VnBUelZVb2pQcmljZUpiUHQ0NHB1RXdTdUsyL3J0MTV0MGZZdG9zVFIvZU5LNTI2RFNKVjFyaFRHR3ZuWDFqTUM5WVNHNi9DblI2elRRK3lyd25sTTBjeE9RRnRUR3VraFRDR2R6MGJTclNCNXFJR2V4Y3hRRGhrMytRcytLQWN5THBIWEMwSGlBSnZSZGlTSjJMd2I3dDdlMDhzREdyQ2I1MFN2UVNQNTBtK3VFeEJVNjF4L3A0bVFFc2JHK0ZDZEt5REtrOU8vYWRLMnZIVXI5WWdxajRuMHh5b1RzNHBJdUtVOHhMYm1uUjQ0M2Vwa212a1ZwaWV2SGdDaWtHSUVHZHU4WGd6NXBmN1F3UzZIeENzRFlwM2xPeGsxYUZUa3J0RzJkUmI2dHhHUVpqUlljT2YrYlQ5VG5ET1drcldhVmM3UnJLMDNHaW5UQlJENGN6ZjRuQkFjbHRNa0JHV2NzanZPa3I3SEZ5VHI1QVhhbVpJMTRtVG5naVhJakdHbTN5T3oyZHZ3aTRrVHg0a2E3Rmw4VVV2SThrU1RNNUJEeDJIMHBrM05BdEMvZk9mdTVia1M1Mkh3ZGlBR0VKM1ErOTV6Q1VLNDJGeTUreXloRDUrek4ySDQ3UDhkdnloU2VHREx5cTI4QWxPbHI2b3lrQmZwTWZVejg3L3JlcGtaV0hWY0xoaTNYQmRSOXJmUlA3WWVRVlBtU2FiMUFyWHhoL2VTbVR5YVZEZkQ1U01VdGlPeVpVTDRCVCtEbmorT2pNL3oxTmFUUjM0eXBNZWo1VUMwaEZ3L2xlTEZFK3pBdVBocGRNQkhSQzFOa1M4V21rbnBYSmptUkV1Q0JtNlppWDdqOVhwSURlZUk0OCtRNHhuZmRqalQ2K2k5Sm1IVUtwOHgxN1JMS0Q4dDAwcHl3d1BRZUplbXYzZk5PZ2Q4K3NxNVVsdFJvMHJxYzliVlVKeUNyUUNOSnJUUXQ0RG9RVXEzbnQ4WXhkaGZyK3VXcDJRbkUxM1lFdnUxa2FVREcwN096WERjVzBkcno2OEt6dVNTeU1sN0ZKWUpCSXY5eW1XS2lpWFNsZFNSazgvZUczaGoyVEVSUkRnSS9aMUxLc0RxSS8yYVR6Sk9HWUFTamxqZUpENXdDeFB4N2IrVmx5dUp0cFN3c2l6eTROZlp5bFZIRkk3R3oyUVZFUC9YVE9TNGx0S1RFZzZuMVMwZUJZY3NWSmVUUEk5WEpMcEZSeFhKNmhhNGNWa1hLOG5taW9WM054V2FJc0wySVJsVTdTRGE5MFhwOEhnam1FZmZHOFo4RFEveW8wbm1JT25kcXRCMk5ZVjBTTXZPSWRyZHdWWjBxS2QyaEZqNHhVWGpYTUduN2RpYVhHVlJ3VUVtRU96dXN4eHZISUtBZzFWRFliRGV5dStlbnBRdGgrU0ZmRXFPVDlnM0Y2Z0NUUHVTUlF3bi9lYmlYc09sK2V4aDF6VllvYlVrMGxBWGxUZDJOK0RTSFdzemxuakNlRE5IV3hqNXY4c250WE1SY3Y1SmxpbHBuUU1ib3hyUnRnWFhlc2tTSTlrN3pvTW9VU0R6TnFrTmMzTUlHU0k2WXRuV0RFby9LeFZlSjJrN05lTmh3K203eGkwTlJxbDdVWWo1TUg3RFgwbkRuTzVtSzlwNGlFRERoamNhRzNqWmxEOWR5VkhTRXA3SnpUNWorV0hONVZwSGovRzBEa0RLUlF0Nm92YVlXTGtxVzhIVzM1T0QwSm5PaUR5Vm9lbWZZcGtBVEdDTEZPWnRKWXhJUWJ5Nnk3OEZ1aFhGQ21nY1BaczZCdUZOOEUrVXVLUnhqK0c0bGlINkhodkhtREEvWXNOeEZsdktvUDhqazdvdFpUbStjckoxK2VsdVpsU3RuQW8vTUN0dE5HMkNZVkZjMHdEQW1MMVVvcjNiQ3dhS2VLbDVFU2R2V1NYTlJUKy9VOUFUeGdEWlBxMjJPQ1Q2emtDYXpyeVAyZnBLcmlaWDMvZHJiNFY3THlQYzRWODVVeFZ4MHhlMTRURDRlMkZkS1h6TW9PeGZwK3FGcituanZqWnVvQ2d6K3BoSXByYlovWXlsNHg5WkwzR0JkMFZmYThhUzg5NU04Z2NOU2hKNTN1N3RMdGRqejBGNGFFUjRFTnBKd1plSEtGYktnZThUSmgzTit2RmE3eWdaaTVCbll6MnIrV0IyUmV6SmUvTzcyRi95TWJmL3RuenN0ZExGNHdtOWFxcm5iNGZkZU1vNUhEVDNtZEhmVnUzK3h5aTZtUmIwUHVYUzUyQU1hSndSZTM5RFNZK3JTYklvcmQ1Nzcrdk5xMEE5VHZJUVMxME1VbjF3ZHl3bVU1QVZpZmIwR0pHdC9ZaUNPZEN4QjBZSE8zUzlHMnkvU2kxcjVha2JmdjRWbjl0b1FvcFh6Z213ZWZMeFE1QXFVazZpRFNtckhsMWN0MWFMQVRPdXIwVXcwQ2pxL1ppRDlhdHVXNFd6Qk9DWGpONHp4eS8zSFNsMzZaTmpla202QzFXWGVtNHlWenI3M3QwM3NIakpTRW9xMG1sUU5VcWRiZ1VXTWtUb1FwVG5HSzh0MFdEK0NCSGc5UmFDc25UcGxsdC9wWHRlMDZYQ3h6M0VZa3UyWlcwUlRpa0t4U1RWLzI4eFY3S1VRYkhEVnR5WWllT0wvcktLTUNkYkRxTStSUHo5V29palEzMUI2aE1vTlJ3bG8reFBudnpRWGdLUmc5bUQ0R2tpamc2RVRIT2Y0c1hDVGk2ZFhsb0phTXJIaW5ld0d4VXM4eEJaT1lMRCtETXBCNXB4MXpyV1huQ3VTS2lPNHhzdS9YSkx3SWtoUEhYcFUraDYwdjFWUnFNZFdtcFNGcEVtb2xWd0xaRHlhV1RUVFVwd0ZBS0Y0WGd6bHpiM3RmOVl3RGRhSjFTZzk0VEZkcVRKem5nT2VjY1JadFlyUkpxai9Yc3ZMN3J6Q0c5aG5nVmJWK2o0MHEvdWZVRVZ6VGtGVjduT1RLWmU0elh5QVE0bFprS0dmTDNTeTR3QTNNTGt2L0xqVkRXWmE5NkxRSmRhZ1FVNFQ0NGtqMnEzaGdsa0RubDBKejRjR3dNejlkQ1hPRzk1cVRNM1VjZDl6ZnVUS094M3VDMlJZYldDcTdQcjMzZ1ltQVNDSW0yelhJQ09UQ1o3Zk1PTGU4Q293aGRIMWRIYnNIMGpveCtJZXpxTnQ4YWUrdGVkdFBqdDR3bWhUSHl0TE12NXc3bW4reWNacmVFS3dGRExyZS9JMWZ4R2UrUm4wbUNiMnFsVnBaaWpyS0dncmswaEd3RzRGOGRvWmFjbWZMSUdlYXlnQnhtQzJpMmlHRDYvNDE0STF0cjB2Nmc4ZWlCa3U2VDhWUHBkTWhEbkhmUWZYU0t3R2dieDlIOC95S3dWUGdpNDJkanpiRi9lUmcwR2NURTlJTWttQUR3OUJFWTN5RXc0cHVGMWJYRFhsVjRQVHpjdndadlBMSTRiRGUrR3B5WXQvcFZ6TDc4S1BxM2g0MVRRSS9kamxid1hEVzF5R0pNeWcxZ1RlMTgrd0Zxei8ydG0xWXY1Tk1TZ2pwTmR1UlozN1J2NFhvSDM5WnBHTk5ML1lTMmp1eE9vdCtDMDF3cTNxb04wWUdXb25CQ3dndmVDOHNjOVhqNkUycnB2WGxORVFoT3hKVU5HY1lTR2s0RnZSZW5wQmZ6UlRBcDZlTDExZHFDenprTFZoQkRxM1pjZXBubGZvMFRWbDJERXhOZFRMTDhrSm5NNHhtUldyQWlWekYyUnFnQmhhMCtwaVViUGhsd2c4VzcwaVhZd3BzbVFlRzEwNVhpam1EaDllVW44b3RzdmpJbDJNQVpUZ2x0bDlDbzRLVnIvM01CYXd4MzI4UU9peGwreE9EWEFiZG9NUVAvY0cxNzBGNWFINjRqZUpSVFQ3Sm9qaEhjV0IrTFRqQVN4aTB6S0pqR1hXNCsvZmVsaEIwZ2syQVVBQ3pjUlpXMVg4b2ZqRURTVEhtUWRWdEx3MDRZMFVSZDdCSUp1WU5ENERCRjAwZ3BWcWJ2cnFwSzNsM3MrWHVOTUNtV2RJMFVJN0RTb3VOT2l2TmF4Y3ppZWExM1RmRDMxZFN3VVpHQU9lZkdTbnFlTE1lSjRORmFkb2dtcDgvZXpBMVRLeHU1ZGF3OVUwd2pHb1o2RTJRdW5ybWsyQXJzNHc0QkExR0FnMUtlSi9qZUh1dWZ2ODdWMUpmQ2JkTzlVQ21MU0hlNjVQMmNuMDN6dE1ycVZ1MG5GbGxiWm50VjB0bXhyaDlQN1NYckRiN1YxYlYxdXR3Tm1rSEFKa2p5Y1lQc0I0K1FJNjB6dkZLMXFSNjZubXVZMHNpYWtXK040ZjRDY3dHNEVaYTZyaG9aS1VvQ29uTmJFWWQ3eEN4cTZ2WTVqNkcxZ2lyZ3J4Y1Zua0U2Z3NRQ2pTemczSG15UHNhUG1KalQ5bnl2dExvMExLcEJwSU5LNU1NbUhMclpwN1M3cDhjK3JiTi9jaEViNTJ4eUpjckI2bFp4Q1BvR0FhSjQxa0t2UVphZE1BZWNtbk9HeTJWNHBodys1NnA2WkdUMVp0NFk1bUF1NXNZUk4vcTZWZ2JqV0MzdUwrRE13ek84dXlTMkJUdVZTNFY1eG9Fb3NLNmVBV0xwcXRCU0Q5OGd5Q3ZjUVJnbU12ZG1vWG5LeXlNYmRESHJVdGFwVjV4M1R4K2t1K3A1bXhXT0dyTWExeG5KVzFhMzlMM0ZBQ0hZRzY3WUtiRkx1bW5GS1NjWEdDVzNYMmNRbVk2L3ZBTEd2YUdlcGR4TG5weDBwZmVVTG42R2NiMnJaMHpkUHdnY1dnb0JXNnNJUEFZSHluTmVPdmIxYUNzTVVLc3A3aVpha3lIQ2ZOenNKWkhHM3VFVmNYWWcvRGVWTUhWRnpxU05QZmx6UjRCU3NoeXdBaGhGaGtxajBhYjhuN1htc1Y0UThkWVBaa015UFZRNFlaQmNMekdBTmtXakFKQ1BmaWZnZHdGUEVvN0RGY3l1b29Fb3QvSmN0Qytla2VGbTVFOVRjZC9oNnY3d0JtMGRaemlkZ2V0MFZvNlZRaGxUSUN2NXJOR3RJcnE2bEd2b0drRlRTU0IrMVBOSlQ3WGFjRFVJM29qK2dOQW40TlRmc2h2VEdQVWpBenorMlpDeDJjSlIzeGxkNGk4eHU3eTlVK3pidkV1RmRVdlV3RHBtamRMWmNoLzdwMFg0amNzVzRpZVZTVU5DeHJscjliZmorNnpVUG1QQWZOYkJTdHRIQ3VGUVhTUTF3dHVoRFhZaEswdEcrbXpmSUlCZXZkcTFLaUlKdU5HdlVtVEJ0ODlXUzJ4TWE1akRodWZwc21RdlJ3dG1WQmNPTU5WRnlpVnJMQWhnRXRSLzJmb29kUGl4bVFzczJUaDlVdEZ3aWFQK3ZnRzBGSnlZY3FwMVplL2N0K1R1U2xDQVd5TFc2dHl3QjM0UEgvcExsbmZ0L3oxV2pxTHluUTdkb3V2TE1PZnlEYW1KQkh0SVpzNFBHU2ZtZURFbDVyR01laU54ZmFqL2IvdzEvQklma3JJajVoZFZFNFhGdG5pSjJPVlBWRjYyQzNLNFdWZUlueUt1blladjMveWtxWjh0V0RQM0svTmhOWnFRcUV2STduVHJVVTEvSmFBMWV4c2RLZDdtODFCY2pIeW8zU3F5T0NUVWZqNXBTQnhLV0h2OHR5aEJmeUpNV1Z3aXd4T0Fjeitmc3FqN1dpS2hnMjBXV05YWFFKSzlsTGtlN0tYcHE4RkNoaFc1SS9PaGVZeXphNFZrTEpTRjA1NmdjTlFCVlY2dmNaMUFNaDdtME5FOCtlNVBON3VDTXVreituTFdhcWgzbkc3U2x4Q0QvZFpmY0tZaGRMc3g4YXZCb1NPOUcyUEtKVVkzalBXVnp5Y0tEVWluRWpmMHNtcDRybmd1MUpkSDBPaGE4QVF1a2RvU0hjVFBiSm5tMFZJVkd3eEkvOE0wL0RmQnkvSXdvTUwxY01SSWlsUFBNR2lmQUNuQ3hTNTZQNHlYcWREYThZRmZMVVloM2cwemF3bXcyY1d4WjhlZmRkVE5FRXp2MGM4Vm9oNEo1RnJaT1Jkdml0NVZYZ0J6SzRJa1BpRlg2Vjl1bnBPMFB3aEFsL2JCbENkL01QN3hwRWVnODhzOC9NOW4zWmhYeFZxaUgvbGNEdEFaSnR1S0V2enlaMmhwVi9mT2dkN3cyRHJzSUFnVDJvcGR2ZDB1dVk3ekpLYkUyMTA0YWNrQ1RvL3dHbW1KWkdPOGR2R0prNWN1amplRW10aExxT1hwdWNhRE9mVXZBWEcwME95VVkrRnZWVnNVa0w4WTdvUmtHK2ticXFhOFRkQkZDa3BkSTl5WTN3WkkvQ3ludER1MmpYUU5sQTJDWmlnckFhMVpQWTFqZTlhYUtMZ2lMdGZjdXZrYTU5bVI2SHlMOGhOY1BhYlJhVENYR3BQZDhDL0NjYzlVRDJCWDhjMHFyRGRDZEQ4N1JCWFRrRmplejRRM25BYVBUQjZXRkF2dDNIc20vRjBJU2krV0pZQU5pSXFvbEd4OW1qRjlKQWpxVm9rMGh5WVUvcGZPblkxU1FMdy9WUGlWS2w3cWlTUk9LWXZESEllbDdvMndRczlqTys2N2cyc2FyYkxUUDlUa2NzRUFsSGxYNU13TGZES2MyY1huZjVjY0c3TTZ6SWJHZk1uTWxPWjJ4Uk5uYy91WnpXYlFHb1B4KzdwQ0oySG5oV09mYTVKaDhvMG9HTFdyM3lXK2tFTnVEM1NiTDhla0hnM3lWY0wveFQ3K3RLcmh6NHk1VnJTQzdOdWNVL3lWeUk3VzhHQTBUdEYxYi9WUnNtYjc2Q1dlTFBNYi9WQi9kYTFsaVJTOThnbFlIdFdwZ1B0QldsdWZNTzhjd2d4ZW1YaThWZFZzeHJTNnM1VUU4T293SVpnSUNwYW9HT01KamttVllrMEFsMFRSd2RrVmxsc2JkVnFkR1RQd2xOUXNZczdSaHhQOHVOdHlzZUQwTE1pUU9xU01IZUhnN2g0VlphaWpGalJXQUJNTVZPYldGNTRGa1JWMlBrUzczNUhXTlJaZmZEclNXNEVzWmpMN3FBVHhFanpTOG5XR1YzUGhJYjdxYkpHT3I1WE56d1Z3QU5uK3Fhc1krdHloNWh5WUpBZ1VQeFA1ajc3c2lXeUFRRzNSd3NuN0Zvd0FpUHR5VVBkWENUUVR6WHIydHU2REtnYkJvWURzNXlObXFrMW1qbnY5ZFFXOTVnNmp0ZHg0QmZjTEx0YTFsTDlJOVAxa1pTNXJvbTgvbExTSFBxTVp2aWJCRi9SWWsxa3dFYlE1WkZBcUxFN0lwVmx2TDVYR3FkL216ZnFOc01DMlZqWmh6cjIwYWNIZ1hYd2ZJN3ZYa1B4YzJvbjhSTXRmSkVCenN0WVNpclFxOVlrK253T0VjK0JPTFJVOTJlYzJCdDNyZUxzNUNlenJiOXFpbHdjRk5YOE1CRit0d1V4b2hVQkxrY3VIWnlLWnFqNkJMeVJzeXBBVXBTQ1VYRXAvRVE2WlVJdDNBOXRld00xbTc1K0NmSUZ6WVI5VDZDMnc3a3BzcVg2ZWJuNThtS2UvVDF4SCtQcE5ERklnRXZzS05UcDJLL21BZFMxTmk0OExYWXd5cC9yREZhMUFtYTBrOTFIRkk4Q3JWVjVOVURzQW1DR3k1cGpoTWpZNGRZdGdwa3VMMXhHRjVjZnNSR1BaM2psakkyTUNrTHF4QU9XWjU5dm8yRmhJK0RINXRDT1I0NmhJeGF3ZmdIamROTXJTMml6aTN2Y2x1WEN5dmR0QUpHVFc1SGVKc09BUHNrVk5yd3UxeHgyM0VnOHJFeHFqZWRzUHR1VzdTRFk4bG1sT3RBQVdpSDUvT1RSdG9TMS9vM3BTc09VQW1rc3VZbnUwL3E4TGtZWXdIWHBIeXdYQXJCU3lqMmNnRTRkNG5Damswc2NhNzZkOUxzekJMZ01jZHh1cHZTV3ZYVm5mL3RvcklqR3Vpb1VmL0gxMFFoaE8wakVKdUJvc05MSmNVOFMzdVUzUmNYN3BTS3BFR05HVkJlV21zOS9lazF5Y3VXVmlpbDdYN1p6emJMWnk3M3pUSzJkdi9xc0s1eWgrSU9zc29Zb1ZzTnhrZTdPRmtQbWRSdXhWNDFFbUM2OGZjYStNaDZZQzZxMjExOTZ3c2J3dFJ5Z24xTXRtK2VvTFEvUlRzUFpPeE5zZjljV2pBL3B2THhsdXd5V05QUFF3UnBRSHowanZvelpoNzhZZDZ3QzNRNEx5ZC8zMDV3Ymtpb1FzUEVQSUtvVy9FQ1VuV0VIMkNPQ094YzRWWThpZ1FkN2NMMUlySHA3OC9uSDMxTjFDeG5BOTV0TmN0WTB5N2NWdFVXMW1JcW1TV09iNC94KzBhcUNuREVaZVZ0TWN4RzBHbGczeWZrejd5aFkvemtwUnZzVXc2cVNkSmdXdTNmV1c2aUpoQmNmSkFXd1FJY29RVXFKTHZzQUlacTRkUWZYWExqUmhTRm9IR1BTek9CWFljVFpmTGxNU3RvT2NXbWdnVjhRNVJ0UFNVdXdPNzdiREZTcTFqNm5OOWl1OEE1N2RjemdOS254NTRRWlhzUFByTkI5RzFaT25WZ1RmRzZTU0pVMXorU1VwQnFvWTFFL1h6WFQ0Y3V4TnB5eVNvWERlMzFmZWFCZTdKRndaa1dHcmcycytOREdMSW9ESjI1UDN6d1puYkpIWERxSmdMNVRsRXovRlhkRUhxK014SWdYa2tLd1dnQTBEK3RzTmJBdUlDdDRFdTN5R0NlWHZIbnF4K3FFR2dsVUtoMEQ2VTdpdnFNYXF4RW1zSjIyYkl3TGY3cEwwVEd0aWQwd2JtV21vamdQRWtVNFFUdnA2a2V1bmF2RldDVnNhMVpHakg2K1J6dDRIbVQ1NUJCdFFCYzRURy9scHpNUTIrdDVsUHA2WFpBMnhJa1JHVWV0L3UycVk2RWtOS2RxVVZZS1pZVVIxSHVPUkord214Y2taK1BvS2ZKcUNZMS9ON0xhdDVJSmhPWFdvTTJZWGVTbGFwekVrNUFXRXZnTjRsS1FvdWZqV0N0eVQrNmtVYkpXcGttUCtmNGw5VGo4NGd4NGV5N3lHMVR0SXNMd3hjVTVwcTdYdGJjQTNqcVB0K2dPaFA5MDlEaU8rbTcwSTZ4Q29wK0VRY0ZLWHBEdCs0bUg4UjZNZWMyN240NDR4Y0YyYlYxTUlKWUNKWVZDNThiOTIyUnFsU1RzM1Jsb3Z1NUxsTU5TMmxrdmZENktPOXp1b1R2NnBKQ2RtdG4rR0F4elJjUHhDTmhIL3hzYWNlK3hPY2tTSHpoS01ycXJMbytzUEtxL1I0Q1RlaEd6UlVVMHVCTjZBeFEvVVdqQ3liMzZwcUN6aVVyZTU1KzRVZkRhQjdiZUoxN0UzOTlGT25UTVRzNnlqOUorbDZZT0d3VXQwRHd4MjNKbnJ2T3V5WllQK0tjQ2tta3VkMnpXZFlzRGFNUXlZUFNHbm94NEhvQ3JseXlndTVyUW1TcWRXRG1UTHd0Z1Z2a21pQ2tZMm5SZjFjZGxYcnVxSXRPV04rdHA4T2c4aHF0NU1xT0t0VkJ3UjR1RXFLcVRwZm80WkFFREE4eXNmR01WbnkwWWtOVUEwMnpHRkZNMWV0ZCs1dmVqUVhodmhBbzhQaHBVUGFjWHZJSFBOTTArRTkxWTlUbXJHZkphc1FyNnpseHc1bDJLaWkzenpRa1dtRyt4SE14Y3dVSFZrRWJRU0JQWlpaMHJHdDJ2M25WOGNteUpEZ0M4V0lOQjNoNFFHcmlPNi8xNC9aclNHUTJCdVpidDJKTVNMZWJlS0FERHRYcVFNZUxWOS9tem5oUHZPZXAxWnRYaVRoR01oLzhReDA4NlNpdVByT1NybFpKalMzNG02MFBMU2VINnJDYWwxTFMzNzRWUWVmZjZrZ1FqaktBWFREM2tBRDYyZi9nMGU0YXZSZjlma09GbUtqT3FpL0Z3QnlNNXdpZVhjaWwxL3c1S0lLUHNWZHFCc1FJNHdLams2ck4zUUFUUk9VNG9wNFcrTVJnMVkxcnZuZGhwZWFleGtXWkF0eXduM0t0b0ZlanNYdzR0dHF3djc2Z1pieVpQWDhFc1V4WXNuYmQ0UXY3SVVuUUlPekJKTk5aVlhENm1JZ1UxeFZkUGU5ZEg4dUs5dndPRnRsTElXSXlOcFdZQVVJSThRNnE2TXhGQ0hTdFcwNGlUQXJwb1dZc05KVUpnQVF0UnF0bjJUdkIzSE0zamNMTTdJMDk4Q1lNenB1SWFsd1JlemRIWUw0ZXBtV0RPVkdzU1FzNitKemhCemJ2YjVmY3RncnhFRlQ0VExLbE0wb3A5YXVVd0F4czgvcVFxSE41Vmk4K2o3YnhNUGs5dVB0b3FJY2c4L3Q4dk1JaG1QbVlmRlVmeVpOOHVPSWMrcDJrdE9Ib0t5T3RjY1VXRGtmbGI4NWZPa2NKcmZIblhKT0hPb0E0eHRnaVZNRG5IT0JOQ0o5bG4wVlZFTWFhY2xmZTcvQXhUWHdTSDBzQk45K2hvdFJYeU9IVWlUbWJpTSs3RGhxNkNOd3h3a3gvY1hUODZKOWZFU0Zxa0xXemlvRHp5VnE1OWsxcXZCamVGS1JQU3BJRDdFQm1rYjczRHBZSWhXUW5rdEpjc2pUZy9tYWs1Y1RSSXc1WHVTMFh6NmdSZXBBWDQ1ckNzM2NaUUQ0THZ2T0hNNkl0UllqU00zMDNyWSs5Yy9UOU0zYXNaeGl4dVZPdWJBS04wM1R4ZEQrcVNEOHQ5ajNLMWxocldoUGgzL3VNRkNxekRDZ0RsOUFNRWRuTS80alRZQlREWFp5UFpNemtpcXN3OG9PN05GOWZLR2JuN2FqZTNKcitmc1lZeW5YSElkc0JkV0NBK3k4RENxY3NnUktjaWZGSXg4OVhodms2Y0xJNWY5UzdOOFVkU2VkSXZuMFhMUksrNjc5T0ZQQzZmbzhzMVpNS1dreVo0em5jdWFSS0V1dEtOc0lEMWszS0xCRncvczdqZklwV2VBQ3FuWkFnZVBUS0dDMW5RZzN6WEtXZTZEV0hkWTlBTUM1dkRZSm9xR0Z2SHBBRTJYUVRMMVloVndnbXVEVHhzNFkwS1dkYSsxV24vT2tORFhoQXdxS282NDhHa2lXRG5nYkpBRU40NlEybHYyZXdQclhMRlRtazlLbFNVQXNKMDZ0MkN2WlFzcnl3dFRRUkZ5QXVYeTNSOG83R2UraVRJTERNNkFOV1BRVUtTWEtZalVKZ0RNbnBuVTd6NnpteXRoL2lIckIvbzZ2T0VVcmxuWkNNc01abXF2VE1GVUFrNmdIM3ZtdlFjUVlsR3lhYld4bGhLbWF1QkdtcG5ZNDJaL3lMTlZLTS90bys4emd5WjNMZDlTU1d1ZW5yeXIreWJ2dGUxdlBsK1l1QmxKMGZrdEtkNTJTNVF2bXhxK0FIRmVUdnBKTTlFS2ZMbkVxUzFEZlU4MFl0cnZPNk5RcS82aHBtNXhUTVcwUW9NRTJKaE5EdmhKa0dHMHdvTDB2czdYOVFKemNlWUxnWmtxRy8xN1NmWHR4VGkxQXVmME5hNGc5dWx6eFNMZGZqdTJPcTdKalMrWGVCWHpTSEtUbGJ6NzdJcEV0UVYwTHA3Z0s3NW02NEVYdUxTbW41M2dXOTNlSngxZm15S0tjdm5nU2NXMXczdytld2hodmJSR2NiNi9SWE50RkFLS0NoVlNrRE4vR1lrQjBObFljYzFYRkR1MTRXVGE4RUppRmVCeVcxV0JhQ3N1RjR5UlZ3RmUybGdYR2NLRmR6RnBINDExVEdyNzZTbVYxSUVBeENNK2lSK1QrMUo2UGFwbXloWDJDVldwaVhFb2FDSENhNnpIaUhQUEFnY1oyUmFOaFZEcFA4Y1hReUhUUHRaNGNEOUVtanJFY1RyRUxyNkttK1ZjYjRoOTQvOWhBNmJMT1k3N1FxNDRSZzJHL3g0WGprcWxsT3lXSG1raytwR2R2ZmljczkxSE1yU0pIQWRrd0ZLZjBYZVFLREJxcFQ2YkduTlZ5RFRmK0NUY2Z5VGNrTjMzRExxcUQ0dU5SczFJV0dUUllxSkxjbjIrMkJrVUhiQ3pueHNtYUNVQVA2MVdvenFyOWs2VDBPdVhFMUZuVUtwS2JPSHBjWTUxZm52Ty96OGdUZ0FWSVpjZXBhS2xKaFl1dGp1NmhrbVA2TEM0a09uSmxvTFlUKytzenFoYVF1Sk1rcHhkcldOcnFzaSswTFQ4bXlhKzRmTXM3N1c3alY2RzEzbEY1aXlzL1VIQTlQTllScS9CMFJBL2lDVU5MNTlZQkxINjhoOXVjSzlJaWlVQkkxZmdzTGJVaTQxUmRmYU9jZnppYWZNRk5FVjBTNE9taXVoZ2RnZjVJU2txK1JEbFRqVURDQ0wyc2V1N1BHcWVYNzQyTjc5NHpqeHBaK1poR1JxUmhvYXJPSWRXMDFTbmR1QVZINzVGcUdXVXBXWEFwa2tQcXNLeXA0Ymh2MUtQWGE5djJxSjdIaHFiRTdCM3NpS0EvVjhKMkRnQUpsZXVmNDhxZDRsTjYrRnJBME5qOGVNdHJKTG81REJYOUVxYVhCTWNQODRBL0xzTkZ6eU9pb0RWN3FTMk5KWlUwekhIakVQZWFOSVp3U3hSdDMyclNCbGNtM1pIdjhHWGdZNUZSVFFua1ppcWd3enI0WUxlQmFEeTNQbHZlR1RnT1gzMUN5OVJYVmZlSEdYN21HTTJxeHBhcGFBN3Q4SXB2NVZMMFJTdThuNUJmQ29ESDlDdUZad2twQnpoaHVMQ2NZUGpCeVdOWUc3bHJUV1cyVmlBemxwcVFMRjFkaHUyUnN4MFFmL2gvZHVaNVZMQ2Qxb2dhM0dNM0ZIRUNiYjIrT3NzYmw5V21aZGJvdTROV2orbG5KRHNHNkg0MGNtdjZxUk56bTI3azVQVElWZ2kxU1VZTWdBbE5CNFViR1FybEJnb0Z1enREV1lYcWNWVVQ1Q3puY0RQcmF0OE1Dd0lsMk1Ec0ZERmJsZzA5NHo0U1VRTXppdVJYMGgwOHpIcmp2TGdmbkd6NHJQTUREYmlUekU2Q3dXQTJLeGEzZEZyMTRXNXNjOWo1OW5UNUdhWUZIeVIzMWtNQlV5TVBCVldhV0NuWEVlZytLOThQM3hiSmpTcVNzM1lsbFJSaFVmOEhmMVVvNTVoQ3E3cmJURWI0ZERzRmI4Sy9pRmFpdXRPclZMZDErOU96R0xvNm4wN1l0NTFPcmo1ZUFldEVGOEtqZGlTRThySk9HRkh0TDgvUEhxeXdRNUtNR0RwRmJvMjNXUDY2WkVISXdabmc0c2F5ME1NelRmcm1ma09IYkRsb1JhVHRZdGdxankxNG4yNGtTaXhYZmtHd2VSWDJiWTV4VFZPWUw0VlV3c05GanhZTVRvZEcvdGdIMU9UQjFTd2szRFNYam9weHRmV0dqei8xZkF2WW9DOU10ZWZqZC9sTDVsdXNVaHJ2MS9WbGpoWTdpMlFPdzdZdVhDd1ExRms1cW4xNERZcG8xYjFUa0l2STBsTGNiVzZKV00rRkxFUGtyaGZVZjlxRkhkS3JtdWRCMFBZNGVpUFYrMk5ka0x1dDdNciswMlBvcVB3SUdTQVpncFlpZXBVWHhzdkhSU0RkZEdveW5hUDFhR2JUZSs3MWt0RTN3d2xkREZ5SWtXQlpFQldCUmhMTzJ4THJTNDZmZG4xTzFBdWd3dGlJMXdGTG1ibVlTb3VxZWkreUo3bmFxREtnNnlFMFpxWEppYUpaaDg0S1ZqZ21yYUE5SERzem9UQndiNGloNFBXeTVyV0o3eUl3a3UvSHJxYTR0cG5BWjVscUdrMW5FSWtkQXJGVGk3TFJnTC9GK2M1VVp4dS9ldm5uNFVSdGtZY2tsVmRaM2ZMS1owekVnVi94SzFCajhYcjB5a1dwdkhOcC9PWHk5RnV3ZHhtb2t4c3Y5ZTkwNHZFeWtQUU1FT0R6T2J0a2tETGx3Y2ZiU0VlcXFmb1crbUZVSElhdG5STFVBSkQvc0NCSTN2ZithWXY1WGpsVWsvUG5qN0ZhY1FSNUNMZFlsc1loL1YyVjUwejBSV3d1SW9nakY4ekxVWk5EOUpRUThXSmtodXpQY005bWEvTUtiUzZvTll2WDBzU0ZIL0llYnN1a1MyaGVaSE14SGlDNkZ0UmlRUy9tYURVUkNMMGpMQjc5WXF4dm5NTGYzcHFIeXpVa3o0Sll6blhOb0w3ZjVRdkFvYjJVbVY3ZTlyMWFmNlgyMndMNmFINkJGT3ZOUFpIUWFBdWVVYzdSdDlWeEIyalcwakI5TmZQakdqR3owSEFCdklpc0t0cThNSllmQWNsSUJLTjVpeDFINGJibGR4NnFodC9Dc2hJdUlGWEZsWnRxZnMwOHduVWRkMzVZbHNoQ3ZUNktBcVRzWEpncEkwdVQ1azFkY0J4a0Z6TWlhbGJVWWFJU28yZzVEWTVPN2tkTUpkWXVQaXVtSzRpR2VsMUMxU0dxeFRtaVNIdGh5bjdJc0o1YVZOMjdZNE44SkRiN0NDVCtVQ0c2RW5iWmswVXh6aWhwaVZiV25KbU9mMnNMVGxIUTM5VWVyekhrKzFheDgyUXYwUUlOKzIza2JxSVdXWXY4SmpGRkprcndaT3IwWGhFWENUM3I2RnNDWUhVOTFwdVZIbkpCNFhBUXZPZlljdU4weXUzREpBODRJUDRqRFh2MnV6RjY3WVF1aHVFYUlvVlYrRWtCaHRHazVzZlZWN0pZNGdQWE8zSkY5c3JSMFdtVTdGMkxoTjQyVG5sRkRkVGNrR29YSlN4RXV2SEdKRkN5QmkzK1YxYWVBQmhQRS9Wbzc2VVpsZ2lhaUd5ampQSTcyM0xYWlc2QkU1NmcvcUFlZ3NESFM2RmlRQjdrdXRVM0FpNVlISElTV0I5QlBiUUUwYXNVZEd3QkJ0MDlXbS9KZEY2dnp6dTJwUlpPbXVIRGczYUZXQXR4TThUN1pLaWlpc1NSdlpSYlR4T0N4TmYwZTdHUEpRU2pQT0RtU3BzYmhSbE5IdjQzNEVHcUc0M1VGSWpabExVUi92TjIrbUk5RVF0K0NRaTgvQ2xBMnZrdzZjUzJPc3FxTlJ5ejB4OHJCOGdrY3ZuOTg4WGIzaENUVGZwSmI5bGFTVzJNby9JOHJTOWJaVTdOa2NZL1htaWkzcFUyb0xuUFdYWmhKa25CMzR0cWtSUS9QeFdTVzdXU21hQWVKN0o2VnBxbmxhdWpyUlZSemRLOXcyL1ZuZGo2M3huZlhFZWIyZ3Nwb3lHWVZaV2wzTTh2OUVCS2ZZUGRuY3BNTlUvd1BMc25yUzE1VWNlRGZ2TzU1bFI4NmNHVUQxZVRhSEZCSXhPYmlNeWU2dmtqd3NISXl6bVovZlBxNldwT2pZZk5Ec0VDeWFsMTk2dWxQUVM5RXMwSmw3b25LSDZRdm1maUhpWkNWZDl5b0xHa3JiODE5SnIzVEhzOUV5UDZhdTZYbXZlRm10SkgvUEwxM0hwNURkTlgwdFJ6aTNZTXJmVzJ2TUVRYnBhYm1WUVdvRkdBeUYxZWdGMFJrRitqNGtzdWNGL0dHQ0JNb2NVTm5ldVdNY1ViYytGWnM3Rm9OUXN4VzNYVDEyMUJoOURtMkNwdHBSU1lmWlF4WWN4MFJIREx2VEhiMWZCU2NVZE03TGJLU0ZUMkpiZVMzZGtPNlBnQ1B4MEJ4RG1EcXZmZTVNbTVjKzlqV2pZOXpSWS8xOW1OUkY2SmRDSFlKd2lNL2UwU1NoZCtQdDhYWVRqZXhRSGVrd1hzcXhKaENxdG9Fand4cWVLRFN0RHAvbjI3VThVeEErQkhZeGRFejE2bEloVXZCeHNYU0JDT0lLLzJqaVFOdHFQcjZTaW4yWitramh1OGo2aW9UaUNGOVdhaWVxMk9WUWM1cHlMRWovRUFCZDdrQWRJWFZzRVdybVhEeEJNOVZTaEYrZ2JiNGh0Nm1lVUJ5d2I3STRMQzNOSFQ0MXZKb1VKRElaSUxRMFdBTTJTaVJ5WDZId3NzZDc2U1V3c0dIMmgzbzdhMUhEWk4xdE1pb2NzTmRtYnVHK1NocUVLWkRYNGcxMzRicEpUYUlaY0l4c1FjQnlvbGdNc3k3TzcwWmZZQU1RQkpicGU2aEJJOHJFcjJLOXp0bm1SeDBVVUNCWmdKdmFVSXgzWFdJL0pNRWlWdXF2UUNlSU5EeFFtN1B5SVQzZzZ6SnJST3ljVWlzUjFxRXgyeVpFNktmNENOaWpRZHNHVis1VjZRclRVWTRLNlNIMmc5VDdqTTlYUW5qU1Z6VDRFdFB4M292N1UvZmg0allOend1VU5zTHBBRnBmMVZlT2lEUTlPQTM1VWh3T0JPdGFtVFpuZHAxWWZXaERzMmxoRk1NUmVXZGU3UFZrU2w4dk1vcnNQcDBOYTJhdEVielV1a0d4bUlVd0FGU0pVUTVFYy9na1pHUG9FQTByV2RMS1NRb0p3OXBneFowd1MrU3AxQ21wOUkzbzU5aWJ3Yzl5amJueGVJenFhV0REU0x4TU9UU2ltbThaR25vcUpiWk80U241ZzZJVEwrbVNidlE4NkxkMUZkZWVvZlhYa29tNlNGcEEycmd1WDdRQVlXNzdITU1WTWtGMGZ0L1hKRVdqNmk1NWw2MDBTNGpjOXdsZmlaTkFCU014NkhtbjdsSU5tZDBvNDhXUWNBcFkxRmNLU21tQ2FHZ3RxN0toRlpSYkJGN1MzVzNsQzRTcEF5blVqUFBnaFY1U0ZjUW9KTGk0NllMRnlud01RckpNVGNmNEVSWFEvMFVTalJ5ZDNQR3RmYzdGNFI1azM0dGxsMUlmM1BNeFA0Yy9zTXN5SVFHZkduWmtOTFJ3ZjBxQzdsV0t0SnpmNzFlWWJ5dHBSaUpaK1BVL1pEdG1ETlZQTy9qeEZEbDZXVm9ZMC9ad2I2NnMwQzF5RHBzODA3dGR4dnZYYnZuYmhxa3VBZkFOa0c4K2RmeHdBNitYV2VaSWZzODdIbHJkM0MycktJN05lRTErQWZldkRQVVhBMERJQjBuZktwWER5WkM3YThSUVNFcUxqZjhvQ3FQUzJpalhBVHEzaUI5OUNGanhVcCs1cUh0ZjJnTUdCanFiN2pLQ1hCT2VVY2N6TlIrUzBPdXVpU3NaYWowS1VUZ2dGdjdLZFRoRUxyWHRZZldGV2lwNTJ6Ly9GazU3dXUrOVRITDBKWmRReEx0alZpaXZESi9hYUIvNnZKZTV5Qzc0NUZoc2xJS0V5MEVBUjdHL2Q2N2F0bU5KWUlHRGVzSXZhNFhFellpazhBL2MyVGVFbTRwQTBsdUdPelpuTjFaL0pzU0x5SDZvYlZobkdjTmVtMUFUVlgwd0V6SytDektlcHlPZkNHcFdDV0FIWkRuRkh3MzZObUFnZGFwYncybTVscFR2MmQ4SWpPVDZYczVNZk5LK3pyajR5NG03TWk5ditiTVo0NUJIRFJubHNKaHRjUlZFVEZRbUhFRmhMdlhOTllhTWs0anZITGowUFNDWUNVTVZpWkEweUJMS2hnVEhxa3F3N2JOWi9DdHErWjlGMDBGbUlacjBmTk5pa1BiSURrZUNEYVRTL2JETXFLWVFnUG9uUWczQm9lSFpyNHNGamZTN1VHSUN0cXVhd3ArMTg0US8rNEJKWkJpTSttVFkwdkNlbFYrOXdrY1NJTnNCMUdDNmlXUWM2Wm5Ra0o4SWlIZDY3UDcvZGY0bVVmeXkvWnNyS1ZSNThlNjZGandmUFViVWRiWjFJaWVsUnhpZGRFYjFHazdhcXVMZEJLNzV0RTRJSzczaWZtbXRsc3RxUElKcmZtcnVvSk5mRndqS2dhOFRqd2liT1V3cjJIUk5uVlZ2S0dpb3Rldnhhc3JZU0QwSVM0NExzWThWK0JCckNYZDM2UkpwQzNGZkpEWjVPNE5Bd0k3U2NtQ0M0ejlJck0vZWN0RTBHdkRsK08vRW1OYU4yOWF1bVJZdXdZQVF3VlFPc1AzemNPMFFpVGFadFROUUJHdjRYQUNaREhMZFJibnZRb0RCdHpOVmhsdlBuSWZ3ek5UMGFXbmJ5Mi9uQ2d0ODZMeGMxR3VaUVZWa2pyWFFKdm4vV3lvTGdjd3hWeXRGNVovSWtjcnEwbXdzRUMvTGxINFpsTlBqVWpuaFMwL0xnNnZzRW4xbWg5azRENnRlN0lFVnY4eVJONWF4bSs3SlJLK1BGRDZrR1prWFdBcEhYN0tFb0t4cHlGOGY0czZxajhnT08raUhpcEExTU9aL2NYblk1VEJCYTYxL09rQXlXNTJYQXd4Tml3ODJub2twVWFGTDlEd241T2JBZW1SQzM5NWVmZlh6NVBjeGdySlVsL29rbE45ZlhIdEd6RFVMRVJta3NhZXNnWW9yazZCbkVpNHlCMW5GTXFGeDlBVnQ3dHhvbnVLNFN1NEVnYTJaZkEvOVZvY2JLL0JLTlJYRjAzdzlXaVpheFJtZ3pXbE5xSWhLNXh6QVcxWFdLdXpzUXVucDYvVitCUzZRQ3pJMjlGN3Y2SDdzWFJyVy9PK2dpcmlHUGdSK01OQldDZFNSVThuUFIzK1hFdjR3dENEVjBmVEdweHVIWjF0N2hKelNKSWdiblNQTzhXWmx6YzlsMXBpRnl2UlI1SFpMek5GOXdzWXRENDJucDF2SlNnakh3U3hTZy9VK1BxR21qSlh3cFM1Y2dGUE5PT253YTl2OUhxbU01V3RwUWphSnVVYkZ3dmVQSnB2WFRtQjIrMW81aWpPd0djLzhWSko5cjZyRVpoNHJzRkxpaGxNY04zOTZuTXphcEZib3padnUvektQK0VzMlVhcmNRVG1EbjNEM2FTS01HWGVXcTBkZU9OMUoxa1d0MWFXRis0R3VFbFduWHV4Y3NOOWI1QmhaWkV0ekVDakVWZ0ZMdm9Hc1hqUnNpTXNxNlBGZVJVY0Y4aWRTOHU5WWRaUnJMSnhLaWRUV21SUVk4NWgxZXNzdS9UYmVxTUQ3anpLL2tzTHNNS3JRRXRBeWthNVB4YlR3RllBb1o1RWRXZVdEN25tVUFveG92VFlweWRYYmZxUWJGM0ExdnRCYkkvelY1VU4vdHRtTjM4dlBIb3ZkdlEwYjl5NzJEWDRiS3VMMHN2TllPbXhraW1mcGdIeEJlRGV6bC84aFMvZEZkcVN1cUdNTGhEYVE5T29Ob3djdWVBVGd2Q0lBRjlRbkNTbWE0UVFEWkRiY2U5TGdMVE40ZW1USmlKOGtEQ3hxQjZrM3k5NHhvUGxmSlJ6SFNCWitVeFhkT3lkbUdZZGV6RytXZGkvUlBVdTJibEN2TUp6ZUs3WFJCcW9JbGVQTmcxeGFkTDJGSWlHSnp4anFJdmtKdGlFbVpwU2tPdWtPZkF2ZUM0WTZQQ0VacmFpSE1WL1RSZ1JsRGMycm5UenZtWEJabC9LZ0NBNFhYN2xBS3NVWVI4bVc4UzNScFB5V3RFSU1QRGZNWjlXU2dkZFA3RUFGME93YUdjZ2ZvSVJ1bEU0OHdKdlhSZkY0Y0dwUHhXcS9hQ25HdmxzeTAzMUpLQTdYb2IyMDNLMmFlVWlrbXFOZUo4QThOUjdhTEtnc2VkSENZQm5CUEFFR0IwQUN1TGtxKzdRUUNvNER0RkRlNVJBeVdoOUcyeW44eEZ5dzk1RXBDcDR6RmMvbStlYUE5QkU3OGVYbzB2UTlhZ0hSbjN0OE1iRmZCUVpXT1RNNWpJdmw2bUZIUHIydEQ3c0Q5OSttTjhoS2NKVGViTlF3eTYvYWRMcnRCREswV01aV2ZZdUp2SmFDOWRLNmRGdWVMV2pjTU1FTWYyV1o1OHZqRU5xRFNLc01wYWVnYWNSVGQ4dHNXc001T1hLUkZIR3NwWXdWTjlKaEpIOFV1bzkrODVGeEZDV01oVGdaTG9KaG8yU2ZZczhlQ3ovemNWRnBKNFNDdUlGZXh2NlBlT29MVjIrdHh6bjNYWDgyR3hzZmovODdMbU9iZmNZOVFKa0tXcisxS3dBZ3diTHMxTmVLNFk0eEVIb3BXS2wrT0VOUFB3czBpdWdwSmNSaHVjZ2pzV25WV2tYQUJhNWZxUHFtT0xMNi9sZVpVSHRNNmx6SGk1TnI2d01pU292S3pkS3l0cFNnWTVHdmFLeDR6UnpUMStqdnZ6SVBiZCtMVW84WUdDR0dHUGhqYXJFdkZONU9GK2taSHEvd2Q5MHl1Z3hOdmdMNFVDK29XdjhOQVRrZW9qem96czVMRHZFWWNuZlhlZ2JmVzNCRUt3NjJmUHhjcGVRZ1MrY3ZLMDdmQ3hDanh2a3VoRXB2SGVkZnFOZ3RpR1hnTFVhandhUmhvbkh2RDdMbDF0TVlqUUdPdGcwdzQ2blJHbVJhRE15bFNTRmdsQ2VZUytZTkV1ejNac0x2dlRNczVNdHNvaFJvNGlscE9GSkh2cTlkY2pYbXZ3c2RPek5ZUlJJVndJcUNVN1AwRnNyaVp0SzF2c1YySWRhSmpNNnRheDFkc0ZUenY1cG5HWk1WNnpLSTg1WVR3K1lYOGVMRWxFSnhRM0k5YVplTmxqdGc0dmpJcmFYOWdEa3RKTXVnY1dkZUl0RXQ3alNRMFl2YUswQVBGSGZvbVhhNWlJRUQvRFpUKzluMzR3RGhTS3J2eUhERFhiVmVLTkdVcEdUb1EyTk1qTmxnZ3BjcDExRWsxWXg2Qzk2MTdyODcvcEpadG5SZzBTTmZZeG9LZU1JWjQxa0pPakFxOXBvWEc5am5WdEJveGY5LzRYSkx0VVR2TEhQdnhHT3Zwc0dkdVZuMEFNQWdVMXg2aTlmWHN1em9CWjRleEozcFd3MktmWU4zcVpqYk80M1ljN1RnN1Nvalh1TWJrYjRabkJIdFZVNjU5YnZDdFVqZ0xPRkFZbWtHTExidnVBZzBJNWo1ZjdyRU1odnZ4cWpkRkhZeUtwdHk5djFyeXpIbklLRjVsUmJsTTRkNjA5RTNNUWJ5Q2tiK2ZiWkxvN3pxYU5lWVBGWW9PT3N1dGhvaEJETEFwRUI5ZmJhZGQxNWgrK0hER2c3aVE5RlFFMGlmRlYxZVNQNUV6TUpVTWlzdndnR3ZMOTVuZUdiTDdxWDd3Uk94VzVtM3djSzNwdE5OZGZHZmpUTHpUN21JQ3RYcHFBMjF5eTAwcm10Yjh3blgvUWhTYk1BeEEra3VqOTFveHNpdU5rV0l1OFJscHk0bDZCSjFYVGlSdndHdms4aUZpRHIxd1l4MDVTQTlES3MzeXB3OXprYi9jOURVUnFvcGN1dTZUMmNTYTVqbEcxQW9iNFQwMi9XQm5uYWRML0JVc2hOTWNBZHhxNGhiWktRRXNEaDV0a3hURldUWkZKYnpYazVkZi85U05lOWsvVkhPQWFEM2E1UmFqcjJ4bkpHUmtoZnBEZW1pRnZ5SDJmRHJPT3J6eUU3T3YzUTZobTRJS3VKcHdVckxuMVF3cWQ3Q0FSdk1ySnA5QldMZHZhSGYvVkN5OTZxUlNhUTkxL3dUQ1ZzNkR5bFpJUXN1NkI0U2RwbGMyTjVUc3NxRGtGa1hONVFkUWZiZTN6R1Z1MnR1Q0h1T1FXeHhhMVpxNTNnWWI5VDJ0ck8zdWFuZEhmUE5oYlN0VlVjUlRwQnNTcXpnTGRrdjJEZUVyTjhBQzRiK1VDSkJmQVB0Sk5GV2M1YXNQMVk3NVZjVXBqcTZoMVlFc0ZhSHZZZGFoQ2Vnd1VYS05VR1NUUmRPb2NhRVhwdDA0b2xJZnRYVG0rYjFsRHU3SENrOWU1clhqVHY0LzA1MWJ5V3NISkxoOE9NcWxoL0QyZzVxUWxLemJIc0wrRmJhUElsczVlLzJLb2pFY1lNb1pDKzA1eHN0cUtjd0hLYlRQOWN4NjJHZTN1VURaT3o2Q0tUYmM0RWJqVU10bkRCUnIvUXVIM3pyb3JWWUdVckN3WnhsMnlDdFE1enpTOEpROTNZUkZCT0FpOXZTaHJpVGJQODlRUS9jRUd2QmtGL1h3ZkNuNitDNnRnRzdWTzJIQmphaDZaVEJaTSs1L2RuUTk1QUZ2NEs2cHN5OVFwMFgwQkF1amkvNjV4bGdWWEZ4QVFxUlNaNjdONlBBVmdpdUJDU2RxamlwVnpRaTVVcmUyZnpEcklMQlYvNDhFOTYvaFNZOWp2UVQxdmxZY0ZvUkQxTUJSRmJJRm55M1M2S3Fic3kyVFZTb29jMEZtT1lOSkU5SzEzNmwxdUYzQnhoamFJOS9paUF0NFdEMWlFZHhDa1Z6cEdlYVp0UmNLNFhmcEdCYldhNkNKRHYxVWp1TmhUTy9TWTlSd25FTTVaK0JyZy8xeVRaOHpMN09Oc1dheGEvbUVpVC9VbkVlNmloQmpBVEZFYmY3Qzl3SjhnSjZSb3F2ektnTFA3MHIyd1FDdUE3cGo4NnhpNTYxTitNekJxN0ZmeDdpUWhHcmJnTXdrbzVROTdCOGl4eVJkbnBiYmY4NW5JWkZTM3dQRzFBU1pPYlhFcmJwWC9uRVNmNjZwZGRhdFhmU0RqMjRCSm8xRmNSazcySjlEK0lnK0dsemNkcEozSytmVkxLUnZLaUgyZnA5ZG5ZU3laQUN3U3RtUzhXNXJJWnptWlJUb29nZkYydUtjbzgyS1pZTjZFUVB0QkY3OXZGR01NT3FOSEhUSjNqSVBEeUpLM2VqVDRXcnF3Y1FoZjVxTEFlanh5cFJNdU96emcrUi8zVWpaTUxsWU5idUZwQW9DWFVvdUJOVlA0bm1RVlpTUkJzN0JyTXNLTXp0cWFaYUVNM1dVSTE5MjRqMG1NN0tzaWNaaVBMVzBmazF4cTFlU0sxbHF3RHpGN3RtT2V1K2VrTVFwTFhiWXlpc29JdHpLSXBybG0zTy94N0JTL01xQXRDZnV4cWJpVlQ5aXdUTFcxUlE4SGFiWFgrTkoraWp5T21pb1Rqb09JbExZZ2U2MFhPM21KNVRibTFTdGRRdFN3Qk1rclpJOHFGeERZRXRGSlAzR05SeDZlK0haOFI4d3QzYm0xYUlIR0xOanFzamtKemZyOW9ObktkWnZxdkRaTWRaZEQwR1dSM2NOeE1oM0pBNzdnQWQ1Vmw5NmhlbXFiTHBiSHNlM1RRenZuOVZRUHdsYldDZGxKdTJacFZxSFl3QTY2TjlEZE1KelBGbE1TdTFQVmxTRVpTT0VST0hRcmgrZWo2U2pCeGpDbW1oL2lEbjdjSFMwekNJK0NDUlhnWURIMkEreHJvNXFWQVZyMW1iRWM1S2d0ci9VcHBXSDVsM0R4cm5NbEhsc2l6SUtZcmg3eWZsL3BZWGU0dCtGQUpLMHNSNzNHUEdseHRNaDRpTUFnTHBFcFVmeDNtZFNVQjRqNjJlTDVUV0E3VUhkOStUck5tQWxNTGI4ZE4wSjN6ZmU4NDY2S0psc05veFBsdDg3MlBRU1hQM1phQUtDcHNpZzRYRXNJdHRkMStrNEY1RW44ZTZBUnVVVU1DUmFFY3pNOThVNmRGeWVvQmZFWnBOY0VTOEJrQ0l6b3FNRDdwL1lpcGFkdXJGaEcxNEh4eG1VbE1rOFJrUlB1TkVwWitMMjZTK1hRd2ZBNEoyVTBweXN3M3htOG5IZDJ4L25JZUNMNTFwakplVDltNUFnMTlESytpOTZXTy9LbXNxMnh1WWV0K01RSmRuN1ZRUm11Qjl4T0Uvcll3Rkp1V3RUUkVnYmJjdnlXVXBXNlo1UlNxZC9PR1o3V1IrbUkyVTV4SlZlSDJKYk84RU9iTnB0UkYyNHRqWVV3eVBpck41OHVQZWZZa2ZUN2ZJWStIZko0anRGNE9Ec2hmTEwxelM2elBSUHdoZzZrNFNLQy9VbmdINXVjWXpjTE8waDNpUlFJNzJjRGRsd0dNckZ3QjhUTk55akpERkVtbmw5WFJkbnVXT2kwYTc1b2dRSUlGN1hleDN0U0tUZWNtR2owVERNaGpXQkJIOUdPazh6UzZ6K3JCUlFRMVh1NlJ6SW5heWdmckI5TlEzd01FdUNsVWFpTi9ralFraVJEeGducEN6a1hpdHVFL2lXVVR5QmJEdUhTdm5JSElybG8wT2NFVVB4UWtON05HMWY3dGFZMEJ0bnpTNy9DaXIzd0ZQUkNPR0NiMzg2bWlqcGsxcG4wRzk5b0N0eFAxUGpsa2RTNnh4NDhJWVRQSm84OXppV2k0VTQxU3lUQlNDTTc3L2RRd0NwdDAwaEVQOFQ1Nmw3aURjK3QzRWRSMndUUFpUdmRCWEpJeXJwbDVCNW0xcm5qRktEeTFQaTdIcEczTndueGRhcWhISlpyK0NweTJlM0tERVJ1ci9lQ0dQdkFYSHZ5QW83Tyt5OHlsYTRZeklleWNaUG9HWG9TeGdQNkZ3dWtGN1NacmUxYlM1VjdnOEt1aWNwRTNzSWZhZ2JZSi9CcmxQMStkNEJJdlZ6N2QxdmErOWRhU1BFY2VvTWpUT01Da09Xd0NISURYUlpXL1dkOEV3cGR6cTk1cG5KaGR6MFpoWnlGcmlaU0VzVUxKUFduV3hQM2NlaGk2RDFnQ1R6RkpvdlBpRHBsbVZ6L2Rna2lEVmlXV1k0WHovRnFLdGNnQ3BtTnp5bStweHRzTWcrSUNvTm9UMjFjWVR2YXROZ2VmZkMvMGhPY1l1SWFyMzRZYUZ5V2lJTG1PSGFIVDNwcHpjTVhHcEp6Y1JNQzkySmZHcHJoSmgxbGM4dXRUNjkrYmtYRDFtc0Z3VDdtRmQvUSsyZ2ZpZldTbGNXTkxlbyt3eVN1cFV4dDZpNHIyTlNEWVdHWDNxVnQ3eStJRXRQWExiblZjTXBhdUZGMW9YTXZ2Qmg1S1NHUUdab3Z0QmRzUGNab3VnZm5VOFBWdi9QSUcwUnRscXZ2TXZQYm9PcXBEZlJZUGZLTjh1S3VOek5UUERkZmdwbVhsaW1NTEpkcUtERDVrOWF1Z2VxUGlld2QxTG40dlE1VmIvWXNsQ2VvSmp5M2VCT2tNSDRHcEhVc2dmTElZTjIycUM1VVlRNjhtanIyK1RBam5FamFUbzhYaTBYMnJnTHlEUFhKNkYrUHhxWDRnUDVUaDYrS1NSa1RqdDNpaUVXUm81YVBocm1EcWJHUis5Z1M4Z3RubHVVeUZZczBZeTUrYmUvbCtoQTZOWm5sY3djWWFDeWxXY21LMTBmQ3lzNEVlN2Z6M3lIelVQYzNzUm1MNVc4MzRTdnI2dUU4aDZZWkljZE5DQTdiY3N3YndFcmpib09abzRoZXByQjkvZ3p1bXZrMTJacVd5VGE4Y05IZVlodVdXNUdSNVFqM25DbFAxMEJNeTFOV214RUhOOC9JTUVOMkhBeHVHOThiOHFmbTNabnBsL0JuZUlaeDdYYUxPTndwMmF3TTNtUUNPdXlQZVArZEdmUWZvcGZmazkvTlZHQ0F2NXBJU3pXZ0hpYVRyNEduVXVTTmR6Y1d5SCtOUE5DYlI0dkcwRDVHNDZxSzhPWEc1dGZiUFVmcElHS0sxRksxK3ZiOXlHWkRmRUl6azNLVlpOWVJPaWEvb0JMT05RREsyNC8wVGZlMHU0dy9sMGw1V2lpTlVyUGxpL2U3SmYwQXhKUjJNQk1YckZNcDg1bnEzRUFnRlo1MzlCWEdVTGtMYTFRc3RjRDc4YnBsQ1NkQm1SeXJEL1N4UVZKTUpxMGJvRjVSbUVCck1GN0RHUmNiTzhacDlMbDNSQmlIeTg4S0VnVDkvdDAyM1c5TzBMNk5NMXBNeFd3VVN3MnN2ZGdjbVUrQW10R1B4S3ZkVnRjeDFHMlIwS2JVaHprbGNIZnZTSXZia1ltcTlYZFFWMVdOT2ZDRVU1Vmx1N0gvTjFxREo4SXRhL3NOSlgvcFNUenhvSWtMMHdIV3VmYUIxZFRUbnNCalFva0JjVlUyT3MwU3NnbW9GVnlJZUlxckpYVWxYL0d0UWIxdHBNVVE5ajVobmJVS0Q4bThCQ2M4akREcS9VM1hpSTk5VFkxMWxFYXErUjJwMit0OFVDRTZTZktkWUZhbjhvd3RndlJzOWtjRkdIbXJXVi9Xd3RxaEQxY3lxTW1DS2hTNmZtT3VCbkNFeS9ZRkI5RUVFcDZuZmpuM3Z3OXNPVTREUEJsRUNSWlNWZkFqV0lUK04wQmNpZ29renNKc21DdVB0MExZUFVwWWRmV3dJcENoU2ZvbFZEYm0yTDVRa1cyMmYxRFYwMklvT3R6cHViTFpHLzBPT0xENmxJT2pwWG1qLzZpV0xTeDFQeWdCNUNFS285aSsvU0lia2F6VGhOeDZaNWQ1b2d2UTFjUlZPZFlIMmI4RXRJM2R2WXpXSEdyM0Zpb3FjdE4rUTVUWkZicDh2TnN4eko1UURUeDVzUXFOMVlOOW9XUjlYV3VXUTRXMk9XaFI0UEtjblVuZkM2NXZtY3h5SmdMRXRXYjZrUXhOK0xYZTZ2SXBxdUVLVVpJR1ZRdVRuSk8ycWxNaXFoZXliN2RZNDduTlBUVzFRUTBTTGVwRnZGN0g4ZlBsSzhYQ21DVFdlQk01ZUREbi9MMXZwVVNhbWRFLzhVRVVhV2lzdHZYZExxSXR3Y3QrS09YY2NyWkZUL0hYZExNWnJBN1gyMmRmOXk3czB3QlpORnBOcEVabEh0VUxnUUV1b05reTh4YkNLT0Y5Z0lSdTRVbGw5RlVmRDduc3lTT2RxYUpQT1U2VGN6SVpTT0NlOHpWSjVwbldGbWk5MVp1b2k3VmRzZXFoOXVaNjZ6b0xuNmdCVUgrYTRXS0dHaVZYZ25CUVRwUHhiWjB1WElxTWtGS2lkTERqcktZMm1HL0NXV1hrT21BUDQ5dWcrYnd4OUtBdjhsTi83NzRUUmlYMWZDUFpzcXZPUVhuaDNxMVFnWmhIbVNBN3AzanpNU2d6ZnhkZDFKTURFRlJyZVh0V1AxeEYvUCtObXl5Tm1oc1hsSE5TMVBWV3RuZzhLam1TazNiWG5yZGthR0tqa3FUMUVSL2FBb05IWjlQb2RxSE5yem5jdkVOK2s0MGtOWnY4WTVjRmo0Q3ArK2NVYzdLQTRYbTZGWmp2RlBTemJDVlNlcDU2M3pwOG9iQ3Y2cklscnp2eEZVNWFXbVZKaER6RnBXUlM1aURoSUhVa1oxL3dRM2JrSnVDR2kzZkF3UHh6UnBXS3dQd2ZneW93VTJyaGFXRE9sSmF2SHZkT0pibUw3L05UbXo2blpzN0tOalNJR1dEQUI5TXUwTExpblYxYmJWRlhBQnJxQmtreU10TVZ3SDRKZHhDdU9lT2ZFL2pZc1RPRzRaRktZNFl4SmdnNjlaeTMzNzNxTm1kQzRORm9PQlJ2OXRMREtKUlZaMFVQNElGb3FaeUxrZ2FaOElUNWk2dzVuSXdVMXJGdmNTaEhlWktLTk9Cc3JIbW1ad0lTUktXV1FzWXFMVytmdkRZVEFEQ0I3N0gvb001a0h0ZVlUTzE4cnY1c21pSkZPZnAyUWhubG9LOXV5RVpuem9TZ0JZZjRNRXRUK1h6VmkwWU9uZ2ovYSt0VzdDU1c4TUhBVCtrTmRxRVJOK1JiWFNENkk2SzI4K1l2TWRmZUJFVFFuMmJwaEZrL0NrMDZUd1QrQ0l2ZjhRa2poTEZaZkZESG1GOTE5U2d2VHdONnhzdDlEUDBMTk9WZFE1VzJLcUxNb296MUNjU0c5d2xVdUoxcWJUTkhZRmtHTGVYQkRQZUIzanNhS2NDMW12Z1RqamcyTTNZNUlObkwrUzMvZE1QSXVmeGhScUVMRTZpVENYZ2xKTVpUdnpaYy96cVpwenZnU3JGUWcvR1Bka1V4c3dpeGk1OTc3bjRyK3dZWlBPeGVDSEI5VENnalk4SkxUbXBXaEx4ZHRmcFdCYTVLOWRTejZjOTJNVVRod0QvQTNpVjd4VW5xTDBlaWF3eEExVzdIZVJGWngzUzZ0V3MyZnFoUEgrdmFEanJzZ285c2Z5WGhLZnpsdmlBb1BoK1lqWFpTbTJKZU0rTUFJVS9VdGcwSitMZHhoZnhTZ2tvSjNKUEI5d2RlN3k3K2hKY2xnN2hKNjVLOVVhdzRPcEVET3lWWkF5OUdXVm1ITi9qVVh1K2ZRU3hhdVpVOGQrN2Zxd0RhTlFHNzZiZzNhVEdVTGI1Nnd6QTIzUllvYjZoNlRGYU5aK0JtVEFtK1RjWk9BMVNVNEgzU1dvMkcwbk10SGtGaXZWYStxdThVUU9FV1o4RDdHQ0t5emNZTG9ueUpTYk5BbWRrK0REN0RXTURYNzA4WE8zQlhsM2Y4R084aVhxd29Mci9Da01MMml1MFpVZUhzQ2hOSWZJUndYRlluRlRGSzU0Z3NZWC9kR2lIbzRsTHVNeGVDdTNZTkdvOFdpYUhOV3l2aFZjaVdvanVxYVowNmg2M1Foam13c3lkZmhFRGxkdWtKOFZnYXA3VmVVdjJBSVI3NjlseVFVQ2hkMnZ3WElreTYvTDArTU5GQWdydml2QlV6TWYyUE9pU01mdHV4TG93dndPLzFBcFo0bGx6c0s5dzRqMmRDWUZWRmkxVzFKMHBUYUJHNDdLK0lGTUZ5TTkremd1dVhHK0JBempVRFBsV29NejlDYTF0blY5RjFRVjVhd1B5ZEluSEdZNDdSbEFzSDlZT1haeEl5Mk5qdUFmZnI4Y2RHWFlkNGFJVFJqSXpSMEFxRjB3TUVxYmNSMDg5bXExSGVMYVhyT3ROREJkYlFFZ3FXTnpoV3JSNkxzRW1UTXlJN3orbkMyTFFFV3l0NzhTbVRsZ1A2VjFEOGYzbUJxcHJOYis0d004S01RV2U1aDV2NnJxS2JFai8wN21nZkhWNnI4NnpoOUYrRmE0aXZ2QllvdFY0STVsZktNTzgwQlJUN2dCb3FRbEU0T3RYOG54dXNyQlUxcGFDZms3SEowc2xlZ2V1UmtoNW0xckduL2FvSmlVelNKU3lzcjY3MFNJUWY0VWdKdEl6L0JOK0pkVWdYODExcTVtTUdRUlM3Wk45M1V4c0dEMUZ4bXJDSFNNYW11bUh6WGROVmViNzh2RU5UazhQN3dSZjV5Q0ZZclNRQ0NVQWZnNGJGMWFIWGJLeWFPdHZ2VDFLdmNBYUtHM0pzVjM4dEFMelYyRlRWOTRFS0c5YmcwU1Z1bGFvcHhFWmxKamN2VjdqK0U0YUxFSUtacVJRMG1CNGs0SVU2b2NhbDd1VVJnMi9oWDRpY2J5U3lVNjU1RUtjdmFubHN5Q3hCSVc0NWczZ2FFaUsxL21wSjdnb0gycC9nUFpMQUlVSVlQMGk0Ym5Rb2h6bUQ5a2VKK04zSExqblU5WDMzQ2d4ZnRhVmtRVjFXNVZHTEtOSVQvUk5rUXlwb0FOUFJvN1NnWjBDdkJraDA5S295MzNxVm1yV0UrWEFHSGtrYzZVNzdnL085bEhKZjJpZ2pjYjVjb3pyYVgvUlMwTlNwaHhWWFh0M0dJdmpvNjhaQmZlYWVuNjFHMDA4Yk9xY1cvZFJKZ0c5S01hMzcwS2JhenA3SDYwTHloMGorVWllVitHbklwQkVPcEJqVVhucDNsK1kvOWN5U3JLYVpOckdtTVR4dVZCSDh5T1ZSZCtXSnFJTWNFWjVXckEvYVB0SFFQaVppanFqWFNMQXF4Y3JDZTFDcFZoZVZGZWdKeGVBK29Yek1iN0IxdHJwS2RDVHpZNTZxNVlIeGRpcWQyVHZqbWZEYzV1dkhtK2gyK1JqeC9lNzhuVEV4YmY4RHhwRGFhMElwQWJmRnlnTjZhSDVvaDZxQ2R4MWpMRWsybEF0WnF4d3dyRk9lUG1La2ZTWGNUdnJyMjhKKys3bkRFd1drVUljTkUzYVVaRHNWbW1Cb1JlYis0WEprcVdFR1NmMThJSDJob1BVazJ5WnA1RUUrUXltV2drTEpBaXJZRlgyTmwrcjd4NEVXMytOTmpybFI5RVlqbEk0d0RTMlA1OXBuZDA4eFdlczBoZlc0NndMN28wdXMxQzlrZ3VqMFM4SklWenoydVlIRnV1cnFaRnd2ZG40dndJanVXUG9YNGMyWHZlRG5qWFp6VkxSZmpGb0xSZjRSYlJEcXRON01yOE1hSUxBOCt0QVZ4UHl2SXVpMnZ4eVJ4UWZXSUprQmhMZWdiWUxtS1IwcUV4dDdVcUVJcldxN0c2Kzk3L0FoYWpHeEdlejlGSkVtSkdJeG5UQTZkcmZkMkg3RHZ1cmg5bWdGdHRXYWN1VW5MWHhGVkhOdVpaMHRoaHV0NDcyRU9hSzFFUm5RYjV3ZUdvNjA1MksrQVJzbkRYOVNUVzRyOWtuY0dlbUxIQ01DNjlPYStsY1JLTm0vMUJhWXFaWFVzaDJTM011dzFMeXlYdU1PVGpnd3hmMHQ5UVM2TEFlRXJJaEpEN2pidXIyeU94Q1NYME9NOHpxOEgvVThEWS9LekhMd3ZxREZMYlBicUNoLzlJd0hJRnlOVk0rRDNnc0p0M1JNbnZleHkrWGp6Y2YyNDc2Mlp1MnJqZnczaE0rRys0ZEdWNVhwbmlpM25iWkZkUTJvUXBIQXpoN0lBOGM2VmF5MXZWY09IOTh1MzV4TlNDRGRoT3JFNFNwS05iOXAwK2NDY0FTaDMxNGtPeFNDQ2FrdHB1SlhETk5Sems1VGZtK1pUeU9yN2lpc2h4c0Q3eVdaRFl5ZTQwRjdsNWV1SU5kY0NhOTRFWnBkVU1jbDBrNlozay9VKzlQOTh4S2VRTVRPeVVVUHZKZjRpcy9WMVE0NDhkZ0tWbTJuM0NJVlF2L2ZYbzBUcUVtTmk4akRtRTdxZ0ZoMzdPaUtLMFpBTFBZaXZNVnJucThLNlVtZGdhb3MrSVJHS1ByMk9Gby84clkvOS8xTVRxdXAzTkF0V2Z2Z1k5S2RZSXlrbXVLTXVUL3RqVFZsVnZERWM2bC9vN2Z1a0VMNVFsOUFmRlBsb2YwWk5oRXBTcUZEZGs1akszRGZnUGpnQXlMVFNvR0lNMm5uajVpb0M2RXV3OXNvSU9iNkVrcTd1ZW51a2dpclFiZ3hZcU1XKzB4L2Rnc1cxamNLQUJvaTRzV2VlbUhOc0ZMcFdvZENTKzJqbE5jbWJTV3pXUzJsK1JhU2RJdS90VmhOenV2R3JzS0RROVRUTzRTSXkveXRjYzhYb25UUk9ZMnNHdzV1Wmp2eitZN0lKL1NoRk9ZVTBYd1MxR2NSMlQrQm9zc3MwN2NUd1ZDUjJLOTNkbVVnTlIybm13NkFNaG1Kc2Q3ZDFaelZmeEsxUEZwamVSTW9sTjdLSC9HaEtHajVpVW54aEREenVuSjlZblovYW9QK2ZBNDR4WWRPYTlzeVZSMGRGQ1IrZ2pFcXBRbDg5c3U4WFJtcS9DYnZaMk5HbzROYUp0U015dnFQY1lQdVNjc0RIZU9nOTZZRGFOMUpqSGtkK0prR1dUamR0WWE2azlYMjdLV1BZWDNnSEJaVFkzWWU5RWFNRWlna1lLZTZ6K2lMSlpOdXNWWlA5VVNBVWpac3JJNDhDUkhjUCs1UUcxZVNzSmowYWtFMnpZMFRkRHJ6MGFxSnZDeGRuTExQUWNUdkJVaU02eXdzMW9GRld0OU9ucjQ5ZDRBZFJpdlJGYnAwVGhIdURzTUlVV0pkQkczTEZpTjFXWE1kQVp0dmluRjNraC8zd1F4TWk3TEtDblVhNjNaM2cxWVRRWTluY0JLRFIyTGxodVNBQWxORHF5d2tQRmZ4OEtTM1Rmem1Tc1VkR0h3T1B6dktRWXp1Qlk4SEdBd2NWNEdLaEVqNWFYS0tTZ0pjZ21WRU1KM1pUbmthbkNXN3VpR2lpd0wrZklEZkpKZEZBYWM5TTJ1Qlk3WnJjbjJkK2k1ZHN3YkZlRFhFN0hOMHQ3TUxLNXNBOG5UNzZHUkZIbnpaY2MxWDlnVGNWdExyUEtlRC82Vk8xbVdhNGhjQ3o1OEMyV2lNQ09zU3pSSlN6S2FJaVVCdmlubG00dXZ4ejNwUmpnUElkNC8yVzQrZ2NuNWtJRC9mYnVETFQ0WG9XTDFXck55bTZjcS94ZjZ0TG41d3poR2xzTGp2UHpieDh5WmJlOW0vM2o2UHB0cDNLbGhoZVNVaEVhNzdRejlCT00ydGovZzJaNktqVSsrWm44WW9WcXNwVnVxcmgvbEx0NmdoSkpZMHI4dkZwbTVzb09uL29vS0pLU1pWcS81ZE9nNGhQSkttSnpiTThNOHhRbENGWVBSTldYdENiVVR5TzBHVmxONkFLQk9FaFVuS1ByempVMU9PbUtxVFpaNXgzTnNoRFI2YkhFNFpSck9ITkkzWDhYOGtOWndVSFR0bnkzMU92dkp5U2pCZ0Q2SXVBdThiejdEcWUyTG5ub1lBMC96dG0za29Wd0ZFZEZ6V0VOMEtSSE1yTkt4SWMweXNRNGgxRDVreTNPSFlCbE5rYWltMHFjbTh4UTdOZE8vdThEK2FSK01aenFyQVhnTUZ1WHJzZTBPSkNnZFJFSTIwY3gwbzZPUXA1WDJsM2pZZG5ybnlYbFQyWkJMR2lCVnB2b0pQMzFkNEhsMXN1NDB3L3R6a0tyZ1RsYXRPcXdXaVA2Wm0wRzgvQnRKWG44WFMvSUs2TUdtQnBhSzdRREpqNG41emlyMFU5aW1lTXNvNi9ZVjk4MldGaHY2a3JGQmpiMzFjR1pSZWRQVUJ0TVZqREdwQ3NveGFEcjZXeGtKcWJCY1BpL0dWTnhPVEhRV3BiNm5VWHR5UzA2emhtZmFDQXc2NUIrNjVlL2lkd0ltWkZJWkYzV0tQRjdzQ240dXoyL0NWVzNHZnVjZWtCVHFWVEJoUmVDSldaMG5SNzNJTkJCZjRsRmFFVEpVYkZFTkVtOS8zUFJESTNLc3E5dks0bk0rMm1HcHUxUk5nWTEzamFhQzJvU2J2SEhJSnN4ekFxcUdBR0dGT21IVUEwTjNaVWJjcCttTUJrZTZqRFZ4NzhDb3dPMngzR2kwWUM2YzdZVVhPYzBwNEhreG1WanBOSmhqUVcvVkpwZElPMjdVYVJkeTZKZG5hRklTT1QyRll4NVYzc3FGaU5YRENQUXRvNGhSV1UrQmVIenVHZVVYd29qZVRCa0lycTMwVHVjcXl4bE15TXhwZlBuYnhNL2IyUnVTK2dxdHMyOXJHWjdCV0FUNGV4bzJza3FKVGlZTEpVckdnVmtoU2JMaXRIK25HVmVwMU1kRlFlNzg2a296andFSTlENTZhUFUyZHJtcnB1d2tWRHhFbm9OL2JZWXA2ejRUeTlJT2VpNEFHSDg0YmIzNXJ3TEtmaWRQQ0kvUTM3aWxabXQwRHI0QkdzTlJiTmRDWDdSU1hEYTdkU0o5UFB0NmZyNFJWaGh5SzJQTU9wbEZtanVzd2lUMWJmMm5ieGFQUU5FTkk2dmVXMW5nNGZKZ3QwcElSc05PUGNQZ0dkQTBML2x4TTRqQldYWTBkc0p2WUdYd0thdDNmOGhraHIzM3NWM0M4dEVxUnVnY0ZrZ1NiR1ZrRlJhWjhIb3p0VUpNNWFqVzk4cHIwU21Eb1ZMTWs0MXhYOUhvbWQ2UGZaTnZhRzBpTE9JYVlrdVJpS2ZSbnFxaUpITllyd2ttUk9IZENnTll3STBXcURQRVl3Tmo5YndRTXhQREpUM21ZQ3o0Nm5FbmNOQ2d1T1JlSWMvWkJLekNKT1h5Y0t6c1c1S3VHbnZnZ2NzcG9jREdLRHRKQTZVYVhHaFZxUnN4Z3NadnRZRlA2bUtiVStTcExaQnN1eWtEVEVYNVNqclBOeGdKN0JUNUVkTUNyWFBqYllEa1ZteE95cWtNSEl5TkJGY1BSYXVjZGV4VDR2QWp0bHpscGlZdmJacmQxMHhlRkVoU0UrQlJOeXN4WFB5Z2wvMkViUjdSaEtxT0N0UWxxQVd3dEJGeml6d2xRdmM3bkgzVjZKdld4NnpDaDB0M0lBeW14R3lXdVovZ3lFeVRxWjVmVE9KRjZVZWtjYnI3SWJseVVYSkhEbFJmT3F1c3haWVgvSzViM0FLRmFBUGRaQ0dJSFBSZGd4TURYMGEzUmt3Z1B1VHFzZFlKOWd4U1E5aVJqSlE4UkFwVnJRSGRFUW9KUWtCYitJUlZ0MVhXRDV6bjlwOG5xc1dVd0RLZ1JIVXJyS2g3MHBVU1M2S0FDNnF5VHRIVEV0aVZwY2dmNU40ZFZnWXZzbDlhWkVVUURjcmNSV0V0bGgzaFI3YXhTM1prd1p5eUl1MWpQNHc4YktzdHdJM3ZuNkI5N0dTOUxHa1M2UWJXdkNRZkhYVFpxZWRhY0VTN1p1S05Va1BxekFRYnA0dzlzSzBTS21vYnQ4S1hFSGJHVVJ5Z3VzajF2eXYyZDFWTk1aWlNhemEyWUhyNi9wdSthclYwSG5pU3FObVRJb1hFd1RSajErclBCUjRVYUZDcVVWUFVHNmdESERsVVY4YWRmbVVVSGdoVE8vOXlnUTE2R3BKZ05ZSWd6UDI1WGJ5UFpLc09KQ2VvRGEwbU1tcjVIVW1kZERnMVJONENzb0hsQTJUby94emRmSXF6eE5obXg5Q1NQNk0veGdiMHJWUTRjSHJZbmFiSFdiWVpNcEF0NDhmN2JubUNnTDBXQmhjOElCRFlHZ3ZUVVM2d1FMYmhSOUY1cStsU3ZZZkQyY2ViMjZZS09HbUtTWTgxOTNNa1AzYTFuT2NqcityZTNBQ1MxekMydzYxNXNUT0Z5ZWhQMDQ0alVBMEt6Y1EwTmZkVTNraFhELzVHQkdyU1NsRmRpcjNteVFBbU1SSnY0V0dUWG1vMWpSbVdTWk9hNUNyRzl5Ynk1Mnptc2czOGJNczhCREx6cE8vOVhIWlh6akpQbFNTYTdlYk95TVZqMDhpK1FzTU5TZ1p3SmtnSGdJQ0VTTmJpRjlTeUdWZ2FCbEIvYlhseXZUSStJVjgxcUVUdDdCQWdPcHA3TFRXRkN3UkVZdlJDS2V5N0NGalMwMjRiRmU4WHp0QnBVMVNXSWVXN3FOa2dDNEZCdHB3ZG1iaE5kVVlMZlpVRy9TWUI5LzBnYTZjTkdTMGJoV3IwWDhOWDdqZTJwK0ZhYmhScVpVQkZnVnY1anI1Sk1WQ202bjhnajY2anVUcXBHcUtGdnFudnhpQ0JOdG1vbVMveUJDOGFUMTJFWW83bjF3cmdvalNnYXlKY1M4eS90MU52dm5BYUtOTXdaZFk1ZUJuc29JRU4xN21JTVJsZXo3YWIzTHdtV3RObmJrbmVPc0E0V3AyMmpHdUF6eFB5dzdSVmd0b0NBQTlDekdNaGNISFRDUXBEa3NjaEthVHRjeWcyUTJoT2VvYmEvODRNTFNnRldIYldHc0MvT202RFRQWTNBRHpiOElJM0xZN3FVYk9Hc0kwaktML2lIckswVzVoN1FzMCtuYnNFbmVXUWorSHVPTEZqSHF1YjJxSG1hMHJoNGU2SWwwZCtCNGNvV1dTNkIzbEpzOFArVVBRWFNrRHVXS3labGw5eEFlODhTY3lwS0FwaVUyRFpWT2VhLzhUd2l1NFNYZmxDOXJVL20wN21mUy95MTN2dzBxQzVUTVpKMzFmTDhWQnBkWUczU0JXR0VBUUNUVGhORkRnTEhSaFNsbzFVWnNSU0VjSG1IU2U3MmZkei8xaGs0UTNISGwwcWppK3FGWGFBLzdTR2w5OHhpbnhQcG5RT2JldUViU3VycjlRczdISU9lL0hiWWhrMGMraE9Cc3cxVk1RMTRzclJnRzVETTRRbWtJS1g2enRhbnlYbEp4aUs2SnJwdWI0d0JwUEZBdDFxWE1UanF5aE5wZjVVK05ocy83K0FUeGhvbTNrWjlxa2JRZzUzMnZ4MmRUUW9sMlZMbTcyL3ZuSC9vRTZLdlZWcWttcjRSYVZkVCtndERsVXdILzNoRkI4dGxzem02RG1Oa1ZsNE1aa3lJZXhZandxbk5wMVQ3WTJpdGUralBXWkJuN1lmaFowT3F4K3pONndENkl5ZVF1b1Nvb3ZreXBIOXNDRlR6REZjSytMWHFGL1MzMGV4NlkrY1pEMXRSWEZNSWplajVDTmR4dEdhL1d2OHRYVU55bWhxemltWmpTQ0N4Uy9NZDExYUJZdDRVblhDSEFSb1NqTFREUXJTTnQvcWpwbkpqVGZkQklsMk1FNzZBT0VQL29zQ0dTMG5RVGRhWTNKTXp0OUo2M3VYbnVMOVRkdHVtNTdvUDhESzRKcW8yQkxxOHIrOWVLeUJVR0dvaHg4NzJicXJ1c2VnSThONjIyTWdSbStyYWlEQ3ZpbTRzait0MG05eW1aaVZwMnI3Tk5xZGdiYmU4ZU1pS29UQVcrajhJbVF0bnV5a0hucThTZDVrV2wvWHExVjRnOXhSR1N5SEJGa1dYU3oxblNsRVJsSGhIbXZTV1hiemhxZm93SVhHU2ljMEI1cUt0aHdKZ3BwUEhuYlZvQVhoNDcyY0FmTXEraXZKMGk4TythNFZZUW1sbSs4dFloUGsxc1pDU3BuayswRDN3aDA4QkZHRFEyUHY5eUZQb0w5bDdKU3VSZjgrTkFGT2lrNmZxMmRTZTFHcGJKWU51YkdTTTJjcVo5T2V5WUUzSDF5VFBrdkRzRzRjNWtqMms4cHM5UmtCRHptUjliMnN4UFpmbzVYVlZ0ZWNtQjdvME9UdzByUDdNNElxN1pXQnZ4YnlEOWJueHY1Z2tFQys2emJWeVlQMGFVUlRyL1lQWmE1KzdEQSt1YUVleWtrQU85dzJMVjFCQ3BhMWcyVEQ1TENkOEl2VmQrOXA0c3VkanVwdE1EZGZvYVBsdTB2Z0xNUkpkYmd3K0ZYNTAwczFKMWFTU0FQQ01QYTJtL3RwUW5xeHNvbk9wSnQyM3I3cXdFcEt2eFJaL3BBa1NMbGZKZUExdFhiSi93a0hFU3R4MWE1NUFpL0NNbHBGZkQrR2NvQWFxSkx2WVU4bStwVThyQ1ZPcjUzNzVlUVN1ZFc0S3NZOEVYdlRWaUdoOE9QL3Q1YThRRmZLelZZaUYwcVUyaDNCTGZTUEd2Wk9HcUpLNzRSSlI1MmRRRXoxdCswNnp0OU9EcVpVNnZKWWFjMW1sdzE5Tms0dDFpZlBnc1B0Ylg2M3FUbzNYMzJublh3cEY2WFFqRHppMUJUOExGSWRvd0ZGVDBsTGdyOGxBZjNzZWtmTi9UQ1dteWJUWHBVcm5CY09SOEhWOENlVDZYdSs5ME9GMDVLYkRDdXAvQVBKL3BMaGl0aEFDeldjckVlL3RENmQxbWtsclI2b2NkK1dBaG9UNm9FV3BkcFJHOVYybGtMSVhPMXdTOVhJWDVPTHVmclY5bFRwWXA4NG15cjc4OFBFeHdCWjZBalNvVTJXaDFTczltUm1ob0N3b0RSYS9hRXFRVDhTTDVaRysxUFk4OU9BR1U3bWxiaGtuejJ1dG5sZ1MwWFM0ek5BRS9kdEtXOHJuRHRWaHRSOGNFSkdnbUJUNTFwcGx4blhnbS8rdzJiTW4vaEsrOWhWS0N0d0Q4SmwxcFdQV3pnSDl6MkQ3ME5iQ2ZEaTVvK0dxaUpzd3VjazdXQXFrY1Vub1FTbmZPNm1WSnIxeFdZOFpzNnE4MFFDSzJoT0JqN2VUeWtnVGcyd1VyOWhaSHE2QW9KZ3NSNFNDYk94ZFlMVi9DcjdKRWtpRGd1ZUIxdjQ5UGJQcU1yUWpKaytzK24wMjA4Ti9LbTFUN1pDbzBTK09kUlY3bDNSb2ZYM3puandyQmFtSkIxUnM1RGxvblp1WDk5aEMxcVNpdnFHV1h3c1oyOEhmTmhVOVdpRk1RajhieExRd1ptRk91UkRmQk5yWnpyUzdZWkttREVoOVVXUjNiWFBmUm5zYnptZlNrQldYWElGMkwwRmZjN1RvdkVQYXJVbEFYZlViaE4vamFZYldzOXNjV3B4MUtPb1Mvd3NBUFRDeHlIbEU0OXQ2YmVhcXBJbHB6Rkdqa1pETFo5SnZtSlJWUnBQbmxHS1VWMm8zZzNDNXJYdFFzRG9iYTVSSit2QTlMZW8rUy9sUG9YTHJBdDBLM0dBRmwxZHJxay91NmdBVUQ2WGRZMVFzeFZUSjJSNjRGRXF1bXJEQVA2Q1kxS3NCd09IRnUxMkZOKzdSMEY5d3gzK202aVNCODdVd1Rwekk1OE5JbzhrRHRkRFRHdWNwTDZGSjZQb0xyMkdvR3lHOFFrbnp0elRJSUFHVjNiL01FLzFDaUZqcXVsbm1ScytRczdLTTE3d3h1YUxNUkJIL1hBV2k3blBuSlNkMjFNNkhyVzE3QmlKME0xMWFlcXRFN1FJYk9jUW1QRUs3MEdYNW5OOWRSRFg2WVF4bzZwUHZKc29IdXc4OUNHY1FMSFUrdHlvQWFpNFpVTFR1Qm5Ic2tWOVo2ZDFPQ3c1Nkg0YjZuMng5enJUTTJLUm9ETlZtY0JNSUY5dVFFQWEvemJtcnJwQUtncU1LS0lxWnpKK2dlendKRmJxaC9jUWg3REk3dG05UG5wRmZqMXMvcEt4VEtKbjVDcU9RbTFsSkhDaDI0bFpONHFOcFFmSUh2aTlmYy9TSXp3d2dUcTVVMnJOa0ViYUVyOG9DMUprQ0hkWWhMYjAwQ2dpamlUYjRKaUdLVVZmQm5HRmRmZFlobzZFdDZiQUpwMWRDQlZLaGpSNVRVMnBBWldoZkk1VkZta05UQm1TN2ZBeGtwSXpYMm5UdDRDS2dHd241T09aVDcrbzAxbGRBREhSQ2xFQUlETGgraS92cUlJa1N4ZGt3eFozRlZRK1NUNkIwRldlaVk0bzhocWRVZW5NdWVKV29ROThvZFVLQmJUSlF3aWxjeDM2L0krUjJrbTRKNDYvZE9GVjkrYXZUdUVIaVRSSVdvZjJJNWdLSDBXVEh4YTNuVFNvMndCclRqeDJpc1NsS0FyYnJFT3p5VlhNL003RkJhemhWalRURlFibkxtbXlUQk1tQVFxTXhaRk9NUnpKOGtyMG9EM0FteGMrRzVmREplVXBMZGtkQnhSVXdPZ29tbmhIcVgxVlNtVU1ZZ0d0dGVDY2RqNk5lTWFGOThHOFIzdVYwRWlWcnBMaEt6SE5jdmJNV2Nmd2pFQWx4WG03ZjZ4RG04ZGZ3RCtZL3JVUVlBN2wyNmxNYzFEVmNSeGtvRXorVHN2SXNORUNzQzZXMTVadGprMEZ0cHpmVW4rNXBMa0JBeDI4N3ZXdzkzV0FiUVNyK1pSeXIyVlJnYlJwMnc5dnNFMGoyWDYxTWZjV1lUSmptVlVhWFVYOEhpR0R3K2VrQWNEcUhucStleXVHUU05RmNPUjl3aHdOVXFEbm00U0s5UHhzYWkxcXVjQk9LUFFSRVJaVTBPbzNFTStqdWlUMVFtakxIUUs3TGdxaGhlQWZrVkovWjhzbldib3g2aE9WWjg4Kyt2Qmo1SVdHWUZKOHZKL0tjdEFmSnRNWmJEdVVZbDkyZHJ0VXUxekZndVdMMms4Y0oxd0x1WVBKSk01Z2pLRXJDcmRxUzFJTmRxSHhqRmhLOVc0NE55Z3QyRG5Zek5IZExZYWlJSzNvQ1JxbThaeXZMcnV6MVFHRGZhT1dSN0IzTWFzcEYwR0ZiNHFncmxBSHZhQ2xNeEpINWR1TE4yUEtPN1RwTnNPTmRsRHNUSkErRGJobUluR2hjQnlzdmtLd3U2ZXA1ME9BWUY3QVZUZE91N0xUaStCc0x5VVdtVlczWjgzY3U5SnJEMlptNHhwTzQyTm41UmRVTzdWcHN0T3h3dWZxUVNRUXRHMktpTVN0bXhpN1JLUnpGald2V3FGNmpXMVFMNEk1Ti9vamI4eENWd0VPc3lzV1NqdUdxVU1oZlZtdVdCNE5iTHBpNFYxYytIQTJBdHBnMXlZcmgxeHUrbGhDQVJnN0hBMFBtczY1T09TUTl2QjdySVZNWlFlZmNSTjhjTk5FM3JyTVl5OVc4VmdKQklPU2hBc3hpQmxReEhkMElHL0t4SzNzeEFsUVpnOHNmNXZKbVU1aFJQZVVFV0dSbkJQM1ZRLzdHWU05NVV5NnlnblJNNlpoVE1IQ29aWW9LTUVlWHFPaVVUQzR6cVZvRFB3OW5qSUZ1aGh3cXpqMXV4TE5LeUc0WEdtMGgxSkhjWnFVM1FSRlR1U0Y4cmR6NDU2NG9WWWRNcmRtNU5HOUg5RFFRUzlEMVVuQWJHWnArT0NEL05IQUdlSzl1ZFF3UVAxSFgveFpsMVpHQkczbTNKY2VMeVUvWjFQS0p0SkdDMzdVazlkblFHNnBaMU5SSWRMV3drK0p3cDZvcm9xVUtUc0EzN0VveWtsWG15QWVJQmFiYTNsc2g5cFROUlEyQUxkZWJiUjJ1bDBLUVk4LzJ3RlhOTXAvZHdhcHd6WFJPSzBGYWJKSTJ2OUhXZXZ5ZmgzNFBaTWYyNEpweUQ1SE1mVUFaOTZlMThmdzlVVnpHV21qdzU0R3V1QmtVOXdncG5DQkpHMDFkbzJlZ2pjYUlhS2JyM2FDV3V6RlF4Q3VZYVR4Rm1oRTlOb1czbkUvRUx1K3NWTVkvS3ZWdG55NnZFUmtUOTRqUkd6TUZHdWpCZXNDeWRrdTBXMmhhQk1tTm90TEJSODhGMllGN1lEaFYzVEpVRTQveW1vbkhhWEhKSnlrU1hMbzk3VHpabm8xRmVOOXkvSWkyT0I0ZS9DVW9tSjE0a0xsa09jeUNOL05temdxL21EdGhlQi9iM256THpqSWd5akZycFpkb2hhYStlcVU2NjAvRjBrOTJNRnRxS0w5c0M1S0hKM1A5ZWhDeUpIUHJJTW8rVGk3cGw1WkZYT1gwcmNoU3NzY3JnR1lkM2ZtaVl0VlVWY205UXR4QkYvRkRFd3drL2lGTFYvRk9odTF6M2NJeFJuSWQ2MHA5RCt1dGthTHJaejBzaTZxQkFwMmFiTmhhSytzVnI2cjIxQ3RLUFgyUk5wcnJGd05nUHROemNmbzBLenlyV05ZQWlkNit2VDVscExxQjdLbmMvOXpid1lJVFZOVkI0TThvRnA5QW9oWWE1UkJpUGcwMENRRWR0UDQ1TlREM0lwR3k1V2JjK3V3Q0grMWE1SFl3b204K1hBU05DZEt3bG4ydkROenduWTNiTmJpL3M0MXp6c0ROZy9sRVVGaVRtOWtnWWpTQXhXaVpEZnBGSzNkUWJZMUF1eTB2V3NOWTZ1cWxJdk9YditXUzh0UXRUS1BPQmZxWTNnTlRmelNiYVZVSDJqRm9rOUdpUzN5Um1pZFdidHRlOHFMaGY4T0pnd2JiS05sbUc4aFhyc04zSFlVK3E1a3RObHl5ZVB2aFlRU1d3Wks4Uk5GZXo3eWJjdTVCUVFXVjNoQVJDT0pGbm1PVFRkY05sMDlqS3dWREhIdmlyRExUK01nMkg1dEZDRGMwTjBNd3VCWDBEU3NMeDl3Y0NjdWZBZzJyUDhrejdPSGVqUGlKSTlJNmw0VW53VFY1VEI4aE9ybmlsY1NEMm1LTGVRMDczWFNvalpUa1ZtcDVMdncvRSt4bDlIMEc0WS8yUmp1Vnd0T0txWjBpeE1OMHQ0UWE4SUF1SG85Z05QV0hDdkpSVnl4Q2tJSkozc1pQZ0cwUWlTb0srQVF4dHI4R1Q5ODFibjRQTnlCN0tjTTR2WFM3bDFOY0ZIUUFrLzBESVplci80Q2FFNUVqU3FlNkdPOHhpdDBBdEVOTWNUd3NocmpRbUNYM1l6SzFEa2NZNk9sclkxa1l0YlEwUGo4cVZYSE9ITVJFVnZ3R3V3SytvbHZ5ZWJqaHMzN3JJTmFwZWRSOEUyS0NyTkNwOWFDbXVaQmUwQSt5cVl2clY4ekVuUTJCVkpvb2lrWFNmN3NONmxEdkxONE5jZHN5NEp6aUZ3K3VLYm1NL2RkYUFEMm10OUpBOVpqM0E1ajBLY0Jpck15SGs0Y2NwWHU0a1ZLTVFiamJMR1U1b3hVdU9ZYkdhTmtIY3Y0NUo4b3R2U1B5MzFhN0Q1RDFYa3B6TURDUUUzREFzNkZHOFBiMVVXZ2JQZ0grS3o5ZVFZM0Ira1dnMW5mOE8rWFRZNkVRQjAxMmhwdnFFWE41TFRGTzdxc0Qrb1IwanU5OWJOczdQc3VwWGRRNzQxbVpPOVZJQ2h3YzNXdDI3QkgvRHNTcXpLY1hTTUhDM0p6QjloeWxyS2oxZFBuZzhOQTlBQ2tsZVlzSXlTYVVvaCtydFp5YmVoSXVLYy9aamFKWEUvTXVUN3ZRcE5VbXU4cm4yc0VpbVZyVGorS1RhY0hmcG1vRUFvaGpIVUx4cEZCWFZUcDRRc1hkZmptM2pKays5V0gyWEt1cU54ckhjc1l3ckE4UTVMd2UvL0R4Rmp4TWx2U2JGcEx5c29TSjlTU1hhcUVLRkZRUXg3SDNrbnNmOWlLSXhhTmNJc0o0T3JRR2NPUWFEVTBpQ0lqLzR0RlpleWRhdEdZbUw4eGMvdUZIMkcwR3cwNHl5T2tvRVQ0NVlLYUlEVVZjTDFubVF0L0VCa0dneThQeGZ1bjQ5ZlgwbytCTE1WamtaaXdGZzNmRVBHUFJzYUt6Q1ZuZkpST3FtQjhRa0UrWE1oVzFuOURGVUxvSW9zVC9peVkvWFhFUi9WVEhBVFVEMFF3eTBXRHlJWWxzcWJCY0VuTlBZUTBIMUM0UE5lVGNZRzFRbHRrd0JTSnMxTEdOSWFLS2RsV2hOc1NsY2FUcWZsWU1yQkc2SHFnUHFkSFA1RUNMNTdYU2YrUUlaai9pVHB0a0tKa1F6Q1hRZEQ2VWFlV1NOWmk4VmlmbXN2elk2OEM4VDRVNUJZa2tGeUdURUtxc29vTDdTeVdESGIxd3ZhZVA4MDFPTy9WTEhXNDREcGpYMmpJSnRPYlp4eDJPT3RXWWh2azVRRDFOTnFkcTBQQUdPZlhnQXhOK205QmpFK29hNWljSkc1K1NnMC93RTBJRHRwNWlRR0tkd0N6aWJDMGx2TDEyUWpXZkJhM04wVkp2dUZKM205dUE5eTRValJYSVJ4UGdGNElzRzkwalRRRUg4VHZzd0lhNzFqRVpGSzdHcjlSblQxN3FNTVQ1aTFDSHg1Vk81Q3ZSWXhIYzloLzExMVVYcnV2R3JwZjlvd3pKaTFRMCt1Ui9uVHRSeTJ0M3crdWVWWG5uTUVvZVpwakFOV2RjZGZDMEhqRzVWTXpxMVJXQXpFTGRGVjNDYk1MTktseW8yNzMzdWxMQmlEejBMbE10aXBVVUNSU1U5YlhiMVlOblA3WDd6aVFnZ09OVXhuRk1pc3g2M1JiUGNLU3U4d1JLRTJ1akZBMXNlR3NjMkhvMDhsTmFRL0ZsUC9IRXN6Nm9JeHBOb3VhNUhmSXhrM0FuZ2Y4MkVIbVphQWpheHZPR0xRMFlDeFdVZ1ZsTVphZ3lFT2Fqck9ucDlieFRocEFxMXl6M21HLzBpaE9yOEpFRDBEeFhHMHNtMEc1SGhyN2VYTDF3YUs3a3gzYkg2L3ZhckJsZmRSVFBKNlJwNVlxL3pqcE9UYmhPVzJwQTlkS1dsZExHMUJOTS9mUHVuemN1VzlncUlxUWtnQWt6RlloSDFmV0Z6MTFJL01nUUtRUklpRTBUODJRU3VmdzlUSVhIZnRwbEkxWFlwUTJ6RitsUm9WanF1VHFycHV3MUlJQ1ZuV0trS0xFMHRoOWdqWTFEZ0JSd1AwdEFpcC9LamNBSmI2UG5lVUpoRUt1OEFFU2REd0dLUmhUbEV1K0wyMDNyZ0dUTlZoYys2Y2ZPeXlMRi9FVTd0b1J5bmdOYnpHOWlSQVBiNXp2d0tGMFhlY2pvTm51OEVsRlhRamc1R2hjb0Y3VVBMcElETzhxdXlGNEtGNG9uOGNHejVreHRhY0l5aWRZNnppbURhRlNLRTJoVFRhT2sxRmU2VDVGWEFmc2JOTGFaaDFodkRheWNBMTdCNjVTellHRC9FZ2w0aFVkWGlGdENla2VYTTBxN1ZROTNlUmIxY1VrVGcrSzZ1dEVRRUdaWnFRWWdKeTduK3ZYWElxbmhPVWNIa05CaFBGMDlXVndXVW83NVEyZ21uc0NobTB5Q1RWZVhpcC93bENzY1JRSE53RlhaWHdUcU1wckZFTnZrYUVoblJRYjJDbkpza3R1TXc0dkJuRFdFcm1UVWlQSm5HZk1EblYvbkdYakRwdnhTbDFSQ2h0VkJCOHA1YjhWUm9vOUtoSUtmZW8xQzFUWmFNd1lKTVhDTndoakRtaldYMkxCSVFpWGlsQVZWVFptdTEydVJtUlZJWm1JTDJib3RXUHJxWDIrbGQxRjVZdlk1OHRJZzBSaUNFUk1LendXOS9wYWlNK1hBamh4cS9WMVJ0dVlYZFNXTng0SzdxcWlvSE8zZGxDdGxkUGduTkpwY2lYSldrdGxHUEl5OXFjeUpCQUptVmRNMVV5aTYrdENKc0xSTUx6RWFuMlhabWxlN1RYT0dManhwb21uWURDYU44UHlLZ2VISVpxdGd3ZFIwMklXYVl3cXUvcVZTZWFXSFRtbXZMMVhodHFCT2FpaUd6b3dpTkhhT1RXR0d2T3g4YzJ1bmYvYlF0MlhRKzk5Zy84N3R3L0Nkc1Z5UFRDa3hEaVFrNkkzTGpJZlpaeGtvczh1cEk0NS93ZVNCTHNMOU45OUdNTHZ6UVZJUDlIQTVkdG9nQzg5M1BEZHB6VFpkSUFYbUtkSnBVUFBSYkFPM2o3WE9meVdwaVV5Qmc4clVLSTJNWjIvRXp0UVF4Qm5rVCtGZVBMREkva1dRcFBqd3B4dVlmMDk2Z0h6QWRvTFZqUE5PZHV0ZE9FSmxMSWdBQ3VlR2V4cThlQU0vK0J1OVFDWUdlU01BU0xLMUpFbVhndzZpOTlzVVJlZEkxUGFadmoxejgrNU5EcUsrejRISkhQNkwxWURScCtoR1crWTY4UHI4dlBzZXI4TkROTGZLcG9mcVl2SnRNVThGNFZURkppK0FocG9MdGQxT3N4aXJYWXQzMVpCbXRtL2UxWVNDVG9SbHE5UHJDV3RaMnI2L1FHcWFiNkNKYnErTThvRi9KK3MwQitIdkpYU1RSUm5YTEZ4c01WZUkyRWl6NFFFbDNaNnc2d2FuRVNUUmtYZ3RHNHhZN01MY0VoRno3Ky8zSnJtd2tNSmZpdHk2QkdIQmZiZ1d3SE1zWGpiaDR4T0ppcURyZ1EwaU5ubUlGcUZkRjd3SGUwSG92SGYwZ1ZPVVFTQWQrcTRxalZ0NzNQK2UrcDZ6bEdSVkpJM3M3MWU5aVpYZTZYc3ovckFGQ2F6L0V4ZHFQZWFhTVpGRHF3RDI1dTRKNmwwNzMzd1lXc3BFWHRpd0hrNjZ1MVZ6enpudFRORStRSDRPd1NhL1dkL0Q5dTh1WDVDanhyN2wvVTZna0haWHRmczVKL01KeXgrQjkxMnY2V05IMEdUeVRtL1VVcFRFVmFzVTdibC82YVRsWVlRQ1NrMm1kS0RIcytHdHpmdnVVcVlEL1BHOXdhSW4zMy9YTlBxWVJJM204eW9OTnhjMzh6enVnZVo3SkM2QVY1aTgzRkZadU1yaXdsYmxIQTZpeW92bjJqZ1VwYk13YVdINkJBenBIMm5UZFVOS2FDZUtLMEZxVG8reEMyWmtSTVdXb1Ntdk5mQjc2eHM0YTJqaW80djY0ZWN0NGUzVmdLdHNrcEV0OVkyNkFMWDQ3UWloN2ZyOWN3ayt2V3VQSFJaTlBxTERxVDZORXVCYzZ5VldjUm5HbTJtMVhtVSs0VUtrdnBvQ0syUlFKVmc1S2J3QVpMUGpSN3lucC9zN0Q2WGI1K1kwLytZS0tpZUtQaWVodlpDVjhFZzQ4TVM1aG1WN3pacEg2bjVJWWtnaGk3akNNUDZ4MlVqTnVCZWNkcDB1WGIvRnhxWDlMVDd3NElaY1l2OUhOZ1YrUVB0UEZyVXlQbUloQWZxZ0k2cHRvOEd5NnNWNnlKN2dBdHJtSlQyV2xMWlZ3a1hLTlo0a21reW1XNnZ4SGdPUFRUd3Jnd1AyME5RTmROVG4yeVFKWi9ibkhEcmNBMHoyREpLNW5LeENWWjF6RE9DcXVYWTZMZTFDTm0yYVJkWFJOZzZscTdJYkFwcmlldVJ6cGI0SzREdnRtZDBtR1R1RXpFcDF2c0p5TFliWDNjZWJaZ2NPNzdXSjB4QWtiT1FxOWVEbGhscWFEZ2pVSDhmRHl4aHUzVEZwa1JlQUtrbGNscEk4emlBalBGejRKTGpHcVF2cktnUDNOSW92SFhUeXAxcVgwZ2lYWTBWVWNFSncrdFB4VUc2UU9WKzhUYUdvRDVtTVJZYjdBQVMycWxPVUpYcFNKa3Z5Rm8rdXB5M2FqYktyaWI0b2xJaDJTZ2pNNVF0QnBwVUxaRGl1NUVsTmxGVktmajJOYVlDZG5aRG9IbStGaXN1Q1VpWE5CWERweXBFNHg0ZUlFMi93ZjdFNHY0N0krelZ3S2t1V0Y2TE81ZWFFWjRsU0dFU2QxbmRTSEh1RHdGcjVMVkkwVmdWbDRnaWRmcytueENqNzRBOXdrTjh3S3lDem03VnJWOHBtcU5WQTRlOVJ4V0VscU1jcTBGejM4YVpSdWtnbDZhOFY3dWZHT1FFbXZnMmp2YVhsSStqRkNjYzNUOTdxM21yYUwybUNJWFY0LzAxL1hpbStuNkl5YW9kd3lNbXZ5b1NUTGZrRGliOGpMT3krbE5oZk05amoxUnVLd1pUWVJMa2Y0bXJlN2dRbkpOVUpvekN2bzRveTN1bmtRYVYwUUtrb20vSXJ5ejhBRVc5MXc3NFFjeVVkbEpFWnNnVk1PZGtnK1luV1hEUjJEQWpaM0RsS09tbDk3c1pLVjhKMlgrTXI5TWdZYzNFcjBRTHllZm9tbHhiKythL1hZblZVcFdBMGxrQmVEK1hDeUdmaWlGSjdoK2xKRkdnQ0IzaXFmUlAyQ09IZ05XOE5XRHAzU2QrTXpBRHk0WWZrcmp2YXpaT1JlU1VIRlY1L3JwVlpYL0ltN3hkQ2hMNlRwRkFhNTh5eDl2VTVHWVBpZ2JHMitXbFNQOHJySzZEYWMxNU1mRVhzVW5rWTViS0s3SjVQalhUMm9uY3VOdXkxUy91VG4wa3hwVUpRaUsvSzVxM2lMa3ordEVoUXNRVThDekg1UFBncFQ1aE95aTl4RnRaSjVMWTZrelJCOWNlWWV0aGRUeXV3eHdqZHdaVEQ4Y29tcEo0SU0zSXdQL1hMWUFRYUk4KzRiNlNGRWFka0ltZEtlQkhuSERmelRiWHQrM2xtR2dZUHkxZmh5L3d1YTlGTG5VTmJVNkxaK3o0OTllZ21HRDFNUUtaS1NERjhCVi8ydDYyZ1I5bG9tbEFPZ3htV2FhQWxxYXhmNlZXY1g0R3prM0ltbjNTd21LYjJpYnM5NTRzZzl3NmpNQVlBNjJpMlh0VUEzREU4YUJNQnBVdDBIQmQ1Zk5jV0Y1L3FSQWRyODVqSlVYWEJsRkROenN4YkFOcUdwajk1QjZWUncrSnlYeGw2WlNScnZ2dnNwNGsxMlpaRkNEMmFJRklsOXBvSFUra0Q2UGJMVk9FZE5xMTlmdGtRVCswUHRqbHlZVmF2TkhEOXhvVlBzcHc1NkJPNGI3M2sybGtuOEg0VHR6enJzYmROVDNudlY0bkpkQmhBaEhoQXZkQXJKemdwS3hEdjhPV0pnL0dnOW1sbytuUC9ENHY2Mmw1Z3NFYTBEV012OVVGMXVHMW8reGNRQzJIcTJXb1dGdUUvd3FUNjU2eG5kQlpWbEdsUmp0UnRoRUd1aTcxVG5HalEvZ2tZUWdwSXNmYmFuam5MdnBHeXpJczhzR1huVDdkSEZrbVMwN0hqM2F5UFUySFV6cklHSFBxczVsOXFxcHpzMlluU000YXJObGdoR0VsNXhicC9KY0N1cTNRSk1KNUxnazFpYjRNbUhiMytEWEtjWTlsNFZQaElKSGVEZjZWdVJwNUNIWk9qTVpmRW9qVm01aElBOHdYT1JYMWtqOEl5VHc2VkxJVXFtQ0hIQ1FKSFNYK2hkSUo5WkZCMEtZbWtwOHBob1FIak5MQlNYWW9lczlFeXJnUnNhdkxyU00ySlRRMHp3cVF4RFNXZW9OMUVicm81MDZIdDgzbEdjd2U5UDBvaDdTTUFHdUJsVEpsMWFuNXRDbnZpcVNMeXBqWjFyOWx0aVU1SjBVNFpRYlc0WCtGZ3RzMitiUTVUNVJ3RHdKRlA5eWNpbUFwNFFnQ3I2czBJRlkvZ1dSM2NYNTRISlN0eS9lUzB0blFGMXFJc1NiQ0UzeWlCMU9rbkcvODJiTDhTWTlyREZnUm5MM3gwdjlvT094NXRwS0N2SWxXaERkN25RaWx5OTF1YzhYQ0dpS1Y3Sk5OMm85ekhWK1BnL1J4bzl3S0wydVdCM212VE80dTQ4RmZjNmtKV3grcGlXRnczdWJ3dHhvTnNwYVlQSVB5Z3hCc29YVTE3SkZwMjRVMUw3M3Exc05uaG9wc3JMT1o4RTNEdUd2MTNwWlRBdFY0ck5lRi94dlJnV1ArMGF5Sy9wR0NPSDVFSmN4ZHZueFZkZVVINUc1ZHQyb0hvbkpYMlVKT3BRVzBibFFPUmVPV1lCSzR1bnIrQW84dkRhMityZU5kT3dHMmtZNytRczNyb20rY1pUUy9zZ0RRTjBTWE5waE9kSVo0WUh6ajlxTHRXUmV0WGQ5eHpzaVB6dWgzTmN2ejUxTVJRc2d3TEFZS0xpYWlVRDlFOG9jZ0tQTFJUYUpBTTBWQmlOVEs5SDlZODE0NkE3Z3JCUjZWYUpJZUt3dXp0dmtzbG5oVWJvUjE3NnB0aWZNOU1UWkhYdDZQSWxhbG4ybStnS0h4RXAzdkZJS3BBallPNmthVG82dDNmYkIwVFBrUWduMEhSWFlDR01YSk9aOVV3dTM0UVdqWVNnS0pGMlRURzZHSW94ZjhFRlBFbDNoQ1c2aFoxM3hCalRkZnlrM3JXR0NQMVp6QXBzNUJCaHg2aEkyblZSNnZSU1gvdURDR1lHczJhU3J1OEVrVVYzMEhMMm92bFBNV3VZWHJkNWFQdjRKdEFvNmlFMVNRR0lQdjZLdjBEeFNZWVZvWENIWjNnRkQwTUhxZngxVDBHK25JN2kvWkdhUWdSNGpxMlhrc096SXgrWXF1akZMNWkxTnZVeDU0bExLSmNWdGxyZlNkT3U2c2hZdVBWMTZnN1hrZ0ExaFN0ZSs5UTEyS2xqSXgxVGllYlZ0YnJ0TVlFOGl5WVBDQjMvUzBXWjN1WGJsVVA4N0VEYktuVmRpNmxYd3ZTbHZoa000SlBEL1RTNlh2VHBmODZ1dWkxaWNSZnhHaU9id0dmQWhzakhieWpQUk5Xek1QZFU4dXppM1ZkM29aOE5vL0hJRmpad2dWVHhrNm5CaGw4anUrQVg3VVduRFptZldmZFpyUXkybXFrOTdKSDdtVkxESVEwam9sYXhTMHB2TGxpWGJCSC9VQi81TUlPOUYzaWdhamZFVnZNaGh0R21BUGcyUStsQXJ2MzlDbGJGSnNMSmxwK3oyMVU0LzdFeFZYMFlVSndiNjFmYTBURDFqYnZlNExNTGpydlZJMUhLVmEzaFBacktmNHNpanlDL0YrWnhPaDFRR0NEZXVaQmRnaXNZd1FlTzNTdkszSnFjNU9ibDRQVWR0TDQxTVVTc25iTkRqTVhjd0xydStxQkxXMUdUYXNIdUF3Zm5KQlZkd3pseXhyejlHbHBTLzZUdVdxQkxuUkdWNVByOWJZa2hvUUdyaEpXUVlySW9sMDlpL2FVNmpoWkVic0hWT1NicjJ1M0ZzcUlVU29HaVdMOUMwL1FMUmhwTFpGTGZVUWErT3E5V3VLY0ZSUkRnMkdBUGlxU25Pd3IrcExtaEl0a3dRdW5rS3VYUGppeHlJdDl2dmlMbGJtdFhBWkNCTGFuNFFwR0hISjFXLzFlZWFlZTFCZzFEVGtiR09rL0dnSFJsWG4zMUU3S2R6bUQxQVV4SmR6bWh2R29IYUJpUEo2U1RSM0xodEpydTgzL0pYWDBJTFlXOUxUWmY1dERCd05VUUhYVjJqZXB1RTFDZHBFRm9jRm9QTUhleEVQaGJLc3hOWVA1RmtDM24zK0hLa211YVdMU01XeTZhSnA0YkFRWlBsRCtUSVlHM2N2aDVHWndjeVR3UzhmSnpHbGZDVFhmcklDU1BIa3NuQm1qZ1V2MVFjaGc0OGR5cFhKR0NLYmI4am9SOTA3RHVaazAvWkFiSzIyQ0dtczhjZWFwdzlsdDcwUjREQTN5UnlJSkU1N2ErQWhRM0J2ZFlTN01jL1d0aGsrNlA2dDJhU2U1Wi8wcjd4RG04dnZUUXA5UVFTNFRGWXdSNnFOY2ZydllRQjRhSGc1Vk9DVXAvSWdwWjFVVkhxcEpLc1NPSEZyVThrV01rVUwyYVJPQkhXcjZkWGpYZlQ0RWQ1b0RWTXkrS2Uvek04ZS9udE9WdEFaUmJNR2dGRG9ONUkwWkZxQ21mdEx1MFdRcytuOWxjQnRrUjh6NFBaUU92NVp4OFBPR3RTanhxb29ydGFsOWpsMjEwaVFUNWpzOE1YVGVQeGRhMi94Yk92d1ZPYjFyTkRKWDhHOVNMTldFeTd1c0NuZlJVSFlDeVo4WlBVc3dBc05IeEYveEZ2ZTJ4dGRYWUxtRmJNVUZVRytsUlZjLzBhandaMHIzTTFVZlZqSzRWQXZOY1IvejBTdGZKMXFzTWRaZzd6ZS8zVjJlTjBlNGtZL3RKNnFjZ2IyeENYNUNZOXZYOVJHNERVV0REaDVIcmhQanFadW1xdXgra2JCcGU3TUtwSkkzMzErWXZKTEkwcXlaTC9MUVpZYzhERXUydmNidmlIVUFyTUQ5cnl5QUtXaHp6MFJDek1tOUkvWEhMZTdLdUVNbkVzUFF0c252SXNJZ0EwR3ZXU25ZYXA0YldCZDlzU01Cb1Q4UjhTdCs1S25VSUFkZzQ2NlplbnovV1cwSmNiQWUwWXRHY3ZlaXVGblpQQmtmWDZTcWp0UU9haXplcDh3cDF0c2t5NThZQjVJb3JlaWVDNU9rcEcra0d4UkdIT2s3bHlmZXBDRkNQNkltS0I1WG5qcThPUXBHWk1kaHFVaXZIWEs4Y2pFc0JqK013Mm9vR2l4YlZXM2srSURiQzRjVXJCMDdrdy9OZUVNMnc1YWIrK2k3emloMTFIQklvUXUzck44OU5NRlJkc1JDM3RQd1ZUWEd6cHVJQ1VYZHRTZ1lUcnFGaEhMVU1aY2tuazNnRXNUaEhYeHhFdHhLekR1eWt4TEZFTFY3OXRpam45Q2s3eTF3RGwyQS9mNVBSYTBRYmV0THNqczBoVWVhdW9qQ20zR1VTUDVPUlNtQnRzakV6SE1UbkIxRTMyMys4THdLTXJVSVFGOEFHWkcvZjJUTWZ0WHVOazlNRHdhenpBNytJWkh6bkg0U0xVQSt0Rjd3cGtDc1B0SmpxTkE5Wi9xZkJ3VDdsQUpldC8vV0F3TXgrYWM3UjNwT0JVUG9YZlZsNFhQK1VjU3pFdWNva1BSUGFldm9WdnptS3JBSVhVdXRtbW1GNFFuVmhhUVhIaWVLcWJGVjlWL0RaZUJvbUxOaGtscHdRK0djbzBuR2E3WWQyTE4yem9tN2pYVUpoOTZBZFQ2OTlYenFtSFNFZEJQbG5CQkZjbVhkU1pHN25DUG53UzJlMURvaXR5eXJ2MVI1QkF1RFBOdDIrNFVhRlJPK3lhc1FtTTQ3WmxJRVl5eHZTbVRDZFlNMW05WHJ0U09nQWhBQzBIWE5yeWlwUjdrdkk4SVp5dE12bmltaG43eVhUaWN0UER1eEdZTDJBYndsV1I5TC9nQ09BQ3dXNDlndWQzbWJzcDlITHZDOXk5b0o3NFhHOGZLZExtT1Yyc2NjTlI5L2F0Q2FUb2piZFpmd2VCY2pYbXk0V25Rcjl0RlR5K3l0TU5Ralo2RFl2clkySVFJWDY2c0RyN3FDRHFwMVdXd25tSVprUGMyNjBlNHhpUmlodkhjUldVd0NrTTRvRy9sb3p1U0xRV0U3c0VPOEZhTnVCa25ZNWtuWFBCMzlkLzFKY0UrdVNIWERxSElrd3p0eDVqbDliaDBZZzl0OS9ySUwyWSt1ZzRQelhxWmFCWEhROWF4M2dmZkFpWTMwWjkyY1lVN1N3L3p4ZXhhWWVLQ1JTUmVwQ0Y3UDc5WWRDYlhDbWZoN2FvMXFLUFdNZEhmSEoyc0hkVUswTVhsRXJCQ1E4T1d0WUxScThYSG5vUTV1NURNRlhyZ0habzduTjNXdG9MV01UZTRETHlhRjVISGZqT2plakF2R1JTZ29BeVFMUmNtN3dPeTA5V2NBblV0QUZUbGhENUdldVh6ZXYxL3UwNjB2NitTakNBK3JlZ2pQaWl5SDlVSTNtSnViYnc1eFhYR2FwM3YrUHlKOCtYSlVMWFlHTU02dCtPdUdwZ3FpQUFPOXJMQ3pYTXBlVnhDMzdLSlZsaFlMNlhrYmFQWWhVMWEwS2YrZHRoNXl5VlJ0bEJGa0ovNXJVOWV3YXlzczVQc3pReXV3VXRCYkloeXBibVpFaVNrRDRiTkJDSEpnZmtHTDVUNmdmNERKaVA5ZUxqL1cxUmFhQlZFa1RBcEpMa1YzaHBpeFpLZlhWZGNlT0pFVFFwUzlSOUY5bzdaak0rVy9mSmE3d0Z0eVRmMEMvSi8xOC9JTTlZWnlwaDJqRFZEelhjYlJOTS9PWk5JaGZGT21uTHNoTVlBeEpZTEN2Rk03akt0SStrTmNBZTBsOVBlZCtScHBiSUFmQkZXeGd1a2FTTExTOEVybmdGeUwyYTFSaG41TTdDMlRMQjY3Um4rNEswcEY2cEtRdjNVNk51eGF0NHNWZGFiUXhWeGFub2VpY1Z5Zk5SNFBKYTZLc25VZTErdVBjMVYvOGJwY3EwMlRiZEh6WWJwekJIaUtjOUQ3ald3eDVBVk56eUp0WXNpK1BOZWFyL2Q5dUEyaDVWMS9mc2JROWtTZFBjTjdIdlNrNnFhWFJWTk4rbjZwVVpwbFozR1hUUkZyTXpUYUh6K0lhcW1wdGtNN2FmZlZzZXRBVlNkWXRPV3V5d1o5ZG02bkg5N3FucTV3TXE5OGUzWG1LTml0SUowTHJWK1c4TG52QzE0K3hkZGdEZGJGM2s4TjJoVEx0eXcwZTFlc1JGZjRrblBuSXBtSFV1bTNNc1FlNzZVei9EeDlUWTdWdnFBVXJQbTlyUTFrT0VlZDNrQUdjUTJpcUhsTUgzdmdDK2hqU2dWUkExZFpXU2d1SkFxQkpGZU1GNXVuZzlZSU5WVFhSK1c5OGFLWVdWRUxGay9HT0QybDJXZk9IVSthZzdGeTVDS1N0ZXF0NFc4Qlczb0NhK2FmOW5wdWpCMlZYYlQ4NUFwQmZYVm0zNU5MYVYyMzVmRVVGbVF4cWZha3dadFQ2R3cxL0JQLytGdVdaSWg2RGhMUDh6ZU43NkVDVmM4Mys0cnJveVBPN28ySlJvUmoxcXpqUXdPT25sVmg5QVBwTzc2TnRKNlQwQjZiMEdZY2E4K0NMWnQ0aUp6QXJUNmk3dTV6bmFtL3RxeTI1TXhIMkQ5Y0JrMU9FUFlGQVB5d3dMMmsxUDZQSy8rbHBFeDFOSHF3Q0R5MHFjQWNUWUpZZGQ2OG5DNk1KY0IrT2Rtblo3QnAwK1FZSHh6MHBGZlFhM3RHUWx1cS9HSGFldlpBd1RpMCtMYVh5NEtNTHBGZkRPbjN2TVRWbFZ1YTJHQklYSHJjcnVnSyt6MmFROHlCRWFuRzRXOVYvMjU5WUVuR0E5UnNvdUZTK3FBQkpsRlJ6YUQxZEJEaklXZkVWMXR6QTZBZjA1Q0N2ZHlMSTd5eXM4RFlGY01rbis0NHNaL09ISFE2c0hpUHI1UlNweDRtUkkwemNyQmRlYkIwemNIWVlnOVVsb2JyM0g3d2F3UlVXdk80NEF4U0JlSTQ2djlWaFBIcDQ1eExLR3BzZGszb1pPWHhFSW9OVmVYRlJIU3BzLzhaSS9jb3l4Rk1xeG9HVXRqL29PeURzRVMvT2JyWTBuSE9LUGVpVGlWa1NvN2RvZ0lxQkJ2WktLcXdjL3hUaEtHVU41WEJKY0FCdlVuS1pHWWxRNnN6VHJVVGV3cnFrcSt1S2tNbllXRFhDSCtEa0JlYVpLcmduTGMxd284dXAvUXRSVVZjUVZnS0xMNGV1elZSdGRXTmM5OEpPTDJiOHhKaHB2MXc1TDYzN2FTaExYRkFmSWVOQVdsTW1EUnUxczAzaXRnOUVaekhsck5PazcvamFPRHNjNlFWc0xWODNNeURnVzIrSHBUNkRSTUNKMy9odVJUVG82c3cxV3RhMU9LL0RvMlo1VDBncHRIeFlyem4xSHJ2S014Y1BTNVZCUVNKS0NXT2dxNmg0aDJYTC9aZjc1VFQ4SFg3SU10Y2V0b2s0SlFDWHBwUVlqelpnMDZZTEZYSXVVM05KMnlSQ2U5cHZuZ24vd0NyWVhIa25wcmpjY3JmY0ErYU1PV3EwVnhHa1RrcytLak0rdEwwcUtaUUEvVkdsN1dRbFV5Mk1UajYrQlJEdkNiaUE4MG5xRFJxMmhsVWw4azM3V055K084UHd5QjcwLzZyd25GMFN3dW9HTWxPYWFqbHlucTRSbXliWWNMNDZTb284NGY2a1NoOHpnNW9ZV21iSEZpQU5Ud0dxUW9Ja1VVeUxBZkMzQmNZcm10cFdXSnBUSmFEWUFLbnhLRk1icW1qaXNpL0dod1VvKysyczJNeXYvR1ErVlowa25uc3ZvQWdDZjhtaDZ4cDkxbHI2M2h5RFhhN2Y0VUROSytGaWFYSjJQWDR4VmRmS0tLa08xd09pS0hKeHFFZ2pjSlJMenpaSDI2Nmg0b0NoejhhenlBejUzQ29uQzlRWlNBMWhzbEZYY2p1QWdYRDRPRUxoT3IrWFZCalBhQ092djRueDRtQnVtcFYrZ0RXYlFuMlRLZnlmWWQ1QTFOclcxbEFpMnczT2dEblJyMXBnZ0VqZHZ2WkhqL3EzT040emF5MU4vVXdNallVVng1eTNHZ1J5VWdvMnhXdDJsMDNyTDBYc2dWL3BhZmZ1bjg1M1ZsREZMVjBoeXZGVGUvVGp1ZFM0aHJRL0pVaDJPKzZZK2xzclk4VFUzVlJ6WlErLzg3bWF3UDBMUVpEZ3RSSE5pK3BvejlwM0dnYy9jN1htdkxBVUJlYXVMOTFHWlR4bE0vTUpqN1hmRWZhYlhWeXNTSnBMNUQ5c1NzM1NuM1RDck1qWHV0a05na0FOMVlBMThYV0FDTjlHc28vTTNnZlR1NVdBaC9uWklkRSsydGxKTEVoVFZCRVk0TEtKb0wzQ3hxbThvWlRTZUt0Wi9EK2F4K05YV044VEpGZzJFc1NMa3pDRGhQcEhjaDl1RHpJVFNaWVhWZGVCajZjRloxTnQvUmJFcXZFeUhuSFhPSTd0RkdhbFlTVVRQQ1hjVUg3aTJlUW9oeWxERnFiU0FKWjBGdmE1eFk2Z3NLUzNNMmFXbFR4NldUeU5tZDAxeEFTSUw1Snc1ZDRCSHloNDZwZXgxaklXQis2b21qMjdDdG90bXZxMCsvbVltRno5RU13UWVZd1h4cm5jMCtWdzRsTWNXSDBtVTFXQTUrck5Hc2M3MStkTkcxd0k5Smxqd3VhaEZXU05ZdWVDWFlXdFUxTG85cThmbTY4RS9vQWJxMHY3N0xKN0RZb2tRWWp4RTAvZ2dQZ200K2haOXduMHBMLzRkR3V4VS9pdGwwY0k0SlNBUTQ4TUZ0c1pKYmxKN0NrbEhqQXBqUzU4QWJBajJYS1Y4VWN2QmFaV0Qwc3Y4SGZSaXFYMjNDTWNMNU1GSkM4RVIwWm5CVHo3VnJiVFE3K3IvVHBDNFhycHJEeHY4clF1alpZQVJNWDhFcWsyaXhpZTI5TW41UnFBbTk5R0VycEJ6NGptL1Z2a3UwU09xa29NU2IwVFN5M1hPdlVFZ3p6ZmE1VXBydmloeUFMWnh6Z2RFeHF1d2xRYzY1NEJFaXYyRlNSZGJwT1ZQc1J0dGtnMlFxYVRSb254Wm5aNy9naGJYS3JtMVVYVHA4R2FWR3Evc0M0clc5TllHMWt3bHZIMlMzaXlRKzc1bkp3SGgvd2xhVE5PRmFOMWZLMEFnd1VYQUtnUkR3dzFGbDRabmdCaHVGZ1dKa2NSUHRiazQ0T0xhNlBFZThlMHhQSE5SUlJSYWVSTndlRm94ajNVSG5Vbnd6YzB5WHNKVTI0ZWxxU2lhVjJta1l6RlJqbGFPZ1ExUDF2eGQ2M2QzMW1WbTRTVkI1ZWlHTEUxZ1B6MzBhRldGbXR0VFdHR2orSHRoM0NDNUFIbWt2RE9FeWRRbjNscm9HMUdKZ2MwZjVzbnYwSHNSU2J1RVhjVHRYbnJNSlpPb1JBdWxOeGFTWVhPY0JRRDNSeHB2L1V1MUE4YlM4YUlCTVZjcklEamo3dERoM3YwQ2lQSVFEL2ZUN1hTelpnZzI5NjZJRXNJZVBNdTBSWVdmaUhuaFB1SWk0MTA4MTdnc3A2YVAvc2pmZi9YRlJ6Q3kxdzQzVEt0ZEg3VjNOS2R5V3hSS3JtakxKNHhvRm1nY290SlVJYkV2dytCamxwNzREL1dSVGl5eFlMeUlmRnZiT0djV09yeFF5TFcyT3NsYTZFeE1nL210eXVQeHd4NGwzSXh4a1dSUmltbHdnZzlHa2hhV3NzdHFyR1paQzVGa0ZDM0d6ODFVKzlPN3Yvelo0YUNJTTdUaUNHMlFxdFJwWWpZdklqMXg5Y2V0ejg5TXY0SkNKRFNCeU1rRUZ1azQ2VkwreWNMbEd1WGhwbXhxb0ZjU0NqV0p0RW5BS2RXV09nWVhienJTUFVPZ1pnd3FTZnVNQ0RJTjljQ0dKc2pnc3dpSlhNaHdTUWFYbGV0KzBVM0RnY2JQbjZodkM2YnZEVXdqRFpsYzBnTVVuSFp2RXN0SXBXTFhJLzMzbENQckpzQ3pra2twcy81OThIb3dMdUttMkVRSlFXQlYvU2FhZDlyRVR1NEVkbEtZd040UTE2aW1PRkdHYVlvcjBicExxeTZ4RVBEUytKZndMaHdaakJPbTdwaWlMazVhT1JYcU9pazVuTlJVa2VuNVFhSnEwckozQlRrRUIvd0JxREhyY2N2VHpCekx0RkpsUzZUTm9VZlZJTmdVc2tUNlNoMkh4U1p1TzM0aXhtb3kvelpibmJCSzdVbmhsKzY5UnlPeEwrOWJBZ3NpNE84ZUtpc3FmclBwejBIR09oTzdYTWNSaUNHL2M0OVoxbXdrRzRpcDc1NmIvd3VLd2wrUk9pdXVsS2UwQWlFQjRXWHo4SlR4Rng1QzhRV1NkM25yMUI4Qzc2QXhnK3NQSjNEQUpEL1ZFblJIWmlsQVVHb3BKYjN0b1RucGhUUEdNdnpaQ0Y4bDRYZlVtZFo2bkh2TGtDV29hdWsxd1RpNDhrQUNnRUxyMjVnN2xtWmJJZTYzWHdjb0tQek9mbzZrakhnd1IrWFEvc0FmNTNzL1ZwQ25TaXNlWFB2WGdteW1ETkNRa3ZNZitCQlhRaWVFc1JRaHExYXAwWmRmVml1bEpYTjdTWTB3NEJkUDVyNFlxc25LWjRVcEFRV1pUNzlOYVVwbTh6eTBQeE12UlpBeGJMMCtvVlJWSzZlWElEaldnRmlkTHgvS2ZiQ0ZHdSthYmcxa0ZVd3AvMVd4V3VKcEttalpqK0VnTTZCMVExdFN3c0tMaWpaWXRHejZ3VU1nWHZPOWE4VFNsZTRVWkxuY0xVTDNnZHUrMDlGeDRjT05QWTZISENpUHBHV1BkSnpCWUVDTUlFUEp1dTdRVUYwMStzUThZRHZYV0NPekxvZHZwRm55dXlCeVJ2a0JrT3F2VGFSbWZhVnBzSng4cFBacWlMS0dqa2c4MFdpN3FaRmJJYVJKRHRlcVN5dFJYeDc3bFg4dVRMc0ptU0ZoOTl3TjVyL1lyQWJIcDRmVDF2bzJZSEdzZnFkSkwycXE3cGMvaHZBQjJNaXRncHBhWDZ6NmVIb0NiQlFMS0VHeEtiaVVtVElyaEF3cmxTZ2ZUeDFYbWVXUEV3b1E5WVNDT2xSeVFkZUtSMTUxQ29PdkVuV05CQmNxdVJURU5zQXFUQWxHUjNLeEE4ZjhIVEkrYld0MytEY0VHcWdrampRdDZOT1YxcDhzWG5FVWpGU254S2pMaFJLbUJpeEtvaHk5NVF6Z0c0eGJjVlJhOFpsUm9NUkc5NVpKOEdZak4vVmtyR0lRMEgwM2hBWXk2ZUd4ZEVQWFpWYTAxc014b3g3dUhjNkFDQm41eTdIbTRCZklkcW9NSzdqNTZ5RUVOVlUrVmFtakN2NEtxRlArWlk2TlhaUThGVVZaOHpSaUdoQU1TaWRJbDN2R0YvUW0rcHhTbkVsS3lyY0hCU1hESHJXeXFSUjA5dFBzQ0hXOFkrZ29HQUtrSU8xbzgyVXpmYmNlR3h6M0JTZzhPQjhtdzlqT2JqZE9mNW1lVEhqYjhUNFhyMmNyYUZBZE5qcHBNaWNzamlSVXRjendPaVdKbzVMWkRCYXpCV1FBUjk5T1V0eXhldmVDVDh5YmlwVlBMeWFaNTE5akV6bU1PRGdzUFZ2U3hpbDBJQnVmUGhIc2VMMHNvNEpRZk1mTWNnNjVOYWdPdVNhNlBMMSswQndWQUNrR1BnRlZBa2l4NlZNajJVMXBGYjRBMFpmQ1FMRlV6MkhZSFRsM2o2N0hMazQzV1pTT29WL0x1b1UvRVJRUk5yNjdNWC92SEE0M29uOWVlUzNMbnFURjZWTkFKU25xYXZteW9JV3c2WXZwYkpkYXhNYlVVUmhpOG5mMHVOaU0yT3NXODk0UUdqdm1sK0twcGI1VXJLeS9VYnJTOGRtN2ZYQUNGK0FiZTBzanZTSGNsMC9WWHUwbmsxWTZ4RmpTeTdRSi8yaW1wdExxZDdRMjJjK2VQZXJ1VURkc3Q5eXBQWVQwbnFiK0tZcHRxQi9pNDBITU9mR05Jd1ZDcUdiaDV6ekEvVzBjMllJcmV5empMV3dwNndPSVNId083MFBQNjRBNkFNd3U3NE9GNTlud0RzSmJaeXpPcitmcFJ4ekE3Y2s1Tys4OTBaYmV0TEk3OEY5V0hmYnN6TWl3M2JsTUhSdUlyWE1MYjJPeHFvQmxlYUJta0RkZ2doMjE4SU96cFUxY1E3Ni9MTjJDRW1oRlNtbTZPUlNib28yWkk2cGt3a1lXUjdXNElQNzcyTklEcW5XZXBhSjRRY01obUdyY2Y0ZzRZc1JwRnVwdnAwUzUzS1BUWmQ4TnNRdUloOU1XV2VFMXlwRXpMRVVPbzBPU1I5WjJtY2NWVjEwOHRxS2lkQjdHVUdRRW1iR1ZMdTV0RGJJQUszZWVJUktOd2RyajVQUEtvdlhqUThWWmZ2ZWNSRUtoMHBXZ3lqT2xlcXRkYlRVLzc4UnVlOFU3bm9xckRoWXZwbUlEeldzT0FiTklPQk0zN1I5T3lJYXg4K0t5d2FEOWRCeXRlc3VyaXJXS2lzQ01zQ3dHOTBwYXBVQm8yV2V6TFB4WFFkbW1lZnNuUHIwMjhBcWdVdVRSUFpURjZQdzducWZJazZSSmVPZktLMmpCVCtITVh0WVp6NmJxSE92UWhZVjBSQmFENDVZQUo0QTZwWEMwSXJuazRha2FncDFOR1NNYjlkcEkyUHZDSFRENDhzSnYxK2NpTlAydlFpVkdtN0gvZ0NCOUIxdzg5MFRXMWFXM0ZhS1NjTTlac3lRdnFmYlhYemZQUFlqcGJiYUwrdUJWS2N2ZkhGUmhWbW1EVHkzQ2tzQ2U5dEY5MDdtNHEwWjBTa0dsVm5sb0RvV0NZWFZ6VUdWbTZuWS84M1BsbkM1OWRzbGlxSklsQndFTUw4bmlJUm1CbFJiQXpUd1J6L0hwU2I0Qmtsa28zd2lnam5hc0srUWVLbGhlU2J0WW1lMFFBNFZJV2FIVkhMbWZnd1cxVk16WWIvMHRiSDFFZSsrZ0JtRHVrV0xsRWM5OGVXMmlPR0xhSkQ4L0NNNWl3N0RoZmFvZEVLNFM2MEt5Yk9yTzltMTc3T2RkYXgwQ0ozVDJsb3Frcm9tQmdXcGsvYXQwSmlTVldDK1pCK0ExdGVRYU5OL2tic2FQS2cxRE5SZFBNNEN6Mmlma2xmcjR1elpmTVRWZC9MWGNYSUxqSis4ZXNuL0xtSjNhaGY5alRJcWthSE5ISXBkeWZrN3JEZTdZcFAzR0dOUE9aSkRvQjFZb2lWckhOUmdka3UzY3NXamtyaVFGSUNJaGZzT1M1WkwzZ3VkcmZjMXhDc2pBTW0zczh5L0EwTk9BZ1JCZFpaMmVLeFJ6WUVBUVpOeUlMbzR4NjRvd0ZwRTNrcWNWY09XWFVuTHZDRXZFZlVNTEg0UitNcXZMc2FMVXcwa3docTNDUjBsQm0rK2hIVkdJVTQzbE42d0lZMFR5VkQrdzhGQ0drVVkzV01LN0tUU2t3eGNmSFBZeWlEN1RQNUswUzZHUTF4L0VSZFo5a29vLzRPMDFNZTdCV2tqaFMxWjYzUVBHbHI5dlY5WHVPNFpqcVZJRWJBaEZFVFdJWGRoa3JyWG5BdmRlVmp1R1VhOEozZHcvb0ppeGVUc0szeGpQeXYzRzFlK1NDV2Y4YytKRjY4KzB0VlY4TWhyTVU1bGc2SGFXKzlPSjJOZTFieGpFb1lPamdqamFVM1dUdElvQW1SR2lDUTdhZ1RFRHNtUzVrUGdjdVAwcnlWak4rK2t1SVpCYlgzUXRybVBvYTlUcGkxcmpNbVorNUtBNU9ZYUcrY1NES1NRQ2gwNjZIbzNXSkpZM05XRjZ5NElSS29nWmJkanRwOE9nYmVURUtDaVlGcU9jRDJtTWxyTXp2cTcwUFZqUklKc1BXYmc0dnpPeU9nRWJGaWFTSFpIaCsxWmlrTVFONko4Mm95N3BFczVjR1FodEhCSHRjOXVNWWQ1c2FWbS9mdUl3RFg5L01OSUd6LzNrcGxiMmc1V2p0T2JSWXo4TG13RFFVMjFhaFh4V0k4b2Q2OUo4MjFnMmw4SmRtWERiaEtlN1lqOUprWHdYV0hNdGxHWTFueE91WjdpaGFlWUlYbHRNd0hPMHljZi9WTlRZcytzNmREMFRteXVURC8wckRJRHJoWFBHRHNxUTk0U09ENUREMngzNUJlaE9LUk9JbVg0QjR2MEQwVDQ2WDVSWHZGNGUxSjNtRHlaMnVVcWhKVkFFY05zeW5mOG82M2F6bWJkVlN6L3RZcUZHdDhDMFVRT2tlTTV0SWJEb0p5TmpHR1FjR05LMWRBZTZWekk3R2sxRnplVjhydnc1VkJtVXFhUHpXNkxKRHhLRjR6WjRKZ3JoaExqZ2RjTmhyTEhYRjVBWXVzcTg5QTdMTzNyZlc0V3RpM3Y4TkM5a0pkTWVUSXZnNEtJamtCM2Y3TjQ1ODNtV25oNXRoOFhzZmhGWHA1OG1ObWJXc3pLZTB3cG9hd3pmYnhZMnl1S21oUkFEU1VPVGUxdENZUzNqWUVQbDZ4Z0VjZUplTUx0OHY2dTVvRnhodVBWR3NpZ0FySGxhUlhoYWFsczM3cVU2cFRhMWRrOVBIOXV5eERKUlM1djFCd2Vncmp0bGMyM2hGSS8rRnppY05iUEtFWVFoMDljaDd4SDhvcW1xc3VEWTVTczRtNTVpeE16MVFKeTRYN1FKZVlDcFU2TktxS0NMcDh4YUd2UlM5SzZYdUpYUExrWVFrbnhzV2xqV3E0VVRvKzNYcXFpQ1laNFNCcFBQT1MzRkVPV3o3Vk5rR21mbkRFNWhiTjUzTlJON2s2bDNIZW02NUVsSjNxcjhuSWNJQUtLbElPV0RUWnJxS21ZV3BxL1NEVk53OU1xT0NIV3cyTHFtcVZPelBoV1RmaHZYV2p3WjltN3VMUjdGOE1PSzRnOEdqU2ZxVUc1VVlqM3hiMGtuZEVXTGNjQ3pCZGIzTmRHektONkhRTUhTRFROSmRiRzZILzd4UFFsbGcvaUNNVVZJUFBTcGp2aHJSVzYyWVFSdU9Pd2c0Q3p5M0Y2d0U3L3B2MEZXTFM4QWJsSGVZckNEQnMzWmRYNVRGek15ajJjRCtwbHBGak9EdENLY3MvVDg5TFlQT0tHeWF1VVMyS3hMK09MbGl2VDRNeUVRYk0rcFJMSXF4K1g0dlhBT2N1MnJReWllVmcvendIOFRIRlBZZEVzL1A3djQ5MkVqdGU4KzIzd1lMdzM3Nm50MUdrYkZNdVlBbzVkSmVaSmZZbHpEL3ZlZGhiaUJRNno4SG93ZFFVYWxaUUxYSkdZd3RocjZJZGNmYURZZmc3WGxROURuQU9BRysyUlF6YW5JVHJYYUw3dDFRTkJNN1U4aW5GcTlZeGFRT3lzRUYyN2tjTnByVzBreTk3Zys2ckszUTI4OFMzZzRSU3pZejZMNVRvZjFFQmsxYXZwdGM2emJQUHJ0S1BPQmxpQzZiTDEreGt1TVl0TFFDWFhsVDdubUdJWDNSZ3gzQkFxWnNRR1dSUkZ4UWlFVis5bU9oeVNMWVJ3SWQvNUloYThHN3RiaWhTRzkvbnlYSFVrSUVYcHZhMDAyK0xSU2tpdEJIQzY2WFNnUk1xQWhHR2NpOUNVWUREV1BOYTVxbm9kZVBKQm9sUmthSkhsR1BvQ3QyUTlRaWJTS2wyT3d5b3JLQ0JiRGcvbzVzQWJXZmFyYnVGclF0ejNQOTVpUjVOV0NTNHBEOUludVFCd2xjMlFoSVBUUmUzKytYWngwc0ErcStUMTdWZnNYV3pVZWx4eHl2b1E4emVMUFMwYm51MjhtT0NLQWJFeUZhbUFCSSszRUpJOThndGR4RUpKRlN5ZGRHdHhPYzEzaXArK1Zyc3hmbzVlZldqYU1Jdjh3QjU0WVBZR3FHTXdBdTV0RFFuQTUrRXU3b0NaK1JCMVBhcjludVdhT0F4L2FVZHprc1hHc2o5dksySHVWUlZ6UWhsUjc3K2lhSTZtZ3NOMTluYWJ5dkd2U0hFbWhBREQvWWtmL0NGMnZHU3MzL3JNQk51NHVuVHNYcXQ1WTlyaEtROEdYeFdDY1U0Z3NrNlJFMXBhM1FSWmRvbS9SQXl3Qk9vbEFZSHBOVjdiUTNid1NTS1NjeWVodUlyMmRuMUo2YkhjZ0NrbHVZMVNHUk1BeVJUWTNNYit4emk0a1BaSVNIdkhDVWo3T3lGSVQ5aTRKTDR5Nm1FaW1MWVFsQU5OMGwwR0k1aGt6UXJkYSt6elozU01tV1VhM1gzWTBoQnMvcDVOc1RLUXFDdXhod0xVWFA3OTZXbGpabnlLRHlRenVOc2RFckpIbHB5M2dvT3BlQ0EzOTJkQWNBTnBqZTlyanR3R2gzUzNGQnhMN1RvZTEvZUZrNVdmOTNRVzVpSmh0TGJucGllVGFtaEdqdzhSajEwRGVSSFFDR2lXZHJreE53WDR1ZW9YYnpsSi9RZmxVZ0hTMXJLczYyeUs5RXdKWm1NbS8rTUFYVSs0dm1IcjN4MnBjcncwUUZHOHJhVWZmdEdGZnA0SG5tMXNKaWh5RDFZQ0FsbkErSzF0U3dIbUtoOHVIUU92M1BUbldJc2NDZEFQTjB2RG5jSVJ5aFZhWFBxVTA4c3JEcmpIdllZamFsOXIrU1JkVkJpcGVkZHpxZ09MR3VFZXhVWXlralllaytqZUMyQ3Z0K2oyZCtidit1citqVjM0ZHM5THZGUisrbVJyd1BVTXpHWmU3U0JyN09iYUFwTTNVSWJmbTVmWFZxSHVKd1hkdzRuRWhoVEtwZ0hKQ3k2dzI3akxTOUpnZDBlcTV3d04ra1lBOG5RbkQyTUIwMXU4czg4dFhUL1QwdUo1WjRlZEhrdVo5eXo2VFAvR2ZoR1FIWW04UTZVU0hFQUFwcjVRVHVUQnh1bDFNTm9jUDQwaWpERDgrYzRLZWN0ZDhMREtET3RxNStFVTV2ZXVhTSt0TzhyTS8rU0dNV1RrTUJtNEpBYU5ORFhZUmlDNnk5MXBVYzEwdUJ3dnlCTFduMDFLTXJjNm9xYzNYS3hLc2Y1Q216T2NqKzVZSlRBN1hqbjlRTnRrZThFRjJKU1RVcFhLV3VYbVR3TEFSaXRoTzZzYWovNFBEYnVwTUZ4clpBWUVyWU1saW1RbnRWanlBTzR6NGlVUzhhYThacS9kY3Z6QWkvSnBPSlBBZVJtWnN0RzdOVVBhUFZOVlQ4dUNpaFY3N1dZa2dmUWFRcU4zOFhERnR2T3FmQ2ZmVm81UkJEazZPL2RYeHRjVkhBaU90VGs0NVBCdEIvVXJLSDY3YWhwM0pYNTdCdFdXd2pWVmZlMzB6VFIwUTJ0UXpOUHpLdlVxLzhXVEFYQnZ5dnZvc0RsS2d5QnIrQW5ESVl3T2pCVGJOb013OHN3R1ArUllQSmFXOGY2QldmT2hxOWM0RW1POEl1TUFVMU9IVC9PWStWVThLYjI1cWg3R2VBTExGU2l6YXNpU21tY2JNRTFGY0dQcVNjQkJlU1E1d05kU3NXa0RXZXRYendDTGV2OE1JL3RPTHo4WkFMSm4xYmhkckczTkNvV2c4UC9nM1lORklvdG9ZbzJhUGdneHdjV2pRZUsxK0hNKzVueGhHaGdOcGNpeVIwd1BnNTdRYjgvWkd3MXFWWmtQRE1TM3hpK1JzR3lnSzlkWEpNK3NXMm5IaUwrT0NDODVZUkpVWjAxcXVXSXBjZHkxWnRGbktsaVlEeHNFc1RBK05yQ2JFNDI1ZmF0YXpLek04WGtZcnEwbXFvY3dPbHVPN3hicXUydzZ1OFNpdkpOSmMvYy93QStWZUJoMzlvLzV4UE1zZEgrS0NOam9CSmh2SUpSYlNOUXRBVUFmcXZkNjJKWVRTVUtodkxRdUE3TTRPalpFSzBQV2FPdU1YTjM5NmlYd0NoM0tzUGdocTJLSkhBdTh6QThGQlhxMHVGamN1citWVklhU3FtVGhTQmxkY0xCWjVXVzBOSERQYWZYUk5ZdXg5bHAxYTFsTitON09oNWRmWUxWaCtQb3c4T0cya0lQWUQ5R3h4bVcrQjM0YjNMeThva0JOOElkVURHelBiNCtVQmNFS0lWaHFKcWNMTURtSFYxWG9yUDYxZ1o2ak1TdXBXY1JHcDBsMXNqbFpETGZKTWx3ZCt5MmpjQTkxeTBvY1YxWW5IZ2R6eUhFcGtBa1ljazh5Vy96VXZlT2NVWE50Y3UvOHI3clMrSmpHbGpzS2JZZXhpQW5xTEs2dGJXa2NpRC96Rmk5dENrS2c0RWw4Y1lKMmVnRVZmQVQyd0xneDFsWkpxZURDV3lwcS9mQUx3RU0yakoyV3ZwaGNuYlFtdjZKUEFiVHRzenM0V3FJWUY5MHVmaUZjc1UyWmg3d011Vkx3UVJzeEJ5MzdXSzR3VTA5MzNjWDVjc3BoK3poM1ZGNkdFeGJhbUptTmZqU0pyTGlhNS9Jcmo4OU92YWtjT1ZTcmdNVWtpWnprQWhTZCtTK3MrZzgzS2NpNXA4QXhKa3JtMTBGRFhkczNkQmNiaTdWY1NtYnlWNDcwYnd3Y2E3bHdQMURZMmluZzhLNkZ4dVBkbzUxbGFtUDlrZFRPUlV6Ylc4cFhtYXgwdE5OV1ZGejVuejM0MXJGWnVpRHlYSFpycW9wUGVBMDRPYnA2REp4NDFwWWZtcUd2cmUyd1lKa2RBbjdWL2dWM3Qwc1BMeUNESUVPTlB2cmVPaTIvNXZyNlRrbVYxcUJMaGgyNGFnUDdqclN0and6Rnl2YkpNUkw4cU9YK1pBMERYUG5yQ2U1NWVuNks2c2JaTnd3aGQ5NktlKy83VVI2M1VKM0xyc2pBSVJpMUs3aFZtV1dxVGV4UzVQdnR2b3hJaHN5OUpTNmtmNnpJM3NuTzlOOEJsaXlYL1hmU1JBdmJYanZZQnQ5UDBST3NGa2VJMS8wcGxkOW4rdWVkWVZuVFZwcEpoTEx3b2h1UHVGS2hlUWp0dnBjaWpKZ2FXSUM0bEtpaXJsRk9tcDVJaFRaUGVmTGRKbHJBQm82bHZUcDRRSmR1YmNoaVpSMGpOUTBhMWVENTRzcTAwQzdnVk1HSndPcW1Zc3NPQ3J4TXVISjBscHZxQWNqeHFTZ1Jzamh1d1VLbmRoUGxnUFFPOGwvbFIxa1dFZGl3d1JZMFB6ZXE0UGdrQkVhY2ZQT0lQS2NwZnA0Znc0WUtyOUxDVHBCb25SZVlWL2ZDRnNvRHFEY0Jhb1FRNU5KOHlxa2Q4czF6K2FMRjJvZ0l0c1Axa3QyL0F6bTgyb1czNzVMV1RYZkdIaThzaWxIcFdQSk91STZ2ZEdWQlJIMXNwUGdPeDh4NEV0L1d2ck84S0pwOWZNVVpqY3AwcnhTRXpmUW52WGpxTSs4Z0Nid3Q1YlZLUVlMcDMzbHJ3b29NVDZxR2VjZzJ2MkVEaEhOZ0E0VU8rNk9oaVRhZ3c5NFpOaGdSNG5HYVYwUFdkc29WeG1EUEg0TlViSHhMQU5pT2FnRmpPTmJibVU2ekswOTJwR1ZSd1oxSWVkdmc5eVJyemdlT0J6WVRuRGpGZXQwNk5MRU5VVlBXTzlQMCtDQkdYQnF0M1ZoSm5oOHBuWUx4YzBoZjUrVllDa2tTTkFqV1RwZGFqblkwNnNxcW5pQ3FwNzhmK0NqUkFBUDZWTVVpU1RvWmhBTU5DSEo4VC9KRFpRVWQxemVJdlBOeVArVEswNnY4U3FQMEZpeFA1ek44NWlaK2JRSU9hbDVhTGg2NDFWRWNYVlFlUnIzOEhUSDRDc2VSTFZlN0NDK2pMSFRQYTlKY1ZXY3MvSUNjMWRNVlJoQndxK0dNYmdmNWlCbFNvUXpMOUNkMHBHQ3dVTlduaS9pcHRlUzR1L3NrV3pVSW9BRXlIUXZlUFR0SkRBQ3VzUVJhdDR6eFU3Vk85eDFxQ3lFR1pZNVdDTjZTY0NhRHd1eSs0NG5IMExqcG1HVkVrUXJoeExzMmhiUU92R3pZZlIxZGxVU3NaKzg1ejlReno2dkxIZmYxaTZDWkZIUmFnOXRMOWxhZmt6VDhHZTBQRnNxV3cwWFdodlBJd0FTc1A0VnFTVHRSWFQrYTdkdXRHY290dGcyS2lrUWp0UjFJaXBzWGRYenViSm81cGIwcjBwWU4rM3FDSlJOYzh6ZWJqZm9xTzQ3VHdSODRKRGtKZHYwRHFXNEhseW03dW0yaDcydDBsMzJ3WmdPR1d3eXRJRXkrbzFMdXlrNzFhQ0syQkRuS0lnNjRNQStYWWJ1cUM5VzduSUIvcG5MQlozMXBBY3ZoR0o1YUpQQzJyd3lVOFNOaWhMS1pBT1ltdnR1S2hTZ01lemZHY0EvUHhEMVByYnFIa3UvTmpJTmZxUVJlR1ZWSzNURyszYzg5WUo4dmJhdmRMNHprdnMxRmFyTEZLNDQ4dG1jZkpMREFUNmNqSEJibnMvTTlkNUhrZWYxZ09JNFh0QmE1UFpuM0N5akkwODlIeGJhVCtIRXRUNnlwWGtSNlZ3L0ZFcEx6YnNuUXFLdzZCMG52dHU4RHcwOXlmVFVxVWhCU1JYM2ZHUzd3US9rKzFlbDhJajBpVUNadUVLVi9ZV014cXN2RFJqT09TVmNiek5YZzlJZUFoeEdFVy9kS1hta0RLRHdVNnB1Mmw3SkpDK2tGYWdZOVFjT2hZZDkvRXFFa3UwSEdSWDlJZGRUZzI3bThROFUxSVZEM0RYQnBXWVd5K3lVZmRJMFNVYlcwQWZsMTg5dlJUd253Q2NnMy9XV0FDZ2d4TlJyZElFY1ZmS2tKbDhOM2l5bnlyVWZWQUl1RFJjOUJtR2YwVjlKMk5WcmRUcjhPaFRuOElxeFQxZExHUnlFZXE0TGR2cnVmcHdsekEzTjA2QThZOU9mY2Y2M1NxSjVuMEQ0b093U3RZSytrN3IzSlZ2NVJFK1grejAwY1pyMTk1RjNDNklGWDNmRWtCUmpRb3lvc0ZPa2RudTlIeVhyRyt3bVRKUWI5dEdlcVdWT0plVU1RMnRqYzl3c05RbEM5VSs1a1g2UDNXSnUxWVRGNjdRODdHNzVIVkZ1T0N0azZadk9xUE5yMkR0Z3hndUFBMnVGblRrTVRlaE96ZG1YYVpXOE8zemp5OVd4RCt2QnJXRHFVdUhIVklzcE5ZS2hQWGVnUllTcUxBY1l6QlkrYklzWUFSMFcyemdHZFpILzVEamdsckczZzVoRm1FaVR1bGh3Y1RuUDlCS01laVVFVy81bis2L1RsbGFqOEQ1Y2ZoNndXRTVQa3VRaHRPbXZXbkhoR1RuT1cxYzh1Ym9yalcwQXpVb3dVc1NlR2l4bDdwYm9TOEJvQjZ1bG9tdDVzWWFwbldrV1lZWDJUWDUwUXFCM3JVSndiSlpwUEt6VC9kaTVUOW14Z3pJR3RZK3kxTG1ZRjF4SVJ5ZEZRbTRtaFR6VGNmMXBaWWl1WUtWKzBqNGZTbG1XQUlhSlpiY3dpVTZiNnFNb3ZVVjR0SmdwYWlyakxVYnkzSVRST1RuUklBRjBCRkprTThkTzdtS0Q0OHJiMk9jL0ZCU2V0RE5zUzhHaGZUa2k2VVVZOU8vMTh0ZzBIN2FmS2tYb3NvYlh4Q1c1RDFXamJDK0xiRnpOQWYzVXU1TnFlcGtGWUNwQ1NjQ2dyYTNMSENVUDQrNW5qbkxaREJyUmx1eVAzY1AwUC9lVFFwMFJpWm1lODhtSTYzVTluVTNTUUV3RE9MVXVEamMyOXNSMGFrWjNGeDR6cUZJM0cySVpDUVM0eXhBNEhkWXVNU3hlN2QyNnBqS0NZUGlBNnpGVnpEL05NaUwveXVEdDd6QlpmaGt5Q2pOMjJRVjEyV01jZTJOenB3UzZjTVl3dTZjN09PZFAzM3oxaFk3YUgvTk1Pem1nVUdNQjVGQk5jdXp0ZDN0YlhuR0VZY01TR3FoMWpCL3pzR05OOG5KSEQ2M2N5dzRFK2xqdmV6WWpuMTFCOWNGTWNTcjFja21IYmdDUmgxNXVla0VkcWRjMUNZbk02NDV0UEg4cWFDY3kxdVBYdE5KUkRMSGJ6Y2dMRnBSV3RobHVnU1J5ZThhanFlZGNHTEFnS0hpVkVYQUdrVzRPeWxPbmNHSXhQL1BrKzhkb25ZbWp6bWcyN2Z3V0hmbWZMSWVSY2ZoMXFic2pzZ3hpOHk1WlB2OE4zOVpmOWx3Vm1mNjhVc2J3aVQwcUZXVEF0cmE0RXVrTnhtQWU3NUMwVS82dHk5dENhbGhFdWFNNlg1Q093K2lKaXlHQ3cyY1VGM3dRemliQ1NJYjVDeDBWZ0p1R01GVWk2K2gwcFVFVWlVK1RnYWxmajdraStoVGZEWXZvdTV0SUNTYjM4UlNSOEdsMU1PNThtRWQ5eUtwOWFYdE5DRHNUQmdrUGltSTNUMVluNi9lZ3NZZTE4ekVCYkhtdXpDTzk3ZG9aT013U1FTUThNVXhoK1p1Q0xxK3BkdHBMYUlUNis5ZEFiTU93bnllMWxjU2NpTEkvUFdObEJnTFIxYUQ4akhZR3EzYTJsOW9MT2NBTlpDa2h0ZVljSzBkMy9ESDFxS0pycm14a3VaWkxBcFNEdFVETVhjRGJnRG5WRS9tYzBnYjV2SFFUZmRTc3JvWjRNN3F1Si9memJXajREa3JaSDJqdFlNU0RxdGppU29xc2NXb2thYWZGTCtFOGhFVVVnY0FlcFJNZUdVNmRiVzhKTWJpb3Z5aFRnNXRQVGtGZ1N2MUkvWk1NZTNiZEp6RE9zWHdFV2hwUEpHYTUrN2I4SWNtdStwY2VMY1ZTSDQwZzRjT2Z0NjNmVmo3dGQzdmFOUmdQWjlwUWljZlFVR0lQMWRwdnpWVnhBdDNTeklkRUM0V2hrNGwvUUVNelNkSUxaNzZ1NHFsNGExUnorMVFHZFo3bkFJalErakxoN2NjeFFqcnZRUFV5ajBqcmI2R0syMzBEck5DMnkvV25xSUNKdExGVVJBS2syQ1crUlIrWW13MUdjVDRNeWVKMFVab1J4K05SclFYT0Q3SWE0L3BpMUxyaVA3YkdVK1U3NkdVR0JlcG1KZGdVdXpBNkJZSFZRb3d0MEtGdVd6R2RjTmdvTUR2QlNtUTFEbVJ3MHJkTFpZVlIrSmJMRGFuWjlBMTF0SlNPUmdUWVd4R0RUU1luVGx3SnFJSXJxRGpGRFgvdjVmelBnNlZWYlpkTE1yaVNwVU9TVWVabFJ3Ujg5aFdMOVR4SnV6d0xYa2dQTEcrc2pCZnM2YUVuVGRxM1FDN2ZYdiswV1kwVzE0RHNkb1pSWFNCdzQzNkR2VVcvd2k3WE5PZzR5Vk9vVEJQTlJrNmk3eUJCZWhxN21lQ0tUeUVCSWgzZE9BMzZBaDFyeUtFcHpuNUJHRVpNNENzZzd6bmZCQkdjZkQyOHBGeks3U01ieStuVHJlVlMrcnR6ekdBSGNCd3d4aE4zcXNHODV1WkxkRWMvcWNXTnBhZ09pT0d0blVqMEQyeTNJSXdOY1JwUmVYUlVXVFl2YUYxZjlleVhQN0JPV3BWcGU4TjRxazF4OWtaTm03VVlhNlA3ZlRiU2NCWTdWczFRVU1qRE1yTXdFcXJDK042TXNGWGZNZlgxc2pJOWNEU0tYazVLazdjQVJRWUFuQ2Z3ZGJSckJpNWtjY1VlNS92SG9EZUM4Q2M3N2hqb0t5Y28wdEJ4cis3R0JMRWVLNEFtcjBTSndET2ZCR1IzUVlwM005YjZPaGJiL09hbG9JRXJlNWI0dFV4N0d1aERUSFhjTERaM3FyS1dRN3NnaVlTTVc0ekdlcjRNOUFVVXpRMSs4Vm5FL1ViMHV3Ty9kU2J6MitNZzZqMlo1c3lESS9Oa1Y5YVIyMDdsSnYwZXJpelpMTzZHa0FYNW1kTWZNT00xdUNpVStSbkZuTElsQ2l6a1Y4MjdLWmFqZ040L09meWhjNXIrZWZjQXcvZUxGUi9ER0s5MGFwRTM4TTM1WUR1Z2U4cnRhWDRmSDV4N1lpUnhMK2ZGaXBKTUxnTVVPYmFxNVFPeGJZOG91TDUvTTZmNUFENE1hcVdGOHA4YklGRnRESkFuR1JJNzdONk1kY2VScmVFNWNSY1B1Ly9EeWI1ZjFlWmFxOE1YUDhyazlabFRCNlZoSDVrK2NHY2M0THJJVkpxODNKaVA1Rkx0TGdzNTE4NE5McEpNRVdNR3J4OFJ1RFgxVHYwSW9GblplQVYxRDJldUF4a0YwVTVyby8yWm9vanNwN0tKeklwVklxSWJPSkhGR1c1ZHlKTXRPb2puTSt2OUIxdWkrWXpML05rdHpmaXFlM0UzN1hFNFp1YmZXcnJ5L2VDdTZwV0J5MS90RWdMOVRJeGZzMW51VVZwUGpzanQ0dXZRM3Q1aU0zeTJ1ejJyQm1MR295ZGNMOWt0UHZWRU0yM3NTbTMwNGw1RkZLRG00RVJvLzZKWmIyZVh3UU9LZEdqOXpJU2dPNk1DNGM4M0I3SFJ6bFpVd1lPTkhmamRza0dSK3V5OW9rNEd4V0FLQTVhN1JwREZ1dGUyWHRnQzVPNklleUxiT2czVDZneWJIcnkwdE05dkk2czQwSDdXOTVUVVh0NjFNdTl0WEVxNmZSa0gxMEJSWU9rK1AxUVIwVDk4cm1hbXNySXU2ZzhHS0lxendPRUI2MzRhWGpFSTlkdytRazNTV2FYNTExT1N6NmZLOTlFRDdmUXFwRTNybHcrUFh3YkNoSXdVMXVZa2JxWUErWGRsNlUzc1lIdjNzTzZwZVNaREZscURjaTFTUUZ0MHZXVXRFdE1oVHdLdzVLWDRDd0hINitpUUVhazc1MXhheFE4d29ZczhQU2tOVnNsN3hrdkNSM1Q1QVI4anZ6OFA3dnZ1Ny9NdldpL29HdGZreGwrbzVxeUhHWVFReWg3VFUzSzM4MTBDUEhZOW5ocEhyeXBNTWM1dzIrczVTRVE5SGdhWDA2RkVvQjBId1U3eVVoNXVlcy93MTVNekhiS0VuS0Myd3NDTVpWN3lyVUtjdFlJVC9EdXdLTmlnRUNqTlNDdzJwbnJsOEJicUFOaEtjc0VkaVR6c3haZWlWT2Job0ZnZVVQL3FOMjdLWDRKcDN4OU8xNFBvVTQ5SSt2TEhidytudkNWanV3K21NQ3R4Z20zUnl1c2QwdXloeTVkelJQYjEvMmtSN2lNd2llZzAzcHBURG5NZjdHOHFzeTNocU1kTW41cEwwcHpQT21DOXlBT1l0VUdLNlAybDZBTFVNUWhVV29HM3NrZ0VEMW9vT1k0bDNaS3Y0aC9tdkk3d1l3aTRNWk5va3IvSitYWGZHQlplTkxISUd5WGVXUk9vZGx1OS90UThyNVFiVndxdVozMEdRcklSVXVxOVhHWHh5blcyQ0pZT1hTME9TcnBYa2ZmbU9xZ1c2eVF3YUdoVGZvbHRCTEdweUZoeFBPbm9saGdyeFJidkJtRHRjT0UrMyttTDk4Q0IvS2tFWnFiK25oTmp6WWh3OGhmSXg5TCtjazlKcFd0MER2MHZsTFVhZ3dGdzdIb3pTclpjWE0welFtb2J2aUFqTnAxWWVxZ2s0S1FzTmNrbFZxZjVvQjh5NUM5d1plbUxNYUFESThpaEd4dkIxeERvaTR6VmJJWllVY0F0L0h6bzRKbnFlTXhsRm1mcEhHL2tXMUxwZlNZTHpNQzY0T1FBR01QejRvUllMODczZ2tSbXdJYU91LzduQndMTXhZZWZuUHJ0eWdvaFJTaHU4ME56VjlNRFFZMTFuUloxbVdmclRYR3IvRzZ5TW9IN0pidXU0UjNTRVp1RjdxVUhtUFhRdDhYKzhkOFNwZzN4Y2RWZ2pudEZ5UVhIMWt3RmRzWmdWajY5WDEwUkx3cHIzbEM2aVAzUjBQOVhKM2lSazBUNjYzSEZHdUVLaXNxcmhmWmoveTloeDYra20xM0NLa2orMkZKeFFPeXF1WE9EWFNsbVYvSlVsSytuQVJ1WkpJeWxPeXp1My9ZUXVZcmFCOXBVY3d3RWtlUFRaQUk3VjdBeHl6WHRkK3ZnWlpVZ1VnbUFjQXd3RkRUWmRHUlJVbE56NTZlc1RzNm5IOUFDWk40eERjbkdIZ0t1dk5zZE9oVDR0Vnd6MllzbW5wTy9waThhOUtHbkkzTldJQlNlSXVWYlhPZEN6VVdzSTJGQlFSSlhjVTh4Umc2UTFCampQVGxrQmJ2cDV5eFFRLzRCM3htZUE5Y2lGYm1uQ2ZlS0E2bFFNQlVSV2t5amkvcGJrM0dmREhTQmw3R29KMFZPOCtpdlZEbVJNRGdhbkRveFJ1OE9abXpsSmd3MmtlY1Jtb2VNa1NBRVgxTThjRGs2Zi9ISHJrSkFPbTFtZ2VUZWFhYWpJWEd5aWtOaG9vNm8wblFRTTU3UzNLcjNlaC9ncFp4MVhGZmVyejFUWDdWUEowUWljNG95REpnTzZObFNMUXhodzdwMGtpb25qMFQveUxjN25RNkRZVk92Vk16a3ozUGt4NUZsMEJFd1FtM3NJVkxjcDFuWExrczJiMjI1ZnVjVll1aERSNkZ1Zm8xUVlQQWw2ejhocDFmaExGdUwxRjRBWkhaVG1YRWNiemhxRVNEZkFKcGd1N00xVEV3ZHJxTkc2My9vS0UwWUtyTEZqdDB2NXEyM1FsRTkvdkhFb284MHhHNTdObnFsWTcwNTFDeEtmSHkzSGY4L2VVV1NRUEVoRy9wYTh4NUk3SnErSm1zQWovVFFxaklocWk5YjczMG5jZU1tMTExbTQ5QmRXRWtjSTRqaEpoa1VPc0pRUjg3VnFXWlV6cElaODlUNitPSVNMT0RzUlk4ZysxVWh4eGsxM1l2SzJSb3BuYnhxRDlSbTJ0a3ZnSXJvTVErRHAxTnlCNDdHYzZmZXhqcUVPVTAyYkQ4WWEySGVocFVhTTZqY2JyQXRnVC93aExhVnpQRHd0YmdaNHE2ZjlrUnVwM2lNREl2bUZiRktmYVdPMlYwZURkbVBWM0k2S09UVzIzOGoyRmVLb1lKWFRBVGFaUUo5UDl5VXVnV2wwQW5qLzQzNDI1QlBraXNrLzJnK0tPNk9kQ2o5WFdRUmIzWGM3YytxV1FsV3NDbjQ5WlJsTUJ3U1lhS0FZQy9BWVVXOExBcGh5c2hLWVNOVmhqNGJwRWR2dGN3c1BuallmbS9ielJCc3FWeG1YMHlVYnRPazZDeTdOZElVMEg1ODZtdEhOdmhLcHljQ1I3Ylk4OWtPaTREU3UvQUExSzIxYkF2NElpbkdYUkFkVExudGpyTjFvbWJsYU5OenRtWjk5Sjk3bmxQN0FzeVpUNkJFaW55Q2gzb2V5ejduRmh0M2d0TVNpMUw3NEpqZjRNcStNMVNyNmh2U0luZmhWRm5hSHZWK043cTA1WFVycFFpSU1UZlFXTElDRVZXMVJZWHZXUWZPUlBUbWt1aWl0bHlaRFFWS0ZhK3l1S2QxSVVyNXl6bXBtZnRsbFRKSHMwMEZnY04vSEU3TEU4UkRPeFpkcEs3SlYyclRqQ0Zzd241OU5UeXR3dzdaT1hoR0dvVWtSQWE5QkYvSktJS0tlVGUwRnY4bE9lSkU2ZW5RQjRlbHdTempMQmpObFREZGhlcWE4dkZlbklXZ3diSWNBbUNIVUVhWXZkUkNVK2hwMng3NkR1YzY0N0NndHRmanFzZjdmT1FleGRRSm9ub3V4MEZpOFV6SEtUZTZJTzJBcXNnc0J3R1JsejRhQVUvbEtMbnRIMHN2MWtETE5LckZkTEErQTJ1NjA4UFo4U3l2VVh6bXVXWHZIVDVjWVFheUhmVm1keHJwa05MMzBNNEF1dlNOUTV5V1djaTJ3SnlOWDBaRXpJSm5wQnZYd1NIMGZzcisvdmpiaWRuam0xNzNuWWFaSkFLUkY3cDBoQlgzSUlKeVpDSFJYZUp3SWVrZ2h4R3ZXMWI1OEw1QmdaSmRPMDBiYnlhZlI3RUxyOWZITVl1Z2xNS2lVZXU1anFseWRqNXIvWjJpNkhnWE40bDJyOWx2ZDdrOEJPVWFkRVh1SkVFazFOVU1zN2g2bm0vTnplQWhLWUhLejZoNmJybk00OXdLOWU1SndMYWlWdGFUZS8vRFNxSmx5YkVTeU1LL1pYMHcxNFpWMVRCcG1VRGlFNFo4UzZpcGQ5MTg1OURicWVhZEo0cHJwcitFbWswUGwyaXhTUTJGTTYzT0MrOXppWjVmdlN5a2hYVWx2VitHdDN4bFFkZGpWVjVSZFlFZ3B0cmY4cVJrcnk5ZVN0Z0hLdWVsUmZST1NRSjV0a0E2ejFFSmwxSVRBcU1Ma2xBN1lzMnpqNmN4S2lpcWFBN2swWHNnbjlFNjIxMFhsZU41SG9JZ1BBOHhUbVZHQkt1Q0dTNTl2K25lMjNmSytZTE56RmkrT1JqNVVjYTJndnVac3BzMjJSTnRmR0diekl0US9VSEhwSFR5c1pzUmQ2emlEQW5XTXJybGpkV0cwZTRXeHl0YjNab3J1NTZ5UEhNZEdHNEc3R0ZuWGVudUF6MjVEeDdXZFhKT1pEK29abHlhS2VqVThBRzdhYVRNajEwZHJTY2lxWU1GMjFTNFdIak1MSWtPei9hS1JST2pnL3NoSHRaeEFPQ1pnak5wUnBHNEZDWnBUdEhLTWdrYXIwSVVqdEs1ZDVUYi9UOWVFZzBCcFd4WklzTmRCdWFRNFRXQXBkWktESCt2WWc0b05Ud1Ewb21GWkltVmNkN3VURFN4UmNncFRlR1pTcEJPSXhlU2VOZzBmd0hBMUQ2U1huTXhDT3JLNkg2bm9EMXhCOWVtbjcxbDJyVWwyZ3BMcUovdDRBbmFpbm03eFhQb0h2VHNjNE9uTDkzTU04SVNXSnRvTlIvUkNWK2Qzb1diamh4dGY3T1Q1c24yZmR5bXRDUVcySDVPN2tjNlBWQU5Hc0M5cUNkVmV1ajgvVWVNZEk4NWJpUm5heUl5UXJzZ3lRQlZtbGJNYW9ZK2YxYzErZVgxS1RRUk9aZFVwc3BNZkQ4L050WmNKZzZjcmlEY0NZUzZQVFhkUHZwTEJIalFUd3lQWUFXZFFPQzZIMGhDeWlmcGF1ZmNRN1RjUDZDSzU5UGZ5SE9XV1pxODlscDlIYVZZTTNKdEdsQ21OM2pGMzFzWG5Ydk5iVlZmTGJWRndzanhvQjkvRktPRWhlNWtHK2wxRDMrQlYrdEVYUm1ncVR3LzkzeEgvcGllckVkWURFQUtrSlh1SGo4Q21yUVU2U09ZK1ltV1NIVHh6THZ5bndST0g4d2pIaWIrL1RXbTdtZVVPR29yd05NWFpvQWd3VERLMHhpZUg3ZEcwUmxuMmFPcGwrWmx3RGszZ01NQlJ1YWtscVVUS04vSW5HR1BHSWJFNm9zV0NQTUNzRVJWUTJtZ3pRMHlIOEl5c2hvQnNLL2NRa1BnYXQ3cEdjQmZXbm5GV29TekJlOXJ2ZUl0NCtmcU1rWldEZHZ6UkZxZ2hoaEJIL0RQeEhvbC94MDRSenVUTm1yMGUxcmtTbHJzeXdkbnU3cThlVmVBVDc5YVlGdWtoV05EOHQ5UTFRNXJQa0MwK0VrQjFXTnlrSGVtL29qdGw1Z3d4elV5czJuZUUzbkRmWU00cHgzMnI0M3BpRzU5QUc2RW1mQkpndllvYWZ2aFJHbkVlQ05GRFIvTzliT0IycWZ5VnltTVZzenNJSnZwcHAzR1oyOWJmKzR1TDFRaitxcUZ4VGxhNXloaDlvYVMvMFcxOFVMQkhrK2NTOGJTRlUvazZwbFg0d1NTTjlMQ2IwTFZ2Z3Nya2syQXdVQW9WK2VCcWliNnI1NThPbnNmQmNWMzNPVlMyazlnNzRHOE1uWTBzaVlESVBoeW11bzJvZkRoUmdjd1BTZFJPTVpIdGtFbXNZcDhKaTA2VUVKNjc4SkJFWXJFNHVDOEJtc0ZDdm1RV2doWjFQSm9sSGw3eU5HeTBmbHRkeFNSWUtMUjh0YTRmQTNDNUd0S0xra01VNDlFWjJGWjRXekhuUWdqWlJ6SjhVVnFFRElOZXlCcGh1bFo5OS95N0pRN3gxYnp2ZTlqdWNla3I1RjJmdkJwWmZNa0YwVXFUZTdDblg4RXJBK1dXRlRFK252VlM0YWhGc0cyb1BNUE91V0NEQW44Q2VVVGd2MUFxcUE0ZGpieWgzTFRiY2J3c05YSUQrVmVuOEpLVEQ2MmN4VmhieEdZZ1ozMi9rcDk0cUlwVUdtdHdLUFc1c0F4YXdYa1VMVlozSVBZMkp3SzhOeUVsL3pxVS8yZTByUndhNTl4TDFWRW13NHZxZFBORi8wTHdOZnd2VU54bXQ0dm5oQmk3OEJGbFZXUmdPcTRacUJwcjZRWFVCYkRZSVJ0UFk3enVaQTl1eTdMZjRKWUliS2V2WEFkZzIvM0JHTzR3dUdpR2lqTGpzNklKTUpDL3hwazd2ZjN2ZTJLbGhjeE5NSzBzdi9GaHlqK3A3L1VqcStGUjVLbThGY0VxSloydFpKMm5vek9Mc0hWZWs1MStKSjQxS3loQ29yaUYvTmszMnI1Wkp0aG94NWNVamhXTTBQWG9qRXZBcHB5VldGM056Mm52ZkcrcWFQYldoWEowL2dYcXk2eHFRaDhYNDk5VDBNbzQ5TUpQM0xyRkNqalFaMkppazZ6MzdSdStpY3pOTTdlSHRVTWkrbzVURjlNeDBUNS9LZUNQTGVZK0tRMHhRc05IdmJHWFRpM3dmU2ZhR3RTU2VrSm4xV0FoTVo4Y05NRXdUUXdlK3BrSUF1MVJSbS9selNFbTdxdjhzazhxeVQrRW9WTC93dVd4T21pQk5xZTV3MVRFSEdtK2p0Nzc5bTJJRXQ1ak9YMHNINmJSYUZZVVZkZUpjZjhrc21pS3VCMjV4Q0FlaW5XaUtlMlZUeXdKcVF1QktJeS8wT2JPVFdtTGlMcXh2VlF1dE1vOTAwKzEvR2VBOUl6cUUrbG5YVkdWR1kxYWEvM2Mrak8vZjU4Sjk0ZFk3RU50Y1dLWklYSHdybU1KYVZvbDhzZEhNeGpYRm1MdWtnREErNVJ6NTlnZmNicW9QYjJaQ1RlZkU2UStGZkVQWlkwaDVjeW1kODIzN01ycnVnVXdmUTNrNnp2NytlS1A1UVZyZmtIVmU2MkhNeTcyUEV0RXVpQ2ZLUGZiT0VBcy92ZnRJS0xwYVJlZzluOU50TTFHcFEydXNkU1dodVNlMDRXcnY2UjFEV3VWU2NkellENnFQeGFYUlIwWXJMLzlPU2tBRDRIcnVJL1JDSXVFVFBlZ0ZnU0hNUFlkclhUK1RZWjhBSWdhY0Z5NHR0dTYxWUpud202SGJVbE4zKzFOZGJTbnhoUitwZUNFY3YrRHFiSW1TM2o3RTk0TGhBeWgrU1EzV01Ndnh2bmJDbUM0dXJpcWRKWmkxNnVlbFVocEhqNVpoWi9qdHA0VW9vRnZ6UXp3R3JTeTFSc2d1MHdkcGp1T29iQ0orWENneFVjWmdDOTZVY09yQUpkcmMxMkpDekRqUXdza0plMS9XcjJvTTEyYlRzLzl3YXFsZ1dUcVlUa1I0dHgydmU2dHA4Rk5URXNVeGp5QVlpVHRvZzB0SXJXNU1OQnhFNGZPNXY3OGh6dFd1d3hLamkzU3BuQTBVWkRvYVpzQU9ocDlSNWkxSUlrUUF3UjNTVlg5Q1lVdkdCYzJqSDJ4Z2xYQ3RjM3F6cVVwbFAvRVRudFYzamlBOENhYWlJQ2h2enpma2R3MVZsNkFoYVk3Qm1TclNSQlIvMlJWb1lYSmd1czBxRXlQa3V5OXJtcWdYWGNoS05VS2cyaDQ3cU9kZm1ad3N0c0lMRlNNN2NTaVc2ak5aMXlUNUFpNVpra0dhWDZDYXJpckx6WElEcyt0aUtpMW9NS3BEYnhmTC8zWnFFR3luZDVUZDhueUZQM1dFd0wzQWFubGVzUm9nSnB0V1pZc0xRekNFS1B1djVxNDcrcjNJQWRvTmszV2EwWmpKRnd6amJjR3hsTDFpdEdweTRDRS82aHppWW9mVkZNUkdLSlNuRHdHeG1RMm41VlNRY2RHNUE5YUdWZVhGK0ROZmhMa29hUW9IQURUUE5JcFZ0WXVMNzRRUldPVDZwSFV0QTY5U200N1BUaXd4TEdTOVN6RGJoVVJWWVBHaUo0VDZGdy9pUkFPNXdlV3QrTjM3c0VGWjZQY0RhcHA5NmNLWjcyd0JxTWJVZXRMQWRGeEUwNjhOYWQxNERKUFdCTXNPYWVzOHhvK21ybXFKV0pTcU1BcUhVT21qc2JwRXgzODNwN25kK0NqcHlGNDhpamFDNmJNaFhqTGNKL0pYQllMYmhJQWpiREpwb0JtbzV6SnQxUk81Q3FBYWhVbzB2VkJxdlA0N1NZaWZJZEdjZG8ycFlaQXdqczUzL243bDNzTnY5WHVOUElZWlY1bWYvU3p0NldndkNXNlBFM1ZHVDNJYnh4ZTQrYVNLSDYxRnRqQ3RPSjBycUlJUHVpUkF0U1QyWlZoMm1GTmMxWTZ4bmo1NjV1NGlYUkw2L0ZTQzBXc3krY3VWYWJhVkNyMHVaTldybVdja1hHUFgyTEpuZWJBaGM4K25aaFdnTzZjcTVTS1dhZktUVXAyT3QxTTFHTHgxUnpLYVdUbmxhMkFiZ01kL2FVTFdXbmpKL3duOE5WdDVEMnZoK2wzQmRIMEVTNjJZWkthVmJvWlBSZ3R1QTVrV29nWWtEanJ1RUFjNElLSXpRYWt2M1l0YnF0Z2QvMVBoT0lsRGdDUEp2ZG16UkNPU1lzV2FTQ3J4bDQvZHRZZ0ErUFFPQ3BmSWpzbWptR01Uc2pCU1hvczhBT2ZlQUsrc0RrdUNRR09KOXE2M2dtb09ENjNDbEZYMXozaExyaS84dkRjRFdQaStYQ292aUk3cEFMR3dzM1dCd0FtdE1FcHZDdzg0aytTRkpPb2hGa25rUExwMm9pRnZ3Y0FkeTkvOGl3eWEvS1ZnZEcvc1A2ejFIbWc1eDB2SmRkcndhVXVtcDg2NEJhWFMxcHpvTE4vYytLUGwyRWtoeFh0ZnBYWCt2RzkzNG9TVmhBMEN0RzBDY2pvdGJEWjhuclM5RWJUdHdZRGdZQWFGUG5mbTZPQU1EUSt3NTdEeUt5UXI0RkJkMWxJV1RjYkhleitiL29WRisxNHRHSmxocjREbE9VOW5uUjdTZ3pxV1FnclhuNGdKdllEdzBRNjczOHRCY0plUk1qQ1pBOHJhUlJHWmFJSCtNKzFlcllKcFprVDY5YVJzWXltK3dWRm5zdUtPem9xcGRJaGFPR250ZlM3aTM3anNCS2E5WEtkRjVoTmpINmp2eHZWdG1EU0tKbDdrMWhHd0hQa0VTNExVV2Zic1B6K09HU1VwWWx3aGdiSmZnc0N4OEpKeGtkaUVVZzRYbmlZL290MkpxQWxGWTVoYk04RUxZalFjL0IxdVVNNlNaWlJ3cThEYUk4VkZVNlQ1YzVhNUdIYlQyZ3JSZnBZNXJ6MUlxTmVJVmxyaGh2dWxaeldaVjZQR3l5MFAzaTczMzhobWNqQkp0ODRlbEQ2UDRXL1lIUFIvOHdyMWYybkdHaS82ejBCczZwZlFwOStsZW11Q0R1c3dHNmNCZU50UGczbDNaZTl0b2tMSkE4c2R4NXZqelJrMEkzRU5lTWs4Und3YVVQRkxkWE9tSVcvak1nVVorMCtUUGV2bTZXcGM1WCthWU11QkpnVzRQcDRBbmZYZmwzN3h0TXhRWkhUeituRFJKZEx4VG16UytCclE2aUxCRTRaelh5NHlqN3l5SThVY0JNRFhkYjY4OGtoOXVORm4rRGYyWXN2OFBuclR2ekFXdno0dHBEcjJtdGIxVmlpTmNGTlFKdmoybFBCNXJQd3VQendsVVNnem1GNjVoT2t6UHk3bmlNb1p1SXorMWtJRjI2dG1nb2ZuZ1V5ek4vbVRDNUIzNXlqeThFS1MzWG9jZW9Vc0pvQTNqQWt2ZVB2T1FZc25qakdYdys4TndKTGM0QzVtZTRZa0lzRU9kbFVpd1l1WmtaN0hnU1QvVmJvMEhGTnBrL0UxZi9CRW42Mmh3NUUrZ0h0eFpjMWhZSURWSmlHRGhrdjQyenkxUStKT2tCa1g2UzBiZk5UZUR1dDkwNCtVOVl4Y2x4TzZmR09SRGxacEVZR2pQUXU1QUhQZDNEU0pNVnhyUmkwbHNtZm0zTEJuM3h1RmZZc2NjZUxIZ2R2SE1PZWRLRW9HMU9HVjRjd0JlVmJtUnk4MndxbkFmdWhYUGxYM05lZ29mYkhac0VQeHpnT1dFYThldlZFSkdGZmpaVW9LNWU1Q0dwSlJEN3NZdTk4TTFIOG4rN1huUktGSHltamdTaFU2enBkcmQwb2dYZmtyd0p1QU5uUlBWSHNjTG9yNE9jcmVvdDlGTFh3QmljTmU3dmtCQjZibmNnZmlJaHliWDA4K3ptS2xIYUtUU1FjN1Jjb0VZcXc3UG81cjEySmZmTndoRUQ3L0JKNzhVZXZtWmpwYTBiS3hETEwxanFqRk9lRE55VXlRNE5nOXRWMVdCMldKYU5lRkhaaGU3dUU1YlNsUUtxazgvaTBLSlY2d3Jpd1hWeDBsdDBYY1hSMnpXRVlQNSt2QkJIMkVic2FNMTZGWmlOelprOCszMVJCODJrZFdYQ0prbzlRa3JPUitjNjV1Uzc4NDNkL2RFVkRoYitXS29wMk5MUFBzUmJXcGZMczBCTkwxMWJnNTduaTB4bEo1blM5QTd0eUNKNlB1N0VsSkVPbXFQZkt2Q1RGeGFLK1RjV0pwZHNXRWQ3U1VDWVZSZzQxdE14RjF4MzZjcmR4bWcyUFlCenlVQkF1UHpDWDR3SjdzN3ZYMDhiV3RNdDVMMEpMQWp6Z0t6a1Y1NFBSdjNib3ZsaEZqR1VFRE81MHNrWmxtYkR3czB4UURaWWk3Wlo2YytISDEwVVQ5NVQzcHp5eTdVc0dSOXJ2VEszSlVOeU1ZMVMvZHpZcDVmRkJPR3BKUVl1TmlwWXhHL1hkNlZkaHBuMzZ6WENFZlNDb2ZJeVNuU3FDODUxRGd3MnlKOENhVGM2Sk4yWEtjTkdTcUlLcFdTc1hZNGhqdmZ1REpxQmFKdUZuVzEvQjFBZVFuVEYzbU8za0VpT09aYUU5RkRpZGozaDB3RXgvYXJ1L1MzV3dBS2Rtb096SWdMWWVqVWlocW9jL1AzWEZONnJCUkV0RlA0cXk4RGVBcWVUNVRPaitOM29Ed0pwQTNsV2dwQ0V5SHNnaW5MdEVpM3JpOVVNYTVKNCtTSktPd29DU09ISjJFRFJBNlFMR0g1RGgraWI4VDdEWGlrTUZmcHMzOHFlSThTREZVV1dsU0lJa1lnaWMwemJkU1l1Q3FxRjVTTWZJU2U2UU9wZnlTOEdYWG5sYU05cEEwMkYrV2JBMGJJYUZheVVqZDF0M25LODk1Uis0ZmZTYzUvdmF3dFREVzcxdlZxQnY3S2hWMi9qNlRSR0NMMkYrNTRWT0c5bjBIUkpNVlFoK3dwOUhmZ1FvSy9PbEFSUTlmUHlPa1ZnNWV0TE0wMWZMWk5KeGFmOGl5dGZwT294aXlSOE90RDROaFFNM2EwaUhlc1BaQXhsMEdIbzg1S3pYeUtrZ2FMOGM1SlBWRHZrWFMxVHpMVG9tTVBRRkl0a25PWGovYUxkTGIxeDAxdjRaekp1SWlMR2MyejlsWnZHczJGRmdBVDluWG9zVzVBNWptd2VIclpQaHVBUVphWTNtaC9kaDZoaU0vSFE2cHpHcE03RHdKdU5GbVRaQUFEdVpBS3ovYmpCVm8xR2IraTBkVFpYY0E3OEkrVWVkc3dvRGhIMmhXeHVqZVNkZHNYVVprR214L3dIQ1VieUcybFp4Tmp4STAyVVM3bGZ3eEUrekJaOFc3UXVBb094dkVWSm9BYlY0dllEb0trRG9yWDBHYk9zOVhxZUNIYXhIclN6SGQzeEVlbEtDZ1FDNkZoWjIxR0dQZ2tWUEtxd2pnYjNmNHFUN3ZxejFiRFNIbDY2dUgrQVBaT3lxRTUxenhtSzR3dGVaTWQ4Rk1jZTZ2eUowYTZmeWg5LzBLQW1iNHMyZitkVWVmQ3VKbnhwZ0ZML1RnY2tkT0FxaStGeUNGS3BmU2lJalQ4MFVpdGI0ejlKdXpaQnFMYlRtd05XZUcrelFzelA1S1FPTldhN1NtQjhkV3pobEl5bVp5VGFEdUpta0k5MTFFUmF1TnMzdHdvYkFrd0p3WkJ1Mys3SFV1MzUyNzBGeDZ1cU15clNITVV6SmNNcEl5Nm5oMmszb3RHNEN2RVEyeVNyYXN4RGExS3RqZWUweEc1bUE5bnBzRlJXajR3dTNMRFE5RkYrR3RxSWZVVUFaNGdRVDZRTm82cG00Wi93dit1UGZ3VlUrVk1zYytSYWZabkpNdkpTeWpGQjFRUXFzSFRWT3BYdkRvYlZkbVZSenFGOVZENGhWL3cwcWIvZFh4ZUkwWDVaNE1WTUNqRlp2am53VnNyOGl4SWFiaEIwZVp4RUk2QTdST09zVXZYMUNUeHc4Q1ZVVXJzN2QwOURGb1J6aldhT2VOZU9FVC9PeC9yKzdqZzFJTVVSRWlsT2hyQVZYMkhqWWUyVlp0YVZGaDdUM3VlMVRLQmRVdFFKMm1wZlZEdHg2UGcvSGpuL3J0Q0NsbzRhNHVJSXhJYjBFWDdqOXB2QWhydU96MWJ3Z0Foem1pV3pWTWViVUhaamU5c0QzMFg2Qk14RUhvbG5qdnA2eFBJSS9QaDVEekxydmYrOFJ1M3JPa3NpdDBoeGY4UzBhVzVxc3I3U3pMd2FiR25YTWpEc2JCeVJ1REgxd1NoQXVOT1pTUk1RM2NVS1FOemExT2h1WEMxUE9QR1RjaWs0NTBGTmZ6STloY042R3RzTERSQWFoVGFvK3JLRm1XUERQcDdvM0d6SUhGNVU3NHhzMGJoYThWUjhBVXR5Mkozdm10dkdHVUoyYTIrSWgreUpoRzFYaHJHd2RaaXRPMFNJVWcxL2krRTBvR2dXdG9lUUJIL2FHeXdQY0pBZWkvY0R0TkZST3hyMlNzM3dXUVIxZUlQV1BjTXFlMDBobEM2bEFtWjZnZldQVmpQSzVLdXAxVElCV1hWeHpQYXBwZmdDSlQrdWdiN283SUVCRy92ajFtb1JpSUdmYytRaURRMElab21zZHExdFVIYXg5eVIvV3Z6YlNhQlhVendNRSt5N0Jpdk5KTFE2NWZlWlNwMXFyY2Y0N01JSlUvN2RCY0Zib3FWQUpYZjNBNHJ1enA2aWFoV3BHd3g4MWhpUm9rN0s4c3UwK2hFNnBWaTJ3TGo2d09SNDdoM2FObENpUm9IcmZlUmltbHVQOWhNNktkWGdkUStqVmF4anlRK2VwN0c5b3hNSG5VcVltV3E5a2YzVDQ0SnN1aVNReTQxYUZGSVYzVUptMDZOTTZsTFoxdDhMRWtINU5KK1pUS2JVa0lrZG9TNk8yWVB0Y2N4YXZoelFrS1B6N3VGcFdwd3hFMTJPMmcrUkpZcnJXTWZTU1hrOHpFZjBEMmlDNFJvRWh1cmY1TURPd2ZndlJwZUFtYk5rZUZQR0M4SmVPRng4bkx1U0VqaTRYWGcvMFFrdHV1Q21IT0pNZVh6RTlrejQraWxGVkl4bWZWbm9GZWpOV1JZcnBPYThWZHhBWjFKanBpRHhCWnBVODdDeXUxNzNJWURUTFQranhSUHpTY2l2STltVVIrbmV5TUNhcWhEd3c0QlJtU2N1M2dFUVd1TXQ4eVBhbFV4ZVJwQ2k3N2pBaUJ4L2ZNVjFYdUxUMlBaSHhJbDkxMUdQV29QeHhIVFVHTXRVN2NyamlwZTJrMHR2bWpHUm96L1UrVDV0N293L1h5OVE0dEg5U2Q2ajhkVDZ2OThWVmVsaEhkejNZdGtHVjk3bE1YOEtPSzF2Mk92NSszak16RmZqTWRyaXdLbTFWbWdTYmhLUkl5anBjOUlUZXdMWG01bkk3dXVrOExneUF4SEZScGxHOGN4NDFrRUh3c1BqTHlhUXRlcjVGOTBEbzF5Mi9wblRWMGxNd3V2eFphV0tTdFpCNEYvWUNZYTljS1dQdHdqNERqQ2J4eExkeFplWjZ2SUx4WGZhSjV1WmhBMndUdjQzVUpKQUU3eG1teEM0dzhSUkNSb3UxaFVaeHJsUHVFYk4zS2JMbEZvZW1ZU0hFTmhySUhyeFhZRjIzcjcvOWxhcDNCMndNeFdadTM3cEFDMTRSYWo1aEYzN3NOVjF3M25MLzRPNURJUXlHRDJUN2ZROGZmN2dDTmlYY2ZySm11V2Z2aGhCVXNmbFU1UXBIaXR5WGE1c24zK3l0aGJGbGxuYjZSYWw4V3RSSDFFSEpSbGpjTHdDazl3ZEpFVnBxM0VLVDNhNDFyR1phNHE2ZTV4MFRMNW96V3lFRU9QTmpWL3RieFh3ak5Rb1B4MmxqRFRTNXlORktqVUZycW8zQVJqd3dzaUdzcEpVWmIzTnh4dlkyODVwQzhMaGpDUWRTeElYV1RRdmRVU256NENUNllWRkdFVFNLWC9VYVA1S0RQczVLR3lIcnpsb0dhY1dJd0FzYU5jMGhUaGR2WWx1OWd6QjY4TENIUU82b3h0S3JrYW5ZOUVoK1RKbk5ybDJBVnVWUEVlczAzNnpXN2EvUGFUcU5zdy9IakY0THdtS0dSMTFYR3dReEs2cU1aVmJpTDgvVTd5RVFYbXZCMjc5aENERmJZdkM0ZGRlTjQxd1dTL0xIb1Qwai9NRjNFR01VN0pCeE4xajZLMS9wL3JtU3c2VjloTDBOeG56MCtmaFlXQlhyVHR5QjhSMGZEMU4wTlBjU3lFNGpaVjk0NS9YUVZSTGQyOHR1Vms2eEUxSG0xd1pVUHkzWUtZOWtRRDJKdTdId0lZK0NpYWkrdTJaRzNiWFZ4WWw0Vnk0K1VYUFdaVE1XTFpGK3NRYXUrem9WaUJIM0xuVFJoK2dGUUxBNUdObmhrYnNxbU03OGNKeXQyTWdaS3JsUXVOMkRMeXFuT3FVU1JnMnJIOUFDMG5OR3FLWDhERHc2b1g4UWd1a2orSVdBMk84dytBeWxQNmNjbjkzWU4zeVczUWJxSTZGbmZzVjBOME43ZXJlaGRaU2xNdnZDVkY0LzlObGJCaG9xMzc4bjdINEtaS1ZWTkdQZWY3SDhHcEFCa2VXbmFCNmVrYTBjUUZvK1JTZ01yKytYQWhkdzJWZnZQZlA2a3BDSlpReGZYRW4xS2dMK0dEbEkxK2xxTGQ5bGVsaHU2cXQ5NHhzUXRDQmw3UkFkdGVrM2hHbjNHWUtkc3lWVXRreDVFaFJGWFYwQ2E3VlBTU0pVWEhlUG84Z1BjMFVTaC9RZmJHS3BCY29aTmRLMGNaN2s5bjU4Ukg5KzJTWUZVMWRrVmx0eUVxLzJ1T21zZHFRdEMrVE03UWxFcW00KzhzSWMxdkExamppdkpBNlVFMUF4TnlGVWVDa3hYOWZvQlhHWDJEYktQUWdIaXZCVXFJTWRSSUh1dUpwVlFSTlpnY01BM1pLaHFlNnQ3NWxvZHM5YTJRc2U1SFVrSmNmWTJvSE9xYnlkeTg4MHdERFlncXNlRWpHVVBHRXlyQzF6K1pxMTl1ZnhsSFlLRnZZRjZSMHlKeFovUjZ3U3JIYyt5bUlxMzZQUkFYNnVNbEZQZDVxM3lReEhVVlBnNFJMSFN4anR5RG96UlM3bXRUWkRMN1pjampvdGhHUVJ0bUZkbjFUamMwV0JjN0o0ZUFQbDN4cVZ5RG9zUTR1bGx3M050bWhPVHV1d044RjBpbnl0dFpvMEx5Um9tRzhEZU1WR2hlQlV4dVZKYUhBS1ZwKzc0eXg1SnBZT09kaENMb3Nac0JaRzVhS2E4VEwwNE1GRDF6ZEhPak9zMXlpZU5HWkpXV1RWcXRtMmpSTTFXeGZpbWdEejRTcHRMQ1hxemxhWityRHBZeWtPTmZhbTdNMi84S0U4c3NxWEkrWklZNy9QZGQ4WHVhcnhOMEExaTRrZWRLZnhUSy9MMjRXOWNBd3pIWWxUS2ZJWVlleFRUNmFyUkFtQzF1Y1lDWWtxczkrb3cxWmNKYzhMU1VBQXJiMEFpYjZRRWdyWWlSbE5zR0lTMXBpbzhwdnhaTVZoZDRQSy9wOWpjY3pIUVpQWUpzTkdrclVwTWdybWZvcjRZaTE0OEd4OE40SkptRTE2K0k4ZWxHU0lFQ3FjckRMZmNGWlUvWlY1VDRyU0FHQ0lKd3VDK29iVDBBbUpUaW5yd2p3Y1ZDK2NpaEhpYzMvc1ZLZFY0SUY2ZUNDTEsycG9ZNWJDLzYyR2IyTlpDbDNnQ1ZnUUN6MlNPL2x0ZCs3aUFGV2VlL216dmI0R1luRnFrTkNrOFlMOHc4L2Rqck1nMkZab3llYWwzb25lK1M4MWUwY0VnQmZlV3dIY28yMHFhSE1RYmNPS3JEbTI5TGZNVGJvSDUzUDBhRW03aEhpazR5bmJ5UEhIdys1WnJkMGEyZEtvSUhKZmkrbis4eFErblNxNGJRb2krUjZ0b2pHWlFqY29GVXhTeFFPendRVEpIM1dOZWZ2aTJwdEdOajYwUHFaS3BGMHhRQ0I3VUhFeVFrb0lYM2VZbXRUc09uRUVPQWRONmYrdEszMDg4TVZ6TGFkdkJTbFZtdFVENzJKbnY1VWNVR0dMQThQaDBtMlo4T1NEdjU0RUEvMUpqbGorZnBacVl2ZnI4Wms3RUE2alMrR0R0bDN4MHZBNzBJQTAva2hib0ZLUlNWMUo1ZllmMTV2NGFEV1VjWTN0VHRudkF1dDJQbmJUWVU3azFvazYwU3hoaC9pMzdJUnR2aEd0bzdsQ09aeDM4eHc4N2FCOEJ5b1hlcEV1dEdlNkcxcDhvdHZPZFZ2WGZibTdacG5QcUFxbXIrS3UrRW5mSW9vaGtMOGdGQmlIcmxUOGZvMGo4M1gyOU9TSmV2bnBYNXFXQjEydDhWbmFNaHJzRVIzZTJLaytXelU2SVYrcGxka0c0RW1obEdzY1d2QW9FQXYyZStUeHEvRm5tUzZ6UmIxMndrUXBMblRhZlhsM0d4YnQyS0xFRzdmUGRrOExxalNYS09nZU84TmxpenhIdzdsSXg4ZXJDd0dYbGhoS1BPUVIreHpyM09tRVQwNFo4TWdUT0xHbHN3QVRCYkp6WmZQZTM5TXRLQUFnaVFUbzNmMUZHd3RURzlTc0loVlIycnBsK0dxZWVCWHBJbUR1V0pSZGFUU1A1aXdQekIzSXFwN2tVbWtTWjNvOXA0TkpzN2pUako5Q3lSYkNSL2NSTXdVd1RMbFNvcUNGVzVLc05oS2tzVzhGQ3ZhZTNadXZDMmtES09uL3FNMnBqVmFBVWRBVXljT0sxWnlXdTBEdERNa0pBKzJRZ1hwckNXRFpGOWZqRThGRU02T25SODJrZXRBUHdmWkNvakNpQWk4SUFPSmZYTnl4STlWc1NGZERySmVzcDVWTG5hN1hJS05FQ2tqaCtNMkl1VGZRdWUzTmgveUFCNTJwVllHVkcxaU1UdGE0eFVzVXBJMFNnYmtDVHJ2Ykhjd3U4bWVmekRFWXJaaEZJelhna0dnYUprM0NRYTFncjNmOW9Fa2lHVnM1THdRODNhK0d0TUFzNUhVSm9QdDdNQmd3RmFiUDdaOHRZRlcvU25Eb3F3b3pRNWYxdStoN1JNbzBpNXppT2hmYmg4YlpZWVc5cm9Wc1ZQakxNbFZoekQrUjl1VDh1M1hFZUhHUGpCai9Lejk1eEh0b0Z1WDcvWU5VeDNrVElLM2htVkgwcUJaT2pZbWpaKzhadmFmQnBGUTBkdnJqOVdOa3p0YUo5QVNoMWJjM0w3Q2xWTEs3R0RPSDJlaGNMZ3pDaE5sRTZNeUJZZStCbXJPY2hBTEY2RVVlTGlsM1dRUUsrdVZ1elJWdEZ5RnhZNlBDTGxYdHBqVXNUU1Awa3pmQ0VjN09raGxrdWFkOGlkMnB3OTNURjdvMHl3aTZ0RGtQUlhKVS96TWhHWXdhVkFYNHdQMUVkbHdCRHM5S1ZsVnVmWHZkSkIxYk94akdGL0RTQktjd3pxUTdVSkZadVFYUFZEOVMwelg2eUF2ZDNxbnNvNDFUMmUwU0tuVEd2RzlJeVlyckN2T3huTXN2U0NSemN4TEM1TGRlakpwK2Vja0I3aG9ldzZ0SXJqUERLZ205bkM3ZitBSVc4OEFWVkcrSVlEUXJIbkhBeWZDRVBLVllMa1F6L05QY0NJK0dYQ2IvUmtnMkppU2V3QzlCcklGclgzdFlOWTl5Szlzai9HTnV2OUN2dUh6TXJDWWNrdjY5MXhKMzV6Ri91bEl5VGJmSFhsTWZWb05tNjJZa1JYNTFkOGg0dFBYRWFZV2JBVEJJTWxtcFJDSDhFSW1Ca1ZkNUlmNDhiNVM4V2pDT0RXcjdaS3d2RXJOaGI1YU8zOHViMUZkVEFHNFFYZE1lNURkUXZoVnc1NGwyak1zbEtsbEk3bFBGT05lY24xV1FZT3BsQkx3SkI2dGN5NENMaEhCTDBicGhLM3RCZWFDSFZNeWNyeDViUjAycEJWdlRlU3RFMkxCWWxRRzIxcUU1a05nK1RyQ2U4OGhpVTY3dWZFY1E0enpraWRPN2gvZnRYQTlsWm5QcC8vTldoUkdaS0VnTU0xa1BwY3Y5UktYZnBJcGF5RjV5bmUyNVV1MHZYd3oxZ05zcjZOVUFNNVRIL01oT3hJRmtEa1QzUGpIUGpVeDRHMnVkOEVCOENFczJSSEY5R3BvT0pMZjBzSXJVdks3cithQlNBUndtekl3cVhRUmNVM2VVbHkrRDlOczZIQVkvb0tEUW5ZeVdzTi9URzg0U1M0UXJYQWt4bzRYQUNFVksvQ1NpRkVZeUE5Z0d0NDAyUFN4RVhiNXVCVUo5cllpT2tRMmNtWWxOWUpGYjRrZGxhU0dHeHhNYWFTZm9KelFTa2VqcmpLV2V4MGJhVVhsS3NzNzBzK0l5a0MxV3Z6KzNTNEhUQUVWazUzMW9QazFuamxHWEp0QUJWOTB2SVFjSDErVU5CZmhXY2dIUmhCR21vSVRJR0hYRlcvMTNPaTlVZkhyZnpwVzNxUzJZRStuVFlrOXU3MWFKTnNTb1NNcy9KZDBweThDb283MUN1Y1dUNnd3N2Q2SUhiS0l6RnE2K01mek01YWJIYWlQY2NXTDk3RmJjRzFWWmJsa2xValI2am5DZFJMMHkwTEZ1TWoydWdkOXFmeDdNV1NwSlRuWlZHVm5JakZla1lhMmFjd3Q0QU1MMnhCdU9ncXh5OTZ6bjN5WmxsNnZ3RUtRcXVwTXQyNXY4WURKc2l3bkRvQm9sWEpyb0MwY01oYVdnaFhqdlBGNytRdWxpdHpKN1BFTEFNMDgvQkdZOHBEY1llWkdTZVZTNVNicUhqVTErVTkzb1BLcW52aUJkWUZjSVR3b1F3RmlTNkVTYm81MVBXMVhhcmJzdnRUWUs3RjdRT0R0RndGZW92QWhqTVZjN3BKMnVGNmV4aHRLakVqcXMvWmYzZnlLT0VUT1V0MWZhelluQnZPdWc4Q3RtQ0xUUXpyNVNLZmhZQzdwRTVTNTNyY1I1WVdtaWVkeVYwdmRGVEdpcDE3aU5DUDVtSEZoNkwwYVJlRGszdi93cnhObUpqQ2g2K2J6T0NXZWYxRk9NM0FwQlFtNDRjRi9nVDNnUDUydjdRZEp4U2RYUG9Sa1k3YU1pZDduelVuL3ppblk2LzNocEdzaWx2eGpDcnE1MzUzZVF6YUMrSHQxRDBHNWhYdElSZlFEOEhTYjZLWDVZdGVhdVlhUEtxYVo5b3JnbTNlN3l5Vmo0a3VhK3UyRGdwenhwVEEwZGs2cHFsMDZhVlpERWtQUlluTnNVc1V0OXRya1RDZkdWcWFGbU1IMXU1M21rYTdUTC9EdWg0dEZzWmlaSU1jbE9OQVJ0YkN6cG5URkovUGxIZmhIcExzOCtlaHR1WGJKcmN6QStjcUpFMENwSTR2NGtNa3FJclB5UFJvZmVBVE1uTE9NQnQxL2Q2am5nclJTb0NSWGFWQngwb25YckJCNC9WejY3S0ZtaDNWelhNT216NzJmSHF4TnZ3Uy82Y09KUnJtdnVmdnZFUFpzR3BBc01hQ2dCM21aSnJKTGh2bWxYSTI5S3lGUUVMbjlpYVBNY3AyMWhUeHVXRkthN0FmcWZ1anFpU0ZxQ0UxakF3eGdqQVU0ZVIyMi9uNVV2Zk1INC96WVpIWFlzdXc0UGpLdm9vSXpPRGxvQ09jTVIxSHFVVG9yZHVMVUZRdS9yYjgvTkdPY1p6d1R2QnV2S2xNaUtFamFqTnp5VStNbGpTbmlON21WUDVaVTQ3QXk0bGJEbGR4Vm42QUdsMmZHaThzeTliZmZvNG01bzY1eFY2YWw2a3dvUitQdWFwYVl4K2FldXNYNjJoUDNTaWNaUXdPYzJSb2x5eHpkSG43Kyt1VXJ2YnQ1a1c3M09yMkZDNWIvdWo5NVQrbWc1V25MZXFRVkppMmt4OWl1UkMwTzdaMlRQUkpNbkFLcEVLSDdmSTkwNlNpNjNZMU5Bckh1OWxiMmtiQVhSMUphY1VqL3AzQnE0K0JJSGNlWjhnY3M5SXVBOE1nTmkvaFFsS0lWeUhna0NBeGw4K0tqL3F1SGpUTkp5OEpVZ1hBTFU5VkUyQmFaWmU5SkdpY3JRSjYxd2VtYjZqMURKSzYxRm0rZXkra0JqTWU3VXZhbm9sZjFYdmlKcTh3MVFCWTZkTkZPSnJ4RS9EYnNGbjhxb1FjNlYvYm4zSi94SGxrcDIzcXNaMTQ3emIyTUlUTWZ3UjhTclEzOUhLVjdjUFJ0UHdZWTRXMEhHUjhhdWlHUlJEek9QZDRvOFZyTHFGUVpJMjJ0bmp2R2k1eklhU2NvNXUyL09lSFhYRnMrSVAwL245R3BMYUpVL1VBc0Nhb1RRdkVwVzQ0RGM4aGhWQnFaZjZmbWdrcjYybnVFRjRLTVVqenJraU5nRXJmc1lQZHViUVZ3Z1lvZVJ2bWw1WHNlTzU3VzBmRlBOWXVRSkY3YXVTaDBqMXZpR1Z0TEJnRVFYZzR2OW5NTmxBN2J6N0ROdlZXNlN3TEl3OERuUFRxWlYrUllJQjEyYkE4Q1ZpT3YwN3Bya3J0RnlRdGNDK1FTV1Y5RWgyQ2NPZ0FTa1RBWjF0MWI0b3RBK3lKMjQxTDV6bmh1TjNiOWpJTC9TRE5QZFdNb3llV2dyZ09JMzQzSmhkRktMWUt0RTRlNlUyaHJGd3g5eEZwbEl6bDRxNEI1RHFocnBwc0JQSnNCTGt6WlRkZ3MwNlpIQVJVZUZKWXZUN256Q2xPS1Y5R283OFJJVkV3b0piV2lJeGRYSXEzZktJQnRZSGxZMVJXd3NlOXBtYzQ2THVjSDlWRDE2b1lpcy9QSXNOUndQWEpYYUlPanpzYlltL0tCS3ZmQmk1R1JqRkxjSXliWFc3aDdBYmxQUVdQWm9tT0YzRTAvQ283emV6cDFLOXRadGVKUURJbUM2UTZlQlZLa0hURWpGWmd6REhUMWhHbExsUmwrbFlzUDJnVDBtOWZzYml3VlkyQzZQOHhwNHlzR25GYmhLa1BFd2FXNUUrTUI0MFRDY29ra2RUL0JxemtVaTVoUUdKVHpXcjg2UDltTkVhNkE0NS8yS2tndEV2aDJaQkI2MVhPR3RFeS9EU244Wng3YitSZ2FOS3orQlRaaTRPRVloNUFEd0YwVW5mdTJRcEpwQzYzUGxIS3lpcWlsTGhTM1d2aS9ENjNxVTZEeEJ5YXIvQmdXS2daWE9qQTI2aHljMERTcit4aFFnb0lkSkRKaWFSS2NDaFVFTVNqUTNPV1ZXb0k0QUU4NWFHQnlPOVNtcUZxbTJWYU9GeElXM0o5VEcvVTNVNExzNEV2M2dyWkRVaXlMVXpacjhCQkUzbW4xZGJYYVAyYXlIb0NwU0k0S09BVVd1YVF5Z1FOcS9hTmVZVlNzM2dnb2IvUXlQYVg3aWJKZy9rYUJXS2hPbStEMFBMaGFoaW13L2dKSmFLcDlMS0pqQjJGQ3d6MW1KUHVYdS9VaW9obHcrRUk4TG9HYXRGemxFQmxDNjN4dStPZXBrbXJMNGk5OXlTTkVBZ1VuY29NMm0zSUF3cTViWWhLdjZMajNVMjBQcm9yalFYU3lVcXBVYnFzNWpXY29Lc2t2dTdyQVJXZ2hlVzZBM09MSTZIb3ZoNHpOd2ZaQmh3b0ZISHhsT3ZMN2xXVmdOaHhlV3F5ekpRREl5ZGhkdHUxcXR6Q01SZG9GY3QrQmNvZ1o5T3pwL1FEUVRHNFZVUWlZNGRuQllyT3FIOWZyVGk3STBiK3AvZ1VGMjNGR1NodUlheDZMRVFhNnlVOTlsV0d4ekRUeE95b3lnaUtjUEpobXVCTmZJKzdKeGoxYWlZaEpuOCtaNGRzbEJtTzU3akk4V3F0Ti9aVlQzYVBIb3RMSFVaZFBkQysrSWFNUWxEUzdsRXRaektlOVJqOE5meCtlS25wWDFMZjVXTkNZWjRwTGU1K3FDZG04eC9KSldMNzVNbGxUdmJIMkF6eWdmcmdmSEtmMWhCZ3F6Wm1EeU1EWU1oVFNvQU5uU2ZwQ0pqeHo3SDBqZjBjL0haRmMyM3Y3SVl6VUg4Q1Q3NGNuL0ZPd20zQlB5V2dCbWp4SmNEYnlycVRDYVc2U3UvN2N0RmszY2NOZ1hDUS9CQkw3Wm9oYlFHSUV3QjRYM2xNc2ltL2dCbHNzK3RkcG1ZamthdG83VUx0VUhxUU5NNWNpMDloa0gzVU8ra0VwMDRiL3VCd1NwOEoxa3k3WllBbjA4ZEdwMHd6ZGNEMmxHVHQweE9icEpKOGRRbXJZeWJRaEZSRkNJVmFlZ2RWUmIwdzd5c3A0UUZMdWI4YlVsWHpwQ3BoM0VobWViMUg4Z0o5QmZweWpPL1lVUFRUb01SQ2RTeCs3Q3BwZWlpZzhWN3gxeGY0V3BwYWRGRTZHU1NkQVFLMkRxZkNtVlFwa1JPMGIydXlGZlpBcjdOaDdHRWY1b3RMcE9BbmJ5em1aUDNKSTFPMHdnSmRxcDZ3NHIvUTlySmNnOXMwUlorVmF0aEYrYTJvQVQxcitkSEJIRVRucGVOMnZob3ZlQWQ1c3dQNTd0T0ZtT3dzWlVDSEU4UHlWRU53MzVWb3I2VWpCdnZmVnk0SEprU3E3dU41aWJzcmZibWltQk56eXQvSUtBdVpFQnd1aHZXdm01SVRORzZ4UTRRQzhScnlNUlp0L2VWQWhUVUMwemZUVkZqbUdySTFXdkNibzROdy9icGQ4QUV2a29YeElwWUdYcFRIbFdSRXIwMkkyVU9JVUF3clU4aGdrcVhLTjdqQlVTUUtyTG5kUElqZkdDclN4S2RXTy90Y1JiRm1KdGt1NkREd2tZYTNjZk96SXNicG10NStXSGJudkJ2Y3lyMWY2RHBTMVQ1Vlg3Rll4L1g1RzJnM0NKWW04NzdaVG1SdEpmVi93MVVqNzJSSXBsMWpoU2FJU0NxVG1BS0pKWnhlUjdXTUk3Wm1zQUhYUDNzLzNuMmN5UTlMSDRGVjJ4NTFpVzluRkxsQUxrOGFKVG4zTWZMY1ozeFVKYU95YVdGVlFCdnc2K0hUclM5bEVYTGNYSlNheUlQUGdlZTVIVDQ0V0hRb21uVjNielVLYW5ubE9nQW9IU01BYnRCQjF3UmV4L29jMzJtMHlFaDVOdTlaTmQrWmpKREFEWHlrdGdFcEpsYk05Ni9RSmdPYWRzaE9NVWdmNEN3NXdraG1wTmgycmZoTnpvNFlnVExyTldXcXNoTE9ZOFZqTS81VTlaeXcxZm5WNWdoZ1lKdFBaWk9LNFJ1Z3VUK05kekpyd1B4RTdpeGphZEdsRWYvUVUvVFpvRXZXSXE1T01Ndnp0dnpIQ1duZmFDMit4c3FMM3JKQ0g1VzB3ZkEyQjREaWpxbGJUTGNSdW16VTlrOXRRS1AwNkF1dm5yakJFamdTQVhheXhKbE1pU1o4QmRwYk95L1lhYStwM1BBNGtIZFR4cUh3S0JVNXJnNkRhcDVXelVmVWgxeU9jZU1PQUl5QlN1QnVPVTNSU1phaWZZajJoNVNSd0ZaZTFrQlhOQlZLaTFncTJSTytZZWVuSXhtSmcrSklzL3VqWElFaE1nTktxbVNjaGlVbnhCbHZsdmliK2tNM1BBNWVIWktCL29lcFhmTHNBSXlSV3krN2pBdlBKRmhEcEJPM2tlSTFoK1lROVJJcUZNdXBGT01GcGVaelUyMzVTZlM4Ym12NGVxZy90SXV6QVFYTnE5b29VZWRaTGxSakJKc2dDaVZieHBvSWRBZytDM0tEK0YrK0JieXh5VEpHRXJDYWtncXlmYUJlUnVIaUlzVzFoTUJ6U3YrMmo2M2dtY1dWeHhpWEtXZXNiMWRtbzh3MTlvOUFuMFpHdlJMakhHcDVBUzlyTzI0QXFwRDhGeVA2ejVlNjdOOHhONjE3MTVaK0RnQ2E0c0xoSFRmZUJoSFdwalRhS3JROGdrakdPOHJ1SDV4TU03TThKUEJRcDlMQ08wVWh4YllpNkRSQVpITXdNNlg5eWNBa005bUdoVWdRN1c0L2w0S1NFTmtEZm50K2l1T2FJK0ZXdXFIMmQySkVRVUpZNnBrZkZibjJERnM0aTVhdEFXU1h4a2gyZXJhbzBsekRCN1Bpejd1TXhGZUxGeWRhb0RyeXd1Mjlla2x5bytCa1J0aXhXS2RYY1BtOFpEUDV0dk5IblpoWmdWYmo5Z3krRkNtQVRTL2NRSy9MZmN4S1NVTU5pL0FWN3lxQWJLVDdqZGF5YVdBTDh5OGRMam8zQU1HSTlDUGxVM3dSSVA0UnlnYlB6cnI3V1hDVHNlZXordEtkM2d4RVVnWWNIUWhHVVMyT0pyeFRqTCtGbnprNTd3TWhtQlBTc1JERFBHK1RIYmVNSXRZWDdyZjhZRHQxU2wySzh1QlJwQ0tpbksxQ0FJbmhLMkE1d0tWamdjT1hRR3pscWFQUnFGK1VPSW5DaThPcnZWTUlHUGcwanNRN3hnZkF4WFVCQm9IMlV2U25ET0Vya1IyYlI0Nno1WDlvc2o2WGUzZkkrUGFSZ1lsY1YvUVh5SVE3UFpSWWFKRkIzWDhYTHBYMVFIMXZPM1BoLzg3MnBmUUZEQ2RTdFV1VjFKcS90bjQ1VlBHZkcwaHN6WGlHOGxrQjB4amJ1OVdtd1hsQnBWdWJyZSt0eVFxVGZQWit2S3hVMXVYUVo1bVozZnZyREJ4ZHZPK2RDckpiNW9WZktsQktSU1I2UUdEbGh3d0t3TkRpL3kzZW05ME1RWS9kaS9ZOGNXM0RaYkI2Si80WmJuQlhsdERGeHJleFp5ZnlXUi85bFpUeEZodEloeTdhU0V4QzgrL2RnR2VzVE1UUkpzNTArMFBNVFUyOGoxL2hvaTBDOVFGNjdKNEpRazN2VDBVZEN4R0VWM2l2cEZHaUEreVlyZHlQSXFuRjJHc1lsVmJsV2Z6d0o2a0UzNkkvcEtTWWY4K0lEZ1VtMkZzajF4RElSMVdaTWhIcmNTc2ZMWkhCeHAwbndmMG00c2ZTanFHelVxR1BSVmZPaEw3Y1pLMkFDSzBISmV2VUpZVmNNTzlqUTgrSFBwdFlrQ1JKQ0ZHQjcwbWMxd3NtNFRIaHZGYmh5Rm5LZzJzWUxpZG5jVW55QWREMjBza0wxampsSzBJK1NlVXVqS2FEWFU4cjdyMm8vbjNlaGJ5dWJLcDJFTW1TSENKYTdyWS9oZlZUbmRCb2xmTnZzWHl6WnBybmQ0N1NrQU5ZZmMvdzZvOXBxRW8wZU5VYk5kZjZiYlY1aWd1dkUrdytYS3BucXp0Qm9jU2g2eTYxQWNmL0oxaVVCWUgyNGNtYUJrc0xZSWszL2IvTEZ2blFaTzllSzYyemJSR0NaU3Zxc3I5dkgzS2taN1p2MUR3VDlReDUrZUppZ2s4RDJCOVc2b1FDY2hYSFEvbmVIT0czSlJ2WlcvMTRTcVk3TEl0R2tFZmxoL0tZa09NOXJ6QW9OOUNnV1RoY3N4aEhvaGMxK1ZuRXZraXVobXZrM3JaT2h2S2RtTXEyY3BEZmFjVFRwYTRRQkhuRGZEOXZmMjR6N1dvaXlKM0tpVEZkcTBUQnljcEJSeFozS0JLWHlWeGwzRVk2SktrbDdDVDJQb2JyRjVJazhWcWlxa2RZUU1Nb1l2WWUrWW45Wk1PU0Q3L0tJOXdPSWNTeHRramU2SDZqc3NGTC84MlZZWmVTc21sdDluR0cvWWQ3MUR3dHRlL2F6Qjk2cFc3ZHREZ1loTmZLalR5ZWpra01TSnVlL21BU3V1a0lidm1hRGxVRWZSZ3prdTQ4blErZHdZZ09TVyttY1Z2NGdISVRPalA5SGE0T3dDb2RuRFlUT0lad1lkNjh1NzlsSTFsSkwxeEdmZWRyU0ZzRUllYzNPZXdrYkxiSFpaRDdsVUNObDg1cnY2a3JiaWlGTDdiVnNWWTlQN3V1bFE2NlJqQWwrT0Qzam5JWG40MXNRQ0RDTmU2THBwSFlnTTNMNS9UNkFudldzVUY4VFZxKy9UNHhxN3NQOWNKQlovM3E4WDhUL1dENkNZSlNYanFqVjFLRStUVytOdzVaZXNQblZzTGY4b2pDQVZKMlVBdlV0U1I3UzNVZHd1T3lEUTQvaGlwNFJvb0k1eFpsQVRTM3d0Qjk1UzhPWUR4R3RBMHdCR3V6UG1XV0w2UWNXd3V3MWFZR2grS3ZQcEFXTFYvaWp3TnQyQjlzYkNMdngrb1hFN3RaM1VjcWxDcDJibFJJdmI1VzhBOUpRTW5iMFYwWWpjSlJ4a09ic25OUmpEcUZHbFlmWHlXTlc3M2xLR2JjL1FnelBiTlpsU3E5U3g4LzJWNVIyc1k0dGsveDVTaE1WZGh3Zm11K2UrWERiRlZqRzhGZUtMbUpvZGJweE1LSlVlWjc3cXR1SmF6MC9ncGY4UlZ5cGxEdlVlZ3hrZys3UDIvN3RlOE5QcW5lTS9iQlN5VXhvWEJhdU9oWExpYUNPV3hiNzlCWWxnbHRicGZhd3hRMUNsSndsa0E4MDNXa1pvRWhCZS9EMEpwL0tuQ1NaMWlQekowekkwZEJRU0U3YkpLMnVQblk5YXRWUEh5cXJWRlVsWS9mQy96WVNqMVArZjMvYi9jTkY5TXlUZURyQXc0WnJjYmNZRjhxY0pJeU9SMElGWDRoamZVUGpxT2NTUjVMRTNCeXVmVmlpMmlBanM1dXp0SUNnQlV3Y0NSbURnRUlRZVJUUm83dG9kcnJqNVpSYnEyeXI1QkhuSjFUZm5BM1JkaGtRWGtzNDhXTlZUSzdMNVJYWDVVaExmSkdlcDNGRUtRUlcrQVpRaTRoTHdtR2NCTENrV0tkZFFCZ2gyOW16Q0FHeUVpQjdSSVVqWTZsVmRFTC9ueU1nR0FITlBrS29TT2lGMEtNemI0Y3VySXdNRnJvZ1U2NmJLcHNxYWpsTFp5d2VmQ2x0N0c4aDY0ZVN3R1p6RWNxN3dUemdsbGRYN0ZySmdwQXI5WC9IMVNFMU5nQjVvQUdRTWtseGVsQ1VkcnFvQmlDMmtHWHQ5SkwwM29KSElUYmJZTmdBaWZpdmdJV01ENy8yZDJ2cDc1Ri9OWkFSTGpLWWNGQ2VOQ1hNUzRtRVY0RFRBSVkrSmN0Nmg4WXdpQnhVZFZROVRSYmtIRzN0UlowaDlhbks2VldicS83eTZxN1J3NG1aYlYxeVd0U0Z4WFlkZDcwakxTUVQyMzdjbGJidGEwVkt5SW1RTnF3ZmpaaFB5MDRvcmVzakFJMm8xMjg2YmowOUZjdVVpTGZpalI2enVvMnFIRjBnL0NacGMrZGZBZWZ2V2J2SGpDakNPdjJaSHQ0NEU3bUFDbWtXV0ZqcUUvK2FpM0E3R2N3ei9iWlFVZjdEaXlWZjBPSjlVdU94TmErU2lJUE5sdjl6cGFXQW1sS3AvUkI2dWc5WGF4SGU3bjRNVjcxbjk3b3NCa0lTU0M2WW1ZUzRTWCs1VlkxaGhGSlBMRXFodHlaL0pLaG41OEY2YXFBdjhkbXNrWkRJVzBONVVhcFQ0Sk9CNFoyMnZ1NDQ0RmpSVmwzOXNxMUxnanlCcHVnNGVwd2sySWpnd0RKWTRqenlpaFc0WGV6Yk4zMUlYV3JUR3JoMEtkendteTROTEwzUGo4b0lRSFQ2YmR4YVdxSXZ5NHk0ZklseUNac0RkZEpGeUtFNGw2eW9qYmY0ZkVOYzIxWWM0TFp2Y0dIOWNLZDhCS0s2ZTZTVzdLWHZ5bTEwckhOR3hJTmhXMndWb1NyVjFZSmR2Q0JHWGl5b3ZERUNoWWI1cDZ6UWxsa1BlZmRucWI3V3RnWlFtWlg0djNrSm1LN3cwNVBGdi9YV0JFUkJubEkxeG9zMnh1RUNlaG1UY3JIbEQzUGVjeWhMWW1uVjV2UDRRVEtHR2NNbXRTVVFaT0JCc3Vza3FmK2NJMTVyL2wwL0tDSWlKWWVxNVBiVmJEelF1bnFIT1AxMmtLZTJ0VEZtbldtdGZXZVo3MnhxaUM0S3RMT2h3eWhWWlg2OHpGcWZ0cFFjSzR4NWFEakhFbll4V1Rlbllja0dOLyt3Z1JTcG5nZXZoa0xEdGhXQXJjc2luOEhMYk1BdG83cE5odGpEempFK2w4c0hobzJrL3QyZVMveVZLeTl1ZHZGeXVMaE1iY3dHMFhDZ2dXNDhkL2lDYWdSRzI1b3dDRHRkdTBpbVJ3dGx4b1NTMU5GQWgrbFFramRGb2loVjdPaXNyVTBIWHMvejd6am1jQUlnU2pueXc3ZGVxVlVqTk9Fdmw4dnNjMXdSM0liOU43bEFWNzA5eUxtMkJFcHh5djNxNnJXbm5Od0QzNk5EKzdJNlFMVkt4TnYxdzhZa3JIcTQ4bzdEYkFOaFJWQWt4a0RLTnNEdFh5cFNIMWJwaVZJUjBObTJEeG9KMitsQ2ZJbU5UVFA4U0FzQklTelRVR09aZWhuOTU2MjJGRlh5d0RCdVlEZ3BBQnZqRHFVelZkRWoxL2kwVEdVeTdaN1VnVmRGUjk2c1A1b0pjb1lNY3hpTmk2dkhOeC95VjB3UzFlRFpPQjJoTzhzc0M2TWMxaEMrTVVSYVVFTHZrVW9nSFM2emZncnQvRXlOVHlmZ3BwZWQ0Y08yNjlQcTdKWDFJL09Pck4zWVZkU0lZbzZPZFVJUW1ZTXUvM3A4dU5xdDdyYjVaR2hlK243TE9ROHJBamp0SkxXVVBMVDBGc1dBUWpXSDNsWFJWbDRyb1BOZXBLV1VvTmp5bDMwL3J3Q2FhMWFtOVVNc3ZqRVVSaVU3WWVBb1RNTm9IMGZZU0UzK3BjQ0hJb2l2OVdwSTZoWHF5K25Ibk1wNThHZnd3R2lkNEMxdkcxcndtS0Q0TXJyZktURlNPYitYSlpDclZYblp1ZlRyTnAzZ3h1cEN2b210aG9BcTJZekhiTjA5UTRuNUs0N0VUZ25IQjNZWGFXT2ZrQ0taZDVLN1F1Q1RlY2NCby9QWW9UY3BmaWFLMkkwTitEcVh0S3ZhS2hJcldZWDRkTjVFSnZlcjNobklwcTRmRGdpYUhWcW5hVnpsdC96VlpnRzdzTE9acWdHZ3lOS25VekdyTFN6WVRkRFI2eWVENlV0RVlqRnFNdzFFcVoyZlVmdGhGOGhKeC9ZL0crWWRibDh6ZEs3S1NUTnNWc1U2K3NIcUFGb0RXQThscEVCK1lkZHdmRXBTUHAydDlVL3ltUmtYS0RaYzJoZHFhczEvQVhoVkwvSjdweXFTdkNuQnMrajlSRlVkUlpxaHNFMWJuZ3FlQldKSDZhRW1JTzFidTk4UDVHWUZiKy8ya3d2SUs1T0JxMk9hb0pIcGRTSitFenhkVEg2Qmw5UXpFd0pvZXVpN29CK3BlV2UyaExHc09qSEk4bk5Yc0svU2haNDFNVklQdEJKczdjNTI5S3QrREFqRCtsVy84Ums2RnBvQitVNXhZcVZGSDBlekUxaHdKSGZJVmVURFp6TXlBMnY2SjB3eU9DK1hROUVUYkl2Z0h6b3l3Ym5BRk5za2RJSUZGaDNjMlBzNXgvMjErQW5ZSTYzbkFoMlp0ZHBQczVMV1RJNGppWE1Qc1JxSU5hQyt6SkxISzFKekEzeU9QOG9qbStld0w5WDRESFdUVVQzVW92YU5aemxpanpaOWVQZGg1d1VLd2xYQWxLdUxZNzFIQzZNNG4rdUd1VXovUDVBVVBUQVhzZW9xMVN2NHJ2RStzcFYxNDZVa1BvQjNBaGpkM0pzMjkvaTExVlVneXVmalFsdUdFOFVzTnE0ajR4emJWOVpCbHZnVk4wbHFoK0xOeG1MSit2RGFVbEJuaW1JWlU2VWVpSExxalN5TWQ3WWtpb3VYRVp5TGxtdGovV0g3elpkemxZT0JMajU4elJlK3B2YVlycE5zU3dYT1NUZUVRV0JNMmRWRmI3a3VOK1VEc1YranRuODltQlYrSDR3dUg1MnhpN0hiTWxkc1VqbnE2Y0lWMVY0Um84R3F3SlEvSlhSY3BBanloTTVsRFcwTWxnSlJIMStUZS9WOEtRQ29RQUpjWlYySlFNZXVrWTd2WGFhWFVBZkNRR2dLcGdsWW8vcVJyZ2xBdE5YcXhlOURDR0tWMStrZ29YWWpDYitLTVRrZ1Z4M0Y5UkUzeEM2UEtHdzExNmtzMFhUOFl3b0phMHMzNm0xVEhqOFpaUzlKd3lRZkxBeFR6WGhtcktmdWMvSVJROEFmSHF4K0FsdlA0eDl2T0hMMFgzT0JSUDhJdW81UjhSQXFVNzVpM3MxU3RiNUV2VWtER0JFaVRWMXByY2VGTDRQbFRGM01KY0s3bDE1bGF6dFRQV3JjU1phL1YwQVlCZVR1dWY1U3N6d2o3NzdTVVp5eGU4YUFDVEZ2QXRJT3U0Vjg0ZFRsQ0UrQTBLSEpxMkxWVFlVdURidzR1dFNJSFNHUVRQUDdWc1F3aDZESW1CWVV5d01mYXpqM3kzMXJBRWVPUitlN2prRGtSWU5Ib3hVTTFYUis0T25WZ0RWaUZCbnpuQXA0TTM5eVkwRTdhc0pmdzNBTkVZU2lkUGovV0RMU1Bkc3lDU2JpWGlDeDFCYzdWTUxYSHZNY3lVakhvc0FvQ2VKMVh5c1BHREVNRmtVTU01djEyeWQ1M2tWWEQxQTZwM0dUN1ppdHdGNlFIZlp2RFU5TnJKSGU0NTVlaDRqRWU3ZVRncW01LzdKNHlpREo4Rng0Z05PS3pGa1NHSUxNbytCUnFxcyswR0VLWDZLeHM5RXRHMjVEL2g1aW1yUWk3VlIwRk40am5JRTZ2YWt2ak9hYyttdjQxZ2RJb0hMckZCbHNhT09maHRXR1dQN2Q3ZzVzNkQzVXB6ZWx0YVpnOG51eHJmZGs5V2hCODFCaGpMejRBd2Y4SkNEQnA5NUxmWEFvM2JYQWk2Mll3dkk0dW5UdGcxRDluYzF6UWtuSjZlNUNUSmwxTlVjMzljSDVCZmo2L2RxU3lMZVNnWGdNc3FRTmVKUzlQeWVuWHZGQ0M2dFB3dUZkdFF3K0lPcS9JeFV3dzFBekM5ZFd4bWt1bjlIeW1rVTBOQUFSOTE1VnhLNDJydktrWFBFbllubHBYcXhMSkNyeUNGK0xvRFFWZkt2anZyM3FxMXRNa2s0YzJFazQ0MkEvbnpnMHZ2ajlwektlRGVWVzNLNFlSanI5dk1HTzJIZ2JvbWd4NjRQbU1ITGFTSHFTekxyUjQvQ2d4Sk5STzJDelJlU2lMRUZPb2wvdmtDU1dINW9rRDEvMWt5blJrLytBTjhVazYvTjFkWE1JaFh5Q2xPbWtFMDBTMmxBNmZpWXpXUDhOVnVwNHFOeS9TQk9UQjhVVHZCUVB3TzZDYzg2Q0hna0JOaWhPQlMyRWZNaWEybThsVkh5bmNCVGtXL25VUGNUblUwanNIK3ZRRmx1V2VkSWZDYUIxTHA4cGEwbnZQTEZxZEx2VE1kK3lzUmgwMFJUYlN4OFkxdUU5ekZSVzRyMDdzRXZtNzZqNE04WUNMdElaQ3BvekhaRERMMnhJelliQXZQNTlQVXpvN1VTUCtJSlMxcGxuVzRhMDd5N3o1TTdHUjVCT2Z2dW93MUFmZk1vOWltS2VvQmVzNzVvMjNwN2JHcjV0ZUd3MC9wL1c2VnFNK09aSG1mWUJzQnhJMG1iWEVySTRFUUxVUWFkTXJTVUdNRDF6VEtmRldDZVlUQTlETm1OM25ZckhpSnIxWnFwTXZ3Q3RzNHdZT1hwUmdlL1E3bEFpYmpYK3ZLZFRLVElvRG0zb25VeEVRd3A0bVBsWnR6YmdhbldvbXFaaS9kUDVkcFJWT2g1SGROaDIxWW1hMUpNOHZhM1RMR0hLV1crWVhBQ3Q0NlpMS2pTNFBuM3Vrd3FFb0Y1RXNsRFc5LzJrdnBkZEtpOFZzaVVLK1JFL05qeVZlalBtSE9Gc1AxckFTNmNOQnYwOW5UZWFNdEZDVEJEZE1xdGhXOU5ZR3NibjFjOEh1V25wdTIrR051RGZNWWl0Q0IrZjk3YnpXRk1zTi82UEgzWXkyNm94Y0J4RWdWVXZZWUFzeWdvb1N1enZpTTZqWURySXhpVEhOa1gvVUoxanVYZHpxbnZNeWVXREJEOUltKzE4MnNsamJyZnFOMnlqbC90RjV1TkdsYWlFaUhCUEZyejEwTjJsQlc4K2owK0hkem1mSXg5SEFETkhwdmt1MnJSRnNkZXZxdUpNTFN0Mkg4NHhNaHFKVlpZbStuQ09rRmw5T3llejFSNm9uQjR4OXZxL0Y1WldYOUVnVTU5WVJCZ0ppT0J1R3JGZkQxeHl5NmFoTjl2SWJwc1M0SkFSaWp2RldZYXp0emZoU0ZTZzRQQnpHdHIyOTJKWFVHb2pXYzdDSHVhVWF6MngwMmY4eVJZaGtlenF2UjNSMmt4N2hWWFpNcGJMbkoxZ3ZQcjQ1Ni8wZkM3NGNDVmZtQ0lyWjA3WGx1dkJuYkpONDJvazNiNmVlVCtXbG11QlU5WDF0OFV4MnEzclhzTXRKVzRNUWR3WjJSN2xaMTVKcGVYdG9PcmhVTEowU003eWJ3WlBmWStQT2dhS0x4SjlzVDJCbS8vSFF6bmtvbmVNalJ5TU5PS1hWVnhZa0xDWmNuYTF4dHl3eUhJNVduT3paczUzOS9qNU5xdVpRaFRiaFBYdUFwU2RHREt6cFFsOWtya2ZSbW5hdFRHVzRTc0xuUWQvc3QwL2xUV0FSUnFCMDgvZ3lRTnZ5NVBLZkJrU0VyZmZZbHRlRDBka2VoVTZOWGVHZ05sdml5aWhkenlZQWFjZ0c3YWovdElLSGVYa0hKZmxhU1htckllUzBYMVNhUW1HNU1YZHlXMG9BOHRpZE9XWmNKcGdQMjltRGFwOHlnZDh1bmJIQVdvWkg4WHY4VE5tRkJaRU5UVFVIWlE1MlAzNnhYR1B2UVNZZjFqR2xHd1ZaaVZibm1pSEpIcGtTYkE5cW5mdGtIaVh3Uy80Q3dIM3l3R3QxZnNuaExONWhZYjB5VWpFd3MvaXZtOXIwVFJCdEs5OUdxaUJkSnR3Vys5eXY3K21xTXc0YTdVRlNIYjZLZFJWZ0VUS3NQaElIeTZBbWhxcVpWc3RUTkpMZHd1MEo2SXdha3lMRHNxUy9XSnlmdXhDLzVNdHc0OXgwS09aUXFuTXJtdHRIWFA1ZG9YYnRxdHNVbTREeTBMUERPYTNLSXNnOUpIeVo2NGVBcDdzSkZkU0ZNemx0OS9sODNUMVNwbko0T3I0SW1va3pHUlZEbUhKN1JKRWU4RTc0QjkxMGplcXlHTmFPaUo5OFZrYWFOSkVaYUxHOHpveE52eXRvL01KbGhQNFE0eUc1VDRuendFZUF3dVYvZlBiQmtNbk81dnpzYWxMa1pIa3ZwSjRieHJRTE5MY3Fpb3VBU2x5eE9Mbit2a0ZySU84bUVjdHZkajlTaTdrdDZmaHZmdDcremhFUXkrK2VoKzFETmFHelFGalpQWVc4V090aS8vVVFPZ0FDUk1Va1RuMHZHaHZOckhCZE5WR1ZtbThmYnpVUzdoMFpPOWwrczcwMnBhcTZ6aTJHWmlRbHRJdzlKd29RcUdRcTczTldEYWdLNmQrMlNjbG9ZR0pwZGo2VTZWOXFLeFBTeC8zcEpWWktidTJPZE92MVUveGR6RDBJekFtQ3NKVXdKRXBtcFl0cTMybWUxUnlxLzZZZ250YnFZdk1YRjh3K0luTmdZSFRtYXhoaFVHVWloVWxhcnVYRlp5QU1ETWxjangrUnhxZU9MNlkrdnFJL2VwZkM0Nm1TRmljaGlBY1dROWlQN1N6THovbG5qSUtnMnN6YU1yNkViaHg4Qk8wQmVoV3huZ2ZnZDdCR01rQ1M3aG9XVkMxQmNCbDJIQm0zb3JUVWJpbFBsa2JHK083ZHIrOG1zRXNxbHhGNCtlNDQ5d2UyWFJOWTZkZXdjd2NGd0VkWVNSa1RXVERoV3UwM25jcFNiWEdOWThTakRJOUMySkxsNjNnOVUrVEV0OERmRHJ5TUNyOFl3a1p3UC9zWU44WFBpanNhalFlR3VxYXYvYlZnUjB4L0d2UGxkOFp5RldNbE96WkxyRks2RUw4QXVsaVFLTUp6V0dQdCtoRDRqYjFWV1lTWjloOXgxbGJLMmFkQUE2dkxXL21rNCtGckVCeXRRUEVBamJIWkNDbXErWnh1Q2ZDYUVQNWZieC83TDNPZFdqTDcrNVpUZEtDSVM4RkRqN1VKUzJ4TkZRLzlIMmNhRE9qYzgwVnFhVmQ5M2krd291MWl6K3p2ekF4NFVxZXdabHVENWFZekswOEF1RDE1dVZPbk9hV3FqaTl3VUx4M1ZFTllWWWhoVGdXSWVhL2RNcVVoeWM5WFBTUTRESFJTWU42cy9DQk02ZGtCMXpyc2w1cURjTWRNbnIzRHVRL3Q2U0VtTGVIazVmeldkMkJLbkRaQjdsZ3FnOVRRV2E5SEZLTnhpbEE4UVJEYTg5ZzlGVHFRejFDRE94bmdwT2hHQldUdmhUR3VuT3lFOVc5T1Y5RFVqNWpmNmR6ckJGelNOVStNWGR2ZG1HR1JFMWY1MEhVRlNaODYvL3FGSHdSOXdBblhCcmRUbHdXQ0Z1clFzMTgrT3dxR2JmbFdEY005N1R5R21PR0xHTTNKQWk0WXN6aGpDN3JoVTkweUVxdkpNa1JJZmxldGJ6c29XMWJCaytLY2lHdmxIRnBXbzZIWXZybHpPYXZrcy96ODZ0V3o0bnpzbTBzTHE1MnRlbnF0RVI1emdMdFpIaDBvM2hrSzZJQS9Nd2VMaHRYY1U5R3BrODhLckdDWVpCY1Nsb0hTNTlWTzJ2ZzAxY3pPbUhYZEVFeEoyc3g0b0FJaktNTUdrLzJhdE11YnF1c2k5MVhXWk5Sb0RuZEFjSGQvdzlKeGVtSTBIV0Z4WWxGaGNaQnRIaDRMWVhaZjlpN0FzUzY1MWZxaVJlQVhSRW5LQTI5Uks2Sk1yUWZ5WTdjM0M0Wk9XRkpGbCtmc0RTSXE1Z3NuaWNUWHY4T0Z0U3A0dzU5a2VseHFCNno1MmdJRzRWcmVqZHFYeTdFYTFMLzJxaHJSNEd5ZEkvMFIzWkpLWFQyRnczejV6V05lODNuQ04xMGl1WFlHdi9mVjRkdXRRbVlRL0JQYXprNjNZZW5RYUV5MXhXRWt0R0RBVU01RitQUEh5VWFPWldhUGtsai8vQyswaDM5VURUVTYxUnBjdDE0U0pRSWdqT3MwZ3pTTzBPT1F0RXhtTDcwUUFtenNNL0ovVmQyb3FKeGVsVktWTkVaZzJuTmgxQzRlSGE1V1oxOG9QRDU5amxJeVdnbjZBQ05tL0dPdWtPSFBHdmVtTkxpa3ZvNGR4UnpBVWZtMHM2bDJYQmNTN09KMWxMWlVYc0lldEFUNWgwT1ZhaW1RR1R2eDdueVV6VC9iZDVPcXd0N3N3S2ZTekxkV3MyV0VyUExVblBkckRPUHFwM3VjMllDMzFIVElRRW05bG52MjRiM0hHN0dnMEFMYVJrbTVVR2d4bE9Bako0Y2d6QmdZZDBOVnlPdjh2QWFBdFV1STdMSEsrb2IzaDN5OUE3c2xONnJPR3NNc3hCM21jTmgwZjl2S1F3c1l3VlBGL2ZmMkZ4djR2Yk9RVm9mNkJ4dlhMZ2Y5ZlFZV3doZUlTYWJQWHJrZGQ5Y2I4UWZLRm80VkFkQXhLOE9ESXNNVzB6QXNWcTJaR0k3TllxWTRiTHFwQkNxVG9oU1d5MTMxcVU4QjdGd29wMjlBNi9QMlpvWTVtMTFZamRqeng1VE5XOGZJdkthcVIycCtoMHhKVzBubTRBTURSTndWT1NTK3QrSHBXaEMydHYzZDVlclVDQ3ZHNzVUN0xzREFDV2dUKzVVOVAzZDFVYmRid1pXZm0vZ2xoU0tFR082d2QxamVjci85VVdyWmNSWGpVakJNcFNseTJoUlVyQlVDRlQvSnIwdFRzNVBjREtIbzlSamNaYllZMTh2ZnNLY0dOV2prdWtsK3Vud3BLQzZPRDFxd1JXNzZabklJQkU5bGtFMlZRbzIrbTQxN283MlgvTkc5RWRsM0VEWmpKV3VNOFlucXE1RlV0TndWWDRQMlBkTU1SNE04dDhicGYwWWlreEY2Y0ZVRFlCcU9kT25Id0x1RkpWQ3c3L2VDang5WlVNUjdEdGxyU3RmTXN4QkorVDhFZExMR0dQVEw1a3l2SFRMaGNDRW5aWEFpSWZnaEYzQnF4a3FYN0xaWllvem9ySjQxdkdWdmdiNE5PUkVRVFlORGRDRy9Zb1Y5eXVHdnhzNE02aXVBMmYvbFFPUm82WlpPY0FxdVViblFxaXJRRG5NcTZKb05xajFrYkI5ZDNNK3BMYmE2anFZV2U3aWxPWHpvN3lBbVVhcStRQ1ZiWHpMRmxzK21qMTd6YXFUZ0VQUTRhaUl1VUV5d0tlbGV0WXhaNnMwWGprRzJSM0tld29WaTdOWDR6bnlLTXgrSWwxcTMrMy9UTGJ1L0lMaTNNaVZiUjZBRjZ5M0FTOFVBaE5yL1JZcWx6Y1VzcXpScy9nVllNdng2OTc2d1R6SVZsWmhKSWROb0NYR3Joa3lBekNpMklLV0g5cUNWRkM4eTQwZTFCcnlBWUpvamxGY0Z4OGdwdlhxekRDNFExT0JuRnVZdW1BWmNUajh0ZGs3RnJDZkFva2tTSzUwQ0pjbjJsWmNtRUgxaHhEOGk2UjRMKzBTQ0xwL01qTHlnSXg5ZEhMdGRaaW1kUm5PMzVYM2h3bkNpb25WT3duVEMxL2Y0OTFXenJZMXdkRGx3dG9rdnpETFhCWmVuQlBGb2o5bmhwU2lBWHpWQTkxdm1OYjdKVGNqcnpmU1lwR2lCTDBjdks1QjZuU29SU2tGd2tWdzZZWWFUbEVkZlp0SHhQWkZUbFJlU1NaVmRGT0FzUkVFdW45UGtaZXpnRnNzN1Fsek5nKy85LzJpQ1E4SzlBcnRpK0tkUGtmcTh6YVVMVldHNmcvU0RwUlpLUGJJcVNSSlZ5ZU9NZHRwSHBsL0JuZlZWRmFZUHl3bzQyd2lpZFovd0svU3EwaExFMnhCZHZEQU4zQ2E1Qy9JVndja1VuckovbzVBUCsrc1VLS0ltUHU1MjV2cER2UWtJeDBxb1RJbW9xRHFSd2MrUWRHTUkzWHZoZlY3RVFIUTdIT0ZjaXhwaUl4RWdOc3hBMDAwa25LTVFVSk1VYWxaZFFvSThFMXBWU3JjSm5VcFcramhTUzRWTFBiOXhKa3dIbnZpcW82WStMb213NDcyYUcrY2hQNzdwQVZTRkIwbEo2cklNeGdTb2taMTk3YzducThoRlUxeGpHcUo4elNwTVJNYzE2cXFuUWk0RlQ3Nzc3cDVsMzFzQzYyUHNjSmpnMDFsUDZZOENuV2JQWXpCWVFscWQ2K3FNUGlUY1B2UjVvcEZERnFnakxYLzgvYkhBSTVDdkY4OWtVRUhoZDBLNU9CaitGMWlyWjlSSWxrYkplZ3ZuVFN3N3NWQW5WQjBUeTc1SlY5T2tHQU10eVFIMXo2eUNiNlp4NEtWcmtRNE1jaEhmRUNsdFdOL1dESHNwVEpCb0R3ZzdjZFc2NWZUTUM5VlJHRDRYTkdnd0xCMTl4SGxLRUZPZ0R4bXJjY1VBY3RJTE1SQWxwY3JzREdQckFZNEUrMXd3VU45dHlXVmtETHh1N0Q0dGkzOFJMSHZtNFNOaWVlcExrVElnS1pzV1BvQmVEaU4rWWNDR28zb0Z1ek14Q2lyUzl3TUcyQ2NBUE9CQ2NiUDMrdDNVTlZySWhPWWRVTVB5K0l1a2t3a29NS2lvV3RHQlpaTkZ6VVpoaG95eGZqUm1Id0dVNXR1Qi9qRUlxL0JsVW0wWjZjWlVmakZ1RDljNXBpeFhBU2NxNGdreU91SEFLc2ZWZ0UxYTdvMUw3SkVKcVR0Y2RORWtkbUZPN3VTMUE5UnpTRnJGRzAwQVE1RVcxTXJrOVl4SGg0WGxNNVRudlpkZnRXK3ZxWmRNeXpMS1JQVGZBUEJwWm9Vb09meE80eStUQlpNS25zYTkrVENscmdDVHdiN2V6eldWU2dYMER5QkVYdy9zQ0tEeXVtcDVlSllyUjQrVkJaaW9ETjdpRzhBZi9iREVVdUUybkpkZEVKTC9yMmxONFZJdzBGajVGMHp0Y3praWZaaGpTcDFwcWl1amdsVmRFQ2xuc2tkZG02Z3VYTnJ0cENQZ0JUWUtoMUVtQXFhNkM3UGRqSUROdWRudE9kUVVmd1NVcE9KN0Y4ZkdlcFU3cjJnQ2FGaVliVC9MVUpSTW5vSWpXZlJBdUtaTDlnaVVZbHpOYi9IK3R2cUp6SWoxdG05N2V6bEN6aXUycnVPaEw1M3Vsc01Nb1lwUG9mYWpwSVZrSTRxQ0NWU0xNU2U4SXdXa0VWMUU4QkFUR1JKZVo1eGN0RWd1TWlPdGtXUThwSUtnaTZFMW5ETWVIcmNXbWRoVllDZEh0T3VIR2dmdU1JNkQ2SlNWbjE3YVNZM3h3QzFOUHY3SEdmdXl1WXlVMGtrQmNNU1JVN2VxRTlYK1hlTFl0MnIycTFKZmtTdXZ5ZWxWWm5XYXg0YXFpSjU1MmVPRk8vVkQyTWY5Rnc5RDFpSm5Ya2I2U1RYS0V1SGVmeW51Q0hXOHpHODdta0FhTjVEZHZIcFRyOU42ZXlDdjhNSmFnMDkwbUxONWFxa0F4LzBra1FpdU1TVkNsbVA0V0ZEMDJqZHl2ZlNtcDkvOFMyRzc3VjBsd2YyU1piTFZzcmRPd1BORG40am5sZ3pnRW4rbWphZms5NmJCMS96c0tYVmZDZ3VBR0l2VmpYNnZtMTBRWS9rVjBjVmx4UTh4UTdwdW1KNXRtTlYyOGhiSkpxMVlrZmNJUkZXdXU4OXQxWFgxQXdybUFDcWpQZ3dLRWpUd0xLWEpkemllRU1QZituNjZZRlY1akNoenRPdCtjKzE1dEJmcDRHNkFpRU1UMFFQVWVjU21RbXY4TjhKQmwzZ3dZdXEvbHoySFJaazQydzdaTk1janR4MHhJZWFSY3o4aHkxUmx1MGwzN1dsWEdTMFlySU03b0w3cngya2NGOTlBTG1YRXAwODZVeGp4dGxmTmJsZVVnQ0M3Sk8xa05mVVh6R3FKT00zWk5LREJjMzkrSXJJRXRwWkdtdUlIMXltNUM1U2VxSFljckd3clJROVlndkV5V29KQ0pzdXFwd245Um1vNnVCV2VoMG94RTFkQUQxcVl6eGdFRWhnS1RFNlM5enlCSGFmaGs3QUlidlJocXFOYWNUYW5DcDExeXBxS3ZseVV6YWRYTUxVcmhEZWkwZkgvOW1NalJKbFc0V2RCZ3VuT0dsM2lxWFVaeTRLRXpsMDMrVEZBOVVZaExqa2w1cU5FYkp4b3VLZ0oyYkpkTG9xMHZ0VmxUWS9PdEFOczRnTXdZRVhNNW0yR1NOdGhocVFabkpuUlowVEJqbUt3Wm1ET3FPc1h2NnE4TDN6U0ZuSFZkcUk4UmpWL3NhRTNQa1dLaUp3TmJuNkVxVjE2NzVJYnIrT0UrUkNXY29mUVMwMlU0YUNQWUs1T21EVDNkOTVDS3JBUEk2Wmc0OGJadmdIaUptV0libm5rbmRzN3ViNXVBdGhBaHZlZmlLeHgyYnVJb1M0d3M1RUh1ZGMrSmQ2ZG5QVDFUT1htdmR5NXNpRm1RSlNWd0hQcVA0NlFnVGp1M2lBbW53c09Cb09IdkZiazB1TDl1TGV5WHRXNEFjdEJkTEdacm0vaUpXU0UrZXA5NTVEMy9ZeUpFTXhVL2xPVFd4bTZVQmk2U0h4dnFYRDJlY040a1RUSk9SOFFoeEdFTWcrRGtpSndzbHBoeHY3TUVmUllzejNZVTZPRGpaaGdHZmlZc1QyZHRiTGVOTjRNYTVOcndnZVU1ckVHRjR0dXR4Y3BJR05pcFBaOXBVdE5xUzVWVW8zY0lQVndqbm1zdjl2OWg1OGIxSWlqZUNOQUo1M3JkLzF6K2hwN2t3Q3ZVVXVDaDJ5UU9RTGhZQjBjbDNQS0hjTWR5aGJzOTZnbEtrMTU1UXZOTk5ZWklTM0JLcnlBWmtLaDcyVlMxa2tnN1VLUjV2cWUxc21pMms4M2ZkaVplVitWN2lMYnJGMkUwdkJtejNKazNNRVBKOXlUL0F0YzFocFdNY09ySzNVMzFDMSs2Vk1HQzlRKzYybGtEY3l5ZldSL1MxNTlrSU5qSkFVNUphMmc5TSsxZWJoQU9LcmV2Z0tTa2hYcVdPTXpWVzArMzM5eTZSemF3bXlKRE01M2pMM0d3U3pFV0Z1b3dnMDc2UTdQZnFaS1puMzlFWVg0cUx2RlB0UVB4SmE2SnZYSzM5dXd0NHVuOVBvSjk2QTYvcTJTUzFHZWs0ZjBxWXpmbHo0SDUwYTBkK2t0bjRnZmVkV0dIdWVuTDRPK1NKSUVGNUR4ZVE1VVY4WjRoaE03NldMK2gwdnNYeGptYlZsRm0xTnltcHBjMHhQNFRuTFA2QnY1T0RNTzBEeGk5bkM3Zk45Z21kclp2QkFSZXJZN3g4SEg0SUIyWWttL2lUQTkxaFdMOEpVYlhLMnhTWXZxMnhWcWg1RXhKYmU5UzU4RUxla0NFaEFkeGt3NXNNR25JY1BOM1IyTFhoWi84RlF1WEd1ek9PcUtDY001UDNKOS9XSWFtZ3VlOUQ1Q3V2dlVybEhPRUUreWhVaW94L2xqaXIxZUpJWkJjNXovS2RwR1ZJVm52SGFyNVhTdzhOdnNlaEJvZXh3ZGw1ZThjZWdwc1NHZE5JUS9SK1M1am5NY3hTa0tGOUt2bS9CNVZ5elBDYmNtZ1NvRGRNMTU0TExCNDhGVG8rd05BcGVlTDNlcm12WjI3SGxmVHVqVVdEU3BtekhOWkpSaVRodCtFZDZiUjNScm42L2Z0WGRUTXl5YzhINWx0S1MwVkMvTkswaVFuRm5EcFBjWjhoMmNlZU1GMG9Tc2MraEc4ZmdrVFhxdkFaK2NJTE9TbnJXYktlbnFuZW1BSHU5MzgyajdPSWpDUmJtb3p4MFZqTW8way95eFp1YThGeTlHWHBSQms4SU81TEUzQml1Wmppc1BtNWVBdUh4T0F4VC9qN3BQS1V0eWljNkltdFlwRFVTR0xqQ0htVGdTaUxSRE5oN3JtZDdHSjBHOGI2U0VRWG9vRm5uY0F5SjE2bVlpVm1yS0xod2JGK2d4T0FTc0VLNFJhc3JJeFFaL21aTTNqVWtLR25jODkzS0VZNnBSMDhSRGc1OXpPMkx1M0Y5Rlh3Q3pZcHhVamx6NU03RXFiSXlieURxemlNRGc0TWltMlFybDhwOVRydDdxQVNkMG94T083d1BlVkpHdFAwR3FwdzVvMDEvMDZoajZJeGdhOTEwZzQveTdRczVpczZ0dTZZaHN3eGhqeVpTV0F5aUUzc1ZoNk02bitWQTltTlp0dkNpLzVYaHk4U3NKUnd1cUkwWGg3bUVnU0dNN0xLMjZSNkZNWVptTnFiUWY5OWZDc0t6aVhCZ2VHdi9HQUNJQVo4Tzl1WTI0a2llbXBldVk3Q2ZkbDZpc201cXVaNDBoRkorblNwQ0N2bEQ1MUphK0dKbEpQQ0VOL3FpU0tJVlJaNjh0aWhvcmgrS0pLaE9lSTNqNU9Ya285Z3hRYy8xMmFieXVBOG9BNFZBMDlFcS9FTHMvVUI5bWVtS3lHY1J5cTVmZGlNaytVSGJtZlRkVVJQajM4cWxTdWtOLytralRpV2x3UmpheEsyb3ZWcm1VeG5RK1FpUFlCODQ3dHhQZWJUMzRaU05YekJaM3FOTTBqdUdkUGErUWxsOGZsWHRLZEdLZlhGQnphMEZZV2pORVE4RFdJK3pTU1ExV1VaaU1QejYraktaT2M5aVI5bDBBREpzZ21KUDNiemxwaGxpTXlpM0d2SjNKTUlibHdnM2VTOXhwcXM2MFBhRTJzMWhNWG03NlhFZDZuVFY0enIyMkdabitydjRtZ0dBVGREQmtuNkxic3Y5NzNUaGJ5R2lqMXlySHFjOFA5TlRCbWJkN3dmYUNCUFF0K2w3VzU0NUtsNDFSc3E0MXR3RTYvYUsreHh4a09FUTZON0N6QndYT3ZZUjR1ZnVMNkVNeEZBR2ZZWGV1Z2k1WnptMXc1NUZLZzQvdnpSZE5EZE56WEhZaFI4STh2cUZTUWc4RGUwSnhsbkU5WEcvd2FoaDdLQk00ZTBxL2xKa3lPa05odFREcWJJYnd1Y0JkV1BGQVlPZ0Z4UEtTM2Fmem5FaGp0SStQR2JVKzhpYjdVZW9pc2g5VE5WQkluTkQvY3VwdTcyUFk5SlpZenkzcjZTS1lJbC8rQjVtTzllYzZVSTk5QVlBQ3VjQWdJcjRRQzRaMHFiU1BIOTVkS3BQS2tHemVBYmxkV0x5RmwwcVllUmVqdlZhS3Ewc1NCRmZMUy9jQzhZRlVzRmtaZDU3NTZkZTAzS0FDekdvNmpiTWFhaXJzR2FOYnUyRzVhV0NkZmhzT2h5NWpCanFDaXZiNCt5Q1lmVmFySEFVRnNPZ0t2WVlIcEJnbStJanJqRFZROU80bGUwU0VnaFFQdHdudEpZdmZPeHJkM3dKSm41dXlkbEVwTkZRVzhudFVJTndsWjdkT1ZjcUh2ZnZ0S2hOZmZqTEUwaE9WRHZJT2dZcEpCZi9SY01FVlN1M1RuTnVJVGRiSko3NEtiM1NzQ1JlMFlQVWt0bTVnZUF0ZjJKaUZhNUZiSDJ6M1dqYmZLV2NKbEZmMU9IOXhxa3BHbjdBUm51VjNGd1ZEd3JzZTR0citNQzN6Y1hvUlBiRDdBZGEyVE9jekI3UVZFZGJ0ZC95Vlh1M3M3RDk5N0FzTGwvZmxZSGZnRnhkVnQ2V0ZBY0tDQlFrVmNveUNYWHNSNE05MXdSc01wTTY4Vnp3VFVHS2VSM1FBZEgrUXhoNGdrV2d0VGhzLy8yUUFCQUJvQVFBQUJUd0JBQUE4QkJrOENBQUFBQUFGZUFhdEFBQUlBQ1FJQkFRb0NBQU1BR1ZSb2FYTWdhWE1nYjJZZ1JtbHVaMlZ5SUNnMktRPT08L0JEQj4KICAgIDwvQklSPgogICAgPEJJUj4KICAgICAgICA8VmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I-MTwvTWlub3I-CiAgICAgICAgPC9WZXJzaW9uPgogICAgICAgIDxDQkVGRlZlcnNpb24-CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvQ0JFRkZWZXJzaW9uPgogICAgICAgIDxCSVJJbmZvPgogICAgICAgICAgICA8SW50ZWdyaXR5PmZhbHNlPC9JbnRlZ3JpdHk-CiAgICAgICAgPC9CSVJJbmZvPgogICAgICAgIDxCREJJbmZvPgogICAgICAgICAgICA8Rm9ybWF0PgogICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5Nb3NpcDwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgPFR5cGU-NzwvVHlwZT4KICAgICAgICAgICAgPC9Gb3JtYXQ-CiAgICAgICAgICAgIDxDcmVhdGlvbkRhdGU-MjAyMC0wMS0wN1QwMjozODo1Mi42NzFaPC9DcmVhdGlvbkRhdGU-CiAgICAgICAgICAgIDxUeXBlPkZpbmdlcjwvVHlwZT4KICAgICAgICAgICAgPFN1YnR5cGU-UmlnaHQgVGh1bWI8L1N1YnR5cGU-CiAgICAgICAgICAgIDxMZXZlbD5SYXc8L0xldmVsPgogICAgICAgICAgICA8UHVycG9zZT5FbnJvbGw8L1B1cnBvc2U-CiAgICAgICAgICAgIDxRdWFsaXR5PgogICAgICAgICAgICAgICAgPEFsZ29yaXRobT4KICAgICAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPkhNQUM8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5TSEEtMjU2PC9UeXBlPgogICAgICAgICAgICAgICAgPC9BbGdvcml0aG0-CiAgICAgICAgICAgICAgICA8U2NvcmU-Njk8L1Njb3JlPgogICAgICAgICAgICA8L1F1YWxpdHk-CiAgICAgICAgPC9CREJJbmZvPgogICAgICAgIDxCREI-UmtsU0FEQXlNQUFBQWd2TUFBRUJBUUFDQzd3SDVnd2NEQjhUQXg4QUFBQUFBQUZEQUVBQUR3SUFRQUlBUUFJQkFBRUI5QUgwQWZRQjlBZ0ZIUUZsQWZnQUFndExBQUFBREdwUUlDQU5Db2NLQUFBQUZHWjBlWEJxY0RJZ0FBQUFBR3B3TWlBQUFBQkhhbkF5YUFBQUFCWnBhR1J5QUFBQitBQUFBV1VBQVFjSEFBQUFBQUFQWTI5c2NnRUFBQUFBQUJFQUFBQWFjbVZ6SUFBQUFCSnlaWE5qbWNvQUFabktBQUVBQUFBQUFBQnFjREpqLzAvL1VRQXBBQUFBQUFGbEFBQUIrQUFBQUFBQUFBQUFBQUFCWlFBQUFmZ0FBQUFBQUFBQUFBQUJCd0VCLzJRQUl3QUJRM0psWVhSdmNqb2dTbUZ6VUdWeUlGWmxjbk5wYjI0Z01TNDVNREF1TWY5a0FCQUFBVVZ1WTBsRU9rZFNRbFF3TWY5U0FBd0FBZ0FKQUFVRUJBQUIvMXdBRTBCQVNFaFFTRWhRU0VoUVNFaFFTRWhRLzVBQUNnQUFBQUlLVXdBQi81UGZFK0FKUVRSZWxQQkUvcXRaTVMyM2dkK3NhK01nSlJ0MnhsbExOckhpRHJwTVYxMkNRM01scDVWTTdvbFpTejBOSm9KRTBDbWVzQXA1NGFOdDVneFZWNERhWUFJd1A2TmZ0QjVPZmRORXoyUWpJbm1BRDRLQWdQRGcvck9tdXZPT3BPZkdUTFdVOXZKcnp1djluYmVOSVVmamtrQ3lVb0R3MEVtVzI2SFhROVZqTmJGVkJQOEVlK0ZNbGx2U1gwQTRId2R1L0FaQVZkdUZhcFRYVHZJeldvYXlGLzdGcHkyNURCOXZ6aEhDbktDcFZhREVuWWhOVjh5UEV1WkRMZm9OMEdpOC9sZ0hEeWVSMXNDT29WRHVyRjdSNXp2Qm9vczA5USsrUEc5VjIrNWNEck1xdUJPQXgxcU9zRE9LQ1Y4NVpYMzZER1RwMFlnTmo4aWwxWlZHUnM1R25TVjFoZTMxbDM2WXkybXNrdmNuT0UyenZhd2RUQWJqaEt1eGxwQUFwcGt5U3R6SHA0VmRURU5zblNpajljamE5c0FxY2VUWG9FSzZSZkdOVVZjM0ZvY3dtWm9Kc1NDdnVra3Uyc3AvZ0dUb0VuSlQ2bzlMZ2V4YWlUTTBwQ3hyRDhKQ2NNang0Q1ZvOU1SbGwycWpPbUpGcGtIVElUNjNraHYxNE5wcGhhQ3NqVm5jVThuaVdKZ1dTZ2NiKzVNSlkzTFIzOWJQWTNSaW8zdUM2SVpoVitKakRZZGVLZm8ybGU4WlAxYlp4VVVBd2g2SmF3KzhPa3VxNHp5VnRlbEJpL1h6dXZQOFpLK01vZk9hZ0lQOERVZThSblZXS0s3ejBvNE5oK1M0QUdXdndyTzJndk5sbVdadlJtUW1UaEJSKzZGdWdWQStNYmsySisyQzVhMGJlNjZCeGZueENGNlJtNXh3bnUrQy90SHYvRjIxSFV1L1lRbHd1cElHTzhMNWVtSWZFT2hnT2hydm1SZGt4bzVGRXI4NnduMTNRRkJzV3g0cVg2Qzl6K2ZXMW53c3pMRlRzQmVwRkFhaXJwdmxCUUZ6UUdUcFEwaXY3eVRFSDVFNGRpSEc0UFgxQ1pqaG1vSS8zVjRCbDhpalJ6UE1ucmxvd3Zzc0tkcFhkT1RVUThtcVpJVE44OGl4QThtREJOL1E1d2ZZaHMzdXZ5UEZUK2h0RVJBOERhc1VKVXVDRklaSHZxNHhtZ2VQcG1TMFpsa1dsUW5NbE1HZTVhUUFqdDBpbU02NlVpM3RhbjEwV3dhVDNrbzMrL1MvcHI4emdEK2sySFdxOERzQnJIS3hsM0lnYm5GdlhTRUFUMzdzQTZwTjNUVWhGOWFGTWgwSUxjSHZsVHF0aHd0Q1FJRE8yZW9kbzVOdFBzc0NhdGNPSG03ZDZzRWp2RTBlc2Jib1VMT3NZOVNIYVVEUjNBbG5abjZodEdPeTNZalk5aVpGLzFLTGx5aDVCVm8xQlRqY09iY3VpWnZVaUIxRG80clBrYjhQUXR5VGVCc3NLM2p1SzhZNWh6Zm41eWpIRzcybUpsSHpnRUoxb2d2T0Nzd3cvUk95UkhhWDVMdEZyN0JOUHVtTGxjRG9CaElCSXhXZEU5MytoTjFzaFlYdGFzSDdPcVlnTUlTbjRPamF0a0xSeEdYakZveWVCcmdGWXdjd3dORDUyZmdxdm5yZnNOZ2FRL05TNVlNUUFGZmg2RlptT1pEMDVIWWl3OVZrd3Ixa2NrYVBQeTJTZnUzUDdDc2dCdGErQ2FTTWI1VW1Tand5SUEwTXJNa1QyQ0kxMXNYdjZjVEpHNmhZUk1jRXFkUXFsNkp4RTgwN2NPcmZiMDFJWHhnV1FsUGo2V3pkR2FZbEcxYjVGRUxENGV5aW9VNjFENmVDTGE3MVZHNENqb0k3VXNZMFRXQTl6YjNNRlF5dmVnS0cyR0N2R3A0ZTVCQ2k1Vkl5UlJzaUNuSGo2eUYwMDZlUmZDNDJUcTNEdnBXbTk4RmREbzV2eWVxMGh0OCtqTER3RGZOeFJCREg3ZG13SUU4SWNYMno5K29QbHFqS3hrVURPOVY1M3labGZWRDc2WlBBZnNQc0JlL2VsaFAwOWZyVXRqZjF2N01seC9pcTlhWWE0a0RnMTh5d05EZnc1Q1FOcEMyY2g3NDVCRE5nMStINFRKb2FyRk9rMmt3dEM4c3UxR3FHNHVJVEg4WXNCNUVBZ0VkcUluY0Y2V2ptUVJTY1ptQXQrMmpIcEwzN1NvajNNcG9sYWxMMTRsQXNyQnpUY0p6TUMrOTQ0bjltQVhPc3pLZTRBWW1pUDRONzBYazlQTkdUUUNnUDRIZm03SktDT1pFaEpxaFoyU0RXdkdRN0R5TmlEV3plS1JsQWUyOTdPQ0NWc2x3dGlDZnY1SzBoSFlxMUp3cHZsN25zcjVkbmZYTjQvalZYUGIvRFdFV0lBQnpMSzVGSU54bktDZ2hPa0ZxNDBiZEpTeEVWNW56T3F2SnFTeTNiaXEvcnJHWC9aL2pRUy8wYXpxYkRnSEwwcUVSVkxuM3hlTFk0ZCsvZ3pMWmtEdm5JOVZOZEFiQ2l5cExBWlc2STNDNm80c25Ybk1qUytURUVxN2M2L01ZcjVUQi9RNlJBWUdHM2ZUUnBSUjVZcFBjRjdGK1h0c0k1QmQvWEVCNzUxdjdlYjFkeTJ2ckF5dE8yZXJHdmFjcTRvY2xMZnI0QmhLdmRwRDlEYUdtS0p2SWFrREV1ZUErVnR1QmpGNTNHSm5YejBrdHUyYnJsbkowOWZNb2tLSmZzY2hrZHE0M0xWajNFU2RxUE96cFpORWM1TGlweTErVTBsWG9YVnRGMkJVdm9temlUZEZzTVVBR3NnK3owRkpIWi9zU1BRRXU1YXk2MVV0Y0I4SGptNnFuMFR1RWxKb29KNzRvK1JaZkJjbXRzY05wSkJoMFdndzVQbHhiYVFPdWhYSEFiUHNZWEpVbnY2UU5JOERFbnpGZ0RNaDBYRTA0WnZSbHpKV2JUTnVocktIeGhLTnBZUzFNaEdyc3FUbUxZN1FSRmEzOFpKQlpsd29pWTZlQllRQ1lzVGlBbEVlbTV3em1ncDV3V0ZaS1BuOG9ZNDBRT3B2SzBITlJxcjdMMXBuTkp4U3VIZEhqVDBFK1VZR1BlUUUyYm0vNFFGQzlXSFVIN21NR2ErQmhIeHlXakJjdUtteUNTU2FjdEFQQWdrQ1U0Z25LbDFTNjlXSk9JMkgxUkozTGxHNlN6Y0FFN284Q2pEYXRSWGhDSElhY3BSUVRHeXRFdFl5NzBydmVqWWVFSnNuS0JEcnR6dnF2bmlRWS80ZVUwSU5pY1FEc05vUEtwYUVka3BULzlROGFJaTFuT0hxd3pjTVhOaCtsb21BQzNIcnpVSGhobUNlRWY4R3Fsd0IrRkZ3YmdvS1dXTklGZWZLaUZIVnFWUzFRWmRnQXU3cHNpQWs0Nmg3em9aQnQrdXU4R3F1T2ZERFMvazFPZkVtbHdzL2xTRTJmYVd2MmpENTVFazZ6ZzJ0MXNPRlVRQWFJWVdlL01xOUJuakhqa2taa0l5VnZuZWZrOTFvK1FVUm40cEt0azFNMk5CejRGcHRGN1ZJRkFVRDRVRjJCU25zb0tFeElZQVIwRU1LNjQvSEc4OW5OeW9mWTlBazJsUEthU1NubGlkWis2ZVR5OVhlUWhqUDl6QVJzWGExNVkzSzUwcnlzZ0d2WjlwQTZod3Q3SGFxNGwycFVrNmswaXhLVm1qR1NQTkhkT2dMVE9GdStPV091azhST25CcUNFRmw5amlCUHBaZWF6eXpPQ2lLU0pXUjBleUJzbHRWcDgwNndFWkhOTUUxUWxlWWNRckc0V0JmZ3FjSUhMWHE2ZG9vRWljYkhiVjllTTJFcVFDYXBmT2FzK1BJWWczTmllRno3clNDOE5pRkxJUnhaMVE1UDNWR1N6d3BsTjRITDZJNVBjelVCTEh5OXJqV0pZWnB4TzdxdWlKMEVwK1FGNVNMOS9rK2Y4ZzJINWNTYVNPS01heFYzZi9oN1owZHl3dWR1SmpXOEdNRW5sL29GUXY5bmJKbzRkNm91SEFZK3JRVXFyK3VjbUppWlZlYzdWLzI0WDVPWS91N3FTbVFuQStJUnJES09sRnBtclRCTEhvYTdaM3Z4MklSc1R1MW5LZ1J5OEV6bVhWd1JjZXpUQ1IwdUlNbG9hOUMxOVphWG1QUzJjZkpzbGVjNG9VS2lmemhTWnlqOFN2Q3FtcktGK0RQWlI0T0VvWGRsMC9rK3IyTktNck1oMGJuV05uQVgzQVVCdGdTNnZJU2w1WjNLYU1wL2ZiWm9sOHRrMyt2OXdYeG0yVVpuYVJkQ2RleFBjQS9GN2U4cGlVajRvMmtqN2dJMVhQY2RRZGJGZ01raXBPTE9SUUVQbnRRNGFzYnJqN2lKR09NcmQwQ1lVdnYyZm0ycURaU0lyNmw4aVVQV1NYM3phcERpMmJ4ODFZaEFDbDZwTFVsYUY3QWIrNHI2SklMeVFzYUJzdkFtbUszRXVEeUJiSEwyZVB3eFozZFFTTzZpR3B1VUp3bERlVXM0TGMxR3BENEZ3U3JZWFZBSnZsaXZYeVlBcVM1YTRyWnZSaTVuQnI0TmRVMnRkZmJ3cjlBUWhrMkRvektReXJtYzlSb1dVblcyKzdQSnRITWorbk5JK2lERjJ0Q1ZZM0VWaXEyOTlTaXlFQ3ljeXdMU0VQUWwwTVpiTUN5STdIWWoybzVIZEtab05GZzlLWmVQQkVWWVplV0VmVkh3TWJGTlp1dWRQOWJURmF4RU11Z1VDS0FKdnkzcmtqa3NSNzRkRDc5cTF1aERxRi9VWUtPRStzYUY0Q3R4SkdsWU55eVIzWWZQTHJYcExtRjY4eTc2ZERVb0U2aENPRnQ3WU96bGZHRkVxNkRqNmkrWnphRDNoN1FJT3lUYlJ3Si92RTdHV1Z6V0lVWExvZC9Ta2wvVHNXWjBJM1RzaHVkaFc3b1hVMks3QjlqaEtrNmVVd1ZSUFBFTkxiV1VaclBrWnZmYUZHclVsVHNtaEs2Sks2U1cxUmpxTlY4MUprVXZLbU9MZHQ3bFlrTDF3OC9zUGt1a2tmVGZVa28rVUJCKy8vbGpRR1NhaEtkR3hUUHBDK3E2NXppWFl0dWttOXZCM3RCWHhHWXEyOWo2ekl1WGErTHUxTk1YR0ErR3Z1L0Y5cTR4QWhoZzlQVU1uRnMrcWJLTUU2WHR4MFp4bElBek5nYVlmbSszbERIY2xTaXR4OEpBaTdMUk1YM04vbVJqcmlOSUp2OUFGOXQzMFU4MTFVWC9PQTJPd090Q24vdXVUd3RJOWdSRU4rcVdYRStYUjdaeXBSbkNTUWlXY0FKbWNMWmgveVp1cGhJNDA0TE94SGdQWnZWYVdXNkxPSXZHeThzYnkwRVdUZ2V0WlMzdkhvc3AyYndsSWtsQktMZGQzNGhLMDFpRHlPSDJ0WGlIVjlTa3ZqTlEzaTFpVVpuMlJQYzJsOXBMMElLeStRRlI2MjVtTTZ3MjBWajZOQ3VoZGNnbzI3NUxBTU9WSmlzNE90OWt6WUxFc2NScncvYUJ5LzJTTERydlVHK2RGbjZGcG9SczhyR1h6MnYzZ3EvNnl2ZFRkV1dMQVNDMStjMUVuZDFBMGtqc2dZTEcyZUo2Uit5WVNGVUFBZDV3bi93VmdCayt6M3g0ZXZQOGE3bUx5bU9NL3NleWJtbzlKZDkvRnRWQnN1aEZ0RzhVclVUOFU2eTVXVEVENW1sLy9aeEVqY0NNUGxnb0lWdkh3NWNlVGthTEFhdmpocERmOWJabUFxMFdab0luZFB5SnB2Z09TeC83UC9scGVNZ3FlT0Jmemg3ZEgyYkU1TFh3Q1h2YUllR0ZjdXB6d2tRaklaOG1lbXRHdU1BRmJzYmV0SlRpQVNCZHpHZk1kRUlQeUc5YlFqR2xjck9rYk5kVHlMRW4zQWRoQnRGWDVmY3M4a2FYU1BGeWpCMHRyK05rbjZkZCtoeU5VS2ZCZk9WOFZsRWM4enBKaW0yTUcvSVNjc1BPTmZKTTFDaFZVYkRUZXY0bHRSYU9sMEJNU25mODdKWGZ5cGRhbk1rWUtZdFdNVGpQMThxL3NQbFVBam1nc1pqZzk4bCt3VUI0eFZObzVOaDBXUy9wTGp5VjNSYzFyUGcrOFdENzd5bGxJNCt2S0xONjdDQlJQdDdUcGpRZ2JwYXdEZVZVK0NvNVk5cXVpZGpwZ1UrcXk5L0V3Tk9XT2E2YkZLMW5uc2QvSjhMSEpYRXlpWXlRa0U4L1Fmb3l1QVpuM09iMTd6N0VUTmNBc3U4aExGd29mdEVVOGdqZThlSEQ2NlBHbE9DZnI2NUNtdENSc1VNVlBjOTg4UWVJWEVmVW8rc2YwT2JhQjRNQXNlby8rRHQ1OGpXWUYrTEpBMUlvSHRXZWgyR0d0K3JydVdiQTNGRTdLOE13eldvVFVMckZnWXJwRWs0UmdOeWJiekpxQnpudzAxOStTU3ZQQ1o5aDFpRmxJdkc0ZXJnZFoxY0ZTRm94TlRocVVCa2Mxd2h5M2liK0FZV2R0UW1ueWp4MkNQMEFyYi9KMkJqWHlTNzVYbko5TVh1V2pyZnV4RzhwVlUwQVVQM1g4dG1EWmtsMlIvdzRmZHRmN1lQUHhJdGtCVmExOFBCY1VaaGYzOXl1M25oR2hzN2RVMFNPZm50ak91RXVjVjhCM2praDhEUEpWQk4veFlGbFVGMm1mbllpZWtLT3JMNkN5VndDYlhnU3pYMXVKWjdSVGxjb3RHSjVkK2xaZ3RQVkd6ZmhlSWtEekEyako5RmxPSXVocE1TcGgvd24rTkwyWS9FTFk2TXR6M3VwQzV3U2RrVVFwdDl0SCtNQ0pOeGowNVMxVFBHWXhtcSt0czVKUnBxZVZBdDAzTUt4ZUhyOWZrdG03UitRVU5idGtSbVpXeXg1QWtyZUN4S2lGb0o3ZDNqK0g5eDQvUVIrL2NyQTlEcXRySUpJZ0NsNEJ4bk1BODhxY2VpRmxvWThWZFBzSGVzTExmVUwzWWYzNUlVK25EQSt6UmxWZGhMblRtQ1dySkRoejVTS2F1SEtldzFVdnFFOGp2NVl0b25LUlppU0ZoQ1RDUzNtMGhqdWxyWk80VGxYMk1idTZEUDExZnBZSmhUSDlnOUFFeFVOUkJlaGwwWmNuaTFWd1RDd2cvdDRwa3ZsSUxnbmNwWk5UMy84aWtJV1FiR2xraWZibzZwcXRGdzNnNGV1Q3FBS2NjUlA0VXlDK29DVEV0NFE3RXpYT0NyaGlFZXVKUlhkSzl6SnBCTzl6WFRFcHNreXJibFBQc053aTN5MjIvWVN1Q0c3UEZvN01RcllKS1JicGRXSWl1SGYvTkRwSGRVbjZrV0hROG5PbTNxb1lTdGFNb290YTZ2Y01LNjFLNzBlKzFWT0pjaFlWMjNkSTNaUGdRT2llVWVWZThmcUJJd3lhWnM3TXRvdGwwbGt6Z0NGUk5DODQ1VzZqaWtCaFoyOWliQXg3RlVXSnpxZzVCS2JrSDNkcG9vU3JhMFZ6Z2dKMlc4N1p4UXpBVUVsRkxRZllPcmw0NkJnWUxPR0E4RTB1L3prbWRrcGplZyt1MnIwL091QzM4MGY4d1hSYXBZNVVqcWNrUDJPRW9uTGoyaGFkZXRRYlNDaC94ZzhrOWhlcU5aZmFyTUFwY2dIVnpCK0JxK1BVa1l1VUhDdTB0a0s4bjRVdzVrNGhlRFU1RG9Sa3RiQ3B0aURIMGhSa1pBdXpueThZclFKd09PUk44aGNYQnIwQUtIUVRpNytOdS9KMUc5N2hEWk0wbk9WT0JXVmN0OFNYUkQ1SHJMektGTjFxbm5OOEZwZHBxN3BxMXZ4NnRVUEFJdVkwbXZ6UUFyRU1oUUI3aVd6K1N1TmlTTTN4SGxKUkV3UDlYOU95U2pVaTB4Z2h6Unl4SDAwRmtvT08vd1h2UHNnbWRMNmJpRXBYYzl1Z0hvSFhRS1JQMjVYditzZjEvRzNtd1FkUHFPejV6eUJ4YVltZkZhUFhaYVRNMW9xcGt4cFRuZnhNbWk1OEtidzI3Rk1RQ09aSjZPVEJ3alR2Z2lnWStTM2NEb0hvUmdjSy9hTVhzN2tCQVo1MXl0aG12bFdwbjc5VDhVOHdrenVGUS9mS25vUkhrd05waHp1RVA2Y0lXWVlZYnRiUlNpR0d1SlpFd1J3Z0xqTzdTVGJ2b2xDbUpDdTNNZUhjOVRTYnpMS2JhY3h0UC9MaEVlZU5VTWVzQnpDNGlzYkUyR2JUajRzVzZRZ05UNEMvdGIxc2FLTkdWa0w0QnhYeitFYWpTVktHY3NvT1RyNld4bTFOcVlEbWpMRVZwV1ZTVTZyTEVndFR6amZCbnh6aUcwd1lpWWErN0NmYkFEUnlmUDhlNUVEMU1EdnZTMWEyTHArQkwyV0lDbXA3Z25FZllnZzBPWFYzMGF3cEs3MVYzUUx3a09IbkVaa1VVRER3VXlrc24xVEExemo0dXNhaDYydzhWT1JFU1Jqb0J2MWxZZnI1RUd2MlVNV0JaWHh4SW50bVV6NENXQmUyTi9BbWRtdVQ5NllHSk52b2NDM1o5aE13WjFRcnhMWUlqUEdSWHdEaTRybW5nSExjUzAvL1l0Tys2MjNMWEZSQzRQZWRYNnhnU2ZUTjRUUjF6aUhlbmFMcGlmRFlSZHJrZTVQNm85bmttV3dzRUV3YVh0SmE2R0lEZ08yZWdkK2cxblpmcnFKK3liaStxY3JEUHFUS25ZRUJQMGZLRU9wLzB6UjM4WC96eVB1bldaVC9kcW0rRjRmcGJVbUt5cUFvU1pCVlJGVTRGSFpReVZJYnM5UXhVQnp4dElkWE1zdThDdUpkbERTbTBqdStrUmZqTXhzZHM4eE9nd2tTOTdZWHdUV2x5OVhBVk8reXlqR3JRanJ1QitqS2N2VlVxakE2bXJ0a1VvSE5uN25zTjViTjJERW0wMm5LeG9PQkJHT0lGeDRsbTc5eTJxOUxKamxTOXhaQWwvNC9pZjhiRk9UMm1DOGNFeHRrOWh4S2xaNG1Bd3pGejJzZTdvc0dGbjFLSUtjd3pKaDRUaUduaU5XQ2NBSllIMlA0VVhHRUZxVTlYVldLN2liV3N5enZ6YmtIZzlpaE9KazlEejB5Qm5iWVNabXJESm80MWVlSnV6d3lUeFRIYnlGQUY4M0FVU0ZuclFHcjJCTHNydVREbk5zeUZOVnZOR3pRRmFyOTBEbDVJZXNuSzY5S0d5dHM1RHdqWGtOMm1ybUZ3SDBBNndGUkhoWVM3WUtUQjdlMzJMQzZ1eEJrWW5peUNyTS9UeWgyQlpFOXl4RERBZk1Uc2FqS3NkQnZHMDNlTHQzbk5nZnd5YjhNTnl1VXR4TXFrKzdxQ2hWa0I2cWQwem9ISG9PYnIxb0pTZGVPWFZPTy9TNDE5TGpIMUh2Z1Rwd21SWlZmYVhyV3NNbVVBN1pydTBockpVcFNCVUM4ZFFGbUlCdXhNbjRONkJKOGR4cStZUUxHd3lFOG5lNHVML01OOXUzMUo4T0xhZUpLd0V0Ri94Tm5VNStoNzU0NGRQekdZZGpBNzlsaU55ZDU0cnFjTk85MG5lZWNZMXJwK25iR2oybjFQcXFDSGRJamtZU1k1MkMzSW5DdUd5dmFyNTZZdU5XWXRqVXZTV2k0Rmlqd2JMR2VmeDM5WlFmQURrZ3Jpb1BGa29VVEtVZ3Z0YjR1ZFd2QkJKNjJ4NmJ5VGJ4UzRxaEJzdlVPZ01WWHMzbjJKT1RDVlFxZ1hpK21RTys4TkVBV0tOVnQ3OXUrODViUjVlcXBuYlRwYk11V1M0bDAyT2hITmdEck8zZlltTnhQRXBiUUFkZTR0YzhNdGpHSm1NMHMrb3J1Tkd4VHQwUDhSYk1tOHo5M1BEakVKR3RQeVFJZXB6N0k0ZkFnNW1mc0lEbGRHelRqQUl2T2E1eGxBR2NaRzkvdUFqbVppWVBKb3Rmd1lRaVdtMi8rTGJTT0tBZVNaZDIxRUVCQ2VUUnRNaTJuQ0Y3aTQ1bDJEWjkyWDNJdjd0bWM3UUV2YnAwMTlONnNuK25KODNqaUE2akdqYTFSQlRFeEREYWpMQmpDUDJEY21SaTBrVWdNQjVnOGlDNEpEQmprR3J2SEJxS0k5OWsrVmZuekh3R3M0VVZHdWVUU2NISDZwSFZMb1djZzA5d1J5NkxaaGg1dm5tWU1KWThGcEtmTXVNVm5vVW0rOE11VlY2YWxUWC9ibFA0djkwN1VvVjY3dzdpU0pJZElNdURHdlNNMXNKbENIeDlWS2xaL28ybDhsRk1wSWR3YVdRbEViUXZna1plazFjTTdwL2NyM1BLNHBRcjhOcDRVWDhLaDZrcVQvanpqRmRQWHVPOUFKa1YxVTJSNmU5M1VjaklKaFUrT3FKdUpRSFkzUUdvRXFWUVlUaUU1WVhhVjF2a3JSVjRWK2VWTzN0ZWJ4dHlqQVA2Mm90WkdJSllOdWtzcUJ3SWlnQUlUTWIvM1RVVGUzUjVkUXMxeTNoWkdDZ292cnNxblZpVzRXM0RzZFFUL2dQbUM0K0xFZHJzZk1DNzBmOFhNOGdSVUpENXdPVmIxMlkreStSVzgrclQ3NnZleVdUR254U0tvbVF6MVE0NFBVTDF5V3ZlZ0ZDUGh4eVpZMmVxZE1ocUZVZUp5WE9rSjV2cnFrRUk3Y3kwS0JBY3VTRDFQNHJKeGhaY0RGYmlEYmRxMUZMeUdMWWZPTTJMcU50ejVBalJ4U3RwTE9EM3JBODBLYjVNV2VLY25zS2VjdnJlZXg2VGFDTGhxYmk1Z1kwWDEzcEpscUZBbTdvVHlHRndyRGFPV3VLRnhqcHFkMVkwVkh6YVpnWW9xNWo3OGwxYy9BWi9PWnVvem8vQUxWTzl1cGFEL0EzZzdTNzRHREV0UDBoWGhOUHNyVTdla0hSTW5ycmRjcys5WklDcm9DWkNZSE5IaktJWnlRd1gvQ2V0ZVM0a3hGTk8yOXFna05OUFB5Z3lEck5BSXZPeHlQVVdjQjJ5RVppbVkrTUdiS2xEVmRFZXVBb3hZTkFXdjFVaDRZZUNYY1Rnb21ER0t3WW12RzI3YXZVVVkvMlFjU2c5WkgveEpHNUs4eHg4cEcwZFMwWlZsNFJIbmVlVXJGOWo1SEZaTkd3NDNoOUNmZ2QzQ1hYT2ZxTTFOU0h0dmZkNnM2dk5pSEdCVkVCUUI2cTJGYWhaanVmakpJaC93Mi85Y2JWSlpYSXlVa1QvbEpWS1NNeG0vSkFlbVR0by9ib2ljdWlpSW9ld0ZudHN4OEZ3Z1FJcTBPTU83b0o5VmdQeVc5THRvNCtueEJRcmtBNUJNekNmOWJtUW1xc1FHRWdKOVBDeFFqa3JVQW1xUGJiTGg1d2E2Mk14N3hDc1ZnZGtVMVFaUlJXa2g2NmNtWGgrLzRHS2RSdDVlQkZMT0luL1N4S01YeWxidzBCRjFpaVVUaE42ZnRuT1NNeDRPQ1doRVVjMlpWSFYzWUU1TlBaL1ZnWFpQaytGNXcyN2lreVpoVG41RlhVaTgwMHBNRFVIS2pGZTFwNVhUVU5pRkUxQktxUEh5ZG8wR2dqK2haU01jTHBwcWxYMldXUDVzelZyMlFBcktyTm1oMjJ5U3ZPMFNkRWdQdERFbU5PRzRKQ2VmSUJUM0gybVVKTnM0NWZlVTdib2U0OHVNRTMzdzE3blRZWWFONkV3Q1NjbWNBMFBUUHQ2eTVPOFdZRnJvRnVHRlFndC9pYmFwS2VDSXc5OHorS2JkZW5XNEYwTjQ5eVljeXNlVkxOUHZiN2xzZ293dU5CcVJvaHJKNjMzdEswQUl6a2RQR1JWU0hMVUdWZlB2clhpRm5TbnN1QmlCUmhWQnRDR3lCckwyNmE2N09QV2ZZZVl4ZzdXanl3aFlzZWN3ejF6NFlOT1NyTE15cXAzc0lBU2ZodVdLei9wb3ROdC92MWxSeWNYMkx2c2Iva2Y4MUVxamU1d3VVVVhLMnVsb2hyZUJMZkF6Q2F3eFdKWkU1N1BMVGFZV0JSb2FEM2t5aFc4ZUZ6TTVzclFOSlRYYVd1RW1zTXUyMTJLajV3eFFrS081QWgyYlIzZFhEaW1CNS9sQTBrTUxNQUhIWnRvYnFPU1RYNWM3ZjJQam05Z0s3T0FwS2IyS2V3azkySDBjOXN4YktxSjhvMmUwTTZjKzRDQnVsR3d0ZkJVUXZOMHpzNkNMZjZ0Z0k1cmFLTkd0Z2YzekxoRm1iK1owKzlJWmtKSWJtVzk0Z3ZNWE56NFVRWVh6OXBRMEJwbWRNcmVDUkIxRjdOT29Yb2JPdW9ORGo5MStlY1JCWElGR2ZIelRQS1dSeE14dEc4R0c0VHdxUXBubFpENlc0TUNKc0NISVExa2w2SGd6YS9wOUlCOXZUdkFoQXhGbGRHNHJKQnVkMmFNQlJUUGYvcVZ5Zm9yUTcxWVA5UnZGNXZqK2JQbVlLaERlTXlIRXhZSkZLRjhFYm9kczBzWHZoTU94dzFVcndnZmlDR3VIVkxaV243RE04VXMzSGVaYUVOeGJKM3hrQ0lZbS9aR2FBL01kR01scVVYcGlvai9POU80czJ4VDc0SG4zQXdlaEE2UG0rMFlpcDhxd0FOT3lDUno3RjdTNEVPK3JiUkxXOHM2dkR6emlxbjBCYjFkbkVraWFsRGxBMXdOWmxZaDA4U3JSMzJPdFhhMUZHZUNUZVI5Y2x2RU9MNCs1RkFDdEdNbERsNUJIUlpDWXBhRzIyWUoyMEVJWlVrSDdmTkxmcldMK2hZdWJxTzU5Z0x4SythR1dzN1FrVEFOblllYUd3eWhJN0xZc0hYcVNTSlRpSnVFd0pHVHRHSDRiZDJ2YWlyKzdIei9MSXhyTVNpTElXdXZxYVNDc25GNnBIY1MyQTVKZitiTWt3dXJ5blBiVTlNMElpWmY0KzZQYmgzQThMNVgxbFBjSW1GbWFTdjczVGxTVEpTNzV3YzJNazlFcDdNaTdIQlQ5c2tNU1pKWVhya3VQTjR1bVQrWEhXU0tBT2MrZjFKMVdmTjZIVGlqTFN2dGFWbVFxWllIQWZtQ3RrTHkxVUxlblRUbHE1Nm1TK296OXc2bHBxaUFIenl0QnNpais0UzNHSVdGaGhGWittZEJJSmYwb3hFYUVyaCtyTnI4YjQ0Z2ZVK3ErMVRjWGhWSDczeTlkakw3b0JNUHRDRjUwblVmZkduSGpxNC9NQnl2eW9hYk1lZzdrdW9BUEhpV3o0RE1IQWdHSWIvVmRza2lXVTdWcWNpTnowM2tjWkFQQXMxK1Z0dFFQVTlTNXVDMldDb3RiUHJGV2dLRjhsU3lVbzMzZXRsbXVEWjF3MWp5MURKdmNhQW9TY3ZSbUN2NkZ4MENISHgvY1g3VlNqTWJnN1ovODFxbXZSeWpnTzQ4a3c2VW5zb0o2MDdubGUwYnBqV0FwM0F2ZmtMZVpraXJlQ05KdnVmcTJxaWZ2Smxmanl2dWhoajhDZ2UvcGhwSjBVMEYwR004ZmcwVG5td2FMVTZmaVJlcXZiZkdjWlhRNXI0TzRzeHBPK2hHbDFwOEdOeUNLWFoxbndqcVBIRGNSTWM5UUhWVDZTa1k2UEgzMld3ZVFvbnhadVFsUzF4aXY5UEVEd3dvc1pueFZXK3JUd3NNS1VPbEV0Z1QxVUdHM3d5cDloR2pXcUpkQzlRQ3pQYm9oNmY0RlU1bzZCZ1pnR05SS296cnI3YzU0K1ZBRDNkaGczZ3ZBTTdldUl5cXJsS1U0akpuUEVSSkVVNlQzcHNSR0NBSlRYcUk1L2NWNXpjVTNVdkJjN25xc3hWVk9XdFMrNXFqK1U4NXVSVTZ6NlhsaHBIdXpnYVRHbkJ6L1BScFR4RFNjS0ozV041eEdVbklqT1g0RXNjREwwMGVXdkUwVmZDUmFJeG1ZL2NLeTBTZzZFdDZ6ei83MnhFN29MWFdoR1dJVDVJcEg4ZllqRDd0YlFOTlE2ZTNJUHR1cHNUTDZpWlJuYllhOEVDZUxRUE5xM1dlNGg4dk1mMTQzZHcxaEd6Z0t0NHcwNlhpOHhVMENwRUI3YVhyNm80TGVYcy9WRjJMVDliWE53OHNEKzc5QXZWQWRSWldJYkF5eENVZXdCcjlrK2J6NlZvSmpHSzZoOGdLT2NMelJQajErRC9XODZiOU4wMTRpZ0lIMEg5SE9veGVmVXBwWlNGQXJld1pTdjYzM3cxbmx3M2NQZy84eU5QdGMxdzdNNDFEMzVqWUdLNFRwZ0gyUnZNc0VNc3YvYnZLYXlyTFZKcUR4NHdnSXAyOWRjekRqaGpYUHZLamE5QXVYS3kxYVFENzdUeW92ck1qTW9mSDNVa2IxWFlSZVpST3BmSDZpakhLc0ZGTGlrL1FPWkZqbVNHZnF4Y0JWM0Yxb2drVi9wb1luMEFuWi9tV3dPMFNLdkxYeEpySlhocUN0VVVnSWNpZnNRaHhTUjRBVlBwUWJDMVU4T0ZueHlTTHIrSDFYZDBuT09Bc055SklnUnVJaWNsWktnMjRTTXJEd1V4a0NmVW1YWnUwVDdVNHVZM1NBWXZlYXJUN09GeFVqWkdCTEs4cndERWw2WmF0RUc0by9mSDhkR1JBTDVGSnkzT0c2cjFFcHAvejRBT0ZNc1hNOGhsd1ozdHhrYVJnTEFGN1VzMWVhZENJN2NqU1JPRVVWcmIxUm1aTERPTjd2QmFDNlRCVWtwNUR0b241dkNrcjlsYlZGVENKRWd2RzViNmtrN1h5UHlqc29zcHhVNlZTeDRXVEZKdG0zNzdSYmdBS2k0aDFKZzYyOWJvMHZhVXlLWHcwdHVabkllS1F4bXN2elBtV2RJQUFyNmpYTTFWRFQ3WWpIdGM2QzhFMmdPK2VmVnBtWVdBMWFIZnZCTnVtdEtkYlFuUUVYNkh0bE45cHRwWmJkaHJKeFVRN2Y3bldXeWozZ0ZmN0FhLzlwckxSVTI0RE1TTWkycGlNVVlFKzkydFhHTDV6Vm55K1NEUzZ2OXF4azJOUGxSOVhLSzAvV3dqKzVSMWV0UXcvUHh1dkhPd0lWWmV1T0ppTEFrREp5dll0d1ArVXcyTnZQSzNDcUlnQk9XT2IwTUZvMkh0dWJ4OFlCZG9tM2N5ajg3RmJnTXp0VHdoc2NETWxxdWNrZVJrWjJqUXdYcFA0QS9ZV2lNV0xpZkgyb2IyUUdFTVB2ZGJQRnJpbm5wK1Zaa3hLN0dBSWFhOExHYUZaWENDU1V4bWg1WDR5a2VhSVBVSG55WjI2TlZxOW5BOHlGNWNsdWNnN2UyMEd2N1hUVE54QXQrMjBYc2o3Vi94YVhlTGVWK21DckVDaHc3TGliNjM0MWkzcTd4Szhlbmk2ZEVNZmVtWHRMVHl5NENyWnF5dm5GM3haQnlROFdMbVNiN2xaY0FlTGRZcmZwbWhTY3ExWFFTcDQ4YnEveFNPZG8rTTFpRVY3MFJmMnEwTHl1eGZ6ZU9KVzlJVEU3QnF2WTEyVFdYckdtdmNNU0piRWkrS3ZPQVVORXEyQlZZT2R1ejZFaExVY2c2N0RIK21GWFBKbVNEMXErZXBQOCtKdmxWWHo5cXBBb1A1SUNOQkk3ZWxFcDJ5bkFqWDhPdlVZTEwxekc2eFpOUVF3RXlrbitYVmRlTmViNEtBM3lKNXhodTA2WVVUM0pOTmdoZEl5TlM0NW9vVXhUUXU0L2x6RmpzQTAvWDFHV002MG9TMW5kZ0Urb2ttVXQyRGFHdE4xcEFIVVg1QWhkR3ZYZWRwdEMzTlZhUUtBb2RHMjVSTXBTaVlORkhWZEN3ZEptM21yR3lUbkJEZFNwM3lTVGFkMXZPQUdyV1hGZ09ZSndZNUNjei92MllYcVRHKzMvZjBuTjdDUDVyaGNpNnJNUzNFOTJWajZIWXRNdmpHbVYvaTRHUUttaXcrUWF3L1kxcVRXcWJTUGdZdjJHejJOajMva2IrSHIvZlhhVVVqZ0VuSjBOdEdrdE1nVktYSWRVNVJOVnNQNzY1K3E3V1pDNjVBWFdnbGFMUjZlV3Z5NUhqejlHU2pJUFFTbWowNm9ES0dqOExNVHNDZ0JidW5Pei94U0lzMVFtU3F3cWpScGY2b0Q3cnA0V3hlSzNUOW1PU2JGRnpXMktndE0zTW9oWTVMMXFPTmNpTVUrRXRLK3Q1aExvSjNCd0RVK1VoaWEvWTNjTXJHRjNFdWJRY25TV0ZvR0dlRlRBdnNQcktVaGVzbjExbkxER0hJdUJ0bi85bkJKZmxiTk1jeDVxbXJKMzdyS2lnWWJpTVZvWk8wUXpKNG1BSUVOemt6MFVuUERsZi9zZEFwajJwdGdhTWZuckM2Q2hhOEVrUUtxWHpMazFkWUdFc1F0T0hYUEZMYjNFUnNsd3ZWNmhFU0lDTE1RRmlQYUJXS3BnY2ZmSmJxZUh6ZHh0cHlKNEVtYWJZb2djUGxydHJHWndSL0RZemtvU3VWbmlYcXdaN1k1d081Sk1HRWx0V2xVTUFNdFpOMGxuaHh5Z0lzVmZQdktxVDBxKzBsdHJSK3lCY1VVdWo3ZFhERkdFeDZwQ1JxSmV4YTh3NEV0WElxdldOT25WRHVBaitoUVBZZTBEU0hoZ1FLUTNIaENLYUtUWis2MlZVOEVOZ2ZYdENDeDVTdm1CdlU0Rm4vNXhqd3BCR3VBQ0tMbkUrdWszdUpZaVZTd3doemV1NVZyaWNUR0NtcERhUVVLL2p4TklnT3EzSEJLQjIwUWxNZHN4bUY4eTUyaytWVFQzU1pZZDNYaEZBUDgzd1dycmFicnVqa2xFV01qMUZUYkVxb2dMd05HTmNYRm9sajJtR1FOS0ZTdklZYlBPZVNVTzcrY2d6Qk9UWnJaUDdLQmhWUGM1c0Mra1BVMHlqVXpzamNHaWxkNEE3bER6TkFzOEFDZnROK28yckNkaU9zN2lpZUlLbGNqMmY1WWVrNzFBaDBWTjY5RG9rN2htZEFBcE41OGlaRUNtMll5MTJ6NjdnZXIwMlZyck00R01JQm1kd0hZN1A2VkZvOWdVU21hckFQUkVEQWk2aHNtaFlMTWdCR3JsTkNWbFNCZWY2bnhxUzViZHE5U1puak9FNW5YWE9nN3ZaUExPOVY4Zk1LbUVDNDFpTlErNEVSc3V5eml5YzJIS3A1UDVnOEQ5M2tRMGw0YXBFNkJSWDdYM0lsdXFBVnpSaVN0U05DUHhtTkR3b09Hc1ZJdkJRU3orS05sbEtOVFc0WDVidEZUZFJ2OE5uN3ZZQ1diWUtyd082dkRCVk5oaEZjT2FSZWNHVGFQRFdhYUdlaGN1TGhHVmEycDlxamtMNm8vR2d0Nkg0aWVoNGRTc0txWUxOOVQya1V0NmJ6NEhBejJmTXpXUW02djE1NXNmVlo5My9LYWxla21KNEZtVGN3MHNGN2phOVltZTFYWHRnN0VmVHZtQVJESEpXb1JBK05kUnZOWDljU3pUM0tyVkg1bDVMN0dGRmUzRGVRL0kyeVdWZjc4bmF3VXpNdlE4Y3JCYk9CcjVLdlNwZnM0ajhQVWxHVW1PVENQQ1c0a1FWcVpvWmcyN3NaVWN2U2lDMnpQdWhiYWttck8wMkk5cmQ1Qndmc1h1MTRGNXJyMnZnZnhscnF2R200bTVJYURWamhZYzJSTmNtMm01UzNxS0Z1eHZHNzFnd1BCckh5T2x1L1ZuaUJiZ0k1dDBOMUpHU3U5V0d0b2cvQlp1YW5NS2dCeHZUV2tkYW9nd2pIK2hTMGY1NU53U0NQaU43eHUra2V4bEpqZVMzUWxQSk01djh5eUx5Ti9pbGUvWFkwNUxrWlBrTU1NaFFYSUNzZXhwVXE4MDdsRDdZZ1o0dG1CVU5kQjBRTXBTbXA3L0JLRVAvMlpOcGI4Z2ZTMUNBdkZpUklLSThlT0hQVGFhenFXeUZKVjNWZVM1ZHk3bTZpSUZydkpOeTNmSkJMRHFzZ2F0YTVzcU50a3BZUFhoVXJPU1ZoWjg2cUJXTHVFajJYUWRyNXRZM0NhTWhjTmtMZ1FhcERGL1FpWDlucldVRm9zNHAxSVRtbFZIUTQ4MUlaVlhlYzBmWkszcWV4OUVCUkJ2QzhrV3pHaUxoYXc4dTh6UHpiU2E3QklTZHdxMFhIMEEybUJKYkQ3d2QrT2swSlNEcSt5SjU0V3ZpbzhvdFo5b0pqOTVhTDZPb3pYYzBEU1NnL1Uxa2s4LzVRR2sreThpcU15Z0RNOGpXNmJ1NUM5TFpLOXB6bU16d1RSeTRYZ0N3aE12VDZjblZqRWMvWkIvanJBbkZMQUlRaDBaQlZyU0U2L0ZBeWRXZ3FaNStoaW5xU0hlUXhaZW5iM0FhUWZwODdkMDlDTVI5OTNiOXlFTitSNnV3SjJEWFFhR0RmOXZFdHRrdGFJM2wwU29BaUxyWG9XTVo3c05WaGtlYXZpaUFLVUViM3V0Tm9UeWROcFhsMk0rNXY2V21aVXI2bzlJNEpxNk40VmJWenkwbjZNdVNPdmlWQ1N0OWtRTmRKdFhGTE82WGlacUVQbXd3bkVpS0NCd1AxZHE0WUNOeEVrMnh2Y0hUc3JUeWZlL2xObGd0dFlBWWduSHcvQXI5ODduSHVTeE03d21LRWdYcGQxTEdmYTA1elVEUm1BK21WQzFKM0tNN281a0o3WW1za21uTHNMWFZnSXNuaXFuVmFLNXRjZzcveVJVVy84VWpxWUErTlJBN1A3cnhYWkErU3h1dVIySGszS1JFbEFLTjdnRXlhV0JkZjhNd1dMOE9lQXo4RjJUNmJKU1JTVmhnc0ErRUVsQS9JQVRBZGpuWU1kTDZxWStpWDBBM1dhWEJlR2FQY0FUUGpsSkx2R21vUEFCdmluOEtXRDRGQzNFNVRISHF3VGhlUTYzSlRjSjVnbXpQWG5uNXBhSzAzSTNtb0cyMDYycWlQaWhQMmxxS2w1Y2lpNXhmRzhOVkl0QTVxamxSc0RNUGlralpqNjJCSXYxNU10RWNRZW44bnV1RXhJRmQzWXZkR2ZpRzg2dTk1MXRQSjRxdGM0STkrbzdZeU01Q21IOTJOQjlGc2lXNFpBN25scldFN3MvdlVJRjB3eDFmQ2dnOVhqU0dOYWI2eWNmalhyMHVmMnNiTkxJZEIyOERlMFdNU1NQa0M4QWJOVXJHV2VHNlhnR21lWVF2eC8yazdpNVNwbXBZRWk4bFROQThIbHB0bk8ycS9ZZGJlMGp0bkpPSGg2b0gyc2NmMXRScUF4YVZENDUvMTFDUlAxRzkySmo3d0xISzFKbnJqZWM1WG9MUU9hVHpvWnpxVkNZc3BiWUc4Tk5WOWM5cnJHQy9ZVThMc3Rzbks2dUlyV0x5UndGMzQ1WWV5cFI4dWQrU3Z4R0hTVUFyZW1lWmVNL2dJQ0FnSURtOWEzVitldWQxMi9COUlBQXd1aHcxcEIyZ2IwakFWTEhmVlcxaDdoSy96UEM5c3krYmxraE5YOWF3ZUNWeDlwRFFWcngxSFNFNlRWM2U5ejltUU9KYTkyb0ZlUndHT01JdHhXRm9ud0cvcldUTDdIUzQyQWdrMFQra0VTLzRiNzZTRVN0SnhxVXhwMnFKRTJSeEZiUmpSaEJtNlVtZVAxMWxwQk16c3VqWmgrcjVVVFkvWCsxa2tvWGpnZklWaVRMMUIrSFBnWmd1VFFRMkF6aGZBNzRyUFNLOEY2N2xYc1F5aUp1QXg4Vm44anVadXc4NXhwakZUOXQ5Z1Z3UU9vOTN3NE1RQkUwNmJKNHFWMXhnYkFKOGVidDZyaS92dGsreDNVY2FZRzRRTVdjVllXOEZHTjNtVVBWZTEvYWplK01qSmREWkJISU53dTkrdWdRdm04Z0g2N2d3YmdtVFVQQWJjOGpoSjdRbTNmMEZvWVZHSVZPeERJRndFN1hhTmg1NURxRk42RGhFaFc5NVBOWVl2Ri9OUnBSQXJraGNqcW1VT2ZzTW5kQWpzb2FWWGdLQjA5VW9KSmtGQ3kzdkdOdCsxUFBkZFVjWkVwKzJLQmp6NWUvZEx1Y3BCbWFmWlozL3gzbDZpY0tZZFhpc0NHQVEwejBHUER4Z2o5ZkpVcDZGMnBmQW9xdWIwM2ZrUzJGMXJBWUdPUzlxSTk0ZTVEL2RWQzQ3T1ptSDd6bEx0c1hjbGphc0FoWW1jSlNqOWw1bE9GN2VoVThPRnFJTDhkK1cxYjlqSVkxZWdmQ04zeGNFL2xJRHV6L1dXMjNIMlY3cWZLZk9IQmpVUjQ3SzBpN3B5bGxaU0cwRjY4ZlkyVzg5bHgrSnc4dU9YeFBBV1VhdzF0S2tTOXlrcHU1bWNXQlNJV3RWa015eXlrODFCRmdjelB5Ui9pUmM5aEcwUm9tTUNsNWZ4SjdLWm1WeVJodlJLUVB0RlpFZDdXZW84VjVUa0E2WUxlTDVYK3dUbUg1QzNCQjVsWmtLOWpZNXJVb1VKdTJ1aTBLbE8vcVFrUjhBVlVUa3NHV3hwN0djbUo1YUhvdnErZkkzWFBGZWpRK1JYZDYvdG5xY2JqR3FLcFkzcVdaVXFsSzlIcjFnOHowRWhhRjZEdnpnUXUxVTNQNkhGanlUMS9OSWZReEhEcjdiS0tNSWlld2hHY0J5ZUlUUmxUZ0NtN3FTd3pSRlV3VVovN1RpOWJiNmlnd1BNc3RGTFNCaE9HNytDUExSdkNvKzZDaWhxeDMrTk1tNE1QZmRPWmRBZFNscUJZWFovekxpcTRMcis0QmhuUHlKL2pMbWVBOW1waVVmcEh1UXZrU1ZNT2tEcUx1TmlXbkFURTZZelFlbVZYY040aGpjTEdkTTZ2dWxYMkFIOEtNWFVra1VBZnlta204OEpES0FJUGZrangrWGM4NFpCbmFMNVhFcFRNY0h1NjdCV1NzTnhxUUoySHRnNjJPWlhHRG9rZ29wYy8zWWtIa2pFcVdsUHNIZ2JNcWJPMkdndXY1STNJdE9lRHhnUWxqQ1hPS1BIOGp4Q3o5OVFKeFMrTllac20vRksyeTdtZksrVzgzT3FoaUl1U25KS3AwK1ZjZlNSbGZhVTEwZ1liVDFGUjFjZ0Fja2Jha1UvNTl2WGlaVEZmYWRZaGo4L0xBY2RuS1JramJmM2ZkME5XdGlEZU5GeVBSbXY4dVJQOWR5clo3RjJjQ05hVlVnekE5SGdxc2RKRmU0MW1wT01tbWtBUGhOdzdEeGpCZUFQc0p6SWxkUUdVeEtPbmxiNXNtcHdnSWFabVRVcmtMQ2tnRmZaMkNZVEVHWmdTUkhLa2Z3UEYxYnhLQzN0YU8wNWNrM1lEaTZLNTVHQjNYT3ZRYU5wcFJmTEtwMWRmdk44bXRwQVZvMnV4VFhIZk1UbEJJam82MWk4ZUtzVlplc3BOTE1WR3NXekR6YzkxUVVQaFdCamo0V0JRUEVWMjB0Zk9XMFZTS1ZNYWNwUGhmYXpQM0UyK3NGNGh0WFdZaG8yZjR4VDdobjJYUXJEU0NWOHVrUktMa0I1eXAxQ0NYWS9ZREY2K3FzVXYrOEhRcFZiV0dKaDRWWmh0TmdPZEduSlJvZCs3dFNkUDhyNUErRzhDWUMrME5mNURLZ1hUYXZsVGVobkQvUmZ3bzE2NHdsK2toSENydWxtclRpcVFEbjZDMjZlUlFMcFp4aUROY3dNYTI0Y05hN2dDRlg3ektGOEFyaWV6MFkrdjJMOTQ5RWN6emU2aVNyMEo1ZkpOWUdOY3habGF0bWpWNU44ODVlSllSM1VDcG45Y0J5ZFRlVmFDTEVEUHduUFRJQkk3MHptNmUvSzdVOHQ2cWxuU0kvUk9oL1RJNWZWdXhIZ3RQd2F1RkIwdGZyY1RYdVFyOTdNQmFsT3NBaTNpT3RZcERsTEg3TmtvQ01rdlp2NWgwaDNmRjExZDBNQk4yUkRSNlQ0VjJqNUhlaC9IM0lDOURVSWZNRVBGV0lyTlRHa1A0RzYzc0oxVEdwVEplYWZSbFZxZnowMHVDMGdobzFQMUFjWmwzbzlIVzl5NUFsbWcvMytmb25pRzZqS3gyZ3oycHRGNyt4NTQ3Q21qTENLOUhZb0JVckttM0ZDbkdkSXg1aTBURmJKWndXNVBvVlJWWjEzMUJjYVhCeWdzNTFTZjdaYytraUVLL0tBYUNUbmxGQVRwU0FkVGVVM2tFQ3JmOVNXU0M3VStrKy84d3o4eEpNdWt0c052ZC9rcERTN3Vtam9uYStHT0VmMDZJQWs3b015K0N2R29KQitacWttZVphcGNzalA4RlRWclRDbXdpeFVNZ3BPVTY4bkVhWkRMUWJ6cUhRc1dqWFgxQmVIV2N6NE5qTFFHY25SQ1lPbkhwdDA0aVZ6dGNWbW0wNlRJa1hPYmhVdDhFN1lHWExSYjBJd1NFQnpvMGlZQTRsbm1lM2M5aXA1djVGb3BjQU9zZldpL2s3OUplN3cyWFI4NEQ2eEZhUUM0U0Qwb3kvQy9DSFNvV0l3a3JBSnY5b3NSZHBwRzJoTHJkZWVWRmVjYzVxZ3h2Q3NCWTlKVStraElUMnJ6d2Nlc0NRNnBRWlZSbnpqbzY4QW43bE52Sit4UHpWV2Z4Qi9qMk1veERtcHFYL3cxN1VkZ3MyREk1NmRUR1pHeE1HcWZ3eDZDckhBR3lsU01MY0k5V2ZFMm9xWVlaYTZaSVlHd0U1dFV4UlByV3F6NFJQNmtoT0ZnTDR1eDBiSEg0d3F2dEVUMnZMWm1IUWlsUXhUQ2pGVHdnbXkrWW9qNlJuUmp6a2xhWXMwcE5PMkQ4aU1MN3ZaZ0doZkY2UjFMVG5Wd0N1eFdKN1NGem1HVUhXVWNQZTRpbzBHbG9JUVhFNmp6RW1uNHpDTW9va09VaU5BaEs1NWJoaXpZN3BaY2FGUmFYRjJqV0xFMlFqZGRDZzhuMHRWQSt2cDc3OTBOazI1QWZOUEVyLzFJc2ZGbEdPV2l4SWxCM0NKVXgzSjh1ZFNkR2JycUJGd2Faa29xMnVteXNWd3o1bW9IaTRBcWlQcHRMM1FiN1JNc2ZkK1FwSUoydUxDY1pPNUNDeUY3NHBrTm91S2daTU1uaXdOdTRnRFhMZ05aSS91Wnc3bmpkdUo5YjhqcVlvSktaTFRQMUtNMU04UjhyS1NkUUM4Qk9FLzV3a3h1RXJKWUpUa0lmejJsVUI0alM4SXBzY3FtRVVqMjhPWjlDVldiNVJGUVJRY1lHTHk5YUtML1BoRXl3TCtZMDB1a2g1UDlPc0J2NUxrVnRpSGxRN2t6UnhSQ1VWbjNldW8wVW0xVUJXbTFqOFJsem5UNmFHK3VlcDZvSTAxOWRGRVdyNnNBRjYwZFVvK0hGS3loSUlDVU5zWlg5bnBtKzJIQkJoN0FVQ0pCejBvU0J0ZjQ4NW12R2FMeG53YlUwNHNLbTNRSmNqaUFQbU1BSXgwRE82ZUEzalNibVYybEQrekkzTjMxbjRDWXl2VGtpRTdpMEFwT01LMnJDZlpQQ1JKbHN1Tm5UdEtzRzBuS3F1cEs3ck9mZzlSYm5mN25lQUt2T01id3FCRkcvRExLRnBFMUlBakN2M0JaYUxodlgxQm5tQ0p1WnIzdjBZZFo3dDR6eE9oNERvZzhtQUJuL1I3bnM1eVlLNkJpRGRzWFJSeG80dnIrL21LVWs0dmJhWmRLK3lNaWwyaGVSWHBSUkV0N1pxRnZUN0lZQU9md0R0RTAyb3dWUnprRWZyWEx0OWMzQUg2eWdrU3hRYzA1T3g2RDZkWTRRaU1zYVRvaVJKenNZdEs4UlVLMXBldU1wWFBMUSs1dFhTRjNUZjl4YjlPdTFKS1p3SmMyOTVKdVc5VC9ML0hweDY3VENpTkZVdzBrd1VjN0tSRExLT0ZxcXk2aFNDaTIzUk9ka1dsWnF2eWJUcTRVTmxFeDRaZW9HUnlTVmMyS3M4QmVZTytTRUE4Yk9uVFliOFVIVmZDa0wxTUNyVTJxS2s4S2dNVHBqZTc1QlBlVDB6M3dlWm0wSjRVdXFZVW9ieG1QWFI4QVdjTWQ5Qkh3djVSNFhxWkFYVXVQcmF1R2k5SEo5NDF6M0xMN2Q2c3NDMUZ6QlZjaWxlUGxoNU0zZGEySnFCQzBleXE2YW1aaGYrUzF1alhGbFBBb0hXNS9mSFVmZTU4RTkxekxSRkwrUUNKeVlpem5pVi9UMGhqclN2eGZqeFZ1a2lFck5Bc1JPbGhTNFJISE9Bc3c1QXA4emxjeWdtUnIvZlhFN1pxLzROL3lOV2l0NDZCWmlrZzZkdlFIUnd5d1VhbHVNajRXMUZPMDBzYVgzZzBkVHNBLzVFdzMyN2xjZi9yTWdGRXZ2Z0VXQWduY2d1YTMrb2Jhdmp0QnZpc3MyV3dRL0NKZ0kxQnV3VkN1ZEFGeldBekJFSjE1T2hscHpzNVpjQXlBZVNVVnA1dWVKZ2N0RjhSN3MxMW10QXU1TWQwczVhNy9qWHl5UURIREhYandUV3MrZFRJWm9yRDJ4bDkxZWdORFN0bVhUd3BYTzB3M0ZGdytEeUprQUlUWFpKU1dxL3JSOHFISlhWUmdsdmhONWtiK0ZjRGIydW4zTk13bk5VQityektYc1I2R2FqRzIxVG9SWmw3TTE3RVNYWCtuL0RWWklLREZMa0RDekRCelFJOHpIUmEyVHNjczZ5SmE0MTRreGRsSXZ2TjJsQkhGRC9ubmlpZDNTN3BPQVdtNzltdzFyWE1yOXJIbFZna05zSDAxOURFczdBcjlpTEpjZkFZWWRjdzFxOHlQWldlTGFGRUJaNkJoVG9MZmpueGhtUmYzeS9QSFdsRnNnMVZMNTdBV21UYkdBdUdmTGxtUTZ1ZHpHRm1US1FLZER4S1N4SlV5MU1mTllycC9DNVdTMmQ2Vm1wUkxGekNKV0hUMmFZMUFRWi9RS2d0azhvVXN4Qk9PMWFUTmZlTEhnc1UvaGorNjJVeW5Ya2tJcTFvQU9sdkJTZmNJd0VEeEc1ZFhXVTlNZzRhbW5BOHlXN1c2NnNjZDZNc2Rwd01PbEoxM0ZBTDlJQ0xtZ095RnIxNDhLdlJiNDRnUGpWZHRFbzF6M0FOSTIveDFpdzBUSVJmTVB1d05tM1NjSXFyZmZ6TXRrWE5GVzBpODRpdnJoSFNsYkhQR3BjT2x3TEd0elRCblpWTzdlYThvYkd5N0NXM1MrZXJsVVVBOUlkcVcvV2l5UnR3U0JrdWx2ckY1aitaMVJoNDBlOWROUkR3TmM1TTJacXgwRUFwWktBTE1laEZwdi9IVFlJck1RWkkzK1JaWGR1aWsrVFU2TzJ4QjZZMjJ0TWJjMVZBSEZMbGlGTUMvcVAwZ1VUY2t1b2FCUDg2eEN6NEdDMURTbGlPcXlZcG9BcFl6K2VVNXdUamRyNWdpOWM2clVBZDczRGZZMjZRZ09QUk5xM0QxQ2NCcXVraVcyNTNUL00rU2RvYzlTZ3JOOWg3aVRldUhGZW9FNE91NW1GRkRXbVNqTDR3cHZYRklieEY0dTRubm9IZWxadHJhR04yTnAwaFR3eTRnbWl2RHpEc1lPWjVkYzlpVVNkRGY5NnowQXdudktoQU9Zb0xxRjlONmY0anRmWUIrVEJhTmhreGRXeUxMbXFwdVNJOXVzazBocGVJQ1pCK05xZGNuZ3kvOWdPUTBWR3B0d240bERtSUNEb0pQQVJyZnpERHRybjVvQUR6Zm5OMURjOGRkRHA4czlHN25YK3JEVmh0OGgySEtNajVDbVhrSXJQTjZqNlA2VlRLOWNvRVE2cStoNjRxWDNzNFZnNjVhc1dZQ2pEZmF5VHVrbWc0Ui9GTytIbi9ONW9CVjVPVkROWkxuTWZMcElhYitoVVlNRzdZMXgwbXkrSFVxRWRKYWt2WUhuUXcxeUxHbU80R3VSSlB1c0oyZDFwOWNYNnVkYi9Jc2I5Vk9QWWgybVVGNmt4eC9uQ0kwRncvOGJMVFVIMFZDWEJkT2E4c3pTbUwrVjhVVGlnWkx2TXBkeUY4L1FVUXFQeEhWdTQyM0QxZTg2em5IRlpDYTRtS3FsRXhHOWpHOXQvTEpaNGtHOFZxZXNGT05iVmVlNko3TjU0NmRnYzA5S1YyVnVhNFl2SnlBbXpDRHZaU2VSZ0owTVhwdVZtdXdDL2xhejk4WFo5Y0JkcFZESTN5a241TnJIZE9yZlFhSU5nWGZtMm9DdGcvU08xK2ZXVHJzckpJTFc5dzQwRFl1WnUrQWwvdk5sbGR3L1EzQVRidGV0SXpHWnAxSzVrVzY3ZEhDc3kvVGpLMUFLbDZTY2tKQUpXb0pVbTJLd2swenovdGdCSDBsaW1nSUh4dzlqNTZQZ0lDQ0EwZkhWOENGa2pMVCtPWXl4R2lxRlBKeVdKVXpaYmtmemJCVHdtTXBvTTRqRlhZUXA1UHBZZ3dHRFVJM1htT29uU3ZLd2hneUxRMmxSMTQ1OVdwTnJJcVpNcWFjQ29EczQwT0d5Zk9jSkJRWDgwQlBWWHBhRVM3M1lvTUgwaEViRm96a0QveTlyejFzVDgvVDIybVlKRlJ3dXR0WWxPcjNHTmx6cnFWWlRFSDF1SGx2MXhjM0p1cmxDbWZwT0J6K2dHMEJjWlArSEpRYktIYkdKdGNhUXFxbEtUR0w1WmUyMnY1Z3FrMDN4cFU0SitZK2p0ZjJMNi9yTWorc3N2K3hMLzFaVHI5anZmc3NjUHIwNmZ0dEcvdGVmOXUzbXZ2OHEwT1RlU1RsaDBQeUlCV1BxZ2YweWRwUDIyOWd1NkluS2Nzc25mT0dkcnQvSE1DMUtZdjRnRmxTTUd4eFdCYlZqOEE1b1Y3MVdUM21Zb0dBYXBpTUJUMkVJYnVuc2RScXdYVEk5aHFpWkhVK3FYUk5WbGtkTkhwejRUdjNNREUxWmlBbFVsbnJ2NzNOS1QxQ0RYZVpRbWdoOUhwYU1GWmFEbURxV1cxeVdIczh1MVVkTmFkc25xOWdNQW10aVBZRVU5eldZQ3pZVVc3NGpwTnF2Qk9DTXA2Tnh2WFVFU3k2YlhZQys3eG9DaEY5ZHkrNURIWlVKcG91YThxT2hJTnVaRE5wbG5PUExGT0hQQmpBSFE3TlJEbVhPek15blNBQjhtY0dBM0Q2WFhKOW1MNXoyZS9KSVZVanVEOTB5K3pEWTA3WVVSaHp6UitwcFQycHMwN0U5ditzWndZMHR1MWF1UkZuUE5NWHlKQWZRU1ZmZXVNOWRJd3dwVTRRL3dXUUIrbEhRWHVrUlFXQ0MxQ3VjaDJZZitldkc1a2RnN0tVS09ySDdRWU85VG5hSHoyQTgwQVBZNVhvTllKb25xNlc3eHc1bFFOWUM2aWFZS3ZMYU0rR0YwVExCa2NBQURVeVNlS2hwZm0xY0VROTY4MkZqRHV0cGNDZWVUTGVKZHpwYjA0US8rVHBKVlpwenU4aVRUTWdjdFF0WGMwdmJSaDhCSytOa1RuUVMrZ1RwMW9UVlZDT1lmaXdEU1kwZlV1UW9CcDgrMmowMzVQQmFsRjZVRlJSdjdpV0hvME1pbEYxSjZlZmY0VEtOOWhYWWd6WGJlMXdjRkZnMUM3WUtqby9DRGVEL2dna3l5dm51Z1ZXQWlSM2lCa083cWlXVzJ3SVMyNCt6a1NoWVBPZGl1ZUlQMThZK0FoeXNXZVgzTVlNRXBHVTlVS2Q5YitEb0FwNFNtQ09janUvQjBpN2NFTWhFSUh5QXc1VTcydVEzV3N3cktVSkRRYisyTnE1WXlOWVd6OWlDUGsyVG95Tkg4U2hSM09TeVd4VTJEL1NMblA5c0FtMktKeDZzTy85c1B3MHp3MVc1cXhES3NxbXlwRERObDhCcUY1UUNKSUdhM2tYNVJRbzVabVJqQzlaL2VPK2t6TVNGZEZQYStwVGE5eE1valRiUVU2Rll5eHZDSHFTbWsxQ3J1MmE0RTI0dkZBd243bS9lSTNBRjVmRDZxUllQeW9DRDc2aXhDUnlNNTZZYU0xdU00RTdNU2Z0QXZZM1dPWU9NcHVZajkwYlNUMFpja0Y4MCtFOTcxVDFVTGlrK2s1VTdGV2I2V3J6TTlyOFd5czRIZXlLbk9uMmV5eklWcWlFb250d3RFaUZJWWtiWkJhcWgwOC8yMEZXUTVzd2N5SlBxMitycVZkYjlZdzBlUTVRZlQ0Z2ZacG9OTUN4N3NKR1F6Z0N5cTBnUUhsdDhmdkwxRVNiY3RIeFFKSlFhT3AzdGRtayt2Ty9MVFpuT0xoSkY2L0RCWDU0QWRRdzhPN2dmR2lhUklIWVZSUExZN00xekxlTUZNWGlSVExiWWZBcVkvblJkQ2QrYjloZ2VKUWpLanBOcU4wY1p4alhia0JHYlJNMjNLWUc4cHo1NStlOWhWUVhiRm90QWZzZzF0emR0SnE5Sk9lV0lsVWhBMUx3R3JJQ3BiUjJtZ2huR1FqcmpUUGFQNEErcXlJR3NyWVB5VnFGYXdZUURnWGpvOU5EMVpIK0xNYXR1dEhUL1VrVFlUcGpvNWhSSy9ZNUhGTk1EaDBsRmFhdU9JMUxtS3hwcGNnbTdSQ2sreEdUM0FISkJhZTkrcXd4aTl6R2k2djQyc2FmSlBKckNFSmQvQ3FqcFpHb2hRR0U0VE15clBzczMxOG0ycnRHS3I1RVJLWTNrbENBNFhQYXFZYWhZRFExWTk4YStWSFFZK3hESEdWSm5PRkE0eDhKWlRVZ2ZkYWJtblY2Y0Y1cDF0VWVKYktRRlViQ3R6WmZiVlJUbzhjZmkrdGNQWGNsbXhmQlpua05BdFBDa2M0aWN2UWRQdytxTVlqQUkvWjFocjB4a3hhbW5MOXQwcGt3U0dWeWRsVVJvZlZneUF1YkdHUXdSYmYyemdBZFhWZDlQdG8yTGlXdnZkWWo5OHVLcmd0dzZkTERuZU5zWitUaWs1a08yTVJRNlgwV2FWYzJVYk9kSnhiTDVMWmJzeHVSa1VHbnQraWtJOWhmVFR2UEFoVjZCdFNPMTlOL3FXNGpNbjc1SzBJbjJSVG1HaUtxb05aSG1kNzAzVVArQzRLbG5NKzlQYm5HejhvY3loSUtCS21HTlJqQUVUa0dUWEluYW9sNXdlb3F3U3AxTThGdnpHNEs0NDRSRjkyaUxramlBdW5VZGxveGNxci9RU25nZ1VPTlBrTFZMRU5nR2NXY1ZkTjhSS3BraElMVDd3WVZ6M1lMRFVZUVNRcnNWRmtFMVd2NTFFbjJmU1BSS2dqUWtwMkxsSTVHT3B6WUNhUDZUeWp6ZmxtcFQrNGppVEh2eDY1WFpCS0FmOTZtUDZtSGdVclNQcVIvQzdWYWZIK2NxVlRLQUhCNUZiWTlpMUJzMGN1UG1uS3o2NVBUSzRhbVpROE03RFVKVURSTUl6K0JUWTcrMzVMbDRLZ3FtQTZITXBBejBsM2NrQUlmcVBINGYwRnViWHRIMnVCek1pYkFqWnM2cXZzTno1dUc0V0UzWitUQm1QR3lRekdlSTcyRysreWkvYzI2bHNsRExmRWYzQlZrckNvQSsyMlBRZ2pZNjk5SHRxamxYZlZXa0lhbng5Rms5cEFGaE0yZmVoZkkxZGFla08xWXIvaXZzbWlNTW8vMU5jMUJqMVFud0Fwa0NSbTF1NUtUNTFWa2RSSm5Sd2lidHZ6VzZkcmx6M2k5YUJHNFJKdk9abzM2am9GUXEwUlNFLzFCSkE2WWwxeTZPelVwMmtMZ3JNcGxoQUIyN3BsOXlsU0hZejY4RkZZTlI1cUFGR25ja2VVM2FIKzJ1U1FNaE5qbDdDMFU3RUJjMnBoL2JsVkEydXpRWElXTzlzWFl2c2toa2FMbUs2dXp6eDRTa3ZQeFdPRUR0dnNnZU9wZVpuU3RoMXRvZ2xVOTlqR2JydEQyaStuakUrK2FucVRRVjNQZGZzRkpmeU5UZjhLVWUwQUd6Tm9EWnJxeGdVTHNINUNyZVNIdFJpc1QwbW5VVWEyeHJiQlh5QVE4LzA0R0htOGZ5S3E3Tnl1OW1ySm1mQ1NTUWtST3kyZXdQYVR4STlZbVNBeHpiZGJ4WnpTN3BmWWRvcG8vUTd3LzkwcWwwWjJhVGZOZTYzU1BsV1loNFBidnJkcVo2aUkvNFdlbXcybVBCZjZBNXVKMWZCbFd0RUhLUk9wR0VwT0dFcGE1NW9OL2pFTnM1UXlzU01UZTRwKzZVakRHMjU2YjduTWV2cEg3V1M5Wi9XMzFzYzM2RzhjalVEUjJ4QnNNaCtJbHE2WmdENEE5ODR2OW9kenRkQ0Q5MkFFSXpxdDF1SUN3UU52YkoxczAwSm1ZUzJJT2xzckd0NTN6amhvMmF3eE1FL0RzWVJHMGpYVWcvVGNCaDZROHEyOU9RRWlTcFU1SUtkVmxubWJtSGNid2xFbFRxa0wydVN3d2UyTDNuOU4wT2xDNVhibjg4aGpNdWUyODd2Rmh3L2MzL2VwdzlFZkl4Q2kxa3RlOXBvQlpBZG9MRFJGdW5OajdXWE5rTHZhdFVKV0xWNkxpR3Q4bFJxZjhyTDNCbm1LNS9Fb2RwS3NOOVg4cXFUSUtGVWtDMXhoVmlZUDl4OVR4OHo3Z25tSWtzcDJyVnNWNkxrT2cxaUJFNVdUT1Z5aEhsM3hMKzFpVG5jWXJ2d0xyQXBjclVPLzljYXFyMWIwME9aTm9nOWpWRGs1MG80TDNBNi85dmV1c2h3TlorMWo0RzZPQll6WUZRMU52U2pOWVltNk81OGNZQWluV2crZkJKRm80N1NDcTJyT0hRVGphZTJTSTUwYXBNQkNuZGd6bm1mZGE3ZWdOMzdBUWRqL0RYaFQwakRrYnNkRlBYcm9Md2xCaGRYQlpDeGl1UHdSaDJqT1lJdUtlc3ZNR24xZ3pCUmdzL0VZUWxSVm5pRHhUdnowM3ZvMStzK0V5dCs5cWdUS25kME5Yd25MME1JRGVONUh4QlJVYkhaNExUdFZnTmg1bTIvZUtTZmJEbXhVQjRtUDcxM0dyTFlTL2tQVGVhTndUQ1IzbFpPQXhvSGp2YVRZZjBjSjVUVHpHTi8xZEVONTJjcFJtemkrMHpEME5ZZkFNZzdhYXM2ZnR3aXJKMytuYXJaTEJtSTBjdEJUamsxMDBmR052SmFKVGVtZmx4QVZsOUptdUpzZjNVL2h5UStXekY0UjFmczFDb0lkc1o1QnkwNGlyOUNXbEVsYlBuSERkRGJTTnZ5YXBTUnM5ZWVRMHFDMGM5QjIrazJTbmhEMDVzS2tiYTlsM1pLcWxuNWZYb3djWVFPL0JmVDZxUE4xbjREWkdvMHFabzFWM01GRXVZM0g4cXpJNmJwNTFnZ0JXSVJNYzdDbmRxb2tVVDgyUkxrL3YxOEVYakR2Rkp5N1h2NGVLS0I2MndvQUdYY0wzRzdhTnpIMTh1L3lGaVVKd1NUWGwrWXplbitQdDNXKzRHNWV0ZVd1NldrUXNaUGpXVDhVVFA5aDJkSGMvWVY4bldHRko2TWhvTytnKzJlREgrMmRzcWhCelY4UmZ1M1A3R3pEWnNia0tjNXBhaGFWWGVhTWRiYWJLS2dWZUNMNWxWWDVpWnJGRm4rZ1RQOVVsSm5lTi96eUJ5cHl0UE1MbmY5ajEreWl4ZXN0R2tvaVB0cUhWRm9TanRjNU5mZjRwR2JKQU5IUGo5akNlYTNkQ0FJMG10OHl2WXM3OFUzZEFteWphQmFldmhOb0tod0ZCRVovcklocjk2cktuVHUzYjZoeVJPR2ZqOHkzK3pQOXE0M25TSmhYR3RVRmoyOElvOVB2Rlk3SHIwVFo1SHRaUlpzY0paMEZ1RW1FQ2V0NGpiZENCUGhUd1ZMZjBFRUN3RGgvRlZ5TnNoNUxnclRZa0xINHBkT1NycHVEdmYzZTZqSkYxQjFSb3BUdlFoOHB3ci9qOElHa1lOQXUrYTlrbEw0cCtacmxZeEZjQURCWmZIOHFDVDVhNWZTOVJvZHdvUktwYlJXaDZrTGUwZWtGYytjakRmWUhRSEhJOEpaWGtvN053VmJ1M0RxN1Y3WXFLWnJ5Yk9BWjIwcUNpMFJlMVJBRkQ0UUU0VmJpSlhyNnRUVkRQY2UxdWwzbHErZHdsbEFnV0krVFZJTnNpOENtTzh1M2djTHNGOTZiYVJEVHpvVkgrM05MYXFCeUZrNk1LMFJRcHBFQUMwSmM2QjEvenEzamg4MmZrcU5Obm53NlFuSERVMUpYTGtzVmxwNUgyME8xN0RHUXlwWFRUaWQ2dWVEM01vQUJmaXJIMVlzNzA2VmFzUTNwNlNJemthbVcyU1hiN2J3MGIzTCs4YmJaV3EwUEJYZ1VyeWJ0c0VCMnlUZnZFK2lVclREK1hienN6L1lvODBtRDIrY2luMEJDSU8vWStERjU2QUlSSk5EUG5NSWNXQ3NvdTRkMWhYekVad3J2aVdzbXUvcjdkRVBWcWpwcnoxQVd1R2M1WGdqdmcxVnZLdVZ0cUtsMWlvdnZtcEREL25NajdCb2JHbTNXUmpHR1VORkF4UEJkM3BuY0hwbWdHaGVuWHQ5STg5aUxtZm5hTEhHdUJsT0lWK05RSHZQMXYzcDdGY3lNUkNnMW1Nb1NpbDRYQ3d0VU5zSmxoa0pTR202L0xZeFBCT3VaQkdOYTRDUXZDUUIwVmhGZVorK1NSQXBLUlRwMGxYT0dwU0NIeUsyNXB1RUxrUzhweURuWmlIeVlLL2x2MzR3MFhzeUgzc0xUVENsRTZLOUxOa3I1anoyRjRNRUJuRTVkZDBKMDhBUkxaU1l4VXZqRXpCUmFuaEFHQXMyckp1dndBWkdzRkNJaXNsU3U2eWp5Uks1WmNuVWxHakR1MG1nMHlTYVRwYTYwaWJBbDlkYmFVci9wbGNMUUFxYTJkUXlnWndaSXZ1bGp6MmptTnV2Wm9paXYxMXRDL09xY3RyWTkrT3FURDVPakNQbGxSUy8xNkZzQXRhTHp4ZXhnMXdheU91U1ptdFQ1VlVYM05Rb3hwTEdoem5CL1plYk1QbXd4eVltS0dLZVRnc1U3cnNWY3RaU2JDNHVTUWJVdXIreG5tT2ZvcFpDK1BpY3c3UFBUOE9xdk4yaGJ6dWUyU2VNZTJZclJNdXZlcHVtck4rMXVTcU1xdU5qb1VWWW1NUTE2cGR2bEdKS05XNHArSnUwYTVLNGtsbzJJVDFCL0VqQ0hIQUpkZUZQUUsrUUtIZHhORkt4ZVNzZ2o5bDJwOWg4YTlybXRFckRTOGs4bFlnQ0lPRVk1a3N5Tld0dTlxZHR0U1BFM1ArZ0I3cGt4VlpkclhWUWkxYlpLOHhMbmNsSUd6WXMwU1h1U1M4YnNWd1FzVGwrZk95QU1sdnhvaURxN1JpTXkvVmJBejRWSU9sclpqSTgvdjhhaGNIdGVVL0cxTDM2bDNoVEFJV1U4N0ZKdnd5bitWSDRJWkZRaGtYeDhiKzdleW52enpNNmZWWHRFVkVNVHBWdVloZlhIR3kyY2RxWXpRZm9Ca0ZwdjJ3a0JvaXl5SDBCbFJaNFkrNVJSakY1K1V5dk8xWGJLVFFwTVFRV095ckFTQmxZUEx6cHUzVHl6VForT2NCelN6SUllRGV3YWthRW1BVVVlRktvUk9HeTkxWE5uVkgvc1ROWWFBazZhcHlhdEdMeE9uSlNBQXBkcDk5V0RhNWhNV2JIMVMxaEY1RXVUcXBUSmR4dmY2c09BU0QyWnAwWlUxV0N1OE9XV3JxajZDOHBybUtlSjdtMHlzYzhtRCtsL01PRjRiUDVBYXFkV2pRL3d2VnZtczlySXBkalpkSTJQaThQTW9ERitmdUNkTnBZTXdCT3pwcHcrVXU3bE9nWXhoYnFZdWVDTHFvMHMwQ0pKZlEzTmRpWmxqRVBzNStJSnZ6WWxKaExCWHh0RTJpeFI1V2o2KzBuWWkyZnA1Njlzc1NJVGtkYnJlMjdLVXAxZjhWMkhRU1BhOFhvdkF6NWZJL3FpVHUwNXNRNWVGeHRUY3JHY2NFcFpMdWNRc2kxN1BlL3lXUE5pQktFZG05R25LMlRjbGRVWnBUM2VBZTkvSXUwNVJ6eHJab2NuV0J2a3NIQWNWTGZUalB4Y3c3TGp2YjNIaXJxNk90YURUTkhGaHZRdS9RWHBVNUhXcnM2eWhGdklPbTdCYjZ6dXdUNHpsNlZBNk0xcGxJTkNiU0hxT0lVTHNaKzNHWVFDbmdCWDYyLzFiS2xGVmJyY2ZHNlcvRlZ5cnMrOG1FbExQa2VsdnJTaGYvSHJSejVzbS80aU9SMi9wWm9ic0F2aGRHL0JtZnVPcUd2LzNHVVdSR3lOMURSb2VKbHR4NzFaWWplVnBycUhvcm02ZzJjeG5hT2lyZWkrZDVpLzRzaHhja1ZDc2RIbHF6OW5ScEgrck5jNFJ2RUIxSXZnbHE3MTRCMmZ0YmFzOGdFNjF6c2tGL0MwL3YzRFZyNWVFYXZudGhxdDZxUnIvRlE0M3FXOTRTMUttMzRUZ0hBSm1YZCthZmFISWdqbmRvNFA2S3h2SjhxWlVGeUJ1ZUM0MlNQalNScnlKVGZpS2NOZG80bXhYVS94WWxFSlBodXB5YUhmdDdFQXI2eXR6WEw2Q3Erd21qaXNlZVJnK3dWWW5UN1Y5Y0QrRld6ZmU5VkpHNk00djd5a01TeUZGanRVT3ZZYysxTEc4YUMzbkNyeUxrYnprUyt6a0JnVEoyUEtMaklIb1JrVkhtWVlBSzIxUTkyTkpORHZ5SXUzWGQybzM0bVpjKzgwRHNBdVBwOVkwNGI3TkFWSkg1OGt1TkJja1FZaVBKLzRCNE1YMm9RMlRGT3RHMnVYd2t2Vko3ai94dis1RnJMd0ZTZE4rU1Q0OGlodE9yTzgweHVBUDJpc2pJUkwyZUg5VFZoTGYyZnVIVHIrb3ZKV3BHOGphc0ltbWFQZXpnUzAxVUMzUGJQOXlPNnFqNXBKc2hwTFFUUjE3ckNmNEtrOVNmSTRUckYwcWVKN2hxaUJKaDhUTWRlOVUzQnc4bFhVU2JBOWN0SlhhbVR6bFpxL01aQWRta1pXRTd6MHVzNFNWenhXTHJPd0h4Yk5kbXBhYncxVTBQYThLVzRtV1N4MUJCd2pONE5rRXhvSGhlRzJxeGJ6R0FaU3J2QTlrM1dCTWNKZWxTemc4dUV6UE1ocGRhWTBRQnpoMGE0UG1JZncvYnpOTWhTWEdZNk1oSndkdmFOQWgydzdwL2hEenpoU0JudTd1aVJHWkF0dFZRWjNNbUZzVmN3NFQwMG1lTGNBbzl3NnN2Tzl6b01nNnQwSVVsY09oZGlwOVE5T0w3bEFlUXhZZml1cDVQSUI3YW0ycWc2KytYL2MvZElVUzMvYWxxSUpHZjJVUlE2dDdjayt5NjJ4eXRCQ0kycDRibmlGMkp5a3RnQ3h2WGtMTHRPaThwSnpzdldZZzNSSDJvM213S08xUWF3d29kSjZiL2ZiRW9ieTJpOXZzTlUyVFZmYlBDM1k0TS9EUzkySWx3M2VtUHdmUlpYQ2NGeXN5cEZtdU1mRVJKSmdNS3F5KzVLNjBrZWl5QmdPZkx1ZXAxOFM0bFNHY3VOZDk5VjQxTkFGeW43SXQzYzloUXhNTWxvOXBLdzN6MmZEVURTMU5xeWR3WU9aWGxJN1hIUTUrNDlwYTAyOTVGSUtDYi9rbDRJSERmMkpBWFFQMUxaWmtmdWdLTStYVmhNd2FwWVRjM2dtdzJ6OCt4RU11SytpcXdKZkdBUUxPYmZaQ0VTamI4Y3JpVTBmMUhHQlRneGVuL1g3aWFFcFRKNWVPUWF4NWo3Z2FKZUIrREdzTFNzNWhRalo4cWZKRXd0dE94d281aTdmVG1rbUxETEFiR1R4dkJlbWxUUENSR0Y4VzZybDJ4aE90YVhocmRWTGFrdHR5NVJ4UTc0SVpHd1dQSDBpTnRBQlNFNVF5R3JZZzZ4QjYyQ1JOeWtXTSt3RndPclo2UExaOHA4YkYydk5NRzV1TGZuT2p2ejhoTENvditOaUhVUFlGTkpzeWV3YmoxOHNpaUNnbC9uTmlHaXAxZUtqN1BtOW8xTGw3MEsxaU00Y28yS0JSWVdZOXpmSzcwYks4WGkzTlJlMEt0WXpaNlU4YUw5L2R3T2phY2c4M2VGdFFHZUJLYXc1d21UcjBUR0Y2Nzdma0c0L3hzMi9zRklrZy91QkUrbE15aWUyejdkZnpBdzF5Nyt6Vm0vQVpTRkNzTUh4dUVTbjdudFNXMzg0L093Z1FsdVVyVzlkVEJuWGMzN3oySnpTRk1FZzdVaW9uakx5TmVtRFhQRnI2RkdHOHd6SUx4NUlpVEozQ3dXUHM5cW1hYzNrblcxYkZSbzlyNlRwY2syeXp5QTZnQUpQc0dMMGpGc3dkS0U3bzlQdHBJTklhUW16MXlKLzB6b3NobFBYUUEzS2crWVNuVzlzQTdzNUdhQ0l4MDRjdGxKY2diU28rVDl6SUdqcWRQMXdOTFdvOVh1T2tMN1ZScjFBWStCWkx1L25UcEZ2MGtlZ2hkaVlYNUs1UHAwSy9NMlRIRGVoNjNBZXM4NWxYc3ZtdGJBUkxtMmYyWmVHNzlSamdPRHhacFVNOEJCVVVLTU1PR0ZRTnJtQUVIM2N2N0xQa25uS0ZLTGtMY04vYjd0OWRRUU1VMFBJTzFWdWVHYkY0WENMUGRsaFVNWEtQL0NhZFVBMElnMVlLWWtCWUlacitOSE1mUUpPWkl3K05FYjl1ZTUrTVdjbTF6dnNTODRMMTRKcFdSQVE3M1ZVSWIxcm90NVlHdmFPNm1acTBwMVVHWUVXZmk0Y3lLanY4SW54UHRiOVFYVUg2WFVjcDdUbmVEeWVJNmRDUnduUytReElCN25jS0xpT2VVNHc3ZmxTOGVpdGxEVTNmMkM2YXNWUS92MzgxUnZWR0xwTzNVV2lQYjJ5TithQ2RMQnV2SytSMXpCSGNxZEZXRnMyRjFTdjV5MDNWRWpNUlJzcUJUY29ldjVTaDZjVE9DMFVQRkRkTXZVKzRXNi9vZy9UQ1hmYjUwTFVFQjAxYkRVbUc1bGwzTERjZ2cvQXp0TTFpQTl2Qit3c2tYSWE5SVZiMkhQaGFGazZvK3BnQ05Kbm1Vc0tlTU5NcVB2VFVTa3ZYYzdNeDlNc2VUNitSc1ZWOGRiT1lSMzBUd0w3anRkMkEwNlk1MUlJWmx6KzVoaER2aGk5ZTBub1RkZjh1aHdxamVSazR3NlVqV29FdWIyVEdJbVkyNGJBNUFHbFU3bmZQUTBidStGRzQrM1A5T2V1dlUwSmxMOURSRXc4Qi9LYm54R3FDV0hFR3g0eC8xLzFSbkt3MjFsTjRySkFuRVFISGZXZ0IrWFpjb09jS1h6V3MrTUQ4cjJEQTBOUGFrTG91L1Y2OWlhaTVhV0hMZ2JHNXBtMkxUaWN1cjlNSFgyZVcvZUh4aFFKcXFZUWJOZG5UKzFjaGdhSVVGNlA0UFQyYWhzazJ4SXVmbmlCUXRVTExpOWJWaHA3YkpBVVBSL2tETWZzOFVwRkxJU2hFeVVQRGo1UnlYc25nV1VyOGpQRklGdDcrOHRVcDhYelhRTDUwYnl2OHgzSU1HWVdsZTlpTnkvMU8ydlJnTGRKTHNsWXpnNFp1RWNrbk5qOUdlY1NyTndEeml3LzA0Q0NobVVJWVdFbFc1V3dPbkYyanN0dHJrZ2pDVGs4ZDhJMlJqRDluTTl0ak0vTzZMWWZwcTJja2xxeTNPaW0vazIxOEwwS2FRbXJZS2ZweVVGQnRvSnhxNjBHcGx6ZWJhYjJzRkc2b0lQY2hrOUdoV1Z6MlMvMDhoZEMvcmVmaUpJS0plY0ltNS96VllvZDl1a2ErazZWRE1LMnFZdmlmNFA3RnJLWmVFYmZqc2VOS0VZTWRSQ2l5endpRG9uL0pSYiswUkZXMFZGV244VmVNQ1B1MStma2ZSbWcxbDJNUFRNT3BiRWZmNFZkRkYxMmpHOXBzL0IzVmlIQVhiS1pYbEhHUzBhWkVzRkphZFJjK2FHV0tQQmtmTFNvTUdWVHgxeHAvTk1SR0k0WkNSTU05cnBtdmNHSVpqS2E5aEF3RldwOGhCQjl2WjIyU1k5RFNTUGQwc1lCUWFPWUd5WWdWdWlEaVZUQlBBdlRKNnJOSm53cFYxSGMrWjVKQXN6S0s1eWRuK3BENjQ0L0daUUpxYndEMkF6REFxY2pXdU5XZHljUkVLSm13aXBBVGpiU09UWmdCelUyOHZXdHhxSm10VXFYT0FuVzhOQVVVQytGaVRYQUFNbVlselFJaGJ6RnpPMW53Y2hUNXM2QU50WE9kcE9nSi9RY2NZM0RrMVNuTFNYVUN6dUJpVE5FZEpMMkVmVUpYVlBIcjF2TlRtOW1KdEo0R0NkZGQzeHFkQ1p0a1pMbFdnVTBoY0NwdUVtbjAyM0hEVjdYZmRGYTdpTXI5S283dFgzWU1RVkM3RDMzNjF6SmcrR2p4OHBXdk0vc3BCaUgySk04ejY5aE5XTmFlVVYrdmFNancyRWFseVFUSW5jMWpUcXNwN29QZ2FwdGNTa3FqNjZNdDg4SS9EY0xwcyt3MkpaZmw1RTI2bWY5a2pGd0FWRmtML1pOV0Z6NjdkSjZ2bFdhTHRRQ1pjRG15ZEEvOCtFVmNmL1duOWFPVG84NG8xZjlmV0JINGg5c0xBSVZHVSt1VUZRaHJMeXpBeEFGUHE0dWQyUDdjZE91cFF5TDN5K0hIMFVrbkZrUENZVmJUY0s3ZXV5cFFaSVNoNDRSemhVc3UyTlBmNXZQV0tSdWZwbG5pM2VVdTZKK05NWGRmdjNpWTdQVWZ6Y2Rrek0rVEJKeE4xK0lRSGxGWkdqSXhzUEdBckJ3Y1A1NnN4Zk5WZHZzcWV5QSs0MTJpZjBGbHdWbnQrNzRndmtWeFVMcWVnME5tbWUxNndVU2dLRUcrSGx1SEdLYnlBQmt6NXZudWJ3N2hVMmpMSkhmWHo0bzFpa1J3NzRGZlFVRlpOajY2NkNQcnhiTitkSXFTRXpCdWk0Q0FYbVA0VVJBVGoxa29QbzlvRi96SkxlcHlyN1FMK2VISTEyT2VkS1MyWnFHcitDajJCdWlrRlBwRDR1L21GWG41V0svSUN2ZDlEc3htZWFyWVU3L3pXRDNkbHdFTVRMZ1dqWEluSGIvU3F1Y0JHNHg4bEN4MUFoQTFpaWRKbWhXeGMwcktlVWdMb2s4MG1qYWs4L3RkbWc5K2ZiMjFVNmNLZm93T0xaUkdjQndLUGwvS0FxUENqdFRqZWw0dTh1djlxeS9leUZKSUVGZGU2VFlMWWZ4NVNRSndKNFVjOU4xTDJ4b0tyMGRPWFlsTTR3bDdtQ3lGWk5aNzFkcGZBQkY2TXBXaWwzeUZmQU9tbkJoNkU1ekRzUGl6RDZLNzBOWUN6L1VpcEpNUlVHek1ZOFVxQzRFUm9sTlZrWUhsS1g0ZEJsTGVJQ0c5N085eUQ4TER2QkZRSUdaNUhYTnlxR0xackR5T2ExVFY1YVJTWGliWUZUdHBoeTFIS0ttUWxBT3RTVmpacWhRSDBOdm5maU1MazM5QW53eGJMTzF5ejUzY09QWklrZHB6SkhhQjMyNXRZZkVoYUZLSmExMXpRS3hpMEREZzVybU92QVh6M0R6b2I4b1ZsMFFqSGlHK1lJSnprdWllQVQ0OGI2Z0VqRlpYazA3d0MwTFNOMG8waHNuclNMQ25XMXd4eVVycnJTSGtRQklmSDlxQjlDeEdrUHdqVVUxUVBMYVRkRFp5SUo2eUEyWDhVTzVNUzVLT2FYV0JlY20xVnZ4aGRYa1cvL3p5Sm9pZWkyT1VSbUdzSmQ0NzdBTkNuQWFyT21COWdQS25PWTRPRzYzUGp2NGw1RUkrUGFIbXdFTGNEWXc5RjZ5dHYyaTMrakY2YXJFbHpPTk1ES1U0SnpiaEdDUUdEa0poNXFNcXBjWGFTR3Rvem9FOUZYOXZxWitsUnBqeXhyOVU4cUJUdmZkMlltOGJTd2MzczMycnVxNzBrYS9vNi9sME0yejRkWGttNmQzMHVJTVNXc0o5MkNoTG1kUnVsQVM2VHJscjZHNm03Z1ZyUjVpZ0I3bE42ZmxZbW5HZGEvRDI2MTNYczMzNjFld084ci9DSzB2UjE1VE51ejdqUzY3aW1CMWVnRm9SdEExdi9IQUEvZHpUWks5WDgrY0JQeVpZSjRzMTFlZ2o2SzlUamdTcEZoVlFHUTBFZDMrblRJNW9NWm5ON1p2bGFwTUowYndUNG1yb01lRk1kQ2tJczRBYVlVcm9BMHhScmNNVHV3a0xuYlpWOXFuamVnM2U1V2gxS0tSRTFrajdUUXFNUnlWdWR0WTJyU1E5eFBiU25QeDZUQVNuS1BJa05kN2t1OUFmZFVPZFExRDI0Y0RycVlCNEZnT1EwZmZpRVc1cEVXbDdsQU44MVY2eloxS3JzWG5HL3ZPM3B0QmtpeXkrSFhjNXluRUpkRHRVNkYvSTRWSFpQbjhEbXhKNjdYYndwU0RhWEUrOXI4aTNaVlJHK2N1bU5jNmg0VEQzb1BMTWd5TzFvZnhtUCswN2g3d05ENE5CRC92MllXSzRLUkkreHBNdDByR0NkS1hoS3owRWtCajNkOUg5b1gvMTdZMDNvZDV4bzBaR2JOSTI4WFB4OGRUUlcxbHM4bmZLd21jbUw1aFcxbWgydXpEWnJkVU9HUUhyWVZ6TEYrWTZKYjNad0RPRjVQbUlLM3BlNEtscmcrMDhNeFpFVlptazVVczkvb3FWNFA1NzNWNlkxZEdsbzlmWVNnMEdsTU1pc01oZzNlVzZVdS9semZscUUzSmRzaHEyazRrUzdoWU5ZaEMxZUlEUVB1Uk9XSEk0eDZ6NHRNUVJwYnFUTEhmdTZyeWg3TnBESFFjYVM4RitlU3lmKzFwQjBQTS8wU0ZLRGZSQ25uWE95c2tCQXZGWVcyeWxyV2ljQkFERENqTDlkemZDcHYzeStBWngzTVpnYzM0THNPNS9pOTVRVzQ3VkVOK1ZjSk5menZld25WdU1XNnF5MDRZNUxwMFZIR093aE5JQmViZkZFM2FOU1g0L2pKTUVBNDB3REJVWU9mbWRrTmpJdTRoelVnYjZzMkM1a014OUdUa25meHVGcTZwRDNaR0pOeGZ2VlVuL1JFQy9ablpzdEZLOVJaWjlxZE9rbDBRWUg2ZDYyMlR6S3JJeUllZlpTOC90SlV4a1pyTzdtc3RNbXdwMUpDSjRERFBGeStnRmVGUGhEcG9hSjlZc3M0TEd4bFd0Y04yYWVYemJ4VURNZ240TzRYVjk3QmFUZFpkYUgyN2xjZHZ1Z3dnNnRIaEZWbUJnUVFPajZQLzl5eWJPcjdiTjI1Njd2dEVVbHNKeXVvZEV3YXJyY3Y5YXU4UTYvdUZxa3gwK1czWlk2NVhTZlh3blBnQk5wOG56N3FzYXdNYW1sQXNVQ2NwdDF4TzdFbTUwekhiaHV6c2lRYkVOdmcwSEpaNzF4Q2dFcnZLQjZtNmtRczZ0RFJQZ1c4dk9SdTlMbTdsY0VKQUlEbXJrZzdjMWNHengwUkZMYjVVczVnNmJscEkxbWdzdWEwY0k1RG10Nlh1Q2M0L0hlOXZYU1lZb2doZ3hqckRZYWNYN3N4enVySlFZeldSd1ZQV2JZYTBraTRsQTNkSHFwZ2tXYTFjVU5NN0lKL3N5VGUzMG1Ickt3NndRci9TMVMvd0dpZ3dyN0o1U21INEZNekpJT0w0SUl2VWdhWXprOXlKd0l5amgvMDlkQVovYzFHZFN0b0RTMXFPRlZ6YzJ6b1FqYXp2UE5CMmx4cE8vb2x0M2lUaElaViswTnBIYlIvQ1NGL2VxT1lvWXN0cDY2YjBOcnRHcEYyQUs4MHAzZCsvbi9WNmZpeENXZjhDSFo2UjVQTlhzakgyQjcwSmpXODFsK2RFd25hMWJrN0lLRE5IV0VKd2lmaHp5V3RIZHRRTG1ZMm15ZGgwY3kvTm1RVlpodFJrNkFzWU1kUGdMMnRLeStzNHkrOHp5Qk5KTFFsQmhvcGE4Nk9pUDlrcFdZZmNiTHRKTURYdFcvamtEQ2JYVGJoa1l6Ty94WmlxQU15TEMvaytIY252MjI1SVYzcEIwTmZoeVp1QmVNZUtVb1pwQ3VRcFZnL3JPREowL3FJU1NrTGJwU0p1aVowSFVId3JRWEJPWUx3RnFNOHdUaWVGQUxLNmN1OG5XcnVBZ3hmSWlQdkdBUHF1TnQ2d29JQWdCNHpET1ovTjljWERSeHRHTnpKckx5bStqUmFsUjZPVnUyMTRZOE9wRTdQZzh4L1JVcm5uQ282aGdyM0hOa1p1SHMrcVduMFVZWXc5K3FhVE0xdXMyK3lFTGdYd29ReFdlMDlGV240ZG1UNTJ2eDgxU0lCN3BGbHNaQ2xkNkVHWXlUSytaQzhaOHAzVDVnVmZEQUY2NFhUNjI2MTNGUTVicVIyOGlkZEFMa29TaHd4Y2ZadFkvZzB0b3V2b2x5cEtEQnlqRmREMFFUNG95YzUrdjBzalJPQ3NSbnB0T0NWNk96SzU3bWdqY2VPVFFjV29hSzgyakMrempmVzhZd1puK3dvRU5UVDBDRTlGSDVlTjB6VEk2U2w4TERqeHE0aHlTdDY0SXNyclBHRU5HNlpRcFF2RW1TMkN4M0Q4NGdWYldJSTVpWjZGZE9jOE1xbXI3UnZkbnBGYm11UFFRbTJuRDlhZlN0aS9HQTBIb1ZVVjRudGh5WXgzKzd0OHpNdFp2K0hXSWZtNmlrVlJmOWFObGIzajErS2VCUWRoSEFMLzF4eUIrRHBHRTlkVXFUSmZpVXp1b1Vjd3NMZHFqY1A5ZDVrbVl0UHFveTJ6MlBKNnVsZ29yMXMvVWloVUhGM1ZrVkNCa3MyNGRZRDlXbzRDbXhiVVkyTzB6WDZMODI5TmNRclc1L1hidXhVd0R4dGlxdDROamQ3dEtrbGhmV25NSXdMWlN1bXMyNGlCa2R4NU5yMnh5NjlWQVhmbld5N0NJbzVuN1NNdlNMN0xjdkk4Q09XTFJGY1dYMjIvOFdwSDJ3R0hTT1dKMUUwbUk3NXgrY1dJVlppdUZqYVd2V1BNdW1uZ0wxd0NpN29yUngzWTdaSVZVZHR0UDNzTVFWZzZDVCtUMGtHcFIwZFF6UzY1bFgrbVpCUWlPL2JIckdHL0hBTHJHVlhZeDNoQWpwZkwzV21BUWcxdU52TTJGRVFoOTkwRHBmZE4vc2VzRDhQbVExTXU1Um45RUdyNFJkMlk3SWJXVk12NWxsQW1Sb21KYklOVXo1Sk84TC9ZUG5aSGdiVndGWWRxZ1VwOUNZQXRrakxRV3ZOckFOSmxHd2ZOKyt5aVExeGd3bzYrQ2pYMVpOSkkrc1NtazJGTzdiNjlhbFNkdS9ER0J1M1loSVorSnJUbFpHU2RwYXp3YSsrajdQRXF3NzFsRU03Zkw1ckZGejl5T2l0NEp2bFNnNHlqSWRjY01MNWJWL2pWSDQrTVZBN1lOdFNNUWRHT1dNZVdFOTJPRGRyRnJSMk84RGhlZzMrVXBwNVJTYmNPNWJTeFVpcDNCUllmY0ltM0FyUDl6eThEdThxek43QzVJREd4TlZyR0xnU3I2SXVsWkpiSyszeGtVcFpyM3M2eXFnUGtQQTY5ckgxZzgyM2NFd3U1Q091MnJ6eldseGtrS0RYVVFyZDVyODgyOXIzOStGSnBOSWpGT2s3dGM0NFl1dVZXWTFmWUFIQnFzQllabzhlMFF2c1lFS29PNHRhNmNPT201MVM5U2lTV1JaWXpFWExyUzNQSURFZEw1VENCNXF5c1lNSXZqSzF3eTlIWFYxUXBNclY0SW8zWklSQWNRcktoakE3NldjQjRQSEFaRDhjTlZGWHBWUVpIRWRVN0NEN0ltQXFZYWIvT0VRcVdUYkVna3hjMzYxdTlhVGVTaVlEQlBOc3RiUU91UEJkWVhRbnRxWnlhN1NNcDM2MTA1blZvK01tdzh6RytycWRUMXBFdWE1dFBPc2ZaSjFaYUtHdFNQRUF1eDJWMlNwWjRKdU94WEszbWtiSWVjSE1kUlhuazFaYzNDQ2FsUk5vR1RjelBpbHNmOUNsRDBRbHJGVlJpZHltbkRLVjlGQjBqVXdnZGlCNEcyY24ra0ErVm9NV01nL3pSSENmR1lrYVlMQys5OVRsSnJGdEJiY1kxKytwZWd2VHk4bWNCRXNONC9xVm1jSkNFc3ZWMjNSc3ZaR21iZUNDM1I1TTdvS20yaFg5TTM1Ynk0Vld5Qy9ER2hGSXJQMllYVk9VaE54STk4WmFVVXA4ZEdMbDJYM2JlYnZqL0hMLzB1WHFhYmVGMnRsYm5DSWllUFVaQlhsekluZnlCakhQMUE2OW5WTVNDSE9GeXBEUjdjeXlOcmdZWndVUXJ6MEs0eCtqRmQ3WE5wclBWbDRMaXVJUVU0Uk15d09TMnNISWpZazZBUGRFRE9acjZBVi9MVVdoTTF2ajFKSjF0QitScFNEVGpGMHEyY3FmMkQ0dEEyaGZ4ejRobEtrRFZaeG5jSHFLSml0MXVHM3RYbGEweUtMMXpzTENHS0FQMW92aGdKYW5weTFUMUQyQkZ0ZHpiWWlYenlaT2pEQUxrS2ExTzZtcVJJVWRLSkJZY0lvUDhpWGxOUm53Ni9QMGpYVmNicVhXbWZKRkJsU3hmOXRFS29MQzJhOU55WFdYSWpOU0t0elBGTXNHMXlXMlRLK0owWVo3anVsZDIxSk9PbHFEVktaMjR5M3Y1aWlaS0IzOWJIMlluVVlmdktXZVZzcDZSRElobW1hTkdFdER3SHJtbWo0bjM2dzNUR0hzVmJpRmJFb2JQSktWRm5USTFUWUFMUm94RGkvWVA3dFhXbkNuKzV1TUVoZE9sUXdLNG5pS2JvU2RUSWxyL3NHaytFempyMHlmU3hkbEZrMHhxY0xWb0s1ZU84emZ4dngxeEtlcjd0M2xYeUdqcU5aUVB3Z25KNTkrbDJPSDFnRjgzS0VqTUp4all3Yjlsa2h6RkdrNGUrSHNPWU83UkdwZzhJcTFGYnVBT05xWEZMUEx1SVVnL2hlRzNHVHIyZk02MEVGbGNoR0ROclBqaTRKNWhXRlFzTUFCSDNCVHZYWkFIRlF5NjRxODVoaE81dzQvM2dkZlhDSEh3WnFqMSs5OWx1RUFoU0hDOXVDVUxmUW1aSGcrMDA5aEhRalkwZ0NuRlJnazJWRzdaRDI4Y2VLelI5a0NxaFpURURaaHlOcVdUcHZMWDVmSzRuTlIwQ2NhaE16cDhhWkNIamhQUnFYYU10dnJ0RmNKdjd6S1pOTjlFS1gzcjVERktvNHZxenAxUnBXOWE1TXlrdGtia01HY2ZtdWZJSEJkbDdTZFVUSFk1R25EMi90cWFqRGVXNlk5SHV5YmE3N0xUbkdpdXNnUnc0RUxTTzhhVTdzTy9kSVZjSTdmUmhGcHplcmptcEZhcnRHck9xWi9kTEp4a3hJRFpKbmhpblM0Z3NkMzdsbVpuNDlmR1pGdGQzelA2T1Z6TUE5MnFLeFlSLzRYbUlpMDdwL3hTeWtMRnFpdEtxdGV4YmN3SFpGTVhCUlRZblVIY0JFam50YkxCMngydkRoMXRyVWtuR2xnV0J4cXIrbWtmUVNoVGZDcU5ESWdobldXRlpTTnM4OHZ5WmhzYW9mcTJlalQ0VWVKL0xxL2dIeDdxZjVKYTVwRkU5SmZTYUlPSXA2ZGFhVExFUUF5TE5FVXd3Z0FHUVdlN0JVRS9wd1RkMXo2RWkrazR3b3pFb3pYZDFMRVFnTFFXSDFzNjk3WG1hRUhrM3dTUkxKTzI2TzM5YXBvbGI4M2dYNDZ6NWROZTlMRFBod2lTQXpRRFdBVEZXMGRhZUJCS3pRT3J3T09pWHgvV0h2N1A1NUlmSmtYbGkxUU52Z3E4dTBKRkg3RDA4M3B2TzdvSm52Y3FXdm1ucGQ2cHp5NnRINGF6WlRZQWtxanJmb0RMWmdxb3I2UjNWVzh2OG5MRzlQVFpvRGxCMUFWZW1KMitFV2RFWksyaVdxcjVuMDZJOVdtUFdFZFJKUG9PWEJaOWF6RHl1bXpVaURmOVVCL0VlSlJvekVnQzV6RktvMzBpQ0RmU0NpQmdLME5oNXlVZlI5VHFZdzNnRHh6TWJpNFRsdGZadHdMeUJTNmJVbi93RTJwams2Q2h4OU9PMTJqWlFFeFhRNi9NMnh5UWxHcWwvS0pBeHJhS0YzQWdlRWMycmsrS3B1NHBYV3dFOHBXTFFNZUhxSW8zRVlaWW5xdmpUS2ZhejhzT1R6c3VQQ1B1ZTdHTEo1ZXJxRnlpeUtXMktqem0xUnNTVDBIWHF4akRQZStyUDhyYzQrZWdObHpRVUtqTENNUWVVWXk0ZzJwTzZKaHllUWt2M2J3Y3crd1duQmVYVGZXaG9seDd4TEtxVGg0TDdFbXdTcmFENXZpOVVPeDY1TUdMditaYU1tL1lMTkI3SUlMVXZrNlVESDZhVDNZVXlWZDNnQ3YwbjlDVFgxd1MyNCtZbTZqRlduNlo5RXRtQWN0aERlLzNsYUI0K2tkU3Y5SFdvdlRBUGhVSXVYcFdOeGlJMWZoMHVreXo5b3lkbGU0bzFlN1NXSWl4RkJvdE9jUVY3NEtCTG9qbDE1Y2RxR1hSRGZWQ205VVFWSndia0g5ZXZGdW83bzVHOFJmdmZoWUJaR0VVNzdxaUtQMVpOUXlnSktPQlNrZVBLSjh4bGx5eHNOMVJ1Wkc0WHF5NUx2MXV4dFFqRjJqZWwrTTJiVmF2VWVDMU5xQzhTTHdLN1NvSCtwRTEwMHVVQmxUd3NOUERmWlJvUkV4UTRjRTRnTld1TTdvYllxUGlHRVZQenpOL0xXekdhODczeWdUTzEyb2hiUGRZMHU2cUJaNnZIQWNVbHIzWUV3aVlFNHl4WmlZTFZieFNpSjRDMGdTbXBreG5nanYzYUxaRjIvR0pqclo0dml2SzJrZmxpWkdmaFk2TDdqY1lhZnlIQzh3SC9rNmp0TXBkb0w2SU14TlA1Z0xncUhRdTFQVm9vcE5QVjRDQ3VYdTlTNTVtMXVxbXpUS2VDUkZhTUtaZ1VYQUUwWURmZTdwd2VIamJhM2ZUbENLTU13ek5jNjEwMnI0S2pMU3JPUlBOUmVLcy9TNDEvSGpjV0NlTldoYlVERHVSU1pNRFdZeFdaR2RYTU1TT0ZOaGZMTHlmbyt5YnB2bC85ZXpKazhBdDhBMXRJTkFZTHFwRSs0Z09jQjRPSWVHZVM3Qis5a204YlJMVzJHTUFRazlSaTdVOGc3UGxkWDIzdjVSOW02WE55eXl0ZTdCTjhNcy9BRGZ1am5nR3Mreko5RWxlUXRESHY1dnYrSlVSZUpIZU4ydHBzSnJyVW5DVFVZTGIyR0YvWTlQcDNwK2FVWm1ZV0NNOEhwZFRiT2pVcTVsNGdIdFUxSVh0YkxZaCt2Vk5oYldzdzFjUDVjNUh1M0g3eUxMbC90Uzl4TFZxd1dKdkE5VERxUWZTSnJSU3VzVDFvMCsrbmRVRDFrRHo3blhYaFNPN1pCWURsY3lKOGJJZ2RxQWM3UGQrZWNlUkN6eWFsSkJvOWM1SVZrNXhEd09zeEJKTmtLdkJidTNtdUE3ZU1zTDVpQXNJY2Y2UTFXWHVLMS9KWWdaU2tKMTllc3dveERyYXA1dTliV09Td0dRb0dzeThhRUhwL0t1SnBUSHIrZVJPa2JoQ0hEQ2piS25EY1BGVWdmZEtxc2dEdVQxejFucWFSZTRuTWEwVXhteFFZSFNiUHBNNVJxdmtuQ2FEaW92RS9NdFo2ZGlqS09uYWwra3J2WEhXZVVoQnZMMGxPWHZNMVE3L3U5NXA3RjFCZFBGMUtGVk83OExjbGloQXdtWTRBaW8zN0o0b3BhaWNSYWJwek94NXdmSTROL0RnaW95OUNKTjhzVEphUE1nOGJjM0NaaE8xNDR0RW5YaEZRTlpjL1QydFhMdUY1ZmQ5WXM3dG8rYmxYSm0vTEhManpnTUY5blY4ZVM1WEs0aUlDVGtMWTFXcGpETmVUems1aWlFekFtaGlRc2VOditoTEgxRGhiUG9BY05BQktkV2dFemlCektCam9rWVpxM2Jaa21Edm1yelVtajZ1aVZqVmp6V1NSZmZmMFlQWWtVL1FKWVVJM3dHUFc3VlBBdnBzNzh3UmY3QmF6Vk9pcjVpMnFVcWFhQ0luQlkyVW9kWkpVWFVWcmRBSXhTbk9IZ0xETmxVZzAzNFBoVmlXeFp1MThvZ0ZOREx4d3N3cDlQWitWYWlOVXErLzNvRGVRRS9VaGJSL2NVc3dhb0dmTWVzb2NkcmtqVzYvbmZLTFlCUlNiVjJ4Mmw3dGUrWkszR2dNSGQwRHY5eTE1bzlDQkZuRXJzYmpTNkdRWlJmeFY2Z0ttVnRlTnZ2bmN6Y3Vac2JNbmZLYiswUEhEb1ZkdmZwcUdnN3V3MHRVK0NlYlRqdmNJNWdhOC9aUWVFbG93STVLUHRGTTkxZ1c4MWxHZEVwTmlrRi9FR0VndjBSbUZwNXhNYzFqK1B1MDY2eXZLeTI1N1hDcXp5eW54RUJyRzVpekJxNHl3K041MklZM2tRcmpFSmx0RHFHWlEwQXdzRzJFK1hpNk9IMWp4RXViTUs3cHBGQ2FEL0hGamxmbk01TjIrUGl5Mk1zTGJtU3F4blRScWJjMFdWNDh4US8xMUNXcG4weHBhVTM5bXkxK0txS0lMbHFhNDVGT1lqeGNsRVloalZucGJCb2hhaTFlMmkrUUhnUkJOUzRYQnEwbU0yajFDRlN6cjFRc2RxcFNTdmxXYzgrbXhwcWtaWGRlZ2JsS2o2UHRjdlh4UEFPalFndENML2RpUjdRRmJ2YVY1TUVVZXV2VThIYXNHSStDcDBNV0FCVEZiT3Y4L3ZOaDRZckNFZ0pyRzlna1JGQ096TG10Tm9GWStTcXZPNVpEN1N5ZGJnSmNzclBkSjM5eFNsYWpDeE9nbEs3dkExMGwzL2EwbDZNSXJlc0FQZFRWZEV4SEtTZmI5RWkzSGJ3VkZPT1NsdXNmSklSc3FHd3pkM0RBWEk4a3RyaThiVVFMUDBvWnRVMCtaTFlZS3g1WG0yak9IbFJ2aGZ2TXJiNUxoSUhPSWxNZHdzbUErVnV6VUc3Q3NWY3E5UXpFNEN6Tk40QzJLTktmNXZKWCthYXpsVGFzWHVpMDNyMW1tYXFHRWhYOTJSYkErRHlVaG9MbzRXK2UxUEg3VzI3Zk5OWE9tcGxoT29KZFNRSld3RXM0c3lGTHFBNy83L1RKdHhOK0NlTWZtMHVhM3ZBNnpmYzVNY2szVVNXaGxTakhsTjNyY2t1cEdHZzB0Y1h1dndxZE9yQm45UmFGQUR5TWg1Vkp4TVJEWGxkMk9VNXJ1dHBrVzlmRzhDYTYrc1lOL001cVFIcDhBclNrMWdLc1NnVnJQQi91cXA0UWRxVWxHWmxYaE5uOHI0MTdPdy9rWUw4azJrNkVJVm9sc3YvMnoxSnV3L2ZadHJDMW1Xa05haWVBWEV4cC9qRS9HYjhjWjdNTVhZTWRtYTE4dFc2dmRWYy9qWUhBTmlMblFiNFRpTU1QYTJiSmd5dHlZNUtVb2FvdFlUM0oyLzMzbXg0SDl2RUo1dm1RSW05anZYait0WndtOU5leVZIc21mU2N4Uk03SHdZQkxtTTFucEhtTTNBa3A5UEFnNGJDTDhTVDYxVHl1QVllQVJMS1R6R2pkYzFjZWFqUWE3bGNENTJLUFhCbHMrd25pT1l3Y0ZENGx4SkF4dUFLRjFvR09pN25YZFVUb2hDa2pVd0VZMFZzdldzRWRza01vdEpzUHNIUzRabUdtb3VQaXdxMmxrcHZKcU5iaGhha2hEM0dXMTV3Y2hOZEhsblhYNHkzRzBZYW1MRStENnQ1bzN5UERXQUNvS3JCdmYvVmg1bnJMbENNMXJRSDdYUjB4bm95SjVWaDVweWJLeUNKR09aaHRPRTZKZTcvbjd6bElUaElUcXlnSnk4em1TZHRwSXB1Rm9ZREdaaTdwQUhnSnhReWl6SHRKVWROMSt2a2FYbW1XaUthcHhiMzVDQ2pKL1ExeHJ2Y2Nzem56MGpLa2pUSTVsWWNYVktTQWpEOXRZWml2ZU15c3llKzdXSTAvUmdZZmtaR3pITm5IdkgrRlg5TUtRR0JBdFNrYmQ1Ymw1dUpYUS9oeGRiYjJnNWJNOEF2emgrc3A1Z1ZqYjZkcXU5cDRENmhBckNrU0hVak0yRS9qV0ppMzlkeTl1dU9YbnZrc0FubVJhZlU5cFh4ODd5SERvVFN4eDBqS0U5d0t6RDdxejFkYnR5MlhINEhub1BDNjV6cFUyMXFtanZrVXlIZjRvcW15ZFM0eGs4R1JLT3JqN0dSVExLUCtydG5uZWV5Q1N5SFBxaTlnUkxXb0RXNWhhNEJyOGNUaDYxTFlBaU1Hak1IOFpRRnZPRm5hZjY1WUNaL0JsRXcwQzhIb2M3UXBkNHhCdEZNTjdNTVhYNVZiY3VndEJYOVdRbXIvYmQ3eTd5alRNaTg4YThETENCWExkWEVjdW9DTFNabTdqRElmbGZNaU5FdGpCQnFzTVlhQjcweGxtZmF6eFNFVWwxV3BxcEJvWGN6MHlYL1RTUEFybXBLc3ZKZkNzVjdjRFBtY2ZmcklDN2NVczVKVkw2YmsvR0R1OW9mNFFBU0pqYkdyYlppcFA3MUxaWXRjZUU4RWJCRXB1ckVsbWViYi9BL1ZmZk93cTFxb3ZhTHkrUWtjcTBBZ1lWS1B2QmhlOERsY21BZUgzVXljc2pIeHFicmEwbmJPYm4wL0FBeXBleHlHdWg2YThHRXJ6aHNCY0VhL2Y2L3F6TUlCUXRYZ25MbTZWZGFrYUZQMlEwQmpVRDBxVGxzbS9jc2k2RWswKzFublZtRXlzcWdpbkVxR0pQYmQ4MDZLOHJ4SmVObkd0MXIyUS94Mi9hcUdPcGlNcUxLVU9SQnlqQVVaQWdibEJTNjhsd2lEODZWNjhCd3gyalRKODlwUUF2am9aQ2hhTXk5NmRlbTI1Slg1VVhpUzZPVHVEeWc5QU1mZ3dWR0JTeDk1VEYvMzFPMWZpVFVsU2o0M1FGQXhzeWZEOWEwWlNNRWFrSGtjUnU3SW83ZHIrZzBCK0hlcXd2N3hBQWhRRkhnWlpVQUZMTCtmSkM5N1k0emhkZVdMTkdJZnMxUFhaYisrNERQRFJzdStFb0NxbTlCcFRKeHM2TWpPN1JyZFJORTRtbndQN2pHUThZbDRNRFZ5N05oUTVJWUozVUllNTN5SmlGeFQyc2VVYVl0dXNiM1o1RHBCSlpwV3FseUdEN3hQOUZtbUZGdVJ2TGNGZXR2QlF2RGViSUEvYXo3L2RXb0VHZHY1RlJtYzcxdmJTMjc5WTByNjVpWHAreEM2cVFJVFRONzVTeG9UajU1N0lFNCtGdjRBd1RVUDJabTR3UkRhekt0RXhFcXNVaUx3MlZDeDExamUxR1FRVFRaNjYyd2p6RjV1akJKZm0vcFpaV0VGUktpcVAwQXA0cVpHdmFEY204Z2NHcmUwQW5hd0tEd1lBNGM0VHFZK1FLeFlqbkE4alJCekpJOS9vRXZsalJyZjFWcFRleHZVODV3WVEvVHp3K2VuZmR5eGQ1Yi9qK3lxVitFbnZZVll3RWlBeDViMlFKcHdob1dyWVV5d0tkRkFneHZrWFJGVFZkYm1QQm5GRDhjazdvNHBZaUtQa1d6VklmSGxpUmFXcEN2bVhrb3VaY2JKNTdYVXRWMFR3eWsxSDc3eWRNeVYxR1p6M2JmdGlKaEN1VnFtYTdacCtKYUZKS3A5VlJUaWtJbkVYZURoYm1rRXN0cGFuY3V6M25iUWtxUWhHZk0zWENJcGluVnFmWWNnUDlacE91YVRqbEdUV1EvMDJTazRnMERHcXlhbUxBVm0xdTZRdWFudUV3MWFvaDR4a1I3c0hpQkFMZEZsZ1VhZ3NwUUJZQk9jTnc5WlpwTEt6S2VPMEpaTGhzNUdyMmRvdHNJdTFiODBMeVZRa251czh2ekwyMCtIWXBSaXJLOFFETDNrMUpuYWpyVUw1QzJvNzFhT3dEMHpBZWpiL2I4SDNvdEtVRXBzTzk0YkxjR2xXL3BVeFpxWVZWSE5WbHV6WXFMeTlvSkU2WEg4bWphZEswYldURnFMZjNUS005R1hHUnEyZk5jazQxZTlHWEdMQWdIZGNDOUZQVlgrbVEzaG44RW1nakdyR1NZalNndjRkLytZdVVIcWxoRDZ1bjhiRmhvNTdwSGhTQndPWC9Tck5rM3JyTmJKZ1dDL2pxeDRrVHh3SmRqaldjSzRyZkI4bGk0MkgzYUtmQ0FFQ084ZktSZ2luYjhKMHlrVlg5bE5TakpGTlF4dU5FMCtaSVdlZUFlWGZldXowQ3d5MGxHVWxBVzFQTXdYd2lMdHZIZ1BhRzkvdWUxZURtK05jNzQ5SUlidHlORkNJTVJJdGxRdzlvamtTQlc1cVlGbjN1bVVBSVlwRlhvNDNYd0pLTVpibVBQVDNLR3JpbXRCam9FREp6T1EzcHlsemoxWS9iNS85MTFqNkFzMFEzYzBxbjd2UEhvbEovRlo3Sjc0UjlmcFZxaGMzQ2tHb2lxSGFVRXBXSjRMSkdKVDhSQ09GMHV6ZU5lQm1UYjkrTjQ2YUV6cndpMFE3MXJDWGVmUmNrSTRlM1ljZncwKzd0Tnh0Q1Qva1hUSWZmbG12OU0xVEVpL0wyQ1lqbDVYczNmVXhNQi9nTm9ja1ArMzQ5akMrUnpSby9wSUNDWit1ZFhrTEJNTDNUbVY2bW5OM0tsUGRZQlR2ZzdsMk40QWRUalROaklTTHNJNmtRbXFteFJ6YVVSRUxrZGR1RVJYZlNqQTJNYmlWL3ptYWdaMW55anFtdjdnYW83MEtHdldsTG1QNjhIVm5EVFhOQXFndUlobSt1UTczVUZNdjVGeEloT2w2Q1dzcW5COUoyeDVCRmEzbVIvSEVWbzNrTUJIU1EzK1JHbEZoR052eTQrc0hFK0JacStPbVpya01rOFdHSUQ2bStQUjhyNXo2d2ZPcjBwQllsN0lOS2Y3dUF6bmYxTm8xcGZOaXdwZkZGWmxBTFZTZGdJeHk3QlZ1RC8zWTlOMktnTE5EUHE2VHV3YzNLZEdPd3dMdmsvcmJxdEtpK1NJa1NjNHRJQ2FPcU54cWZhY2xGU3hZR3NyaUZsQ3FzODFhUU55T3NWUko0dTdvbE1OU201bGdxcC9nRHR4b2ZiY01zK3p1RUhPa2lJZjkvNk1OSWlSMEdUc2lQUGZvUVFpZXhOL2R2RG1jbGYxV05RcFdXNlYyUmVGc0hsUWk3Y2xSR2JscUlSWXY3QTBOWDF0Nm5wc1JCY2N3RUtBelJVOWZTV1ZEQyttNENmL20yNDNpNmc1akNiS2M1WENXOVErOVRBTFZwTThRdW9oT0ViME5mMCsvMy9NWS9tL3RMK1ZGNUhBWklmaWhNamdmNjVjS1FBb1VGd0VFQWdnTU5kNm50RTNXM1pCUHoraGVvTUVTQnIvZmE4bkxab0tDOWlzeG5jbDB0a0xzeG9vZ0pKZnB3UFM2VVgyeXdYSE85WE5WWksxbng1UTZWcXcwMmJEUzhzZnFnMVhqVDExaXpiRGd1aWlZWkErOHpzTHZ6OW91VUJBbFM1S3pSRFBkcTNpZ3h3UWxJVWttOWNLWVRQbkI4M0FUdWRXV0gvMmErek9UaWdGSXhBRlZJWlQwUnFOc2hyTDR4cCtaclpVSkFib3ViUm9ubDlkbWF5NXZpYTVKR2s3U200V0M0QzEyL3FzM3pZakdFSEJXSVdrcmw3cTBmV0dPemNpdzF6UG9pSG94a1NGdGhZZVRKdXlTZUIyb1hZWmdSdFVWVkZ3Z3BMeVlzWEhQREtiSCswSm45U2UzdnkyYXdRWE05WUpvcnhzSkQ5MkVYa05qL1Z0dFByck96Q2w5ZHg2NU1NRDhwUDdjeEFSb01EZU9Db1FOVW9iNzNEQWp3WmVmZW8rV2NsNFY0UCtPcXN4VnlJSTQ4TEE4bUV3RUIxRGd0RlVxeFVydnRib0d5dGZndWE0azM1T1R1VFlMdEN0bDBFeUVGOXpBU1FGRG5jc0pmRmhpSkVkcG53bVA4OHB5NjBJdktWd0h2eHNkOW5XeEZDaW5qQTRrbkl3Q3B2K0R5T1pOTlJmZDBYQVN3MG1VMzAwQWI3NUNxMVlWcWFLZXpXMnlzS3NHc0hscHQ4dUlZempIZzY4bElPaGJ5VkM5MXVoaEF4aHFZb2RjdE05UlFaQXR5MjZVT2Z3ZXQ2L1RuRm13WFhDd01ub0xTMzZKMzMxUUZLMmIzR08yZDJNNUY0TkNnNWVWNmY3WVFtMko0ZVlpdTB1R3E1b0VlM1JrYmFmdTNjTHkxN3pxL3VFb1d4aVhtQ3M3dW9LVUY2VjRlaWVLY2hIUlBOakdzd292Q29xdkZFa1hCUmNXTjdQa1NYN1NOVkNBVHdKaHhnTlV1cUhVNXlFUGJZY25SVEs3eWJIOHlSTURZa2p0L1FkZnErWmVTZzJxcnUyblJMMnpGTWNISTFnYTVmYXFpQTZWd08yem9MZUYrTmF4T1J3S05HdXlUWEFKR2lWa1hFUDUzMnZHRUVGdzBJazdJNW5VZVJDeHlwRUlpcW5rTGd2QjdMKytETjJuWS9hSllQdEhRRFdUdkhuK3pRbldEZS9CbUlvMTRmajlZRlRZWE4wdGlLZnFsenczNzVEUFlWSXZjdEtvUS93ZXo4bmE1aWU3ZnNoazRrazVuWXhYWThCT01XZnlDS1RiZk5VVmNCMTd0YXpHcDM5WEkyY2E2aHU3OFQ2dVNiKzZPbENqbFNiQjdyVlNhWExDT3YzZFZEMiswbUYxRmx0WUpQWkh3djZZMnhqajRzbWpmMFVjMm12aDNqS01EV3hwUVdodXIvc1BqdVFmMDN5dkRsZ2QyV1l0bk1TdTAzWk5LVUw1ZnFld2oxaVdEN0RTMFpRbGJkcm9RMkNyM3BSeG5GZ0pYVG1CK3ZNZnMyeHRzY2ZIQmhaSzhsRnZIVzVBd1N1RWFVMzVmV2w0NFBCS3Z5anduc1NWUVBwWWNMRldTRlpRY0JicmVKcXZrWEhsNk1XT042WVRJYXFyUXQ5Vy9ORS9JWjRxZDd3eG1sVk5SRmhiY0V4cUordXEzeEVlR2ZCU25uUjQ1QURmS1htWGlMdW5UNkpFbUYrSnFyS04wR0tvQ2s3QWNtdnJWYWFKMU5BeHRldUp3anZKQ3hQTWxhclBKMVA5NnZqOGhLY0NsekxBK0xJMWNIbkplT2dhQ2RIUkJPMStLU2toWFVabFA4OXhZQk9xRldYakxIL1oyemczSlNmdnRUUkJoTDlKYmZvNGlUS1IyelA4azVVL1Vxd3RIem9YOFdVOGZDejRHWWpVSmZXeVJ0OVhRUXZ6NHpIM0w5S09QYVBOdW00eEE5SGdsRnF5elhBSDhNZEVyUFhac1RwNTliRVNlUXQ4akNweWgzNmxjR0JRR1UxbVZMRVNyN3JzRnZjRDhxaElMMGhNVS9HS3pyRldIWE1rQ1UvS0Nuc0pzTUJ4OXlPQVJ5WHVqZXlkem5ra3dRY01pQ3EwZkdBTGJVNGNnRnRuOVU2MU9HbzNwZlA3MmtManFmV2hscGZEVVI3U0p2ZHM2ZzBKWU5GcXFzL2tkdk5maFBwckJFbHBTajJGYURrLzBJZmRFcXNmNGlVMWo1TWIxcFNtK2lTTkZ4dEhmTXIrVE1ENVdOKzhsb0dFNE83cUNmVnAzMWw2KzBIV1g1YTQ0R004U3ZsR3FoWlNxclhDS21reXFhVDF5L0p0M0pxUzk5NGZkVG5TcW1qWmhQTWdxR3FBNnRhWitDSmQxR0JXR1pzTVgzaDNZeDhOTE94Sjc4WVVuM0hpTGxPd3F4U1NCUXJka2g1Um1vYjBOZG5ncWd0K1lxaDQ4bkpDWWM1anF1UmNDdHFUdElXaEoyV3VnN1VybFREd0FweDhDb0Y4MzFqQ1g4SGFsTmN5Wm1wZlBwVmo2ODFyenAwcFZ6elV2a1Byb3M0aEZTWGhWeU53c2hqMXJMUXpTVHNhVlFUTWxyTE5sYlZZSTdiakZac3FMS2VXNHdQREtoSGpsNTdrcHBvU0VERGlENW9RVDdWMHJEbUtoL3hlOHBwNUxabEs3TVR5NXAwbzNFOVU5TUFrWU1jYmIzclF0OUNOdlFZUDRBTHBCaDdvNm1RUDZVNEsybC9TVWFPdDVQVnJYYnROZkVYUlhOVHpkeGxGVGVVY1djL2FER0lzdDV2R05FZGsvdnJCeFFEV3lER1JQbVVnU3MxbjEwakRwK3pvTmhqa3VqM2dUcWhzcEkrbUsraFRUNXExcTB4K2hla1R2WkRiL01qbXhlTndPTXpBTzh5UkExdjlzOVlmNHRNS3VkTUxlVVVuNXR4WUdLd0syYzZ4Vjh5cWpQZW9mK0dOZ0FOSEcwTkNpVWw2d0hmT0MzNlU0R2xaQk51cmo1TlN6clUxMUtVMDJxS0NkdVkxc3lmaUdaWkphVk9zUXJBTHozQ1FaWE1hNlAvREJCOXVwTkZndFROeDZ0ZTcvQnlSVVN6bXIxYXNoOU8yVWdpUFpIUHB3aHZQR3B0aTNwMks5dUZ5UWVGTVEwRmlWcW9kb3FlWmxqTGFuUkNFLzNIV2RyOW4rMU5ET3FUc042cHBTUFUza2JSL0w2c0VpK21HTnFHMml1SG1wK0V6Y3hya2Y3Rm1tdFQ0bFB6WDc1eU9nYi84OGtuOFRrZW1kSU5RcTB6cHVqakpZS093cVVSWTE4bU1uL2dXVVNhemJQZDI3Rnd2b0d2VjhlK2Y5aW9rSmtQQ0JPOGlBMW5yMitYR2NTVEFOVFo5TlRPeUhXbkpncTUwbjJTc0NEelpYOXJ3QnV0TXFNRi80ZjY4azVTbEtBYUhPZ3Z5cktHaG1xNU4vbUsyYTVhM29LT1IreUI4cXF6V2VvSEdUaHJFdUdiOW16MmlrRXlmelJhbGtNdjFHUDlUWWhZRDZkb0tkeEtudGpkTHpmZVp2WXorN3c1cjJzZ0R6SHZ1dUFMSHhhUWEvS2t0TmpaU1VCUFZ1QmdDV25Sc2QrZG5ZbUt5ajdrdjVIRDlERnNwUGt0WkFNM3JqRE5QWXNQanBPNitMYXFjU1VTUEgrTEMxMk5oWUY4ZFRjU09LVjlKeVdSV3FzWU9UaGpFU1BYSGNiUHRxcEdCUEY3YWZLelMwR1hnd2N5TDdLT0UvRk5jK0xGdStoQUQzLzBEWHpKSCttM2UvMkMvYXgvTW42VzN2UVZlUWJzVkQ0Sk9PQXA3OGlybjNvdGNRV2dvL1J3MUNDNDRIOXY5WEFCc3FxdkUzaDJJYWJOZEVzVU9JVjNYRDZpaWUraGlkQkEydy9xNHJxQkJQbDlwRk9ybzk1ZnVoWVRVUC9nLzRxSWJVSnh6ZWZIWGVDQ0dWRnNsQVg4WlkvYzF3TERnR1JFK2tPWENzeCtpQWd0K0FOVSt0b05VcWpkZ2xCWTM3N0wvdU5zTjhZSVpPMDdUUWVkNFp6WVNlUXhoT0lIY3JRdFV6clZ4Mk5zQndDQUZ4NE1FVmFYci9jYm43MHZkYWFYNEU3MUtjNUpFYlNTUnJLcjA5VUwvUExucW03VE50bXVMWCtQZ2tqaVBtQjdNT3NHSGszcFhoRkVkNzV2NGlPWm9zVkJ4bXZBNGhhbTlESmdHM01XRHk1NE1jUTdJcU1SM3NTVm0xM251dER6YkZlajNJRWNkMUxQV2NEcUM0c2xaVEs5emlORkpHaWhTbUxVakN0aUVNVjBQZUc3WHBlQlAwSmZUTW0rK2IxVjA5Q0ltaENlaVBGK0xBaVVJL1NacmptNjJnb2NWWnpSQzFrWmhIU0V6YWlOTWtPUlFVc3J4R1ZaOUR2OVpVUVZQUlM3UlNacFVYNURYZ2VrYWlpZjNRVDJWOWZLRGpZSEdtY3dTekYzK2VSZnhreTN3RitoT1JIMlQyMkpFaHZkQWFxQkUxMUJNTmlJM1BkV2NMN3J0bVNDNklqenpRUVNkdFlsSVBlei9aRE9BWEErTWFSbzRVZFZVVnlWUXE5VVc0V3JsUXByRytxdVcveTh6d2JEMTFBc0xRT3VaOXFRMzdXT3g2WWR6K3dvUzJPS3pjMU1mS0Q4QW9tQUlmVklPMnBZeHp3ZnBSanRLL3p6bXlVdmg1YktiamhQc3l0ZkFBMDZqSk1QU0kwM2tVSDhDNlBrOGhqM0h5MFE4bHEraVFGaEh6UFl6QTg4eWhtTGN1d3BacjZuSXUraVliVjhwa2c5c0JxL3FEcjZCYUlUYlZnVmYxR2trRUFuN3Y3c0VSNXI0dTFSb1Rhd1Z5SW1uVm1HWDdmV3Qzc1VaVVdlbFlBZ3pDdXRuWmU3SnFiNTBoQjNpZE9FZGlNeU41OTJENmRRSngyTkZESCtkdFNJa0NFTnNiODArMDZvd2QzMGlDS2VCR01CcXN4dFU2a3VycUZXWWsvVUdkeUY5UlF1R1pWZW5uejhFK1ArN2cvcWc2UnJFTUwrdnI0QnBsY0FCdDZkcmVOaW5rQzd6SWExc1JBdjVSRkNVMGIwbU9PczB2bG1hSUhreEI4RlRQV1IrWEVpeDVVTVRvd1BsSW81ellIL0hIQmNwL0lKWXk0UTVaU1FTcmEweWJzeDRGcWZvRTdWdHhCc3VLY0VmZG9ZeHhvcXlQUFhCMHhhemhQb0s1MmFIV0NQcDMvWkVBN2hlZEJCNTZPb21jakg3c0dua205YmJHZWFnRi9nUElUVEJlYjhNZlQwdC9qNUZ0Y0xSZC95NmlHNXkwWVFPelpteFdQRUFLZ2ZMN1BjZmUzV3hjOCs2TjBvMzIzK3dyMlAxZjNHMTVaWE1hMzhJa2tBU2JCWndpQXlHSUtnZmEwdmtiNjBNNjJlclBBbGlnRjRyUmNXZWtNWno2TU1wQy9rdGc2Kzk1eTkxcmMwbk1wTlFPS2x0aVhsS2tnMmNFazN2L0N0ZVhmM3hscDRyMStYSEowQkVLRmdRZFErRUxkVlg1MnhjVkFhd21UejdVSGZaQUI0ZHh1OExxcE1XVDQvOSsvdVlnQTJONS8xbGNxd2wveU1zRXQzY0kwMis0V0VwUDdGdmFyUGhReUY3elBUTm9CeEdScWQ2QVQwSDhqV1k2ZWxxU3F5T2JWVEVpYkN3WndMVHQvWlZjYzdMMGMxL1dqTjZtSkJTZDJUZG1nQndtS0NkVTNYL3lYVGpCakovUmthV1BxOTlTRmlsWjc2T0RodzY1bkp6ck5jMEs0ak5sblFFQXE0UlhvWURldkJnNDE2SzhHVmtObGZUTzFpcHd4dmV0VHl1dmd5TkNKRC9Tam9Ubk94b0NPbDRYZ1RkWktMYmw5MUptYUJhUElMQUQ5REFVMFY1OHZQeEJPSHZ6bmdudFBsN0hubVYyYjdOYjVpNDJLY2hHSzlHVEJsYXNxbWRFMHVkeUlTVUF6Ny92ZktOR3oyRk50a2lMaG5VMXN1Vm43emRFZW0yVklFN0xMSnIzUHRJbWw4OFBaY2E1T3dRYkhKbHB3ZkxtRERCUHRmNzdkUHdIRGxwYjJ5SzErR1lRbkVXbk1XbmxvNUJTOVpVbGN5UGxtMndCaC8wdGlLMjVlNVVoMkl2ZDhvRTlFNWYydWFWbThHVWRxdG1FSGpKbWZqbzFzd1BPWFA4WkdkaDNLYTZyaG9TdVZUSjlvajd6L1FaMG81RUQvZmJNUHBFWnZnVGdUWXRkQ2NtT3dtN2dTTWh4RjJsUXlNNTFoRGNNa21FMWROMmN4ZW5nOHdvS2xOWUVuZG5nL1h0WW5xN01tR1FNYzFPby9qWDBlcDg1eFNSbkVOcUpzRm5LMTlLZ3huRVZwWDZ1Qjd6MTZ4VUxqa3RkcWNFZ0xBbVhwVCt1RDFKWVlyN2dxNm1LMDdocndldjM0VUFGYTJXODJZejZOd3l4bEE4MFFIbjRoZ3BUd0tQWDZ2N3BVSjBDNjV1dmJldEhlTmhNbXlqeldPcmRpWHFLL0dXM3lkQzI5SzVRU2J5ZmFZRVNXNm5lZ0N1Sld5TS9KZ0huNkprek5LWjY0Ung2bFFpSWZickRyaVRJcUovME1INUhQck9pOFpDbmptNkp1KytVOEZZRlp3dFNQVmZMSkJmQS9mRzFwK1FoMmxGeVp0cENQVGJnYzl1OXRaSC9kNVlvU05ZZjUxRTBUSzVjMjVmakVnNTFIWDlGT0Q0a0xpSmVGb3VBdGprU0F6SjZsMU45cXo0OHZPb09JaDhyT3pHc3JSWlh4RWlmektqcS91ZFEzQUtGbTZkemxOanVjVkcwbkZGYlBBWXhOb3p2VWJKYmxEYUdxRmVrU1FTbmVEcHhWaHZxYjhSRWxXMDJNQkF4RFg2V3N2UWZHVUI3NUZyZFJ4cVZjZDFZOU14c0szbWU3WDVpcHlBRG9MVkNySm0yTW5PTkovcGdOMnNEb1F1U1gvNkpRSGdBc0FDZ0V4WlViQUZEbUF6TVZwdVpRcHRUNW5ZZFMrbG8wRnlUb2pubkg1aFhHOG9za0tFMkYvTnl0Z0ljRkJNSEhBMzNoUWRWTXZhNmpMODVtbW82UzBrQktEUWF1WlVHeU5RUklSQ1dlSmV0dXdaQ3htWXpMd3NMUVdHcmMzeTFNZVVpMjJyT0VZNHpxK0xmWCtrYURac0Fvd2ZvUW5nMzU1WVVpSGJiUmJaWWk1amFUS3ZJN2VibG9uVnJlVURMOUdaMUgxQ1pkVHlrL1ZSVCtoZjZ5eTZUZ1RUMmpkWWZBbUdLN3hML044MkltaW4wNmkvdUJJWHJYVGtST2psakxGUmRQRHJHYnIxbnBKTjBtYk50MEpiSFk5RmIzek1HUVF6d29MazVESS9LR29oSWxQNWZJMmZzWVhZUTFldkJpZHpJL3hNVFZQVmZIWTRkU0hQNDQzVWxIUjRhMGVPWFMvYU1MRlhnWjJxNjU1L3pGdG9qQTNyL1hLUWxoOS83SWlscEE0QWVYS1lDRzhBYlMzekloNmZYalp2bGQ3RzFEVXFNcXZjMzROZnlCdkFNdTZ1ckIvSEY3cDNwTHY3bkFkdFhsQU5yb2VxanN0Ukt1dFg5WGJ0UHVzemhjcUp3VHFSUGphcS9sUkJpOE5NdFd4TFJ2VDVwWEpWQkg0WkpIYmVLTUphbXZWK0ZpOEVkN05KTFlndjd5OWpHOGY4Yk5kdE5yOGRFNnR1QXkzZ0tZallaMEhQSjQ3UnEzbHZWdU00Y2NBNUpNYTVFejRsR3ZhekxVZk1JNkt5RS8zTmRHakRIYi94LzZ4a3h0TjZwSzVPWHVQOXBDbHhheXU0Y2ZNTWM5R2NwMmNYUUg2eVViVkkzRStNdkdLcmJZUFNJcmV2QlM4ZEI3THVSRlFqVkxYS1h4RDlGZ3FITUx1eDhDenNXenZuL1NqcUVnenBJZDkxUVVETEdSeWhEY1BQT3ZLOXVSZGVUM1V6VGRPc2ZTWWZGYkR2QUhBVkxSSXhQeWVHdUNkUEtETWxHcWJQN2FPQVBSUlFtRTFycFIvZWMrT0t0aUYyVmpYVmVKV0ZiY0syOGZhNS9VSVE2alpSNTlEZ2ZoY1R4YlBXSlBJMUFhSkNmSTBwaVZaVFlXcmRlVi95RWJKR3p0U2dyU3d6cld5NkdaWG52WEl3S2tpMzJSRmMydmRjQ254Z1U2YTRPelJIU0RBNEZrS3hvUVNGNEwvZUJpYTlLMlUzQkhPMmkrTktDTmY1WE81QVR5NEdkYUdzZTFPQ0YwbXU1YTE2bHJCYm03NXRubDBmOGRNbTQ1ZmtMS3IwTjVBTnJ4b3NSUVZQMHpUWHlkSktPWUo0dEY1NlMxc3ZZSkE3UzlkbHhoNWpxV0o4ZVFPVXFQd1F4bkdOenFHdHNOR0Yxa3ZveTFCK1d5RmxpNVJQR3haeE1NSEs0RmNKRlQ5UFF4Q24rK2dEcDUySmFNdkdhZGt6dkUwR05lcHdFNW8wb0hNVGtWZE9QdnA4NDVTdTNGdk5KQXBlMFdqZks0V0pONzlTTjM4QUg5Q0M0SzhXbFlSQTB6Y25MdW1XQmRjY2c3UjZudWlIYTM3T09nbDZ0alFkaUVaQ1R4NWJUYkd0TkkrSGZQVVRQQldZWUpzb3lZc0Zxczc4OHZYV3ZHa210dEtQZ2FKQmppdUZBcnUwLzRqc3ZYRlh6RG51ZkRoQmsxS05OS1ZQaWc2UHRFMTMvYnZxZmR6anEzRDdiNnlON1llMGFwK2pOQ3pTY00waFVjMlRFbEZqWnowS3hNQS84L3JmeHlVeUV6bUpoVHVRMlRpazkydXR1ZTZNcnVVb0t0Yi8rS2w5NHdsQ1hPd1d0UWVJYVpFSGVnQ0hNMk9qWHFrQXFCeEVUcFVzbk1zZGdWMVJaalZKd0huSkN2U2tHemVVWklQd0dhbU96Ky8wNDdOOUEzTkpRK1kwUGxLakdGK3RKYXlSNisraGp1am9oaTlsTDl3bndrS1QzMWNoWUtZNmgvaDJSQnVjSFFBNXVqTzd0YnArQlVuMm5HQXJsZHB6Uk5xMjBOM0JmV2ZJMHkxaXJodGZ1eWtMY2laMFBMdmhsRHU1WFdyd3FubXc1MGJaY2tpSDJ3Y2pUbVVERmQxLzNVMDJrS244aWZPTzNxRXcwbllZMC9VYnZqVU9KRk5ROWttMjF4R2JpWUNqL2YrZGhLMGFDVDlkOU5vSTlaUWlPR1JlWDFzWnJMWWo5ckhGTE5HY29FUHQ1K0htQlY2dy8vTWhYcHFoUmZmUDBSbEYxdWlrNEdCWisvcEovZ2ZTcHg0b1RDR2VDQUtkVktaZDF3TkxYaEhMd3k0eE5MMUNyS2pLNFBPTWdQVUozSi9ucm5SNWE1bVRsWkdqYlh6S042VVF2ek1yV0wzYWRVcXZoVytpVC94WE9vNU12RU1BeUhBdk1EVDJ1eUg4a0FWS3paazFsV0MvRkpSdDlKekU1Y2RjcWlkcjNPbVYrV0o5S0s3Sjk1L2hzT3Z3Z2NRWUY0YzZ1OFNpMzFzLzIwZXRlZUJkaEpCRnNaNUxLb0dmOUVHWUp0TVkyNUpiZTlaa1UxOVJkaVlJMVV4Q05hcHlFMzFRa1NPZ3hFOEdmbmZSQ1liWXd6NE5HdlVzamFRN3Bqdml2cFFIT2ZpazhaK3NOQ3VKMDR5eFA5bXFkdWVhektKREpuOWJFdUljenRsYlNTSjlOQ09KWS9FUFEzNWcvaW9La1Fsd3AzMlg2U2ZTeE53SUJJd0RsKzVOWW4vRlA1WjREN1JKK21vNmJtaUVEZFRldUJOdUdXZDN4R1kyaHEycnpWVmptM1A2NGRVYWJ1WDhHSXkrcFJnSnUrbnlBdDdjWG16cjlQb08wZzR5RnpuRzJ4Nkd4NGhrZXltaGZrQWFyRTdYWEkrRTR0UnMva2EwbXRKNFdab3I1Rk1GSGFZZVgxbGFNbzJzTEhheGlTM3RkanorTkJiU0dnOE9OTXJlcVNVRDNzU2Z5RmowOVBHNlhnTU02S29Hd1lyQy9WNlhKK0tnbUlNdk15RWpyY1dZeEhuSlYvUGJpVDNrRTZhbFpTUk1XcnZVNFhIeHMzYVUwUFJ4KzFIVkZrQXgzWDNDU2ZUWXNQUU1wbHJZclBEcVRTMlRYeCtpc1RITjNrK0VySm9BYUhnMm5UQ0RqdnkrRTJEanpkMERBVktOMzA1Ylc5ODRDS2pZcmRiYmlwK1NPelREM2lHdUlHSXVlTVZRM3pVS05LbmhxTkpjSUZkMzViVVMwc201b2dXWG1NL2J4emxmVEc3dzFwN2dneUtqa3RveUpaRUFZcTV5UWtsc1h3WExmZkFKbTVwTkR2emZhaVZRYldrTC9IaitPSzVwUzRJQ3dxNnMxV2NLSEc4cENDMVNyWm41SEIvQWxUTWlMTTVxZm1uV0c5c0FiY0VsREt0bWxKU3d5RFpENEV3a0wzdzhWdzVCWi95TCtxUzI5WnluU3FlV2JJa1U4bTIwd20yWVg0R0lPOGtMYXM3UW9UWUZ4a0p2U1d1OUd2U21uUUE2dmhLVW9IbHpWOE5USkhXME9SL2h2NXV2cEovZzZpcU5iYVZ5YnZiRVhxNEtOT28vK1pVYVc0TWI5Z1lhdE8rYWlMRVhaSUxWTFUrQWx0V0pjcStwVFVYWmxRY0JXRnZzN1VocmpRd21ZZ24xaFlIK3Y1Q3d0TmNkVWpnME52NlBEb3g0dDZCT1BSUm5vdlhtNGNFNm1XUndBNEpxZFdNaUtNTm82MW8xYVlmT2Q2Q2JvSEFRTmhUb3ZNN1h3VHFPZ3VWUUkzK3JQZStwWXlwWkE4Y3UrcEpkVHl1YWVLeXh6emZOT0MyQzF0a0pBU1ZJTVJhOHVBekE3a0FFbGNpbHYvd2QzSEcvSUVsa3ZwUE1XeGdQTXZ6dmxZb09HWGx1UHVaOTVJbVpkR3ZTSE04MUNVQ1lSdnlmTjByckhoWmtmbmZRV3Y0ZnEydllLT3dkWDIvblZWMVhXWGhYUDk0eXNEeE1yVXpwSkxRTE9VT0NxN3pvTE1kQXdvVE1ybFVKUWVlZXZqdG1PeUU5V0xBaTBpZGgzZWlLeU84V0c1Q2NlcmFSbnRya1ZHL2dkSFNUTzFCRUVVYThVVjRLeERCSTBVamNUbnRiVWFrK1p5cTVuZ3FmV2VjSXcrOGE2bWEyNTlPRDNhUDM0L1UzbCtNaWFrWW1oYjllREY4NGdQYVhOY1d5MDlyUUdPaHlvcEtDUEJxWFBCYlVOcU9ISlNZUWRGaW9QL3hGcWFzUjJ0Vk9hMk0rQ1Bwd3Rnalk5SnpvTVBpY0orT3JnWTVYb0hGU1hoajRDYTg3WEtkWTA5VXE5SXk4My9GYmVnYy81dWk3NzIyZktFa01jdFhLMzRhWHVvck53YU54NEh2d1JQZXdYQkI3bU1EUXA5SjIyS2d5YlNudUtaQjFISFIyRVRTbTVXV2F3WUhLcHB4bTkvQzloNmlOT0lMVFVQTllGR3g3cm16dllRL3FWc3VsZnFCN0d3TmVwWlpqUHNlU1h0WmdSZ2dyb3ZHMHpaTUwybW9WOVA2UUZQNFlzT0J4ZzVkY2ZrbTNlMENVWDBIZGJkdXJTbUdsTHd0UEpYVERSTkkxSnArY0pHQjVmNXlodVhrN0lzc1JmaEsyc0tKR25SM0hlUUpYZDVjUUt6QmsrbjFHUlhSR2prZjJOajU3clFqK2ZoT2RNZlE0MEVyMWZQNUVMVzFtQzRmTTRpMk11NnRLWHRPSHNtMDhGSUFMU29KWnN6aDVOL0dyMzZJSkVXWGZtam1WSXpZR1JWd2pjbjRxWFFvZDZudUIxZjE5Um85cnJrUUd0SUFYU0ozZUp1SDlqYlU4eEFrNFRKRitsZVV2SDYvSkk2WFU4NUNSZWs1WVRkeTBwME5TWUxVWFErV0RVdVRwYjl0eHhtdUFNVHN6cjVuTnRPQXc3bGNjTlZ6L0ZVOC9DZkxWcTdHVitaQjhOOXUwTzZmZ293cTFRRnVkWWVhQnRhRFN2S0lhOUlwaUpyNC82VTVTSmRYWlVGbDlGQW13MzgzNjZmbXZEOFh2bWV5bUN0MnJWTVFvUDBSWTVjWFJ0dWdLbkJtWjE3bVlNUkxQRC9neDRDQzBNRzlmTzhYVk02NFlpTzkxVStPcThSRUpHYS9XTFdUa0RPTUVrTmJMT2l5UG11bytMdE5wU2lYRFVpb093NHI2ZVcyK0R6N0xSU1REcEZEaG5EQU8rUm1sU0ljaUQ2MjY4eFlVQkdmcXJPU0lyNEFPbHJIRnhoTE5yMTQvWVVrM25UQVBQVnFYWTdvU2R6QmxKdGVkdnVoSmw1c1o0Sm1DYldnUDZQNS8yL2M5NzBDU2czQTBPQzZ2OWhEUzJNQ2xzWmg2eVRmdkozNnJuamxjQXJzZDUvMm8wTlRQbVVSZ2RtWDVuOFJLRDliLzBVL1RBa3NkSUsrZStORlN4T0NEZ1BTN2t1aWl5YlZvZ2w1bTIrM1JRQWZtZDRRWlBYbW1VSnhpNEl0OU1tMGRkTXBHaWhOUm5FcXNjbDNoaFVEbHU1MVB3N0hvVVhhZCtScnNNUlBta2FEREpQbjFpODNYYXludkt0WERiQm5aR2diOFF2YWhFQkxDdm5wZStqTHFCK1RleGVWQU85b0cwdnlSN3BETEg3THdGLzJjT2c5WU83b1h1NDlzVzNPdVhwSHRtSG1BQ3ROOFNKU2JHb3dXblRjK2xqUkFrc2pMMUZQUldubDZ2MHF6L1oyc1oxcXg5LzJMc3dYaFNXRlVuTHczckVUeWVVZUtKcktsdkt0TzZyMUo4M1hpdEVHbk9rQm9rcHVFN0orME1nRkdNekxZZHFrdXZVbjY1eC85bHVrT3ZzL0U3cEtlOXZmZTJQVitkZ2tpRVhrZUY2RVhUakFQOFBqZUVNc3dhY3F4cmpBcjdKVlRhQWtndXRRYlIzSjd0cyt5YVhjVlA4b1RYWEJCamVTM0pvU3ZGMlhweTdtRU0vUXpscGtBQ3dyYlBEYjVaaXhxTGI3NDQ2VHprTHV5NndKbUdIeUYrL3JtaktiditkOVVDL3luSzV0NnFiYW9VdWp4Z0FCNmtRNGVCeVpkRFZHNUZmSmtRdHhlNTQ2SWFDTENTcEZaUERYVUJGMDNseVBTOEcyME03R08vOUdkeFo1OGY3K0Z2c1psYk9oNkhzeFBHL1I5dUFmNWxWRzR0aUN3aHRxWUlSZkJHbjJnZWtLNFRLTjk3NUxuNVdiZjhZT1Y2TTJBQ2lMTkZINzFoQytVaXIyNzkvMVA2M0NNTnIzYjY1YmxJWmVkamUwUmp1WDBUVzRUKzhtQUhZSWdCbzNOVXYvTS82NUVjY3JXdXpMVjlZc2NjdVFSekNaRUJZV2VHQ2dkQjBOd2UwbkRROVp2dGRSRjNxSHlKZ09SbTJlYW5lbm9ZK2h3WlpZZ3hpUmpFbkZMbm9QdEg5VmxjeTIvMDhoc0U3aVpuOWY3MkM5Z0pCQ3Jqdy95WTZnRDNsM2J5SXJXWTZmRStTSjQxekdYcHpZMGVBeE5nRlFFL3QrWjVnaU5BMStxVHVmc2pLa2JSTFkvb2pqWmxPUEtIN0RPNDQvVTJYdml3Y3JLMTlqVklHaklHZEtEdnVEZWM3eDlWU2RMTW41R0RMZURNdmZIQXFRTVg5NXRyd1doeis0ZlNmMkIySm51SXdJK295dVcwNVZZK1RFWjVSWlM5d3FaOWF4YlpXMXNjcHVzSHpuanllcngrRHFBMCtrSnZUWkF3RktuRmo1ODVMc1pSY05wV1FzRHlZb0JvTEVGMkVCNXB4Vlg1YWI1bDljQzF2RGVLWTlTZmpxdUMzUHFiTklCeEFqYzFGTlJ5Q1JWQWhTalJLWmkxbHk0UzJ4L0Zpa2F6M1QwZlBPbUdzalRUVGxkVWEwdURkemVyS3dtOERJNFY1WTdTWnBIRk1GOGpjdUdMaDNLOXMvdFZEcmJrRTB6dDVqSCt3MG9MMUk1ZUJjMXhkYzlhUFB0SHhWUUM3dU1jLzFLU3N3ZEZFU2YxS3VCYmJRZ2REU0dPaEhKMTQ4RFdTQWlZS3hJZEp3d29odlZPdVE5OGpoRnpPb0MyNlkrRlFpejU5MzhKN2hNa3JYWk5zcG84V2R5d3FEY01ab3pXc29uYzFVZFhxNzdMbnFkMHBSMTlYOVRlcnFGTzRSdCtoZWllUVA5a05nRVhDSmVoUmdvRXVXL1lHUHJtb3pkMjJtdDExTW0rM1AyekI0WkZXWEd3TStna2d3aDBIMHJKTFQzaWhsc0hTUjNsSU9PeHdCWGN1dzdDWUtkVFVjUTE3cXdoVExqbUNpdWlENXRqdGZLZ0MveDF0cXFhc0RhWXNBc2gySHNnSUlOajJ6bG9uSG8zQ3FzYlFMdC9ENitxL2RpRFVyeTZHRnRCQTVFV01ya0lwU0M3dW9OZGg3eWl6ZlhiMkFBV29DRnlCU2dZQjlsYjdwcWRyL2E0eitkWlY5d28wM3pRZHdiVm1sWWZwb2lHRlhWT2R2NmNDY01lWU1PdmVSVkphZjErWDhlUzRESkJ4TVMveHZaci9kV0M2em4vRTRNMFVEKzNjSk9qazVlT3FRdnZ0c1dmZ0JIM3B2Zk5pYnhRRDNQMlFqQ1M2WVNhQXhpVFowaVlnWlZhTElkemsxZjRXNnNPZTdwZzJqemNKak9VSEJwS2FvZTgzTUc5OTFwWkR1WFhUYjlLekhZOFhJUzZseVFwZk10NDJHNi9RM1o5TmI1T0drWWJUWHN0Skl6emlQT0RsSjZuejArZWtZbnd6a3E4d2FhTUpCdUJTZGNLQkZqYnF1R2RCRzdxRXBXRk42eEd3VXJkRDQzWHc3WlZxQ01yQ1ovM2xCV0h3aUNqUlRGQnJhMXJxNUVJdnVSaFN1Mkcvdk5QaVo1ZUMyUDdJazhSczVRbmNGaVNOQzFaNHpYOXVnM2lsVVhVSVMzcloyejNMM1RFVXUxdCtXdkJMY2pvZ0NES1lPUTFJWjluZnh4S2dzbzFNQ2RoaTBUaGpmQkRJcWNqR2cvVkQ1SW8rTllmeVFmRFZPbnNabkw1cDB4TGg1Rm0yUnA1VWhEOG9haW5yc1BuQzRucmgvN3gxWDRsTWRyTDRpK3dYeE5KcXdLWmh1MzA1aVRlVEYwTGV4bzVBVnJQcjJhRDBoK25SbDFkN3p0V0p4SFRIdHFEdkFNRDdiMVZHa3hxZk1QSmZmdlNXeU42eS9SZWxwUDZ5UmthWCtzOEplQksza0tQNHQzejExb0pjMmhwZGxhZ1NqQis0MDJ5cTMwUEh0WDEyOHZBRDJXKzhTdlUzZk9aU1BVcVZlenlVWGlKT3dQUW1WcHBUOUc4STZkSUZFYWRxS0RFcHNwVWR5TEE0UW5jcmdsRnlBTWtQZnFQSEdhMUdKQ1plZkw2UnlDZm5SR0tiZWk4ei9INmxkQVRzOHBidSs5MVpadW9mVXgwS3pMaVVzNE1CVy9aSFcyaGM2OFRnUGxVQTFFTU9GZk9ieXIwaXc4ZGpmcElVN3JNKzN5K3puUmZlTnNmUEdJdW5pcXFsWVJqQ1NWRUtUT2RScG5nMHp0dUFNa1pMMTlOOWVvVXU5WGd1eE9pYjBLMWMxOFBNMTg5ZUZTOEVXU2EzQlpBeXE4Z0k4ZEhEdnFJNld5ZUNaaVB4TnVmUWhoYUdHQUhublVIU1VCdld5dHRTWlFmN283ODJNZEI3VXNmMFYzM2p4WlAxMU1qeFBSc0R2bVpJRVlPaWhpbGkza1FjK2l1aEZpUWdsTjFlN0JCdnJRRnlUby85RlVnZGhuT0VoV1NOVnhpN3NiTi8yWTVKd2VtTjh5b1BDYXNTVmJQbEtuc3V2Uk1YQUhRbGMxdndJcVFhNGhLWmx1Z2EyUVBXc0pOdkJMcjU2TWVWTUQ5MkIrWmQ5SUsyUjRJMG1waUU1Y2hrSGdYbzNLWHRZeU55T0I5L3pRWTBaMUExY1d3UXlLS1lha3VhUThCVkNLeFRPQlRyU1AzakwrVXF0V0lpZ2xRU0JjRWVUZERsSWtJQ2NQOU02NFV2SGRDVjNEYjFmMEZVNDBDWVBhcXFJVThjQ29mb3gyKzAvekZSM0N0QmFuVS9xeGtYc3ZSV1JvMHF6YjgyY0ZCbVRQS3pCdk91b3c2Mm9RS3VSV2kraUNqUnNOT3ZNRjJIL3FIK0twekphNEFmcEpMbGVEdmpMY0ZvNkRuaWZZaGhjQS9PUFFhbmQyN3NkUTR4cFdOcHpnRlFCUWllejJKRWVENVpBRnI1TzJ5Zk9PNDNmWUlubmp2Q0lBdndOSDFmVUEzNWFWVzZBcDdUWGNBRnJUdDNrRHpJcGhrSTB1YjJDbUFzbnNJUVRSck1PVnBkZ21BdGsrcHpseVFtUE1XTU1PQSttcDNoem1sVWF4Q0QvYS9yV0tYMllkM2RGWTJLc1VmOTE1ZlFNYi9SM05lczJUMy9kN2ZnZjlaZkoxVEZpMTM5dWFKaXRCNVZGMkljUDNQUktXdWFCY2JHYUl4OEV1aXJIVjY2MDJjRTFYUkNvb3ptUTZzUlk2aU1vOFFOK2xqR1lxOHcvdGlLdWxhT2NEYTBZaktab1puOEFCNHJ6TEpWSDgzSVVJNWZSMEc5dGZabXJIY1UzcWZLbFY3VVBaQ3NGV0J2YS9jc1VFdFlzYlkxd3ZnclNEVFZScU9ERFhCTXRzVG41eUtNRW9JQ05VcnBxb2hDWm5DeEpKdU9NdnVVSnp3NHlueWR1TXVCYWlDNnJhOE9jUjZ3VzkzNlp4WnpscVlZaXNLeEU2Nzc3a2dyT00vSndtcXgrd2FWU1JvYmZwc0QxTzg0Y2N5L0M0ZlkxcUt1cVFaMk1nVCtBK0pRUVZlS0I1UnNsQ09LKzlRdGVNZVBYM2FnS1FzckhuU2tUbmt1VnJHQUhMRUtVZ1dxa1Nrb3FCMFh3SzlMMC82ZHJ0YlhWMnE4WUxWVGNNQWlWQWxyUkhxM0VnaUREK0RBWmZVaEIxNHZDZ09XbGNDdXlUbWpYTHdsc3FXbDJiS21PcVFpbUhqbjhQVE9uQVBIZkd4TnpqMnpIZ0U3WDg2QmpxTjBJVkxKdnJ6aUhVdTg0YlZoTzl2eGRuNzU5V2RsOFBHd2dnSEdVc1BIYlE5c2RwR1lmYyt4alhDc2R5cXBxM1ZwQ1kyeE16MjNtbWZXNFdKcTQ1ZG9Bd2pzYllLcEdxRC9lRzV6eWh1S2RVV2RDZ0tSaHU4MjljeGZlcFVyakpuS21qcmlBYXZDQ0FkS0pNMlZGUW9nYjdRaDI1eUlBNHhWMTllNkhwcDV4WC9XT1FsY0hZRXcxM1RqWnRsTk45T01GMUJONlNCc2I4cFFLbzdrOVcyRE8rblJpZGlxTWY4UTVHdEFsNFh1bHgrMFkyU3ZnamtiOXBsM05qamJmc0ZLNmx0VFpwZDFHdExJR2FRQ0Qza3BJcmk1Y3VtckpiVXV5a1NFdUFPQVhrUXFyamEvZ0k0QVp5djhTajcxUHhHeThMNnJtTEd4UTZaalRpaFFjTnVRSlBNUU9RdEdOMXZHRkorY0pHeC96cXRJenRrMVNraDRBUERuMitZZnc4RjdheG9sUjFBcXRnVjJkMHJFYkgrcXk1Q09Cb1VCZDEzcW11emowNkRUZDZJZWg3Mk1aejB0SnlNcFlrS204RnZJVGtjNnJoUWtId2tjRFpXZzFsN3RFVTB5cStyMTZBZk84Wkd2eUhxa1A1UE85Uk4wb0JuVmhEaXkvdHFPZjhaR2ozZmNZRm9ReHJTTE95TUNlWHVoeko4cTNxQndGV3MxdXlyK0hQY3lTZ0xNNldwTkxXUm9abTdQVXRpcng3eEx2bVRVNlZ6Yk5mRE9aS0w0SXVyRTB0c0ZKTThxSTFCb2pPTXc0SWxCRDFMZ0lDQWdJQ0FnSUR6L0QzQTc3ZnNZZSszdFp2dCt4K3ZzKzQ2L2g5Tnp2Mi9ieWZzKzREL2NQcTZmMi9TWi90K3JqdnQ5blBuK0h2VC93ZmJhYjl2Y2QvRDdLZjkvenM3OXYwMC8zaDlwNWZaOXd0djJmVTAvd2ZUUVgyL1dVL3Q5bVRoL2I3WDM3ZnJxZjh6c1A5dCt0bC9aOW5sKzM2TkQvYjlpVit6N0Z6ZnErbGcvYjlEMSszNmNQOHIxekR4d1MveXdyVzJpUktHOWt4K3N5MXFldnhUOVV3R2lZc0FuWlgxSzROQmQyU3VWSWNDclBWelY0VllJbEhBSUowYWdnckozNTUrbTB4UFZsRDZFaUpDVVhDcFUzSWZrek85bVhPc2hGUXhrcGxHRnNQRCtwZCt5ZUhCbWRtNWpZRlMzTXVkdE5CQmx4c1VNZzhHclRBRTYyaElHS3UzY25UYVZCTC9lOG12WURvd0IxQU9tS0hxZTc1ZGxHN3VZU2psWUF0eVpBR3YxRWNLNXByaU1iNG0rQysrY3lBQitDMjZpVHJqVjZCZk5CTTlzY2hOdnNrTG12N0Zyb0gxMW53dmUrU1JtRWpkcVFyYWlHak5JbE9CRXpmZU1WK1JETCs4b0dwdVA4UGxMekk0ZVlwRzQ1b25TTXV2ZzFWSzVxTnhEUmFCS1JLSnlkMlBMaVphSTFqN0FTZ3B3SGxlVXh1RjNBZVFDZVBYNWtoSHJPQkxUeThIYnhUaDFZU2VRQ1I4Y2haaFdwTHRUYURVM29MS0tNbFhwbFpiSHMvRjIxZEJucHJoMFN0ZVBIMFZIVyt5Q2ViVWJEMXFJMmgwQTY0UkZhT0hzWXZpS1ZDK1JVSjZZLzlhcEhFWEwzbllNTm95OVVPWXZQanFzTnNyaCtPSGVBVGNvSFBXRzNIWE1ySnk5aUhaSSt0eURNd0tySHUxZEZHSnptM0dJVkIxZHlZZHZEOGVUZVJlU0x1OE9YMEFNaitmaUgyNWptRjc1TFRMdjFZNlNGdlIwNW0zTitpbGhESUxsblRNZ1FJQlFUNGd3Q2VDOXU4TG83SWU0NGlSazk3UHJ3S1lSMHBxRHBmakxjY3pNSkdLQzhwY3VjcTVFc1ljVG5laTNjc0V2R2ZYbUN1eElEWkJyUWVMMkN1M3ZsRVRCczBxMXkyT2FxeWp4dzJyOTVJTEpEeTFIN3JEQmlsSFQxNjh6TVNodHZobjNBdlpkK0dvSGpRL2wzbnBSUkRkekJ1VzJ3TlVlaW4rT1NHZk5nYVJyYW0xQzhzSS9VbUVEcmNIRkVTaVhpaCtIeXRSbWJDOXlNR0NKdW1oaGlwY0Z2TU5hTnFQMWFGWnEvTmwxSmMvdW92d25obHo4RmcxckNCVjg3eGpZVkQxOXlPb3NrRmNhOFBBRlQyYnpFNEJLV0I0Qmp2YkFzVnRkaDJUeE5tT2gyUGRwdXlDOElIa3RWWm9rVmt0OFVWdkQwaTN1Sjd0bmhGMW9ibFJOSXdpWXVWZFlDU1pSTmg1V1lKdTNUZTlzQVl0dnNKYktsVE9EMGlvOEZybG9NSHdEcVZMZ29KeWppOU96N2JXSkFXM05VZGhlL1NhaGZlL1Vrb1JSc0JRKy9PMkNNYzVSTHpGYkVTd1EvbXNrZkFNaDk2S000OVRKdVhycnE5TS95aWZvT3FsOWZ3ZFVZYWwyV0RVTjBYVWdzanBoRU91OWFmalJQMnU4UEx3aXcvd0JjQzJkVU5rNENPRmVWZlBJaGlSRHhmNEE1Ump2dkpaQ2dhaEFmTXFxVzZZaGt2aDR3eEw5SCtEcTdSV2tzMmtYRW5DQVVpTWRCK3Z4aVBzVDd1U1Eyc05vRmlzU3g4aTRaRXJZaHZlaXI1M3NZMTVLRW1EQklPeGh4NkcrQnBKOGNwMlVLTjV3enY3cGpWb0ZVUUxLU3RsdDAybUVHMGYvdFgwbEJSTU9YNDFJZkpsaWVtL0RKVXVVdk1hY05aL3QwYmJKUnhhS3pCd1Zja0tGclhYelhOUFJhaGVsMWFmWEZHaHhCaFNoT2RJOGFXWVN2dERyZVdYbVNnTHdrT1R2SkppdmNrWXMrem05T3BqNCt3YXc3WC9CbzJ3V084Y2t1Y2h3U0VmQ2dpMGtnbDdOVFZlWlR3Tlo5N0hrRWo1T1lLcnBEU3NXaDNxMXZOb0FnTDVGYkdFbUlhei9TV1FMWW5hdjl0T1VJQmlITHVhczhVREduTVdNQ24yYkRCVzRzOFMzYzVOaHRNaXdyMnNkVEVvTjVzUnIvM3hEOTNFRTVoclFxSHJMRjR1WjFTNTVWYTljQW1xbjFQWW1VN2tBek80MndnUGd1WjNRSG5QOExxVWdyUDIrK0YrMG82Y24xZ000S3JBMXovZ2VkTmxNSGZiQnpMd2w1WVhYc0ZVTENIYXVEc1FyNFBMWjRRUVJ2b2ljclh5aEJSS2x2bzJ6Nkh5S01kUlNBM3AyVi9abFBFUkxpRVVDeGdqR1hyNC9PODJ4by9MZURLS2NZZGZMdXcwWGFHWDJSS01HQk5Yam9UYVI5K1hReEtpSzlLQWNVUmRVUXk5UjFWaXJaTGNDR0VRVXgydkhKUFNVWEhEMDdFQTBua0dTUE1EVDNHNmJPTjV6cEY5T2lDc2tUUDJGbml3ekljaFVUanRtbW1zUFdSV3JEemhxOHRYb0wzTWJIU2w0TUxTVm93YnVESnRDNnd3Vzcyb1hMQVNkUDJ6L053VTZxU2JaSnJYUDJ6a1IxaE1QNk80RW5qaVdWRUJ5aFpEb3VyQlMwemczNS85WEJsTkh6d09EV3dtb09ocXNlNGcwQmtORE5rQkdQZmhGSGl0WXlMZFI0MWQvMDR1Tnlsd0xnU2p1blB1RFJPTDBxSVlxaUNlNXJyMjBNd3pVbGVqNkhrK1FVVXlRSXJFbmNhMi9nM3hjRU9Ed0RQT2FjaEd2VEtERGdyNDFFODJ5RHdRQkk5aElCV25hVkVKQzNUS0ZwOXBOd1d5aUhxOEgxSm50OWNibGtqMEFwSXRXbUZkSkpHYXFMMDVSb2hUcTdPT1Bka1kwZ094bU81cDRxWTA4TmhxTVFIMmRMbVhTQ2h3VlpLRUMrcW5GVEJ0U0p3L1N3Y2V0K3Fvam5BS1BGRnJ6L09ZeVYyRis3YjhOOXlzOHdQWGZ6Z3g5aGlZZ0sxc05UZnlmcVp2YTcvV3FDajdIdWRqM3RUK2pOamlJQ0xTR0ZKMnJkN3Jabk1HcU9aNE9vaVdzN3p5RW1TNVgrSS9BMEdreThiZXhmNCtyTEwzZmNMdUtZOXdGdDNwc1dGQWsyUjhYZjc5RlFBZ2dZT2RSRWhFR3pIWXRiNXh0Q05DSzB6YW1VMlhXNVNIMnRJem1RemR6VDBybm15ek5sdk4yTGlHTkZzbGNuYUxHOXpWQjE5L09WdGFqY01VWlU4MWJZTitlcTloeDFoVTV2SzQ4ZWdzbUZNL01jUzJZSnR5K1lrV2F4Ymk4dWVsOTJ4c1pjL1NlbTdHaG1jdHdVT3VZcVpaVGFDT25WUVJoU3lGakVBNnNDRi9BVitkZGFBK2E2YVdnZDB1MEF0TE5kdFdYdlBPSmROa1Uva3hwNHJGMGp4TzYwcnQvUTBsaDYyc283TDMwS3JBeXM2RnYzUnF2SlFObFhaeHhYOHpaQUVnODg2RzFnbXF5cTg5YStveWNtMFZFczc2eHFENDMraEhiaVQxM3ZnWitob01pTVV3b0M5MDZFWTR5YlBhdkhabDhwa3p1L0t5VndSOWk2NXhHTGY1RXQ1TnVTbHMzektRdUd6MHBscnk2OFZSbWxhRE81MVUzL3FQNkUzbnhISjFvTERvZnhMczVYcGhCR3N5ZTgrVXFpRFpETVZZSmdBaFArNU0xVTA4QmdWZTdJWE9lNEI3MjZoWFBrR0FnaEQ2dFRaWkZtZHlMKzBMelpFRVpLNmVGQXkyeHF5cExIOGcvMmZsajFYZ0k5ZlVsblU2Tnc3eTByaHpMYTFGTzMyM1NINytJOG9PeVhxOXV6amVSeDByZ0h6Z3p4bGhSQzAzcE9hU1M3Zy9WWGphUHZnM0cvUzlRam42QTVyZmd5TnpZY3NUcGFqd2FoZlJXR0RqMDAwTTU3andyZjRNYnpuZnFMNENSeDdOcWVwalQ2d0trSUVRM2N3Z3ZPZ0VtRkJjZnMrQ0RxZEdYanZGRlJnemYvRnBXa1k4RDU3aUZxTWR4QitNUmEvVGtJZTRrclRmNm9sdEtyNkxtMzgvK0syV3hmQ0xNLzZqQUZjZWUxUEI0WHF0dGE5Rm9ZVDlScDBZRnhESnVwM041VU9sVnF3Tm13cHVFRDhERHVmRzU1R3haa2lHUms5Q2VPbVFXUE1Qc0RKemhsQ202MTNEVTQ5UndqRUp3YW5Na0N0VlBYTVlGdG1IMzdMR2QzQmYwRW1XSStXY2tvSmZqNWFsQ0VOK0xMYTRJQlN5U2h1b1M0MTl4Ykc3UVRYSml2TjhpelFqTmJPaXZ5NitjSzVOSzFqUEJvWVBUQmwyb2xIMVJKekJwQTc3MG5yUEdNY1RpRmMwTGRYcDlXcll4djlncitabGJpVElSa05JakY0aThrZ081Y0J6ZEdqaFRqaHdCMmVBUVNKc1Z6L0p6NG4wZlFIc0xWaGZyNUh4ZkpXalArMHVxQ3BGU3JScVByeFRaenBDSGN3SzdndVFENnlWWFZpQlpyV0VmMVpHdTJ4eDlRaUo3NlNFbnltZUNqU2VkV0xWWm8zQ2Zzb09uQmhPL1NGeUovVzVFZG1UMnhVd1RtZkRFSmNSNFdOREhTTHRaeHRJcng1U0ZqbEFZQnZscU56OU54Uzk0NkhYbE9UcVI2Q1pSZ2ttczlkcTNDRFQ5alA1NFBrRW9XeERsd0ZDbDlHaU13WElWWXEzR08rajNxRHFCLzUxb3NaaGVLcDZOMmFUNnRUdHVxWGRkT3ptR2gzRmdta01SdEx3Q2FSVmFDYWlrVUlxVzBTcDBlbnNDcmYwbEhMa3lscU5hcnV4b1p0QjJ1bzV5TkxPa1lvQklBR1lUdERrK3lqL2g4ZW9nQVo4SzUvdXdXczc4M2grL2hDeUdHajVIUkxQNmorVDFkOTVuU2NyZERnQk5jdStrenBZRzhGMnJBWHFzSFkycVpIY05MMEtDcU55Z0IvQ3RjV0ozL0VLaWFic3FQOStzZURyRUVJU1NOSVBidS9NZk42VFFuS08xbFpkZEZDbXhQZXgxVW5mMGpGd1huZXJsRzhUUllTZ21FWHR0LzdNbUVjY2ZuNmtZNkdKaWtMTzRsSzBqRWY2UWIwaUd6SkVaZEF6YWZETG5NeXB0dkhBMG9rUlhyRmk3WStkU25KU1N4V29RZzRYWHZ0eVcvTUFvUTUvZjQyZWh3dGtZQmVlOGtUdnh0R3lOckFMR3laK3ZMREYzRm95VzhFMnhldWRrb3ZXSld6WldMck9KVzM5TStiWW9GTHlQamVTSzJNbUwzaXZmekJodEVSdHFsNVdXMnJYWWhOQlNWS1dxZVBVdThhazZaYkdKdmxqNmVHeHBseUpDVXRtOG1LTzJmZG9KZnMyUzdDbHhQVGQzL28yaHhEak8vbmFZTWN6L3JZeDJQMk9DK0txWURUNGw4MTg2c0ZxWWdoSDNxZFltaVpzU0V6aGliOXcvSDJjSWsyUHJEY21OdUJxV0xiUVgzem56a2ZHdXk4cXg2TkcyU3BkdUxMdGdkeUc1WXI2NUZLZ3lINE5weDVhejJ6MkN4RWp1ZVlndDQ0UStOTDBnK0s2Z2Vkc0ppYUZWYWRYd2RST0JvRHlwc0dPRFNIaHhxc2R2WVVnL3BDcWlPMm12RnMzUks4azlmRHpiRWgvZThBd0dqTm5RTG53ZlhZZFRQRWVNZDU2ZXZzZGREb3hkR0YwUExKNXNBR2R0QlBSQVFBVFVjNlZPV0NBTENHa0JQYzlFTnlTbGxVbmNJMCszZjhzK05hdlJSVTRtOUpUbVVKQlF3bnBaaDZsa2w2TVVEL2k1aFdYWHBndUxBaXNzUmUxM2ltSzJPZkx5Rmh6WGgyKzFjb1Ezd3BMWnRzaGh1dGpEd2cvS1JNNkNnUDVsUkxQcUpIT3ZSOGFnRGJFcU0vNmRFVTU2cVk1V2h5ZXNwMUdWYnZOTVlmM25TOFUzSGg5T2o5THNqNDhKNmpMRnk0QXAveXhncXkwSHhtL2VHMXNFRllFRk5nakM2b0JWbXJKU0ZCSjBVM1dOand5UmdTUEx4R3V4enZPeG1rditiV2lZK0xGb3JRQkF2cUg3ZFFsVlFiQzQyM0Y2eUhzSDJ5VmpoRFdNMWxjUEY0VkFuanJKd0d1QWhHZGh5d2JXN1dHQTVoWm9zZG4wMjVzV3VtbmIrQlBMbE5mNk53OHFnbGNaYVlUeTd2NWlUejlNVDl5RUNoVDAwYlFiSkpHVDg5emp0cG1odU1MT2dzUU1QalVURkJSdTgrWk5QVENGd05IdVROc2VVdFhYWHhWZmc1V3VqL3pEMFpzYzJJb2xuTS9VaGJuUm1vaHRaZnJjUVJNUkt1MmJHckFFTWJYcmx4SWppMk16YktncGxvMUJjeTB3ZE1qZkY1UFNRTGgwQjVlb1FPYzk4dUZoWWJXcm9vM3Vkd0RONGt0WkoxakJDSW4vMW1GSm1tdFhyNEtFaG9SQktJUk9hdHgxOExmVEppaFBzWHRzSTd2aEZqOWFMYW1PSzByb2ZXbXlrYmM3ME5ESTBjcFpFeUlVMENxT2pnQ1JTNmp0eGNrcWlCVkxzTEU5b3RlYzltcE5EZTJlL0R0Y2hrVzdyWXZFangybUVxWXJ3OXN1Y2lWdmUrbStGWVZxaTBJZEdZa3k4VVpnWHVXUXAyd2ExNldjeW1IVUxjTXRaSG9nSnM4YzRyZFN2TzhNajJIZHNuQ2JvcG0rSCtyN3hoMnVGakNiVWtENXd0L2RlZWQyaG5NZlQ0ZHo3NXRXS3RSUUMwSzJxWlBMUFhCSU5SOWlLdVRTbGZCbEJZaE85bGFTK0E4S1hKOGNIRFhGKzlzem1ER0ROalY2VllLRUpEalJ3b0xhTFlGM1Bsd1VXRUVYNmtBVEg4aHBEZ3RLcVR5VFpmQ2RmcnFOYjVoc2lLLzBuMkxJMVN1MncyTGhkTG5zcVpJcTVYZUxGTzhXMTMxUnkyR0RPWFlUcnhZS2UrU1hDSzBPRzVsbTNDUEIrcWhoeDhmbFgweXl4cDQ5TDU5Tm12SXU1enJEZ2ZNek1VcUliUEpiZjQrd2ZHOTRZcGpYTi8wK1AwdEErMWlDQ042Z2xTSWJleWRrTnhZc0pvMFpxWjFuSVFSYjNIZURvU204S21FZGNkemt2cWdyTnVVUzlhb000TWliVk9Eek9KVmJsdUZ4TThRS1RiSDY4Y1hMR1NXM1ZpOUxrTjZXcW1BaWsvSy80S1M5bC8yVHpsbmJMa3hodWtUcUZXRDM2Wm4wQ0dyRHJNSzlidTc5M1VreUk0dHhKWVZBUVM3S1pmSWIwZ3dnbzYwWWtQZ0RyV0ZCWktPdW44U1VUMDJ2RmtGcVdlSTRjMW81M0RDenBWemcrS1BUNUhnMEZ4T1diZGVQNmc4Vll2K0VSNkF4L1JreG4zblBnaEFkUGtHeExDTUx6aytGdjlLc1dFZlhPb3djcFZKUHIrVUd4dHFNb2hGaXpEMmNac3FpYkZjTVdyQWp2WjE0bjNsOEUzQk5ZKzN2UVovWStZem5kRFVNckpxOTJhOWRWMkZLb2J5UEl6Yk1VUDZBR25zYVYwWlRxMTVNUmd5NVFtSHhjSmIwQ0R2RFg4OU1mcFBpMVFDK3RBRnRmdFVZdkVKd21TM29MYWY0dnVoVVYrai9SQm9aZnF4QU9KYWpGRWlSdGk1dW5pS0NpcUJoRHI4QktPd2hTVWwvd3N1S2ZZaVdQdkY5UTNCRkIxY1Y3cTI2dVlPWVcxUjhta3lNb0dMUGY4MUE2RlNJR0VTU3QrbTdTQVRsemlwNndGd0c0RzgydTFmUkxRNnBIcjFISnFKTkpKbFN3ZGxKeHNrckwvL1VZcmVwK0hnWThTYXVocGNBZlJQeFNmZkRLM2JTQjlaaXJubDYwUFY5VGZyMVFDRzA5TnFqWjJKR0gxckt5c2lEVE1oc2Z2S0VCRGRtaWIwOHJEekdoQktIR1NEQnI1NFlMM2cvQkdXcUVBRlo5UGd2TTJQUzdsbmJDcVdYQnh3blo4S1ZaN3lyT05lMUZPeWQ2R0h4ekRJMGc3SnlKcjdCMlN3dXVDeXh6dkJSMWU5aENGTm00dGU3bWY1WmFlZWJmNzFma0VpOUtnK2NkU1JaaHk0eWhsRFd6dGcycG1mMW02b1JEL3pKNytobndxU2prOXlUQitZTDJDbDBFNjRIUTRVZ1c4YkNiNzBJNWpWVi9Denk3SHNRUndFOHJSNGhlNisxZnIyNE9DdFhXMkFXNnJKZnE0NGpEVnFlL2x6cjdzZFFGNENLaVRuT1lvMjd2RGpFUXNWUUs3bGtocUM2b2s2cFd1TzlYWEV5VXZ2NWFLa1ZLME9tTTkzMEhyUExKWWdVbnJQZkFZMnJWRkRkeFZDaDcwa3JYcW1SeTFYLzMycStuN2dZb1VvMVlRVGtHSlNPZ1pXbXFjZllqTE42dXhwYVI3VU9zQ3dkRkVmVnZNNzZ1aG9DS0VPL3dBMUE3YjJZZlFTTkJWYkpFeWltSDd3V3NySkVES0FDZ3N4ci9mTHNMVWJkM1BrQmZ1TGIxMFBPUDlnR1QxWUtNR2ZjdDFJbFR4a0NLUDR1RzBwamxyTTNsUDlxcjE1UUR5THlnTXlVOFBlY1lmTmExVU5OZXp0REduSUZMRFJremZLbVlramFkZzRpbklPUTRSdThCYWJRZTVPQzQvVUtOcGlheEhsSW82S29FeFRDcEtyNkUrZEJtczdlZ3dWNmErQ3lCanFvMmFuMlRyekJBSExMMUtjc05HMzRHWDB3OFQ5c014RFhNZUFnTkdsbG4zOXByYUhlNllvVWhLVFArb0hZRXEwdmV3WWZRZVhLdmRlMFBHd0xNa3RFbkVab2lxcmg0SVF2VDRxRnNaL0RicTVub1lNeUNSeDMwdm1kbm40andWRmplbklOY21yNFY3U0Jtb3ZNZm5haGJSZU1qekUyUFMrd2lIa1BGUGhQdjg4ODJkNlBwUWkvZ2gzK3Fid1c3am10YTlrYVo0TXB6eEUweDFMdnNvdDlTRjl6VTIwSCtySGpIcDljdEcrZ2MxaFdwWFloSDNGWGthUmhRdXpxV201RWQ5YitodmtXUFBUeFh3YjF5U1dlSGptZytqRytSRzhTNzVTM0h0SGJSczFwMmRONlF4Zy9qU3B3RUdvb2Qwd3hKREFONy9adkxUSm4rdXRmUGV1RzNza29YVFFCd1R0ODhJWnpDVTVTMkZnMTMxMmJCbUt5Ui9uMkhLK2QrREljdzlCMjQxcmh0TG1wNE10aWhCcVhSQ010VWtNV1hiaFg5bUxvcUhSY1dNN1ZrRkthQ2VrRVEvYWZJcFFtK0dxQ3hSeUwrQVBENUZMWUxEWjF1bkN2bzhnMlYzbHBwRWdNdjVza2N3VVJRbCtXcXpteUpWV0d5d29GVFEyUzkwWjMxd0pSK2orR29uU3NseTV4Q2FSTk1saU9VcDJPU0RXaXpyd1pUVXpRNE4zWjVhTmFsVkdkQi90Y0NjZi9mbytabkVZZzlQcFFRbm1nUlRpZEtEbVZOU3cxSGJwOWx4MmNaY01Jako3b0srRk8vS1p0OXZpRW1oTHdEeGtNR1d4a05xOS93OEhadm1OblpNZS9WSm9KWWFaM3I1TjJUdDY2Z1g4QXJWNXhxTzdyYTBINFhrQWYzZ2ptbHdKbzUxajZoM1BIZVl4ZTBiNUt5K2hvYWpCSVBYaFdjelhnc2tBZmtGQ0NIVi8yYWJ1OE1BSUdrdmFnMU9kd3hVazgzUTVGd2FLZVlka0ljdUJZSTNtRDZoWXhsaGNFYUJDcXBkL2FCdDFzNnlhQ3plckV3dVVvc2FaR2Q2ekdvZ0dseW9XWDZqK0dUd2xTK2E2alFwanZvNFZyeEJmTVpRL2RMdzhXSmgyRjE2Q3J5YWMwK3RBdGNZNEorTVlPY3o0ME51emVOeVhDZUVuSC9aaUdlTzE1NVk5V3RrSExsZHUzamc0TmpkclRoaHpXZUJMRWdZbVJTNFlSanhjZ0EvRVZtUUc4ZFRvSmhDaldjTExQTEdJcTZHN2Q5M055azg4VE5NV1BhSmlpK2NaNHVYamVPVmUzRXJQMEJvL3N5bmZ2UnZkaXFNNEhBVGxrSTFGZWpXVkNNeVJQSm9TaUp0Rjk1QzhGQWR2UXNWazB1U3R5MFNvSU5RRHVtYkxoTUFsZTVNbHdQaVIxNkdCOXJXelk5Y01lWlNkT0VZdHNQVzJFa3VoVkxqU2g1ZmRTajAveGNSVTdjTEw4cmRyeEpZZHYvWTEwVWYxYWZxNXBHUkQyb2I3TSt2ZmtHU2JweitVVEp6ZGp6OUNLTktYY3hHaTFjOHFneEVXTXQyY0dNcVVtUnZQYUxiK3NlTlVXMVpzalFxRHFocXlBMW9QRFBmcWQ5SDVQQkZPdnR5Y0dHckVsUkxQUFp0VGRDYWZpSHc0VXlnZlFpS21HcTJTem8vNnhRejFvVDkvb0NRWFZzenVsWDd5SE92bWtLd251RG5WcVExV2dEeFV4Q2puRHJkMnVSdUpmVTc3dlJXQTQwa24rWXRPOWhhb3BWKzc5TDNoV09MbUszYmJrTmRwZHQxTFhNQkxYczRFWG4wSXdwNVNGZWNtRnAwWFhRa2lzSUFPKzZEZzB1VFRXbDFySE1EL2NFSW81WEsxdlI0amRRNExrc1lOeFhVaDd4Z21wQVpJYXhHODNqUkFSbHRsa3VhK1ZjdStaQ3Z1Q3NTZ2g4YUZQSDB4RFJaTFp3b0UxbmJSVFFBbEZvN01mdTJZV2V5d1hEd3E2dlpBZno3bXZqVmdQNGdhVlRjU3Z0Y0xQZFRHWFUzQkJ5SS9Ibi9nVFpUKzN3M0ZPVmw5WWtzamVXYmlCSmp4QncrS1hMaXBjNllwbC9GbGl5KzlML0hKVUpZOHRrNlJqZjRhaE80b3BPMktsWFNBd3hSWTNLTGloRnQ4NFp4Wml2RVlOT2hHTzI0UTJnR1ZPeWl1alNCTE9GM05hQ2xMYVZvOGQ0aUVGVjh4WE5PZ3YxYlFxS2hFcjZZdmdpRG1WcUlkUU96QVlCSTloZ0VKM3czV0RrNnBmVXlKTDJqSEt0NHhaMHBTbGFxeDFteVN5OWI5Q2hydFZuMlQ1U3pXa3Z5MXh3YmErTjV2Y3llK1ZSWG42bk14dUVYd2tOMk9kcll3QWtna0RiNEFhdHZMMUQrOU1yQWFWNUsyeVd4ek9xZ0Yza0tpandBbms1M1hrWGNuT3pzMW1zZndvemF6MzJteHhlRkwrOGlxL1dkSzV6ZGE5RTZxR0xBL0ZadnJ6ZzUwcUxYRmU5bW9wRys4N3J4ZnpLOEMzMktqbkg1OG5acUxObGUxMThJTHM3bGpKU3JYZGZVK2RHN1hnWlE3YUVoRm5kZmJ0K1VjeGpneXFKcGpENzM2KzY2T1pTOU5Rd1I1VDJqdi9KNDVocnZWRGl0YzNnWXJhVldaeXZzeDV1NHR4aHVUZzFiU1oyN21QYlppakNUSWhIWGp5T3p0NFZRc1hXVzNrSEdPb09hajI0cWZjTmRGdE03VVNGeUNUNGdFcjE2UG5DWTdhZ290cGdvWXdIVXN5VDFWWXA2KzJma25kRmMxdlg5Q2d1TU1zNzVzN2JneUoxbkcxRFZ3Tk1sNk1DZC93NFdxRVM1czRTelBrb1pXN2g4RVNMeDEwZWF1TG1zMGJYTURYZFZ4SEhZLzZ5MWxzcDVJVEZGTnBuRlV2OGJLVVBUNGhtclhlaWdaQVRmc1YyL0kvUVd5OTFudkZvKzdHRk9Oc2c5ZVd2eHoxNlUvRG1lNjJ1MEhudURuRWpwTjNhbDJMNlpuclV0VElsRkIxRUoyV0tIcmFXQUdLZTYrb2VJa0VWeDE4NWhBZHV1VnNya053MUY3TXEzdmtSVTB0VXE1SjZ6MUdaQ2RVaHNSUkNBbEM3UEc3UHU0K0prUnNCZDhLTDJKK1pDc0FqTGN2eVVnTjJiS3dYeUpFOE1BYmN6WVpKVC9mOEpTRGFHM3R4YThualAvU25aRWxNNFptd3dGSkhneEhaMkszSHo2R2RCeEIxYzl1QkczOGJwdFRHblBjRnN4L09kdDdIU01QTVhOL01OWG5PRStaNnhzdTg0QjM1ZVBiOWhYc3pZMjhvZ3puVmJoL296Q2tUWDIzeHJCQitob0wrektPVGZrV1BoMG1qbUhKbTF2R3JyZmFoaTQveGk0Q2JzL0NTSEdTYlh4ZTM3NVlKZmFZOUpOS2NCSURPRmhxWjdzR2hNS2taR3dIRXk5UUZuT0dpVjU0c2V4U3NRUyttTWVFWWZEWmtIL1l0eG9mTzFub3p2T0h0c2ZvOEdDaTdLb200TDNmYTBwTjJGTzl6dlRYVDMyakZCZDdNWTJkK2l1dWVGdldFMTg0bEJFSURSOVd4RnNxbVpqc1hNV3JEQ0NZcmtwUVluQXprRzEyZWdBV3UwdGh0czRkZVA3MCtJQjEyQ1ZkYjIweUx3bkppbHY4bUhwcVVBa2pGUWsxdnc0QlFJS2QyRkdKUHlsVXMxM21KK2p5aFZ5LzJDVERGUS9ieHBHelFTektDTGhmclpUVUpPRDd6dnhBaklHZnZqMmpvRFB0ZTFyVkVTZ2dkVmlFK2l3NDVCT0NTMDVuYnkyell1VTFvZ1pwdHFZbXlMaVgzVUpKR0NkNFdtcFJoNzRWNSt3ekF3Q3FsTHZhZ2x6T1ZXSXh3Z3FENmFlNk4xMnpzQ0JyMkVHckltVUtJbmJCdUhueEFlcklIcTRLS2F0M080UkZWN1ZFVFZTQjhzQm9qNXBtN3FPQ1VQaVJueUJUeHNSM1BpWXV6OXE0bVFkeWUvTEVrU0VQNC96blVrR2kyNnlNNzdIdW5oSk1OQmpwdlRjbUMwcXN2bVJzejRmQU5oMU9qYldNQ1l3Yzh5US9DWDJIZDNtSFRPcTBBam1UN1JkRHo2TURXVDJ3c0gybGRuTEl4emxTZU04ODdVZ3VJL2ZVTHg5TUl3dEkvWmpvUmZLSVJLbHJGaG1wOU5PUnQ4SXowYVJBYmxhNTRyaVNzTGx1TnkzcTc4dFFvSDYvWjlFR0lOdExZQm1KYUl2M0Viak1waG1ETld6RjRLUHFCNlFqOCtkcHVTTXVOd0VabnVwdFU3RHR2dkhRaVRuY0lzMyt2cUFIbjljY3BpWGRjTnVjRGc3dktLS3pPSUFlM0FHVFhVbS8wMVluTVhXZHNVMzZaYno4eU9TOXJMNEhEK0FzNk5BWXZHYUN2WnJ2akZPczFXZzRSVWsvMEFjWjhMWlV0TXN1cHI2djdWbk9icURmOERMbG1QdS90SDYxTlpKWXlVT2hrRlpycmNRSm5sOU5LL09UeDdmZkZvRFhSeE5FakVYSXlVUXYxcUtRSXRMUm1RK0VvTjRacHhUb1pFTmV0ZS9NU1RYOENMU3JRQ1JUQ2xPakVNMzF6NUw2V2RGa0tLV3lMeVplWHhKOUVySnRjZlQwSHNIZ3BpTnRoRFNySjB2dU9hZEJGd2xjWTNyS0VYOUk1ZHlkT3g4VFNxc0hRQ1dPYitjZVFzMlczMDUwQnNDbFBTU3R1Q2hTaXVDVXM0emZkaHgvMnRVWWZUVUtSNnlUTHNrcmgxaFYvQ1RxaVBraVh1aW5KS0MwTE1tWTlxS01KaXo1TjBPSHNVZGdkVXNuekhwWXFUaVVwd09rQTJNb3Eza1RnYjNDQnhhSGVJNXVQYm1ZVzVDTkx4VExxckFHOW5qaEkwTTh3ZTlZZ3VXQUFUeDBhSFBMb3BVaHdMczcxZHVxYzl4MmdpMUJVMzBzOHQ3NG9aSjFSNHNlOStLRUNhWllBR1ZkZXBUNTlVSGRwREoyaHNLVkNQZEFNYjRCTEJFRFlXakVwT0k3QWUwWEoydDZ3TGh0aGN0MWUrSG5GSHlQSjZIMVY5VTBkb09UL3BEQ1htajV4OFVZaExTMTVzWjM1YUFZZWtTdDAwK0hUMzdNL1Y2aFdpZ1A3M1EvVTVWbGZpYUhzQUxlSmtyQXJKbXdSMTlWNklVNWdtVzI4SmhDVzBPeEtBVnJ3Z2dIa09JSHVIWnRjcSt4NWM0VU1uNFBYQXhsL0h4WXowY3ZLTGtlRGZNeWQySUlVS1k1MkdEYTBLa1BxN1JwQ0NEQlJJbDVrdSs0azl0UEZCSER6UzdHQjFKUEVtMmZWcnpRejczd3hwRVAyY3BSQ0lyYjZOYVdsZUtzMkg5M2FyWTdNMTBUU1JwMVhXMDVtZU4xM3pLaHlNbzY0K0trWUdHNVN0OWxPbHkrcUJoQUtkK2s4VTM3TlVzZnRYcENDU2UyNVVyMFF3ZHk2TDBuNFZOMXI4M2FZU244dzFrSEszL0pDSDZFaWdGbjFlVjRuc0FVWDZoQkJJd3Myc0l1SjJMTE9tWkFjTUU4eVBvdFpqSWIyWXJRalhva1djMXgwSTVYVWRQMGNXVTdXUnN6WnZLQnVUVTF0Smc0alBhZHUxYkRIMTJhdHZwd3BnUTY1SUpHRkxwMHhLbW9sSVRzZGs0TUZ3dUZIRXJMNmN0SE5GaFBrcmZHMzhoakk4Tkd3YmQrV1NiLzBqMGp5VVczR2htKzJXdTVDWVFaN3BhSkI0Y3FoaVEwK1BoM3VncDcrbStZKzFjUTd4aGlrS2p3SlY4TGVDYXdYQ2p2RjZrYVYrNzlXQ21uWVZjSG5SZXlzU3VkQTM4RkdZWFpvT055NTZueTVzcUNxbktRN1VnbGFXUjAweUk2VmY4MTBhVW50RHhJbll3dU5RQUpNbXczd1hYeVprTWMybjdpR1lTUDZxc2Rzak1PdkpJa2RXZHlvUURoa294UWRLazZMWUp5clo3ZkNEQk12RFlVc1FjdjhOT0l1bWRNaEdFVlVHUmptb3ZqMG5FQWdjbHJaa3ZrMldIQ1g3OTErd2Zrc0h4NUJnYjlPYWgzMkk4ZnUxd1BmT3FWNU4xRkkvUU1KSWFhbWMrbHJla2RMelF5RUFEYW5jczBOZXFQc2pLMmx2aFhMdktlTzJLN2JQQzFlb3dxTW1mSmFNcTNoZWhmOG5TWjI4Vm1FbklQN1BFNldqRUhxWEYxaU01SnhFaThlc0VmVEdLQ3RmdjJ3SnhPNEdYT3k4WVJDTjFqcXg1dDkvRXNzV1gzZWpMS2tqU1JFZDg2c0xyR0RiSXlIM0Q5b2NzN2Q0eVB5c0lodXc2Y0xrWjFFd1VMdjhveWpJbHJCSFo2b2YwazlPMjdsKzlsMjR5aThwUFdwRzl0QTRQb2tYSWRuc1VnL1JqWDU3dncveFNHdXRET1dWUVQyY0M5VWp1SW5Sd3RKcjhhNGJhTG8xVDNTL28vaFdHcUVTOWxpbXVVWERjQ3JtU2FIL2EwZy8zM3FhMW5HdG1EUzExb2lsM2MxNUFQTU9pVkExeXY2S2hrQjhSU2hxZkRnMUhTUi9lRldWcVFMRldwMDhYNjlIQjRQUFlhQjI4bGFpMkJabU9sUUtrWVYrZVZsOUEzSVIvNWw2SUtmNHBvdVVudGxjd0FGQ1l0VHMwMzduVnIxeUh6R2E2N2Zaci9Qa0FmekMvY3k3VjVCaXpzbVhMVHQ5K0hTRWc4ZWk2aUNpVVVFKzdyWWg2b1hOL0ZyWERpS0FGK0pXNFFWN21NT0NSOUt3QVZYeHNBZ0ZJcERLdGRhV3l3VXFvQ3RJMWh5ZStiZWVhU0ZsNzVtbUxONDNaTWI3QWpvaW5DZ05GUkppRVZxRG54ZmREWUlCU2VXb2Fpek52d0JGQVRCeEhRV1MzUmNmTHhFdGpVd3FHNTNQL2R6KzJCbEVBaDhSVWhmYkNvakxtS1k1dFQ2ejV1blZrbUdjMWlNWUdnMHRRQk03Y00wai9Bcm4vQzh6M3NmaGFYazlOcTlvSVVvVUFRelJVTDdSQjJBek9Zb25CbWtDYTdhdFdab28zanc2cWhtdXNPZk1RTGx2eG9sbkttN2plMGNtOVoyNXlTV0oweGh1N3dzMjA3eElpNlVta014NEd0NVRmTkRhV21xUzErNXJyRlpCSmYvTjhydjY5anZDYmNwMTZXL1dVeTVRK2ZoelNSUnpiOTNIa1NiNkdCVmVCd0ZkU25jZy84SEVKTTQ4VXdFdDJMMWIrS1VQemxCb3hlL0RENThtY3crTkpMRFJNRGE1aWJqMjNQY2tMN0NyTVdOK0x0ZThaUTM3aE5LU1NPMGl5Yjl3eW8vdEpudkRCRjgzbWJnUFVkbXF3SUtLemg3WjE3QmdyTU90QjA3MHB0cjVsQm5nNlB3cE42WTZWcmN0OWxPV2wyRGlTZDBMT2lsRGgwTkdlYjRWZXIrQ24yeHU0WCt6aEs0VDRuMUlSVk92R2Jxa0tUZ3JaL1ZUWlFob0NMMUNINDJyUE03TWFVUmxRdG41L09HY0J4SHdFOXczQVUzOGRrYTZpc2tqMUlQeFFIMjR3Rkp4U0NyQ3BrY1JQaDlpVXlBREZJV2RIVWZwMjEzMjNsSjkvdnF0Mm5pMmEvVGhRU3VZU1dmZy9SMUgxc3JGeC8wcmtqS09zYnN1RlM0bFRRZ3cwODErNlc3eTlWMWpDcUx6dTIwcHAwS0hiQ2d4M2JZcFlCOTBYMWZDSG03cytrTEEwTk9SQlNTaWNQRk43QWJIcURISnBhTmtWSWtDTjUrYzlQZGhyWDF0VmxlQjFOUmI2ZC9hcTBnaGh1TnVwRlpSQ3ZjaUZyc1l3V3hVeVJLWVRIWDBtUnUrdXlHZmxtVXllYjBRbklreXJuRUNHbTlOVlAxdkxESHVmY1FtL2VPY29BRGJyMkg0R1JrNDRZbU4wRThSWjBsbGlDTk85dURaclNIbHRTM3RRU2FDV3JQc2hyczlsYnU2M0lKb09xT00xK05uTytEYXpqYVRNVkhhanpCdHg3eGdrVjMyMThBcjRkQXkzZUZhRk4wNVd5YU5mNEZTd0l6Y3VaRlhFd3NhVjg2ZmpVeDA3K2QvTThFZW5lKzFQa2pxMjQvdm1EVVVlOUpKTEhsMmoydVNEbjhITjdHYzZ5UWlEOERpVlo3RmNtSmw1RFFObk80RVlDVmpEM0F6bytCdXJpM3hxKy9RL0NPYkdGVG5YNjFrOFIvY09QeElVd2FkalFrVUFGY0pqSDNna1Njekg4eDV6OHdkak10bGdyYnJ1c0o4UXZhY3B3cVloQ1Vhb0RzNGtjakFScjI3RUR2THNjYzMzMzQ3L2E2SktMc2xKa05ueG9UUElqQTg1Y1V3Z0hXMW9DaWtlQmFiRHZyOGtNZnZjcEJKRXF5bWRtdFkvUzRkaXUvYkVjKzRBbHVCdFJlZGdxaXlTTU1JWVVwdVBuS3BFcTRmWkxLU0IrdkozWkRNN0p5ckZiMHVtTTBpUWpPRnhzOEpnY2VseWJFeENoMEh1NHIranBmZjZsSCsybkhWdmVHRFFSUUN5bjBwQS9uVWhSOHhuTXpBWGdKRE9VT3c5TnRCVldVb2JQSlFmOWNUcE9kRW5hL1ZOMHJtZDV5Yy9nZlBUZlFJTjlNNXBIQTF3RDlGcFBuUGJTb0hhVjZrOTRmdlNqMTUxaXdlVERpTE1lQXQySS9iNkMvZElXdkVUemVGNWIxaU41c01acFNxOVJxRVhaQ21wMXd1L3lNYzU2M0piak5yOWVBVDBuR0lvWEZERUZPT2lwajNaM3d0Ukg5UEd6dHBVWG9iempvbmFSWGc0RjQzT0hwWWxGQTdLU0NPbTJpYjNKdWxMK1lMeTEvOHZKYkNvSXZIY3NsNWtrZkFqa0lzNkJ3aUZUSXdpMlYwMU5TWFRCWDJRbyt3UDBKRkQ1cTFYQ0ZWYUwyaUFGUS9FWkpSS2RwcnhNb1M5cFJXeUFHeVVHQlJxOHhsTXZ5WFA0ZTRXZXFYVTFESDUzTld4NmNiYm1MelVxUDVpbVZSU20wc3VPRmRlZ2ZnQnVORWJWYXNkMUl5ZDJvVXBXOXNBWlprbWt1NTRhUmZxQkNRUTlDZ0RyVE5FYUJ2WDlUYUk0WTNsdW42NlJMQnpvWnZhVzJWRzNDdlRqZGVOSDlmUjYwc25BcWc0YnRZSHpJcy84QmlKaEdJa3JmV0ZTdHZOUHlKNEhFbVRFeWNlSUlrQXVaOWlsZkJvL1dleDVHRFFkL0FGTXY4VjdTcUt3MjdnQWNYTmhpRzZ0ejhOK0Y3TG1CS24rM3BuTThKdy93TUxJQ1FCaWJ0Uk1KZ3gybXFpTlRWY0FPK3FSa3kxTUllNmlmQzljR2NXOWhncGtsOGduMHVGNjNKU01iUEJ1ZS9QZEdoN0VzaHAyOC9XTHRPUVFjOTdUUHh3L3ZiL0pVZmdDQ3JtS3ZMOTc5RVlrR1hoSW03RVAwaWtxS0UrZkRITTUxLzNkc0t5NndKdTFTdU9ubVRQK3hTOERPUTliRmlTN1J0aytpSWowRDh2dE1lZmYvajRUY1k2VUNtOGFOa1pVRFNtZ2NNTW9ldWI1VWM4T1V2ZGd2eFp2RGRIb1Y3aGY0V3VjVEY2V1pEZGUxMnhkc3FaUjE2WXdYcUEvRFAydzJJdXhaVE8zMExDV3N0QlhDQjdCUnVjZ0krZmd3YkpoRFZnV2F2cUxHTDZSUno4S3kvUlVrb1cxYWc4alplVW9WcVhLSUp3ZWRFb2I5VlNHR3RSTTc0aHFTaHRKT3dyUkRabVNlU2cwTTdoVUh6VlhHWTduVHlkZmdKaFI4eHozNHNMaVFLczEwc3E0Y1RsQVA2T1JtR1N1ZlF1N2g2a2dUYnF4aDU5YnptdmZsYmY2NHpkR1JjR1FrcVdVdnFLZUd6anYyYXVXRlRZRFFJSFFaWFlPRTJFeE9QUExZemZ6SCtnMlNMV3JCL2paQlA4SEN0ZWRUU0xjeDBqdkJsWU4xS0cwS25ndTN3eTE5QnRtSU5HOG1zaUV1QU9kVk9LZmkxV2dqRkpPekhaYUQ3eFZPS3Q4R3Z1YjZHN2U1bzZOeExpRVczT2hUQzFRQytZVGhWUGE1bGQ1SjhRNEVuRzF4YlNhL3RpYzZlR2p2cjk1aFZxNzRCZ3R1TFgvT3daQnJVeURITVhlWWlhL2ZJUDVyYWpmQSsrVm5BL3ZaeHl0VHU1WmIwaEtXQlorcE9NZkYvT25rdGs1eHoyL3pwYXAza1QrN0g3Q1dnMmxsa1ByRTBtRnhEZXJpUzNZekF3SWJsOFVjaFBnYVdGWWIzaFpUOVBTdnoreDRrb0hpTllGdWNTbk8yTHJZemFSRTd5c1NzWC9aTzJIMHVhcXI1eVdHcEdCUVIwckNkdTlSMXBtejhsNy95Z1FwRGFNeUU0b1hkL0hRZmhQaGVkcHJMSzYvbjNydWVtVnFNbm5mdkxrWHppNStDN3hnd0lKRVVSWkdKSGVxbWkzVFQrMnBaYkhLRjFqRlQ4ZjNiREhra2J4aWJ2WkdZd2VYVzNTZGVweG1hV2k0NGNlbFRHMzdGZWpSbCt4MzFZYnluOTZKY3R0cUdlZmdRejlVeHdlR0JtcGJvMXhSVExlejIxYWtCM3BIYjBSQVpOTWpsOUJid3laUU1YNklyL1psWnNaOVBQWnFuUTNvZGJmRFU4V3l4OTJQR2tHMno2Uk92NjVOWXF5bll6d25MSCtYZ1RNVHlKNllGS0FWakphczVxZmtJMDhZRVJCZHZUdkFkVmJUVDBkT2Vtb0lJR0xobXMxdTFCVXd2amwySEZ3ZlVjdmNtT0R1S3J5VzVrM2l3eEV5Z0d2QVNoc0psYmRxcXpxaWZCVW5TNmJqNGlFbVQ4Q2ovL0d1Sms1N1FuSnpxazE1L0V2Z1d4Ymt3TmlpSXFiWEdQa2RaOGlIQVlpYTJDUGtheDNYNy9TamdSenFNOFpxN1ByT3BkeEpWMjVzRzdKRXUrNExSUGRrbE9TaU95OS9saDZSc21sb0FHQnFpM21HTHY0QTlWcXRMUXVnWlpNa09aNExNZWhIbmVpYm8xZXZRZVRsY2w4T2J3ZVBrQ3R0bU1ZNC8wb1ZQUTc4dW9SblgzYnJhN3JObFRaUDhKakM2bHAzZFg3VGpDQVdKU3pXdGhndGx4MDQxRVphcGtkL3hleXpLK2YrWk8vVFJaQkhSVXkwR2QwZ05lMVN2Y1paSkI4aUJIdFNjVlRVckFKaXlSSC9uNmFyQzZsN21BSWc5REc4V0l4NnhMQ01vdGsyeldiNW1PNFNNUFlsYU80Qjh3Q3RzNjdJRVlMUnQxRGNCYTJzL3p3NEVDcm8zM1htRXB0T0dmTU5QRFNEUnZzRW91TzBuQXowdXNya3ZUd090Tm1aSHRYZmg2WmtWM3NVK0VFdTBZYklEQmNha0owMDJWQkVYRFpXM3FLSWRDZGJaQllLRHR3Y1dPWEVzMHIxYURERUJtdHExM1NtUjJYdUxsRWJETFdhR2NOVTFjNjZtQU4zOVBZRm1mZFphbzN0N3JmZ2c0TGVGRi9OTEd5blkrbU1FMEtydmlKT1dVY2ZnaFNLMVR0VE5XS3kvTEVqd0hTYVE4bVYxdmozRjhtQ29aRVJFNXd6Z241bnhkTXNJOVdoMlJYUmhpaTNCRjNTZEQxdUFueUJLTXJabTBJS2RhbzlqSHdtanJHdmM2QXR0TStBZmRLaDAvdEFRT3plM2p3eVBUMVJtMDhoQmRCbFpvMnhKQjNUZWdlV1IwUFVUSTJpZ1BIRTVCNVpKNUVKeDM5VFR2dXV5b3ZrelhGY1htajJDNVRrcU9VRmVCdEFncXVFcS90WWdUblZaZmtFSkMyM21wb2hEdkV0RmM4M3lCYmRlRzd5MHI4MTVVMjc4bG5ReDAwQkxWc2pEak1kc3U3UGZsRjQxek9NczVnVkVoUUp0KzZDTTc4U1hQbTM5ckhoTVdQM2RxVVBmT1FtNnFKaEN0S2Z2SGpKZzZxeWlodE9adHhIeGhGdk1Wa3Y3WFhsVTR5aXAyMnBNRE42clBOZzJxNDhsa0dGV1ZlM3RmeXlFR0RkM0p1MmZwaWJySFVSSE9FZ3BzVFoyZGdxWFh5U1RacVZHdXZ1c04xWm5ZUlZpSXQ1OEVJa0RLREZER0JhZElHR3I2MGd2OFVKeVpVTThvVFBPU3grNitRYkM3ZHJMU054cjRKVlRFNjNmVzVqY3F2N2d3VjZISkk0dEd5QUdBb3kzSm1vUVk5NkZlczdUdVNxdHlwR2FDMThPcm1EZDY4MVJ4U1JyK1A4d2UrQytKMlZLdnd3QmsrbVpkazJPM1BTMk04NkpYY3FzbDJBWHEySFlZOHc4dW1JL3FkOWZIcHRicVI5Qk0zN3VrWXB4NVRIcEMwZDBaaG9MN0J2eW5jUnAvNktoMlV4YlJXU1NacVlHUVdtUGZwL25kckJSSFRlbnZsbWRqdUZzamErY0RWSlprVDhxR1FReW9zNUs0MW1uN1dobllrL28rSVliTjFTbE9ObjJKaWJLZTdWOE5taldBaCt6YlNPRm5LQXNyMVEvUEJmWkxsdUhzanVvL2dWdldLV0M0N05wQUttYS9YS2NsSjQ0U2twbDhuVUJTcXVveTVQMTRjOFpkbmc4Wm1yZVVNRk1xclJXWXJKYlh6VlJISy9qTU01UjdwbWpRYkZCa0c2UDBrK2hqd0JHOUlNZzExNkFmb0p3Skgxdkc3MXBsYWcrekZnZXl0d2tEWW5kd29MeERyZE5KejV5R2hYZ0hwU2o2THF3RUllbVUrNlJkT09iOTh5RHhUZkZJajZ4WUdsZk9aeU83ZlZnU3BDWnVYczFCRUh1bXpqY3ZmcW1wQnBENmRVMUF4eUkzbDdXNVVhQXd0cmFHSWU0V0QwTm5uNk9IYlUwV3Nmcm5pdlZzeEVIUk9wMTJPbSt1OUIra3kzcXg4WVNkbUZFYTlPc3Nkemx3cjlGTTQ4dkM1WjdSRCtqNmVsczJuS1N1UVpWbjNldWNvUDNSV0V3R3piVHc0Z056aVdmRWM5cGZkL3c5aUdsQm1VZWlRSGhONGJSdklQNWx1c2lpTmVveW9ldjhoU1FFSmNHcFpEeFBPOWFyM3lKNXQva0NXeGNLbDl2N2Q4MDA1WnpNR09uT3UvR1o2YTR4d3R3Y1l4WlkvMmRGbkRuVThVSGU3UHJjQ3VGYm84YmZuUWRaQVdEV3BmV3Y4dU1saWpVaEplSkd6OWpwd25FWVJ0a2J5VWJjbTJqaVFOOHVWc3J1bGpKK29zRXdiVEVQTkZ1cXo0Yk1VYXYzdW10QXZSa3JMMG02WDViemdXMng1bUpiYWEzZTBHbHpNNUFMa1kxcm1EM0dFdlNYUllBVXl2YzNiVW0yOU5SSGl5N0VuZCtncDNOYnVNNzBINjFKSEhYeWR1NitzYVFUN0FHVEVWTWpJdGg0M0NiSXJDQThpYWx4eHhkVUdpUkRMZWJmNnM2U3V4Z25ieEw0RlM2cThnZm45WisxTnk5TDd3S0FmTFpMcDJScXFVZEpTSVVlRDhxMzR4QWNNeHREYTZHRlNQOS84VzlXWWJUNnIrcCtSbVVJaU05azVpYUJSRHRVVGdiVjJwejIwakJqYk9jd0lVWVllZzh2TTBRTEw3OTdFU0hxZXdQVUhtL0taR0xJenhLdHNKSXZjM29GWmNWcnRkVyt5WlQ1eEtOd3JnWUMzUnlBU2hyV2tRVFdIbWU5U1AwQlFkRkExdDREdHExVkdVcGVma2dvUzlxSi9ZNm1TbzJvakFvWFhncG9nZUw2K2N3OHJ2cEM3Q2Y2YklNSkl0UTAwUExZVEd5VjExWGRCZDQ0ajlMcTR3SEUyVVB1eUlqb2JMK1NjY1JZZk9DWElZTjVQelQ0UERuZGoxQ2x1SkRGeno2TklXdE95Ry9udHpQUEZnam1CYmZaR0pPQnVEb04vMlM4Ym9hZ3hadHZwWXdwRm5yb011eGJQL0lEdVJBVDNiUmtvY2puVTExWVR2OFAvM3hNL3piazZ6K294Y05EQ2pCdzJ1MEdoTjJ5N2FJSDExa2IxSzBLZU9sVXNCb2tzMHlrK2dTUmxYa2lTTVBrZzlkSlNPNHFzWmtTVnRUTnhCRWxQc09GbW5qRGxXTUJKMUUrSE9jR1JqY0ZWQ3VBQnVjSFV4bFB4aVJsQzR0UjVNZ3h4UndVVFdvNTFySFJxZ2ZmUG85ZGFITTlPU0s5U2ZBbDZLWWYrbVY0QWdQMkxQamJ5OXZWWHFYQ0oreUpkR29VaGJlN1FiM3V6Z3FOcS9jUjRXcE9jb0ZBZGI2VVArUFhmaDhpRUFSY1FIUCthV3VmaktibXRnMGNSR0tUL3dVcEZJUW5NcDNMZDNyNWsyTGQ5Z2UxN2RIb3IyZ1ltRlRTRm4rb0dFYVMwQ0Q4c0pUbWVjZzFNeTltN056WDB6SFpmWkFQV0VYemVVM1kzZzBDeWt0c0lYeXowT1Fua3MxQTFSbmJUUXRTajIzb3BWWkZ2MndvRkR1d21XeExMdmtWWmtXeEpYRFUwWUZUMHBMTGZqR25TMW00a2xxakdMdUpOendpUnpVNGFTajhwcUx3TGtSNDIvdFlHbEk5ZHdVZkplNDI1Z09wVUQ0VW9EaVR3TTFSVmFvMmREV242OVNEZm80VFdlY3NZSk5IMnFNUGYyRmNqNTQ4bkdFd2cyeUxBcXBRd1M2SkE4dXliVjlNMWtRMlVHb3JaVU1FMldEYlY1ckFZUTkzWFJNNDZqTWJCQWhaTG1nR2RFZENibHRNTjFSQ1JTQ2o1YkhuanVudXhTOUVCU0ttd3B0bkd2d1V6TlgxcnBoc1VMVkIyWUZGZ0g4SGQxUVFBdkVBdEFndUZFL201N3R5Tnh3dUZZdGdmck1Yek9RTU5TdTNFaWlJRkUzclNYbGd5VHZjTHFDY2t5WGt0UjZvZGxtdEhrNW5ocjVzVXI1bHU0ZGdFYTVGbk9kcVFPVGt0TlFhUWhUaWRLRHg5M1lndTY5Y0NBRlYwQStMK1dSV1pWVjkxczRhRTd4Z1ZVTGhmY2VPeUsrbWhGajlUbkV5aE5hSHRhaTBNVVd2SEd5dWNlR0tCMVI3M2dOUHpUMXVtVmhQR2pwUmZUR3drUVZXSHpPQ0FiQjk1ekhwT0ZlR1pOWEp4djJjT203eVRZY3dnL1VnaXZnaGduMVNzNlQzZVI3Nlo2a1ZmUTh3bGNqYllHVGErckZTY2FQallGYTJBejdZMXFFb1ErWmRxaURIMVVXZUVuWUlOS0h4K1AzZm9lTU9iRUs2emkxUGJiM1dRRXpsR2Q4eXBlV2lpV3Q4RVRiMkFoc29CSHZvQmc0Wm5zMks5Q0NTZllJR25iTDFTNUU3Q3EzWFE3NXZ4b3Y0SW94T1h1Wk41dzRSOVRqaVh2OEZlT1RzWmltM2pxTmttblZ3TXk4WUVPcHJKS28rdHRrVlRNT3ErUVRFTXpESUpYTzFDQUF0aGYzZlQ1dUtKWk00RmZPZmFMQVBhOXIxNjRZRzAxOU1VKzhwaHZqdVM1di9BQUt0ZWU3QXBoRkZGZHJEMnRoR2U0UlB0TVFTOEVLbzBYTW5QSG9idVVLTnJUbFg3M2tlYmg0Qy9icGRVZDEvSjdERWFDRWFkeEVZdmlacEsrOGJiK2xyQWhVMVFTNWlPYS9LRGlndlR0Z25xUkFwRUVnU29DRWNtbE5aelIvN01VaEI0bnlpeGN0TVVmWVptWGZ0Wit2TXZZR0tiVkFrNUtMZW5nVlRsb0U5RnBieVVia0poa0Uxd25PSzBtVmxWMHM1WkRJbWU0UnBQK1NyOXRVejF5QUhZU2YyQnk1Yk9ZRFZqZ3NrNllmSmRiSU91V3h1SGdsdHk0RkVMZzhnN2Z2Y1VEdUNFdWtlMWJYcUlxYW1JbitGMEFsTzNQUTN2TGc5UFhkQTJpNXJNcjVEdHhLM01RYzNSU25rYkJ3R29iUldjdlovZDJNOEZDWTJydW54SFRmT3ZrY3hHdm9PcTIyUFdySnNYVnRsYUhTcjk2a1Rvczl0NC95N0tGb2U2cVQxTW4zYjdlUWVHRjZGNUxrYjMra0ZTNGlDN2tqUlB4aW5jTnZqZXM1YlQwNGIrdk9ORzBJZVk5UE9kelVGSThpaXZEVWMwblc0TnVVeDdNbGpqOXREN1Z1N1pKanJjY2grYlVuUFlMSVpkTWN1RXJNVnI5ZVdZVTZSS0d2azM4UURxY1RvOHRLWnRqZE1DMDlGNS85QU5jWDBhQy9KZGVCNHVwbVo1eWxvWVdydjZDZG5LY2JHNzJoc3lCS0xXNHVKOWt4WnA4WVZzZWVIR2g5eFppTVE3VzlCdS9hU1pEbHBzaGRGbXZkVks1cVVoUGo1T1Y4MDNKZklTcTdTaUZGZTZrbkxtMUlOTUlnbVhiSnJLZEhmSjc2Wk10a1A0V1BjZ3pOYkFwV1hoT0ppTmRYMm1UMzBIeTh1RTBEWXlDV3F5M2lkQ1hTSkZHV2hRMUNSN0pXdllaeXdiaXh4aWFRVEw2NEQya0VBdFNGTlpMYWZxUkY5WXpmS1R1TlVFMmxMNk9yNGhQTEZwTldPRzJXQk40bGpDYmNDUkZLM2RINmNta1pnajJoY0cwZVlMdXo5L2tlV0xzNjJUb3VrazJOTlJ3blpBNkYzRjR1UDYzWm5yZDdEWEdsZXhHV3F5VnBoQmdoM0Z0b09NemVYdjdPd1ZEeUh6YW1aQmxmQ0tSdGZzeWJyRXJlVE1EcXpzVjFWODVhOW9kNGtEUTlqTU9OaVIvNEdtM3EzdVhOek9lTUsyMGJxTUlqTE9UbWJDYUM4YjdJU05wYWtyV1pFcnkyajZ5QVo4RVNQVWFxYzU3U3pHRFNvZk9KRXBwdklqdm9FMnNCTjhUNGpqNituTTJDd1Yxb1VjS3NhRTBQWHBpVmhTRy8wL1lDQWNMQThYaE5aT3lpQlBPc2NzVk5uWUlNejJwWTYrcmROUm44amEwSEdNZWo5UXM0V3lrcGZxRkFKaGIzbDN3NzZTeGc0d1kydmtXaktQYkozSERqWisxaDlCeFdGTTZIdXNqZDJPYmhteDBQNzFZeVd6R2FBK25WRElKYzEzOFRmMUpUR3FqbVpIK3BFMTcxVmRUSVVaMjJaVlZSc1lHdkEzS0YxeVVhT09pRm1SSDZnSVZTeWdPcUdiV21DYmtlOVJrOUJaMnJud0FKNWRSNzlIU2x4bUVqcG1PaFM2Q2dtQlJoVXNCMXNIQjZDT2JTdjZQeDl0eWtZZ1ZkRTl3aXBINU5HcDEzNjNrOGtqM0o4WEI2NERNV1RRb3l0QXM3VmVidU9Gckw5Y2VvQW81cldNWkhST3Q3ZjJYOUcxdzEyd0dtemFMWEpUSE9lTExKMncwQ1FuQ0htcW5mNmdLVUVVbjkzV0ZRRVk3Vy9teGs4NEVkVWgwcE5IS21uMnZObnlEZm5uQUJuYm5Ib3JQOTRFNmRrMXlCRWJHMW5JdEFwaWt6WkxtZStyaVprYWdjVVExelhvTWZZdVdHbUlLdzlhNFp1K0xQWjJydGRuZWFsNHRjUmJoUjBBTDI2TUczVVlaaWhvYXNscGpCVVF2cWFHakFvMkY5b3RqSnVkMlNleVpBWTRtbzR4WFFrZlFKdlRWd2hBQlV3RVlPMUlWQld1b0VjNVpYem4zV3RkRVBzUVRUQVpTdEF5VW84a1pQZURkeGNpcHJhR01YRCtPYmFjdEhsZ1JKcGdvODhwL2FmMm9PbUtJcEFPTUZmRkxUbnFQczZTYlhRdkFmMnZJMmlMMWUrR2U5WnYraXVUa0xrRkRDZ3FOQXA1ZG9GWkxTMzh0OHVoR0J5MlREY1dSTnJmcCszNHJYTFVZUElTTVUxRkcvdmVXdys0aVY4ZDhkK2lsTlBIU0RDR0l5M2FkTmZyU3N1VXZ1Y08ra3l6V1lhdmpuL2QzbnZlUXFCV0FnQW9ITHlyS0JZUXdrVjlzNnRlWlN0Z0ZLS1FqZEtHUitkbndMSTNhRTZrYk9OMG9URUR1S1ZibXFSNXNVcWdXMzZnQ2VWdXBsMW5LRkIzd2V0VHkwN3NnTytNKytHSTVaclYyYSt6TmRHaUI2alhpckxOWDZsKzlqZFlhdFdkQU8yRnhBLzlTMHBYbngyOVJTWlBoUHdOL2hiYk1KTHFiMEZrc2NYWlEveVFlVlhXZWxGTFBYVGl1TnlFUkRuWDF5R21zajAyK0lRejlJa0Z1b3JyTkVVUitDZ0JmNHFSODlpbnpuODV3c1NhYUVSTlkwUmFnUy9MTHYrNmlWTll1cGh0d2R4UExIanh4U1BlS0dCd3RjMFY3UkVjUENQb2ZvYzM0encyRW1oZlZvNXFQcW5oa2FNTE96UTltc1dLM09GY21Ndm1kZEI5NDVvbkZXeVFKWkp2aDRKZ1ZOL3FOeHBxZGNNbWk5ZlhxaGMxQUkrNTI5c3JxeHFWV3NuVVRacFlMbXRsOTRVU0RHRm5GQ0hEQkk3TVB5QlBHNE1uWWQ5Qm9GTGlsdTlFSG82UDVIZ0NQWlNsTXlDb25meTVZRVd6dnp3LzNJRVV1WTRDZ1RRMUcyM0VteGNHNXNJT21mSllCTURPYVd5S3RDNTFobzBja1FBdjAxaUl1STZMdjhtNWhuRFdwREJnQ200K0pRckdHaWdtWjhFT1ozWDg5a2FmSTZSQ3NTZ05adWtDUi9oSUllZG1ldVh3WVMxR2lDWEpqZTN2a2gyTXFJRjc3ZWg0Rkg5dlFLM0VkY1g2VGNDMnc1dGVuR1E3WWtIWGZxdEplVk1JbHlwK0hLMENVNFJGalNvYkk1K0NpSDVJZklGMTlTVUR0L0hQSm40VjR4UjVpZ2hFb3ZGQkZ2NVNkYTM1SUJCcU9xRmorcjd5cVFxWUhKK3NiUm9Ba1FwSkpDcE1TcHk2eHVURXp0NGViRk9iT055bmlNdURLYmtQZmxXaTBvVlVnM1MycEl5aXVZUk5MenE5UGQ2Y1g4Q2N4TzRMZTNEb3RXQURCdEVYemlkY0hKZDNPRG5KWkRBYzZ2cW5MWXpyUEp2LzMrbkF1SlM0TExNNnNUYU13cG81U0tXTGhGYjFiSzNOOTBUR1VEZmxKS3hGSThSZVprNlUrUFJxRm1PVVZjWGNGK1liU1Vwb0JxaUNsd0R3VzRuaURLNjV1LytXMTBaVkJvR0RaVGVrcnZvWFVsYk1RQzM5OXdtaisxQ0ZSNHFiWE5hNEcwWS9nOTc0WVpZZXVRN2ZsZ3E3Y3JmcVhPajR3RGo3UEF2UWdNakJiRGxhOEsyU3VEUk1xR05LM1dwT2ExV3NBWGlhYWtKV0NWbWM5OXZrM1ROMGxFUWJTVUtNd3ovQmV1QXFLU3Y0STBpdSs1VkpsWDJkRENOVFl6UVFNTU1tV0VtOHJ4bEQ4R2hVaW9GT2plZTBERzI0YS9ocnFKeUVrNkdXSWMyc0JUTGZ5b2xiMkFwUmd2dzc3Y3hoQ2FQSHBLeElvek9lOW0yQUxXZDluRW5xbXpKVENFeUUwTHMveGN6cVhBenArRER3WWZ2V1d1ZUwxL3EzTHU1NWlJWGs2dGgycUhUUm9rQWtPeGZRRXVyL3VRME1tSGMyK0IyeXBVK1dBVlc1eCsxQURyR0U4Uko5c3R0YUdNSHVZVFV3aSt0TmxVVzRUTzZWSzFGc2xnM0Y2ZzdCcEF5NjRVM0tIS2xkYUtMUVphWlNUQTRvc3pyZWRiMHNlS0ZwUGpnVXhJTGo4RmwydDJLZEl1SW5BK25vYmdKYXB3dFRINlF6cUUwMVdvRkpIQ3ZVUVdkT0ZyK1M5MVZOOTRzNHYxc3NtUjBlb29NQkNZWGNSNVBIQWZmbXdFdHNYcUZwQXpuRFVrT1liQW9kYzVYUk5CK0tOdGxZbTl4SW5YdlBpWTlMVHZGNmxUbmJpZEUwN1Uwa2tJcTZBRy9FMmJjKzJtZkliZXE5N0VFSTAvWklMU1lCMnhwSlQwcUxUeGlBd213cTJqbW8xQW9pTnVqRzNCd2FIWjl3SGNVVzN0ZFF5ZkRXNzdFcUU4WVFpMUUrTnR3WHUrNTNNOXArSU4yMy9SVDJJVGZyVG84UFd5Um1uNGtzVTZXWEdoVWwwY296ZlVJSUhSNUtPTmI0NzBxRENOb1k3K2tvcE1kSm1RSTRtSGRTc2xlN0lISkxVVlNRN1JNa2JyVlAzcHJmQ3dhWEV5UUgycWtJVE4xWllUbU4yM1ZGZmNOaUJtRlh3eEpXMWFDTlQ2Wjc2ajFTTmM2U3RrV2dyeWtIMTgrSDN3TFdqUmN1cllFR25SbE5jSzZMV1gvWHJSeVNpYTQxV2JRT1NMKzEyUndCTll4dXRQSkRBalQrOVFOanVhVmRxc2I4NTZ3b2VuMXdlS1JkcDkyR1Q2VkJqK3JZM1VEanpVVldKelhXcFQxaWE5MmFPMDUwQ200OUtPYWlTUWhGUVVjVkdsTWVzQncyYWJyQVM5Z24zWDBzNG5BVzNVTklqT080Y2NKR09lby90WEZvaXZSUGdNbktjdmdyOWFqeFNNaEplNkhWdGpKNXVEWmpmSGw5U2hCQXdaUGk2aU5sbW5NSVlFbEJLdDNmQVZpZnlnYkgybFd0Vy9tYUt2a0hQbUtZMTVFUE5ZejdIUTVRSnh1WnNUT0xnSndiMm05MDI0ZVFkbGJJajBWQWR6dDJ3MzcyUmZNNmgyL0t4ZFAzWlRFNzNXMFh5NWRyRy9YTzhQNWRrQVVhbHhLTk5zbGxmclBiZERCMmozVE9tWW8rYk1NVU5wYnhqMVdFWUY1MXBEUWZQVG5LVXkxU3JrMHJmOHZDV1JsYzdtYncwUkJvV3JJa2Qya0txK0hBVlBSUlhlNllNNTArNUNGbmhZTVFiQ3pxK3pST2NpK050VVVvMXozV0tRRHJGQU9weC82NU5IQ2loRGova2ZCM1hYOGdlK3RHa2Z2VnZVTGtpblBneWRJc0szVW9IL0hQL05HTzl1azkyNzFjVjhEMmN4VnBKZFZsdlZPRDR2a1FHRnpmVmxWQlY3WDRzZCtmUGEvQU8xbG9LTXRXaE9jRXFGNWtaSjlsUHltT1k5WTJmRGV4bHJDZWxWZXVJTFhsVFF2N0pkSGw0WnlaYWV1QmJVUkYvb2ZJMktBNkFiZEFFcEdoVGtlbFQvQmlNUmhrdnkra0RWcXFGWUE4Z00vblJQdmlnSHJjSVR0V3Y1VkRRbllzMFVjT1dRVHBhMUZ2VHlHNWl6aUM5NDlsZm9wU2k4WkpUUlhsQUJxMVZBSWhBenRLNlpnV2dzcGtmeUZwL1dwbGptd210SVU1S2lsOWJWWlZkWTBNK1QyTm5SUFJQZ004bm1hdG1GR0JxdGE4UUNTbmt5V0xDL2hRV1hCd3pIdDVuc1JROEdKNkdBNW9QcW84SGlmSE9XVnJ3VWJHSkRDTFBqRHlicU5ob05vUHpjN3hMa1ZqbENLVWE3QzROcFVoNUFTTDBYcFRSaWRKbzV6eWNUYWE4NWRsYTcvTlVwaDhOcVpnNytvMkdqNEhUVVk5cHl1ajU3QlYxMHNBalRreEZ2Z2JZam1VOXpnU2RjRDBPSS9BMWdsZXk1NndJT3NoS2YxcFlDYkdTRWQrUU11Zm1ESnE3NENtb1ZOZzlhcTV2eGNKNVlKQksyTlF4dU9qc0RRRHByYzZFVTFuaVdJNDBPck93cTViTllIenB0NG5UVVRRNXdPc2NqcGJmVzN2ZHRwYk9TeXlaT2FTWXFYR1BBVEdUU1hRSjFnNG1GSHhDOVZrTkdxUy9paU01Yy9WR1U5RUtxWEdTQmxJbnIzSUdKLytYR2lUMmdqU0RCTnNXdnBPMkdjdXFyVzZJRWRoanpyM2wvVnVET0Z3UmFGUy94VDRIUE1adXBEdFdHM05wYmJwQ1NiZjZvUkhkQXpTNnl6TGlkbWkxa1k0WHAvRjZFMklUc3JreUhibnQrV1N0dmtWb3FYZnR1S3lnN3V6SVNHd253VGtlNDQrNVNsM1RraWwzcmVGaW16Z1plTEY3UWR6VWdoZXoyVERWWTJmYVBERG45TklZZHE4VWFIN0VnMnVvMURyL1dycThkaEJscW5nL2NzYk5JQU93TnJpYnhRWi9FZzFUYWs2Mm9leEVOdDNpMnRjL3JKVG9OQkFsTkR5bWpJakVZK1ptT0JIT0x2VGRCb29tQnpYSWNOS1lNYTBQV0JKODlrMEJ1VGdKdUtaclZqY0s3Z25Ca3pMOUxTZDRNNWRlbWVWNkJtV0tEeGxmeDRQVC9CT2g0clIrbUtKZ09HRVZGVW1aZno5QTdTSTc0SFQxV2NyYnlIUWVhT01iaWFBT1hneUo0UXJKbTJ4MjJ0T3dHcmUzaVNPNytMcnJqL0JkVmVuYTlvNXdvRExueSs3WjFZZ0dURldvYWFTWWJTUWJNRzg3YVpnSnNqRmdEeW9QTnBObldUWVZ3eXByYjlIMmRJRTA5bFozMmpKQnNVUnFDWEJ4SmhXNWtBZGlHTGgxenBhSGs1SUpVSWVEcll2ZlUrMXBtZUxXUlFtc2dwZUNNUysyMHBick10d3ptalVFZG1WcXRFZkpDWjdqajVQOFlGU3VabEw0Q2lxRWtkZlI3ZHRTZUU1YnpyOTM2VnUwUStCbnV4T1QvNVVXRXZWdjdud2NWRURwR2l3R09jVnZ1MW53ekluZlFkUmsyOVI0S1JyNk9ucFo5cGI5dFh6MkpPVE1rMEd5YkFIU1JKYkg1eXlobitYTG53ZGZLbENyREpYdDhVMkhnNW42M0gxZnIvTXJ1UUd2MFZNVkJ5cTNBNUg0RzZ4SlQrOWpQcWlvNVkxZkU1ZkdBSXRDWEoyeURPOXhwby9tT3lrcm83NDZGQ0tFbktIVklhQzBwT2RTaHViSFZQVVFmZFQzUCtkeHBWR3IxT2cwbUxrY09jeTJFaFFGUGNyeEY3QWFSaVpBYWp3a0tQVEtHS2UxTFhBWFpkalpiNjhCVnMwVFQ0Tlp0bzNuZkQ1MWZVWW10OWVSUmdyemhmQmg0SFM2OGZ6enlVcDVhOTNvS0t0ZUdzWm9RakxlWG1rZWxNQ3hVdDJMR0xHcklVZGpidTlVWU9ndnE1Z3FNblo1N0hzNE05Vmo1YjJDTWl1eDB0MFE4ejZvanVhN3pTbmVKM0FxMys5OURmTU4xQS9KTUVsNWdMWnZRQ1VRRm5ZSmhYLzBWWHlZbFcxYmJ3ODNiWmNkYXdQVXdpK1hQN1ZyamVOc2lKQmVKbWlGVnEwYlozbzUrSVcrbDVRdWo4elZWYW9FWjA3RUdMUTcxcllDWHZpakZVMlZRZXZvR0ZKdjJZbnJrN0NGQWZ1N2Q1VS9kc1RXdDJZOVZuTm45OTVyN1ZuS0wvRTB3S0ZWRTdRY3NDeEdXb1ByUjZsZko1YW1CcS95Z3lLSm5uOEQ3RzdtS3BhWWtFNG5BTnorcjBPYWU5RXA4OFRZTmpXcGErU0czZzJXcmtndzFrMkZnOTVCaEYyN3BXNkkwOHVxT0J2WjZENEh2R3MrOENhR3JYM1FLV3FzUG9ucjNobHdRT3h2bWhXN2FvdWNveUdqOVE4M28reXFKTFBxbVVhTnNCRmJYSEhnQUNhRlcvdkFiWXNJajN3QWN6VGxpOUcxUER5azRpQWlWNUNLalJmM2pPZ2NkYTRYaXpwS2pQTWJ2d0xNTHRvSzhXY3VwZFhnc0pPV3YxRmlVc1RvcCtUOTN1emI1b0UwZ2VGN1hPZ21LcEphQ05yYlRQMTdPc0d6VUFZWlZTSVhzbEJnc1h3K0dkR3RkZE1xKzFpeHBaNVVGbmlHMkpXNyttUUpYMzBQaFlmZTJmdkRDOG1KVnI5c1lHYlkraVI4UzU3L1hZOEhFcDdEWVdBblBkd1JwcklRYXFoT0VneUFzSDJJUFArb1RWTzhIRHQwQ0ZjTGl5RXhpc2xGRU85OUw3dWZnVVJ4amVFZXFoWW1vWHB1bDNFYXJkOEpqbEZSWDJFb3pLVnN1S2FzNWVSbzVqL0I5OCtrQ202K1JMdnl0OU9aaUppMEJPaGxCeWdpV2FuZVprdWs2QUtKWGZHdzFZYTYrekxTOUFMaVBML2s0dTlVbk5uU3hGL1pUNGJSQ2toUjg5cCsyRkRrQmVtZ0JWRDdLbHZMVmNKWHFxZEkvMEdWN25ZRnB3VDFYV0FQZHFrYzcyeE1HRmx3dTFTMS9SQXhKdkN3TEhPZnNQaU5EbU5mVitKMW9kQlFQOUNsMHlWV1ltOVVKMmd4cVlkNHozZnpaWEYvOEszN1p4VlovdzdmRzVxYVpqTjVEYjZVUkZZOEUyekxoRVN4TEZuY0F0NGhxMFBGZ0ZyT0JPUEFkbE5GWlRIeDU1dWNNNkhVUHh4YmRQZ1dhYzRHYnBwd3BQcWVJZjhINlFxSnJOYytiWm9TY2VCcVIxUTArVkFjemw5TDlLZkVLTnd1U2REdFhYV2crSGpTQkxOOSt4bDBJU2lxRjNwS3puTk9RRU9jWXJEd3p6SzdUQlJjTTJ2VlVzS0RRMXRnRGp4ZTdaZVhMci9IZHZ5RFBHS3FzSEFEWnIwOHhUdXF5ZHNGTjd3ZGNXMGc3UEQvT1RnenljeWZzOWN0YWFlNzhON2ZBSVNWM0lvNHNGdDk0dmdnWVloaUN6UENqcXVCbVA4ZjQ1eVhieUUxdnc1L3RBWTVGWFdZV2lCY1RmVEpZbk52QWtPYXhna2o0TjFSVXBHcTQrSXVHb0NVRCt3NVhHYjJ5aHlnUHg5djcrZ1NsRmdNKzlUTGFGbEFDUG5PRGtHS3IvT0xBMDhpcC9nQ255bE5DSVYrL3pSUktOTjlpV2kxZk5QY1dQWnlQVmVLQTh4ZTRUWDRGRGVpeDBsV2JkcWV2cStlQVN4NGNWS05MTVhLSEFqYWZwSUlqM1FINWFKQ0VPaUQxNGg1L0VoN2g1U0hUQ3hLNFA1anIyemI5d3FDZVl6T0xqTm81ajlnVGVCV3NPekNXMjN0Uk9BZzc2Y2lCV3BuODZKcXlwSnQzTXhKYUJXdXJvdVgzSFlOQVN5ZHFvdEQrWXlZQWtkbS80b3puMlpxZkVZcm5rbVZ3UFB2b0E2VFpGK2k2d2FWdlgzSU15akZETzF0TzA0U3hBM09ZUU9UQkRpTHhEQnRkY09Ic2dNYXFKR2tYN2NNWGJQdkMyRmJJL2ZYcjZ6Sjhrai9OZmdsQVIzcC9PcGRQWU9UVXJqK1RLSldrWEZlWGJQSlBRWlVFbWg3RXlPYWU2cXdOeVU2c3pjdzRFcFo0dnI5OEt6aSt6WE9nUjN1bzBWU3hqWjR2N0c3ZWtDTGtEZ3VyM0JRUmI2akovUGJyY3l3MUczNFpURlZMRDJjQndYTUozSlBKZmdtK0g2M1gvVmlMSVM4THFIUmRMNmJmSDJoK1dsR3VTVWlsVzhsYldPTERnV0FoS1Y0dGJDNThxZEpVbmd3enJUT3owVU1sT0xMOWxVSUxjTWc3dy9HWHFERmhEc1JwVnNtRFZucExZMXQ0MU9KQmhiMkMyMnFpcEZXQWg3by90STVoeXRadXpUcnhwdVdoUWJhTXFBcFFOZkdrZ0ZLbXUxSldWSkVCY3YySFlRM2toUkdyVitKK0t1SVBBYk9mKzJ3aG5kcDZXMXJzWXZYVWIvZ3FOdi9CVkZLTFlnTHlhdGM5SStCUWlSTlVuWkFWbU5FcmlFb0F6bHMyY2lkbFFtK2k2Y2wrMHpxcXdwZXdXN0ZxYVhQbGZYWG1DRFQva1U3T285cG1wTG9UL2dBN1hmU216WmNrNUZYTWRhNFVRNlRkaEZNdXhLYUFvK1BEVXpEYlJ3NmtMdHZRWXNuY3YvQkYvdk5Xb0lvamFZNVBOUUNTb1pRcUU2UFk1Zy9SSlo5cVJiQnBvWkpJTEJWSmN4dEpKeGRYVzFtdFMwZUNuSlVuL1JmZzZ3MFRWUWpxbjVoQWlNeW1wcTR2SkhrNUxVOStIUm80TnMrc1R2RC9vYVEwN2NWV3VwYUxsMDQ0VnZuaXFSOFg3dUNDaURoQkU4YVRpVlFqSk5uWEtjbmhRc3ZMZjhBV2p5WktyaXBsajhBRERiQWRlemsyV0tFVDVaL0tPZnpId2paT3JvLzhMTUd0ZisxMFp1QUxEK2w0YVE1N1VPcFRBTjFzb0NXUE9BWDI5Kzd1MHVwdFhvWWo0VVI5UjRuYTFpNC9ZbENZeTQyWkRxSlB6a3Z6OVptMFVRc3VvVVppZzB4aUhqVW1WRng3WCtoT25NVUxuYyswSk0ybmJNQmNVbm9uSTM1OUVGV2tjTGdhQXlJRXVTUnN3eWY5YTVMMFMyYWNPalQzSG9wK2hHL0d5aGdZdzlqVWdSN0JQcENDZU5sS05ZV1FHL3JIL01Ic1d1UFRnaURTZ3orallpQi9yQ1BlNjQzVFRlSlN0Y2Q3VyszeG1vVHFscitMMHlFdFVrZk9jUVd0L3hyZWJLWWg0ZXIxZEJjNzhHN2NIRUYvU1dGRzdmTHJBbHhDb0lGekFpLzVuT0lNZlBIeUxMUHF1RWZWVzZERndqVmJ0ano1R1FFYzU4WGZZRVdVNnhpTkFNSHQ2N0FodWVuUnhhV2tGejE1VzhaQmFVTU8zM1ZGSE1JZHJDb0Vjd2ZhZlU0bTh3VVlQRHFaVzlFUmNsZzBRTzVnK0t4dWd4UUxBeGV4V2FSWFp5UXVkRzUvWngyV25TU3lHRjdNYk5uam5rK2lkOWxDZzlDMXZMUHdHNmhZQSt4OXQ1ZzZ0MkIwbmpYaC8xMHZkWDM0Z1Exdlk0NXlCWHRnV084dFFNZ0lEVW1oN2VPRnBBSUx6RjBPUUpZR2ZtYnA4aUNtcjhqK1p4cDlUYzNWNC9xYzRuNk1mZHVuMnVmaEhkNGNjMTcycFIwY3hPRDh0TzE4U1RwdTJqTk5zUFpvYkdrNEc3NkpYMDhXL3lVUC9LNVV1N3VUUUozeXdCK2lxeCsxQ25rWExZZmtNdHN1a0xvY3BXS0MzclkzUTUzNkRDeWkxM0tiWTAwTjZmTlpWekhwZ0VFbWVhQjJiQ3BzR3JuWHdqM1pVZHFUSUJLQkNHVUx4YzkrbmdhelJiWCthVjJCcDZwdDJ0ZHpTV0FnbFJhb0lmZ0t4cjd4UjBRUldsaHZqVk9GRE1YNUxaaE95cVNVTHVYSUhWT0lER3FOcWc4d05CWlVjRWIvSE9xR0I5YW1QNmNJeEFJRGNEZUtqeVhvOTVWbWFDWjdEOHZSaTdRRGJWYmdVbkdIS2RTNE50ME9NOEx4bUs0RWVjS1E5UklraURqUXk1MnhWL2dqNWhWZkJpYWhQa1BRRUsvRGN0S2NBVUdKOVhPMVdSNFdkQjErU1Bya2VtVWEzRUZ0TG5sQUZKTjBYMFhkTUJTSHhUQXdKMXlnYnB2TTRnQnFrVmhYdE9nbEFESDU2eU1tMGZiWmNEZzJyd2l3WmpnNjZ5S2ZDaDl4cWZaeHJSWUxOWnRsUnlxS2tQM2hCRVUwT2F4bmtrck1aVVVHYlJsQTliNXZJcnE5d25GYUt2Vy9XVXFzcUxxWHExZExTN0dKOG8yRkMrMExBZWtCaEtEY1EveW1ka3NvREpKTTB4VEFQVWlIaFhXdUpZYlg3eVFmN2NoVHZhOFc1UU54WFc5eGdreFBrTHFjUS9CamlaUWozRE5DdEo2V1hiN1JkaXI2bWN3SkMvYmFCRjhVZURVU1ZpY3VxbUxUY2hTa1hqMTc1ak02T0wreFNma2paZE9YMGVMSUk0YzdVNGljUUtGSjR4NnUyb3VybmFXL3Zac3F5SFNVWDdwdUx4dVFyd3RHY1lYTUMwemd2NGNQc0pVMk9neDhGRDFxUzY5R1hXcEZHV3FSQ2NCUUsrOWtoL1RKd08xaXZDbG5veFFvUFhzTXlFTDF1czAyTWNhbit3SXFCL2ZLSkZkbVhrWWtKM1A0bnovTitFMkorK1JsejcwNXpZcVdDNXRJWHdtNko1aFVaSUVadi9ZS01uemFSdzlRM29zSDVMa1FpcE53Mkp6WC9kK09EcURUaUE4ZG1WdzdiZmg0ZnVsVWFFSnJyWWFFdTFOTE9nL2sxWXJwb3htUG5VUnRoQ1lOZXJBdzZldnBZM3RoM2ZMQ3puaHUwb1ZEWTZFbTJhb1NsMHVFT2tXSXVoOG83Uk9kellkTFdSaVRtQ3FIZzVveDhLWjJJMWh2ak5pY0kzRCtXaFVPMW9wK2VZeE91OUpOZnIyQnRxOHJEd1pWcFV0amhQcDQrS1ppMkJNV2dlOG5uN0xLRkRvcFZERWlBUUdOUU96YnBVMFhxNHRXaWswSFVhNXRTaXpMQjlqb043ZWZudmdUMU9nTGg2SElieW1rRDVVYUhlMU5MTDk1d1A4NEVlME83R1RFVklFSVY1MldBcktKaUlQNEtKZHgwTE1YZ1Z0UU9ibldNV3dUeGlPYzl4N1RHT1ZTOHRFOGwrbW5OMm9ZVzYzZ1pBdFJRbDd2UjBHUUNEY296Ym8ydVFXU09Gd2R5NFlib2thcDhRMENua2l2Tjkvbjd4emk2OGxFTmVyLzYxVnRSdTU3ZnlOTk5PbWJaTmN3SDFCRlZPWFhKSWxzbzNWcEZhanVvNnJrWnhzSUpDL3p4YnRTWVZrVWdsakQwZ2R3eVRxTlFxUlhFcm5LVWVUTEs0YUNCcGtIK3UySXVEMlRxNmt0S1JRMW1JTDJhNno2ODdIRG9YbXBTaUNEN3lYdDlIMjJEZ3NqWVZvSW5XUEF6R1hZZjlrZTFKVGpSY3BJelRHaTFCT0JTSkNyRS9xVWNEYk5aYUJWSU1HNVNIdWtLYWRYdEMvMk5NeDA3RDZDMzA1d2Q2Zk9vazlCUjhPYmk4OEF0aW4vSVBmMHY4djZkdWI3VklwTnZlLzJJdnR6RFhrS1RMK2YraFZ6NGxXZDRYa2trUFc2RlpNNVhBRE1SeDY2V1pXN1UySk1TclljWmJPeWNmWjJKb0ZnYnhUTGR6YlJtKzd0Vk9RbDIvZUdhemkvNnRDaXNxZDFsUHZBVWhacG8yaHFVcHJtQmhYMWNleUFRZmdpZjZOQTB2akpUbHVyUisrT1RnMTF4aC9odzkvK0NWYThuQnhvL2JoSzMyQXhOdTR6YUtwWHFxTW40NXlyZDJwTDh3UEdBeVl1dEhYWWN3cmJ2c1QrcUJCc0FMVHpVQW5YNHhXajBsMmFUYVFWRnBQR3FYY1dBZUNkVlplL29tT1Y4cnFrRnBCSVRkbTZGaXoveU9DcVBLRDhVOHVGQ21zeWs3VjZORUJ0R3FoQXcycC9nQ1dyWXh5bWFBOUxIaHZxVi9GNWR3RXpwRUQ2Ly9aNndscGl1SU8vcUZRY3ZLck0yYVFEZHdxaDBCbVVGbU9jYnh6ZmhwNVJMdXZlTk1odzh3cjlxb2Y3Wm4vK0Nid21qbkNwWXFPZ3RFSkt3d3pQNDA5ZlJScjREcXlCRlBuWGdSbEh4UDdFYVFpb1RScGVTQWxzQXNXOWRpM3Rld1J0SC9oZ1VuL0tkcnNxMUl2M2pyaWo4OW9yazFqYW5UNmJ0QmU1cCtMR3pUU3hOcklrdFNzajhZT3Y0djQvem5uWGQ2QTZhRGwzZVp4RVN5TENFNmsxVVNSZmdlUkdaWUNtcHJkSUhoeGNMaEUrZXZ1MjNQRXJJYVdpZEp2YVNUNk1SQVJDWC9BdVVlOWxhQTJLeGNCL0FKcXpTN0NCcEZHcnpRN25ZSm0xK1VxVnRDKzc5ZTBFM0VsbGVhS1lUbWdOSU8wa3J3TXhtelZPUUJCbFY0d3kwME9rTmV4Snl2Y3k2ZmplZElPS0xIQ05TZ2FUTFNzTkI3bW1IcVF0OUhJaTREOWZackpyTjhpN01BMjdnSndTeUFLMmk2dUFJODNVOWNMNU15SmljejE5WkREdGpNVFRybDhMK0M2SWNJaWZQNGZXNmN5eC9qY0ZXUzlYVUhXa0J1U1lSZmErRzRMU2JwbHhwRjhjL1ZBbExhK2VhQWRKbExBanNMLzJMTXQ3bU9HZnhzeTdYRGg2UFVKdkpiMGozeGhjN3BtT2ZHdVZwMkdQWVZybzRybVh3Q3ZzTG5La0FudG85NUtpRHc2SU0zZFhsaU9CSUY0NUhldE03a3J0c21Cdlc0VitYQVhuYTRrd2IveTJ4azNqTEl6UllSdGRaV3l4MFk2b2x1RjgwU2V1WFozV3N4TXVNQ0g0SDB6NXVrZWZyQ0NQajc1ZEJWOHNlOXVrN09QNWVSZnI2SXJkVkYyWkFMakZzZE9IRThJV0UzTFk0VE93a3VKblhCeWZxSEdtTlFGOHdwZFg4SFdkK2FpNXAwTlNKSlAyVnF5MTZZTjdGV0RpdjJhMytOZGFRRm9nQndIeXRJdFVRbUpWc3ZNR3Mwc2lKdlNoczdwTVRaSmtTVE1KdWRyK3JXdngwd28weUwwaW9MYWFTOW9Pdm1BR0lBTTEwR2F6QnhUUWpTRkJKendCVkU1K24xSDI4M2FUdzAybDNqKzQrS00xNGRIMU5YZFJPYlRvN1hzc3NFcS9LMDJ2OGQ1NFRKT0NQdDRPRVV5Y3d5Z0haMzdkd1YzclpaZzFrQVliTmZJbkFpSWo3NEY5c0MvcU1Vd2IvRngvbjhaUmFzMzl3a29ZK0tMUmI0SC8wM2ExWndQbGJ1aUltZ3AzVW12SlJ0eEc1d1BZWmlPR2dETW5rbnlqY0VSV3ZrTnJKam9lV0VTSlRZbXEvUkxlQ3FIUWowT0Z2bUR5clpSTFVpVkFsUGZLU1oza1l4ZFJGTW5Hc2FjNjZHaEh3VVNENXpoQnhxNEJvNmNHSDFDeERlTnlJdk0wRDlGalBXMnRrWld3NlhTK2ZKZUdRM0tLS3VPTy91RUJROXlXcDNrbjVMMUdubitHK1JwVzViTGdiRTFyN3cvM0JhemVSWEZnSDZEV0J5OTEwNnAwakZlVFFNalJTZWdGdnY5Y0hiTEp4VGNROW9YWFpFOU8rcUxHNnd2VkpiMXAweURXblJnaTR6Z2ZPSm5IS3pMVDJZb1hMc2dQMDlwMXEyU2lFdVdJcVplcjVncHgzeGdxNEtPVWRlYjBuSVh4NGZzQVd0ZWwvSVovbDRRZVM2SHE3dG1vUkFuUG9nTk1FeHdwSTVSb0tvbzdVMi8xc2RyRFJ3dGNDZ2RHYlZhUWJCSTk1MnB5UnhUMkRnRU44VEJ1VUdNeU9peVFaR1V3eFd5SGh5dHUzY3B2SFVrREQ4b3NKREl5Vm95SEYwQkYxblVWZnd1ZTJDS0FhemdxUmxUbDRMdFh4dmhKbWZQNkFObjE0OTNIc1RtemZ5K1N0K0NlKzQxTUtBTVA3L0gwR2RzVVhidDNXYXRPdGRXNUZKMnZoUWpjTlR0RThpeGlLa1p6Z2MvWnc3STczbUhKTFNKTUhlMzR5Ukpxb1EyaDBZV3RMYkhDcjNTVkIraks3anpxV011eVhLWDllcDE1bi9WbWpaQkQzWTZaWTYyOE5iZmlYSUsra1ZnSnRFc2hJSGJnc3hOU0VteTFDU3h0OXk4dGdsMlJvYmNIaldxYXY4aTYxU0pCZm9XSHpwVHhHZkNVKzMyWEJSNEtZNWhSajFRajBvM3lyZGNkek5OOHNPSHk1OWgvbnl0K0Zjb2pxQWJzK1FQRDRXQ1MzWmJGYTIvVDFKZGs3YnFmVzZpTUtUTFFyeThSQzlId3pvZzRNWXVmVWxXYmxzakw3Q3kweW5hdU04Y3o3MzE3VkhmaGtYMlE0N3U2TUZtNGFMcnVuSHZuRTlNRXN5dE02OWxvY1dCMHppT3BReGhmWWs4Uy9HL1I1ZHlPeE9hR0F5cHkyeGJYK2Q2VHFDM0UvcHUzbjR0Z0lRNTdrSkd0Lyt4MVUzQ2F4b0dOU2hMZGZvQjR3V2xOR2YrRWlGdmgwanRJZEhGRWVzdmwxelV3VkplbUJ4N2pIdVhNSGc1RTE5TGFCY29JQXQwMzVoUGxld1dqb1p0Q2RKUzNzYlkvZ2doN0Uxb3diNG9KcVNtMS80clJvcnNZVStlVER2dWZSTFFjMUlnc1RVWnljOWh2d1dYRVRSNHZTWitIQTZBTElidG9NZjQ3djFVODNBeUhIOUg0TDIzajlNeURWN3dETE9hSmw0MFN3WTg5L3RkZlh1UnNmSWpYUldaT0kzTVN1VXl3R0JBdVhUd3lvV2p6blNQOWs5NTY4cTBWTVBPTjRZQ2pWVTg3eERIajl2MWo1Q0I0UHloTnhwdStXanFMNEVsbW1kTHRZSU9jMlgrM09kVkxzSnIyREYyakp3cmt6RzZ0MWJPSXlwZXZ4azUwaUd0Zjk5Y1k5enBMTjFKci9kRUkyODRUamwyczNCM1JEZHhhM1lvTGRSV2FnSmUrVHArbmM1dTAxU2x5QXV6Q29RN3NWcG1HRkN5MWRlMkI1c05LRUZ6Y1Nsbmw0VGlncWJmcms4THdMQzQ0VzdVTlA5elk4dFRKaEtPaldoV2szanpieEJZTG1WbEtRS0dsbkVRL3NhT3haaXFicVozTEozTmRrZWdMclRvaXNGdTQxYlVjdDJrak1uK1JWL2FqaC9UL2dqNEpzUlFWMlJNREQvRTVDM2xoTDY5dEdMR1l3Rlh1M0VJM0lYdm5FT0RydmU0L2RYZHBPM2VlbzgvMkxoTFRRSEFqTDlET01CYm1OaTZwQVpuSmI2L3VOQllnSDhHeTJVY0VTQVU2ZG1Xamd3TWpkbWRyeWRUN2Y2bTBBeG5WV3ZjbVM4eWhrTEdJSHZQSDlybkhqK1pXbVY4aVM1WGlLYnBWT2V1YjFNd1ZZVk1VQzk0SnZlUXgrWk1UcDJhclZVektnZzhIZ2ViSVZlRTVQS1ZmN1Y4U1NQeHY1cXpqUGkxQXo0OTBjNkFYd1lwRjFnQ0MremhrU0VZSitJd0I1QWJWaTZ5L2k1bnN6OVZDRVBaVGdYZHVFbEdzVyt0Z0NVSTI0am42ZEF3UG1SWnhUNWZnVHZxdUVJWTRpRUZsQzBsbVBhMFlLYmF2RGw4dnJWUTNDelE0QWtEUUlSdnpXWm9uckJmYm1oZEVvc3hqN0t5L0lyektRUGoydVNGbXgzRENqZDdmUmFEaG1GOGJ2RVVpVGJaOHBjR2lQRUYzNXl6ai9CKzZNZ0NwNXZKYVF1cjg2SWgxWEYzYmZETTZLWEEyL0pQdDR3bytSRkF0L0w5KzJIWTRDTWhaREFTTll0dVc4cE1EclduL0RxS2paeWkyZjVpRkRsQ0VXZjN6STRocVJtY2RydDE4ekZtMEZjWVRUdjB3c1J0RlplRm5ZVUQ1MnhkaFpoanZiVmJvc05FU2lWY0h4ek1DSnl0d1NFdTBZdzF0M202eTRtdTNpOGt5OStWbTFqZFVERjQrb3VncGlESXNST1Jsd1plUHdXcEtRVGEwYWJXM2s3dXRVdFk4Q3QwQWFWMnZHd1o0ZkxWV3p4RDk3ZVR2dHU3blVMVUNDc2dkSU45UktzRmJnQTlUY0c3bE9tSzVrNW1TWHNaVExWYVI1WnhpTmpLMGYwT0xETXI5SVYzYzlKUVV2K0IwaFZsYTBkSFI1Ykxab3NMNnpUOTcvQVpLTjhYb292eUFtY2ZQb2k5bG1hTXh6eXE1NTJaeWFmbWIvRkEvTmZVSnVQbXZaUWhYSFRtVVBSM2RaTWd4dVc0NFBOMFZ4SkJheFF0bWJiUkZGRDVsU09oNnlLSk5rOTYvSTNGQnlJYk1rZEI4Qit6VU02RWZoaVF0eEtVdS9qTStIYW9GMHRIS0RSbFVZbnFhR2pqc01IcFBrekpxeEUyYXFtYVdiMTVoZHZNSERkZzMzaEtDcUhZSTNIWkZ2NFNVcy9DZkFyV21OblByQ3pMT2lHZEF2a0UyZk1iZUx0dGQyTlluSXU4K3BPWnhpdHRPL25ycTdnUzFWV2FMWDZzeEszSFhwb285b01YN1V2dDNJRHNnQXRpbys5eEpNVDA0WFg2SlJFVjV5YnpIZS8zcXlxMVM5bWtyZGpodVNaNmxqUHBoUW5DYmszZkFLa0grMkVYd0pYZ1E5ME1qWXdHOGl0aVg3dGVka2JjT2ZGa2E5eUxHU0dzbTIzM2p4aGRHSlE2Q29aaDlBRkQrZzh6QTE1eXc5YkpCdFUvUjRZZ3hlc09YZG1tM0NYR2Z5cjRhYlV4NnJWQWlHU0hJKzBEa1dMODBIcVhsRXNnTVd4RlNaQ3Frdm82R0l5UDQ4NE4vSDJ2OFhFVEoxcHdXZzVKNmtjdGdPTlZYVUdtR1N6SVhGeDkyZW1wN29ncDVRNm1URitaTmFUSndrbml2ZTJSeUVicFZVcTB6cHdNaGF1dTFqbVp1S3dSclE0b0gyOFIxa0hZYzloU1VyMzJNU3NUNGExK21Ca3gzcXBmendjSWM0b3FEektOd2ZaZzd3L2hpQlZ0MzZKci9qaTdndHZ2YVo4SG1DZ3F6andpRzNqNFY1d1FGT1lJVDh6RjkvWmY5VlNzWWl5MDZPQ05nN0dRSDJqZE9hUXpmaFl4b3d2MExNNXVxK015dnBRN09vbFJkd29ESlZ2ZUN5Qm1WalpMa0pNUm9ZYzAxRVNSbTd5VTMwZmNBdUtaQ2l0WjlTOHdvK1Nveis3Q1AvZkV3VzRDdUU3UFZ6RGE0bmwzMDBkRW1zY0t5Nm8wR0xlRytYOExLSkRva0hmMW9OUUNpQVBsdzg4Y3E5WDg3RnJnV3JIYVNGdmxnV2RTWDJyN0tKVTFGNXZ4a25uK1dDK0ZVZ3loUkYyWnp3OVdzMUVNVWU5TkVmUmE4Wm5JZFUxYjl6WWFqU3Y4eWpzWktCTEdEbUJYMkd0Qm5WY1BCUzhiU2tzUzZDWWFTWGRGQmdWOWxxZ28wMHUyQmtIbmFIR3ZKYjhsVzFtRko5NGtRamVLbXdlcVJTdWVIOXp0WjAzMnZkNHBtVURDbFZBcms2aURtaWpyUitacTlITVBHWDdWelRhanVhSW5QUkVNc2ZvREhJb0xOekVCSUMxMjJWRkpPWllWUWlpSTlTN0dHNUJpNHF0NkJrMXcwaS9DOER3R2JlOEZrRWhjTHQ4c2lqU2sxU0hMbzh0d0l1TUZCdVJzV2ZKalA0STh2aitCeHBCRUFMekFDVm9FUkZUWllJRncyZ29qZ2pyOVlTOGlsMk5vNG4rTHJsYXkyUDViYU4zc3EzQjNJU1UrOHhPMGFaVmpzSVJ2Vk5DTDNnN09ySG1xWXAzS3UrQ0hnTkVXNnlWL1ZRbVB0ZzJWenZRRUNYRFlNN3A1SnVnekhrMjZxSFBTQ3FyNm1vWG82L0owa0srUzFMdEVOYmlyaHA5TElaVXdiTWlaV25jbUp1VU1jTURhaEY5SjlDdHdsK09yRTVPU2hpOUovUTdmOUM0dXY3SS9qdURlNU9FTTVMTXVnclAycFdnYUI4bWdidVl4bU1SZGlLUUNESzI3cWNaQU1IczVnTkxkcjZQQU15dnBVdEhqWkdHaGl1cVBMQlJXWTg1MVZ6K01TUDJZdTVaV2J5WGdLVWJhQ1BueVJ6OER6MDRDN1c1cWdjazBjZVVnQWZJQkY1QkYwWTRCUnNiNjh0dVd4bXc0MS93b0NIUFNGTGM0cDdnNlVqRWVTR2NDVDBFVjJjZ09URzhWaTFCdlVOR0tNeHczVE1xVU5tTU11NG5OYnRxeE1IRHJwRGVpZ3NFeU1kNG5CMDFHSkRYc1EvTm1tcHd6SDZiQm1XY2ZZZ2h5U1RxUXlVUWxOWm9Bd2VzcVJCbnM5TTlDYUJONHlCc2lyRlZsVElMTW56UXQxeHVzbUFkRW1jSVVEclVWRFZtUGZabzQ4ODZ1YXBTQUQrLzNBVTZzOEUvSGNlTm82Mk0rcU5BcmEzZ3k4WDZwZjlRU2kxMFQxNXQ2UENSV2hIcEI1Qi94Z0ttOXNmTWd6d3FrTnFqRzl3Rjg4YU1VbUNQaFBTNWw3b0RGdkNPb3BnWjhoNEZvWmgxZTBOV3JRbU90Nk14dDl3K2doWWV4RkJLY2FlNEN0SFhHdW9zYk9kZm5sK0tzZE1FUGxacUpDSXYxYjdqQy9WNjBEUVVzdlBMYXRRUSt0ME1Hak1TdVVaY081dHZSbjJQdGFadG9TNjMvQWZBRitmSnRBdzBtdGp4WHJwV0x6b0RjRkVPS1NVRkRZOEFyR21EQ2NjU0Q4SHUrVDgwclBlMTd6RUFQaWN2TlhxL1N1ODZCZ2RVcHVzcGUrd1RqSnpLOWoydkNLNTFINjRVU1d6bFBCcThsYzlISGRaSVkwa2wwZDhURjFxaWVnZlZRL1B6SjdBQnJZbVgzMGhzRS9kcUQzQmdMMU9FVWEzQk13eFpJTWJSR1hKOEgrckVlS0pYT2J6cTdqTzdUcEFBOGo0UjNOdHJXSDZJT0drUnlMNklZd3F0Y0tSK3p2aFdUY2ltVkx5UGcxRjdUYTZwVmhTR1ZsU2I4bElXaFRnOWdzeVJQSVMybi83ZFhiTjdXV1hGQ1hWUlJMTWVKM1h0cTQ4V2U3NlVoSGNLbVpZRXhqSkZnRDNxRE1uK3NpOEt4UUxLY2tvcjhseUlEQUpSNDJPWDZmR3VsQ2wxK0Uya3lFM1lKd3owQnVwRzFJV1pGaGxIVE91VWZadzRFTWNCeEgrWE1TMUZIdjRib0VEU2pvV3IzTGNtRlJHd0FTMW02T1VUQlJucWVpYTcwM1AyTjRuSk9rb0lwbEcwWEhzSTNGTk5oZWh2c2REU21ZM3YrMENjTDlWRWtqV2kwOFY5ZUkzYTJxb0R0b2pPbkI3UHJ4aHR0UmIxRTVmMmIvSWhBZ29ybVlaOUdkKzNlNGtja3J5YnR0NTNzM2xRSjdKcVNWOUFnblZRMjlDRUdFaEh4VEppeEhOcFU0UmNvRDBxUW95cFRGNXlPM1dtSWFUcGlqbGxvNS9zbXM1OWdTTU5mZ0xDNitVWFdibEhDVjhPR3FJcUQweXRvN3ZONEhiMXRnMENIOUlZZDk5OGZxNUdxRXkyc0l6NWxZT2VjTlRJNmJSWDVBTHZLWHliUkRZNFBUN1ZET3p0K2tEMlIza1JCYjhEampPZzlISitlNDhXRXRJYktKb1EvZlA2Y2sxZmY1aGl0M0k1b0dMczZLNFhtTzJNeUVZYVNCMkdsdnRhWU9NdzBBdGlSOXEwcm5uZE85RWJKdnhCcnV2T3Z6OHpBNmZlc0hiVzk3UkJ1OU53TWh4WlpuUEhaR0NCalU0bjFwNWNxcW04SzJ0a1ZHWkFHU0phTHBtTGtINWtJV1hkZWZOL1U3WG44OWdKZnRRZnhPRUs3SllwamQvRkVuMnlCSnlqSi8rMnQxVE1ENmZVeFo2a3o3SUtkbVdmbE5OL3l4MEZHRTk2M2lOZTFPQVEwaTRHL20zUEttd1dQNnMyQkkvR1lJdTZVSTU5bjJyeS9wSHRORmNkd0o1VmNOb2V5SmlxemVxU1doaFZrVDdLTUFITjRTR2RaZzIyNlpuYWtsUWxHUE1NbkxoZGJMU1E3WTIzTTh6ZnhVNEZySDNJdnZhdTFaTFRhdEo1TmVWT3I2cU84ZHNNRzd0OHA4MzJiU0dqSUpEaEdKWjc4OUIzbjdzQWdrc2E2b1ZxTFQ3OHdTMjBCQm85TmRqT2hSRzF4SWpGa0svOXNRMU9NVkJFNkN5aDExeUlXMGdTY2pOOTcxZUhEU1RTRDlWN25nYzNjVTB1T3U0bEpQUDBtQXZoNi93N2tZSTZ3WHFLZjhITUs0Mjk5OS9OWjN2Y3BFV2FTeGhicHdYQlBKOExMWm53RWI3eGM5TXZKME5RK0lKcnhJMHhpNVdXN21KdUZLRC8zeHlBb2Q1Rmg2VUpIZ09NdFJzNmZhNzdXNkZ6Q29GQjdmNUZlZ2UzZHhQS2RUMEIvZ2lxS2cwMmU2QzBTTkRJdkpybnNOTmZVOUR5OWp1ZzBIOUFlSWx1ekdvY0R4cVRENlQxT2tPL3dyaXltTS9oemFKeGpuaTNlUUViRjlhczZYVGtKdkRGL0prRnFwQzlIeG54WnBDWGNHODJsYkpsZ01kYXY0R3NiRDRQd3RkUVhiL1h5d283bHBqTUZJVFh5NUpvU3djZFJRalR5VVJ5Mys3czJkS3B2WFFZQnZwbUQ5VGgvazM1elFUakQ1ZmNnU1V3Smc2MzdDNzBQbE5weTh6WUdwc2c4WXNNdmNJNXA5L05RcUFlZWxYMi9lL1pERWlZQ0psVVNqTjQ4WXdoRkpQWmhoWVp4RGJOMndRTHBJU2t3OTZDVWh2eWQ3WmVRV3RITXJaRVhrZVlzRFJPc1k5QWxQNUlKR3drNE80ekVoVWYwVElDYWdtQnNSdHBrN1JZcjBJZ0h5bHRPejk3KzZtdmZkQnBsRHY1NmtVdmtiMlB0SVRLVS9yeDRZalRHaWJwek1nMloxaFNKZWdYcmpMZ3BJWit5bVhLNFFVMGdKVWs3bDBvVXU4NWdUeFBrVjVjdVlodms5amR6dHQ2QXhvejBRcFhvQzNMdDVkaEhHSE16WWlUM1E5OGRYWWdxaVlHYlBDQVMwQVB6K1JDdWlTTU5FVW5VLzhrOHJUZnA4TnJ0R2dENUtSdkduOVo3TVV0V0JjeUlPQVBEWW1WeklOemdlSlVuMTNoQjFFMTR0dk9FeS83R1loaVcycGEzVTZDTzdXVXA4RGk1azY4bnJrcVQ0TVBGWjFDMjIrYk41VTBxVldIY2gxVndWZlZ1akVvN3pURFFTNEVtYmpHT2FBRjF5Q29xLzhlYktZWEhNL2Fyb25YSWlncHhqYUE0TFFKUE1DVzJKN05VemNCQmhUTEF5ZUNjejMyb1k5TXQyVHlVYjBoNkpFQXd0VlZ4MUVWTGpqNDdITU5UWlVobGVvcXZMTk5rK2Yxb3JFL0p0TnE4YlFETnNPZDJiZGhVRldtbXJGcjkvaE92eWhudDFPcWpnYTdVeGFYSUszUHJwS3gyNDhBekYxZXh6blZtd0hqTnVqd3BQZ29oalVIOEhKaldFTndLTk9jVXFKOUZ0VjdzN2xkWm54TUZqQmVSZDAvVG5mQ1BSdGtHOFc0U0xOREdETlRCYUkzQ29KZDdKZjFyZXpEYzlmM0pBRkVnMjk5cHBMWitaTWZiK3N2TlI3WnJPUTR5eVIrQ25ySkpvcTVmQkxJc29aVjZtRDFRY09hVWc5cnRRL1lqUnZnN3ZBdklsOEJFMVBEQllZeHhLK0J1bVhiNXdsQmJOMWg4Q3ozOEZxcXMvSzd0MFp0U2dkZFZxVW9KZmt2RG8ySzU1c0xNTzkwYXBqZ0p4KzEvSjM4dGlhTFAyN3BvNXg0amJnVW9mU2svOUFrdVNNaXoyekVIRSswMWJFTHc1RHFteTJOVWQ0R3Mrb1Fqa0ZCNG1JZ3RONVZCRGw2dEV4KzRzNU0wMWdDeFk0MVpsRVNyakYwdjlPMUhuM0VteXc3ZEM1eVprQmNoK0I5Ynp0WDRqWGVDSFljbFZsSEhkb0luSTRKbXNXRnM0S2g0dzhUUkFlTG8rY0J2TkZKelZEMi9zN0VHWkMxaEthblpVN2xnMXNFZ1pVcEo0L01Ba2lSeTI5eGVpUUkzdnpCb3FQR3hrVEpqZzcxbDVOL3JTQnQvZWMwTWRuV240dVE1VnpXRndhUVU1RWhJaHR1Y3V0SDAyZVJoNFJEQXpZVkxhUDFMbWViOWNnLzIzU0RLMWZ6Wlhqa0wvY2VkV1dtL1l6TlBNd3pwc01hSzVtQk01Q1FVanJaelJYdStWTU45anBuTU9ISzFRQ3NsRE5mejNGWHhJalRlSE9BZDB1dkVnQzdZb2oySlo1b1BFaHZNSmZuWXgyMWVIWWRaTVZQUU1nK0RHSXpZR3dSZStTbTN1bGJVS2JLakF0MFM5WGg4SHJGSTUxWWZ6Rno0WUNCamRjY1ExS2hOaDFGMG1DZHdXL1ZlSmxZQVRTUkZKS0pKQXN4L2RkVmo3VjU5OXhCQ1lmdUZRcEtLdzdmVmFUWmZVeE5VV3k1ZUZXMkN4bFl2SmNUNTNlTk0zY1hOdGZBbUR6MmZ5cEc2SHAvWmVSYjNJNTNNOEtWUndhdUYrUlhid05YNFllSS82bWxmNEFHT01QUDZJZmhxSUk1WFEwaXhlU001MWt1NlJEK1ZZRU95S1JWemN4dkR3Z0xMRDhBbWpYV2JSenVzRVlDYlJWOVRsYVd0YVk0T2IvU05LSGREVjYzSEs5cXJxekFPaEdkY3JOTkZGci9XbWdRWTBwVUlVd050UUNsL3FMWk9vZmpMdWNVSEJxSzNYRmgwcG9QMHZkN05OdGtqdTVZSU9TZWtVc2hJVGNiZ2w0TEkydys1ZHlSTXhtS1lqVXR0SzNicDZZZ29PeHJrNjFnVXE4MFRUK3BkRFhFWjgrWEZZb3pPMjFVbVRadzNIdmZmQ2VXZjRzWk5SL0t4NUx1aUZHQTdiY2xJUXVWcFpYOVVEbTFXazdSVFJUVXdLa1lhYVYyY3pleGxxcStkVDh1S3FnSjhoeTFwbURMSDRiZzE1dVdhQWpVcXJJNGNHL1NERkgzUHdKeEozUlJweVhqODJPcVM3VlRHaTIvSkgvVW5rU1hOM09GR2lMTVk4aWJxOVJ0bHUxYThxRW5nZHZEbGRCU0EvUUJibk84RkY2a3YwQzNUM2tVMEFsM3ZqNW5hZjFtOURTT2F3eUZDM1JLTG1KZUI1VUo0QzhzV2VOdmdlQmo2dWN2MmtXL0Z6RG9MbEVSUVlIQVREdHJScndTSzdSbzA0SUoyWlg4S0Z0bjUxUzlrN3pZbW5SZWVrekFFK3l0N1c0VCt6MFlEMDgxWE45Z3J5VXZDNzhjQnBJZ3pDSFFadjA5Mm9iRTRMSEFxdVdQMmx4bENycDJ0NXpjTll5dWVjOEdGUEJhRjV1elk2c29IVnQ5RFNIYXl3S1NGTS9uL0c0TGo4UUlHNExTY3p1aFJDRUR1akRuVVpqWW1yMVNCSURkMzU2RWFabG5YaFZ5cE1SZDBZWUNaWTc1TW1wVzBIdmZtYUs4eERWUytscVhvSkhwa0hicy9TWXhQdFh3TWV6SWJodzhyOGIyd3JBUXpjd3h0eWl2UkhzVzVVOWx5SGJkSVBsOUEyWlZuLzE3OVV3V3FLYlRSbFRYT2laSlZLYTQ0bUVidERYa05Idm1XdnE2bndnU1FCTTBpeDhuQVkxMUoycVJYKzduSFlkK1pNN3l2VktVditBOWI0czNpaGcvTFhWZXd4alNDM3owb0dmY2tkVDRyZ0Q0Nm1QbTk1dXdRWkdmREMwV0JyUjVmYzJQbmxkTzFNQmdEOTBSQmhUdHFBUDg4dGViT0Raa1g5NzVxa21OeUR5TVY3NE5yeU1RT29OVW92SFdWd0lDZk1takR4Z0RrZGtDMUxMUjlBWUxNeGZQMXVRUC84QzNUbEx1RnZ2emNYMDhETzBmRVJIaVdNUkJ6TUZvdW45UHVzNXlQTU9DVkRSRVJsS2ljOHZKWnFpb3JyaXcweGx4RTEySm9XeUJHU2dyZWtId1J6UE5STVVlVTRaaCsxWXA4b2lQTjRGbnRmeWhhN3FLU0xnK08wTGh1eXNOV01zZnErcmlvZjFvNHl1REpXZ3J0L2JZYTduTnVjaGQ2dnppcktReS9oVGZ3eCsyaDY4U0Q1VDd0R2htS1I0QUVFRVV6Z3dxeUJGYXY4dHNTTGQ2WlZTTXR5V0wzRm5wSGEvMElsdzRFWXd2ekFZVmJHenJkQ2pqTHdaY3p1Yzk4K1ZjT1NqaGd6YnB4UDBQTUp4TUIyV0xnUjRWWTl4UmRVblpaVEV5bVpsWit3WjVvdHNMZHBmRVMrWlBYSzRiKzQ0dkxIVk9NK28wNWFzZHVZd2RGR1JYdy9RandsT2dYc1d6b1U0b3RyZ0dBVk9ZVkRrSGZ0bEsra1FheEJwd2swVXU5UUpEdWZkWml2RHphcFBUS2IrcnJsc056WTNJZjhBT3hYRWovUTJiQitMUXRUL0c2OURLV3ZjVndlN1JtVWZOZFRPUGg2M3h0dmZ3SzVoUXg0WVgvUDhQc3Q1RzVab0pqQnZlazFwRzE0a2JsR3hUY0Nzb2xBWExPbVp3aTNjd25YM0R3alFGV1B4cEphdGRETFU0bFBCNnRlN1pCTmZFOWtXUktSaHJKSFZCdWNtaDArTmdWRDZHdzlveG9jOExNV1RIY3ZSTXJPNXRyVEtGb0VFa2gzZzNkOCt1M25tTHplSmlpVWFMMG1nSjFlSkZCMGJ1aHJKZDJnTGNwV3dDM2FVQU54ZFp4SW1LdWNMNTV1K2ZWai9IUjBud3ZIbnd1ckljMEdJVEFjcG42N1hXak1xK0k0bDlEbllHOUdzTlpsdlcyaWZnVFRZNHFpN0dGYjdQdyt1akNnRnE0Tmg3YzNuQlI4V2cyeXdPVDJTeWZvYkQyR2dhRnI2VFZBS3QrWkRncjdlT1dHVFhtT2NJa29xZGs2cjE2T0tLWXJUSHUyM1g1SE0zY04rRFBESjVlSFJlRmQ0ZVJDVm1mZHBvdlpaTUNJL25uWS85VWpoUnV0T1VZTWtJRFBmMFZpc1lnd3Q4cnpRa1dGd2wzZTV3UnJoL3gwMExCT1F0MWV0QjlPR01PKzJmZXdLRDA4WGpYMkc0ck4rWWg0aWhpU2txZ0dYQ3A0S0UvUVd1MlZxSWs5MklMY05veUcxRGNFSlFjZ2RRVVMzc3VsR2s1RG5DTXBObkM2Snl6QUtrRUY3ZHZCanVGTGdWM1F1dE9jOGptTzZIcVNsditpWDdTLzNQMEZLc1NaU09lRGx0TVhXUWRneW91elZ1cSt2cUxUOFBOK2RqZ2JBVzl1ZXRCTnBYVll3ajByTzVoREFveEIxdW1abkdEMkVwcjloY2p5YVpodVVuMWVYaTZDZHY2Z1JnazFFRzJFdENnV094T3VoN2UrQ3R2VlUybVp5T1FPQm1uNjhmMmo4WklSTlRyNGY0OGxJNFpxUkp5Y2VIbXl6amp4TmphV2FPWGFQZVAxZ1dqVzRvRUpZcnJESFV3SGFMWkU1NVNnV3VsKzZ5cU40Y2NKV2ZoOXVsT25Nb3Y3UHU0UmwxL01KUUF3OTBWcnp4cWRTdjl4ZW0wUUZ0Z0dzNVBRSDFCRmNIMEVSZ1dzN25HVVVLQlZXYkx5OG94cUtIY21DUm9WcDlYcUl5U2prV1VrM3hTUnkwS3JOZ0s1dDZsR1U2RGFvRUM5WFRjcDZnQ1ljd1RJcVZ4Y0E3aTRzQXRocGMxYkkvejBlWEVVc1B2TCsvUVI5cVhmRG5EOFdINTl0b09FTmJoSGl2TUI2b1J1VFI2eEcySEFiSUQwOXFkV0xRUmRCUi80a01UUXFlejArN3hSenVLaWpGZ3pBZHg2dUhDdGNKQmM1ZlRBZXdaU3pEZDl1YmU5RURkRWR5QitGMm5kUnJBaC9nVVVxdjlrNWhtSzZpWFp2dzZQb3V1NnFpM3RqdHR0NkRzZS9hazdjb2M5bFlWM1R3dkVsNGxCcFhSSERxN1pKWkZpa0tBcDFxWGV2L09QVkVxL2sremlLZVR3TGgvQWdDYzFhR3NsQ1B6eVc0SWs1aEJodXNjejN5ZUNPS2dsRTNrZnB3NkhEQmlLbnY1anhoTmd3cngrR3lYM1ZrQ00yUTZVeU1FUldJUW92d2F6OW80dktOWG5TV2lRREdEaVVGVHFseUpRUUdURzdLU1N5b01wRytQekpHZWFDN1hqSnh5QjZVZ1MvcThRSTYvSjdVa0FzU1RzenhXeURGbzV5OVVoN0xzTDh2VnJNSFpESXBVdFRrUVkyRmZEQ3Z1eXNGZWs4ZS9zdFlhLysxUTdEazAwenVqNlBQU0M2aGxJM2J0QWpqUnhFbFFuQVkwMU9RMWNJV2ROR2RpQU9QMUVRdDJBYWthcmtLbHdNSnlBUW5CelNGaFp6eGpxemxhY2sxRnpiZ2VOcDUvakxsU0JYZDBJZFg4M0NsbG5XWndRcThuYnVncldQVUJBLzVLclF2L21RalcycFlSdkN6ZWtKb0FTbk1IWUlFUGdBUGpVVFQ1NlBkMlFZdUttOWRsVDlEVUN4TStQWWc0anh6dXVpK2FWWmRwVjhiSnp4cmx3cmtLOVBQWklwL0k0eHcwTkZleWpMTHpYR2dOVjZsQjBPcWZhSHNUWENDOFp6Qi84ZzBhQTZURnRBS2JTZ0RiUnJ1cWd2Yy9aVUdkbjdjMVQ5RG85cGpWc3RvQllIeFpqQXVzYUxvWU1wY3UwRXdyN0x3N0FURlZPd2wxRVVrQ2lydEVBYXRXRC9hNHJvRXdnM29MM0xrWFI5akZ1bFc4czBlcW1tNUR0QnkwQmpFZHk3UnU3bE9PbDJqWjA1cWNzWFJyYVp0OVBKSnZkRjhHYjZPM3dOV2F4Snh1b3dqNkM5M1ZYYkNKcWlNTUswbUUrQWJOTVZhS29iNjlBNi9VRERDMWNZYzhHaWNYUDQ1aVh6dW10Y3lhSVpHbFJEY2ZLVE5yYzJpeExQazB2Y0daSlFZL1FYR2xYTnFIeGZudWRqY1hUczByWlZtQjMzeUtnalhreDZ5aFhpVzBzVm4xUHZlbU9KRnk4WXI1c0cyNXRybXZldWxWOXlQcGdicXNwZi8zTGxVeXIrY05taWJjaG5rVXR1WXgrNHE5OHpzellrVjdHelFWZllqVVFOcW94TlZCbHJyTExab0syU3RpbTFBdkovREpXNEUrOVIwUllEMnplS3hVWlY5MHFQOTVWcHlacTN2eldiQjBlRFQyZUpheTlmSi9OamxXcWtJdUZRK004RStxYVhEek9JVnY1QXhuWnRyR1ZERHZubXVFUFRUMFphZjZ2Zy93ajN4R1hQUVVkNjM0UkgxV2VZU21senRnZVN2VHNzcjRSWVZIdkgxMjBWQWxaQ1U0L0h6bDRyVkpGaU14RGxlYUhJWnRISUNwUXhXQWJqZzVqdUFNejVYVmlkWm5DZG9VM2dYM3Fxb0Y3Vkd1cjJnWmk3UDFjaWFZZlJKaktBcERTM2xFQVF5WWtQUkNvMU01aCtUMDVNYWt6UjhQTHM2MTY2dUJCWVNoWlEwaFpmV3RFZ2xHak1KTkU0U3BnejluZ0hjcVd6d3lIMEtPN3I0WEJKSE9RVGUydExFdWEydFJYY0hTMXBHdWRsVjYrQ1FIVGNJVDZ4dkp0dWNPRlJ3U3BGYkcwbWE1K1dKNXEvVzdHbnFvUWhGR0tMaXRteDhYaWtxd2luVmd3Skp6U3dBNnkyUk95SVFRV1dVU1l5bmJSdW5JUVZ4RlBJTTFHWWprUzRPTkVka0MrVHpWT3dZT05lSHpHSkFtOGMwK2tFZ3MvaXBvM3BXcTVyVzljMEV1amtWR1RpWVI3ZDhEWktnNjJZU3hjL0wrRWF1cDVKWFJuN2J6ZDMxSXA4WmpzcTZMNzlYa0lMQ1U4aUI0NkV3NzhPekQ2UzJ0TitiRUV4RlF5UE42K2FoTWFFenFJd1IyUDZtbzdZYlVnbWk4M25jUmMxbjNQQXNVYkE3Z0g5U3ZPVG9LaHJWUDhob2FRa0I4NFZTN3N1azRSNm9ETHpXSFdVc0JXY0hvR3BhVUdTRmpucGdrbkxEd0hFcDRQcjBLemZtK3lRVEMwMllLRkxnaWVmVjdRM2lwMHRja0xJRHhDVUZoVGUwY2FiU3h3cXlWMHBHZWdNQStDSGpoQis0M2hUeDh4dElEUVNEeGdiTmJYMVFnd0xZclVtNDhRdFkvM29LV1Z1d0dsMDRqVDV5bDFiRVlzWFRvZ0FaZWtjRGJPYkpQb28zbEFNOUhtWXdSaVRCbXpsVzFxcjVNSy9lM3h0WVQ0ZHQ2Y3BFbDFxR0lBR3QrVVVsek1lczVqcDVnV1lzMkdYZW5HZnJQaE1ub2V5OFRDeTM4alYvWGFqWWc4SytER0tXUFJMbjZYRmt0d2VicG45NkxheXpvU09yODNLdGpiL0lWQmtRQTRYMk84c016S2VJcFRLNkNuajhiU1ROMUIyZWY1cC93M3ZYVjliaG4vOFN1RVMwWUwvRDdqT1dxUXVSRk9hakVFc01rUWNnWnFFVGtDd3FPME1OMFBjT2I1Q2hsd1c2Sm5KMGU0cEpzTzFLM0NsSUk1VC9ramlPeUQrdkRqUEFjR1NCckZPbk1Ob2tmNWMyaHVPZmozRlBkbXJVS0Mybnd1NmFrN2dCL1pnRE9zekhKeWRBa3NiSGkrVWVadFd1NFFVU09qVmRhL0Q4UG1vNVBwdkxiUnJIdTN2U2R6cVUwcGRsZ2NYcGtVQzM5WGUzQlhlMlovMUo0R1ZtbDFUaGtIUUlmVTZqYjF4RlF1RzIxZHpDUWQvQ3p5Uk9na3dWbVlKdE9ZWWk3Q2xMUFZNTmpjcUsvOFZISFZ4MGNZa0dQaTdlMmwxeE03L0dpSlJWeHM4WlU3enNNZkpwajFpNUwwZXgyeEZzRHNUNU96UmRWNU9MNkdmaVdlSzg5WWswMjl1M05XQWxPNWQyT2d2eWZNa1prenRLV0txMUZ2QTY3M3BNa2V0eXMwYjQyb3FYazJhdUYyWE9Va0NmV01Sb0N5YVF4NmJuMmdKOWo1RFBabzNnME1sTzVtYTV3RTZBVnZrekF6U1RQUmlMTTdnTTYzVVVYYkt0T3VoZEZmWVJDbWYxVnFKZUY5WHhYTkJPSUlwOVdaMUdmT0pmbyttZ3A0MTNFVi8rM3BJajVGSUErOS9PRFB2MkxtUTRvSkxvakYwOHFNVGh5cjk3SUQvU1B4S2FMa1AvSXl0eEYxVlNFYkhUOUV1RmxKZ0paVzRIMEZvY1ZtTHdmd2JkN2Q1YW95K0Z2bU5kUklkSUs0aU1Dbjh1U1lFNEVMSitNekRFc05VMzI3eFFuL3BCdjQ5bXk2ZytuWVY1aGg3VkxwVGprWUxXTks2My9seHdNWW1Xc1AxQmVGMno0d0lMM3RIQ3hmTkl4MHJCeVdFTFMxOXhRMkl6V25mTE1POXFSZ1l2b1g4b0NoaUVCME5IeC9xMjFCZGFvbFFMc0o1YjRWemNoV1BHeU5sTFErQzlkdUl4Y2NFQm1yR2kwSEJHNStrNEVOanZ6aS9ja0tCaXp5NGNCdFJpV2p3elBmTnBtamZ3SlNDd1E0c1BJNy9PSjFGTitEY3ovZStteUlZeWx5VVp3SDJvQys0VEdxVk5tMzUzYWpBWjRDcGxCUzN6aHJtdStyWjFlU0g4SUszUXlqWmNZS3BoOC9GVzd1eEYxZjg4YXhmS1pvUUZFTzI5RWxRNmx0TnlrNnVYWlgraTVwbEx6MVdoZXhZdCtIWkhzRnVNclFXWUJBNkxlaldramVGMHJWdFRQRHN6VTcvRnVBRDFEVGNxUkNSTHladDVwbWZKTDFLVlJwUzYvYzZsQnp6eGFSSU9iMDVhSlpvU0JqSVZ1N0U0REQ2UlpyZWtDcGpFZkl4YlNuVUVHMFdKdWZEV3duajNhUUhCMzNvaTFoMkZHZ2Q3Sjkvb3dwR2l3RXhGTVRsTmJLdHFpNHlnazRqMzQvUmEyVitlZHUyL1pKUmVWSWpuWHpRMXdSUEFKYWxTTmN1UFRZRkhqZ3lYdjhMK21naTVnRXJXcFRIV0hScSs0b2dwSm82K2NENjJKSjQwSmkvNnlURERpTUlpd3dmUTFzMHlvTlRlbklIYVRob3dqazBrbThLQW1mVnB4T01iMXdDdHhCTmRjU3J4dnNhWjRJSG96WWxLUEs4Tit1Nm5KeXYwNFpTY3RSRUF1bGYvS1JZUFFNZVowRDFGamZmUjhUTzNHVkhtMnd5WlBEdFNvOHlaL1ZKZU1JeVRrNlludXE2Zm9sRmpHLzZ0cXl0c1FWTU9kY0pFR0tpTVhTNjZacFhDR2xTdnM1aTl6eG9zSGZib1BNNngwbzlwcTlDdlh0VkV2UHlrUUc0S2REWHdJd3dxTEtFdCttbC96aWZTSlhwN1g4Y0YydGVWVGN4T3VmSFg1eFpNMXpJcm5ZVWtzRm44cXR4b1Ywa2lmZEdINEIwNEVGaEtyQ1RmejgveVo2TnZKZkVDd0V5UHJpb3lQbnZ3L0w0VHRCK3ZXckhlaUdnNGZSYkJSaFk5UDh3Nzl4V0pqdEZWUHVFZWI5OG44bWg0STR6d2JIS25pNU9TbmVxaFRrOVk4TFYwbEVKWHBhbXczVGplb0NFRDYyTFZtdEFkTFpWMlBjT2tZS0VReG12RHZ1RGVuWDBKbW5nV3p1S0t3M1RKS1ZsNmFpbU5WL2xjbjR1d2dla2xzdnE4NXRFUmJzc0NMRFIvajFLRXZNdlZkUXNDTGJaemRzOXhFY0tLLzlEdlNnTWpMYkF3U3RVM1dlazVpY3R6SThoNFpXWDJRS1FlWElRWHN4QVdsUVBUVE1BdEVJN1MrTTBoREEyMWdZWHp2VUY5Zk9pbG5lL0QxQnRJenVqemEwUUl6TS9IaGVZYXZDTnFHaGtNa3NmYXVPZXZnRlk1WVo1WHA2bjIwVDl5N1NaYklKMk9Hbnd2ZzhwNTBmTElCR2t5ZnpVbG9MdFNEdUpZbGVtcEkrYTEvZThSeklobWI5Y05udzNIREVYaHlEbXpDRDh5VlQ5Rk9CRUtrY2V5MjdPelFab0hFakRRUDZrajdpakxRQjhZMFp4Nmk3N2YrbkE3WWNKcnBUNWZzTVhvWXphRjVZeE0zZ1c0cmRGV21VaEU4bTF5dXZSYStJaE5SS3lYZUQ1b3BwUkRBNE5IWnZOc2ZCMG9yV1pLbjd3a2tvTnI0Z3JPUWZoK3RQd21YMFRBaVJGY0tWNUl5QnFnZm1JZm05N29FSW9KREpyOXRBRndKSCtVWlJuL2s5L1Q4cloxYmdwUGtWU3NxOWtmK2g5aEpINFVlMENGeEFiWTRPZU9NV3RrVjVRaEJpTnNscnZPYWxZTit5WWxzbGx2U3pUc3VEOXpvRUhwczA0UjBJdm9XVjVqYndlQ3pETjdjbGJFdkVKK1JzR2pxOGQ5TDlWY3dUdzVmS2NIVEJnekhjak4xWjFvclAyRUlZTHdHTGIvWkJjQW1kZ25tVnVnQW5Sa0tWWS9VRlhKZ2dzZG1YSUozV2NON05ld1YzMmh5TFczS21KeWJOZTF5WkNSWXhSS2FXb2dVWElJVHhpeFhGU3hEQXE3Q3N0b2RweEJCYnlVRUVYSTBYVTRVRGx3ZzIxekcrUnlybWFuczVJWXRIN2JpNXNIQnlDYXZIT3d5YiszTUZSazFSUGplT0VYQjAwUUUvREtpcWxoWURScE85end5TmZ4OWN6SlZkTmNEbGJ5MTF6dVk3akJMMTRUVFIvZnJXVUhwMnJXczZyNXpNeFhWMlJiYVlQOC84Q0ZHd0hQTHljKy9SUS9ET2lhVnJkMFAyOXVTSGJOZ2JvQkMxTHFJZkpCQzFqa3IyeWNoYXUyam4vVVl0NlZKNlNMUDZoSDlidlFlUFBodGhaT3owNVFHTU9yU1lkOXByNE8zaXFYeUs5Nm1GU3ZibjkwZXkzNUtndVloYzh6VDdqd2tFNVJSRUNmSm1OME43NnZpNHNiZXJiMHhFUUpXQVVmb1IwQ3pUaHh0SklvYjFuRUkwWXhuN0xqNmlTV0QzakhobGxtemlNVTJOMm1rY3hVdzRHR2dYY0JKSzhiaDY0cFp6S0hMTVhzV2diYlRNRjFjekxQWkxDR1B2V3o0ZWxwQzVDUEtVMVA3d2VLRy9rT2F6U2szSUY0RVowc2gzWGdFbStJTXJtNXhnY3hsM1Y0T3d4QmoraXluQzRxQWpxMy9EWHpmZjF6RE1nS2Jydmk2MURvaitnVGFPNENncGZ5VHZwVGxKai9SMkdCWStqYlJGRlZhVjlIN2hMclZFNHJPLzl2VHZsRDY5dmxDZXBsYUFZbkluTjFUS0tpOC9YZTYvdDBvZ0VkMG5PNE9pQjBMR3YxT1BMRDhOWGdpMWRhSERSSGtwNU5XNDZmNytKWUJFNjBxbmVFZzJnS0hNV1lIamk2R0pWVGcxekVTckVYVkJjaDVWRVpJaVd3WjlxY2VSNVVkSTQyOTdGT09yOEZUaEZVZmVJM2JHVG85THYxOVJXZEZ3UXg5UHRTTkpkUk8rWnNOV3M0bEUydGY4NkRPRnJlT3FYVU0vNEk0UWtFYytyNVo5dFFVSWJEVXp2elNnSSs0anJ0KzNpS1pGRVZWWVRnWkhsZVp0SWI3a2pDd2FwU09MNno0RS9PRUQ0N1MvTWlmamwvMy9URGdqODZseERrYnVESHFPT1A5cFFzVkI3S0ZJemllUGJKUnVWRzRJc0x0eTh5TzZDL3B3bHpTaWRrV2RWc3Z0Q2NNMnFsOTRVSUxMeWxxTTNtOHNDQmozL1ZjSEZHYnVIVzRid1V3NW02c2UwdkR2MjdtMW11OThCMzIwRUpnU1h1WU5wVDJMR2NuVnRKcEZjYmtJRElWS1o1QmVhYktEdU51VXpnSWJ2b2NWVHNDWk1RQ0JNNWFVdEVSUDIvVloybHFvbXg5NTFtZHZ4NWtIK1ZiMEprUVdIVEtsbVBRS2lMbnJvb25MSmQvbWdqWVFYSlJTRHJ5ZGhQaDlXazdHMkJrb2ZoRlBYQmY0a2VzQWdhRlBET0Qwc1d3MnVGRVpwNzB2ekp6dnBIbGVuZ0doOWZVUkEySCs2NXVDVU04SDF2c1NZeW15Q2NjS0pKcm9pMm5ZYTI2UmZTbk8rS0lMZGYxVzhsbFJJMlgvOWJRMkE5ZDNuUGJTUVpDeFlpOStGVkpWbUFtOHZMdEpaWjRyZkYraHNsYW1zRGVRWi9OeExXQS9Da3VQa0xucXFZaWJPQzFJalNsRENkNldJUHl2elNqaUQ1dWtrSTFjNnJpYlpCbHppdUVRS01iWXpjTCtEdWl4VE1iZXBKLzQ4SDZxbndEQW9pV2dIYllQUm9Pb2s0M1diaUlLUUpTY0F1NVV1UC83M0Y1NWFXWU1MZTF6Vk5RWm9rTEYwYnBaZ0g3Z2huYkxIeERhcWVFSGdWSkpaZWl4ZE9XYXBmY2lrL2VzZkNiTEF6VTM0Qk1lcTQyYWVkOXYwWE53Znk4VmVBWkEvTlJ6TFBwOTYrMFIvd3BZYXppb2Y4VUEzZFVwZTRyWkUzN2VnZ3hja3BZblM3bWhrWEZBOUJXL0RZN1dONU92c1VIamJ0VC9Rb0dKL1RCUmFRRFVlcXZPa05yek5yUmJ4VVV6eUpEZlRpUmQzc00yUVR6ajRSSWxvVWo5VDVzeTdIZkIzcldOUHBjSFJZSVVpYTZVczIvMWlwOXFoSSs1RUZiMVFhbm8veS85ZzlmbExnTGhBN2x0cnV5a0NtWHlJcWJEWi9DY1pjb1hDdkVPNFJsRDYyWENZZ3V1d1J5a3lJUEU0TVhtQmlCT0NidTZkamFBVzJIN3dtbVRab0VyYmZaWndrWEdJM1FNQWV2eHllc01QNk9nUjhHWW1oeEE0SjJnWkN6amNEY0VmMXU1aVFoQmd6em9wYlc3MmRhQUgyWUtUTEtmdnJmaGluaGM5L0oySGprRENWM0Y5RGtodFQ4MjBrQ29OVFR2RGRkVHVWNktqSGNKUUxEdVlqejRUaUZjQmR4bEdEdTVPdGJ5aDMwdXR6QWQvU2VzRExNbkR5UkxmaDliZDdHdWR2TTY3YmFjcVVnU01RVENUQUdhcE9pWFJUUmVlY3RCUFhJQWlreFJ3T3V1ZzJTa2pNV0VRNGtHTVlQSi9ZSm41MHNHMW5GZXpEVUFzemh6dHMwczJpaXdLZWFtaTFpODExaWpWWjdVanJEdjEyRCthTk9FbzhBdGIrMXdXUElZODJvTXZYTENWTm5Id0U2VkRKM2pIYytsMGtvUGZqUWZEaVhrbFZGeVo4L2dBYTE5VmFTOEJJUHgxcjF4RGNuNUxYL0lvdUgrTlNNK004YkFuZlVncE8xUVA2d0dKK2pJNlFFQkg0YjVFTTNEREo4ak5rK2ZBTzd4aStvMmJsdWlWL2psaUdmcE9hRWNSZFFoR3RuUTFNRmxyaGlVK01kcjhYdG00TzN4UHV6ZTg4TWExelRFYW41dEx3UFhaK3plamRXMG9YUzdiTTFmTHNEcTFtTGRCWGlBNm1SemxwbzQ1YkxWQVdRaDkwZUFMQzB4bHZqSlkyQmNoRHdhcUlyUjRjRXRObXhxZ1pSdlIxcWNUbFZ0SlRMaTNxdjlsMmswNC8zbDd0ZmwrUk9INm5IUy9HalgwVE5qc3RveXNDdEZLWnNFamU5T0VuYjZScEN0YTl1NUVoSVlGU205K2hiK0hRalFTV1IvSkphcTBkRGtIOTRpbmQzUitDK2xTYTdnSWtzZ25FRFpZcWZ0WWk0eHVqM0wzTy9sVmtCRnhoK1JMMTZZTDRYSE9wM3BUTU4xckYvcHRZeTBnT2FIZitlYUw2Z1RqbkgrRU5GSzFIbVBzR2dWRGQvWDRISXFHbFozaDczREdrMWlUWXJyUDJQWSszc0Jwa2pHUXhYSEtFeWkxVWsrWkVGVG9TUEcraVNFV2VMVnJEWE92UjFyV2NtcjJ2OG1qd0RnK1lySEtBaVNEdFE1VkFjRkl0TnExQlpJVnRTQldGbVFEMkVoYVN5V3Yrb0VyV0Vpb3FGUnMzQjhubW9RS3d2RTlzYXlrdkZyaXk1NzE3ZFVlMlI4SmVxK1A0ZXdGNW9zcGpzVjRvazM2VWQweEE5dURaSVBFNGI4U0NkUThZNW51NEQvWm41VmF3OEdMa3U2MG1qUkExMkFhTzlyZm1MNUxQTzlQTTRLOG1UUjhBK1lWb2V4d2g5c2xFcExnTG44OHMzVXB1WThnbFpnNjV6cVVCRFRoQ3M3WDZoR2M2Zk14dDBpYi9kejhKY0wzQXJncGxzM1NHV21pOGFLNU96RWozOENjcEFXWVVjYVFCWTczVW16bTJPb1BiM0ZZMFAzWHZheWtOREYrcHNQaFlYMTdJdGs4WlRwU21aeFBqOUJsbWNScmJpQTJyWkZ1YmU4Vk9HK2FSS2xtTU1RUzdjTE94SVZrWFhYTUNMM24wQktsa3Z1THh0Um1lcFk3TFJ4aEc5VU1LQWwxRjN4L0FuQzM5aTloVllZaXk3ZUZqWGc0UkZzYnhwM1B0Zlc4eFFHaUFoYWhscVJncGd0VGtIR0lSWjY5ZGsrWnA2WDZtU3pEMmRuUkcvQXU0RXIxUmU1OXB4WkI2WThZUXF3RC9mVnZTcUUwcnoxUUk3TEg4M0ttbTg5eFFSTE9xSTRNSGNDeEVQQnVJZVorVXVOMEtjaWYxaUZ5cEhxdFdzVXdnTlYrekN6SnVOamNwN0VuU1lGcjk5UDI3d2dqd2pxYTFyS3VJMHVpWmJSUDRrMkhndWduSXUxYkoxY2FiTEVkRWhNRGVlSWRRWUdrUlJHV0VzMm9vZDZ2QTU2citpSVNQbS9sRnFheUFxeDQzaWs2emk1ZGU2TjhhR3djZmFKU3g4aFVtb0phTVlHQUVnYk9pclFERmI3NXpiYVBZZ28rcUxBc2MzdDhQMlFndE03RWE2MCtkYVdzMTlXMzhBem03cCtzdDkwUEVlcEhNNlJJdGZsYmRIdzVacE83OC95WEtMOGQ1SlZyd3o1TjhxRjQrVlVld2JSS1ZSendFZE5wTExHaHpjR1N0RFJnbWROdW00cVE5TGFmVGhhT0NmOXl3QWdvTVpnTjRTTU5haEUwWnlITTBhVDROS1N2OUJ2NkprYkU2ZFBTcy8rQUdZRXVZc25GTHFQMzh5V2p2eWRkQmY1cEpxOEhkYXZXbUpEWmY2UlJBTGlkRTNQYncvY3V6TUpYTGZWbVhpVHpUQUNGYWYzNitPUHgyWG5DZ3RYR3dHV0ZQRzlwMHErVU5FeHR6eHRONFU5QmRDdzJ4ZG94dzhmS21CMWo2Sk1ESW9YOGZqMWljWWFiemhwTkV6T3grQzFzL3dDZHZlQ2N4SWgvOTI5V0tRUFJNZ0VVNGhVZlBPTUs0YTlyZWFhVGNDMnZFckNkZnJiVExmVXFPeGQyUWdSYTIyVitwemFUbW55L1liNnVTUUlVbFB2YlBVZUM2UE1DTzAwMmhrZG5tcEhpTDNzYVpBdkdzUUZBb3VzMXQveGJuY0VXRnJrR1A1Z1FvenpSUFRGZlgrejJJakdRc1dCZ1F4VURhNzVkVmpiQmJvVW1OWGhxNlNGaFJiNjRqU1dTc21DT3llMDNvV25UQ28zK3FvSkZLdW9YMk1DUWJLb0o5YTNid01lZnJlM3AxWW9LWTVmckgxaFBkem9TSVlEc2NTc0Z2QnoycC9UU0FYQmhyN2FXMUtyakZzTDlRZjJvSUZhdE5YQ09YOUpvQ01aL2V1M1BlVTFhTjlzRThFMk85ZXVPejBFS0VwSnhtY3Z0eVJHVWRLNzl5YWwwNkZ0bm9jWWFzTzlrN2tSZjZFNDFlS2dnazJpbE9vaXZRWWt4MWZ6UjdWT1hkZk1yeThOaUgrM2NVaFVoOUlPVC9VZk1YY29YbG9LV2VzdkllSVE0YkFWcDF4bHd5QjB3VmMvckF1UTYrb0Rsd3VKaG5HSjJrMWhJOGw4T1g0bnFGdVJxSjJReW54MGgwSXd5dHZjZnQvUVdBRzRpOTIxSmU4Yk9wZ2VnRk5RcGVRWGJ3aENmTG5reTVrOXpRTVBPTENLWEpWd2NvZFRwSW1EQXh0L25WN0o2TTMrMXR5NGVIc2RwN2M2VFdpOUtLOXlvUGpHSzU1SXZqRGpTUXFuN3pNRmU1WEo3cEtTN1IvZkFwOHRSL2swU1BweThld0tmZ0E2NVFsaVJ1ak0rRW5wZXczZnZwUUYwM2FJbS9LdFE2aXhSbUdSUklQMjBBY1hqSTd2ZmdtQ0cxN21rTmZXV1lvaW1XQnM2V3R1MGpxQyszODZ1KzkySU5zTGFNaFJCQ0hmZXJsdGY0WkJYKy85NGRIM3dPOTR4M2dDVmM5bExkN3lmWC9VcTNGTHVhOW9RNHpjRnhSNzZSRUx5bW5jTVdDSFk0WUY2Q3lSaDhoZ2dTeDRWcnpQc0pWNUtaelBIOGZUOGxsc3FCRGpwN2NNdGk5emJ5UFdVbXN0MUx4UWRRdCtoNE1nbHplc3ZtbGhkc3BsTDdtdjB3RGFubmM4WFZmRzR5UEFRaXZpVkhkK0lHbTc2TFVsL3VjTnV0UTBkYkZWbCtONTl2bzA0YXY5SlpqR2RqR21XaGJjblZ2THNYTWkvTUxWaHoyemJFaVd5c2NPS0ZPOGVrejd4TmdSak82NUJYcFdJZTB3Sm1pRjNKMGpWN0RLNDE2aWZxZjg1L2hTQlNNSTVFZ2UyN21ZVXNlazZrbEMxeEgxN1ZkdGwyRFFLOXBwbEtDZkk2N0FlczlHYW1nbng1bS9ueFNid0pJSk1jcmdUU1lMNERvelFNelhwcW5uNkdKaUpvQWtVMm5tc0hoMnVkQzlrdnNvTmhqczM5bDRINjlVN1J5VXlNc3FDOURFWjhOR0FCTFJYQ3Q1aVZpTm4yZ0g1U096K0VtVG1UZXFmQWtEb0VWUExsQ2dMVjVRNVJmbEdZSndJWmd5OXFOa3NVeFgvTU5zVEZ0dUxwbytDbDB1Q09wZ01QZUFxS2tyQVhiNWpGLzg5ZTRVeTZLNDdCQzVCQmZXdjJSWGxaN2ZiNEZKTG9EMndzNzBNOUl2L0g4TFBRRFFtWnhWcS8wOUk3aDJWL3NzaWdzcndkblhIc3JHUStYcXhmYTlzdks3WWNBS0lYcEtGbk82UHhVM0hEUUxZTlE5OE4wczgvYnFtbm9McUJPTGdER0h3WGhHYmVLSnk4S2xjNVd2SnNFekFrV256c3JPWlJLNWZKMGl5OUxNWGo2MUlJczV1V0tzTDNaekdRcnFUV0NmQVNzL3p1VEpiZmNoNGo2Y0VBOENvS1RjVHJvTHlEQ0l0UTl3V1crVFdYU0ZJMmo3WU4zZlR0bVArYndGTDFkcU5zTzZZWDNVbHhJeWd5RUhkTTd4MFBSRDRkSmppVmZzUnZQd1hxYi9xYXJxMzNIZ0h4SzJweDZ5TDVFR2hNL1dsSXZiRXZsc0wxUERxelVLeVVrZmRjSEsvV092amN0QVFwblRRUVNGbU9CTmxpMFZocy9obUt6cjVyRkdYZEpmendiOFgyd01JNGRtQ0FaZmxSK05UbkVudFR2eUdpS0lGNmNJZUs2QzhFdTREbUVDUU0xMnZHSDAzU1VLM2pBbzZDaFFZbUlrMkFVRDR2QTBXS0pBelk3ME1GeGZJa3VBQ0Y5UmNYbUlaZG9ocGtiVzlHbCttVUZyRDZkdVcyakdDeFNVWStNUDAyeHpacTRSRjlQSURGUlNWcEplUDdCQzl0czlLTjFadXpIMVZ3SitUaEt1WVFoWEFIa1RVeUFZcGsrdktvNFVPZkNycDJzaTQrcEt5WGFQdUJ1Wkpib2c2YmlCL3dsMGUzZ0RTa0w1ZFBZb0RvdVpTSUdFbk5XZVJtN3ZYSmQyUldIRFE2Q0dDbjNOdTFCeEJ6YS9yVWh4VStkVTFabGozbXJiTEJsQ3NibWRVd09INStNUlUvVE5pU1oxbnBmQ1lvY0NRQ0xUbkxkUi9RVFlpdDBqRFNja2xLUmNvWUxmSm1Na05MeHFTNWdIOS9NVndKalhWN1MwM3dkZXJTcUQzUHdYMTI4UGhFakRIN2pVQ0VIem1XZEFvbzBWTE1sWnVYZnREUmViVFYwUzVNNk5yelZSdHRvMXRXa2YrUWcxQVB3b216bXdWUlAwell6YTA0eEpWbVFQN2Z4bEhtSitHZXBFY3lrYVFxVk9uUUZWQVduekpTYVA3S0FxNjlLMDZLc3hZVmJqRVY3ekd4NVp0OWVWWUJ3R3pHVjhydklvRUpxejBxMmNoY0lyTFZhMHA1Mjk0RnVtK2lHWHIxMXR1UFdvQVVCbzlhcFowQVRZTnBUcGQyQmN4ZTIzM05wamQ3MVY0N2tUdTVscWlBZ0QrWm9tWHBNNzNyTWhCaEJxTHg1ZUJna2VQaEZiM01BTFM3VC9IanJ0VnJsUkRaMU5EQmtpTWp5eGx6Nkd2ZHNCQytwVFFXTWVkNzZxMmJsMnVHMmVUV2VRMm1aZDE5YzVWUnpzQ3pZd0x3WFBPblN1R2N5MTRaUmUrdVdtSy9ZcS81dDNVaVpmMERkdHp0SW9uTVlYUHlZUURIZEMzT2h2ZXp1emZQQnJVSG1IUEdXc3g3YktWNklVaEl4Q08wRmNEbE0wbkVWOW9pQi9TYlFGZFN0eDJIK3h0Z0RmV1BMWW5hcTdIZ05VckhIeCs2MkROY2d3a0k0TkwvQnZuUGVrcTJ1SFRFWGR3NTQ2WDI0MnR6d0dMVkl2d2YrYzFvTEdpVExqakVYV0dRSkRnSFVFamxWdUhIWFRqVFdkTjVRYzdGNy9kZi9URXV0a1B0S0VzcE1xZ1BrTmNyb2lQc0FkUkZPeisxUXU1MzJ0eU5EazVFUUpIV2Y3Z1ozZVBnclNKUXBSN3hHQ1hWdUxyU2hLZTVXWHpJZ2pCdUM4Q2diM3BoY3NqWmQ3SEs5TCtGZHFZL3FxeGdyWkVnaGxzTXNKU0k1T1puRzlOSEVzOEtzWE92QWY3dUY5bk9UM0FUM1hHMW5GS3ZaV0pBOGYrRWUyb0tjdCtYZTdQTSsrUkFhdE1CSHphMmJPYTZrRzFiMXdrZFh6SjQvVG8wZDBpdGhoTTJBbEZxWWlkZFB4WkdDeitXVUF1dTFibUZOcmZ6RmxzOCtPeW1GKzFFTlVBaFNEcUUwOXlHTlpINGp5ZFN6MUFJZlhTM1pwZzZnYjFvTVdGd25sSDZ4dGRMc2NLVWMrc1JsYmtub0xHZEJ0M3FCdHo0b01PVEl5VHpHckVOK2N6YiswdGYvTGNPQ0syQWVZVDNHNEtvVGN1RzErRFRYUG1KVXcvMVBiYndyaUZ1eXJYNm53MWhWYU1idVFSWTRUNUVuTnJXRWd2TUVQZk44UDZuSHUyaG9aWmpsR1dSb2ZvUVJIR2VWTFhBb2dSZmhaSm9ocmpJQ2NkMVZwY1NnQWNpaVV0Rno0Y09kL0IvMHhzZVlEcVlMU01lcjRvRUdoUis0ZWVGRWNYSjg4b0ZUMHpxTE1DNVhPTk1vb2hhdCtNZ0FGaHlLaFlmMjZHMlBmcGx6VFRmVktONG0ySmUrUjFNOG91NnZRSmhncHUweGVjMWQyUTcwNVhPVFh2RTdyenl4Y3NVclR3M1dENHBvRlh1M3lzN3BUeTQxVzJBb09wZTJFYmpJVTg2RE9CUGhGaXExZzFDMTBDVm9Uc3JuQnBOWkVleFowNjV3ZmNxdWZxbDB2N2k0N1lVUzBIRXVLUFREVlArK2dqTExVRkVvNm1leHM5aTRWMWJRR1loeDNETUhiUG5jYzAxNVZFTFlxdWxqYUpQS0d4c2xvSlBpanV1ZXNmZ1g3WVZKY2tTbWJnZEJ4OWdwM0pEc05BZkpqSHVrS2xuTG5SbVhWMXZ4Z2o2RVQxanBKbHJ1TlpkZ2MzZTJ1clVkWXRyZ1VkM21lWmk4VFNSR1ZtM0VNdFhvTFFMckx3MXpqUmZUbUo0Q3pUTU94SEZtc2RvMHRwWVdMalVtQ2ErSi9EaGpSU0pVRWU0Y2twQkwvaU1TOVhFMlNaaVlpUG11dExBS3FmeVRtSXNlcGVzVk1kb3ozTUI4MTBXL01ZUTZsUFNzc3N2MHc3NjlacDZERGtiUnQzci9JL3BOY2tQR3lhTmt4cWZMQktuNHVQUGdQemNjM0hyMGNuQ1NqdXJScG1iODU0MmcyQ3RKSE5vS3pLMDI1TkVlb1hITkk2S2dLaWRJc3hWcllzS3kveGxEYmJSQjhaREs3L1lMY051VTNMV0s3Y2Y1M3Q4T05qWWJwQW9yaEo1c0g0QmliZTdiMDBpK1ZCdVZZRW1ndjNUS1Job1lraHlTL3kwZlNLKzMvNFNFWkN3OUtCbnl2QU9IL0pBdjI1d3U1UFA1WGlpbFZFZ01YTmhIOXlHQzhGSG1wSFpoaU55eitSN2sxOGN2NXhCRDdQeDVKWDN6bG9VWU5EV1VGV3V0SzVnUmJ3YUhRdi9KWll2K3F2Wnk5MVhieXdzcm12dXBvSU1EYnhySmhFbXNnRzBxMWlXTjFZaHErcnd3S0lZTG9qSy9TaXZZMkdsSm9NVnk2c01XbXo1RmhXdjRvb2VVTSthL00weVVZN0hCaWZRQkpOaDcxRW92bk5sU1ROTEtBa3ZiUWo0czYzNk5DK0NLckovR04xcDMyWjh0cUNpaTlGNDAveUQ3UGRHK0pOWDlvL25yVGdiUTZQUlZJMEFMN0RRUDdweTVMZ05NUk5jRFdlaUgvQ25HQ2JYSVA5RlhPVWdzOEJxKyswWEtnNGJPeVE5bjIwR1krZ2hycFE4VkxnUDFORG5wQjRkajAwVkdIZnNjTU5OblNwbnpGbkI1ZHFKdjg3QllkQVhNWVZoN0ZQRysyN09oMUplUk5GOXFkVmRlWVVaNXRHL3dyNHBFa3JIVy9lN0s3enNmdVFGL3lCNU8zVjhLb0RERHdWYkJ5a3RuT1A5ekRXSFYzbmRTcXEwdUtRcWk1MHUwa1V6QkdVTUhETzdueHM5OTM4ZkJiTFZqVmJRWEJwWVpTL2w5U3RiUG1CcXVSM2xScGZLSzgweGJSUDQ2dkk4eTRSc2xxRGFEZHpWNDVWZTRFeVpWQi9odWo0alFwdENac0hxMXdpbVNNUUtzWWFKQ2Y1WXBLNThUQ2RqRy9uTXdnbVdRcnFic0N6QTZ0ajJoN2hNQUJTaXRZZWJQTXZyQWtDTFR2cU1QNEZHNXRFdG92aHBtSFh2UzZjTjlJNlJFQnB5eXI5K05KRFVRc2djbUJ4OWFYeEdEUkMvVU85RWoveXlmaDJsayt6dDRhVndacW53N2RQMUVvcXdueS9GNTQwbm5tWjdTYWtDVmorVEhPYWhGYXF0Q0E4UEZRblBQV2l1RkxxcitocWhWaWx4aGIxNG84TTZNYTJEVFBaQ2l3emVYckdwb202M2pRaHVYUzIwdTd6Z1gyTDdLWTVEVC9iTUVubkdLQjhMaC9UOW50ZVpGWCtocEtJbERQNWRVRVRkbTlTVlFoVEliMkNmb0ZjVEoxb1B1NjF2U3lDUXhDQW1xYjVxMEpLWmtqTjhaOWx4SWFGNzVZbXZ5aG5rZWNGZm1VcEVYY2FUdWYvQ0pMdmprQUdYU3Q0S0NNelNZeDdLYnJnK2cvSFdQUDQvMnJjRzVVR2hKVkp5czZYcFJ0VTcwRzdBUXd3SnBCTmVSRGo3RUxyektqendpd05TWGVqbE0yUHpsdHNvR0xUZGRJeVMrUndIdTdVOVJVaDdOZng0YXJkdE1aeEx0YzhrcytncHhhckhzRkw1SjBJTFhURFY2UzJuWm5pVS9YUTUwNGplc0NFVHo1M1hxdUlmNnZuNWthMzlKTDJIbStRcGhhM2diMUZoTVFvY29FaDJLaE9ERFdKK0hqeDk5M0M4eTVlbHlyL2E4NXRXSlUyZi85QlowOXRqa2E2OEVvM2d6dHVCUTYxTGJHOTlwS2JWdDlFQVg5aUNoNE5EN2I4S2kvampmNDk1V1M3YVBGRDgrSFVRT3ZNL0ZTMytLdlZIeXlhKy9TQ01meVhIOThsd09pUHgrb2hvWE9RTnNvaXBZSi9ZVmNSZFVnWjF3V2l6RFJkR28vYXJkdFNQcFhXYzRubmlIY004eEVvUVZoS3labmhUY0VEQVVHRDZ0SVBPMmpOWlJ5USsxZkNaWTREL0lxcldOZ0UxWmJ2eDB1Y2FuUlhkM3lYeE1Fc0tXN05ucnlqWmZldGFGZ0NpMUwxUGdUSWpKcHRSVWJHdGVDY0hFQ3dwaWFMMU1menpQSWFrU2NIcUxLZnFSQjdWZnZnSU1YTDhsaGxLdmNtWGhwQmRQS2VqTlVHb3dZUEs5WWNTcGpRekFwSGhhWXc3K1lrYzJuYXRXOEp1U3kvZDVVN00vQjRMZTRFQ2I0SmhjV2pxcFVWY1Zqbzk4STNNeDUxallzeDJRZkdydkVLNDhkTm56MlhtTy9DYmNLYy9HKzd4UzJEUE5wOFpuMU9CeFJDT21jSjIzQW9WUk1KSW5iSWU4eTJCbHRKemViOWhMZ1J3VGlsR0lubWg3bThmM20xSHdWN1dSK1oyWndMUjNQbXp5andIVFArSTQzTDFIOElwSndiNnE2YU1zRjl6U3JQQXFQcU1kVDRzWnA5Y3hjWHc4VGp1QndnOEtNdHRmSXhpSmppeG5BdHN0TERXMkRVVm9PNEVPT3daT2FXOHkwRjJwWE02OXFESklDMGNhSFFoREh3cCs4ZzZMcWJ2aE5XYW0xM0p5OGE0aVBvN1RGMUVveVNwM2plQnRZWWxlcFJSYlV4UHJ6d3NjeGVQUlIxalp5a3QwY2I4RU1wR2hnWmRJU3dBa2I5UTFNZ0ltV1VSc0tselJaSXdKeDN2ckVwZFJhb3pPWk1iaUtteUlBK21oMERSalFvc1RGYkxpUFFySEdpZEhwZXJDVWJva0ZxSDA3UDZlSndrYnYrZnJoVVRNdzZSOFM0Tlp0NUkyRHArRnBUVWJpb1YyUmZwVFFYU2lLSDFXaXl1N2FlQkFDaGFSaUxid1lhL3YzcklDZ1BtZXhhN2oyd1hkK3B6U2lYNFpacjUrUk52c3pjYjFVWlFnQkZqSmhGWmtxNmFJODdYekVsTDk1RlFsdlpRVmhYWEMzem1jU0NlRmloWUc3WTFpV0ZoTkZRWjQ2SS9pNVhDbjVMbnZCRUpjUi9PWDRwZ0dBL1V2cTJaaEFGNGJWSzZEdHJ0cWhOdFRXMGRNTXFQY0M2MnMrM0diOStNaUFVeDZ2dFJyTWcxVTlxNFdtMjdueFVDWGd2aC9nV09qZk5xZ0grU3FYV0ZxSEJwT3MxUFZISWtSTFdvcEs1a3J5dDQ2Y3RnbE8zNVFOUElnQ2N5cUNtRWFmd0ZNMXhwK1hPWlczRGhzV0JZekVqVFp1Wm9MV2x4QnBBVmhJUmh2dG84UXRsazV6UWxqdy91ZUhlMVJJaXBBR2FJa0Y5aHpEUzhIbHlsTXRuNW1wUGl0SlJWVlB1Zmp2WjZ4RWdNREd0OE54WW9KWWhUZnIwMlRyUVNrU0hhUkdQT3FkallPOGJjanYwVDJSNGRrRGJyWjk0Qnp5ZkRLc0U1ZkJHQ2FMQjAvMHBKY1Bxc0tJVVVUTldCK1dVTUt4VnFBcVRoK0MrQ3lMYWYrR1ZSaXNiMU55a3dLN2JxaDJwQ09mc2tTUnc5cFRNbFlyVkNGT21MR0dQTFBEb241TzZYWWZxMjBQVC9TUGRHNkZ3YzU5UllMbWlHeXpxQ0drNC9nRUkyVk9EektZZk9iNmY0RDVjTVRQWDNZNmdZeEVFL21OSjhTWk5LOTV6ZUU4OVBFN1RBV0FEYm9DUnZHVFRFY0dKYXR1YmFpVHk3b1pGMlFCNUtISDdnNTVrclpUREY3eTRqZ2pnZElGc2lJSFBvM08yaktveXR0cUluZlE0VWxVVGxiN0VPTllZNE9RaUIzWFQrZUxXUnNvUUREM1hadEJYdXo4ZXpNQVl4a1k0U0FSM3lZbUVXV2tObGNySWIvZWV1Z1ZqVC9mUTdidGxaeENPcFlQWnJhQ3dadTY2TkpwSzF0bjIxaFN2Y1haM2tnSExPTXZrY1hucUJDTmVUdHgzZDBGZERMWlI3WmZYaVJkK1lpQ2ZrVEJtWGdPZnR2V1JlMGNyOUlWWTk1dlVKWHhBdzAvcm9EUlJzZkpYcysrR1djQUNHOStIb29NRTg0MDZZMWpDdk5ZZDFKU21WMG1IaVA3RHJMNmhGODNXdlBTcklMM3VORXk0SWZXT3dMTjNUTzVkUG1GdFRkVnUvQ01uMTZoeERoS2h3Ykw3cUxWVzMyUUVXeHV3cGtCKzNjT25iaStiREZ2TVVuSkZGQzRIUS85RENadFdGYW40NUZuQzc0NmU2cHdpZWczZ3MzRGNIcmxUQUorN2gwUGJVUDlxZ2hoUTZNeCtJYmhPVHR1Z2xqdnBJdmtrandsSWJkdmllNUVUVExPU3FIQnVJdGI4U2NMalp4bXhMTW5pbVkrTkF4MXlCbGk1NnZwRk9mVHhsaTZnZzd0UStxY3dGQUNUenkxa3F6Tkg0STlOSjRlcis5aGJQK3VpT2owSi9SZ1dpZjh0ZjZpcU5oQkxpOVkrdmJhNHprbjZtTFhrdlZPTnFDanhXMnFsQ3N6SXdXMXZTemFrS1RocUxYQ1lvTDNyMVl5QlBycDYvdFptSXR4UkdEZ2ExZm9TOWMxa1B3R01OMVd6MUtYYThnR0tvYnVqZ3NtZXQvOFpBTmtJN2gyZVJzN1VocEZiVjh6Sk5GUWFSNitwWDE0K04wN1FtRThXUkl3Skk2Wkc4QjdyS1l6d2NvMUlDZStobmpkQVJYSjdDSGltN2FDamhxeU9XQS8wUlhNWVdvYktrSmR2bGZYVGdVSHo5bkVPQ0VjeGNXcFhKUlpaTzZ3R1g5U3VOb3p4N3BBMXRPcFpIWmwvTFFnQWZUemhpWDJLMXNKcUgyZW1MWnFxRC84M2pxVXdnbUgyMDM0N2QzZlRjc08vNXA0czgrNlorOWRoM1A2czUyT2ZhWGJoYlJDcTlDdCs2QXZTWHNvczdJTkFSbUVHSVB0SGVMaVd5aTZNRWZ4bDkzd3o4VjJISElrOVVJeEU1MnFEOUxVZ3JNQmZQV3Nic0tWNmRMTS9EekJrejZnMXY0azBMcGVXeU9KWVc2UHd0UUdNT2JpQnl0YlBTL3dGZVQ0bmI3RU9hZGRzMDR4SHdUU3NYNHRBSUdwQVgydjZoY0U2eGI1WGlzenhXbWIxczBpUXc1VTNFSVd2MUhBRFFZZ2hQSDA5OEM2c2k2aTZaZjF2WmFNT1pxYUlrTGNXQk1VTGY2ZFZJM21pSFNCUnNvNDZVZmo0cmR6WW0wcFlDSkhGTlkyQjdXM2VraUFyb3dFVXM1eE9tU2pDUXNKazhVYmpkVVZ2YXlIQlp6cUQ4NlE3QkVJa0RHbVdPL2I4dHl3ZDJENEVraHRMY3FodzAyeTRkeFBrRTI1dUltNW5EVzlheTFwSEVTZk9yOStTSE5TZG9jNVdtdysyMzZRdHVLTHFnNStjeVcvOXhaSCtNZjFtMi92TWN1VEQ2YnoyTHdHUFlQeHZiWFg5N0Rjc0hlcHhCeVlOeDhiaW9SRTF3U3pTNi9nZ0J4UVBCcFREa1ZqdlhtNTBjNStvRWYwcHJCOVQ1TTdlS3NCaUJsekd6dUJIM3BDbE9YMFh0UjBiZFRFNFFjeXFkSC9RRU1LaERYRnpPemZGdmplM0xlTVVvWkZSc3dkaGdXS3FRenJVSElJM0Z6ZE56bFZrNlJFQVF6d25qTlhBQTllVkVrZ2xSbGJwaVlNdkdId1dpQTZrM2h3bTdxS0tPQW5PZG1jSjR6cDNLZjlpSXBVc3BYMnloZjRzUi91bXo5Q3Z5K2JIT0s4WE8vUFNWLzlvYjhTSEdyOC9tZ3gvVjk2cFdlS1MrSWlhOWN0YWpTaE4xR3dmcnJSbnJIa0ZDVUdJYjJ6M1VmNEFhRGV4aGQrR05zN01TeUlITUhQcDJSV0FsMDBZYXVSeE9ySDZNOEh4S2I3UE0yUDJCZXduTEFSc2NLZEtBMnE0VXIvcll3N0FxcmNyWkJRa2w2SU5WYS8zenRxT2o1ejZET25TbmIvRENHK0h0UncwZDRWMW1Pa2g1SDhhUFdERXAzZzMvVTVuV3gvL2VGaTA2bXV5WWx5a2VqR1djOWtiSlMrZktzaUhyOGs0bU50SDUvQWF6dzdoK1dCZ1NIUHliZTk5ZjlObDY0cDVXbDNUYS9ScE9EdDlmVDJTa3d3OHhxeXg1YW9ncis5WElYczJWVTh3ZmNlMEozY2c5dUVWYVprR2dWckNZTy9hZWNydXdPeThocGJldW1PbG9YSFlBVGFoeGZMdk5JL3FJYlR6M0FQMmxac0tnY3JSMFpXT3ZGVS94VGxpUVJKYk82dEdYendDcDVDS0hmdnkySS90Y09SS1FYelNPYmdZamNuSXJacHQ2ZjhMQVowZ1I2cFYyQmJTTTNxdHpuL3A3ZEh6dTNLTEpSVVc1SnRMRG82bHlVQytGenN6VUl1T1VYcmo2SHVlZkdVNHhNMlNob3gzUnQ3blV5M1krTEU2dGEyWUxITzNrZlhrUjlGZFpoZWlaS1NHNENldEVhU0JjaFVBc0lvWW5BZ0pvSUZMQWhWaFB1TFIwUE5iYUg4RjBtYzdhNDFkU0psSGUwZ3UzZ2ZrQXpMZDdKWWk0U0YvREZKbUhOQnN5L0hGakxUNDA1NE1DS016Yzd2OHZpWWsrZ3FiUnMzT2hTakI3dTFxa3E3b0RSd0NhUUtocUwvc3dUREJXVEp6dW9GZXNkWEd0NThmM3JQUGpabi9NNVBkR2Z0RFJTWEducUpIeVluOFpZeUd3MGlwcHdQUnZVOXh6RnZXNEIwV1hsZUk1TXVHOVBXSmphQmovMHJQV0IwYmxsTDBKdDJWdnkxajFxK2t6ckxsWEYxZHArSWFjNm1ZQ0pjRDVQZXlFU1d3ellQcXh5UVpad1h1MGNIMko0NFhmR1Y5TDVwQ3ZNOEVHUlg3TE9CRHJyZnBlY25ESE9KWGhaN0VnS2doVkY0cXN6bmRPYUhGRDd6cFJzeFcvWm5yL0pNdWEzclZHc1YweWFJVXFYVHpJUE5YZFVsYWZvOUtVQmh5QnJhTnZnNHFqV2lJS1dZZ2tkVHlxZ0cxVEFwZ2tvYXV0MWIvU2lzKzRxV1MzR2Y0MEJ3WjU5d2xHeDZDdVdMSWppRTFPTzRHUUMwZFlMWFRFOTBJTStFYWRydVBYMUtDL2pHK2dzMWI1R3pVeUVrNlBhOU52Vm1Ud2tndmFFRG1rWDlSRStJcmNWKzN3S1QvWGI1czFyVGJSYWlKZ3NoblVUTmlzcmFXYi95bUZTNnVjeDJFMUM2SGZ6MEFjYVNvK1Y2Zm1ObjRMbEpvVnNpYnJKS28rczk3dVk3cVE4RVl6K3N4YUN4QU9LcWpUUW1ZYU90NitUL3ZNMFlkWkxWb2hJRDcySm0wcGw3WnpYUW1JSGNQMFhSZlNGdURlT1hzVm9xT2hEWjlzNS9zbjRLMmUvbWZUdXcxR2gwbzlYdVZBQ3FpaEhVRHFidURuMktLdzVwbXVjRU83c0RtMUNvWjJkd1Y2NGJoY3NVTGx4Zk1QTEh1UEtwZnE0c2RsaGpzemY5MGlpQUVtcEFXRWpFTVA1eDFhUDFuSzRQNG9tWUREeUlsR2NlVHZDZFpPS2V5a2dHOUdwM0ZyNTRuRVZaKzVqSC9ZUGxwak9NTzdLOGNVY0M2V1cxVDEvTTRMNFZhQUFSdVY5Z01BbVJVd2NhRzE1WmoyN3YvVmxKUldINmVBc1pkU3Y5dTN3QmxRamMzOHlTZEswTTAraXlJYXZwaW9CemZmaStQT0kzYnVIVnRIa3JVWUV5d09zbktzUmNsbWF1NFdkQ1U5Y1IvK2kvakVuQVZpY3dmRS8xb2ROOVlCRE1jRjRzcmpIZ3oxWHQ3TERnSEx1cG9LdjVLUmxWWHY0VGZHVjVpcS85ZU5Ia1F2blVVVkNLVzIxNkdHZm5mMENnQml2S1VNVVl2Szd4SmRoNm1WUEx6eEJqT1FQUFJzZk53K0VuQkJmOTJzdzk2L0dDQ0lpY2gzWG5PQmZyaXNldkdLRlcxczRLYk5SK3p6eVB1eHkzWms3VXhFa0s1enBWNys3Z0RCNkpNVExPSDl1UDRtVDB2dVdIRjBPR0xMWm0wS2V3dE00MlF1SkhVelZGU0wzVlJ6YUVmUm9xZzJVTHB2RENjWjl2WTRueUxDaEtKYm83Ui9BckV3R29FZldSWU9sQ3FSNThrYnJmNHY3VUUvazdpamovWW8zaVRuSjJmTWZaVmtMUG1RSTNDODI1OGdQMWtPS2tuaHRhU1Yrbi9CbktScWhpdyttTWFMTDhkMGRVeXNIa0JNYjhtVHJwNmloaXJDaWFWWlJ5Y2tSVXJ4dFF0Um9TakRiNnBpeUZ6V3BRMzlkQzlYV3F2cDJhQ1ZnQzJtT3RoUXNLNm5QWUFrd01oMFVwbVN3Ukt5UlVRSjZQT0VKazU3UlN5OThhSEJxYndieGFQTlkyOU1XRXpxTXk2cW53aXlSc2FIdC9qTEY5RGFLOGlodXhsa1VRbllOeno2RlozWUFCWWtpeHpPOTd1ZTV1Q0lvMk1CVXArWWlseDJZR1ZvUzBoRzJMQWRydmp1Um9OVzkrWnhtZUJOcTI2TU5lSVFmbEFuQ2tuWGMxZnZpVWVaOTJLNkFzT1NVT08vbWRjWENRT3d0ays0QTQybE5OSjE4clYxUTQrc0g4SW45VlVWL1lFNlhzbUZGZ0ZQNG1OSTRGdDN2aG5lYzFFblJzVFhGRFJyL3UwMHZ1VmF2ZDM1aUwzZHQ1MHp0RFg0OFk0NjN5YS9hSFNPQUl1a1o5SG0xR3l2akEyQW0zN2lEZW9XeDJXckNvMDJGSUhYd1g2b2xlY2thOVBkdDNCamRnV3ErYUduTlFPVmVYWFluQjhsQSt6by9mMm1uOWhCOHlXV3FycVk4WFlHOURycUZHSExKTkRjdE9aeEpoZ0IvdmRob2V1amNuUXh4NHlKM2duQllrbSt0VkJNbWNVZlVCRzE3YVQ3MUdMbmlvYmRZcGI3K2tiSThSZW00Zm1tTVQvYVA5SHNsQWxVTjdrY0tVQmVkYmxwV0NQY2FUMFZiejBESUxZMStjQ1R6VmFoS0FFbGpPWWd5WEl3QTR5ZzVZb3hRWFdJa3VoNjBFdHRzR2ViZDJDQWUrVnNXVG02L2xHdEc0aUw5Q3h5TmE0M0R4WHVpdEtaQ2ZRV05MV0cyZE1TZHlxak9iQnJObXRjMTc5MUhvVXhVRFRzNEV3NHIyZ1RZYUVxSTRMYVVSTUdFRjdJOTFXNmlTMFhzNERFZ0s0QVA4ZjVQYlhVb2Q2WXVuL2FwN21pRzFrZ0s0SFlVOTJWOE9WejhXRkRwSTBqNTlLYW1QK3FpaVphaytCeUNFYWRNV010OGZDM2VKclcxbGZ3QW5GT3FFODFMZmJiSjdqMmFrMnNzV3Bjc25MY0RtWWkrTitDVmdkb1VLRGRQOHU0TTllaDBxUjVzMk4vM29RTkkwZlhRL3FIbTdBVS9FYTVoSzF2TUhxOStZTlFwdzdOcjBCeTBIZWU2eWp4dkZuUVJBbG1jS0h5em9Yc0oyTllCTnNXZHpiT2xlWkhQRUFkTnhpcS9vMkJXMXFHeG05TWRmZGFMbnp0TUZoMFA1TVE5SG9UcTlRelpRQkRxa0tncUpsbUJnUEdPQTFQOHhKNU9lZEJXd2hUTFJKLzBJY0sxNUNBUHVTamUwTWRPRHpMckVudDF4QTVPM0J4K3pYUHJBL0JZeEczR3g1a2ZFZnBXN2NJL0VtSGtYaXJVTHB4T3h0NWkweVFnWG5wc0RXZmFZMVk5OXhWdHZQK2pOOGxPbWRXcEU4S1hJS1BSS3hvQmxwTk9FeXpSVkh0VXRRdHl4YjNyUDZFVERPOWdXWFRjbk12UUtUWGJwM1BqOHNoRU9CRE5WbTNzTFRoMEJ5VU11eG0ybzNEdWl5U0x1NHJuakk0c1lNSFhQZGZtQWJVV1oxdHZvS09XZW02RnZxOEI4Zys1elpJalE3UG41NG1lZnp5M3pSWE1VTld4Y2Zid1kwVEhxVVpsOTc4UVM3SVlkSTc4LzhCUnBxRWp6Z3QyeDFVSC9JbWU3L08yTUlKN0IybjhKLzJsTXNDclpIWVpmMktIZEJ6Nmo3S0tVS1dqbEdYT0grWDNNenFyemYxdXA0dXAvN2VwMkZoKzlzQ2pvMVVRL2NFNm1CeW83RTVOQ2U1MTl1cmE2MFRGdmRJYlowUGJ4ZUhXajl1cytpS2RaaldKTzRGdXNITmxscXNnaEJhSGhPaFlqeUl5RHZ6QUFUTWowL2VPSStDdE9UajFQYXBZMldhVXlPWFhhbnpHVXo1Nnc1RmovUkhEU2w0N1VnaElJWUUwQURTV0RGMFdoZDRMcG9BUWpQR2c2L3BHK0lPT08yZkM1dGxOVis2SGp1dnljRnhxMVljMStKVklUNHdkUGcxTjlRY0Y4U3VyQkpLRjZoSkJGeW5ZQUhNMyt0c3U0Ri9RM2djYVNjR1FGWVVVNm90QXRJYUIvMGl3WU1DTWRhYXZGSUZSS1FTNmxNb0t2Q25CODh3MTkrNnd3T3BzTzdpVHg4V2RIWXZVN0xsUi9SMWNaUXZXRnI0dnJtQkJzdzhWRk9UcGdhRHprU2IrRzdFeXF1cmVQclRIRTc5RTdadVIxbnFWR25FanViU3pabXMzQmlKdkRTNGRHOWpwbUJvbVluNHVncFp2aHlBT3QySlR1VFZraEtMcG9QdVpXYjhRdFR5K3BYakNnVHcvelY2MzNsWTduc3IrT0lsbHlTVW1vOFU0Z294VHJLOXBoYW1Tb1plQ0gzeHpUTTc3dmpEU2lESHFuSHcrOW9yM1Z2cXFuTXV4M0Q2bTFXc0xQamFyaGRMY2lyN0t1VW5xeEYydGwyQnF3eUtCeGJvV0tPcHU0d29Mdml1MjU4K2ZsNVE1UWF3eE90M0NvZHFaTHJpbnd4M293c1FObFRqQUM3QlViUUFhQmVZa0JJdE42a2tPcmVaTjRsU3U5a05xdk9GY3E3WmlGbzFoUkxiSHpac1RqTWJsd1VUN3VJUnBuNDBjUzlDdVo2bEtFSnpNOGkyNmVDTU9pa3dNak5yUkhHM0g3R1N5WUxZUWthRitzWmEvVm1PdWp4MjFHRkQ2b1E0MHA4SXlnMlJJY3h1TW9mOWhYdHNOZERDdzhvN2luSVhTTGlTbGZDOFJvenJwc2J3NlpIdDQ5VHFrVzBQblZvSVlFVHNRa1l5ZUJnSmo1dWEvbGkybGdvT3RlUHBmRFlRU0lMbnc2blNhUWpTbWsrc3ZDbzE0TUsvczB1YlRCdjNUSUFkamlPWDBicGMvbnFQQjdOcGJmM2hQbmI3WTYvTWVGRks4RTB0ME5BaGpBTUpQdVpHK3hSa1p0bUpFYmVYZUlZQXJtUXFiRkZXUlFYUlRmVzJyN250Qlc3WE9lc2F6ZGdrS05ET3R4b2NrZlNCbnIrNDg4SE9VTE8rVXlaVTBLZHpGSHByY2Mvc3QyMWdQTkoxL0ozeEsrM3NxaEx0V0Y4ck51MEkzRmNmdHE2UXF1N3AzYk5yc0VjY2poMGFRa1lXZ3NZdldEalFWYWRmRE1RVU1CZDhzZkMzNEdwc3pqV0VFNHYvbU1ueTNZRUJuT0V6Zzg1T1crREtuYk9KR3h3R0dUamMvVDh0UFRjY3BJVXNOb3V2Qm1pb0FlVGttOE9LRGxoT2lFWTdwMkdDWmNxUUhZSmxZWDAzakZjc3pLUjdRSWZxNGpaVjRscmlpQ1NDYjBTSFI2YklkdElxdngvZ2lkUE5IWFZGUVI1NlFoVDE4NkIyWWYvUlc0ZXhhQ3YrcFhxMStYbmdjN3pudHN4a1RwUytJVmVuUVdEUytxdDhwYnpScWtRVFljakNPSStmZW84eEJFY1M5OUg4U1NoOHVOSEJic24yYkxxWFZLMnZxS09MMWhFZkhuYzMra0VhQUcyRUY5NjNXUElXaDhtMnJPTm14ME5yV1lIeWlDZ3V5ZmI2RTFkYmFNSlk1a1BpN3laSzNQdkp3V1ZmM3JleHpKcGFTYUUxQkcxN3V6YmlzR21IWFAxZVBPU1BPd3ptOG5hNnNkeHdqWTlVYXhNUjk4eERjbEJTeG9nQk1zMnlzbVo2K25RTWZ5NkRpVDBIa0w0VlAweHl5TmFPVURpT1E5akZZWUVTd1FLMVp2V1NSY1R1dXNmWnAwRStrQ3V0dUpXQll0ODJTS3MyVVplTi9yRHFFZHFwSXpveFozZThjTlZIMTM3ckV4bDA4TW1FNktWb3ZYanlxa0lrNU9SNWFUNDJ3OEd0b2lJTkF5dFFsT0RBTGF2L2VqZFB2SENteThlWmREQ3JtRCtSSnF3ZXVsZ3FGcFAyZjU0UVd4b1JicnRydkE2czREWks3eWdBbklIWTVoV1BhNm82dDgycGYwQXl4Q3lzenRIZXRPQytxVmJFZUtSaWFKNnMrNmhsWDBTV3NycDNwTk5Xc2FHMkhIY1l5a2tBb0xJRnhCYS92UzdUTWdQSElOQzFnT3RybStMZDFFR1grS0d5RDhERmhROHVDcFhFTWxyZTBObWhoT2FyQXpmd2tZUlRqMThzNEpQMzZIWUdwRjZLVy8zTUd5L3lOTXQ5ZjBOWjhuc2hCM2h6dXJ2MWd4QnFCNFV0WS9EL2NONWFMakc3cnl2dnN4RGw1OGFpTytEQnhGYzBzV2V2c2E4SEM4Z2oyYzBJei9jc2ZOSVhFL1ZCOHE3QUJVamRrbUxId2RrWDNCbVpEem5QbHRhc2ZSTGJTNWMzT3pFWlZ4VEdNaWhNUWtscGh1OEZjNjBObUxmOVdGTGh5QTFVTzh1QVZ3THZETVRJV0tsTTMrTGYrdVdkdFRUL296U1RBVHI4MHhUeFBkVjhNTmVEbWtTeWd5MWtDdzdld25rcUpHTFhRU0hRYkQzTUs2MG92dFZsUlNWNWg3ZkJOOS81bnBUdW5HemdWODFkU3R6RUdDdHBoV3QydS9aM0x1d0p5YXFtWThQNGlucTBSTjBiMWJkMVJQek9ZYXBkdDgyc0haSnArZ3lDWGR6SkhIVGhOM3hoWTN3MlQrQWkwMXVQZTk4YS9VOFBocituWlVKcHhtOXVpMzJQR2tvbG5jejdWTkhpRzZmYXVaQi9MQU02c1JTcjRWYmt3K0h2ZkxuRjhydVZKUTV4bmJyclRWdUhEa05RY2ljV2NyRFRrZVU2UnZ4SG9yS3ZyVTVqZkE4UEx3ZlNaZVowdC9DME82UStNT0pTZWxUdXgvZXlhbjJEU3c3emFJRGs1TW9UdzAwaUhzZzdmY3ErRnJSTVRDZDlHNFBDQVhpcU5NSUhFUlFlekMyVlpmL1lKdG1CMGphZ2xycTRZb3cyV2FucVovaE5POTJVRnVxbll1blMyMFN6bmVPa1hFcFpnOWJ5MStyaGliWjhndE1FQXpMbkoyTWhqcXpNbEJXaE14bmxTQ3pJQ21QNXhBckFNMkhqT2J3S2FQOFVwYlphMTJvdVY2Vlkrc3BtWnk5bm9WQTMyaS9sbmNJYVNrNGZUVThJbmFuSFlGeXR2K0gvc3Qvc2c2U0JIUWEweGhIZkxxamQ0V2JpOUJMOFl6ZzJJWDFqN21xQksxMlRaQlB0VXJEMkhLYWlRcVNvV2VlZ01FU3ZySVBnaTMyVXhNa3B4cFV6OUVMaVRXZjRqTTJWU1ErYTZrVnpuNFZDOEY2UUNpa3Rmdk1aQkdSYjlpVmlNSWZCMHVmQklBcHFZTjByYlJLVDEzbUZYanJsbFFwcG5ONkEzZ0tFNVpIWG9CZFFvcUhJbmZPVWhneG1yU0ZHM3RHaW1kTUY0THkwVXQ4RjFQeXJlT3RHQ2JLMGxCeVo0bi9PYjJ2cS9GeG9zcklVNjFIT1dDckI0NWkxeGNTOEtpNWFGNW1SYWpJN0FHSUtzb0VucUtQeGNDVjh1dG45YWlUWjEvOUN3WFdtdURLMGl1UStORnJualVxZUJUY2tMYVBTYVF4NGh5d0ppNG9PNktGUDNXNzNxVkp5TTNQenI0MmRCdHIvUlorRkdZTVJtbEpQVWdxQkhkRXRBeC9LR3phZzJOeVFBbHI4d09nL0FjYUxVQ2M2bGJzWUk4aFpERnp4OC9jTWhHN291UDIvUXhCUzd3U3MyZHpHZkZ3OFNtZkNQUjRDMzhOMTFWTmpqb0ZQRXdxSFoxWDBUZ1N1K2xPbDJUTFhPUUNsTzdZQjBJcksrSkMvb0l4MkdscDV3UmJOQ0NMTkc3Sng5RVRsZFFzRE1uZ25CY2I4eG1kNlVYZkpCNlJsbjFLZHd3cU9PWHF5L2RxZ2RudEljMzEzMzlnNVB0U2RGTENkWmdET3JTMGJSM0JVcWFsdlpna2FwaEpCNE5kcnlyWUtPWmYzbmI4TVorbmFYdHNZa3N0bHFOV1NMdHlwaEdlN2xwRUFFQkgrdTl2Q3ZGUEluNWlHVzcxRHllRkVVM1B2dERJd0xBRFgza3hlem55RUpwYW9aTExhNklybStubGdheUdrUFIxRHo4MSs4UzlzV1RDalJEemdxMUVHNktUcWdWVnErN2o4RkppSE9FS1U1bWtPRFV3alBya0JaTXAvTW9NV3RiWENQUFlmd1RJTWpmQzNydGhTOWVkanl0b3VGMnN6M3owVVVsVGtRR1hEVlZXUExLalNXc1pOZzVwdlFFNUQvSi9ZQmZNRkQyOENuOG1zR0tHa1FuTURDcWVQbGtrSTF1d3Rtb01JVVhYNkl4VU9VaFA4Y2lGUFhoMXVJdUFHa0RpcjA0QkUrRGFiLzhHc2lqNHg2RzBTaEVWSkNYVHpBelo1eTR3ZlZTQkd2cVEzQmR4MnpqdnRxUEYyc2I4WUV2QWRITHRiTWRjODFRZVNlbngyR3IvVERSUm9xeW1HSGRYUWVEellITUdlUGhyMjZHMGpVbDA3ZlZETDhta3h5S3kreTNUMFlKekM4TzRlWEpOS3liWTBLYVZ1cFYzOVNQV3I5MHlnVjNCN3ZFR0VSVys4MWthVzNzRGJOb05kalo1YytxeXl2QkRRMkhQYm1ROTY4eVZuMk1MK1NPaFZURUNkNjMyNWJmUFV3Vjdld0Erb3VVSHl3RUFTMFBYNExhTGF5MkRlSDFHanNiWVU5RVlJVVM0L09CNEJER1dreWZQTGs2SXY3b2ZVclpwYnlDSkRrSTFoQkpNbGFZM0cwalVCQXlqVkNFVUViZVBrZjRENGhvMWxvYjJOVzd3UUpSM0x3b3Z2c0lRWTVnMnczWlJBWUN3VE5QNzBRK1ZETzJKOWxEbC9BYis1VWR4YjkyODNFMG9PYzQrRS9CSHJxekJIc1Y2b1N0bk1OczlsSzdUVThsRzhheDNoU3hrR2tSQmdZM1FZaXQ3ZUdkYVQ4UGdjUGhqTjZMTDFTb2pBN013RmNhdCs0T3cvMlNXWGFpK25JMEgvWU40b0NqN1FVOUUwczIzZ2lqTTJaOGRiUHptdmpNU00xb1QyT3V2WllpQjdPM3lrSVUxVkVlUWhpQ3V1eWxjVEFQS1RzWTM1VkhnbzFKUEVZaHM3d1NrZzVLRXpDc2k3SmdWa0dFdWhMeEU4Lzc4aFhTYk9FUk9PTVA2VnltNzVrc2NxRjQ2S25NOThLVVgrVWJSTUN6SG9BVXdOU3E3MmpjTCtTam0rQmtVYnlZZ3Y3WXEraUVtTnp0U1Z3VEV6NytBcFhzK1kzQzlxWHNRUW9qTi9tWFFBR1VTcWFlR1VMTTBZaFpwVks2UU1jNGQ0Y3BpeFIySjB5R2E3Nmczdi85QW1FQUVQVUpwcFIvYU1BOERLUDdUVC9KS05Qd01LMlBFTjF2dzNIU2tDVmhCNVRYWk40QVlqd1NTV2JlckJVM0ZoeUlsenBUMmFHUjE4WFZITTY0WDYzVW1SbVpLc1dYMHFaaEsvQmtUaGRyUEtOUVZUd0tzQkpRVG93UERsQnJPZ2pST2dJVUo2OUtkOTlzSTI2Ym1xbEN3VEorTU94ZDMvVEd4Ti9OVjBnYmVNRnpBZDRVVUd6dmUrcWxlU2hMSW5henRjM3ZyQ0FqbWp2MlNRaXN6Q3Y5SGM1ajRqaGxPWWpSTndsdHYrY1FIZWczckdxNUJVcXdCbDR0ZGh0S1VuaTMrNE5aZDFPbUxHdndvd2dnR0VORXJsTTNjdk9MeVJRbDYwUFVOYm85VFJ0RDE5M2liVUZ6V1paUXNKM1Q0bmdjcEl2bFJRcll4aXNoUFlieUYyVENzQ3JJSEpua3R3b3EvaDNra3k2WFRYcnp0M2J1cE8rVnZ6ZGJ3UUNXWWhiRjQwam9HVFdTUC9rYTd6MlNwcXBrWlhJV2xBS2kzZUovMnNkU0xZL0hxV1VjUjBZeEZLN0ROQWR0VENkbVRhMkFVVkMvRGF0dlViNHBCSW9UU3AxMEdISVdwUXRqTVMyRkhuaDg2QXQ4dGtJTTBIL21kVVFYSzJKaG5tZWRzdkRza0tSR0tkVXNFb2xWVW9mWGtYblZGR2ZLbEpXSFBiRS9xdjNUTFlyQmt4TG1VZCtJQWp1Rk9QQUprMytBVUNodEpLOS9nUTlyL05ZR21IVHNFS083RU9OU1VXaU9EODZhL25CZUdLeGV1ZFE0QitOSzFtYVAxeXI3cDMwTHBLWjBzRVRtOURwcWhnNUxrcy9RYjN1U3lEQ3hIWEh4NzlRUDBsRjJJcUpjVy9qNE53N0VLTkNvOExKRDBydllETGdSdUhrbWU4aUtIK2NGTmh0cm55ZlMycDIrZEVMM1NRaXdlU2lRSHdHRkY1WVFOSW5TVG5WeVU4Sk43bDhnQk55elgrSXJFTzZFZFBkZjJZbk9qc1JBNmRuWkcvaHN5TlNxak9VblEvSjVodTQrbVo5SFNFZGRGWDJPZTc0aTkwVVdWOFJXLzFmUTNMSlNEVWU1Y0RBbzJaVHBVMTBTaFRqYi9HeEZUWFUxQnVtN1kydE9KeVZ2aTNzYmRPRDNNS1hrNXM1MHVMVGgxd1VYVXpKL0xMMWpOMzRMclJmVTBpcmNoUS9tMzBjNEpUOC9KY3F4RVdBUWFJOVplSThrRDRxcUtVVnpTSWowa1dGSzhLOU43QWNWVWkzeGxlZ0NuYjBCbC9VTzllN011eDU4TzNxdDVjQmZ0VXB1WXh0bnJWdXk0cXUzTmp2bW9xRXlENXRTcFRFZ2hEdWFnbGlEcVB5SUJHWmJrdExSbTBoSkdvSy9MNjZWTTM4Tk9EMmVyRTN2VHBBVjVicVI2Z3VIcUgzeTJXclpCQUQzVEJNa2ZYVXZ1MUYwSzNrK3U3UVZHeWFxaSt3MktOOWtYVEpoZFhVWXF1dG1NMzRGeCtESnUxbWlEQ0RRZW9JK21DWUNpYTZCRStsY0JiOHV6ZkpHa2pvdEt6eEVmcWZLRkFCUEVFaVYwRlcvYk4rSk5jM3V3SkpielhwRlJRaWlXb2RORTlEcVA2VGwxcDNnYTUxN2d0a3lRVHloZk16MkZicW1JbnQ4Rk4wVGd2ZlJlR1dSdm1CWlB3bnFLaldkWnpraWtUdDhLRkFlTHRndE5oc3pHSm5LWXRGUVpjeEpGd0RLL3dTWTl6Tkk5QWpiL2JheVpML2d6em9vVVRUVGJWTkp0TEF6bmhUVzdHZ04xUm1LQit0RjhCYmNhT3FITmJaUnhRdjZYWHBTcjdINEZrTUREdWVWelV6aEp6a29hNGdSMm13WHIremFTb0hRVFVYTlJ2Vm5ib0VpOWo4SEx5U2NJVFV5QWxjd0hBUkladkNqMk1TMEVqWGtZMkNRV2RaYkxYdVNKRUpNZEI2bUNsOVJ6b3lCdG9XUk1GNEsvUUZEWGQzeUNPdS9DRktkcFRmbEtCWXhVZkZUeTJSb0dQYy9PQTArV3FTcS9ja0IwdE81VTZPV1NYS3BJZjhuZXhXK2tsdXFMU0JWcGs3MnAyQmF1MURLZGlUQU81QXZJVEJNUmRYRmVCY2ZhODIvSkRyRGVvTUx4Y2VTdm16RnBuN044dUdwaVVNbXgvaWs3UWQ3YVhBL1p4U0h3NUttb3lqS3FRckFyUDBFQlY1U2tYT0FFK0lmZ0RORHF0cC83YnZUc21ZYW1GRjRkUTRhcHRka1d6V2VlcThIbUREVnR6UGhLV0VtQ200TWFsY2Fqcm1IZ2ZzUzF5WFdGaVNnS2xPeFhIN1IxazZGQy93QkhpK3l2eUloYk53Mk9jeGVObmIzSk1ueTdBWWhnUjJKaFpsTXJpUkh0dkFkcjFHa0VkN25SS2lyUHhxMjFudWxIUDRFTnBTTFdNT1ZTQUlWd3JFN2tBRitEWEl6RDQ4UnJtT3NkTklsVXdaZndGUmY2aUk5Wm1CYjdNNEpNUHJHTEpKQkJVR3Y2QW9aOXBSRmpRY05FSC8yNzZOOUg2MTJRZGM4MjA3bFJZZFVPMFJKN2dQanA4U2tncTFPWUJTcUVkaVR5ZnNScGVOanJaUHJ6c3p0YXNaQUp6QWJkN3VwaWRXZ0xkTVlMbU85VUtBVWR0WmpuS2toYktxeC80UnJHTXJLM0dwMXlGQ3dsSVBYTTk0RTJrYVM0eFZsaU9hb0llNDJncUY3dEdKUWw1UzJJS0tjM2pyS0w5dWYxSzI0blN6OGRUTDVKbFp1QUluVjZzbkVCM040ZE9TaEJQTjBaVi81WWpraHFzV1dkM2xyQXRRVEhHSnR1amovbkREb2J0ckh0MU90TFROdkFHNmVFTkJKV3lqVTBtWlRaZW5JYklDNDVBVlFHckhMRWZFRGJxOFhLck9YYS9OcW5mYlFUc2kwbVNuM1R0VURVNlR2RFA1QVlZVnUvMWh0YVY4Z25GaiszWGhxUituYmo4dm56dlZpOWNlT1JyRjBBVXdUSFZRRE1pVW40WmVRaWxHRWFPeW1TUTZseHE0cm9MbS9GZEhNS01naHNoZTNLYjlyVzhhT0k1SWVnMWM0cCs0Nk15NExaZHZnNWhhU0ROeEVQMVB2dEEyNWI1T0EvYUVBV2xGcVU2NmUwSXM2YnJCbnhUeWRacmoyWDQ0eVd6ZGd6eDBjQ21yTjk5aEVKUXBoQ2V6cUU1SXpDcFpoMXlNRTdYQTRmSGV1SzJ5OEpKckIweHYzcm54WHdxRzRzN2diL1dFVFZYdUxGaGtIRzYvaTRKREV2VSt6NHFvSnErVUxPSnE2ZVlzSlNvUW53QUhrejhRMndQeVpOVG9KTWtXYjZKdVFIT3hGTlgwRElyTWdGZ1NhaVZzai9CS2JRV3U2TEVneEVwZzJIZm0xRmVPVzZ6K3E5TitzZ0MzR1ExSjhkN1ZWelRORFo4L25CQjJYYno1Z21FVEZzSUllWlR5QXNzMXBuSVJrWm50WHMrWnBBMHRSN0pFYVNCSVprR1EydGhBRC9OaDVyRnNpZE9LREM5dHBUd3FDNEtXRUNieXNNc3JhcGh1QStqOHd0UERYUTRmSEU5YWhvZkRSUEQ1a2toRTVjczRqY1NSakpMWjBUZE1JMUtPTUtQQ0VzRHoyL2VpUXhGNVJubU9KTTRNT3M5K0d6QWViR3FUc2tzU1pxbDhGWHJaWFU2K1hMUnNlc3E0c0tldmFHY2dBK1FRbzFEWWRzbVVhMlJ6ZWs4ZGxaeVRqUklvZjlZNmg5SGtNeUtJczQ2VGl6NW5hdDFTV0NONUpxL0dJMmZkRGtodU0zYzV1c29SZElEUkVRTlNvWHFtWjZpeEMzTGlUNm0zN1p5dkc0a01GSW0wRG1SUDR6cnpSV2ZBT0VFU0dPcXdva3dwMW9DV3Z0ajY3L2JTTHF0cHcrZThlV25WNTNXdTl0ZVpIa210eUp6QVdONHl5eWJPZHgwaDNoSGhZTTB6ZVpMaHRXR0ZoSE9QRnI4NmZhL2g0NWxCeitQbFRUbzFYN1VyRCtGV2VTN3l2L2VraU1EbXFxWTcvU25zN0JYcUd2UXhkU0dYWVU4OHBHNUNoLzFpRWtwOXcycjZySERGbTEydjI2YkZNalBaODZVbGdaZjFoRWJtL01mc1JHTEpUTjRta2VSWEhDRFVteTMyV1dmQngwL2tBeDJmR2pVUTZucVRGQ1hjaU5zb2ZiUVRlTW1KNFhqVTh2WERlanRiZ0ltRFZnbllsRGdUb2hiZFdhY0VYbkpNNTV0OTI0OWUvKzl4SDl0bCt5aVRtUzcwMnRQUWYxYVlqaUpoZlp0aFNMUzJrODRmZXJWc3FINlVTUmIrM25vL3lHQTQ4TkowdjU0ZjBFaFdFd0ZTaVZwbzAyc1IzSmNzZldCRFdwQStKSklzOWNNaEtwU3U4V21DbW50WHJDT3l4eWR6dE1FV2JGSGVBdGtiMWV5d1BOeDV6RndvajFWKzBacEpDaDU4TWU5NW03cURwNVRTVDlxVmc1M2ZjS09WVTRWYmZZMnQyZVBRTC9KbWRQU0RQVnZEZTYvWURyMUVORjluM2tkam4zNEFDL2t5dEdzbDViSFVYUmY4eTNKeXgrcGF6MHZoZ21pSVpqSElSZE5OS1hudHVoaVNWNVUwa3BWRjQxeERMQjQ0R3VMQTV4QiszZWExb1ZVQTJMQjJySktKdDg5dHg1eHJlN3RudEpTaDZGZUI2bWt4UUExaHlpZGtxeFo3QmRiWldvNVVBUW9nRlpkdW0yQUQ5RzB6RFMxUFVvTTFTQUtVK3Y2T1oyekkwS0dUYm96elA1Q09qSFVyR2xTRWFSS1lWdHAybWhSYWFYN0FUOStVREpSN2x3TTRVYU4yZHd4MnNUMnZQaE5oNVF1ZzNUM2JsYzlseGsyaVJheERHM3RVREI5Ri80QUVmcll0THlkTllPd044Qm85U2x5eHFtRjNEZWQrcWxPbFNSKzhUd1hQWkVKcnlJc0IvQ2hJbEovQURyZTVpQWFFZ2UzSUhIRHEzQ1FkdGNqbm1teW5wOE5JNWk5bXFLdnl0WE9pcmRCYWlmNHdVUThyVWxYVDJWUFJxSnh6Wno1SURFd2FXMkxEZmthNDJtbEdibWxSbTBvaEt3RUttZDFuaFJDTzl0N3JwMi9QcGpxRDV4amVPam0ySjVETGdkaWcyL0lxNlNJVjBJeDM5SEZzTGtzK3BETHpORTEyTzJvRVdVZXkva1ZkeEZpdDNCdHY4cExRaFVyOWs0OGsrcjFmWmxBOWF0Q0haTysrSEUyTUdxQ2IwcG1uY3F3SFUxRGswL21aUlN1S3BFQkwzbFdjTkJuN0ZzdHJvNlh6NHpIcFFjQTQrM2xhemV0MThuQ2s5YnMyd1d4blViTnZCRFBkcUNJanFjbGNvZnBReTNUZVltWlhMYmtnUjlQVjg3QWJraGNpbjdhK1Q1NTBRQ0JoWXEzKzhLR29rbzNlTThITTIvencvVVFSQlBkN1RsRk9NWVJzWFBxWmxubUhEaWdnOGNRRnorNkh6anlzbUFseEhDc3U2V2lyTm84WlVJU1NsVWdZZXJYM3YxaVJ3QllUbU1BRkpuVXR2U1YrbElNMkFvandvSDdnbmF3aTBYUFl4QWxLZ2tTcG9rNjVicTNrUGpIbk9Oa3l4c09seWY5bnliVllVRVJDOXB0MGNEUjhZSUZSbmRxcDBzVWh6NnFnSDNRTjYyZUluUU4zWHNvMTRzdmdzSXQ1d3htSnBUTjNURFBFU2orV3BsSzc5OFM5bkVXWHRJdjBXSWlINkxrbHVISmJybnkzY2RiT2U4dExyQncrNXRiWlNTY1hnZG1Ub3pQeWNHV1doQytPTWJ0WXU4anRnTFplL0U3bDNvWjJhUzYweEJMTFF1QjN4OUlIdCtpSDZURitrR0Y5MkdQaGh0VGJoWXRnaWlFYllScktXa0RDTlgwSllVUU5ZZC9FMzZvb0tYbkFUT1MrUGl0cHgvOG40ZFloS1Nhamx2KzBuMWZaVlA2TWZzSFBvMlF4U0tFd0luTDloa3RnRTB1QjNoRGk1UEptaUh4YWNkU1pmQ1BydmRRdTFwclBWMWdibDUvek1FZWphcllYdU9qUmo5a3NrWmJFRHpObHFRVHU3VGxkb25zQ1FtMUdySmE5ZEt1ZHJOOGxSbmhrVStOd0srVXJjVTdzWGRFNmhWV0lBb2doU3lCYlNELzE0andpcjZ0YVNQL3dpZTVuR1pramhpaTNIekpETkppTXhNY1Z2a3BmWGYvRHViU3ZRVzVvU3dCdy91ZzR6SWRCZzBVY1NBS21peXZ5RkZSVlhvMlFmWlFwL25PR3pZZTNzRlJ4anR3b3oxc1FIaGFleVRVZ1UrZFllR3NnY2daaDVHZWw3VVYxRjJJYitKWWZsbHl0NnE1VEEzY2FXSktxQ2lNVW5wT0RvaWRoNnRRMEE1TlNsM3VPcnVkMmgyVE1sb3VjVWJGTVlhcitIVzVWUFk3amUwOFFFNUhsVllDeDF4Vi9TNHpPejNqZHZGVnBHUlNqb2xxUms4Z3hGaWJ0TC9KTXpTOWNvTUdMMWRZRVVmdDIydzF2Z2FjTVZVZkFrVW1DaUhEYmNBMytjcEhnTGZHNFRuZUxNMmZCV2hjbUZhczVOb2ZBZ0Y4bnN0MjRBKzJ0ckVWRWM0aGVLTW1FSHBNbXlrcmFvYWswSGhDSVcrVHBRVXZ5dWFhaE9mRFZBNmMyYnN6UlY5SXpiNXRYUDVydlBUSHZ5L05LWGNOenZTaWYwcElPcEZhQjlFbGpaeERrNXZCS0dXSGVxSU81TVhOd0hnUnZORG9XQ2lRZUNwZzh6ME1GMnVKR3haMFc4OThYWWdNQVk5SFVZMjZZNnRZZGJYTDV5S2dmb1I2NXdobVJuNGh4Y0VnNWZlU0gwdU9XUzE4a0VBa3JDTDdtS1JPcEZxc2tSTVJwYjJhaXZSaDlLT0ZXRHV6WVZvVGVUMnlxaUlQK0tIN2YyQXFsV09KVnpPMnBxR1ZrMHlQbm5RM3RkQU9jL2V5YW1kMDdpSDlJUkUvcE1mdFVOOXduKzdxcnBiSFdxQll0SWtydFVaUDJ6Q28ySjhhM2F6d3k4UmRtbUFQaDdPejROeHl0dVREK3FCc243OC9Gdkp2M3NrUGJyL0pVb1QrcGtVOTFGb2hlaFpxOVdzVzNrdTRGY1BjRDdmTGVyZURmTm1ZRU5pNXI1ZENOZHpmNmpZUFlPeHBGNUMzYlpMZEViY1FzdUFmWXZEWlpOUHlLVWtoemRQRGUzMGNFcFJEL3N6Y3p0NFlGWlBEWjA1Z01OUzZ6cFgrY2FXVU42dWtzZEUwY1FaQ1hmQWkxT3hYUlhJT2VXcTJwd2plaG02Q0VJcXdhWWRwTy95ZGNVclArQ3FwckpVOUVZQVNsdWxLZEFVL1Y5ZTQwbjdLV09uZWtCRDJDZDNmSVhZUjBQekkxNG5GQ3ROeUF3dWZzdDI4d2cvTUNIWThWMFQ1b1djeE9HcGZ4T1hHK1NSMXlkV2grRnhtNG9PaEpvTWFPWWx4dFFNSE03ZmRHTWVlakh3YytyZm9KQlhsLzBtbkVkZ2ovbzk4NWxzZFVSK3cyakVKNzRjWHQvdXdTbEhKUy9ZRkl5WWRva0JVUW80dzhObUtSZ1BJYXZ2UG1Eb2JvRnJUZ1NZQ2tiVDgvV2Z4TG9NTHdobjkwTGhGRUg5WUlNZGRUb1dBclRnYVJPRHFacjNlbUUrUmcyZXZFcmQzVkV2YzhjUUUrTGQwYmJSTVdzanJ1VlZPMGhUVmdlcHM3a2pmcXVmVnFDc1FyRDlSMWtGb1RTVzJZMndQeWtEanhZMUNsekRnWGhsejJ0TldTNXR3VFA3cWxrM0tjMWE4d0lkOVZiTFFUL3pqY2RxM3dxNDA4SHQ0L2N2aUVEMGpGQ2pqa0xwdjNZM1RTSnlxOXF0TFR6b201c2dtZTMra1ZUeTdqU3VoTG5pQXF3QmJPVXJxRmhjM2VHbGx5Q25jdU0ycE5kd2Yza3FTc1c4a0ZGSHpPN0d3eEJJcjRiVzZuZVFYL2xwa0NGaWlOQW8zb1JLSGFWMVFmRXNHSGpMUDZSYkhPUXRkUWppcXpINzdnUm5XRlVwcVNjdWdDeSs1QzVTYVJBWGV3UFlzZjd1emZCWGFsNlFPNGI4NDREK3lVcGI0RGhlUFRseHZhVUYyUGJQRTR2Z0NjaU5MUUhmQTNuc2pKUkNWSjF6dkJ1ZHR2Y2ZaTFYvMmpIV0s2Z0VIM1BhZjhCVk0xNHlWT2xQQzNqYjczeVRaRkIySDdya0lsaUg0U1FvdCtheUlsS2JHS3VhamJCdXhUOTMxaklpaHRlVUZseTVpd2k5bndxaVUyR1hJSkEzVXdmd1BZRjlqaFhnVjRpMFVDTzEwS1VQUndGQWJuTW1nVHZkcUpyTkFEUGpwUjVhMHdFSVNoYjErTmNZOE90NXlMYlIzQ2RTa3dOQ2lSVmVKNUFTQXgxOEg5TkpVR2NKRENZQjc2SWZ1MEovZVJqSENxUnNmcW9nWEMvNEZWdDZhcE5zd3BaQnVHaXg0eUF0ODBYMVF1a3MrZnMwVkNHVEtNaGtwbTJ1L2JDQmNSQXdpUFNkTFJJV0VYQnNER2c0ZVpGenI0U2lyZGJNdEt0US93V3FyU0dIRldlaVE5bk5RMzFQN0dvQlRNdHFrd0xWV25HNEVtMEx1QXhyK3ZTTlZqczVlVDJ1dFNwTjFDeGx0L1FuQ3IxQVBvS2s0Y1NmS1VGMEFDajg0dnQ3elpqL2pJZmFsaGlrUEN5SllDaDl4Uy9YR2ppNndFVjc2UHVkcXUvaU90UGV1ZjFreERNbm1CNlJjWVNtUnNyMk1aVElzd0JVTmNRT093dUR0WHdRWFNjazJHTlU1dVVadDdsQkJDUjhCMzBseUlEbGtBNVl4cDRLbEZQeFhVallnMHdCU1FRR3hQQlM3UktSZ3gyREg2ajlPNkpiQWNWS0JUcWt1NlIvWUllYndVV0VYK2JEY1NtbmJxNWRROVFrVFBJVlI4NG5kUlRIS0xIUXJSQXhmU3JpTXJYNlJwY1prQVZqVFNqbVVmRVUwQVBHVm9YV2FYNjRibTAvNDdTdXNRelQ3bHROTHBzckVYZ2JSdzdtb1FYOGJYdUJWWktMUis3R052S0JKYWRSOGNDZGZnTm1hRjRMNWlyc2pNckdySS9OQjZuNzMrZ25VZmpLMnJJMURMN3lPU2Y3ZDFIaFlJNHFjRGVVVkhlcXNONXo2TTBwNnJqaWYyS0RQMkdiSTU5d0xRY3JzMjNTSlJERk5OWXhpKzJMTmRwQ3FTektqK2pEQmFtR0JVandTMnBBNmErYmtkQjliNVoxUGVzaG0rMjhKRnpMWEtFYkk0T0dOUlZuRDFGcXMyd0hBWEcvSGNvbllzbmNWbE1UM1cwOGZzOWk0dVlXek5xZE8wZ2pzOGNsMHN4czhLWEprM1VYTGszWHhUeGQ2UGdZMjBLakpmQjhlSldRaTFuV0ZNOEc1cUkyVkF3RCtDK1kzUFFCOUIrNSs1RXdVdDRSYmdzYXNWTXBVY0JORW5WSERQdmQrVDBjYnlFdEJiQ01DU2pndnZmUUZFRFk4MUhDWFYxV0R4eGttTGxZTll0Umt3RnhsQ3BEZUUvWHIxQnBoZUFFWFVUY3U0NHBBZm5xb2dsVUs0S2h5ajc0WW5tZUppQmF2b3oyekxlcWlJdXlwcVAyZ0I3My9vNlJ1QUhBbnRXQjJTWU5BSGJWK1dQdXQrTEkyODlYTm5rbUFITGpMNWNURFNhY213MS90MzJ1Sm50WDhOWHloVFFGaFpZSGJvSWFXaUd5bHgweTlFNm43VjZQNGovTGEyN3VHNTQ3YnhMYVUzSU5rWlBvT3I4RW5aRnpBVzFZdnUrOEwzaW1DQWNYdDhDeWx5bG9RTlpSTXZsRFZCKzdXYSs5M3FLcTRlbkNNQ202Wkt5MDg1K0FXSVl5QXNpcDgwNXRadmdPNkdWbWlxNTRmelNTY1JFZmdHRWZ6RDNYK3B4d2JOallvZ0d4cDBuOS9FOFJCc2ZmUkNZUWhtbi9HSjZKKzRpalRyL3FwRUYrT0g5TFd5bTJkNXZrUjdWNCt2VngxVVBHa1JVV2taY3FHK3hsUkNJZ0Uvd0JxaUdaT3k1Q3hEUkx4ZEE3MDd2NkNydDN6MTYwaUpEV09Hc0QzVitIS0VHSi95c08yMmp1Y2t5OXp2RVk1NnZza28xbi9TTGlER09PSGRJeTRIS2p4L0FESnRqNmNLYXBXd2xkc2JoVDlWa2lTeVdiU2FKMXZNNnpOYXUwQWRabjVEU21oWkEzUER6L1lBdksrZ25FRnExTDVqWnlldEl0b29helVoaFEzelhTcWwyRXN5N3dGZzE4L1p3UXh2cGlmWkdUekJ2SXVsYWdtUDhpNWFNYzNmY1Q4Rmw0OE9hMVdTaTFHM0JwR0lpVEZUeVNhSjMwem1DWG1IWnBRQmYzTEdPcnpEZ0ZkTHNCb2tOdTR1aTZLY3BEaHFXdnFrVk5DWWJFalhmZW12N3ZWbXRjY25XVFJtOWhGTG9MM0UvcnIvbGNFbFRpQ1ZEcVNDRHZxZlJqcG9qbGZzcHNFYkRzTEhEcndiMStPcnJwRC9mVjBlRzNTQ1M2czBGUysrcWNkZ3VPT3lEUENoTGdRRVRqQTA3UDNDeS9KWm1wRG5pVTU3VENhVVZwbnJjMWFPQmVhcngwc2JmVWQ5cHNJNytIZGszMnNiYWFBUk5vbG0yaituMjFUNFV3SHRnRHN6U1JCOUtxN29aWEJRaU1rckMyU0JRUU13QXVPM0w3WVFIZGJ5bTBrVUxoQmxSa2FLZE9OdEM0bXZSL3RBd294U0dtRnNzdWprZnNERk94M24zenBBZmtGY1dRVzcyRWJYdjhNZEE3UGN3QjJteS9XL3l0cjlaVDVKdEZPWG40SGl0NjhwNzNONllJR3kzWUhjWXlsUVJQUTdVcmV1cDFPcERSUWZ3STV2M1BhZWRjNGlRNFViZ2QwVDRZdkR3VEc2Sk13M2dZSGJYSXB1MXdacmdnNXJ2RzIwL1hPWUlMQWZCYUxjS1VheWUzT3l2TGp0MHZYQkg2VlpNWThQN0U3K0hDNWcxclZPVC9VM0VBZ3NoUEdZZjRIeER5ejBuZnp5MlVnTGpFazhiNjhzTjkxRko3ckN2YXJTeDdBcFVBL3pJTWFlbWpoSjRpbEFLSkdzNUZhTDRSZFZQQytpU0FlNWFwbDR6Y0RZMVR3dVlzM0tCMnZSWXdseFhkNE1uT0trMDRxTE9LSC9nOVRkbSsvMmNqUnEyWDNYRmZzcHlXNXU2bTJmVVd2YnJJVzNRSVlKbC9RaHp5VUxsWVMyTUE5d2IzZWdWc2kxS1hvV0tOUWpDbnRFaGxhTU9PQ3k5OWFjalZ3S21qUVVOUDFuNFgzUDk2R1V6OXJ6YU5BZjNHM2hVU2hGYUhjOXpGNHZtZ0RsTVYreERhTjdqZk1kWHZXOElocnh2M00zMHBpK0YzeHZvV01kWlB3NVdDWTVtaSt4Y1JyNUErbHRvQXBPL1pydFRJaFR2U3RKWjB5bnlBcjBHVFNFcWovcVRpWkJXYTl0aTh3ME0wc2gxOGdjL09GVSs4YUQzQTRNajJMY2FoYzNPRWZ4bUwwbUp2WU05bktrVzRuMTVQYXRBR2VQRGs1YlkzNG1PRjZkdXNKTlNXWmlHNVZkKzR5eGdGdmFicjZOcUxEMEx0TVhxQzV1WGVVTUNsdGtRVUgxRjFKVGNUU1RzZlEwTjdpMkROVWxXTGI1eXNQQlQ4RTRqQ1IzZXRlZmJINnJnVi8zTUt1bHlMOURySzF2UkJKTjlsUGt1VCs3dkovWi9VbGwwSGcvWTZIWjd0MVJEdkllNjByVmNFaDNMdkIvSVBkaHBTRjloa1BEdFpKQmY3YWlvNjY0bFVVQVNpemtsZldXTXZUcmNDQVRncUxhTS9pc0JLcVRSa0xMUEdDeWpZUUZ0eWxSR3htT0JUZWJwZ2dYZ3ZheG5SeGpzR3pKZkhKS2JLUmVTUGZVdEV1UjFJNk04MURnM09ta2dtN0FVZm15cnVtSzltWEV0eUJvR1NiNmpxcW82ZGdRUTdzTjRTS3Bxd0FJR0JBcGNNNTQvTmdjU2h1dHRIVENuNTdnbmllYWVobmxMc2hkTk4rZy8zVmt1L2dVUWh5aUduRmxpVVFaV1NYelRlRlNvSy94UHNyZmhLeWl3WFVzbHNLUyt1bkwzWWZqV2dGdVNpT3RyYW5JN0lDbk9HV1hYays1VSsxVU9GbnR3QTI3SExrUmdoUmdYSFNsRFJpYmZ0N0haTFpoczZsMzJFM1RKYlNWNjFhNDJxeHZUVDdjV2VaWi9HdldUcDJNOEd0RjlFL0J5R2RTRjJQY2RQbVpub0ZwTzdMWVJlZnNuaTVVMmR1MFl1YnpiSEVQdFAyNUFsREFsZTVwVUptSkRsQUkyd2E5RFFEbW1vQlBablNFSUYvcjVVT29WOXBob2tVTzJUVHpsVGkrWHJyT2lOYmVKMHd2eXRkY0RadGRRNC9CRzVGVFZVRUtDZU51N2VQZnh1NFVicENnM21xWXE5VHJFUGVreGFycEd4NW1kcVFsYU5VaWFabGo5eURZSDhicy9HKytkMzl1UmxnTlJMWDd1UllmY2tYNHNUWDBiNWJuWFRHMkhOR1dpZ0liVEVEUTd5bFk1WnlOV0VwZmNuZUFML1l6bCtpOHk5VFdoQzg2dDZwRXJML2FOTWFEQ1ViWjYzZlVoVWZYNy9hOWdHVUVRcm8rYWdScWdudi85cXY0N2tDdFBMc2ZEWVBuTWRZYzZ5TUdBMllvTTZ5Y1Rlc0RGekxxOUtPRkhsT292c1hwclhuaityakpKdGF6RG5rYWFLQVZYdTVUczcveStwU3hDenREcVZYYTBPSUk3YS8wbGFPemp3WDAxZ3hZNkxDKzZnSWsyVThjbTA5ZTdBSWRxOG9lYU1xUEFOY2pId0Q5WmwydjI2MU1RNVJib2VZejI5SmJaUXBiQWgya21CcHlvWHQwS002Yk9OTWROSmU3Z2I3cmpycVFxNzF0Qmkza0JSSFIzb0VPT21MNmhpRzJ4UE8vSXl4eVBBQUlzK3lrUHg0M3laS2FjV0tjUy9LRUtOVXlDakt6QTlRMHhZUlFqZmd3S0Z1dHhKMHVPWmZ3VXZwY3prTHhPTlYxRDZSK250ZmtKOXFOc1JwckhsdGVuTmxDMCtUdnBDZXA4NmlQaW15VGpzSk0ydWlGMG9QbitaZDhtbTdjdllRQVNMdkFRUTZqT0VjYm13UGFBaDFqVHgxQ3JadUFZTG1Tck45T1JkOWVDMElZTXhNWDd1NnczZE15SjVBcUJVWitDU0I5THlJN2NiYUx2NTZyNUV6eHIvQXU3ZGp0OWdRMWJvZzZMeFREMWlXbXdwbHhnVUZRaEFWclVaS3NqRmc1RDNEejZJMndUT3RxcnA1QnFmbzE1Z281RUZPQTlyMVVBS0x5aUdBaEN2YVl5UjlWNHRXSnJjcHY3M2NRQ2NOUmQwZjQ4UmVpWGtLcW53elIxMzRraVh4aWpwMm90dU9sdWtKZlhEeEcwSlAxT04vMEdyWVllYWtKVlVsY0k3cWgrUW9VaXJoTHpSaGpXTG5ZczRSVHNrZy83L1VITWd0RmpJRE5MZmxxVWVDbXJZbVFkVkM3MTdqQjZrRkpUY3lUK1BvOFQzcWw1VW1IMmQrUXo0Q1JUQSthUEpvSWhQRVRSa3pVVHVDOE9PUmxxOUZlREtDaDVDcEVSRkhVckYzV2U5TmxlWHRMYWlhM0xQaW5CdE1ONWgvTXdYQ21tMFp2OUZFaHQ1Rlpua0lBRzE1elRCL0o1eUQzMXZtc0srL2dwUjliWEhWcWlMMEZVQnlYTnBxQm9OcUdXL0Z0T1Qzd2NtOFN1amVrc3psSmtSb1pMTDhrUkF1MGJBOFhDRVFhaDdUcVhGL0ZOUCtjLzdaWmhQQVMrckxIRWFzS2M4RGVsQVgyM1FWWHlQL2R1WmJsZ3hrWjd3ZXdXNmZXejhNV1NXbmowbUp5Y21GdXBMbzFobWR3T1lEMmd2RnpiRWtoZEtRS044T3ZkSDU0ZUwrNGZ2cU1tTHpHOHl0N09VNlM2RHd3OXN2enNHZDhQb2RETHlQN1FESHdSTk42S2FhQ2ZYVXhzdVd6RzdRdXpCSjRiL0IxYkc4aWF2bWtxWGRwN0JlZVBKWHVFQWI5U0dyM240NmZVZ3pGQVEzTHRjWTB3V3g3bEtrM3JsL0RJbngrS1FvbUlQeHZMeE9YcEU3L2QzYW9UMVd0cDJRY29naSsvTVZYNkUwOWpLc1diQ1hUQkpGV2NkOUo4T3FJcUUyMnVRM2tramZGUUo1SmhiNCtERXZWcy9QUEVzZjVuNERLY2R0TlFDY0xQQTAvbXlBbFFMQUVUUUdlZXdURmhHK2JHRlFkT2UrbG9mV3g5eXpNSDFoUWVXQStZb0hqZGpJN3FPNm1iMnhubFZ6SFFzQkc2R2VGbk1pV3NtVzlVQzl3TkNCS3dlSlhSamEwbFRCZk9OWU1GV3NsODE4ZVY0Q21ubzkzVHNudXJPQ0todCsxczUzN2RVeGdhbUx1b0dKeVQxRGlpSXN1cXRxdUpGV2E1amhTeVZpZlBVZHFoWWpBMnJPUjRaWkxKcy9RN1FuT1hPNE1LdmxrSmhsWHFPVzdnWkVJbVljQzBTNGdxYnBIcEl0bDAvbXo0UEk2RnREdE1vd1VadWtmZW1HVzFLcXlLYVd3b1FtZTl2VHJ6SkVMUmRNMDFMZlFwRWFuNEd6bVZRdXhmL080dlAyd0tYUjhjSy9YelB4bk9rV01QbnVtUHo4RmF2cGVVK3lRSW9JZ25LL05LS0wrKzRIZnBLZURwMG1JMXhqWEIremlBSDFKbWNYeGl2UUNGcUswRjNETTJ0SHFlS3Z1VWNzcXcvVGgxQVlZVmtmM1BWd2J6ZWFpRjFXNjc5VysxaC9OSHZOM245VEtjcFZZbGtqSE43SHZnaXpRUFQ2cTJ0dWFSVENITG9zaFB0RkVmYnJLOGxFSEZNRnhBVEs4eEZ2eVJUWGlxV0ZkbHVod2NlOEpIeUs0REhhNkVvQysvNWw1OHlJaVpUMjI5cjdhbnhSY08yOXpFVmtCZG1JbXdHSFBBUmtXYnhXMUVrSXA2UkJ4NnBrM1BWUGNidzcrdHBTNHNlK1htd2ZFSjlUUXFKUjdvSm55bTRjbU1HUXhtRjIyWlk0WUE4aWlQTFlNa1hDYzdLN2FNdjBZRENMd0U2eG04Q05ROW4rMGlzQVdqWGtsblV3Z0d2UGRWd3dVRFRveHdxeWo5amsxYXpuT0NmR0V4ZThPUGN2WmRXQU8xaU5zYlUvSVVPRHJYU2l5c3NWdzROSVBESUlTY1hqTE5jbEpjSjBjM1gzb2lXQjl1Ry95Vk9sZ2lvT2hmMHVqbHlRK3lXaHpDZzd2UXh2Rk5OS1JsNEpIZmtrL0NtY09ySkFtOWp0R1FwK25CbXA0UmlldVFnRUZEeFNvQTJJOEVZM0tlOVNRaWEvWE9VQWY5d1dTcmx4SVRTVDI4SUdKNFlVMnlVSkNsYldhT1RocWsxYnB4T3E1ZFdOd3VyTytFQk9qWXJwQW83bkJ6U2ZCcmgzdWlzTFBNWmt4K3dESUcrcFdERnVialIrQzlBODFJdkJiWmI1MjJndTdhSWhFcGI0Nm5GcWFZZlJFeUNObzBzem9IVE1KMi9lSmMzV1JOaVAzZGVaQ2xQNFYzU1gyK3d2SFJ3cXVBQnZjdlhsTHE0enU3Y2hyZXhmTGZHemNjVmV2cVlhZ1BvQ0oxNnRScmVDSW4vRVQrYzRPeGJuM2xmQWZxWndCUmFyQmwwUXRrdXBpRFptZWdZQWZIbmJCWUpnZzMxVTNRMVRXcjNBbW8zT1JhVEJmaGFNUnVBVzkzUEd1TU8wZy9VMTFKTzZLSFBKRlduZUhYMHRRbmNTcUZOSDBYZUZHSGpmdUM1djQ0Mnk4ZmFNODBybWVRN2NnWENWVlJFTWxxZlJtV3BNZ2E4cU5NRFhzOEIyRzRCWXhQNG9Kend2YW5PQ2ZVTXVjOHhodDBKOU96VG5Kd2thUm9nalBiTHhkb1RzQm9UMzdmZDJOemJHNTk0c3EzNTNoNXdhcHIyb0NuNTllTEFrTEdXeE5KWTk3aXNzNmw1ekZNM0FjK2R5MDRuZlZucG9ZMnMrbExuTEhySmdDZ2pJZlRzTjA5YUcyUXBZOFdtd0hFanJQcHFmZW9Qa0VQcStDSFhRR0srcWV5cmlyZFhGamZsSG1xNlNaUEJXMTR3bjJGU0ZlNlNMcWJNc3VpQm1GRk0vaUh6Y0d2VGJ0N1VuMm00ZUFpNVhGZzBHbmVLeSsyTHdZQlE4MjFweldDUlNadytZNkFNbkk4bXV4SmFLZkY4SkxLQ1p3dlBnQllObTIrWWRxaWZqbnVtNFZYM1l2V1N3bS9BWXFqUEo3c1VkRnJ4OWsyc3lzd0RNbU5qR0NpMVFpMmdaZDdoMWFNZ3lEbStqT01YY0pzNUxlUHFNK2hHNUtkeWxoVmJvdmJURS9MSHZ2dlI2QXRHa0hZaDBkR0hCQ2g1M1hyYkxCeUxHRXVnclN6Ri9OUHprMExIRkF0S0VWR0JYOTluaHAxR3c2OUo5RE50bzBaWHpSOHd4WHdNSDZxTnZXMDBtVis5RDVTRlc3OXI5Rm16YWtXY2llajdzY3Y0cmxiZTNGVStwN2FxSUg1aytiREdqZ3lJR3ZtUitNVWdoL3EyZDFxa1dZODdXSFNHVFdNOC9ZTlBOYjhUMGduQ2ZKalRVeWsvOFVRUFU0MkFRekMxSlhXR21oNG9hTTZMVmRCVzBjQm41QVI3bHpsWEM2Ukkyd2Q2WW8vUHU4YmdNZmpKbDYzRGcvb05RaGtlbDZFSnNVb2dCVnE4NHBjUndadTRyVFFIRjMyU3NXdVdlM2drYko3QTJTdzc5TXhnd0FWQXpFRjhlT0RQWWJtYWk5NkIyVEdleWVJc0pLYVZUNWt3UlRJUS9XYjhOWkNPTk5VWWdWVEhHaVJSMUVldG9WazRMUmxXQTBuZ1NLd1VneDRnR2tlZ3VpR1N5dlZVR2tpQ1FVdEFIVlhMOVEwNHloVHNENnpmOHBpdGhSQU9JcWxEN2pkYjRXSUpaQ1BrVDRYMnduV1ZMSGVQTjh4eEpjWGpQNHdCZ0JmTGVhTW9PcFdyZTRPMk9OOXBaZ1ZhL0tQVEpyUjN5NFp5L2FFSENmRkRQRUVTZ1kzOGpoV1ZiS013M05rWlhFUVFHbFNhSFcvOGlzZ3dvRkd4SmxjYmpwNDhHMGlXaFl0ei92aEJuenkyNlpOT1c5UUhnSndWSUFKSWxCbUdqL0tIcC9HTnlJSXBnWXN4V0tpMEp3V3czQ2l3cHhBSGh2OG9aYWZIOTR6dDlSNFFCTTFSRzZBUkFxVVR1bmhtTXZRUk5HZG1BelJLLzAxNitBZ1ovcVNWUFFpaGl5a21kdG05TFYwWGtNNVdoWXJudXFWTjVDbjdpSk1IdUdLWWk2eE9TbFJpY0VucSs5R0kvbjBCaWd0N3RENEJKQU53SFVlTjlpM2RzcnVDUVlDczFUcWwyci90WnhKRjFiSGxncno5bkJFTnhPckFRQkVMQTd1dlB5OEtTeTJTaHpTUW9JWHQwQjIwdE4xTlRoK0lNR082UWdmRmFWMGc3eWtFVCtPN21mSmlMeW0za0w5ZzZwTDdYbDVYaWNoN3ZuWTdXTm82RW9RUmdTcTVCa0M4WEhIeWRFYUxhTld0OWVET1cwRy9RSE5Uc3FNbno2NXd0WUpjU2d5N2JuZGRYczFGZkpGVFJ6NGU1b2ZNRGpKZ3A3eDh3UFpDd3RKd2wzcHk2L05BVkNoaXhGSFZPcDN1czNYMUYyY3BzZEtTOThvVFQrQWg5SHRNMk9NUXIwLzc1YlN6L01Fa2JXdE5YSm1YbDZ1M3BuMlo0RnU4ZEZFRkJCL1dmWWJQdUJyZWhkYm1OV0Zta1Vwc3RwS1h6N3UzNkc3ZTZYTmNiTjhTTFoyTTI2bVlsRXREL2hWMEJPSjBYN0dKRjQ4RDJ3NE1xdlFJMVlCdHkvSHBHYmhNSS9uN3dHT2x3c0llR2xWaHNKZGE5cU05SFlaVjlSLytka3pvRzB2KzloWWpUbEtxQVJwajVpZ1N5ZlkyNFN4TGZwWTFpSEJkMndzVGpZdmJlb3BBYnlTUFE3aDdtZ2ZHdXVOL3lsa3FoTnhoKzdabXFWQjNEaHlveFFMZ3lBU1ljWFdiYzl4a3FhMnk0bWRITXl0N0Ewdm5rTFBOTWVGSzlCT25sMktYSjNvcVpoZ0dqS29BcmdFemVsTkRvYUZNL0thNmZzOUhUa2xHVFhRYkF1ZEhjUnVyMmpXSkxwTXpNUlhDcEpjaDFBbnVSLzdmck9YRncwbzJsUDArRUw4bjBkTSt6QkZPcExCcDlmcDdpdlV6RlU1Snp2Q2Q2T200U2hzREVRRGh0akxiSnZOYUpGTGRYVTU4aklWY2lnaVIxMFl5S3g2QnY3Y210N3lWMFlrNy93TFZXTEo3ZXJWWlNCdC9ZaFJwSUtOcUw1ZzNNRjZINklHU1l2bUVwMzM4N1pRdWhzaWlXQ3Y0Y3NwTWwwOGNBTzI1TnRweFVoVytiQVpmVENUVmZ1aHJhSU1Cd3lES0JhcmluRlFYNWFVeUp2SEpIZnVVcXAwWTZnSjVOTUdubTc3R1BTVytZdXpwRGFjOGxGb2IyeVROWThtK2NQcXhNWGk1M3FzNzFhRkRTclVTU2JYWUo0TUFRSHhRM1ZnU3BONm5sV2I2bHY4VG9VcGNuYVpOVnhoaVV5M1RDWXc2ck42SHlqRWFaU0pNRGVkaVFtK3ROYkhQUlZvTDhlM3J0c1dtY0doZTRlVXVBVllIajNyL0VPM2xoSUZ0Y2pxWG93d0VoUWM4dW9HM1gxWFNtZk81andnditMaVBOYlBaV1pjMEhqdG9KSUN4Vld0dHFZU0lPRmdQdk9oTitaZGxrVVE3aWhSSFZ6L0t2UTIveTRKSU9TaCt1N1BoRVl0S3hFZXlUNC9XL0gzd21Na1R2eWZUSWh5YS96VFA0YXBjcFlYNFhBL2ZUbFRWTEV6WWd0WW01MHE3TG1tc2JPR1ZLRXM4Y2ZpMkM3ejJ3MEkxKzJENzlaWmVrbStLaHpoQ2w2bHRSNlAzTlkrajFGV3VxOXk3c21yOGRha0xjc2h0WlpYZDhLejRsWmcvN0F6dlcydnhrVnhNY1hUL0lCc3dwb1hUcFZPVzZTWHcrZkJJbWt6MWVSWHZEOFRBSXZsSXpJcVFweU83RldNekpaZi9JZlpSWjlJMGh1c3NXeVZ3dE5VOVBCRnBHajJuQUZjb1A1Vkg2aVVJZ1l5UkozTDFDMUtGQVhuN0dhYW1sazdVVHY5cmVqS1hRVFRnV0VPaUJlTHZzek1uMGtTeW1EVTFtOGZWRzNiWE5pMVhkMVdiVzdoQjFkMWJDcGNhQk5GaXlnOUNjM3RJVHNYWWwzcUlkTmhqTTR1dXBrOWpIK0NNaFF1ZzNVUnE2MG8rUy9XYlM4NjZzem1uWmcrTVdPSDRRZXBjbVNPVUFuWVIyaExzTnRDVlA2ZEtob1RjcnZKdzM1QlBONi9YcDduTFFlaEZ4MGpQTi9aOW5vVVgzS3M3aG1sbHV0aVJsZjl0aTRvaDltK2N2c3pJbTdDd1RZdVQxbjl6NGFDSWUzNWFjRFQ4RmNkVFNhNVp2L3psWi8xR2Z3RzRrdFMzTkdxcHlOcjJmcXBvdC9vYkUwajYvamhyR3dvLzVLV2xLM0VDNmtpd0hza0tBa3M1a0p3akNmcVB0M3c0Q3BGVEJrTjlvQS9iU0E2VzdPV2FTdzVOT1RSREw3V2V6MmQ4WVJDVnlCb0lXZjlETEVtVFpKL2RUOHVTVFBaRis3SHRhUXFyOEdqTHJpczdyTXFQS3E3djd4WHIySWpHYVNod25kYk05WWhzb3BHdnFMS2tJdjlWM1phTWVqYTl4SmlGOUdUU1NLQ3NoNkZwdTdFa1pPeTRtbHUvRkdSUytZQ0tJMWJFMWFqQXQ3RE9OUzJKTExhaXRhc3RFQmdpN3JWYVJ0c3BRTHhDZUJOUzlMcFBpSnJBYlRiK24zU2dIMG1Yd1J4aVZBMjVKRUUzb2YxeVRXdm5udXFYZ0FEUXZOTUVqWUY3bE44OTlMRFFxbGdFNzJZTkF5T0VVK1d0eWVJV3NpdWRUcVk2cDk2NVh3MXh4QVVKRUNWaHBDTHVNQWtjRm44ZHJwVWF3TTRHNEhkd1BhNG1lNjM2WTg2aDd0emU5eCtFT0lPaUNjdS9ualVFN2M2eEFzTTg2Mi91RHZLaHhYQ3BidmlWQkk2cHJ5NW4xYnBkdFJBdUY3UlZHTEpTUkZDU3NlYlZxQXVkTjhSTUxpcmxQa0kzV1RXbWQ1eVJaekdxd0R1Tk8yNVp2alFMYVh5Z1lleWJmajBQZzFZRWdXMjFzbzR0K2VvKzNRdDh2SGEvaGV0dzY2bktkZUp3ZWlENHkxZ3M0TVRxOVBzY0h2SGl3d2hVamMzZk5ibWJ3dW5nT2d1dnprbzE5dnMwVTF1SGNSMTltT25qU1N3U2tvaWlLeno1N0RyemJPODN5a2NvcGFSNDE2bmN6eEdrL3ZQVTdNVUpra1RLTDdxYWI1MVJlQ3Rac0xFdHc1OVVJVHZZU1hRUzl5eWZzNWY5eEZ0c25PRHpTbG8rV1ljSnQ5VUx4RGdkU1ZSbXpCL2UyYkRMVTg1RGVkRWlPb3NYTEY1TGF5WVdlVlIrcVUza08vT1lTdDRubVhxQkdXMklzNWVncFBMMEUyRlRURDZUN0tRTmhPSGNWOXM5SEMxWlBTL1d0RnJRak1sMGpjdDdsamkwbEZqd1BjUzZic25ielVHdVJrQkFGbWljUXltTjlNMVNSaTFqTkZSVk9VVmRzWjBhNE1KSVNISFc2MkNmM0tHanlpQW12cGZzM0lNYWhqWk52Z002Y20xQWsxS0dydHFLdm40TDg2N1MzUFl2Q3EyNFBvbGZNSXBZMkx1anloZW52VHBDL0k4TUtpRDEzUmUwQmNuR1RDWWU2SjYwMDB2Z21ZdTQyM0dTSnllTHVKZ3cwR3dZdGtsazc5MVEwcXpibkNIR0UyU1BseFVrdGJUbDNIVUg0YzF5ME5CY1paaDVoek9Gd2dzaXdtZUFvemF1TDNIUjR5WEkxRTZtdHI3R1gvbERGMXg0dkFwSU5FaXFWR2crbUYrdmkrR2huYVprMzkwYTdHTjRrVjVNSE9aOE1waE5VSTdoelJ2UkpHNUZBcGZHTThYa0RzTEc5Qldtc0pJRHZ6NEZXQTZUd3I3U3NOQjlkL3ZKak5RbDl3bDM5RWQzcXkxN2FhQkVVc3dXWVhQNi9pTVh5VFRGNWY4NmpXaTk3dCtDdzV0dHIwWjNyMzdaWGQ3emJlcGhTcEJiaGhMbHRoN3Q0d3oreHhDY2pqM3NKdXF4NWVmWjFQZDNxRWRKK3ljcVNvWTBPUVZNNHBUdndEZGYrQm5TWjJVZHVpNlUzVGt4OXdPamZpZWEvSUtBOGxPSERUVmF0ektCWW5JTWF3NWJUMGhMVmVvZER1a3pPUFBDdXJtVjhQNG9PUXZqczhZVGxxbTZkZytETExDRFgzUllpRlhod2hYRllTRnFCZ0VqN1FxRkFFeVh5ZXBmT1VyVmlIY1ROWW1mUDlTVTN1Yng0YlBWM0s3SzhrNTdJQytnaStWN2NJUTE5a0dBdEZ2aEs0Y1NZdDBYSzJWY3oyNDMyNFBoVEF0UGtQWS9VbkwvaERzWDRpY2prc3JtKy9ZK2RlTE8rK0hkSXpPSGpXUVBsTWVZUTBtdWFNQVBDK3pxK2VQd0Y4ODdCYkJKN2lnb1dBMHlZVysyQlF1cVVnZTdWMmRXS2ZWNnAzb0dadkowRGlEcjNKL3JuNHNJWnZpVHNiOXRBSUZBUklWYmxBejNESzFnR1Z3bWswZjRhU1hmaWhWUEIwemhZS3NQb1BtRDZQOWJvWXcraFVaM3FueWdDdmlRTlAxSWdMbnk3RDNZWVFaUWhTbVlta3FLVmhUV1RlQk16TXFMbENVcUlicUN5MnpGZDhYcSsrN3ZQWmVzTy9QY2N0emZ0MWxyZlBxS01IV2pndko3TTIwT2JnVDFyc2wrQUJEVkVVOWdweW9BMEVaUjZpTnZRSWdqT24wVmhZYURZdG5hTjVIZWhLQjZMUDk0MHJINitiMHZPSVBWYnVza25DYkFkNXlodDgyMHMwT2E5VUNwbG1YT2libm15T0N4bVBYam9xS1NYWDBsZWFWWGZ4bVh4S0loaGxIY3dzZU9DYmthRzBwY0lyOFZrOSs2VzNmdDNKM0ozcEhRV2JINXpVblJqSVVXTjY5VzMySVByQzQwZHpjejVOMzJPQ1paMExOM0FUWEVtUjIyZVJpQnpzaEsvNEVDNm1oZzFLdnVHMzlzUDFGZzJBZmN1UVBnd0w0VTRXcmNiVHNSdVIvamZneUdmTlc5eTZCbmJsV2JIMDFWUU15UC9NaDZrckRISUgxR01PM1lyLzl4WXhUQllkRWZXUUhZbG9CLytWUTBmWjFJVEd5eDd3UjY0cnV0VkxuTURNUTBPRlV6TXh0VUNra2l2emQxYUMzRUdCTllPQWVuMU1UbStQczVLSjJmU21wRkZUSHZWQ05wKzhwT203dDZQT0NaY2p1QVRCdWxwWkNaMGw2cTJ0NDJEaEF0VnN6aGVLbGR6eXRldkRJcGpUYm9Da3BEMDVuaW1XdHR3UUFYUzNhQldiSEppTUFvdXNnZHNBYXpGL1pBMWNOaGswaGxvaHVTVXBYalpGUXErWDlPZW1nSWVUQmowcHgyaFBDTVdQUGwxdkFOaGJ0YWp4NzBnd2xWdGVLUlEzVnlmVFdveWFoWWlFUE15MFR6Sk9hMVBFN0dmekl0ZjJ6bmxZdUg5akFFdGtPR2Z1SWp3Y0I4a3BPMmdZb28rVUVIa20wbW9mdGQraHBHWG5VZmJNRVZvYWZndUZ0YWhEU2xqdGVHOUNQVmtsMHRxaGxKTlBqcUR6S01XakVlR1cxQStMbytjcnJNSlNqWmFGUjRLYWZuTEhoL1pEb2kyK2p4eHNTdkxGdGRaazRsaEhvNlp1ZHh0azFLMmlUeGRXZHJBMDlndlhscW9yM3ZzY2FieWV1YVdDTXM4M3l6TWtTYjlsQXAwSWVkaHNDUU1HVjQ1V2JjZnNVSzJKalhwOERLNVNZYWFsbjQvTkNMekpHV0c5OFlLSFhLYnJoUjJjVkNwbmEzSGdwZ3FFci9TVzhETHdPWEhQVUhBRHRBQTBQMGV1Z1k3M1A5Skp1ZEo1dHBCaCt6UnVQU1B1d2dqYU1oWG92MUw0d2J2TCtlNDNFU1p6eFAwN0hqU0lCbWVsaUtWS3g2c0ROb2JtWVhydEszY1lZeUU2TlhtTnlkZEZ4eDdLZnNTYXIzU3RLMEFyRENxK3B2QjlhV0VnZ08rYlBCTlNpVnZ5RVQvZDJZaVczS1haWHkzNDM2Tzc0ZWRqazJPaVIyek5lM09GbmlrSTNpLzJaTHJKeXc4RVlGOFFoUG0vTndhZ0ZXK2lESXE3dEZGODlEMjRUUlNNZzNMTmFPaUZxL1V6d2Fiek1hVWhYcmRTaDh1YnNNQjhmcDZERTVyOG9YREFPNUtNajFSSHVoOU96UjV2c2h6NmV4KzVGYUhlYlZZaDNXVkVEZHF1RU84WmRZWUdMeWFFVmwzZHJ5TWhXNEpMYjgxcWo4NEx3ZTRIRWptUzdaZVA5R0g2Q2ZHeFQvTC9peHVtZExjeGJxVzA4Z0JRRkdPTzJYQTNaSE1ZMURId3NkdUxTcUdiV0V0NXIzSm40ckZqMlI3QXcya0w5M3VaN2c4dG1MRWNtSWk1YmNMaTRuekhzSFBoeG1oWnlXN2ZZSkp5NE84aThlUDJzeVZlUjM4QWNGZjJSQVNHc2NaQzlEYnJpWnJERjI0bXo3VlRjRks5d3VVMUx0WGZReUFva0dSU1hqN3JBdmZhRk1TSDBBR2l0cklmVWNKUTZaK1ltRFRSdnA0d3JmaUFYQ2sxRXdIaGlOc001SUxXbFlqV2pJSHFIa2lPVzdhb1puK3VHUUEzVEdUeGQrZUdOV1JyWDdLazh6WW05Tnh6TkdFMVFkMkxvRVcyMXRwdkw0TVJ2YlVWK1o5TC9ubWIxYUxFbW5GL1M4RWx6WXlXcWkxWHZYZjZoNUhvbmxRWVZib2FhdW4vVDFjV1ZKb3cwMk5td3Vlc2o5TWNoM2lMR3hGcTZadEFHQkRRT0Fva0RmbVJENTJNNmgwMG5POTZub2RJVlM1ZERmeDBodUsrVmI5cGdTd0lMUWgycjdPbVV3QUVYL0ZMbHFZc3Y0ekVNTjlJb3VEV0VkdEMzM0JSWU1aUytLVkoybE41eERJSlpreEhNTURnMktMZWRNNlJmeEdncy94T0pJWktadFJFWEI5aUZtNHZRR0t4eWV6bzlHSGlXM2JpOFVNMURhVHZTTUNHN1BtdWdyaCtYRjZjeUlRbHNEenF5cFg5SjF5bmNVZzRGMFRKQ3JqVStWSDJsTDNiWjdENjNBdHBTMU82NEZOb1dFRXFHczFwNVVuY0x5aFFkRlE5ZE12bXNnOE85ZlAvOWpUM2cwQ0ZybCtEVm1QK09waHVZLzRVVW9KMFR5OGx4SnpVOUlJUUJ1QnVrR1FIVGJzbnhoN1F4TzY2b2FsNW9xSStlUUtnT0hYcTVJQUwzeGU4RFhEdE05U01jc0h3TU1KZmxQdDZJc0dFUVUzbjMreDFoZ3lHQkJEcXRiRVlSTUFFU2lVSjJuNVBjRGh3RnhvRWU5aFJJOGd2ZlpOaXlva1ZsUWpqaFlCNzNvOG9zaURFSDJNQlc2QjVDbmNuOE10WFc5QkNRVkNBaVIvbVI0TnRFS2EvdnRyM1FnazBuVzhsRG5SeUE5MUZFZitiY3NiQ3BqRW11RnNKL1JCcHFwVnc1eWlNZjFXZlhicjVEU21lR0lSejg1dU5VWnhEcERsNTFRbEMzNGswbVYvZXJSUkJYTEYrWmF6bGRIVG1lODIrUlhLUmlrT2JxOC9aMFc3K0twb2QyNzFsQXRlK1Y4czhwUW14SE1ZWHQwK2pzei9GT08waEtjWXJpeHMwaGJhR0JlMVF4WkpBbmRDYmZOODNuZTg5TlpDQ0gzNy9nQUcvcVk5UTZCZlNab0hwdmJPSjdwdGtBS2VOM0p1KzdpcEExMHN4TzZzVko0d2dLa0VoQmU1czBpTExVdHB0cU1NRmtscGUwUDBiRGJoZy9OdGV0OTFzMlF4aStjSFNkR3lqcmpOTEp3a3M4cGgrd0RFdjBkMGRKUG41VTF4L0pUWXZTQjEzRzFCUGxHV1grL1Vnbm1nYmsvb01HTnJtVWx1TmU1ZnlCV3NsaSsrSVNYOHduV0ZuYlUyd3dsRHhPZXIvNkFJU3FYcDMweGVlempRcG14V3g4Sm93RXlpTEI4Tnl5MTd6WmI1Z0JZQTlDb3l3bmlGeGtrdVZ5UkRadlo1VVN3NUZ0K29ESGxiTTBSY0J1Mi9NcXFsQkZTcHE3ZGFMUVVJeG4zcjFNUXJSdnBiR3FrbHJzbElVVm0zci9WTTVKa3l4QTdjb01CMkRadWZ0dS9QUFgxU3BYSTF1dlVqcmtiUGFUR3RLZkNkYUJlRTU2RmFRTUxBVkI0b2Z4b1ExcHduYXB5elBNTmJGQmJvSTAwRnpuQTJtOTlxVGV1MDh2b3YvWlpQRFdpTnlOeXFpMjBpbUNKWGZtVm44bStPMWxrQkFrOEMrb0VzbmUzRjMrMzJOZ2l2dDM4MUVmMHM3bGNXaDV3OGMrY3FDeUlFNEU1bEN0bmpJL2x1cDdOdWVPUnFCMnRycnRNRWgzTGNMOVR4MFJ3RmNiMGUvOW0zRnlqU3NJRTkvWWE4NzNkbUVmYkoyZVhIaW5VdHdaZDd1eEN1VzhtYzFuMlJBbjNEZTExVWl2VG0vSnZYU2RCQzRaMWVrSkNGS3JCNW9MYU5mWlUra2ovUzg4eVhHcWI3N0ZncVlXNUJ2OXZsVmVGTjMrQ0NKQkc4S0pVSzEwVTlNUDZKVkM0VG9RaERPekRLVWpQcmxRbzBQZmRITXkweFRGZlJoVUFkM2VnMUtvdmVSd1IwZEprM1VPbEdVVFNpdWEzeFdmN1NWR0FpeU9aNnBzcUx5cExhcHlQbXBGU2ZQVmIxR20wNjRSY1hnUWxxYm9mUVNGOHE2ZlAvT0VGdHNDTllOU0hnSFI2QnlMV1NaSXM0eGE2UUFPN3h3OCtoTVhNYzVJU20zYUMrU0lUZlA4ZEhPaXlVaTY2aVFPelEyZVhUNXFsclJJdjQrWXhFdlRnV2t6bk5CNWYyVEZvbTdmWW1LUE1zQUhiWDBGTDVLcE1uVGF0bDRRc2l3WHpoVCswOVI1UzlmZHlaN3VRR0pTZ0t6VWpPVDRBcnVnajRSd1BEQkdWeTdSZmJwUmk3bjJ0ekdIazZTZk5VbmFLVEk4OFlETm4wZGVRVUEwRWNBbFBnVk1SVnYyN1RWcWZDZ0FXUGo2MC93ZFNGTStzZEt1UnhlNXQ2WkRGVXQ5V0pmanN1NFM1cWRWNUlDL2VrR09mN0NIZ1ZQOE1CZ3oraThTM2ZQQy8xN05hMFUvYzYzTUp3Qm9HYnRPVitwcklScUs3Q2s5d3lMVG1jelh1QnFOdDVFcVFyejNGVk9ITWJySFh1RlZ0K2JEcnJZbGJwN0VwZTBjdTNiSE96UG9iVDZ3UUI1WW1CNGpGSXBCUldJQ0s5YXpsdnhHaGNwU3Z5WithaUhSQTYwZGRENTlPdTI3VjlEWFh6V2FONnZXS0RHbE5VMzZ5ektpOEdxN1JJMXRiZkY2Q2xna05uU2dUZ0dsYWlWZlphTW9GUkNmU25aR2ZkR01tUXNEQ1ZVWHJ5TklnQk92ck81WDNMeC8yN1pOTjJ2Rkt5QVQxVlI4OFB5YzJyZ2lFVUJqR3JxVXk3WjFoZVgyanc0WEU2eDJQVmdhNWk0Uk51c1JHZkpBbURPa1pEbTAzVXpBaEhPNjZuZWExSkhwOVZDTDB3a2JheUVPWTdDQlc0Q01sbGZuMml0ZFV4T3NZNkhjTEppRnFLS1BDSUJvaFZ2dzdGMlFvTkJ6WFN4TlhJSEc0OXNlSVloak9ZOFJ1d3hjWHJ0eDVmUUJOVERFdG00UENrWmE0bEs0T3JBYnV3Y1VXNnp5RklqNHFnbFNsWnlUT01XdFlSYzR2U2NINTRvMnNDbG9ZZVJtZVV6cFR2NlhISlZZMTV1dFdNOHlaSkQ0Q2tuQTBmcGlCUmVSeGtSa3RIeXpDeVlSSVRLeUdhVHRGb1hmYVNWYjYzbHd6RHgxZzJKR3B4dXpIYWV0M2RUWjYrWWdJbWJMN2NSNGhnS1FpWDBiU2tUYVFtQVRuejNNSUZWZmNuYjJBbHZUZnE0VmpaODluMnkzU09zbEVPR0E3UWtvV3V3ak5pZC92empRRUh2akpNUDJBQTBQdFBlSW9PL0xtZ2s2UXhVRVZ3aWpQU210b0dyaHFrWVJTdUg4TytYWXJSY3laNmc3WDUrVWVScDdVdDI1dTBjOGIwanRLSnczcWc2bXh1U0loL1g3MDVIaVNlMitWcTlJK0t6clpWTFJMdVRIQzI2cHIySU1mMEVCRE1YNERsa3hlRE16K1R5ZjFVZ256NFRHMHdmUEt3dWVCbkI4VENQWFB5RjFuZmtBZWY0elNSYXY5aGhxMDRpamVvcjh0bU9nOG1GTGhjSFpnTEN4OW1MOHZ3RWdaNjZudDBGM1ZMaGhWS29OdSt2MFJtK2JLenhGSkREUlBPNW5DRFB4d0FrQ0czNTJvQ054VGk0eW5jYS9oWXVnMkZvUHF3eDl2RThlQjQzdVJNTVo5RUZvVjNrUEwyOTJId0ZsanVMUVF4bVE5ME5FNmJzcUw4ekQwb0xzTWV0bnZPdVVsdWRmditZUHRmcG5PQkljckRMbkdFMDl2UWh5dnhlUmI3VVBiNFZYZnpIMG5tdXRuaSsvYmZsSk1yS0pMOEhhbTZldk9QU0pUdTMyS2ZHWUhEMGdhWUVuQ2FjQkVHdlRSbW5mNDNOaEg5ZHJLU0lvQXgrUXJNVG1CSGVQQ3RyTU5rdDlXOHlsbFM5ZmMxTU81TXVweWgzYVU3amZNVldOR2t3dmdHR1VJSExWaFdEMGN4bzIrWEJwYnRFNURzajBQZVd4ZlVLa2x6d3h5OGdPMVdhSjZlaFJOc1VqN24zdk1Edlg4KzYxMDJtVUdxd1FYSU1ISjMrWWJ3UTc3M29mTXBTNk1MVHZRUll1SWd6RDRuWUJQaEpmL0dwV2x3bURXRlppbUJYNmdKY3oxQ3VKczJhNWZDaVRyZ0E5eU1teUlyV3R2NVpBOEF4SlJ1cERaeDY5ckxINXVSWll2bDdVcEl1N3pYUE1iL2drbmtkdjRqaFpkanBnSnNMVXNDNFBEa2VzaHhyMW4zZ04xQUx4QUtFTkNHdzdlNVozVlcyd2hjWXFFS3RGYVd6cXEwTWh6MHB0Qy9VcWphUkxGWXM2M2NWc0RsOXlDdUxQM1MvMUU1SkhqK2JmOVdGczZzcUVLQysxN1ZDZlNNOXkzN3pPRU4vQ3ZvUkFxYit3TjBGeVlrMXg4VXZkd3I1VGpVTS9wRzlMZ3NMMVkzTjExQkhwQ1dteXVuT0thWVJ0V2ZILzJoblNGdi9uR3RmZEVONUZQb21FNG9iRTFSOVlPK0d6QXUyR3NVcjNHdEVMeEpHT3NZOHlIMXc3WnlTaktPOHJZR3c5ZDlEQjlhKy9zbmZ3TzdiK25kV2J1MFZRaHVKclVnNC9YNkhQSFpjemd1TVZndmJkblBuMk5WcWltMDRwTUNpQXp5aXUwa3JldERSMWM4SXNIenNlclBFZ0ZaT3NLcTVZUFcyWkJGRkd6Z1VwS0NOQ3A1MERPZDdUZVFPb2dER3JRQU5INGp4UlZobmp2YWZ1dHI4b1I2MUhLaWh0bFNJOEkwUGZreGFVTXVrWVA5N1hVMWRNTnZmbXZpQ3ZEOFpOdjRvNnFZcTF1b3J5eEZRbFRDdnBTeXJrTG9MWDV1V2lzKzljMFJsYTBBNVMvd3EyaUV6STB3ZVA1YUFsVmZPMEZDcFJ2ZEdTdnJjN2VBQzlVQTQ5QVhyZjFzeU1SWFZ5RHJBUnI2SUNOdE5lSTdUMW9iaFhNZllRa1NsQXdMK1ZWcWZKMGV5Rk1mL3dOZ1dwWEFQajQ0SGMvNWNtMnIzT0Zqb29yUXJnU0RCdUlFUXVaMnVpajBtY2lXSVpiUWNPT25xcWhKUjFKTG5TTm5nN0FWY1Y5K2prc3ROcUhES0kxVmZ5ZXlqQXZ4QmhBMXBBVlpsWGhYcHV1N1FWSnROcElDci9aRTA3bXFUWGNuNk9BOEN5K0FhR0xkR3FyeWR4N0oyV1grdU9uS25JV3F6WUhIK2lYL25MUmFBOWZtZjhRTnRicDFLRTlEYXU1aHZUMlNPKzFJeXR0bTRuNk03c2FDbllhaTdtUG1PVUFtVEhIWmx6Zm5EUlFIck1oRFFFTFV6cVA4UkM2eWNvNU4xa29HZzMwdDBFN2tJZ2RlU1hsRDYxampNNnBHTld4a2tBWmlKaHA1MWduN1dtVEdnY0txV2M3T0Q0TGtkWW9xMk56MGFZTm90em50U0wzSGNRd0tMRzkyU0d6MW1GTm5TWHpBZGFjLzI4UzJDdXNSbjV5OVA5VlVGNDR1bm5zOTB1TE00UnFOSGpiWDQ4ZkdYTVRCdmpjWGwvd0hNYWxHQ25OWDF4QU5SVjZoWUdxTGxFRGpxQlBIMVloYURYbVB3M2lqUm9SaDlWS25yRWtXZ0Y1TEJRMGZiSzlHd2FQYXJnaDNNUnZFSkw2cWpuVzcrbG1MdHNqZEpPMEc4N0ZSNzFYd1NTVEVGOXNTWXhURG9WMk0wdC85cEZwWjIxQ3VYNHdER2d2ZDM1YWRodGZSNEcyb2VQSW0rN01iSEVQdHdHRUJMVzIrNFYveHN2TDNEVzR5c1ZlNUNHNHp1YjV5OG4wK2hnZTJ6WmpUMWZuS200MFdlUzZONCt5a0FnYWFjQVJkZmZub0hLaFRXZWwyMUNRZ0Jld24vNUNRR0EwSVlzbHEydlZhVXJ0OWd1N2JzZnhnVEI5YnpRbXJrazRIY29KZU1iRnVXN1Z6TTZJamNzSCtNcDhHcXVaVmRGZG9vMEtHOWplSkQ3Um4rV0hGcEVYaEtRb3pIaG1tZzRBZTFVcStiTGNhUGR6S1RKRkZOUTNxYnBQQUZWSWVzbEVPRnRiMHZ1MFJJRnJVRG9OOHVvUzhXc1JLNG02K2N5dWVoeXNyY3Q5VWZTZVFjMkQ1Nzh3Qzh6T2hHNis5ZkVHaDZ3UFQ4UlpJUlJrUGRBSkV6YWdZS250SmFibzRzMEFyK01hRTRkdzZxdzZVZEZIa0dZQkRDUmhmeWdVNUtmS1lrOFNXOVVnZllMbjk0QjMwTFZ0M0ZObHIvNk96MGFBd0o1eEQ4RGE0dFZvYWtQL0hqemZPYjN4UTVqSk1rc015bDNXdjdCS2Y0ek0yVkJLRXFoeUJFdkt4OC9yaGp3aGVKOFhtQTBYcEhtVy9Fckw3N2tyemhRN0VyaGExeWdmbUw4dWtFMm5GNTJVcEF1MHV0cUMrMTRBaXJrUlYvVlV6eElHLzA1ems3R1lIZXF2MVdDQlljQlk5VTFQQk9YVWJjTlVnT3FwZHdJUHBSMHNabDZFZ003K3hhRExMd0xBVVBwN0RodjluVmJpYWM5aTdoKzFjUUhaZytNVGYwYWhPdVVSdkZyTEV0R1BKUWV2UTBKSjJsaHg0U21PK0huazBxSGRVdlJaenU2eXNPc2JzWWFweUE2a1JyOTBYN2FROUxsdGZ3MVI2N1ZrclRwQTVrV0oyc0U4dXpuVkVEb2lpQzdkayt6WmJRTW5lRVpMTE16SmNyWGRmbDN6OEkwM3FKQU03bENuaTdISDdzWUR2ZlNMU1pFSTlrTmJWc21iSkZHOEh5SWFyK0d3d3FBVE80V28vaVJ5N01IN1VPYTY5cmxSMUxEUjFNRTBnc0NBSmpTcll1eWI5TzRPLzBQaTlFWEhtSHJhZGZhbEJpRDl5VlVESTljVEhDOHV4RHp6ajFtQlNRT1JjWG1HYWZJU0w2dVNUbWM0WjNONGZSQVIwaFFHR21hUVdzNGF6QkQzK0dtVmh2SFFRYzIyc3hCZHNmSk05U1JlRTFzZTcvVWUxY0tUTUl2SjZkMStlL2xsZGRkVzFiUDQ3RTlHNnY3Rzdtc2c4dGczUlJrSm9tRzRKNVR3K3U1K2ZyMnpJV2Z4bjVsYzl5ZmpqbVpOcGtVMUdTamhKSWxkbUdkbjVMRUFnd2Q3MVZzckZ4c3Jld2NxRnVkOVlROEVJVThlRjZ1bDk2YTl4dzNDditRKytWVzhwdzJ4TlNxQzNmMVB6bFd5Y281Qk9TM0ZxeU0vaWpyRkw1RFpMMk5BbHZhSzZIUCtqWWJHR2RsZDZPc1JORldKaVhGS0tjZE54QXpNeWRidkJzVmlvdnZTcjZBT0l6YndSdHZzM1h3V3hOUlZWcncvQTIwOS9WeG5URGRPNjdFREw1M2lnbWNZSlY3bW1odlJZMXRNTzkzendIUWU2ZDBqL0c3Z3FFNzU3Wi9OWHAzNit6bzcxd2dydTIzRXVnL1pFanZFU3NrUmd3S0RxSDdkMklwZlRVODFVWmhjWmw4TFIvdUVBMThWSWtJL1Q3SzlEd212UmJkNnM4M1dVZU41ZFhBYnZScUExYVd0TFZocnNHUXg5RXd3cU83V2ZCOUVmcDNUb1EvZklzcW03QXJrekI1NjZBOVpCODRwV0V0OXFnbzFVVXdLMG9mM1pXZ0lMT3lVc0lDeElCYlJXSllOTVRsRWYyVmQzTnNmVnZ0MWFJR3J5TUJBeDl1d3V3OEQydnRpMlQ1cnB3N0s4Tm0wOGhrUWxLbmgxelpJN0RTSU1RRVU1S283eTVSNmpYQXB0bitVTkNZV3pPZXNXMHdEc0dPdGowZWdwTm9Ha2w3S0pWdlluM3ZiTkJieHZCTEJBT3VYYzlwdGxxTnEvVTJyZnI5T09saWIwVnUzaGVQRVlmWHFCUkJsMGM3NWtPZ0E3M1BKOE1JZEc5N1A1VUp0bkRNbGJudUltSEE4YVVITUFHNzNEU2xjSnhHbEw5Q011YXJqV0ZWQ3lXKzh0UTlqeFRKUWZndE1YTCtjRCtoK210d3ljTjgvNFFvYUIrT2J5ZjJSbjhuTmpFRTVyT08xZjRCcWRpQkE2UE16dmRid1lJOUFRQVZwNEVHTTNCTVB4VFlNV0FwQVM3REhKZmZWcVg4eDUxd3ZFRXVSaHQ0c2h5OUxEQTQveFBOTW0wbzBxN2hBRmd0Z1lieE03OVZqK3NyOFRhSlMrMlNXMGpyZExhLzArZlgyS3gvK2M1dFFMREFzMDhJVHUzbTBGSDNZSXJiWDhUKzcvRmZUZ2xXd2lmNGxvaWpyaGw2TWljQk9xNmMzV1llYUcxc2VHblB4MmMwK2puS2VLU2FWMUdhKzcvMXNHOXBralpxbGFLUmxGWjZvc2pJMlhnTjJzNzcwbmxNSmN1RXBIQ1FHeG02YnRTeEVkbllNZ1RlVGcwRCtnUUZsMjdFRVA2VjNSeU5FYzhmell4ZmRyRkhyaUFoY1RtMm8zVUdHL3NMWWg3MWtlYlk0VDBzKzMxTnA2VUNzU0IrNU5JbFdDOUhyWHpCRFY2UlROK3dQSzNJVkU3RDR1dmNKSHBKaDl3eS9vRG1NcndwNzB5Um8xK3M3RmlveHRGb3l2Y05DVm9hTTBNbjI1ODB1dFI2Ni9xcENKMjByZEhsaU0vMzJaQmpyU0toUnZOb21rVFVVR3lNdndmUEJsck13RmdlM1FWeUcrQXhVZHdianFBMjBYZ3RMTGtNV2RCSmphNWtDdytYc3EzK05YVERJTTJCL0NrNlk0bzN5Q3laazNRd1B1ZVh4eCtGN3VsSVFhaFgwK0RZK2JPTkErQnpScGJvWlJIbnRiVTV3dzR6ckFwdlVSeVl4MmhkMEtxOVFCS3JsM2dxZ3M0Z3M0K01vRTdmaW1aR0pHMTFHbXFEYk5XUzdLeDRML1pVMTc3bDBJQWlDWFVjRllueGRYSnpPUVBzWEI1OEVweXY2WnhoMmlkQjJRczYxdUx6RVpFeUNIb1lYaU5Na291NVA3TGtJNGo1VXJMdElienoyZDJtSlVOeXlGcDJDY0RBamxnRFB4MmYyK2pXcnRsWDE5aC9QTnJxRlFZQjVPWENRYmZhU0psazF0S0QzUFJwYXM0Nm5iVlBOaFBDWVdzMkMwRC94Qm01UGc0T3lZeVNEb0JIaGZhS2hXYlNpa04zV1BGczBhNW9YN3BwTmN4cGNxRjlvMWZWeStlak1WOUVKK3RGeDJFVnpnK0RZTjdET3FGalhHQWZRVHFLMURNY2pkbzJTQkxvNGZRZVZsVSt6cFVHSXdhTE12WDZWYlcyenByd1VScXlwQUlRL1hjS2dFUzJ3bDFVY0VQWUswUEw5S3NacUhuTGxmRzhzdWhzU3gzc0d2MFZESnFGMmM0aG9xcG55TDNPWXI3d1hNWFVONFVaWDJqZlMveElTNCt0TXNidkpiRnFwWUY3MDdPeDlsZnZyVjQ3bEJHZE5qNzR3bHlVNXBJd2YxdExWME8xN2xKVk9lUE5INnltZzBTdDBPNVBMdm5JMjBQRnhSTVUxV1Boa2huMzI3WEdNL09oSVIvTmg1U2lPcjJiVkhhSis0RzZ6cWY5aVg3Vk1WOVhzdUh5a3R4amVxcnpVOE5kN3lHcnZPNWN3RmdlNVVCcVF5K2ZOSnBRU0NiZytyeFFuVlpobzdxSmowR2JoaFhIenB4cHFrMnJrdVZqTXhGUktnNWEwNXI5ME5jdkpEN1BmQzhGT1hCNDFlbGxjWHJxSHRRQ1kyV2FOdzBEQ1lUbTZnYUJjMmRHL3Zodlp1YmJzTTl2S3JNRlltajhqdlVQc1RzaWJvM3ZQdUppbFIxV1IvZ2VteDA3RWE0R3ZwRHVnalVhbWFmRjNEaXZSYmlqUWtNaENzYXpacFVsMDk4eEs4SWNYdlpZVWNEYWdITk9iNWJvWk5nalI5RjMzdmtmNU1YRXlzM1hsNmJrRFZmZlRUWk1FNTVrRmROTmt1VkZLRUlEdE1PSWZjY01wb1J2dWxTTDJ3Z3hzekVlUFBqMDNUVm0rNVlzTEp2M2FvUm9FUHVVUEZ3RFl3ZXNkS0JSZ0FXZnp6T01lbUJYWlBiVGdkMzdhdlpjM05KZjNKWGEzK0FpbkFiZjl6eVhvbmt0UkxGZU9hYlUxT3dnZlJ3ZjJnN09wOHlPSVZVVXFXWFI3RkNWaFBWZ1RQN2UzUXJtMUIzd3NxZGJBTzE5bHFyb3Z5dkxVYndGVkJnbHhZeXFObHlVNlFQT3VnTm5MUHg0dFA3bUtnN1RJVjZFd293MS85UHZFVjhTSlkwREZBWVJ3cnhMdDVYSUZmYVZQQ01GWFMyZDI5SkVGbWhhdFgyOFpjZjRGSWErTk1HRkQydGk1c0J0aGExYjFJVlBmN3ZDYkZ5c2hWcWpuTElRMmwzUERMVmI1WFpadkpyQ0h4TmVFODZuWkhCSTZFS2EvTEFPS1VkWkRCZnU0ZHJpM0lBQWo4a0ZBak9kZkdPWHNZZkxybk5qSE9SeGVzcnpDekplRUxnUGhOSURvSkZSSkJHWkRoRmdJT2VtVnNma2QycENhR0xJUThQT1NpMnczZFprazlLallIZytDbTVxMFRwZUIrZUorU3EwbTYya01JekgyTXVTLzhvZ1NtRmdTMUdSSHdqNHhabkJYNnZUdG92eXVDbEpRNXV5c1hHVGQxWFBJSHoyZ3dnK2s1TTRCTVVLYWc5ekNtUWdhYkU5TTFxVExZM0w0Ym9MY0U2K1JXWmpXbnZDR2Y5aFpmRmlZSmRDTTRGMGZUNlUvQitHbHRWaDE2NHhWTlZLRDFCUEpmRWM1SGRsY2xPNzFEZnM5aXJKSTRQdCtaNnpaU1NpY053L1dXRTlScWJ5Z2o3MXdqWnkzVldoOURVS1ZwMnZnQWt5K0FhRjR6NUNiWmxwbGZXRUhoUkhsQmFCWkQ5Q2lBYWFzVW00ZUVUa1U0QUdiYXhwYlBlc1FRV0RKT3VCdVN1S0Fuck1tUU9Ga1YycUVsNm1KYngrSHZpSzRXaTcyZDQ4L1ZJMFdHamlGM1FieEQyTVcydDlYc1BlTlFqbW50cnhhcVJEdStVb3ZGS0tWRm1rTHdpZy9McXhOanMvaVB0T21ZbkpSY0ZHREV2aUpYK2dYQXE4bVVCVFhReXhleDRrcHdGMFoyMlhxSFJQSUhXWWZvbXQ1aVBGUnE0aVlRMjZwOFBVeFJPM21XOU9ZaWY4R0lSQ296aFhOMjFRTDUwWHI1UkRadVFRTW9tMnhsS0R4OFFhYWd1NmoxUjZQbk1Vd0owZ2lydWZvTDk3SHhRZ1ZkTGU4d1lkamVmdjIveTN3d0NDU2o2Q0E1aEljalJZTnNvd1AxRXZUbTBQS21BZit4amtlTXVYcG9sVzRKUXNDcFVWRW1tZnJXSlc4OTB1cnh6YW5jYU1PbWxPRlJRZmNuSXlrUDh4NkpINlRqYWM0NUg5SEdJbHpWUzcybDlZUVRRSnZQcWltTERMUXZkYzdmNUQ4VFBrS2J4bWlsNGtwRGt0QnMwSyt1WHNMcWdaU29QbWsyUWp4ZUJXb2tqcnVDdXQ0WDVIUTRYVXlseHZ3WHN2R2k3TG4zZ3pib0g2NEJoQVVPbXNoZTNmc2VSWGdlM0t2K3dzcE4xN21zWVVDdlBXYUo5cVF6bSttN3MxdjNRMmwrUzlnMXcvL0lSSnozNkJyZ1JjenZONkpXNE8yeXAxcDJxQVZ3c1doNG43d3R3SlBWdnAvRjJsSlNNOWVzOFlxRFlXMFNGRU9mTmZJNjBoVDZoWVg4TnlvVUZOSjZoY1k1R3VGNDZPMGFBMnNieTF4VmtVbmRhUGFhUE9rUjVZb21RWXVCNzUxSXdZY2tEd3FQcmoyRDhYSndBM3AvbVBIR2luN1FJdHIwakFybUJuVXplQllNcS9NRlJwQVMyM0hJakZCeWdMQUF6dU1HNnlWTVcxeXJPZ216dk5zdi9oejMwM3hjb0MrTXNxa3dGWFB5a3ZIOVZUMVVBMGVXNk1LK1lkQmNvYXZndTJnYmMwZlRIZ0dmTmx3MC9MNXMyWVZmZGdaZExNT2dlZnk3cTFRbEVCeDdYN2JrMnFTenhNRjlrMWtDbzA1eStYNXc1eXFob0xoTHhvWjRuZnExRm13TlZUOVA4VkhBS3c2c1J4TlpYUklKVlk4czdMc0J4Mk80UW9SKzRkV1h0cmdiUzNlZnVxQ09zcE8wTlFZVUtHL1dsVXRtdU05WUp2VzhpOFhWTENYc0dUSk54OWl2VG5pYWl5UW5jemlSSmpxRS80aTI3bjFvdDh0aXV0VmJNNXhVODZFNzlmVFZabHQxUmFjNWRiakl2N0p5RU9xOENaVHlpaWJEdEJBWVQzOExucTZHQ2lPcDd6OHpxTmFCeWphYUhzaVp2dUZXb0tVMG9kTDJVVGY1Zk5TaEpSaU1BQlJTUENjcmxnK1N4WlFNR0h6NS9GbEJ5VlFqNFArR3RvckMySjFQUVV0NGwvY2FoQ2RNQTVuR3YxcUNEd2tLTUNCWU5qejN3WTlBbEU3TS84OUJUZDF1R3ZqUlM4WlJSNDN0NjZOWnQ1Q0t5dFc1T29pMkhOZHpPN0JCM1VCWmI3cG0ydGpUbGZMemM1TDE0M21LZlE2S1h3b3RYU25BWnhuYnJLeWVGc2JqNU1yQ3NkZHBSWEpHVjl4bndiL1V3T0JxU0QwZDJ3VHZna3o5V3VGZDRQcmJPcGluVDlJSFBjMjh2S3NLejhHS3M2cEF2SHhaMTdvSW1ld1hjT1NobU1uYVliaHJuZ1haYlk4bUlZa3g2ZVA3bGZ3Z215WmVvYlJVUVVlWkZuc2o0TysrK3plelRVVFd4TkZqWFhUczZmRm85NHBhT3BuQUJOUkxUK3RKKzFkQkltTXhUUW5LSVBwUnRQK1NIcDZDSXZOdDBSQkRzYWdtZFhJRFM1RHU1L2FNMU1ITVNLNDBtdklKTDVQb0RUZlAvU3hYOXp3Z29uajhyQWsyU3ZzWVdXMjZiZnp0VzVWL1FycXhySG1kcUJNSVlObi9FY0U4WjU3OTJTbG5mcFlQREFWelVxVDlxYmNZcXJXaGt3YURKbGp6enl2TUZ3eWJUSVJzVmRzbUdtS2ZKZW9xUmtVMWRzWDRSYlUrd2lsRjBRS01rRWdLdldZR2VGc0lTcjhGYnA2WkhiVTBTRXBITlMrVGIxOUV2MWNBWndpeC9Dc3p3L1BaMjhwVmd6SzQwSHYrb3NVbEJGTFhUT2Ira1ZXalZVUDM4UHZvZGdUUjg3REpmZzArOHJtd0JOMUxhak05TVpvRmZlZGp1djJ4cm5rZUtHbWExMTQ4WWpTSW1BWi9mRmdvZmEwb3pLM0xnaE1yRkl4VGxuNzJ5MEZMczNxV052VHdyZ2xIcFM5Ylp1RGlzZExuY2lYTW1zSFNtdjFmanhzdWxnc1VjVTdLUDVxVFBCZHJmSW41TmNldUlDcWxCMzNYTU1lVmNWYWVyVkFTZ3lZNHpIaVpMc2loVlVEQ0wxeTA0Z1htSi9XMVlJWVZnUUlIQkxpdUMrdnlRUkh3TkVwMGV3OHd6M0tPV3pBMmhrM2pzdTdDcTdrSXVRSjF3MEpvRVdqdnJmT2pEcDVyK0Z1eno4eUlQTWZ5eXlrV1RIR0pZY2JuM1M2eWtYek8remdVd0hQN0dBKzBMVWlKUlVsWWwwUUxKOXZmNlFYcU1DRi8wdU5GTFNNOFliTWxScUxrWS91QjkveEd5bEUzWjhJZGxtMUFoRlVuK0M0WDRmMmV2OGY2SXBjVGIwQ2l2bXlFVXBFVVNRdHRSVzNHdWN2a2pVMm56NXROa0ZVa0lhcktvaHpZVXJneFptZTdZTjNFUDlZWE1GbHY5SERKWldzRjFEK1Vzemo0SHM4T3M5WjdDNHlXWVFKdUtCZjRwL3hCMEdFNUU0UndUOFJNMktxYzdtYkgvc2VKNU1kQlMvek9XWGcvQ1N3R09zSi8zbVFXR3Y1cVphSktTdDZmdlBMdG9RNUZkMDJCNnpJdkszYVdDRW9ZelRYdzZqeGUxbzhzNFUrWEtsTFJzblYzaktaeVh0N1dFTHFEbWFnYzJyY3NGTldJVXZ2MVBoVSt6OVFKdzZDS3lmRGJ2bm5vTW1Xa3F5V2lhcVUrcWU1VkplckFOUnBlekdZd2RtRVAvNzJ1TWJkZkV2VGNSMGpwcCtuUXFzSWxFc05Ga1oxZStZUmx3MGg0TW93a1BVY2Q2aTdEV3B2cHhmUXRRY3AzNm5raStaNjltaVYwK09vektseDJ3K2F6eUZ6V1pxY1NKM3BRNnB2eUtJanFVN3JOM0VVbGdPbnZUOFZEbG5hZk85MWg5S0hET1AzSmE2cU8vNEZwcmttbFU0cVFHaDVNRGVkUGYwL2o3Z0lQTFNzQlFCVG1XMDJLZkUvYXBrMU1GaW9sKzAvS1BCZTNDdGwrMWxqWk1YVWtGaTJ6QklLTzBCUVpsdXp5REdvY2lhS3M5Z2FCUGkxUktyMzVZZlZZazlWT0Z5RnozVVd2Vis3dmt3U3J3dEx6M1p1emFZY3p0UTNUL1dlTW8wcjFlMFRMMG9relEwS2JGRzZ5Y202eHlrb1drSGJHL0Q3UDlxeXpsRXpaQ0RkUFdROWVyaXlNdXpzbHZVOXNRektZOUZjR2RoMVBOWkowOEZmZm5MN2VIYlc5RjBwM0MvZEVreDNZdUh1TXMrM002UllwbjJzOGFQUFFjZ2YvQkV6QkJIRWJUMWdPRCtDalNzVWU1em5tU2w0WCtxRGdMa3pxSytDTzhvUWpGVGw0UWpTeStCbnVVb0F5ZEFFbHRQQkovQ1JsQ1NYZkp1NlVOV1RLRHhsVlZoUGMwKzdXZ0h5RWZpc2hpcGNqbXFpeEJUQzVyWTV0M2I2RlpqK3hsL2ZHRkVWeFYrZFRlcWViNkE4bFVveGlnaXR5QWk2KzNzZ2pJUHNha0VDS1A5RDVkeTVmd0xkVEJiZ3hrazVzNHJCVVhRekNRSWl4SjcxdE9YVjc0ejU0Q096clUzaVloK2lxYllGOFZ0eStDYzlDOWJ4OGgxTEY0Yy9RYTNLN0J4YXczMU02aVFjbTY0N0xSUUpnUVMvejFuM2dBWGQ0OFNQa3dSaEhjVHJiMkVTN3lFWXRTZWhpekN4blFCRHp3aTdiSHp2bFpaVXFiOWFYbk5UeC94VVdyRW15K09yN1JmVWRMcjV5RUxyTkE3KzVKNW8wTFZUS0xtZTFRR1E1K24yM0MxS2ZZM3dDTS96VFlhQUdGV0ptOCtZU0hPaEFWVksxOW1EUTNCT1hCVWpTTHJDNFVVODRkRW1ZVTRXRm5WTE5oRFExL2dWUDl4YjJXa0ViS1NnM0xmNnpqTDFoRlhaSU5vclNZN1EvbUp2Mmh1R3AzQlFack1WazJPbFphSWRqTVdEMnRBY0F2TW44Qmt6MHZ2N2VJeG5iVEV4ZksxUjRYRTJVVm9UdTd1b1dvRTdpRjVvMXJydThnV3NyZVo5dVN0WndURGxnSTFRcWVuZEFOU3lPb05BMzF1SitpelZWOTVpZEQ2YTE5TCtYeExiTmw5dnVtWklGekVHb1U1MXdkRVZmdWJOYUw4aTJUUlJ0SDZwUEJra3lhdkJZZFdMQkFPSmdtVDZodjc4QTlrMmVBWkN6S3VPOVNqSFA1bGhNTElkZWNyN2x3WUhHcUMxS3dzaUxydlFPN0srWmdIVytEejZzRjY0bER2VlZIR0cvMkVYY0ZRRmQzRDM0RXpURDFSbGVCaUxlMnFzVlJueGZSLzhmS0lLNVVRVTlENGUreE1oYllsR3l0TDFBbmZmWXE2TFh6aWdGY3ZqalZ6S0h2QUxObVQwY0RabXdkcm00R0xEQzJ5eVphMlI5RTd6TW00M2Q3Tzk2Njl1V2RDZmhTWDZGSFh2bElvZEVvOStmOWM1NDdqVFFaNEtQc1d1VGppV20yUHFXRE9DT2RVK0VxS1V5Z01jVU9oOWNrT296K0xpWnZVZ1pxWXpLdHV5MnE2OGM2Q3MxeW01NjFIaGZWMHBXYkM2Rm42bnZOaVpTS0NCOUFCUHo4SHJiSHdwWldWR1hUNXh6UjhxUDNFNFBVZWF2UElVU0VSdVloNHg0a3BkTEttSGduL2pNWm90TXRiejRMWDgvVWJibDNaODFxMjZhb1NMaEFsVGJUckxHQUJ0UHBVckxHRkN1Yk5pMHFQc1hZQS8rWXZVUXFCRG9DU1FWU0JjWDVNeGNXeld0V013NEhnTkZadGMxSG1mZkdsU1BpaHgyNUJmQXpocVBJM1NieFd0bTRuQ21kZC8vQzZFTEI0MXI2VXNCK2YycVNFSDYwT2lTSFZ1eFhXZTMxZGRlZUR2eFkzQSttbmkzUzYwSTM2NmQxMTRsUW1aaytFS3Bra2FCTXhyL09ERzF5MVpMekU1YWF4ZVJleTI5cVBuVzNHWHEvaXlnWDFxbzVXbkVuNUJZcDJFdWdkM0UxU0NBZDVIK203S3VmSFRLdnkyZW1QVTdTR3RjYWVLc1NPTmxCc2h3ZHpTaFhUTDluUnpFcFMwRVRyZlZhY0l4RUc3TUhPV2FkY2RSai92SWlJSFJMeEJzTnlFejluekRqQzdqa3FPc3NudlVQeUVWRVFBNXR5eTBlcEE2T21VTTB1NlVrRHFBVHF6WVl6SHEwSmt2cXhjYVhiYUQ0cHRBUk1ubndjazg4ajY5NWJOUE0va0RQRkFKSXdjYWpubWtzTmVDS25iQ3d0MG5wck0vUGtaZStxb0cwekxoaW5zT0RYcUs3dVBxcS9LMXkzeUxJdVhCLzh2SUZZWTJlelJDZ1JoS3IzZy9ZQitoWHJqQlNwVjJTUGUxYmZjd0o0WnpzenphaWtoZFluVTVEVitxZlFqR1paYVdIY1grYkJmMVlQeVI2RkEzbStRUjF2N243TjYzNjlVNDVoMnlDSmhyay9Dbzd1WGdkcERpWE9DTzZnd0wwYmlLUk1mejZnWWxDaFVPQS9jZDM4T2ZIOWRzbkNITkV6aFR6ZDYyeGkrNWJKd1AvS0ErWStSTVNUR3pmR0ZjWmRtR1B6dXkwM055S3ByK0hndmdXbmFvRFdCQjVUck1zYk9HRUtxaVd1MVFZSi9ZcGlRUWNHTE1vekpQdVFxTzJMNWE3Y1FOWWQwTHVUbFBGM1BMaGFVNTBhMFhUV2ZVTDFCOHIwbjczRHpmT2NmUW9ZR25YczNYTEhEK1crcjI1M0ttLzE1MnVTeTFjZlF1MUs3a0M5RUZ4OTNUbkZweEhUdzZWNHQydmxENlZ2WHIvYjJqSCtXRytjRVQwUVVjeTg2dHNoZk5naXdsZ2xGQThTUU9HRXRyTklvbDc2VTFVVmRhWFFNMXJiemM4YVVpbFVKd3dhN0tZRCtCWDVablMrUm1CQ1UzQlVyTTVhQzdGcXFWbjZtYlNGVDAwU2U4NEkreG5zUGFwNWlYY1RuSWVEYTB3NzhLQUtMcDNOZzhTemkzeXFUdlZiVEc1ZU1FcG5OZHhOQnlqSk1iZmsweWEyOERaQ3BmV3BaUVlZN0JJRDNXN3ZDS20wZWV3ZXJkVG1Ha2EzR21wQnA2WHJxVGNCWVY3YVpVb1ZyMytzOXdKeGUvcXJHcldxVEJHZ0xtRFQ0anhpWTdvUWloWmV0VkJsVER5cmpQR0hCQUJFQWh5S1B5YmNRcXM3OHhjRm0wMGVnZ1BUMndLdENrME9QZFlFd1JLVE5ZdENRbG9UL2Zzaiswcm42RkpGTGFEZGFCV0Erck43Qk81RVZwWUpDN2lvdWxxcjRvWWNDK3hmdGRQQTdzcWxjWmpxMXY2cy9Zcm94ekgvK3QraTVOUVVvd2l3UlFjWU9zaXIwbmdlU3FVemEvcXk3ZWV3UjdSNDF2UGNpV3BZcEdsN1Z2V1ZoUmJqd3RmOVRzTGhvNTQzYWdTT0JRWjN1MFdXQXNoQ3YvclV6QWwvckl3VElteGhvVDRicktPQUtMVGhTdUd2a0ljMkdTY2NRMFZOd1pRSytXNFdHUlpGTC9UVE91UEVrRXFDdlYySkh4aGhtR3o4SmtyRUk4dEZSVlBqeHZjTW9Qc3I3aWZPWGZKc2tVYlB3bFpvMDA1RnBLOWxZWVdYTlUvTSt6b0V5bmNaT3VkN2ZubG1KMnp6cit0ejNwVWFqcUg5cS92SUpGYTVCb3I4N0poM1JybnBVRHFRaGZNRGtWZlA3TDlvNjExcG43YklvZXBYVDMwT1huZTVQNDRsT1p6Z2VCb3Y4Um1tYldPaTdQczN4MFpzZ05QU0VsVzU5Nk13MVFVMEtXTWhtSXo3SmNqc0NGTWpHWjYydGhBWTRJQWRlK1gvN093TEl4U2lsNERES084SVlUQlVOTm1NR0JFdXdhblFKQWJQb2RkSTlFTHA5NGtIVldYLzExem92MWZvT3pTa29yZFAyb0dLMTBaL29DOThJTjQvWi9rWk1aaWlpMXVGNXh3T21GMDdOR1ZxUkxNT1YvUTVJNFlaT0wwSGNuMXpmSWRFWDdSMTZqeERENGZwUEU4Q2t0UVVDNzB6UE45L3k0MzNmdXpHb1phQnFvSW9SWVpWa1JrTlJvNm9aUFhyL2hLTVRlMUptL2g3Q1lyVk5NWWY5bU0rcjl2T1BnVEc3ZjZvTU5FUVUxbzJ4YzR4R0dpWW1sVXZDRzJyU2dBYm1JMVF0U2I0OXpPdGZoU1N0NEJFbWFxbWo2ZStaY0ZsbjZjK1FFd01rYU5OdFlldnFVVURXYjA3aU5GeDhsTFpQS2lNYmhrMElqYm1YSTlQejlXZTJaN1ZUQzN0QlU2cVg2RU9IWmxZQnJsWlViNDZaUHAvRnZ5VzlXTmVkUGkwdlcxSEVPbi9VN0JSMWZ2NFhlcnZjWVg5akdONDk4TThKZ3MyTVIwYUtsY3ByanlCZm5lWmU1RWh1UmZnSC93ejZ1VnBMZFpwSUpRYVpNRkxnR1A3Y211aVgzUkFmTGFCRTJTdEFydWxZdkxjUDI3RWFRdWNWQ2NqckxZTzdhbGtiTVZVTEVGWW1qZUlDdFRRWnc1S2hCVkJQdlo4N1NVZjhoNjNmRHlZcHJ6K25OaERadk8wcmlLU2MvM2RLYlhOTmQzZG90MXdxdEFldjhyNmVDZnh5VDJHU0pmOGUySjNHL1BLYzFqRUhWRHpDT2E2b0h2UVBZZmdxelBseFkwTEMxODhPVEFvU0pDRmUzejN5amJreXp1SFZaQUtseTltODJWVWU3QXVuMlhydmUzYkFXY0dxNTBIZzBEeklpemZzSHNvYWYxZHpsYVJGNGdjbFA4b1BpeldNNkJQYXp4MTIvcjlIR2JpdFVoSnp0WldEVEpDcUZRWjhPWEVadUhXWlN0MU95aGNhdmg3bFZqb2tyblBqcVFURUczeTFSWW54QWlqeUF6dWdYN09hV1NDRXZNRTRSK0toVVdFTnNSc2FWK1N1ZVoyVHhqSGRVakJrYmdaVXNsNWFoV1JLdmtiVEFtMjhoMTVyUFBwTVEwZTdZVHFIN2JvcUNMVFRtb1dpWi9aYk9mUlF2azlDQ29ZM3BIM0NDRFFEakE5L0pwbWNML0h3MXI5cmpQQitNYmJkdlU2Y2s5T1k4TVZCM0FvNk1iSmRvNjhybkEzTWo2UHhzNXBUYkpYRjZPUmFMWDhrQ1FmU3FicEcycm9MUm9RNmF1eEdONHdjWnRlNmdEUFpyVHRXengvL1AxWVdpUG0yTWdVUlA4akQxaHc2S0hhR2pNc1JjTGVYOGV3ckFWZmxGS2F1azl5QXFuQ28vZU5Cem1Sc00xdUNqYkJlZVhmaUNyaHpLdjJ5SHRtR05aRlhzMGxCZU5pb1Q5Wkw3SzQ1a0tmOXlDNzQ0bnJ6U28wWk01czExVUt0S240aFhRZ0hUZlpNZmhLN1JiV1lqYVRVdk9LT3VwakxOdlhsWW1QTDFUNjNENjJJakh3bHUyOUdUWHVBUkxYak1jbU5TQjNoQXovOTRzMExicjdhcHNrYnBUdzlwTFl5TEFKOWNOcFJKY2Jwak9kUlJUaHMzd204VndadmZUNXkyRnJLVkNvZTdleWJZamVkc3krL3NJa2F2ZG55SVQwUTh4V0xnNTdvUUV5VDRvS2NnUEVLc3RXenJTMWpoNjdEUlplR2VmSjJiQTFkNHNmeUVmU2dOTHMxaWRTZ1Q3UWJSZDEveVY5WXVieWlhUDVNRVNaaW4xVlk3cTh5eFhQWjBtNGxXNTdMWWZxUnVRZmZId3YvTFBQVTRkd2JlTlIxbFNKYjRkVjh2YTI1ZHlqYmFJTmp2bHFWQys0bTVVaVpZT0VlWDVjMko1VjROd1VOS1RxUFJqU2tod2IwQWpaMjNHYmd6bk5yTVRDeE15K2Y4UnZ0TDU4TzNLdXZDNW0rUkNtU040UVVtZVN4bld0dkRLb0ViaVFxWHZsN1g0b09wb3UrNFFKRDFjekpKakI4SUNpQjRIUjRVaXM1b2d1NlozSmo1eDNMM2E0eGZNY1hwM1Jldm5hOWRXdGdKM2ozL3p4dlM0M1B6OUFYa3ZCYnJReno0RUloT1AzZXZtU2Iyb0o3RVYraXE0SStBbzIwQW1JdXdWbDlxSnl4a0tkYzg5dXZydjcvVTRKR0VmK0J2R25WOXlEelRjaFZMK3cyVE9GSzVlbkowRGZmZDMwUm1WV0tmY0pCR2NEelY0RnlSeGMyVFpubWZRS2FXRStpbkExR2ZEUFVyVEZWMllhUFN3b3V0UmF6dkdsMXg4ZHlVblNxT3hibTJYNXFEWk1LaGpVelhKb2RiTTNya2taR0ZQcVNURlY2RVhsUnlTdFZJbHR2R2xINytwY2ZDZ05JMTBvbXlyWFFNL3NhWnJpUWNKTEs3TXJEVnVlc0FFQjE4UXZnenArVlBxYkh0ZGZwY1JDZEE1cDUxa1hyVWFsN1dpSzAzTVphV1R3SitqYjc4RnZhWkR4VW5FVkJVNE96QVJxVzlwUi9SYjZ1eGlhL1NvZzRtSm82a0RleFdiVFV1TFcxV0NwcTQ2T2hyeTBiWTNORWVZTFlscDRrK0U0YWtUcmg5VjBlRG9zamJ6N2dUa3NYZnlFMHhrRCtiWjdIcTJvc0R1TzRocGdNZWwxTlQ5S1QyYlF2d05jVW55eDEwWkhyemdIOXNHSXZsSCtDTG02aXFUdUFEVStuRlNZa2docnNvVXZqNVgrUFhHQnZvOFUwYlFvNEpkTkhERk1RNWx4QmpWVTMzV01waXU1aDlGSnJzWTErU0pKRUlwejM0K0pxNCtMVnJGVUtEdjgxbkY4V1ByR1gxcjNjWU05eUVHbWx2NHBUN3NEcFFuVHFoc2dEOHlxWDJHRmRQTzZPWCtBS3paYk5BNTlwVlRVMzkrRlNLS0dNdENmaVRVYjJpdkovMFkwVzVBQ3poSFNFMjQxMGU0cVI1RXorZ0RxVEhZamJaZG1nc2c3ek9uclgzUlAxVDhhdEtUWnBCWXVoYkZSUXZUTGpzOHhZR2psRkg2WjdmNS9SeXlFbUk4akRkUXlCNzJNc2NaRTU5c0tuZWtVTVdqWnE4azd1ZlNSdlo2aHFVcGlBTk03ZlR4SmZWRHhvRG4vWVdtTWViZm03dTJUaEdWV0x0SjR6SjhHdk1nU0d4Tkt4NlRBQUdyaFBrSU40bC9SYkl6bzJZQ2ZMQ1J0TTBKU0Vob3JKSC83Z0V0eGxEeDdyRDNRSFZ1dzAvT2VCRVRrNnhKOUxWUUQzc3Vob3BQOTMzSURMZEJxckQ2TWJ2Vkk0bXJzb1gxZUtoOVpuR3F2anVJN0duTUR6Q2ViZFB2TVRIS3VocEVibVZUWmM1RDJoL3FVd09VM1A4eU81R2JkSk9zNWcxdUtadkRlUEcyZWNGTTZqZ0xDYUxJQU5zSG5yRis3QXdCakpXNEZ4NjhwZVorNVBVNUFqRloyaVE0NkVwd2dSTkpMams2bnp4d3VIVE1lR1FYYmxHU00xYXdITmJIcXpHQkpyaFRZejdIa3hQWExSSW1GMjlZMnM4c2pxWWlHbTRKWlh2UUR4QXpZdkJJODBMV0xIanlGQWw1SUNxOHRGQTUvM3VHRDJvMGhTUFA4azJHL0FsTnpFQXE0QXhHbGVzdC9KaUh2SWJNc09mR0w0NnZhUHBBa0gwb2w0TERCb1JKL0hNbUlhTU9kUmVPREFlaWZBeSt2QzBNWERtbnN5NGtvYXdEeStxYy9RdWtrY0t2VHd3MnMyUDBPVkxEU3N4REMrYk1TV1BsUnI2OWZNQmdSN3hRdzlocDZvMXZVRmRnQ0pSRXd4b09HbWFyc2dweUZiL3cwWGE4QTRQWCtoOEw0Zy9WbFJlZnVXSDc5Qm04UEFjWmhlZmRjSU1zNmRZeno2b1J3cXRqZWM2cW11WG9FMGMxcDVjNE91UnpXNVNwQTVVempnK0RhZG93bTBtbnpld041VWx5K1JHZjdHTFhYOTdRSlhsc2o1Qmp3cTNFc1pCR1huTU96OXFvYnU2SHZmRENHaEYzT2NyTHBtTFV2SXRyN0lTNXBhUkxrKzl3bko3MkVSamIvMVZvaFdPS1phdk5uR01YbkZTV1phK1VYc0JZWHBQWThZL2FsRE1aNkxDdVlPQWVnRXNFc1g1ZCtCb2FCbzBKUlEyTitCMXNxZHRob2RaZHc5bXZKKzRiOHZyY2dTYjRCNzgvS3pJZEl4LzBKZy9Qd3JSVlZvby91anhNb1RFcnp2eVVJVmo2b1d0UzlWS2JlZFpIbExsRnZXYXh2UzBoMmRreVZNM1BLRmQ5ellHeWpXbGxydGFtMTU2andkMmRnOEtDSk5OaHRQOWt6c3hITi9FY3NXbHZMYlpRUFlhWDIrSG8vWkFJS3N6aEJIbHh5dmFKRnpnWlkrNE1nVEZKa2JwODlrSG9FWjM5Y3N2OG1zZVJENmFFTVJQWTc5VTBjNk1OODgybWVubzdjYk8zMTM5TWExeWNNYnBpWWMrenhpazJOaXpEVU02QUpRNnVuRDliZ0lqMTIzMUM2YysxNzg3ZEJFc2NIanU1c2hhUVpIUEt3L1UwanV4dGFoZis2K2JJT2V1SmRCV2tZcG9kbFJTTm4wamEvUGNWLzBlK2pFZ01DNFZYRTVFM2VHRG91L0lHY3hYOEY2OEQyOVJBUEN5VEF2R05hNkV6SXNqaXZHa1JpU25SZldGOGZmT0c3QXhPL0tUaG9oWnE1ZW44bS9XUHpFT1ZOcEl5MFBhNDFYcXdidGtKeHhBdkk5OGpMMGQ3R0dLVWJ0UzB4THF3Zm1Ybzh4SFM5dUxncjNkaG9USk1zU2k5L1p4UmlEekhwaWRnK0tmeUJSMHNRbXFRb3FsQlp0bFZ4cHpOa0ZkUWhaSkl6bXlZQThQSmh5dW05ZzlRYTJ1TTBnRXJkNlBoeU9HUHYvUkFZTEpxS3FSRU05K2NKR1YvS2pNN01ncGJGV1pCQ0pUdWFsZm82Q2E5TVd2TG55Wkk5R1IzWkNJdTJLbDJoaUhhMDZRUFN0TnJrUTBSTVpXRjYvT3pSSlZIZ2pMa2g2RStxTzk2OUFyQ0p2OGhrNUlLdmhXY3BVcHF6M2pMRXBxblQ1UUNyZHVvUVNWNmpYSHpBc1FIN2gyOGZtL1FVcXVQckxoeVJwZUpMaXNUSlRlNDBwRG1KVUREWE5lSG1RRC93U3p4ditWNGNWQ3BFbyswWmpQMUo0SW8vekdwbVpiaXFXb1JkT210NnNCdGJmYWptZWVZeEd4NURwSzZxOGVQeDdqdWQ0dCtaYm4rWjF5b28yeXFBck5TRkNLakZkOVhIenB2Q25Zc2dYNUNrQk5RamluWndlNm9wbGdGWjJra0ZFc1pQOFBYdW9nZnRxYUtHYzc1R093MzM5UXZpT0NjZ2dnZXRmSEJmcnpzU2JiVk5qbTU5OHdPMHA4K2FkelhzOWMxNTh1OGszQ1ovcXhCanVReDN4ZC9MaVVQVFFlRFpyWm1BUXNjRUhoWE5BVHh6eDdFT2dQRHdGWlZ1dys2b0txdVBOb3AvTHNGMFh4NFBQTzlmdGRBSjhvOHNpeHMvZk1kRE95WVlub2FTUzVoeXd3SUIzZDZTS1ZtL0FzWDYyNnVwOTJ4WENlWUhUb0F3M1NDeHg3aFhjVXNyYjY4Z3dHMlliVmY5V3ZJZnFhTXpuQXBma0FZUkZ1YlJXRnNHV1R6RG1UUkZGNVkvWHZDVnVpWVZyRGNaTElRYS93eFlJS1J3eXB1dktxMWprcW9ZNTFTNlV6cnE4d2dMdTlFTnRzWG1iVXNIZ1AwYzJzMFVrWlg3cS9uSW1QT2RsUHVEczJwelVpdFRJZzdVcTZQY2Z3SHlYTCs5a0xKWTNoejhCeTlGSnBuV3VGbG14cDZoQ2d3amRrcnR5LzFDUmx6TWZYY1dJRFNzSWRYSTl3KzZkVGhrV2VmWDRITVJHTGs3NTJGWlJFckd4dkN0aE1wREZKYTQyYjE2YWVvc1A5TTUxNzkyZ2kxdFB4dTRjTXVucDljYWN1WGJqYnROeFpIS0MxOUREcU9CVm10QVVvSUFNcjJEeUZDN3Z4cVBaMVNMSUxPVU9TajU0ajJOcHhybitiUGJlTHo2RWFmZlRVQjJPcy82WStWN0JaTG5NcEtkK0M0VEFjVnVhNlJCaUZpQWJTV2RQTW55bnMwOWJTcEVCNDdUYTZkTytCTkVFMEhOell5eXowc1B2b0JyQ2w2cFhFajVjQ3V2dlJxcFpZT1BmZmpCT2o3cHF6dWd5cDUzTUJZYjZSb2xkdTdQaEt4SnQyRlkwYWVMM3hqTE1GVTR4QXVMSFJyMm1uUnl0SGJoTW1QQ2tsWFU3ajM2YlBLOHFKQTNXbSszVjIrdVdUVDlDUjVLL3VnWEYzMG1NNHVKTURLL1I3Y3dWNG5XbmtHUVFLMFJyN3hxaUEyTmF1bWlWcVFJMzAwZFdld01QbFpwdEdnRnpXRFVLa0RLcGh4Y21NdGFISVRDbXRNeDZjSlZDaFRVdW95ZDNGUml3TWRQYkhpTVJCRUg3TldkTmVuSkozQ2hpaXhLRFdIeG5xVjVUYXNnbmJNdVZVc2x6bHZseFdaeHhtS0ZyLzNQVE9Za1JEL2MyRnZDT1FoWElYVG0xT2VDbjZnT0NvR0h4NGxDVlFuc01SV1BDZ05DMytuSFZLTFRmSVhYTHEzMEF1ZE1LTUx2VTNoRU1EaHA4czNBaHdUWHlNUElyWG9sWTFac2g4ZnJVc1Jrd0J2bUZQTFdsMUxGaFVJblVsU2hxdllZK1drdUZMVjc2VVd1cW8rK0pkbzF3VlUrZ0s2QU03QmtNVzMzcitqT1NaUGE0eGo0MDdZK2dnZ2xTNmEyd2REWERKQzhmNU9DN29DakJsa3lPZlFqUEVqR2JPRXVubnIxQ2ZBT3l5bDJHSkR5RlU3cFpFbHdWVTAzKzc1eEpYVlZTYkhPVldIQmtSd0cwZWZGZXZYUTRtcnA3RC9UVlgzbGRnaFB6R2lLZ29LbjhiS04rWm1WdFFtYm1TaTlMb3gzRTRxNm5YUlE5bkhLR2J5WklQdXZBdFJmSjU4eHB0SUxrZmJvYXZnSDI2YVhURnZySmRMYkVTZ1czdHBlYzA5OWI0NjdlYjRLUk1mOG9OS3JUT2Vid05WbHExKzBycG1RVWI4ckRKbnVhTU1QSldDTy8xTWN5bUpFOUJYUEdQNHRiMHhoeEE1MTFycHdwNDFnMHVibGx0c1FucHBlU1YxbVdBekFiSm9Fd1dCamU2TnRlOFcrTVlldWczdVM4eGNnVlQrUVpSY1NzblRkZXpXZFptN1FYUXVLdjc5RVBacHdpRUNscGM3WG9xT0JTY0pielVTVnE3Y2NRek94aUFqR2RFd1gxNzhybkJuY0tlendRMldnSjR3VGU3cVUvVDFGQ21ZWEtFa2tyK2pldUQvZ255THpWeXh3V1cydDB6K2hTZ1N6MExRYTdBVjRyd2l0Njl4NStXTjdteVNCY0xqYmJSKzZTK0JIZTZWK3ZjYkRVWVpiQUlGWXZ5S1VFUDJPTVR4T2VTajRKZ0UyMy9RQ1N2eDhVMXlKQmZEbnBUZytJOVBHY2lZY2cxNDc4WTh5Y2pUU1N0WGZlTFdzaFNpQU9zUUYyU0dQTG9ERXIzRXMyQjkyWGVIWFRBckdtOCtkS29VdjFZNENLSFBDOFUrWFpSMGkxVnRFTlRQckwwd0VOM3JLMnNUN1ZYSG9TaHpKNGtjSkdOWFk4ejc5YUtzZTNJY3pybjFmSkNFRFBMdEdjUEFURzB2UmR6VG4wTEVpdmlHQXg5NmE4Wk1pdDQ0QlUwS1BMRlM2OUxjQlllNEdOQWdvcGpFTU95Tk1uMXovOU4yalVyRUNQSmx1ZVo3UTBRWGJBV1FMcXZHZG9CVnllVGk5QVlEdURqMXJaT3RNN1BoZ0puTnROWjJnZWZRV01KOFpBczNCckkrVUZWT2t2RjNoaXVhQk5PVGdla2N5eUN1VStMRDV4djBGNjBCM1RMVXYxUzJRem1KUmsxYng0MXc4YXZjVFo0cWorY3VEb2QvWm1xY29wa0pvQ3ExK1QxY0t4T3g0c0RCOWR1SnJMWWhZSDh0UC9kbjcrUXpHUVd0dUtRVThKOWpPWTlCOXpXcUJCWlRzU0V0SmlDTURDVDBFTFlaUzRob2themZjaHBseUIzN05PWHBVdHcxaGs0WmVpMVdDSlZRcERmNVp0ajB0WTZVVXhMQmo2Q0lXZVlQcVVqbndZOE5YY05ldHhKMGpmUzgybFc1QmZyYnVHWUtaTnBoY0F3Y2lnNkRTYk1KWUJlVVo2WWpRMHVUWXc0a3lCWDN2L1cyc1VLMzV0SnM0ZnlxaVdnTWhkbFVrNUw0aVovWE90STB4ZXkydHpid1pvSlIrTHArK21nQmRHaml2clNKeUhkN01uMGZGaFFuaURMdEdWUUM0NkorbFBLYXMvcVlVZGNKZGNQWElCR1VKbE1QSnozT2EzRmRzM0pEUmVzRVdXdXFuc0VWSTNZZmRKcEY0Qy8yQU1tQ3laZDlPdDlmdlpIMzY0K0pkWDlCUXo2VU1LZjgyWXZodGljRTJEU1ZEY25nbUwwV3RjamhCa1BkMzg2VnNHQ1h5UTNBTjIrK1J1VWpOdG5qUzNBeDcrc0Jnazc3VmJPdnNZbGVlR3lLZkdtOG9USWlvSytPN2t2eWFOVTExOFRPalpJa0dadlF6RTJUS1kyQWZKT2s3Y2tFeHlBZGNlVU1mQnZqbFZRVmVzK3QzWjFMSXE3Tld5Qzk5V000eTBqRzUwZ3JRZEFuUDNOL25oZGpyMGtkUzJ1cjN2YTFQaW9wZ2h4clJiVTN4Y2ZTQllLRDIyTWxTS1JuTFhpN202MHp3UEdqcSs1dEhSdFRyVTFMYmpQVUxaYnpPNHVzeU5UNVBBQUMwTXU4NWVTM08weVpnVGJLZmF3UHNyb1JqeHMvbDNmUGY5d2l3dXllbUg4TlRxMUVJZGtrY0paNkRrMnBuVmVwVEE1Z2U3ZDZ4cEdQakIxUldLcUx5ZzB1SDVyd1dYZzY0UjkyTmtQY3JNTkt5QXoxd1IrMW5sQ3JwV05SRkFxcmhpeHVNNk1DUk9FTW9zNmM2VkdsbWRZQlBJWDF2cEUyaXViZkdVVzd1TUp6dVVNdjdxOUdZdGtta2EzZThIUlVsY2J5Q3FDQnpyR0ZPZzlSaFRpT25KbWFZNmdDVlV6dm5najhZUzhkaEJxdDlReCtBOGkwYXFNT2kyZHRpYy90Sng3SUx2VFJ0dXZTNGZzaituMzR3ZjZOL1p1citKZ2dHL2h6Tkk0Sko3eTNJRVhGRlJXT0xmTnlVZ2kzeHZuNkd3MTZoRjNiVlMxK09uM2dGZkpTTUJLRjlpc1pLU2RCaTNsS3hRQUdkYUhEMXdaemo5ZEZWb2Z3ZTIrbVlVRVQ2UDQ5dENXS3JOWGVhMDZFSnh5Z3ZTaTh2Tm5kQ044My8xL2dFMEFPMHlocHRSOVZ0Ti9OVUJTQTUwemk0WWF5TXpTNkcyN1h6Q2VzRUNTRTVXbi9BUEZXQ3ZXVm5rQUx2UWlMeVJNblRGbDk0UEFWMThxMlJwaHNvU2ZVa21tbWZNaHVzQytEVG1KMnlac1M2czZGL3FjN2k2VXlOQW9GVXN4NmQ2THJjS1llVVF1REJTek5pN1FMbXRtWTZuaDFkWFNsNjRRZjloN2lsVFdQMWZ2OGFjM1BwSHpCbmVoSnd6OXprSmN0eUh4dXZCWkRyR2hOOE5jWUU4eUpJWHZOUjJ0bVVraGdQanQwNVdKRnBLcUlqcHNTeDMyQzkxaiswMy9zZGUwNDRNeWM4V2tCRTdPLzlBdmxHSVRDZEZQaVNaOVhaZ2FuM0pnSVlOWk1pNDZObngwd3I1SGxDWEhrczBCaGFsTytaM3FFWXp6MGREWjlPR0ErWXU5alBFNE1Ib0paQm5JVXFtNUEvYWEvMjIrSEpjVEF4eldiaWVBbWluRlp6djlqM2puVjBaa2VpWW54aEJsTThuZ1FucWlVM3ZZSTVtV1haaFJ5ZElLTVNuRmVlTUIwTXRwSUpzUUE0V3J3VnB2RFZ3b2VXOU5DWndWSUtvUTVzUWYwOS8zQ0dKQk5LMUsxRnRab3E0WmczeGpFdFRHcloxZk9vZk1MMktvay8ySjBYQ3dkKzVEMFNFWmVSUjd3Q1A0ZVpUcEhsT2VtVit3RkZDSU9lay9UZVMxK0lPQkdUVm1TQWh4aC9FNDQwVmZCeE44eHZBVEgreWhEZ1B4QkFXK1MvemhVM0VGdEl1SEZ3akRCem9Cc1I4Y0FmOVF4TVFiU1FNMDdRMVh4UVMreDBVVXUvY01NN2N0eXpGaXNTc2YrK256MHpvUHRDcDNiaVZSTThXUU1Celh3RXFNd01saVpsTHd5WTh0UE9DeUlzOTN5cW0yODh2d0FLZnUrL01oa3JCT2hXV0FuWVV3YTJzamlIZ3MvRDNBMU8vVzU2UXQvQzBDcTFCR2E4VGRKY3BRSWZxTFZjNERhVTZ6WC9EVURMZ3EyL0lKRDNkV1pjcjFiOFM2OTE4aFdoUG8xdzNwVHpCV2p4b2ZNS0xsNU4vOE1lb05uNXZzRGlCKytMZW11OXJCRExJS2pwenMrTDUwVTJ1Z21ubHpLT2RoQ0xDanUxYytIR2Vmd00rYnJ6b1NsMGNCVHZjeFg4ODhLS3NZT0VNWHJXMHQyb2pXaTRvVUY0YUg4UUFNcnZGN3NqMEh5K09tNWVvd1J1NU1jSHp3OWt2L2czYVU1K3BXTW40NmZoUk9XSk53SDVDbnljc1A5ZEVzZmN4QTArSEs3ZlViQzl5Y294RkErck1WYVlIajNIWWNXa1dFdHlXaFB3VnlMREk1YWpvNWNOZ3E4bTdXQWp4S1dVaXRKV3pra1JSWlcxSk41VUFmQVdWUmtCUk9ReStHd3Z1UXR1eVc1b3FlRTRSS2lIeC91WU8ybUhJYVFvR2Foelk5RlplTHVpUlRYMEtha3EyQUdldVpvWERNcXc2MU1tUDBjQ0VSMUJJdzlFd25FVDBrZDA5Um1rMERqcjlnU3ZzUmxLU0F0bmdVZjkwdWlkSFlEZmxIMnBiTDdNamYyeHBuSjhNMERmM0w5UWhZSmZQY0JKbnFWbmQvcWc2eWI0YTd6RTZISzMvWHJUSzFlcndNUklaV1kyc0JtWkVtUWNwR0ZhUTlXLzJ4RHFBZVI4QS8xTEJTbmMyYldjOHVwT3oxNEhKcFQ0eGVWcmNaM0dWN3JyMHU1ZGpjOC8rbUczRyt1QysrZkFpakNuSDVrRnhRQjRTTmFCemk2WVA1enpoS1hyeVpTdmZuMHpqUnRpclNlY3dOcW95U1drbnQzc2dxVktEVm8rWCtSMzFrWGRuR253cVNvUXliNS9JYllBTW55Mm1DYWVhT2NGZXA4dmNLSEw1NVVKQmxaMXUzVlVLY3BJSmo1a0Q2UjFMSVhuZFFXYnphaGtNTDl3dTI2SWYrYjhWSm9FcmxTZlJBN2JOWHdicFNKcUJFcTV2bTVRcy90dWg5eFk4SGF0Zy9xUzkzam1TdlR4WC9PMjNsMXVydUlabFBPYlF1T1dyVTRxYVFOK1ltREFIUllOL1l2aTVDUXpHSzZGQVpQUS9BK1A4Zmc5bVoxZm80Uyt2cWIrN3dLSTI0NjJnRzcwdVRuTXk3UEN3cXJScGU4ckpwZlFIT1RGRHlGSGgwZHF1RVBZMHRaSGNLVXpkdmRlMUhXdWZydFg1eU1VdHl5Zk8zck9FS28yZjBYL3YwM1BZMkViSkJpUXdiRjA5REFycGY0WFR4b2s3NklDNEY4TnRxK0hmWXkxY2FXMkNoWExkN3RFbk1HUXU4VzZ2Zm5XcE9pYVF0YmlKQStOUXBaSDEzMlhjZWhBa0tqNjFDRXoxWTd3YldUOFhvNkc1S3Ava0w4dDYxRndYNkF6YWpRU0NrWDBkT2p6R3M3MWI5L2djcDl4c2RsanFVU1kvbEhkWXNYYlRiUW1ieExYcUtNRGpCeWVNV3RCakxDcHZRdlprYjJrOVJXakdxbkQxaGZVbjY3aTBHazdLV3hzVVhTL0IyczNzZThIOEZtY3V4d2E3ZElpTTErZ2JhZWNLMlAybkZxQWdMUGtQdHJ5YWZ3TUI3aEtDMkZUZUE4NWNtall6a091V0UxNlcxSGFDUnRRRFpUenl5MXJaMHZiMTJodXA3TkdyYVMrbGhmeUcxSXFzV1l5UUQ0cm5NN3ZxU2xRRTNCeklKL3hSWmNWQXNHVldlaDI3NkVJYUsxQjJ3ZFdFbFNjaHd1QTdZTDJnTkR0VzBLZWljNDhwZGpGVWcvalI2UDJuRlBpcTBhM2txMWZCVCtzbFY1ajFFVTgvY2c5cGtUZ0JNN2hZejRpNmpRYjZmRCs1ZTlaNGoyZDVQWmNzRHc0VjVWYmxXcm1Md2xMOC9sUTVvc0x0aDROUnNSUFh2MWxEbzN3R2pLbjFVWHpWK09LMjJybnZOc09OK1loYzdwajVXTXJPNnBwT0N2N0Z6OHFjaDQrSGtVbjVOdXZsTjF6bXoxRlJGSDlseDVUVVZmUVRuUlJDN21WMUZtaFoxWWVwbnJxNVo0Nm50c1JhRGhnQ3pRbGRNMVExb00xSld2TUk3WFhrRmh1Z01vT1RmWTl0VzdrVUFzMmViQ0lhWWdxdnJLNmhVTmxNNnRqN3Ura2RPSUtsd2x6RllrN0dvOVJYZlZrbHdvWExzbFUySnhlU2p5dFhUNlh0Vm1TaXlQOXZCcHRDODBvQnBlak1nV2NXSkVFSjA0eHY4aVFMZzRVUHhzdGNQY2ZqOXBGLzVWWGR5a2ZxY0J5azJrUXhRZnNDaFo3QURqZWdQRjhTM0c4OXNaKzJlVjU2QVBOZ0s2YWxnQTRoR09HbENGRDFiWjBsRGh1SFhaOWlMRWUxWDBCSDJMVkZFQUlGUmlQbHJBUDcySitRZ2FXTkorYUZQK2E1TnpFRGhucWxLQzJKejh6cXZ1eUhQdDJmUit1MnA4ZEl6aTNUb2JrVWJLUmRiQXhtWXNVbDUxUEp4NEN1d3paQkhiWXpBTG56bFlGb1lCRTZrQlJROTRHZnpzTXdCV2JyeGVBWVp0MFRWd0hHRDgrMVhjODlKUnVUSGFvSzlMU204SWd6MWtSa3hWOU5kT2hzRzhRdlFtTUdjNEpZMDN4dE5LZmxDS0VzMm9pR0pUOVZrMzBWaGF4Yk1mVVNIRGJGSjZKQURybHVrNkV6cUpnY1ZjYXRFdUlIeEVsaTd5elVZUzRJSVFzTktCTXNiUXZPNmVCbXpiT3haQjJQMkxhNHZRREN6L3ZZbUlYTVI4NGFSSStvUWZhNmgvOVFLeHdqMWtTa3YrMjBXNXJtZzE1aHFiQXhoMGpzbTJEWEtiTTVTb2pnTmlmdTJ5dkxjVlNoOXk2TVp2aTFvbXRBT1NDa3hBdjVLYXNkQWduczNKZFJ5QlZDUmN3dEtqV0VxczVpVVR3bExmcERuK0E1eHN2aXIzdFVaQjRrdmZJTFFWcE5mSDFFOGpETXAyNk5sVDNrTHRIZ1lLemtrZEMzK2tBVVRacWdocnR3dDc3elZTQnE1blovUWpLWGgxOFNLeHV4aHdHeFJlVEFjRGZiVXE4bFRZNFpKdEF0QzNXSTJkcWRHdmJyODdDYjFlcVhCaUlTb3QzOStvKzVaQlFWcWczY0huNTl3OStRQUladUZ4ZVZZUFhIOTl3Z1pnV3pxd29kck9rYnB4YlNKQ3F6U2Y2dzVPVHkwV1FRaVVUZlJ1T200RTJhNTZZM0lNdHI0S1QyYVJNNGx6ZGE1Sytldi9uTUJKYlJleDVOcTFLMUpEUm1GQzRNRjFWNkFFUVdvMkp4UTR2L2FWaytCT3VFSXo2WFh5Z0lEaXl0MHJvcGN6c3NNSmNoTkp3T0NHME1tbXdEYVltZ1RkMHA2M2k1SHZTNzBzSkl0cVY0Wkh6TUY3bEdDclN3d2ViU3gvMmlaVUlnd0RuSStxa3QrYkF0US9HK2pKZGN5M2dYa0M0eGtCRVhDa2lTU3l6aHlPb1JOSm9DbFBRRFVhakF3L2hVM2tVQzdKdHJhK2QxSThkWDFTdWdDbHhEam45NkIwcEZPQVEyV1ByaG0vaUYzU0x1T1lZZ0hBM3lHVHk0MkRVMWFpZUsrWVpaTXVjNEF1dXR2cVZqZ3E5a1hzaXRIKzF2NVluZWpwK2xRUDhKOExyREd0aE9SMnhNOURDajd5WXc0R2JucmNROWs1OEYyMWF1cmdYMVVkUURzaVFNV0l3TFRMTGtEeitTbG1mRXpYOUJBeUJ3SE9LWnZQQm53bXNaOVRUMU5rQkFUVFJSR0lXMVlmRlNMNU9Xd2hSa0VrY0ZOa0pEeXgwb3JJRmloSVNVMGtYOGJNRG9UYzJDNCtsUC9KdHpZUFhkSDk2Z2NnbFdIWGpNVE5Eai8zUERkczV4Q1FIaGRiT1ZFNmZJbjZxUE9BQ2ZxVnhFLzMvSVNBMDAwUVRsbWpOeGI2TEFOM2laOWhBblZpbTFENDNqcVoxN2pCQlpsdFFhVVRkalJBdSt2cmxrY2pBMit3OVBjNWdiaGRXM2ZGRHkzSEhxaWpEc3JPaUNCdGVzd1FjRXV6RmNOeTB5N085VG5RNGl1Umo0M3RLK0ZTV0NEanZVenVJdU1JZCt0WW5zd2Z1OFd1dUMxY0lRRmlkanBZelRUWFRGVGxNMHFGVGNWTTFyQ2w3Q0h0TEVwdlpQRlcrcVhlVUJZdDhiOTNPWWI2YzZoSEdLSFZVNXd3WkVTQ2dFMkc1RHNETkFBc0FQb2VmcVNrTXd1amRFemRuWHJyVDBSU3A1S3VQRm1TKy80dDhDWlV3RDFSL2VsRjdVQ1I2Wlo3MmxuUW83WDh3Y0tjaVhid2RzS0Y0Wng3QUVocFVRMHRIWUJsdTRHbmJGQktFWmp2NzJDanpZNkNrV3VlNUZtQ1hWbE1aeGl3Njk1U05pZE5XaVNlSjJKWFdNckJMd0JjV2c3T3dLTnhYaGh4RVhhTzhIRHBPQ1N2ckI2T0ovRDFmbktKUEFjNGMrTmg0MUJrWVE4YnZhUFJZbkNoUnhUNTFMT1dTelh3UlZkbGEzMWdrdGp3WXNiR2FKam1IRU5LblZ2MEdSSjdBblc1REJwNUJqelZUYzcwWDRtWlA2dW9pUFpqYno0bEcvb3FGbHlXdDlnWTJ6WHg2d1pTbmxkWHEyVUQ0ZEZPdWkyV1dZRXdxZlhkM1NKN1A2eGVGVjlYZytPQmREQUNnRWs1Qk9vYndFUUNOMlFIUmNOOGd1dUh4UkJtOFQrYWc0YnRZeUJ2bzRWMkdnYUxaRWdHdjlOU3JUVWR4OEEzWHJBelgrOXUxdE5nL0RjQ0hFU0tkSmpmQ25aSDZyQldGMGpQVkZyZ0VtQW5UYytQQnVTYUtnUDc5dCtZdzFXVldDVE14UXcxZWIxZWRHU0xwNTFncDdWZnVVRVc1emdqbHB5dzFkdlEwOXpySkZtRGtXekZBQjByVEpnTmNEc2pPL2g3Sm9VTVhrRTBZajNMNzhpMmFGZi9US25FUW9ibVVzVEdmRURnaEtSeExpTjZub3h4eHBDckMvV1M4ejFmRXQxTW84SXZCODVsa21OSE5CKy9XTXMvd1JVUnZFTnRDaFdYZmp3VmJGU01qWjRvUE9mNVdmYmR5S25LNWRmNHZSZWhGOHowN3lRK01TNnJVV0NLdmwvZFhHbmY4UFQ5WWtGWm1ybWQyS3NBanprdUQ0QWN4UlZkLzZ3M1Q2akMzWDFLWTNhQXlkSnhlbFFjb1lqcXEvS0VGV1ppZHN5VERWeWt1WTFMdndRajhHdllFVDh2Yks2UUpBWHRoaFc4N3pEMWFQOTB5QmVLdFlXemI4R1M3V0xYWDczb2VZNEUwTG1sSDJrWkswWG10ak5FbWV4dHlmUUg3SmxaaEd5eTNWazhQZkRaT3BDdEZkejBSRWJ3NkUwWC9vVXl1ZktvblJOQnRkM1VQQXB0REFHaExON1NSMG9LUWFvWlkzVGRPS2dIN2tybHphbnJ1Q05udnNWaEovWDFtbTl2eUpPYmhYajJSb0JKNmxhVld1NjBZNlA3QmV2RmZOYS9TdXNQeTVtRUduZVEvV0RJZ0tiV0JMM0dIVkJIMWI0RG1aNUlSV0Jnd0duQjYvS0xla1FNK2l1Y3d2bGttbjFNNDJ2MkxOcFk2UGppeUc5VnBUaDhQU3BoZ3Vsc2I1K2hRakxycElnS2JSV2d3L2xRR1pWZnd3bWpMREFrYjBmdk5hTnFEVktxTmdSeUlJOXVwckFuVjIxTHN2TjNUMVhyWTZGQVQxYlFHbmQwa3RWNkVkT2lpbGZUS1ZJc1B3aEw5Tkg3TlE0RFlLTnVaVWg0R2FkTEY4RUVyUHZQNldyb0dZQjhBU0RjL04xWjdBSGdZRVdNdTI2akNab3VBck9qQ3U0K2hNeWRRR1pvUUtoRjFQaGVQcU8wSU16Y3VRV1dPWHJCRDF4TjVQajdRS243a2hsWm1PeW91V3h6ck92TjJUbkdGZ3cxYmkzQS9uY3JNRG9sODNmNVVVK0lPdHliekc1M3hTK3FQNFlYYmpUcC9xc0ZsVSsxNXZPSHJ3dHc0Z3JaZnNoNXcwR1owbjlqaGMxVzk2VzRJNDR3ckdZbHdPbkVuK2Y4c2hPMHh3SDZBNSt3d0xnU2I0aWNWS0h0QUhnWEZFdzBoV2tmOEw4b0dDaFVwNXVaVVYxYjlvb3F2ZGQ1SkdTWjZNanRhYW1QdUpxVjVkemw0cnZ2RmdpbjhlZnllN3JaaFJpSTR0R3d3cHcxd0tRM0R2TnR2RDRiZHF6VHRycjRsTkZDL05PZTVaSFJrNy9XL3dpZzJscjRnbUxMdnJkd1RuYnpoWG1rK3Y4ekFubWh1R3VhTHBzeEFJN25YeEZUZjFOSDRkK3dtZWdEWElscTZaVys5aVM4TjlSS0FlQWdhckVYSjRuVUN2OWpHUVdPTWpOZWFOaUZ4Uk5LRE5PZ1BkRkxkcC9HZGVxOUhRSGpEaVd1b2t0dFAvSUxleHh2OVIrbU1raXZ0UXNJcVN0MzBPa3dqSDNiZHB0UXQ1bjJ6M01wZkxsc1FMYTFWQ0toUFpqbndERzBWWWJMQXBzaUNSTGRjTFRhS0VzcUlPbzZ0R3hVY0NyNmE2SlUvR29vckRtOWJ5VFZnVGU3OUtzdnFpUmQyQzU3d21OTmVVK0puOHdEeGhFeDcyUE1JaE82MjB1VUFLL2VDQTFJL2NNUnBvbTdyaStPWmxsb3Buc2FlUEp3NWJHbXNIV1NsNkpqVXc4Mm9QMDFFcUtTY1RyOHFXby9uV0V6TmtzcGhwQjZ1N05PNkFnRTAxVGtwRnlIRWZYZmNEVDdITWcrSmZ3SHo4dGNOWk9keEJ3aUpWT3g4V1RPbmdWTlBHWUp3U1Zrd0ZxVHZJYWtnbExQaXY5d3g2TlRqRkVkcFEzYjNqUVE4NFRJeU45a2JqUmJ4WEFJMkx1UnY1T3F2RHNmZW1UVU1TbFdDUkZxeUlDNHdJWDRRUTNwVnNZUEtjYjgwalhGNDcyRktYYTNlMmxTeWt0VkN3NFQyVFNYbExwdkplczkwUmkrUTBCMlZPNEQraTd0aWFad0JXR1dsTC9ERlF2UGNZVk02emVrQ2hJVjJjbG5KYWc2SlZZaEJ4WmZvbWFhUHR1bk1zckRaWjIybEhiMU9veFNIVlRhUTNweGdhS1JKUXRlck9DNGU5a3IrbzY5Q2tBWmE4SkFzRXRWUVNIN3JuenFMUkorb29OTjRzWlNuOVJPeEVTSHBpTzJWVEtMK2NVYnk4TnFFN0FwT2tPdHlxejVXMmMwanBvTGRlOTBWQzlmY3NXczBkbXovT2ViSU1rMXpUMmxyYlRhaU9tSzY4T2tiY21DSkJIQ3BvckhsN0x5cGJLZ09CSU5Va1Y5NFVNYm5sUEdENVFzeElvR2tBNVdFRlk0SDRiZ2NpaDFOd3F2cmRsZjBDdVNySzRTT0JhZ3N1UGhscXpEZ3lpc2Zodm1BOS9lak5ZN2cxbGlEYW9nY3ZNT0tST0RLVUp0cE9ZUHR0aXVzZjB3TGRIK2RCTHhZSkxzbGpUWmRjdmJTVGtVcTJNL2xLeTR2VnI4ckFMQ1dFWTJ0eDVTUnd0VkNpeEcwcFJTYzI5S0V0RlF0NmoxdktBWTIwQWF0M0w1RlprMW5sekhYNmFzT3dqRnl0WnkxNWhFQWpFVFBFYVpoSGNINU55YWw4QWlCZFBqODlTRWVCRWx3N28zTmJuZFFaRWhWdFJPOHVVeWV3cWtaK3lvUkFkVk1WYmdXM2NMM0JkdEdoQlpXS2xVem1Ud0ZLaDVtQWhZakZiZTRxVE1mNE1yNG5QalhBaGlOczNsQ1pCZU5ybnVocnkwdEV3OHJzOTZhTkY2Q2R1QlN2U1FzcDdYb2RQbU43Rko2RlVmdi9LdSt4dU1JWUJScVd1Z3BsRllhQmx2d29XaHBDZ2trWC9RWWxIbkxESDhpd0RIdFZxcEpSZzE4M0xxcWFhV00yeERCb05paWxFck5XcUVoNlBjQUR5REZrM1hjYzhZMU5YaFNXNGY4VHpyOUpmY0ZkRE1GcUNWOFgyT3V0TEpwMFlHbzV2d25ESlJ4Znp3dHQrT09SWXBaS28ydEc1OU9XTEtadzk1VkVHeHZhRU1uUm9pYlUrQU5MeityQ0RnNEMybjhOTHBHU2lYZm9GMHZ5aEU3RmRjbjVWQmorSEp3VjJZNTRQSjRiLzBVeUc2UldvaTdkR3FmU2FhQlBFbUR0a2RYcE5YZTV3UVhFdXV0NGRrSFh2cHI1bS9JK1FGU0tPaTRtS05oNkNGcG5TMWFMbEVteTh6dXpaUXVObk04aW9Fb0JWY3dPQnVONHZ0MU4yY0NYTmxCdUxKY29xTEVRZ0pDNEFLOHdPTTY4eWx2MWIzbllFMEp5UjB0RC9yMjNoVVpWSE0wTWdQSEo3N0hZRWpES1VLYTh4SFRiV05KUU9Xby9OeWg3QTE2WXhMQ1ZudVdKS2NDZ2ZjeTl3alpEbXlEWThDNjZYazQ0cW05QU1PWjQrQmViSVJDNjhKYytFa1hyN3V4YmRjczB0YmliVmlWODdTU3h6QnpwR1hRU1AxbXdUZWMrUkZCalMvZTkvcm5sSU5xelZTd0R4RVdDQWhWemcza2sxR0ZITkFiQXAxbXlsaGxvK1V2SlpDOWVHTVBnQmFaVXBDT1F6RFg1Vk5oK0NObnUzRTByTE9IOXZsYU1VZFZqTUdTREZvZ2tKZmZtcjIxZ1BFcHl2SGpVdVplWHZ1Skl5MXdmZmNLUGpBVFgvcDVNU3pWSFBHOWFXeERyY2x2YXZNc2UrSzllM0FhYTljc3FlcFYyRTJMUFIyU1JtcjN0aVJFQys5alliSnVqZm9wRlBzTTdaWkdxSmIvN3U3T1hJQ2NRYVRMc3pDTW82ejdFWHlxcDVnK2g1L1FuOG9BNXNtRVM0d1B3OFhMZS9VWitQeU1zSHAwL2FqaVRvZnpKejkrcWRDRENpci9MRnd2UEZlcWtnT1RqamN1OXo0bzZyV3QxN3I0OU5VNGRnM0owS1dvb0dvQzRQQjYrTVowaHJMOEphaDlTODJxZGxkMVZmMWVoSEpnYWNGT2xaZzN0M1hpSHZPcE5Sblk1dXhvQzU0UGt3SmlKdUR5SUpnSjRUallFSEZtaHZYYVNYL1puY25SVGNxMXFqZ0VJY3M4V1BrenE4allheUR3cHJCQjFaVlY5eVRrTTBZaDRFeUxRZ0tFOUFZY2pVSU5lYVhMcmVRdk9XZ0ZkNUJjWWI1dGRMTklJM2JHYnFKc1ExRTVQdU9kUG10N2plMnhmaW9aNDQ0bExramVsaGZrNnUrWFFXVXYvVUJLV0VJemhtY2l3TU43SkJDdkd2L2ozdnpqOS8xZUg1QlRSQjNib0N6OXgxZXdPTFV2RE52cmJUa0ZmK1IwMDJpeXRPRjJ4NnVCcy9IM1JzeVVhd29PMFJ2TjF3US9LVEJrVThaT3ZxL01qbEI2d1Z1RHErS3VnWlZDQkx5Lzh3RGtidXgxZHkrSUVUOVZaV1BmWlBiNThuVGNQOCtJOHA4MHhRWW53TWpEWit3SGRzREsraVdhUnhKd2VVL0p0NlRINmZtSGZ2OXNrKzZpbE5ONkVuY3hPeEFyeTU1bFlFK1lwRmpHblRxd1hvSCtYMk5uZzFlS2xOeDFtcjlIajd0bWZNcnJLMzE4SGQ3K0JPdFRENVZQbG5MRDRtNWw4QW1LNkYycHJuVUNVYmgzbG84MTAyVmdQN2VTcDlkNmYzdkhqakQvQWliaTlCVFlQWVcrMDlieVd1OVJBY3I2bk4wVzlRZkhpdk4vWmV1cUZ6ZXVuczR5ekVtQ2JZNHR4WDNWZTRQQVJibWtyMW10WEhpUXhURUxRdVB0ekk3SWl3enkyTVVRakI0S1FXODQrM3l4cDJ3Y0w0bEo0ZjRZYkFiWWpzcHJXTDlYWWpsZjgxOEFCYlh0dCtiUWlxU1dMZjNaM3RlSHZNZzN3YkZXbVRzRzZkUHExZ0p5Rlc1OVNOdjgvWk1pUmVaYW5JUWVGUys1MVUxekk4K0N4WE5uOGp1M1ZxRFJyY0dXN3g5NXM5K2FScElvWTBucTZmaXVnd2dwZEJ2aCt5cFZndWhYVGc5VEdNQTRVcWpCR0tFTFpMbXZYS0ZIWTZVUnhuWGduUWFycnhibTV5amtOMTh2R3lWRUxIdGpnMEVyV0ZmSndOVXFacXlxOXRIUHhKbWkwYlJEV2FMWElqUE1zU0hwbW1EUGRiY3VyTFhzNU1hV1VyVjhNdHdLWTZZb01jQnNaQTUzeFExb0cxSWU5TWx2Sm5RdS9aYjF3Rit0dWJOUDJ5Q2dhYUtHUGFoL0J3cGlEN1JOK3pHaVRZYk5UeFZTcnJCWXpubllTUEtvM3IvUkRrZzVIUkwxZUsrUzh3WmRGbzlHT1pNdTB0YnpSOHNiRTBQcVVvZFFKbi9wc0V4bnM5V29UTU5RaEpmNHMrc1k0UjNWUWUxa2ZHS2xlTXQwTU40aVFqcG9weVVoTUJzcEdUMlJFSm8zOVArRlltR0p5N21vWEZ1SjBYbllxcjZuT3pnVlE1ZURMZzY4QW5FVWFDa1o0Smh2YjdiZTB3L3N4b0VOYkVhZ1EzNGloeW82anQvcEdoTFAxNFJpdno0YXh5NDI1UjJwa09xcmlxMFZSSjgxSGtMWWN6c2dOR3VuUUZxVDVtaTdsTGdQRlQvNjZ4SHFhdDM4MG8rZUp3SnF4eDJMcWVVcmtUM05IYVIvL2Fhek9qVExpQUVTZjZuZ2J6Tm56UDJ4YjZWWVZaMjNjMXFzSC9FZ0c4TmNlYmJCWGFZR2ZrdFlQOXY3dDdlUkFIb0FBaFVrYTR6VVpEN2F6R3k4UWVYYUcrRXl6NUlFNC9XUnhXNko2Y3lDQmUyaUZWOCtzNllKcjRHL0R6RnJKT1V2WHNkVW4xUEpYU2dqQTJrNUN6N0twdXN5bHdvcDNVMnFLN0RTN3JNWEpjT3o5b2xjYXFLclh6ZHllS2NPeGJTSGVCbVN0a0c3ZnlmbWMyU1kwek05WS9xd3NoWkJtc2UxYjJJb21yWGhoaC9kdGhpTm9hNDdnc2QzOUxDWm10WUM1OG0yUVF0NG1TYkdCQnNXaDhJY09rS0ZVeWtqQXpJZlcxcnlvOStOMVZsbnN3V3V5S0ZsUXJoTWFrNnhCdWRaWnZVSTNiWFhJQWFXVXdxRkI0V2cwS3FVTmdkN2poc2ZyS3hqZ0lUV2dXbUNJdlZHWUh1WmNxTVNLNWd6ZXhDbFU4Yi9iTFlZVFV5TStQbEFmVlZESzl0bGZ4dnI3NHNBZUxjRmR6NERVa0hyaEJUazZ1Rm5hanFsblY0R1VUTVlZNWhHclVJVkEyZ0xRV0g5SlZBYzNBdjBFNUExZ2Z3ZmVtL0g0UEZnY1hucDRRRkorN1UrY2J6VXhGZDh6a3oyV3VxNVdUVS9hSEVXVXRPY2lIWTY3REZNYWZNdGk5aUR2MXFMSC9LSlREU0FVaGhDYkkzWndPQ0dESk45ZVlsMnB2NFJKV2FxNXpqQ0Q2aEJab0RZbnRrQUNkM3d3RlcvblYxa1MxR29oMjhZbzBSM0x3VlVGSjAxcDU3UnpBd2NIMlY2ZFdpVnBJWGh3WXRBd0dyMVdxcSt1SkVUdllUci9PNnZsbDNjZ3NTK3RtQTN6RFUraWk4T1NvWUp2Nkc2d0xiay9ZRDVic2FGSmxqcW5EM0V0MlozRkk0Tis5c3dsbWRkUkVEYThHWlJzNEczbDM0T3c3RVZlditnZGNuZjJITVlTYlJFUlM1R0tFYlJkQVZKcENrRnFick5nNEFZSkY0ZjVselhQcENIQ1VLOHFqS044ZGVFMUUrNE82RzdWVzJweGJrenpPVUlUUXlxeGN1ZDZNWjhld1ZtT1dwVHZ1MjU5VkRlaUZNd3hBNUJVaE5TczJkWHY5QUZyZUpMS29NV0tua3BVYjlncW9tVnlvQlBwczZUc3k3V0FFQlp2bzJ1Q1gzam1ZS0NhMk91NDg2cDNiNGovZStjdXlqRW9YRzkzelZ4R0w2QktydjQ4L3lva1RtS1J6VEhFZDdvbXVFMFRMTFVLMkRTTllaWCtwWkw3b1EzZG5iUnk2c0hPRVdZdHY3dHdmZXZ3VUNVS0xsUlMwY21XNElZMmFFMG0xdGR2azQzeE81cFVsSHRSdEZKNE9LUmI4dUVONnNsTURxTVZCK3pMUWpNU2FhbWlQazQrSG9WM05OUXNkYkEyZnhsL0VmRDUrYVBYTG9oQVdzNDhsek5hODhQbEM4aTF0UnA5TkVzQUE3YVgzei9LN0p6MTdIN2FwZ3cySU1oMXRyTVEvZW01aHBmS21WdEljVGYxUmhHeUJCS3ZLc3B4YjltQzJrbG1abmlFZ1lIR2JjYXJRSkVJWU9GdGQwZmtwUkx5YjlvNVptYXFSTWxrQ3hWaFRFa3l1a0w2cTliQytRRHd1RVQwQVBMQ2UxNlJjNGc0b0UyajF5RGwyOVFPUnlMZkdhKzJHZzNsUGVBMzF1Ykl4aDdKandua2d0cnp1L1UxbTIxNkdWcERWK0R1TFIyWWNHVk5yYkNiWjN5NE5yaldxUkg1M2FweGU2SExLRjY1MkI1R3NPOXQ0bW5FS3pFRDF6ZUp2Tmk4R25tRHZLK2tTK2hDaDU5S1lJV0x2aEdzTXg5bWJEanFjUG9WMzN6V2hGSzF1NUR3UzNhbU5oNnE3NDNQMkx0YWtkT3BiZnZ4a1hZdVpISm9LNFNodGo5cnNEcUxuV3dHTnA1N0dXQytIRFZoeXpCZVU4b2Zhd2JDS25DUnliRWZmWTA1T0tPdXRzOFNmdEgwWjJYeWI1VUNkL0hlNU1ZQ3lYWmJzL1poSmErZTJ3TCtGYkMwOHY5akdCeEl5NlNuTTd4YzN0YyswR1pRTFdDaGpzMW12NXgwdkpjUDkrMWhlZVhvOTZSNFp2U3NUNHFxZloycHhTb3gyeHZHbm9YZnhVOHAzL28rTzhzdlZiSjlsUFo1bGY5NytNbExpZEttQzhtNjBGdlh6VzcwK3ZkWFg5VmdZeUUyR0pxS0NOYzkrOG1EQ3J3bTJraHhWdjBPOUNuWVZHN0wvMDZScUtLdDREekhoWDhIUHJxNW11OHhUREt4OFhUT3VBRHZtQkxrb3JrWUdZbmlJZGRUS0lWT2xORzVQeHZuYTZqL0IzU05yc3dVQkpnVy9BcjJQN2FJQ01OblhRRWJYYnBpNmZ1cWtXdjc3NFFLekpSQlpEb3ZyalRwL2lyc2hCTXNpVVRmQ3YzRmtxa3BIM0NuMStyY01ENENFTkxvQkpIalE0OVpaS3V4U3h3Ry9BYjdmamFTdTkrVisrZEdYWVp0b0NoNCtRUTA3TW5tRWpZVEJnN2lVZjIzOVRZelhwK3pheldpd1RvQlFjTXhKL0QrYUg0RzVhZ0I4SjhDUkQzMmNDUTlKUHhxSTZwU1dqL1k2WW9XWTlqb2Q4REV3ZWwxbUIycUZyVXF3Qk5EWXZrQnJMdlBjRTNBZU1uemNzbEV1aFAzYkZUWmtwZmVFVzJoVHdKTTJxL0RTNDg4ZFVBKzFsNjdlRHhLMkNxWTBOZnU0cWRqNVB1eCtITGNZRGw0SzU4Tlh2dlZ1TmFDMGZRUjRRT3pqSitDbSt1UmZiMi84aEVMdDhqbXV2VitSa0M3aVp6dWdVc0VBTHZhTXZjNHQvRXZVbjZCYU5hUGxubldtRDBick5PcjY2ekNyTUlvZ0dPRXRud1M1cHFpUDZ4c1pKNGI1aWJDb3pybHRKL1VkQWJUcU1lRld5dWs4SkVqSERtVEo3VjJCUFB1ck4ySzltTkwwSVlibk5HQ3VWQVcvcnVyZjZZdzhSa3ZVUHBzYW1hNElobzB2bHRXeWNGU2pSMHMxS2E5UjN4RDMxWldhOWZtN2pVK1M4L3NuU1M3L1ZwUWNrK2RGV2t1RjlQR2xlL05VMnRzVTJXNXVBaGZJZldkeVdjZHI0S1JLT1hMK3VEa2RXVTAwV3RHMGg3eTFYWWpzbDkyMTZzWnBnU0xubGhmNmZMVklGVVRjek5ldmRxS1Fib3FqY3RxS2laNDhVYytvVDM1U1hYM2xYc0gvTXNxMVZhSkVlOTVwWDBJeHI4L0ZvQUF4cFdkV0dsUWlSTE93T2tmN3pOMlJZVW9pR004M3doSDdMck9jUEtYVkFEVUc5Z3V2ajE5ZW1ZTHRJK0h1SG9NYlV3VEc2SFo4b2NyQ1hOMHF4S3dWT3prZmpnWGdSZEhTQUhKV2pKQnA5RW54QjJObFNoZmVaVk9lVXRTdVEwSFAycm5aTStCRTFrM0FUcmVtbDRlODUzbGRkNG1BM3d1TTNER29WOVdocGlaTmtDMWhpa2g3R0JkQmQ3dWhSVXNoU3FPT0JmcHZqTllveVdCc0VtbHBSRnhzc1NZbTZhakMwdXJ0ZlU1Wmg3bU8yQnQ5R2xKVGg3SUJKNW5DRlJxYzdHTTFHMnhyMTJYaXZsbC9jRGdTNEFKRDMvK0RTUnlMSittY1E5QkcrNFNTMVJDenliS3NtK2N2Q2tCZENwK3FYTVE0ZVg5L2VtQldSTDMxL0ZwZXJaSzQvaDdic3l5bllxMEJHUnlIMWxsbktSc0lSa2szK1h4NkE5MkNHVUNET1psOGZaUTVSVDZLSjlOWGdsWmJoR3Y0UklrNjFqTkxkM0ZseEJnOHU1d0N5WjZPS3k0LzJNams2bDVFL3JhcFBsOGNiQjFkRGwxL2NHQ1ZRdXY1TVVOcllBMkpIbDBoSEVyekp1OEZLNFNab2pBMWtWVXZTK3JRaDhjWGo4bHdxSk9QY1c5SDJscms5OGhwTmJ1ZmEvUnE5VVhSOXlRS2k0UVp5QWEwWGQ3eUxjUVFEMWNBZ2JvTm5YbjNoNytrRmkvdituMzYrdnBIQUIrbVJRc2lJeS94cFBKMkpCR3RjWUxXNExGVXo1Z0pVdXR0akNDNlZBZE1MU3BWZFFLdDdYTFZYNWxnYmcvSWFIM0RlbDM0SmRvUk16akxxY3VvSGRUKzZEV3ZFamNhMVhjWWRicDJwdzdPMTlPNm9FaVdBRStvOTVjYVNDWG9ydm5SWHZDQmxibzBFenJhUTR2czNlOGhySGdOL0UweDExS1RFY3B1RDU1N3Q1QjNieHlma3Z5ZkJzekJ2dU5qenNsWldpUWVrTVRRVGY2T20yVnVMbW05TVJKWUV1bURsR1M2eXVjL29CNTZVbW55ZW92MGpFRXJvcDdnSXIrdW50VkE1Q2RCZzZmWjMyQXFWb2VNK2hObGtYV3p1aUZ3M0FzcjNFVXh3TVdQRjVQaDNnVGVwams5amJjdmhLNjl5eHVueWY1MU9rcnQ1OFR1dTBOL0pTODNJZDNBN3NvL3paUngwYW5pbzUwZmVSbzZ2aVdsamtmb3dmUERRSTVGSURIL3hWQ042QjRPUjlFY1VqellkaE1uVTk0aHgwME9ubXB2c2oxbUltdXJhdlFCQ2JpQTZCMEkvQ2lTbWtEa0NoRW8xam0xNEpJQTBxbzBwK1NOdzZROUtLRTZJTHMzRm1LZGZTeUpYeCtTand6aitwZFA3Wnd4alpCTFg4ZkpxSkJlU0VTTExGTTQ2Mkk0alh5Ykl2T205cGpaVkVmdVEzSm9VQ3RINnVnbFFMWmhVNERLU0gxSFNtY083US9VKzFKS0g4eERTeStaMW9EaVhyUnliNnVoNlQzOFNveThMckc3eDI2ZEFVTkkvRzVHKzdmYkNHTU5XdFZFU2tzOE41SlcrQlU4U01xdy9USkxNbXo3MjB2MHdZbVlySUpzMXJVeTlURm9namRoUlJIUmhHUWc2cE4zUnhaT0JWQUVrRG41ZzJCSjZWM1BSNWFMSTFrOVVSTElvbkhLR0RrSTZ3UEw4NFQ2OVBabE83ZWo2L1cvNEJ1WGhFcllGTjVXZktRTFAwZng5S0ZTRDZkNVJxWkFKR3VkQ0NSRmZnNy9kYWQyRjdBNFdBZ1QrOFg3TkVJa3lLRjVOWFBmZ3FHeWkwa21ENGJXQTZhdVNFU2M5STdWaEpCSTFmeWFEU0RZN29hNlR3Mkh4dW52U1pBdU5EeUlNZmkrOTAwMGFIWFQxUkhHQndZUEl1elM0OFNIWnVFbWFZc3lLZkpyMWE5TWpXZGRVUytlekFxVDZMZUdia05ibm9PMktvUXBTL1Jib2RpQ29NM3F6eTdDQWxvSUpqNEpZb0JLM01mbTlKRUsveFQ1azU1U3RiQWtyWEZmV0QzY09rWjN3UUZHelFwWHRQT0NtdjIxYWN4UzVMdGMydHZOZ1VwWUtiNmhOYzQ0S1NCWUtoNExxbWdsQm9YWDNBN3NuT0pzeHBlQlloZ3V1TnhxR2VoOUE3SytwWHVqOXRQdHgzVEE5RmgrZHpMeVMwbHQ5ZXVXbldYdGg4bWRVbWJ0VzdkK2FCV0ZUUTh0NjQ3NUpya2kwWkIzSlpWUFpuK1htcENoWkxQOWtHajVJRDk4aW9sK1h6aW81TGpRTUVjZGtLUXZFYWpidC9qK3JybXFycXYxdXdCc2FFTkJQOUlINnpyNjV1c2ZJc1MxbHdRTGVaaERtZWF4b0dRdmZWWVRIcU8yQnpoVjZRWVdDTUc5SlpTMWZmYzMwalFkMzR1YS9hazBLZVp4ZlFEN2hpZFNXWTRKWUdSdWZlY1FzNHdrYmNqZzhVWGZweHBEdnJZU1pTOFdOYlVFU2ZIejd4aDBNREhOemwvVVJMNHFYWXc4T1cxZWFGak5MRFhqcTI5UEh6OWg2SVc0bWU3eGs5Q0dVazROVGRHc0tJNWRVdnBKQ3JlZU1mSHF5Y2ZrVG9VNnBScUxTSTUzaDU0bFpIM1hLSHM1SmZqUi9nV2pDWEIvMGk2Nk1OY3RsUXpGS2pzZ1RtMVV4cTh2Mnl1eVhjcWFVZFBONGorL0FkY2x6c2c0d1dMS2pocXdvalhkY2psR05vbEl5elltbyt0bUJKdkFXZ3RZbzVucGk1ZTFuNDFham1LYlFNMk92RndvTTNaU0lJOXBmeXA0NGMya1JhL2s1dmI4Mmp0WmxvWWdrS0VTVjBoL2E0VnRUa1VrWC9uV3BxNWVyL2JHYWFKNWdtN1Bod1hobTBJUjNSOHJsUXpNSUhUSXVPVGJpdUdScmpOaG9lekJNc2RYZ3FsbzU2Y3FmQ0VmVldoMncySG5LdHU5aXhLcHRRYndmb0NrMVEvekpDV2p6WElLOFp6Q0U0TU1sNk1VUmJ4MkFhZTI3VVgrVXpuRTZSU0NtVjVKOTFJUG1VNUZ4WTBheU5ORXA5NlRuZkdoVjdUT3JUY0RGQmk5ZE0vVEVKNXhrb0NINUZIczVYNDZYVnRiMHNSNmpvUzRaZlJQMDc0dHYyNDhPL1VpOFBnOXhaY2xMb2xMbnJUWTBwVDVPYU1kMGhZcDFLYWFiNkp0MzQ1WjNEamNzZDRYTHJkQyszMDhPYko5Q05FZ2VqRHM2UUlrdzAremxMM21XaXlMazdyaThzM0pLcVBnMG5IYUdHZXgwNDhjQWpreUZnR2JHQndFakZYeldkTUdkSTFEalNpSnhtZ3ZOWXNURHhkUDg5WlM5Q1VzSzRJZ2hDZm1yVU1KQXVpT3lmYjg2aEp2U3IyN2FsM1FZeno0cVFQTCs4bWRHVVhRTGlmMXptbWRpUWtnNVB6M0doU0pEOEVGRmlSOGhueXlXbGVSQ05ZV08zS3VCZmdLekJxNm9oZUxtQkJ5RXlnNzUyVllPTTNyOUNHNElaeWVvVTRtb0FxWkxEWVZJbStoZ3N5bDlxVkRNWE96b0tlWG4ycXRTdmtYeGdkKzgxL2N5VGRBUTUrTmttWXlYV3ZJUk81WnBTVnIxbFRpU05RaVlOWFNqTitveWtGaE9ieFA4ZkI1QXlhcnF1aHZwWkttcmxvT1lJcFpxLzY3TldjYTg0aHQxOE5JNUtIZllkeWxGMlhvR0NhcFFLWWk5VERDQ1M3MUo1MFBLMzd2ZVlCNThZYnVHdVRRcXJua1FVWXYvOEFzMTR5QkZweit6V1pOYjdYV1l2UG1EcCtBQnRTN2pMcTdkaXFzSmVxdHlQdHY0Wi9DNW1lWjFBTDh2NjZaZkZPRXozRXdOaGZid21kSGR2RDlhRjdrY21ydGtuUllWSXhwV1ZDV0dTb0RKcVBFYmZoMzNVTmFzamwyV2hTQWR3Q0JrcGxBUDJVV25lVURSRDQ0MmowVmVIWE0rL1F2Qkc4K2c4OWxlMDkvdTRWRXZLWkRKSHFrQXJHRXJ3ckdqRkFLaXFpbExlU3NERGNHL1d4bFU1d0xSaHZTUXZLdmhBOGQxYm1nOU9iTnEwejJKVFhHdFlaZmlBOUwrRk1TTlY0d0dHc0pqUnVWbTNSM3BDeURYSTB0VFZZNytKbjVoSnYxakt5NWtOdElRU2hBK1RpMElreHBXNFRiV0tWVk5UNDY4eEJXZVhMekhSSW5DSTJPL1l4ODR3YkpTV1dXOFAwa0xYbVpSNlZNOVVLSkVpdUQ3R2taOWxwUFN2SWF6ZEFZalhWUWxtRUYvWjhrNVhWai9EdUpmbTVXZUdjVDc1S3F6clhQSXlvTEdzUjA5SGlqdmhtV3BteGRXN29yU1VYb1o5Y1lPM2pGeTM5YXcrTkp6Nm1NK3V6K0FGbmFNYUdEQ0tuV3RrUlNORFpXSFp2T214ZHBWWTM4ZWhNM0FBVGZaQkxiZThJNC9ReUtneG9KVi9JUzJQNWpkTkgzTTZGZkFLNDc2YWlDSFM5TTNBeHo3czFjS285bStXMTZRWkI3U0hYbTZVL012U3ZQeWptTFE1M0VaR0ExWUNsSEFLYlVTcTF4VDMyQytBUW1Zdk5qOFd2eU82MnRUbWhiMW5HbmxqZEN3QzR0Qy9GZ3A2SXRKZDh4bzBUVHZ5Ylg1ZTZXRXhNYmUrTlIwbHIxZGdMakRrODBISkV2SHRCMFVlTys4WTF1VEFlL09TVlBDU3Ryc203dWZ5MFU4NkRnYVJiNi9MQVRGeTVJdnNXUVFEdzA3ejJzY2Z3NjIvYjc3L0RYWmJQNzVjalBadEtNMEY2NkhHY2NJNThobUlaU0FTVDAxZ0xFQS8xTjNJUkhZRWk5RG83S1hUdXZRK0twenRydmVqMC9nVEJmV3ZDdHFQTkFDbWlMeFV0M3BKVVAxdjdBOVUwa3d4anhxRzJBa2UzUXVTeTNlS0FuNjdQZ09paE1ZMFRweFdEUVdEQWZ2UlpNZldhd1A5V0FrS2VLOEhuZStvZnVzOS9JcVduTHFxNTBiVCtnYmRyVnlZODVKREJYOVpqc1FkT05kWFg1M1p3NXpBK1pnS0VScjFwOEZUZy9Nd01OZmxWb2xucjZHMG94MFIvOGZ3WG9MdXp6a0owSExXNzRIWXRkdjF4NEIrdThUNHQ5S1VvRFFYTWkxcmpsdEkwSm1UbHM4U0JPY2E1KzNWSlBNYzhRdlhrZUR1ZU1qOWJKT3JVZVNrS1F0aXdHelRRMmpPUmFXTXBIaTRFTWJENVFKNUdKd252clpYY2lTOXhkRkQ4WFdZZlNSUk15U1VxT3VrMWZmdU1ta3RrSS85dFdrRDFtblVBY3Nud2dDc2RBL09IYm9VMDNCaVVTR1FjNE5COVdXMmFMTDJPdUxVWW1OS2hON2lNZ2ZCbUtVZ1crM0k3UlNCV3lTK0ZNQmk4bzhja3g0N2J6bVFjRXRlUGYvOUMrTzg1T2ZaM3RsYjZJcTBBaFhOV3Zlc3c0OGN2TUhUU0M2ZS9VaHowclIweTN4eXp3UXhzS3pGcCthS2RTMzJVcHd2aDFIaCtWUE5FdmtpT041a1BPQ0pkanhsUDlQTmtPRzJqMHBib2o3cDNremxQZzJBalB4bEtCalYyakhBU2lFcERKUGU2S0JyL01wUTRZZWFnbDB3RXMxcTN3Nlp2THpaUTk4YkFnTDU4Y2N3TDJ0N3NIYWpsWVZCVkRTa3JxWXBMWGRTZzJYZDVHWjduWHpjbDVkdllnTUIwWkFZV0p6M2cxK1pkcVIxa0lMcHB4a2YxKzgxWUt4NFpEVXBqMjZWOVl4OTNWK2Q1Z1Y1TFdLdnFjRXRtM1hGdzVTaXVMTVMrakxabmhzakZKV3pqVklySkZmUFpwVVo5OXhSQXVCOE8zQUh1Z3Y3UVM4OWx1U1JxWU1ScFdEdVJZT0NvVGJsd2tlZ1BTRlFxWjUxUHl0SjIxQmttb0pWdXIxQllEazErUDB2b201UmI3RzU5a3dpYmNJSHpXN0tpc0lTMkcvWWh4WjFETFlReFRUalZ2VExoRVJIWmY2V0Rla29nSUxmSzVmUWhvSzJ4YmI2Z1JEajZlTEF6MWMzTlBjUFR4bDhQVk1QekNVL3I3VUltaHNYdjFad2xhSGtiZ3MzRnpURlBGbyt1TlFOYXAwd1pOREtWWmlVSEVrQnI2RmpLMEhQMlM0Uk1ZUkZIL1JhWklMcGV6YTRpcnNTK1lDVkxZOEd6REdrbXR3cStIWUZYY1BsTDB3TGlsTlFzNlZmZm1KZVZtcHFMcm5SUUI4aFBqaGJBdklxL1JLcEpSTGJjdko5V2pJYkxySFF5azIzamJzb0FIR0ZmOG5SSHI1N21mUnNZdGVUSHRaU0JoV0pTbFYwdFdITksvWVpsME1uSUVmOXBBZVhMT1JUYnBjRXd4WllkMkR0K1BpSk9xUlJiNm1temJyVGxmUUNuRDl2eUNQTHZNRkdhVzdzVFJTblFPWFRacVA4TDBpWjJvWFQxQ1ZNTXZmVUdHWndnZHgrRnV3SERjUDcxUzlSdm1LN2pPSzFDeFFIT0kzaWFKQVdybEY3QnNGcE5QMkdBdnFaY0hpeHh3Y2xMU0tFeHVqa3FjQXF3UlBHcTlWWDl3Z1p1RkhGRzdQOUp4eU1mZ1BvWVhJMDIzWGkvTE9NdG9xaHhFQ0xHeXpsclhNQUltZHJYZjFCT3hGcUZ5STlqQWhxQ0FXWHAra00zMHVNbHhJQ0w3YmVkK2ROaHBjRWZ4YXJmVmcrQkZ3VXc5MkwxWkpDVWkyWnQveU5xN2pGYzBmRUhweDkzc3l6bjIzQlRndDJqcUEwa0kvRmUvTXJ4aEcrTUI3dGo1MjljUGx6MjUxQU1QanI5Smk0ekFXOWhVWkVXa3BDU040RUxadmVLdU9YL05jSWY2ZlJXaG44N2pPMmdvOWVLQmNYRG1Ca2taa2lwS2k3Q1ZsdWYwdGllZkgxbjhWNjBTeGFhUmZJdjllcElaenloNC9KODIvSzVFRXZ3azdiTFI2dndEYU40UWxqR0U3bFJvUXU0dzRpQUh4bVFYVUR6WU8rTlRVemtIT3BvOGxiSDFveG41RFZnVFJkaUdSRGhwWUdHY25CQUtYU25aZ0RzWDlXb0JSR2VHZlBRU0VaYmtCTzZqeWpFMU4wcDdJNTg3YkRlV2hSb0YvcnBIRDBLalBmK0cvQ0lIcmlCVFlnSU02dzZBMVJXTng4cER3VUVlbWtFcTd6OFFzT3QrOEppSVdlME5YdDRPaTMwaG52cHhZTENsNVpWclFSYkkySlQ5clNLeTVsRGNJajdpeUl2cEZBNHJ3OS9qZFd5VHNzUTJkRVdaLzEzMFlib1BwUWdJc1pYRWpBMXZIZ3FselpjYXNJZzhsMXRaSUZjNGVmMnBGRlVmOFVaY2tRMDFoMmQ1Q0QzZzJwUHpGSGprLzloU2JJSDJScmduYmdhdCtuQ2Nnd1RsRXdGck51MG40VkVkd3QzS1dla2FPcHRZL3VreU1kcEdSdUVHWVZ5RFBLaGFvTlh4a3A5Nzd3S3dnZGVUOFI2NXNZZG1YaEZDbkFzYlV3bDM2dDM2ak1YMWRZTVJPQU9XM2VFRUJnYjNEcE9Vendld3NaNDlIaWdVbGxka0Jya0ZoTUY5d3dXTzBHb3hveGhHc1lueDZmL05VSVpFa25ielo2UkVwLzFTQVVyOEEwN2ttT0tvdHlCZVllQXZLT2ljUU5tYitZOWJPZjFpb0ZTOTFjeGVuWXpsVGpWd1gxQURyZ2J2WnNZWVREVkY4MCtXU2JzZkd2RTdYZ3pSS0lUaUFzOFpoOE9WUnNtb0dQWHJTYmxka1lqSFhwN0RDWjd5UFl5NTFGaFowZjZpRk9ndyt6NytFYlhuYy9TQmx0TEo0NE5DUVlVT1pkeWxzODZUczZhWUNlTWNJZmZhcDNhenhoVnZMckl5YjgrTjdtb0lwU0dBZnovRjBybUowWFF6SlNhOFF5d1g4TFdqZnphMnBrei8yUVVNTFh2cVhLUStpa3Z4RHRCNEVzNGpWVjM0K2dmMys0N2tJemhYOHk2dGVhZUI1Nld6cERTVFAza2FBVEk5VDNmQlQ0ZXZHUzVOSnhaSVpBWmNRWjlaOWJLaTdOSmlqcHdYdE9ucXlCWEFCNzhpRTF4QWZOeHgvNnYzOWFCbU9aYVBKVDcxL3k4bUhjUmUybWhJcXV1alhNRlh4V1V6MDlXWk55a0V4WFlUeTdDd3RyRkw1K0tCN256MHRqeW5CQkJzbGtXZ1h4eGR6MXo3c3pQOGVGdWczaHZrWUNGV282RFArdmlYQlRDQTkzTEcyUjBHVHFRdll6S2FobE1FWDZlTFhJcERWR1FvMFlhdWZ1REkyalVld1pQN0tRdHVhNGlNbGpzYWxGZnhqYXpoNTVHM3BiK1hqa2JlWHdPZ1NWejVHWDNtbDdyd3puRWtsdXY4VlJHOVpzaDRWL0NZK25XZzRpZzY3YjA5cDRkMHFGTkpSYkptWmVuVXF6bnhYOUtMdkg0aW5ON2FzZS9Mem04TldQaWw5YUs5bDdLM1ZLVHVGQVpCcWsvWUFqL011NkEyZVdtM2I3MTU1QklNRW5iL1JUYzY3dGNQTUhKV3krWUIrc1VMMVdhUG1wdEIrRzJGTjYzVnNhOW9yOWp5ejZnVEpNZEtVNThUYXFjTEMvVWp4RjBUbEpQa3NENUl6Uy9lWXNHdWVYSnZtUFVwUGxVQWh2WXZvN2hFc0dVZm05ZnRFMDlGV2cvMk9Gblc3cFpDa08xdUVqNnh5c0xpblUzcCtjVTg0cmNjZHNrYmc4S2RLNFlYdkRBdk9YM01ZS3ZkZVRVeHlPY29KNW0wL3BrWGVwSjVPM2xqM3ZMYVRGRk5EVlltb1Jmc2tiZDgrVnVoVW5EVjZTNS9pZ3FjNzNrdUZEclpDYU8zdktTZFd2M2JTT1FydWZOOTNKY3pXYzNhTkEvS2JYTS8yRnJiUkVSYURKUnNRdTNRS242Z3NRa3JZeldCbC9SazVyUVpxSktIMmZzN0VDUEIraDhTMTRuYWQxRk1RWFNPU1djRnU0NWRNRUViY1pYTjBkU2xDZU5TWGhKcSszczJpMkMveVZlYkUxV1dIYlgzeVRmTzRVNnU0V0t3eiszUGZ0d1BNY0JTNzZXYXk0bkM1NGFySTdIMXhXbU5CTDB1cTJvYVVQOCs2TmIzWStKNEZLbFpUZG5HNlVnT0pua0RFZ0M3TkdmWFVUeGxNZHBVZzBvY29IL2JCYUFodHZ5NGtwNFRoK0JRZEJLT2Iwd0tPUFRBTCtoUWtNQlowUkZmRGtoVXQ5dzdEOFNQbDV0R015cDhpbTRzb0ZkODFvZTNhNW1TQmpIM1JUbUlNVUhWT2hzNjVTMHcrdFU2N1FSbGRxSTY5YXVCc0taa1NQdmlRWG8zdjh2emFDRzFSb2ZEdTBPMzdPMjA1N1gydnhqZm5YRWRFczJaYW43dDBWVDQ0NDhML0pWSi9tTzN0T3Q3MFhlOXVXa3Y5VVZSd0JOaXVBci9DNHExSjY0MFN6T2lObmJodFFjMTFhNlI3WHUwUWpQTzZTWVlvT0FNeExMbmMrcUtvZ25oWTN4cmhaZVVJSENuVS93bVhoSG5McmtwSlduSWEvcnBQQlNMQVE2ZEVuRDJhMlVUUk9taTYrOG5QUWxZd2dDQURXTllxbjMzN3VacDVzNVFmRm8xSnZwb0NxVEpVellsbGt2OFhJeUpXRm83c3J6ZjhFdmZYVWlQenh4bCtVVTJJNmVhZzUxQ1dIR01UVC9QWmlnK0RvQlF0bmVhZHFwRTNsVHpFK2ZsK1ZBNWtMYXFXWi9Sb25VUyt1eTlZdm1BMm8xS1o4dmZDLzloQXhyVjFhZ1JpeStWUzJ3bjhOMGh0aDNQUDE5VFZwcHdsbUd4SUhWWXU1SWJ3UkVyQlZPVGQ2QUhnT1R1YitCbzMwbktESGU1d21kc08wbmlpTGxkRGFnNy9iQXVJaTltZksxS21qbng0aEFTNjJyTjd0V2QrR2pmYURYVVY1V003RDZJSTIreDI5RHF3dHdPY1hLUDBKczdCTzUxdmlsbWxFSUl1VEJXbHhDblU1aElSejU2bFlFK0F6ek44Tmg1T0E2ZXRuS3psWmNTR0NHaUFnaDIxN0UyTCtHK2liOXZFVjlrbHVWZ3UxeDJqUkpoNlFrd2pOSFFwTDdzY1lSbnJ0V2FQc3BXUDQ1SUVOTTlqeTZuOHE5SkM0OWdyMXlkRjMrc3EwOHlkUURhRTdKV1ZiV1MxQUpkZ2JhRGYyUytYVDBLZ1djSjBkSkRrZGIxdk4xWXBJKzIzMEFRTHJDcEFtREsxQVJxeVVXMm9zZXdRMFpiaXlzbEZsQUR5dG5aS1FQRDNkeHFXYU9Ka0tFaFNyK0IvR1IwQXA2YWZPeS9qeE9GdmJoRy9ja2llTUVnQ3I4RW5teFB2cyt0QXFMRlhxZVBlS0NzaHkycFkrVTFYS0dYSHlLS3cwWXJJTHBNYnRXRkFnOFg2Q2JzcS9xNHlRaGlWNUNDVmdBU2NCWDVwTTFjUGdvWldNS3RhamNWRzhaT01LbTUyRDhsd013aFJ0d0NsQ1crMUFIOURQOVZvVlhndzlXaEdCb3FEdmtRQVo0cGFGUlhNbzNGd3ZnV0RScXIyVkc4SmNIN01GakRnS09oUXlSL2pVYmdrSDdJbGFLTDJGZ3Nxd1RCdVR2NFhFT0UvZXRJR0lyakYvOHR5bGprRDVpTXFJMURQWHA5WGtiM0w1SDRBQjEwSXhYSjNoY3RFWVFIMkVIMitlbm5uU00xUHo2LzN4NTJiNVZ5RFpIeFFQaktFYTlNY0ppNTJsVG5zdmQycnNBbnh4dCtrLzJscnZuRmFUZDI2RW1DTFFsQm1vNCtGQ3FtMGRHZkxTeFhxZHdESWZDcTBGUjF0YWNwVEI1a0ptK1FsUFBqMEQrMWkrTWc4ZWgyYURBU28wNDhLMG4zYXJMOHZWS3BSeTcvTnU4YXhXaE1PWnkyUVd2YWhtb2I1dG5YSWMzNSs2RlNUQlB6aUdXZS9Fd1huYnVxaXJXNk5RbWYvYitvZnBWRTZPa3pudm1LVXE2NW4wZzMrMGp1WXBIa2dyRWg0V1pUVDdFMEQzcWZQQjlla1hHQUJVRDh5Y09qTnNpYmgwZm1hOHBDYmhlU3Nuc2hkM3owYkZwR2JZdjc0MFhCdVV4eUx1Ylo0cUU1N1d4RGkvZ1cvVTJWUjRZclJRQTFWSFZEVWpKNEdoKzF5RGdSSFpiQ2FiZ3NhcVg5OHRqTUtaSDZJZjRDQlBkTzRZTnRNK2ExdzNQK0MxcjBYWEFvUFVEY3dwZHhCeG9JRXkrWTc5ZE1UMTc0NHBjK2hGQ0tCQ3J6anQ0U0JCb3pZNW41S0c2YXEzQzAwdzdjcmwvM3B4QlNnbWJuVmRxMXRhTGgwWHV5VW9kdU53T0lFWXpEeXBpN3FwZEY3US9CSHRiM0l6cWhUalEza3Z1SG00N2ZNUk9JSko3RW5WVGRHWW9QQWNvQnh1dlJVWFFvRmpsWHRwc0VMaWhYUEdhVTBwUi9UTWp2eFVsL1ZRcE9hbXN5WGZIdzJnQjI0b1pqc0pnZ0UvV1libUVEYjFZeGRPKzN1Vk5xdy96TlI1OVc5MVlua0pCWU5MYndFVTI0cTJlYUYxd2M1VjJQRGhFMk5od1dqM1d5ay9qMXM3YStxQ2U3TEhxNUZGSTBCS3JTdXFzUFdLbnMybE94VDFPcnNkS0ZENG5Va2ZGSUI1SlVqeFh3RkZNOER6UCtmS0h2a3VJMUpibzhpZTZET1N6UE1NQ3Y3Q3FqYlZadUNxV3FBMDJGc3VNRFVMOFdnaklnRWRLTENpME9FZXQ0TmpYb1UvK0c5U0MrNXNiYjZJMXF0L2lkSkhETTRtU0V3TE5KbXh2UHNPS2lFYXllT1J5Q0ZxcGFrcTVhcVQ5VXg0a0hvbWd3dlZZSXczODVGT2tubVI3ZFZmamdOV1F5dVQrVTF5eGpQeFdFUytFMXQ4NHhqanZiUklVKzlEdDdPMVllLzlXZFd5RnNnYit3U25xaUJWZkJ2SUhRb3NtNytFQ2gwQ0FhVXB4cEZMdHNKWVJtTzBRMU1oSmVSNUlkbWpXK0g4SllTQVMwYStPRG1aVW43S09vOFBIb09CRmhRS2NJMWMrV1k4dnV1eE9UL0JUeFFDQllycSs5cldGS3lsSDBjZjcrb0VvdW91Y0xEeEo2R2RmcGJPZnFRbWRxcjhlWG1SS0NtWFdmRGllOFRNK0dJa3c2NEVYVGxxdEVucjFGSDBYU2x0MjFDNHR3RGF6cDhBTkJrN084R1o5Z3N3STBRcmVLYWlwTDVnRzlGcEp3b3FqSE5DVHJ4Mm51L2JJVkgzTTRZZTAwVGdZRVFTbW4vbTd1bDRMWkZSOFBRS090TGMzZDJha0JpN3RrMkxPZTRBeTlVOHhVVG9PcFV5NDkwQUNyS05DSFQ4SDNSOEk2NnRJRHByNWtpelladCt2TllTRzdJWStTSDZEY0V5bXRuejBmWXJYTGNzdkE4WTNNK1RIMFdVTlViL2VIWERHaHpQZnhCM00ybi9LY0pLM3VUNjdERGpPNDl5TWJmUERPalFFVy84OTlqdEkyVE96K1ljWFdxemIyeTRtQWp1UEhFYnFxME9CTlRpMlJSelF0SzFnWm9oMUJ6Z3NqbWdXNEpEZGtvVTFnVW4yOU03VmVVLzNFQXBSUlFBYlBIcFFUYmRmQ2UwaWdNZnJKWHU1M3dTNDAxbVd0VitYUlFiYVVuS2ZzUEtycFo2cmZmcG15b0YyeURQaDY3eVhGYklrS3ZVUWlia0J1QnBhclRRZnZ4UFVtdnNLd3JPR0F1SFloU0RmM0pJOXFOWStDbHl1VmhWTHk2Q1BVSnlkUDhEOG5wdEU2b0psWUNTamlVWXlaVE9PMVN1SVc5R2hRMDFCSDRpN2pUaFhzWnd1VUY1YmQ2VmRrYkdEakcyTS9IYzVBTE5qeHdKVHc2YUlEdGthS3JRRTBJL2xvZUVWZ3FuRVZHSVYzMUlEK0tocDRxckkvZGlRa1lUWlJTWnltR0ErdmZSMGJwZU9BMDNJQmVYQlhORDl6U29oNkFISEc2c1VpK1NWR291WkZicDlrekJoa0M1MlNCVGpnVzRselNEeGV5NStkVkR0NWNIRUhhcGpEVFZIcWQ0aFZ0YjI2c0o3UngzK2U4MDU0Mzc4Y2hhNE9zVkdPZU5WZnlVU2JFSGJLbGhmTkgxcnEwM0JWOVYxc2p2UUVBOHR2SWQ5dm80Y1ppNUkvSmhtbld6ZWszWjVCc3VpL0ZLZDJRaTZYRWFjeU9SSHRvWHZqeklPbHc2ZTB0YVNlYzkrSG53TDRuU0F0SkF3TEN1MmQwczJMSEovMDNKS2VuckxCbzJsOEhaSW1Db05KYi9rYmM3THhpbkpLV0hWQThUNW8wNlIrQlhXMjQyQjlRU0Y0VnVvbkZUZnc4WjQvVmZEWnFocGpMcmtTdjRNbzNwRlpHQ3RMeWdRclJTaFVXeUw3M3h3ZWFnSFcyN3IySzE0dG85Y1gxSnh1elhJUXkwUG1DSWFST2ZxN1U3TmZZTzZTeEtHRndxcXBoVWl2QWV0VGVYR2ZlOXVFdzhnVlFVaWgvYk1MdVFJYVQ2SkFKdFdacGZtOTUvMk9wRFNGQkpXSzlFZG9sRytZSUxYSUxENGJURnlZRTRrMFQ5U3J1QXl6d0NwZ1FzK0ZWb1BWS2R4TjJ3SUcyVGZWUHBtQW40NFBIdENaSlQ2Q05VZHpwckc4akZOOEJWZFI3TzVGdENjYnIxMHZ0OTZtZkcwZWY5WHRRQ0c1Mks5MW1VQlFCQmJOaTZWT0xHQ1h1dnNUQVAxTm1pVW1zemJvNTJsU2R6U01KK2Y3YnpxR2tqSUtlaWp6Vm5Ed3QzYU1FSVJpUEpWdFBUSEhCRUtoWTRJa0VNUVcvZTV6SVRhRzJPVnBmZ1RNQk1kVEJmLzJRQUJBQm9BUUFBQlF3QkFBQThCQVVNQ0FBQUFBQUZsQWZoQUFBSUFDUUlCQVFvQ0FBTUFHVlJvYVhNZ2FYTWdiMllnUm1sdVoyVnlJQ2d4S1E9PTwvQkRCPgogICAgPC9CSVI-CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24-CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I-MTwvTWlub3I-CiAgICAgICAgPC9DQkVGRlZlcnNpb24-CiAgICAgICAgPEJJUkluZm8-CiAgICAgICAgICAgIDxJbnRlZ3JpdHk-ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8-CiAgICAgICAgPEJEQkluZm8-CiAgICAgICAgICAgIDxGb3JtYXQ-CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24-CiAgICAgICAgICAgICAgICA8VHlwZT45PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MVo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU-SXJpczwvVHlwZT4KICAgICAgICAgICAgPFN1YnR5cGU-UmlnaHQ8L1N1YnR5cGU-CiAgICAgICAgICAgIDxMZXZlbD5SYXc8L0xldmVsPgogICAgICAgICAgICA8UHVycG9zZT5FbnJvbGw8L1B1cnBvc2U-CiAgICAgICAgICAgIDxRdWFsaXR5PgogICAgICAgICAgICAgICAgPEFsZ29yaXRobT4KICAgICAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPkhNQUM8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5TSEEtMjU2PC9UeXBlPgogICAgICAgICAgICAgICAgPC9BbGdvcml0aG0-CiAgICAgICAgICAgICAgICA8U2NvcmU-MTAwPC9TY29yZT4KICAgICAgICAgICAgPC9RdWFsaXR5PgogICAgICAgIDwvQkRCSW5mbz4KCQk8QkRCPlNVbFNBREF5TUFBQUFNcnNBQUVBQVFBQXl0d0g1Z3dXRGlZWEFIMEJjMTh3QmdGaEFBQUFBQUFCQVFNS1FBR25BVDBJQUFELy8vLy9BQUFBQUFBQUFBQUFBQUFBQUFES293QUFBQXhxVUNBZ0RRcUhDZ0FBQUJSbWRIbHdhbkF5SUFBQUFBQnFjRElnQUFBQUxXcHdNbWdBQUFBV2FXaGtjZ0FBQVQwQUFBR25BQUVIQndBQUFBQUFEMk52YkhJQkFBQUFBQUFSQUFBQUFHcHdNbVAvVC85UkFDa0FBQUFBQWFjQUFBRTlBQUFBQUFBQUFBQUFBQUduQUFBQlBRQUFBQUFBQUFBQUFBRUhBUUgvWkFBakFBRkRjbVZoZEc5eU9pQktZWE5RWlhJZ1ZtVnljMmx2YmlBeExqa3dNQzR4LzFJQURBQUFBQUVBQlFRRUFBSC9YQUFUUUVCSVNGQklTRkJJU0ZCSVNGQklTRkQva0FBS0FBQUFBTW5YQUFIL2s5OTlIR0dBZWRISWFDdWZJMVdCMEFrdmZqZzVKaUJOY2FIdk4xb29PVHM5Qnh2NXZ0b01tbkNWRnVFdEtiRjhJNjlqeEs4RDFmTElLajZkSGlXb3pOUU1uK2RuMlpYZ2wvamF4SjBLRGdIdUJoRmg4Q3cyK0tCRzBnYkNxd3F5WUROREsyY08wRXVnNDZWWXZ3ak1qSythdElZV0R5ak5RWFlLYTMzQmxxUkM4NEg1a2ZBd1VYeVY5azNLdWJET0VsZkgyTnNmWTd3K3h1QTdPN0pFVWhvMzV2TmpKcm9rUzV6TTRHT2R4Yk1IanNXcVVrSWZKa3IzQmphRERTMGtmbWs2aVk5RjczUENKUkhBVkE2R0swUVR3M3ZlVStYandyL0ZkMXYraXVFMVdjcGVLVVlOZC9CUGd5ay9ScWlsNS9aQVRwQXBMbHVGWTZwNmNEV3hGZlQyaCtqbWhScy9KclBUTFoxa2trMTdEZXpwSUc1OVltdGY2aE4xU1VVV3V2cUdQWEVNUnFJQ3dWV3p2ZjVhR3RRM1o1b2hvZWxBV0w4cWIxWkhidUxIQXJIZ2xXcnFoV3BPbXZtWUYvSFJ1T2JuTEtramptVXlNVEZ5WFpZUitseHZhVXYzeTNvZHE3WThUTjZrcTBYVnIzU2JIb0lFSkFXWTlaSk9yRThyOTNwODNSUmsyZUFzbTlCeE1DMms1aWFkZTF3OGppaHZYTThjZ1hWM0RTNXE4cHE3Vm91dFlJTFlUeVY2bVBFMnlYaWhZYWUrTngzSmxmV1M3RUMyYXVNUnY5dThMd1lZWUM3QzJaaERsallMV3pMaXpjdjYrRTlMdUNLZnYvZkMwZ1F5YTErVEpJQU9XUHlIMzhmWnJMSDJhNFErelcrdGt5aGVkTVRKZkhic0VkZWlic0c5Y2RSTDZsaHlKcnY2MkpFa0dGMDFjL2Z6VWN3eEVzNFNFK1hKN09wNWdRelBYYXVQWnVoMUV1K24vT1lBMEZXMTY0T1JiSUVoNm5kY3Z3bXVBSy82czhKazBFUCtsdXNjMVBRQnpueUJwTWtLaFJhcDkzdXlCWm1VTjVXakZYK3F5SkJGelAzS2tWNC83dUhGdVR4Y2l5K29iS01MdGdtTzRSNXNyTHk4U0NVVlZ2Wmd6YkVnem5xOExSQjFVWXhYb0ppVUlQWmJoZExsMnlobHptQWE0eWlaUXQwVE5lajh3MjMrOTYya3JXOURtY3FLZnlRRnZsU0NxeUU1eFMwQnNpcy9ZNVkvZGF1NDIySzMvR3k1VVR1UHNlRExnOGFRNzloYlRXTmhJWHl4UHhtdlkyYUtjQ2NkSWNZQ2U0bWVBU3YzVnV5LzlHUE5acFlHcWlDQUJZUHl4Yk9UTFJnOEJtbmY5TmZyK1Z6aGJJbHp3ZXluZ3hHUHUzR091d1FOdVNWd2kybGRMM2lSKzE5NWNiSHV4OG9LRFpncVBpdGtlZ3hGL09YdmZsQStwRC9xUnBpNjN6QjBHaGlYVlFDZnkyZVQxNnhKOG90eUdxdUxtS0IzRksyeUJtdFJoc0wvZ0RDRmN0VlJYYlZVWEt4Um91SHpSK2Rjb3hWTCtRK21PTTAwRHBKYzloM3hyK2FEdkg3V0dxOC9GOWgvd0x4cFU5TDk3SzdnbW5RVUFOaFo2bjRUbm8xVkhwVTNOZUtiMGhWN3VXS3J1cFozRGVNa3E0cnh0OXNvN2RZdmEvZytBZ1hCdHpFMkdIZG94VW5VQWZwTXhoRjliR2dHQkJCM2IwVmhDU0U5eUJOM3NIdHhEU1dsdkV0dm03NWdHSjZ2VVUrb1lhNXFCTkYxd2loaEc4RnVVOERXeitqUm1oV2NtcWhGYU5pWFNCSmRGV2lYdFZnNGVRWHFHVi9zK3B6Misxcm1XMTVzMnM5Vk1yMzMxdUxSUlFRa0lUWXJvRzJyd3FMVkxVMzRwRklHV2JqQkh0TzhRVDV6WThabWZNakFRdUlyU3N6cGZsTzNqRjR0S3ZFT3g4b2ZpcE5EaDBkMCtsYzNPOGVGNFpubnZxR2JIMXJKK0dTYS9EZUpENVhYVTdTelpLZmJuc0JWZzY5RlpzYlRWZEhqckJONHJMRW5aS2JoMnoybW02OUZXWEpuWUVOY2lLQXJwakRNZTVuVWJOaklVSlF1QjJaY28xUXhSQXlBM1B5SGxHNmFqWGRVamV6blFLdGpDNTBoZkJnT3BEK3hYQkhnTnYzNUQzRThxSzFCcEpQdkVDTEtyQ1dMdkdJUkJ5VEkzYXF3d2hoVG5ZK3gzZ2owZGU5WkxGV0JFc1RaWHR3WmY2bHcyejNZaXluVHVKcXNaNlZjbjh6THZZWFBUT1o4dWRLajgyL3d1SEpubzg5cEhJenVvS1M0ZWFGcG1IYzFNN0ZFSnRXTlp1eXUzTG1rMk44L0wwNUFsT3VjTVhpNkgxcDdyaVNQR3NWN2VYaTRCMnZtRnBaRDZ5Zm9UTXdJNFR5Q1R1K1lHblRxOFRUOGNHU2liSk0vNVBUcnhQa0ZIS1Y1VTZldmlKYStTaVhCclRQdzNuSjJYUDVqRENERmdOSWI0eEdYU0pWZDdMYkIwcFhiSWRJeS8xTG44UXFDMi9LZE5wOENzSTJNRElBMExJdm5OZjFldjB5TTUvb0pPd0I3NFl5eFB0d0Z3eU54akYwbXpxYkxkZXJSUnRZTnd5Wnd6Nk94ZFBXTnFTOTlqWlBhN0tlWHVxTksrMmF2c1p6OStPTVJKZFQybDdNL254NWhCT013cnYwWnJqcXhQT2hGaUVjN2FzUDhrWktFSFJqWTgzUnBmR1hScjVmTklYL0gyK2xmSDJlbG5INGVtY0NGVE5xQm0yMktiSG9ZQWgzcEZOWVBRZkwvRVNiNVdqY1VEWmlGNWVIVlNOZnp2TEdQZzNIQ3JMWkxmOGVqRzI0ODhuUXJoakM1VklKTkxMR3ducndZQmtiM2RBaTBOOE1LV01MTXVRZVBrQTVCaFc1NFJXTGZPWlB4RlNLLzJaMlhTSG1odTBWTGc4RkpYRlZ0OXBuL01MZkk3aVRXTUdpaWN4c0RjdjhPMVRsalE1YUtuVTVpTVNNWVlwWVdoZnhxazA2VGhDWHVnMVE4WDhCTnBZeFdEUUUweUdqQkw1a2lYTUFINzBJeVpQWUloVlZ2MzhlYXBneXJpb013QXNxWG9mVzd0V2tyNFMvMGh6b2ptN0E3NmNIdzBLZGxPcENoL3pWOGxSZ1RpdEhlclVhdFVUVGlWMlVudnp5b2Q1MHVwbmI3R29uU0ZLOEFoKzFib2RoZ1hMSWdFLzBrd3pTaThkZFc3NXZZeUtiQ3p4TGVUU250OHB2UXFaeDRUZ2NvTm1TM05pRys2K2JmRkdMcnJDRTY1ZDhzV24ra1E4Wmp4RndjZktjN1BqeXBLNTBIM004YWV6ZjdYdVhzend0ZEFZNm5TQ1gzQkh5M0thME1VWHdUckh0cjlzTU5WOU9mTXhSVEU0WCtFWlRSTGhWbi93L1Qwc0t4aEE1RU91V0xxeE9manhMQnJTRlo5WmZENnZEVGEzT051Y3ByMTBGRnM2QXRPdW9SRWpPOHpFS1NjbWJCeE1IM213NXlGR2xhYmRBQStyaFF1RENYNmQ1d0p5dFozS1NrOEM4M21zZXJoL3hJU1FVMFdZRExWbC9jdXpXNTk2SE1QMUFSWHJSbWlNMlRhTGlmenh1anpRWFliNEVMeTF2THdaK3lzZ05oY1FRVjNzS0JtUGtjTXpwcDBEbGprNE9zemthVVV0Yk5vSzNlNFNNeW9iZ3BpaDlWdW5laGpLQldCWmNyVHVSdGRKbCtVT1ZkSHdma2J1a0xaLzRNMVViZWpUcjVReFIxTVRNaHlZZGdmT2xMZDJWL0FrOEhaK3o4YXZqNElFUWV1V1M4UkdmQkpjOFUwTFpETlBrSG5sc0dtNkJCY2k5eWNjejBacExHcCtiQm94eUdOMVB0OUdlUmYvWHk5a2VLQ0E5Vm5pcWFVK0xCZzJwMzlHSjdFSGpoVllENDdKMVJpU0hFblE2MXhvS0cwZlFQRzVrb3VVUllaZ1loZkxTdTV3czlPTUJEamFrL2ZPajZkUTBYdXR5WTRuQ2tXL3hYdFZjcnNSY20xenkyUFVSMUMxZVhJN1NnZ2tSQUZIV25SSVdPYjdxQ2dQbWpiZFBLc3QvWG5nTHcyc0RlK3ZzSVJjcGF0bGRlWGVFVGhwMmVocDRIODdIM1dDa1BoNGdZUnROWXM5N2lSWXBQMGtlaXF0dzVmOG1iS0M3V2x2SHJsaTlXZGlhaUNLRXA5RlJ5ajNCM0tzNmFSdzZLMUZIc3ZSVGx6ODIzN2F3YkhTSzc4cGFqY3FyUnY2dzN2ajdkamdLTkJ3aFNNb1pxcDBJL1BZdFNrQWhLVFFvS1g3SHVqK1hqWGh6TURUUjVNN3BMODNGYXRVbzQ0YW1vSC9qdGJaZlVCMWRlcDRMOFNZWGVuTUpEbit6L1hqQmhTTTd3MVI2czlIV2ppZzlhY2NaRVllUUZvMk41cVBadm9EcmdocTZjdWxra1ZjemRVdnZWdzZhWTU3WVpMRWlZcDNNaVdiWHNkUFFJaWFPQmYxTWcyaGQzOUpqcGt2VUsxRlVhSVkwUFZMaCtoVi9lYlBNa0hDYUVQUGkzcTN0ZURyYUczTldQaTJML0ZHbDZQOWpOek9oeU04SFg2MDEydGxkM0ZrakNYREVGNmllTFFnOXducDMybW9rVExVV1cwOGRuNXZuUGgyTDhvSExyclc1WVVDM1ZGZEdWWjFVODUxMG01cWRVK3ZYRUsvM25aZXhEd2c4b0VEL056Ny91Q2RHSUxqOHkrdjNXL3dBTWRNeVlEWU1OcklkZG8yR1dJK1Rpc010TDlqbHpTWGZQZkdOUi9YWURza1lHT284UjZJbmx1UE9kOWxrSnhPRFBzT2FkcDdDM1RnRnN0bDU3VCtYRGpvSm84eVdLQzBIUVByZG9PRm4wd1ZmY0czS05NK0g3UXlJWGw4WC9jMS82YndJVnRoZ3BpeXdTaWpLYVIyM1RVZSs1TEw1R21UWU5SVXBReWVkcCtrVmhGQkxNVUFxY0wzV1lTQ0dtYWVpOTl4cHlITWdhaGoydHR3dDdLTnA5OG5wL0ZQdUI5ZTBDaktRclNIdG9LNWxkV3ZnVUQyTEw0c0djQmNtQTVSUzJFcXpHUTc5L2RWL3UyOHZPM001L2M5Qk0wc1ExQ21tU1ZZamtpYmJiQUpoWUVNQnpzVlc4bTNnd0J3dnJwa3N1a3JPK09Vbzk4QUxDMXhwTWVJVllTTFphWDZWd01lV0o5ODJqNXhaV1ZiUS8xQVV1T2dRdkRVRWhJamZldllBRjBvZ2s2Q3FXTkx1V2Q5cGp4Ui94V25nQUcwaFFaSmpFVEJaNHBMV042RE1heTYvYlo3Y3YvcXlReU5CM1JSbkw5Q0hGY3BUd1F2ZmF0Ky9LaFRwanU2aFUvckM5M0RicjRGelBMQnZhVzVzQnZTMVduaGF5VVQ3VE9sSlhYektHZDZjdlhMWHRzSU9nTm9GRm92Y0V5TW0waDBwc1hiTGlzOFhObzdVRjJWeDZ0V25rY29aMVJacFk4YldwWVJHNnhDNWpndjhhdWVrSzBrWmRaWjEvMzROUGNvc1FSRkN5R1ZSakJkU3JScWZobFNqM05rYVJKYlVUTXRLTGpwS1BGMzRhaWtuN01VbVFHWFM3Q2JrNEZDcEliWVpyTmFKN3F1ZGdFTzY0SHA3S0RoMWNiS1czb2dUSmNWeUZTU2lnc2RvMVp0bGFBUWw4eUtHMVM4THJYaVI3aEZYbjBLSGdhYTN1UHZodGF1Y0ZEYU1Mc2xhTjNGcVNQb0JFSFcwQlB4WTh1dUcyQUw3VUVHbllMOXlqdG5TK0V5RC9jck40b3NSYnNJMkZWdXQ1bFFoN25WSEN6cHFyZmhON0UxMFJybWYrUkhDK216d1BlTWtOVUl3bjlSUThLRkxMTko2K3ZaNEtwSzlsdnQ5L01WNlVFZjk2SE9RRFBjNHI0eGpPVFVwRWtPWkRMSGhlUC85M25sZ2hmOFB3Ry9EUTBoWnBOZnJRaEhaUUZqYjVBNDdHZnVLVTlIOElqUndkRStwckRCMkc0b0FZZTRyL2NlU0NTamxGMHk2R0REVk04bjRJZWxSZENKRFNuK0IyNmxlRE13REVkSjVSMXM0UTJFcVdKaWV1VnpSODJTUUZObkhNMkUvTUtDSXNoL0VwNklZR3FMTm1STEJOOE1JRHpGYk9GTFZXMVZTbnV3TUZyTkZZaHRrdkZCdnQ5VzVjUmJqUHRmSTJjdXhLSnprbExwRnpwTFlITnZjSlA2WlpGMzgxb2lhYmxNOSttVjlzaXZiOWZXZDlmL3doMGVuTlI2Z015LzhiVkQrdHIzbDlPL0FXQmZDS0JDaHFLOGVoWnhzNG9LOFRPYVh6a1lHVTlNMGYzZW1zZUNSL09TZm11dHZsSU4rMkF2UGpNaFRncTdiSUU3THpMQTNMeGdkYVZVcEE2SVY0MkNQMUtlai9RMDJKRS85SnhKUkxodDRPaGJmU2lDaGk4bERSeFJrK1hCMENMeXpaclJzS0NNbnR6bG5Xa2FjOEt5cE51S2gyQUhTaUMvelRRWXV0UmdaUVN2VmpjcGp1OW9RNk5XTzBoUWIvVmZaZTRpd2NYUWRFbEJHSmtWTmNVK2tFWTJwejZrNE96Zm5jNy9UbDhHZHZZdEVJOXMvdk5XVXZ5UDlDem9rL3p3b1hvUDkrTWlScGNpS25HYUQxNFNKNlYzMCs0cy8wUEdRREw1Z0xUdHk5KzhRcnRuR0hjSGxzeU9FeVhndDJKVi90RDI3MnBXSVdPeEwyV2RFcWJVNzNpUTdnWG92VERHcTVRSklIT2Q0MmJKYVNrS05kUmZJV1NuYk5VZkYycDYvVmJUUEdENm9UNUhoa2ZHUTQ5bjJ4MmVwaVVqSmpPNENRZ0grdGtuQUQyK0o2WHRPSExtN0d2WTlqdGtQMmpPOUNYZGdNLzJYSC9mSWVMUzVwQTZiUlJpRXNWMWh1ak50WE0yTjFiZHVUaWpoNUpBVVdaZE5wMnZrcU41RVhLenE3VG5pM2MvWDZ1TWpqbXErVDJvdFNzQnR4Yk91Zkk5MDhwMEhzTXNDV1p2UVpxSnA4RnE1bHBRSDk2ZXdqbWZPbTFKaFBoeVU4VzIzNEQ4NElhZkxqNTFjRVZjOXc4MXl5QitDTUxvVHdBS1BGV3FHSWFKVkFVelpqSTh1UXRFOS9YQlZSK1cvYUVsc0xDV2w0VzRmTW9tdzdkZDFXVDJvWG1Ca1VsMkdkRk9vWXBNc280T3Q0VEhxcDBSS0VXR2RQSUFKaERad2tYUS82d3JDM1hPQUQwdjczeDN3YnZVSGxpM1J0L0Y2WFlNaG0wL0FSdkJmQkF6ekkzdnNLVVMxZmdRYi9OZENjblRrUi9tdEc4MDBYblpUSkl4eU1pTkVUU2lOQWJPMGxoaW4zVU5SZEdXMjFMVmRidWpPU01HL2E1OWFlQW1keExaV3BNRkJoM3h1a0l0Qnh6ckJzOWVnY0Rkblk4bzBvM05OVTBab0NMSStGci9PREZaT0FDb0QvZ2NPak91L1VPamZFaEhqeGdodnlwbnJOL2R2U2FnM0pBa1YvcGQ3ZHRYeWlUK0JjV3lvZC8xdk53SzQxbFF4aXlESWFLbVphYVR4WGdEUk85RTVUZjk2aEpZaG1zWi9WMjRVR0ltYldWMzd3WWhlM0t2UzVFRVpsT0xST3VmWmZGYzlXSVJ0WGNSdU5yOUNkMXpBeHlLRlRQK0VHSm8xdnlwV2RWL1FOcmc2S05QUFcweFEyWURRRnFqREFJY2VXcXE1cEM3STdEMC9mTitNVHE0cXN4WUduczNhWmI5NlR6WUUzL0FSM1hVaDhDNkdUbW0zSHY4cERKUXdRa1BUb3NSNTYrVzd5RmpDaDBOcVhudFl0NFk4QXhoMGFoRTZ3OUZhZ3J2NnVnT1lFQzBNa0U5aERwQ2VpMnBSaTM5MjZVOFFzSjVXR1FuT0V6NzVQOFlaamh4enVUbHAzcWNVcVRDNDJ1TGx6MTBZUEZJSHl5bys2RGhxUndReFMrZWptK1dST1JtN3dxWm1RWXZkZHY3a0xrVVVZYXZ4Rm5kNHk4Vm00ODRmZnZYRU4vZk0rMENtQmdhS2Y4VEhxVjNBUkQ5UUtkaVJHMG5GTzZiZVVNRXM3RFRpZndjZUJ3R1FCZXpuOCtRSHRhcWp2VU9qSXRndG0wTGRVbC80NndHSk1kUDNNL2FMbEhhd0Z2TGhxcDRoNkNibWZoMmRVUDRmTDFsbTdVSzFNaGY3aXJramtRblBXYW84R3l2WndNVGtZclRTTjBxcWxxR0VHMy92UGJEbHRCcXBlVTVZU2NTUzc1M2I3dnNON2svM2tBa3dlczBjS0NVS2NJZkFpYzFqZ0FaZm5OR01IVERjdmI0MGNseEc0eFEzL0phbkJ3MExHQmVDcFpFNTd1OCtadkQ0MGhhRFBBTU9PbFU1Z0pHb2xZUVVnRkJzM1R3ZGNFa2FXb29tRlZQa1hjYU9xUjAybm9OTk9yd2ZnUldRVk96alA1Tk5IclR4RVNzWnpQczZ2MXJNMjFUaCt0SFN3YlRpVUthWm5UaHdxOGhaaWZYUHFLMVlDUU5YMWk4RzJGKzFTVHkrU0o1cHJNbGJHYTZ0enN6U0J3Y1hJL3pKTEVLK2VTVStVbmp1bmtheFpHLzArY05TSWNJVWlXTlhCK2RmYUxPRC9oN242UjByYW4xWTlsRDFGc0labS95WXZqODhkR1RlR09HS1FVRFFuWC9ydWNVUWJuRzJIYmN5aGc0YzduQllSNFdIcUxDa0tWV25aZ3hmUGF2SGY4R1hISXlJaHRweHRDSURhWDNSbjZBbFN2NG1uSjdZL0NvUXFxVWVOMElveWJyQytVYm5jR1NHQm1iNFovYTM5ekJ1ZXAzUzV6amZNWWJaMGNEQ2VWek41QVd2OERZaU5XWXZ2dnpQSzdEVVR2VFJjWGVxVHZmRzh1SUNjUWYwZ0hzcEtER1VYOE5EekVuZElKWm1EYkhHRG82NWNqdlJwRWp4bTdBRnhjaFUzbWFJSGViNkhrVDNGSkMvU013a212TDJxbmhBSmsvelplbFBaTHNRYmZQQStDMDN4blQzWW1SUVFSalhzY2IrV2FzYnZqT0orZXR4UVF4TWFFdlhWQjk4NmRGU3AzTmkwc2x4RjBPUDIvUW0vdDlkQ1BrNkFUNTl5WS9iOUJuZlQ5WmVQazZIWDFYN2grMzZHVDl2cndSOG5RK2ZQdk1EMFRwRm9pdW13QXBVNzViMFpCb2ROenVITk1KNkhEWmt1YmpLd2htRWV0cGYvWGNzTm5adk00UENpaloxaTFOL0pnV3IzVmRuSVhNUk1CVVF5QVN1WGdyVHZINlZacWRMMzdyeUR0LzE3cXVFelY1Wlg4VFM2YzVSanl4cW90UWhLcm96dTVGbEN2QzZYZFhQV3VoR2dWRHlOVW5nMkNtb0tVM0FLN2lOWkhwaXVTaHdSQVRkMU1LQXFBV082TTloM0ppWFNNNXJ2b2tjbG03bmlwTE0wKytxdlVsa1VScGJYNEFnNUpQOU1tZUk2WWU3ak80MFdLaXorN0tDYS9MK2JjblhOMFZWd2hyMUZOL3hscFFiYmJWb3BEUDlvYTVaZmxTeVlnOWVheWZWRDVnQXlib0RLeGovTUVKTC9SaFZidWMwOFg3S0dsWUVod3ZadllhQlZ6T1VpQ3o4cndsQU56b0lGK1lpMG9YQ1RsSnlmNXpqV1BLZjd6ZEo4bm5aTjcxQU5DVEYxOVFyQ3FkdGI3RlFLMGNEaTRYZVozb1FKMU4rY3kzUHdGbllkNEFGRjFpb3lLd1l3MEk0SUZtYVJhQXQxeW1BNlFaemg3NTRjVUlQRnRDOFA2ZXhPa1pNUnowZjdMeVZYdW9OQmxrdHZlMUMwM29iQUl6R2VNM3FBMFZCS1ZMOGRoWjVmQjZNdEFGSDZPenUrK0J0WWFSSzdhQk8rNGdpTVJjVi81VXBURFZzeXFnSkZrdWNCYXZrUXF4QnBXRnR0VDFubytBQlI4NnVpVi9XMFk5R3J0NVVMbUFpMjJZU3VZNXo0bnNicUFZUVB2SElMV3lMeUY2RHkyZ0N5MXVMSENKaGlpSENjcC9WMTV1TjBpZXJ3eno3Z3hsQThOWlFkRnF3anVYdWo5cGlzdjlaalF0Zys3dHJZa3pVeWtkeCtkWHNydE9TWHF1RGNMN0VoMGVxa3ljRmNXT1YvU1FzcnFZZVN6SEY2bFEzMHFCMXZUbUc1Wmw1M0NVVkVUc2l6d2NYSGxoOW8rZUlzMFRJQWhsbzcvaC9TZCs1NHF5d2ZpZnlkSU1SdjB5Y09VSlFLeWJqMGc1WURRb3Z3a0FRRFdBeG9nSk5uTW5BZ2ZzT051THA3cVR4TTNMc0diT205RWhuRnh3WmVpWnBHaWdJbHFOUkxNNHRtQXdFaEp5V3RFaWhMNEFyWEFFOXBWTms1VmhkdUljZExLbktGOXFYdnRML1pibk9mbVJ6dGNFM0I2WlB4bWV4dVNZdmtMS0pmU3BJTzJKaUY0ayt2UWxFV2hsRzZ3dHJTbWZwNEhsR1lveXdWV01oakpLb2p4R3N4c2pObmo2WGpUWDVkY0g5SE9LTTdReDdxMkJ3amVFakU2QXlBYWUwSzRSQUdkZll4cC9JbVMycVA1YUZsbTFvZE9LSHRoU2ZtU1Jqb3dmOC8zY21KRlpZSDMvTVBRTE1ybk9obGJVOTNRaHJ6ekRYNmRkcWxSbWZJNlpQdE9RSkQyR0llM3hPNFhjcDJ3ZmdDNDh0emZrNmg1YkNtUk01c0FTREZ1UVNiSHBmVXNGV1VwY2NRUWVDYi9OWDB6T1h1ZURIZjRaVUFUS0IweWxEcXg4aURMOHJZNCtnWUk3M2VrTnlRUHJnRHBVNEZLYmpMM1o0WVQyV1dHclltbC9SN3BCTEZqcytWNU4vdG9ENk5JclZnMVpzcDNJdm00dklaRzZYOWtwNUc5SWI1d2daclJRbVZRTDcvYlV5WFFCVWNkMmhNU2ZZcXRGY2xtTzcwZmY4SWx4bGw4a3R6c1NEcTR5R0g0ZXZJdjQ3L0pBb0hpWlI1VU9nMjlxK1NzcjdGdkFZMU9ockxnSkc5VzhrRWFRekVheEtWdnNHaXd5TFpzLzhNU2JvUkxTQWNSa28rTVgxTXptamE5ZnowSU5icnRpVHo4RTh0aVRFK0VSa3R0dlRDYk9scjl4Wkw1MHRoYllrOGhza05Md05Majk4VEFMUElSRmQ1WFRmanViZDNvL2xoOHpxSlVGeEVHVzdsTVZwdHEySFFxcGorcGhLOENMSmk2bERmZVpPNmdiRXJmdXRsNW5nWURGZ0E1eTk0TFFoZ2hQVmFTVXpscVdHenFneVFQcVYyakc0bGlFNy9SZWx1R0FON0dUOWxsNXlzd1RDVDBkNzN4NDVId3JWbDRwQUhLb25hazZjNDZ2Qkd4WlppaW5wcndaYm53bStSeXl5TDJSZmhUN2VOR3FrYk03OGRvSDBSMzg4dVVEeUluRTZ6TkluWlUvZGNENTI5RTdxREEzRzhwcEJtek5MSGFhajdlVFRVeTFtdmlhYWxSSFpYbjcwdmFVcDhWU1lmZXQ0UitHR3JaSUNtaTVZYTlHbmkyajFjYkN2cGxzT3hlZDdoRTFZM2l2YWl0ZlZFcm4xL1o1a2VGUytEYTk4VkRPNzdsR2ZQZWhpWWZhemlsb2lDNmlNdmMvQ2VkTUszS04wYklUalBqdmlIUitqSnYxL1ZvNU1iVUhPM1JIZmRnWXhvUUpQMjdQZitQdGYwZDhlVldYdHhYbmY3N01Ubmw3Nm93cnUxOEFPYitaQWN2eGZ6NWFCQWQ0VHhqMjVoVVgxbFFXT2g4cklSdlRCaXpPeTFDVU1mUkk0eExpeG5NL2VQZUpPRUlVQUFyZ3ZmbnlSaFA1a2NNMWJ6NU5aZnkrdzdTRDZVV21LcG9xZ1dBUWdvV3pSZzF1VGlOWWRaeUVhdFhQZTBORTQ4c2xweDJLZW9iSGZmakNKOTBuTWZ1NVliVkZic3BVemlsY2RhNlZZcE5QQTJYcC9IL0t2SUQ2UkplaVNEQi9iU05xT0dVeWZvWDFHVU9DNnFWMTNya3JmSWx2RUIyTzJwbDczbW9vSkZHYjRjbnN2ckRwZ0xNMzJKYlNsSkxVQlFWa2dhbURDdXZneGgrZFFSM080d0c3MkdiWUxlM2VKWS8xSzlUWGU0L05UM2h1Q1ZhUG1ZOVJhV213NzZpUFhRbkJEOHlXSDhLSTh1SzMwd2Nxa2tEaVhaQnZZYzJIZWtHSEFaSUxQbWZ2eml1UjVjZzZWNmw0ZGl5MkJBMXZVdFp5R1B5eTB6QWVqMjdoWFVNeG5jS3hRYXZyK0ZBSVVzSDNOalY1WUZGc3BZTFhXSDdhL2YxclhyYkEvRWUyc3dnVnBsaGFkeVFoQ09PMEJKN3E4T0hoc01NWXJhVjNpRFdmNWthSWZteFZ3UUpQOXVCKzJFQXg2TUlEbFZUdGhiZk5KRlJBWmgwVVdwOUk1M0U2Q3dwcXoyay8zK2tHUHh5YVhKV2hjbU5IamNMU2t2SVFGbmlhVkUvWlZOcFdGS1JBSXQrZlBGMWU3YVJyQzdlaGUwT2lkQ2ZjWEt3U3NPTGhsOUl1VnNTQlBJVFRQQzdkZDNIaFpLai95ZEhmby9USjJoSlp4VGt2blJSMTJEbmtVUURMRE94ZUtsajVNMVVWQWpPbGF3SUVqMGRmUlhEZXR1dlBvSlVBY0JCRXhPMTh3VUdJaUg2Y091V1FCZDVNSkFDbzN3cG9qZzdsL0JrTGNWUGtJVGoyZjJHZU05c1I5QkdtQUI4SnJIT0xIVXRRZkVmRnBHaVNkQ3VKb0lETTVlSE94cFhVYUI3MFF6bDU3VHJab2JYTnZ1OGsrOEdXOFE0U1hTNklGa0t4UnpSZkZzS05mbUdWZVRYSWdEZ25DL1lSYVNIQW5wZ0hURWdjb3MxL1Jxck5BUG4veXhDYU9mOXFYakluOGNlZHU0Umd5Tmx1Nkd2enNoMllaZUkwWmk2bDZIVXNJN0JwYW4yZ0t2SmFNYnRIS0pwamtzYk0za2xyUzJ2ZHFhdUgvaHB6dGhQTnFpaU91SXdmUUVqTDZheW5EMDRLOWdDWnlqK2RrMk4wN3FOVGFneml1UkhkWHVFS3dyOHRoRUhOUlNmTTZZM2Y4R09PeXNoMzZhUjQvdVdoTzFSTUt4RCtKcDVIdFREVnZzRHNDZGRCSlZZWE5RekpGVGVzdG80S0xQRGRQUVRZUW1UaFcrN3Z6b29UNStPWlJVRmhtM2U1TjJRN01taHh4WUkzNTdiUUFmRzErUFFhbGVXbitSbmE5MUxSWEkrMExiRlUxTzEwODRhdEJJS0t5STZja0ZUVlRLZisvVGx5TXhxL290ZVMrZGtGVHkvMGhHZVJHc0xYYUpSTGpNb29XOC80MXZmT0xFQ1ErUGNhenlpWnhWTzRFQVprUklaUUthU2syUnJLaG5NS0ZNK1UySks4R0tOWVhtczVidVFidmdCbnRTcytYZlhNMWZMeENhVG5YQnYyYVBvaTlwQ21KTGswZzlDUE9YQ3JmYXB3NFQxUEtzZTZBelZrSXI0aEI5THdkU1pWbFdMdEQ4ZHJuM1ZsSHNJeTB3dk9WOHhVamZrOTlxK1JqVWtNa1RiaVZTNVRuVTZNVlhPUEVCeVZCM29WbW9GdHBUMDJWbVdOQlNGbit3aGxnMHFkSnU5QTF3cWZ3VHovRG5acmZEN0xNdEo0M0RzQlJHOXppN0ZoTVJtVjNJdEluSm9NYzcxc1c1ZGx3S3BTZlJ0VlBhWThsdjJPV0xNdS9yTmVGN3lybVM4KzZZZnUvWXZjcHplVUJnb2xaL0hSTi9UdnVXdWJuQys4cGdITEpiR0pBcURwOHVWOWNlMXVwRHR4UVVoUmdCRW4vcmMvNXI1ZEZEaUdBMzdwSEd2T0ZXbk9NazRPMG4yaXlIVnZGRTBjdzJGQXdZUEpGQ2ZnQXRzb1hpdUcyZ3lkNDcxRS84YWVMazJlN1NxcVVRNGc0ZUxHQ2ZmN285RWRwWk52cUJrQmV6N2R0bWo4aC9MNzYvdS9ZQktYNUhaZ05GOWM1cGxYNUJBUkhSUk9GVTQwaTA5RXZpMVhUaXNsWEpwb1h1TnNpK0pxWWVFZTZhNjUxNFNxZFBoTjRFQ0tLY21yRTl0UytTVnlFampNYTVWbmRPYWp2d0o2RSt1b0FqZ2FCejVocWFHbFJ2SnlsODhWMjhIdy9lYVJPWk1GejB3UWt0RFZra2NZdXd6cHpWdDlESGZVeDZmZXBzUkJvNTYrajhET3g1a1lrbHhvY05hWFlSRjVucUVpcUMwYXA5U0RKSXdlNElneWo3TGJFandhMy9lQldZSDNVN1VkcXFMMnM5dFN3eFRoSXVJTzhjTElQZEFuM3BBNEt6TFdDZTcxbEhDVjRGSXVFR2I3aExXcmpQWGdONCtKRmJ2Rk1wUTFmc2ZuWlVnYjcxSEhnaVVvUW8yOXR5WTcxeFFsZ1Brc2dNeFZsV1RjbjREUzZOQVQzK3RlV2laVEVZRllIU1l1em1lVFZLaHBSbFJnUUpKS3NyaGhlSEZUTXRaemZCbVE0dVNYVmhMbG5VUlJWSW1XeHdzWVlpZW1YSE1DbkV5UE8xcEtCbmRZV2c1UU9qMjBuc1o4SHRuVEx4Y1N0SkZPQnM4M0prb2dmUm13SWlZZElmTkFQNWp3RVZ1ZUorVkpiaTlXam1CQWgrLzJNNkZNT0J5aW83N2VYTFdzNFZReWRjZXYyR1dYWlduWVJsWEhLaHZlMjM0QlJDQ1JZL0MzYmdWWFNiL2VaSUxiQk1NTTFBeHduQjl4bzYxZERjRExNRCs4NnZrbXI0T1pnVXIvOThlQUFOdkU3Vy9oTHBrblRoSWprRDNDb3BVdWV6V0tHcWduaXpSQ21SbEZsZXE5NTlza0ROWG04Y2t0Sk1DTlBtemJCWGczVUplNm11QXFHRTZjWXpjWFREVlYydnAxRzZsQ0lnK012WllrdmFlR0pIV3RYWFI3V2dFMUFzbWZFRCtNUXJTQzZzZTVPc2hGRmlBU0l3cXhGdE43VHNkSmFWU2ptcXZXUUdSSWZjd1A1cFJqQnhBSWZ4aGZTbnorSGdhbWF1WDVrM3VrSHZSdTVORU5Fcjh0czVWSjhuRElCTWFxdDBlWXFMemU5MThOZkc2SkYyZzRDZzdNZnhleDdSL2h1bEEwWjN0V1UrbUM1ZzZNMzdsWEhxTmNKVys2TzloalBLck1FTU1NeWRyM1I0RnZueGNGUlJyNXpGZmNrK2hKaFY1SXVScFJOVEdORHMrL0FmK2REaXBVR25aejY0MGZmQ2xGYVBwZVFaMmh1UmJoRDMxZTJhQkZ1NDRBRzYwZnAwMXV2Wk5FakhtZHg5dmViWjhBb040ZDdVKzVGQzVVWDhXWm9zVmo1b3ZuaythcUpmei9RTjFoc2NVUjFuLzJHOHhZa0VaeUN0dnBIbkFlb3NYVmhDUXUyWFpHVDBKa2Z5Q0pyMXh5OCtVTGFVRVRCQVFIU0M2d21QRHEyV1RLaHhrYUVCUEdxWTN0WEI2cFVtWlI4RkFOSy9RYnNsSG5vTjFjM1NCSXI4aTZyVm83dldxZUZRNzM3NjQ4WkpadTNOSndORWFoSTdtRjBJL0JBcFBranh2czFMQ2NFd3RkWEFFbjdjdk54bExROW5rS3lpRjE1WU1vbDVCbTg3eFJaY2ZlaSsydGJrVEtJZ2xNdUlMb0RwUVpxNWVqekFBd0ttQXhSV0dsSG83WWhwT3FORDBHOFR5OEVqczRkTEdscmxBUUQ0NWZjUnJoUWs5N0ZqU2tHQ0dqVy9yZnpJWTd0QURnNjRXSlBzSm9GRFQvSVc3eUlHTzN5Y1VNSzVTL3hoa0pJbk9UYXQxUnM5NVVCaHRxQU1rdlV5S3Z0RE9oUmY4NUI3TkJla3lYN2lEWDFMdk9KV0xiSGtlcXFvNG5zQ0M2WjhITE9TdUppOHpCaXVwTXZLWkMwZWpXeEwvV2kzeUplQkMyVFZkMmRJQTlUOW90Z2d3TWNVNjROTHJxUnp1WFRGdXR3UlB3azhmM0xJUmo2T3I1djYralgzTlRhSC9mckxGU0NIUGlBMGhFc3g4dGYxNTJYejFwUW5ER1hWUnRvZ3dER09aYy8waUEzOWJBNnA4aXFNeEloaTcwaUhuTG5zdURPMStETno4WC9pb3ZxRTc2c2xQMS9VWHd4My9rVDlOOWtibEhhcm5QcmhJazZSbEdtdTYxd01kSlNBenQ3WWRGaDU4YkZZZkg4eGF5V0xZUlFpQk5SUFlJMFQyOEUrN3dlLzZPR28xRExhQ2J4cHRWNlhIcWJaK3ZmaDRxL0hES1FLa2t0U3B1bGxrbmdDclpJWkg3akFnOENUUUpYMGtIanhXR0RnRDRCM1lrZjhxWGREbWdaWmYvUldhUS9INDlFcEk1OURxMkJyZ01lUjdpSDNKdExVb1FGRmdldnhDRkgxeUcwTCs0SWVPRENpUk1GamhlQnZtZHZwSXNZNnZ5ZWdUWVhNVEpxTWU0QWIxNEcvYTAzQUIvTUlJWWl0UWM5ajVWTGxLUlc0SkMxWWpQc29idVNqVUQ2ZVBZY3NVK2pZZXdkQTVkZmxjd2VpdmtHOFUyM2hhN1paaGNOSmE3K2dHODFSTjRYeDNlQ3NQcmpHdEJXOHMwNWZSSStYbFplWVREellGUXJkT1cwd1hISzNTNXpQTjRjVUhjZmx2N0h5ZGlaTW8rTTlUK05IMC9ZVHJQUUhiRVV4cFBlM2JQU2h1TGZGMWdURlMwcGk0QXg0QThHWVFFeDRiSUdkTzNCcDBFWmRYNFpUajVxOGx5YUk4eXo5NWsrbW55LzhNYUlpV29PbFdiRHBMT3lmZEhnTG9HUWI1dTFmS1VZME5CNC9YK2N5TnNBeTY5OENiMjJDL0ZvYUZyOTg4bll3b2xTcXkvT3VHSzZrcThnbnVRWEZ2RDBSRWZYWWZSQ0QrN1N0UTJDR1QxQzBHdjFMVml4eUd1aElKZmNvTTNKNUM4SVkyL1ZkNGRJMGtqTlgxS25Lbi9BR0liVVlPTHVlak95TzdkanhWU0YwRTdKQjkzVURXSXdrTUZ6amM5N0JteUpwczlaRmJ6MmFROC9oMG8wYUJ2NTF6TEh1WmVCZUdYQXdIcEh6OW9reDNXRm1VN1JoelJadVNJUWxYR1hjajVJcER2MVRDazluc29USkl6QnlSNnhidXJURW9DZEpudG1idkEzL1FxVGhicWhaL3hXL3JZNnhFWkNFNnZRL0pGeVN3SmlFZUU0VTdyUFFrNFo4U2ZtdzdGOE5mL2c2SlZ2WlRmTW4vY21SZTBwNnRVL3c0Mk5ZMURhaDdjN2RWQTZpSHRkWk9BbXF4T2tBYUJabVNSVi91bU5HTVlld3V0NXBta212QkNzMjhHRzMrL2FwQ3NUaDVXUVdOelozUzM4SG05bnhFd0M2anFKUkVsUy8vQTNEUHF1enhHSmRMcmFidHF2b1F2cFJYMlIwNlZKSHplMlZSVzJnNzJhRDYwcU9GcXVTZ1F1cG1sL3FiUU1kSkUvSEx3RXlpZjlZSHpYako4c0grT3VkeDFYajlsMGNLV2ZFNE43SFlPSFQ5V0dXbHI1aEp0alVXUHN4L3dRcnFyc2w3LzRKQUpMaWdsb3llUFhleUlXTVNCUnZGVkpnU0NnOHNZd2krbzNoR0hZTFpKMDZ5OXJkRFB2MVNjYWZhVHlQUGFnTnJybmJ4aURSazR2TjlTRmorNjNBMkx1TmJ2R1VyTUNRQk40QzVUSGlLTGVYaDNhUzhhbHFTTlFKRzJQSTB2U25FcDIvcEFvTU1CVkpaRTRBYldpZ3BjcnpQVEpUVHhpREVlTGE3QVozWXQydEI4aHMvMlAyTDJDZkdEaWJKUnV6WEZUbFpEUmxQT3FqTTB6OWtXeWZxT1VTeFhlYUNZUW9zMlV0TEFTc05hWDRKMW1hcFBKR1RlNlZzcFRBbVVpTytOTFRBcTdzWmJmYjNMWTZBZGtkek55UWo2QzdKR0JXV1k0TmhyOXJTVFlHZURkWU1vQWpqQVdmVXM2Z0ZmTHVnUnJtYnhua2RESVM4V0svSzZWandWVGZjaERpdHRLdlBkdXVWN2VUZS9JZllORlYwQXV5NW5vSytjeFQyV2VRaEpVV0ZOWS9mUXZyZjluUWRSQjVuZUsvb3ZNbTR4TmI5cXNpN3FvMDN0a0J3cmQ5WGN3VkZmYmo1S08rUC8xU29vL3JwdjdLYkJLcTFOZmQ4aHNqYkZrY1hPZ3FRTkwvSElFdno5NzNQWTZZaGxHd1hoa3M4TWdNRXZNWGpySWVxN1FYaFkrbXlGNTE5K0dZVlpTZVUxL09yckpYaXdlbnRnenVKcEF3Y04zQnZPbGl4TUxObEJaNEYwUmU0OWt1SGUwSmFEVVFpdm9KWEJXVTc2RHVmNU9nREZDakNwdTd2dm9XdHZ6YUpORWhyckcrajFGYnRKSlJ0WGJnOVNEbHVadXNEM3pPWFNEU3J3MnEzdTNMc3JCRGwrSkdSb0RzU05oZEFmeVpuZXZYYTFuYzg4SVNMeHRGOE54SzVyT1gwTnJGTnNHVVBVVldodzNQQjRmdk5hN0x4OHh1eWVuVCtFbGFyMEZ3VFJaNEJHc1M2NFV5SzZ3aE9rTTdja2lxS3o1eG9VNUMvdjkwZzdnRWIvbkhrVEdWU2JZSjNMYjVWdUY5cklGY21NRHN0dVF5TGh0TFNaaGxIY3NlUTZlaENpM3pXMHIwVjUvMnZkVG81NHBDMmNDYVVINk5GZUFWc0dTZW52RkxaOE5TemRUdkE2TTNwalVWTWU4dlVVbTBqMFpoV3ZHak82RjhkSktNRVk0QlVXM3pqV2Y4ekloNWdRUXJiUVJNdDg1YmN6cXZ4QUh3L3B0dFRUYVlYRG9VQzRkL0dMZWdkY0ZaSXE5VzhqK1lsSmN6UlZQOEFZVTNBd0pHOEFYV0Z2MUE2bHNyeDFhc1pYZk5BV01EUmdES25Fd0tWMzIrdjFKVGVmbS95b096YlJKWkVWbDlrZ000T2M1UGM1bE54VmdkQ3VXUjFRaG12QjBaV0xmMEZFODUvT1NxVG5rY2laeW1EcFlYVHYzNElEMExmSXdPaHBUL1lISjZmWjdQMExaVTlqbGdKdlVJNXRaYzFmbU9TMVZ1amhNeU84R2F3SnYrQU5pME1oK1g0ZUVDU1hnNzRSZDFHWTM4dEV1SlZNSzhhbWUrc0NPVDgwTisveDB4cncwdmwxdk1oZElPNGRac2FRc1ZtVWxjQ3I5VVVIZTcySllDVW9rWWZmdXdZUndSVkJxVnpCbWJhOTROTU53TER3OVRiM1loczN3QXRGLzQ5U3FjMXdzQ3ptNDIxd0dLT0pTSEZ0MnRSV3dXeDk4dDc3V3FWY0NHTG43c3VoQzNZeWtxSURITEh0NEoxZ1pOYm1BeTRKYk01QS9TbWoreEZ5MGNmZVlZVWNxT3pFbXRIUDUrdW90cmVNdTJwd1pRWU11QmEvcDF2bjAwYnhlanVhYTYxeE1KNW1tQy9aQ1Fyc3p5QjcxcDVUMWNTUzRHUTdmMXVqcmUveUhDdXB5MnYxNDZuRFptSldCSTEycHhZNmw0cDhMUVZ6Q1pmS2lHWkhsQ2pxN2FaRUczZ2xxcEVFZWh5Wmh5azhuVDlXTzdSc0c5bkVPWGVucTY5TldQZzUwZ2pCMVFhQjdQT2JSUmxvZDVCcGQ5anRqSTUzSDlzOHFqaEF5L3lvMGZXWkVtVWlJbVBWZTRZcDE3d0szWG52U2lmVC9nU1NNcWNkR3RPeUdNYkthSTA0WGpJMVAzVlU1cFdib2pBVjV5M25Va1FvcTZFRVh6bXA3c3BXWVlkNXFzcDBjSVJwaTRENzdFdFViNzAzczJkaDg2MzZwaU5sYjUzRmdCSWJGZFZ5a1hOQTRNN09sQWdkZWRuQlZGZzZxaC9rem5PU1I1MWFlbE5vbTZVdXRSQ0w4VU16MTFXTFNVV2hqdGx4bEdSb0s5ZHMrVEFUVE0wc2FUak5VOXJDeXdxQksvWmNIRzhiZEpwUEdhQXYzYy9XbjdkdTUrN2p6VlQ3c3lxMHE2dW9TMUxGWjRPNjFKRDFJZjFraC9uekdwcW4rVVhWYlZFTlZMUVllMGRvMXZBYVBabmVZa2wxUW5MMmk3WHl6RkxWQUhZcnYvSkRBUFFLYnRqbWdsdG9Kd3c5QW1vSHdjeGc0U2dHemJaNlEvZm5Ud3Z1UGszcHdoTHNkb2EvSENGbUMwQlNoK25mOHd5OXppUGJvRWRiajdCZTVQblNIQU5NaHRiNHdFSm1RUUw1QTdwTThtZ1J4NjROM0RzSlFlcURVZlNrOExiZFY4dEMvZmlHTFdWclZDN1EvQUp2WkhoSnZiNHZRa3FyM3lUVjlIeFU1K3pJZGt6eW9CbHNkZ1FLNUh2ZXl0YmFsOSt6VUs3aVMxS1AzeDBiSHJTaDh5TXFYdjRtSWxFQ04rSGNlK1FoZFo0QlQ1MlEvamUwZHc0NlRCa3dkU2Z6S3o0QVNya1lFN1ovYXR5RWEyaTlXeVJkSmI5dllab1R0d3BsRnFCNWxnZGpLOEZhZE5ySzA3cWNad3ZkUjhjMnAzWDJEWjEvRXRtSEE3ai94dFd2RmRzQXM2L01vWTZleDlGbFd4U2FnRWM1WTVGYm1aQ1IybmhGa2NlQ2w1N0txWXF6L3BDaHdpYTd1amM5WFBlY0FmemM3cC9nYVpLeGZlV0xPYmdXdHJJT1QrZnc4MEpXaTVDVFd1Zk84SkFKWU0yb2t0RDN1d0Y3RHB5Q0JOU01Ed2JCN2dWUUpOamxyUFZ0MENyaS9USFdZSUdoczFTUEhjaEhkOEhyRWYzSDczYWFVRElSeURqcjVvNC9Vc3pWbWppUWZhTk4vK1pkbVExbHJVelh5M2VocmdHTzJiWmFXZUw0UTgyaHh2anRFRFZiL2c0djdHdC8wUlZ6aW5kU1FTRUNNUjFYSkppbGRXVXlKMjFZaVJ3LzdBV0ZwOTJ4THU4Z2ZuNG5ZQVFFc3A3TGJVeG0rdUczNjMrY1d3OXVydW00QzFWWHlDTVdVRTloS1hPODcrQnpZRWdJbXlydVhoYjBXK2htYmIvdjlabFlnUXI5MXc2U2ZNdVJoN3c4Z3QvVFVTRElZKzhFVE43RDg0ekNsbkdIaEhucXZSc3lKaFdPbG9lR0ZxR0IreUg3NnRpclJtUTdmbFZLYXp3R2xzbWNZVFJrMkV0SWx4QTRNQng1MnJGQzNJUHFrWWhOZTJ0a0J1VmZYTllURU1JcS9UZWRVay9QUlNpcWZ1T1dBM3ZyV1dEeWtTaGlsVnNXM2thclZYYUgxV1Y4K2U2c2FRd2Y4SUpycVowMWMrQTd2VVNJRGY5NjFRUUlRcEtYMUdJOE91dmtNeUkrUzJFN2RGV3FJWVVJUkw2aDVjTUtEL2JLSEhpYUxGUFV0S3U5RGo1ZmZXT3A4NGNBaVgrRzBneW91Ym1JSHpaTE9PWStkWE1GVklHdm92VEJTaWtFTXhDSlhZQ2ZqVGVIRnlCckFsRjUvVkE2dUlwS3V0SGlZSjBqRE9YQjB3TkJ5c3NFNmJZZXZUN0JKZHFyRndCV0EvTjVXS1BlVk5pdXZ0cTdzTG1OQ2c4aUF6amtXZUk2R0hOZ3BnSzY4Ym43eWRFa3dqU2U0SkpCdDBiRGc2STk0cUR1Q25PYmVsMndQbVlCQnlEY2c2Z1dhWEhwUnlVRHNjbitpV1FRb2lmZTlOa3B2bUhrbjBUZ21QUStVZFV0T3J6UEx5MDJkTThUMEZodU9aQlQwb0xGTkxTMUQ1YlJZYlExWEdZOVdDRHI1bkU0a1hDV3FFWWd0a2xDa0NmQnc5dWxLNWk3ZzhXU2VUcUlYRy9XazlHNlpiRWtGdVZxYjFaeW9zOXlvM0l1ZlRxRG9YMk0rNWlpaEhyTWFpYVpCdWJKUFlIdWFONjBYd0wxcUV0aElrOW45S295UDVNMWtzZWJOdnd3ZHZ3enlUYW92Z0hJNzZpSks2OEpjaFBrMDB4a3hjOENWUE1Feks4Wm5sT05CUmlJQ3dMMG9wcUJsVEJ3aFoyOVFYTWdNNTh5NnVRYkp6OHNENERMVUhwWFNBbWU1NGJwQ1hCSmlUZldsb2srNE9FejJTWndDQnIvN0JGU3p6U3pXNThuQTBNRUwwbVZxQk0wRTVWUUxJRDFoUGZOUHRQSEpKM0RBN3RSZVhYWFlqdk9uR2ZMQ29RWWk2elo3TmNSTUx3c2IrZGc4c2ltdUNjZHY2eUFzUkZkL2h2ZW1mK2N4N0xISEhOTFJyMXpLZXNXaUFPQmxFQjhIbXVsWFk0RDJWOXBGVVgrY0pwbE12aHBFbkZIMUdubUZ2WGRaR2NXQzE2dGk2NzVPQVV4VzA3RnByUEJmMzJscE16WjRra0JzeEUxU1dTQ0IxVUFJT0xINDVTOWZNUkV2MzFjRUdlK0NkTi9sNEdMMUdRTDZsNFdvVTdoaTc3WEcvZUN0R1hWT0daNUJwNE9zdmpMTnN2ZFBHQjRJOCtrYWw3WmsvSUtSTm9hVk5wc2hBbzhzVDVQdmlQSnNiL0pmRGVyVHZMN0p4bWtQa2ZyNWxHdS95OUwwK0xjVUZsQW4xYUFWRmpSdC9BT01JcDBTSFN4bFJ0T0g4Mjlsb0Mwb3B1dysrS0VtSzEzYVM1NEttTWp1Vy9SQ01uSTB0dUsvVWd4R0JFcnlnS09VNlUyWlhERXg3eStwa3daOEgwMXZGemhXbjcxRU5VK0h6V3g2TnJSaVVWZDVoYi9Db2x0R0dFK0Z3S3VQbjFSOXJXYXVYcmxsSzVyaTFpekV1NUdLdWZIcmNoM011aUdBYXRGeGEvMVlTanNzZzVoTmlxaml4bEtHb0FGczRIVFhvTEw1MDZlUnEvVE5POXJyZDBBazlQQTFNVjlJQ0F0R1gvMW9pNll1TUlRa2o5ZTA3MUhCWlhFZWJISGRlZk5weHJOVjBYQ2pXSnh4ZWZmNjlvMEM4ckk4TFk2WndiRlFhV1p2b1B4alRQRWVzZmU0OTFNMlZGRjA1NUw1WVovcnB1emQyZ1RudURjOE9kRHNsTG1nUmFla2FwWWxuT0VkVE9XcVI4dlZ3WHJOZVRYNS9oQVlEMFJuNUx1M1llL1hWQkVoYVpoMGtrQ0QzWEhxalBVSXJ0UytPanZJcEsyYStRNE9sWG0vN0crWENzZTVycGY5UHJCbnhTQnprd3J6SmJEeTNpLzFJRTdSTEkyTmVBbEd6S1FqbXFlQmthM0I5TEFJUzJMdFYwU1pxRlp3MjJoQVBLWEp0TUI4N05lOEhTc2dHbUF2dnc1U216UEk3MDRkMVdQY1c4WWRLZkQ3aVc0cEVWbUh2WGJ5allxMW9uRFhTbXNPUGR6WTh3S1BaNjl1emtidVIweDdlYldTRnJxNEU2WWR6ZTF2c3lMSi8ycVBRZ1NIblY4UVRRd0tWSksydUxQNm9SKzNLT2VBRlcwNWVMalI4WldLSnpWRzhzcmV4S1VPZSt6bVVDdVc0Y092Unh0eFgycDhkNXc4MENmV3NwY2NtWDNyRldSTWR3VFNBMmlYcXFsM083UXV4R0plVUNwMzdEaHUzZjIxL2FxQVZIeHdHNnJ3MnlUUmtvWGc3Z0NGMGtJYnRaL2V2dkJGd0ZFaGd2YjJJejVKWXdsTWRJTnI0VUNGS2NNcnBxc3I3am9leEUrU1I4TjlrK3l3WjRvSCtEdnNmMko0ZTE4cmNzTWdxOE5IcnkxdVdySmREWGgxUktLSEpRWTdSRzZMWXl6N0JYeG1NbzI5dDVtNWdyOVNQcm1IbGZDM245Y1lqaWQ2QmFScTNXQmdHSWlzOEpOTEZPbk1HaUFmN0p3ckxSc1I3eG5pc1FlVStGYTJWSzJIWERKMGxrOEpNQ2FLUE9FNVRUcWtCbkRpTjlWOGhnanp3RmlqTjQvUU83ZFVaNlYvSkR2QWRmc1NNY3paMyttZEl6NDRFMlRLQzBsVGNTWUpZTTR1THBFNFNVcXhDV254SFQ3Y3h0WWo2amJCVlprK1NUMXFiYUY2WXlPRmJzdWY3c2hiOGs0NkVWZUpid3JyUUg0azZ5K1RJTEZqbHZIMVRGME5pU00vL1RFVWMyR3B1cDY1aExhSVNpeTBnRFhMb256SExaNk1uelBlcDd1UklBeDFTTHBvb0xDaEk0b1F4cTBjdFBTcndNRzVRYjBZQldYSzRXc3VjVmhqRzY1bWtmKzA5bGI1ODM2M3RENzhxNjg3OEtrUytycUhSaWMyRGRET0ZOMUdFYk9vOFdTVDhhWU5kWmFkaHJjNWtTOXFQd1BpWXphckplWmRycWx6bEV5TE91dVpUeCtEcTkrZFkvRUROL2dtZjdqU1VqM29NZnkxQkpRTFRxL3JHMDVKL20xT3JURHcyVDdoTGlsZUx0QVJPL3hhTk4xZ2VvM2owb0djRUhZNmo4bnZwMlh3ZjhkeitxUkdJUWNJNlp1YTRBMGpnK3Juc2JDSVg2MEJML2FOeVh0S0tvTUl6b3dVNFlyczRlWFNlV3VhSjE0eXFLM1FLL3h6dDVha1lVZmZrM3ZNRjNYZ1NteEcvZ3RFUk05YVJ4S05TNjZSblNJM2ZuYWFNUFZoR0J1Y0s2dTRrTG9tOXl2TnhNUVJJdy9IVGF3Vmt3NDRxTGhROTQyaDUveFRWQUw0dXVKdkV4ZjhXRTZQeWd2d3E4WFVVUnptaEp2UGY0MCsvY2JOOG1nY2M4aFJ0L3lJU3ltckhleWwxV01sM0IzcXZSbHQwb0dvL2tvdFRzaVQrRGhvR21FVnZVQW81anhobEhmYWFidlNzRWlWQkNScVVFN015QTZMN3dFNHhnT0haNFp1N28zQndzdWIwNFBXVFM0MmNScGR4d1VuWWd5K3o0Q053ZGVGNmpUcmpGMXpuQi8zRVIrdU93d01yQkcrVVF6Q29oUmw3bDZmcVQyTzVmRlBXTXhVdzV4SzZIT0hxMEdFc245c0FFa1JzVkpVWXRZYTI4VWEzcjhYdHBOcFd6bTY5ZGY1aEdvUWZ5QXZCanlUVjlBTzN0dUNKYlUzcWNiMC8rU2t2bTdpb0U2TkhVTmNYd0hmVFRiU0JWZHArM0RpdWNzVE56cGxScks2WHBmSEM4Qml1NHRaK3dHSHdOZXdScUxORkJUZHR0bC9LVkpoSUVJeEJhcFgxTnFOMU4yNHVvbG1HYmVIN09LOEpwMi82OWVDWDJtNGhVemZTK3RtZnJhUTF3ZEJKSm83VUtPU1piQ0FIcG9Qdnk1Y09oa1VKUFM1K21MVzBxNlJSTXRqRkRQbE84cktFRGpwUUtRbktkQ3dKRVViS21qcVUvaTZPM0I5eDZGUTJjQXYwRitwRnQ3aHRYV0gxcFVhNStXc0lsRzYrY0w0K0lJbzhJNFUwN1I2S25WajhyeVBUejNJMlJ0anB0Tk5LNjRuUHVMUEdjZnpGU1pzUHEyRHdnR0M1SUNJU1d6aVczSllHYVVLSHJ1eldFbFp2MSs3Rm1WOXN0N0tHZzlNRmR6YXRFS2NnSUJsdHBwenhGcVFaY3VjSjBhbHNvNjVlbWo2eXVUQXJZQ2VDQjBBcGt5d0diOG5VdkNFNUFjSEdVZWZvSFMzcHBNZnVHYXhIejlUNGVhZWlMVXFWRjdKZ0FGSU5SamRJU21ZWWdDSUUzeGM1WCtyN1I3aStsNjhLZ1pudk1YY3hsZ0ROWWdPUUEwUHEyejBOT1U1ZGlWUVJXdGtRbUV2OWVQbi9COFZ6SUw3cGdQSmtuQlkxVTJsNWNtVHlGNDRyY21UU1dLVGNUNGxUc2tnd25aeTRVMFFQSmZHdjl1REhzdVVqcHVwM0lRd0JWeEQxY3pucWJ0NWhEbXk0MXJ3WXRtanJjTE1wcEhYKy9WZlpJUGxyY3k4bEFZaW14RzNON0J0cCtBcnQ1WkhKWTUrcmZJZmRuajlJT3NBRGlJbUdud1QvR0FKQ2xYQk4wd0M2ZnVjYnlQN3BQUnNRcFpZYXZ5SnY5OGFPRDU1RElqSXZSbVlVdU9MSHlDZU8yMVJLOFB4cVB5YlhJZ3NqMld3R1M4NUpPZXpTWlVCUVRhVC9RTXcweWhTMjVvbTJkcEtRb0J0TCt6MmJQdXVzTHAyaFU1Z3g2ZUhUN0g5c1JjWEErT2Y5OUc0M2x6WGZ0c05weVlYcTNzYVFxWkw2dUtqdko4SVp0M1VKV1B5R3ZXWEc3SWJGbUFVSmlkOFc5R0RBNlJMajZRWUd2anp3ZHdKTEo3bUZsOFhjUXdPSDFpNHFJSEx2RSsxWEpUNEEvd04rUGVEb1RtMzJsVmE0d09aNHVrL2E4Rzl1bDVsSkd6UnlQQkJxWmg2Zmc4NjY4dXJ6VzRGekNoSFFhaUtnWlFoZGNvRFdWUnZSRWpHVE9wamdlQ2UzVlcxMVYzSEdEeDdhc3NnS05qalpFME51NlJKa2RLNzViZ1FKRXZONTVkZWhsem9hQzBSRnhjR0xQc0pOR0VuRnBRUW85cVROS2RCYjZFWkxxZjY4NXdhbFMzak9iLzVNS1RDYnhkV1FDd0JhM0ZUQ0NhbXpNK2Y3RUNYRXlTWFIrZkQrS3BaNS9sMDc3Tk5EVXd3Y094Nnl3UmRCQWwzZ1RINUNUeXQ0YXhsRStvOGVNb3pyeVNZcTZ1dVQ5MFNJd1NwcGJyc2l6Q255V2ZCSSs5OXBhUzR4SG5ESXVFR1lHUHFPNmIxRWlULzErekhMUFoyVktHQWxUWFdQOWVFMDE5anNpbmV0ZHV1bnE3RW0velhjMVV2NWk0czVrZVRiZDREaUVUTW5DRkpyTUs3QUQ2RnJHZjhMVmtpZk5JQU9oVzVVTTMwdU41cE1XcStqMDZGTHlWZlZCckZPNmZXY0RkemFJSFgyZVU2Z0JYNFY3WW1za1Irc1hxK3k1ZmdvNjZtL2ZaUFpIQWxOUXZrNFlzNXBueHBLbFFxOFVsbXA5SE15dndHZVdETTQwK2hxMEF2Mm5YMTJFRkFEOHRsSTBPQTB2N1lpUkZ6R3I0ZUtoaklRVUx5dEF6NnVVbzFzYTVXeUFJeFJyNWs0Qlh2NXZRcHkyRUtQUVdzKzZCeXNVd0F6VVJhdk9PNk55Q2x1RmVYSG0zeUpKc0dvQzRUWWRUL2JKOWh4aVlybmMvRTB3RXN5bFlWS1grQ015ZDlWNjMxTlNERlh5SnlpTzVrRkRoSCtWOTd5QUd4c2Q1ZTYzRnU1aWIwc3lla1I3VkhGTVZjc1U2MkxPd2ZEakh5YVVneDRyOE85dVg5cVcxZ3hic1R5WVNNdzduWW5neEpaV1ZKVjJoL2lrZUpCTjB5Zk9TTENoNzlKeHp6a3c1OVArOEFrSy80U2NMeVVPZEMvc25Jb2tKeU90cHYxckFkblBVUFN6eGtEL3VlSlFMR3prYUl2NUpCemo3aGxUZWdPRkR1N21yVGhmNVlUNlFQcDFyRTNubmd4Mnk2eDFvd1BKaEhyMjRJZXZobDZEMXhzbDY5NU5XOFNNYnRTdkVZZUFKNnBpQjdOcUtqa2dYS05KMW9mZjN5UnVDTktkSVVYSEZ0Nm92Y0RZcklNSHBKWHJNenBzSVRaOGorTDBkZFlxWGs4L2xZMUFXT1h3WUNDeURHbFpGVlBpRlFmaGlITFg3dWlRa2pYTUhkeCt6L0xpT0dMbDJ6YmZUY0VZNHJiTTVuNFd6bjdTNU5YcCtJeW9BV282Y3FtTFlENUs5bW9KWEdPNXFLRnIwd1E1anRuSUhtMldtYzZXM0JxNUp6d1UxbE5weEpvekF1SEVWcXR0dk1oMTNVZE1qRzBzaWFwYWJlZjlJeUpWV3F6OE1BTTRtZkQ0ZnFBY1Y4Y3BLOVZWM0xlL21lMDA2YVJ0SFg3d0g2YUxhWVFBSTBKWkR2M25VS09icEZSNGczK2l6MXN4YzNtWWdPOGJuMURJenFLUzFkZmVqVmNlWkdqQlpmWmdmeDBNS0ZTOFo0Z2hVYXYwc0hyS21KN1JOOE5MK09CR1h3d2VDQ2V4U2xKcUo0VzZBcnY1eHhqY3JpQ2FrR2tZUWdkeXpVK3VobXlmOWZTUGR1Zjd3UktEOUxHT1J1VGZZazZBUTErRitzMk14aUkxV29DOCtsRDB5Rm5hbXVzVlprM1lqb0lEN2plYmRIYTZmOG1GcXhva0hibS96TWYxSWhFTmFqZzc1MEN2eDRCQnlNR05JQzFURHV5VVVLdisxbFBEY3dCZWhmdU1YUDBmNVlnY0xhbjZKdXFJeTBabFpTWTlGMzJ2MnRJaWo1YnVjSjNKN2dKOTVFTFZDKzhrbmt4UnVuQkVIZTBaeENEY25yellMOFhsdzI3L3o2VkpWNWp2TUZIVHk0S3NvWTFnQ3BXM0IvL2FWY3BJelhsNTYzNVV2VGhVRHhEWFZteWQ1SG9NcHZDM3pZL3RWWVRoYk9IZWI1a0lhM2RkaDcwWUkxRWUvVW11Sy9JclBTc2RSVnFJK3pnZmpRemJCU1ZtZmpxTDVrOUpyL2ovMDBCRXB2VE9QOXN0Q0xtRFgvT3FZbkx4ZHd2QWtYYnYwSUFYdVF4d0NvSjZqQnN3eVAwS2ZycFVTT1BVSnNzYkFiSW50R2xwUEd2TXdTRWpWeGFmSUZVa21wSnp6QTFwbGN5aXBMTGF0TWdHNzYxaUJtaGJ0Y3czWXFidWRnY1RzcnR2NndPcjV2MEZ2TDdNTFBvbXNGaVhlbytrYTF2cDltcUJROW5MWEN1MXNScUVhdzJCZUxUL2hwVjNTUm0xVnZCUTQwV1JPU3dXY2xlS1dpSy9jOFBabngxbkw3T05ObE1TWlo1cGl1MXRJa2NFbGh5Q0xKRy94WTgzNzFFQ3dqRzBmQTAwT2dkMzJrRmpUTnZVQ3BKcjR2TUZyVW5mM3pIRG5SWE1wMm5nTU52Tk9MUTN3TVpDSEJ6clcvYWdnc0xTc0s0VlZlOWpoTWJoRDFpQVFBYnI1ZTBDTUU1Q1dJcS9Gb25HWlpLem9uaVZRYUZGRDVKeVhFblRDMXpNczBBZCtJdmJRSFNyYURseWUxMzFpTitnU0lKemxFZU84UEgzR3F6VzVBcTJTYVkybEZ4RlhnUnpwcUt6S09OYTVYOGZPSTRxSmVCWnB5QXlvZVJLWXphTktRUjc1aHBTYXJnRXozb0U0WWJNcWV2YUxnV0hMVmtNRlhVSXE4S3R5bkcrZVpsYkRBcnpPekkvdzlENjVIZDN3TmpmUUJhbEY2NmtRRDEvZndJWDBmVFd5cWhFSnhPR0hmb1BXSWdTdDVzZDJMRW1aWnIrcDVndlptM1NOdTR3VmpCUHl0OWp3MnFpcW9wRE85SXk1SHFRMUU1ZHJvOG9jSG9XTjV6c0FVcDA5MldVZXRHZ3h6OHhHTFhOanZWSUtwSEs0eCt0TTZyczVrMm96U05oTXJhL3hBdjlhZ1FaWjRtN1RjMzBMbXFrcFZZNW1kOG1idFJ6dDFTazdpNjF3WVdnYnoxSHJyNGZPcTh1QSsvR2JPQU9xZEJ1dGRUS1hQczFDTHgxc3lEd09wL25FY3EweUdkMjVUMnpJRzZTbXAwdCsvcHJJVForbzhpUXVsWVdya0tGeTg2TzBkUUtWNFBadG56RjlIUDRXZ1M1dkZqWDJBcWhLSS9hOUhlQVE5NGRiT0F5Q09YT0JQWDhkS0RJL0NzcTJlMVJLZkJTUkViWFcxZHBUd0s2dE9KaWxjOW1Xd1BZQ054V2Z4K0RYeXNjcE9MTmxFWEowNUhMcmJJUmtQWVJXVVBUR205R0V5ZlV0SkxWdTRZNVFYNDFreUxGU2s3bzl2ZFNIWmpWMEdMMS85ZC8weWFSd1NwTGlBb2tRVnRXY1ZMcTZPbXdvZlgwOGp0WCtlZUhZbU1OWkwxU29vUFE2NkNDckNUb3pvTExSdkJJQWxENWhRR2pibWVwdEZiNmY4T3ErOXFXQ0NodHViR05QRmpNRmJmcEVGUlpQd3dFNkYyZG5LeXhCSERSZE4vVUtYMmNOOFY4R3BVWEJxYnIyQ1ZQdndZRDE4NXllTnhSQ2UzcDgxOExieE9icTkyaC9FTVFHWW0zT0pmUFQvYTdqWkk5SkpkYWhpOXJoTDB3WmR4dEtLQ0drdHMvY1VPaGZ5MyttbHdpRTd3TzBhaTV5ZlJGOEtNbXZLOGU4cGxncGw0V1k1V29QQzFVbE9pZ3BkR1VmUTJyRHIzK0l4OUtUaFc1c0l6cW9FcGhtREk1TUYvZWZpcEpRRVRpbzBLcFdjSkt6L0wyeG42WEtFcFJqODhkaksrUCtmZG1hWXQ0Y3MwWXpLSXJleW1mRStLVEdzcVV4TnJDaTB0Tlp1VWdUbEQ4S0tYMys3YjJUMFBveHRsK1VoVkUvMlVucEl4RWRzRHVsWjhDakhDU2JMSEZrcVFiVERJOEFWKzExQjVYNFJyZUE3dUFNWHFLYlBUbVAybGR4OUV6OUt2S0k0bkJzbnVUbWpkZWlLRUYyWUk4eU0rZFp5bTNkaW8xb25kNS82bjBJUFBuZmhST2VNSWZwVk5CQ1IrTkRjK24yemJnSzRncUVWMUVPZjBOM2FLNVYrb1E5NVB3dzU4bk8vVTJKNTFjU0NZbzFoU3ZYWWxtdzd6djdnWUZhMGplTTRsT2llOHBKdFk4WGNzSEJYUmkyRVJ3REpuRTdMZHhFYTVMOWIwcnZaRUloOXZYbVV2MXRuV2tTNVpwbmFFTzFDZmtlNnIvRzNLY1laSEFHcnJOaWVWcGJPVlVHZGpjd3duR2t3SHhFR2xHYmJHRFliVnJmSGQ2cmNEWDVpRU5rNnlZNVhOYTVSd0UyUU1GQTlXWDBNSFNkdHY1NW9MYldtdHQzUjFrbndrVTBIUytuUFBNeURnY2NwRFl3ZTVlVWpQcFdqTXN1Q3pmcEdNdSt5bzV3RGY4TjgvMnNmMWV2My9WZTMxK3JwYnZuK3NSK3IyRnA4bjFjYjUvUVRuNU5zWHcrL212azdUZm4zUnd6NVB0ZjN6L1pBLzFlMlRmTjZqSjhuMXN2MWV6RFBrK3RYZlA2WE0vSnVEOG5wOTE4bmZMOC9TRGdiNVBxVi9uK21IL24rcmwrZnUvZko5R3o4LzAzTDVQbzkzeWRyTmZCMGQrVHVCdnlkYi94TmxBSXhTZ2ZMVVRpYm1wMmZyOVVIQVBtT3J2WFlCZEE4WU5DWmpVYWFEdjcvU28xalJxdHJBbUJqK1hzQjJuRFNnRFdieWxwQm9vMW9qTURNQmdvM2o1UVFoaERyMnBweldQTHdlUTVIRnd0WVl3UHFpSHh3ejFxQ2JBMXB1OEMxMHAyeHFTOVZoalBxY0NPSmRObUoxTnNGL1JoODd1MFhTc1BjbkRVRGc1OFR6OE9nR29CMDJQdDJTTndpL2hhcG11UFB1bnQrVml0alpBeHlVOHJPNVdDYWxTb1VibXNiRERjN2VzSlhoMkVDeTF0VmRGYjVEZWdHRitEc2RZalNIWGhPeWdFbkdzYTNlaERocm41VWhmSmkva2svKysrZ2l6cnZWVDJiQVlpeC9CNzhZSnV0bXJCK050MTBrQTV2VDR4TmNnQWVWNytaTEZVUUhkbWQvZS8zYUM3QVA2NEFjb1hreHpHWGdPUHpEYkM1d3oycHdoZDRhZGs3UUx4R2hNQ1A3dzAyK2I3ZElGM2pOZzcxeU80dWZnYkFtZFNRWGl6bS8xbEcxa3FjNi9NSlhvRFYyem1XVGxSNE1TWHh1YW83TVlwY0xCVkxGeW42ZVgzTWR0ZThnT29Sc0Y3QzA4UHZ4YVJxVE5mamhyZlZOaXYwemlqL0RGOWZIN0lnTDFLL0tZUnlXSzlBOGIwdXZ1R0FDdjNWWmFwUWtlTTJ4WFdOakZmaEtDdkZ3SEg3ajA1RTdUaFE2Z3J6UEhrSWRaR09LVUlMeXdnU094Q1hpRFBBRStHcmVvQlhodWJPT1F5ZjJ1ZlcwRUovb2RvY3BablZRZFNTTUhJOGZLTkpmQXI1WS9Ka281R0NYZ0E2OUxVVTZaMUFuL3NBS0JLZDZYSGE2ZTRCTm02NGFYazNEaS80U3hkNVR4TnBEeWswTGovU0VpeXA2MjB3MGZqTmZYdVhuU0d0bUgycDMyVWRzV0VUclR0bkJ4SnNYSTFLWXdaWmNubWRMRERKVERWZWdXY0psaHkydHAyblNnUFdnVmt3R0hQVTFJK29YR0orNGlEbHk2NWNYQkZUTHE0K3dCK3FSdXRSd0J0YnJEZkZVSkdsY3pySWY4RDU3YWtBMFRxempKNHNFWGFsRks2RnhUTVdHVkRsSHczVDNyanVEdHZzbTFRWGY1aWZsWitwL1YyOCt4N3dZVDVBT1BtTE1SU1ZiT296ZmdES2pzMXFHNWo3TkM5UUo5U0Z6UXhKTlFpcGVtMHVNWHdKVmFvR2Jrd05QT1RldmZlSTk0SEtaOTBJa096UnZEanZCd0ZXcDZIaW1wWkczbWh4NzRlS05nSW1ETWtnYlVOcFgvbHFGbGlYcys5K29VdDQzM3hsUGd1dFVRbjJrWXNUeXVvOXgvQmNBbGtpOGtPV0lOclpzMjIwTXVwS0xWUTRVdytGdjJjM3RWa0Z6QXhpSlhXL3ZXbDd5VFhqQXVDK3o5dFhSdUk1dEgwZk1LVThiVmVXU1h1ck5TQjcwVGt5NHI3bW1VYUxtVTJvQjRpQnlmOGs4ZmpHcW5oMXkvM2F0RDYzd0F3Y3hxZkVEUjZLS1U2Y0Y5N0wzWDdUSnBRbnRrSXNaZEVPeWl0SXZYK2F6MEcxcGVOUldQOVR3N0tZZXlPL1dldTh3SExoWEhjeHNiajk2SlFManp0K3VpVFB0K3pvQy9zbmZGaEQ0NGJzR3ZaQjFhS2pMQklxb0c1QzZpaDVzS1NtQW1uOCtvOHBrNzJsMndsdW5mZ0VXSlpaeW10aWxjYlJZejVRUkZkN2VYRjAybkdDeFYwWEpOVG1lUU1zZERnKzMvSG5XL2NGYW0wTVhqa3NUTTFpczhoYXZUT0VQbldwZ1IvdTZVTU1pZ0ZzS0pwM1hPSW1kOXBzZFBxQjloS3Q1d2UwaStMWlBhakFpUGh1cVB1UE9kNlExV1Q0c3ZqWEhqcGxYTlNxcEVVMHdsblpZVHJ5cDdzUURGbnV4dHl6eG5kNGFXbi8vQVkxcHRKZndtc2YvSWhGRkZXQVM1dUoyZlNRdmhvcGQwM2VvVVZxSjB5aUdaWlU3TWdHTndnWGtDYStMTmtFeUJxUkZSZ1JRS1phWElhYnNUOGw0dlUyM1I1dlkwbkJVeC84Tkw1ZzdLZjlhMGVNem85aWZXNjNPc1R1N2hTR0FLekNaaE9odDhNeWVFMzQxc1U4bUF6Sm54WDgxLzNuWEw0N1dxeXNJZXZQeEtuWm00Wi9JSm5hZEVaUkt3MkxSSXErT1dicDVIYnJFeHdhbmpuMTBjRFZVUnVtc3BURVhvcHQxREdsVDgvTFFuVXFDcitvMkFNNTNmb2lyRTNjUjRIa2lSa0JTQVFzUzQ5QklyaVZTdkpiK1JHcEc5K1MvdW5FWnVDVHRUZnBrdEFkRmhnemlic1FQdDhSZjExVDlmOUZWcVM0NlFFc3V6NjY4WVNvYmtqOXI0YkNXMmw1Qjc0alUwS1lQaEIxelJtSCtobU5GR1V6elVLNjRpSzgwdUZjeldWemxmWkU5d2s3Q2x3dFE0d3NjSkVKUVQwSklIbHNnMHVDN2VhdGE1RWp4WEt1cWNISHhZQjJ1OWRvWk9VOVY3ZVBXT3lWMWg0VllyUUg0RU4rQXdxa1JTSWxNRDV6bzZOVmIwa0QyZTg4RzR5aGM4Rklzb2RiOHNsWnlaOFVGekpwY2NmQ1FDaHFYbFJGb1pEWHBHZXBRSXdqQXFVWkZuc1h3WWp4NTB5M0V4Q2kvUERhK1g1a2Q3ODkyUG43YWVmbUtzbThwdkRaN1lPTjdHbjVTc0MrMnlHcDB5dlFZKzZpSkl4QTBJZ2tqZElqVi9wdmpmQXQvRCtncjQ0d1RKQmp6ZUQ1WDBiM2taZGZTSnFGTHlVRnhKRSs2WTVla01qWVVvczdnN2czMitPN1FoejNwUm8vMlRWTnhIVnVwSFBObkVmRGNNRFN2dmRpcVBHZS9SbnFHM2RyYnZ3YmRkY2ZXRE1Oc3NNUllod08yY2hiZVIzSVF5SFMxWStEcXh1UVc3c3NBdldUUmdEOTlUSEVDdkd0RVVPWUYyNmU4MHNhcW4zT0oxNEt6eDhjc0RGTkNlNU1xOFFQV1E0K1pQSDYxZkM1ZDZxdmg1QWNPQWJrMTlQUnJiaW9qbVlodW04aG40VHRBTEVzdk9NSWJsMHhYeitpMVNvSmF4QzA5anVRR0xFNjY4ZTlidGorb2hub0wvMWlaaDBYN3orU1RacGZFbFhjWnY0aldDd1V1SzJGakVTMkhPUDhIZkdqaGpycUVNeWwxaDUvRk5CQk1HNmYxZFhjN2Y2Y2tHQ0ZINVA5ZWRCTnFnd2MrWGpzVXVKWlFqc1Y0cFQwcVhYVm1HSFl0OEgreG5qQVU2WDIxSEVPeTBNUFJCVms5bmJOMW5OMFJzZHFqM2ZiWmczN1BCclFpQzA3MUxjd245QzI2TVdxOElVWjQxV2UxVG9JdDd3YkZlTDJIMVNNRk5OdHJmcnNuaWQybVd3bWUxQTNOUzBtMHRrajl6ckVtaWhGZlhEWEpNQnVYV01XQ2ZlK0U2cVVDVGlieEZIMTB5N3VSNWs3QW9FSnhlTzl2eS85UFpTS0M3QWdUc3JNKzQzMktwWFBiOFkwcndqR1FXaUVUUEFCbXU3YXV5aEZDd0dkRWpEcmNiOW5ReHRzaTI3MlJlRTN4SzZsMitxRFhDcWNzeDV3a2h1V1FEMU9HTkg4cmNwY1hpbEkyUzREVE5CMEc4dFg3T3RRR3ZMQXZsd3BXcmsvSHAzY05JUWYvWE5TS3NpWSsvd1E1MDludGRNRnNXVjcyTWdIMUlHUC9Wa0txeXZjejdhcVFXRUYwV0FQTlVqSHJGam56ZndRaXVEZWlkSTlIeTRKbWYwSHZ5MG5INGJQMjRqblRERTlKbWMzYmp0NGFuNkRTWWtXZ29ZVDZuV2tKQVV3eXQxT0tkQWtra09XTmZhZGh6VStZNWU3dCt1K0huQXRGMVdINS9CdGVDL2VKREtLYytYWmNSQVhlcGUrQlcwVkpPMjNrQ3lmZGYxM2lRNWRkR21jSk9hcXUzSGhLcXF4cjdHcGNOMmZGeE1hTjljMG9aQVg3ZXdpWi96SkRMOWtBWXppUDNtazV5d3dPWjQyZ3hJMlBMRUVxUE5aVFBheGI2MU83QkkrYlA3WlREeDdZZzliOHFDc0RkdEhoR2k4bDNkL3AyTVZuQmpTUkg5a0IvZDRCY0dNYldJbVhSSGc5WG1DNHNKQ2pjMllBMGpXTG4rNGJnbndHc1JOVnZDaXd4WWk1UUR1MnIrSmQweDZEd0NiU1J1S3Jyc2k1N0pSYi95M2J6ZFdteDJ6Zzk0L05kQVI2enZuaGFqNVk5Wit6clVFNDRENW1SMnJoV05xKzkyYUZVR1FReXR5NmZvN3NKNWJTNGZkdUljUEtaM2hsb0pqeHhFamk2M0JpZmV2bHpJaERpaUJ1U3c4aWwxRkNRYkhlRWJiODRMbGdEWTdnNUxqNlFXOUp2eGVETWNoNy9XZWN3NFovVndkNzc2cExiVm55Y253NUVtQTY0MDN5K2NHeHdsazVVUGRmZk80VTdGcXkrU1puOWd4MDVCR3BYdDR1K0tmMXdka2U2eWhLcENDaVZVS3cydzYwcTFkWDhRa3NvWnAxNW9SY0NFSVRTMjhDU20xMGQzZHB5YmRFalR6MWdnK2tlUTA0VXBoenZneWUvQ05JbDQ3UlZyMUh3WExnSzh2bW1QUXBwTHIrSFBUUnVXU1M0UmdDSERQcFk0WXZUQW91S1FmbkZJVHBCRyt5Ni92YWU3SGhFOTIzMlUxZysyNGNnNG5BbitTOVlJWXY2elVDOElZZzlleXR1WENEa3loRFJYWC9hV1Fac0UvMmlGVEJvUjdid0NHNnBzRkRjMENoKzUwVFk1dkpjVitvZ1dKVmZKdzk5bzRUWFh1dHM5TEpSZkVuNDFING5YL09jN2JiTG9TT2p6WFVDZHlSSmt1M0F5UWRpblNjMEwrdzFmUCtWcW8rVzQ3RncvV052REFPUjZ0Y3ZEZzh3R0ZEUlJqRitBcjVNWGJydjcvN0VxQmppMUYvb3FPaTlycFlmcXZ0eEJ5NlFhdnNoalhVb0hzRTc1Qk9mei92VERnTThXeUVCRkZEZUtWZ0lKVXBEdnd3dXRFeFpXSkVsTmZ5N2Fsbmw0a05mMTJmVkZucDRFRmdkdnZYUFpMZzdxbVRxdlF5Qi9McnAwMWtRNWlUSWY4QlVaWk1WK3hsRkU1VzVnQmduOGhubDJ0SVpnVjhhYTE0SmpyOEFhRDV5VGRMRXdhdll1NG0zNTViOExsVXprQ1c2QU52U2prMTJpb0pUUnk3S3dtd0Jod3FCM0VPQllXUWVsS1cwdFN5dy9udFU2aHFXNzZMcXR3YTNRbjc2eGU3VEptOTVIbDlXTEJUTU9yOFhuWmVNWmpoWG14eEg1OE14dWF4MDNJZGd5bWtlRFg5bnVORHk0RG9DejlnbEZETnIrYVZ4R2NaNTROd3NaYlpnblhibzd4S0kzaEZoVmtzaWNNck1wTHdPZm1DMDJVT1JNV1paaXJaYkxVUUVNMVl2cVZyMVg3SFBtdy9xdHBPdnE1c3E1NkRTRStKakdQZTR5S2JmOWtSREJXZ011R0k5WEl2ZGV0cTEwS2lrOGJyb0JzRlkvdkFuTTZORGE0NFpCM3didUxncENCRjNMejlRSGFYWVYvUXQ2Y0VqUHcwRDZ6N05yRzV6ak0zbXkrbWFWVjJWaTdCbk1lNEFkQTkvckZZUnJyakRzMURpM3hkYm5QaFJCbnM0MVczSjVlbjZaNHY1S2JVT1BiL1JmS05iVHBqQURSRk1sWjEwczZSbWxMTE5lN09KbTc1QVoxb1djSGQxcjNoSVRtYU90cHJqYkFsVWtkb1B0eVFrVUc2TVpZT0ozZ3EyYkZWTXdYQzNhN3ZxeHNrQWhuS0RERzBDZVp6MGJrbCttR3RMeFdRQW9lNmgybUp4TmduSk12M2s3UzRvYUMzOG5Ga0ZTUGZNQTdKNGcrc0NnUzJkaXFRSWNPNUFVYlE3T1hsc0N5MTRXbFBKZmV1N2JJZ01vZElia2R4UmdEM3o2bngycUo5UjJpWWtTTU0xM0VRbkN0b2dZUVcwWW5CL0t4NnhrVzBxUEIxTWducWl2dDlrTzgyM0FEUUlhTXlSVzNha3didkNNMkNjZUNFQXVCV0RPdWVCalY4aExSS09PbjdwcGM3Z1BPMDhZcmVTYVIrRGg3RFY4ZXFodThsZm8zVWs5SW1FUUw1bmtxWFJjcTBUZXZzR0pFNms5RmxDaDRoVjgzTlJiWjE1dEFsL0hVSTlKdG1tQnVLMDlnSXk0cUZBczlDdUNNTFJsZC8zcjBnTitrMWlkRFpHMy9uSzd3VHpvRSszbnY5WEpnb1pWU1J5WW0rbi9zNE9ESTRScEdZcVRPOFBGNEE5YXdUOXExOFE3dXFKSjg2cncwNXZqaXQ1Mk5TNHJnZmxIREI2Nm1mdnlzVlFaUktoYTdHNStRbDdMSUZta3FxUEJwVUZPWGg3NkxHNDNJUER2UzhJRC8yVjFjRFZBQ2VJRWlaWmIvQkRJcTg0Q1c3MjVreTcrY21yL2xkUStwbk5BdTk3ZHdtdHFxaHdOYkh3SDhQZEhTMnZmQ3ZhbzhmT1ZLWUtqQk42SjhmMFRIb0dvTUdlakRYQ2hPS2N2ZHVMWFBmWk9VT1VnRFM5MURRUXNaVlhCTDlDdHFJZC85bStrRnVtVEMvMndSUUdXTGNpdU53eWUxZmlZQm5vN0doa1ozdW9hak1qTkJUVVVpRVNKb1lhSmJjSk13RHNXaURwZTdlT3gybTdBaW5TY3N1Y2hEa3ZCSnQzOCtMdkdYRWJnNVRzQ3F0RFVaTTk4RFlJTEUvZXgxSFRxMGFpeCtFUzkwUDI0VEpCaXE3ekl4QnJXYmtoWFNoSWd5d3VPdCs4NWdEZXl3Mk1CblkyUXJhWDV6cmY5OXUxSzB5bnh4djJsbnp4L3Y4NGh0UTZ6TkhHc2UvWUtDTE1XVTQzcUJMRGZmU3NYSm84bU05Nm9QUWp5SVlQckpkYW9VZVJDNFIyMS9GTmQ1UWdMajZieE01UWZOcFlyY1BiUmpNUDdJMW9BNW9nUWxCMktJVGdISm9OcU9pbzVCTldxVjRxMUhTMy9nczJRYzBYeXdJZWZQcVFyRlE2ODY5bkJTQm5yRkJlbWt1bTN4RFUzczdRWG9URTQzUHJ2MGhJSE5LM2FiQUhKZnAza3VlZ1JoRFAwcXVROHZmdEcyT0V3OXV0RFlDODUyUGQvQ3k0T0RRVWg4SXBwbWcwdS9URXd0V2FWQys3NEVMU09jS0ZHQXJqNWJNQ01ETFNQanBYVk5YVmZXWVNjYzNEY2xLeGhFM1hubzhRMnVjRzNzY1ppcUNxbDFGWjBnTGVFWm41azRKY0NwWVZVQkRrcnY3WmJjbzQ0VGlSZE9kR3NQOVFZU1ZOcVEzMVB0aDhPTnBzb05aNmxoOXVqcXV2ZlJYbmxDb1hQU2VXWFhPUHUvNnFxQmd6cXJoc0VRcGk0cDl4QVNHT21NVFVsQ2xYZHN0ZlVxcVhSdDRlc2xBcWxtSW1vc0I3NEQxVzlQaHpDamwrckszVFpKbXZQTzZlUERPMVh1Ujk5V3FvRWdEOHFJYkFkamdTZ0c4cEM4WG9uWm1XZlZvSjdaZEhGUlBKdk9Bd0hwS0t4Znc0Tmdjd3hxMmY2VHZ5bHJXN2pTVGxab29JT3M4eXF3UjhUSVdPNGVlYTZMck53a1FMdmkweFRMRFpHa242cmw2Ry9FNjdwR0JwSEkzODgrQ3BKdmZxSWFOZm9sWW9SVTJFczZYYnlhVTNxUzltOFdmd2QvUjRneDR3M3prc2xySngrY1M0ZkJ3emt1MzZkUXpJUG1JOW8vYWJmYWpTSmlodzdvc2s5QmdhTEl2SVpyV3daSjIwZlhsajA5U2lDWFdqTnlYM2J0Z2FYMzlCbG1HRGVZMWtLMWNoQ1BObVNITjhxekh6b1V2YTZyc280cHQyT3czMjU3VFNxZzI5MVJVSDNFMGsxL0x4VkJESnhrUklCVEk2QUlwVzlGeUZaOHp5bVBZajNZZ1loRkdReExWRTR5SHZpMmlLbkNXODVWMGduYmpDMytGRDF5REJKeHFQZVhKVHpPa0ZyMk1XL0xaT2luN255d01yQUhmaVpGbGVjNld4QytHRjV4dzVLWUJ5R2cxWWsrN1VENVhUWnZkZ1cwZ3R2UmR5OXBZTEE3ZytURjVmbW5raXVRV0dVMFoySUdCaGt2cjc2OWo4L3dxSXFjbnJ6UC9LdG5MT3NnZHRJRlgrQWlJN0VKR284dmlPSkZSRnR3QjIxQldNYmFINzRtVDhsS0NlSnBWTno3RktLZXFzcTR0eWFJODRoRlczSUkxQjlWZVJwSWtjaDNUQUFvWURrdlNXSTI0NGNoUFRMNlh2RytaZG1BYzQ5ZDYvbldrdGJ6L1FYVFhESGJPeFhZSDJIMENrbnU5SG1VVU1Xd0pOUWhIbERKbkZTbnBvTDhYNC81ZmZlWTBwT0FIbXBaSmlWTGU0WUFEQ0RyMHVNeUhGaWZnbzd2K3ZYeU93Rk9rM1Azbmt4MzJ3ZEZvNU9kSFIzekNZazMyeDdNU1JRZ2VMOVNaMk5FS3NsM0tMNlhpc0NCaGNXV0NJbDhCdUkxYWdhZUVmRjk0MTJxRVByc3M0bmJhYjMxM3NtMSt4RG5MbGdkbEdROEwrY05Sb2QyUHNxbTNJRnNzQWE0c2h3V0h3TTFUQ1ZkUkgwNmFNSjNaR2tEMHdzUnBpWjA0SWVpeGxGZkhZRDg1cjJCUXFHMUg3QllNeVdET0oyaWYzYmxXZjhGb0NRNTdycURZU0RKalBhZVdCL2FkdHYyMG9OWEsyNkc3YWJFY0xHWWM3c0JOc05DMEt6R2JzTVBzNmJyckFkd0ZRVzM3VFM4UzZrb1FFNjd4TGcra3dHRUkzVVZDOW9TakpFZHdxY21reWVhdjFRVHJKa1lkN0Zudjc5T0Z4M0xwUUVlQWF2VWZaaEIxVm45OXdxL2J0TjFhVlhCaDhMS0pNYXd1K0lDSkszRDNXV0dDQmttVVRURzJzSzJVT3NyN1psOUxoNk1VSWxrWjdQczA5TExNWFJZZk1VdFRiUWVjU3pFT0JTTGsxVHQ2cnhlSEVuRzlwQWgrNzZRVDZxV2piZjI2VnRtWjM1eHRtd2p0TWZUZm9qRHIyNXFKdmFHL3RZRHpqWEhsZUlPWE9uUEllN1E0aGp3UDRtVkhadDdmOUg2WDVXZHBmVUxSZkxzWk1IT2ZTL0kwTGxRVjlIUXIyR2NuVFZBRG14WmhwZ1NyOXcvbVV6dldjQ241dGxzV2dJNVNXQWNkL1hjUE1nR1Rwd24rMk45MWhwS25UY1dMZG9MSzdwMlVMdGhOZTFCYS9WR2NJZjJmbWxLaFN2cytGR3pjWHRYaFlmT0dJK3RBMlBZTkFRcEFVZkhHZ0x3cE05UGthZTBaN0tDVmhuZUZLV3o3KzVzcGJBSVpZZFJuZ0R2SEZJT3FPZXNzRXVBQTNlN290b1BpaG82N2l1Q2srYVc1MUtJMlVka0o2TGxoRVpKME01cWdJWHcxWXM3VnA4NkdsZEptaGlNMjBWc2w4c2dTdGZNZENsMXhnMXlrRUdFRXFEMktnSnBhOHBKU3BQc1gza2U4bUxCRXdoZ1JPOHVUejQzUTdGdkV5UGJSV0ErTWlEbFNDbjhqcW1nUE5ZR29iU1FOVWs1bmRIOUdrdTJwVW1hbndvR1VkT1NyaG5YMlo0dSt6dnJzTzhEYkczYThuOElGNEkzRkUyWDAzU0c0MTV3clFmelhDTXQ5TWJNZlJNSEJnSzd3UWpUeit6QjVZM3dXV2xISnJsTk14RERZQnpXSTdEcS9WM1hBM1puMVFhRnM2Vk4vWTgrYytOYzFkTENQaXA3MnIrU2xoQjQ4OUVJRWoxVG9TYWhKSGJ4NmVPb25aRXUwY3JZcnpWUXhSK1U0NDE5ZXFmMXJmcmNxT3pNdjJ3SW1EWmo1anFQR0Y4TU8xTWp5SkxaZmhYOWk2Ni9LRkdwbU1SbUFkSWJtMERwSTNOVVNod2Y2endNNnNRVkFQRkh6K0pwMmJtSi95Z3c4Z2pXOG9UdXNxUWM1VzVTTHFFeG04UWxNQTI3cncrMzlFYjg0N0RGUE5hMzd0enJzRHNJWHB1R3RxQUFmaGo0OFBUZCtwVVlkQmw1a3hYekpwdzc2YXdwT2EwL2d6b2lpNENZN1FPZjdzZ2o5dU1qN3FLMmxHa1RYMWIyWjlaNXhoanVlaFlldVVzVkJ6eHdVSlloUHBsZmFSUDlkOEE3M1BEOXEwSW13MGY5c3h6OU5yYlFIbnlWdjc1SGRhRklIdytHeGdidWdHOUp2V1FWN3g0ckx2aEczVjdiaGQrSWJZcVJuTDFDWEdIdGY5d0N6RWRYUlZIZStuZGIwWTh4Q2xzOWxNU1F3elpscFVkWEZ5L3ZGQVY3ZllHMnc2NStBbll5WHpiWnNzUnFiNzRlT2xxYWFHaVhzY285c1g3aWFqU1pDZFg3OXBmQnc4QUhsL1RkN0ZJbXUwSGx3MytqNWhkVXppTk5lOFQ0cFRWemEwdW5RMEZsdXRGa3owTlU4elFwZFNBSkNHVERHbmlnbndOQTI5TElXcTdiL0lpZ292U0M4Qk8wcWxjUWoyNVNQaGwrbGpFc3NsZ3VGbkkxM3c4VkdwMW1aRTZPZ1hJRmxva01nMzJ0N0o4Y0pjUXpCSE1UaXRkWE9UY3d5WE81SVF6d05nb0FMbXNWUU02NGhQTzd3b1A0NG01QzJMdEFUNU1sOUpWZkF0UThBVmFKd203VkppbHVEbmhkZGFtbU1vaXlyR1k0YkI2NElENUpRejVNYXp6Nm5nejFibVc0TCtPYzlWdjE5N2VqQnNFY3FmRHg4MzVOZEk2QmpkbU1KK1V3NURKWjgxK1RoQUQ3TnlnSGxMVTVXRTJ6bnhPcGU3bVRaYVl5UWlnL3ZRNjNmTituelV5MldzQkNjUTUrMWp1dDhoSnVjc0Y2a1ZrQkZrSjVqWi8weS9mWTZwWkJUYmQzNjZzaXRaSHZkcHV0KzBsSzBROE5SYWtzd041Zmd1ZkQ5Sk41QldUUmFQSkNDVWpjeU84RnZOTG10UDAyWGhWM3FhVVd2V28xajF2cXBaQm1tSFkyQk1FSFIwU2F3Z2luMzJlcEJpbVppeW41aXpseTJBUUxTczFUbFYvUnhUbmlmT3hyVUtGcVpFRjVXWXZHcjFGWFlCb1VwNmV1aElaazkyVnhNU3JvQlMrZ253Zng5aGpIV3RJcUlXSTNLbkxWRUY1WXQ3SjhmblhxOXlOd0ZqdE0rN3NFcjg1K3lYTjhyWXBpSHp4YVZrNDVHUWxrKytzZkhYZktzRk9BUXplZ2hUQjZFM0R5dHZVQ3NxS0xZTGtweWRueEpqVitIUFhPQXRzWmFTRjVCRWtxcFNSbmxxZDRjanJuaGI3QWRLa1crYXpScGcwcVM5eHgxdU9BL0Z3bVE2ZjF1UFNHWXR2eWw5Q0ViSUdweHp4YVV2ZDY5MDdmT0Frek1QeTc5cmFwMkEwNWFobkMxU2FvT2FKWGY2Tm9hallsVyt6NFZQWmpwVXJKMEYycDlNV24zTVNpSS9VUW5GMjBJNjh0RXFoY2RqUDJldXZIVjVKWXNsdmRIUVprSEZEalpaVzY2aTFoUHQxL0RabjkrR1lHMStEcXM0OWFRSEZIZ2MzUW5mWjA0d3FMOTJGMWwwSkp6bFVtaGxtN3NvL1pTMkQzSmJYQ2t1TXVSeEZTSUxPNjlRRWJJdEUwUHN2MnFkeXVqOGNWaWplRmFJU2l1KzA1em10TDIwckhVL0xvNm5ZeWhoaWJhMjlqeEZ2dVlxZ2xzMkV2VzlBQkFWcUlYNTBqZGVGcDJUY0plakEzOVMrNloyQy9FNlQyaXN4cTNmNG1NUFV0c0ltNDJZblA4YlFKMlFSM1loWE9vSjJNMk4weUp0Z3pYcnc4SzBBNmxHV2RmUDdyeFF3SCtBSVBzUHdIakZQUld5eGY2ZnZCczV2djFoVmZmcmVNb2tqSUhmZFhGL0RMMUpwc29BNGdPcjN2T25uWS84a0prc2ZlRm5nTmFMYXY2aHpaT3F5WENMMU1tYWRIa0lEdU9LcHlPU3paZGRmRVZTajNHY2JjaENuVWxkek8zTWpKZ1VlVXNzc3ZlSzc5M1RyU2dLYTd2VmFFMmdDTTgxRlVUZDlYb2R1VVY1WEFiS1FOVkZLTmtJbzlNUDdaRGZldnZZdUV1RnhUTE1BaTdoN21zVmdjRFJVWld0NWdJYVZpWHNUNkpnL1IvMUM0ZG82UlI5eDJFMmlFeFBsaWxhK0hyQVFCK1FwZHNHVEZUeURjWE55TTFxU2l6TWltWmFJTUd2OGwwSVIyK21RQW5uZnlkWFdlRktLNEZpcmdtVjVJQU9sT1cxcXoyR3ZQSjFISFkxL2lpWnRMeFUzQ1lwem9VLzExTzAwL1prOTRCOE1vV1Rmd0VWakFXUkE2cVdQOHByYkQ0K3dFa3pvVXJTRWZ5K1A4L0tnYWU3L09LL3VmOVJVZVFjeFY5NklMdXIrTVRxVS9vbTJLNCtKcVJPeWtDdXZvTytWeTZGdDNYelJlVXdGamtJR0pwSXRJYmJTYWpjK3dVZm8rSVBjWnhzQUQzLzBFemlNK2IrWWxndEM4eEdIU1NLQ0hRUUVyQTUzVEdKQjl3clZWUE1RbnczVGhYN2JBNEp6UGV3NUJvMGJ4SHQwK3RUV2c1QkpjeFFJUTJhQTJWSW1ldUFJZWxTSFlTQ0ZqM05VY2hCd1gvTkJPYy9YY2wvdzhEQnR0QWQrTzVNY0ZRN1VCTGFmcVFXYzNQekhjNWNkZW5vN3NUQWFiKy91VlRmb25jUEVwYlRlR3lPWkdpN2lIbGwwUStXKzBoY0t2ZHVzQWwwdzMxeDhDVnJEZzQ1bVlzRzJFVUhuL1k1TWl0WW5hWWFPQkFhSlZPUEwxQ0JCNHFpMWpkeklrV0g5RFVoSkJ4L0ZyeFNwSWM5UXdBSmZCT0hYamhOd0FWKzlYbzJiMjJmZXhkeUpsa0duMS8xZ1lwR0oyZWhuRkxZMzREMk16dFNNSzJycVZ2dU1UOWV2N1JvOTZvcUZneWEyUHQrVTZ2M3NJbm5QSVM4dFBmUmE5N2NLZGtUUWl5Y0RIMkRBVUVnMzRROERZRzlrREJwWTVibGhyZEN3TGF2SmV4TDlsczJtcWdOZVJYTkQ4cURlWGt1NFpVemhOS1BCMHZ6SnhzNEhYRmdaalArRW1HL2NGUm5teDZFODExRStzdWpkQ09JcUxBNGJ3QnR5bk1lU09uRWRncElMQTVCT0ZLMjBoZEdWK2JyZkNhY1BwTXB5VkZyV0xZNlpGeGM4ckhvcEhPRVlBQ3hNY0xzeDFMTmVCU2RzTzUwVmlYMjNyZ2NlWUwyajhJN1Fna2NobmxKOTNTZ1dhNS9VbzhWTjBvSTlSeERUdmVFUTlURCthN1o1OVQ2NEl3NVZyQXpLNStJdWJHT3pENm5Cbnk3NWtBZS9YVy9WdVhWU2t6NERReW1vbk1ZQVRQL0VmbVNHdEgxR0ZwbE9KVkgzYkRkUkJhcTM5WGZpNVZQUnFLQzVTQ1ZTVHNKVXZPcEFvRWM1WFBuQnpCY1lIM1FDd1dhdXU4a1ZHQzNlZys0eDYyVVJ5c1hKRnFRajEvS1Y2dWgxdlFiVExLVnNXVzJCY0dWSVM1WVY4Vy90eHlWTmhnV3NkZTNpdWlJeDBWOFVOU3crV0lmK2ZhYUxlcElRQlBzQmtMakJGaTJoNXFDanBBNHU4bFFheUNYTXJiR2dwUkExSE5adEVYZk95R0dSM3Rrb2FCZll3bEM0V21xdEJSQklpcDBTdXhTZDZHUTJQUmw5WXBuU1ROMVNYSDRVYS9vcDRPQ3UvSyttaERQczNCdzVMQ1VkL0I0VU5meWkwMVBCUEQ5K2VNTEIxNU9ZSVBRdy9jbHBzcGRLcEdRNUtUZFZvNzJHNEVTdzBDK2VDNlFHdlVBRis5UCs1TmlKYnJVMloxK1NMSWJpb2VIZE1DT0Z6R3dFL1dMZVFOc010RE5uREhLanBseGFZcHQ3L2wyM2ZEMzJZY0dTVVJwa1EyZGFkeWRxdnJ5VkppMWFQSG1rWWhlUWl4bnZ3VHQ2REdHUUg3emdHVjVUak9rRlZQUzFwTyt0QUd1RUV2WllERFZ6SThpSFA5TjNxVmRyemY2Zm9nTVhyL1BPMllhMlNyUzBwVVZqMkpTK08yNS9pV0NIOGVwTUhwRVI5Q3kvbHN0M2FqOHh0UUhSc2JQZEs5TmdBbk52TUtqdzFRNkRuaEdQVXVSWDkwbjViVmh1SDE5elFGSGhBNjl2cjFDRnJiN1ZCenp1ZDBNMXBDRGtONThYZEpXSUhiN205ckVtaWVUK0JVWVJxNWdnSkR3N1ZWWUI1U1pOL2pNZHEwUUZza0J0Z2lpZVNkUGxrT3NGRHQzdUhOV3NKdXNrSFM5bkQxZWZJNURJZ29BMnVFTGZKRmtpMFIvczhURitNZFRveUo1dkdFQ3VrNzYrOTdvN2FkOWdjeVJYNTF6MGR4RUVwMzhFYzJvRVhYYS9wQ1BPQ0xwNFZTVncwdUEvTXd3N0E0ZjR0aVFYRGhaTC9iZnFIVjdRT0JsK3RzV1RHOE1aODRtSWdsRGg2K2kzOGxwcVljNFd4bzZUanZkUnlnY3hhVzBOVklzL0RzRENSQTROenUrUVVYK3g4N1hUb2ZXZlcxSncyckE3OFRaaFZIMUh5NDdYQyt4OUdYK2VRTlRpRXZkS0lORUhCVU9tcDFNUVhqWjZCR2J5SUhaVjc0cFloSGFzb1NwU2Q2N1JUdmkxNHBaTGNvYSsrYnZacjFvdzZwZ2kyWmM1UmxvbHdFMTNJdE1PWVBudk8yNTN5dGQrS1ZuOVBDb0h3STRHY3hqNHJGVUV3MVZ6WDNYVkJtK29GLytBOWc5N0p2Q3k5WVNXQmFueGkwMHFPY3lsaGpDT1ZyMkJTZkZmQUdXVVJNcEVSTkFINWVMQXMvVGRJM3ZCOWdQSGJDbHFHTmF5ZlY1TVRqMlh2RU5KbzY3ZVJ3cEVGdWJZUHlPdTZDMEtTaC9qYXV3SEJkYkg3ay9DMWFoODg5aEdJcnkvbjRFRkdNZXA5ZmYzRmdZV2loUFFvWkV1UjROeXk5L3JzL0hMNi8xeFNJOUpZdFd0NnZNN3NIV2xNN2xsYTRTTzJIN3FqSTRBZkdFL3NONTZrNC9LZmkrWVNXbXpvUERrQ0huZzRoZ2dUR3JoUDQ3V1RiVVFIdnQwTzJTNVg2WGN3UXJJU1l0UlVrZXZwSTJjTFhoUDRLekc3aDQrT3Bab2x1OHZqa1Qvd3JtTEk2ZDA0ZXkrbjlZWEhaZTUreDB2UmFFYTNoY0lWZ1dZTFVnVkRRMHRVMVRvUVdJOC93dnlrbFpWcE81anBlSk9XSUpUN040T3AvREJWdlJUandvV2szU1VRaDA5RG1SdTRoeGlSQncwRU9JNXJJdUE4ODlMM3BYZ09FaTFiblJOWlVBcFJJN2g3Qm8zYWVPODhYZDM5TDNMREtJclc0b0V2aU00d3ZvM1d6R1p6UlBXYXdnQlFhNGFTSlJHeEZyRENuOFhsUjZFQk9zcC8wNFpsVnBKTC9nYThaNGJrNTF6ZStCbWJKUTNWMVR5WHVKUGZwTTFQZkw1aFpqc01MU3UvVmlkU1E4VW5nTUhtQ2R6Z21HYnJPaUVZcnd4NjZCUEZVUHF4VmFIWkNRVFR3UVZDNnNldE9udjcrY0MwTUswdGFNUGxuZEFMZXRSU2VzV2UxQVRVNWJrbmw2S3FFUWc0eGt0Qk5BYTdZNDloTUExSzZ0QjVkWWIvS0hPdHJoOVJHcFFWOFFRWlVFbzY4b3h5YTk3WjNNWWtUQTd6Sm0zbmNkTXhzazNrV2FJUXJOdURoOWFUcnppZzJEb3ZKZUt0RTBwUWtOSTdFZVBBQ09xWWZqbDhVYWF5Rks2LzFZSG15MDhiU0MxSUFMclp0Q2g2L0VrUktiMndScWtIOTlSL0toUUtlSzRGZzFkWlYwb3dmOUZYU3BzTVY1b1pQUnBhbVFzbWwzOHNSZmlCTGc0WTFCQy9sREh2ekFSdmxMRStuSkt3eUZPRDdpcHhKaG03SGRrald4eXlwSnV4d1hPdWFlK2VaR200NWV3SGc0TFI1M043ZGdmbUUyWUJXQ3hielRTSE1YKzVkWW16Y1hMVTZIVUkyaDY4SGlvNmhUMy8xZVN6b2JIYzZZU0ZYRk05SEtKTmtra0ltM3IrVGdLckVHSlB0bjZ6NDhSckF0bmFId3lEOTR3alNKK3RBQTZHa29hWXFZaFY5WTZDNno4YzEzNDdRZkYxZkZBQmU4WjNCaHJwak5wYmlPQmRrb1A4UjVmS2RGcDNJSzBTUzNEU2JnTDIwYVpya1doS1dVYnZramRHUTNvL0RTelZuM0lBd0NNY2xjenFrRmVEejd4SzZGOGk2V0tETVhhSW12VUwxcUZzdkN5RW5PVFJHNHRPdjJRWlZyMDZYL09SUEZqUWdkV25oVnI5SkRldVVMS2tYc1JVaHZTK2xpeTBMYURxR3A0Wjk0WnZtOGtreFpQWnB0MTlEK2I5c3ArazBLenUzaVJyUDBvMnZnNDQzeWw4NytEbTM1QzF2MTNhakhaUjhFRXkrLzArSkRoQWpFdVdMbW03ZFhQQWgrcDJmd2FHaTF0NmhEeFp2TTJ1WFVieG0ydzVUUjY3VTdGSitmUFZHYTRleFhsenhQRDdsc0RHc01WczFuMFhsV1RpTi9sRUJLdlpUSHJmMCtzU05uN3F1SUZJeXRXZVFaRERQQWlKK0ZWTi9ySmFUSnRRQ0o2VlJvOXg3YmhlekRKMWNQT1MzZVlnRnJmcWttTjBhVUQwNHFRZUtNelptT24wdmNTY0tNYVM2Q3ZlQm50OHI5MTFQWkMxTEpZOW54emNONUg1eWhPSGI0eXRYQ1dndE1hbUFvd0huK1UvOEtqMVBOSHBjWjh3QVZEMnJnRlM4bWZVUmduRStQcjMvaE5Rd0hPVm91cG5qRmlPSGVCWjVWd2pjSmFnYkkwRU4rUVM4QUx4VWpESS9EMC9GMW9ENWF6WmNVN25CdTNORU9DeTFQZkl2UUpyK2NzTnlsN05lVW1CRUtaVHJQYUJZU28rK21taEdUYjZxdVhUV1pUdC9paEh1bEEyVFd0ZmxYRDZBR1NmaVpIekgxdUFMMTBTV2FJajdxS0pQSUdVQkRWM084dTV2aEtUQkl5Z3V5V0hLdEkwSFZHTHp2cXNiZ2FIdlZqdWdFRHdUdWRPNTBmN05GTWJqN0FTZkVUSGNicTNuY1V6UFpvWTZEdjA0ZklnNmhmcnFreUxxS0hWbE9DS3cyeGlRZDcvWGhqNTVBTkFzOWQ2NE5wblV1K2Z0a1pXVEYxWVhMUlVVcHdIMkZMUkxWZW1BMWYyZlRFWUdrVTRySnkvbmtxaVg3cnp2NmJnV0pUaDg2dHAyL3hCZ3ZvYS9mM2c0UWdlbmQ3R0RDVVBNYmQwcmRnT1NqZzlQb2hNNEYrT2RxamdST3lSNjZydkMrazlZbkV3YVFZeWVJU01DczZVYkdZR0VQMWE1RlF3cmhTWGQwdk4xejlvWTkrZ24vSDlwVzMzZDd4NEl2Mk5ZbThCdHhxWTd4anRjRHZTUGJLMlFHSjBnRmlqZzVYanE3TDltbEoyZGtqTTdmMGVFaVQ1L3RILzNlaWN6MXlzb0hTc1NuRCs1dWN5WHdPYmp6c1RIeE5zWXB6WXNBbXZlVVV4WVNKaWJtRjNjZ3RrV3drMUtzT0VRZllhc1RMMlNpT2pWNnhvWTBvcDRXOW1zYy9HOERWaWZ2SHAwN0dEWElDMWFVOWMwRjRPR2NLZlFvLzQ3MEs5T2ZmWWdQK2Zhb3lTK2s2ZjJERDUyQUxURUQzNTBlajZsTHQ2NGpkdmtOaENsUWtoZ0JZK2F6U1pQa1RlNXozYXplK2IxcVhaUmRUaXEveWFPTEl1N1JpWk5zUGlYUVlzalpHTWJnSUFOZ1FuVjZpOExHQmc0TTIzQm1DbkN2S0ozeHpycUxhV3BmVERYaFJuL1RLSlR1ZlBMWmc5OVIzZnBGSmtPN2kyZzZXS1BWd0RkOU5YWktSVkNLblU0ZzVPeVBodzByWGdqUVdLOUNCcUVvMEtxYmlhdUYrNktHWXVuTUdTTUNHWng2a2Z5L3B5eW02aUFQZjJtZXBGYXlZZXdBNHVnZGNGaDlzZktMVk05UUFYRHBrc3lmdzQzM3orWGExWFpoRnNOV3F2Zk1NcGh6NnFlR3FYUWpPZ3BpM0NIQ3lUZkh6eHRzaDNnSkVGZXN5T1dNWWNkdHVoM1R6YkxlQ0RRNThncFpXZWFTS1h2eDZsTENzUjJqNFAxRjl0ZVBDc0M2N1lqdEtRQnNhRGZ3U0pSUExPN1pNTnNmRzFlbHdjUVJXKzgrMW0rM2Q1Qy80OUJDWGhtQi9vaGYzUmFrY0FRVnVkSG9jTWpEUitPTHhkeDlJbU9tUVRMTHhNWkRwVkxabG9OakhBdnIycTFIZHNkVGFBbzZ3NHZhUDFveDFXRVpSWW8vci9YRWkzSWNIVEpGVXdQcCtLby9WdHhHczN5ZnpDWGduRm0yUE1DZHpvUWVtcUtMSmVWbnRqZWhRM2VFT2xtM0EyYU1kbjluZXVEVmVPb283UEJTQXlWakVHZWpQdWY0WVNGckx3dVhubEVDU04walVqeDBRT24ya3Z4dXFzZWVmV0Z2UHQ1VGNBMGZMVjluL3ZvZmxwQWpBUk1yOGxTdWZrT0RPT3BJcWZaUmhtUFY5YTcwYUxEQlFneHhHai9mMDBTSXNnUjJLWjM1ZUZJNDVFOHc4K0tBOHh4cGE1ODZpM25VZGJ5c2c3eThFZENlUW9sZVo2QnFDV05TYzRFY0h2QVIxUks5eGxRYjRBM3dxZW50cEVDVUE4UTBycHRPY3NMU1d1V29jUHZFRlJmR0ZDWFMvaFczRXV6dktQanFnUlZhMDVxby90VVdmczJwa2FsM085SnpiWmx0TmI0WXFUNHg0RHBSUmZRcnJXYlI1Z0VsWDBxd2huZUl6TTFPTVplT3VBKzBOc3ZNYUFYNmJacUdzU2xBNHpQSWh5R2FvQS9PYk9UUmNaV0JzOU5JQlNCbWlFTHRBNWhIS2ZDZVdJYlo2bWxIRUswN1BCUGhxd3R0VTVmWXNmUUtmYWNmQ3d6NXFzZC9PUWV4U1pkVXZRWWJ6S2VkZmhNUTJPNEtNSk80aVJ6M2IrbFo4ZzlzK2dpb2VJMEdNWWtKQjJ5Q3QydnBlRkJrbEpuY3h3STJ4bkc0VHFCNGltMEo4YS90SGxMQ2xWYkdyTGdKWkg2aDhpSFV3R0V0cFJ5VlhyUWo3MTlKUWZvRFl3Y1YzWjFMRUZrKzhkakJWa2lqSFNQUHlQVTcxUHRKVHQ2RFlJZDA5UGdoeGZURjkrMVpqelVOTEU4aHNwU3duaGN6YXZSUHFaQkJZSk02ZHVpMytaaCtYc2RjY0pBTy9iVE1pOVZ4TkNLc1dVVWQrSmZ0ZTJmV00vbDFRR1h3ajRyQWRjSmIwb0V5TmpaN2YxN2paN3B2bTg2cDlZVnNZL01EVlFPZHBSOVFLZWFVSUFuQW1EaFQ1cm9tVnBqWDZWbmt3S0NOVFdFQlZIaGxLSHptZXhUbXY5dmZXaE9sQ3FWVmRQTTFZVjRVVlJ0RW1tZ3BvVU9seDFxWGpYQUNjTDR1SURLV3pScmtVcFJDMkZtUW9FWW91YUpyeFhURHZ0bWNZTmVralZkTTA5N09UclIxWlZTVXlady9aRkhXeDgxR2xuN090SlN0NVFPN2NvZzREeE5FRksyMm5oYldZWlRvcjh4dTJycmk4aExpMGtuZmJRMkI2ZFdLWndpQlZ2VWhNZ1dCakRzQUw4STZNOVpGbmw4Y1BZMk52dnMvUVphUWlZN3N6NTNlM1dod2xVblR0Z2JaZ01LZEVCeUtsUUVGYjZFM1JZQVhlb3BCU2wwNG9oMW9yOVB6QjJCR1RsekUvdUY2ZktndGlzeVY4WERobFRQUk14bEwwVmZhTlNreW1JYVcrK3hzME94Ym1mci9jTExCaEw1OEo3Q0hhcTdIa0V4cnNEN0swRVBHL2JGc0prYVA1ejArS0ZZeE1KbzY2eC80WVJNeStRWjBJWkxjTlpwc2gvNEgzRlIyWW4wWjJ6a2ZXcVYrcHl4ZnRlOURHaHBGSXBGL2lGOTV1TW1kNFk2c1Vlc3cvcU5zcjl6TmZQYTBicXNMRWZnSlJ1ZUUwd3ZOYkVDMzlUbUpvM1NhczhmWEhwVzZudjBVS25sSnFSOS9aNWNRbXp6ditzWFlNVnpxRzVXeWJRQkdzcmdzVjlhbXBsQVFFSmtORGFlWlVyMnN4cmxKc00renJZeUUwMVdZL0ppZjJUa1hyTmN5THYra3c0SGlGNEt1REpBd2gvQlp1cnNZeVVPZnlMM2xrMDg3cFIzVFJZN045MHBoa1VGdnBWVFVkVlN5ekZUcFVDUUM1TU5TZWpMQ09qMW42NkVyOEF4YUJJWWdLNjlPZ1FxVC84ZVo0NWJkS3dCcm9sRXNzaUZNWktscGVxV0VkSk82T2RxUzd6ZTNqSndxZmYraHFwQ0E0MTV6ZnZ4cmpMdUR2aVcveVIzV3FnZXUvVU94U0hZWmY4dXBodTJwUE1wZWRkK3p3bVdpMlB6V201MndON0FubXZldHFoZEdIMFp1MlQ5clY0ZXIzTkZqMG5qQXBOVElxZnpveG03dkFDcURNa2FwcExYblpsdUltMURkK3hTRVNZU0N3YzFHalhLNHB4UDgyaUt6cFYrb3V1dlZJSXpvWjZRbmhhb3VTRkFIMlVHNzZYUkhLM0JsMytLV0RLMmNUTHR5WnFIQXZxaWtDVzJOUDhPMkF6L1MrSlE4NE95L0pjVXk1UG9OK0o1NmpMS1gzaVJtVjhiT3BZNHZKN0lPbitBWkcvNjNTV3puazU2KzBmNkpEeHJDT2thUlNVck1GT2hleVJaR1Y5STlZaXZ4d2xma0d1ek9yZW9YUUhiNDROMWFNNWVBNjNsK1RqQWxWNUcvdGRFTHhlMWdobDhPMzRWTnE1bmdJTHQ5ekJWVHJMSFBjL1pZSWJlcEFmaWdjamFFRllDcmdBNDlpOUlDZHFGUFg1dCt2S0lWbHBDTUpBUkl6K0NwcFlLWG9KOWovOFhFVXAzKzNWVG5Na0E3S25IcW94MjdCbEptNlVhbStFYm00aTRDQWpqMlZTRE1kV3lxa0p3dTlURDRUUDU5VzR0L1ZUZFJjVWltSEtzbnE4TmEvZ0FkejVmWHNoYUx3dUxJSTdZOTZHMWdwWnBMU2FFdTZrZTFBTGxEM1ZOMjlPNUV5MWxSOWswR2ZlZWtkWWtXd1BULzRoanJtSjN4Ri9pNlR4d2RoSkJaUDRYaUhBelBOMEZ3Mm4vR2dtTTd6cjJCTVZQNVVKcTJHSlptZUExUmlXZi9wektUdCtPOVpZNnRwNmg2TU04Z05SZ3hRZGFKaGtKTmZYNHV0MUc1dlVJVFV4OTNkSzZ5M0FZcSs0bkJwV01tVHlxQldGSUlxQzd6dEF1OW54OEJ4US9hVyszTVFIR2RyR3QyRUNsOW5BZ1ZVWVRrSXdXWGxEQXR5ZVpweFcrTkwyOEtBNWpTY3JLbUdBRUZ4UXRqdGViUVZwQmlQcVcwYitOaFBGdUZJdzJZQkFsWEdXZFNJN3ZVOFZySWw0MUo3eUU5bFNTK2dDaS9GMHFQaWVXK29jSngrUGtGWE0vT3JCOTFOQUE5YmpqNjBlcHBweVRRRzQya2FJTlViL1lsZmptdSt2TC94RVdtSXlRWTFKdHlzZkUwdnAyV285WEl0eWFBZDhKZkNpS1JOOFlFRWdxUlhEblNhMmJ5YXF6Nlk2SlNDc2luRHdwMVJYbGFnekpoOTY5ZFNYb3h1aCszNXlvTlpQeEdodFp3Q2Mzd3dWZE43MXYra0pCL0twYm1BUTZxOHBqVXQwOUUremhWWU9OZWZwNnl5aUdXUzVJVTc1WStvT00wUWM5SCtNc1EwaEFVNTVaOUs0VUdRTzd6NDJyUjJpemYrZFFkb2JDc3FjRWhhcXZwemprNG1HQ1ZrN3daM3UyM3RrUXFhTzlVY042WSs1N3Y0ME1wZDliTk50N0JNMDNkM2ZtWTJCSTRCdTM0SDkxcWxlQi9aeVVIVWxoRWpubU9SZFVtaWpvNmh1a3JsY0djUWNDN1FzLzllcmVRZzNtWSs2YXpzcU15aXcrTTJJL200aHBGMU55R1Y2VGM1dUlwVkcvczN6OFNxSWJseGVKclNjOTI0NkhUcGFPMEVFRGdRSnFPZFpEUmt2VUZnVTgwdzVRdVRCSWFGeW1SNS8vZUVCSkIvME82MHJmcXBCclZLSHlYY3VGWk8ydXFTMnYrTHFOYThaZ2ZxYnRWOWJ1SlJXSnlrTzczWGFYbHU3L1Byek14V0d5bE5PR3YxN2RleUc0dUwrbG53M3NNazZPS0JYR3VUY2hCcWFIL2NIcXE1NkZaY3hheVJDVjJQOEl6cVJUUGtuTSttYXBmTTRsU1lsRUlRMk5pNmYwQisrQkY0bzhlQnB4VXExSXZaaXRJclZMZnZNaVdIL3R1dVBoRlFlOFNIYlM4c2hlMmQ2cTFXRUtpYk9MSllzUjE2eTR0eVNJQUNNQmJJRU5Yb0t4R1lFWnpIZEtOeVFUS1BrdHJqRE05Yk9vWUw4RVlOYUdiMzFocEtZc1FzQ2pUY2crbThRVEpueWJsUG9rT05Wc3hzcEpNMDZJZ3VZcHJQbDhYdWdScW9SREdGeE4rSGJiODN1YmtIYmNVWjhuRmtTNUpvcDBYY1BqRDFJaTB2VDUrakI3Q2pIQTBOc0NxL0pyN0ZrNlRaTUhreUY3N3dxVS9BOFlkbjBHTFcxWWc4WUVPUEFFdGR5a0xpSWJKQjZ0UGVlVVZrU3dTQ3N3QnZTY0dkYk1tSW1lbnE1MHE2M3BkK2ZTc2lidlgyd1ZKUU1neDhSYUZpYWoxcGlHYUxDS0Yyb3BiR2FTbmkzQnlVaFlnNncyV0U1cWZVaUJ6OHpBeXlMTjJJbWs4L2xZZzNWK1JxY2YxL0p1UHZWL0tsd2g1a0JBbUxUWjBycFVEZExKNlNDS3JvTEJOQ2VmQzJXdW9CSCtFSDVhOEExREdxZERsaDZEdG01dHhTQkZvUkNCdElLRUJIY29zN3lWNzVoSEE1dzBpUXIrNFdiejl4NHhwQkZQNFlmWERvV2FRQTdrQk1oaWtFckxCVVR5UTFlTVZNQzVJNnV0aWNPUHVYVW0waWlJUzJRaVU0WGlSVXFxRmJaR1JybU1iWnBXSDhXQWQyZldmdWVWRDRzcWxkMFRoa096SWtoc3QreS83S1owaWVzWkJrN0ZhNVA2dk5jSnkydDVpK2N3cXlKUXpVYTMzRUlnMEVzSDRQRXIycVdqNHk1MTRWRlVqQnlJSVpWZWc0SE9qS1N0VUNsWlhmakppZTFDSUZPN0ljbDFEcWcrNEhjT3BZbDdMSUt0OGtuazJLeHM5ZFdReDJSS0lpWTlxQlpkN3BoQklrNnBGb3VoekZBeXpPbkZsSEErblR4ZElKeUZlZW5ETDgvVmtjS1JhWlgvQnpMMDI2eU94dStEdHJmVjQ1bG1zTG9ob3VHS0tia3FyYXRDWmk4NlpFa3BpYkQ5TVU3Znh5Nk9ucllxVlVxTDg0dkVQM1FXU1ArSUtRbjc4alcvRzJjNTduTnFUVVZ3WHNWY3YzcXYvWitKY1dHTmE4SW93K3Vpc1BTSEdDTGI4cGQ4ZDlFa2VzLzJqanJqYlA0WmVnc0RLazU0SE95QzhvaDBpdG42L2xpKys3WmNkOVpVRGpxZ0dwUGVDRnNlT3c0cjV6SVFMbWxqSndpenVpQmpuK0RnVTVwYjBOYWdPSDFVdW1pL3dKbWJqZjVzaFM4OTluUkNsOFF2OUhjZjNWbEJJSHFNVUo0OHFGcVBDcW1leGkwQWdJTVFEeWlFSGN2ajZWUWJqRG0zeUJ6dU9nV0hUZUhLQVdTSVo4ZTFPdkNIdmRhVnpPbFBIR2dnNE5KTGVKRjY0MkNtL3p5RWVwZ2VERVIyeDZRQXQ0WWZOdTh5djF4bjdVcDBSczZBaitnRXJHeFVldy9scy9EaGpmWExqcTVJOHZ0cXo0UTdWbW5VVVJaOVU5cElPWnZNMW5DQ3luaC9MdU9nNVlMTldabVBtajZvSEpUZVpiZjhyN01OWVJyMzJYY3JFUHFUNjVOMlVBVnZkRFRwSjBySGV2b1hqYVozcWgweXhMTVB3MG54RVFqV2dvS1Fla0pzdDI0TFRpZzg3TGFDZHEyUzVadzFqQmxnOHgzcDFOVld3V0lLa01mbEFvQ3Vib3hEdHdSWENkaThwNUc4SURKTzRObTJxc3RnUGZjMG52T3plNlNCakZRUllxMGpuaTR5TVlNMmJOaHgvT0FOY0FZYmplWkxVek1QQk9Pby9NdkNjN0JuTUVDZ0FXbjR0SVJGdEY4MHVncENvdDl6b3BVSVpCU2VPNWFvalBrMnJDd0JLdW01cWZFZFhNekI5TU5zTUU1MWJDS0x6U3lEWjVpRHIzTGxTc3hUenAzZWNZcW4venNzUlBGVnBsYmVDU05YR29CZGRvOCszVUxJQS85Mm9Mdm4vbEhUdk5uYzlaaTVrM1JMWmo2empGUG9jNkdLZkxWRHo4VFJyY3JDUWM0SWQxRThyOUVxTzRMaWRwdEg4L29ubnQ3L0JzM3pIZ2lyMGptNkZWUkMzWTVFcFhqYUF4YkhkUlFuYTZrVTJpTmVTNWd5U0Y3QXF0OENjU1dNanRqL0xmSk1QTHBCZ2FoSGRIUmw0c1Q0L2JMK2w5YTlGUmxEc0pnS3VIeVZ2b1VldUEyaWQ3bmt1STBCT1JwTStlN1IybExLUnU2ZEkxTnFLT3FVUUZYQmFsb2NkRHBNOXhaaVB0eVBJd0RZa2E4M01FcFNsajhLWDllS2llMmlWMHBUd2RGNVhOT04xWVVJc091dkIydEN3UVNtengwUFFuMGlQSG04UjJKSHd0KzYxL1U2dUQxRktucXhxdGttN3g1ajAxZkJibTIwUTZCSFQxZC9LMWl3dWR5N1JBd1NENHIzd1BDR0FCZW8rTnQ1dGRLcis5cGEyVk5GZmZLV0lidGZhRnJtQzNGVDZMb05DSzJDbFFLbmlYRzZTMUFDUUh4dWlza3RhSUcycEIzUjhkZWVNL09mM01GYlpDeHAxa2p5Zzd1Zm9PUnh1ZEJIS3krNlZQc1VsQzljdE5mdEJEaFJnOEQ1TTVKS0tHWXFURjJRVFhDZ3FBY3AxTTM1ZXdKaFIxanNTWXBPQjk5ZjZwa1A5TUs0K1pKSEp1T3NZNW5PUTBQVi9DVkFORFR6Yy9vZk11ajVIQllOVk5aOXRPL0txRCtwNXMzL01nOUJnTEJQTVlGNWNxTkVSMFpxOUlSbE5QTUk3bUNLcXowWFMySWlNVjBsY3JCVlpyWnhqZXhSSEtZQmxxOUZYeGh2b1J3TnN2UXJJV0FuV1I3akQzQTZBSklOY1BIM05FY2NEQTY3SnVnY2ZCM2tYdGU2aDFsc3lON2ROKzVCRGZhbVNuMVBJM0FWeFc2c0JnVWdJNG0xb2hRNFVrV1ArSUJURWh6NXR4WS9jeFZjVW84WVErT05welQyUzk3VDgwYUZvWnpqV2pDL2Vld3NxbzExMkE2K1l2QldYdGc4UnVTUEZ4SUNXa2ZmMXFTeFArb2FnWEVpWTVreDJBWDlENVAzMGpRMHNocGJKc2xyNUIrRkRPQmJxcm9JdTY3MTQ0WkpZdXpaN1dveE53Vi95UGRsaWJ4ejZHTzNkektVVnVDTDVCbFVJUmoyQ0RmNzZyUWNkOUVsWUtvWmJmOVJ6UWg3bC9KM1hDRVNWaE1iMW83V1BTakNKYzVNbldzdlhTbGNuZ0VCakZ3MFAzbVNsNnNHYnFWcmFnWHczOXVtbkxOblYzTWU1UG1GOW8wWWNsL0VTSjFucHdHM3Vka20zcHl6d3BjNFkwaWZva2NBc0xGTTdrUXppRTFNNHVNMFhjSTVheTVCekorUDRRRGJlOUMrTm5vTVZiZldFc2tDaUJnNlpUdi9aWHBIeElMZElZMjdSV080T0xYWU1lWXB1Nmt4RGJ3dEZiWUNJRWJlUFgvTkZpV0o1VmJKbTlRa24zY0tKRUpqb0RmNEcwaUE5YlNPcWdTaEl1WUgrZzhDSnRReGRtUGJnaEdmOUJIeVRDTWUwa2d3T1JVMy9JYVJDZGRPMlFocDNMV2RFT2VWY05tdzFZOXhQOFZlUGVMK1RXSS9zL1JmN3hrTW8yNjJYWVNGUFJkQmU0UlNFLzZiUStXV24vcnU1K2t6Q21hNjR3VlJhSEYxN1FCelJocEMwK3dnRmZLcFZHaXBWMTFoQmRSZ2xMdnBFdnlMOVBvN0tuRDlWaUdxSk9sdWh5enhDNkgxeEhDYVlWbzMzNFhyRnlXQzNXcnJYdVQ5OHZTUGNiNjhrM1l3SnB1YTlLODg2bDhiN2JPcEpuM3N5aWE4VnVwQldycXZDa2NrcDcvYVRlUVhQK1lNQjNWbFdmTEVRV2EyekIwZFdVUVRydDlCODZucjE0ZStEcUI2bEJmL2FFeExhTmZlQVlYaE9UWk9QWGlXYzdvVW5Rck14RTR0Y28xa3AwNW8wemI1SUdJK2w3SG1xbTYwNFZpYkJSL2dva094NWt0dkZPMG5PUXYxMXI3MGxyS3prOXVxUlFRSDBGLzI1NEZyVUxRUWpXbHBVa3RjaEdGbkZsVmtONVZsQ0pDMzJFSEUyOXBjQVc0T01ncHZoWHlKQ1BRYm9XL1B0ZUNYNmpIT09mOUIxL1M0M202d1ZZUGFlNzM2QUlxS1dCbU13blBSaUhrOG5Ed1NvV0krVDVMaHN2TkRCRnJpTkJOUFJISVRmQm5QZ2ozMXRrSVNTTldWOGFjN3A0V2R2VmxlYVU5Nm5zN1dXVHNoSktjYWZpakZMcEt2TURuSjM0UE9qWDR3NEhwV0tCZDJvdWxkL2J1Z001dFVxaE03djRmdVJtbzBVcjRyNEc0eUVKQkV4bmNHTDU0VGlJQTJxOFRUbEI2dEMyM2RjZUtramp4RmdZdjNKcE1lTUdRUHV3NzE2T1NxNVFYZG1HUWxuU0pqVXhGVks3ZzFyLzFEbjMxTG5pVkZHMEhBTEgrL0tQU1NiSWRtenY3Wktvb29SK0xtSGRSRGlBdzNFc3RNdXd4VVpnSDlRRnF5bW5oelFsRVM0L00zT3JGanVvd2hrRXdqVENvd0NvY1ZEa0FCQit6MjVqSUdROUpQZkZoTEkwNmhLQWNvMFc3MUZLRlZDaS9pOGpnRDU0aE04a2tycTg3L0trRzJCQUNjb01CUEpHSngwL3c2ell2eS9MeE9MNHJlOFl3N2Y5YmhvUk5YR3kyMnM2QXZEZUMxZTJ6SDczb05XMUQzUTdaODJWVlFwWjdHM2pLQWRjL1ByVVFGNmtVYVB2Sm9RejBoWmRNTDU3aWxtVWordmN4UUkwOHZFblZ3U3B5Wjl5SjBFTkhwMWN3SmFxN2hCRTJRN0NIQVlqQkd0b3dkVFd4dEl5N0RjTlMzVFNJdnBLc1JGV2NtYnovOUdLQ1pWY3NMTGNEUXM3WEp1Y2V5bnR4WW95YUNIN0IrYS8yVjB1RlAzTm9lQ2RVNFFsWDFmYmZ2SDVyRlJiV0k2STFGRERDNWFjalFIUURmUnV4VnF1WFlIN2dWUWpVVVBITUxRYVUrUVplSjBXcHAzOERtV3JscXVOQ1NoT05YTEl4bjRIRjNXTTA2NWJoMkpQTFoxbC9oMzg1T1A2MXRwb1FRd0tFOHltZW5mVE9YMWtJM1Y4d2xEZVMzU21sTWoxaXNQblowaldZS3F3Tnh5bGYxdUFUcmZtUjl0L3hUaVNNdlRSUWhQcnZkY01zYVFGQkdKbmJ6eHdYcFVibnQ3WUNrWVNXWkczM0R2SEs1WExIOVNhYW50NlJacTc0c2owN2xER1grb2ZuVEpJMTZNalVxbjhNSVFmRXNMTEs4YmF6RTBvZTA0WnVITHVDcDFzempTaTZHWEZpTStRTGNMWnZhTkc3eit4VHBOM21sOGIxOHRwZ0c5aVphT1pBeEF4UFRuVHpHbzc5aVNhMjkxdHFyaEd3c2tBNGt5cGUvOG1kdUNHS2JwdGhYR2dSOUpuS0tpeDVCWDNZU2FsdEFhWW1Kc04yMmFOVDFBOEVZL1YzeFp2MXVNc2cyN2RJa0NJb25rTEg2K0JYSEtPYVMvU2JZZW9rUG1va2JHZythcXBHcnBSaDN1R1dUREJ6ejBJOTR3NHovV1RiN1RMN3ZpZXVpVER3YjZwbEUzRVBvc0lMZ3ZmNXJSd09senNycXJRa0F4UW9lbDdzbmJKWnl6NjR3dW0zZXZmS0xEc3VnTWpjV01NOTIySGZ2d0VKOGRTZTZTVnArRlphZjhDSHZTYzNTUTFacGlEN2kyUHJjVFNjZUwxYTdpaVZvUmJ5YVNnMUFoV2lqaG1sYkNONzJRYnB2b3BLdERzUUZZWW56V1psR3dPckQ4WVZCekNtcHNuYjBHVjE5NzBTTHR5aXpCdUo0Y09yYjJRdWw5WTMvS0RFL1B4OWk0ZW1vbmZZTGtDMEF5YlZxT3dROS9KL2ZFQTBjTmZLQ2xiSFVOTTRNdktmalBpcWxMTERIOE1wcm9nMGY5WTV4dndsVHlUR2liZ1BLSUt4TlkvcFd2bC9wUXp4VlpYMjFEalNwd2RtaU1TaEt0bWFHVm1IdUxGVndRcGFzcDQveWd6OUhrUUMxZGNsTVdlUU13Y0FwU2Y5c3JXRUdPMzgzMmczb1c1bHNnVUhvaFlzMUpsSjJRYmJZWkpuRnV5K3Q2WTU4djNEbDNNRU9CazVkSmplSjdZYlRNVTZXcjQ1a0hIS3lSSnRQZ1VWUk8xRkwyREdTR2kvSkRXTUYyMERWNlYrY2pQWTVsMVErZStHRjh4dUorbVRGMEVKaTJCYit2Z1UwdEtmaGFaMHNZQmFaR1NFMS8ySEl1YnJEVE9ZeDN4TEwvUVdKNVhjdUY3VGtud2UwVE4zV3BRK2h3cXpvZUlFNCs0aUd4WWMxK2tXYWlCTzE5VEF5WkUxV28yRm1OMHZ0NFJhUTh4bWYvT01mZ1c2SGowZmNLa1RWQUgvWWo5WGdMM3RRcHlFUXg5OU81TVI4WHM4KzB5UDF5Yko3TStxalBRbElpRUh2V3BQaHBYRG44TDlvQXlrZ1ZCMkNOUU1taSsycUY3UUgwUzVRRWZLT2t6MWorM1FkeFVLc01MN0F0WjVtdzNnRnpMVWVPQ0J2TEhEWUd1UGhuc1FnTlhoZmJhcTF4Q3RScWNjSlE4aURsN2ZqWjYyaFlpVVg2bXB5VWdndCtNUXF0K2tYNk1BQTE5SnhBNVBRQjcxeG1DMEpRMTFRZGV3ODRzSlROTUZtcnJhZnJwaTlQU0pnYjgxU3Y0WVZQSU5JRkNaYXY2elo5TU1lUXgrUi9QdkNpVHoyeVZLZmpoYjRvOUxFSEJvZ2RaSlkyenp4VTV6b1YyeTRmNkM2ampkLzdYN2VpeERwR01vKzR4MDFIUGZWQ2hRLy90RXNIUEZxbXhua2FEZGpQVnFnZG5xdUpWTGVWbXBSYzBXcVg0M09XZU5zZVlmaDlxdVZveHVLTFY5V2NxOE15TjB3VmRmUy8zQ24rM1Bid1VobFlYdVprSUJqd1RZeVZjdlBCdkxwQ1ZXd1F4TEYyTzVqU3ZqWEtQdlVQT0pkVldlZWhzL1BWRERTbTVZVmtRMUVGbGVvWDZDanF3YVZ3bFo3ZlY3Y2ZNb3NleHVNSWloNkhwZm4yb0FRK2h5TCtaWVFOYXI2WmgxRGpjY0RNVHFoUlkxZFl2eW1Ndjg5dWs3a0tFNDRqVllST2U0VDVrWU5CSEFPbldBaTF0OGw2OXBFUnZHcVJzVmd2blU0N2UzQ2lqSEdRTUhSRFRqbERZS0NCbFZVajR0TDM4aEE0T05yUE10UXdYc2htTzI1QmhtQ3BZUWE2UlZRS0s2OGdRaVk5bmd5NlJNSzB0elk0Vys2UWYwK1orTkpNSnZRSmMyQjltNE50ZUNwc1RDWkZKVi9aRW9INlhDbFZ4RmVINlJaRzNGOGh2cDJycytNa0lFOHJ1KzE3UXU0R2p6dTYySFlCcFhTMkYvNWZreHZVWG5WZlF5ZnRjVlAzL21iV1B5ejF0QTNyb1dzdmJUWmpoZXg5NTBZd0NtUUVrVUx6U24zUDhnR2haVnZyRm0rYzAzTWhXUmw0YUptbGNHSVlPUnduSWlXOHZIcEFuTVFUWTdub0RIZ3g4Tk02VW1FR1Z0dDdnWS90bTZORzNOQ1Nna00wSUNGQjJxYk9BWURNbGdSSGNCNnIySWdKSTRXbVhrRERmdE1UM0s4M3VVQThtNjVOakoxUktLYy9MK290RndvL1lPakxReHNYc1RxeGFkT3BDTkVhZW5ZVE9jRDNUNDkyUTU3bG16Z24wUVYwcXJPRTh1ZWRWdE9ZOTBENUYyRlp6bTZDVXVkWVIwdWlPdFp2czNHcVkvQ0xFcjdsUWJRMDJJTWNwRXhnc0oxQ25ybnk0TlhJM2pYUWc4aFhhS2dHTm1BMVpRNFdsaFNBT3A1bkc3QkppN0l0ZUxjb0w0eGZKY0trRjJ5aTRJRmFKK2Ftb3ZSYTNNdXVMUzljN09xd2pEQWs1V29hMTBGR0xmNi9uWTVsZ01Gd1pieVB3ZTdnVXFEOWViMEtyWXcrdEhtOGIwMlJFNGlUYS9rU21EU0l0alVJcVlDanNZUkI0b2xMR09mWFFWS2xhQndhYWxuTkIyZ1ZRMFozc0R5d3A3UWpGMmpuZVBoUENXRTV1Rmx2dTJMTC9CaEJlRzI2a0JlWEljMW94djlRRnV2TjJHaG9WM2xmd1VQQkszRTY1Yld2Y0hFZk1taEFxZzhDVkJjT0g5UEkxOEtnUjBkRFFqZUp3b2E2QllMWjhRc1VSOEJ4eXZwb3hpSnYxaFJjWlgyU2FNK0FpYVNKekg5UnhXMi94NUxvVGpYSGlUZm1EVnZvZFM3dXhlWjRldXdzQ1BQNGdQN01HdDkxZ1hvd0x1dy9PYzh6SmhXOE1CUlBFNkZnS1Uzbk5XdFBIdmY3NTdwM2grRDJiK3FVWmtvdm1uQ3RNRDRzMXgyMWs4clhjaVFwbFBMT3hHOGdINTIyRVN1cVZyMkYyZWlPcGM1Ui9IVjIyMmVzM1dsa1pMZmJJTlZFMnYwYXQyeExad1FYWWZKTURlRDBwV1FwQ045U2F5Y0ZVSWQ3bWNSaE8wekNnWkVGOXNDZUgvSEl1RkI2SmtDcUUwT3NpL2lock51b3RBZmY4cmhWVWs5L2xnTzRzSlpjbnljaHpiQUZLT1VZbUozZ2lXalpuRmhJUEdud0d4ckhaeHRyeHR2NlNHeEtJY01hMzE4RXMxVnFqTDZ1cnZ6RkU2a2N0L3phcU5zUnc2YVNzdS8rSWtTOG1jbk9xTzFobHNDYlVINStFcXNDRXJZYlorbTFxdHF2SlVTRWUxWVYrUCtuaEdlNVdxamlXWWwvUmNXQ3d4V3pwOGkya0tQam5Sb2hueFROaFJiQ1YzOGVSczJSeGJUb2JRekt2N2xubGlCUFZGNStSODNKSFh1S1JlbElqQThCeE80TzRGVjhta2QxMjRiSUZyZnBBaXRDWXk3QkQ0Z0pNNjdYY2luN1VIcnlwMm5tb0VaRDlVV1B5elFyM0RpMC9zaUdaenhXMWZObkR1RjhIb3JvMnVvTWhxQVVHMHJKT09YQTVyL2F1eWpvMzcwbWhkWnVnT1RTQ3dZSm1tRVVJMFhpNy8zem9WVGpFUW12MGx3djBXNHFOdnYwa0ozSmxHMmVFZy9wZTk1MllvVjNZb2JaMnRwUGxibGZXekVKYXd0VTNCY1NrUlZlOGJrcGthWVRMUmRSa3RreFM2UVlSUmNNa3ZQWDhHd0R1Ujhjb0gvV2cwdmhpNkh0SmpjTVBzbUVaVFdZU3BzTWxEY1VSOWJLU3ZubDN4Mnh6NUpBZ3ZCVXBNb05vaE51SzNtTys5d0dYY0VkT3hzVmFrRFBhb0RrTC9JTkhjN3JLQmVTdFlHc0w4RnpkMUkybXdQNFdaTk9XQktFNUJiUXVpS3BpYUdIZXhJbjludFI5R3BZaDBuTWMrNHlPaTllSElWQUJ3eTZGVE5TS0RvTVdSZTFXTTNrUWhrTStpb0JXWC9Bd2pUR0srUXBPM0wxUkdUakVkOUdLU1JPWUpUb0UwWGliczE0amJEMTM2dFlJbGdEcWtGUlI1TlZqSHovMHpUelZvRFU4ODlyaTlIeUNRWmpTV3lRRm9CSXdxc212eXdGR2c3cW1penpNTG1TTmVrb3FSNlM0dTFia3F2M1pLZVpRK1VaNHFleGhPaW9xTXlGS1dBRkNGSjA0c0dzbHJqbzNXN1FyUGdreEZldDNhenp0U1JOTkxHejQ4c0hpOE5ZR3kxei9XbEtoMFpMdnhvNmNOVHMybStFV2tVc1FWb0JCNFpoU0NxcTNJZEhHYjJPTjZtSzZwWmsrd1F6cWRNRG9FVjZjdlJiVThoMkdTVUp2N3VpSW1uU3hFdlltVmM3NFd1S3dPY0dYYXNkZ2RBMzFoTkxPdkNKOG5Wam9vTTVXODUyYkV0dHVEckwrWERaNVJnby9QZmN0bDdXS1Z3SktNZUt3SW5pYTFjRDhaRU01YXdRWjlBQjUvNzBrS3MyRW5yYTJSUlJmOVpiT2RNMmdjTjVmWlJSNzJnMjI0SzlCYTBUcEtyL1doWDd3QVRQM3Uvd3FDamJzZkhHWkZ6NWg5cWxhdy9OWjA0bnJrZDJhUGJlbFhVeEdrbGttamQ1QXNGRVJRYkI3a0dhemJKSEZ6VW1rcXZMK3VNRy9Yb2RpaElwaWFnUngxWmIvMnZaQlBudzh0bVIwU2RTekdTTDF0eWdVYWF5ZGV5NEZrYWVDYjl1c2s1QklVSkQrOEhIdU5taXlpK3ExRnFqUnJKcGRmRU9vWmhQTEVMcHRKa3VuWnYxL3JJREdzNzhMVnZCR3d4TDJVL0NsaE90dE5HOGxJOVk2cDdDMzdPdW03TE9GU1oyVitpN0t5L2JHUWYvMjNvclJqQ1hqK1ZtRk80WG4vV2JGSjZDOUZRNVRUcXQvTWZ0SGpOQm9uTEdOVXliOEdhSkJEaXJTaHFRN0NtODBEekxiaVo3em9VYXQ1K2lzeGhPRW8weFkxdlFpTW1PMkJHTHFkM1BLd3Z6RkF5eUYvSzEwWFdKMUZnS3BjVEFFbHYzSCs0TkUvMWZFQ0lmTkUyNUgrQkw4MHRtODYzbDRKZ0Z4azA5TlN4RXlzYVpKT1lkY2lKMUFPK2xQcnRWZzFvckhTdjg3U3N0VHBzN0ljcHpsbXhqQmJvMjdUUGtXZ0UxVWM2b3VPMHVYcFFwSFgybEptQWlvQ2k3b1JEaGZXbXpPWHlxTFFuNXpRRHplbW0zcXl0ZWg2WXB2MGtWSTRBaGROV0t6QlhNQU9kb3pwUnhtTmJMV3lnb0xVSStvMmtNTUJ3djJ6eE5taHdTZTZjaFRxalhjOWpVKzVnZSsvT2o3bDlTTUYvVS81bm9tdmdqNkovWWVGRXhud3hzQTZ6L1ZmR1dIeTlIYWRTZkpLalhGVkorUFFXVUxJTS9pcDM3bElpckJYckdnVDhMSTk2M2xaUE9DT2YxNytQdWF2VzZPY0srWlBPY29zRktRTmMvZ2V1NkFiL2ZaZzRNMzcrZFVuUFBNT09ETEVJcWFSZHNITnVWVnQvTFk3TTVYMlAzU2J5aGpJb3RlZjFnUjJNREZaZGJmVEdEM2JoSmdxekFJWDlPWnZiVmU2MkltWk40SXhsaHAyYTJNNCsveFl1aVpBdktDbXlYeHBpOWY5RDcyYm93bCs4a2prdTgxSG5iZWhMa3dmVFJlbVY4MENQM0FnWktVMklOdzJmT0lnNG14VDIra0cyNzlLK1IrSlZMSG5wc2U5MnVtSVdzWVpvM0d6TENkMXo4SisvY296R3d0U0hwYnluM1ZXL3V0OWlNMndLL1dyWkVBMDgzdGpzVmV5Rm1SUjl1T0tFTzRldkhuREZqaEt6M3Zidm5vUVg4dEMvNmR3cnBqWUQ3OXpRNGJyREJ2U0JSYlVFK3FsWDEzcjVZTVVzcCs4U0JpaGp6SWNPNXpucXgyMTAycVJnQ2pPcDlvb1piWGI1eGUvQmYvMnpiMTNVS21tSEZodHBtSEsrejBEVy9tbnFUMmFsMUhxM0tmVzN4RnVrT0tJcG5HVC9lSGdld2EzWEhScnUwQi9mNG9XMDFzaHJKZXhjcDdzbG1LQTdvWWI0ZTM3dldUVGUvays1bDRSS3p1YVdWZnN0M0JpM3EvOGZTTUxhdWZMWnVFSEZ2R00zWUhBVElWZzVzZ1hpeVhrUVBGbllaejRFekJyT2xzWjRCUTk4MVRKNHc2cHpaTSswcUt5aFpPYW5jUUhZL2grcEcvODlXaWtzZ0ZpR0ZQY0hZTnRaT2dpcUNDSVJSVEdEUXYwWVJaeVp0cmkxYkxyOGRaYXBpVFV3SkNXZFEvb2FsY09NaVdoRC9wbWdkVnMySjhrWFhvT3IrUUR5VnhDVkwwcHlUZnZTdmdvSUxnR1lEQk9yanNSZGs0MWN4TXpuSVNtTCtHR1VvNGQ5TUdURDBPVmZpaUo4c0hNYzh3MDJmUGpWcitFdURoQndHMzZJWHJxYUZWMElKaDV3YloxOXQ1OFlmUkJKVkRrRDZxT1ArU25HSWxSSUFtTzVYMHo2SnRkM084Y28xYysrdHVObUtFS0dvY2lNMlZxdWZDRlNMcE9UMzEvTkg4NjJlNEw5ZG5iYUs4ZG9RbHVEajZaYUhjbkZHYUsvckozM25paVFJdFhXRGE3TmhhcHlVdFYveHhCNXZnVTVWUk10TkFUN2hBM0RtVDlIME9rMU1LdDQrck9qdVk0R0dxaXFWeDIxVXQwT0RhZkNWTHp6T0trckRscW9OdjZsbWJNd3pyVGFvbEI5TzNLOG5YdU5PcHZZaHBnb1QvQy83bHhUNDBVSDk0ZG0vT1IrZzdhSFpwM0g2MFg1MTlTbFpFdFduWnEzVXlsamI0c0N6TE5xbmlXcWxLTEhIemRsLzNFRDAvS3krV0VkUmFmNHFVSlJaMU1NVzN4RUR2Um05RG0rL0N3YTc4bkNsdUtCR1k4cUhXY2VOUTdEME9rZ00xZm1uOVVjV05SSEpaT1dUVUwvR01qbVRjY2d5a0p5THVVdlQ2QTlwNFhaUDRsajRtdFU1a2JpSjlVZzFMS3BpZDVHVjhzeGlkK0wvT2tYRlFIRlVtaXdBY1VteS9SQXo4THVrbWFFdDVTTko5Ym9BUlM5aGZyL1VDRlZRREpMSUhhREFGb1Eva3pHVWpJUUgzSTdpV1ZlSHB6Q3dGdFIvVWlJY2hsSTJSek4rQm1za0hVcm1qS2UxQ0c1bngrYXNndG51T0tTVjVoOE4xMTZZZlc2NENLdk5CanptSkMrM0NydHRGbEZ4NWg1RjdRd21zQjZyRTNGeTBra3hVdmtqR0owZDlPd082SGNHU1VPQklwQXV3UjRHd3l1U2dOK0RqNDZBN0xOa0tQcjNaTzluZFYxak5LU3JRSndBalF1NmlIL0JyVTJoeGcvdnV0SlRkQXpGcGVXUmdGVjEvQ1BsdHFja2xhMkx2SWtFYk9IbGNKWlFLRXI0VWxYOUNOMzNlS0JQTEV5V3haN2Y0THNnT0ZKa0xVT1NubkFpRXVoN2ZBN0lqaVdac1I1aWxVYTNzcWovangzejB6WVM4SEh2d1pmUXVXVmV6anNmRitXUVlXVnM0YWpYeDR0L21BQ2hDRXRwM0RNeVlPeHlJRmlWaW83NWFENzNyVWR2L1pQajJOQm1CZDhVR29NVDhXV0xOQmVSQzNMOXVZTnFrdDZpa0hlSnlRZkJxMlkrVTNCZU40Y2E5cDQ2bVllbVFZKzlQdTJlQVlPcUZGdFc3a256REFwRHlWVHFtTnJwSGErUFUvTWJybDVPU05RTWJNV0hxZ3pTQ1dzMFhNSU5IWUdEVk1kSEVDSVZGa2txK3YrTDBmRlVVNks5eGNnNmRzN0EvOXp2TlBKUEMxNDhKRFNXWWMwLzF0Z0MrRnhtZVlKRERqWmlFN0t6R0kxWmI5V3lWYkEyNCtFRVdVV1FORnNIbTN4RUdWQTd6ajRmNG54ZkQ2SmNhN1dsTE9JOEJtOTc4SzcvdHRabXRhY01wT1FjL2RGUzNrRllEbGhhVEpZTGZBWE5CeHJuZVRUdDVJckRYVGhHWkQvVHErWWJMNm14NzZhRWNaNTU0ZkhFdURna0YzaDBxSUx5M0pLQWtTdExTTEtSTno5Ylg4Uzh3U1ZMRk1ES0NoOXJNeTh0RlI1ZmxhQnpQR1pLL1FNdEZUTFV4WSsrZXpFQUNjUm02Y2pEUmd5TTc3SGZabXpEK2FEQjlSRDJFSStsSDNOZnJRc3l1QzJScFFieWhOdzJ6eWV5MWZzRUxKcTJiZWJzcmo5V2c5bjBiOGtUU2YwNWtGdWtBY0xucVRxOTdEc0QzeHlnRzBKNDdvOXp5TmR0ckxkZSsybmtSRWE5QXRqQWxNTjBUSnBhbDVrNkhUZHhObzZJY2lwRTNXSzl0QjZoVWR0Rk5DZkhPOFVlQS91NCt0N05LNmxacUxrRE5hczR4Mnh5TnRBQklTdkozZHpVbUlDa2xWbVZPWnZCUXhXWHFSSnV6K2Y1ZGU2cjdLY2llOVQ4VEg4U1ZoSE9KcWNNN2k4RDJuMW9FRWFPOHBkK2h0REw2YW5PWVBhcFgrRGpaMzA2M00ySDkwaDF6aStyQXY5RXh6OU0xWEcvMWxKaVZPb0dFUDdKemx1NXMrb3Fsa0cwRklqOE90Zk5DdFZ4M2Z3T05vNFZXaUh6blRUTFZjaGdPRzVLai9TdWN4YU9iRnkxaUVyV3Y5dUJJZnp3L1AwY1VITlJhRE9RUTkrd01DTjltdjJVZ2ZZQ1NLejFXQU1Kb3Y2bE1CQ2xBc1RDQWY5UlV3WUdIRS80dk85eTNtRnlvTkR1c29yL3VQVVVLM2RKSEVEUDZWR2s5bStUVTRzdkV5dnU2c0hndjQ0Y3AvcWlTeFVCZFl4NGYzTnhQT2ZuUnMra1Uxd2ZFYTJXdWUyQVZCNU0ydy9IcTVmTCtZRXNUU0Evc2hYWGlSMUY3bUlpZXR3YXBRRUlqY09XQXV4RlZJcUNqN0hTa1FrdS8wbkNMZlEwVWJMVmJ1eUZPcjV5bzNOUWVOcHE0d1hYMEhpS3F5b3JLRHBsR3FQK0VyTHpseXRjTy9SQjVnY0RqM2ZXQzNRdUdPRERNd1RVVmRBQkswZklkV0RrcDlrUk9nUTFJVnJnbHlYQTRQVzRxUXZLdHNqOUtOSHdvTWM3emNhUmhxRHVIRUNoSlZZQVY3Uno2dWQyRndsemkxMXR5b2ZBd3IvVWpCOVI3NjcxaGdtNGZsSGo2b29EaXpsZnorQXVWSjAwempVbWI0bFRwY0RXOFpRUkRVNEdDTzJCWEdSL3d6NU8rdFRkNDJTdDc5VzZESVRWaWVUMXNpbFNWNk5oRU9RUXdBU1pWSldTSW0zQjR6U3A4WU4xYTZBcXVCZ0pzcXNha0hVOFZFdVZGWUtKaVNOUjFkYlF2TjN6ZmJUVENibDNudkYveUNua3hrR0VpencrMWdESXdGZ3lrcnV5bzJhdzBtb3R1TjhTeEFaNVppUWVRMGp1dXlqbHBmdW5CNEpOSVpqNWtaMkV5L1lLa0F5YUF1T20zNi9vUXkrV2YzempNZVIzZXI3NS9GYytTTnk4aE9ybmpES2M3RGxJMTMreitLYWRYNXZzeDh4NEdXTXNVY0Z4SjFwV1ltS0tPRlRTdkI4N1hLSmkzZUhsS20xZUVkSXVDVGJ0K0JlKy9qZTBTcFQ1UElEWDI5SU9FaW04MmgwUlR0Z3A0SENTcExMZFZTU2ZZZUUrN1Vub1UwSG9iOENkb3lRTjF0cTJsaEJMa2xKcGVTN1ROTkM4TW5OcmlNand3RmJFbUdBK2R1V3diOTIrZTJ5WEczb1l1dzE3b2tyZlY3QldYSHZwYnZpY2NZNWFNbTFYUzRhaDJBVGcveWt3aW9iUkJLL2dsQ0g1UEpOMjl3cVJYSWdOamhLWHlCMklRSEEzWFV2bWVtSFp2bWM3bkxRQkk3d0lJeDFkUVMzRXQ5aHhiaDBBcFBlRWZ5WXdqWE4xdmtJdTAvNWJZa3dhRjI2WVBoblhiZ3I3UXlMV2lzK1RMcng1K2UwLzJybHVkenJ0cDdRQmdENHNUbUhtQWVBTFE4ejVwcWI1a1ZrV2NpMWNOK012bFh0Z1BWRHhMMTdseTlNWGJLOThiL2l4WnRWVjZqR3Rud3NVcmRESFJXMVpnOE1GTXlPUW9TZmhaSW9ScytTeWw3QVRpQ0RWbVBUSGhacS9zWE5mNTZpYlNiYVBmaGs3dUsxZVpxaGdDSExTeDJoVVlNWWJJeGV1SXJmRXdYK3lKUmx1Y0huNHdaVlZySVNwUlFXaWI3V01TbjVXazZ6WnEyN2JLSXlnSDNURURRQTlreW9QUVB1Qzd5MlV6eVNtK1B5NFRFL1Q0cHROMGlpdENMMUt6UklSRGtFb0JOQ1R2S29tY2lOcDdic01ZeU1jZWo2dVBVMHJWVUhJYjVFUFZVWk9JUVhMdHJZSkV5Z3FRcmdWbFB4YVcydEZydldnNVl6cU45blFPM2YyOTJheFBST0haRjc4NHNjaVNhekdzQlcwZFVyUTFSdnJ0QnpTL2hScmFvbk91ditoMldBQW1ZTVF1UmF2T0dqRXFPdWhzcm5weVR1bVhqSklxVHNDdVJTQnRYVDFkR3pSMGdkQWt4M3NyMnJ4cFNvNmxZVmxuVXJYOW9MZm9tUEdzYWx3dzVyZ2V0VEtxeUZEZ0I3V3daSmlOdXBWK3N5T2FHUEFWV29xZzdJL2VRamt4SzU4NjNVM1duU2xUMUVJblRxWTBmZEhYY0xyalVIb0RodUl5TXJ3d2QzWEQzUDNZdm9HNXhPN2grMlpVRC9Bc1dycm9aU2xQYlp3TFpUUkU4OHdDdEdmWStkWUs5ZjVXL1AzQ3lOYVFUZVdsWDRNZmQ2bU9oTm5HYVVCRnM0WWRwdDR3RTFlUHdEUW8wZk9NRWpWUk02NmZVZjJiMGp2amthelJEYVFYai9WRDNuZk5iMGVpK0ZZQlVKYU1rSnlmMGtUMFJQNXd4ZXd2emVCanArWG5oZElJTEZjTzNxeGhoOHpGZDI0dTRZRk9OTXM0dU9Tak4rUXczYUswb0p2S3plT3V5bmZIdEtTK3NPTVJMZEQ1aW91NTRNWDd6U1RNQXVaeTBnTEd3d3hXbHVDWVB2RlBaaEx5NDlRMWw0M1Z5Q0ZubWs5enZqUlZldVBnT3B0M1NNcjJQcUxqRkpLRjZGZWRXRkRGTzZYN1VmRDlxL1REcFB4V1lYVExaRytCN0gxS0lzanMzcXlKWEdQanlBYjJrQ0ljbG1sQVN5a25zSlJLUit1SWVvdzFGWnNuRGxOVnNGa0xlOEFYcXM0Ujdjb0dScm9IaWhFcU1ONVMwelc0dVBDNGxoVm1Ed2JPUXRSdnFySzh1RklFQURvT2RGL3pkMGFCZDduSDB6WkZkeGdDU3plRTF4d3ZBa2hPSVFqTEsxcFNBc2VKNytZNWtod1EyZGZYMTV4bjFhaTU2dlhZYVNRUVNoakxuT1FaYk5NdUxiY3ZYeUlxZ0NzZEpaWHBIN1d6bnZYTHovVzFyR0xUT3NVdkZWUlNORmxvdCs4Tk1PNmZRdkVLWGZPdnNzUzdrSHloMlZCaDR0Ry9tekNQMXZhTG42Y3RncGxXd3hLdFA3Mmo3VDBOQTkrMGQ5bVRXckJ0eUQrT3huTklkRGZQRnVULzhUZVEzQUJIMEtrVHFocDFFKy93akY5VThVOWdZSjZodlVIMEx5SXoxUXBrUXBMLzZia1QxL2l3Mi96QWlZY0hMSXhzUVlzd2cyN0g2TzdHY1poY0NJTFBaUE1zVjNaVmduVXJad3JkNU1obDFrbFNpTm9BYWhQemp0cGVsSGJyUGZmYTZsUHdyZS91bXpzU1VmNmxJaVJibkdGOWNGNVNHaTdYRVdpUWdOc280VE5sUGtRMHJZVC94SWRSUnUxMy9IbVM0TG04N2E0WVdRVi9iZS8xdktZK3U4cUFXQlVDTnhvZzZ4OUdwQThScnZVN1BFTWNOSE8xZUduclBaQmJoajZCY200RTF1akhlMERKczhwL2NoSGlmUFJsdHljYzR3eHQ2TFMvWmJQODlJTWZxbUFXTi9XSE9TTTFHbWZKa0tkZ1A5cVBGSVlzSS9qTS8xSFIxSk8vck1XeE5VejNhS29EdjF1QmZ5ZFZ1aDZteE1KbkRQWlVVSEhrZ2pXbVZCbGNKeWdBZGlZckd0SlRnUEdHSjR5cmQ1eGsxbXBEQ0pyVGpkS1laeG5jSzBSeFF0eC9zcXhNcUltU3RMc2VOTmhLUWR3SkF5aGk3Y1doUFd4ajlzTGNmRHBoYTRnTUZoQ2kzeVJldWc3bWNwNGNJNmxXTzBMT1FGeWlMU2h4TGlOTlNabWYzZVN3YUtRejF1VlN0TG1yRXVKREI1OHBWL2Y3R2lHeFNQejR4ek9GM3BxV3NreUQ2TG9ZMHkxempBWWFUZWJKcERPN0pXNXhUUmJjVDRBd1ZGY1dCVWZaVWo1NjM5L25aV2lyajJWS0x1WEVTc01iWmZGcmROd1VxcWE4NHJqVW0xUUswTUJON1NxaEN6OUYrY2R6elhrZ3JjODZaRFcxN2pTclo0WDJ2OFI5U0lzOUlJVFoxR1ZOSGh0ZU5VRmsrK3JubUdLMlozTHJCWnl1MUhSZnE4YkJqS0NVUW1td1k0ZEtNTWNnRGtrN3VqN1RvUTdtdU5vSzlhbUNDVExINWdiSy93Mk5lZ09Cd1hZNFdjWXVPVzVlMkZ6bitwU0hRMEk0YlhaOWtzN2hLK1RIV29FZUt6dXBqaTR6a2RqR25ydXY4bkM1RUNwS1hweXZ5dkV4eGdnRlprMSsrZ01XNTBoWURZMGRUWXJrL1pVTFArU085dzZsUXZFSk9VYWtLUkxnOWtHcUU4aGxkbi8yekNjdE9Tb2kxRFlLa0txYVRNRFJIb3JxWWFMbmc2c1hsejRVYkx2cDRwRzU2R09kVUZVYzVaRVVPYkxuekF5K2ErZWZUbERkSVBnZ0tTVk9xTUxFK0V6THNwc3kwTG9tU0xFdlQxVS8xcXQ3Y2liaFdCdDVwNzFVcW8vUngvZzFkTXNyYlVRcTdTd0FmeTY5TFhZcENYd0xKRUlzYWVlRmx4UGpJZkZOM1BNa3lIaXpCMkROcnRQeEJ5UFpGRzdxWkZNWjVqUTdST1d2cElaSGw3T0JKZzRZVHJORDBqcC93NE96bGdaTFd5RHpMN0hFZXlqNTkzdVJvSVFvbTV4OGdpdGhabFMzdVJXV3FZcnV0bFVIOHJJblI5OHlPNEJ5R1FMbzJTUTBncmJvR3pqUTF1bndqU1FpajYyUE5zNXVqdTgrL2dIU0hodGFTWkRkNm9kOWVoYks0dmE3ZFJWL3JuWC9YYUJRS3lQbzVEbG9wN0MvZTZ1aDF6U0xmbGRTMlZJTGdXK1NRdWdlTEJXdURvZ2hKMnJiZHRPdHpTei96N1RkRFY1Sm9TVE42ZFU1Vld4UEFkT0c3V1hFQTV4U09ZQVFXZGZJaGtTZ1dDOHZZWlRTY0RYbFExUnNuRW1GdEdlT0tiSjl1YlRYOFlnYVQ2cGUvZWhySWZGZlBCSzlSOEZqa25OVFovYTRaL0RBY1BnNklIMGNiL2F5M0RVV3JzNzMzTGp5Q2szVEV3T1ZRYTd0QWI1VzZYL0c0N0JLenNxV2lITE4yVTBXZG5adWFqMGluUFNlaE0rVCtVOE9sdXVzNFVScFJQNDM3alFlTHRBV2dVZ2ZCdkowUWM1WXhPTTZ0QnNyWWUxa3NMMEttS2UwSzFHbVltNVM5Q04zOW0vUXhkYUZxZ2dzRHZwYkh4ZlByQVVxZjZOMTRUbXZWOFhDSSt6endpNURZbTVGVXdNYUF6YlUwTFZpVTQ1VGFLa2xxTG5lN3hJQjFiUnd2VXVhR2xXTjIrdTF3UlZTeTBxcGJjWmM1ZWZuWlVzMHFGUEFPa1dHNG9ESUl0d25MMHlpZDZkSm02aU1XZE0wVnNDOTlvM0wzQXRHcUltdlpqLzBGaFAzdEFXS21BNUJmZ0hPVENLWExYdGkzbkxXQm1HVERCU3NjdUp1aHhFTDJUMlM3bVhEcExFc1J4ZXJ6NGtqUnhUYXBDbFd4SG96SU5YaUcxY3d1WmsrR2ZydURza2Eyd29rdGtONFdEcmpGb3BWaGQ5YmwwWWlKWHNuL1B6YjhUNzd5WjJXdGpma25wTHdpd2tndnU5TVJHb0k1UGNwNmZHNG9zcVJVakJOTzdMS1hiK2NFcDJ6eFJKNloxQUVMZlB3NUpmcmd3dkdBNFdOelF5TFE2eEJiWmMyT2psdmxPeWMwRVNZUEp1ZVZNK2dHbU8xVnJmSzRvS1ZOQzNndmVXbWtIb1dNMlZCTENNWTFjQUVJVGxNQzQvY25PbFJtT0EzTENFbmZXd2tWNUVQNGR2U1h1NTNyZzAxMm54TU52R0tVVkNtdkZsOWhkVUc1SDllUmVIbmJHUk1jUFp0MUxvd05FR1M5Wjl5Z0l0ZFJEQWtEZ1JsSUJLZ3Q5UkVMN2ttRDJVT05GOTN2S0cvWFFNOFdzSjdua295UGZRN0hMQjk5Q1RsZW1DZjhGZzRzUS9wNXo3ZHBhcFZydWNxVm81RWRCVkZHMGk3WUVxNS8wbG0rQVVGb09SOTl5eFlpMitHQVBCS014QWQySlIwQTFJemNnREhqRnVFZ0RpZHJGWjNQQ3k0YTQxMll1U3dtTnNHWUM1OU93SnZYVkJZZUlTTEdLUlQ4ZVloenA0c2lCbGNwZkRmeHhQUnVkcHB2dUlCVTVOZ1Q0YkY5NU9tWU1ZR3FGam9obHRhUTNlY1ZWTXhmZ0lTVjc1elBWUmRKWGR5cExKSExtZm9mNm9SeUE3OE44R20ySWY0MXNUWE85WjRsOWtNeURXUUxFdllGNHhKa05aSG5KYjRtWTczdzdXUjVub3hYczRmdmNhSHpMOVhGbUk1RDJSWW1EQVNJYUdFTTVJNklCWndFVi9La3IweUgzZDNhUWR3Q1RET1kzQkVCbFV0TjZDZ2V4d1hEL1pmWW5jSHpQZEZ0b1RtaXY4NFdLUW9QL0FpYmR3NDBpamVQQnAzV3hYUTdRSFNOc1M2RkZ4NmY2ZzBsUk1FWnVJaEhJZDlpeW1BTlVaMG5zTXl4N1hMRXQxczVXU0RtSWp3QkdrK0VZR1Y3ajhoRVhUUXZLV3hqbTl2U1FaLzBqejd1cStKUzIzRmJhbFZCcjBMbjEveEQ5OTMvdWpaS3pvUlNJRXdtcHZtTm5zMFdBVmUxZUw0VnRnQXpwQnJSU2RscnBPc0NZWHpOaFdTMXFvUU9jVjNOSlkySGdUdmtvaXBlWXc3WWltTzR2bzBNOXo2NXRENS9WVExIUWN1NUw0ZVRiTGdCRk51NFVvSTFDYjlMaGNHSnNySDRDYWNpTFVwR2pZUzdxa2RpclBCUklvaWZIOFNkS1J4bzBvMTdVNmo2VFJpMXY4QkR2by9rN25QcjVnWkR2L3hKaDAwWlpGc2tSZ3dXeS9valBwQmppaEUxZkVMOEUzTFRaTGh1SG1ZSVN5d2ZveVF0Z3d3MTh5NHlKTmhRZzc4eUZFbjNWMmgyNnV6SXNnb2VESGgyNldBVTFQVkxsRFNtaFdaRjUvcEZlZkNvTWV3eU5maERsYktMU2oybmhNNHN4VU9IUVdjWkJBbVBsSndmNWF2ZlhQNkpUb0FxYTEyMFY1VFpEcyttYnFxcjR2RllwUDFNazBHR2F3a2Zub3lTU0szQ29QaUZEaGFaRU8zS1djYnR6N1VSOUdiaXdnKzFVZHJUWjZMbTlwaDFIa3dmWnNZTk9QMlFsTkNhalMxdjlvYU5IYkE4TnZiZzZUVkViN2FDT2pGazAydW5VTWhnelhXSnBlcVMvdVF2YzNWUGY2Q0V5b25FYW1Ub3V6dTFiOHNDMFZHbVh3WWMyL28zMllQVWM4bVR4K2F0MjZJR0lDL1JjNXlja2xPRmtVcU95WnVUQmlIY1JueG0zVDBvandHa1QwQzlIL0xUWXh0aDZURUxoaEJSQndVUWd0djQzWnMrUlF1cng2Z3ZmdC91N1FUV3krN1lIbXdIb3YzWGRSS1QwTDJmeEhqaE1HakpzMXNQSlNrcVNDM1Jod2MyZVA2K3JRN2U2RG01QTdPZU1QSUxOb2tVTGpNTW4ralJybmJSWVI3R1lQMmMwMkZZK0ZtZStaTkd1ZFQ3NHJVN0JkRHlOaTJLYUdQQ1N0Y29zZ3NhNWdZaWk4NEZydFlqRWpyZmxqSDVNTEluM0l5b2U0ME1oOXlFZjZXZW8rVUtaNnlMQ2o2Y2l6eFhMNS85RG9GYm96TjNvekdqemc2bk0zYmZRVDFlK0Zqczdwa1psYkVWdTU1UFVHZGs3ZjNxaDZkZUZDbUNyK1pxZXZ2NzVIQllGalhWbTd5S0o0eDZRQ0VuU3NKRGVKdHBCODN4Rlh4TEVycmtUTCs0TUdwa3Y1b0E4UWtXU3RmTDl2ZFo1TmNTZkhjdTN0S3pFbE4ydWp0SlVSWmp4TkFxSmRDUmRpYVFxbDZyUHNzbzdSSU1QUTJsUjl3b25XMko3Y3E4NmdmVjc5OExDQ0ZwQ0FJNkUyRm9ueFk1bGdDbmJUNDExMHRKRFpxWGptSnJMRVIrU21pTU5CY0xFNUlvV3M5bzdGZjBTbFFZUlgxbkhjZTZPUzZlTVo1V25MSjlFTzI3QmtIZGk4LzhsNGZmM1pxSzZCdTY5amhTZitlVitka2hGcU9VUUo5aVJiVmJDL0xzdlZJQm1VWWFWN2UxRk9OMTc4aEZ5ZEFiSC9HUUpibWcvZzdZZytsbUhWNnRsbmlRdXM4WEowYmNXeGhjVmNkUmUxVDhQa3p0MzNjWnFYTS9EN2pUdGZGb0JCVyt3c2QxNHhuWitxRmFRdWFQV0FmUmg2RjRyNllqUEFPbjBSODB3Y0x3YmVXVXdRcGYvUGl0MHh0YVFHUHQrcmthd1hPM0Z2OERLZTVxVFlHOGtyYkx5RGdyanI1N0R6Vmo1UmloWUZkT3NwNFdVL210Ui8xY0hOdm5kRHl3R2poNkRQRFJOSGhjVjI0YmZ5Ukd4bDF1QXV0cDBvL0hhMStuOW9XSHpPZkxsL3ZxUklrQ0tzQzh3ZVFueHkrSkplREFqRTNsQzBJSXVwYlRJd1A5SERxNFFzc3l6bWFIMmtuMlJyUXcvYzUvL0hHY2hzb1dBYkc5bHd3WEtNQ3YyNjcxVmZlRTJmb2h3ak5NN2pMMGJ5c1pJUXltMlBvTFFRdm13ank5bmQ1N2Q4dVRXNy80ZUpzRlZnZEdyRUNXdzVPWTdRRlVZSHlSTGU3TDJwRUkyTDFMM1FUeXVPK1JYSHlORHdGQkRrL0grNFdKOFpuR2dwWVlNOTdmT25BYlZrS3ZwOUFvNnk2NWdJRWNERGdZZkhtNEhnYng2VmMwcTMvbVNUWjY0Q25TUWN0bTlUMUQ3bGVqc0lvUVJ6dXVpTExmNERkdWJKOGNYMithOVFWcWl3NEs1SHRzY291SU83NFlCRU5OMGVsbXE0RzZMbDR0NVdMWWUwQmVHZGxJL3dyaitPb0MvNlJJbkMrYkxFblg3YWlFU3lDbVRGWXJBdDhlSTlvY1RoWmR3SXY5VVlrWWU0ZXhraGpQZkQwODU0Qkk0MmtCWDFQcnZQNTNMMFMxOEl5VWcveWhxT1F1Mm5FNjRuYjlRS0lqV1BNcWx4a0RwVDU5aytLTmVSQ0p1MVVWVzc3VEJKSWtrTFIzMUE1YTlEekVNU3NHTjNQZUVQWXozYjNLVGlVeVB3SWo4d2RVeXppTDE1cHpIWjE2K20vOEdZenh3NG1SQ3ZmTWlrZkcxS3U0bmNEaDVEZDlNdmxjREROZzh3cHNKYTBpOUJKVHdzZHBxTXlwcjVQQUdMOEtGY0ZlWUFuUUk1NVFhRzU2aVpSTllKRk0yZjUzV1lTQ3VKZ3IwKy94R3lnVjdCeHFMTDZibDZoN1lOWDZadWFqSHdNUjZQOG8vZkhwMHVEenVRbzdYQU9RQ3VuS0pyNkZjVUl0VDF1MWErSGNxUHkvSVRRS3JhZzIzbXpaSTR4UUxadnhPWXlHdm9vOVloOTl1bkdEQ2dFN1JqSGwyU3VyWkRnSjRPYzNmeEZpQkRVcENyV0h4ckxJcEVuczcwcUZxODB4M2N2cDRnL2I4VUNvQ20xZDBnU2E3eFhUVmdwejliTnpGZWVJdzhlZ3hjZFZxMU1kYXMxSHFHNUNOTVVib3dldVpLWVdjdU5LMFM0UXlwWkpnWXFudFo3VXIrUlRHSlZITTVUYzVUU3A3N2J6VisxaEdhd3hPRHM4UVNScWdyUmovSWFCVEJ1SVJFLzJ5d2tuQ3N2ajhyUE9yN0FKTUxQSW9aakN0RFJOWURhZmQ1SEsrNWMxYW0rN1hYK0c5eVBOWDZFVmhzMXgyczBVNjF0cVlSS0lVNU9ONjZzcG8vb3RXSEttT2hUN1lYT2hRWG45TmNhTVk0ZlRyemVSM0NjNDRTNXRpMEloVVJLdElKV0hDb2svb21KVUhVQW1oeTkzUWgrYVc4ZFNEakI3cGVhYTlXcFBjYU1PU21QeWp5bzE2UndSQS8yNmtodHhVZHI5R0xQMUZscVY0d0hPbUxHTFBhTkJOQU90QzBOeDFPVDRYVHIxUzBtczhPVVVrMUZETmZMbkRyWEdoV254RHNybFM3aXYwYVk2R05CU1NTaFNxL3dHNHMreHdNTnFSOWQyK2VLdlo5NGttVExuZ29xelNvRHRZTDB6d0JnS05HQWxOMmE1cFI0N1BNOWVpUHptVTNyU2ZWVGRIUHN5WEV2aG9HMUEvckNQUm1Pck5EMDJaTmF3TDZmSzRHNkV4RER0VkJNei9RMllwckgzZDFsN05ST0M0WnVFZy9qUWtiMU9pOElMUS92T3BIMk5MZVhsYnBFNWtMQmNRd1JLQlRtMVFxNVNKdkFHT0FQdUY5elkxTkU1Z1N6dFZvNzQ1ZmExK1EvSzZWY3RMaUdXc2ZZbE1PN1ROS3ZNMzBJZGpmbVJnellMbXpRekhyVVRGUXh5V2x3UnUzQmVOVjF4bHFrOUZwcWpqU3haUllhZkxwOHAwUi9GL3JCa2E3Yi9DeGZPaU5aNXgrZytCa2tqUXhiRk14UmljSmdZUXRaV1RIaTZwOVZjY2NvVHlyd0EydWVWQnZMVVEvbTU4OWk1K2ZMbElwdUJzQTFxS0YvUmdGWk1iNkloY1NiNExIdHF0a1VuK1VGYmhEU3FWdnB3Si9MbUlQUjB3LzMxR3RrbXN4K2duL0VJekZyM1FBK2lmaDJXaiswbXkxZ3NGWXdJZmZFOXZlc2QxTjl6YzNCMDhKTXpZWXBXaHQvaEhVcEZYdWJnOW96bVVOU2h4VU5VNkVDbURCK0FjQVlaRjhrT1JlcUFaRjBkV1BsSmgreGNLb2VtdDNkaVNmaTRSKzExY2Q1RXZlQy9wcVF6ZlhDZ0NiMkorbWdQTEVlYmN5QXZjOC85bExMTnRXRWdtOHVwU3drZXBkTlRXaUJFWmNmb0xhY3duRWZIbEtRNFRWZFhLNTJ1N1FkZmx6bmpuaTRaZlB6MDhMZThNL3JrWW9sZjJKclpRM0dzRmZUcHNSWWhxM1JIaXY4SHJ1YTMrK2k3SEJQakx4RW1ISVFTQmU1WU1vNVhib0x0bXBkNWdYdEhCZnpnR2V5VEhqU21BZDJqTGxxYXFFamR0VkVmbUorQTA4c0d0alpqR1pnbkF3WWVteERYclpROFFCMnM2MGtiZWl6ajE0YUVjakdQckNFRVkycGlHRmtYZU9IbkVjODBVb0o1NWdqVXZUTTJFQlA1UUdYa1pTc3FpQkhhTGFnVHRCS1k4MUcyb3pqWFM5WHA0a1NZc3BEMTluWjZsVENObG0rQmk1bHd5T2dxL2h4VkttZXJ4c3BycWhaUHo4T3pZb2d2UnJvWHRqM3ZiNmc2Q0pRbTVHdHo5RE9aSE5MN0hXS2V4bzF6VEYvQ2s1Z0t6MWxnREkyNjVBS1I5QnRzOXh2WW9jbms4U29YMmJVQU1OREJUZ3l6SVdTcmVhZGZvbnRJOFdKSW8yMnhISXVPWUtzYUpJcU9aclNSRXhya2FqVEYwWnBvUEI2WlA4UlBuUGxnTnJiR1JwUDIrR1g4WGpTdVNKYisxRlRQaUtVMEVQTkNBV1RLOVh1alRkc2g0WVBENlRDRE0xTjVMYjVidm95U0I5dnZWaUhxeWp5aEc0aWd0ZWVVN3ZHSDlKaUkyaFBoTGJXNkpPOEVjRUloWlRRUXhKWkpPSzNqSUhDa3g0QkE5cElsazY3WkFpeXRtMUNvdmVIY3RLTUh1WFJuOWx2elZ5NUdCQVJWZ3B2c0Y2Q0pidnN2VjVqMGdqWVZEcGFGWVVnQ3FoQzZrekpxbXI0V0xtUzFpUWMrY3BZaTR2bmxBckowZW92QWdZSGFHZ1pwWHN6TTFSb2tLRXFqRW5TQWRubVppcGl5NVhPRXBVRnJyTTZuOTh5M2Rrd1Y1dk5QU2hwUWZpTzNaSGErdXQrUHNJa2ptaTlFMi92Wms3NnBnTlBOTTJxUEFzaHl3U29VSEtSSERPYUJJMUprWStEYnJJcWJRL05YenRjVVpzY3BYMzRkTkhpaTVncFdxSnA0bzFsVXpQWEJ1alEzNFB6Z2JmRHZXOGptdnhBSjJJbEF5WTR1cktDeGZNOTFNNVBkY3BHVE9HNW1ZcCtTbmdMRTQ2MEdzTklpelpDK1RidWVNZmN5dmZoN2JwMGd0Q29KUDk0MGZYWFlGZlE0NUZPY21EYzdjbFZxc25DdWxmcCtIakI4eXJrYVF2TEM4c05ta3VqcTVqTkpFbTRMdnBQRWV6ZHl2MVdPZmVyWitRWXlEYkUvM1RWS04wY0dmdFFTbG1kNE45NWZHZmlMRE9PdWtpVm1sQlVXVjFwdVJ1bUZ2ZVpBQmFvV1ArWDMrangzOU9QRmt1M3dhcGZTOThrUFN2K3hXa013b0p6MnFNM2s5aWZLMkUzZDE5WkdWc2Zaay80RWZEUWNJQjY0UXNuRGlRK2pSMEFteDkwcWhaNWdDNXFnSXJFOGU1cUt6enJDY1I4aXloUURubDZIREhIQUlCWW5zaUFXdDdnQW41eDlzTWR6OERhUzBjUlNDWEhveSsyaGZiTkc5SEtIY3YwNkxqcGFoMTdZQ2dxelBqRDJiY1cvSk01emNsYnU4RkJqQXZidFREWHdWdVpDWjhLZzNRTXU2OUc2cjJickhYV2V5ajdqclhXM2RBVmI0anFFdXlVR3VTR2pFQXNJa0FzM0E5akJueUNVSmtNSE1qT1FJanRxekFXWmxyejI0cEJLdTdSMkpqMVBqbXQrSFBObWR6MHlRS2IwdkNPYUplNFk5Y2VyOElCTDEzZFhQME9iWjFpM2k4L3B6ZWhjTUxGemhMdEN2UWk2c21DeGxXOHBoNTBSWXZ0c2traUFFaWhNMWNadk5VNWFYbFNTWlVmVkM2WXpMM010YTlGMldSLzk3d2sxc1cwWHkxTDRPQUMyYmtMOG5sWG9OSzgzc3FsZzBXd0N0ck95eDZmN1hSWWlxbksvU2cxL0dtaVRrS09GT1c0Y0dqWXhzYkNRZmwwaUtqQzAvY1lrRExrb2J3cEZ0bmtGejNPWU1pYzNjZnlYdHluQVJhOG5YbTZBYStEZktsbFhlKzlwUG5NOFdBQWhlUEI3TngwWUpvakRvcG1wWmR4N0IwT3FlL2hJc2wwVmJQVFdyZlB2S2pUUk1Na21CMkVEMEFqemxQSFJoTUpCTllzeTVnV2hObElPSHlHalZ4Y1doaURPclFHUW5XZjg1R2dmWXpyZ0M1UlBkYjh1MnhnOTl3VzR4L1pld2p2aFQ2NnVNZzQ2d29RaXVKenBSb2RIcHZQblhXeUdIZXhONzdVWXNIemgyb2lOWnFaRHpvQTRlZzhNb3FMdmZhRWNocldrWHNiTjI2clk0MEZlQTdrWVZpeWtQRjV5MTVnY01QY2Jrd3lQcHNZTUR4akFjY0I1a3dob01VdEFmTjJ5MXhpMVp6YzNjb2RIdHNycWFmMDJicUgwdVdJNmxXZjh3dWFRVXM3VTNHT0l2VkxaanZMODRGNVdWVXhzY2NPMzVqMjBoNXI1eVZjVU53b3hmYnMvbitucW40d2lSbUFubmlseklPUm1QWmNEVHJkUHoxZXVWL08rRVVDRHJnQzJEZ1k0RlI0U0lWOHB0UGFqTCtaUzc5YzNOaURDeit6c0ltQ3ZIVUNISUVaUWxqdUxvckJnUmdLSW0zV01GeGFEZlI5aDRyU1VzL2N6eU4rRmo2cldGWjlHajdKUTFnVEZzeDNFTnRoUWVPSjNGRE1lSDZ4aVhxMEcxVmFXQktuL1d5Q1lZWUhvWm42WEo4aW5YOVZsOUJEdGduTmkyUGJsTFl1TkV6Ryt1Z2M0eFZ1empsN2dDWHdIWDFmTzFNcENSNHA1Y3FTWlNqYkFJcEw0bktTMGFDUW8rOUpKREJUQjRpQ3FqVE0xL254ejAzREhtYWtsRXl2VmhFTXRRM3l6R3pkSnM3SWRnRHl2RjN1TFlobFc4cHJsVHdGVWxXQVc3c0dGWjYrVVhRcGFhck8wc29LTEwyRVVoNitvSDVPMUttSnFTVVRIQkw3Zld6UGY3Tlp2ODdNOUJZSDJCM1pWN0NIQ2cyYUhtajVtVFR6eXE2NGtjMjNFcWhVeWFzWFNFNGZGWFhUQjY3cHhIaENXVDBmckZ3OU1PS1o4NjgrN2JMWWMrYjdFSXduYzAvYUQxZW1VWTZSbkhzVzdjWmhwbmJxRiszSlhrekFHSm9ncnJOSEFVanN6QzBNMVBaYlBTcnBlZGxrS3FjWEh3R292aWl3S3FONGdwSlNVbkFtc3VFR0hRa0RRY1YzaElCdytZMVJ2THZ0bktCRmNmNE1XVkRnL1pWbmFKazh5S0N1aTZGUTdwclRZMDMvTEFsbmZNZ0VTRmFYMDlNNHBCbnhYUGxwM0ljeityclJVTkxPZUZRdkVtamNDWDNTNlV5MHU1aDZVN3lESWpQSzNldjBTZ0crcTN1TWZzSld2VTc2aUI0Um1TNUplSkx3dU5VMlBlZUI0N2M1eTZsWmxmcXZlWElJQzdkZnVWRUJ5QTBueCtFMk94R2drUUxiRFhSL0ZRWE5JbWp1Nmp4UmMvUzduTXUzT3hkOG9TU3JBa2hmTXZCTkI1NjdQMXFkZkxrRXM0eFk5QTNOSW5RTjI4V25RSXpnbHV1WmVoeTRobEFNMk1EWEpRYWEyMHJWcGV3bm05aUpPTjFRM1l2SVdvNmxmZUEvMTRNZzZkTTA5SjdmRTR2dXA4YTBCek56VUxBdkg4MXQ5WkpCeFoweEUrSm5TUzZrSVkrK0JiVGVkU3Z1MHBRTXdHV0pIWTdMS3lULzlvVGxXNSs3b3RseU5QcXY5NmNmT3VkbnFyaERDOHltN1FhY2ZEc3F0RVFQaTFOd0lqU0twRk5oTVZmdjE4ZXBnN3RObU1Uc1owVlBIMEY0Z2FOU2ZzQWpxbXpWSzhtMG1ISHVKM3ZLM2FMTGNESWh3SzdBbUl2REZMb0RRN2lNaHVuQURwNzJGM1FBdjFzaW5MRlVseVEraXR5cVlOQkdJa0lxR2F5SFRDbXh6ZHpZMkVwN2RjeHErRkliWUhWNlFTcDV6c0NkeXdTbGJOYng1V2RDTGNZU1VULzJ5alRldVYrclNnQW55YnhPcVJMUzNHeEorbHdrT2pRUG9Md3FUNGR1UU04WERqVmJ2dDZpaDNOQ3ByWjhGRWFESjgreDh5cEV5SEVWakx1bEZidXphRUF4Vks4cEZDdWFJNTIvczAxdWFNWjdRdGtBMUExM0VvRk5IUDMxQmw1aDFpNFN4VUo0WmVSeDhGc0FPUGxUYkJhRjZ4SWVkQVJyNytKOEZzb2RlWmQ5enJFak1ibmZqVEExWHR6TG9HQmxTd1dOcmx3WWhtdEU0OCszTkllNndLcEdzYVFybjVNaEZpdSs1Qmd5TzNqbjduaUZSSVZQRWZMUmhqYURSVnZnWHJTbEkzUlQ2ZXp6SlV2ci9mQzgxSEVwcys1K3NQQm1jWTF0QnhmZEZKZ0MybDNhVi9NZS9WWGF4M3M0MXhlWnVFd1dKVzNOOGlzZngxRmQwcVgxckdRMWxJSmhDdkxwSGRMdTRlQ0t6a3FoTUpVYW16SEQxQnFNT1lSNWhEQW01MWE2aXlicGViTHdyMml6YlVWMlRkSEVYR1ppSnNXMmlBZGlBMTRnNi82OVhWU3dUTWdkQlZUemYrVm56S1daUW95S2laUWRlVjVUdG9jbm9CUGdmOFhqRjJmOXpYN0ZwQVZtd3pxVEE5UEhqQ0pIOWRGUEIwK1ZTYkd4NWFhbDd0NWVOTFZPWTVKbnVBUkwvYVhSUzdTbmpWTXNobkszbTFaemhHNGVXTVd1TUE3aXQ2WTU2c3VmNWZwejhNZ21idDZiMWM3RzloQnJ5eUhTU3FzWGZkOVBsRm5XeFp3Rm8xOXo1MG5LRk02M1g3VmRGV2FDYmhyUllRTVlwemYya3hVaVQ3dGx1RXBsV2pNTHBoVWJRdk4vdTgrbGxTcmdFelZlL3hZNnpnSGJRMW5Rby96a2RBeFRSc3dpd2JRNG51VXBIQlhrc2xZeEJ4Y1ZxYzNOcVpNUGZPWGNGNXFvVy81T21LajlPS1N1YUtRVFB4TDh1d0RyWUJMR3ZwRlJjQ1NlSFp3N0ZoY2cwT0VERzZEUFpUMFZYZ0MrVVJSRXhkb25kRktpUk4vRXFvL3B6VEtEVVNDYld4ckFkazJrVWxYMnlKaW5OZXNSZGJiTzZHcmVaeFN2NUpEUFFoN2xlcXlUVjRERHlneWdnUHhPUFI4QW55U0g3L0ZXNWtoaWV2cW1QeHY2VkNWbExjaDhrWjgrcHhZMFd0eUNxa3hrOGRQcitlcjRhaW10ZGJLTFdzVVVZMm5aNU4yckdScUVsMU5KeFljdFVPejRXamVmZk1hWDNrVmRUbUlKeE1MS1pDWWFQelFhenEwSWNSOGhCaERKd2cxbVI4SUdoR0N3UVpnaHc4dzQrb25aY1VWM0tOeDNoOGdHMjhmR2hzR3hsRDZ1bDY2eWJXS2EyMGhSQ3h6UXdiVGNaYjBoMW05NW1qUWRUMEpJcWpZLzhpcURNVE9XKzY5TnJ1UjFibEJia1k5WnRaeTBLdEpmR1lnaVI5OHE1bDlOSlBUSEpOMzhVamdlSGNZMXYvSFVwTk84cDVHSWxHRERIS3RVb1FqTWExYTI5RkFpQ1BWS0k4N1VqSUNsKyttcUlHd3JxMm5QNXg0SlRqL0cxRUxWVXo2Y0RmbUd4R1dxVGh5V2pGbUsrL3pZdHlRc3lHckNycm1MUUI4NVNiTysvdXhkb3V5d1Vlci8rQ2pXcnNReTg2SjVRWXA0em02WXErSFA5eUcra0QvMzNObmY0NXFFd3FJb1ROUGs1ckJIdnJGd056dTN5WHB3NzFINjFSYzN6RmluUlQ1MndrZHdVb1YyU0QrOFRnZXFJYXdmWGlreWlTQmVKeWh6RGhxWndHN1FJdWswSHdxUllZSTlpYy9QQTZwSE8xR0ROUXpCK3E5VXNBYkFjck5FUW55MlZRMGVmclluVnFpL2tsaDY3dDd0dkNCVkw0TTVCRTFsMit0a2IyZzdLM1R4MHZZQXUwVmt2TVJ5UHpiMmh3c2MzQno2WG1kTnBlNittSjZjZnJrWmFqOUNXUCtRdEhodDlwcXNEbnV3MFp6UDVrcHI2NytMeTQ5bURWaS9jQ3crc2FkNG8vNVhlT011alVReVROanZzR0RleldqY2pGSnlUbXZ4REwyN2c1dTMrMDZvYnFZT0NRUzZ4My9iTnk1UzRGa3NSbHU2V0pBbkFQbGNqTlJtMnc4bEJjS250VHp0d29tUEdXelNGTnJRUXlhTHZXK0VnYVlCLzVEdTJlNzFyWFlUV2NDU0J5Yk0wSlNDZThzWkJMa2tvbzlCVDBMTmREeUczVVhSOTlDdURmRUZobFM4R2JFdVhQNDAzbUFQZ29sNkFRVG9lNXptRVpEMUZLajc1Q05ZWWlmT2NXN2FzL3dBOFFueEJRYkllSUxYS3FGZC9GMmJ3dWNmOTFXY25MbXBMbGVvNmdUQXNkRXZTMzJmR1Uxd1p2WVVJUmYycGE3NzNpQWJyaWk3dFNjVDd5T3dOa2dpb01XNlAwSzZTOENJYWlnaTg1NGZKWGFHbkxCSVdINVVzNDIrV3d5dXpBQjVMeGdzcXdaeWVzQ1FFaDR4dGNiYm5WZFBJMGlKa2U0dXhDM2k5Nk8vejhPV3dJRkM3QXpxVFFoU3hWSTRVeVZxVmh6ekdDZDgwU0s0eFlXcmNmeEdXTlI4LzZ5Z0d1MU5PRkt6UGFxdU9ZUEVtcm00dDFFdGZRdUY1R2ZKNUVNWFJ0cnhHaUZLUmxLaFpSeXVCaU5xNXBBLzBReTIrNVNYTFh4dWdpTVpaNmFZZ3c1Vnc2N2FhWXFaZ0YzMkxURjhHSHcwWTNDaTRsQzlzN2FZUWdqeW80WHU3TEJGTU9NVTVoallqSDV2a2RHcEk0cUwwMVJ3WGtzbWM2RWJGZ2FCNjYyWnlYeFJFbjA5cUhyVjVDZ1daL29RMHVTZVFlZm45UVgvZXRmcVdyWmY5UEw1dWdOV0NQNGJpVUt1cnpPbk9kU2k0VC8wVFp5VlpMc1IrYXFlcFVHWngyUjhNQlhkRGs2N0I4cmlHRHNVQU4vY1N6MmJWaTdqdnduMG5LMkpMMVhKbGxJbkZzTEJhSzN6UkUyWWhZUXBKT2VWZ01KY2Z3VFltSThOQVoraHd2aXA4eStoNEdScFZhVUxHWUlOeEtMTnBWa3FTaEFSRjJhdWlKbU1BSXMyamZxQ2hwdkR2VVNweTd6VGhXb1dKeCtSak9ZUGo3dDZiSEJUUWx5UGl3ZWowckhMQjlZYnZyWmpidWtEbEVHYzN4UmRBM04vbVdTVmRFbTJhY2JlL1hFMU9sZFBaeTZOd0xoaGVyVzNzM1pIM0RPNzZvSERVVG01dEg5YkU5WURMMWRXK0JqeUJ5SkQydTBZM3VCVUZpL2ZzWUxFNGQ1dGhEckRGbW5BVmJ6Njk1U0VUYVBHUERMbUlHR0xvT2xDOHl5cFZLSG4xdS9uckxuZ3pOR21QVXRpOEozSVRxRXp6V2NiakkvY0RIc0c1bWZIV3FocW9zbHRVS08xLzVteFFnSFJCaDRyQTRzR1FETmN2TVRoelkvRFhMSFZIakdremhRZDFLQjVUSm81NThGRzJQaThSVEp4dHpPNWtQeTJaRkYwOGF3Z2tnamQ3RUd3N21SMGU5RFZUbm0vYU01UHBsTlc2NGZzVDRSVG9XYnBseFlFTERRZ29qVkpneGJjeGRWSy9pYUZjSEdpS2ZpMDVsSTRjL2tHN242djV1VUdpMHIraGtsaUdRbEswVzdTcHQ2dE5ZeFVmNFg3V3I0TUY0Y056WG1TUTdBZkpuWlF6SW96UHAydlVPclE3RUtneXRWVXNBNWJ4amVkakJGUVQwKytnbXNpMEJIM0l1Tmd1QjcyZE05VDVTazY0aE5BWExuYVp1c0ZmUlhnSjg5UnF1ZTRpMjNyZVJadVBwTVZLQ2pjVGk4VnR6enBNejFGTTV1Z0JNV1JsM256MmJJNzNsUUFGRUhjY1JvcGhhWW1aelpuMlZYSUw5ZXNyOWVpTU9Yb3hnSXdUNnQza1AxTkpaMzdROFQyU0MyaHZiT29SZ0lvLzNXVDBjVDgyblJYMWhpSUN6Yi90dHMwS1MzY3hSZlBTclBxNzdEREdncEFKNHMvbklobHRqaklzeTUvUCtMR2NFTnZ4ZG9XUEk4LzhMOHg4SHNncXNSYW5ncUFEajFoTU9ZWEN5RGQrTFVUZUNWU21sUDY0S2UyVDhOaWVBWlhybjJxY1VqaGsveWMyUjZFSFpPcW1GZDNBeGU5T2RMZGs1bXVmVlJLQXNnRmxFbUdHK3dDNDRqY3dVNUtoVmZDTHJJb1BTMk8vaFhENkhwOFVZM1FXbnovNTEvVWpvRTZ4c0NJQ2J6Mi9ob1ZYWHh1bEZ6b2NIYmVmMytvQmVPVkdCQ3NoRmFBTFlqc0lEVGprVVIxL0ovV2xLaUxFZi9Za284Z0cvTHFqdUVVbnl6THU1V09ySjQvOTFOd1BtS1laQVdCbjB1L056eXFoOC93QXdaNHptTGxUNHJwSzRqTHYxSGlxcUtlNFdZM3NRTVhqWWdEZjhxc2E3YlZrTTZBSzBoRGlTVkZKWmQraUFEZ0NadzQ4N2pwUHIrSVB0VkhBaU5sdm4wN1NmajZFbVpOc2pmREQ5dUZJM1pmY2FRK2NDK241aVNtRjZ4aHlOSnZHM081YTFadlV3bGd1NmtHTDNZblJjMTRxMXE1UkJ2Uzh1YTRGV1lRLzdUSjF3VXd6czlxUzlDZ1EzbGRpZ2pwMEdCcjRhSmZBdGU1WVNYb2UvMnNTMUJidk43Zm5uWWdvSHpBV081Vml5Z0lBRTgyay9Ea1ViSG9QVGdpYXRsRk1CeW1DTStNUXhRSDFhV1c1TjlRS2EzVmFaQnk5VWh3R2I4LzhxNFdIUzBSWFpJUnFTVFFGNGt0eEJHL084WnFZcklJZkdURDBPZDZPSmRlek5YMkFWM2FFNzBPVnduWFloZXJiNFlXQkMxcXVXZ1hTNzZ6MEF4YVdsanRPRVg0Z09sNmZjdjZYZ3lVT2ZoUTRhUnFKZmd0RXhZTnkxemNuQ3hoL0ZmQlBhQnZ4U3BKS1VGQkh6MmgxSHZ2a2JMWnZNcnpsVXdWTzZId2JHZHlPamJvZHk4QWZBVUdEYzFDTDBzY0JlTjZGWDhHbENzYURuYkgwTjgwbVo5ZDVVOTc3Q0FLTW9PdU5MWHVoaVppMDhNOHlYVXI1WUF0aGgwbGk2anpzaEc2aUhqaytQZ2Q2Y1NwNWk5MUgvTm11cE9uN0RUWFhZSHA0YWR0OU8rWkJNTVhQeWpvOGgya01YbFpuZ3VVSThnVEpYS2kxRzdFWU1EVkY4REwrTlRRWEVidkRuNWVrV0FtUXFmV0hHNEtKR21EUS9aYXNyNisrODVOUVFOVDM2Y1NNODZDcENKVGM2TW8vbyt4eXIxZTBuSmxabmxIaFhTVktvREV5cjRsL1lZUGFmODluT1BKQVdobjArTy9IMDhoNllDc0t6R2hWSzdwSjNUV1lOM1hyclZId1crMWJGMzhJZFd2V2l5QUZWbWhQQ0lzRjIrMEFRVGJiVDYxSjNSS3NuSUJZZ09NV0J5aG44T2cyZHdDUXNhdFZsbTJRODFLTUViMnRqditaM2pScTgvWi9sVytkSzliSEs5KzE0eG12c3B0eVFGVHRsWE9IUHEzYndzakJNbDRMOFk5cmNaRVA1cStlUEk1RjVLaENTVURBanhQOFFFUkpVK2wwcElrYWJidXVlVkNHSlNwOW12OVhkMEJieG0vNjNIeW5jejc2L05MV2VQUzl0ZlFEV3p5eDVpcURsd1A2eStqei9MSGcyWmEwbXpFYnNmU1JLZ1czb3VRbEhTZWNmMVcrUTlsQjkxZzZSbmdqSTZkcndTNUR0ZHRMeTNpSVQ2dzExbmVlNGgrU2creDR4emZ4MlB3ZHljYkczNWxGcDIrQnFneGpyUWFtQXJuUlBybU05Rm4zL0ZFSXR3dzBJVi9mTTB0UE9SWFZUcXR6UzlkaHpWcWNnaHNyMDRwWU1xOEFWQVJPa2tVMXFpa3YvRmkzMUNGN1p5a0FBY0lCSnVzSFBtMXZ5RlFpcFNKVG5XRjV3WVpLeTZaR3ZUYnYrTnZ4eG5lb1UwOTJkQmV3aHg4K3MrdVU5VTlaOVJFWUdpQzBtUFlpdnMzem5pZzJOb1dXcWdZOHBJYnBJOUpXbTNXWkQ2eEU1RnJ4SEZxMkV0bWZFbHV2bHJFTTUwRlN6S2JCSVQ3V280TytmSGlaSE1ZK2xEUGRUckxBbjduL2V3NURZWWhyKzJaZVJmdmJuMmkrSG92dEZRS3RjR0ZWK0RXbXZHaWNWdXR1enNuUnVXLzBscnc4R3QwZ2QrL1BPTitiZW5xMCttbzFpWENQdVdkeGNqT1ExZFlhZml4RExYUVJ6TkVVYWlnK0p1K1l2b0hhZEJMNFFlRHJFenFJWTNxSjlzZ1VkWVJBZWFrVkgvQVU4QjVsYU03UWFNbE5TMWhtTFNPNjU1bjJvdGFFYmlGN3RjWm02SzlBaTVrc081UFAvZHZYT0dmd0hMRXowWFg1aFErcUo3VVlpc0toR2Z6ZnRxaCtWSFl6Q3Z6Q2RhdUdydEJ2d1R5N29qTHAvUWV5bk5ndlo3UithWW1WdSt1RHVRaE5HNnF3NHdzbDAwTVBFU0RHa0llVVhyTjZNYzloV2ZsSkxMdndYMFhwZ3ZZYjg4V1BzU2RKMXcxRzk5NzhPVGhFQWRNVys5V1BtcnQ5QjNSUUc5aXVYaHhXcTNRbUorTmtCK3FubzBtMUlKZGw0M3IydWxaeTQ3ZUR0Q3NZY1ZlTmdOV1l2d2lkVm4rR3VZWVpULzM4Mmc1T0xxQWFiWCtUSFhuVFRzeklXRVV3MGliZ0RNVkkyZVJBY0MxdFJzVlJ6MEJWR3E1aEJTdEFXTXdSdGVjYmdPMnozaG9RZE9xTnJJRS9kVUVNM3BpblVlWlczSlI1c24yMHI2enNJVGhiUmN4RGUydXpiK2JxUnM4QXBLTHNxTEZXN253OHVNYklubzlLaFVLU0syRzMzWldVczkwTDNhNGgxQm5FaHkwMjg3SFd4TnNhNWZwMmJUdGNOSVp0N3pqN2Vxcy9HVldlY3BXSzZXaS9BYjNtQU1hWU5mN3MxZmxFVENUR0pSLzlDcUljTkE1N2NwcnlVWXpzZkFnYmNpdUVPOEpOYVVaUUdPMWpPZ2kzWjM5WDZnWTZaVnI1OWxTekFDT293ejhrRzUyY0tJY2wvcThQSzBFSUI3bS9kUVFSRythUDlkNCtjZUxxN3I2ODJubEFheWJhUTlPd3ZZVDBhL1BUY3NwMDk2dUNTZXZYQWVpTlpXWVJzRGFHaG5kMmVJYVVsTkYxcllpTGRpV3JwbmN6bU1ZL3pNdm5MZi9tcUxtVHJjdCtLNkRUVEVPSi9ha2dFc0dFaWpzakpWQUFybndvdVphOEJDV0xqdmRLNjlERzRsYUpINUNkaC9FeSt6TGRGMXdIb0ZqQk1SZUZPRkhyVzNNcDFObTlJUWZ3TTVrK1hrK1p3WE5JaFRkY2xZZ2hkaHVxM21MQ2RHUk42WUw2NVBrcVdoU00rMk5OY2pFWFN5U1c2R2RDWFhOUTJkU3hjSGFVaGhaRUNNa1hoU0NhNmFvOWk5bVlxVGVBSFRqWUpsYytIT1c1cnZoK1F6V2ZGb2FHL2NPUUtsbkdselVxSk1RcjE3T09kNnVUNXJ3ckltcXZ0RG9XUVlDMTZLZFVhMy8vWjwvQkRCPgogICAgPC9CSVI-CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24-CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I-MTwvTWlub3I-CiAgICAgICAgPC9DQkVGRlZlcnNpb24-CiAgICAgICAgPEJJUkluZm8-CiAgICAgICAgICAgIDxJbnRlZ3JpdHk-ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8-CiAgICAgICAgPEJEQkluZm8-CiAgICAgICAgICAgIDxGb3JtYXQ-CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24-CiAgICAgICAgICAgICAgICA8VHlwZT45PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MVo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU-SXJpczwvVHlwZT4KICAgICAgICAgICAgPFN1YnR5cGU-TGVmdDwvU3VidHlwZT4KICAgICAgICAgICAgPExldmVsPlJhdzwvTGV2ZWw-CiAgICAgICAgICAgIDxQdXJwb3NlPkVucm9sbDwvUHVycG9zZT4KICAgICAgICAgICAgPFF1YWxpdHk-CiAgICAgICAgICAgICAgICA8QWxnb3JpdGhtPgogICAgICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24-SE1BQzwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPlNIQS0yNTY8L1R5cGU-CiAgICAgICAgICAgICAgICA8L0FsZ29yaXRobT4KICAgICAgICAgICAgICAgIDxTY29yZT4xMDA8L1Njb3JlPgogICAgICAgICAgICA8L1F1YWxpdHk-CiAgICAgICAgPC9CREJJbmZvPgoJCTxCREI-U1VsU0FEQXlNQUFBQU5pTEFBRUFBUUFBMkhzSDVnd1dEaVlXQStJQmMxOHdCZ0ZnQUFBQUFBQUJBZ01LUUFHaEFUa0lBQUQvLy8vL0FBQUFBQUFBQUFBQUFBQUFBQURZUWdBQUFBeHFVQ0FnRFFxSENnQUFBQlJtZEhsd2FuQXlJQUFBQUFCcWNESWdBQUFBTFdwd01tZ0FBQUFXYVdoa2NnQUFBVGtBQUFHaEFBRUhCd0FBQUFBQUQyTnZiSElCQUFBQUFBQVJBQUFBQUdwd01tUC9ULzlSQUNrQUFBQUFBYUVBQUFFNUFBQUFBQUFBQUFBQUFBR2hBQUFCT1FBQUFBQUFBQUFBQUFFSEFRSC9aQUFqQUFGRGNtVmhkRzl5T2lCS1lYTlFaWElnVm1WeWMybHZiaUF4TGprd01DNHgvMUlBREFBQUFBRUFCUVFFQUFIL1hBQVRRRUJJU0ZCSVNGQklTRkJJU0ZCSVNGRC9rQUFLQUFBQUFOZDJBQUgvazk5OUhHRVNMQzBiL1pZWllxVjNuUVZ4TUFXbXpYeHFEVWhlNFhZaDk3V0RISCtoR2RMV2c0bGI0elVrSlIxMFkrUjYzaTBSenl1cFc5N0VXb3RHNnRpUy9TN0JQTW9qMEFKWVpRUzQyOHU5VlJodkJHQ3p4dTIxWVhUYnpqcWpzcVhpSGhBeXBjRTkyRDRrUmxpd3FuSXE2M2l4OU9VNGE1Mm5INVEzVHZKbXVQYk9BTGkxMktTdXFNTXlGZHlqbGIvSDJOOGZZN3creHVCdEU0Ry9lblRvelg2d215SlVBSlltNWZ6SE5OcERmSTdkNWo5NFB6SEJ5eUFqQzBvRCtDeHhtRXhwL3diMENRWktMOFZiMnZyNlhXeERmaHB4ZnpYK0JBMVhUeGJBZjFzdytvOXFkWEdBVkpKRDBwQ3FqSlpSKzhXV09sYmdZSWRzbk1jSS8yaGUweTZwNUhzVVdkb0hUdUxvY1V5YlFBNUU1WUJramlvVXFHckJQVkpmcDVoREdOR3VTUGtVNGc3dlZWa0JEMlgwQWpzZU9IYWFjME1CRHR1bUhobTVMSmZ2NXZUZm1SMzdQRFBGQ3Q5VXdGUDV2VGJhQlNPcG9oUWg4SnBpRmlPSm1aQU56L21uSFoxQUJ2Y29kblArR2tKdzRhNkhENzdOaDJmSk9TRkNKMCs3WStGTGhuVndDQUE3SWlqcFkwWDZWYXhOeHQxbmxyWWJmaWIzSjBJMU1uS0FpZFhNQTBaempBNHN1U0Zkb3g4N3pQNEJqRVA3Q2xGVndlOUt6NnNzSDY3dkpGdk81Z2tBQ3RKQXdTOC9wdlJaUkFKOUJQWDhXbFlsTVNnVkxTc2ZVWU5YNDhxTVpBODZtdW8veDltdEVmWnNaRDdOY3EyK2tYdFRZQnU2MmtEOHozU3NXRTcvZk9SMC8zNVJjQVEwSlRVWXFHSTBNeWhncHlPN2xhblJjcXBpRUxLU2tqbSsveDNZR3kxRXp0a3BDT0FLNGZ6MVJOTWFYdWpoTldhcjVsb2xGSXQxRS9DdUZrbUpPM3IxSWtlOGNQOVFXb1JlT2I1OHJkQnZJRUZBVk9vZzlWWGw0czRPck9wSStPN1NLTU9HNkxkYnFQMGZvVlhPODRtUUNmUUxvdHcrYjcwaUkySm12cUNPRW14aG50dlc3WU8vRGVlOUpPbXFMV0oyVTFya0lZdGgrV25CNGZ2YXJWSmVKY24vUkVDTmtlODJnWUhUZlRWcmdpbTQyT2VBNlFRT3lHZmFtbW9rcmtya2kxUFZiMmdKYkxYdE4zOTVlWTQ3ek1zMU5NUlk2TG5YQ3k0QzVYVlhONDlvU0FFWlZOT01rdlpuR0ZjQk1BUWQrSzlzWFdWV2JNOWZ0MGtNWXJZZHZNRXdqTFpqbzNwT3BnVmZaRWg4YklOdW5jQ2UrQzlqQ0I3TytyT1J5RUpMc2g1UWlVLy9LOFFsZ2Via3VoRjRmSVJrWHBnbXdrSXZzMVBkeVgwWTR4RkFCTWpvMDl0N29iRDVMSVhUQlRhK0hldkFJZWdReWltZWIrSlRWOHhDSUdieVV1b20zOEFsQXJXWkNLTitoWk8yREo5YXNlMWVGcFk4enlUTjJ0UTJCYWxKaU9LK3JmZ09WUDhBOC9Mam5HcTZiakYvTEhTTlhEd2RwNUUvVENUT21aNTFwNHRFdEhScGk2aEFSa1d2NURzSFlzbFRLdk93dG9zdDZJZVEzZzZ4K1VyS0lwNVlmT25SdERjaW9FUDRyLzJ2RUtMaXlFMUJ2TmdsUXZsb05BSXhyVWNpV0g4UFZGOFplb1hHbEhhaEhwclZoSVlvTzRJbFVSZ0RBVkwzeWY1QTNJY2xaemFoS0Ridms1emI4YllpV0hGeEhYMHFsTGFpZGYwNzY2b29VcEVudTdCeDFESW1lTTd0TGdTVGxyNDhGTWN2Yk5YV1ZJeFo0R0lwTWI5d3lKZnlUSzV4WXlNM1NyRXpKdWpLN2o4ajEyaTVvckdtbXAwL3ZNdWQ0NmNzTG1yQkJRRlV0Yk1SOGgweXhmdG1mUFQ0aTdBUW1wSFNrZnprcytWdFJHdkMwbWIvTHIxdjAzRXN1bCtIQk9zMHRIOEo2L1poTUNKOGRhekJvSHpleFpvcWhzWXFqYUticzhJdFJDeDV1UkVaVzFyNm5nVnlhNG1qQlM2R1E2YmRnSVN5UXN3dEJSS0VHUmQyaEdONzliWUpUaU9zVkNpem9id21CSGFORlprUmtGdGRuWXdhKy9YOVRRQ1BFeXJhS1Z3YmNBbk1mVlFUdmlDMzVqWmRXSFM1dklHdWdaRVhJQndOMkptYTU3Smg3dnhXTUJ5M0wxSDVsN21qLzIyTWZCMTh2YXQycGZCdk14YzV0YVJ4TGhkOERyZ2tnNXllVUd0dHF4bXhSS2pIRUVmM0pjVEV4czM3NHMvdVMrd1R5N2ZBL3YxcHhBT2dSOHphem9CdXl2MnlQZGVVZWFQbllacE5JNVJVQXpnWEptY1RLYmRaN3kyMjRscDFjVzg2Vy90RzRTSmhkVmFnUk9va2tnVmQzNU1YYWRBbUkwTUs2eEhYSnNQVkk0ZnlWRExNMzBETkZDdEJjUkFlNThaWDM4dHBxOVMwK1Rya1prdUVVRyttZkhYRGtQWlM2L1lGeXY3c1UxWlJaa204cTNwWWNQNStjSWxZa1VzL29FdXQvM3VLaHBLR01jblVvTG0wUXArdS9sV040SGJIZ2ZwUFZ6YkNmRzNoQ2JmMWRxaGZwZ05ZMDlqdElxbWRNUUxNNC82QlBVdzdaWk5aVk5LQy9IN0U0NkJaTHFuSW1OL0hhOEdNaHNpZ3VsMngwbmhuRzY0WjlHNzNMYU56UUhkRnptZFhvS1JxOVQvUHc5TDJQdDlQdUgyZW5tQjdYSk9kYi9mc2lsWml1TFp2aVYwUUczM0I3dTc3QTM3YVU4Z29ZQklzM2tKUERyODY1Syt4bTJibHZJRTc0YzIwZ1UzZVN1QVhMMzlrYWpBU1Z5cUxzdk0vM2JXS1pmMFlldFZvQUZEQ3F1b212ZHZZRUpmQ2J1VGt3dVB4YzJsT1oycXdONmZtcWVnVjNwNytOZW5pclBodXR6aHpIOEJ2UEV2dmMrak1yOUp0MkJWVGtwbDM4NTJEYnBBL09sQkVMT0h2c0NkMFlUVEExWW5SLzNwTVpHYXJzYjM1WWtSb09PRFJmQjM1dExQU0ZUTm9lQnZEdTRtdXV4RXVEOGhQQkVhdXlXcDZNYUZVMnlFMnJjdnZHeHhZd2Z0Rm03ZEZyWHAwOGlFbDl4dXBsWkhGTDQ5ZDNkbmVxMXc0NDBFWWJVQ25XSCtXVTdlN1lRU292UmNsd2xqTW1OSDhkWExrY0Y4RExWbWJqeDljdUhMRmY2Nk1rTk1lVnhyL1VIVXd2a212TGt1bjBncXd5YlhCcXl0ZGRBN3Z1VXgyRkx6T2krZEhGK2F1OVNKQlg5YU5TaFVZYXJmb2hmREM0Vjk5S3J3K3VySW02alczdUcremRmQUJXWXVadE1FcHYrOUJHRTEyU0sxZytjbnBRV0ZUdHZJbG5yKzQvT0FGTWRJY3J2eXhyd2JDTjlDMXVSV3QyWnl2YXFaSWFVelFxTWhGTlhkdis3d25uMjBEaG1jazY4VTZZZy9CSkxHM0Ywb3JaSGV4QXdvNHdMOG1OSGhMdStybzlVZTM2MUNjdE5lekRVTlVsWDN2dGI1YnUrN0F0VnNLZkVvKzRwbXBjOGszb0VYNlQ3bGI0NEx5TjRyNjN2QkFKcEtpbUIzTndHcTU2c1BiSnR6WnVoSGttMEM0UVF0VjdtajBvR01vSGdXcjI4a0hOb2Y0MVVuUUxRbElMNEtxcS8xZit3YmdrL1prL3M2encxWXZVY08yK0pwaGdYQXNRNTliMytydzdUWlhYbG8wSG9EWGtycmJ0T0xzbXBVR3J3SjdpVzZTNWN3S1FERGRpbmgxcFFQbENwRkFmMDcxRElTcXZFMXdaUmF4ZEFiRWFQVHo1WXE3MFpwd3lFWFBONmg2OHJ6UmZwRDRPTnJsREpqV3FSVVR2KzBuSUEyYjYzQmM2T2JVRWVGUktUUmg1RWt2NThUa0hjL3l2WVFKMklQRGZCS1hVVm9qdk5UVk9ZNER0MHZhWi82d0RLQk80dUc0c2ZFMW9UeFhyN3BteStFUWJXejh2Nk1Ld2RQS0NMZXVEOU12dUNVbWl0ZG9VbkVEMklCTlpKVzdqTTg4YkxQNW0weFV1ejY1NW1Ba2ExeFFMTkJLUU5ZRFhjQmwwSTlwTnpNUm9hMEY2RnZHR29YYmhvTldrTzFrbXJNbTBvZVVyekx3MFBFYnBTRDlMSHo1Z3RNZmdPMFg0bEUxeHJ5MG1BTmhaL0F4YzhMRXJ1SFRESnk1Sjh2YXQ3Vy84OTIveGorMFdtaEwxNDZYRjRkbUZQb2h0VzRVTmV4NVN0bVdxbUdVNGc0YXo0UTUwbjljL0ZQRnBzekoraVNKaTRKR1M5dEF5K09HRGduL0lTQ3VzeXdRZDRPSTNDRHV0VmRHZ2dvZmxNS3ZjY2x2aldlUVZWaHJteFNnU3FqMFQ3T1RsdndvUEEvUXVtUEFvdEFMMTg5Y2J3ZHh2TUhLZTlhWFozM2t4RkhTUUlodVdheWtHeHR0MGRqL1ZYT1NpeE5EVUN3QStRb1Nhb0p5WXBLS2dNTEgwRUd5VjdPM28rQ2licUZ2RExsTWF6VUdZd3FIQWRDOVlSVG14QTdLREhNdFRGeDJXNXF3N29JSkxQSW82ZXdPMnhZQ0pSWFVudzUvdDdPeHZxZWdWT2NyVkgvdmw1WlRzN2JDRU9pdzI0REwrYWpQUkVqVEd3UXFySlhQSEVqUVZIcy81bndpYkcxK3NIVnpuQmEzSW9KTVJ2VG9xT041c3JDSW5RVXU2MTBVTUx1Uk5UYkxqbzRTMDhSKzlGVnFnZzZjQ1ZDQTAxKy9qWUNPODNmQlBWTWxkTHBOUGZTbnRTOHE5V21sMGdFeGNsYkh0R3BOdzZpSUNUemhSVUV5MVd4a2U4bjdBajJDbkpBN1ZCRXJPTlQ4UHE0bEx6K3R4LzVwdmZKcVE5K1FXT3BBQUVZZUdiYkpTMFpEcWg3NFpQOXdOMTlGMmN0ZDY3cDg3bzBLZitzYzJPMTRPeHBoaTVucjRDRHoyaVIwL3dqRllJVHd6enpDM0dEb2QwM1RFU1F5akdvbkZhQlh4V09xVk1Xck11Ty9EM05iSnpqSHhSQnlLcnl5a1lLTVYyeHBIK1Bwbi90OHJMa0lYSEJsS2k1QnhTRXZIdDN5d3NtQ09aL3E4c2E2TWlZeDgrWUduZEJJTmZVS1A3eWJSYkp1U2lCTDVTTzlUaG5OV21hNG8wVHpTMzZMajNPWEltcHZSQVFtNTFnSXp2UmlvQUIwU08ySExpbnhRUUtTa3N1cXMzUjBqT2xZbG1nd3JBQml2endqQzgyQ2M0NmhtNTVqYjl3QXdCY3hUekdCUWdKWG13OUFtZm5WY0tPUzExRXdCdFhXRWxBVmtHQ0JaTm1JVXpzTkVEUlo0aE9xZk1ZamxDY0tsTHB5aVl6UWVJUzlYMkVjM1dEbmNENlNuMzlROXAzQ05rSUhYNkNEL0RwZTRpdDdNYk1YWC9qVVN6ZDBOSFJyZlRIMU1HWUJzM1V3ckkvSWkrc0Y0aEgzS2xKajRseTlzTVpmOUhHcGVMNzZFZ0RhdlBVS1Fuakh3eFdxOGVNRTRvMDhZL05nTnFGdXpqbGRzTmdDbE1IcUVWYUJxa0xlUys1UXgrUjIyVkpwVUEySUxoNmozS054ZEp5Qjh1MFpsdkNXUGw3bVRYcktQYUJlZjRoNU9uWFA3SWpnaG9LZnRyRTB6NklBU01vQjhmQlR2T3hXWmg4UEU2TWlQWFFLcHNDemI0V1V3Y0pWMnBTQ3h6ZWlzeVlSYU1zbWFiWkkraCtYVTFNMFdjZ3lqY0t0TkhjbWFtSjdMMHpaU2ordG9zczU3d0xXVHNwRlIzL3hmY2lDcHBRZ3diZzZ3NTVzRU1EMjNwL3luRXNJUzVhbDdld0RuZWhOSFp5YlBCUjZRcXprb3ViTWZ0S3UrMU95YnE3M2toc244OUdPRm9tbldCSGxiNFpQWFg1emRwbm92aW0wWDNrY3NaZm1tcTA5VE5keFJicEJjS0ZiTjFjUVRIU0YzM3hLeDR1ZHZ6VTBtQzRRNjNCT0w5UUg1eXpVR1VHcVI5V2EyOXJySEpjaENjS3VMV3JZbmx2STcyZ2ZYQjV3K2MwRHpWNzE0NzRCVDZySHJrYXlIcDVpcVJxRFpha3VUVVlVbmRxTDl4WnN0VVlLTXJKelVLcWxmS0xTVmlxKzhHQTlLNTRxYlhMRHlBZW1YMGhNakRsbm5qQXRFdGEvUklkWXRSNnVnL215U25qOEd3UTNHS2VJazFVS256bnBTcE00NnF6UXZOY0hLVGZDV0xBMVNDNkFmNjBRdElDbXBnUVFCM3cyR08xUGgwL0JHZzFvMDVwdzVLMnJocVBoMThqajZYc0ZHQVJudC9kWU56RDRROE5ESkRldWw0OG9FRUNwdXN5Z2tiSWFnSjk3ZVo0L0Y4Q2xtb3drM1o3TXNDU09FV3FuVFZscTJ5Q2IvMkROWGoyMFg5d0tmYUdwYmRuamF5VEJSWC9wc1J5RmpJdndoeWlycFJKdlNJV25DTzZYcTZEUFBsVVJQbW9SbW1tOWl2eVdDQkh2U2JlWWcvNFczNGN3Ylkwak5EUHpOWXVRZDVYYmVFYnZmUU5hMTVwb0Ezb01Yd3RXUUZmMmEwV29YdnNmR0lrZ2xIcU44NEZqd0NWM2xXa3dhUERpVGhTbTh3S0tWRHR3eDVndzh3QzNob2lmNTVtT1dhU1AyMWw2aUdwZ2IzUGhVUkIxaTR3Y1RlNmxGS09XVHJoRUVmREVVTU9abTE5YzJDanBJYS9nUlkvWVJJUm5HdGFDMmNDMXBMQnFOc1lYakVOQ1lydG5mNHZIY2ltaEhjRXhLN1Noa2RUdUJrc3pMU1hCckUrcFFDVHFxcFQwR0gycGdXZ1drNVRFK2cvbE1WWHpUMHRYNW41WU9Sa3FlMGVqMjlVNy9BZUZhRGs0Mjg0ZE9VRUNHd3JZd0tVczAxenlmRWtyNmdlN2g5ZjZWT0lvQW9mNjRlci9QNGQ3TTNnTDVFSFFEVEVRMzl3L0NaWHFvdUpvUkRlbGJXczVpbEF4c2MzWDdmUnRsaURiQ0gwdkVsdFh4NXplaWVwa3JvOVVNczhyMW40WmhwL0c1UldmUWFoYm9GNDZ5ancxeGg0ZG1RWTYva1dlT1o1bnRKaHZBL2wrRWgyNVorSzVHQVJ5SDlRSTVMYWl5cUwrbVViVFZRaW5XNVQ2NjhjRFBOTVlKbUVCMUNmUzlGY3AwYlJUbkVkQ3VUNUVUbnZHVkRMam9XTGdZZDhwWnBtQTNCWCtTa1hTd3dCc1ZLZFhRalpjU3ZEQ2lSL0VyZWlya3EzREFvME5LdzZRZ3ovVU51T29RUDdkM05EZk1VQjlTNWFHUWoxRFhDdEpnVzFuZ3NZbXY3L2V3N2FNdC8yVG1UQXZwME5ZTENXNVNMeVZkVmhBbm12VnBHMEh0S09lYXlOVmtIMzY4OU9KanNRS09CN0FBeU52Tm9CZ2JTaGlkaUZ0b3NwM0dNZXk0QWRjeDBYUDZyY1RBcXB5d2xpVzNmNmMzdmZxeGRmdXdTUG5ic05oTDloalp0emwzRldmYUxJMm03b2dlclRHazhlKzU2ODFLcUJHcDlPSURNZTJFS0w4Z1NUR3dtV2JCZjlnekNCNzJvWnBtelB4Nlc2dTBETnFLa1VjZjVtcExsVXliS3RKZHVMSXNKSzN2b3NYM01uTEYxMEI4UFl5V2ozZ2JGZVM3VEw2enJOZSsvTHZYdjdBa2hUWFdlSkN0Sm1hUHV0MGhLeEtCckdXTE5KYjVXcXRTd2pVZ3J5VngyNTFUSU9OOUJmb05pamZ2THBmWnkyeDZzelJYY1oxZlQ5S0JhZCtmNnhlTTNoU0dBRGVBT1dVMHVhM2ZROGQxZk1GREo5V3g5d3hYN1NYRmRPNTREbHpiY1dEWDBDdlhPZjI5eGQ0d3c0Z2V2WUF2RXBVQzVMcTU0azQveXltUzFWYjFLa1RXN2NXZTJkWkZ0Z1lLUFQvSFNqbVJTL0JHVFZrdGp6bGE3V1A0OXU4MGE1MG5nTkduUFc0TFphZU1OVk84a0t0dGI3OEhscWk2RWU4Q05aMVBkZ0tBM0pYKzZOMDBheVVPVkF3ZWpaZ0NnUWRKaXNHZ0FKcG5LL1pWRWtWV2hVNEdxUThvYlhhK2hGZlFPZCsrRVhUbmt5bnNRVURtVzF0TkFyVUdvZE1GWGwwNWlqRkVmaHdiUFhjcThWdllLUm5GYksycDFob1V2SkxPYTFERnJnN1VGY2pTOWh2SWdkaVNyTlVnak9QbG9yZGhCRXQ5NWgxZW00SFRwcHBCM0pobVpDME5yLzRvZHE3cWwxQnByMEhZdmFPZGdYZE9FaHkzZGtoUFpLMVhjNjB6RDFqQmhlN1kvODYvTE8xb0toemw5S2FMczd2eW5taWVwZkxIYjVDdXJ1VEthS2ZreS9aOTF5UTNwMk5nM2NTeVRrZU5WUHJQbnRZME1hZWdKcnk5RXZPZXIwcUpLYXRtQUNnOHVpWjVXUjRnWmtOQkUyeGtyR08xNm5LN0hjYXRQeUhnRFZDaTFPc2hBOFdCNGE3SkppcEs5SFhKeVlJcHkxcTBObE1MNC9BcGdFUkJCeDVWYkVPVGpMQ2VVT21lQ1dPT2s5djJFU2YrVWtxTTczQnMzQWljdHFyZHd5U2dVV3EzdXFwYlRmZ2JpRU9BMjRSd1pROWFOWXFORlk4Zmh0V2o0TDhjNWlzUUEvU3REbW02dll1QzNXVzZxTCtLREhhVjVyZ2F1M3hWUGE1ZWlZOW5GbllTOWlHUGsweXI3VFdDZUFpQ0l5VUowZU5jVzNEdnhoV0FyK2xYUTM2cFBDYVg0Sm5aM1NDbTJ6SEprMW5mTm5ibEdYWE9MMmM1b2xLYWJvb0hUM2JqM2djNmpjbzZDTWNYdEFJU2w0VzlIWHdPbzIycXV3WmN1eGVKYzhDYXNNQmczc0wycXB5bnN2RHpHMU9GY2ZsQkdiOFJVNGlxSmJERStaT0RpZHA1NUgwT09vRnlCT2lGQjB4OTgraCtBYzV3TFM4UjJYN3MybHNlUmgzeGgrMVRUUDJWOE9uWHlqcHkwOFJFaUt6ZWo5VThWdkp3SU9jQlk1RURMRjVLWldQazkvbFBHYVlBWG1vMFh6aFZQOXR2R1pxNEgrdjBkeGNlVytkZjJINlVBNWF2VGs4VitGRWwwekpoeDRDV1BRSzVJaUFGR1I1Mld1VEp2eHlpTUZKekRPWXJBMmNCd1dVTXVBUktpUWU0N1hBdEIyMjAyMzB5ODBSazdlMEREaE5IbWxXcWlaemhPMUkyVWVUODFVeEpkM0d0SHJNa1dyeWVFSGMwK1AyZlIzWDAvVkpuejlXNCtUWHVQMi9TUmZzOWRQOXV2bDlWbVlmdCtrTC9aNjUwK2ZybGZWWUFNYW9kbEVuaVcvNHFBbkxTSHRoVmg5alZQQ1htRVFGaUZNTVpxZjRDNTZmZS80WkJESzQ1VFdmdzVMVTN2UjVJaHJQQ0w4RGNGeWZlWnVNcEhVc2FRMkFoaXRVbVllNVYvNXJ5c0NvYXdDOEU2ZURZMFl0RmhqT1pWUUE5MFA0TGRuZWJWeFlwZmIxN2NkUkVuN3pnays0cTJUQnJlb2hhVWY0R0RYQnRZeEpzaURCdEJ1cVF3Q1o4TSt1RVl1SGJzUXQ5eFdYdWlwNGNIVFkvQVVNMFlrZlhyNGlwbG5pSUpNSnp3d1lrSDBXVTk4RFlhOThSaUtxNjdoMUpnVUlaUWpRRU13UUZpbTIxS1VzSG91anRlQXYzODdaZzhVT1NDekt4MHI2RDhOcXdveFVXblFubGFNYTNUMk5pQXl4R3JRaTJ0d1pJbnFTaGhWb3NFZXdSaW8reHlwV2EvM0NzL0FiVmg5LysveWc3Rm9nYlhFMmJrNjFKZnAzOVVjbzFiMXRWdWUvN0JnR2V5ZVdnaFlsWGdKS0pOMXMwTDRCRzd4WE9FcSs5eGdjSy9wMlB3ZXFoSTBub3JKZGhRVHU0Q1VibEErZkgwSlRWU2dpdUZ5UXVEZGRDUkxEZ0J1V0lxaXQ0b2NRN3RxNWxnQXVySnQyMlI3UE9WRDNDZ1FuQS9kYW1DVHpGd1hkR0RvakVmOFp5dFhNblBLQTZlV3RKck5VRVg2bzlEam5VNzVNS2grb0J3WkxOQUlEQ1pGQ20vaGJqZ0gya05LRlV2TGIrWE9pbWVZTzRRcVNiVzNZdVBxb0ZiamJ3cGNqMjBzWGNmcTA1Nkx6a3lHUGVnVDNTbDhCSDhkR1IybXFkWldpSmFPaCtqUkI1MjhpSWl0VEpkTlhjRktjcFo0ZHpKV2NrcWpOV1pNWXlRYmcrL3lJVi9uc29wWEgxbE9RQ3ArNVo4N2o3RjEzM0E0YVZHK2kvWWVlMEp3UGVXbVVhbUx0SWdKa0liVEpvTFhoaVBOb1VRWnVMT2VqRXB6eTZTZWdwWWc5eThGZ0huaCt2L2JKVm8xamUvM2Z4UXdEbVRMSGJIdlNpa1BZUGZTQnpxVkU3b2M0c3BqRExleTZya1Y4b2FCbHhETk1EOE9mRkg5bktWc2l0YXJOSzQrczlBNVRGaW9Zdmdxd2NTeUxrbjF0SUlTT0srTXZaaFN0M09UTnF2YkpFck5aM3N1YVp6Q0JmMkpTR0JtdTV0L0psdUovNm56UFJqRnY4aUlTcEI1Z2pWRnRwa0RQa2VGMUkzT0J3K1RjbjZQR21BVHJTcXBNN1JGZzBYOUNGajlBcjhkTzNxMVlOZDAyblJBRlR1TThUclNiOXJzNlRUd09nL21ITU15cVQydVkzMmtUeXFhMU4xK0dmbjRxYXBQYlFJZ012WTVXWkh0YndzOHlac0t4eUtRL2JiYjJncDVlUGxpNWVJTGU4RHNQUXNBdWlZQTgyVU1iekt0TVZZZTk4cU9hL3lObUdTcFRWYXVNbTAyM1IxR3p1eU1YNURlcjZnQzFDcTJLWWRGcko2Z24vUnRDT0N3Rmt3N0FQcmxpV202VDRBWVZ4TUpycXNndVRqYjFKanZtb3Qxdm5NL0YzZ2tFOXo3TEVXMkkyZy81R3gyd29JWFp0dVoyT2FsOU04dVI2OVJTZVNBaENIMEFhNjRhWWVwNlhSV0czdUtFTGt6bSsyTmY0NUxoOUoyempScVZqNXFjZk9NcXl2bFlTVzByMk8rbkhNSTQza1RWVmd5RVFWRHIrWUc1MFhDTERVc2cxV0p5Slo4S2wvY1c5bzM2aTVYYWZwdDF6bWw5VU91UzZxQzZzL2hFQkdPY2dkU21pTE9oNUJIYjFjYS9RUFpnNElITS9Mcy9CZ0NMUTlQL1gveEU1SmQ1a3M0K1FoUDlGdFF4UThCT09oL1VJTDNpd2RucXFXVDZoNUI0dTkrR2tWUnpUYlNCYmpRRVhhRFBUb1pRRS9oM042UHo2ZVp5NzRIaXpRWWt4M1NsZEE1NmJ2bkVyWHNkRk1GWnZNQlc5ZUFnM3pSbnBaTnRFang2cll5dTNYeC81UG56VzVaZzdJd2VtMzV0a2UrZ0pwRG1HQW40Yjl4QS9Jd1ZFUlBYaFJSUmRNVUxHdW96YXhoczlsaWVudGRhWmpDaWphaFlWb21rMGZJNEIrVHNZdFdQdGhIeFJvaWE1ejJsNXN4MnRNRGVCbGl5NWF1Q2VlbTFySC9qWGdxSE9LNzIrVzlrUVYwdjd5b21WYVIrbHBFVGs3VWtaRjQwd3kxcEJaYkVvUnNUd3ZqellvQkh2TFExZnpDeG1HWjJ4R0p1Wm1VVHpCZWFUSVJ6TUhNdlBVVkhvMGJwVG1mMUZKclNuUTQ5QVdFY1R3U2oxTG4xckNHcHF0SEw2REpha3RseC93ZGUrTlFtbFc1Wkwvb1FObjk3cXhLT0ZERGRWYWJZbDFXTjJtR2JNWWhJb1dUMHZ0K3c0YzFnZmlZeDhhVFJSNTFQUDc4aUQvckpicTNuVVdzVHJBNjdESy85RG5rZzl0OFhMOVNyTzJSU2h0R0F3WkxRTS85Sm1EMDVCeWoxT1lBM0tSV2F1QXRpMWxDZmVXSDRHQk1DakxIOURJVDFIZlF6aDhBdGdVMEZjanhRb1ptNHdTR1plU0hudlIwM05SOFZYS3B2WUdpS3JzV0gybXhoL2pqcGpJUmdicC9BSHp3V0Uyc2x4ajBMckZuL0ZYbyt2KzVEZE52aDA5YzA4eC9LZFNIbVZwVlY4L0M1Zk1lczE2aS9oZXl6Rk5za0s5VDVnRXkya0Mvc1FBby95QzZnSkd3eFFObU9oVzZiYzZiVFpJaWl1UGR6bHZVK1Nnb3BEZFJ6RDBLT0lob3JNbkhoeHY4UFZSNG1LWCtWNlY4aXRSQmx6b3Z6WW0rcDJhSWZ3VG9pUmMwenZWZjFPWC83bFUzaXRsZTV2eE1GajRTMlM1ZHg0OW1pbW0veXN6cWozWUN4WUllL1NGRkMzdFNXdHBKVTUxV0hPdEhYa3RSSjBQdklwL1Z0SUVhbkd0b3RvcTh2U2lzbzJkQjFKajF4ZEk3RElCRVNGNlQ0SjIrR0FMZENUMlhIc0hVb2kvek1MZ2tFczd1RE8xeDlRMzk0ZlJPV3lGeXJXY3dwWWlQSHlvbTFET2czZ2tBWXhJM1lYTmlhSFVhUzF4VjFhaEZuUkl4U1NnUjAraGxSMWcrL0ZMUGE2cWZvS3lyVVE2MG1Ob1A1Uy9xbldJeXR3Y2gwZUY0blV5SFkwNG9VRldyaXlaN0J4SVFGcm1XMUt2eWM2d1NZekh0Z3hQN054cW5ab09Ddnhwby8xVGk5bE9BWHgvYTI2cUc1OXVhUEdsVnZWalgyRHRqTTRVZmJyRTFWRzBzWVJwYVFnVythRzZkMnJCMWw2emNocmUwaHliYm1yUDBmMlhCK1FmUlVRZHkwTUhVSlpjYTMxTGN0VFcxdXp6Q1p6WWRxYmVJWU9IOTFpbGFlNDVadGh6VEhuMmtORG1neThWNmtRaDB0KzFHdng0UzNYSlp6UDhCbG93cjFGY0FnL25oblFWb1Z1YjJpTDNuVzF0T3YwRG02THBnamFzd245TUgza0kza09mWlNicHhmZmVJbURLdHYwaFVmL0tvcmJsbkZoYkpkbDRXTnBoRWt4b3Jlcm9YK0ZpYSthU01hTFpsWHFjcU5PSkpGK29ydnFrZVIvbG51Sk05T2NmRnB5cDNHMTJiMlJ3THN5dEFTVllWb3kySGlSc0MrZFJLQU42YkttOVJxd1cydzB1bG1SZjNhWnlaZWhBbndqdk5kbXNqdHVJYXhHN1VzVUI0UWJEUUFZM0pyMEhHbWRKQmxwMVZxWkcvQmplQjlVREZsaGRMRkNMODBjZG5adzdHNEQvZWgyV2haaFlsb1ltQ2d0NmpBemc0d0NRc0FzZ2E2OEtHeXR5dEdmMnNBOVAxVnFRYWxsZEtmOHpvVVhqR1BCaGtwK3hobWEwRDdjK1VYeVZhSGl3RlpUVk5DbkcvbkZiZ2grVEJjYldFN1pqRHNUaDVpM3AwMmxIOXZWTmw3YkJsZllXM09qbE0vRG9iUnBSb1lncGYwZW9TUWFIZFo4NjN3N29RNEF1d1RBUzdXK0tNeFRVUGdvbEpyVk8rcjR5bjMwTEd6bkhXZ2k3S2xrOFU1aStWU2I3ZjNJbXlCZERXdVVOM2xMTkdQNVJaRWdQOGdQaWRZNS9GOEtXRTNHdXBDMGhmcnU2akdwYWUvUnpWVEdnTVo0a3pldmpjaTBLTFNXcFMrUGN2OHZhaU8rVFNaVlI2MU5ralkzellxRFZGemdhN0pXSXVOYytuQjFlNDNlTmxPZHBaY2pHRk5aQnF2dWl3YjB4d0YwQUQ3TzZjd2xqdzZXUCtCYlFaY0QzajJvQ09sMUVNUWxwTGFHL0wxOEkyd1dPYVJtNEFheHlGUnBDQm84T3R1WXBWYTJOM1ZPMnhFa3dyR3ZlUGxmSzVTNDNtbzNMdmtBc0haQ0ViWHptQk1KdzJJSWc3QXNSb2dacHJIUkhtUGc0ZklMY1F3MjRNVm5sem81SXh4b3pQUEZyQUpWbHhmK3Rvdk5oOElMTW1SWHNteGx6cWNYblY0c2FnUFRJTmQxNXZhYUR5OFp6R0dqUUtlbmJ3ekdjUzVySCsvL2M0TVc2M2x1VFZsTWQzZktucFp5SG43M3N4TGlPQVdQYzJWdmRjSHF4SldlR0JwZ0xFSnU0TS9kVURzMEwxTERDYlVsT0E5SWt5d2R6akp5WmU2OFhTN0dsWGZRK3pVODYxQTdrcHFoMjYvWWhHSlF5RWt6ZFZJSHFnWng1WjNPcDR5NHRxZmxFbFlRUVlQM0hCaGZJTTZISDJkc2pQYzMwSGdFZGdCN3ZRM3NvNjlweFFjSWlwYVBRRFVtOUdyeGVNSjg1MFl3QnFvaSsxU1dhYzZ6VVF0NkZFU1JYN2JaUUQzNWswckFTN09SWVdaQ3I0RXUzTEZUV0QrRGNYVmlOZ0lXb1ZTTlpHOWhLQ3JLRDh1bUZSMkNpaDViRkJGUjVsSXJETDgzVWV6RW1OMisvZE9SdzBkNTVoL0EwdUJ5NGV2cUdGcGcrbE8vclhhc3EwRUdJSlBjY3NKMndWN05FNk1WdWcrQU1HditDV04zVFlSUm11emFjdkw5WkVqMGhSYktsTzlpSCtweXhlWEduVkpuZExxUzlHN3JNaGRPWi8vUEt2dGlOMUZNYnVRcGkzaTBqTUV0eTZTQ3M4Mkt5NCt6aWVoVUtpdHZNSGVEVkxYdUs0NFJmQnRrQk9TSHpYbEZKdmpLZHRwWHZqSk1yTkZiQkszN01pT3J4ZFluOEVJYlBSMitPaFhVTTFLQTlUYzlNNitud01lYnBQMCt6YmpyOGpBYVBmVVZVdW1PYzVRb1AyNEI4ZFBIUmlGbTFmRy9zekNHclNycU0vWjJ2NUtJOGVFTWNlRmpySkZhaGJNdmZvc05pSEE4SDZrYkVwMkxZL045c04zYm9hU0hRa1lvT3doUnU3R0NtejBMSkRXNVh1U2tNOTJJdEhlRjRDRmFzQlE4d0hwdEt5bEEzOFU4a3Vjc0ROQytQVHNhN2tKdXprQlR4U1FBK0ErOUNjVkpaWFNhOCtYVndsRjNnZ2YrejMybnpBdlRhdWxuTU5LQTM2TkNIdkRVd2tsOURsQi8wV2luY21wc1RyVExodnY0TExPWWZDamlMc3YxSUhZOTZMR0pGdEFhMXREWnIvbnFMcUhFWERkVDdkWlIwZnJWK2NFQVRGbGw5ck9INmp2VWZRN2VwQ29mcHdibFQ3M25HT3A5ZnRONlBEQzViU0dsSUVQc3IvWlBDRkpEWVRzMDYzOW0xSmdwV3EvVGZCMnlTdkhMdEtRc0lsUFZGQklQTC9vdWNIRWY3VHVnczg1Z1JGTi9LWnVwOEFSZzdaVmNGOE10c2dzbC9pRU9pa2ZJVnl6azhSTWkza3FZeFp2T3h1VFBtWEp5Rzl4TjAyY1RSZ3JFTkNIWXdIa1Rxcm56aUhRT1NxNC9yc2xQNFN3MW0zVVpndkhjdEJtUzBKU3poUnByRDJBdU9KYUVHNmkvbDZ0alZjK0RlcGViU1krckI0NC9PdHFzL3kzMTFYOHZuQTNzenkvNmhOVEpIK1J2d3dGRzNEUzBmRit2eWRJOVFINGlrOCtVVW9KUXQwYi9ZREUvZkoyemxRekg5aWIrdW9GbkN1VFR4Yko4RDZmQ2gzN0xORW5QSHFVVGVBSDk1THY5YWJKWDNEQTlhK0IySkRJUE1KZTJnL3B0VkhYclBjN0FrWVRZajBvdVZ6SkZPUjJlODRSVlpoMVExb0VQbStnNFk0d1VPMWV4RDRYRlhpNWo2WndOdWF0ZEFxTDZzcUZmK09pQ3NJeERnSThCeWRjeStPK0I0S202aldaYWphbmloZjNtajJ4UVk3K2ljbndGa1JWZW02QTRUbmpBbmxzczRzMGExSjRRZVYweFRCaGo1RlZCM20xOUlDdzFtSm11YjRNUEVDVkpHRTIySzFMRmZWcEFzeXExQWpMMHZ0MXFLb2JrSXlMNUx5RFZLYm1VKzl3MVRXYWJOcTh1V0xlblhVaiszYnBTcXF6a1VYOW01dk55ZWJQZHMvRXpraHdjSmNQREhrdnMyTjFGck84VUorckJmZDlldndPRGVPZFM0SElDT1ZSYU9GazdnYUVrdWk5V1JEL1dYbXZJRlBNcUIzdys0VUYrSjZBckJRUmZXMW1ZQU54c3I4SGN2a3k1WGpFTVkxZHN3MjBTclBDODVmOXE3cUhCUHA5U3p1em94RmZlaVpHVmFWOVVONG0zcm8ycU9TVDJxeHdZdlQ5M2hOUk1WMCs3YUVpejVzRXZDQnl4ZURoR1FNYkNrZVN1VTBGZ1RDZnY0Yi9US1EvQ3pya3d5VkIveHhGT2p0Y09IU1lLQXpRYVR4K1ltRDN4ek0xYWFZMzl1dWtqTHA3M25teCtOSFBjeW04MU1tL09VWlVjNEVGa1I5NVFwM290b2M2VkZleHZzcWdlQzB5V05sS1dsU3RRUDJsdHN6M3l5THdabXVNazEwMlNQcWxjTFhBWTJObXJXT1ZEL3paTEhQU3hkQXpVTmdmWmNZVmpBdlRuWElkRVNyYWdxeDdDNGRPamxhNldBOU9Tbk16V1Z1blBPZ2trbXBHeFFJRzA1NnVieFo5akVpQk0rWFhsOVpuZmQ3Vms0cDA0QWxWZXhsVEFwa3AwelRxTURlaTR3TFU1cHo0eFIvRnlwclgxNGxEUGNCSDlsMG0yYUdPMDJlR1ZzOUZFLzhneVgwdFFvcC8xbDNQZjltWGlKRWJON1NDQmFGTEVDVStiZTZ5RS9VdGY1OEl2TWowY3hjWUs4Y242Q012VWtDeHJxMHMvSDJDVjJsOEIwMlFYMWVqcWhtV0NlS3pvN1hkL0QyMVV0Tk9IMjA4UHk3T1ZuOXNKT01aeTFPa2JqeE5lMER0OXdqaDhMVzNjdzR1TllWRi96ZkMzcG14MDdMaWIvaW5pd2lHdEd6MEJDd0dRb1RXcmM0NXdJcnFva2hiNFJXaDNTcHQ5aHpDUVd4WHk1MGQyTWxXU3UrMHUwbWtDeCt6ZXZML1pOaTZ6SGVWdTVKRHQ2Q0RHaUtOa2dCcDN3empTYkJ1a21sazgwb3IzbXNmMlBNZlF1MzhtTU9mdGlwY1hqb3B3Wlp5UVl4RVMrL2pCaTN1R0lpQzdId3B1bWVmZW9Eb2dic0xTbXNSYkg0ckxZYWl3VkJvczVUNUxuSUNpK3prdkFXeWg0UEVKTnM3RG02UXlqWDNXOEtYNUVNajFNNVlqbjRrSzl3Nmk5Y0phOEpGQ3BuL1doM0gxQ2U1RDlhdXhEaVF6eXlxa1UzNHhhZXRxMThSNEp4TWJ2UEFpQ09jS0wxNktlSzBvUTd6ak1VaWRZWDFqU2srWEg1SVFFMFNoRzdoZ0wwS0pYSmlyQ0pNbVJtZE95MDJwaUQvUkY4aWlhRkcwcW91b0RJQkRCcSttSWxTV3hSaHFBZjNHcUQweS9jU3lGMys0ZDd6UzFlT3poRkg0SGpIY3VmNzVrUGtCYURXNWZUWUpvMjVkZ1N3NWI1RU9UQkZ3eURYS3kwMnlPS1U0U1BWSVoyOFk4YmFZeWFBOENHeFlTT3AzMUNRZGJTUVAyQldaSkZ0akRkZWcyKzRVSzNUaFRnVXJqYmN2SVRyZjdlSVQ3RDFjNnpuVDFuK3l5dHl6L3JPcVdhcndQOXpvL3lOVTRlQ0NLZWMxMmNGZlVYNlRvZDJaREU5WDBodzVPcDZoTHArTkR1SktQbGVxVlR3N09ML1ovT0N4Y2QvRmxFUDk0TXk2cHY4elNaWnBhQ242OHk0cEU4WlY3UWVhVyt4YWMweU4vOTJOOXFmajNOTzJDYVE0K3Z4V1hhM0E5WjBqRVpTdjRKOWh5Z3VhYkpUdDRaTmticjVDank5aXpRckkvNUhpN3ZDbzMzVjVJNVlPSW5jTXZCWkZVZXZkV1hkVnZTaXYvOWJOa0hjWjR2UUlaWWloNkY1TktTY3RUV1hBSm1ZaGs3QUR4c21Uc2UyQjhwZkxMQ1A1clVqa2h2TmJZWFJkWlRlV3B6K3plQnl3SGR2TElzVFRJekc1bEhNcDkxN3lwTWFnSnA2UVlpMTNrbEg0emN6aHdRdmRHK1NtNmQ5RXJQd1lvK3IyV2pyMGdkNW9lc0U0VVRFYTN4SVFvemJqVFptaHljQ1JiVDBCNE5Ga2ZGZ3F2V3BucW13dUZ1QXArNXI5eWl4NzBzSFllN1JvZHlHSlU0V0R3TnBEeHJaZy85dm1sNU1uY1kvaDhBZG52OWdwamt3bWRwbkhFRU1OejFqc01SQ2tlS0RPZmtBSDdZRkpveElzajJ3UVZoU0QwY1RKWkVMaytIWGtyL1VodXdGUCtoSHZJQzJtci9Eam5hR1BYOWNVNEdsZExTQ21sdldORXpVZnFMd2lHWHFUU0MraTdYbVg2ckMyM0ZvQnllRGJjRkpzY0llN1BmVFdPQk05ZnQ5SVgyY3hmWDM4UWgxNnJJYjMzNVZlUDdhK2xKNE5UamV4cHNUdmJrVlIvdGF5aFVyekFIc3NnQ3c1cHF6Smg4WFN2dmVGUlNqV1d3QjlVQlRYZjdtaDViTkgwTEI1TlBydlZFdmc1L3J5UkxXVzhzeTRSa0JXZnR0TnhReWxzR3N4SnZzOGxPNEUwQWJZeVIwSVRidm0wODJvRjdaQmxROTNIUlZPZFRMUzRzck50Y3U4V0JySFQ4TWxhakdWRzRsaHNaK3BnbU9mWnhuNTZTQ0hjR1haOVZwd0M2Vzh5bi9HenBhY2MxdUl0NUFCWjJWclRhS0dsUWpJYWgxRGZkWFQxMmg4eUc5Y1p5OXU0MkU2TEtLTWVvWVZsd1NPL01jVkZRVkREM1JuYlFJMHBWT2l4L2Fjbld2dWVOOE9ScGI5VS85eEpoVDhmdDVqNXFyVHA4VG5nalNHZEt4aGEyU3FOK3hHZzcwdXgyTEQyNEFRMUZlck9taHRlNnU0WHk1czBYQ3gvRHoybTN1V25VL3pRWmJkR3RwS2xETnpKZ2NZODNGUWpFck1PRzN0SVFOYTJuWFJnNldZQ0NNMjA4UE5hVnh2VFhPOS9nckVJd3FNZFNSZWRZVUpzK2t5YzVhM3d0a2s5VTJwSk4vSlUvSkI5MDMzYi9qT050T3NwVVRzaVJrOXZIVjB1bVdRVzVXVUtjS0VweU5FSy9BWDhrdlpoL2JkRzh3eEphM29NRytOV2dneENEWC94TURmcHl6ekNTbUFmNkR0Ym93MjNUcFQyQS9WbG1pRVBuM0RWZmt5OFA1WlIvbldpKzdmYW4wVlRiM0RXdCtvWWdtYkFFbnpWOGVRYnduQ1VlZk5sZ24zN3dnUnkwNUZhV3FONlcwV05BMGk1d05ZdFJ4SVIvcnlOQlVaYWFhVk1hbzBmZnUyS1J3ZUxkRHdwbVJqWGVqN0lHb00vU3JQLzAyaHZuRG0zNzBNYlBCcnFBTGFoNHZBcFZCak5lN3RqYTNlWmlqeUZMUnZYeHBtcEhMM1ZOMzFUcFowa25tSy9KS1Qwc09QZEJPLzBUU1NCWHYvRG9KUlJaQ3RteHhDUk9pYzhWdlM1c3V4V3JFc2hmdEtxQ3pCSGhCZ3Z2T1Z3VWJWakt1SUR6UFozSFVHU0psaG5UbHlJSnE4WWZvTjF4ZGtrMzloaEYzcExHT2JIekh5b2FhRFpWQjdmbVpGWFFZemlHNTdFLzF3aEU5MkdKeHNCWUY1eU9mQTZXOE5ERHBHU0xmNC9IRisyN2VYcmpNMWhXd05iNllONVN6VkxBSWJFamFoNm80Yko0eW9OcXlFd3NOeml2MDgyUXJwMUkxWjFrc3lGaFhia1Q1bzYrUVNSd2xjRHRnbWxhY1JzaHhTREs5OEZvazEvbGhGbWtoaEliT29Rdk5tWFdjRVFvNzQrL2JieTFLOGp1TEFmY0JYM25yWVVCWDJ6VzA1bkRZcldTSnZCVDlkUi9vSHVBUmJqbEN5R2x3aHBPTzAxWDltczlFRGJCbUtvYStBMEN4SWhMRTAvOFBaRlBkN3NUb1kweTVwem5PSDhzUklIbTYxdU1ER0N2VDljT1F0VTBnUDAwcy91eno4QWN5eXpnOHFvSkFmcnplZGJnOVh2bzljQW5lMnFNaDFsVU5GeUNtUmNkQW1ndEF3TzhIdkFnWmZQR2pvU1IyTHB2a2MvMlVQYzh4MTRxNVdlQnI2aFRDTFhwaTdaSEZVc1NNWkM3alJ5OFdjSDQwUDFWWlNkR3RrTHdUOWtGelFyVi83WjRUZ3BQcTEyVGZqdFZEZWQ1TXo3TDhIQktwSGQ2NnFkZnRRd3hIbUMzSFJ6SUZpUjN3U3JqVXQ3ZkU3MTlHRklldHV4WXhmZFVmODhIQldvYVpVRVpLakE0M1ZQakRpTkVGM09CTTFsSVQzR21Sa0lXRHJWQ3VvM0x4Wk1FYjY1ZWtHR0N6YzdZRktpTVIrRjE5SUVSenpBRzI5THFpYWZXc2x4TzhaUGtYWjVxWXZqL0krNCtNQnFma3RhSWYrRVczUDZhNEI1NTNSVlNKM29Gbmd0eE9UNEo2Z0pIUWh3QWJRYld0QThnR1BiTUtObW5laEtwUCt1RkMvdERHTGpxRE12UGZOZHg4TDBhaGNFYTVoWmt5eGhSSldTRVNTNWRxZW4zdGRVeFNZUnNPRVY0WlZOc2VoRlIwbzVBTkx0RHM3SnpRc3RrL0dYazAwaXE4MWNsbFZ0YTI5MU9PVkRkSkRvUUQwNEZmTmdhcWhXMjQxTURUVGRFOG4zZjBhMjlHVENKSEV4eGtyclMzNzEzRlA4ZmtTaGI4UnZuT253d0tqSElPNXdObnMwUkQvNEJwQW9nNTU3YVBnUnc5bng3Tm9NK2lHdCs0MXNJRS9tRzNsL1pqZjF5V25aMGYzQ2ZuWElkZ2Z0UzJiNkcwS2t3MEJNQ2lMdElIUHkwVWFOTGtDZXVmYW14bmNXVXZCR2lvVk13bGFKdlVCVHdNc3hYaktXTFFjSnIrSGJEVm45WUxmY29HSnFhWVJBS1FLMHB6U2phYmkxSXN4ekcyQWtza25Vc0tvK2JPaFh5TFZuTWt1TjBqSXNpdDRFN2M0Nnp1WnJBVFM3QlFFOGg5d1hrNnY5ak81TUwwcFN6djYvMU1GUVFpQ1I5cTFxVU96OFo0UXRQQjR3MVhCOS9mRDZvellnNXhUU0RnNTYwMmk0V1NpYlNWenlHcnhZbjlNN1RlekVWM0xwcnplYllCQm5Lc2lHZ1J2OGpZUmMwVWRKU0pTNWRBOE43ajFoOTlDTXRZczF1aVFRNEkvME44OVV0SGk3Mjc5MGk1Tk9ML0dGM0JKbXlSdGc3cXQyVm1pTGpRMDNDZ2xaVW1UeHl1V2FvMmZZZ3RhM0NJM2FTajU4eFBwRFVWOGNta3lJNFZPWTUxQ3BmODdsaTFDYlhlT2RKZ2FEbFN0UGtXR3NIN2t6Y2dZL0pzNHZBV0doajRtYVgrQVdma3Jldk91MU12bnJ5a25OQXErd1R5VkNWRDhTSFNiTXh5a2g5UWtpdUNxY25sTlltS0F6YUYxcUR6bmxHR0tpbGswaVR1bjNuR2hhRUxhbVVEWGRDNW5kTmRSRy96U0dSQTZuY21Zd0JSZTErb0FyZ3ZtUWc5Umpxc2hvMFYwSnllRjZ5eFNQNkdhdDc4a3JFeTY5RHB1WFAvRzZKYVFXUnFyMDJXbjdKaThWbmcxRmtBNzZUNUNuam94REVFMFZIWWEzU0NROXRyUU1WdkV0UFNib0wwc1BwRjI2bmZaRVhLS0lmOHQ1NXFhdFZFTXNjTzRlT1RzNTQ1U012dFlRZENYN3hJK0l4UnlLTUtTa2FGTkFCQURNWEs4eXorUi9sT0owU3h0em13QmtUako0aS8yU0FLUjRLT3Z4aUpkUVRRNzR5ODh3ZFNhWDlaSk1zL3VuSnc2SHg5SlVKNzllNVZ2TS9EeS82Vkh0a2FKaXU5djVweUpCLzFMZ1VKbit1Y241WTVXN21wQ3RneFRXNzBGWWQ4NHdJSTREYUdOZXRiQ1dlOFF1dWFDcit4bXliek13bVBmaHVJL2hpb1RiQUNULzBkUktuSkhIMzJGVjUvellsNVpOd1o3bnlCTGp6dWQvcTlHVkUrbWtkdXovajhiWGdXdjlBL2tuTHZPaS9UQlRjUE9RYUEzNER0dkJhbDY5RXZrVmRaWGw3a2Jac2Rlbjd6YVQ4ZEM2UE9PWkdDamRnWkVhZWNoM2ZDeEFFU3RnSXpuS0tOTmlwOFZGYVFsdE00N0RIaC9PK2RPYVdrK21ZOGo1WGZvWFA5bkxldCtIVnNsRE90dGRhc001MVFEN2hldkRJTU5UWU1uaC83RjZrbGpEeW96d2dLajl3OFNvSVlyRkFVS2VnRE9EcXFndUllc1lIVWN0S2NKOXlyeEQrbFF1bWJHdER1OUZmSmQzenhydGJIaVJmUnNtdGZidytjcHg4aXZQM2JUekt0Q3o1NzJ6KzM5d09aMjJGaG5EcStQeWsyZEdWeHlnYm05WGxrbnZNeExGOUVmWW1SVDNIa29Zc055VWtPZHk1RlphUjF4d3BDZXkvODIwR2p5UENhRHBoV0pGM0FxVmF5czJzQXFUam1zKzBqbjFQdnZ6c2pmODQ4UTlVVnViclJTMkVocWpTdE9Id0FyczNKWHY1OUpwVGhlT0NlM2xQVytVWHlUdTdIS2UzRWdHakQ1bllwME14QW9zdEFlbjZtcXNRZGptWDJxbVJmdEJVWVpFTlFCS2dmeDlBNXlsQS8vQlhWTzRteWhxdnFzSVhtRmpteC9kUDQyL09pSkppTXUxUVhQWDg2UlA5MGtuaFhibHpkNExobUw3T1doNGRyN0NvTDJ2TlVrWUFEUjFrNGFlelcvYnJOdld2L0FFNmxsMG5mSGJ3ZVFLTnBLMXpzNmpURFg2VUlDcmVSRktRdkxRenNjZ3pQWThnLzRvcVY3akFLTituOUpsT3BhM0NtSFZYeFF4SVpucDNWK1poRERWWUtxM2tTNzNxTDBha3EyZ3V1UkFoWHJhTUgrd0ZaNVovRjNmamxuMEJSbFBxTmpjMEhSblpXbnptd1R2bmZJOTg0K3F2STFQd1RCYU45WlVoZlRpd0hjOEZQRU1uSmlkUTBaQnhSTEhzRTNGejVjZnRxeGhCRDBlN1pEZjdRVElBQjdRMzRmMnRxSUliNFZ1ZFpNZnJ0eVNMZ0ErUkdudG5DUE9zQ01zZTZHRWU3SG14TEZ1cit4V09vWEUvc212TTRaSFBqT2NlbDVHcnRRSFhDNE4waXJraEFNbDV6NjFwdFMyazJITEUveWE4ZTg2MFhFcUxFREhxb0RhRG9ZdzEvYkhSbmsvNklwL1ZVV21McWwwejFheW1LU1pVSWQvMG5tMTlYVW5PbkU3dDNqd0tScFF4UXpvZ0Q4elZLSkl5MXhRNERsdStUdTJRQjVzMitZZDRWaWs5dk5OQU54bHBMMDFLNGU4WUNvZHZCREpXWndpQ0lEY3FGNE15NHUwYzlmK0MwYXhwODZ4WmQva3NmeGxlallCWnltMXIrZkdKWllBbERkSVhJM0R0V3UzYnphTlpzNTNSajBCeHAwOFVIQnNsdlFveWgyS1VRdXFNbktrK1dqZGhpOGphd0FxZXVJQTdPQ3FFdFBOYWp1YmpqMU5SalUrSE5NZGQ2bzRyNHZZTEZHdFU2bG5pK3dEbzQvQ0dsVFhtRXJTbmxrMFVWWk9ocDNUczJnVGdZVEJuSk0veFZjV3hRckt3Syt5V3NtWU5FZjVIQSs1Q3NGWUV5MXhmZlN1UmpMeE1ld042V25kNDd1NkhGR1dLajRhZVZhVlQrSGhMOEh3b3Z3MXlNY0RkejVOelYzb0RWb3F1VkVrOU9HaWhWdFM3R2ZlbThkZDVxRmhXYkdJZ0NzSmJoaW1MeC9GQ0ZYVWIrMm1jQnMxaG5NWWMwbmxWbWRtVFJZa292R3Q5Q3VKM0NXMzNTUmMxckliZFRRRjUzT0RKZGxwQU1KM3hKWWFJZUpqWW55clJQYUhpaGFiL2xxUjlHYllScVpCVUJlSGFnTEdWM1FXR1Q4TXdMY2hyZWJqODNrclgwUldlT0dEYnBIT0NnMmkwZjR5dVEvc25hYkhuci9FSk9DUGF6M0JMOEFxVnpVYVNGSGd0TU04VFVmcm1zZ2QydzA4aFFES3czeXlFMktsY2JqczkwR2V0b3lhTkJCak1ZR01XWTZQRUxWNTI5eUFkQmVqTEJjZ1RRTC9SZmdvSVh2QitZL3k2bER5Zy9oWWYrSFFEL1lzak5aS2twT3VEcFIvWUY3MHBYenNGU0lpQkg1QjdpdFZKOEMxT3hSUDhWNmh1NkZpNERPNGx6U2p5QUpRVFNzS1dPSkxoYzVib3c5a3FLRU5XM1BwQU96R2oxQytBanRLUmRTai95ZDNZdW5kT3FZOERPeWhkdGIyWFZQMUQ5U0R4dDNIa0pqRUZyRnJLeFIySU5melc2TjY0UkV5SEl6S2Jrd0RBSHJrUjhIeXRlV1NCS05odTRtbWdyeldYVE1JSWZ4TmZjREl1ajU2cmdnSE01V01aaUNobGc3WHU3RG53T3FUb3FMT3FiWm1FOGxwa0JNc3htNlA1eG9UeWhiRHp0eVR5N1pYT0RsbTRiQkhkUmhQYWZ4dVRLU3BycG9RS0FLMFFScjBvZ0lPdDdkZU13K0ppT2lheE1wbTk3MjVOdExQYzBsSzFKYkxPcmNCT1FBZEtrdUNMbGJlZDBOUXpPUE1ET1Bra1Jhb3FTYU1GUG5jSXBMa3hiQUQ3Ky9DR3J3KzNpTWM1T1MrcGlPUzZqam5ydVNkRHFxNTNXWVF2dE1ZUEh6NFg1QitFM1poVzl1N0hDdzMwb3NzZkhSekNYYkxKUzZJSzVCaXFMVjE0UkRVckdKVEsrVGV0azFrcDdCcWoybXdXNk5QUlJQL2V2cElRMFgwUUZaNzB6akU4VXVoclFNUmtSdllVRUdIZ1FlZ2VnYlFsRFNxUWxyR1Jqclk0cEJqRTFzZDBmSk1zczBBYkhFb1ovckNOU3Vldm9WMWFoU1RJcUdwS0d1YlMvM0N4RXVQTUhYelVBY2s2K2ZTUXVlZkUrdGh0OWpnQ2pxc0JTVmRlQ0pOMmdJVnEwOXZjOEthWitDSWVkMkx0WXMwN2d2TytVOFgvSlIwNU4rTUFvYk5tTHZBOStwcnZ6RVZtSmhUQTRhYW1rSGRYYTIzT3loQmVZeXFrc21ZK1NjUms3Q1hjVFg3bS9leXZZZlZrNHErVVVKT1gvZ1ppWEwrbittOW5jdzFPY21WVEVuUEhMTDUvOG9CeHlvd2Nod0NRdGE4dllwVk1YWkVtcGRiTmZSYUd4ckFjMGZwK0RyUGlNTVFhU0JTUGZJL1JDeFh2aXkzdE84MG9xOFBNbjVWMk1ob3ppTmhsdHZjZ1ZHb09qaGtXd05LczV1bXAyaUFhTjM2RUh0bVJIdVVPZUIxd24rekx5c0tEeDNEZTdYMHlINHdqaHJzRkFFSXAxZHY5TzJScnhDZHllSktpRGlhZDE3ZEsyMWFKdFJFRktVQktDSjFHQk02RjdWWHFIZ3hiTFJLR1RuRDlTWk1HRkI2OWxJVnJWdjdQT2lZd2NpRUk1WXQ3blNWMHBxTkFVR3RCYUdLb2JiYUtMYlJZWDQ1c3hHRlNRY2NIbDZibGV6MXFUSGhBaklyUjRiMjd2dTM0ZHRTcTZSRzNLL2xyRlJnOHhJMGM5d3c0Vk1uZjI0UVRoeFpDU2VkWkR4NzlXcXY4SnVLQ3lWNDlCb0Q5YU9pSktCWmFHTWdFQTFFUm16QlBOdUZsZGZjRkRKNitib0VaQ2JkWGhGNWxQWVZwOHltOThzZ1NleTBFbjRraXRZelZibXBndVVlRWo2VVd2U2ZkdDBLWXlyV0NucWcvVEI0aEV2LzluOElLRk9Ibm5CQnJLdEo2bUVnYWdDWWVpT0I4eGk1czI2VEl3YnU5dVRwQ1BmNXVqYTRKRllaUGdJODJUeTVkcWxiakZxR0FlSjd3VFVWbTRpTkF1ZWVzRFh3WCtiUlR1UmxSV2ZJY2grVGNhWEdkK1RtblJuZklQUEMxUzNhRVQyenVTUXlHY2Z5Q29PRlJCcVhJRHhBdnJxcVJUbWQ4MitTRFFBcWIzTGlISVEvdWVjV3BTTjczVWRGYkhkVjNqakQ2N2VXc2pjQW9xNzBIeDBsSmFFMFVRNitSQ3hTOHFQUkZReWszbWgrWUFEdG5tK3NBSW4ydnJ5SkZWenpYOEJyRVlLUHp5SElYSHlGZlcwUUdPUGJiVWJEMEFGYTIvSURTYlBvR2EzY3p4czdQeEN5STBWU3lwdFdQcTlFWXJwTmhxbWQxWXJtSVBFR1BXZnByd0hXSUFFRWtNVTljY1hhZkJ5SENRQjNDNkRrTVh6bTNJZFE0SVNrK3NLVzNLbktSV3E2UFNoY210UWxUTVh5TmRFQ0duTlNTWktYcXZwa1lKb2dQZDl3NVZVcVdsb0g5YXM2bG0xZDhBSlYwaWtacHlFK2ZFaTFsOUwrWjM3R0R3YkxMY0lGMnlvZ29aU2Y3Y2EyUTRSekdhTXlOZlQ2Sm5lSGNKcWFGVFpKeHMxdUludGVsSEwrOG1VY0hCZ0NUek5pWFZ4eDRWRWdvdC9mZmNwR25WdzVCWFpvc1RDOHFweDB3UEh2S0RVWnRGbU9OM294cEhHOUhTbTVXdWFudWxveExLVGVKTm9mZDdnM0hlb0VTZEZINWtDdWszWS9PYm1tYW5kdjZYUGFGeGUvSEJtUXdSbkZqL0gvbnU0SVJvRk91TjltMWQ0alVhcWVpWXpYdVgvZXlRWnl1Vm9yd0ptSUVzcitXN083VVdhcUJCYUd3dU81ZFRXQ2N6NEtzcDk4dEQ5NzVFbS9BOUdDNXRWYWl4UHBGTmNLMWVKdEk3RzVkby96U1A1TCt0aFRuN1ZTMjFxd2lSK3Ird2d4UzVnVWpnbi9jL0hXRURaQVI0Sm42ZXhDaHlySUxIcTBHVStiOTBZSHBUOFBmclMwMTJPMVJwU3JqTHNBVTN6Y0VWeFhwWTJNLzJwTmYrOUhWckZTMnNFdkxrNlIyMFJhR0VXMzE4REtLNmtIdlFzcjJwV1B4eXFhbUNxUkdTcVVJSlpRSUtxSFhtT3pNdHdLL3FicmliRjIrcTZWZzZOaGhGTDMrSmt6aDFITFhmWWlraW5qM0pwUURRWnVncGIyREl4OFRRYXlGZWxQT2VOcDhyajREUU5ISmxkUEhmQVhGRDRNeE0yOVlPT1F1L3hhRFR4ZnRnYXQwSkpCMUpDcmJXblBCeWhvcFVoTW5SYmRpU0orcVRSVGVsY3E2MEpaQTVaUFFybHdBcGZKbCtCbFdPNHZiR2xwSzRQOFRXVzV1TkFNVjVTM0c5K3gwWWNMNXpvNU9rNG1NYXpCWjFVc1U5bFkyMVZ3Q2dDQlNjOVk1SnEvV0gyZnZvTTJuNW5mTExmcHFIb3ZLL3dTWlAyaEpNdktuOXdhU0xVaHp5cVR4K3lUNmlMeDVGUFlmVlBLeFM0S3g3T090L2lxYW1vTGpHS3QzWGcxbDNrYVRqR0lCV0xlVHdFZzkzbDJiWFlmbUwyYlFNNnVPY0ViU29XUGZqMHpyZktwN2dHRzVWdXZ5MS93Q1U5WG04ME4vZmVMcTFIbmNTWGY3Y3N6UTlXanFUL1haKzNscllYYXg3TlVERnNlNHMwYk5rK0ROZWoxcUtDNVB4YURKYVdzdU1TR2crSnkzSCtsbjFCNC9SQXJyazROMzBmVnhKY1QrWDdISWd5QlZtTWdsaTlHOG0yN01nMnE5NFo2Wjh2TWxwMFEvcjBJVXAxRkNxVFA1M2dkOGx1SHUwZTduRWJqck1HR0Y3c3JYZUxNUmNlRjRqVGdJai9OSFZ4aGZocFM0V0NGZjFhZGc1WXZ2ZWttTXlwc0xPUld1UktXNU9VMVRYUWJjZVFvN1MxeGZZV2NLa2J3b1ZtZ3Z5L2dEN1JoUktDUEpZU29DVkpSZzVFTUl5ZXFDb0xhQzd2RStSNE1teHVXUSszaTB2MlBQaWJ5K0RMdld5aktJL3lZM25GRjFpVHBCVCtNazVvd1U1MVdBcERXZEl4MVN4T0twTTcyd1VhZWwyd1VHUExYZkQ5SWtLZGhvMDNwL1NVVllRY3FhamF6TUFpZWxEMVlTcGtOQWNheFN5ai92bU1PS2t2ZUxKQldEZUxDNFllNStYNUZRRVRLTzM3TWZuZ0d5em85ZE5aY2VaVElpOElmOHBrSjJ1SWxBTWdJYTVieGorT2JwL0RHcVB4b1doZzdKOERuSmI5M09oTjZsVm5xbHAvbEtiMEpqVWE1U2xIRmFQd0pqUXhLRTd6SXJZSWlqZ1loY0N5ZXJDRW1ORk16SmZQRnpDa3FWR1k3SkdzbzdnV1JlOTk5TGpDTFF0Wnhyd0F6SXVqOTNoTkJKeStKNDNrNW1rdnJ1MnVrL3Fpd1BMbm0zQWZBaXBpMUV4K25HQXFIS3JNWmYrWG9XenVSTjF6NzRSSFB1dDNnSDNFVkpnVGNUOE9OQUU3REZWcTd1eWN4dHl2Sk1Sc2RwWG5CcVQzYnlRZUpKSmQydTljM1BueThBekJOUWlCZGVsNlBXc0VMVWNGUElsS0k1ZmV5eHQ2VEdBUGZXVDBCZWZZMHA0cXdPZ0lzNkh2d1dyOUJqUFdDUnU4REtWcnNtNkp4MDhrQy9qY3pGcmhXQmVOWHMxVFNiVWxVU2J0WW5KSStmSzF3T0FtRW1IZEFOWVkxL2ZSM1dDSjh3cHFUdkdaMytuTUI3azB1bDlwODBnL1BwL1kyQ2VBNHk4OEhGeE54NmFNYlRRNmdQWmNrWUZSMWZlaVhhZGhMMFBUbzV5NG4vYmxGWlhPRW1OakZIdzlBV2JVaDdkc3c3WEJyNnlhbmg2Y1BGaVFUSnVCVTYxejlLV0FoVnpNYjhsYVlqRXA4eHgra2RTaVlTL2ZYc2E3N0l2ZWJRWTRPNW44UDl0cklyT3MxVzRXc2xoeGd3S0hLckJKNlM3V3pzb0VvRFhOVkR3azRWVW1GNkpXMjNxYjNyTnVpTVhqNVVITlJ4RWc0NFpjUElUTW45QmRhNTh5MnBoYWE1U2M4enBQd3M0WGtSZ0xRL2tRcDR6TnU2VmdITmtMTWpubjBEL1gvanVxZTlNMER5dUxXNVNLd2hBaGZkMWFFNnNUcDJydWJOT203akdsSC94dFFldnJrRDNqRWhiU01SS3FtMUxsNnVkbklJUHZoalFHRXpRRElFRVJiR210czhQWDV6SDcyN1dueVMyOStXYy8ydnloTGZBZVJrMzFLb2hEMTJHSU1XNmd4NnN3VHJ4TVZuMUNDaWI3WEVHdmpWUTRGRC9Eb1YzSlhFekNLeW83M2NLWEs3WlRJOHlXais5QmlFQitIL3dZekdUQmxNK2Z2ZDI3VTlpZ3l1ODZ1WmlNcWFwZTc2THNLZnhmb2F1aXFCU04xTXg1WlZ1WDMwYUZUTFhCRTN4T05sVk1GUFgrL0FlbWlKaUxkOUVrM1E5c3ZMUkQvV0pOMEJxOUJaMVFSTlM0aktyemQ0b0taaHJ2WTliM2IyajlFMmF2Q3pGUFRuU0tDN0pKeVFoc1hydEVSRWkrTjBmUkFNNUVDMUZMc2p0VmhyQzd1SGt3WWFjRGFXNWRPSTVwNzR5eTMxTm44L2Q5amFWVUY3OThVS1p3NGcreGVwazBMeGFPS2lMYXo1R21IRU1BQjVkb3JHQUdJMmdMS3REV0ZHbEVyUzdQTkVnMERTcldUT2JGSXYzdEd3aFVCQlg1cmZZd0tZa3pFWUtScGh1NXZSOVRzVXg0a1RmL3p4dEtzR2M2OEIvUUJha1dSZFlKN0FXckhjSU9nMVJ0WkYraGdtRE5wYnpPVzVHK2djZlRneFdEbGkxZWtzblVmV3R3OUh1TTFodm1ObGIxSGtrN3FncFFWdHVWcGxhYWNabDZmQm9nZDB6SHRNZW5vRSt6WDlQN2k0Q0hrdDBiT1VSSFZ0anI1T3ZEUDhSU1BEZlpEZkRvQzdXbUc1dWtqdy9RYURFaUJYZFJ3Vit1NkJQOWdnNUt0b0RDTThnbXhxeC8xb1J2YitmZ2I5d1liVTRKOGt4cWlZQlY3NmdMZ0RXYzFaaG9NQTNkOHdIZ0pTN3hWM3FuS3BTSHhRY3E3Yis0QlpsbUpHWUpRcXRUaVlHbnV0TjlrZUI2WXFoZEhSaFZBUzhiRXdUSE5OUDlCSUVxc1RpaUtJWGlSRDRYczgyV1I1SWN3WlR0czdGKzJPcmJLNW5HdUlOUENGTlZUSGFkK1V6dlJtR2xWN3VPNitCWHIwYlZkSDFLLzJNanN2Vnl5M09qMmtRTmxSNlRHVnd1RExXM3ZDOHAyMno3MmQ1MW1MYVBOcEJsQ0xEU3kxenhXT1RybURBelRCV3JFNHFkeGZoNUQvUXlRZlJKTUpmeTU0UVFrSmlwSUN5NmhEa0llUU1xODcyNXY3UWtvR2xIcGxwMTAxOTdzZmc0NkVVa0dCYzNsMTNIOTd2aURKSHRudUQ5QmlKUUp4dG9XZDRmT1ZoSVpnRkZJWDQ0TUt5d3VHNzVGMjNqU0x4N3VkVVh3QWE4dHczeFFMWnN4b2UyZWM3N3d1VlFSa1cvU041U1Y0aFlwaUdQc1hMZWRCQjl3ZGhidVFCUEJhZC92aXRGd3A5V2lNOU1iQmZ2YkpCRFhYdEpkR2d2TGRQZHAxK1ZFSG1mK0o2THk5Q1JsNFZLdzZjOHF5YkhVZURRWVJnV2R2ZjJkRDQ5MHVTdmM5REZHaWVMYUFDbUhMUmY3aTR4NjlwSzVXZmhVV0Vic2s1U1VmSS9zL01vanE5TVVYVEZSU2M2Z25rVE9TY2tVdnhwR0dZNDNiT1lzcjBjRHlaMUQ0N1pjVUM2dkVXYmp5dkxLcldIZG83c0MzejBPeXdtTjhuRzIraHc2eDJlU01IV2pIZnRneWg1YzJOSUcraGROditBWm93ZHV3MDgrdEJ1TkxJeHFveUtHODk2bURqU0xpVnUrRnlPd3RZMHduU3Z2djAxUWxmR1E4b2QzaXpCQWFXelM0azA5SzZmKzU5NURaMnVCdFFkbnZhVERsY3BSVkMrclZkbkhzN2N0MU9DMGFhVFdmNGgrYmtuTWprTjEraFJ3eitEVWkxVTcyOGVMM2NSQ2NXYnBMMm0wWCtkLzVDTEJTN3hxRVYrbHQvZGhrcTR1VjF2Vll2NEpKbjIyWlJyM3FINzQ4QnFBd2pyRHVWQ1VqMnQwdmpCMlFZN2VEd2ZKaXk5VStUNXQ3aGxpc3NYTVRHZHNoZE5QWTJCOVdJbWlXZUkzVDBFbm1zZWdZVCtTNDIxYnRIM045amw1ZzlGZmduNzVuWUt0cHFXRTZtVTB5ZXBldHc0S01hTFR2TWtrci9lZkRueHFSWnU3UXg2Qmc5c2tKWi9tU1Y5MEVDS1ROc3JxSDlvVVR3UE5Ra3A4TXpTdUhJYklCNWRkTWpBcldDcVZNTTJsN2hkbnlLdjhLZTF0WlJON0ErNGdGNW56TUpDVll5dmp2SXJUNTJZQnEwaUxUZUI1aG0rVEgvUEkzdmcyNHNTUGc1WVVqZFhzNUwrVGROdmRLR1NDZlp1YXVST0daaWV6ajl0RDVCNVArREhGK3lRL1dhTG9KaXRiY0JKRzFBdDg3dzBSQnpEL3ltSVpweVI5ZFphRjFLRWhldjVSMFRUY3B0dkpEYk9GRC9LK1VVU1hUUFhyWEpPVU0zRFR2WU1EOERIdHlKVFhaVW4yRndRd2gzNzV5bDZiOGlXTjlXTWFHVlFiMXhzTlJmWExhTGRPa2JxY1piWHpGTlZsZkV5a3FROHFyYjkyQ2ZQUkI2aTdRYkZhZ1RGVnltcC9CZU1tR3ZnNEhnQXhVNTVlUlN0U0QzdUF1QkNUUDB2V1d5ZGJGb2ROT2NqeVBoVlVxVm4yTTZFU3ViN0xaSVpoU3JNTlJmcjBQWDZHRzFtUUpTK3crM0JqL05QaE5FNC8ybjl4a2JZalJVREdDVXhxbnppYWtsQTYzaVVXSzU5TSsyOWJUL1FOOCt4T0xMeWh3ZEJrOURQSmFxTHd0bmFVUlNpVU1lTW0rUjZ5OTZWN0J6cjBpNEV0cDNHSVMzaURBd3VIdjFNeXpuem1kclYzZ1YrRGhqQnhMMlFrSEc3WjJiWmJIOXpWbm9FTFZEQVdHYlorNmsrZFhsR054eGYvR2ZQOXlYOXZzNDUrZjdRZjUrMnMrZjdJVjlYc2FmbisxeGZKMk54K1QwTi9rN3JZL0oyanZoMjNoL1Y3elA2dmJ4L3l2ZXAvVDZGNzUvdHhmcTl2UytiN3Q4K1R2WC9xNmhMNS9UWDN6OTF2MVVkd2I1L3JjL3E5UjNmbitzbmZKMW5ueWZVQ3ZuK292Zko5WDIrVHFKbjVPNS8wbmFMUHg5T3Z5V2dNZHBZdzFhUUtIaXk1UkxtL0U2NVZvV1A5WXFUck8ycHFqdUNHVFVpMVNkRmF3a3V3Y3hScnZLS2Z1eENCVFFQZlc3WGx5ckRWZmcrdkhRSTlOVWdHbklDZzY1RVhERmJJUDZBNlNLY3pqbjFvT1lZVEJ2WGNWam1UUTM5enJoV3pZR0pBY3cyemRNT1MwQytLWkdhNm90bVlmeFM3YjJneDAyeVk0N0pJeHUyenk1SVdkMWIvSHpRR3l1OVhURXIreDNLZUJMTklqQ2F3bXAramNCQmlWQ3RieEYyZVh4MytlNWlORWtpa21nTmFJb1Y0NVZKcDRCR3JVWGhUcUY3UGlJU1BnajhUOHo2QXhMMFJzbm1ja21RTnV1TW5CcHJoc2Fuc0JtcHhYVlVlRG5jeXBHZWQwY2Jvd2ZkMWVjVHo1eTFOSGJ5Z1FHNE81WmtpWUN4WUZ4OWh1cDdWZUFFMUJ3anhSN1ZxaDZxSE9PaW84aVhZOTI3S3g2TzMrMHFUbVdkUklIVERVdTl5T3NxaGVudWo1ZUJ4VnBHamJVOUhsRE9ldE1wT3VCZjkxcE5yUzBDM3pvdUY1TmNvL3pRSUZ3djBjMWloeGFibVM2alE3cnlIaFVDOFNmaTdpb2dWcW1QNnM0b1d6dG03a3BId0Vkdlo0YVlvb1l4WkVKYlg4dUFYaDhsano1eVdobkt4V1J5eXM4UE8rUzFmNVRQLzhuTU5HZlY2eFE0YzdSQXI5eHU3QWppcEc1NnlCVjcxdGRFRHozWmlYVlRUb0RRbGNSaCtSNVZzaW5HMUdvMk5CdnRTTVpPZFBNZEhrOVlkdGtxd0hNeTlGektTZWwva0t1aGFNQllSa2s0SEx6bzlMVERMSy9zc0J5dmxtMTZRQk9QWUZWcVhIcFJvQWdDR3FrQURtZHNuYmJ1SUpEbDA1d2RYQ3V3WmZNMmVpam5FL1B3cnFqZ0lFT2ZseGovZk5rYnR4ZEN1enJWNXhldzV1dWFsN2h3dmtxZFQ5U21GUmk4ZjZVQmY4aEVOMStmK1hFbkRkTFBkekFHeEN4NEorVytRY1g2dWhIcmtEWVpzcloySGlnRHZvSWRtcXl5clJUV2pEYTkvSFdsZ1oyT0Iycnp6ZFpUNUtnMGVxa0VlM2ZIRmFVa1VQdm1YcDJCSFZXNm9wZzJjWFpRei9jaG9YNzRVYUFNTkJQbGxrazQ0Y01uRWwzRi84ejlQQWVXTGhFSW14bDNJRHRwWWxiRURXcldST29wb0JnajRaU0lqa2JXaHVCbHdUbGlIRVhzVzROOFg0ZHl4cHBpekNvWUJ5Q2UyQ1BNV1pCSmREYUl0SEg3M3VlMldSY3NsakpmZzJQeU1US3FJUXgzMHR2TTZ3U1JkU2habTQ1SUorcTRUQVl0TDQxdXMxNzIxaXBpUzRuc3hNY3hFVHlZdmFyUkFhL3NheDVXUnBUaW9rcE93WTNoQ3lHODBLOUZmVnExenVhWWJzOWVtRXVlRFprZHZqcnlKMVQ0NVN1UHJBOUlGZG4vQms1WGVmQ0xIQS9Vc09ZOVl5N3g1bEFNUGttd2JOYjFsRm1RbzMyQ1ZmZll6RXZFdWl0VTlqTm8rcTRNQjV0RStCOFVMNXpaVUJ3SWJMV3kxMG45d2xzTHp2clh3QXRROFVEV0F0NUNzNW5nY2xxZ0crV3AyR3VrNTRJOEx4TFMzUWxUWUYwMXQ1elZZc29ZUVJ6N093M1IwRUNJZjJEVTdBL3VnWE40KzFUSXdJektySnZZb0JobjhvZk9oeEVmOTBlZ2taM2wxcGNvQWFPQmU4RnE0dlQxa1MvOU9JUnhqSWhjRWpWeGZqRzlGdGpKQmNDUEw3TXhBTitQN0RCd3l5QnZ0MmN3Tkx5YS9uZzQ2SmVSOFhIWE1EUUdENWJHWE9GWkhBTnBVdXpQcGtia2tpd1ZrUEtBcmluL0k3VWg2M2xxZmE5U21VY256SFVtZ1p1ZW11eUZHMTFaUFNHcDJIMDhrdHJ3RldCTmo5UENONWI1alAvZmFTSCtHYzNXOVNVY1R2WDBlcXp6Ym10RUNEWmVPTjRpZXVtUS9uSTcreHdpa0hwZ3FLWW5BeU0vZ3o2YzlPT1B1RDIrNGk5SmVIdTdWWTlBcU9hSjlCMVlOVXZrZCtHWkNLS2I0WmN6NE1SYkh2QmJqR0d5YXRUVlRiNjBVNGlEYStDZUlLaXArUGtOa3ExMGc2bGRGbGt1dWR2TVFQMUo1c1JlVlQwK1dqMUVlWEFtVTJMOVZkbytIV25kNy9IQzB1RHZyQjdsSitra1NPcHMzb1pLaVl3T2ZxRVZ3WFFmTWVYWlVFZ0pGMWhLQXZmRkZMSEtSYnBlbG1nVnZsNjg4Y0dXYTBmR3RWOHdCUE5MdlJsTG5RZjl3WWZKQ1hTaS90ZmpIODJQY21yRU1FbWRZRUR0c3ZKcGx0cmJXSW9uaVExNXVpMlRzWng0cFUvdnV3bFliUm5sTUdlM0hHYTdsVlk0UnIzTlo1cm5YaDdIWC8wc0VWb25CbFl4ejlQNlBuZzdIdVR4TnR4dkUzM1ZaRHRPN1JnaEQyWHIrNUdSSDBZL3FoOXhEZ2V2d2hPU2tSZmQvNjI1NTN1YXB1RDIyaFdZUVdyOGZQbWloMWFWc0ZVTUZ4aU9idHhRbytnT3UvejdHcy82VlRHdW9VVGhkQ09HVVhIUmF3M1BPMGhnd3RUUitGSWVTSmNXbFVvSXN2MUtFb25JZE5nMUk0WGtxNUQ2TFRBeTkwamtrZ0NUUldMMVRzSVFjV2lJSEhJTS9oSFlqV2k3VnR1Q3ozV0xuV0ZaTFJrUSt0WUZqOXhsUmFlaEZmSCtxN1F0aDQ3UjkyT2hoNWprRCs3cXVQejN2Z2g1SHozUkZpeXMvbllDZ3FuUjlNTS9UUjROWkFCby9sb2pYL1pEa2svL0l4SFBab0ZLVnJ1OXc3cWJLL1kxWFVnT0FvOFAxV1hDbHN1c0FXQUxLQ3oxVUlFSlZjNk4vd1doZDRIeWl5VjJXc1lMejdjU0ZMTHFGUnBXVEtvdXg3QjAvbGI0ZHRpSGtaV29sck01ZHBDa1JrL2Z4Nk9xd29LanVzTmIrQWcraTJmVlprY3pHWGhGMGdLUStqaGwyaTVvcXNnVkJwUzBDUlkrTTFDQkZwTE0zWWFlbmkzMlZCNDJwUlp6TWI4VEljM0ZzRHRDNU4vSDRsSW5DSWZqanpDcnJCYkRzTzM0SzE5M1lFNGhlMG5RWXUxaVZic25tSllZSXYyWHo3WW1IeGNybVRpblF3OHFuQXcvYkxhNEpqL0poRjU3RDhsOG9oeTdVSWNWR0wwa1RYSDNxVXNiTDRiRE5uQTJxZmlmVVI1UkZVaTR4SzNLeUVUMENHK2gxN1JKMEFwY0dXUFFDSWVaQm1Yd09ncm1rRXFPRks3OUFhWGM1RzZEakhLZXVPSXRvbkZiOWFGSkVhcXVxQXJlNk5xK3IzMFAwQWNkSTJNL1pkZUVJMS9ZcHgxQ1dlQ2dudEZjb2o0WlFnUFZpY3ZwYTFaSHNoY3habzExQ1JONXZvVzNLaUN1UnBHNFkzMGU4QzdPbGVNNGVsWlliTG14dk55R1Z1UDgybGFQQVdmeXdaVDQ4OS9ETjBzYVVpQ3ZNNENvUGsyZVp5Vkx2eWhRMk9yK2lVOHhsYlNuZzB5eW13cjJnWmp2MXZNWW1rSkliRGFQNFcxbzZYd3MyeTVaOU1HV3JyaHBrZW5EWTdHTkE0ZHcxNUE1bjZFMUV6YTJ0b0d0eW5CQWRaaEpZRVpkRnhwTk9ZaUlsUUtJSmZVcGZVTFNaU2pWaEcyZGVOYjJveDhlTVRZSlRqaVFUbEhvdUQxYUoxWHVtWkZmekNrdGlrbzBHM1YxMk5HMURFQis2S1VyQXhSRkwxbTB6bXpHMTlvcUZxSzBNTkhqY3RiZW5WOHBsTlB4QVlzZ3JpOVF6amY3WUprS1NRQW1YMDhoTlBRZGVSUEM5d2l0aFo0aDMwSEFTOStqdFF1M0g0N0tZdkNwNWJTc3pNTDdOY3VSNXdDMk5PaTEvOFpNS3B1NDRvVGJmbWx5dVBJU2tzMzY1N3gvWEZacUVuYWM1NFRqNC9jMHZQZWxaYllWNnl1WWIxRE1IODEwS1BCQXo2ZHJkNTZJaUpxRDdZVXJqMFhiLzFxbU8wNDFyRUVrYzBwYkZFc0pwa09PNXZ4a3FuR1V4K3BDOWpCQkZ6NXZTdzV5c3ZUc2MwckpyUzUvanVDc0NrV3Q1TTBWNUtqdjlhdDErTDliWVcxVzE5b2hCQm9HdVh3UkdtaERKS2pyRVhBRmpXb3VzZ3l5M21vUE9YdUlXTDViWGV4eGgzSC9acktCa2JheGJ5eUY4ZEhwSStUNDk5UG5zcWxqell2cnhpV2kzbUpnaEhYcDdndjRMeU8xZ0VNNGh5Zy9tMHBzQjJmcjd4aVV5TkhxcEQwTnQ1WnpROW5qWFVFL09YV2pHTzN6WFFoK09yN2N6RDlnUk16bkw0UVNta1RPd3ZzbzM0T3NXbmJsMGdsdXNoVVQyWUdxUjUvU0FxSnhLSDdYUHlDUytBMUdWMEJsUlpzc0tXUEtDT3k4MllIMmVVSnhZV2FVOU15ZTdHeExuYjJGbnJzQ01hOGNRRjV3SG91cU90QW16S29ZNjdaYU1aNFoxNGViQnRXMDcvWWdaVkdYekgzSEVGcndyenJFbUlHdzNoYjNUSU1FZFVYdkdqdmVSV0pnY3lNNzFKbTgxLzZlOVNKdmRMenpWWDd2ek1ubzFweUc2Y2dkcmJtNTFJbVRMV2ZxZFFacVg1cnJPdWhDdXd2MUFOcUNmV213MUcxY251dytGVVNnUkg3aDZYOFpWalVlNXA5QkVsejYzb2RUWmtTeld2WHFrUWxIemh5bzJFUklKaGhxa0lvWnNTSlpPa3kwNXgvRWdhUlVkVlRUblJMVzVqcllqdlpyaC9BTS93dGV4YnUwc0k0MXZycFZIRjRGa25UZ2xoM1lNVHJDTGFhNWdUQ05CdE12ZTJSUUFEMktIQXBMOUVFZXJOWFpSd1ROYmdkaG9abFhQYU5qdDJvZjJRNnUzVlpaUjZnWG90WjFwUWdKNHE2UlNGMm0zSFoveTd0M0xZSk96YzZhaFBBVWFYdmRwVnlNeGthS2hIU2lXZHRLU1R0N1VTNTJuT3lGTmN3Wmp3Skg1Ty9DTVdQVEF1dmdJeFVST1FGcTQ0cjFUbWttYlgwNkNvWVdUSUdVdXBNS2pKYTBxa3pkdkZ3K2xIdXJZeHl1bDNadTFMbWQ0SFpmem1xMWJUMm1Ld1FibGQ4azFRMzhsc2prUUtSOEFudDBLRlgyeXB3U1BoaU5CZTFMV1htcXlubFNYb0xiY05sUGF4UTd5TUwzM0g2UUd5M0Nkb0FTRkErSEZjMysveG1OdzRvcWE3OTc1L05sSndvT0tsNDFFWm9qSFN0UmdIMTVWaGNMTVZ6aGJKVmt1K2pDa2hKZHY0WWFWdmtzdnIwRENoMHZ2ZGRZbklLSlN1Yy9IRm05RDU2TWF6QkxYWHdVOWdRb0NLWU1lcVFkRXl6RXRIWE5zL29IZ0hrT1Z5ejU5M21vdHlTeklRUjk4a0xiN2FYb09jUnFSZTNRNU1ENkdwRk1TUjV2bGlRUGJzSGc5YlB0Ni9JUHBoOGxzazFCN284UVZHbFZnSFBHOU5LdGpzYUUvWUdCOWtHajB2OUIzb2orTmlmQSsvYVV1OVBZTFUwdkVEbnY0UjJEMi9qWHRaYXRSWWZUczlxZzM1ZDdCRDJCZ0wxVTF6YmNNTFNHVEV0eVlSeU1GT3FmaDlRd2dsTit3SUdjckRVdThWOCsxbVhCcGNxWFVGUmNDL2pzS3crazRuZGgzM3FYd3NXY0ttazZrdGp3MWMzM0VwZmFoR1lqNXNPVlVnQU5PYzh0TjRTRGRxRW1yc0RoWlNJZm5lOXZSRUtRbjBhNnlJL3FHdHJBNEFXQTNQK1J6WDBoaWpSbzJDdmZBRmdrV01xR3g3Y21WRjFmS3FJSHVadkpwOFhCWnhnRGJGNzBMZjl5bjExR3U4aU9iZm1VeE9XSDFscFEzZXNJb2Vld2NnOXdXUVFLaC85QUJQc1luckJhaHQ3QkpjWnFlbkpIMzhsWjZqaysvQmNtKy9wSENESjN5ajV3VTZVQ3IvZWJXYUYwdGFocEkzR0hTZkVSQ2VxNWJSSGN5bTRPL2Q2SGVEYXpMS0dqc3pJZEV5M2YxMXh5bi92cHZxNVdEQjdFZFVMS2F0bUdINTZGaXpaSmczRG9LYTNZUVBHK295NlF5Y2E4RVB4cEEweCt6c01hWU1CQnlsUnNTbnBCMVliMERJclhQblM2TGliaTcrZkg4dDVHWm94T0RiTVdDNmhaTXNVT1pwYTN3VFkwTnora0d4WENaL3ZERUxUVThxUUFlS0h3NlBJL0p4QjRRY25YSGxJNVV5d0w5bTZoNW8yazJDbnJoSFV2cHZiTDFPZG5tL2RVMjRxWndpam1IaUVUOWxwSk9MNGlqNXp2NTNpUDlWbldSM3dJZ0ZnM0hFb2Y4ZitMNDhodkNuS1cxN1drSForNlB1bll3Tkt0d3ZPU0w3cFcySjVGcHZTT2N2MWpLVWNNUE9lV3VhRGVzUWh0WUlwN29LREpOSzIrb3JlaVRwOXZyV3Z6UmxnM3Z0b05JenNRMnZwZUpXU3JZOFFoaUZxbmM4cjh1NDZ1UlIyODdCM2RGV0xxclN5ZWlYaEVHbnZjbTJpbUZKQlhUVjFzMExsbTUwdDYvOFE4S2gveWVtclIzN2RIMDRkZHlMbUpaZk4zNUlNRFhCVjNpMm5sN2JlSnNEVXFrMkNFYXVnemdzYi9RQ3FXNHRTTExqWWdXVWNLczJ3Ulp6ODI2S2RYY3FmYlU1SGQvQyt1SE5tTHdiOWdiUFFPeTJTMFpLcndmQWJWN2xjOUR3SmdzeW90aHhBTUJkdi9XUmJESTA4OG5WbG9rNExtRFUyd1RZdW9lckNMaXBxUlVzTVlyTnpwSFlNYTJ6ZTVOdmtpYk5TamJ5MTVFbXdNd1Fta1BBdjNHbzlLanJibTVJbktFb1JYelJrWElRdENWZ291Wk45RkN1Um5XZ2JVbi9SQTl5SVI5TWZZMXpHdEM2cElsNW5Kd3dadXlkMHJUanZQdWFRWTlFRkZML1ZIM1FCdm9jZmF2RlhuT1IrUXFYanFhS3ZqRmI2ZzBXN0drZzVTcnRvVVFnY0RxVlFFNVk5WDVtcFErZGF5djJyditiOFZLNXE3dGQ3Z2ZndFMwWm1yY0VyeHpvR3ZaWkxwd0NwWHVEVExhYVpub3dSaVBRc0pCTW5ITFVaR0NhK1N2N3BYeFpKY1NlMmU3VjhHMDlnUUdDWDRkek1wSklxblFGcTl6NHRuaGMrTVlpVWdPWE9lSTNIQW9NVkw4YmR1RThrS2dMMzlXa2M1SDhEb1JHdG5MaXl0MmJnd2hWMGJXYU1tMXdWWG90UzJ4dHVUcUg4RWpUbWRlN3pJVmR2RVREbTR1NG9PalFSdDczZks4TVo5WjFKajRZcEUrQ0FaWWgwUFh6Y1dsWTNJNzZkOUlmSDlsT2Zld2FmY2QwVnYwODlJSkhRUHZrYzIwbXFPSE5JOHdCekxOM1R1b2JBY25hdTczQTBpNUtlNEpUMGg4Y21BakphWklGdVVER1R4b2tRZXBjeVR4ZGlzSEFuZjIycVEyWmJwaTdnSUU1SHkzQXVuVEdmd1ZjMm5uT05VNjFLQWdZMnFaT3dKOXY4NXJhT2FQV0tCR29ac1Y0cUlmUFpNNGc2MG9DTkd5ZGp6SVNFUGZ3WE9KUWRNRmQzWGd1R2tIVEwzQk82Y2lDYUZkK0ZVbWhuemZ6QkJRUUQrZ21BamdBb28xMm8rUkVzVnpmYXZ1TjFMWVE2WVBGMFJhS0ZkOWs4VjRPbzNEclVUakIySVNvd1BmS0JjRlNXQ1d5WUFNM1grS1psdC9RSUtZYnpEQk5rMUo0K0ZYSXVYN0lITGQzNUp6VXJqRVdyMFRUWXJtbkY0dkxRQ205TkE1TFJhZThsaFR1ZE0rYjUrS2wxRi9QcmJWVExJOXVFRXBLRUlKc3F1N29oT2dSWWlDY241NWlCTzZLSHg2Sk4wc291dDB0SG9nWEFjT2dMdUNINmVMN1lhMnNrWk01NXhuSDRWc3hmTGFFK3YvM1lya3RNa25pakwxZ21yV1lBOThSMmg1VWNseVFtMklaMFJBODhGVXFZM0hvWHc4ZDRsMzRrdm11YTc5RWl0OXM1V0JwZndsMVdaQjFwaEd5V0g0RW05Mk9xQjdJOUhnY3pSbitvSHJUT0g2Z1BOQ2xET1oyUDlYbUNHdk1hazF6ZWhOcU5meW9lbjFjUUxIWHBLbUsxU3V3QU1Bek9seEE4WWpCUXpqbTVNVmdlTzdKUGs0UFZpNlJpYTlleFpCbkFFOHVXYmdmVlVKdjhDSUdpRWRKQXNqdXZaNWlBMklaYnF4RWI2Tkt0eDRrRVJhaEQwTXEzQ3FmKzJrOXdUSDlkL29BWXlwL1M2USs3RUFJV1laN0paYndKcW5rVHl4NUZQWjNKeGVuQ2tSQWNvZzdJVUJERC9iampFSGMwQjErdXlBTVhTOHZKM1JkWHN1QUlkV2poOHRKR05RSkFpZ3IzRkhkOVJvcGxZejgvMnNyaGZ3bHJldDkwUlRZUjBqUkh0MEFwQlNSQkFpSFppZkh4b0JYa2s3K2lPcDRwbGhGNFB5UUJaSjBQZytQVWF4SUxHV2FGaFVCUUpsWDFHSlp3U01ldG8rVlZKak1ocWJjRjN4d3djRzlVVnhFUXVRZ2xEMnZuOUpWV3pETkc0WURQckZPN2ZFb1BYajVSNHR3UkhnMlh1N0FENklIeFYzeFN1cTlLUXRoM29lNjFvRWJmWG9qOEFEWktJVjRpVHJqSGxrWXZZSW1neitkVGdnSi9UMFdMZEc3SG1ZSmxNZkFvRmExcmwrTExjWGoxQXlRcVBSZ1JmQXRFUkIrUmYybkRlM3k1d0poZXhuMzFqbDk3cWZoMUxVWmErMmVrd014eVFoVHBmWXA0djcyS29vUjcwVFBQbUE3R1lVcGlPU0t4RUdrWFRRZTlUS1dOU1IvT2g3MFhFQWZCTkRBVlBXQmFXL1BMK01SUVhqd1VpWUhMcWUyMFVlVUtqNzlFdklnaktPUEdreHdnREF6dUZHN1dvMWl5S3VOMnNSUkxjSGRpeEoyVFMxN0ZzMWZzMGdyeEo0NFpVOEkyNHJZWWpUVWRCU0lxTzVHQmZXSWJLcmhFZm9YamtJc3VtdkF3YlNkL0FlRHFnZVlRd2NBUHIzb2pjVHU3eFBEQnZHa0RXQXRZcEYxOU9GQjZpOHBaWEw3d002cHJocTBhNDFTQ2NxcktmVUFrN0N5S1hOS0hrUzAyVnV6R0ZuQ3Jyb1RhUloySFJxODY3NzF0clNWdkQ2V1M0SU5UL2w1SFJoZUhvck0wV2FSaHFrUmRZb09pd2FMb1JGMWhseVV4VitKcjNWVVZoVGRyb0p1MjJNZzEyR2xlV0paL3UyM0FvUndxdkZvSWlaNTJXRjZFZ0hrdFYxR3F3bUxJS2FOYms2TXdXMGpMeitQaGFrU2N4bEdTRmJjVWdWL3czRE5lU1RsWmJtS0ZIK3k2b0MxY1pOU3M1d2RFUk8wQ1JhK3FORU5obEJaZ0dUZUVoTDZoRW03ejYzU20rNDZJOGFNMHQrdmxOQ1paa3hEdTVnL3hjRXBYWUVHWU5MR2ZLekdmbDNkVTA5dlJCMUtEOG5jcGZmUFZGNkxseDFKaXpDUWs3azRvOXRrUStRY2F2Y2xjOEpGVGVYdGwxRFhMbU4vMXMxOVhsRUlhcGtMVFYvNmNmbzBEc3JkWFZUQVMzdnZpamxyNlZ0Um40UmtINnk4UFNKZnQrVmMvZGlkbkJFU0ZSOFpGOFJBL1RhQ2JudURKM1dwWnZYVm1qZy9IMEdDakpJT0trdjR6WHk0OXRrTDRYK1FhcG5iSGFMRnExck9iTDR6czZpTGwxbnhqRVRaaFBWM1VHNWx6b3BlanBWWXBiNmsxNFA5OUFNSjk1MitlUjN2YjcxSFpLcWJaVUtDVEg2WHFvbU1YOExIUTltVDRMU3gxY3lSVzZESXkycWJxd2ZJeEJXM3dxOUUyTVpIa3QweTFiSzhKOVlOY01wd25NNlcyQWppZm14S0JIY2FkUkI5cGd4SmY5bTR3ZjkxZ3NrSVY5dGFlM2R4Rml4RHFpelNid3BsS3NOMXhUQlR4SE41MEJvNVdTZnBCZDlxaXZpQlVWM0svODlSeEMwNWx2b1BjazZRT2RnRjVaRnFKUGpZNWc1djNPbTZpM1M0ajlCcG9sZHhqU0trbXYzWWN2MGwzN0R5QzBMRnFqOHZJcnVGWG9TM2NQOVJTRUJGelFiUXpsVXZNQlBhUUlSZndYUUx2NHBpQ1huMlltY1E0b1RQd0Z0WlJ6ZWdIL05tbHFCYi9KTksvYndaRFc5QVBXUG1lVTJMVWpwS2FuaU5GSGhyNU05d2dkTUx1T0YvU2FsOVBVUG1jRXV6Y0VtMG13Nm0vTENFb3pVdWxFUlhKOExyNVM4VWxabDExZ0tYaEFhTjRsbkdMTldROCthdTZzWFE5NUN1S3VDd0FDRnVSUGQ2djZyMHZUMXNjSEdqaWxraXEzR0JpYzJyajF5QWNWRTZCZmdQQmZBVFpXWEI4Njc1U3RFR2dhd1ZqOVk4dWdGL0JWSEJ6NHAxSjJlYWNtUWNBVXFNMHhCc2tDMW5RdGphbHN1S21PZXN2TVpCNkNFbHExeWNkMExydUJSQ2tGRk43ek5EWlE1dEhDTFFOdXp6NDZBaVlyOFhoWXltTXVYSnhYMndteTlaMTViL2h5VWRzNGZLcGo3SVdXckhUTFNSa1VHZnF1ZjYxdVpucHhtWUtxOURiUU9DeUpmd2xUaXlqYW5uYXRyUlVVeCtKdVNsU09qVW9KQzRYRDJkRkVOamZLc003ZmJSSzFhcVBWN1ZYQlVRNzQ3a1RNMlRhNEpUK2ZoemNmWGJnUmVSNVh2MERvWmVIOFZ3WmE5U05COTN5anJRa1hxUVJjZ0xjVW53Ui9WY3lSajlvQXlOWmxlU3lwMGZxaUFyWStsYUdjL3NQTW5qZ25QMHdPd1FHVUZieXNubEEzeFdDRzhLQ3BydHFTQ0ZWL2dNRTF1UlV3MiswQ1NMUlZpZXd1YVhlaEJKNVN6bm82bVhhMXgzV2tmaWQ1eVdOYlJNaXFXc3pnUEo4TWttUGwrbjJ6Tm1qbnFPSStqVGZkNEpFV3gwajFsc0NLVWdnMXgvUDZkdWxtcm8vWUVEL1MrUWRwbUVhM2plNXNDanNvdnZDRGEwS2ZxVk4wbjdCQlVQdkFnM0ExMG5tVWRWUW1MdHFPOVBrQVhrdVRyb1NyeTBQUTd0NDgzSmlsSGRGNUVHNFMyZndURzRPcVFVMjQyblhUUkYraXJSMGJIN09WbUxWdE9BQ2JQcWxwNVhRY3VhSUZqeTdqNnp5T0w1VDNvRXpWQzR4YWhHMG1JWnFLZFcvU0J0N0o2aXdhVDNWV3FpNnJIQkJhZEc3ZUtPVjZNckZpc2xzMUNzbGxsMEViaExQczU3WjhyTno1SS9wVDZkS0tkWmdkUFgwMk81cEpUM0V4SVh5SzVBZUFDZCt4RjlVb0pyL0ozNTNPZCtnNmtiR2dCNzNPV3J3eFloNWhJRzl5cjlPS2s2Qzg3YVhPZVhaQ0w3ZzlEMHVrN2l3YzBDejNOK25YcEsxb2R5TVBBd3lEWW5ka1c5T2tsei9iTjhHaHNNVWxiUmZITTVIelVYKzZaVnJ6cHJvcW42a2JuVVFMK3Bwd2dTTE9iSEk4V2NkcTlrVncvOHV4eTBMYnZER2pnUUNzT3JoNWhjUE13dGt2aGhSa053NHk2MHBZbXErYyt5U0UzdXZRT2l1T0Vxak8weXJEeDBXQ1JwMDl6RnNQcTRuQVFnT21vR24zTkV1ZUx3cFluTWxyNlZZRzRZYzhsTkg0RjdTMkxYNW9vSm1tdmFaS1BBRVNjUS9PSHliNGV2cUF0ZzJDL25jWDJxaVg0aWVyYWFlaDFiSUc1RkhTbUltekcxOE5NYkp3bmp0ZzRSVHFEcXdSR2EvZHAwNW5Ld2JXVE1URnRHSEpNNlNPb1VHZ0dnSEhuQjdSS3VCc3dsNnFDMVh2U0l3OEpmdU9QMm50Z0JpNWU3NmRaczR1WDZrbjljUlR3WkJJRE9jRTE1VWRRTVZUc3hKZ2twT0V5M3pZVThsQTJPSi9uMW4xWHZxbkdpSWtSMnhCczErd2FtNUhod2tpZGkwZUp3Uk9aSWpscmpsQW03M0VPd2RYN09Gem1WeGMva0M1KzVzWnpraERrd24remJxVGx0ZHJEWXViM2hqRVZmdlBJcVE1NDJET2ZycUNCMUFYUFZyR0FQVTdscTd3MmU1Q3NqczVLbVhSMXlsaXpVRHFudzZ0ZkpFVHpYSFFBTVUydUhqUWJ5U1B6WFhYRWFmOUE5NlAyNDBuUHNKSmJ1cWtqalEzSjhvbTh1TmFUcndCS2ZHaXY5UGNacnRWbGV5MXAyTW5Gc3ZseERyTFlabWRYcVJRWDVqVjhKTEQ1MDBYNjZkL2lMNU1wOG1VOVp1K0FaTExCS2Y0WVZsYVhsY2tWKzVTcVhwd2NXSml5cnRtcTlqdDd4YWZjSnkxd3lDTDJOSnNUdFFqWWdJaVllRmFqVEJqdlhCWWI5UEhhVEFqVWhUcWxzUmZjSldHKzBrMi9SY0hSZmVhL1dvNTRWbVA2UDVxWnUxZGdQSE9XM3YzODZtd2JOQ09EWGF1LzFZOUQyR0R5WkdMa0V5ZDdJa2FuUzY4aThXbU9pek5xKzVyZnNvNWduV0prV2dWSHBIdm5qeEhtb2tpb0Nsa0xERGRkRFV6cXZCcncyVkl6MVJjZVNzT3N1V3FzRVB5c0RQTnlLTHM2STB5bXgrT05wblM5UW1ybUZTOURySkNjZXlGcmFZTDJ0MlREa3lsbHVXUXZyRWZDNkh6UHBCc1ZDTm41N2loRjRuMmNkdFBGSzVqanVqWktHR2s2Z2ZIMmlLSWlFY2dxZUh6NlhDOHI3VTZkUEp3VWFYRTNna2g5YWp4dWltbzhmc2RQZWZ3aXBaRTkzZjVHVnBoN1hqVStSZ1VWbGxZNVREby8wVitBaTRPckx5Vi85T3ducEVEL3VqbWhBM0daRnY1K0R4ODJZVmtpZ240WjFjemtkRXFnUk5QbVAwUDBOYmU0U1VJU3J6WWxCaVBNT2lYK3VoeE1OOE12YVFrZ2hjSTN4ZVM5Wk95NjZuODZJZ2dnZ2xKOHZUeTNiZWMvUXMrem1UVDNrY1QzUWZQWG5BdlRCemxaaEFOUHVOK0paamlXQm9jMnAxbmw3RXNiSUZuZnMvVlBQL0hXTzhEdFBzN0JoSFo1VjJ1eXBGdy9hVUhab21vdkUxckd2L1RyZU5DRDFIdG5xK3NQVlZUdGs1QUNyWnZNK3pNY1lhUmFSTTBYZ2hVNlpkdHdMaWtqWGlXNlEyY2VNMTA1U0ZSN044ZmxPaWNLQWhkZllRTFdTUk1hcUJXYVNEVG9GdUhKL1NHQjFXVGQvaUNZVjNyaVU4cHNHKzE3a2lNRlQ0VXNhQkNjQjRSQzVuQi9ubysyemhXMVVkTnpFZU93R1Nyc2YvZnRKdVA1eGVSWEcxQXpBbk83dDJhVEZaS3pWQ0Y1OWpXS0piUkJjNUEwdVo2K3FBV0NkTXN3M25WT0xTVkpVcmY5WWd5QS8yNHU3R1UrbkNZbG9IL0hHenhCYXlRcnpRamxzU1pZdUNua0U1V2NvMndsMHc2bG1ZYXEycHd3ZzRWMk5XYkJFcWRKSWJVSmxIUlJmZ1V6NGNycVFGa2hFdUh1cDdjSXRJK3d2NDhjSGJZRGx0QWpxalZqVVpNLzRiV3c4c2N3Q2RtMU10WGNQOHM3YWhrUkJ4MWY1QzlvWU1UUS9BV2lPSk8xekgvQ1pOOWdSYktSUlYwd2xRNnp6Yk9talozWkEwTUo5ZzBvNkFHNDNZNHU1K2F0N25SZDdtRjExWFFXQlFlRnh6UE8zU0ZLcE9maE4yUkJXMmRIaW80V3pPeU9TdGE0eEc0TUVaQU1ZYmFLMWZLSGZSenptYm1oeEh0SWVsTkNIUitPZk80SCtYVzlFZndkRk5QM3ozY3VQdFVPVytoWTVMQk9RcWNQOGs4ZnJzWnh0WHJaaGJYVlFyNHY0WWdvejZIa0c5WkxzejRwN1Y4bVIwUVgrV2ZwOGhvT3Vwcnl3VUtNU1ZiVnpIOXFLZmJ0d2h4elZOK3o1NU9peDBuR254b2xKZ3ZYQTNRZmxGa2VidXN3L0VLQkJjOXN5aDl1dkxIVjBMaGd2Yjh2MEtrNlN1NndESkdPSVF0eFBsSm91ZjhWRlJoTGZvdFJzRmQxbEhDWXdFM1VkdW1kenF3eUJxU0kwcDQzbkFXRjhieGZNSDN4YjNTLzRPSGtiRjZTamZaNDhuanNkcVUzd1NhdkR1OHRIdnprQSt1MlZSZGd4ZXRsa3lEMkZVL3V5TjdOaGxvSW1ITythVVluRVhPdXk3eFM0alVQM1VlTGVnb3NuVU03WGlpYnNqS09qamhCVFJBcVVSL0g5VGt6RHRRL1IwbnFsZjRaWGFuNldDVFdvTU1YbC9JUXBNcmpsZlFjVm80c1ViWnRFT2RwRS8vbXovREFsblcxZjNaeHVVN05nSjFkYkdFbU1zbDR1YnpBN1o3T1BHcUh5SGJka29VTDVTYUVJVDNlLzNNcFMxejhzdVlXRGxzZTlrWDVhYTFGSW1sUm5tNjIvOEpQT1Qvei9uNG5sblVTaVAydHJ3eDZPdGg0MWlLNHN6NmJRUWwzdkM5Z0lBYWNRMGFuMWNKcGQwSC9HVHZLU2JFSmlQMmZvYlZYbXphODJsR3BxcVdPY3crU1l3T0ZKc3RYbk0yekFBTkx0aUU4MVFyTUkwZ1VWYTBhRWJqT09oam5yT0h0ZXFjS2MzMDAzbFprYTRVN3k2RDgwMlRBZ2hKbmVjR2tpUHJ0elIrTzhWYjA1TCtnRE9VN2J4ZjU3SG13WGp2S0t6ZHkzS1grOEx2WmloZ1V3eGFBYlMyZnlFQUxrUGNBRm00U05ONGpSTU9TdG51Q0lmWk83RHNIbVNXZjdiaXczbDlCSlVpb2RUdEhGTXpVSElnd2g5eUR5R3FXUE4vWVJuR1hqSHdDMTd6UnR4YzR4NWo0cTkvMjBNSTFmVjZFSkNlZzlCTkRWMk1xWk54dGwvWnJRcXlpaXpSSm85NGEvZk9hUjJHUE1RRDBLYzF2MGM4RkR5Zzh5eVByWXNvLzZDNm9wUk50YW9ab2p1S3ljMVkwSUtpMW9mbzMzVzhTUldTeFNVUU5nWmsxTi8zaDg3MDcrMW9jMFNBOWl1bjVvSDlvaG8xbTYrdi9aZWdOd3ZXL3RNdm5QVHlNVFh2dDJRaThlek5WSVFUcThOdzAvVjdoVVR0U0t3VWZ4ZklUamIrQUVweFY4Si9nMEYrWnJ6ZHBacW9aelFhWUFWdUUyMmU5dmRpY09IM21HOFFOYkR5M2N2c0RrWjRQc0JvMDR0bzFleTJiUXFCY290R3orSmQzd1U4T0JJL2tLY1lPZEtYSXZDU1RIS3VuZHZRSDUweUg1b1Ryc09Cd1JLSXZNVlA5V2Q5YkZ1WGZXWTA5ajRnYndXemh6cmxFK3lmbjhKOTBRMVFRVTMzVHEzYUE5bW54bGE5Y3Y0VklTemhqSEFpcjdLSEdZaEdxNllWWDRJY01sQmxTNm1oUGhid0xuYlVwdURaMHlBcWttZEs4WitxTGR0ZERTb1hDRmxyeHo1MkFGQVE3MWVQL1VaMENaWjlGM01tTFZkWTBxeHEyYm85dGtiNGZkaExOc2xMbGNUcFcxL0ZVQlRwSUJCMVhSQ0tXL2xZS0l1MmUySi9RTFFtWW9VanRBMDJQZ2JrTFNscEZQeStsNEFxaE81MUlPQ0ZZL1pNNXRENTErN3gxNDNqcVVUaDJPR0hUOTdvdjV3ZXVkUVBjTGY2RC9lNXZlbkxTT00ybnM4WVFkbjYzZmhFb1V2ckhKWC9VWWl3QXZQb0RlbkdZcm9GVkxGakdWY0dIeEVSMTA2bURFZDZnVnNTK3BlYm04bEVybHZFWVpkSXAweFlBUFRoQjNuRGZocXpuc0RtN3JGTThMUCtZbmFpeUxvVlNNRnVrVEZOT3B0bXBaZ21pOG9kR0ZQY1pyT2VDWnlpdnFOLzBKektPNEdiL3YyM21xeVIyOW1sNm5PVDdMRkFrY1ZzL0NtYWlVeDNsZ2RhZmRiUExlOUVVYmxnMDFWSEtyd3NtZEZveFhGUFNVcE1GTmxVMDl6amZOYUpjL3NJcVhSczM3aXRJMGh6Z2piU2g1WUZEMGRNcjNZczdBQ1p0bUFMeVFUa1BWVEZscTZidDU3ZnFzMkFBTHN3TGsweld6YnRneVNKWnFEblVzbzRyZTlSQm5VUnFUc2hPQjdTV2RqK3JyM3RhSUdjdU9pc2JDVkxRTFFOdFpFV0N3dFZJaTdYbTVocXllb1o0N3Qrd0paU0NGYVN6bStnS1VLc2RrNWI3V0dxelV3UGVmYlRDbks1OGVDREFodWU5bE5rb0xMT094SkRLbUY3c211bSsxNFJ1K2hmMlZyWUh0UXJ6TWVuVGZQZ2tsOENtQ3E4TmlVNU9xeG15ZTdHeG1icHVPKy9DRDMrL0lRQ3Nud1lhYVdSM3lNQjFHVlFqMU9mTHdtcTVFMm5LN1Z4VUREdU9LeGtMQWlSK2RVN2VOcjZVa3dDM2I3Wit0ZnpFNGd6VFBYZS9DZGVWbzJHSE5DS281WmRuejdoTWMxL3hkUWZ4T3BicGR1Z0EvMUlLdW4wSlVvRU9uc0Z6dmdia0NHZFlDUExaYlBpcDlRSmZVUldSNFJIOXhBaE1NT3NDbVlvM3orRVFYNHltbVFCdEJzdWJDdm0vOGJ2c2MzSmZ6R2hBQlFRSm1DVXE5NHpIYUFicnJyWExYNzQ1RTExU21IMk1WT2xPbVpPWTVGSi8xSkhIRTd5M3J3N09TVmtETFc3L1RuYVlwOVVQS0hvVVFDdjNoY0tzZE5VRUxVRlI1c1dLZUxOYTVSOENxWS9xYlBPeHNINDQ3Y3p6cElSQ0dRVzgxaVdjLzZTcXF6ZHpHUUVjNWpQOGNIekUrV2xOMlYrSlA5dFYwSzJIR2VHSlEwR1YySUxRRCt4M2VJSnE3czVET1FEdnByM1VNTzNacmNzQmVoNWV5OGs2ZkMrVmJ6UzR1K0ZIbElDNGpqbmFTS1lZT2tQSkFqTkVJV3BsNXhJWU1jS09FUy9oZmFVc3c4RjE1M2VydUdhN1I2a2FwektGL21QT0NtSXVMb3o1L2pmdk1qMUZpQkgyU2RnTlZtampzRjg2d0UxcEdWaWkyUGZBUmZDYXhvNURBamZ2QlNnSkJoS3pVZjVLUlpMa3RJMlhaTTUxMWJwSXI5MmV6K2JJTkpBZkhyL0d6ejNkb1NnRE9sQk5WaGd5QmI5SzFlQW9lb1FmMmw0Uk5JT3huMVdmb3VYcmxoYUJoT0lLNkliYktCZWdQS1JXZ0pxc0NBMHdhalZsMEwvdnBzMEo5UTRYMlMzdjkwNWFDeGdHR1EyL3FVZXZTMWQ0d1l5S0VZUzZsYnVzODlCNFozWC9KZTRDcS91ejVsU0FLTHFSdWtOYmxVSjV1MnIxdUdwcVpKcGxrZDRmejU0eURxOVFWSDUwTWFKQnNjdUVqV1BiQkVUN3pBNzZ6bkVvUXB2THJwQ21VTXB6bkl1bzJHYnJISlVyNDlsbWo4ejlLOEVicldicXh6c3Z1ejNYZHFBYm5UUURyOWorbXB4WUpXRXlVbUdOUCt4RUlyMVVlcjRuSlhKckZNNDlhTGFJUHJvbllWcHJoempJMWVKbGJnczAyZWVFaWY1azNCdVI0NG5nQmhHOUFiZFcxRUxXeDlIekZPd1gwSGJEZm9nSXpBRk1DZlB4MkVjL2tFT0ZxdktIdFlDeVlETWVWb1JnOTZseEVveHVTeU5odWtaQ0VHL3dNa1dMMTB6R3lLYnU1ZG5ZeXY1Tk5PNlZzTVdvRnRHV1dFVjVva0NaTmsxbXNSc0srYXA0ODBYcTFPK0ZmUzRpcURGVlhzVytVaTB4OGU0cmEyZzZUUnpycWw1TW9zRTd1OXdiOFpyM09sT0FjanlsUjRxNmJkS1hQSUl1cVBkMy80SEYxbk9BQ2lSMGFlKzNjaUdaaDArUGg3aTVtSmdQRytVU004bGFwd24yaVVhaHpPTzkzSFRnV1pXNy9HY0NZNXNPOS9SeG9iaWMrY1ZTRTRKcUhrNWRHM1VRdlE4dlFGQm5XUEJ0Wkw0azVuQlRLNExRVmpYaWY2eVcvQlJ6Mk9LdGFpbHBrbG04ZTVXeVQvZ0NWZ1Y3WmljYXVQL0dwMWZ3N0NJbXE1MVVlekpKcElVS3MxQmE0MXNvTmxxMjZFZG5GL1NWQlZuS1V2OVA5OU40NkN4OFc0OStHNVQrNkIzR3ZlUWdPeHZ1QUxnbElYdVhWRFpwcEJ5VVdWVkZtVE1xSEN4L0JrWVFDMHQ0QUhQK1paVWxLN0g1em9iRS9mcmpWNWl0Vmczd3JPbUxCTXorTEE3enQ4VEorcFRMb0RleDB2SjBLbERWaFRxVUVscFNXZU96NHpYaG5CTHhYTGtpU0hpNHRUYmovY0ZRb2hVai93TCtIMlRZV1dpS25lL0Q5K3ora2ExVXlsUUhWeW1zWHdLSFFTL2NLWTNOV0s3NDRoOEFNNUhzR2xGMDVBR3d4dGg0amFCRldWOUFrZG1lMmlaMmExVzB3TTFNSVRFTjRINndsM3V0QkNDekp2azllbU1zOGFBM0tJQVJZNDBLVVczeWwybHl2RWE1clp0R3g1c3pZNWZSK3FOZjU4NHRuTHR6OHV2dGNkSTcwRGpPeE5aRDNidzhlMXhZeksrS3pVZ2s2UGswR2cwWk0rNGE0M1dVUnhnUGVocktSUHVDcmFwY0RjSTRJL25wVWxUQ1RHeFVhSjFvckFKOCtEaTVzanl2aDVaRWEwYTUzWEkxaVNjRHJpL0loK3dxOUdoR0wrVzFBYmpJNWVQWDkwb0ZTWnRab1JxQllkK3hJS2tkUnBkTjkyN3podkNlWEtNS2duYWVDNmMzSWVWN3laM3k0RDFIL3BMQnhUeGNobC92VWFkODZBRzZvZ3ZXMkd5UTBLNGxkOWJiY0V6TnBnY1FqTXRzTXdLMEVnRzNuZXliZE8xSWtBUCtXdTU2QVJ4RTE2VGVIQWNXenFueU9ybklsb2dCVHIvMnJxWGp4byt2VlJEYTJjYW15dVpLbnRzbXRDYlpBbHpmdGdmRjU0U1lna3ZhN1BZVWlndVBGdEx1Mkx1YnhMMlJHSE1MWU9PUkg5Mm9icTFYaXRuaWh3ZWkzZG5ER0diMUZHdjNyWk1LWnczdW9iVWVjV0MwQWUwTy9oQ3MxcDh2RWpFYlE1QkRLMkhLclRZMGE0N3RFRi9oVzFIZlJyZVMyR2tQb2U3WS91d3YzSXlyNS9FUXR4dGQrSXBmUXJmZ0tFb3B0L1FOUjVpcllxMGtxRHpvdW14V2FEc09zbW0zQVVKZUlOS2xYME1IaTdTR09taHlBTUhYZEpTSi92UFJRZ3lqTVc5Rk9EUXVNaTJoa2lCVndmVEdDRWh2VThCdjd2aTFGL1BKVzI5d254aTRvazEzeXNYb2tVMWQ4N3htTmd3WUdhVTAxT25qa2ZlOHVXekNGdnVaT2FUUGNIT1JXNlN5L2hHeHBVZDNFVGxnMk9jdlorK0preExKOWpXVERxdVF6eFFBWGxQdzRjQ2IrY0RWcFJWZDFqS3F1Qjl5NGFuMzNmeE5qNVQrcnBabU1ZSUMrMDFFZzhxcTZRQWZVQk1mbHpxS2JrZUFuSVc5czFKSDlIa283TVprazBaUFRaVVhMUWtWMzhCTjRBclRxbHpsb25HQW1YRUVYcUtEbDVhd010OTlEL2VReGNlL2E3RzU1cmEwY0JvY3BqbnAvcjV3Wk96UktBaTBtTkgvOWRSR1hSUnkvTkpKRnVGNURWUndWR2lLbi9ZWjV6U2gvTXROczFVakNMZ3JOK09OenRxVzVTQnhYd1Fsb2ZyQi9WMWFLa2FYbUVuYjVyL3ZOVGJCaVR6RWdQTis3ZDdqSzh6Wi9tQ1ZRY3hJcWZMUXBmRnV3bWV3SXlWQTFOL2JScHFwZXF1azVTQjlubms0NzZ5SmorYk5UTEl5RTB4akUyZU9EOGVha3Z3SlhNUXpXVXVrNDVQdlJkbTRHY2Rud28xTXdPWHJvNmgwektMRDBNQkJJOFdQczJVNWMzSlMrT21pVnZsb2gxWlByTnVBdHdHZWM2SkRWQnhnclhKRWx1MzJjNSt1Z3Q4SGVteWx4NzlpbTFpMUl5aXN2aHdLaHNFQWVpVWhzNjVUOVJKdEZVNDdiK000WTZLYnlLSmtZK29KV2k0UkJMbFJUZGpiRUZpTXJDUWl2VUJONThTWkJwRXpsYzhTbmkwaWR1NThMMUVmUjBjQ0NVSW5SZmZuaElPQnJlenJ6ejRESFkrRnVSZzNvL1d4Z1pERVR4T2hVa0FrcjVKbGJpTkhSQk9RUmloemVIZnlGM0ZLZTd0VEVLY2N0cnd6TFNSVll4Rmd3eTFndUtydDlnb0tQWTczQnRuTHREaVFSeTkydEI1ZVdBdldmZVBETHFvaVIrekxNeCtUTU1JS3FlYmVxbGEvdjNRTWdjT3VaakNqdUJXOGNEMzdySHdqVzZsYUlaYVVwdXB1N3pWNVA4SnJYeUQ2aVpzZUxkK2tyT3lXZzJxTDFIOThhTFBTL0M1V3J2WDUwY0ZEZ2JkUnJ2UWlEYUhlbXNWU3hHeGhHVEZ3NEZmbjBXZDZkaGl0Ynh3Ymo4MUJ5SDNZUWgyK3FUR0hKd2RDTzRUMTZ2TUNRRmJtQXR6SlpKMTYyb2hHTnVQajNSNGZXVmIvMEVWWisvTjlIalI5SmlmMzZJam04ZmNBSTEwNHhyblRZNjFzZjd6RWhhcDZjWUNCcmViS0tXZTJRb1Jyb3owck91OFI4ekNacEd2OUlpWlFqYVNnSXY2N1hrYzZrNU9xRExMM1QrRzh0SGhneHUwWGtvTGhVRE91aDNoODM3RVRUNjlOV2N5NC9ETkRzaGhtaWFrSFVvTUVhMXR0UnNMOW9Ib3plUW83SmxBM0xwZXN0S3NnSlYvbkU4VTUvbXRBS05sbi9IYjREZlBDbDVyaUh0eEltTWtFaE1BQ2c4Vk9sVUNKVDNwSGUreEtvZzBxdEdCWlRuMnBmQ0xPdVZ0aFpSWUI2ck5wbkZBS3Y2MGJENE9CeFZydHNuVjhtVCtwMUdySjVHQVdWMENCMmkzVEVsMnVycEhMVFFSSThjenZ4RVRQbGs5QXMxSUVLdTBhOWlSenREZldnTnRkNlIxSGVuRyt5UGV0cGVGbVZMMXduelpLOHdqQS90bFdrMS9DY0FzRkZFYkpVQVM5NVpzZHdqdHRycjV3VkZyYTdycWFROUU5V0lyTnFZdEprd1ZxdXpDWE5kUW82Y2duNzNQWjl4SWVVcWwxSXVOcHZMRkVGNEFsWElDczBZQlovRWRCREpvN3kyNm5BaC9oSi9vaW1rb3lyaGlJbTg0K2ZsRkNvWG9MaURNTDhsbXlUZFRZWTFFdHo4YmVaLzArYU5IWGRLMXRaMlBoNER5enovRzdwdVdLaGk1T0FZaUVGY2I3RGhPMUxoNm02L2hRb3YybFhtT3RnWjR4TmFBUDBScWxob2lWMmZqVllQQURlM3hhbldFRXlOQ0Z6bmN2ZjVoNEh5akQ5ZTZFbC9EZ1hsSytGNkxkV3lBRmZpaE9xYWhFZVNrNFFNUG90b1pMUDVRdGkrYk00Q2pGMEtOVmNjRHpmWFZVRTZNYkZqbzZyM1M2T2ovUUcyaEFxRnBoMlF1bmFrM3JodU5kU0QxT28vcGlPWXZIdUNjQ1V4d1JEUjJZZGxhMUpweitPa0hlTW1oblBKd0h1V1VwL2pVVk82eG9ocW5GS2dJTWszc3VUVDUvU2pWNTErOHNYcW5td2hQdGNES1FmOUEzYjRxMGdyZDhVd085aFpvRG5SVmdQRlRpM3l5Qi9UcHBJOFFZMFAwb3hybnR2QmtYZDMzbm9tV3ZyQTcwNnd5dkM1UkhPdFNKQ1dza25HR0xSeGxBb0ZOdUJIVmVQVENmbHR3WUEwbzJYZ3VMdXZyQ1dQbHU0TW9jMXVEYjVReThUKzZJUklLNGhjcTkyaGJwVWRyZjd4c1hzb2FPZ2lmT3RITytqY1ZQRWdkTldCTjZkOWNMRCtOeDMzVnhuQ25DSU02STFUTnlLczVlYnVlWGVBeEdCdFFDODJCcUlvdFJFa3RWY0tlcGtEWmtvTm5FWG9aVTVuV3dlMUF5TzdhOUkvMnE2N1JjOW9KNC9kRThUUm9kQTJpdWR1dzZoeG1YRmhwWkJVL3hINWxOZW1WMHIvQkdNU3EzK3lzSWY5MFBzYVkzVjFGeXU2SlNnZytoaGdpUXVOV3IyQnMxZUFUUHJyeE5BaWdLMU5oRjIvaGtLMnVsVXZiNEtmZkRIR1U5NmYxeGFGNXdqS0p2ZWZMdHJRT1hKK1lVWVBaejMra2tMa3ZQVU5GN3F1TlBFak53am80bldoejZpckJyamZvczVENlZUNkFlZFlXbTFoRFRGRjdMT0tGeTNVL3VWWHdwbXkwcTlEcC9CZndwU2xNNE9Wb2FwYXdiWkhTOUFHcWppVFBJaWxZQXBaeThHTjA3ejlFd2FValRQRWJXbTU0cm5WK1BMdTdHaHF0SXdxdGsrOW00QmFDVDJqanNnRVVxODM1SGdld3pNOXRldmhVUkRpOFhRaEhpRSt1TnU5anp0WTAzWGpNalFrVDZRMWtIcEZFM01uczRPQ092ZVgrcUhNVkJ5SHVCT2VBOVR4bjBPUTFJcVJqMUo4YXVhUkJIbUE3TGVsdHpLOFhQaVFvZjFzUmVIZFdPTDlzTXdCdm5NRVZNR1NuNTZJNmMrMWxhWXhCNUNJVWR0QnBqOFZMMVZvdDRUd0ZoZWxDS1crTmlKVDNueHN0aWRkVENzVHlwN0FVM3M3VjJmbEJTSk52WXV3UnFMd2xVS1NQdzBHMDg1eDFVT0Y1ZGxHNk85Ym5WUWtBbkZzNzMzcDVVQ0I1N1NJMElZV3ZrT3pZR3B3NE9zNnhxSUwyVm4rVGZHa211ZmR6ZU5CYzN3Q0w2Tm03cWxYa0FSdG9XMmw2Zmo1U0xCS2d6UUdGK1M5aXQzc29oWlZ2c2EzWExvZGloL28xODdyNE1OUGduL3dlTmZyY0Z2RFdKajVnakl3b2NlR3l0Mzl6SDJzanhYd3B1cWNjM0xxdnlZZCsxTk41WVYwa0Mxd3IrMERnc2txaW1xamdRMllmRU5SRVNlVVN1a1dEdEpCYWlDSTJxSzVhNlVpVTJWUWdnZ0J5RG1mVXZORmpSSWhUOVNDdFRNUjV4RndiVXQ2cmY2KzlKUGdoNFZGckhyU0hkY1FUaG82R1NQd21WUG12ODBXcHVKSEo0Q0l3THoyRjIyZUFHSmp5OE4xcEV5N2EvT0NURFljRkJIYWhCZFcrL2NNTmNjUS9zcE1kZnQyQ1BDS1N1NDJOd3IwaUgxTkNqSG03ekRJcWlpcjlSZGpLUlhoK0k0YjU2NTZ6S1B0ZGV1RHlnK1VJYzl1RCtpWTBSekFaVUdBZWNxR0RxaDQvVCtmM0N5OHlqZ09KZ2lDbXI4ZkdDalZZU1ArU1Q1MHQwSDU5QW9TWC9XbHEwZDhNSXFONVZnRjB4SEtkUWFKUkMxdVJ0dHBuMEdPUXIwTG9TRHpHdUhHM0J6M2gvT2NUZDZyVmkzU25FYk5RSFZjMUF4ekduV25VbjlPN0NGZHhBU09peHFMSVUvWWVZS2pSM0d5a2d0UWs3UXJucVJMZUJvZzFyU0dSVkJwTG1UNS9kSzV1cFB5dHlEVFNnQ2FML0pBNkljR01ZK2EzV0FUdUlPR1NFcEMrcHhxcUxTK3c4c1l4RWJHZCs5KzQ0MWF4akg5UUpOQ0VNNm1rWHRDaklMQ3U3OERkeUlmMVJkb3dqbUNDNjRuOVduVlAyV2I5QmVhSlhkSHRzRlI0YTh0V1dGdEE3eldUK0tVQ28zaGtiSkdJZXRRMFdkbW85QmVhcERRaitadDk3dWgwWU80b2Q0eVN2TGdlcVRNdEp4UEprc0FVZDIyUUxXemVnSHFqd2FwdVlEaVRzWU5SdThRL21kUDZ4eVBDUTBENWpZeE9XaGZwcjhuZ0dFVjE1OXM2anZsYjB3SW44Sm45REZTR0RBbnR6UHVmeGQxSXdRUG14elZJT1dIWVhQWFdnMGNoY0tqMGszbjdDQTdXUEEyQ215eFFuUmplLzBBVzBhd1cxblBsR1RHdlc5Y1J5Z1RQRXVPUEpPVnlrT0hSdWprbi9EeDZyWHNFOFJFOTlxWDBxT2w3b050VDlvK3UveEFEYjNyalVqVlB4bUFRc3JVSFFOZTdrcEV4TE5DVUVaRmlmbXdVZFc2ei9VQjhRdzA4SzVBaExCbld0S0dEMmhTNStZMmJ1TktMbXR2Z214eStRRVAvMUJqYkltb3djejFKaDBLZjJ5cytaN0RjV3hhVUllZlVYUlpDVTM5alRURDNYNkhuYkdVRS9BbElqSGtJMkEyTnp5clJEWFlha3IxSGZUbVI0c2RDcTh1aWpxdG5RV3hsUjhrV1BhdUdLVjc0aW1EZjZXY1FOVHlzYnVyUVRKUHpJeWpYSGlONjV1Z0tkVUgyTm95aldZOWpHTXVUU29VdWRsOGhRdVRKNW1UWmxNdGhYRklSUmhzV29XaHJ4Ym1lWVBGeGprdEhqQ3dCd0NpVGI4M3ZsOTZxU1VkRFExUkZwQWIxdGUwZlpKNk1WVGE4aEl5Qjd4YVMzbzg2dkNGdDErVXlNaWYwN2ZhWmRYbVNic091aVYwQU5RT0lJUGEzYVYyY1Z4eHB4blpVQ3pYaUVuWW5yUFRETFM1b09qdmlIZVVaSjljRTJWNFBLMUVpYTRMclVIajN1ajdlcDZWOVlEa2FGandEOTRvOFNpUldreUswNHNhSUQ1VUNKSHJjdFoyYkNpWWNqR2dRYmdLU21CejFKbDNyUm1tc1FBYldmRHJLRTA4R2dkd3liTGtMbllUOWxCeDJQTmplOURkVVhiRFYxNzFTS3RDdVpvWnhuYWpUMlo2UmJIQ0pmRFV4MEZmWVBnbmowMnFpSlpwSlNQZ21pbXNxSUt2ZGpvNS9TOUExMjJJMTdha2x2WGdYeWxhL2JrL3FyeXlkbTh2NVQ2SDc5SUI5dm1iY0lybjg5SlBxVUhJb0lvY21CaWhkSWJxSFE1NUlZbjZmdWRkM1hvT3hiM3pxWE5rTUp5dmVHdzdHSkVuNDlNNDdMTkVuUFNDMkh5b0ZZZEp2OTF4cmUxTEMva0xyc2RCclVIZ1crZkdoSEovdVNkUWZwaXd2blpiQzd3SVA1a2FqTzhMK2UrVUI5VjlKL3VoVGlYTDZSaUgwTWU3QVdER0lXWVRPeXFyT2cwSUdVQW5MVzRRbG5zazNXeHM5R0xxRWFYbU51QzVyUDdISlFOQytNZCtOOGlCNUhldlNPNE50V1NkR3VRTVptSFpuVkxvUWpIVXF0RGJlZ01nenhBdVlmTlZlYlFWVFJJRHBvUWVhUzYwUmovaDdicS9vcVJEOFhUMytJNGQ2UkxGOWdTVVExNTMweTd2Q1IxdlZ0ZmwwREFWZVJhcStWc3F1d29jeFB1SEJPSjhML01LcDlQUS90OHpyWDhiQjQxdXJRMHpBaVYyYWdnTXFkazBabWxneUpremNMQXBLaVZMLzB6UmhjUVVFOSsyZGVka2QwcmdKTklGcHBudnIyaklIdk9zdFo0aGVrK3pFc1F2blNEUUQ2UzRETlE1SHE2MDlXZXdaZFhzMDVHQWEwOGJ6VmJidVVzQlFHV3R3SU5aZzdNeklDUXFpWi92SmUwQmpRSGR6MDFLNXhIT2ZkQ0ZwVlJBMVhkdU1MNDNNUUxVWXdVMkJiNWtTQXZTQ0wyRHhYdUxrd052TTdwcGFPK3Q1cmZhUzZ0b2J2dW9VU3pralUvOWJnenp6amI5QkM1c0x1Z2JsUnVIT2VqNFFyeWRnWXZtTElWd3dabUoyTW1KejN2YjVOVm5ybUIySjZMeE9ienRZM2hNL21EUVdWVTJWNE5laXZFejREaG4yT3JqSElqSGZqRmNLTlZNWlU2U1d4YnlEQ3pnN29jcWR1MUdJS0doMlp2Q3BGWitkeWJCLzBYdlRBZFRvT09LMDdzbnkrRVVPdEQ2VU1kdkZaZWdnWWNERVlueHlocTAxVlhEQ2Ezd0tWQ1FJVWg4cVBEWngxcGdvV0c5eDFDd0pjQ1RHVkxtSVhKaG1WbGJMbWlJOGlXMGVqcWhnYk1oUlNLeVhNbGZiR0tUOVI3K2FtMnliL1dMQjFwL3FhVlRLNlF3blNrNGNyRGdwdWNRdEhiTDdYbFl0a0xLaWxLSDJ3ZEdTNW52b0RSWHhiZTh1RGIxRmtqcXZxSTlQR1p1MU10S3RnVHU5enp6d1ptWlJzd2Q1dG9HZUV5aWhjWEpmY2M4eWdoMGExR0dlVGhSUmg2dzJpOGJBR05iRHREKzh6a25TdlpJbFVCWUxxVGZTR1JRR3ZFbmwzUlhadnpHUG53L3FWS1paMHBvRWJEb3ZkY2E0KzZMZ1B4WThmQVhKRVN0dW9lc2F5V0dHTmd4QVlIVWhPZEdBTzcyRkpIak5LUWg4QWFyK0tZWmprbkJENllPd2RoWWdVOUh2dkFUVUtaMVUwQWMwL2RRT0krcmh5WEVXSy84ekIwdE0xb0x0ZFZPbnk0RjFHSFBzdjc4NnhwUGFlcUZ0VFdKNEdmK2VVSDlwWjBreW14VlVZcnlKQjVKT0ZIRkNWMHgycUpnZDl2RUVKWlBkVzNOajM2bTVmS1VORWliNlpXNkRRY0kyMGNPSlJLRmEzcEVGdHF3ZHlGSXl3VUhxbmdCT1NXZmxKcklCSjJNcDlaSFJia291djRyU3JGR3R3YkV4SjJDUXBCUGZLSzlyYTBhcVBDN2RhcC8xV1p2M2hYMzFmdDZhT2lEK2RCS2FFOElEZU9WOVZJTk9sNmRZRDVicHNrZFFnZ25tREVXY1B4SFdVZ2w2akdLRGZ5UlBDbXhSVkVKd1JlNUxndTVOajN6MnRJWElvZURWZTZibkpzeFNZOUtSSlpVdTBFclpvQk1VaTV6Zm8yU0hVTXczQWszZXk5VUR5d3F4YWsrTzh6SmxhWDE0ZjkyUGdadE1VTFpVYjZiZXJURTlzVXFOZVdwVCtreGZhSXNwYmJlUDdaUlE3MFNWN0VGNjI3MHpmcExXNmtRRGFLNWU4MHFmRXZUcXllckR4VGswcHQwS2V6K0dnZFdERzUwRVJJMUVKaWIwZS9OdWFzLzVHNVAvY1p6Q2VIaXBlbVVqb2FLRS8wWTNSbGpSMzNjdUo1TUtNRHQ4ZVpicVF3aElMUFNWbE85cXpyZG1aVkhzdFpTTmxVdzlDZGdwdW9MRkxtRXM0TFltb1FpN08zRjBkR2YzbkdpTkhacjJHdjk3OWcreloxaVdPTGhqL0gwLzJBc3ptd1dqWFRLdEVXSSt1QkpvTTkxZXdqQlIyUlBhUDdta2hCMlpsZ1AzUWovZkVTVUFvdG4yV0JELzNNekhSUmUvbGlUM3Vib3M0UlBURGs0NzE1blVnTncycVV6WS9jTE40VENpdXlRaitRc3h6WlMwcjNNUERJL1FVU0l5VWFRR0dxNUZZakpTTWV6Z3FhRDluM3RQYXN0SVBxVEQ0MmIvMlNTU05qbTIreFd3MklUQnVRdFk1alpidy9BTyszL2ROWWR6ZkZEQ3NrTkZBY29Ta09KMWNjVTJVTis3NHpONFJIUmZjYUwwaFNyYVJUR0lJMEJDdGNXSEt0QnNMMUMySTdzenc3cm5KUVNnSlVhdjFueFUwR3JMbCtRdVJkMk9rSVMvanVIZXk5RFBWVktHUDd6TldTSzF3OUFVb21jMnhCMFB6RTlQem16akRUbWJ1SUcyK1dOdFc0NzhFUTVEeml4VHN0TUxKMExyckhpNGFLQzBFeCtpTTVjNllIUEYrNHNuM3MwcXR2dkdGbk43OEF6aFJxNDZob3lGTVFuV05KTjhFTnJBeEZKV0EyRmVJQmdFUGp1L2t1ZTY2Smw0SFY2OS9ldGgvMFhNbHpvRUYyNy9qTGI2akNCY3NDWHlZS0xpcE9PTkc0WjNiN0tJOWc4QmNnbThoTTQ2ZDA0NkJIQ2MyMmxwNnhmdEdxT0dFdkVsc0hJSDkyU2cwRlhZYVJjbGx3b1NnY0JOWENhREl0SFVpbTdpbkVkN2RnUGlORjdSejJsM2cxeTI3ODFTMmplcmQ0dldMSVNTd2s4V1BCUFBoRGNqdyt6WmhZN0c1aVFyV05FSkVuTDI2WjNpZk9DeVNmQ0lGamxnUWVqSmVtbnhtNVJPSmNabnppbGtuc2p3aUNibmJaTERwWHEvVW4vUnNDRFFOK0xRVWp4THNraGRoQ0thcDhVVzRlaTZKek5IVStQYURNNmJXdVI2dExpZ24wcUFvbmN3MUY4RTVsbW9zbjhvaGlyVEFIbG03c1d1Sm1FSDR6dWQxbHdlNDI4UTlwV21PV3AyZ01TZ1YvRFhyZWlGTU1hNTVNa3JHU1lSWVpWeUpNbDFpMTBzZmdBbytnOFdDa2dHbkVib3JtVGQvdWlSNDVlVkVKODYyL013bGRZejhLODJLQ0dHNmdDeW0vYkFnNEFUVnlmWjMrUlFQK0RBTU1tUzVCMEhTSEkrem1WcytVU1hocnppd21HWkFLaE0zU3VBQzJWT0Y5RVpuWkluMlhaOEI2dU53enZqaStpOXBOcG1iaE96UkdoOVVsUTZuejRuaXhJOWx6MWJFbnNxZ241dTV4eGVFL3MybFhVSHFndEZHM2dwRWVjdTRBb0QwWERub2tBSEFqaFlTZzJRWlE0QVJXeGg3UU5XOGZHb1RRWElqejZmUGFwMzRSQVVzTGNxTjk0OGlGTHBORnQrS2ZPcFF3R3NhUk9EUnpJZEhVeHpwQjBaMGljclhWc3RpRk1Yd3cweTZqdG51dms3L1ZGOWNjUGE4MjBPeFJyZzJzSlM0ZGtaV2lQTVFwS0hMb2J2cEdmbnRVMisyWnNLUVErZE1xVkw0RFpkQjZTb20rYTdhZGh1QkxwTjI0R3pmVzdjY0Vrenl1ejAzN3IxcnUyL3pIOEVRWWI3V0FMME55dUlVcWQyUVhxQ2ptZmJ3V001TDVBMUNKcnNTN2pIRlZrd0FWdC9xTTl0UHc3cGFONWlnZmc3bkxaeHRBOHYrRG1VazFGNUR3WU8xaHp4NnBCbmUzREtSTUVWQlFhRjd0dU9uZDRVU2M5cTJieG5LUmhpVXFvY2FjZFNwVTNZeHlhaW4wS2RPMnVCSEQ0THFlaVg5UVlrS09lRHlYemN5WDlXbUZ0TjJvWU0xYWdEeWJjZzIzbXoyeHZ5cTh1WXh5NFRrN25kMmlZYXZsWStQcEFaSDRWVUFJYVJLRXpMT2dPOWJ4ZWVveVhnVnk4UTlaVUx2emdjTXhSNzVOOThtMDRJRUUycForYnRtUmMwclozREl1V1QyS1RsdXExano0ZW9KOVA2WVg3VFBqWHJTUjhNQzhKUTNqOTNSa1hkTFAvVWsxRTRYMkg5SURwb3F6WGZPdzE3ZW52N1g2VFB4dHB0KzhkSVVBNFJaOHI2MnIzYzNSS05kRFZLeGZRbXprMlROUS9Rc0dHeThZQldIem5aY3NNU2htSUovWkhEcjdnS0RubWExMjNYM05JMDNJdTl1VWlLUEZDd0R3SlcvWEtQYlQrWnR4VDBpUittWVV4dVRoWGVwMEU4UHorSzcvMnJJeUZ0RDNWN3FDM1p3NGgxWVo0ZzBncnQyV1ZIeGxWeG5uMDdoZThBcnNSbGNRbWh5ZVdXMnpEc1ZOQllSbEpUSlJNTmNFcDhxQ21ReERQRExMeW5mT1ljRXlRQXc2Ny9RUmlWRU11WFlYSDV1QnBmN3hpaEVXUFlKaTZ2d1YvZHAybVN0aUJkaldLSWpIZzlla2g2b2VadlY2OFF3YmU1RDVBb3RFZWJoaU9yVXlmUXMrdHZVVDZ2VGNVc1ovQThqM3VTa21Td2tlVFpGS0QwWldpQ3MrTVFUQ2oxZXdTZVlmSW5NWTZSTnVKbVZXcENzYUhYNXNlWFJSZjdVZGlCSXQ5VkNnZFhKa1E2OCtHazkvSWpRSlJBTEFJZXliMGhYOVdMQ1V1UUpsL1RXOWl2OXJ3em5GUUo0SE00Z1RmWFRPOXVVcEQyQ1NKTWZQMy94RUx2V1RwZkFlcWduM1VGemEwL3dlc1hmNVFSOXNjb0tIMndsWUNPRTg3MytmcG1JRHhrU25ySVhRd04wZlZ5Mmx4YlFnU0taM3lRR0ozUTJxUTQ5QlFjc0lQb2MxRVVUcExGUUFReHptdHd4d2pyYTJTL2xZR3Jjd0JLcmFpVWI1M1JXSm5IQWUxSXk2SkJaZThlMHpXZWc4Ylp1ODhlU000YmQydmFiWktyU0l4bWxob2NyMXFWbkd0bTdzQ2Y5c21FSEF3aDFNTnJCTlRMK2g0QjhjdVRyejlIM0lxd3dQK2VzQkEwS2lFQ2tkOG42MmFWc0dvb0x2OERFWVhUMWlTSU9ZREF6MFJxakdJMVZDVHc0c1dyUk1Ydis3ZWVoa3JHYk9oek5pa3Jta0FLTHE3VFNzMWcrcVJuNFFsZnJzV3NyNU1lSDYrRFRaVjFnNEFZaGlrYXh5VjkrNXVmSjFIMnIzeTREbm5SZEg3UHFMK3EwVmVIUHVLMndmSG9SRnZ2YjBONExjNFRlUDdQWHZTM0M4ZWphRktoeTRobDRyS3NiZjhQRzVNeE10NDB3SU5ZNTE4d0dlRUpDVlV4UGpUT1kvSWZsb0cvWXQ3UzFnZ0gxOGtVNW02Y2Q0R0lMaGoybWNtK0pCdDA3elEwdFZhQ0c4Wng4WGNMalpwdndUVGN0c3Z3K0JhMDR3T21Sa0VZY1RPT2cycmh1NlRYbmpRcEIzQkFYbmJockZxREw3MFdBV1RZWGpHcUM3akJMTWpzSndtMjBBNDM4Z3NjbnBBNDJTT1ZWQXEvby9TZHRBVUV0N3lQVWZGaWtheUo3cUZpYnptUjIzZmN4bm5PS21vT0Y4dGZ5ODZCU2oyaEN0UjMvZGdXa290eUVvV2FoMFZMdzJBbkFRdHVBdGFlRXNVZ2xtcmxuTjJ3S0ZZeFVFRFpVa0ZWTnVtbWdBT0xxcFRVUTFFeEdXZDlFa3JlYUVhN1ZKZWNQR0Zud3JvYzFMZFFOdUNtMno3RllpQjM1M21JS2dydFMxYXVkWVlTYWsrcVliUVZqUWluZjhJTG9iQ1JEU2IwZStDeTJUZ3lkdUNIaHQwSUlLTjJCRE1hK05pRXpnT2pRK0V6MVpRbG9SZ2piNVN4VkpodDA1RjV2eVlKdWlmYWpYampFczg1RnhVMjZ3OHpwcDJkK0RGZ0FlS2VCb1JDUGZGcWhiRVY3ZkVMcnFmbitKaCtaNnlHTHdaQ2dvQ2NhUGxBZFhoWXZPOTZPVVplTUp2bG9hMjFycUh5akREdEhLRUxMZU0wSG9pMStURm4xbGNnaVplUVZ5NEIydWhtT2YwT05PeVRXRi9yWVVsQ0c4MUZIRXllTTU3cU1zbVlVTWJmeDJNUm92ZVlQbXVsa2Rya1YzTVh1NlN4RFVTVEk5UkN5eVZuYnZPRU9LZUVrcElwVmhNRFZMUENsaFV3TCsyMlpXWkF1K2pBOVVQYTBPSGhSeEFTeU9hWlYzc1ltWTdtd0t0WnlpNWVtclRkYWZ6TzFWTGF0VTlva2w3VmlNMzZ1ZDlUdUlXL2FBTU1rMDhBekpPMUFoT1FDN3Z0VXUrVVhZMXJNc2JTVG9BUk4zaTM4T1R1T1U1UXBzWm1GMzZKb0VNckErU0QyaGpSdy9McUw5T3A2OEZEemJSVTZackdqZlBaS29xZlpENVM1RG9IV0dtUG9CU0JKUkZJVlhEVEVURFF0RTY1M21nU2I4aGpiWUpaOCtCb2VYL01vQzZPd3dHS1lhcVJJakJ2SDR1NEFGSnV1TXhhZE80YkdFYkNmbW1NYlJ6LzBOSVpCVXpYNnJCTEhBbGpIUFdkcFJ1dTNLMEpqbTFLRzhxTU9TYm1udS90ZHhXOXQySHQxTVpvNEVKQ0NSRHA1TTZIZThSZXVFdk1PdThtVUtKSGcxMEpBd21ROE5vYlZNVjdSem5JVS9GRThtcWlQZzhaNUR3NTFFK2JlMytDTFI4K0daeElORG1pZTAxdklWKzdJY2I5bEFjZHg1emYzTmlNZ2Z5Z1ZOK3pMaVltUldjNUlWalIraThJSTdleFdibHFraXFyTG1ydzRKWVdBanlkb2VvWmVnRkk1QXBRdGdSRjVMVkxjbUpHNXNKTk5yVTl1cERhcVNmRFRZQ2U3VldBS3MrWmlHb0pCbkhJcUZOV29TYnhHdjZYUXdVV2NLbno5TnZHakR1YnRYcVJjTkxpNzV0Wnpxb1hqMU50SlBtMDJHU1Z4R3p1SkxJRGxXeXBEenBIT0VaMDJxM2ZKbEZzZHR6QVliODFHU0YzcE93V1VLbk5vblR4QTB2R0Z6QSt1by9rb01QY2lMVG5NVHpadW5rSXFySlZTckIra1FWNXJqZmVOdTU4Y0JocW9EYXNCa0JSTTFDanlrVUY5MFluS1dINkROSUUwbWZlb25BblVQK2FGQUNZZU4rQmFWd3RsSUFuM0sybUFsamVUMnpFOEswUTBQbXBCRERIejRxcnI0dXNNYmwra3lCZjJtZjNuZ0MyOFpzMWtNZmVkYlNUSUh3T0VMdG94bDlKUG1jN21hemRVeEpjeHZSVTZpZHVDSGZnY0xuYmUwMUNPYlFVb3Jlcm1DWEtDWlFRQWNjNUlQTXdnS1lBZmFEcTEyR3h6ZnJVQnFPN0JLSVhDVU1YK0JBTnArZVAvNmlwMndyNXRWVFNXdWRISk5QS0NJR0JIQ0tnNjdnbFNIMXRxcnFzWnJvZlNkakx1NWlGUTFVcmxEZ2c5bE0wOXdBZ0kzUERiRHNKbWNQTXAzenJuYkxGbTRrYWc3WDhPQXZnZTNPdDMvem5oa2VQN2tDbzVPZE9PUFRXeEJYbDhmeWxYVnZqdjdPcEVnZ2JWWkFyWGlNM2RjNW1tV0kwZXlDR25MVlRYMmJMS3M4dU5CNy95Zm10T3A2WTBhTm5Nb1ZqakdITENTSDNTQzJJM1l2enRhVm1BUUNRQmZhTFgvNUpXb2h4aDZRLzNYUHdLODQ2cEJWeS9MbEpTMmdibVBERFdsU29aSzRZU2QvdmUzOWlkTzljM1c0V1V4NU91NHJQWjNSbEZYOVB5VnA0WXBFdVpKL1RpczZyRUNzUENQQTRKWW94Rk9nWDM3cHlaY3lOZDZQUTUrZEZ0WWgzWGdERlg4ZDhSRlV6a09ndldZNzNocFg5RUJIWFlYVWNCUXhPdzZjRUZIUGd2V3BTSzFOTjA4WkpSZm1udHNOdWw3ZlFQRVRhZnRwd0FTV00zdUcxUUFSdHE2U203TFNSV2FzMy9tODVER0VCUUhpSzV2eUppSXR5ZzgyZHpOcFZGbWVJSXJHYmhlTjNwTERweHpoU0svQ3dhRFBkZ1lYS0k2VW4wUExjdGVmSzVqMC8xN21Va05sRVo0RTlWMUlEYlpCYWw2VTl4YmIvM2pkRU45RnpqVFdIclFhZU9td2YrYXFMVHlRejFQVkdEOEVvS29TQUpWSjVKVDA1djFxdlF0aEtlSjVxSUhFZFNtazhpdVRJUW5UbGxzcFJKVWczbm0zalhOQXlIN0IxK0s0YWQwSGlOcDluY0xLNFZrV0NLMEx2dWlqSExmWW1NNDdER2xZbDIxdmJNS3AyMHdBcUt0WG1wdjNWeUJXNk1MNDZOTkdXNkU5QlhsR1pqbncwdnp3VnRXaHI4Vkw0bzZTUWZ2WlpWRjZyM0dIbnRVWGYrbjIvdExKMUFZZ3NtY1NhQ0xYWmlBZ1ZQM1M1OE1jd2g2WUJGbVhlK29LTW9uVUlUUzdLMS9zK1BYZkliZlBJSXpES2dVbXlmYThSMnZ0cnVobjUvOWJDOERrMThkZFUxeFJmc00wY1krc0kyUmhaRXlZb01PdHg1V1l4TVFUZCs2WXhGc05zSGRXSC9wbTlRLzBmVVdiQ3BLS0Z0QngvdVlNOGJUYWYrclpKdlZMTEdpM3k4UDVVb2xIWU9mcklXRDNGRUVqNno1YUVQc0lyM1VYYjNqL1dhVkFobFR0eklMQlNpZmd2M1JXcmk0K0VtNkNkcU9FWVpqc0diUDJOTTFWNmFNQnBmdHhNSnVQdnVVS09scXVJSU5nY2ZsZ2dteHRVV2Q2Tkp3K01hNVgzb0lKaEkvRDRReHRYdTRlYmdGeS9zYTdrU0ZoTlBHR2Y3VzVRQ1hoUndQaHlYNWpJRGQzMGRpQ3h5YnB4ZGpjTGFlcTAwdVdocERvMnF3RkszeTMvQVQwT3B1RzlHZ09XWC8xS090OEN3azN5MWcrRmZPaVFnaXNhVFRFbXlGT3FOVXBlcC82WTNOdE5vZ2c4ZGtJNmhpd2c3YVNDTnJXOWY0WnlSd0l4Ty9uMXdjeEV4TnB1SDgyWVl0M29iVURhbW9jZ0RWa2k1RDBGTWZMT3RWMFJjMVl3UVdMSnZidGt2VktrZ2J1R1NLaHYzQ1NhMjFKdkNFdjBjQkF1Q01tMFE2RUhlQjl2V0cvYk5lTFhTNUR4QmVqNzlaVVZibUxrUk9mK3g4T2d2b2w5TVFMeGtEcDFNUkJ3SjI3R0pickNiZk5wN3RqZlJRZWw5dFJwY2o0N2FMdmNKTVU1NUpnQVpEVXdleHc2Tk1VODRNNU4vd2RxZXYvVmFTRnRpME40MGxYbDM0b0oxNzlaZU4ySzQ5L3puZHNhRDA0TVdLNXRsZUJOMzZ3WWZMV3dmV3FSc2pGWXpwb0dDS096ZjlvcjRnWkFXM3o0TWhHd0RROXpPUXZrUHNqOWtmVkgxeDduckFWTUNSMGVMaGRYTUZnTzlOcWZIajNKcTNxb3hsaDhvbzJwWUFNWlVHUS9HcGtPZktBUjBENGp0a1pLd01WS0dGei9CSGZ1QWVQMFBhSXZzdE90VWJ2SEpoYkV3dzRYVTVYZXkrcHg2clNJdTltV2w1R1AzVHZ0R2xnMEg1d1AxMUxEODFlbHcxVnJYTGhwQzVLaTZYbWh1Z29BaFp3b0J4cHRzTXJKM2NXTjFMZ2RrTGp6UWw2WnpzYXplWkVBN2NGRDBPOU9mY3l1TzNjcUcyWmRoWEJ2enBSTGQwY0ZTME1uMHRRK0dtcnk2Zm0weFdicmhXbnNrd09FRmtZeHBUV3ptNWdyZ3VVZmhKOHJNSE40dnlrV0l3STQ2SzVQRDZybzVHNzlnTWhtakN6ZmQyT2pZMnE3TWFxbnJoYUVzRGl1NFFybGsvUnI1YXNYRDAza3p0QWZSdm9MaGN6ZWFSWWRHM2dsQ3JBZ1gzN1FjQnh0NVhxTzM3M0hwMFB6MDhnMjd0SXdnSFgzdmZyVk02aGJiQlA5bklybjJRcTVxL0lsT0w3VkpuQmE3Q2xuWmx2N2FmdlBkVzJuRmVVRmgzVHNGd3QwbUxvOUtvOWJiK2hPeDlvcnFKYVF4bk9tNitUMlQvM1k3OU1iZC9OTzk3dHhvUzdNWHN1ZDNWZ1c0NWdmSFdzUzlkRktOMmgzdFhKakJ1MWdOYUlvYTlEaThiQ3dDUjV6UGM0SlJIS0UyMUprUERZdHc5QWlpVjBHUkszVXRZc0lOc3JDZ2NaRHVyUnp6dlEzNURyaVRIR1ZxL0JXbFVyMVh6YWIvaG9vcVdnRm1pamxzUFFEaXZ1d1VzTU0zTWIrUU9rZ1NvVEtqRWk3RW8rY1ltdHF2WlBRQUYza1VqWTZldEhFTDNQR0JmVHVhY1dxaXNwdDBpd0dVdzNaVm5UVUUxY3hIZ29lczJOVkorWkM3dlkxSTkzWVlZaFpxRVNXMnk0ZlEyMXc1ekU4QzJNcGNJRzRuK0RXek9EQml0N0hqNVp1ZVR3dXZCbkhCbU5rY0lHSnluS3ZINEkxVThyVjAyVUJyL3hmODl0VFRWY1c4ZWVJMkRtQlE3T3FzWnZuK0NwTmtiRXRMclR6UWhUY0lYU3dhbEpMKytZeGl3Mjc2ZkFLRm85TVBTVmNTOXVvL2xobTVUZ2pVN2xhQllFVE5hZkJ5djZsZDczelNEakhkUFM3a2Jzd0p4OUxvSGNTMTVvQkRMZVFhYkIxYTQ0M2hWam85RUloT2Vsd09TUmdYcW93eFFPTTQ1YnRLTit3czdNUjdndmtOakVIdVRFMnhrVDJmblU2MDRjL0ozd3RSQ2QrbFJYU0p0dmp3VXdGeE1jR05mc0hRd1pRQmIvVy9heFdYeGF5cUwzMXVMa2RZU3p2cEhQY2dpc1dqYkZIdUF2Rkg2QUVrbnlJMFI5N3dadHhWWDBRWWlubXBLRFRhSlV3UUFnYXQ2OUFVUldsQ0hIaDNCWU0yekYvRU5heGJBWjA3cWJ4cmtDMjV0bHdYN2FpZUlpVGNjRDRWcjNpTkFpdkszTjJKUSt4VGpFdlRXM3JhejN3Zm9zR3I5eTZHanF3WFZJMlMwekVML2cvdjlpV2hGTWJ2Y1NaeHNKamcvWERXWWdKQnlDbXNpUGNqTi9lTW05NUpVNng4aVlqZlhRY2gvczV1OGpraHlNKzV0Y2YxWnRVekdOS2I5RHRsS3lwclBqb2xKaENwNmwwa3A3QXIvNElycERVS1VnRkpoYWdXeUpMVHJDKzFGMU8yVEpvdUk3WEtrVlc3dlpKSzdaSHNZOGM0Njk4S252d2hqM1N0OFhjeHpSSjhSeHhTUFB0SFVzQTdRaWRLKytUWExuRXdsMHdxVjROZjNaWmxSdElpdFZyYnI2cVpqTjBlSzY4VXQvaVJIUUFEU2FoOWJXZDc5MVczMmVudWhkTEU3VmRPMDV4cXA4RFB5UmhMc2VOMzVSRElnU2FrK2pIUnFoU2JDK3Jud0J4Yi9iTDRmS0x4WWlyaXBOL0ErKzljSnRQbGVWRm1jUkRjR3d0eUE0WklpbzcwdUJDWFYwZTU5OXBKb2xBSEI2Q0VpR01QSWpqdGpGandEem5rTWN4UGhRU2FnZGQweXkza2hKTEo5SnV0TUpKNURBYURTcXJxZWY5bDVvVkhMNVl4N3FiMDRjMXhPVmhrYlJRVzdOZkppeGEyc2ErWWN5OGVETXFLNzZ2eVNBZ0wwZUZHcTZkajBndk1GVHEzMTNROGJuMzUyMXlCSlRCZkhvd0dNNUNURWdGeitLWi9BNFJCN0hwV1k1TnFkNk9IbTNOTDExZjNQeDhPQnBNMldkbW5IRzBJdFJRTFFvN09acWJpdlNybXVKditYQmdiZlIwaWRqaU8xMFJUWXlNV29GK0RUbzRUb2hNWHl3NEVOK2tPc2duVzIyL2hkNi9Dem14c2Q1QTdENGR3VjBmdE5tTkh1MEJSWC9IVitjcnVBd1BZUmo0c25iSW9YK2VOeElVYXlrcE5kbDJ1dWVkSGsyVzlHdGM4TmN4WkxWdU5pTDZLNm0yQXdkWEFpL0IxQVdiWGFCUDVzcXhOSklNMU5pbEpyOFJ3SFFCRFpFVEVBcnhHVWlVa2RrZmo0WjJVNCs0ODJoQ1NzYkRWV3gyY1pad21EZlQrTThlZGJjdEpzTWxjekkxbU5jbGdZaUxDSDdYekQrayt0L2FMeUx1Z1lWaU9DWWxLUiszS0h0VUx0RjhRdVFOQ1hyYjBkTG1jWllkVyswN1BtUGVveDRna002R1dFS1JKZFlON0lkY2d4aEFwVHJCNjVhN2JUSDlzMVh4d2M3aHhpRE1IMmdaOUl1em4weWl2eWk2OVRJR1J6QlRDZDFEd2JkdjJURlM5MFJlMGVDTGFyUG1aVWwvb0hUWkxIeUw5eEZYNkx6dmh2T1V5bDZtMlFDUXFCUEFBMzB2OW9iTExTbXpwMnMrTU1FdllZdTdwZHozVndTSDdrQktQazZLL0N5K2pvM2dKUlhlMUJQeW5qU3MrZkpoYzJPL29sck5oL2JDQUNnVUFsV2xZbmNTRTJQdHJoOGIxVGV3eHhHOHdraXViQ0VYRk9NV3RJeXFzcFhaa3VpL3ZqSUR5eWx3R21wckV2dkdwM3paWit3RlNJWEpXRGpXUHlZNHBOWEdWaTdtN0xSQ1o4MWswdFRMY0ppQmVCakZvMzk5ZnFFaTRRKzg1enh5S203YXZ4VEJsVDMwUVU2Q2F1MFBvbEFXWnFVTEpCaWk3b3BDbXpVMm1yT3ZIRHFuOHJGNzFnc2NsVXkxWnduY1NvS1FsdmJZcGpzcEt4b0kyMDJHYkUzL3JlQ09HK0NvazlucFpBR2Q4cEMwL2p6U29hekU4OHJNZHRKM1BWdnUzK2FnRmx5VVdHV083V1VxSUUvWUUzNTBNQ011Q1RMNmZpU2U2Vkw1TS81V09Qckp0MEpDcGFSeW11WGo3RTVuWGZ4NUFoTWdienZWK3U5dDhhZlNNWVE3S3NSWFZKNEt1eThIYkZkamVBcWkxTnVhZm9SYmhTR21HNjlkbnFQdzhCcktVRUR4N1lTaWl4RTlpVERyc25UeHpkbXc4UEhHNGdDMXNPRnhuenZyZE8xSS9UdEN4NXhyOEd4dm5zTjI2YnhzNHdWZmxmalROYU1RYUNOT2R1THZPbWE5bnpzMEVla2lhZ25rd1FnWG9GZDZESzVzMHZnZllqYjh2RkpHRmpsUUpNSDQ3bk41eXZqWkVFUkJRcmF3bTFXMFlxamRsckR6ZE5yVm9kend3NW1ZcVRGV1FuODdZOEhvMzNwV3c4ZDFycWp5WVY0aUd5SC9peS8yVERaaXV0ekc5NDg2aDVDOVlkUTlBYmJFa2ZISW5qbTZLQ0VUdmJLRnVzL0VhY3RFT2FoczlBbmlkNjRaTFRqNmFXejVIRTFNdXFZSCs4SzloczhOYlBvNWNtWkNGOFU0d2MrVzU3Z3ArME0zZDJlbG5WUWtNYTZuN1VaM0pBMTlKeUtvL3JEL2cyK1NpZnVQSmROV0N2QXRSdHdGRjkvNzJJWkNQN0RhWFBJaG9FMXFCOUJ1NW9aOUhYdzR2U0hMNFBtVEN0NHdzZS9rTElFOFByRXdSNkxCNUVkNzdiR1NoWU9uREtjRkdBcmk3QUtYSXdpMCttdy94QXFpckdDeTJ3ZmxJMWN4V1I2cUtpdzRFcGxaSEorSFIvYTRSUW1jQmdLL1JWcC9VMEFYOFpaa2JiSGNjbk0yRkw5bWIzZ2xQbVFlOFJ4SEh4bWFYM2t1NkxDZzZyL0JGR1dxWkZpZjRIOWREZmJjcUdaVFJXUjl0SGNnQ1IzNUQzai8yWTVkcm1BWnFMR3F4Q2w3Wk8wbTZ4UWdjZHB2OEN2UEs3SW9sYXNVKzc5ZGVHUllPMEhEY211bU56S1UvQzl3Sy9LMlJJNllsY0RtdGY5YzVLTEh2YWZTNkowK2xvR0tCMFJtcnpsN1RqWXg5bnhKNmk4UUtwNE5WaXJkZnFFZnBYckdsWnF1M0RDYTY2a0RrckhZaGY0N0VIbmZnbXgwQ25GczdWUFROUUZYVVo4SUtkZnJtQzdPM25DK1l2bk1PMFFaTE9nTk9UTTNORHRoN2xsVVkrQU5Xd1BOZE84eW5zazQ2eDBxdUl0azNWcHFuT2ZiY0IvT3ZsVnNjZnc0bnZOS2EzRUlKWEloejZTYkJjSEFQMnRVR1ExSDZHUU9wdzhoSGFscVgwYUg0Y2tvRGpDZndrS0x1MDNuSTlMYU5YZ2N0VGRoT2N4WnlwQUN1U1FuekxlY1k0ZlltaXRzclZmaEwwdUY0THIrTXJYTDZocStxMjBUQmQwMUpsU05nN2RGb2lPdi85L0F0ekk0a1JuSnIxNmk4enk0Z1g3U0pwQWsxMzJkclhITE1lckZuSDBlYkpBNm80THRVbTk4ZU00TFBXS1ZmcC9maHJNS2NYRmNPQUZtV3lZL3VFcmZZcUlPYks1Zm10Z1R5NzJtNTVsZ1BSZUQ0WkRFamZUNGUwVHBRS2FYOHJVWkFtM2h0R3RJbGtlTG8xVWx6YnpjVGpyRkRuSWFrbHNIU0c4RldvUW9vSUhsV0o5cGFoZGozZHJpb1Y0UUpxUUlMdDFSQUcyZStveWdkeUp1d2dNWU1sRnhITGIwTjN2ZTFCbFVyUXBwRE5zdnBkUXgzU29McHo0UW8wZVRzeldsNjlkSjFhTEg3bG1XcnY4TElxZk5vc3NrVnQwdlUxRzNQaHg1cHlWUWRqek02VU53a3hjeG5CcXE0YWtaRmVYaVluWjFUL3FLMzAyYVFGeTRvVDJoSktaQ0xWUDRVZEkvQmVsVmNKQWwybSs1bVd5QzVPVFMyYTFjVTVvMGVxNFJyQ3JLREJjRW1rODJuQ2RhT2JPejcwMTRENi9sbGhwMytXUU1VR0pZUTBzZzhRcjI4RGFtNU9rR2lMZ0xVM3NKdVZITjZuczJmbEpIRHF1NytYcUlnMnF4UWhtRUk1a3ZlUHhqUkVRVHUrWEllK0pYdjNvVHZkd2I2R0lIYTJ0YTM3RDBzalhoUVUrV3NDLysyTDVLaGZ5NVJUNmhjVkNBaWdGa0JZa21XeWdrM0FGOXJQeWRvSFFyVWRzTmhRei9pbUE5SStTQ2RZTGxxN1g1bGp5SmhpNkpQQ2hNaHk4UWNHSnkrWUJrc3gzd0RvZGgydG9JenVjYzRwTVFMajVwSlNYaHJDZTBqQjB5WlNkL21HSEw4UXlTcm5aZ2ZJb0FQZmZCTkxXYmo4dGNHc1hDMDRGV0FJYlpVbmdaQUtwMjNERllEb3FrMjd5dXBsRzEyeWM4Tkg4T1hMQmhINWNRVWF3anpqN2cxRk9lUmNkRlY5VVh0b25yS3F2UmtiNEdveE40S0FTRHlDaUFMMzM4S3dUM2dkaUw1SDF6MEZZazZvaFlZUlU0b2R4ajJKaGxjMGF3UEh6eVpEcXdiS1lzUUR1Q3pUUHpXSURhTzdtNFZGeEYveDY2aVlLbmM4YU1xWlVkY25mTnhCTVBSZ0RDZ1NTcVlMNXlEdDVWejNTd3VDMXRONkJkNlhlWmo1a20zNm9XYVgvSEM3YWF4bGlnWU00YUZRdnVvMmZXYlNldjlydFlJb0RVMkFHU29lbHAyNzRvbkpCeXVBOUZpZnNDMlp1RytnNU9FaU1pVXEzL3ZOeHMySmlmcjJTaG9kVTllOGltcDRqYnplNEE0Qmg4SytaSWRaSC9Hb0ZUa0J0cTBXTHc4RkhhRFVaSXZXQ21HSGplVUZJaS9PWktibkR0M09OcFhVaGJmRmFuUHV3c2V6TjRUTTU4blZhQlFDRTd2Qm5ibTNHVldnUC9JdURhbU5BcmhCcEt4Z0cxZWNFM3c0cjFtajhQb05FK0M0d1NnWGZsQWwvUTQ4dWUzUXJ6OXYrRWEzbmZMSC9RUlczZ2ZoTVBqSkRQcTB2SmIvbXBWUkZyenpGaFBBaHhTcTJzOHkwV2NIenFGS1hQYnNFdE1taEl2ZENOVjFiWmh4NmVpWlI2bFBoV0lsWjhGVGcxdE9uOEROQkJwRHU3SWllNGN1ZWtJcWVQOE03dDZhVkp0STR3Nm5LSnF0RlMwSWlkMTIrelNLZ2Z1WW5UbTl3RlovbDNwckNtVklHZThmaEhsb25iWmNPU3FZQjN5M3kzejh2V0xad0tYa1dKMEJyUnM4YTBQNis3M2Nnb1JQN3hJM2tzWWsxYStoRWV3SGprZllKdlZ5ZEFkOW5NMlRWMXk0Z3F3S1czUmJzTGhSaTNTUTkrU0VGVkYxa0JZZE9kL0ZHTm5KVENEWFdENWJiMG9sVW5ob1M5K3BEODRNa2RpUjJOU3hjRWNDQmI1VUI1U0xwRDlQbC9UVENlME80OWNnVUdvSEtIY1hIR0Q4MVJnaWxaWmorZC9RcnF4UjN1cnM0MUhkTDhPTGg2SkRPVDk5UDhrTjBmeENsWjdOcUVZbkJnaDVDTWxqVVh3TWlRd21aTnJSdEpmbXloZUZrWFhla08rUmRLWlkrRHBwNUdwbW5kT1l3UklxTlFXOWU1elVjelB0ajZwTSthZnVRa0NIT1BQa0RGWVFqTloxV2FTZzFEWEdmeUxsLzBtdmtvTzVFNEJkQlJ2U2p1K3N1RWpNODJSMXhjRkRtZDF6M1R3WEhhbnRac3BpSndjUUZHYUlzbVFxOC9EWXk5d1N5KzBRcVB3SkRkcXM3TGtBNW9reExyMDUvTldLeCtXaGZwVEdhVVA2d25QS2wwdzBCbThKNTRuSUUxZGUvQTNaYUF2dzQ2clcxS084TklLZmJ2dXBRNlNGY3pmNy9IUTlWYithZm9QbWZlNUdPUlBFcDg2K2ZYR0RoQ2hOMlIxTFBsOHQ5RFJzQWpmMEd1eVRQNHZQbE1zL0FQS3Z3UVhxM3Z2dXRMVGFZUnlxdldZVkxNZm5iSW04dC95cjIyWFBsRUJsZENWc1YrL2RxSDFTN3NldjNIZGNxUnFpWTlhRUNmSWpQWXVTa01FNE9ha2VZZkR6TzdqR05RalhrbERWa1lsODlhc2J1bXdQNGlYU0tqSjFCYmVOWDJGdjMyOER1VERlYmF4OUF2NEZ6d2l4M253ek1IbVpuVUJMVmtmZDRGeVVCaUs5T1AyYlZXNldEblNCeXl3NEtSZWxTR0JyQ3V0VHJtNzlEbno5OGQyb1hQamVlVkp4ZEhqdUZZTGVFSGQwR1E5Q1NKOFk0UlJzRmt3TE0za2R5Wng0QzJGU3ZFWXJGandiR1Zjdzg0cDNiUEYrdmhzbVQybmtIczc0RU1zY0NuY3Q1VU0raFVXMHJUWnFaUkduQURwdHNNaVQ3cG9SblNodjdXYWpyMFpFMllKS21aejFmVXdzYWhxNUxodUZ4WnVqTnpRVVBJdmlnd09jcURGQmkrWTNuZDVmdlk0RDdBOXlSUFlFVXQ2ZjZ4S0t5dWp4ZDRwSUd3anp0ZERxSE9RaElJNzNZWjZEbk9XSmZWVmMvWmo3eWRCVFNPMDVJV3ZxRE5WZlRoZWRoWFZHUEd4ampVb1Rzc1BSeXVLeEYyblB6T0o3dlZoSVR0c0VzcXEyM3RjZ0ROaFBYeVFjL0FkNGExK3JlYzRpU0Z0cVAvVm42RlFWMUY1a0RHcmNqN0gxRkZtL3I3QW41QmNGdVJ4L2h6L21FaUt0UHRuWTVQbWFKeWpCbVRBYkZOVU50YnpJc05td1UwUVBvMnpRNGhKRkJSaXR4UU9EOTBhMjRERU42eUpMbzMyL1NoMTBYUjUycXVsbVpXVlp2YzgrYSt1bUNBZDQ2ZnhiRyt4RC9Scy8vTzBNSENEQU4va29JSllabHlTOXh5WSs2VlhESGlxSXUwdWtPWjEwRzhrVWZUWVFpdGozVGtrbms5TWZETzNCTU9lWWtYdFlmRzdaV0FWUXM2UGgrZWtqanREUFM5NmMvZ2Zza2xlYUpLeHgvVnBuRFhkS1NPL2o3QUszZ3l5WnA3YzhvTjIwT2h2a1NFWnVIbVBXZHZWaUZ3M1hyZ0VhSWdQb0pMSEE3UEdLYmFydUl5dkdXNFYzeVplOVZzYmZFaU5veGpEc0FVNmZCOWhiMDlUdDJwN25sM0x4Wm9SY2pKR3pPeGtQeWtjcGVhajRmSU55NVp1UVpIeDgvVDZFQTl1Z0hoL1p2VVJzR2dXLzBtLzRLYlNzSmcyRUN6UXErYkFtOWZqalozNWhRUkRXWWNkbmR6TEg1RXJWeWhiZHlNclU1WWJKUHc0MmR3MTZ6VlpDOVMyemhYSHhzR2ZnRHJiUkJGSTZBRzZNS2ZURVJjQTlPVmk0NjRyQ1ZNOThPd0M0NG5SMlk0NzhiZy9BMUh5TFNCUlowc0VYbXpYaTF0VmhVVUl4Z09QVWFGQUxTUlhvMmcrRnY0SFJsYXAxYk01a3BucHBNUlJrUmQ4eUI4UDFMak9JUEJ5N3l0NTRqRE1jMUp3Mmo4bmlmZEkwRGRVckdHNTUvTEVmRFhvcFlITXBWUUIwenhmYXZjc0RnWVhtZ3pHTUM4aW1DRnBZSUFXMHJMaldydDR5b0pMcmVkS0diY3poYVFjWjZvTDdUN2gzM0lER3EySXg1S1NURExBNGJtQm9FSFVaa0VDa05UZ2d2N3RWUGE2SWlMREVEL3ZUOWhyOFhwbHJNSWtXMUxhQ1dadmttR3Q5UkR6MEJsTEc3WFY0c1ZXQTZZSlBLK0xVQ3ozUHZKUDl6dE9DV2g3czVBYUNSTWY4cTRJeTZvbjJ5NUJ1RGI4QXIrcXVuUGRxdjNJVFBGeEV2aXRMcmZpeHhDaitERWNlVW1ZcEZLMWxOdE9wQmpXZEk5dURtSHNhWlNYZ2dCZ3ZEaEJSMW9qWnlRM0xLei9naDUvOHJGcUs4ckgvZ1hiaVdka1dmUUVtT2I4RDM5b1ZHWW9JbUNjU0NRUGI2N0x1akpJN1MzS2l3M2tPejJDbzJNU1ZaUXdoZlFMeDZWSE1RdkV5OExvdFJKbVp4N21mZ1RWeEVGSEZnMHBBQWRMbFhkSlNSZklEcUhQN2kyUEFhcWx3Z0xtVFdwTlJTTUVuSnNSVnl0TnNHZWxudFBONUNxbXhqamsrbExQTVMrcUZmcjVZK2lrcDljMTZJcnRtREcxZ20zN3FXTVNmeFMwbkZ6ZUluSmRsSGo1SytCNGM4NjFQRm1KbzNNODdnQXRQRWR4QXVrcElZdllVMHpGUTNXOHQvaGtHaklJL3NvbVA0aE1pbE9tQTIrdkRuY1Z1TDdDc1VzN0s5WG05QkcxeWlnejM2QzNuZHhPWXhlaUxxWkROZmpzZ21XSDYvRmtNWnJabVRycW5wcGdxQmNmdXpVamJzU3NXcDlaaXVMMlJOK3krWGtyd1BLUnhZNWNzRWJ0QSsxWmFEZTJrdW5haC9Dd3NsLzE3TmhSMnQ5eE4xMUJlUnR2bzd5MmRTWFhxa2hwbUw0Qm0yU1NFN3hKcDJQcC9RaHFEaFJiUGNEZCt4bXlYQVBaUFd3MmNjeWE3WjZLSWVMdEtNM21aRTdlR1Y3bTUzdkZLakJWdU94bVBSYmNMcGsvaHVHOTVIcFhWNDFUd1lmbUhNcmFhallod2Mra25JMXFWbVpVZ3YvanJXU2VoelVwMEJ2d3lyVmxSSDA3WmJueVp2N0NXcHVxTVo1b2x5M3R3aTlzWmx6TUEyMkFLeGVPeFRkNlR6Nm81MkhVZlFXaGl2SVJBQ3o1cTlLQk45S0JRWmprbnBGYzNXNzFKd3pKa0pmWm9oQlJ0UFlwWHJrWUFub1ZPVldodnBQaGhPQzlzZXB1NHNRNGhzMEtidHcyRVVTN2R2Vmt6K2l3UFFOR2dsay91RGlaQzVxS3p6SFZuSStNTE01NWFaNWxDL0FXWWh0SC9NdVhNZ01mSUlTdjlIaDFkTENSU1EyNHpZM2tXS09XNW41UUQzd051WGEybjh2aUF0Z0s4bUQzK3VKUDkwaWRRSE5La0tGVjVNR3I5UnNtcUl0NmxvMmp3eU82RS9uT0dNY2dTb2JPMWJZMVo1TFlaQm9VVnNoSlAyWDljazJ1Rlp4LzR0aFk2TEh6U0luSXlUMWxCUnRHUlNVa25FazNkSVN3RGxlM25WdzhzdWU4b0ZOSG9mQnUyWEtzVXlIMnJDc3crNlJScTh0WTh6RVV2cVNyNGIySnhMcGJEK0ZjZ0dJQXovRVRBT2d3VmUrZmRwd2RiUk04TWJBT0dKREhpd2FETXQ0QXY3Z2pFMEJYeExtM2VHaUlzVTNuQjNOaHgzUUl0U2ZXeE5HM09zdU9nRmdqQnFyQk9LL09FQ216RnNxZkN2RGRaaXVEeEQ2Wkkyd3hvMDVvOG1xdlFlY2lkZTZBYTNtSisrWnlmd05qZlhwMHVpa2dQY1h3UWpHbVY4TC9LNEFYQVlycDRMSWFaUnJ6YTFOaFNQTmgyV09zM3hWeXFMb2lBNEJ2R1VUR3N0aTU5cFUxSEdHQW03Nms2RkpTMjMrSjdBUU9WMXFFQ3hPckl1QVBFNUNGRjhIWTQ3b1BYL0tDd3I4Wk5XbHNxOHYxOGc0Y2tYbnUwb1ZXNTk3WVh1cG5yMWd5Y1k3RVBWUktUWm1BZTA0b1RJai9jbzZNY0p2Y0tMUFh0ZE9vWTNNWVVkUEFvS3prc2ovVEp0Rjl2ZzB0ditwRkdSNUhpSlB5aHc4Z3N5aUM2VlJVQy91eVVvcDB5YlRqMzdLa0szZjhlWUtMV3FsVjUrVGJEV3I2bTBLWEx5cXhDMmR6ZDZyT1ROWDZYbXRIczUybFgvWUppMk40YklNSEFaTkFIQWkvT3RITC8rMnRBVTNuY0U1Snp6VC9RZ0cvejQ3NGZiUWxJbE1WcnVFeCtDSTNOaWc0dXhwUzVQa0ExZk1mSTZia1ZQWStQMTM1RFpmMnREeVF5eXArRzZycTJxUnZqT08xN2JTSTM4aDJ4TnhWNmdIS1BCSHdJZDBBRVpqbis3cVdFK2hFL2gyclNMM2JSRTk1bDRIblQ4bmhPMTNKNmw5U04zWmhKeGZzeXptSnZSMlR1bHRRMjhROEpkYWZ5RTFGWno1dENXYzMwVUtvRDB3cFdPRyt2THZIRFdLd2p4cHZWNUtwNG5qZkx5cjZYMkM2TWxLdEYweXNyWTRBSnM1d3h2UjBiS0Q3dEFGWXd6dkpyeDJkU0tyMG9OUmU3UUhrcjJhSzNEZDh2M1N5VHFSbExmWEo4UUJ5S2J1ekxoYXJhNkt2cUsrQlFwejVkcS9pQlg5aXlHekNLRjd6ellhc3draGRZTjljMjRCZHdEcCt1WGc1WUtNSlZYa1VZbERLVDE1a2YwOUdVdnBPS2VwR1B2R2VqYTdkVFpkUzNsaHhLN0ZaUDRGS2VUc05wZ2wrTC9Rb2o3eHhJM3ZRcExlZURjSVVPdzFHNUtsdFVOODczMmtha3FWb1VlVXJhdFhPeDlGWTJHaHVBYlpKM0ZOZHdYUUpQOG9EZ1J1NHJ4RDhURFJJWEtaYWQ3MGJNR2l6Q1ozekxIUWNRWUs0Y3RrcjBEMzF3QnNKK3FML0ZqMGxGdXA2NHc5V09BdjdJaEt5bFQxejdJbEtGZFVhZXdrVlFsM3o4a2ZkWERTNGJ0TlJSdXREQWZSQktrTmtzL1JWZmhyTVBYd1lNSncwcjN3TWpJUUpHYXVqdkJqd0xONXd2dkl5b0lKSWovTjM3Wi9kLzdRWkxQVVBZOHZqTzZqbkJ0SFJyV3lEUWJOVnUxclFpVjVSbGpnOGVWc1ZqYTBFdkFiOHdIVFliUlN6ODY0UTlUVktySGlJMjhMZUt5MFJybkdZdHFIdFNPN1VKUDdZbU5aU1k1Zi9JU3loWmJ2ZWZ1SXg2dGdweWxVWTlVWW8yMHJQU2lOejI3MnJoYlptRXc4ZENkRUFBcmc1RnFvOFJBSCtmRnJDa09la2x6eEw4bnFmVDh5THNjQXNUMjlXc1FLTkx2Z0VLSTl6STN3NTJmcjZRcGk1ZHNZemZ4eHo0RmVYY1UyeUxpMk9tV3RZcFVTbEJpMUZvQ2piTGNOU0dmbWFOSGY4NE9ZZHZUdnZtWnlHK0w0eHBtcDBHOGc4VnF2aTJXcWg1MlY3OUJ4Ykc0TkcwRk5CUWN2dkZmejEvWlIxeTlpZWZ0WDZIRTdkaXFqcHVDN0ZuVWtNc3NGdzA3N04waHlIb0hJZjdIRnl4NHVjUkd0cm0wVXYwZkJMQjU4N2FBd1hTTjFRaXBUTkp3TkpmejBxTmVLK2E0MGdKTnRuTm1aNThsNURkSjdpcDdSK2VQb0REVzdpV0duSjg1ajhZaVFORTR6Umx6cUNSSW1xUXVxc20zYTUwMFlLZmdPTStjSVRqSllWaExYNTNRQ2pIenVDZTZWOTZkaEFXMk1TVGZJRE9hdzMxMUZOZU9tN1ZFSHlaUW9OOGtjWHQ4QllUaHNNUUY3ZUdhL2Jpc1REYThWbno4MUNaMXFacWUyUklNVUJOVGpyUkQ5dVpMb3dNWEF3N0c2Y1Z6OXR1OEM1bk5Od0dvRHhKcXM3N2IzQjlGVmVUZGpXRzhlME0rMlpVQWVyeE1icWtoNTh6QjRmZW4rRUUyNEk0bEZmTnlQVitKOS9HdHNvOVEzU0FjNzMwYXUxUS85RW1UekFWY0ppNWRRZzlUM0E0bEo0d1dPVW9kendBVVBPWDJ0WGtwL2hITnAxaHRHdTZOMURBNzZQcTkrNEc3c2prQWJGMCtHd0tVck9WOEVEelp0Y2ErZFZuTDZpdmJ6RElkeWxRTnZpMVQ4azFKMW1vQXhVa0RGQkVtU3hUSmp1QzZXS0J6VjZ0Ui9GdEE1RzV5NHpGR3ZUSzhPRWpwVlFJem16SHdXZHJ3SitEMXZmMHpmbEdhSXh5Wjkra3BhdDN5M1NxR0ZGUU5BMWVXVGhjSkNkSFlNWEpNaDhOclV5eWRlZy9oQS9tamJHL0tKUGx0RzhhSVZ2R1hXRFlxVFhQMHBOcHhncEh2ZGRQdXZqbm1ZdXZGL2dUa01jSWlCQTlJblRpWHJpdFYwWWllTHREZ0ZrU0svcGxyWkVxVVpjSXlvcFdlUGtMY2M5cHdwS2k3UEN5VzA3enJkcWJtV1ozK01rZFJrNEhjVG9iMjZUSFhtN3FveHBIaDB4dTV5Q3hlV0NIWUw1M2hRbW9PRk12bEFqaFdpTm1ocVYzWmVTUDlOdnhFZUdNdi9NSzRzcWdzVUFuV0w0NmF0ZjJVMWJZYWVnbFA0N2VsR0NsTXIvTUNpMGxiVlNqNk9SVjBuc1lhRTVSN0JTd1k2bUV4Yi94WmxFU1BQc2VHb1k3WnJGZHlvakFJWU0wM1kxSUFRVlNaaWpzTGF5REx6YnYxczFDbnBRcXh3RUZ1OG50dGVrYU5OU1VKbExTRW1qUmh3ZDdWd0RGNkhpWWV1VmlwaTIvZEY1M21GQUVsc0dpN1dnQTJZSXBSWnpMQ0g5UkRtRHYrbFFDN1lnTkpvR3J2dXBXSnE4R0hGSmdHNXBCV3lBMk9rSTcwem9zWlozWnU1R0dwR252OEt5ci9WVGxlclFVbHlXV01DOHFObVA2NzA1Y1kwVTMxRlgxRVlFRUdZQ29LbmgyWjRIdTRXVkFWMFNRMjdySlAvR2dRUVB5L1VlSUdLOXpvd0xhZ29vcVZNZ3I5TldwVXY3OEdhdjZEVHJ5M0VFTUNBUDZvcEkxdzYwRjkrVlhPaWN3ZEhBYkl0WUY1MlFDcGZZZ1NFV2s2TnBLVHpSSThOSVU5MUNzU2t4SjI2TWhnYmZlYlB6azN6Yk9FeThjYkl2MEkycTR4Z0pGWWYzUEY5VVBpaGRlbS9lT1pMN1ZFdVFZV05DaUJRUEMyL2dCK3QrVDEwb0ZqZm1EbWNnR3p3c25jUnRITW1MS1RhN09ic2dzWG0xY2ZBeFdLdVJBSXQ2MkpwNGg4Ym13STdwaS9EaDdQenIzMHJoS0FTdmpyS2N6R0dEZkwvbUg1a2VxbnlSK1FGdmNCUll0RXNRQnh6cXVDUWJmTnQ2anIwaDlPZUF3cFlscUtHamlVdkJGRVp1eFhFR1NSUngyUUJaUG91NEM4bnp2R0xYVnRHZ3p2K1UzaitGQnFjWDZIZGJCcmN4ZEt5bFNFWVRPSFVCVVUwOHJqTVlpek42WnFDVnhEY0tBV0ZqaUlzaGxSUWtybDRDWlpHcXkrbkFacUo3dlYyQ3YzTVdQY1FmZWhpeDZmd2piOXdCR1BDNmt6SHFWVU9CVGZrMWQwbWIrbE1MYmdsYkRlaGtOdnVCdEgyS21RVG5hcjVLR29veXRDNFFKTzQ4Z3JpcDJKNFJDZlh4UEg4MlprVm0zNnR0MEVnSy94SW10Ni8yOUYrYnJXSjlMYTg4RE5yNTJTalQ0WkJIWnRiLzJVcDBiR0p1U0Z1aXduS0JsMXY1TzJJcGJMZUFWWkZKV0ZXL0QxckZoUGNuaG5yaStpdnZsa3dpYndYMmN2WlZRR0VNc0o5aXR5d2owQUY5MmdBZGowT2ozeEVyclh1aC95cjc5aVR5N2l0dkJjWEZzdTUyRk0ydktKNzg3TlZSRlArNWxXNFFsWE81a1NFQ2Z3NnFKTTUvNzBHdUZFNnlWTmlWTVUwU2pHdEhlOUxwU3JwUi9FcDNhV1BTUTBEYVNWM2ZwL2lJS2UxRUhqclFKdzFSS3BGb2E4OE81bzVkem1BTkhQTy9YRy90SG94V1U5ZmJ5T293ZUlNRm5qWlBYc1ZtaER5NTRXbE90eFlWSU1udjR3bURVUk14NDhob3Azby9Vd2lweFIxNGtvdW5IMEhoMDJlYUFkTE5zc1BGUEZtaU5qR21aZWk3ekUyTHhpN21xZlFBMzRrVUxqckVzM0JLQ0lNNk1TMncwbWVqL0ltQ3plc2ZwcklmTU9aUkpYelU0MGgzRjA0NjJ6YmVwYk5xc2ZjMTg0cWFSSG9FYm9kRXhwK3BGaGNTWFJYSWtzQmpxTm12MUhiSllheWdBaW9lOG84d0ovRm1QUlpYcmFZSVlQejNReXY0dktzM0YzSERKSXljazFEVmhLNFRMS3cvUnZDR0Y3aTFUb1VHdnBDVXRuQktkT1VOZmlHa2hDMTNQYngyYmRabE80NGcvRlhCZzJwMW1URWR1TkEweFZWNk9jLzJKTjhzT2hwaVJVbXJGTDRjTUxPbGFCZS9Qem9xWXJtQ2lzeUgzUTBoN3Q4bzhhQmpaOVp4S1BPSHJKVzU4UmxwZHVBOFFTOGxJWUg0SnNMUDlQaFNGVXJVQys3NGRBVW5XYklvaUN1NnFHV1FGZDVhUllvaWRvWTJ6akVOSFMwdEU3WVJUaWdKSnVXQXZMZ0RtUW1jYndKd09wRlFTTTVGcGYrYUllV0dEUklUNDQ3QWZUS1BhTktuQ0tQeXBJY2xleDJLWlF0eDdFSFNVV3ErTzhxamtPM2RhN0hDTC9LSFNXVVY2ajhVY25zbFE0UG0vWlNTTXU2ZDFoTnFCVngra1BYZHJBYXlmOFN4ZEM0Q0t0Z2I0Ny8wTGZNejFnTkFDcWd4Y1ZpWHg0NHVlSWJWUzR4czNnL056QWFNaEgveDdHU3Z0Z1B1WnBYY3AwWXFsMytLeTgzY1ByMWxBU3J0YTVJaU1NRjl2NWVmMHAwQ1k3eHhFbE44UEtXOTZXOFdTUy9BRjI3RUNlMEhnT3crOWFSRTNxR244NzZWTFg4Uy9odld1eFhxU083MzFEM25sT2N1eXRISWFlV2s0NlFCT0pDNkc4eVhvN2VnZ3BFTGZNWW5VcFd4ZTVUN0tJY2R6QXBKeVRpdUc3NnJsU3BndHlFRXo2TmgxbytSbExDamlSTTJha3M0bTRGVFNYMVpaVnptTFJZTDFjT0tocjFHb01vMmFCd2dCcWhCSHJSRHVnaVl2N3R4dks1V29wKzlqdHRkRk4xd3BnNWRZK1dNWjZIUnhuRXJib1BwQ1VDQXk5QXhnZ1ZGK2dQSGV1cWhKaVE3WlZHeUx0UUVtZ0JUTktyclF5c05pYmQ1WmNwaDFRQWVmZmpxU1g4enV0WVlheG05MTZZMFV2bFFjNkxobGErTXlnWVNwNVZaOXVFUWpoTGd3SkxGQW53d0E2enJ3bXFpcnNoQWQ0dVNVK255MGlHeE9QMW5sUDJyVk5zd3dFdW1mb1Yva2gxRHQyblJxbGFOMnlDWm96aldvQ3lCS3ROdmU0NGZrYXhlcEJOQ3EyclRBRVVGWmZvUjlmdUcvK05zWlpSMng1MzNhQmdSZUJKRHo4L09sZ3FYcm9lUVZCbjlrUmZDTEhpR0VkZm50cHpkMEpHVHN6OU80eXh2VUw1ekRqTE55VGNPSnNBeWRHYjdibDd2MmVKZWlWRkdybEVvVjc5N2JrV3pTbDZyTTEzOWdUMm05YWdPa013N2oxbVZTQ1BjSmFhcVFROUVHQ2sxSy9WckRWZ3VkZHMwOE1XcnlicHRwM28rRTNtWWxjZ2w1YWIrVkJhd2Foem9IZk43U3ZpVi9mVUtXT1Q3dXBxcS9VME5JeGcrY3FLaTgxRUNicW9oMmIvNFNPcy85SDBtWmhCU0wyREI1bTJmWVRFcFJRZVk2N3puTmJKV2VsdkJYUWNrVS91dnVGZkcwaGwzamIrUGhzR3BTYUI0MTJ3NnlmbTUrS1VhQi92T1NMdTV2VXpsR1J0WGdMZzM0ODFWMlYyWi9Mam9vcVVLYVRGbE5QbXcvQUUwQklGaVVtbGdHRUtBay9ZZGdxQ3JXV2JIYW1YWGNyL09wdlFHVDNYMGt3UVVzSlZRMUdCUFdrd2sybTNOVVJ5ellQc3YwZ2g5bnZTYjBBMS9CWWJ4ZEFJT3NhMnhBaFJDQTFNK2gxWTRjZ1hDODd3Sm5qZmt6S2MxbllCTmhwSGdkV1AyOTlrUDljQjgwcW4rRkwxRElYaEl1VHlLV1FQa2kzRTNJZUl4RDlaOVZkOEdhUEFmZGhVWW14QmRJYS8wTTl4K1phTU90TlgzcUpNSjJBeDN5WU9vaWV1c0pBcmJaQ2l2djFxenRpUzNINGpUZ2xqd1ZFekxhT0FrK3Jrc1BmaDdSYjU0V1pLb0tjNXQvVDVDRjJ0TmE5WTJ3YWJFc3IrSE84UUhaOENOWGNvbHFhYTNPZ0RLN0VQWWNqN0ZJbWd6YWVHYUlmYlFuNStiQjFyTlN3WlRLTVVpR1MxZUlJSmlTcm44YXFDTjI2b2VIQlNDT0c2TWlvNGZROFlIaTV6S0RJdGovTG9TM2Q2bFVJdmZhWmZBcTY1RHQySktLNlpBMFpCMXpUTUdXV0lyNW1oZE1yak9YUUVJRjZPZ2pwb0YwSGZyNk8wUlVPM0hPMWhSSWZybGNQTG9QeTlLdTVzYWlFSHdXWElwYVB1L01yK1EzNkFpZEFyMzlWTDVjQThWSExXaWVKYzltenN6Rk8zRTVVQVJtMWVac05tclNLMlpRdUxTRFlxUXZvbHo3UkEzVExzdEZwM2ZWL2dFam0yNG9YU1diR3ZLMjBKbVhaTGNIUTF2NXJqRWUrVjc3c2FiVVNyS04xbXBFbi8xd05PUjIyOXJReDVRbVB0ZWgvamIwVkJzbjdwQ0t4bzNQeEV1TlF4bzRiQzZ4TnBCVjA0eVRNVHpLbDdkcWE3eDBWM1NXUlNqTVRqR0pYZ1cvNWliZll6Z3gwbld4M01qb1MzZ0Jyb1NSTkNvcW9kOXdRV21NTkRHV3BzalVkRGdqdkNyZ0RZcTBidmZaSjYxY3ZtK2pDaGliNk81aXVtTlEzYzlyZktZdGVDRDJxVGRpTDRwTW56Vnc1QWt1eDJFamZOQ1d6OWwyM2pTRUdBa0UydmhRK3EyK2xHRFgySmlBN1lpQWhLWEdHTWFQajJoelp0MGJMRWZ3b29XTzZBWndMWlRLa3lwUTJUamt3YTl4UVRPRGJGSlo1L3FSN2w4Y005UlY4c3BEWUhpYUN5RGhIdVZab0JKbkZoZFZLaUp0V3RuSEpiRXhYb3lDanVlN29RR2g5K2MzcjFSWm9KYVlUaFlOQTdYZ3JaRFNhSGFYVUtLbEsvMHh1N0wzR0Q3ay9vT0lyT2s3N1dOdEhGLzZOUFl5ZENURzRySGpGM2RVRXpsRjc1TnlFaDFjck1YMVRNMnNxdGpjWlpvMkIzQitGK0xURFFGUkplblNteC8wdmFoNHEweEJYSXVjc3E3d1grc1FyZW8xWUM0cWMzU3pXcnFkTkxtVHdiTEJDMGY1dGtTR3FKY29qK0pnZnFUQUJFMWhGTlNMQldYOGFQa2x2WFZ0L0dzUkJ3VHYzeDdQOFdEaHlBd1BjeDhWOTM0TnR1SDRHMkYzVkZURUtnR21MbG8xUm1yWjdxZG8wN3ZyTkpuVWhtaEtldmQ1cXBoYm84bnh3UUx1MzkzdXQrMFhJbDdpdE9jNFRVYitacEIyS2F3NlhUSjd5K1lKTzFnVmhJd2U0TFpERkFZVzlGdHc0YUhvWmQ3V1dHZWtmK2xWZFZDZGtnc3ZBemhsQWwrUUlpNmJaZWhYTkpmSno2STVCbGFLb2E4d2U1T3dCRnFxVmRVelpiL3orYi94NFluOTJGOEJLU3pJUlFjL3RIOG9lRHhVVEp1YzF1ZnBwdkZYSElqYlF6SWg5L3NpTTEwUkN5MFJJOEgydG0vMktRNUNjazI5ZUowNzdDZ0ZPQ002TndsMDZlck01UHM0NDQ2YStXWHBpQ1VTR3NROXliNVk1a1Q3QnJWQnpKc0hzSkFYd216SjJ3YWoxRnhLWHNCaFdQT0dTNGJ4T3JQUGpnM1h0djQ0Y2d0MkpyRUhYSTJzLzBYc3JmMVM3cVV3eDUwMWFncDdWcWhUUktjK0p0Q1ByMmVoK1NzY3lTdkxjeHNvZ2pwYnhaQVRwOE03RlVudTF1VzdaSVdQUldCZERUeGxRd0F3S01KVWhycUFKZkxzM29nRTlCRzRrS2gxczh4TFdHV2dVMGZJRlp4eHpNNWpQODZxaThHbFhMS0xTNVk1Kzd0M0pvVHMvZTZMVDdNZVpPL3o2QTFDN3RaOG96M0RjZGkwOU5RckQ3Nm1ZTmhLT2F0L1JETTV3Y0FtbXpxK1pFaDVFUnhYYUFqL1NaNEwyaEQ5cXVmWjZBdUVRaEExRk9FUDlFRmt1dkFFdll6Wk9oSTBoV0ZjSFhteElsU2ZsVUhPclNPV0VSbDlRcEcyYTVsZENJRkk3SVNQcEtnSjBEb3YrMldNdExJcUFsSnFYbnRSOWNmNTlGZTVOQ2N2bzFOc1R4WXFlK2NtOEZhYnBVLzNkUFN4N0tLekg0d0NqaC9SZ1pYSGY4anp2N3JCdFVtbUYvenFWRzF1SHBNV0M5by9iblRXVnpZN2ZxdjdWaEp3czNwZndBd1JpdE40R3U4c3dremhzalB0NjJvRFoxWktPTWdyVlMyblpzeWZrQ05FYzN3UzE0MHJ2TVlRalhjNkdSUlVzalRiclR3cVJDVFpETWVIcThlejlTZStiQTlIcEQ4UUFQbTJlY2RRL29CUFlHbzhkK1lqYXo2ckpsbnErV2xFMkJadHIzb3p4TGVnWVJqOXFLWWFkMmQwNW1nZGpvbitDVThmVzVWK3hHbGl6SlIvdE9HQ1ZHSnVFVjIxRlNwTEgrK2pvMjRWbE1oWG9nTnVoM3k0Z2dsYjhhUG9IWnFsWlk1ZDdTTEt3cm1HZG9PemVid3FjeFBxVzlQbG9pTG5zSVp2cjBtdGhwM0xOelQwc2Joa1hzNExIWTJ0RmpjcnJ3Q2YvR3NDVG44UkN1ZTFKSkFGR3FDUUJvRDJOUkg2RW1QOUlBMzRUMzdXU1RXMXV1dWVoMzF4NE9EaTMvSmRJM1dXa3NaQjFCRE1ZWEx3M3VhVkx5WU12T3hBc0FMMXk2cTJaVndBeVZnZHI3bEdvWUNld0g2Nkg3RXVDaWp2OXRwVXA1UzUwV0lCL3N5MGF4NGoxNUJVZ2ZBV3RnanhLYWhvYXZ4MDRjOG9sSXhTSmxUczBqVzk4c0pvT3o0UDRMQklPd3VZUlhtSzdhejlHYjhkZkJxcWhJdytTNnhBMWtkblkveWsvRkxxZ0prUVNOZWpsTXpxUlg3TTVBNm1oMFpXK25NaVNHcnBOZ3E0cU5UUUVPNkpBeElKTEsyemRmd3dOdEQ0Wm93YktFZ3VDM1lQQ05WQmJCMEhBQmxzYUF0VTNnaWI2MWVoOG1zbDBVU2ppb0ZkMFJCVm9wWGEybXRLbkJXSVRJdWJtNjdOSEVCZE4xa3Q3Qno3aWpBUDBkcmJEa21XQ3p5bExkSU9rV2pNa0U1RTBBYUJtTDJ6MVFOcVpXR0Y3UUsrbmFCQ1IzM3VXY2VxcUJaZHE2QmxNZ0hsU2ZoczduVXBBNzRlV3o0L1MwTjJNdzhKT2NrK2loSzE1UjJGTjBCTWZMY24vZVhCNUZBM2dLSlg2QlBqMTFSdmNvY3NSQ0JQR0hpOGJPcCt0ZlBacklOUTdGd1F4VG1DVmt3TXExYU5CMkxBNTRDT0R4dWl5eVZDNzNKTXhTSElQazYxVUlORnhmZ2Q2aXYwcUlxZmpPU05pWXk5UVJITVNFSlJaNHV0MG1ucExDSGhTU1Q0YVRZSUdYdzU2TktkTk5lYkMvcDFZekoycGtKcjhad2REYkx6Q2VpbUh2bm9vaEtIQXlCUkpTUm10T2w3QzZQeHh0K3ZGa3htdk5Qd1pzVWlFZE5sV0l1Q1oxVlBZWVc0QjY3ZHR0dzdIdm1rdDNzTEpTbHUrVEZjeHI4b1crNVRmQ1NkUmNmRk5hU1p6UWNaL0p2K0k4NFFkaWpnUTRSRGlwZEcvbDgybW5jUXA0MnBkRG9uMURCVWFFeGwrVjc0MzZ3dFo4dld3QURObGEraVYzclE2N0pQSElBclJrTzZMeDA0OFFtQXp1SkFRa2tYeGxVZDdxaHB2Q01abk84QVJvdGFhS2s4WFRvSVFkK0FKbW9VNk9XU0VXaFBKSzVKWG92TmZqSTdzQTZtSXMwWVY2elhBTFJCT0dNeE9lNWFMQ1BkTU5uM2ZjTzZHNVFzNWdZNFVob0xRU0tFdG9pVGZ6OWQ2YUdoQ0JEK3hIN0ExcVA3ckd2Nm41L0JCRDI2RnQybVFqeUdFSWlLWXRuU1ZtQWF3eUV6dVUrb0doSVRxeGsvZUJicW5udC9TZGQydmZUNmJZVWJreStpQXRXeWVrQ1lZaDNaUEZFb2ptakFlczV6Zzk5QlFxVVRzVXZNY3NiSmZMeFdXdDYzZEFZdnRoUXB1L1ptY2VVcWJkUFl3Zzc5cGZMOW1sb0NmbFhlZkM4L3NiNzhwQVZ0aGxBbWtlMG4vUWxQUFYyTTBuVUIvMVVEMlpoUWRteE93elBCTWRkWUcyWFNXdUlZZ2JXazFxWVM0OHc5dnU0ejRiaXc1cXFtc1JWbWJQSmczZjlaNUp0bTFFYnM1QjJoSndDT0o0aEFBTG5teEVuZzJFRkV3b2dKMzBzakpCY1k0R1FHR2wzL3c4UEJGNlpsaElZSnJudWtpUHluTmg2cEFlRjBTVzEvSFFDcFJUYmxEMUdIRDN0Rld6VDB6eThoQWs3dktPZnhQU0FOVk5tcFNsMWh4K1dzZ0pRdGgveU5jTHNOUnlxcGViRkQyckk3M2tWdVdBeS9TTk41WEI4U3BkYWZDN2FEZmpUbHJ0NDhHZy9MTStJTDlDSUNnN2dTbVlLQ1d3eDVWd3YyS2lyR09LanhtTkRncHBPb1J2QURyQXQ2S1hEVkFHSHFueHdjU2hhNUZuTXlTVGtGV2psK0Zma1VpdloxOVZGejNVeXdDaVM0dG1PbFBGa1p5aVI0SC92SGJjdjYyV1NaM1lXNFd6b25iZkthaEc1UUpUc2ZHbW9JMXN6R2UyMkJQdEUxMGpFSUwzYk1MbUpoT0RTYzF6WmN2Z3RHRjdpT2phQXVENWhtU0ZyNlR6RWJWTVdNbEliTFA5dUJnVlNjSjJTS2R0MzRrS3lvZlBScXFldjM5eHZBZlFaY2h3VXpXcXVRcExjUGNDUUVFVHpJOVpob1lZNDBBekxWNERuTkdxNklEOU91SzhiZXJIZTRtQko5YUJ6alBpa3NzdTVsSzV3MnU5V1czUVk2YUdGdEt5eVdBUExEa1lvdnlUVHppaVFCbldoOG5GWVlRcFcvUFNQeEo0anpQNVNOS3JYNUFLRDA0Smt1akt4RDFxb3lYM0p1aEhDak5YR3hZR2s4S2Y4M2V5c2p1d0t5V1BWOE05bktUMWE5cktaVkJHRUJoeTF2aVhTL2ZBc1Y5MGpPWm9OZWdRSndhS1dqcUhRaFRwVmE5bWdHaXl1UGEvZHpKb0pnMUhsRmRId0wwNlk0SjBhVnBhY1NtSFJzck5ZQnN4eGM3R3VOTER3UzNDNjRKMnk4eW1YWVhscUdJN2g4Y2JDbHNEZ3EwWTBsOHJsNENITWlyLzE1MWNML00vc0IrV3MrSVllNEJoUmt3aThTMVdYOThjL2tlMWpBaFM0N2FoaVI2UGttSWFYa0Z0bUdjVVZUa0VEc1BoRGQ1bnhGWkFXK0hqL25xQ3VrODIxS3pLWkVWUTVZNTFieENUV25DU0JIdm9LWTVyZVpReFNBYlk4SkI0Y2hXeGhPWlJTeGF5TTllaWpDYVppc2szNWRTeUdweXVod2dLZzB0ZmJzNGdJNU5sUDFSaEVuMWdpOFhTTERXd1JES3N1VzRsMk5HSExtalRoQjJvSisyQTk2M2VCa1pHN0x6WTF5anRVK0FrQ0xiRDczc3hLTkRXT2x0cXZiT25PZDZYYmlnUkxjb1lnVHlGbktxZ2dUbVlHRWNqUnMzN1NERi95VXRFQi9VbWttOVZPR1pRYlZ3dXUydkJJL3RGZjlpUWswYUlvTTBpdkpBemxTVzdtaTFYQUtZTXJkTVdrRENKRVVkNzYzK1hzZzYxN0RRUDNORjZCMTc1OHM2RytLMlk5QU0xTVlsU1JBa3VVUE9uK3crK2N4dE5yV2w2ZXNPSnpPbVZvYklhc2RJVWxhNUxvYmdlQXg1V1l4YU5reFY1LzZ5cjRYb1FkVHdUVXNNcTVOSElFdDVsZEI2K2wreDc5T25iTGtTT05SSjBPRFdDSDZpZ2VuUFNoM1hPSVNXa1k3YzlsZ28wWm4zRGdIVnFSaERVdytDTzF1eG1FMmVkL202ME1WakZoODAvMWhZTUJ1YXp4OHh3WEk5NFlNcFptaW5GdTNpZWpNT1BMZExzbUZEUHJXci92UTFHY21qdFk1QVovTkc1UFU4S2RmS1prek9Ba3JkMHNMeGJZYXRPTUNQbGkwUm9iZHI0dUNreGM4RVlRWjRROUtyK05yWXEwU3J4a0NNemxidU5OS1dZcFVoSGdWbisxejMwNEw3R0NPaG1aVlhSV1lmOER1VHNKQXc5NEJhNU41T1JlYnNkYlUyZHc5djhPbVdNN2tROGhISFdPd3A0U3NpRDZsV2F2QTlwb2ZLeVZMbTU1ZGxQU2FleFppMS9sMTVnUmJxWWFIUVV4bjlDdmU2VkhQQmpQOEtWYnVmTFIrRm1TdGlkM1lLL1g3RXJ1eGU5N3VNclA2VlV6SE5BbGRaQ2NjN2F5ckNPT0pnZ0N5dzBjTkdkWCtGRVpuZ1hVbFhqbTNJNEpzUEl3ZVZYNzhUZHF4a3d5YXA5RVJlaTRyejI0UFBxTTVsbXVoNWlRYTNCQ2Q0Q0JGY042ME0zMG01OFQvcURHVFJNdHJReVdrd0toME1QMDNNMDdnbjRHaEQ4cGZWUjdLNEdha0xIdUw3SEllM1ZVMHFpSStMTEpHdGlqd0RKWkFTRm04Uk9jWnJSdU9uenlpZklleFdNMVlmeEowcHdKSzJVZTdJRk42cnR6VmltR2Nya2cybmw4RDJPK1hzemt3MHI2bFh5aXVUNzBUZjRiU2YwZmpjQS9OMmhZdW9ITnZLbGFOWGd4VGd3VWVSMkxzdmljajFjZEJLZ0dWUityR0FWd1R6c25oU0VaMEFmekpLMG5odUIyTGhRY0ZtZnc2SExST0ZXWGdkZHBpS0hLQ1RUVmE1RjUwcytEL1hTUDdPL05UQks3YUVFaTFzMnVMSXJDRE85RzhFUjdybDN0dHZ1VGE4djVtNFBIcVJ4ek5hVlIvbDZkYlZucGhvald6c1IvWnlTK2dTZFpxK0VuNmg3NkFmUFlVczlwM2VxVk13L3ZnZ2hPN3ZqQ0FXZ25HUVFla0RIdVFPRk5DTHhuRDlJUmNPTVdudWxNUGg4eDF0Vm4wQzlVekVUTEpkR3poalhGYjZUb0toS2lzd3BrNEdPaWcvU3FpS3JDLzJ2Q2VkNUJtZFVQdDRzU1V3cWprdUY5VndCcVY0T1kyK1ptM2lFSThETE1pTmpaTFdvdUVMS0NMQlBabkxLY2xNVm9hSy95NXVuN2V6cWIzNkVrbzJ4d24wQTJNRU5DODF0cWJpNHBhdTRidU9nUzh3VnN6dU9zaUVxZnJJK3NhRXFoYlYyZmxrajhEU21ubXNNNkc4a1JibjBya3JUY1FPUVpHRUVpZWFHaXpMaDZySGdBSEV2SWJjdnNpcjVYVEtTQmdHc2ltNkY1Y2pkZUZKeitiYXJEVDNMZWFPV3hrc0VIRjBqTDAyNnE4WUlHbzBoSWdDNEwyb3lRY1MrWC9hL1B2dm5Nd3Y2SkpxWGJDZjNKMmc0UHFQbkduWVpJcVNPV1Vkcis0N29qS1h1UmNHYjZTZWFkRk9Wd3R1YnJJNWsxNHhpMkJpaVlKTVhWZ2E5cHNTcHNLTXRPZURyUUJnQWVHVUo5cTJ2dDVwelFYRWJBUUtBWTRkYlQ5M2pZRFUrb3gxTWFPL2luQWc1UFBWUzAxa0JJSXl5Nnh6UjgvOWZPc1FCbUp5NGt0QTNpRXdzV0Z6aHh4cnRLK2RmVXhkYnptWURPL25PTy96Ym5lREJBV1VYY0ZQNnlIRWhaK0pjYkFpTVR1eDNsd29za29FRzVIWGo4dTRGM1BIZXZOSlI4Q282QVJzSWczL1NhdFJ5ZXJ4eGZkR2ZRU0ZpZHJab1h1b1I3UDBOcy8vSTdvdUkyc0RJeFdqSDlqSlI4c2FPcVRDQ2p0RHg3VHdVbjIwTHVyNW9Ya2NaOEdhZk9FU2ZXdVJVeFZmaW5RVFRyTis0RXk2VnlLOHZtTTB1MjJSMnFFVmJ6bkM4aS9KUmcraWlBak9QVUpxWGtJWmE5MVU2aDN5WmhCMVFZalN4a3VMbnJtdDB3OXVlZTQ4SXBlZ0J4M2dnT0VodE0rNVJsMUhvdUNad2J4eHoxeEMxamZJREljcm51RUh0VklnbmJJN2tCazlXUzdNZmFacnNsTXB5Lzk4TkN2VENEWVRXYkNyUWFrOXVxSEpXc29lMVdJaldob3d0dStCT29pL0w2NFR4MGlITEtaL0RDeGRtRTRFcGlUYm0wYVlIT2pmZHh0RGI1KzltVXRKTjIxRVhwZFE1M3lWbE9hd0w5SThVT2d4N2RvdndHc1R5UWdCOXRTMFJZUXoyblQ2Y3RlZ2hmSmZlWko4cy9QdlJXaHJhaExxcUtWWG44czdHY3FaZXVwUjV2cjl6YkxTVEJUTHIxNlFIK0ppa0VtZC9YZS9Qalg3bSt0ZUNGUkFzOEgwRDMxOWU3ZlpGZDdud1hQbm1XK2YxN3ZkajdRMlhFZ2RnWGxyVXZLWjRWZFZZM3Bqc0pQU01zanNMajhHTjcrVWlITUFFZm16VXN5cjkrZG52RCs5a09YTU5pazdwMDJzT3FIQkpXdktQdkhTRkY3Z2NFYjlNUEFnempjbE9WKytjUTUrTVhuVnpyUElSTC8xaHFxWkVCQU01bk1Wc1kvYkFicElMUm5PWWkvZytoY2lnNk1qaDdKMFJUSm5xSVhUVTJMRFVsWWlJaXJVOXFseDFsMnJhaDlHNUhGVkZSWkZwdjM0M0hhemZuRDRrUk16ZHl0UDdEOGJOZXNoZlJjUG1ZWUVpMnBKbGtWVkhOd0ErdUI3VlNQZUFndWs5cUVhK0Qxc2xQeE01WStiNURiYkhEU0p0UjN6REZtV0ZIbzg5aVdZT0U5YVdaM0pWQ2lqc0NTN3FhN3BGKzBJZTZpazRPdXZWSjJyU0NqL1FRYzRxSEh5d1BvbEh5a2JkYTltVUdVRUxPRGJHc2llaXQ1SWFNR0NNN2NGM2lCMnNIS3V6Skx2Y29tNzJFeENjZUJTR0E0U1hXNDl5N1F3K1QxMVhBeWZWWncrUHNOTG5KcTJocGpML2dONU1wWGtRRWdIVEJqZzg3VTZsKzQ2ZmZPM01rYVlrTHF1R09nVTVIVHJlYlBxNU9IOVlTM2trNFlhczIzMjBSTzNtd2FkQk5adGp2YXFjVVZrUEk5L0VBbFJzUGtFWXdNM1JNR1d0dG1DWHU0RXpBRUw2amlDaVJpM0Qzbkoyc0hSVDM4WXljK2pROWRESUJQT29iUE5tU1BiNWNMRjZNR2hTTjRrWWlXdlM0cGE2blBGajY3ckZTcGdqYWg3SkN1c1R1TW56TWN3UzJCbHdzaE95WEg2em9yK1ZFZFRpcVdIaGNGVUZMbnFyV2RKc2Q5Y1pBUmtMZTQ4bmxtRHNyTFVVTGVsY3N3bXlvcmM2QXdNZFpxV1Z3Y1gyMnorUHo3aWNzbVRxcFB0N1J6ZmpmTytQaUdHOHBGK1pvR3RUWC9LMEVVQnk3L0VzYnhhcXMrQ25xbWs5TC9tZlNreHRBekdHL24rWThjQ0V2R0RBM0pqcEpSQnJhZFRKb0s0TVN4TFJyRzlwR2tDUTRmeVpxNDg1U1ozMmNWeGRUZ01JcG1XeXBUR1ozTjg1cnJQUlJYMU9RNllmd0w0K3dOZVZWR0hXZS9QUVdGYW5FbVJhbVdmZ0MzcmlRTVhOOCtWR01ZL0dvT3Z5MXUyZkJ4eElEMEhUTjROdkVLL0pSR0FwY1pXSVRJaWtHanRna0dYS2UxS1RHekVZUEFlT1NRdlh3YWp1cWZTMDRFN2dmYlBnQldDMllMcVZiSjNjTXNueUxLU3d6ZFJmOXc5UkFZN3UyM2tNdE1Vb0FmUEhwdVJNQ2NWSzE0bHc4SlplUWhsTlRiRExTQVNIR2dhRmljR0tWQ3o1YjlHZWlHSS8wOVBVOFRNSTFKUVR1RVVweG1rK3ZwZ3M1TWJRd2FBOTFnMm9ySVFPQWhXTDhGZVlYOTArQ2MyYTlvSzk0NSs2a29na0V2T1JubHE3Q2h6eTg0RnJxRWNwZU1HZXJidXExQ3ZlREJTRXlsLzE4U2pRNmdGZDJRUjJjaEFNeDJLOG1HUmdkbHJjUjMzejZXQWg5cnBjQnZCN1RiMUpPS3NvWXlBZGhpMzR6SVp3Z0tMVkRHZkNVZFpUYW93T3gzb3R2Q2w0Zkc2TkMwcHJydlc5RTlkVktld0EyRnBDZUVBeHY2S1RGTXorc0NIRndhK05UWjVyZmJpRjRSemE5NVZSTEpmaFIrOXVlU1R6aWVFa2hwTjE5RDBJdWpGZ0ljTzRjQUY2YjE4OFlrY1pJRzlhbzI0MlA0aDR5QUZ2eXpqK09Nd1ZBYlJpM2o5ZkJrUGkxaHdXdWVWYmJicU02QTdxUVJUYXdBc0RXTDdPWGVYTE1WZGx2YmF6VUMvS0F4UlVDOUg2L28yOGk3TTlERFJYR0dhQjBpaCtKS3JncTdlYUpFb2ZmYktyRVNZa2t2SEMwV3VIbW95bUdWUU9OWU9PbUVOK1h4bU5WMnlVVUtoRE9XU3d6WlNmdzFmaXRZYlJDRlBnLzR4QjFxQStJdFdZNUdrcnljd2Y3REMydTRHTlNsaDBkODdGV0RqSnpsdVJXSytlVFFzOEQvSzFBOUFBRkpMU3JhQUQrWmRtQzRjMHhBd2Rkb2Q0dXlPc29KL3E1RzFoUnBiSU4va0tzY2ZOeHpkOHhTY0FZSzZyQlQzV3ZHS1RaOWovTjdMRWNGQnZqOGpoM29aMzlkWENVYks1WVRLUVFmY29Pd2wybDJTR3ErK1BaK0FlUWlRbU5NZEExTkFHWjBYUVJxbmNydkQ2K29HbWY4MTMyajJ2YVlOVHpWMnV1aUxHaS9Yb3B6NWZnMFFrL0JxYnNjaDd0WS94bmErS3RxMHo4bnd5MmZBaTk1ZXhWMGFFaGZveXB1WTFQM1dUNGxjNklKSGZLZXFIODdwRW9hRjJIYVlkTWJmZC9KWWVMZk1CRW1zRytxQTM5bUtweWI4Z1dWOTYwL045bmdtM0JBY1k0aDRxNFM4TmlkYkREUkZGK2s0Y0VEWjRKZ0E5WTd6OE16b3Q0TlZpRUhtMTN6eU81c2loQ21veC9oeTJnQVhOd2xPemxJeDBVS2ZOeTlDbFpRY2kzSWVvN3N6U3VyTUJ1eWRXMnE1UGxleFQxSWFLV3YvUkNDQlh1bFlGK1FpUTQyT1lzZk5rbmNKOEM3WDFuYjdZOWNFZ0FaaDZFSzVXRVVGaDhBZ3FXNDNQcHJSUkNxeXlLK0VuVEVBYlFKbWkzZVVVeW9wbHpBclU4MVhnT3J6UkRYY3A4L0hZYnc4MjZJNGp0VU1uNk9GcUVFM3JLRmREd0JyTWkrVHV2MUVIRFE5SHFXZ3BBTUlhbmNvV1hCV2N5ZXlNSE9qYkFEUnJjcDNFdS9hbHJLa0FCSGNyVzl2RUNzanVxcmFXZWYxd0k0WllIV0pmUVJpWHE5VWdiZk54b1grRGlaay9CeHNEUm4vUTJ6K3hyUXdwa3YzbXJBUC8zNUxSSWFXUTZpMUk5SlNDclUvUGQ3Q25tMmIvaXhqa2ZTWFl6bnZOME0yY3ptRitmZHViZE5sTXgwVENuemNYOGxxUVFoLzZZVVJ4ZjJrOTY4dTB0L1ZBM3J4MGFXbGIvdVpsZmJpN3Y5eFV0cE5QMnVReTBpdk83dkcwTDF4RldsWW9MUEFWSDRtcFFUTWd1anRnV3RJcFlpNG5lR0ozM3dSZXI0T2lGUDcxVTF0bVdlNy9yMGRuU0p2aitkU0dONERrK3JMa1pVcHIyS2U3ekdhcXNmLzJRPT08L0JEQj4KICAgIDwvQklSPgogICAgPEJJUj4KICAgICAgICA8VmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I-MTwvTWlub3I-CiAgICAgICAgPC9WZXJzaW9uPgogICAgICAgIDxDQkVGRlZlcnNpb24-CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvQ0JFRkZWZXJzaW9uPgogICAgICAgIDxCSVJJbmZvPgogICAgICAgICAgICA8SW50ZWdyaXR5PmZhbHNlPC9JbnRlZ3JpdHk-CiAgICAgICAgPC9CSVJJbmZvPgogICAgICAgIDxCREJJbmZvPgogICAgICAgICAgICA8Rm9ybWF0PgogICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5Nb3NpcDwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgPFR5cGU-ODwvVHlwZT4KICAgICAgICAgICAgPC9Gb3JtYXQ-CiAgICAgICAgICAgIDxDcmVhdGlvbkRhdGU-MjAyMC0wMS0wN1QwMjozODo1Mi42NzFaPC9DcmVhdGlvbkRhdGU-CiAgICAgICAgICAgIDxUeXBlPkZhY2U8L1R5cGU-CiAgICAgICAgICAgIDxTdWJ0eXBlPjwvU3VidHlwZT4KICAgICAgICAgICAgPExldmVsPlJhdzwvTGV2ZWw-CiAgICAgICAgICAgIDxQdXJwb3NlPkVucm9sbDwvUHVycG9zZT4KICAgICAgICAgICAgPFF1YWxpdHk-CiAgICAgICAgICAgICAgICA8QWxnb3JpdGhtPgogICAgICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24-SE1BQzwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPlNIQS0yNTY8L1R5cGU-CiAgICAgICAgICAgICAgICA8L0FsZ29yaXRobT4KICAgICAgICAgICAgICAgIDxTY29yZT4wPC9TY29yZT4KICAgICAgICAgICAgPC9RdWFsaXR5PgogICAgICAgIDwvQkRCSW5mbz4KICAgICAgICA8QkRCPlJrRkRBREF6TUFBQUFRWVBBQUVBQUFBQUFRWCtCK1lNSEEwcERRSWlCUUFBQUFBQlVBQUJBQUVBQVA4QUFBQUFBQUFBQUFBQUFBQUFBQUVDQVBBQlFBQUFBUUFCQUFFRnhnQUFBQXhxVUNBZ0RRcUhDZ0FBQUJSbWRIbHdhbkF5SUFBQUFBQnFjRElnQUFBQVIycHdNbWdBQUFBV2FXaGtjZ0FBQVVBQUFBRHdBQU1IQndBQUFBQUFEMk52YkhJQkFBQUFBQUFRQUFBQUduSmxjeUFBQUFBU2NtVnpZd1BvQVA0RDZBRCtCQVFBQUFBQWFuQXlZLzlQLzFFQUx3QUFBQUFBOEFBQUFVQUFBQUFBQUFBQUFBQUFBUEFBQUFGQUFBQUFBQUFBQUFBQUF3Y0JBUWNCQVFjQkFmOWNBQTFBUUVoSVVFaElVRWhJVVA5U0FBd0FBQUFCQVFNRUJBQUIvMlFBRGdBQlRGUmZTbEF5WHpJeU52K1FBQW9BQUFBQkJQVUFBZitUMzRkKzRKdDBQTTlPY2pGMVR1K3pILzAzK01EWkxHN2ptaUQxRDZlL05YRmltZ1hnWXVsK2VZMS9rWTRHdmxzb0dBYkZ4NHBGU2x5U1JwTUU0b3RJUlk2cURiTFlSMjZIaEZjS0hPWVJ5YXE2VUtuQTBaYjZxNUgrWlFjdzlnMytMVU9JdS9mbGFzMkhoSXNYMWpCWUN4Q2kxWk5jUjBHcXhhd2FJY2VWSm9VOXA3akJaQ0hscEl1eHJrMnJiZjhqK1p0RWVndUlwVGxxU25ZYmhPS1Rhb1kwVUo5cDdTZU5pYXNOZElkSldQZCtIRG1Sem95ajR1V1R6T1ozTjFtV0VCWXdLbDhLdWRiVEJLcHJPdFd0cGE1VHR1L29vQ3p6SnNVV2t5VnFlM2xrRGhtRkcyR0VIZm1henRyV0d5TDJoRzJsOXE3YmdQYnNTUFpFc21wMlRzWDNkSHppSEZuZ2hIVy9hRmo5c2NkMXVYTXpLS3ltUkFQV0VNLysrNGhpVENuSmx0SFM5cVlPZHIvUmJURnJnZmcvWVJEVE9EdWZuVTFuRnRCVmo0SjFnaGdXQkR5VlFHMjBpOG5SQXRoZ3Q3bEx4bXhvc2MzRXM1OU1ZNmZXTHVRcXhMUkZSbmZzK1RYeC9HM056ZHlaZm9iUFBMNWNIV1hmZVFMc0RVQkhLbVdvc1BkYkMrVUNEUVJ0QWFGTEdYaHRoMkNjTkgvbDhHREo2QXhoUUlHOEZRMlIxZUlVL2pWcS96c1JyMDM4djZBNzVpR1VYSVJXYmt2Z3llWmVsMG9MNlBBZlFMY2k1OXc5T01ZVzhJWDAwRnExcHNXSEtoZWx6dUR5K1dFaVdIQXVMUE5XMlZ4R2EvOXlUYTNLL3JsNE9JalRkNjBqcFlrL2dCRFhWcVAycW01MS8yWHJKTklqY1VqallkcXJlL3hESTlodTBEVWtoWnhpdzlwOWw3NkFBZyt2UWV5OGkvQTJ5bkJwSDRXN0JyL3dZWWM0OHdiOEdtS0lCSnpDRnNFUjlFbk1yM3Rwc0VncjMrSzZjSFhFODRUMTN2bnhRSXgyQTBrQ29kMjFPRTZJZ1ljMUpCM2hiazBldnZhMVNUM1QrNGtyTjlhS0xRU1pSYkNVQWVobHpZRndoSnRlTWY3K1dqa2s4OHdZZmdyakFIa1I2NXdsNDVzZHFxeGdoQmcxR3hYa1phOXZPbTRoU1hQWWxxQ1pDTElLcGtsRE5zcitrb2x4b0JDN09kdEpPU2k5Yi9ISUF2Q09ZbnV6dTgyM2RKME5PU0NqYzFuR0tvRkVoWFJqbzAreWZCKzBuVnRwU2dHUVFLb3k5QWI0U0NqcW42SWE0ZzNMMFNKaFBQYTdpdTIrRU15ejBOMlFRdVlTVDk1Y2s5UWFIZ1EwYkcxcGRML05EcjZPaWhuZkdGUmdSZk9XdTZnaktsRVRVbHp6MUpzNGlydXFXVHUrVTFDZXVpUENPdWMzMnBKVk5iN1R2RXVMSFZOd0x5MHQ2MDErdnNpZU02d3dQejNhZkwwQzVPSU5Gb0FObGlsMHk4cEpnUXh1RzZHK1pDS3VkZmJBWVZESFp1OXliVGZrUnI2S29ZVTJLOWR4SjNjMlRseitoZWpKUEljajdXSm9yR3dwOFdoRWNReElOOHExeUN0RThUUTI0dllRZ0FaZVA4MXc4RC9hSWFOck9NRmFTVWJCRkNHTmE4K09qVWhuOFRkZHBvaWlGSHpPaXhQTURGSFZrU1h3cDBKTm0zSmM2cy84RnEyVmV0VGI2N3J6bGNOV3R1ZFNzZVdnOTZmSDFkYkFFbUdiUXU1a2pFNVpERGtjWFZ1Wno5T0hhZTJ1U1BTU1NGMGFvTGpoUnY1S255ODBmK2h0YU1XcEZ3TnBjUWhDZWRCc05HRXg2d3VQeXNiK2luQ1RidEdnMGllWXBibWJsb0hLNDR3SS9FeDVwYUoreEhrWWRkYzdCdmtGU0c3MnVxZjZZUEE0Rk8rU25nRDRkcUV6OFdlUVBVVXV5cVp4SEVtME83dllyWTEvSzcxR3dISi9ybkM1VTduK3FLNy9TdHZldjZGamxCYUhHZWJEVlZJRFJTL0k2YlYzTTYyZWtVWExTbWc0OW85M1Z2VTk4REkzcktMcDZOeDhXTFlSRWNBUEx3dUM1K2p0TW9CMnNMdm1QcDVZNXJnME44VmxPOHJCSlhWOXg4dFl5NVlpVzVpaDJXQVZMaG9ISkpiTUs0UDZhODJndVJqQnNXbWFVN1RweVdzd1RWN3Jxd1hZaUN3QnloWEltKzZ6alMrSjc5aUhPblo4NkhtMFAyRVFJNlVlekpTZFpkS2FoYldZMDJ3S0ZNd3VCa3hWeEsxOFNaTHFnM04yaFIwWENZdmo2Y04vaEJVR1NrYlJrZVpFeFp4T2l4R29YaW94aGUwSEplRzcydmdqYW9XMEIxRkVKekJ3RlRVYnUzVmlzSVYwdUk0TDEvQms5Wkl0NlRUYkdQNnZ4YmtnblQ0aml5T2VnTWlKbU1MZXZBU1RvR3VWZHNxNzcwdVZZTHMzTFErbXB0WSsva3MzZVdLblZialo1ZjBzTWRDZGtuZFhBT2dCSDJHL1NaVTRrMnFGK2VobG13MjdLdnVadU8zR2l4RnJLUFpTOFZtS2NJdk5JdlFGTFp4dU5VM0RKSUNxcG1hTzQwQ2x5YWZGVTc2aGhreTl6NDdaL0R0L24yUGx5Qnk5K2dJMVk4YTV6VjBHZm8xdmJleXV5SldDWUZIdEUyY0NReCtCY1E3NEk1SklyUmV1NjNZYWdkMzBTUHpxU2lhK0JhZ2EwZlN5c1JLdG5zaWthTnN5d3BpTCtySEpFSmFRcGlIWGl2Q3RSb2dYTzdPemJvdkNxL0E4V0MxR0w2c2d3WXYyQnNOaFROWmtRZURGQXRJbGl6MVIxckQ0ZlhWbkx2TUJob1pYNEFWaHhhRkpmY0tQZThmTmVjZnRvSUFFeTdhYXJVc1FLa1JyTmpxV2ZUQ2RybWprOHhWZERQWEdMOEQ4SkxRaWF6T0hnSkJMWG50K3dtV1BscXNXQlZmTXYwb041eko5ei9VU3pOdUp2bHFzM1VXbTRyL2ZoMWFnRk9pMzdzS0lmQWVpL3YxSkZ1bmMvcXdPTlFCVG44UmZrWHZDdWhUZHVBMmZObW56MXArM2lXalNKZGswRlRXbXlwQThsOWdMQ2tjVUY2RjkxZXFyelRDWnZvV043Y3Z5ME82c3hFWEdKeXY4ZGxVS0d5YnByRGpFMThhRUNNUU1VV2JUMlZEUXZrWnNvekdiS0FIZEdIUmZkN0xWd1hqdk9qWEx2ZGdNZXgvblRPQlRUajI3QzlXREx6YjQ0cEw1QjEySnAwdVlEa3FlWXBHZ3RTTDJLaTdKWkRUTkxzelBmUHpLQWk0eWRxQUN1c01weWhCTEJod2hDYWJnc3V1VTdvY2dhYk5tTFZKOTBHamJaMWFIam5lejlCQ0g0cVJUVFJycitWRzlnNmpETDFqTzQxa1dPTVlXSlFHRWNlODdRZjFoT3BTdVh1ZWE2WUhPcUxEdC8zc1JNZXBjSFA5SUQ1SVJCQkJnbitRaFVQUUtXNHVXUHZvR3lZc1lvcUZQUnRLNDJiVDR1NExRY1pWMXdWTlVhMVhIREdnSG5pS3ZVL25jb3Q2V3RQS1BQYXpvdTA5N0hscWRYMDhySE1oSlBvK0NVbjZVd2dqOG85d1NrYW5pMENwWVlhckJqMGthZjN4QklEbml6eURNZ1dwK21laytDYzNNZzk0ZkVIL1cyOE9WS3FYN0J1TWRoUVBoQnBENUJNV0wxMmlnQUUyL3RsTjVoMDNJMVdIN3RxRzVyN0NoZEg5OTdxZnFGOHFzVjUzN0xEVGwzSWlTbmU2WmEwcDVLbXBGOU51anowVHRkZCtOejkreXJLY3NFdDVmQnM0TjNWaG1HQjd4K2JSOUFxWWNBYnJhUWsvNGpNa3lsM1UwUUxyZ1dOdHpnRTRKa2V5SGRpNmoybWE5bWNnSGlSODVGb2JZTDhLOCs5OEdrSmt5MnVncTJEYy9zWkxaWktYRjZXRDVobFlMUm9FaDlGSGJiRVM5S2hwTnR6VmcrNnROTTdUSlNnVDNVcS8vVWw5Sm9KNWpUV0ZkSktsM0J2ZmVBbEdobSswU0ZCckY0VHFrY3pRWm5saFJJTFdpa0grZGlqaXY1SDJYMTZRejIvc2Y5MEY2VTRpV1hycVpMZStwbENXWU03Qno5UUQyM2duZlA2V2d1cU45ZjA5VTlkZHhYMU8xRnhQOVJUYmtMbmZLYTcxbnp5RW94K1pwT0JTNHJ0Q1lZb2QvejhPdEtmaDJHUitIWDREUW52QnplRGdyelMwc05EUWJ6eWRKY0t4N0xqT3lubjN5c2plbTlFaGx4UWRrT1JvMm9kNk9hSWNnYmZLQzFhRFBad0U1Mm92Qi9iN2xvbjRtQi90dEJSelFHVG9qV3FrbzRNTHNnMDRKVkIvUWxRWW9nVkw3cWlXaE8yMW9pSi9rTFBWYXh2aE1ZY2FDYXB2RHFCQ25WTURUSUN6RzUrZDJTeVJVUG93UEE3eWxza0ZhTzlhNWRyTzFSdFp0WDRYb0xDRndkK1J5UHd1LzFwVnptdHk1Z0RWSUsxYlZnQURQWmlhbHl6cktYdkpuaHZXa0VNOWdWR0g4ZGlTWXJ1akc0OTNwTzBCa2J6VjJxNnZEa1JJblVVVnFjTUxlbTcrTWc1N2ZCWkgwc1U5aStoKzgxRWoyVGpEQnVocmNrdXZkSTF6WUdzbm4wbG90YldOeVJObXNPSi9nSHQxMEhsejZON0x4N2lRNkZTOXN3ZGhLbzgxRWpacTduZCsrSit0Ym1EZHpUZUczR3czeW9zbkZwSitXRlF3a09oQUhzNVdKYkhaZTdlSHNmRHdsV2dZallUYVM5eDRndCs1RGZwSmdySGM4M212ak10US92NHhIODVnZTRTbG9DVGtJSXZYVUdvSk1PN3dmaFFOVkxZU0xkTXU0NEViU1BXaWJXZEdFNS82MkQ4RkNRU3VqekFxU2p4aVMrT0lIVnhXSThJWXhWUGVCbkVrTWpYSldmZjdFSDdSM0IvMTEyZDdFbDIyc0NtM1RZV0pBYVZvMXVwZzd5T2lCdHJuTUd1L0k2VmdJaVUyR283L2VheEo0Z3lmNGlCVTkvcldqRFRGTEVVR2pseWh5VDhPVTEyN3hacVRTNjIxVGpPU1NhV3hRWGZPZ05FZWl3Mm1MbXNGZE0waGs5SzRpM25QdnE5V0lnb0FGMFFUaFZub3dTbVFkYUFkV0NYNDh2MGNocmZTNExtL0JabmRzYS95aXpBU3FSeGVzdWpxclBTQzNuU21YVk1DNUFKQWJ1MktjS1A1MWZUN0JzbnJnM04vcFFzNGpxUTZ6ZFRnazJNcFU5djgwQXdHTWRSRk9wQW43elJyYVMvSmdpWW41QlFJR1kxaGczK1hjQm9pZVpRUjIxdGxaaDR5aEpwcmJEcURCQWRVMzZRSm9CeVRHMWtQYlJDSlZHUmVuSWFabzFjQ1RPb0FUY3lGV05QTDh0Zkx1WDJhanc5UndtL2MwVk92b3pybWk3UEdOZVBISFlXdlF4T2VvbEZLbmw1NnNkTC9iT2hnNjRXOE1VMEdwTEhaYmltT082SWpVOFdwQTJ0TEFxU005ZDVhTm9kQ2tLZW1RMVpaT1ZNVDZTcW5CNUozOFM0UUlWNlcxM2ovNTEwYytKRmZjVkMyUFhTSmYvcDRzNEMxbzVqbm1FemwyU3BFUldWN3Y5MHRGS1JxNG5Ub1Y1RzhBWDZoU0NvOTVDby9rV1lmWG5qYWtIM2I0aXRlbC9xWVFhVWF3OVg3dWJFZHBOWHM1QkhrYjBROG1WVFhCZ0p2cU5XUDdIS01TQmp5WUZEWi80cXBOSlNxa25vVndOWnNSbC9DN3IzdG9wZ05jQmJRZ1BIK0xGQzJ4V0R0WGZDVHg3TnJKR2UwTmJiKzN2b2d0Unp5dnZ3KzBqakU1SlFQeXNHcTBvUkM2dW93L0VQdlZLK0pHQkRtd3pCQ1J5TC9WWmsxM3dWY2k3UDdBNFE1ZlpLL3VsRm1COFk3T0xJZ3UxcWg0V0VFaHhoempUUFpXa2xKSXRpWjhBeVI2R2Ntek5PbWNSNjBDcmI2eTJCUFdMbFBwMXdha0t6NU5NeDkwRkhyd0h2Rk84bWs1NW03dzFZMURqQ2kxNmpKRy9xbDZnZUszenZCdGtWMko5VUE0YlIwVG5RRXk4ZjE3Sjk3Tmtxa3NDaFlIWGVKV1BWb2I1WHR3ajZVRE4vcXBHdXFzdWNMMTJiVnBlTnBEeEVqakpQaFNzK1ZESXY4SHd5aFBpQ0c0QXpvZHoxSkd0MHIwL3pZWUhWN2hoWE5nSXkvNU9tQy9kVEZLYTFhaWdWanBRTXl2VVl2MnJZekYvUXBBYWY5NFdwelMzNjV1MWRYekoraXYycEF5UThMb3VZOFJsU1B2UEJSWkJKaXdpTDFWbWpyNmMydXM2a1Z4MmxIU3NOV3pDMkx4WDFNdGhkUmcxeXQwWExldlRsTlpFb0dOQ0I1QXFoSk5BMEtPNHFjUUFYU2ROemd2QkhocGJ2ZUhOSENwU1dSdU1iNzhyL2FwaC9Qa3lmVHEveVplSjcya0RlbFJ0QitpRCs1b1lzRnFLMXg2N0dORktZY0FmYzlDOEF4aEkrUDRIaE80WVNXMm9jSEMzUE54dWorT1Q4ZDZXcVN0OW1RVUZvUVBHejFwOHkyWFFZWVJUL0dUTnJjNGdwdkRTakxzWHc1T3hZVytkWXgxc2ROWEFLZEhpSTZKUmRaa1lUNFlPdFVFWGF3RnNxTTBNVmY0eWlwWUNweE12VjVJUVc5TG5uWDFUVUIxYTFUYXEzYjBxNjR0Y0lHRzhNRys2RExuWlk3OXAwQlVqdVRMNXpLWGNYL2JTVkFvTjBaa1JRMGxxaHJMS2ZpNUNyaUZEc0xSWm5NY2taOUpOdUxidGI5MGE1YnBZWW1rZ0FSanR6TkdKcjJHNHl6L1BobXdoVklZQjl0ZytwZHF2ZFVzMS9QaXFMZ1pWQ3d4NXFmMTB0L1FPamUwNUtBc0lhbEF6RFZ3VmViV1pkcmxvVjZOMnV1MTJJTVR3c0NiNnVNelk0MW4rWEEyaG5yUHhKb2Q0bk5lcmJIdWVPQTN0d3AraWxYeUthWUhpQXNONEhNWVl2RVZ5dE1kc1NBTmtqeUFlWFhaNGRqS3kreCs1cUE2UVhRa1hDZ0Myd0UydEtkaFplYzZjbUhHLzBRWGtPS3dZeE1xYTZiVy9BbGRLWjhncmVheCt1TGNYYTEwTjZjT2R2V3lYQjYrcjl6L1NOU1JNaUhCQmFGdTVQVDloV0ZVSnpaWHcwSlN5REEwcGM0MytSSXJjT0pqVVNsaG8wZ3Zjdk03MDNmYk9KUHhuOU1EZXJSRm9pOTdsUVVhYkRBS284ckVYMXVNQ3pNZVkyaVo3d0R6bmdIeHRlRk1yTWZhbWMrNTBicWRJTDlXelMvMzhnYWhvY1g5Z1BidkJaZVJnSGxGc3FLOE56MVgzaWdYV1hGSXEzdTJMMmxnbGZNT3BPOFhITW5xTjBpM2RSYm9CeHcxOGhRSVZIeHY3dFZidGVxK2lYOGNBSk1IM05lN2hoLzVCMXRhUTgrS2wrSGlBQ2JMYnFOSWV3ODdUWE91S1lnMXEwTFVBdmZqa1ZLZ1BkYmVzUk8zd1oyeC9BQ2lUSTFVNUUwZFNhSVZJQ1ova2VlYzlBYjJ1cUxYYzZqNFhSY2h6MmRVTnBUdTA5bG1XNkxqWTZybndjZTRrQnd3eVRlVGUrdjI1TlR3Q0xETkIxMmF6RkI4dlVHOHo5ZmhtN0JsdFFIRTg3QjRrMlZsTXFoWU9xZjFLelNvWXVwamxrTkdySHNCc1R1bjFMZmRJWkxtNE42VDZkL3NSRkxKeEVRYVlkSzQ2eDZlUWJ4V0theFJXbzJ1elZJdkpONzBPZUlpaVF4NTE4WjdBVi9ZNjlyMUh1OGxDZnpLZmxLYWp5TjVrV3dNNkV5UzZSYXlNb0JtT0IzazVwSXRyOWU3VTZJbWY3YS9sejBteVppUjZHTnRxaEdNMWMvekROaGpBUk1LbGEwVGFrZG1xVUVxYVRXcG5TTHJpZUxORWZXQkNEWW5sTjVnNkRRVG92OUE0NGJweG9ucE1UeVduNXZpNSthRVJLNkg3SUJxK1R1R2hZdVM4ZUJEdWtueEw2dElxc2I5ZjlFOE5pak1MZ29MbTA2Sk5oUlFSL0JEZ2NPa3ljWEo1QTRoV2ZyY2xpTm81dk1tb2M2RmJuVVhSb0VjeXlFcGxxamg1ajUvd2ZQNlNJUG45UlVENS9VbzRRdlhqay9LTCtSeEVabEZMTmJLYklFbERLYTZlTVNsQjlXYTJmVW1WTkFZN3hxYnZKdU5HZEhVOHA5RzV0ZE5wem5xb1BzbWV3ZFpWUTZDczNMV2lUQ3h2KzYvTitSN2Z2clhIM3RxSkpuQVU2VEhZTE4zd1BxRGRmZktLTlZmQ04rNjJDOVk3WjN4bi9adWpDU0x3bW9lRnBvci96czBqTkhHQTdFZTRkeHRwWU1IYm40bUREMkszUGdZa29icHYvM1ZPM1NOWXhWanYrZ3QvUElqVzdWOTdXcEV4ZjZwUnFYMjAyUm5RNStpTFR4ejgxTjg4MUMyYUdvN2poQ291NEJoeWI0b1FsNW13T1BoWnliOXpjcGNOdTFtL05OWFN6NDN0bGVTL2RXcG1ROHNTd1pGb1A3V1ZlYWZOa2pjSkpvMlRCV0dnenpSTXk4VEcwYyt2RUptTko3aksrYW1KZWRYZStPK00vd0ExU29rWHdTS0xjUzM4VnhHWFNvaTUyZ2RkaG9vUGJ3TEI2QlBCd2ZWWExUNEorYVZhdVptSk5KQ0prRmJ0MjAxQlpGRktRUkRXUHhxdmFKcEwrL3RQRjRZNDJLREtyZWVMeWNyOFNBaWlvQVdQWnk4VkZDaDJ0c1BXaldHOW9WSUcyZytuVy9VRkdjcmhwa3dEV3dvUC96RGpEYThKbzA2ckk1VU1MQzB2SnNOOStNOVl2TE5vaU5sblIrVDVwK2hiL0N5OTVHTm1jZHBqaE1FU0ZhOUZlclFPMFcweWwwZTBpdGZvRzhGUk54ZFpwM0ZXcllqRFludWduOFlzVTJRUStoV1o1TDRXRHFtVHN3M1FaM3BlNzRUSERBVFdDMnJSaW5SUmcyN1dIcjErelNrK056N2JLRjZtMXVzeUg3bml2dmZqQW1wS0MraDJ2aHNmNkJOY1E0OG9BVGhNVDA5aTRkT2UwY21wQkhZakJYbnM4UHpWaS84d0ZoYjJDc3FTZm5hd2ZBR01GcnM4VGtLc3VyeDNrbzdqRnhicG44ZEkyZDl2RjM2dkdzVGZGZkQzYUlUcjdVTXhITjBvVWJObmV0WFpZUGNTRG1IZ0JkY2gzMzJTdFl6b3ZuZFdTRVdxNHNhUFM0c1liUk9TTjJ5M3BjeXNFUjBtalAwd0JLREtwTUpSV1BlSnFZOVp0V05CanBLc1F6Y2hoSXMvbDlmM1pJNUJnUHBjWko1eTVwK2dmNk5LelFrd09Ib0x5UDh1Q05WVk5aOWs5UjYzOEJSc3lxOGVuTTRRbUdSbjA2ZXQrS1hvRHF6SGlmSmpHeGErMWZJb1k5SlhRTklCcnJRdTk5M1lXV2dhTzBsMjRRWjI1bVdSblRRSVp0dnhOK3c2L0RZd3IxK2Q3QU9SR1FlOXFYYVUyYnN1MVJhU2d1Yk9mMmdLQ1Q3QnMzbnErZGJKdXU1dU1aVExVVDhBaVVEc3pEQUFQcVhyWjdGRTZUbjRicmVqZk1pZlVzM2NoVTdFRDZmVjlLcmU0dmZMbUNVcVFoRE05Z3Fwem9xcFp1VlV4aW5xeGd3RzY2b01UTXVGT2tBeW5rSUdoQS83ekthVDl2VGFCUzhxTFRHb2ZHVFdsajdxNEs5VnphdGF2Y1NMbFZ5YXdTbEgvS2g5dEdTTXFCWW5kK001Mm9uR3BNbitwVGk4MVZQSjh4ZkRzdWlwOFUyRkRaUWFQR0RGTUFqdm1tM0RQY2RXcEQzMllpYzZqOXMzcStmZmxPUkJNS3lzc1o0cXlmbVZkbWNZSytQcVhCMEFNZFpUK3U1NktrVG5UNjJxUmNBL0tSYUkxUjkxMnNjYmQ3UzdqcElJdEl5WFk1OGcwQW14MVpjcnd3ZTlmeitJSlVwajF4ZldGMWNodjNQb2JtQ3pvTm5tZFFZTFVxM2RVU3k2dEEzcnZ3NnlPVTVKM3p2WUNYMFpWOG1XS0U5YmVwY0NEQ0V3OUN4RDArc05uQklDL1pBb0FZb1hDeWNlK21HQ2hmR1YyeUFPQ2NORkRLNzlPOTRKamprc3dMNFVsOUlhQ1RBMVJ0cURVUzNTUnFXQ2VoblgwNjZVb2RUWVpqNFZTZkwzYVB3NWxmSXBnVnZraVBROGtEd1EzVk5HQVlYTjZnRysydFY5dlRSNGNDMzlsVmp4WEo4MytlTS9SRkI4eWFRZ25NRHg5YWNtQzJIQmtnbWFoNENKU0NqbHI0UDlub2FKRjd1TDlkUXZBalBzWllLOHJwdmFqQUNWSGNRZm9LcFE2YUROMDduNUJsQVIzRjAwaU9TRm5naXlHRnJxWkFQTk56dmNOK0JlbTU3NEp0bFNEVzNWOEJtVytnUGVHSDA0WkxIK3F6ZWtzeS9UT1IzRktReEVPUk5lZllaOGwyTk8vWGY1YzdaT3drOE1aZGhmMnBnd1hndTc5SitoWmpaUU5JczZrVlBDSHo5Ym9WL1lDVGMvS0FnUUM5Rm05VGtVZUJyUWpRV3h4RmxRbThPbDgzaVhxOVA4RlQ1QUgxMnhJdER2WlU2Q0FEc0NrSjc4UXhBdlBnUUk1RzM3bzRUYlZqOUhZMStTS25xVnNXSEUzQkVRdUxKd3VrTU42YjFheFdsb0RxQnRBRk8vTGIrTW13Wkoyb05kbzFndVFvb3pxNUV1QmJ3RWRrbjMzN2p3WXhDcDlhcmpGdksxekh6U1BtcGxFRkpQckk4b2JxVFhyRnlrd2wyUmNhUlU2RVZtQkZUdit0cGFSWkJCSllXYWxFQVVXU3hnNndueUxUdEVLSTFnSTd6WUhOaStXc0pRTnJ3SlNTemc0MGZFSXpjSmQ0US93amNzaFN5M0pKdEt3OElxQldjR0ZBZXRpUFBQK0hhcCtEbnhWNjdnNFkvSTU4ZDdPNDdmWHlGTTV2bWZDLzRsRVluODY3cUczMzkvbjhGWDgzamVIRmRidDNVUFIxeTJzUVdFV29DcXh2UFE1b2RlZnJOaTVHNUF2TEkvZnpqb090aG9vM21uK0Q4K2NCKzhFdXdQbVpNRDBmNlJBMFI4UE53R1JXVTZlYXp1VVRNS0I0Tm95SHVha3hjWS9mamVFc2w2OVUrOWFGbmU4eVBuWnk5QTVrN3NWcmMyQTRyVS9ET2F6ZXVhRE9yL1R3eVhISlFPMlZSMVVpMnZyb1V4WFZMRHcvZmxSN2FWWE5oT1pQN25IclNWY3lSZ1oySzVaRzBuMnRYeHIxKy9raWI1M1ZkUGtBVzlRMjdmV1BpYm1RNnBWMkhnbnA2TzM1K0VxOVpmT0tndVV4MmYwSVVKYXN2b3JZTlBwS0trcU1qTFUrL3Jpb3Vsc1FoRWNyM0V5ZDk3TkNJL1MxSElBSGM1OEh6K2lHSDFkTGtENS9Tc002Y0tGOEE5NURaeTVQZVp5ay9OWHNhNGlFcHlpa3NFLzY1TEU0aTkzNHBTWGwxMjBSelJxZG5Jc0J3L2FhUDBHMlVZVm1BR0loV1pkUzFmMWdEeWdjdFJzSnhsSGNYVjM3UmoyN3kwRWduSTF2ZzZMTFl2QkMyK0ovQ0JEcGszVDJlaTRBd2lyK0p6U3Q5UmhSQ1RxNzV6TkEwRmdVOXQzN0RyTXg2V1dSZnE3VHVmNE94QTluL1BRWXNWNEQvQWhmNWwwQ1MrMmV6ZHJOdUZsRFFLNmpIUlQwaWQvT3ZKT2RUVHcwQ1p1Z1J2aktqQXBtRFhVV0lGOGhtdk9XMCtXd01DMHpzcm56bmdjVDd4TXF3OVkwUVlWa3pSVW0xKzJGVkNoWm9iNGRsS09SVDVMejFVOXlUcCtkaGU2THIvT1M2MVE1NVUzWDlETnZFSWVoL3I2a2MwVytGRHQyc29mREVTSlRjZUs4OVdhcEI1cWM1Ui9wZkRVQjhFYXQ4T1lRT01aQkFaV0RHb3hVTDB4cnc4VzU3d3E4RldzelRKanVPNEplSmF6ZWFOS2tZWGVhN2xCMVp1RlArbkF6bU9TSk8vcGVsdzkzZVFQak9mS1RjOTdNU3h0dk03VDRYcWFMbkJPSVZrZ0VtYVV2TmUyRzU1YVZKZWJScWZXWXhSamJJRjQxNUtaOG4rSmZ4RWxPdlN1ZHJ5aVZxTXlXM01HdzJVMEFjcVY4VCtxQS9zdVZWbHJvZmxvT3ZhaW5CZXp5akJ0SFZrNXJMaUhWVWdremNFY2JDOXVETmxvODJmaEZxN082clRESkxVYTN4T2Zhc0NLbWFLSXVHeThNd0l3ZDkybkxWaG9pcE9xU2crQlViVFZXMzRXVXVuUWFwWTNLa1JINmQ1R0R3MU9sSDR6S2w1T0MrWHljQTN2ZU95MVFzK2U2Sm5MS1ZXUUFRYUNBVldRWi9GSjRtbC85aENrUEZXdmZiN2ZUZkFhQXY0TDFnZGhwVWZvT2ZkMkdUdktvWGxVUGZxZWxjVit2bjJlWkF3TFZ0S0hUc2w3UHd4N2p3RDR0T3d1ZUNSS1VwV3RLcXpoVEVjZVRJMm5CaExvRDhtRHkxUFo1UlhqSC9PRnRkM0QrUENveHY0LzRTbDAvTU9EdlFNZm0renlEOVAvZlNnK3NUcVZEZ2JuR1pRMUlMcDh2aE9ta2J0U1FrcE5qOVlQM1VrQlVraG1GUU1KQjNOVlNTeFAzaVRRYlhKZFhjMkxkY1lwNTdCY2RJMHZXalFpbXRyVTFQUFNvSFEvQ1E3Sm1TT2VCaUNVUWEzaTFCbUNlblBUNHFBL2ZIOVhFditHeGhtL09uM09SOVozanB6VTVPZUFXWjVpV01sNTdCMkc4cTIxamJyRnNTM0pGN3BUL0tOWEtORTNIWXA1NFRleEx4VXRHQ3NSS3E2OEpxbVlJVUsrZUl1RTh5a0w0SjJrTFU2dVM3QlRXbFRLTUhTeWpnS0hHTUxZODJyeFJMQzloa2cyMHMwc1ZZYmQzaElYcjdvOFBUMC9GYjE5T0puUkxQZ2Y5MFBFQmlkSXVQS2EyaHhFTzBzNXlkUHpkOGE5UHhpaTQwU0lYbXN5cmJMTDJLQmNzTmpSL1dlYUJHUGJKR0xIazM2ajJtMVRRNVQxY2RJc00zajJHbnRMa1NhMDJUVUFKeEQ5bUVMZUNJSUNHY24wSEM1S3QvWmNES0NxSUFUb2hhQWdmUlc2Q3FuZEJ1QWVaZnlTckZGNzAyMGs1Y2Mvd3liK2N3aFN6SExoUTJJa3BYVGQ2Y2kraGhxQVVxR0xTVms2RldTdGlxV1dMUzEraXdLNzFjSmozbFd0blBxNmYvSW5nbEczdWE2bXV5SjRFbDhPYmduM3NJZWRGREg2SjZZM0U5eXh0UFFMblB5enh6NktMbWFGZnlOdjlaYmtaeHQybnVuVm9XTWRPL1I2Y3AzZFJ5d2NRYkVndHQxTTY3M2s5andZWDYwZVJUVDF6Q2ExemUxUEt3UUZBUnM3U2JNeHltN3psMXgxTzkrYjdPdGRoTS8yVDdpYy96R1FWek13NDVHOFNpOG1JR2lBS05DYjkvdHVPM1l4bitCRG83TndpSkdaQ3VIVmhGZzV2Vis5b0hDUGJEcHIzM2YySEg0dlVnbUlRbFpTbDJGcHVpL0pYVE9uaE8vTkFUSG9tV1NrQlg0QkxxWDk4ZzZvUW1wWkdsSldrOHlqV1ltUlJ0ZmpJdnhuNUlMNG1zQ1ZkelB3b05SM2ROVDR2dUtobFJ6OXVmYVVzWXJaRVUzcW9RWjBIUWEyMHZIdDBPaHBKdml0ckJyMW4vUy85VTkyV3hzWWRVWUIvaVR5ckhvWTA1NjhHWmVtanBWN0daczd1RnpJQlo0L0N4dnZEeVQwSFZXc3ZoZnlKaEtoZ05PZUN0NlUwbnptVWNyUHpUVWFKQ2F2b1Z6UmRucXFja1A5TnZSM0tQbmVaZ1AyY1hxdEZmZVdsODN1eE1WOHdoRXQweXlLS3Q4aGYyZ2tTc1ljY2gvZmtoUFgvTmpqVC9SMXpsSFJUd2ZSVWtFL1VvL0FFS09FQ0oxcjMyZUtnRERKekk4MHNnaWwyY29xNXlrQkJ1aWJQTlkyL3pwM2xNOVgzd2o3NThkMnJncENFYWh2UTV5TmxObGZKUGJ5MUN4eVpCNEtvNldnOTdQNFhRMzFMdFJDSmVseENRZnR0N3c2VzBBYlBwUGhaT0VoNGRJRnhlWnJ0L0VZTnN2MUxDWEtkcVo1Mi94L1NyUitPR0xDOWdEN2VvWmthcWQ0Wkd0VCtiWldneXg5Y0VoZW9sQXpvelhLUk1pYWdzaUxob05ONHNjVG1wRFpNSFlubWxhYktaNkVRMlVNSXdPcSt2K0p5YjQ4RjRyWmZlZUplZS9ZRGw3TGZPbjUweG14bUszSUFVbXhaSEhrc0dHejNzUmNXQ3A2NXVzYi9HdlJwSlE0WmdMR25wUmU5dWw2WHZRY3ZyNHRUelM3bE5UbUlHOTF2eEhPTkt4RFlhNGkxbHozaHg2aW93OVR4dTJLVUVwU3A3Tk5MOTh2aTVOM2UrMm4vbDl2dFdmdzZFc3Z0OTFEK0hSdGorSHRCZnc2RXc1V1dsb0tGZ3VLN09UR2k5cENtMTZ2RzZRMnQ1QUNlcVl0SHNuODBKMFljaG9RZ2VLK1dsS0g1Q2oyRUlnOE51dmpmZHhPUXE1WUZweFBmTlVoYzEzTk1PY25aa2hKTHlqWFovZG5acXM5UklteHFGcXh1VUFPYnJQUkpXQVphRUFUcjZmOFdCZUl6aHgyVG82THFRbnBZZGFTNkxVLzhVUVBHKzJQbFV3allGODBVM29wQmJTbms1YnBpVUtSV1laNWF5QmFiRE9zTDV0MU5za0xvTDg2Qzc0c3l3UUN4dXA0RjlEWkhMTmV3RnN2YWtXeHVLSGJCYkVUZDFjZ2dMRXdHcjV2YWF2VVpXWE5wRWNPUmM3cHVQb0JhTHlGb2FKK1dtQkREemtoNWt3bTRaNWZPcWlRYnRMMjdsc0FNNjNDbXpqZjhSUk4zaERnR2tMNGQxT0RmcGZsWG9BaHVWK1lZUTdWUy9CTDNEcVpsVEdUZ0dEVFNwMXVpK1I2Rk9pd1lzMW9Rb3pENzBmTVVwbmNxRmtLSDVrL0xoS2o0UDQ2M3Y2aHE3SWdxSVhHYXZsb3hLcGl1MHBUUVMvUTVtREllbVlNY1lQZGdIaUhuNlJiQVNUWnd6VGczQ2cvS2RydmpDUkJidGN1OG4zY1VERC9McDJwWW9jNjJrOFBwMUV2TmE0MXJseFhaZFdEZHdjeWpuWGh0Q2pITVRwWE1XZ29MeFo1SGxhTjdibkhEandPL2FzRXg1Ty9yWitQT0tzYXhsVHFYWXVlY1B1ZllvVjgzbmxveDhQSlBKUGRVWW9iR0ZrSzZwdmdubU0wV3RjUURJK01aRHFGVlBBUnJSaW5SdHh5dnQ3RllUM3Rhc2FMZWpLQUtOQ2hLalFNcjhWVGo0MUJSTm5uNEtHaElQYWx4b3c1T1UwMnZqU3dsQUhIelZsbEZabzJOWlF1U2JyS3Jzb3JNekpmdVpVWTRRc0JyblM3RFQyenRscHMxS3ExMmdMZm5pZkhMaXZqREZwQjJyZFE4OXgxZHFZd0tYRFhTOTFIVFg3M2lOWFpzQi96dlQyeHd1dTJEYzgxQW9UZ3NIK0QreHhsdjRwUmJUWHRYSmNDUC9UeGl2N3dZdHZxeUM1L3pkVDlrNndsUmhKTnVyL3hTd3NQOEprU29sOXlkTmlKUnA4T2IxU0U1TFFXQXBVMVd6TlA2ZFNOV0ErUytPTWxRbjJPOTZvdU84M3pqeFIrUmgwSkZOQU1ReDg2cis2SWNOZHI5YlJ4eDRHSzFGR1kxMlF0QVM5aVZCSDZ2R3lFaVorc2pIbmpTNXZ2ZlZ3b3NYbjlvSy9mVHh2Ny9UL3pYZHdKcGxhMHRraUJlV25pWXUwQ2FIL3R4dUhlbFMvQVUxNlVxRWZDaklLb21SY1c4UjNxUGVnNGdmanI0YVNUZEh4RDhxdnJmc2pvNmhOWWpkdFpYczlSRHBvQ0FzV1c0Y0M3U0FRYlZwcyt1cHd2dXVHRXZ0MWhxbWg4dFpLeGhQZ0dyZktDQi9oRm9udDJsYlBaRTEwR2s4T09BS0gyNTBNZ2tNbjdPWktNTjdsS3dtMm50Q24xSjZUZGpDOVdmNzVCK3ExbHBoRGMxbnQ2MzBTU2VRZlMzci9VVndVdXZ5S1JDSVVnMzgyYmErZXZNUjlUVDF2MTY0blRCUTVoUENrKy9YWGVURzVQNWVUM2QwSUxOcEw3MEw2S1Z5VDFqOGFGelBZV1JNVHJqN1lkcGhoaG15TTJNL1lFTHJuc1E0ZVJVMDdGRm9PcHc4UVF0T2RaeHp3K0FMdjI3cWgrek1mTEF4WnJkQ1pvemprRU5pL3NDTGpMOURJQnRxWHBWTUNuejgzc0Frb0Y5c21VSUFVanNSRkpSSWk3T3BmM0NBV0pHUmpqaHRpWGt0N3czbFRnTXlFWk8xUU4wTlRJd2d3NTQwQjZPRHQ1eW5kN2tUdHh0NFFDWERLQlY0Q2VvQllhL0ZKOVR6M09BY3FIUkc5M1Jnb0ZKSTlyZVlYcmN1RnoxVDB4VktGZGF1Ynl6L2JFUnpBblY5cE5TYU1mblNKdVFJMFcyVU5RYW44RWpsS2ZNUVFNUU44K3RqOVFrWVFxR0tSVDY2VncvVjRZNzBOTzMyeCtNR1FuRmdOdkl0aFlzdFVIclhNaGp6NmU0ZnVuNEoxYnQvT2ltRmlnTldvNG5DNTUzQ21Ca1FnVUcwVW5lQWRKRGtaL1Y0RzJzZisvWjV0Wmh0SXRmMHZySFBweEZyNjgzUHVEWDNUTXJxbzBQbW1BcVliaDc5dTRKa2YwM0ZHMEtIb090UjlNT2JLaHpSN3d4RTFGaHp4Szg4SHlVM25LVjdyUmdRN2hWcmNreUo0VlJ3MzUzU21iQm9YZmFacUpUcWtCRE5wRlQ2Nmsvcm1CTjdhWU9mYjNmSlpoQVUyQlFuY1NuQVFlQUdqNWhPUk5ZYUxhdS9PTGFVaU56Y0FxUFZteFFtWTNDWm51Q3AzanovRVFMNVVDQ0Y2WXY2VUpNM0p0TEh0bHUwaXptVHNwOS9WcXY3RVd6enhEemk0d2lrQTJEM2kzb2hJRUxkN05IR2JGT2VBdXpjTmQxZElQeWR6bkd1TExJS3hmWXNHb3NZL3lPWE41empPcWNLMUFpRzFJcEVXUDhWL0pGdlBITEtaUmJsYjlncU5HNmtFemFlYTBpQUROYlpvcm1CMzNwUHB1MjRzRjloWXFHejIxRktiNHVFZVNaM3p6YnB6T1BWYlNIeWlQWWdnNGNaNFltdFZ5TG1CNkFiaEZLSUxXaVFhRWJuSW9nR2dUTENxRkJ0bUh1Qk5qTDdoZUxkWlN4QS96UjdhOFF0NlhRV0tpeXFSSjlVRitZakdITytxdW4zN0hsRHlVRlpSclpyT2lOdkdCZ2dqbk56UlBGOTJRbHlJeWxTQmVWM21TYjR1TmpES0lkUVVHMzBaYUdMNW96UjlteUxOTGREZGJCMUJJRFp6TEs4Q1NpTWJQWGo0MnMwMmhBQmY2bGE4TjNaQnFMblRuckJkYldoUjlFNUZmcitXOFZKTWhHSDdDbWhHS0ttSzJjMDJLVG0zeVVqZDFFbnRLNXYzb3Q5bk1DTmFzTTRhSHF4ZFYycmR6Uy9QZmhQL1lSOTVUL1Bvb3psYS9yUTZRYXAyOFgvRGluSFYvSmZTbENpNDl5NXlYUHd3T2JiZGpjdk5sRVAwYzlWNmZoTjczUVZhcU5kZnBod3ZoM0lvSHNWVlZaSmNGNFFyWmxyZGNYRUJ3dDFzVzdsMloyZCtSZXRTNkR6cnN6ekdya2dwMStXZi9jcW5TOGx1aExHeDgxWVd0VW1adkVTdlRRSS9JalVRWjVMaHowUGV4RTVpcXFEdE12MGtGQU93WXBMSkdQWFFVY3hZNGx0L2JZRWltamxPNFg3TGxhSG1ucUhzNDJjZUNPVTVETlNFOWMwTzZLZ1FEREFRZFV6T056L2VPcVkzTmw4M1VlcXZtM0Mva2Y2TzVSNklCVmZxOTRNYXkwUm5MemVIQWcycXhkbGxOdmgrdUhybC9ZK09XWEpmL1pMR0FHaTZ2WnRvVGhoR3VIS1JOMDhuQ1JZTE8rblJMTHN2a3pmalBMWjlOdXAxUjQyUVhVNmxlTkJ0YnNHcFh1YlgveUc3VVNvbk1DY2hISmtFRUpGZ0YzcEJscitDdHM5WVdCVGtmZlBpRWJ5bHNhRkVxNVdlSXVzVForc0VnNVIrN09ocTBQcTdpZnIyVjUvNTZ2RndoVlVHZzFMYkRENngrOVcyY0haSWV6TTZ3R2NXN0EwcUhtcDJoeWVQRjFodXUzWDBBczltZjhTd2VhbkhSRTFSeFZONy9TNVFoVVQ5a09DelR3VHRpelRNRVhRaXZNZ3VEdHErMGhnWnlrY2Jmb0l3RWR0SlpoWTM3YVdIeldVS2piaVdldjA4cDZaaXBxZjBweWhSMHJTM2R5SWY0dU9vQXlMV0NrK0x1WW8wNjFNU1QxODc0MnB0UG1WTFJKQndpbUoxclNvN0MzSXptL3hYcDFDQjRpaFV2OERudE5GM3FNUDZpK05mRXQrRzFDQUg4U29oTk5XREpJVmZBWEsrY3dBM0dHb01IbUFMM05obk1pV2JWZ00zeDgvMGYySTlhS2lpVkxWZnBvS2IreGczMnRubUhZTFZ2V2NFckZIM2tYc2dKdEtVTVBlSlFXRjdEclVHdTZNSEJNY3hqR2R5dE51aXpDMmpzWXlaS0ZaTXQ1MXdiSEIrVm4ycytNRHE4VnJaNWd0YXpGbHI3WDFheGhrYjlJQmwzVFRjV1NNSnNVdXpzZFU1Y1lxYXRFdklESm9IWTNnOU4zR2VmQnVka0JqazRIblNiV2ZjeGNPVUFySUpLaEI5TFIreEF4RGRBR21nanhtMWYyRUlGb1pyNURMcDNZL3kwN1lkTk9YK2dZcnZTc0JNTThqVTlndWJwNnB6eFdGbXR3UXUzZlJEU2RNMFpTTW1DL2dQMnhtUGFyVkxQWlFHeEpObTJaQVRWZ3VoNjdVbkN4RlJjUmVWN21OY2s4cXFpblBERUVyYUVydHZXem1rRktyNTB1MnduYkdld2xsd2hWVjk0Zm9xWDh6S3M1b0dlN1dEaERGYXdibnF0RGRzQ2JUaTduTWZVUUNNenM3RWFoZ1p2TTBQdnZZYUxMeFN2NTZXYkllNnJHdWhaZk91ZHhXdlVvL1FUWDJraCtXUFY0MmxHQ0lJY1JpK2VLQlgyQjU5d05GRHFOVWtYVmlSeEpoVmNXMkJlanBuV09ZRTl1RlpHQm45ektDN2V1b2lUMml4aHZDYjlCYmdraGZWV1VZdHpOeC9ISktpVW5aWFFsek5SY0VYUGVJQWdyT0JBaWNwcDcrMmRGUUdYSzliQ1VLenNlZGFKQmlMaWVPWU5RMndBSWZPTVRxYWZnaWc2U3pYVWF1M0pETmFxMVdDY2IyTkdRekNoVnlFWUlRbVp5cE53RzhGWVlURTBscWY0MTQ4NStOQ1A5MFdzaFM3dGtreTFWRXlNY1pDeVRybmhBeHVaR0dVY2ZHejIzbis3Vm5BczNPdzRVcDUrNDhkclNIL1c2Z2xDMzBiRXlndEl1S3daRjkrNFJvZUZ0elZTdTdpRjFPOEpsSVhJRlBPY25sSkU1bnp5TjJYK3FIdld2SzV3OFljcERVRUVOMnNUWTlTQXdxei9OcHdUWndBRUEzMTdOdEkzZlZ2TjF1NCtaNzNBc0VDTTlER1ZDTkN1UWdEVjdDc01DbXg1YmNlZHJhYmV2bzhnVENkdjV0STVuZm9YRTBYYkh3MzJPZ0tpLzQwSWs5OUZkVEpySzVPQS9SN1ZFYXBic25MR2hNODUzZHJIUEx2RlFCdVhZTjlOY0o0NE9lSm91ZmpsaDNpQnZlckdzVEhDb3ZIWnVRK0k5SXN1M1lMZFhnMHRjaVRJZzRoZ1Y3QXZkOXAyQVBSSWlhUldpTzlCUnY1Ujd5LzBNL0QreTg3TytjZkJXdTN3OVpsYzI1YTZmY3lyVEl1R2VjU28wN21uT3VsazVYYThucjlCVndlWWR5TmlwMzB5c3pWZ0V5RFdOSHRqOW8vU1p5Ti8xMU5NemJaVlZ6NUF6bktMcnJhcmgxZVI0bG9YcjFZSndwZGtvek1qdFdQUHZFZ3hvTXVRbnBVQjFkeWwrQ2cwc3lsV3g0V1pYN244N3dEMFB3cDhWclNJZXhwQ1g5OGl6Tlp0U2lKU1l1dGF4ZDg0RVB6WHNSWG1TZTVhbzd6MU9FaWJMRWkzT1phRmtMMGFjN2hYa0w2MGJDZTNmVG9ZN2RBVlJzOGFHa1ZlTFQycGxWcnVIcnBxK2lqZTViVzRFZWl2NXFBNzd4aFVKcXEwWnV3S0V0a016RnkwS2dLVzBNTll0bURWMG91aEw1R1YrVEtoSXlLRGVpZXhMUE81bmhocmExcHc1TnhPazl5ZUVPVnByTDU1bVhYZWhSKzdzQTBzM0dWcTdFdS8xTHZhWUx6bS9kT2VMWUhkYUNrRVJ3enFtUU9abnNYSGkxaEN5a3R5YjlGSktDS0tFT29mOENFaVB1dGIxbWVtRTlPYTRjZ1JHeG5BdWZRNGxCSmY0N09yNmdFci9aL2lCa0RDdlBRSFRLak1ta2RGeFJjSDRrRk5BVFhXTFV6amVjM21VbkhCQk10QjNaVWdEd1ZvQ3ZiRkFMMmdDbUhvUFNmUlNkdFQyQnh3Rk5JbnRJTFFVeEc3T05Ga1Azc2RxWXV1RGM5TndZWDNaZ01wMHp2TGpHa2srS1FtN2hlbDcrb3h6cHdXVDEycUdwQzFPWXZMN3Aza0x5TnU1ZXdSM0NpR2dYMThCbEE2Z3hET0RySEh5L3ZrL2YxdWtvZ3BseVNsMnJkWVpwQWwvRHUvV1FROXM5Q09WRGRRS1BPUUNDUkdnVVp6YkRUUGFNYkJoeExwTDZQNlZ6cDd0WTg1K3N0dDJ6YmFRdVdETTE1K1hTaHdlOFgrNnlNcW9SUVNhZnJFMVBrb2dtTm1la0oyUURpMGVyZThsWUFoNUVmZGNucU5WQXprVTF6enRHclFrS2MxdFFlR2tBeGNobDJ0aTlUUHVMUzFzdWVzSlpieUNFdWRrb1JXU3FRaWg2TVdtY0ZEa21TWUlBU0RIU2JIUHV0MS9mcWJSL2FFUFFENFhJbkI1WTcvQm0zbHFnUGo1Yko0Kzk0L1krbWc4TUVxZGJ4d1hUUmNEUkdTS1NSTWNRTk1YOU9Bd2VKUXlZTlFmcnVSbWhyazB4V0JyREZqeFhsMVlxeUtxc3I2dVBlVm1pWVVPNnIyU0lrbFd6MU56ZlpvV3F0OTY3akNqeDQrckhpUjNBREF5eVErUzRHemJZRmxFREpqa0xMUHhvajdSSTZLZUx4ejlwSytlM2Fla1pFcHlsQkYrZExJb3N2TEhyODl5bCtJelRBeWhiOHFEK1dCakJTNTlJVEtLbTBta3JoKy9OU0Q1WHB3MU1uNDc5UFpKdklVNEd6RW5YVEtBZDVPSEp0UEpMTWtUVk84S1lyL3VDZENpZkJMSFRMUjNPY0FVTVNiSWN3TzlPajJBenJTeDQ4M0pTeTVCQnYvR2JFYWZqYkRsbHlHaEhBWmFDbUYzZzl3cWUwSmU4dURybkVtb0NKY3ZVZS9pWDN6THlzNG83RnpkaHZoQ3FiSUVsV0RWeG5RTzRZd0R2b2ErLzJISFFTYWVrZFJlRWdQMjZNZEI0dlIrLzhmTVhrT3d6ZDE1ZnBsbDVPYlVVWVNsNlo2VE84aDhjanZzd0c1N1dZUmVDdklZMTNTVXlvdWwvV05WNXdLM1U2WjVLemYzZmw0S010WmE5UzdzRkxyZDBEa3NCM1RqWDlvdDB3RnIxRUNvMHpWS2JDWWVLaVFNSWhEOVdtWnRGMnJzSzFrdnNpWGJSeTl1Z25JUkJJbnViR2VFayt6RnpBQVhRZXpIZlZ6NWpFUWt6bXgvSjlCYmpLbG8xZlYyZlBzYlJ5aDdEaTcxT2dWWnhjaDBreXRIa1BHanhyQXJlNUsyOUEvUHd2Qjg4OENPNWRUMGlSbFR1eDZwVjNjYkt6K0FMVjFIRkoxbU13dGZkRE53dC9ZQlY1K2QyejBwVXZGOWR6eHN5RTRRdkoyWFFVU3hDYXd1bTRRY2tZTEFCVXVUbEZkYmNtTkI4VkwxUVdCQmhKK3RjSjkvUDNQblR2YkpsdTdjSjJaR0JiK3BQcjY3SnFDdFppazFpWG9DSWw5UFVSamNFWmcyNXNyYlVoWjFnMGt3aEhRMFhvWlVnZ1ltcGVkWHFwNXc3bjIvRDg5UGFQeGZoK2RaTWhhTUFsdDFMUTRtZmM3SDZGcndzTHV2U2pqMUc1T28zZGJ2MDI2MUo5ak5YL2pUTHk3KzA4ZXpYYVQxRWtxZXBXdzllb1dtL1dIQ2U5bE5mT3F3SkowM2dOT0tXK0pxVG9KeHJHT2N1Ums0S3NPTHdVRnBkRFNWVDF2NXU0REY3dWNQeDRacWtlZ0N2eFExYmk0TUV4V1hMZ0xNbE53R2VBNkJMc216OFV4TmNQZEZrVlE5SFpRUW9Bc3pORXlGZGtkL2pGcUJtc2NNU05mR0N4aStlVmhnUVVFRWlXRjEvVS9FV1F2ak9yMHlSK1pmOXVKU1d0M0RnZ1pRNjlMU1V0U0d0NXR2Ky9LcjFVbytYQVptN2c4c2I0bFRCU1JXVnFlc3ZKQmgyZjhhVE9rWC9OU3JPUU12ODkzWjUweEZpeXUzbFB6WWp0NmlCc1JoNlRJdWJBN0ZiOC9CMXBDWURDMm1FSWFlUlF0c3ZuTzUrUVBGVkVDWW10MXhjbUVxV2V5SDVUT0VjRWhhc3JwVlByUmRJaGx1bWRnNUlPM2NZcVhjdjBKRk9SZzVkUGdqTmRmZCt3UEQybjJLNGFWMVFPQ3BDRW9SeWtlMUZsNGkvaCtoeGw3MjNwaHdWZDU5N2xFeW9haW5ORnNsOEZncGlxNlRiN3NTME9PWmc3c1FRVkRIUHRpOUZkeno4R241T2p2eEZWMy9TdmFOVEF6aFJuN1hZQnhNT0NtZXNoNk5QTWs4WU9NcUhiVENtRnFXV0tJOTlFc1NwRjhrdTBMNEw1TkczTDJFcGhVRVo4SW1idW1VZ1p2YlFHOW03WFpWZC96MTFxUDNWbFM4ZDIxcG5QMzBrMnNSa3cvbktNTnFaMG15OVRFZXFYRTVWQ1dwSnl3SWgyR21wNWUyOEY4bmowVVNaSkFrZEpFRFpiWHNXditBWDMzY1hYRkNFVXVZWlJyMU14TVNKaTM2czJSeXoxc3VuVW9PN3BJbml4UHJaMHB6NjVzVlc4R0hNOG41b0tHZDBIdVR1MnY4UVo1d3F1b25ibWRIMmYwLzQ3Mno3aVF1MXJubmxGbXZzTDZidnB3Nk5KS3RiYzRPNGx4QWJ6ZlBKR20rQ0VNT1NxQW0ybXBaYm1QNGEva09nTlUxNTEzdENzK0hvODVEUnNmcWtnMUpRcFJuZnpYRXNSNENGVTZ0K1pvWithMnEwek5tbWhxNmpQWjRqTFV3Z0ZHM1B2eWhjVEh1aU1HanFGdE9yM0c2bVQzV2ZPTk5vL3JYYmlBZEc5M3UyVWxqNTR2ZFZKb0NmbC9zRWhSYWJRR0xRUDdLNlBzOFpmZzlpSlVFY1hYMDNVZ3crMllBMnFnUXNOWTJVUHNGZE0rY3ZEQnF3MFY0emJrdDBJVDhuMDA3anRtb01KODY4bjE1ZzBMVG01eEErQzVkendmNU1rTVVRRzRoRlZ4alN4bkYrdzUwK0lVMHZKaTZ5blFVNWxmcmJMYWJHNHFGaGV2Nm1Ma1ZOL24vbUhDdmhRNkJJZmF6TUVDMjJsUFNYWEU3d0FqdHZua3BUeUlDeWNSK3ZZUk83RUJrM29NY2pxaGZrRlJKOWdYRjRrZFpiaUFzSVFLcEdWUzBaRmszY0oyWXJkcnVEODFVbzBjS05nZTYrRHc5MmZsWVlsVzF0bnlTNVc4ancyZjRPQVdyYi92SUNZbTEyc2JIWk9HQ1dJZzIwUXo3dWRiWVhNeDNzbGlBanl6Mk1HSG5uNTRxa3lUdG1iZzZOU3RNek5Dd3RFL2E4c2FTemFtRlJDN1lGMHBsYm5ISkdvcm16NGdybGVTOHJxTmhSdEc5bWtJdnN5Tis4ZlJOcjVVVExXOXhLZDU0MDdqbjBZR2VmdFlneTZFR1FnclJPcWdHUTJwWGFKTmtQWGFPajlGQzM2cEt3Ujh0eUJBRjZXMC8vYW5BdU9UYzZ2YmxVdHJpMlR4VXpYY0k5RDZmRHd3eG9EdG5nV01lSklDNDhxMGFRQUp6RTBQeW8rM044cWRXM3JpZHJDUm05K3lPcHd5S29BTFlsWERWeTRkTXZSTHhDeFJrb3A1R2RwNE9mV2Fvai9wRkR1b05DT3M3MWpYWm4xcEFLWXJaeDRsM05aeGczOEdrYkdaUHJ0RXl4RUo3ckpYNGtNOS9PbU1SazRGY2dLNnlOdTliYkh5WjRsMHE3MkVQbWNVeXc1Zm00OFdPanVMWCtmdTFJeDBkYWEveVRmYnRpMFJ5NmdSQk1EVzhNMEpRcHJLSDBTejhBYXk5VHlWZXVZUlk4b2VSbDZHeVVjNW9ZU0ZYSm4vcGtoS2h2aDY1cUpCcGFSd09RUjhxeXJlZEF5MW1YZDZXd21NcmVpcnF4RGdTR3RLMm1uLzZpRDFJdm11NXlkZXRudSsyb1UvemlFc1psSUxETzlTTisyb0NaZEJJSlJVOEZNUURqWThkN3U5N2dtUjlQRnFoMklkZ1BxSEJSVWRNNGtrdmNYNWFJU2p0RjBIVkNxU1U5QWt4SWFHWG9FVVFLYktGUUxXV3A3aG05aEp4cmxDLzRpanhiQ2FjMFJDaW5kL3IvU09oWHIrK29RazduNGNsRUFTQlpES2RWdFhCZ2lxUlBWTFVCYU9wdk5OWVBBRDl2bUw4NEZCblFHYzRsdURWU2NBVElPOFgwaEdwNGo1SGJFbDhJUlAyZUpFdU5hcXltSDgvWHJjaG40QmRIY05pUE8xVkhqcUh2QWVScDV2ODFtM3RoK1JaalBDTWhWSFV0TUd6NCtGNjNnck1LRmkraktxckhDQjlIeGFUZ0p6TVdUbG5hbHdNbW9KaWoxVHVCNllDZzBEMU9RcisyVEc0aGdocHowTnhNUFkvaEJ4YnBMVXNKbS9wOVFSUlIySXRTTTU0QlZwZUhPK1JhL0NKSFdSRE9zYmYzRnJvcjVOM282T0ZUdnpFS25QeEwwYkdzMUp0Z0tORVExbCtweWdOUlZXYW5EZG5qOU1yQ1VZK2UveXIrVnhBeUFtV2tpN212RThYMjVCdFNyZGowVzc5WmNVYW10RnVIdTlZVnpqUlN0S3ZwZ244Si9kYy9rRDAxVCtiZW9xYi9kYlBJY1dsVDcwTmlXby9ZczV3RnFwcy8xd3F5UEpWV0thZ2t5aGFYVEdTWk1EYzdmSWJORnU4L1B5MG4xNk1oNlBvQ2F4T0M2VEFlL0dkZjdCZmpHNmdEYmk1WFBsLzd3dkRWRDhEZ0VUUWYycDZ6WVRPYVEva2JuQjdYWWFuV0dhVmxJRFUydXJqSzRTODFzYkl2ZmorQXl4ZUt0VHF5WDh4MzZYODVBTHNhTkFrVVVyNWxBVTJMS1FyeTlJRW5aUHBMUENEOG44aWJaaU1KTXBsYno2UmJETW9mZTZSWHMyaVdzMWI1ZzlrVEFKeVdHMXFuNUtlaUo5UzhYYUIwenk2bmk2bC9paHZtUmpLT2k2Q3ZZcEYwODJPemlkOU9LbzlMSWpxeUpXcnBaeTlQajBQMEl2NldleklWYkZoVjVMNkdXQ0s1R3FLNWF1MTB6Sm1RbG01QmxMd1lJSXBFaFNMV1crWkIrK2dldHNqb2FONEJoTUcySEdZUVpJL2MwaFROakM2bS9YYjQ0SWR5YVNJNjQ5b2d2MTMwdk50Uml3Wjg5dTJqWkZVckpRMnF2UTRTNVpMZTNHNnJadmJaMWkzdE56WG01V3JsUXJTaE5MamdqTVpoVkV2WFhNdGdwcXdCS3ZUUXU5cWRqNTB1SzBOWVMrVDZScEJqUVVxZ011R1poeWloYUt0R0lacmZCRmNRVm55alF4UU15Q3A2aDRmbU1wUTZNenlHcTB5UzZMWm1SeVc5R0Z6N1dqNjA1KzlwS3JjSitNUzhqemZiUVI1bmFoaGJETnB3RWcxMFVKblVtck1vR09ENHV6dDJIL0hlNFZ3S0FwclRDcndsT0JtdmhuWm8wcW92dW5OekVBRjJvdnprajBHVGxRSGJqQ2xlai96b3NsKzQ3QmlsdlFjZUlCZUg3K3RHbnpERXpIWndZUkNvMGJvcFZpR2wxU3orY2JldHJNZWRyQTBuZWdSU01xaUJOZ2wxL2NTM0FHMkVUK3VaeVZhWnVMNmFzZW5SdnhIeVVPcUoxZVZ6L0ZvRUZwaDhMWjYyVHhRS2l3S1pFbnJsSUNPUHJWbkplK0pxNklYUjczQXFEWUtWQ2VSVTk4STNiYW5lR0FQRnpMU0JvK0RiYUpsWjA5K0p1SGlHUnFWaE91K2FMLzk5Y2Ewa3NmMTdNcU8xYjA3TEFoTnVKZ1dPbGhYYlpXeUY5Ris5bC9WdDRMNVBxWC9uNi9ZWHovZEgvVnYzZ2gzNzB2MWFUa3lsRkhOajdRYTFtTDFUN3NRSGlsQk5mTldBbm54TUVFaE5yU2pCSDdHSlE5U1JVWmRUZHhHaFJPaVFxeXUrMVR4eXVQTlRPY0IvNWpnMUoyMnQzQkNnbHBPbXgrQkhZSkpuZnpBYjl5dXgyTEZaTlI1b0xEa0NTWGgrWFVweUZITE5rZHYxK09Ta1RwQWxYUk1FamhIOUo4N25ZeTVMT2h3YjI4UWhhSGJ5Qjd0ZEZ6UmFFSnFNU2RyRzdSQVlhNHBBdjgrYS9iMmlrajVxMzM3d2tmYkJ2bXhNd0NITWpnZGRGV2FzdURmbSt6WGpOTFFEczZJRlIrV3dHcDRZS1BqaGc0NHR6SDJLVVhTTTYvZkIrYllCS0VlWS8zR3FnTkRPOTFVV0M5bE55OXBaMjZhL29tdkpCT3p0Z0NLRVhBdWRUc0x6c3AzbWJnWTdyVVNFZ1FUaEZuNkxlbFZUYWlEU0IvTjR5V0xlYmR0V0xOem9TM1hiZHB6QjZDdHIrcHdES09kVVkrOFZ4U0M5ZVJYUHo0d0NyVndHYWZHcmswUVI2T1NjZGp1aDhqNkNGT1RpS05Pbkx6cU94TmIrWW55VHVITEJyZGJMRlU5a1lTZmJwYXFScElRL1pGcDVLZlpVM0xPME9qQ0UyNjZZZkZKL1JYQzJaZ1ZBbWIvUjUrSDFlK3NxRlRNWi8wU1QxSkZzbmg1Q2ZGekVxcFlzN3VKNzdBcTlmU2Fma3lFcVdaQlhCTWt2Tnoza1N1SWhIZ1ZkSXN4YmJ2d1V0L29KaXVrbzE1b1BIenZSNGNTVVQxcS9KZXNHcFVoK09wRlpPN01JV3l4NmJUY0pBQkthbVBaYzFpdWJueUZoa2Q4YTRVM25vWUIvWWsrY2EzVEwxcGV1VUxyNUpMZ2hocUE3d2xxWEMvUnpjUlFFeFExeHJBYmFnQUVLR3Uwa1N6cHVjeWsybitISWRGVXZCMGlVczhNS3U5OGdlYmdBbXZmT29aWTVPUEJuQjNzc2RaMlB4OS80dWs5SXlCRDdPWmNKRG1RR28vT043c3hCQVFhWUZGN2FpNkQ3SWRwOExZdjUwNWNGeDNybHc3ckhOSVN0ZDBPMitGR3NDNWkwMkIwb3B3RFp6SWJ1ankxVGRHbTBxaVcySm44bkd5ak9rWHo1bzFWeGUrelFEVVZpVVhGYk9WcjJ4cGEvUlE2MERVbXhsa1dzNFpTeFlZSHJVNWVERW80Q1R2dHBqdTQ2Yi9YRFIxd0syUWI1VVQ3UnhSQmdnbWdlczFGQTZPUmlacTBhYmVqVkZjRWhLNytnNThjRDR3RVE3Qk9rZCt6bW1qZktNZllzaGE4L2xnWlBTTUZFOGZTdGlES1poeGVxU3o3a0R5Yk9PNlNrWTRSTmRITnkzMnZPajFjNWhQUzNrS0VWa29lLzJHTGJicHY1Q1Z3RjV6dUF1N0NKSnhvM3RHa0FFR1VHb01zQ3FYUFFMZVRZNlJPS0RKWERlWkxzZGVlamFHSXNxV1NhSFBKVmJubkJPc3JCNGdyMmJiY2ZRKzNzdkNzUGY3R1JseGs0ajVSMmhGQ1k1T090a0t0MzhiS2htSmRpRGhoeUZYWTlsSkVFbWIvZnhLbm9BUHlvTFIwU1U0RjFaWnJDWmZMdnFBMzhoeVFZRUZVdXNSMFFidFh0N3hqcWVFMzROb3I4V1FicFh2MkhmNUdHOHRQSG9kQUZxbEpxb2hmaUhGME5nKzFVWEhiTXRvVGVJc2NGc0dXY0lxbXNGSTRYMjVkWWJMSThxTFFQeGM0Tm94NGhvWDZoYTE0K0o5TkxJcDIwdlBETVM0US9kbzYwZWpEWitXUGluSG9RenorU0ROYzFHV1ZHMzU4VXZXRWlpdnFqc0NSV20xaFc3OVVZbDFqODY4SWtlMGx6VmJyTTk5QTlzUVBUNURxb3VONGwycTRYNDJ1U1pqYjIzNFZNbzFSdHE0TjYrQVMvTVU3cUxQTmlLMEtBcHVlNlBVSG9SN3pwcHZDZ0tyMk44Ym9qNEZjR2htZ1UvR1JVdWducE0zazMvazdXUE9yWHNJQlhxaEt6VFBLcHhZUER1citXcEtLc255VERCUUxjcW8yZHdETE9QUHY2SmpiVk1EcjNlbE5JL3NHUE5ONzZGMWorc3lia1lDdnU1UGl2Y05UaXFVdndMUHpYMlZYUzFjWVpHZFErSnBiNDlPYW96cUUySTZqMC8wbUFNMlppQ1B5VS94U0tQS1NkbUdsaXpuMnNnLzdmVlRoQ3huK251ZDQvNzRmZHpyaUFENVBmMk83MkRqV2Z2R3dNdEIzT0dNVGJ6K01QUE83UXRTaFFCeENZeHIrcGI5eFRMWUZCWEI0SDFrbDZKWFRjUG4zbUx5U0laMDBqdUw4V1JIT3JSUnFIcHAvaVUrOWZYUTB4K1BJaWxsbnEyZm9USDd4bUJmVGk4cEF0Nm9NbkE2dmRIcytkZ3pySU9JVG1ReXVjWDh5V0taVXk2a05wVXZxaEdmRE9sUUZGRkZaWEtwMjlGY2tPN01LVHE0YW9ZY3hLN1FlaVlBc2hNeDlncElaZlRHbDdOOCs5eGVOcDNjUmptdVdxSWV4cVJuNU1Ta01Xb2VLdHByaFRSdktidlMxZXVUejB6NVdLOElwUzc5Wm9MeklNcE5GZ25QMFd0ZVhpVC9KT0FJRHpNSEVEWFBQTnBBZUxPL2Z5YzIvaEJNMDh1d1k2T1BQZlZ5RExUOFVDT2hBekZuTkZqUERJejBUbkpGQVQ5WTN0Nkl6U1RyUFFaU0R4bDlKb3VLMk5FN2dsWmNQTjNETER2bnVNUm5tZjM0YTQvV3B4eXJxREJlenNoUkNxbTdFd0F2dTgwd2p0VFlLU3RjUFRJRUNKZDJqdHlIeVZvVzdNR2JURFJZUUZkM1dFbHN4N084WkJTd3FZTTgrazdNRXNWcHFleUcvOWRDUFZmUTdqdFdjR0NVK1ZhYkU5bXVlOVRsWldGelhaNGZ0dnk0enBMOHVISHh6Uy8wVkgrQlUyMUVCTDB0alRvLzljNzdLWVNlRUxiWWdoM0Q4bjdaUFFWY25PS0lIUmdIVllGV05HRjdNdURJR29YM3ZkMXhmRkVCVGR6L1FlRlFvTllvcnZqeHdVdFEwZWx5ZEZuYjdRQjRxLzdIbDVSKzJOL0VRNGttai9NeEVQTWpNNm1jRWtkWjNQUVlGYnNwb2FSVzdNY2ZUcFYwUnBwN3h5WHluZSs3Z1o4TC9GSFZEK1h3T0ZZTk1yMUp6QzlTc1hGTDRrYjRqYlROM3V5YnlkdlRQRG5aRnpVcTV3bEZZUmkvSHF2TDY1a2kxVVBGWSt6OElTTlNJelUzMktBdGxKOTliRExZVVdxaTZ5ejdiUjN4RGRZTVp0eXFiSkE3cHQyRmFjencvZWtFdHZRNXJYdHNuSUR5a0tsZmtPSWQzNVlrbndLampwWWs4N2xIelZGOGNiTUs0Z2EzWnY0bDExbFNRN083WVV1SGhqSHkwVXM3eGlUUXZkdkZrM21LQjNYSGJtckdKVERJT214OElVcDVNWGlkRjdaZ3l4SlFhay9jSWlObU5rdGlCQS94aGp2WkJTeno3bGtSZWsxU0NLVmVvMnFFR1orSUkraFZLdkpLeld0UllldTF2b0RFMUNJTHFPb3hURStpblVLNHFUVUMyZkZobnBVOEx1Wk9FSGpmS09mUjRuaDBTMHFYSEdtTlh0SXBadVRENTRZYy9zOWdSU3duNHlpbDc4YWhUWFRqQlZsalVPV1NxeERCdXFZN01VUkNpT2sxWDY4NGVwdTUrS0xvc3o3VHdhY2V3OHUrWHFudEVaZjdtZDVIN2ZhdlpBUkN2VGlvWWVBL1M5dnNtc3kyZkdrTnRrUmJtT2ZoVTM2WWxnaW9ZTTEvVVczNkswUGJteU0xNVlxYnRCSjdaSm5iN3EvazZjWWhDUGM4Q2tVbktMT2pSelJOUFZqQUFhQmxEL0VyanlBSVB3ZnJHem1DSnV5cWRSak5zRk9zSGtOT0lQMit2dEpZTFVsc0c4LzBhSkVpSk01NXZPQUM2RXpaUmVYK3lMVkF0YnFNRlo3WlU1VENRamdkcXVVUlhKYXpBTm1xbXdoNnZCQklmbUtKOU5lbDVzdWd6WnlsKzBWT0FEKzJOczR0NUovRFVzOGcxcHBRazdEZ1BrOUJicngzZzBDeW9tT3NjSDRhWDFtNmIxZzk4aWIySWFlZUtwS2lvUkpnNkg1MTFRamFmQWlOc1hIUlVPU0JOMkcvbEtxTlVkOE1NSGowakR1NUlTUjVNaGZhUEdQUllVVGcrZkFTb21VcHNzcU9SSlVpUUh1ODM1V1kxdHRKWnl3aCtEU2szdmd6cE9YQkp1NDZsU1dJUW9pU0EycVFDL3UwamxyTGtlV1Jsa1BxVXJrZjdxdGNHZU92TTVwNVRQNGh6ZDB2eTdOYzZWUFJ4OTd2VURzUnl4L3UvL2EwVDJCZ0RRTC9VS3dkdnJ6VzJjZEUxR3Z1QW56S3piSW0vSVlrRStmM2ZOMGpvM21idTZ3anVRVSs1a0U2ajJlTFhTd3pJNUR6cjAwY0JVTjRaQjFRZTh0S2x1SWl0MHlXRy9zeVA5WUxRSHd3TUxuUUdoUUJPNEwwV0QxcGtNUHVtNG5WYld5WmdBcXRJQ0NzclVxT2hwQThaOFh6QS9xU0hWWHZVSXlXNlFyV0hRSWFxUHhUTEhZL1o4WG45VUhvQ1JpSW1DUWVZUVRPUmljT2JjM1ZiVWRsRWJENjdjbENZUXJQZXJVZ3pSVVg3Zm1ORmNOY2w0aHMvaXpVUlA3aGNMZWhMWFd0N3FZT01KVWtFOFVZZVZaclRTSFFIL2NkTGc4SVR5YnUyVUpOZ2RRcTE5d21lSkpqRVdFSDV6NGhrTG41SGh6SWJIOXo0Zjl6NmVrMGxBb05WZ2svc3RjaHJFOHlXcmR6V0ZTczloUmRLcXIwZnFvN1hZVEVJTzZpb2R2YThPTk4rbFp0T1dUazVkaGZ4VTNiVVVqdHdTQmxjbFpPckRIYlZkcERxZGFvb21zdDdMcVFDM1lpR3ByVjhLeU5hM3hwNUl0SG0vakhGby9oekdGSjBwK2NWajRiSmZRdENEYko0dkQzcHdzSFFWcDZBZjRzUW5SVTk0cTI2TUdIb25TUDZIMXI5U0RuQW40dmtLS0JLRldPUGxkeWpVUHZRaDZqbndXNUFKSHdiZ0xZcHlEZ21WdmxUY3pCMVRrSHJyY2l4RkxDQ25PbHV6OXJiQkdaK0ZEWFdVVDNOcDVMRFRvUmlkNGI3bWFKOHE4eVNUdTdiOGQ5SXhDcWNZc3F6WlZLclFITFlMVEdJT2t5Q0lrcHU5Sm5HU2JmNDlnQjN0cHN3VUFEYzcyUXk1aGR3ejhsWXFtc1ZSWXRKcVduaTAyTjNHWm1Tc1hGbW5XR0twVkxabWtEcmRETG9MRjFTbGdLTVNGNnV1T2s0L1MxeURDWkRTc3R2NFpabnVjTklOSkxBdWJURlBaMCtzM3RtTUhhQnR6djdRU2lQQy9yU3JSR0N4eFNtMGQwNUcwTWpnbWcvWjVvam1CU0hUWFRUMC9hMGluWG1kN3B1cGV3a2NXWTJiS3NWQ1QzOXNVVi9INlBOaW1WUXJHdTMxSjU1bVpQbUZLa0N4TnIwbHdtYnlrTEI1UkhjTTh2U2F6VHJzRlVYcWw0WTEzc1NyWjlpdjBpL0FkcjlPanZzcVI1bVN0US9MREloTHpUc3UrS2RwSHlHOXRzN0VpeFFsb0RWSEwxa1JZWlNYeS84OU9tcis5MnFuYVVGMWQzQzM3dk8zbzZkMFExbHM0clRvRC95TXNEb3dKRFcrY01HUWpocEdNSE1KejVUNXZXU2c0VkNLWXIxUEZLRjZ6bVVCeVVIZXlyaEVWU3ZBSWs1NVFjalNadTVrZUk1R0ZEU3ZJd1lMcy8zcGgzZzh2bVVJbHlXT0ZDb0p2bTRwalE3OUxrUmh3VDNMUnJqWGtkQ0NvWjltYldqb2psZ1cxd2I4eTMzUnMvMG4zN1hacUhnS2o4cHYvc0RQa3dRU2lTdnNCUzdzYjJIL1V4NFExVVZpZGtLRmxHNWpySVB6cDVmSXBBaVFWQ0RzZXo1NnhqeTNHdmNqYnpFMWZVaENiMFBsWnpncm82K3VvRWJGTkxpRmdCWkUxYkdsRG9rTmtOeXRKbVU3eklVbjQ2QzA5WGJ6bjZZRE02QVpvQWg3WHdUVVhyeHVHcUlZVlkyczVPUTFpSFVTbE91UUw2V210ZGZMdCtVL0c1ZVJ6bkprUGdoREpESi80QThaNkhrcDAvanZXY0xNc1k4bGNkM0NvYWNYRlBWVzdOZzdDdFV4YURlR0kwVmZFL1FGbzZLRVhuQ3YyOEJ6emJjYW56SnZxUWxWdlhwRGRyVC9WM0JCam9uRkpPTEtlSW8rTXNiWHFtd2x0WTMrSktEaGsycDZlUGs0Y0R2NEg5V2xWNk0vSnRtNVNwZkRMaUNlb3JmTjI5MVRQb2o5aXZiMUhmcUFFeUhBVXREcnhQVlhrRjdnMFdIazhZYUEyZmFOMkxmcksvd3VkQmJJbnVJYU1wbitudVF5UmVwcHNGNkV5dGJnZ2xnZW5SZ014OUpFaC9JelowM2dqVDJCSEVqeXgrREZlZEdoMC9Zams1TjVGUmdZdTRhTVFyS3FkN0ZLNm9hTlcrdEJTQkF3UUdUSml1dkNYNXNzUmt1ZzViZzdNenBnL3FXYTVVN3cyRTNzNWNYL0NBb3I5Z0Frdm0wNmxKSkVqQXFJellhVlRxNEx0a2FybFNvMitYdi9YL3ZueWZmVU1PRnM1RUxJb3JBS05lNDFsZjI5dkhKQ3NvR2Y1NUJqQUxHRTMyYVNuZWpNUHUyT2Rra0JhZUE3bWw2aWM2Z1ZRaEdJbW8yKzBZSGdxSzAyQXhjSmNVS1RkelA1V1NKaGRTSWdnZHEveGVyWjBCbmZEREF5Tlc0cmtuVTlaZ0pnRVptUzBhS1dHdzA1N0E4Z1VPd1pvUnpHUFZlUmxnb0o4d0FZaTMxWFczYXA5c0hIQmw1OE5xaklQWVRiUmQrV1pMeVJ2MVZzU1lMOTE2SGxmWGN6akNXa3VMc29XUkpFOWRqN2FHeCt2MVk3dnRlSFQwUU5RS1BLVVBBb2lFZ0hyTEFhZzVDdjFvUW1hVEdTRGlIME15ck5meXlQQXNtUGt1WUtPQ1hVcHBvL1IrYTlEbEhNSG5nMGxuYk9mSnVQdmJBT0lDU2VuTnpzN0llL0VWcHpEUHpPWjJmclMvd2l2VkFXMUluWlNxYjNnK1RGWm5GTktUQWF3Wm90QzJrYUhERUl1dklVYWhhZFZSazMrbEdmMWRIUXRxTFJJNGhVUnFXTGNWWDduZXROV05nZE52UWlIVjR1N2dNdkczbEMyZ0hmTThQMDlPNDRMN2tCSzZRYTdYUWhKL1ROV0gxamNNZUZLVm5Kd1ZXSHZDNzZqaU9nTHFGSkczS2t1eFVteW9IZ0IrUEFtRlRwZWhYdlI1UUhvZ2FKRkFCeTcySnBJZWJHWEIxRVAwWk95dGJ1VUZZaml2SHdIT21KZ1hTUktvd3YrY0RYemlOeTRGR3hBeXVVRCsxRGpJMWt5QUR3K3hEclRrKzBoYi9kZkpzai9WbGdaZWJ4T2lBWjkrL01QZmhhb3J1TFlsSVo4NFJGNDhKZnE5QllpdUlCUjVRTFFQcGdaNDRMS29yV0NxODFMMzU3b1hvOXJDMHhpLzY0T3RSbkdtbDlzbEVqWitRYkdESDJJdHl5Zi9jOTFjL0ZYRUR6TGtyV3pvNHB3V1UzcW5HVHRNRFp2bVBmQ0ZyV2FUajJDVXlaRTBHenI4T1lKQ0gxQ3Vmb2FRdkM2UlozR0ZKY0wzTlpySi9CZUI3N205N2NzYmc2WWJ2R0RiZzcwbXIzbW5LYzB1OXFiS0JPc0oxb3h1Z1c1cXRPWEhsNTZaTExRTmpJOFBxSStUL3c1N0E3NDZoMHI2d1RlYnVSQ3I0ZHpMNnh1UHJNK3BoeU5TWTNKd2puMHFUSTdxQ1cvdjV1aWdSVlVqQUpJWFpzR3M5cUMwMHgvcW1FSEd4QjlzL2M3eVFiZFY2Z1duTC9jUG5EUGM1VTkvMGZ0ckJBOTlmTG1LTm9KcW9OREV1NVdwZ2MzbnBsN2w0UmpLaWRJbXVVQXFKS2xQZGE2ZTdEZHd2SWZhVHBLTFdIRkZBYTd2aDNMUW9CcWpoQVh5cTJ1UFhQdnhrZkcwem9NK2pPL3lPU1QyREtrdGhKUUJwR3NSYjdqOFZ1YkZYanBiOFRzbGJUakR0WWIvWWlHZXVJQ0liNzJ2WW1kM0MyUmR3WnZCRDhQOG1idERtbERCSitWekRueWFqRGVtOWlxOUNsRUxmNzJrMlVySWE2UmN1dk5Gd29rdElaS2lRUTJudHNyWU83aS9FcG9tMStYWjgrZVJMVDdPcm1BUVp2T013MGphdzRtelhJa2ZUZm9hVkVvaENadVZLdkRpK2IzZTZaWFkyRVBiaUlBU2lSVWw3N0V6Sm1FcmlRTHBycTAwc0tBUlVmSlMvcWQ4SmwzODl2L3FzQ3pWNTlyY2paT3hQRmtjUllQVFBqUzNYMzVZV2J5cEVSSUI3clR1WXhTV09oZjY4WGdUejBpV0o3TXluTnVCYVk0WXhUTmRLSDFYTDgxRmdFbHI1VUlLMHNsNEZGT3ZMd3M2NEw3WlNjRU5pZVI2OXloTFdCMzRQRGdoM2lEZnBBaTMxZ3FLc3lrOHJIaTFOUkxIMlRidllERi9VQlRRWHB6c2JtUmNYNHU4aVFlcU1NZC9iSjBzMkNRMVYxRTQ2NzdTeGw5UGV3SzE5bHRNQUNla3BpL2NCNnRZeWprVkxkQ1NScDh2bmRVYWRvV3JTVFNDNFBUY05EVHBzT1lYekQzN2VUajd4U3lTWEgwbi92SVNjczdOSGE3ZEZvSHdvaG01YXUyaGF3dytkRXFUVDBEK29PcFlERzJ3WktBRERLVmhRQml4aVprcFkrSU1POEgwTW14cUJkT1ZsbW5wRENLc2tTV2s4ZS9PNmNLNVdzSnpwNXY3d2QyVmtiRlRQV1pUUjdiRTBFVGg3SHpsNG5kSXZMbWRuclRtakV3bEZDbjZYTjRYZG4wZmw3QUNlVkVDRkU4aDR2eURiSWdYcXlKQzZTcnBDcWNjZHlkT1QyczJhRlo1a1hiQUpuKzRTQnV3d2huYjNEZkZ0RkNneWpWeEd4OXUxUHFrY29oc1MybUxsZDFyVXRaanlSS0FhTWYvb29SVXkyNHY5cVNOd1ZNSFh1SEZNdldNeDFSVlcwb21FR2xjeTlvY3ZqVklBbFV2OGRBRndaa2ZMbGdsZmlnT0NSdU5pTHdBSjVVNkV4YXFkdmd0ejhPajhrM3VjQmRvdGdXZU9md01CUytzbWNDMmhKQjZITWYrQitUM3YvU2RETVAxZXk5ZlAzRHdEOFAzVS9oOUFnakh1TExjNUxrM3JOSFlQOFNocnNQMFBsYjVUWW9rTmx2OGp6UUlYQUhEYkVCSTNrQlBid2VEeE1pVldkN0kvc0FiZ3JsOGg5WExhS2x1UmNIV1U1WTRKdUtDR05jdk5MTTQ5WE8wc2JycVp1WjYwdWpGRUlwR1ZqOEMxNTZ5RlBaN2l5V1NYalJPTnRuWi9uekhTL1VTNG9JbjZPVG9VQnNJbDE1NWJ1a3VxeGhqbUpzUkZLTnM3eXhoUUYvWHlybncxdkI0S01qeW12MC9aS28wMXlETjUvTXg2SStYb25FdVBjb0thVXlGWkk0cWtNd04yeE5oTDkvMHdqN1JaajF5Wi9sMncxeFdKVGcrZUpUd2EveTdJMTZHWHJzbStDSnRJaHhFVlRpSjlrY1BkYjVrditmWjJwOVhRNVJYTDE3OUNsSkRzRlVVNHN5dnVYcWY0SldWOWMvSkRxVkFmVythMFJMNUhtdTd5Qm1HMnNxNDAzNUI3MloyYU80bTJEdk9CcGdSeEU3dzNiQkJ3dFYyQVVmcEovNStqdGJ4UENtbGQ5enlpanFJWnNXNlFZcVhwbDJqTVBPY1BKdWplRWcrUEpmWW85RmlYQ1hKb2U3YzgvY2xhcVNlQ2dyUmNDTDlFZUwxc1hpVGJtRUZDNEhPeEwrY2hTRGw0bzZWMU50QjRWQnEwcmJCNUVZdG1LMkk0cThvMFZVcmFrQUU0UFBoTWhsWis1Tk5PS2RKamxyZk9iT2ZsQ0RPTWNRM3I1ZE1Lek5OOFNlZ2trMEpOejJqaVY3d0Rwc0dSN3VUVGxnMldCdzR3cGt0eUJ1ZzZINWVBRjl3ZHlQYS9lV3V0ZkRNRFYyS2F2amNocHg5Q3lOTWpVR3paWG9ETHJwOXAxMlJPcjFHcFk3ZWxwbGY1SzF6Zmo4dVNKM29hbjJGNUE3bHRpbWNQRUtoc0hhWXdrdDArVVQ2L2JUYTNPRzhPQ1JFS0pJaGlySzdwcXVxREtldWRMWlZuSy9LWEJINXFOQUgxMjcydktJQU44alI2S0FGQ0FHSGlrK1lTUml6T3RxM3AyM2VaWWh4cHJXZTRTMmNVMUh2OW83TW1HRytBbjl3NHZuY3VwU3ZsVU9zS3RtVzBPalc0MEpSOFp6VUR4d1lqYzUxVE5SL21JdEVVQ1UvbnVWbEVhdFhHbHdjVC9YNFMwd1hKem13Z0tuZzVJR01hUUFHNE1tWjdWTHk2Q2VqRDg1TW9mRi91U3kvV3hEdzl6M2VZOWlFZ2gxT2FmMnp6VVJFVEtNSlp1ZlRWR2E5bmVCMi9pemQ3cWtJQTdCSVpQdUdQMVlTTFhqVEcxWXg1WmdaZWgydzhFeTVNVXFqZE1EOUNlc3lDTWZ4LzVhQkprc0NqUjdHK3JYcU5DRGJyNjNpWXZYUmFlaFZYc3NOb3pRNmsrN2Q3ZzRvYnlwSjB6L1VIUGJGYXdBSkNwaW1pUnJPQTNVbXRQRkpCRDVubGdNQzdiUHRYQ0t3U2JxbXducWhwYll2QTN0S1N1bzYvVXdOcU9lKzgvNzJWaGtGYU1OQWI5bkZ0citKY3RIMndpZFpYZTFmaVFzYXFlMzlpL1NFK01hNGt5ZDFVSzlRWk5UZE93OW9ITTQyVlhJcUJUQysrd2hxeDJMWDdCN3Z1dHNBcDhmU1BjY2NHYis1QzVFYTRyZ0RQQytzVmllK2d3ekw2c1RMazUrUWhPN1h4V2VxbkxPRGlIZ01TMkpHT2ZIRzIxRzJjb1NWZ3V0WllhcTNMSE9vVmVNdFgwNzRNRUZoS2R2WHRMZW9ReXVHUXlsWGgrTHlwZUE0eEtmYUVjVGdkVnFtakdlL0ZIM2ovSWhaWkJqWXNCbjRYUE9aYzBMQW0xQnhFS0YxQUZBV0Fra3VjLzBSalMrUElKRUtQbHQzUk5XZ1Zad2ZGMmRzblBHeDU5MUtKby9qOGpSUkRON2ZmY0R2ZWZBQm45ZElwMUdPQkxhOGZrQnE4bHVCbnV5d1lhRzRrcUlMMll1M090cXdoZlQvaXV4d0JPMHlyV2thMmlhL2FVdnVVQk03VDBEd2d6Tm8rUjYxSGdxT0E1M3NjV3huU0RBZkUyWStGUWJod0dzZUJtSzZEMUF3K0haUmRpeUIrV1RHTWNCR0lBdDZIYTBRREVnN1hGUmhmclRVQW4xaDc5cWxXOGhQSi8wRnBEQU5IYllXSnR0R050bGpNWHMzM2RkSDhpVGlZb2E1MnI1OVpKbW82Skg2R0NvSE9RbmRweEZmcjFITzlIUzBEaUZlaFhyc3p4Z3VsN0VyRHExMzVzcmFGem96Ym5BZnlxa3h5S3VSNzhIRE1XbWszeHJVdDNwYm9YWUJ0akRkMW5qcnpadmJNejRQVTJhUEVaNkZJUHo1R1VyanArQmQydU9sMlRhNzJTMXlNZkdWUC9WaDVJbEdCTDg2WkRMTEZ4eFZmOW1vTUIvVE9SYjNFR2dNYThjeTVrOHIvSGVaRXkyLzlyaDU0dTZGQnoyVTd1OTRndGtQUFhnQjZwOXVrYlFwaWJ5S2M0SmtjN3RwRXJUZHpSSnUyaldhMUgzNm0zRHU4WHFRaTVnZ1VLeDM0K1Q5VUVxTm1jTTcrNVd2aXFDeENwSXNBOERDRHkwcEdsdGZGQ0t1Qk1ObHNKdUkwS2k3VmZac2dWa2RpbXIydTBhbU5SM0pIYXBJZmhjTVZUV1VlcmtYVEFmSFArRFNTRzIvQkdxUitJWnhZNE9SUnlPZGxBWitRRzZSS2taTVVDQ0pwZ0UySDJDdE9QNkpHVElYNHNzdDB5NHYwL0hTVWlMeDYyMkZ6aUhBSGNwVUpRdFV6SmZ6MEVXMjF1V2lIbHlLTmk4c2ZpeWZGU29EZSt4ZThCcTloa1pBRkVCcS9RQkJUalNMZVlkdzR5eGxmWWlxWm9VK2lZN1lQUmEwdWc3RkdReTA5SlBVZ1hpQldGZlN0WFQ0RGJYK0srQ2s4RG9WQ2Q1V1FTR0lUNHVSN2xpZnZRUW5GY3pDYU9odzMweHBmUGZJNVNSUHVUUCtYOVJMbUpFMGY5d1NBVVl3TE1JdlhxWmlxclBGTEErNU1PMnVCY3QxeHA0TkVFRFlUZExqemNmUFRzeHFvMGxyaUZCMlBNVmFQYzZRRFErWTBLdDlwV0NWS3BqejVGRlA5TENWUzVsTWVSc3hZQzBOYlFGYU44bmNlMEt5QWt2Vis2cFFvNW5sOVJwb3h6ZGNXUlJtN1pnNkFDYlNia0x1REwvRnZMb0QwYWVKL1dxSEtYR000MHd0ZjgxUi9BS0ZVdGxtMkNmellVZGVKT2hqQ0NSOGRFOUlMWnU0NktFQ0ZQWHNnRUVqY1UyUEdiSjQ3cGhHbWNZOXh2cDF2Z3pOYTZlc09PcHo5Nmhxc0Rua2FGV2lqYmswSWlGWWZEVzZNTENobEhRMS9kV2hoVkRJa1pXSzNjNnc0T2dReGhvcGY4T3Ryb0xoNFNqNXBYMXIvZUFEUVZHR3dmZWNtczl2YWs3VGhJZ2RhT2lOdk1SZUQ4QkF4Yjk1UDZ3TFBYL3FoaTQ0QXFWOTBRZmtNYm1UNTNadE1GeC9MV2E1NkhWQTZqNU9sSjVGMXdKVzRhaCtZdnVxRmNsOEpodnM4VGRmakVxMmxDc2dvWmlSZkdMaFAyUHJDWEFJRnZrNENWRHVTbWJhN3F0MU5oVkhGVDY4UXBTUFhGOXd3NUJod0Q2R3ZJWHpWK1dpczhybUtOL1ZaUkVLd0tWZ21qMXRKeks0MlorbG96WG1ZZVNQcVdmblVFeVFmSy92TGRadjlLK0ZsWnZ2OHd2VWNIS1ZPdEdzeTRocjgwdmVtS2grTUFvMFAvWFhRYVo0enRGdEZFRmI0Q0dQSVBsNklLUmRMdmVvTFFvY2tMenRlV1B6UGQwclVieFhsSlZTVUdSVmRRcEhaYjNDZjJ6OFJwTU5zSXUvOVFGTnZmdndTVHFqWjNhSGl5TXFDaFBxZmtseGFyQzA5ZDBDQUxBR1VwK1lKVHdPSXd0N2lXSXVjZ2pNSlVBWDNCWFRGR1BTQWdRVmlzdWZPeEUvNXBPNU5pSW9PVnR4RUlyNXZxelE5SndEZ3pNK2wvQlZ6MUplVDhocFQ1clJSalU1RDRvZ3cySXdiUlB2bE9pV3o3dDMrbEJEUXhrT2pIYlJqZVM1anp2OG1SQkp1Zjl5anBPR2d5UkxMa25mNCtrclBuRFB6QUNPKzJKSVlkUHZCVVZnY2lHajY0cUEwKy9PRENhZmRJUzlxM0JQNnFXNGU3RkdUMGtFZ0l2TTFrWWNFcTNETkRZdDFpYUVnZHlNUG9aeU1sb3o4cGZmejVXQWs3aHN5cE1iRkZod0IyQUlvUnIvaUtJSTBoVnJ2eWRhYXY3STNmRW8yTmV5ekNKRzFIZmI1T1g5VEUyb1FyN1c2NVR1TnBuNmdkVXZNU1BvaCtUNnFmKzY4Z2RMVXd1YkdtWVg2RWFncU96RmlYeEREMkNIMmJ0VWlUOERkdndwcTcxSHlmK2M3dkcvUUdzYyt4ZUNEY2owMDdWVjhTd2t6V0ZKdDdPcm1FVjJmTEVhdmppbXl2eEtjVC96YXM1Q2V0eVV3ZjdGL2ZDUEE3MS91UkhEYnh0SGljSXh6QUQvRmhkUGFNd3F2WHVvZXRDOUtrT1publAzT1lUalZTTmo4dGtodXpqcXJFTzJ0TlBnNlR3ZEdEaU1PZzBuWlN6Y1lMemFuWTl1VC9ncldsTzZ1MXh5ckJxWFBTZkR4akR2Q0d2amZhcG5lYW1KTlJjdVZqN0g1ejJoSUM3RG16dUw5OG9qSEEzeU45Y05hRXd5cUZPdUhhOWxYS3hJM2d1blRMdjM1NEJxcjZIblZYVisrMlJWb1M0UWdNWThtenhBdkNFai9hRWNtOUZBSzdNZjNTYmg3K1NpR0FhVDdPVFdiUG1uNCtLODltdktJN3RGK1RqbVEvTzNLM05mdjI2cmJBOThpSnI4WDlUQ25vM0VEb291allFTDNrc3JFYm41N1RabTd5T3dmbUpYUnV4akhuMmY2bE1tL3hKOHVmZU41VjBMQ3ZNZHhiNXZUUVZJUmdJSGNYbW0vZStaMjFHK3lWcDJtamJlY1ZtanJ5Um1zQnFjM05ZOGRvNWcwVU1DSERTY1dyZDRRa1ViQW9DRjRlL1lNMjJ1NUxKLzJhZnlJenMyOXhETVNBNGdkSVFQRFA3Y2l5YWU5bkVqOFJyVlRLQUVDcEtEdW9BbVBxZzNpWXhXai9PRVVRekZmNXA3aExoS2dLcVpTbmZUWjd5dTNnQ2JrMUVBclBQS2RqT096WnA0Y2xTYU9uSVBqbjEvOHNLV2lBS1pORVkyaUNhdlhmR3RETUFxd2NPMUJOenRTYU9wSWNYek1nTmhZRXdReUJSY3RiRE9GcS92SjlCUmk5a3dhUU9wamFjOUFGcUpnOTgxSDIwRGZXZGIyaCtnS2lZdVFKNmpKV0UyT1VVNmdnc0FRNTZMcVc3cFNFRXZZUEhhZTNXK2lyOGp1T1BkZEhlMWcydGx4WlB6MkRIUklTS1ZMZytlT05neHgzcklMNGdJbVhTanlHRXkrT0pRM2J4UFNzSVU5VFZPLzBpSWs4emtpZ1pJTW1DcjZwU05LMGJsYysydWNVMHkrVFZkSjRMVzJ5TCtJdDFBcHhlTnFOWGtFcnY4NGJFMFBEdTBxeXdMTVg3RVdHeko4M1pYWEczYUVRMk9nWW01ZCt0bTNJRHZKcmtYWlBJdndTOXE1aDhJVXZHZFpEYlZyTWFROURIK3gvR3FCWXdyWC9ha1dpOTV0Ym1QMXh4aE0zbEYyTkwvaG1YenlDanBqQ1cwbnB1Q0tUQ0E2U0MweTFIQU1rSnVWZGtXb3FXWGgvZmRvU2U3dmJWblFpUXZnV1h3RmkxL01jV0ZFU3FyVFNuUVRaRnZQZXo5S3FFeDB1VzF2ektiT3B3Vm1wRTFveG04RHBlQ0FCeHpnTzk3cmFUN1FmR3ZEamZHMlplSTMvYkt0eitIN2V0OUNhZ2ZJd0toc3UvMWNYSWpLbmNOSzYwb0pkSjROYS94bXJRV0VEMEtnU1Z3aU4zT0NubjdFV1JEWHMvSFVZSjhEMDBheTFBN1Y4VUZFZmlBY1N5Y2t0VHBmemRNQUNiWE5YeFpiWWtDbDlmZ21obmRVZ2FmdXhzVFp5RjV1cWlCVzNqVnlxb1VXbnZpR0ZSOG9uRGtmUUdua2JqWVYzRXQ0b2t0Rk9uK2JlcUttNXFKTGxjcG1ZK1BoSXk5cVBDWUt0dktxRXRpVG53RlZmNHJoNkErQjRBYldYaE1EMzhMMkdoRk5MSzFiVnRCZU9NMUhrTXBNdE5nV1d5RjhURWxka1FxZXZkblVHRWV5L0JxSVFsNWNNWmkyTFE3WGZXWU16M0NrdUpldDkwOWJCbVp0MTArRjZ6OGtOWG5jcXZBcDQvSS9pMkkyWDFBSC9YMG5yQnh0WkJ6aG9Gb1RnZHdKV1NRWi8xN2cvMTBIeU9JTmhvQUhOUzVIOFh0OUJYZmx3WDRqR3hYbUhtMDFEem5jcXFGeTJyNWcyNHQyajJZRHEzR3o3aDlxQVdKMWllNTRLcThaeHF3cnU4SFF6Z2VSWU51TXY2eUxxTnQvdGFPeE90NG9LMExrejZKRjBwbmF4R2JrUGFuVjlwQXdxbWE5b0ExVHBsUGtybW05VkwrYy9YRHF2cU5hUVZsUldtVnFwYnpreGhEeGlCbldiSmhENU4zSk54RldGR0JQcFhmRkpVVmo5SDdVUXlhc0tkS3M0THU4VmU3Tmt2NmxuVDBFWStwamJlY2VaOTlWa1NZKzhsZHRLdFRFYmxZazU3SlJhOFQwc2dmK0Z1YmEyZTJoWHFHQnJNaGllNy9hZzlzWmMwYUhveURxUDZwV0oyRmxuNkVnQkJ5VzdFQS9uei8zN09NZi9KWnRrQTRMdVViQ1BkaldRZ3ZjZ2l0cjJBY21NczcvYVA1L21rekx2WkJXTk0wcFR0UFh4d1dOclBMb1o1V0ttQUtYOFV3a0VQdVhkblNWTWwvT2NpM1hwVnhDN2dQbVhONFpHNEdBTkx5Y1o3aUcvVkJHd210OFdtOTFacVRaUC9zd3R3djNtK0FZak81UFRmMklsVmxwR2NiVHgvVnl6d3F6QUtJSUZneWJjeHdmR3A5MW85NmFMYmozSzlwN2tReDBJSEtoTyt1b3RHSzhwSnJDNzZQVjh2Vmh3eTRJaFpSYXZjMVZSZGM2UFF4Q2E3TllRMDMvKy9rQUJnYmQ2VXFEMnZzTlN5UDFvUWV6cXEzNFRsS1F3NlpmVFh2M0VqKzRCNmZRVlBSRDNydmFKVXlYVGtBME50bmVMSG0wbzlDbDlFR0JSZlVOTEgxWi9XMU9ZTjB4cnlINTNYNXphM0R6Z2NEdG9XNEdoUXJIVXU0SDZWL3haM29nQXJ5SnlmYmNtOFkyMzBXNmt4NldBejJwMUkzL0ZGVk14WllWYmNHUnpKZCtjV3c5TVNyVVJqMXZMZ2x6Y3JwaVFGV2ZSUWY2anBJRnFZem1jemkrblJldEI3UVVxSU51YXUwajg4K1F3bXN0NmpTUkUyZnJITlZGRWxubkRtai9mRDZBZmZnMGFzK2NQeGlzeU5GK3FzSW5MSkxhVldrSVBjUjFNRitieGdwdE9BdmJ0ckpMbitVbnhiTTZITS9Reno4VUtJN1BWKzdmMjlQWk1XL05HMk1DTzA2Ti9EWDBCbUp2alVOTFR6TmlUeWJKdHpCSm11TmRDcEdnYzBSVElmRkRlc2c5N1lWUjFkN1hXY0xLOWhjN0ZkcVI5dHVFZkJpb0hXY1JXTXVGVzlpd2UzL2JibHFlenZwZGx3K0FqeTRadStTZ2VrMEJpU1JzMnZ5R0FoYWhCZkdlYzdCK3ZaTVJzVVRaRnZHenlLTG9OaFdETkxmenNlWXF1R1hCbnJLeDhiSlpzMjFGanpVTDhqYm13MnNWSSs3YW9IYVZwK200WjhWaG5jYy94dnE3MGI2dXRIOXZyRmZ0N2F2ODNzZ3ZxMzI1ZnQ5TmI5dmJiZlY2ei8xdmRCMzI5blg4T2l6aHZxN29QMjljbDlYb0dYMWRnZS9WMUJmcTNUUERYY09taTlyRTkxVTVCaG9yRUN4ckRWWExnRlUyWDhFMkJrUGFSM2xrbFZMK2VNNnhna0tGZXRpV2poWEwxcW1kdHV2VHdSNlZXSmNacHRJK2ozakxWRytHTTZPSlc4SXZ3WUZIeFZsblJvQjVBbEF6Vjl2QktjdVY3THROZUJJajJSKzQ5bVJkTWNkT0d4Z3dGNlV1b3Z4TFIwQWtFcklYb2VXcVRFZDc5UTBIYWpnZzJmUVZlMXN1bTBuSFN6ZkJNa1hUQUd0K2R2eDlPSURodWQ4M2pIR2xsRklrQUt4NlBoTEoyYmt0R2JBdmZtVWtLc3pxVE5tMjNkSTgxVldOcEZBRmJ2c3RhbjZmbk9CTDJxanFpTXgwSjBONUJ1bW85aUs2SDEyT2ZhNHBBL3JhbTZRR3hnZUVNSkhrd24xdVpGeDJaUW50eS96aVZpaUxnVHdsMCtsdUN6QldtQnJmMnhZQXcrbStTN0gvaWUyK0JSVkhuQ3p4dUhvV1ZBUDkxMGRORnY3RmV6b0xML3dKWENMRGdWcFA2QnIwQldORGJIM2U4WHc3VVU5RzZaWmpHbzdwaDZDUGgxY3JmQUNnWXBmWlNoeVNkSTdSUzZScmpFSjdQVGxFTkNjVGE2aW01SGxZYjdYcS83QlBCcVNqQWFIaDMrdXB0YXFvVDFuajh4NkwzdW52OHhOUURmUzBTMTFibThaYjF1NTNMVko2WWNmU2xTWWRaL3JPbWZ1YXU0eHF1NEM4ZWZIaysvdk02YTZCYWJQd0dydjFMOWVhdnFhWWRjbndRcHMxT2NRUlpUazJrTENMQk9GeWtUWmlSV0pxa25qSHFGK0RxOG51aHZSaHdOa1NNSGNKSC9lMUp1aG1EZnBNMEZxVHBHc3dZMEVmRjFUR0RybEZ2aEhsK1AreHVwMHZqSUxnMno0Q3gxRGl6SU5WcTU5Tms2Nk5aM0R1V3ZmaFhrM1l2Q1czU0FKeFFTVUhOM1VwbzhuNmlRZ1dOWFpDRFFyd2FxMFVxWFdFT1NSRDVqNGoxL01SZ2ZtTFJvaFhxNlVyamJyM1hyWi9rMnZyZk5UY0sxU2VGR1pKaVhWZVlhcFVNdkorUXByNGFkcVg3Mm1ZcnE5d0NYT0lQTVRJb1RqK1phcUxwV2QxM0hZeStkclBxVE9xekYvNUU0VisvZldDSzgzQ3k0M2dxZXN0eUorNElqb2h1QWR0bUVObHN5dzNoSUhQQ1dHakVlRDZ5RG5sRkR6UVQzOFJlalRDWDN3UU9sbVVJUkNVbE4ya2JPSFBXV1hDTjhVeXJaM3FIUXFvRkhvTWZJY3lRajkvOFRreFhhL1FWV1RXMDRobXVMV1Erdzh4N2hnQXBHVkJYcXlUTG5QOEtYNGRYMVlVSXdObXYrT2U4QU5JMGFoWlowd2h1VTdlcy90K0xEdjJ1RXkzdzFQbVJxZkFaUy9yeXU1eWswd1o4ak1RWnhXNVcyZncxSTJqbkFSNFFEZUNGWW1zOVp5ZXVBakhVd3ROMFFHS1cvMDFMbGRjMFYzdmx4OEtFOERpbHdlQyt0bk8vbzJHemNHMWRVcGNYbWdtcVVXbTNIci9lblZtRUlibjR1OHhTSWdZa1NxL2V2M2dDSmhBVXpOeGZOQ1drV21BU0NJRFhldVhGMFhPK2JsR0w3UHNBaGg4c1FoU3VBNm15RGw2ZzdnNGFxRHlmWWdrTTdySkdqRk9LV1pCbDhYRTA4ZmlhcmRUUXlPZmdKamNaRzFoaGY3dVhQQVczT1ZuUmF2c0NyaWNMMUUyang0TTRHRzhoelZGR1JnVHRhNjg2RXFpMUMzMUFTNCswcWZtK1lKZ0s5YWVJeUpJNGR1emY1UFFmRW5nSlZsd0E0QlZSbnltWnZwOGVaWFRTUTl4eitOVDhkeVhVbGxsTXVYbWt6Z1FTVEhXeXpQTWFTNmI0NWtISTZjV2o3ZzZ3NlBMaFJPRTdqU0hTd1o3N2tnaHlUUUtJN2xxR3ZQMWpudlJWOEtwTEtFYUh3bmFQNlptZWFJQWZlSzFRQWkyU1hNSkV0R05ITmY3dDJSSGNlU2JZUUk2T0JDbnYvWmw0SWwraGNBMmhPQW5pSDBNVmdZREhqY0MxVzNlUGY5dnNJRC8wM1E2YWwzcmJxSFMwTUF6dzl1N00xOUtDbEFPanJtdlZQU1VoYXVKVUVVMFRldEpUTGFlaDZ0aVNzcVcvSXFiSll4Y25KZFk0V2ZYckxhYXh6SjgweEJsT3lGTXZJTFFEOTBSbXRIWEFoaVJxWXRxdElXZ3VHOGF0bHk0Z3RVYVMzemFhWVp6VmM5Q29USGwvUG5zRjFtMUFnUHBJTWQvVHhyam9kaVBXR3ZVUFkyMFlLbkFNakFtVW1zZHZld0IxTmVORk81bEJXRE9mQ3lYU0FOQkN6OTUycXk3a21KbGRKVVFrcEMvdjNHTVUzaHE4OHFETW1HWVdyUjlUUk53Q0FRd0pIQkp6V3E4THlDVFljM0RYUk51Z0JtZkUxbW9BMEt2MTdLOEYrZ2l1cHRSMlFtSGpnaHRFZjRkN1JXUnhCZHpYcHBTWGNza3VzbWV2OXc1OXl0MlR4akRXV1Q5ZG5PVlpJQWNRUkdwWjUybnJKNk16KzBJcW4rVnV0T1JlRU5IUVFJdmVyUENFeDNZa2puUjVLRFUwdEQxUExjUitncENhbE81R09GcXJqcUdNRmJGbTVEMFpIUlVNek8wYzRtdUtsbEtVOEhoYkl1TytkNThFQWlYT1FHQWQrNUYvSk42MGVUV3hvaDV5cVJ1eGk1NVlHVGc2cllQQzVKYjZiOEtZRlJwemJhcVY5LzVMYW5YUFBTRXR6V0F2dnB4bm9YdEs2TWdqeDRCWitYdXVNY2ZlMkp1K2lwU2g1Q3V5a0VYbWQ0WnJ2U0M0bGdIZ0hCZFkwZStxZFZUQnZKM01COFViVmFMS0xHamtIalVGZ21od1VWbWlZZW1ORkt3aXF3UnVCbVFJcDJoM0M0ZG9uOUJ1ZktteklyU2loMVNnTFlUTEZMUmd2Z0hNdkRyc2dvRU1SUTAyWjh6TzdteG45R0h6bm9GdWJUWkVHenVJVEZpL01qNWZ4MXEyeVU2VlZuVDAyaUZEZjRWdUVLbUc1M0RycDFFMnVKNVJYL2ZQbzdhUkdiKzdGbW1oT0VzTmc1RE1HVzJZZFNYK0VlS1BKTE1CRHRCaEZsRTZkZDRXTGpRWHNQSXU2Q05xemJ1L09hdmN6aDNBMUdoem9LL0tvN2Zlc2lwRFBjenpMRnNSdTUwbTJqVUlNZzY0MGJUTm9wWVJKblVXMXA2WG9RWkd0ckVJQjlyYk9BeVJxNXR1VVpYRC9iRkxkelAyMnBDRHBjMUFwN0grSWlpTTVFK2h5Q21nNCswUmVwa1FoV3Vsd1hRYTJVa1ljREtCNDNlTXpqcHZXQ2tERzFSUzFOZHZwUGRBcmRGS1pEbXdVam5YMExXMFY4R0RCUVdSRU1zMjFQOHduNDZaTHFiSVpUNVBaWDRscmo2ZXlHY0RZbHcrRGtWSzREZk1OTUdGSEtsQjRKSFZnUEVHNVcveTVBNUt4dGlldHl2MXRBaWU5cVpzVTFVZ0NrM0Q1dTNkbmhnd0JxdlhGQjQ0Qnc4YnR2K0hwS1hVMjA3MnAxRm16N2dQK0k4Wmw3SXBRZGZUM2g2UTkvaE0yUXdIZW5XeVdERk5EamNEcitUb2xmODVTOXdSc2lzWmVUS1pmakFlNTFzekhFbDhpOEF6WmJtZkh3Z3RyUVVyVmNvb2ZiODZTZkZtWERSMWxMeTZPV1JBck85bHErRTlKUVdURHNqZ0FZdnh2emVXTGlQRGdGVm5lNlg2SUp2VCtkMDBqYlJOaGpaTGVLcmJRTFZoa1M5SVJYUm8zTEYxOE1tV2JHZW9KOGJLa0c5SVNkOCtOd2lXUXJWR0JyVjlNNG9VVVdmTlFUaHE0Zm1xbU5mbWczS2hsdkhwSTdySUN2Mzk5VWJKSENMK2FMUUxSamlDOEZvZWsvcDRuZ0w3ZUZBRGtNV0gzbVgxbmhrcXlmWXZIelRacWZueElsbXNYS2dqSm4wRzVOUmNLQmRteW9taTlQaW5qM01XWHIxRkNYbkc4WWNYWWQ1aUlqK2pQSjZVVnNzUXkraG9ad2tVdFkwWCtzTnpoL1U5WGwzb3QyeVBZYVI4bUtUbDIzSmlTd1B0YVp5UnNoZnd5c1pXTGlXNWYwdkpZWjc1UWxpcGtFMHVTU2I5QmJ6Y0Q3T1B6Qi8zTDBaaW5CaFhnWnJEUFpPdmF4MjFOTG5wbytGd3p6WlZKVUh4dzRJN1kvSUZvNWg0MFVEVmp6djRSSCt2NmZvTDNTME5xYVc5SHNvc3E2MlkyTUlqV0w2dE56T3VuQWJpNkR0Q2R4V2daenBna2RFelFBQkFMeFB4T3VBazBVL0xKRGE5SjlDVW1MMU1IaWlQOGVjcmZ0SUs0TFJnTlR0b1pVQWpCK1BMeSthMmJ3eWQwWkQrNWJIYjVtRHNnajVMVE1CSFRHajkzczgrZFFNWS9nTU5Rc0dVb2ZYQnpXN3d3N05SdHRjNUJmUStlMzNqUmtIb3AvM0J5OUpJSks2VEl1MlVLbEFOcHIraTZQam9aQVdqRnk3UkxWOGQxQnR2V1JjNm16OUZuNXZELzAweGJrYm9LaGlHR2RnMm1JNXhJbWhEZHRucGZIdGZXWnQwKzd4Q3V1eURPNXBsdFM2MENvdnMrby9CTjJVWmlvQ250TWlmVmJMODlsZXBVaVgxdUgvTkVNZWwzdldWYlc2Y2krMEVqODl5Tjhrby8ySFk2ZzhFUTc3dVg5UnhwdWZmTlpjNDAwS09kVjBsaUgvUnVUbUNNTGlTZ09xL3l6VUxVM0xvUVZ1UmZJZ1hjL2x0elJHcDlhZ3JqMk14QVRJR2V3WXl5SXduVVFlWmtMVlZ2bGhZeU5KQWhNdUdwL1hMT2tycGFWSG1pVFBEYVdSd1ZOenFQOE16c2o0ZDl2OG8rUE1TUS9qSi9KWnRETVBqRGZmQlRMSlpFYXE4VHZJSDlxejJkbkxUU080ZmNVU3VISS9XNnNWVEpZUEhiV3Y1MlZzM2czSmJ1T3grcjlCRjBzNGpuTk8zMDgrLzFhL2NLejFwcFZkTHoyV2w5Njl5MkROS01GVHl1bGV6MWRmNXJFZFlOOSs0NkNBaGcvMkhrcTdaYzkvQ0NxaGNPUm43aVFwMk9zTUZWaCtBWWhTVU80TG14ckc3S2I1YkZZNGRyQVRQclNBQ3JmYURQK2d0dDVmRUZXV2dhRi9kNzNHemN3VDcxZHZkd3RvOWlrVlNCcjRwQlpWRy93YUNKZDQya3BOeVVoOFh0VncrYWZGNEwzb2tPT2pZQi9UL2Yvb1hIRmxKTTRsd2pUVk5ITUdmVHZaLytZQkd5M1d5VlFkWGZPZk1LODMvWXhoODdxVjNjMGNXVzV6d2d2aVZzYVh0Z2hNanQ2MGpzNXN6M3M1Wjlxb3Y4ekkvd0xxdDBNQnpIWUducmVEVUVXWHRGSGNCU09ZU1JJK1E3dUg0eUR4b3pDbW5kZ3hGQitlRkF5eHBsR1dVM1VMRTBKdGJ0ZGxZR3RxbWlSTHVQVEQrVHdRbzF3RE0xS2RIQmlXLzJyV05UenRVNE1CZnI4Rzl2SFE5MGR4aHhSbXErSjFnVGxwVmZoVEpXTHdHYU5FRCs5Wm1TY1FhZWRsVVdYSGgxbGIraUxmbFJReDBRbW1namZ2NWZ3Y1ZJVVA5UGlDd2NIejNYd1ZxZEZVT3I1K0xVaEFFWGgwKzVlTEJXNWJVK2VadWdQbGg2KytZNVlpZ0hzd0FpcGlJRDhuRXpDWkxzOHBOaTZkSWg3Q0JmQ3dEU0YwZTJIVHNIYTdaN2ZwM3krcVZMSUtoL2YwN0xTNE9VVzRRL1lvZlQwSVlodEFvQWU0b0x0Z1lpV1NUQy8xdVJDZXl4ejBCdlJKRG0wL2xJRnZScVVsR2d2QzBDd3JQWGl5QzdBbjFIMDZ6OU90MWhuUi9oQ0dYeEU4QnFCb0hnbWIyc1VtbmdWT2pBZ3Racks5VncrUDIzcVQwZ3VFclRwREdraEVDUXlhMGFJakdzOHZmL05PVzF0NUtSYWc4dm5TVHFJcWVBeHVNZFFDby9wQWhTZzNOenlJTXhQSHdIdFFJWHRPWHhqREkvck9hM25SWVFieTdObEhWcmtia2JZYzdGVUFnaFZmdTgycnlvNHV1OTdpUUI1VTFZaHdMRUlTTS9rb25vVzRNR3RyY1pTemRhU1U2dkszMFNmMktXM1ZaS3ZHMGsrd0FlZUNJNThSVG9VczRzNVhFMjZXRnltYzd4eU5DSGg4SVh5SEtOZStRNVozanYrUDFlZm1IM3ozTGZocHJoK096WXM2RjM2TTIxcjFJUHNQM01vRFBkWlFleVc2UmRLNnEvSkh6MkRUUTdBT09QaWxORjRVTmlEaHEvTUlaMFQ1RWZBTlBURHpVcmdoMGZMYncxclZLQlB0dzVOd3NJaHl4cC9jN0RMOUQzR1lnQW1YNkdmbXExWGtJcmxqb0dHV1BYTW53VGw2SGdjek56clhtR2lxQVRrWTRQRG9lTXFNeUJKME96VlNxc0VuL2VaQkpXRHNHaFNXOXA5SU1QUVdxNXZneEU5MkxjNENPUHp5aHMyV0N1TldLWk0yNmt4VFNYb2lOaWszYzVINVNnMkdHdlp0YmVpOHVBMnIrcjlLZWZDVWxXL0RUVHcvMi9iK1BtcVB0TFh1SHJZbWdxaEJTNmJraWEycnFNcVFTRXp1ekIwM3ZCMEs0VzY5QWFrRUhZdVBFdjhzSGtKZW04MFBrdzJUOHNCZGQzSWlOdlprbkwvd2JTUUdKek91QXNzZGI4TWRKRFBSVnhyMjVYVEx1TkNQbXIxbzJ4dFM5NnBWQUlhL21KZFhwdFRsbUZtYkRhVFlnVFRIU24ySUdDT0ZBd0d1YThrbVBoekpoOEZtMGQrVzVzc1hXdDhvNG16cVRiem5ubklWOElYd0YyNVlZMnFTVXV6VjA5Rm45UytZdFFUM21POWx6TVZVVXg4T1FhL25ub1pTNktGRjgranlQT0ZhRVlJd3lQL25JTk5hb2h2TThXM3lNSG05c3NjcDM2UzFPNWpSQ1NybjhpTUxHZEdmTnptY3N3R3lCeDZFRTF0Ym5zallDQ2oxSGg4bUd1ZnBDelJMNk43ak9EblQxUGhsTUhXUUVMQXVrZzZzRGNOMDk3ZU5WeEpjckVzb2pVK1NOMVkwY1djUXNYRUdrSWRNdlR6VGYxZGRiajBndG1rRGtwVlBXOUUzTDRDUGUrcEI2OEhmWktNNFI4dzZSMWNIdVpqSzVMUmZBbU1SZkh4RG9xbHFHM2w5eUxnTklMVlhwTE5LclZLaURLYzlLZTE3Q2ZyL09qcitmN0d6VmdJeVpTRnd5am1nQTA2dmlxK0ZCYXY5QXJNMnJtdWNjajRmQnZHazBieHJ5dW5OWndyd2ptRzVGQWJLdU15cEN2Uy9jeVYyci9MMXlKV1kxY3VFTzJYRGptaTFWVG5TM05IMDNDWVYyaDg0Y2Z3ZTF6UnpHK01CcjNLL3I0cjI4aWJtSUZOeGFXcXlaV0JsVDNVNEFFb3VJZG5PTFdUY2xKY2tCcDlWYWUrWXhic2NHbE9sZ2tRekxvQ3cwWnNhM2dHMmtNcWxONUNTT2ZWaGNRTjEzMGZ1QXhSMmhGek4vcXFyTHhMMXR5VExqN3UwRmFOendwYjdQOFdxM1RmRk1lZFJ2Q3JVL25iTTY0SVRBMXVKT0EwdUVBcURyQmM2VmJNOXVQZGxrckt6RzJDcTRERXRBNUhNR2hZcjdMNDlXV2Fvb1R1YTJEL1ZvL0xQK3l6cUZsVG02WXU4NEhKckNHSUEzVVVFMzc4bXFNYm91NVJMaExHQjJCMVNyZVI0STd6eFIxdm1lTEhkYmg5YkhMYWFsMjk2OFR5bGhsMDFEcnNaK3ZPYkNQUjJvK0NZdU45OEVyYmErdCtnN0pBdlhYVWl0bUFsb1BFRklWVTFmVVQ1S2J6MjNCRHlMUUlzZ0JXMzhhWDdKTXd1aW9raHZ5WnBBdEpUM1dyR1ZRR1B5Y1dwVnJubFM1aWNzVkk1ZThFcG55NEZsb2JBVS9jUG00aGEyQzFaNzJtd3hvbjU2d1Q0NnJHZk5EMjFWbTd2bkFFbllSY3hhTTVlNXVoZk5LdXltazhhRjFPalcyaDdqSUNXMlA1SjBWMFhhdVpnaWc4d1dqOVR0L1FXbUZ2RGpzU3RvZDhabzYxUVBzclFzRmtXYmRoOVViTnN5cEJWVGlwY1pqMnNLTnZnSzFLWnpUb3ZMaWFDUE9CL0R1c2EwR1UrRjA0ekZIQ1I1ZXk1cTBidjFIdjh3bmpxM0JSWnhjUVJybXZFTTlyMjl0Q3dxSUY3VUZ0QUlQVDJqMk1YZjRTTHBJc01jNG9vK2ZiM24vQitncFJxU1U2RkNGZ0hmWTJKMCszVlB4WDFZbXB2ZkhLL01aZk83RGNKNHVybHpEbHRaTUVkUU1KRkZweDM5R29EaSt1bHQ0eFZaYytrK1JVUWtCcDNqUW83eFNJUlhQWVFHRmJDNlVWVnpjb2MzRXBnZDhYaUpuYjR3NmplZmVZTEVyVi9mMFlCZVZURG1KNGFKNW5ZdVVNdFhSaGowN3F4K2RvWlhJNzVnSi9aUWx2UWtlS2F0ZFBvcXlOQzNXMm9kR0c4cUt4blIxbytEanlMU09yWVUvd0w1b0lQSS8yNkQ0WldjN2FLeVhSWFRSbUd4VThueXZzQUR2ZWlVWExzc0JqU0tGTHRRQlNOcW9WYmh4em5ScDBYRlJRRlNHTjZQRElwODZ0ZTBTcWphYm82YlJhUUJubUFLcGZleVYzOXR4V0Niam9QbVRDZUhyWUljZ0g0a1JrOVJ5SjVZZ29XWUt4Y0JYT0g4VFdLOTJFYkhYam1UckF2aEkrLzExQkVLRW1NSnlWMW9DQlBHQW1wUzVPN28xbWZod1dNUWxWOFFUMkNyTjQzVzBZU2VpTkxiSnZFVCtVUVZYc21SR3NlQnpqMkM0OFFyZFQrMGVGU1FXbERsTlR1bXZWRWhabUcyZHdMRjJjRkpWa3RDMk5UVWlrT0tIVWlIb3dBcEtTWjY5QlpUZmNramUyZm1oTm1xc0ZOeUM2cEJab3R5Z0pxYnUyVm5MNTU2MnhQRGY1bG1NZU9GbkY3Vk5SWWI0S1dFL0NteHVJYTJQYnE1QUIyQU1kbjNabFBXMHV3U2xLSUIzTXVZOE0rWXpPUUVRSTIyczZ1c2RIMDBubkpKVjJ0TFE5d21DazBTMVVlY1g1d0lUK3V2SldQL0VqUEdDVXZrWDMwUk9QOWgxU2pMRXRiSExxa1NCRmU4eWVUUmZTTEdnUDF4aVV0aGQ3cUxCMjgxU0FmdDRxOUhNRlBldTVTWEVtMkYrbVhnSmNrUUxUWGJkaWNpdnVPa3lBVVBaRjJYeTJJbzJzbVRBNnAzZGdES1dvTXN2VXMvY1hxa29CeHVISWhHZWpLZ1FaZnNPS0tHYXRqMVhoZ04wVXJkT293N0I5bXVsTFNzOUpiVk05TWxRK2lENXVlcE0yRGRINnRTb3BvZmFQOSt6TEEwOERGb25wTkMxazdzbmhBSy9HZURkUjl0aklaY010SEx1OU41NE5IdHFFSERxdmJqbHIydG52YU1XeHVXemt3Ukp6Vk5LQS9xbVdwWEhxd1ZueWtzbzBBdFdCRGMyYmkvdnNsRzZ0My9IT0w3VFdjbDU3T3o4VlBrd2hRRTNHOUVSTnlXSDl5TXBJQkdoWTJ6dktsczNhZEdyRHp0NU9pVWlxVk1yMXdRTnlQMFkvcVk3RmxWTUh2S0QzYk50elRyWWk4d01Qb1lUbUt4R0lNZGZUNzc3bHRFNDZyUWltaW1uSW5FS0w5OTNSaEowVjExY1l1RTl0M1pZb2tNQmRZU0QzczlxK01uS2VGR1N2WTNiczhtbjJ4eWdzdHVLWWc1ZTdhbnpOVUNKakN0RjdwZ2pzdXF5NTFGNWRXQ2VLUllaa1RSSHgzbS9xTkN0bW1iTmhaeW4yNHJXaW5OWVFWWm0vRHpsMEp5dlozVUhsMlBqUXljQjUzOGNsZTlQcHZ6Q2o0bXRaajVGZ2cwd2hTSXlOR003RkhxdXNJbWtlMFh2b3F2S1FVMHppMWNjVGhheEZ1MzBIVnR3Q0FhWXdzYmhhU1BUOU8yWmxUb1l1MDlsdFV3SE1NMm9hTEs4b2FMTXpXMzlrT0lPQ1Y1TU1venhrcEJ2ZVlScitBSDVmUEtNdG5JcEo1Z3crSWFqRzMvS0dDMWFnd24zc1Rlckx6OTQxWWVkSW9BNk5XRGhWdnpsRmtCbGR5UlhGNVc0bUtCTHVkNUs4U3ZCWkZhTGRyd3pmOWhrWFNFa0thOFdZbDRhYVIzZEVZNEFONG1LZElPMHh4NE9POTA3RTFpWGcyNFM4TzYwUEkrWk9PQTYxNDZGbG9YREVzd0tyTDdPMVZFQjM2TTFDSlVtdmVFUFNWUWJ5RWpwZkp4NVhYS09HR1pac0ZYZEpRMnZsVmxkc0tKV0FmaHpIeEJxeUNWRWYyQTBZNmFyd2NXVnZFZEZCblhTTTd3RE9PWE5LUVV1VStCN1RzZGV5VEh2bDZzMlJSNURvUFNQb2RMVDhZaFFvQUxKdldnWWZFOGd3b2JhdjJkcWN6bExrbTNVN0U0MkxyYVlHMXFUZDlOUU84K2NKa0k4bzVrSnRyUk9sWXNxcEJ5OWtLbXBGK3lyUlN6NFJGODBybmx1MURKd3JueTcvSUdjRFgrS3hySEdGMkthbXExbkt0ejBWcGVaNFVtWTk3RWtOWGtqaGI0OVBLQXJ4QjNHZGkyM2Q5Sy9zOXVibnB1L3BzdE41R3pGbkRKU0V0emhodldFVFRyRHY5eWc3enRxd3lHdm92Rzd0WXkrVnJURDJNVHgvQXFRNGEwUmZXdUJHczFSM1NvWm1ZcVNGblg5cnllRFRTdi9qNVROeDRLVXlnY2sreTBUVVNkVFZMOHQvc25KN0NvQTlORkJKa2tVdUZHdmtpY1AwQ0N2ZS9YaTQzNlhJTWcxV1JsKy9ZZG5yVW5TMi9CSzRmb1puYmRldGtHZm9YMHN6RFZoSHlIMXUxdGhkcW5FRDRQOFJGVk5FY3l1TzdmcHVDTStZbjdwUEVkVmI5SU9qZUM0TWN3RGJzUVJET2NmeGdjbkdwelZtcWRIc284UDUrbUlubkQzb2hRK3dFTmlCZUt4K1VlQ3c5Rld3MkxVTE9yU1FEN0ZGcW93blVNam9JZlNqT09kUkErRzZvdjVqM0NVNXFIRmVSQ3daWnNtVlVnMWJSMVIyUnoxTGkvSFNlYk44RTBSQ1ozaC9WZHh0RUQwb0VLMGZ6a1ROOHQzLzVMM3pQYU1KcXZJQlpEZStwZE11VjdLQm4zeXlFSkZHZ2tZTTl6eTdESVJ4LzYwSWR5UGsyWFNYR2FNMlFqS3Rla1R5UGlpTVM0SVV5LzZOQm9Md2lTM0FWOXE5eTl6NS8xWTFrSllEL3BGMHlES053SUFEcys1UFh2L0tEQXJpMFBOYWVIRjRmbnZlU0VJL1FZZ3N0OE81UVYzVkxmWVBBaUp1dEFlc0cxMTlIWTJlZ0RaTm5RU0NpcnprSkl4Uzd5SE9BNXdZR0F2eGpORHZuSEtKSHpPUDhhRVI3czhTTE0wSkNCcXJoWm9ZY2gzcnA4RC85eWc2MFdCY213M2tzZC9USHl1RHF5UlpKUEpzOG11djVoaXJyTTNZQjY3bVRJM1ZjWktDQitKQnBYYko5MHNpcFB6NHgveVpCUVRWWDlyQ01hSWdlYzczNW5zT0JnSFdHMlliZzNqRTNib1pHR1FtOWp0cnZJbzladTAxMFFyRDJQdkpPNmg2OGI4d3E5TXkwS2FKYTREUnRTNXZTUEJOQjBRZFZMN2JaQ2hXbFBiWUtzY0d4YjNUYUFjRGtoTzVsRzFXek80L2IwbmJZS1BPV2xXdkZQTlhmREhVRURqMHlNMlhJaXhYU25YZnBhb3JGYkNReXY0MVZKUm5CaUhrbUxmTG1MSGM3OU5wVFliRWNJOEd2dlFaRlJpdjcvTmtTa2hGTTUvakdQMzYrVUZpQ1N0NmVWVmpJVkd3alBkTXZRRndVOWc4SHJvRTZMZTl4VnAweGhKclpwemEvUC8ybFRqdFU3MDViNG1HL2NmSDNFWDVIamxaMkpTSC9lWW1Tak14V1BRR0w0cFRsK3N5YW5Yb3IwQlJUVUZZV1JnZ1BmaEhqQlpoSGNoQVBkMHVsWUlzdWtKdHFOL1JRc2VGUDRTN3BTKzAzUDNNY3k3Tm4yM3A2ZVhGRHIzbm50ejZTZzVDSzFRR1d4SjZXUThQYmswdXBLMEZRdDZzTUtEUEZneFVPcWxQZ2xiM2RSMjhzbmQ5ajVIdytKd2xDZkFmVFlwUlJtWDlxZUhEN3BEblA0cHJmTmVLQm1Xb1BEMzR4L2haTzZEa1JaMEpPemtRa2FKTGFVM2p1M0RPaVNvNWpTaU42SkZzRlNvejFzakhKN25GUVdsdngyemp5QUtFWTI4elJoOTE3bDlpUkErZ0RORlJDVC96b0hTMkdXUllOU2JYdlQzd0doZXFOSWVGZUlnTGVoQ05HL2lDZHdRNis5WHU1VTNicUpVTEFINklYcVVSYVFqWnRzYXAyS0JmY0V0YzM5Tml3NUtyakdpRlllME9GYi9wenlxZE9DdUNOTTFCS3V0OWUreDJFdHR5di9TZnFKOTl1NEZzL1dhaGhoWXZnR1U0MTBWMGxwd0pCaGE1SUFFT2lIMmkvMVYwOSsyQUVzVE15YlNaZEtEN09GcWpyMmQrWHNsemk0aU00U3pGbjFKQTlPc2YwRGhxamcycDVJem9HdTYwQzFQT09pQytmNVBZVDg0dCtWNVZvV0RWNzh2U3BLQnU1UmVaVVNHQmtLWGRqWW5pVUc4SHZYYk80OTRHY2ttOVVWSGk0Y3gzNHI3ZTg0UUhWWHg5VW14aTBKZ0dySjhDcXVQajYwWHJ6aGFDNHFQOFo5WWFGazNCblNjdTJHWE5wZFdmbTRaN0FBSFpEaTE5Y0s0T0srb01PaHBoejRmVkF4YlJWRjZEcUNKcTVjZUU3c2tqYkFORC9Vclg2V2YxeS94N2VWRHJFWnEydGhuOEI4VkdQS0ZIWkgyanJMN25va1hhYWRzeWtJMUNwb1JhL3pteW5rY0MreHVoYngwZjZGdjNIa1M1R2ord3VmUWQ1VUpEQlZDZ1I3eWR6WVlZVnY3MUpiWXlXdUVmNSs1Qm9CN1Rjbm9kL2Z6RG4rS2tBcGpHbkdjZ1liTjRNWURFRURkZXdtQTIvMHBoVE56cjZUWEh1aTdCaDFLUHhGcFFseG8vNTJ2QkxvRE44TFZsWENrTzN0NFkwcWc5T0R4L2k2YW5RcVdvOEZjWDhQeWpFOXV6amFleVI3TUI0bk04UmswMHlFMUt0dEovR0QzZWMvd29KeHkyRkZiSnc0TUF4cUdFSklPRzZTOGc2ZnlSVU15a3E2bGhUekZYY0FSUDhoZlp5eHVZWVpWR2NwQjFlRytXaGNhYllYK0FETk43anlJckhXV0o4ZXNBamxUOUFjZFJxRlFCbmgrYStoai9QQ3MxMDF0cTJUem41OHA5RXh0MHp6S25vV0RLMFhpZTMvZVpZYlNuVXNKWGwwdkZJUCtCdzJ3RUtkcVRHNndJTUU2ZDU5SWRWbUJxaStWVjlNOHgwTXRJZjVmMURzSGZYRFYrRmxROHJlaU5HVDR1T1FLcTJzS1BHUTJVY2hKekswMVpCdHQ5T1dCY3JmcEpaT1J5MVdRZFFGbE5leWMrbDA0TmlQVHpvYVVuYmp6OTRaVWhJcS9aUWNNeWNyNE1JRDU4eUVnRGNoMnVCNUcraVdoc2JKb3pCeVp1Mk5Na0ZaNGZWL25mTGtrVmwvWWNLUlBna2xiR3d6ekNTaFVRdEc5QUxFYTd4TFcvR0NtV0ZSK0J1cE8yQ0QycXpSU1NKb29HMkI5Vm5HU0J6d2swRDE3SFRuV2E3OW1wRlhGb0trZ1dqTmh0a0Jrbnl0eTU5V2ZBbEw2SlU3SzFBZFc0cDduMjZraVIyRFdFK2QxTytBaDRXOWs4QjZqT0VOWXR3eVoxbWhDaHNPT2pKSnhFMEJaYzRnY3JpSW1WZnNka3FsVm9sYzFLWEVXZFo2WDhBODBtRHJIZFZ4VkxTNEljaUFMRS96ejB4Y1IvakNFMEtWK1BJSFowYnZGSmlEbU9JZ1VTaWt1QXpkdnpKRGpiazhpNjRsb3kweWlINUFHYWJsbUVOTTZSSENEVFJqZFlCS0g2TmphOFREbWNyc0hQbXltYUx2d1VNdERhTEhMby8zMDdZTjRNRG1pSlhqWE1pSG9YaDB5NDJMSzNGUStkd1ZJS2hPcUFML2FDbU1zWFNXOTVMWHdIRXJYbWtwTk0zdm9ySy85QnZQZm0vWmp6T1ZOUUVNSmtPRXVSTmltSTlGNEhFZUtxVGMvT0M3b2VOS2l3ZTA5ZEwyc3JlTUtxSGMwRmNtbUEvbjJUL05nTUN6enhhaW9hbHRoWWdYZ203Q0FlYk43YllvN2tXTXo4WFg4TkZ0c0xES3Bjd0hwekk3TzhNZzFvcEJjYklQbzNhWkZBQkd4TVFITi9rcFVxTnY1WHYxcFdFS1ZtLzk4bGxpZlRTdFZ4MWFMSlFuN1lmM0ViQzljbmYyRHg2YkREb2xtN210V3JpZU0yNVBiVUhHNU5idDd0UkZJbnVKQVhWUVZHZlpmR1FmV3Nia3J0NnJ2UWhKOTZsTmVOMzQ2RTB0bkRuWGdWN1lneUZDc2h5VndOQzR1RnFWKzRUVVlWajcvMWtVamlNQndCTlB1NklWTGwvc282WDNMbkV4MGJnWWtNSW4rZE1YMnA5YTc1TEdTd0Y2cDJBQmMzbkUrOGZYb2Y4YWMydlFmOWRVOFhBMHNoT2J1aGhldmNIK3MrT2Y5eWVFQkxMaEduMVVtWXlxUXlBbGsyUEF4STdtWEdTSDFSM1BYS0VqbXRjVTJKRFM1ekFxRnBRZTlNemFtTnRSc2VRTkxJblZISnlFQUU4ak0zY010V3BzNWEydW9Ia1Z4a3BaUWVncDZvaFZjZ3ROWWxXTy9CaUszMUk1N3dta2N3U0xxbmk0QWJtWU0xREZqOWtsMDF1NWhBRWphdVZRNmhSNjlPSDJLRktxUVJFRXNlaWRzdmJhNjkrN0tyeEF6MFpPRzQ5ZW5zRVhZQ2xwRjlPSHBaNlRzUG1hejdPOVVPa0NYUXV0TEV1NUNUc21aYkNFWmRydnpTU0g3M29OQjdWa0xxcGcxMExuWGxzdis0WmlZUmZXNFc2MUJtQzRMbzU0N3dWQmF1bHoxaFB5ZjIwc1FuTkIveTdqZ1JWK0IzK09sd2U0QkV0VkZrNGtIalRUSm1zUlUxd3QyVHBBeDAvRU5Md3ZlSjF4bmZkSyt3eXF2c3BJUnp4V1RPd1hWNFRmQmtiU2J3K09PM0NPMFRXZStZM0ovdnJTTzF6TkFsZTBPdkRlNVZKUzIrUFdsRExYejIxNEVoSi93VU0vd0RqWFl5QkEzN1pES0pGWmVKYXFmTXJJclBiaUJyQ2RxQjltZ0lWR1FTb3M3bFhOWGRoKzNITURkMWxodW4xWGhrWWZkQVdRbnBMdnI3b2s4Z1loc2J3SE8wM2IxbkcxZXVzd1lqQWpCa2E3Zm9iQ0lRMy9VSXQ0ZkNuNkt3THpYbjJ1S3RSRGgyajlGSHpOeXFZMjhFa0dCbUxUc0JNVVRYREsrSFhNaG1UQjBodzFJRlc4SmlIV0FrUDZQM1o1Z2tMUkhvRFBqdTUrMDIvK1ArcDJRZ2tDUWFjc1o3SjlpYzZTaitkSVBNbFhjUDdYN1k5M0E1NWRvNndKOTFOSlpnZ1Z4alRFaldHdUpSdDgyaDZwMnlRY0cxSFpJa3d6aVRSU1lYMFpEbVNxcG1aeUpCeW1hbnQ0RTR3cnJCSUNBcVRpYUxSR2hNVnVmdmtBaEhRSmZadUtUTGtjbVV5NlJVYUVOZVRGQ2VsS0dHRTViRlpHT2IwSS9xTERoR0FNaVh2UGc1ZzR6UTZOTXhzaGExbFhnTHFpVGlRZCtIbVN6MENmb0JrWDAybGJoSzZxOTc3VmZ5QkxhN1ZCbFRyUk1xZVJocnlFZGNnQkZxNFFBZzdnWUpRNmdESTBnMERucHh2dmVSdXEwd3BwalpDTWw1d29PZk54QXV3SFBpMnlMNkxDeU9WZkZzTDhnVzJSZEdsdHdaR3E4Rzc0bTdWVExzNklySFhadjlWOG82USs4VHZIQXR1Z1lOdnhuT0NNbXRJSWNMTmZmNWdESHM5eHRsMHdkUTVvdTA5RzFicC9zMXBZak9YSGZ4WmVQemkyNDEwb3JwRnhaTGJsL2xuRGZoam10Qlg5UU82dWNWUkFoeWFWbGpRVU9jL2c1UjN0SGVTWGMrbVA4bDdaYTJyTUVuM1IxVS9UMHRkQ3RQYTlxWUJCUDZTTHY4SG1iYmlMR1ZNWUFia0xmcTllRVJNNWdYcWRXK0M2NkhxdnVreVJGdW5DQUg2TVpxY25mK1lwMWtON0xYSGx6QWppWk45cWN3K1AydkJlS3phc2hNRytyTGs1aGw4YUhKUmZoWDZ2ejhUVGNsK1VxK1l0WkNpZk9tRjA0YTl4VjNlRmY5b3AvbDJtbXRHWU5DWEdWSGd5MllNWWxjSi9QT2xkWWxwOXZNOVAraDhVR1hCelpwaFZhcTU4dURYWXNPWWFkRWtpcHF2ZWxxOUxZSnJ3dHJORGNHMjFidHVrL3pLNTNFV2IvV3Jrb0ZBYXJqbGxMZTBPdkhWM3Y2UWtQUGNsTEpPdXdZR01lQ2c1ckFzM1BjbzVQQzM2aHVuVG45MGVGOWhidnlKVE12dk1YYUFoL1E1d1poSE81clExdUdVell2Sk0zbHloTmRsQmsvZ2NNNitwT2RsVmpNZlgyTjVqaFNQZ2NqSDlJZTVJZjBpVUQzaHUzdHdveGdjemlWR2xrdGpTR2JFWERjTmNiK2x0SG1Sa1crY1lFQ3lOeXhIT0RQdHZTV2pBZG5laEtlMFRhZUpGbFFFREFJQ042WXBvQXNjcUZzN3RuOWM3elZTTDFuQXliQmpySkNHWDIxTFNIVDNsY1d3N2ZBRTVtdmg0dDJTTHdtWlZEbmhWK0cvSlQ0ZXZpL0RjL1hnb250eW84SUxaaFZvVThYeTVYZUJOVWRSMTVuZUMzdUd2cjQrbEluSFgxSkpzaytYdDJsdFNuZ1poS3U0Q2o4WkZpT1dJUUEvODVROFVQRnlQY0ZUUUcweFFXdGVZVzY3c1JXQ21UVm51dUxuVWZOa0NvMUc4OVBrRDZicVQ2N0QwOUU0VVVYMFZlZVBCVXVVRHBvMVFLZ1dRc3VidDZaSzVpNXhJdWNwVlZOS3hyOWpqMWJEcUNFZUVLUDIycmlIVjBPUXBNdVhJZFA4cDMrMkllUDl1NnNNNlBMaFlIL2VlS0tzZ010NzVqM2h3UllZWnA0dnh0ZDA1RDZXMVZwOHBtSFhVT25qQ3R2b240TVZEdUxUZmFRSVZVYkdaWHMyaDVuNmNNcmZyMU1yU0thVkFmU2VYNVhMb01idGY1ZStGayt3V1pEejcwOXpEL1RFemlENktSNTRjNldqcExFNmRucFlXS2NNTTlYNmtVSDFyUVRaWEc5UkhsRktndndxS0hQNmZhbWw4b1VjeTF1Y0JjRi85Zmt3ekdkTFRTWWZJUDl0UEJnci9TUW94SXlKOTRPYlhPMWhmVEVPMjFTdUdndmpKdVZ4SVRjNVI3SHpiU3Y0SklIeUQ3eXpBTjhTUU1pb1doL0xIVkl3VnRydWxOYis3S1lnYTF4MUhXRFJDQS84eksyZllXOFhRZkxBT29rUTBBS2xpWDZXL0ZkNXRJY0V4bFBKZk9wMnM5RWU3cTFXV2NnRlhNYmw3dkI2OEpiQlBNMjhwYm9paFB4S0hJTjI0NkRWTW11QWRKTHhpQ3I3WW1BVWtLdjZkbmRDRU5aSGs3UStKOWRvOWdrOFVzOWVWaFJQSk9NcytrNWVKeVNSS2dzY2FCRXp0TEI3NHNrZkVyeDBteFdWSlZGQ2hRemlnSjJPSzVIT2F6SE5DLzA3TkpYbDViYzRmMGpjdHBFakROUlVWdXd1YmtFQTM5ZDl0aGZLQ2hVZzF4MmNOdEdpWUFnRUZNcWJ4Yll0Z2ZxVElpOWlkQVJpR2ZpMTlZcWsyTmFyeGVObXdlSlFHaFFnU1IwZ3RqTEc5R0JBV3N6T2NaUWZtcFlkUHZZWGxXcm05aDR6TlQ0Z3ZXdEVMZ2RqUTlUK2dqSU8xRkRsYVNKaldERjVvdWFudm5HeU9JYUNLQkVGTmxLM2RwNEROU21Kb0Mrem1GTzI3RDNTWVdVQk1nRVNCZkRGS2xTSnFaRlVPWHVGSlFpaDdmRjl4Y0lZUmROcGNlSTBsUnpsSERhc3ZUMzdvZGJBTXNlaTJLZVVvVXNMZmhZY3FHZzR5SXNpRzBYVU55dThZTStZNkJWbTdadWtEdmhDb0pSSXd3ZXZEYUhpc2k4Q3FhYW54VTIxQWk2T09SWU52Qk5KYzNhOVJLSVgwOHRkSEEvSEdXdEg3aFJCTWtDNkY2dHBWZVc1ZTR1L0dDcHdaYmtVZkUzWmF1NzFuMUQ3L0VOMnVidkN2THJPZDA4S0RWTmJjSFlWTkw4MWFkaDZTbnpuMGYrbklreGNWRTUvTmtuYWZSUGxvdEwwUGtzL2c5Z08vRXFQTzA5YVZTd0UrYjJKN3RrMkFIZTRnRmVuVHY4aVhiaERKaWdub1FSODltdS85L1UrQ3NRZmZyMGsrMFhvWXBrK0JsWUVsU2Z3cWovQ0x0Q0d2cG0rY3l0L2JpcC9Wc1RoK1pEOFZGaU9CVE5TL0EwVGg5bzZ6aCtWd1pxQWRpM2FUdHZuNlRDMkhLWTNEeUlYNjlxeEp6NW9pMXlPZHdQUkgwTU1HYjlTMGRoZFJmNzBGTDN5d3lrTWhvY1U0Vi9vQ3lSZmsvMEpkTmxtTXdCWHc1T2Z0WjNLOGZabjFLR21ydlNockhxU3J0MngvUUdnQWw4Z2laQ2kwb0JyR05US1RITEZKUkhvWmpYY2tKdXlZTzhvQWhSbHhsWjlPOTlnNXZvRkhSQXVwT3RsY1hKWGI3dDByWDh1U1BSNHNEbmxXdnBwMGg3eEYrRDJROW14Um1HSTVCWW5EYWdEZ0g5MURtcnZnaXNPOTlPUFBBRitHZksrMnQxNFpHQ0dDYlRmQ3pDbVF2UU1Pa3BLaEliZVViWDNlTjlSR2IrcDNvYlBlTnJkQy9WSUVTd2lNUXB2OTlZSXpxdEhqTTZPM1Avc1BZUERNVWx1eHNPV2U5cXlXb1ErZHlQTzFFU1BYSW5QTi9xUDZuMG5TSDhBNmllVGJacGJFVWxvUnJ2ZDhsNHljU3hhYS9nN1BPVkwrTUFGU2RxcG5PdnB3Mmx6ZXZjU0VhbFJQWW11ekpIYkpCUnBNK1ZncWZkb3V2SzhxanVFVEI1MlpLY05pT3N1T2NuelBvU3hvMlFCRDVka3Jmb005WDBFbGlzWnF1MEg2V25sWnRqaEtVVlJRYXdLVEQrWlZ5L0RpSTV3ZjhNUnBSTGl5cGF1b1ViNStVSWg5THMyQW44YWh2M3VWdXoyVEhiamNpTTJCYVpoZzRyRFVIL244MGtIYVRqU3l0RXl4UHVHMkJXOHBGdW1uVCtuMFpqQmtEMjR6RjA1Umd2WDRCV0VqRTluQ3c2V0lGdXBxVWNSb2x6WEt0QnFNNHBDVnRDaDVkc3JZS2FZQ2h1R1hmNG5TUlA4ZDIvMWIwRm44QkIxMmZXWUl0Qm0vWTN2d1FaV3ZOS2hEb2dEeHlwbUxobVZ5SGgwdWZmb3ZkR2ErSHVYM2o1dy95NU5xMTFhbmVMcFUvTFJZcVNmVXo2NlczOGNOSEtVUFVzWW5vSUZ3SjdDQk9YeXdCNmoyYVVCVG9qUWVCK3VvSlA5NVNlakFhV011dUhWaFhNMjNxNmJWOXY4ZUsyay9MYU5QekpoM0FEa3JwS1ErVEhDRFo0akt5cm9HcEMwQVV0T0tXR1hjZVFaTy9jdG00TnRyK3B4b2NieGxVTENFOGhSdkNta2xRK2pWSUhyemNNYkVHSkQ0TlFsTGlqZERjVDB5ejNOc2NRMnkxWStacTJIbjI3RXJYTjQ3NVhjUkgva0l1MkpJcEpNOU1JQ3Fzc3BqZTE2V0ZONkc0dWswOFpoWUQrRHlaVXhmbktZUDZkVG91OFlsMTF3ZmptSm44MUJWeUQ4eXNWWTRkNHhVWjJ6TGozU3Jpb1ErTmh6Q0RyTkkxOUNyZVREYmZhOXRhRzRWZUVtcFp0ZWNwdnFnN21MRGV5WjNHdVNsdzR5dkNMTDEydXZzY21BV3h0S2lGMS9oaXh1WnVWeWJ2WXhZWUUzYy9QblZUczBma2p4dHpjRW00R0s5MVFaR3dxc1loT1FNbjVMUDJJbk9mbEtTdkVPR1dlVmdHVlYvQ3pITWRCaitZMjU0Qm1SYURuSWRhTmpCT2Q5cGg5UCtxV0hDTXo4L2Zvbk0wc3JpWGtRTS9jaGo1bnNPMDRScUVTSDg5MjFJZllzYXQxRlpIc3dwbVY4d2lqZ3dUYWI4U2FPOGVUUGtNaUsySVlmbXk0YkFmWTdzYnlQTE9KMWE3T1dmY0MrazhUdGszenpSRVd3a0psSmgva0xIL3hBbVB0Rk5WekdzVzdpMUFla1VUK2wrTFpjM2FiYTBUQmZsb0xDSVZpbVE2bjM0VWNkdGpBWFhhSWpPKzJtUExWd2Erc2RMOUJ1TE5NcUlNZFJjQXJQbFVBaTlwSytYZnIrYnM1WjFwWkpFdkdONXdjSVk0QlpNYzU4Ty9wVzBPVkc5UVhOb2pMR0ExUmVMZlN0WUlzOThpTCtBWlEwZ0Q5Yi9KbDhmMTIzbS9Nem9tbitxSjUxMTUzd3Z1anRQNzBEeFJmY3FObHBhWmdQQlVobjQxc0RpclFNSEYvOVZzZXUzQU9NWFRxQmpadVE2NzZFZmZydnBsNHIwelYva1dkSmdqOG1RSFpUNUN6amhaY24vREdKQ2t4YjRrQVFxVGRReGlTWnNGQ0tjaU5kdmxMbVVXbjlWQ0xscW1DMGZjb2ZVckhJWTE4bXBId2h3NkNUR2tjY3VPVEowVDBMRVNaMnFFSTEybnNRVVBHRGJuNmlKSTNqaCt4YnZ2aEZVZDNWY2l0b2NmTU5JT21ZdHAvQmNWVHBzM25HaFR1ZTZ0V0VReldOc0NBVkY0YitZN2dkc2R3TDdNNzM0T0dWTTZ1N1JlRTdXc3ZuM3NESkIxUU9XLzJ3ZWNjT2l2WDAyQi9mSmhkTThGS1RNV0I2TkJTbEJaN1RQekREcVZEUnFxT2VxUnZ4VWQ1NkRPQXJIM2lsWjFuLzJDYzV4eUJoWGJuTGNYREtnaSs0V2R4YmZ2ZWREYjVQaWlJMENmVU5VL0c2cFk2UC9Cc2N4VTVxelRsdGRsTDVpUWlJQ0JpTU90dlVVWksrSmg5MHBsa2lDNExLMldVbjA0TTRKZW93R1JCYWw4ZnRPVTROaVlObkpJRVlXbjJOQlhLRnhYMHplaUxHcnFsc0RBVlJQMFRZR2dENi9WR1FkU0pRSVRvUyt1bURLT3ZCNmRhaDFWSGR3blE1V2tralE3eER4YUJCV0EwcEU2bTNwQzdaTjlsaE53NVloRDd5blRWUEMxTVFlQTFXaHdXd2FJRXNHYW56TSt5bi9ZWDg1ME1YL1YxdTBFQ3l0MERQMTMrUm9iOXZZRnQwTytqUFNkaUVML0d5dGQ5Tnd3b05Tc0xJTDMvQnBnaHFwc29JaFl2RCtqckJwdnpHY2YrNGVTZTB2dWU5d3QwbEJLb3ZwSjFFOGRMc2czVUtWM0VrTENCVDVGZVlvQWNiRmlFYjFaSXdyTkxick5jT1NiaGQ1Nlk5NkJucFlpeFppb3BaSy9QOENKclNqNS9XbXE3TEttVENnODRWZTVEeHRXYlQwV1BZV1NmVVpZQ0MvTnBtZDMyNmJWUWo2bG1TRXNhZDdpQ3g2bk0vRjlqQ2VUeE8zTWtoWXRLWVpUeUtPVGZUNnVpNXhCRC9Pb1JHMkwrZ2JUVis5bVErRDErYjNSejNGTVA0S3JIamhrWENTVmRxdVZKUGNtSFRJaTA5R0RaL1kyem9TSWNJMUdlSTBiTkZNcUxNeGZOMXRESGZmT3RjdDN2TjlwT2V4L3pGNU0zLzk5WkRmMHhLNUxlSDdNQUlVWTVGK2g4U1htTjNib0RYL1h0bGI1MVlMSXY4bHh0WVdwaTVhYk1vZE9PTmdlcno3N1pvc2RkOUc2a3kwYktqbGdmUXVTRWlyb0M3NFVwNXF4ZVFjcGY0eURtRUY0ME51azIwUk1lWHMwOGtYUEJ2bWJ3cTRJTUhmb2czMFoyS0hLTklsUkdyVzVUdldCd3J4czdhYnBBdkpmbUY5T3k3cjdBYzlIemhZZHBBNkM0WlNGWmNGNWdoUTZEdDlrSGFaRmFvNUZhbk01Q1l6U1FjN3Azd1A4YUlvUzhGeUw0dXoxU1hxM0wwM2RONUZsakt1dnkwdVJHMjRVWENyYkVoZzBNc2plU3JZQ1VJeGtpM29LV25ZNU1XMW1mQjE1SWRFMTk3TExBbStyb3VHT2dYWHVJdkxWR1RrYm1XVXdSaXpYajNuZ2ZVeUxrakJyZVp5RUZrVXZEV2lMeWxlRzNhalg3ZFBla2hsZDhZOWxOeFpuTDN2RGx2blA0QWhhYXdIWFNvS0Q2MWNBdHptL0I3a21Rb1N4VVRhb1ZPeklDcndjdUxDMFNHcklMeFp4aVFSUE9uck5NQnN2NFl6djNTaEhEcWJXVVU2NWF4eGp5NEloYmtZb1lQOVNjUVJDL0ZicmNPSEhqaXBtSHhzU044RWNHbHdPeDRLcm9WQUVGK0lJRTladkRjeVFTeUkzVjNUaG0vUFRQcUFaTGNkbyt1cWc3bHlpZkRjampWU0ZaclMwVTFqdDZJd0FUSzB3eGhpZTdlQThTc3lEdWQzNzlVRFk0a0pjMU9lcjJVdkpuNk5lUGUxTmNZdFlYVzYvZ0ZhT3BhNUlCYVhLSGZZaDFZN0pJOFhQbDZXbFlhbnpTWHJPN3RTNUVtQWNNVDVUQkxkZmgwVjlzeFdONkt2QzNtUnV3UTBpSytDZER5ajQzWVFzbE01ZUZobDFXdTFjcGxteXhRVDh5c2JrNVl0NEV3SjU2d3FOQzR6V0loSDI5eGJYaFgvQThsRVdlNWh6MWxmVVNMZUQwa1NqbnFiTHUrSUR1Ujk2Z0plUWhPRytLUDgzdnI5MVBJM3lIWWN1TTZjaTVoaU1yQzR2KzF1elJKYndjdVR6eTJpQ0lkbGJseFhPTkVuY0drcnpiOTNhSjJsUWRaRTd1L1VVdjg2cTIvaHpGSzdYbndYeTVSUDkrTzgxZ1kyWUlqYmlMekd0aEU5aE5oUWloQm9DemhRTXNjMzJETXpXcHNjNW9tYVp4MENZUkhkVlV6V1k1STF1M0lQUjU3dVlJZ0RocDYvdDR5WGJyTDQxWEQxUkJyQ0xHMkM2VmM1endmQnExdEpyL01rMHM3enRLNGtpKzg5TnB3dXg3ZDNtMHBTK3BEY2x5dUV3czBZYitJQUY4Z2VjNk1pdTdGQlpTZUhzdmxIaFZQZ2ZkUFhiRVdYNHYzeVl5dE9JQlpEVE1CK1JSK09IeEVQbkpnMk5CV0U5Mk9XVENEeWhNbkw2L3F0WG1pWUNHU0kvZjNoZEwrNy9hcmxCdG9NblM2VWJOVXQ0ZXN5dEw0RWViY3Z6NnJveWd4M2J6S3A4dWs0VEIvYmM3ODNja21SeE5lR2czakNLVFoyR293WFNGNFFvWE96MGNpdjJYc3FrN3czcEp4VVBZZE5PME9BZGsxQXNqZW5zYWs0eDVXeFZ0VEFiYWRCWEtFWTVGNGxTV1g0a2tSZE5WLzNqNVI4aDlLUUlKS2EzU0hlUDhrbmlVdzBWUkk0blh2bXNyQkY0dWJjd2NkSU9hSXFlM1RJNkluajZqa1RzbHJIS0NJT2NTd01pTm1sV21XMFF3dmkwRXdZZS9kc1R1WE0rLzlwUGxMeXF4aXU2cVZqajdNUVJPS2JuY3pQVEZZWmF4aW1pelR2UTZQUjdwWjRWVHJOZXhQckVIcTRUV3ZHODZBak1vRE1vUVlVVkswNDFJMGk5WkhNM0pHZmpwODlqeFIzcW1abEkzb2pBZkNTc0d1WnI3WnZXd1kzQ00xcXpmaDlhTktFWElSMWRGSDlpNGpmMzdtc2dNUmJkbGI5OWErVzFLaTZ3RGxsT3RIRWt3dXU1Y2lBOVFIRkNpckMzTWduck4yRVorajZQKzRvaXNaTUgrQ00rTEY1ZytENjJxVXNmcEZTVVMrN0ZsbnFYMW5Bczd0SUZCZG1WYkxJTmwzb0tvZG00RE9jUDREek1ES3p1dU5qVDdrUDhKMkNUOEk0Mk1TVDdpQ243TnlyL211byt3Qk9pMG1VZmlFQ2d2RG1RQzVuOHA5Mk43bVJPY2gyWWJCMkEwckJ1djVmS2EycnpsbGtIQlQ3YXVxRWxQRjJPL1pwMFlNRXpzc1J3Z042YXU0VTU0SExnQnRYVDlqakhJYWxiaHZBbUZXNC9QaXh6ekVyQzR3eVJoU1VPTmJPTlEzUWN4Z2tyTWRaZDFuZ2lROExLQ3ZSUndNelNOd2N2L2I2YnNuc05MLytBOFpnSE1QbWJmdjNTUlZxL0Rmd3YvVFB1RUJqL1NhRVNWeGZNVVNJL1FhWWYvVGlBajBidFlLVGRZZG5NRFhMOVIzRk1RSjlFdnBWS2N0Q1BJWVY5YmJtbWRpckNOazhKS2VhV09UeFg3N1h5UXNXck55SGxYb3NRbUpvUVBPUXZvMEo1Z2VyTSs3QlRTZ24xU0NDOUdKZzdwNHloSUthMXV4RXZxOE1mQXBUbUhaNTlheXdrQ2lLeURYQ0JHeDJGZGdScGZ0ZkJSNG1NMy9ySXZ6anF0OWkwWmJKM3ozOXd0dEZ3Y1dpNnVoN2FZamZ6Wk9BVW1vZ3NNTGJOK1B6Y1hDVE1PUFNBcjU2ZDVobE9WcDhKc3IrUnc3WCtpL0lhNWV6bGZITkZjdytOdnRFTlFheVZPUitjbXhoUWNQbEFJUG5VRk9aZDN0UlljWkpCcWQ1SWF3NXBSQlI3bUZHdDIzVWNoeXlLOXRTc3paRExmWWUxQjExMitwQTdVWkMzYkcwM21Ma1c1Q0JER3JJWnZmeCtTZWgrVDgrcXZSQko0anVLanNTTDlPZE1TMFF2NkpUb01wSE1wVDV0QmpYMnBMc0ZiVU5WL3IxaXRSSmxMc2FWR3VKbHM1cDk4bE5hTjNMaERyeVVvTTMzQ2dEVVk5VVp1SG1QSHMzMTJ0ZElVVSt3R29ocmZXdEh3Qm1LaGgwaHJ1YXNFOGFrNkc4ZTRRMHpWM0xOYzBhSjgxdk1hRkU0cEwyeDJ5U1lNNHFBUWdFdUpyOE40NjZpRVdCcDZHYjFSckZQOGFRSWZwUUVIWUc4Vk5pRWpuOS9MMTg4TFpQODNEYzBkOFcrTUJsMmFIdkMrZTNMMm82eHdIU1ltM3QwZ0JzMWppSWJBN3JMUDVteHpSWktxZmt3MnlYMHZUVnBXT1Z5Zk5Tc0JaeU5aRStyTlMrTXpjVVpVQTlEOTNsOS9lU0R1VzNEc0J6b2laL0oreDZiTTFmR2FOcFYrSFZXdzR5WkJwdEhuZ2tLOXRVZGRxTk11NjFiWVB3cHM3cWtFMUZ2S0dGR3EvUFZVT2oxbGs3dzMvMi9BNVB5aENOMElKUGN5Z0FuVkNMZlZMd0NWUTk2RSs4SHI1Tmc5N1ZKaEdhTkhsVDRuZzZYQ2ZhaDRRTUJtNUgwWmpNQm5kMEdLL0M4WDlyNlVoaHpzUXFVS2pkVUpDb0t1L0cyOW1mNEJvSUowWFpCU2hucDdrR3FFSWRvaE9DalNETGJDc3VFSVlYZmxuK096dllhVTc4bldjV0krbHRxYW1uaWJxUHRUdHJzWjhTUFB2TThYV2hIcmdQQUxybTliQlRXN2Qvb0swbFI4K3Rnb1MvRHBzUTNHd3N1Y1l3Z0Q3ck5HY1RlUGpRczEranM0UHdadzFCTTJCUmlSbndlWThHYzdvV21NbWUyaENqRHlLVU8zelRDZjgrd1ZjUjloK2JyZzNudTIzaUxmWDduVGZjS2RrUDlvU0lWaU4xL2Jva2tyaVBoWktWS2dsQXpySEM1cXB1K05nb3dKdFkzTDRNazkwMExtU3ZCL0U2NXBOcGZ2a3VpTjZXTXk5MkxPMHVqcXVWalZJTEZxZjhpUU5ZUUZ5dC9UQk80eVZndGZtVkE5Tks3M2JJRHdkOU9GYXdHcGl0bmxSMWg4NjVpWW83NFk0bEZIU1RwM00xTWRFUFdkK3ZkUExIaXh0TVE0bDZQUWZaUXorMFdXU3MvT1FhVjU0UHk4dDNsdjRXMzQ3cjFocklsQ0FQWG4vRXJBc3VLRUNUR0JvS2tldjZnTk11dkh3WjI1aDNCcXdRc0hwUnROV2g2MzVPZW9uNWJUOGxuVHBxS2pBOE94Y2oyb1Q2NEpMdk1vTWJWQXo5d2dRV3kyU2UzYnFTcXhKVmFpWU1sbmVPYnhGeEhRaFRwbTJwY0xjMHJ0d3BKVHF1YncvUVJ1OW1XMGRMNjIyajk5enVxcFQ4aW5CRDZhTzFlQUtIb014ZzhhSkx0OFNuei9oNUxpYzJDeW1oTnZTL2NQSUdhWWhqK2xEcGJUSHl2RzFhTFZ5Z3RPMGRmSVMrSVh5bXJHbmhLMWU5bngrZHpRNG44T1RKeXlueGJiTi9DZkhaRklxZjlpbUJ6OFhuME96YjkxSU9TNVN6K0xjVGwxS0g5ZzFyY2xVWlR2djdtUE5rbm1zaGwrY0E5dWhwb0J2dFdMNUJmbVBqVFF6L1ZzZkZMSXlmdEEvYWlQemo0N2htU1JjWVlyb1BXQnlPTUZoK2crbXM4UEN0S2V4elBMTW80QTV5RUlpVjdEcEo0M2hWM0YwMVVabHRURjkyVEpoallPTHB6ZUxiWTRkVG1OanZoQzh0OVk1ZmFYWUZVeWJRVnZsVjhoNmVpR2dpUG5nazRSWVV2QkRreXVLdzZqU2ZnQTVPb01pS1FIaTI1QlNreUp6QlJEQ05FekE4OUxkVUNmQ01uT3gwemRaMEJ6L1hQSVZVR2orekYwZ1lKVklIdHZvS3p6dDhGU1BTMjJLaFdreHVmdm5vQzFzMndoK3RXak1hU2dpUmtOcWhveWlqNC9weCtTSkF3K3h6NVlQQjNjQ29XWU9CODVDb1NrcE9nUmZrRGgwREw5Rng3U09BanZJOUFSb0x5WEtWZUZJVEF2d3VOMTd0cVc3NjZZa2JxbUU0d2ZkOW9CTlJGaERYUEtyeG5Zb0ZUbWhWR1RvS05QOTRnaTBqNTlhNk1xRFBSYmpaVm00aDdDN24vcEk1T3l1MlN3bWZxdzMwS0xtb0o2U1EweVA3WHlhT0F1WEg5c3JLMThObDYrNkZvT2RZbU5ldkZNbFFJL1I3bW1ra0tBTDMzZUhRa3N0NWZaNzg4VU43SzI0UE5WeS8wYmNUNlFMOGNGWXNMdmJuTklmR2c4blVmVnlhcVFRbXJoNHQ0VGJxZ3RyOUk2VXdwZDZ0cE5UY0hpRHY4RmZEOWpzNzlTLzVQY3pmRDlUZitmMDAzeWRkdURmSjlTUytUMmUvbitrbGZKNnZQOC9xRi9QNkhlQkh2MjllL1d2Nzl2bnYxeC81Kzl2NSt5UXQxK3N2N1hXQVVEY3QzRGt6QWlnQzkza0JTUmlVN0hjeUswamRqOW8raGRUNUZ0UFkveVRRbFZ3dGZPcmgxTzBOcGVVQjR2RzVXcmdWSTdva2tuRStmMjdQM1RsZXAxYjBZMG1LeEZGQjdySTh4WXhVdGFtQkkyL3V5Y3hKZGljUnRob0VjSjYrRmtQMWltZ1EycUxuZUN6UDVMNkVXZUZ3RjRYeit4c3VBT3JmRjVZcUZRcVBFWlFobkpuZ2xqQUhwKy82UnBJS2g2MjlsdGhnRkpnMWdYVkhKZko1MUhsQXNMRnFpY0Z2VDB6L2ZEVHhiYzg5V2IvVkRJUFFFb2ZySTFESCtYYUdrZzkrKzBma1Q4S1lRUllTdDROaDlxMStqa2pZOGlhbzZldHRqK2Y2a2FJMHdPRUJpU3lxaVdYVURGdnpkcG8xUDBFeGVnZkhSaVpMMnpGUzhvY29uK280L3dqMFJ3RmVxTEprb3BtR3d3Sjhua0hWblZ3TTZFRC9idEhmcnRSZjBuWHB2OW9UZWoxTlpCRjY0amJ6aXF0VjlNNW52SXZrc0FuOVV1ZzJDaFN6a01uWE1zZ3VQZER0bDVCay91eG1sbVZjbllMa0ZYOGE1M0RFMmRtdkk2K05zUUloOE1BU3RpU05kNGI0VGRrZ25MdlFaakkrZ3IzQ2p2UGxVQ1ZCTlhaRDlmUXRVZmZ5ZFh2ek5sQWl1dURLNWc2QmxLR0VYS1E4MXltOHh1YkVJRm1DY2RiVDVKWmxWMWtySWFhRWNGb0wyL2pVckVrVEtJV2dMbnVEY1I3SWNzWWpiWGlOYnRLYnVUcC9Pc1NCR3ZMTDJTVFZNa3V5aTQ1OUt0MDlEOXdGQkRpMEFMRmRFWG1PMVVIVGRiRUhnV3pyNExHVUpXQkZZN1dEaHgybVREYUxSaEZoRkozTVJGditpT1hFWHg3dG1VNlFpRjVnODFTb2dkQlhOTnhZdlUrbTdReDFDeXlWRUZJQkxMY2h2ZHlVU1licnZMTTEyd3cvMHN3cGVGL21yY3F3RFh3ejFNS3BrU1NlMHRJVUhPd0lhc3R1b20zcUlydnZkenhTR1JkV05ONUxiNXZSTFMwSFVjOXhja05jOEhrSDZxMGpTcHMyOXg3Ylhub01ZSXdNeGFQVEswUGtSUkhwVFRjMFN0UGxVTjhiOXVQK0JMaWpnRGphV2xQSnFiR3hFazJDTmhSSEo3N25EeFo1cVpTQmJoZE9qa1pwTXRZRkcyWGMrZDA0NGZZSXd2VUcvRnAvS1VsQnkxSEZrWnlWbksyeHE0dVM5STBsVlNjR1g3OFAxbExYa1F6d0FpbHY5a0xlSFJjbFBCNDBnYWU1NVZnTm9JR09qTEo5SXdIN2I3emQ3MmpXK0tod2lEakNRVFN3bEdvSExtdnRzNEVoWjYwaDhEUXE5ZXZzeHRGclVrMXpLdFMySDA5OGVrVzJqTExJenRoM2dZU0JKa29hd2JYSndpRnpnL3ZJWlVybmN6bjl6RmN3dlEwS2JVVW9qMk1pN2JhSktJOVJiZitGSURNZTlrekFPelI1SzVkMEJxRVFyeGpTSkJwM0dYZk9YQVVhdWgxRTZBc1ZPOHdZdkhNRUpOeUNIaWRHK1FTL2FLQ0toRjlsNW9iV2I4YkF5QTRYK1NMSklmcG9GQ1RlbDBZc0E0N1FvUXZLcTVKUzQzdk9WVndIaUhQOStMSmlSNW9GQzFNQ3FzTWpVWUp2Y1l1Ti9PdERtaFZ6c01FN2JmNTBGNU9jR3hmQUt4T0RCUnA3cUJSNFduSnU2bFc2NWtJOG85Tm1pc1N3RXphYWJQUW1zVlVzTGhZUWk1YkdxdmlwMjhmY0JVOGRtVG1BQUNaaCtnL2IyMlFCK2dRYjRxMzJYNGJ2OWVFait6MDZmSW9sSVlJM2k2eDRUOWpmTHhidUMvaXhNc1E5eCt0WDAzOTFwMVVxWC9tZVZadVNWZHNSOEdSMXIrcTh4dENYcWJBbzd3RzZNSmliMTdWVHBOMmgweThBUFNoNnRISWhOWjFvSHB0elVhMXdJb3U4RzRnUDRETkpTVStOL3kzaEc1bGpNWEdtOTVxKzF1cTVQRnRRRlBEQUpHNklVb21TM1ZYV1EveTJydzQ3cFNNZjVxOHBibHcrNTNZOVA1MjE2OVlMNGpoYjRXUmN6Q2o3T0E4MGVpUkFQZTFIUnU0YUlsRnYyaHdJWGNIcit4RW5WdVd0U3pXM0ZiM1RXSWcvc2FIaEhLcWtmaEpObForWm04VmE5MUpFdlhQQVBpMlpvVjdPc2VZTGRTT1hPRlJSL3BqNm9RUnF3ZWhBdno5REdoNUxCbnNwVkEvWkNmYXJkQkttOStIYmpEamJ3akhVYVZpRW56V2RwLzloOC9PVGJab3VSTFVaa1JMVTV3MGZwUnM0anM0WTNPZTEzR3hPM2dhSFNYZ1pQZllER3VUL1hmZ1RKclp5bWYxWWVKZzdVeDdFR3VGRmt4RFhiYW1vUFREd1Rmc1NPaWZ5U2lDcVNmZmpza0dBQjBDMnhqeTh5M05ZamdEK1dPSXJTRjBlakdCV3RZKy9mOHFqcHV3WnRlb2VtaG91OWtmU0QvVGdWMzNnNnVjamRGT294MGNMc1lqbDFJQitJZmlsYVgwaGFYNTJGb0d4SnZpR2tEcEtHWUxSQlVlYVNqOWxDSGpXTmZXRUdvTEhXMC9mVzVvTTR2aXh4YjAwczRVMTZ6cmpJZDhoM3dWNXZ3R0MxMFQ1UTVONTU1V2xVdHZVMWNLM210NXorTCt2OXROMko2YXpBRzlBQUJzNUpveVFjWWJwM01KVDhDcVRxV3JzOTlpS0hwZmQwR25hUm1qTEFBWWF5eXVCeXpKWjNDck9ZSG1HN0tIWXhvQ0tCRHZ1dGlvM0hMVzdTTWcyZ1loeTdaTERLSXpONVVwak1jbGROUExBSW1NOEtkcFlRR1ZKdkROd1E0Y3dGTkJ4SDluS0d2aXp4WjRMNy9ON3dNbjF3TllPV2NaQ3dGZlBONkhGWW9QYUxNd05vOG81UVhJdFZ2TWtIRkwxNmh4TU9yZGhLSXQ3VFhGYVhoNFdjajhPeUxobllTcnQvUUJ5RXZQRFc1R3M4QzhwMUlDUmtBSzdVU0twUFgyeERzWTczWlVWY3ZQVTBadDM1QVNmS3Y5TWpiYlZsOUZ2aWFTMCtnWEY1MG5pMVVpWXpwejY1WXhWUkRGUndJTGdkVmRjMTNlSVhQdGo3UzNOOFEyekJmMTZoQ1d5eHRYYVZLRXg5eUJWUEdvVVVZSkc5RVlKcWpmVlE5alltcUsvMkNWaUhkSXgyOXh2WEEweXh0aVg4NjZmUEFPNldxdVZneHlFcEIwTXFwMVFHZVkyK25WaTcxazFjZUs4WWpNcmVCSEVXdXhtM2xDOUU1cUowUWVFL2NVdGFjMkw2RUZSem5QZ3VreXQrK1BRc1RJdVVudUpZSGVPbVZ6YnFTY1IvTGMySjZKYkpNOXJmcjFJMVVFVzJVbzcyMzRueFNnNVRVTFNqYS9od2RNZW4xcjNOVWE1Q3IrZWtxSVRCS0ZoZDg0bFZQTjlnVm1uREtoYkVFQ2N6YXRJSWtqdmRmTCs3TzM4UDM3aGZ4TUNOeGcvSC9JajNHVHUrcy9yZ2F2eUtSRU1XNVRnaGlvNW5xNjlkWGZNTEorc3dUUnZSMkdpM1p2amh4V0VqSE5jR3BWeW8wdlh3Sy9iT3E0cVhzOW8rR0lrT0lLT2FKZjQxWXRzMTQ5SDZmU0JsWGZmSDFjOG9mRTJCZW92VmRyVnhZdlhHMFM1U2xmc3djK0FNMWNteXBnQVRPNWhiSWpkREl6czhRK0dJc29CRFpIZ1pwc2QyV2xGSVRKWjRCNXB5dEJIWEFieG4raFQ1TE9hSnk0M0ltU2RLWldvZU5ObUJGRmdqR2JWL0Z2UEpuV3ZWVDdreUtxYmZyd3lzaVVVbTFLRyt5cWJXeEl0K2cxWGVEaWRaOTdCdzhjNmhjSkFudHQxYnJnVkxSbnEyekhpWXM2QlJ5VWlybDFuWWhPZStHbVduUlhHbERGQlFzWlhzSllyT0w2c0NWdDNRbmJSbHhsSkFFRWlSbFRNWHVWUkg2cXJ6ZnQ5R3c5ZWFLd2lXRkF3dDR2U1E4Y2RRbUh6azhFY3dPMHl6NnlQckMrSlc3dkhOSkxqZU5pb3llNjcwMEJjMThDR1B4MGNvQWRXWFMreEo0Z05WamhlanNtQWNGR3FlMnZwRmVOcGZWUlRDVG5FUTlLMisyZ042bG1IUENmWWpOSHM0bHJkMHA5WkxwMHFFTTY4VmlNY1dvVC9TejJkVFQyNU9iSGViNVpqNW9MZWRVakdOWkI1QzlpM2FMVVlOZXNFMFdFenhYUWRUaU95REVsdjU2TnV6ZXVYcUJhV0V4YXpSQUx0c01NWU0wRTZMWWwxMjA3dG5HM1VOTDZIekQzdUR2RE1ncnExM1ZBSG1OWXlTVDZSdEo2dURYMm9mMmlvR0JMUHBrK3J5a21iY3pCVHpoSHpzeklpMVg2Q2dvWTVlOFFtMVdaWVJpOEdNcTIzQU50U2V4WGk2bXhGSUNnbk8zLzBwZHFkMlFXa3hFNHdoeVR4RUtuQ2h2OXRvRkFWT2xyY0o2NTBHWmZrSm1mVGtJSnpnQzFFcXZueFNiMnNRUXFvR0MrSGsrRk9vZEhnU2pCQ0JXS0hHeUc0NzZJdlE1M2xBVStJS0REaEUzaXdFNkNGUCtyQ2pVbU91cEh5eW40WTJmREJtMmV4dW1CVkJoUmlNMy9RQ1dqTkU4YjFoMFBYckRnczJCNFg3Qno4ODVuVTFpUlhXVURKZ0RtdjB6QTN0YTRsSUcyQlQ0cEp6M1o4K0lOYXdiNmpzYURjVFZLN3FZRlFLeDduZmd2MEFOQUY0d1BsYnltZGVXWENsRkNkRnM5ajlEOGVkdTJyYUVBc2RuckxZaUZOWnBqWVJEVWFhUFhndXRsQXFrUkZOa1lYbzd3bCs1dFRRQ1ZON0EwT08xZzBBa3o2WjV0M1BUcHNGVHFQUUJJNFNENm90OUdCdGRRdmdyZlNVNmdvSEFaMG90R1Nmbk9sYWlUVTA5dzY5WHlBUzI1bmxuTDN6SElib3hyZWFVcEIvR0EyeDJsVEJVRThzb0tNZVlMc085cFRCVzhPL1BBbUFYV2VZd2hOSWxabitRbWhaY2w5M1dLTHZWMEtkb1M2UHJBeE9JT2VjUzFVQlgzK25zWEYwVHZuOTFpSzVjSk1udno2UGFJVUFLbitiazJ6TC91TW1ibnRNOFpGNGFweXlnWHBPY1ZhUEltVjZkK2ZzQ2lvZzd2eUppU0JwODduNzFRcTVuMFhseWtnSlBqSFZXYTRUeHBnRWovbUs3TFFJZm1ORnQ1a2JMOTYvWG1TYTIzOHFNSkYrR3BwSHdlYmJBd3lNZGJHVUptZStKQWlUNGZ2cWw1L0NlSjZTVXIycG5ZWE9EMmxIYjJCcUVvbVhCQUVHZ2tuK3hOVEs1eXE0KzRTWUw4cndLditDS1FjMlRHbXN1aHVzRWlpaThKRlg3akFJVy9wTmtreDNqZlVNdUpDNTQ4L25tSjN1NmxkbnhDN0xML05sZVJhSDBFV3NTcHZtWGdNcWtUa2xIbUxYamYrQ2VKMTlOZDhqUnp3V2srcWQ0cDNZak1BazV6ZG9HNkUxMFBzTmMvUDNrYUV5UVdCSzNYekFvRXdQME5ia0wvWTJHUHMzSko3WFcxYmdtdlhnbnExR3crMEIwTDlWWnJWUFhWZDk1UElTb2d5Ull3b2ZRcmNLeHdyZzdLaUZhbjUzRDhQMDZ1emg1a01RSUlkNWdYRnRPWFh0cWJ0Y3p6WUxLSXJSbE1qdW9sUEhnOS9ac1AwdkNBcVdNMGo0bS9TUFpXRW9jNzM4YUE2UlZDZTVRL29QcWtKZ0dJRE9IVllhT2FZV3IwSFlJWEZPdmI3NC96M3ZuVm5TNWJIY0QwRWx6Z0JYL0hmcTg0TmZmWkdtd1ByMGk5b1d3T3E0MCthd2RvZjNFckFoQzFaUFI3bVlYdFM0S2IrRWYyajkvRG1iZGlidTdwVjNTaEkvaDdHQWlRMXp0M3l2cDVVS25tM1lJalRkUHJIMDVoRExRSjl3RER1WmlGWWRQOXFBOGthT1RUeisxWERNZHR5RDJkTWVCTkFYZk0vSWJyV05wUExKaXFDZVZaa3MzYmQweDk3Rlp3eTd1SFRTY241UlRKeGtLaEpsbkVGTC9oUFNHRWtUZU0xVUhnWU56VGpjcXVWRmtLcmZMS1JwMEpERTc4ODJjL1MwWERDSmo3SWR3SkJGWk1uc0JudW9EOHdobi96M25qaXJaUGxuYXBpTmFSWWpOa25xSFNLdFJQOVU5Z0gyLzhjNVptUjI3eXkvWW11c3FuMGpMbVgxOUdsTkJSTHlLOG9BWkRlejRiNEhrbStGSE05b0R5UTFqTExKOFgwd2xoZEVaQnZQQ09ab2RxK29jWExEelpQR0dxUzl3VnJzcEo4NjBPcHM4aUJaOXZyTnJkeUg0ZEpZUUdNeVplaFkrdzFIQVM2c2xWZUd2QWFDQWwrZ2xqWjV2Sk81WEpsMnZoQ0h0UjNoMHdhWisySmJCTVJJakQzdUZ6eVhzRmg3S29PNGZiN2MxK2tKbVZkRFcvNTRPclhvQlJLZFRVY2piSm1JYnFyRHBvSm85aGFxQnRuWVZscWRrQkxhd2FoU3EwSGlNZEhtWkc3RDI1OW9FTUdxWjJhQlRoQkVRTEJCdDBROFk1c2hWaTZtMjdDYkk4V3h1eWhVMVVYVkFBSVkxMHFMSFJEYXZUNWJpdDdPVzNtVTBSQXZEN1FvL2EzNWVKV0NOV1VPR0ZxV2U2OEZ3eWkwRlUvMDEwRzkxdHh2QUtYTCtmMTc2RFNvV25IQnRQVmNYZ0N2ZnNLY2ZENFVaQ0tmYi9CT0lzYjlIRU5pZTNhMGwyZWIvMWxNL2JaeG15SXp1eHJLUklwK1ZmWTF6enY1OHFBNG5hdWtUSjEraG5kS2YwRkMzNDNVa3FmR0pBblExQ0Q2TmxSaVIwSGFzNjBMNzhMVmNZMDcyRXM3S09zT1lvbTlRL1NOblBEeU5hVzl5Z1BJbzhIQWNrL0hicjJtdXVycGJlTE9Sc0NwSmIvWDhoNkJsdWdPODdVY3AveUFmd2FieFFaRUtYbERuK2J5VnFXNWQ3MWpoWlpnSWRCRldrd1RlWjd2T2dJblVUZ3lGS1NKZ0IrdjRUQlpjZlBmVTYxNXVmektHQmMwOFBGa1psZTh4UDBOU1MvWFBIa0g3cm5iY0pNNXp1UTRvSjhHbDBoa2Q3ODZPZ2RTSEhmZ0tnQzE5WGFsV0RrOWhwUkc3M0xsSHdNUXJzcDNXZUo0bjV2TExCZ3dQajQ4TFdPdHVPRFUrY0d4ZUFhcG1QRlgzREFGUVQyam5taWY3eFVSRmZuUSt5akZoc3RmL1VTeTIySjlzcEhKRklZSFB5Tm5NaURyV3gvcWFvMDFDaWdFL01ORXVVY2loMUh0TU9UK0IxWVN4UjBWNnBDdDB1bG1VanZtMnpQYllHNWlNa3N5dzVVZHQyZjN0a1hVVStoczNHbG9GNDJHSTJvSXZ2aEZjNWdHVkNsMkJtSW1Cb2ZEZzlCZCt6QVE2b2J5ZnlOVldZQnRQNlJjajBjQzgzQ2VlaEoyMkRZdmIyWTFiQ2R3cXh0Y3VQSXVMR0NXdXozT24xZnZwQW9hZ0V1Nm5abDkwd2g2S3Z2bEhhUHdIMmxPSk1RaGF3cGN6cXFJUnRobkVkdC95OGxYRTVwVThWZkE3aGJqY3dudTNPNVlZSEpqNWFmS09wRnJ2d2NCNVNHSzk2ZXNkL1pMNG5lTnlUSHhkUGFBWHRBTkw5L0lKSmFVZjlsMW9KK1YrampoWERObE1PbCtOaFQ2QkVLRkRMWnM1MFRYcEJCN0Qwajl3bFhkRDdlcmVWdDlTYk5GK2MxdlFGMXBCbWg5Nzl6YXl2NmZZajVIM1NZbk9FcGNqQ2cwS3JRMTlSRVBKdjV6Nml3ajZpUVp2VUJNSWlIREJyV2lhaWRmeTJ4R0xrVmppZTc0cmZDVHFrVFBndkY1eFh2L2tuT0pCNTlSNjRCcE9UTHpJcUFlM1c3SmNVRjlkNWdVUjlTZHNsQUozcmRYUVdIQTJIS1NwK0xjay9sM3Y1SUJ4bHVoenRuSVhjLzdFaGp1elp4RHh2TEpBVVU5WUtNVEFLcHBNaVdWZFhEWnhCbkxKK294dCt6bC9HR0ZDS1NQbjZuSDVML1dzQ2d4RmhvTzY4YkJJRXlzOVI4Z2pOeDR2Tmk3S2lVaHc5cHphakQvVGxqcGVHa0g2NWs2eW9YbFhYRG9xcDdUaUFJSnpTKzFUc0R5ZEpINk5WbkJvYUpreWV6Wm9YQkhPT2hSSUZCcW5tdFJ6R1hlZjdmL2NFRDFES3gwUnhUbHE4YlA4cEgvMW5lclV1ZWd4SVYyRyt3Y0dvOXhjU0R6MGE3VXhKamxoaW9NTVVVR3JXb2RORXRKTThsbXpEcmIzS1F2OWdRUXpMVzdKcTRZU0IzRXE4emxNNWMxVk9yaEVuOGJ5ZTNzQ084eERSalNIYWVPeWFvMThoVFA4YUN0ZGVQVmNsaTdacEM0NUxLa3pubGUvQU1jbmpGdW1KRXRFTHUzZk5vRTZyRXB5aXp2TVBsOW1PUTNtNDQyVG13ZWtVbGplS1M1UGNUazYrMWpzb3lCWHNNVUp0YUZjTmttWmhPMDNwU1FiSDUyYTNnQUt6ZFBLQzNpN0tpYkRsTGZITllkaXM1R0VxcWFzRGlleENDUFRLZFh5Q2hmeFptbkI0dkZvalB3bGJmNzYrYnJleFpDcTlFTXdJMXB6YmJRclhRbWQ3cG9JQXBWejZ2cVhEQVEvcjhlQ3FsNVBBTkxZdGpUMHBsSi83Y3pZeG4zT3J1S2s1OEJGbGN4cVVtdElTM0RQbHdxWWNpVDVTU25uTU5KMXMvTUlHeGRESlFwZjlWV2RGNGFzQWV3Qzh3WkNDYzBMTUVRZVQ2a0FybEl2dWZ6R0tOdnBpbFNEWERZemhyQ3JCT25USVJpY2dzT0dtV2Z3SXVCczNNWGFRSGdaZEdsWWJBTWJNKzVSK20vZjB3cUNQQW93UklINU1LZFBVV1FQeWgwNUtKVWFXM3lmMzc1WkJ1Uy9QdFlHS2hSd29mb1ZpTFkzaVF5WnpiRWlhaytnZ0JLdUF3aHExVjhKU3NvSWZWL1I1MjdVdGtwSFNGQUp6eU91emtqalNEcUFPOXRLVE0xbVhCSEd0cWdPZEp2eElnTUJYQ2pXUXFDeVZOMjZvTnNod0QzN3I5SVhCL24vNnJQajVNMFNHY2dmeitQbmNSOWwzUjU3RFBnam5nZXBBK05EK0dHMCtHMTFGWlRzMXdPbWFScHA2SzZ2b2U2cXdMcmV4WTJQUEQ4WjFZRDdmd3l4K3NxcWxaUmJ0N2tuZitnMnhhQzdRblRCNzFSOVBoUFl1NS9COFFqQjZBR1VYMjdUQ0FIZGp2MWljQXJDR1A0RVF2SUJqNEJqN25pamMyWmpxcW02bXBVNlJaU1hCRHRYTFV2MWQ5bSs1SXVWTFB5RHdYS0w1UmYyY0hlc2JmS1o5T0V0TG1xa2NoOFIrRWZ3K0E1TVF1VlRMMkRNM2ZoU2ZiRkE5NXYzWXlScXAzZlBnK25UTmFwWFJ3YVdLOXR6c3Z5bUUyakFRangwcDVLYllJOWhHVDNUUHBNb3U3aWpWRXpOUXFrQlQrOFdKcGZjZHljVlY4QjZFRDFGZ0M5WUpMUjZnT2FueEtUY1V5MlRjUUJlMjBqamYvaE1jN3ZBWE1mR3VEaWNZR3MwZGlQT0lBWkJvWjQxMWZkTUhsUm5vYVE3bW83UmlsejM1Q3N0aDhOckUvMW4yWDBtelU0Zk9wR3JtYWkyZkJEQ0txcTQ3a1NiY0pTc3ZwS1hSdFdTb0FwdC8xd2dPclRvYmwzN1ozdHRTdFYxbXVBMTRwMFYza0xScWRVbzduSnhqYmN6RUoxSzdGMDZUbkhhRzkxTCtaR2tzZ2pvSXJGbm5BUVQwZDlXd0dTRUlmdmswOFBoSzdMU2x6L21VYlpkS29JUWdnUXdGVkp6NURBTmtjaWxoYXZBam1xSUliZkw2RWhOTzlkR1ZoVWZVa3hXU1AyVEZmeHhsckN6d3NJQ1k4ZC95clRDREFPVWwyejRTUmppWTFwaGU1UzYvdmFlVi9GN3d0MDlLcndJZ2kxZ0RkZ0RHdXpaQ0VHWFl4VHp0WnZzaDBPbFYvT3RiZGFvRklpVUNlL01rTEt5ZDFmSS9PNVRQaEU1dXFLcjJaK1RjMURRSjN4bUpBOU4xdXdoOVBnMXlGUnAwME5pd1EvSmVFMVRJdUxFVUdKdW1FeW9FN3I0MEozd3ZmSXVwYWtXemZhZFE1cXRqdlhvNGZyMm4yT05HSkdqdGVlSE5ITEdrbEM4ZXFCZk82MUVRRFBnMzNLMkZIVi9rNTRpSDY3Y0NhcnRIL05jd0x6SDJ5T3ZhWVZCa0RldHhQK0VmaEUrRTJIZ0hKVURocXgyOTAzU0R6SWdkbEx5cXRYaWx5cjlVZVRhS2RWOHdob2c2ZXgxY3YveW9MZnFjbGd0OWhvUFZHMmh2R0dnYW9iVnRjSWU1dGFkYXZ2L2RZN0I1UXlZKzROb3Z5eTlhOWg4T205TGcrN1c2ME1RRTl1MUFKajdEVE5xQUx3VlJaRkNjZWxpc1V0UXcybWJPc2hlZmZrNkY3SWVaZmdrV3pPUldMUk5ZMWRnSGRaNEtTR1RIbFV4RGpZNFIwaTZSdWtERm9ieHdKcllEMUs0bHBsRnFXMmRmdHFTSU9TVHdkUi9ISndCek9SUGtxMzZTV1N3MDJsMDcrQUdQcDRxMFo4aW9GVUxqRUlMRmhWOStFZTl1RW5iSUZRdmFIU2dNT3V4NEZLeW1XdU9aWXpOOUIyUDdNbml1Z3pDNURQZE5rQnB2cEVqR0hMcXNyTTROME4wemRRMTdNS1dEUjd2aWh4WXNzWTFJZ3dLTmQ0R2ZVN3d3S1doMk5od2V6S2hLbFA1dkwrSkZnMFpFa0hNMG13OEJPRENJTC9hUWZJOEU2K2ZyNU9ZKzFORm9QNXFDZ2tuNmthUXRCY1JsU2lFM2dNc2NpNmMxdkJQZkE5akUrSVFJemg2M1lGdUoxNENkVkNTNHRZUEozekdkOFFOcHRhQXAybXB3Sy9LekUxQWdUZXE1QVNLVFNsaThtL0N1VFZ4dlBxTEpiTUFwTWc4dk5mb0NsTGl2ekdCV3hVQkJmOXd1b0VJTldNMTdTcFdhbzhKUjhPOTZyNi9uMUtzdmQ5T3UzMVNqYTRRbFRvUU8yZUhnMFloRzVNaWVYUzNVeFowNGU5eFdUWVMvOEZQdzZDRlg0N2Z5d1VSWXdybExJdjltWFN4L09JWElNUFd4bXk0cFR0K3hOREk2YnpjdWd4VGRXMlZNOXNjdit6b3ljTWtzdDQ3Yk15WjRXQjQ4MWFSQ01jSUhqdnRPSnFrWi9DODdMNWtLR1VtcktqcmZtbldHU3hNWFdWdVZ3WTN4bWZyL0podmZZNjQzMm13NldpNGtJYms0dllWRkZRUk5lclBrNngvelNGSWRQcm9TYnZIbEtrR2FSL3hjQlNKQVd2NlJkRTZubmJ4WEdOb3FnbjM2dXZXeXlDQ1kzb3FKc0dDY3daOTNmU3JlaXdLZ3MzcjRPMUNmUTBuR0RYQmNXcmpFdmZjQ2szcDRSbXBzTTBuZ3l5b2l5dnBMcW5ZTHpQcjNxUDNPTTc0RXVTNGI5ZEJFdDdxWkd4dm9uTU0xcURacm9PVDJ2ZkJvclI4ejBYRm9hWXg2c0M4Yjd5czJ6Q0JiZUQyaXFHM0JOdUFlUERjemVWcTVYRjNKT3JqZk9RME1ENlpSeDlFMVlYRUIzbkNGNTBORmtzSTY0c0xhUWJWT2dCajY2NFBiVkdQNVpIRkdvZkJBU2ZVMHlYRXY3emJHV2dFdFAzWnRxVkFXYWtOWHV1NDBxUVZrbHZRN2JwQjBUK0RpRkRrSGI0NmU1K0d4NFUzQUd2OGdBQzk3MVZwV1RRcHJBM084WURsSVRIL3J1ZlBUMlhnMjNqQ2QxbnJIdzdzb3BGU1FsSHQ0U2syK2hqK3ZFbzFwOGNMa0xVbFpURlh3TGN1MlhYZ3d2SGUzaHM4STh2OUxZUC9xV0xlenZydlBaeDZmM3dDbTYwYnlSME9MOWFWcGg0czhSWFFHQzZONjVQMFIzNlBLU3VHYjUvcEgzWUh3QlFkUytaQmNZcXVZNFZZWlNsbVNnblFDNkxLdklXckZVNWp5M01kL0lXVlZEeVRXU0Y4WC9Ucy9ZUWxTeHNucXlyS3JlNXdJQXJOWnEzeVhCbld4eSs4dEIyZTc2cUltbHJOanQxeWl0TGREQkR6akIxMW9oRElKUG9lZHhJa2E2S3drYWNWRW51ZVBJSmNmNEpoYWIzMTJISTRkNXNMMkxUOWhDNFFiY3FBQ0c3K0dsVGZZNURUM2hjM1RvVU0rUGNZdlpyNElVbVNUWHBhc1VPenJpNFJlZ3ZFZGxPMVQxK29wd014Z2hSZk03dHVqL1ZCd0I4OFN4dlgrUFVCSjhMb2tHZDFqaFE4NzhmYS9aWTZISVB5QnpIRzVCaWxZam9mUEFvTmxzRTJIVFhpWG5GU1F1dG1CQ1RpQXNvdU8yb1NMbnNnM1M4ZHBmM3VVNmlaUjN2Q3o3cjlvdWliaXlEL0lUL0ZGOFVFV2lURU9FaS96eDFZR1V1b1ZtSmtNdi9iK2dXS0JGRkljbG1IUGQvSWh6UDlrdzk0am5DT2c4NkdxNWxnV0xTQUZzU0k2UG9qa0tIN050djh5QnVEOG1Hay9OamZZZGJEd05tWlNNWTVCYWZ1Y2pneUFKdzUyb1FNVnV5UVBwSlVSaXNPa0RpT1FWRmZydjlGSGd0aWxzV2tvbWF5dHJpMmx5cDV0blBhZStDV3JaSHQrbE5Zd0NCTE03Q1ZYcFFoeGw0WVJvL3JpM1k4V2wyVTIzbHJoelVQVzMrQ1BLa2R4WlR4MUdldmhSckFYajJjTG11RkNydElTeWI3MEMrTzN1Q0UzVzY4Mk8xTFdSYlNIQzJHWmpZSkY4aGgrTmQ0MldndVhXSDNKSDEvNmI3RFY5dFpQVlo2K0ozcmVSZUNqd3hYRHRWV1UrRXhvN1EvUmkxNDJBaDNUdFpTSGx0T3ZUL05IS0ZwRHNuQmNyNEJnbmJqR0dicnRQK2hJNFgvRkxCcUVUbk1pUitpRm1OeFNGcWtad3hLMkVjNWN5ZlhCamdwR2s3R001U1pxQnY0UkpjR0hyRHd0ZUtIV2NqZzlSKzBHQXVaKyt1cDdkWENBeGp5eGlTV2FNa1pLNlg4Wm93c2JMTWd5ZitBcEhxNEYrMFN6QzFyTmJGeEdYUTBEakRXZ0FtZWQ0c2oyTnAzNHRGaU9jTms5R2ErY2IyM0dlSFp1V1EwMW1WVW1waVJWTmFmT3hBNkZ5TS84c2UwcGQwbzBaZXp0cWhRb3VZSFMxSjg1REd5a2N3QjUwdHJDZFROU0JBQ3pYc0o3bWl0NlJpNE1LR0tnNWp2djFlVUxYR29DYmQweTV6M3FDdHErOHJ1b3Nza3BLZlNSSko3MGFxYlM2ZG1aU29oR0RDYkVreXpPN2lXMDdhc3haZWs2L1czUW1jK3NZY0RFZzhlTkl4QUp4OFBnZXRKTmZVQzlNYmc5NzRLUnJEOUkrVFdhc0VqSE12TjcrWHNCQ0NOYjRBOGVqNS8xNVAvY1Z4VEx1dzhTK25RK2JPSWhnY1NmNGhNOVlxZ1k3R1cwMVYxdklqbzh5b0VIZFhHQnBIelo3VnlFaHo2eVRES3M2dk4rRVNBYXdrbVNIQ296YVhmOHozOGkxLzFXVS9CckNxNFBKbVMwZWZvNkJ3SGdKRSs1UldqWVY0NFFiMlNjb3ovd3lBKy9sSXBmbXFpQmI3bjVzbkRaWUpzdGpxdjgycHVqZEVEK1dWaVVyV1N0dWNJMlFaWHllTVhwaVpCZ2c1V1pXN3g2YThOSWdsUFpnWVpQc0VQWElmOXp1TmZ5QWozY3Nod2dLQytJb3dUQ2I5eHZXcFA4MG83NTltVUh4Zk5QcWJwQnAxNENIU2w2b2Ird1dxL0xiT2phUjdxY3dqMU1TTzN2RjEwT0gwMFo1UGlDNmFVS2J0RDE5WDhCTjVZU0dWV1JwT0p4RXFsWm1LNTNjbytYOGl4S09QTTNFMC94cTRKRHk1K0htM2l1aVRlRjVtYzhrdFFQVXhWd2pBSFFUY29qdHIyeXZTdGkvOXFYSlg0aGptbE9HRk1CSGE5VkgrbkdDVi9wS3dZS2ttdGZaZWJoTUp1V3dmZDhFVnRvR3cvelNLYXFCYnE2VVpDdXU5eEY3NTY2Z3E5WFFJR3RaczRFY0pPVzVMZ2h3UVRSS0puSUJ2RStIRk5ZbkxpK09RTzBFSWVRN2FyWHdMTzlJQ2lQK3BIMjM1RG1Ld0NzWWNEZFZWRUhlOTNKbVpLakVpVy91TjQ1OVFjUnJMR1UwT0E0WDhmVStCREdQM3pHdFgrWTRVL285cUprT05md3I2bGpMbDNsazhCZXg4QkJ1bW5QY2YzVE4wNU1RZEZFWUIrU2VkVXMrS0Z2UGJZc2V3RDZkWlF3VWp1TS9LRzlGUzJ5L0tvOEpqelUrem5ORXpWVzVXRk5JWkZRa3gyYUVNdm9NNnBxME43TzdFQSt6NC9ENlRncTEyK1QvQjNhak1rNDc5UWV2SndtaFE1SHFXR0tnQ21UQVFhNElSaTQrN0lmRmhQUXd3WUVZcWZtUHhFNkw3K0FhUkdieGlPYTJybVFmRnVhQlllV0U0a013QkdpaHJLdGFQeDI1QTkwcXRqODJPcno5dkZnS2dxV1JGNE5EaXliYW0za0lrSzZHUGVPK2xwYk9vZDJ2eXdadE9iWmUyZEU2NndFM3ZWWThmQ3F5RUlsWHFJNUZBZ1JRQ0hNdDNHZUE1eFdFUnczbmlqcTBncDdvcnJHUzJpRjFwd1VZN3M0SUJ3ZHZJS2s1bWtQWjZ1VDZ6dWFLaVpkZ01LY1JHYlUxci9BeHhvYUNNNWU0Ry80eDhxcE96WENnNGpzbkJjaElyZ3dKRWlnbUhQTzhFL2xsVVRFc3FVdWl5UXA1NzJ2RFpNL0Y3Zyt4K1NheFJBQWlyOC9TT3Y4VEFucjFWMm5nNDMyWnluYnRuQzBRT2R1aEJxb2FKRmQ4d0NMdDdVVmltMTBQVE1YU2lYRE9RdzIyVlJocVFVclgwR01uU0VLSlk4MTVBelU0ZjhZNFQ0T3ROTTJ5NWpqeWwwOERGZXcrYWZWVGpvdlA1Qm9JU1UyRTJHQWM2Nkh4YUh3cUhPeVdvRUFYMHBreTN4bjI2T3VLM3ZqcGJJRERaczBPOHpjRGc1Q0k5c0N4bmZVdG1RRXJXc05Qcjg4K3NGYVRvemxIRUE5UVAwT3ZTRm1qblk0RTFNQWl4cC9rNytZNVFYRTRwQUZNVVNtejlzTXhuU1lSVm8wSXU0ajUwVllTWG1aMGI2bDF4b01ESG9FN0J3NmwyWVl2UFoxVXNWSzBLRzhsNUZuQXlxTG81RWNlSjVQZjg5YnA1L3MybE1mSVdHNmdPMnZSNWZFTWhLM2k2RkRhUXpRRVpxOHJXK3JmS2FBQnZ6akUxbGM2eEN3NXBSZ2QzaVdXLzJmYUlaUW43NldDcEJzQjZ0bm5GQXRvOERqN0pubkNLbXdEQ05iWXJUbEFyQXJpQlpMVStNZlVqNlBOR3JVRG03VTVJV1A4QmZjYWdKcFlGaFUyOXRGK1ZWZnU5WjhkK1RnUDllOFpQL3dWSkFsZDJlSThJejFHR3p4SEVUa00vYTVwbWMvODd2SThaRnRGYjRsa1k0Y3NwNDNmNEZDZ01najJMRVJvbGJZa3RSSmQ0dmowb1ozUjRDNVdSYjZiZWZJMEV4b3lwWXliMXBxZnRNL1kwa29HZmlpMkFCSEVSV21HZ29IRGxwSGRyTkJ0cElIYWVsa1BsdUNGZS9OSThlOXFrc1JpZHY1RTNCazhjK0RGUklndUJ0VDVscnRybURmd2F6SitHNlFDektZd0Ntdzlrak9nRkdlTzNFMDlMLzl5MlZTcmdlRThPWjJlYm1wN0gwemFqdE1rQUNsWDR2eTNNZzhiUVFXeTk0SHE5QXl4dzBFMTdaa1JUbTMyblpRWVUrSFNscmdRajFBSGV5a05URlpPK0M3VnVrTjhjeWxPRzM4NGsxTXNXaXRFanBXMDA4QjZybXIwMG5MT1dnMW1NdzA4L0tsQ0hnZ1hteVd3Vmx4ajdyZ1EzMzgxS1NxaUsxNytvSDFXUDF1VEJ0U2lvdEwwbzRJdDNrMWpyaVZ2VXZmUTBiczRvWUhhWnZJd3BYVEtGOVZxY0lLOWptWHRMeU90dCs3WTdKMDd6aGJ4aHdSTnFDRHpOTGhDYlFFWVVBSkc5SXM4SW5Xa2sySmFOWkJzNEVVT0ZBUVdtQU8vNmxJV1dqNnFBaVZTVG1sU1JLWHZsNWVLYmVyeVl4ZGVuYkxSVERWL3YyK08zcmhLV1RuU0Nja0tXS0NPV0xXcHJJMGVUamJzdUxKdEFUNmtMWjRkT1F0a25rcG9vUy8rdlVmbkU5ODE5UzVhODZETEQ1WW4yenZNQ2dEY1JCSllVQTFZajBCOThlSzJXN056Q21zRTNONHNxZHJJMU91VldLY25wMUpkWStvK0FpVjJmSjBrREtaYWwyQ1dkc1BabmtvYzZLWEtQbk1lNUtqZDFXWHY1WUNwMXgvb2g2TEgxNHpLcGlFbFdybVVKTUtoQno2amM1RU1IRGRsbXEwaDQvc0JyM2V5RzdUNkx4MStZT1pVTVcyVWJCUUZGM2IxZHVja2FNcXgrY015SHVUc1I1dW12d0NGYVJLNkVKOVRqK0FlcDZyRlF4bHUyeVBxYjNHQUVvZm45S2RQelNpME8rY3k0bVpLb3IzYXpEK21kOXBYaGpOZXd4Z2lBVFNzVkR2RzByaG5KR05UYzE1RU9SZXRvVXBFZFVidmx5djJxUm9wa3ZKRURiTk9ubjFNd01ScE5WWlAwejRBREZodkcxc2NuaS9lZUlvWU52SStGdmY2cFVRcEkxRGdGaktmY3JTckdON2o4QUNwR0tUT2ZqdE9pYUpqMk5jeFUvNENTamV6ZElLZThBbk5HRjc3S1ZGRmlKQVo1bk12UmFSWXVQZzNkS1dYS1hkcTV2STdIajhIVFpSdVo0VnBVT3RUMDkrQVk2RGJqam9rUzFqQUdKcEcweGVVaTJnL3c4cXJJd0lsRjJoajVpZXdCQTVZam83N09odjk1UUhqN0l2SXlhemJBWDJkbmhHdVJwbXpsTlM4SEN4TjMwUU1EekUzVHIwSEIxVWVFTEVvQmY0dUVHd0YyZW1VN2lodW0wRU5TMEVNRGQ3U0tzS0FBSzNqMUF6YndXd0JsQnFYTmlieUFWQ3dxL2ltdmRvdzRWUWRuU3p2alhZaVozQkxHOXNoT0RDVjNDZEYyYU1md1pPcXpVV0YyT05rb21BTVpyRkRkT3duNWNQL09NcFYzSFpTd3VjeHpXY3RVczZGNzVRcExaVEtvbW1jbmVabzk0YnBhbWprMGFEbVBlL1Q3ek0ydXhPQUFrYjJyVkt6eDU1eUdYbFk5NDUyTE01T2txcSthNllFaUNUVkVTZ2N1OTB3ZGRmMVEwWTJoMVNSdFZJell1UHQ5Nmc3blhTSDZMdzVJeXg5YzJUcy9lWnNwUEhPZThZMlF4Mnd0TUNjNWQzbGNrK2ZlaTM2ZUFMUXlEcWFBdTIyRjFReEpMM0NvaSt1TEN4djd3N215QmRlck84bFdwRlUyNjRmcVJkMjNLYlhrNTBlUWw5eXlvbnBMbEwzVHZ4RTgxaGZBYjloY2pndXpNWU9oTHlqMm11cWtuSkRrRDk1RTJ2MWZUWm5WcDhmWEtyUkNsKzRhUXgzOHVWWEhrSlNjZFNwdnhuUWhqT0xydlF5MVpwZ3h5Mzg5WWlwL3pCL1BUc2o0djFpOUs1clRsQ2k1RDZqQ2pqd2lnbEphV2lISHFPQytDTVlxa3VhSjNlVHRQUXMvZVVOYWx3M002WjVlNnlFclJTSUFoVWJBeHo1WTlCMGdHdVhsVEcrNTVDWEE3cENVOUEzMnEvYlpRNjk1UlUrNE5QajFiUFAvZ00veW9FSTdvQ2M5cHJPY0Fmb3RxTEphbUFYcTNJdndRb3M0SW1HWDc5UGxkOEo5aHhvcHduV2FTa3dWc1djTkNQakdtcHpVL2F0YS9VdU91a3lyaEFqSGxURGF2cm5WeDl1d2p0Z0ZiZStIK0VYQWlDc20yRERacHJsR0xXenhwNjNWcEtxWXNBUEVIQlNHWGpmYmJVOWZSMGtjeTVCNEtpcUQ2bTFiM3I4eEw5Nkg4bzJIVS9xVHdmYU8zTUh3WjE4OE52L0J4b1hzdUpqZFVQQjVPakFnMnlsQzIyVm5vSzNYbStuaGphMlZtU25TbVN2T3hlNUl2bFhiZ0F3aTlaaGREajRJTWlueWxHTDJWZmpIWmZCL3prYWZNOTVUV0J3bmw4MCtiTFFETWphcGhqaFR4V2J1YUZ5NmRIeVIvUE1vWHlXbXhQNnl1K2RubDh3VkJ6ajIxc3JILzd2TEFhWWp6QnQ2T29OenJYcGQxTWZ3V0FYVWE0MUVkZk5kL3M3c3JnUnYvVUtkb1U4MVhjcWpCUmswRXJ2VGYwNFJLTW45MjU2TDhTWncyZnpob09NcmhTaVQvUnZtR1NzRmZrS2tYRUZRcloxRWd1eVE0Wk9zUHN6cUNQUzFoMWhGNVVhMmhqbXpRakRoNzFFRmw0d2NHK2c4citTTnZocVd4akMvSHEvWjZReHN2Qys4UkZTeUxSSGQ5aDRGeDhDRzE3Q0pCQittVXdKSEtlY2NRb2ZCYmp2L1E1NnFpMW1KSlQ2OUFwYzdrR0lNbGlXVW1jYndTWW85MVZkOERpTmE2d1E5Y3dGNUo3QUR1U3FiS3o5M2QxOFp1aC9tOXBIZnhpQUxEajQxb29GNUJrMHRBanVTQTg1ZXRqU1dDZWxENFRNUS9FakQ0Ym1lWDhzZWdQdmswUnNuN1hZR2xvWmRqNXU0eU5VYWhKLytraCtZRkduTEFQby9TdDIzeWZ1aGpiNm5VZ3BKNHNlRUNSL2ZaU3hyTWJQTzFIY09PSzlQaUJtcUVWRGl4Ukxjekw5M2RNa21nbVc5SXBQd042SEp2YXVRdEplY2JqRGNKTThOcnNuL0xPeGt4WEcvSHRYeExScXdqY3FMQjR5QXFsanU4WncrSW1oakIrVnFqK1puay9UQmdKa0xIMWlQU05WdVhBSUk5aVNRdDRPcC9KVkJKNFVRanB1OFZLa3ZWMDRQVy9Bb2Jyc25iY0Q0SnluODV0b0lDODE0b3V4cnVlOThxc0tzd2Z1eHErNXBRUXpnV21ob0I5NDBIZHhyWHlpdnVKeGt6TGdPdEhobTVIZnlGR3FnNzIwU3lOWUhvQmw5b05qcjVEcDdPa0NIaEVSY1RhK0F2Z3JNQWZSWlQ5SzBEWlp6NGlLTVhjUjN0ZklOeXpNanp6Z2RwVy9wa3RPM1Z3ZTVWd0VLUUhSSVE3cnZMZEVXbVVWM3IvNk55UWQ4cFptVm1BOHFWbjFNbU9OTGh6WHNwUE9CbXZvaHU0SGc1U2ZTbDU1dVJrM2J5UWlwMTM4end5M3E0UzVGQ2FyWEVXT3NBc3I1dW5pNCt5TVpmS3k4dWx2YVJzUUR5d2FxNDFjMXRVMTJUNm5XbUcxUHdVeHFiK29OTUFhMDFPamV6djZ4ZTZYc2h0Ym9LSHRxTEVxL2NPaFY2THJrOVB5b1NITWR2dGd1cmpCbmpMSk0rbUNBbnR5cDhEeTZUZ3ZGKzVhd3RuYWM1NjBlUmlBZzJWUU9SSWRncEp2UzVGaFJYdDdhMGp4SDhKUjNEWW1oYUhKRGFibkh5YjdJMXk4WXlCM0plWjJhb2JSUEtUdDNZT2t5Zzd1am9UWTRyUVFCSm4rWkIrbDhubGpYMmZWS0tzZitUNlRuRHF1SmVrd1FMOFBaSkc4VVVEVE5ONmVkUjh2cEkzL0dMY0srYTA2dlVTVDh6ZzJydE12bVMzb2locC95ZkRMZkozK0RRTUtmc2hjK3pPeklWeGc3SWptQ2NSUjc2Mmc2bkNrUlJWbmprdUdXS3NaL0NlZ3BYNkg0U201OWNxV0ZvSE55aytnRkFFZTAxeEk1T29JL1JnQWQyaUV0bHlCNWE5QzUwc2JhcnhlaHJQTHJPL1lMbjJKbHhGTG9NVFdGNTV4QzQrbWV1NTN3Ymc2aW5kUXlWMm9lOFRUOW85K3JUZllVWi9ic2dzSXJOc0tMaEoxZVhaTDFtQXlSd1Bvc25hSW5BMjhydFhPKzAvNzdhQUZTNklyUGt4N0psT2RwV1c1QWxING5CTHNPaGRqSUdvdUM4bjNLb1JiVUUvZ3UwT2UzVjZyVjJ6OWN0SUw1d0Y4SkcwMDVMc3E4L2l5UmJCZldEb1I3QVM4S2RZTHBOSTNtekZkRGxYeTR2WUwwSnJ4S0VKUUdBSitEOC8zUE5pbTNET0Q3V3BONXRRTFFiS0xVOERjeXdGaG02OWRHYmdYSW1wQXFDa0FXNFEvTGx1UnlZV1FNVklDSHV5NjlNMFVCK1hzaElSa0JYWTBkejBFL3lIbDNibDdJRzdVRFByOW9WbE56MVhqcjBYbDVuanVLVkNnTG1QMXVlK25kZ202dmV5cXBTTGUxZDB0T2hMZkFpeHpOMVVtaVJ4eWZMeVdTU2pDVGFKY1JmeXRCL2w2Q1h1aDYvVWdQZVVWYzc0T01Bb1RCTlllOUFSS1ZVbDhhVkRERi9IRHF0djd1V1dyd2tJWE0yVmYzNmROTFlKZ2ttRnRVeldQOFZRTXJoKzFqVHhCUk9JcXBKc1U1N0Ezbzk3NFJobVFwWHZxeFVOa0RMb2xBS01ISW5kanlEcmkvbUNYeXZkOTd4ZUJnclF3ME51MmhWbmg0Tk9QUGtPQ0UwWDJOU2lXUVFJTlYvVGxOWkRFNEc4VW9oNkFJbUd1VjlsM253YXZNTEFXZERKTjJBNGJIZ2MzNFU3VExzVGdabnpSNm9DVjBXK3MxcXpjSFBmUjhWUElEeld2dGtmQS9OOGFKd2JNcktxbjV4TDZ6czE5c04xdkZ2OUxZTzFvc08vQXZuUU9BWGNBb0Q3TzlZOHRoempLdU1tdmdyUHBiMWE3S0JkMzFyQlVia1hpNTlHQmkySkhucjhFdlFlTE9hS08vMTFtb1Izck14NTBlNHp1emN3ZFZrODlCRDJxb3dMelJiM0hPdEV2cXVvTU1FTVZ0NTBQNE5QNjFENldmVTlQaVE1NVdidEZjQXpGOXhRRVNJNGVtN292UkxKNDJ2RUxaM1JId0dDbzFSYk9aY3piNzQwZ0IyKzVURE93cmxMVnFSVmMzaloyT2xzcVNvcGNPRW5aQ1lGa2JpcVNKdmg0VVgzSVkySWpCMlcvRDhTREtJSDlCZ1Z3VEx1M0ZoU1NCSzJkcldYNE9aTDRRL0c1LzJTZ0x2UnZUMGZzSk5UdFpha1A1WU9PVmt4bm5td0Y3UlBUemd3K2JaMmVuaW1XRERMMjhSNVVyOGttYm1ubEFPK2tHS1J4NWN5RG9DSGpJR1RwL3d1R3VJdUV2ak1pS0RSWFlDS1BXVmdBZGFUcWRjQmxGSnUyblFVbFdhZFA5M0NRbzBRV3B4UndUU2FjZTFRRWJRNnZQbHN0ak9pRFA3UEZpejQrdXhxeHBucjRUNHlaT09hNVFPQVozTHJvVHRkR3NyNjhYUFVDSWovcXMrRkpQaFI2UFNvOE1YdnlkdDJXREFhaExOaGFpWk5TRW04bG50TGl0N0VtRFJiKytacm1GT3UwUFJodXY3Y3Fnb1hISkRxR1FzcmxMRjlQbmkrc0cwdkMwUVNQditIeFp6ZWNwajRwY2VUcmxyMzd3ZGRjUCswU0pxSTA4VkppWm1iZ3hUSnFMZEVEdFczcXZHd1dWT1MveGltU0VkczBpRjF4bm5QdjhhL1hIYTFzS0s1Y1E2Z1BOOUJFc2UxYzRvaHBrT3lQcGl2QXZSVmlCemM3aHByYkpCQVNXYXQzbTRrdXU5ZHBUR2VLREg1TVBBclFaRDVRdC9idUhtelRmS3dpcjZHVXNUZGRuRndIa1A4RU8zZllrWGlTT1J0UkNKMHBLNTdDR3Y4QmlRUjg5NHh5K2VnVU11dmVGK3BSN0dBbUJxNkFncmRhV0M5cGZGTjlWeXhEK09rOExpZ3NmdjFKZWdVbDgyNTYvMlhxUnlxWWs1cHh6WllGVDRTWjhZRXlmYTQ3ZFBuUXZmZjZBUUQ2U3l3WDFYSzZ4QVVYMUR2bU1hUVd1MFNaYWpGcExuOEluK2YvYU1BNGh5VnJwVW9UWWY4WGdyNkFmSm9ndHhIeEo3dFRHZDBydFJMWHJadXpaQ0R1ZmhpVCtRc0NtVlo1NWx5S2MrU1BmcHhzOUFjSkpBZE5TTEY4QTRLQUFVcWxWaGxoNWRxMVBaeklibkIxQVJnelprL1VOR2xjTGpBYUxqWlRBQmRqenJNbDIzOURjR0ltRmFLNFFSWFRpZW1UYTI2K28yQ1JMQVNnSDFlbkVZaE1nWlhXL3hTb0JsS1BMOG8xZS96WFhFZGpXS2NPVjdVWnlNMHc0MzROZkIyMXBKSVBKLzlNKy9iOWJYcG5Db2ZlWkxOQ3RFdGRBM2NSWVdJS1h5NWVFMklTdmdkVXhNMllma1dxRmwzK2Z5RDkya0dhVCtKZms4SDVWS2Y0R2pKbm9iakEzQ2ZGL3VSblhNWmtKdFNsQWtseXpGZVBsUDliZGVhK3czcVhEdkpQcWZWQ3BHUC9OTGM0VXdpSnpHYmozNDZORUJKNGZzVFZmN3dhQXZqQThxdFkxckNGOVI5bnNKb2MzUWk3RjlNbCt5UzBSaGNSYXdFQUtSdUNGVWNzWWt4SWVjbUxIYUJEb1JRYzBqb3d5UUpmb2djWlN5MGNxTWdaNmdmQ2p5UWRHU1RmS3lZaXRCMUZiTERSVUpLM1dhN2RieWRRbEszbEZFWUd1OTNiaVQ4WGMzWU1Td1Z6S2cvODZ3NStSTUtJK2t1dFRySFNXcTVZWVcrd2NEYzI4b09yb3RNK0pndEY3cHMwRVdxclNaRmN2TFpjQjRrMUpvSEZYL0xEUVo3SVlPMTV3dzlmTGJVNUpiZWt6d3VqdjVrMXJLa0NLK3E0OHVXTXhnQys1MHA0OWthMWgxVWVjdEgyS1NhQ25YVncwajRZeU14M0ZndldTT2VPNnQyUTczQjdDbW5TOVhpdWFIZk9SMUxEYzU2NWduSTRLUDJHdmI2bG1OTDVjWjZaN3pCZTJQQ2dlZlpINVlQTUxaL0c2WFNKdjhWN0FqOERiWFRjdW9tL044b04wSTdaUTBUK2lMcUo2bEdjbTZGNnNldGU0VlJQNGdHTUtPK3g5RloybWxqdCtlUzE1eFpCZ0U4ekxrZGZSTUxGajBGdGxzbndiNVBYMUhmcC8zbjlzdDhucXczNU82WDVPdEhEK3IwVnA4bnN0bnllN09mSjZwTmZKMzQvUDJzNEJlL2F2NzlidnYybWUvV3gvaDl2L3dmWXdCNXM1UDBmTUg3UC9yWWQwR1l5YUxlWTgzVGJqVmtZRUNwMTNVMStVbDIxdlRnQjVnM2hockxHbm5wK1lZKzhQbG5Kb3RaZkxYUzZEVWlFMUNqc3VZWkljS2hVVTliOHZpZWtPWnZhc3orSTJVZUtPeHhnWjd0czBoQ29Iekg1OE93SUE5L3c0T3BlS1pKTjF2a2FZY2VheHgyNUR4UTBrSW8wT1dhN3ZHbGJrTGtLazd6UDlDb3VJanFkMnVtdUF3RjkyUzhNSmVSbEdONWhIVHY0Y0xLeDZ0KzQvTmxBMFhiV2RoeXorZ2ZnWERMenZaMGEraDZISUdEdmRSKzJpeUlpYnJyYzIvYVFSNFNYRDBhdVljdmNPcE5xbUdlTmw1RGlRa3FSN05GOUhPSW0zM1ZscGcwUTRjTkQ5dWJ0eDVCbzRtaC9veEtKV0lPVlJ6NHJFZ0pMU3ZJWDYyNkFmRkx0V2hrbk5neEZlQzhoa1BNVXcrRlgvbDlmaEp5a2lZM295Sk9KNEppVjkzajFmRUZhTlQ3ZjhYTGlWOTFZcHMycktPb0Y2VEc1SEp0WklEVHZKc29vZk1ZZzg2Z2FzdkVhbWFFeCs3RGtJZjlvaE85S3k2d0Q4NjJWMkN0MzVGV2V6d1JndzdFdWlIdzczMkIrWmhYRWtYc0ZDaVBzbDhUMXJPOTUwN2loOW1KVWx6RmFIbENXYUR4Z1k3NjcyM29FYmF5bmlwZmVLakYyZFRhY3FaZmpmWlZXekg0M0srd1ZuaFdnWENhYlVYY01vT2cxYUMzR1pVS1ErbG9udGdWL1QzNi9OWW5OdGxMYVlacmVJMTRsbEhjYXZueStqaUl1RUNnUUhhK2Fpamd6bGRnckJZTGI4Sys1cGdXOVpjV2s5SFFRakx1WWZ0VExCdzl2ZGhPQ01BT3A5ZVEvYkY2cHlINmVVUkQ1bEcrc3NLMEZKVS9INm83YmZEaUlpRUJwTDlEZ0hjK2NnTE02UzFENkZsMmNnV0pGekhZMXgwaVhNazVNdGh3Tmpxa0VBVStXTTlvczhEOVFZNiswbldYWlIvUE82bFNhS1ZjRnkrTnBmM3J3Q2pDOTVQamNneWpBbFFpRWVKWWlJSVZBc2VoaG5NTEh3R3RCSGVCQ0NLOThJZ1NrU0VxcWdMekZubnVlb3Q4U1pra2g2eCsvT2xLWlpCc1NOU0FxbzZDVU90UTJlQTZCMWZ3aVdSMVJyc1pieGFDOTdHdDdQY3A3dE9rQmVWQm5zTTg0WnBxU0dKZG9KU2Z1K2QzeXFjZTFVbG5RSytnd3NhV1ZDN1EwMXBLRENjYUZEL2N4ZVdQOUwxLzZtRVdldnc5NG1yTlVoYmpLNHVIb1pqR2ZKS2svQjBVeDE0TTgxT0plbDNTcjNxMklUN25ta1lERlpLMnFZbFc3S1k0bS9Dd0Z1V2FRRUV0VEd1VDBkaDVTQnJJaURuWXNoTGdRZExYdkR3RllzTzlGY1dKTFVoUVhuM3MrVjlaVnlTRXlsV042KzdtaUZuSnQvakVqVHJacFRnSWIwSis0cjFKb25TK2k3T013aEVyWDZacE1VS05HazdmOXJjcHhMRXFvY2hqKytHeTV0YmtmdExFVDR3V2FHK2o0SDRzcCtWL2dVSlp3NDZyQTBOWVRCUlZPcmVDZFFlTWdTLzhQcm5VeFUwMVEzYmFQMzEwNlZDYnVhb0RIUFViSW5TODM4TmR3NkpHeGhyRjN5OW1HVTArdGtWSTZ3bFVQb0srbldDajk1emowMjMyMFdSYUUxNFVjL3pGMk1mRVN4WFB6M2xzSTNtZThMV3l0VU5nVmN1NE5BUTIycnFCQ095S3lTbjhIcnVxNGZ2dnFGU2w1bFZEaXJ3Z01aYWJJdHA1VlUrQitMbmJmd203ZDVJUU5lTm5QR0E2Rnd4c2tvU2hwbGhMRkhrUkFiQnN3NzJTVTdSYkY0Uy9yZFdpOCtFMHFERHYxWGdhTXVwRVJTRkcvOVUxZmhwTGN1TUxHSDQrcDZEYWpvaFIzbTFuQ3NqbVUyU3UyRUZaTWZHa2RaOVpUdVZnanpXVWFFRmpHWTcyekczbzRRUHhCaDNmRysxYjRQN0c2RWVjOWllODYzSXJsQ0tPY1VJRzA3VlNubWhOVXJhYVptekMrWjd5eGkvZGVZTGZ5R3l2OEJHNVZEZDgxTi9zUUdmcDQwNTdUd3lENExpdEdqS3R3b3p2d2xMaStEZGhwRk9FU2todW9nYTBnclo4WGRLUEdhWmQ3NDUxYXltNkNBUUFEREtxdGNuRHZ6YmYvZWtkUEgwRzFkd00wTGZ2VGtJTnZSeGZpazZyTVpMaFN2cXp1VFlnM3YyOW0xcTFsYnRmVUp6QnljTllwRjhid1NtQjFTeUFUWVc4RGdSTVVRU1Yvamk0dHJxWXN5N2UzVEtQbEh6VjEybFJWa2dzYU5wSGIrV3VEb3p5T0I5cEpjdXBLUE1GUFd3NnVDYzJOQ0dJV2NHaE1QUmVBcHF4eGFSN2VyYmdmdW1HemhYc29PMUY2aUwwVW5wM09IZFVPSFpoSE0rck9aQ3FFc3VHbEE0TWkxTFZZTC81dDc3bnJZZGdGVXliUmt6TnRPbzFUTjczK21uZ05nTEtkRmF3ZGp5YTZNRXRQWTZ5eU5MWEhMMmM5b3RLS1NGRUJCRGZIdzUwaFFadURpZXI3ZEZRQ1pJUkdsS29zMTF1Q0I3NjM0SVNBVlJ6cDRjTEh1YXFkZ2VZV3U5QzdLSm5qYVR6TVNEZTF1UXlzd09PVTdzUGJSL3NDL0JxVDJqWm94dzdVbjFJYzRoR3paYWsvMHFMTWxjY1R4MHA5ajEwc3FJbDhZNFh5V0xrcTlTdjhCekh1ZFBSeFQ5dmFCMkszOFNNQUEzb2tnUE0vUjZsb3p0a0FkendQMVRHaFc0VENHdUdKN0dxeTl5T2Fyd3lnbjBiSGpqNnhuZ0tTODVVZVVWKzBiejlCT2dVYkdvVEJRMHl3SUcrdDloSGloc05jdVZmNlp6R2pueEFJZTJ6c0tVb3k5dnFTTXFNUjd5cUN2dUhXa1BSZ2tJam5hbGpWdmNKY2JEd2k5enJPNzBlRHFaTm40bTNzWnBBbERxV1hWMVBEQkdub2Q4dkJ3bHBtTCtxVll2SUZ2N0c3bmR4bHpXYTV6STlKYndBakRRaW9xSG9ZcThYc1dSVy9mN0M1eGxVTHM2ZnJYaEhndDVweTBXaEU2dHBiY01NSEpnVzBqNkRDV0JSOEYxYjdaVmcxMjlaMnd5a1oxRktER1hYZWhmcXdyenNCOUFMSmxHK21LdTVSMVNKZDFLNlRRQzArSmxYZ2RLYXArMWpXdEs0QVVkbFR2WHBxRHhlVk5pOG9URHA2WHEyKzRmcFV4dHByQUE5ckVRNXliM2JuWkVyMG1rUUZSblAwdGFpcnMvRFBWTWdMQ3Y4aXlWZndFdmNGenMwVHVxaExlTjdndXlsMnFsOWRZNEhTVjNOWC9vajNqM0hVbk1qeFZ0bHByc1psQUszeVVwTVNSR3JocWNjNWZRY1hmenN5bDIyOVhtVW1CMjB6ZGZLTmFaR1QwdzdhVlJZN1l6YjlTVnZKY0daSVdoSGV2RTNwbUdGNE4vZXRjdlVyVkVMcjUwaWdxNExoZldQNWhJbUk5L1dWU2lIMGNRUVhMclQ3Q1lIWkVYbEI5YUZ0VVdIT2NFNTMzajRBejhTVGlzR0FWUTZOV2dFRWE1TXhUVzZ6QXZtTy9ZdzBObEFpRmRieGQ0dFNzeVg5VzY1YncrN0xndUdycWZyMWF6WVJkUHlTcld1c09rN2JtWmNDb085WUlxNzErK0JoYk5RQ2dJaWNDZUhyUHdTTWxqSGtlaGpJaUFDTzBDNHhncGk5bklKWVZiVWxnRFJKcHU5eXhxUHh2KzdjU3hnbGxDUGFnelRmSTVJcFpDWGx2VHU0OXFQeWlxZ0RyUXJpWmhCb3g1bnNXV002VlhSanRoMFkwd0JYNFYxV20xbzJ3SVhQcVpSK2QzMTI3YlFCelZDRkhrSnMzcDljek1jTllxa3RRbXNiZ1QzYTYyZ2NnblliWXY3VmVhS3l6RWZJNnhxSVRGK0g3QzAvTWhWUm1LTnIxMi91S1dWTXNBSFJqdW1RVWltQVZQb0R6cVEvQjhzR1FVaHFNcGcwSXg5S0ZxUVFLcUZxWGZvTVNaTEY4MSttS2JTOUxIWUtVRVFqV1IxTkhYRnAzai9OOTdwSndlaFhiVWhYTWRHeVdkWC9la0ZnWE1Da2hTc2x5TVhSMVgvdVhMdTRCWnNWKzVCZnM0Y1YwazVwL1k5c3VMZ3lyUGRjd2tYWWF2bHVoanVLV00xaFhFV3JEak5zSlRkRzhDN3Uyd2RiN2tCY0FObFdyUlVqSWpKWGNNeEZacDB5djVHblFKcGpLaHNkQXVxOGZIcy9FcVphRnlxaWlpWFJmZ1R5cm55UXNVVDZWRHhlRmNyRXpjZ1NkNlFoNFh5YWsrTEhXRVJiTGNYZExTUHNEN2twci9xVkRiN09jQjRmTXlMZVpHR0J5Z1RNTFZ6UDdseklCS2VWVmhrcFZMUVJWcitrYlQ1bDVnR2pMM082Qjcydno2RHZvZWFQdGh5dnVSeXlEU2k1OUVlMHcvak1RYTJNaFByY3JIakRLTGJiSld5YXRnWDkyTTFNV3FLNTVoeE84VHBwdDY3N2lWSWI1d0htMThrOTdSRVZlZldTNXJ3NXVQSGR4dXJLdmhBTG5GWmlEVmlKTXdkSmdnNlhnbnFPdW5UK0l5QVBhMFRaNnhXRGJQZXJoeGdqdUlDZzE3TlorM1hzN2ZmM3daTE1qeGVxVWxPbnNJT3UrQ3k4TDMwcFF2V0FjWThBUHFQUEhjdERIOTQ1M3Z5eFRQcWNlUGRGSHQvVVFLN3ZCUkVqWFVwL2cyVzlETVJUYVBxRE9lcUoxZTd5eXFpakNPU2lna0Rsc1NEZDhTdGU3Y3dOd0dVL2MwdTZWSU5JZEwzVVByV2pNNkRJWVhhYkZ2VTZyNWxOWGJmcFpORnZCdHlhTWhGelp2dmliQUhqSzJQaU5lU09jSk1KaGNHZ0IzaGZLdjlQcjNTc0h1SEpxMFczVjRSZnA3TEZEUXVzb0dsa3VoVGtpYXE1cHNlV3VZSGg2aGd3cThSTG44aGRSZExHZWZGZXdYM1ZyYmM0YzN1U2s1U0V3Y3ZWRlU3elBkd1BJQUlzQjlTQklVY3NUYzZMa1BUcmlZUTVMM25ZNTF2bGNuOXkwTHZ4dmNjOGl2ZmJDMHUvVGNINmVmaVFXbzZXd1ZBSk83ekJvbCtRSG9LTFR1S3pia2hYclBTaHVRSTdNbkZXeXlRbG0rNDNWM2hXQ0E4YkRNMWprMmFKUGxQd2FwUW1sUlpUWm00ZVgrODZxeThNZWhOeGx1NTd0WXJyTzN5eE9EZXN3NnBjM3FGTlpaR09NWEsvY05IdG4wM0M0dDViOThkblV5eEovVXpZbzlUWXV0K0hyeERZRHZlaE03SU5zSkVZL3hkWTd5R3BFVFh0c0JQaklEYzRka1kvdzFuY2pXdit5M1JUQm5Wb29GY2ppY0pEMlZiYnA5RFlqTmZFc1lyZFVnSzZ0OFg2L2VhWEVWdTA1VWxBMjJQeG9QOTB2R083SDdJSHJEeHJ6UFZpeGtGRVIrYjFDTE0wT0wwRE5YY3UrQ09XcDBQQVMvQ3BLcVZ4RDRuWU1XMk9yeWFYYVBNdTFoM0ZDSzMxTSt3WDBBRXhtdmtrcnRKZVY2NnMveWlhMXZBMTQySFFTY1RqWmUvQnQ0UndyVHpLb0FPNGlhWlhoYzhsaVFrQnNXZHU1czAzZlVJcW9GdEE3VDBBUGRqMXc1d1lia1VqZm9EWExHUnQvQ2VRZW5PSGdVMm90bGpkWmtkbDZWQVdvdWo5S0FMRGJUd1AvTTNqbXZ1ais0S3U4ZE5tWGtjaUJKYit5UjFrZ2ducCtZZFRDMjBlMDREVVc0dVNNNlJRRGo4WlFxSjBSZXdwcW5GUk41UDh1N1F5V2lZVlU4YSs2bnZGc0pFa2tZOWtqdStJMWpVeU9mZ09tYTdZWDJFZVJGRnVCaXpDUUtpQW1PT0E2aUN4L2NiUERyZ0p4UjlJRXB0dDBwK1VCUHp0NGZuMFJKeGdJcmJkQ3hpQ0RlY3VNcU54U0V2MnN6cFJHRWxYTWV2cFByQTNmcGptUVo4bnhlRmk1NzJnVVlDUWZMNUc4SnFwajlUUFJPdnNQV1UrNzdHZTJnSUwzRTQvOERON0lhVzBTUjV3WXhFZ1dIV1lnNi94amlpRG1tNnFnS0Z6cit0cnNteDVucHl5NVh5YWhVQk5MVjRDYmJsNnpoUjl3MFEwTGpmL2ZXb1JMMVZJNXpYSWZHZmpaY25KVjRTTnFXNFF6UlBSUDlOckR6NnVPOXQ5V1Z3WnlHa2JLZ0tuN21wNmdUUG9LMm9KUEIxdWkxOTR5MGlNOUZoMGFaTXYvU2hQMVNJWkZyUlBVUGxURG84ZWl0UFd5K2tDQlowU1ZGNHRIYmlzNC93eVpoK2lUYkk4WklOVi9JY1VUQjRlRjNSU3QvZDYrMGlvOEpKam1RME52WGV6NVlPYlVHMFlkYVZWZUtJaEJsTnJEbXAxSlBJWE5rK1FxcHpzTTlKQ0N5RFAvQk8wZVFSdnNQaUVlczhlZGZNd2RqM0k3Wmh5Mk9DS3pBaW5kUHBDcnA5empaK05DalV3V1JhMVhXR2U4R3RNMGl3RWhJbGwzMDRwdWhIUEZaQ1V3c1M5d3RhVElaOHEwTnZUbWpWU3VqeEZGQjRZMTNEWjhPR0hMQ0Y3MmFGUW51VG5iYjFlNFlXY0E0VGFoeWdCZitzc1ZiRlQwdGtFcmh5aUdlSTVRcGtpbTFvUGhFdll2VDRRNFJxUExaZ3Jwb2FhcnAzWDZlM29iQWhsaGwwZXJmV0Y3WnRJRzFqYVZQSDlxV0dnSHN4bVZRQWdkaThkOGVwQW9jM3BkaVMyajg1TGtQNUdFRlN6VGkwRTNvRHd2ZndvdlZkWGdLNmtmeUpmSGQrd2gveWQvdXJJMGYwYm9scFNGMHl5aGU5Sy9ZY1lyVit1SVB0eDBmU2gvZC9LcWlSUllPSEg3R2pTWTNiWFpxODlRUzE0UFE2dGxtanIzWVRseFJHSzdIRmxWVWNmK0tYcHh0Vko1NmU0ekdpOWFnY0llQndiZzhzdTdqaldYVjEydXpMQ0FWRXpKUlo5bFk5QklaOUs2REowaDZHNGZVTW9RaWR2cEZaMG1mT3VBaFBzTzBFb0V4bUFUb1QrMWRBSGErVzROTkJCRXdqa0lnOTQ1dHNZc2ZwOWZEWE5hay8zYVhKQ0x2dFhGcjJ3alB3OXUvZDRUZkZWMVVJU3ZKSnFmbklXVU4zc0IyV0VUaGdhbVNJZTNGS2Mzclg2amJwRm5GVExyMStGMHBjQndpOS90cUJtSUQ0SjRGSkxYdjF0MGhqMVN5cysxdlAyVDVnbVJSNHVWQjZqSzNMQ0lIYUxJU0pUS1lZTlJqZGJsY1N1UW13cVdObWRLbVlkakEveXo4NVFSNHkvUVRpdnVnakZEMmNvZUNGN216SmZwSTVlM0hSTTAwRW4yclhmNWlKVEdzODJ3UldQL0hYRU1iR016ZXNVWEdPS2gxdmw2UFBkc0ZETkVvOUtYbEpzK0UvRnBVM0ZaeTA0dW5XeS8zM1VsVHZzYnN0dEhXcHVUOG5EL3lGcGw5VE5ENTk1ZnFKR01XSmhhNEp5cEY1OG1jcmNIdUdEVnZueVRsTzYxc0pPV2RRaE1hdUNOVW5GS3J3QVZVcFZtQW1oMW01YTNPZGFxS0t6aEIyMUpXa0IyODZoS25CMHRDcXAyallFWGlmb25LYno4eDF2SzZIeHJVWGVFN1cwYUc4YS9iUE1xcW14WjZtdnh3cHZ3ejNpSnZKdUI3aFpzR1ZkN0NObCtwQ01xSVBEL2ZlR2pmMUh2OTNnOFlqUkNNUjZ3TkpUL2Y3MDZJWHVZWmRlR254OTl1QWtMeTk4TkljUitCZlcrWUFobi9rWXdERG0rQnNpNm1oSXZPV3JxWmU3azRodEhwbFI1SU9pRW4zZU5ZZUtXNWdyV3JqMGcwMW1DcEJOMFd0S2lyd3Y3V3VrWlFpMy96Q1hVcjkvMzhNT3RpUlB1Nnhrc2hmWWRaaVNwT28wY29BanBERHdhTnVJdW1QRkU4N3VkM1hsTkhGNEl5a21GY1FOMWlaaS9rVXJQYWZxaVE0UUVIUDhtUnIwMXFDOWVUY0djbEdKZ1dEVk9yUjFVMzgyUm1zZGxHZVdIaWU2bWxoL1F6SGtwc1B0QW5FYllrY210K1VNSmhWanRRQjZZZFMxM0pMRTVIeXdHWC8xSlhabXlEZTN2dXh5dDJEQUh0UmdkbEhjQStsWmk0c1UwQXdrRUFkckNvRE1FRVFBeDJVUzRxaFNmUGRoaDdCTWkwS0hmazNmUnJDYnhVcjMvcmVWUWM1WEtLR0ZSK1pNKzQ3RXVRUGhDeUNkZThaOGsrUm93SnRwVkxUQm8rVjVVRklHMmhWTTZGSG1nYUlNZnMwK054KzZhQzR0cUJzTkZxUXlsb2RKRm52Ri9YSnZUaWc2emZIRys4bDdBOXdhTDh2TmhoYUZmYXhWdmFtMnFBSFFIZmR2Vmx5TnNXNXQwaGRxc0lxK01OZ2NGd3ByN0pySDBiM0xwZGh3VWZGUGJ6MFRMNm5WYWthSlBydTVzd2hJbFRXVS9UcWM4TnNWV1RSckF4OUhvY2pYeE1rd3FndEg0bmkzMWUvZzhzQW1GLzIzd0xrVzVqT0hLSFdYb05ROFJTblBraW1JMUdnUzlFVjdvc3RMWHBNNG1wYnMwTC9JWTRmNjR4RzBRcGRIUVhVZ0Z6R3ZGMWVhZDhZQXlUejdDL24yK0FRT3dJQ3BJMlN3UTF1VlRHc2pUQnlWUkZDcDlxVHV6US9mYjZ5bVI0VEVlVWlwcFZUSDJzL0c4K0FIdHhXd25xNS9DVFRici93L0xuS1c1NnhwaDFURXQ0U0VDK2pLTUwxVkprRnE2b05wcnZ1UHBwSWMzZnBYNnhFcUdqMkZDcHpMa0RGWmFzSk1MUXR0ajlEQkw4eTZWUk1IYlY3d3ZEZnBMSFRtYkZ4VktBWmoyL2VwWUVGYmJ2QWpGVnN5K0JDNmd4WFNJbTE0OHFGNmhKblFSMlVqeFNlZldzcGoyVEV4MGpHRythZlhJdWQzNXNiSzVWZC93cVovekR3Sk5ubmR5UGJobCtmbTlHKytqYlVqeDI3MGFZdksyNDdUWWtuUzJpdGF4TEswQlFvSmxLOGZablBaVE5HUDRoaldaL25vNElmdlhMRHB1RzRKMDhaQXN6VWNuSU1PTlRRV05HRlN5WjZScFREUnJIS3JBV2pYT3B0aVJTNWJIekE2TjcvM0Y2Mmp1Rmo4clhnR01hU0pYc2FGNjlxTXBta0hsSHN2V1g4LzhyaHVmd29JVy9uRGVhQlBqek5SdURTdWkvR1VOVDlhekZvenkra0tESGQwUHErcFhTTUxxNkxReU11c29GTkpNbHFZVXpzSFdQWW5QVFhaSUpqL1VVNGFxeFoxc2EzRWdQbitqMWF0dlVIM1NuaWpUZzl0TFpqUk14MzNBR3Z5VnQ3aGY4dWtsU25NWmZ0Mm41RlhqN2hFR0xTa0pFdldiWWRUUW8vTGtWU2s4dU1jNzNnMHpmdEVBcGl6TEREOGtTdFgydU5idVoza3U2dVZ2N01JYXN6amdYTUVXMDJzZHF1MktZU0tIVmtBUUdBanluUXYwUURnZnd6Y3pLQUcvSFpwVmt6QmROMWNQYXE5TU9GY1RLK0Q2YjlTVHM4dEZCMGNJdXNMbWRBVXdVeXN6RTYzL2NCSzdhZHVEOFZCQldNeW9RSCtzNks5blR3S0Y1c21nQTFpUndPUE5NQmpFL0pVUk5xUXNteElVZDJkRWVyb3Y1Y1pRNWFhMVJFN2FyVlVCZngzTDMxazJRaWZJK21Gd21TcnM2OGdmaVU5dFZ3R202SFZrc24zenlRYUtiakMyVGFtZVQ5RERqK1d4am40cmR5ZjhuaG9VczA0aEJlSU5EU1d6U0tiZURlMHpwUTg4WmI5ZmZ3R3lBRzRsaGJuMVdFUVpjdEhROFhRbjZsRmwvbUlPcjVRa1VYcGd3T1g0RG1QU3oybVg4YmxDYkdLNmExZGhzU0V4TGwvU1VWUjFUdHlGaDk4NTBxdGdyaGVMS2NicXpaVmR3dEk4SThNbUhvSS96eHVxOWREV3dweVpnTzdWdjlVc0t4MUF0aDZ5a1pCdkhnSVFBTGNqQi95SnZudDBud1dra0hiai9LZnRhN0tXUU1yVEZOczJYNmVhMXVOMXlvVFh5eTlpTE5mN3hlTjQ4dFd6dmhLblE4MUhjVFlWY2ZyVVpZazI0bGhlUTNRcERrZFVkU3BicUxQNXZaMlVjS2h1R1lWNGEvWnc3WlAxKzA3M2MwenRpNGZKQVJhdUJ2NmRTN0F0Q1k5Vkx3NU50OFo0NW5ZY0dYMG51QkpMTVR5VEp4Qlo0dnE3cDNyWVU5cUVWcUZVWUpMOTJlUzVoNnFvQ3lyQzR3QXF5blNMTmRMTjNGTGVQVU93MnVNWUJUTWF4ZW9ITndtaEVKbFNOOFIrSE9STjRzSWxZcHdQc2h2NjZLVHRoMjE4QTVYU092VWpoV0cwM2tJUkRKZGpMc1A5TzF0YzZqRDJTWEtaZy9xL0pIQzUyRDAvZ0VCTmJjYTI3SFR3N0NFYXhGVHpqeFRENFNDN3FtbXhGbXZtWU9aenFOWW1EUGgyZDNzRmRuenhSdTB1QkdIK2tGM2hZeE5LUzh2TmtTdHBSZ1NpWFhuUDROcU1LUTlwMEh1M2d5T2xJUEUyaVJiak9VZ2owaFVyeFJCZ05KYTI5UEhCL21KRm81U1BSOXpLS1lpK0FRajYxdDZYMEZkbWZpUVRxemFybVVzVk5SaUdjd2NKZE9ycFMrV21TVmk3cXl1YzJTaFhWN3V1dk1MQmlmWFZKUnVoU1pwVER3NHpZbG5iaHFFQjB5a1U5d2w2bmgyTEwyeHNoWVpNOGVqQ0hvZWNkTnFiNVpHSjVuMnMzZ1MrWmFxNVI0Yncxa0VUcXpybndHUklTbnV4SUE1dTZuMXdZV3JvYjhNTTB3SVYyY1llL3FYcmRQN2ZuSmdlS2paTERLNXFSNXlLU2U5RUlnSjVnb1hmb0M4OGlWaldDN2lvSWpkWWVmVnI5R2V3TnZNSGdXWlIvV3puOHZuWWRlZzQvMjhLQ1kzS1ZlS09BaWRuQmxqWE02L2pyVVMxWlFGekxCSzhXd3NqcXJFYWx0NVVheU9nOUh6eDNRQjhNZXdtUWVUL2tHUWRyOUEwOU14YmtFT25ZTjN0UGx2eDREb2RsdGlwYmxtbjVESm5LUjMvMWIwcXBVd3ZJcGtEekExZmQweXFxdGFYcDg4WHgwc3hNbVREbWZtTFI2QXJTWUpwUXJ2SU1GSDRqT05tb0tBVG03NC9zQ1dzczkzdkVkQkw4alExb3Zia3FzK3pKTkNHSTBaejk1OXJ4eE9NaCszM1E5UmJYY2VFS1p1YnhWWG9SRFNpOFZZTi9SN29mMExmZHV3VkhoQ00rODBFRUxsbUluVTQ5dzI4b1czdU5nNnFzdUxLaVNGL3l5MlVIZ3dLR0duaUpDb3lLVDV6UWwwSi84amQ3MHJrOHBYRGV1NDNmelBIMGdTZ29qU0FvSCt5a1hJcTQvc3laaFQrK29xQWRHMnJlcEtQclJvZGthZVN3NStxaWlXZkFOb1Q3WTJCM0JlU2VhRmYxVVA0VHRKTXhZaVU3aFdzYjhxUkRvMEVzem9JSWZJUE54clF3dDg1a2phZTR2aWVlbkZpYTUrZGRCVkE5NVozRVQwMlNNSUZENlVOTEVCMDcxaU1yS1RkOThMa0lhc2NWb2tuTzgwUWZNNGJpK09MWUpISnNTN3REOSs1aDE2aHFkeUdwVG9WT2xQU2pzRFczdkY3Z1NNSXIzSGZKSGovU09sdXZzSWtUeEIrZ1dDVTljMzVhVWJiRlJtOTc1MHpMVTNHam92dy9YVUxaQjBQTitzMUNGVW9lYTgrZlFxL1Btd05mMW5QS1h4RFBuVzQ1bndJL3RXRE1jR2RtRnJnbnVLTzFvN1N1V1BHWHFIazF1T2NEYW9rZnBwT1FhdENqcHpQUkhGTXp6TjVwZ01aaDlMU2UwQllORFhoKzhpR0E2eGxUZFZzb2NpNWszQ3NnMVgwbWNvUVFaVEQyUU1JZzIvS3pOa2ZoTEZZQ3RFWnhPdFZqT01iam5PVmMzV0V2bC8yK05lcXhRN210TW04YkxyUXJhTWZHbVhUeVhTZ3JnanJXVERGdVloaXVOaER4NENVcnpPYk56RnVsV3NNdmo1L0RZMGh3R1ZJS2ZWTW5QK3FMYU5LbGJ0Z0dSSVdYNjdQVitOeTZLOXRla1JzWVFRem4rb3lDcGNTa05OOE45L1VqRWdoUkNTdGpiaE1CQWIvUldGOXBFdEJOaHlyTXZzQ2l3WlBPQ0c3Nm95RUJSOTBGU1QyYTgyMEZTd2FnTlNDQnpZY014cS9WQkFYV2ZWZEtDeFQxUndvOWdEK255dTZtVjEzK2dRNk83L2RMQmZweWhqYzZTc3E4ZkhhSFdKSGJLeUNrUVJ5N2JMV1dMTUQrczFIVmpKdGJpMVdwZUs3L2c0S01ja25zdXdBRnAyYmVyWFpyR0VrRFdodUFJOVVDa1lyem5YcXU4NWRYRUZzTldSVFFwdFZFeWl2RW5JL2g3YlFEYTAyM2NDSTJWODBDWWFSSTdBS3ExK2hNMkJNMzcvWis3d09JVVkxTDhxaWZMNFFqaFJDbTBZOXdvUTZGTzFzeXRIbVNkMDEzLzloVTZsanN1Rk9uTVE1QVU5bjlIbUkwVk1RY1ZKV3I0Q3lxcXpCZXJVKzlncVdQUloyMUVxeUlOSDhJRS9lUE1ySUxvNjJWNmRFcFR0U0FxUS8xZDRiZ0tFVGZUekRsZjA3ZFl4TzBXTk1JV05icjFsdlh4OUo5V2hXSzNLSnFkbzFyaWJ2cXJjam5yMGJBbzR6K01nN0tUYTVadFloL01peWJrQXZjRXpDSGV0VlpTb2psQkh6dlVJTWVJcnF5T2o1MDBYVGZtdEpGYjlHbDJ4N29QUzd2MHFlZEVidTVMV2RYQUhmNmkyN0x2Y3hrT1NMVHpVYjlSN25yRkpDVXBEb1hGeVVQeGdCUm9yYXlraW8zanZWY2dFcDJhMm1mNDFyWFpRRE5pV1BWV1FUVm44dE42OENMTG01Mi9pb1M3dk9sWURlWXI2VGxpb1dGVGdSakdoNlI4TXZzWEVHRWtGZUpncDcyWnpoaE4rbE5zN2lLVHFrK0g3RkRkU1B2TFpWL0FJNXNvSml1cGl1c2xtY2hGZ281R3I3SVpxcmpqUDNGZHFnNFRnck1OcUEzbHdWcWcxL2ltRXJGMWZEREJvemJ6NXd6UnlNc3NJakMzK3VjSmowM3YxR0EwbVduTHY0M0t5Zlo2TEtBcm5ydlpxMkZQUWJ2SUo2VzJHZ0RCbmFoWXJhZ1ladDZpVm56cHlWVXZaaW9XVnpHVXY3MjhmNGNtWlNETFFhOVgrVlBNc01PbXFKbExPcTU0WjIxdzA3ZGRTOHNPMzJQT0gwbVovdmZwczFZQ1MrajJKV2MxaFZHUzBBNFdmc05vS2ZTRFV0ajF4MWdOWllDTG1OWE9IUHNoOTFUd3E1MTZpR2tvT3JHcER1ZEZVVVN5WVRVV3JZenFYNDhBRFJSWVViWS9HTFpGY0pWc3FaTU9Ec2w5M3QwYXQzbnArMDJFRTZWZzN0TUhDYUszdVd3LytTYnliQUMyWXM2dzhmeitBNWRVT2lUSzg0end4RkhDMWk3Q0FxWXdaUmtyMEZuTzJCT3RBZHQyUy9KM1lIRWQ2V0ZpYkd1VHNEQ3NaV2F3cDFoVzZ0U3ZvWStMQ3Q1dDltV3UyaFR4TVFDckpLcFJOTnVzNEt5NEFOZjhwVThmWktVMlRscjZxWlA2TjRGanIwSEM5dUVYWmgxQ0R1Q01SZ2h4TTdBeVNhWXhkTWZSdGFaZHhSYnlrQWtCVmRYVXFKN0cwWkYwVTBYcEg2ZTNRSDZ5bUlUdVlBZUFLQitlNUhIczYxZWliOHNzU0VDcGQ1Y3IxNnozdkdrRlFUYzFHZG1uUmc4OTUwOVovQ0k0Q1VTTEpFS0J6Y3hiRkoxRlVPRUZrN09ma3NZNU10b3FUR05oVGRML2xnL3h3M2ZYVGUvWHRZODliSHFkbTgxc0hQU01DMGJsVmZwNXd3NndRRHNCRjB5algyV08ydmJkeTFtN0JQdE1EMThzaWx3VVhTT29YdW9ENE9ON3JSeUhBeEp6Ni9YNUtvY2tEeXl2ZGgxUUpBa1BzNGFpc3hSQ3BwOTR3dVNpWDVIUDl4dlViclRLUGpkaS9HMUJPMDRjd210YVZ5aGxmUDlMWGlkRHV0YkQ2SFQyZU5YWkFzWTQveUJDcDhUT0tTRjVyWUN2NStlUnAzajVITHhJd3JRVCtabEtmRy9Cc3VkekpPQ1BUTzI0WURWTUV2Y3dGbHlqeWxqMVQ2OHhqYjhTbmc1bTRDa3JnMnZnSjJ0TmM2TlZNck1wOS92ODR4WHVmcE5uWTIvQVIvS3NVNE1mYlZJMzRGVGNUV3ZzSkxERDdoMjlpTWlkNTljVldYbU14WDZXUURNR2c0eDFXbW9KN3drQWhBTE9zbTZnbE9nMDlqQ1p4Z2t6UUZIZEZvc2xtVkRSWkJwaDhORmt6UE4zY0dVVUNWK3I0ZXN2T1FFRkJ3aVJrdk93bUNveGhTT1dxNjFyQnkvczFyUDNWenF2dkJseHprNlBINy93WDVJUk55eWs4N1B2L1VXVkpSSE43dTN3Skp4NjFFcUxSVW43d1FPWUQ0aVlwRWljVmdGTC9IZmQzRFpHYXJYblZrcUNZVENhamFoYURCV2JkVUJiNW1kTTJPbkhuZUVJN3Y4RFNwdXlGN1hwYkJaM3ZjL1JycG9rVUJ5aEhTR3RmZTNYNjd4SDR2a3NMN0FTeng1OGhzcDk3UUxaMHlIOGFDRkJBMTVLbWY2S2gySVdYMnROVDBURVRxMVB2Wm1hdW02QWFwT05nN00ydWdzVkhwbzhDQlpwSndFL2plMnZJNlRZMlg0cUZ3Qk8wN0VGZnAyTVdiUjlMbkxIQVNjY3ppTTU4d2l4UWxGU2ptYThGTmRsN1QrRmxFYUhRcy9OT3F1M0NLUE1oMFhjdHpRVS8vUTRpbjdlalNYQ1hqMGhLSVhFaUJvY3VpdkNDV1lIUUJXajVyeXM5WlphbkdXNEZ3dXBJRnIyLzlzcFdKRDM4TXN4R3BXUi9jRTk1KzNzNUFiaFp2Z1hHdGk4ajlMYmptYUt0b0pyc0V1STBSNllxVXlHZXlVMFplWTRST1k2b2oxZWNKWlhpWERYSkc3cEVKQXdmVUVVOEYySFVxWkdvV1hScmRvRXhJcnpSNG85ZUc1V1NwWmhnQWpJYTIwVWZaS1NZZzRWRmUvb1Q2UFR4L3dVTlRpLzhWYkIrRVNaUEk3OTNIdHFlQU5MamtoWDZvckZYM1p2aUZLeE5FbzJZNzVSZkVHbWo5ZnJnYzFJcFhtcnpkWmV5anpWb3hmZUI5YWdra3pyZUZLeCtZY05lbzBrcTZnaU1CSTNRV2djY0R0eGZkeGM4ZW9OWU0zc3hjYjVSNE54M3QvdXNVWFZuOUpoN2tMUXdEcTM3eVluUTlxNzFuTW5tdGpBbE5kM216c05XZTRPUnNZekpncTNtQzJkWWtxNHA0WWNodTA1clljbUpxMWVLbjlCRmlmcTNPOXROVnlNcHpIVEVMYWg0UlI3Unl6K3BHdlRyaVV6azdDV1VzNTRhd3FGbWFsZ0Z0bnAvd1g2bGRJd0ZhSFl3UjlWdnpNbTVtNDRNOEYvSGhOR2RDWHovZVVOTkFRVDNKOHdCL1BYL1NsM25nZnY5NERydkJlNlBnNXJ2US9jQW1VOGlaNWZoMEFlS29zMklDaEF4YjFPMmVUQklYS0ZDQ21PdjlDNDdRWXowdXdDTmZKZEFIWVBra0xPWXJ4TkY2czdNbVhCZjlHMVdIQ1paN3YzdmpVWndaUlJiZVByU1o2TUNQMmgxT0pvU0lydzVzZzVQTWttZkhRRjQzQTNMY08wanNPWXdQcE1xWUgrR3o2TStvWVZMZWJNeEhsR0dwbERFUWRyWm9NRkUwZEZaeXNxMkJUN3ZkOU5sS3RreWxnNnVFVVhiTXN1Y3ozZHFSMXRlcktpN1ZOQ2J0N0VRUnhXWFptcXNJVEREWEdyRUNyN04zakdkN0RRSXpRYXh4K2g3eHpaQWdMcHlBOEV1enhKdjJEM1hwTmFFZkh0MnBIbEpaWW5tc3FyQ2VWSmg3UEhGMzdjZ2J4U0VidElqaEtvckVBNlY0SE81bUttZzgxTEhtcmFxSWhrVVUySHhTQllIaFVTSzdqK05aczlzUHB1b2lKMkgrY09LY2FyQTV5NGozK2QrY2ZTb1hjL0tGMHhGakZnQ1Q2VS9TdHRzMm1FMkozUU5OTTM5bDFuQmhJTStyTHJjdEdMODA5V0VxZ3BIblhTMktidE9PUVdsUm5MUU9Mc0k2cktIWVdVU3dzMlFBVEI2SVdQRUFXUzRQSTU2c1VRaHZoYWdkS2N0Z1Y3djNSWjluaWlFNWZtOGUvSU5Qeko1T1lKb3RsbnYxamNSOGZWWFU1OWltR0xJWkxQcmRLa2RJMDlXV1B2eVhjMWN6a0xXSjYzNnJrNzlOQ2NkN3FQMTc4ejdoOUR2dVk0eU9oNVIyMTRZZmFQOG1JQjBwNTlRMkVZeGhwZmQydlM2NDVrNW1mNVIxcFpkM2hWU1g3VUNxS2l0YmxhTkZPR3dVc3RjNnB2WENML2xoS0d2ZU85dTZDK3NDZmVGZWFhaE9LcHRseUZNUkx2SXBPUk1QQTdraHpmSW9ucWxLbHNmOHVhM3lFYXBIRk1qeG5LU0NtdU5seGRTaW5ibnNKOWJadnFhaDg0M1ZHMlFyZ3lwZGR3WUxpNDU5U0NsR1hQdUNGYzBRSUpTSUx3K1UzQmUrQnkvOHRrTkY0QlJ5d0tVK2pORVcvNXhaMXY5d3A0dG1adjRMeThQYm9zSkI2YXVWSk12YlU4MG9yY2lML0kxV3l2emhOdU9RZFJuNm9KMkg1REtMVTdLUFdOb0tEbmpEenprZ1pvMWprMXFuK1FvVEp1TVk3S0VLUHcyeXArb1RycE9UaTMvSUlYanJBTDFIeWF0Z3A3VUxDWXlIQ1E5SFBReThwZTBjWVdlbUpOanFObXhRNjhmUG96YzJQcFpCcW4rcHY3L2IwZFNEa3ljSk1YRGNkaGdQaU9sVWYwYTRHTDdpYkVLdnJySHlLSjZUMjBoUnY3OTR2S2k4VDEyb1BrbUdYSjM1VjA1d3U1bWEvYnRmbFRaNEpmVFhQQmFWVEQwQStiRGRyVkpMMUpJVU04Q0JKKzF5V2tvanQrd1cveGpzZ3l1YlA4YjVEMENWZkFBcU9tTWsyWVB2d3BWeDVLd3F0WGhqbkZmZHczSjZ2Y0tIK1lkZkNva2J3MjNBUzdNNUZKUTZrTjFmalBuN28yUTF6QkwxeXBmQVdoTUNUOFRxUVA0K3R5WnpHL0dRakNraWdzanBKeUNuTzVHbEpPcWtUSWtTT2ZLTDltWlpPSXRxYW5ySmRob085VUJrWEJJL1lTamlYcXpvOXNtNFRCOG9Pb00yVjU1Rk5lSFhxVk9sQ0VBQ2F6bWwrUm1GTEJxY2dJbjJkZVU3YS81MEdVUUtheU1BbXBVMHluVWx5bEEzYmJ5Nk1oMGp4YXpFWTJKMlBhVzBRUWUwRjNmVkNWS2xNYjNubC9YQk5MNHB6dkd3bUFQLzIwaDRmanRpWlVnOEE1OG5GSEZnMmJDTExITWRqdFh6TE4weGhpaXl3bHUvQkhqcEhoZEkwMjRNZHVFNHR2SkdaejYwRldMV0FoV2RtR1ZHVC9lbHl6YlNpUTJjRmx4QjB1eklLL1hWMkNmRnF6WjUrU3ZVVTBRdWJDcG5wczFtck1QV1Y2R1o1elNxbWZRdmtlQSt1Wm50VUMyWDZNYmduSFg2YjFQNHpWQXJZd3V1eVQ4aEo5M1dSNHZLaDJGOHJHWEJFdVRIZnB0dStPaFRmQ2xVaDYvektiaWRUZ1ZUSlZqM0x5ek90WkdVRHZZZ3Y5cTl5d3d0NmtzSitSWDdDTURPTUJzRTdrYks3SWdvSUpFbDB0dHR1RHphaWNTZW9hUndMUVhlTEZ1TU84c1hBSlF0ei9hQWgvNWVTL1B3dkhLOTVlMnZjNFFXVi9LbDhsRXloRGE3dTRjcUlUSG9IazRkbGM4QTBsWHV2OVBCUzRiY1VOU1lFNEpRczFGZVNOSVJxbjBXbVJvUzJINDdPWkpBVmIvYUNRVlg0Z3RpaWttT0NmRG8rQlkwQlBoeVorMjlHeVQ3N21oYlhqaEFNcENTSC9PVWxZMkIwVHdOQTdvckZlcmRtYXg3aXFzcS9yQTVFT3p2aFF3M3FyTlBXZXBpcFBoNzNQdGEySWRwaTMvZVFIS3FkTktjVGhRTHdINGZFcVgwcHVpOCs2ZHI1a0tONVFTaHo0VHFNSnhXcGRmSWRqU2M2WkVWRXE5MWt4NXBiSlh6T3lXekpKS1BYOFpMMGNrN1Z4Vy9PcTFVbDQ2dlVEV3poTXFmSWRkaUFXeU1wQ0xyZEVpMkZNU1picDRMbGd0WTlYazFEWlRkY0pBQS9QL1AwM0R3cnd5SWdpQjVoaTJTUko3Wm05T0QycURMZFFzMUFVUjY0UGoycHZHWXFrMzdTL1I0NXhCaUo3c1dqUkVnb3B5N2JJSmRldnJrZjh3R1A1amE3ZE9TTGZoREhtbDVqN3R0c0ZmeUNEWHo1N216eXEzS3JXNVRKRGkzRjh4K21pZS9DNXdWZ1E1SXQ1dkhaOHFhajJ1M1YraXdiSjc4aFhMU2Z4MW5yS1lNM1BqNFFPQklTYVFaYnltVjVBVGdUMEhCOEZGT2Z0Ull4ZW1uamxWWWF5TWVCVzVPekJQZ2NiK09tcmdjZHVGMlFDM01vTGpiaE1LTEpPakJITXFVZFFGTzUyNTZUbHdpZWhhdHdrWmRxeGNaQzlOakZCMEVodFF2MEh1K3hFR3NWSTVWcm1lOW1Mb3pZRE00Y3FFVUZ2eGZtcjA1K0pXUFFFSkVqdS9mTXVTQTdIb0pLamM0UWVYOExKcFVhSVNKRXMyZ0RQVkJPOXVIV25mU3ZsM3AxV2ZPL1krcVFDMGNDWXFXSExRUDFhN1g3c2hHRk9VUjVuSExDZ3RLdDYrT0IrQkU1bnR2cDhzajlCWE9CVVRjdWIyLzNoRXBSTkJ3c2ZWQmc0eEg3R3dvMEVMTEhZTG03aGpXQmtyYUtXZG1zTnpwM08vYklxckE1YzcvYVpDSEU4YytIQXFyZ1JGcWZRdlgzY20yeHE3Q2NCbU1iZWplTmVtY2NwUnFzemMzeUovcjczRlFkczJGSW9UK3plNEtXRHc3OWdRZkkxcUVkUDhUZThXMWNXMStTR2RxOExRUk9vNFNLd0ZVSEZaTm9NVi9KL281L0NDUDhQVjBPL1QvUkl5c1NFRTdzeDZzYTRVQ0M4dnpmN29VejE1STcxZWVXNXp2Y2s5dVZRZGpJY0Y3VlBRRjBTVTByVHdTSDg4clpVNEVJSDBrQ1U1ZXZjL3JoYkdaNy9HVXlDckFsK1hzLzlTdEFQWUl1VHovSXZIR0FtamRGWGlpZ2FXQmdQVDF0VVRGMjM5aDJ1ZmswVU9LM3NldFJJR2J0eEJ4QmVNd2oxMkVJdVJiMGRpeThJdll3cVU4dzd3Zk9XL1o2enI2MkZnb0E0VHBtTmdBR1Y4Yitob2pZQUxJRlNjZUFJOTRJcThNTHN6OGQxUGlSS3NQNlNRQjNPZ1RMbDNmUTdWaEk0TzdYNkpCekp4N3dYZGJweWZTWXlLS1F6L0tWUjBFS1R2RjFKd2k5T01Mdjg2VlR6cDdJTFU5ODJsWFNkVEk1eEQ5cVlBekxoZUdWY3RIdnBxY0FKM3hYSjBEb3FkYlkveXJaL2g4V2M4bGNWbXQ1bzVUbHVtb21rTkxFUnRMWlZ4QTBSOENvQWU1NTc3TnREazF0cmxLbUluSVd0TlBhUG05S1dpby84ano4c0hRRGdRME9QcTJYT29uazZKZnB0Mzh6Wi8ya2oyNlNyN25yMjdJRlJHeHJ5SnlzNmx2RmRTdU5YSVY3eDhkMVpyaTNtdWE5NWNpcC94VFF2aUVZWDR1OXpDZWZOcC9ieXZodkpUZnowZVBabDU2b2xUeDY5azNKT05PZjljblljY09sbUI1amFZVDFrdk5Vd1Q1QlpSaGgrSE95TzdDNFRrcElsUnRuNkN5c25VejNLWnBLOWkxbHhtUzVLcStETGQvV3I0TEU3cFlzemwycDJ0aHFXc0pUbFFrTE1vTmZYTEgxc1lUaStFcG9pM0hNWGQxRE9na1V0VzVMWDRYZWJiMWZoZTljWER0eWVCODdkWWVVQklIZnUvdFdWYklvVncvcGZGc0NnM0Jkc1RvRStVU3pLRkRhcVlpOXB5Z1VkSyt4UjVaQXhlY2N4cE9QSmVwL2pxUkhXZjRTN2p4UEJOYnY3MEhVS0pmTTgvTHhGVCs4Y0pKRy83S05EV1B2bmY2UVNieXVKamJIcERWdHp3bm1XNUFXMlorOU8xUjNTbGJjanl3dzNvck8zZ3ltK0VFMHhHbWJ3cnMrTjJmdW01QjgrZmU2Uko3S2t5MThRZDAyVzVKeC9MQ3pITzM3MnE5UW5PMjh6YzdJQytsY2toakF1WjQyQ3U3WWUweFZIcDRYV3ZMU1RxZWdMR3FGQWlXNDJobks1NFJJaFd3WTZxYmRBeVZEbFpGT0dDV3pUQXk5TG5ycUJiQWVhUjlxT2kyU25sYlByTm11elZyNDVxclI5L1duZTZ5bTZoclBEWHQ0Vm1hVGFWZVNxQjkyQmtXT1hFa1NtRkNjazlWQVljNWsreVlYNWFKUDl3NUVQV2JVWlVsTEtzRzl4eGt1Vi96ZDBrcm9VZ0hBUk84bW01ZmNGTlJRd3VOR3lDaWZkY2FNcTZkdXMwQXNzNkFjM2c1Vkg5VlVzRlFPcjJLcjQ1R1lWSUhqaFg3WnoxR2RMbG1tdlFGWjgzbHpEeklObmVhbm9LVmFGRlhJV1cwUHM2eTRHNUcvcDd0MEdWN1JncjFqS0dMQ1l4VUh0dUR0U0tscmIzdGp4Uko0dUU2UUIvRldCV3IyVXpvK3ArSVp3NXhudlNPc3Q1M1VhQ1U2MmI0QldSRDhoY1BRQVpzL0srS2thL00yY2l4QXJmdys1aXZDNzFoUlM5cGFsdFBuQkhBaldZMHhXZVlGSmRqSENUWDhONm9yRHg0UjZNY3k5NFVyQzJ2NmRObG5jdmIvOUFTTHVwUlVvZGl5OTBhUUdHQXBwZUQ5NDl3cEVZTDJDUCtuSHBGVnJrWWZORUF5NXhYVTBWTlJqUHRSRW10ZTlTRVZZZm9qQThkWDJvcVg3WnVtekN5MDJBZW4vLzJRPT08L0JEQj4KICAgIDwvQklSPgo8L0JJUj4K - -#BioValueWithoutFaceBDB -BioValueWithoutFace=PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/Pgo8QklSIHhtbG5zPSJodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLWllYy8xOTc4NS8tMy9lZC0yLyI+CiAgICA8QklSSW5mbz4KICAgICAgICA8SW50ZWdyaXR5PmZhbHNlPC9JbnRlZ3JpdHk+CiAgICA8L0JJUkluZm8+CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I+MTwvTWFqb3I+CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24+CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I+MTwvTWlub3I+CiAgICAgICAgPC9DQkVGRlZlcnNpb24+CiAgICAgICAgPEJJUkluZm8+CiAgICAgICAgICAgIDxJbnRlZ3JpdHk+ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8+CiAgICAgICAgPEJEQkluZm8+CiAgICAgICAgICAgIDxGb3JtYXQ+CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24+CiAgICAgICAgICAgICAgICA8VHlwZT43PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MFo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU+RmluZ2VyPC9UeXBlPgogICAgICAgICAgICA8U3VidHlwZT5MZWZ0IFJpbmdGaW5nZXI8L1N1YnR5cGU+CiAgICAgICAgICAgIDxMZXZlbD5SYXc8L0xldmVsPgogICAgICAgICAgICA8UHVycG9zZT5FbnJvbGw8L1B1cnBvc2U+CiAgICAgICAgICAgIDxRdWFsaXR5PgogICAgICAgICAgICAgICAgPEFsZ29yaXRobT4KICAgICAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPkhNQUM8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5TSEEtMjU2PC9UeXBlPgogICAgICAgICAgICAgICAgPC9BbGdvcml0aG0+CiAgICAgICAgICAgICAgICA8U2NvcmU+NjQ8L1Njb3JlPgogICAgICAgICAgICA8L1F1YWxpdHk+CiAgICAgICAgPC9CREJJbmZvPgogICAgICAgIDxCREI+UmtsU0FEQXlNQUFBQVdEYkFBRUJBUUFCWU1zSDVnd2NEQjRQQVZrQUFBQUFBQUV4QUVBQUR3SUFRQUlBUUFJSkFBRUI5QUgwQWZRQjlBZ0ZIUUQ4QWM0QUFXQmFBQUFBREdwUUlDQU5Db2NLQUFBQUZHWjBlWEJxY0RJZ0FBQUFBR3B3TWlBQUFBQkhhbkF5YUFBQUFCWnBhR1J5QUFBQnpnQUFBUHdBQVFjSEFBQUFBQUFQWTI5c2NnRUFBQUFBQUJFQUFBQWFjbVZ6SUFBQUFCSnlaWE5qbWNvQUFabktBQUVBQUFBQUFBQnFjREpqLzAvL1VRQXBBQUFBQUFEOEFBQUJ6Z0FBQUFBQUFBQUFBQUFBL0FBQUFjNEFBQUFBQUFBQUFBQUJCd0VCLzJRQUl3QUJRM0psWVhSdmNqb2dTbUZ6VUdWeUlGWmxjbk5wYjI0Z01TNDVNREF1TWY5a0FCQUFBVVZ1WTBsRU9rZFNRbFF3TWY5U0FBd0FBZ0FKQUFVRUJBQUIvMXdBRTBCQVNFaFFTRWhRU0VoUVNFaFFTRWhRLzVBQUNnQUFBQUZmWWdBQi81UGZHeEFPelpINllyNnU5bisrbEtwZ3ZleUxHR3piZjlocHNZSGlHTlNCK3htTWVqV09yS2d3S2dXTDJTbXc2ejZ3SU5oZGdJQ0E4b2pleEZBQ1dON0tOLzBhM2tNS3Fnd3VLNENBOFFBMVBJQldRZkE1bTN3RmxrNzZTaTg4L0FlQUwxWmFNSnlhRmt3Q05wY0xCOVJxbnBNZGw3Qld3ZGJMdXZHdGpRcS9nTWRVQURnZ3FnSWNIZEwrSGxqeXpId1hzcVZ0MzM0ZW84eENxQ2E2SG9qb29ZdnZQeDdOZXIxNnA1azFCMnN6VmovblJoNXZkeTFIU3A0Mi9BSFZKZ0M5M1huWW1yS1cwY3NZVE9sRzBVWm4wMnVZWC9vSThTeWNRSzczNVhTaTJ5ZnhuTHJNNEV0NExGNHZtOUZuZFFad2szSkxCSmdnOStyTHN3WUNxdWNBaWNrcFArcFEyUWMxWmFZRlhoNnU4ZlZLUUFncVdoT0FYc1lBNE9Yd3dyOFM0bUpHdFZ1azBXTEZUSXJ3VGlGOUJXWjlPRkp0MlB3cXZqTGZtUENRUG0xYkRZenVlNThtU0VmdWk1bU9GYXVZQmNuMnkyQ3Nac3UxdkUvdVdRMmpVa05RUmpGZHRyOExwV3RVSDlhaWpISkVtQnZxMXdReGVIcDZoSEhqaHBUaGNhcXEzU0RicVF0MUZUVzQvZUx6U1ZGQ09qRnpBclFpYTA0VlcwR0lORVBlS3BBOFJpZEZKNStnTjh4MUhpU2VYYkRqdWlJV3BPYjZuWXlYbi9IM2Q4eHBvdzhaM2pkMEVpaFQ5dlZJbWRlbXRSYlF1b2RhdkxLTG10UnladDZTYlNwWVBBQ3pSL2RLQ2t0QTBIWSthL0wrWWIvOFV4WTV2UXlvZ1QycFlwY1B2OVpqQ1pOdFNiS0F1bW1EeG5zeUUyS0d2RHVBT00wVVRObCsvdXJPMFlCdE5teG9QMWsxbERpRlBmMS9yVkIwbjdnU2hncHhnSndtQ0o0VE5sMFI4c0s5VXEwRlFtWjBLTExCdkJremZuUWVUSnhIaFFrVUdLMjBZbkMxdjZRRWpjajVUSEdMcnZjd1Q5Qlh3STZ2Nllsc29KN1lxSUxZVGR6VDhja1I4TXNtNGkzZkhINE04dmNOWWRCOTJVVmI0NHVDb2RoREIyVTYxcmpZNll3SzlaczBhcksydG1XeVVvL0FCN2tsMWpTZFZobHpEcGxGdUc4dThNQnFQb0xXdU9Cd1d5T0o4WVFOWmZya1FEaGF5c1k0YTEycjVSTmgyakF3VWJ4UU16bEhYU3kwcm05cHdHMG9OeCtJaEdQRkRHZEJLeVU1YkpJZENWeCtNYnZicWRicGlQb2hKTHRDeVBjNHpSNDJZTlVYN29qQWN3VjVUcDJ5eWlyYldoQWJDV2FjeGJBYzl3bTQ1ZEI4d0ZNK3hmakFEa25kTk91SXh3eHRnM1llTzl0ZmtTWWlQLzE1UVJXRkU1NnB1cVBST1FvZ1dpcUcvcHRMOHc4YWpGb3BzOVAzTXp3L2ZlWlJ5WllLdytWZ3RiNTBVdkVEOFl6S055Zk80ZnhLbVZWd2I2L3pzUDZCOE5ia2tobEVCd09qNUpORkRYdklWakVZNFZhUXk4YjNqc3FtcDRGSFpCamlWZUlNTmNOd0RIUUQrR0RzZi9aSXhKeC9mSHB1OTFpdkFFT1h2UTVaQUhPYmM0MXFpZ0RudUpLOGNOQjVFQ3luT2pqRnBXdDFNQjhpM0FsdFFHZHpQQnViUmViNDhNVkZGNzgvY0ZlcDR6K2FYQlhaV0xDOXo0cW1kcFNnTXFJYjQwRmNtd3k3VDFuNHJEaHc4Y29OeDU0THNNRmhuQlA4aHQvS2Yvem8yTTVpRFI2TGlJRTBTeGo1bnVlYmRkUkplbWxRbE1DbGFGbDlvN3VyZWdRZTBzMC9ieGNzaitjUFFyNWQzRnoxQ0JtNk1GVmhoejV4V1NXV2UvOVNUVFpPNkx1NVZZWi9LVTA3Q05NRTErcWxaejN1YldQRWpjWWxTL0VXdkFLOGJGYmZuQ3VVYjdhbjZPZjF0OVVKYWlRSkVBbWV6aVREVUozRnE1YXZ1TVBTZm1SKy8ycWw4QkZZRTBlek5ObmZlTEpmTytySHFkT3lqeEIvUXE5V01WQVd0T1VjRm5HYkNHdDRsWlJJRHEvZmZ1WHVWdk0xcTVKL3hPdWt2YUxuaHdkOXhBMVcrL2x4MnNFL1JnTnVzV01tMjVPdmlON0o5Tm1MTDR1UzNiem91VU9XNDVwaUx0cGxidDJIS3JKTTF0ekh5eWR6ODJ2TVRvZ01qYW1KMDBSY3RabFV6RDJ0SmRJM1hEOEdueWdIMUNTaWhSdHVvUWNOSWVrenlma2htd0Nnc1dudjRjbEZ4NzMzbVBZUVZBMEtXRFlyeHE4aHg4ZkRNZ0lvQk15V0xmU3VuOFE5T3ZBdE13NmdDS0N3RGVuRzhUZUZVK3R3MGZPNGR2dSs1TG5MU2lvYk5lbTZ1bTdhYzNLaE4rMUpONVVXV2dxNFdQOHFBYnYzQVpjMFJOSFRYcWoxYWhWekZNbG1YWEVkU3daUEFQWFRFOFVNNTlDVFVOdE91VkJyY0RSZEEvYmpRc0hJM2VOczVKSzRHVHF2a1Vud0p2b1YxSGVYcFlHdjFaSkNsaUNCWVVJOXFydGcvU2NCVlhZVDZXY1h0STRWdVYzR3g0Um9aR0JrMk91SVg2azQrcDh0UVc5L29aV2JzSUJQelA0cWo4SHhCeENUWGJocFRzb25BbjEwK0VsTlAweDhLOG9TbEcvd0dyVjFIdVRzYW0xZnRqSjZoWWwyWnhvckxmQ1d5OU13SEZ1eDNSTjI5YjBCTTYvVEwrUUUxSWpmbjdGTUlGaGQ1Q21JckJHeFZlTFFCNDllUDRnMWYvQXQxelRpRlh4MXJlVVVFVk1UcTE2VkFlMlkxWEF1NEpBZHhUUjZWc0FYZEU2Z29SYlI5N3Z6SllIbm5oQlFoQWtHYm54UlhWaWxFN1J6bStwOWoxNlRQUW1aU2F5Z0xJc0FXdy85R0kvanp2TWhzV2F0QWxvZjhjY1JOUzdteHZwcVJYMS80UkJoM1BnTXlMTVpOVXlHdFh0SkJmVnFpMElJa25uUUt6KzZyN1ZNNDg1b0QrWWNkU2pzcUlvM0x0cjYwRkF4Uzdxa1c3MGpuajcxYjIvYTNibTA3cE9BeTk0QWdldzU3c1B0SnpQT2h3QVZMdW0xTkdrdkQwenkxN3lTL0ZZSXdlVkM2VU5HM2cvYlVyVDZMVUhZL3ZpaXNPRTB3clZYTnJCNC9yQVFxakRYYVZOZENMSFY5MlVQaE4wOEZxR2dYSUFtODltNmM3Y0EwdHdmaHVxR2xDamoxQU8vWWRkRTdYNEpCaHlKRHh0bnNQY1FwVnl5RkJuZGUvOWl6ZkwwWUpnNzFoK0dlcC9ScTBZVDZjWUhjZ3QzWjRzc3NiMUtzL1pMbVZjbnkxQm5QSDNjU2JQL0tUMUIyT1Z0SGkxZG91RkJBUDhJTlBuQ21jY3pIdWVoNldmcHNHSDdYNUlWUWVKdm9lemMwL2lzbEdGZ2loRFpTQ2gyS0diNkR6M1g4R0pIcE1oWWd6K1pkT2JvK25zZERVMnhZdm5qRjhhV0Nzbnhxc2diZG81WDV6Tzc4VjNDVDhjSGI4Y2pxYzgzdUg5TTRuL3dZZmd1UXBjaEQ4c1RDeFJ5MG12bGxEMXZGUFNrWVJaelJnSS9NTGthM2x2QitOczJ0QzZ4NXA3SEorWUlDbmlBNm10YWRpY08rVzBWcldRTE56ZmtCanhIV2MxUGpyeSs1d3dQc001OExCeEdxaFNiWmdybXRtS2c1VlpUNVhxNStMSzNQNjhDYms0Sk84RFBPQUZ3aTFWbEhYdnNMMkUycUNEd3VOYTRzMDZvTzdvSVlOd0ltL1dLN2c5SWxEcmtvMkVJMnFwbUpQQ2ZNRFNXTVI0c1poVjdrUkdVblA4N2NMWXQzdlFjaXZDYy9yRFR1a3BoMVhYcVlMcDZKTUdoamxSaGxjUlMwblNHSzlGSFduaklzeDZyZ0RRa2N3NjB4dzc1QkJOSTBRSU9OUnE3THdpRkM1QzVTWHN4NGltYmNPdFFWL2lBRHlMSkxOUnF3UG0vbHJxb0NMMFVvVnNyK01MUjl6cmJyV3FmVm1NbDZvMEpyVElqaDl0TGh3ZkREQWlpVEdzUUpVZVM1TCtIZERHN1I2MlRBWHJCUVVRbXNlbVEvZGJPMXNpOTJNU1V6eEV4bm5UaStjQkpEVGlwWURvUENkeGlqaHFEOGZ2R0lJS3kvTmJ5YjdnNndBUm9WS0xJNlJ5MzJFamxjdENKZDVNejU5RDRBa2hDa1RRS2tuSjQxdTBFMUE4WUxvTVlGU1NGWldJOFUxUjlRSG5waFFhdUNQS0w2MnduK01uRlZjK1RucDNGcWVGU0Y0WkJuSWlpaXp2NTlsbTBhcytGb0dnOFZ4anY5bTNkLzNzempmaVREUWcyNHlteWc2clFjNDhSeGZZUUFURjBZV2EwTUF4dmlkMndMZTlpT1lqUjdISysyeEhvemNaRU5PUmFXMlV0VjRGZVgwc3JPaWF0Y0NpSGROd0plY1BYL3MvaTFLNlJqdCtxZmtvUnhtYURvZWdmTnhlUmZXVmEvQUNIOG52bVNEY1lUN1hKL2xMWXBkTEtNbWVJYkhvWkdacE0wZE1FT2FCam9IdVdFeWxSMjUzS0kxeDNRSXJEZEhnK0VNMHphTUNLbFgybDVZbEp6SGlpejh1bzJWQTJpS0ZsYSsrZjI1dHVidWxOVVpzaWY3R2JvZXdVMkpZUk9yWUExTHVXOE4xSjlaVk5QNnpKTDZpeVBONG14dHl2ZC80WjBWOTcya2lQdFE4NHErWHNSMk9LUFBlK0MxVzliU0RsdklmSEw1YW1lbFUvTkZjOUlEQ2Nyc0NQZDlrRFdVL1ZyYVJSTDQ0eEM3aDNIaUlWTllwMVhkejBDRnIwUW9LWFFidmhuckV1cHBXb3NHOUhFdjVTbDZkemRjNklrUXFKTGtmMjVDNGNZV0N0VDgzbnJOc1JoZDIwWXNBS2N1TTE2U0E3bVo0UTRyZ3lIeXRIRlNES3VUbnpUNG9ucGFqR0JpR1JER0QvZEd3bG5HNDY4WjBURUxCcEd2VERXbWlrOW4xTGtVaSsyOU5yTFVVUmJZNHNoNERZbGIvd1dveGhTRFNXdXQwZ0ljajZyb1Z3TTl2UjVEZGNnV0xqNjhxZE9uZWhoNmJaOGFpdFlkYUR0NGRWRG1oc2JNWEQyNkhGSnVIL1ZDSENyMHZEZHBrbDhmR1JVYzJ5ZC9QcHl5QkVnRDRpZnIwd0FLL09odFJpR1I0aGFQZVROa0p1ZXNUeU1CWFlROVJLMlIzWlB0WU9aemxOMUVFQ0FtYnRDMlIveUY3MkUvcFVSVXdKUkJITEpFcEZnaUFrNGI4YnFjbWhZRnpSTVI0R091VE1xUHg3eE82RHNYM3cyY0t0WUlBd1huSmFrSVZCWmdudHlhcTFjYUlwWTRQVzVRZEpIcG42WjRXdnRrTDhmdkxhVUltbDdPQXVEKzJERnVHTCtWalh0L0pBaHJTTVNzMXN2eG5PWkU2ZWdSVkdlQTcyTFNtOVZkL1NNNElWQlIzbUJyRDE0c0cwTTd6SjBaWjY4elpySE1qL2NwMkRNTllUT0FHL1c2NldJay9rQkdkaDE3S29SL1hBNlEwMDRPbFREcEhNNUs4OTB5ZGVscm5BbkU0U00yQ1IrT1lJdkZrL3U1WFQzTkc3UGw1aklQeVR2ZDYrZ0NJYk12WmhjSVdHZTJhQlZSMjdSR0RVQkRXQWR1YnUrRUpmcElqeEs2d2FCZjk1NHhadTAyWENTZk9oQWJSU1hVZXZMc3dpMjlHQVh0d0x5NFhHZURjYW9nVzFCd2dpMENhTHlibWJFMGdLSGZyRTNTVUhFQVI3MnpKYXFqTTdnWEg3VFdQZ3V5QWRHUWEzbm5sYThEOFJtaXEvcHZMOHZ4Nmw3eG84TjJQbUQyZkVOZDlkTGJCS0hHYkZtd2JFaGlPc1p6YS9PWi9OMFFTWklqOU8wL0luR2twQjJYMWlDYzk2bHNoYnJwRlY3UG9Kc1RjME54aEhvaUxzYXFwMXNSdUp4SUpxek1rVmlQWjBCaG16OEx3K1ZNaWhaZDBsd0t1QUFDUVFNQ2ZxeXlyNWFMVUk2WjRZak9McWNiaktwL1RwaDZ6K1c1S2RjWXhSdU5RR3UrTzR6N0Q2d2dyc3ppakpUS2t4a3N2Ymk0aktwOWpnTzh2SVdRNWdDVVpOaXo0UW92RUxZN0dyQkh5dW5hbFBhNklPWXFRaXpWMzV5M1IvNDVJRHlUZ2RueG1BYnd2OUNFZjBKbGZXVHdDandDUEEwSVM0a2JtTDgzbnJ6S0c5L0MrSTJOQkR2MjF0NGovUXc1VE01ZWhNcHA5bTFkYUNyWlMzS05wMVNObVk1Sjc2bk5ZdUVHREpEblZSOW4xY095TWtCVTNiM0RqdGtEbGtsTEVtY1lKbnpoczZzaGJWK1A3YlF3TXdVcllDdkVHdDBIbXFsY2syMDVEd2lTektCT1NwMDRwQkY2MFRXK2szOXcrRnJvbTk4U2FTMEppaHpwM2ZIMDYvTC9TSXJ3NWRMOGhvNTcxZVNkS1d4emRLRzJPemx0TXczTDFJR0RPbGFueW9pUnVmWEpwc1hncVBhRmZyWEZ1VmJFYVNlVVg3UUNNb2xOTUpTd082OFV3MHVhMkZyZEIvWFpWZ3g2UjRITEtIZTE1UnNzdUd5ekEzQjlhOUVleGJNdWFydzJiRE04Sk1ETUtjMnVmaFducys5dDlnYXdQOURHc3MrbjFCVnRYMGtKbWZneDgzWjgybGUrS2dwUXppU24zaU9YamtTSVZDdmlFTnpQZXpMWDZoZk5DbUtVaU1wUzltMG45ZExRanpDT2pOTWRZeXBDOGMreWRTVndTRThpYVBTNGpJeWRJL1ZBbGUwOTV0Vm5DTHZIVmwrN1JFanFxM1Jvb1dIKzFHRm5hazcrcDNIL0d6VlF0UEU1aFBoNk5Vb2I5WHNxdnA3LzZXNW9PMzBNY241UDVLUy9qbENiNTllQTlCSnRqcnZwaU01VWJQSVk4cEFxclE3YTNQSjY2WDRTUUVBYTYyREhYS2xBQXRSczIwRG9FejF0QlF3NVI3aVYyWjYvMlNwSU45SEQzSWZIaEhZK1hMNG1DOEdsQXByKyt4VXFkcTdRUFhBR2pJWmJKdFR4a0M5MmUrUHByTm8vbE9VSysrSUNSVS9IT3lOMnEyOUZ3OVMrUnlFM3FCa3lhR21pV2U0cjZpOHl3WktwaGdwQ1duU1AzL1h0TVR4SUtXRVFJRGNyS0xYeEUvTExmUWs5TElQTXJSZzYzNlVBcHdSK1RIZTlKSkhZZUg0QWpXQ252QWNtZHRmWnQ5TXJsNFFxRVd3TjcrZXdqeE9SZXlFcjllRjhscEtaaWQ5NmZvZ3kwaWZybHlxTmtscndCUFFzbk13RnpEbldEVHd5TWlFVHovR3lzN0NxZ3gyWldFUVhFNkdubFdHMUcrL09sVzlZeVdUbFE4QkI1eHdUdXRURHljaVlrWmxIcjdvL1FyVHpZMWg0YkY2UVNydGFqTHNDallTSHhhTDJ4T0hXY25lamJpSmRBc1orY0c0MlBNbjBybzFWZVh3NXNEYWoxOHpMS0ZYUW1ZM0tSVGxtK2xYbyt6cDRCUEJYN3pVYjZ6LzNTUDZVVlV0dExSVkR1dkNaN0MyQkZTc2V1YktuK0Nia2lUU0xUMFZray9IOVBiYXRya1JnS3pncjdjT3J4TVU2eDgxb2dsRGoyZS9wWjE4NkdlZEQzeUhiZkcxaUdtdWpqcFFvTEZXOURxWGs4eld6aFFObFBLZDBhdDN6OHh3eFBKTVNkU0VWTHl0WkdodURsbzZKdW56U21CQW5mWjNzTjN6REhjQmZiOFlyS2x4S2xNL3cveHhjRmhaa1FCaXNSSG9KRDZxN2Y4ZGtNOGJKcjAwME93MngxbTIvWUdKUDBtWTN2S3JlQitLblcveS8zTDc5WTA0UW9ybVh1NDdtSURsM1ZRUFVpNVI5NGFNZEQzK2wvSEFYQk1hT2V5QWlvNkpHTG95R1dGdDRSOEZHL0krblFwUHh2NnlWQXdzWThFWlhHYVV1S3EzTy9iUG5nSHh1TkQyNkpOTkVEN3R0UmQyNktSTVNpUkxEZlV4WHJ6bHY5YzhJMHdHV3RUTEhwbGRXMXMzWjdHdldTcGpzbUV0RjZFZGN1Y2ZLdEJZUTd4NHNlMWhPSm1vWUY0eEVyK3k4aEFSWmVIQnVNdTJmUTRaNTZTMHEzbHg4MzE3UGxDVlcxUUkzSXFDZVMzQUFpVTFDaEJ0WXZpbldoQy94S3BwZXp6eG5YRTlBWkd5eWhoZHpsVFBrcWZWbWw4RVBVUitPMVc0cEZmOUVWeDBjNmhxSEVGZ0FCN29JYldSTWpKWndxYllJRGY2TG8rVy84aEVpOUQzU1dJVmx2SXdCTWdMOEI3TlI3ZG8rY2o3V05HeWRzL0lEdjEvalZJUTVVYzAwcVJLaUpZaEpjYVU1UFd1VGhWbVJFWmhYa0I3cDU1cUNOUXNycTZ3QmNPemFlcHNkWVhFODRsL3NqZnJiOUp2dGU4QnVDaW1NOWR2LzJyOUp0eVkrRWI0Mm4yVk1ncTlKOTVCTkVZWVcxYnNtTjdLNDZjSkp3MUcwNXFXOHBhSVN2NTBkZW51Ky95NVdCZitDbjA2ZmtTaXhwdng3b2J3KzVZTjVVNzYydGNGV2x2Z1BsUGdXNVhTMUlsaWFNZU1OaVVZUkJ5YllURGxDOUNvZS85RjYyUkE3aVB2akxEQ0ZiNEVBUGhUbitVSW5HRnkybzhwbzkxUkFTK1hEa0U1QlkvSFhyWFBaRmgwcHVYMTd2NHRjNldOc090VEhSRmp1MllyZGE1SFo1c0ozNTh3cjlVL2M5eHdkMHhnSlFlS3hnSnNuOHlSRlkweUNja0lnREhxV2JWSWtVU2g5TWFlQWhlYmN1Zkc2YlRudGFNekFGOWlqMmhTeWFpU3pGQk1GMFRMT1ZXMGdYVjJIWmM0WElxemJOWVErRHVmSjRQWTR5d3RGRkJUOVV2NThVK0M3aDR5TGYxTTVFWCtPT1h5cjRhTEs5WUM5aTU4aCtCM3d3ekY2U2FRdGxPalBaK2s1WHVxV3hvcm1PK3hMRzlWbXNySHRIdlczV2lpS3RDeWJGQlNKUFJDWWlkM1BaNjJydENkeE5qNUZTem5WSG85djBENCtzWDhJbEd2cXE0T2xMV3ROdFFwZHJIL3pETGlua0ZOMHRTajBSM0I2b0FKMm0yNUNrTkFMY2xIK1Vuam9tRmgwWGdnY2thVkpwYWt6aVZhTGVJcmNLbEpsZlZITHFaeTYza3AybER4cjRRUnhMejdNMmtmYmR1eVZ2QmJLSFhLTUc0K1psT01hYXdzTnI1YWl4dnJmTEZITWV1b2xJQXpUNHQ2ZVFPckFYWWozZnFDR1ZXUTV5dEsyTmFzemJMbXZtYTFoRjVTOXJ3SGthV2pSdU5WenFic2d5MCs3b2IvMmZTQkpzU25BUHFmSmhsbUZaMzUxcjBjdEJQSWRUOGR2TUo0eS9xNnlJSkdzdlQ4aVpDcXMreDJvU0tXNm5zM1VtVzUyODVwOG13aHNENTFtZC9SSXc1QUFzTkJCL2VwQTl6MWhEU05wNjhtL3JhN0MxQ3ZsR1lNNVVXaWpkb2tUYzA2Y1ZsaGljZnhROXM1ak1JRUNXWDFCdnY0eDR4OG1oVWYrbG1SaC9rUTY3WVlmMWNOOGRPREMxbk5aSjBZM3JpQ1MrakJ2M3gveU9KUGwzVUNzb3FoVzgyeGpaK01UVU1sSHh4WmNKS1N2ejF4bmMzQ1pIMm9vYitJQkVaQ0FjRlh6bGJYQ1JtRHl2REhnbE5kM0dvbjBRamNzL3gwYlhCR0hBYVUrU2poNERHa1hPcVducisycE5rSlhrZG9UTDhaWkp0Uit5bC9ZdXBhWXhtQ3UvbGtmRVV1all6ZXBNN2FrU1FoQkVldnFRVDlYK3JVL2ltWkRxUHZ4Qy9XakZmZmVERnVVTkZuNU9IN0UybEl5RXBZVjRBelpYQmFLckhYMTVLU0h6dHBDVFpFeVdIUWtYd2VjQnFQamR1T0o1SEZaMzdsazRoOHVubVZBTERrSndyYk5vNnRtQ3hyQ2FmK2FvTVQybUthajZuQ0ZYQXFhZHo0Y1BkVkhqeTlHZENaRmppMEJYUTQ4YnoyWDZ5N3hUOEpEbU9YNVZWV2VFcUdEZ2tnMW5lNTZua09RK1JZd29KOTNsclhsODdUeVhUd3E0NWJIUHQrTWtTaDdlbVhIQmxkbmtOb3FaV0hhc0tydGpsSDRLNi9MYWduZVlHdEpsRU5BcXhxZG8yVUFMNE5kdXAxM1pmdytubnMwWmdSUFc4L3pXbW9wWVg3aG5xQXBLZ2I2ZVgzanFFaVZWZ1FUZGhJSnBRMUN3NmgvUm1MKzhwQlo0Z3drVHBWM0p3aVdNY3RjYlpaQlRkc3cydHBhdjFrUjNzQU83aDAwNDMvQ1hwL3RwVkRaZDZtT0ZJcjVmb3QxK0FndThzREFHUWljTzgwWTB6Mk1aaEZwN1RVQ3VhM1JQL0Jobk43aHhJaERGcDBhQzZ0SFJqQ0tEeEdqV3N4NnM0Rk83NHdGd09lYmF4cVdudmZ6RlRUaTk0Z2VpK3ZDZHA1bmh4N0drRzNMQ2hRVUVTM1h2TW9TZldFSTlaT1VGZEVKUzE5VmZGTzBXeE5wVmdPdjhvWWJpUVNTTTZ4N0gvUUpuQjhtalQxLzlzZWhmS3dRUGk3WnpYRFJyU01LaDRTYU1yVzc2WW9rTjhNeHkwTEVZbjVOQ0FpNktGa0VvYlBDYUhPNkVZdlY2RWVUZW15dEdTbHdEVmZicklxck51VTdNWng1ZjUwOFUwUUVlOG8vU1RsdkJjT0RpenlnQXZKK0FVQTBoY3JmZjh0TWYwU2Q4b0RNQXhqemNOZm80aVY4dU1jeFZaSUY2OEpTVXhQa1liZ3JYOVZpa084Vmcyb09rMFJpZlRPUGcvUEVmQ05OS2w2R2p3dW9zTkpwQ0tMOUhOdkRpcWtObmhGc04yK1RoZ1Y0dG1KMGhuOUpQdVJ6RWg0andPaDRzL2F5WjBiZjlaWmlocUNYVDBkd21ObzZvZDRnSjNuZXhvMWVOTWE3VUo5MHhZVFN1M2dvNHZPS04rallMNkJMMUpTbHF0RlJVUGF5bXRuRklYTEh5TU41QUxsVjByY01hTjVCc2crVjRFYTlsRUltZVcyZ3ZBT3MxT1NTYzNwcDhjeUlZbHE3MEY3WnBVTGtQbTBQQnZ2N25FUjhHai8zczdScXUzc3NFMDJRVmZITXlMZlVIZmZ3WmVhTWZqNmoxWmlYZWNtdGRFNFd2ZkFnbmhPSXVWN2h0U0Y5UkZiVlozTnhIQzk4Nkk3MWhrSlBqTW9BNE9CaXZoSU8rRGxhTHNJbWYxWUVTTnE0VVZENVd5R1pwTEcrMXhXMjgveGhjR3oyZTh0U21vOHFWTDFMbkdNRkx3V013em1hMVpNQmd3SFY4SkNKekcrVEJ6Qzg3TTNTRVl6dlBqWUsreDBkQnhBWEFBSFc2VDdva0Z5U0NRWnZ5TWlmcWxqWmVmTHVTQWRCVmFBTVV4UFBvaTlPUmoxSnVjK3l2MXVaeEpzZTFFTEtnaDJQOUV4UHlweUIvbWdCYUpGOGpXSjdSWXRSKzA0SnBqVzVmdmxYZXhEb0tXMUtmZ2JPYnlrT3NlWUwzT0kxVEF5NnFiSHdZZXUwdDk4dzVrSmUxQmw4RzlHMW0yZWpsWTgwcDl4b1JRL0dTV2lUWSsrMWFBbGNLZ21jRStkOVNlNFhQS3h0ZEV4Q1BLRCtML0s5ZVNaaEgyNTd3NURoWWFTVVg2cFJrVnYxK2VuTkQwcEJQOTd3Q2JrS0hLRUV0NU8rYy9abWRHa29OcWFhUXc2UjFnWXU1WGc1WG83Y1VlUGJlQ0tEMEhHL0loVm1HSU11Njl5UXo3Z1pyV0lyYTNiVVlCNnlGTFhtQmxJUmhTU1BYRmdaTVArUHpkczdpUFphZ3dRRmpYN3IvZy9YN25XM2lVTVRUc3Jlb3hjdzgzbmorWUJQdmFuYVQ4clF1ZUxtQVdNclI1WFJ0SlgxbFRiZzd1dm9wZnVDRWh4Q2VPSG1RNWlJTTMyTUp6cVNUZEVJaEdMU25uMVNVYlBtOWQ2MFRSbTFTM0NhR2FuTTVOSVo0YUVUd3JxaDdrSG9NS1VGNHJqOWpoWmRvbVppTXYyYUk2VzNPUThzbW5VNmFPbWcraElRbnNBZ0V1QytTQ1liWWVrYS9wQWd2Y0xzQlpsMjMrTWs2enlQMG01N1dQWTdLZHBqT0JTcDJ1S1NrQkhjZ2w5Q1Q5YWxQYTdaYkJzejc0UURleFJHS09TZE8xbk9jQVZrQVJOSEIxdVlCSFBCKzBvS1lHeDVGTFI3N01IeEdwNXVzYTFXWm9xSUtRZkNGaXhUZmUySGgyVlBlempzd2JWR3NLMnl5bVNCcEFTdXRxV1RyTkI0MWdYeURlU1lwYUVDNUtKU29aU1k2VmJhK0FnSUNBNXZlR2JzalpYOEhwZ2RhcmVqelF1akIwcHg3dVpsNmpWTklvVlFVOVdjM3FwdlFpS3NNY0dSV1ltS3d1eis4RDhxSkdML0JML0dWVlNTYUlqTlRCdmhvNVFSdDltc01rdS9yZXN0cjBoRUlxNUF2WDRmOWt6aFkyNEZTUnZXVW9wemZMZXpveWhTOGM1UnhFYytpTXh4K29jRGxoemZZekl2eksrakNIT25nOHkzQnEyOUJkWGpjMXJzL2QrTXh5dktsc2YvcGF4dVFMV295Q0RMZGtjM3NRRml1dlgwQ3pZR3VHdTlDd1Zlbyt4NkFDNkxBYzFLMTFqMzVGdytFVUVtdE5sNFpwd0ZqNlZMc2VkeVMyRytrd0IxTUpnZUhLYWoxa3lMUUFpcFFnSFNwenM5YnJkejZIQ1lHdWdTcXJtU3I1MGFURVJHQzVFSFlub3BDTlFKUnZkM2VnQStDYk5ZNVBRUnpTbDBTRDFROW1YT0pWWno2Uk9mNEJqRnBnMkhwdHJtMGdDQVdMZEQyVkJrRVpvQkdzenhZK0tWMU43MXVzMHVab05Obzg4RzlnK1JkaElGekl5aHRmZDBvZWNJam1RYTNGU0RoekFTamVEdWpRK3FLa0pQdEgvcGZXUXJsUGJsdDhQMGlRRExXNDNZSXhtRENOS0tQdmhYWWFFVkdtK1hhZ0gvNHVxWEpRTkZ0QWdQU0xKOSthRnoveVZtbzN6NVRpbDZVaWtMSlRiT29QVFdOb2kyTTllb1BRcGpFUmZ6bVNFNlVCa01KWGU2Sk5lNUIwSlI4aVRqU1Q0SEFlNDk1M0VpMHNVc1dNTFRDVXZXRDg2Mmp6TFNoRGZLUDRRMWFJYlY0MStrTTRZMWVYSXV2NnJsa0FYT3lDWEdnVkVyTVpnOCtqaDZQaWdoaTE5QWxqS09SdHlZN016MzBDZSsyUUhvdlVyWG5tMHBydnBJME5HNnFpOGE4Y0hsZEpadWpzNVdtWU5VWUozVGpKbkpoeVV6U3BrNnJ0VitqUWdWU0RtSTIxNGpkVVNSdWRpOHk0dTB2bjJkWFRmbzZxRjRFU1F5MjhCUmZkNW0veEFLNCtlQmFsbHVaSEw5c3V4b1c1NkViaWR1OEFSa21zRTU0REF2VmRXdXlEUkZpZWdQY0NzanBqZE1BQS9VQTVWU0RhYXlsSHkrbWhaTzN5MkNZMjBXT2dlNDNZbUswVTNISDBrZDJPZER6SzA0TThqNVVUV1JXZVZaWTJ4T0RFUlk1UFcvTytBbVhvTFJma1ZkZ3ZVQWhpeE9qRDFkeURmb2dqT1VxZm4xWnE2dFBHTTN6SEpBNSsxT0QrZlRveUMvSHhUaG1DRmFLcmtwVTIrTHRja1dhY1NuNm83N3RBYk0yaHZBczI1Qzk4QWMvZ3o1MExzbEhEejEvdzhqaFljQlc4U1l0OER1dW1DOHZXeVE5R0ZOeDVqR05QeW5KOGJKbGNRQkRyMzJvcEt6NnRqRndjY295NHJPdlE1ckhibkIyRjg3U2ViVzVNSUxuZFFPekRNVmpZMEpGaFlKckNaekxFR2Q0Zm12ZWRrQ3dCTG9UaUZyVlRlZ3VUUmxJL0orblNqaCtvUmlrZG9RVDhMcWlHeFVDcGZSMkdYYlpHeVd4dWRZUERPM3hyVmg5Zm03YklKSU9EY3NkS1gwRzdZVXg2UTBrS25QTE1xWlpYdnJRLzJrUHVFeWcxTjIyZjU5MVhMQkQ5QXRjSlNTdGs4Y1RpemM3TGZuYU9NUGlYY280Nk5VYkZwTnJMUEthMUh5MFlhZXlEM1BlaXRSM2pEMkFwT09hQ3cySUw3bEZNTituVjlha09rMFlZQmVTMW1TOHE0eEVFQzNSNzRQUktzaWU5U3dWV0VENWY1a2x4dnRYOHYwdmZWb0QyVHViRW1Qd0l2cWN5enMrdzY5K3Q1ZkRNYWgxemxEOUR1aDF1SjZBUkI3RlIxRTMybDBseFl2Mkd0Yk9lVDFrODVLcGxSR2FseFRRWXpncVBsaW5RNjFuaUo5L0tZUWZnenV4ckNPSVN0aXhFSkZRcjk1eC9EaWplYUNXZWVXNjlFbjdmQ2NWUEJ0TGNHYk1odmRKOUx5UGNsRVJ1S3VkMGlGbTdzMjdGZm5ROERkN21IcVdyb2xsU2NRRXdJVGpxL1FBTEVsNVJvU2s0MDdJM2tmbGQ0UnpRdnljOXhhd0RSTzhLRHJVc2ZCVWtZdjl6VGJsNld0eDhNSzNQa21Sbm9oMTJJRU1GS1o3MmY2Vk9hOWJIbkNEbk5NazRsUkRCUWFMY0N2VnorMkgzN0JnQ09yTitvVGwwN1NmakxGUlFDQTN3TzBaVjVoemxiZkZZMlJYc2NJTU1FcmRXdllSVWkxSVZVNzZNR0FabzVEN21RcUFwOEt6MXNubzJCRWZjVmIxYmhjcmVZMFZlVkFFNk9odlNhOWVGbnZ2YXlBdHgzMWg0VzQ0OFpDb1JKKzUvOFV0Tjh4WXNhWWI3YkIwdWxqVEx6akpwc0NOT0s5VnoveGJWbVd2N1lBRHhLRlFzdGdZRHU1aktaL1U1aW0wSUFPVU50UjFOQk13YUpwYmw0OE1WYXBaVXhXWlU1Sm51M0ZDVU83NjYvTE84cmVnQi9wdG5zV3c0Y3FjSmNvcFEzNFlHWHVyTkRwTG9NTEpKVk03Ri9PREh5cm9ySjBFcGNPTEdSY2xjNmRIUDNFUURSeEFjempja3hrRlJMQUF1dXNYbEsyZ25tckFDTDdwNkJTM09nTjJCWUZFbG0wS1BuckZrd3c4Y3lLeWoyZlRmdHJDeDdVQlNpdERQaDY1M3pmT0VHS1Vack4yanJmd1hNdHBwMGdLYzB2bk1wSGpaTTVIYzlTUis1VUhXcUFCZ3psU3poUHBMOUkzMEFTRUd0OWpVU1dEa2F3azk0WHZKZkhzSGRURHF3b0ZJT25Jdmx2RzcwM1lBUy9DK0NmeGtCNUFkZ2lac284UXIzSXBRdEJrY1V5aDVSRDRHbm9lRjhnZWw4RFZwSmZHL29kcDZDREVLVTlld3pYUG5XN21Hb0FOR1R0ck1PVkZXV0ROVGVaa1U1eTZwQ2krZjZseUhaZWlqNmd5REtjWGsrKzV3c1FVSDZpOXhOWk5EZVpyendOYkl6WkhEeUp2NFgzc2hYNWtpc09xK1BEc1JwUU1CYmxzTkJVRjY2Ylg3bW93U09xZFdOSm5wOVNYTFhHMWZxSC91U2orOWJiV1prMFdmTUVtdFpDZUlUOVFyTGp2TjIwcWVkT3BUR01KM05mUTNjczBUYVRtYW1pMFZZYWM0ejE0a2tBc1g2WTFvU2NNdEFxYVExd1p1bXI2QnRkWThaNklKOUhDRENFZDNGbTZhajNyY0NxczZDRitMb2hwMmFkS3FXUlcxdm9oQ1NoaElqLzhSTCt3UlJFUFlpemdzdmJxZXR4WEtXTVNKYVdVa3BWanlEc0FMVURIUWRTb3BvTStGaGFFTkRnRkZ1SlZZUGtpOGtvVEFoSlY4QmY0MzhLbHVFNDJLQ2xpTnNUQTR6aHNnTTBYQmZRaFJpMmlha01jZEsrS1hIS3Z0cWJvUEVKejFnWUZaejVIdFo0WlR0bEFTRE0wNE80WnBjSE9uWVh6NHcva1JqM0xHWWN4RWowT2hGeVcyYm5HYlZWM1ZKdXFraFJJMnBPM2pVeUxFTTdyQnVlRVYvMjhkWkM5RVhsY2d3TytZa1NQMVBhd1JNaUVmM1V4Tnd6Tll1K3E1WlV5SkxsNVlYSElQZ1FmZVNobk10NEFLcnhyeXZaT3Y5aEdNek42Zm43KzZ5WUtFVHFLS3g5UWhXbDUxY0xXOEVITXJxSGc5NWZjSEpkTHUzdWRaZERzZCtFZndoQWo3MXpxSVdpYVZ5VmZhdVlxZ2Y5TTRyOE9jUDZPbldKUjBHbE10SlF2ZlJxcUM3QlBzdzdibFZ2TlNuTlBzNFdYdXdwaXQwT0R0alpNTmc1dmZQTEhWS0RzRWdvMmVMQ05GNXA0eXpwbUxBektuWWIraEp3VHozZUJXcjk3ellBY2lCTFNjbU90K2k5ZGlpV1Uwa0tHdnJMRkNjcTNVVDI5OHl1cU85ek1tWVliVVI0WjFqWEVmWmlaRHhGUDR6Qk45d1Vlb0lvV1RaQTF6S0lXaWpGaVB1eEMvZC9MMGZPRFJsUUhOazkzOVpQcjlsVnQ5aTZUNnlPbkg4UHRTZjRmWHZpeGM5ZnpMNzJLVVBpYzltazh0b1Z0Z3RWNUNVTVg3M3g4anhSV2I1LzAwS2xSb0s5S29sQ1B4YjNDMXJzK2xoN01DS0VQZWZBT1ZlNkl3SEk5dFZLdUZVVjBhenptWFZGMWFxK1d0azY1U0NwaHlKWGRpYVMwNEwreFZrcWNGQ2VocGxFcFRlemRiTjRjbm1SNE8zYUNwVmJvYlY5V3pnZzlpWFFXMlRpd1FuaTlGd2taUE5aTTZqUS90L2owZXNpS2VxcXhnSnREWjVvSmVqeHI0YUxvTTF2M1RQTjZISXFMeStndlB1Wk5BR3hUL0w4cXVPRDBxdXlOa3NNZGlTWisrS0N4MzdrS1V5R2RiODExc1FwbzR6cTZOeVJSaklUVUJUTDRqeHlLR2JUbjFkYnZoMmF0RU5vRmMwQVVqMGlMWlo5U05NVHhOdHJ2Tkxsci9KQ2xSbHhIbTJXWTUrWlZEQXhMazlic1VtM1A0TysrY0pkdG5DWnRicVhZYitQTk5oN05xUkI3dzVFeTR5L240R3lPa0paZytEQlNPdjlYR3E5ak5tYWd3VjVaUzZVM2c2bnZsSUYyMjhGVDB5eUZucHJ0cFpoYkNGTG9PT2U1ZmR4VkIvVWRjTkRQdllFdjRVbnhkT3ZLSXYveDJNMklEZjY4YXZySmozcTJxUThFbW1uc25aVEFGaXdGSmh0N3YyMkt6Nk1mdkprR3l6eEJzRWlvc25naWNsdW9ldzB5UElvLytoSWIxbG9nenlzaFcwd2VsLzBGU0ZHQUNDb2lPMHVqL0hBSFd5ZUhqUS9xVnRNUlU3UjJJZjI0NlZCdU0wM3ZuR3ZtQTFGd2Z1NDBLd1Y3UnhjdGtQUjVFaVF5NnFRMFZ5YWwzK0tjS3NtL1JiRE9PczAyT0NIU3pjM0JOOElNTXVVQkhKZ05LTVRJbkJuWXhPOElVL011S0EzbHpmVUJsb3BaeDAzdnNnZGU3WEtEb1BKSGlSdlR4SFZGYjRkdFRscFN2dFpHQTNLcmRCblA0MTJaekNtM1o2Z3AyczhNaFFkaUU4amlMbE1sQU9LbGJ4SlNaZWJ5aEhzd2k1UDdwVlpBSEs0M2hwSzUvZjZ2b1FLUEZaa2U1M1hUQjhPU3hUTEpyVXBCVTR0cG1NcHFNWG83MkZVWkp2cEhLNzBTaTVnN2szT29IKzE4ck9iWVBuT0FGMmhhRFN0Titnb1pBcGxYbm40bEh6MGRTVjdLTE1xNlAwalV2RlIwWWlLVmRNV2tZK3NqSzdVaTJGWnprUG9RQld2TkFQWUNJZGJQRUl0OVN1Y3ozSU1EQkJIemJ2Tm1wWWQrY2Q1OExJODg4Zkg5R2FoaTNJUnhia05KYitUTzZ0WjZVQ1hvR1RsVmFhUHNFUWh0SThva0N4QWNVeXpFUlhEYXg4TDNnTEtiNURlNndubi91S2JvTUpHM1dkS2dXVXNpUzVsdHduSE9OODZkbUpCTU5EdzZRZGQ4RUV3dVhqS3FJZDU5VUs2MVoxdEgzckpSWTkyb2s5SEtmNEVlOHgrWncrMDNjY2FkMHFjeXhkaUVLQVpxYm9kR3RocDhRMmFNbFQ0THpYVjd1RWkzd2M4UkFPSldneExzRldMV1FaRG9HQkJmZ3QwQ3dZZ0U2R1pvR09YaDhFdVJFT3ZyeFJTYWNCZTBPTmNKQ2VHQjI2c1QxUjY4TmxNdTJFZEVoZzZ5U3ExME0veXNYcHA0dmJobEFBQy9kck84Sm5ROUFINjdvQ2FyOEdncTlOSm1vaDdRaW52Y2ZqS1JFK01kN0xSNVRPVFM1KzB0bVo2S2dGR0toYlJCeFp2OFVxemhvVlF2c1dWazkxR2ZIWGRUQXJRWEhIWEkxcmdCYUU0c0pRRU02MXh4Mm1qY3dEdlhTQnIvaVdYeTVnTkFJeGd0WUZjY0YwSEMycXZqMmk5T2hlVXNOeW1YZFpXSFZBMldKclFPQ04vVWFzWS9lUXQwOU9lWXYxT0YrU2ZLdmNLM3o2eDh2dEhZamduS28xYXhHMmNVS1VsWHg2aHdSMGpaenl6NWFlbmxpQW9sTFltMkgzQWtMWFZFNWU0dVdkKzRKb21QZllyRkVzamRyYlRFZm1LaStXeWJGVHorTkI0Y2hVQUV5K0xFa0pRT3lMenFHMFMydTNyMCs3Rk1kSXZDTmw1UTY3NWlDcWo0ZlVPNzZrUnVBdzNaV0J1Y1c0ZkhNRjIvaEtpM1FwZ3pST3BGOUFiU0oyOWVtd2RMNTJ1WWJIdnlyQjQ1Z2xEd0x0L1RYTEc3NEdiVlpwZVM2Nys3dDJTQnhydEIwUDBhc0RSOUdLODFyNlhsdWRETnNadEY1S0FZWnROUVpyTk9vbno4M2EzTUEyeVNDUWlCb1BVVlFRQUFNUDJLam12ZFhnRjliZEFqZTRXbmxXQ1pETzUyTTNtQ0t5eW1hSzJTdEpCWmpxdTlPYWJKTFVRRmF0VThHN1REZ2hOdndsYzJuZzVBSXdsSEEwUktXWHZtallwcHY4Zks4TVA5ZE95cWxHMWpPcmY3ZWRNTWYxaWdZdUtMaU9IZExaQjNxZHpIRFNoWWZwRDc3dzFYZFBoOWVGSUw5MkRjckJ2M0JrMDNWdnY3V0FiVXVPSzVENWM4ZEFHMWRZS1pGeEQwNjAra1V0NHgzR0dCMUlmMUtBS05xcy9Vc0JHY3FoMXYwdWdTTE01SGx3N1duUW44ZXd5OW1IZnNaZEkrOTRZSlgwZ2lwNjBrcUNEMU9CcnNBT2pJeGVwRzlZNGFjcFlLdW1POWlMY2YyL0xRenJGakVXa3pBM3g3VmZ3MkNnMGtiOXZzLzJQN0ZEUnZSV29uMTN1dDJ3cjViK1ZBaU1BcnJNWEFsdGxDWWgzalNtZUhtWHRoOXpwM2I2N0ZCc2d5aHV6YS9Ua21PbjlsN29ELzlrb3FHMTF4dVJjalVlWk5GNG5LZDQ2OVNPTTVHeFc0Y1hiOTk5dnNoV1MvdGsrcmdLM1RleElBQkZjd0ZuRzZGMktyZVRQeFgyakZEL2dRTmV6RjBFY1Z2eEtrcmJXTEJyVm9sUkFibkQzeXRkeE9ibUg0RWdJRGo1TXBMbVhSS2c0OXM3VjZnT2xLblB5UWhkRm5COFgrU3gxRzh2Ui9OdzI2ZnZQY0ZBVVVOOVZVYnBtSzh5RVpZdjNTQUNBUEdvSzMxUFMvcmRUV3ZUclROM0w4VVc5Sks3N1BSdVNCS1YrSVN6R0kzN1RJZ01tTnZGWnJlMGZaYkRIaWFiamNuTWI5Vk1uL20zOHRORkFxL3Z4R2N0Q0tyajFPRkxRd3o1MmZGMFFWL3UwUWQzdVlEWFp5NTZ6TEtIOEpDOHIrQXNQeE1QUUwxVmc1TjJRc3ZrbzFIWUk0OVFWQVZacDJhTzFhWmVkZG9jenlIK0F3RTZDNW54UlRYUGhmd1ZTbmVwZzg0OWx1K1dxMjBRdzRCb2F0dERTNWQ1NG5lenhrU3FtQllHeG5iYWF1NzdzSjZ4VlRRYThKdGFEQitrTmR1ZlVUcmkzVE95elBOWkdNUCtOTmM3MU8rbGlqK0g3eVM5MmhxTEQ4TWlRbEFqajVhM0hIT3FZZ2I3blh1N2tOdG43NmRMZENLTEZJcEpVdXdQdWJOaEU4blVIU3pjRHFhMmpwakd0V2t6eW81QmhCanFoWjc2b2FFT29IekRXbmZMbloxT2VKcDBPcytQVExiWkNoZnAyTU1hZW9RSjRIQVgvOGFlbGw5MDdpeHI1SW5xZ1dLSTVzOFEzek53TzNnNWh0VWlRejNHOGQ4ZTlPNU52YTVDekNNQXVwL1NweXI5QTRTMUNCQnZJb3dtM3o5cFkrSk4rYkdkKzZLSmFIWnJBdmt5bjByL3RlM3cwVEJtRXRyOVYzSTljcldvRWQzL1g5aUZYdXVHd3c3blNjdFFWaFNZRE1RYzMzbFp5ZlR3VjVuUWxzVWRNSmV1TjEraTR5aEFzWmN2VUtPUGxadDljNEsrN1NMSStBemRBWmZlWHBLZWl5dkEyWHFscmxJWVdnTGV3cWtwOHkzVi9pcVEwZTZMNk55N2hBSnIxZHdzSjBkUmdUNndsWVJ1WndHRjFlRURHeDhmcU5nSGVDMmc0eGlGUkwxek0wRkpQWHB0Vm9pV2Y3RU9uKzR5RlFCc2ZGdDZpNm16MnlCWU1Dd2RmeHg3cTl4aHNEL2RPRUJEWFhubS96ZUR2Y0s4azFqM1JrSlZpUlRwTUM4b0plKy90cmVtWkRKY25SckZTSzNsR0sreDRhbnZmY25aL0l0NXJNN1NncTlvenJNZ0hsREZkUGFJT2RQTU9Hc2xUd2l3TWZ5WnlaZ1Y4VXdwQ05RVUoxck5JbFBSaTJCb2ZETnh5MFJWYzl1S0ZmMlAzWVZLMzViVEdlQWlINjd6bVZXNVFEWm9ydlBXenF4bUJOZmJiTDQzc3ZpZEhib1JFa01qNUhuVWRobzVFKzdYVVM2MHlZdkxORHE5RGZqTjYyVGhTMmp4ZWZ5YWx1UnpJWFlTRHpPaHdWeXpuZUhtd0J3L0QxR1E4VUpNa1QvSWhTY2l1U202SVJ1SlU5MWdCY2lNZkVFU1hiZ0tmWk9hY1ZBUTg4SytYRjRGYW04RGluS2JhdGE2cFZNMGtmK3lCd1h1a0JQWG1rS1gyK0I5Q3kwbit0dG1QR3ZDcWE4SHhsWjNoS3k0N2ZIUHBwNjhHa3pjdURVWi9EdUUvZFdNQ2VCQVBENnZPa0g3Umk4Qy9wWVN4bnlCN1dHOFpHamZaUTJvOVMxY0VLdXNzWGlGK0VmOG1leFdmcXJ0U3JIZGdLNmlyTE9nT25PaVhUcEpQaWNrRU5US2Fla2E0V2ZIdzREVlNDOVh3Vjd4eW1KaXI5N004a3UvWUF3MUtQNTFoM2tpZmZEbWQzRTB3cUNacXNGTk91d1M0emFJS3RtZkdocjVKdzV2OVdkcUxqWnF3bzEyWkFROWZrZGdhU3pWSWtlTVRGeXNuRWpqQUEyZ3lkZSt4dkVuOVg3UkRGUDVPclFGaGNVQWdNSlBIZW5iOUk1Qytab3IwdXFSdGNiNHBUSEhsYWdVUStsbXIwNDBoWVNiL3NMOHdVS2tTOUEzeUlWNUQ3ajUzRDNDYWNyT0RiekYvZmF6Y1U0R3EzL0d4SDRIMldPZ29tZ1ZwTnhmZ1RDa1Fpc0lnb0pMYXRKUjloS1FURUxlaUFzK1JjaHROaEFTMjJoRWdFdXpQWnlWNTBtVzhGVk05ZWlKRGt1L093YklweWc1RVI2SU5WYUh6emdpN2VnZ2RabFFnSHBtdDA5WVA4OGZEZ01GVmphOHNucElLck1ZbDQ1M3g2R3NFQUZJMCswYlFCSjdUengvVkZZTE9KSDJtTUVQVmZmY0Q2clA0QW5GSzBPQ2pOcEx0UDBiSElUb1Vndjd4aU5iRXQ3R0x1UG1ScjVYRXo3ZWFVWFR2VlBIZVh0Sk0vOTd4OERnNVlzSDVSOWNCa2VVeWsyY0R2dzlOSmlQN0pXazVIcXBmUGRFV1Q5eVEwUlRaRzdaZG9adDNhRitCOFpNSnVNb3hvOHdHNkdrVDVjRFNTdlluUmpqdzVSZFFYaWYzaTVLbDF0NVc5dktWRzRHczdzaTl4aFhZbTJyZ3pmZ2hDT1RieExYelFERHdXZktIK3F6TUhZTWpRejM1ZXVCTjYyWnU1SXIrTVdGeWZ4QUQrSTB0VGFxendCakdEakYyd0tmbHhGWWRyRkxFR3FKY0lsM1pqVHRnSjRwMktoRmFFWkV6N1BCQUJhM0kyQXluR0xPQ0ZPRDRjbGdrWm43UytDVlpCaUYrODE0MTcyT3JNWVVSRHN5SVl2Y1Y3YnYwdnpFSEExcFNtdnVmY2xjQTFBU1NZcjlSOUViSFE3MEs1WFRZaHk1bWJWVmQwMHIrem1yeFByeGx3WjlITXZOS1NQU2IwREVZYldLd3AreDRQT25OdFl3dUdMQm9HcGE5S2xHTWxYVjJVaSs2QXNydjdIUWlaRnlJakIyb08zcW1sclhWbHcrQ0oyRmdiL0J4b0NmakdEbkZvUFJwUEo5QVlFdnl2SGFBTTNUb1Y5RGZnNHZ1ZEE0cnB4VGJBZm50THJsU2dUbXVVYUt6QzVVNWg5YTRacnptK21ndC9jMXUyUDJEOTYvb0tWQ0xZZ256QTRhanFFZjBMOEZRUUtsamNuaFY3WDJqWnNiVUlBVzhSM2VBRktKMDZqekY2QjFicmFRZWRZRUd2Ylo2OWk4aVJIY0xBWFNzRzI0ZWhRcm91V1ZpRTlRamU4dStrN0I3N1c0U0JJSGpmbytnQ0ViQWFJdjlTelNmU2hTNVN1VmNYRHpLZmlRV1ViT1JmTjhLZ2E4Mlo0RlVkckwxVUxNM251aEQyVXptcjdxTkJPNThEbWJuTDRQU2hFT0d6Y0NVTE9CSXg0Q255ZFIraThtcVBDUjMxUkVRWVdITldWRjA0KzFUNC9sOVd4N1p0T0EvUXZxeGhMaUE4YmptdzFKUlFuWFV6Q1pVSFRHSE0yakdLY0JlUFVIb0Q1UjNMWTJBNHNPSk02YTZNdndPM0lWOHRXbVlkSGI3RzVJb004NVRrQmdOVWRBU3U2S0VLVjRYa3JVR2ptZGVTaGRmMWF0aHhmQ1BlY1lIK1prbE5jZ1JSdkdyZG84MndWUUJSa25menNwSUEyeGE5NXJOQW91VUxibGoxeFlvYTM2Q1RIMEl5NmV4aFI1Q0xXNlkvOVdpMzdkTGt2ZitLUnllUTVDS0ZqZmx1Y1ZxL0lMNjVrb0J5N1g3RzQzakNta3phUHBra2ozNTRxU1NXV1RteCt2dDVuY1BwbEF0ZmFnb1VwRm1hK1JPU1l6a0VSdUNJdWwvSnpHZE1OcGpDT2pLWlFFUno2d2JhV2tFeHUvSVZUdTF4WXlTMS9MQ29zdUZhcmlkUWprMXZIUmJCd2V1aWtSU295RnNqQlEzOWhkMEhIeDkrSkpXckx0STI5NTVRa1BOdzU2T0RINHBuYm1NQ0J5Uis0cHc5cDVGOFlnZytGRllYUlYzVjhlb3ZURWwrWGdzSUhnbDZpQ1JrVjg4NTFzdWUxRmU0WVpLYmU0eHc3Q3lZZ0NzYjRSNzZSTitOK09wYkM5TWs5NHVRS0JSUXN5Z2JnUm9VcllLYVlhNnh5WDJ4VDZMODZURDliZS8xaFRReFdobEhqbFhOUVAzamYvY3lyb3hkbzQ1MU5DMnF0VVA3N2pOMkZPVzVQdisybG0xcDdPMTk3Tkd5eGVBd2VhVmNZL0FLSlRyWS9uVnVZY2hzS3dpZEdGNkxCVEtJcDUwSWwvd2lXTmNTSzhCREdxR3JlUTcwckV0cjRDamJmcXVEaDc3YjRRbXdoajhWQ0VKTU8vMUVEcnpTU1ZqWmgvZnBwTWtIUXJOOTc5ekp5OUY3SVdWVEdKNk9SU01rTUlTSzRKcDk2L0lVRE0xVnVrNGhZSFd2Smc5bUxuKzhndm52aGt2aFVrZGtPNkpTNVdYY0c3RWtvU3lyRjIrVDZlb3ZqMXNIM3NtUEorK3VPejlRMmRuVFlDTStDdjVLZHAvbUlmN2dvVnBlc0V4NmNETFlIelhseUdHZmNYbk4wdjBjMCtmaWE4aXl0ZGhVQjkxVkx4TlI4cjkweU90MngvQmdtWXVHVmx4MUtFWEd1MGFEaVh5bklUYk5wT0xQOVBTKzkwWGp0NktLd1B3MnpBRFZ1Y1NoR2daem84VCtpekNsNE5hWjMzU2VpM0Rxei9yOS85YTBuMlluRmJCSDNZYVluSFF0dTgyM3psYzZqOFhzSUxEK0ErdlNwWURhWXFSRGpnejNlTzM3djZzYitLQWY3ME9yZmtYalZhWk51YjEzYWZvM2N0SjZmckYxMVdtTDAyaHVpUno4SlN0RzAwNldLVGE3WmZ0Rm41UzJtQ2N0eDNHem0wUk1TUGpIY0FGVTZsZzk3UzNwaGtvRUxXQjZTeGxHalphdW5ybGZJaTFFOWl1WGd5b1dwLzM1d3prUlZWS0JBTlVHM2VsOWlWR1dVSU9vYVhYcGJlUG1nZG1FbEwzRVlkTjRTbkh5SUdZS3RzWEVCa3QxaTFuUDlzUktMMlcza3NvUVFDSllZTVpoUTZ3TGhUYmNxWlFGeDRBUkVLK3dDQ1RWNC9QSU9RQTBKL1pLU2xrVHY1S0JNOE1qRTkxRTB3ZnpyTytYMEw2cnBmUVhrWkw5ajBvRE91Nkg5UkpLQ2VNSkhLK3FIdWhkb0NPZ0JDdTFFQVV2TUkwOWxEOFhiVEcvVXdxR3Mwb3BtLzFEc0RkOHVYQjVOWkVZS1VhejNPb0ZsUzg2M2NnUlFHV2h5RE5KNFd6ZS8xYlIyV0VScnNaalpMc1JUR3BUWXV4NmRzMnpmQXpuazVxL1MyQ0dZMThYcFdESThYUDJ6OHkxSFNteVAvVU1VWjdXNVJpSFQxbkR3WDVPYnFKTXVyZzVLRVpiMHYyaFR2YU81YzRvTlN5QWN5MkdRaHVOMG1xQ3NnYVZVK3hyR0hxQjRJVGh6dkNMMEY5MWlZRngyQ0Q3Tk9ZNGFOYXlUSklDZ1FXUHJHS2xPTGxPdGVVemJhVndFYzRsM0xqdDhlbnhveTBodW5tV1VOcGZwdFlFek5oTHdmWUNxYkpKUzJlMGtRUlZmODl3a1Vscm85NS9ZYS90NkI5Y3NOcEdld1lTWUttM2ttZkhvZExaMGtNVlRCMlZaY2NIU1pKbnA1OWx2c2lldlpKZ2M0YlJrVjVDWE9sU1B1QmFCaUVjelhoREd0THZ1bkJXL2I5a0xGWWdkWVl4cnVPYTI1Ym1IWTNWYTltZVcvMnY2QWJZcWFKQXdXM2ZyRlBsbWkzUnBud3o5bzEzNTBFUmhBODZhbmFUMkFkOHdmMCtTaW9kWjRNdWNyQk1iY09ZdjZRKysxMDBDN0NKZUNSaFNCRm1QNFlQcHJ6YVlTeVlhVzMvSFFIdlZlc1lOL01ib3RvTXBRSFQzRlNhbi93dVNPT2N2clNySkg4a2tadldhclljTnZZSG1HUEV1c20rdlFtMkpmSkJrc3JROUJQMVFvY0JBZTlRcFZITFJ3U0ZDbU9HbkFpNzZiTlRaRlBzTzVzNHpEMkIzZC9IeFJGcURObnhOZG5pT2c4aUhsc0sxNVlCaWx6cmU1bDVQUld2WnA4S3ZLZXFNNHZDVnR6Z0lGTlR2ejZsblBlT3loWWhXTVVzWFNNK1k2TVNaUWxxOG83b3BIOE1wWm9lYzhzT0VEVVdHV3hheFRaL0p6ZmY1TjJLS05adXhOZlQyMHVNdzFpQnVoQ2d0enVHZ3Bjc3pqYWswdFU2RitmdVQyZVJTNG1MUG00ZlZOVzltS1FMUStNSzVQSE1UQXhRMGpBQWoybWpnUjNOSXFoMFVZNEFEb2JNbDYwOTVqSU5LRHVLRjY4WmFPQ1VRTjVqWXVuY2R2SWwyWktTQmM4ODc1OVVJOElhWXNWUk5GSDJRemg5WVNjbWt1ZkFybGhRRVcxekNIeW1rWEFaQjk0WUlMK1owelNpL2dJbEpwOGdNcXRHaXZ4bUdUSCtIRHRxOVgyNVQ5OHBzbHR4NGZtNko5M3FyWlhJcnJhTDJoRXZiTTloSWkyWGErVlhacWhtMVVJVkdDdHMrOXpsRXplQmI4WXhqaENDVlJZZUdCaGZaYjJjMHBhb2d2aE5IMGIzRVB6OWcvMnFGaXZTRXdZdDY3aGNRdTBkRkdSYmlUSnljRUZYaml4Y3dZTHYzblEyeEE2SzlFdkkyRURobUkyZGxRajN0Zm1DSE5QdlQzY2p0R2RZVWtxNVVCYVBSZ29EbWh3K1p5VWRPRjF5WmhteHA4bWJnWi9WYkRCc21tS2ErMFdxZTF5NVMxNTFMekVJNHBrL1kzNkx0RWk5WE5ZWVdMT2tmaVBxTFkrRmg5VmVaaE9CdHFTOXo2WTdKOGc4RG5aT2piK3N1eWVsR2RJc3ZzQytuMXB6Qis2bmd3MG92blRXWi9XaXBMM05nb214b0EvdWdmRnFTRS81QnBVZ0QzenhlU3ZCUjB1T2NSWExBSHAzNkZHTTVSUUVsSkFFbXlLUmt3b2pnbVVXKzlUenJIMzZWWWhSb3AvcFBsaXQxWG5uR1VERGFaKzhxdTUvNDdtUS9jSnJVSFpyenh1T1JCUmJiODV6Wmx5QVVWZDdjVGdTNUJITXY0aWRCbVdCWm8xZFdTaW9kcm02VXE2RnJKa3FGTkRQeU5Zd1lkeDMyUmErT21jcFhuLzhrVEUzdHB1VjJEd2JhRmxwbGUxZmtCQy8yZFJhT1NSaUJZUFFMQ3ovVWZjaXpoUTlXUm5JS0s1czRjV3IvZ01ld2h1aFByZ2ZGYkdKY3NpUU1BNC82NTR4UzdXYWo0aHh0UzB6cUlJYk5VZjBUbWdZdWVSUVBhSGdxRk5RWlh5SzkvdHV6MWJWUm1WMS94cUxtNFFVYkh3eEtoSVR3TlduVVNJQXVvYlBaSmkxVlNMa1c0T25kSXJUWHFaSzBXMUtLaDArckZyZjVFVW00K1RvdnFuMmYwMmJuVVp0ZEoyVkxnU1R5eFdseUJHTjN0NE9SbW43bmVjMTF5VDI5bzZTWXp2c01MUVZGN0dOQXMvYzRWMElGV3ZEMkFIOVlSS1Z0dDlLME5qcGZLWXRlYXJ0NjhiVk9VZFpvV0JXMFNHdFN6Z2U5QjgyZCtEamoycHlqcUZwSDJxQTR2QnlEdGEvcGNPaW95R09uczR2Q1VPM2dITVpQZFJZZUo0a2k2ZHVuU0xSMWhLU2Y0SzBOYlo5SXZFU05wa3hEM0pGbEhXZEoxT1hFNFJWbEt1OGZvcTVENll3Um8zWXdiNitrckM5amtmV3dyUjM1ZXo3U1EvczlHQTlHOW5McGNaaFROSFh6T2RHY0UwNlJkM1hMcS9wRStSbHBMQmZzZkxrODZuK3UzMVlhTm9mNmZqVm83cGdGb0xxbGVXRHFxei9jaUlyMmp2RVNIcUw4WGUwU0FaMG81WkxtSjhzSjRtQjloMURwVlpmaUJnTy9YcG5KMVljeHc4NEIwcU9obUY4a05kVlRKMjBMOXk0aG4yTXZFd0VoSTliOVhOeVdXZG1jQmp0ZXhDWld3Z2t0bENRcnlYcklEUWlmaUFQN042dlplYlhRY0JZcmw0a1pDTEZVZjVzK0FjQkRMUng1eG84VG9scmgzKzBwaUhxV2svazdLbmNFZnU1Kyt6Unp5WWt5WVIxTHZMRHc1S2ZpMXQyWS9EZkY4RlBEdHdXci9CT1ArOWZ3d0owV3pkSk5acUdTenN5RTZKZFNvSEZNOXpIcWJQbERETHljZTh2UmlnU0RYd1pJbjBJekU0azkxVkFUYS9pRVNQcnp2SXlTcVAzMmhHMjQ5M3dTY2hsaWl2SWhIZTh0VFVUVndJazdoTkxBRTc1QTlBNGRJYnFCcGI4QnVMNzdGcFhrUkFJRXdWR3VVdXVEcDNHVjJNQ3Bob05aWC9QaXRib0ovVHhDVngwUWVpUXA4bHVKRzgvSU4wTlA0U0RBakw3dk1MMUt6YXpzVENxV2FvUEtycFRLeHErVzlSTDBVaDBsWWFaZ0FkWHhESFNqUDlMVkVIVTgvYTB2UktxdGEyTDYxcklUQ0VCL0FwVWwzd2JxbU1hRk9xdE9kRThrYnM0UkhDS3JVNmxHQnpCd1MvS2gxbzBFRm16L1JHQktsRjR1UlZ0RW03akxXQVRZYlQ0SUlRSkxwZkVqbmIrOWRGcUNuMVc1dXpEYSt1NFRaZmsvN3VBZk5GMXJwYTBWV2ZPcVRuamxIMEtDVW5UdVhuLzlpT1FQUGZvczVweC9qL1dpdzdrSC9BK0VtVFRIemxocnRTZkxncEZOK243ZklNSStMVFB3dkNhOXphbWlhYXZNWkZiU1JFM1E4dDZhSktyb2JQZmFnVnRUcTFyczBPdkhYTjAzN1NBS0Zsc1NWSTErRVllUnR0WXNJU1hYTVVIUUNzVDYyRzcxMlRNUEMxZ21SZjhxUUFhK0dlSncwRnptM0RrUnRVVEhZTm9DRy8wWU1TMmFhMzlOVjJtS1NyTC9JVHRmbXArY3pWNG1jNDZHN0IzSmlvanBlYWI4L3dMbUpkSVNiMUFZT0kyRG1XSHBPSnJ2Z01zYnJDeUxWeTEzWm9OaHlTbWtJaWZUUTk5NlBEY1B4SUdRT2ZWOXF3QVcwOStadExxSmZ1ZWZaQW85MG9aYngrMlkwTFZ2Wmdwc1pJb2lXZUs2OW9FdnlWMTg3NDVOdXBWcjFtNkh6bWgzdGtURzNTT0EzMGtGTVJNYTljc2xoZVNuK3YzSDBtS1o3OXFkSElDblNxempHelRjY05kYm1hL3FsdU1ZcFBZMml2VWRMYTREa1hlOElnRzd6M1dvcklzVmhpS25sUGFPeHhpc0N3anhua2U0V0ZTcVQycnQ2Vy9sdEp2QzNTcElnT1VETUpyWkhoUWRReVg0SGJ0VzhWTnVTdENrZmVjQkRjRkd1WFVCb1AwdVpDZzd2UEhXZFZiNGhSVW4zQnpKckFlV2xod0FqSnFIZGhVWlM4UlJpM2xuY2w2NUZlSjQ1NytBZ2JYSC9VZTJyL3VscDlQbXdMNDM3YjdVUU5VU25LTSt5UStMd29NMnp4dTlMKzVnMlEzakNmdzR4VmNVQ01pRm91QmdHQUMxNUR6U1NmQWtSUlR1ZW1oRWgvRGM1RlUwa3RoWTl1aHI5a0N2cWhOUTJFUDFpemxVZUhONzluRmlnckdwbjF3eHIvSldoa2pONnRHS2kyaG91d1FyTnVwWSt2cW9NZnJ2b0JtU2FVSWlIZHBna0ZjN3ZEQWJGdGhyRUlqUW5FVEN0OFhZc1dQYityNVdzaGJYbFgxZUoxV2pQeXJJcXI5bm95bmpHUUFTYTJuQTZyRkdtMnJLRWxwRWhBakN2Y2Job0cxQk55NmlzY0JUdC9QZnE3dGNjNVBFQlQ0bXBLaEpmMTJuZXZBRmUzUEx0eWhyYUc2NnN5NDZzdzNkVXJlVG9qalhFc2laeXUwbEF3aXFsREtjTDRQbXhwNnV6Ym1UWTU0Z2ZoeCtBSkU2bjdhMmFEU3Zoa0JrTjUybFF0OWxlN3ZqcHE3MHptN3JteUJ6SzA4SlRJa0ZoSEZXOW1LM0JKRWcwQ0hvOVd5Rk4wVTloY3hRdGMwLy9Pc05HMmFDc3Y4ZTU3S2hkV0JOenprVUtSV0t5dWhvRjRXQ3ZKTlp6NDlrVWZOZDFZcDNxVFZBTU1ucjdXd1F0MzdDL0ZUUjN5YjMrbEJiRHZaWUE2ZzhRMDEyV2xma2JEY0M2NGxaTmdmQU50QnFab1k4VU80U2JLcnFadGg0bVNjTys4azM5cmxSVnc2Nm1FN0tMdWhHZUZZM3ZXWjJvWnBnNG5mSy9nTE16ZVJ2cFloM1Z5c29OcitYRVdURCtNdm8ycWVhN3V5Tk5YVDJiR2ZhdmwxbGRNdnllcXFMRWxldW5lZy9rbkYySTRnelpmZlZJTHA1VzAzc3BNZlBTZ3Z5MHBzbHZ3R3MvSU5lUCtBYkhKeEM1VTkvdXF5alkxbVR3bTFocjRJVEkxaUttcDNrbjQrREZMQ3hOdWYyMHNMbGdGMFgzekE1TVpUQXhDT1NacklxZVNpOHVGR1Y2VFE3WTJvOTVndnBXMy9hdzhOSHl1Q29qSUFicDJ1U2lBbEZPMXRTdk9mNmcxejVpRVJROE1odzRRb1R2Y3R5dEE5RUprVHRuUXJ5MWQwb0U0ejJUZWpBWVZ2MWtNRUgycVRZUmc3WHcwY3lHM25FNytSYjd4czBCVlhkckJibTdqb29Za2c5V29HSE1JU0VSRkFNNmhpOURiYlZMVXJ5UlRmUWdaZHlyMWxIOFI5NUlSNjNobFRKWkc4OTBzMEtiRHo0TFNIY1R6RGN5dmxzMG02M1V2YXU1MFdQT2t6MDdDNzk4MEgvSU1mVjQxMCs4Qk5HUmhHcitWVlJ1eUNBWnExVmE1bEp1ZURBYkQxNUlUa01ZNzVTcllyVktOaUZCL0pqNkNGSzFLOXZtZnk1MGV3eHAyTE4rVUNNQ2VKaUdvdWpNYjBPcmhnZFRRa1BZNU1ScmwxK3dsWm9lSkdaY09BTVhQd041ZjBjR3psRWhZWjBNMkdUY1VQcjFBYUsrcGttWkJjTTFwOHNTZTh1ZGtkSUsyS0xwQ1c3dzNlWTFaVXgrM3dQcTRMK0dOODFJbkVIcXQ3cnEzNWRlYUNRUHZDN3VpeU5aRWlzK3pVamVkQ010d0FzNVN4LzZQSjdod2RBU1NId0l4SDZseFh0MTEzVWFBWXBKNkVvMDVXaUI0R0grRFlEZUd5SzUzZmpYbTlGV3RFbjVjK0c1anV0TVdaV05MUnl1aUwvSTRCazhCZm1KY0ltWkdOK0YxajUvVW1YcmxyeWlZZzR2eUllaDREQktGUmVTS2Q3dVhubVJsTTc5eVRJYUxvNHJlSC9ldkNaTEVPaHYrcElybkJjaXVwU0JTU25pMlhOY2N5SnNrN1pXSHJvNXJNWk5HN2hIRUVEcEo3SFB3SXZJdmxycllaMkdUb1FzaUxWYjBwNFlab2duU2xCelp4MGhQTk5sUno3cEk3L2Y3TnlLTWlsTkRZSDAvMURNL0tKb1B2MWdjTWZONVFTMXEyN3Y3aUFSMTVXM0JCVWRCQXFma0lZZGxZUEl6ZXhBRUQrb3hqcUozZ2ZhUkhoUmR2eGszRys4bUg4OHlnRzdoZFNuVkFFbEhQajBmS2NnR3lIVnZLU3laYVFxckRKVndYTkZ3SWEwZDNxWlp3c0xyZGJYL3dOZDVoSjhaZHF5clo5RWZlUXl4ZWFzNjNNUm5kMm15YnBRUnlvZ1pJais2R2pZdU1ubFJnVjRQRG1CZEhsQjVaTjlMTFhlQVJZb1k3bkorMnpRY21xNXUwUm14cm0wdFJPNDV1SmdPQzh1dHZ2SUpFVXZxMjYxZWk4ZmNvUDEvaGR5UDM5eDNoM1VNWVJHTUtsYlI0MzFPZDNnZGpsUmtPOEtVWG1aREhnNVBhTC9ZVmRCNVFXOHArQXl0RU1oSW8zTzZ1Q0dRY0o5RHVyRkMwVGVMazZTaFAwTG5COG5xbkhVMkVqWUx2eW93ekhZYXMxUXVpQUZSa2ptT0ZtTEEvUWF6UnNudks2MW5qNnVvRzg4bVljeU0xNnhINjFsNEllR1d4S0NrUHVJRFF4UUl6NFZlVVJKbmhmbzBEamJqTHRTM2EvZ3F5T05QYlJrblZvaS9SZm5hSThjbU10QWZra05wQTd4QjV3VnJDUVBSNTljbGVCdUFmSEpwVnpFYzI0SkRUR3IySHphd1FnQkRjcjBqdmxwakZxcktXeGEvOVN3KzlNTndzMFN6N3Y4U1ZHOWlPem1QVjJnNldLTENIUi9UYTlRL3VqdmF4ZmZMOVpENDh2bE1DT2c4YmorK2xLbCswY2FZZDhlcFlldlZPMTB1MXFhWCtMREhSRDZJRXQxTm1vNEsxR21hTEM1NUpKdWxMZTUvM0NmZnJIZTVrVHNRd0ZiWldyYmV4cWtIRXJYeVM2NmJwZ3Z2UWdnRHZTSnl6RDdaamdLSUdsNXovVFoxYkJ5NkRqclUxQXM5L0Evem1Yc0xxdkpDZjVOY2o3TnMyMkowMk01T1BSTEs3VzAwNUtBMGFZbE1nYVkwRkVDMENTNTFFVVpnWWNaU2F5cjBBbHdHVjN0eWpockpIZkRXcks3N0hoMU1GOVd0czJtTnp3MEEzMUZTdGpHQXZpNXdQSEsraVpCNlIwY09PeTlWYlVTNFVFS21UNm5iY2J0K2hFczdPbmpKaTJmQ3dVZTZtblZBNm56Q2c5dkwyQXlHeWdrRUxIY25NQWtleG5kTFF4dkx6V2JSYWpkODY3OEdHK0lMblZOcU5uZkV3b3VCbGxCU3ZYOW9uNVdRSWVUSlpIVXd4UmtPQkkxVCtoODdVZWErRUZTWjkwL0Q5N0lTWDhyRUxrSGlaa2NrcUQvVVkyNExEVHVmWitiOUhGcXZOWUJhdnp5djhWRWJqZEg0RVhGRk1XMk52UFRFd0wyRXBOQVRtZGlvSjhMZ2ZENEtGbUFHeUJnanNpSEhRbW1jQlk5dkZTUDdHeGl6MzFDUlV1RiszSkRvaEc4bWxzKzVQVWR0OXhQRHN0MVZvYWVYTEdacGs1VVZzU3FHcmZMTnpiYjlUSXF5d1JVQUlodmxRd3VzOVRpVlkxUjBOanJFQXk4dnJCTEVLZHk2OFh2aWZudnVhVlptOGs2aHYvY3dkK1lmY2wrQ0VEL0xENUYxUjRITitoS3pYTzZPSm5UUEdFSjU0SmljeDVLRnl6dzNoL3hVYm1qZWpqVERncVN5c3FBRXJwMFhZWUd6bS9IbXJ0OXJRZlphRjUyRSsyTWI2VGJjVngzL0xXOGtsdmhsRWxhRnRJaVZkVjF0Zjh1TngrQUI4cVFVRERlTnpoeE1HRnc4ckpHVGQ5K1Q4WXRtQytqSm50TkdLK0JFNzFBNmJPVGdudUtyWjUydEt6SkZTZDVtcnNsMk5zc0RpWkdjTmFnTXlrRUhHLzY3ZEhQYUgvYjJoNkhhZzl1MW1Mc1J3MzdiUDk1dEFtZUEvTDFkdUhRU21tK3hLMWtNUUhUb2w0MHZmaDk4UmVSUFBaeEZQTmdSMStLdStIc0dMWlZPYnpKT1AzbkQ0Mjh1WkRsWGlJUDRBYk5yS0NQSE1EQ3JVOFhqKzF2L2xaQU9oeWJyMkZ3L1FqYVcrdUc1Q25Gb2Y0blJwYzM5cTNydFhTWHgyYUtvNFd5Tm1HcC9MT3VjdCt4VEIrVlY3ZjlwbXVJc3ozNDU1Q1ptOVFKbVhiYnFxRFBtWHZEazdINVFoeEQwUUIwR05uZDFDMHgzTFYyVk5pQ3YzUkRzYjZWUUdsd3FnLzZiR3A3K3gwd1E5dEh5MjFlVEZYU2VvQ0FzeVNQRmdYUEx3SjJpQnZScTZJNXNCL3M0S0RiQnJLVTh3UzN0Z3UvY3Q3VURXWThtdmpzd0F5YTFjYitVMElzMHFoMEp5NURDSSt0OFRFY0Y2UXI0Vmg1VEZNdElnVkRlOWk4Ylo4eE9GTnRHczVSZ05XWTc5amVaeUlDamN4TUM2Z0lwdWJtdExZSjA4elZLdG5CVVBFcXNhaXltL21PSi9NTk1iT1pFT2k2Zk1UTHdlMGVIK0Jta3FPMXMxdzRONmtocHpnM3lIRzBHck1NQi83TzI4Wnc0T1pJc1p3TnU4QmVCeEVCeVJObnRyR3FYc1ZZTkNDZGp4ZUhteDAyZzZJVUhYVTg4SmxlTDIwZWgyT0haTjlqbTdLTDI0ZFV1UjZIL1k3K2RPWEV0dlY0WGMvZm1ZZlNXcjBEdXV6aHppYVdHbjdHRUFRTzFZd2dQSEU0dWIxaUVab1JqODZEVDM3c1htWVd2OFc3bmhiZFpLV2xhZjQxaE1JeGRrTzl5Yk1haE9DQ3A5cU8rOHlOeldnMDkySWVBaGZ4L1Q3VVNndkhQdktUb25DTkF1K1RNZnRMZ3pCeDZzbDJiNmR3czQ0akpIRmkzSlE5aUZPMVV0MFltTWY3bVZxTzFOOHBOc0poTXZQazBvR0t1aHBTS01NbG1BSllCR2x5bmhzVDFnVnBvK1RDZzFHekFjNlBkZ2hGV3NmUnBob28vMUVHZWFqWmQvVWVYenViQmVSWW9rSnExS1l1b0F5NHpicHNsMUlXVkJTSUdVaUY1SUtpVG1veE1CQUQyc1lqU2hxcVdHK2hGODJFdTdLZ1ZJM05UeExjeHpWMmVzVVh5Sm9kWVlPK1ZRd0tyTTlFak0wVFhOc0EwOFMyekwxYm5hK3VIRlZVWmFzWW1zWVVvR2Ntc1l6cmRrQW5VQ296WWllaXdNeklQck1FOXpTSmZnZUgrR3JxVi9BNWpjM0ZjenI3RmhaNjQyc3ZSbHIwTWJic2J6OHM0cFF3cXRrMzliUmV1NHMyeDl2a1BMZkVJTEhYVlJzeTlqME9hTTM2RlA1WlVxbm5RcmJmVG4vZXA5c0N3VENYckZPU3JrTlVnek5zSldLUmJpZDdGc2RvYjdQWm1ncEZZdGx1ZGNhR3A2alZFd0FlMjBhTlBKa3U1bFpVL3Nralc4R1hJWE1hRFh1M21reVNwdHVubWNNUWEySHJTeHNaR0hZbXR4RXZqM2UvWWVnc0owRXlzNHYrcmw2ajlka0hTUXJ6SDZMVkY2NTZTZkVzQUxFN0ROeWNWUjhRN1pSNnRjbkhtc3VNeWs2d0FvQnlpUjVsOW43T21nWHBqTmphNUJpc2RMZW9DeWRuRzIzQzF5MEw3Wm5JY2lNRjJBaTNzbWQ3c1BpOXlBTWxmTlNzNllXRUhOandNK240ejE5c0VYbHA2Z1cvWVd2cE5OcWYwOWRDelE4NGZBb3ZuNWxrdUhyQjJlSGxlWlp4MU9FTERoVnN0Q1FVSC80WG9BR1hEYlJqak1PM3dYYUFxbHJvWWQwMDVXTDVxbHNKRUdQR3hDeUZPMGYyTUtQNERZcnhRZDZrdldnTDc1YUR6eXJPaElwaGJUT3NHTGZTZW1TN0h2blBHdW5xOUpEQUE0N29uNW5QQy82OUJ1cmpBbWswNjFxNE9yV29zRTlacFhPcnFwWUtPbVh2UHVKZEJUK1p1c05UZWx5TDQ0UlNEMlFySlJGeWZuNzgybEpNR245SHJnZi9ITVVsbzlkR0UzY1ZVL3dWdStxTGdZNTlEM0J5VS9ZU05JMnBHRFV5eUZ3QWFsUmJLWWRhZ3hsTWdHem1zV1ZBelc1K05IRXliVFE0S3RoUGNvd0dUUkppMmZsUE04MVA5b0c2WWVDSThxcGdpSEx6WXo3RnJ1eWNnV1pKaVpHemtHMU8zN0VnMlI2UDRQd3paRExDeUprNlhIWjRUdE5VRy9NYUh3cGIxUmRIS2dpcGg3MnNwbzFzaTFybXZWd0l1WTRqM1RSOW41RVR6a0dIR2xTcGZQTDFEVzFzWjJ2VEc4bklVbWlxME5tQmJxaUk2UDRoRHpDR3NtY2wycE1aTlRnQjFXWmszdWE3WjhyUzJEN0xaeHJnS3BFbVhNOG9hS0x5OGdJbUIyYlRDa1dBVnA3Rzdsa1kwVXo3Tkx0YU5IeWx6YUV0VXA0Z2dXdnQ2Sjl6RCtBU0E5eEZnYzJFdkZhdkl3MWxxc0lKYWUzNTA0RzFUV1BvMmkwamVPWEI5djd3cjNSalZkSnJuNTRsa05iYUltdnJsU0N3TURGSjNMNzV0ekRqWW1Cay84STdJRW1nVGgvTVZNYndRbW0zbEZJblVHNW9PVWxtSjRyc2tLSUxkd3k5ZDlVazdibjVUZENRT0IwZkg1Q0tzbzRjT1RBWUZQMEFMUzhsN2s5Y2JjZXp6TlhZU0QxNXpiVHB6aEFvMURrbnlZN0lRamNpU284amNyTU90TTFhUjF0NSttODhRVm9PZTFwd0xtUFJyanZiQ1Q3M0NDRjJScExoSnNZa1FNeUFadW9xcmhjYm43ckdPbkxEcFRWcDdqZFVjSUR1Mkx0WVZROWFocWFjUzRpNm9oRU9WVDhhM1lxYXBFOE5rZlZWMjlyMkxWOEdDcjA3dXh2QTFjYUJqY1M0eEZqazJYZEROT0J0MmNJNVRRKzZpMmgvTkZDVmdCUVRQempQeUtBNkw3NlNVMkRiem9pa3lwOWttWUdmN1UzRGJFNFk4UiswMWRhNXp4aVBPVHkzNVQ2VTlTclRsVlJ5UWhkbU1paitUcW9RWHdicTFqVEpNTEtWMjVIaXMxdDkyd1p3bDJ2dlUxQmgvYUtUT29VdlZ2eDVaK0pkVHFYNmRodWdLNWdsMWxvbG1haTNlbjZCY08wUVMwdlZ1c1ZaQXViNVU4dnltUFd5MWh5azNja3h5Q3FhSW9XSVJOK3c4ZDk0V2tLR3NmS2RSL0xnQi8wemxkSmN1VmE0MDEzVFlGNDZKS1RvUEtna3BpQmNha3hXcDQ1YVpDNUY0RXorbTZ0dVVxT0Zza2tDVUY3YW53VkNCMWxSYlc0UTd4azEzOFJ5bE12Z1NXYkFLeUdvTm1keUpoZ3BDTWlpSkhEZmU1T1RKMDJRM1BFajMrTGhrbm1rbGh3VVpIN2swZWpZejFuaDA2dTJPb1c5SHBSTFBzOXVBcjljckhYY3dQVHJ1bi9XMnJsVk1jMDdySEt6WXk1bUkyZzlFcG94SmJxWmRmSytVOHZqRHZwR2xVMnhFQ2RrRHk1cVkyMjhMenRScmhQdVNzZDkrTUY2eTdDY3F1RjhLV0VidlV0VDk3dHBPVUM1elBSRG5lRk1pMXF1dDZRbGlPMHE1My9YdUZsbmRMVGFybG85YzlWS0hEeDBNRlFldy9GZDdQaWNQVGsrWjNHUUVhUGR4VjcxY2s2enFRTDhGQU9ZS1JaRk44dFBFY3BMSjBObExWWmRkaEJobUJrRUdwcmw3TVM2bWtNYmFCbkkrbnNtRFhjUGNpalFFOHNobjFSeTJHTDNwTE5BaWdUL2lDa3crdWRKL2kvdDE2SmRnZ1BjSERFbVB1TlZZUVcvZTBVd1hkaEUzSXFET3ZyMktUMzdOeFMzRUtHdjBuekZUbGdlcmoxNzVGSkZuNkUyUUJ0NEhGTEJjdVZ3Nk1mY3FNOFhTWlp0RTQvOHlyWCtGaXFiQ053U1ljaHJXVVNtK3AxOEJsOHVDNHZzaVBkL0w2VzE3MHphRUZMMC9iUm9qVE8vdEtweVlISXd6UW5qSnQ0YWFxTjh0RGswSVVSWXJ4VzcxeCtaRHVMYzZRUFl2VVZwTDRna2U5RFNzeDZOMUVrTWoxMWxsRmlTeWhJR0NKMnROQWtMOFJwNlBwNnpML003bG5UeEtvVk12TFZ4dm9JZ2t0NWY1dit1NnJUT3N0SEtMNHZUdFpYblZTdnhic1dSSkttSHVNelpuM3gzN1VlMXJSMjZhdzRPcVd1M0xDSFNUZ3RhWWI2YzRnbXBNakR5TUVpdlE3Z3B0Y3FTelJhc0x4aDhGVGFFeEo1alBIMmNtREFFRW92VTNBc0g4VjdaS2p2WkplNjdWWTdJNkxmZ1I1NS9GRmgvRzVtVVVZM3V1dUhQVjBZYmU1SU9PTHR3Rit2VU9jNjNJS0FyMzJ6L25iMWQzdWIyMWJTNWVZd3J2Ym5QeldqRElKenVWbStsVG1yVklsTzVONHhpMnJaMDI4MW1ydTlrV3l2ZC9EWXR4TWl4cEdlZ1FCTVhyek0zN2lNVjBsOFRWVWswQ3oraElSMmVMTlV2TlRwTWhzM2RxdVBuMWZPempLbGRhNEpyTko5elpQdHdrSWkvbk8vNmlEY0VFMktkUmsxUzlnc3BUVFFLZjI1eGR5ZVlOQnNFZDdxa2RlUlNYN0pKVXNZcUNIeEdqcThhM1VnM0hvUk9XT2M4QkxtVGU0M1lNbUZoSm1sOFg1bUdkVmxrK0o1Q2Y4UWpKTGJWK0twSmRPUUE4cFZFbURhVVJEWlhObVRYZTFhdXhvUXhoQ0UvdWo4Tkl0UlVQT2RCRi9RS3hvam9UVzM4WEZBVXNFNEZITE9LQmIzbExFQTBETThtVUcrT3ZzbG5QOGtORUp3NCtqb1FhSThRZGhsTGJ3dzEyeHMxNk14dkhqTVNiYVY4eUtzRmVNUnRnMGhMczFkWER0U0dxUUt1cUtLSlZSM3NjSmVWZ1d6NmFQbDY4N1lsbmkrMUZOMWFLME14YWhoSWw3akpYd3N6dWhyRkRHbmNoR0hzYUQyR3JqbTlqai9RMmtkeVhpQWs3ZG9xYk1uanowcWxhZEtuckdyRTJrM1NGRVYxWkwrWXY3ZnpiTlFIK0dKOUxZL1dwMHNVUkY3YU4xZEZiMjRqME9vcloyblYrQUFrT002TlNnRjBIVVBqclZrY1h0Qzc3aDREQ01BTkZQTDBROWtudzIwNlNONlowV0oveVZZa2dGWm40cHJYR1dNUWxUQk9HLzFLS0p2eFBhdDJpaWM2VlZKNDVVZFVLUXNmSnFoa0hKUmRySmVmK2plUDAvNW50UElTQ1F1TVFYcnVrSFBZcUJpTnB6L016RTlUZ28vRzJ3d0tKTXpUZmI5TE9WTmVIWE10VmhWbXlqcUpZUGQzQ1JvMCtKcGp1SmdqdXNYWVRKRU9DYlZNTnhKRUF5UGMyeHBYSks3UitUdU1mNzY5OXk5eGdkajdnM3h1MUNqMVhHdTlveGd5Q3ZNYUdwZW14SmtFS21oSDdxQ0NLay9iYmRLM3E2TUFjNmVpOGNWakpqRi9RaGJwMUM3Vks4b1VpVnpiV3dQR09MSkJ3ckpYeEt5bSs0aXorZUNMUWMyTTIydVVvVCsxQS9ybkpaN3pkdWloUUZOVldFa29udVlCUUR3cjhLQk9lVTllZ2ExSnBRMVpQTnkyY1JmdjdleS8xVStDUmVOZW1sdHE3bVBIbWJpUnM2cVNNMkZzUVdGcUtoQnVWbGN6QithNE56aVNrNVRybEpqc0V6RzN4T2FSV2VSNnY1ZWZodm0rbmVZeTJ1SnRJdXRmeUt3OUVDWDBCeWJFRk12NXFyS0xPMjUwbE9jTkl2S0I4Qjh2WGZXK0FtWHZFT3dOR29BbGM5QkxKdk5VZWw4NTRubE5VM0ttbStIM0RZMXJRcnB3cTlzZnJZMEk5NklpZFBGdW1aWkZZbnd5OG43NFFjdXpWSHJORk5ROUF4Q3h0a0J5YWdsY1VBZ1hHTHI5WEwxSHh5MWlmV01aSDcrS2UrcU1tREJhcE9IN2JTTG5SRm1uV2ptNFZCc1k2S0JKOWx6cS8zb3BMVm1xdkt1VlFIeDVvL2xCQjJ6SWpnWjRDaW44M0VuZ2tESjJTMm4vTUJhbWg5ejFWcjQyU1VJRU82ZnlaQ2doSGhqSkx3NTZsZllVcE1KcmVMOHI5b2dKUU5RYno2SFdHaUp5RTNOcFZhWWF3RFNKeVdwb0p3UXVUVWpneDdJN0JpQ3lmMzhPNkhDOFV1dStKQ0xwWnhlUGk4U3REa1JqSXBMSlc5b2drU25iUERsYjcycGJUV2s0RFdobnpWUW1VaDFJU1B3VUc5ekplS3d2WTF5eFRIdWMxK1ZSdEhtTjU1T29lLzFhOVBMMzdwanJ4UlYyQUJTeW5SRXBlSU8zdjcyRkZnS2xvS0I4L2t5cjBmU2lUZDVBeUZrMkZTYXUzUGxMdmY4T0lRTnBJaVZKbk4yVkl2TzZieEpLMEFabTBqNkxLOStHaXJ2cVU3UUtZWEMzMnBYUGwrekVidzRBZ21aZ2RrVkhCUWI3OTA0K2FXekRiY3duSEVsYUNEY2JieTNtdVI3MEh0bmFuREFTSnpJVFg3UzFSZ3p2bVcvQmVPaHArb24xKzlWSlQ2NFA1UGloRVRCWExCZ2lYbkdIOTFWeTJmd1JXZ1d1NG91RTg3NWh2VFVYa1RSV0pqKzRUMVRLanI2SXdLZzc1dmUxR0FPbHBnOWxQeEZySHFhQ0E3ZVZWTTdwVlNrNCtzWDYxemdDd0VwUTA1VzRQVUo3OWgrVGdwWG54WmdQMkNjV0hRRGFwREVTTU9qK2JiN0xRZ29RaEQ3NUpMYUVxbi9aUG9kRGFFM1k3RS9xcEszQ0dqTHJkeHh4c04zSUtZY0hNcHFvd0NuK2Nsd0xNMVUxdU9udHA5ZVNhWXFzK0xHVHhxN1RHRWoxL1htdjBRVmtLWW9raElneXAzeFM2amRPYlkyNFZOM3BsZTdoSzljTDZtUE5iNFhsRm1NT2dvYkJWSnJaUWVUNGNSZCtqcjdKbjRpUkFFVnlBbit4NXRVRUpIOXUzK0srUlhDZlBKbXQwZW0vd1ZQRGQ4YXZDU0M2Ym50U0J0ckRoQU9BU2NYMEJGeURDR0NTMkNuWWp0c0dQQURIQkdqR25MYkFqRTJBQ3djUVgwckFxRE5GczdacXZxa2w1SGV1Qm1xc0pZQTA2REhZQ2VWR2g0Kyt0T3duWTZoQ0EwdDRYWlBEd2dIa09kL2hxWTNNUjBUTFJWL0dkWE9UZlc1bndUb1BLMGtQU2pzd2F6SXc4a0o2Y2V3VC9JZDRjSUNpM3pHQm9FUk54ZENEblZaNXRxUnpYWUZia0dkbis5ZGhkWVU0Q2Q0YU9vK0tiZGtUVm9jbGExUmQ3N3Qzbnl5VTFYRnVUMFZnRnBXMlREbFY5TW9sZEFzaWxaSDB0UEZjam1UUHFzQ0U2NGRpakovVW9rZG9sUkNqZ2ZmNGlVR2dsUTVUN05rbTFlTE83K2FyVWVtTFBqVWJCdEVIb05Cd2dkWk1vMHFkdS9KQUJ6ekhGUVgyamVtRnFBTTlXa2ExQTRhWHJuUlU4b00rOHhacWF0RjZMb2lFQ0VVQTdVWTVNODJyd25UZksvemRza1lJSDRsUmJTc2FqQzJZVmN2ekRaYk1pMkJUbTFncCtweW5FVzdZcDRxa1ZaTFd0NmNKM0EyaXkvNjFJUWRibXdsQlNQRStpcGRrS0dzYlpKNytBWkN2R3lkM1liSU50U1FSNzRBd3AxOWhzOHdURkRFNlJNNXV1TFpJSlh1YVBrT1dYMUd0VmpOWityZlBRdDhJeG9rYXRFNU5pelVtTTIyRlU3RndwYzFTOWZqK292RU5RR3pUMnljdG9PWk5sQWJleXpVZ3VteWNBdHFnc2FXRXY1enpvcGl6ekpEUXord3VDbEdFaC80QUpCOUJhalkzNVJ0WmlUN1ZGb0JKeEd2ZDlYVndJY0FXRVJ1UzMrK1NtQklWWWZhNDFPamRtV05qSitQUDhhQ1gzbVNrYnpMeXVkYzVzZEZDbEtHRmQ3Y3A5MC9XWWNaVUpuTkYzcy80cWxhTUFhOHNsK2FxS3lNMndHa3M4MTlQTURkZDRwaWMraElrZUlEMFVrOGVJY0YxcisvbFBna2VIc3BwUkxQaEh5VzNaOVE3SzlXTzJVSGxLSmpTeGt6Ylh4NzR6K3ZLK2djRDB3ajVzOVpPaHlQcGlpa2dCWEpuMUJ0ZFJCSW12ZmRTcGpsL0V5MFFLeWZHT3RpRjFXYy9lS21MK29CQVA3bDZ5RFhFQlhtdU5rNmhvdi9FZnorZEkydUF5QVZLcnJLSU1GZDV4OHRZcUpyTWdFeDBIcDRYd2dERG8rYWNUb00yRlFFUU1PandmU2gwS082b0kwUDhwR0pocm9wTWVMaFdwS3piRklMQjAyVEdQWkRtTGNCeGRmQjBjZ043OU9qaDR1My9TMkQ3V3R4YktOS3g5dmZLaVlwMFE2N2QzOXE1NXp4azVSUzcyODJ2ZE9jMm1QS1U0MnFuVFhyb0UxNk9vOFdaWVhEdU1DR3NXbVlHa0d3QzROaE9kU0oxUVVINkVOZjVjWkR5ZWRTOGpRUHRHMjBQTXA1OGdmQjlud3N2YTJBcTQvVkFvZlY1czlhOHJ2aGtZKzF5S2puUkJiWWY5T2NIbktrSlAxc3V1NVJvWUVNT3FOVDAwblR5RG9hSzczWloxMlFWc0JMVERvWStwWWoxSTNHQkpMeWdOQUE4KzlRZHBMdWxKeGxnQmM2SHB1TTZZV3RWdHljd3VOb0c1WERqcnU5c0RLVnRCcXh2WTlvbEJNN0hFZk10SHg0Wm1tUXRZSjBOOWUwZC9JU1ZEdlB0bCsvQWlHSEtweWNCY3MveU9SU20zTVQ3TjVBYzA2ZkN3SkV0bjkwV1RKUERNcFp5UTBwWER1ZkZZcHRyM1BBaDlKVDRyYWwxeWNVL2ZxMEJZQVJMdUNySStuTWc0bHVJdWJtU1BnYjY3N1lYOVhUNmtobTVnOC9WSHQrMEk2RVk1enBZUVhqUGdaaUFWR3ZQYzRvbEtYMzVMMDU1TlQrUjRsbHZjL0Y2WkFWVGZDbDhVSGhYTWNxbk9FcFFZVEVlTzNwMXFvWkhBYTB0eEUyWE43eTJkRk83dXU2WnNrSnNhc1JBb3YrRFFHVWh5eVFGbENEbmpYMFdqZm1xZTk1YmJvV256eFJVeDk5N2FISkEvUTQ1WUZEYTczckIvRmRhc1JpVlVJWGJzUjJEQ2FqRkJVc2Q4ZkRZcmZmRU9VTXQ5ZDd1SVRGSzNuRGVOL1RyZ3F3dVhxTUJUWlpObUZ3U0RwWkxvMVY5TnQrVUg2cWVZekx1YndOUCtabmJBZTFTZzdIOVRiL1ZBdU5ua09hR3l2NVZrMncwZDJGNjVmQlQ5dTRmclAzeWh4SmYyU1QxSUMzWjBMV3VqbU9QUmN0aTNEdDdBL21BcE5ZUk9uWjJCemFvZGxKaVZGUjhLL2VUZFlNMjFtcTQ0VXBmZTdwRFpOelk0WTVmc3QzbktpTUpiQXZES0I0SW1UczFjY1FaTXhISmRTSEJRQldEek81aWNzbG9ORk9BQlR2VHdaUm5RSzNMb2RUWmc0TTdpRWE1QWh6b1FZMnNpemM4dTFhVExxbU4vMmxqVW5KblFGY3BKMU8rVEFHNm5IaU1Xc1NaTlNZekNvNlhWV1Bpd2Q5UTZneW1xQmg4U3hGUjU2QXNVa1FncWU2eE5KZFVDT0c4ellTN0hHL1h3STNOK3ZHMEx3RGZJRW5vUHN6SkR2UjVLZnlFSTJ5SlV3azByeEliclJmaEZsTjREYm9tZFFBOTkzS3I1N1JNNTI5dXd1NWF4Zk9CeTR2cFo5QjlKMzRORVY1bGU2RXN6OGtkeHZ1RzZDc0ErVWdGdFlzNCtQUkF1eitJRFNQaEI1NGFqUTVCaitiMU92b0hvS3VBcmI4eUh5ZEtTOXozd0o5Ylp2aVN3SDhTVmNrSW5lbXoxN25WYWQ3N2dDVlJyOEJsbVBCUk5ycUQraW5LdE9WZGtGTVc2TldGak9KeVFuUjI0VUFITW5LUFEzQnhxZ3M5V0dIRnlaYmkwZWt5d2Z6M3pxVG9jQ1ZCdmJtcldBVkw1NnRCcVR5VThZYlRpdCtZZVptVTNrR0ZYK2o5bUx5Y0VNQWJ4ZThxL2txU0k5YTYwWmN0R2VBcnRxZHliaWFyZjVMeFY5NUNldjkvci9hSmlOMyt3dnJZSEJjbkc4dXRrZ3YwOEtFVmF6OVR3ekRsMWh4b3Fvc0RMZkVMbi83eEFOUGtJU0VGaEpmQ3ZtQkhJdUUwaE93eHBzNG03M3A3d2ZUK09LSXVveWpNMHlZVG9aaDMvdnczeVFxRzY0WGRQaDhjTWZyK2dlNFhBc0l4STlLaXo1UG93OTUyWVIrUDhtYjhSVjJ4eSswdDlkenl0WnhsUDloYVRFK2MwYVcxdmFjeWRWMGEwWGNYTnRJVkU2dVlvb2lQRnFBdFp2bnhVaEtYU2tJZXArRitNL2NsOHo3OVZsTHZnYkFDSzNxT0NrSi9jNVpsV1NTMHdkRVhIcGFUVzVpOHZidmJyN2hrMDlKVm9Td0NWRVplVDVVSTdSNnZmZmszSFpTVmNqdUtvUkd5UVdPNGNDMGRtdWNSRHp6MmF4cll5QnNONkxUc3A0V3ArVjY0K280VFpSbkhkNTQrR2Z4bks1TUdLdEU5Yzd2bkd4cVpoOEJ2YmdCeUxKVGFZdUR3ZVJ4RjNMc2NRNGxMRmJDV2xRV0lMcjNGOUtjaksxdisySXUrNUV3NU93ZTNzZERnMEgwZ2swcnpyNDNLT2RTK212L2NOdFNEcGtwcHV2aE5zM3dFaUlRQ05qdUhUcjNObEJIT0tpL3NLMXZZM1pwajk4WURjNGcyVU5BS3czQnFKN0lZc0E3QzVDUUFpVi9BekVSMGFVcFRjUkhzVWpSeGtGMEMyNFZyckxtMDVhQTFPMTFVTk54V1NmS0RNU2xIY1d6QjlYZkpMR01qRjNxRU1jSjFHNWZUSXRMREtSZGk1L2Fvd1BIVHczcXBLU3RiWWRZY1RRLzVWSndlWldEOFpWeVp0ai9RZ0Rra1lOckhhVHIxQW1tSHFRRThNWGNQYW1ndTRaTlo5M1FEb2tBbW03RG8yN1g2RXhJb3Y2ajVJQzZIQ2NMY0oxUWdXY1pHSDJibVRIZS92M2lNS21Cc3Uyc2xUb0dUTGU3SnNiY283Zkl0Qys1ek95a3QyTGJIOVY5QWhBNlFFTEttUmk2L3I5bGRnRU5QbEc5aHZQMzVWNmhLdDBVMTMyV1pKendjbEdsWnIrMko1cHpDaDZ4aWNBTFVFUjdxU3VOUGhCSXZ3cXVsVGdHaVJTVWFSMHpqSVFtWC9qcVFaSEpNQUx3SFh5cE5VeXVWNkgxdTZPNnV3MW1pQkM1cUh6VHZsZnBiaHBlTmJ3TGRtcmNTN09CdTJmL2Z1WVY1KzRNOTFLZ1M4M3FZdFlNd1gwY01FUG1TTlRVRGl4UHdIblZUUU5CQmxVeXF3VVhQaVFWTEhscXZpdzR4RnlBaTFVTzg2cjQwWEdaaDlIQkdXUFFwSjdmOTBleHY5TzhoaU92K05xRXFaeUlUZmRDVGkrK1RZa0RVYkcyakRseTl4TEMxaVVXU2lGUEdwQzM0S01OL0ZYWHNyRkF2amtoTWh2d29nUFYvT01vUUhUaDRIeTI0cmlNSTE4YkNveDFuUW1ab0wwRUNqOWpMUkVLTy9QeG84cnZPWVF6Y3pKdXhSQlJwRnNRZVk0U09Sa3h1WGxQTHN5TFZpb3FwcG4rTUVMV1ZqUFBaTG4wMEtRSHRSSVlhei80cmo4MVBjWGUyMCtIRnZ0K0FZei9UY2ZzbHA2U2NqQm5CMVdwTTRjcVJwNGM2Z3lvS2tvcFpqdU8xRFRzQkVxdW1uQXZSRDlQYVZNS2JqUWdTSEdFMGRqQlF1Tk5IQy9yR0o2MlBqeE9tMzdqRkNYL2hjRHdJNEtHUDJwWW13bVFkK3N4L2xBY1pvQmZXQVBXVjRCajNLNEM3dlRqOUxtdFhQV0dOczl6YktoY2ZEQWlyVXRPWkxHQm9NUWdKMU1UNGlKMy9ET3g2d0VTaERwQVlrdkR4bGszRFBXVjFWLzFwYVc1ZGpvR084N3NWQk11aHhUYms2NTdSTXRuckZtcW5PQTFzd2Z3aDFocDlQQUpWTkFaK3RrWHVFc3UvenVFS3E2WlltamNQL0tDT3M2UTRpdXhseFpzUVZZbXJzTVdNcjBVWHNLaWVxakVLQ2FKQW0vdFVxVXRQTVpISDhUTkU4MTVRZGQ5eVZIdkJISm5BeW5GbW9BR0dwbjdqRGFUNzM2bzAyRXpkTlFXb01HMmdENVlwK09pY2wwb05taC9BbVQ4Zmw2YkY2OXJjd0NXRm00V0ZXZU5xbVJNWklVY3FtaHhlTWVWNS9MRUliVzlQR1dtb09tTkZYU2hYTzdKZEpJd2V4eC8rb1gvaFROVjI0bTFyQ3R2SGx6d1JySG9HeHNFN21wcE5ZTk8wV09XQW15NzVkL2FPaUZ6M05abUc0N3ZnYlNQTURLYjNqcktCQzUydEdjdnNwU0lLZ01nVmhlTmV0RUFGWG5HYm9KS0xRcmRzQTFXY2FwT2N1ckxRZmFVTnl6NWNVUUR3V1FFRHNZVUlnYWsxSkl0YjNYeXp5NHcvTld1cGtPU1BCZVo3dWp6OHhlY1h5alRPRHFidkdPTU50L0toTk9xeHpkbktYcUxiWFVVdFZnUWlwblVzZTU2Q0tvQUorQkIxcFJ4TVdHRFUva3hNT1NXS2lldlF2SmNxV3NtUDUyTk9iRlZWOG9KdWphb3UybU93K3lrQndCV1ZvYnVCUlA4Y1JQd2dBbUFjYUorZG9JMlNzUkovYWZZQzR5c1VMRmVXdzJYV2E3Y01nR3FXdm5FNkg0MStJNitRR2szbDRITVRZS2JveGtGSFFWRmVoMlVNSkxCWmFIQi9Dc3M1T0dRTDRkWnlHdHlkOFcrRUc0ZFp3UGpJWlRNbFBtajFhZEV2TThjZDR1ck9WY05VUHkvOUk4Z3BMMHRwd1cva0VNaUpBUmVmOHR0T2piQ0h4ZSszdzlENENiaVZteGt2QTFWUXpOZXV0U0R2b0VMTkhueXZ6b0s1YUdWck9Kd2JpVWxlQThqV21FTDNpTnVKYlJ1UTNxNVlPeWRkVHNqWUpYQ1IwYzI5bUZYdms2NFNEMm5FS3V0bXBZTXZ3WFNUSXVJTEtJekg0Q0FnSUNBZ0lDQTgzMi9RNzMyL1ZTWDIvYUQvdjliOC84SDJGZDl2MlMvNy9mSC9oNzcvTjl2MFN2OFBxWHI3ZnI1YjdQc3o5KzM3RDc5bjJoSDdmZjQvWjcvVGgvWjd6WDdmcGJyNnZySnYyZlh6NzlYMVZQNnZySmYxZTNiK3IyOWdOaUF0TTZRb1BxenRkQlB5ejB1T3QwWjZRVjVLM2szTmRkS0Q1ejRvc094dkMrYjRsaWVXbkR2cGJ2cCt5RzdmUVcvTXo4R1l1djY4aE92SjJJL1JYNkk2UkczZDIrdzVoaE45MUtnR0lxNTZISFErTU13d3RhNy9HR2pQTzloNWtEdkJ3N0pUSGxrMlpCejl4TVJBaDh6MGpyMTFuL1JVR0hJL3lVV0VCVjBvbVNYM1JWQVhrZnZkYjVGMDZoNkMxSmYrcHhvVEREbjJuaS9IYUZTWVdwRmJtSDRDbWF2ZElsOVN6TmxZR2hlVkFTdDQrY3ZEdHQwMTc2NDVYNkZ2cHpYekU3UDF1N3Y0Q0ZwaHRNVVhSa0FTRzBBMVNoa3N0ZTI1bjJPZ2ZTalhQZHpVNis1RHFxdkYyNXpBaFpFWktYamc2TjZWQjJZNVlrZWt4OTVBVnRWSERudTdDUDJmTjVzZnIxcTI2RkFaVHpMdmE1bUtiTHpFMzVsYzBWcnNJaGNqVEZoeVB0cFRPYmsrS1lpZlNram1uR0lCa0xzQTM5N0Mzek1SME80ckxSVEVodGNOdHU2VnZWOE8vaGRPTWdCQmFjY2t1d3RDQmx0STE1RTBRQitPZlhaTUZ6cVIzNCt0N3pvSG1IRDZUZWViOUxpcWZrd3RtVXY5R2U2Um90czliK2d5ZFlrSzdpR2VHNVE3Sk1nTFJhZWltYlRaZkVlKzdaeXdTc28rQ1F4ZkxSL003VmtEczNHQ0tSaUpRS0hvM3ppczdFM2tPcjVMWFhBRGtBVW56UHhCVktiUDNMWDIxZnlTNU4zdXJqMXhTZElJZWxZRXRnaEl6TnBwYnBQQ0VDdnFkekFoUjE3bGVzLzZpUW1CeXlneE5wRmt1d0hhUzA5dXVJU242U1p6cDlrZ1pqbjg1R2dkTUkxV0FUWURhblZWNDFrbktRTzVodzErVndMNTM2N21sTXQzQ09UdUpaOUFjekIzbjMyWXhKbVNTZXdyNW51V2JGVGtrcWUwRXpJNk4rQTUvSSswNmwrREMrNUFxTjU4WTI3eWVBeFJJTGhlU0krVzd6Rk5Rd2FaZVlQN0RlL0RIVjFlYldPMFQvUC80UzhEV1BwQmF1M2NTeDM3elN4Mk1SZnIxNVVrQkI2U0YzaGdIQ0pFVlhFaUVabDByRzQ4ZzhKRENUczllZnFRaWgzSzVVZ29kMDY4cnJZVHJvZURwSkQ0TEo4TGpTTzBpd0tpQjh3c2lsbDkyMElkZFNPaktTUEt0TGpMTjRsNGhpYTRBVC9lNS9VNW1YN3hSa1M5WXBicTlFcjdRcE8ydWpxUVV3cXNmUGxrYXBBUEU3WWRNWjJMNldubUl0dzRCY2hQTWU0b04xQS94ZGFWbjJIbjdCT3Q0R25OZTRVN0RXV094M0tiWFJua0RrTWFuRzRXVWN3bmxka1VMMFdsNzRNSUR3NTh0MHJqOHJLRVBMdzVmK0M3VHdxcXEyYVZYSmg5YWthN0FUUXVsU1hYN0tYTnZ0R1JORGFERnpPSmxjYStkUzAvMitZeWhtV0IyL3MzQ25pYnVET2FmSjE5eCtsVnp5QUdHcUZvUVFFNzRWcTlJaFh0eUJZcmpOcXRRR0xIaGg0eTJjTmZvUXJlMzYwVnhEcHg2amJrd0FobFpzOXRjVnFhaXh1OG1zSTBKZE40VldMMjlMYi9xUnFST1ZiZ20zMWdEamdBOHArWmx3eUpBbGR0ZVh0YjhPZStyZUgwNkZNQW4rWld0dlVRb0Rpa2cyRHhTSElpMFNxMFRaUFQvcURZK3FSNFhUcHlYWkN2WEllMjZJZ0tvMUVubHZaM0doZjlhdHdQZkt6RUdWeUMvWU12QWVZSDBwbTl1TjAxeFpkYUsvWWFqTGJOL2lvcnNWRE9aazJmNHd0cmliM3YvTytoWVMvdW52U0o4LzJQbmxPNnZLRXBmb1EySWE3Y2pCcFBDckxxTzJtbTZiOE9hczdqSncxeHVkSnlrdElNZU9mQXEvdzh6TCt5Rkd1YlF3UkRtUGJuSkxqbVI5UnJqTitydHJNcGhQdVZlNWVkUzhPNEZPN0tDQ0VLbVNUSWZhUk8xT1Rob2hBT0pGUGV1SE9wTGNDVTE5UjluQWJoQWQvT0w0YmptYkZyeHp0ZDYvYnkrUDRsNWhDbWlTY3lmdUJSeUxWK01lemR3MzJsSnBMR1BodzZraUx2dUhJNFZEZW93TEJqZnZYSTRmcTBiSXY1cFJrb2VNOEtDb2tsK3pnUkYvQ3dLdXZSNjl4U3g0NGpyWDlBWSthR0lKMURJMlZDOW4yU0tWTnl5V3NzSFhPdTVLQzQvczllRGt5TXVHejFnNE9Jc2h4NmttYzFqdlRoa2EwdmxLRC9ycVFNWnJPellQVXVhWTRxZC8wQmZPU2ZlOENwVzVoVkdNM3ArTVVPdVY3OGF6Rm1PTTJnU2VqcE0rZnhSeStWMnFCMERIdkwzWEFOcnNaKzk5ZFkrY0dwU1pVR3hUNE5kK2s1dk43blcyTVZjUWhZMUFNb1Q5Zk4wV1BZaVhDZStaU1dnRGthdnNWZWd2NEVZL0VoZTdkMmpqVjV3eVNKOFVwM296YThYS3ZKVnRSd3RjeXlSNkptS0RyTDFDcCtJK2d5aWJEM2MzMGJpZVlzNDExcytkNjF6ZTZxTHVwSStMbWZTdGl4bkZoNzQ4U3RxRVorTVdvNy9WQVZSMHErNGJOTGpFd0llMEJRWGt0L3J2NC9saWdkWjhob0Z2Qzd3cDh4SVZSUEhPaTUyNHR6WVBZcTUzenpiODhYTGxBcmdlbEd6aFhtUS9KampTclhKYmFCMWFIZyt2dWNYeGs4ak1tTUVOeVBWNFFnWFpCRHhZTWxsWW0vb0pBdkk5VmFNSU1jenNTN3puMExaMzh6VkY4RWtqY3F1MUsrenhDWStEaWZ6aDVnUGdYeC9ndk1hc2tuTXVURklxaWFYbkw3L2d1WUhib09kZml4MTAwNmZ5RmJ2dzlBZWJGUGpWeWlEMnZGYkl0NU9uS0pmeXZ3djdpci9CZ3Bmai9WT1BTSTViRGw3dEFuKzEvamJWR1JNTWV2cGovTW1mTUNUY2E3RmR5R0crSWJOciswUnFHWUdlYWRucHJGNk1ZdmI4QlQ1NUVydVJwQ093d1dqK1EveThCNFFyWUorWE93VkVSZm9RMm1ZMVEzYmg4bWJmYU1ScTNqMTVKNFJ4U092OHFXQ0o3SXBvRWFaZkloRG5raXUvT1ZjcGtqOFFUcGdONTFXRmJEeFM3TmNwN2dJQ3hTQTRTUnBTeW1NYm5tSEZvWno0VlgrRnlXcFl0eGlua3BBb3VGZ3QzTlBUMUtwYWhOaEk4eFBkbDc3RFZjSFBCZVBtaVBwaVVlTXFVeFlFYW1yWC9MVi9XOXo2a3p3aTMwdVIrbzZ6TEtWa1VFMDhBODhjanNyL290YW1OaXpkY0x5cnZDS0N3QTVpd2dpVTg3WmV4WkQreDI2TUFsNG02Mmd2SjhyMHRMTzBFRjg4RXZBdTNPVGM0ajhLSzNhaUdPM0VnNEFTRTJyU3dGNkl1dllyU2VSdjVrWC9SUHorc2Vtenhhc0x2cFptZFR3RTVSVURKaXVtY054bUJzdDg2T0FTT09hOGlpOWdwSEx6MU9hQXJKbHBQbVliellEUEhEZEZna09iWWhFeXFaVVBMSzhZdksxbjljZlhveWl4OHdKbTVQdXJtWGdxeUcvb3hwWG1QNlEreVViQnI0L0pwdS9GU3FTWkczMk16MmM2VzBSZkpvZGR4WjlXOXdaZ0ZxYklSZWI5V2kwZkEzVTlhcFgvQXVpakltUFpnMHI1MmxXS1QrRlhVT0xtWnRKOW5RL05DcStYY1RVV0ZYcS9MMDhpcnlCWXA1QzRzVGFUdTE2R2dUeGpEcjRPUy9pQU1sM080N1hIaDRDODhwU0luRUlZcXQrZ29FN0lNSlFEa1pvd3pmYUxsZGZBYWkxVElSSng4SzNyVkUyanZGcTJzMFNzZmpVNTJqUldsR2ovQzNIN25ZWUlRL3cybHFWYmVyTGNOMmpiZjhzaGdvQ2tDTlB5SGJxa1MraG54QVNmb0NOOVpOUFEzRTRUa0dzV09GS0RZVDZmV2NKNkl2eUhabUF2OUlXeFFZU2NIVmZJeEZydVQ5b3RZVFZlaGtzSDFrMllqeG85RC90eU0wSkpZOXlmNzVnTkZrWi9keUo0bmh2ZE1mbW9CMnM5aGU0WmVwZk9DcHlid2ltRFdFd0ZxMVkwbEhaMmt1c2ZhdjRzbTBTTDB4NDhDa1NHRXNmZG9xTVhJTTlJUkwvUWk3SVcveEJiQ0VOSSt4eTZWdjcydXF2Nll3SXJncVU5OGl4cGJveTBwZXhseW51SEZwMklORmtBcUVCTy9pU2lPYnhQemtrTjlwUkthN0VWbmU4VUFuMVpoRHlQK2I2UUdkc1BXdkVpYUlmcWkrVHBrUnlvM09vSXljQzArVVA4aWVoR2J6SjVzM3NLejBGeit1ZGNUNDYwTFZxZnVSMVZYTEJoODExL0NHb0Z3S2pzSmNzMmltVko0NUI5OWQ1dWc2SC9iclVSdUFibWU1NGFET2N3Mld6eTBvZGlYcXlzTzIrUDhXTXBVV0RPSWZKdmpOc1pPZVk4TTFBRjFib2xtOS9md00vbnFFQ0ZEWS82TU90YVo2MGRoS2x4dllrVk5RVTg1Ti9VWmNmVzVvZUdzYmRmUmVTYzhnajNlaWVBbElYVmZ0VVZQRkc2RTlxVTczLzUrWkhoZTk4bWw1dGtrQmVpUXN1dmdyaUN4c2RnZ0tYTkRWazZFdXNmdWJMZG9UQzg4NXc2aUZXQ0JaaVB3ZWwvZ0dqVHhHd1pRN29NaXI2a3NmY1F2VERGOXNSOFZ4OFdiQlkvejBkcW9ncEhkK0RWZzlSYjRYY0NCQmhyUEF3RGFoY3lxZ0pVM0NDQUNDOFR1OGVzSElqYnZ4aXdVTUl2VzNsUU9oRDJBbGdhMG40R1kvVFFaR3ZocGZuWHgwbGNiMTEramFrOU53ZGQzQzI4K3hFYUxydFBrRDRYMzRlVE02YWQ5T1lCZStBSDVXaEp4WnpzQ0Z2bktyVCtySzM4RCsrdkdrNXl5N01raVJTUmYrUlgrbG5OWi9KV0NXNnJwbWtEVzBzTXVISGVScmVsd2NxMFV4cVZIS1h3WlJESVBWZzhHQlE5eXRSd2NsQTA5Q1FyWGtTYjQwKzVhWGI0SXpvZ3F2NTE5YUxOUHh2amNCSzRQdzFYaGxmNjhQb2RUNFpEQTFYVWRPaE1tRmY0anBWTzlCenJqT2ZsS3QwQU9GeTFIMjZXM0lVc1VQTjFJQ0NoYjdwVllzeGUxR2MySHFXSjJNSGUyUC9oRnIzaHVBUkE0cWo1dllTQ0pORGFVQm5pZTg0RHpBT28za3FzK0VoRk84L2c3b2VXcmpaSU81anB5MndxYXU0MFg1V0kvN3B2cHZMS2wyQkNWbFRNSUJ6aGJ0dzNUc3JGeUpIUUcrTWdaSXlHNWhkcmwrMG83RGl6djdsVU1XVnJkbUR0NnJVUEZhb2JWNG9RRUQzc01IMXJRMVd6MUUrWWE2NkZEWXE3UWVPcU1PeUdKSlg5UE56SlNYVTBNT2IwSHF2Mi92cEpDblB0cTI4ZCtJZUw3ZUFCbjREZENZb0pEejd0YVNpTlJXVXYvUVRKWFhVdWRXaTY5VGw5MHpzZm9Ob1RqUWg4bWtBdStiNWtibHF5MkR3MXk0aTA4TWxwY1lOeDd0LzhiWStsS3cyR1JBd3hHem5rRTdQRG5Fell3d3FicUZOQVFyRllKQ0dwYUVuS00yeS8xbWdFd0s4akN0MklWZmdWc3A3UzVMK0pyUzg1Q2lwZ0xtNVpjREtWYXNIWVRVRExRU3ZnUXFZM2Jpd0V2UTlseFhzWnZWdnpSUTNwWXFQcjcxT01iQUpGSjBhWUQ3bVhzZWMwcTZWWTQ5Yk40eHd1ZGFqcWpCSnVtd3hLdCtnS2k1OEFOalU4b2pDUy9qL004elF4TUpvdi9NamVyYXdUL0RCR1ExVUU2c0tTdTc1NDk2aG8wRmc2NDRYbVhkUU1jOVhYOEtuVEZKdlhPMG81bVQyU3NzTGNkWXJTakZLckhLM3pST2xBTDRWblE2MFBZNmZMUjF1VDNSSXcwcDVYTTF5aUJxY09MR0o2U1hBRzdTOUhsM3BiR2RBZUF3YkdCWDVrb0F2UWNqY2YyTTMrakRxZG01czZDRHpxT21OcEczWXZDWkNtbHJLZmZvYi83eEFkK0kwSE51Smt6R2ZaY3Y0cFVCQjZ3YTdoMm9kdXdBaG12S0RoY3VscER6MUhpbjFkOE9UM0psNEVKN0x2aEwrUWdCeGlpNHhxeG1MZHMrc1d1UmJjSy94NXIwaEovczJabHcvTzZZL0VJaExLVVI0TXhtYXJjMDV4Tk1XYWphNlMzbUdhTXFwaExpZnZFczkvdmNnV2VESXI3SzFYUWIyVUw0ejhBelpuU2dvb1k3cDVTMGFoaUNwd010WVk3UUJKNm5RMFltYVhhM3NLRWVNRUp6VzAzcWROazFGYXQveW5iZ2RKcnZwVk5tUGZpR2VCUEQxbEoxay94dkJxdGIzYzQ1TG1Qa3B4Q2VISjJ3ZnAvVU5PK0dNMU5oak1DQlg2aGFCV2ozMlFzdUtqREc0R2Ftb0RVOXc1c3ZFK251VVk4d3pIWnZ3QWJvSExLdVRRL0FiZlZJVitlUlNiTW5xaFdZajBqZXlaMUhsRW9EMnhvWFFVaWtMZjFJOUFuYlcwMkZYR20xYlZkb1hKZ2ZKNWZ0TnRRbDFjM005K0RMMWxDYTVMNlVkUDZRTytabDRjbG4yczUxNFIvdFJHQ05QSm05QUVjMzVrQjV0OUMxblZmL3ZlaVY0Y1g3Y0s3SFV0TUF6NThnZHUxaFZaZldvZW9VM25qbHdmbmlEUHpCR0x0QUF4eXlDUDBuYmViSkdWcXlaL29qTWpzV3l3SXE3a2Jwa0ZVd2duemtuOXpzRlZpTGkzekpZNFhUMXQvRTFna2V6Z0x3c0QwalhYUkFjUkZnZkt1R2xpNkxNa1JaVG56OG56N29UY0JiWlJEWnM3OHdITktucmhRa0htd0YwekZvVDYvRkRZSE9mcVNEbThoNkZVUjQrTzNZTnF1cVYyVzNNZHBDVC9QbnJvaWhxL25NdmVnT3FNWjJKOXFvbHF6ZnoyTjYzNGtoSjVNTnRxa2FGdFhmZnllR0toV21TT1k2MlJhbGRzRnkrNWNYeGEvQ3VFMDQ0YXA2TTUxenVuQVdDYTRNaDgwb1dQeFV0cUowTEVXWXhJOUhMdEs2cytOLzNhODBNQTZVUWRBbUg0eFZaVnJEa1VTME9aV2g0QUNoK1dpbE9BRnFkTFhGdzVrNFlyc2trY25KRTNVYmt3UHNMTXF1cnFpNTFOaWNyQytXUldRRkV0OFdaUGlwVUxQWENQK2g1Z3EzZzlwS0pBZTFvbzM1UUJjMVFwb0RQWHBWSlNjU0VqOVgvWC9IZUo4b0Jkd0pYYk1xanVSNUdUSlZaWkxBb1NuVEtJZHZQckNvbjlxTFNmcmVFR0pmM2hoaG5PZ0NvN0lya0ZpNitjV2s3RFdSbnBWK0VDVE9HS2hVSjVrQ29teUMxTTIva2hwUnlxZDlmZEs3TkxWc0F6dTVoNnlFSExyeFhPNGxLNFgxS1Z4NGtNNWhiL1Z2UFJldUg2MUxzSjlOaG83S3VDUXdjOVZOeWZxZkNjYm1tcUozWUwrWWhwWlVKSWRqdk9hWEpRQkxyMHZ1OHplZ2NDZHN0VEUrM3kzU1ZnZlp2d0hpTHk0d3kycGh1M0NQdFFsaVVDM0tDMlpUMlhacmxDV0Z4M0dTS2pKNjZNZzV3cnVkQ2pnNTQ0djhmYVFibFUwZ2NOOUZocE0xT1I0V1l1d1lDaGozMW51eFVJdXFUZzhGdytQWXNPc0xYU2kyc09XNHdnWm1XQ1FTejJaaHhxQjJLQzVJYXhTZldLMVJHaVdpNWg0QmtDUEpIaVRVb1BCaEhCeGRvT29qNEpaUEZuK1g0bXpBT0dmL2VTRUF1RXNObHNFZ2w0b05aSTNlSm5nV3FZZ3AydVdJTDYrSGNWc0t6MllmSzRWNEJVUXprLzNEQzlWSDZSK3gvV2xPQzVHT05qRUFaRUV6SnpGMmkrRFBSRkNadHAwbzQwbmRBb01mVTlPZm5jVm1qNGc2NHIreW1mWm9NSlFMMHhKOHBGcXlhc1UyNnptYUpOSUZmUUhRWkE5WTNZVkUvbGZXZWkyOGo3Q2RNc3FDR0QxeFNtQnpUVEViZWhFenliUzUyN3Vja3kzTG1Uc093d29CajN3TmRxRUJOcGQzK1dDbXNndW03b0tiR1REM0l4VEtXTWlSMTYzRkxmNzNnMEFoRTEvQUtDV1lHTDloZkRGWWUreGtFV2xiRGZHeTNlRHNhUjNiYkFNeFl1UXBKdXptbXhvM3F3eTBtdGp1Q2RCRkltVUJoeHNnRUQ1ZEI0ZlZjT1c5ZjFjVUU3OEp5dFBiUVJrYUZjMWwxSHc1Um1tVmJPZEdpNUxtSzYvUmVNMlBTRHd3YnJ3NTU2VjRFb0RNWmZBVjQ4SGh3Y3ZxVjVSSFNUQVdVRmlUVjJSeXZOd1hzV0RzMnJFYVBaaWZWUFBIVUFocEZWclRVbEJMRDgwUnk2SU9uV1hDWFlDZ1VCVmhZdUkxcHVjcm9La1dtbzI3ZVNoZk5UUkUrdXpYd0NMVTBIUFBSZ3R6YkVTVmFON2RzbXU4ZjJVeFg1TVJZTC9hdTdBUkNad045RVFXQmJQdGFER2V2ci9ZYjBOeC9acis5NTRDd0cwWVQ3Q1pHZVF4WiszeHFDVTdrcGhDOEpubXBSQ3gyRnNBOEkvUllrbHNOOTYyMnZoZEVyTEFUZUdOc3FoaWhYNXlLMmVyY2hUTEoyQmVmWGZiM0dpMUZuaU1sM0gzMngyY1lHNm9LN1IyaVFxMXFyRXhnRzJOUTZ3bnlNWXVEQ1dWVytOeThsMG5NS2NQTzVETk82Sk1hcWx4eXFUTFUvK01mSG80Um5NbldnZ2h1YXBDMDNaVkEyN2tBMGcvUjFoS091R0FWL1FadDZ0MUthRFBnVnY2eW80WnZMYngyN3FTYjN6V3FXMUNBbHlKS0wrbUZJMHp3K0NEZ3hVeElaSUdEQnhlY2dMM0NRdUE0VE5qUUdoRDc1VWxoYkFob3UyOTJMWHlwSkZYR2FoL3c0czNENzJtLzU0ZXppSmxTemNrbkJCdVV5NlhRUUpKeGxVWURRZmFZN3ZhZmd4eVAzeDZzWXpxWkdOcEMzdUpmTE9tWW5NY3NEWFRodG9KaDRSYlhFS2x5Tkl1RGZkay9iVVNteEFuZjJJMGFyS3NtNEhQam9rcjMzcVVwZW11aGxrZzVxMGtzdkU5MkhZZnBPeVgveUVQelQyR2d2K2h6TGxRZCtCTFF1U2txZHVrTTlPeFFEejhsYmUvMXp6TFFqT1dnOHZMUWJOczB2WGJsSmx2T1dDQzdncXhIbWRXaEZROGVjQ2xTUHJVVHMyblh2d3NyVTc4YTdTUHo5cnhxRXprZ3lvZ3NyN25OUGdpNTZrWSswWHJJWkwyOWV0NXVETHAzd2VOODhTQjdoVXBIcUhab0owT3FzRXBFSkc2UnJmd3d3eGNSVzBwUFFQSThLTWsxUEplRE9KNG51Sk9UYXNpMGNmZ3JRSlArak11YTZabDR5cy9YMm5VNXhHRjlLS1lrQ01CbTdzWlpWbEY1ZFdoQnZsaUdXYVl0Mms3ZG5iOHVZVHlZS0pXSlptYzhxcFZQcTFWTkhWTGVUSm1OMFlSamtmTU9RMU1JZ2wxVS9DZnhoWDZPNXBlSFQ2NS9xWmhvdVBkRTdIV09RUm53bEtYSDVJdHR3UWsxVUZoR3ZOZkNiWmY5dmFpdTVKMjhselA2Z2RxNkNqY1FrWXhjUkNsRURiZVlWYU94Sm1EOVBrcVgzQjZMblM1bStYbldvdFg4Y3hUQ1JSckpCYTArMzJYZzZMUGsxNXlYWjNtR1YrTTVENCtwOVRHNTQzSkxQQi9td2lsS0dJdkhZRFdNOXN6M3VDcEI3QUpSUmJNck96enBuZ2xIRTAzbHNIampYS1BBcjJRTkl5MExWTG5BR3FmaWFqb3JqVFRNYVRCMjJNak5rWVh0NmdTaEd5dFpZQ3o0T2MrbzRUa0ZHNkNwQkpOMU96U1dVNTFPODk2aTA1bUVDUG1zbktoQnZUQUdkck5sdnlFY1c3Qk53UVp0WWFkYmYySnArT0RMNGVNeTZrZERVUUlmcElheVNIbUx5SHNQT0FndFhsdFlWdGZyUElVOFBNaDMrK21QTEhCeUkzd1plREhQcGVSMUh3UkdSWUt3OTRwbW11a0JwRkk2YUdkSUsrNHZUekVOSDdLV2FKTmdySGpuKy9OR2ZJSkMwS2pGaG1QZEdWY2NwNVdrekZkYUFxeUg4V00zcGZMUGZpd2hNN05GUGZqVDMyUFZUaWFxTkIySFJnWEpEWFMwdTJVMk83TnpHMXVLNnI1RmFKZ1cremZwd1dBaC9IV0s0ZUI3eXlDYi9VK2g4d3R1NUNWSCs0SDQ3QWw4eldXSXZQMFFhTU4zNWRGNmJRa3V1TGM2Rng3TXJqZDQrY3JReUM0N0krUHNhSktjTXkxelNFQld4Z1pwWlM0MWlURFRBTVRqTXNUYkVUMTI4a3QxNmNnY2swY2R4eWk1WlRRZ3dGZ1dFQW1Oc1VoOHA3TllXclZoL2ZFb1ZMOHA1Z0ZBYStOYllCUWY0emI3ZGRla3ZUbFR4bWlFVlcvcmRORUhIbDBDY2ZsaDFqK2tVb090NG12NlMvVC9Gd3g4TWZSQ0llYUovbFJPei9ScE1OSkRNZXBhMGEyKy9TS2pJKzNzZ1p5T3pEWndMSDkxNnMzU2ZxU20vaGg1Njh2WVBJdlBEV25xYWZsd0hyeDN5Nm5uTVJWdDF0bjN4dDZNMGhaUFN5V3BEYm5OSzg1aUFVc2VVR1pTbEpRTTV2ZFc4WE83THV1NUxsUzdHeU8yTjBpeVk5UjlIdEMzWmszSXI5Q1lQOWdSRkhoOWFKUVVTSDh3VmZGQk80UGZzVXRrQ1ljQy94YldZSTNBYS9DSnNWSmcydGh4dGdZaEJZYSt2ZDJUSmlvQUFPb3h2SHRTakU2Zld0R2FsZ2VlckxKVHlETmdLSGZ2Y0l5NG9xZWlhR29yNWhseUhDcjRYUkdJYmhNSkh6V2V1WnFvMzBqSlByYmpMdW81ZThJQ1dFa2lxYmV4Z3ozWnpQekJ5NVpHQWE3M1cxQndpbDZXbHl5aDZpcDloWVNWRHArcFVuZHhzRUhSMWpIdlpzZmpyd1hzMVY5M2oycDlXd2pSejBVdCtobDN5b2lWanFydnZNeklTKzQ0Wk1kb2xxUXBmdnltVjFoejRKN0llcTcrcDdQelA2OVcwcWVEb2E0VWJZNStJcms2dERNMnptMGZNQ0MxV1RzN2N2SHVVd09MWlUzUHlicTZ1T3p4M1oyTGdDbDZ3SC9MZGdjdm84aUswNXJHMHNLOFlZWmd3YkhhWk1FbElicTJLUVpNd2VnczFVdTZ5TjVJRHZTL0c2d05uZ2U1K0UxZ3Y4V3dpUzRqWVAyM3BrMThDZUE1OVkzSGlFL0pHWDlDcEhNcnRiOWd4RXpVWmF2SmRjV2lQQXFFdTlHL1p4dkhWZDBPU3dBeS9ReTAyTFJaUTFIbWRNb005Wnhpa2NBd0QwdDNBbFYycXgvVVp6SHRZWXEwOFdydVY5dUVCS2FTNXFYeE9pOTRYZHZkRDVJNU5oZmdCN2srT09GanRBelRyY3d3QlRUT2djU0Qyci9YYzZZclRiRnRNU0pGcU9BZ1V1RkVXK0tDNmhVbWNpUVZXckl5RlRHcUpXcjFTN1RiTmtYZERFV1AxdDF3ME5rS1lWS3N0bldUMTJ6Q1k5L2Exc2hFeUVvOUhkaG5pdkN2R0VvY2Y0VnRQNm1rNkJKL1FwbnhLRkVzWEtRMEM5ZkZHc0sxMnVlNUtVUE9GYyt3K1BaYks5c2VoNFBSVUF4ekozMll0QXBVVENuN1hDdDU1bDRnU1V1QlYzS01qY3BwUFg2ejZ2TnJ0R2FzZjNEQ3BTUDNRZ1lsZFRSakNsWWdsK3g0azN2cFV1YVU0QVJzd1orZWU2Y2hPUE9SekRlY2ZyZUNRNnJWcjRjUjNIU3oyNkVqaDJ0OCtDTmdoRWZMc1ViQ0d6WnV5NFgzL2toMFNheWFxNFU0U1VpVE5GTTBWVzJWbkNBZDRBVFhkWWwxb1ZwQWYzbGRMd3VQV1Nmb2x6OXZRM1hNMGt4WTN6Z2tjSy9GdThCaXh4Rzc2VTVDbGdWS2FoUG5MYUVyNzk5bFpGMUwrbytCSEhGWDdSZ0NnYldiNngvaWkyM1JmR0Fra3B0L1dWWjU1MjUrU1ZjenBLYWNRZHFDdlpiQUJCbEJkdkp2aysvazlGcE5VUmZ2NmxNNzlIemdYQ2tQaE5XNzFJbGlqUXRvcDF1VHFZMU4vVkFmaWNVUlUyNEo5WDhVY1o5OEM0M0Vqc2VSZjduQ3ZtVTF6cktNek5sL0x0Q2IxbXF5RkE3VVkvRWtZbjNORTYwbzJxY0I2eVV1OTF6aUpVcVlsS3p6RE8vUnFId0Jpem1XNHpBTkhKamZ2Z001WFoxenBJRlFTdU5xaEFQSTlhQWhhUUp0TVpyOXBEc3U0eWEzLzdrQzVnRktmbkkyOGt0YTdaSVhXVHpMazFIKzdjRjZYNUxHNDNONG1hcWJkdEpnRjV3ZTQ4bitiVS9vQXUvWENEY25RV1RRQng5bUpHTHA2ZHFzNFJGT1d2U3pRalRlaEEvMHBjUnJvYXpIcFRUb05uSzhwVWdGd21SL0syTndXRTg4WitISVN1VXNhM1o4eDB5S1p6empuOGo1OHlQdVhXenorZDltdUJ5YmxJVks4cHdKN3J5MFA1dSt0Vy9WSGNDR25aR1BLOUtEbFpYNWpKdFpMRWxFbGVoS2Fsa3hlRHNMZnd1N25QMWY0YlNOcXlNcGtQQnFYMFJmYXdyTmxCTCtZZGRZS1RuYUVQYVAyVk4zbTJTZ0l1bmNmY2g4dUxGQlh0cGRaS0pESVFINUFnai8xNzFWSTdUcGh4WUhBUG96a0FlZjdmR3FKaDFESmdXWXJZMVlCNkhvWTgyQUd0TFNROFpZejd0V2FjL25mVWdUSDlFZXJIUW9hdFE4a2ZqZDlEVW9jUXhibzRKYWZCR2Rubjk1QXFHUTBFUEkzTmVKNFpyREVJS2tyQmRkV1ZkdjhJL3Z2eTA3TTVZWC9zVkVFendIZDRZanNaRU11akdPaEF1MDdtcUpYQWdSV3ZaVkNUK1hlMHNLRWhmL1dEb3pRUkFPV3NuaFdwTFBoSDl2akViQ1N3ZDNQa09YK0NkK2Zxd1RLRml5cHEvQXNuZXIzNlBKeG5JYy9QU1dKME5aeFZGdGEreTFoZU04ZUlqM1pGT0dveGN0Ty9KdFMzTUUrR2JrUnU1bmRncUYzNmhGYzIydTBmUkhXRVFyRzFGMkJ1SkZlbWN3ZDhqallwVVJzMnBSbUdBZHA5UHlvK1p2NkkrZ1dReDJoZC9kRjNLUEM5bzdERTZ6QUd3c0pETXhMQ3E0Qk9DaEhEN3lHdG5mU0pKS1loL0xkdzRjSWluL1J1TjR2VzVCaWJUdTliVXQxRWUwc1ZGeEgwdzl2UHhheHNHUmhVQmFuRTU5NTZTeS91S3JzVGpwODR4SDZheDNWakpvNG5DeGU0V1E3YWVmVW52NnpSQkhCWnIrNXlVR0traEdzb1ZUTzZYNDFDOUNXazVCa21udUF4YWhkU2psdHRzQjhxZDVLUXVqRHZkUElGS25ob0U0OG1qWDkzWGpFSXROV3Jkam5zbytoVS9mN09VcE9XZWx2alBMalBHdVRlUVFoVGRqOEtRUnlmcnlYWDAzTk5lTkZLMGVWVkNGSFJuQ3p0TytPOVlhNFVyQnVseThiUi80WE1EamE2SjNHZXBJQUp1ZjkyZE82ekR3VXo5UVpxaVkzVWdqZGljMElPNTFGNUxpY0k1RERFNUxKSkI1WWI3Wk5rNG12NFFpbjBlKzUyYUtQUkowa2Ixb3BsMkxkODI3aGVqamM1T1MwaUVBUFhlVGI1Zk1xMXcrNkV2N2NKN1VEOHduTDZKT0lMbUp6cjAvdzJQUlY3VFRjcmx5RXM3ckkxbERqRVNTbFJkNHJ5cHI3VUVJWUV1NkVCdllLQU5zU1NpbFBvQ1ZKMktIVW1oSWw3aGNTT1l3SU03QkNodTF5aXBWckRqUldUYWcrNUZSUmxQWVBQQ09ibFdERHZMdmZ1YmUvMHNpVi8yQnRBL3hEYTVNeitLYm9jRGhBZHZxVE1WVUlEeEJrRW5XMHVoYStlVHpWcTFteGowTFdha2EyRDREVTU4SEgxaUVoWUJoYkRiUlR3c05yWExxVUhHK050SlRJOTZlc1hLcHVlSm5nNXRuYjV6R0UwbnZvRlgzNVU3TjZUeC8rQllzMFZNRjgzdGl0TjRvK3VHNzg1cElJQW5xd1lmK2hkWjR2VnN1Rm9zMjFQZHRzM0tQZXBUN2t6STBtaGU5WWF1OG11bWh1a2V2eU85b244TG94dENFQU5lcmcyTmlKVDY5QTJJUHBYWmpQaHpuYWxpSnVvSkhOd3NFd1ROS08wcjNxR0ljTWM5RzI0eVdZOGI1QVczbkljb0d5NGZZdGdkRTRra0lpMG12eUlIZWRrbWJBMy8wSDVvbXJDZTZtanNWQ01TbWNmd2E0M1ozTGYvMUhQU2xCODFibG5tdzk5ZDNqWW5xSXVvN1RTaHlpaW5LRzAxMnVxdC9uWTRrSFVTMHZyM0RpdXEwUUI0YmNMMWZhS3NoSm9RNkRNdVp1QU9qZDFWSnhQbmlETmtGQkpIbVptaXpNbVZsSlFKMnI0SWxsOU9tbnMwczBKZUVhNmNINDQyNVBoRjd4dmdPTmQ1a1gxQmxVY0VLd1R4eWdUQm1vRXFCOHdFWXJOcG9UTDZKK3VpaTdmWmZBMlgyQk54a25ETGtwK09WSWFtQzZXNlNucEc2Q1hJSDJGN0dSdVFaSDUwanJES29mU00xbzZmcy96SFRyK0xOVmpLeVVnZDk0UVorQUh0MFdqdU1uaWl5SDJLcXgxbkc3QWdSNU9FenUyZTRadFVPUEw0UGt4NG4xeUxsOGY0Z3ZxbGp2SmF4amNOWFdacW80QUk4QnFoUjFWNGtTOThYUCtlQnRoQnZGdnFGTUR0a2JSemJnNzFSOGpMM1lEOHU5QWRnZVdmcGp6ZW42QzRPbkg0Vm00MDZ0ajBNcW9CaW9UUEF2UFJSREYvVTBndG15QVd3eDJ2TXAvdHJQdWhPakNibDB2MEZueExwTW1KeFZQSDBwOGYwcnZtR0lOc1hQUFZBQkw0bWxLRFlvSEhVUmN3eVUwb1dHVElGdW1VbWNoVGNOZ2hOcDBLVTRxVjZiMVBTT3ZtbWsyVEx5N2hSREhQdU9VL0VKRmRwVjdwQlZwSmN3R0VRbW54RzFLZ09LV24vTGt4VldpQlJsTTZZMXhrbXNTVWVUQ09HSXdldkh4akdHbWtHWUdUUnVSK3Myei9wZjhRS0VKVm93OElqdy9oMlR3UXY4TFJjRks0ejVueGx0NXhYMGI5WVpjZjBrMHRuazhVZEozSGFlc1dhZjNCRmMxVitUcFgrYTBORFVCdmRhWGljWk01Vm1xY1B5NUdpTE1DQm00NllQUG9obFJXd0Q1VG02dEdMT1J5aEp1d2xaWkVFQkFORnNUNzBaQ1phRldQQmFMNG05WnZSK0lNMFZNVEZaT3B1MFVYL3I3cVoyNHNuSlQycUo4UlZYSlJTMC9OSmIyczVuMTJqUlRvOUtPUE40Znc2WS91RmlER09xVkhFalRVRGZvaGpxS2JVYUNNU2QrUWdsUHZPZEFFM2Z0UlNGSGRTZGxjVnJ0Ti9haVJnZlA1VkxTeVhtSVFkZEZxcVI2RGttSThDL2o5TFkwd1lpTTNkdjJVcXBqVndDYjVRREdLY0JyR3VycDgvaWVEcFNWdzcrU24rS0p6STJocGRUenpqbmZnbHo4UWdRTWZsRnc4cmVRYkZKcldiWkNEZzcxMUU3RG1Zd3BUK2lQTWNUSnowendiSkNCVnBFRHgvZFVwRnFDNFRIRzlvMzZTbFIxTmN1VU5LUmxyWVZPZFMyb2RMeW5LU0VnZXZWbWFoUVd4ZG1BamRERUJSaVhQajFjMHZTSTA1VWVyd3NQNWN3VXdkZ2JKR2xITC9ST3RxTjJCYnN0czVYTHpvNWdWUTRHY2R6ZkNNTHlpWkNMVDhGb1JESEJJNWtlbS9nTzI4ZGQzbW5tbU45OTdOc25rWFpKalhwNjhXNFF1N0F6YjdobVdFQ3NiT2lIbmgxZHB5YmNOOVJ3U3RkV0RJOXBOTGNod3dPQVRiSFZzYnBGcnNSSmdGeWs1MzYrV0xHWWNXUm5LWk9lSDJwVktLMFV0U3E2c1hoRmtXK09RcVNHQThpbHA4clo1Nk10VVVqZng1RjZPY1lPQU90TzBRQTJhN1NJWG9qQ1lCQk1LUmJ1ZXRPTTVwWE0rUDhOM0M2eE4wSXNKanRDbUdpK3hnRVZhdHVNN0QzR3gwSHZtaHRjNzlpYWJMN0FFc3RaMitEVXNQRkk4cXBtWVkrL0FHS1A2OFN0M3d6Tm8xN2x3MHJRMXpqbmZDendTV1c3TG4rQSs4Nk9qdmlOUFJyMW96bzd6OVlYY3pjK0hVaXJNbzBMNG9kRWo0YnROakhFMDJDV1ovVU5zZjdUMVByZUxmaTRtSDNFbkhmd01mZjcxS2JNWjRaUnFGdU5DZVZTUndTZFUySFArRDRTSzd6ZG5aUkZFOGphZEJ5ZWVaZFJxazZLRUhIZDNkQm9yQnRDOGRlLyswYnZFOW5PR0VLZGJZM0hxL2ZlSUNyYzNiUHY0Q2dRaWJOQkxZdXdUcGtiWHo2TkZOaVQ2RW5CRVhSczRYNVRrTmROYzd4TjJGTjhjaWdoYVJNSjI0MFlSY0dYS0lKWVc1bWJmMkM3ckV0VXNxaSs3cG1GOVp3NVRnM2tkNHlFS3A2QStrMW5DRC9PaEVqUTFrU2ZWdW9wNXl5bGtpRXc2aDVpSUdUTVQ0dVJJSVJTZmowUW1ueGF5d2MwT0Y5dzFMYlQ4MXNtWEhjcVV6OVRweGtMVlhpblVVQW1pdFYrbGwwMWRxVEhTSmp4MjBJc3N5UkVoU0FIU3VFWlNRN1l5Z25SdzBEdklraDZObHZadWkwZHFIZHZpSFdiNVdBWW03MGxTVXRzcmNtYlpIbTc0cUs3YXRKdjBTZHZZUHBlRThzTzByWm9qRWM4WDF5QU9WVU1GNTVBZDhXSndnOUdMQWYxV2JyTUIrTUhUOTBqdUFQYnMrbHM0dDdHeENyVVl1dW4rSUJ4R1VVOVpHak1DVlFvbVhwMFo4cHNhdXFkbHJEL09tOWJPd1Vub09XQmZOQ2dQTC9tTFJyc0tHakZEb2c2ak4zcU9MVnV0YXhwL0ducVo4UEFuWGpFTldjUXEvU01QM1U0RmgrRitzeGdNK2dWWUVkeGlsYit5MnhBeVRCM25TQlYzYStwc0pqbFFGZk1TQm5pRlN1cFVPNXlkOUlrSTlTWGNHS0N0ekxGOUplM2M1d1NzOFdUeUZPaWpqTG1rOUxDdXgxV3lhT2UvclUranNwK2V5bDdFNk5BL090cjBUbjNJeVN1SlRsSE9CV2dwdnQ5bm9xcDV6bWlYazVLc1VocXhWdnhJRm1DLzE0aWNIRkNQbkp5dno0N1h4Z3hUb1phVUJTUUdqUzV6VGxzVWRBUzNPc3lzY3QvVWRkUjZGdTE1OU5aeU4wYnlkM2Q5bVRHeEI1TEhBZmxXazdPQlhxK3NjYkZyYlRxb29Dd0xITGt5eUVWWHpDaXhYT0NTak9WYlpwTENsa3hOZUpuaDdHZGJsV3BqMloyZGlqQTJYSyt1WFZQa3pKM3U4RVFYa1dCa1NXMFIxeGoyYkJWM2g1NmUzdi9IMlhzY1BVWkN6RFZ6L0J6alk5YXVWbE84dHkyKzhqNHFBYVhyVmhZdUVjdkF5eGJaY0taZnV1ZUczYTd6akJEamcyWjRwMHlVclFmZDUwY1JReVg1K3NTaXNuRE9jZnZzU0Q4UVlRUWZOSmpvcTdza1d0U2pXaVdFUmdPcjM1MmUyUG9uazFGWk9yUzhjTit1d1hycWU5bjVIS1dsRW0rRHlPUXNLcVdxc2dNVC9HdW1FeURZTnJ5eHVCSnJCb1VzbWlUVXZqSXlnNFZWWVZLSDZKRUNiL1Y0OTRuVVM4WS9FVDNDZE1FZ0dtbkpTTmI4bUdham54U25yenR5MlpwdzNaTWNmems3dmJsMmtZTmtkZDNud1hlZ0hEREU3TzZ2cVVqZ295cTIzZWJ4anB4M2ZKVDFsUUNNaWtuK2pIZmRUSGVqcWdjQWUzY0ZPSUlpR2lpMHdYL2RWM05OeTRVcFBZTjFBVXZZdklIY0s2VnZPanlMSktzS2JBZmdVVkdiNGphOUhDQXJSNDNSSzVLNGJCbEh6Q3VTY3VvclFuREVaM1JiZTJzT0l5WXdDMmRGZkN3SUJyNTR1L3c1L0pMODU0QkVKRUJHUDhhbmJZeGsyejMwMm5mbDNTR1YvUGZTelp6SXlXYXVsdW1tMml2VEgzK1ozUlMwU0lHM2o5emk4SDBsbjI0RmVXMzNFc1dvcXRaa0NOS1kzeDRMTGZsdGlUeU01VU1TdlJWY0ZJQkFGdU5pWUwxOEF1cGU2RnVLbGRsbVhQWFlDUnpqR0syOXNRaWI1N1hVVnFzK3NGamVOZVVLS1Ewb0dsaVVvSUlCbnM1SzNodWdya3hXT2czY3JadFdxbDNqUEl0ZkRpbEQxRDVyS0xZU0FjRTc1SnFhR3V5VUFidnp3TEhqcHFpbXZXaTlsMENHOVZRWFBUR0E3VHF3L0ZNaTAwYW5udnlrUzdoYkZ6eVhBWFFocXdSUVU1Qk15emtJRFhQbUZrUi9mTlVEWHhyT1JaeFczMEhoOVhUcFNBRnhuRkNITCtmdWJiUWFoK3dOMVZNNzJ6cGNFRXBQVmFLdFhmTVRJOEJCbmE0S212bm1RQ0s1TW94VDBjSjYzcXF2WHROUzgxQUJna2dkdWhEVFFuNUdRWWJBTmhHNXBLaFZtMHFXL3JRbHdoRGdVTCtWOFlDNXR6M1VvN2oyTDBoK0J1M2xpMTBoSU9aWXVCUUpLZm84NHNIUENvOTVnd0NCUnBqbGFua0FDc2ZpMGNkckp3V2h6UnBWKzdBM1ZleVBoZExvRTc4Rjh5QUFyaE1pL016U04zcU5sT2VscnRzSndieDVmOWJvL0pQeW10bUF6V05mMWhra2JlSW1JSUFGcXdlZW5xZTJ5WnZVSFZSaUs5alNobGtWbDFXUFVUL2NrQmZkMXlFS0JzZVlvbTJWMnJhck5aODVwQkNpeG9XNmtaaitmc2QrODRIbDlGMENFWnJhL0dmeEdrbTdONVZDTmY5b1RDWlE0eVpCQkZ0dER0VzhQNkowNmdDcXZuOHFvY0dodGZ5RTlFMGNRa0lGVWk0TXRSdFNmdW8reThWK3hFQlcvcHlDaGlBaUZGRFhOa3I3QTdSNWQ1SzREMWZiVmtabnZJWWRTaDZ4V21DMDk0Zll4Skdkd0g0WjJYaGI0ZEk5M1RrVHJZa3hLL3FSZytFV1N5NXhkZUJOQXlpMm5GS1JTQWV2R0x6L01UaW4rVUNyQUNQbzRqWkRkTi8wWWtlN3k4d25heWdFS0dIeXFUeWpFUlVGRnFQYTR4Vm01RVdLcDJxQ2J0ZURCSlFhMzVxaEQvSnBKaGdOazQ4NndTQjR6Ym10Z1hjYW5rUEcyQzVVN1FWYjhkdGxjMTVqQUVNREt3TVdUMTU3T3V6T0U5c3M0VUdWR0dsS1hYMktHTXcvSHZGOVZ2dG1OV282Z1E2eldVZ1JvY1dzSnpaWHh6MGZWTHB1MUxOQUI4K2tYVENSeDkyVzBGT0dvRUdGM0ZQVmxSTUdEalZjLzYxUDVIUEV3VWxBS0xreisxVjN2OWd5T2NRU09qUnRjN2w0OFU1c2RvdWY1RHRoaEJMQ1owb2xqOFJDSFlnNDVGRUs1TVRMVmZJS3JWaW5SdmZWa216aWJEaE5CZkluYm9EWWlzQ1BGbkRVclcveHY0RTY0K0RyRFR4aGhRTWFpMFdMa29rQ08wUFBJeHNBSmNZTzJCYkJDS2VnNTVCcW9nRThWdUlRMDE3dDF6VHhSMitSclk0Z0ZDMjN2NVJFTi9tcVdqUGx2UFRyNWZveGxxbWF3U2FyNW5MQnJCcHVNN2VOalkvQ296MUdrTVp0TjU3SW8xMVhDZi9COTFOclZLWWwzMWtENTI2OHRuZHRyNEpscENtU2Nsdm1pWFF2ck1yNEtwem9lS2R2d3FpWDJjSHhNOU9SRnJZblJmdFoydmJRU1lKeHdxdmpoRzJFRWYvVk5vbDU5S01LdjkwNENTSzh3NkhVaWF4cVZPRi9QaWFHdzlYdXp5Kys2ZFRtcXd2YmQzTjNwTXlGRG9NVGg1ZzVaMTFqRGVNUFUrOXB6clVBRkpuUy9yNXFwR1lBMG9uMmxFOGEvQVQySGo0ZytIUjZtUmIvRUg5TUpqay93OC9NUUxzNlc4OFo1U1RjYnN5UnV3SkplTndHYzBPQkFKRitJVW53SW5ncHdXY3RZL01xZnpFUCtMR0lncDVaTTRaNWxTWHhGQk5lbEQwMHVzaGRqbjBYbG1WZlVXUTI4VmV5b3BtRVNiRm5Idk1PSlJ3N1g0Q1V1U0lGOTg3RzhqVTRubFNRbkYwU1NLREowVmlmRTc3cXNLdklwMDVxa09RTm5TYjUwTkRRR2taQ1pkWjBoMXhoRE83ZHZ0d0F4QzRlelZYRm1jUE5YOFZwTkNkMUkzRmQzOHFVQjJMckpBWTdnWnZ4YjE1MXJ6Z3kxMjRNV3JNSEpKblo5MEYwTXNxRmVQWkZ4am5FN2FhNElPVmdVM2dqVnpNY2ltT0lLc096N3VJYWlPSHdkNDJCaEZ1L3JtRTRpNjFrV0lQZEdDUGdudjNJL1JWQjFjL3lTTDh4OTUrQzY4V3lPckwzeGRWdUVHRk9yczVzZ0R4c0tyOFl4ODgrTFR4TWQ5SGNuRjlyTm9FdlNKV1Q0UnNSckRrNVNRbU5FeDNOZjlnTmhVdlZEVlBSNFA3L3kxeFZkYXhhb21adDFhNzlBTGtYUXFhT01aWlJ4MDJzcTRlemVIMkhOL3BWeCtwbU9FSlhMNVBmczNXRU41R2ZEdHowQ2RzaWZUMkZFR1hteE5COXZqUERiVDJIaHRldHI5bDRtQXhBVHhmd1k5Wk9LNVJTU1A5aVZIMVJRZC9lT0JSUEtrSk1FTDNYaFowL216ZTRwU3F5NXR1NTU0anNRcG9TUXFEc2ZVYzh1NmZXNVhZelZWNTdyZ3lQZFhwZFUzQ2UrVzB4MVF0bWhCVnVCaHNiWUtENTVQRDExRmExb09OSUdDelBkYTJkVHgxbUxramZhZFpjdlA0OTY1RjFoNnEyNVpSRHJkc3JrR0pTckFQWEswUVFzcmQ3R24zdDBxMW1mWi93VmxzTExmaHpESkcwZTNpdEh3TFZaaDlTNlNjQmErU2JndjRsL2pYN3lYQVhaSTNNTHhFUWdPL1hzNlgvRmRpUGZiRlFzTnBYL01DbnFGWkVrTTgvQ3lYVDRxL2w5SzdKL3N5VndCdFArRG8yQ3VUVFNQYmVtVzl0OFBwaHdNMDhvNWdmU1dvSmNQV0lLcWwxUXFxWmJxK3lDUTdsK2JsenNodGhoUVNzUmUvRHlWdHNNRlg1Zlhqd052NjluSHB6NFgxY2NSV05DOEg1S212SVNMdndtaEVXZkRmYVJtSmVpZVpzR2ovVHY5VVhNMHpDQlhzcU1nZFJHWkg2OWQxRlBrdHo5cFY1aFhEUTA5V0tUZUFZdEpieFc2NTJ4S3ZOWkdpS3FNMFBaRG94U0FVZ1Y4YlZoeW9yR2FvV1lkYVROWjNZeS9PTU44NFkvNWxjcVF5WjZ3SmxPMWdjNTlOYTNLVEhDbWQwYzNCRjNrUnRvYjhHSDJPTjBKSHp0K2lSSGdTWGc5V3Q3OFk4djBCSjh1WDAxWW03UDlmVE5aZWplMUdZTmpPTGxlMFIyUDh6dG9lVG1aOUxqOXRBb2QxZjlra3NsTmxoRkRCT2Q1VVdkK2lvdkk0bG9IeStDd1k3NXlmTFZOT3JYNHJGeWFJUCszOHFYRlAwQkpDYVF6UUdTTFdvN053cTI2OE1iWGpCQmJ1dnZMUnVpZ1MrVC92SEIrSk5UU1RMUUJ3ZzBBcm56RDMyd0NhWWlLWWdhaTlUakJZcDlzTVNpaUFRUFpqdEE1ak80eDR1ZWl3d0tqVUlWelRHRFVmKzB2cHZZTUhLaFlPajFQL1BJd2d6RTIxQ0pLaDQvUjQ3SjRJMEwvdjZMaG1ha3hvcmRYcEk2WDZXekR1NlpKVWhyVVJuTGxrMVNzaXQrME5CcFBtWkJNRi9aSHZtL25lZ2xENCtwYTNnWGs2d0EzcUR0VXRtZ3lQRkREeEw3TnVqazVQRXJaV09FK3YyRGpaUU1rek9PMU02N0JST3hBYk52OWhmMTJMYzFZR0g0VHU3Uy8reGlMTFBtVGNPUE9NdUlMS0VEcktTQVZ6aE5zNFpaMktqeVoxRlFkUzhiNTdWU3FheWk4SnNhUDdzTzFINWtWMWxaVk9Ia3lGMVRxRzZwdHQ5MHdxaHlYeWF6SjJ1djhuS1FRL1lLWmJoc0NQaUJiN0k5R1ZrZlpNa0dTejFBWGRaMVZoQ1JuUlg2QlE4NnRReDFoTU5mWjVGUi9uaEpaK3FodVVOWXJtNy85Nm44Yk5UUzZ3SnlSNlRoN2svZEdWRnYwS01xMUptVmp5MmZhVTZzWjZNMnRIekg1S0tGOXdoMnNRSkorVlNwT0dma0NpdHdKZS9VUGF5enBiZkFwZmxWb1E5ak5MdjRqMGFGdVBJUmlGd010ZVdna3R6WDdrWktLSU1Ea2M1ZzFwbzlWSWZMa0U1ZWxwKzZIR3dDOWJqUDhoOW93dmwxei9iVkVFVkppM1Y0SEZQa25wRWVRVEcxaENzQzl1QXZDYXlLOVVXajhWZVE0V0ZvazlpME15SVpWN0V0VS9scENhbC9zNGMrWStycXFuVjAxVWQ3b3FjNFZjdldvTDU0QnNTdy8zaGNkZ1hvcDJxVzNSRTRKYnhLNGlOWU5FdzZLZHUxUlphdml2VEowMSsxVXgrRUU2MG13bzJpRnd3RFZWbVNnQzRuSW1KMC9McVFUemtYbU81MklISE41NDRoajlrNG5rTHhnWEkzT3NQa3p5elkyWUtOOXNtMk5tR1dHS3JNSVRuUStHVjBSNFJMSlBtRVBrRkE2a3ltTDY1QTdSL2dBaHlRdWhxRnBpVVJkcnhYSTBrbXRKNE50MXdZV1YvaTgyVmRIRGJUZWRwaFRBM2FOelZ6VkNZTjV6Nk80WGdxRHIrVE1IcmdBZllWbGlkK3BCKzZRU0xzTERuaXBMZlRXMVkwbUI1aG1Mc0pTQnFCWlNaTDFCZnpjMm0zL1JsdkIwbGlnNmdwTVdENFlIV0cwTDFNMnBFYXVxN00rSXpaMC83dmkvSzBjQmNuR3lFZlF2Q3RFZnBPWlF6MG9lNVBMWFZrekdHTTJaVS9Lc3pnMHJlcXQwWkdTYlpaM0g5R2xpdDVpbnJHaTNhdGJJa2loUFNEYllMMFRiZ1RScjVRSkNyVmlvT1lpbjJNUGNncXpiQUtmeW9VQ3JEOEZDUkhUYjEvUkx2WHFaRXpRVXpucFE0S244NGMyaXdmQjJ6ZHNTNTNBS1RZZGZLcXh0RmxhQlBRK2RaRDNzajJpaUIzOFh1Qm9aWWNDMXM5bEFlZ3ZPZlNUaC8ybmZpMzN6WTBqVkVDOFNrNTVoUFo2VGpxZnJtQlRwZjU2TmdCZnFRcDVpbERyUHJlY1B5VThNVnJCeVpGdmRuU0N5ZUROVCtIWnZ1MzJlSStqNThDd2hRNjN1aVhyOGJkY3pmcGRkOTNDMjNYaWJzU2VOQmwrdkg0QjlqWHFKL25SdlRGc1JEWGFjSVRyZ1J2S2dmaU81NlZkaVRPaHJzOGlGSW0zQkpXUCtRQ1FJYnZ0ajIwV3FjMFl5bHUxTkVNUzVpUmE1Wnk3a3ZoQVhKVVRCQktBN3dCb3Y3RlhsL1JtOHBmRmxaNXNXUUJ2U2xFaitLWmtLVVhESDRDdWVKelhVcnhlTGFiNVVFMW5WYjVNRlR2Q3dmVmdQYUVzWUpGYU1kVkQvYUFML1kvNUxmWThFNGJJRWdNYnl5MFpMSERGMHRkOHRNanFZMjNic2l0ZWhkTEJ6d0pyUzZOOXNTZDkyQUo5d29hQ0JXaXg4YjU3bFQvUVR1K05wc0k2YVMxd1BIOHRqMlhDcHFlVGdLbkhvR2srNGprUCsvR0FEZWM4bmM2WDdJK3NnQWhFM2M4bitGUkVqZUtBWmd0MldHcm1XTTl6VEZYbDNicXdaMFQwUUVKT1RLZllUWFFMc3l3NVRFZjZrRVdZVUpSaVRBWml5WkdLVVVPb1VVZjhxQm5sMFBsc1BldHhLSHVmUmgwRnVhd084NGQzQ00xN3RpWUl3MDVOM2N6NEtMNW9peExwd044aDRob3JTUHdidFBNcGRLTjBFNlg1SUVtSU5udEVRZWtHMXYwM29lWkcxV3RVcmVoaHBGdFloNlk3VFoxMDZlS1M5RFh0TlIxb2Y3dnY5eENRMHNrSitsRVdvU0ltODBFVUJMT0JoVTB3ekJqd1dRNmtZT3RsMEI0ZGVYeGFmZEF2cFRVdGRlZ2IyaUhDdzNRVzFJSnVtanJEL1pNUFY3VU4wWTBnQzJtdmRUOXhkY1FrUzEzTm83WVp1REpENi9FUi9zTGlPRCsya1lIc1g0dDFEdmlJU0VML3B4ZnlPbmV1K1E0MmYvT3V1YzlLS3lHa2o5MlZZU3BjRjhQNHZXNHF0bHJsZjFjUWxnYUwzM3NsQWVXaEc5bG5xMWJaRi9CcklOeERWM29KL0t4NUVOUkxqNFJJWjNMc0RnZGFRb2VBWDZTMTh1bS93Yy9UYU81QlcwME85Rk9sUjhWUE1ZL0ZKNXVCVDBvNTVNVW9WQU5ndTJRanJoSWV3L21KUmd2REVpb29nUVBzaXNja09JQkMwRzljZitVbjFPai9YbFRITCt0dmhiZHByQkxQd3V0VGR1MWNsMmdnL2UvaFI4UmN4WkdXWTdYTlJNSWdveng3RmthWldRL3RUemRIajVCbWFhdjhOb0JwZ011UVZXOXhkb3h5VlRuV2JpM3pIc21ZOGpSMVhMUHA4aW5QbGlZck9jQ1FDemw1NThldDhyMXpTc3ZaSzNKa2p1YjY1cXdrMUNIbGF3Z01YdzRMdTFxODFrUzBuMDNackNhRFhzN0VpVzZSNG0vYkhMaHVyQkZSY1pnVDRGNlZneEdWcWRZYUVSeTFJMTg1UGtEaitZN2dBaFU3SUpvSjNYMWp5Ti9ybnF1d1R5QjNSRFF2dk5ENzJDNWhHRHdnOW5uUUxqZ25BNEMydXFYSTB0K0g5MjZYa3FZdEcwcC9iTGZHN0dxUVV2U29QQWZNcFpabVhhTUZyZldzNGRYTEh4Q3FtcU1DNU5xcUpuc0JtNmZ0Y3dnTkhLUG1RU2dBTGRiMnEyS1J5M2V4am90RUk4Q1pYaTRaVi9wYlpERGdBb2lVbmFsNHlmVE1QSHErcE1WNjNmT2JsQnlNdjczRSt5ZkwyMkw4bmdibHlQVzZ1WW01bVBRSmZqaTh2TXZzNnBNY1pFQWp3eUZ4NlA3RmEwVnNYWkUrdk1yaWhqV3JoeWJxZUl5VHJ2dURIdnl5MUhGTWtkdHlRbXVPcUhJWDRxN0hMOElFWkxtaU9yMW1XK0tSNWlYZFJGWFdIeXNiVTFyRWtjSFNCRU8yOVo1Ni9lRnhRRFdiRVQrOGN2YURwSWRDS0h3bys4dGNPcnNpRzhOdzcyWGxsWktnZGJEZUxFMDNraHNzdG0vaWZHSzJOcFJjTnRrYUx2R1RmUHozRTRSQ203OSs4UEs2RklpSERuTDQwL2dGRXBMQ3R4ekIwbDV6ZW1hQUJ4b1VLUStxd1N3cEJSa0pRSy9sUllvME1IbmdoeFR0eGl1dG9uMTdCNENEOGhBUkhSTk5vbEtlaEZKVjcvMUt1anFnQmFBTEJtN24zaWdOSW90ZEFodjN2NitTTVM0ZWN3L1A5aHBsNUozQzFSTkZnY1F5c0gwcXBQUWYrMmxzMm1BVENoYWZrNVVrTGxnOEdZN0c0NUtXV0d6QjZ2OFdvRWFoODBQUGhaakphamhYQ0ZQbVRPaVpMMzJZYUNVeVdYdmlZVTVmdFAvQUlEWjNiRENSNUZna2hCUU1tVk1vQXprc3Voc2o4ajdGL0MrZmprWUlFVWlTa1ZHODdRaTBwTWM1S2RyUzVCczJpbTMrdFE5anBaSGNTc3VqMGRHbkM2VUtla0c3SlVQRjVKQkN2MkwzTTdaMERqMlZHdmoreklXcHY2VXBhOFRXbnY2TlpLbG9HL3dla1pGd2dKQzdjVWczNld5N3B1R3NvaWRhNmpGTmZkM1dvS0pjM3VsY1VIMVA4RmNJU3RjYjJjcUdaWTZENkxhbzlreTNTWXJUdWNQaTN1ejFoRTJKaTdJRGtKRFdsZzY4ckNrWnNiYlUweFlSbzFKdFFFN1k3b3d4NHlzcXc1WXg1eFRpNVhzUW9lRFJ0QXU2UUR4MnBqYnJBN2k1TEhwTTBOQ1dyak41V2NxMldtSnF3VFdtSk9LanpHTkRMcEJGY2F5eEhwbUVoMStLdkdFR0hCQXFnRlRIV3p4ZE5OOW91SjJNZHdGRFNjbzFzZnpVREpIZkhpMGpCRk92YUJOQjJKR0dqcVJ0WGtIU3RrUkRQQzhxRjRlbHdjSFUyRjE2ckI5ZFJjY3ErdUxyczNhK0VHazcrYzk0MGw3NzNCZDliZG03WUMzVnRxc1VDWXpHcjhmUnJQbEQzVTc2eUYxM2hkVksvbzZWNlpUdklRNGVUSlZHMExJc05tMmcwWXlOMWRGb0s4S0IrSlgxUFFxdkhBWjlrOGFNUUJvSUV5QldYdHNGNitOdXdYUHVGdHhkZndUaHVJZTBDcGZScDFNY0xrNjZiNW1CYkdUaUxNNDFtM0VwWXhpRDNyellzZHpibmRBVTRjUkI4TEg1dzF6QkZ6M2k3R0o2OEJaams0bS9kMVh5dDlMNzVNRU91a3h4dW9HWFZUWHkxaHR4dUtDU2hBRzZLOWpWSnR4d0dwL1pERzVTc0JCZXdCTC96ZnZkSFYzZ2d1STIvV29HOXBrSjhVckxyYjFDc0NrTGlXYm56a2JsVUc3YkQrbXVXaXlnMXZvWSsrdTB2NU1VMFZPNW1YNk00OEpwWGRNd3djMjY3YWdKY0RLV2ZabENCUWpkajRZWE9qRitlRTk3ZFNxTW1wNURZSk5rNDRXRGd3Z0pvK0R1SW9GZGlvaW5XdUZOamdrdGtFU0FDeFVxd2VqaCsyUkt3Qk9GaGZWRjgyN0c2Q1B5UmNPcmhyQnRJVXp2em1sOGdBUzArMjlHMS9TWDc2MDVYcHdjYnRGcXBaZ0VsWlNVb3Q1M09PNnFXMzJaRVRuQ0FCdmt4RStWUmxrZkliZzRwWTV5eU9tQ1ZFenM2ODVDT0dhVGlhMFNUTTZLbFp0RktIb2p3WjFGcEprblBZMDJlV2djTUU4NmVzUUR6ck1HNFdQcVRBa2lLOFdSRmtjSnQ3c0lmZnNWN3djNHluRW96eUsxTlNibGoyams1Zm5DdG55RXhIeFN2NGZaRWkzRm44ZndEN09vbFhjeUQ2ZjliZHpDWE5QblBXREtqOEpxZFdnZnpYTExTZ1MwOUgyb0djM0N3cEJkQ3pCUVQ4Nk1Fc01QQWpaUzlhVzdZSmtPb0JmZ09nSHJCZEs2VTRFS2lnU0F0L1V6RGFJNkRmaXk3YVVKcVluNXNHbzhwMG1OdHNtMkxORlpCSWEvUDErYU9lSG5FZkJBdlZTV2VpWk5sVEE0SlRVQTNZUGcwQlZxenFWTytYb1VTaUw1K1h6ZXV6cHdmK3orZ0FPK3VwdXNIQ29MaTJWRmx3dU42NjNka2k0eFdQa0I2UG9SYSs5UlBjTnMxN0ZlTU9hcXhhYld1QVMva3hOeDMySE15Y3dhdDZOVEZQNmladTBwWXRqbnYyQm5ONnJwYXRiVDh1cWx1NmVXSDJkUno4bWNEd25FbWVteTg4TyszK1luSEZEME5lMHhVWDhkNEFhTTlPOGc0Y2E2eWpvWUpHc2YrUFpGeUNsSVNCQ05pTGcvdWs0SWF4WG5Wd2Y4alRZYlErUFVqd1JGOG5CdEd4bW5nNzdjRkhTa2F4VWk4SVEvMmFMUitHU05GMTdxdzlPeU9JUzRyY3UxTDAweXhrSTh0emlaQk0xbGMwQUw4bkpOUGJVK2FkbnNEeHBsOGZic0o5eG9TS25TSnplUUVXcTdIWTFjNTNPMkc0c2RFMFlTWm9tb0Qwam1oYVJCL1hzVEZLd3dxc2JCbG5NdTJ1MnNlVC9xbExld1d6azhWZzF0SjdnQjROOGMxaEdpaWFGUVZkQzQ4R08xWDByd29yZW9IcmVwSFRYV3EwbzdzMVlka0JueGJwRTJWZktveCtaOHhrWkFMNHR1QWFiOE1penZiVU1IWHRVNXV2dkI0cnRZcU1zRkxkNXBSQjJleHIzaTJqc3ZxSGp0M3czZDFiSVZOdExBZ3BGNlo1bkQrcml6ZzlacVF4M05uZ3FZbGdYVERXRUVMOENqRXRhVFBnVjRoR3V5UG5ya2lERUkzNWxCTUUrbHV2d2w0eGxSZzJxeldQRlZPc3c3aUJJdTJXcUYzNCsxeXZVZHJNS3FWRTdoQk91MGN2RVU5UzVaRjVUaGdrYlRJRDdHenFiRHhvVXM1eHBRei9ONklKSElVS1BobGpKUlI5RHgyaEhXemtwL0pEelZLb0Z5bEt3YTBqRWtxaE5UaVJWeTFFaTRSTGQvL0pjVytxYUNKb253Z2lmRnFGZEZQcW9lTnJXNTFiS1h2d0xMc2hpNGNhRXQvM0xBMWViSThCWisrQWxxSGJYZlI3SUJCWXdlaXdYRk02UjMraEt2M3A0blovMGIzOG52cTQ3M3FMUlo1UXdpYS9HbUZYeThxZVRqT1Nidlcvb245REE1N25ZK25kRERsbUFnQzQzTjcwYmtTNzA3S0JGc21rMlpjUlNZdkRUVUdyZkN5SFdYSUxDSEw3M3RuTnVNNjRiTmQ4d2wxSlg2Y0tQODdycTFOM1FHcG9CeVdtRHFvbEswMSsxYTNsVGh1Y2ZFVm5HeUw5NCtnOUsrc2NFTGE2TS9LQVBYL0pWcWtRYkpOelhISjFqTDk1eUJoRm51bEdXamVLYjBKejRKakNRenNES0lmY2x6Z1YzSHlsRVc2NVRyeldFNTdPRjlsYmFhbGthZzgwa0FLaHRMbWJFaTlITWN3NWVuSSthQlArTDBLR2h4dUd6OFZMakhVVktjTU5QOHRlaURFVmFFU2pLZXUxdU9pVDE2bEdVeE9XL2xVRDRGWm5DYld3V2RlcG1GbW1xTVJQZXFQL1d6a2FLdWhOUVFYaFhyNlBUazJrYzZEWGlhNGZxTmY3dGpPWjR5L0hiZG9jNGE2aldPTEdVaXlxb3lxNlNPR05NRmZvaFBaaWlrdjhoc3VNd29SRVUxZjJlMFBOVnV4d2Q5Wko2WisrRFVRNmZhWmh6bWFwTm1IdTQrNGpZQVJIZTY3N2NuSkZ5bnozZG5IRXBwekRNNFdaZExDb0F3NVMwN3hMUk5aRjNrOHVmT2lCTnB1M1FBYmRicDV2T1huZTd4REhybkhhQU5vNDdBMFFHT1pNc2t6cHB0bE5ObTIzYVYra0UxYisrR0VITGp5QnNqZzV5QzRrS21zVGZUZlZSNUluMGlaWjZYZHNBcVZhenhCSG9zUkZhVUdXeXlGUXJSRnFTNExuaEQwTk9vZkw5b2xiVTV6blRKK2R6VU1makZzbGhnQVpIZnNLVFhlUUVPR2RkRzRmZUdtbmYxMVltRVZsbFJnY3g2NmxNOHhmblJiUU9Eb3pJSkRHU1A0SW5lS3MvVDBMSkYvOEp1b2RjUDQ5K1hLMXMxd2lMQlNMbWl2am9aZnUzMCtzNFdRcE5iSzFCZmFMRVdqNXFqY3JxMnB0V0dBMWFGK1BjTUpzK3NJY1ZJVzRaMFpHaVBVdnJKRkRxUmVWaFZQYWFQUGh2V1lUdU1OeHRWenJTWmQvZExJZnczMC9mcjJ5Mkd3dEdtVXlEUnRscHdva01UNmN4RnF3SnFuOGZNZnI4c2lMdkhFdFJsTWRNbWt4cThPVGd2WGRNT0tETnlOVnNxMUdPYUpHV1JqRGJ0Vm9UcXoySFVwUGpvNWhHOGQ4VGNkVUNLajU3NW5MaG1lU2lnQnNBcHNyTEl6ZTJEVXRCOXpPVEdrRWp3THVWQ0o2OVpoaVg5MDczQmdXcllISU5jN0J2UndXK0R4RTRNbVF2b0JXMENFN3JJdGNCeFVtYlRJZGhaUjJVMW55UDhTMC9qWVNYQ2ZUbXZZcmdRMFlROXNla0ozOXpVTDNvQ0hSbklDdzQ1d3NjckIwN2szdHpFeUpBTDR6WHBQdFZpNUlWNXNPRmpJTkQ3MzZGcTBvV2lFcUNRL2RMYkJubEZ0cW8ybGd5NkhUdWUyVjlEYjZhNytQUXFLNWdhWnB5cm1pbmlvdEpWa3N1cUhaNzJWSXlpME9MRDBYbkdjT3NzMUQ5ZEJQNGhQRVdNZE1sU3lyall1TkZKSEFDU2JDM0QxcmdPbWJBK2k4cFpNRmRQYThxT2lwckpPenZNZVpORXF3R3A3TTVJaGxaT1hGVi85Ry85RE9lVzlacktVK3pBd1dHakhwS290TlN6Y3YxcmtibVRsNnJkT3p6WFUyejBzZnR4dERpN2ZxcmlyVUhuMXA3ZWxPakhhSGk3bXlmb3cyWmlpSWlYY0tab2h2WUF4NEFxYUJaSHhrZUtwK3RZMWtRUG41MC90Z01PNVR2VmE1MlpJR0xzUkRoTlR4dUFPQU9vb1k0a0NsdzBjRGNWMTVUYTlpMmhGam9NT3FTRE1sd0w4VnpiTlJzd1RpempSWU9xaXljZ2dIZjQrKzRvNHZnUGJxT3hkZWZ2N0ZZbXdZWFNDMEwrV2RDeGxVdGJFMXpEZGVnN1VXZnM3cE9KQ2RRak5FQmorZVdhZHdpcjhYYldyTGJsUmZQbkt3cmhpUDdzNjZmaktsK05CdlMvZ3lFQmJhMlVMYndTdGZUazk5emZ5ajR4MmV0RWJ5MkFKaWlDcHFGSWtoK2lMUUkrdllsNWxiVjUyTVZwbTRyS1NhenlFM1d4VVdyOTFMbXBwa3paQXpqT2drdHQxdEVJYUZ1UHJsVHhVN0FTM3RzRnlOakdZU3ZRRjR0K2ZNdkc1NjZWaUVqZ3Y2enVZU2o5Y3RUNkhFaDRLSU95djgyYlpkUDBYN1NNa3EyZFV1WGNTYURZZ2ZaTmRWeHZ1dHFzL0w2UFlrZWUzUVZXajdTRXBlanQ3OHc4V3pEcWFyQ1VCMHJzZ0NONDFCUzcrdUZwNGR6NzVLalFwWStBK2Jzd2NlbGQvRDRxZmhxUU9OOVUxRERMcUtuSVRpNExBK1VvMEhmWGRHNnBtdkZiZmtpckZIZlFXN291eDRpMHRydzVRQ3krMG9icEJDaS9sU0dTQkllQkZwN0VQRktNVXlDeUQybkVvMEMyUnpGeWQ5SEc4WWVQaFpTUlRIZW0zMmgrd21GWEJreUdGclVJVWtIRGt5dFdKODBxQWd2dll2ZitJWkZpM0dZb0dCNDNuS0NLU0E0ZGJlV3pVZmZGSzVjekxFVlRsWEF1T3BLdHZYQ0pOSU1UV0hwbXR6eVJXME80SVBxS3hDL3hJRkZ6aWNaZ0VtVHNlQzlDUkxnYjQxczMvWitDNm9xN1I1NXhzSE5kTWN0M05OVkVuY0V6V1BmSTdoV0ZwYjRGMjgxcDd6ekhIM1FIcytTSmJadEJBRjZxVjJTeGVESE9SVTJIZjlTL1lEMnpYODArSlhiOU4zQmNyQkhOY0pETFh4UjZ5REkxN1FJbjV1emhyNE9oK1JIOHVTRUtWTHZNWksvb3U3K1poeGlKUjJiUzljR3Y3L2tJZ0ZtVEpNVHpHWUl0RjhjbnBBZkp6Wno0Tk1WMytqLzZJSlF6blZoRy9PNHRBZDBjaElieVZhVzhlQjEvK2Y2YkE5VE51N0lyZnBRWm54UzZRNVdIRGJ4emNjaU9MeDliVGFYTDFtVVJOK25LVWh5OGlydmoxOTZJQy9VcHlkRjZZU3laZWV2ZmI0aHZyeGlYb3RvTTQrNVY0bnY5SEtjN3VVNVk4cnBwV3lQdE9UU2FlRkxjTzQ0TzAwb3NYQkJrVW5SRytQUzBSK3d4UTdMTnhvUk9PVUhhRE9hZDNyK3dQY2cxM215T1VOYk9CUGRJclh4Szl5dHNGeDNpWTFGeURSMnJKenR6M1NhaGZIRmZ4dmJHMDdyTGlEcHN6RTBQUndtdERrc0lJYzVHYU5DcUhkdjU5OGEyWDZXNStMa0VQVnA3QjhMV245aFphU2ZIL1NJZEthdUkxKzY1V2R4L1dKeStyVFBSeEJaQjZDNC9FdlBSSUFQTFhlNGNSb0dsU3FhSi9pSlY1NEpucmVmaGhwUnY2Z0xkd29MVEJ2ZDBsUnc2TnYzUEZoMjFDdWtKZjBIcnZnODBGak5icE9TbmJuWVoyT2NrenVpVlZydEkxb3Q3UWlBdEl4aSsrUjNpY3pQYWxHNTlqTG5zeFFZR29DV3pZYTJuZUZFdkVBWUdQYmJaU2J2UHN3dVNBdWpidEZkalU5QnN0MDAxR0QwZE5iejN1b1ZPRkVDaVNvOGw5RGEzdDJCOWR4WDhKOHBaSXpKRDZ4WVJJaGxVcnlkVzYyYXVEMEtHZ1pCQldRV2ExRFVPbExmQ2grNmhzZkhqNnFyKzk1MGQraEEyYldYQ0toaWdQeDhZL1pER2hBTUY4NzBPQ2l6eUJXR29LU0dHaDRFUFJQRnFSU3FZZHVCOTdsWnBTQ2F6RENEOXBRRkRnaVhqR2E2RzBTYW1LU3F3RGtzZHgxUWJFMWp1T21scG5INThFNWFLOVFhaDZGdVdRWS9jNHpsSklMemZFc0ZJTzN1U2hNVUJPTWhVM01QdDhoMS9MQVBsRlpkaWN1dlFMdzdJekdORG9rc0dMREFPVXMwbWlMcTZWSGZGT2JGWkRGY3NxK0ZjaUNFRmY2ancveDFsSlV6UGUvVDBheUtXTmZxL0IxNWxYVG5mZzFRcXNOSkxtOHhQcThKdWE0akZIMnp6SGJCaEI0dGNEMUtKMjZnU0d1MEVVMDRndFRtVERWL0dCOWRIR0hzRVZUQlpoUE5MZnI1dGQvME44cmUyUmtQMDF4TGc1N2h2T1hBZXBrclpWRDJIUlcxdW94ZlAxSG5NN09ISUlKN1o1VWc1Rmw2aEs5WHpSTVd0VnBscmc3b0gwMGQ5cHQyQjZQSkhGN0tVeVZ6bFovYTRqNzlKZ3dhVkJRVmhkd1lOdDk0bFovZFQxSm02ajFncVhjK0p5NHA0aDZhWndFOFcva1lxbnBEMDAwcFZBMzFHeVJ6VDJMTjYzQS95TWQrWDd3OFBjUXJNYzhkTjFXenBPNWhMUGpENXJBbTJhSHlQUjZEWlM1Z1F3b1hmeVd6UnRnSDBoKzMzWmNOenlkLzhidWh0S014L3FZVlVMVUFIOTZIbEZTK0xiSWdnRlVXYk1SQkxLbk0xbGhGSVQ2TUEvSmVlVE5tU0U4ai9DTXQ2QlRpV3U0MEt0b1YrZUg5d2hMcE5Td2ZZWEo1dVF4NXNFWVp5cGVRWFBqR2dYb2NORnU1NVU1R1ZLTnJUcTJVQXVLNTYrMUhKRGEraHptY2tCWWFsY1Z3ckJjY3NQL2JMM2pleXU1MmYxUTNMd1l0dElWSEhJa0VXSzFLcnE2blpxVndFMDVPNFcyS1pJNnQrTSt0dG5CUW1kWksvb3kvektNakV2L3RpNFVEUzlqUXBuakRJb3FjV1MvRHAvMXBlUDFsSnhna2p2RVVTSTVidXpTeEYwRDExMGY5NnB6QzV3WUVkVjJJM3ZOK2I1dTR3UTNjUDRta1dNd2ZCSy8yYzhUZnlNQ0pvM21QemQ0Y0pibm1xUkNwV010R0krQ25jNi9CZ3lnNjdmVHZDRUNmNW5KL01xMXMxbTJxNXIrQjQ2QVI3TmRiWGM3MlpJdEp3cmVyL2JxYnpjbHp3cGVzSUFVMGlLRzFWeVBDMmZxYjZKSDd3SC9GdzdJaVNxU3YydThiaHpyWExoUGpyWDluQW56MUxLbjNEL0Q0Z2ViWTVwMFdWdEE4RDJhNC9mNWdscUZ5RkdUTms3T01BY1l1WHVsYWcrVDJzS1JvQ0F3ekk0RU8xR1BoZnUwNEMyS2xEanN5MTkyVHRQVnhmd0Q3ZlJWcXc4ZkhZWjJNWm9qcjFjL1FhRFhCaDROOHpoMitDL2dTUW9MYWdJTnVTTjVBWkRiVmdxS244dkxxdzNBcFRUTDdsMGM5LzJDYUppV2pmbGNEdmNiZ2VIVTA2VkFqWER3SXV2T0RVTFJUZHNyY1cxWExubjBXdmRpUDVON1Q5QjhVR1BGd3o0MG0xTWk0WjBXMnp3K1RMckp5NHBpTDZObGhGZ2hBZ21ob0pFU056c25DelpTdXljaG1GNlY2ekplOUNGK2FXMzM1S1lHZHFxVGdJMHJlWkoycXhUMXdWRHBoYStnbnlNd3I0TU9XR2FZM0JvdUlZUXFDYkp4RG9CSjJ0cjFVSW9hMnFEZUpaSU9kL3hjRHRhdDh5VEU4MkxQUXJ2Ykg0TGxOQWRWMHgvdWU2SVRMTlJWMzA0TFAwME5UYzFpck81NVFudk9XdnRXVWdnTE9rdWRPMDI3MGMzRjdBTERXR2RUMTFCZUJyTHJsL0lTVTE1TjNnUFVxOWNWaWRTNkhxK3NhZFVxdjl5VWxnejVOZ09KSVZQQ1hnaE5GaVIxa2ZYckl4TnZ5UnJJRU10Q3ZyY3JnVE92TDJsZW1VTGJkVERwc09EckkvSmZzS2ZKcEdhY1hFSStyMTlDaW5mYldxa0h5aXVMVFNsek0zN3dwQWpHUnFNWkR0Z0NETGVBN1JBUUI0eEUzTVN5c1FrU0wzeDVjaFp5YkFhOWRWN2IxZGtwNGZYdktyQW5FQ2JJb3Z0T3dpNEtRV1p0eG5xYVMvVzFYUkJPZUFrY3VkUDRNem9MRjNaK3lkNjdFSk1jSllBN1pMcG91M2NsZWZtQUVTMndtVnQzNDlEM3UrTEI4VnJUUXNqajRzUmVMRkVtVTE4V2tXcjhmOUJNMG5IR1A4eE9UK05mYmkwcGxwZUpCRXZkWkltYmZucjhyMzMrZDA2UHdMQXZncmJHWXVjWTNLejlUYnp3Yk9USTlib2w4RU9HbXc2NFlEd2tWczFucnZ5U0xiZ0FNdHFINUpQWXlteEx6TS9namFHczJ1d1N5NE1aaXFnUE5lczgxWGJWeWVSdlBKU3RqMVNPM21OWDlaNXJhUEFCR2hLWmJ3RlhFcTA2VnJQTnNmRVM0cDczZmhyZ203SDdtOXlXL2h4d0FWeWx6TGJBbTR3Qzg5UUxub1VJVnpoYlp3Qk1Ra1RIalNLZ1JWUEtyblNVUklNeFAyYnkrcHdtY0tXVFF0dWF4cDlOc3NiWmFMMFd5TitIdk1lZHduL1p3bXpVWUt5ZGJiUG5ZeEVTTjJCWXZUald4TWtCUDhnQ3FSVFFTdXdUbkU5WUZpOGJFcFEzRElZenJZR3lCLzBNOHN4UENKYTB6a3hud01wWXhtNjFKazVLcWF2THF4YkNrbjhHQjJlNkhJcngyZVc3V2hoZ2tlcEJ6VGlySlM5S2VLWWY3UTJTckZTZFh6aW5rVEM3VGdQdkxEL1NGUGRseGNrMkxURnFoZkVCNGVxOTJQdncxRW83dzl2NHF2TUZxeDY1TktMSHV3Z2ZUUDBmdlRtMCtHYUl1czlETEwwQmpKd2R6TTB0cUQwMGtsUE5CempHcG9DaTFRd0xka2xVWHRpRG8yM3dPaU9HNUo3eHFxbzk3anRma1kyUjFhaVRkWjd0WWhLYVlQQXlqbnVETmtRRmtFdG1IUWluSmJrNnBDS0ExTTM0SnMyenBHSzJEcnVnWEFkaVdlYXNRRDZnVHpYRGRQWFR3NzJnRjF2Uk50bWl1YUZkWlFkTjBPYy9zQ1NYNFUvRm5pUFBrd3hOenhlYmJodWhXeWkxSmRObC9lNzJNY3h2YTRqcE5qNVZZRkpRSDdPWkV1VXZ2aUR4akdLQzZlMkJpOVh0bHNaalkxSUtxMFNDM0ZwaUJhTjNnSnFPT1IrUlJGYmNROERHL3VVSitheGpyTTczVXRvOWFGRTJyNWc1Nkt4MStDNDRuTVY2cWU3ZzRNTWJwckp4TDR1Q24xdExGa2czUGpaQnBCNnlBV3FqWDByelBoMWQxSk9PQ0tYb3c0SVU0aUlRL00zM211WEhvejhFVndld01GeUhOVEF0NTRhd2xVejZ4R0MwNjBHUlhiSDEzT2puQ3VvbnVOYXRDVzduSlhxbUFlalczaWs4TTNjOUpiK3dlb1QwSklSMUxrQ3MzYlJ4eXBGSVZXNTJVajQ3clBBalpDaFVJaitMWUhaaDRSWkRaZFJDTmNLN25iVlp4NzgvbUM5QWI1OXhXaExxOVZicWV0VHFFdnEwclBXTVJneTR2QXJlN1I4Y2s2QkRSK0owTlQydnkySDNMYmZNWVd4Y212MlRYUTRDQ3I0YWdxRU9FMVBGaW8vQ1pqSjJpWkF0YTBvVE81UFJ5RTk1SnJ0UENZdUg5QlBEaWJXeG03WDEvOG5wTHhWZC9WM2JCamw3VEN2R2VIWDFtaWhKNndGOXl5bSttcU92MGlMcVM2OTM1WFpMYzJ3Ui9VWWExM1dSZHBoVm93OUh1M2g3Y1hubFVtNXB2bVY0NHRMNnN3OHR6endWNm4yZlEvTEY5bnovUDhKSnZYeEdCdzlqWk1HeGF3M2IxZUtHb1JkZTZIOEhPUmxlaFZVaEsrNHY4VnBZbXJYMXlvZ2lONGJocDgrZ2VkeVlXY1dZMGVzS2JQc2JpeDdUM2FyYy92SzhFZEZPK1FPZGRHMGxra2lQMzFFVk5Oek9oMnBPQUttNkV5QmhzLzVnc0k3c0hkVFIxY0l0SkdjN2pkUXVWR0g2aCtPRGJFdFZsWWphSUFhSDNLc0FnODE3cTlSVU5zdzhMSmxaMzY2VTFGRFBYcm8vWGJrbHZnYTF1RFZqb2RjVnBhUTlsYnlPem1MeDlLcmlaQnh4dTk3U2ptMmFiUGdHdjlJSm1PalUyOWdxTEpmbTVtaENpV3FmU2NPSldyVVE3WnUycmxndTJkc3l3Tk9TSVR3SHRYTVh0a1BYS1pJNEpBcU5veVJCUVdqVjBPWVFtVFNwemg0Sys2d0NFMjBZSFlRZUlrYWdVWE5oV2g3bG1wcUFDWmc4VUlneTYxa2UwYzROUk5JTGR1c1MwS1hrYnVvR21LUWs2bUZRUDkvUy84K1YxQmlmOXZwVVd4aktMODYyenNmR08vL2VKbERpTitEVkNxMmtaemRiUHZOTmxYRndxdmVxdnRtM21RQUxxSXpXMnR2bHNZSWEwVW5oUlpiemp4aXNMUm9sOHhzVnBUWUZsc25GbFhmQ2VsdUtMQ2tVb2lOSFM0MDdsTlliN1Z1L0tBbVRyWXZyNnNQSVhRQ0hpK0NZUVRjeU1aUXpHdW53QllEVGNNc1FheEVFSC9WM1R5cTZsUmovakhEQU5KMk5yWnp6QitzWVo3RzFNcnRJUmp0MXNRZmY3c0hxL1hrMEp1SGNUbW4yLzVVMTdCRktrdGV0ZjJ5Y1EwbHNOME0vWEJxQVB4and5OXBId2VMblJCN1hKYWJOY2lSeGRvREFiSVhSdG5Yd0VYSkpjZk1uSVNJaGt2cGZXWW45bzVpTEhWVXQ0czlqcEJJNXYwMng0VmJ2RTQxcHFPY3RaMUZhbGptc2VSLzI2cmxBbmpwNTNxNXlCaDFrQVlBYXNFL3ZsMzNjbHIycnNDSzZ6Y1F5ZmgvTE0vVmZoaVQ5UzViemV4Q2ZodUNBNDU1Mk1OZmZpVXdXOWpvOTdhcEZjU1QrdllGbGswRW9Gc0liSmp2RUpid21YU3NRWG95RXJoZzBWNTh2Y2pFUTRWL1JiMkhRR1AwNjluMlV3ZHc4TGpnSE5iUjlDbGdaY0VUdDNEK2RHN3RIRHRLLzFsaU5xeW8zdjlIU1ZxMkRnU0JTU0xwcGQrQnduQS9WczE4RWxmNUZleDVrYVNDMGF5anI1RDJiYjlzWTdUZm56bjlWSGY2WHkvU2REcnVCUjN2aENYZUU0NU1FeThDY1lGZ1NhRnhqNXE4UGZDSzlYcGFUUmNuQnd6M3pQNENGUnZTTys0ZEoyR054SDFaenh1SGNPNEhYL2ZpQnhtMHVldFh1d2sxRDlPamhnYjIwK05KaVpwbFRYeXJ6NTg4UTh2akJvaTFiOFFSZCtobUliZTkyeUJhaHhtbC96bklmSDA1VzVFZ1ZKWERPYjZUUTdROUliMnpmUWlNZmZVQmRMelBtL0dKYVVzQmsyUVFoQU41RGpKUThmWFV3R3BoUGhiUkdLVzIwYlJHL2krdGE1YWN5ZnBJZUJWRXdPMDcrRVZDc29pMGRuMVp1Rng5Z0lqMTlneWdUTEpsOUM2cGVHMlJuc1pzKzY1OHJ6Vm1nQ2dTRmNTZjBlTlgyblAyR1FOV3kzb0owbW1YZTBzS1NJYXZobnNrUmtwd3VzRkJDV2hZbGREd05RSWE3dlV3NWg1THVvZVU2dVQvT1VVMzFRQXZFYXI0bGIvaFdXVnYxcnlOK1pmSWVsR2lXV1dxZWE0dmVTV1lXUDhXL0U0YzJFS0I1Y0E4aHQ1WHFIM2NrQ2hEdnFOcEQ2S1Y3bC8zZm10STlEL0dCbDF4SVczMUNFSzZGdmhPSDg5UTYvRFNndVJ6cHczN2RXM1JqODZpYTdKakF6S1cweVA4SUQ0VGFXR3J4REhTWWd2eVZCMkhsT2ljb1NCNUFqYkh0amk3b3M5cU9MWUpTRFB3dG45cXdKTllaNzVDMnNSSHZzNUY4RGp4YnJZNHdra0JsWGNsMm5BS2gxOGJaQ1RyWDRMQ2xWUXRQK3JkSVlhQnMrd0tsSXFITHNGVll3TUV2TDJ5M1lYU0g0dndUcm1QQzRCMWNFR1NTSnlnV2RxeEZQbUo3enY3TTUvS0R5S3dlZ1ljOTJxYUl6RWlMekx2dXV1RTZCOFBqN3dDWlo0UUhyUUVDcHNIQTVQa29Va3p1ek9SODQxdjNkR0pVRXowQllxYVN1VFJQSk1WTXh3Wmc3enZpNG5SWlIvU05RMWRncFN3RjQ1QkdxU2pWekQ5dzVKT0pxSkZGTzg2dGVxMnFBUmMycUJIbXEydit6M1AxeVVQSG9rNTdNL0IraFNtMXkwby9OS0ZQa05iYlBrRVkyT05Odjd0SjI0KzhZZktZQjJ1S1JBU2o2ejBCQ3JOWWwrOFhPeS9tZzBKUWNGWGhUZm9NeU13QVA1RUtSNU81QVBxejVCVXRNbmRjTG1hN2sraExHRHM5Wm1jZWtFVGFqdkRMa3E5K2FkTHIzZ3JxeEY4MWNzcDlpMkQ5R2JlNW94QXdqREc5dXpsUmwyNkl3dXpYM28yclRKTUQ2MCtBK2JsTWtUckxpcGRMeVp3NzM5SjBtcjV6R2NzUVNsM0lwNFdueFlwdVdtSHNDaWVKekJPQjNob211MjZjQzdtK1lqQmxKblA3SVoyUmM2bTZSbFZTMzdYNTJBWi8wUmdZd1RHWlRBaEFzLy9SQ0xGb3VQQ2F1dUw3WXpocUZ6Y2JpQVA5VVNPYW4vZERpQmZNcEZ5RmxQSnh3aXJCWVppbnhLOERTMGp5cFNvRnZ2dVFOTWo2czR5eUxjSElZcEd1Z0Z2ZGlJcm9GZGExM09KZ0Z0WGVobFp6QjduS2pmbmF6RThJdFIvemNDNU9sMWpraVR2Z1Z1YzJPK0o3dlFkekFCYTIwdVh4M1piYU5LWXpLREVjejNhWWpTODNuVkhYUzhXb2lHam0rSEszNDAvZnVuVzNaKzFTNE9rV0lLbm1EczVZQ2ZpYWl5SDFqVm1POUVOejB5SXdPRldkdVd6V0RDazhjNENkVTdyS2o5WDJuYitqQWdKRHJaanlHbmY0MFdBSVNEdG1DbE5GeU9ZN09mOGc1TFozNDdhU3FFZDgzREcwZ1g4QmM3WnFDYUF3RlVvWGpFSm5ndEhoNk04UmI3MUlvaWwyU0dqcWxGMnV5dXVrbEprajBqS0FBdHJVcHE4cUJveG9WUVJ2USsyZ3pFWjlESUNPZXVGZkhrWXNkK1k2K3F4d2RVNXNXcVlta2V4LzN5VVhoc2trbEpYM0xjY0RFakZoZXRIV0tyL1pXc2Njam1ZK3c1NlBPZEdGdUhzYkdTZWN5TC9QL3ZMMFVMMWpRVFgvaCtXM3k2cnJqejRHNDlFblZ0SWdEUkJza1dXd2NOaTgzY05CVzVYaFhtR2ltTVh5WStkb010NlFmcFZCQjNNVnN0aE9CZlE0NmliV0p3WDV1WjJCcEJEZXlJZzBPWWVQeU8rY01Ka1dLdWlHWWlLMW41WFQwblQ4SW0ydGhjeUV1VjZjN2NYVXNteEpSWFg3YXppSGV5aDBGOW9KRmJOUExVZTV5bkw3bHRqV0RLMzJqSDZ5bmtGKzBPbmdsMnVQWURSbDZ5Z3BWTkFkNitKMTl0MEovTE1pNG1PMTloZHc2cTkwazBxU3BaKy9TeGxNMFE5VzY1MTJtRlhZRUZnWUNxYlRzSy8wYlBxa0hCQlBtVSs4ckRjWllaVlZiY2dHWjFyZGZId2FxYXd3V0VmeU81SUw0WVNtNXZLVmtpUXI3WnJUZmRaNTFYTndFSDlxdDZ0cEZhYzFOYjZUcHlJV1M4dXJuSDNNMzNFNHdoeWxzM0g5dVhhbkJVczJLaGhZYjFjeHdnZnIvWG8yR2swdWgwSGQyNkx1cWlYVHREcTM1LzVBRlI5OE1EVGFrUFVpVXhBZjZVaU5IVU16Si80WVpZOE1PS0tKMnY3Witqa3FDaFBqM2ZCSzdMUjRLYWNVdGFCZkhJSjdSYit5NmUrQzVKVHdvZkI1eVhlbkNSU01pTzZ2ek1DNVFIa3NXZWxYa09PTmQyeFFmVExXVHNxRkpGWFpLeDE2QXFocktWcml5Yyt2U2lyK0dhN1R3NXVMaGlVZDZqT3ZNeXBhK01CSWM5M0tvRkQyK2RpVlF3ZmFmVFRZMXcvUk82dTBiWitrTHpPSnFTTktUODhPcHd5VmpnWlcwVGVRYUNqM042Q2NueTBqUk1EcVhRWGxXU0l3SkNRS0NjUWFpMnlNM3ZoNTdObk1KSDQzMjJ3RlV5eWIzVCtKaTlZNWJxUWh4cGRUK1YxWGh2ekoxU0FoNmRzdXFLL3VHUGRSdVRaMGkxL3pHT3V1ZE1wdXFJSFBGaEV2anpJbHNUYkx0ZTJqOFk1VkgyR1hKRlpYTjhWWkxCbTA2OHBhRjVINzNTSHd3V1VQUEw1SVJ1aWZrSmhyWjJRRksybTlzRlllZ1FSMW5yR2dic2RUNllldE5hQ2VWZUdTMWN3MjMrOFhYMUR2SXVsTkFaVExnVmRybWRmQnp1azBKN1VURUtkaEk1azhFWXViVFdvV1V3dXg1WVEzejRkQzhkVDczbHE4anFwOWNNU2lFTzgrN2oxNGFFelpiN2xEZVkweXBLR2xqcG1pSmRuS0Y5bUllSW9MS215UHZBVnBDSFlZbE5jZWlrUkl0dTJZYnc1bXpVU0tjMm40b01GMzQ5N2JyWlI2L1NOR0tNT0IxSVM5RlA1VS9iNWJRNVJrOWp4bVdDODh4TnF3VHVlVmZXYS9TdWxnWm0yaW5CMUEzMjNVYzZUanB1UTZocnA2YzludGpkVEREdkZ1WXJCUjR5NlRuWkY4RVhuTE4rUk11YTdrWFhIaGpIbVVkU2N5eW13cFZ5bjRzUlFkNjJwSXRIdFRpL1B3M1VlUjdYWWNqdzh5SWdBekFlbVlITWh3d3FQSlh5MnI1MmVpbmpxWmZQNklPVVRmaENTQkxzeHNVZzdTdVJnTW8yaGR4RmhCR0xxbFBrTHgvQk9oME5UUjNWbC92STZzUGNwQ1V4VDFMTktYTUpTak9DNStFQWdQNk1BT1llbUlxeW1BazUxTlVJRlptbTdRaS9kdHh4Z3MyVThFZ1Q2d1YxMWp2Ymw3S0xXRGFYblI0OUgwenJoQ1YrNWFFekJ1UVo5M1VqdHpnQ3J6QVpvSVJMcHpKZzJpUVZ5cUM3Mkw3VDVsYndvOTRXRjQrQ1R4YTZZOStGcmJGVzBDbUVPTDF2RnhXVXNXR2JTanRHL013MXV3ckU1TUp2eTNhcUZmZ3RhcG9ydXplRnZZSkJoVTZIT2F4RUw2UlAvQjVObFliUXQ4RVIxU0Z0MTNIdmVVQkp4SUlzYnJlTDBkNTUzYTZYck1ydmI2YkQxcUdlWVN3Z2J1UHQ3N1hsb3l4Tm1vWGFucFZTVW1RV2xFa1hsb1dZVGQyV3ZsSGJDTUYxbWdwT3o2SDRBemw0WDRIa1BzR2trOG8yM25zOURKTHZNQkZ4dFNIQ1V5d1E0N3hPTGxkejJEam4xSkdGNjRKbFZwOHk1dHNlQkJXNXg0cE53OSsrWGVYYjRUU0psMXZPY3FKSWllUTJMS0dHZjNqZXVrbmZkR2wzQldBa1pHLzFYaTVHeEdKc1RZZnFGVGVIRzFsNDI3UklYWXNCWEZac2Q0aEJpd1F3RTZOQ2NqajdYY3FEK2pWNkZZNnA2WDJtYmRJdGRBcVk0MEJRcjhkUVQrMU02RFFNU3lnY3pZVEo3SVVwN1pUaXBPNklkQjdXcHRnUFFmazgxYWpINW4waGRUdXVYZ01pbVY3Z2c0Z1FkTWtLQWpDUTF0L1lLbFNCSjlUN1BzWjBmN0oyOFVlV2pMN21hSXdWdWVVUm4xWHlIdW9nYWJHdis5SVNEQnFnaldKQWJ2ZXJKemo4cjh3d014OWs2RkQwWmtaRW82bkJoNFpKUldDVUcydTJYOXFBN2RJeHQ5Mm5UWkwrZTdNd05sRnRuME4yd0U1dmJsNktDTzJFVXMzV2FLSWlHaW5TQ2Roa3k1S0RYdG12VDNRTHZDczM0dDFyM0NOVk15alNGRDE5MVBaQUdJaTBYdUhsTUd3enFTTmtZRjRTM0NNRVRVTjM1Z2xjdVdwU0pkREVzcXRUM2ROcUJnbjgrT3dFWWM2OW5qSTZPbG95N2ZhSkV0VWtWcEZrQnp0S1BLZUFhZU56OEdrei9hZXpEL3hJYmFPK0dKajZxc2g0cGUvVDJicDBtb3VVSUg3ZlhDa0dOdjZ6eGdsMFBaRlVsRHN3YWlGUytUc09aQzRhbWt3S2FITHBjQncxeC9Ncmg2ODNQc2VzQ3Y1TWw5ZFFZRHVwamJpbDZCOGRhcUJLWGI3SmVqRjZOS1prbjVoem82cmVISW14Umd5akRNVUw2QmFyNmtaZHI3K1ZZVVl6WngxZk5ZdUZybGl2VWp4dWc4K2g5eUtBVWNyUllYMXl3VzBpbzZMQjdteFJSZy8wZjdubnNjQzJkM0tFdnVFRXA4dXhOd2g2d2N1K0ZlM0wwS1E5cXNKUU82NElrUVFxU1VBTHdsT3hMdGVUeVVzY0VjdTUycEF4WndjZ0RrNVpyVG9WNHJ6TTNMVEo3aXE4Znd5LzZBTVNsSGtLaDhCYkRVM3k4bVZ1czZjRTRSQ3BzZFZZVG4vQUR0ZFhzbEo1TDVvT0R1VjFSdGliVDhSYzQ2YXZWbVBHQmgxRzVjckFlbTRqc3FJbnZ1eEt3bU56TTJSQ3VDbmxPK0JqUGRZai9VNndIek5KakRKelRHbUhtV25uTlZySkJxOXhkd3k5Q0NBRjlkazVKbFRlWkZwNmoraTB1T1RVbDJqdmJ2RzdYSE40cVhsRHNFRkh4bjY3VXlOZUYzUVFUWnU3L0g3WWloSUJzaE5wdHI5Rm81UFV3cTZJV0E5dmgwWTNSOTVOMDNadUxWdFhrTnZEditPd0xkTWc2NGp2NUtjRWxhVFdvK2tkVU1IWkd6NlkyRmxScDVWWFVqZHBhSmY5RFB5QVJxN3dNZzJBODVNRHNVZ2JtdmNHRk1tQkRQOWZKSGhqcUI3VkpqTy9NQ1FPTlBlOGhsQnRYL0lKcFRXOGhCRFJyOHlBRUtqSUcxZm9OT3JLZm5MYTFaRHltd3lMWDdwVlV4V0RaVE42RytweGRXUHlVK2dkTkN1aEpxbkppOG8yYXVrTk1lbUVPMVQxNGtiL1VRcGNrUmkxbFd1anNvaUNXcVA5TVc0amUwblpWNnhoZ0JlNkJTanU0ZW51c0g5Q1FZWlhLZ0JUVVVQZmM0TWRSdDlmOWRqaWdxVDdWUjBKR3hXVWNLcUYxZG9mL2VtUCtaZ21ibzVrUE5id29SZnpQcUIrbzczZERiU3JxTDJRU2ZwMFBFaE1EMkxmVzdOOFlIT283a2x1blZ5VlZHYzdLZnE4N2h4MlZBb1JpNW5qd3VCWE1KQkZoL0lydlh0T2pkUklWTThick9FSTVYNnI4S2lPQTRWK3NjUFA3d0toNHBPalE0YURTbWRDYUtHeUNnM2xsWm9aVVM5eUp3NHhkeWxoZXA0THNPL3p6cGpkVlJuK0lIbGR4R0JRdzB4MXpTMGdVeHVyY1pjTXFMMW54WXlYK3BaWDdkZmE0clg0c3IzZ0tTS1VTRHNoK0NxSlNxbHN4bGRjZmhTSlJNWUJjdUtZa3BVeThkbm9KZERLVDV1QXNLV0lmaEdhdnVxTXhGckYyd25ySUl0TzRDL1ZPMEtQSUpWRkI1VE1ITmlrQWFXZmd5bWxXaFVMd3JERXIra3g3YXhaZ1pCTVdzcHN5bUh2ejRnRHYvZkZJTGgzTGE0TlhwZ04xZ1dGMExwSWVXVWpvMElOVXJMTHRUbVpMU2wyanpXRUdUR0xTTVpJSjlPUW9FcXFmTjlab21tRjFQQVdFUGV2WDVIKzFiSTIzV3hacXNDY2Y3UXpTSENNZmdpNGZvcG5tRGIrd3NxVTJOT1pCdS9lUGdXMWxlTm1mYWRnK3FwK3VKUlo3WjQ0blpnRWhpQm12TjYzd1FiaE9wbGQzZHpTbGxCZDlkeFlUNlVHRktrbmNLR2hBWEJOVEZCWlJFcEhieWdRaWR5bGF2d05NaWRBdHF6U3JiNWJLRit3UG5YNVZ0Y2E0cGkrMksyZmRlbWpBUjR0dEM5K0V4K3A0aDFSV2FEc2tmbyt0YVFpOC9RK1pPbCtGdU5IbkRmMjlLM09iRlpqaTNQeEM1a3B0RnVkcytOWEg1WTU4bnJJN0JTMnFaeGR0M2NoR3FCcW93NXo4MDc4VDFHclpRbVl1VXd1NFU1Q1BrbVF2Vnk1UGtmY1NUOVJLaWZEK08wTGl2NzBTZW9pSXpJSE5qYmFvNWlwUlAvUnNGZjVQMzk1M2cxY3BWNStmMlRjQnlJcUFZc3RDM2hpdVFmbkd5TElRdHFiYXIzQ3ZYRC8rbXJEQnduZVg3UmtCTmt3L0IzejM1djJNc1E0TDNkaHpHQ0NRM1ZpeG1hM0VvWXk3dmVZdmdNRGVqNXRBdkUzMXhyclBKTG9kUlJQYUZoWVFzWUVqUml6Q3N6U3BaSkpQcFlQb29uRjFmUE54eWdBZURQeU4rQlY3bFh6dE1YVy92WW5DMHcveGhvZ3NlL3UwVE51QkdONXgwUytRbHRtcEtyUFVyWUNoZWFpbGw4TzlEMW1BWjUzTlcwa25va1ZQaUg2N24raXdIYnN1T1g3d0xTN3ZLNTVNUDdxNytUVXQ0V1JOUGpxUmI1bk05WlI5NzlYdlFjcjF4eGNyblR0YmpKTzRiRGYyRTVuZzBveGFPcmQ2VzlyQzJvOEQyd1BLMXFYRHU2UGN1dVhBd0UxeU5JUzVVU0pvSjlqSTZYVG5LSmNqVnNZMVpTK2UrTVEvNGpvdHNkdkFlT3FvUWYxUmFEa3ZnTndDUTc0RUZzY21XaC9SK1g4NWJnR1I2WitocWpGTGNRaUh0YklvRlZRdEt0ay9ESCszV0J3dEE5QWlxTC9sK09mbHRSZ0Y2SGdxU09tVjVwOG1rNkxuV2kvWWl2NUFoZ0dxSHM4ZmlhcXVuNmFGU0lINzI4dzRDczlFL0ZiK1R1Qzl1ME5Ldk91WnU3aFZtSk9lRFB6eDgzZEpnd3pTZXdsaFVnVitHLzNvMlQvRU1UcVZzNVZZK2RHVmN3cXFnZlRqMFNOUVZpZGpqYnltQUY0TjhjNWNHb2J1ck92WjArUnZveGE0RURLdCtBNEh4dXBWbGw0S1dwYndkMmdWR3Y0R3l6OGRBZnQvUVNOYWgvSE5zV29UelFrVDVQVWVQNzEyaTkxa2I1VDkrV2YvSWNGV0JsUFhUTFViU2FTU1NPZVB6YjZOQ1BxWFUzWEZPRXBjSnNlNzlaOVFPS1BYbU9kcm02eEc2cUx1TnZJeU1pVnJYRkFNOUdWbTM3VjJpczFXdytXNStIWlErc1pXM2FERmpDT0o2ZUpBNXRoTGg4bmJUZC9JRzJDWE9rTXltakhabmlvK09qMW9hVGRPNEorZGR5Rks2MCtwQm5ESFJpWExNcjlyWVE0OUVGN1J4Y1NwWURaTDFqWTBxdWkzc3YxUVV3WnlKREhGYlB1N1BpK1BhSnN5NDRJdEN2SDdsYlJnVlpBWWRyeC9PcGl0L05tQzlLL0xpQmpvekxCSnZpV0lRYmFxQUpRNWl0KzJjdVQrc3hVQjYyWXphQW10YVNpZFBmZ1c5eHQrZmJqWUhzRnhaMG50eGYzbjd5a283bUhmZmFKMm9WRUZxckRvNTY5NlpyRkkxTXZOZGNRdHBYbHplWWRJT2FQVk0wTjJ0NFZkMXJ5NzgxbjZqVGRHOW51eDhsSEM1RnpSTWhQK3c5MTNHOUYwWWNEU0cxUEEvQ21jTW4rTGtyYW1SMDRlV2NCMk1HdFhabnZHSVFPa1ZSMnFtSTh6QTRSZlY4UkluWTNCTHF3UTcrVFp4NkI0eWNqM3pOME1KVzRlS2k1M09WdWNndU1TNGdOY1RRWjZFRVVrcld3SlltR2F3SWhNaWFZZTBNaXZxaXJkV0ZCSml2Y1NWY2ZsZW1CVldudUVSa2w5UHFiY05WWWpRYjhDR0lJQjJRVVFFYUI0elVtNysrZENjUFlTcVJpM1l2cTdvczlXQjgrYVUyQ0h5L0ovNmFFTVd1ZGF1VUtFcXI0TGZwejBCVEg0dkJNU0N1NzQ3QXEyb1VvL2oxTmJaVElFdFhER2lubTVmQWE4UVpML2NoenZXNlNOMGdPTDlhWGtxdWtNV0t2VE1QWDEwajR0UzhORmVSeVpSRHo4T1BkWldrTmlBWVMrYWtQSjVER2NFMk1raGk0dVVCc1pvaVVjczFLd1ZScTZBdWFyeGZhMnFjMXV4SW80QWMxLzRGZzhmcmE2djIyOU1iZjJDcm1qRFFCcXRlRERvNnpIMTN0cnd1bFlrZ3ErU3oybFNKelFWdmZMVlF2Z01tNjA2MHlVWnlrRmprZFhJclM1SXNvZFROY2Q1bENnc0Zobit4SmxMSjV4VEVYeE8wNzlCMUFXRk1Xa0J3QWh3dDlvUEFaZUhRUW5qSmhWblJ6SFpnTmdpcll3SkhTSU9wS05wUStYdEJXZGF1Z3B0K2thWTBNbkkwMGlka3k5cnBjd0VaQVRRWkxjZHpKVHhTd09EaXhIeTZUTUhzQUhzTXQvVWJHZkE4RWtVbWR3a3g5cllOS2tJR0VEQmlIbHA4Qkp1L0puN0xCUlhMcUlTbk5uUjdWSHQzbGNwVWt6TlFGc0cxQkI5NlZodFVINFM2TytYeHZSWWRpVmhSWUNHYm9NTkdPdE82dXZsbmgyK1JBMnVCT3dNOFNUaXRKb3lodmhycnVRcmNDZjIzcXBGSzd6QklMcStvNlluL3R6bGtsUmF5c1RwTCtYNWE5RjlQNWdtSGV6RGt6bnZ5SVdRNGFSaDNHWmhzY1V6RDZlM0tkcGhLT1NnUWhiN28yWWh1YlZwL3FHcUNmalpQYXpsNzZwUXRZTExSNUdsbmUvdUo0YWsrKys3VUlra3pUejgydUtLbE1qaitnY3U1RVFPUnRtWllTV05Wa2lnUzJsckl1eHUxM0p1YW4vSm9XQzJWRWVaemU2SVBIQ2E2SUlaa214U2hWSC9vdUhVS0FXMG5VR1VSVzFNblM4eU9PSW9lOFlUSWZJSjVRU2FJaFdqSXhqOEhGVlVOb1MxZ3dzU1o5dzJySTBKUFJ5VTZLaGxHNm1YZSt0Znp5NWVjV0IrazlCa0xDYmI5TGIwMnVCU3c2OXRwUGZhVXU5MWhRd2dheHVUQ096U2h6TThsdFF4bTZQU29FNTlQNVBEdnkwZ3EwQWV0VEJCWjFZMGRSbEwxdlpXamtNc0gzWmJ3UGdiMHBOdjJPM1RJdmtkRnpDaTh5UDUyUXV0bUlxakJONDc1ZUFMMjN4OGhYSFB3dVg3MUpZajdkY0F6U0FpMC83ckFwdERHaVVQekM0YmluM0ZlUmlpTnM3RkxiTUZaZzc1QUlWSmVaVzc2UFh0Ymo1QzdlbmlwTysyRFVPNVhFSXJVWGxTK0RHSEJ3RUFYNjNkaWtzbjlsWEp1cks5aTMvYmxMVnJURVNDR2V4bGZOWmZteE01MnZUeW9va3QxZnQ2eUxqNnFWNUZnY0NYZVpsWjBsSisyS1MwcFV4Z1ltcWIyNUI5WmhYVmNHRGVkSjZxZ0psSjJncDkza1EwU1UzUUo1YzQwM1NqbXYvRld6TFNtbXI3dTkwTGhpN3hTMHVPZkhNd1QxWlNlQk53blpjWHZoYTFVV01kMmVzQy9DOUVlRHI1UmNlV3dySlFyU2hPU0pBZFU3NlZYOHlha0IxaFo5TjVicnN0cDFPdUxsZGdmeVlVT256eXNoQ0ViMGZaY1NrK3ZRZzlITk1qRHJobjZvQ0xNNUF0aU9nQ29tWGZhSXpyU1ExQjhyVXVuU1RKV0NpY0pPL0sxMjNMYkNnakZRdi9yZ21IQTAycFNZU0FhcWNrbUVhQXdWRDBWVUFKZ3J3RmRDZWxISmJUZVkvQ205WWFYblM4ZEZ6dTN1dU96UkpEQ01ZVzlrb1B5ckJCZ0R6TEFoZUxXRlFPYTljb3Z3cWt5SU1QNnR6VXJBclZlRTVLNURrblZHNDJsd21EYjBTRnFBNDQ4TjAzTmJOVU1EZGZRTXZ5WWt5OFVhVU5XTHRhdjk3REllTGl5TDJqT2NqQzlBT2Y3RU5rME4wczE1dUFuRkwySitscjZCWjk2cktESEJjd0RhSlhVc3FhU1IwZDBRS3c1N1k4QU1OYWpmdlhDMlQwYVNYQ3pYMm5iSko1VkVhQVpMWW5QaHFnNE1yeDRndFJXSWdaMDN0eElnWGU1YkJHTnR3eGpKdU40S1hkRmROd2ttS0w2eXVwSjhMRERuVlN1a3RnY1lGaVBqL1lNRENxR1ZseTJ2VmZ3NmU3UjBtbWxmdTBJN202RlFWUDJucGkwNXFCOSt2RUc2ekxhVDllbTd0M0dMK2VsVHBqZXFETCtGdmtwdVd1MUtZTnNoT3owZzJLSi9ZNWlTWEpGWnkyWWkrd1pBMVBMcEN5UnFwVDB3UGRReElkN1F5L1E4ZW1aOUlKVGRzRzZ5bHoxWXJpZnJ2ZTd3eFRqUmFsT3pvVjNDdXFMREJDWWViRFVOaXY1UW5Nam5BU2FzL1Vac05QUXZFdVg2YmZJVXJYZ0ZiV25FZzcyTWZzM0tZS1F2S0czUEVCVGJEeU5UcUxWcytmS2syeE5DS2RhcTlNcGVXWjZiYkNqblNWc2dHeXVPZXFhdURTa0hqbWxhbUhXYzhvRkF2bTVnRnVZZHY3MUhPQUx0RW90NjVJNHgrZXltSEtLVGRZTVViUzhKRncrb2h3WFdVNWNudUVkNm9nMEZ4SGpRYlpGQ00zb0VMT3hUZDFTRS9zalpXaHhQdXlwSU94SGhSQVFXdjZxWW1oZVY4TEtQc1pkOVo4QUoxTXE5bmg0ZEV1OERoZGRrTWJRb3RxeHVUUm9KV0c4NXZJMjFNVFN3Q09vN1B0MGROQ2NtdmJYUUxRajEzNzJhSEtXUGRNU0xReFAxaXFBdzlZdENiT2VOek5XR2JBOEpPWWRMQ2pqM0pPWVhLcU4xeUlGNytMMS9DOEVsTk02T0ZzSnZzYmM5VHBES3daVzdkQ1J3OUhFK1FTVElxakZmM21MdTlaK05PZlRObElUWStIK2ZJY2RCcjhlRlVUVlFMaEZxMTE0Zm9yVlVadU9DdXh3RkhDb1M1RzBvSXZ6aEpla3RLVjUwRllLQk4zLzVBVHJpczZLcVBETjRqYXFxWVZUNDNtSitqRDg4dUROZGx0VmluY24xMzRyUG9vQ1lzWnoyOHpoK1A4ZkQ2Q3ZtTk5zTmpBSE16UUJ0c05NVUo4dGxRZnhlVnVoMEFOajJOc2xjek9TejdWcFZnOERZSm85alFZdzFZNGcrS2E5K0phdUJSeHVNVlAzSnlNalZyOFAweG1XOVJETkFDQlZvWkFKblE0M0xBNmtSelh0NGNOM0orTENFVEFyZVM1T3lQVDJvendFTnMwYjgwdGNTZnQ3Wkx3bVM5elVKMXhFdWdiRmRmSUxRYXl5N1lrV0l5dm1PWExtSWRYeFpCczIwZTI2a1FsUHFzL3pScW0wMG1IdDZNeWRaOUh1LytOZncvTkt0UlFCM29FOWU2K2RkQUV1SmJLZFdWdERwMzhVaVlITWtZTW8yc1ZncDlHVVgzSFFNL2hYLzNjZy9CcjI3UndkWlE3Y1ZvRkNPQnpnTTI5MlZsM3NmcFlKb0loamF0SGc2c2cxeTFTaGNORDhtdkRRbmR6cXZNQ2xsNURuVjJpVlFVUWs4S0ZpOUVwNDJ5aE9NdUttOTNrckNqVktEUlNla0lrWTg4elNjLzNuOXRCaDNEcjJuZ205VlZCN1RHNm5TUUR6Z29TUlZtVk5LdE4rY2wxZnFCT1g4TDFNVEdOcU1zN2JObncwY2xHSzA1Z2ZCTTk4MzRnUGNTZm5qNEhqS1VMV2JTblk4TVlKNytmaFNXcFNjZXQ2Q2VVaGticmFyRDM3cVNNQzVlUXBsdE9ubEUxeVlrdk51OC9DcXlFMVZORitWbzgzRnAwaE5DWHRiVnZzYnc4SFZORFVwR0duUDh4ekYxZ1lUV1JsZkpTZk01YnYyTnRRT0JSWjlYMUZzcEdJcVVxNXM2THBucG9FYThlTE9ocWtXUkRmak9ibjhHQ3dBeW5oK1RJcmNkUUtBU2JUOXNXRU52SWFuM1RDSVViMXgxWGd0b01FVkEzU0N2SVNLZUZ3bU9HbFdpMVY4NEJ5NEJhQUkyVTU4YmdjbGNza05RVTRycUpFM0ZHUDIzUjBNMnMrSnhlQS9xQjEzc3dlNWRZbVU5bWgzQWsxQnEzczZjUFR2L0kyTXJtZGpzT1B6MVpOb2UxR2ViS2xRM1NFcVJGL1MzdE1mM2g5YiswRGw1a0FWd2cyUVBjTG1JTUdRMEhndlZ2VVlYU2RHQTJYN3ZSTHU0Zi95UitCd2t2eUdjcnRNUjcwVXlsK0pDSXBsbGN5b1FvSlZGUG9JT1Fkc0wwSmRnaU9iWUs2Q1lKT0lPYStqUFZRQXVneXkwalh0YjlKbmQvRlNQTlpRbXZicjB4ak5tRElONm1RazlXTGV3YTJGOVVaeFRqODF0b0FCRVVmd3prbUhVWGx1amQrb1lleUxMT3NlOXpIczVlR3ZWczlQNzNOMEQ1VkdxS2pJTk1uUDBsMmxFRkh2ZG96MlRYVGlFVlZVanVMWE8rRmtlaGh2QXR3RDFib3RnR0xlSTZENkxHdXNwQ2hkaTdiSGlUSDRDM0lldXZCaEFFQ1lOOXp2SllSNXVibkVnUGNVNmVMNEdNY3IwRThHY2hXYWVRbkxxTTJUUTNsZFJlOEZva2l1Z2ZyWCt4MWtiaXVhRWVHYi9GVmpPZkprd2FCcHE2U3NUSXE0VDBMY3ZJdGFmTS8zenRXT2pRZm9VSzAxNENiQTBUQlRZdlAzVkRQQjM4bXUwNUFRSGZ0M2NtQmU3M1JlenM4Y0pscFJCaEU4Qm1hY1Z1bzhmaTloQkdLNmFqYUpiUTFjT3ZjSzZqOTJVVit3cFFLYjRkQnluRFRBSnBVNVRwQlVSZzFTeVpDeTdWWi9iTGkyMHc4K1dydlFuQTlNbVZ6emR5VExxWkcyWUlLT2lBTHVOdnhTUXNWekRubjN1TGZPa0JhYnJtdUVCSWRDMGtCT0hmY3ZJQ3VycDd6MUNjTDBSTE91STdkNUlIUXI3eEtUbVcvT1ZocUJYMVpGWmNKdUwxSTl6bnlEZ1NPa24rOVVIc3JQOXp6d1daNFJxQUdtRGJ4Q3RHRzZ4WXJDdlFFMWQxK3VZYU1KQ0xpRXlUWlNxSHIzdzJrUnViaHdpN2FTd1dVQ2VJaFdBUHJEWnMvdXZoZXhxc2lONXpVbFBpYWd3T0hKenh0cmJKZ3B6NmFjWjMzK2E0S1lSeS9hNGVLNDJyWFJwUHRQTzVaK0F5MUFBYkI1dExTcVBmNE9vMk9nRnJPVWt2Qld5VVpLN2xpUEdINm4waElpY29MUFR1K1BuSjRDNmNmc1owRjlHdTJSN3N5dEt5eldFUTd4Ti93QlFoT3BHNlFBMXNQbStEejgyYVluTng4TThoSVhsNCt6Q3RWNXZ1ODhSRWdCelpaK2ZUeldHTWM3UllWeWtOc1JqVHFXeFI2UCtLVVAzWHlFL25EQ2U2ZWtYUTg4NmJiTGlQZTlUZWZxdDQ2TVUwcmszNkJRcm8zcHlyTjRCZUpaTGx4blNYYWYzWXpaT2g2R3BiMThtZlBQY1lBN24weS9sZjNIbGpBZjhCWXNLOS9kK1NOODFGelN0K1l0RkV3MnNyUHVNZXVITXQrSGRvdktsaTRobTFGeWd1L3I3NWMyQWN2TE9OT1hNL0tvaW9SYjB2dXFDREV5MXVtUnhzSmZpOU95NEVBd1hNZ2ZuYXhqa1FiMFdmejB5WFBub0tVSDArSUdPekd4ZUxITFloT3REa0pRTXEvMkZRSjRRdVBuRzBndTZIU2p2SGNKYW5lck1mREpVYlAxbjU0YkhsZ0V5U2E5ZE54bVV6TVdWMC96U3grMy9ESFVpczBzcmhNYjV2NUxIU3Erdmw4UXVhbVFQeDBrdnhYS3ByOXlwa1Z5VThWUmNwZmpBVnpCM0FNa3kzNGM5K1NrNEErVmtUNlBEYlhDSklVdkgzUkduSFB4amRqdDBJdzNvbHg2dUVOS2tsZmdNdU9OSkV2SXltRGhFcWx0SnZwQjJ1bWZzVVl5Kzh0K2Jva3hXOElQSnRSRllCdXNLMjVORktIcE5xdXRhVlF6dFFSWm5idEVhenQwYVoxbUZZMjZXNlQxQVovaytobi8ycEZjN2lrU2VzK2Zoc2dCZVhHa0ZkQVFlOEN6QnUwZnlIWXBXSWFaWXJYVlNJczN5V2lNY0dIZ0I4YVhEeU9EVlc5VTJ2YVhvY0RJa1FzUEpVeUlNU1lmWHZtd1JaUDc1Qm1Xd1hNdDA3dmlGM29xT3FPNlA3U1ZGKzFLOFU1eWNQaXAxN2ZZdW5VSHA0Z2RPNSt5RGpEZjJUcW9MRUpIWTZ2UFRZWnNOanBRR1FHTXZYTnJma0V6NmxTSnBFUGtiN1RNV1dPWFdVamIrbHhjSTF1MHJCRXFYMmE1M0kwNkcvMVdwOXN5YThtVWlyNDgwQW1iV1VUTEhqWFpOSXNMNXpMWkg3M3V3bHJsS1lMMEQ0L3RTWVhHa0psbWRZMnZ1N1d5SFl4T1dMSmt2dzFHWm5lZi9iOUJNbk1VUWlNYkQ4djdkSFNNZHVMYTM5QkdjT0tocWNwdHpUWXNjQW9XMlRtMWQza3pXN29lMW82NzM4TTh2SnBBOTMybmwzelpkZHEyVGUrM1VGaEU2R0xndGNNUnQxL1I4NEJrcDErWXQ0UlBFM0Jibml0L0t2aGVkLzJwTWNzMnlmSFN3NGNNQlNyK0dLREJCcGV2SStqTzVyeXN4TFZEckRjZ3lxTHpwTGJ5S3RCOStzcE0rK1NMY0F2RUZ6QVp3VHNNNU41QVhld1RIeG1yMXM4MWFHVHZ5bDh6Snpna1pqQlZ0NmRtWkJlMUY3d0JGcUI2aTI1cmZ3Q3g4Z056czV5Ry9FYUw4UlBVZ05GSi9Jbit0MWlVUHordENza3lKdFl6TzNvQUdJSlRXdDBZN3dJVUEzMGFoYVY5TS9zY1IwZkNSZEdOZ2JxV2xSdVlLT01nS1BQQ2hucVJUQkRUdXpVb2FWQldHTWtzcXI1bHJzU1MzSVc1K3JZYU5zTUdZdHZrUHU4MnIzY3E0WUREck1yWU4vSStJU0gxVUVudlZDQitzSWZ2NzRZU1pXbnlVdkw3b1ZOSjNWV2xBMlBCa01BeHM3cVJWNjJXTEZlaGpqazhWcFdYMHhnWWY5UTBsWE00OU55WlRtY3VTcko1bUwvejd4Z3N4cTAxdWYySVpxLzNEZkpidlpBeDlGbFNFSHlwQVlYd2dZSDJ4a1hmNVF6cDJQb205UytET0k1WHdsc0hXYVZzd1h4a3NhZVUvaURpVmt4bmRWVHNiWUdleE5vMG1yRFJyVmFWMzRCQkNxWGcrMlRxeC8xNEt6TmtsTmk1M2VJeHVhZ09UWnZleS9aVGpOZFFwNVZTeURMMU80RVR5TDNPcHc4citJWi9BNE9aNGJxdytpc3VDNzJBTUZBRmgvQkZ5ZCtVMk90K2tWV1E1ekJ6VnVnMEs5MkNMa0JzazBEbkQzWWFSeTJaclpwUm9QRTBMWjhvc1YvaUVZTmR6VytFV1BvalJReWRiOU41SXk5VGl1UnF2Nk5PNEtWazFnUm1TT2s4V3JnMWZ1eEdadVhidzl3UHpVbkZmRGtjRXg5dktxZzRuQkNUSW5TWEozZkE0ZjB3c3VsQTMvMW50a3hUYU1CTWtoWndLTmdtRlhCMTg5Z3JpZmNxNGMwZDlMenpNYjZ0dmlwNEhoRk9sM3h5RHRVT3NZL3plMlRqZDRtT0dKWmVtNktyZFZYSFhFMlRmbEYvem9EQW0vbU5tS0lnUGU3YzRzMnovZmRCK25DdWxxY2tGTDhNSUg2aHVONWh0Q1l0TlFTZzZqZE4rNS9FTGFzd2JOelo4aEYwbTZTdjVWMENkcTR1cUlUUWg0Z2dENjV6VkhFQU1JMW9XcExoZmkvOE1LOEZLbXBMdDdaMldiWFRVSVpYMGwydXA0anJ2TDRXYjZDZEMvS1VkTnJsRGtmS1N3NXVGY1ZkcUpuYWFJdTFTUjRTbzVXWEM4SERTWC9UVVlCOUw4cU85WHJKK1pvaFR3RGZiREZOaUFtdXVaVEIzV29ud2V6WkpNOHFnbm1qTG94Q1FDV29nOW1ZL0hSUFYvbzM5VTFKakNMYWZNTWJyeFRvY2NuQ2U4Nngzbml5dDA5Ti9oNjZYZWRtRDJsWTRJRHlkUjcxNDRnc1cyQ2daWHoxSlJUZjRTdGZ3ZHRwMkt0WFBwdmp6UWlFNUhQS0RVOXY2TTdJTFV1QUtxMWd4NmZBZGxnU3JSc1JFMHF6WjAvWDdzQlpaSUtpOG96TzE5K1ZmK1ZXRTd1c2IrS3lOam1BOGVJZGZVV1ZQc2dreHhsTU5MSjVxZmJFYlN1NUxYeE5RWjVEVGh4OG1ndTJTbGw4MVRaaHF2dzlQOGVLUjBqa04vUzdSdmgxN1BGNThvUk9qSHFOdEpZcDVmM3JvQU1IeVk2bG5lQ3ZZZXJBYjY4MjlEcTFlZVJzUEJJWFZJbTVaZmV4ZGJzRWpLUzNScVovZWozL2xCbzNCanZCeDR2WlB3WnJsdCtDRFRKblNpWExzVFlEbHVNL3ZrZjE1L2VxZkZIa1cyMVlMVDRzYW4zWnBkSFM1RHBzZklVTS9OV21kWWRKY1gyRng4b01ob1h0VHdHWDFLcUxNUEtQN1BETkdxaUxvWkV2MjFDK0VpRnh6aUVPQk9KZjMyT05QbmdiL01FcE1LakRFZ1hUbzNDZTBzV2lxNjVWQlRtUjY0YlB4SElHb2g5ZnYxYWQ4bGFmWkdqNHJWaGZjQkdiRVgwQzYxQ1NIdE1XbGxrTTRvOHhPS3NPQ0MwUEZVaG9YOEFwV2NpSjdoNjhPMURQamMwbWI3NVBEQnVZa2JFak1RMllvMXNqNjdOdU54TTh5NnJ5ai96eTBnT0hVMXdkN0lEY3dIdjduSUVqN0U1eGQwTzdhMm9nV3ZRRU9kamJPMDMvR25OdUpUTThJMVl5S05vcWw5T0tVQnBnUVp5OHpUaDM2aWZZZDJSRGlKRWZXKzUybnNWTXBLTkJkcllOaWRYMFgzTXpKSmxwNHVjdjJvWWRhTkZiVHNIM2w1WGxleWVEMmxyK2NCcFBIQW1VL1BVOFdTQWNET3QvZ1IzZDBhS3pFRmZIRC90c3htL2ZTSk5KdzB3bnNtWjEwU2lROWlHbG5BZklXUjBsaEZDR20rRjhuV0JoTEljZEZWMTJaZllGUWdjY2grTlNaYnVpM3lKODl2eHVaV0tXcnd3NkEvaE1vU1dsVzRHdzFOeXhFeXVKQWp1OG9TU1Vzd0hKTmxyRkFPMG1tcHg2Nmd1K1o2cDR4N3JxOTRPcUQ2Sll6SURhSVhQc2pDUDhyTjNqOE5kSkIrY0JYWjlDdlViNDZ3VEFSM1I0UVdqYjI1QUlNeTdtd0RjZEUxcDkrcmVKbjFDY0FMYk55N1B4eGk5cVJSVnBSSTNyTFRLR0VtLzlrUTdSckNWb0dmOWhKa1d1bVhNTDloTDB2bnhwTTkzbmliMlRPV3BUL1U5ZUcrUXh0ZHdOVm5NSHA3bzhrMmR0WnBsbFoxWkJTb294ZzhUSDZKZXFST2s2NGpNZzN0RDFZYVNrbXRZQ2RuaVVycGRtaStQRmk3dUpWR2dVRzZybTNYZ2xNT3ZJYmJzZ3VadmhSSnNRa1BONjlWc3VQRms3akdLanMxWlNhUnJkOThtcDFPbzJ6M0FzQjZxbW1tTCsyaGx2WGFFcXVKSWhpOXgwS0ZBMm5mdHRXL2o3QnJnN3R3MG43bUZqMm1mVE4yNzFtaUtUSCtIU0pvRkxMdnd6WXRqTEdDaXhuWTZZOFdma2VQYzZ2SEw1VUZFRkVXR1pCcHZCWE0zeXBlMkJrSVRwRlRJSFkyRjBPbnFqZ2Z6YnVOQXhIQ05OV3JkRDA1aHhOa2xGMitkZEc3cE1CYllIYThqZUdZU25sZGVPRnRqOG4xYmhidVJVYmRtckROM2VWQnoxcmpPeDZsaU51a21lYXJRN1RKeGNvUjB4dXVaSVNNUk8rK1N1SFRYYktnU1VVYUo2OUFEQThoOWFTOHg5NXVtQkl5UklRKzBJVkZHWnpyY3plMjU0Q2VqMVRYMjJKMU9rSGR5Q0szQktYZ2lSM0dqaGVYdlppdDFmOVZOcUtYUjJvcWMyRExva0ZqUXZoVjlKVFl4aUQyckZOSUp5eWdWMVBFSjFLenNBbURZcFVSUzE3ZmlPV3M0VllJb0VIVUwxbS93amRHbTFZL3hzL0hEZCtoOUVSbi92OXlsQjc1Zm01SUFwaDViRlZyWWluTkoveGQwMHgxUWVCUk5PSkwvR1RqVkpicmNJR2lWaVA1ZlpQYTVraWNPUW1XNEVLNncxUC96YjFMbDc5dlIyQ0VSdVZxTHQ0cnJOSzFNQmxRUUgwUm9VUHpUOWN6eWlHalQ3ZERxbTN5d2xSQlV0SFphdDdzWWFSTlJNRTJyZ1Z3V2pTeFJtRFlMVTJkanJ1QlMzUGlCeGE4ZlNTdmlDY2hMRWhkNGxZa3d1NFpQVkhxRnVqQVZzdmNlZXFNdDZmNysybUducHI3T0pTRTNmR2FrUkRTVGViRGIrazg1VHcyeUtWeFFocnM3eWdIeWtadEpSdEZyOFBEUFd6Y1pscXMveStIV0xiNVpCRjZoeXREd3lacWZXVVV0Z1dJamdTN0VpL0NDM29Fb3BYWGgwbDU4MElyM1BZcTNhY2Q1MkpxeGV3eXBuZVNBaVU1bisrbkpYRThFWlpKNklIUXRGSjF5cG5SdzNabmJIY3VVazVXeXRFOHQyN2xKV201bGFnMStIQStGR3l0UjMzb1NPMVN5UTVhY2dOdTFjaDlzaGJ5SnpnOHhtZ3VrSjRoTCtsRW1Ua25GbEZZS0VCSjF0MitqaThlMy9McU9sZkhvOVRRODArdUFlL2ZIcGl4aVpHZlMza291bngzMWdHeWZaYnpsOGQ5dGE1NVNjd3pWQlJ4RmNPRFNWbk8yV1NYeE9xUTJnTnIxWFFZemVSRE05aGY1S1UwWHVyNjVIdms1blF6WlFlWHV3dmRsb3B1M1l0YldZRldvYU5hUSsrbkFrYnVtMWdFOERWUWUvQXRTM2F2emRTSEdCUUh6UUZhYzc4UFkxWDdHc0hCT240d1hFbFVyUG85MzQyN01LQnNPaUhBZkFTUTVOYlJWS2l4U0lNc2wvM003dGhjQTlxRnE4SExUMVNQN2l2YWhLbXFicGl4eE5HM043NGRVWGgwRDdvZWdqS2dqNWcwbkVtT1BOOXhXNkhLQys4bnBBWmMyU01VSSs4NU5aeWpWeXNQajdNUVE5dW1nRFh2Z0NsZVVuclhMN3dCblBOZ3ZGNkJJVXBJbUZ6NGxFWi9mOUdySE9HSy84NlZldlV4bFIrVkI0aFRzQkplRFRweXVLazlRL3QwaG03djBNWlN1bHgwWERuRzBTQm51RXUrWEllTmlkRFJXV0cxU016N1JkSFYyUW90TXpYYkFqUEdRU2dpNjJ1YmVnblpYbXArYW9aRVIvRU9JRThZL2VVWWp4dE5HWHJVNURsakJZQkJocTFlRDVRamlrWWpOZHRFdFgvWFlaY0NoRHJ6MFVIV1ZEOWhFdE8vZVpvY3o2dFZ2OFppSjRUR29yZzdUWHhaTWQrYWVJamFuQ3ZGRDBSTU54eXlRSlhRZU84dktNVmJkdzBmRXpQRWk4NElxT3RpRUlMTmNZemN5OGhqUlFEakRPSXpKelFnYzlYejFTMnR5WnBSOW1TNkdibkdHQmwvVk5PTitYRmhFSFpFVzJJTXozbk1DTE9ybmdqb0RYOFg3Ty9DZkhTVHhwampJRFNxeSsrLzBvcnU3dW5JbUtmTmlWK3BQWE5xSGU2eXF1bWFOcXBjaDJhUlVyN3g5M2VkZmdDMm9XejVYaHVwN09QMnQ3b1BPU1kzVVVzdEJaUy80Q1RJeGJGTmR0V1VNRmppYmhOQUlEMDI0eEw0cEFaWWJPMXQxSkYwTHNLUmw4dGJQRldSdEhuQ1JFUmF6bzVNTEkzaTNNQ0JGNVNoN1ZCZDJ6N2ZXY3l2RzFQUFZ5MUx3OU51QUJzcDlMNmxiMnRPTExaTkUrczFBKzBXUTBGSURmZXgyK0ROQWpjS1VGSjVJT2I1UUdqUzRJcE1Uc0FHQTVvcmFpdUVlNHkxS3JaM3J5bHJQQkNNK1FvaG1sV3NPVjh3WkNlOFgzV1Q4UFNxQ0VEb3dxWEl1NTNObFZ1aE0rQnExUWVMTzI5R3FzSE5VWndEZkpuNWx6R2FLZFhVU3dNaUlCVTRYeWtOVTVoUkhRS0J4M2VXSlEyYTFxZlg1YXRKYTd0ZjhlRGpwcnR3VnJLT3FkNjZMZnpYdXBLT2U1aklrTW9lQWdCZ1RvZkRSRGlVTXBVQUhNdmtXN0JRaFZhbEh2RnpSVUI0OGhtOUNXVUIxSnIyUWI2M1REVUgyWUhyeFd3TEl1NTh6SnhmanpnVUN4Q2dZQk03ZWxjT2M2MlFhQ1djWG9CcEdPR0FScS9iVHB6eHZUOWs3MkgwU243YnZ5ZWt2aWJrUXE4U1V5U1hqamltWm9XMW5EM1RLU3pzRlFPZ0JoNWh4d3FtZkYrU1hybmJoUXFhamUvWTMyMGRpSUpaVUJyT0tWOGR0Y3FnWUJHUklOTUhSSWZyYUt3UEtQOCtLSFp3V1Z5OVBuQ2lOcFJZa0VZTm1zaUF0SDl2VTZDRzFjamdxalFxL010Mlg1VEttamU1OTB3dHhnT3pFVll5VlVKaGUzSjltNUE3TXNsK1VoTmRrMDc4UFg5VFB3aEpPaGxBV21ZOGI3ZWlIMmR0aDRxMS9xRXJRc2FFZXNGWkpBU042cmRLcnRmbWtiNFhsMDNVWHpTZlhSdmk1NXZZTzFoNk1wUjJSTDgxRm4xQkdiTVpxRkZVdmNrd21va25SN0dZWldObSt6QjU1N3JGUDFEUVZsZ0ZDbFlRNHhLaTNlUGlBMDRodDNqcVhkd1VzNmlGWnVKbGtOZG00WitFRGZ0T0lNVkFKVW03aXdTdkdLcVhXWk9HR0FjSVg5bm1NdmFWcThhRSs1SUN3ZEpJVnpGdVdHZzE4akZOQ3BSNG51WjZkaXdFQlIrd0lNOXJkenBYemJZZVdZVXFoSzMvTGQ3NWRocnFuR2dFejFCM01hNWw0VmV1ajNQeENzMkhWcUdvQzFlU21vMGI5b01LeWJXdzdtWmg0Ukg0ZnE2bk5LRXh2ZFR4QVp4VjJEbFpQWTh2bkhZL0pEV0l4RmNqL0owY3pCejgyVld3eG05REtyeW4wb1BwR250Ulh5NHd6ejV3R3hmdzRldlBCUktrL2RFQmpGK1N0RzZWMFYrZk9PWnlJeHhxWFYrSHhyQ1BVY0ppQ2Q4OURjRVVtblM2YWRrMzFqNzhXL3JRWXRBZDF6Z3RzQkpLWHBkMTV1QzQ3Ulh5SzJyWTU1MnE0VTFwVCtid1o5ZG9id3REeXBndE5QWHBQcjZSR0VJSFZiYm9taHprVjEveExVOURrWWdsdk5NdFdpZ1J1VHUxeVY1TnZIT1Vtenc2UER6UHNDalJlSmdaeTFyZ25EMFd1ZWZCSmc1Unc3TllyVjBlWnpRZWJPWHVPZFlMejFZOU95aUNkVEpMOU9pV216ZCsxeDNvcHJsRXYxbjU2RVVsWE5IcnhJSFphNW1FYlVzaVhHUmhkUzA5ZUNka2RqeHBMb1hyVlZ5UGpvL3BaRTFrQXc3TWhqVHFZUkVrZUhkYkQ1NXNzNkxpSXViWWJqeVF5WTAvaklzdmwrc3lIYXNVNGdwYXpxYi9vSGxJRUlMK0g4WFdHQUZOM1h6L2E5c0MxRkJpcTZxVzdnUTRqMlVETnVnejA4c2kxSXVFZ1VhVkR4ckljMURXQVNEVGNDblhFdXdwVG1aZjBSY3hiTVhld1ZHV3YzWVJEL1UrVy91WEpGM1M1R2pLZDNyN2ZpeTFVQ0N6NHEvTHNkaUNZT3RrK1FKNFErbHZVNEZRcVhYeFFjemZUbUVXYUE1VFlvMmQ2dWl4WktPLzB0aWtHNmkvb05ZbnNZcmhMRTd6NElrUDVxSWhRWU0wek1SQSszZ3Z1V3pHS3pwVHlhRFVPV1BYMmljQ1VTMHZock55NDBqekF0MlQzajR5aVBSUDBBNDF5a3U1bE9ycXQ5ZG4rNGNhbnJXY0RkL2FFN016YjVTY3ZzMkRKRGhmUVlvdWNHcXB4UnZrUXYwN2MyY1ZCNHUxRzNSV1l6elNBbHdSSFN0WWthemRqY3VKdUtwcFpRTEc4QTNDR0Vnay9CVmx0UGJVTys5TWpFYTRJZE1NSTZscmFFL2RjOU1NNVV6NnhTUjJuUVErdzBCWlFEWUJnUGF6cDNPeXZET1N4cyswVXdhMkt2eThWalB3eVQ5TlFNd3VWd3d2Z1RYTWY2aFIxSmw1UVdMU2EySWhHM0FKd3ZsMEVFbkZleTlyYXVleXhjZUtXZHQ1QlRVWjdIN2tsb05TL1lkTHpUUXVyTnNsclI2eWJaY2p0QVVtRDBXV0hwTmJJNEV2MmsvelQ4UzB5QSsxNGRTdWhFcnpsM1VTSTN0U0Myb0VINzZITnVWdlcvcXNxOXo4dE5wOWtwUFRPYnZKR2JxOVJPWGx1SUVocWFobStpeDg2VDY3NFJiMFpPUW1zNk5wa2ZYamZRQnRxbTdDUWhPejZ5dmpRNzdBdUx4SWJVYW5GV0VSSjBobVhEKzFqMktSVGpWby9FUVBFaEpOdFJNN1RmenVQMG81UnMyVlRRNG9QV21WWE1GQVA5QllBc25xai83Ym9pSTIxQVJkYkdwWXRRTXEvQ0RqWHc1ZEF3ZFR3ekZyRHpoME5Fb2VHanVIVWVBckpyZFp6YllmajJXRjFHbjE5UHdlL0h4YmVVTm00SlZERlVHeUtESDFJZk9FZlJGdkxVNnJCSzFCWHY3U2ZGb01ZWFJrWkRjejdKcFJGVmJ1VTZmWGhKY0hHWjhhSWxPTnJJZVhTVjhTSWVZYmNWWmVNZXlHWk5mUjVEbGI1OWFkdTdTclNKS3ZiQmVUQ1hzdlRwMTJpTjFqZUM3V2RzTmNiWHVkUWtaOEhLMG9kVVp1L0tyNEZqT3YyZUFGdkJiaXUrQTZZMlpkSEtXbTdOTGQvVkcxMXRtUGdnVS9zMUVUNGYyTTFOK3l5elprUlp2TERmaVQwSjBTWnh0MkMvRENicSt3Q2N5bTE1elR4VlZqdXR4c0RWOFY4UGdzdDhJZ1JDTEEwMnpsSm12ZEwzL2hnbmtXS29SNEd4dEMxcityQnhBQXIyc2lrblhRRHFQdzNzWWluS2hEZFVENmxlU0owMHFqV1kyWHpiallhVHhUbUQwQTBoVGlNZVEzWkpqZFZ2Q2FLTWJNRUNIZkF0MzFTeTAwVVhSbmJqQ3FZMGowNDArQWZ1Tk92c1hhREVicXR6RUVSQkowSjF3Vm1taFE1VTJzc3RKc2p1ckZaVGtvbGJNdFk4RjZiNHd6VWtKYktHYWRIazU3cnkzN1R0Zm4vYUhzaFNBS3NZekpZUElZMzJkdXNBY29ubXlJcGttNzhFWXhiOXhSOTkyZW9NRDFZRHJPMWozeVdnNElDVzdYSUdHb1l4SUo4SjJ2USsxazhmTEI2K25PVWdXRlZhU3VVRG9VSXU0a3RGR3hUeUwvd00vb3NqY25HMk81aUQ5NWlmZ1hzcS9KemtwZkFjY1ZRc2wreCs3a096SGtjaFoyUWlDazJxMld5YUkyUDh6UlMyQVN3YVBoalZjd3NGODg0dzR4Y2FNemcwTW4vZTJuL3hYUkU1SFM3aHdWZWhkcjRzV0dNT0RSbks2TjVUNW9nRjVuNFNQcGxoZ1BsU3VPR2RMK1JRdDhoZ0dRZG5wUGpYRGk1TEhOUGNJN2RsMUI0TXM0UFRUdm9YMER4OUtLRVFtTitoYUZDN1ZIYjNESlBLMWU4aHVYRmgwSnVUcDAwVFFlQnlIWko5ZzQ1S3MwZjVmczZIZUNFUnA5OXlVSjV2SWxmMEJFanZTMkZ1dWdkNTBYbzFKbjQvV2hiaUlYSmU4d2JpMzg1TnRqaU44OFYwWVRGcnloeVg0bGwzMEhsMk85YlVXUFlQZU45dzFFQmd1UGd3S0hIMGpjVjdWWjJpdG9hc1FvUEdGb2l0VzRyN1dwRTBaZWtsMGQ0aHM4Wjd6c1ZHdk1uQXJEdm83NXNqUExGcFp4ckgyZWZWTUpRTEU2MzlFbUM3YnpGdGVMNVFwWlQ1K1pua0cxNGk1QlAwQ1Q1NmFZc1U5a1AzR0FUSkFBYUxJVkM1V2lCcTdUM0cwUkpPbXEyT1EzR3puVUtMbWtXSDE2MyswOHhkdzg4ckNrazE4U3V0YjlVNHdRdXJ2S1dLdndBc1FDY2NvNDhEcnROM2xRU3JTNytwSGs0ZzBFRjJMTGoxTS8wWW5BZ0JhWGNmanI3U3JldDdoZ2s2ZnRqbUY5T3BLT0VycmIrd2FHK21kbmE1R1lROGJMTzFzSGtLajk1eHlXdm9Fc0IwUWZXaytkZERGTVAzRHBDVTBUVm9XU1U2blpVbGFmNmdIeTVQRExLRmc3OE9JUWFackJsUEFRODlDQTJZTDdlKzNzL3dib3NCcnk2Q1pyRTBWZ1ZZWldNZHQ1cXg5bVRDNDVOWFFLQUhIbHN5bDJpQWVLc0diL2Jpay9zRUVlZ29rMlJZS2tJVGpCdE9pdUd1cDR3amwxSys5WmdmbEV6WjdYa2w4bnp2OU8yZWQ1NGxjd3YzSzZVRVQ3MllSWGhrdE9LQjJrOVJIMVRDdjBPakVDSXY1UHFVbndNN3ZkUUZKRGxlazB3VXRuQ0NOdWs3QTJiOTdOWmhTU2pmZzhEeUw3M2JwRGV2OGZOeEhhY3NUTHUvWG13UmdvUXllSWRvU2cvQVByRlo0RkZWOGRJT2NxZk9EZmhKT21uY0xuTEcycUFvR005b21nVFlLKzE4SVdxUFY3ejNKeWlYM2Q0bnZDeTlsU1JrTWRDdSttYnVRa0xYNnkwMWhvTVUvbjR1WnlNN05jcHM2bEZaOWlZbytCZnE5aWwvVlZLczRZZ055TVFxK1lQNitOUlZrMGwraW9jRVREa3Z5dlJOZ0hCR251OU9jeVV6MzhSeEFuTE9qYkM0WDl6KzNZRzJQV1RsSmxKeEdyWFQxSWdzb2ptZVBDRndsY1JSVFdncWFnRTNTOU1tMGkxTzJtVVVqYUVwYVNZajI1NTlDTFN2OVFhdlRWYmVQcmJkajZqWEVLc3RVWnp1Y3JqSm1BOXQ2S0RTNFBMWUpZSFRITWt6clpncHZ2SnhuaENHbnl2QlJNVWwrZVNTOXFidDJZd0o4dHpFVGpqK0JsdmdvVCsyOHdRY3Rldm4xRk9BbVBFWFh3dlltM0tYSHl4cDhUR1ZnR2h4UFNLZk14NWNST3dJNTRuSlNYTW90dEhLTWx2VG0xU1dEdkxRa0VOQnJwUDJoZ0VmWVBMWmNJWlZDVmRVS2dLZ0xzbWVDdU1lSFlNVGZvN2FvcWhvQzJXZTN3d2lnZXdNTEp0Q1dYOHFhdzU4ZHluV3IrTlcwckhrSEIyZzBCd3JxNHZ3Wk5IVHJXa0d0Zk1DSDhrU1FwRXdpaFp4VnEzT0lSL3RRY21LTmNvL3VKYkc2Ym5IdkhpSUNPN2VhZm1zK21pcEE1K2lQalJaVkpjN3ZFZkhTZFJuOUNkSWdQZVRiaGhyMUsrQ3lGK2VreWU5M2ZSK2V0VjBBSS85T3YxazdnSHN2U3l2aG9rNmFjVFJYM2I1YkRJQlRPN1RLUys5cm5IUXNhYVBSNjVjSk9qdzNSWlo3VzBBTEUrQUNkcWxSS0lYUk10dGZ0Q05tQWRqZUQvNWMrYWFuMTBkOWplQXFaOE5WeS84eUxjUWZnQlF5UEV5M2duTmFWVk1mU3hjOENGcXlaM1JGSHlNVXk1UElQV0tPQjlVeVZIczhqK3llMkwrZ0dmclRod2Rpall3cUtkRTErMDZsbFFCRnJiQ2ZqVE85STVsQTF0NUFacVlGbENUQ2dNSSsycjFBN3ovdy8yVmRxZkY3M2RZZ3R0eUl6S2w1M3RtV2hRWkRSRXNJMnNHWFEyUDU2ZnYvWXFuektxT0MwR0lqdkFJYzU5YXc2endNQjBjN0tuT2pnd2M3K0IxUDFvcytvOG9NWDVqSmtHMWh4YmZZc1dNRjFzK01GRkduNU8yOSswcHcxZzBhbkpMdjNuUW0vVDFrbzQ0QWRicUw3eERLYzRZUUhlRldWNkVDdTBVd3BKTFRzTTRWM0pZVG8zQWNoTWhncnB4b3lsd1lLR1hmMGtTVTF4NGJEd1FVRzVxaFA3Zk1jNkFsdWZGTDFUYllhclZNSDAzZEtwQXZabDgweEpjT1I2b0Z2cXVkVEYxaExHNVc1S2RnV05mSVBpNEVwZTB6V0s0YjhRV0dGL2xHbDBqUTJpZXZ6SWtzcGhSM0ZOZFdpc1o3eUNVSEVMWHNaOHl4cXp0THpzemF4dW4xT1I4dnJXUVcwM3dQLzNmQjdwT28zK3lwdFFEdlFFNnIvajBRdXJiS2VTZTJqREJQdUYxREJYYVlEWlpUTEp6R0ZSOUI5Y3FqY0w4RklJSFNaR29vQVh2QWFTem5NMjVmQzFnY0s3aGxFYm1Jb1IzdXRDejJOOXFGemNSV0VrTnlid2dLSExzMmxhR2RkWnJhS2ZFdGJQRUVjREVVMkJrLzVCNEgyVjg5SU9vUFduMy9UK1dPdkVFT0dycDM2azQ4Zno2elpyWnJNZk4rZ3lub0dSbzNoQW1mK3BYbnh4a0Z2bjZhSDRhNzVVejNpMk5ycG9heW1BR0VuRVRrRlgxM1l4U1N1YjJPVzFmdlFyZ0ZDQjlIbjk3MUs0WnRPQXd6VVNubWtQRVdqZG0yNWVvOHg1OHhJek5wVzNpWGoraW4rVlBVUzVYajRLRUpyWCthcVZ3S015Y21yMjVPMVU1OUtEbzBMdzFTdTAzeVh6bldYN04xR2VqcUIwRmx6WjBCMWZ4QTB5ZVlmOTFTUFgvYmpNN1hOMWdMalVqWWF4eWpNWEhzbGlJNXdHak52eDVJMWdSZXRjVmxLMEtaeUVFbUozeFgrcUtiaWROUXZrdW4rU0l5c1B5c0hoSUhIWTlFZmhUaFN1OFlRR1RxNFhSZ01DL28rUmZESnVMTGZtdHJFOEFIVHE1enlFcTNYd3dqdy82TzB0bHVKSE5lUWpWeGhlSUl1U2p4MVlzbmJXZ09ScTcxODA1YStpeEZraEJ1S2ZiL1JreWtZMzlNcGdXSE5mU1NTelg2ZkRxSVlQSzlwQ2ZBRC9zMU96WG9FNkMycjhady9rdG5WcUJ1UW5OOXl1eUx1Slg0Q051dzNtcmhXRUcrbWtDWk1pZUMyTDhvc0dNWktBNGZDZFF3YVNxZDdKSk9tZncySmNMbG5QSEw5dTVCUmFoM3I2YS8xeDRRbzdnSk1Qc3A4VGFEL1YxL3d0b01OMjNDT3VJUVFadkxEUzVTWXFnWTY3UUpTMzVRQ28zbUpOdENWVGRSNDQzVHpBZnhFcm5oc2xKc0NQa3NuTUx4SjNoU1RWZG0wMkJZbG9BaVc5bC9KUTc3aGlBaVprMks0NUUvRXdycGRFaTlqY1Arak5SSkUzckYwd016ZFJ6QmpSZStPY0xOMUFXdFFQaU9hNXQyelVWUnNQTHVrSUJONzNnZERieUE3WFNrTnVleUhjM0JzZ0wza3NLOFczVVNqcDVMMFRHNThMcEEzS1VLYm05S2FmTUROR0txWWRDZnY1OHZselVCN0RWRlRJdmtGOCtkUldmalAvZWNueU9laFRRalVkNVJXT1M4eGNmNHArMmFBdDF1MFpEeTE0ZVBOWHNjYWZGVnFBekVSYnV5bjBWTS9oYnJNNmhPVGE0b1QwZk9RM3VHN2xxYXJvYzJmR1oxN2xIYUhEbjdLSXlZeDl5ZlJoQjFVbzY1QnFhb0QxcTV1K0lhZzZKQjdZb2pBV21veis5TUVKTENYMFBCN29sd1FkTTNRUHVGVnZiRmRXN2ZvVElpcEdUckI0c0UrQzcxQ2x6MXhlUmpLVnFvUTA3NnRlcmFZVkNBQi9ZcFl6QTE1dHRkMk53cWRBSmUvaXF3cngyeUlncTNnOEMvbVM2bjZhVGtCY2dMODR0bDlHby96UzQybTg3emo2bGpDM3MyQTNtdU01djZaMmNoWmp0VFBiMVppRVVLM2RoUlRhSmFaRkhPYk1ucm9QMWJaQU1jSUpqNkhmWDBxR3lLTzhtUlpGNFlRbElzVjlYVUpzSjNsNnNaK0Z2dE1maE1uSUdRNU9TNTlPVHZMUkxjbi8yYVU4MVo4QUk3ZDUybG9jaHRkem5QYkRIZExGc05zU1k3Tldka29vWi8yTG1lMjI2RWdFNHA3UWhsdnZ2U3ByT2tFbE51MU9acXo3eTNSa3lrVTg1RkNZRm5ybHgreVU0WHFyOGVnQlNxOHpySDlYQVV1R3JVcjN1VlJNWDJjMnNNZTkzVGlVSEljREFtNFlBSS9wYTArZTJHeFc4T0dHRG90N0l2ZXh6eHZOdkcwTmorTElmS0xPZ09iT2xmVjBGR0JZZlIzQzJEVXk4dlRaMlRQSVdxUG5uaHJTVk1Lak9JYVhLclhJS2pld2hHOVVXRUpNSUJPYUpCbDFYTWZSNXkvTS9ZTjY1VHJVNm1uSjRiM0tTc1FrK0tSZ2hhYVBWaUp3YzczRG5mb040M1dka2U3UjlibGY3UTBKZE41OGtoZ1c2WG1hOGUwb1NGZk5ZRy9uaC9SOVNZbGVvZzNVL3IvZTY1Y1RaNVhzOWlad3RHM2l2UExIN0wzMml0S2F1Sk5xWDBGK0t0dDdEVVE3ZkhoSGs3WExMdlRnSFNGUE9sRGRQUVFZVG9QbFdlZlJxVUEzb2V2SWZpM1BheVltV0JpTzBBd3J3dzJaSEhHQk1OdGl3eGV4RTJXYVhuVGZ4WEo5R1VGUG5kWkw0OWpEOXBXSXdJWjE1MFVIaU52YWd0WmpQL0ZHam1xZEc0Q2xLYW1OVHkrNlIxd2lEM09BL3VSdTJTUmNkdlVBWXZhUWtyTDZFeVZJM21uOEhxWm9qN1JZMWE1N1FVcmN0cXpnNVltRXI1KzRJcUtCTmZMOGhaNExMTDc5ZjcyMmU0WEd1OHdkWTI0YnpKZVFLOXpFR1ZpTzJPbG9VelRyVFV4eUM5RG9wUS9ORkVzd1hLeVNrSnBPL0RvYmlVS2pEQUVaamJWMGxydmp3KzJsdWpDL2s1S2VTTjFoTGprbG94UFVDcEkraEtaTCt4UmV6cUFhMkRXd2pHd3NrR0ZreUFydXZ2YU4rcTRFL21iMG1YdG01dHVEajFoNmkyWjYrbUJHRUZGdXFqZE5XVEJUeHhxcVpRbEdEY0d2T09qMGpuaWpOT3hMWE16V1VpUjdBbWhqcDgwQU53U3JsSEI0L3VINzFRQ0pnYjFXYTlmVjBXdWlDOEsvOFNUeTBkVVZ1RFJ4bVp5aTNxTk1pV1VvcG5xYWVqUG15emdOMlY5YktJOW9zL0JRMzVQcGxDNDFDQS96WHRqR290aEdQd1ByOEJnajkwOEdkQXUzcEs0WmhwWnlwRWMwQkJtdCt6YjMySFlIZmR4QzNBR1c4d3NFaUtwZlRyVVl6WnZ2ZTg1dUYxUlI1dWNGcXIySjZadXgrWVNxMEtaV1hiV0FzQmlDcnBQUWxnd3NKOFlhdDdvOUF2bm5jblRyTms1SXF5SzJpQWhYZkhWcmxuU0xUdS9xWXFxQjhrSC8yTWVIdGJ0OG5vWUdSaDlzSmlDUGwxdFBGMTZEelNYQ2xMWkdzdVBTWEp0ejdSMjJiN0tHUll2eXdzcTZaNFdvR3RaSTB0dXBLRU1CcUROZXZZaVdXQ1l0KzZIZ1c3UjRJNGlhSzF0dkRuTWFqaXZ0Z1Nrc3NFSnVIbGNXRi9DVlc1OTJ0d0pEL3F4UE5ya2RZdzNIYUhoaGN4WlRxVmZOdzg5ckpTdmxyenJINUlGUHM1SWQ0VHAxYS82elFzQUlHNDBuLzVCb0hCbDFlbkhBUEJ3R3NlQUorRkQzbGY3K216dUFnSy9DbG50QVpJeHo1Yi8wcHp1QkxZWW9uVUVJRXdVUGxLTHJ3VjVDNTZKVDNLQm9sUkdoUDhOSVR1UVhqaUZYNVBoSXdYS0REcnVaZWxFR3VZSUJ4ZjR4SGR4SDAvaHZ4NUI0UjRaMTUwVXRmSlMxZnFXd01Fd24yc0ZDVnB4YTQ0NngxUEUvcGh5RzVIV21Vc3V1cFd4R3diQmgrMDNEaHB6cnh0amxXdTdkalZhMGdJM0VqcGVOTHhveDhyeFdZekhnaXNFd0wrWGlvdGVSRjFySDFUQnUxcEFXNXhXMXFGcGUxWDQrbWlTT1ZSRGs5dFhCZ3d5VHh3L0kwTm9TWnFIbUl1SHh0ekVESVdwYU9YZUFIN1pkbGdVQjBJRzB2R2FWa3hJU3RpbzgvUkQ2L05WaXIyM09rVEpxSXlQbVJnYzdOTStSVExxV2htYzlxMXJYSkJUaGN2MVBucFVLQlpsYWhCNjRRV3FGY2hGSk9Xd0RCb2tXeW5pYmhjZW5nRXJrczUyY0wrUGkzVnNCdVExM3ZsejI5UW5YU1h2M1JWOTlCeDdmeHIrVlROWjJCS2d6WW9wNDczdDRnR3Zqb09hTHpONHB1Q3h1V092YUJDQkc2L1dWalBuZ3ZJM3hxeHlMYTY1bjBlcGFJajcwMUh6TG1BVUkvWXRnQ25zckswazZjL2xienBjeTV4Ym5lSHQ3NTBGRnpSdk5ZUVVBak5YSjlqS3NjQjl4bG1nbkNKZDNJeE9IMGs1dWN2b1FZRURIMzc4SytXMUQxQmM0aisySkpLaEZxNmZZNlVURENIUGIxNDJoZDBxczV4QXBhemZXYTJPRGNKN2ZJNUxYSUFUWTVSQVcweER3MTVQMTBrNXEvc3dYRmFlUHBIblRrbklCZml0Vjd3eDdxTU5jdzd5V1VXbElxQlowRkU5bllDNXdZTEorVkwxclN2K0ZLZG45NmpJaHdhWi9Gb01lWHFUNm1pOUFMSkFZTmFHNlduLzNUZk11MDR6N1FHTnF3WXU5dTdKa2xIZnpoaUhQdGdxZXNkbUYvTnZTOUtkK0JRS1NIdVRmRHUwa0lXSm4rTFBUSjZ2L2RNZWVxRTNXNFFJVjA0WFFLQUoxcWFYNTJ2Z2p4Qm5WK1BzK1Q1UVgwbEpySi9DVHBTL0FYVU9RazJLN1BKa25tUzdNSkdFOXd5TFYyRC9GUUEydFQ2dDlMamp3djlNVXZWcXZBNTh4MjhkS0QyVys3U3JEMi9VTitMTGJQbGwvbHIrY3RGVmdzSllVb0RjM1NvVS9kM2VVeTRxNkU2NkIyQ1ZObVRoWDY5TWlub0dlcFdUOXgwMWxHQmp6TlJDSUZSL29tZXcxMStQai9JeW1WWnpOU0ZsSTRjbjJxYVVNbFhqQlVhQ3RnMkk5amtIWndMNjE2SUs4M3VNQXRGR2tRd05Ob3hQK09jUyt3R2ZVUzVLWUNPRWJhRVNvUGc2VE1nMldQUTNwVDhaTXl5QUs1b3pZV1ZRN2ZwYUs0YnprZmVEV1B4TFBZcE9zdnhka05VYXdpcWxSZmxQVko3a05LZnJlVVZTVkRCSkRqaHRsL24xV0pYZ1gzVXBvOUhkWUlXbU9aeUFKcm9Pb000Z2wzNzhJcThYMjJScTNMdkRqMDR0WlJaRGtqTTN4Zk5jZ0tjT2NVY3dCaTQrMCtWWnhhZnJTbFVaK1R4TkdMZVNqRXRBV05IUTBMWkxuUWg5ZjgxMXZWckorcVhKMzBrTTNTTmNsRDk3bEtrc2FidThQS1hCUkNMZ0NSdVlOeU51dGNLM3FNUStOL3hpRlpQZk5kTkRueG1OaU5haE1mRzZmVkorQkZHWEIzQVFnMnhxQklPQXZ0REk1SmE3UVpzOVJENUFHU1FPME5JR3BNYzJRTVY5MDM3bE1XUXMxSURRQzVMTlJQbFlBdDdpU3FSRk5OdjhZWHNOYTBQT1c5QXh5NkFWcjk3aVpKVHdRVG9mQU53cHRaVzQ0eldjeEthbEtVdkN5bHNxdDY3bXpBL3A1dWlBZjg0b0hRNmkyOXFXejVVYUR2VHptRll2cDFvM2tEOHUwOWgvV29yVVB0UzZrVVRwOE05REVJaVV1YXhYN1NxYk85VVhCQlpQcG5rMkdaT0E1bUNDdEI3UGEvWGF2Y2FwYllnWjZ2VzJRcE9nekx0b0ZjUUwybE5QMC9tbUJLNnhMVzA1OURwazgwUFpCdms2TmZVeFVkemlRc0EwWkZlZTE1RVg3bjVFdjNFQkt1N1dpYnZobEdiaGhQb3ozMGZVdzFiSndwR29McmkrMlpacTM5c0R3eldESVNTOWw3R2dmU0tBSkVta2IxeHc4S2dCMXJxdG9kNldYYW1pdWx4ZzZvM25JcmdXUTV5MWUwNndjVitnbnVwTTMrTXhRd3JYVWFGUmhsQ0pCOWZhTno0ZXhjOUFZZm9OeGRMOUhxcWVQTGZDWUpOSGNDNHN1eitzR0t2bnF3ckxLc2tWRTNaV1hERjAySFhrb0xCeDlYRWZKSnBCeko2aDBNYlljQnQ5ZmRuMXNLaUxyWUV4V2g5d3dsajh5NGFDY2dxL1dLTnArTGNtSTM3YWttbG5XTk51RTFRKzNCd3FJYlRsZTU0MW0xa3lzSENxcndUSlZxZERzTFFiejlpazRYZEMzVlNZS2dUalVrdVJjY3drS3dQU2xGbGtnbm5aOGJ2bk5mNzlCajdXMSsyM2M5UFhYamtDV0VuR0ZxNXlvd1RqRU5zV0NSNFpkYnBnZnpMOVdSYTZnS3B4VGtlNVN2dE9lV0dlaVVpZGM1MldXNWFHYmNSNThBcWs3M28rc28ySnpReWQ4VDJmdHFSd3J4UjAyZHVEZ05DZXNtWitNWkpDN2ZodWlDTnVUczBqcmJMZSs3aGZ0ZmVYOEx6eG00UEdGNVFna3p3bnkzOUNoNnNRMlRhQit2cHcxUmIyTmRHTC92eURnNzJ4TzhsME9YcXVjdGczQ3VBSnZQbm55cll1eTI4Ry9KS1dkcmdOZTgzSHNrYmEzamwyUlgyby9PM2JrZDJxdTluL1dwN3ozdzF3NXBHWGdUQmhmU1h0bnFMNWthdmMySzgzSGhpRExGSDBBNmgwUjVYNm0xem1GYmZrQTlvVXdPUEt1aFBKSzArV0xqTXA5NlUyV1ArWHU4eEZ3VGNQRWlpdEMyWWxqSW1RTEI0VjlaWkQzWG0zc3JDS1dzVmtkUUQzVTd1aGRPMGZjVnI4cnJVeFplNDRSdm1TeFl3YkVKR1A0SDlpUzVMQkplSnU0VGJhMHdaM01iWStXTCtzRVcyT1lqODFMM3AwdC82SEJORmRkNEtBNzN6YjVOSll6VWU5V0RtM05vTHcyUkxtUGFud1hqYkl4TkRwdnN2bEsvdWRHbGVpZVBocklNVjQyUjVIVVJOVFRESUVGTUN2akVBUk5Rb250MjZHdVJRcGR6NXRlbTJENHFLdlVVNVBwWFo1WWtvUDRtN2doMjVQdW5malBXbmtxK1NOYmlJUHBuWDdpVnl2bGZSTTJPN2dDZ3VKYWlJRUpvMXgwNVB0TDUrUEVJQ21rTmovZjdvdTlyd3diTFN1ZlJUQldMVkI0UC9aeUw0bk56cWVacXNVSkFhdE5Ma1RqUVBUTzZreUtlSTQ4WDNNZkZDU3J0dWVRSUtxUGtzcldEREttU2RYUzVNajc0NEx2MGt1T3c1TWh0TzVyWVMyTFdBeVhnWWcwd1FIYUZaaVlHZnlMeVlxMUV6N1F1UkFsSS9sVktUcXM1cDM0SHgyWG9OOG4zdWlBREdkNU10bHNwTncrWUgzTUFVdVJyUGh0bWdWTVhkV0d4YjdPSHlTWkhRSDVhYTlha3R2NmpodUZHN3JxalcrSm9lU2tnd0plYi9mdmR1WW0yakFHYWppNjI5dmc5dDdoZzJDZkhnTFdoMXRTOGU2YzUyckNCbzdOa0tnbDJub1BIbTlXM0RJUWJYai9ta0tKWFRlRUN1a3dhYzhJZm50ZzJYODFHamx3VThHcVErdHE1OFArL1AvbGd5eTZ0dzRZa0RjaURMSkpuV3F2dmM2MUg0Y3hTb0xEaTAyTnBScEtBTklDVjNYcmhUV2Zjb0I2ck43dVNjelU3d0hidW43cVk2VVJpNnNhVTNDR1JUMUVESExacmdpQWE2dnJ6L0RGTWZZTW92WlhJU2M4VTZPWjI2bGlxTjFwTzYzRDFBODh0dXcvdlAyaDZYZldoOVZGNWR6cjdNclBNdWFrYWxaSEdEWFZQMDRzNjVHSG8zY1MzbXZOdTRUR2pZNXQ1bEswVFBuSXJjMCtCcEFrY2NaYlY5QlZJU1EzSUNDYUVVS0xJaFNXTis4YkExaTZZeU1sMW9XRXhNNS9GNjhlSDBGTDR4STBsWUZ2OUovTEU0cGFBeEVoZHFSZXJxZEVvZk1yQU9HeEY3WktMaHkrMVM0VmUxNkdTMS9DU2w1VlFTR3RWeFc3REdtVDJpRHlkQVZsSjhVNnJCMXJLMnhINGo1Vm5tWGZhK3l6elVRT1NSbUl2L1RWRUpvWHJYek9LdDZFcXFyTFp5NjFvRnZvME5YVUVudUFMa21hc2dPNlI1MlhZTWU1RGN0Z1BsSXBKSkFxZkY2cFZRSUVpM1drSEljdG45anAwVGJkaktQdkJDRXBwdWpkRGVuclA4QUI1QjFBdmN0Qm9vRlY2NmZiUkFOaTl1ZjlHY3FBb3E4L1NGRExPenJkRjM3Y3B6eXRXUHhaN2hVSGtQcGRkdytCemJBWmhTeXJ1TEhyOHBhZytIWEM0TWZGdXgxcFU3V0dVWmpBK0wxaSt3V2VkL3dXcGZOUk56T3d3Rzkrc1p0ejRGQjc5aktZWk1yd3VEbkJSeEVhc01VRnRQRE1kVW0yTGtjM0Q5MS9vTEorUU1OZldwUWt1cW9YY1AveDlrR3c0a0dRbFlnMWZ0dUVHY2x5N3dabFRRbTUwQ05oVm01Myt6Wk05QzdQcWFYWngwNmlyZmlTbmNETlRDRjQ5akRHRFlZVGNRWUh4cmR1TzJ5QW9BMWFCZk1lZnY0TlVTa3JrSjNYbkFsN1JXdDR0bGFRcURqY2duYk9Cck5qSDhWQlhrM0tJeXdBSEZwc2I4Z1k5cENxQy9OMHZURFVkZ3lZS1Fic1lmQ1E4N0F6NHQwREFEU01JNHFrWGoyQkZENzN4c01tRGtRaGFaMkVTcHhqSGdmMUF5Q0EvOU1UR1ppa0lPRjdvS1pmUENETDlQV09pNEJkU3lzcFNmZE5rSkhJREt6SWdSTEdQdGZadTlLQjRBUmo2NVNUYUlqUkhLTE1Ja05KL2VSZkFJaXlPSTh2Mk83Z1NVRDNmQ3R6dGs0amZEZ2t2a0w4Qmw5UWtvSnNLbEhOVmpnOGE1K2tMOTRQcForQis0Z3UweHFjeVFNVm1Vc3ZXMUZSdndQOEJYOUQ0STFZaDViL050WDBIRmZ0QUt0Und3MHlWRUFTcFpaeEtkc0JYQ200dFBPQkVLYnBQM2l4dUpGaDJrQ3BSRmxsajVpQzhiZHFab0Yrb3NzUWVjTUxPNk9oN2lBcGlHSEs3cS9YVkpXVHVDZW1mSjRtZmEvWU5FSE16ekFPK1AyYWhYcE9nRTNSdnZ2cExlZzJNRERyK1JVOGkveENuTU52MUFIWnBvT2wxWnlockovMmNMS1NUdU5FQTRHRCtXRitod1lLOFJPUXZIeThjNVg3cTRyejNwWE0wSmlCRjJxTGFBakpMTGI3enowK05iREcvUWpKQ1h6ZGxnZ0xnalo4L3FGSVpmUFRwTnVJQVZEaU42RlgreTBwYTBmVTdwa2dhVzlyVjJOYUdtak9wZDJZZDlTdU1BZE5MS2xBbWlwM0RVSG9mcWIyMGk2Ry9zQ1l2Y05YS2M3ajNuYmJOOVo1bGY0Z0U1NThYUjFHUFB5REF3N3BtdTRTMHhScmhvejZuUmZncndhT3FPdnhtOFFFVjFlVnJSSHlVK09JOG8wV0pDZllOWk9SS1FoK3htdjBKbkhNNWdHZzJydHg0cUpscnZEMmMwOGc2V25aQWwzWTUvZXVqMzlrN1dNTG1iT0Mrb0tLUlRlRE9OS1BiZndReEdNbjdoSC91ckEvVkdCRGFLSWRHWUQrdkw3dW1sZ21PbldnM2VPd2dUL0lNdXM5REVoaW9jRncvN0Y5a3dyaWFFK2ZEdEJSMmRQQm5Uek9OWXhkRWt3Zm1HS0QwSEpRaFFSVW5HWjZ2SUlyV3NBdUZ0dncxK1NvMmRCRW1kd2EwQTcvd0V4L0ZkMi9YOUhVaXJXWlozaHhkTEVlcndvS3Y0d2RzbmZab2hmdGtvWkptU3VlaXVHVlRjYllWejBoYkcxTUJSeFpXMzZ1b2hDSXlGenJ6K1lBZlBCa0dPRjluZm1KVUZQc2JBNWw1d0dGdVcwbjFEUS81M1JpK0x5VnBIYURvY1craUp2SGQ1a2xhSE5meDNvdlFCN3RnZ1didWUwWm8reFA5NFVqdDk0bGFIT3R4Z1FmU1JJUy9kaDBTNTZyNS9FSkZIU1NjNGN4TVVnZktFOUVvc1J1YVB3ZlFZN21uNmo3dFB5TnNQVEdUbHJNQ1h6R1pWOWhtL013SGY4QmZHd043bTY3UmoxM3FoSGFZZWpvQ1JUclFab05mRDlBbHZTS1U1RllGYzNnejVaOFEveTV2OXJxWkhnSmpMUFdkeXg4L01Ca2RLUEFsNWJiRis2cmZIS2FKS0VwS3E4S3dCMkVSTGlSTTVpa2N2OHJtREVpRlBUTVlwOWZvdGJkOGIrbTU0MnlReWNkeTZXU0hrc2xlekhVSjljT0NjWjBTNS9xWjdpSkdFWFRXbmdheFJ2cTFxdDFPZDVwTUpKU0pPdmljeXQxM2xQWVFYZG9hazUxTHdHM2YzMFAyVlQvaHdsZ2RuUVVXVkdmWHFYTGZvNk1HdWVFUTFDekZCeUVxVzAzNkoxeW1aRnEreWdzUklYRnJTRXdTckpCZHJOS3piVTlKaEo3eVZ6NmIvWFdBOGxsOFl4SUxQaUZ4SklMUlBGZGI3WGw0NWNscHJkZmh1V2FSZFozQ28zZ0dPTmFxSndOSTdSaEZ4S3Y2YVdCZjhkR2JWaGJqZ1B0cTFrS0FkTGZYMVhWZmhHcjA2bHFyK0didTJPQlFVTmN1WjdpQVl6ZldURWkyU2QxcjNxWXNLRFFYRnpXUS9pd09PZldhRlNyQUM5V0k0MDl0Tkdsb3o0ODR0ZmlhSnNRSWlTc1pqS3dzQ1NxZFpvNEl6ZXd2RjBteTFQejhFRFl2QXR4U2FCTjhwQVhacXBITlBjTURTZW1iYlZrNFNCd1lyM0hhTkRGZkZOa1FNNmZuVHNRQ2FQRDNpTitJZy9rZ1hpdGw1ZG9HWlZ5L2Zza00xTTVsWk9KeFF5ZXhvUnBSNFNDa3E1UW1EVHZLZi9jaE1OOWtmS3AxRVlmZUY5RUhoY2h5OXdQTlJyNGwzbStLR1NUTHE4aW90dFV3Ny9OaE5PSGNoS2ttUkFxWjd3QTNlNUdhYXdtaU11ZEZsdkRGNjVBZ0hNMElVSEp0M0NWbnJ4ZS9ZOGoweUJjd0dRbFpCckdnRE9wYm9ta0pZVFovMzZ3T0dXYXNaOHFkSDl3UXZxSEtCT0REcVFPa3ZNS3JpWUlCRnU0K081Y3hiRzJmUUQ4ZHA4QzdYVk50VEY2M0pnbzd1alMyNWlCRjdlSjdOYlQ4NG5uczJIQlRWM2hrZ2Z5cFhHNlYvVlNldkQwVWQ2d0U0SU5Rc0RaZkpqSnlGbGFKbDNrMitGelhLOVFTSFdHSmQrVXpJK2ZMQ0dYa2NOWnNpNXRqcTNyMElxYnQ5bTVPb05GQXRKZ3hwZnVRMC95VDdpU1J1RlFjK05PY1pKVnNxYlJiWENUbFJhNCt6bnUyN3JOUzI5R1E0RFl5VmE0Z2F2NWk0UThYdFUycyszREh6bVVWcmdZckhhSGlUVmJYYVY3dFFjNzhlMXBvU0ZSejdXN1phM3ZjbE5xZXFqbDJML1p1Sm1MOTJJZUtxb2ZtZHhYLzVmem5xZm5YRElKbFFIZEMrUkFOYnZhVjFlaVIwdkM1OHZBWVhzNEZIT1pFN1ppVXdZbVpDWmloWTdjWkgrdXMxbWlyMm1vUXk0dWdYSDRLNVdXU1I2ays5YnJFWStsZ2FNU05sdzJXSTFUSFViMS9WUnRnZWdBRjZGTWZ4T2JWeWJTOWFZM3hVcmNrV0JxUmRXU0w5aSt0cW45LzBOMmJHL1lNWTNvS29oaUx5YTJTcXFhbGNpVmdXYXEyd2NFOFdIc3dQOWlKSzFNaUtsaW43R3RqMGRTYlBHK2tMdVNQT1VkM0hObEU1Q1VWMjQvRHhPVDlyWUZXUEIxZnhnUEpvajdDbSttUTZ5dFNhRFZsZFlLL3hlQndsbVVJS3RBMEdCTHZLUkdkc2VwM2lncFNEbHlxS3Fpc2taaDJrY1BTME9nKzJFc2JqYU1XR3VTeFl1amtERGxUbXJnMDd4WGVuL3liaDFUY2N0YXhDdzNWUklqMXdxMkRlYng5MmJNYjZyODlzOTVNZ3hBYWJ1NllJT3lmNGtDeGlGbWN5c0JFMWNhY2hNZ1FsWnY5NDhsMnJwRU95Rk4xMTJpU09EWjhQNnpHb0hBbWdMYzN3SVA4ZVhUMDQ2bjdYbDIzUzRsK1NUb1N5U2lEdFRNb2xRWG1qVExlUHBobnNBMFZ6aDBZcjEwNCtMNHdIM2k5bVlQd2dvcmloak1PMFZnSnlRcHZmbFdGZmM2b0hWeGw3MTVVczJlNktPbWN6VUsvWjU1QW55TEw2RGU5NkNaeERpRE5kcnNDUUJIUU4xSWJJOWFReDMxbG1jVURQUHQ4L1JQUjVyNXFvUzdCNllwbS9XVmttU25vZ1BoWXJGSlRKaTA4bm1CTm40RVBJVWYzWlR0MWY0TnhoMDFEREJ2bkp2MHRXa1ZYNXBJdkRvTURlVTBzVExyL3MvMm1tNmYwVHJ4cDBQRWNKK0xUTHpxT0xreFlhcEdMdW9GY3d5N0JheGtGUzdYSUduNktRcDROcGswSnIzNGgzRG9Dc2VPajhuaDdiS2ErMExRQWlvbFp3RDNZbGFBRU9XRmtrcnZROW9yRm5KaXBmUm5TL2QxenllL05UZFRNS3lnK2xhTnNzTmpnTGZ3VENuMUpTeUNpeEtRbXFuVS9CNFErdVdseElUYzdPbHpMSGhqYWYvWEtWU2tqcG0yMDg1a0huK3dLOXp2QUdka3I4dkVvdkZCSmtzbFdGVkZXY0NVQWRMUmFLL2wwL2ZZT1g4Z2N2aXRKVkVRT0c0bi9DWEJtTmpqaVQvMlYvRk92QXZRcUtEVHU0RFJHT05BQTNKenNvTGdlMGJocDNDcEJZN0ZnWGpuTkl0ME10VitkVk96R2NVSjF6SU1sdDFQOHJnOVJaQW42ay9XanRDc1VOVDRIUkhvUXE3YUhqTXMwUzRxdTVXVjgvSU5aQ2tyaGdMdWtDSkxlS1pRajR6NHNwaDdJMlZHRVVvTXN3b1o5allkMERtY21LU05HOXMvcEl6N3NqamdSd2JjWVZVdHpNUGFNNmtOYUdiV1k5SjAwQis1eGxWdWQzVmtUTGtXRTdqbERPMHBqSiszYVBTbEdhaXF4ZlgrRXhBbkVOa0dpSW8xQ2lYeHJ1U0liR2FiZGpHTlo3QU9jWFcyVnNsbUFwZ2w0MnFrTHhzRzRPV203R0lkZjdrNlpEZVdibFdGdUl5TU15V3B3UHhzdUJqTDUyYmNybmthaGFrT2U3Q1cydXM3WGRHVzNOaUVzOVhYbm5yemhxem9LS0ZtK1RBTEFPbjBVK3o4bjBoWGN2M0JxVSt4RmduUW14Rk45eG5pbjBsR2RxNmpxRmhCZDRySEI0MWFnMCt6cEdhSGNnalcvOGhvZkZCS2U2SG9COFErbUVTK3drNEN6NEMrZUJDTnBjQ1JtdDlxOVlkeHFpVnZlUDIzWVo3RlZZMEtyMWNxTkhma3dLelJOYVg0UkdTL0JOb3loUVo0SzA2cllzbnJFZU5tQUlYQ1d0ZmFCT3loNnFLOERYY1NzQWxtcWt6aXpOUTFuNGJENGhyandkUDNkMi9MRjZWbHZXTTNJdHRjRmQxdkhVa1NMUzl0TkdQTkhqQzJaajNRMXpTRkloK1dJRndoM0tqVVR6eVBQVmZFK0t0cnVxdGhySmo2TkI2Q0FEcUcxdUY3dWtHQTgzS1kzODhoVFAwYmwycnZNT3dMQ2JSdXl0MlptY3Y3QW9CUVdvU0FpaWZXOEphREN4WURIZXZabCtUOGVYbDNOdkhNaUJqMURaaGZhZk11NDEzeHpMeTQ5Z3J0T01IdlRwbEQrclJXbCtrc3NWK1g0MjBxRGxqYzh2dlZ0ZlNrT1RCMEN0ME9aV0NBdHNzV0dBbWYyYy9IbXFQYmFVeUVmSGhiUk5zd3BRNTVsb2NCTmUzczRuVmcyZFdoVE9oOHZDZFJtMHF4NHcxTTlsSGZlc09WOEJmTkR1M1czUTUweUc3WGorYkFJQmdCdmNFcVVINDZ6cmE2Q3BNa3Y0K2kvSHdHMDVFNGhsNGhTK3NtdE5kdFJicHdFRFIzdTZlUG9oNUNFZUJGT1l1MnVnaFNJSjg0bjJkckl6K0FlUG5HTE1PWUJmMHhBRmpOc1g2UGZDbS85Ry9VWnBPd1d5MTkvRWdBUk5ib25YaVJaN2UvbnIzcnBFQjRZbVI2dTc2cFRJdGV0MTZvZTlmTmNnVWlpVWJYVnRwR2tJUUFKSE5DSnJqSGJxOEFPUERGZkJuLzJoNWpmaEU0VDhJVGhHZ0FPL29kaGxDQUZvK0dpVzhUNElzNlFmbEFmTGxpd3RHQXZLK3FEc05vV3ZuT2RnajVTSHRFdHhsTjNXb0VkZlNydWJ1ZW9Najc2UW9jVThKRHVTVE5ZWnU1Z2J6b1RHUTlpNVZyTzFYMHBxTE9HaG9vOExKSE11cG9KSGFZYnRYRWprZW5qZE1PbGN4OTBncUh3UEh5Qm1vWDR5bUhSZXBuZ0Z0NUk2L01xbEZKTmVYSzBYVS93Y1BwMXd6Q0FGQkNCVmJRZldSR25PZWhzSGF6SFFYSE5HK21jSUd6NmltOVI1eWdpMzBWQlRMYXg3UUxRYUZmOVhySzdnT2w2RFRkMkoxRUk5N2dxN0x1T1NyVzRySlJCM2V0cjQycGpldDMzaDk2RGNLZlMweWxwWVRmR3dZT2JidU0wMVZqZlhjbkxKZU8yT09VSEFUcERaN2c2TU5zeENnaXdPdjlRTHo0TnJTTzlhR0E4d2JkbTJVa1VvVUNlUWpVeWpqb3phbTI5RVpDQllteWNJcUNYZWJNcXNGcWhZZmhCSG9mMXdacjJPV0hCRDd6Q3daZ01URUluVVlOSURVTDlrQ0pvWUF2cTF3akhjR2dNVTlJVXFBTVdPdWxRRXlxc21SQW9oU0loREJtS1NKUm91NlFxY1Y3djBzNDBWRDNpR2J6eVZwL0VXdTRad3lpR2VWWlhxTjNqSzZodVFyN21ZRkE1S091OHdSZjR0UmRwYVhxMUxpQzJBc2ZWYUdtemt2Tlp6Z1cyWG1JMXV4V2RUTTRhMEh5ZFlJK2U5ck93RTd5ZFhlTDlRb3pralhtRllqQlJnNHdqTi9qZHVJWnBLL29HQkJkN3V1SDUydURqN2g0bTgyb2R5OGJyZWNodjRvWENaeFVZWHhObEo3dFg0cHR3RE5hVTNJQktiNWgxY01NS3EwUE1wY3JPc0gvbzNPY1p0L1RGMzY4YzhCMGlZYXgxS3NyQ0R5YXBMelRpcEszb01EbnlpOUFmT0ovYUx4TmJLblhKT0tBSHQxekh1aVh3V0VPTC9iYUd6b25QYWE3dnU1SkNBUkhxaUROLytGb25aUld1TE5KYUUrTkVHY3dyZHYvc2ZxZWZGcWFGQ3Q0L200cUFySTU1a0owZkh5R003SzFEN1RYRTJqdjdWMkgzL1pBK0RGRThDUlpZK1VPSW9RakN3N3poSnhsTzNMUE5LVERDTXM0YklVeFFSZlN5Q1pTbnEyMG5aUisyUWI3VWJpRXpnbkQvUjgzYW03bFphUzZnS0MvaXFlZlpnSnJ6WHl5OUtteEVNKzRMMFA4TDQ1K0lhaUp1OXRiaGFTOHBsNWdSTnp3NU9rYldoTmJaWDZwZlJLanp6UDB1Y1ljT3luUjh0L2EzY2wzTUh0a0NVUm00NmRXUHV0aVZDdHo2RXZHOHhZVFhVN0ozeUR4ZTIrT0xDNXd6ODErck5taEtwdDNLUEdnbTlNTVhNSnpmbVNwY01qS1h5dk5VdmlxelJOOFhEYlRnSXYwTHB0ajJQVC9YTXRiWVorTEZVTFdmR1VyL3pNcHFKSDYzQ05Ta1NQazY2NUpCd2xwOXR5ajlkOEpZS1hhaWY3NlBybmNJYVY5cENvaWhOUzBEbERRSVMxbllIVDJtQzJ2eFNNZjgwemVEOGYvbmRlczF4QURIRUNzZmlqOGtZT1NvK3A4ZFFjOHhzNDBTTXo2M1Zza00xakVkYkdjczBSbFlzbVRWeHFSUmtuR3JzVTVxZVdYNnF4ZUVqY3cxcG1LMk1lRmRrTzY3ZHZxK25samRQbysxMTczVnUxZy9QcnRvQm5wMTVFK3k1L1VlNmxpMGxSL0FYZGp1a3FxakRod0w4eUl6SVYxWkRSRnF0UzEzNWM5SnB6SWFQRE82aEJoQk16UnowaG9JMVhabjBrVUk5eUhpOWlQNG1jWkU0elZ6OE8vdWdJcVN6cVBKQWRTQWI4LzVwV0dDUHliNGY0S1dxYU9tMjBTS2w1bmFZWUNPMUR4VW0vS0Fyak1oZGk2cUVYZnYyTWJxTUE1Y1dNdHpRR2FnYnNZTmhwSEFkVHY3TUZEK0dPQnZIa3pnZHpOOVUwek56bVpUVU83TEs3MEJnc0NNQmNuZ0FKU09vWnFUaFk1STk3c0FwNXN5UUVsTHhSMWFqOXVVbXNjTU5qaVJJUnp3Y1dtdE9UREdBbGJaMy9oSERBOEVZMEdheUo5RFQ1SU1sL2ltam9oK0gwS2Z4L25YMVFOQ3E2aTNicnFVYmVyUENteE9CNkFidTQycnZQMmszOEpZWTlZUFpYSnV3MXp2Q0NIQ0V3TkZ0eUVKeTl6SklNSlVHVWNvV1RrcndSVFo2Q0VpRWJ6MlQvMjMyYTBrK2hoSkc5akhoa2RLWnVDanNrdkM1cGxTU0RuMVlHWFRjSkhneExkWHcyZDZOY1BuVlVZV3EvMm9pMGNYNCszWnVUZFZObmZybGw4a2JtRVlpTndqK3pGRENUVWNuVFBiZU9PbUx5ZWxsMDFFdktnSy96a3R3MWdXSGJRUlNoNm1TTVR2L0VMcHRaYTNwL3FmdE15c1BEdC9tak1kRkR2YTI3M050dnlNZit0NjNxM2I3VUx3ZzAxL0pobVV5VlhtQVJWU0w4bDFBUlpjTFlpSHFueWJXTzVNaWc1WnBkaitRTFRzbHMxdmdrY0tzLzB3OS9uQ3lSaUE1eGVqOFJPM3F4Tm5FVktkMDV2NUUwZEgrZ09GSjlQcG0wU0MybjJSZ1hESnhacWZBR3Z2WUZOOVVCbVJBTVZXbUFXOWNZeXh5ak15L2FCUHdqUEo5ODBYV1NaTTlTdU5HR2QweFduWFhHTXg0UEZhZXBrbTFmNEVXSG1iZEZJWmhMSzFwMklFeXYzTmhmV0oybWQxc3NTcWVNT2JjVjN1d0NkQ01qcjBVek0zMnJRRDJzU0xNZGNGeVJnV0FLbkN5MGdQNEpDbEZ1Y1FYZy9KbWlUL0s0UlBiQkFXMzlIVlhvYVVnQ3hFZjVtVk1zNzFoeWJQQzJDMTNoR2VwbktJMjllN2lvTWZCaGFMSlhKRVk5RE83MXVpT2tpWXpEN1ZIdk51aXo1SC9ORFBhZENCR2ZtUW5PMi9FU0dsVXFONXQ3VDBrZ3hCK3pDRm9McWVpT05yc3NKZHZ2Mnd4Q2VJNEw3M1ltMkkxVVV3WERCTXpidTZCV2ZCbkxtU2hQazhmR1hSV2N1dm5KdGdTcVVFMnpHTU5DMU9KL08wUlhrYnJRNElzQnI3b3IrQ2xUUU9oZm81K3B2Rkg1TStKa0oyaGxrbzMvSzF4TWVjUEthaTZSRHhKQWFaYlpyeUY1S0QvZE1GVzlPWm8rSmhKamVmYTIxc1FGUGpBb2FTWnh5WmRWWlB4QWxRUmpPRlJ0OEdUdjhEQjQ3WnJuYXpEbTJ5UjVaTVRrSWtkSXc0ZU5zYzg3YTBHVldnVVl2QnEyNG5uMTVLeTJVNlFrb3dxYlBqMVdVMXg5YlZQNDc0WkhqeXFHM3BkSUJTUGVselhtUUtRTVc4TSsyak5aZ1lrS1MycG9oa2tIbm5qVVRmUW56YmMwSlFHbFZCY1htRW8zTmo5bGlaTml1NzNVbTJXeE8zMjBBSnViL1ErY1hiV1RKekdhM3N4b0szeU9HYmM5aElnMHduMlBpOUdrVVlXWHY5aG4rR3A1Tlp0QTVrZHFDTXF2NDF4TzNFZFR4S2tlZ2MxejBNYjFFenlvNGJ2L3cvMnQvc3FwTEZOYVVUQVBQdURYa2JWYVNBUEhoY0JGeVJwSWw1NzdHREhsT2dMNEx2bXkrdzFKdVBVSmtHdUVscHE5dlVoR2k3VjNxVktpTVNuSzVQUWdYQkVySGUwR01NelNoWmtPWFpWNWZLVzZSMWR0cHVkdzFneWhQN0Y5NytKUEdyY0htbmRtVlo0R1NXSGdPUEV6WFplQjU0NW1MbStjUk81MlNSeHhIWGJJTDA4VXFoSGk3NjErbXZ6VTQrNzJWYzAvcDVCNHVnZ2hIaklmQ0tpTWlBVFdPdWZMTmV4Tjg0U2M2UDR0K2RFdmh5eTVoZGJaU0lTL0wza0V4ZUZadE9KMmtnVVk3aUZWMjdFa0diTi91MlRieHZCaUlZQjVwRnpuYyttcitPNFZKdkE3QjAwbjVib0tNMDArbUhYNDRLRlBJd1kwalFEUUlUYjhqQ082d1pDS0NOWkdPazBCSVVCbTNhM2hCdHFXS3VRS2J4UHdTbGZORTBtajhiOXo3UU9kYUw1ei83c296ZnVhT3hWN0xkRDZJL3RXbzkwemVzYnBBWkw2Q2ovQ01FSlUvSWFLb2wyN2FJNG5sSGtjbE9SYjZCTFNrV0psMkgwamJvU1dDd0h6VXBmOGtzcFBzZ3A3VFdRY2RVY1JIUXdsOFdZYlpQRzVEUnp2SVJEWHMzbklmdGZzRjBFcWt2K3dtOVhQWFd5ZzFON1ZrYjdiV2VXN1VUKzFFOEJ5UkxzMmlzRG9zeXAyUnEvRmxYaTdsaHZPRUdCenZpM1dSM3ArbVdhUlpONlJIUVFaZDVnQzc0bEx6MEtRSjRIeG1FL3JSV2MweWZvWDkrTVlxbXZYMGEwRGdFWDdacEgybUprbnkwa3k5OTF3K2VXQmlHdXhEUnEzTWFlVnhHeE0wKzRVZCszVkRYclJGZnVOVEIrdCtIVWxlNXdGWGxleUE4MUwwZW1ONzVMNjZvcEVCNlNqMkJBTXY5aEhEMGFaYXVLazJPbHcwR0YxbmRZbHJxZ2JEZmpMSWovRXNOWTFmaW5tb3E5aHI2ZGt2cGJXZGJXY1hLU0dwQS9ZVUtDeEFPWnUxaDhnWmpwQ1VJcWJEbW9iWElUM1lGcFo0enNncmtDOWtHT0hZNEVwR2dRZTBpa29IdE5XRGV5ekNIWlBWNFhsYUFCTHdEZFE0N0tscXVHYmlZUm1lMUM4Z3dvRFp2dGZnYjlINUtrQVVLR0JxZFJmSHBvVVBkbCtERWpWQTVzek51dHFlaE1qZS8zemtEM21GRGZvYTRMallPbXpGNmdzd3RlQ1JUamVOdWdKbWhiOTJ3NUJuSkZMTld6MXpSTlN0ZzhwRlNWakdHNFN4dWJOcDAwdDNXZU5kSnNUUzlpd3hrSUwyN2U1OTRWT3RwaGxTREFnS3ZHVXovSVpiRXUzcFh6NWdkeGRsNHdUWjAvQXFiVnpRbXMyeXp4bGJZNXZQdDhZOWpMa0kyaTZRNlUvMHhPc1cwKzg4b2hObmlpZXkwZ0YxTG9LSmdBM2lLUTFzS04xR3pubkJIN2FTSXp6UForbGJRaldsdUxtb0lZVndwYUcwSmVBMGc2SUV3V1VVanpaTnlRemFmWDhpZ2dPUnoxS1RGUk9LVzdtZ2hNd3Y5WVlpcldHYS8wb0hiVmFyQVloeWk3UVI4WTdTaWlIRHAwa2F5NU5LSXM2SC92aG10MU9wV252VS9kbjUyWC9ucUEyWUxmZlVmOTBHa1U2ZHRjK0VyZlVNMWtCdXVlZWRLOTBrYlF0QmpyWjZoOVVYRlpsSCtCUXIrUWtGV244QlptRnhmZzJFL1QwSE1SQi9idDdqSXl5bEJRQ1lsYVo5aXVkazV5d2tqd2JZT040WGxsNUc4RXhobU9uL0NvbHg1L2JuOURhR3lvWXpnOUd6Tmw0V243OGRWY3VDYnAyYjlMeWZFb2k4QUZTSFJCMGY5YzNQcVhmWjNSTUsvQW9lWUxGK1JTcFVCMC9DOXlCVG1rMFlBdHVRZHFmZEFZZmdIKzg0RXhWMUZLWEZONHRLRWhjTmZjSndUaWpIN29lMVVwME9vdE5QUXFTWmttZ2YwQVR3SUg3QlVnUGpWS05JbTFsdG92SEZsRVB2TVEzMnNMUnp5QkEwOVAyZTE2QXR2UmxTVGdKaDFiVUZhMmVITXlKeEEzSjFFNlo2eENrTW1rQVVYTVFRQUo4MzNxbTlNZVFKa2xUYUt5RGpBY0hUemRxcThEZWQrbGlsL2ZRYUR0N1pQMStUV0RPSnd6SDNQV2FWY3pSUXZWczBQYTJTYnhnSXoxOG51ZXc5WndDd3JQZjVZWm5QY2ExaGV0UFEvRVVYa0JFZDAwc3lPdHp2UGszMERoODNmYmRnZTMxeVVQNkpVbENQRXhEWkhTMmF1MG81U1MwRFVNT1pSNGxVa0daUVpFSjFvNTZ3WXErY2ZoWDE4ZnRvZzU5UGtad21ZNFdCWThOSTd1TmhOekl6VWIzbGtwTnRKdjVtTndOU0NBK3UyMFJNRExob3gwNk50WGt1UHZPeUFvTGZFTTdocGhyYldGSTlVemQ3ZVVIVThObEtzd21PSWxXZEdObS9HUFZjS3BzV0Nkek4rdU9Lem5SRmFmVW9UOGlDU040MnJHT0xHTDJrRWpDS1F3ZmRtNmhrVWIySzFHajFlQ2VzNmpxWjYyd1lUenkzVFlIQU1TV0REQ3BrYlNuTVdkdFhYVkpwTWx6ZVptTkhVZXhJU0JXMkVCWDdkUy9JdE5CT2N4S2ZJWGVZQlduTEh1aTduMXVnZS85VkxqdllsS09HSjkxWHJPUng1aUw1UFJza05USTBqV28zTXptdDA5V2ZBZU9wT0ZoZTREdjdNckJ3NG8ySDlWRWsyeXFGMStOc0NjbUtCL3kycEVoWndLc3cyMjZHamR2b1FBdnRPVEo2QVFHWkpVSnJkdmdRTVNzRDdpRi9mUDQ2Z2g2NWpQNGw2VzBGaUZNWkVaK0FkQmNXeExtYkpRMnlUelZtRXlwWnlKQWhGWi9VbDUva1c5ZFRBV08rYTJvUDVMRGNjSURMRndmZ3RQa0h3T0xLWVdVNHFpNStyRjIyUHAraklKZTlLOUdRQ205eEhLd1VLRU1QbHJqWU1KTTFhc0xOSkFkbHBTMm11eUR0RlpZcTRIZW9raExHTGFqK2xveFhqajdDajI3SE91TzRvY2VFZmp5b0tpeG1mRzZtSytLLzErOUxJeFhaK01Mdk9iZ1J6elJ6MjZvR3VSNWtGaGJEelVSM1FseDBUdXVJVnUrbWlYeDV2U05CRG9Pa1ZLdXhlNkNVcjFtODlGTTQvS1dPL0RqRUp0MlcwYmRGdE4wOHhWVEYxdDZtQkpFdjhxMFYyM3g3cktpck9rdkNnRFcrRnV1Tlloa1lFVkE4QnNTVFBWNjc0eEhwek5FdnJ5VWV6R2V5OTh6N0VrUGFvZkM5c20rZ3ZxL0pDaldiRVZGaWpIOGpOdkhsVlRkY2xHaW5wYjBpYUJOZ05FajBTY2dmOUxCeUNPc2ZhQkI2TGxPbldKMkxMeWRYd2J0UzNpaFlZMXg0ek80dDZNWnhSWHovUytyVUdQZmE0SFo5cHZPUGRXcGwvVVRGT2VFeGFlVE9lcUg5SitUQjFxWWdlblNPUmJweEFrQS9wN2dDS2QwNi9tT1BuYkZOUjZpQWhoWTVESUY4WVViREpZZHVoSjZlS1ZzYitFMWx1UVlLdHg3ejZEZUFPNCt5WCtkYnZjS3FpOEFZNlF6Snl4N25pbWduNCtDZnlIUVMrYlcyemNRS1ZnYkRwTDJhNzdOdkdyUldXQzJ5Rzc4bkN2N2R4OHl4alRRUWJqbVp2bXg5aisyZ1YyU2dRNWQ0MzhtSUZoOHljaXhWODFiOXZ3N1JVN3F4UUNFUjRZMkNBbWhZUHpRZGs2V1ducGtyUWRwSDZPcHVhYUhnUCtOL1dMdk5vOXpCYzZVWHNuWEJUbWJ6eEMrcW5XVStDdkJNNVVOdndnck44NTgvSkttejV2VUdnLzE3bE8zSVJ5d01lMEJ2UEdoMHJoTG9PSnBqZzR2ZVFPdmFkYXZ1Zk5QT1RROUdyRURZdHhDeXViSnljQ0dTbWVDZHludG9BSDQyZVZIZVhmYjR5a2VsWDBGSzYxTDNFTWRFMDM0RHo2cDB4cnlPSE5aazNWYTk5WkdwV2hLRXJ2UEhUYkpiNmdGTHJCRlBmNkdRUVY2bTQ1MVdpMEg1ejVaWXVtSGZtQ3hLQ0NvVjNVb2M3VExuanZBeDkwcUx2TE1UWFBIYisxYUhBMHZsMGxBaTRJR2hlT3ZMcjFTZllCSjIvZXlPTHB4V1RmNUlWY3NIOEpTb1I4RjF2eDg1bjc5Q3NXTkhoVnUySXMxeno0cmpLZHJvN0hObDZaVlpHK1prbGRSOS9lR1JQb0EwV2Jic3ZCdnA5bXdtRHZ1VmRBcWdNamdFbG1NWmg1QnNLV3hKdUVoUW52Qnk5Z0I5QjE5Y3RVc3FCbFhBMi9BcnB6T29YT1JQZ0FGZWFCWU1hc2lXazlLNnRKZ2RPdDJ4SkxyTmpNT0kybTNsL2UwbThnbXRSdFRvN1NORmI3RTRQVWFiWXhmR0trWTFiOXhkYmo0T0srT29TYnBzKzc0QjE0M2pnK3I5ektnZnBCRVI5di9tM2dTWVNwU0FTYm5iMGRubGNUSHN1QTJZZzV3K00wWE5MU2syZHdZUERZOEdSMjVzZmRQcEgzb0RPZ2F2SmxEQkZJYTZHWEFJWEs0VnVtanE2L3U2bHR6ZU4rYUtRa3hNVk9wWHRkclgvdWtBTkNLS2hWbG5PdFpsTjB1b1ZnMXhiMlU0QUZkaXEvU3o1MFVjY1BORFUwc1grREZEQ0RmN1Zpd2d2TnVub0k3T3AzQjdHaGtsbjZORFBSNE9zV1ovYWZXRTh0REJjTUVHeFdWVGQxQUM3SWJWY2c3eWdSWGtCcEVTclRybjZERVBlRmNjRU1nTHJTQ2NET1hHaGs5aEVGUE9kMlJBS3BJem1sb05VWkc5UW96b0hxTHZBdFQ1Y2ZIRzZTUWtoK1J1MElyU0V0R3ZsQVJ5WERTVlZaZURzam5yS1FXY3VSNnQ5V1VDU3JXeFdFN3NGU3ZXNk9JcUlEMXBUTk5wT25jcWIyOXd6YWhhVm1lOGlTM0toL3l3M2tSS3V3YW5aYzJlem1ST0JYcXltdDFZQnpBWnpMTnJrRDZJeDhlajBhc0I3Z2VQaE9wTDBEajUrUm1jWGJMT1grMzl4OHNpb1NmMXN0MG9pNFNnMlUwZDE1Z1c5c09ncS94R3hXb1hMbWR5c2FURm1kQU9vZ0dueXZscXJvckhMeTIvTndSc3ozUSsxeFZTa2tiUVpleTU4dWszK3JZK1RkL0pKZUdtaG1aMlZzTk1YZzFpZWdlYmg4NnY4ZXJOMm5GYmNLQUliTFN5cnpDcWNIOEdiRXY1elkxT1RmZkVmTTQ3Q2RTTWRiSkQzMGRwWEFaRThLZzY2cFhQd3ExdzlHWjZLWFE3WmN3VW5wbWFtNk9ONzlxN3ZvZmpXaEtyczZUZE5iWFBBdmNmV3hoRVJvWHpwNDNDeVJBeEJnZ0ZaMXgzdENjby9YUFFFV0ltZy9qZ3NoM1IyQlB3eEFZQ3drYytCcTQyVDB6cXdISk9pSFdWbndRSjZZYzE0SXdpdWlsUWhZcnZwVHFkNllGa3k4SFhkVHI4cHozRE90ZWE4a25xY1pEYzN5QzBBWkxlZDZ3RDUyMGd5bVpTaUMzS3c0YWdBY3owRFRTMjA4ZzRjSm9SUTZ5TTBBczhmdTVma20xRERVSWFqL0NSZjNBT2QveWJiZTNacnZKTUh4ek5IcVlQMHkwOW84bERXRWl5TkZsU2luMXVGckdKSk5ZVHNaaHNNNFg3Z1orMTZQbFZwMlRjQUZvRENBVXZYb0VTQ2IvRGVQdG9kb3AyY1Z3M3dyai9RMFo0ekhKL3BoN3RQVjBKNFU3UEsrRkd5Q2k0NFJySlQ0QUxKemduTW4vTDBwN0ErS2NRYTZBc1hKM0VFTkhvR0txVVY0cjA3dGVwc09xOUMrczhZVEgrbCtUSGtpekpNZ2gyaTVUV1gwMTlpYitCTU1YdDhPM0drYlAzV25nM3ZFRnBmREsraE9nRFRQZkxOVnJHRmx1dGlQQWJTM0w4NnBjenRXbElHdktySEwzK21jNlY3U3RCc1RjM2ZvaVQwdDhrQ0Eya2kxQXRxL1Z4bFhudzlGWTR5S3g4L3RMMUFvaEs2bUYwOC9hNVdnbUlONkZMRWRrQzJ2ejJaMVlqNERJY2x1TURIUmxoL2VXb1ozSHNwSmEvOXk5cWEzM1BJWW1sVXBQYm5sM2RsdC9BTlp2WjE2OURUZjFUUWFFem9BTCsyS1lRaUVnWWxlL0ZVRG03UXNPYjdoRGFjRWh2YUdFRFpQdWZzOVF6MUFFeUZNY0hwaTVQdFRxaXRaZUN1UzdNTmZsOWRJbmFLOGE2QmROS3R3aG9RMDlHM2tUK2pnSTJlNi90UnBUOU1tYXZKMTZXRDd6dHVVYm9nR0RGblRXblUvVWVmb0k3K2cvWGludlYya0RDaDBWUS9CbXZsQmE3VHkyZmNHaWZIVkhXU1ZCTzEyYUVrUUw2MUJwZEgweEprL1FJcjVqb3RiT0k4QnJ5VXduS1Y3U3NqTVBWcTVTZThldWJQZlJKalZOTXBPbm40MDVLMUxpVWdCODlNeERaNmFWSXkyMjBVa2RIb211L045QjFWUS9lLzdBekF6N2VHQld6cW9KbjlNUC81R3BueUY0UDhGOVgvNENBaVlIVGg3Rm9HYm80dDlmckFLMnU1THZkd0dXRk1EN1hRV3Z5QjBTVDZqQm9seWNUVUhPZG1lQzM0ZkRaZVJMUnh0YWIrdEJhUWloY24zUDhiSVd4d3NGVlM1WDBhZ0pHVWN3RlU5clBnMDZEV1QzemFUQzhMbDJrQWU3Z3k3eVB6ZmlCcEtCNE9URUk1cURVemhrV295SGtnbG9ZbnF1YSszUmwwaTVtYmZlQUovUDUvdHlHbTBsa1FySnZZcWpiUTl0TjBFbWxzdjBQejc1b2ZRMER2WXdTalc0VFRFWElFNm9hYjFlazhXYmV0WGdwMm9PamlSQk4wdm1hWGt0US9TVm9oc2NxVVVXNUFoRDBrc0xZYjlUR3JLTE84ZzNyUmNIbDFNQU1kcmdHN2dJYURCYUJCdGpUUGxyYlNEc1ZhcXN1N29SdTdldWRyYXhyRTdyUDVRU0RRYTE5aXAvSUk1K1J2dkdSSlBsWnB2azRlM0dPRnJXdDhRT3pxSzNvSjFUUDlSVWptaFludm1WNjJIODZFSTg0TU9QRXRNKzErZVV1WnFIRjF4UWd1d0FFeFdRZDBjOWM1RnJqWWJIcXZWV2JTaHNBRXpsSS9OM3BHYmFLZ2M4QVN1aHZFL3hTdlEvcmdPbUVGZHM2RWVZeWVnY1hNd2JaQ0YrellIRDNwNTB0WHp4cFFrQkpjQm5CcFR2N3N1T3dxWVNsSkRuQ3A1OFNRdGlNdVdiSUdFZFpXaU1aNHU4N2xUSXJrYTdMYm5Ib0xKT3F4VkI2SU01WjcxMVMzVmNoUndBUmp0MU05aG1KMlZJSlY3NDErRk1PY1NhSTFyUmlUMDRBTndCQ0NacEs0V0MwaGMzWTRweDh2ZzVKQ2wvWnFsU0g5VEdtR2xMR2haWmV2elpEZXJvcFhvM1REbkcvalRlRVRwVVlCMzBVWi9lejFUS01jTnkrK1F1OEZTK3NrVm9GcnFaYjhad0RGc1pqVGxNV1N3bXJMODBxbHpkK3ZnMlhITm8wTUVBS2czOTg2Q3Y1dVp4b2JzeTIvZWprMFp2RElEWVMzOS9vK2xFRUNhejNWNHpaeUdKT1A1YWl5VkVlMTNCS3ZlMWN1dW1rU2ZuV29VUzdnY3FMdVdtd0tGSzcxTG1IcGxxcyt2M3FrMjBKZGNSRXZNa0ZuaGZJU1F4SjIzYWYxak5FeTBjMjZLSUFZQXZWWUtvT0lpbmFMUnJqZkw5MURrV28xcWUwMEkyam9TWklvclBwbVgweDVJWlY5Qm1nNkFvV0orUTZWMEdHRFA2OVYxRnpZTzhaZzRUU3NYa3NMeW8raURtVnAxRk1PY3VlazNyQ0daNGY5NG40Qm1maUd1V2pnSVRIQmhZNTgwMmk4WlFrcHErS3U0NGpNOFduWWlLWmJlZmpGMjdaS3JLbE9PUFJHK1lTU1hTRjlFQ2N5cnFRS2dFYnlGNVQyeVFJczdNVUhiMG9lbGxGQ1dXanc5RmNUME50SElGbjRzY1c4cGNQOCtGVkhPcnhsby9FU1dUaDN5NSthbGphQlNyeHpBRWVUSFJBeko3bWUxYjhDbzMxSnZMTExmODJDRUJIdEwvcTM1SWQ3WlVsY1ZhU21KMXRrTVlJdnp0QjFhelpwd3RpcVlwcGhTMXRENlVobWtFS05vVXhXYVJMUGtXQjBKd2hIaVZ5MmphZmRaMEdCUVBWODY2eXpYZE1UdFd2c2srNWhJNHF6RkhjVWVJWU5JUmNMMUVtSVJQMWxFQmFuZ1l2b3VjVk5aOTNqUnM1TlVpcTNZV3hwaFdiU0JCQmU4cGpTUldpRkZLd3N0WXpFWVFxSlZpYUFGdUZKQXljaHJORE1lcnIxWG43Mzl2QWRsVzJHRmg0YklLRG1DQkFGU1B6YUFZSnhhNjRCbE54QUN3NllvbVFqZGFFSytOMHFyNW0zeFd1QUZYYUlQeGxZMHlrT2UwWW11cXdkMytBeHBXb1dtWHF3V3djNHBzYU9SVFN0YVlsdmpxS2l6YU9LQTYrSUswYi9OdWFDLzhNa0NkVHlEL3RjNlVwcWVubGxvUHZ6cyt5TTk3ek5NZEFXSFVVYVJjNUROSFhQWEVqSDdITUhWQXNtRGpQc0ErNDkrRWswa3VwS2o1TVB2b1I2TXpqMGd4WnNYOTdsWjlPazFtaEoxYW85KzNjUitycmtuL2R5cnpnWG5qUE1QVTh0Y3h0ZDFtUkJmSzFxenZJOG5uVkdyZVh6NjVObVRDQ1MwRDhkcHdrOEhwWC9UT2Y1Ym12eEMveC9UNVBiai9SS2xVYnpZMFQ2RnU0YTFWTFNJbXlZVTNKK2dDNWVvY1pKV08vZEJRTkJRRU41VHVpcDViazhidW9XbkN6WG1oQUYxc3lJMXo1d3hYd2dmQ1Baa3U0KzFoeThyZFNta0l4aTJIWXVnUWQyS3lRaXF6R09DRlFVRVhWNmN6L09mMTNDNDNJRzNLcDQzMjlPREx3OWJPZkVqbGRUeVNuRlkrU1dBSWxyUml0WXoxMVkvTzV2Zm0zRXFaNHBtekZYaU1mVzRoRUJzRksvejFidDNLY3RmV3ZMY21TKytTeUs4VThlVGZ5N1dPL0p0NVhXWUV6RDE5SDQ4cmVub091SnIyNndjcGwrMHNXbncwUlA0MW9tMDdBM0NhZ1pRSUlnN1NQSklBWkFIS1MwSjJSVmpnbm5MQ2NNQ3ZrSmtLa21RTDBvNFdaZDhIcG1LaTVmVFdHam5tb0xOdnVnREZaeFpGWEZWTUtuaDcxVHFFNHNGS1JBZXFaNWoxcm5EYlNHMWV0dkIxRUVHMDVsT2FqVVJZeTgzVmJVQW1WelM5ZjVmYzVUTUJWQnJrZ2hNc2ladXR6cVZTbzNrdDQ5TkE4cE82ckpZVTVpYm02aitFVVdBU1N4YUtGV0I0bmJYRDJiR0pzdE9ZYjJTUTNZR25ZZ3dVNTkrOEdhcUx2a0MxcVBMWjNaY2MvQWlCbXdubldKTTNqWW1PQ1RhaEdJWmZvbmt3VmlJNit1OUdsQkVGYXc0U29NeWJwekdOL25MNDgrenRoMXNXbWhHektyWGROeC9FdEFVMFIwd1N3eDVBYjV4ZUdQdDd2YXFnR01FbGc0VTIvaUc2SzQwRnlLdjlQZC82NmloMS9sekhqZ0dKbUtZWVYvcGRwcHBpN3d0NzVHSi90RnY3VXMvMEUxR1pZcHJtVFQ0dkMxMU42bnBzYWtJOHF4OUFmV1dMSmJ5TkRiUjlYb3JHZDh2Ynd6TnFia1FFVHRuTjBaamtzNGs4bTAveFNhK25zKzA4NHE2V092T1V6M0ttc0ttRjh5TUdneHFxZCtoVDVyMndldEhDZm9QSGZtNTFtd1hEV0JManBkdGNMNnJiRzN1WnJxSzBxenpCUEV2cnlyZU00TFdiREtpUzluTXpxdTRpVVNrWUpkcy94dm01TlFJaTBCN1Q3NVZzT0hpM09RWVpqMURkM3NIOS9NdDh0a0o3VWZiUUtDVEtWR3lZYjBjK0VldEkyYTFDSVFxWFlGbDVpWXp0cUJKVXZYcEk0YWNBV3BwemVNbjlzWk83VUxIZHB1NXBnQ1BOelB0aTR3OHcrNnB4MlVmZkZCSGFpY29MS2NjeHFvMXFuT2hUbVdkamw2YTRJSHpFakxzVmNuenk5ZDFiWFRabTVGUjNPL3BISkhxc2xpR2FKVUw3Q2lraWtjajVOdmRjZXpiL3ptWGpqMFE1WUxWTmI1Yk4rNnRWUHRwS3llUGVEYWt3a1J3cXU1dkU3RGFUOTZCb25UK2svQmsrM21vQVlCWUhCRnRzYU5sbmYzQXEvVHdDRjFhaU1YaVJMcG1PVC9JajAwVzNoQ0ZBbnBPWmh1cUN0enNEc2ZIOXpYU1B2MTNEWExjQ25QUnNjZjR3VjR1RTFUaENGOExHKzl1NGFRMmdTSG9ZSEhYdVg5eklCdThsV05aS0hiY1R2MVFoTWhtZFFkS090V0twL05oUzRVTWFRSHovUm1aSDhkN000a0VmM0VMeStRUGUvOVFMOFdKMnNGNWdIZTZRQmtmWUc0Mkl5WTUrazlUdmZ5N2ZPemNsMkZWZmQrS244MFlFZ0M1QTN3S1lQai9QbXllektBa3NYV2dyZTE3cndSbnNuU1dvbGRWTFFaVVRpYlBOMG95K2U4MXBmTlJSa2FUbHVJVE1ZV3g2bi9rcjFzeEh1dTRFWTNqNXhvcDQ5ZjlYVVlaWWFCbnJmOVQ0NmQyY0lRM3QyZmxsZEJmY3lnRUljdUFIVkdxTlJOQmFwZlEwOVpBcll4VlFhbktRQzBiM3hCSmJ6dkczdVZaUlU4c29YR1lxRXh2MU84Vis0ZS9zYSt6WitkVjltbUtDbDZwZmZhTDIyQWh3WGtPV0pzY0h4WnZKVzJyTDVQSzh3MUJBVUNoK21oMlovTGZvTTdrL3Q3M2haRWtIYW00ampOaW13Zkl2WHVRRGczZUVPczNyaDVRd3p1eW1MRnRUdFE1ZEFabklMTE9VamVwRytnbkhRTngrMCt4dnRsbjFrVi9UK01SdGxSUStKNVR2RktzUFYrZ1YxSkhieXJJdm5zR2g1Tlg4Si9YaFNEVHNFWGs4WWVpS3drU1dKRkFmdnFwUmkzQ1pUaHZLSkt4b2h4NmdkNE1yRUd3bUxSN2taUzJpRXdXR29VYVljQXMyWjFMOXJRbW9kMUI2bGgxNmFJSTdGZC9SUFFCNEx1R2xkT0p5WGlSdkJnRFFMbHdVY0laREtnOXVwNkJmMHdGczA5ZXZ6b0o5TFdvUTZkOXQzNUJHeDQ4alFYL1kwYktjMnlEUGFya3dMVzFUcWJnYlVWRmRtQzdjeldWd1JldXZjUXdzVlh2Vmw1VkhwZ1NLUzZISDBEMjBQczI0dFhnQUVYNmxhL2ptL3NDbW5OZ20yRmhSb2NmVy8yclAwY3FNSnVoc3EvS0pmRGFGSVVzdkdyNjd3VFAxK0hBeUhENU1wdjZkYnozMUg1dzhVUHRSRDJ4b0VnM2RVRVIrcmYvWVZ3aU14c09WNkJNUS94NXBycWhBb3pzeUpDYW43THpqNFZ0RTdIelI0SVE1Rk1SYWpsVFpaVXh1MlVNY0RUcE9VdUJUUUZoMDVhY3owekNIbldHRWZDb2g2QkJadEFFN0cyUU85ck9CTkluRG9GL1RIU21qUXhLcnZZQTdsM2llWHNIUERlYkhWWGxLTEYvcmJ6VndqNEp3aCttN3hBck1BS3RlQVRUVTBKT2ZDaEl6Q041aXpnU2RGWXc3OE5uYVROeGlCTFp4L3ZoZy9jaGpTMkk1aFJ1dE80WEV2WThHeG9FOVVtV2VqTzRDZUZjTzBPRjJsTG1FQ2QxMmNCL0hCbzkrYmVrbk93RC9Db0ZrSlZIamNvN2FFQkxvWDV3Z3cvOUZ0d1hEeFJzc2lhdHpLOEJRVXk2RGNkcGZQRmFuRUtJVGdxUWFvVWdtLzIzNEwyVVQzMVZpb3ZqVFJuK3hZMHp2Z3JJR3pvcFJhdnhILzkxRU5CY1FvK3Z4dDlZRjY3TlF4bzJuTUVmUmlWRGZmUmdxMW9yZXQwWkxTY1FuNmExVldPYTZBeEI1MHRsTHB0KzRDSHZHQnI2cTBhckVaZ3A5NzlHK2t2cG9EUDg0R2MxZXdtbitCUlg1UGtjbGp6ZzRRWWY2dHBYYms2Qkw4NThtUk1xSkJZWHlXU0FyYkpvN3dycTBlOFZOWGZFL2hHUE81aHdCa3BYbUNRaEpBNUUvTnpBMS9aZWRoT0luOGt0TGJkMHQxT0diUGQ3UDRzN3J0cEo5dlpSNS9ORlk5S3ZZeXVNNm1SWm9QeUt6OTFiN0hpTjR3ZXJPdFBlL21pdE5lYWhwQWhYcVFuWk1zREZwc0pFNFpYVGU5RGpRalo3bHhJbm4xdUs4L21RZmRMaHBlNVNTNjU4dkpucE84NFJINnlSOXA4aFA0M2VKMDJ4OUlvUmpTZ21jRUVDMjlyTnJzejF0VitWbEhsK0lySkZwdjRrbXlwTTNoWEpXbEF6ZlpRb1lBRjd2NTBKbjg3bE03eVViTkg5ajdHcS9XZlNnSFBPekJvazRzaFhkK21OdExIYWdrUE5YQ2hlRVJSVmJ6Wjdad2twL1hqTzE0TllSQm5SQ2tWaGpmUlM1RXpkOWUzWVJEMFYvRU9QdU1BZmJDMEgwRlh2V3BZMlJ1d1Nqb08yTzg5Snh5bWdwMjdRUk1KakxLck5EeG10NHV1VXJkVFYyc1llUzhja0IwM3ZobllwOSsvYUxNOGVoaE45TFpHVUszQlV3Y2ZnbE41Q0ZkcUxYWktLYnBwelJhZ0tNWHlSbUtCRk54U3JBZzVBNUtoNU91M2Y0N2tCVkRCWkRndEdBOGk5dUpGTkpQWkxXZXJwbHp2T1JTSW5VTXJScW5wRHg4NDFiZjlsa092YzBxWUx6eWQ0cWIrc1IvcHBkSGs0TGJGRkI5V2lhaE4wYkpmVkFtWDJzR283UW1UNXNIYnFnWnNBTkVxYjdPVmtUb2I0S0k2UVUzcUNUVG1zUEU1UE9mOWRvMW1zcWtjSjZyZkgwdVBSVDVwTGVVcWVkamwxZ21OY3lwam5CRldJcHNZK3VjaXVaZzZObTE1c1hhVXVFTFVxUktEcmxyeHJIZW9tZCtPOTRGbldIVGZBL21lSVE5Z2YzSVVSZXpsVFR5ekY3L3Q3a3dmOHg2RmFKanVFNHlkVEZXa3o5MXpBSExzc09CRTFaNWIvVUxqc2d1RFlKNC85YW9yUFQxUEFmN1V6T0JpTlpBeEZnZ1h1K1h6cjdqcG1MTWpvVHF0ZGNSRS9GRUMwSktKZUJoYmx6cStiN0RVdnFTY2pLZ1pGd2FRTVExRDdWN0RFM0E0cUl6a0haWDZkU1k4YnZHd2NaVjlOZTJxRFZDMVZMSEt0YkJWdWV3NFZsYTdtSE5iR3lWNmYwYzEzbXRVZE1HeDNWQ3MxeVlqd1ozYWdlcTFSK3JlWEN6T3pMNVpaZlBYam00ZEJkU05Lc0liakhFT0xjTEZ1WHBtZkx4ZzdSTVBJZUNxZkhlTWlEZE9Gbjh6UjIyRUZEeUI2QUJMcHdPOW1yNVhTd09Mb0FOa3VrQ1hYUTNWQTkxK2JmL25lcUpqZS9pTGN2SDF1Wm0yaUt1d3NwTTBBaFZZZmhrVzF4ank0YVc1S2tqcEJuWFFqWitjSUZFVWJ3R1JZMzhML0NiczJhbHBQdjJ1TjJ5bVlzTGNpRDRJZ1ZPREZqTUhUWkw4UGVHNms1TC96UnB5bVlrNE83eXF5cDUrM3pjdnlnTWVJeVp4VGtxVzVPOWV1c093Q2VMdE9DUm5EU0FpZlRtQktoUW9HdCsvMjVYMG1FcTJzR050dWZZMnRsVmtGc0hvRFdTWFlWUGZkTnBUNjEwU2pmZHYvZEZlVXhXbTFaeHRLaXZjVnE1M0hnSVhQRVBubGRVQlZBa2hPYU5PWTlkR1FxUmhlaEdEcWNzVDJnbHpHZXRYZVlBQTV2VjJ4a3Q3V0JkQkp3ZTBJT3pBSTgrNGQyUStaM0JVZlBHN2VVSk12U05BRnUxU1owUkZOWUlmbkhyY0ZCeXQ1WXNPNEV6d2dTSVlnOFBJdVJPSVltMEgxL282Nmd1eVp0SVJlYzN1MkxuSEVtZXREb1NZdlBZZnJLdDBPMndEZkxxeVBUUG95d2U5Q29jdzVZMFNHWVNnUVdxSGVJVzBYMk5oa09BemVqZDNrVzBMRWg1bE1UeUZmVWwvSml6OG5pdW9VWjFNRDlZK0F5SnVwcHVndis3UlJQSlExQ3JOZE1ueXQ0eVE1Qi9XWTFTZlR0UUhGajVjZ3Z5STg5TkVLaTlOSTA4VXRGdzZRNEZkcWZZdEV4emNFZE5lcXFSUmhzd2dOS0dWcVgyYXdSc0ZnQkxQY1ZzUXhxSWp2QVhwUGVPVXVZcENLNkc0alZjQy9zRjg3WWtjUXZZQ1l2MHFOODI0UHIvMVBTcmhvNmgvUEtycmZpSEtBTyt6RHJDVnpCYThCblpnMVY1cjVwZTJBNFY1NitKTXI3OHRlTWpZcGE0YUVEWmRqamdNaXp0VVhIL0huckFoSWljMm9uUFBtVHRLQm9vWHFLdlVnRncrWFZsWCtqeGo4VFI5bmlWcVVValVQcWN6cUd6S0o1NmQ2Sy9DV0R6M3NoRjFxYUF4YWhPaldtdHkyNE1mYjNDanhJNW1aYktDZ3BlWnI2dG5ibkE2Slg5UjNMbnZnRDJ2Q0x2QnhFNVJmUmZYR0x0U2NRMjdBdEN0QkpSQ2Z3aFhtUmdjL01mUHJWZ2FCT0UyeFlLS2tNZXlwSGx1bitzMmRLL1FtRElvTmdISzFBMUdRY1c3VGFIVndZZWRWRnJDME9oanBGa0xpUU1kUEdpZXNhVGxpTTVUL0VJUmVDQ3VBRDQxc2k5NTBSYVRMTnJqSnRFU0UrRm43UG5YRGhxd0ZJNlVXUnRzaGZZY1hTZE1TYnAwNzBpRUNFSGZ2UFNGVmV6WFUzZXR3dUVzTjNLSWVlbE5HNjBjZElBdElEUVdwaytKbFA4N0d6Lzd3cmZyeENiMUN5TmxyemFXNkhJemYvbm50NVZhRWtXa0dMcHViQXdNTmxZb2FXaE9reVcxdTl2Rjk4VXZMc3MxSkwrVWZDUlFaMm53MVFaYm95ZHo5aGlJMWZRN0lmdTM2TTJJbkkvTi9xcVg3cFdTNkNRbFFpRmtEQmxBeGQ5OEJEL3lFQzh0UTVGTy9EaDJ1bk9pZlNUeU8rdUxWZkRNUG9rdS9UYStBb3ozZ2ZnalFVTkI4NysvWGM0VHRWTXZEcTZQamRDcHJHUE44S3NuRitwaHdSMmdjWW9jM1Q3V1lIL3BKc1lsS2RMWWViUDNZN0pQYUlZeGE5Qlp1RGpaZWxZdGZMYk5uRVhuWjVnU24vRU9wbHozOFFGK0dOZWFsZDU4RHBJMTNFQSttczhkSmJEZW5jZVk5NzJ2TGhIblFaUWtDengzVnBuakNEWEJrOTgreW5EQ005cnltR09RbkE0TEp4cjQwRzJ0RWtjRyt6Z1ZMeHZBczZWSXN5Z2VmMGNvb3Q0RDhkRGNDV3V4YWEzK0czbnlUcE03d0psZFZDSWdFSzFzWUVEcy8xQzdNV3NPT2hCWnpPQXNQL1VVcjJQSDJmbzljVU5ZN0d2N1RBN2JhN0k4dk91YXdpMktEMVd3RXFYcTVpYUduNWdUbU1sVG9WeG1xd2FobXJOZnA1blQ4c2Q0NkJIN1Fsb2UwNW9qZG11c21KOUV5UXVKVmpkTW0zSll6UG4xK1cxREZaT0NRaTY0WkNNUTl0bkdOVEk3cjBKZlBvNHNqU0pPT1pvU0hzOEFxZDNoVktXUmhibitDd2RmWXRNWE53Zm1zU1k3RjRTaWkwOFpibTc0WFpld3JoQStLdzRzV2xhVk1COFI4SFY0QmR0ZHVyNEdWZFdjOFZSUmY4cUlNbzJGRW5VVHpPUDNoajBUUzNoY3JmSFI2N2xPV1Jvc0w2WHR5Tm1ZMlFzaFNZNFRSMHBzNUhIZ1JYaHcySUxYQWZtVUFqOGtVTU53MTRJVEFqY0NwazlXOUdDT0ZYVWJ6VG00aVV0NXJBaHZ0NElva08zdzJzaWdGYlNUWWVuSmU1OXV1dlNISEQxY1lROEF4ZSt0c1dxdlpCMjhjUjNZSnc5VlJOa0pnNlhuaWk1dHZUTzc1NENvcDFwVXRhUGR4S0UvY0xkMFY4bDI4V2ZCUElkRStPc1ZkNjdoTEJkMlhJelg0Mno4RUxwcFZtOU1FZllhYzhCRnExQWhRRC82dENRY1I0M2F2d2RlYytqSDRYT2Z1ak5vVCtoWU53d2Q2L1hLSHQ5YjV1OHVWaDJsMVJjUlhNT3NHVlBXYWNSSVUxcm4zWnNzcDZydUFITXZBRUNsV0c1aU0wM3I5Mk9RNGFFM2dIVjVRdlpwMUJXTDh0OUgwcjBzQkdieVc2S0QrK1Y0WUkzRGtISzZmWit2dmJsK0J5M3RpaGV0eXVwNHlSZ0dmQUtaTENHelNMVXA3bDZBbGJscU9uUTBOSkdIb1ZLNlpnL0t6ZUJ0TXNhK1cxeU84K3pFdHdSNkVBc3hJdWVkVXpzM2JSRVZaMXpOcnJFekpIQ2Q2WVhTZDZHVFVtK3VzNmtkY1A3cjhoR283UnU0eWs5NWdWa3kxYzVYZml0MmpmMzJqTk04NEI3dm5lYngwVzBjOGZHcUZPeTJ4ZExIZmJDRXk5a2NGR2x4SXJpNGFvK1p4eExhL0VGNkRBV2lVbmh6SUlMMnN1RjA3VUUrUFF0eWpvNTUxbTBnZGpwU0hkQ05zOTQrZnhlM2VnRkd1RllwMUVORVVnSjRHelU4eGtZZGdyT1ZkVDJEQiswb09icERFRjVpUWRXcjZGNWtTNXVocXVkV2lLNUlMTkhMM3hESENISUVPUDhFZnhRWkN3TGluZmdXNFZqUDdzckorTTBzb0hmQUh3M2tCSjRkRlZjZTBmYWw2RTRBa2lDREd6RHVZZnpYbHBObXk3cjBPaFdLZm9CTHRXUXhxVmliaXZOTDA1Z3dIakNsaHhXT3EydnF1Qk9nNFBNMTdLSGpzQzdWVnpPTjh4SzRmVzZNMDd6cVZOUVZPQlhIbDFkbHJCTlNVcytIVS9vZTZlQ0NLS1RVbEd0SmtmWW1QdEVxL0Z4UDJsTmRrVHhZcUY3YnQ0cTc2cjNJNWREb2NqdTVTMjhqTlZNNitIclB4N0VyajRlM25DdGVuSjc0ZWh2TUNPZkFRbkxZN0NiditSKzBTMlNQd0RqMGRUd1RMMG1ZSm5zeXdEaXloZUlqaGhDK0xWL3AvV1I3K2hlaDZ4THZrb0tUbE93bFRUS0ZJSDRoUnYwSDR3dXBlVHV6a2lGVDEwTU9EUkEwZ3JscGJEQ1pZMVdIOExYZHZYU1d4bVBvcnViMDhwL3BXaWRVZkFta25JUER2ZUcxclJ0blc1bmZLOWFTR0ZtbFdMR0RSNk1DQ2ZyMSttS29PWG81dmZSYWRHTEFLL0h5YnFDMjZ1a2Q3T2daYkNPbnU2L2ZTZkFjSWVja3REYlBzMi9teDZHVnBxb3FDOWZmV1hWVEdXK2hpam9HTzdpSWlSaXh6Z3JxbWRDakh6cDgzOFUwbjRsSGZ6L0hvZy9SZ01mcTdEbEZ2TzQvdGN3dXo4ZW5CbytvMEJvdHNNNXVqVzhjVUgxWTl0SHRoZU43NlVBdUFVcFNoVFBDN2Q0bTNwMEFPK1hIZnlYUmpyTFJHNTZXN2NqR09CVG9jUXN2cStVUm9Na284bXcwQ0tZQmxrWVRIamlJMjVpeE1xYXFrTkxPZmE3Rk82UXNENnBrM2NXQmJhT1h2UzJNdmRZVmVmK3BFT3lrTnZXclRDSUNCaDF6VFhjMmE4aDkrdUMzTXJjbFVuSC9IMlAxWUhSL2IwaHl2RklrUG1OMlZKWFNvcllNUFVRM0R6eHFGdTkzbmxVSGJKOXZNU0R2RGtZWVhQMUpEZnRvWWt3cDllUnh1SUo3SDd0VmJCUEREMjhWeERSTzBteFgrclFKLzZrVnhpQTVFU0h0Z2hJRkpnTzdpMmZ5Z1R3K1hRemRHeHZkNll5eHVJUG9hM1VXSThVbHdUcVVaRDNnUUlSUXNFUUwycm5oWGx3WVY0bWtyWTBZU3V6d25xQjhLblNoSTk2RExmYmlybFAxSXRoMFJPOEJqbExJd0pnbExpTmJhV05oNXlwL0dpTWMwc2lYWjZ0RitXY0NhN0R0WVpVRTNtZSs3aDZmT0JOVlFkNnIxZ3kvWWEzWGs3Y0VSeVZ4N0kyMnZaNWFLSWxldC9va0NyTWJ2NVN0bGgvRjBlaDc5MzNKMDBsbk5MRWo0ajNLQXV1YXoyOEd6NXc2SHVPVVhJbkhaK001WUgyMCtrZko2ajFVVnpYejhsQklIeUpXZkRzbkN1YWs5cDAreWVNSUh1NzFnOExHbk9QWlptTTg1aTFvM3JUVGE3QitreDdYWnNwUmQ5eE94azY3RE42MzdxSlVKQVNoemtUWkRtNTEwb3pSZVRjdGl2eTJHcm5rSk1xdGw1bmRpdjd6bnhOcWVTdFAxa0tnNndKYWdhTmp6amQ0QVdhTGl3ZUFlZnhwTmtESWJ6TXp3T2RNZyt0R29rZzV4cGp2b3NaZzQzbm9JYkI2YndrS3JYQVJxNm0xMEZhM0dSb2N5aFRPS29hMCtValdwSGczM0hJZ2RVaEU1SGFQaXhSUDJkL2xicEdMM0VSQ3hNRWlkMllEUXVJWVpoR1JOMjNQSUZrQ2hoY3ZIZ3B4ZzRlaU9iTEJrZ3RMU3UzdCs3STRmcXlyNDFPREkzODhpWDJLZ2hHVGhnRTNyMEk1MmxMamU5K0ZuU2NTWm0xSzRuSlBOZkQ0R3VyR2RaeGhSeXRCTVNCV2ZYL3k5YXF2UEpYSXNNVjRjOTh3TVZ6MzhJTEwwZ3NyY1lYWnppaEdFNXZBWFJvcE1XN2d5MXpoWllrVytRT2EzUmNFd2ltc0I2dmxLTFFRcVVEcmZ1TTBpSTd5VzhIZTB2aDB0RDBQV3llVWdITkpBMVQ4VmsvV2wrQ3RQb3M1ZjBKY3FudENESEpDc2h4MGcvU3V3QStUaGtlMnl3dlBLcGVRSFNXaTg2eGFzV0xHUFo5aXRSS0V1TFB5dE84NjVBZzJCYzFrcllqcHZvZ2VlK1NyWkNtVWI4T2lWQVFaa1lrUEEyWjcwRDh5Q3NHQ2M0RzRuNVFJdUZhTmI4UVdLQXFSNHh4WDFQQVQyNXVHYUE1NmxFV1JsZDQxQzcyamw1cTlCUkVUcGVROGdSTktjWTN6ck1zcE9tc09RRm1ybDhtZlh6eWNNQWU4QkhMVmNuY1F6clRITHRzTElVeHFya2QxVnpKVDF4NUJJVHF5VVZmNDBvZXRMd1hFQkltMDl1ajVHSmQzUEU5YTIxT1A4Z21BRDNOMTE2YjA4MElqeXNyWC9CZy83bzJmU29Ia0RIcjZJdC9RMnA3b1BJV0dWNWQ5WDZFTVpSdmFldUdsdXhUOEl4U09xNWRvK0dFNFAweElNSDdwR1J1b0R1eUZjZStNMXJUYTNDTFMzdnBPb0ErUzhwV0paa0t2QjI5S3M4YmdoQkgrc3J4Q3c5T1h2MERwdEFobkJUYmdESUYySkpzeVNaQ2NGcmVSbFZOOVVLcUp2Z2FKdTRWR25IemIvQlNKK2dLT3U2dnhxWmpCWkdsSitHRTVaVnZmVUtBVGtpL0wwQk5MaTZCbnk2eW1JRnNjN0owQ0gzUzFmOGZJTE9CdlFuWE1NMWtadklvRzNuSHhtS1FCUVVQODJBazZaRWhmYWtkTjRpbmsydUU1Y2lCWjZtWWFCS09udEd3QWg1UzU5V0thVlZ0VS9tZGYxaDNjTnlSZDMxN01jdXNQRjFsWDFIMFRjVkV6aldLUi84NUt0RXBOREhHVE5BbTQ5MlMwdDY1WmhtVk9oMjkyclE4THlOUnh2aWZ5TlB2TUd0S24yS3hqM1g1N0dMcVhEQXA4clRzVUFRZGg5N1p5MUFVMVZ0SDFJNGN4VVl1MEhYem5iRFBQVDhPTDBzUlNUbTBNcVp3QzF0RzM5MFRrR2NXckZUM0llS0dBQ2JQRWpwcjRMcWdKZm9oTW1CZ1BXeDJIZmtXRUtSOWp6Q1J6cjZwWkZGdjZCaFBWV0hsQTFTcG52V2hEejZ3eUVWc2JIREdnMzBVR3BYOWFOSjBpRGFtVk9sU01heHVsY2Z1ZHRjdTR6c3I3N0xRdzdHb051MnJnSjUzYTZ3QlU4VzlVckpLTVBlRENRQi9LbHMxWlBEd2h3OWJLMWM2SG52TUF2c0VGUWRlNlVUb1BVRkNmUDBIa3BRYUROY1NFYkYwU3dzcFdXRXhUUGNIVERmN1hXN2R1ckNrVm1qOERuNEVyaURZT1lxSmFibGgvckJ6eW0zVlExZ2V3dnFMS1VQOGhvUVQzUW1jODFWK2EwY3d2Z1o1Y1NTU29oaUZhdnBvazRGYjFRT3J3NmtPeVNKQVJNWXZqYktubWN5TjZMR3pHcGhkWGRDbnFoVllmUmR4ekg2NXZrR2pyR3VGVXRhL2NSL0NaS2Vkb2QyT0l0RDloTTJyZ1Z0a1dUaVpuY1FsaU9ndkZPR1didHVEcjhwSktrYTA1ZERFVWowWFFYUUd0Wi9nQjJxenVjNXhnS1FkamVsYlA3YTZEMFF6aS94ZlVVbThJRUp3ZDQzZ0dTaUZwM0ZXcGxmeTVuTU1kbnY2VkdCUDNEalNqd0lqbENITDQvRFhTZkxrMXVzWS9KZ0xWUDY3Ukx0dFpHMUJpT2xIY1Rxejc1ckZjZjVEQWF5Zjd6eHVzZmllVTVtSzh3MWRtNWRSMUF4VVAydnZ4Zm5XdHBSeXNJR3lEc0dIN3kxczl5VlJXOUFaOTZORHhPZ3JnbFVTbDhQS01YNXQrbkUyeEQyUjJ1QitxbXRJdDNHVWNEUWxyK09uR1ZiSWtOYklST0kwR2Zyemk5RjJ1RzRQdHBIT0RaNFJKd2k4SHAveWg3RzRwb1kvaUVjMi9YTTVyUXNrYVR0V3JFd2ZoTkJETG1BL0JmdGdyWSsva0xORmR3bUJzNkNnWWFDM2kxUjVqaTVkZUV5SFVWMGp4T2FQdjdPQlBXVUFmZVU2dEhFS1FwZ3RJNzVtZXVCZnZPdmNwMWxFaEZNcENacXNhakoza042dlI1TWIzZG9ZVGdHZzIxcXBnT09KMm5Fd3REUG53dFhOUkFSdlc5VmJrRGlPN25PTVFKNHQ5U2ZTa0dVQmQrRjZ4OFhGTjhwWGFCM2t0RUI1elppdlRFS0FKZnNHeFY1SWVYOVdvK2NlNVlUeHJFUHJzQWZrVEgzUW8xNFFpSnRRS1dEeGt0Rml3QkVoNndmcERwOVRDbWZwQTVKbE1ONEVaZEwyaDZ4RElqd1cybHlSK01OKzRkL1pUNHl5V3ZXci8wRTZRQzMxWFBUMHQzNGREQWVLZGVaY2EyYnNQWHE1eWFSSUhScDR3c25vbTFiWHlHSC8zbGxjTStHNlRPMWpVMmwzcHQyaktIT1RkSlBkWjd4MEZMclhMcmN5eHd5MlJXSnpHMGZWbEJaZVNZaXl2V3Mrb3J2NWxFaXBlb0YrU09pZ0x3V1FNZ3YvZlZITTNCWTFKOUZrOWg3UXd3VkZ5elZOK2w3UloxVlhCMmV2OGY3U0xJdUs2WVFkeEoyMWJZYmFFdXp0VlIxTGFmdCtSQm9DUHVkZ2l4M2xwMlhHQjdYa2pqV3JkQWZkZUJ2WnVSSHBNWXR6Unc5UUY1eGpIbTdRekRyTjhOa0xDYi9KaXFDajZEcWdkOVE3bmNiNTNEMjlBWE94OVNwTEVVZVdjS3dxdG5oL2lxQ2hiczVlbVdkc3JZY1ErSjEyM2Eydy94aGpCNlI1elBDb0tjVi9rNjQ2dng0U0UxQWRVVjZrZ1hlYURiY0ErMERWeDdrdENPazhpSkhHMTdkc09CaXRsVDRxS2tPY2ZRdEZUTVo4d2FqcTgxY1paWDBaWE9GV0luZ1lMUkViZ2ZsL05ZTmN6a05lL3Y2N1A1UXg5aUJkV0I3anZiN1U2bXpZNTNZRm02TXpOa3gwT21Rd0ZrTkZVR0ZJSjNLb0Q2RzZMbEs5VVNERWswMUx0Y1h4VWpPck5WcVJ5NzZ0eFpSbW5ia1Iyc2dZVTNmNG5DaVgrOGlqVE9SMXdzQm44YVY3UktKWVJINURiRXk4Zm9wNk04NzV3RTFYQU5RRWlaZS95bk9HK0Q2elRLSnVCZHluTDMvNEl5Q1VyNmF1czl3d1RXVElXNUZEcCs1MFAxeUFpd0tnZnpacExFcE5BU1FsbDU1U0lSY1c4UFJUdG5SZWZYLzEzUDEzZWYveERGVkI3OHJ0Nk40SmJhcGN5aGpFaFZYeWJWWjRoMktxZDVRRExIY2ZKejlpY0k1aXNjamJQdWJZanI3L1BXMnFMMmwrRzRIVUlSU3pIS1VuTWdKOW1nd2dEeklUaXVDOXkvQ3BPY0J0ZGhEMVJEU2lPeTY3Q3JDdEFSYzE0TW90OTRpZTVnZnZFOGNZUWliNXZ5cUtGRkJqa3pFSkNBaHdXVVFpYi9ZcE5KUUpxd3llbHIrSDBKcDNuaEZ3SkVnL2lBK2JCYUl5d2tYbkJmVlVrTGkvSUV2ZE80TllRNFc1REM3RVdDNzExVmJnQ1VLSFNlRXFveUVVZTJDSTZPZWp0STQvMTF0UGx1bTJ1elJSb3RId01nN1dMUmd3R3FhZ0FzLzRZWStMUmlEaDhqWjc0NVRkcDFpSGJPY0N0ZURRdE1JSUE4NkxBckxPeGJ4b1VSNDEvMFRQT2JRejJyaDhMR1g0ZkJLVXNJaXFJT2lYU0VQTVdjYUhsUUJ3Tlp5bURYYU5IS1dVNTFYa2p4TlZNTFhtaUxLVUFzbXdYdmVuNTlOL0E4WCt1WHdTZWRsclh6NFpVOE0yUTJYMmtHa2hZUTUwT0tuQ3k2YWpPUXB1bXBjZWRuY3Z3OURNRHJDL3NUOU5SNFJEMTRvU21FOGlZTnA3QjJEZVBtckQ1a0hWL2VHQzhjWmlxOUtML0hzM2svSHZIKzdoNW5yWHNPenFNZUZ2QXAvemdZSHExRUhlMkErYjkxV2E4OFZ6Tkl4UTE1VHl5TkdIV3ZFaWpJWVIzd0Ywa1ZURFhyWFZXU0tCVC9aTkNjY01jS0xkazFlRTR3V0hTNW1aS1lVYnFWcVZrdXZYbm95dGhXSlNuWGQ5aWh4Q0dRWVFGaW9abWxVMWxBaFd5L0psY0VCZ3krWlhKVm5zaVZLaXB0VUtWZU85L01RV1RUL1VVSEEyQ2x4cU82NXZQNlRGT20yb0xFMTJBTTl4QzZpRUFtTTF0aGlvdjA4VjBtZTZKVTNKM3dOL3UyR3Z1YWx2cGRlNGI3bi9yM1hjWGRZRjA1UVd6MjZUQzl4OENHRithbFEzMVoraUdSM3F5bU1Td0N0cWRvak5KY25sR2ttQ05IWGVsdzI1dkFKVmFodzRkdEp6Zk51TFVZcmhCbGp4UmVmbHBTMkxLWk1aZnpwbkFzaG1oSEVRS0c0UFBLYnZaZFdUYkhlaDRmc3lOemxOUFdXd21GTHNEdi8zRUN6Sm9aZjBzdTFqS1NhYnV0b080anFFbHJaQXhWcCsxcGhFMERWUG9veDhLRUxRTW1aQjJHVzBjbjg1ODdLNFNZbnlpTXBkSHdpUTA2VVRvcnQzb2J4UmE0cGh2emZIaGd2bGRDSU9zZllRWTJ4MVlVK2w4RlYzc3Roa2RtKzVtamVwTDJJczlhTVRyenJLanhzbW10UkpDQ1hrNnl2K2k0Z1ZyQVFYZFBCVE0remFkLzFKR1Y1c0xZaVdlS2pxM0p6LzB1aytCYnFnMzQvbXI5MnREcGE3WXpLdmdRb1NCb1hvbG04eTJqc251S3NodThFMWlqWVI5L0RGMTRoNThkVnpPTjBFeEZkdXJHK1Q2NDRqSmdMMFlYK3lkSUNzMmNoL0F0OTF3S1JVOUNQbGRsWW05c0cvR2ZJYThZTVBqYWJPRW11SEJUcytyVzZmcmhIdWt6dE5IZ1dHZnFEbmFONjhtODl4blpTMXNIYWU5NForSExYQS83N0YxVTFsR1lDK1l4ZEtacTBQTklVSmM1SjZMMlE3TWlBREhwMTJkbXhmV0J5VHAwYlBnMzUxajIyVytrd0pOZGRrQXgrV1N2ZUFWeVlocTRHUExlNlBYL0Q5K0tIbkN0Ykh5bE9BZDY5OEYzWm9ZRksvTmJORmo1SlRKbE5Hc3hWWkVWUG5QU3NzOHE5cVdpZ1FVcUpxNVBGYWJjbXBxdThKR0pDc3hmUlZCV0dZMUhMdEVTRERZeTM5WFFuZmdsY25BdEI1KzZaWEZFRkJHUk5qUWtST0NoQnFTWk9lMHAxNjlqVkJmK2xra2tnWjNHZkdkYmczQmZVb3QrMWVtOFc4SWt0dk1mZFJwOTVTWkM4L2pOdzBpTmhwTWJDV0pJSUlCNDRjSDJvRHVFbnR5N2JQaFpsV0hiZ2ovMHZ4Vm5ySlE2djIzS25LeE9SeTFzZC9sdThvZm1BeDR1L3NjcjE5MTRqb1lFVlcwaXRESmRlUzFPb3k4K1o4M0dDZVdIdGNleEk2K2N5ckRIc1ltekZlUy9GV3FyOUU0UGlkZ1NkKzVGUmdpZlU2Q1A0UG5OWFp2eFJ3Yms2cDdNNFBsRXV4RWNSRGtyRWlnR0dwOWF0aXk0S1JJSlVTdHFISzM1YitKayt5SVJWZG9KVWRUREk2S0JhVmgvbmovdWtwSXE5WVh6cGFiTG1RdUFPOVlqTTc0TSt6R3VlUk5ESkZ2bmt5WWxPWGJzbVhmNllwSE0yRk5FVnkwQVhwYWthTGE5UHpDZlJTUFlwQnBDTTV4VnE5R2FIMkdsM0ZzT0ZOM2xybiszcnREZlFoc2JxMzNpb1o2MW5hTnI4Y0JuaEJFTUdXS1JrWkZ6SnczbXBNSGlUZTlnTHhGTmtsb1M0SlpOaDlYSU9WaHJjQXMzYkhpelN3bmJqWFJvcUlEeHlBRDFHT3NkbitSU3FVTnlObFlpbGJiSWJDdGZCbk1uRkNwVjJlN1dSNU9WRmhyZXdCUGk0V2VsOTFudVZWY2F3MVpMbjhVRXpheWIwV1VucktIRU5DcjBXcFJ2LzMxemM3N2pROG5uUnJoTkZKRmtsdVZVUUl1L24vclRDL3dKTzFiSWt2WDBHY0d5SkNWVXgwaGwxbHB6aFFNZGJZc2lVbGsxVjE3QzZDT3RQeWswcENqZzAvRytNUXlYVGZYNW5xMFluejF3bzVuZVp0WkJ5MW9IcVV0Rmc5VS9tdFl0R0dTekROWWpNZVpWSko0V1ovcy83anFNMFlsTnpMamppMytyWWYzRHB5MHMydEJXRWZONXZWSFN4THJPVk5NV1NaT2x2Z09zQUNrTW04K2ExdjZPeGFRM0J2OWRrcFhRUmFjVjhnNlo0Nk1CMzcvTWl3YXY1bnZMQVl3MW1OV3BXdEJOTm92YXo1TE4rZFJGSW5TNFJxUDV6V0htN0NoU3dLT3g3dzJSYVM5eEFrbHlmZzUxMkYyQjdBNlk1amhTQ3BGQXcxakwrRnBQUHRQbnVQVTFCRnhkSUlrWkhZQ0NCY01ONDkyWmNrSUVUVlpHRnorSnRnVDUyNEpVSWM5M0Jxdktnb0xOeldkTHg1OEYrNHNldzlKUVUrdTVyeldVVSt0V1EyYWlKVldQNjQxU3ZmRFZFV2VPNXRkVG9VLy9Qb2NDd2FnbTIyMnJWWE9Db2Q1SCtCdVRoSE13d05tdXhlT1IwSXFZNGVodFF3a0VaV2hoVzlVV250WU5kb05zQmROSjErWTVQdzRCYUZBM2hOK1BxV0FFdEhWaXNIckdkZnJPQUY5eXkwUlV2TjhKeTg4MUoxWi8rZCtNMG42YnoyVmltSjBsbHQ0cDZQNFJ2WHlEZG9TVWFRNmpTc3dmdHU0WDRLN3pFb3hBa1dzZ2F6ZXl1TzFxa3BjdFNsK0FUTHNRakRpWmRJRnptZW5tTk14UmFKaFBpMmtndGxvSjFXc3krdDh1b2IvNDlmVVVXUi9sZ3FSSStkRlpTNEVxdnppQVpueWZiVlU5VlhyNkxXVU9wY3R3ZXl0K0Fsd3ZsS1phVTY2Q1RRWm1ZRDhNTmJtOWpTVnVaVWRiKzFnV1hlS1ZmRHRqS0dDSUxFajNBcVlYMDM0ZktlSElLQ04wcTA4d1ZmOGR0OGNOcDNhL3NwanR3cUxaM3U4WWJBbWNOZ1hoaEhwT3NNbFh3REowWUhxSFliLy9VQ0ZQWmJIYS95OEZyRnoyWWNPRHU5c2hXc0VUQ2RxTnE2bHYzZXgvdmRReDZPNGlOZVNocU8rNjd2ODMrYVo4OEdZNXpVcHpwQXlxKzZZV0hyaTRhdkNsV3NlMlJvUkk5UnJRaWlHM1I3UllueE85OXVxMjIyQS9KMG5vZ0k0Sk5vTHphOGxIUE1ndU1WRWdUb0t5OVB4cXI5Mjg3YVVYRC95UGJYUlBUeEdjQjZqRE50L3JyVitoU2t3MklXMWJUelhsaTlOblR0ODBLQzh1cGRUaGI0emdKaDBJa2FVcXY0WUZRVnBJY1h1bjZ4dHc3T01UOTR2TWE1alRYTTZneFBKYXJSdVBIWHBucS9wRjNzcUNwYS8zbytOaEd2Z1lVVVBtcW9jNDdCYjJoNXhmL3UzYi9DYWYzRFBxZDVhaTBCQzdoUENWRXZCaGM0c2NyVmc1SjRXaUduUjhHVWNoN0RTTUZrR2ZwTXcyOVcvbzBhMzNOdjlacThYbmR0bWsrWEVvOXliT0hvZ0I5ZHdHN212bWlReHJKUk52ODlndmNqZ095eEdmdGRPUEJ6Mmo1MWM4TkJQSXJtam5URE9XcHZHbXg5RWZZZFFrc2Q2RUZHSEFKWm1VdHkvbEVOVENjcUlYZEEyY24va0dBZkdTYk8wSHJGZnU2R3pXS1oxRHhOOTJxV0ExODVqZy90d0RvRE9reGNBRGJkbVA4dFh0eEFyR1lkV1NpYnd0YWRGRERwM1VkeDhmc2k1aS9oaDRtdjd6dUR5NmI4L2Q4NmxpbDliOHhUSmpoWWtPR2c0Y0tYUHVzdDhmVVhhWmpudU9xVC8rcXM3SkNMdm5mN2FWd0lIcHlENkpVZytCZ3JqUlV5TTUzMXYvMlFBQkFCb0FRQUFCTVFCQUFBOEJDVEVDQUFBQUFBRDhBYzVBQUFJQUNRSUJBUW9DQUFNQUdWUm9hWE1nYVhNZ2IyWWdSbWx1WjJWeUlDZzVLUT09PC9CREI+CiAgICA8L0JJUj4KICAgIDxCSVI+CiAgICAgICAgPFZlcnNpb24+CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvVmVyc2lvbj4KICAgICAgICA8Q0JFRkZWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I+MTwvTWFqb3I+CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L0NCRUZGVmVyc2lvbj4KICAgICAgICA8QklSSW5mbz4KICAgICAgICAgICAgPEludGVncml0eT5mYWxzZTwvSW50ZWdyaXR5PgogICAgICAgIDwvQklSSW5mbz4KICAgICAgICA8QkRCSW5mbz4KICAgICAgICAgICAgPEZvcm1hdD4KICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24+TW9zaXA8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgIDxUeXBlPjc8L1R5cGU+CiAgICAgICAgICAgIDwvRm9ybWF0PgogICAgICAgICAgICA8Q3JlYXRpb25EYXRlPjIwMjAtMDEtMDdUMDI6Mzg6NTIuNjcxWjwvQ3JlYXRpb25EYXRlPgogICAgICAgICAgICA8VHlwZT5GaW5nZXI8L1R5cGU+CiAgICAgICAgICAgIDxTdWJ0eXBlPkxlZnQgTWlkZGxlRmluZ2VyPC9TdWJ0eXBlPgogICAgICAgICAgICA8TGV2ZWw+UmF3PC9MZXZlbD4KICAgICAgICAgICAgPFB1cnBvc2U+RW5yb2xsPC9QdXJwb3NlPgogICAgICAgICAgICA8UXVhbGl0eT4KICAgICAgICAgICAgICAgIDxBbGdvcml0aG0+CiAgICAgICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5ITUFDPC9Pcmdhbml6YXRpb24+CiAgICAgICAgICAgICAgICAgICAgPFR5cGU+U0hBLTI1NjwvVHlwZT4KICAgICAgICAgICAgICAgIDwvQWxnb3JpdGhtPgogICAgICAgICAgICAgICAgPFNjb3JlPjY0PC9TY29yZT4KICAgICAgICAgICAgPC9RdWFsaXR5PgogICAgICAgIDwvQkRCSW5mbz4KICAgICAgICA8QkRCPlJrbFNBREF5TUFBQUFYNUVBQUVCQVFBQmZqUUg1Z3djREI0UUFQRUFBQUFBQUFFNUFFQUFEd0lBUUFJQVFBSUlBQUVCOUFIMEFmUUI5QWdGSFFFZkFiSUFBWDNEQUFBQURHcFFJQ0FOQ29jS0FBQUFGR1owZVhCcWNESWdBQUFBQUdwd01pQUFBQUJIYW5BeWFBQUFBQlpwYUdSeUFBQUJzZ0FBQVI4QUFRY0hBQUFBQUFBUFkyOXNjZ0VBQUFBQUFCRUFBQUFhY21WeklBQUFBQkp5WlhOam1jb0FBWm5LQUFFQUFBQUFBQUJxY0RKai8wLy9VUUFwQUFBQUFBRWZBQUFCc2dBQUFBQUFBQUFBQUFBQkh3QUFBYklBQUFBQUFBQUFBQUFCQndFQi8yUUFJd0FCUTNKbFlYUnZjam9nU21GelVHVnlJRlpsY25OcGIyNGdNUzQ1TURBdU1mOWtBQkFBQVVWdVkwbEVPa2RTUWxRd01mOVNBQXdBQWdBSkFBVUVCQUFCLzF3QUUwQkFTRWhRU0VoUVNFaFFTRWhRU0VoUS81QUFDZ0FBQUFGOHl3QUIvNVBmR3dBVGZON1VUZWdzTForL0RQakRqTXp0bGtmeWtvT1Zza09PNnFhR1JlSWpaZDFJc2xJZ0s5RENqTzVpQUFlRzg3MkE1SUE2RVJkLzdTcEdmaW1BZ05TQUFaZC9qOW1pekJDaDRnQjVEMVoyQ3VheEtzemJZdFdXRGx0amJ6aXFNOC84Q0lBOW4zVXBSb0hKYWg3eEYyUTlJQWYwdGV3RlV2dVdQQVNGODd2QU13TVJhZWgveFVSbGdFT1NvWWhacGtNaklqMWkxbFNLVTNZYzFEUHcwT1BFcGRoTVU5Z2Y5UzE2V29HeVk2aUE3ZHhnTjlEVHdRMzRQd25yUmh0SXNVNklJVVB5aUEybEdtR0E4VjFIbElEczJrWmJhZklnVDJqTUhTQmp6M01Tdm14cVIxMW55ZUE4SkhrZy8wSXZhMWZMTWFzak5KQm1mWEwrTURlSWxWZjFOc3JTck5BMnJzdE5teHRMWlVaNUkwSmFaYXFsRTMwVnNlV1ppekd5ZDM2Z3NnQThMUFFKSFhmWWRxMUR4VDFDeEtON3g0L0RnQ1VvQzZ0amlDelRTWmoyTXFVc0lkZjc2TDM0dmRMWWlDODN2elA4Wm44WnA4aDQyVTZWOHFxQVFRV3FaZWgvS2wySzhVNlhKYnltc05yQnJVZFJ6Y2xKc1kwbWJqekhBU3dheC9adGlJVG54MmJpSHM2NzRUc0NseGlhWlBZVUtzZk5HNDhqdW5zeFNWeWlmTWFNV3BOQUpVWS9MK3NXeXJ4NjZ0U3VlM2dDNnRMbFBKRzJ4UkxsdWl1OThYWHZOV1owVmZPekFXZXhoLzhBbjEzNkhUZHZlSklDbGNYY0EycHdEOUE4bld4Rk1McmlGeWlDRE9lQlNJUE9pN2RuVlpOQnYwNTdqNENtU09BK0pmdTlBUXBQZk03VDY1RnZBS0w0ZzRHYUMvNG5uYUwrcTNISmxDQjFMaFlzVFVtZTdUTEFVN3gyZm05ZGhtaXFzcjVtdHZscjJMNkpKaldmMGNrR1ZYTWhlODJER010U240NG9jdUcvZWZBa25hUHJ1OUJ6bUR4MXkyVE5abDVFcVZQYUwvbHZHaGRwWW5RenExYXRHSnB6cHFSSHQwUldoZjlWTnhqVUNXZXpBK285enNLNVUxcGRUSzYwcjNJL0ttdkM4djhIZU9oSmhQQlVYWUZFa21SdVRKNHZsUmdwY3JMSFZsM0N4czdjTWRlZy9nZXpqaFJjVmZPZGx6UFd0Vm1ZaW9KZVFSbzRQOTBCSHpORG9MTmhwVW5XQytuVWpENmFTTjFUcC9pVHBoSmVCNWpidHY4SERWMnVFbXlnSjJHVHo5RWVlWG82dnFGUjR0UEpjbThQMlQ3ZzJ0bDZMdWNRVUlwV0xOY29URmpuWGRyUmxuYk81aTZsTVMxVUs3eURicDZNREt6ZkpHZHdYYkdWdUpkYVUvOWViSUt6Qkh5Z3pVVTVqbjB6MGwyVHpzckljMnQxdUxxOXQ4UTBCQkJzNmMzazNuczdqRnVCQkxpakwzL2FpVlAxNU52WFUxaDQ1eVlJNUkxS05yUTNtUTFIckorZTZPNUZJOHEyUW1uVFFnUUtGVnk1NzRGTVVYbHo1V2dZMEJRUFRjVG4xaHliWTZXRGFYNTFrbmZqK3hNQzJrOVNTdFZCRmlHM0NzVStPeVpyVFVGT1JpaUczbDI1eE54d1JyRGhqWEZ5VnE2T2x6eGRrdDNYZTAzc0ZkNGQvdUg5aFZWTzg2UGNXdkwyQTduaVRnQy94U0tndUFETmtveW02dTZvYTZyY09KUWVRSG10VWs5TTcxamxTY0JhalhpQXJNUUNrMzQ0ckN1bG9Uejg2TmZPaVAwcXFGRkI3bkY1bS80M00xZWdvR1JzdFBWMFV4WndSVEp6elNSVS8xTmJoUkE4N0Q1Q3BrQlluL2xHalR5OXNPRG5vdFJGV3ZNL1k0OEgrU05UdXQ4UVA0YnM0N1dnb3dJL1EvVEd3UHJGanprSlpPYkY2QWRCQUgzc0xFdGZ0MHlqMDVPazFHemQxZDdKeTRHYXlDK3VIc25LRWJzUVJaMklvR0Q2MVgwamljUE92ZHRiSHNEeGNJVHJoQTZBTXNId0tFVnBXb3FVRmtrOTlvZmhhbm9hd2JKQVV6Y085MTlkKys3YkxUVEdEQjZqbmhKNDFYTzMwYzc3dWZRNzZSNlAwR1JLN2kzM3JBKzY3VUNYN25VWjhKN0VBem1PNnd0T2JRcDd0R1JXY3BHeGNCKzZWRHRlRit0eE9GZGlXaDFCcDhWRFM0SmVRaDNxcG5raVNSdWcyUTNBTUhOR21iTXgxdEdSUUVRaFJWS280dlYvWFJwN1JRVUJmd09CRkdMdTZaOVh3MG9SMmlrYUJVQ05RTnpNaHNOcFl2dlZkci9BblFsVjloRzdoNjJETUJFTGFNMTdiNVlLckFCTFVGL0NTMW1FMHJONjczMksvekJ1M1Foazg1UVM1Vk1hL0pJK21TbzJjM2RTbjc5NStjS1lWdDNBYjUzMjdrdVArbVk0WjB0c3lDZDBEZjdiUGdxdCtJQ2x0SDV0bmpSRzNJSnBzTitaeGh1OWFoUnF6OWlMZlMxMWhXN05ONkZoRDVacWkvYVZ3MUhDOWFhNXEza1Z6UHlmMGZhdEk3MU5lVXdWMitnL1ZpNlhYRmZpbmh6b3BmNUhuK281MDBFZ2hXcFR2T3o4eEdLdXUvS2ozL1FPQ1Q1RW1sSzJ6V0p6MFduNEhvTCtwTU1xbXg4emh4b0ZycU9JVEFkVGRnejlGbTJlcXRJZjV0TUN3L1dGMHpqUzBwak1xbElKZTdsVkF2ZjZrNS90SDArWlBGbjZJMm9NQVErak14ZEYrYUNYcTFYYTBjc2ZHQnh5UzNIYnVjTXpsQWZFK0JXVG56Mnh4bFlUdHdvVnRxeEFveFVBcVlUUlp0Qk1JWlNTbVhNN21vVk9VaGlFMlhtV05MNlpCR2w4UElHb0wydm56N0YrSG9qQXczYk5UUTY1c0psazdWZUI4c2RJSjc2VVFqanppMlJjc080S1gzUzM2TG52Sis5SWh1QUQzSnFtS3JEdUlNOWFGUTVmYXVkMEpXMjFuOHdZYjNVSnJIUHc1djAyVGsyUmFZL3NsZmcvOS9VM01PRWN3aXZmR2NucWowczNiZ1FOczRKR0JmdVk0R0p2WWpLWHVxbDh6OXZ3SVNOMDZzQkk0WDFoSlUzUWhuNXJoTlE5UVozVTlDeXdOU2dGYmVFcXZEVTJzOEFPVWdsMjFScm05SEY3TzJ4ODVhbFZyRUE2VnRVZmN1TWhZdmljQU0vMVNwc3B1L2tUazRXc0JvekVSSVZxL09Ta0lSWUVoR01TVUlpd3FncHk5ZldHL0hPV0NObnlra1U4TXFFUWdieHBxV211QTJ1TUEwYkFtTU04S0ZDNmp5Q2VlcG5QZ04zcGNOSkNvbi9rT0Z0T3FUSUZuSjVBM0FnNHBqSzRMZFRkQzdFODd5UmhvNHpRaFJqNWdiZzhPM1o3UVkyeS96MWVGVmU0NmFoVU1WcTdpYmZsWmh4NnBPNjdWd1lPNHgzUEg5bFdUL05MOVZsTlM4Qno4M2JHWE9sVlpibzNrK0E0Rklxenc3aUExamh2RWo0YTNGc0JVQWdoTTg5M2RzMk0vMXpENWorY1NHeHNvZHprSkIxWXU1cW1ydGJ5TGEreE13V3VVQUE1QzV5dTdTRHVSWDV1c1AxZTk2S1UvanpOMEZhM2pEakxyUXlYdWRNRDNHa3ptZGVIaG53VnYxMjVPU0R4M1VmVTVRTFlVemd0VlFybDFaS2ptdHNuVmp2WXdkV2t1bHFJZFlUWWRVZThiZ0h3VU04RDIyVG0rbkx5M0NvUU0yWkYrYjU5YTN5SFc1Wmxab0p3SVhyWHJhSG02R0FFMENnQWlDTlRKVmpMUiswODlocXkzQ3NEeFlrK0dLZ3NJNU4yeThzTEF0YW5lemdSQ3FhaXhKTjkzZDJZYm1OMFFtRENhUGlsb1hxRGJjYmhzTXczNVJHcHNRTjZJd3VjRHIvTFpOMm4yNjJya21tWFlqMTQzUFZwaUFsUisrandNUkdlTHIxdEl4T0ViY3JHLzNvUlFsREhwcEpoN1VrNXFXVE1CeERnak9nUVUwWTBPVDhnbk5ianhOdTkyUGZNZEVPa2VNUitodEVrN05ORUttL21tYy9tZ0dSRXRwWlQ1bEtQU0JDbkIxK0pDTks5dko4cmpKTkxsTm5ibXcvMGVMbHE1SW1hT21LQlI0SnMvUk1RME9malRqenoxMncvT25ZajJGVklsWW9seFJyaDUzL2o0SGdBQ0hjL1ZCT2tUem5rcU9uY3A5bGU5NzFPRzJlci9renBLWml5N2lidkpncmh4VVNsRWpGTmg0ak51YTF3RnZrdlZHQU9Ja29aN2ZNYzlkRVdpenR1TkQybVhudFVnUW9JSU1GcmZ3eGQ2RDFWS05aMDltNTRBR0RpWklXYWdGN1dJSkNSM0QzaHB2MEJKek9xL3Q4a1RvZjNJeHhJdWtZajVQMkxyWG9NTTJRb2xrL1NJeGpjSW1EZGZncUdkMEIrcjI5U2NPOGpxVUR3VGlyVUJKamVPWUtUMzRyTkF4K1FDaGYvQVZ4cXNSakk0cUFtYkJpWWQ5OWJpVlNwNmJQSE9EQlFSeUtjM2pCNkRvY015TUN3ZjFndmh1SlZ3bXhzcEc2VWxDNzVTQU5Tak1qWGZLS2huNGdvRzRIQnNrbG80RXJJMGJPdnBIOFFyMFh6d3lmWHhORzBPdENxTGNxZUplQndlZ2laTU9mL1Q2eGZzU0VpRUlld3RYTFkycmlkUnJVOU5UUWNoaEsxdzRKZ2JkZTVSQnp2WWw3aFhQVFowR3JKRmFtMmFVaUVjZFJMc0VpSkRIU05YMWc1STNEUjljYzB2K3BibHBVbjgwekg1S0h4OGxvRENyMEk1UnYwL3BoQzhQOHRhUVpQTk50d1I3ai9MTVh0YXd2VU0xQ1VQbnBacDM0WldJeFJGZnFzV1J4TkRjTGZxRGZ1YklZNXZSWmRjV3kvYUJ6Rndla2hJTVJ1RUQ4L1hFWjB2ZzNaNVJScXRpNzF4b3E3VU5NS1g4MHl4OG94dGs1M1VjdXJJcElWbTNaRzQrb2hSeWQ3WGpSZU0xMFpzTHRFd2ZjYkZ2NGZmOVpmSUs0cnBFMHZMdFN0VE9GNHF6YWVjcG9QNmJMK0ZPR2JrSm9GMnJsWDFwNWwzL0pSV1o0SEdmTzV2VE9RTkNvZUt6ci9MdlluNnlHWUI0endObS82U2tUM2VBVDhEdXNYL1RlZmF5bEpNcFdMR0kxMlJFZWw0dkhtOTgzYlVudFFaMGZDdGp6YTZ3QVN4ZEFhdHJFVXUrSldKdk1pTkNZNXZPUWZLMUorb1lGV0RTMXNlVEw2ckhva2p4RWpqcit4Zi9QQy8wL0E0OTN2TEJxWTFlbmVvaVZrUFNjaHNRN1pCN3h4Y01LQURGZjFBWlFpaTkxaXJnWmdseDgwazdkOCtQbjM5cWFhUGxCM3JZZWtiNGNUOVFicnNJc2pVeGxydkFkNDMwYWRkc245b01RZHlCdUhJSENCZkxwbld3STdBTDFwcWVSbFVPV05xbk5CakpnUTFYbVlGdEhVUU8yc2JqK2RWWUcwSTZOelZFdlR1cDJqRVlZTG9nQkhlS3ZWeVhJWjM4ZnB5REVmVEVuVmw5VzhFMzRBUXBHOWlzVDFSR05IYzZVVDBWd29Nb2tlakp6dkJLNGpIK0ZjQmdCU3JsZkpKekdjTU9MQkJZaDJSWkdHMEduRWNwTXVHTERualorMEhUbXhORG9WQW5hN0pWWDdzMjZDUUw2RTk4MFAyS2hNSGhDOXkxOTdQY21KVUJlUFhncWFRdDZMVVlpVDRkOE5jc2dkT2tuZDhHcC9JWDFidEc2L2xIVldNTCtwaEJNTnFWNjdIVUZUUUZZTUFrbHluUVROajgzeHU5NkI1VHh3cVNXOE1jS1BRb3lrWjRKVVZIdXNWRTJlcDFNa3hCVWFlM0h5YkNXb2RlaWtDZXpIa1A2VUYvcDF1NHd1WklOT0JValEyWkUvOGhTS3BVRllRZFlLYmE1MEVvaVcrWFpxSVhvWXFmd3JNS0RuWDhtWTV6eWlWV3dOa2lIb215U2NGU3ovSUNUV0cya2ZTbWdXSk4vb0hjdFhiMkdwQUdLdVM1Y0R1ME9zVzFSRlZKbHZVZ1lEZkhESzNCVDFwcXJNWFhjNjkwUEFHVXB1U2JyWWdlcm5DcndBUlVTMnFQYW9vTWtpL1dIaTVWVHdPaW5QQ3MvSk5pYlZjVDNyTDhOSjBSV25mbjJiTkROWE91S0pkSDhicGFUT09WcDlVbGdTY2I1TWN0Ly9BZ3dVdUlWWWVCKzBzSVh5N3htTktSNUpEcllsVHJoZ051T0JZOWk0OTZ6Wi80VkY5TDZRSVcrM0tjOXdWVi8raUtiSFcrNzBqdkR3VE54cmUxazJtb3dEdU5vc0ttUUpBSFlDZC9aUHhCYnhhOXZrOFdueFpPUCtCa2F0SXl4bTFFdUVwVW5UbnExRWlqUW02aHdVckhGSjZoZi9GOXRITDY3bWdwWVd0dXNyZTc0Q2hSaUUwdjBLWWZTcFI5UlgwSDA4dUtvZzI3VXdBSFEwYitCNFNYaUQ5ZDNveVp3Z3RTNlhKUHNScUhVNTRQY2xMbnJSRU9BUEJpbDVEZVZNU1Z2bUllWEdPUWRqVUxnUzJzWFJmSW9YNThFc0g1cUk3OElqVWNib2FyTVRnUEkxYWZ3dzdvTUh4MHFMWmZseXZzYU5STFVhb3cwY2NtKzlWaDJvMVJmS0RxUzlXdG1VS1hLSjNMMTcveXNzSmd6UCt5NEQ4OW9ZK2psbmJQS2hJb3Vlakoxb1NlS2hvYWJCWHlBSWVmWmQ5ZzFFTGpjcUdlNEN6WjBKSTJaYktSTTJDdG5RQ0Z4RmorY3pUVEw4UHBjeWtGQTFKZ0l3NnB3QVRzbi9lVUJ0K3FHWjJWeXJBZHhRems2SFlDVFEwODVPQkcvbmhmZzlUcU90U2NQRmVkUEJTV3MvNE05bVBkcmVFcjdFZ2M2SCswamNQUEQ0SXJTRE03djhYZTc3RVZWWncyaHJnMm5FUWJtaW9nbGFtUGdPTllpMFltU2UvbmR0T0RMQ01nZjF3TTZuNVNzUkQzZmhORVhYYTRaNllkMC90VmFtYTNvWk9PWWZkcDZRT012K2MxYVlsRzNtT0I0dkY2Uzh2RXE0UEFoNUtWWm44MmlzWXBEZkVnZzBkMG1iQllIa3FXbmhha3FVL0ZNN2tWaVhMdUJ4UjI4a0hwY1EwQWVUVlMwUk0rQ2lleHlnd0lPczErVUJrQWw4dDd0Y3dXb1FVK0trWTJtVkxBRDNrM0xLNXliMHc3bDFmRjZ0alM1Sm9XQlJQMlY0c293b01ZdzQ5QXdsTXNpY3FBZVZtUis3Wmc2NDZ0V0lhNmFwS3NXUDRSeFZnWklRMHpJRUgrYlZlZU9nTzEzSk1KUTVqT2lNMjRReU1aTzNlc2lVZmp1eTF4WXBzbFVpVnZ0cXp1MEVwMXFrMHdpNDZJOUxqTkFxbDgyTlMzMGUrTGhNYzl4SjdzdnBFVzY5MmFHUVRWUyt2Tm5sMHczSG85ckpzbVFPOEUzeGt2c0NIQnE0Mzh1cUo4Q1lWZnJEQm1zRStMbkZzd0NMQkhJTWswWXpGbG9wMW5tNC9SeS91OEJMaTlvd2tVT1BXS3dMUXNLZkpUODBRNEtQYnFvVnhBekpnd21rc1FxVnJiRzVnVmJIQlVlVjdNSDVUdHdsZmtYUlYrZWtmczJuSzhpeS9ISktGaTI4Y2xPZktjYUZLU1ZEQTBnbXl1Sk9zS1VQcHZDUnF2TUREZmRzeUF6dlIrVjIrd21VYlpEWkdpb2x6UlFZVnZNYkt2dnp4OVdTSTRjLzBObEFSdnFOZ0NNQnV2OXJlRDB5amx3RzAwMENwcmpXbXM5bXNtLzhHL2t5Y2NoSkE1enVsdTRjOU5VcXBtU09aOGtVMWJ4Z2pMRzl3OUtBYitRLzJZbkwzdWF0bTNNR1VWNWdnVWNRblVpQ3lGeUtkTjZleHhhdzltU1phTFdnam03ajQvZ0RZUU11UHNpL0VWQWc3M2tTcGxqSEFuL0FBS3hIcWVmb2pHN3orYTRzanlmRVo5a3A1cWdXQmtiek1BRmFXR29ZV3EwL0xqNjRNYU5rYWw1T0MrMXRmbHgvTzJHMFJvaEdqQnJ5NVVYUFdmTEhJc3ZuRXY2MStnWm5JbHN3dURSK2tpaTB2dkZuQS93UEJxbjJ6S0ZPazVmN1dNbjN5VnJROHFlY0huRUIvWUE1bFdZWnpNc3dsUzJzU2M4Z2d2ekNYc3NQOGtHcWozSzhCdmFCNWx1amJNN2hTeVhDbW85WmpHRnczWjJZZGNycGNEUTJVQURMamU0MDI4M0pRQUM1d2o3eXR2Y2QxK2RhcUxncUJhSm01bkpoM280d2lqL1p6cDBnYldjWjZiT1R0RHVyVkJKSmRubjBTQ2tQOW81YVc2ZzNlTlVzNzVzdFJ0aDBwOSttMnhZNE1Kc00wV3BJbmpaZXNzVGFVdU81c1dQaTdpRTVvc3Jzcmt2NHZqdjMvdW9ndVA0VFhsQTZrbE8ybzB2NVQ4MDVCQVVkYjdPVklNaDRrNUVXWklKMFNaTjk0NVJHVU5UeWFaS1FBY21EcDRUK0hNd1RaeXBlN0ZTUmkzTVIwNTJ0azVWRlFuVnUwdXJYalVuTC9kTEJZaHZkMkt5RW12Y0Z6ZUIrWW1SYlJ4ejIwZjNwOTFBUmw0eUJBQjBkZ0hHcjBZRDFNQy9PbWFqWnp5WjEzU01JNFRuK1YxMzZjbWJac25MTXpHNlgwVk1KSjVMdkNxaHNWVkl2eDR0R0pIeklONG5xdk8wUVRGd25xR1FNQnY5UWVqeVFHMy91TUZiOUl4ZVp5Y0Zab0J2SCtHZTFsejRnV1ZSVDNXalRVY2ppOCtYZ3VFY0h2ckx1VFc1YzlPODlEUkxlSitJaElMQmt2dE5TclE3bnpHWVdVWXdMTTNnZlhqSkdRUVRWb2VIc3F3bUJTUEtjaSt5RE9Kc1Q5aEtQMUhWZkFTcHhmVnR4dUlqbFNxZDdFK2x1R2thc3RxeE0zcHRqWmZ6aC9wSCsyRWlQOHlHS0lnbzA3K1RReEgzdHRtTUFWYUV4N0FVT1UwQXp1M2tpS1UveXh2b0Z4NXFUU3lNOWF5OFRscS9FdE5idU1lQ3M4aDFRb05rZW50RXF3YmM5dk42Tld6dUxyeEZENHYzZmluWDFtNTl6bzJOaTZ1cHBnOEpwcjY2UmMvNDlVUlJQUmpNaWZWVXlpaVo2Wkw3RElacVdYYk5pK2RoV20yVTlkY2cwcndRSnZqb3duL1hOaFE0dkNJZGt3aHVOSWpJUUVmVmlwSkNnU3dMc1N0d0RKdUJvTllvUE1ERFozSnIrc3Q1RC9PRmRTYXZnc0pKUlE0QURDdkx6V1FXMkVwOXVGMHBZamh2ckxHcWFYdHh2OTZZQllSWEZqc01ocWFXWk1VZEJUU1p2Y1dYdDQ0UjlFdnZjYThDQ21yME1STUxrbVpwazJRYWRuTjVlSTNOKzRRNE9HODAxSWZJbXFiNzFjZzFYcEtFdXR5Y1prVWJLU1ZNNk96RTBpK3BRTDBtajhGcUdIMHV6RW1oaU9FYXh4TWJlR1poRXdxYVlxdytYeVQvWWg1dThXblFWV3Z0TDRrNDdnb1ZLUTZIUVBvNGM0aWx5ejU0MHBRZCtYb3FwN0NFTHdQTVc3Ny9MUHUxaEYzYWYxaFN2MllIOVZBRDEvdnlISWUvT24yZnMwdDk5R1JUdklka3NxNFF1NzV4LzJsbDY2L2lZaGFNNEFkaE9DdC9QNGIwUHREbDF3dHY4ZzgvVVBsT3dQRm00U0pJc1NOUzVtWUI4RzM1VzZrZ0wrcFM5WGFNVUNVY1VFN1RwU0dwWGZMcnNhQ2xkRy9mUDlYakVCRE51M3dFQnZvQnllVDdhemhzUCtvcW14V2dGWWtIWWtLbUZNNG45TmR5UFV1WDN3VkFtcGcwSmFaczZVeDhxYjg5SjZrRDVzS0tKT245dFExRXBHakpIMVRKTlpTb0dQelhKZExuRUZTR2NTRG5WTnB1eThmUTJnUVFseFBjc2NiajhWbDU1emtIWlllUHdWTjA1WnQ5SkFVcWtYdXZySHN6d01kWjFib002U1MrZGsxd2tvUG1xbTNvUk50WXZTV29STmNhQzBCSzZidENqYmtZSkYvd1UydFZadGQ4NnU2SGRGZ1lrSzAwNHZBMUlkRW0zMTlHMjVkb1Erayt6RFo4WWZNbStyam1IREs2MUh6VFNneDNTNkdrakxZL1lhU1JQbDNjMVVEUjM4Vm9KMUJOd3NJZWEyRGJ1WjRWd1YzNjQvc3d2L0N6dXVFQ3pMMExucnVzOWxmcGZ4VlJ3VDJoQmwwRUdWZVNJREp1YlZEYkIrUHBjY2xqYlFSOHFYemFmdGVlZG5SbUhJSDZqcnpWSVNDdEkzNFJUOEllbUxWRFVFV2prZXBRQmNzVVNRN3lnVHBNS1dzbWNkbVBydjNvak9MZWY2Uit0SHFwVFNvU3VqRFRIZ3EyQ3BZY04wS1ZFUDdIdGFOMjI3Y1hJNHNWUFZRM2JhLzg1YmtRT2Nucm1HQjdMM3VxVjRZeDVyZDdOTUtEcm93TWdMTDZSU1VOYTFiSmsxU2kvMnBRc0dNOXVrMkNTbWZla0xIVGFBWTNJaFUrV2RQUm9QYTlqNS85eUxXdEpBQy9SMVNzUzN5K0EvZXh6UUJCaWhIMUc2Zkwza092TnA0UWJuRzZROFdiL0NHK2NSNTFnREthNVVXbnZTbjc4OUVCVERFQlBMa01BOEd4MVY2UWpjZklESmRSZnlUR3dIMXQ0NXFBRTRJZ085MER0bTdxK3BGUDNvazhiR003MkNtS0ttcVF5emhFdXV5YnZ5NDFiVVUvS3VkYjB3c0RBbm0zQXZlNFJDVUpiK3o0cTJFaVErSzMxdGdMT01SQWpsaEJURzAvYlF4eEJ0M2t1ZnQwSUFabnpTZEZzVU9NcXRmRkROSXZrVDc3ZGlVWnNKallYQlR6MWh2czNxeitCbDFwZUdOckR0SHZsL0grNStHaEdJMUd0OGJlNDhOWkFhSit3b1JXcE9FQllBVmtJK25YRExVUGpTVUkvc2s2VVM4TklmcS9iTlN2SmIxSGRYSHFvSmtDUXptcGc0MHF4dG9ET3RIelVoZG40QzVsVDQrMEZIZ3NUNGlNVUhSOFZFZENwRVNtSHlhSHdCR1pNUjRQYkVYTXVac24yTkEycFZHLzRHYmZMdzg4ZE0wQlhNQm11U0NjM3JpOUdJL3p0MEpqbkRVSDJscDlGSnFzNWVmblBqdk80WEJvRkRiMi9IT0J2R0QwWS93U0VXcno2L2xwbzZzczNRQkc1ckJWYWJnNXdMVzh5WktaYXlwZUxaK3VuR1VZVU9YRDFQWWpENXdVMk55dVM3bFRqd092b0NUOHBFOGZuVFc4VW8wUE5mRFBvU3kwQVJpWmpPVi8zN1BDNitrWG4wbzFtM1RtWUZPV2ZXYzROWUQzc3lvMVlrazU4SSt5S002TFVVRHIycmJwRE9NWElZK1NQR0JMMGVxbWIraVNqYTNwQWhXMG1icll1ZlN5Y0NWdnM1V0VqQlNRQTEvTEY3ampTUmFmQ0tiTkVpOHNyWFgzQ1VSS0lxeUhtSWptb3Mwdk8rY0licUNvTFFjKzlYMUZsZHpXQ0lJVGFZSEtaQ3hBdEV2b01OdWQrZmJzR0kramgySDY5MFNneVlkcWdJQU5HT2dxRXB0Z3V6cDNxUWJrK3paWnRTTjlVU2x1V0hUNzg3QUZEU0dXNzRyZ2NHWGlQcWI4bWdQVjlKaUttVndwKzJaWnhBZm5EbFhPNUpFRDVkYUs2WmxBVnNpVXZzaE05eDdCZ3RzZ1JGUlFVN1hrc2Nadlk3dDFvQ0RJK1NHNEpPUnpRdzZxWWhFMkI0ZXoyT1FaQ1lBMGdGczZLOEU2M1QzQWdveDN4V2k1cmJ0NlBRd2tpZEUzY0s5cjV5YmpHSnVxM01Tb2hOZWVqMlVtNWJHRmkvUW9wSDRKV21Vemk4OEFkUkl4aURLMmp5RisyNlJGZWhLNXZSNEZWbUhrbHhzR3ZURmR0WEFNU085b0tpbzBSYWVWYytaa1pmRmdDelN6dDBxNTNVQ0hPRjljWlVNdTQrckhZc1l1NEZTUDdrbitqYmF5ZzhzS3RMQnloa28wa3Y2cHhJZ2pEN1V0Z3NFT0sxVy9HV1lwbVRKeHRpa3JJbGtLUTRTSjlzbWhxMjZESXNLZjRzWkd4L2ZGMEhReUZ4TG1nb0M2Q2NycGpwZTNPMldZbk83WkZCdll1T3hRUTdkNTYrNkxCc0FtYnZWck1CamxQaWFSMERsclU5MUw2UnYwZUNqUGNtMEp2ZTl0dFVuMUdoTU14Q2VwRXJyZjN6d0gvWWRVV25HRUtCN0l1Um0yZklHVExJRG1KNjcxc2NPbkd3V2RnL3dpUlFIYkdYWkluMk96RmI5TG8rbmxHRFZaYXg4MTM4bW5MaXRHY1l3TnlWR2JzTm50b21FVFI2a1lOWHZ5cEFBaHdjU2FUNkZEWVBCTlcrMXZGRDlLbXloMktGV3A3YVJYcTV3VmhmUEdKZkZNRFo3S2hPOWNtQndwZ2w3SnpHb3Rkb0hwQnY3Z3NESUk0UjE2d3lSQzhURFk0ZTFjN1lMRi9FcWZGZk40RG1aRjAvM0hQcUQ2SnNLY3BDVmEwTUNWSHZ3eGRhUDBKaGdZYVI1RGxDQm5lenFlc0tYVzFHd3VycVQ3a2hmcHJ3NUQxMldqbW9FRklmM255d2o4Nm8yNUw2R1ZlQnQ0QUVBVk15d1k2ajNZME81NG5ISk01RmJoY3NBVXBKUkdUVThKRGIvaU1yVDFWKzg4S2s4NXg1amlTMU5qOUdpaVIzTTdBMzNuNG5VRkl2akpCMURYY3ozZHNwbTNsdXVVWjlsNVNiNGxhT2w2RXpUUElubHBiUWtZVm9UcnJUY1lyVmtpOGRVamV0R2ttYUludVRtRmR4eVQwaFZrNWY5bzRvWS84eGVlNlBEakQvUWhqeGNQQlUrY0ppMWNoZmtCaGNqYkRkQjJmd3AvUVdjVk4wNy9tdFZGWEhyK0tzUVNyVmM0ZFhOOXpSMitOZkZjK2xnTEluTW00VkdyejFvZUlmTFpXZ1VnSVI4TkF6YTVYWlBWNDQvTjNCd2dlSTNtMFBRVURicWxtSFl6ZTA5SVlURG5UVTZmQzVtd0hzRyszNi9SKzdnRkQ0dEo2ZjF0YmF3T1NSUWJQbFl3amVCSnYxVHdvOFdrT0tHODRnRjFrRTloeThraDd0NFNaYlViWkZmTG5jNjYwdGd1NTQyczNseGJaOUt6eUFsc1dPMzhrOVQzNHFrRDlXcEFxYU5KYWRibU96czNJYUFKYUJQYk16a05Gb0RibjQ2NmdUMVllZEdMcStXTy9BVU9UeTlDTmhOaUUrbUp4MkljT29FQmdjTWlkRkh3UjZvY0NGdDdvazlxRXZmSTBSRTdWbjVxRFhxbnFocUkvcXhWOG1KVUtBTVBvM0VEbTB1QnJYaXFsMFF6MWNpbjNJdzU4UVlrVlc2ZEsyUjgyK3J0U3UvT3NZRnNRM2w3ZkpQQVpBWm5yUjRUbGNrNzFzVWo1VXZEMGtJNDNRNFc1bVJURDJna2kyL3FuaElDQWdJRG0rclFBNUxGVVhzNXY2R0lNeTROYzAyZ0lEVlA4TEJKVE03M1lDMk8zUnNETzIxbFg4bzUrZ0tYUlMxU1J6SG1SREVMaG0ra3cvZkw4K3BpVW8yUEhQN2RaU3RQbldSbTBxSG1BSEZSRDZpWlNCRFBIeXQ3K0lZcVBoKzlyWkF0aUhlOVlidEhEdURNcHB1YWMxUkxBa25vYzEwTE1ZVzdlMG9NT045YlVXOVJtQ3NwU1dZckIvSDFBTUFQMExOK2h5ZDB4NDA5andlVlNFNDVMT0U4ZUJ4NnV6eXM5SVVTeDdkRVlLZE5kZWZqbEdicVdidjI5UkxmbnJNUHFyM1NmaURIQXJkTTVScHVnK04raVVpeVQ3VGpoUFV1Y1hsRmFRRE5kcHFCdkNRcXJsNHg2WGhwNzlrVkpYeXNBSGdxdGljNjhhYXFneEl4M3BDWkpVV1NVOGJCQUwyVFlEZ1IvM3BIYllIQXRTaHZGSEtWYXc1U3RTaDdMblhjTWVZZkIyYkVoSHJOckFYWEdxbzk1UGdDdER5UzdaWlo0TVNpeWlPVHdrOHFJTXUzQ1dtMGNpRmxLSisvSXlYZHJ3Q0MzTjBDeUZTVTlBdXBpaUZ6QzdIWUI4dTBUbC9pVFoyZ1pKc0JZNEtrZitiRkhHTVdSWCs5Mzg2UUF6WWdqNmhLVXkrM1FnUFlDZFlHd1QycEE4c0t4cHJyTFJWMmxrQmhZcEgvbUw3bWt4L1dvYStMcHF4enMrbDE5SCs3M0VVeGVwY0pXTUJMRFVlVHFnUzhjTkIrS1hxNzViMDZvb05ldTE0THp4d29hWVhxQzlrTWZVMTBLL01YZWJIeFczUVo3UTFtSnhuazBsamlRUWhGOG92dnZJRGpLU3lGUWVCUHRBNUQrN2pGZUpCTVI4NnM1SkQ5c2swY1RUczZPcjI4Sm5DSXhjNUU4RHQ1d0J6RkprUzBCQWY5RXNxZ3JyMmFPeFhWa01KaW5JVEQ3bjRibFRreWRwdHdFSDZvTTJYcWRjNHMweFB3RVc2eWlaTitSMkZFZ0tQaC9oOE84OS9pSkVxYUZXWFM1ay81ZlIxcUM1b2drSGYxTDQyOVVTS1RsbzFIRDl6bkZ0OXBVSHVsbWw3eE9WLzZFaG5ReU5iWkZLU2JGSXdiOUdTU29IODJYbExXUVlTMG9WNXpuRkN2ZmZteklPQVdhdXdocms5NHIxMDR0UXdxeGx3QzFvMGpLZjJ1NWR6TWpsU3ZYd0FZUEdTNHJSTXJMWms5elVNeWhNcEkvMlJTZW51SlZrWk9XekoySTNralFTTVhqbmdVRE5sRk9xbHBzOTRaT3krTWs3OEFUTWplUjdzeUJqelBuNzFUOHAzMnlrUG5rT0JjeTYrTDBrc2xPOE9VaW5jajI5ckJhRmplVmszVlBGL3I4T3ljc2ZlSXo0YjVEMFFWZnE4Ky94b0ljd2ZFY3pnSEhKcmRVNXUyRndCbE9WRG9JOUxTa3VoWmFyKzhvQ3lpUnp1eFpJZGlETzJTSlV2c2MrS0pkQTZTUnpZaDFxRUFuOTVoYml5NjVQOU5qSndVR21XQlA0aExaUGM4WGZkT0hmK29MQ0VMdWdRNXl0ZEVFZTh3UjZjU2JXT3FuUUVTUTFaeFhYcW56T0pnSzZMU1B2SGxaVVk1Q0dVc3E0dWgvS08rVUJkcFZ6Q01rRUowVGFxRHhDRXp4Y2xiTU5sK0I3WU5kUVlKbjVIZTUzbkZOVUd1dXkyTUNueENSaSsvL0pHdkRVRld4T25hN3I5c1IzYk5HaU9Tei94RE4zSnF3NnEzdlprZ1MwNEY0SVJ5dDFzV3F5eXpWcURmQjYxQlNxaWUwSGVmK0RQMnRhY1ZvOE4vRkRYcHhLR0VKcFNMS2pvU0I4SnVVNWJ2VDYzc3NqY1JSZTF0ZzU1dUtCbGNTUjUrMXEvOXo2NmF4TnlUcTdjeSt0TTFORFBtYWhqRDI5TVJseE83bVN1cERvc1dKQUI2S1I5TFoxNC9CbkUwK250MmMwcTFBMjZPZG0rVU1RblduejM2Q2hwTnJOMmd0UWROeExLMkR2dGJkYmh4aHpsTkkxdGhraldKZ1lIWkhVdjhZL052cTlIY09jQzZpaXV5UXM3SVNVekU4bk5qT3RpdmZXNnE3TTJmK1lXSXAzUFRjbk9RajB6OVVuM0ZGcWhwK0gyRDI1eURYbnR0QXVmMmgxRDVZZ2lRaWw0MDM3a01MYWZGeEk4M1k5RmNoeGlaWjlMTTBhaTc5bjhwZ1EzbGtkYUVuR0xrb2d1N3kyUkVzWCtRck1lUW1nVUl4K2c0YnZONHZjTzAvRUxvZ1dPTThpUU4wWWl4bWJrYk5kTzVjL3k1VGdkVG9YcVdMbm9PRWtxV2R6ZG5penJPOE9FY1Uwa1R0bW5sVDQrY1pNeFNPanI2S2pTNXd0WkdVUGhOZEY0eTRmQzJRWDBLQis4YVZSWG1aZ2VvYmRnU3hjeE5pQXJTWmM0eHB1OGIwRzh2Tm9iSWc3UUlIdjRZa3ZqbVo5ZWk3L3dZcFpvTko1TzJBWFlCVHBKcHlmUElRTUpaanVaQXp3OWp5STBUdWpoTWptV0N6VEJIRGh4NGtmV3daLzFmcVlRbEkrak9NT0lCUUdCYjhITmk4czRQL2JuUzdVTjFld0lycmplN2dtMm12amhHMWxLaUIwbExwZDA4SGlqZWorRG9XZFpZbitWcjZrcU5CbmVEMGZNQUZ5RmRJWndZUE1XUkdXcEFQRnE5RCtFVWgxdloydGM4UzVJazI2ZC9Sems0UlRPa3N3N2pNU2ZDNHJiNHVYa1lwTG94SzVIMllXd3hTL1hsWHowblRGaWFXa2NQcy9kWGF0SzByWGRhNjA4ZWVvVzZrZEE5ZUVyWjR5R25NSFpvbVBVNk1hYmIwVlhCaXl0bGZHT2oxK25NZm5QcXBuRmp0TjdDcnpKMnhNYkFiN0Y5S0VCTHkwaUZ4Y2hiZEZ1QUhaelcrZDJ6bGZ6S0FIL0U2UWF3bFR3ZkpKMFVoRDZuRm5ZejJ5aEtTVTdPL0FCakhZaTNwMGtvZTdGTitFeWN5cVB1aUljSTZOd3N1QlBmaXNRQzRBd3lFWEE0eGNGM3RGdUQ0RzNZZ0R1NzRmWmtqR0FOUzdrRkxGQ0E4dnVPL0FKZ3hjR0pLV3F3NUUwZ0psVDhmQWg2MkhoNzNMRDBkWXVEcVZkdTZsQTA4N082UE9MMzZTcHlDYWVaS0lKWGpvZFF0a2F3b1U0VkxrWGVrU2hKWTV0OE5naWdlSnVWVzNrVUNyMmRoamNreHE5Z0lFR3Bja05pYzhVbEFPWmJoaFhkS0ZjeGo5emxxTVNaK1RHenRnNHJQV3YyUkNjbG9iQkN4R0hGTzRWRzhudTd2eHIyYmwveXRpY3BpREYwTm5MSFJndFRZSkc0Vk00ZStVVlRRbjB2WHBMQ2JSTnlvVWJSU1BRQWZEWUJSWDk4RHp4enZJd0cvR1pXZGNuS2crRmwwV0w0QW4wWjRWNzlFV2ljd2JSQ1pBanVKUkZ4L2ExQnEvUkFFQjhsYzhHNDlnN2NuMFFNRW9ybGwyTFRzY0NaOFRSU3R0WUtST2NJQWdkbUJqTCtXUWJXRWZTVndVbFIyaVZFN2d3TDFiM0ZsbkdpRUtqTWcyTG1rR1Z4UzlzUGNabG1LeC9nNG4rSGhWSDFvRXVxR3JrRmRSSksrcnMySGdvYXJEbWJBR0ZMYVRTaHVrUWc4Z2FPY0F2ZlRBdm5yZ0k5R3RRdVdleTBySUNwdkpBYmVSRjZlMDk0MkdFVVF0MEFoQm9YQlh6cHd3emFJME5IT1IwaU1neGFUaUU2ZUt4ZGQrNXJVU2x0S3FHRTVZckMwTnlHMG9FNHpBT2xtdDY2cE93OHNPMEFsWC9ScU1lTjdzV2ZMTllQZU5FeFM0QVRUNXZjRExiQ2xpL212YlVLTVVDSVY4OVdpcmlUNTUycStBRmJSNUExcVVyczJRYW5zMTlpZ0RsOVNpeERJemF6SjIrV05pdGFNcCsvQTVxR3U0dFdabE9WMEZvZm9OanE4dFlmRnFuM2d5R2dwbGZlRy9GZTArWTlTajBPNjlJVWF2UG9ESkhJc0dEYmpEc2hSY0JRRVB3SkdBTnZSVlh6bFVXSnJqLzNYRnhXcDZQWGxlNjhqVGVPV3hDME5RRmhhTkVqWGhRZlJLVXd3WXVGcHlUYzFzWCtMMnlMOWVmNzFzblNNNjZ2WWNzMUVRTTRYVlNDSlNwSWRQbGJkeG93VjBNeC90emw0NjVFcnpvK21XWU9sUE5kWW1NS2h6VjNJTEhmbWovVGZiMVVDS1ltamxaY2l5OWxZbWVmeWl2alhTdHNPTWh0SDJCVXR5VEh1TDh2SS9XV0QvV2VYMlV3UDJHSjlqTUQ2MHY5V2xFK3NxL3R1RS80YWVmZnFmUDRXdUhoZ2pzSmZxd2pKck0rdEdoYUIvenU3ZEFoRHRoZW5vUWl2MzVJdXVZcXRmUFMybVJBdmthSkJnbmZma2dpZ3d2bG10MTJGWXMzTHpIczBFNkdMcFEzSHVrQWFQMnN5WU5NOVJ0cjhVaTB3UEFTaFE0L1dQZFNweHRiREZJT212Wkc1NlVYMnpvNmhWd0puR1VOMFBIanVIS1RoeS85dDhqRWxoRzV1T2NtWFJNOWRnSG9CRTJKTmo3QmNrOXk2Y2dLUEtPYi9Vdm9MUFhiMkRWczdSL3YxekxoWWJDNGJKWmM1WGZQbzFsQVNrUDV5ZEhXQzRrc3BZckM1c3BhRVFGeXNnSXBnVzU3K2Q1MWoxWGNUYlNybE9XSm5LYVBVUHJhNm9aV3ZkalJPREpjbTh1OTNXQytuOFF1RnptMDhmby9vcWF3WithTlRvZDMzWDlzdHQrYjRYKzk2dFhEaGdySWpobzNGR21udEFNVzVXVTIyck5lYko2SG03OHFkQm40MkhJbDFEQnVZdTllM1JOTkpWaGUwdmFFNGFTSVVFc05WV2ZwMTl0cE4wek5ybFJxaEY2R3pBOVpFUTBrQXMvaU03TEdkaUxIc3hjVElTM2IvSVRKYWp0eVR5VUJYcXVqRVprUjB1UWVsYWpscXhDd1NXaXJDeC9ueWpBK0lNNHZoZXQrUSt0S1hZdTVCSE12WWxLZ2hqRncvRFJJOXluWndqNWk2WTQ2Z1QyNklabVNHcVhleEgxMXlTNkx6QlJDNDJBaVRkUEN6WElnYUhYTDRjVkhEZzl3TlRpd1ZZLzFKQUlGaDdiTmtrdkkvUDlTQUlKNkpKWHBZS1daaTdXQlJzVmt6R0l6NEZQTVA4M1ZRYVQybXVnSjhjc2drM0s1NlUvVE00NmF0U2xvVk03YkE1dW1QTURzTEIySzZBaDF6Qy9RaDlsQUt2b1dBQk4xOEtKTTBWUTY3MjR0eUlNeEFnUGNQREthdHZ4Z1RRSEZpQkpnajk2M1h2MUlGc3lsQzlMT1UrMFNBeERQOUNsLzA0WkRHeW9UWXNQSHREZWpKNWVQaVd4QS9EQkd5VEJad05qQlpXSXFwSTFkRFpJRDdYaXlSZGQ4MU1sLzdkNHpxS2E0SDNxN2orMm9reDUrb201OEtpSTUxM0Fldm5xb201ZWliUFk0dlNVSEN4YnJ0czRDZ2NKNzExS0FkSXRWaVZIUGVEbXE2SU5uaThjYnZaU0RuOG9VSTg2bGx6K2RINDdZeHYvcmZuT2dCUFBtazZLUTUxZ2p3RU9LY1phNUl0VTNWZnJrOGZKYzBMQ2pCV2t5M0hFZ0hLTFlZdk5hWUdxOFJhbVpoRGFRSjVpN2tSS2ZveFIyRHk5S0p4Sm9EMHp5b25Bb2JlMGlVamF6T25LeE9LNzI0M2NqNDFTR3ZHUkV0djIveFF0YTNMcHFFMWNPYkUvNnhlcXh0emJid2x1MGJsK1cwRmJqNmlRUzRnUkNFdFNjVVJwK1YwbVRpelNCaEUrQlZTSTFWY2NLN0lBNjFZME9UbWZoeE9KUEk4Vm9jQXVhNmkvZWtXdE5mb2o1RlNnVlQ3d3g1T1hINWczYnYveEJGamFRQlV3eXI1SmEreW9WelduMmdNNXk5YlBHMW5QWWRVQXo5WHNuMGZLZnNQcXcyaDFQSlMzaEdwbkhoSXBsTks3emNqM1RWVUV2elFCY1FxSFhMQ2dBNDE3empTTVRzVHpzU0JibHpKRU5ISVFiVGwxU1FRelR3NFBsUnQ5MW1RZFVvNjJqdFREZUdFZkNnckVtbEIvSHBEc2ppbkt3aGJsL3lkd3paZ1htaHZmc0UvblN1SEtBcGVYTUtnRDNaSU4raWtuYmtQWmtFcTE5Qk9UMzV2bHRDcjlqK0RDcnFYYTF2a3RCaTFic254MmV6OWh2enZ4eHRvUWQ5OElwTWFJMzVJZlQwQUtYbDZYYkpOVXg5UFhvMGo1MzFDOHFWMjVBa2h6MklEOGdBcnE3YUhZVFkzcTFwd3Z5NWhkREZneS9YTzVwZGhzTnQ5UjNhcEZkOXVqa0t1UHJKQmVxaDMzSEROZW10bzhTdDgvU2Y1VWE5eHdONWRGZFJlMnQ3clNGbnJ2a1RYa1dCVlhNV3A1Qm8zMnhFa0hwRWJYeW1kcW9HVU9GWTNJdE15Qzhydm84SnplMksyQ1A4dXRmTkxaMThVUExMOWgzVXo0TW1PQVIvUENsLzZWemVqclVycnRtb0IvOEtRa1d3Qld1YVRRNWx6Y1FpQ0FwNkYrdENYbk1sdXhocHNBd0hiSXZqcjRDVXltalM5eWNvcHJIZFM5YmpZVmVVTWI2S1V2S3ZQM0hDRXFTSmZrZjh3Z1cydjdQYk9zeVVmUXJNcW53dkFlNENyTVJqY3RLNWxuUmhEK1VXbm4zUlE5V1cySkFhOUxYdWVzOHpITTFVaWJCMkJWM3VRNVMrZ2g2RDdGK3pzVnM3SXVhSDg2UHZTK3lxT0pJZzZOb0VUZGYzY3dFWVlTVWIweXBpTHo0MEpYYjNYQUZVMFNHYnBEQ25xUkRkbjFGVS9ya0k4Q04rOFhsZjJhbklPMW1BOFZTc1FibkJrdjZ0cTRMV0RISXB1dVBxNXJEN0RLYkVrbU1yYkNJa1R6bmEvMWJxN0g1K0tYOEd5dTlERDhneHJHbHBUZUhsSjhoYTJSeDBvY0lXV2tQTlE2UmFVcFVxN2QwM2hrRXJCS0c4R2h3RitmOWpLek80bUIrUG4xUCt2clVkeFp1RENCWGNSMlVIWjcydy9TdExNY2x5SFc2clBVMlp3OWJ3QlM3R0ROOGtvTDRUY2hJVHh5em5FMVRKdGlGWDdSajZJZmEyTFNJY1JBRUVuVkZsL3kyZXlSUGVzcU5OOEZFenRwQW9SSkhhU3F5VTkvRHc3bzM5M3luVGhsYUZQdktEc1YvWmpwOGdOSkNSZlF6bW9VVEFxYi84SHRrS01YVlhLQm83ak0xa2wra28xUlgzYTZiU0kxNnVoNVdOTWdwai9JMzdVam03TTlQdFhCdVNCdGNYa3FhV1FxbUQxS25ab3hwOGQ1Z0F2WDRUMVFHa254TTVFWGRGQU9FMEEzOW41bjVjOUVhTUJyMFRvYWZiNUZCVmx4eVNpTjhxQU95VXAwVUYydWVaTkFLMUZNRmhjRFN2d1dqem9hQnhDeVQ0YU5KVndTM0tWS0xFdEpWN0tRRHU3ODRPby9SaEk5Ly9mQWQ0dGZlUEJ5aTZNajdPYlcxNUkrV0xOK25iWStIRytMdkFvRW4yZmRjRlNJczQvMUg3MUphS1REbGVZMER0STM0d1grcS9OTzJlQ29uMGR1M2pRdDk2NW9HNXpTUVBSN1JZRDZqQUkvQ1ovSnYxWDkxSUlJbDZCOWJpN3Q1RGpzSjZrQ1pWQjA1aisrc1VSc3FrVFJxYWcyWnZFY0JWT2lDMGZVN1BIVys4SEJ3TzlYWFpzVFVpN3JieWErMkZ0cFRuLzM1MWNsZWFVYXI5MWl6RERJRW8vWGkvQlNNbXMvWEJJamRMeHlyV0g5UHJVc0pFc1ZzU0wvTEU2T3R1STQrdXVEMWIvQUtoMWhad2lWTm5xMnk2ZVJYVCt5SEFaVmxpN3dWcjZlSmEweG85Z1NacjhiK0FIOFJJa3Y1WVRTK3hCTzJKN3BWL0VZNUkwK3lnNEsybkdaOVc4enUxT0UvQS9Ea1diWjFHRkg1LzZqa3lwcHNrVzVmaUZyMG1mVnlaMFF4SCs4VXJVYnk4dHNlN3VkT3NoSGdkVHFMbHdyOVA0SGM0MEJCWkdwNmdpYjUyUERYcW1KU2hYa1ZTdDdpMDBEUDMwTnFEUGJkSEdvNDlaUTZmdjVOTVE0YndwTUV6OWFPQWhWaUxTbXdDV0VRUG00TGdUek9BVnQxSzM0dHlwQ054NFBXYjJ2WkNqdXJhNG52N090TVBGdUtFM1E2Mmg4T3VwdzJlTm1sUG9NYTF3ckQ3WUFCL25OUnhjcHZLczVMWHVEYnFSRmtLSmVTdTJMbFc2djh3OVY0a2VVSjMrZkdtRXQ2MGFBT0d6S1kvZm5NL0RsZU0yMmNVRDlpbmI4YUFvUGtZV1NBS0dqUGM2Q0hVQVYyR3E3ZUxYblFIRXp2MW05RktuQWk3eTUyYXFyK09pTFZ5SHI3d01SMjNscUVia0ZTeFkzVkNROEYwb2UzaThlelBDNzNmSnk2a0Y5Zk5OYlZxYmJoWjFuTTRaVmtHMTNCWFlZdVc2emJ5YUNxeU5xaHlHZWozUVlFcitEVkRvNWlUVWZpWXBhTUJQOVowdG9sNHBjNk5OZlAwWkVzbTllRllHWDVNWTFEQWxQRjRWbHpiYzBZN1RzbEx3QmswbUZUd1hSVFBLeTNYeHBMWmc0WklXTXo5dTYrcThmRExXVzMyRFBHNzdzYzJJemMxVzZqaHREdkdTWTh0bkdySWNZSktmVmFQbUxESzVJNEJYNTdpYVJqSmU2cDRQdlNVdzBwTlg1K2d4c0dMMmh3aHJaMWZRYXlDeGlYUS9PdG5FQ1V4TTBxSkQxa2poYVhEYmRTUUhNRTVOZlNpSmNjR2NGOVNBUjg3dHdSRzh0Sm9CQUI2WVFGRFRRVUpnUWZ5cUgycnQwcU4vZUtNQnJ0MDFhNFFJSDBwcjNvRmdlZzgxVndiWlE0NEJPZEhaL3dSVG1zYjFOM2plWGdhQ0dyUlMvSEw0cEpXdmovVzhEQk5FWTU4azdJS0M0SWxld1pPV1BQY3J1RmRYNDNRcERnN21xQ0dYSkZad1ptdnFaaUZ4d01YUFMrSVdtTFl0bGVHSEZWU1laVUIzNEl0TVo5REwrNy9MZGQ0S0ROalNkNTNjM1JDNElxd0xuOEswMXlxdnhab0xqYkNzenowQW1BUWxRbVVIMndnQ2VHUzM0WmpiRG9tUHhzNHNkeUlidFAvTTNXZ2F5L3BWUlNud1NTeWs5bUtvaXFkaGxhNlhPc2hyemMyMVREeTFldVUvMzBPaHlwQkhDUTZyWnZLRVg0cEtWMDkycFV5bkZadldObUNKZjgzWnNZckl4NTVBNlhkWnV6NGNDaFBTd0hlOGNxbVRlWFBWQmVSSTVaTXFHTXVuUktQV2xlbUE5bUQrM3FESHozbm5yVDFSZGFVbmNrVTBBbktnbGowNGIrakJZWUdWNDBLWkorczQvZEsxNytZRDA3N1hBcGpCRnhZMlM0WkRkZm0zOXYwRkJ6NTd3N0NrRVV6eStVRzNqMU9KaE5FL2kya1pqM0ZsQ2U1VU12MkFVSi81c0dKbnoyN3FUakp2d1ZzVU4vMzJnQnB0dUxqeFhTMVVVbFNTajMxYVhCbVQvMjZhMUc2MWRuUm92c1pRUnFlTWlQMVZuZWhKZGlkS3U5c0kyRlBGRktDVElld24yZC9rM3o3OVJ3YURhMDBJVXdyUU5KbmQ2dHZtZk92eENHZ3M4NzYrYWo5QnNlZzNtZ1ZxQ3Vwb3d6cEN0OGJuRmdUTWs0NEpicW8zQVdwams5NlcwcU5sQjMxZCt4YW1oU3B3V041Mk54ZXlySnllVnA4YVlCeG5EVkczZkE5UVNoVjloTW8xRHpwS3JURjQ4VEZtMEN2a2FuYXlISkZ2VThBLzNLalF3cEEzSXloU2hNUStLZVAzN0p2S09Rb2hQcmxhKzBQNi93S3pEUWUwanpEWTBjVVJxQVBlZms0WC9kWXRnb2VtemVrK0xxVEdob1UzRkRkODQydzYySGg1Y3dTMmlOdzV4RUw2UXdVODFwMi8ycTA1RWJJOTliaTd5dHVyYlp1VzJjS0tuUWxqU01tZUMxT0tyR29VdVhTRWQydTZQZHhTTHpWOURjV0dWK0xnd2Z1aFYzTXBySk9mTHFJODhtbGtjZE9MaHowZWdSUW9XYVhvYUZnbFJMWE5JaDdCMDFVYVcveTZ1eDNvN2pEOGpDdG85RFRuZkE4aFdvR3ByTiswYVVqV0F5cG5YVXRJWGRwbUVhanc5MkptQlBYNXliRElxOXBHZ2VBK3VTc0MxQllpQmkwTkZBSnQ4bmF2NTVKMlNVUnJvRytGdHRXYWRuQzJlMWowbzQyQ0pndEYrVnB5SkZ4OGlTRHgwNmM4VFpkSElpYlRLRTBXWXp6ampOSjBNRDRiWmtHbGZKVlN3czhUanp6ZXdmMkNaZXFXT3JxaDNzKzdEWjdCRWl4VlloeDkxWTNGR0dvODJZN09DbU5nYUZ3eU1Wd1Q4WDFtRjZqWTBua0pCWFdaVFN0cEdBMGJJdUZYZnczSmZsSWdKODlJNXFTdHpOTzBPMTV0TUxkZDlXZDlWRW11MFR3WmppNzgxRE95WkN2bG1STmNjcFowN0wxOElnY29lSlNSZ3hZcFlpZDJzNnFhNTBYQSt2K2l1YVVTQ1duZ0syOGlmQU00ekhrOVIrZDRzd2U0QnpCUWs1NkNBaEdRdDRjQjZhVi9mNloxVWtUUm9JTGV3NlhDbFJpY0YxSDJTRnhpaDl2SCs2M0dDcDZySGx5REhDZU40bFY1alNnUC8zblg1cDdXUncrTTk5MzhiWGtyMVNDZ3F1Qitxa2FZQ2wzdHNUdjRQMk93YittcDVSajNpMStmOEhVSVRRVG5MbG9WWHFEZWozRFIrMmw2TU1LNWorWnJ6WkN3SnVTYThxa1NHTlNaWlAwTHJSaEJndkxIdnR3cldVNmZBVDlSRFNuUXh3MXhJVmhTUXVSYlNJb0hHc1RGTTBFekpGZ1FRd0NLU0NPTEtUaHBEam9ZekpHQ1NUTWJsb2tsenk5THhndUxXeGRYTEpjVEJrTWJxSFA4ZzdTeXY4TGxyRzBtbUVjMjUwd1lOUmMrekxNdTIrTUpVREx2dVB6TkF3T1JnN0JDVnlMTnRLTzVXUit6d2RnZVNkU1Bja201VThIelN5eXVDTEluTlhpY1IvK0V6NmtYTGhwemREMVFCK2dBYk9YcGxCc2JKcGVTUExDNjhIeTQ4M00xZkR5Y0c2OXE2QUlHWXlaUUhRandkdE5Zak5aRGZ2RkdaUlRoZnNobFpDaFZ2YTA1Q1hWUWtXVkhjb2lrM1pIMnlhSHJQMkIvREVaUjBXNER1aCticHVqTTZnbEpxbklKVjlNZDZkdGZ2UnpiQWZ1UkF1Y1hiTWVCN0V5UWRYMlVDSkpBbnYwdll1dndnbVpvdE1RK1VORUNlc01adjJDWDNDYWZyTVRveVBiTHhxc01UcFdnc0thWEJhS3N2TmdiemhlUzVpVHBKSXdXNlczTE0vWWpxN25pMXY3cjNMNlgwR1lDWUIvNTZwaUZ5b2ZhRXl4cnd3eTFlREI2MEo2dEhmaWJZQlkvZ0w5azFoZFM2dW5RcndBM0JxTDBJNTJRRCtKRG5QQUh1Mk1hcFVBa2RsS3RJR2JtZlFxQzN4dFMvbS9JamNPVHBjY3g2a3RpeU9lQVJZRzJDRjVKUThlQmtQbVpOdm9BMmtZNmk3bVJYMUVqeVhTWEZqby9xTCtqRDdyem8wY2x6MDljQVNBdUlsNGdPWGxTaGFCbUZoRXNRcTVFcWppaFpxQ09yUitQWXpQRTBWOHVWRmw0TERGYmgrQVVIZmt1bElpRXg5QlZQdUwyTm9ScVhoYWJWNWRQMnBQcThQYUhwUTNzRm5IcS9xWU1hQjF2U1drUGVEbnpwMERhVWxnSXc1OWRiT3FKK1k1L3lNd3UzL1JMNGJpR2k3UHZuK1JNeWd4MytkMXV0VURvRGFKZU1ucW51U0puSVVjNmkxLzZOT1ZOWXAvWFF5eFZWRTZJMlZJbUlnWVJhd1ZMSHJtMmZwSU4zZkg0QUk2QSszKzZ4NmduNkFNTEZlTnNON1V1ZVFHZEJHOE9vemVaNFR2UmdmeFYvMkxJVXU3RzR4OHl6Q1ZVa2dkZ1VPV3poNXZXN1RHeXpBWTE3NzA1VzVtMDBZMWMvZFRMdFBwNW5yVDEyQmo5M0RwM3VuUjBuSmhXaWw3OGpCTWVuMlU4MFA1VCsrOTRxM3ErOVdDZVZYSnc3RXVOZjlDUTcrdzdHMnBJMU9NcWlBSUhwZEJVOVpyQlEzRkM4OWs4OVlMRmxOQkVkSWtMajc3VThOSnh4QWNKR3ZhSXlmVTJRSzJnNk1BTENqQnZuK2poYlM3RmlkRHArbGZiUXdJUENmaVBZU29yZVdnc3dHNEN2R2hTQ0p3NDh0L1JtRFJPU0hsSGE5M0pLMTgwUTkzTCtiZW1KVU51MUpOMkF6RldmNWJENFl0cll4aEJraGE3Rm8wRXRFSkt0N3Fqcm1NbWcrWW52d3FkM0Q0bFdjTzI3eUpkemNXN3Z0eHJVeEJxaFh6cklIdVo1YlhqaU5nTWJFRlZGVmxNaTFpRGo3ZE1WMEdLYkwrQnQ4VXVFSS9kNy9iMW8zUDdPbFo1MEcxZWowYXpEZ3hrV25WM1grNHFueVk1Tld5blhrM21jdTgwMjlkVlMzRFkrOWY0T1lEOUVzTXdSbjc3TkZiMVNSS2NIdEZXeVBYMURYL0FTU05vMlN1N29YYVdCdkI5TC90UmhXdm42WGQ1anAyQ1Q3YkZSdzFpY05jSVdmeWFsbWZVOWY5T1NMNTlsSkhJcm5NSHEyTjVjMU9RcCtOeTBoMmRJSTB2NHhlMEZwZlBIc1VFN0pvZmV1cmxLTG5SWktZZjlUMkcrUDU0YklncTgwbWQ0QkYwdUdZVUE4S2Z2ODdNWG5yZFV6MEora25GUU56RXNNekpCVENuZFhLaUwzbUFMTVg3WHZCZzdUVFNvMnhHeTVoTzF1ZGhINlJLcTRYRC9OcEVlTFlRVkdMRmpoL016bEFaK1BwZ2JzaDJEVXdOSW9GTHhhL1hCUlU5ZG9wUDU3d084QVhsQ2hVTjRUQTRwVXVSRzhRZm43TlNQdWUweGhuVlpPc0V1N0x2ZVpCL0txOWFFUjV1UktzeXMvTlFnOStSR2RabXdEdHlRWE9BRTFaOXZWRkU4Z25lKzNiRGppb2k2bW12RFRqMFpDblUrenhadEovMWlKbU16S1pYYm1SdmUzeW1YdklFdld3RGlMakw3VXdwbGtsczl6TUhRbFJDTFgzYzJxYk16V2J0T3pRNzF3ZlRzWE5hWEhmR1BBRkZCZ200Z2hwZXdjV2pjc2FxL0grZzhGK3ZpaXR4YTlBSjRCR1hrdWJDZlY0dlZoYmk3VmFnWHBSWUVpV3R6aFZKQTlySHVZU1VlMnBIMGNVZ0dhc3BTZDNVNGJDQVlzMkdwb0FXcFcwYzlHQWZ6YW4vandsUVQ4TmpDczExWmhpUndPN3J4SS9QNzJhRlFXd2luY1hJVzB2eG4wSkxCbytCY0c4SC91MWllSnl3ckV1RHU2bXBkMmpUTmU2QWhjelU1ZGE3d2U1T0xSdUdkUnZ2UjV6S0krWERRVU52aFhRN1ZGQ1RkcXoyd09EQ0FRSUlwL29HbFVyd1ZRKzl2ZTIrSDVOK1hNQ0tjcVhHWXVuOEdWWCs1anlIVkQrKzdlK2R5YjdkSUpROTJPM2hGT0dKZGJINzloMERBcWVVcjhJVEtaNkpqNktYVU5ONlN5UHNuNTJPb2c1bEh6dkM5RVBwOS9RKzhrUG02cHFTcHhhUEd0R1lhTDdNMEpBb3BvSFI2QmhoRWlLd1NjRnVMcTY4UDJmZjNzNitabUlXcEdpUUpEdHpJMHYvU0JUNnVMM1pTbXVtSkplVmhvRU1VeVJYS3BUQUhmenY1NS9vQXNEMFhzR212YUdKT0xLa2RzWERiWmZPWXBuR0FHdEYzMWtMUDhPUkdiQmJvOXFhdjNVNXVsbWZhOGliWGRKdmE2NHlmaFNqdG85Y1RPSlRvNUR6L3FZWFBVelJxWDQvZUlkejlHa3p5ZEVPbjBmbTRxNWhWY3pGT2N2Zm1lUUY3TFJtYzdlSDhReENralF4Nk9YdmpNbENRVGdKdXBKejR0WHA4VUZOb0NCYnVVeElOanh5N1h3MWJzVXpJeTNNcUlHWGtFcGlLNmZsa1dpQVRiWWRVb1Q2alU0TFlUcGpXd2FianpwS0dFK2o3TlVDWWFpOTM2c0JrYkJmejVJRFU5VUUzZUdaN040NFNOVUlYeFUrb01WZkUwZHMxSmZWakxtdytpMkR1aDdGYnV2NHJSdmpDSXVqTVFVb3R2TGg3QXZ6WllHR2NucVpWeStwazdZdTlVK0hnbUxyc0Zkdmx3eGcvdU5zS0k5NG1KaHYyOVpHa0xUdXRyWGsyYktoMGkwUnpCSmZyVzR0VXRBSnFkNWo3cnoyc3h1andVek83SjZRTE5oWm8vSGpRdUZoQUgyQnhsUGRJakhaL04rRlBIb2dmN1M4K0xUL1loay9wTERweGhaWUQ3QXJPYUdBdzludDJmWjAzSzlrU0FtQkQxRDF1dHF1SGg0NWtzWWZSK21CL3N1eFJXN2N1bGV4VjhDeUFXblY2VnB2alhNRWF6WGQ2NmUxNk1xZlRpQ3ZSUlVMUHBrbndONXRLU0E4VjZabnlCMGEzdUVEUHNJUXhkYlI2ZG9sdkhPRi9mU2JLQjBVUHV6eHQxbDdTUkRNOWpIbFdaQk1RMGhRQVhCWDBLRlFaczBMRGltMW14K2tnR0Nnc0lwUTh4cGM2VHZ3NHB2YjRFNVE5dklSQ0ZRNUNmbTR2MklHR2NsbzUrb1hubzhJMjZkWW9aTTRtVXU0dlV1blR0bXJNNEZMbW1PejM0dlZGNUpHOFUrVi9zcGM4SUxyUlJtazJDdVIvNEoyTHBUMU5ia2lyUUlCZWgzYWY1NGJRRkJuNVc5Z0pDaFkrTGlJbWdNS1J2dUR2M3crK1kvVE41alFBcWQ5aCtGTHNaejZ5NE1lWm5vaFhiZDBhNW4zMldNb3ZlVkh5WG5KTnZEb3VYZm91ZjJUK1JyMkp1RHQ2TGIxOS8wNEhHc2ZjQUFMODVoY3BqTGRWTmhSYTNXMlNhWjliam84aWFXU2lpYU54MnVnMGFNWnFGeE9RMEczTURweGRSblJmSU4xNG54RmowdUorWmpNRWw4Y28rVTJiVUE1bGxUT1pOa2lXRXV4MmVoTndQUys0ejlFYjhsZEN2YWJMQ2FlcmVOUkJCb1ljaEt6WmZGREtSb2lvNzY1cTV4eWNBbjA4R0pqUk8xeC84ZGFkRyt3dXBBb2tMVTNZd1RDS1pNakNHekpJSUdqOEFoR0NDTURseHhxUXl5azhuZTBFRWxlRkNxK0JYU3BzWHdoODd1MS9ydHNEVXFnV1V1S1NYenJsV3JkOTYzMS9xcVVucjlKaTBkeHNSVWxMY3lrNUJ2ZkIwa2RqRjBra2lNOEFmejF3Z21mTCtNSElndGNPazR1V1JubS9PdzRNSm1lVGtDTFJiSThWVWZWT1EyZDlPZEx0MGdZMXVKSEVNOUlDK2pwR3hERTM0aGYwaHdHbVcvWjR1YjRqNWJBMG9KakpXTklQbCtqMmo2VXBTZVNHbUZiQlorNnV4VWNxYTdKQm5lUmJQTzVSTWdZRWhGTGFzOWdaWkJsbit3VlVUdGJFRU1CVi91dVpZMHVLQ3RkZjNoWFVHeFgveDhZVm5SREQ1N2lqNFlSVTNKbFhWemVFd2J5bm41NXVuRHZ2Y1BzVkw1UXBaMWlZMXQwQmpqTzIzRnFxdy9nNmRVelNMdUc0RndkM216bDdwR0VINGkyNXZaNkI0NjlaeEdRSnNiQzdrTXA3cDlKcWpmNGNWazhBTmFsQ2RvZGFwcDV1L2gvSHZoUXVPQnNLMGZ1am84TnB3cEpvZ1U4dkdtQ0Y2cnNUMUxOSjkrUFNQOElSWTdTMnkxckhweXZlYzhrQnRNTzFyNmozYTVISmF5c0xqL2ZDVzIrVXlVbjBaRTFsUFQvbjBnL1FDSDVmZDQ3cHppYTV4bEUxNzBuek5ydFo0ZjFrbnBsU2c4WXBka2RKbkhxeUhZUlI1VUI4MkhMRFBZN2hUWjB0cDBDN2E4RHRKRm9mb1lRMCszZmhDRlpSWTMwTVRWeG5ZYXRtZ2gra2JyclZkV21adko3QWJOeHF2NWx4ckl0Vm85azZWbllEWHdGbCtTc1J5RWo2OUUwTG1hY2s3emFYVmZrNEVnWTFoTnJCMWYvd0NZbm5RdzZ1anpmVFY5NHVpeDlXUmY1M2Qxc0JFNW9qcWNNSi9xeWZVaGpLMUdiT29wdXJKdmhLNG5kNm1CVEQxTjdVdWgram11MFlobCtndHJsRHl0Q3Zkb0JXamRqbUFzU2x0cWlFanNaQld0OVRHLzJSRzlhQ25xdVB4aHc0WXBxWE5NZm03TlZ5dk82UTR4cjhDd0FuWXR4RnRidGd5TDhxQlJ1TnkrbjBxSXBDdjZidVJDRkxMaHhaT2IxUERHUlB4SXdXeWVENTdkNEtZQzN3eHlsMG5ycS9KcUU0MkdBY3dkTVBpZ0o2VDkwMW1qTVNlYW9QdUZUdjNZWCtNMXBKdnBjU3RWMXpjVVFDQytjVVkrV1FPTkxUNWREZjNMNTgxYmtMVGJKMlJDbFF2TkU5MWlvREhPbkN1dDhiUzZINGdKT0VkeUxpNi9nUUxhdU5POWgzYWpGUk4xVTQ0UlJVc21SSmEwODJMTHd3c3JkU08veTVPY0tCN2JRT3lOcGZLUHNVQlZUVE92dEF4MTVwaE9vRVhHeUNndk51K2lCNnlHeTdZczZWUW1wUGRLRDhjeGY2QmU0aUZtOWNWRmN6MHQwaGtTRVp3ZU96UVVuTFVoQTBqbGtud3hqQVprbGVvWm14VGUyTUgxVkl0U1VacExScnY1YmYydEY1VmNIVHo2UDZsQ2ZsMHM4Q2xZTjdrK2RPVGUxOGhseG1ib1lMNkRaeU43L3hNNGNlenh4Y3V6M1IyblFlRk5wMThVRmVyaEhKTW05N1lqRHEwaWY1N1Yvd2ZxaVZnaWdPTHV4OTZVL2FCNFA1aTE4RytKZldaclFqL1doRTZEa2podzhGdHRINmJKMHorQlNLY05ZYkFTZ1pjcHR4ZFMwMjN6dUZFUk5EcHkyWmZYTm1zVVZZc0FIakFVTWU3U25BcDg4UVUwYkRkaGhkRFZJNHJrWlZGV2ZEVldnZFY3dTI0NnlrVzVUSUJZVlRYWnJ1aEFaRCtWdThNRGhpS0R3Z1JUeGdYTGpjR2pLYjlNRXlmK05CNFY5aWsxSGw4VWNZTjhmbG52dTROM3JHL3U1bVpySnMxdTBoTVVlK1loc2hmTFNlWDN4Y01UZmFOMDBNS2oxMnU4aVRkY0ZlN1NBNDY1ZXo4aGNkYnBkSEx5aWNPaEdLSk4wdUQwVkNzaXVhYWdKa3RKTVFkSHJxeW5QK3g5Wmx5R0dyUVBJeW16ZHk0ZGdrZXplWU9EdWMya3ZYYlIxUUhtZ2VvamZ3Qm1JNUI4STM4cS9JVVU1RXJ1VVdiYmU3TDdmc3ZqQ3RCNkJpTVdTaTc3OHoyYmluSkdZY3FjdWd0aWhvV2JQeTdLSU50K2VWYWZkb0U4cXBIMzBmWkZEcDBRcXhuMWpDUFVLcmlpOGpNdVE4dURVejBieDJOdHVDeHY4ZGl1RFJsWDdWb1VPd0FNbTBROUdmSHBzeTZ5Qy9WSWpNSi91c1E2eGFoRWNTMW4yU3RvOGRrYUV5N05IdFBlS0drN1kyYmFjNEZkcytIUjlCTTU0WVpuZ2RTcWxJYVRIdVFwU3p5ZDRDckVoSkpxSkhhbjV3VGNwZElvZ0IwV2ZxbjJVbWQzRjdpQXJEblJFLzZNWmg1YlAxVVJ1OTJERlRHc1RmRU9YNGNyOFRqb05Tc1dGSkljUTdtOXIzY00rUEV0QjZ5MEUxTVJjK0pjc0d5OEJUSUN6a0REdmRtZ1ZXUTkzNjFrQm1Cd0RyRnRmTzlHSFJ6elR3emFQSzB1YXBnQVpVV2RUdTZwT094MGFPVThSYWh0WHhROFN6UktRUVNuYU1LZVUrTXQzRytDYVh5MzZWb3I0bE05eEVWWm5mTER1aU95RG4zSmZEc0hkWHVvTFlLeTduamNzU1IyZnlTRGNaVU92USt3cWRGODBSV1BneC9VUnZRMDhKSk9hdDNpVXlpS05USXRqaU1SeXNMK2Z4bFJBTzRpc2JaVW1TVkc5T3RPTS85a2FhZTliTDdwTjBiTGYvSkpMamhkemVnN1RSaVNuREd2U2VmSXc1T2tGSy9vTU9uR2lDeDQzcW5rTVJLZ0c4cGI4ZXVFK3dvby9ncWFTc0xVVGErY29RSlB6cUtzOTNvZDZNTzAyNndiWlV2TFhXbHE0QUJQZDBmT2pFUXdrYWZtSTA5Q3o0S2lXNDhBSURhOFpQNDBVUDkzd3JIWWZ5U1VlYTNHSkppWEFJNmdDd3Y4TUhGUUhzeXZLSjJSc29iYVFjK3hWdDJ6L0dxakpXVzFROGUySm9CbVRyd3M1UmJnOHJoT2pIa0R4V2JPamlWb0dDSitaYjlLKy91amhRNGdRWUIzWkxRMmJUK1dJdUJxOHlmVURKeVl0cDZGQkMzUW5nVFdnQU9rNnBtaHFqYVpSeTliTGJiUEw5U1FocjdqYlZEZFR1bGRUU2c5cVhzeHJHL1VwZy9WQ2pXelVuV3d3YXN1THlETnVyT3QzV05ySUY1M1EzT2k2NnJuSFVqcmYyMVE3UGNXOC9RZGc2eWtrVDhwb0VWYTBIZGRUdnQyZVZPZDdaU1BGVWx5VXZyK2NrM3VPTUg0TFdHNWwyRTdVamhtb3BVME5BMXVoT1prN0hubXZ4bHdSbTlNd1dEa2JjU0RBT3ZaaVNIZmcwcFNLY0hLeElGd2lkZ2hFWjVEa1dCOU80d3FsTDNlakZ5TGNNL3FqMitHSzVkK29XaEJGWUdwYXlaQ1dpcW1KbktRQkNBMXJoS2ROc1Fub2lPQVRHR2tQdjk0K2dlc3ZMM2JId2hNM3JJc3JaeXpGd2k1RG95WEYzU0RUSktXRGptR0hzYXFUM2s3dkNzSm4vSGRZZm1yeG14SC9Gc0hSRjBJVG40N3ZtM0Z5V0I3RTVrMXV4MXFibmpMU0x1QTQwOXFQR0kxNnNxSmRBZWdrMU13QklRSHlGb0RFMGlBY0hJRk9tc0grSklkdHE2dWtmUTdza1JCNFBuZHVsQUdIWktTQWF0akloYkZ2R29xeGUyMnhINlNVMWNmZThXY2Vac2RzaFhscTJQbnp2UXBGbExCRUdYdnJSalFOMjR6blRjWnhSQ243elByNjlseFdUUEpRaFNkbDNTNDdBdzJTdmhWbzAwK3hQT3g2MUczNUxmazlBaWdUR01IQzJuV1JtTDdESnpTbmR0cG9NKzZlMkxFUUhrbzBTUzhYTEp4VkVKb2VEWW4wT0htakdLSzNrdGtIRitHclJXQWdmNHZDbE1HQ09OaWpMM1R1ZXExaGptQWR6WlJ6cFlaeVpiODk3NGFRa05DNWI3cVJvRWM0b2puSktCblBaMVl0ODd0ZGJrb1BYUm5XaEcxRWtsWGc4MHl1L2ZNL05TbHlIY2owdzVXQWZvelU4K2NTZHduSFNNUURDQmJqMGRwc2VDUXpzYmFBTXRINWZXelo4YWNVM2xSWDZUUWljUE1uZFczUFRLWHBvTWdJYk83Znl2d2FCU0x1OTVjZkhWQWovdHptSVd2YTJKd1dYK082Sm9Bd2VJeExBZTVxOGJqYnc0eGNkdWdVZzByMFdYamRGWVFra1RQYi9jc0FHZ1p6NHVsS09Pb21vRXhBS2QvVFd1OVI4aFg0VVQ4N2tzb2VDMkFtMVVnSGZqOE00N3JXNUZEY0hMaHFqaUdydTBlOGVuQmpRTWdtOWJaYmFtYVNrRkZDMXBIais3S3ZNcHpNS1QraUV1YUZiQzd5eS9IY0NzL0QvVjRHcHUyT3FMcWtYbTR6aVJWQ3BNTFNoRVpyeklESTlVcHB4RDc5TjY3MkxKWjBURWlUZmJNYnpKRmNWTDhWRnlhVHczOTVKbFV1Y1htaTA3TnF5OVI4RzQ1ZTBwMHA2a1JZYzdJRExxSjM1OWxzcTY4U1l6aDRsbW51N2p0bFJkdCtFdTF1VWZsYVo2by9ydmE2YlRiNTBWT1JqVGtMWStCUThVSENSSEdRUDRvTDNiY3FyeG9vTEdQWFRsY2l3SXA5RXNvd3FxYUM2SHJIWjJCRXY0RGZTZ2pMNnhEZEduQ2pjWDF2eS9hRFFvSThhejYvUmJpWWpsWE9HTDVXaTR3aGwxdk4yYUErUHdqNlBqWFRZSXhyUDZIRnBxYkRob2RhM3dGQWJqOE00ZEVxakRmVzM4ckdhRitkZFN5T2FrKzJxcjdMdWYrWFE2N0taK3pOWVZnUHRUa1BKdElrdGg0ZkNqL2JVWTJqV2UrNmNpbGF1c0JkQXFES2pkMFp6eW1kRG92cjhLUUIySXlYSEQ3WE1JWlI5OW9kRlI3TFpZRWJJejRxanlGTjNRSTNvblB4SlFsa0pxSXdacG9OeStkYkhCQ0tTbWNNVU05eHpjR3kxS3ZWS0M1ditEMmQ1Q2VkRE4wbFZIV2xYM0daNGE1VmJJR1FibHdyM0ZEV3J4RG83MDB5OUNCM3pyUFRQeCs1S0JVNGJVbmJsUWY1dnBBb0ptd0dtck1QN21aeTdMRnFyRUw4c1h6ZmhGOVR0QnY0V2NubjNBN0dJVVE5cHVNRFVWLy8xdFRpRzMzbEF3bmZTVGl6UFRubUFMcEw5VzBia2lWc2d6YlB2TUhabU84d2k3ZnhKM2t3eVhZRzNlTWhUcnROUFpwSG9lUisxMmM5YVRiTVBKd3NBOFRjVms0RnQ3TUZIRDNoWHpDZVFnK20za1p0VzNRUGQza1dndmlzd2lMdmEwak1hOENVUTlqMmRFRUtUOC9MWm9WclFWeXA0N0R1SDE2T1g0MGZiQWVYYW5GTDFTUFpPUEpCS0hkNWFnNlpHM0NjZHROMVZLaDdrSWFUTVNvaDB3QVkzUWMwTU1zazdBdlVEcDgzbjMvWDNOS25nUFRoYVFldGtHRGNPekphMHFiUHNpUXdiaDY5V3RmL0luM0NpVEdSWmwzZndLYW1nOC9aRGRFQk1lUDM2em81ZGc2OWxlSFZ6U2ZLMVpTYi80T1dlanJPYjVMd1NtZXoyUW9UMmNGVHN0VW1yYmthdUY5RVQ2ODUzT0FqRzA5dVJiUzhNU0k2ZVN2d1dtcDVwKzJPbkc4UmsxdlowZnF6QVQ5RjRPdXBlRmF4cGk5bERTa0ptU1VqTkRKOXJmSnRDOXdLV1l4ZVNreEV4eCs0ajllZVpXTkw5d1VqdmdlZHBMaXQ0TndCRFVyMjBFOS9lMm9pVW9VWm5VNzBnNEhNdEFRRHFsRFI2QXN5cjZybm5Ra05odVBoTFlwSC82M1VFaTR3OFRGUHUrQVZabG0rdXFweFJzaXJCTlgzWFRNTE9hL1pVMkRLV2dYbkZaeEl5R3I2SjQ3YU5SRFQwdkR0ZVk3S1lxaFZrdzh2eCs4S2VITUIzcDd5cDkwandXanFnNjJ2NVd3eEg5TUluOGxpbkNhUEU4bTRJS3VDSE1acTUzbFI4RWV6Qmt0VWR0QlhpSTNUTXkvUVZBVjl5UjVvUzQ1MWVEUDRNVERYeWVJRGMxNTlQdUVia2E0aHBOTVRLb3lpRnY4dnhUbWRzdVB0ZUxGdlNYeXd2NXpWL3V0cjNjaGdRSjlnK29SbGpGVjlxdlA1bHRmaElrMngzNk5QNk1yUFg3enkwQ1RKaFdXMHo2RnM4anBXK1RpVGU2cWFHVU9WVC8wNENRc0F3cGtTU0FYNDl6TnROMFlVd016bTl4bUpEZDMvcjBreWdmeUZkakJOTlVla3FQam1HUEhFQ2E0aFdaYnlQTzJPTWp4eDNDN0ZNZC9sT29nKzcwcjI0UGRQSktvZWZrSm1iSWY5Mm11d2JjdktVMDlxOWlzby9lSFJRcGZ1OUlxVndFNkZWVjdCeWJnQVU3ZWpURjRXbGh2K1dBTHh5ZGd0M25xaHNidElZNCtEWTJNdlljN3FveVpqOW5wcS9MUmRod3F0clEyREhFRVBxUmdERTl6cnZYNDRvUTlwYkFsQ0V6SVNEemdXL2ttMXpyYkJpYW9pK3FMUUhKaVF0UTZrZkd4ZWFPclJVREZwcVVWdWtkcXl1WTN6V1lvUDdYeXpGZ2RRUiswV2JnVXhrZGpQMHpwWEdQbEd6dmZtais0L0ZmVjRtNWNtd0M0OXFNeGErbFpYNDJEMjE1TStaVFpzS0JBMjBkQUZIWXVWMVEzUEZ5cTZDM0JWaGhLT0RmTzNEb01mY1dWSTlrN0loZitNanlwSUhpWFk4d0t5ZnJLZCtjM00yU1piNEpEY3BFQkxyQmV4eTlFSVNweHo3STdEWHZvYlBEelNWVVEwSXQrcmRqeEpKSGUxelNSd0xIN09WWk9MZ2FIaWpyTWtlY01ZYzZ2bkhBcTU1eC9MZ2s5NzJVQWtoVnorbFJMT3plbDdodDAwZW5nUVcwanp0Njh5RU11ZGNsK1I4bHczM09taU1XMGlsSUcxRXJJTnNJUW12bjRDREdrNkdOR3k3dFA5K0F3aWVyN3B2VlNGeld6NUZBa0RVQlpOQ1E1eThVaTZKUHZjNGJvR0dMWGhybm5QZHp3SXdrYnlzblJOMnZna29BZWtERXo4UENkRjJTVUoyaGc1ZitBVEk4eWZBRnYzYWlMK0xpU29hRCtnaVVyV3JGVVdVNjRpaDlwamV5aVlIS2hnaWZwVDFSdFRESjR3bjBaSFRJQzM1QVd0eDVLb0krVmtzaVU1RHVudHJKdWtGTlQ3d1M4cDFhY29aemlkYWgyNVQ4SzRKbzN3VXhaMFprWnpYUXpoTmM4bTBhSFJSY0h1Y1B5YnZUQk1pbWZRQ1RIZngra09NVWsyQllaelVXWmkvbUtKWHBIRXB6V2wrVnZNaUZ2TERERC9tT3JqMVBjelI1WER0ZnRoM3h0eTdzbU1nWEQ5aWFVN21CUGpYYlE0aCtjUXdKZi9RUGlzak9iVVoydXlaNi9UU0R2bFJ0LzZ2S0NJQ3R6ZmlCTXFRNmtKK3dxamhuTENvSXdqa3VYdEwzTXg4QnZTSVdXeWVwOFdrZzRUdjltUjhwaE04bkNOWWhnWERiZlJFMGhaSVpZS2F1UGdlMlNNTzd5bVZBOFRoUVBPdDRwM3RqVlI1SjVIOUQxczAvU2xRTCt1ZzdFVUduRkNld0Rhc2o4eXlYbEx3WDNPNSsrcXJDU0s5alRsLzRhTEttdG4zQW9uVkh4QTl2Z25VeElWT2RqWkZNZjF2c2p4SUhKMysvZlBQWVZSVDZ6TS9Bc1lLRll5N3RFZXJ6V1BXOXpOVFVFWW42WHJUM2l0RTlkMEFkY0p4dW5HRkZSOGxGZ0NLYkZBYjlYTnlqcDVCa2xMZkdSQlVwOFYyeW85b3dhcWx3QzJhQmRjVHNJanJXTFVzdmFrOUx0YzFwc3FzOE8rY0s5YVZMcVc0OHc0T21Da0NOdDFxc3NPK0J1bWhlcW1lTW1SL2puVnhjdXF4a3oySWdoRk1uUW1OSmJtTlpuVFdyQmF5YWwzWHp0KzdhWUVHcHgrTFFUVzJkTm1GZDhOUVZYd0QwTWZUbURwYm1Xc2VKWndBMHhHRTFYODRLVzRWcGMzYmFKbkVlR2djditsWHBGZzZSMnFGS0pMQlR1bzdoTEJhUWR0TXNZemxraVU1QkJWN01sTHlMeTE0VndONWdhbW41UnBTWWRud1dGdk5YdGpQQmgyOXR6SXNtZGxZTHpFNDYwTzhCbmxHdmRsYU5uT3BKVUtLTUxTT2JaUjlsRnZFTUxZVXB6WTVnbFc4V3g5V2lYQUR1aFhFbittNVJOcklaRDNBVkF2aWVaWlFJVXhOWGduNVdTQ2ZDbDdXL3poNHRlRFZ1Q2NiREVqQWJZQ2Y4eU8rNGR1VnRrb2hsTk9XNU5JeWZnQzJPZGUrQzFpSXZnY0p2QlRiZ0hPMDF4L2pJejhROFN3alpnQ1hRUDZoMnlHRjRLN1lOWDI3aCt4c2ZUZGc2OTJ4ZENrbnRrcnEvM1VtVlY2RWNXMk1OQWhVZEcyRDhNZVZhNUwyVGVsdFphL3lXN05yQ3JmVGx3VWtDOHE0YjhzSXczeHMxN3FNd2l1aktIT25rRHFNdGhRT2V5RGRWVDNLQk95UTBZUXhLa2pRalcwOUVraFVBb0NMcFNuejBoRGtFVmVQODgxU1pWMGZHMXVKckNXb2ZZSkpvbkIxd0lsUzN0L2VZUGhsTmduQVRrelBWL05sNnRYREpSanRFNGIwckgzQUk3eGVUcHBwaHZuMFVJWmJpTDB2ZWJXVlFrSW5adGxFMHdPdGFmWUkraGMvY0ZwcGF1SjFPVTlFUnM0bTZPNUl5VUdzSEdnRmhyS1gvRGoxYytKZWVwQkxJOEdWYmxjQnVmZ2NQYXh2WW9aWFVMbTkraFQxUXVxaXo3Sk9LUUEvQXZZSk0yYytGQ1ZaN0p2NXhrc2pqMkpOMmRpa1VKNWZJY3hRZm1pNnRzMHdMTGlucFdwZndidkZGRUpjU3B2enBoSmtqQXdreGUva1U4a3FYZ2RieEVDRmdQajhjbGJOdTBUTE0wVHZQN3RTVWYxTTN1cUNUSXdkNjk4c1l5dzlxdFJqaHNyWVV1OVBqdzNHR2FVU0tOOTkwQ2cvaWRYQzhpUTNXWnZlM290ZVIzeGJmTWduMzc3bzVJNGpWNVZCVFVoUmgvUFlMbEcybWU4VTgwZ1AwTno2dWxmN3NIbU0zT1ZWQUE3M0todDBYeFQxTjFEN3hKa3NoWW9jeU9IdVNidVg1Q2xsUmhJMS8xM2NXb3BNNHFsYzlCaXl1V2dRbkszZ3VOcE9tUTRtSHJWTWRyTVJnVDdOc2dRSzhnallDcjdTc0ZKeWpoTEhpM09XejJqSUhhRTFTbUNEaVFycSs0eE13S20xd0tQQ05iVy9vRzJEOFVDSit6SnVBTG9kTHRwRG5oRmRPTWxKRktvVHJKQVNkdUZVUHpUNHVlcFI2ZEp6NjVzeTBKbFZLa3h6QnVwemw5TUdUbGZ3czNqMU5uSDhJYmpzaW5XNjhhdlQ4bXMyMTBmU0E2bGFFZjFDSjNENjR5SFh4a2t2d0swRTNvSmdRZzAxbU1YWjVxbUlNSmYzaE5lajRUUHhjSWhXZUN4Vi9NdFc3bTNNNnB1enFqYjJUT01wbll5WkxEa2lLY2hidFpNMjZVWGFObEV6emVObnZzTzFZUEIvcTZWSVFWbUpMYjUzRUNxRmRncUZWVzNUamxKSzREeTBUZkZOMnlLT1hnNFo1dytmZGN3NldYM1FqN0x5am9BcGlIdHY5Y3c5MzRoNzUzaFhFd1V6TldPNmpFSGF2U3JDMElTejd3c054alA3R1F2aGl1cmZrUHNIaHVqNmtPL0lWdmI2SUlZWnkyYS9DZUZIWnhuUEtndWxqWVNUZmRrU1U5UEdoSDdyVCtZcnJ5V2d6N0gwalE0dW5oSmNzM0VLaTYya0g4RkhpSmlZcG9qSWJtSGJjMnNSMCtPVUtmRFBXSVAra3N3eURGcVBiQXVlSUg2UVpZSy9HbGowc0VmbVIvZXVNN3NycmN4RUU4RFhjeHNDUUk5RmpobDUvOGNRRXljTEduTWI1Rk85bndaT2d2WTRRbWRlYXZVQlBLbFVDUlhWd0RYZjdrWUE3N1lyRFE1djl3N2VoVEdOMmNraWM3MTlqeW1CR1ViR2xjMDE0cHFrUjRoV2dnZmlHWVk3aVMzV0FYcU1wUERJZnkzb016cW9kclh1dEg2U0RiRkQ3NDVJb3lkd2xPcWhYc21Ka2hyRHhNcGI1a1V1N0Y1ZTdEaHZ1cWVaTVRoT1V3SnJKT2ZzMWtGSmg5QXQ1S3Q1d1lKUitaZy9TTFNpeEVWUUdnOTVQVE1kaERsWFdkK3N5eUtpbWJpK0E1SEJRVjh3YmVXOUY0MHFrM29oQmlIMVFUS0ZVaGJidmFTU2M0ckxYRnMwSDlxZ0c2elFSeTJYalhSOVI3TkJPbUxldWdOSU1lVnNkWldTZmVlUlV2bnVIcGd5T0k4TVlrNWZ5b2tlVmY3M29ybThhZngxd3o5S0hGSjc3VG9BTEhoN0VrV2tlWUlWOXF3QVcxQ0wrNWp3VllKR1hRV0xBUFVRSDhlVzdhTE1kckNqUDVUVkMxYkJpaUhLY1k5SWg1MzRWLzVtbm4vVTVET3A4THV4VmdyaWFPSGJ5aC93TGVVSkg4N2VBTElMeFdrWHI4L1ZPb3NFY2g5S3JtbmdUa2k5ZzcxQWtvdkVzdTdQMWJnaHNwdlo1bEJ4S3VIUVJLM0wyNnhaZ2UzaXNTSnJsWmpLbkhQNTNwSDRjcWJsV1dpNXE0SGhkT2YyUzB1MnVkdWhVM3hPeE5PMkhRQ1UrTkdxZlZtRTJUajh1TGJwN2Z5TGcwYzV4TTlGRXVqZnM3UUVkYVJUak5hQjZjZC9NekUwR24xRlpYOVBIdUcweFNUN2hScFhxbzExRGZsNkNrQm1LRWpsYzZNeVJxWXhSeUJuTGhJbHBjUTZMa2RMaENDd2JwNkxId01kUmNJNUo1SGVCME02VVBua0xrNDNLbG1ZZnVXQU9UbXprSy9rWFNGYjhKRC9PaGV1REQ1WlBreHhrOUI0NnNibFJYYk5RS0M0YmR2MlhXSkdrcEJ5VWFoNGhlUjZIVW9TN05wVjlGaCt2bUg4WUZPZFlQbXBTTjFHUE1Pc2xBbHdwMmZXczIxcEw1enFIUXpneHVPbnJrVWpoMXNZTzlyMFlHVUtZZElES3hPS1RUVm9vNnZIMm1oT0h0Z0NFbVhMSHlNaE51S3BTMzRRU2M4c1hwaGw2V3Yvb0h5VW43SVl2akQvYmFvdm5QTlRsV0pOK0tEZ3ByZ2Q4RVc4aVVDS1MzN2pmcERwcjUxUWMreEt5RmxOV2tCU1g4dXgyL28zQWtzWTNHOXl6cEhSVk8rTjIwTGJYRys2ODZSUzF1NDBScXJQZzczZ2JCa0hlZlBNRndmclVLdlVMOW9jMS9ZWHp6d2JVL09UeElyYUtCSkRzUGhodm9lem01dFFKaUJVVlBMUXJpS3pjZEpwQWt1Tkd5VzdBMHBQOUtmT2dId0pLR2xxK1BWZ3kzVEFTUHRUQWpjZ0xWaGRIQ3AycEtuSlpTdGdVWHJNQllZYTM5WnlEMXpIUWtLUUo2Z3dSSElldWxGbjZERW9TUUtiM0JXWnBwV0NncWMxZmNhaENrMEZWWTBrRHViNTgyQkVYUHZKTHd2dzRnbE0zUXNiYkR2SVZvMlRUVWFlZFJ6SHcyVEhpZnZRWUxydm1wZU9UVnNGYzRYcGFYSlh4NmZqOUNTU1lzcWRRNzF5aGRPSGQ0b1pGZllKZndmNHNVMysrWTIrZVdwdGhTeTVaUUxMK1BYQ0dNVGhBMm9BZHdReW8zdDRqVk41YmpuejhqUjUxZ0V0VWJ2UTltazdMSFd6dnRVLzgrZHB0b3NRMmNiV3FTOVBVMGxtV0Eya3RReWg2VmZWdTlXM00zUWdETEtNQXozQStQMkZ1am5MN3N3NjB1dnQ0R0JuV2FGSnpnZlByNXdpbk5NVk13ekQ1UGQwZXE1RTZHbUxHWGNHWEE0SUQvYTdmQUpmU0R6cUxVUktET09scVhWUmNob3VkWktYU0pNb2ZqRDkzYkxUVVdmZTVUcDdkc25DRmlYYkEzbWJ2emx4VkVEUm4wQndDZDBNTXU3WThHa3Jzek5STDR5cVR4RFBoWW14Q3BYRlRxOHhNZDhGY3dPSnZneEprNUc5eTVIM2tlbDY4UUNNY1ljWFhQUnlhTHA4cnFYK1IzZFc0RExSeENpVkF0alFrSVEwODdmenBCZnZQOXBBVS9rNzk5MlJUK3Y5T0NIMWFXYXQ4REdwOGo5SURPVFc4Z0V2SGc4RTRHbkgrY3lDeGFFOC9nTjE1cTQxcktpNzZPM2psRDZQMWpUaGljRW5UK3l0Z1l4OGRqWjA3M1dTYXVLN2t0OFR0TEJNTktvR013QWVxV3lkSHg4aUZVaXhvZFFaZ3VmOWpBMU1WS295L3Q5QUJpZzc4YjhLcFZ3YjdETlVqU3h1T0RMZ0dOalA4Tnl5dzNmeVRiQzI0K0lwNXVmUlQrQ2Znb2hYSVRWNXJzQWhvbndQWUpkZFlhcGVMNVptM3Vodyt6ZnhYTUY0eE1MbDhXcmhWM1YzWitFR3RWRDNOeVZ0SUhCa0ZJcXNBS3ZmUWs1aENDVk9XUDRTT3AzMzl0dVo0bVYyMGJieG8vOXFHRVpYbGN5VWJuOFRoN0JJdnZEaUFjejd2ZDZPOE1vU2NlNjZOdVQ0WHY2cUQ1QnBseWdzY3p6T0l6RkhzdnJkQXNKbTMvSVpKUDRWUXpmcTVMQzByM21QOHQreHVLSmtTNEpES051Z0JrSy9wK3RXbktiVGMwMnkvOFJPRDRsYU5CSElPd2J0a1BDaHdFbFRYM3EvU3RkdWtyMDdVQ0RkVmoyZTVxeGJBQkZESmNoVW1UQzJzcGdmd2I0UDlkVVNTam9vMWdkT0JVM3k3czA2bjhyMXl3WnB5MVVaWXpoYU0vcTVmMlhhU3hidzU3MnhNTmYxTjVvZy84RGpmZGpJODRyTC96SFpCODdoWjhYR2hUVThCL2QvVzVoNjZXRzhmaVlJNndlWGtncTBvWVVWamYvMyt3V0MrRTgycXlnVWwxQTVnZmlKVVdKbldNaktTSmhiY05PcUNoSUhkQlB5K0l5UVNGdWkyclJWalQwYzFGcitxRGhjVW9wQXlGK3hBaEJITVRlSDhwak5XWCt2cDN6eWpmM3dqSFpCNGdXZnNURFpMM2pGN2pubmEwOTVrd203RThUTTQ2Q2JmNDJ2RVZDcUdWKzNieU9GeVpWQ0FiSHpDVjdUSyt3QmVscGx4ai9zNFZycGpNM0VsaTVnV3JnaklTMHhDTEh6QVl3NzNDbDdOK3FYbDhyOEJlbkpXbXprc09YSkRjbGEzeU9TOVZIcVNFTjhGSm9sdC9mMmJLM09QSGt2NEg1VVpEMFRidnloaXE2T1p6bk9XYzUweDZvbVF2WHJqaXg5czdyRXhNcDEvcG1tYmxEbnM3aHAxWi8zRkovbDNmbk4xcFJSUWVrUFB6YnVIQVFDRGp1dXV1eG94R0J6L3BvZUd1R3FhWW1ST1FlQXZwZ2h1ZngzOHBQSzlFV3Y3T3dWVTR6U2ZsQ0JJVGRuWitldS9KNWNNMU9LSWxteE0zanFKTjk1TCtpTEJjcVQ5bkJaaDZUYkdRVk8xTVdzNFNuai9RTGJlY0hHYmpJZUR3WWhRdjB3dEEydmo1UkJ3MTZoK1NBYUlSc3RQVHlqTlFPaEtrc3VXQWNGdjR4eGdocElEVHk5UGJQRXBPZ0FOK1FDK0ZvTEZpR1FPUlk0S21nb2ZiSFNydVluL0FOZ0FmWEgrcjJvdmViWmZicUFZeC96VXhaMGwxczdLY3pldVhRMzR4bnIxdDNBU0lBK0I0SXNqaWcvUGUrd2pGRVlMbWVFWDNUNndYY0RHcVBnVTc5M2sweUx4TnRCRGgyMFNhcUZDNHIrN2taVGhpY3N3QmV6QXAxOGMxYXpNRU5LQWF0QkRsZnJKRkZ4NzN0Y1owUHBSdjNKYUw0ckM0bU00Yi8zK1VtbkpwMTdUTFY3clM0V1ZQSUZRejFDaTQxVDVySzlDYkRIMmdrWUhJSnFtOExkWDhJcmFjNjlLTGpVME41ODBLUWtGdW1DUlIyZURsZWJnNk5ad29VaVh5ZUZzUG1lbVJiUkw0RlMvS3UwVWlxbzNqWjZvdTYvUDNyWUp0STZBVW5BTU1pRE9xRmIwQkFQaGViY3BZRGt3dENvL1BFdWo5Tng5SmZ4MHlteTVpWWlXRW1xb04xdjhDbm9yM0lOWGRIbVk2aVdCYzJGVDYxSzNRTzU3bnNKcnVQU3FsN3lJaUZYVStlYkxaNnJMa25TeFJ5SDZ3TEwrbGd3c0NLbGRhZ2dBVWRRYlREa3BXaXBubytiRDZ3Yy9XcXBGeGU2bUI3RTFabjBDY09NNDlneGh5azlMaVRuQ1Z5SDhKREgrYTJ3VzR5SzhaSHBuaDZ0Nmo1M3ljRFdtU0JTWmtBU280OXZ5UTFVQ2NMY1NBQUk2WTlVY1IyQVJ3b083VkNLNlhkYk9pV3I3REpKV1Y3SVVISTVpeEQ2MVpaVEdqNHFHZVh5S2ltZGIrL0NWY3ZqdlNEUGoyMVV2TmozLzBETm1ieFUyMnJxYnQ2blhUdFV6REZDWWVGMDdVZWUxUmtIQXhGcXFPOThRclFEcE93RFR2b1FWdXZDNnRpN1NEMExQVjIwN3ZxZDdKcnVOYWxKa3ZZMUJxRFRmekJReXNjaVU1U05WYVNucS9aU0UvRHVKaHJkTXpKNE13eG5tWnV6UEZXL3FBRm1zbG42bElZV3FKVHV3c0dZUm1pMStkVHpLMFpVcFh5Z3FrdGpreVM1QWY3M2hzNG9paE8ybG10bjMyeFo2RWxXUmZKOHByZW5EczVvRldMSFdlbTNsV1RtM2FhWE5wNGwzSE9ITi9rUTJWWkdEV3N4UWJ5eGhpeEZqYUE0c2YrclFGL2piOU5CSW5nQTN0QlZDUzZTeVVkVDhjTHNGeHB0VjhJSzFBMERxWEdqOFBuOHdHNkJJSkc1ZHhMRXh1SU84MUw5c1FMVkRzL2hoRmdVeE1BNEd6UTVuZWFXRGg4VW5HeWxoQUNpaWxmUG0zaHdaVUNndnpFVllkeXZ4dGw1cWhZY0VnVlM3WG1PUFFBVmN4ZzV4MHRDaVM5dGtmTVRiaHZxZXRSeVFRQVZQa3FjNGMvRjdCT0ROZU5jYkorZDlrTE5VSFM5cFZoa2xybHJXb3FYT0hZSHgrakErbXRkSU9KM0hEOG53QTdWbENUM2R2SlhFZnBLZE1hTUpuR092OHNxNHVzbmpOektkbmhRV1BycjU0eVdENkl0aUo0c0VrSVkxeHdtVmtkVnFOVWtMZW1YSXNUd0lPMitRZFpOYTJlNkVQL0dxSkhzS3JrMVVnS2tITVJBWllvbVhTTnBUejRsQ2ZpSXd0cUJXYWllaGVnV1I5TE9GaG9CL1FNU3FrS0VUNUxCS0ExYTZwWlRzOTNFT0VIUmNyZE96aGVUTkVSdUFpcUVlTTdXY1BtdnY0cytGRjZobzlwSFdRci9WbDF2TzUwcjhndHIyVnEvbXNxdkRjSXQ0c3o5M1MzaFVtM2R6WjdWSWJudFZadGpva2MvWVdyYi9uNFRoYWhoUHE4djJ2d2srVCs2eUhJUU92R0FpaEN2OGNBNGZuY2hXcjNTNGU0ZVhxb3NuSkNQWGtqYVFEdVZsZnp5dTNvbldpZVhFOUNUV0pWSGM5ckt0RnFNWWl6ekhtY2hMb2s3NlJyUEprRm92bUcvT1ZHZ2NLNmJkWlE0aFl3ZUZvenZ0MllDWXB3YjJCMVg2emh2M1dOMmI3dDhNS0ZGS2dzK2V0UG1MV09NR0hxRUI0dGx1cXVyb3V4dE4wV29pekF0TytOVmw4ZHI3VXlPekVQcVZHaWxjeDNEbWZPUHdkcFVUckplMmxXcmdIempmUmxDR2xNNGpPMHVxb0ttcktUMzdhMm5ob0ltWm9DN2NuVjdyNWVCLzkrL05IdXU4WEdGZE9TcFJFU2VkQm0xUTZweG9hN2E2dEV1Q29tRkJtdEMxQ1dXWExSOVBRcVBBS20rbGxnMXRHTXBYclozbkViTGp0MmF6b2owMWxEMTR2OXpSNEpHQTdtaTc0cCtVSFJEUEpzbEZvT3lDV0pDOVU0ejNGcGdWeUlZREFieEN1djZaQ3Q5a3Z1T0oxYVhVRU1DK1lhMjZlT0JEQTlCd3ZSNVMrUEhaZzFVVFNES3FldURSOUJzdFE5REJISnhFN0x5SHRRL2tzckpicVhhUnVFR2FFTUF5Y1I3UkVOVzAvYzVHMElYSCt2Vkc3T2dyc0hlT0hDZUtycURCaEhUVGQ1RUtoWUNFejZLZjE0WTNQYmJ5SDd5a1JTa1ljVUYxMTFOYWpxaDVQdkFMcnJ6ZW5tVm9pWUgwQzB0cTdHNk1tUU5qOTVOL28rckM1ZDA0eXZkREJYcTI2aERuYW1QOGhTbTRlOWRXUEo3OW9lU2psK1pOM005RGFWREk4dEFRLzk4WjVPeVNFTk1xcUlXdm9zdWYvTThSeG55NmZMQytuTENlOU1FTUlMc24yVzhScUo0RlhCSm1IdGJIWHVkUDk0THdQMHVhSTZhUzBzcnRRQ0EzUUNKeEdFcmk5NWRaZ2ovcjZveUZCbkJtS0RURlI3b1FQZHJyOWpWUEF6TzlzZCtmWmdCYzlidldRajJLRDN6TklNalEyVmhUa1JtRUY2djBqbU1aV1piZER1dVRBWnVPUU82bk43bHc4VHRqMExyVENDTEcrMGx1MGRlY0pNRnlBbHpIM2FBazFXOVVQbEI1eGNlcGV5VEhPakFnbDhtWkJDRlpnVXJTVG1WY0tTQ1lrWXI3SzFyZVVza1d0YXZvdlAzbGdTRTE2SGRHeGl6VzI3cThZLzNjTnRHUG1HK2E1RkJJdG91YnVQeC9yME01cVQyV2trNS92QlMvSTUyRkRHSmJ0RXBmZjN6VytWWkZDZ0VEMW9EZEhrTVVlOVFqVDZBWHEwNWJGbFhLRTlaM3AvZ1pYNlRBZ0FuM29aTDJsMFA1ckQxQmQ0YmR3U2VNQ3NXNFkwK3ZscVFwbi9aNS9XWjdoQWozRDM2RWMyUURnWENTdE1Gem11VHU5WnN5M2EvcC9PbVNFUDA2TG9ESVlNVHBnaTZxQ0hycXV5RnVxM3hOaWczRzZnRlUzZ0srTTlEUk1uWXRWNWh0b1JONTZEekRkVzM5OWUydThOelpBVFA5WjVaSEROOHFrZFY2b2FZWGJXYlZ1b0V6OE1CM01RWmUrSkVRa0JXdUNPUmZsMHlRb2ZCQzd6aHpDQ2VpUUN6d0VJM3JGUU5UYlBManB2MHBySm5QYVJyOG1vRUJMbHRVK2NtTUpxeXRMZGpSaUNKL3c0SWlBL1g5WHJzUDZxK0lrWm1HQVdMN0s0S01UdjJSbzR1bUZhODRaazhlb2IveUN5Qjl1dkdvazAxTW5qUTNLK1JETEFjNkd0Q0JISkl0Wnp1bFJJd0RXd1hOVXh4Vit4RkVrZllYNDVXY0ZuV0xzY3dxVVRlN2lEWitsQzNiRlZHWUxvYllXblZQc0RFNk1USVJtdTBwRHl5R2dkcEc3QmNNbnFBTTdLbEQ4TjdQeDZITFRlRjg4WHpGeEppcGthbHN4Qkl4bWg3OGxWRVRjdlp1TzEzaTNNZTFDVjh5MDZ3b2s2RENCaFpkS3JKREFEZUdtaUgxME9EYml0Q2M2bkxxZjZGYjNBSUhWK2Fvc2hsTnFOdzdubmJmVG4rVmprd0svSURzZlliY1lCd0hFR0pVNnpnWnVTQU11TmEzSTJuRDhuUEVrZ3o3UHgwS1E5d3NFdDNUZzFDbUpINmZLRUFuODhPSk16R1E1dkV3WkhwcHFWOFEycDA2UXBUNXR3eEFBZnZtL2ZxUkp3WjhDRmxta3dQTG9RSWFzdFNEUWZ6cU0wSjNWQ2Y1bWxNUFZyRmR4RDJwVWdDeVdJVVE5UGVuSzRHL29kczJydVl0N3Y1RmFuWUpsc1hLR0s0d3d1UDhqLzJxaGpiT0creW1sTVlLbmxyNmUvV0NrQTQ2SWVTcjZXZ204dE53Q1J6ckZINUZicHFudWE3N3plRU5FSExodGJHdThqUXBJREdrRUdMNlJOQUhvQ3VGcnpCY2REMHBTYmltM0JBUnp5VjBXNHdIRG9kdXZtNERsN3NEVGNnWTNUSjVLZEx2U28wRXBBbG12TDhteDNhK1hRYUhRRUZhaVJKdUlRVHpvZjdLTDU3dTIyQ2RoZ0xkcENzcDF3M2FtVmh1bm1wYndHUTg0ZVVBWXJZdWROK3NlMmV2aGxwZkVITXFTMXRWTWRuQnJCdFUwTjdxM2k0bEFHVkN3WHpUMG5EK0N4YU93bzlIUEwweHEyWVYrc2RoM3RoZE9WTkVyMjBUR081WEtzSDhjK1JDeHBTQ01QNkt3cTI1WklSYmVNZ0tDNDNpOU9kUVVaODdwNEg3d09SL1hhczBUWWp6RVRvNTg0SGoxaURHbDJnVkJJU0RwZHlGaUtrTzllMGw4bjJ4Z0s2N2g0UUVKemwvNDFjWExvQVNOSCtLMEduYVFaeVJhODFRY0ZJWXdTUTZoMkZLZHZxUHMwTE83dStpRjl3UkhaZldOVmVVWG50Qld1Q3JENzg0NUtxKzZYK01YKzFWL2Vic2NONWpYNjdCcWh5OG1lbEovVUJwK09vVG9xUVpxUXVVVlJ1b3pHTlAvT0hNbUhrSHkxK1R0dFhzWVhyWElvR2tSOXFVQk1NV1hjRDMxcmY5MGNNUTVlekRIZkxzM2RHc2JZZ0UweWxMdDdUYU10TmhRYktlUGRWMXl5Z1VHdDF5ZFBvaXZHSm9NSjhPTG9GZnZVWHBicCs4cFZoZEhhdHNZUkhQNWN0ZTJhZFN6RkhITVR4Q0pBejROR0ZjaE5RNGJpbUhDM0R6aVdLbytKbWpPMlIyZ043RTdSdEthWEhveVBLS3FScDhVVWhrMG9xNVM5N3BHWm0ycHRKeDVET29TYXlMTUNOTkZDWTc1UGNOSURWUnFaYlJQRjBvRnVTdm95T0ltZXRvOXRTVkZLQ2QwaCtiZDlSM2VkaUYxZUFiOXdtRXRRb1pYSW1qdlpsaVJ2NElIWGt1aFcvclpIRGRtVmdwMDViQVdMNW5DK2VwOFlldWprTmdac0JteUFVRTVlMFdBTGpVT2VxOXpSVlExeEM3WnJ4Z0c0RkRvWkU3cFhCNlVieUJJZ1BLSUU5dEpVQzlKbTFtQTIveFpkS2M4T3lxcTIxRWJFeEhPbDlYODdiM0IzdVI3Ni85UGtRZ2lpVGNxMFZISTNsWXlTbHNvMFdhcHJlZjllb0dDcFV6MTdGbFJNVkEyekhiUXJLNExjSXhjcjA3Q0ZEYUduMlBOMGFyVmFKck84N3FBSEN5OHhVK0ZhMC9Ld0pYQy9rbm1Sekd0c05nbWN2QWI3dytHL2M2ZTd6YTdKdDd2Q0xOUGVrRGZLNE8yS21hMm1hK3FwWmZ5d1ozcjViSW52WkEralFJNWxUSjNQQjY2SXl6M2VDaG8vM1NPU0pLOUVwOUxpQ202RzRETWF0N1NITFBxV1dPWXdvM3lGNzFETHNnbVhUQWd1SmFIeHV3THVOQll2WW1HTllMODY5clk4WnQyR1FwK291VHdaNVJuaklsWFBYYUVoc0p4b1N0eXgva3U2UERhcXAxbWVxZjNpR21GOFNOSzUwbUFrRk1JTnZYcGdtL2tlbjlJeTRvMVI4d3p1L21xZ0ltUWJOanY5alc2UTRIL0ZCOG9ZVjNkd2c3SGFoZzRqR2dUYzVOTEpSTEFlcWFwV20rcTRUUllaQWlPb3lDWjZ6djRnY1g3SW90MGxaTXBKdTRZamN3a1FEbkVKQ3paQnlXNGY3UElObDQ3SkM3MkZBQXk2RzNJQ3NBRFR6ZVJpZXhEb0R3RDlaYjd2bUdPOHVydWEzYXBldTVoL0ppeEM3akdSS25wUHpqMUdyVkp5QzM2L0dNOXhya3JQTGRVbFlwSFFrM2RveWpjbEthYXd2RGtGbEFCYTFyM1pxL1QxUnZKZGlNbk11V1V0eXdHWi9iMmRacVVySUJUUXJINU9Vd25BYlY1TXA4VUVjWXRYMDNqd3lLS2RMaUNhM1JqVTBMaGVDYW9PTHhES2FScVphMTZKTlBDSHFKZWloYS9jOERmbkxUT2VKVDJmWFdaSnl1dnJ5UUl1YW5tejRrMDd4VHY0eXJXYUtNSXNoaVkvclJ4clo4TTNTT3haay9jN0tWQ3l2SnNhbGszQ3dQd1BBdStWMHVRYk4vNmhqbXFwYThmWjc1RllJTmU3SDNZWnVWdDcwWTNXT20xTS9BM2J6OGlTcExRaFdxZFlRTUdlRkFnbTNNUkVxY1pCZVdLWlpWN3RIcWwwNFoxak12dTJwVkVCRXBkSjUxTXArWjFIYzJ0aklEZnd6YktxMXdQWnRiNjYzUEVKeWVFd1pubHlMT05MM1ZlYTdUTk82aFVpMnE0N3huR3BZUXM2cTAyWUUvenhGOXUxbEVrMzJYcDF0Uk1WTTh5UHFITG5uWDVNaHYyRjdnZmFVK0U5VnlscFlYbUJEYVo1ckhqQzROTVI1ZWE5VlBrTTZHQlJxemNVKzM1ZTlONGJJbG05dzRVYmxDZXhSSVdjdEEzVzNZcU9YU1NwaTMrOXhwNlJIdFBGNW00ZTB3cHIyUklMWlkrZERoalh3Q1Uwek5NM1ZXSVNKa1o3alRBejJyYWxkLzdKZFlnbUdubDk4KzY2UHRka1lOOG53d0FOUW8xbHZRL3JNMEkxUzBrdUJYV1krNjByTlZ5SUx6NGc2MWpZZG1yVTJtMmpEaG5Xa2FBZ3MrVTZ6N2FncEdtZHdBaGQyMHNMb2dLRTE5VythdnZrWm9mVENOYTVyV1RpY3p6WWdmZkdLejZYV2FGelpsRm9JNHVHRFE0bThFemZtaVprbnNVeTI4THpUazBEWDJqUnJ3dFZIdzdsZDQ2UVFNY3Q1RXpDa0JXR1EvOFRJeE1QSmZOOFVkMlRmd25HZjljYzVTa1FySlhxTjRURU5EZ0tmREtTZWVPN1BUWHhZWk5Fa2c0ZmpDWUovdXpmaGZkQ0VRdTdIaU16OG9FNE5mZWtGa09YNFd4cmljSXpIVWxDSmduL0VWY1JTUGxxRmVNSitQVzdSYjQ3SkRTSzJ5a3lnMGtjbFlWQXd5NzZkdW53S2Jrek5PK2hIUGV6dzBPRFFFWHl6eDVQdjZFRTBvWlRLUnEvMm5CeSszQzk5SldlS0M0eitWb3hscExtdm8wdE0yQWdJQ0FnSUNBZ1BQOFBwcTc3ZnNjdCsyN2Y0ZmNEL3YrNnAvWjFSOTl2MldmNy91SDkrM29pdnQ5TW0rMzA4cjZpWG0rMzZZYitIMmt1L2JmVjl2MmU5OW4ybTM3ZXFIdnQrMUd2cyszbDM3ZWsvOUQwOS80ZW94UG5XY1A3Zm9mL3pmckhOK25aLzdmc0Z2MmZZLy9WZExmKzM2MUMrbjlpTHYxYjMvdDlGQytyMFo3NTBiMDhOVXFxTERvMTNwK05RNzlIVm9OM0dxR1FBc1FRR0tMMnhaODFyeHhOUFlDOEhmY1NtTDZTYlFoZDBBd0pQeElqM1RPc0tmbzZQZFBtRkJhakIvTjdkdzRTKzZyd3dGc1lWZ1pvaE5mNVZ2WEdpcDBWKzRvcDN6T3hmYnQ1amFncjBENjFyQllOK01lUkFuNGN1UncxVG5uYkRoWWx4cllDRG9sajloV1NaTGYvSG9zcE5lcW9zY2FqTTFWNG9DVGwxK1pJc3NQb0tneHVKMmZIaVlaSWRnRmllRStyeUxFMmRsbFVZVkV0dWdkcXorTGozTmFpenllZnk5MTcxSHA4QjNDaEMxblhFRS95bE9ObFo5bWpzMXlOY2wrR0lDellBUDJ2cFVhdklrdSt5UjllbTQ1bTlVdXhZcXZTYStjNjFNNHA4N0VONFpDWnVSYkZtd0JUSWsydm5VSkVvQkMxQXFWYTZYVkFyMjRSTFFuVXI4Wllpd2x6aXNZQmg1aTZPK3R2ZEJNby9ROXh6WXcreGx1TDQrWC9pVEVUd3Z5WjVlbXA0cWNIcDlkcWlaaUhHU1lOZ2x0bDg4ZTA3NEIwY0tOcCtvOVM4dVFQNFpydzgzQm9SKy8velN0cHdTLzEyc3RmTDY5SDNZTm1EYTg4a1IweDA4VEFocTR1SFZJNFN1Tmh1Z1FZYkFSUXVkc2VHWnNHRTJyTkxoOFZXV3ZkOENOWTFhNktEejZ3N2pibFBQTmVzYmJXNXZaY0cvSkswMUlzSFdlVVN3Mng3ZkVmdEd0SzlIMEl1dVkvWVlTQnVHSnhCOE1QT21DRmFUUk5KY0d2UlpoVmdLZWJUZTRQY3FyOFIzdWoxUU5URDdtMjROM21FcEJaTHJ5WEM0UjI1WnZPWWk1d2tQVjVUcXJtRTZSSlBkNllEdHFZSmRkQzhYUG5ld2c2elkxbEpLRnpzaHVrditCUFNnRnZrVTdNL2FCZllhL3lHSVg4Y0F5ZEhFYnR3QitDd1FUQzFoajRVdUR5K2REKzZWb1FFVzQwb0FVZUh3S1dHTGxxZ0FQZkh3VGxrVHhuOGJvcWV5dzN3dDZpN2dFYUNSc0xNeTkyYWxBcUs3cm5uR0w2eTM3OFdzNnlFRmc2ZU9RaU5uTHplOHVqM3F1ZkI0MVlWNkU4ZWxaQVJxY1pxNitsNGtXTWlUcEtiaExFclV3L3EwZm9Sa01TQlRIbkhtVFYzbWs5bHFGQUdWQUxZcGY5LzdhbGprc1J6TTVEVDZUSUdEcisvVGRLeDRpVWFPYUF3VXlnMWZER1pXUnh5QVA1L3FENkVOZ1VFS0NXNlZiVnpVSm5OOVNidk4vQWtjNERoTWZnR1Jnb2xucnc1ZUp3SXZKcm1tZ2hKL3dpRG5LNXo3M2JtaHdQcmNmZWw1Vjh4QzUrVldneGYxK003c09kay93clF6d2ZjeDRINnRVV2gxa09BNHVVNS9odGhMYTdFQjUwNTVHZmdkaWhCb2FxUFpFbHBvbFFQaTRDdHlvT0tpVHBDRUJGYUlpbk1qOHpSaWRaZjlCK2hIcXdSTWhoeHA0cUUwRnRDR2hBQmxBSlBtWjZLYThkVXpMdGNlN2J1STAxWmw5bmxENkwyRXErR1crOXZtanpaK3laQWhnZmVPVnkwTk1JZ3RlQ3hsMTBFR1BQZWpWVXU1bHpqSXFPdGd0cFJvSzArWGlMeDZRbVZyOHhlNDdsTndIYk4wZ1JRYTNHR0I1MjllcjlLcHIxVzk3dVY1N1JqbFRvaXZYQ05pUUxWWFpOQXIwbkxoM3QyaDl3ZGpIQlJvU0lGelY2TFNjYmY3MWZOa296eFg1OGU3enE4eTBSa3ZQV0lCTkVOcE5DUjU1dXh5K0FNd2VwSEZJTHFvYks5RW5LWmh3a1k2K2xQeWZrYXVzWk82UTN0RmRqWmZ2QUZMbVhPMnpnNWpESDVaeEFuSXFRaWxaY1RSN3RsT2V4OXBodXJ0RVhyNDZuT0phdFE5NWZOVmVuM1BqOExMSG5ZZ2htL1dFL1BZZlF3WXE0ZEZTYjh6NlR3RTJ1N2o4bW5kZm9PL2ZmMmFzSjVTeFVCRjg1b2NRVkw5MVVVRG9lV0FFNTlXc0JORjZBSjJLNzU3eGdNMXdqWGlVemFiMGFaNzZRbG9PUVpSdWN0Y1QzcnpJbkM0N2J6aVNrN3VLWW5GRllselpSNXMxWThkQjc5U2F6Ui9sUy9raHFVbkY5WTkyL0pYQU9CTWpkZE5ndDZnRGVlNndoMVFFaWtmUUN1bEs0bzQvWWJkbSt3TDYxWUF2M2tzeklrZ0pvNVkvL0xZQU05NzdxSEd4NkI2UGFIWlIxLzZFZ1NjRDdOTmg3eEljcFo1dW1sUTZQOXNrakgxa29GRDhXNEpEZzErSWdCRUlYU1hBRXNkRjBtYWJFdW0xTGVJWlJRdEFibWgraFlCaG1lZ2pmcTBHbnNmWVp3NGxZUTU0b3htUHdZK0xKUHNkU2xBcFVZMG5ZaGRuT0sxSlEwRElha3htK3BmMlk0NFlHT2p6WXVvRFFIV0lWenFXWmhiSkRQd2JMREt3NjFKVllPQm9acFF3Q1VUdE9VbDc3K2p4aVlsNnhIck14WHAwU2dTcy8yNEVJb2FOVTlwVElBRDBhRVQremRGTEtRT1hKNXQxNTdTam5COURBL0tNYlJjWlVVYWRlWC9YZ0cwSEJKYlpuTGVWc0g1T25jencwc3FhNmxTVGg5aWFoYmJ4VkJCQ1YxVG4zNGk0bytsaXhTZWsybWIwc2RzUExiQVVrWlpKTDNZVEZtSE03Q2R3VVZEczlnbHF2dXhvamVKL0R5UkplOWw5MWN3N1BjTVlwK0t4UUhqb3cyWDJRWllKTjBScCt2NDJNOFphaW1Edkl0UktsR3E2RzZXYUZtcmpXRzhNWkh1aTdSVE5vRGNaU2dhWGpFVmJ0TFlxY1J5dkJobnd2a2E5NTdGTW5ucCtlZnBvVVROZU5WMnpFVXhnNmlEMHpRdG5jQ2x3NWlqWUlndE9YYytSVVNCbWxVOWl5ZEYycXROZW50VWFWQ1NrNDNpdzRFMG53bzdKQWtMSkkwVk5TU2NPeE40ZTh6VnVUUjdNZnduZXFMcWQzN0owNktNMGZUM0dYL3Q3T2JrNEVEOTNRdHNDK3A4NHFKelJXelZOVUhIcUh1Z2hZV0JMTXo0RGMvd0w0N3Q2Ukcxb05WWURSNXIxTndQTUdmNExOWm8vL0NSVWpGZVVCVVhUTXZZcTNPYlBkamUzRFFtcGVZOU45UFZFMHpUOStONHcxejNabFE0bnJXWHd1NDNyTU11VllRUkpwMUNZSXRaZFNzWVRiZmZ5UjZqR1VVMFhSZWxyYW81V2UzTTl1TCtzOGdwNS90U3hqR2l2OE5XOE9DSWliMjYwVzZjbjJpYUVCbUk3OXBEOVhtb3FyckM4TGFVeVdlZmYwSzZ2VUFMUFk5YzlXVlRoNVcwVGF3b01aTEVhaS9rTnI4WlBPalhBMEJiNGpUakR5NW1hOFF6OFVPR2F0R0Mxdlg0Q1krS25IS1d2WmFhb056MDNIaGxQL21jbmc4RWp5TjdERDB6YVJOY1lCTnZMOEs2eG9Wdm9jOFo2SG1GcExwR0FrUFlyTm1xTTcxa1dURUNqRG1nSVY2aVRnSWl3cGcyVkhyZEw1RlJ0My9QMGdpTlR4dDdwNzRPTGpYQ0ZjeWF3c1QyUDJCRkVxdkIxZGxUZ3pJVXdFUWpMUVhJT1NZMTEvUlRFcGJ4c3V5SGRDZ2xwZ1pYa3J0V0xKRGVUVnVpSmdpOFRodHNzZjRnc0xIMEV4dmQrbWRiZ0tiWjVyclc1UUo1c1BKNVZ0N25wYktFU09VditLQTFqODhaSjl1VUFsMHgzYndGVFMxekdyTE84c3ZqTFQ1VVZ2bmRrQkZLclFVc3RKbUhyRE1UdUpqdWpmRDhuTmZ0QUZYRWFJaDh3Y2JIQUNwWXdvMmQrdXBSRGtoSGFEcDczVlFxM3d1ZFpZQlNLNERCSUJGMks2ZXJnL2NGcjBXSFBDL0JlcGxldWNNTmloVm9nSWlKckYxd05zRDhVSGNmVzFqZEYxTjhDdXNiNzBDQ2pzYWcwaVZsQWRsYlJqa0wzWDhPWko4b3BxVDlJOFR1bUorL05CNmdVMjlUTS9RcHBMQ0tHNitnNUJIMDlIWE1mNnR3QXVOVUV2a1NrTk96d1k5UjVudjlCcURVa3RNZzErT1hHTjVROWFiQVhXNFJEaFcrdzdZVkxUTFUvT2FNY1Q0K1hwclZTcUx5cWJMNGtuWGlBbWRjdEE4YXIySHhuS01nUmtkUWNGSlAxZWFTWHhZNWhrVGZJSmtqcHJlOXMzazY0enhEU0RuVlRvSkRDTHNoZlZjclZIVE4xYnd2UFhLZTFYdmd5eXdFN0E2QVBGaWRDeDQ5am9QQk9ueXU2SVNycVcyUlhDbnFEWHhsWXJ4VlgrRURRa0xHdkQ0eVJaTVNlT3VvYjZCUStiSm9pTlppMlJ3T0tlNlJadWtCNVZqdm5zMk9nb1M3Rm9ITlp0bkFyOHRLZ0hQOHdHakFpRXJMeUc2U2JDZEd4RXlmbTN1NXhxdUZ1Y2JVRUxhTkZNdURNRmFnUVVqTWpnWTlBcXpLOHdPN21BSExxUm1uVkl3b2JzdU5QVGZCSjdOU3NkL3JRUkF5N3pLSjUvcHg2cHNHdlFWbGdlYkdFQUltOERPcVJaRVJaMnhFYXVhSEt4R1hja3NTN3hmb1g0TGhwZy9uQjZLUXZuOVpnV2VJN1V3N0xqeVNqR2VEYkRaMGtaV050UFdFNENUOUZ3ZEJHcStYL0VHZlRNZ0R4Ujdla3p3Wjl3anVpczFiYjhWSnRFWkMxR3psaU1oZWN1UzZDTm1xeVM1SEthTnU0VTNIa0t1dzgwQWZOMFJZNHR0Z0xpdFFyWGpPaGV0N0lUcTc1Q0VnOWFXNytvNVFxanJCcHdpbWplcU9Dcyt4cTdPWDlCMHRiZWxheTdsd1JJNjBueGovTHRiN3NvWFJvSEJwVGtuZE12R3JlNkphZmVRNk9WV2dhWVI1Y2Erb2pXUDYyOGFrb1FMa1JVejFXamI3akZESUxERzIvMWhVSGxmVkJScUlGaThSMHlqaFJsQW03bStPVW9qSVAxSnl0dlpsNGZCa3JrQ2NyU244MjJUaEZraXN2aHBiK2VFNXNhd3hwdWs5T1ozeWpGNDNKTWJhc3BNemUxeVc3Y1FubHIrTmZHN1FaQi9maVVhTHFPU3I2SFZhMXEvd3ZEQlNGbFVhbjAxc0FsWjdBRXZ1bng1d3RqZ2M3clZ3eXVGdTA5UXNIaG5vcHJuajEyL2tpMEVUSXBkWTNtNWxtQVo4aTVObUJqNnRGNUlXVTBjSENldUlBYXBCem5WNDFTOURzemVldE42VlhEeHdqODR6QUdJNUtSVzBremRCaFhGQmw1QzloNU5JNjAwRTdNTS9sSzl0RmxkQlVqMm8zUDJZd1JsRlhXQ3pyajAwdnFla0tEUEorZUFKYkRYcU9CWmRYMlFrM2VNWklaTVJJaHJOK2UyS2hDYXBaSEdVbW9DNmFnQzNrU3J3WGNTWENOSFF0eHNZb0loZTR0UWF5b3R2UnVYWTlrb3lZbTJCb1BodUVKY1pMZTl3S09BSi9uSjNweTBGczI1dnZldEF3SG04REV0VGxNYkN5cytnM1MrZVZwOEdPY0lGb1NGNGFCUjdzWXVoQVN4RzJPaTFDY0RhazE2Y1RLenI4OUUzZ3FmZ2R0bXk5MCsrTmxvaU1wbFIzd1pVc1lQOHN5N3Zoc1QzYlZZWkFKMzNKaVRUY0NMNzNuSmlzck1TdGc0U251ODZ4OEdIT3lzYjZWM0lCbmZsSW1uQzE0OFpYNGdDUGF0TmswT3BySjJCeldRQTVwS0NORktmcHA5djVuNytIV2FoZzNzV1ltZE5yalJVQmFlYVBZSktxRXhHVFZMSmRBenFDdFNuK0U3N1JXSWprVDN5UjhVNjcxNUpYS1I2cUZRRis4UUppNXhrMGs3Ny9hMkhqcTl5N1ZmN0FqbE9jOEZIb3ZUekJpNDhFcXFsQjYxditqRkZRZFkwNitjNCtoWVEzVDFCSWRRcUltaXZnV0hYWUZhbzRzMXk1cStRTUg3NFZ2N2EzYUg2emxrcmR2QzB6UDJXeUZGN1VsSSs4Y0huRDVIUmZLZ3Fra2hZT2hNNGl0ajJKQU1EZkgrOTBXUElRWHJUOXBpVlFCajlqZXFHQ1ltMVRvSlduNWhmcjJWN0YybVpkNFZqMUhxT3FPTFlsaDUxN25qWWFwRU1PTUYrenFqOE1QRHhqSUw3SDBLcUJNcldxVVhYaGM4SFRuSnp0Y1pua3RkZXV0aFNXZkg5ZkRITlc3RklXTTdodkxpOHY3THZBaWR2K2hmTFRTZGk0TnNzZDZ4RklBZEJ5c1dMQ0xub3R2NmZpYXVUL2lSVk9OU0FSTjlwNlRXR3BKcm9KYWsvamsvVHR4ODdmbmFBSXN2M3hYT3hrUXNmY3RBckk2aUtxSDg4Z28vcEJENEJoSEY5OFJlK1doZ3ZHVUR6OGo1a0ZiTTVaWTFPUktXUktOVWpYdnlkYjVMOWJMcGRaVTVjMzROS1NqeUYySnJCM254MVpCRXM5cnNoZzVsK3pFQkZpRE04MTQ5amY3TnppaDhxTndndkkzcVFiSkZMRDBlQ2tyZUsrV2t6QW5SMG40ZzVUcWhrQ0xTK2dmcjQ4Z1F6cG1sTGhqUzJ6Njd0SktKYTZmK1crSkIyODhyK2YrSFpWRGxzeUNtNkYrS25MOExWa2VvV1k1YXFJanFHeHVzbDIwWGdINHlCczljZFlpNldDNUdxSlFaVFRVZXBndy9MR3h3anE0VEZQMzVucE5TbkdtdVE4YkpyeFJkWjBmbEhMQU93djllK0pvSU1NOW1qWHdFTEtWQTdDZkJoTXJMM1hBYTQ0dkw3RklpS095VkF4SklJelpoOFVRZGtJTlRQSm5iRmFBUTl3cnk1T3pjRUdlQTErNyt0L2E1Q1dsL3FuRGFvMzZwR0FLc3R0aC9NdkNSWXVVUG5BcWlSbG5SalF4NFNnRytwVThEa0xFQldWMHEvdDRpV0d6K3haaTFvQjdPUlluZm4zSjR3bVh4aHdwczVVTnNuYStYb0phek42WDBKOGF5MUpZbFhiVXFmY3ZUcllrWWNULzFIZkZHaitKWlRNdzZwSE5pem1hTEtLN0NXNGltTXphN2xhTktKQkFIUmh0SkxCK1BkZWpXNmc5MnpzRlhJOWZzY0gvQkZuTDdkL3FNM0tzclBPNjQyZ0xpUU8rN3lTT2JNN09uNHU4VDRmWENEMUEvYVZzS2tSOU5SUkRMelpNRitsNTdOb2xnSlIvdEw0dlhLVTlmaVlGaWl6TjhQb3BkYnRNTzAvSTRYMUJqbHlRQUxPTjdCZmxGWlNZOWp6c0lBdE5jN1hNRk1idHNaM3ljeHFEYmdZUDdoamIxSW5vK0p1WTdZb1U1REhxREI2ZjJzbjhNeHFRYytyR3Z0Q3NqelBQd3I0bjN4dTJCd2tHS0MxMkhqc0tUa1NEREQ3TGRobDFzVGFRM3NTMDVINXExYTZJTDFEbjgxblNDTTk3V1NURS9UNkgremUzYXV0eUNIMmZkNVN0U2ZUSmJNV0ZmbjhkcmRhekZUQnUzWDlGeEozRGhrTElWeG1UZ1lpcUJLd3ZuVmRYSXdBSCtJbXBnK203ZEl6YVRYMDlSeVI4OXNhRERBYzkvV2kvYmJpbVMzTG1iaGxtV0pvU291WmhZTUgzZFlMTVNmRTByemtEZktuQXVGUDhMdVhUcWpVTVZYbUx0TzlKdEp6UHdLSDI4bXBTOVRmUy9lVHN5Y2RnRzVKUlBJaG9OMHg1WHJwZFh1cXczUVh2d3FSZTgwaVJET1BBSWxOTWx2MUZDd0dSV2xwaGRhdy9yK0ZzaEc5RE10dGVPRHJ3eHdkaXVZVWxUbldpbVYvQ2FIVEpiblFCYWJKMEJUSUZuY0l0bHppL2E3Qm4reDJmRnZ1bnZWTTUrcXJTbUNvNzRVZnAvTVhOdXVmYytsbHR6TFdOZFhqUlZkdnRwUkN5K2xEdTlZV1JQOXJ4T3I1YXMzekgrd0kxWEtiWXdjckEvODI4R3kvL1BqaUF5Z1JQZjhzTEZmVGV2UUNJN2hJaEhwWW41R1dudWR1VzZMek9DNGQwNk9uMVlVVUZVM0hyOVNOM0tHMTdvaDVNclZ4N2lkQkcwWGZLcXZzc3ZkY0g0UDVZQW52YUluS1lOb0luRTUxK3Jia3NBZDBOUllvcnNYZ1JGQ1ZYT1FiajFKczlhTkxQVXFTOGkwY0ZVUGt5blRZR2Evbk9vRzlCZDB5em82Tnora3NCb3UxMHdKYUlmQUlyN0w4cjROaXpZanRxdWhPcHFMWWlkUlR0c1hBUUNkT2NqK2tCVVFsQWI2Tk90bHd2Y2RmL0JXSmlzRmZmdVNjVFdmbUgwMlF6WXJWNkgvZG9OOFpleHN1YzVYYVJXSnZYZDd2UzluQkl1RWRZbThtQkw2TUpOVnduZE8zV3dPekhOUmlPa2cvbUNOOXVveDFETFo5OTIxeUlPUWZiZTBOYVJidVRnd2ZjcFFPSlpHbnVOSjNuVDVCbzh3MG5CVXBOMGthM1NwcGZDWGNVOWZHT3FvanlqRTVTZWJENVN5UDRQenprTGtkaUxjTGx4eVhKbURtSVN0VGxuZkcrV2lYYzZINThSaFlqckc3V2U4U0lPRGZwSWsrZS9Mbkh3SW5DYjYvUVJkWmJYUmw4eG8yTjFlQVJaekpoVUplMWJYSjY3OXF3SGhpSGJjbmZqU3pLVkRsenVSaDVaZXVyOTBWT1lLcDF0bTZsdlA2QWdyMWtOK1hvSXV4aWdENlVnaTJzL0FDbG96Szc1Vk5ESjNEdDlEUFlqRE1ndnJyaEN2VlFXUXdHUGd3dC82L0pGdHdjbnI4VDJVOWhFVC9HMzFLQThHLzhkeVZ0VlZWNE9JL0hQbVV0aGpPTHM0VktYTldPNTFCUzJSV2VkTEd1cVU4S1lSWmFTaWc1TmpqWWtudE9TcDF0TkhaOU5SV3dJajBjNmtPL0p2ZW9HMXNhUlJ1RWE1Y1ljSUUzQWhsZWNxcElRR3dkWUw4SXVHd1Z1Y0xNUXVqbmMwY0hGUHE3dVRMTmUxRlh3VGhuTUg1VGFRdWpVTXhGYzc2OTdkS1ZFbUJQM1J3QlQ0WHJ3U25vajcrMUdjcWJ4VjU3dkN5cTl3cWNtRlZpdGsrUWtXZDhlSUhoTk5XQnRQeWYvTGdSek8yWjVKYi9uTjBDUEI2aGtHanBXamRQWndNTEFZQ2lQTExzSTIvcFZIRUdJcldqdzdtbGtBY3hhSTZ1VTFCWml2dUQ3a0NKRnJKWkMyWDZaR2RKM0htUk15SmhEN3dkVDVVdHpJVHBmYUFqcmc0ZEtPRnhuVHJMZnRvRFFBUjdjTUEwemdJdDZIVWNXcXZQd0pPbUY5d3FYVkZCcVhtd01pOFE3Tm54NVNIQnZJbFVtOW9WZm1LQTJMNXFEZis3RXYvZWthTEordnhaV1BtcHRZTXMxNWhHUkxlenloRmJXQU9ocENGTXlJYU5LOFBRQkNadjErQnYxVERhWFBmM0tkY1gxell2eXE4eDFhTUo0VXpIZGZZWFZaei95WXR3NG4zeC82MDNvaTAyeWRQMjdPODlRT3ZJWlY4TUJVQ01jczNxVTN5NTY5ZUsyU0djN202M1lIa04rTWxoeXR2ZGVSL0QvdUVxZnIwaGl2Y0NYMXdLaEVJR1NaWTMza1MrMC8yTWxqSnpObDZpeXJKMjEvZmtHdEZyZHZKckYrbm80ekU4U3plTzhXK2VIYzZmK0dmaWhGcU9DYStoekV6eENRbjlDMDZzNnFyMDJ3NCs3ZlkwVzBwVDBHTFVyeDdYZ3FCK2h2SG92dU5adC93U3lyUnRZSlA0S0VMV2ErUkJWTitEWWdaeHJLWEJidm5LV3VlcnFaSHpiRVUyVlNXQXN5N0xCSllCcTN5UElXSGZ0QzNRYnNQZmJqMlhzQ0YrbjMrQ282S0ZvMGJJY3NDaC9RLzRlUlUwb0pJMG1CVys2alR0SWR4STBTUnR6VkxaZEdwaXYyM3JyNTNXQUlhNUpIcFBtMmxLRWx6dTZaVlBuMHc0NHNPeDVBQXZQaWdKZ3AzN085N1RkOEZSY093T3F2WmZ5WG5vd0hKcWpFR3dyU0RVQWVkeVA1ZmFwZGEvb1drVEJJbWVIRFhlUy9DbFpFbzBSZVFYS25FbEdLVlZkTXdxTnlybVY5eFFaczJkZ1FtNlpoOWRwN0tmNWZWTmJUUEViY1lsaFdhVjNFWWE1TkxFbm5nbmdBb1U3eTZxbEszQ2lSZnpCdm0xZmpVQzRhb25XSHFyUDFDbVZTSEg5eUpVK1NQYXc5QVdPTDY2YUd0bkdqbEgyNVVnQjVpQnN3cnZhblROYlFLVU53UUdlQWcxWTZvREh5Mk1VZUJaN3ByY3NKYkZqVHBlQzNrSDVTeTQ4cjRjZk5XNHpNWkxEN0UwWEgwTmNxNGFjLzBCN2hyRFZOTzVvME5iYVd5RFhMVjczQ1hkNG5rRlhhZmtRb2FLWEIrOHVkckpHTkg0SDcyL1YwL29oVnBvb3pnM3lCWGhvRlE1dXA5WXVqWExHdHpZZkw4dWt1bFZERHJrOGVaQzFZRTJha0d6czdzYmNzMEQ4OWFCWXRYYjlPOVJtSW91bDJTajRaWTMrM0FHcVg3ZlpTczdnY0NNVjdnSE9YRGJaMjNFS21Namw1N1VqRmNSQTg4NncxZk1ZMGlBNkI2aWF0U0JmOFl4SlFWaWh4QWFsVDg0ZXhHSVROK1ZLdGUyOFB6VVRVRURPbmZZME5jN1RWWlFpVjlpemdNcHk5bmgzYURET0pFb0VyM08yRXgwRGVhVFMrdW40RW1sdVFVWk9tNTZjbG1ZM0NHeWU1ck43V3pLNXRKZHAxMm80RjMrQU96bCs2VVh4VFZHdjdOenllSmxPRkVrY0ovQTVFSXpWYnJNN3Z1SFk2L0J5WUFjcWpSWk1vcnJLNEcxOXRyQmRUTUczbnNrbWZUUnpGRmRrMCtkbDNEektLU1pyZzhQNXVHdVZJQVp4cVl2YmgwdXpUUm9GVmNVSTFzbVZId0s0VTFwSDAzK01YZWoyNitNZXRTcFQwOUZFYWgrZUJNUXdYbVVSU3l5dHJMN3RGdHFLTmQrTDVBa3cyQUN1NGVDT0Mrb0pseFVWMnlYZEdaZ1N2Qi9VaXJ2azhta1pQejhUTXJHcFBpbG5NRUxDZk9lSmdSUTBXQ2R6enFRbmViMXZwWW56UWxQaHYxa0ZXbUdsKzY1Nkp5MmlackxTVHdCZnI4Zks5eFc3QWRMY0dIS3RIVzh5YWVuc2RSQ3QzNm9vTlNwMFNzUEdLZDZaVDVNaXFkeDczVXpKMFBRNGVMNFQ4UEFZSjdhb1h5WjFxdkJZMk83eENka3VQYjNxdW9nMUNWL21oV3V5bW5Lc05FZmVJelFqeSt2c0psRlQ5STFRRlRZK0pza3dVVDJKaUMyVTN2d1RPSHgxMWN4dDd0akhIcnZydEFaYlVWa0F6eUxybWJOS0ExcjFPM3pGMWlzWWxJTEF4THdkMjZzL1h0ZllVSDMyVjNqNUY5QmR1c0ZtV3RlY0RQU2VUS3AzL1dTRnZXZUN3NU9iZEoydU5IZXJ4NllRYll3Ty9XYTd6WHFHS1Y2VGNnRisxbXhtTDJ5S2FjbTBES1pBaGpyc0dBZ2ErV3BpZGV4aGRzd2hBbys0dDlPKzFGcy9qZ2Q3b0xmUFgyVjQvNWY5MXhWbnVSYWlzaFAvTklUclo1TndTMVdWNGp3OEdmMXRndFhPQVR5VlhtVWxEeUxDRFZlbTRDelZ5SkdwUDNxRE9CY3h0N0lFQTM3ZW9GeUZKSTZqNHBVMGZtQVZ1WTVwaEhUNTJQcVNyQTdoUEZjY00zeHpCdFN2NzUrU0dRMUdBbUh0TFlSZEtIdUJHY3dlWGpXOXlDeU5sWHo1Y01pdWdETnhDN3FrVk51d21JbzN1WUtYUi8rSkhVUkZOVk1YU1BrNHZYWmE3bFZkQWwreDV2VElVenpXQ2FTYjNIWXhLdG8vbzJvM3NDQW83OGZyVDB5KzUxb1NjQmF2NTk3NjdDcVJyaTNZT0Z2U2hMcHJGOGpoMEF0aE1STXl5cUZHVE45amQ3Y21RTUVtSGxwMEtHQzk5OU9ydW1JY2tuL1NWWGFJU0liQlRiZ2pxdUdVZnhWT2hqbTZ5bno4dlI2cHRMdFowMy80TndlYmVreDk4cVhkSWlIL09udEdySXBuK0Evcmw4cEdkSHkxTGtGQitWSlhnYUk4N3hVU29od3lhUUU2b3I2OGhzd3RoMWd6VHo1aVM5d1MwM0NiQ3NwTkViSHpWSmtMeG1ia1U4SHdETUJRSDRKU2NBbTlmamFBbXh2QXpGTThBb1dScStPV1drM2FrNnhGTWlONGluVVl1OTJ3ZU1EaHg4akRZb1didUZoR3lKeHdCUE9QdnNJQWRROHZ1NHVYclB1bUpxcUxRZmtobEtKc3UrTDh4Q0tVQ1NtUFhqZkIzRkpTclRzMzFTdWV6bGFlVXRiNmF4Uy96L1lmTElsRW5UN0lTWVc4Zm9MRmJOVnYxZnVLZkEzQjh4bTM2ZXJUMG5pb3NxWFZ4SG5nUUowZzBhWk4wYkloeEZmUTB2VTN2TjJuRWtXRGsvMVdRZU8vTkI2aFQ2RFpiS3Zybmllak53Vi9xMDRrSlhlNWZjVGpZK3ViMzRuQ2FyYXVPQ1dDMmN0SUt2MFFuV3RKdWt5S1ZvYmtkT1lwMWZpM0NVN2wydHY0bDFZYTVRVlB1a0tPTnhnNVVxbklOT0poZDlsSWJlVktYOVp2TDdWczBRVk9FdXFCZ0ZMNWptNG50QURNRTBxVlBxb25ETm5pVlRMM3RrRC84SE9hM2VMRFJyUW5wNldnaUNNb0RsYU5uTW14dkFJMjJtNFc0TVd1cEljTEJpK3o2eEZWajJqRDJzaGttQS9aZDJsbEdZemg0WGpKck5vQkFHY2psa2lmRXdOQmtCM0lLVXJPbUVaOUk1REZ5SWVkb1RuSHhUK0tqdVNNaXduam5ReFllekRueE9BSStSdEZldU1PYW5VZDdOMDBEbFg3d3BJMnBDYVhyeG9mUHpPZHh1QXNIcjM4aGNObHhwTXk2L1NuL3BvenZiaHA2NXR5YTFTMGNuMXdGWjdmNjFDNE93bi8zb1p0VE8yQnNUTkR4dzY0WUtqbTJNN1pBRkRvbFdpQmRmanlHSnZjaGkxM2RQUmh4Z1haYWthYTNxQjgzYnJDS2hCNit3K0VkKzNFbkxXU0loVG5DT3NwcmVJSWJYYXpJY2NPaUp0U3pzaENGT1EwQ3FhTXJHeUYrQWV6TythbWVSc2g0UDF2OHZrOFBWVjNtcFJVNmJjcE1EMlhvZ2JFSklQamphbUQ0ZTJuZkd6NStvTWYwL2REb0ZIZEZuKzE1SzdjVG5sOXZKOTN6cTVUaG00aG1NakZpMFBmUnJjNjR2SWFOWnlSa0p6VGxMMW5DWlJkUkl0aWcyTVA4Y2hzSnM4dXVDODdXSnZ3SXlSWDZ3TlhJakhhdlBzeDZ5Yk96cTVUblduWHo1akpaK0VYa00waE1ReVdKclROZWcwSFJuQ2wxeldBNkEzZHZvMTBWUWJRMGlQYUpwaU51OVozb0RPMHd5MnVZdURncERmUjQxM0MrbWpZVWJLY2NhakVVQ0NPazZRaisrZ1VSTHRZb0N3MC9mQzJiYVg4bHRWbTF4ZnBVeVF2Y2hHcjhmc1dxYUs4eFdtbC9hbytDaTZuSlJtcGxxaSt1czhVRnhLbzlRbDBrSmdEcWt4RDhxbzFlNVRDQStNcExQV25GUUxESFJpbCsvaVNuTUZBRGVvWE9VdGYzUGFMQVVhT1lOdUdXVUhjQ3FqQU5yWkRyRCtLRHRRQW9uNFpRRFlrUTFBd0VGRk9oWTR5aXcwci92Uk1qRVBlTlMrS3RXay9wdkVRQ1VEc0dIT1Zoc3djdFcxdTU5UTd3bDd0ZHAwa2NNa0RhQ1dkZ0xKWDN0L3JCcG1VTElFeDlPaFRTYkd0Z1E2cjFKRzdoQXVvcGNRdExFRGhJZmxBU2luMklOTUxHUkh6b0xwV01qWFAydXNMdjNMSy9Xb211RFd4RWp6eGgrS1doZmVaVVYwR2ZOY21RZHZrQTc0b0NzQ2ZmQStjbTJuS1V3ME1uWEMxY0ptYlBncFhwbkR2dXRBeERwU0JHV0NCT2NScllsOVNkK25HWWZvSU9zT3Q5dUk3MkFWMG9nNVl2MnJUTVNMUUdXSWFxblMyQTZYWGpSU0tweFkxWDZWU2twVnZ2L1NBWmVIUXVCMTRvREE4Snl6VjVYTU9NUFVxZ0N1Q1lveDVEb2tIL1RUeEJiaGJrSmk2ekNsNmZvb3FETnFoQmNreVNvbWVRVE5OVjlxR2hrOUVVUXd6L1VGODZ4OW1Pd3c1dzhEYnBzeUpremVhVlhKUmRndW1sVFNLbGxwcXJObHZrSGMzZUtpWmVlNXNnMHp2YnA5a0VYUlpLVjExdzZvY0NNVGJlM1RQWExUN1FpSUtXZnZUWTU3Vnp3WC9GMEs4WlUxaW5JcDNodW5WQ3dZdlUzSzBZaERpZC9qS2xRM3BocXR2aTRpUHNERUlsZFNkQTNWSWxiMURCbDZSRW5PNHEzZFhRanRDUm42eUNhL1JjQkxTeXQ3T0gvRXpwZktzTkdsWTNuUGpqN1MyMFdHajFEV3hTRk9oNWJtS2t0ME5oY0Z0SnQ4TFJtS0RJNUhkYlZ6Q2VqYzRDL1hMUk5ZbGlJc3hKZEkvWXkydVE1cDlpa21KcFFhQ2o3bkxnUGFraFlXSEZGYnVyYWVVWlc0Uk4rcHVOM3hJSTZRMjJtdk1SNi9mRG1ReVBYNWh1WGdYYXhJWHdtaTRpbjNzUkEySXZzNlpyQ1QyOEljbDhYcnFHaC9MdjF1OFZsWWpORmxBZnRQbW5MNlNGNFNWSmp5cHpYMkR4SldvVzV5QThrUWVIVFVab3VINXR4aDFRYmV4VWpuaXI4YkJLZGlubkNWZ0VNbEpKaURRc1ZJZ3pIdkhZSG9nc0kvREZJTkc4VWthWFFXMG9nTVdTRkRFQVp2cFBKQVRTSTVXUFAwa0V4R1NwTzVJalVGdEszZEY4dnI5cHRUa3NkVnlHOG11dzd0TWUvM1BvZkFvRmJhMjExMnlyVC9xR0JQcnZaMDhDSU9OMW1DeHU2b3lKQzFucXRlcVcwSlg5c1R1RVl3R1NqQU5PT01XcEl5QmQ1eklDb3FFU2Z6WDk4bE1EUWlzaFlGRXllQ2VkNDIwRmsyVFpWUnhvdXlncWlrTHhPUEdKSHFlL0xjVlc0ZVhVbnJVUnVhN21mU0QzUVBhK0EzWlIwU2lzTEZGdzRObmlPTFBVTkRHSEcrWUk3VGZlc09Pbk5tcDFDd1pkeHpVM2RvYmlOcUl4Ny95VkEyTUJXZTN1VnZ5MXZqL2MrajVpdkxaVU5EQXBKN1RmcUFzT1phVWZOa2FGbGp0dFhvVkxNTWdRYnpJMHUySGUwaE9aUTRXMXFWa0ZWejBxeVRqbXNXUlVwSDBYZnZuODVPSEhWVmZlWmdTRm5PSDVGbit6dlZkYjF2ZzdublM1ZERWZlliWjhybXljUmlHczhzSEFxRzI0Zm1qRGxiMlVSZVdRN0Fna2RaeE5GZ3hUYnRmZ0YzdXkwUVdHSEVuWEtGQ3hsOFRhTEthTHJtYzUxWHFiS291c3lnK2E5dVozL2RPaEdJbFRyS0llSWJWT0l1aUpZd0w4N243MjM4cXh4VWhLTE5NRncxWVBPclZKcGx6YkFDTHdMSkN4RWRjb3hTY25FVjlCWFVCKzYxcHFIaTB6TTc1U1pHNVZ1YlpLWWlVR1RvbkI0SGtnbFA3VFd4aVVWRm1ySnJBalNYaXN4a3BJZUxDaUc3a05ua0ozY0dRR2JudHZ4MVlKZy9VYTZrRkJqQmJlcVdoOGJWMmFSaXBrMWFpditFK2FjMnRxK0t4ZGw1dnU3L3hOWWFwM00yc1dJZk9xRFBjaEF3NzNuSlJORzV2aVZoWExTZE5ZWUJ2UFg2Zm01N3BiUjIxbWtxMWRaMXNLZk5xYnRyT0ZjQjgvaDExSDFNdWFaTzdLR0ljM0xwajRQV2pZQWdLRTVCTHo1SmVvVUtxYVYvcExyUWdPc3lYT1QvTzV1dkMwT1VHcEdROHV3V21FNVZrQndwOFRqclJKL1VCMEd5alhXd1Z4UDcvc3NwYWl5NzA4SnZJQ0dVMFN1M202R0FPU1RxZVJabVptVUI0WjFTdFplR1Z5UzZCN2F2enhKRWhESHBrZVNEb05VNGhBTmcxcE9EUmEwdDB5c3c2TE5nVHUvWjhDU2dna0dpeHlEOW5kMzlRVkdFRHE5bWNQZ2RsMkpSOFlwbDU3ZGR0NWphYnphVHhsUWRNTVdiWUR0cWd4YmV2SStubkp0Um0yLzBPeFplSFptMk1QN3FYL29iOVRKNDA3OXZjQ0RBNUpLblNRQzBlcDdpcG9BUFNCb1dzMWxYRFZ2MkluYnJHbnpJeU5lSmd5OGlVRk1yUjZINnpBMzhMNGYzMytxSjFqb0JHdFRNRlVHcGdXaHI3ejN0Lzc1bDhIbXE1bzdkMGpMNDhyc3dDL2dvaXhhbEdsN1Y2NzZSdG15NUZQeittdy9PRXpIN1FIUkU1K0J3Q3dWVVk5TlZxVEFGcXk0cWlmVFZIdEJGSUliZUtHeDJEMmQwSFlZNmdPb1NrdUE4cmJoLzA1UnVOaXU0Nm9talNwYVZQVUM1VXZPMTBLUGpZL0JxcU91UDRTbVhEVXlkVVFDV3h5KzZyTEFsdUhxWVdaSnIvREY3aEN2Skx2N3JpKytnNzUwdEJXUjZKMEs2YURNd3o4T2g3V2hGNmIrQjlvdHBOME5vQ2h2Mk5lVEpVbXlhbGFqVDRqS3Ayc3V5SXRRMmNORXhJYUk5cGRLMW81aXo4SmFWN09hK1ZyR1FZNzdYdlU2cTdySkJ2ZktNL1p3Q1RvVXJPQ25IL215c1BNYmJ5eHdXTXhscUJuOCtQcmlCMkFZYkpxVmRPV0hHcy9NZURmMHY1VWwvVXhDQy9JRTB1bkllNkk3UklOM05WUmtiUFpGODNrK2oyanRxUkU1M3dQQ21NdFljbzczM01vVWh6UktwV01wYVVPcFIrUXZqRk9hM3M5bDhnZ2pBYTQ3alU1ZnZRbWUrMHNBKzVIN0dOamdpYkNzazZIQVVaTmhIQUZPdkdDaTlPeUNHWHA5R0J2cTRYdENJZDVuQjRwVDZFZlFmY1VIQXRjaENVUkpYcnRXWjdpcWp6ZnkwNWtPbkJMb1ZCbUxGOXJnVXRoWjU0VWcvSTBmaFJCekQ0dUNIczdxOFlmaXlVNjBvOXB4RFdVR0hOZkREcGxydHNhNk5nZlpGMkQ1RWhJb28wcWNJaUJScVFxRUhEdTZjbUE1MFpKcEZuVml3TFVSTUxxQWF6VStua1Zya3BGUUJFYzVIN0NrVVRWMlZOTXFHYlpReEVpOGlDRS93RDhZQUhUelZIRGlhQUJzYlg3YnFZdEFyYTQ4Nmo4bGlKT0Jlc015MnpOdE1MNUZXWWcrei9DVmNUakVKaU9DS0d6cTAzdzRKeXBCY1UxZ1IzNlQ1NUFmUzNic25hdmhIUFVyY29ZRGxFSks0QXkzSGFkYUdwWmlyVHJFYlFiU2krQlczQjhjUE04TWtONmhsQVVXWmp1MkdjNFc2cHpKLzFKK1dReUM3K3JSSkpRRXVLZ3MvUlRlQXZGbjZwbzFFcGN5TDVzUm1SMzRNUlZZL3o2bjZraWxUZlhqeTlwMDR1UDlVMldmVVJTMEg2Tk1wK0Fqa09GdUEvVlhHeGJrUmh1TFdrdjZyUGR5dXg3R0RwMnJ2bHpleFNJTHRIclN3R05LQ1lNc1I2QnV5aithNnd2L0wxQktVZjlsT1VNOXdGY1JsKzg4UUNRaFRTRGhndHBxdlFZaVczbmJlMmhyb1lDaHpGL3Z1Y0JJOHEyMzNuQ085T0FHbUJqclFPZ3VzbmdYY2JycXA2SGp1N2daQjRybzd2UlU2eHdWd29NUk5JWWx2a2UvaWZ6cTFKZlEwa3hLSTdXblJVVjFnejNoZkFORG1oblpDdGRUK3luTHIyRTBwbUtRcllGR0tHU3ZQNExFbkdUY05VbndvaDFOSUgzbXJKN1RRb1kzbHhBZFVNbHhaaEFFR1FIZVRrbE12dTBrd01wM3pjOHRmazVHdXgxN0ZacFZhL2thWlZzTGo1b2JrWHpMWk5Dcmg5YmNKNnhpeEk0cTgzdUgvbDFJaU95YzFhWFFyQlFWWTlmOXdWWk9wTnpqbWNXeVdZRXN3bG9ZNHV1ZmlkOUEvUFppbTBYcFRvY1JibVJLTWlKcjdYb3pjNlZZNjRQMnpOK3JRSndkc0NhRlZHRGpOVVNsenh3WjhlVDU3MVplN2RFZXRGTHR5TXNwM2s2YUZqMFlSYWI4NXlseGVGNUVTQmtqQ3VIRTZJZmo0dlBGSWNOT0phWWZqbkNkSWtMcWNndjN4azJEcmlpMTk4L3pmV1FyakJid0NpZUl6dHFWUFdDRTdsamV5OEFoSVZVN292cnZkakVZNGYwVVVtOWdPSjg5K044VXhJWWZpRXdiZFJLVUlyMXQySENGQ2o1SEZHY1BocXppZnV5U1pjZ2JhWC9ldis3TUpiSS9ZQ1hGUEFubGxSaUJ1U0trWVk2Tk5SQ2t2a282SE04QU41OUl0V0FTckxVSjFVYU9ZM0N1R1pzc0g4WFI3M2xBL0k0dnJISFJab2p4ZlR4ZXFKc1RHMGYxYlpkNUlzbzNyVElQMjlLbmNJYUNPTEduVzJYaXA5Vzl2QktoRm56am1jOTEwdGxUN3YwOXFHZ0kvR3hNMWRwUzJxSkVyS3VUbzV1dXBoeU9jTXpSbVBVVXRKbEI2VTVPRWtOK0dJQmlCeVBJVzQ2ZTNmVjl5T0RRMVZyVmtxRnFaQlpwWXd4eTlKQ0hQWGgrZmhoaE5TV2lZWnQ1YXVUT0FFUHBvanYrc09YS3VQOTF5b3gxT0pRTzBUNmJKTGhVY1pOZWYxUHA4MG10K3c1K0EyVWZvcm9XVGowbWJkaVB0OWFsSGtiT2hENGhOM3BOQ0o4WEFyUlM2S0ZKUzArR1ArNXdVaTBVL0p1WEtybGdhaWFjUklOMFJzaFo3S1U0TS9MZTNZYjRrT1pDdVFkd1hxRGh1emNpVkFDYUpYOUdlSVNubWRySVcyOVN2SHgvdTBML04vWXI1UEI4UkVYZjR4Tk5hUUx4UW0ra2lvWUVYdlZkRis3cW9pNThvcjc5TXZaS01aYmdEMk5NYmUrdXVEVlc5V3BYRTcrVWFlWWlIV2dLdW91QXhSY0ZxMFJZdVJWcGVsVEJxUFJoeCtidnFTZ0syMUFZeTRRcExDR1R2YTRUakhiYVFUUndFS2JFb1lEMjdiUU45MWcvNGl4d3FwZW9YM0F1V2NtbEFFUnBwcDcrU2hxVXRDRUlTbTREdEtNV1NMQUZDcDJmM3A3UlU4MGVrWXhSREhyc01DQlBGQWVyWmJiUnZtdnNkenZpbVF4cFcwc0RENGR2WkZzeXQyREJmbXlpVURRV0Eyam1xaG9pVU52MU15dVQ3T281VG1SaUtJZVl0RGF6c1gwUHBRK0hmYW5FY1B4eURoQ3pqaW44Q0p1dE12cHF2OWl3QVBHUmNaVXVZTHhheFRZVmZ2ZlBlNW9mdDkvNFZSbWM0MnV2RGVZYitrNjg0UXljWG4yMlo5MjBoQmw0SHFyUXA5NWpYaXJoYWxiRk14TVA5WHE5bXd0WndVTVpCdkpGTWZlMnhpUDQrMk5ReGFYcGl2ZWRHMzhSTVdUVHRZWHpFN0c2UlBjNWc0RU52N1VYbnExNjZDdll4L05ZcDBzdTNubDZzQ3ZsRTJXU3V4TVcweXhIMzlaMU5RUlZFNzdEcDI3U1VRRWo1c3FWVGpzeklBTmpROXVDN2VXQ2RGUHErdVZ5YTRjSWdRS2FyNFovRS9NSkhlTU5HR0xpUWNiNk5jdkwyNmZXTVJDZWo3UzN2WllRdk1FTHQxTHhXMytTWHZRZHpXWUE1TVBiNHgyU1EzV0tlRW4zdmxSazFXUEQ3bUltNFhrcjRrbnh5ZURyNGZIY3ZVNnZRZGsvbzIzSnFzcXFlRWRucjhGVFUxMXh2bFZGMFFJOUx1TG1pbVNDWkpvQ0xtaWFVK0YxdmoveUFNOE9ncENCTDZPT2hMa1NlZ1V0Q2ErbXk5Z2wrVnorOVBmd3lZb2diRVdSbEtlVC9QMjN1Qk5sOWxmNTV5MXVVc3JlOEFxQVdCai9KNmtzWnJVeWxWSGVnTndHbXlmbzNJZlBmdTBnQzE4cnptdVUrck9LbWJ4ZXVnYWNRNHIzb2hxdmVQOU9pT1JHQWlmMWVlWjdFeFZ4T0NjU0VWUmRWSW02WnJtY3V6d1l3TWp6dXZlY3VxTWw4UUkxdzJuY0lKcDBSTTZFdDd6N05Dd00walorMWlxdTh4ejdPS2Z5ODV4VzJBWUtOWGFGcUJRRzBEQ25tclBwSlBSM2JiTXlkUHpFZ21DSkpoSG9ScmFMcVM4UnBoYmc0bzE3THczN0VONUE1b2MraUdOeDVFRzBBdmdTM0ovNGVRd0R2Y3hPMkkzaXl1MGtpeUZ6NUk4RVJjZzRIR0wwRU9YaytDN3RkU3N2d21JTkNzZUVaaHRWMlFhSzRHODBvRVF6U09jWGIrZXU1SmZqS2V2YlFOY3U2UzIybW9vOEtWaGR6QVVscTI4dlY5OXJBMWM3N1cvaGhGK3lKdzVXZzg0dXlLS3dpZGtLSVRjYzd1NkxFVXFZQzNVdXlPN1l2Kzg3bnhUb01wSDlqY3FXNTlVU1RjeGRhYjFOK21NbUFIVS9qNG1rWDAzU2dzcUR0Y0lHeXpYY0UyVUhvQ1FLRGNWbDVVM1ZDR2NtdnFLUk43VTE1Q2ZrTVlJSjhwVUZJRXdiZ1h4aHV2YmV6bjRtMCtWVHEyeDNRU1ptekxOc2tMbUIvSzV0ckJCTUR4MmhDeWFlNmtGK0JTamRNOWUrOXhoYmJIRTIwQW5oRlJVZVpXLyt2bDEram5YT0JzcVpvL3BKV0xBSkI4bVVxaEZ0b3pQNVlzbnFCUGZWNnBkZXd6RVRaTHBkeTdWOGNHSXoxNHBtU0RRY2NrWlVqTkVHa2Z0MWlhckwwb3RxWTJBc2c2eDBrem5UcEE4OVNDbzFCMUVJM2M1Y0tLZzN3blJlanJNR0c3ZDh6SFBraWw4WFBIS0F1dHhwdW81UEZKbG1VdVN3RGwrbWtmS1Rva0ZoMXBFRmc3ZHJLLzBkRG9rYVg1RGsrZmJlSzhydGp5cnFmNWl0SDd2Z1NZZmhCcEV6eVhkaWlCY2FGWEpaYlIyWnBMekdlRzBoUWc1MW1kNTMzNVlmVVc0SVJVSklxTmVndGRhamZHMnhKTWRtN3hkbEg1dFI3ZDhnWFVtQjluQmlldmsyNWJ6K1pCcis0QndHUm9iZmtobTl2ckpQRmRPRVJPbVZVdEF1c0c1YVVJMFRyWkNnZCtzb1UyeTVib2lCeG9xVDAyK0szZ3pTcmZXaElGb2ZJVmpMbXRYbDFWc04yalYySlRTa1BQVWVPbFVCSWEvUVByTW5VLzhFeWNxdFNCc1NqN3prcG1jbko1RGNXc1VTS2g1NkorMXlSU3FXenlDclBZZG5QVllSVlZQSThlUkVmTkhqL1JtWFJzUmVoaWZKVi85dzJyTDZmWnVPYjdnNFpUemZJbHluRHBKWk9IdXg1NE5LNnlDTlBGUUZXYlBSUzBWQ3d4WmwrNXozQlNJT3dRVDM4WWluQTZidE00aFkyNjUvQi9zR014dW85K0VjUjlJdDJPL0lzSllYSWNLdU1qK3VKM3dHYzQ2SC8xR0ZqVlJQZU4rTCszS2ZmSjQzTDRkS0NiYjJMdkZxblBvNldNQnlwVWJtV1ltS3hDeFp2S3Eyd3BKQndZZEltUWZIZU51d0RSa0VaMHF0Y09samNqUUNsWGkrMXVKZWRqcGgrYzhXZlpsdUI2Q1doSzdPTU1Fb2V6VHZSZFp3ZTVYa3d4ZStmcmNSaVlRVWtXWFpwQklwcSsrbHBiNGoybXJhVkI1NTliTmUvVmgvYVY5NVJsTmNpVVZzVlN4ZDl6ZzRlT0FYQmxvN2FyaUp3dUo4ZHdJb1lnaWNFZ0FTUEdrYlFyZHNjNUM5UFVHYUs4Snkzc25ldldtd1I3djhxSnRLK3B1bEVyODRoT04zWWs4WjhuVjNFaUJZTVVKZTd1K0QrdTRYb05KOW93TVNqZFJJOUplMXB2cmdWRnBlSCt5U3cwazhOMU5JVEltWVAyaVFRblJ0NTRDci9KSDJFanNUTEUvWlRpUllIT3dUOXVkaHgwUDQ1ZHExV2hRb3IwUDhlTTZKMDNtRVcwSVo0NlVjQmZQVm5IbS9oVmtnL0hoRVZHcVEyVEN1Z003UW1hK3VkQlYyT2l1MkdVQ3VWcnhjc1J2NnRab3VRWjlheUEwR3ZoWUJFQ1NmdlVjUDI1TUttMU5idmU1ZGNzVm5IdUhjTTFHc00wQUVoUitpRUlTZnl0R0JZZGc2b2ZuL2R2ei9NYXBtcTlCSEJqUnB6eWhSSU9vZEVNRFFRL2ZBR09XZllmRFptU0ljVXN5aGdidjhTNFpXQkF0c1RCQnF5Y0l2UFIyNjZ2R3BJa3JIdUUyOXNGZk1pdDkxTWM2YmQrbUFDWjVRdmtOOHhLd2hiUGNOc05DZ3lrTGtneGpTbThQVHhTWEc1YTFwK2RsUmxiMHQ3VUcwTGdldlViNEkreXVJTjZ1bURoTVVtUlZ4clZmL1ZWNlo0UWE2UENLWVdzbHNPcnZneVBpdkhoNFN2cVhvNG9zenRTQlkyUUNscXVIL0RwazlTQVE1WjZMUTdnUmZocFNjaGZDZFVDdWNJNGgxWFJIUDA2NjBLNWt2YUI3N1JTWGNiU3RVWEFvTlVKNUpCWU1XMiswUnJwcGVMejdTdXQ2UHhJbWNRWDlFVGQ2SUhuZmNnMm04QVR1UEVObXRodzdveURvbEl3OTRyS3R6NndxU0JBaklZemFtbGZScnV5ZnI3WGJ0M1lIVTlEZjN0Qm1jczdCUllGYnpqTGt5TVZZTDVsSDAxUGFxaFdZRXl1YUdCMmllZWZxelVYK24wOE5mR0hXaEYxbHprdlNzaENodEpCTWhld1JFWWY3TFpCcjcrN1B4NzZyRDNsSUVEMmVuREhIOWRpY215RERoRGxQZ0FudWQvYVNpL0Q4N3FwNGEwWkFoMlk2REJpQ2xOSUNtZWNlYW1FWFczVy90dU1jNEx4VERYbHBRc3RlUEUrODhKMElCRmlYaVlhMVN4NERDeU5JUUEyai9ibU9LeUN6UzNzKzdCTGxodkVLTE9YNE5oUEp4QWtrdEExMmFJRUtmUUpHZDFDM2w1ZjdDQkFES2VPNUZhWWVxbFpWak93bUFFWGUvNU5SOXkzNmxLVFkrK053cUVTY2xLL1k1V3N1QmRBWHF1R2Z4cHVPT0RHaUNROHU5eS9rRHV6RExQT2wrbFBhTldlZU9uR0NzcVdBOFdiblFETzZDMng5MGZqZTFTMU91eVNKNERsSVpWaDZZY3hXeURsT3d3Nmt4Q1p4WVNBd09oVVU4aFJuRnA3RzdqeXlSQ3RoM3NTRnU4bFA1ZklDNXJnZVpnbkVhc2dneUlaVVRscFI4dC9PbHpOc3RLZVNMenI5SWpXbnN3V1RBL3VrQkZnaVBDZGxxb20veHJmNktGdm54WTlFTmpZYmUxenhodWlZUWd2TUh2U29FR25MRHJrVkNNMTZCeWlkbkZBbFBia01jWGpHdnpXcFBBS3lTVWhZVGQyUXVwZWt2SGFSazR1MllhMlNVcU4xN2FUWjUrMGRiREhFQUV6WmhTZ1J1QW9pZDhyaEZYS2RhM3MxSkdWbWpXclpRMlBwZFNQWnBueHdJL2VJbzExcjdpTkZyRndmQ094em9IVTJlSXFmNE9mZWZDWkZZMHBqMnh0U21XUEpETkRHRnJ3dVpVNC8xNmU4V29OL1llMUJzNnZIblVhdHhDUXM5WDk2dnRHTm5PaEdFKzd5T21tTm9XbEFRbGNwZHRZSHNRNm1TeWdaTnh5b2ZPdjI2SjB0S01MWXFKRUlUNVNlMU90TldSd2NMQTJpMWhIUUU1TTJjalhuYlV5b2xOMUp4clE1MVdOeUdwT1JkRmRmSEl1aTN5NUh1MThva1NVak9heFlKVTNDNG1ac1oybFJyRG95U0VmMTJDeVo3eld3NHpnelJpeUl1dW1nV2tyODlzZXN5SDJFQXR4VnNraHNablVmdnhNb3Z5S2VrOUNZS0hFTFZ5TXVuWUtOUDV5NVFUVjFDaEdIUlVCMFVsZW1LRURMSENZYXorUnpmSmoycEhxT1BWZFB3cDY4YXNac2RrTVJuZjBRckJvOTZ5SStzck55cHU2OG1ZNDRZL3lCSk9SK1RxY1JmbXNxTllYeUlqelFkQXFTZm5HWUNKQzBrWEdlYkVBcFRQY1JxaHo1TDB0M3ZpM2NVclg2NkdxUVlXSU9sUFFPRkZQd0xnVll6Z20yK2VveVpPck1CdkNlYlQ3Z2p2OVJlMXRlYzZhbS93UG4rYUtXL3h0bzQwMDRrR0pZM0JsbXdtM2lGSnl5RWVKN3YrbldZZWtrL3U3OEFqcGdMUFQ1NTFqaC82VG94NjdUQ3ZkTEw1ZGRlOUNBeldzWWZpRmIybHhZUTd2UitSLzVtNWdlcGt0WU11NkVqRTlRbmUwaVVwRCtaWk5aT0duTm5PeVNMWXYyS1FmS2xjbHBmSzhCM2l4WHU3M3NoWllwb21TUVgrMUxhSG1SSUVWcVJIeHc0ZVFjd0wrQjJmclVkVnNrRnFvY2g5dVRRWGViQWdvRExEQ1J1TndIQVNLQUxmR1R3MmdmTmFLWHhPMVMyVkxSdGV0cWgvVEVaeklXZEhLc1hkY0ZoK0F0eGEwMjV5T1NVcUY1dGk1N2I0S04raGY1MW1VS29RSEJlZmI2ZVFrVG8yOGZNbGtDaTQ0bEdxMDF0T1p0czV6YW5yVXVQcllGOFRFRDJBZjk1R0FicTcveW1RQ0JzTytCK1dMTFVyaERsa1EvZXBZZVgrUVdMMGNMdWVPTHR4ekZoNi9TdVhMWTFMSzF1U0pnQmc0emc3a0p5bnk5Yk82YXRpTC9QMjB2eGxhRWYvZjcwY3Bqb1l3L1pwN0VYL3Q5NlNWWjRiL3FVTWNzL1lvZWdGL0hsaHRGM2hUbHhpUWxUbzdoWDRPRkJPQnJIOE1JS0swVjNEOG1NdDdQMElWZGJJd0UrWXBYOHFnVG5hblo2TS9nN2QrOCtxWkxhUDdQdXZkUTlrNkRKU0hENGFnYStFK2xBeHlZVm01NUdSSTl5VUJHc0ZYVGE3Tm5mNTlFendPLzl4dnBUbmpObWp3cThDN203Nmh2L1kzdm9mS1NhMDdvTk55V1liSC90cWlpWnJaYVNzd1phemhYMHh4TC9HRmtYcFFQYnJxb1FOZEk4bHZJWG5MejZxQ3hIakxKRG1tWXlCMEhtc0dPcUpDT1ZFT2dGK1U5SDNyQ2JWcFBWZW4xYk9TUWdGTThKMmcremZHU3NmdDcrMDRlUW1HbTZEd1hZeXkzcTZYbnJuN2o3T21XUjlUQ2s1a3FhQkRuYk9nR3FZNHoyUmVQMW5GNDkyVVR0c2RVaWt3MVJ4TFVvcWhhT3M2NXEzM1lzK2gzY3RsbG9XVmczZ1hmYkdWUHladGVHNUFVbWhVVWgvdU9BYy9FNGhvaXBsa3NuQTRkVUJDaDBzK0Nhd203OHNwWTF6S3ZnRHQ0VTA2SEtteEdqUmRFcWlhZDgzekNyRy9xcHNEcE01KzhldWZEZTNtTWd2YXBUNmtGUnN5VDRGS3FxdHVBRngxVHNZOUxzK2dlTytyQ2RZcFViRklyeVZTdjhVMlFkdjlwUjBjQm5ncDhnb3N5UTd1WlkrckFRQzgvT3lRQW41NmV0S1NMMWR2bmJ3VVc5eG5wcEppeStINTNVRnhESUpCWWRYVFMzRW4rbXFTNTcvd0w5bHZoQmdFY0FQU09tV3Y1Rzk4V3daLzMzSHpqbWU3anZOVjVXZWcvQ2o2QUVMMXR5Z3AvRVN0aW91TWtndytaZ08rdVp1MXFoR0duVUM4WW5CVmVsay9HdkMycTJNZGxTYlBWUTNCWDBWOE9qUnh6ZHR4S3NUMEdsUGNoa3VEWE1IakxlYnlLWmdQdU9wUVByZVRCbU5ud1NVSjUwKytFbXBFSkFSOWZJSlpaMk15MnR1ZU0zM0MzNklNcHVGeFJaaDFuNDlCWTNYVllSaFZsYlJyTUNsTkhtS0RUTDZubktKZDRIVi9GWityYmplNVE2dk1OR0hCK0NQVUlIblFIb0Rlb20vaXNldDBmOWxFbVB4SXVjSVpnZXNaejJad1M2VTZJdi8zL09KN1lpY2VIc3hob0xqeUVXT2RHdkowVkI4YVZmamJJM0pZYWxXbUVRUHZwa1FSdWg3S2kyVEtQUFBic1hSeklvMitBSTNiU3hKVkk0MUtyRHZiS2RMeTlrb0cyeWM2R25nV1NlN20wVjlDVVBnY3doS3lsMGQ2K2Z2cHltbUpPTTZSd0VoS0tyUm5PcUlDUXRrdjArTVpYZTZrbDBUTHJvM1kwMGxwNk5RbXJLcVZGdjlWZXdEVEE3NW1KcldZc1F4TFluZ2ZLQXZzUkI2N3VyaGtvTXF0REJHSzhyQ0Z3blhyeVVZdVd2Q3pWY3JEazNBTEJJaUlCaVpmRzJhSkRBb0lSdW9Sd2RVdnFsZ2lxNStxbDVWZ2VtTERYRFIrUFNTK0Z0cFk3eTlERktLMGdtbkZSN0FoS25FN21oQkV5RjBRQUs0Q2FUMVJ5WWhFcXVjY3N0UnFXbHY0TUNaQVVpeUxpWllOckE4WGtuMGw0OHk1bWhoOGpIMlhRWlVrcG9oQUlkOVo4N2lkS0VJSVEwUkhjeDZnakZ5UE1PQ0p2ZXg4anFPV2J4UU9yRTFtVko4eDNVZ3Y0YUg2ZU5uUDRMamdRWnNhQ1FCLzNUa3prNXRFSUY5OFRUYmlZRmswUUd1S3kxUmR4aGdJQzl0Q3RJb3F0Y3JIaWhhMmdJcjdaMlFXRFZheHpYVXFNMXhzTnVKYVBvakdrK3RvSkJQRXRRTGtMa09mR0ZKNTI3WENwMzIrd0kyOEVXaE1QZ1g2OXdVd0x3ZnRzWWpQSGpwdzUwS082Ujh1Wk90WlB2WDBNenV2eERWUkRKYnhwN2F4UnE3TzBRalNFTnhxOXkweERlaThQcWJKUDVpYzQwVlgrbWg0Vkkzdmlzc1RjWExuRzNZbFY4a2xIQ0IrcEVDbDBRd3FzMEpqUi84MHN6bXhjOVBXaWlhbUhteS96ZDcxTnpaZXRRV3dPT085QkJLVm5VYmdSUnhRVndnc2N2Y0JER0V2WGkzazRGT1hDRXdOQ04wU0lpZnBLWTZUUFV4VmRjdndndWd5TTFVUUlMcEpSL1BLWWdHOVQyaTRJNWhpQnZEbzNvTStZKy9kYTZ4TGJ6dk04b0psdmhUeldKM002SXBxbDRMT3NlSmNKZDdZZUs4ZjFpcWlTMU1VQW50ZTVPckZpQmF5SUpzNUVHeUdoekZtaXJwRVUvNEI0SFRHYlo4R2ZDaDU4TUN6cGFoVHNCZmpjRVZheXdnYzRYUVFkWGJIWlJLVjdhdUx6bDVBOVBoMldZV3BRaVd3blM4U24rcFlUU2lYMXRzSlJheTg1a3RqWFNGVGxuU2dscDltNGZSQXBhYnU5VzlFUFZLWk9zbE9SZnlGYnlqRndoVmZhZVJmakJIWTd5eUNxMW9QNGx1WmhHcWpkcmk0Q0ZxNTRCVmNrQWpoOXJDU2libVNLdi95SXR5YW1Xa3h4ditQOThWNm9wREhxVnhwOVYxTXVlZHhvWm1IWlk5RTQrUkdBYkNLa3F0YnBidys1ZUVMZ2x0MjVzajVZY0czNWExWi91dTdyanlsTXVldWg5Znd2ODJiczE1eVd6dkhSUHpoMjdlTUxGdWp2ZWlGUm4zQUZ0aWFSQ0gwYkZ0N0VGVlBWUzJjRTRkMUdZQjBaZUV5Qm12aGUzREU1TFlycEpBU2ZMV0VwYW9CbGRJaTV4ZFB3YWxsMTJTNW1lbzV1UnVpZ05reVl1U2JEQjh0QTEzL2V6NTNPRGM5RlBGUDZhVVljc0Z3RkFFb050YndaMDNyeHlvMmpHWVc4cFpWeHQxWDV0a1RTRmRrWWhCTjJLVTdXSWpGSWNyUUl5dlliMFQ1U0tDb1REWm9OclI2aUVyWW55YmNxV0ttdE5oenNHS3cxM1l0YjZqL2FUY3RKU2F1NGs5SFBVazUvZmxPT2RNSXltcStWeFpaUmQrTEZlUDZpK3Q1RVlZS2tmYURmKzdPdWs2TzlRZFhqVlo2NThUaFo0VzFic2paZlQzbzFrMG1BOE1WeUpyMmMxN1N2SEFMOG56M3lZbkxVZ3doemZzR09iYUEraEJHSDAwYTc1dG5GbUJKOU1wYTNjYXZlYjdXRkFLSkRnWHlwTzhJZjNVekh3RE83dUpzaU5IajZMRUI0QlNRMUh4RGVKUXFld0s1NGpBUTdjN1dxM3Y0M0grdTdQaURBR0Z6THNMK3NIeW0xODA1cTdLdkJIcHFVU2FxMEZ1U1k5TlFSTEhqUERqOVpaQWpVdTQvdUhlR3kyaGsrdnkyNVkzeVA5c1NiNzRPZzIrMUljSHoyTzNrMkQ3N0pTR0owbUV6V1RBZndJRjdjNUswdzkwQi8vZ01wYnV5SXplL2JzYWtUbUI5VVkwTUwvQXlBWktWQlRZMGNucmtPaTVBSWNkZlV5b0h6SHBsdTRaM2hlZW1qWTRsODNwak80S043T1RkeTZFbjI4M3dibU5aNm1Nd0NHaGc0eHBzTldDa3h0UGxhU3Z2RXVTSXpnVEs0S2kzQ3JuZSs5UlpFd3RUVHpWckVLaGlac3RkSTQ3K3FpNCtad3FQYjR4SWNSYUwyMVoxV0NHOE9NeUJ5amp0MGJLQjJUTVFzcDRtaXFhM09hU2NWVTgzV1BBVmRHbGU2MS9FVlI5d2RoUWJFK0JvWUhQSTE3SHVKQ2JTbEtPYmF4TFR4aWFvRkVLZ0I5TElXUnQvSE9iZkJPWEpwbnk1Y0tGdkpiaDA3alJmOHVuam05aC9zaWtKNHNrZ1VnTHU0enF3ajFTTjZxOHVZNEtKRUluNkZ6RVFnQzhDQ3BFYnVTUndldFVmRzBmR2prNmt1UGUwQzhxVHBLL1E3UmlkdndPY1F5eDF0V3JWaWpya3hNTzhQZnNVdEVsdUQ3VjdUUzUxNExQcDdzYmZaWWdycjY3Vjg5UnN2ZWN1UHdKbUVRZ0tLa2RFQXVSRFlqbUM1WGtmYnI3M0xTNTA5U2FGNWdPeWNtY01vb1hNcnZCQnR0eU1Zd0VVaE9QNUxZd2s0WXZ0QVd4RWp0NUVlYjFLU2JTeGY2WXRBMW1zWG9KVGhFVzBqNW5OMzRwTy95eEhoSHorUEpwNWx2T3FqbnNQaERBWDhwWVk5WUQzYWNOSVFDTHVNOUxVMEViQlB3WHc0UjlHMHF4TkV2MTZDclRHTHkvanp2NVdKVXhTVkZoSUhMaE1xb3AxbDNpZmx1cDkvRTF5dDNBRXJYRU1jRXArNWgvZ0d3a3ZVNmlocHhCc2R3cWNpek1KdSt1cExoQ0RlL2pUREpsaUNKa0dNTjJWbHZvYlV1WDRFM1dsSzJDZnA3N0E0bUJNYWZKTnM4TnRmaHNYckFqMUxGenZHZlJZMGtmSXhFRXNNU0YrNDA0U3NicUlZTUFsRjJBTDJaY25pMzd0b2RkQ1kvMFJxd3hLOHNTRWdwUGROY3pWSFIvbWFycytrekhyWXUzakxraUtWK091MklKc011RlZWZWliSWI0dFFmK3diTTBNRFIxV2JNc1g5a3JDM1VVOE90aGxQQlF3ZEZVM21xT1VBeXpnY0hUa0J0L2djTzNkTzh2UkkwczlnT29nVjl6SzNmdFJpMnRNUGdaNDJPS1FmaFo3c0NYN2s2bnVvaVNTRVFFa1lZSmVnL1V0eDQwbkoyelNSMldkejJ6RzBIQ1N0bmdJZmthSStaQU8vdDRaSldSL0gyUHlkallJVjd2WDlWZ1VoUEZ6bXNlQnhXY3JhelNnaUJQOHZ6VnJWc0R3N2VnMHNOSVBkNFlpK09mUDkyNnE5MzdMMFdEUStYQXVpZ3FrbmpwTS9XT2ZRd2pxQTJaNXdXM1RlWUNCVEl1K1U5YU1HTDdWMlRqQ0p3Z2VXQmlCeGEzZTI4MjZJd3hsQ0VVT0lNa3lVYk83VGovUDhUZmpsVlcxcTJSalJjV3k5bFhCVTVTcnJLK21QbGpVcU45ZjFNUnpLQjZRa2VRL3ZYQkFpdVhpbHpGb2l1TExyV2l0b1hLY2p0c213RVNmWDdjdGVBT3JOT0RuTXliS1pWWFIwbUgreS9uUHZZYm9tOGxWVUlIWldURkFBR1ljR1YwYWRFeVV6bGVMb3BodG1POTRYVW1GdEJwZTFzUmo1Y25BaDBQWndKUCtBRkV1T2U3SjNFZGkxU1dpcXBIdzVMN2hDd242Y2VTQUlLOU4rcWdMdTNOdXB6U0d4ZkE3eUhlWUo5R28wK0IvMnBNUG9zemc3MkRkM0t2VUJQVGdiMi9hMlF2SWd3eWlObzB1T0VVTjdPRGpOWlBSK1hVclBLZXpXZXFIY1lEUHJ2K3d4cGFqeDgrbDFWS1V5Uk1MQ1kzcVZXNy9LeXZEVERRamNTZ3NJdjdSVG0veHRxTnNmK0V0UldkenhxamVKZkhDQjJQWjdveldhcHpWeXhtM3pFbVRZUGhSTmtBWG4rdWV2L0VWaUdFdDB2VGRrYXhpODN1UGdCU2VaQ0h5a2g0VUN6N3V2VVhkVXBvbEVSUTRjVTVseWNLRFAydzBwU1poS1crNEJmRzdXZHUvM3laNkVrZDQ4dWYrN3owYm9ETmF4VmxGR2pJbE84cDhGOFM2cnhJOCtsVmdmZU1wVk1jd1lvZ2F0QXVnaDdQRmxUMXpxaHRZMXVpekM0dG9TbzAvck9lbXN5b09USlNBSFhKcVgyYU9ZcFBSNlFWcDdVQXpRWmV4OXc2TFh1aFJqRld4VnIySmUxUVZpMWZuL1RlUks3aHBscG8xNXhocXAyRXJwQ2FHLzRqQ0hEcU5XdW5xUDdLOHhSeXVZekJSei9OU1pvU2h3NWo5UysxRUI2RVdCSUU4RFRvSytxMEFudk1jZGJnT0c4UFpFWWNlOWVHYWMyWVU4RXlyV0ZpTzF0bmcrZ1lMNHFoZWNvNzNUQ1JCTFl6Yy9yKzBIeHN3R29lem44c2g2c29LWll6ZjAyV0xZeVdoQW9BRGtGL3JQTmgwV1JaUGhyTDJ6VEtNbTJveExIM3ZQTkVWQW5lOHZJWWRQaHU5Rkx5Vi9jQ3lKakxlSXNvMG5SV3hublRMTDBmRFRRVjVBMk9JVkFlWUtqUWYzOTdMWC9IdFc5bnhzTnVzcGhKYlkrY1E4eFZua2pMS1lkRFMzYkxnOHZUTXJEcVNJZnFKeEkrNkpSSjM5MklTektITmlvRHpYQWVDRFhVNFM1YzRkYVlreGtZNkY0VHNLbjJFMjVPNVZBanFTZ2VtMlNvVEdidWQ5bGUyL3RGY0VCb0NteXRjK2dDUjEvWk91eHpPejRtWlFHUjg5WEpPaGE5WXkrNHZXemRPaUU3Z2RNa0JnRExPa1ZHV013UExCbWdvNmJHaUZHRWo0U1hoS1Z5Q1B4OHdzRlNVVm9IUVI2bFVyaE5RaHM4RThYMm9JTUZWRDUwVVEvNG1zODY1emZoejEzQWRBV2RtZGh3OHpUaGl0RlRqcFlBbEZoRWZjREdjdzBVQmpxT1h4Kyt6a0xtdFBTSmVySno2TEZyckNkajByVVl5UWZGS0RkT3JaNEdUMlJ4OG1SUGhVbmlsMTlvclU0Vk1UNklSVVNkUEhLUmVyQy93eFZDTTVSdDVHZ1NPbUxTRmpHNWx2RXdhSXE5VVZLSm50bHNONTQ1K1V4N0ZXcjBoTTVxL2Fyc3NENnNaYzZzZTNzZ0paeHRQUmcxWnJ4dEUzc0RKeEtkSUZlcnVWWnVobGxTeWVLMkFOWFZueXBjK2xESUhlNG92Rlk3VDd0eGI2MWZzL1pUVnFCK3RVelhxK1NjUlhYL1IwekUyNWdQQTducjI2clRYVFUyOVRNRHNBU0h2SDZwZy8vUkhGTlAxZTRMOWlzS2FnSzF2ZjEwNklUQ0xPNjBHSjU3MUcwcTc0WWZUNDM3ZTJaMUpxTlFsRWlzc1hUSFhkU3QvWVhUQTRFanBTS1NVYXZZNlBVNkloWkR1bUZjRWFuMVJXMzFaSDZ6VnRNN051R2w2dnFqSjdTVVh3SHBaV1RlS1hZZDRBazZ1bkUxTDRkckZPOXpJNW5sZkRBVGRYOVRpOWd3ekdWSjAwdG41TTc3OVVTVUtURzhicFQ3bGYrcm05OTk0L2FlN3BXc3NUTmlsN2FzalFmZjIydGFkcXZYcGlPWkxpUzU2R2xycTQ2M1crcFQ0YzY5MTZ0R2EwT2NkL2loamxuak9Jblc2SkUxdVg0ZEdYY1l0bkNFRDROcjVzbzIzcUZUZmFFOG5yK0V2akpNSUNmMERTY09yaGtRWkxPZXhqNWRjSzN2MDErYzB3NHJhRDdpQmZRN2hLY21QUXhIUjE2c1RjSnIzSVdYMFpTV1FPbmlJUS9vcEt6Y3NkaDVhanJEZE8zRXBlMWhiMnFlY3lSYmdCRXNleE1XZzJYZVBoZ1dHdlBCZ2pMS2xGU3BoMGdqSFJLZjZtL0djeFRyRnQ0dmVPUnl6N0xFTkl3Z2lad1FRM2M3cldJKzJ6aEhINm4vc1QxcEp2TXZSZWtNdkFLTW1NRCtUMEt6VHUwa1hIdy80RGtNU2pQTjBIRGhuT3BHUTlkR0ZGTWhtSmJxMTEyeUJWRWQ3WTAwcldrK2RUaHc5SFJmcm1XSFYvOVV4VFBjM04yZ3BONHlseHhCa0czVkJKMXVLUFVpdUtaK1BOTi9xTWp5RXEvQzhqbm1BRUVZMFhuNzc0bmJaMFRzWkgxdjZtMk5uYkFvQ1ptcnY5UmRHelBXbWZndUl3RjErM1psanZXeWk2NVUxM25NbndIekdkbzdEK3VBWVRyUHN2cHhuK3pNSy9wUUNXVnFqSmJ4SFRNTVpkalRQemg1TmdzMSt0cFJjR1k5NWk4Ym5XeE9nYWtWVERBTTRqbEFJM095WlFYUE1tcWNaUVpZWnQ4ZjNBejRtcnJVMVMwTnM1UFZoc0ZWUWF4eFRlY2UrNXBOa0M2dFlKWWJIVk1rWWM0a1FmN1IwazJpc2ErTzJGKzB5L3B3c2pqejFwN1VKeDQ1NDlMMVV4b3ZWU3BnOXYxSGxEK1pUYWJSMS9yMnVQb29LUzRDWHBYTTJlVk5LU0g5VXJpdWZJdVZ1cUhSY1B2RHpNaUEvZmN3Wi9BUEsydXBNczdaWnpHU2cyQTJlQnZudlNhY3NsamE4VkhQa2hQa0VteFFJY0tQSnplNzhGTE13dEFxbDNQSGl0ZjI0M0lRcndOcTd0ZER0dTFONkpFTzJtZ01OZnRZYVdFcWc4N0xXaFNXaWRGTWo4SWQ3M1oxZDdVOU1PTTk3UDBqNEVmSFFPNHlZSVFqczJGRitOaGI1TjAvVlVZZTVKVVRYdlJXZTJwaU5WNE9uV3FYcVpSNFltQ1k5Smxpa3UyUG40RS9vVW5GNlp1SU03NHJzaFVKSXFKQzhWcXVKTHVEZEJSMWMvQVZ0Rk9kZkVhTUJKalNaQ2lMWU9nL29WYkVISE43eWRRQkF2b29FTUQyUU44endWMzV3TnFsQThtTzB3NXZaNktndER3SzMzL1dVVFlVZlNwVTFmRk5HaXdJYmZKeEtlWGV4VFh5RC9WL0c1Z21KS3lpb0p6Z2liSFZRK0hkeEZZQTdNUGZzYWs2SmE0VnRJZ3RJVUZFdUVPdzRTdnQ3Y3o5eDFIeDM4aFozbXNSZERCdkplWWx1OXFrUkxSMEl1bERUUzVzNm8zM29SQUtEai9CK1VxUExOeEM5WGg5SU9QbG5wSnpYSlJpekRrck9Rd3orOW4zaGlmUGJISWJmWnJ6S0VaYk9hRUpCdHpHS2VoUTM5ZDJiNGdaWHpTQmlocnM0ZTVWTXBmTUxpbiswaU1qbTdEb084b2xEUFY0aEpjY3pGZDJqTlByRUNjT0lEVk9RZjAwME92R20zNWYrUktJMlJPS1M5bTZ2WVpPejMwSUVvdjdTRGY1U2EvbGNZZnJIeTYzeWduYUh5SEtqMndwNmlhOWhScldDc0xuV3N4ckxpTmhKZytNaHI1aDdDTHg2R3VKWkM2UXloYWYrVzl2eWlGVGEzRlhvMTV5cjl4NC9LOGpja3FRL0k2NDdyUi9vYnFpVTlvRWdWWkJDc0NIR2tkRnlKVG9qTnRUek5neElTS3NjMVViMExLV2R6M3hldzJzWk1aRUJiNzhmZEJOK3NLNG1STTA1a25xOG5DUnE3Z2ZOcWR0dk1Gc1lEMW9GSm4rZDM2eUhQUkRUV3lVNHMvTTVncG1QMjlpdFliVmtrVTBReXQyK1EvSnBwRnM5UGJ1eEpQVWp4TnVia1oyeGhFVDlsZkc1dXAraWpFVGU2ZUpNVWtvTEhSQmNtc2RtKzRqK1FjbFVXeXFGQUp3TVpVWWNCdktkQ2IvaEYwRWxoMUxzbmRUcFZrd2VhV29vZTVrMEhUam1SVlFZV1VMWmRUZUlBbWxrKzNaQlNMVXdyekpIeEtLN2d0ZGVNdHJxdVJjOTA1YmZhUUlxMDNCMWNRdmRsaUVTRTU5bTYraDlyalZUVmdXZ2pYTmVqRDFNNnVGU0RVVWl2clFwamJIVVZXQkhkdlYxYzg2djVZdmMrcTlDbmVxN1NVY1BhLzkxYlNpUVN3RTVOQ0U0UUlWbjJ2aHZiU3pQOUQydncvcFkwV2hVYjc2a3M2WmhWOXVEaXlSUjVWekYxUDBvMldRN3BWMmRxbEtMTHFZNjgxM0h5T3NFdG1QRHRaQWRIODUxU0Y4QXo2V25HUkVHbTVSQXlNeTNqWkZISXF4R2h6NTdoRHZuQmxVY3hGekJQR0RXcXEyVEZ6M1JSMFBIczRiYTRxckVKdkhFSktyN0J2OUNLbFdrT3dWR2JsU1p2R1d3QldqMDZHOGhWVXFZRlZ1Mnc3N3pmb2I3aThqR2RhdVlYOE9iU3loamk0ckdoTmhMVjY0T3FsOC84cnlHZWhabXNhbTA4b3FZMVN3UXRYWmxIVXVoNTRWQW14ZFpOdWFCUjlFYzMvUGI4WWtXbEUyWjRScFBnajJxaTl5czl3bVBlUm1KamsyZXVJa2VLbUxBQUdZckpYZzNGUy9yQ3lCL1ZYQkJjSFpWUWpySWxPTUExeFNyTzZJMFJBdUd1YlJEbkRUY3FlR05PaGY4VktselRMSHJEYjRTYk9NQzdsM0w0WlMwM3k2Z3ZBb09MZnA0djR0MnhOV0I3YStrMGhKUitYNG4zT014cXRPbFpLVWZRdU8zQmZVRDJBblR0a2lYbllQdFJ1bnNOVFVjTGJZd0dVb2ZzM2tRaW5Xa2VwNERSVGt5Q2dZaUNBSUR4NFUyV2kyWVVyOWFGdG5XWWRTWHF6RHdaeUZCNW53SmdObVk0NFJ2NGdFOHFvTXNuVjlPSklNTzBseFNEalF4enNtRWlHZXRFQU9Uckt0SVE2eTRJRVhoQ25WY1hmYWt0eXdTNTZNdHRjMnpDVlFmOE9XVHRQWWRhMFFOeUNjMklNRGdicnRTM1hwWFdRcCtlRE5DSCtGd3dlemhKL1o3UnhHR0VQRnZOWkx2TjNEcGQ2MXd1NjlwSU5IZFJMU01mUHZGbUhNbU9TZTBaMHRadkNHQ2l5WDRvQk5mNUpkeGJjRURkY2hwNG1MY0FpSXI2ak1iSXNZTjhucWk4aGRFOGkyY1plWTNGMzNtTDdRMkpRbmcvclFwM2cvUHgxKzZpMjI4SUVDZzhxenorVGJSVS9uelJYTFZSYjRoWHcvd3ljdEJNVkRIWFhqdk0yZHlRZXpuSmpWaExTbzBCY1BFbXJ0bWFsTVoxeTNCZjZrWFNIaHVtZ29kZisrSzJGa29KR29sY2VnVVpTLzNHcmdWcmNvd3o0U3BScWM0TXh2alJPenRrUEhFKzBMUFRUbHFITFp3Tlh4YnpGUkU5cG02dWtWdEZaM054ay9qM0JJOElHSmcrSDBjWDBCblE4SVQ2WERZOVRJZW9NVkhVWWc1d1BVaTlZTWZVWXVtSDFNZGxHSUcvSUdOTUliSHUrbGQzQWswNGlDMDZEQndNMnVJcmxBWU9CYnVNUTBNMWtuN3ZRaGxxK2xjZitVVDZyTWtxOWliNTM5WEd1cGs0aUhxRG1KZlVGMFkvb1VzaGxRaU80MzFDaTJKSGkwaWpPdW9TK3piMmNuMWxCdTRudDBPeTRJRTAwNTkraGZ5YTB1VFdJb1I5TU5yT2ZScTVyNGNEUlc5K3l0ZW9zZWhDT3BtaXcxbWtOT2lTeHNISkgzWUNTOGRoV2UvVUUxb1JHSEFFQjlUZ05XcE1jSG9yK290Z0N1SkpSK2JVNzk2S3I5ZTNHWDEwZW5rRFk0eGxJaS9LT3F1LzYzNHVPR2FmZ2Nud1A0ak13U1FpN3JjTWxCMU54RXdVM3hIdmI3NVV6KzNtQTBTM1gyeTBtaStxSmI1cXVpaTk1dWhEMFE3YmpyZktiL3lRbXRtSkJxdjZVVkIyTjk0V3NjUmdJdjhHaFpoRjhTRjY3WHA2a2xWSWxnMW1Fb2N6bE54YmxDeWhWaCtqczl3QkVhb0ExRzlHb0VFYm9EMXRkaHlubnRQZ1RRYVlPbUEvcFRUMFlOaGFtQUtVMlBPRGF4UlFHQ2FrTWhIMUd4bzhxNWxhT0l0d2kzYmY3L2hZR3FYZzcveUsyN1grMGo5ekpDMVNpc0MvYjQ2OFExcEFmNGxDQVNMTGFtaGZaYVA0enBoMkthUFQ4Vjhzd3B3OWdFR0Z0ZWRjamV1YlVaeXVCdXA1MmJ4TnliWlpqb3dyb1IxN3pNZEMxYkhsejBPOWdGZXIrS3M0L2NyVGQ2aFhMMTNDdkhFSnNXaVVsbVNIWUZiSTRlRUQ3c1VRaWgzVlQ2bWxCOHZMVUQvQVFJQndhRVQydUphdW4vcTEvbzhyYlByVjVmb2I0eldIM2VubllSbzd3U0xNN25zNWZ4NWptNGViU3FBTEtaeW1yQTJ4ZWdrZWoycHRtbzFaQjZFbTEvZE1uVFNBeUE1N2VhNEpXY094N2E1QVloNGRHalVISmg1Sm9DZ0krODN4NDZBTUZwRWQ0UWtKNmorVWcyRDFyY1RTSU1rRi9RUnRId2JyZWUwUUdyRC9UOFpwRHpnZnY5bVk1WmNXc0pNVnBpZ1IzbVVRT1JKb3pNSDlnZjQzaSsrSFZCT3VZeUpIVzFlSEFFWXBzRDVlV3ZISG1SWUFtY3paS0NQMW9ra1VpZER4SlQ1UHl6YzRZVlFGam14R2FNUWEyMHRJQzg0TGl0WkZIU3VwUXdGM3UvaWdXbkg3dEQ5R25zUGNpU2E3SE14NFNjL2dtMHE5MGhoUVlyODNmOTJLTG0xakNUUEVVTzQ2MGRSZTEydldDdWV1aDJlVHVUc0V6RVJnRGJUUGJSYzIwRmwwL21XVU1OdUNXdFlwTDgzTXY5OC9Pd0tpNVk4Q2xrQTFhNmVocGlXQzN1cDdVUStuZDh6SXF0ckh1emxHUllEdkdDRDdEVmI5by96Z0hNMW52MmJzb0JkbURSOUhSSEdONzR0QkM5YWg3NWEwTFZQVEFYR1pZUjZDYWI2ZVpzYTd6TWI2UWtmaHhPbTFOT3UzTkVoM29qYzNmRzZaQzhMVk9VUDFnUWRjQWp1ZkhJOXBkWlBTMlpacnJmdVZyVy9ZalRhWFFKbjBiVzRqRmI1OGR3YXNRTVh2L0M2ZkZvWTlQMTNId3E3RElyYmFCc3huQlRFQ2FFNmVFRXI3bmxKNVFRUWhnOTN6ZmREZzQ0a0xrWjFRaTQyY1BiSWluYTJFdm9pdmNETHlZZ2FoWG5LRlA1aFdGaWE5NUJmSFhNNkV6aGdDckc5WCtBbTJucTFzUzBWMnp3Q09QS2tHdWpzbXppbkQwRWNRbzJGei9TTTlQak02ZS9FK1dEQWxHZ2RLRS95RmowckMyU3I0QVFJSjV6WlE1S29LTnh5S050L1liNnRlYVYrM3MxVE1qaFZQRk0wcXdLQ0dVY0FwaWF3ZGV3YTh6MEJxUjZnd3lwUHVwc2RJZDViZ21TMUEvTHBYRENYcGpSRnZIZzdKdHBFLzF4SStZRmY0VFdXd1VBOU50S2dqYU0zWmRkRFVOTDB6clhZT1loeEtXMXVNdnZvTGFmWVZwSWx1Rm1uVGNaWldXZkMvU25NMzNTQ01Cb0d0L0NyUGFhMnhxRXNqaDRnTkFJUTlHaFp2YXZxZkpRVm1vT3B6SDlvUVh0dmtMdDZOWjNsMTV3VHVDN3dwV3Yrdkl1bG9rdmo4N3RUZTdTWW53Zi9OMHVEbUN1Zzl5MTlVQ1hselVzanhBcDltRzMzamQ4RzlxMWx6bW1OKzd2TUUxUmMrNEpBVzJzbUIzL09FT2pYa2luNGVjanprSkFrNnVsT2ZIZEZnKzNqWHdVMEY4NXNQd2pibFJNWGI2MHRITUV4UDJzamFhczhwc0xQOTJjd0NaVE12MmVBWGxYUGE4S1BhaU54YzJQa1dBcmszYys1Y2xoMTVXMndod1B5eCtBVVM5aGxnUDdxeGJuazNUaVBVTG8xdGNoQlZvamFtVFowMnR0dnlVQmtNb3JSaVI5S3NxQmpYR3NrRllaMDdGbEo5cTdsUjVyVGZacXB6Zmt0YXdXKzFmMm1pYWZYODBMdWJidnpSVHRWOGF0QVFvdkk1QURBdmZ3bXluTkI0enVVSnIxOERLS1lDTC94Y1Q0aWd2dURZbkVuRVhZZDhKNzB4b3pRMi9yL3hOR21QaFpnUzRQOFJsaDd1NmIyaWNFenNGc2ZTaDZXc2k5c1loM0VoVVRyR2kxLzFRRTIvRDJOT3QxSldqY2VHZk10eFBaeTlBWjB4WTdxYzI0VUhWOWhrQUh1WUF1K2ZxTUdDNWc4TWprOHo2TytRWU5mYjJ0UVJIOHpZM1VNaWsxWlQybHJSMnhvV1plOHJ4TE9kUXZYRllIV0xGSDdWeW92QmRUaUltbFZOTFNHTHFzTTBlS2hGM2UzNyt4ZXBUd2dNUVpYRU5Ib3UwQlk2c3V4TUdpamR3NkJsVnJjbHZMc2ttMEJjY0lNMi9NQ3RJN0lVVHFuS2Z0cWNOQlhjTG1XbVJVRk41N21vUVYvd3h2cE5UWkovNVpkUUc1eWxFUENRQzExMzRQdXVOTndRNU8yRS9FSXI3cG1uVjRabHkvZUR6NzM3aGt2dUVxZFgyM3FnK21YemoxOTdkWGJ4b2ZlUzNxSE5IU2crZVNsVThIR2ZlNFB0akk2V0RBa0dZZFFJODR4UVBhS0NSTHcvdUduTGMwS3dxanVUdm9pVlpDZjkxWmNubGVyRitMcURDSGttWHM0SW5DNzlzaGd0Y0RmWTRBZngzSCthN2dNNXBadkltK1VJcENPTWM0Q2VlMmNteHpwQ0xIbWJSRHFqMkxTTWQ3NUg1aWNHUmxXcGo2TU9INU1tM3NHTkRqQVBPOFJYZjRoMmRrTXVxbDJYcXFWV1BNVERNbVIyNjV0dXJ3Vjl1WWtVN20zTjY2UFg0RGxkTUlCdXNiemZrdHZPam5xVVNQOStjVWhxdlR0TzRxQUJScFI4Y3VLWmZNTlZuMkQrOWtMMHZldnFieENFMTR1dGp0aEx2M1QrWVpIdHdmSUxOWVVLN2J0dnVSNmxUTHlGK24vaEpjSmJuYjZkTWdJSTdxcDFxZVdLZGN3djJJRUdIckM5U2o3MDJjRDFsRXZLMmU3aEJvMDVjYVkwRFR6aUFZNVBCSnVpOHowUUFKOE9YRk1LaGdJeXdIclBWTGNoK045YWU2b1pUOHhTa0twUWN6NE9VZHhqTXJJUW14bkZaeGxvTnFzc1FUNXZFRGhVTWY4bUpmZTg3c2orSy8wN0NoWHRLM2dDbmhCdWFpamdPYlJocG9mM0Qzc21lVG1YVmpsdGxiTmVCajBhR2N0Rkg5VUowRThGNTBIc0xvZHl5bVlLVWMxT2hIM01GY05qUmpaWWZzT0NGWmJiNDEwNVltZ2tJVDltTyt0bm5OQmY0Sjh0eUhDbUpKYzd6cWk0VlZsdnc5YW92Tjk3R2d1U3IwQzh0aXZiZ1BTZldqZ2Y1cEU5QXJmM2tEb0pDdCtSQnJ4amU5OGt2bVQxSGxkY3cxMCtkZHFJNTRRVjhURnhaYndSU1cyQlRjYll0S0EvNjZmcHhKMmNKejBYUXcrUWVGVnpmUlcxQXV0NXhxQURHcWd5MEZuZmZiOUtzcllpODJJZFg0Nm9USTBjVUdPb2NURlpaenROZG1DcHoycWs2QlVVSmpwb09UUHd4ZDNsdGxvVHVVSmtsaFZ6ckpzbGZWb3RkUFBaNUFHQnA2RGx1bE1QQ1MrUmNhdlNES1dTaVpDaGtLREtOMkVJMkFwV2hTSFpGUkV4a0VGeU1QeWhyV1Y2dGVxOUZFV01qSzNYVGVFaFhpbHlaN3BxMVYza0ZrRlJ5STNBYVlUN3RCeVdwc1NrWnVjM1hJczFVM0k3THRPbGluWVhqbGdIVzZGaVk0bWRmQmZDRWZoTXpPYmVrU29iNkFLTk1SVFh0YlpOQlZiKzN2aC9VejAzdFBwVWhCaXJqcFVxNGlKL2VjTmRHZ0dzTzZqUXF0QldsMFV4R0xNTjJ0NnRab1pjeUNZVTZEbVNIL1Bsa2V5VGJGeGJac1lrblN4WXJPcER1MWtoZU9XOHQ0OVhkY1AzQ25HbkZpb3BUODY2dkFVODJ0eEUzc2N3RU5oQ2pFeHlYTExXMUtaMFZMV1o5RHVMK0c5bDAwQnZ6TDl0UFA0Z252cmlnRnBjc0dEMC94eWtmQksrUXMrdE51b3dudzRBQU83SUlld29CVXh6L0tLbVMvV0Z4RzQ1YmQzZzEybkRsZXY4eEdGSVF5K1hpNFFRanIrVU04NE1rRkRLa3pXUmc2aTZUYXFmTk9waUowWitGUnU1N001dGE5eXBEcE03Y1dUVnA4eTVEeDUzSWg3dG9XRjJDbXVKckRKczd4K2RsUDNHbDk5MDlFU0RrNlJnaGxWUkdVeGl6RElyNHphdWI5cTVQdDZuV0t5VXVmdDFtZEJZNnEzVlZoUE96OXdGS1dmek4rMndKd1B1SlN0bWl2QTI2MzZYV013VFl4REJIYWprVUVVY1FrNDd4c2UydThZWm9vaDY0eS9iN3dPZGV2RFVqbVkwcXYxZVdJOVhnYVFPdHM3ZGRKa25VeG9yanRnakFUNHMwVTlKYnR0U0ZJTFFlLzFZdDNxVnZZQVZucExBYW5DQ1ZWYks4OFVuMitmdE1YVGUvVTJRT2pyRHNLWDRyT1l6RE9PQXJTb3hLVmJEVmxoOHgwd2F3Z0lXR1RsU1BDbExGN25oM24vOUZ1THpGdUxWay8zdFBsalB2bCtxeGpMOEp0UEpQUmgrakMrZ0twNUdSdWVOMzJhRklXRXBta2sxbll2aW0wbVQzQ1ExRDVtUHowNUZueUQ1a3Bzb0dYdjkrQU5FbDZZWGFSUGdiYW04TDh6VW9ySElaeVBnb2lUUFZhQmpqR2xQS2ZFditWQ2ZFeElXbGZ3aWNSZ2ZwM3VscUQwZlFNTkdqL2syRGxyZUFWZ3pFRTl4TmNjMVdzVCt3dzYxNytPa3k0MDFDMCtNUHd3TWduclVtY2JxcnBlYkY3VTRST2MyWkFtbkZqVWI2M0IvUnRuQ2Y5VFU4WXBqNVg5dTlsajcvWlc2SjkveWJVMkhmeSsxd3QyOXJOMEZja0VJREorKzJpb0dheHlGc0hEWTdWZTVEajlEMTh5Zmo4L1NXYS84c3gwbVJMMnlaRHZ4VDI2elo0cG0vTUFzcmJLdktDajBYYkRFRDRiNmcydzd1Zzl2QW9udjc5ZXhIdUFZRHlEMU5mcytDaXlpNWMwRVgzcnEreE1VckpGem5hc0NpelRCcDA4U0svMGtsd25aVDZsaDhKVmZmYWpRdDR0MUlTc0pLaG5jWjlrVzc0S2x1SVRERXNXbHRUdGNlTVVxV3NxNUM4amFERUFOZlRkWXBxWlZKdlZNdDBNNmVzNzRDdkQwWFBKQ0E1SG82WlVkeFJVVGF2RzNPc0lncFNidEZZN2NlVEtVNWVqNlgyQ1gyRlNXM1RCY2FRTkVsMFhnQ0RVMUtvWFdROEoyeTdKcGxLa2crWjhhTUx1b3p0K2NoZDBEMkZNY2IwdWtFY3NPcjhHRzRxaGJYV01CQ0FET1dNSHpzNHFpRzhUWE52Y3FJbmtocXZvc0pjZm9sb2FlSTdPR1RiOThoN3lRQWFCNlVwUE94YWpJTTRLZGtNZUF3S3dzTDNxNE16MDNwWGk1czRiSE9GOGlRVXhwZ2ErUFYzN1h0R05ja2VyN0RUMWZVODlGR3lZa3N1eGlhTG9pZUhTS01hRDhXVEFuUmFxWjVDQ3VuM0l0dnhQY2UrZExMWUp4Rkp0WHVoYU5tY2ducEY1VmxVRUhkUXRTRVBicFlJb3EwQzBETlF2aFRHRXpoV0gycEQ1VWlZR2NGSnFMYWRrK2FIbk54czlwZWlnWFkwSEVGUU9aODNuZ3g5Y2lzdUxwUFhyNVNhd0c5TE1OL1BrSFZRdDUwdHIvaWI3aVl3VEFyY3BBV1hPTmF2S2ZueUg2QWg1T2lRa0NKeVJyaFIvWXFTYW9rcDVITnVZb3FBeXE2aCtQeHhzYmxsZUx5ZVZTdE1WSEJxb1NPbkFSS0g2c2hSMERBbmIvTWpsRTVLTi9LbEI0eXR3bmtTMkVsOExRUEhKZythejBwTVJ6ZlY2WXdnUHdSejlGRzFTRWRTZHUwQTJxSUdUUm9keXJiVk8wNFBPM0YvZjBuTmxaV3QwMFQzSkJtVDZha0VUMWxZWVduUnZlZGlxdFl3RWFaajc0WXpISUtjM1RiUG1ETUQvdXRpR1BuUkxLOFVaNllDVmkwL216d0V5QmhNQjBOb3VjUjAxYWNnOENLa0pGNVFWTFpnVEp1ci84QmhIYTBWckZEc3NndDUzc0FJdVc4RHJhR0VySkcxN3BpRFc2YzBwRVBYd2VZWDVWcVUyY2xsQStRdGNUU1I2RVorek9SV2FUTjJoTXh6SjlMR1hnb3pKUldlNkxGazRrelA1Q3pmbkZBNkJ4ZkRlZ3Y1MzRoU0d0OG1WQ0Z5Q3kzOW5KQ3hGamtmTy9kd3BsL1R6SnpBdkhhVHFJUTFCNVFaREFNV09qMTFtRUNkS1FqcCtNdEtSU0p1amtmRnh0MXVqUXdzVTZBWTh4YmY4V3JtcFJTQk5UWW1RZERBNGQrbTZGRDYvNzBQcSt3eWNaNXg5Sm9McE0zaGRvcjBsa1QzQmJhZE5VblVGMGtwNUhFMFh4L2h1Q1l6SnBrU0trcW1FbHpZdWZyUlRLQ0szWUhDamZhZW94Uk5PcnhtUXdJb2hLUzJmc3ZXMjFYOGc5eWo1RHFlRHhrMjhocFQ4MzQ1S3VNcHNTa3V5aU1pSnhSaXJKMU1jNVJkUnpBS1dzZkxLOTNjaHRyekI5OHB2a09lS2luclNvM3BWblNoRDBoVTVmK1BNcDV2dTRTMEU5Z1VEbDEwbEhITVlkQjhjSnlvQS9qTUFwMG9oam1mVW93WkQ2MERmei9SODlaMzlaTFdEKy9hc0t0VHBnOWNhVHJTbjdsbUlyMDBMZ2VMNUl4MmllMGtzd1loSld4Z2tMSG5BT2IwSHNaQUxEQ1BIYnVIZzVXUXJFbG4vRFMyTmczeko0ekVZdVMySUpaMFAwNlI5VmlqeVQ5Qmgxbysxb0d3Q0hyQ0QzOWo0eUJZZlhteE9WTk5tS3laZmp5N3JiTnJKd0xTbW14d1dEN291NnhaZDV6Q1RlSXI5aXExUVBmVDR3OW5vMWJObVBuM0dNU0RFQk9aRUtaclorc1hodVk5ZFYwanRRMWVVcHhoY0p0ZnpBc29CSHVncWhPNkxuWGNoZG9FeW13Y0hVQnhJV0tzdlBOMDV2ZVdsM3Z0ZVJTOVd3Mlp5NGMzeThZUXVkVDhiR1I4VStsck8xdkVyektuYURUL2pNbWRuRis0a1prZTh6Sy8welorOHdSSmhNNXhjS250dVFaSW4xczdEOHU3ZjlyZlFzTUY1K2ZSc2RsYmR6WXNjL2liY3hsUGRvU1lkWGtyTy9SWk4rUUVNSUJWc01tZEFtbDRpdXp4Q3dkL2F6QnVzM2IyMFVwUi91UlMwUW5aLzQ1N2NsZUV4a2FWa1g5aTFKOWl4WFVraEFWRGJuNk9hOExHSkFvQzMya3R1OVZGdEhZbEV6L0xtTmhVTTNVbW5NVzZSS1c0ZFJhTHkzNXhJSU9jb1JmNWdQYjd2amJ6UUcyalVDQVJUcnp0ZVpQanNjbmp5ZGJITWdWMmJpc2FrNDNXcFBuTkhtYk84VEViTmdBUkxXZTVrSG5kbEtCZkwzWDVETS9WVnl2WkJyMUhxZGhVcjVCOXZMMHdyRHd5WExFWUwzR0tXd0NMWFJDa0NGZmFuNUl1TXg1NTY5QzFrTVEyb0ZqaGl1QTlRa2J2dVB5OXlkY0c1elo2UVVkVmcxR3liaFFaNHk3QWhpRGZLZGNnbWlNdWFaR01QUEZKcDUwS3JnanFIQVhLSGl5QVgzZUVDS004TkNIQ0tyKzdLa1liMHdMWDNUczc2Q2I4bWkwN2F3Nkc0Z293UEdIaUVCV2lvaFlxa1VnRWM4dkN4VDFhMmFaZHc2cXIrTGs0dnJ6OE9XOE1OcDJuZ21pQWVqVkdST0FIN1g3cWl3UFlJVmw2cXJnc0p0MnQ0MVJnS3A2V0YxWFp6eDZlcTdhUTQ1c3FsQzZ5TWhUZWtQREhMS1d1cUxiUzczMGZCQ1hnVGRsNmxPckUxN204VEhzaldxS3NuNzR0S2o3NVpWSHdWMUg1NUJWaCttWDZuRTgzV3d1VDg5S3djemsyYVNXcHNDNHdnNDlYVlVaR09BQ0RKN1FUelpXaUJYSDBlRnZ2aVIrUUxMRHZJU2NjS0t6MXA0dGtnamJ2YnNiVXc3MlV4Ymc0b2lwdXFhUHZXR25oQ1gwa21lR0ZtdjNycWtQaXptTno2WTVWK1psblp5ZFBQWWtPYlFQZkZEVll2WUM2SVRhNS9FWStBbzBscEV0STQ2ZEk0ZWdRRWNiTWtwZ0daeFRLSURLZ2p1d2lqL3RPNnNGbnZtUUFhRmZuNGhkZXZTcWpwOTN5c3d3VVdoekZxSUtoZ04zWktZUFZrZHVZWkJ0cmdOQlpvdjJvV2J5UFF3aHVjcWRPTDBPOG5WRlN3Z3ArYWFSdjlQL1d1cXoxQUtHQ09HSTgxMWhiWHFpbmJ0M1R5eVd2QlQzTGNmZUtvMnN3Tjh6UVViUFFTa09UYkJDb3FxWTZoZXVEVk9tQ1pBSDBMU1VSeXVSUjUwTDZmZTVCMTgwdS9mRm9MNzhIMnNYUk55UFo0cnE1L0RJK1BrTUdKNEhkM2tLdGVKRzd5NjFJZmZuZnN4UlZFSituc0ZCY3RuUHNqckdaRmdIZHkzU0RxMWcxbmNOWXQzcHBaLzJsNnl3WElTT0gzRVJrMU5LcnZTd2FWV096Tk1BQlB4SVZLR25yeVFIY1AyQXRKNkJIb25xWDB6eiswTmxPdTMreUFSajdrQzFURjd4TkpHMHlzNCtVMTFDK0ZweXJkVjg2cHJ4blEwQnMxU01Oc3lnMmhjcDVYZkl6RzNRRmxmalhHQzY2UDUydk5oMm9aRFhQNU5oVEw2QW1IUjIyR2dhbjNLYVl5RTE0L3NPU04vUVdjbjRuN0krWUl5TkJTVitoTHh0VTdBZmxLTVhGa3ErcW5BNVRuUHkyVE11eWZia3kycEdsZDNjUzJONDNKUVZRSExSMjNwTWRTZmo4NTQyNFdLcmlOWW1LU3g5Y3gwS1dvWkZzTGZ5elpLMGZmU0h4MDNlUkU4eUVzZVFGTGRGWWxFdmZ1dXR1clpZR2J2YlhEVWdqRmFXQm5aSEI3NHVKRERySFVpNEZFRkEzeWM3VEFOeVZub2Qvd2prNWdIcWExc00rQjVzNnRJem5sUzlxb3VYMmlxMUZNakpWdlp1Y1JnZjVvZ2ZOUlpZREQwS2IzNmJzd3VrTzYrVzUrYXIvdFFUSjAwdzNDdU1DTmwxUnQ2b0RqdkNaejJRakR3NVFvMHZBNnVRSlR0TnVKNkhVRm5ubjcvRVZqNm5na3lJQk9Eb0hEbXVuWnlDd1BCNFBrWkFUUDFqWXVRanRBcnJVcWc4dmxuOVh2TTlVM3RoSG82UE02UlpPSFVSMG5iSGNQQUtJaXArMmN6K0VOOUJXTzBqbGJuK2NsbkJBdDlZRXh3cXN4NmYzeWppVmoxU2VITE1XbUNKOXpVL2FEOVc5alZRTEZ3c2ZISXphQ0s0Vy9FSnd6Rll3REVjcHh1RjBpSEpsUUNubXgrTHdvY1BrWjdteHorelYySlJ5QnU4VDc3aU1nNGJDUWw5T0U2aTg5SktRMlMyNWxiNVNyT3FibkFTTWhDaHphc1JiRkN1cnBUbXlSWUN1TVpTSGZScnpHd1BkTnpYTDAvdE5VNmRPTXRqQm1zR3JIQ2w0L0xwN0VrV09zeDUyQ0hkRWgwRll4c3NDOTNQdGJZRVRZR3EzeWlZd0hPTi9DMEtpTkNHR1pqbENVb0lXSURLbzBLVlFWZEhZTmduMC9LYmdJcmgxaURGRUFwQmdZODNTRVZDZGtGK3JPcGYwSE5GTmtxa0NLb0Erb1plSWxaeUkvd0Q2dldIbXlUbW45Z3ZZK0V1UTNEUkJ6MU8vaWZGNVQ4SkpiVlE1bm5RNENFMDNaeUJ0QjRMcU5JRzlDT3gremN3Mm1IbTk1T1M4RGlJUFg0ODZ0UnUvaG5KRHVUemxaRGUycjdXZ0xNbTFQTHFRbzlSa21CdFFiaWY1QlpvY2JIS3VVVlRyK0ZTSTZpTndBTTVzNjdGbHNPQ3Vmd3BuMWxRa1Z1YThjRk9obnFPZktqYThNd1FHeTROTDBGMUNTWS8yTUFPMk1DSmF4YnpMc2h5TmtXY3Z2YlhWSVp6OCtabncxdCtKc0Q4YWlFWitmMS91Y3pNemt0VGo1OTY3cGdkczd6VUkxSTYvaXQwVVRzT0lnNnNGM3lINUNQSjRnZ0RpQzM0dDJxQUZZQWdRVExBMzhHUnpQOEV0SEcxSS9pOXc1MVc5TXU2NlNMbHV4M0t5M0tYMFJzQW5NVkdITEhpeDZGYnlRajBDVWdYcWpvYnVFUUh6UzJlYnN5OVNWUkorQVJxQUFSVnM3YmZXYjcvQnV3cEtJYm8wQ2V0SXJiYTlhV1h6dUhpeGRSQUlzM0xXSVd3SUtZSWcrcS9OMHdRMXpBaUxRZjJST1VYQnNBWE15ZHJpc3RTdlhHaUgxdWVTODB0dHFkcGlMYyswaFN0L0ZNalNpbStaM3VFZG9aL2VIbXplTGxzVk0vUzZqRncxMU5PSlptZzQvSHpPclRPVjE5NlBMK1h0YWNCNkhYb1c0T1NBaW83REZyMzVuSnNrWDBrQVB2WG1idTRTSVc0THBsR2NkdXhhTlJGMUx6ZHljcTVRaTR6a2RjTGp0UjhVTXZDK01xRGY0ZjloWUFhTXZ5ZExqRytwU2o2VEg1SGlIeDZpTkNYdUliWjVrTmRDSTN6OW1kYTNrNmJIRW80amJtR05aZHQzdVMyci9jRUc3NWlFRHQ5d2NxOHFHdmQxY3dnaWhtZk9DbEdQSW5FNWdtS3VkamtjV1h5ZFhxd0ROd3I1MVUxSkYyV01TVExESHplZ0Qwbm93TlR0V1dpTWZiaG1RVDFiL2lMVWcvZGc4ZTBJZnRMdEF6OTBEbzNFUFlYYkJsUFl4aWZjSE43dzhodUQwaHZ4eGtjNml4Tm1Kajg4RlpMdXY0SFNLMHprVTloNDlvbjd2aktudmJMdk1pa082Uk1xMjJkbjdadnN2SWprOFozZU01OU1BQ3hZdDk5RWRCL0p5eVdobVRVMitxRUN3SS9haU9Jc0pqbEdpNUdCMnVPNDN0MDloY3pLSWVqaFhUbit2UmJxUXI5NmxLeWZ1b1BQZm9Ub1UwSmZsek9sZnN1SW5VZ0t3cHNxdThVbTNRdUllZVd3OTlKNDgxN3dUTEcyVzIxcmh4MWlSRURTd1VnVVUyU1lGSy9KM05PaHp0SFc0bEFvREhCejJKU2hoMW51QjVrQ3hFUVpLYUhJSzZ6VHRhRFllRFFyRVczYVk0UjBkR2ZzRlppVGY5VDlPemtaR1kvSCs2NXp6S1c3ZzRadGVJVkFGT1Q4bnZyWTNuNVJTRHBZazZob3FJUWJoZEhwTVNzTXBxb3hVMVh5STd3OVgzSmZkTUtwdkdSU1JmNnphbkNuL0NUNXRxZy8xVVA0Z01FM1IrMG1VUC9nbGdqdXB2ZzdnRmRHbUtVdUZKK3Q0VkxXZ3BFWVZnNUlFUTNrNVhDRlRvSVRRYmJQaVVGL3p2bDZrK1Buby9XMktqK1Q2czJGRDhuY0I0THlXKzJGeGhuMnpmaUxIVjFTNmxaZFhaS0tPaWpncHdNQWh5Q0RPVU1jNGFZRm5oOHNjYTdKbjVKVkQwTXNlS3lRcEJwTWh5VkpzSWZrSWNUVXBCd21rakxMbm1zZlUrcy8xdFExZm1YNHlUeHpyeGZYUFZZNnJJelkzWWRhMDFGVzBqNk5GMmZneVhZQ29WUUxlUHZUMUJPVStiVmpBUldmNlZEYTdGaVVWZGs2ZDdFajJ1dTIyMlNVc3V3NE4xSnc4cU9VeWVKaVBmUmx3Q2hEeDJQOGViemhtUkZaREJwa3V3alRHMHN2eXpKdjFxbGtKWWxoajN2cEEyb1BaMW1NZVdHeVBuRnU2dWhkRTBLQjNqdEE1eHJjOUNrc3kzeUJmVFFuTVNLVmkxaEZUM1o3Y1dhWGtVNTc2elRNNUJXVmNJaGJxalBVMU54R0crSzVXNm9Ea0VSMHRsMU4yRFl1UmxqUjA1c1RVYVdjZGpKTUdjaFZwRUN5UE55VVR1dDJ6cGtlRHk5NENOVHFhczBOUXkyaDBvNzVPcHNyWmpGTXBnUlczZ09vKy9QdWg1M2Jacm1rVjlWQmpaK0NNZVlXK0p3NGdXQWJYaU9hOEVSRHBSRnZWMTRMU1JCUXg1bCtEVXJBTWE5Q1FKV3dnWC9RbGNHZ2d2aVBDRjFCa01ESG1lbGU1NklWWlZaYzdYcURRTDZoU0JUTE5WTG5lWmxjcmlhb2lDWDVBTjBhS21Xbkh4bXJtbjh5TU9yaHhVSUgvMmZmVzUxczlzbk4yaHRwT1FlY3BNSnAvYWhJMVNHdGlMUEZYMnhpcVBiWVhTdHNpZHpGZVUrUTZmaCtIaWo1YklLRGxYbklKa0lQTW1pQWVkL3N3cXZCL1cwQ0lsczdNV2F4aDMrTnVwcURNSVp2V3BobUs4cHlucHlKNHB4VS8xRUxtOGtLUVFGMXF6VWJ2MWV1K292aUV1VjBQM0R3RCs2YVJrTERtOXJqSEFqaDVWbndVM0t0TmN4MVVSd1B1b2ZsQ2M5RmtVaWFwdHFXUyt1MGsrZDN6MEdlcWpOYUZCdjArMUVxaDEyU2lkYzhKOFY1ek5qZThHTjFLZUFGWm5udmdXdFRUSndmVVpUMWNPVWs2eGEwRzAxZGlQRURFK2RBZ3NDcUFZOVRUMFNnc0U3Wk02ZSs5Z1JidENSY2ozRW5WODhNVVRBSnR0QmFpQk5mK1MxVGlDcEsxMnkwY0VibVB5bDZzSEh5OFJKUDlXUlBpc2YvaTlqcXRXd09HeGdwaGFUN1UrTFJiaWR6ZC9qOGRJcjE1MkFtZGNiKy85VER5Q0YvMGExTmdNOVRvbVBVam5ISk54ZStDYU1mbG5NNjJ6ZEUvWHhvaGZ0UWp5Y09WcG9Hd3RNYzY1ZUJYU1VkRVN2a2VoaVBZbDhXODdYRFlVeit4Si9jS3ViVEFrZXZoODZaRGNtOHJVbkNRTVQ5UHgvRnZYRE9LUUhRc0YzWlRaZ0FGVEtzVWJya2tsNXAwZXFRSXRoSWFUdzc4cXd1RlYvRXlZRGQ3UTRZQVhnR0N4MWxMSlVSL0IyY3UrcGN5OVZJQTRRaERWdHF1ZzZJb1A0dDk1V05PZHg0ZkhIZUJ2OU1WRGQrVWM1QkpEWTB0NU1QdEQ2U1N6RGcxeEkrdm1zQVdlZS9ucU44M1JGZDVVOVVJTHMwMitXL2ZuRkJnWkxPUGJWc0JqUXI4MVdtZEpvdjBoTE1jM1NxMlNZOHRNdzhrZ0xHcXU2bmRGVTM3SytIVzNETTVuNmtvRDk1dlp2QVJJYmVyajZFNUllL3hUQTk0c1JqSVFLQWRyeUdpNDZnV244YS91UUgyN2l1YzRCMEdOb1BEWXJvTjVjcUJJWG0wVVNFNms0R1BpU0hMeG50ZHFDVFY5Z01oQi83WnNTeTZ1UGJsQWNnS2VwK0l4bDIvY2RNUzdzeVVkOURHSEtSaFpRMkkyQVpWaVFoeFZSa1YxSUZKK3pvdExYL1NaVDMyOGhVa3J6RUxvNlpLOGlRTUFBWTBCVm9ES0o3NGFoSTFXRFVVUXUvWVF0d3BsTXdadmlwQTZEZlM2S3YwQS9CZGVMS0xDSTduRXd3RFVlRXNUSnpHSzlOa2xUZGpUd1FqR3lSdzBRQXN3SmhSbW0vYVVWOFJYTDltczROWU5seDd3ZmgrZks2Z09OY0FZdXBtQzZFRVhrd2FnbkZaSGJkeDBtclRUNzFyaXFHZHBhODMvK24vZ1JlU3puWTJVL1c3a2FXN2RXQTBtRm9pdVBBZzFDUVl1Tyt0WkR1YXE0RHRyQUgyclQ0ZG1YSHZYTnVvdTNMV1RiMW9rcXI0VG0wZWJCTGplQkx6cXNlY3F5RjZ1VmJJVzJSZEJkeGRrei9WTnUvTHFDM3NzS0FHU0RGVjB6dnVjVW5DbE80VmdXS1RHZk4wc2RaWmsyeDVyS2pVM2NYZ2NCMFp5UVBKVTFyWitxcDB2NWpUYTRmWDcySUNuamRhWDVPVFBxek9aYzVFdHBsN1c1N2lCVDR0Ry9FOTQ1aFJjS1pSMlBjd1Z3ZzQyK2o0R1pjcEVzT1VRRTkyeVJVTjBuTmg5NWRzdlI3UXdRWWpFY0F3TmRBTjljdFYwbUlwOG01b3E5a3J4aGJsYmtiaU5ZT0Q2M1dQb1ZpMEMzU3NncTE0VENRRVRTci9CTmJkcFdTZjhzSEcyOXcxcTdyb041aG1JVEEydXpKZVR0d0d0N1BDUXVtbVFlSEVjVmtjR0JQbGN1WlRxWEZsNFdKMlRWQ1FVVnEwWFFydWdUakk2MDhtN1Bhd2d1MXZLS1pEQkRtZnlnMDM2OFNvaGZCUEVnNnBBcHZnZDhXenF4Vy9tZ0xNVmRlNmIxbTRaYXBnSFI4TEVQeVV1MytYWU44dVdHam5XVThXa2N4WFIrYjdCTWxBalowUjF2dXo5d3VnWlNyRmtSdDNETUtqZ2JtcjJxMXB2YkRwQ0tHbW5wQ2ZkWThkb01Hd3hYN0dkU0lyWlNRMGt0eFlFaWE1Q1lxbnBsSzlmaXcwM1Jld0s3MUFqT1F5KzdDdkhNWWFGVjFlYlJyRTVReVlxVG5iZTgvS0RLUjJWVGI5aDY0RFJQQXBuM3hsWGRHVXlYQU1NdFVweW12cWUyS3lrTEpmd2NHcllXMVdudFdXMGVSQ2hOckhlR1B4UnJ1VmVsak4vMFVZUWNvbHFKd0p4emJuMWdMZW5MVWZMVVhpSVM1dElCalpqNGNqMlFDY09ZRkkwNlU1NkNlWGlLVDZuazZ2ZTZBR1Y1Yk1SSEJORURjZm83aG1ZMEphZ2tqMmxsTU1Wb3djU28zV3JzMmk4RTJGL3VmL1RQVnRiK3RnN3hEcHJEUFVWbWJkZE5vY2w1VU5aYlRZMFJ4dzRtbVlJSDg2QWJzUHhMdkFUNVVIS3FtVzBvbFBYckNhQmF6MHNYSEdXZzJmWVpTUmlqcFY5VDhLejl2OUtqVUtQSXdTSHZlaHpYb00xeU40am0ya2RudVV3Nyt2OC9VU2FkRko3UXdkK3JvNTQ0ejNNRWJ4OHVLaGEvL0p3NDNWbzdKWm9GNUVBSmNNYmFWczVvWlNaajVpbUdTTld6S1N1MmtIOVhyZzFOVENaMEx1VjMzTU12SEQrYWYyanlncVltMnhkUEJuZ3NQeUtod21DN1Rab1Q3ZXR0eDh5L1RvcjNZWHFZNFBQSnBMZ0Y2TXNEVUFjc01zbXhYZU94Y0FqcitEVTcveU9UQ2ZLekNMN0p6VnZuTmFycmh5MUpWWkt4NVFRUlhLWndIWTVlOXNVQmlRdTBnU1pBNmcyR29DaVV4Nm0vTkN1RUsyb204WDk1UnBxeUZmYWxPQm5wK2h2dTRPbGtxZXdrV2l0RGR4OXRTOWxLRDdvQkN4T0xpck5YVDRuT3RvZUFYN2RnYkE0SmtzdnRGM01pTE9SOVFNQXM4ZEdoQU4rcFJWOTZYR1hCUk8yUTZLb1VwTVJ2QVF1WndVbEVzVTBpT3BtVXdQTnErS0ZvMEVsc2t4NXYzalE0aXV0c2tMb2JUVjVFaGFCUkxUVkxFMHBERDdaUlB3T2JxUEFjaDNHMGErSGhlbWNhcW82Z0kvYm90UWU5S1BoaVpORXBIM2NTTHFkZ0hwLzlTWU4zWERVeWJEWXN0OS9SV01OL1BkMm1QN05CNUdTS2hRZzJtdFl5SHRETmcxMUpwYy9PZ2dHNWdRdFg2N3JTQlNtM2pKYnREUnpiaTQ0S0pQM1d2eFJVcElFVUJCbkRqZTRHbnR3UGRCOTFGSC9jbm9CSkZUVnBOSHFyU0o3WkFUZS9PY05ka0Q4T2pQTjhsNS9KakFqeWkwNWRVamVnNHVhZDU2blROM1JwYWRNT3NhaWprQStxalRHbE9Wa1N4RWtpblRyMnhNOE1ycGJRN2xLdzJKbmkwR3hzck50MXY4TkpBamUzYnZCOHFyWW1lQVc2VUpCUFZnN3RFNGdwTk1nTnFYTnBaR0FtTVpKQkNMTS9rVGNJZGN0Zk0xYnVDYzBZcFJUbjROYzNKSWdMcWgrdHlSNE9sSGp1RTZLSmVaOEkrWlJsekxmOFlvM2dldGUxakFOb0tFRU13Z2QyVDF2aldsdEZQOVBlUjNuMW9jM3ZmclNPbks0USsrODJoWWdlMFdMc2xtMGc0eFJUa1liUEFIUHp2R1VwVTd0LzhQOUR2UHk4ZDZwUUJ2d25qeU9oWGE2TVdkUFZpSS8yR2R4d2RodkVJUFoyMFI1UEhmSjE3MmNWUDJ2NDdaOThWVGVGcTNqZmtwc25jWndZbHI4dVlzeEpLdzRZME9UL0pMa1dQTTNFN0kramVBTlp4d2d4RzdoQm9iL2NMVzVHbTZlUEI4dTVJUjNwMEtHUjZKSE4rcDlVSjlNZmtSMnRFaTdodGU2OFk3UE9ieWZjQ2FjVEpENzZWZlh1TEsvWWhVMm5tSVF1SDVNem51YmhRbEhWQm1RZkFTZW1XM2R6b1FkbHdjZURmUnMrSjFkOGJ2ZFlpdUVObEtFYmZpZElHeDBZZjUzUmx3NVRxRVNydzY4b1gyNmxwTzNxQWpheE5sdSt6OEN3QS9mdzFXZ21QZEFsMTdCcndWNzJtbHpieGJxaG4wYWE3MmRMSTMyZXBrcFRHZnRmY0IvT1ZSNE5IMnpHSklud0ZVSnVtQkFsdElxSkV5TEYxL3g3UmQvVGhSOTRCL3U2RWZ5Ym14WXdyZjl1S0ZBOEkvRzlsaUtQeTdZU3Brd3ZjM3NOSjh6YjRZcXdtNUMxSUhIMmhPT2RKRDMrTjdDWUs5MUF1c2lJSXJhcGVPK1JST2NDWVVSbi9iWkZRVEloRDFBRnkzM0FrRnpSejY1aUF1UXdVbmw3WWt1UGlmVkZ3bm9zU0d6NXRLS1B2emFVT24rb3Baek1EUExFZElhNkxuRklOQWRzc0xxKzJvbXJpUHJzejlBUjVueVFoVStORTNzWVUwZW9tUEFpOUs0VnNLUzBvMVB2Ukw2RHl1RlZKOGp5YjNGdjhFUStXbERLZk5vTHMrUUxlelR0ejI5OVljemYxejFiWmdHd1UwbzlyK0tjdGlPLzZZRDFPQXk2b09zS0RaU2tGVHJtU1pWbjQyN2hhQ1VIWUZpZ2FIUEIvUW9aRzBvTU42UW9Za05QTXhNbUhXMU53bEhUUkRNaDRsOC9BS0ErWE5ZVTkvS0tpUmFtQy95V0syNE1YYWZlTmF4OWNVT1M2YXkxNWc2Z0xQVTdNYlVvZ3dyNUxtdU1hcCs4c0c2cmYzV1lFZ1ovR1RLTGZqTER2Q1VHa2d5eDFMbGovUHBwWVprdVc4QkY3R2ZzcWxvZW5LaUZjWjFKY3FnMGdOU2pRQnowUW9UQ2J2YlJyNU9aNVpyVjJxWmVwSExOT2d5d0pScmtCNUJXcWlqN3RBNVJ5QWZtQ05wNUlVelVZbjY1S2dIcUFXbktva2M4RkdvWnh3OFhtOTJzKzBHb2pLRERTVFNaYk1uUHd2OUMyamxMZ0hxdUEyWnR6Z0NNOG1nTTNVY1BHalZFNndaSG5jSTFhcGx1VzFqdWJubEo0dWRiSDhWSXRzUENxWHQ2MURtTVNiR3VLZkxjYTBKUXV6V014V0dHdzNMWllGUXBHZ3F5Q3A0OWxuTFZHcG5rQmJoTGNGbzYrd0Y1ZlVKU1RieWZmTVJCOGxRemlKRGxLUWhuYS93ZmJKU1BENzZMOGFqS1d6NEJhWndiQUV1ZVhmbUFNV2Y0M3E2aGdtZUZaY1dQUk1qckwzbUs0QmlZZTQ3R3k5M21MeWZFZlM5S3ZjSnZTbFV4Ny9MQVY0Mk4rbUI5cW16ZGJwVWRVUWtvZlhwTzMyTjYvM3oyZFQ4bXFsWlZhOVlrMUFhNHpMbElZeklkczU4TFduNy9Ca1RlNG16YXB1TjJ3MWY4SkpvTnhEd0cyVVJxZlVma1ROZklBdHFPRlJUUzZ5UUJPclJMSzVSV3BBRzVkU2R6cHdxVXdjelkzRDhPZ3BTNndDOFFDNVRNVHZzeG9ycGpuZWp2UzIza2dBekxlMDJnN0p5akh6YUIrSjRxZmNVdHB5TWVRY2xadXJocXpobHg1cTNtNXgzMkJDdWNFUlJ4cHNHSEI3OXZnTENUd282aHV1MmcxVW8zWG9kUk5Fd1p0RjhmazNOeGlMWDVkZTVBUkZIMExmckFsRGxJd3AzUmNEMGxkM1hoYU9Id0sxYnp5SWdUZFJVSUxDV3RMbEh6Qnk0K09tRW9wbTVLM0dNeVJFV0RQVmxzNkV6OXllcVhNSS9NVXYxcmJwTWVGalAvSjU3emlJbi9KemlxaEZsM0NNeWJJY2ZTRFdCNG15ellVbDFycGswcjI0b2xEcXpYbUJPZ3BQMUtHcTd3eTJiYlBoZ3Vvd0hnWm0xaUdTbjF6b05NK0h1c04wbmZtaUtla1hHTGMyNmk2bU9tc0Uxa0ttTHNMZjhORnRiRnlIMUx0TythMUVZcE9NaXlDNWZoKzNOd3VYWUh3R3VZZnVJVkFlSEZ5N3hyQUFrRWF4RERXbHU3c3RSclNkMnp2a0o1V0s1NzRNdE1qU1czS2RNd1RSVFFGaEs2dTJpaldpcGx3Si9jU3FOdWZqQ0NuWG1PNDZ3U2t5MmtibnNRU0RGT3d4ZzA3NmR6WWxNTDZUbkN2bGNHcTV6SjMwT0g1VldGYVI1RHFuUUlKck9WbzBvMUh2dHpwdHoxbHlXZlVNbW1FS2pRdnMrajBaa09scDFWL0ZsVEl5NHNucmlhWUFpcis0NFIzSnkwaExoN0tabC80NzRyZVMwNFhuc001VEl6VDEzdUdFWVB1NHN3eVRUNXNRTFpHWC90eitRTkRiRWVXTzNtbTZhSU5vQkw5c3UyWWh3VG8rdFBCTndjMFNqZjJ1MzI0N1FHSzBnL1VhakVKZkZzQjlSTWs1QjhMK1ptOWZKVjJCdjhDbitBWEF2bXZrNXg1R085aVlUcVpqbHZhY1ZUZEdMVFdPMmZ5UW9XK3BST2dybzFzMFB0TGFwazVaS0xub1g2ZjdGMVl2SEI4SUpvNjhUMnRBVXdpaHhiT3crMHh1QlpEUVlkaHdiNzhDQnhEQi9vYnVWME1hY0JEenVFbUVXMVdqMk9vK2J0VkE2cjVKczEzZU03WUVCNHVGZmRiZHMxVk9sWDVkZ0dYcUtCV2dNRlVNdzZCTlNGS2dQY3EvVVdmQksxT3NXcHIzOThubDVwZU9yK0YwZGNZV0w3RXovTUVtckpkS2tsS1VSUVFiakc2bHF2L0l0ajNwU1JoWVpkT05xMmJDSVI0Z0lxU2k2VSsybHEvaHpZazZFMTZGTzI0TmZMY1Y0SUhGcjlscXhoTDRzNlA0eVFCc0JlOCtjRTdUOVRsOTJia0JzN3VNdUZ1dGVtelBBZzR1YnBGVlRCYmlzMEZFM3VRMis5bUJ3M0o4RG5ZYzNtL3FWV2llcmpBM28zcHJ1dFhZTENhQTFSYnJJUjFkMGFtYlVGWGV2ZCtPWUZNV0FQblFPMTB2UGVtMVZHKzFDYytmWWRMWkpmNUY0MnU4U1BOa3NTNnZuMUhyMmhVeFluMThSSFNBUERLcFFZOVk3NUhRT2VxcjVFd0hDQ09JODVneFVlclAwM0hzbndRV0ZUWEt1OUFsdHJNYzNaanJjOFMvaEtrSXVIT2ZDdnBNdTdhQkdpWUpOQkNzaEVONXVxS1FpcGE4WWFzblZML1FrM2NXSGtuN2JYckQ3THQrNFhUa0RMSktzZkxFZzJlbk9JQUJRbGZkMlpMbEVmektvZTdZOHJ2M09Na2duSThlSEJ1SDAvT1B5SEU4ajVBTTJCcUJDZXRPNkdaZ1k4aGg5QmVZWUtZeldoMnh5bkVvMkptTWNlS2hBeTkvTjJoQm5GUDczempKL1RXS2VKMlpBUzdIVTRBY0tzNWtWTDNNODFKMnNSTEVrenRUM3RkK2ZBalhWc0prQWFocGJFb1F6Zks0QTNQWE5xdzRxUUJwQ25ZWWNzVmt0SlpnVXFndmRrUzRVRldwR2dHaGJmUk5QQThJSkNGRVJDMGdvWk5nbHZ0M1JIN1pwSzVrVmgvU3FvQmRoZjlQMjc3cHovRnVxa0lCUDEwNU9aYWxiTHM1cnFyR05zMjRZLy9pYnM4RXRpZ2k2ZXl4amdsZDl6LzBCZTN0Z2RYejQ5TEJKQ1JQNi9semdaSFlrRm9jOFo0a094MnNhUVBjUmRVZjRTZVgzKzBsbTVSVHZSQ2EreVVWZnJpNUZuOGZSR3BualFkNGZGaGlKUGorOTRONVRyc3hEa3liSDJFZ2M2SFMxOGVoc1ZPYW9zNkM1MDJKcEc2YnJmem9lajQvV3k4YXROeTFwRmJSN0lHckRqc3Z4L1JzWWhlUS9NQWNOcEFBeG1qbGppUjFOZmlZWUc4STYvSXJDNXVjT2JISTgvdTdWVjVpMG5Pb2pQRmtNZmhhSjJwVWFOUlQyQ1Y4dHQxelh0anA0a1hmZUFoYTlvYTRnbU1QUEs4T3RsMllQd2tNc1hQaDQvcW9VSFp4dWZjcmQwUHR0dTEwU3NSVGpOMVQ4M1FNS0VoMXNoOGJybWFzY1lkcTFRbTBSaVVSK29PVkxxb3F0RkxnbmNNQks1djVGaktpWkoxMmhlT1BPcm9QWTg2MGk3UG9lTXRMRlljWmk4OTBYU3A0c0J3OWdHRUVINFRpWXJFMEdHL09JZm4wdXN0cUdYdFhtWXFZZzJ5UDg0eElJKzNRdVJKNUhXQ3V5UUl6blR6T3FFTXFPTmJSYjFNQWdPY3dIOWtwVjdSelo1UGxCZURnM1F5RitUTjIrM2F1bUo1MUZsOU1zQkhxaDNaUWlJVlJyYnlXMDlUaDcvRFJDSzlua2RaZzIwVnJleVZQZDRicDVQZWpSQnhVdEpNZzE3WXNKK3RsMnhpWXczL1dWNGNhbkxESnZMakF3bUVOWE9RTktwczNUUzZlQVhVaGtBNTdEanhtWG9CRFBsdER3VE56TkhnV0FET0NXeGpZaDMwNC9wWDFOMThJLzdSVVhtN2l1bHR1RFZCam81UHBsUmlOOGNOTFFkL0RkeDFyejZWOVRtYkZIRmhJR3hpRC9FNFNaSTlOaW9Ka2VGSmFaK3VZTkM3Uk10UWgxN290QlhzUWJsQThwYW01T1BzNWhmcUl5UFhEcUNTSGdycHhwRnlPQUNxRHVmTlR5cFhYUVFlVFhzTTQ0cGJ0Q21WTklTVk15L1o4S2F3RkZ6d0d0dDdUZDhNMTZsbkVOei9SNEkwTXd4dVdzZk1hSm41RVd4aTNZTXhYYTY2VEJPMENlNzVVWEcwbjBoSTdxQUhJUXV6S1ZnTnp3WjVMQ21Yb2pQVkNPaDVBb3VBQkwwR0l0Q2lmVnI0dVRRa0JqS2JqeG03YWZLdjhOWTZua1dpZ2hKekRHQmpobU9xSjJHNkw3UkpKa3FuSHRGaVZ3Ni8wNXB6aFE4SVQ4aEdJMVN1UDZtdWVlVVNwandJTXd3QWpzRFhSWlhhRjBDRWlqS0tRYzgvSHFpa1V3SysyQlpIb1djUGd6UnorN2M4UjVxSFR4UW1ZRlN0b3Q0U3NDYktBTjZvMDN0UU5teXJCNG8xSjZQdjRsN0htblNwLzUxaWNPUHZlbVVyRC8wdDRsbFBFemNRdWZxeDlWWkpHM25pcDRoV3JZdmE5SFpURVhEeDlMUE9QZVhzVy94MnY2aFJLdlF6SHpZZkpvMTU5TUZvN3VLZVdKdWZsZm5OclNqYUxlZlllZm1QSkk1c3VvMFh0S0U2VlhIQVczSjRpVVAzTTBJZ2RJcm4wNGhaUnhYMGswZjVHTE51T3JJdDhaU3JKUFlyWGs3RlluT3A2UXp1U1Z3WWZ4OHZVSVV2cHRoaWZXcTFuY0FhNkpCZVlaQ2dqMFhWd3VXU3lJUktkTVR4WVcrOUk3bmhheTRaTjJiSExpR3dHYWZjeC9yazNaTE9uL09QM05tak1Wbld5RlZUa1BXNUJTVk1Ub2RYTWxCRUkrSDcwNnAxLzVvM2RQODJYRGFOa3MvSElQV3pCVHZFUURka3FGTEovUkZpNEpiWmF2c2lLdnpaVVdVYUVyVHJhaHFhTm1NRVRwNmxRaUVMQmVhbzFzN2ZKWUhSNmNlMWNIQVYyNFF3OXY3L09qOTBQSWE1amJqajRhVHB2eWgrK2RYeUJ1aUEwaU1WVjU4RUI4TFhhMXpiKzZzVUtSUUYyYnV2ektZeUNnWHE3cE9TeUtyN0dXZWNqbWhsdjZyZUh3SXhuTzcvc0pGa3FCMU14UHh4bDQ4bkFYbEtsbXNET0Z5d0R0VElxdnlMa1FnREZhS0kxektrSkVnMTlvOEdoRStqZVJFc1BsM1RkbEhNTTI4NC9tYVlsaS91NE1xK0YwUE5KUXdQMTZBQXpBRU5vdUdOSEg4amt1cTZ6NjJkSTNQWVlNYzJrSExnYTJ2SkFnK1l3bWVMWU5WYy96UThZdlVGZUNZK0JaYWs1VVUwNnpiTXpNQ25TNE9CaE1CWFFINWUxeFJFbDVhbHB5c2lxM1A3Zlg2N0Q2ZmFDd21PVVRMM2lqYkVOY3pFbzFod1NvL1dXTjFMZVV2aXZsaGx5c3EwSVU2SSt6OGI1bUNXWmpKeVN0Tkx5NE43OFZBSGVyWjFJRmJmajErMW00akQ1dTFGYUN1a3BvWXBJa3VQWmExVjQrdFVFVTVQRjlPU1hLUVZUT3piZHQ0R3BrU2txS3dRTGhQZjV5RlVuY2V3RVRoa2s1NUROdUJXVHoxcW4yK2lZdmdibzB3RTZxYzRCT00xby9ra3Yyc0VUZWtCRlYwVWlpV1dGYzkwcGVhVE1vaWoxOEQyZ25wcThDdnlvSStKYk1RbnJicEhyWjdCQlVhVFNhekZub2g4Y3dsWHpOcU5EcDJvQ2ZpYmNMSlpKZllsWFNIcDdscXV1cDh6WHpialJaNDJQclBwMm9yM0JqL1JnLzVKUW9IRXJPdVE1VGtGYkxqaHFBeGF0N25aNXhUcUdINzFNSDNlUm9OcTYxOWpMSEhEZ2kvOHRXRi91NGVLcXV0a0dCbGRFeTN5ekNUbmE5YTlrb1ZvL3NaTHNvYmlYcmxTcjNTNjNCWGRVZ0RyU0pPSjZvUTVoT2RCbmRSZFZGck1WRzBmUkhTM0xSdm16MWJVVk1wQ0ZJMFg5eDdBaXRibnFiT24zbDZWcyt2b2plVmdZZGU0cGxoZEJMOWZyeDBpeW9vdFUvcHNnZ0JMeGEwS1ZTc0lIS1MvTE9EM3J6MFN3L2FxSjhxVStCdmlwcUF5VFJXVWttcWNtTFdpZEY4WVYveVBEYWVoWUwvT1JtNllXa1Q4OThWTTI5N283aDdjWG8vcjlxTEVQRUt1Zy9GMXpka2VVNWlDaVk5RmJJSmtMUEhNVCtMbVp0eHh0MCtMTE5SdStIdkt4TjVNVXUxdkVpZTJTbVJkdlEwYjMvUlVSNGdqWjRHdWVvUlJucUZ6VVBvRDBJSDhyaVMvTWs3cVdtSDlFNGE3VnAxUVdPekY5WFA0bGNuYmV6TkxpNU5aeUQ1MEVETm8vd0RqRHRFL2IvZFY5WG9wWTZleUpaYVB1R0xuUy9KT3dXWDh1N2hiWW9Kb1FJRVZnNUZoZ2o1QVdBK0NGN1ZJMmFCLzNubEVQVXBzRGdLVUt4dkVWOEFpSjFoazF3S2crdWRpSXlueVRXYUV3eWp5ZWIyczI2bUtINGZxeVpiT0ZWRVNmU1ppemVlREdBSHFaUk9kRlBDSFhLVlVOWmtvMTROQUd2N3VpU1Vsd0s1SURURkxYSTN4N3NUSkJuMnRDNWoxYUloNzhtR3ArUFNzcFpBMmlhalZuRUhvaWkrU2JJMVdIYTliTzlIeU9TcjB3QjZUazN6VFZaM0RkK3hqdU1pVVFaR3ZLQlpMQWVFeWtpd3NUTm1oUUI5cmIzcHdkOXh1ajR3bmh6VE94QW9wUUhrc3FsRGtkWUtFYmluVnFMZ0JRekRNMU1SUkJWdk80Q3pPeVAxOXVHT0hNUGdpWXYvQStjUlNpcHZzeG84WThVS3lIVG44WnFSb1JVVWw5clZvMTVoVWVBeXFpd2N0aXp6ZEpzYkdoNUpuZHgzMlpJbURWQjNUR0lsYTkyS0hLK01WdjhJNElHS3BvNWtLRWhkMDNrUkNqRU05czE5VGZ5Ui9NZGxBYnZiSkI5MGJEK2g5ZXAxSzA3Ry9yL0tybzB5dytBWEpjMmlSWm5uL29Cd3BvQkdxNDFrODBOMGpJVGZMN1JpQnh3MUU5aHN5bkpZa290MTdjeWtsclM3Z3pXQ3pub2pLajM5TGZvaXppQnRHZ0xzSkk3cEZpS1JHajBQTFBFWDRzWkJKSUFMTHlEdVVHMFlkMi9UUUZpYUNyL0xScVlEelFLYTgvd2wyT0FOWjViMGI4dHIyZnVkRkIwUTEzR3ZHM2t6MkU1c3JPN284OUhuRXJKazcxcDRlSERxYTlFbmcvZHNaSUhwVTRYcnNzOVFXaU81R0JPK1lYc0NYemJWb3hUTVAwSGRJZGVVem9tQnRaSXc4OEtyL0F5Z3VJZnFPWUJ4bmNGcHFFbkpVN0JtNmVpQUp6MnJvc1hvc2lIdGlvc0NZSGltMXRiTzgvT2ZEV2FMeUF2MFhtdGg5cFNRN2I5NlJqRXgwTjlOMGw4L1ZwT01LZzVSd2FFMEpOUTkvdDVOL3lRVVlGZC8xSmlQcG5hMy94RmpPUFdheStPZjRlQ2lMVkY5ZUttYS9uTXdrejdmNG90S1FuV3o0ZFFwY3hRbWJ5cGh4aGUvVXpEL1QzWnY3SGg1YmRpMXZqYmVab1B2VDh0L284b0l2eTBqLzJUdm5HNDd1T0Ztbm9ITEpzK3FOYlJIY3M5My9uLzlCcDAwWC9BVU1oSGZraUx4dktLajBsMEhBaXVCbWozRmxxcVJVSVQ1YzdwL3ZDTGJwaUN6YmUzemFicXo5WCtYclhkWEpCZnZpRFBOWkZ5ZkJNNEdtVWZTT2JIYkYyb2EwaDY3VGRybTZudGtjaVZOTmJKck5uTVZONXo5cmU2NTdyQTdzUFFEbExZTHpkQ2FOSkVWM3VhK0l0R2IxVlF0SkdleVZXaWh1M3hacFZ4QWpURDRLbmtLcDlaU0M5MlNjdVFuQ3dYTTl5VUNkT2R5U3hkR2ZmY2VtMkM0TnduV3U1Q3EyNTJiY0tNOUNUSktaVVhGalVGSk5qWFducEorYkhlcDE3aUJlQkFQSWxaM3Roa0VUMmxia2RoMnFEZDdSYmduOTl2d01CZGozSFdJTVNmTkhiN2hEUThGQVREVWhTak1PZkxBV2lkSXVyQ1cyb2ZJTGlwNTFFcDFRck5YN0h3VUtLbVlYMjZmaHVxWGNnTWNkd2RMaUdXY25YWlE4azRhSlpzQlpPOEhWVHFYTGRIdGZLeGRKVmdIZDVRTmNha05hKzVIVDdNdDhNTFZjZE9xYVhUY3R2dlZVaGNvUVJ4VHVSNFQxU1JadWllSnoyajc0Y29UUDZWQUpINGcwNlk3Q1FHd0ZVK3lHWUd3elA5bVg3Nzd0V2dmcmJ6NEptK0FTMjN3T05pamZCRzV3dUxTdnhvQ2lNTlZuR1ZIWlNTcjdBVHZyYnlVNGRnVGJUaDRsWFQwOTdWM3BFVVF2UkJzaGYzK29TSENXVUlFUHNGV0JBSXNuUXRGT0pZVnhoYkxzZCt4SVFrMm1KckFiS1JvZmpoRDJhcnBOWmRPaERnMFZrdDkwbmtRTCt3VlllWHducUVOY21NM3p5TkFjR0RMaG1GaGwxWTU4NVdxWFRqRHN6WVFpUHQ0TzNQUWJXaTI2Q2l2bW5PVmNmNGY0L1FzRzZsd2UvY1JVVDZXa3hwVEs0S28wQzhlR1M0Q2l0SEZNRGpSc05rK0pTMHJVOEE2NmtHTFRWK2xZR3JrNU1nRGp5WTcxUW1jczZ1SGJkUU5ua0Q5dElJanpaUjlTclUzNVMyQjBhbC9mZzZxNnF6TmdqUHdWSDdmdVl1eW5iUjdEQlpkQXFMREJLYjcrUHNWQVMyb3RQU3E2UlJhVE9YdlJLWUgyekRDVDcrSS9uRklaRThQUUVQelFJbGp3cUU0ZnJhbWoxUENFWjR3TjZNb0x3ZEFkTHViRWp1aUpialVwLzloMmNvRStJNGJRZnZtYm96TUY2TUgySzVEcHAwaGxvUWo3c2NKVjNXZVIyK0swT1ZhZEhNL2EydjcyYnY0SGdSUGhrZFR1QklnNHhpNkJJc2R2UjBML2FPV0xxNk9XbWJjbnM2WXR4ZUdxbkNGa0hUakdPUlplSUhBUlVzZkZPVTdqSlUxenJuN3JXaFVHa2ZITlcyN3Z1UEduaU12VFF0S2NHdVVXMENhTDBITG15QlpjcTdEV2J1bVprWFhGT3hCaGlUZmo2UzZqNkpGY2tXaTNpMjJQNlFOT09UaVV6MjFzbmlMaXhlOStGbWZtdGU3d0t2RXowNDQvbXNzSERqc1cwVkF5UEZzNkh2ZU5XK1h1TGNvVU1tWmlqLzkvMko2TEFZMFdPZm1iUExCallSTnZaTU9oYmYrZ2MvdmlJV2ZwOW4xa3M1aFN5dk1FSzlkcmFhRWtYRWh5clZFTmRmemQvclgwL0syejBIMTlwaXBuVkl0SlpDQ0h1ZER3ZnZ1dXNaa0JqL21PeHBJNVBBNFNNRU5WOTMxQ2RaUyttL0ZBSXgzN1ZZOE82YWxwQnRFSS9Ob2RNZmxiN045Yy9DQnJrT0ZYOWYyTEN6dXJRTU5LSlM0VFNJcGQyc1ZsRXZJTjFHTnZTR3pmVzllVi96aUtRcjVQaFJLeFU5RG4zaGF1blorditBelBaV2JlZ3NyS20xNytUNGtrQkk2S3RjalJQcjk3VGhrUlBZVVdGWTVFR2hiZXFGVXcrN0RUZVBRUTcwdlBZTVNjYU9CQXZxWTNETDdlRmI1Y0ZzbHoxYzg2ZXZESlJZU2p1d3loWm5wYXgvYndvVzRKejNEUEYwVE9XS21iSHo5ejBRYjFGaDcxRWlneERLbUFCMFd3SlRMZXExcCtOTVdUM2ptRHNGL2VKOXZubjJkbS80aTRidVNOb1V3bmJneGgwNE5CcU0xdksyK2VlY0NGRng1d0trN0hSMThmVjJrN1BQNCtEd2ZHWnFEL1VrRTBvYllyWjVzWEZGQ1dBZ0ZvKytTaHM1bXJKWHY2dmtqRGlScFVncWFLTlhkZzFVd1NEeGo3NjdCd01vcnowdEsxVUtGRWxFUG5ISXoyQUxraTNyUC9PR3VheUlxenAzc3RYWEE1czFreVpMcmdoRkhzVzlwL2NSZnU4VXptamNYSktaSm5TVTBiZnRzL0NmT1VQNmgwbDQxYThpVjRra1JReVRQd1Q2OTQvWFI0MDFscTVNZkxVZFpHcmRTbElEQkQ1Mk05cFkzd2k0M0FnV3QweGE4SUkybVpJQUYzWXRPQmlOdDJGVGU5OWdyL3ZhTnJWcnBBMkxneWcyT0U1MFhydytSektJWndVa3RIU0VEa1V6OTVSUHhkb0hpR1NoV3RoSXVZem0wVDZzQ2YwWmZRWjI0MTdINzJENE5xbXhodUZtNGQwa1licTFXVmhyNUFTNlgxMEVXdm9SUFpIbHJ1aXZ4Tlk2Ullucm1TbEJMM1orVkxwZHNRTjAwK3BSa2xvRXhBd0NrazZHVTIxM0dEV2lVc1pQd0J4OE5YcFJsbkZqZE4rNlYvb2E3d3pFY3cwZ1ZGQmhOWVdQNTVacUNDTWtNL09XT01OQy9Wbko5K1kxWE1jclBoNmlYYkdnNWdVVU9hWlVZM0dRdk83LzRkVXYyRGNmTk1NY1BTZXN1c1ErRGpRYlhRTmlqM2gvRmQvbitTQ0F3RU9JNTZ0YlpReDB4ZjIrdG9VcTNieHhING41QWowZXhKWHM2d2Y3dXRoRWs0VWdubEIrc2t2cVBqalB1WEp3V0tRWlo5aEZ5RDRtNXVzUHdoUFBaa1Yyclk5QmprbW5Ta3ErT1Vrd2JhbnNjV2dMWG91b0xLM25rSitVUEEzOVVEYWFuZklMVklqeEtldXI5TExaNnFseGdNNytDMm1uZFE3MHozd0Z5ZXV5dGhWcHdHRGZ6azJEck9xSXlYK3ViTUkyaEdpREFUdnkyY0FSbEtlR3hZb2ZWLzBiZURVbC9MQUFiMStxTWVvY3N4N09UcEhKekpGNjNRV1hiVTBWSk1CTE9nQUI5bkZURFZMTFJoMW9vR2VPVkZPcW14dUNUcThsRDNwdEVHTDRQeXVGbTNhaWZPYlkyVGlLT1licStXRDUrRW5jZ1ZEc3FvRnk0dFA0ZlpTQXg0UFpYZllJOGVrbGxoeE15bkVmQndPczA3RUlJWm5pTExJMFJ2Rm5pckswcWYrSVZRYit3SjNJMEVqZ2ZSNk81K2pFRThFT3RZMURLT3cxZm1ubFlna3BBb3NHeXViVC9VY2N6aWRvYjc2ZEpwY2J1d2Nsdys4TFhNQXhZTGNUVW9iSzNPTUNPdzZMYk8zSTlpQVRHNElhc1FOZ1ltcFdkalNkbmxQWHd5aGIvY3VKQVd5cmdiZWhVZHpjRHhvdUx5VVM0blEvMmwwcm5nS1hUVU43ZG8weGZhWFV2eHZERnB3SjROMzJaMm91RGNOWG15L0F4Z3NBcmdxRVJVWkM4RysxUXR0WVJZazFwWDZPVW9Ga3JjMlpRWTZsY2NPeUhiejN4YTlnSVhGa3NSeFU0Nm1ETWpnZ0R0R096b0xlL1NIS1NFNWJFT21rdWNlTlJDVVNLUkVoLytJbGQvQ24vTE84VWRMNWV6QWw3VWN3dE9iN3dtWFVDUk0ybGJMbW9rVlhCK2wwV3FRZHI2Q0NUT1p4SU5xQ1Yrb0czVXpHT3JrY2hrb3oyUlpseDdhSEc3RCs2c2pjWFJZa2hjckNHZk9pano4OTZhRkU1aDEraWl0clF6anlMQ2lBWGd3YnNTVUh4UUp4cTFra2dZZmU2VmgyRlFTbjkwQ3d5ZU9ZTU1vRGdNUGxURGNKTTFVbTlYMll0eGtTRkdXaTgwOEpMS2ZSZkcvbmFlOFA4djBUUEkvSHlzL1pGUHV4aS9OMjA2NjdrbXpCSkNKVC9jaXJCWGVCSXM0SlhrWjlJK21BUFAybTcycHpwQzVscDgzYUJCOTBpb1JDTUowV3RSUk41RFlHYmsxTDk0T2IrNzNSWkhhc3MwOXdkM2IyWm56ZDRIUlU4V1dQYjIyTXk1Mzk3cmxpL2tiRDBQNlRwKzNXRUxHc3hUcEFTRVZldzEwUlJIU05NZTVUWEozVUFJaDlCSms3a085UFArb1VpVWNNQTBla1grS1JaRC9qcVFIWGE4N3V1OGNOc2pkYzUxNUlGb0VvWlBFZHIrdjdGM1A5NGZsc2kxOTBPb0NjNXQ4aFZtaWJRYmlrT3VVOW5rSVpDVDIwUnBMdFIxUVBGeUNGMDE0L2FyVi9IdlNIUmJid3dJWThQaXpCSnRmOXdBaHVhVERMWGZzNnhWYVFoeElUUTQwVlhKcFJFd01GSTlCNmdZYXYrQWw2NUtUM2dDVnRRSUEyRWhhamdWcjZWNFR6ZWhpZzdNVnlGV0ZoZWlaQk1MQzZqdG9LTnFIUTUwMG9wZE9reE1VZGZwM3k2bkhvNGpCS1NwRjB5cWFtUXRSMnJ1SlZ2Z0EyaEtZZjkwemFwTENjVGduSzZDK1FFWFlCOVJ1c1pSakJ2RkhqZWdrTFpMZndLeUNiOW1CTGNkelBMUjZsVHI1aFR5NlJwRnE5WkllbFR4SG5TOGdqWWgyNXpnVWdBeGw5M1prZk0reU1RY3E0aXNhNDFWREY2Z2lpZWh2c2tKMFRRMXEyaFJVbkV0VTlNYjB1RmNCd2NWNUdIeXd1RlM1UzNBVHhrQWQvdFRwN3hnWHMxVHBSQmdrQ1dRdUR0TnQzWnFJaWxvaStjZHlxYUxwTE5XdXh3cTJUU2c2RDhLUjJqSmNxOW9VK0pYUVFub0l5eTU3VDZRUW1VR09sMzdkWHkxYk9oTEo5TVhFZ0tsdjFlMFBCUnRTbVMvSVRPTy85dFVoc3hxajBZMUtOWWNVQlh2RDd6V1VEbEQ2YkpFZlp2bjd1Nkx1clUzcTFqK2QvMDJFcFpYalg1Ym9zTUt4R3dKQmd6QUR4T2pWR3FWVUx0MlgrWE85eUlzMmxoMzlpMjhCRmFZWEVPay9mSmIzOURjT3B2WWwrWThPanlCRVhYOFFsRUZqeDV3dytuTVVOcFVQeEh4dzc0L1NjMzJ5S3BMQW4zY1hRWTJWdG9mZlk1aFQxb0tVZEdFSWZVRTNKWnNORVY4aERaUmtRNFRoR1VTQWw1SzUyRmhmT0JtaUY3Q24zRVAwNEpLSDZ6RXZ5NUpRQzhBN29sWmJ4bzJlZVdUK3M2a1FPV1l1bkJIc0V6WEx0SEJ6WWVpbFNmYlgxWXNMbms2TlQ2OFRYa0h3Sm95NXhjVlNTR21EMDRBcmd5U3luK0ZVdWMvQ3RQcGRiN2ZTeTdsS3c5YmY4cWxFWi9QTWVPTjhDZkk1TFBySUlPOFd0cFAwQ09nb2hWYkIrZGRsTjJ6TXZkZTdqYjhPSFRDbFBhT1d5T2VrTEJVTU5zQXBVSjZvdlpGRlU0ZE4vaGYrQTMxRnlseXp4d1VSeFN4Qkw5M256dGlXbWNGYUpXamtGWXR2Z2MzT1JyNXFKK1VVVUZMQUorcFgvY2MwVmR5ZGVwT2dGQXNqNUhTbUZlVW5WWHd6ZE54Rm5yeS9GMi94Y1l3ZDBNY0c3aVVVUUFqU0VFYVJNamd0NVYzUGQ0OGowb1gyYXk3Szd2bWxvcm5HTnR1a01Kb2xyUXNzVm1LMmhpczYrcHpmYXQrUEljT3VIUndpUDF6ZDVnVis5c3Z4QUJxSnF1SmlyL2RTSEY2RnJPa0dxdFlFZUlwMUhCU0YyZU9rT2pFVGVqQkhhQjFoT2tRdHJRRk1XdnhLSXo2MmNPOUQ0QXVOKyt2VFdnengxNHhFdVBvd2U1a2kvczNSVVdJWXVjWnY2S0hST3F5dzcxVldmbDVpUUwwdHZvcGQxa29obWM3YWc4QW9XL0kzdmJFQmR3OFZkKzlqaVFPaG1IRmROc2ROVGtKTTdUeVFONVl5OXVDSUdTdWNMaGd2QVpQUFhkaFdOaTZmckRBbWFTSXM3SXBGN3VML0ZzczdjRDBnWkRtMjRRUEFlS3NabGVPM2lyZ0FJNGJNbzVseGM3dm1kbkdabEFYKy91c3I4ZU94eEc2LzBzM013WDlKWjNTUnVaVm1yWk0rVksxdVBURmtKWUJTM2ZLSitoMVZnR2V0QnF3ei9SNy9FL3pRcjRvSGRRSDQvNU1Mb1FnTi9NcDIyVUQ2c0tpSWY1eU9jYko3R2wwbVRDcnhYZkZsbDBTbDZoa2hudmMrZnBaZDZJaW96RE9pV0x0bzZMZUNyZEJ4OEFVL0ZrcnV2NnovTC9TY1B2VjdxdFFaUXVMZnBwSFU0ZXZRUHRXdnRnYWxHdzFmWndCSkFzdzM4QTF1eGVaWTVYbWxuTncreklZZWFiSzgyVnpSQnRPcWZDdW5mb2x2aDFyRng5cHM3QWhZaDdFcTNuUnc4WDBtN1BhdHFhRHJHejl3b3hmL0tMcklTQnczUEtCQVk0NmJUdXUyUzFOb3hPTmV0VktUSG9XRUFtUHlxcTJmMmJOUDhoTUw0blhmU09sY0FHUFNhTVJGUzkxRWo2UFh3RWJvdkx5Z09IanlraVZTTS9SQTF2L2NwWSsyUlZhNjMxMGlvaVNvMVpNU1I5MHVGMnRmNlJCUERCTnFHUXJ1bVNzM1poS0YzZjJIVFdkNThWd1IyTjRPNHpPQXFPSkZBUXNTUWRWeXNMRzRMRG0wYkJaLzlSOVJNN1MvU21nVGJTQlJLTVF5WWY2WEl6K0Z5dWp0aEprdlpmWGUrOTd4SSswRnJ4dHFXMC9jcTRjSUpnU1NGSlZHRDFHZm0vV3l2KzhOOXRSNUhCZ1RNQ2YrMDBkM2hhYytxampXRW1ZV3lIeGs5UHFQczhiTDVYUGUrZWtJQVVsSHRPR2JJQ09UMW5tbHFvMmdmNytkakhpUHd6Q3BDUkM3TGVYa3oza1RZWHpTb3F5c1BTNEp1ekhBM2ZxaEFJRzJWTWV3VWQ2TTVKQ3ZFeTNyWkNwdXYwOXB0T2xPb3k4RHYycWg4R2pWMktpdmk2S1RGQzBwVFM3YTNCbGNEY1BjL0Y3U2RJbDR1VUxTMTNWZ2xKc1hXTlRVMExTN1dwQ2l5MG1uSkk5dy8weUdJcXZMMFBlakRmQ2RoSVkwaVM4NkxlN2I3NURrV0JuRFdFV29vUzJmZ3NWQ3J4aHk3Umx3NGV5OHBZQnlaUzAxdndibHNHRW9QdkdPcTVKSmNpRUNZajFFVHN6b1pxcjQvZm5pVFBCc3JYd29tOFlnZXFmR25QUFA3L2YxQm1RaklWcENtak1DczVBaXFxV3dhbmxKVnMvemhBWFlzVTQ4WnFyZGhCVEw2Q1ZHWURSRk9iT3J1WlJqZ1BoakVyMTFyQ2J3L2p2aEt2TG5sZUtqVFRqMXp3N29XZk4xM1BFRXpTRGwvaElhbzFrcDJDTEpBNXhKeW9rN21qZnp6cUJXMEhBNGN2d0VkUkdTUVNoM09kUG9sMDEwZlRKRFE5RzRnL2poRUxreFVJQWpWS0F6bmcySUM2dG9vTVRqSFJaaW5ZajQ5dGM4dHFqU2tlTlA4QWNZK2M4UzM3dGswV09qY1c0eitxMGxxNVE1MzJubGhCRlVKMTNVZHJaKzl3SlVoNjh1ZjBMZDZCWEF4czh6cWozaHIwWUsxZXMyc1lrQytYemszK3FISmF5TXdRNjJYdFhPOHlHaGZoUHZqeTI3clp3Y2ZEVWNmbGoxeDhwb3dSQ0IwZ3VSQ2FoL21aWVpIanRmdmxtM3ZDMUd3R0dxbFNvVGZLeVErRGpnblozeXYrc09YNEtYanBQMlpXM1l5eHJLUnV0Wmlja1ZGQXlVNGlzbkJGSHdiTmdxYmVjWmh3WUZXT2RnQVI1aVp1NXlLa3hKYkF2c0RyWk9DMXRNTDhSNGJvTGYwVnRKcVNNZTNJRUJod0pPaGl1Znp2OVd5UmJZbHNYUTdoOTJHR3gvdEkrL3BGMzN5Sm1GUHNUTk9SRW01WFZDL2dpbVJDZVlyL1hua3dWRFdSTUdRQzE2a01XN0ZSY2FPZDh5bzJQTkMyRU4vOWdWdGtZU3lNZis5ekdXTHk3OE11M3N4cVFUQzIveXpRNXFwUjdIelB5VER0cDlhRFNKK0MySU5ZZE1zcnZVdmZqWG15U0phWU02UXFySEF6UE1hcXk4dnducml2QVVzNnhtSkVDMGtoaTlubTIrdXZ1UHVaTHMyK0F0T0tjbVFxV095TjVJMVVyQWZXQmZFS2U4VldNb0lHTkNkSzN4ajNGUWVCN3Vyc0YyWElTTVBHZzdMYk5mbGRoME5ZL0F0VVBHSVduczlpS3diT1BiQnh6WTAyTk1kK3d6U2c2bWo2eXhQbVNxUUFjanFhSktyY09kamxkbVRORHdQd3YyeGtPcDlva1MrNGpXS1F5MVd1dGt5ZHJXKzlMbVlaUWcydllETUg5U2tPQkY5WW9qUTFWcW00R1JtcmJXSjVKR3hqUUhIanV1cDJuWWVKOFJITGdLRTV0bVpkdTdHbStuVEd3cXN5ZzJkeHBEaDYwYzYrdVZ1UVpQU2o1aThyNXM3aGxnU2JvdXJBdXRUWUhadnlQU0pTQ1JIQkcwK0Y5d1JUZXR3bzk5OFNhNkt0Z3A2Sk8xMnpwMmlwVEY0T3ZiNk4xaWxNNXVKbGpKVHVCL0psUFd1NXZENVdYelVaNFdEMGpNb1VMa0MzbUhtbjM0SFNqVnk5ZEI0S2JDYkhYSTJ4VUlXUDVKZ3oxV0ZQanl2NFpuQ3l0QXdDNlVmRTVZcS9ZWXBrTGxWZTVFdVovSWQ0dGh1a3d0eXUwUlVXREp0NDBtUURWNmpaUyt0Qlc2UGtwQlFuK29oYWhxSmJkT2lMUUpGUlV2RkNEVkpBM2V3TGFYN2FPS2lXMEg1WnVaMDYvVGZ3azI5QnlnL3dYTkN4Wi8xUXptK1ZacjYvN0Q4K29UUXAwem1IcTJBWlFyMzk5OCs2NldacVVsc0hIenFucG1YN2grMnJFb0IySmRNM3BzN2x1MFc1Y01TcUtiNCtsSDlidUovY1pwNWxURjRXVlJsSm5rbHloamhuaFUwWHZkbjdkeUZicnJFYWVIVU5EK2lwMWRkRm5hQzFTeGVSVDBsSmdGeWVNbGM5QkRpWGd5bUlqRUFkZTE0RVJRbVluOEZ0NUtkL29zUm5JZzRTU0E4L1hsNnM4c05HaXdiU3ExYVNLWUJOSVlNTlJhQ1ArUkJBdE5pSXpRVjlmZm4wRExrclhvY0xkZTFvZkV6eFhPa3lDU2NMVEhDajFsRWRwdHFiL0lJbGlNc2YyUnN0VHZmM3N0eXB3eWExd0h0Ny94K0RYakZJbXVHWHFNdVpaZnN1N1VOQVBoT2NoVXdod01LSm9XMGwwaHgyTS9wdVcrb3dXVmZ5cFB5OWpjRCtLcXRjekZzRzlTV2lrNVpQbkdPdzR1QTEwZ1V0NDg4YVJhQmtiSG05WHpPZ0xqVTdiT2x1YVl5UEhMeVUyTTkrV1JxVlVBSnJTNVNIVnJvMWhkbGc2ZGdmWGxGZkFlZjM1cXQxRWwvTkVGWXVGZEtWUGtzbGFPZmdDRnB3Q05yS0RHSGdyL2hMTUMwQ3JLaWZJaTc0QThpUENsdFZvd2VlWi9Ld1cxRTA2RnE0b3V6QTMyRjN2ZDM4MzAxRjJYeG93TmF6ODg5Vkl3WHY1STlBc1dDTE1TYXRNcUVDcno3dXQxUjU1K1ludjRpU2tVR0dENlpBUWZGSTVPaEZIQnZmSzNOVEk5QjlIMzhka0NiVWFTMm5oeFV3Z2huWENsb1VRSHIxVDFaWUVJWklTQkU0SE5KdFJHc014Q3VUOTlMWjl5MUcrQll4MWMyR1JHUElEL2xtWWJ5QVlEbXlCY003RUpEaWd4SlVoYUFBTm1PMFdTRFJaK3haWnQvK3h6UlNJNlU0Njg1L3kxZEF2dlNyL0xxc2ZPSS9zOXVRYk1YQXhSSFZWYVNTY1VaK1N2TXhST1pra1NTa0wyajF4WFhOaW9VUHYvVStvMjIwYkV0amlkV1Q5dFp1VG5EMnRTdk1iN0dibnJNVkNOaUJnK3JiTWJwVURYREZFampudmh6SVhKWmEvcm1VZjVEeXhid1lrNk9wclJxQ28zajFOWFBkOGpjWDVSMk5kWGtkSEhrbm9kb1N5aWlqYTdDOVRWSTdPeDd1dU9rbXQrNEo2OGlEMm1VK2oxdEZ0Z1FySWlaVjYyOFkrZmwzYlpjUDYzMWNGbFVtYUIrRnIzaHdMOWFENXZzdFhZS3c2NmFMbEFBZlVtM2xKeW01TWVxc0ZKV1pOR1Q3RldaczFOMFpTRDRJQWxDdmZHbzZ6QzZ3c3A1M3FiM1lSRUJNK3hzUXVIZ1d0OWY1d1JyUXcrcnF5MFVyM0E5TWVHMUlsNkZOallWK3VUNWt3aENSalYrc3U4UWZCS0I2eVVuS0p5czdMNmtZYjgrOUN2ZHUzazJuSm5lN1BVcnY2ZHhlVlNON0JOUUpEY2d5Zis0QWo3azEzZE54SlY1aWUrZTZlQklhR2hmSDF2M0dRdmZxODZWYXp3NmVMV1pkdCtnZUMxSU1teVJQT2luN2F2aWUzbWVtdSszTjhXZHlQVlg0SkJ3YS9CMG5lWFZEcUxGeGw2Z21BWnVnSlVXTC91RDZCWHFDWGVTZHpKOHA2ejRkb2lDdGxNRjBIZjJiM1hWdm9KQ2tJZUM2dWVCVlRPaWk2MlVCNHd0a00yN0NMZVFNeHNDZTVlcjFjdU1RQTRHQktmeU84RkZsV1RrZnFOenMvT1gxT2ZQUFJVclB3VWF2dVdNeDRDV3RBZEoyYTIyNE5EUlQvSndWWFE0SEg5azVqR0grazFUNDFtaEFQVnlLK1hSYXE3Y3l1eDdpTjQrMmV0VlpwZ0FCMlFNR1JET0k5K3p1MHpHRmsrZDZ0Rk5neW5xM1E3VlI3RjA2MUJuUFY3aVgwSGFzekRxa2ZNTkEzNnA0a2xxUHlsbjhaczdqSXgzakJrRlRtZmpEdFBETkt3KzU4R3J2ZWV3T0w0V0l2U1dFc0t0L2RJZ2tPSGhEVGUzeEtlZmI4RFVqUGdHRnBFOGxsVWZUUFpDNXFpaUxoT0VuRForT282RU5OZXZSUmE1ZzhjcE8rZXNlTENjNWNZa0JwV0UxSWRBeTBXdEpDWU9yT2gzYVhTd1JHSjNQOHRSeFlaV0FZUiszM1pGNkpyUC9RT0I5VFVBV1l2bW54b2NrdHNKR3lwMFlJWnZIYjlXalhOcklkdHBOY3pwUEpGVEV2eUtObmFJY3pldCtoMWQ4c01Ub2VXRDc4cGxCZ0xueEdVYTIzSHA5YmlDK2w0WGw1YXVXcjVQNUgxalN2MVdyaFlwa3BvU2NSRUQ5SzZaSlplVUtZSHRIODBUbWZWc0VRaHlzS21uUGVCZFZ1dmVpOHQrcDZwdzZJcS9hVWVZb2IzN2svUU1Oa1VVQ2pyQ3JpbXZnUWxYVDNZMnkyWkNnYk5EN0l3MHpYUklKdW9IdnpwT2J5akM5UVZkWUFWNnZVTUxybytYZERySHZPTy9LcmQ0MUN6eUVBVkNjUmU4cjNmY1NINFdSWDRjWmVWeUUvUTRVV2RyTU1IdzVDTWhsVXNudDlZWWVoWXN1alVmRkdMOWJ2SjZxL3pkQ1NXbGpna0M3NmpJMmY1WmpFbTU2dG56MnM3dzkvZXdwaHZQc0FUWVZhSUUzODlValFBZjFZajdFWE5FOTNVNDcwNlFET0o1dlVMZXRTckFtNlkycjI1NG8vR1BxdDhhc2tab1NRdUVIU2Q4OGxwWEZZWExrMVJTbXJRWFkzTktDRzFEUk0wd0MzaVpKTExERW84MzgxM0pUNnJXbkMzTUd2Z0JtbDJLejZUU3dkMXY0cUF2SWZXVEhCV2dtaVdyWEJjOGQ4UElZd3p5a2R0Q3pjMUdFUTdhWFNEbmZ4cFdERXZNY1hjb2lPVG5FcjFHNi9idkVhVVdoclByekVFZUdjTllxY1ZiaHl4L1UxRnBVVnpSSVl5QzI3MnRocW1ieDZnQ2lHQWxmNmJoQkdrRnAyOERDbXlIQWQ2a1BDZWNSRWVqTXRIT3pORHB0VThNWDFLZHg5amZKTDJjWHR1eEZoZ0Z1UmNHT0Z0TjJabTNqKzYyaDRLQ1RDMjRmSUlFRGdDZDNzRGd5a29FbTl6SVByU1V5ajlCMU56SGMzMkQwV3A1aEsxMFhHSjRiZGNKWEpSREJHeFQzcFBtNW1aWjk4RkFWNmI1MmZSYWlSQmk3cjhUbng5WEdLTFl1aUptTmRJNkw0VkFNRjVoMTZZZ1R0Zlc2eTJhM1JhV3VST1dmeHFxcEVCZDR4bXIwN2xyWjZQd0lyTXd0T0tXMVFxQ1VyVUJqb3UxMjE5OVZ1L0RzYzg5am9GRVUwZ1JENE1PRDNucmh6VHhUdWFtU3dQWS9hdUtvWTJJVzJzOUt5SlZkNXFHMmppN3VRZkt5TkNIWTBoV1RTWit5K09LV0tLdFYvTGlZSHJlcXJySDg0Ri9PSTNnakZ5eGMrMzVOVmNpeVNBUzFDa24rYnNIWVI2YzZxTVBiR3JxYXY0SXNYM21kZGJ5RFBDUi9oeUdMbzB3VHBIbUFVdVhmVXJ2ME05SDZyRXJBdHkwL0VlQXVKNElRVmpWRFlHTDBaMWR4cHExb2hjWU1iODdEdi9sZjR0ZTIyRnA2NnRvM2RsTGJIY2N0M1VPZVlubGhZYTNLWW11WVVuaGw3VE9RMzgzaklGd3RRWHpXejJuTmJvN3FsZ05PZlprYUcyN0FnY2tIT3Qvck9hOFJMdlpaSWJwb2RuTXZJc2RQcnArMDR3RG1zQXE1YXR0ai9JYjc3TkNuaTNyNmtZM0kzVGhPQ0pXSFBYS1NlemMyZ0JwbjE0a0QzUTRRZlBCOHVpbEFVRWF3U0htR0JvN2JUb2s1WXVxSmhJLzk4ZHRqSW9hb3pRVjNFNmhXdFJCdHdqZGN2RlkwRWFlVXBSZThwdWlER002QjY0bFZSUHE2Q21NeDdaa1g3M25GM1NuTFkxN05XMmpoUUNpdENDanhTc3l1SnRIaS9SMllCVzBNME5QTWx0dzk2aEdaOWRiYXNzenhZWDNDM0k3dlFjNWwzNTNuVDVRdUV3TGJQVEpkeDhvcmdlamY0MVExVzFUSjVyRzhvdEJKZzRqcmEzL1ZsWTN1anJwODVJOThpVWkxQWxZbXY5TEVSRjRrNXNFYk5aaE5uSitVajBPV1lrYWk5eE9lTUlvUk5FOG5pN3lDWHVzcUxzeEE4LzFiSi83NE50Q2RoQnhMWTdVeWkvTWRUU0gwdmZ4UEVaK1FQU3BpQ0hWcE1VTUY5M2dhYm83azU1TkkwN1BOaGlqcmtmVTNzcmc0c2FLZk1QWkFobGdVdWErMTNxdXpBZXhIVmlMTXFJZHNqSTQ3ckRZSElXd2tVUEJJV2Rab3VhQlV5VGx5V2IxZEZBWEFLa1kvMDloYXpESFZkRHVlbStWVnNRQnVyMW5MUWpGejBlK292bTlEallFdjhXY2VMYVhNRFpTMGRWRTIzOEE0djUyazJPVTluaWcvZWp6UUNaNFZPZTRhck8xaGxsS2Z6NHNjY1Z5NjhjUmh5MzlkRWxEZXNwYUhQZndlY2VXWDVKa1QvTko5d2ZWd1praWRFdWhEaGh5NTREMTV3aW1jTGFzaDJhRHVweUVqQnliZk5EOWN1VGtZeGZ6ZmIxbmljZTRLS1Q4ZVJ0VXppVFFzRjJYM3ZSeTEveU9HM2RvcEwvckRleFNYMEhQYUNXS2pVOUpKUXM0dnBsOUJ1Kzg0d3N1VkFTYzlOT3p0OEU5L3JlS0RreVVjd2dYTnNmdTVSbmplZk5KaHY0ckVRMldyNElHdWtyMUxLU3VyR2t0eSs3MVNnNmtsdUJmalp0R2Eva2cxekxNc3VaR093Nlk5V3krUlVDTmRlYTluVVJMbERBanhpTTZIa2h0UHVDOEJRQ3ErNjBHYmJrdGpCcnFpbkN2RUpveDJOSkVHY3I5OXdyNnpuWnRlUGVRZFZtTTNYeHY0ZWY3WGR5dkRNKzBxSC9NTzlIUmJsVzFOTHJRM0c3NHhFVzBuRnFRNThGY1U3VE1KYkVRNjdaZ1dac0lRek8zb3NFYkovc2hjR3hCc3F2bXVCWUsvM3RxVWt3NkNTUDVrS2JtMHFpT1IzYU1uR0ZoK244dGc4bTNYQ0N0bWd5WndnRDhhSVpNY3N5b1YzUi9hb2pDMi92eXphdXBKVUduNWZrdG9HcWFUbEtGNjd1OFZQd2xZb09DMkx0Nm1mcnJJL3k0NG1uKzdtTXB2YWdITTllbEdSUGJTbGtMbnF1eXh4UzIvdHA0M3cza2xwNlBYTUlhVGJWbm5COE9UT1l6cjBoQTFlSUlqZzJ5Tk5rQmplSk1ySHc4dUNUemZGU2tNTmY4WHJtTU9XeWVpSFN6T0VGRWxCSlZ4ZG5UVDc2ZzJyMU40VS90cU9LZ3NTUklDSjArSVBLOVJYZ1JxSFkzdnpnUU5DYmtjaUtITzh1UjhVWW1RNmgwVTNsYkMxL1Q2czJ0UlZhc2EveWdyU1lHdGlRNnJQREFFVEdZeEZ3WWtIUFdKZXhUcktVVEY2d0s4ZEtwcTQrQm9MakpnWGFUMDNIMnMvbHJ2TmdGcGc1MzJ1VSswZExyL1VKaWhrZUlYVHcvQjVUdEN0ZnhGZHdYcklTelNsd3dtTS94MnN4b01TS0JCTjFZenhHR1A3b2M0akYwdUpMNVlVWWM5NGJPMDdhK3JLWW0zclpIcGFxd3dqV3F3MTNpekhZbHExa0poS1dhQzRSbVRBM0U2bHAycW80WEUxNlo1aUhaRWFiSWpiL2FhWFdUQXk1TkNRVVdRSS94ejRFSC9WbWttSVg2QlNmbUpEaE1OMDRIYnJRMzhrcFVrMVBncWZTMmpJNUpMczhKb1BzUXlTcGlqdGZ1K3g5S3UyNW5JS2N2ZlN5eENVdklHM3F6WkRKanA0TzBrNXFiM0N6RFVPaGMzcVVpVXhiY3hjU0dvemFyejNVQUJ0b3hRcXZ4OC9IRVQ0cWFERE54UWRuMXdHa0Fnck5INWtaZTlOa1JxbzNRaGVKVFY0N2lPRWQ0TDdLQmN4aldXTDJYT2YwOVBIRGJXdWw4MDdkSlpTOGVUeFIvc3ZSSWZxcG0zOUJ6QVkwNVdja3VuRFJYUUIzaStSVHVnMTVoYXhzalNwOFoxcHRlWkc4VjY5eUtQTnVROFplYXVjRllBL2ZzTUxwZ2ZBNUxWcEV6QnZCbzZRUkJweWdZUFpHWGN5M2NuMGRpVjRXcmlZNGw4UXlSUFR3YlhwMFVKZXpnOGFiRkU2NmtTbXhyK2ZHRDVSQlgwY0dKYXRuN0Q1cGIvVm9PSXJyTjBWRzE2R3lzdHBzSU5pWW0wV1dCY09NMW43aUE2c3NLWkRQcEJHUXNBenZXVEgwYWtsOVpXV28vQUF0L2xHekF2OWpoQlF3T0hYdG5FR3VNbDFKTTJ0UUVkMVpYRHRjVFhSUE9xS244RVVBM0FmbjJXUXNPbHZDcGpaUkkvK3RhaEg3TW9WSHN0REhtU3FoRERoMitFRXNHQm10NmNaWFluMjUyVGxyZXRJL1JuWVlRNURyTFYyQ0FkOHF2STVLcGMxU3Y1cXFEYWFqOU8wWnJvOGtnR3FzZnhqSk5KUDZzRHlPZnZGQ2hCWmZOaW9DTzJWZmxBVTNoZHNyN05ITWJrQ3d1T2JTQTlqUG1GYTFTOWlRaXlKOVNDS3lua2lIVkFGRFlNaW50TjVEKytlaUtEN3lTbU91ZU9iKzZBQUJPdExheDVHSk1BcEkxUFJCTjVFcUN2OUdLUHZscXc0TWoxaEZIWUJZcjdHY1ZVZGhWa0wrUk9XcFpZYlhIdm4vWkhjMUhnRHk2QmxPQU1sSk9xMEl5bmQxY0FNN0g0clg5Rit4Lys3TzVhc2JjUGVSdll0Z200VUxCZGsyMjBVd09vVWYyYmsraVh1WlNxajNMS2tpUDc2SGh5RmhRNFNRTjlmaE9ScGdFUkkrMzVnTHU1eGtLSjFXOG4xb1AyNnZWdExja0VsVzR3ZTFxTFZVTzBCaWUyM0cvWGlyb0d3a2l0RDJ4cEhYUWRtWS9HdzQrZGNpM3JpSzhaR0M0Y2pwQ1JZUVIzZHkvSDcxYjMrU3llUFl6cEUvcDI5aGZKbjcvd3psc2VxMWc0ckZlMGp2REVSRjRsU1lOR29KeDAxbURRRStGc09FS2x2MXlZbTdxdzU1R0NZTUV1STZmZmJCUzNvLzRrN3o3cHlSVjU5M0MrVTAxVzdoa3FVMkJaUXlUM1JuWGM2NXd2d1hMSHBFRTU3VVJMcTByZEE0aFIyUzczVHBNcFpTbE1aTC9CaUYxMFYyMXZDaVd0TmJFOG13Y09KNlZHczdEbnZXK1ZSYnk5bTlXdTJ0QXAxRTVXWi8zOHQzYWpNQzRIVE55RkRGWjd1blVYek9WZEJRblZGUWxldzJhT0hCL2lad2pLdmtmc05iTUFNOHFLd3NwQkM5bUZSNmJFNEVGMzd4RWdYTkNyMnprT2t6WFVxU2x6a1JtV3FKcW5UU0JyQTNMaGhkVkpuWEZhK2RROUVUb0xRNmdZbnM5MzgySUlCaUdDZUl0Um9PL2gveTFZN1QzL1RXck9BbnlSY3ZuT01tOVpqVHI1bkZPYWs4R1BiU1MzanNrMDlualN2SFM4Q2NJNHcxbnRkdmg2cm5ITmZsK3Nka1VNQS9DQUZscmdEWEhZZWtUZGV4RFZkcmgzajN6SGhuWk84R0dSRnd3TFVEWjFrYjZzQWwxWnBvUzN5NGxmbTlLM0VLcE5tRDJBZHhqMHAvUWtwaGozY0RpRXZSRjdHZWs5UXBjbXZ1bDBLS2hoSEZ6YTNyNFQrY0s3M3ZrakVHYkFUMmlJcVRJV09PUGtSNmdMTzJrTWpWTjdOR3hubXo1aXdRNXgrbmxiQnNvSnFlTlU2UFh6NEJjMXY2Z1BrZkNxemNVZ1A0WkNuMDlsL3pLNXNybmh2ZWIrcm05b09najZqUXZncGczUmxXTlk3UEI5NUFIOTRpbHZyZ25FMWpFeXdmUEFCcVMwK2Z6N1JWcUJsYWJRSm1hUy9NWndrd2pJOUxhOWpSWGo1QlNmVXRVWkhzbXp1MVFPbjhBWmlqVGlVQm92TDcvajRNNmNXY0Z2QkNBV001Q2hybEkycmlqV3VOSUdPc1JuTldvZ3NRNEgvcGtwTG9QM0ZHY2UrSFlTV2hvVWRBekJzRUE2MVA4ZUtPSXlqdTdDL1AwM1p1Q2lXdndDSW1xanMwQXRjelJzV1dnalBmbXNWQTNJemdzaUNHeG9naWpoRXgxeTJpcXM2NitCVzczSGJuaVhGK0tyWi81ZVdROWpZb2RMMXZRQ0RVR0NJU09lZDNIQXNBMlNaYU42eTdVN2k5RC9YNllNRWE2UHdENnpjazdVZCt4SXI0REljeDJkQUpnSTU4d3hxQk90Slk4MnVyV0lnTzQ2cWRyZFFmQVBVbVFtdmUwdERIVFhQaEpUMkMxQllyZExlblJFUFllcDRudXBWUXVqNjZxTkRQaSt6cTZxdnNKanFOcThwZlVpMkVCNG40N050SEpsRDR6bVdyMUpSYmUxRkoxZnVlTmV1aTZRSjRrd1ZBd3NBZGw5UmFQek45eWszY2hudWtiT2RUWm05ZXlxQ0JSUWJJM05LeitiemJrRHNvcVFydDhMSHRTSHN2MmVaQVhIUVhMbUdXWU93MWlaN2xxZDk1MnBhTVFVTXc5YWpSNmhYc3VPZ0U5U1F1VW53Wk13blUvWnA0RmFpNVc2YnRzdFN3bU9HRTJtLzFBSjdyZkZjWDdZTk10ZHRNc1RWeGhSQ3BxekVKZ2tkZE1zSytzdElvTjJHTEh5b3RJTnRYWUwydks1YVQxSzQyN0pxNHY2bXVZU1lmenJ5NEtzaUxTOEx3UmpJRDU3LzEzcTZkMEZmSXlZaWdGMkFPbEIwNStkWHZ1MmROQk1ydnNTZG1WbkdOMjZMaGdHcUI4ZDJwb2hVcnQ3eGI1YTlxSDZGZUtydlNYZ1ZtNmlDakRPdDROVXNyQWwxT2JqVGgzNlQ0alIramJOWFVvdEsxd29zb2JyRTlLeXJhVEw0QVFYZDExT3p6c3E3dTh4WTBaem15MnpERWJnNjgvSUgyZm1ObVNPTmpGWTlHVEU4bVRMK3lKRCs5aTJxbnpBU20zeUsrN3FkY1JOd3g4OU9tNmc4UGpDaW9HcStYM1p1ZU9XYkozL0M5WVA1Y1ZJQkZFeUcwQWV1RW5DRFUyQksyTmJhK21XaVFOcWxJQzN3U1l2N3VzOEFMb1p6bDdHUVI3bkxyamlVTmxQcndGTmJLSTgyWFI5R214WjdYQ25VcWhTSzkwb0FVb3RaM3RQcWxOQ1Y3dTA2eFNYdTdBL2F5WmsxbW5nN1JoUTR5dG5BamQrQmx3Vy9nU1ZxVkJJN2plZ2tlaEw2M1h4d2JpdmN6NEFZSmtWVlRNOVFnZkRYZS9hcDFNNm9jZ0VUdjBKd01RenZ4K25Pd3pmVUNINTdxdDBsR1ErdmU0MzBUN0V2S0JKZ0RiditmQ2JRdE9wQjhUMzkxUHl0TEhYbHlWcjZ0b0JGUk5aK25USXltaWxody9mekJ6Qmt5ZFBXaTZmdWVENzV1ZzdDb0ZocWRML1diZmJHTStJQzc3bTZORmNMUnQ0c1VSSUtwTkZpZlJYRmcydjB5dmtTRXU1RG1DVWIzUEsyVWsvZk1FdFdXUllmU2tXaG05SXJNODdmWFZscjF3SjZ1T3VGZ1U5ZnZSekovMDNIZEFJSm9QNTRCZkVoQUg4UXI3anNyOVl2VkVLRE5BbXNYL3grUTZQVHRGS1RNUnFMeXdxY2dIMEkrNHpKalhEZ01HQkxjWG8zeHNOYjgxRGIvcmNvRjN3OGR3UmlqbGF3ZVovVDBKMGRUQ3NZUXZqM2p3OS9mRkJURmxha0RUbWwvNzlPSW5lTURUSitWWFpRUThDczU5R2hNR25uVnRIMjZqYU0rQlF5M0NHVGFQcnhDTG1IZHpxNkhkblEwQkRpcmdPazlHaDByclg3aHJ2NkxtcGFNTUpjb0xYR1JHQk1WT3FjajhocjlZekw4bnVmVDAwamNuT0w1RGwrWTNueXI1UEszYTJkaS80RUN0bjRYbFJFTDBiQjlIK0RuL3VCM25zT204YmorUmc0b0preEtRWHpEWDlEWWxaSzRpOTBlNGwyT28vZGhrclp0NStyRlFheTRVZzU5NmZaREZ2UnRHZkV3Sm5VYlNrTll2bDd0RzM0cUt3d3FicEZSdmdkZEhZN0JwN0xxOWR3SXVjczEyZDBjUCtWNE0yQW1ONVJ5VXcrVDcxODhwNHE0QUlTZHVWa3Z6REI5dUVNTEJlTGJHbGFHQ3d3NEQwMjYxcm9hL2t6d0laTEpUM1pJYzRHNEErUVVmMmw0cVRXY1I2NlBQbEM0MFhwS0tHZllpMHl4Y2lUaEFKbHJZbmM5b1picFEvNXhUb3hmOTJwK0xaU2hKQng0ZE9pMnQ1ZnNxQ1lPQnQzTVd0RmhLcG9sL2tUR2hZR0VHY0Q3R2wwRTl4WUdGTWt4RWF4d0VpbVFrOVZYcjVnT2tGMk9adWgwTW4yVHU4NTZvL1dYeUNjVUlZWEliOHVHY2N0Tkl0ZWVvSFczRGd6MG5xbUNCbEIwUC9VSWYzUlRxbTNHTlFoVFRZekV5NXVWQVlyTmJYTHoxNVUrUGZ0cTJYb3RaOHR3dUxpUVQ1aUE0UEhYeTZBQnY2R2VhMlRKM2pVSTd5Nmk5VWhobUNocWhieVdla0RldVB3OXcxRDhxaGJNZVRCRDM4QTBSaWxoelVlcXI5QkRZTytvU3VkeUFxTUhEUWg3UmdoQ1Azd2N5SFpVWXY2V092MS81Y0h5WC9YY2RIWlpLQkxrUHBBODYyWDJ0aGJ5c0NlWWhhZlc1VEZoSUIwRXc0MTlnUXpzVHk2VGdlVSt5cHg1ek9iNlNzK0xRUlNwNWEvMXpTQkhvSHpuWWlZbVJhcVljamtCWU90ejdwQ0xNUzBJSEUvdDJGVEtyVm5mU3JPRmtBM2IxeEYveW5sZDZPUldxUUlWK2Uxam9OQWpDVDA5RHlMSzJTaDBlb2ZhTzhiQ3ZjcDZIUGhqRVV6KzBIS1AzS3BsT0FQcS9RdDFNNlZ0TVpzNWFrWkFxMFZiWEdsaFp2dVR2VzFaM1NGWlp0MWtPMnpaNnhHeUxZblNMMUpPdE1KR05tYlczZDRwWUxCZlFjcXQ3R25aUmNSU0F0aTc3aDVQRGs4ejlzV0JEVWFISUdCZmJQR3VndHZtZFF2dVRHZGx0OVdIVkZOVFgrdU1PRks2VGlhNTl4TDRWYUFueHdKdXNJcG9ybGd1WWRMelBRZjY1WUoyOUdEaDkwSHZyb3hRaXpSSjMyallqZUkvdStLaWNxaHZKcUdyQkN2YXlFZzBkWTl3WTh4RzlqT3dOSk5TYm9aeXBDcEpWVUEyYjRKc2tTRVg1dEJlRTFta3dmaUg4dzBEZGU5OEFUQUtPRk9qWWhEUnVzSWtFR1BrNFBYNnFONmpvZy9jWEI2NnBGbDdsd0pCZ0FIcU95SDdPb0tvbGJFYVJmNE5qblRKZ21ZTDhZTmczRXZjMTdiTWpGUnV1aTgzSjJkK2F1QVRqZGo5OGFNeFFyYmgrWS92dno3NkVwdURRWmw1K2NvN1NKY21BeUFJSTBQeG85R2pEWjdDN0lpbVZWL2kwVkVnSVVwMjhuUlBEM1BmZisyYit0VmU1akRYU3dXQ2FMS0NXV3JFTGUzQUhROHQ5dklqZEpqMTU4LzE4b0tvZkZObFMyWFZ5Qm1aN3RtcXZSemVSM25xSTFtUkZrS0ZLSXdvelIrSmpwWWpKVnM0Q29Oa045Tmk5ckF2UjRUcjNaVFk3aVIrNVMrQ3g3NFNhWEI2RElmdkV6akJLamYwOW1jOE9qbmU0ZWtzaUVodTVmZmNNWjZDdjQyUDZ6eTBZM0lTQ0xicWNzRW1WZmtUMUxMMnhmTjFUV0tER21SMEJ5UUpNdkVNVXpmK0EzbXNtdjNSalBXR21Xbm9raytLalNQenN3Z1pUK3BmYy96eGJnSko3dFJ1WjBRelp6WmtMRWhyaEEwZXErd1gzVHY3VmJXWXUrcWNRbnd3d1BhRGV0TnQxTFZLeE42L1B6VU94dVlpYzFkSHNaU1p5N3IzOG1pWWVIV1lpUDlnU1ZTTkp4MXVYcUkybnBqMFAxQWdFZkJiUWcvbTJvdFdQV2lnU0I2WlFrSVdPaFVnNGZoQk55dVd2NU0yOHAreHp6VGViemw4a0U4QXhCRHpLeXYwaldHSStiWExQclVvSVc0VUNRWkQ5N3hwaHdUdktpMHo2bEp2amRTemxOd3NjZVJlbzdFSWJGcTBxNTljTWlxWE9pcXNWQml4QnNVdWU5ZmFpZE1oRENvdGdQcG9xYU4rTnZicXY4UkhKREpmcFErS2w1SWpZcDJuSDZyUHhMY2l1VWx1bEtxWjBZaExyTEVoMHJETWNnNnkwQVp6TXRQbFZjOVFZcE1keVhlOHRtcnFJRThpT2ZjV2Z1UzQ2ZWVwbXFjVGNySG02b3RsMktaZVc4ak80czRTZjM3LzJ4d0pITGo1eWFnSjREUGJNQVNacmFWMzk0aFIwVTJPY2grVGN6QlEwa1dqU3h3UXQxSmY1andiL3JkRDVqWUwycE8wR0JOV0RYbnV0TjdhcnQ5TGtxU3FtRFA0Nm9weHJISzZha081YVQyVUlmeXkxWjgxZE95K1J0c0RCTFdXejd5eFJheWZxcnd0c01PVk1hQmduWjgrVjVGYzROQVZVYUcxYXVzRngrZDIrNFBvN1hLR3V5QVlUWHpIVXVxODB1T1JKTGpSZkdzUWJWeXVXdlpFZUVuT1Mya0VnbTZ3NXIwOUViYmI2djRGUFJxK3RWWTJkN0t6ejFoa0ZIbW1heGNNMXRteXVNaEZBSm43VnYxVEJGMlRHVmh5dkI2elozKzdIT3N5V1lwZUM4WllTT1pGRC9EWFZIOTJaVWEyR015WHpHUU5NNnZkdlBLN1dNSTBWMlJiaTVPUDZCcWx4SldsejZ4K3dza1JDTVFSUzJrb3RjWWZqRnZOQXp3ODFuL0FaQW9FK3Z1ZVpqd2JiZk13R1RiL3dkbFNPOEZEQVRObXFkdlNLUWtjVVZiakhuQW1IVFBmOS9UazZRbWluOGY4QkEvMlpRWXdNVEJuQTZtOG9FclNDMERRYzJPMmtuODV1T0ovTkNXWXppcVVFNE9PNWtURkNTenVsNGlaSXZnYU5IeW4rbmg2MWNNbCtIT2lMQUp5VWozVDh1em9RWUNzUTA5YWJoeFREZkxqRGFCQlNCMkNVNnljM0FUY2dONWEyRmpBRWdtUEppRmVCRlhwTmxTYkczSHVoQktVOEx4VDBBUFBlOWN4VFUwMEhDNmpPcm8vVGg1S3l0SUFpTVF5dWFFa1prOTRWeTcwWjMzK21oYzVGVzRvTjhSOENJQm9ZYnI5RlZuS1pldlVvaVAzRmYrSlV2V2VRMXA5ZFBRYXNjTkI5Q1lrcXhKdlFpb0xXZDkzUW1hR2cvRCtyYmxaanZUdHlPOW5wYkZQOWVpTEFybFgzSUZJOVB0aHp3bklZc0E2aHVjT3oyOG4vTmJ5Q0RKdjFwRks2eHQ5eFpaUDZKZ0tQL0Y4NUJSZlFyY2xpY3hUVmRMSE9hb2xJY1VBT2NRSjB2WHA5YWlOUEc2RmJ2a2tLakdHMUQ4SlE5ZmZoQnRDRzZEVlRReUR2dExVVWhpSFdIandMNDVOak5tTkVxTlFLM0RyV0FZb3RvNUdTMEtCalN4a3JCQXdpd2RYUDExZGU2WU9EWVZWWllQc3ExV0VlSVBHWlJpbFo0OHlHUkZQRkNBN1I1ekZUcjU3TlZZWGVMK21NWFBFb2dVakl0ZlNNTUxlNjczblpBWk91WTl4ak1ZeFhpZXY4di9uQ3NGVjVraC91dkhIR1FmRjEyL2hheXgvcmdNL0pTTHZmVS9FVENvUjZzb29OYjFOanFCZFd6eXpPWTFyQzZGaHh4bENWR2diaU9WK2J3Myt1MExEdkEyNzMzc3lDb21PcFVUZ3JNMjBYVFNJNWhHWDlHdUpER2thdnpqNkd3UVVzQXlJY0tRTHJ1WHRYSzR4VW5BSEQvTHU0RDl1N21CV2NBNjV0UmhXeGE1M1lKZ2ZxbklCalFWWjRqVkgvWDRNYXp3bmQzQWJXRnVQa1B3dW1nbFVaK2dMNFEyR1pHOGNmVEtBZFF6V0pIMkM3SGNXOHErUWFHSzIzeVA3QnRTQVkrWWwxd3lYYmVRYW1IR3dKK1k2Tll4SDVVc1ZnMW9NSXppK0RVcFpHNU5LK1pPZ296RGFJU0NaVHg5SWFlTjdoTERqT0ozUGFhb0dhQnlIcGhQc0R0QjBGR05TQTZOc2p3THBoemhGOXU3eW01d0UzOEwzYS9ZcXE4NHNyZkFuYUx0MGFEeWIyQ3l4aHZab0pXMmpUbVp4ZVJsam9jMExQdWdJNjBlKy9EcHBSK1Nvc1pVMXUvalpmVGpzRHM2NXprQ0F1K1NuL0VSa3ZTYjFvbXYxRnA4RTBsUEkrWG5KL2htTytCU0ZMaHJQUjh2UDBDb3AwRGJhU3JCKyt1ekJOSjE2VmdVRnRkZXZKNmoxTlA1Y0o1a2hJdE5RR3E1SldHemtDUENwSjd1b25VcmdXenVKQjBzS3F2S3hQSmM2VFg4RFpDU2l0M0pwblptOUZmZFYwRUFOaVc2QUJKOTM2MkU1ZGRKZjN5K0UzaTJTZFIzQWliWnJreDJrVW9ZU21pcXdWTERaS2ZvdTJaaktuNE91K3pqaUY4Z0R1Wk55L2NwQUhIRGpoL1UzUGk4TmlWUm95cDY0UXFZOXh4RmNOMEN0NS9Sb0NpMXBrR2JlZVZrSnVsdm9ObUxXT0thbENzRktEUGJrMkRYKzFIODFFZ0JLVk1UQ2pzRHBHRmpiRXREWng1eE9QVEhJaGFHazY4aXFKZlV3Y3BMbXhuVzhrTGUzdjhEL0Y5dm1aNkQyTmdSSkwrMjZUSEdTNndCbTkrdmVwdHdlOEFhYkN3dUUraHFYSXJKNVRrTXU2MHVrb1FWNXZmSDQzaHZnS0RIQmljY2ZkVm1rYzhpa3hFajErTkxLZXVWME1uUUpQdGd5QmFUem1YQUNFc2ZoSTJEUnp4ZFJJWE5SQnNTYzA2OTZ1V1p4c1I5VU5Wb1daV3BBSFhLZmtXRnNPNXlubnlNbUNRWENHL3ROUXJhUXQ4Tk9VU29RYktwZ3paR0c0cktnQ0xCbzhXMXBkSnBIeWphclZmWDU4eVY3S1orVmxLZUloYXJLdit5YkJYZ0FHNHJ3eGxuYkQ1aVdadkg2QWFTa3dhakZsU2NhMmdiSnFSaExnV2RzNU1ySEF2eFhjM3ZyeWovaEhOVEVjUmIzWDdEMWc3bXVqb2R2UXFFTThrQisvNk95ZXU4MmFFWlU2UVF4MFNNcDZMTDlDU0NTdCtGRXhvT1ptTHgvYlh6WjZ1YWpPU1VjMGFVV1pSd2tlTzZmVTU0Q0FLRTdTQXhYaXJzUHd4cTAzeDdjckRyd0M4R0tBaXJOaGZ5dkkxTHBHRWthakRCOE1QL3BxdWoxQThFT1hoc0NjK3BiTDFzamNHUGxtcUdTaFlNZ1pma1FZTmJmTWVDOEJRbTRrUE41VVpJQ1UxN2xJamhvQ0VxNnNSQnV4OTBQNFZDeTZ2V0lqVjBjR0tLZ2lOMVEyeTVhSlZtTWRuR3NQek5rVXQ5VFB1ZDlDc3hiN0UrcmpMVjNFY1NOeDI1RWRIU3U4M0t3cEU5cC8yM3lCQkFSUlNtckxSUUNGdSs2Y0tOdWNQZUpySVV3TU02V0p3eWpTSWxpaU5RTFRLMmxqOE8xRzlrZUJ0TTdtdjZ5NEVyeDk2NUpRQzZFVmdrUnFjWThYNm9CTHNQQmdIZnBUaG5nTUY2SzFIdDRiMVRXNnJEUnhDem9PQjNlY0R3MTBpSTlmMmR4Q2o4cm1uWEhmVzVvVE00U2FNNWt6c1FXbFhzaTlEWXZGaDRrYkhUR1ozdkNiRjVGVTdOT3dVUitaWjlZWWxtdmtsTzdYV21iWUdoSXF0MVlUSGdEa0J0dExxZDE2QTRpQVI1Z3ZWN29ZRmVGY1dUSU55ajU2cFdJbGFSbVNIdmdhQUZ1ZnVyekhmcDkzV2VoMm1meEtGTWgrRExkRUdwUGVGMlhZSVVvUjBWVlgwQWF5Rm9TaCs1b2lQQ29NZFh5cjNaWStDSTNqeGhTMmNWaU5GdUV1ZE9MY2RSMWtaMGZsUDFzZXp4ZmJoMmFkbWpBMDVlNm92ZndobmZIOXEzRWZESThMdjFGbE9BeitZZFZwUGFlNVdZUUZUL2YwYlMzR0N1WkdBZ1ByaXcyK3hwYlNVTjRSRVdBUmtpZ1YrRmZSQkovZWlLVEVTdm41d2RNRUt6cWdlR1paUzl4OVM3OW9YUkhBblRLQUpYN1VXZ0tteUdhS1ZpTTZKRFFISVl1RGMrUk5rZjh5c3pNdXJnN1VPSlNSSlZFYTJ6cTh2SHdrb0tIcWhLSGZCUU45SFNWbFBmRDlha1RQa0RLNlRyK0wxQkJBS1E4akRTNC9waXZBVCs5WFpCd1lSa2RLTEFzcTRwaDRKY0tkZis4aHZ0RERRWGt6MmlFRHhZTWR1V3JiK0Q2OUJCMEJoYng4MW5iR29IajBVQnpQSVRQRVJpR0VQU296eXJKS0xweTk0VS8xR3dXWjBzVVVxWjRYV3I2cG5WUFhVNXRYRWpFQVRNTk9PUmtCOEJrMzJUSGFtUlNoUWxrOGNPQTltTkNrOFhzVzdPcWo3V3hQYXdSTDhNVnk4WkVWU2FuMGRPL05IeGZ6WjNxM21HK1JiN2cvekUxRVpTSFpBRjlvQTN3MmtGbnpXQ1BXVGY4N2RGN29mZVA4MnozUUQyQjdSbjZRcmo4a3FTcTJVK1BYWFpHbWdscitjSjBsY3psM0t2QWcrYThETVNDMkhSRzg2eGpqYTRyOTUva29zZzZLMXNMREZUMW5MTUhhMDhlUW9rd0kxdFVTYkUvV3hBaUhZV2Z4YUFsT2JZUGZaMys2a2hCNndRcVZkQmQzeTZZcDF3aWYxdUZYK3o0dStSdW5wWDl4eWdudGZnYkgwOVgrR0xVR0E4aTlXaDFwVVpsUHJENGhKMnRKMmVnMTZ6bkdJaXhXTklMY0kya0ZpRFhxQm94NWY2eklXdUl5MnVrNFF5MGhWZDNEZWk5UzB3UE13dGRqNDJzNUwvM1EvdlJBK2tTUHBkaFloWlc2MWF3akZiVEZWMXdoNm5aRFoyQ1F1bmNSdlQ1VTNZQlBZOW04MlFtNVVSenVSVDE1UGN2RGd1TjI4OUxHT3BySFArRDF5dkh1NldTYXpkdVhiVnRTTC90dEROU0lzdHQyMVdMbHkwaWZtS2E1RDc3R0h6SzR1TnduTkRLd1A4M2plbVN1Q2xETGZwdjkyREhWd1dTb1pOTjJnMWNSWVBSeXhIRWg0dzlnVzh2T3RVME5EdmlSUVBNMkZZSzVUYTJ2VjczYXA5SkRCcjhTZXNuVlFrL3lUeDRGK3RNV3g1dFI3Ty83dzBST0FvVllvYWlpTk9oaWx0QkhWRk96a3FmcjlkQVNiSGNqQ0prVGIrNDZ0ZjU1SkYyMVFIbDdwNW4zNktMdVVyUkplcE5mUXYxaFZ2SWdVQ1R0Y25BdW5nZUNiRktzVXJKeUdyWVZYZWFNSERZT2ZzS21hWSt4a3dNZnJsbzJCYldJbGd6dm9PaWpKS3Nac29oVWVXTFFoeWJiSXRtT3FSek1ITzdGNWJRVjRycnBqbzUwN0JqMWJ2UHA4VHVSL0xIL3hGWnZqNkoyb0taMVZuc2g2WE4wVmVLbnc4eThlWnZRZUVJQXF1Nm5WRjA5MFJkdVF0WitzVlExNDlwRXZkMlBuNDJWR3dNcmhocEovaEtjUGpueDZWQTFxcU9HcjRiNTR0RUhFZnFpcHNqc3IxRU5DanUzc1NNUWNwQ21neE5yWWpXczZDVEF6cHpxMUdwRjB0Z3BneG05QytoMVZlVVV3QnZjQUZnbzJsa1hmc3Z5MzhjQklkcEtnRHkvQzA2QkhIQnpIbkpuQnhocWkzTEdoMm1XYnBpN0x2QXJVcHJ4cmpKUXhhZWtSRHBZcEE1TWxqWDhETVlVTHpxV0xCak00elBNUzFkVXhJajdwK0cxQ3ppTXhlcXl4bmtTZHNZaEZrV1JLTnV4OEdTWGMrY1Z3aVo4aGV2Yk1lM3pFSG1ETFdndTRxajNRbFI3VnN0OENoNlYxZzBqeXcwR3BDRWpOcHpNWFRjaXRlN0RmeFg5VXM0ZVpGT3BJTGdBeEQ5NVdXMm00dVAwZm1rS3Q5WVpJa2o1M0ozQkNiL1lXR0plaTdXZHl1em1sbWVHTnE3Ukl5RDBrSjk2TklCMGhRQW9uUkN4ejk4UjFTZEFHVHFUUDZVSjJKSyt6R3B6NTlja3U3UU9hbEdlV0pIUE5HbUg4Sjd1Ti9vTThwNFM3YUJVK2d5REd3VWdHSUxlYUpOVERiN1REN0JyMk95UjA3cFBhd0ZuUnhUSjZjWmRMOHA5Vk5zUkw2V0MrOURNL0RuWEFtc3ArZTF4TVIzM29reGJSN1o3em9TQk0vMld2S3NjblJBVTlLVjczVjNjL3lMTVcxejFkY0VhejYwRXdmU1YwU1dMTWdHM084a0FSOFMvOElzSWc2eEFCM050dStvaWI1Z3k5SHdETlZnODJrYkdueXIwbWw5THo3SCt5TDZucjEzSEdOQko0TGVyeHh0K0taVnVTdUlyblZuRitaMjFKNldPdnJydFZVR2FsclJ5aVRoWW1aYWZjaUpQRlNjams0c3BDc0NiOGhwLzY4N3ZWOS9xUkZ3ZDNoYzhXQVdrSHgrajg4dHl3dVUxajQ0ZmtPOVo5dUI5UDg0dG1HU0lMTnNReUpLZlNqbTJueU5LRmo4NjQwaGF5MDlzRXpYNm4zUFVKT1FXSnFPVWxYWVpYbzlDSFNLcWIzL3FpVjF3anQrZlFhMjRtVnZzdWtDZXh3TnVCdlZzcDFoa0tjajBSL3liUGdIeGo1RHdOaXYxVm5sWkVaZ0JWbzRYVERyWXdJYzFnaGRFRzBsekxWMllFUnZiK1hNVENWRHNYazd4QXBPYitRcE50M2k4dEdXVUxhVVk2Y0JvaGRpSG9KSm5TTTQ0Ti9OeS95dzdaTldZQUpNNWNtQXRJenpOSWxMY0lyQ1BnNU91ZGdlUXhoR2k0NFlNOTN2QUNuOWJDY3h0OTMzZ0t1bHdGQnRER3hmcFFTS3E2SldSeUNpUkduWkRubmhIVmhjUXo0L1krbEd5ZEtYb3N6QzcvZDlFSkxxUnNLU1djbVNJa1pMOU9nelhOZ0wwRTJXaXBRc2VKMDFwK0tEWWtlOExudTIzSXozNi9RcjVaM2tJYW41Qm5yWGppM0hXTjVKK3dzYkl4V3M5bmxXamNqaEpHcFhGcnZnMnB5Q2hwNStPb2E5UllrdTBwMG9ucHhRQVpScmw0QlpoYmRRYU5EekZHeXQyTks5d3p3UStGeGhOQ01NazI5R3hHVnlhaldubjB1OVJqQzJBZzhpcFdjMExyajFSaDI0OGFSWVJFbHJRR2dROW9LQ2xqZWowK29Zb0ZrVHBKWTNYemZQOUk1bTVSalNyZ1ZDb1lIcDBZTWdoT2lLQ2xKNGdwanNIYS92VFBYNmNGaXFpOGt1RFNydGZjenNlVXloSE9OR3lXSCt5ZHZ1WDMrMjJhanJYelJITEFZOVBMZlFyblN1VXhCa3UydVlCNm5vV3VjWDVJbFBTcURuc0M5NmlaQm9Gb0w0YlRram5rbTNlSld1NEY0MjgweE9HVExPNWRUeXl3dmJmWDk1eTJhc3FjU0R3UklVbEV0TnFiN0Jqd2RzNUdvWHBEZ2kxV2JIYjk3RjhFY3JzNXhGUWtPTjZSNkUwOFB4SVZYRkI1ay9JeVk1WmQ4TG1BYWVwWGltMytNbExYMDNlQXlsbUNOS0dQaGgwSlJSVUpBSUk5dnR2ay9uY013b0d0a1VCRGRYQWpPdEo5Y2Zuc2hHenVHTnBzQ2d5aU1YcGc3LzBkT1JhaEZWZzFnVml5aTRkMTc1K3grY0xxVG0wZFhxRlN2bVhWNjh4a2xEUWZlNDlVbHZWbGs0RnAxN3ZZNVBMYjdTQ1lzcnZuMnF0VXJxVWYxU3BCYmpVa0FNeElOeTFNTTJyejNFeGFFTGY5TnVXQXFhcXVVV1BEYjl3d2I0dTMzc21rN3U4dFNnQnhPUGN3RDRHRGF1TS9CZSs3RytNUkRoZy9WM0ZkZ2t1dlNwY0NMcE9jd1pjS3FtNHBiZ1RVazdBSUVaY2RVR2VLaXpQNG9UbVpQRjlyM2RhMWNiOXI3S0VldE1oY0ZBZ3diN2NVZFhNbjMvbXZOUkJZOVh0VlUxY1g1YmF3dGFjcGJ6VWlEVTRZSWtBQi9WMkdwSlpYU2RyRU5xOTNjdjVxS25udDhLZ2tJMDFNcXNuTG9DbTlOblROb280cEhJUDFXb29BVGp0RWJva1dhUHMwa014K0JWZmF6WnJuais3ZjZ2WG5xTmlXUHJyWHVxNjRjSGZjQzMwTzQ3aUhyUVNPMFJDTzdXZlZIbUpNRmpnNHBoK2V0UXQ5Qk12UUd5c0NUcWdTckQvcUdnUERCNldSa1B4VzV4ZUl4eWNWK000SkVxQ2xKK3NmSHZIbWIvbXlETVc3SkZMR1MyQTFtQmZ5VENtWERqZmZGS3ppS1p6dlF5eWxMMzdtNTQ0L0Z4eE9UdDlja0cwUVNRSEljQWtQeDFaTDBkYU9lVzRrUUdjR1FDaVVpMzNENzNtbWhUTEdTcU1vOXYwMHFuWlZNLzY2ZmwxUkZncGp0aHpaRW1mRmpXaDJONGoxWk5JandGWGRjRTJDN1VyelBpM2gxODRUTjV2TFFmZExEZEJxZjJBTjZwK1Z1ZG1CSUpONFZMU3hldFgxdnoySnJjS01weGVJTVh6SXplUkRDZng5ei9pbEtsM0l1Zk8rZ21hN1BFTHpmektZSWxET3ErUStpWUhKN2VJNSsxQzFFdSs2Wlh4bjhUWktuOENnWS9MZU9rOVB3eTR1N1RNZFh3VDJyVDVDOGxUMHNoSytxTm1MTXBvbEFPd0FrSVZBYysweHJUZHQvZUFZSTR2UzNNMXNId1N5L2xSQXpqQ1NoNVBBQzlQejM5QkVlS3RweitZNzBUcEJjVnJMWTdmQmkyclpmRmNMUm1tVHpzZWdBVTJWR3dpZ0YrQ1lUNThjaUhPaC9nV1QrTjUrNXhyemxDU2dhYkxDVWVoTENJZi9HQ0lzM2ErMDlOeWo2MzVDQ0M4NzdPTWpKNlhUM0NNdTZQaHk3SjRZeHh4WkFHTlltemFNN09UdDQ1UUJvYXVMb2J6aTQwckJMRjZRbEVSTXVkaHZ3OUgwM3NSMjBTaVRLczlvMXpyKytpZnA5eVBjeUFRLzU0R3JQRkg2SitZcVFLVHBYZTJGT3grSVRBRzJYeURNNUJ2S0hqSm1zWlV3T2o3U3c4bHRYSCtxN2VvWlhoZDNVT043UXlEZVhveUdHWlRMbTJzR2tQeEFyV00vTXl6dHpQZE44SEN6WW1JR1ZZTGZZWE1MU2hJMFh2cTF6bnNkUkIyMWVvNkVtU1lMY1VTNGFDanhkRDRtNDM2b201dWpiam5USXhDV2ZEYllyVWc3M3lsK0ZKdGxhcm9hSlBObFZiMEtYUVlLdW9CZkZEMDNmTmNlL3JHSUo3ZVZLTVFtYUJLK0FVTzdmWitRVzlNWnIyWW9jTVNneGIxT3htNi9Bay9teVFWNWtQQ29CbG03YXRiekFMZktINjZEZUxuakZyeHZCOEpoMExCY2F5WDEvMGc5bVNVaGI2RGpzVXBWMkFPMStWelNBVFNNVmQvOHg0RUtkcE5TV0FkM2cydm96cmJyUUJmQWxValY3WVIwK0wyWnNtQ0FYamY5UjJEMytTdkxmOU15QkdqdkFVNFR0Z1plTDd0UVpldVJOQ1diL3pEdjBzQ0d4SDRjZVVUL04vTzQ2cHM2OGxUVW56QzMzbmwzRHNmYmlPVW5PL3lmV3N3TFVLSVBFc1BKR3BjRndTem8vMkowd3NTcHlqS1psZ0ZOeVQyUE5oZU8wRWZqamVaOHE2Y2o2OFM2UURRU1NNbmpBZEZiMHdWeE9KTHJFUjlrSUpNUjloSW8yOUVnSkxSVXIvNTJjVzlwWmxIVzZ0ZHVwUnB2NHZKbUFISzRDNUlrUUh2aG4zcjVsY3V1UUREUWtHMEFkRml0Sys5Vkt3Qy9FSTRNbCtSbitmc2YrMXhWK0ZKNlBoVmgxNndpRXFOc04vT3Q1MGFlTU9BZmt1L3liYnlIZW4yLzJ6YUlCYmRFeXd5TEhlSVZnUzFWbW05aUhmVklRVDVFdnhocWI2MFRRNitLWVM4UWR6S215WEtDNHBGSlZrNWFkNmpnS05XazRtbGdCbVNJcDlOV294S04za1VXdEtUVGE3S3MxT3pNUnliMmFCT1IwN3JFSm9nRmhzazFwTzRNQVJKQmlDWUI0VWZFWlRXaHFhZVFGcEYxdXg5K1NLWktwcUxhY0VwSEEyU2VpVS9OT1ppNEhiVzRkYUJyc3dGOG1iRnBLaTF4b1ljVVpxVXJSVU4xMy9tcnNaZTZzQ0I2MHFDVWtCVTN0WVlUa0xKaVBHMVpoa2oyQ2RPK3MrMGpTTHRURVVRR3NyZUhvVDJRbG9yVkx6YmFQUlhYM0RiNG5TUENwQnM3cklId2JQOWpTZ3g2bW9uR3R4NmMyYTRSL3hCMVlycnpNdktialVOSlpBdTlVb2gyazRLTWxUcitDQ1pxdElMbUFWUXRUekZQYnN0RlZHdkNDZlJEYmNYRDlYVi9XWC9WRXowMkdqY2Z1NUpJc24vNHRnR0xObTdwSnhxeUptZ1BuUUhJRkl2R3JZMHBVc21ScjdSUkRvRllSZkxVR2xvY2JUdU14Q2pFWTFtM2hEZXI0R05uakNoV3dIQ0thaEo4a2tibjZ2SDVJUWxucmZQaEdWL0g2Q1pvMHBaMXowU0VqcTdFaFJuMjR5dDYxM0U2QzVTdm9qWkxPUi9TeWpYS1Nha0xCUWEyMmUzMzhuOE5Ea1pkdGJIZmZRMHd5V3RlTUs4dnNENjNNMTRJTW8xYXdGZWlteElMNWVUL0ZNVjBpNmdlVmtidXY3R24xSGd1eENESk5YZGpGeStmVnY3NVBPVWlGWWZsME85amdiT1ZCb3ZSejZGU2hBT21qcG5FTXRXSWhiNEEwYlhVa3ZFY1lUY1NOTmJGOUdCUUliTzhtdjhjZmVSL1Fpa0ZtRHZEaGYzVkJZU1FPQ1ppTDdXYkJzS1VIZjFLUWFzYTRMdjlNNHdCVjJ3RnJOdVR2dDNaK0lRRXhGaDlhYWpVaElDNGhNMzhRN2liZTRTcFhBbUUyOXVFTGRvbkZqczc4V01wZy82bTdpZkhVUGJzODlkMkxoK2hJdkpvdkRBd0k5bDhlNlNZbVUzMkZNUjYvakdQMU5xVDBOckdyNk9aTldlT0ZjWWJvdWw2WGE4SytLbmtBbUl4bTlaemtYTVNORHE2TFZLcXBiUmxzcThiWXRLbjc3SDRqZ09EQk5PTUJDWG1ickh2dVY2aUhValVkSlhVZE5Qck51RFdCcUYrNXczRGpocElIRHQrMk1sNVIxREVnRHlka2xIWG5nL2JxT1JXSHpqYmtmS3kvVXFNRWh6ODBHTFg1OVRDQWZJMXhpTi9Tb2txdUQydGNZR3A3aFRPbThaeVpkK2lHU2pIQ0UzNk0zbWhPM3d5OXY4UkVFL3JybVUwRm9iaFlZMXRTM2lsT0xDcFZVTi9MQUQ3d3FLYTB6blVFejFKMnlSTmFGQjdRMmI4dkM4aEhIS3p1MnJxNE5VcVMxV1kvRTZiUllBcWx6VlFqcUlZdGUrd0Q5azhkb2tFcWtERnRoWmEzZnJ3Z1dHZTR4ZGJSVHYxYzIwU1dZV3FVNFIzU1FLRVpsQ3dOcVpvVGZKVDhuQVVQbE9uYURqRnlOdGpiclR1QTFsQ1dCelBFSDhMNURKYmJnYlVYektXTGV5VmtmQThaWVQyVFpTL1Rwa1YwSGdDMkl5MjRTMXZIVzZTNktaV0x5VTk1UkQ4R1gwQllRMkRPaGxDbURoSFRnanl4NmVOdTg2eGVkRnhYVG5LQlpvcGRUUkJ6YWZLdkRIeE43aEdyWVBsMGVyZjh0MFVwUzZpWW9SZmNDaEdJbHI3djFLd0p4QjJIMHBBc2NxTXVGWmNYRE54Rkg2Y0l0TXJDTjZCcVgwMklMeXczOS9jbGRLR083WGhXOWNlZWFVbTE1VEtZbUEzakxwbGF3Rmt0WlB3ejFCaWRNU0d4OUl1VnRNaXdvbXg5ZE04a0VnMmN2bU01QzZYdFZJRnNMNmdDMlJhblBENUlqRldxYUVDWXJlbm1yaFp3dTZxb0pxNkpkZDdYdW42R3JuR2k4U0czNHV1dHlMV0lseERaODNCblV6RXpTbzFkZUhXVTBVUUhUWDQyL2VJakNDSmNuNWZLNzZtaUJyVHkrR1BxWHRwTWwrcXpKM3M2OWUvVVhZT2hSSVZqRlJLNVdqVXd4KzN1V2lrWGVrWmQzU203MUJSQ2tWL0FNZ0VodFQwaWg1dHB3dFVSU3FmMkhiNlNsckhsVUZ2WjRsays5RmcwMUFDWnZ5Y2paNXVySk5GWmUwOUtXejJ5Ym11bm5pRi9QOTBjTnM5Z1U1WmN2NXlVYVIvMVZQd1F1Q3ZhVHhlTFVXKzBxRUlNd1dDNGlPR0w2MWJUT0FQNzREbUEwcVJ1TlRVTEJRaXNkOEFOaGRoOXN5VFpUa2ZCWnJKakRaRmQ5bGF1ZnpkbTdMTmdscDViZGxLRU1GSnBEQkMzazhUZzNkTUNvT3BMdzFHcDA2YjgzSVNJQ1M5ZUN6eE1SZU43WXYzYVR0REZUSWJXSWlXMjBqNmJ5VnlkNEtSdE5rVXQwb2Y1VllueTYyTjlUd0RsOEJkWmwvcGpUVytRVGhYdGdVTnlKZ2hXdno5a3NNOFUxWFlyNWliOEJleVpVTEZTMVBJTnlIMnd2OVk4Ry9CdmIvYk1PYWtCSE0rVnE1aWFMeTNiZW16cEg3Z3lLdFUvbXJ1MldydE5waXpjdll0ZHNtaHpoZDV5QXFGbVhveGxQQnQyaXM4U1dtR1R0NUh3by9XVEJJUEdJR21ySjB3L3M4Q1pRbGxFRFVRV0k5WFMzUE5vbENlMVoyNEp1RUdZYktDQVA2TjBSQkx5TTl2OEhSSXh0SGhVNzd0cjJRWkxjT2Z5amptRkxVZk9Xelk1eWpxSGtRZzBucHQwUm9MSzhrRlgxRXRzQ3JKUUdnbmdmRnV4YWRDeU9jblk3UHkvekk1dmxjYndTR01yYU5vQ1ZXTmE5K1NhUjZtV0RNeUE5UC9mbVp0bGRUTEZ1MlJTVzllY1FLL29PeHRQa2RPSmh0RW5xaGdlTk9jZFhQQ3E5OG91dm9FNDRCdTdDTjR6b3BYR2lpaGpuK0U4OUhNNGJMcDA2SjYwZlpxVnFlNVIyZWVpbWF1UGNXVVA2ajlhbHN5UWw1MTdDK0MzcjNycWhsR2plQkxiVkw4aEhSZThjUUpKUHJJVmE2YTRQODA4TkJTY2xJWGlpeVBGaFFXc3JNRmRLVXE4YUJYSnJRMUNYenBIODN0dm9IRnBvMUcxKzNOT2UySGtpK1N4c3djTEJUVHIwMmwxUGJNRERoOUlraXhrM05tWUZBQ1RUQnl0SFI2Y2tQTU0xQVltTERxZEtEK2E2THd5aHBGSy9QTENHK3VXNkRXWmg1c0JCWEZaZ3BqK2svdTVkTTF2cWEvd3Z5cXVRSTFZMWlzTXBjRUM4RC9LMDYzdCt3YWJnbmpFZ3ZMdW9SalY2N09YeU9nRlJTWkM5NFVsbnR0dmlKYllBaXVTZ01DaWRwbW5BOXp1TzdmTXhZUmFhM25ZRDhFb0VFZTNzNUdXL3M3bmlzS3oxMExpY2g3ZTdJM0lrY0MydHRQYWVUNDBiYVZDaG5tSE5VZFBLRjlsZjY1SjhmcC96YkZRajcrZUFSSVlvcmdYWVc4VjlwMUkrZ0pIU0xkK0pQTVFKZWNjNWlNNHNGeWJUWHMvR2hDeFdYdXpKd3ltK3ZlSFlQc205M1dTZnpiVmpUeFR4ejJpTzRwb0p1cEFNekRZK1Nac08waTRJd2ljQ0g4SXEyVFZmdzNwc05yZDZnOERzLy9XYUNnMnFxeVJyS2REd1p0aU1ObzZla2JrR1B2ZWduYXpUa0JUYWRnc04wVllBOFdpNmhZTkQ0WDVmN1hVL21YdHRFTVF4eExaaHo1SlBDSTJrS2dJRlBZYjYwV2pIMDRaTTZ4Q0dMdVBqRTZVU0tDbGJBYmZIenZFc0xVckx0MDlIWGw3RUZpTmxCSm9ydVZMZmN0bnNDbWdYaTB6dFpHR2lBNHE4MSsya1BlZXV5NDVWRWtrUktMc3JZOEFjYTBtcm1NSllJK0EyVy9EY0tIU2lCQ0ZicWsxOXNqcUNQV2ptTmhlNUZ6NEEwcmM0MGpwUXl6ZzREVzVTUERudzYyYlZKc2ZyNFJyWWZNRXBKcDI0bW9uQWpObG05OWJGS1hkUHdjd0pRdDNJS3lZdGhTbXpGODYzeHJDSTFVaUtxTnFYN2tlOFljVGxVN080c0NNdGhpR0IzL0VzbFRVdUJYQldLNkdjazFobVJwT3VtTVF2Rk1kTmV3UXNNVFkyWDNOOUdOc2I2Y0VucE50ZFVvNjBPNUV6YjFGaTBHTFMyMXRSSVRpRXlvTmRqNWJ4WGt2L0o2amJvS0pMVWw0L2xYRkFuaS9BUEtvYWxBeUlEbTlMeDd1QytBcExVYU53U0RzOThXVTAxNXZnQ1M4aGRsOE9CNEYvV3NqTDZHNlZXOEVtRUw0M21MbDdEVGNOWVFaOE5vSlpJeTcvbTJuQVFod1VjZWYzb2IwS3dmdGdPdU9FcDlFQ1FrMENJSkhDSDd1UGFuMFdLTFVYSittbnZwOHpXL0Y1Tm9NNFYrdVZGMXZpMXAwYUxuUHlaMlZNY2hWcEJ4ZEVET0lPV1Jlb0lMeEpiZk5tSWlvYlpqWGxsWjlxWDNPdEtqb3JZWDB6VTlkUVJ1MmFaa2FNaFR1RzZOaHJQOVJTOXZEeHlBWG9XMlBJUFpGSmNycDR6V2t1dTN4QUJxcWV0UEZ1ZWcrRWp4UEZLVFNRNjdhVHRsY0l6Z1B5S3F1QlRYOFBPU2R3eWVmeWhzdHdNTStkQlhlOXRCK1l0YlB2UE1CV09HU0ZKWDlWek80OFFSVUNERFF3R1lUbGtuV3haeVhvaTRnVVZwUXprSXBybTFOdjh6dGRGYmUzM01PaEZIaU5FaDFwMjhZNzNxeDhLYU5pZ1JtY2RkL1pWckFxZGtVWkNIQlloUVkvOUFWT3BPcEZLYTR1TVZXUmw3aFUxbE8vOThRc2I3Ulk2eHowZlNvMHpzTldaMElxUWt6ZGg2RXYwZHZva3RiVUlPWWFsYm0zN0xVblQxUDBSZG9wamgwZjdBd28vM29aWTNUaUNHTkp3RHlGTEZwZGk3U3h0MzFsUWtoSDBxaGx6SHIySDBQUWp0dEZFaTBXcTlLaW9ET1BKWTFJUjVUSjBkSjU0NDhUUTdOam5Wa043SVhRZzBEU0V1Q21kODNLRUxNQ2hFUTFxSnJXL0NCWkRoTFhJQlJLakNxbkkzVkQ5R0Y3cG41cXNoU3hBWFJhQmMraURwOU1sYlJiUnExa1ZneU8yNzJOMEhpNml1Y1lvMVpGd3NnTlNNYlpQNmZ0SVpTTytEdGx1V2E0b3pYL1AwTVd5TEFzbDVJWmNoT1JNYWtUanUzejhCdWZPL2hTMlFUUExVYi9oSFM5UWVLM0xsS1VMeW1FZEg2cE5BdlU1MitIeHZtU1VYZkFiM2grOTJUeE5VL0hsdFF5NkZuTkJQbi85Sjc1Y1NqbTRROS9VOWppcGtTUTVnMERENGhHZG5HdjI5T3FRUVk3eis0UVN3alJpZnNONUY1c1dHcnVsQnd5N00raHdsQ2xlY0lLTWF1SDl5UGsrUWZQQkV1NUJXNHNpNWdPVTRWc0tRMXV1YytBeUNjazUxQkd6c0RxNmZPbDdoYmJjV2xSOWg1c0U0U0FPZTFiTm8zN0lQa0hnYzFMK1pjTzZ2dCsyYVgxeEIrRjlYUE1OOEdPekMxeHlDb21DRWU2OTJUMklIdVlsU0F4QWpQMVVSeUFMNC9HQzJzTDgrUHAvQm5udTlhaUdWV2p6WFJFR0FwKzZGTjhEQ3hBb3UvTG0xcjRCemcza0c1U2dYcGdKQmU0d1hLM1NuRFdKaE4yV25Nc0NsMEFKc3lMeVgwUmJualA1dk5IdEVuQ2ZJTGRibkhLQTBhQi9GS29FcWV0NlZBWXduRUFRUFV6ZTQwV0k2SWRFcnJoNXRleXZDQnd1R2p3YzYxZzJOTDBnVnpXSG9GU09YSTlhV3lCMFljNmFuYjZUWGF6d2pGeEVrSGdKZVdVQVlLYmhzT1lMMFZ6dDZqYzZOTFIwYW5KYVRueEUrT0Q1WU4rNDJhQUd4WFdVQkx4Wk5uODZiQ1ZjVFF6L0FZWnhsUi9wTGMxbEZvemNGYnk0QTVQVDV4VFg1TlU2WFFNajhlMVIvVGI3YlAya3lXYUVpNy9BRHh6aVU5UW82ZFYzMzRaUW0vekdvcjdmSURFRmFiMEJuNFR1YTI3KzJYdWpUckdxSFBnWlBUaTRZMDdsR1R5UXNFeGk5cXRpUUxhUCtMdmxMSzlKR3ltUjZ0SUNQTE93MGd6SEFieUNTbWJnZjVmTnNhRE50b2c0QjdoM2hjVjhLdHFWN2R3NXczSXFjOTJoQk5FUDBPcVFpZEFWbTdkSWZPSG1zRmpHaWZseUdLUXdLVFhsdXU0YzRBd0RBR2QyTm05SXpGakN5Z0VQREpiaXRPaWpxN0JRUDBVYXRCWVI2b25NMnZZNUw3bzA0Z093MVo2Y3RUVkhrSDZ0N2ZGeGxCZm51d0xMY1llZTZLYWVJZ2dybW4rYzljMGszZ05IckRKV0dmYnpXTXJ2V3l2WnBpNXU3UjB2TVVaeWt2VUh2dEp2NG9TZSt2MXFCMWl6QTRTSHYyQXpHOXM4bFVrYnByZEJyUGpxUnI2QW5mZHpmb2NyK3pLRDYvSERQUTBDaHdzZm1rQzA2WmtKT2VzQzlnWEVLaFRRU3RWWmJiS3ZGcUhjNm9mdzZ4Z0dYWHRocVUycGZiMlRiTWJLb0lPNGp2TUU3TStCN3EreFh2YVg4OHBSN0NQRUx1cE5oTldFa05BaUZlckh5ZkpEcWZBQzRZUG84cFFMeDhhR09jczJRc2ZDSmR0WTN6ZEFjVTA0c0FPb093QWxKcGFxSFVSdFhuNjZwR0VObS9HQ0lTTmFnTWxXdzc3QjRSL1dOLzFCYVFtSUl1K1NyNEYreGFwaHFKMW1pNVcvdERMVVZQZTk2NXdxMEd0TXpOcFI5TTNZK0JjYUhUd0N5Tm5XM3dqUFhLV05Oa0l4dnhxVkVKaW81V25MVmhxV25mRUJnYVFsQXJIUHllQXZ1MnJKS3B2elVBQWp0ZE9CTXpOTHk3K29uZW0yT0pjTEhXOUFsbnVKZVp2R0s5Mlp6R2toQzBENE5Ca0htY0hXKzdFbFZrMHZPN09aNmZubXBFYzBiUjEzMWc4TTc4K2dBYTBaQ3dyLzZpeDJpMTBKV0EyNkFWOGVaODhvT21FYnVsR0ZXaWdHcWhIMkNCS0prR2dhQzV1WW56YTczSFB5UEZQYjNyWXpZTlE4Q3FNWWRyY3NDWXFxRGZTUkkzV0dHUmFXa0E1d2FsbXd0NDNWZ0ZrUVZLallZdVYwangzR0U3OHdXa1EzMElsWGZZUFBwRGlIZ2RVa0lsazJ4aldzbTVTZUZtVmsvRTd4VG5BNFVEVnFacWpZZXlheEdaMUd2dXlXMVJGdTJkdk9xSWQ0ZFpiTUV2QjFnR2txWUtyL2sxemIyTWJkZHl2d05VTWMyeXNReVJ1VzRpQll6UHBsMWQ4ZnJlSWZYRURGY05QYW5DMERrMVZzZWUxakdua0xqRWJFTU1DNDZMRFg4RkFveU9Fb1FKejVnWnV1R0N5cjgxRG5hMlcrN0Z6Zmp5Uy9EWlVubk12ODYrSE1hckc4MU96Ym9EL25uOXRRWmtsbGNVNWVpcytTRGJZRURYYjNRRjFuYlMydmJPdW9zdURQVGRoSVJGQld0SndNSmdGKzlJZ0lTVWg5WE53aWNjOUhHNk9MUFl0NUtNM1RmSHd2SkhneHdtM01EUzlRYjBZeWxYcWtrZ3BGM2d3MUE1ekhBaXVEY0Q1WVVFanJnUzB6N2U5bERWRmkxMUxiVUhZSnp3Q3BXbUVPMERKejJtZjRwd0owVi9nYmVpUk5YQmlDc3JDSWJuSnprVzBkUFk5blJKNXNHUmlDa2h2dHc5eVE2RHVobjhmbUNxZ0hoK3Z2RUhtSW56cGY2REdnVm9yWHlrSE5aTzdJSzBZbUFPWGhMWDV6YnVPTkYwdUh4cC93OGxPa3FpVUV4TkxTa1NYOWVnaDdzODAzbUorNElla3Y4bEpmTUZtcjZLRXFhWjBXYkp6dzdTZU1RdWJSZDFQa3JzKzQvRWU4WjJGdjVvaDlnczEvdE1ocVloMmNYeXVJcDRPWGt3WkZsR0lCaTFoeHV1aFBER0lMOUV0OXZpK0gwbDU4N0ZmVmVkZ1dHK0ZKREZMM1ZPZ25wZWs3WlkrSXVPY2w2dXBwRTZDTHA4MzdsQXh4c1hJOTdENTFsRWhrdjk2YmpBZno0aG9HM0haTFpUNnRjdUNDRVZRL2kzdElqYk1aQ3RIL0NyK0syUytETTlzMWFmS0dsNmFzZ3JzQzZlQVRiMGVuakJYeGVuZWpsbjV1a3h6VDRrOWVlVUhwVDRmd3hhWXRoRS85OHhuMDZCRXZKLzJpRGUveHRiRG85aU1iZzBzei9SSHVRSUd2d2ErblVFUk9yZWpCSmU5V0NIOWZTNm4vYUdWZTIyRjROU2tyZ0xYM1FsYURhcHA2Y3o1TWhJTGs2ZE9EOVdoZHZ2SXpkeWRBY3BHbjE0VUFvdTFBWHlzNXU4TUIvYlYycnFVck54cHVuRXlWNS9Yd3MwYWluYmJjdWE0UGVac25yVk11UDZ5Q0V2TGIyRk9tQ205NnNzUkhnSjZzanVaZG1kdndaMWpBenNiczFCYkFJaSszdld2OVFDdllyVkQ1QWlua1dtUzNpS2xLUVhsQWV0eXdRRm9QUjM2dWdmTXJSZ1dpVnFaNUNObjZsdzB6WFlpUVZCS3NIQjJTWjNJa2YyYjRIOUFGYjdyanBaSStJR0YxMVdGU2MxOUw2dHFEK3dEenpFWERBK0Nma3dLMlVUWUtBZkpaSW9GMGtaQWdvb2ZjMGZqS3loS0NaNTNrZVpxV3kyMUtzNHVvaTBEQlhPREpjNFlkVzl4UGVQQzNCaGVHaGE5L1hXYnk1aVVkaWNTdVZPY0RHdDY5RVBUYytMSFZWcldzRGN6T0ZwalY4TGU5YzlqVTk4bzBCZzZRSW1paStVdzZ4aW9IYXV6MUJmajJRL1A2SFJZTmxZa05MK2F3cGdzd3Y3SjV2MEgvcnY2dUtETDNhTnhVWU1QUFFMSERRaTR6cWs1b0Q0aDg3cHZUV2VGc2dPV2h4bjhxTFVucDg0emUzKzdocDRKWFFsOGtMSzYvQysvaGx2Wk1LV0t0dkl1V3RHTTU0dmxvRXY1TFpLN1JaS1Nod2VyL3ZxQXBxNUUrenkvelRUclc2TDJtdWE3d3FzeVgxUENpNXpEQzZ0TVpCOVFpY2VvYmN3QzZmMzZKT2ExZGk0ZlpGYjhQNmlPRlBXMzM5cUU4bTZxK2RqaVphYXdyWWZZSFM0NmJYL0ZqTGY3SGZaSllySEZiL0ovallVY0xwZnlsWFBoS3lMdUVIMGJPaXVQSzdVT3Y2cDRMNHZGeVpYSExma1c0QzBhdEpjWmJKdlluTGFaTitLS0h5bzE4TWQrZk9HTXJkeE4xdUJNR3VYZ0J4b092bjF3TVUzdElrRFRCUk8zN0sxS0c3bU42VDJOREk1REtUeGNmTGRrNFBPM0d4NHlkcWRjUTFLREZoRis5MFVINzRTYS9IcjhSY1h2cjg2YlR6dGxmN0dhK2YySTN5cFdNSmhhdnEzS1dOWVNGamkyZ1QyU3VXOXZ2d3NOZE5zdmlWczdIajVlS1B0bEc2RUtHMThqbGxXaFhhM0lsZDlxcHd4bzl5N01vcE0wVjFydmxYQUk4ZENLM3d5ZGQ2dDhCaE1pVTdzcFR3NVJZUzF6MmU2QVNLOXJzK1BEMmRIcDViL3Bpdm5nNXFvL014TFpZc09lNElwNkhiM3VtNWRJdkxad0lhSUxadHU0aWMxeThJNlBNSmgzbVMwL1hjMkJ4UnY0TXhBY1ZJNDc4Snp5cytqcTlMNE1LcFM0enZKS3E5R2ZkaS9PUlM5T1hQdHFFdENKSXl6dEY5bG00Snc1aEJMcUhRWUM5NStKZUhHVHRtMVc3eWtGY2poQ0Vuc2pKWTgybm1ONitaYW9vWDRTbkcxMlQ4VWFuV1lpbjVHT0ZOMGJlTnB5NVRLc1F5QWM1UWs4QUlsWUJzR2lMdG16SDc3NWxXTTBBeTZTYXRwV2FONHd5ZlhKeU1ONHM5RDgxc3NwaXIvV3Q5QTZnSU55ay9KaVJTU2FKaEd0SmdOQVdBSGo1d0ZiVUNoT0RiV3pSUlJzNzRmamhCbE9yMDdwNVpjbVBRdXVFVE1GTjJSN3U5azVENk1OQXJ6dFV4QVo2WEpKQkh1RjZWUmplZjc3ZS8zaUZLU2RSRUN5MEs4NjZSbFVERTU5ZnFZUDREdmxCMFFMRE80UEpGYnBJQXFKVjhjMXpPUDAyYkExQ1JYTm9vQTVyeFlFblhpYVZTMVhpbGVydmtORGQzTXd0SU5pck5JNG9WaG5nTWVqZ0JOeTVaUkQrVXRrN3FQSlk0by94YnFWYnVucFNVRmhZM090Q0d4TjF5T3NNRUF2U3lSTEJJVHYxNW5CcDZPNEc4NThoTVNHbTFSVWhWcXpDbmNDTE9ZQ3U3d2EzbUpvWS91R25rWTdzYmdPbktDUS9vTEs5SXA4dCtzclV1VitLblFORTl1VTRFRTY1Nyt3NlR6ak9pSUthQ0FDZ2VOaHllWncxTWlLS2NBTnlvWUpUVUEvSS94dmU0cmU0ME5CeVBCSXhQbFZhaHFWMStXK3VEeWNzQW9WSWw0WXRUQmlDSWxYQlhNOWdpZHVhMjNXN2dFekNCQkRRVkxaWndwWHE0UXJQbHpMbHhUMFV5ZE9hZEI1QzRYU2JpNWVsL3pLY3VYcGEyTlNFeHlId2I0bnArSmxqL0JaSkZNMjVadzQ0U0V1RFlRMDFReitEL1M0L1dyZWVxNlBLQ0l6dEZ2K3BUa09sa3N1aS9ad2RpaUJadzlOS3lLSWZpZjJzM21iVkE0QjJ2c2NmQVE0eUZnNXdmdjUvajhyc2hRaUJSNTd1bGttbm5KOTN2VzE4bmtTMGpyZlhqWmtJVGlFT2lzVVhYU3YwWVRHbzgyL1JpbU9YZFNiOEJTRzhDcndZVTlLZGhrQVdkMGZkTDlzN2pZY3FmTk5CZFBORmREZ1JzeS9RMEFXQXhLWmNtWGhDbGU3b2oxSU5yZjd6THcyNldIVnAxdWxLeGRuOWFWMURHd2JOMzlQZnZQRUtVM1lmZlROMFNSWkJ1V0x0eUJPNVpPUTVmQzdWUWVCUklqUTJac0N5U2FabDBaUVlVeExwZTZac1d2QVdqd2tKempaRFhBOW5XejZBcFFnS0twL2ZobE80cVE1R0J3K2llRUdQMkVEZWtVVURTdTA5WXhjZ0drOWZ1K0RaZUluaVE1VWt6L0xLaFhrL3VCd0ZHZVhMOXVpd2tNVzJsRSt5Mk1kYzFNK1RhdVpRblpjNlpQclhubHZmUTBxVkZpTzNSeUxJTzRZYTJsYWNOUW1BNmlDTXJTV2F4aWdsOEtVZ0x6eWJoTXRtR2x3RUtKM2pNV3NtNldkejBVR0tPOHFLZjFtNEsrLzRQQ3VoQWxSbWJ2Y0xlN2dTamZhT3FZb1FzQUpHVURFUWl3Z1Q3MWUrZ2pmS3ROcElOM1BIcU1BazM4SGszS21yY3FxNS9rL29JeG41Y0k2aWh4RnEzYkZBZEpCMlM0VzJiU2RTeXNCZHhkUXg4VlFVM0xvVzBTbTErdEdKNWtjRU5yTlJzQVVxelUrRWxLNFJxRllpWGhTQnhhUVE4WW9VcmpyalhhNjA0Zy9mdVNuT0NHT2N0MTJqZlhObERIOFdnV3NjZWd0WW5ZS2tTNkxjcWkyWG1MQzNDZ29OWitxV3dkdDFpRGJYdW1zMzM0V3JyZGJBeVF1VDhEQkx1YStCSjhqd0ovZ2NFZXBsRytpNUNrNitGTFlTSGdDYkMveFNHcWtYRTlwQ1VkUGJGUjM1aExDbkNDTlJMYWZBRTl5a2VNN1pOYmo2bmQ0QVNXOU5XUFV2ZlVYelJCbEdObDFESVV0dlJKelIzTzFtZjJqVkJRNmpvNXpBL25OdEtpZklVUS9SOU14Q1JROHpQR1lFb2h4VWZWejh1RHBQcGxLZFpVVERldWJDS21vcGtVbU5saUNOUFpEWisvdjVGR003V2JTMlU5VkJCUkY5WUtHS0sxay8xa2ZZV2ZJTlJpSkZoYlNxOWxMSzhqdDZ3QnRZUi95OVhTWDB3bW5GRytvRzkwNFFmSnBWaEFCaGVWSmhaQzdHbTJza1E3WlJ1U1doajhkM2tuRFZpei9GajRPbzRpM25ZaXlFWTRnUG1ZMmlRN2JPVUlnby9HNERITG51K0NRYTBwdjNJYUxIUlYrZ3FyUjJMbG9XakxUbTBsV0d0Vy92NFk5NndQR0s1V1dEMFpxalJwMDZtbElranVtdmhoZkxIanZPaUl0c2VneXVWcjF4RHFYait6L0JId2hCUnB3RGF4YkkyQTdCdlAxQnIwQWNTbXJhZ1VLWlpPY0c3T2wxUDBFM201a1R3c2ZGSTRac3VVZTFZczUxblJ0cVNPVU9lNFhvU2hmM2hjS25FR3ZDdm14UFRQdGxkNGRaK2RDWDU4MlRoQUJnekpTWEtIYndQTStCU053Y0pTUjREMlJldFl6M2d6Vkh3M0dub3E4MUo1b2g2eUgvaVF5T0ZHQ1lqWHIwR1ZoVytoYmdiNzVwWUI5Wm1XZlY0Z3R2SlFFeEhoMWVuY2t5VUhPUzY5L0lxSlExTmlOKzA4K3BxdGVmdzlNWDd3K05RZ2pMMTBVODhHYVh0OU1uUGIvZWdSckVnY1JRckxFaWxjdldTN09FNjhVSlRFTXBjSXBDaFZTT290eFhDc09CMktaTDVOQ0xRZmk1NUpVYmxPNUZ5dlZuS0NMRklvL0syZkZPcnJMWExodlJkdG5oSHZhUExIRndYNnJ2MWZSd3RuZmxneEZlSVpBMW9jdkU3bm15ckRldE5zVzZRMTFWdXd0Y2U2U3pyRmNGekhRaU1DQWVRUTFIUnFieHhiQmVGUmV5eTF5RmdRWDg3SmZOS0poNXROZWNNYm0zZ3kzSkhKeGlNcHFaZ0crelhVRHJIQ3Z4eDdhcmxOT2FJZzhzZGw3NFdnMnBRclFuZGg2Q3lqR3NZdFNPdGZOMkVJQWlnL2N1MWxSb2pZMGhtSVFiUHJJZ0xLQzN6UUw3ZjBrRWpmeWZwd1cxL0ZBU0t6UlVCVC9uNTloWEhlOWR0cFF4QWtTMzRScHhqUS80K09hVm1IUWZqdG9WcE12S1JoUHBBbk9hdVpZdy9LT2xWcHZtUWVMNHhhcWlSVy8rQjdIK0phQkFEYmwxbmpJRUlZQ0pCL05IdW9hWDR5cUlPek9taXBXWWJwNnNKWVA4bWg3VEFpdXdqTDFYbm9RN3piN1BZQUpTOUNaMm5COWMreTVZQk9xVE9JZjZkMjNoQUhYbmZnYkVwd3ZBdnBUcEdrTFFNUWl3Y1VEQ1R5a3hIZk5uZk1CYWdNL2Q2YTZJSWxGUE1Wc0t5U2NzaHVNOStXeFQxakx6b013a3JvUGFUL2U0TVdsY3dOcTJ1UE1tODFaM1BrNGdjN0h5UFluQURscmd0NVYvcllhY3ZMWmtVQmFSeE0xMnNpQXRVaGo2SHJJei9NR2s5TGZqaXFITzl1dEU3THQwS1J3NVl2T0FiRWVVOFBwdm1YK1hScml1TW9ZdXkrUlBHbEI4dmNLWDlxTUkyMGxqeHBiWW95aFdaeVJ3a3NUNGFGMWVwQkV2MWVDOWtabXB5d2pOdGZ1NWkzNVJIeEcxenhRWElkbS9ZV21EVmF3T2lCMzkrbk5LM2kxQllrMTVkUDRvOTk2eUlzL0N5QXlxYUVGTUErMjBOZWJwNit0Mk9xdU9KY2Fwc1gycU9yTFp2ME15RDhabytmTnBXTTR4c0k4UE9wUDJsVHZUV29CU2VXNytxbWZ1Y1dkeXZsY1NOYU4veVdjUkQwSUdaY2NFNlhuNVNnbTVmaFlzamlpQ2xTYXppQ1dtaXZFNlJRV3hWRzgvQ1R3MXhVc2duN0VTaExIUmRXcmVqdldVVjdUTEh5bFBSUFpSTCtMNVJRSTloTVpHVlVDelBneGRKOGRNK3VzWDQxRkdrNE5SeXkzTnR5dE1oL3V2MzAwQUM4WXNEZG9WaGkrM0tBb3lrS3VweW4yQTR4ejM5dExXS3NjQTRlMUN5QjVnQ2VsSVc2Zm9aak1LZWNJNjNVWk13YjBYc0h1UGlKWmpXeUU0aXQrWmpjVkMyR09ZQ1liVlc3akhXWFVES1ViVTZzazBsS2luckdDYUlyNzI0c2RpZ3dPeWVzS25DNG5hdnFHVllGWU9GM0RGVUhrQXg0UnlrVW50WnF1RS94VXh3L0ttT3ZhN3pHUnR1UG5mbnljcUFQaDdzSGVVTWVraS9zRUFGWTFZaGhMdnV2dHVkbjFSTW56b2NGK3RZSjJaZ2JCb2RGbHkzWi94L0xOaDR0WDlHYWpjZEVPQ05JTnRXTFNXODZoUzRIRE1Bb002ZjlvT0pzdVFEeXhDaVNXcEgxTG83UDlUSkExa21ncHpaRXU4YXhWQTBBVUdXZXp0ZUlFeUFKOFlvQVNFZ0N6TGszaEwvTXpnUDNnZXoxWHZhbWcvakU2aUoyZ1l0T3FxQkxuTlVDeTVYWU5BUHBpejkvd0xsUVZsNXFGU0NDenJydDZJNXFscExrTTZacFQ5WTBvUTRncThEalh3R0pwblk3VzV1bzVJV0tLcitxZ3ltUlg5UjcxNzN6RmUwM3ZERm4vRXJES3pTN1hYSWthWkxmS0d3bGwrNHlGUTFON01VV1BOYnZDYnZhbTZRM2wzemt6MVpQbEtWSGFGVTRHQ1RRaFhOYnBMY0V6T0Q3RnJJbFdzblcvaWJ1eW1qQnBaUU1mTEJsQis2YkRQVFphalJRdUY4cnBid21OM0Jaei9pekdHYy9BVHliSlFCZ2g2UkxUMm1jSGhqY1d1U3pkT2ZieXl2UVJweXdPZzRPMENBdXh4ckRMR0VCZTJ4bHA1WkVBaWxQckV5aUdzZUNORzMwTERlRGdEbkNJNnRIeUVzdkFLMkFtenRhaVlzWTJBUk54Ri9acndYS3FiNVB0bitlSFZycFdLN3JRU1lKc1pseU00SjluTjR4VTVjNy9NcGxUcFpud0VrRWVCTGpNMXZQNS9TTGczOFE5S2lJd3V5dnQ2dzBTcm9IdEJRTnVyS3V0VkFmeUZVZForNU1XSi9YQUIvMEZsZEkyZzRrZ0V2VXRsVVQzOFVReGVxdHVRaHJuNDF6RnBQeDF6bkx4RDNOMHExbElGVkdzbnkveUNFR2M3dWVIZFhZSGZxcU1GQ2dscHlJREFEOURpbHVzeHZpNS9aTnM3L1VnZkV4SEZveHJKeVl3NHZGRVFGdXc0UGJkTXpVWkUxeTZKT2RyZHlwWXdYOXE3QldGb1RWYWhWSno4UTRIN2JJWldTS3JYZERQdzhxVW01NklZNDNUcm53WnU5VmFLWmptTGR4STNmZDBvaHFIY2pid1VxajdEMkQ3ckUzVmUyaU80aWVta3pOQ0l2Tlo5RUdVek9mQk42akowa1J3OXdwdTlDcmVQcDN6a3NacDVEYmR1dUlkRGVUei93cTVXY2R0WDR4VWQ5YmxGUWpyT2c0b1JiRVFxakhBdzJkZ1VXUkgyaTREQXVpU2V1aHAzNE1HVEtoTVRYT0tFSHRFZ3IrQ1NydEJqb3krcUJpZXZzTkxaaVdtQWVVUmEwayt0eVN0NndnTUluV1hiZG4zRXZURDhzaEhZUTYyeWYyLzljdG5qc29UNzA5dVl0QnJOYjFBdVFQZ2JlOTlRK2JrOEI5MWErS09LZFZZQ2p2a21MYzUrYkdmY3FlbDgwNWIvUFlLdWpyTzVYcmN3Vnc3MzZiYXNTcWNzTy9nOGNuNVNBcEs0M0oyeFVtclF4Mlg2L2NMbkdhZUdTMEdDSzJ6V3hhQUJWd0N4Q2xQWVVsVmZZMlQzTHd4c1lSejJscm9wUThDN045SEE5dVZGMFJtbjRIbjZ0RjFBMFAwS0U1a2sxcHpPUUtCcXkrb2pnVGkyQ3cyWUFVaTgva2ZnbGpoeDMyT1gzbFN6TlRTcGJDWXo0VzR3Q1dndThXZll0ZkFudTdvR2I3dW1jYnlnbkJQZ1Z4cCtINU9zQkViYnFuMkZQdTlidnljZXNFWEwzNUZZY0N1a3VoU1plTEpLRFQvaHVCanJveStjRjZQeitSTzU4dUFJV25hUE5YRlhvcm55Ri9LdHFzVkJ3REJibjhIR2tIcVpaZHlsUTNCS1AyUzYxK1VPSUNpclhKNFpxcHZqbnJxbHIvQTN2UGlUUm1OMjRLZG1vd0tyYTZBeCtTUVRyUGNKMzZkeTdDQkR2RmY5b3hhWm91Z0RaRUFWUksrdjFYYjdUbUhtZlFtMVkwZnl3WlBROEoxSEVLYjhIVlZCelZ4dXllMXdzRTErSkxBOGxQekQxNjM1VWdkZGZkMlN6RUhmNWs1VUdIS2JaYjRlS3ZlME5WQVZtV25VR0FzMUZmVFZvOWlOZFMzOUcxd0NHUlN3VjdFY0dQdzJuYlpObGtObWRzdlhqVDlLWTNxeTFJSHViK0JpRysyNkhqdytON2s0RVJGTzhEZEx4TXQ5bG0yTnpNSTVIc1RkYk1zdW1sNDVES1pMOTA1elBQWG1WSWRKUW9UNEcwbUFmanAraGo4MFRqQmlZVUpoSWhWMzVmbFl1azZPdXFNMUpOYmVadkt6dklka2RQblFaYkFRcG9WSkg2VkZOdXBLbFZnWkFXaTExU2R6bXEvVFBVV1dWYlQvYUxNZ0dPRk9KSXI1SWVNb0VjZ0hnTXJOcWVkL01BaU0yZEJTOEFLZndubjNlR2xFaWN5ZnQxL0JmbE9FZEoxQkh6VVJidmZWZVRrWk14Zkh5cW1NT0lqNnBBMVBvOS9TdkdLWnlHMmQvbGRsN0hRZ2xOQTZVd0J0MXFBNGVqL0dTZnZhUnU3RTlYMFllendCSDF5VU5sR3BsWlQzbEZycmZhbDIzdEtOd0NXUmNxYzR2S2RCZTNtbTh4czU2Y2gzbWNWT1pBKzgwZndoaWhmTlcxOGJndGt6cmdVellIRzRBeDlxbmxka1I1NWNSUDN6SkxTTXdWdFNOaTlocUxpelRnZ0dFdGVMY29ucnpmeE4xQk41V0dqNWw3TVFpVFZNdFR6YmFYbkJ6WExTV0RBUnQrSjJ0cEVneGpNZ0lpdXJlSHRZc2RWN2h2bDFqcjZNb1NueVNpRWNSUmd4aStkTHZtYk5LV3BKcnJzZ2N2R2pnS2RPZVptRTJGb3YvRWZuSWVPTTYzM2ZTUUMyYktBemU3THJmSXo0M3E2YTZFTlR5NFNPYWdqbzFGTlVkaHJpMDRtTlhDME10NHlReno2NHNHZFJxSit6SnUrRVUvdmpZWVJlWmtLVHI3bDVqc2ZMR21UNlVWbHpKRTQ0STMrZndpeXBXMG45bmxIc013UTMyeTQvZnFNT1ZNSDlra0xMZVBmSEJQVHFTaGdrczQ5WUtDVnZGSUxaYjlKREZYZVlXTjRIL0ZlOUtuZnNtSlZlNmRMbkdYb3k1VVMzaVhtTzhVeTFlSjhLT29BUGVEejR0b1M3dmFKNmdadWhsREpKRXoyZ2pBQzBoYnpjMHArMlVtMmpFTStrbklSV1pqK01WSlp6R2lxMmxySDRVeUhOaE1oaDd5eFlUYi9jeUd0eVVZQTIxTVF0OU1oMkNwOVVsaXlDMlE5ZlZLUzhZZkthYTQxdHc3WUJXaEhqNXNMT0lRdndNNnZXbVh3ZVNQMUNwMno4b2M3MXc4MTFncHNmMUJzSkl6UnlCR2NmYmVoRVkrTGVNeWFZSzR6Q2pPUG8wcktyM0ljTXkyaG1ldENIUnNGUVNuSTY3R3UrK3hZZDFQYllOT0hRM1FOaWRrK01MQlBGdzFTSW02RnA1di84WURCMEpwMG1UVTNmWTh3Zk9QZnZGTWN3S3Q2b3dBbGFLaGVXQ2xwN2VZRDFYY09wYTJXbE52R0VWL3hxRXMrKzZLOFlYSWdZeUQwb0IwUUxEalEzVkZqWE0rUFRxQ0RWL3ZtanJmbWtsYjgxRk83U1BKSHRWd3UrbWt2Q04vdFdiOU5lL1h1QklUN2VIck9PbjNzK1BnVXFWRDRteWRZb3MzcDdZK2xSSlAzdXJxTHR5WENXUWd0QUloZDBtQ3ZRczdaeHVMK1c3MFFyenZZdGlMWVN4T0JoVWlwNnRWSWJuaE9rUlZKYmlGTFU3UkhJMkExTFFETUhlRkpXbmJhcTdPU2ZPNm1EcTBHZGpnZ1ZUTTNlb0ZGM2sxOUcvWURESHFXc2EyWW5IZzNIdWJ4aDlGM0tJSXBTd0JQalB1NG9mR0lTNUxCSy8yakJjTlA3UHd5YlJucUJZUm9vaHFRUDNMY1JXTkc1bUZaWFVKNDY2djNxOUNzbnlHRlRDQ2hKL0dnWDBvSmZtM1RCUzFWbHhCU0VJTE5uSXZVUCtOVjNPZldFNEZCTkhsUG1sS0FMaU5aU0ZJVndEeUxUeUtjczY1QTVSOGQrQ3kvVkNjaTNIR0xzQndXSmVZM0ppMk1GRWNNWTdUdGcxc3UzRDRBTUhsaU40L0YyOTJwdjVpTEhHRDFXTmFxM0hEdmNjMFU2RjVGSFJockUwb2RmSCtZck9xWFM1RTFvWkFNVmQycmx1RFBIUERZcjNEL1FnMWNnRE4xRUFqb01nUmdob0h4aTdNc0ZueUxUUmpQQjZNVUZWc1liWTJuK0tLbXBBMGJDRW5Fakcwc3g1NnNNdFFPeWtlN0Y2VHV1c21HVFo5VjFncytXY3lVSmxUcGdUbkg5ZktFZnd6TEJPVUZTV3RsT0llTXZxVmJIMTA0MXdPRVhCbzdRUS8xclVNbWFHL1poMi8zdVBiNE9xQWIxcEpNWXp0bXFseWpqakt2Q0Rxd2gvYVYrNUdnMDVXQmJNZzdHbTJFbnFueTJHUjk4blJCbjY4eTFqQU9NUjY0bkQxd2h1TFJvK3BWRXV6TXI0K21TS0RjOVpyNnpjN1ZYU2tiWHhSaXEzeU04ZVplYUFsSXh6cktqd2toWURjY2VCY3dCbUpVUWVuK1h2VlFnSjRJVTd6a3FJN1luRDBMcFk5UWFZcHQwdHlhVW9pUzlkQzRSVmRodnN4ckEzN3dEenB2dDlwdkFXTUpjTmh6OTF5anZvSy9leVJiRzJlSkdBR3FFbTF3bnd6Sk9TMC9OZ2pyeDQ0M0c0Z3NUZnNzYnpUSzlObGJEYzVFdUpPNnBrbzVHK2wvbGZOTjdSTnYyc01qYXRtNE92UjlRT3QrYzUvTTNwQk16L2NoRGJVbVpEb2VkN01hRytrMUhIWkhjNW1yWXN4THdscmtuSW05MlBLMWk5dm56SDg1UnBCVDRmVjJic3FrM0JCSHlaYWtkNFZzTU44aktkL1dhc0RNLzVSb1c0dEhieElzY0RSblh4M0pwWlZTb1h2MXVzOFJ4RW5EdjU0VHpZTzNrR2hRQXBqTXd1WDlzdU9maFlMQk05V2huUUlUUlNnQVV6OFl4aG00d0FKNk5kNTFTSzhGaVJpenFKcFdjYWZmSHF4Uk5QcmEvY1d6QWgrTmVLVEs5eWdnSDQySkdzcmNNTnNiSFZFVmlONlFGQURnL3ZhaHJ3bWtTV1htQ3NKZnh6QldaQXF1a3FmYUtUN25hYkVMem51TmRsNGpUbEY4SFp6cWlQUUl0bm1UOHB5UjVYOWZ1Q3dpUDZ2L0VHVy80SG5sVFJWcUVJU3k5RGMvYzUrZnJQUVRjQVNJSUJaTTNEWFFGd2JWS0cyaEN4Z3RuOFNKSC9lTXZnY0wrNENxSlJrMnJzWlVqTUFZTTJZM2xLZGpZSkdDRVluaEFtY3EyTmN5enFXc05BMUxlTFNZNE50VFg1R09GOVJFL29Pd3FSN3dZT2VmMkdDYUVUSWFzRVpMMStKd3ZmaUh5VUJTQlNlYUZ4ZlN5Y29ZVExJVTRaVlduNGJENFU2ckwxTnpDL2dYZ0VuR3hhMUg4bjhZNld2bGg3TWpGMzd4U1RjNHNZTE02NURJUlA0OUFBMWVVVUhYa1NNRG0yQTdjN04wUW56eEtNdjY3bk1WMU9YNm1kN29UOXZKL0xHUUpNd3pXV2ZHUzFHYXhHZkNhQzU1TTE1S0ZGZ2lNcFlEOGEwRjZjbzhIdytnQU1wMjVYWTRVUG5xRUdrTXdHSDluQlBxT3NnaUFoOVkzTkR0ZE9rWkFVN29CTFM2MzBBdy9vd0NBN1lneGNIYTI1VWdwYjE3YkZYWC8zbkR0S2ExeGl1Vml4OXdTT1Fxd0N0bnVGNTJ2bEdoNTNURENDMm5yRE1pcFBuSmZaUjdKdG93WGZPZUFRc3llUFNNWXdNWkcrd0YxWWtycVdkYnV3b0lKaFlzWVl2QVRpWFc3dktBb0Q0N2lKb1NIQzFIRzVSa3Ewc2NuYVgvMHdtY3Zsbm9kNWRlZHJxSGIwT3RYV2NaS1drWkZqS2YzYWh5d3gyeUhwQU01L3BsdEE1MDQ4bFNEd0JwOXFPZndKL3pCbU94K0RLeHowcmJhd1dtZEZsWW95WkhscXhBTC9LS3NFbmFrWEw4b0dIdEp1RTJGdGM2REFLNlhTV1FuVmZxQXE5QmRsRnFGSFowcFV5TkdUaVY0dEVNUkdwZ2I1c1VGcjNDcUdkblJLNGdYbGxvQWhUZjhBendlYXFBT3M1SzhPOE9TdE9ISzhqbE5ubWIxa2VGU2x0Sk5ONHYzUGNYVTlpS3ZyVzlKV3JBMGhiK1hLY04wS05aQ0ZDdU8wRkE2bXdzRVE2M1NkMTZzSGpRVGRYNVdzSHJiU0FxdVFiUXIzVnFHVm8wbXE4Q29EandHbUs3QjI5OWhMZFdkWGs2N0FLME51ZVNJbnM1cERoY3YyQmFaOTdDNXVDOURUU0NQdVNYTXh1c3lQTTJyTms2bHNIcEJVZlEyYVM2d1k3MDFGcmtsWXN2RnpoSlZVTmpwVHhwM0REeTRzS1R3dUFqOTlXWFB5MUJtOFp6SHpXdk5aNi9LMHVMY2VUcWZZMkVUbmM0YndONWRCWTZRMGxlUUsrT0lVczZLcExRVzJlU0NhelV5S1NnVmZWMHpBdXNNc2tHM3IvRGYralVqN0E4Qk1pb2xNWTM4SzQ1T1N5RnIxVG1QV3ltd1pseFhpcm1HV1ZjWlZzb2JRZGVPSzVKZkRXNGdzQklNYXJvV0RJdWhreGlWenRNUFdnSlljdTdxcHR4REhWZjlod1VNaHloTzZJRWVML2paS2NMdzgvMzZka1hHdmN4dkxIRUFGWmJkZHRlZHJHZ3pBd3l5d3dEWWtyUVFhUE13a0t6SmtFWkYvNkwxcnBnOVNmd01OUDRCUENKMmxoVjBLM2YyRHFJT0k1NG1LcTVxSXNWRlRpMVRTUHV3ZE1PUzVIWHEvelIrYkVEbXIveWk1MGJnNmFFSW5TQTd3MncxNG5jTVlXV2dXZENucjNydUdWdmRpTDdSelRHT3lvOUVpWHl6V1R1RERzSVpVWWFmSCttV0oxMWp1T3pQTXUvNERFN2dnS3pHbmNFN3lFemhGTVllS2JTeDBjU05VSUhZN09aLzhtTGEvTzFzaWtSd2RRUWRpcHptNHlxbTRJTSs2MkdYNmx1aysxK1JidVdFditTMTdMN2paU2loVkdRdm5QZUVnQmVyazR6N2hzUGZUc1Eya2czUCtzaXEzZFFpR1ZuNng1TE1SaDBoRXRhbVdhZFRLcDk2ckFid1dKemhaYjlvSkFWQ09FQTdHejhjdjA4SkRkU01TUnJNY0hjUDdzcjJYUDdzWnQvczl3VjVRQlJDQlc1dUlFTVpJU2xIYTRyaW51L3QvTVR4V1ZzWHVhVUd0M3BMTTl6RG82V2dXTEVuY0tGOGk5bWM0YWpnWlZPNmpoaExzKzlOS0N5VXZvNzBhSWd1MU9IclVQMFpTRU5oMlZrbkZ3SFRmTWg1MTRTdC9mMWxjRTUyNDFLNGYvM3MrTVFBbkpRNks2cGV2NVJ6dklOalRsUnpXSmFyZGdhSVdXTUY0MUg1NEdkZ1p4bGpBT1hkVkt0VGxkVjd2MnFoaUkxem9uNTVWOUMwYk1EbVFvcy83VW9odU0yUUlQR21FT0tIcnd2cnV4UU9Ua3p2bE92VFVGNkFVVkRnUTlYSTRiWUgvS284ZUdDcndEam96WkhVZm1Kemsvc3NTUnNRQkdXK3Ivd1E0b0FubVloQms0QTVKUHNEL1Y1ZDFmTzdiWWpHajg2amtJQzR3RG9vOEl4OC9MTjNzcXAxbE9oYzNQbUs3Z0xoNkNrcjdDTGw3ekFYcXJxZktOTE9tbTBNTWc1bkQ0eHh4K0l6bmdvUjRoaFNSTXdRNHVsRE1TY2ROUFM5OEd1R2pWcC9NYnVNU09NRmJESUxmMHozZFdLbVpUV015d3dxM1ZkUmR5Y2IyVGovbW5UalVVbU5ZQ0VmK2E1czAreXc1Nmc0MzVvaU1EZ1pnTUdmNjRVYTAvUTgwdE9QVUFKSWdlNmd0aHV1UW9DMitSamdiWENJMGFUYS8zekFOeTVkdE5HNHBXTTErT2Q0cGNHZE92cElVVmRsekdNVEhGcmVNblVXaXdRcHN0MEhYS09TTUNQNGlsZDkyaHY0L3IxNk9HR095c2ZXN2dPSzFwVTNuNUI5TnMxL0trYkM3eENIU0MzL2ZsbnkyZmZSVThQa0tleEQ0Q2I3WnAyQTBuMVphbDRYRE1kbTRmMU92RGVzUFBTdmZzUXZpUkVTNWdWeVVhaVV3Z01lUzVWWDVkRFBPSmhvQ3VXMFU5ZmJlaTRLK2ZIUnAwbWcwRjZKMW9XeVptdUtpY3FLWjF0MlZFYzBDbDhYSmVkUnZ3ck9RVWt5ZVkrdSsxNWpqeklSQmR4cmozM3hoSWZnd2pVL3BSZVB2VWViNXBQT0dadXF4REp4dVMxTjc1emJOcnFyL2FVK05lTlZOUU5DZGVxRVJXNjA3Kzl4cVpIMnB1a25YZ3dxNm1UUHJoaTBSMmNTVHJOZjk4c2xsLzE2bTRhUUlSMzJDREFuMDhlSUUyVG1BbHNTSDVhTXRFM0FETEN4YlloTHVSakVuT3V2eXJ0ZWxjeEZGUjdINFlHYTQxZEQrSTJrTXQvWG4xb2xvWjhpL01ZRitqWXNDVlRpb0tudHNYdUhrWHlNOGszWmVrckxZNlVmS0RaUmQvQzV6bEppczNESVplb09xaXBxNHI4cE13VFhDL3k5R3FiS0prOXlrTXptN21BQ09IRzVxWDVLMTdPMkRRRGVpMGMvK2RiUUNLTnVXbnRBRXZRb3oxYTdXNE1rR1Z1V0NhMXVrV2FpRS9pSDdwd3Z4QVlMTFVJQTlHQkxoM0pvRDNGUU5qN3JWOHlOSU9BbTZKaUpYNFloVUJZR2lsaXJzMWI0c0ZzOHAvYkRTR2ZjQXFDWDMyQmZFOFQxclpnRnVQaEdoRXVQVXN6dFFZOEFISG5ZQUp2RWNKMzFjcnhmUkRTNWFEVnJQQ2txUlJyc0lxMFVaNnlraVdlMmluekQ4TEZmVFhET1JHeiszOTJoUDJYRVRkajBPOEZ0NEcxY2hXaW5HWVdKMXQ5NUIvY24vYmhnZjAzL3dqVnptOGVVVFJxdnpDSmN4dVVPQ2crd0Z0VVA2emRRb0NVTDJOek1MYUxBMWt0d0lvTS9mVFlGOWd6NFc0eEpGWCtiaC8yWU9sWjhEU3lsMFVXRG9QU1JKY0d2bms2MjJ4VUE0QnJJK2hmdzhDS2MzU1h3ZUJYTkVXQVhtUHBqaWkvdGRmUlB1MVRSN2tDeHhEL2lrdk1CSFB0S3o3NGwrbFhDMHJqenZGLzBJKzdNaEQrdDZxWGhTVFZndUxmOWJUaG9WRjhaem5SY3RXRG9JU2hCdGlQOUFNdWFoWCtBVnhPU3hBRERXbGJFTFpxNi8vdzJabmx1SjltbVl0Y0RYOWorR2dVZEx5RURId29zSWQrWGVXT1dNWHVBY2pwYWRQY0xEWnhBMHpkUFIvVENXUmFBZk5TN1AvdlJCa3loaThtNEdwaVN3WHUxcC9aWmdhZXlJdjdpRUhyUzlyclZBeXdqYjVuWjhrQktJUUxVMzJmOHliS0gyQVlPcTNOOXQ0b3UyQVFCQ0dMTkl6NFc1Y1JiMkR6ODNQWnRPRjNWOEVWRkZrVE9hMXNJMnNLUnBXUm1GczV6cVhqZUJscnQrSEhka1FzZTJpUGgwa3JRcXpFcTJFVlV0dGl6V1cxbnNZc1RtcFVMWUpmdldDK0ZYaWsrWGsxVm5rbGREWmpoS1RRb203OXhESSt3SWZGaTJ5Uy9tblhJczQwRmhwTndmaE1uZWJoYXdsTXY0azM5QVAybHYyNVNEakpvNGE3QnJqaGQ2MERoUVlicGlhU2lkZ1RMZHBWNmZic21XOFd3ZzVXVFBYQUphUi8wc3NNRU8wbWlOcXZGVDd6K1MvaW44c1BtdlA1cjQ3dk9PMXV4UTBHSFZrSlByeSt0aUs1UFJoWk5XZmNyRyt5N3RaU1ZRRE9XOE9CTVJzaGZlUkEyQ08rT1Z2S3I0ZGZndkR6N013ekJkeVhMa3ZTUmlmUzhwN3dOUXp0L0dwSGlvT0VFUkpDd2w3ZGFNMXdSN2NucWxNbUFtZ1Rnb2dxSVVBL2xGNkg5b3lGODZMdW5LbUUxaUpMa0dISFRHWit3T05hN01LRWRJREJzeHRja0pEZFlIcTBNZ0JydkVCUVVHeTFvOHBEbWVuaXM4TWlzbTMxYXZzV2N0RUEvS1JiZXlUelMrREZORDl5aXloTno3VEMvcGNhOUFwY2lXSDVuaE8wQklmcVhzRGMzbXlmNEdCL0ZtSlorL0I1ZEZXVEFlcDFmVDRwNFBSMGhpRHF6c1lDNXV3REVLVmlZQ1lDUS9nQm51M2p0enpab29jWVpQNXZNOFArL1NGRHZRMG1ZVUptWU14N0xZbkhSNm1abHlTQlJZWW92Rmp2ZjhuMURiakUwbWI2T0UvdDQyOVVFYTNLK2lFcXp3TkV0SEhIMjVzOXpTaUcrSG5PVnpaK1R4VDR0VWxsRVlVZzIxbnhzeDZjbjlLdDkwTzVFc2p3WTVvUFBxODFxVFFyNVJvYUtlT0g4a1dETWwrT1A1azJtVU1RSGMydEtZVFFDNXEyZkRlT2hDUHhFdzdCMnY4cURlMnBNc3B4ajV3d3dQOUNIdER0QWdPMFhKUDV1clZoT09CNTJSeC9kSDZEajluRkdkZDNCWmFKaVQrVHgycDdpUzczNHlNMGxzekdWQ0FtNGxIdEthUHBKWWlyaGNoYnJmWXMyWU1sc1pxeDNPUFJEdmg0Q2JGQ29HeTN4QkRoRkQ4d2RKYkpCMGVYdzFnbVA0cm40L3Q0MUwwZzB2UG1pbTRUNmVEblJ5RWlTT1A5RE9pZGxDdDZtamFseS9uZC9vbXJaM1FKTDRubmw5WFB1VjlXK2Y3Nmw1dWNxcWNxbjc4U0J2U1JodkxqeW5yU3VidjJUa0VkdmdnTlpIeFdMM1BuOVhjYXFET0F0UVNYVmd0VURwRG1lTVRJOE9ERExVM2ZTOGtKbEMxZEFtUVVlWUJhcWZTM3RDWi9DRHZudXExeHc1aHkvU0t0L2FaKzd1NDlQcDFwVXhDMFYybkxaYXRGSm9wZk9BcXVWbnpqTWVSVlUvR21oQWZ1cGtvcWQvMW1SZ0F0WmZmNFo0Y2M2dFdjN0NwRndLSHFvdzJ2WDhJVjB0OC83THprUC9IYVB5UjlFRzNmMDU0anZZS3dwYWczTHM4dU9jNnZKYUpxd3pOSWI5bE9zT0lXZXN3aVJIMlpjUExnZWhUbk02OWRMZE5NVTlvQzRaZFExTW9oVnBncmZqSE1sSm1kN3pDSVc0a1JuSVVGclg2VE9vUnA1L2t2V2tWVytmRUNRckZrRENPUyszS1YzSjJOZzVlV0E1QmJ0TzA1ODhIZDNyQjFLcEdha2tKMDY5aXAwaTFERGFNc3MvM3lEdHE5ZHl5czIxWDRiTlZRQnBTMlZicjkxOHNDUWNZK2FjY3V6ZEYwSFhtc0FIcjc4TGxEUHpKNmQrcHdENEtueG5WUGsvMk9TSUx1RU5FcC9uaUt4L09DeUxLK0RwdDZrbDZPbjd0eGZPdm5Bc3duMS9RS0JZRzBWeVphWXBFaDVlUkJXUDdMbFRFaU5YTkdjcGo3RE56SGlaWlhRNWk4WGRQT1NWRnBTRG5tcGZJMVh6VmJPQklEMGV4YUtjRTJML0RPU3NwL3dOeTl3Sy9lZ3BZa0x3cGI2d2xPVWdqVmxGcUlDQWcreStjMnhnMmZsYzB4bngwRi93UTR0Z3ZLc1ZNalpJYk9qb3N3NmxkR1gvR3RKdmZodkhLWXMvS0g2RG4vQzFkSDB6Y3VOaFdtMHFJZERkU25JaUdBdjByZU5OTTREcUNmQmdyU2FZci9BbUlHZmo5dmhGOUM4WXpPdzhsM09ZNkRuVmVXRlRpZi9aQUFFQUdnQkFBQUU1QUVBQUR3RUlPUUlBQUFBQUFSOEJza0FBQWdBSkFnRUJDZ0lBQXdBWlZHaHBjeUJwY3lCdlppQkdhVzVuWlhJZ0tEZ3A8L0JEQj4KICAgIDwvQklSPgogICAgPEJJUj4KICAgICAgICA8VmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I+MTwvTWlub3I+CiAgICAgICAgPC9WZXJzaW9uPgogICAgICAgIDxDQkVGRlZlcnNpb24+CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvQ0JFRkZWZXJzaW9uPgogICAgICAgIDxCSVJJbmZvPgogICAgICAgICAgICA8SW50ZWdyaXR5PmZhbHNlPC9JbnRlZ3JpdHk+CiAgICAgICAgPC9CSVJJbmZvPgogICAgICAgIDxCREJJbmZvPgogICAgICAgICAgICA8Rm9ybWF0PgogICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5Nb3NpcDwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgPFR5cGU+NzwvVHlwZT4KICAgICAgICAgICAgPC9Gb3JtYXQ+CiAgICAgICAgICAgIDxDcmVhdGlvbkRhdGU+MjAyMC0wMS0wN1QwMjozODo1Mi42NzFaPC9DcmVhdGlvbkRhdGU+CiAgICAgICAgICAgIDxUeXBlPkZpbmdlcjwvVHlwZT4KICAgICAgICAgICAgPFN1YnR5cGU+TGVmdCBJbmRleEZpbmdlcjwvU3VidHlwZT4KICAgICAgICAgICAgPExldmVsPlJhdzwvTGV2ZWw+CiAgICAgICAgICAgIDxQdXJwb3NlPkVucm9sbDwvUHVycG9zZT4KICAgICAgICAgICAgPFF1YWxpdHk+CiAgICAgICAgICAgICAgICA8QWxnb3JpdGhtPgogICAgICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24+SE1BQzwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPlNIQS0yNTY8L1R5cGU+CiAgICAgICAgICAgICAgICA8L0FsZ29yaXRobT4KICAgICAgICAgICAgICAgIDxTY29yZT42MDwvU2NvcmU+CiAgICAgICAgICAgIDwvUXVhbGl0eT4KICAgICAgICA8L0JEQkluZm8+CiAgICAgICAgPEJEQj5Sa2xTQURBeU1BQUFBWUhiQUFFQkFRQUJnY3NINWd3Y0RCNFBBOUFBQUFBQUFBRTVBRUFBRHdJQVFBSUFRQUlIQUFFQjlBSDBBZlFCOUFnRkhRRVlBY0FBQVlGYUFBQUFER3BRSUNBTkNvY0tBQUFBRkdaMGVYQnFjRElnQUFBQUFHcHdNaUFBQUFCSGFuQXlhQUFBQUJacGFHUnlBQUFCd0FBQUFSZ0FBUWNIQUFBQUFBQVBZMjlzY2dFQUFBQUFBQkVBQUFBYWNtVnpJQUFBQUJKeVpYTmptY29BQVpuS0FBRUFBQUFBQUFCcWNESmovMC8vVVFBcEFBQUFBQUVZQUFBQndBQUFBQUFBQUFBQUFBQUJHQUFBQWNBQUFBQUFBQUFBQUFBQkJ3RUIvMlFBSXdBQlEzSmxZWFJ2Y2pvZ1NtRnpVR1Z5SUZabGNuTnBiMjRnTVM0NU1EQXVNZjlrQUJBQUFVVnVZMGxFT2tkU1FsUXdNZjlTQUF3QUFnQUpBQVVFQkFBQi8xd0FFMEJBU0VoUVNFaFFTRWhRU0VoUVNFaFEvNUFBQ2dBQUFBR0FZZ0FCLzVQZkV2QVVPNjhJZE5rMmtDMVduUW5pOS9Ga09aQ1NzTVJBK011MUxYWHAwNVhFSysvaUtaSkpHTXZ4L0k5SktOUkZLWURVQU0zWDdiV2x0a0VuZ09JQXVaRTVhcGs2cnIzTGlPdDhtRTZtR2d0Y1hDcUE4U0FqNkg3UVRLK3ZGWW5yemY4bHJKREh1UG44Q0FBTE5xSTFBSm5pRzRMVWlqQnI2THRubHNOVXBPdCtPWGRIREx3ZWJnLy9BOFpzWndCRGtwcVRJRDI1M3lSaExCeG1KcStvcFNicGxCVFFnTTFiYThia2dOVXBwOTFQcWE4NCs1Q3ZBNmVWbTdtRzlhaDkvYTBoNThhRnVVQzdURThFV3FMQ3V0RXZQY2NkaHFXZjhwNG5xRUNsREx2eFR6ZnlCemRyWC9TZFdVbmUzVG1IeGsxSDdNb1l6ZHhROVpOV2VJR1QzeGNDemhrUzVlZmhjNkdYZmFrd2orUGhZUmUyNWs5b2haenhnTXllbzhVSVdTbDNLcE00czFpM3JxYTZzRXBJS2RQa1ZGTythSWR5eUlzY1JINVM2ZDMxby9nYm5HeXV1MTNhcWhOTmdRTDhabDhacDh5Q0pDeHJsM293TnBwYTdEQllJV2FTcXVmZ0x0WjFJUkFlSmp0M0V2aXNrNnNlL0VUTGpkSlErTmgrZ1ZIRVZRSUZVYVpHSW9oYjZkUzVUekVaQnIzMFgyaElRSW1wcTYwd1JEcXBPWFgvTU9FT1NjNHYzdGJUWXJIbWIwYWpGNlQ3am9jbUpwcXpKOGtpSHNDTXcvdUxRWnlyK3NUK0FrenJ2T0J4VnY4TnRBMWcvMzUzTU5yR3VySmZSZTBzUzdCRWcrZkhqNkNhTnBqUW52WUp6RjRKZW1GOElWNHF6czZUVUM4VjU3bjlodC8wN2N0RHZ6YUthdUNaSVA5NjZwdHFHQzhuVml6NGFPSVg5WFdjTTg2ckYxU2d5MjR2aTA4ZVZyd1JmclhQem1OaXQzRHprajRkR3FqN2lQRjZVV2NVR3E5ZDVaVDJlUnVBOEQ3NVM1dFlWL3JpUkhrNUV3dG0wdkp6cTk1MlcrV2xJQmdUUlB4Z3RjQXpmOVJxaVRURW0xOGtyQmNYcTR4UWFyQ1ZCVEZDV1BVa2l5RG5yZmNvWmsrRDgzR0dPV3A4bGtYTC8yTUVIUnlvdVpjd3UzUmw2L0NvUmxKNDlOc1ZTTGRadkRQWmdjbFNHcVJPU2I4Nm9rY0Q0dGs3V05ISENIZXVsOEtZdmZINUJXeDg0QU9OdzZXWDFwVnllQ1FzN0JhZnNiVXA1cU1GSndTNkZSWXlia2xKRnZ4ZUhONC9ISm84T3VaVGorcTNuTjI4SFJCZkRiNUhHNlUvVklKRml3bWxmcUpMNmRZcFFZa1ZnTmJTeXN5d3pBdDI4cmF5NHZ1emtYb2w1ZndDdlN6TmNjNTFOWFE2M0R3UkFxU3FjdjJ2L3BqTGZWb0RwaGdzbFJoSzA0b0hLeEhmZ1ZDZVJwdWNQdmE2U2s0Tm5IdnpMclJZM3MxaFc0VkFleGlwNDJNR0I4eGxER2VveEtwbFo4dmhYSjJWY29aQW5wTzR0U3dFZlpMcEtiUXJabUR0K1BnclFyTjlpV25HVVFldEVrdEhYMFQ3QUNtZ0JvYWg4ekJUMGs5YU1TZk5yK0U0MWhTRDUyeUQ5MUpvbjYyeTNEQWFXVWZWeXJJeVVsQnJ0ZjNkMm1xNGZaL3dLejNqYkttTnhLRGFXSUJOdTFhcld2Y1BldzBrTHpQZDRHMHlmV1V4NVdCMVlQeW9WOHlOZlFwUVVtN3NPejg1ajdXZ2w2SjdYU1JQNk9IWTZ3cjlKL0luckpab0Uxb0Q2TDQ0Qm9TRllUemJ3R1hFNTNVTEt0MVpUM3pjaStqdVVDbis0NjhJaXNYbEhyUW5CTnk1OExCeHB3YmV3aVJDazNaR2ZWTzh4OG01bnBPOHVhTUhPc1YybmV6cjgwejFyVDlDazBZRkNTWWdpaUVTK0dOc21EUmV6QWtpVUc5bFNQUWJ6V0U1bUU2cmpLM0FWSjFMMnZiVU92T3puSXV0YjNoSWtLU0Z4MUh1TE4zUGV1K24vV2RVVEpUdjA0elVqK0ZpODRkVHFaSjh1OFpDS3ViZmgvZi9LRC9MQVpUeWhtajR2RU9JU29qOTU2WUsvZ0J3UDBJM05XVzA4QU80VjUySDRMdWliQ3g4LzFYTytlWjYvM1hOdGd0ZlRDS0R4SDhMd3BqODFBdHpvbUFuREZKbTYwcDhJeitWUlI1eVBJc1lPaWNHNGx1UVVSU1dUZ1M5aDdHekVpekVranovQ0d4S1RIcGtyM1NneXo4amFlQ0M2aFVuenl6MUtoL0g5Ri9KVGN1RTlsSjgremJySmNQZzNSZGFsWXlHTjJUNUp1Yjl5ODBMMkQ2d0xuVUwxbnFjb2R3OW1kZk1LM2N1NHNnNDlsS0RtZkhrc29rQ01nMUp4Z0RjQ1NzcktzSGpGSnk0cE9QM1dtQTVHdFFrRDNOTzd6VzJ5cWJ6L0ZhSExQZE9WUkJTMzViMzNkbm5OR1NLZ1YveGl4OVJpTTZnRDNWZFZyek9vNWxSVmNXMjFSVHNhQ2p1ZEhFVnhZaFZlR2s1N0g5R0lRQ3d1ZXJZMCtvYXNra081dkJJZDgvbmQzSTRuQjMvUnVEMktub25nV0MxcXRwUjJjUjJ2ZUdpUlJxZSt4eVhFcjJCU1BzVDB0Wk5zbkcvQU1Ka0JheGJxSkdhbktmbWh0aTh0dGVVZmtiUHQzUlVzTW9GTVRNekxsdVhFZFExYndheDhXTTNPd3pKcmVkL0pPNXRsM21wTDNmOXZjQi9tYjdtK0ZUcE91Vm05eDlpVTVjYkJjb240SG1aaWJTY2RROGcvU0hWbnNsL0dNeHhRMXhvdG04UEF6aWlXcWxEdDNtNG5ocis0dXBuRnRWbjBLemJhZ3ZrMEJReU1UMTJIc0RHVGl6UDJMZXI2QnRwVnlacVh3NTMyMVhqU0hjRU11SGE3NmpiRWpUR2lJT01XdUNIZUkvbmJKcE5jQWJKSEJLSEI0OHZVd1BuK2pPV2tTdVBlRDdXS3ROc0Nzcjh5eFZKUk9rUEtWYnI0VUNROXJ1VUlMWjFpSC80TzlWWlZuZkRrWUxCeW9Rc2orRk1XS2ZBakttNGdpV3p4b1dCYUZUWlRVVDJqODlmbkpQdk1xRi9VZEpkeE85alpDWE5YOHNBd0ZvRFNySzV3MzhiL3l0YU9tRVp3dlhteDVRT1MyUHVSNEdLa0IycHdnb0w2Y1BQMnhZT0c1bkJsVFE3Smx5SS9zVDBIcEVLVm0yV2FKTXB4M041ZWF4c3h2YWFpU3VBeTlUbDlEaWNIYUtndWJvcTY3TDdQRUJwZkI1Y3VaSDdhdHFrZU1aNUhHQ3NMSG1WSTQvREpQV3FMd1hTcTBTWDJHeGpvbmFKRWN4bXVraWptT1hCN29NOElFV2dUM0h2ZGs1MGFiNXBmUVhDUEpwTWYxUURWa2JSOTJvRm1LSDY3TmFLd09kWHdnSDVKcFZUdnBkdUkxZmtkTFU5amY4N2lEWnFUK1dMMUduZ3JCTmxIVk1SemJEUG9NTFFRYzlRZ0tGZmdPZFQ1NmZvNDlXNW9EdUc2S2RBTVhrRzQ3YmxXdUZienR0bnRzdHBZTy9aUnBLby8wN3lxY3F4cXZybkhRWkVaREJKYUdKdmJJV0U1UlpMZE0xeVR1YVpnWHN5MGJrSnlTMlNzcExzUUZic2JlYWNtNTdpbDdjQjEyeElKNVZ5Wm1qQVlickRMTWU5UFd4bnpKN0QvajVTc1p4Z2RXemJEaW5jamdEWlFZYk5rbGNsQVBYckEzK2pieHZWZlRXZXpibHRndmJYVkVPUVNDdElZUk0vNVlLTUlGN3VqVmdaN0Jrd29aK2tObk11REVTdXk5SkY1TUtNdmduaXFFM216dmRvRnlhUjRPclhWczdKTXRWWWZBN0JnN1FIOWpHR1FmS1JHSUFsZndrd0dKcjIwWkFLQm5jTUJCTUtGb3dhMDdxSzlVQXNhMGgyQ2xQdlBQZVVXNHNuNnZydkFOVWdoZk9XMFJPZXpoYlNwUkN6RlRSNFlUMjF1OU5vZ2JRaFdQUS83ZnBiZjhaQ3dBMHZ1SzV3K0lmTjZ4Y3JRa3k1YkxHVlRPcnVRNktkUGRLM2N1dlhiRzhDWnBUVWdjL2tqcFZ6Q2xXWndDZUF2eUxyL1NvRVBHSUFKWDduUGFnU0hOYnkzZ0JNcXVOWmRiME9WRGdGdngvUGJKMi8vbkxrbDhSUjNobTFPQjRRSlovRUNiY3BoSVRPeG9XK1lsajlXSDhmREUvYkJvQzcrOTlxdzhvU3p6ekFBY3NEUGQvd29RbVBQOVhDREozQzdIZmdNcCtiK21iK1hvNk9BUFlWb3diT3dzSUsveWJpbmhHcW9Cc1hsR25VUnBjSVNQbkRBTlFSeXpuU3F6VEhNRHNHdFdaWERkVGpBUXIyRU1GUTRPbDZnNjQydDcvK0pRWmtMUmlOTGRJVnVTVjJFNWlqeWo4b2lpMWZDWHJNV1M0WnI2ck1zV2Y4MTQzc0Q0UytJaXhFSklobVVMb1Jpd1RLcGhCa1NtUVFoY1ljN3A4a2ttNExYTGdzVWlxWmtNL1JCMVZid0U1UkhpM3NiOFZXL1ZOQVNBdkRqdFRJWktRbVFaTXVJL2hNUXp2enppSjhnWEdrZ2xhWkJJeHNRS1VubUh2c0ovYk1kb1A1YXQvcHVDd3M3NjNwKy9YOHE4UDd5MlBocHFOellHT0lWU2pTemJlY3VuT1h2WFowMmpJbWw1R2tsYTBYQUJpMVlncitSZVhPWTJxY3BvOGxMSURWbEpianhKVmp6OXVydTZjREtrRk9FK2s2VEF0Q08zaEVVek9NM0ZscEJ0bE1zaFlxMitnUVVyeHZSbHpqK0Vyb1N4NDRNaUppWG5uckhzM2xSemVaaExnZlpBRWtFSTBKc2ZBc093dFprSEdPM0tUaWhyQm5PQTNnL2RIVGZnVWUvTWZrUkVqVW5iUkNUQ1V4UzdEL1NJcTR4QVBvN2lDT0s2QzdFUndnbjV1K240K0syWTRrdGZXRHdEUk9XZnZoTE5kTUZ1UzRTcjhIMzczZElpUE80T3k4bW9WS09POFEvaVA2cGh5dkJocSt5Z2p1ZnRReE5vYXh2clVpbW5UeDh0aVRCdmVtVS9qVFcvOVhRM28wbzhRSis2TVo5c3E2L2FxRExaOXZTNy9RTCtvMG94aWsyS1loK3dwSk9FMTQ1Z2dXbWZGSjYwS0pWVkUwQUh2REpJeHR5RmRJMmdoYUJNcnBHVVgvWEttQXZiZUw3TnNyWmxwejU0bUpWNmswR2pDZGVZRkJIQ2ZRSUpid1ZLa1U2L2VLSW9RWVJoajBwWHJzcm1qdTBlM0FUVWNPZmFKenJDS2FYTHE2WkVpR2ZOcm1CdVZISGgrQzZvYTBXQ1dJa3loclV2aEpKNXJYakN6VDJhV0tRVDZoc2V1aWV2U1pKSUtuUWVwMXlWNWlIZEVpK1N3NmdJQ2RtQVFWZG44VmRuMGNGOFBIMUp5R3AzTGNmTzZBVlN1cWl6b2lhdzhUaXplenZIUUZkN0JtT1U3dG1ETHVYRkZGVjFFa1NiYUZMOEFaMFlNVFJYaCswaEZLU2JSK0NRbmwweU5FQU1lSGpoL2ZIcWhwdGdVREREOWxmT0hqNW1DQ0ZSSWNqWFd6VHpML1ozL082cUx4MEYrTi91TmRNSjI2TFdZK0t0emxpRFVkb2N0ZnpNVG92cVpWVTAxalMyeWNTYzFmZXlrQUd6Z0tybnYrSDN3eU9JMmxGNVZOSVdIcjFtNk1SbjQrOGNJekRZSFA0WXNOWUhMZ3pqZE1rNk9sckZHT1FsTHdFNTVOdVpYanl5ZkhEOTQ5SjlYVTdJUDRqS3RHeTNPVHZ4TWF5eWNUZ2YwSnNEVDRWUUtQWjZwMVV6c3FUYmNuZkFjV3d0NERXRmZTSWNoOWlGcCtreGxERis5UUtFY3J5YXRjZlg3M3JpUUU5NHNuY0MzUGk1M3R1b3p3OWtqbDVPT1h0SHRQa09xRW1XRWdWQ0R4R1o1c2lPQlFhWWNxS3c5N0toV2FBZGYxVVRzL0YySXVKUUJXNndNYUs5SHFMRXRoSnduUHg3dEZjaW5KRkJyTnlnMFIrbzBscVRZSEttSERPQkhPZG9rc2Fnd2lPblRuTFA5QmZNTzJOOC85Q2puMEtRL1d4Y0E0YTB0QzNuR1F4VmgzQWcweTlpT1lZVUpVMzB4YkUxaFBJT0hiRUE5NStMenhwbDZjS0ZBTldmNUtPbmdERTJGWmFhbHNkM0VFeHF1Z2tQbHZCV2JpdTFPcE9VTm1lQnBDRFluRnZEUDVJNlBTV3A3cnlYM29SUFdvS2NudXoyQzdUcGhadUNrcVk0VXB2alRpdzV4NnAwY2F5SkJKL1hCYVBCWng2ZFZGaThtUzAycUlzQjkvRzVWTnE1c3lkNldjOUZ4WUdvbnlvTk9VRTJLeHgzaGQ3QVV1Wm5hY0JDRDY5amM5aEVSSWs1b2lPWE9LMklXdHR5Z3lhT1UwRzFoTEQ3YzdieVdRdUFGMkVESWJDU3dPRTY0VzMyL0FLQjNVRU1DLzFQS1c1YU9rOTk4b1QrRUxjbGE4Z1dhTC95anBxb29FejVuZUU1R251emF1d2NOcjFkTmhOYzRnNkRCVXlXbHVFTGYvTHpVeVRKVFppZHA0dUdnUnNVc3N4QWxIc3NEVUZPUmgyMzgwSnBkL2FZWVlQNEEzSzBrTHBIU3lwOTQ5cGN1RU85QUVXejdna2ZHVUxqc1g5Yzg1QlhsRVdTaEJONHczNU1WWlZhYUlFNWFSTWlPZ3YzSk85QnJ6c3NPeFJSRC9QYzJmVzlieThVaXhmQ0JmMk16Z3dEdHp2YUhTR0hxM3NFVkl6UWRSclVKMXFaeTM2U2luQTlKb25IS2VEaDlZYlNYNkdxMzM1RjBCYXpNbUJnb3FIZ3dQakkzbisyR1pIVVpORkdjUmVSTk9BazVTdk1sZjVlQmVWNTR0SERWSkI3RGRwbXBMNXgrUmRDQzZWQ3Vla1lValU4VDJKOWsybnJVRlAzYVRLNkZYRXgvQTRscURyYVFlM1BkSG9YL25kanVvdit0ODQzUDl5Wmo2Vy81VUdGZURvTHgzQ0pvdWhUeUtLQWhhZHhLME1uUDVSazFIRVJkK2hPa0JNOFBpVmJZWXBnd1JwSUZRTC9SamYvbC9NVlhzT08zeW1HVm5BN3N2S2xMYUx3VEJSZTB4MWtyczhZNklEYU1UOUNmY2pyN3U3NUdsbmtld05Od2NlVzZ3Z3poU3Q1MVJZK09rYUtjbmhQWVJLeGVlOStqMk9oRjBKUHFKUUlzQ2ZoYUYxR0lmRWpQbDlBMHIvWHNnanBDYkl2eFg0OHRaTEEyZStMVTB1bEcxQWlQT0UvYll6MmJDeStZcGdxUmdKejNGd3hob0FaNWlvazd6UWVFYjZUWlFlM2lGNis4QlF6ZGZqQzlPbEZyR2w3ZDB1VEhKQ1ZxbGFhVk5Ea0doZGg1RGowTHc3d2xBOGw5bks5R1AyT0Q1UGMxbWRVQkh3MmFYd1UvekdSVmdnNDJnbHRsOHBvOXcxWGV5WXlhSGFSemhqMisvMndOL1R4bDF2TWtjMFRWdUt5YnZ3ejlYZW0xMCtDRTBLUVBERUh4c0pqZ00xdml2QUV5Y1R5Yy9TLzhOTG5VTzdVcHd0QW0xaVY3Wm5TMWw5Unl3RUV3cVU1dFB2Um5YNjJMVzBRUnBKR09Bb3g1bTRFRkV6N21Id1ZtaEgyZXZVb2VOc2hzV2ttNW52a01kSGVZekxyRjR4N3paVDdid1ZTck9QdXYweWcrdW0yWVQxWXBJa1BTVGhWd0NhaFEyYmxTVnNLZXR2NlQrVlVJSXlFcmZBSStlcDdIN0xaNkl6TlNaZ3hoVUZiOVZldGtxRlRySENnYlZuTzJhTUIrdkdsL1JsNzM5djl3TVlNNTVkcm84RSt1YUtKR1RRRkdzOEtTMUhIZHVXaE1tcEU4cVBwc29KMlQzWjkvVzdVTmd1eWQzclVyVEJPaW1ISnd5Vms1MVozR1NudkFtd3Nra040Q3hlZHQ4SFNNZUt0cmh0L08zYnRPOGhlMksvNFFlZ0JlcndOR01wZGpFb1NlV0lYQnZQZVBKS0lqUUQxQXZuRUFuUStaMGFMQVhSd1pJeVBxbE9kK3BlL2dnNExjRWVMcGNKNjhTR0NTYTlqbFhjdzFOaXg1TXdTT01Md0tEUzhaczIxVmJzbWpMNEJ5czZoVFZkK2c2UDFNcHBTV3hhUUw1SnBsZzlOSVI3YmhLVmtWdUtzTVhJekcwVDhkUEJMYVBvRG13ZjB5cDgvR0FBWEdCWTJncHMyQnB0STJtSVFuRTdpK1F2aU1wbXNzQXFtWmtDR0Rmd0dKVnAyZWEwRnJJaFFBUFVRM3Z0eEQ2Z0ltZXpJY2VjbERVdkc4QitFWmtrN0ExVDluNjBpZWhDN2VFMEltby8zaU02cldtMUJlekJGZlh6d2RyUlBrNlFlb1BucjZGMlNyZDI5N00vcy9pYzRNSDJGVHM4eGF3L0w1cFFkaExiNlNHUFE0cVpLbGpsOWZKOW1ETTlsQXNBMHZRMElIT0RZY0t1SXM0dndycXZiUlhyaWZ1OUhJdUUrR1gyeXlqOVVQSmhValVhOE9ORTJNNmxyamtGcjNBSDdVWng1b2NPSEpVdGVCaWh2a1VPZHREbEdMbDdscVMxRVlPdlZBeC9GWjA3RDI2bkJaY1l6aVZ3RWlqb1FSdHJqNVVOSm1CZVVGZXVHdmltMnFLSklYWllReXJUMzB2ZnNwQStHdTRPa1huRmlCYUMwTnVqK3lteit4Y0U4VDBLYmQ0dGlGcnh2ZmhMdEIxSHI5bDAzTHJIUUxvazdCRFlGQ3hRQnRPUm5UeUFqZGQzT2w2ZXo5YVhtc3FDaGdGeFJuWHBkQWZDV3hRVzM2bmdkWHBjTnM2azMrWGRwOGE3d25Ydi9tcFNrL29kaUN2WEtiUUFFYndNQllUd3Y1b3Y2N2I0UWY0b25vMnRKeDkyRVUwaDlPcnR6YjRQZCt2L2o5R05WSklsL2RUSm13OWRUeUJXdzdOdGRuYzQ3VXhMbVVpbWpCb21jQWp1Y1ZhYjdQRWtzN0JFUktBZ3lmMm1XL2h0endNKzlIN1Bsc1FTZW5QQkYzUW5PV3FRQmZLSWFibEJxN085d040MFREQjJmRytFMnlISDgyMWI0bnIvVEdWSC94aFpSWmErNHYxMGV4dktvYnZieXlnc1FPbmRhSWI4NTUwRXRLdVZiQi9pRFhKcFBLZlc1WmRJb0ZYa3paZDdYZGdnNmRadHpDazgwTitJMHNUQUl0TXo0Y09PQkFNYkF2bDFWaXo4RHBXOCsvNDFHUnFKeXR2L1BXRVg4bEtkZUVFVjhLNTJTZ21ZTDBzenc5L0R0OFpFQ1pXdExmaVhiQzROb0FldFdad2xUQ2IraHVHVml0VlN3LzcyTTdPNnRrdVlGOUtldnFjNHdxRk1UR0pheDhKRWhIUFd6RlNXb2kxQ1JYSEw1WFhRa3U1QkxXT1pralkzZGowbHV1amFiZlo3enJDNW1LUUlraHJEMW9yWmo2M3J6ZUJwK0ovT29vdXZUM25SMVd1T2hucEh6MFg3ZWJLbHNvb2NGalprUWZqRWRzanRQbk1NTkdrYXpzbGFqSEZFSmc1YmM5WXg4dTVlMXhUWEF3M1ZLWU5MWG9MZldSSUVxeThjUEdOallYTkFxS2xCTWhmMTBtVWtJb1dsVXJMWmh1SU8yN3FJYXBMUVN5eWxwOTFPUEtpOW9IckhOQm5BemN1bTdzZ3lsZmN1RlZrVU5kN2g0V2N1STVhVkdBRlVFS3ZSSU12cUdTNlpadlJkQTMwa3pCRjM1bThHKzdWNWhBRjlrN3ZKb2hDTE1FVXVSSXBiaFN6SHU4V0FWNlQ4M3M3S2pBTWVtZUh1am1CZUtLWXZzcGxDdC9JUTQyZzlQbjFZUGROaTNQVFNYTGRRZXFSdU5UVVFwUHhXcjN0YnhZMW91NGNUZzltV0FHNHp0Wkp1YlR5dVZ3a01FTm8vd1FVUmZ6QWdaS3lrMHJyeEhEZjQrK0lLVGRDMDJMN0dmWkYyYUJ5Vkd4Tm5MczZoODNhdFMrRjJUZHJzd0lBZkRkeGZEQTFBWWtubGF5M0tEOWhhZ3RMTFg3d2tuZnFSR1NSbm42cTZVNWhrV2FXK0U5ME5vQVJ6NUtzMEJvM1FVaFc2MjVpVzBOQ2NmVUtIcWI3TFVSSnRYZlRRTUtheG1mK0VDWDZBdDM2NnREYTJHR3NCUy9nc1BuVkE4RkVSeExQQTN6aXI3R3NkcVRkUXVudzhncUZhdWhoUWhRa2RpVmd2MUNGN25QQnVFSTQySWRpa2tFSFNvU28rRENoODNJZXhOMVlyZGhXQWVBTWNZWFZyRlJmRjBLSHh1ZzQ2RFU4Vno5Wmw5K3dOc0dVenkxbk9XcHhUUmZTTlF3ZXRKY3AwV1FUbTR5WXpjVkdZbTZLdGhtYVMxNWQ2Ym9LcWQ3WEs3WGt1YVFsOVQzbHg4Y3pMMWFQRG9RSnlkVXhNRDRNSGhsb1YxWm5UT21WMW5zZTE0WFZiayt3Mnl1VUZxeldmZndNeXFwbTJOVm1BV0ZMakRHN3AvdU5lakQ5L1k4SEZIdW1nN0dEUUg5NUZYTzB5amFSTGlvVlBDNEViYTNHR0dqOGl4b3dmWGg5RWhxS1cvZWgrb0s0UWJWblhjYU5JdHRZZWZWRlZnVFJTV3Evend4YjQ3VlpWdXc2cDVoSHBqMUJSMlIyYnk5U3pyaVBWeXZjbytqNUdmOEc3bjNibGhXN3FjM0l0Si9Dc1dHTkpqbHdlZ0ZLbWlwdVh2bTBDYjVmYW9qYUVUUXBqcVkxTlpGVnJ0Nm4xVnFuOTJ4ZlppTVlmeWNSYWVPbk55c0FxRTI2L1NYcHhaY2FTRDlhdVVYcExBNS9MRXlzanFzSXZZSlRjV2FLbHFGSyswd0RQVjJabnJid2VwZGhRMWdCTVI1dGI4NXA1OXE0OVNYRXIzTWxvMzVWU3lBendKYkhlMEJvU3RRTUIyRW1jZnRUUTE3N1ZoK3Y0Tk1Qd0taVWU0N3JTSlNTTFhPdGwwTnd0azN1dTVGdGM1UWNxRkZTdWFIRUNLOFRWb2JlWHRiK04rcWpMM1dib3BKRDAzZHhZeWo0RVNtcVVlS3dKVXN6KzVrQ3p5RHNBM3lFYkpLdTg2bW5DZ0JYbFFrQ2o2M1RHMEdkVjgzSS9aL3lZS3VERUlabXVZQ2dkM01tMkh4WmFMYmNmRmg3YlNNZzZ3alJzWG1qYnVJdmlMWWdsVGhJQm85SjAwQkhrUlZ5M1Jmb25YUWYzSjFWbWc4Y3NWaUljdWdrbUtuUFVLMVhZN1hyUkpHYVByRGxwY2hDaTFxTGpZUERlMmtTb2VQOUcvTkFLT2ZpamtVUjRPUC9iTjFmVUx6a3QzdEFleHE1YVBpbitPSG1HcjJJMFpUQ1Q0TnNJcXVmTFl0TTZuWTZQNnpRTWVDYm1INDRnVzNaazBnYm5MbXpqY3k2WlUzZmswaUlXRTJnNnV6UHNhbEtUdHp5QzZtK2tNVHJQZHpqV0ovUTJibkdSQ1pVaVA3WmdVMU5rUStpU0phYitkRG9FWVFieFFwL1pzU0ltM3YwbHhLWTg2MytpNzV2Y0dDZ0lqRUJxSGNvRFF6UGd1bzhMTWNHVEUzY2YzZDRvaXF1dzI2S1lpc1VmV3hOZFY2dDEwdFNMcXdteFgrMXJXK1U3azExdkhrbFBJNE5jTWgrSkxXNGFZdUp3QWhIMXYxMmtkSVU3c1hERm5mTEZJMVU2dTlGYjNMaG43VHY0Mm1Mc0t1V3BXRXQwd3hCeW1qek9WSlZXUmx1OWtHZzlxWjkydGNLbWluTFkvUTJiTUVOR0tTTDhCbEk2bHBDV2x3QzBPS3h2VFE2eTVpdHlIL21iZXg5Yk5Bb29KMkJvaURnQzF3WllaQ2NleTNPYytiYVViR1Y3eTdIRU9NTFQwNitReDVWVFIwNUhXSkZpRm5DSTlEQ3U4MGtTL243UW1RbVhNNTBVZDJhVy9uVUdjU2svd295OWNvU2lEQzhDSUxIVGQ3NWNudGcxbjduTXM2UW12WjVvUEszYlpPbEVkd1RqQWZaRE1aWDMvZjFMR0kzR1dEMmhoNVQzZXJicEhoc2FBbzErWUlsUjQyR3lGb2NVZWV1TURjWk9lVkRMNW4vWTZTb2xDcFo1N2lMUHV3U1liQm1pWWcwcVJCOXVUREU0SG0rYUVxc3NBVGlBZExqaFdaYVpPa09pdHpDbmJvMUg5SVhhMlYyR2UyZ1NNMmpicExsWkVEK0JFaHg0MGVEQzZ4RUJ0YWtSRzcwM3gyNGxxVEozc1g3dVFtd0NLTDhVNGNlaFJ0ckRoYlduTkFXTzE0a2lsRlg4TVkxV1Jzdk1ENWtXU2ZidlZMak1YOXFKelUyelZVMnFHNk9xMGdKeG1PeEFlZ3E2YVZjdHhrUWp4MVd2RnFFOGdoWk9iZmZ4MVFtMTMrRmMrYWdFaFoxQ0hpbytRbmozbnZ6MzBXUUhmSHhzaVVNUlBNWC91N3owM014WlNLcnZCVGxJZ1M0OFJpdkJqR1Y2TnlaUVd3Qmt3aVhRV3dTYU9vOFV3U1BTSDkybDloeFJSZEJ0bnNZSWRLc2lXOVVsakZxZ1IrVjN6elZiTnIyR1JFbWkzWlBmT1FtbWFla1o5ejhLS2EwM0dXbjdZQzJ4Q3N3TWhybmtvMmJUUnBMMlA2U2h1TFhQU2poMDduNzBXbDJscXF6RWN2YmpwNGQxSUN1b2xnS2I1SWs1eEF0TmJRbFFJSVlxbm9FMnR5MmIraHhNRnB1RGN6RFhkZG9uamxaKzJjTkhhS1F4cGJOT094WjhaZC9BRjVlOTMvdDZFdzNMd0hWd1ljWGJzS2NmdlVMUUtidmYxOEVlWG55SlA1eEcwNHA4UzNiSkdSQ0tNRUNmeXIvU3c3WnhWUkVSMFRPSkRuTGkyWTVzTysvTHRBL0VlMk5nMkFLazgrUHVDWmxyZkFJbmgzVkI4ZjBaR2UxVVBrbWZHY2NsbmE5M2hqazhUWDZ3R21idTI0YTRFb2FsaHdiYUNDZEdHQWhGaGF2eHBsb0sxeG9sMWdKbDdpbktURzByeHF1dzVFbU1nTFZIdGpmRzFaZXRuOXJUc1R4Z2tzZXYrb1U2OXF3dEJ6RUVNd2EybVZsZmtOOExQOGx6clowMWl3Zks5OUxVb0JQazJQcFZqdGhmMGF4ZVVML2JSY1lReGdhOGZqaVRBZVJEcU9HK1NMUlFaNVJ5MXZRaEFKTGNBUncyei9DYXdJdjljQjI0SitUSWRDWVZMVE96WTYvb3RzOHFQN24xRlJyY2dPOFlnUjRQUkd3Mm5SQWZCaWhxTUt1Q29aN0tWcE05VnRMRVBubnVaK3dvREdTd1dZdG82Rnowc3JqVTc0WTRRN2MvUU9xdkpNWElybGd3TXN3UGFuNVlmc0pzakRNVnhvWm85UlI3SDJqRmF6RjVHeXdqVDJ5NHMwSnRObEFyZGJZTXFZZ1VLcHpPT0dBZ0lDQTV2cGtBT0RranhQWkV2WGlZUXZqREhxTDVqRVEraTBicTh6KzRRQjk5YnZDTFFUUmpuTjNJQ0gvYW9CVld1ZVpZSU5vZ3F1MGc2UmxjcUJTR0tleWJ5OVN2Ny94cUhIcEc4c2NlRjdrcEI0dlJKdzY4b3N0Um15aVZiL0NscExPYm1OVUVMd3htdUpQRlEraXh5eTFqelFtNmxnQWFBUWxwdkNZeG13RmxsVUIxU2t3a2FLRmZybWg5TUJ2cVFwd3FoYWdwb3pwZitWMlhvSGR5WnU0WjU5bjI5cEFKSHRDWEdZV1RLQjNDRDgrMkEvY1NKbmdMeDRRYUI1NklHVHVzakhiQ0pvSkMwNW1STXB6eEZ3OTJZSitBMkplMEV1ZlFwSmhOYjZVQmNNTUhwYXZiTHFackVNZHhkVURaWjVuSEJQTUVoSGdXSTFXWHVXeENGRGxHc0pHMEVSYkFBb1l2T2hFNk8vUEZZbnBRQVlPd1kwMWNwUk83RC81RVdpbEIyNlJrK3hrSWZraGM3V3V0OGM1dWdvV0lkWXZDaUJ6czhndmJLT3RWbURYVDc1Qkw1MnAxSVd4bzNDTVFnZFhwQkpmSDFybVhOUEJNVEg2bjRNcEhXeVNMc2J0ZXZLMTdxQUxpQTg0ZjZmSGM0UEhNVDYydzVBVzFadGNlcXlGRlpNSVhyMGRwdkJGRlp2ZDU1amN1alBoeXlSWEFlTDQ5bkMrNkNpcTNMZFJtOGRLeHhnSmVhTzZCbWNQZDdjQ1dTbzlBSkpYejBnazE4SkpwMEd0R0FWNGJXQmRKNnoxdVRITVVua3U1Uy9CU2tIVmZUeGZlc3RoN3VsL1Jwa28wNENobktPNnNySU12MlFqcHFUM0ZVZERTYVVkZE5wM1NCRnQveFJIeGZPdmlMczBRSCtkUFJ3UWxST09lRDFmNjFjT3E3OXIzWE1KeS9JK1JDNjBIZmVlajA3a1dIb1lxZHN0N0Q2Sk4wT2MvcDRsWVYwT3NsOTB5T25OblpjWGFjR3p4djluNjl6RXN3VjV1SFFJQXUxdlFvMUN5TnVXaUF0SkJTZmxaV2crcTlMNTZzeHpEbHlkdURaNkdsaVZVVC9FMk9IU3Fld0FwNldQajZyVTlYQnUxQjhMUWlja1Q3T2ZEMWhPRnA0Mm4wcGVjcG0vczZXTGlZV0ZQamxSWjl1ZDFNUVE1QnU4RlF4QnpocTF5ZW1rN0hQeTFKT2ZhODJabm96NVpsWDJrSTVvYk9hZk5KdzBpVUoxQXNnZWMwVHlEbkNvQ2t0Smk2YktkQjBMSWhyRWhCaGc0Lzl0SmxMcXNsWEt5KzFnVXVabUFnaDFxZ3loVkJycWkvQWYzaVBNeFlXeURPRTdqckV1b3BHNVBPR1QvcFNvdGxCZjh1dlczRlF4V3E5eVVEWG5PWUZjMzhjRTFqS0xsU1Ryc205TlJiUWtQQUNNd3RCbzhKc3pOOGJDVDc1bjBadytPbmpOMnJ4MHRwWkpNYitjT1JhQXdvM0NVTWtqWGxuOW9SaFFFYzZwL3duU05wc3Y5cktpbHNBVzkxYjVjZnplZ2tvL3NVMVpzSnZmQ21QbnBqWDVBY0I1dG9kNC9RUFNvdmMvcVBublZyU1k1Ukc2ZTIvTEVUZEx6cWVOR3FNMjJPZDdYclJRU1BCRm1CNWZGdHoralJ0ZDVEd2RXY0pUYk9TQUc2aFBNSjVYd3A3Z0l3czd4L00zMzA4dmpGaFFFRWViM1E2c2ZWR1BTTzkyeE4xYkpPcUlVNGcyZHhIdHVsaFl4ZzRpS0VORWNpZEI4bzUvUFpPTVI0ZElUU3prb3pRemN3MHRXTG9ha3A5eDhVUGVuN1duTzZYTUltdG1CM3IxZnFhdnhTOFBpVmN0NlhlMUl3aXlCUXpRUi9DUTdJNnVjallVU2N2c3FGdUd5aHlCNWhJdGNvbHh5NU9oZy85anJzODcyNHVGU04rV3BzYUFsL0p0RGdJVXlqYWtTTWhaYXhSUVN5a3RUeHgwOXhkVjJkOW1rVUlnb0xTRnNnWVV5bnNxa2ZWMmxEL0FzSDFPdnhxQnhTbTZmamxFaVQwMFg4VjVoS2FEdHk2Z2RvWTVZSHYycE9qWUdXMm9VbThvanpuQytFYTdVMkdzRVNXbTA5OEtvbFFLUElrTHEyajlaRnRIM1BPcHhub0paQWExTndzUHYyOFAveDBmVURlVTBSQnZGOWJ4VjJLWDRjclZwaEV1dklESlhYVVBZekRqL2pUODNWWDB0YkEyZUdabGRGaEQ5ZExMWS9QV2JucmZXK2FBbzhlZVdObTJZRE1DalpxUnllYzlxV3FtQkx3UWpYeXZsVnROa1BsR3NROUtWelJDQnlIMWxrTEhxak03M3lVR3Y4bDZCSUprVG5KRW5KU3N4a1RMbTlSdVMzMDZ0OG5iakozNE5MQkJmTHltekNZUXBoYTdkeVFuZ0RRcUV1QmF6b1AxVVBsbHB3N3pUYXNzUWJGV2h2SFI0WGN3cGdlenkwVGJUYmFTVUJNOXc3K1pqV1V5Tyt6cmN2b01RWGFPdDN4MnVGd3hJTmVlRGFiYzFqbDNwQTlONm1kSHFkNUdxUVV3dTZNNUd6UGNTb29tUzBFVGV2ellaUkEyOTRTZmF5dktNbWllTTR3SE44aWJPWWZJT2lKcjlFdUFQS1Q0clFFQ1JsKy9CZ1B1OWc0QjBQUmdQeUhVNHlsUlg3aGd6eXZaOUhlbjh3d2djK3dwczlqVUFEV2tGcGg3MUdNT2tTMG1zcFdIcUxnbzk5YnhDd2pCNVdqdG4zbUxvQjhwS1pQanZyMzh6MEhCV2hVQWRsa2ppdEcycmVEd3kwTUZib0xLc0I1cHhEUGpXSkFDMFZOMkZzV1IxNnhHREJsQk03WE91aGJZOUI1aWhwU1dyNit6VWk1bFkyZjVhWEdvdVZ0eEtlWkcwejBtZGlvN0NzbFhiZ3JqOUlsV242N0Izc3c1NVptR0RGZmZWaXZKOWEveWF0WlhzL0I2MVB3ZDFFVUM2bnYxN2ZXNlNLWmkwdndJZ2UzNloxbWx0M3JXNEZKRGYxZlk0V1g4WU9BeFRrczNjZEFmK0E3dDVRLzE0MkpKazRWaEh4aWJKZUg5czVUQTVIbmUyM20zTlltWHh6NUI3RHB2eFA2QTRoV1pRQ0NqYXVuMDRxM3ZmMGYrcVJneTdRVVZURUs1NUJjaElaYUxiS2ZZWEE5azI0enNTT2tHNjc4d0EyK3p1VjF3ZE9rckJZMEdVSEt5OXdXb3JpM1NlcjJZSlo3RlFYcm9HTzl4amJjMXk4dE5zemg5ZzZGR29ieW9ObmU3SnU0QlNkbFVzNTY2MWtTakc3MHF0dG42SmcyeEpTdXJjeDBPVXhSdU1uVTBLQysvSUM2OVgvcElxaFQ3VENPQW04TUt4dDJpaUZjVThNTHlXeGJaMHBRaEJlZlpvM2JUVEJPVENhOUFpWE40L3dnM21HTWp2Z2hacVl3TERQS1djcitCRHRhZXgxTE5zR0EvWDNWbzlOdGhNdjVGMHZTYXVUVnNkVlBjM2JQWnpkZWU3YjNFZTRGcTVrUW9ET3JaNlpGT1RpRy9DSFl1UjJlMnJLYTM4YTM4K0t2eGEvcmgzamNNaHVya1JCdFk1RVl1NWVnUS93dUpWSVRrNXpGQkxsYnJJR21ZTXRmMWltV2ZxUGpmSHMyY1ptK2Z1bEJZeUV4ME5pWEtBTktvc1lKUUI3L3ZzQ1pvdVhyTHZqaHdwc0duZXVqeGw1OGowMkJnWlRpZ256U2ZqcGJHWUNiS0J6c0pnN05jaEp5bHpyMS94VEhmcmlOajJvd0NEWGlLN0dWMzVYM3YxMlhTRHNIakxWZ2g5b29hT1RNR21iajN5RFlHVk1ZT1plNWpRMU9URkovNElhK2k1R1N5RS92bXFGZEZCV3JyQU92bVdSSEQvWndyZG5PMnpFY0JYL0dFbXBMQzRiV1ZoTUUxZmZSME94WkNXM3FPQTJIK3hTb1Noc2Z5QlFqU0phREFsUVErbzRZVHBrK2dPM29Ia1RwN2VpUWRKdW8wTlFVOXh6THJwdzJ5RDJyZVdGVUtPRWhUd2RNQmpReDdpL3RLcytMU2lkTElBYXZDclF5VVI4SWdUK0gzZ29QZldZY2wycmxKQWIzYmhnRG44bnF2a25vOVZsdHpTKzZkbVJkRmxCZUF2c3BhaXpLWDg4RlhjOVkxcld6Y2ptUWJnUmZ3S2dEM0xPcHR0MEg5ejZUajlsOXZmV01jZHNaanhEQ0FXSURFTHJwRFREMjA0d0lEWXFyR0lCb1gzcTFmbXZmVU5rME96UWU4K2wyWkppOWwvZDEzNm5Qc2ZSS0JSMmoxVzlzdy93QklRYk9OcEFIR2xqZG9HVHZ6VGRUMFNjTGlYM1JzY0dOSzZ2MWpnU09EOVo2MzVmalBiVFJQN2MxMnhaVHduVktzSjVVdGwrR09WMytaMkZBYURjMWpOQ1dtenQyRkZucloyUHYwYVZTVHRvVmx5S0h2b2RUL1h6WHdmcVc4RUxXYjJTcWJpSVFJZ1Azc0VvN1hWU0JoWnNZZXd1cUxxZ3VVNEFOR1MzTnFmZFZoMzFxY3VVTmJVRTdGcGI4RnVZSkFvSjQ1TDZJL2tpWDR1OTFJK0N1VW5PWFdhK3ViY3cvVC9hZkVadGpudHBCV1gvc0xmWG9oeWpDZ1dkOXEwMzVQUFN1dGV6WGNjaGMya1cybTUraW1FU1NnbVl5ZWNUVmJEdTNCZVIxNkNjRjdNL2ZaRTNpc1ExckJkK2pEV2RQaUVML3NRdzM5Zmx0RTFQMk1KZnJhUDFxRS9yYVAyTUQvVm5SOWllVDZpKysyMHV2dnZ2N2RYUGZmZlFERzB5Q2k5MmNmMXh4cGZweHNYL0RSTU5lNlhVU2wrcS9waG9HQVh3cXgwNVhmNS9ieHMzTUlBMVlmMzRFOTIwWXYreXNySUZmblpWNGsyQndFc0tNbXFpNDBvSVdxQnljeTlLNzJyZmtDOGtlTkkrTTFnakIzdkxKc0lKN0NkUEpuem40YTVzbmtGdXExbkZoLzdhbEp1cG1HVFlSSjVWaDdBVHVFQUFsNzhNd25DMVkzQngvSk9ReHMzcVpGVGdMQkxmQXBkOUdNaVNQZElRckxzZzZBRVZJTHVlcDNQS2tGd0p6QXFmRk9oczRvdVBvQ3hwdnhGbUgvQjF1K1hiV0FpRHNNdXhLZnlIdkxGNE8xUng0aHg2dVlyTDFRbUNPSjRFNW5IVU1UNVRqUWdqSks4eFhLait1elVTV0NlaDRXY3k2YkVBYnVHRWRqbmNZNDQ4ZU5EYWE0OThEeHhGTWRlN1pzOThvb1BUa0ZJSDY2MzFUR0VPc2VHQXkyZzNIMlBkNWJvWTEzUHI5akZHS2FPUE9QQjlnWXRPaHpCV01kWm9HUk9RWE0yMVphL3N6VzNLRDVIOHZJUlE1RHlCUTFTeEFUSHlGa0FYMjZLbnovRWhiUzY3ZFVoN0tnRi94NVp0V3paVkJubnpoSURNVWZYcSs3UWhYaDZabFJrR3pRdnRaMFRFeHVNSjdGK2NlTkZOaUMvYnVXbzkzOU1LdC8wd2pGOFh5Um9RREt1TXcxemkwVy9PbHNpaktyeGY4OUFiY3dZMkdQQk5XNXNKbU52TEhpTGRUTGlnV3dRdVBxRDhWeEJOeitlT0xzTWFldUJkZ3k4VzJLbDBLRmZQUXV0S0Fob1JwUkFqMStldkRTWVBLTU0zazRvTkFmajJCcGozc1VEdVNhdmdHNjNEMDkydDl5c05zaVFxZXMzUTYzc0IzR0VzTlZUTXdpUUhMaE9ZVmZwM1dwVGo3bi9zZWg3NlpTeXNXbkRLMmxuOGN1dm13TjUvNXFOQ0U1ZDN0ZUgzNjZOdmd4NllSNHVJei9HRHIraC8ycFBZaVRSMHZBejB6K0FCSEMzRVhVTSs4dVRuZ3hEWkVsWVNUeFJrYjNNY2dPbVlnZU5wTjhSN1NvNWlDczl2dDFxRnZYaW9ZSjV3ZzRTbk5aMDNtS0NSWXRIaTZHa250K09iZE92dGRNRDVWZ28xbWtiUmNNdjhLWHBDOG56d2U0ZGJZdklYU1FaSjIrTERDc200L3VpQ011NktoODhiMzlvZ1lkdmY2V3I5Ung3MjFBTm1KTTFyZVcxOVg2M2g3ckp1d2J0cWk0dCtnRHpIUk1CQXRSN0g5V3VEaGIyUGpQNkE5QUFvd3Z4cmY4NjJiaGhzSS9Yc2wyOGRrVGU4cCsvWXNNMnZvSGh1NlJUWUFGNzYyb0lWSkI5M3E4UXUrK0NEMGw2SkRIVnp6ZDl1YkIyTG1tV1B6WWNEYUI3UnVJT3MreUdMSWZQQnV1MElZV3Fna2lhQ1U3U29hclZLeUppSmZZQjd4K053Ym1Uc25RV0FZQVZpRU5LVnFRU1M2TWxLSTlmRmUyN3pKR3grL2pEV0dIYitrVFpzWDNXSWluRmUxV0E0TlNkeTZRZWs5Q2p3UFY5ZEFDVkdWQ25wQjBtNThwY0FZK0RoNVJmOGliUHZqdkgwSEwyZExMS2hsTTFxV2greTRlUlpRSWVhbmZTVFIwbVV3bXVkcTl5NzFScTlLTWxaajVMa3NyUWgzV2FmRitpSFllcHZ6dUsrRFVxckRvb0ZXWUFvaDJVa0NxOExkWjlNdi9VNElHa0R2Y1JVcUtYVG1lYWtLYnU4SjgyOExUQUJJbmZ0aWtNeTNJSW5yOXNJQWUxWFY0ZDBPWC9BYmt3RXZRUVlFOUIyYmVvWVp4Q2lWTHR4cHU3cFN5Tk1GTVNkdDQvUm8vb2NYTTJRRm9WL1BxVjBUL0JXaFdXNFN1b1NTd3Jkcy9JbklObHlKbFJoZ1RQemk1c3ZJNGhFNnpSNlh2UjhXSEpIT0wvaHg1VTNFVXJiNC9ZZy9LUzdxLzA5QnBNQ1NvTit2WmZiWUpzZHMrVkRJVjBRajczUFlaMzAxWGVRdGN4MVdpcHdPOHo5Uk5vaGhjdU9PbCtWcTRHOHg1L2VlU1FRYWpvSkVHNmE2OG54dUdjOExWdFFLTHJGRTVZeGthZXB2S1hvWm9iaW8xRk9zM3Q5Vk1Wdy9maXZZbmdkL2toSE9hZytsSElrcEkxaS9tMGJraUZNSWN6ZWVsaXhUd05MYzlSZ3U5aDdIZFMxa1BrdWFnUWF1cnlmOFppSkhMcERMQVhqZWRNamMzWHJsMEYreHJIRW0rU09TWDR3WnZpTEEva3Avd0U5UXFXOWxTOWVhZVBDczlMdytEWklpeTdVRjM0cTAxRDQ1OFA1L1ZrZXl3anJtZmltVWNrNXNlRjJLSkFMMFlvemU1UVdkUCtiUWNjSzZCd2JzS3FwSjZpVUZBQk9DU3RQMXliOUk3cGp4TDAyeExhclFPbzQrYVFjTVJ2alNOMDFaRURiRkFHMUhrUlppK2RUbDliUUhyb2w2UlFUbk1IM2xoUEE0NzZuUnAzZjd0Umc4OFZJQ0dpWXpzeThPOUplZUJPeHhTS0VYNE43T0V4ZFlkd0JMOUNoZnRlL0J1dHVnZ3ZCR2dxV1E2SnA2UmEyYTFBbXp0QjM3bDlpYm1DWUUwa1VwSU1OT29OcVJMS3pvUkV4MlhnMUhjd1NUZUpPaUEveFMraWVCK2gySVMranphV0kzWnZqQXNYbzEzR2JRRHBpN1Yvd2ZKQ3dJL1czOGNOdEVTdWFFV2MvaUh2UHBnY055RnBUN1hmQXlhM3FOY2RHRlorZm5TWitpNk5rSWhlV2FmcHFiMnBpSi83eXBSRWxBdnBta0x2dkpEcXRQSzRLa3ZqZFR6LzF1UHIwSTN0TlBYcFVlK2V1SWZ4M2V4TFQxSklpN3Z0dzdQbHJlT1hwRk1hNkhKN2ZpbWpDeUlqcisyYkw0M0J5ZVNjTHVhY2FMbnJSWkFIc2Y4emd6bWxnWUVVRHU5bmlFdzFpUDRtWjZyWW84UGxuVVBIWUcvRTg4K3ZvbDY1TUtkR1BOMHVVREdkMWtHN2F0M3lncDV0N2Noa1Y5TVhYV1pLVDBUZ2JyL0ZJdW9HNVZVV0RHb05tWnBQd3V5eFRpeERKK3o1Q3dwNnNKS1VUeXJ1RlFUbEZVOUJBcnBaL29BcjNTd3lEWWF5bFp4citnazdDSG1BNml3RmQ4dXVNS3pIeFFrZkh0dk5RSElZZEtLVnBmU2QwcGk4cUo1eUdlbVJVVm1YdkxUZzErZHZsYjdCeE0rSDlIb0tVcmlSZUxVSXdsZ0hiVHJ2dE9yeXNXdXZIMmNsK0ZaV1drV1ZDRzhseWEweWRoMklsK2Q3eGRqcDVXMy9VVlNValV1bDhnNXMzS2NvS3dzMjd4bTBnUElEY01ERXBSM1dNUmFKR0ZRbzZDaXgxT3JJcnUzM241dzZ2ek9jdUpFUm11MHEvVWFrRzE4L2x5bXlNQXAyT0lPMHZIVWYvcVdUTEdMNy9yRGIyMW1Sd2VPNjlDc0xzTVdhNzlaMFFBeUduaU9laVJXajFlcHV0Qmg5U05sTlZwblhUb0lWWHJHc0FMQ1ZITGw1NmJmd2Y2K0xMbUlQdW41YXBLR1BPTXgxS0h2eURiYVdaSkQ4bmMwWm1UQkNzd0xCYjVwQWY0VS9pZWJucnZVekp6TjZtSnJxTk9PNTJGRUVyUGsya2hHQm0wQXYwSWhrRjZFa21Ndit2bmRFSlo4dnhKWDNBUmtKazR1MXhPWXlmOHRRb3NJa0pOWXhTZlhxM29iOWFZOXYwb3dOR0FNdHBXejBmdzl5Y0c3Yk1GL0JBV1JIWlZyWGdDY01FWFZ2TU1reVVmQW51R2NZVmE2VVlYbHdlekdsTHJSaVZwK3J2aXlhZUNHMjU0eUR6WnEveStkZThXOU9PSEh0c1Y4Y0dpNmR4Mjd3QldEUmtvRU41TFFjWnMxelBEalNQcDRCdmJKcFVvMUdSVGNUZVhYTGs0NUliV3lwMWZlL2tVRlliemhDRWNKQXNkbXJVS3JpRE9xOEJHMTkza1pQa0ZmVHBxM0dRckxzU0JwTGJVT1FEbVUrMG1lakh5MXg5K29FNC8rRWQyRXdtb3FBSkd1RE9yMGJWTERUc0IvQ3gwdW5OSFhObGRIeG5obThOa2Y0MDJCQ3ZFekU2MWpiRHpOSFR3UmViMUkyajRJMUFrcTA4ZGNEN0xyY2d2NEIva09udmxJWWNWcHUzMU1jb2dwRmNqMnBXUjB4SlI3MzM4cnZKQ0lvdVZIUHNta0U5ZWxxbFlRdytKRng1THZMMEN5UU5KZFA3bmV5N3g1cERqVXp3dmtWVFFNZCtIM1Zub1V0Q0s0Yk0zZXlSdmw5bUNxNUxZUGV0QUNBcWhqNUxyQlNtNzQvZmtoUmx1NkFneDJJOEFBTldpSXBkY3dsT2hiOXRkeTlYSldBM1pUVDNOSkowcXBGVVZwVEx0K00zTE9GaUlha1loWks2bnlUVWhyM1pJajA0ME9ickptNWo0UzRCRFlRbmpxWFBxbEc1bGFyeE10WVAyWXVaQmRoQmhlWWRsNk1WS01WeXlZd3FNK0h5VGQxVjlscjFGTjVVWklzWWI3djJXenFRQXR4L2tYUTlzUzgzQmZYRHdkMWQyM29XWmRud3A1YmlKZGt6a25GNXNUOUhtQkh3WlRjR1F4d1N0aURxOGEycExkOGRHeUkvTEMrTDBSMnB5WEV1THRDZURxc3gyejRJZXhjYzVpOGJYRWo5OGdWMnFxVXVWWmRuZWtmK1M0dXV1eEFoMHNORy9QWUJMeGZZMmRUcHg1VldJWjVuTkZOTitvWHppSFBzWmJ2d05ndnJySWxCZWtHQmpjWWF6VEh5U0k4VVNudE5RZm1tbm9jWTRPdjh6QmQvSkQrcDk3NENHQWRmSnFzaHlSZ2RkMWh3WlhIaFp3RWdNK1NhK3BJcExDdEg0bkhuOTJLbW1CakhTclgwRjdOdmRvTVRxdmZGZ1FxeFNyVDBzWTVHWEFrNm1YaGZIUnZFdTlMblNzeWt5RlFadmpyVFVBdGVTSzFnYXNLVS9ZNmozeTRrWDFVS2ZoSzdDcTN6MW8ySUREcnVLYnZmUFl6WWVBN3JKQmZwTGVvOVdFNG4vNFV5MGdUR2F4UXAxSjZiWG9vS0Iwc1lqdWRCRWJlNWlqNkFERG9lcm9pNkxkZ29TRyt5OG5mQUJuYnR6ZzBRZnhSa2x0YXhSNDlOK0ROeW9ndjQ0YTZEMmNRZGhLbElRUUZhcEtENml4THRYb2ZGZmw1M2tFZjgrNW5VOU04R1ErQWlqS0dpN0NYY1BhTG1GbENuMlB4MVFOUTE1a29LUm9CL0E1Q3lyM3VJMFdQQWUwQ1dwaTRVQXBkZGJCbDVaTUtzUk5HVFAxQXY4SjZkOXpnRkQySjk4eFJpUHFJWk1IakpqZVMzTEpsMFlGNTRXSE9PYStUeitqTEwxTHRaRmR2c2MrRDZSaS80S3F4VklHQUI2TWJZRFRVbGpnU2J1d2pxVHFBN3Q5ZUhDbzROTlgzVWdBNkYzN1JobjdOSHZ6VjBMZzhXbGZ6bHFlc0ZvekpMd0ZRWVF5eUY0SjNuWndON2t2S1dEVGYvcndWSmJlWFpJNCt4MUErZWRKRUJQZTVHTldsbFZOb2dZL2lDMzJhQU1malI2S2gxQytFSlQzZWJRajZpdGYvQVpvR3NrZk5SdlZLTGQrZk5uYjRYb2FzNzhRbTRGTktKUWtPNi95UDc5Z3FDRjVoaEV3OSs4eE5idUdWbmNrSlNpbWJNdGZiaWNTWUJVRkdudytNQmNWazFvbTdLc2dEaDZLT01LT1hFNSt0OHNYLzNPMEZnbEcxbXBjOHIrQjdsUS9Nemg1Uisrc1prSXRGNmtqUFQrZHdtczhjU2hkV2xGeU5rRWlzZUdScmlIbEM4ekRsekNIblNEZm1Gbk5MaWVnR2t1anVTWm9iN0pvWTd4K3F3Yi9hUkRnZVNEQVcxWVpveFcxTEUvZWoyTm9ReG1UNXpUSElGY1ZyeVlHOW05azR5QXh4NUsvYlgyS3Jzak01V3BZdjBCSTI0RnJsWVprR2xUbHpYYU5QVTlmY3ZrOWNFTVRSWEptSCs1THRMaFk4UUllNmFGY3NvalZGZ25DdEdJRk5rNEZkVzFzd1VieE5vUUlWQ3cxU056OTUydysyVk1qb3kwRzVJUHF2TmlSNHlQL2Y0Q1JkYkt3OEtISDRManJBejlZT0tpVDloa3BFR2xRUXVmM2o3SjcyS2VSYTQrZ1c3T1RKTEJIQnhwSVZGWkYyK0lCZUhjKzNwWlA5VHBmYUY4QzVheHpDNVVaLzFlR2xDZTMrTTdrc01hdVFiekNvRUtDcXNpKzFnSjhoMng1VHAzNFVVV1hNdGVEbnJtTHVJaVVnV2xjZmZVUVA5K3E0c04reGxZajZicE1RcXE4Q1hoYzVZU2twdDIyTm02Y1UxbldsaEFPS0JraTVOTm9sN1JZNkNTVXRuV281UjRjNlpLU0NPbXVqZkVIemxWUytTVXFwWkVDK1FiNGoybUVwaTJ0V0ZDSXZnaWtmaDM1eXNmNlRYYjZDNlZqR2oxTExVZDdyRW5MYjZES2ZsM2NEbjJXalRHNGpDVWdDQnJMR1BKWEJjWTUrMGl5SHE3YUJ6TFVUODdEbXFuMFgyQW1Nak9Nby83cksvekhrNWRieUhZZ2EwRXNlRUl0WWdXa053Q09JOUIzZi9VcmFBVDFDVXhwMjBQNmk0TmNCQUNLcFdPUGNOeGVXOUNDc1BvZU1UTWxhS1IxTEJ0YzltZW04bUpNL3N4OEVrU3YrdGdFUDlkcy9ta2VIdTAzQzlKKzJyNmlySGhrV0JBaHQ2WmF5SU1GVXV6MDgraTVWRENZeVZoTVNVcGp4SFZZQUo2YUFGTVpjWU93eU14djNNZy9hVS9TbXo0cWx3S3A1YWxndmJDTkJqYmxDS0tuY0JLL1BDUHNlTDVsbjVFb3R5SnFZbUJHakR4cEp5TStGbE92M0RiWDJyY2NIeG9PZVhRVlZQTWJIb2E3SXB4M1ZpcW1nWUhMT2lFZ2h1UW13bjZ3bHA2bVU2bWRWdjE2cTRDYTB5R1dIL0pGTFhWSzJRWW0yNThzdUppRk9LWHIzVDI1eVU4dVpNSjVtbWh1QkN3MExjUFZBM1p4ODB4Vmc5OHJXeFlQT1dLRWlXL0NWY2dHbVB0VEExeTAxeGszcGxNTU9HOXdWT2xJNm1LempDYVFDVGxaMjFlWnZmUlpCcVVFNGRFb1JuRmxEaFZiWjNjZmdybE5MV0VVSVFFUjg0Szl2YlpqM2NPWi95L01YSXRnTVpIV0R0NjVYSmhFb29PNTFQeUt6WmEvaEIrSlJ1NFNEM3FlbDVZdEg4QXp3RVNDaW9nUFlQbXRDVU9naWs3VWNWVmd2YXd0cStaTW00M2hXS3F6KzRRUExQOHFVVG1oZjJRNmtmODA0c0VoZ1BXakdOc2lBMzFaY1hKNEhPT29tTC9hRmNZMnJYeFY0WDJHMWxNL1RNYmJwSGNNTTF3QkxpVzNhOG5rOWh1bFRDYW1KS3JzeXVTRzE3MWRNT3JNK2JPRlRZd1FDY2hsdFBRR3E4ZjUwOEtwanE2R3JRdENrbjg5QldHOHBtZlBBRW1xQkZtRTVkM2U4b3BJSGo5OXBYamFxdlNKd1QyT3d4ZHR2MG1FdmFSYlkwUGcvdEk1Q3lRL0xQSTE1SmUyczVkNHpYYi9kNkpXT2VCVVJ0V2tBck1FVDBWLzdhR3lnaWVBbkx5WUora2l1aVZVUzhxNFdHS1lGRWRzL2N0TkdTZDdKS3lRL1FZd0ZGQ01sejlYL05OdWs0WnRYSUpsR29RWVQwc0ZWQTRNTy9odjhwV1pQb0I5MG5LVnRQS0plMGxUd0ZVVWE2RzY3WkRMU3NNeGJMa1NMQkl4dEk0ZExKZVZPbVVGdEU1MjZGWG4zU0c5ejNmNkN4ZEFUU1NITGRiY1lkaE85SGhoMXU1alo5QkJwYlZlMFQ4ZzBDNzNnaWxacHU0YkkvMk1waU9wSzMraUdWckZIRnYxVm1xaDJoZlBTTGpyQWhaZ2dMR3lDWUtJTXdKejNkWUNQWWpDZVJIaW84Mll3UmZtNUZuT3IzTUdJWjlwUmwvekl1dHNuZEZ0YWs0bkNQdHlFbXNjaFdLQy9sbDFGbjBaRWxhb3dWcVJBQi9WMXJYUkM4Tk9kU0UrTGlnSWJSSnI0L0xZU21ET01hYmtOY0EwZGVCbjBJY0Q0aEN6UzZ3bGtFbm9tSnNBSk9pZjZhUUh4RDJRaXNBbGEvNDB5UFlDVHNkRVV0SEtWTG8vSW9lcUVtWHVBSldpMmU2U2Nlb1c5SHlGV3g3c1RYYWk4WW9yNU84QTVzcGgwWGxtZml3K0dpeFErV28ydkJiZWVNSlpsYVVpOVRzSHdESEx1YmpaL0FOcS9yTE9aMlhVSnpQTkEwZjkwb0R2TVBqaEFRNGxvZGpMNW5VR0FHZ3QyUmlWTkp0VVZQSVFJT0FWNG1sd0M1V0lxeWZMYUFQOWR4b3krVUM1bEhMbHlUKy9SRW54WXlBYm5aa1hwazh2dkQ5UUQrRkZiRDQ2TFZpdE1xb2pRVmFTYUp1SDNKVitEb3BQeWZGVWRBMXZXblIydGdhY0VGRjNMaVZHL1hWeHU3Y3hLaXcvTFFJRHlJSWNkeWdhS01MYUNpdXVUYkFJclNLSE9kYzZXZ1piSTNOaVJPRnJucjUydDdTcElsSEFvcHBmSVQyREl2RHZKVUpHeTZWRTIyWHlSVzlVSGVwRUk3b1dpeWs5N2FBMytlMkdFT2svUVRxRUxsNUZyRndBbHVqeWZMbVNGeU9BZHpNTlM5MC85NWh3VFJ6RWgxbHhUL3h4ZUpQb3c5WkI1MGo0QjN6aUhzSmlJRGFvVThLZjQ0YlRTc0p2bGdyS1FaQnJIMlB3MHNWNkV2UHdWR3JCZzMzTmZKZ2h1aWplSGo4VVZuMEFnZjJQVEpsMDczbW5TNGtXYjVDKy9zQ2Rxd0V6dFZYaDVIbHFkVUdwbDhmSWNhb2RnRHM5N2ZDZ0R0bFBoMGxIRzZSSmdCaVdSV0Z1RnFHZTBBa2NjZDRDem10d1Ztemh1a1dwdEZ5clBvRTJEVmRHdVJLbWlGY2VOVVhOMTI0UzhxS2lHSDFiSkJvcUlJOFQxYUpVbnNDbWdnamFkOHlhZkYrMHBHUmV6VUgwY202OFBlK011NHVzVnNEbG5GYmF1VE5rWEl6MkhDdDcyaWpqWUpmRmh6emo3ZFV0aEFnTEUva2RKMU5uK1diUEdOajZBMnN1UFg3SW1iRnBKVWVoQzNDek5tSlpNbWYvV1J6blV4cTI1bmNxRzFJejQrcmhndkhUcU1ydzJZN201TVc0UnpHdGZpODI2UlowOWRGMU9NaUdlb0ZxRjNjZFpMd2NsR0dTV0lUL0dsb01JRnJKOTMvSzVJRC9Xc3NBNFFoa3FoQnV1dk1sV3ljRXhwNU0rRkNBSThzZTFaQ3h2RW5WZm8ySFMxYndQS1lNM3F2T2JWUnBSd3Jta29rNUR3RXhsUWFRRWR6dEp6ZTVCZDhwNVcwaVhLTWc4WWZwZ0FNSFMxYzZSVXJndWt3MEg1SnJKRFF3Y1VOMWhuOTN0cmdzb2hKdTEwdTNnYXNkUkdSTHNTU20rdWNtalNNdGhTT2FSTEh2MWd2dTJXOGVpVTFwOUZGaUpLckovdk1SOEthYlVWZmg0MUF4RlpEVWd4ZGs5cGhPbkNvVE4wZ3hPQTNLOFN0VUprLzBTL3Mwc0VldHVkQlBDdzBlTkNLbkdLcHBhTlVYejUzWHk5K3VqNi9QZkNlREpucWVUUVRrV2VBNjEvaEE1M1g1akVZZmtBMHpSMm1Cb1ZvUWlMQmR6aXpaOTdHTVdrNnhrdWZsWVBUTUdiSngyd1NtbFllTXRsU0NIc2JvT1ltcXpHTHlPMTlnZFJ3NVBXREZrZ2QyQjlkS1ZiMitPWFBpaXlhRDRVV2hIdWM1SVh4OUFKTWkxWklZMnozZnEvYmZLbVo4ZlFwWmNqRk11MkdtWjVaUXhWM1UwWS92RHF2UjhmYVVOdElGUTFGYVFlRGRpSzlMM3hNWTROa2xvNnRpekUxMURFNXhvRnZnMUlnVUpBRUptSDZMb0ROZ210MS8wQURXYmYydlovSDBjaEtzWTBzZlRwMGdpcHRPK3lTMnlDcHFLd0xGVy85MUQ0Wi9uNUZqNHFVSUJpNmxvMko1UlU3YkpwaWZpSFlocm1JLzZDQ1RHSW9ZZGdGVk1rRVJOZHloNFVTM2Q4Ni9LV0NHMDNDemYvcFE3UU9adnNqWUdwSE52L1VwRm95bHJjV1paREtlZDdsbWpndkpQNlZUYWZ3NVZ0a1JsN1JEcEwyTFhCZ3BtOGs1QTB2Nk9VanJqYWVHcFJmd0FnM29NKzJWdVh6VnJxbkFXYUUyUjBQZ3QwZXpzQWlLU2FDditLL2VhVzhkaXJCRmZSSnJzb2JKN1VYNGoyOURtdzVQdDMrMTFsckVuNkYrcDA5RWxpY01tSkt1WmtXdzJyZzBZeGJOQklqWUQyV3BvZ0R1Y1FTM1p1VW1NUmd6QkRSbFF2SE1WdkllRitaMHFWRXVTTldNYjJrbllZcjRJa3lIRm9ielpTUGQyZFhyaGdoa05DUGxCYTcyMUl0cGlNaGZBd04rR25SdnBzZ1YwSmdWUkYrNVhNTHA2eThxZzVpL3h2TW94MFlodlVWODdWTXl4QmtZc3NRUXRPdTNCOWg3UGM2ZzRnN1lnZjV3OEx4T2Q2Z1h4dlM4enBXbkZwbXY0VERLbXVCS2l3ZzFzM2FzNzcxWStIb09mdzZrb1FTVWVSYkVWdklPWHNQeFllNS9nR2JSeHkxcXp2clFBOHhVU0lUVGxhNCtlWkUyaGZLTjNHK0Q0Z28zaVQzMVh0ZGxmbHJKUkxnVjdyaURXQU5UU1p2eSsvQXE2bkVsZUFrVXNUMU5Idzh6T2o5VGNNdzFodVRIU3diNm1IV3ppOE0vZ0VtQ3Q4alZmL1NSelZXSEQzQmJLQWp5VGJRTGpNSllGbmRkVzBYMEFrTGhUVTRMWmxWUktYZHRmd0xFVEVxaC9KS1BySW4xMk44N3dVMzNjVUFGTUh5UHN3cVVrMDBlZStNNUQ5cjVkQTY4YzNIZE1OZmY3OExtbTJLenB4WVFJSi9XKzBqVmREak4yZHV2dlEwR1AySkZmMUtYby9wS3dqS29zSWw2NzUrY2dlVjMxOVRtWUVhTW9NQmsxZUk3bjBHd1Y2c3NXWkI2SEhrM3V1WkxyN243VUFlbWFjNlAwZzFmQmxleHlDdkg0SytReUx0SUpVK0xsandXR0JqT1BvaElybmJTUlpGZWphRTViTWhMczI5OGxSZGdOaHh3cTZod29qbXVFakFoYUQzb1NrdERWQW9PS1k1ZDkrYVBxNVVwL0pmTEtGY0xTeXNDY05HMlJMd29naHNTeFc2aUhHc2dObVlIY0VRTFl4THJSZU14WU0rbVRQZk4yazhEU2RSSUxSM3ZCWFBGNHFZZEczTGFlLzh0b0VPbVhKd0ZGQjBNTDAwcHNWanlUdlYvOHk1Q051WFZlQnJRNjNhelprT2lQMkY1dFloWVZPZUU4QzVvcGJNdHAxSzlXVE4zbUF3RUgyaWF1NlZnQTR0R3Q5R2JyaElpSHZwbGlIeEd2aXJESWhKV0MrdUlOWnFORlMxNVA0dGVib01KcS9LMmJNa09IUWROU0hoaG95YjlUbHdldDJVeXRWbkd0eWtnNDdOR2NwMEpNSWx3Si9GRnFGOEpCYkdDcG9VdFVsMTZSOVEyem1WMWZUVWMwOCtKd3dtNm9zTFovemNXRnVuWlNRaDNEcTZSZ2RqUWlnSHFYQ2pldnNyVThRWjljWTJGWmtsK1g4R0VTRGUvTktDVE02MXhpZU9rVytxZitMbktUTk16NWxGK1E5bHdGMUw0VXFibFBacnRtaWs5cTlVZHpTa2M4R1hRRnRaUjd6UzBDd2tYbTU5S0wwcG1lVTNWQjdjbENvM01VbWN1OGpKUkZxcU4vZGZ2YnZQRnpFVk1WZUNIdDl5c0ttSGRvalprbVFhV1JuSWluYmorYUs5ZFR5TUFSNEg5Nno1MTRPdXd1bHJWUGJuS0F2TzdLRDU0ZXJkUUpEekluU0tZMjhwVTZNdTVJNC8zbk1VSU9wcURONjBDN3JHb2xzeU1zQlFlMEtDMmh6U1pGSHJLN05VdVlvVUZ1Z1JoWkxaSThDWG02cm1OSk10S1FqZHZkOHNDVU9QT1pVY0MyTVk3OVNqTGNxT2F6NFY3eWg1TnpFeEFvRDBZZUZQdmlZWXVCNjIzdEZWYVN0MkJ0WTRaalhpamNKMGFuZlYrQVpMeXM1ckEyM216Q1ZDTmN5V2hiQ1BxVU93bzJGcW5ZUlhtWEJZZG9zSEtLZGRrckZYL0dqMG1SSHBCNWpkR2pmeSszdVRScW9TTnZTbXh1cEVLUDltMTkwNVFUcWJUNmxxQkRwS3k4WTdzTFY4eDB3SEVpQUJsTTVYR2VOeUlWc0xlcW9RZU9ZOUFheG1mdnQ5Sm1NVFR4MlBpSGVzemdSc0VwOTNqR0VRYjFhMjZscUlxOFA4SkIwUmd2MmpYdFd1aGFyVmlRaE1CQ1Z3ZFJPZ3NpTTVLQ21GbFRIT1RZaVU5eVp0Y01SbGdESVQ3eFlpaU4zYkFUSDVyMkpZdjNpWlpGNG9aN3duSEtIdm1ZV1hTU3VhS1NDTExFaGNybk96OXZpaHZVRFFrUVUzNEtULzQvMFczSFZzRCtHNG1tbkZrejFwL2QvZy9oTUlXSzhzWWowR3Fma0F5MXNFUUY2enFNV3ljV2RQVkN4aWxsbS8rSWFQTmhMOGtSbTFLL2xkTnRtVHh1Q0EwcUIzS0VKQ1dEU0lBeit2UHhqMUZITzZmNTQyTUlodWxWRUdoSEhVSEd6UGd5VjBHMzBxdjNGZUlxVU1FTGR5eXd6UURqV2F0cXFEbzQzRmJwai9JNmJLVk9QeHQxQ0p5VEF5MVB1WFdMNzdLeXVLWlFjYU9nTWhEYWFTL212T1gyVi9peEZDUWFLcmUrM0Q1RVN6VFFaRWZIbzFXZjhZR3lQYU5KVW1jOWt2bmtpOFAzMFUwdzlWOVVMOThzUHR0T0x2TkFaaTkwNy8yTW1yc2ZVZDZtZUJhMm15U0VaQUYrQ1FMTk96ZEFUc09vdDBDdWpnSTFkZWVzRGpwa0Y5RnRrMmhRZ1JxYnVkeEZPdWZsUWtteC9rRHRJbDk3dUo0bXJ1bkhLR1lxQXNSWnRSY3JjTWxxNVVQbnZwcjVHTmUwQmlCVTg5M2JqSXFUQzdXUWtBcWZiSmM5WTFrcHRPZkZ4ZjVVcUhUSjJBUVpqazRQaU95a2JYcmltbm1KN0dqbHl1OE1vN0pScVh0SG1kTTVva0c3bDlUbmY1UGN6UlYrNUprODl0azhQenp0SUMwbHVqdEhHZS9FOEtPbEZpTkQzR1Z3djg5RWJvQ2hZR2hRdFMxYmoxYWdiRjdpUXRPZHpUbHRRRWcvbklMbHhYZUlFeVN6SGNsek5DeUM5b3M1LzZQMWJsOXBDT2hlSVhZbGNoZW5IWVY1L0ZFN3M4TWVpcUw4a0JySkI5M05BMXNGS3BBaDNzTjhzaWlxNlF5Tk0zTzBoU0RzRUxOS0tjeUN4TXVydWMrcStBSXhhc1p1WVg4SnBYNTluTXJxNDczUlhxdFN0VGptR1E1VWhmekRzNWJTSzVVNTdYWXRxYW5sV3ZmZmhCT0h1ZVJwNXVVOWh0M2FEN0twM1VwWEk1SnB3OXJBRFlMeEhBbitRS2htOCtIZVp3UFQwMm14ZnFiQUUyNktZMlk5OVI2M2pET3lzU1BPSjZHOGlXMDR6VHYxcVJHKzBiREdpZnRQOTlMaHhod2xLVE80Z3Z4NmViTXplanhFT1NpdlVERTNpdzBiQkJYaTNiMi9JZkd2cjhmYlZjSGcvWUZUTUU2SUF1RnJmaytvRHN1QVRTM2UvQ2JDSk1ZeTBpOXEzdTVOTmViUVpUYi9LKzV6VTZkZGtCWnpNWHozMVR6bUsyNC8wbktsMklxd2tFWFF2eXlwbmpoQzEwRVlCTENNYjZyeUVUdEV0aDhjZEVLVW91cjYyRnhKbE1xZGtFWGplZnRiYUlBSVJrSUtldXRQSmtuUHk1NnlRRGxjc3c3dTFmNzdRNUVIeEtGU3FIUW1TSTF5bmhpc1pqWXFTZTNMdzBtTVRpbUYzbWo1VDdhRkp1dUtuQVRVTm1oT1J0VktZUmIraXpTem5ZV1JrR1JGWEg3bnZ2YmZKUFc3b25UMzlxQmx5bFpkTmcySmtPYXc1cGs2OXQ2a1JxV1lYVzlnMHY1WVExTnRxY0VnMlZKRVd6NzE1ajZ4eERaMCtvN1RtWENWRllnUmhqL0tBSE1kejBhZGxBTW9VZzluaUcxWlEzMWx1SkRrRGxuSXdwYzNnSWxjQllQR3o3K1E2ZGc0WVBJc3Bzd3hDRG0vRjBhY3JMSDcrTTlUMlhub0RCWG9zNmdsakZSZnlGVVV1Y05tNzNiUjNEays4TTd3NEhsYndBRzZmNGdyVE5keGs4NlQzMXJWNVpabVJLZy9yWnJBTSttc3cydnVXYzNrQnhzaGVOdXlzNU9xaS9ENmJkeWpWWmYzeHY2VGRybVpKYmtnY05yRnZWZXJQbXZkMVlvbzRLVDdIdHhOSUhzbVpHWkxZdGJweGdTZ0dISnk2THk5a3lvQW9MR1hvRm1Iejl1Yi96eDRyK0dsRDBPRE9RaXBreGRhMDlrc0NmYzkreDF3U001Y01zNmZJdzVHMGZiUjFiRlJLMS9iU3FxN0dOSjJKdHFzMkIydjA0emd1U3VsSTlFbytnMHNQZFpLeHVoWlhZN3QrWU16b2tYZ3NhWlJEUFZ6SXAwNndiSllYL29lRVdUTXhlY084ZmxKdWl6Nm5LbnQ5SzZ6THgzT2dlYUhud3JLekZ4UHlhbEo5ZUFJSDRFM0ZYbGFtVHdrbDR2a1ZjZ3AvNGV3dHpRUlo4N2ZuWlp0MlozT2lROStQZlRIVEpvS0QrZmRETzByUTgrOGFVTy9ES1pmN1B5SENnbnNLbFVlRHN5SFVadFNMVTU5bXU5cXdhMjY5OFd3NWRRMkFvZStVb2cyYWFVL3VwV0lIUnJyZnNCSmRzS0U3cWZLTDA5V2tpaFAvQ1hRWmMyNHJTNndJUE5wcGhwTkp0MmhoU1UrTlV4aWRvNDlZWGh0ZHkyYkUxTW9vWHFCVzFiRzBTODlnNGx1eXlSRVB2YXMrZmJEMlZicTlrVVRKTlhSZkx2OEpKdDJRUzVqaS8vRVd2SDhmZXFvMVMrY0ZmTE1zZ01TNHpabWhoQVI1NmNZMGFJQ2dZQzluNGNsbXJOQytVSjA1eHBZN0M2NUlkclBaMWhSaWFXMzA0YkZnT05VNTJtS1R4QnhmWk5mVWRsRGxYVU5yaVdMekh5anEwWlBydW90aTMxQ2toMTNvby9vSy9RdUY0a0IrUDNpMmZxSVdybHJWb3Y0QkpoRDBxK0x0OUR2TkgyNDJJeHBQRlhST283VGxubWNlTFdDd2paQVBFUUlDMExCM0w5UklFT29oVVMzN3JWdFhhZjN3a2YwV3lHU1l5QnFmNEpMNTJqbHhQQmlDUjJSWjJuaU1aTDFRckhoVVpHQW5vTHhVREsxbFBNMEd5MFpJdUc4bVpia3ZOUUJQNnNzL0xUUzY3cFBIR2lOTU9hVGo0eFZadEVTQUx5OGN2ZUg5VnRWbjY2d3ZQQmpwU1hpMWdCa3pzM2lJVkxrSnRFU2JGVGhKNU4zOVhRc0dORG1DQWh3bFk2QzVjWXRhVnRaYWEyak9mZDFnRFVYdWJkWlpIbTFkMmxUOVl1ZWxqZ1JLSXphK1VJQ3FLMXl1c2hsT0kwMEpyVmhBdUJtWVJLSXVFMVYvNmRlYTY2WlVHR1Zad25pcVl6K2VEUitzRHl3VnFBYmtYTGhBempEalFGN0ROS3ZFd1MrWXN4TldDRy9ldklCaGVQaVpISHJDV1FPdzg4eE9DS092RzgzTExsUktySnR5S1l0ZkZmRGpMVnFVM0VyeU5lWEQwTlJncjNzS3lJM0liNTBLVko3SExHSEJsVVNzVU9NY3I0RG5ZbS9NcS9sTG1iUjR6WFVQTDNleDAwZWQ3cDAySjJNOGVFZXEvY21wNGJ3M1NIcUlnQWl1WE54QldnMzYzbkpXd3dkOHFRUmNqTW1aSlQvY2J0OVhqQWxYTTlhYlBhUlh6Z3NzKzdqeTdkKzk0UUpPNTlHRVVWYUxIMnNrSFVhNzRsd1RMNnliRGRVRlpBMDYxalBpeDFMUTI4c1RNK2NROFBZZWkzMGZIMisvRVFyL0k0U1VQU0pMSkZRazFrekJqSDUxNWtacFVFVXJ0bTRZdjd2Vit1MTkrVDhaS1NpWDdFdUttVis1OU96ZnpLMG0wSHNOcmZpM0ZhOWFVdkxFUG53M29zSzN4OWxJUEE1aVZoam9ISXI1LzNIQ0dUWGdzbDlrL0FoT241enJpd3RldURjdlhwZ0IyZElha0ZGT3MyTHIzUjlzc093cTY3dUx6cmd0SFNwWnFwWk85UTJEOFRSWU9ZN0huY1k4TDVXdFNNc1crTnhpZGRMSUpRdDExYnhKRThrZ1hCVGd3ajB0VTdLRzJhYVJUOTY4YTJvcmJMM2hXTXh2OFhtaFB5ZlZUSDE4cnV1QjlwcTUvOEpBczZ1WXBYUW9iYUIxOGhCZnJvODhsS3lpUVJ1ckRKcDZ2UGpjMzZjMUhVNERCMDdNZW5GZlpLazNCUDRPdGM5VU5wYlNvNzRNcnZ6MmlXakJuaDZEa0F0TFlKNjh4OEVUbURVZFBha3F4cnN1Q3RablR3KzhqZzhNTWx5Q0F1QlloeFRqZ1VNV2daYSsvaEI4MHRhZm5DMGFsQWFhNVNCci90bGlML0FweWxGbE10d0duMFdHSDczN3U0R1MrK09zS2dpZTB5TU50M0FwZmxRcDBJVDIyM2crTnZxOTl4NXhTVTZWR1lkUWk5WlFUYy9yVERkNEZNZW1CUDAvVXFnMG1wUGtteDBNejZOajhETjFUUmF0ejgrbmxORzZwZEJjMlVBUDhMU2x3bFBwNlBLYVo5Y0pkaWFQSDFLbno5MmdOd2hUekkxempkd2Y5cU5rMndtaDFPMVJ3RTQ5ZVZuVGFYZFJ4bmZhd1haU0tNcHdLM04zeVkzZ3hZamRleUhLQnJYUTk2bWRRUGFYbVN1WmtXRDFLckY2V3pTT3JYL1lTMm9JblpXZWcwVEJ4ZW5kS28xWDkvSHJUR0pUQWE1RnF1L05UTklUYXhRU2ZmVmNEaC8wTWdWR1dzZFhWRTNBV1lzYlVjQWQrWjJ3MkdhL1N5ZzM1bVA1aG9NZDFjb0s0Rm4rRS9qd3ZidEUzalUwSGdqUytnZFZhRXhPN05JdzFUdm5QNE8vay9TSWwxbm1RdWlpdEMvMkYvaytzMG5ib3dYcWljbmpsMHBvK0puSTQyM1RpdDFHQjVnZUhnTDVqU1g1eEEyKzhnQzV1QkdYY2Q4eEQxT3VwVlVFNmNsZmtLQXR4QWRMRDN6c1Nxazgwb3VhbzR5VTR2TkovbXZNbGVWOWllSThMYVBPcEltcFRJVUZ0UE14YmJuOHV6cnRKTW41RFNNcVJJSDJodi9yMkdhb3pwL3N3RXZrZVJlT3ZQTVJnayt4SG5mK1FXMXNMUWFCL1V3ZkpPbVV3MEVmN0pUcURvUUc3M0VoYTlBVVFXbHdHVG92Y2xXVE5FdVc1Y3psK2o1RTIzVTJtYUxUNmF0bjF3dEZtdW5RWnR6eGpyZnlCLzl4TE8xSUQ0UGlUWm0rc1R3UWhtbGtrbmJqN3k4K2hmSm5ZUm84b2VpL01HKzNyWVEwdlZsMW41VGo1VWpMMlZjeWtVazNsK1J0UW5RcjlYellEcHNiMmUyMlJGV3lJNWRURTR0VkRJK0RCbExCWDFhTjdUSVR4dTFFY001VlRzeGFSb3BDREg2WWRkbFFVTzlkZ0JVRTlvVjNySGJlYzNOWjlxN0VPeVBqZ1FwSWFGWlRzV09TZlFucmZwakdQanpGK3JxWlBQbzJFN3JUU1Z0UUhFWUcwWk9HdUd5OFZta0d5WDdka2hSZ0VUNytsL2Z2Ynh4KzVtQUYxSmtqSHN3b3pkcUtmczlqd2xMYWlCdnRBUmJpa2szbDhFTi8yYUJ2UEdEa3RyTnZvalYrTkgwQmQ0WUNqMTJ4alZGcEZva25uaTF2UlpzcDlSNG5PU2haZmRnb29nc2R0S0VVYVB0ak5pcFdMeEEwa21SUjd0V1VOeTJKYW9ORjRWcS95Q2hzNW8yTk1UYUVSUjZ0bElaVmticlY4Q0xtdm52b3VsNm5kVGlEdEdScEdveDBqOFJOYVByR3B6VmIwSVc0d29xb1JmdE5TMXNNOXI4aVc0WjRjVG16aEZkZXUyblcyRHJJS2F2Z0ZkR2xCUTNqdjVYdER3SWhCWkhXMUk4SjlyaXhoeld1SEtNMXJmRXY1TkExNTMvZUJIdWYyZ0QzNm5sMzFtRjk2WVA3dW9LNnFhQUFYODVFbzJURmgzOXFpK3FYcGxERVB6bG9VWDNvMkdyNDk1VjN5K2orTnFFa0JhOWx0bWxRd2piSWZ4ZnVwOXlyelEzUWg4bjEzbHU0WHZSa0VRNENFNWdQOVljbklsNS9VRUtQTS9KSk5YbDRUMjcxZXA3ZW1BSlI0WkdWajM1L0xEU0tLRWt5VnR3aVhXQmZsVlhWckxLeTBQVi9nNlVoanFmOElqU2U4OHJXYU1lSHhkOTBUQk1yV1VZWWhTVFNaVENhcTVxZHJsNHJFdHZTRCszMDMxOFlBTXhBeW5NcEdJQTlmQ1JDZXR3NzN4ZnhlRmd3cVRqaHJFRFNZdmdtc0lwb0JPRHMxZnQ0R2h1b3BDSURKckh2dnlZczZCRThXdDMxZDFGTHM0b3RHL3BwT2hubzk4eHNFY0FsUGkxT3ZCWFJPVEtud3krb0x5dFVHK2dFSG5NZEQ4blVSL1FIMC9kZUlUdFBQeGlMU0U1azI5OVJQMXhWdEsrdVJtZ1grUHFXV3pNbFRLZ3pEY2hVeHRnRDVNWk4yQUpkenpaTzAvVkhIUlV6eEZ2bEgvRVJTUzdwQ0tydjhGMzJnbzQ3N1dDc0hWY0ZKWlRIYWJrcDFqekhibWNIL202NURQMnFrUFJxM2lSOWdRZFB2ZWNuaDdlaDNxak4wei92Nk4yb0RRbzI1ckYyTHY0dUk0WER1clBaYWFBZFRqUUdoUnczdnhvK3dCcGJUc1l3eVkvQXVoTEFzcUxQZ3kzM0J6a1RNWW9zOWJPcjIveGJ6ekFlS1pnT2lHWkRBbVlYQkxKQ1h4eTdHK3JhQjg0dlFJTmJPdDJlSFF3M1F3bS9oOFNkaVcvMXI5eXJVcWROemZ1dDdER05JczlSN2Y1QWRmQUh4UGkwRTZxdE1wRE5lclhuSVFXZHY4RkFUT2dxM29SZ0VPWW5tV3FiWG5POFhuZ1lFeklDSVFpZGJRVmwxUnBBQlltc2t3OUd0M1gvUTVpMXJyS21XQ2VPZE94bVMrK0x5ZzYzc0gyQlJwYVlwSVpocnh0K3Qrd05Zc2p4bHZtdjhrUHdqQlNvTmdQSEtwaWJXUG5rR2ZYMytsM0g4WS9Ma0toVnVjZkpFWEk1UVdQbmJsalJKN3ZIM2dWTmZVb3p0S2xIU1F4NGJqSHJWbFRaa3lTc1pJNUFvRHhRVzF0SFByclA4TTlVZjJPcC8wcVRDVVFIUWJTQkRFRjlzcjBibVI0MzNFYzV2Nzl1TnBPeDdtV1Fwa2lxZFJlTTllbnpXWnQra25iRmFuSWk5cWcvaVlXTit5bjFwY3pUMThGUDQrUkt4Y1ZncjdMWnlrN01ZY3ZkUzJSZUZWdCtOZHFkelRDSGVSbXlIdXBvZVBzbXBNQkpqUS9OY1lUdExJZnVMR1FxTkFCTDRwWFVBVUVQZTMxU25XY0E4cjZKOGIrK0xUQ0U5eTY1bktQeDRDdzB3SElVemFGdEhLYlNlUVE0NzFqRlFRVmZJRmZUamNIei8yLzErSWx0ak5yTjhGVWRGaWIwNE8rcno3Y05FdHp4aTkvZkQxR2tOZ01pZUtabmxSOG1yaFdlRlBDQzJJM2pKR1VjeGVZdGxuSWo5anVBUFp0SVdzaFR1SGRjdCt4RG9qTGxpY2JIbTBsb2xURjYxREJSaTlnWmxIMHc5Qk4yRHY3bERLc3BHeGN5UzFGWlVIY3ZzMld5T1dsNlNTRWN6bVI4aFVSVnYzZmpFTUc1cE5aVUVVVXMrcko5Tksvb1FPczFwZHZ6ZFFnSUw3dEtibXlhMHdBRmZOck83MTdQUFAzbVpWMklYaDk5ZjV2ZVNVeTZxVml3bXdaUW00TExBQkR4b3hrcVFWYnAwakZDK0hRdTB3aTB0QWRpbTJ1akFnTXNoeWFMR2taaldaLzFDVTEyeEZ6NUJmcjNjcUhTeks3UGdUUmFnbnpleWFzTmcvVm9pRTAxMEt2WEUxSE80RGtaT1BEc1N0ekp5RWRXaVVGUUxvZWxzZlJJbkVTWXFZa0lHRnEzRS8zMXc4RGpQeksxNEtVbUhqYVVYS1FEWTkvM3JIQ0JZK2JtNG9vaFU4d0pPRnVwU2lORTlVVEN4aDhmdnoyTDlpN0xpRm41eFB6dTJCeVlzTVhPa25reWU0TjNUQ2FwYWxrUnd6Vzduc3dVL1YvZ05GZXdXZ211ZStIYjdJYmh0VHVHUDNPN05zbUNUUkhVaWE0WUE1cnMwWm4zaHF1d1pIWnJaTjYwcU9BNEJobUJNMW5PVTJkWUFsQ0VZQVpzVWNaRVZpcXJ5YTYvYlJnY2xuS0tBLzMvTkl5WUhERFUzWWhkZEhRSndaQ05WZ3A1OEU3N3F2bzVtOW52eXFRMWE4bHJNb2pHRW56SkoxVmtCK09nbWdmK214ek5kaXk1QUZqR0llY3IraHRNZkR5UmpUVjhwcFJzTkthZlFSTk1aNDIvSzh5OXRqMU83NFd4NXYxQWFnQ0FSWVVVTC9iRzdrTVJSeUFrZlpZMHFTMENCYUtjbjhZRjcxNnIzZHU5QitZdkNWbWhBelJhWGJVd2Z3NGtGRllDUVdqQWlPcC9HdnEzU3EvdkZiVDN6K2hNZzZqN0lPekY3L0JYa3IxSm5heXRWWUVvK2hjaGtEa1ZObVk2Qm9BT2JwZmFSUUNqRGJnTzNDaUdJQzNqMS9RT3RhNjFwRGk4WHBEQ0grVWtueDNzVXIyRGRkcHV3c294bHFuUjlmMUxWdWJoQzFQSW81dUFIc1M2MmY4VDlDNzA2NVBCbWNzaEpaZkpjVEZockVPRFQ2MWNEQlc3Y0poc21iRVhBbzhYanBaQjVBUEoyUDBtVVF1OGM1N2sybXgvU2gySmVaY3I5WXBNWVBRN0QvQXFla0luOGd2ejg5WlNDNm9LZGx4cUhGQVBUWDY0eEVFOU1Ja0tZU1VObHMvV3VZTGxyVStTbXNISkhGMnZWRnVCYUNoVTJUT2lQUnk0bW41UWlCQWVBWWdFVkhUZUdHd2Z4V2lBTTFoNnFHOEplcU43M21WYjkybG5LVitENm4xUStiek1hZmhDZ2NqMXAyN1pTb3BJN3BVajhrUkxSU0pwb0VmYVpGTDdmeTBNYWtQM1BHbTRNdWxqZGVjZHpsMTZEc3lsMDVTNjJwYkxoR2RXZUVWVHNlYngrR3FsaHdBbHdhK0NTRnZEelhtZk84SmZOTXhPOStIWnJsc25VU2w5VFgrYmpQRUpOQkpNSVpTcE9iNFhXa3ZmV0ZCWThNMlVxdlZHclpxTER3OUthd3hCOFhubmFjVEZOMzZCUUIxWFM3QjliUXNqeEtDSzF2a21UbFlIYUppYmRCU0x6d0dJYnFWaThONUc5cFZVOG03a28xMzZUMS9RZjhibTluU0NSMm1Obldya2s0QmF5VlMwQjE0VG95OU1TcTVVQWFTVytNcCtUZEpsQ0c1ZlBUbG1QZWx1cUVwRU5hRjJRaWZDTkhwb2hxVERPK1N4NHZYTWVVY0FyVG5wUjJzcUs4dlhKVnllbUhDT0FGSWI3MHdZaDNQZk5YY1c4cUxRMUs1MEExTzYzUjVPcEUwaUVPbW9ndVpwQUFVQmgvenpkSURPTnNBWGt1WXlZbjdISTlQeFQyMnE5WjFoam4xTlkyVUMzdFp0NGNONXZ2UlNDcjNBMUkzaWo4ZGZ3Mi9JUVJxaFN6Q0l2NXV6dGlMa1hDdm4rZk9idFROY29yOXA3V2FDeGZnUlNTZDZXVUlER2lLeVZOeTJWbmRrZElFTDNxODhGcmZrSlN0SUFlNHRJSlRSUnNSVHNPYlVGSUwvMmNhL2RGeS9CQzJBWEMzR0xuZVZaSlJGZnZ0Nk1XMGV3Z1ZlYTF6Q2ZHaUYrWmxUeE1pQ2JCVStZc3Q0YmRsTWVsdlc4WWNnWDRUcjhtQStiRzJQZHIzQjE1bWJtbmlRb3pjbWhoc2toa1BCT2t2OXdhSEp4OXpXUUdQQmtReVg2QWlGTVpCbVl1Z1kreU9ZcXA1anZ2c2tPVXpYQ0tCS2NwU0c0MUdIRCtieGxYRDJxY21EdWRsOXNqQlBZa0dFY0QwR0s0NEdSQ2oyUHJ5czliWUhDdnBQY04wVjNSMzVWQXp6NzU2S2ZVakdZMnJYOENzRktvdEt6anJUZkJVQkZ5dERBdzUrTWtuM0lQNEprcnl2ZUZ1QVR5ZmN1NUE2Yzl4TW5iYjlQTHM1OUpRS0YrZVN5NzRwY3pKa2NPS1BVNHlmOEhQaEdnVVc1MTErYVBxZWtnZW1FOWo2dnNrc3ZQR3BDVG5CTzJWdjhESnJXSnQrNnZqNjVrSlhhS2RFODVtYitzU20wcmc1dGtrR1prK1FRWDN0MHZKTm1hRzB4bURhR1JNV2dxaEUzbGczY0xFMVNtNjZMOEJIMUxMZUMzV1pjeXNCd2hDNGRsc044akpGYlZyb1M5VDZtSENRcTBhREd3dTFtQUE2emFxV0pnSHkzak42UFYxeHBLemRaTFY3cHZNQ2JFTTMwQ0U0L3kyQzFBN1ZzVFJ6ZGdDU00rN3Y0L2pJdzFPaVVad2xrMU9vWEY4MUxFVElWL2plLy9mNmptUG5BNGJWVjU5eU9mRnJuYUkwdFFrclNqYi9MUG0zZ3VZN3kxNEt1VE9USnVBZmlPeUplVnplSjJDNUY1STVYRW5BZE9YTFdoM3U0aVFENFBqWVVYYmJjMHduMG5QS2ZtRktFTkdYVW9HMGxKSy8xNThJUTZOWEFUd0EvaG05R0tnSjlrWjZwbGZrRXVZWnhDWW1tdW1DK1NVWXlhd3YzNWxJMjNzOU40QmNpbTRjQTJXYnJQNi82N0dWTGNuZXdFUU9JNklxM2RhNWpnWHphQ3A5bDFNRkI2UHNIWHBZNlM5ZzNpV25CNGZRK0pIaHJvS1RQamdMMWRHWUtKL25WU0xxNWx6QTFiWk1vVVdEZ1dtOXQrVUNEajlNSXZjQVI0N05hMmprbUpVNTVnNDljOFVvSmhxOHV6bUdvZHlIdWFWL1ROMEd1RDNkVU0rNnd4MEpyTnBTNitIUFp5VHNvaDBCYTJielZteWVMbWw0RXA0V1VCNmszTmVjUGtFc2lud1dYdnpobm44YTh0aG40SFRLU0tjTnpuVFBOM0VmeXIzVFdzSm9rZ2x2TnFLNDgxK3ZDTEFZWDZ1VXlGV0FKUTVvKytacUxvOTZPd24yTmZPUGFXNG9BQ3g3ZUs5d3RpS0tEL1AwY210anFnSlZybG5oYTZvVVBYbHdhQUpqZExTRTlqVUtlWDFDNlk2RS9vYnZrTm9iM2pzWU1aaEUwRFQ3dlVtTUVrdGNzVmRjSXFUb3pFUkFud0h2bUlhd1BVbE8vMmpNYk5rZjlPOGhSSjdFbEwxQTg4amVsa1c0SDM1NktQTkREaS8yaC9HRlZGQUEyWFdsWHkzLzN6TWxWUitwaWl5WVVpVWVEVGVHUCsvSFZmZklCaVh0dHphZ2RCa1lSWGNBZ1RPWXMyeFo5Ty9tQnhlWGZmMXREREE5WDJqQnFPbmRET1FEZzJBeld5NHpFUHVQOWhWTTQ0cEJzUnIyTTFuYUJ5UWdGODZCeTN5NjdvakVKTHpjRlY5RzN0WEFKc2VDU0xJLzZSbnpoalBtd2J5b0V2aWhXb3F6MjIraWhBeldsUXdWU2Z4dXN2WE1rajl4MFFHeG1wUTRHZEFINlRzZGtsbW16a3dhT3BIcFRuV0hVMVhSbUxIVG1kdGFUV1B5VUc2L0tSVDRjWXQ1YTI1aHpud05KdzgwYUJIcUl5dXNnai8wYWpOY3k3L3lZY0daUDlLWE1DVDlQMGkwMDAwUjZtSWxLQVpvbG4wVzM4Y3dJZzZ1NVpOT0N1U3FsZGlURlRhbG5JZHFWUU5XNEFvZkFqbnVwelFxRC9kRTJpdmJzalpqZ1R0NnZIUWc3WWZTZFltT3N1THl3SjFPclF2T2doQnJ3UTBRK1QzT2I5NjhtSmtXcjJ1OSs2a3FsTFgwL2ZDLzJZTnhwT0QwSmlkaEpmRUI2ZVV4L3gya2hzNUhvaml3SjBCTkh4OGlUUWZDQVZzc1YrWkd1S3g5eXZBUGJTUFpTbE5NWVFYR3J0Z0pTcUFJcGxaZ0NoR0s2MUFIR0F6WldpdzVWZ2xORXdZOUpUeU1TQUN5Y1g5alg1NlVzQU5nWks3L2VidlhpYVdHV2dWVU1sV0JLcUg0SnlJOE40TjZxUWNiR01LcFZOVmpxN0J4c2oycjZHOUU3QW1kZVkwWVJZK0FCMGk2ekVBQm1OWmRwUUVCNzlPRzR6U0toNFVSUGl4ZXVla0ZCb0dwc0YrQkpXbjd1ems4REowT3cydHJQRDNXL3VHVU90aldsSUx4OGtBc3VqZTVzenRtK1RxQnZHWDl0VzBPZ3FHVGwyMzVXNHNuL3Y4UEU0UXBUQzhPZ1lBOG8rcEMwM3BuUVVOdEFVZmdaRVlkdHExUnFBdHZSVjlXdldHNjdFNUIyVlJMMjdSc2ZFTWEvT0pVaWdwU1RrcmNrRG9USzJYZ0FWUkFtSXlYODRzaWVYSDB2Mnk1U0loUWlUbDVhN0gzclRQZHlBYnFwZGluOG9sbThSa21GS2NnajJzZk1mM3JOcWpSeUlnYWYwNUVHSjgzNExoWEdIWVVTeCt0NGtDdjV0bkZYU2JIcnZ3Z3RNMVRCS1p5czlVamFsSW9yeG41cHRjQlBOU0xqR2l0MEZ0cFd1eXdrdDdDWCtMclQ2ems4bjM4NDBJWjIzTVkxYTFiVkczVWZUaWhyMlljMC96UDdSVVpmSEFzOXU4anhza044LzZEOEl4eUhIT2c1cVJWQjVGbUJhdHJJRGY0NnVadG9FSWxRTGJpWnpZajh6YUplZmpqQnFSdkR3aW9TY1REY2FsUlhRNEhJS1diR21WREU4ZXcwbktSR1Z2MzlweGlQbk94anJBZU5HUU9wZTVLL3p2TEpSVmphNUExanRad0M0citZVUR3Vll2Q3R6endEeUFrYU9PWGtWb2ZGamQ4cW1yQjBrblZHekNoMEJMb3BtQ0RHQTNhS2pyWndtQ0VZYlJTcHIzd1MrV0tJbFc1Ymh1ZE9jTUZqS0laN1RqWU5ZNURFRzBoUWEyQWhnRG43RlRkeEh1YW43amNYdzNYem5lVkxlTTdEcW5VRnIvUURnbWJiU2NiSDRXZ2ppTGFkTXBhSE50V1p5d2h6OC94NDRBdk40blFkdGNaWTJZZk5ldkNCbmQzTDl6T2NiTkZQVW9Zc2Y4YXU3cHBvT0NGMzRNcHc5OEg2aXF3UVpOeXBGYWxPMU5DTC9QTXZCMzdhU1RNSHd4MHFLMTUyZjcyV1VGVjBRaXJrUy9qOU43UG1PSHEwcHdvZG1aUTFGc3o3TDlFUnBRVUlEdFd5VE1zSHQ5a1pNTXVjbXhPK0JURU5hRVdyUWZyMDhiVUF1WXNzWFFWK0M5QnFneC9pT0l2NnI5VFFiV25ac1dhbmRHYXNHS0dvWTNFZVFGNVU1aU9ZT1hDdmhNcFRONHJJNVpjbHVFVUNWcU02anRoUGJ2SGdQNWZEUXRmZHJOSGl4ZUR4RDEwdkVjNmJUZXFKUmxCcDlUdjIwRnJheWNtL2FzZHhHbWlnUGJ3MGljd05VY08vZWo4NFp4Z0xYY2ZoL3JRY3A3L1plWGtjNWhIMUc2K1loWHZVaHcyRjZ1dm1nNzVRSDgzenord2NTUmVGemtub2pzRGZ3VHdEZ2E5ZEgrK3hBRWdpWHpRL1lZQ1dGbVZpODkxZUxkNGd1MlJEbXlFWmZsV2pBWDkxY0d1QnlTT010VVNIa3ZoUC9aVFRhYzY1M05qalR5dy84dzZlelYwamU1M3g3ZEVuZnZrT3dPR3pSOWtuUEFFeGM3ajAxVW1LcWp1dEt5cm1RdEhtSjl0WEZWMXZQWndERkdjZlJHQ0tsUHdmT3pGQllzdk9zOUsxanV2bmU1ZjRMV04vRTBGMkM0RzQvU3k5K0g0eUFtS3pmbUVEdEdEOHlpQTh3K0VIVjVVTENNMlljOHQ0NlQxVXBDNThiK2xFN3EyQnpEUVc4U0ZWQnJzbkNPWEpZR1RjWHNxaSt2ZlN5M0liZW5nUlZwOWliQStsbWl6WnhEU2R4RHlYYjFpSUdaZm1vOGN5MkVwRWMwbHh3d1JVZEFoak96MjhSZ1packdHQ0ZXeXd1Q2JJVlNRUzJVMnhFUGJ1YjZtOHlzc3dPbHR0K2o3cDF6Mjk4M3JyUmU2VndFTGpWMkNrSUkxRCszVU5EZHdpZzkvUXdFZ1FtdmI4UTM5Vmp1MllrbTYrdkdwNXh4TUg3K3MwV0RSZTByMGpGTk04YUExNEx0L053WWtkM1BuNWJNaGRzODBUZ1B3T1o1R0RWUmZ0WDVRM0NkdzB5ZUJ5aFJHT2ZFOEFQL2pKY1BuOS9YM3p4Z2g4eFFjdnFUUktZdDZvSnRzNnVZblo4bTRGa1BMdlJjc3JIaVNPMFlCOWJna2VOSHlZTTUrWE12ejc3bllFYVEyc241NEY2MWhuamNTSGVWOUFDZTl6ZjZGQnR4dTkrVHR0djZrYldNMi9HMmtFRkc5Wkg1dTJzR0JpeTVEOVhPMlUxM3p5SGQvMzY4Uzl0OXd1djRUOUNtN29iSFlYUTF4dUpXTzRYb0Rwc0tEcFBFb0taeFBCamtxU05hUTl4aDVKOEIvUUo3MHJpbFlCSXZKWVZrN0pOTnJJMWtXU3hGakdFTjBvTmhQcTd6R0JzWUxEUThZOGU3MTNGcEhXNUhSZ1d4bXU5U0ZoblIyZ2JOYnNJQVpFRkN5dEQrNjhzQmlGVVo0WVVCVGRtQU1VRDNaQUZQQWJacERobmpNS3puUlZnWXlSK29yT2VqYXo2L1A5TWZkYjBmd1BnSHc3Y3VORHNSNVI4Zjg4OFZ0N3pQTDhybjY0eGZ0cnA3b3RTaXk1Q1pxSE8wSHpGUGNDdENiRHF3SW1SRzRibnJNVytqTzNoOWhyakdGTnJwMnllbjFyQjVDcEF1NjM5UERqUnpyMHNOc2p4Ny9OUmpJbTNlZ2ZvOUdlOUFmYXpVMmNQbTZITkpYVTJoWXJUOG0rYWJ2SWdtcjBDR1ZUb25INSt6dEFxR0ZIZjRoNUE1d2t5NDVrNmF4MWRoU2Y4emc3RVpSWUdKdnR3MEt6NmxqQUJ3NFdCTUxIcWhtNGcveVVRVHJoU1grRXVPeW5WNGVMaVJBRVkxUDl2RUdBbjcrdUl5TExwVXBTTlpXWTcraHNCUGJKR2RqZFZKMzRLZDJmaGFjQWlhbnVPVWlXY2pXN3FNRWpwK2xvTW9Yb0IyMkY5RXcweVBoSlBDS0RtNUtSMUcrV0ViZngzMVM1S2Z5dVBPRHhZSWNrQmM4a01CUHU5T2k3Mm9JZVBDOUI2NUMxMFVnR2t5dkJyYU1oUFpCQkxRMTlRNlNvYm9Ba08vUUU0a2NlelNhakFUNWZLUUlYSW5OWmoydnpDVTg4Y3F6TUY3MWl2L3RwS0VCN0hyOUVLb2ZmNWJQM2pmVDN1cktKMk0wQVY1TktGQjVEN2h3dy9HWU15OG9xR1UzVStFZHk4Z0hoNWp5VGJIZm1qdmt2dEdvWXpDMXUxVTEwZW13VGZocUVDYzZsaFZoL1FISTFhMytCK2dnd1pMTnBFMEZvWFV3S0ZxdGVCQ2pRZ1ptVVBwOWw2Yyt3a2hnSHVka2c5L3hPc0gxb3Q3SHdCUmY3RnpqWlExLzZYWW9EdmxRV0JtRnRTZjhreUViYkJRMk1VQmNMY1ozYWlNclJoakg3R2NTR0w1VlBmbGdWekx3OGNHbDZYRzdIaUh1NWI2WGxnMS92YkQzdEFPeGV1S3BLb1BZbW9MaTRmRUlmYWFOMGJBc3QvMVkyYlR4NmJGdmJkZjFnYlBSSFBSa1pON0RheDFhUXRSRUR6UC8xSjZhYWhJVnVHMFRZbmpjRDRzWVIvMjlKcThwbW84Z1F2YkdKWGo5L2RLZ29UR3RNWDY2QnRnbDJabmVRbTIxWTcvVm1zdC93RGl4OFlLdTROT25UZDIvWG9yUmFyUit2NXp2M0VpVTZTNFZYZDN6VlBiVEM4MDNwMW9MaTlFUmRKZkQzdDVlbTV2WVBUVWIzUXJocEdTQk4ycEp3Qi9Tem9aQWU1WjhtdUZwK0N6U0grVll1Q0R6bXZyK2wyUlBueHFRNnJtMTczdEtvOTVNb24xcmcyZUNJY0o2S0g1ODhjRzF1RWhDRGdLSmdRQml0WnFtd0Z5NzZNY1lyOUtleE1xTG1Nd2k0L0w3aHRaTWpXOUlMUDZreXVKN2hwdlZBK3RldTNUUUhtTEFFUTV2a3hWSDI5eVJabTBlaURwUjdjRFl5ZnJ0UFIvTFpqbWp3UGUyR0ZnbEREOUxTUUcwaGx0QVM5c0dGSlB3OW5DSStXRmJEYjlROEFuNnR3TDVGU1k0SFRuRWtWVnNCaHV0MlcxOXZvMFdjM2NNTHo2TXJWTjVaK2hKR0o1N1lqNDVBSUoxdWxHaHMybHJEN2d2SEpsYWZNZVdzN3ZCdStGVm5zWEZ6K1NHcDRYYjFlbmJBNndRZjNha0dDVVJCcDhSV1RSekUzZ3Z6TmV2dnVxTnBxWmVIbCtCeEk5Z0tiSUlJODRNMW9vOHF1YnlhWEJSQVdGY2xJeE9kNkNaVnQxVnA4WktCUWZ3OTR1T1IxT0lsNTBKZmFYYStNN1Q3c2I3YkVWWDdrYnA0clV2OGhYcGhnY1FkakZqUGVLRGN4OE9MVUtQbUN5QU0zZnBKR2ZqUEtzNno3a3oxM2hrOGdvdGVNUjZuL0NtL1FWNFpURmR4RGhYL2cyK2JJQ0NsaHNMRTJrdDc5ZmtGUDFJTzVha0M1ZnBwaUVoQkVDaEZJeEJmaW9EeDh6VlpLSWpHWjlhY3R0bm44YzNSOXpaelJNdzl6WnJpWThaUXZTWXF1dFJZSzMyTThHSHlnUllyR0I3U3NING1PNVVzeExndWRURGlDY3ArT20vZUQ5WnFwVW41K0xPTDlYUDI3RnJieE11VndoTlZzSDVTL1pCUUhPZkhweEd0eE43dDdWOTJwNDZsQVVIQTN4MWN3bGN1MkpnMFI0ZWVKUXgyOXdTNHpjS2UrL3oxV3I3L2MySHdZdld0dE4zVk5pbFhyQWVyWHh1QXdzQy9zeXRLOXFBbjRySE5GUVVzbkRnOFRudUVKaUl1eU45ZDcrcEV0cHFXTWlKbHhHa1Y2RTkxSkpiOTlINWF0Tno3Z0pZKzFHMk1nT0JEUUhTK2VrRlU4OFpIM0dkRm1ncy9BL1o5NUdSTE02SFcxYzl1ZjNGTmZmeFRaNkJhOGZPMEhCRkpuMjdaOGFGdFlMYUZZVEsxSUJMekh3VHdDYjlaaG1pZ0VTQ3M1bzBjQXJBVHRXNUNoV2RtSm85UlJPTmx5TmlBRncyZDVaNWpSclFRVzk2MWh6cmovZllQZjhUbThOYVorVWtsd3k4a2Rzem5mcXVZZFNSeW9ueE5aR2M0cVZGdndWNElKOXdLN3A5Nm5tWUM0UXdrbzlpdVRETUhzZ3ZKS3VaMnkyUjBOdFFmamJKWVB4TytkeGFDMzRSVUk1eW8yS1R6VGUxMWtEaytxN08zMXJxVnRiaERRaFVPbTBkb0hPUEFKM0hIQVVDWFpFQ1laMURwVE9mN3dESWlqRWVRTW45R2FTZjRWN3FjSVVkM2xJR3lWU2FpdUx3WGh0M0VOT1ZXd2tXRm9XWnd3NkxIU3IxaTJPdE9jUklPemN4QUg3R2VsWmY4RG9FcGo3OGtDOEZCOHhnL2oyU3B1SjJzNENTcDgzZFBKenNkNXVsMW1yOUZHRjhFZm9DWUVscVJ1anRGSWJCb1Z4MTV6Q3ptc2p4ODVKSlFQYW4vUkcwYzZKWVdzcVlsVGIwNTZOYjJid2hwRU83UWFEb1J6UVBTYVZ0QXlKVG1LaGphN05mTmlSdURVemROTnJQWGc3ejU5UVlXY0JkbU9XcElWSGdWM0xpbCtGSUtiMTdmaGhERkczclBUKzR5SVlkNWhMK0tDd2R2QnhNRHBKdGc5K1JtK1dxejBNeEFYaG4xeXlJcFdjb0l4YXZRZHNmbVJycXNZTW82MHpDS2dJZW9oQ1dZMmp1eUJUN0NjUmpVa3kvR1k0Vy82RWhsWkQxVjZRemtqQVRRMElZZzdFc3BoS3Y4TVBuY0pBK0hTbDNmaE1MQlpMRWFoOVBrK0NCU0tzQlZ1am96M3lrZlpoN0YwS1JxaW8ySVNUN3I5eWdOSjZjZjFhb1F2WWV0SnhPeDlLZzBLRWdRamFEVEhrcWZGRE9XQW5YdjFsMk5XcWIzb1BzZnRqZkZneVdFdnZFS251U2QzRU9XZUhaQjJTNzhlRWFYOEZpalZON2tjSzhQYXpTT0w4Y0Ixb0g2ekpXYmhXYnRhRFdEaVpYYUxwV2lGcWVvWmJ2TzlWdWdvcy9XZ0JKQnA5c3F5c1J4S0E5R1JuNlVQWUZFM0VJK05meTJ0QkFHck8zSWVqaytrWjRtYU9FY3RtUzNFM2syVTIxNkxXbVh4ZFd2Qks1ajNYazFvSlRzZnlpcGlhbWUxdFR0c0hDSXpOeE9kZmJ1bXBKck13MXlYZUJPQzFDVCtiemFOZlR2QURRZnN6ZkhrTmdzRDF0S1BpUzRvalJJNUNBS1RvNmR1N0liMENSSEdkRisyRXF3djgyZGtLTnF2eFFhR0tYUjMwOERIV0txenZrdFFzblZvS1pxblUzTmR0U05XNUZJYmNvYnpPVnlqSlBZOXZudnFhM01XZWRtNmdNS0x6eGp4REpPbmd0WGVRRHoyekovOUZUa3ZoNlkvbTJZcVUzMENWMllONW02SlVKeTNlR21MMUI4MFovY2N2NWlIZUxWeEVybEFuWDBxa3g2S1hpaFVNRHoyc2hNcWNLQTZvVDFyOWxGbjVoeDE1TUcrYmtyYnN0dzJyeGdrbVB2cEtKbmFydHRObGVKaDhWVjYydjVTWWNpbE1qeXZzSVhITGFZQU5jU2p5NlU0bmlEbDRDZ2hNMitWSmt5YWEvRFZTVDdVNGVweHV0ZlFNY1RsUDBYR1JIVjdYYklMSm96ck5MRDFLeGh0WWpEbzJSajNiVDZqdUVGNnJySmxyRmpqMmhsMDh5SEdCcmdwOVl1eldLbGZ2WG9JNGJITHZhQmJYdkV1QU1wMWdRUjYyOE9hN0ErSGxxNEV4dG9MMTB5L3NIRTR4Vlh0amUwRkhOZDhlemx5UDJqVXhxQWJHOVBlR3NOMnE1YnNTek84Tk4wSkdJU0RsblhGaVQzWDVLR09GMUZiaW9hZVo3emh2eC93TjZCYWR6aWgvcEZ0NXkrYXVoOENvWUZodzBhajU0VnltQUJnS2dXNzVHYVp3cjZHWTdjR05SdEhwSmMrZDNTRXluUE5yZ2RpTjRnVWxjQktvT2xlZkFjalpBYkNlZmhTUm5UU2lZSlMxMVdpaG1rcmlOM3dTNEw3bDJ2MlpyVUJzVmhyOWYwNUx5V0h5WVA0ZUlMK0VqNkJ2N2haQWtnS3hrdUlMZGdvVjR1U2ZNd1l6ekxmT0trS1VJWUZZNS9hM2x3ejQzczM2S09NeTlFRmN5WjlzUmlHU1hHelJMK002VWdUMWIwWFRweU5VZ1NRVWlXR04wN2FRSnZPZStGVjNSdnQ2dkpzU3NZOGlWUXhnQVJNN0NZbkF6V0ZGclRTaGtSOW5ESU8vSFZheC9idms1OUExRU1pR2liTi9FNWRnc1BnVllRQlhOeGlCNlZ4ZWppcjl4R2lZNXRUZ0N3UG9vTTAzWUpRSmlKRnZEKzVHNko0d1VtNjcxeXRRSGVYaHg1T1dzR1pZOTB0ZkhEdjI4UFJzeUJheWE2dUFHR1prQzFYZEJGWkJ0Zm85T2tCY0tEbDJ1cnNZZWlURXNIeXIzNWlJM3V2ZkRDUWEyZ1J1bTVQTEZqTEZ5K3BPYllhVW9qY2lRYzBFZVNldmNoTndjRlNkWTJWNFZNU0RsK056Zk1td1Nic05HSjZhSnNiYVBPbnpoMkxRQU9VRzhuTjN0L202SWNPS2FsUjdRRUdxZGIvYS81UXVQME9mWXBTeER6NE5GU2FHY0dJaTVTRUtuMFZLdXBCMVdRMlBMdDBVbVgyZHlYelZBQlRwUENGRjduOFdrMzArc3BiaEZqWFBrZlFSZm5zaXBkVFpPdStiQmYwdEZXVExLTENyUStjM0VQUVNPT1Q5d2ZNUkd1clJmbVNtZWxXaWxhS2YvWEtOeEFpVFRVbHhERGpNcFVaWVlkbFhPNTc5V2NTZjN6RGlFQW5OOUgrb3JHTGxJSW1DdXlja0ZaUkNyNW8xTW5OMFNuc0xqcEhKQnluU0lwcGk1dUJZRmZMN1JEWElJQUN3c25Tbm5pYTQ3d2tMZ1puaHdJS29IOEpFTzVZN0V4bDNOdSszcDdNYVJ6aUY2SWl6cnh4R29BVVVFb0NQbmNsVTI3K0MwQmRCWHhRd2VjYSthQytXcFVSMmhGbFNqNCtUdGQwSkJnU0E1K0FnSUNBZ0lDQTRuenNiNndBa29xcjJMSktnVTlyVForaWhoQ3ZQYnUxbWFNSTZlYk1GR0dtVUFSS0Vnek0reHNqZzN2MTRyREZVL2tyT2RZQTRsajdJeHdHNkRFQ05yQmxkUFcvS2ZEL0tGTU0vakRIUUovSTFreDh1NXJTSkErMG1nSmszWU9IeUVUYnhKeHdLVzI1aVhlb0Nja1h3eVRWeHUyOE9SRWltUkFhNGFBZHBUOVkzMi9UQVgyL1R6YStxeWZzMit2Ny91VFAyZEVIM2UwdS9mODIxLzM5UGw5dnEzL3Y5ck9mVlJmUDhQcDhQNGZXaWI5dHJYMmZaby92KzNoL2IwUWY4UHNyZjMvY1c3OXZVbC9EMW83N1BjZS9iVFBEK3o2Smo5djBxbS9WWFA3UHNSUDJmWTIvcTNoLzIvWEMvcyt3UzM2ZlJiKzMwNzc2ZnNGL3FvYlhQZ2sxcnM5bG5hTmZ3am1iU29MOWNQU3NxOWtHRjBzaU10aEREdlpZb2x5MDFXd2JZVDZkRnB4U1JMMUJVdTVGdVBLRUZoR0lkaCtrTFJBUmxXMkRjTGh1M1Axd01yZ00wWk1XaGxuYWw1bWFjSE5ZWFNld1p4cUYydjQ0NzFyVXZ1OU1nbm5tWUF3bVNCcmszOENIaTB1bU02ajVHaGRrSG94eCtZMHFFT1AyL052SGdFOXVuSGFYazRjd2ZJT2UranQ2aEpsWUZ0anRwcDcyYzczNzdLNHU5Yk5RcE90aGRsVmhhVXpNQnBTYWFuQng0aFlOZ1k4SWd5NEhETm1mbzhNeXRkZS9lb25NUnA3RytkYjFYaFh6OTllU3pIcE00aWVXRzhUQ0dLWmZ0eVA0eG0rblZ6MVhkSUFvUURPYWNpb2JzR2NVTlpPMDZPZGtDWGpab09Zd2ZSY2Fxb0k0MnowTGlyVFhSODlQQjRpQlBjQkFmVTUzTDE4bkFsSkRjT2VveXRtZkRCaGVkWlcvc3pqaHNkTnNSbmNuWHJZZmlQOHN4MVRTMnZVZFFFQzFKYTY2b2NObGNwUXZDRnV1aHRXYWJLSVJoUXRVL2kyOEJUZlMyVUViSEhxWFVKWWRDdTQ3TUZIbDEvbnljUXF6Ukc2U0c5V250bm1yWlZpOUg3S1JrTVdTdlpPdTFXM1M4MDU4VEJKT1F3Z2lyZk9CVzFaekQ4dkZKQy92QzdUVVpTc3gyMzlwek9xWDF3eDQ2RGY0YmNvS0h6SnJSMStDdG0xZ0wzNEpZN0VhVTJMd29IR1UxdDhNNC9ubkJnbk04Zmg3U1Fldm1rejhVT290Vi83NXZ1MGpqWFNiUkdDSy9lMnRMY2t1LzB6MWZkelhjc0R0N2htSU9IZ3JnTlMyczZudGtKM1RucHBvbVIxaG42R0lSR2FVQnc5eHA5aFBTU3pTbEFKM09GOUhMd3Ixc0RicU5OdGh3OEgrUDhNWnhXd1VwNWZzdHpxZUpQNlZuMTQvSWt6bTBFUzZjZFdJMVRQY3kya1l0U0NxdCtoZlF4UXRGU0JEeTJaeHdQTVVjSTBTMi9LNUZlVWd6Wnh5NEVqeFU0bjdyUEtBZVhFSTM2Y3dHOGFqOG9iODByMTBhb3F3SmtuOW92b0JLd011dlZOK0tmOWh3Smx4VDNjMThqVDhCU0YrcGxJWkhXbVdlUGpQNkpMdjdvRmtqbTJZU2xlSjh6T0pvVTNNSTNEWWhXTmxWaFFUYVc4S1NwVE1WMmdEVmJheUZENVF0Ri91ZWpxbU1HbHZKZ1p5U1Qzc1pLdjJ4ZXprRDdzUDQxakpTcHNuL3IvL2Uzd2w0bnBRTzV5Q3Jsa1lsNTFQcDlDbWE5S21sdU40OWdMeUJ6bGpYTm5iRjIzTWVRM0FaVzRPdm5QbERtNlBoOU5pamUvYVFPRnNUZDlibUZpWm1ERDBKaWVGN3pFbUZERjJqVHkyeWMyRCs4NVhDMksyZlVMems1OS8xRjUwTTVsMmhLR04zWEkra2g0Q2NDSGFTTGdqayt4QXVzNU5PcERTNEVpK0NKUzhzTURWc0Z2WC9Eb0RkK1BkaG1IeEU4Y1RQdmNQUU44QnZ4ZFFnU2NBYWtET1ZzcHM5QTdDbXhJQWRSUEc3MU9LWUhBUHZpTG9Hd3BPN2dSTkNPS0dQZ0hpbHIxaVNpWTBlS25HZHBoUldhdjNyejViNXV2aXEwSlVJdVdqc1pldDByWldtTEh1TVp6bDJycTk5VzlXVTNLRGRlek5ycnh4MTJUeWQrYlUrRXdsbjVCVjdEK3h4NVdnRWwyMTV2eWsxTDVLSEh3YzVBZklnd2FFVzNrM3JOaXhqNWtXUk5XU2I1azVqeE54NkNBdlZvMmF1b3BhK1cyU3BoTHVhMzNOaDBLZERNR1RMNkZoaGFVUnZsWHhQcTV2UkF6MURJUUNJQ2twWkZQWXQzTUEwR3RMZURqRUkxenAxZXk2bnIyQXVxZkFzbkVleVVFK0dkSHFLM29vSUJQUHJESzVmak5ueHpsc1VQdkQxS3h0ZlhBd1A4VUdtWVM0WUk4MW9BVE9kbWx6TTh0T0pzejhOYUhOMi90MGI2aFhEVDhVK0VQdEQrSWVqdCthS3RXSVNTeVBxdEN1OXJlQTlYMjRvR0laZ0pGajh1cUxlQzBHQ1Z2ZW5HTHVKMHNjQ2pwRUJkekxHTHJLb0FmZ1pRbm1Zb2UvVjBVZjZNM09QUTlNd0xGcWZzMVR2Q010d2psbHQ0OFp3WnRrSmFrcjRqU0duMUdoaGJzVmVCenMzc1dvcldrcytWUndCS0JFeVFvM21jcG5zNzF4L2ZLcXdXQjBjS0ptL2wxck1jcFZnMHZ2NXJEOU5xbjM0eXJsZ3VyZ295KzZqL0VJamQyazdoQUhDckd1TEVrV1hlOVVIVWNiYmZ6MlZnLzdJMGRKMWFOZkpqNGJPc0Z2Mis4VmQ4Nml1WlIrQ1RmMlpyTXN3U1RURS9SZ2pXQ28vdFlscFdJL1VVaERlcUtCVXFpeGt3YTB4Qy9lMVpOL3B4Z0NwYlVpRTNQdDJLTXpwd3ZTcG9RMEdKaVRoYTBlS083UldGVDlzSkxWYWZMWGZTbUdyTG05R01KV1JWR2pNRDNaY2VPRGtDdDZDM043VW9oODBVRS9sU0lUUk91ck4rbGwyWDd2VWhMaHZSSUNIb1Bmbko2Zk5DNDJOV3lYbTVadk45cUh0S1pVT0Z3RzBNOTVWbDdORlV0VkpDWGxmSHZpd1NGNkFlSXZKaEtoRnJzUzJYbXMyTGVGN2Nya1hUZ05qbVpxdU9lNE00STAydnI5bG12Q1NxTlE1Nmc0YStEOEhaK0xwcStKdUpOYkRTSlNEWjhQNENrdzRaRFpQU1NNdExWdG5qdWxtOGRCMzVNZ1kvSUVnOXluS0l6aWFCL2xBeXhkZDh5cWc2TE9uOUxISnVNYUkzb3MvMWpuWFdldmtOQlR4UTJTNUtLUFh3VkdyU3Y4dDFFTmREUnp4c0ppRjB0aklhMHlXZEtMSFhOWTUwUFUyOFRLd3RNelhNK1lTYWJJYlpMTlBlSVlRV1dMOUZ3QjE1aFBBZkg2dVZjRWk4U3M3dzJsUE5rMFd3Z3A4M3RjSWtTZitJZGl3VEN2ME1zR1hUN0pNRzFYMVFiaGN5Z2FDZlhjQ3pyTWQ5TStDU212MzRhY285Z3FaY3VRdEhORVdzVkZjK09vTmVFZWdBYklEaVA3NEVWL05Cbi9mWmRTUHZ0MnA2SXVoSXR1dk9aVk9PUmVRZUJuSmJTYUVCbGJOK3oxUTJjQXMzWUEwN3d5M0NOdStiNVhCQktUMGIvWk9LL0VQQ2kwcUZHdHNkMzRXM3IwTnZRc2lyaFRLbVlRSDVYbVQ2NUpVZzlWWkt0R29HN1BNTW5iL3VZMzBucW9ZUUd3TVZQY0FlN0k0WWdOdHVSQUdSR01uUW9qWTBjaXd3Um5EYXdhUWZiUGF6SlFHWitTU2dpMGx2WElGbkZsc0kyQ1dIWVlxZUV0bHdCeWxCME1iREl4K0w0MUY5bmkrMFJXRmNnYUpaUUMvVzF1ak80UU1teWNXQU5rcXFNSWw3M2lXcE1yL29EdjkxYUNxTmtkeUo3S3B3bjlXWmxQT3lBZlZkdk9NdTVHVzFDS2kwdUVNWE11ZTd0QlJhaUpFdXpTQWprWkt3WGVQVlFXWnpwTU91SzVIaG5VaUc2enpzVURyS3ZnZGdJNTBjZ3R2UW5aTkpwYzNuQnlXTlRIb1dyY2YwNThpbUJrcGpwL3A5YUtaUVYvSFNqRkJSV3k5UjJZVkdLR1NUblNqUXFwUGZkWGFzU2RRc29SeEN5dWc2L0F6eGhCSjJRVzR0Nk4yTG9RbncxaENLWVg0M09wRUJ2cmpuU1NLNW1LTHRFdDZoWTgvUEpWK1EvMkU4dzE2NTRrU0FldFFnMms0VnJrUjYzcVBCaTNIK3I4aGxuUTY5ZFRFM1BQc2xwU2IrVGIwRHlGVXY5T1FFWDI5ZUI2NEhOa0NPQVk3SFVJVUVFZVF4ZjV1eWZvVlg3cEs0SUtDSTdXSCtibGh3TVQ0TVYvckFCa2VUWUtzNUErS1k2SnRUdmkyUDZkTHY3TEJadTVqcWlVMjU3SWhEVGU1L3hSZ0dsV3JMSS9CbEhmUStIa0dtSE5PU0pzWXVqbUJEZjdTeGI5UW1PeHlYNGxjbzNqbVpZbXJMZDFSMDdyQkxIZ2R2VUd4Z0g0VmdiTDg3R0dMUXZNa1U5K0lRUTdZYVFJd3J4V1FneHh3SXRDTlFXc29TejNmdmFPM0hiNWx2NnhNZnRSOW43VDJSWTVnNEFPYmp0ZmRiWnV5aVU3MUJJalBvWVFNcVI5VndzOHFYSzdUOXhjZHhZRGdvaFB2dGs5c0VTeUc0Y0RiaEdsZ0p5TVNjTU1seE1ZekVIdll0L3RhZ2dWVGcxY2NkUDJBUHpwZ1Q3KysvVDBhYk0xb0lwSERIQWlXSzdqYy9YWFlIajhVL3J2VEE4MExSZDJITlczSjdPUld6NzZYZFpsZk9DcmlaQ0tSb0JsallpbGtVYVU5K3FtYnRuaDNxQVFUaWtTSFBycWpXRmVuRnpCVGlwMTZrd0pqeUdCQVJmcys3eXdlL2w5MWFHaTNZdVdVZWNaSTNpN1pLNzJzSmdlNWNLbDNvYW4yZU1LVGhXUC96d291clNwWGc0Uzl4L3VNQ1F0Wm1EdGJyb0JYamVaUkFxWEh6dmJUOVdMMU51VDhPVTF4blJrZTFvZ0kyMkVTNFVVbnhQUUtIcEZtR2JnVnNwUi9JQVNna282REIrTU5oQmNTYXVvWDU2VVBsM0plRFBjVFU2UlB1aW01ejhBdFNKMEpQRm5YK0hxUDlnYjBkbzFMSlcrR1p2RXBDS3VuZnkvbDJpZDF3a1c2YU8vMzdvRlJPcGw4ZGphNk9IeVB4WnEwdmpWNVQ4NGVBcVlqL3ZpeERqSnN1RDV0TU14bFo3TTNFZnNucjNJZkxuemxzTFdxWFV1MWJyMlVqTWprNFpJQWFvN2gvQmY1ZTZrb2hkME1pdU55c08zZW9yKzhqL2hVbi9DYUFUTHJnK2xhREdrMXFwRXhibFFERlRCZW90TUtOcVd5RFZlQVNVUFlOSEdycjE5WENOYWdpMDg0WW1IMVVqQ3huSEpjb1U3TlhGYTduNmJtVDVzVFZERjhHZ21pLzhzVno2anNBQTdvbGpidDJGY3BSSW1jREtmeTNMWnlYMVh3cXVxdjliNHJUUkE1Mm45cWVCNDdSeFoxWURiRC9abEdCaldFUElqSVBTbkRDL0F0SElaMnRXM0c2TDNwWUZlcVNTTmk1Z3FrSS9qZDNTTGM0ZW9nZ3ROMWRBT1pmeEhOb2tWMHRmR3ZDQWdTVXdMVzZIaVpxdW5nVTFwOExZTFpDdGpPaVRkZ09LK2VBK1FYZk43aXJsUm44Y1k3VTQzQnNCYTlQMVJPOTBVb2lBUk1zWTRic20xK3BFTjRrOGF5VEZicEFUMzBtaDl3YVFYNmdEV3dsU1JSdXdXTUFielJONXQvWklaNDNaRlJNUllJcWRGRUxuWUpSWEtWb0dhQ0wwNnRrQmpzNGNubE5hSVZFcXF4andRQ1dVUUw5aW01NUYreEx0U1Rld2VkdGxSKzhVd1ZzYTRCTGg3ZEhVczJtc3R2a0Y1Q0UrbUVhTkpRYTNtZmJNejJmTlhGZXBMeTIzN2hpWTRCaUtRNDR0MWhxbzh6UUwxZlpRZ21tcGNLUWF1MTM3cDhScFdkVEY4aWlCL2czYU5IcmdMc2FDYXVOMGRZT01lRHdNOERHeGNpUUl0VGtsSVZwYkRkWG1EZWdpVElGQWZVODVNT2h0RHdLV2JuSGR2NWgvQWNOQy9ZZUVvd3NPdllteXNYU2R2SW1yREtsank1L0tSalMxMWY4OS9aVDFibUFYdUgxendmUlJxNHJJOFNPSTBlUEZqQWs5L2VDdC94WHZrZTRvVGkwcnFkUll0MzhmbTdzeXdrbEdmdWErMlp6c0ptTHhsREs5b3RwRU9OcWNZS1dxYVAydEZMTnVHN3hEUVUvYzFIbUZCZTBIQmZ2WTFsTXVDa3pBODNhMUljbS9veGMxWTd0emhiRTltS3lzZXg0dFUrV1ZkMDlnWmkyRlVnRVUxSWJzN1FzVWR5ZXd6REVvcUpDNjU3b0dna0JiNzJLWE1IU1hrYWVXRkZ3cTRZVWJ4WVVDMjlSbFZ1dXNXeTZoL24rTVo1anFqOThaWEsrdmF3SExHM25Oa3ZzdlFQRHRkUzhuTkRsNDBrSWNKOUNaZGcrODJzU0FOWmsvSUdXaW42c3FBNHhsRXRBYmFsQkFYc01xN2tEdDA2ekppY1QvSFNoNGZhUWtRTEJLY1JJNnVJVUFGbDA1SGpLNDVwSlk1aUxXREVUd0FLZzlnckNsVnkxMXQ4QTgycEwyczRKZDVjYmdMeHdvMTV0MWpOeUM4UXJFb0NYWnZRYVZ0cDVxaUhmNzRsZkhxaXltdjJ3QjRkbUFJRXJPaGtxQzh2VzRVSmRIUjAzQ1FQSUphSjAzSzZ3L25kTW8xQzZsSGZabmJJaHNXei9tVUVWOFpKNGl0VVc3dG1kLzRlWjlYQXFzUCsrQTRHQjUwdHJSM2FtZ0FGVFNpN2F4UWJDM3g2RWpwdzlQTlB1K2dOQ2Evajl2S1U1SEt2NStRMVdwWHQ1dFFHK0dSNmg1cVFpL1JQNGY4QnpuYlAxSDdNZHBGTVI2Q3BGTUN6U3JoMDFPQm9ra3krS1BkNXlKZ1E2RnFxUEV4aWtxbVlIaDFONVpueWpmZE81Uk92ZWZnTmwweXh5eTljZmI1UDV1LzBBdDFzbTllQzNHeUJuY1JnNm41cVVtb3R5eFlseld1UTN6cGljMHZEOFpqa0lTeFN0ZVNaemFMZlc5SFFKdjZsbm9oVnpVV0Uvd1NzWlE0eS9qZ1NQM0dyQTBsTnJqRWpFYUNoTzEwTno5TUcyQzhsL0Y0UDhuUnlJaUVremZZVEVnMk5zZXBqaVQxU0J6SlJFNXRIeXlzOXlqUitDUiszenNVcjlueVhLdXQ2Y1VKaytzYTJCMmwzcUpWVkUwWmtUb0VjZ0pjWGhBcTlvSG1ramczQmc0VTlMaWRDZjBUMHVVcTBPNFgzdWJwYzR5MzZSWlVLOEZEd0tMeUhudElwL2lJai9sWUZWZk9wZXdmTDZRaFlVdnhiYnZTaTFQc1VVbm9FcVNEcThlR1BJUE9QTUhQSnJoMEJKRHVDMWlVVWZlbDdzcDNpZmxFbVFmek1qNmYxTitTSWhuU00rZUJ5NFJGaU1KWW9SMkJZM0NPR2ZlZk42MmlkTnFtOTB3MXlOSUY4aERxRk1GUmVvMUJYdk9BYVdwd2FzdUdEcWJ2NllpTzRrTnpteGJlWm5kZDlEOURReW5sZFRQQWFLTFc5VDFrcHBsOE1PMWNPcGNlZ3RaWlpjM0pvcFA0dURSU1hNb2pQbmpqempWOFdtVUFmeWtCTFdJeEl3ZkUxOHYrOTlwK0E4cGxOdzFVamQ3Tnh5MHhCK0RHRGkvYm5nQmtzVmJGbEd1QUcvaCtHNVZNYkhVSkIwY0F0TnBUT2JRSHZKY2VOczIxTmFMZ1FsbU10K2NEQVJSb2YreXVOTzU0NS84bkpFQlRrczR5T3J0TXhoeEdlYk54R01VK2FlN2NIZXZ2dkRYT21Pd2pVKzBXWlZqQ0hPUzNFM0hjYk5yQmhva2hNU1NxSWhiU0lFaTFWRnJVUWVJS3JvQ1daeHZmaU43T2xCNVJueTgwRCswSnVxa1liQ2pWeEpuS3plVXFGalNuWWRmVXVaU1o0YjFsVDBOamFwWGE1Y3dIZkZXZlhQbUk5WWNBMUZhcDRLQUZUOExyaGt1MUg1YnM3V3ZGdXlaVFpSSUNyUzJNRHp0bnN2eHNXNm9sa0REUVA1ei9GUGtNTlN3WXlTN0g2NVdrMStsWWVJd2xSMjdtZk5zQThyS3oyMm5iUkJXQWNWc3p1UkJOWlo1Tk91RnEvWGNuYVdJbmdJS1VGdW1QbXJsUEJFSHNWODUzRlBOKzU3cFpMdFJ0VW5DMU1RUDg4QWtidlAwUHNYQ0xxd1FxRzFsZ2oxK0hJSlpKdk5CaDU3RmhYbGNXVmgwMTNibmkvamtmZFFSWTlFZEo0YkRxVzk0WXlQcTM3emdCb1F2ZGVYSmVvWklIckZyTWxUYWxpV01EbGowTWVGeDJHRzgxM3ZJU1JHRytXbi9nY003NHRXMXk5NjNaK28zOVZ6Uzh6R1dvWXpjbjRLdXNEa1B5bXJ0Szd5SkQwUUEzNkNuZHArcGZtMmM3b3Bmbzg1clZ0bHp6NWN3LzNDSjBIbi9GUGE3enNxbU5MMWF4cEVZb1RHU3pCYU8rYU9aSVc0Zi9EanhjN0ZZd2VLTW41V21teUc3dDg1VTNSQjc1Z2g2SnM3WGs4aC84SkdtY0Z6eHNPRHRNNG50dHEzMEpZTE1zbHFjZEpzaVBQRytRVHRCbEJqTVVoeW9Gb1BQUVBkNHpuUUR0VXhISE9oSmFFNCtUODN3TU8xTUdzaGxqL2oxNHpiT3ZhRlJ4VWN2NWZBZnhVL2dKeFVySkRtVzQ4Q2pNaVNKQkw0QmU3YnBtMnVZU3JEME04d01rdXhTY3NPWmNVZDR0TXBnUFRyTTJaNlFoNytETmE4eDgvalVuYmwydDIvQXl5WmxSeGx4NmI4SlJjSnRId2RORjNNV2JBTDBnZmkxL3E1L04wUVpJZ2wwYkRuSmYwckE3NUNUNGc5UlBUbCsxYnZtSzVTdEE3dFpDRHQ5ZUszQ3hXS0VBSzVWQlBuOWdMckMxeTNheG0yZVNRQlRjYTYxUUZHemg4V1hnQmxUOEQrNlBhVjcwbUZjZithb0xpbW12TXNFUnpjR2U5d2hYbEhyUXB6NUhhOXJ4UUtNOVR0bUpGZWJTNlNzQnRaSzBvcFQ2WlhkT0gyZ2pjQ1hjSHNnZ2w5c3Z4bFhUR1ZuWGdQdGZKK1RDVnpaRFZUbVkwUzYvZ2lYQVBGaktjSjZzY3FlKzM1ZjJ3dXdUQnQ2c2JjSzVSb1hRV3Y0NU5qRDBibXdtcDVhS3lXMVAybmdpNy9wY3pXREM1UDJQNWtwNVZnbFlSMklGekJINXpSajVsY0x5K0JPNC9YTkJ6Vk85ZmVMTittb2lXY1M0QlNzODZDS3BqQTFCVnMwYXNkOUNleE5zdE0yWVFGREt5c1FITmY2Ry8wN0tyY1Y4MU5NQXdqVGRSNFhhOFNFWVdBdXRHM09wSkhzMmhqMUpYTFV5OE5vRlByTUI2UFJMY2FuWitZRUZsTUhhYVZUMHl2R1FYamVxQUVIMUV2RmsvSU11WGp0U1BuQ2g5MW4zQ2tBQndHSzZib2UvQ2dDaGRBVXF5S2xLV2NsSncvZ1hiREo1VkEzcWNzMlJEUEsyb0YxdThJRWZKdWhnUDk4V0tUaXBRWGs1dHo4WEdBa0lPLzhiYml4aVFmd05SSjJyeng3aE1JVytUZm1zUU5NQ1VJcytEbTkvTlJ0R0xNa2dFU2VxSG5BY2hxOXpVR1dvQnY1TFNCV3V3QVF6MmlTc1ZaaFcrTHNRM3BIanZPNUVCVHV3MHpyTlBHa1pmb284eTF5M2xPdXZkb0RNZzg4RVVpSUFWd25NSUFVbCtOUFFMcUNFWUtsb2I1REpTRmFvWDdDL0cybTJrUmNWSTBIZG9hZFdtS0hGZlRsWU11UEhoUUp1cThLb0JpcTlPUk9rNTMrc3dEQ1NERnU3RmoyWXFoNVJEUVJpWjk4aENZcUxPWkVxUFhYM0RsSGVaR3VKN0ozc0FVcDBucmc3YU9DYWhlZkx1QkdhWENrMjR4N3hCWlZLVDd4NGZ4ZUI5OGNoWEkxKy9Ta3RHdDh1Q0x1TDVFaENZNTh6Z1hTZkszZEFUSUZEY2NGNnU5eG1HV1BtRk5wNGVSOGZ4NEdPQmhpOWdUUklWWm9wdFdUVGpIdEpFNHB2M2lhU2FOek5NcUxLWXFuei9hYjNxUG1IZVUwY3YwV1hxNWR1cUg0UHRoc3EzM2pSVjlQRjRrQ3RGMFJPUU9CYnczcGFTZjhRMjhmRUhRbTVnN2JEbjJCV2Y1TjhPQjFBNnl0REZqL2JTSFJDVVBKOUV3S2hRM1ZPcGtBeDN1aXRuOXgrZnpLYWhMZVY0VEp0NFdvTG83dytUenliL1lMT1BreFN2VE5QMkh6MEl5SnJiNDF3cHV0U0JQbTRqMWE3WnhlRDZNWS9GTVhFYTV4SDJoRVdFREdKbmdyU0EyZE5jdnlNNDlKaWVVYWpUNHlLYVl2ektmeVNLbDBHdHh2d1pTYWMzSFFRYWZKbld5c3NKUXJHYTVudGRsRFE0TGVaczlZTUpGVkt4enhBKzBzSW5BL0VqTWdlR1Bvak9VdCtYeUcwcHZ5NG80eXNweWVVN2V6SmVVT09QSmk1dk83RGRTRmJxNkU3R0NrVC9heHVmRVR0eDdKTlAwUkc1TDl2T0plL2UrL0VnUWoweG01bnNZYVljZXFtN09YbHBkcGN2MThOaHYyNUt0UFNRYkFzbHhCRWNvcEpxV20vbkhKMTkvbnFSU0V3S1dsVjlvaDFBelhXdit1VDVCTG00OHlGdW9ZNjRUczJQUkxhRFVEK1NzRXdWUTBLOHRGRTVPaVRFS0NLeVo2UFFtQ1FPNE92L2FCMFNRYWl2Y2g3OXlhU0UvM21KT0l6YkEyR1dPZEw1b0dzTkxzQ0dzR09HNnBjNFVQUCtydXkwUEhPNm9HSlFDWnNmdlh2NklEaUNBMG8yQ1JZQVVnbzYxU1dBRk0vdVRydTF2c2FxVmxTOG5VVmkrRkpJVCtmR1g3aHhJYzRkb3gvTE1nVmFPdEZBUlBRVjJqTC9hZGtBMmwzblFyYU9teVR1d1BLZkU4eXhOQ0VYeStrUHBQN1VoWlllYlJNZC92bmJBZHpoOGdsUlNyMFhpcVJKYm1STStTNWs5WllobDltUm5lTDZxaHFSMy9DK2w5NU1DZkQvaUlmTXQrU0pkOTRGLzkwUWh4ejlpZGJpNDhGcjc2MlNMNnNlQ3V1bllVaCtPRXRta0FNREpBU3RxR2tIcFVyN3phS09Tc1gzWW1ERlAzNHJEQnR3dUoxTnhBZzZoZVR4MkV3d3gwYlBsSmx0SHpVdm9wL0c1QlNuVkt2OHUwdk9sOGF5U09BQ3BBS0VteFUrUkdNVDNxY1BYc29LZCsya2szN21tMlpqN2JFUzVuQ29PT0hNNE93VmxIWHVWWFEyYUNlczNWcXV5dUhreUNrZ0FFcFU0K2VKQjM4WXJLNE9OaG4xY1pjeEVpalVLVURITE1iQkRLc09rV3FPTFd1WXVUM0REakpQRlN0NytVemZ5Y0hPS1lTbmsxZ0VWYS9wbXY5L2hpWlFuS1hVUFhJWm9zci9WSklLUEtWNmROOVpReGgxNEtDaUROQnhGc1Rma09CbnlyWHdTTXlOVTBwMHlrWVc1RUU0OVNoOC85VlhJUGJrMmU3TlBWQ1FwbXBVK1VyK3JBNm1BMXlpK2ZrNklPUlNRcVZHZ3RpTUZsbkRsS05IU0FrNDlSd284ejZUNHVrVEd0WFp2R1dUT2h6dGgrMzVRbG5DdUp3ZUxNdnJJMGQxY2drblBITWE0OUw1OUFJT3JhSU9FRWFyRGFheGFxRDFPeGdISVNoSTJPZjBmeDFoVWdkSUdNMUZmSWFwT3hNdS9jdXprZzR4aERzY2ZMbTlZSThhN2JDYmhlbHRZNzFIZ05DYy9DbEdVVFNMVE9GTlNMbFdjUzhZd0dETG1sSGFhTFNKaWdZak5TT2JFakVJWFdTNjAzMHl6N3pFalUxQldTUk1SbW1GSHZLRW4vT29WdzI0TWxKT1ZHSkpVcTBPV1JMbkhRL1BiTGNnTzNqS3h1NXVLUlFuSWJsQTFaZjI4YVRYbnFzNGtyODA1YnlXZ082U25Ed05pVWlHMWh6cDFaNmFxc2tjUFIvdjliSTNDdlZ2S3ZuNFdRZGovMFRwZHRpNWZLYTdPeFJmMUdQMTQ0SHl6Nmlpa1hvWlkwcEkwTCt3ZG4vTVhuY1FrUFlhdVoxZVZHVkZ5TmJpajBJWnByQ2UzcTBLeWxVSERXN3BDOWRYR0pEQkhtajQ5NXhWMGhHWFl6czhWUlJlRWpPbURNRzAvMGpXSGhYSThvZ2J5SnNDeTFJQjNTYm9XN0NweW02ZXo0aTNIMHlxWE9ISnVUWVdnaE9EY0JlWU52TVBISGQ3R3FTQ2UvSUd3M3JuVkN6T3RBcjJEYmhHY3llU0w5OCsrdDZTYm5VazZsTFN3ZS9DL3FucjJDWWVxR0h4RFRjU2c3TUhZZ3ZRcmJxUkJvQ3ZBZWxCTUVXNHl0c1cwVVRyd2M3U2VKc2VPNndoVituYzFGV3NtNC81aUdDZXlnNHA3NE9haEdtTDhKbjZ5ZUhTLzJKWGlLT2N5OTB3aTBtTzNUUEZhOXpLUXJVbFMrRlAzUlBRYlloYWZQVHFOekZxbG04Rzd3d1VvWE5ja1o5RE42NWtVWlVvMWxsdjNvL1ZMVThHR2FJSW1ONTRCa3FCM2ZNZ2dsMXNTU3Z0YlhkelBmVkxNNCs0M0NVa1RUc0RWUDNwUFVCa2R1L3doeE5UUG52VStLdmp3V1o4aG5Tc3BFTitFc2FwVHhwYjJnODBXTm5la1QzMmFwZnphRzZ5Q2g3RmFiSFVQK0NjOWd1SzYyelVuQUpBaEVZaU5KWlB3Njc3a1RhQjMyakhDVzBUVEgzczRwWGlNVEdPR0M1M00zYUM2U29FL25SZ0FJMjJvRHIyZWhiMWJueVVNd05TNXM3cjduUVdobXpERDBoQTkwT0ZPazVGbkVaaXRJVkY1L2RrR2FTb1JMSWl5OGdhTVZtbUFnRk1aNXgreFBEVmxMQlN2cmtYdHJFT2t5N3dKTXNkVWhOVG81NStwS3hlWXVOYVNNL1AzMjFGK3hEdWc0NC95cmE4R0k0ZWNDbVZldE9UUHlDYzZjTFphdjk2M3JGbXpDTnVaMC9jWUNzYXliN2pHOWNDenhTT0o3djk3K1pla3BmOGVxcW5ZWEJsdkgxYjBVaWMzR2lXcXBsamlkYTZNWkttdElvN2o5cDBPQzBuZnEvZFhNUUR6dVltMkVRdWpXSy8zMzZscXBhM00rbThtVFUvWVVzZzExSDlnWXpVZC9vWDJjb2RiY2RXRkpxeGVpSnNVcWRNb284NGVLSUUwSWRucG1GMmk4R1NiaCtLNHF3MmVxdTRCWSs0dkpSY0FRcGF3WEhTMG5uTmcyRGU5NzczZHdhSEtjL0s4a0hqSVYwdDdiclg2K3VScjFOZUUrRUJ6T0pvMUFwVkRscjlJdUtyTThuT1plVFNXaXQvVGVhMFhDTU5uODlsWEpXc0piNWxMNnViZEZpN2o3SzNXNW0yTFBaVC9QUXcrUCtJRXJuM1JYRkZkTmRhcWc0QmpzeGY0YTcxTWlrUWNoVDF1L1I3NHVuVXNpNzQ3WXB4U1E2bGN0QU5KbndPWno3Q1c5S3NadS9PcFJ6aTVLZFAxMElub3BwcUNuaW9xRW9KM2pOaCtRbmt5aVdYbWNUcy92ZFRveGcvNEFWc21VUFRZcWVSSXJhVGowM2hRdllQZ1kzdEhadEtsSG5WWVZrZFFnV0NhTTdXRjFLVGZmclR4bU83TVVmaGcwZEpLbmx0cDF2VlcyZ2dDSnlkSTI3WWNycGtGRi9zVDVoTGxJeGExeVBuVVN0YzhUdlROazY3a05ZVEhYcjVnV2x2VU5YTDBEWE91TEJlUFRSUEh6T0RLL1hsdEZPRWlSYmtQTGFxWUlPQVI3MUxTVDEzQWRmME45elNmRll1cmg0b2s2NlNpS2tab21NMnZpU2VzTzVWbm04TkM4aytHSS8xanlUYndpcUV2R0xuQkFOaGR5RGtWbm9QR2d0UlRKaVk3cUlZWjVNeXRqdFUxa0djRUJKTWRkcnJveFZEdExvcGlWRlNEdm1tU0hwdHlYZEFGUWpxZEZoRnFPNkovWmJscEpBRGpHQnI2VENDc3R5bEc5VDZhekViajArNGhMUlpwY0hiYUxrQWlzV2xOejM1THhOL3BmSmR4bDMzTVFwelNHVHp1RlBHWkp3T2Y4dHBsbzZ3M2VtOTFYSXZ6N2JHMFFGMnFqRXBOQ3hxbXY3RXFUR3lPZmdUZktUNmVsL0wwTUdOVjRtY3N5bHpVMFdTNWU5emRSaWhPTFM2b2Vnc0c0eGx0ZHlHMUtFb1M0VWJLRHduR21pc2hoM3JxeGxlQUx0Tkx2emQySXFiQnBETUU1T0Vkd1p3aTBvcHB5NzNXcTdSTmFFM1NIRkVTQURJTG9BZSsreE42bkV6VVdseHBFeDRTd1BZMTk5eWswSTdKUm15NHByWTBJUEJxVjEveDBVUUZPOEtCc0ZxbEhrczZmbEFNOWl3eTZvd1IyVzBncE9WSGdXeThycXBUcGsySEU5SkVpTTFpcFMyVkdRQnVXT2pmcnYzMmd4MkVJWkxGT2ZOdW9IcFNXbnVWTTRSMStEVXEzUGVHdFFDaVo0MkJqTGNtT3dHNzB3TVdRR2swR0tUWHJlMXdoK3hkTERoNUNSN1hxaitINlpSdkpFN1dWK29xVElvSVZJQjd3V2I0cUlDL0xxMDlLRWZ0eUFxTEZMOUlVT0hkMjFrVDV1ckc1Y2JDMWg5c1dnVFgzNGtDRXN5ZnpuNVl6aS9KVDhmaHUrdGE5Qy9wQ2JqdVVNM0l0RjNFeHFmZExRTm94WGRZd2xIY2cxV2E1cWlkd1lsS0p1YloxRnY0dWJHWlBpZzcxV04xRllzNy9hNm5rVTFqUEtKRjZoU3Y4alJFL0d2bzFMTUlnNEgwSzBwaFVhV3JpeUlJK2t6SU1JWlo1eGJVaC96Zm5EczNkU0xPQ2tXN2VKTTZ4TzZhQUR3cU9DRndkR1ZEQk41bXBmekR2OUt3ZEM1UHM4a01lZTB1MmE1b05jTXZWcjNxYWdtdzlrWVdRQnJGRGozcFk1UlJ4R2IrbklsSWtqZVlud3ZMbEFsRVZjaTA5bmpocGVoWEtJa2hsbmZwbHo5Q0FmUTdNTEU4TVZGYVpDR1B4VHoxWmpGR2JZNVRzNmJVcS9mVlhrUzZwb093Nzd0aDNOTGJsRW1XTzJMcWFBYTdlYWJsNE9PQUg2YkNEOGw4YWVJbkVLdjNnL2VzY1d3NmRPV2cwMTByQ1dpWjVYdEpyUEY1c0lvY2s5NkIzanBLRlFETGhQV2taMUpyamVZZ3dFODFPTlI1Z1pETDdRdVliMXpabXRoSGNNL09xakRXOXZzZmlNMTJOcm1PRXBlbXovVjBudWJ5clA0cDNhYTVHUmViOXQrcEYraU9RVkx1MmtQYWg3TnRMQjk1aFU4Nnd5Uk93a2h1eko1aWJDMDE4TXM0ZkcxaWFRR1g4aUUyckhkTEVLTWR0ZnpOV1RPQnVtdGlvSFRFcFpsY1pPbGdJdFNBaWl6d1RBdGpMZWdzdmRrdEtGTkQwckNIR21CQkFyQ1B0VEZoYlp6dTFUTTVIUFRoVnpEVmdvVEl4WGxITlFnejJENWNQbm5IMFY3Yk9idjlnZG1DTmhnVnp2V0laSjdlT1JwVE13eFB1WlZSeHlrYXJISEd2U3hSNCtzZE10QkhBakpJNWNHQlI1RmxhQ2QydjdNMFVEZ0JJQnUvaUN1SG5NVWRER3NuWEJYMTBFalB1ZHNseGcyc0lMSWJUVElVenNTdnlHa0tzOGV0TEVjVWlVWnNkN2hSY2ZvUThQNVltZENvMjJ6Tzl0VGtZOCtoNlB5ZTlNZXBmZTl5R2wzTS9kT2hoTGVERlkwMFJXTFEvYVNhZ1ZRL0RNWldnekRFOTc5T0ZiRXQ0MnhXTkdJSS9FQWNBeUVWR1J0YS9PR2RkNkJrcktIbVpjNyt2T1FDQ1N2bHA0YVhrN3FnVWFLVUoyWXE3TGl4cHV6blFXTXl6QzJtL0RkSWc3L01xNXRJejRjVFNadE9CU0FKWnBHZk41THB2VjVQUXhSWGVoS3EweHRsU0VFOGlMUmtMU1ZZRGMyME5jNkg0ZnV2SDdudkpTdzdBOEMwYVcyZHRDbHpnM2F3Ym9GdVdMd1FLNzRnQTdpblBINmh1Z1lFcUhFcUt0S2lwb3dOb1BRTU0zZzMrRk5aTjhoM0w1enJzb2hUSHpIWlhvVlZsLzMzeGhsQ0FMMHB4dzFab3JabEp5Z2JaTC9DWHFrL1ZwcnZ3WmlJeHlzV09PSXkzU2liT1B2S1JUellhTGlyblBKa0RWQ3cvamZ2YW5CdDAycWp0dEVnYzdqK3BvUEFpTDFxTWZqL1hjb2pCMnFySUMyNjFKU3FhSnA4TDZiQUptTUtMVGhQcXkreWNHZVhqWlAyeHZrUDFwTk1CMFpKYVNudHpRREt3MUcwNkRYSHdRT3A5d0Q0UlVtaGpDUm9xT2FtRVc1Y0ZiTDZUM29pdTVtMHowWk9hZFJOU3hWd3VRcmxZYlRzckN1TUdBRVY5VnVsZHh6ZEFuMzlCMkppb1U1Tkc0eElZRTNzYzRvYzFmZ1VQRFFEb3d6WU56RzgvNkFNdFVtQzh6T2F4RENRKyswdjJwZG9ZbFppRDFvbFhDWnlRUHkvM2RnUkhhbnBaUWxLdFl1djVRbTNyR2dFUEhBM2xUekVxbUlCT0lybEZRM0tkVEg1djlMY0V5QURhSzRTL28yMWk0N2gyMHJKdXI0djVUanh2djVTMlZzMkNZTlcxUEh3UnpERjZKT0l4YlFXU3UyWGJ3bS9sU09DTHpHUVkzNWJxWmk1MmtUdThvbVNKRGF1ZDZEcjh5MUFIUks5KzJYblY5bWJoSGJZek9VYWt2ZGgvR0FIZmxtYTZRZVZkc25kNVJkWTRtMlhaRkpCbmgzdWIydXJYOGkydC9TM1NBRUJ1UXhzdHJmcnFqV2lWMGs3cTR1TEZEWG9tb3FvcDd3NUVpV1d6N1BmcFUyQzJDRGhvWmVsTHZqMXBsZGorL0VxbDdJNVE3U1B0Rmw0akRzbCtaRnNvcHI0NUw3TXZDKzRNMmZWMkc3RXAwNzJORGk2SjNsRDdobTdvL29DM1p5a3pXelBDcml2OVcxeWlDRUdlN3N6akRMQlZCM1l4dXI3U2lURXdBSTB6YkthQllhQnRlT0t2WXlsanQ5MFNBUGt1aUhNYVNsMTRmU3ZOc1Zzbnd0bEhSb25BUm5Wc28vTGVVVFFaR1FzTFJHOXZnUmo0bE9Zd0xnaHd0VmZpWWZVMkp3c1gyZzVCK2xpTkM3WGRiUTVoc201OFdsQnBHejhyRDFlaFUwSXVTM1ZjMU42YThRdmF1M0xzcDY0TE5UZWVBOHZXWDE2YTcvQ2VNV0grUkJOdGdiQTZ3ZGxKTlc0RTE1Slhoekw3WFJ6Ym1HM0s5YzYwaWhuZTVnSlRTMm9xcGx1dXRoN3VuTjl6NFlydUN2MmE3NC9IZjFxcHFDalVCTVZjbG0wM0RUTWVVNnBWYzd3WFJRdlBNTEVIU3gyYThsSk1TbW1aNjJNdDNHNVFuTzVMT1U0TUFNZkd3TUIvTjZlbmFRMGM0Y1dVWUJFNEp5bTduWlp1bVhPQWdBM1NUeDZlRGdVblhXWXlIU1Q3L013VFRHKzFrZlpIVVBVWGpnRmJURWdBVTVLbEVKSDhBVlZZbG9wVDhRKzVPd0RyUWlFRGlHZDM1bEpJV3NteS9sSHBzeUxaTG5pcjByekdVdnBpdUt2Q1htRjNnZUtZSXdsK3haajVIalNmcklvUDFjaXhEQm4veGQ0OXN1MHBsb3M1L2pUR1NNaS9Jekk4VG5JTmFIbTR4K0gvdFYrRHdUUVEvckhCcnVyV3dRdW9oOXo3RmNIMVc3UU1YejB3UUNBRTlHYi9POC9Ld2U3VTIySzJOc3dVWnRCQmNaVzVLeTlsM01qZ3ZHYVBuYkJGM3dOcXBuOEtqck1CM3pSNVdSTkVCc0c0MVJQZXBjVE96UCs3S2pQMWNDVm1ZcXJmOTk1UlBOS1RMRnhyaTBuTE1wRFlxSXBENG1Ha1lzbnJWckh2NElkd0diRFp0Wnk4amJuSGxkdjljRTJCTlhQV29tM1kyemhtdmtuWjZ2RnU3K0taSGFOS2VuYVg0cDBRdlpQUk9XdjhJWDVOZmwzcmZpa0NVYjViS1FjbWxtWjkxenhQQWg2bjViaDJFdUZWaTFjandybXVXUnlmRmgzZm9zM1RFUnh2MEdUSjhxMUxKSThYRmU1dDJ1MGUrZnc1VTBFb1lESlpRcUVKcDBlU0E3UWR5NE5CRG1wUTBFUDNGSi9NSzR2WEIyRUFnT0tMYWt5Vnh1bXFxSVdSSDNVY1lYek1KYVVKc2hJdzZEdCtmMHlkWU1acFRPRGxXeGsyTWdSZU9SeU90N1dsYXlhc2FwaVdhckJPMjBPdFJ5eE9EOTg4RG9DaXJzYjFGUk11dTFwcFpnQzh0N0syb0VQTjVPYVJrTzBXaUNQRnh1Szl3eHdZQ2kzNGdJWnQ0Rk9kaUtwUFlZVWhIMkxUSldrdlRMaVZ0UE1iVjJ3Y2NSU3RIRmkyRVk5TTgzaG00ODQydWd3K3lLTDlIdEh0YzBLL3hST3RBcnlKTHJtVVdnUTB4S1dZeTBJQStjaG41YS9jUUR6cmVPVUpJQTdiR1F6b3RaclZ6bTcvdGorUnNVU3NVVWluWUZPZDVPWkhCeHZiWmc2UWdjcGdwdFU4TUhzazRLekNBOVRpM0lhOC9JQzR0RmFwZGNLeTNqZ0U3U2thWWovOHBRamRTaSsvdHkxcGZsb3U4TEI2YjlHb1FKa0hjbWtkczFCTUN2a2twSURSbU85MnNQVXVnUFpsWjczM01JQ29xcmZIakNNTmpmQ21UWi9VNG9keTRvK2pLT01SeXdXYXRwTVNzY0xXeXVGTjBLV0lVc1BiMlZsTENFOVZBbFVWaTBuOXRDYmsrSkZBcHVUd2tpRW9KQ3VqVzV2TndiTkN3dUZOMURvakF6dnkyVjNTeTZHaklOTnJBYmRTYlF1N2FYeG5LUjA1RDdHZVZXVDZRaytxQ0pWV01Mam80Zzl4T21TbGhiWnFDT21oem5pUVA3S1J4YTFBUjArK2kwdStEWjVxbjYwUTBXTkNlc3k5K1ZPeHJNM1phTkc0UE1oVWdaenhRYmZpMno1Z0txYnhLVFFkaXZRTVF2UUUrNzhkMTRobW5IRzRTRFFjS1k1bFpHeTFLbTJWeU8wU0RockVvZjdYaEJnU1ZjZDdqdDd4TXJvSzg1VHVBS3lneGhvUE1VZUM5aDB3Q2F2S2FTTnRRU3BoVUJGWmtqZUVpNGcyWkwyaXR2WG9RSnUwMFZseFE1VmVVcmVXS2dTM09jSTE0bDJ6VG1ZZ1BvaTh6VGNPRlYreHAzYnRqNHlidmoyTS9pdDJtN29sdjFsQlZBYTJWVXBoY2xXN1RGUVFjQ0Njbmg3ZkZNVko2Z2JzbG5VNEFydEtFcG1Jb00yd01oYjUwVlFnYThnU3k0M2E5UTZNSGFZdXMxTjJObGZNMWd2TzBWOHBpbGdmVlNnUVpZTkJ6T0dRUVlxVXMrL0ZmZkwwUFNlN1FUaVB5UDBwUnVsN0N1MFFYU2ZmQWhpRWI2elN3UlBoRnhMR3crOHFSdWFhZVNJVUJtTEkycC9yeHR6a0tJaC9qTkkxL09wbmxSa3Q4NERZSWhXZ3JwUTdKdHdhd2JWMDNiRkJpTXYxbytWQi93MEQwWjM5dVovOG0wYkxFK0h4dDZCZ0pXNk5TQzA1ZTVsUGFGcWUwdnQ3d3p0QWVQays1YVdYaWFoZUtIbFl3Nkt6WS9sejRjbEpnNEJHVEhVczJveWN6dGRWWTN3c3hzdC9YWjB5M0J0ME56bXhycVBmZTNvOG9ZUXN2Qm0zNTZjR3ZMN1JKcGcyakdrTHBxVGluRmVBMGc0ZE1ObDhYMjJVSDhyTWJBZXJzZDRMVFZ2bXhMaFVTNnZSbGI4bVJXeWIvUnFybDZPUnhCQ1dZUnRtU096cFJwY0I2ZjlXbyt0Ny9DR1UxTVNkczNnMXF5VXlzQlRpK2t0K2s5N2dTc3FnSGJzRitYYzVBOVpubGdtMFNtUmIxWEl5MDhBSDFsUkgwekt0N0d1RCtoRnZOaVRveTA4WncxUEpsdEZRaEJIemNpQ0dCVjJaZ0YvMlVZVlhYL1hBVVM4YURaZVRET2UzdkdMVmYrcGlsUEF2aXlrM3liK1pNR0JGUndGUWx5eTUzcytFWVd0UGFxaTAra09oMXdWWWgwYmh3UmE4Zm90L3N4UzRreTZJL1VmYS9sUENKS0pUSFFLY3hCM3Vnc3FnZDZQR1BoTytIUzd4cCtJRDZIcmpJUmx0b2dnOHU3N2ZpVnNlQ2xMTytCcUN3RmxVODJ5YmxxL0lGOEdxWVEzVWthQS9vVGhDVTZoTTJ4UWdvRXlTd0xLMUgrUzRKcGVMZjZqZkNLMnNFU0lxN3A1ZVBlVVA5dzNJL0gzaU41bXpJUlpvb0gycTVTbEF2MC9BdlUrc0R0bmJTOEhkYVFEMFI1NjZlc3ZmWGhxRUloTUplTWlBNjkwdFlkc1dCa2xvc3E0ckNyVXoxWHhWQlcreFdUTWI0bXpCaWppcTZwMG9lelg2ZkJUK0o0QVBwOThnYnNJQ1NqbXJkaUtvYVZZaFVnWG9xTkdHdXVkUDlqL1FmU1pPVGxLSDBCbGhnQzViWWZ5RzMvaVhQUWIvd2hqcXJva1dXRjNLeDY0Y1hUcHVGVGtyTnlhRlhxelArRmd3SVV0Y3VhTzJMMks1K3Zta3BONzFUd2VSbHlwZ01VQ2x6aFZtM3RKa3ZOQ1k4TXhDUGszN1BPWXF3N1NCZmVObVRNRHdYUTl6NW0zTmZ1MERiU0MzRGQ0aTBGVU1TbVNuMHNsYnNKZ3g2NG9LQ2NvU0lRbGhEWHNSR1hPTXZPSlFZREhHNEYrMXk1RGd2bUUyNkpmcWxOak9oWUEzdnkvRktwNHE2aVJpeXJvVXUyeFo3WkpxNWxES055TEFJa1M1RlRuSUt6NXJyUFRYVlkyalh5TWVwNUQvWGN3MGV1WEY4My9rZkJRdmZsK3Z4YWoybnlLV0xuTlI3NHhYeFMwd1QyK2F3OUhjLy8xcE1WRk1oUzI0aWF4dEY2Q3F2VitYNkxSbTBrbjU5VGVYR25qZy9JRDNTSHVONFFpdFFtK0xzTjUzdTdvcUxPYXdoS2xQaDcyc0E0bVVOR0VHdmtvTFhBeUYveFd6UTJyUjA3SHBJaTlUd3JTRkxQbHRzK2pSTHA0WjVibkxnRUhBc1huVStsQ1ZUNVFOQnhYKzdiQjZBWnNiR2NtbEhQVzUyajVFaW80N1VCOTZVOHdqQWNRcWtNakV3QXpEV3RqNEdGSmVEOTdrMEZ3NUVzTENvRFE3TXRpL1pkZ0hjRlVWejZoWTlNQ21laTlNUFZXMjFDbW1Ja0c0SFF3YkFHaXRVRURld2dTR0tRek9lWmpEQ1kxbDllblFyNGlqV0tIb010WmJkbHV0WkZnbnI4TTFCRkkzWXlqNytxVzBHcFJxM3FHVHg2QzhqSVdmSGEyKy9UWGd0SktLbXNvQTdlT1ZFNXROWExwVXhjUkQraDhvWXZjZmVOUmlySXFNalF4MTlzVENVQXpDWGFPTFRPd3FrRThKMi9DNmpDTEhoM2QwbVp6MS9mWkNMMk0wTzF0RjhTbUJBNnJwZVUxNERsYWxRZEpDd2E1QlZGWnJRREJkeXVYWlhjQ0p2S3ZMc0tKUEttcTFIUlBuMi9kR0xsK2w0cU9MdFVMZzVnZnQwQ0VnZ2NOWnAwWEFjSDl1MWhLNEZrRFkxUTNBZEZSN2V5c1J4cFVSNUNoMGJTMEtkN1NQNHpDZUZub1ZYSHJreHVGazhib0hlakVYQ0NobzYrK3BzTTM4bnVuNExUTGpTQ2dkS0lpSlBsWTV1dkZZNFUrM3JwOE95UzI3WVF4M083U2ZxT0pOMWxHN01OQktLV3NhTjJDc2MyRzN5YmJkeFhNQ3doRzFmV203TzN5MlJHYkZ4SktNK2hpaUIvM3BYVUZ1TDZIS1I0TEJDem5sVTRaQ2ZyTkZsdVNzdUcvcVNLRG0vRlN2Z1g2d1ZuWFpvOUN3ZVhXcmNrdXl6d2tVcFZEbXBlWHVlSTFIWDZWbWtrOHRSN3lZanVVK0llbWNmQVR0ekVVQVdzSWtUdUNHOStFeDZhVUlrZjA4c3pEckowNDVsQzdWZ0YwWG54ZDJFREk0ektpbGRoVTBGaEd0MkVUWlRBdmJvYXZKNVMyMXNPQ0FrV2tLSlFFTndXOHNIZDIwSDMySnRJM014K3hSK1hvSjh3d3JmMlZ1MXVTZ1IyWVdYM1ZhUmlmdkNBMUZHRGdUdWtoT2tDcU12cDNJWWE3WmJBaW1vL25zOGduTWJpVkVjZVM2VUU3dzRsWjJiR0hCTUZ3ZjNBQ3psbjNha2hRd24zTSttdXdROEQvVXFqbERaMm5nVDN5cHVFWCt4NlUvQnlieFlDSWMwWUdlUFZNYmtoYUpwWUM4cFJieTVySGdaM3hrc0VlNmpHd3FtOEhmWkptU2FWdUpDKzZLaHdvT3NJTGhNM2w1bE1lT2UxQnpUTmwxUENUN25UMk50aFVETmEyamtEa3RXZ3JFU2JESWwvWTNMNjFkdjdUR0lWVEhYWEpVS0swa21HbE5HZ1ZUODNFMkQrZ3ZvV1NjMUFudkVkWEJQMWpnLzc4emd6cW1lc2M4SjVyS0lIYUdmK2lTSjBRQjBNUkpKMjVJR3U3OU9tME5YQjFod0ZuZXRLUGVPZDdvUGllWTdmMnF2Q0kyQkJrV1V4SFR0OGx0a2syeThLQ0o2UE0rYW9qSm1lakJYcmlxdzMzOFNSTVlibVd3UjVtTUpqcFpuWW4rNFJzb1hsTExDL3g3TllQTnZ2QWZNSFFXVXdHakVJUDFHc3gzc1VVY2x4YjQ0Yy95SFk1Y3V4UVEvY0p3eTNuTG42SEJhK0NYZ2JaTnk0SThZRWJxSlUzWnpmV21RamNqZnFtcXRBT1dNdDU1WTZqSjNFSTIxbS91TnVUTmJMeTV0MDJSMkQ0U0VOY2VsYlN4TENCRGRxTWZjVHkxNW9ROGdWcHJsaFg4OVhSdnBKSFNIK1dkcGpMNmQxcTR3V2ttaEtvdnpYdWcxK1ZoemRHR2JjZ09xd3RpeTd3MzV0eWRDQmcyZlNENkx2YzMzSC8wbWc4emlqT2NISzNWSnpLZFlnYmRXWlpzOWdjSktLZkR5ZFRuUDROc1h6Ym9XK0JJaTVRWHJUaHdFMThIdGlhVHZXdUhXeUdOUGVGWjZEOCtMaE05a2dmOXdpZmNsUjl1YzI2S050YzlzekZIeC9McTNvY0oyc1RzRGliT3NqMDBUSzY2dHZ3U1NoeTZpcWcwb3hBOGh5NGlYZGMxeHpUcUR6V0g2UHByMWt4UmU4N2ticFdCQzRIS0QwTm5ESEZhMWRmOGtuclNPVXpLbS9lZUYyY2wreFJLbW1kWHFwSHVqMmlNd0c1d2VVTU44UXRHUEhWKzNrR1JjVCt6VGI1MHdDN0ZzU3FFNm9jTjdBQ1VJc0Q5UmJLZSthTE5mcXVoT0xWWkIvRy9wOENLVUFNNmxaKzNZUGRRVFc0TDBhbXhkUndSczM5OS9LT0FrRjhWOGpaTzQyQm1pdzREbGs0Q3RWZTNVNVZPRXU5dXIwYjZpaitKRWU1YWZERUhaS0d0SFVWdDQwVGs1ZWJTRjVZWUNPTm91SFdvM3paNFNQdmMvb2FhZzE1a1loMVMrUXMwcnNGMU5VMlZYc0dDRnJ0WjUrcUw2Y01FYU0wTjlEZ1BUdG42Vjg2NXJ5N2FrWGFFSjlwKyswdE41S1UxOHlrVEZhNCtmT0E3VTU3OXZjVitBcXMrcXltb3daS3dudzVIOVo1YTIzVUw0elA5MmhtUjBWRHlSaGMrdFkyWmkxS0l6czdPMVNWTEJOc0dDdVlUYjNZbUFKSjkrQU9CMTB0MnlnWDZOOEhJQjZUa0RSNnh2cjJCdmYrZVl3djlUelcxVytpQXV0TGoyZldlZGRDTko2anJWZ0V5YjBrcVVJbXVlRHRYbXpPUFBibkIwTHpNdzlEQmt5WGkxYkh5QmJhckJrWnBaSUhSWUxab3NiTnJPdzNyRWhmOExGU3FobEkvejNhR1o5NkdjOWRQVlBkSXpMZFJBeXMyZks5SmZ4aEJKTmljL0lkV216d1k1WEQzKzBvMFhHQVZhZkZZVkdrcXBQTVdjOXBnNStaU2NzamxLV3Y1UjNzQ0lyMzlVSHZTRGNBeEtHdGxxdHRiamNscDRQSU8wUkxwOUtkaDRYckxqQ1FoNEYzZlREU21mb0hyQ1FMTllyOVFHaVFHU0hLeEI4RWE0MG9keVFxZHJmTkJiaURDT1p0VUx0Qng2a2M5MmhNVjVyUWlCOUp6WlI0YXMyWlA4OE1yb3M4QkpnNis1MmEwS2hxb2dLUExjZlZJQWordVJnTXdQTmtia3pDMjREYW9ZYVNzUmtZS2g4Sms3a1RwMEszcmcvcURKcStFL2xxY0NodU1FRjZQTnpVWE5ZNEdrUUxXYUZGSDZVVzIza29DOFJaM1RRWkV5cnpiVGRTYkI3cnZiNlEvOGNLR05kYlJwUnA3dHVHanhncHFDMS9EOCtGYnJPWUlVWm9yNFlsNUdjR00xYTZQYWc2Qk9YUDhzV25IN1JDWEl0TnN5eFVQcGdrcmphVUQ5ckIyQmp6WE1UYUZqWTBVNEIzT3dzcEdhMDMzQndxaHdaYjlNQnNzMFdPOXoyN3JKTjNUQVpxdUVwazJ1YThVMDBvcUFkR204VWJNcGhtKzBGenl4emVXU1hudU50cUxVUnNKWHJBdEd1Z3pZZkM2d212Ylk1S3l1RGhSOWZvY2YrZW02dVI4dVZGcHJ0bFRJVDdYaUJ6Z2lybHUxZ2pmRkhEcWs3WEhvS2g4VlJtQkxteGZ1UkJxU0ZvY0FZRzN5R0lXcFAwK2hGa2tyV2RCb21CRWNsV3JUVkJHUzFic0QzN1RYSnFadE54RGFzTU1NdTMyWndzLzdvd1dIb1VFWmErTkUxaFd1bVRoU290V0VmTUtjd05qcGw1eVozMDR4WVQrdDFPenZXMnV2ODVaZFFtRHhSWlpPUWl3VEdCNGYvcmZCcjlsclZ2bGp0NFowWUxJVkI0T2dPc3NxUlkrYktYZ3ZaMHVFaUZVc0JmWktuL1ZtVkx0b3dKS0RNMXBZdjN0ZUloK2JDWnZWTk9MZ0gvMkNWd0VKM1lJYmNPMFdJRUlDdVJqa3VoQXpMUmlBdzFCcGE0TGJCMXpWdzllV1ZmdDFwSmRCWnUxaXdIYlhDNy9oQ3FFeW5IK3grZElFNGNONWI5M2d5UTBjckR2QzI0cDJwS2YwWU9OSklkNFRLNzNhWW9mT3dLTWxoOXBoL1puKy9mbVIwWkM0ampkZEZValhXUmxMRUY0ellSS0c1RVFpTmN6Zlh0Z2tmdmttaUdYZGN5akRqM1RGNzdoWGMvTXNBclZVY1ljbU1SWXJxR084aXFGdy9wUndONnplSXJZMERyRHZlWE41TkZUbXlxM0NXcU9SL3lJY1ZkcUs0V2FsNW41bWFTTGx3L2Rva1ZFRkxWK3FLVXRPem1PMzZ1b2xoei83aUNBdXpoVDV3Mi9zd0IzaithYVpCY2tHcloxdkh4T0hGNTZIYnEyL0tOdFRJTjBzV3Q5MGZkdlJJcVdjcWNRb0VXZ2lFcTJZb3NXZ0hYSmM3UEJuUXRWQ2E3OENtM3F6Y0ZmNUhScmF3UVdvaHVBTTdKWHhXUFo2dVl6T0cvOTYxSEhPenJFbkcvNDRxVzNyZEExUnJSTytHOUV6YlhEb3VYSHdoekFJYjM2VndnZTAwRExCeDFaTkJ5SXl5NUNIZzdwcC9CYVpmSVBwNlNYb2Fzd3g5S1ZxdUw4a0l6RjJ2TTI5RTdaQXBoTUpraGtkVkR2Sm1RbndtQ2NIL3pDSFBtYWx6NFU1QTVIOThJb0NscmRVRkMwRFJiNmsxREc0YVVtaUVPMDJRMHlDNldnN2dFTTdwcDZjV29GM3lrT3YxZmpDZFRpaSszOE9KVFRjL1pYc09qRUNITlNDNGVnOXN5MURuVG9WMFNKd0VvNmJNeTNQc1pkSlJSMm0rQ3hueG1vMzFIOU5xc09qaWp2RWtFSjFTUXppMklHbnBDcmk1Y0diUTFVSXlteXdMOEZzV3QyaEdUeVdJSjA0RlZuM3l2akJVWE9JQXBxdklVd3ozQ2hxdjF3UklZd1Bjc3NaR1l6VzNid25XVG9ZT1pCbFUzVXVKbXYzMURxTWl4cU41aWpKTC9FSGJiMEtNczVHYmFUS0VtVnVtQ0pSNUpuUTN5MW1VOXRJQW9VaDdmUE9EQk1QMHQ0cVp0cUQveXpHSDNlYUVVOUJXUjFCT3BSVzVsc2JXZGNUcCs0TXVPdVh4Vkd1ZGt1V05SU1BVRFpPVUlnTzIrTTRDUmJOWFBTakhtQnRhVGZmS2xIcGluVXhqQUVybndjcWtXMTBncGljZmttM3YyNXpNeWxwSDkvbWF5UmZWbmtqNFF6NXpqaHdqTXoxZ1piSmtMenVFMk5Oa0g2MWlCZkloR1NLL21LWE1relBkYzVQaUcxbFZkL3R6NWZPK2Nma21qcUZzQzdYYVpUVmh3a2hhRXFDMk5LNHBsTURQV1RBTldvZnBwOC9sVTNrbFlUcStXNzdyNU9NRDlBOG45VitnbEJCYzhnN2ZTRkF4U29wN2lIWllheWdQdkVVTXhZclVTZG5jK0IyV3pRMXpmRzI5cUZnQVYyQThoOVZVaWxSUU1yWXY5bzR2YUZObEpQKy9NNmdqaFllWDNsQU1veFA2M1Y5K0NDb3g4MEk1WVJ6VDMxbmw0empQYkNzVklZMHVWMnprbFh5bGhiSkVUMGl6TGthS1JkRmYyS1BpTHdYaHJhcG9vd2p1S1ZjSzNtQ2hyK1A3U1NpUHh3TTBCc0srV2g3eVRpNmIzc2kzQTd1bVRWZ1hYOFJaNHQ5Z0dlODJWS1Vlc1Mvb2pnZHhkMnljMVl0T0s1TXBKdUh6NVlhcnZ3amF1UHlkRzAyTHJneXQ3My9aYzFJWVMxTkh1eDluMzBNRDdLMVhROTYwY29lU253WUo0ck5RbXhyNlVWNkt1SzVPK2hzOTFOKytza3VzdlRhaE9kZnlxWFFjUlVRMjZDeWpDeE1HQ0g3VnJwRmVtZzN0bkR6RlRVSE1WSW9uVUdzU3JGTUoxdzFwSGtqY25SRTYranV0eWRWbW0zUW8wSFh1WVkyazlWdGJkRGhBNXRhZXp4MDk5b0ZqKzAya0Y0V3NSTENKeThxSThzUHBzMFpkRzRDOUp4SlFRd3ArVGVxbk84NHA5Q3FpYldsUmFwOGMxMGpJUEJvSmxMWFBBOHY1cVdmcHlnek9VOFpGU2RBY2VBUFREcDMwK3MySmVhMkcxR3ZrVDh0THNNalFLUjRmWm5ybVdPTWlmc1RnOEtxYnBFMytpWDdLNzJ1Z05pdlBaTEx2RHZ3OUVoU3N1enpyM0ZMZFBFemNQZmVtdUZyQUNZcUY4LzQvMWMwd1RaUDc3a3pPcHR2amU3WkZwU3M0NThtOG1XSzB5cW1xeXBKSGFRV2NHNjBOWDhleE5VVHNQbU5ZTjB5TTRUdDQzMWRoalRVQUI4Zk5VbWVCSkxiZERGdEw3V1M1cFhBS09DTEN4bUM5elRQWE4zTlBibzIzb3NTUE5LK3pSaDdzcTZjRW85UW9ranNRaEZBRWYxT25tdFMwb3Z3YXQ2RGdwazZJT3N6U2JsbUlCczQzN1gxbGhpQWZMWGN5WUNTMG1NYWNQOEJPOHZSRXBQY3Bmb2tzRG5pWTZ4a1FKTWdLVWNlOWcyc2xSc24wcThkcCszN2I5SU5Mck84bys4NVZqelZtRjVoN25vRWhzSnpEbjltUFdjVzZlZFozMWMzSytXZHV1SzNUQWV0ZTJ5OHdqdHlxNzJKcTVyMFMwYzJETllIdDR3UjY4M2lmZmFHdmx0eTJ1ejBnVXpFWWtxVU9NY1RjMVNuOXBaTGVrQlFJdWlEUWJIeTg1Uk9pSWJsNGFFMG1MdkJ5RFdVK3ozQ0t1RHEvbVlWM2lST2ZKSjdpRlgwYzZyQlBNbFFLZ2ZHbXdYMEFyazlZaG5Ib0p1TU9LaWI1Um9PdnNiTEw2a1YzUUcvOXR4Q1MzR0loTE45dVZmTmZ2Wm1iM2Y0UEIxQ2pwSmhkWFUyL3VvYzdWc0ZuNkJWR3I2NEFhcGdoK2JCTC9GR0tFM0lLSzdONEE1U1hQZVBkUWxJY3hyUHJ2UXhheHJZWmFDSXkyb3RMbjV6QUk1TlBNV2RKTWd3elZLUVV5V0ZFUmtQWnBQL0daRUw1b2FkNit0a1h2NURzQ09rdmNBN0I2ZHRmcUNTZGJOVy9LemFTdVhiK2ZkZnJUcUkxbm5kUDVJZXo0emE3WDdFZnpubUVmVG5qUExDU0xsTTlHWnEzUmo5Zm5zNnhqNFR4VmF2dnljaW1GbjgxTWtlcHVXMWxTV2ZnV01iYm56TGczZnMydjRiVGxHdG9sWUJ3RVBOZm9UVzN1UDdnTE1FeHhBWW9KREhrcHZJU01rYU8rTHQrS1NNVnEyOXhUQTJJczF1YjB5ZDJCb3RsVzJLQmh5VWI5S0IzUUl2dFZwWjhUQ2ZPZks1TkkwSW5HaGJ2Y1lodUMzSXo2U3h5VDZqeEp5eWhaWHFuTzJGZnY5RjhaRkRtVVNKSXpKT3FIUWZHRGNPcHZJc3h6bE00cGNPMk9yTmtYQS9ieW9GbXdEZEg0UmVad0x0WkNtZ0VFLzdjc29IU3c4blFWbnYzS0EzakQwZnlPek5PTGY4aXJwbVByMnR6RFJ6bVRBVFcyanlxZG5nSm10aW5FM2ZYdW0yODVRc2ZrdXN1c2VFRHd0WjJpQ0RaNFd5U2k5amswdHZyeWhKbW1TT0lxMXlGdUFPYUxOVGUxNU05SWFPNDAzdDJmeHVPWUY5VHB6dVRsdndINU1uc1JrZ1ZEa2hvVWd6N1dZMG9hZC9nUFg4RFNwTWxKdlJDenAvak43Szd3ZFNhT1hkY3h0NlBDK2tNaVJoeVlJei96ck5zK3Uva3FOTWVSSGYzK1lqSTNTUlZYT050N3loK0tIUCtXdHhqdmg1d1hXcTg1TmF4Y3hyQzYrMHRYN1QvZGlva3U0ODlHSzJodXFUUWpxaHRTVmZyZ1J3K1ZNUHRVWVRBMEMvQ3Q0cW5wQ0NvMDZreUl5OGt2ZllCajRNYUdsV0hzbXllNERqenpKQk1BRnVNNmFLdDBzVVYzdURpWCtGOWdOU3NDd0w4dTFFWVl0S1BkOTNPaDBhcjcwYnVTbTBBZ3JxSDlsUmpWaXl6aVc2L3pjR3pERXQzT214azZpdnR0aG5DdUkxaExvaVVTRy92bTBvVDlGcUxWMXFaTFFUM09FeGwwd2VvdENtYVA3VUhIUTIrRnQvdnc4TU5kZENWalhVelZiVm96WmFXdGEzbUFBTW1BZGR5TzQ0VURLWEJBQklPQWNEalBVVm5uc05BMWNTSnBNWW5uQitlelFLdjdSdGt5MGtqM1dVQ3gzTmZPcmM5emFEVUhlMWNSOFhEZmFCZW9Ga25JWGVFZzY5eHNmNlBJWU56OXh4QlVmSUNldjhhNjJRTFJESVhQdmN5UzdWSHlOMWE0M0RPU0lSdTQ5OUpJbk1wdmFQM0kyYlNwT1ZTNEhkNDlYSENMTnhqVnh2WTV2NU0xMCtkcVM5aENidUdEVnpsT3ZWUXdYbHdubG0zR2I1K28zS0xxN3JSdVo3enVVblY0RXZxMkJDQ09lOFhiVXk3eXJIY0doVythQzduZ0llMThsQ1JuRHVydXBIVnE0V245bzRkendiV09KUnBGUzdxMDE1UDZzRlBVMTdEYzh3WmEwczdZQjJ5UUp1K1o4TFpHUkFpYTl0TS92bHBvTkRQYWJsQXFNMWNkN3pIUHJJaUdHSXFYckRQcjduQ0QvVXE5Y0ZoTFNLK0NXMUd0YTZNK3dPbUp4Vks2NHBBTXlnZ2RuU2hUbUhrTjV3TlIvT3V1andUSXdzUE9mT2VhNDlWRXZacFNQSTBsc3lSdmNRanc5S2VKcVQzR3R4eFBPN3E0YTRjREczTE1QS1NObEVicytVbVd6ZVFaeG5ldEQzemk5K1BtNTI3dlc2QXAxMkFUdWJQSzJvZ0gyalpuaGhzT0d1VW44UkxUVG51MUw0S2YrQlYvODlmNFA4Q2Y4bU5mOW1hYXpMRWZsY0tFczJsMUxVU1lHL1dwS250TXlEbHZJZHBqaklaZTVoejFVekhDS2RWckYxcGVpQUd6aGJWM0hpRFlMeEY3NllqMTE5cWh1T2tNS0hWUldBbE40Ly9yYW9kZmVtQnpnRHJXdE5DYXR4ZmJuVndLRHJQL0tZeTkzcEZoU2FYWmQ1SlVESEFwWThjR1hwSWJ6Z08wVnVNcVRRUmR3KzJxbHF2Vlk3eXZ1NEE1elF4UTNuRVM3TmdRM1laRXdxNURlbEpEZnFuVGlMb0NQR0dPOFJxM2JxMUhYOHkvVkdpRGpwOFo1bDJja29iaW9Fem43OGh1L3ViU0JQekRyajhGSlVaNjNYakRsSEkwVHBuQklDUEVYeXppMGZZRFJvUDRSVGp5MTk0ZUNjc1R6bWc0VTBZNG5oSTZkb1Q3cjQwUmV0SFBTSEF2TTFod1VXMlhvaFNvbk54QndlRzVWTXJ4Y0Fqa1hyUUNLM2p6M3VtdDFRSy9XZ0tNcmVTZjVPbGF4QU9kK0hGNTJZdWJBL0xkU3ZwNmhLbFlhVzUyY2VmMXovZC9zbk10bGNEQUpiU2tHWEZXZkQwaVBWNE1tS0tEbEc5cEtDUXdmSUNOZG1FM0VQK1FBMjMvMG9LRWxHQnRtYU1VanJ2dEFEQm5oVXptbUV1U011dHVVaEkwS2lVT3pBMnBmcmdkb2g1ZHc4NXNlQXM0Zzk5T0JaVy9VdGtQVVIyNUcxTFpyQmtxMzJxdnQxWlEwZVFNdjF6YWtBTmRrQStTRGtIQmVveWJWdVdDbDFwTDZNeWw2Y1dBSE9uNzNIbTk1QWMxVUMyMjlTOWJ3bDZteGgyWGNaYldLMHc4NmJVaFNaSCtJajRQY0JvTUJldE9kWUVFZnhiVktoN3M3bS9vWmZ5SGdNbXpkbURCa3F6cldsZXFBZ1Bhb21hbU13T0hnSkRTRHlZRjlOSWhEblRDVWhlK2E0bEFua2NhQlQxMFJWT0poZGsvdy84QTVtOGkwWjY2Q3VOWkNjbUlLUEpOUUdVTUREUkgycFM0QVk2dkdzM25KUXp1MTVrU3Y1UkVxeGRuNWpiM1NubFk0aUdlWXpIbnVjVjhmYVRVYVg4Z0RyV001VUI1YmZBSHEwTjNZNndrMENoeFRQN1RhdjNPY2JsemFYTjhDL3RCT1ZRMDl3eGFKUGZqcWEyMVFxQmtsM3ZEejd5YVdiUWJYU0szY29uNEdjTUlmRkJacDlFQS9RYXROVFFqREgrRSswV0JIRmQ2ZFRUY2o3elBQQ2NKWkJWbGE0WHA0K0U2ZndINmQxY3NFM0NoUEdEZWtyc2gwUzVxb1d5Y2xMbGVqWXQxV1Byd21uYUJJUDFaT2wrL2Y5ZEZXbEtpZHJqUDJWS0RzOUUvUWw1SkpIWFZnNXd5amJLd0k0amFjNE55a25LZmdkZlA4SndpU29MZFNWa29SUlZvMnlxZmJFL05BL0ZJSDRVMnA3dGRHMVcyRGxkRGMwU1lZS0JWTng0bnpjbFJaV09GY0cvZGQ4Ymw0WWxka0k2ZTNaZy9ISVR2VGc0alRRNzZBS0xSYVdKVTlJOVozMFZEM25BSW9RQy90RExEMGxtcFpTS2ZsNXZzbTdreGsrL1lLR1lFR2FRUURrdVpCSUI1NGVBNVBWSUR0bVYyU20rTnZ2TVNVTnJaUGhUQmlibnF0N29TcWR3aG9TbTZEWVBMSVNyK2RBOTAya0RnUjJPM2ZDdkowa0ZxVWM0eUhkSTN0RVJvcFpkY3RYMUozVWhlZE14a00vd042TzRueUp5eUNDYzVwbU5MSGR3QUg0Q2lZVkovSDZXbnhVTkUvdVpoVDlzaW0xWEVKdWVlcllkWW5iTjhOaTlmN01udlRFbFJHQVBRUDQ1UDNjUG8vV3k4eC9aM2luOFNHWGo4NXlyK0pHb0dHWkFIQTQ0YlgrdzMxN21rbEhwMUdVSzk2ZlMrbEF2TDhjUEhrdVZONVFhNnpKRzB0RHJHUVdQdjIzV1FlaVZhQmFYSGJBNTJ1aWIrdlpNcjRKZUtweHVBV2dGeUwvZnh0WFhtYjg4MWdJTS9RMDdZTUJXQUtpVEthalZ2YUZmYlo0Ym5UelNsTXplZDZRSEJLWGNuZ2h2dUlXZXhOcWZkUEFlY3pMYno0bGlOT2ZkRHNrM0RJeDJVRE45aGZyTDB3TU5UaFAzV3c4bFRycXFVSVIvZDh6UHFTUXhkQnZRYk1neHlXNmdnM00waVNXYWdScnQzbmRxRUt3eGM0L1BIdi9WWU9ITUtwanAvY2RBTEtqdXlFMGVpK2hGbk9raDhkZGtWSEdtNTBod0Y3QWl6YS80V1hBekhJL3hPRi85S2pDY0poVTdpS3JLZHhiNXZqZHJzWlJVNm1SMytPaEpTVUV4bW5pSkRPQjRCbkJ5czlxTUNkNUdHdDhpb1NwOGJBUVRuMVZCZ1M0M2t3WDc2RmVoRWx1a3ZNWlRTNDZpRUlUTkl0OFl2Zyt2YmlZMDgrZENYamhtUDltbks4Mks5MlVLS3RhUis2OFBZNlJxQTRsb0FUZStmVlVlZkc5M1V1L2g2bTFKNHBvY2xGN3NOWHI4VWVjb1JyZUNzQ2o0U0w3a0pvWG1NUGZFZWprNlppeFBWMG43c0d5Z2IzZTFoU3A5L0NMdHlPU2l0T0d0WkVCTENrMXJPUVFGK0VvRmNma05hbnYrajQ1SDd2c0hoRkZZM21EMW1iM0xibjA5ZFpFWjNLeUJvWWVwOG5MQTBWTTl3VlB6akpHdWM4MkhuNmVxeG5MMmRJUmxoZkx0RENWN3ZEeHlRanZvVmFXWUxXOU42dHdXYW45ditDKzRPYjk3Ni80cWFYTkVhVUFmb2YxcXh4MEV2NVVjOTd5SWpFZlk3YXA1WVB6bUU2SXZaSkhES3JNQWNHNS9QWHJiRHJFNHQwUXBuLzhpSDZWSWp3bkY2aVFDRkQ2dGg1djZkVEFWZmFLZGErTnpEWWU4L0RUQzc4NWtoMUZsN1JqNmViU3VFMkJCZXFlWFNIdlNmSms5bUxlNlpya1hRcExsK0N3ckRRRUJLQjZ3MmlWdjljTFJTSjlnT0RnMlV6cWRWdWhMOUhReWlXSVZwVDBLYnBYbmJtemlPdjlEOS9ldjhGM3NkUDE2UmlTbWxFaklzWWJ5VkxvNXpoNDVtU0h4MytWcHRrSTRwMjZtY3FtdTF2azZKUTJQUlBqQXlnT2xmM2lhN0FUWXdLb1BGQnFYd2wxWVBKaDVnakdTMXRIbklKNUk1Y1BoRTQwanJSQWloeFdQblNzb21DNjJ3OEtxYXJNUE9VL2xFWU9GY1F2dFZSRWliREdzd2JuY3o4Q0sySld3OGhjWFdoZWxRKzF6OGl2cWFGVVZBQkxlKzBlWjl2VTBaNVBSbm45OWRzSlVUbUEzRHVadEZuMTBibllDWHQvZ2xSTy94MGJJVjA2ejVQTmhxZ2FhcE5YbzFGei9HWUR3V3ZLUTdtcTg0bitMd2ZMZUlTMWJtelF2MFpSSDNlT2JVWVkrRjdrRXp0MUk0MnZvaEtLb1k0WHFzekdYTWZZSzF4TWhTYWs5S0J5VXlPckdBdlVXVUJmb1pUTzJ0RVlsb0RJZCtaUnlYSlNyWjJ0R0Y5RVdPSDFQdnRLcVhrQmJkYWdOR0VyN0FlMUs3aloza01BcklqUFRnS0FqdnBRdWp2UEkxbEV2ZStJa2phd0FwU3ZNc0ZJY0tNOTg2NERyTFBVdUg1SUNOZkFPSXpFb3k4dHRvWnRJUHlnVkhnMXN3OXBXeElINFoyL0h5eVd3WVN5ZG0wNW8zVDBNcE54OFRvQ3IzZ0lTU0htenJsNW54Y1RZSk1WSDQxbTBDS1V5bTFsVjdudi9mZ1J3K3ZZTGRuQVBJWDhkZ2JFcmFEa21peWNTWUFCL2Z2UGZlWUY4YnkxWXVKNFlmOTdEU1AvZ3hwdGtVdENHTUhRbmFLOFZhOXk4c1d5aTZQTnYxbm5IMHNqOEtsY0FXMlpNZWlBSXFtK2orUGc3dFEvTWVzNUxaZEhMM3drYUdMQldLbVk2dzZ6NklQMzZUUFppTHRGd09MSnFaRUlpZVpGYWkvdkdKM3VFVFdqOGZ4MUl4Q2g3RHRrWmRaYmZHNDZDOENjQzRkbTR5VjBqd0JZd2xBU3dlVVhNd0RlNEtmRTZ4R2xoSitYSGI0ajlzQ29PclRHNzRNRGFxK1lEMSt0QTdqblFVNWQzc293MHpsd0RiT1Y0NHZkbXpiMStDeXNLeGd4cjVrK1ZUQTVoekM2bG1IQmxXd2xPRmVwSXBwdm5nODkxc0JNR0VHVE55TFFFSnNSZ3M1NkhIUDRVbXczUTJmRW1kVjhld1lVZGRpSDZTZzRpQi9pS00rYUdWL0NkRDQ4VFhERlUvaU1EanAxc08wakVFSTFpVFZwNnJ5Z3lvNUlvSDRibUpoNTFUYzJEdVE3UnptLzErWkwvcjdGR2ZYdlpLZTNvcWd1UHZRQjBCSTk3d2RPT2E4QVEvT1E5b2dCL0FKNC9icEd6OTVMRHlUWW5tM3NybURrbTdpVmRUSnhhKzhDemZSRGVGdWRvOHc0bEMyQnVHdGVOM0lIaHMvYmh4MmtJc21LbGtBRm5KRHV5aTZwbHlkaWl0ME4rVkczN0JXS214aWlmNkhtYmZnODVqdVBZb3JJUUxsRlU2WmdZekMwQ0VZaHNBbGV2S0JPVVRHdW0zYktqTStUNUdXanU0eEh6enkyN3lXd1k0cW40WTRCQkJ5NEQ3bFBlaFdOK1czU29raWhRMXNRcVNjVGZFNjM3elhYeCtHdlVnQlFzN1IrdEUwSHN4dXdBUGg0eXBNZlo0dG5STWtwWWJkeVZYR2trNXZyQ3AxU3ZkRFQwTGtGdHVxcGRQT2NRbnJTQUtxeFpNSHF4NDFqTTZVWWVHS05tNUxRM3J6dkFPbTZ6YTRUdlJRNE5KakhOeHl0WUxldGVobnZObmZIZWFOb0Y2WEkvMVVIYXV6dzBqR3NGdTdEWTdjTmVPVVJlTmJVTHB4cnhLZEpBQ1NBb1FJVkxvMzB1dzNmbHBZOVlWVzIzNGRQL05CTFk3clBDWWswa1RXSjU5ZEYvRWRqYUVMa3NyaFh6T1lxTVdvdnI2d3MzbE9TTndsUmxDYktFUHJwOCtKQU14ZlFsa1Nxa3BmeWVqVWdxRnBsWWMybkZ6eEcxN2NFVzI2MEkwMEw5bGZHU2lwVmsya2lFL0VFZ3d5d3lFUnZlSzBGVW01SWhOVDNDVzkvejZQbVc0WUZ2QkxkRVowMEM3OEJ4K2pjR2pQeWdZRnlBenlYNldKMXRjSWptQUxHa0M4anlmNzBVRU41OXluYklpN0FmOHdLNkREc2JsaHZ5ZjlHeUltUmhZL0tON0w4elg4OGVNclp6eXc1YlhKdTFkcGpuYnNvcWhFd2xIdTVSSEVNZDZsaG10R1BzMFlFNENCVDRaQVJHYWV3Z01KOUw1RS9laFQ1UE1adjZKQnhXWjdUNWRicEdSSG5LTUVYSElaTGRDazh3eWRtUGZ5d0N4V3lPVklzQWxPSi9tRzdRR0l0clZMSzdhQzgwOTBodDdDQ2tyelY2TVNCa1IyMlBkSks5SGt1bGgzOEZPbHZTMVgwSnd3bjR2UlNmU3FKM3VITG96SzZ5b29FNEN1Y2JYdEhXdTJmcDdDaXJtSU5vcmlGblRkenc5OVZXSXYyY2xDQTlnWUFWTVkrakJFdTVCaWhuMkZKR0VXK3dHcGI4MjJZZEdYcFdhcVU5QmVxdG5XUEU3ejR4MWhtbVE2RG9sVHRZUElzaVdPRldYZlpyaFQwSGZGK1VJdTh5elh1NDlYWEFNV3FST3NlOVBEMGV3MzVETVJQU2JzdTUxSjBWOUVrMEpMK3RqWndtY2poTWJQbE1jaExqYTJRdEIxaEliVk44ZWxoWTFPcEY1SFBwZ0xkZk5ITTNEV3laRGtJMEo2U2Q3Q1NtY2JEWUpPRE9IY3FibmJLQWtrTzJaOXVSTGN4cm42UzBlRGF0ZGVaNkJ4SnArRlRxR2ZWMi92K1BrWDhjZUM1R3N3VFZ4eWx3aHpBN1hEOG1iay9nb0FjWEkzT3ZGQTdxUHRwOFBMZHdEbk1mSTdrYmNKQ1hFS0xwYis5RDNoRmNub3IrWnpHRlhzZFp5bklPZUxReE1aQnc4T1JHc1BDV1ByNTllOHg2UzRGa1AxS0l3MVp1akozajJ3WEwvQnZrVm43L2Q1bGhBc3VBY1lSZm5zTnMySlV3MVBrSTVMWit4S3JNSlEzRXJzZnluQW5NMllMV0RyUEkyOFFMRTJFb0IxMW5tSWlwQzNEb1Q3eE95cU1VYklja1d5dXVQeWxKZGVGVHRCRWtWYml1d1JVQkJXL043RlNHbGUxMG1zUXUzZXI3ejRGd09SeDNQdFVDL2FKOVAxNHk2d0NIcGVTVDhtNmJVbWxvaXdaNGpLV1lIRW9HUzJSYWRZSXdnQVgxUlNLWWtUSGpiNC9PTmxpR25EWDlIWEFUR3NKcHp5YUFyM25vNmR4RVVMQlB2NjFsY21QeWprSno5WUFsaXFBMEh4NHprSTd3TDB0Tkp0RDlnTmppMGk1azdWajlIUUc0NmdrSi9HT0J4WDVoR2hNcE5EQjBsbUZ3VEpCeFpoQnJWQ2FWUTcyNlo3bDhPbEJ3QlBjd3RHL3BEelZoVXcvcWswaStRREZmVXZ2WnE5YXNETG9lVXBJbEx3OFMydFFWa1FZZWc3ZGpOaFhwVldqQVRyS3ZmOUZTeWtIMnpqTmYwS0d0anQ2RWNpSXQ5djJPYWVVa0xHUkVZZjJRY2dRZkZ0Q2YyNDlrTDMzM0Q0elh1TklPUmVtb0tTSkRxbmFIb0ovVm8rUC96MVdrUnlGRVZtTHhPVU5WTHA1U0ZZdlpoSXRzUGNOVGpyeVFnTnBjaXM4U0hSV3J6c3lOaUhqWU82WGtSemlyb0JDVi9UMVk2a3VWRXBUYkpqM2VUZFVFOHUxcytqQ0lLcENneEoydStRYWIzVk4yT0xjblpmRy9XSURZRGRWRi9LU0N6MlgvRkd2dG1PQTdPTUR2SEphWkh5L1pwSlUvajhsUnF3bHc0TVlPcDRBamNINUJnbElxL3RLRU1WSk1nWldsc21BQVl5RDBnS044dVN5RVVMUW5BWjA2dDkrZmNGME5jRHBaamVqWDV3djZReW96SDgzTnVTYmxNRmJjYmtYTUNuc2l4VUc3ZmJzaFdqakpvQlk0UlliRy81NllrUHltYVhQeU8rMUdJcXpIdnlFVm1BQ1FjY0xFNVJIendBb21GRkNJVWpuM292MFZFZ2x5T2xzWGEzQXJJY29Rbk40UWxYSXRxd1AwVnN4TTZ4Z3ZHR29IWDVlazNMTFVSZWExMUZZTlhyeUROSUNuY3BMTGhTc2E3ek41RWNWanNpdzBpc1d1Wk1BVU5aUmYvbGJJbUxmNEpnTE1yZmF4UWdaSlREMVh1bnBRVFM5U3VpN0crS2p4bmdIMlhxWmRRM0pjcVhzaDhQZzFIM2ZqdDVhTVk2bVV3eXQwN29xM0tscE5zbW1ZMFZZMWZiZHpaMVVCRytleGxLZWx2VytaejNuRHd6cXBTUkswQWJHQ3g3RE82ek5TMUlOVllHVEJoSklScXora0N4T0F3b3R3bXJBMXJIVDY0aVMwamtseURYRkxCQUpLeG5XYVFnMUp3Uk9jT2Q1eEYwdmhWQ0ZqVjEyVXRua04wNUZ4R3ZZUUJPRHZ2eGZ4cGxuN05VUXlQUVc2V2xITWxNZzlXUmIxMnB0TkN1YUVEZGZWTTV1NC9kdlJiaXhTaUk1eUJyS1lPUXg2OVVZNkU5d0NkK3pnQ3JuYi9zQzF3dkppVUp4cExRc1JYbkNJa0xZOTZNNlhIQXEvQldWdEo5MUFVL202Mit4QUNVSkZkdFV6VVlaSVJzSVBld3c3M2ZPbmRIellaVVNIcW1KeFhJUSs2YUpWSG9mT0RjTnlZdjVVaVMvdU5LK2lJWHVtcUkyQTNncUtxMm5IRjd2QlBvcEVOM052bmYvTkhEQTBjREZ0U2RTYmdxSlBZQVJKYXlsZ1dqQlBCNlA2NzlKVWtpVjNYU3E3UEZWNXdtWmJwR2hFWkRJcDgwaW5hT0t1am5XN1A5MHlpUU5xYlByTTdDNVN3Ums1eXp6SG9MWDlWSEVDUExMKytCVG0zYTdKdlVlM1BqcEpxNVdMOUtDcG9BRWZ1OWhiaE9wdlFnRk0rdWJvMkczd0p6aExPTlhjSkl2TzBoTEYwYmRxQ2c5ZUZqWTd3YWdGY05TdlN1WnZKaUEwU0I0dEd2bHZrNkt5RDZTTnpLT1c5Z0JaM1pGZ3E1V2liL2tXamtPSGV1K0lhVjVsSWxBeTZidmdrdi9lOE5LWXJEMnFESlFBbXlkbkUzUzlVZno1VDRiMXVJNWsrWjRwM05mc3ZuSElVZnp3U05TOGhoSVdVRFpqdXQ3VVllcWxiRXhTVWhPSTZSR08reWZWVFFUZjNiRWQ0d0poQ0czckJNM3FsSzQvUWU4ZzByV1VhdHRDa0xXT1pTWnpNelhGclJ1eGJGMEVpSWJCdWdORTBzS0pVa3RqVWtQbUk3bUdLUVUzam1yUytabWFkQUdORkxZMStVcnVONjVnV0E1RFV4TEluckxPRHMzS09uM0gwMjk5eTQ1MGhvY05kUG13ZWF2RXRCZmRKa3hXNlhxSlkzWi9oWGdQZE5sRmpwd2tDR2VyNXk1L3hnVEIwR1FTalptdUJpTWhIa3VrTm14UldoM3gxMlVHZ1F0UllQeVRuZ1BQZVErZ3djNWRjd3hsZy8xc05UdGp6eDV1ZUN1SmlJTFErZW8zMFc2cnFyaGlYR0psWGhRV3p5dHZPZ3NEa0xaY1BERE9uOWtTTk9KWVJOZUhPdHl0TmV2MG5ZRmV0NGpIc0dRN24zL0N4b2cwNEFqNFd3MDAzVnNKNk9xTmY2dkEwTmtNVVRrMkQwTzIrOHAwMkYrNGlndDVOK3dQaFQ4VXdCU1RiYVpmOFNjMEZxekYwOVQ1YkFUY3o4c0FUcTNuVmlyT0R4SzJHUDZWUjYwMlNkVkNncWRYRkl6R2lHUUEvdlFHZlZFbFE0cVd4S0M1RTQvOFlBQ2pkZ0pxZW85WE9uVjJqOGdXZ3Z6WnA5akxkQWIrMDlsUkhsMjd1WW1CNzZoWE4xNXRVUElHd0VuY1FrY0xydWFUeGFnb3o2RkM2cU0rZko1UnlGN3VuQy9Ic0xrQmYwRXRZZ1EzNHhLSVpoM0hQSUtTTzRzRTZJcXp5MGtXa0IyUmJpNEczVElpUGg1NS8wbEFpNG91K3ByMkFYaWt0TkNSOHErS1hFWlhrZnZVZFU3K2ZVb0pvcmg0UGFMV09WZHJTS3ovWGdUZ21XbWs3NzNJMERNUWdMYTZ5dlVHQkM2WDRGL0dvSXZ3S3hxbndFZEF6QnVmYjZQUHBjY0o4bExGV2I0NmMxRWpOWXpJakUwTTVxM0RQRjYweXQ2VmUwS3V6YkFtYldiWGdlZDluNUZRZ3laNXNicDc0dngxamVBVTJlbmJCOGRQSG1FSVdPNDM0T0VjVnE3Q2FaT3E5OCtBanM4ZVhUODF6UzRaTFJ0MWM4N0J2UHNJb1Zvd3h3OVhidDdnVElEbFNzRkMySEZ1OHFoQVY3SUpqMG9nZy9tQStDejRJdnFXdmVsNnRCTi9pWXVwcmo2bzViUGFQSStEUHlUdWJnTEVoYzV4d3dJZTVCL1AxV0N1UWptVlR1Vm9NWTU2RzIxRjBYVU53UkVjKy9MUlcrVHliZHBOVTA2aE50WDBVRFU3bDJ1Y2JYVjl1eEM2d29ZSmVPNnpqc0NoN21WN09teVB5TlJjVGRtK21DOU8zRE5rT04reFhuUllrZFVRVXFMZ1FpNEpSMUFMMXE4RVdsWUYzY3gzRisrOTIyQUtsb1lCOTlOQUhvQ21zVXNxanFOVVBGb2pkZk4zL2VFZjdURWJsNjgzYTB0NDZqVXhIYi9LMFhVamFzSXNQcEJKenY0bDExbmxDay9xUVBxM0lVa2RFcmxlSHZsc2lrc21pZDgyWGtZUzA2WWFGL1d0MFJBT0FLdkFwZmxnN2UzOW54REgvTFdzSWx2VGkwWWtEbGVXUnlVSVFHeHdUUWNsc0Fvc2h6M05UbTBGM0tLeWkvOFFRYjFSOEkxd1VPanA4d29ONnFlOTlNNis0cFVKRWpCZ0huUVR2Q09wQmgwNXlwbEIyckw5TXJEdnNOa2dhZHJmY0ZubWVqbkt2YllBdGZoU3Azb2JtWm40cjBKOUxLbzJ0L0FFZFVORHpmSVZkMXY2SURjeERsdFI3bnlJeCtQSk1sUWpJNGh3aGdFalI2SFNWYnM0MlFXbU91RllkWDFsbkhySHVValllbWV6ZzhQOGp0eHhid0RaOVc4Wnd6cXBiZHVaUktIT3dPQzNZYUNLVVlXOEhscDdCNXVTTVEzM3F2eDY1T3FHMVRHdVRYQ21USVRPcmFYSHVRVWFEMHBBRnFZTENzOVZrOWsvQ1M5elhyT1pLZVFmTVB2Wm1CNGFXWEdjTTZ4bUxLckloNmVSYXpBOVkrdGZSV2tvd2VCMldZSHIvc3k1OSsrd29jVkoxNEczUURiUzNWM2VsaysvY2xGQ090aURaMGJiQ1psd0t0aWYxcWJ4dnRUTnRBNEhvY1VuOWcrRllzUHlkcDk4czRUL1VBL1hsajBtOXNlcTJuSzJpbWdGeE80cnNIWHNQaStzUloyeXRiTGlnWVZrMEZmcnovTnBHenRjSDIydTM4U1BMdFE2WkViZ1JKeFFRMGxVbHF4czFOTjk4ODRxV2liemNZcnBTV2FFeDRmNXljRkQ4N09wUWc1RWtQL0VnZTA0REk3SFgyYzRud0R4WThNUENyWFpEZHdNRXZLS0RDQTNXVnVnSWYxN2l3Ym1VRFJFak9IekEvRUhFayt3YVBSZ08xT1kreDNqaTg5Z0lwMUlLR0xoMlhYYU9YMWg2dWlWOUlGT1NCQXJYc3VVbjJYcmEvcGlQOUtmRHBEeFhmcFlTTGhkcHhnQUZTWlQyOGc0Rm82U0Z1TTNlT0c0Sm9CTTZWZUVyRnFBWjRldXRoWjVUQnZ0MC9sSlRRSUY5RFRDN1lTNjVQcnhpRXR1UHVXTUhHcXlPb2ozK1M1YnIwVzZKcFd5bE1mNFNsdUVlZkl2MUM0VE9DdmJtZGVqay8rZStmUTY4dC9MM2pBdzZQSFVBaXhGQ2JhY2lPZjBUQzhtY2xmSEdtUEhQOWNLeHV1ckh4Yyt5QmlETUl6R2JiYzhnUzFBQnNtMmlkRml0S1grRFc1YmIwWE5YL29BT3VIM2hBeUc5OWsvRkVaME53WWpzYytJenV3SjJIZkNsRitUNEUyWXVaYXkyNkVsc1J2b1BMeXp1dFdmYnUzOWJpQWJXV0dvSmxWSUNmeW1NQWxUNWdaQkNoeGM4dWpsZEVIUGZBQ2xVQzNRU3NUMm02SEhGYnI2VUsvbk5wM2VsZHFIL1JOUW5mMk9IQkJZU01HNXdyYjR4RVdKb2hpcC93TVpNWXd0a1lIdHo1VDdRZzJESTVpN1gwQ2h0elBvZDdycURNV3J6OWhRdkZvZExQT1FSR28ydjc3VUgrcXNiWmJOQ2w1RUdZS2xON2p6NWZxd2wxOU05ck9kNU9jU2hZSHNZNzVCaWVoZENzWC9pZTJiR0EvRG9PcUx2MndrS21TRzh1NXhMUDJPOVEybkdDZmxVbkJrdWNPWjltWFk0ekJjcEpOU3pJTWlsUU9yMmlrWnpHQ0RxS1pDNmRwVklMSDJKd1ZSWTdjZnhTekkvZmpxSzNubmNwd3JydFZsb3V0QXVMVnZCMWJJK3JyRFRZZDExVVNISjE1cXdSOVJVa2Y5RVVIbURjemQwK1ZFVjYvc29ZbVhyMENBalZibEd4VlZjVzV3OVl0a24xRTFOYXFQWkc2ZUxRcVFJNTdOY1FNdzh0Q0krQUUvZWRVUHFmRmxHZ0hSK3libEdPS0dubUtBdGhza2hKWlRvaEQrZG9KSTdFcU5TRFo4RVk3M2YyMFd1eGVzUExvVjJOdzFqWDBRcGlDZTdBM0xIR1NxS0E1MXdMdzhuSHU4M2ZqTkNUWUhXM0hsZnVkdUNmYjVXKzdtVFdScmN5aEs2b3V5UnBxTUVyUFJDclJIZ3F4VEpWWEV5Q0xmc01zaGY5Ynp0eVJxenJzcG5CemJtcHZoTE1qNll5WDQ1b2pVQ2hkUTRlblVNbFpxVmNJdWpZQWpVQ2h0NTdHNDRJUTBGUTBoOVB5Z0pmb1IreWhSQVNxTnY2VUZuUlExSmYvTjBSNWFyRlZNQ2c3THE4WXN3Nk9uZ1lYYW5Sd0VJelpkQTJ3UEZPcVJGL3NXSjVVaTAyRnNLMzFxbTlhRElXWDFKc3BsNEJpMjFudjdhTzd0NlVqUlBqWEdaYldRS1BVYmZlVlppdTdLcVo1YmNXUEh0OUNRVlZtQmZlWjc3VHgrc2Jvalo4OWxVdld2RlNYZ085ZXZURDl4UGVrL1piTHdrb3Q3WTZUQ3JYUXpKV3F0aElaUi92MklrUWRERjFUQ041RmxWMFlNZS8vY0g0a0dLejlyM2tTRzR1VE83Q2RSTGRFMTBQNTh1UTVBWHk1cmlIbmU3aDF6WDVDUksyRjlSNEt2b3FHaE03UWErMDNsbHFFQXBadytxN3A1L0NMNHVIS0cwUEhrZGxLMit0VzRSelBqSXBXVnI4ZWhQY08reWNnU2ZDMWx1bEhuTDlac25nVlMzcE1JaXFFbE4vN25qeklrdGtZTll1dzF2NTdPTVdTRmFGR29oVEcvU09DTEcwUEFTTGR6WUZGa05WeVhTa21iQkNTbURlZ1FCSXZLZUpWSG50TUgzTU94VDR4VEJWWk9BNzVzdkJrTHlxTnJuUmdnYjNHVGdMVGNDYlZYRDRxUWxib2FmWkNBamUxR3pRMzlrb3MxVitwQWV6Nk9maHVseFVteWlweG03VTNZc2NEbXB3MjdES1V1TG1HU05Kc2lLT01qWEpvRE5ESVhkVVVPQnBlNTczbUxxV1VpN0QxMW5ZQmx2SVlidU1KZFB5UXZTMFFzeGhtK2JYd1NsdVFTajNXL2dDdzRhMTRkMVBvQktZWVgvY0E3NkRoM3FUa3Z2aHZyemRIc1luUmYxby91RU5NQmhZQWkrb09KeTkzYklrbkZURGtoOHRKMWVvZENJSTBkemxmMS9JTUNYZDVLRkdjSTUrYW9DZHFTK1lhQlRxcU9IK2o0aUhoZE1xcFBDeC85UThobHkxWnNZWm13VU8vek8yRzM2MTRRK09IM1V2KzZ2TVZ6SzFuSnRUZVJSNWhNeFFZTkgxYjF2eURmR3E1T3Z1N0E0SmlXZXBFUW1kNElWaHhQcGpxRzVsT1VyS2Iya0EraFVIR1g0MGpFbVQrbXc3SmdOOUVyc3BRdmxyTGpJT0crVUpVdDVsclBlTk9tWjFNajlmcXh4SHpDQmx1N3FqNnpPTFNCaEQvUFFXd2NzejUvSk1VNGdsS2M3YnFWU21QMVZlMnVRaVNXeHJOWVcvTXJsVlhkOERROExYMDMzcmFlanhIUW5zOFJoNDZ4eUx6aGlMS2trekZrOGV1ZjZ1UE9jYWdHQTZrMnJrdExPNCtGdUkzOHl6dW85TUM4djh6TE50b1ZXKzZCbWFXYUpSZlVIOHVYSWZ0citMQ1JDSzZBN2oyQ1VLSDZqR0dyZzFvaEh6bC9aUWwzREErT1UvMTJpNWtIdUdrN1hkVWRVejBGVU5vcTF6aTRRMGUyU3p4K0RsRmxVL1ZmdDVaUjArYkVYTldjM0g0VHBiUGQrdFM1K3ZFcFpqMExNRUYvM3YyVkFTQmhTdG9walltUEhaMzllaU40UjZCM1p3WlBDVDdYa3krQzlPMVRnck10T01aK0V5K0lnZEkwOEVaT1UrbDR5Z2E5V3dUVmxvMzJiZHU3OWdQeHFyMG54RnNnUTlwSkdRS3BjMWVIVCt1dFU2b2VJZG5zYjF1dWVSVVc0WFI3blczZ2tyc09rcGVhbDQrQy9tbVJBaTdUTkJNbTQwZWppeCt1S3JtTE5sTXRET3hQWnZocVJSYmY3cnVKM1c2RzdmT1lEbFE0eXlJQ1NaKzBxZzl0aTZPdFJvNmFBdWJDS3UwcHQ4a3J2b3pBUUR0bHJvSXpLaEEva245RzhJdmh5U2RsNldGTGhtVzVYOURXNlVLbk43S1BPZExkaXFUUlFiTGJqTWlrZFJQR25tNzYwR1V5VEliMjVjcU5qU0lqZTBIOWIzNTVkQ1ZrNzNQK0xtNFRrYVF0dU02M2xkUkRHNjQ1ZDJSWjVBYTRTN2MwRFlWQ1I4V0N6a2dtNFhjaEtvN1BZUlhLUis4dHNqVVp3SlpSbzNFUmNGVy9sQndzOEt6RWcwdlFpSjk2aTBLbDMwL3dwcnhIbnV6cDc4MEora2VneGhPQmN3enpJeU1IVG9EalFvS1BlQ0V4czdEOWRmdVI1bjBHdXU1VU55Z290dDl3TnJTWUkyZ3pIbGN6U0xNRnhtKy8yd3JxdFkrWFYrSWNXRHZ3WDQvazB3ZjJTckt2ejBRVC9NSE12aG5OS2xQQ20wdFpsWXV4QVd5dzBxdnNkMHRPdXBDMUtiUUF5MTdmbjBFaW1PYlU5QmZTSUZlbldIQjJyVlNuT0F6OVZzc3FKeTJsWkdvYk9EenhyeXh6NGhSTHJ5akRuOEZSSTNjQWxUM2cxVktwK3dPZGRqMEcvdENpNkxiT1A2ZlBvRDVKNXpRNjZBUHF1aHdudHJTc2NqdFpjd21LSEJENGR3VTZTUURKQXBOMmNUdCt1aDRDVzAvUEdLRDdSdFhhZWU2MEh1WlozYnRRK1YwYlBEVjl1R2gyTXliNFp5WXhIZ2ZLbFZNMnZYZ0VkQzBiZ3QzQ2pTdTR4RDdZbnEyZFI1V25HbXpGZXVsakdwWVNsK2RoazdjTzhjTGM5azNjbWxsanpkZ1M3YU41TWtqUkRDUnlGampaenFlTk5lbDY3Z1Fybk9jc29BdkZrQ2ZRZVpTRW5wZ0h3QXNNeEFxV1IvdDhVdHJ2MW5WZlo3eDEyS2l0MU5VaTM2VXJycGg5WW5YVVk0c0x2RVZCNUtQZ2JDN0Vwb1FERVlrTVV5T1BKQXJLeGthUERDeG1ONUEwZGtXbzBuVU0zbTBGRU10aEJEQmMrcHJ0TWN4UDd3eFVURXFDRktCWmozcmFkcnZOWEZNR3l6bllWZE5qb0NUamhPMlEybmxRbmJvbTFmYnp0dUt0eWJEblBPcGswRFZPTjNBTmFXVHZraUgyMzEyTUlFREQzRm8xSDdkOFRHSXhFMlZGQkNsUWpCZDFkOUROcDZFYS9nOExqL0pJZ3ZUOXJSYlh2TzZsOVByOHNaeXZ5K1N0QjB4bWFvNnBaQjdXcE5XVTYzNXk2RWxwVGZLNDF2ellWbFZlWVlFYVVpU0graFlOMjd3WDVrUWpTaWttODhBM2FsQzFFYjMyTFd4SHJRbnk4WmVXdmQzeFZzcVIvU2d4YUR3QXlJZjR0RWthMVdKdWZBR0lYcVV5VnozZXo1UnlLdER2RFpoVmhNSXFWK2xRSUpwZWdmSTc2SkI3VkZLbWYwL2xyUTdzUnhRUVN5Tk8yOGtRc0tiRUhpeTR1TXArdjlvQ0o5ckJDbU80UDRsRzhidzNEdnF1Z0oxUHZHbHgxT2NTQnlBWEEzT29MT2N5N2paNGFidXlya2p0ZEVDUjBaRllrUFpTY1p5RjVlQmgrTUQrSUZIQnlxSktZZmxENnhJdW5RYUVGKzFMS3hBUFRHZDRic3hGdDhMdGZlbDhKYlZEdEd3cnJsdnlVTE1xN1dyTkV1WlE4MUlEcnQ0bXNqZkx4TEZXYjBxeXZLTThra1JZYjlMWjBBUUpLd2pWRk5hN0ttM1E1V3lHMnpka2tnRVY5MWduNmlpRXJvZVpsaHJCZ0d4WVIwdWNrZWVnd25MUUxRdGQ5SHBhRFIzYUZCMEhmZWo3Yy9HaFp2dmxzbkcrUHJDR01pdm1xL0oxOUJNT2g0SXlnQkJ4MzRXNEZleUJhL1dGMWNBcjUySHk1aEE3aFQxd0F5VjRvbGVSUGpRcENjaGM2TGJFY21UQWordjR3Q2d4bGlaYkJVMkpvQnNwc0x0R2p1VFZaa2FuZlgrRFhSQ1Z2SHlOcmJZM0FrellOajNWbzhvSDBWM3l1RzA5RW5ibjcxeTVtNzdlK04xaFhla3ZUM2dqNzNhQ01zMWErTGNYdVd4d0xMSkZrK3FGOHpvdTV2WFJJQ1dwS0FISVpvUHBsMlBvMFJyMmEvYWhVQk5EeHk0NjdValR2bElnejdNdUlsOXZYNDJpdWFCS3FneVdVenBlN3FicHlFM2lvQkpSUHcvYWl5STBWbXJWM0d4enZDQVVXUWtaTGRqT05JUmZEK2NLbDBCdk90dVFjdFRhcnYwOUlzbDF2MU5RRzgvRWErbm9WRmx3OXBwOStYTUNoWmE5QUM3ejQ2SWJIR3d1NjZUdVM3eXptaFJvZTQvMVY4RFJ6M0VycjdZN2FqbnpEdUt1WVFoRll3aWNyZi9HNHBFY09TK3JjZUR4bDhaRzhkZkZwT0dvL1lhQjIxUTFmSDdoM0JtbHpjaXNOdUlxQUFVNXJwdldVdW9ZcGM5cGVMa1hMSUhUZjF0bjFiQy9ic2Z3WW50TnNOc2ovSW9odGVPMktrTHQyNDg3cWUrSmJCZWNRQ2JjSkIxVURGK1FpdE5NUlhyY3M1NEY2UFV5Mys3YllEc1Ewd2krVXJGaHkvS1kxSEdqV2I4bmt5RFZrN2pBRjRxQzVOcGJyVzdvMTdwWERkRkkwNGR3R0FBS2d1NldYdlVhUiswTElOWlVMLzhhWFZ4RjhzeEZOTGZIV2lVRjM2cVlWd1dabmpZanNPYkYxUTF6THB5Y3lQRFg5SDlnczBxSWc1K2dzVmNjdVhocGJLRExNbGFrSHVGMUZKV3Axd3N5djFnYmlnV0lvOHRwNmNMTkduK2dDTzlCWlVHUm1XUGEwaUwwbXhodDdScnRsTUhiU1gzSzJSUHdTSzRHZDFtclFEWEVjMTE2aUFoMjB3ZGFoN0lYRmhPZS9DOUdlLzYydDRVaTRVemJYTGIyckY5K1lEYkx0U2o0OGR5Rlkwck9WaW1IQ3NUTWk3ajhKaHN0ZkpEVndhTDlDU01ndjl4bmZXeGg5ZVdHditKT3I2SXF6TTArZTNEaU1QdkZzSHRQT0pYS3NIYzZ3RmU4QTNYMEsyK3FLYjhYL214YVlBQkloRkwreVJIbnpZV2xrQVI5MHVHVDNpMHZzTi85M1JoMGlmeDZ3T1VMNGNNci9PS0dEL3Z3TUdGUll0NFB6NEh0THkxTkNlbFhkb29hYVRvejdZWkZsdWl4VmdLemZjL2w4TFEyVmJ3RWFwQmd4eWMwVnRjSGE3Z2xpOUcyNTQ2R0FNUXd0R25qYk9DZ3ZVSlN3UWdWc3NvSnVoZjZFSEx6QjhNWmNBa0RKbGZsV2NnUHVPV2YzTFJzQ1BBTk03V0thRlJWczhzRXpBV3FCWWJxWWRjM0xONVBKaGpTOUJYbVpkR3h3RElOYXF4eDJBYWZOWXVNU2xrbllkMVpFa2lwL1cvU3VQM0NYSHFCd1A4bDhyZFJUUWFFTFZ5VVBIUjh3UWxXd3JueVQxaVltREUrT0ZkMW1ZVG53ZGlIbUMxL2xMQTU5MFBkUnhyUjFFbUpNZUhJMVJtZmVPOXpKYkd2WkpDc2R0emVOYmVHV3JBOW9FQ2VlalZuUEdyNWhUMER6WE5kVjh2YkhGaXNYWksxV3k3ZUxxUkxjWkliMlZNVEFnQkFvL2g1S29mMmlaUmVTelJWN0w3TU9Ta1g0ZVp5Y1JWY2llQUdnTWdNZWg4dUdIVjhhb2l5R25IZnlSTkJaUk1uNlhMdjRsUjNNMjVBV21zWEQ5YXVyc29mbFR3aUtLaFdTY0VwaHZUdVBSSlhJdUFvU1J0ZGZ0SmJvcitncmJOaEFoY2VseVpYVExZQm1idDlzWWZERW8yYnMxWkk4c00zQTZhZjZFQzB5UVQ0K3FhM0J3VDhIM0x5Q1dwMXpldEFRMjhxK3JFcFdLZG14VkVtM1h0QWErWUlyazQyREY4ZWZnNEtTSVFZTVlxWVlNdnl0N3V5SUgxWk1lL1hKWVk4SjhGbHdCQUdQMVNROTR5VUxWNE5acndLWFFBYUJsZkVlZWV6TjhzeTBBNmFrbS9rMzJmcDl5T01aT0dPbGxUOUNVR3krcWlPUDZZSnFTMi9SbkhneHljOWhEbXR3LzN1Tmk0dGh1dThsZTFLQ1ZDaU1mY3pDTGxXeHl2c01YVlpscWM0VEt0M3liTFdta1ZxaDErZXBzS0FTL3o2MU1YaVZwem9QRkZ2cWQzdGh2aENpNk82dExNd2ZRYlFvMHdjeWtNcGN2Z2pNaGNrNWMvWVV6QUNkdXdhWUp1NFVKMVhtKzdPVy9Yd01kLzhGb1grOFN5SWNkTjQ3bDJFeGdRbHp4dVBTOVFPOHJuc2lRT1ZlaFlRdFpvTjhxOXBvdTZqenVIREtJekk3cTRISHNhNkFQUUxoalBWRUx3NzZkQjQ4cFdNaVB1bzE0eGVvd0JhSjc2czljZlE3ajh6STJNZzZpRjJmRC9BY0RJdWcrU1k1ZFBTVXBxOFFLYVI3R3E2V3dmVzREUVhoTHN3cnlveFl4eVdkdWU4VFFKZUNsR0JRR051K0d1NFV4SDFwL21LK3FCK2c2VnZkbHdyZGR4bUt2amZVTXUySlBWR0FYMEJJd3dFNXdyTDRBOHdCelVxYU4xaktNRjFOemlEdjA4TGhZc0MreUtGanRDQnhIKzJvVDA3OWMrL3FDZVFWWEtscFZaU0IrZkU4cDFpbGo4TUlWbTEwV3NWQzRlY0ZBQVhoVWRCeTEyREdvY0RuZVB1ZC95bGZsRkxPcXFMSStRaFhzZkhjKzNRN0pOM0pXN3lLVmtCalpwWG5Za3hrQURnVWhaNm9MaS9qNnhNT0VKTWgxaHl2NXlWUHlnb1dOZE9uME4wMGI2K1gyV29Sb1lNT3A1dnVPQzl3Sm1BZTFDekxlQjlpZUk5YS84Y3hzSjhHZy8yVUtZQ1lHbE84RDY4MWpWeW42elhiSCt6MGVCSVhBMmFaWlJHcDE2ZEZEcmJsSjNzWis3ekc0bk45YzFubVBuUUZCL2FMNEE0bTV6Z3VUaDRiZTFPNHc1czMvMENoRHZQVkZmMGdpeUlxUThYQ3U4NmhnOW5DelVYMExZS2pvZXp6YStzVnFXTGVXZWtNWVY5ZDdTT2xRQ3FuL1dqRk9ER09TcXVrZVBzWTMxVW1pa2I4ZTdzbWZRdDE4QWx3OG5oMEh0eUExbWZmbmZIemxkYXFreGFhZVhxNm1yUURPME1zbHVkVHppVFhUdSthUCtVdlVIeWhqQUZrK2xvM3BtVXRWalVLaGN1WHdFQjgzQy9JckpMVDFPYTM2dGdaNmhtWFJFbzVxMy9NT2RzT2VOSlpKZXpCbXJRakFDS1FHVWxxUXRvM3pIVmtxOWpvMlZXUUZybmFWMk55VGRCVytzeHJKSXRzd2RsK3NCZEp2M1loaElhdkJ3a0lDUWpGd25mcnN5bmh0U1prbWJRQTVYaXBWb3V6bVpsS29IV3paU3BkNnkyL0oxcGs4M0EvVlVHcVBTM0N0UXFiT1RzcUhjRWkwc0tCK0pidEdCTXVPMkhpVko4a3JSMnRoUlZZQ1NkamhrbHRoK1BIRzVJODB1aHFUNmZRMXJvUjh3UjF2WkpUT0xsb094VjA0bFhnZTZGMWtVaHd5K2VIWllBOElpRFZCR3g1SDVsYTRJbW12VkFVNnU5RllRZVM4R0JUQk05Mlk1a1cwelRoRTBxNHdsb1NaM1lPTThyYkRJK0Q2dkg4VUFUSVJQd0lIdklTSGYwazB5N2FWVUtiSVJNbU9SOUEyY01mUCtqdk5UeVh2M1JPQ3hEeExJZ2hOdEpDb2pzaUExaW5ZSStXazB1b2thOHIwaXRYWW53QVJ5VmpINEhOVFNXWG8vZE9PWFhKOG9CbHhRY2J3UjFGTnZGbEI4VDgzbzlQOENlR3JyeEx1cHdad1VuS3l5dWJoWFc5Vldoa3NnMHZwUkUrbFdtekhSQ0x5SmUybjJwdTRpYno2a044eU9ITDQvUk9TWjJqZk9ETndWc3JZRk0zbkROYVZHamJVbGhFSVRFYzdBVXMwK3dYUksvWkxubE9COXZrLy9XcjVENEk3a2paQWErWkhHQVlEUS8zODdVZ0Y3SXlXUDN2QkY4eUVJVnB1WEN6Z3QyZmpyejNvVnc1VlVEZWFmMEptNm5DRE5FaElSSmk4MHllNzBtMmZJVTVwY215OU1Ia05tSXpLVjBUNkk5cEdUS3NlV3hTTytzWHJkLzBqcXMzTXd5aU8reUdhd3dhb0xaWEZxQXpRRTV6Z3NtZXdMYXdzRWhYNVZQMFlHT00rUlpjNFIrY3RQeUZxL2RGOTR5VnpKbFJRcldMTFpLTFhKMzVHUjZhN2RuQys1cWZJeitEM0lFMkUzN1hkcFJrV3VqNThNNkNsT2doazd6clhMaWpXTkQ1ZXhEc0l4TjlNVGR1UFN5NEljVm4zQ1g3R2wzNlZpNUhNSTZ0alVRVVkxT0lLNWhGSUZ0ZThGYmdSVDgvd2ZIZjhIVUxrUVRCbFc1UVNsc2NjR1I4Uy9hQmRRQ1VueTJEZDB5TWtzN1gvOCtKWWhscXdoa0NmOHQ5L213WDc5MUlUdHAvUWZ1ZTdIbUFEMmUwZGxKSnQ2SlR3aDVlclFtMEhpN1BCU2piWHJZWXVXZWtHR09EejMxMUZ0WUJYdEM2eFZ5OTVZaU1uRlFXWkVyKy9YY1FiRmZoWnRYSmZ3R1BneVBGVXM0NFcyVEtmSktJRmJVMGdYTDJzWTJIWWJhYU5jMU5RY3VYUE96dnZDb3h5cVNUU2hPazVabXNYWWVvbzRmd05qVWR1UndlVktGcE5tYWVPRE5PNjlzcXlXQ3lsUkYzTVhPdFVYNkh1c2Z1amt5ekRINys3Vy95V0MvMy9LeTRpanE2TDhsdEI1a28rMmcwaVVLSjZMWUVhVlZQZGpQUnREMFlnb2M3NUJwbm8vT3JzYlJyZFJaazA5K0lIQk5mRnZUVDFoTWMyNUU3T09zMlJPTnVscTc1NEJ3Z2Z6WWM5dHk0OE5ETWZJd0ZOSlAvTFN4enp2bzg4ZHBFTHhqZ01KQUpPa1JxRDcrT0FnMGN6QUJmM0l1RUh0YTFvVkMrTHdZNmZyR1pqdmJEaTB3UzlMSmI4eXovWkluNVF5cFRPTXJNMVh0NVdmVHhIckw1VEczdnJMZ0J2SktsUjdyaG9GMlp4dWc0U2V3ZzBtNWVBSTdKU1h6ZmE5aUZkYkNRaVU5OUxCQUE3QmRLUXg5NFRqWjZtcHlCcUhOMmNBWDdyODQ0MjR1Zlk1eEJ0KzMxQTNWc0VRWlAxZ1RUUjhDUTJPMitNUEVWSVRsSnpQNm9WUm9VdVArWkxtUUtjRG1UNVF6VkNXK1dqdzFHQnJaOUxmWHZ6RFJYdlJMY05lMXFmUzNuUDFDL3JWdUtXL2pBVGpGMlNuV1RLOEY0T2FlbXBGbnlBWnBCWDE3SlVjMmIzeE14Wmo5ZGI0QmorcFZYWlFCdEd5cisydHVCSEdVTzdmblFzR1RtRnBKT2ExTURKSFF5Qlp4aFNUd3kzQ1FwRGZmNmw4aWJkNmJWdDlXZ085TmFTOWNZSzIrQS83YWtXMmxybDNSMDY4ZVJYZ3FiWGd6VzFpMythdUZJN1ZUWVR0a2gxTlFiVW4xUzliOEM2M1k1WG4xS1dHUUJwRDJESnlmWEZVbXV1WDJaNHZIQXFuOGZMazcrVzBpNFFBMjlUbGxhOHlsMkY4N1piT1gwTjFmRWl1aDRQQUN3TjZUdUxUYnpuTW1YSWR1Z3pPWTU0RFcwSUcrQitYODhtRzhwdE9nVkFxMlkxVGF6QUNpK3hmU1FML05hK0R2M1hoQi9vdHRJMlVsYUVubEp3clkzVUV4ZWJNbGthak9TZ1VWZlZoeGl2SmNhamZIakdtZHh6Mm9URWM2SU0yaWx5MDZMUWtLT0R6SVdIQ0RVdTczUmw0RXBBaGRXQ3dCbktOb1Zkb0lQQnU2Mk54ZDd2TWVwekFuQjdUZmJBR3I0Rlh5ZHVDQlpXc0RqMzJhWlA1WmV6cHFpV2ZWV3Vybkh2dWxxM2hRTEFxM3lmanhFUkJkQzVoaHkyMWo2ZzNKMjBQencxTVE1ZTk4d3RZUlY5U1FZWEFyeGRKY0l2dVppb0kxaGFIemNTRWwrZGx1bHFacjNhQ3pzMTl0QjZJMnRIN1prQ0ZZNDNrVUwzL1hGZUMxK2k4RXlpdlRPRFlCeVV6RU9zbUNUVHdNRmhzSHpCcExqVkhSUlI3L1NPbkJ0bW5QL0hobkF6UGhRYXJhdHhBVjNxdmF1TEI4K0YyazhhTkRQclhodEFyaXBoQjdFbTBiRUxIeTZsQ2x0czExRnNzODhMNitHMWdYbnZtM2Zia0V6d2tSdjlmOVdFQVlUL0JBcHdCK0M2d3Joa1ZpNXdRdzZISFFJOFhQOXNiTGlGY01sN2QyUUlOT213dWNsSUY2c1hUWXRwUlJwUTIzN0dycWJrWTBWZit3WFRpWVZ0b3NNMkRidklOU1Jjejkzb3dVc2pnMURCNVhvYmNIRTBPbGZXVGtyZUg4VXAwcWxpL3E0V0ptUEpMLzNkS3krR2dLeGVMSDQ4MkxkRVdxdFAvZHY4NjBVNUYveFRKMWx0RU0vcC9YRWRHWGMrbDduWDByaTM0TlhiWEhORU83bmpwMWJiS2Y3K3RWNW4rYVBEUFU5VDEzaStqbkg3cWxSZlBGOTZsMTJzSnJwVGRkLzhoVG5Ici9TZk1zRGRtVXNMcjdxL3hwbWNUSzlBd01JeDZ1NzloYXd1MnptN1loK1RSbDZUU2hOSmdhaDlIQ0RkL0pNWE9zWU9MMWRKVTVnMS9LS3AxYk5uc0puck1rdEVYTXhxaVc0cVM4R250S1hpdXRJYWorUE4zS3diNVV1dzRpc2htRjFOZTVkbWE3QWl1YW9NMDhSLzZBL05qZ2txaEp4TlZqMVlNTTBRSzZMTDhvdUFFYWRNRWZQdEpoWWRkWlg5VnhnczVIM2RyQ2dlbDBuUXhDV0FNclpZWWNhR01tbEIyMHhBNGpRRlhBQkM3aWVRN3VhUTUya0VGUjBxVHJ3cW1ocERMQlNCOEZ3cGxtaEpOM2Z1dlROclhsRWU1MjVvVEhQQ0todVFlR2tVRzJEWW4zUGlOQTZnTWhuVHhIZy85TzJqRm90SzR3aTdGN0hUbTA2OXdqVnFJTTUrZUNyMW90dFlEcXArN1VQT05qSTU3eFR3Y3d3S0VocGY0SHM4NDdodDB0QkZEV3o2bE16d1NtU0xURHhIMkQ2UGdweVNLemJDOXdIUzJ0bUF1WXFJdWFrWktMb2VFZC9KN28weW45OTVxM0RzQ3lVY2FLSUlBUjdveDJqdUdNTE1MZkQwT1FQSnp3NmMraHVWekxPWWJsQ0xlVlIxRDdQWktvbGtVVmFFdjN1Um9WeHdHaE5SMnEzcFhSei9RK2tId1hLTFFYbXBGczZpOU9zYS9veStmdkhQbk1IL3BmYzZveFExUDVoNHBCSGhHQlY2U0tWaUE5VlJGcmp0VTRXZ2UyZXYvVng2cDBUTElZcE5BR2NTcU9NbDdITCszL0g0dXI1NFYzWWVZb3RnRkh2ZWZ6ZEFBN2F4dXMwaFJPWkVJMXlYMkN2ZDRvWHU1bzRYaW54Yk9QNTBJR3JHdG1xZGxQaUhUTVdqTDlJK0JuOVdrTUtaWUUyQmlOSDFqQzNPNEFFTGR5QVc2YTA0WXRqNll2elc5TGhHNGplcGNRWnFScytDOHFhK05BK3hUUWxxWStyTHNXQnFua2paV3JQMjhUYzJ1VEN1VFBaRytwazZ5UjJxRlVSMExpY1JTclI1LzN1dGVXR3JPcC90ME9zYXU0VTVJYzAvcGxWY05seFY5WXpXZHJNRjJ0TUVGK1dBeXU0Z0xrRGZQeUUwUVpiUnV4V2V2QlNvTHRWQ29GRDNqczBVWFN4L2c5NzdpQTNXM3doVUwzQ1dtSTljcFZCOGVqWllyVkhRaWdiUnFsTDFMVm5LZTA2YVJ0VnphZDNFU1dMRTNCc3F0T3V1WnBOM1JsRUVZTlNzYnJsSGNoSjNKUE9EcG45Rk9Hb2V2M3NETXVGbzRxUkJIcjhPVW5UVXAxL3M1T0RlYlg3V1BaSW1qU2NKamVnVllnV2NyTnZDblFIN2lLUlRHR21lMVhudjd4Nk13aUJnZE9TV0Rrdld3Ti9wQkNxMDdVR2lwSWxQNkp4ZU9Pc2JLbzJ6cUtOVUd4MElWN2F6VVltYWRWbXloOHJZeDc3ZjN5bGtRY2JiTXlveld2Ni9zRTY4ejYvUU5XWnVzbGlGYmRIbXNGaDFXVGhKeGlSRjA2d1lDMHQ0OUpMcnV2akJoRFduWHJrNGVDTnRIMmwvY1BNMm82SXkyWU9FNzRzRkhqVEZtRDVYRFFzNTJZWkNVSFdJLzVWZHZXWWZzNzE4ZHpDUFhRZFRVMzgwUGdJcXpmSGJ2Q3hZNHp2OEVDc2djd3NqMy9zZHFUbSthNUNoUkZHT0tlcFVZdlhBNjZkQTJFS2dYTldVZXpuYmtNYzFEdWVwZDdQeHBhSGg4cHcxNkxGNXNhcmVZamFHclI2YnJ6UHdwd3BXancrOThkd3FsV09BbDRZV0prZHJkSGIzeCtabEh5UjErclF6N2NMaXZCOCtmRmkrU2dDU1hvZlRsSnl0dGJvOEVrbUdvai9Rb2dkclkwM3NMK2hEWWN3a0dVKy9CditjRUNQWjFucmpVR2I2d2dxZlVSaXF3Q3hyem4vYUY0cXB1U3dqbXI2ai9TaEVDaDc4V0laWksrVnlBTDRKa1FkM3FWWnQ3dmZGRCtWdG9YMGFxdGxwRVhJb3VQL2hta3VyZkhZZ1U4OW5zM2dueXdnZjdUTDJtUkl3OXJuQkpZMU5aRmlpU1VhOW1hOXd0VEQyV09Zck55Q0NMR1IzV3RTVklSY1NmK244QjBRMzA2bnBRdk5nOVVjSWs5WXJUMEdGVVFJV1pualNwcFZreEw4N09aMTFseU9pa3l6RFdlcDREcnlWTnlyZDE4MUx0OHJ2UU1tamRlVGdvQkgramdTWWFrcWdPVDBCcmhTNE1JMUMzQVBYVnpsazhaTUVnRGg3WEVFOEg4U2Q0RGhBTlcvUFFpVDB3ODcvMzMxdlA3R0ZwZVljZWhxMmYyNEdMc2hxYkFTekVMVjQ0UVNNOEJNcVNmWWsyV2FWY2VKM1lRSllNc1FNcEt6Yks2Q2ZQcGZveWpVdmtsNG05SWZxanZBOGtmOTJWSW5DTTIwMjFvcXNLVHNDa0xmcnlBd2hERnRIK3hyUE1ibjBneHdVUGRKYVNhZEFSOWFzbHlsOEZ6WGxwbmFhRysyZFE4SXlpcWM2WGFoUncxMHJra3diUEowcFFXTk5LaHM0amFqNjN5QXB1cDkxcjR6K3pTSHNwTFBMektwdTNkUDZDd2VEWUVyRjdpUDRObTNZT1RuNFBhcU5aVEoyUzVnNk1zelhGTEZXQTVxSUs0Z2dQenExUHVQdGl0dVU0d3BHMVRoOFFpVEFPeDhXNmZVUEFERlN3V3ZwSTBJSFhSYnVtSldsRWFJd1BPV1E2T1huNHpVZThzeFMvL0VpcExxbDlMVEZRc3Jyak9wWXQ3ZXZ0ditqd01XVnNHQVZ5aEFKOUlmbFBOUU9OK1I4STZWa25FcFk1ZFh6NzRnTW00eVhiRHNwZlpNM1NwNUU0WHV4RzBBREJGZFVxdVNBaS94eG9lSXoybDJmanJpOVRST05TYWVXN3Q2R0RsYzBwRDl0NkJhaG5EMmtINmdLWW8yVzlnMVN1SjRXNXRVNWtnNXF0N055ZEpzVk56WVNhcmdSMHQ2NG5sbW9nVDRab2duN2h6MkEvSHFMUUp0cnlDT0FEeGplOXFQaWxaSWErcDJGNHplMnFpanpHTFFCbWFvNzVIV0JDZmowQzV4ZXlISHlacUdmcjlXc0hXN01wSDVMWllSNmlia1VOSGxHejF3NVVlQndadU00bHp2YTlWTElaNTNsek1XWWdMbVRocmppWXZOcVUrTStWNDFjMVFYczVjcmp0NitrbzZRMCtudlFyWDRhS1R6UVF5Y0hkMEdRWS9ieGRCZkVGZ3Y3UFB3OUVGcFY2QUppeWxTTkRsNWpLWithY1JhWDhCUElJbG1LSVVoMlBTUUdESjE5NFgxdWVNWmk0bmJiL0dKY0tEYWlnNisvNHlNUFl4MWQ5K0dHMk5LY0VwNTF1WEkxSTA3S25LZlorT05IdzIyMW03OWdaaGl1ZVBYSkxvT3A3RkN5UTdqK1cwTjBMV05TbmRhUlB6anUwVFdiUjczY2d1WGQvZ205cmdrOGVyU0F5VHVsMEQvYk0venhlZmFjWTBYM2g3eCtsZ0ZpVXNzWkd6enN1YkJ3K0J1eXlMKzQyVDZRbkV2U0ExeDhDUDhmNUoxemRtUjREcWgyTisvclc3THVtL0pvRmtpK0w1SER6eXBsY1g3aGN3QXFBS2orTlNka2NpdWhsaWw4WUkwWHNoNlRmb3JpTVdZQnJQMDZhZzhKTzlvanBxekJpbk1oUGdhbHFyV1pneXNObWNyeVJpOE1zRHJIK2tKNTJwWS9pcEFoeXgrUlI2SWc5RXJhVnVuc2t2ckhKMzNHYklqT0dRb1ExYkxnMUF1SlFEUmU0OTBRbGlLejZjZ0o3TkkreWxyREdOcm1CWFhzd2tHbFErRmROOEcybnJwNElDK3FnWSttZGJjOGI3b29ndDNWbVFJQzJpUTZhV0k3ODB1K1RpbHdpaldsRG1MbEZ3Qk5jbDdlTlptQjFQOW1UOEwxbDRTUFF0YVlSMWJ1MHFUMTEzVmsvSFYySCszaTVuRUx1OEVlUUFtbHBUcWlYZDlzU3pNUU5hVzZyOEFlNGNBamVuckpjc3Q0TUxXZXpLdVBqUmoxODg5WUQzTlp1Y2NMQUdlQ3ZGRHlJMDZteUUzeUNRUUMrVHpyNGhucnlZczNRVHRmOVA5VkoxRHhlVHBJbnh5MEsvdDVQeVZ0UDM4M2tZclMzRTJadXdIRlVMYzkyUXRTSHlBZzNNTTF2c1Q4V3NaTTJYRkpNcHEyQ2ZrUHhKWmZJcEdIVXVkTG43Yld0Tlh4VlNPOVBoWFZ0SjRJRU5NeEZoTEpvaU80THZ5a3c0RlZ3WmJsY2pDK0lxeGNZcGV5NlRvMTFEQVBDYUwxVzBjQ0xNYVlQTnphbFMzT2VJcGxPNHJnOW1QNHhSMFk0UTNqcjNseUJOUkl2SGcvajcvOUErajZsV2tkMFV3TG1JWE0weUVjMXZPVjN4VGRVWXQwSDVrNzMvcFlNNmszK0liSFRva3B0MWpYc3ZXSVVJN1cyUVZlMm9KS1duL2JYQW9keFFTVnUvZUl5bzVRZFVuZGJ1Q2hjeE5waHJuaVcxSXk5WGY3aTYzdFVPSXRYUllGU1lITThSdHpTdVNUdG1PNjVpWXlnK2dxNHVxN0VsYzBGeHQrckdqa1NVakVrRWlXVEpXZzMvVmtPVjU4NWZZK24zOVd1d3JtS3MzRDhIVFFGK2tZenFlVWZCV2ZjbFZXdEhxMjZZdEpLdnBVdDBreDcyTnNPVUNHSThBTnU5Q1BPZmR0SW1HYks0UEJLNkp4bFpwdXBKMlY1Z1FyUTBtVXRseTVWN0srOVlZT1YrU04zeThIWUFpS3pTdWNJZ0lQOHB3M2luTlU3cndVVHBUdzZMMlN2d2U0VXJFRS9YUWtSQ1NnTEw2bmRSSVpxLzJ6aGREajZZcDFTbkVYR2tBSEMwMUREdnE2ZVhPV2VMK2dCZjBrdzhLVjI1eGhiK0FZT0Y2Ky90Rlc1aHRhdE94aEI2UGZoNVNKMkU3UnZkT2xWT1ZlaHk2dktsK3JrZGZTVmx0WngrZnhMTkVQRUtGdFpPTjliME45ZnlBZDVwbmlmaWc0TDJjWkpMMTQ0UVYxZmw3Tlo2ZnVTN0ZHTHNvLzN1eDV6UUw4NDE1OWFJT2t3UUJwRm80bjJYK0ZxRXQrN2YzekxZSThSdXROWTNYSDJuRkNENnR4TXBIeVFEWGdMVmhKdkRKbFM3Wk1mUzFpenZ5NUQ1TW5UMzlvbWlDNUYxc016VEFhOVJTVkRnbzJaZGhzZkZ1cmNPekRqcE5mSk9nUEZvLzg1OGZHWGZMMjR4bXh1ZENMSy9UQzg3TDJWTlRUT0p1QlBZcHNMM2xPL0JkWXBWYkszb3pDZGxvTVVobEphNVdWcGJSTFRvQ29mNGUwTUMveng4QjB6Z0NQWWNaWHZ2ZFQ3V0hKMUxveHZWUGwzWEJJNDBybjR3bTR1Y2pBUGJDUmdPdWZ5Nkt0YU9nTmhtS21CK2V3QU1ETi9yTmdEd25EcmJRcnY1NFpaL1M0WHlMdnJSUDhQN1pQbzJDY1liVzVIdG81elRxbEZQSXR1K1hxVFBiTmhqcXF6VlZXL2FjTWtiTmFYeXBJRnl6Yy9WaGRGTnI4L0MvNzZsRFBHMVlsZ295ZUZCUkpxQVlXNDIwVmpaRlZVV2gzbDAvUUFvT29xLzJ6YitiNVNMckliYUFwOXVVV09XTkc4QzZZSnBqRFlDelZHZXZUem14UkNVb3kyOExjc0crN2RoWC9vSnplc216Vzg4bzJRTlJCSlhtZmxuUkdjYmcrSElmMTBlSzg0ZS9vSktVMkNLR01NTmlHSVFTM3REdVRKT2tRRTB6QlFTejM3RXZkcmhGWnFJNTVQc0VJdHkvRW5Id1RJR2Y1WU41Qm05ZEViUXg2KzIrUHd4a2cxa3pHQ1hUQVZMWDhuU0JUdUJsNEZsUHN0ODZzcDRtd0dPYzU4UGltMkg0R083VFNaaC92bDNWOTVNeHFnT1RnYTRRSTJNQ2cwelZLSHVaM0lIaWNDU2hvbXVqRE9vYlZDeDFVS053dGZhYnB3NGdhY1NYckROTGpzakNOa1ljL0VST2trTnJ3YnVDYW4wZEQzNUdNWHVIUUZsMCs0SDBONC9QanNhMzlyTkNOcHAzU29kSHhMa1ZoZ3VyYnFqVStEVThSTGxkcFRaRmJDQ0dla0RUUytrUnpReDhjZEQ1Qllzcm82K01pV3pvQkRxTjFGZDV1WnZxWXRlQ3VYS1RsNTNTdVV3UmlscmIzNkNtd3pYOWhvUHN6RGRVUVRxOEpNVEo5QlRmQzZ2U1VZWmx3QXlpUEhZanpHVmMwK0RCMTVaK3E2Vk9nMk5UV0VRUGkvN0JLWEtFNy9GMU1yYlE5cmxRdjQrZWkxcEt0NjZ0Q05oYVFUT0srZzVLajdsSGFjRVdYMmNZMkNLWSs0MmQycGZxNThaQUdHL3UvNW1EVE5xcDNldzdpY2FHQit2dHFyUG1CR0ZiMnF5Z09tbElMdDhoMGZGVlFhWFRhZW9TMUhoZ3Zuc2NCWHpaZ2Z1VWpQbkRyS1oyV1AyRS83TDY5bHVCYkxEaWVPcEJRanZOMkVUVWtnYm9oeUttUVA5dkVwalRUZXJXM2g5SWFOMklxd0J6MDFNbWtEVFowNkc0UWVPbXNwU2J6c0wraXVPTWluT1AzTWRMam9lV0ZiUXp4NVM2YzFWemZVaGdYNU9QTlN4ZkkrUS9ld1FnaW5lYUdBVG90QVZaczlwSkxGRnI5RHNMRHFYdUlWZWg4cXgrQnd1T1hQUU9oeDlHSVA5OHJSSVJqV3pOdzNSRXRpRURQMEV0Sy9ZMVRvSlp5bk5UdFdmZDZGT3l5ekJsY3FCNWNHSnhtbVdrV0hRbWhpWENTVmwyTnVMVVdlVEtWeDRxaUxhV0VDU0NxOHQ1ZCtEWWc3anhrUUo5VDJ3NWE2eHR2bGlHMUszbmhRVUhaVkJGNC9HbHMvUjdXa3dXdm9QYjFtdU5GM1cwY3lrcUs1a2J5YTcyQ1ZaeEJERDVjeTYyazNmZ3RHZXpvS3hnazU5N1ZobjEvclJ1Q2pNOVNpK2tSVkNxNnExTEptWXlJSjNpRGxuR2VSWHp4MHdZQlJibnF3TnRBTG5HSUt3a2NiTlgrczd3MjIrQVdGeVdndkJpMml2VTNndXJxS3pHVVhrZ3E5enlnN0MvMGtJQ3UxK2NadnAzMUFlcnlzUVRsSzhEd0VvL0g1K0x3bnN3MUxoVlJTT0dnZDRYOTRvenNQbXVOQ0xwNjhDaWtKdm5hajQ5bHRMcitNb1JLVjRnV0RPdDRQd0phMktnZXdnY3JEVEJPV1ZUVDhmTVRERlpDdXY0eXRLdCtMdU12cUFLLzBjS1dBb25hNjg0R04rdmd2WEluYm1vbnQxQWw3b1dnNmU0UFVqcEJwbktnWFRPNWQ0TFJ5c0xLWkp0cTQ5VDdHb2hFa0k0ZVBjTnNXcG5iSjc2YjFIZnFTNW1ESHVKTGJXd3dqN2oycEdXeGlmdUoyVEJnb3h3Ulh0ZERzWDFudUdlbk9DZFlBenhuZk9uRlRVaE9SNVVSalFyMDlibTRGbDhxaTd0ZkZEQTVnbkppVzBmME5VL1dtc2xnUXM1eTB0Ym10VUxHaUFQWHFUVUJPN3QwMHhNYXFmV1JUWEJ0UWc3NjA1Y2h1V211U2U3WEpONzc2OTg0dTMrcUxCNEI0YjRVYzcva2pNRWsrVWhsUnlFQTRWcmxuVkg5Zk9oeXVlMVlWdExiWC96NFpETkhyR3VpdVAvTU14Vkh4aE5HUUpZN2YxWjRETktqNitlNE1GVC9zQWtxcGZzQnRWd0ZsOElLVDJJUWF5OTNVakRjaFhWNG1tMytIRkMwbTUyUzFraVhJWkFGRUlQOE1MTUF5VXJxYlNxTWRvZU5VZ212YTFLU0Y2djJtV0p0YVhnQTJkcm03azhhcE1yL1ZMUkNSRUF6RGJIUjVRQ1JTZHdLcFp6L3hsNVRINHNZSXQyOTZ5L3ZwYUovTjU3RUw0LzRwRmY0YWtzbTFvRDgvL2pneUV3R3lYUDNmNkNzT3h5WTB6MXhrNXpVdXZzb2UvQndqV2dnZG9WR0ErYmNVSnZxRkZMZ2xIclQvUDFTc0lETkN1ZWQ2Y0R1Z0xyRFFzVXVWcmlVWExMcnlGc21YMWFCeE9VdndDd3UrOFNVWlpzQk1GNENnNk9RM0M4ZGdVR3RXbURpMURldjFXRDhNL3pmeFJyd2MycmY5MzhZeEhsRS9FdnBPZkQ5QUgyRjZQNVREamNsV2lOTjFCb2tyMG1MSE40aHdvcVkzbG5Kek9hNGxDcVArNnVudWQ4VUIzbk5hOW52RTZwYjZReWdMU3RMZ2dhRk1JWEkwcmdGdFpkbzdRZnQvTVF0Rm9ud2QyKy91ZEFwaThuQ0pubDdsMEVYTHkwWlBUOGl2Mm4yN1hnc1JJQTE4WTFSUFFKU2FtN2hadnByemNudHdkekRsNDB2RDNDazBQeDY1QlFUYTZUUElOaUljVGMyenpwTGVCWStXWTJmYTZmb3BIVGw4YUF5UUM1VWhEMWptTk04TW85R1JQVzZSM3hibDJiZWRiWjZIUnVhc3VwU0tnRVM1NGdvdmY3Y0FrSlBqbVA2YWxpKzhDS0hJY1BoWCt3QkU3YXRpejdRSDFxRUxrU2VueFpoR0JpUTZHWXE1WllVbU0ra2kyOENGaG4wV2xPa2swdWRkdnFiZlZDZWowYk44T1duWnJiYS90bndhZEJKMVhFM0FVM3FVRTZXSzVTQ0doRDFDSUVMckdLclRjYU5sWUI0NjFjZUE1Wk84Rzl3dFlIOU5ub0pDejFlckdWWVNVYWJ2MUh5RFBxd2NhZ1RHMmRneStOV1VtY0czYllkNFVWSUlRQlNhc2pudncyblNteUhxUGY0TEdwUjRpQ0tZRnVIdEk5Yk1aUW82VDFReW5yakRHZHRlNFhabHNmSmNDNThKelJtUnplYm4wQjVrZmV1WVErQmY1dHdDc1pNNjhVNzJWOG1GMzJ4WG1uSi8zTzRHcGZmckZWWlJZSUhtb1M3Q0U5VXFoR09lUXByQ3B6WHVXNmZ1OW83aFlzblpRb0JsUFJVbVp5NzlsKzN5Qi9ZT1ZmZkJ1MnVsbTM4cjVmeGo0NW96UGhXZVJneGZJZW05VUcycEVnUU5BSS85RWNxdDNxc0R6TytvcTR6MGxENkF2UVlBN1JZN1Q5V2UrQXhFZllrQnk2MnkxTW1iMzdlMFlWNTRlRk1lM3hLQm9UOG5SQjhXdHJQbDZpTVhxUE5EZkkrTUt1V01CTXNGdG5JSnQ5clBoRWtiUEowYXBBQUpkb3h0akh5NnF4c1pSSC8vYnJCTGlYYkpDbTJTelVZeitGNERta1NNcE1icEdpbTVLd1VRbE83QzROeE9GS3ZQOXJqK1FSRFpPNGl1T1A3ZFBNY1M3cndaY2tEWWlJTHN0aHRuRE1pRkErZ1dHRnBJM0wwWmpOZjFEVWd1OGZlQWFZMTVCcmo4NE10Wmk1d2RJalNsNHZPcDRXZmgzVXZSVm8xNXk5UWsrQkRhRW5qWDQ4SlFwMTZaRVcvR2RpZGtQMXMxbzFaWmp4OHZWNElSNVZocnhMU3dQOEs4a1IzNHNYcUtqZzR4NENxajUrbW9kYnJQMCtrNlpNRDVUMDArZVV1Q2luSFF1Yjd6TW9FWmtIUUxQd2R6blJWUVBuZ1ZoaE5KSnFScVJSRmhLWkNzclJqWVRsMGJJZm83U0JjOHJDVGhSM3NqWnNDQzJPNC9abTJKcXlCWjRoV21ucDJrSTVvdllYYXY5ekZVbWxOMnBwbHVHR3RNWE14NDFhMkhKcThxeVZtdDZxZm8zcVlTcG0wN0xSNk5GNXF4bSt1VHZmUzNZVndnb2M3eXdVQ3l6SW1zNTlaYlpNUE9idXUrNGpKcldQY2dXNHoyeVdlMlB5UHByZkJhR0lPaVlyUWRyZDBUT2piRCttOHM5TWJnNm9NdjEwTEs1SGFUTFRMbDVUR3BpekpNa3FnWm82VUJxRlhDSGJ0Q29mVTM1VkIrcGZqeEErNzhIRURYeHFPTnBWUGlOOHZBTmUxTldtY2JwNUpVZkt3VkpyeG9DTjlxS2toWjFTb0VkdTBPeHRjQUtPUUVpU0dmRFFlNnFQeFNYZ1JDVTZuU3hzL29hLzF4SHI4Sml5ZnlkUzRJTTlKa0tOODM1dk1QZGZyaUtIRDRoNHBuanVBMDFsQk11Mms0eVpxd1QvemVKTnlndWpwMlpMRjN4TVUvaVh5UjJmVzg3K3ArNi9wZjRtRU8rMVhuZlhDR2hyeUFmUTNYeEJEd2NoQTJZQ0lNVDRQM0ZoaGZJdW54RFJKUDl6ZDR1ZVpDbjh5YzdqVjdONi9nVUZwRjRsTHZkQXJtS3ZIK2RyL09DRE8vbEdmTGVtQ1dnTmxMOStieGxXMVBNTGJKMTBEclpJM21ocW4wZkFyekZqNmNTei92aDI5ZWh5WDFNczEzRk5OcENzODVlODNHaHArTWRpdmF4UUtQMHpmeGt6SWNmaUJ5azJSUXhSRGw1VGFWcUhRQXVRaTZ6MmFDbkczV25YN1JIWnRvc2FiRXhYaWtJd01qY0dHWGlORXFFRjFwWGxJZFRhQXgzdFlkMjArR0Q3U2JoQUEvQkpOUTlGdXFCdW1nOEo2Y1psRzBLUGtBMzlEaDNxcjVESHdGaHlkbVg5cEUzVWlTWERnN3hoZWFXZXpyQkYwOWFzOWREbGQvdDdEZkVFSWtsVjVpVytyWFJ0QXNCSmJySFpsUDVuSTdFd1B2aG1QT1RYRW5uWElwb1ViZEVoYTR4dmJRMWZWenQrOFZkRDd5SWptVmI3VmpOL2dtdEdTeUF2ejcyeXZHSDRyT1RobHBldjZkbzZjQVRMejNYVWRLWGVsRjg2ZW5GcEhMZUlmZ1FqdUxuSlE3ZGFaeHZiZFArRTkwUmIrRTI2aENyUE11MlFHOTZuT21NMEtzdXBWZ3NFZFZnMlFoYkZxZ1R1TUp3TGxCd3JBcG5VYmVLNmR1K3ZNZzVpbkNGNHpWa0dWTml3QjJKbXdHdnJQWThZTVU1U3Q5alVnR0hwUkplZmMxUFRYQjh1c3dtOU53bC9pTG1JVFJ4VFpFd2ppZnphYnFSNkR2Unk3eVZSU2tkbTB2OUxrUFpKelpSV0hEcVU4eXBqMU1pM1dybVVpeG42ejREYVFLMHJVMkw4M1NLYi83aXE1aG0rZ0Y3WXZTQjhaN3dCbXZ3VEEwK1pVYzZsckJIUE5jSkorNE5renRvcmtvVUg1OHB1UTJSUTgvNldYS2VnRUltdHZzS3ZVYkdWTFJjeDVmVTNqUXJoUUs3N0s1R0F6Z056MUFHeHI3czRyWldscjlWNkJYbkw1MU52MTFaeEg1S2RIZlgyU1RpWXFaWm1FK09SYzkyTld2TVVWVWovVU9KY1h6b0ZQSXRCdnAyZGxMUDd4VHBkMnRHWm1iSUtPTEV3bU1nRjFTZmZBV2Zacnk3a2xmbjFqMTRDcGtRRjhTQ2x5ZForV2NsaE9wN2R6K0FRbmkwNWVvVU90ZmJOVGZxYUtqekU1Q2V5TnN1eWFkbGc1bDZHcHQzWDVpNUpDQjZWbjhWb3JOaCtoQU1KS1dsUE1YYmQxVDVnWFE5bXFha1VlaUQrbGExUUxRaHlXV0paMVhUb2ZNTnRjRDQ0UHYxaFZkZEljaktCb044ZThleGRBc3A3ZE9kUlQ4NU40dlVubENmY0cyaml4TTR3TUU0dS9keHFaRWlyWWxKNFkyWlcyQ3pSV2VjazMzWDZPNDQ2eW4yTnhwVzNRbnc5NG95QTZ0TGhuWWk3OHNEVFpPRDJTanVxVnRpY05LVnRKWGQ5b0lmRkJBcEhWUE5Kd2swZ3Q4aXFrTGlNcytIcE9TdzlsWmVNZzQ2YkZrdWZRbFB1R3hGejNFejVWTkZsN3pJWkZ3ckZtd2h0NkxaQUl1QkZqaTc3dDRXbFNrQ0xDSDRzN3Q0RkZrb3d1cTk5SXVzSWM4TkpSUy9oRGx5ZFJ2czM3NjNBR0VXNEFKZDFwZzR6S2xDdnJ6RU13TTJoUW5wUzlvVGc5VllldTVFUHQ3QTVhVk1EK3dvTERYR0hFVWZTN2hoZ3JXMDV1YTZlRFZBeEJva1VOWDhQR0RCby9UVVBwWG9nM2FiNjhNS0MwQUhLd01DOEVsNm1ENW5RT2F1ODBpbjFHMVhnNWpqVmhFcWRDeHM4T2wwSnEwYkZoNE5IZ1RiWTBzc3ZpZTJHMnFQLzhvNTlJWGR1QlQxMVROYlhpdE0wRkZNN1dUTzFpUTRUa1VaMml3M0FrV0lieW1BZFhQUm5CT1pwci9heVN6U0JlN2lVa2dpNU5pODRlS0EyaHp4WXRYUVRUZFU4WWpGZnRiRmdCaXNVcEJuOEFHRThqM0hxM2t0V2hJYktzeFNHaEZsQ1g4ZlA1a3lBd0ljd3lzQWhGbytwSU92d05TYjhXaVNTeWRzWGdaVEUvZ215VVg0Vzg2eXU3N0hFcXJHWmMxYUdveDFGVndiNXlybEgwSG5GM0RLVkJMS09BdklYR3pGWnQ5VTNYMWR6S1VzYUU0UjlrUjR3eGdoeGNiT0c5NDVxalNKVXZSNXVtc1VHTmVCK3JUNFc4V2laNGUxeEl5MzVma0VBRWZtQnNla3NEdTBENG1yaVJ0WUVpVmgrczVveDB2aW1nSm5WQ0hlZ1ZUdEcrMWJBUE5tbnd0Q2pPVU9tMzg4MmM1M204dU5Ma29RWXVvY3dNanJLRkx6amp3bnEzeVpZdjlvMFlTTzdWTU10Slh2OVFDOFFUc3N1VHUvMm1MbWVUMzYvVXJmSVMyVURIRnBQN0dwVUhtZHBWZ2N6QjIzUld1MTZjS0ZJUG1DMyt2K3BsVjAySmJvZmRENStOc3dvZW1OTTNzU3E3c1pOZlVSQWlJZzRvb3lLajYrSHVmd0tVZzRXUXF3MG1vL2lDd09udWFKM0RyZUZtdnVPalBqZnVUY0dyRjZKNDZ3M1VpWGVlVFhMV1BPYTJYaloxTCtPdzNXMXBhOXdHUGovZE52WWJtaG5kbkJ5ZXhXS2lRbDZuRFMvQUkyaFpmOURMSnhIRU5wMmEwZmVZejJRVkFlS1NDK1gzd3VRa0UxMUh0OXhoWGpNMUI5aERjRHd2SUNGT1pJMCs0SGppTUhRUXoySm9GRVhCR1NvRzhqelZyQlRkdGdQaVkybTRjd3RkY3p5VW14d09QM29saHFEdzRwSjFKdmRVMEdCM0JRWnVrU0VBWHAyZlQ0djdPbUt0OUFHZ0V0SFFVT1VWSHlpT1JEZ0pvRTd0KytLd2VodHoxNXE1SWxqdkdtbkVDVzlkampXMEpxbjFLVFhHc0FQMFN2eFg0ekthTVRtY1dPYmR6T0JtTUY5VGFNcGJUOUdMV2l3SHNJU2c0eEVXUlFtUXlKWXlGTGZveEFUSFRUQUNvRVgyRGRGeHI0NGZDc2JtRG1idTI4YWhkd1BZcHVUWkdBRGoyd25iYTI5QUI0aXRibCtHNTdwdWIxc1F6cW5ucVJDK2NRb1lmOGZwY3NONDdyeENWYmhEV0dGd2FmS1RydkVqRGF4RUNWYXVHenY0SWlzT3lqR3d6N3ErNTBtbmJLMHhXY1Y2UHE0TjNaSGF1Z0NYTmpUcDZBSjI2WmdjaHdrL2R6SWdLbkZIb1B1QStQemhIT2FwQ3JzV2dKL2pSOUpYVS9NeWczcndwNG15bHpjOTJqaFRnWVM0RmZHVmFXcDQ4VHdwZVhFNzgzbEZ3RHRXdVJ6YTMrOC9TeFVZWHNGRGRTb2FwTmp2M1J1Sk42WnJ5RFF5d3ltbDR0anc4UXZPVStVK000cHY4MWRhOTFESHZLZDIxa1c2UmZCOEF5SmxsdHlqWG0xTXhDRUsxWjJwMzAyVVN4aUkwQUg1NGp5OUFFSkM0aXMzcHJWZ25vMzZtK3E1dUpFRjhub0o0cTBFdVM5MGZ5L0p6aWp6THk0U1RsT0RpYjd2UnRXSkRTMUUzNU5BRFpuUkR2RmdjZWdaY2lCTG53M1pmMWZyN3AyUC9IWnpyM1o1VHJWOXNHTHU5VmRPd1prdzc2anlOeGwzZVpQSk9neittN0M2aTNaQ3ViVU84N1JhN2R1Z2w4N1R0TE5LZFdnQm9IY1BSRjFqOGRjU2ltbm85dVFsd1ZDNS9vN2VhbzVzZnhibEtUMjdOSUxUS1UxeDVQM1dLeFUwRjJ3WlI1YW95UU5oRUk0T1NMTGQ0U0RxeXoxeWtYZng1bXYxMSsyVmF2Mk0xenZXTW1rdVdTU21mU2hPNXppbjVTOVMxRmN0eDdOMEZoSkdiczdVa1FKaURKa1dMNWxmcGFzQ05aMGtiSjRGY0RxT1JmQkcyYWR5THdyVnp3L0VneFFIT1hxTFBSSnBTMnorSkk3OS9ZVzBOZHRybmFvSDFFNjd5MnZhZGJsY2tjUmsrYTFCSU4xeG5qeUNUNEs5VC9xUUU3U1VvRFFSNnhqT0hFMWpVQUtFK2Y0SGlzSEwyTiswSUJGYlNsYWszKzlBQ21NY2JneDdsaS9ENk50UDh0K1Z5QmNWMkh5U0xTN01CT3piS3BwZjRqOVY0QlRFM1FBUmhSeEVCVkMyTy9SWGs4ZWttUzBkUHRTS3dtc0ZLdjhMVWJLaUx6cDRtU0YzWURFNHNtQUsxK0U4c2hrS2tqanJhTU1FaXJLUXFERVF3V2JVMDJGSW5TTEI0eW02M01VUW03Z1d0bFIzeHYxOTBkeTMvYW41MXVwZGp0eXJkWXppclhjK1NadG1Nbmhaa21PQnFwQ1lSbmZzcSsvVlpWU3I5ZTVQQitqZ3lkUzU5NTdEbXQyWDZLaG8zMklLa0tPb0o3UTVrWS9ZTHVyYms1LzNNc0Y2Wm1lNGhLRit6YVNHeE1nUkJoNFFEZEFVMlg5V1Z4eUVORXVyK2RWcWErdTFxdGQ0UFFXdVk1MGhleXRNbHZBUzJHOUpQdGo5cFBMQTZHSllscTMyOG8wMWtlaFJXWU1RbVdPV0svcGpoZmJRaVdrMno3d1RsazR4bjNPVjFCZm0xbE81c1VSZFlyaThzNWNOOGVnZ2VENG55eUJ1czM3cU9JcVRJbWZqTUI3VWcrQjc5V1JDSVdPMk9kaDVoYXM5K0pDcVR3ZmZ1c20xbnlhT1lhbkp2WVhTY3NsbHdSNHFId0E3ZXB1YWF3NHRISHhXSkFXa0lIQm9mdjk5UjFCRGNSb3gvRi92anBrQ1hmOGdHTm9paDJ6dklsUDh0TzJNdGxsYUZDT1FNaXpKUENsN0pmZG9mSVpxM1hmZG5pSHBTRjlHaC9CeDJteVRjUmpuZU4ydldub1VFZU03c2IzQTUwaGVCTWxXNStXQ1B0VUd1aVJjR3hBc0NXMHk3eEY4eWVCeWNKZ205c3NCeWxuV1ZLZlVjN2dVOExTb1dXaTFqd0tVdGhjL2JLSVlsUlc2U21PZ1hyWjVNM3dFZERjY3dNS3pDZkxTcnY0MkJGcTc0Z1p5N2J6aStZajEzaEV0QWJoQlFJUDNwc0NBV2F0ckhLTXpXTzJ3NWt0cEViUjZYSzZsNEdpUjRNYzk1NnBpUUViTmY0ZlNsc045dzlFQXBGSGFQd3V5eHNMUUhrd05BdkMycnNkVGVZV0h1NEQrYkk3ZHhRY2VjcC9iQVpsMHhQd1VsYVVjUU5OaFZOMXhOMkZmeWZWdUFNTjRBSVMzTXZ5b3o2dmc2MVYvYnF1alVlVlVhbTZBNko4dTZGU2FXMUY2YVFvNWdlZlZwZTNRbzUyM1NDbG1ObVViQms5QWlObmtUdm8rWXczMDh2WmlXN2t5ZDdDcFErQ1U5RnBhQ3BzOW9XMG1abGdXTUFrN3VSS3ZQNlo1NFFZeEs5YmkrUno0SCtrZkZvOC9Dc2M3TGdkSWNSUjdiSUZ3U2xueUZFazE2MEdoNC9nZVdtcEt5RXVKbjVNNCtkVzJ2ZUdhZFBIWUxKZWhOdmF1R0I0Z1RLWmRPUWFERU95WjVjOVRjTTAzT1UvOVAxdVV5SnBrVWpMaDNpMGxabE1aemRVVlNaQjFQOVkyUUl4UU1yNGowMHRjdEJxMHliWSswSEg1YmtQSTRQYS9BcXZDa1hkY1RtSTg3VkhFTW1xRWoxQXhhNytiSVRRbnZQVnNSVWE3VkgvZnhDcUZ6RlNDVFVKVUZmb1dqOVYyajdxTzN4YUl5N2Y4OGQ3QTRPSlJBTEU5ZWcwYy8vTTdBNVgvNStwNEZZU0NFRFhtV25oWVZzZjVhRWFPcHBrNnhUZXR2WmM3aElQTlN0R05HbXdHSjRVNUluVjBWcTRzK3VoeDJYTlBPaHk0ZXJQRXBqNWYvUmJpMS9ISnpsREJDaW9aLzZNays2dUNFaUxoQkd5QjFpbWoyYm5oVGRrQUZ5K3FDRnlDTmpJcXBOa3RFeUQrVXkyZENveG1za0Z2dGozZmVpNmpLamNqa0JleVBGWUlmM0dFMitQOG9PempyVGwvbkcxaXcvMmZneDhEVVpEcllHbWpmZTlwaXZ1TWxGWmhYdlZJOHBxc1UxU0hiUWhJeEd0WlJubG5YOE0zUEhSSnVQZUJkWFV2MFo2eGwxOHBhbzM5R3h2OWhwZU90bWZ6OE9VVWZsWDRyOVprVG1sYVhQMnlVUHJ0dTdiY3d4SVIxNnNieUVVSm80eXlNZncwYnJsWXpoTkRLNiszNXY0V2cwa0dEdGRkL2tzOWVZRmlXcEpXeXByR1ltYnp6ZHlUbVkyMEtXWEU0WVMwUWUwZ0Y0NG1pYVNOeWNDZWhZdGFjbzkzR1FvTEJjMGl6SitqV0tIU1hEZXR0SWVFWXljd05WVEJhaE14NjE1MWRvRm9id1FndmlneG5CdmpkZXZTV2NHR2k3ajVPWW12NFFVRURSRG5jbDlMM2lIb0hPbzc2RU5WYmRxaW1BcXZRWHpvcHdHUnc1TGZ0MDlOT3dFYmFSMUZRbytnNllwWnJ3djF1RElKc0M2VjZGZTZhWnZ6ME1jZGhZQ0Q4c3h5US94b3JjNnljbUYrVHBvQVFVa0lwaXpOR1Y0eWl6QXZNdktiTFlBeVpDMmt0M29SQkVkdzYrSDIwalpiK01iU1lsMUtaK0o1M2FWU3lqUE1CNkZCTUNwRUNnTlFXb3dWSkVaZ1k3LzkvNUpzQ3JXS3VMZnlxWU0rOXhZa2poL1NyRCsrUWh2azFOejIzZGNiNmFVLzd4cTZxYWNyRjZwQmsvYk5vSXRqYlJud1RWdGFkaHhRc3YzdWJPQmtnZTFweTM4VzNvMGRZaTlJNDFxMnppazJTbkliTlA3alJZSklMUVZTdVMwMXdPSUVzM0Jralo1VExHeFZwR3Raa0Q5UGFMZDdiajlrbFNXVlByQ01DSDRQR1RtR210N3kxS0oyV2RxQkdhdmVRRVhFNjZ2T0N0QXlXZVZtRkUzcU9DdzdITnhhNDg0VERhZDJ1Vzd2eWVsWWc4cDVjMmRTVzdzMHBpYVVVMThGalA2Q2NsUHdWM28rSEcva3htMUJJbUU2T2loQVdVVFZHRXBGVzZuL1FiSDRBN1J4Qlk0RGxKN1MraHBMakpnQjV2NkVvMzlnMFhWenJzcU9Oc1RhcThEU21kRVg3cHhidzhIVStkdk9mUERvbDdKU3ZkM0hPK3ZpT1B6QjZZM2tBeDBTQXVWOGJOeGFSS1ErNHBESjdubzhOS0I5VCtINmk5UWpPUEZtY081ZmZGS2hRUXR4SDIyekxXTHFWa01mbXZLL2RzblNOc3RqMnltbXplZ1NvWWpWdWJZSW9SSHFidmxHelNac0VIRnFkbm1HYkwvQy92dEduM3E0TzNYOVhEL25FWXBjeUEyNHNocTFrQzRzWDh5ZW55dEE0aWlmRHRwN2Y0a0Vzem8xay9KTDNDS3BnQWhwSGVNVVNibmU0YnlkTHhBZGx6UTZ1bmRLYmtTSjEwR3BEdHdXV1NvQndWOEVUdERSaS93a3BGSzRyMW5pNHFXREEyUkE5UlVUbDhqbkFrTnZqTy9WaTYwd2NxcTUyRkUxdlFtWFVOd2VpMVpITWZNdUw4TjFacGZDY09wQ0d5M3M1b20vSGVsMmo5bGlyV0tHRmg2bEZXdVBCeVNzS1lEdHZVeENkOGE1QVk2T0NRaFB1cTNDV2k3SmR3dDBvdC9WWFR5WE54QnEwS092ZG12dm5SWWVzS2w1a2hYQ3RlUDlBRkxaNndKT0tydjVsKzJ3SUpPcVBGY2hFekFVUlcyNUg4a1dmU3RKanpFV09XTlJDVGUwRXpNMHBxSUZkbW15UmpRSHR4YUVvQzZtb2twQ0t6Q3pQRDlBazRkbVZNQmt0TS9hUENrcmJpNDJJVjZHUVRSWWtIOUNxblFKbWtSVkJnNEF6NWdCR0JEOUIwNGJKSmtjL3JsRDdMVTVjbXpsVXpnTDh0Uk5vZUlPZ1k0T2NZTEp0TUlzZ3E3b0pDR1JRT0hSOTk5RWVLYldXZVJ4cXcwNGdLS0laNU40Nmt4NFlUc2xaZnVsdXN6TGZURkVoM2pEZS9xeHhPazdvcjJTYTlqVEV1aEpZZ1IyVkdOWmNnMjR2RjhyRFVxZEgyWGZyWGdrbENoVG1VekdBQVdRU1BOZjJHUE1SQ3dNMUZGeDJQRHFHT1A5K0NISkQ5dEIxM0NUTXlRNU5CYUlybXVVREFaRVo4RER2ZDhGbyttTUlObFZDeFViMXRKRVRrcGl5R25hTmpwZ2FjREZ2RjZVSjhjaXljT3BrSnZoRVA2b1dRUU1qYmVab3daa25jenBrL3hCOW9kTXdsdVdRNEdxSjN1NEdPeUJvMnA4M0xrYTBQMFliOXVHUFEwQlU3RVlGRzNoRFlQVThEc2xydkI3SUt6VERmN3ZtSUpJbWYwdWtIRURGeVovSXZUVmkrZXIxWnFCUXZxSDh1ZnEzTUNnaVQ1dWVsaTdzeDRqdVBtZzFiNHJITlQ1dk9td1BlL0pTbXRkZVNEWm5kK0ttT3BNSWxNTHl0OFlTemQ0UW1nQTJNZTVYRVJWeTVBNFRsazVZcFpLeHp0OTRxRDFRTGRMakNzL1B4RU5ZUWtPSFFCNVkvanVSc05rR25rQ0pUTDRtYmM1Nk5VUE42ZUhrR003STc3eW9GMndKSnR0UTNmdXZZdmliUHVDbGJuQnBJUGVYNmJHQldSd1JWWHdvWTFwMXU1TEk5cE1kSDNsZUZMeEFzZzlVTWNkdEJjVm15ZTlNT014Q2c5Wk5aRGFaTTQ2dVZFK2d3VU9WZXhuRm9VcG9Ya01JNklJaXpWTUZ0RmRJaDY5Q090MlZ4SnpBejZHcFZvYkowWVFSbkZVTlpOcHRtdnZoVXVuNFVrV0VYWkxzSjdFZFV3WVdGMHpHL3dQWkkzSHppaXhqODZkbTBnV2I2ZGdwaWpLaFozT0xTY0lSNmRvYS9Pbm03b0NQUHlpejE5UzFLNkthSlNGNjBLbTlTcm9aelJkNmh5ZzN3M0xlZUp2V1VBS0Jmd1IxZnZIUlVyZW1laU42b3lSbVo2WGxPZSt0YVQ5cS9JSlNhQnZhRGFMaS91RWFXaUxWNHJGTzJlMi9TSlJpTlM0SWx1ZFdZTVBsd0lpVytWZ082R1Y4TXFacjZKZC9NdHYzdnpYa1VSWFZVakRFdkhoa1JMSGIyYlJFWWU2SWJveWVXcVJ2Ui9mMitsa2k0ZExRR1pWTVhobEc4c3grNTN6N2t6U1ZaUmxtditIalMrNEswZ3JWcnBKOENGTkNGWnVlYVV6RnJoSElKWUZxMVpLeFQwekwxZjAyMmZxTW80azlweEk2ZFk5U1BlcUhYZnd4SEZRL1lKaTYySE9Rd1hlVmE0ejdUUVdFeHVIREhtYlErNEdid2kzaUZwVUpweEVYUmdqSkhwM3J3UmliWDhtaEY3QVFMVmJCZ2ZaVFNkY3FxMlJDSUpZWFZnTEJxRFI1bnJkajliMmt3WlRSaDdtRHdKZklOT1JPTGo1bFpJQVFxajRNdVlQanJJRTRxazdVQmNBbkNXWHRuTEI4bnVaZTNDenpwMG1HYThxOHBuMXhGOHdHcXJNYmxwb3lnM21NMGdRZFo0TlM3d0cyMVNMU3NoK0hGNHpTS3dXTjNHVFZHR0ZEUVZBdVZ1OFpMVmgzZnNNcnBNcy9aMXR6T3VPMUphNm1XNWxpNGxBSjFFT0hqNzZYa1dzSWFvTHFuQk16V093R05tMzdaVHZZRjQzeVYrNm5MOHdtMjNGclNNNjhsQWFSS1RDa1VnUDd4RmVQb3NGYy95dnZ6Nldra2JUU3EycXZ0WCt0MmJ2dGhnQ0JwR0J1NndmUWZCc0Q2QXA1MDRnTDRPcnJLNGM5RDRML09sanQrV2trZ1UrWFdldHZsbmt5eFBnL21UVkZtck1CbUtmUERKTGZuMXRBaG1RMzYzNGNocUNtajJWUDZ3cmdWaWVpRnVUNGhHS2Q4MldKTHFJVk9zMjdLNFJsWk5URnNvdFZseEVrQVhNbnpzcE1LZloraFgvSnBoZy9icE4xemsrNFMzQWVXUkJoanVMR1gydzA2OGdJdDMveVorRmQxYlJaM2M1VjVlS29PdlpZNFlXaGRRaEhoNXhydDk5VWJiM2ZRWm5MUkpuVCtSSGNGSW1mZTA5VlVCSDBQT21BelFYK1NFUzUrVWxxM1BGVVI2WlVJUkM2MFp6enByQlRZQmZNVVNzQWtDK2hPNWhxVllZQ0VMeWpnZUhDbWRIWXh1azhHbmIxT0dGSHBFMWtuVWVWNjlUOUExd1RnZ3h0OWVWOWZVcER5WmlQaVJNcjNERXAxZFhjVDJsVlJRWlFUMEJMUVJPUUkvVnNOaXZqcUlDdytKM21aaW5MYUlieXNvcUpCM1RZTE9FbHlrNWN3emJLQnZqYU1aTUdBYnIvTUdEeEg5N1NjNTZTbnZtUDlHZ1BVRjdMQTVZWXc1SUVVT1I1SmM5ZTdMTURsMjRTcGNwUURXcjhDdGRTbS9KRFJLNk5OcmhVV0FxRzFMQkF0SXlnOVdxRWZOTW55RG9aOWpWR05ZWjFmK3VBMVV2WDA5MU8xMW1ha256YitvNDR1cCtER2JiVFhoczlqczlzT2JwNEc5bE9rWHZ2bEZBS1lzNTF4MTFFbHhVVVNZS2ovek42eXZMY2JXS3JpTW9LMUs1eUVYTVJqN3hJQXYwY1B0eGJSL2RJVnRnRWhEcDY0K1VER2pseWZlYzFpTzhVNUhyaTQyNU5kc2RaaXZkRjhzdDJBMVRJMDFJQ201ZmtFZW1oZmRZemR0QTNqclIreGt0ZGFxbTZ5a2FsVU5oMVQ4U3ZUVURDRWFOUk1uV3FzK3licXlsYVVEcWxrSFJnOFVyNmsyRlJSV05LZWcvVmpyR3dLbzVKQnBNb0Y4cmF4aFU3U1hSSHFaTVRyTFdVR2RoNGdQaVZtQ2xxdGhhaUxKb05tbTdnM25wOThhZm0vTFpMNFFkL3JxL0orbkt3OFM5d20zREN0cERxd2szVlRWajVHdEs0MU5QWFRWVTJ2UHNhelVQdUVlU1M5UkVRbWh5Ny93MEI3d1lwRGNmZkt1QnFIc1I0dlhncUE1RUxTM2drTEIyNnBPY3hweHpEQkZONTVDZHp1WUwrS2tCQUY4NjQ4M0kvaWQ1RWJUYjdWUzlkaHVTRi9MOUY0Nm5GVVNzUlgrcnZMMnBqZXFXc1JrODhuZVVpSmlzL015MloxYnZmRkliOWVUeWVONEU0L1FUNnp5c2xVWUpPYmU0U2lRaWV1ZHpFNVlGa2EvWkJmMysyUnlpQXlYN3UwUVJDdytYNSt5OFZlWGxuZ2lnSUN6ZEE4L3d0KzBTK0kvaUVVTG9wNXlPeitJNnlPQzdjUEVoR0NSZ0s2RHhQbEUrYkl4aEFJcGVCV3RMRTFLZElHaEQ1ckxRQ3diQ0x4UVYrbFozc0hSVkpQcmF5SURQRGVXZzgzUURmaE5uMmgxMkpCL0dWS1NpY2xCd0dqa1J2S2ZvYXRraVZyQzFMN2xEdFZ5WjJFYnhsdGlmTytXV0E1SCt0T3RQeHQ0dll1ajZUVEtZL05pZ3QvTk5kaG9nbmtOcm84SGxaYjJtRmF4MllSNmYyNUxES2svY3pQdldTaXN3em1jV0hjU3A2enJsN0pXTzNwUVE4VEVhUUN0bUpVTWNiN3hjMmU3dVgrNlFUUmVOaUo0a21ISzgxNDdMMUFFNktraUk0aHBaNWVZclJoWjJxeGxqUXIzWW1nNFEvODhOdUEyNVpqM0h5MXFBeWxaSDgzVzcyMUZPbnhUZXhmTWcvdUN0VXozZ0c3ak1Fc0xCZ3N2MG1yK0hCSXVqSVpPalhpaTRkN1BKcDJhYUdsSm10eU1GQlg2dGpoWHA0SEFjWXArUUFrM0o2MEQreTFBNk9ZUXFkMElibTdlL3FZNG5pYUZmeUdrSjNyMmJ5WjRwRzRDK0ZLS3lKTmVhREJ4clJsSlBUSlFhQm1HcGt6MXJUbXQ0cmNvSCtHckoycG14Z1JrKytvOWxvQ2hFTVdTaHc5MXNvNmNRRmw2RHJZbUNjUFVNZml3Um9IblhpaUNmWDduSEZML29vL2FkSFgrNnp4dHBhMFQ5UVVpYktEeUdPRmlyaEFtc0ZDWnNNbXY5blhrRlZlOU0xVFk2NmMybE1CWW9EUFVTaGIxcTU4Q0ZVZ3FDZW10VDJFbmdBS3Q5MHVqUDlYQms4T3ZPbSttYndQSWNyTXVxWEhpUGxKNmNoRWFCTXFUaEJnN3ArS21pQzE0dFVzNUIybmlwVzMxTE1JbTVkTFN0ZVQwdW1RSHczNytuSmxRWnFvSWJUTnZpNVpoSk9HSjVOU3Y4YXBjeVBjTDlML3I0TU5DeFlHQnArUlNOalpnR0pkWWR2OTFNY1VIUTFLRUdBNFdmTEtKN2l4MUhObXJ6VkhINkEvMFFXcTQwSGZjYm5BZm1NWVIrcGxuZ2Vnb0wrOXNkdk54VnRzMEZjditaRkViWmdDM1VXdWV1blVPb2d6NHBPQURjeXZIN3dPK0hrQzErVTRVK2gyekd3T3N6QXl6OXFKb2wxZUx5UEVRVFFFdUo0alIxUWltWEV0ek12Y3RKUzB2ZWtMU0xtTFBpcDJkZTRiOHZrQUhlYUFjaFFSbVVia24rRTFjdGI0cm13cVlkZ3p1RDZHRVZocXY4eExBNXB6UTIzQVJSMlZoUzEvdFBzQ3VXdnVCQ1BWMVJrdngyR0FkN0ZuT3hLcW9VaXBJRC9CcjJtVmdqQStTU1FISjFVQyt5UVFwQzdrRkpoeDFwbW51YU9UN3JBU1NVdGE4MDZFOEl2a3ZjWlMzemFRMDRqRG5nWEg2S1M1MmtObFo3OW9PNElKVEdUbkE5aVZjODQ2VVJtYXN5SytNcWVYVGowZHFsaHhyQTRyREZjTHVtM05HZUZsNTN2am9ZOGxzb0Z6ZC82aTl2S1ZDU3hJSS9QTmhqYWU1NXBHMW15RlNqVXF0enhSMEdIbVBlRGZuRFFON25ERlpUQStPeks1V2dkakd4akVCWjAvTktlTG1CNW1WNklFOU9neGprWSswODRKZVRTYVU0Wkh1akZRRTdNWFI5L1IvY0dIMHozajBNMTVHQWw0YWNSMHpuZmd6VEFtOGNlL3N0eUd3b0dXOGpob1lYMzVndEYybEpjdk44b2Z0eHlsK2pXV2JlSHNxRjBrL1JNU3RhNEl5aWp3MWJFZk0xNVNtQ2ZPTGxsN1pLTVNhTExtTWVXSGpjZzlkcDRPVVd3bDVmclB3ek43OW52TEVsTXgveitYTWRtWVVyeUhRWU94WFBpZTJ0VU9CSjN1SWtFMlNaOCt1R2Y1YXd6c1hjSWdXaHkxWTN5cFlVWUV3OExPcXB0T2ltcE1mb3REeHBYMHNhWFMyVjBFVWc5WEl3RGJ5VnQ1ejZsdDR6MzE5ZHRIbTJybjRrWEhjQXhqZUFaMHE2aEpDbm5nNkIya21KdE5LNlRSampuYnNCK2x6cy9iV0dxV1F4a0RJeTBaYm5zSnd2cFVoSUVlbmpVbmxZUURVZncyUmpGRVBYNEtGSXRZaGRCa0ZSc3JIYnBMcGtFb0k3eC9LbktzcjVqQlpQMk9qQjNBbDh3RE1vUU5XV09OR01jRE5wNFNXNWpQUkxoMnNFUlE3cGZzb05xNm0zaW1ZMHVkVVNuWWdIWGlkdWVpRlM3NGdsVytGNkJMV0hOZFZaZUN1OGJvM0RocDhrYXVwOXJZV1d2WkNyTEV6aUlydmgzOXE4VTFhQjBEUWdNWTBQZlNSUHZsS0I3eFptVzFWTkhpWk5ZWDFxSGFvR0M4ZGtPcGFRQXo1RnkyVVRXQU1Uc20vemxZNlljTEU1eC9WbWI5bGdCMEFleGwxL1hNZm1meXRPL1ZGNjAyc1U2NmEyelNuRUtrK3JObk10ZzhYeVFzaFAreFJKNk8vQWJmNnNZUUVUbWRmODlwRG1ZM0VmdUhUVnBHKzAvMkw4dWhkVzg4bXFIZmovQW9TY1pqa1NRRHQzSnZTMWlIQjBzNGZrNWl0RnIxbDFKQXlEZ1Q1ZHNxQ0x6MFh6MDhBRitSTno4aTJhNVQyZzQ4cWdna3I2bkt3bDhhREZOeEhiQndMRW9RZDgxcFlSRDlqYmJnMk5KVU8vc2ZqdTR1Tk9pc0JJTWdLTHpXeDNHejVDY3JHNjZuN0FLWXErKzF5WmhHQkc0V1d6NER2dHdYaU95QVFkKys0VVgzRS8zVEEyazkweVpsdG1ZdFV6ZjZ4YmRoWGtEeTRZR3VZV0Y1VjV5VlkzNWhmMUlhcmt4OTYvdGZqN0RETytlYlVZYzIyUzFNYjNBWTNDTFdSeURyaUdjQXpIWllPaWxFVkszQit2VXBicnVqUEJCWmhBS1JXWXhTdWFFRklpeG1HVnZ0WE42WWtnRkNCRVRMUnVlL2s0SDk1OEN4aU9NZnd4UTBlV2FIQUx4bUNUa1BwcUlBNzJDK2RZM0gwVkZGVW9FaW02M2c1blJ1bldGdDREMGNka054VWZubzdmbDNlQW5SY0hIQk5NVm52UWFibUFkYldxemptaUlBY2YxRzR2d2RGTUtHUXNQOVhVUFVrbUJBTGxZSmc5SC9IMlNGdVZFMjlDZmVWazA3OG41bXhvMGJkZmFyOG5vRWx2YlA3SzBnSjdGNzNMOUVDQmxCTUZIaG5haUJFd3h6M1lqWUtkODhQYWwzQVRoZVRRVG1aUCtnQmxtNmJGVE5TaHZtY1VwK283SXNmZElWYXYzc1RudjYydmZpWHpqSUJuUkJSanJsZzRsVlVWbTdNdlJDVXFvQmFtUjFtUEVFemdXd2hkVnNhNlFUWDdpek5xL3BUMytkeVpWR21BUEdQbDlJNStwVGZOQUo5eDRicFErNEdDZWpFZERNMTd3WURqQlAwWUxxckpSejltU2x6Y3poQm1wS0xMUE1JenpLQ0tPMFFWQ0JXSUcxRGVpTldhc1RFUTFDYlRVTk1IWUhVZ0Zzc0JFdEh3clVoSjNEaCtqT3V2UTFLV3c0QlJ0ZlY4cmM4SEJMak0zMXRMU3RNYlhNL21TRDNsbmQ3RDhSaFBQbFRQOUtWVXQ2d0piM3VUWkJKckZ0ZFBJd1VRd3hhSlFDUGdqcEpHRXc2RW9sWmY3eW0yRk5NdEZFMnR0UE84RzF0cUdabnpZL0RoZC9GQUNrT1M3N3VUOThlQ0VFMGEvTFN1aTZMd29WdUNtSFlHc3BLTXNEeURwOTZuTnVERU1GbTJXU2hrbEp4dnEweDZVa0VPcTFPZGErRzlJSXJYKzY5VEtaajlkTmxVWHM4OElsS0xCRWlmeTdreU5kRXRxSUpqOHZ1dEJpN0hKNFpNdDdraW1qWHpZeGpMSkd3ay9YVTUvTHd2Tk8wYlNQNmtFSTVXL0JvU2NJSWp2cForZ3k5MTJDUlRVdmJpSTlsc1dpVHoweFAyc05VelV3MjNPc1Y0WEFJVnBQNXRxdnY5Uk1vRWdZUDhKYVNLeDRPa1d3UkpSd3dYbEpTVXRBYWhycmtGelZTTGlPUmh0emMvZEpUVE5pUk8zMjIyLzVKdkFHeS9sbzAwZlBXeVBNOVFyQ2VnbXhwVVRyWFlmWE9LY1FTajM1TzRUajdYaHVQMy9hOHQ3Skg3OXZXK3JyWnJtN01ndGlKQXkyQ2p6cU1XZ3VTalNVVythdDhMRzZPTzBIZ20xL3hmZ0VBOHk0SS9wS0FGSFh0bXlwYkZpVkFIdDlSeW8rZFJ0ZnJjaWc1cUg4OGxzcllBRGJOeW51N3ZwMzQ0dTdITGx6bWROVGdaVkJ5SVhwdFJIS1pmcjVEblhEcFV3NkNOYmpMRXBrc0o5dWs3R2ZtVi9PUmxiRitvUGw2dDdXSjA0ZnZNZHFCUkFqaEdHZmNoeXJZdW9TYUdiTXZacjE1aWFTNGxSdndrekJtcUZ5Sk13REF1WDVzUmZyRWt3MmFNbGlGdUJUYjFhR1lqeHM3aWhHajdZbGgwdngxY2J1ckg0NXBrWFQyaWxDM1JKekovMkhQYTlldWtNQ3dkSjhpckxJbzhlQVRjWXlwVEI5S1dpVGF5VmcveVROcDBia0JOSmhBS3RsWWFSTFlBWGNZbEJoMEFVNHUxMjJua0JSTkUrSU9pTThqR3V0N3doUFpKclF1NmNwYTV0eW5LN3JPVFRJNldzRUJVaHFMOVJ1cHJBbEdhQm1aTmtBRGliUkRhUjZaazR4YzA0b3RNdmYvNnc3cnc2eDRaUDNiVHVSQW1kZm4yN0VlemI3S2Z0SnRlQkNWRi9xcGRHS1BHNGpkYS9CNnJaMlZBZjlPSFR5QXBEb3UzcFM5VWNiZXVkZjFUc1diZFlzaGhsa2pOSWVHekxXK1RxR2hmaEtNSWdmSjNqdDk4VE5UbUFaTDFrZ01tbWx5RWdXUDZ0SFJNOHBXMFd3Q3FMNnErSklFalVZckdJbDFBbVEwL1NjV2NiM0pOVU9nci9JYU9waW5RaHJTMVU3N3pkL3RiWXErYVRsTkZSVFhNNEduQURqbkVLUmhaSEFEZ3FRR3BubTh3NjJjb0o1bENCSmZlQ01mZjJodXh5UGtPN0NRVnZSVmJYWTNoZ0s0QlpxVVV4V0RNMmNYRXdONjhQc1hGSFArNktpb0lieHBudzR0ZWkwMktqb3VpdVVYc2c2T0lNRXlkTzVndlpoSitUV3RhUFpnOXJhUFgvQnBCMEhjVVMxa2E5YUd5MXVSK0Y2Qmc5VkJDS0RUcmJLMFcwenNCWlZkSmVKNUhQYUtzdTI5ZGpkSGtqNkZzTnpsSVM2UUF1Tjk4dTI3UnlEMm1EYkg2dmo0V1VlZ3U0SjJZREkyNWVvK09DNUJ5VHB4dytHeVJvSHFnNnpjTzlsZUNUK2pWeHdnV1lBS3hQSG56OFRUK2FiU1IwaDlETTZWbFJPUllZSWNVSXZuMnRTdkR0c0NNb1Y5a0Z4akl4RmRvdVNHMjVBQ3NLMUxZMElVYldiSlFCWjRUR2lnV2FjUnlEWTk4WHdRSjUxL2tUVDZvRnJzK2RYZ3pXRTRkWjl1NGM4d0pXRm12dFg5NzFnRkNtZGlWQ2ZUUDlYRDREb1ZsR09FTittcXUyV0l0Z1J3emFLUU42Q1ZqelI1RUxPZGhNTkxBaUFKV1NtbTFCTGlUakpqRUNyN0RHaEQ3cFN3Rko4NFlTelZwWnh6ZUxWOXd0bUh3ZDhBUzF2M1Z4bEtIVU1lWm1jQ2s5VWtIMXFQSS94ZS85cW4yd2R3ekZyY0QraWlGRFVHMGhyQkV2bVRYOWxldXhienZ1NHFEb3dCaFcyUG9QZks3L2ZIcUlzSWY4M3Nya1Jqbk1wVWxReHhaZzNXelkyZUFaTWdrRmMrZmZxbXFLVnpES0VGb09rNXNqN240Y3JUOFJaTzJWQnVnTm5DQml6L1JsZndGTTZJcG1lcDk3S1BOalFqSnYveDNpZDhlNkMrL3QvcUwrTzd5algyQUVjRlF1MVZpRmY3cXltWkh4TGJNdTJTSDFIZ0VtNm9jaE1NSWZERWdBcEd1OVVNUm1EdWxINCs4TXZwblpTS1VBc3Z3OWhHKytuSEVMMCs4RjRjZ3NnL1RqbkxJdXVWRnhxOGJVek42eDNvQitmUzRnd2hva21uM2lJdEFhdFBiRlU2dTBBQjhNVmV0SjV0QkxaaHRQL0szemlnWlJEY0ZsTXNVVFIxUlFZZExhQXBvazl4VmtZTUorQ05Kak5IMW1wdktUT2s3eXNjbTJxcmIvUlJ1bkx2OHl6TGRWRFRQbTY5ZEdJZmlWSFZFSWZGaTJLMGJkRnZkeTF6R3BsN1VNM0Y3a2RoY0tZUFNjRVZXSG95Wk54c2N4V1cydHB2am0vekgwTmhtYS9MZFRSY1hMVWpTTk5DWFRaNnNSbldwZjVaKzBibi9aeEVaS1hhUzEyeithb0d4anI2N3J1SmpjWXkrZ3E3Nk1PUHBVM2xlWXB6Rmo1b0ZCWXFaSjErZjJPbGNDS3JyZjJja0duZGF2dml0QnZFTmQ5YllqN2NuUmRlOVpiSTNWWk5oN2RVOTMxVWlDYUtTVmd4dndrcWpoMUtqSnBDYkJWc2tMSU5qdEVNQ3ZubkRVNmlsdjlleC9TRTFTOERHOWl4azNPbVJXaXhmUUpVdDRteDRhdjlpYlVUMGFnZklPNUZ2ZTNhNXVMNU9helZsc3NGZUdXRWJmdTVLSEVLRXpJQ3M2Nk4yRzBHU29pSStIV0NQeEFUcWZ0VVd2aG1hM1VMVHAzMDI4SmsrbFdqYXpXbEJOUmJXSTJmVU9sY3g1eFg2M2JxaEpZd3J4ZjZKN2lhQlo5L3E5WXBINEl1VVgybXExeE10dy9lN251Z3QyZ1JCd2dlR0JHSjVDWHRSTDRlcDNFTkw5MnpvRWZuVC9NVnRuZUtyMGRza3JnbXNuQThLZEUvMUJVNlpOeVVhdUJJMUs1QlhTUjh4L1BXWWRhMWFBSGdwMXJveDF2OE5wSkRldlBKVXJHRGtqQmt6STVpaHJPVUg3Uk1YeG1qbGR5SW5YcmhDS284TXdwdHE0NFhUVnhzdC9aRHVWYlc1eCtFdVdLeVA5aFhkRmNZVkk1eHZuUk1OeG5UTG12Y3hpNkxaVTM1VC9Rd3pmaVZWd0tJOVVreUswZWpHYVkzcjFiR2ZiNG8xUW1XMUp4Wk4xL29VeXh6SkRDQUJxVy9maFVxMG1XNWIyc2JJZFBQVy94K0hRTVNzN3FLYlZkc3FZYUJkRjVFTzUvUXYrR2VTZ1J5ZGlLOVZwdStGV3VCaDcrNnZqdWFMQnozdUhFSDlwOEpKZkVMYVAzNWRXdHNlTVBCejk2RW5hM2lQcXQvaDdpQnJsY1BmZDV2bHZIYVErYXVNdmcxYmhrd0R2YU9nZEcxdGxpMUFBTmM4cUZGTFVpdXpTeDZrc2pvUkdqWkhiQkN4b1RoK2l3RHRsNkt5QzFDMFU3Vm11cnJicHdMT0JrbnhUQmFiVWdQRUwvZkRNbmZYMDBDekxobUtjMjEwR2p1NUthaVdKcnZuSnBpbk44VUlZUmVkN00vZW5Pb3U0Q1Uvb2J4a0llOStWWHM5SjI0bCs5NGQ0VGJNUzFaNmY3NlFBZ1hKL2QzQkIrR1BMSThZeXh5enVGTEdYbGowWGRqZkd4dzdQa2NWaHlzenVwR01TMkkzaGRmMGpCTTAzMzFkYTJTSGtZeUZsTFE2N2VqU0F6N3NCMXhHQ21RZ0tod1lhSXEvckZiUThKWm9nR2tIZHN3bTR0dTM3UEFtT2ovRjI0WDZTalZBK0ZDM3BLa05Tczc0cG4xNUMyWFh3MHBmNThrSVNrOHR2azhIMytiYmtoNXZyWnE2NWlPUG8yS3lKYmg2VGNucjR2MFBrY2pqYzUxeklaTTFOVmRHd3oyUlc5M3VKdXc0M1RDMlhxOXJCTU1NdUhVSlVFNENFNHFjWXdlcTJUWXdCU1ZOVHNzMnhOdHlHTVAyVXpGcHZVY0xQSUM3ZCt3OGR1MDFPcTVKNjEzem9nSEFWSlB5Y3ZPR0lqYnNraUh4RDJoL2FBNUhoQis0M3lFM3pZbm16SDY5ZEJldi9FLzVMRUQ4dWVCcFpsVmVtZmo2Q0NWZU1qT1lpUUVyVE1DSkZqRzdYSXZTaHRhdDV5czVFV0wzTjlsQlFyOTlKd3B0R0JLUzc0Q3Zubng5ODFrMHBDY2ZkdHNYL05xek11SThZZ0QwcmIzanhwa3JsRU5OTEc0bGNNeDdYSGVzSm4vTURhQXA2MG5jd0V3Tlp1a1AraUlJRjJxVjZXaHo5THA0RkE3RkkxOVhPZzk2Qjh5WTFGZFo5OVRRcndTUUF6V2RRY3dzcTE4ZzRhWVBJaVludEdyVWR0Y3ZZL3QzVzdPQnRNUUVYaWVnU0pFQVJsN0FZUnpPSTBrSEJrUzZLOGdyOVNhVHA0Y0ZOZllGM24vTEVYWVhUYno5QkZjTlFBMUdFTHdmQkQvUDFCOHVoWHNpVDNDellBN0xwNndwTFRtRHpXVmMycHZrdHJPUlZLTE4zYnlMYkR4MmlzVXQ1a3VoaDhwWFhDK2I3OWZkZitBcEI2VHZ4ZC9JRWw0TVY5WnRNSCtPNjNHTVpPLzg0eVY3WERDS3ZLdjZCZkRjRmZZQ2pFWS9mRlR4ems2a3JrazYwVXVZam5IZmNnK2Q1Z3VjeHVpY0NNODhyOVpOa0Y3NTU5TG5SejBzZ2NCRVVtcnh2ZHliaHRYbHJMb1VSN29pa2hPT0NoZHVHOUxaeG1rU01TR2paa2h2MXh6Q3c0ZVRmWXF1cWgzRUl4ZlF3VmZSN0JrK09WM3pLMVYvSXgwZW5SVUtJYVBHZkpPNWVKRUpxM1VsZ0kvUi9QdVFoaCs0MzlOcmM5bHZrWDJuWWtFRytleTdTTTdhNFA0MjJhVkdyVWo5Yk9YVWkvUG5QMitxNGgyL2ZYR1c2M3MraVk2a3BzTjJWVXZKbjVKU1g1OU9FdHFmNlNpd29nLzhTbjVHd2hWTllLQWM1dEJneStSQkcrREt4TExZcHIyV0RFQnl5NG1DTjlZSWpYM3JEV3JXWDZFSU1NS1FFS09wdUpneDc5K2d0cjhkZjRtV3ArTFFtRVVXeUQ2aTdHNVJtT001Q3ZJdFcwT2h0K0JGQzBhVjhDR3ZCVjgwczd6MDF6cTlDMlordU1VeGlub2JDSnVpSUNQYVdtbWhqdGs2QUNlNVBkL3BxYloxVmRGU0hVNXFPV3QxSnJESFBvRjZTcG9leXdUTUg4UmQxSGxNamFLV1FwZkJnS0pBeFJ2TlpUanFTckMrbll4azVBME1FdXppVDROMTZFQ0Q2Qjdqd3FkQ3M2SkNva25YZVA1dzBUOXg2dml3a0JuK0lsQXUwNGg2dnl6NmhxOFNsWHNHWUdXT1o4aUtnOGh4Y2hzWmJFWUtHbDZZUlNWT1NFVE40TGg2Nm43Zmhka25pNkFmcmx4ZFVzMUIzOU9HMElDZ3BZdjljRUxGQkpFUVlzd0NxVzZ1TytNNGdrWk56SkJSdmltT1hQNnBNbVdCVTErMTJKc0cvdmUxOExxRjkvVmlrTCsrSzhnWlQ0U0gyQnZQL2JWc2ZCVzkrKzEyeERnNHhZdXJTYmlXQW1GMGVwTWZpZm1qNjNORW5tNE5CMVdzMTVXRWtyRjdOVCtTc2JZaWtkWGJKeXhmbmxRL1g4cnJKYlA5MEIxZlI1bVY1ZmdzMDNIN1BYZW9pQ0FuSXhkTFNxSU9TUUlZTW1zS3ZDazJ2eTBNSVVncXZvZDh2bHQ3M2I5TlMwcjdNT0FaS0p1MmpBNjdqQlZKVGljYlJGZTlVOHVKU05jaENKSU1MMm10SzgyM1RwSEh6MmdWQlJBWWRkN1oyNE9vWGdaWXRmcHF3ZG9TcVIwMWFYYlltMnY0cllCRmx1L2lEczg4cDBkdllUMHUyRWI2ZmhYTm1FL0xCcmtKcllFVFFTSTR4MlIyWXlRUWVzNWU0L2x4b0FFbEFpQmpETjFNU0NUeEtkVWg3b3lCaWdWZG1jdmtNTG1xa3B2NEFQZ3Y2TWZYWkR4dEZlWE9Bb1JhZ1NsR1dubnhPWDlqWUI2RE9LK0J2U0pSL3p0MTkyLzFmc0k4akY4dVhaTC9kOFVVam0zVkpnMzNlVDZ3dENTUE15Nm9LbWY2T0NuR2VmYityRzZqZ25ickIxVk5EbWNsMFF4R2xwVVBoTXZlMU4zY242NDVpMGUrRUtma3Y1blI0Vk11L0tYV3luSVVaS05GWDUzR2VyWmtsRXlURStLY3ZWdXpnVFhnNUNTdXY5UFBONFRTRXhNYWRaaU40alVTNTFsUlFxM25lcm52UzkzYnJ2YmtUTjliOUdEeFpSYVd6VUlFR2E3RkU1ZUM0U1F2c0lxMjcwTGQxY0oxT2VBa1I2UGZURWpqM0JPL0dzei91WXowdGF4YXdzbjlCcVROaHNLZDlZOU1JMHM1RVFmdDVESzlaY1N3TkNGYnlzaEs0UVRvN1hPTk9CeHhDem9DVFVEakRjNS9JSklDaVN4enVtQXdkOXBxeHVsRnJpL0tHZm9DT3lUb3NVT3YrclVPNXIvOU95aUd3Q2h5OENpMzVsNVNBS3UrS1h4ZXVQR0F5b0lrQ2tJVGpDZ292K2F5cS8yL3JZK3N4M0RzdGs1cXMwVGRHY2FUaWZOQWZEWUMxTnpkaGluekpLYW03RG51V28vYS82d0RXODhEM2V5NjV5N1BBaWQxLy9wbkJtaUZ5MFR2WCtTTUlsV01vTUVTUUV1ZmZtRGswNGFKWGJZYmNsWW9BZzFlNStUYXNEc2pzYS9EQTZaZlNyWExWQTc5NkIrOXF0aGVlMi9xbmdDQ3BYTS9yMC9KK3E1WFMvR3QwRmVEbzk3V1VsazE2YWFuK0gzQnY0WFY2RHk5cG9JLzFMT3hNUmFOVktNbzdNZ3p3UzgzVjlkT216M3I3N0JhZzVDOUR1bk8wUUd0dmlxNVE5WGc4amZ4TlJWYkl4RFRCNTcyT1dlRGErT1VTeFBoTTQ2ODJ3azFoaEM0TzRsODI4aUIxbmNWUzJaeHlVRXdYK2w0YnI3ZmtWVERoTVVrTVFubVVJdm9QQ3FRSU5xaVJPV3I4TEZsdUlLMjVaODBXeVVXaVRKblFTZHFNOFRIMCtHb2JoM2lLaDlMVXpJR3hWcmRQb1RkY09UVUJPSXpvS0dWRnptVHVsTjJ2aEw0WDY4YUZjSlFheU5jR0ZQaDY2WW5ncjRSNDRmd20yRUlVYzBzUTVjb05VaHBibWN0Sy9Vb2ZFWXdxL2lvMFhUdnkwSmd0dzYwYTJiUWRjZlVMUjhqZ1p2bWlmZEpkYTZYamhndFJ4aDFzUVM2SGwrNVRFWkt3M2NHV2luWHgyUG5rV2VhUHErSWRickR6dElzVmxQUlZSd2p6Q0taZ2J4cGdjY3pRbnFSTWlnc3ZoRlFtVW52ZG9mT1M3UThubzd6SFExV1RDNjVDQkFEUVE5VW41aTlkVUtwNjF6Qlc4OThuSUZPbG9MMXZ5UWxzU1NOTVpKM3Z3dUdmYU5jd2Z2cmI2ZTF5N3k0alNFSWhOajRTK2N2eXlvMTYya0JhY3FiTWVOQ1RydllxNWhwbml6eXkvR0tORGZHL1VBZWpHNVcvcVhMeDA5eDJsZE9HL3p0NllrVGtNay9iSGFXUmVIdTJzUTlCMm1ZbXhxeGhQOVZXK1NLZXIwU3BHSDFVazZQenQ2SXV4SGJTcWxra3A3ckI4dHduM21SWnkrc3lMLzhtcWpRWW5lMU5xN0ZrL251TStLRmhscDdKNk1nT2ticWVrQXl3YkxoK1F3bkNIa3REMWtIdUxRMXBMcDd5Qm50ZnBTU2Q4S1BPK0E3aUJhVWszV0JzV2UydmlCOHJ3NzlvdjdBTHkyR1YraUNWVE1SeGs2WklSTk1aTzBVZmx2SkdMdmhWcHViUGNXY29PTWF2bmxFM2s3SlNsYVpOMEZCak1Yb0xQaGtpNXF0ZU9xamxuWEFmOEt1VXhpMysvYnlkQ1JSNzIrZDUwQjFPYjd6eGZvcmx6aHdJVWsySjg3VlFPM2ExRk96YjJMSEFCR2JQb0ZaNTdzZS9CRTR1UmhGYUhMc0Y4Uy85L1ZNRUN3eGF1REdxR2NFcXBtcEx3NUdDbjE0bUUrUkRQRUk2V0lyYlNMcHcycmxRODFqeHJicVp0TXVoZk43VEhiZHAzSmt2dGplNTl6MXFKcFlHeG5CcDJiZGgweGwxc0FKUWt6RVRJRGh2TEsxN2UvNU9ySVVUV2htN3pYV3lHKzNGM2pYWkN2TElQWm5pamtQYkI0aXkzNVpuUHpvUHZ3aU1WcUMzWkFxcjNoWkYrMFl4TVJ0RDVzOXRqWXlvck40ZCt0Ylh0RGNvNnlKUEo4eTk2VVBmUk1wblpYTmwyVW11cHBiVU82cHhmRk55UnhhQ05VSGJFbVZUZ20vZkhLdlNMTW85cnhVdUYwTHJoU3pqbnAvQmVWS2FvZlpjNHB4MVJvamxYUDRyU0lBWURFQWZmalFZMkxGVkpwRzZHQkhrOUpzZUhZbXpOMTJWcFVEdEN3ZHZGVnRnUkxRWVNRZmdRV1hzWUtwNG5sMG1URTFTSHhvTzA4YTV2dGxlNXc1bjNzdTVtbGs0cU9WcU9TTk9NSGZETTh0dnVoREZETHMrOVcrZ1B3dGZXSmpCUWxwL3ZBblFDazBRcTBPLy9mVXZBY29YNUpDLzJFTS80VFZweTRLSUMzN2VIdDkvbkZVKzdpbExGdm5mQjYzNE94M3k5dnRmd0lPSERIRlFHSnpodUJwcVAwVENEZW42ZEo2MmFVSUJ4enhzOUtlckU1SWUxVVFQUEl4OThMMTFNRERoK3VNYzJhWWlvSjdEOGFiQzFSOE9HVTVYREhmd0QxNVlZamM3OE9Wc3IyVlZLUTlNTlRlVDZacGFsb3hXc3MvVHh0RnE1WDNhbkZ5dlRaa0NWL3RqbE1LdkYrQW9Lc21NWHV2aWY2MkFZbGxBUUpNbGdLMnVjd0d2SWNMUFBWcmxtaExtY1pOSmVQRmhHb0RGRGQ1Y0wwczhxall5dDFKZE1PRyt4dS8ybmdoaGlNWjlyUnpPN2trSyswWUdLQ0ZDRFkwNHVKN29lOWxvSE9RajAyNUk5N2dpQjMvTld1WElyRk81S09SMndsbWFIalpBREo4Zk9mdERGRUtiSmFPZFlyQ1Z4eCt3TjBmUU9qYTAzOEVzV2dIOW96d1VTUHRKZ1MvQXVNVmxvOGpCYmJaaFk0aUtScmxPL0Q1QzRoY0hMdk9CUExNK0tEQUxsUGQ3akZ3aDEyWWhBUi9OMWFVYXhTZkVOYUIzeXVWbG5BN1ZvbUpTZVBaUWtHS2syMW56TEFIdDFjTDFZQURFVG5hZm95ZllnL1YzOEhGWG10bFBKSFpjZ0Rkdi9tZ2pzM0l6N2w5cHBSQU10RUtXK3lsQmpSZmExMDV6U2d2aHZPVUdYOVozakxOcnF1WFhRTERGWG1CU2VUVCt6QVdRL2FsRVBMTldPU3ZWTDJPOE9FRm0ydTdxTGpRZ2ZLZE5ua1F1ejF3SVBxdit5MkRHVFB5eFpxOTlodUNaSGUzKzUySUYwVzJrU1E1bGtpZSs5MnlvandiVjBUVmZKczNIL1cyQ05OczJvaG81REVlUy93eFhiaTZiajBMYVVNa0w1SW4wZVFSUWkvVXkwYmE4WURqOW94SjI0N2RIOG9rN0ZqMHZvSE0ydVUxeHVoR1MyaHd2K21ycnJYNHJPa1VhcmFoWU5teHlleHNGc0xCenNPUktEM0phOElIdkxlTk1pdXl5SkVOUHVBSlVQWDZDeEIxQ0V6Vjl3Q2hwUVBINFpZaWZDRmhMRjFJUXQ4NlpQeDYyZkdpMUVkMHI3dDBuZnNWeUMxKzJ3bGVtUE0vYUlrNGdoamx0VEtPRkhmVkkybmNiU2RBUWVDMVRPOXZxNnBUUDZvSjR6WEJkS2picTRzczkzbzVRaXNQTDBaeTVDVnN4b3lNaUIzV0lRb29UUk1xckZRSTFoaXlIb3RzMkZ6eXk4NFk3V3dZTFg5ek1JVHJZbjdLTWpwQWk5QkNGYThkZFZhOE1WQnNtOEcxOVlBZmtlQ0o1RC9OUkNFOEFsRVhITWtNZWk5TVdEVTdZSWp0UnQ0Q0ZTYy9hTnhjRmpsYmh2K1pRaEZ0S2p6ZG9LK3ZDRjgybEM2NnNoeHBFK3R1VkoxWkhtUDUwN1pta01sQ0NhaUlQcU1DcWNJWlVXUnhnVkxxVi9CUktLdEc2Mnk0Y2tqdnBNNkRIWWF5eS9RNGJUbUpFOGFpQ0RCa3NHaXJ4QmJRSjJQZXRYR1ZTWTBaSnozWW5GWmhiYndDaW01eVMvdXJGcnFEYm51d0pDRWF1Yk13Zk8vWWc1VDNYYythN3d3S2RuZURjTEc3UWFTK0hCWlZ5ZExUN0pVY2JQUnF1ZnBQR2xKTER2czUrY1lzVVBDVDdBWUlaa21NTXNyYVB1aVFoMVBJVHlJd0JDNTVXQU5ZREI3anRxa2huWFVTWDUvc3Q4UU1pK3NJZmxEZkVtYjFpQWhXZ1RlNE8xckFQZ01CNFJtR1VtR3plVWhRVlVxZEl3RWRCdVUvekVSbWEyWk9KVmhQNWFjd3RvMUtwY0VweWdyOTFOeTgrOXhtUytHSElmWHEzWnBFQUwvdWtkUnYrS2YxSWdNcXdETzhpdXRHSnNvRXFNSHFOUXJHNThkeGlyRmRXN0h4dWcrL1BNVkpRb3NVbmh3YWdYVVJKZC84aTRFYk1xcDluWFBoZGJyZ1NOeUdycVErKzlpbXBzMXUvTGdqcDRSUVJlRXZacWFGWnczLzJJVkxuSW11V2x3azhWci9RKzNaaTdrbnJrMnZNaXg2Tk9CNjR1Y215QzJTTU51b0NmZmdUWXpTaGovRWNBVW1BTVRmaGxNS1phOVdMeC90MmNNWGdROTA2dlNKcGFqb2tqSGc0cE4veU8ramhlZHh1WGZ6eS91bHdaMHdOcm1vcGt3SGlHUWFyZTJ5MmhCTkNpQjZVYmR5dlNOaUZLcXkybXZmZk5OSEFLTmcwd3ZaOUhMbGZZd1p3TUJQWlUycHUvM050cE9pbUYvaVg5cEQ3MUxSTlV1ZFVCY2c1ZDFTRnpHdUJWMVNsZVozRHc5UE01WngwUUdIak5xd0VTdTVBVm9jTzVYaitsRWxBQUtaajhaSEdGZ3VSSXhMVkhzZXlweVpRMC85NFAvRGtvTHloWGhkb2puOHYrMTBMNkNwQVViRkpvd1N6ZGRCWVRQZ1YvT1VyTWQxT0VHVmxIdlV2d0RGU2M1Uk9iSmlvTU01dkhEYWlhbDdaUlZTT3c2R1cwb2ZiYjJTTUNFZEkyOHRYM0lNUnZveGp4UVhKRndzcGRTL291STdxakdUZjVnVGtaTHVNaTJRSXYzZHdXSXlwQ05LMEFPS0p2WXNZYkVYaDl6Tm04aEhLWTlqTUR5VzNFclRONFhiRGFpKzYxbFZTdmNDM3EwYnM2NXF1NXE3TXJuU0toaEg2VUdOVW1yTitJTWtwYlltZjlGWWpVcytKSjM4Q2t0dnJiT1BPbjRpMUIvU1lvcElsdk8wMjRSU0NkTFdlakpZMm1NZTFBbGlNNFlvcGphY3FyOUZhb3hQL0tzT205N01ScUdaSGJYenlSZEhXS3Y5ZWgwK2ZDcS9UcDAyR3FwS2Y5MklFK25UQjhFYVA4anFRdlVSWjdDcWI4a2Vtd2VIcnI5WEhxWEJ3ODVITXl5K2dxd1VocXUyUzNJOHVMM1l3cVpneXRxc1F1YVlvOURPeXhaK29XLzZXQmlwVHM3eHhpTnExL0NIYzVGOXFBOXp5QWtNSWl0bGdUelg1dVBjZ01PWlpiZ01pa0w0Nm83aEVTWEIvMkdkZmROV3hWUzF2MXQxU2gyWUlVSTJPOHBaakJIVDAxclBrTDdTeE5UYUxBcTVzdXhtV0xlc3JOZXBtb1crcWUvUmJHU1BOQmtobG5CcExpTHN5emJLVER5UkZRUEtLM0xIN0RZVmJhZlJQRXFqL1ExakFYMG1TQk95cEFhUXZ2VXNyYjNoWXNUaFhEQWtKQnJ6dHBmM2tTaVAyeXVFVVB1dDNybkc1M3pUTGR4SW9IeC93ZFZlMlNpOE04VjZUcGl6WG0rNmVRUHdBcjFvbitGZkVuZ0hkVldFMUJybEhqZ0dFeUlsaVFGSlB4YUVSTzkyMzd0eEc3WDZJNWZsVUlubnR6WWRxenJ4bEhrZ0ZMeWQ2QWh3amp0bGd0TEJGKzNlM1V3YlRDNjlvMExvU0RTdWhsK0VWQ213M2ZlZnBqckFrcU1RNTc2bFRvMWZ2WWlnUUdjVDUzd3NueFVNck5VWDA1eGtONG5FSU81TFB2TDdWS0k5NzBiRFlRQVZjMDdNUTdQc0ZqS2VmKzVkR2toUGdsWnd3MGVHalQyYnU5YTluY2x0TDIrZkRlNUhpWTNiTHhuUTNmS1d2UDhFUzdiS2pEOXJuNTZsRUFGbG5VTHNPQndlOEtSZndLb2Q5UFhKYW5FOEtMM2V4RXFYNFU2WlZQVi9URzY5ck9hUEVBV1NxKzlJcnNLdXJEenlqZ01LTmI3L0VGV2o3N3RVK1dkTkFJQnJQSHYxNW9LWHphNTk5M0VBUmtEcnZCcTUzdnV1Rk9HelhjS2lEb0tLK3JRMHVZNFBza0ZkTzJBMUtFZGg1RUFrU0duaUYraDNjMkVTRElDbDZUNGZ4ckROM3JWVnBjUVFsb1NraDBES2t5QjRNODVXWVFPelp1ZzZYOUUwN2ZidkwwZVJBcHNoc1Q3U0FtSm5XU1FtZHZ5a3kreEdzNXU2eFQrQWwza2tSbS94VWtCQVNJZmh2Rkk2VmxwRkw2YzA0ZlByYzdpOG9FS3VxVlF0Y2h3U1B6SmFzRnBWWXY0L2l6Z2JFQjNBV3VmMmlGcGMrQng1Uk9takt2Q3UyblZkdUJPMmR3QmlXWTBVMXd1T05PQVNaaTZ3OW1INGVGL2NRVlBGeDlIM21meUJQdnZhd2xuenorSHpHbXU1eTNwU01MdDU0M1FYbnFhQkFoeHJUUExXcFgwUGwvSEU2czQyTzVNdFluYVlOd1pFTEJCREkzSUZ6cEwzaUNORldlWGcyMlgrSnFnSTdMcWVlQThvSWpBMjJ4cnBJQkhJZnlSMjRLTnNVNjhtU0hYQUFZS0xvb2pQYnFtMHk5VjBsN3l0Z3QvQUVMdDRjYmk0a2Y0d25pY1dscDVVN1NmSkdYdGVXRDJKWVVRNEdzVXdtbFVWTEVhN2tnendrcnJBSjA0M0dJOWQ0RmFwUTdZb1grNDA3RWlYaDh2RUdhWHZjUk9vbjI5ZXZPanZITHNjY1A0bDdvdkppRVRRYnhhNHg4SUZ2YTMxV3FNelZYa3VuVHl6MUpiTHZDcE1Zd3N4VHlXemQ2bnFkbjJ1Y000aitRYzBtQ0FUZTVuL2ZFM3ZNVko4emdvdEUrclZzeW9nQlJWOGRWTisvU2s5ZCswYWcvWGxOcW5Fd3lWa1h0NHRSRExqa0psZmVmajBzWnBpMnVENHFoeVRxOUVXQ1JrTytYeW9lQ1RBZXZ5MkxuR2EzcW9sN1dHZC9yVXVDbDByeFVSK25jeUp5S2VVc3VZY0p1MmJkYzQwV05XNG91M0VwSitBOXg0U3NQMWk2WWpUY2NYRFhQL0I0OTdyaXJaY0pQVzlvV1pLald3aC9QUERTenI1ajNCSGx6TUFnRVhxbTcyTE9sbjR6VStBY3RCTDh6bUhhcnVCbWhiTWFSWHdlSTR6dWFBYXpENmFUclNJeGl4RmdZYUVaU2VZNG9NT3RCejMzRFprZ1pGZnl3OVZFUGFTdzRtNWs0SEw3Tzg4RXNtSWRGdW1ZMVJCWUNsZk9jOTRwTHY0VjFSSjVZTTNaVmZXUE5qYUVFL2x4ODZQSlBCU0JCQytKMGdZNmFseFZYOXpRWkRnZWd0TG13T0IwcUJhNkl1L3V4TisvRW9FTFFTL1Z6OVBqU1dDbTJ1WENqYzg5SWI0eHRDcjlBcG5wZ2lzVlZCRS96K0Z0N2JuZjRFNno3b0xuRXRWWW9Qa25YclUvb1FBM21HOTFwZW5ranA0clZmMlpGRWp1WDIyN2U3VEh3TzFNL1Rhc2pvQml5YkdZUkJ4Ym5IdXZxZ3NoVTJwTDA2b3ZZYVlicVc2OWYxMUU3Vi9kcVQ4QmQrcExpaytId3VNK3NmYldvSGxMUTlCMlNMR0pNUUNLSjJPYjVTcENEN3RWMjRNUTFBc0tlQ29DZGQ3c2xCRENTajF0bGp2Sk92eXAxUGV2bk5DcFpoUWxtQWVXT3B1a1l6bnVQbVpPOWgwS3dMd3p6QVJSL0FWRzJNaXRRQlFIR1N4bFFCVGlKdHkrSTZXL2pYY25jNHZaeVJ0SElpWTJmTElseXJDRldCOFlha2xjNm8vNDFYZkdQb0tJRDJIOEdSaXdVMEpxY0JXYUthanE3bGNwUFl6c2pqVUhLZnVDbkI0NlZURnZLdUd6OXRNTmxOekFJckdTNnFDNGJLUkF4LzZPMHNDYkJsS1BtbDZiZnhVZHZ3TEVsRlV4c0hYV1ppQ1pEKzgxOGtPb04wbDZkSjB1ZTJTQzNPRyt4K3ZuVXJ5RzZVMTRlWmdlaE84Y1dadk1FMThXREs2YjdDVSt0QnBzYUZ6VGcrSUpFWFYxVVZHMmhMUjVYWFFzMXlZVmZDdUpPVmpZYUsxb1dNcWlJNmhDZTkxVFNaaE9Od1ZSbVR1WmpLZ1RpUWVZSEYwRkNLcnQrUmMxM09BVU5DelhvSlpkOGVWaG1FdVA1TWYyUm9oVUIreXlaaCttWXRrSkh3MTBoR3gvNi9Dc3dTTEk1MUNtSE14bnhicU5XdjhGdzVadUNOc2MwY1ZmTUxMYmR3Y09VSE1kR1cxZGk0YTk5b3M4ZmZsV1cwcUYvVWhtcElob0NBNDU4VGxVWnBWWU1Mb1VPcmNqWmhYOVIwMFlUWk11eEFFbThReEJPVk9iZkNaVVNtN3RnQ1pYbVhkb2ROWXB3TnFVZHd1Lys1T3dETmZqNzN0bXJXcnVQZHBvVjVkN21Od2s0RkRzM3RidHZpOTYrSnhSTW1xTXFJQ0kveUczR0pnMEd0KzMwM1NadndManpXa0JpcVFrSVdTYmhQYmhhcUVSOHd1V3FyWGI3Umo4RWliVTVkbjArZFpHSDBhak55bkltU0FhTnlReDF2a0JZMW9Id3k3WkY5RGd2clphdFJtOXRBSXNrSG9EMkN1em1odllpVEpyQlczL0RPUkJYeWpkaXQ1THZObWxuU2VZRTU2VjIwQ3VkVXhRaDFpbkg2TWZsbGdwbHlKZDJYb0dFakp3cy8waHpnWERmZ21YQ3AyUU5MdlhNdDEzM1lOL0JVTlovY0pYNUZUdjNRRytld2Q4cmVhQjZOc3puZDNzVEhlL0d0d1YzaVRFcjZRc3o2N3FPMnl3V3ZrOHNDL3Baa0FyZkZBZGRDaUFaay9mTTlEYkYzV2hRd0NQQVV5R1NuMVhxWHZ4Q1lndEp1VlNFOG9kSlJjZE92UXlXTkFtWGE3NXpkVHJFcXp6dUZpVXpQdGZXRTlZMGtmMUdGcXlydXFpYm9OTHl0TjJ0Uld4QXV4clU4aURuQThNMmNJYVRsekdvWUlBalpZN1lVcHlSZHk5Y3pZM1BPaWVmbm9OdDlXMkg1L3BTMUs2K3RVQzZyUmYyby9vNjZmdmRZbHp0a2JsbEFyVUtxRmNNOUpEQjQza1ErL2xvS3pINDVTU3g3aHptcDZ6NjAyUjF0d0YvMWN4Z04vNDFXeXp3aDVYenVFWlJ4UEtlaHN6L2NuZW85Ym52RU5UcXRXUnlRbWlKa2RaVGgxTHJ3OEZkSnpKZHB5R1NleEpLa0EwSVJJL3lQOFFVWndqQXp2ODRGNnUyaGtrS251NGcxbktmam5vUkVsR3VRR2pDU05DdXVENVQvSTNtWC9SNXF1T3M2RHJUam9PUnBFWkN3NzRIK0JnclQ1Mlp2aWNaeXRreldsdVFGQ2c1aGdBcEVzRFJLeitna3F5TTR3ZXlVamJrSkdoTnNLb2ZBcmhoaWIxb0lTUklBU0N1QmFTRDFPN0VEWFZrTFNxc2VjdzRuYkVzRG5ZdGZEYTZDbzBOTlJxNk9xQktMVEU5S2RFdWhUbU5tMWp3WDFLVU5sanRVMW5vM09vd3dMMXRpNGkvR2pHK0xQUjc4b0g3VjRqeFpJK3cyd1oxelVQNjFER2g2QkJKMS9FT21QcXVoaFNDY1lXY0dBTjZSWHZGVzg0UzNqS0pjVHFoT3lwV0Q5c0dBZjhNK0NZVUllVkxBQnpwblczeXhPNXpQOWxsSk1DanBlTS9SK1RRei93MmNJY0R1bHIveG4rMHNKQnJraG8wZm9Xam9CdVhwYll3NFVNT2l3dTlZRkYyd0lPVlVGdHY5ZlE4M1pYV0gyNmVsNnBaaElsNDc3T2VFbWsza1U1NGpMQ0QxZG81dDduYjZEOFVFc21Sd3pNc3NicHIzcjE2TFNjY0RNTzJ4TFB3THlWaXg1bHNpclBobnBvSldFeUpkUEJNTzdpSU1wRjJFa3A1QXNGVjJwMjJ6TGk5bU9jeVdMSG90YzAvdHEwdFlRS3dKVHQzUy9qblkwd3F4c1hab1NFT1R0Qnd2ODQvM1RDMXdIaElKSmlnV0RrRUNQOHdzOXlqcXp2eVlRSU82R2o0QXZDdmU4VjdSbDBVOG5FZm1uRUNRc3VjSmpyQzNURDhpektJUGdPZkZ5bHdWdllWWU8wcTBoeGJ2eEl2OWx1YnVraWo1Y294RitsOXFjNlkxbk5WcUpQL0NQblpmeEtaZEc0MURUT2s1d2hOVHl3KzdmZzhZV0VXUFcvUlBWdXRZdUNDNGVoYzJlNmVwM3VVbnU3Yi9tY1VuMk1uK2JmZ0lVTmVIdEJ2ZDZNQXBPT00xak1tUWs5U2N1eDh5d2sycldPR1NtazBNZ0creDBvUjRPTEwvNzc2SjAxRWxGeU5WZWQvdkZqazVvM3REbUU2cS9zWFZGVDJmaWNXUUZxWjAyQjBpenlzZHgySVBRRFBtUjMyb2JOeUdxRWFhQzJjd3BwSm90QmRoLzE2VTBVd1pzWlpLWnJjSzhmTTJZN3lFbDM3TzEzcUsyc0lzak1WdFpiOW5lZE1leW9wSlBHVlB1QkFwSWN0MDZpYnhDeml5MFA2QURwYVdPVFVhaE53QU1KWGhPRUkxNkowQ2xYc1N1aTV0dnV3UlJKVmFHQytmZlZTeEZHUDN1WVYyZG12eG8yWXZnTEc3TWJsU1NNNC9telUrUWRjcEU3a3U0V0JoUlRpczZhYjdtYUg3dFVIS3hCak5YYitIOEgvMk01VUtGSnJHeU54ZDhUaUtRT3VMakxNTk5kU0hEYnYxdGRHWmVwTTA0UVExb2V5TjBaU0ZzWnZxTFRiNTBxR1ZLQ1J4OTk4cEFFb1M4akxRMkV2aFhKVDN2RmFwVnNjSW84cFR6bGsrQVRUOXAxVnBBZzFpUk4zVkdkQlB2TWcvVlBxRlFHcWpkNjNvZnVmY1VsbEd2Qk11QzRKMjZUd0lKUmdSY2xCU2FwZFdGSThSbzVVYjVPT2tIRmtHZ1FPYTBZdWVKZ2J6QXd5M2Z0U3Vlc3FHSG4zQURtQkEzOHVHY2tCYkNQK3hjbnMyRW5sUU5zdWkrVkhJNHpPU3R4UkRINnNjc3pzeVpha2M0aUp3aGJOYWQ5dndSNi8zQ0p0dDZPRmpDMEVSQlFZMGVjTy9MR0tYR1dJYzFHRVBNM2xCVlhoNXlyVzRpSTBTMitwWWQ3bDBLaUErVEZENTl3M1psVnNnell2UEs1Rm5vdmw3M1hkaWxRbE9KQUQ4VWpUTTdsV3UxOEd6a0xMeTZMUG4zYjZZdEs3b2dnV0RhSkVOOVBPS1lkK2tZSU1DRSszVnhEbnB5RndMQ3pHRjRPRWJVRVFSSUg1dTRqNDI2alV4WFJSaUNjOHVwWkdRNi96bFdsd1IwaEVEdUFDWm8xMW1WanMyaGt6b1gvVjRsZWlYcU1Jczd4OW1jd2dpcjJwdVY2UzByc0NuYTk2MTltcnpBN2JtMXU3azdzTXg3Z0ZuTEppV0RoZTBtTGx3c2N0YWFYcWxsdFg3SVM4S2J6N1JTenpzdGx4SExrMWEwN25kaHlFMk55SlJqSVRWdDE1dUJ4U0dSNjNqdFppQnFrTUFnUm0wbzhTclhaNTRDeDJTNHd0eGVQS3RCTUVPT2dXUXdjL2pjNkNXZFRKbHkranorNXRRUlZTVDJJSXBTenVDcFd0aXZJTVlwc1lxUDZEVW5QdHd4VHczdXhCTW9CTUE3ODZRbUJrSFdNQzlBMVFreTBuM1I3RlhOUmxlVkNCRjdtUlBtbS91bzZqYlU3Sk5XZVNpMWdYa050dHBqVkd1cW05T3lRY1ErZS9PaGJZcjZNQzRyYjdyVnczK1EzQUNnSW5PaEtub05FblJvaVV5cCsvMGU5YmNIVHgwdVVEZTAyZENBdTlCSUYya3NqVXRzR1AvZXYxZE1BblNPcXAwa2x2NWJOalE0WjE1VGhTNy9yMkozQkluNVEzOEs5bTBPNjV6SG1FZG5YeHpOTGtoQXVTWDU1dVB1RzFZczRiQ2ZEa3FhQUs3QUtEbm9qTHVsYTE5OFRzYjhCSE9UK0lEaFJoaDdtTm1lcWtMTlcweldjR3BVeldZeUNiSmF3ZmhSUXV2Q29qOXpFelhSd1NMUGNXSG5KQzYyUjJTQXhzd3VEdjlPLzZKOVhQYVREU0hiUkRlZUpJSVg0ejczY0R3NUQ3UnJ4K0diMEpjTmVQVjRaZFZZM2dSd0tzM3JUbjdMczJkdEVJWkw2UXNsZUs5WEM1TkRrbGpIQjNLRzJGOW12MFNGMllVUEdSeHY4eWovRi9kM00rRHVrL3VWaHJQRDF0dWNnVGFobFRXWlNYSmlST0V2WTVyaXY4c1BsWHdaQ29tMERZNGhwNDNSeTczcCtIMFhBdnRRYjdTVG8yRVhQWjJicERjb25OTWdxR21DN2JRYlY1dysrZUhleUZXd0NjWU5Ga1BVWGFUWTFxYlBJc1MxQzJML1ZjOENrUkJYb3VYNGVZbDVwWFNOengvMVkzZG9JWlUrbUd6SGhmR3NlNVd0a3E4K3BMM2F2bHJoMXBVTEpWendrVVlvZitOSlBDbXFNMnllREgvR2cvWXdGaWFTWjBQeUpMYm0vOFB0dXJ6ZGZVV2h6Tkk3VExCL1FFTUUyM1AzcENMMTJkSUd0SW5iUERmalkxbUZzMTk3ODVLMFdxdkZER0NJOTF6YXl3YllEVDRaWmNRYzJ3dGloYUdRTThIRnpOMGZiaGRtNXlNZit3TStNbnhhbUxPQ2tlTkJXbEZvUmw0cXY2T1NPUEp1cXlBQ01TQXprSi9BZllGK3hYZjV6RFpid3l1K0EzSXN2S2JPZlJldnViZGN1UWRNRTBpTVAxUVhaUFJrRnRzZEJvcXRrUHNYajR1dUZzamZJbVlCbDhTUFVzTlFyZVBFOThKTS8vR0F6WDJyNnYxS0JhNFVQTy93UGhUQlFPSXNZdnpzRWxkV0I1STVFdWs4R21EempHSm9iN2hOVnd6N1FMZnBiSUtKTStzTUpJMWh3bzljODVDTnVpeGFVRlZzRWVHNDBVVUhJQXFuZ29qamxocXlhKzdvMmd0dHVVaGhYOU5oRkFSLzJnakRhNkd2WkhMYURxbnJDWkx1bldOL25mQW9vazlUSkZ2N3JHMjZRc1h3bndJejJ3cTV2dFcyT0MwTDU4NUcwd2Q0VVo5bEliSlRya0VFVi90d2dpd2tpOCtlY1VNK0x0VHlZQndiWlM0ZDlLUFdZRnY4ZTA5WUZkV2VYTXh3TEVZaGdnTXRwcG9RbEtzVWR3YWE5V3VZcmgyS2dLUUtIK2VPSWE5UzJPVmtCcC94SDRKeURLZkVLRW9TUmZOZDZwa1Bvd0hsTGx2ZDRoRjhFbzZNTGhrVnZ4cFlvSVNwUWkzN3Flc3d3QlhjNEFMd0NUMVp5QjQ0b1dZeTNxREYyRFhWdzhKY2RYdXNqd0FnZHRyZ3ljU2YxYktIU1htdm1JVzc2TVp6RXg3azBFTGVPRHBML01tVnRZMFRTMG1pczREcTNyOFllZ0x2TE9JS2oxMU16SDMwTkE3djB1eUQrMGJ4WXFOcW9SQmtwQTdIbWx1bnNtSE1NN1ZwU2JmWXN5eEV0MGsraytOMDlSck1IRWJoVFU1cjlqaHhiYVNNMFltZVJhK2pmQTRSQkY4RWVLS3BtTUllUUQrT2JHZHAxNlFtTDNFZmxHWnlsbnVZd3BqVjc4YTM1SlJVK1RkUyt3K09lOTQvMCtJQ0IvaThQdml2bW80TklFODhtNHFQWE1MR3FaQnhTVFBvbjVMTk91M3Npbkwvdk5JL3FMVndUTWFaUm5EbmZYQmViVDB4UXlxQ040NE4vTkZWbHRVL3d5UUwremtocGlZRWZMMk8rUWZ3N01vSWpGbjlyMWFUaTdWZ0ZBd3lKSXdHUFVybUNOL0tQZVFxQXRpQ3cxSllSdVRLcVk2M0dGbEk4SU5wWlVKM2toSmZLeE5yTFcwajB1bjV4VUVmOUdLcXE1NzhoTURjcExMSStKL3Jzck0xSFJJdHdIVjFwM2gySDkwaUFhb3FNMHhHWjd0NW1QaUpCV1VUeVA1UzdYYlhqL1dHNHlIT24za2tHZkorYkRhTW1jYVE3QWRmaUoxN2dXTUYxRHFaUVA3RE1TN3NjYVdFWnhSZC9CTm9Ua085SUhDcC9ZZWFsSUFlWFV1bUpMWjZ0OXNrQjVRR2FUWXJXV0NzazRvdnB0VHZXSUhacWY5dUM5NWFPaXdiN0NJcmgyVUVUcXRnUlk3VkN4UGFURUN3U3JuVWN0ZXpwY2IvbGg5NWMzNnhCNW9IS0V5TmNxSEU2N0Q0cU9EVkpiZ2d0ZHhtUi9Wd3FoV3JTZ00rNWFFbjFuaXVicjRldXdqMXFTWEtHVWhWVjdtQ0pGUkxaY0UvTjhXOXI4ZkcvNjNxRUZTa3IrZ2pQdzJUWkxGNVM1N1RYZ3RyQWwvdDZncXdVR3lKTmc1SVZNa3c1UDlBQUxrWDBLaXFFdk4vTDJRcWFMSUJCeXlUd0NMYXRQV24wOUMrZTdFL0JIMTJacUJHZ3hKc3g2SE50WFVoSUxWUzNqaVBkQjlSZm1GQ0IrWEZ2bTAxMDhua1YycTAyUUFZaW01R0YxOEVhK1FpVEpqQXhPb0VFRVdLb1VIYTRKdk4zMlNlTWJGemhjdVFwQ0tpUXl3MlIybnRTbld2SFhqd2hPa0t0SWtuTENPTG9pT0tabHlRb1RJRWZVMDRzMnRjTEhLTTJoQnJacTJpSG55cXNnL0RCV2UyT2Q3Mldia2JVd0p1TGwvV2N1ZzZyTDlzVFlzV1Z6em9zR0tkakhVaWFpaEpTcVNGTjV0aHJNWkNNMW1LbU9qMG80Q09MbkRSekpQa20xdFlmajh0LyszbUZOcmxRQkNBZnozTTJONWJKSU9IR3QwaUhTbCt6bVFwNS9KdUdPRFJCSUZuSU9VVVRyVytURmVlcko4S3REUTdYQjBxYmlMNllOWmJ0MFRxbW83TnZ0VFVDMGMvT1FsbGZEK2F4am05TEVkUzA4ZWxDankvUmtWYVRLRFpWZDVNaXBwd09YOVc4OWNubHBCUnpFTm9rcjA1NGRsSTNDTmtOWkFwdURtZDJVMkUyajBncFZqbDlWdmRnbytpK3lDSkJham5CU2VLUHhudUFaTUdkUkh6aTBHYWUvdzN1YzdEcWtXTDFhVng4dUFWZWhTbEF5MWxSQnZZR0orUDhQbndXUUZUSWVoazErT01KaWRabjZkYVg0K3I5Q2RjMi94QUdJSDh2cFV1d082blZZU3pBWVFyWWhwQUEydjhjVG45Qi9ha1lhTDhrcjhTZTVySmZsRy9SVjk3MXVibklnTmp3NWZ4aUYwR1NrU2VwVHpNQnlWZ00vc29jVmZ0RmU5SmNvaG1KV0ttNkQrS2dvQVQ3TG1lRnBhYnNQbTVtYytWRjN5dk4ydUdIc3VjTW8zNFFTRHpNb2F4U0IyUGJCUk9tREE5UVE1a3B2QUZCMTJxOUYydG5VMzMrRFFBcVBjOXIrdHVTM1NhOTBVTjUzUFhTbndTbnNScFdOMG9kS3k2ZFFOSnNRYXRkVXFiUmlsbnllS0dWN1RDNC95NXlORDZiNnp5d2xicTcybEhZTFc0V1BYUEtzWFU1eFZDU2JtV0E1NmtJaVhIYlUrMmVQVG5CZVBrSXF2amF4QXpnTHlnN0JwQVUrUnNzcGxCK3lEdFVNM3d3cnU5UjZQbDI5U29aWnZrZFlXNUtQdzIzR2FHM2ppZkJaenNTOE56dTZqRUZLeitzK0xkN3lmQzRsL2RtNDZsTkVmYTVDdklxMWVtOVJRR0VYQlA3Uk1McXV1UVlNZDJJeC9kVjVRMEp6T2VRc2toVXFqQjBNNXc1dTZzK2RQWG9lSTNOaE1qOVYxQ2tHZ2E5Y0diOEVMZWRSQTlhMmpWKzY0QWl6Ni96M3REV1NRSXRiVHVMcnFXNjdUVzhscWpBaE1od0g3dFVaeGRPZmtNb2JabzFyL0NuMXdQOE5ISFhQSFRPendPY0g1Y3lYYmNnVnplcmtkRzFkZmZ3QUxrWWxpNW0yOHpSRzAvd3ZJOVpWU3ZZTFkyajFDYUxtM05BQTU2L0MvcDZsQlk1UGM5Ni9Ld1pqS0VOVkRFUDV0Y1lUYWJsZDQwWjlZbFhCamNaTFQ0UU5tdE5rZ1ZGMkNZTEc3WlBQMzMzRk9FZHlMc1NyVzhES25JK3Q1WFZoSUliOVBRbk9wT2lncVNNaU93eE5vZUZiNEFLRWIrRkZYK0NaTGpkTHQxTitkUHVrcGkvQUxVWWFnbEZFTXR3blV3TXIzLzdJaXNqOHpGSG9nendlY2N3TDNOYVVCMUtrOUM0TklnY3Z5dGdaK2duekJLdHNrSVBHdFNGTmR1VDRrUFZTaFZSYjViNUo3alRvUHRuMk5FUlhOUW5VM0ttQ3hvUzA3WDhMdk5SM0d1cUJpelEwdUZxVGNZUTVsV1Q3VmZYd3NNaWRJcEJWV3FoaDBmeUZvVVlkOFhLRlJNcE54YnEvUFVOT3NuaHU0dTRBdTFLVi9PaGxqSkViSDhzVHg4ZXRMdEVGMnhKNXlkZE9qN3ZKSWh0T3I1Z0tYdWs4RTBzTFdNcmtWa2gzM0VGSURnWVM0SlZ0aW9FYUEvNWJZM2VxMy9rbC9TRkh5Sm1Ic0lqNGxLbWhORjk0ZWp1MVBSZXQ1YWI5ZENROUFUeCtXWWVBRVUzR1pKemQwMmlMUFZ0bW5mMGJhVnU3ZjVEaUp2bUc2aDlEN05ScFBKQnRQaWtPRkdFdktSUTZpRkk2QkhIdHZzcjBpZ3c3MzJOV0J4TEpmOXFKVmVmWXk2bUZmdEhKejZMREY4NVJIdXZlQVJhL1paMENaWFdjMlcycEd0TFRXMWV3STVzN1puMTFPWjdNR3kzUGk4Q0hzUldtZTcwWVBlUnlpbFFnSnhkbjNudk0reFJBbWc0aTNIQzVoYjkrRitCR1NYUFplSXpzZEJtN0xTc3QzUWxiVWVRdTUrY3R5ZUtSVEJ0U1B4eUtud1F1Q0VwQmlwcE5rcTlUWmwzOCtZdWk5amVoZTgwVGVSYmZKaUFsemZubEk5cWxYTjlxOSs0WUlUbzg2aExUeHBLRkdZM0RqVm5YcDVoTTZYaDlpaUdGU09IOEhPZ1R6VjRpTEljd2VBelMxZEY4ZUFYWXR5Z3pHWC9DN3dmbjlUYThGQ1FHWWFVcXFoSEp1cmlCRWt6K3piVFo2Y3BJSGE4NlZHN2V5L3pHSGYvRTRBSkhmcVBXaEpydklKV0swbmNaWnY5NmJNbDVJWVpFSi9XN3BMT2tkT2dvbnpLMVFsWk1qQ0dzWnZRWGZZTmt5VFQ0NzBHWEQxdTFaeDVxRkQ2NG1RR1pCLzM0UGl3TkZybVVIZGNxUklGcHdsaml1c01VaFFtWklnTTZ5Q01lZlM0ZGNjbVBEUFhYS0cyUzZmSVAvdC9aRnI5MmRuc1cxUGtNTUpjc3cwS1BlSGwvelZlV1RDeHc2WFZHc3IwNUdKNk5BOFpVL0RLdUZKcEdNay82bmNGSWFneDh5bE8xRGtUNkcrUmFsZXovMVZET1A4Q0tIZlkzOWNJWmowVWZpTEMwOHBUK01NbG5WTHVCMEF4b0JYTURPMnVPMzAwZDd2QytwaHNjMnBNNlRaaXpwOTMzeUlrN2FrbmQ5cmNVU1poMVJ4cTRIRWFzNlBDU2FMakdLWG1TQmRvVmttWVVEenllUFVjaGFyaDltRXBkT3dNd1lVMHZiS1JFMHdJb1dNS2hnczI0QkVKTStvU0luWktSdVhUR2paeElSQU9SSVNYYjl1WGJ1WWp6MytVdTJGRWhRbVhhTThrVk5XVTd5NmxKRGxDLzFKUUFhSHFMRUlGdE9hRk4yNFh3a2lycFN4ZlcvTDdMZWFYNldjSk5pOTZqUVVHWVcyS0M1QXBsMm8vV25CUkx1YzFPeXp5YUg3eW5ZUnJ6UEsyUE5QOVRuOGlHU0dKeGJXeEJlYWZVdjQveXhuMy80RmNpRHhpemlxbzJvZDR1Y1c4Nml5NlhIb0UwRGdOdkNLYXVBdHR2N1lVRml1bGRDcnhIZTNtUkgzL0phZURBdWtDUFRPQlE5VXBlV3loWnpUN2E1SXRCajFxR0FMUngxckRxL3g2MHdNd1NyQUYzd1NSS2FlRlJPTDZCcU05N3RoNnpKYytpRVZwRDZIM2gvRGk2aUN5bnFmZ3Q3dy9ZWnNiWSsxb002QWpwNEMyWTl0TjBkRENjNUFHUlgwdDFZVWRRQ1hqWHA0MlZwM1pneHBRR2tBUXhrUU51MjU2QnZQRDU3ZzhVSzhXQWxxMFZHZ3c5OGlvbGdXRDIvNG5SSUJFVzU5Y3NhNHRxWmRpV0dKMC9yb2lzbGhwRlRuNVZTekFZYTVwU3lTWU9kZnV5TmQ3WjhSUXRSNkxtcDkxQW9QdlQzeUFCQ3Q4UzVHQm5SSGcvcFIwd3NRTW5XV3NBS1B1RCtVWC9IcUx2d0xQRFI5bkRMTzYyUDVKMjU2VmQxYlZCakdtaWVhcmsya2RtVmZtUDVjNXIrblBSeWltd0tRVllhWURNMGZUS2N5c1NwdHlyUkJqN2NibnhLNDBlby9FMW8vZzVWbkNTL2YxbkN0ZEh0UllTT1AxYU94aVZvaXNJNlhFc1gySjhvWHFEQUorNGh5czRxRzVMZ01QM0cydUY2Uk5SbEZXYjIvOXo2UWxzdG1YTUhwekdlQkVjMmxTT3B1N0M1L2tPWmxuK1J2OXQrVmdqTkFtaXhxTytjRllhSWw1TXBxcC93cHhaTW8xbndNTVdTWW80a09FRldaaFBWL0tMVDVRU2svU09qQ3dIei9jTm9nekd2d3VPK0JjY25QVzcycUF4azE1UUVqbStpNlh6QkxKZlpUcmFmdW1mYXowVnk3RzJocjJpeVdCdnh2SktxZE5nRC83M2xlbUJoNDBXd0NJellESFh6M0ptZHlTRnpBUnFOZmd4MzB6Vk9sVlpOaUJLTkVkTE5hVmZYYTZzaGxiUDVyNFZ6aDBuT1c4SmJsbVpXV0JOQVJsRVE2YzlvOW12TFhYcHJQUDlYbklDT3NOREhFVGZVMzhxSGxvRlVDc1pCWnVLTWJkaXQ4Zk91KzVSTkN1bEZjRkQvOHUva3IrQ3IzQmNROGY2M2tHVmQ1eVdyaTBFV1Bjam8vN012ejFnL3g0bCswNGJzMGVMZVp0QnkyUFhBYTNYY1ordXQwS3hybkFhbEVtQVFsRmlYKzNneld0UGVjY0xreUsyM0YzMG9xYlJLOTkwSWlsVlN6RW9CNmFPMmVEOW5Ha3A0MXdqTytPSEU5Q2hxT3dtZWlSVUZFNnBBQk1hcDJmbjFuTmdnQ21PazRLd2tldW9nTU54SUJwdUQ1T21reVJTYUI2Mk1oSk84ZTU2ejJUWWo1TC92V2hhS3g0Y1VVbDVQQ1k2dXQ2SVR5Qytkek9oQk5PNWlGdlVlWCthTURQZi9LT204bWZyTTRROGF6THJvTnQ4NFV6ZHlDdG9PYlVGNXhZbStGOUxBTXFzeXEzcE9wb3ljMTl4UUxROGE3bTBTb3RxWDE3SGdsOEk0byt0UmJINE82R2JrQlV3ZGtkQytPQm5sR21GMWphMlFOUThRRUt0OG1tZkt2Z05HQTBiek5MRE5GV3orRjBnZmVQbUM0Q05sdzlXalhVVTh5SERXakVjbjdxeXlUSm0xSzh1TUttbWVPeHZPdTR2MkR0YkcrWkcrYWY0WDk5Ull2TWh0THMyb2QyaHVLSzc1czVRbk4xMzMzR3RibktmR0FmUnNQL0REUHJtMWw4M0tTdHJ4RDZrNWZOQWxicXB2WnA4U0pZNFg5MmpWMU9FSWRON2pGL01lQTNrRWdHNXJ4SjE1d0g5OWtBMUFRY1RCVDNmOEU1TTRZNjNJMSs1TktGK1hhUGp5dWVzYTlFU0xSY2RnNytWT1pYK01FMnlDdFVaQ1lsdkpmWjlHRjlwV2Y2SXVlT0JtTFVJdEFwSXhYbHJTM00zd0ZzTitpWE1NV3dycUpyWVVzN1B4NEFOWVlSNmZJVmRZVDlBNlYzZjFrYjFaREpyV2FxRWZFaEpQT2o4c0ZwWEUyT1gyR2ZlQVJ4dG9uZU1MNzhtQVk4ZVBYc0lzMTR4aFdzMGNuK2JlWGpCdVV1SWkzVDRnelpZMWVDamZkZXBFZFp4YmFUdFNrRzJBQlh6WDEzaTJBNnZMZ3BCU3dLNU5kSkZIVlgzcnJUcWVCQlB1dWx2WjU5VEtMSDRmbG4zK0lNZW1pY0tZUmJwKzVyOFMxKzliK3ZTK1piNHM0dkFSUTJWVGdHWWNYSDQ3Z3lWT0FMZ2JIK3BwUWhPYnJzTVNTb3A3dnVBVnljYVZwbHN1c0N0YWthQ283Z1VVYzJGK0gvRUsxTmRZVlUvZTIyUE9xNmhGZXlvaFZETUJyZFJvaXdiUm9RWDV1WEMvRkRodXp6ZjhhNnBJWXpHMklTWFhiNE81Qkc1Q2ZEYjZmV2xzSkRaa1g0NDJzc2xNd2F6WVo3MzYwaVpqajZlMFNrOGFuRGhUYlo4dzJoN1dFSjVTWWR2UEVmdi9MeEFvR2pMa2NCcjdwaVpTNTRRRnl2d1l6N0tJQWkvZXljbEplWDRsRGVZZ3FLR2YwVGVDVHRaM291cG5HSVkzRWdRRDRYMWNES0g1dDVwZVhYZFZ1d3FDekIvemMzejVIYWQvc0I4NnVQRm8xZlpsWmNpeXlCTWdzaDRGUkNBekdYNjhmbXlueVVka2xSdjUvZWlHbGZNN2dLcFlBSy9VYjdHUnRsdmRESlJ3blVwc2w3bmRjNHlOQ2ZYUHpuYnlaRjZWYTFuTkJmY2lrYzlrZEVESENYckppaEVnYmdwOTZtY2FOS1loVVozanp1N05hQWpjMytUdVQxRWk3cEhJNDRqY1dGdUg2alJobmppZFRXeEMxcG16N3RKMEhtSWhiWThXcUhROWxZays2d2pVamZEZEt3c1E3VzUvOGd3cVRZR2FJVXRQaXVCQ1NjSEs3MTNpazRFRFBSa2w2YThYMHFPYzZ4YnFybjV3OTdzOS9ma0xpSUpGdXo3QWliYnNUMTFjVllnTXVaZnpyMmhKVG5LUy9QWElzSWJEYlhVcCtlNzgzWk1mYVMzV0NJdzZDVXlNUTdWOUdzYlZQK2EyR3RlWmJUWmw0cDdoZ0NCTFEvSTh0cjFybmJYWjRibkxTcDFVUHVBUlVwb242dXduM3plRmtFN21mNHRTdDhrSTRscVl6VVBveXpPZWNpYmIzTFB5KzViSUEzdHppd3NwelJqSG9DaXBUaGx5RXcwelArWkl6bERtK0ZBWTVpVmJReTY0NUhxYkFXajJYZTlGUlZDQkUxZmd1TDBYbDY3NzRPQ09sVDJDdHZwL2pqZE8yRVhXRml1dkhKRHhhai91djcvQkpFdUtBbGNhNC9OamhBdEtvNlFjbG4vYUh4dEswLy9QVTg5dk12OVlUdFNZVnBDS0pteXRYSjJYOXZGODBMV2NCMUMzM3I4UFpxeDhxRXV4WXQyTXJOc3VPcHE3a2FIdTVTQnBRdldoZHBkTDhOS0M0NlIybzA5aEJqRWNab2N6Z3paY1l5RHZtT2hPeVdrZVQwM2VrZWlBdjdtenZDMkVCbFYxMW8wQVhoMXpVNTJGcWFQaVIxWTU1M25VenhEUURNMmhxZFNnVTk3NkVuUmxCbUUrbmVpNmcwT3NjMjlGYmphQjVGRkc2QlVpbEQ1RGhyK2JnU3lJNzZsNE9rN0x2cjk5SytnbzJIQkFZVTBtMHE0ekY5c1hBaExjR1VDUlFRZEJqNEt1MXN6Z2p0azE0VUFPdDdGaFlYY01PZ1BKVWl2K2Q0VERJZm1GOXVBWHpYUmNabklLYm81ejkyRlY3V2d3OXB2OVE5TDZrY0R4NkZsZXh5N0drWm1CM2RXbkJrS0pEbXFEZGZZdVE4MkhiUTNzdnJJbmlETjFqSkNsSEFKa0R6ZUQxcmFOWTVkQXhFcTBSeWRiY3kwMFA3NlZmZUpkOHJtSjhqUkhKWjhFenNLdTBqdDFESTVmMWJYWkVtSUlRaWVkbi9TdXNaaHBBRHMxd2NCaHdUYTc5M1FYMEJ1UFd0R29hcmx0Q05KU1NnOVhMV3VEZ1pHVGp3UnM1cDVPemN1WEU2bUxPSlA5ZzJFWmc4RXE2ekt6U0JXU3pENEhONnZwMFR2b0E1TlBETWp0b1Vlb3k5eGdFV2owYUtzL0NCaEFrc3YxV0ZsU0hGUERINVNrWW5GdExoY3BXTnFpSzByVE5QU2dhRnZPUEgyK28rbEIraHRJd2lVd000NFpYblo5djNWbXBJYjVVT0Rjak01Y0dNR2hrNThNWDdDeHZiNHRHaHByQVZBS0l2OGlvUUlTQlI1enFZOW9rSnlxSWZPZGNya0NPbTRXUytWeStPMWFlQnEzZ3hsMFNFWlp6MEtIczBwMktJQUlTbkNiSUNWeUo3QnBCWEo2Z21RM3UxQ29odTdQdWRhRXFGc09icUhLaG1KaHVTaGxZbTRwM3NEYXNpZmJ0ZTBJQTUyK3ltNVRSbElCTEx1OTBDaEswbStGYUgzcEg0NWVKZVJmTHIzTzcvVmpFeDJRQjNIVFBuQjRXdEVEeHlEL242ak4xMUhqcURNTUlkR2NKemVJcEwxcDB1Z3grbDB6ZG9HRVNmZmZNbzUwZkZHQjFxb3grdTdQbUVzR3pGTHJKbGdLMXJySE5PdEp1ckt0K01ZNEt5a3l6NlhkY09SQWpxYXZ5ZEV1T3RZWEwvRG5vbXU0WXgwMkMyd2NXRHByeVFrUG9hellVZk9rby9GeFZEeWlpK1VnTFpYOVF2bENDaXpEU24veXprUkcxUDE1R3RZOUZJRjhqaVd0Vk1jeTRhYlozZVRGaTB4S3BpSzB5TkJZRy90cVJWMVl4ODU2bFp2NnFGam1TdWRBMmMwUThJb1FxT1RSM3lQUThJL2Raa2Uzbzk2Yjl5VEhHc2RLTFc5OW5sNDRRNFM1UU0rV0dwdmRsOTFMQXROWm9DWWVtbG9mZEwvVWlmVW1WSENwb3ZmQlhRa1BIZWNRUVBrcnFTV0VjMHlKbDVuMk1HSDJybkdqZG9GREVRb3RWL05nc3BXaSs3bkw1MEtKMkNaSmY0TWZWeXMxdFZZRkEwbms5aDZNSHB2L0M0Y2VNL1lsTzM4bFp3T2RhbUJDalZDMlFzUExtb1I4Qnl5YzN6amNKbGpXMkdzc1lRQ1UvclNrMzNnN0pCSzluczNZdERJMkJHMzZ5bFVxa1I5S1hqbGFKaHA1aUxqVHJMeGpCMTNBYThSemRUVWVGMmVWcXlON1ZyZWc4MzBpdU5UMS9hMUo1ZDVZL0VNa3lselJCSy9ac1B3MzVTZ2hFNkpTZ3I1bnFaODVVeUdPdzVvNlZCYjBENUtjaFpsOGJJWFlyL2FCRjg1bFpKaC92TDhEN3hXUGcvRUJ1MTFKZXdyRldFQ29aRzM5VlpMbEx3N1BlSG5qNEZ2K1ZScXBjKy9qcHRGOGVZb0FINzYvWHVTdGRZY1pQaEFPWDFWbEZwRVNhZXdRek9qWkpabVVNc3NwZ1Arb1hGRVNadUl3c0piTmRhVDdCTWNqWWpqYkludnlQSmllYW5DeTJBU0poaHlRcjJZZjlZaE5zWkk4WE1yZGJWTHVzUmY0QXI5WElOcGZ4dTZoeDNIeVNRYTFjSU81aWJSVk0zanNTbVJiV1pHcXlvTGNiaFJOaWxLSUE5NVVUM0ZPeTJvaWtQaEpUZ2ZZdHNoeUI5c1dsSW1nOTVlSTk5WmFxb0hvR2wxeU9aaVcxZ3N3cW42blF5ZUZmcUNMWVFSVUJBQWV2REVydnZncTRucWZmY3ZIeTFYaGpwRGxWQk13WmdKa01LQlBwejR6SWNOemV4ZlI2YzYzZisyeEIrRlIxNEZBekFBVlowREV1b0J4STY5REl5cG16YkxPRDBCUHJnRkw2MlNIWjhFQVd2eDFDR2YyQkE4MTZuY1N5ei9HdkRpZzcyVmxZU3R5UVJNUWlySlR3dXdNMklEL2lqbC85bDU2OS9FRytmNmhnUXFTMVJFb1YyNzZzYlhmUUZ5Zno2dXhkL0p3VzRpSDloY2FyZDFiK0tOajdQWEY0SmZ6MWZ1NFNCbm8yQi9EVE1YTjIzQzJvdXptaHBTcmEwRmdvS1NIZDVwcWtaaGxKd21HMFpTY211QS92Q243cmtRM1Jwc1U3Ukl6aTRmU3ZSZlpvcmhkWHZ1UERVclNvRW9JT3YrRVpmczllSzAxeGpBZ0VUU1dXaDNERVREYnR5eGljYU02WXdlMEtMZXcrZDRXNFMxOU9RWld1Qkk2V2Z6US80RDd2S0dYdVVEMGZzMHNPayt6Y3ZUa1ByaUpsOWpjeUVKN1pJbVZobmJVaG1Ocy92WG9ITUNyNmUxU0lFblNaTFRaZE1aekgyc25iMmpRZDFXd202aWR2aXJaejFhYW9ZdHRFWVdRaG9EUFl1Y1JDUjdsZ2owajl1MUMwWDM2ZFpyVmo5ZDRxbDdaQ3NvUTVZUmprRG9PbGY2WjJCRkk4cnd1eHdOMk5hcE5MN0VPM3lNTk9ET3BMaWV2bGI0RFdDTCs1dDRJNEprbEc3eURyRzQ2aHNsRDhrSmZkOXJhRS91WUxmazFSeUc0UFh5cGEvdVFQWHVPRC9GWGtFWjA4RmFpS2xTL2VaSnVxMytVdEtKM054WmdBZGluNEFFQ3FaaDV3M3hNZUU2ZHlWeTEzOGw2aE1JSkZmU1NIVzZJbW5IZVY2Yno4OWdoSWg4ckxIb2xvYXJBeHdKaEtpaFJ6TkZnRWw5MzBabnRnZEg4SlRPM3RPZ2lYeFZkOXQ2eHdqMGtKMzR1QU5td2p2RGVjZWhrOFRHR1hxSXVPdDVhWXp0Ync3Q0drMlhKa3VnK3I1eVNtTzYycG5JY0lOWWRYV1ZJRW5oN3p0ckoxbGJybnVUYSsyVlBxWnorVjJLaVNBY2dxRFAyV1ZwVDBJMlo0QXZWNGsySVJMMnVvSHVleCtyc1NKQzFaQ3dIcmRSQUF1b09uSGM0N1paYnNQUHdHWXFZZG82MkVSWEt4aFEvRTZIYmdlMlpUMENBdWV2MHpjclR0b3F3TEFnekZ3Y25NMkEvUk5weEpORmQ3RWQyMUp4RW15azQwOWExOEErOWRBTS84SUhXVU9oa25qdENrOC9wZ0VYVDNWNUc5ZWhaMnd3ajlLcGxzM1o4MFZLNHFjdEkwY0ZWUDVxNkcrVDBsa0Q4VjRVTkd3WWxtenA2M0pEdUxoMWRaY2Q4WVFMWDdvMXl5ZjhtdzBabEdPbnJ6UFRpdUVvMWo0THpGTFQ5a1BnV0JXOUg3a0xtZkZDb1kvZmxXeU93K3p3VzZEaWtZbk9nQi9Pc2ZmMXY0Tm9vN1QxYzhFcTFxZWJEMW9BbTVidE90UTlsWDJERE9jY2lZNHd2YTdXWTN3UTMvWjFydzBSZVl3WExBNFV5YXlrUHQvMzZ4WVRBUk9Vak5wc2IraTZpdll3OGw5cm5IeUdFdlQ4dG9jb0h0QmgwTUdhWnRTNC9KSWdIUmloY1liU2ZDaHdSemZGd1R2RkFSbWl4YTFMRkxva3JrTldiMCs3Yk1ZNzk3NGVFMEhEMGgrd2NSSnJlWGMwdzYyMTJiUW9Zamc0Q1lyQjFnQk5KbXpKanFuQkZINDVBSTIzMzU3TlU4OFRqMVZXWnFpdE50VHBTMCtZNEttZkxoV0Nqb3VGQWdzcG1FZ2ZnMENoK2pScUpHN3FscHBiQXRTSGpVaXlmMmN2Y2RrYWNLQnVlK00xNndZVi9uSnRzcGlubjVRZFFPdzkyZWpjdGJzN1ZWcTM3ckdkYkhkTWxyQVVSRlFtanpTSEFoMDlZYXltWGE4amQxSElYTG03bnVaT0p0KyttSVl4dmw0blVHbDZMRzdua2JZbzRWUGwwOUJicFFtN3piTUdybVVoTUV6NE5pT29jQ0JNWC9sa3FOQkhvcGx6SlNETFNSZVQ2dHJDUkpxV3R3Zy9oTDArcXB5bCs2OTE1MW0zY1BiNWR1bTkxMms4Q25JMUV3WHdqQXFwL283NHJRTDhWVm5uNmN3YWtqcTVuN3dkelZRRThOZVp2ditOTXRBSVRSR0YxR3BRb0l4UCtvalp3aXB4WXJCQmFQR0pRVnlzUy9BRmF2ZUYyaGxUdERpVUV6Y3RxcXdjWE9TcUgrUEYyaGFUQ3JEM1A2OFB1bitrMVVWL25CN01YN29VT0tINSs1UXBicnFXZStBZThOWGZNQVlyck1SM3F1THNVYklBV3dOT1JEdmFkRW9hVWlieUNYc2tDUnAvZnlEOXJDRnNlOWsxOEVaZHNqdzNza1VTODl1WFA2aVMzTkY0T3hWNE0wekhTUDBPK2tLSHV4cXlzUDlmMXZFb0tMSExndUlRRWowZmtDYlBVYlE2QWR0NnNGL3JRd056dGkzdm5qY0tIelloQVdCM2ZrZDZsR3ZJaU5zWlAwRmpzK2crVCtQaGx6MnVJMkNkcVZmT3RFbENTM0k3bzRiWlpMMFg1bTJSMVh6S2U4VlpOODh2dFJPcWhrQWdEWmFmRWJwTDdLTmJEbTd6b0NaMHc0Vy8zYzUrODBnRXNTUDdXT0lMd0c5Q1hxQ2xEQXlBU281ZDFlT0grcXJBa1lyQ1pwRlBpTlN1UjBlS2daeDByN1Z3Mms3SG1LOW4yRHA3NWdydUFWK3VlSzlNcHo0ZGM2RFFTRUJaQy9lNkdzS2ZjV0NVczlOVE50RkcxWlZBUkVYRXhoRTdzNGFTbWJZZW1kYzVaV1ArcU9rNFdRKyt0ZVhCcDljTnE3TllkOGVjR1hJN0V6NUxCNmlTUzBuZnZDNFdzV2d2RWhmMnU5RTRXWjByd3FCTEVjNEwvbWhSaDREcEF6OGovTmJzYVlaYkVzQ2NyaTMwdU9SRWU4bTUraWhseDlmZXAwVTl6MU1FZFJHaFFKMUcwendGNlhCMy9lRFExN1Bnb3FDcnFCSjNsczhLM2p3VTdsSnB4VmsrZnFKVVAxY3JLNSthMkxEQ244dUpjc3M3YytKNWM4Wmo5VWlUL0Z3RG1YcC93RWtoN1JaRTVsREtZQWh0L0ZKMWh1QXZJUXR3Y3lIKzRINVlNQzhvYkxheDY1VExUYnNiMGJjRzc4bUljbkxDOEJKZjZ4YVRwOFVmeVNXQ01pdkhNNTB2TFVvaTZOako4elE0MW1ORnA2RWN2ZUorcnJFMU83eDI3QVEzV1hZNTBqdkEwcmc1OUpaRjgvUGhDR2xFbG5mYUl3SnlvTHFUWFQzSWhyVHo0SW1hZ09CejRxeElZaDRvWVdDdHR6RE90SXZNRkxZdW0vTHNUR0Fhc1Q4V3FEVXFSWkkvVFNYSG5hbmNnMHJOS0UvV2QrL0JMVFdpOXd4djFMZzVlUUxueGNMT1hIcklOWVc4eWtLZDZVdi9SZUZoQkFkdHVyVzlwV1ZqVFFHb1BGNDNEcWdyMWxjanJjMWFNRWt2YzU4VGZjdVk4UDZzc1BzbUNrZG11WFNJUzA3V1B2dXRQVUE2L1ZaTDN1NGUrRW1tc09ucmN5UlUxTUtkSlRXTnI3RG5GQmZJaVJWS2VZTk9Db2RtRXI5b3dtRmRRK1psNU1uU2JSOVNMeFpPUUg5VmQvUHJhSEJMaDRNUDFaK05kckN0ZTlHWHNQOHBEWWgyT0FNWUwzcUpTaGtCS1Z5dU02WUptay9mMyt6MmtVOHhWM295Q2tEU1JmMk9zZmkrQ1ByeFpQV3ZIaVFkREJRNEVTUWs0c3M1WHFBQzVtZ0xacjZaNWVWbGtXaHVjVVgrNVNzQzFYL0FVMGliTStGUGQ1RlM5VGV3N3lHZE4yVldCS2xUcmlhSXdJWHJ2ellkVWpmbjJiUGROOTk0K0tZNWl3dFRpKzNiV01ERVEvZXZZQzBUazljTm1neHNMZ1VSRGJOWkx3OEVpMVBBa21GSGIzMTJqZXkwSXBMTTc1dElTNU5MQ1VSZ2xUcnRvZWRSSDQ0b24vWHlpMExiU0dUTU5ybXRRTE1FRmRSdDVMbEt2bGZiTGUrOElac21QS1NHQmFNODhGcUIwdWliNy9WOTNjYXNOeHdZR1IxR2lQNEh0b1YxUkRGbmhYOVlJVEpNSVRXbC9CZ1doeXpIUHlZeEp6UjNmT2wyRXB5Umg4blFDZkVPWVNRTS9pRjZzblptTHprVmlPZUtRa25OQVRPODl3T0NrNjBCQWJjYnY2VmVPVVNaWGxJbzBGM1hlc2FPcFZPV1lBVmNpL0JuTWd1ZGNjOEl2cU10QlFadHovQlN4R1ROc1hNVDJlMHFYdTQ3VExBdzNOVXZYM2QzS05ucGRYR25WSWVOZXk3ZERFU2lWb1NvcUZlam1BdjR3NTcrSEJaZnlLQlgwK1o1WE4rTWthNi9FN3YrYTlzNmxPUUVHelo5TFRydzFrOXc3RWlqc3dZMWFYcGtDcU00Y1FaclFicVBtNWNXQTdKZDVESkZocDZERmd6b0JaN0hnN2E3VkVleGxxZHNqYk9VL0t4dGR4dnlHUWlPSFliQ1hmaWxiY1U4M1JncG5UVHJKRll0cnMrV1hnOXBEVjVjempGNFhRMGdPNktVUDlzaHFPL0ZoOUtKdmJYcWFZSDNWZ1pYVjlrSXY4NGZaVXpLTEhUMUVmZ3NRM2tRTnl1NW1hREgwUEJYdURmSndYR0N5SnhtVi9ZMUZFWUtub2psbi93WVRnZzBWM0NUWWZ4cnVBSW1kV3l5NkdIR1NGek93ak1xK2RVTXBLRThTSHp2cS9ocG9nK0xPc3dLblEvcVRoSlVxcWxkemhUcEttTm1nRTZLRjNJaXFJbWt4UlRLSTNCbE83cTlrRE1nd05KZ09VTHV0RlprdVNmTjR1OUQrZ2l1WURieklUWmZIV2VXK09rRkJnNUltdzliMW5rSWU4M2l4MmxKbU1mUWsxVFNWUjJzSWRNYnpUWjZ1ZHJSaGhDZHdFbXBVb1FWQXROa3RkTk42RFduVmRIZ0dzUUR2ZE9ULzIrRERzSXFhSHVBUGc1aDFJRkhLRlFpNG9OZzJBNU9XaTh6K2xiak05U2kvUzNLTi95RzJ3L1Y3cGRsdjYxeG5GWGVZUlVXVWdvbkJCMUVYV3JwQytYZldVTzc2dllxTE9Jdm9nQ0lWQzA5elNZVHF0V3dGQk1XemVCT29hUjM2K1JSbUY3bVN6OEh6ekhLdThTWTN6b080SDdyZSt1Y3Y2QWNlQitlalpYbFQ4ZE44SXJaYlJ4ZHU0OXhuRmtQUkZZRHpTU1FsUGkxc0o1b1djSndQZ2xzQkdiWklBeXYxK01wUEFtbDQ5R0hydjhGMDI1NjFoRHFySDVGaVIwTnhmWTMyMWlMUmJ4bHdVVW5pcjU1RzdpTkNqaDRTa1VRd05LanQ0VktFUzRwMWZTK0lITFhiMktZaFlETWxpb3B1SXhxb1dlRFRmQ0lmS2lIRFIrOXB2Q01mSzErblNzb1VKK3RPQjg1K2RXVk5GUVJUMHovdVNablR6UXlMeVA2VllnbC92dHJjeXVXYndBdEtTeFovcXJOZmRRVXZGWjIwQStveWNhUGFOTGtYR3lOVDNjMSs1MVFwZVRlalYrYXV6ZVpwNk5XRzZDaFA4Z2NNb0FxTkJ3QnlzNXoxL0JJZytNYXd0bUVTK05qQVJnUHZtTWtCd1JSTndMaDUycGQ1MFZjWTdIWGdYWGQ3WjY1UE9ESmNyajJMMCtKUDhhbHhSNjNuU2tnQUdnZHpjSFVvbHFBT09rR29WNDkvZis2OW83L3FnQVRZM0x4L3hvZkY0eGR4dUtmVWlqWSt3elM4d204bndQWW1oNUhFdTQzeG80dE43aEk0NHRvZnQ0NjQ3L2MvYkYxSVVnUUdLVUZpYTcxdndEVk5XT1YyVW1pM0FzMVpYeTFMeWFpS0cvNE1MamI3YXRmRGwvTElzM3dSd0l3Z2RheGxjWVBPZTFEd0VMZitpQTZKNGowWW12OVRzVDhrZGZGOHQvTGJ5ZUtwaDRuQTlBSzBkYnBVTkc3bnJZYTFBYzhsVEY3MDBWNVJhcjdlaC82dnBCRVM5djA2clIydlJPUHRZSkdxWUdRYkxWLzNBd2U4VUNETHhDVkNBazNiU29KbDVXMjRaOHBXV01ubDhVbG1GbnpXV3VOSHEzVUhnQkd5emR1L01NLzJrTHNHVHpQUXJ5TTB0UXZiTEd5d2ZyUGtLdFlSd004NTNFdisvNGNseTN1dXdtZXJkeVhTREtqeit6RzdHdnhmays0MmwyOVFaazNBZDRHSndlejBKaHk2dU94c0FFbDlXc2JXdE9ZdGgwUFZEWUNCS0orbXJoTTJNZWhHNTE4MFpvNlNjTmJsUEdjZWJiYTExNjQ2K1REcS91RU1rWE9JZTNFNVlDRzVON1lpTmJ4WGQ3MzljUS9vQzFlQzQvcURwNTVmSWp5aU1EdEpDdWJIMVA4SlYwV21TVkluOFYwRFdPY2pkYldycUxJNWFEWTFqYk1xaFpQNy9lMldJcGxubjdqNEJQcnJTZXdSMkxoa3gwMjBmNG1Zd1VneC9DYkxnVjY2RmN3eWpzRHlrdWEvbHVNZXNSWVl6dlAwN2lUc3hCSkp2d1VVQS9ZVmdRZFhxcHcvQ3RCZnU0Q3Y5ZmVmZVQvTHpCcFJ5UGZ1M011alpoUnMrSjFWZzBTc21sWmpZOGZZSEh5MzJ0YVlwMUdLMFpaWDdBeldpQm9TVXg0TjlRa1BPbEhrTjFOV3p2d2luQmdrMmdvUEN2MVZLNU41cDA1QnQxYUFFZzFPRGtJQitwakxXaURlQnMvMDU5NGI5ZE9aK3JnZzUvR3ZBNjJiMCtSOGN1UzhTQnZSeWlOa0Zqb2VsZjRGam1ORnUyYWZoVnBnWkEyQ2ZNek5LT29wck5TZVhxRkNjQjQwb28rQkpvZGFnU0p6Ym1Jb0dkMnNvdTY2ODlqSlRiWEY3MXIzUUI0SUZqSkxiMjN0N3AwWkY2S0xxSnh0VEdNRFRwY280UjZ5QmZ3TU96ZTJ0NGszdWI4TTRJS01PakVYdDdJZGxieDBNYjVxREFib2o0bVpMKzhjVHh4YTl4RjF1V3hidjNjUFBwSk5YR3UxTDY5VnNBdzY0WFZ3OWRiYnhFeXYwa1hUTTBXUFVoMmwrd3lJNVFIY1MyckgrajZYVnBDdmgrbVdCdWtTTTRMbEljWC80SUk1SHJWTnRHczgySHlDUjdOQUloOGpZUWwyMHJFNXN5OWMxQ0ZTbzNkdytaQmJsc0QrSGxmNXdNdTFCYXFWeDMxb2NySnR3OFlMNzJIbXFNYUR0WHg2NndoQm03Ymp3WjRESjVTcXh5S0Yza3BOVEM2aVpNWFVCUWtvRStKcFBnRXpYYkpjWjkzWVhaTlUxTlBQOUJoVzFMdkFzYkpYVTdDbXRHNVZ4L3B2c3BESzNucnZ5OWhSZ2RkYy9CQnRVazJBRlpHV1RzTkhMR0Y4SWpDYTVtRlNXa1F0SnJ2ZEpaSHVuSVFjdXc0Umt6dVF0bFVtRmZtc0J1QXI2aElwVDVaSm93dHJjajIvdmIvdG1hbHRJSkg3NXc2aDBvRUlWeG83RUJWRHcrLzFMdWtHbGkzcldESndKeDlVZk9mRENXMkdaWFEvWVlqNjBwRmpqRkNzSkRXSnRhc2ZzQWR5WnhMVm1VUmhSYTRGNXJseTJoWlVrNkdQUDZOai9JM2FrRGhSS0FBMUlxK1pjcHpuM3F5a1RrL3Z3Qlo4b3FpUUt1eXpoY1B2QXl6eitIckxlZDR2UnRUVE9zODNtVUwydzh2L3A0VjhTOWJVVkRYU0RmdS80eDhYNitDYU5WSXkzdXVGdmtRL3BEMWZGSmlvWERPay94b0pvTlhJWkVONGlFSFJ2OWFQY2dNWk9UN1pueTQvSXlhaUxJZTRoWG1iYytVbll2bHFmNGpBd2M2cXFOOHMxU2dMVDNyQmxKYkw3dmxiOGZvQXRFbSs4UkVlVHNIYXFyZmtDb1ZVWWN0RHhoUGxMYmZwK2VNNVpibmdWMHJwbCs5a3pacmJnK0REWmo4ckFrNnJKbUN5UHBxYXNVTDJGbzZVWUJBZWFBaE5IVytiVG5oWEkxS2x2SUpHRWpBOVZzTXNWbXEvWDlxTTJTdjJmUGUwRWEwUDhBaDdtd0VtNXBlbU5ER1hLU0Q5anJkY1A0ZlZpV1AzV1QySHFQM3ozZUVQWDF4R2grUVFWSWZTd0RoU2pnanBJcjIxbkZtcWVNaFF2azhNdWJWN0Fuam1SSWlNTVZwbEovMnk1SWtGblVPclphL0I0UzhpL0Y5Z05IWVNFMmVDL0dmazUwSGl1TWZOZ0tTdlpKS0Q5QTd3SHFOV3dtWStiVE5sdXk2MVNMSGRVS0JqejJ4V1Vqd1IvYnZXNFUvVGI1UzMwNW4wQXhSY1J0LzFnWmdzcVZobzZ3U1oyZ21aK01COHIzcm8xNGZRUEFqUlZzbVNPTUNUbEZucTVmclBrbGZFQzR0WFNWcm5pYnpRUHRPVnBTcjh1T1c0TXdTY0hEdTJCNE5yRDcyaEh2cnVpZFFIZlA0SkFNOGcwY1dHcURNekZXSlpuc3A3QlFmQmIrTmcwQ2dheGUvV3BiM0UvSGFCNWQzMGprUnNkeU9ySEdwWWFtVmN4SnFoTjBsbllRcG1udXFxcFZQWGpNc2VodktHZUpJQ04vNHllUStYY1JKYUx0R3h3Z3FueENqQlRRcUt1Z05VSytVckVqcUJZSUFuSzcva3ByeVBtekhxNUxSampzZ2ZadGhCK0MyV2xGVDhQdnJVa2p3ajFrVUVYK2VnTVdnVmo4bnk4Z0pyR09KV3ZyUkVHbzhkQlAvemFjVkt6bmNhQ3NZdjgzZldiR2pBT3FEVEUzQ3ZpM0JLak4vYlRXK0FxRWorbDJMSWpYMDRLMXc4UjRuU2xXMEx3RHVJYjlmaW9id1BEZEpGdSt2MTVzRHFSdEcwRmN5b1hqQ3Y0L3pYRE5aeVl1WVpsQjJEQkZZS3lCcW9mUjNQem83WjlQUU9NT2ZHbjA1aElNcHF2Q3J0OWpObXJIWHhBQlIwQTFZamdWNkRoUy9PbkJvMGZrREh1ZUxlR2pPUnNyUW5jK2tJZG1JYmd6ampIRjlsYmt5VWpxNHNpVWFyWUNuWU52dkdMYkRmRk1ZeUlPcUJNYmN1eEJvSStUc2RiNlJqa0hvRDVzWkovRXdKckViRWs1WnkrbDR0Z3BGalFjS0VqS0V3U0ovb01jejNDbEtMZGtDWjZnZGlLRWQ0cjN4QVBLVjNLZnROY1BjQkI0Z0F3a2F6cnFXdkVoZ0FGcGpNNVlHU05CV0dXUUQxVndIQ1RYVkJiYjcwcm42a1V5aEpENEtmNklQZm9RN1EyTk9jNW16dU53VGdDb01xWkp4OVBNOUVHcGdTUEY5MFBEWDZSOFl4NWUyRFVCb0xPakNXNU40cmpMOC90a2ZwM0ZWQ0JCQnlhdWdzQTNseFdhMHV2WmsySWJVWWIvTUVGdGFEbElZMTdvZTdOWlBweUJjV25aL3hwWCs2VFBub0hPRXdHcmdSVGVHc0N1S3MvZVdpVm1zRkZSd2x0WHU4SXhHcmVubTRxRmtLaEJqYlFrY254MlBUZDArQkF6VjZzS01kRWRCN0lDcVBLeU5iaS94M3ozazduT0dHc29xb01oaUcwMkFBemU1bzVSb0Y4UWZVamFaRk96ZEYwWklzUUE0c01IdkVoUmlWckE0N2gyY0o1V1pucGJtSDA2TGxzT1kvRmcrVU1ES0ZtTURDQ3BSTkk4d3RkajczNWtFUzBBbkRDVll5ZmRNeURQRTBVSWlxeHZzL25kdkt6ZFBza2tOd2k2WE1laGs2MWVsKy9ZRlM4TENaTWR0WkNUSlQvNWFkWTR6eE9PZ1phWE44Q0xNdkhuWVdoYW9vNThEYnl1TCtQU0ZBTUw1Nm5NbTl0Nmg0UUNYTjFsTXRyVkxheng3b3dyaWkySmVKUVI5UDdHaWlORnNDVGsrdTg1RU80N0dPd2xzMmNoQmRRaXVzekNoTmtjZXJ6RW1pUEhnQUM2OUkyNFhRcGdseGJ2dFhCZW45VHpVVWI3THc2b1BwWUx1bTJYcGtOWlczYStpUDFEUEVER3pSRFRyVndLaW5uV3FwYkpsdjJZMWZ4ZFV5WGcrZmVEeEt4Vm9JSXprNUFtL2h3ZnlUTlVybEVCUGNncWNCNzdXUkwrNlN0VVdqM20rRmt5VmxnUFo5QkZIRTBBNEd0cmtlVUlsM0t6VnJhQXdwVmxHb0psMlUvT0RqNVJIZUNKUnhzZmtjcm15UDZFY3BLQjVneDB1SWNRQU56NXF0cXB6ek9jVHRiUGE4SjJjTnRKVnFIbmFYbWZtMTE2WEc1aHpjalUxZGw0eVBVTVRickIvcDJZNXpHODVPRDB1cEFLckFrcitVanJ5Z1Y3WXVRUUQ0bUxTb1NXZVdFaGxodk5pcDI3ZURvSTVITW92eWtqL1hXeHVxV2E4U1F5RlJkYkJkeis4T2hidjNEMXk3Ty9SYkJRcEU4YXlRMFJnS040aUpYVFVmdFk1YUppaFN1N1VtTk1vVkxmemhFOFBzRDZlK3BmUWd6TGM5TnIwNGFhUXlmYitheHNhMWY2LzBXUzN3eWt0UVZHM1lpRGUwam9uYjBETU4zVnNYZEZjQ29GaGlsNVAyZEJ5eHZJL0ZBL3IzS3I2OVhwTmhvT2JIWWk0OTdqWFJvWVN1ZEJZTzBWUDhyQjRIb2tiS0NHR0hxOVQ5Zkk0VDdiNTU0emtkTFVUZjhsb21ubUNzUXlYT3F4Q3pVQ0JOT3VDb0lBNE1PRnMwZ2VlK0dhV09sQmNzUWwrcCtZN2x4NGtQa2kxUVB6NjVVMTFBTlhvR2Rsa2l3SGgwUEhHUEhQZXhSRWhlNlp2TzRQTkJGQkFqZW5HL3NBcFhKbVhYSmIyNHZoWkd1V2QyRTdVU0IwODk1Yk4yZlNsVzQxSkdNYTEvS2lWMGpNUmVuK0xhRnNrTElrNFhNczJibEc1ZXBQVkhobXVsWi9zVER4SUZuYjFlQUoyNTBmKy9zVWtiNndyWDh5MGxWOTAwV3Z6SEZJTlRqeGIwN3ZPZVppdlFmQWdUM2djZGJOaTA3ZFNDNjl0aW1TYWlMTm5GZWZacWZqUE9CdUVBWE5qU3pHaGtwaEV4UDMrVWtjbWE0eEx3UHFvVi9IMVZtUlR0eXl3SDZzNjkrVmtybllQYUtqMXNMQWhIbmhtb3duRnF4ZGZhLzV1MmxERkNEMno4WFgwdFY0NmhZeDBSMndBZUdrTVV6QVpLclRhaGloSkVsT2dSYVY4Rm4weEgyZWlGT3locGFSYUtMMDExVE9LNXZuaEFyY0txM2lZaVZLREwrai9lbmYxcEdma3U0N01hODhHUUF2Mk5KQlc3SytTWlAzNkYvLzJRQUJBQm9BUUFBQk9RQkFBQThCQnprQ0FBQUFBQUVZQWNCQUFBSUFDUUlCQVFvQ0FBTUFHVlJvYVhNZ2FYTWdiMllnUm1sdVoyVnlJQ2czS1E9PTwvQkRCPgogICAgPC9CSVI+CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I+MTwvTWFqb3I+CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24+CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I+MTwvTWlub3I+CiAgICAgICAgPC9DQkVGRlZlcnNpb24+CiAgICAgICAgPEJJUkluZm8+CiAgICAgICAgICAgIDxJbnRlZ3JpdHk+ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8+CiAgICAgICAgPEJEQkluZm8+CiAgICAgICAgICAgIDxGb3JtYXQ+CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24+CiAgICAgICAgICAgICAgICA8VHlwZT43PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MVo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU+RmluZ2VyPC9UeXBlPgogICAgICAgICAgICA8U3VidHlwZT5MZWZ0IExpdHRsZUZpbmdlcjwvU3VidHlwZT4KICAgICAgICAgICAgPExldmVsPlJhdzwvTGV2ZWw+CiAgICAgICAgICAgIDxQdXJwb3NlPkVucm9sbDwvUHVycG9zZT4KICAgICAgICAgICAgPFF1YWxpdHk+CiAgICAgICAgICAgICAgICA8QWxnb3JpdGhtPgogICAgICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24+SE1BQzwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPlNIQS0yNTY8L1R5cGU+CiAgICAgICAgICAgICAgICA8L0FsZ29yaXRobT4KICAgICAgICAgICAgICAgIDxTY29yZT42ODwvU2NvcmU+CiAgICAgICAgICAgIDwvUXVhbGl0eT4KICAgICAgICA8L0JEQkluZm8+CiAgICAgICAgPEJEQj5Sa2xTQURBeU1BQUFBVWZwQUFFQkFRQUJSOWtINWd3Y0RCNFFBZ1FBQUFBQUFBRTdBRUFBRHdJQVFBSUFRQUlLQUFFQjlBSDBBZlFCOUFnRkhRRURBYmtBQVVkbkFBQUFER3BRSUNBTkNvY0tBQUFBRkdaMGVYQnFjRElnQUFBQUFHcHdNaUFBQUFCSGFuQXlhQUFBQUJacGFHUnlBQUFCdVFBQUFRTUFBUWNIQUFBQUFBQVBZMjlzY2dFQUFBQUFBQkVBQUFBYWNtVnpJQUFBQUJKeVpYTmptY29BQVpuS0FBRUFBQUFBQUFCcWNESmovMC8vVVFBcEFBQUFBQUVEQUFBQnVRQUFBQUFBQUFBQUFBQUJBd0FBQWJrQUFBQUFBQUFBQUFBQkJ3RUIvMlFBSXdBQlEzSmxZWFJ2Y2pvZ1NtRnpVR1Z5SUZabGNuTnBiMjRnTVM0NU1EQXVNZjlrQUJBQUFVVnVZMGxFT2tkU1FsUXdNZjlTQUF3QUFnQUpBQVVFQkFBQi8xd0FFMEJBU0VoUVNFaFFTRWhRU0VoUVNFaFEvNUFBQ2dBQUFBRkdid0FCLzVQZkczQVVONHo5RTlsc0hEbXZXMGJGemNhbmVoV3dQVUp6aDNSeExodVBBejJsckpVRnRZeHNmNnlmOHJtT2RSOWFsSTVieXY0aDFaYTlnSUNBOHBneWJJdlJsUTdjS0VGcTZkbDNVWndhdkxKZWdQRVE1VmdHeDJZQ1I0SlhhSE9vUXRVWDYrdUEvQWhBeUtMVEljblovMjZ3OC9oMjFYZHhQT3dNSmNWaGJYOTlEQlVyM1pBWnl2emZ4MVFBT2VlbmVUUE9BOFBURXFxZjFQbU9GMkpuRi91QW9WMEs4QnBUQUxhUmVQOGhJS0g2MWJvMElrWGxZeHZnenViUVV1NWtwSnhnMTgrVUVpb0laZGRBK21nQkh5U2c2T1VwanVPTkdKQ0c3M3hlcmdjUWt1STdNREorL2Q4NzZwSGpzb0RFNGp4SW9zT0cxKytaNDJ3NVdaeHhtZWQ1ZmgzUHoxT1dDRDdtU3JMWko3VzVpeTRLajVjVWdGUmw0bEVBend3QnV3S1NQWSszOGk3K2xjaU1hOU9jRFl3cHFlU3lkQ1VZZ0FQOFpaOFp0OHlBQXh1MncyYXlnWjgxeXFKRzRKaTk0TmxZWGp3ektRRktTaWxuK3FjOFB5ak5xS2o0SWFnQ2xPMGFWdU9MeEdCQTNPQlg2a3VCLzRmSUlrNmhNYzNXUmNlb1ZFNUpIMlZSYmJERzNCYTFkaVQreWNOYmZ5VkRaaE04RG43QUpmZmVzSk41WkVHL1BRRTVURTlkY29oRkw2RVBZZTVwYTlkeENWdTlVZFBxOWNPQjFSVTJRSEFJeGtibmcwOHR2em1MT1BQcFhGUFZycXVBZ2ZjM0JaaTk1VmgveVZPMUlKMlZPVkVWVGVabmhnZlI0NFBHNkxINWZyekdFVzFOcS9ZTFhRWEw5UEJqR2kvb2Z6Q1RCUUZLVGNsMjFXeUE4cnhib0g3N1ovRWFJR1hiZmVzR0VmUjJFTEtDVjZkRDlTbUFPZUFZd0FScnNwSGpneS9DWU1vUTZqWXZoaVNxQkVVb0dCci9HR1RhU3BLMmR3YUllb1FMUk8rRFJzZVpvSE9lNkdCMThmODRSSE5OR0tWQnpDck0wV2xwZzFWNTdkS2FaMkNqV0ttbGE4bVhDYlhOWUVnTkUwRmlQakZnTmM4UGg2UUkrbU1JVkRmSUI1YnA1ZTNqZDdNS0VNNFp4SGp0V2U0aThscEZVSklITVp4dzRUd3Bpd0RIc0tMZUloL1NiMkdCbVdqV2N6eVdFMVZtYnNxNEorWGpMcVNFR1JkTWd6NTBqUDhwMTF0T0NRWWpBeFRSTC81U0dXTG5TZ0piV2FVSHJYOWR6T1lWY1BOTGZTZ1UxUldJK2JpanZESmxNU21Dd0JCWTJWNVNvUXNLZVRkN1FGbnA1ak1sWjZ0OWU3U0ZYNDI0MFAxNEdiZ1pSNjJlaGVpclphaEVpQVdqay9jaUM4Q3Z6alVJYTZiNStuZmp2em0xQndiVFM5cFRlTTVVd25HamNhOXAyZ0pvUVJuQ1pRY0loWFN4b1o2aiszemdRZnIrZmVGdzZkYmRZUUZYV1EyZElDcCt4N3V4UlY5Mk9rOVRUcU5Rc2h1QXhHSWNNeEtVbXViTGEyODBqTXdkRGtkaStYTDN5QjVLUmZDQjB3YkZCRm9BUWlsMlV1cEVkY2k3YjlQSDhoNFZtc0VCRmNJeHV3bnREM2MrRDAvbWFhYmdkOThUQ05qUHVnbjQ2aVFSdEJjMTlrbnJsQ000VlB6bmw4NkEvUWg0dzlZS0VCanZYS3JQTkp5ODRwRDhOeWxob21jUGFDdGd4WTJPeFo3M3lDbGdMckgrSTk4MWRMTkkxSk5UM3pDbys4QnlYeU9OUmxROU5hRnpiMEV6MlBpUFNCMi9vN2FoQk1QdUxMWTUwS2dWdG5YR0xRN2RXUVI4ZG1MaE0rS2tEUVBLdE5tNGdOd2FPVHFWOTBXOEFJTzdabGlSaDF3bTVZK09WbDR2SDQ0M0ZaYmJyckNyWlEzVGdYWDdIUnVtTGdJbnE0QVVYcmtnTWdYd3h0QnZmMldHNXMzSHE3R1R5bUtobnNXSmlMRHk5NFBWYXZzYWo2QTFQd01xQmNYczJsZGVYOFRTM25XOHJrbDV4TXVvR3RXbmppeUtOQVB5K1RrUFhBT1pBUEM3ZS9yQUUwbFRDOHo1dlZIQU5lZWZFcitSRWd2OGpka1FHdWs0cncrREs2c1VNL2lRbDh1bmtubDUrbHIrQzdVeXV4NFJ2a2VwM1lFOHBJY2lVeE1vb3pzTFJzd01UUitMOE5zU0x0cHJBVzZ4T0ZlaDhyVVdneXFiaFQ1UE5QcUR6YTB3TVJuaGJRdHU0bTNqbHJPTnhOMmp5ZEY5VjQya2ExUXZjaFRPRDRUUXVxY2d4Uko0My8ybE1Td0xQbzFPZ1JkZEZXNndXajgyalBtVUFOMzBleDlDaThBUHNRY0RmMjBSQU1OVWNQaFI4VFpHMHdrMzNJMGgvd3l2Wko2ZXphU2JtOWtRWUFwYi9NbFdLeHVGT3hDTTJpUEtYMHVSdXpWeWc1TjZFcHJ2Z3laN2JCNjIxZDZqZk5YVGNvaU8yc28yZEVmMVQ2UHlBSURuNUhRQ1lUTGZyQkdOSTB6c1FoNXZ5aVl4SkxMWlQ3cHZUcGswOG5xdG5CY1M3eEt5aXpFdG9LSFYweHZETGl6eERtVWgxcGJhb29mOVBQWlhPMnRQemlodDZRTzhyV3dtUzBJTTgySFRDR2k2b0d1bDVWeXlMSGxSQ0IzRENWdXA5dGpiQkJjR1pJRGxjUXVjeVVTdHZtWTlTOWJOdG5KQk5UVnlmcW1ScG9yamVrZU5IbjdIVjk5MVdOMDBSVVVDQTZ2ZDgwL3hpYytKZUJXNDZKcHhuZkFFcks3amZ6Z0hmemlxOW96WC9GQkhIYzZ3TEo1WUJDKzFzSVFNUU15Ukt0T2M2M01SS1cwajRDdTVwSHN3cXdFdEg1V1BOVXhHaUtNT0R5ejFOVytRQzArcjN4Qy9QR0NSVW9YSzJ0dng1NTltbDlua2VLWDRjNTlRdmxwS3lOSUVzTlF2U0E1TW5ZU0pHUVU2NC91bE03WFRJdTZKRXF3b1p0N0N6UWR1a21pNzJKK3NzSHdVS1Jnd2d1eGlpcmRveTlmM1RBREhjRld6MnB6ejU1bnlNNzVsQ2NVcVU1dmk1RW1QOXRTVXBGZjgzYW5qM2tjTWREYzN0MTM5Wjdpdkc3U0dqbjVGZlpVencxUk9TbE9lR3ZRNncwbURaczcxcDFXRlZTaFFHUmxpSGgvTHd3bjIxOFhTeXM4a0NvUHlwcVpzNjlSUVNYUlRYSVQwa0dmd2tMazdyWEo1VDhWY25pRGxpVUh0YUZ4eUQ1RFU2c2xUd2VVdWs4NUc3aXR3MSthd1JvdCtqMldqc3ZZRDNRd2RXZHE4QmxKd0c5cVNxWGdKOG9CNm14WGpXS2dKS1dQdDBiMHNjZ3Rid2hud0ova09hWlF6SlV5YUVBaGVhYWVERzM3SGtpSHlqT3VBRWxPWlNXaHhmVWNMdUEvSCt3d3VPeHptcmo5djFGVzFYNXZqOElTZTUvSmlzWEw3aWdYelhIVjF4Rm9NTGVlMWFtYjJ5NHBQaGtuSUprZVQwSkhyNmVlZWFnMzJzdVRiSUVqR1RYRWc3eVJUZ05Xa1hsZWg3SkY2NVQ5RTNmd005TTZ5aDRiUExIRm1JVjRDa1BMU3hIWG9NbXVzeVlGTnMxemxzQ09ERHMxMWtjMnVjbkxSL3hBSGorc1dFVEFLVi9kZ25PdDFqZVhNWERoLzdab2RPeVNDTXBXVnBhM2dZbDc0clMxelBIQ3laTWtMa0FkTXhJQ252R3k1ZmxBcFV5MmVWc3lJYjgvdnEydTd1RnU3dy9KbDdyd21LbERLTlN0YmdDdmlFamFMeFZJR2JOdmhwMGJtSGlTS08xWGJ3eDVodEdmdSt0Tmg0NkZITXR4b1gxOTVLbHIxd3ExUEYxdHFTS2ppVS8ydm1kZEpzd3pST2s4YlpwN3R2bVBiYVBIZTR5ejVnZ2hURWY3WXp5eWZxcHptbDBkZnlxS3RXSHYzOFMraUtNRkladHNNWG1RdkJEaXVJYjFXdS9YRjBUd3JNemVZSmR1NDR5TnBpdGh4NXRMV0lZSDM2ajIzcVRkQmo3ajJtQ2N3TVZsS1B6L2FTanVmMmd6T0ZUeE01YU1odm01ckNzbENPdFNicU9ndlc5cERZZExreXNSZEdLNWplZDYveEFuWnRKd0R4T3Z3ZVZ2bVhWTFZYQSsrUGZnWVZnUEVDdzJWaGNTTGptNnBnSWI1OTRYTTZFYUpXbmJoSFFBd3pCMlFYbTRzbkI5S0hKa3VmRUhOM3RqTFZwOWEwSGpVa3RQZ0l2bE9xYXI2OGNRWDBZK01IN1R6VU9WcTRuelo0cFp3bmg1TlZKU3U1VE9pZWhZS0l6eG1MTk50TnNYMWhOUkMzUndTVndpSzhxek0zaGxRNkk4TC9CNFpsM2tjbVJ5Qm45NVRINkY5aUpsTkIzS1cxclNCRlJDT0owaDZHcjhKYjlTejkxckRSTThjNFRGYlF5M0psSHM2U094OTI4c1JLM2ptRFZzMXRvSDR3L1BOciszRGJ0bzZKK2ZwQzI5UC9ienlEWlh4d2Npem9zMmNyaTRkRzB2aG1uTWV0djNCOERDZmZ5RHkxbHFuUURVZlpxanNUTkZxcDJHRFZmT1VEbXhRajBVUFJZRkxmekZ1TmEyZWZiRHorcGFvVW9nNzdydCs1WUh0ekE1d2tQR0VaTks0dTI1TEZnM0lWTWNpRm1PSlowd3ZjVE8yTUtLS1d0dGdmNDNtTzVaeDBXVnRaM0VyTC9WQzdRMHJGdy9rbGNSNnl4QVZWbHNkR01OOUxsT2hEQ2FERCtmcnVycTZ5eVNqN1BhcVZ3ZGdsbnp5RUZZUEZsR0I0bjRkTVgyZUgyWi9SUVdVWW9vTmxucUVGNHRpL080dzRIdHRWeXBXVEVEVmdSaVM1SDl0Y1ZkcDMyOXlpYVdkM2JCRXkvdTR6WEd1czBmaG5PTXZSSTJtVGx0TDJlM1daUXBNbzZSeGJsTVBiSEZZNFZoS2xvLytSMGhHUzJsU2txeFNSSUtsaTBVbkUvMG53WmdManlTc0NDK0ZUYWkwY25FNDExY25aK01HVVpuYlQ2REwvTlA1Q2JKbm5BRWlTYjFDbzl0RGg3MnZ2YXIvYXlFb2tMWFQ3Q09kUFVnZHVFY2hWRk1JTUxSblhzaVgyV3gyaExVWmdPVWQ4bWY2SGhPakZOeXJ3dUZEQ3JJNC9WOXYyNGJBRlpobUxpSlRuNURpMVhoRmkyemt0RnM3cXR4ZTJNbjN1MjRlVmlBc3M2S0djc1dka3hsd2Vkb2pWcFhlTjN4anV0WnBpSTAzdmFzTStVSzJvUUxNa3RKNFBKZ2VPc2FxT2xhOVBTakhjWkpuRkNOVWpFb3JlZFMwNTVHT3R1bm9EUU42bVhuV1ppcHp0NXBKb243bTU1eWVTekxuOVoyQTl6UnR6UERENUdMaGZnZVMvR2Y0Z0NldHI3OXdQY3FlWVlNRlJURkJiVDA3WUNFRDl6L3VTWjR5dG4raUpjY2ZBWXJJQVB1anpYS0RUTmxYSFlzUUZMS09scTlDS0oyZlFrMXhVcjQ3ZXFseEhlSEFFU3RueXUxOW5ybVVTZDhpQTYyU1BZVE53dXBKUCtjVzJPczYreWRLMVlxeUJ2VkRUR1E0SklidGNUM2JIZVB1VmtYai9Dc0xVVXgrMzFUTzNxaWs3d2F5K2hwbkRPZmVqUFM2RGE0cUI2OHJrNzM3NWRrcjUrbklwdE9LVHhVc2svMG83ZlNrMzlaTklBRVJnMTVWbkxoN1NhMGtLcEZ4TGx2WEtaVTFvWDZTd29mTmxnK1A4SEJDQ09nYU1DWDFQbjBKblYwLzZtWlpzZ1prazc5a0JVamdVUG40bnQ5MzdKbFRkeEVYc0dNUnk5VlBFdjFFUHJ5QWRSYnJEbmY5MUg1OE1ZQWtKSUpTNjBibEJDb2FxTThQRWNtTjVMQ1hWK3pGWDVVcFJxdzdianFEWG9YT0hqNUc5WTFyRDRIUWl3Mlg5ckNkK2wwbzBvTzhtOGU1b2xqQ1d1WTM5TlArWXMrTExlejhTV0xJdFhsYzArTk5rNngyME5jZzk4VWxFM00rQ3RQQXk1OUV6bk1YWkNnOHpWKzRlWno1Q3hwaWlVMVJRRnN0OG1ialpscnJEbExjWTNxVjlKa3lWenZNV1N6eGZ5SFNmTEVhS2pzRmM3a0dORWppWk9Lcy96MVV4Y0hQN3Rodm0vZUQwT040UlB2QnpnNGhRR05VT3huYUZjRjUvSkVLUXJiNUxFcFpGaHZnNlBxRXRMUTFCOGc5eHNDc1d3UWc5d1ROYWFBbXBKZnM3RGFpajIrSjNKSi80TVJWNlR5UFlVUjVYT0dPeFV3UHhiUHJnb254QmZBMDlWd200ZHh1Qkk1OHVhNk5OUkxkNmxabThSSnY4ekpRZkZCdExGZ3ZmaXg0MzVIUE1XdmYzU016VnNyeEMyNW5hVjEyc0hxNmx5UVpBNTlTd255SDB3RGtQWXdOM3dLM2lDQmVSVzhSYjFDNTJQb1ZObElROStGWmI5Z0RLVmx6aFN1RkU3NU9DRVV5VmRPTGg2bkE3S3QyTXlIQ2Z5UFU1Q2xHblFRMVBJQW00VHBTczBaR29YU0RlQkxtd1FrZitOeDcxNEJYY29rRUZXZ3ZoVTZEN05VSzdwR2FrT3pncTZyck80VFN0dVJUbDIydDJwQnUvMmxpUmMwRkNQODk0MDVRTWtMR1hYMjNEVzN6eVplak90bVJiVnh1Nmo0ZmZlZ0xhcVhINXFLT2xacUt4SXNCZm50RU5GRkwxazRuQjdjdU1taE1UUXNtMWpsZy9RdUZtby9YQW52RjV6dUlINkhURUpjUnlBNXBZN2pDREVhWHU1WU9zejE5Qm1hUVVpRDFmVm01eWdRWTA2dnQ3d0dQV2VDUyt1Rll4cnVJeTNJYXpNSURWY2NJdzk0V2t6eDlUS0IvbUtQc0xtaGxhend5NVhXMExjVU1FT20ydks0SXlCN2N6TUNQOGtVM1JVSEExbGtibFBGV2tpOXVkUWRaYnljVGZvMGFoZHFYQjUwYzdES01TZU9ZRWFOMXNrdlJScW1DT1dQemRmam9BUlF1UHZoVlhYVXFHVCs5dFNBT05QTlVXNE9MWW9Vd1hKdlJWanI2YXlLUEkvbU4yZ0hPNGlRRFdkLzlsSkhDRVRLLzhXd1g2ZzJIOS9PZnBDU2tJVWl1cndsTTlsNmFqOUZ1OTN5d0thVm1RM2Z0NUxJVjB1Z0hiZ1RwMWEwVU5iOTRtakNWUFl6UmRPcGhGbE1uakdJSmIzM0xMcGloTDhVQlgxbUx5OTZBbW96RzRSZVpsMlhrZUdXVStVbmxkVzhMRm8vWmptUjhQNzFucWVHK0xrQmcwd08wMllNdjh2K0NiOVhZWXh0U1NhRmNqKzYwYUpwN25xSGJ0dTliNmFlV3NoL3JCQzhpWllmdEhSMUVzb3JjK05KV2tsRlRwTUZJc2JGMm5iMkZoVDdOTFppTEhQOUVZZ0V5Vk1Eby94dkhzVkt2TkdhZU1Ec043OXdza0hkZTBlL2lzeUlPQjFiUTJMVG1XMHZnalFTMHpKN0czRWVjSWlYUkFRZTJzWWtpM0VjNGdrNit1OU9MdCtTTzM4WEphRzltNTFnMlNEMWNGakZKSUltWjQra01OTzRMc200QlN5QlJLSy9jK0Z6S29mb3dNeGNNQzc0aXdyaEdJSkRRbW16RWx6bXo3T3VvdEo2S3JUeWhFWk8reG9wRGFUZ1I2c1VkQVltN0ZscmZPRFlSZ0dtdkRDOWtNcE90N29SbzloamlxU05kUHFaa0NoQmRiOS82VmtGK2FvdFlEZ2I0b2ZHRW1WVTVMdnVXVkdYaHNDOXlPejBuRVBFQmtIYWZPNERwei80YkZsM2VSR1hzRmJaSXRyUks0NkRnUUkwb2ZOZm83ZjNCeG1hcEsxdmdsQSt2ZlhlV1FBL1VkRGJvcVR0U0hmTlkvTE9panU3RGRna3pSU1Qxc2dXdE5xelc2Sys3SUtLZkxwNzFFMUpYUDh6VWw4VHQxN2JYVmEvOGJLbU9xcTdYLzRFeXBaVm5CbVNSNm5tbkM3SzU5TVNma0ZIK3k1eUpJRzRTYjAxdnpmbjJKMU9mdWVud3F5VjVKK2JOcU1IWHlLWTRObU9MSFhOc0pqRHFzLzhxZXRwQXZpdk0xVCtMdms2VjV4Q0M0SVc2Zk93UnA1MC84QUwrT1F2R3ZJdHJQSEQ2SnZvZGVRNStjaTBHdHRTblAxTnRCYko2a2Rhb2RSZmZWVEE1UDgzZmgzQ3U2MkZuMDhLQkFmc1lpaTM5WDl4QitXdGsvTzNVZmtPcE5aTjRjdXhQbitmNlhOcnBYQVNDZDlRM2lwWWFwSHBzekNWVUhSaWtkTGQ1QWNNdHRyaXJiWEFubzMxbk5rK25ReHpJRld0MlFKbkExc3VSOWpreFo3eHV1TXlTZFEyNHEwV3ZXZFpHS2NZanhQRTcxd0NjcGt1VjVJTE50S2RWRWdXaVAreCszM1lKVVczQjFsc0VncFBEQXZjZklObzcrMVJOcGk5TjBXRG9nR0lLOTlFOUt0UmdDOE9ReWFXdDVBS2xBODJzVFByNXl1R25wV1FaQm81T3FVblhlbVJmSXNqQzFUSmx0ZkVxVTcvVXhaUnNYMU5EVWFNZDRaMDJNZHI5WXEzd3d6NzNWbzJlNWp2bmNnY09aa3NrQ3NLLzV4VWpBcmRSa2xXL09idXgxRVBpQXU5Wi95Y25paFVQWnN1SGU1WlJTYVZlNUNVZTlaVk5JTldiZ3VXRUNGeFlCcHFyMjhOdGhDQjFYMVROMDlUS1M2c2ExOHhSSkVFZXdjam1lQWl0SGlBdUZyZUEwak1jdHFtSUc4YzRrdlhNWlFJc2NUcWliUitpc2JVQ01SdGRFMmpDZiszZ01MdUFnV1ZVY1dVOFV3U0pDV2VFcGNzT2xRS2tNcDBrdzMxYkJOWHEwUE9RY2lEQ1VTWS9aakMvbklQRmcrcGw3REFYUk9lektxTVYvUWRLdzVWTjRPajJ4V2xRV2NtTHVLeUFEVUh1bHhSem01SVFZQzZuVnczRDIvR3djbFRJVjgrSlExSVBWQjJmTnphdExrREgvTzlRRGlQSmhBYXg3YzNibHhzcG5TdldUTWowUnByOTVsVzhValZzODEyc1FBLy9YcFpqUGVXZWRZSlRIcUZ1Z3FzT1l5WXJJY0dBaWs0VU0wNGtGQWttRWFMQ1ZFWHl4TzVxRldXN3pIRmYyeXhHa3RsM3lFOS9PV3ZGdU9RSnI4UlFqWE92bHN4ejVDTDJuOUFUWUpkZlFjejlLdjlNazR4dm9vNFJrUEtQV3dIeHVVb0pEK2JVamk1VGM3a0FwczIyQ1ZuWEtEamxQZ3dBV2swbXFLUmxsTEhkalp3QU1lTlpYOW8yZnAydTFlWCs0V053aTVyUXZQajR3cGF0aXRFOExBb1BMb09POEt1Y3pqMnlsb2dDMlVqS3ZmcGx5U2lGbnVsKzZmam1IRGhlVWpic2ZDL3lTam1CQkpVNVM5ME5vU0pZdzZUQ2ZBZUxXU1ZjZnhLeU9nMmVOUGI1RlJOVUp2UTR2MEgraTdmdEc4S0xZaG55akU4cWd5aGpqcmVCMnR3Wnc0aHB5ZTNIbVp5OHBzNUlrT00wV01qS2NpamdnNjZFMTgrWE9wdjd0U2crcDFsTi94RG9qYmtia0JPaVg4OGVMQjZFUjRoMWZkNXVlWElQQWFCWDRPNlEzQ3drM1BSMlBBU1F1d2p1ZGNaUkdaS2k0cDNnQ2F6dHNVZnpqLzdKREpFbGhWR0NRTlVZbm1aQXVDNnUxTEpqRmRGL0ljRmpxcXJRK2h1cFVwUW9FamQrczRKU3ByNE1sTnoyMTlad0gwVE0yN2RzN2xCcjVMejR4V3I1aXc3aGNReFJDMnNkZFRjZStCSC9ia2svTEtWRUNuSkhKcVlzc2FoRnJ2emM2L2FRNS92NG9YOG8ybmxuNCtpRG1tQXYrOXRDellIc1FwUkhaVTg3N1JFK0hzQU9RbGlLWnFDVHJyTENkRjArN3NhRVVlcE5ubTdFajRCM2lOQ1g4OWNOL1BUZGcwS3dPQzBjQWtndTFubU5jY0xhRUxJbFRtRzJFVW0xdmtjUDVubk1iVGlYdHM1eVhNWTFHRWJiaHJZR3VPYzBFM1dIeENMMFQ5NlVSM2MyZ0xNRG80Y3Y3Q2t1MW4xdFNPNEQ3dWV3aHhZTjZuUVRieFUzNXNqVjNKU0NqODgvck9ZMXRBYi9mNnRMR2NyS2hBRXBBeE5PVlZyYkNBQ3krakhXUG54OGNkVUgzd2trdFJOYkJNYzNJK3MvVG4rRFVSVkQyYm1uelcrT29WZE9kdzlTUFE4dGx3Y2JFMkE1bDFqVndjL1NDbGduY1hYTGhCNS82cnh1ZTAyb2cvYlZ0YWdzeGt4QURnOHdYcEJReEVadjMreGN3dmw0L3lMSGtmN1VhNlpDYlRaQS9aRzN2V094VlpFcElDZzd6SkZIdjR6bHV1RmlXZXNNdDRmVHFwZDhtTzhWaXVPU0pqcVRNOThOaVpXT3pKY0dSNTAxc0dxTllqQnZuS0pOemt0bzdDTURJWDVOeDFoVGJJZDl6UVNuTDZlZDlGY096WnZyZXZMNlBGMkZ3UHJWeGZnTWpETjM1MjNZWlBOT2VpNlppalcvL1JqeC9zWFVOZ0I1OTh1Z3BwY0ozVVVQQnZReVZRUGxHYmJXQVp5OFh2eDNubndDM2RBbXMrazJSMTVGNWs1UmprTWFwRHNNSXZhaHRwZGRLRDBoL3lvZGg3V3RlOWQ4N0RsTHYxZjdGMmI2MTVOMnA2d0VzUjB1ME5NdTVKR2t6NUdoRGU2M0lOVVB3M1V6dU9xcjNqY245c3NmMG5qbUQya3BNb2FlMUdVaHc5ZktZNk4vWVQ5MzY0OWROaTNodVZXTllwK3hGbW5weXdIbmZPWnptRzBuVkF1U2Y5MTV5VHY2bGt1WG02OFB3aGVlOUN0REhOLzRUaWZTQVhtQmRxMXdzYjdYcXIzNmVYL1J5bXlQS0tXMlpNVmJPTUs2TkFVZ3lLVTFzRHhLL0xTMDU5SjFQcENRcy91SFZiZEkvMDBreXRXcDc1Ny9kcGhDVGlQenRCcFNlbWkrT1lBQmdtT1NUVTg5TTR3b2EwYzM5b2NhZUdEV3pGd3dPeTlMb0xTR2QxZDhGRnJVRU5rOEYya3ZqMExUQnltbXlCSk5YMUZBYjJJMmowQVlxVWtKem9BNnFvMVhkajVWdURRb1J4b21PeWJpYThLdjNmakk4RDlyb3Z0WG9jMkJqRm1FWTZvN0dreVZPek5md0llVTdhRDZvbWhzSk03ZXhsaTdtdERkU3ZuY3FQdHFqZUNPZC9rSWhhcWVFVnIxQk9taWQ4d2lRVmh4UmV4SmdQMmFrQWtNSm0yMXRnTk0vSzJyREpDVWR1R0FqN016Nkx4QTNlTjU1NVJrWFlmRGtVY1JQdDlQMTNJK2ZRMmkyTXFlQ0p5SXFvVVlrVm43S3FEOWNKdlZ0WWtZRHh2MEk2cVhVV1dhd0VPUjErMWg5cmlmdmVSQlkvb3JNS2xvQTVFWVhXN0hHYm5raTJualh4a2YydTdmTXpPVU11NGR6Nm8vckNZS09GVDgzVDU1bWxlQjFaS08zSFlhK1Z3d2x2TldaTUdRdThtOHJyMEF5bjc4eGh0Q1IxWXR0UUNxdy9OU2o1ZHM4ZjJrang0MForVDNzZ2trU2N2UEt2Vml4MkFWVm0wbEJlbWh1SnNpQUZyYjYxVVF1UE9OWHlHa0ZWUFVWbFB2dmF0WE1YbVBIR3l4Tkd1NldZd0NBM2pMRWFPMTBiT2lpd2Z4aXZscDRDZEVOUy81RXEvSXN3UkpKRlFjZGltMlJKbzh0OUZyMHRaZXRwcEJYNHVEWXh3UGJGK3V0RXV5QUxHd2VYRXR0M0VmY2dUSHN1OTNuOUdQVEs4TitGaHh0TWM0Y1ptbGhSMW5NMi9sMUFoR1A0Q0FnSURtOVdidlFKdjBWK0Y2NDZZVnJlb3ZFdVR6Mlp6bDFqOFcwbGZHTVlUUW5BWTBpS25semVKUXp0cWJHMXpyTjExcGpVNEtzK080c2tTMEx5UmNTTCtWSWxPcmkyeGxvNjFOTzMraHZNdjVxeVhiSm1WdCtIKyt6SXJpUnRaamhRSVNhTlZ1Y3ZVMHo5S3dZK21MYmNGQ0dxc1J1NVdRWFdyTkZHdlA1L3MyR2x5bEdVc3o5TGM1d3RiUW9aLzJOUHYxbWpLa3p0d050dVVZemV5ZzFScHdVcERSU1hTS0xVZTlxamFsZzlta01xeWVnT1lUeVdPSXFkVFhINkdPOXlrYjI2ZFhMd2UyYWZrUWora01hSGMzVjJRZlBreFJJaEhZTlc5MllrZ1ZHNmoxa0wvektYWGVTalRXVGFhT0tRaG1aY3BTSDFOZzZaK0tscnNMNTRQRmlkVlprUEVBa0JvRUxEdGNyNWRNVFUybnZSb1JLRnBsUmpPYzZyV2x2SUtMV0NMbWxOaHRFMzZmYnpJZFBpb0xjRlo2ajYzdjN1UXd0ZnQxODQ5djJNUU9KT3l0aGtZVTZROE1IYTIxUzgxNTJSYWIzanZhcUZibG90aUpMU3lrSXNYQVRyUVJPeWtUTjRGS1FKb0crczJDeTZuWlBjNnRWT2FIckREY08wcXRGN005YzFwNTFETGRRbjUxWW5Yc1BvR1JOU3ZMWnkxaWhtdnp3U29SU1A0MHlmR1Qxd1plYUR1VnFlK2l3RmdTSldTNnhDNk9rK1hCMjdwazhIcEw3dzNKWUxhaHJwQjhzd0tEc2ppN2pjNDBsSTJhZEZZaG41SUpCZU5CcFZWUHQ0UFQzV1plUjF2a3hMY1U1NVNiMmpIMWU5cENhTjVETkN4dDBaWEdlaGg0R216ZUxHbEdubVpHa2c5MzEvemhjWlBPV3BqWGhLTUdDL1pLcWc3K3o2Y3AxZGwvV3Vpa0QxTVFITGlBU1JsWHVPUFRsTUd2Rjl1cm1pMG5EaTArc0hBUC8wUHJrTk5aU1N1bjZTQThBREpzYXM3VjVkcWNFU1NYYmJWTXZmOHJ2UTNlNnRDN1VoZC8zVmhCNVV2SW5tK1Y4SzFhTEg0dGh3WVpFekJrakVSeC9SSmhCVDRSYjdUbFJ6RmhUSDh0cmN4T2dPK3RMTU80eFhxa0hFbDBTTE8wN3AyRy96cG9XbTVPc1dNdllwV2xuMks2cHdOT3pmOWdYZDFXL0U5d1k0amh3a0dSajhoKzJSdHh5aEtSMDJqK2tweHo2VTRkdHNnMysrTng0Q0w0UncyT3dDMlBtVGM5YjZmVmY4eW1nVFhOWEJHZi9LNVhHVFdYQ3NjZW1odDFaUTAzaGttTVJFNjl6U0xZOWVwTlE4YzBSZnREVHNtMW8wTStIZjhLaS9wMENBWS9CMUtKM0pZcnJkc1lyanlsdGM3bmxhL3U5cXNwZjhXU0E4TzAycjRmV2lxUXg0eVNqVjRJTzB6YUhmMHVqZ0E5NlZ5Wk1WRjUybGNGVU9IcFVmREthQVVkcE1ZaUN1bm9mcGxxR1JqR1JnTHphcTBVempwSFRhTjljZXE2OVVxeU5DTU5Wa0xwUDRBY1o5K1NvNDAvUHZHWnQ5eHp2Z2o0L0U0bFNxNWNvUTZGWEd5QU9scXJ2R1N4dWJDalNGUHRPZy9qREVDR2FOajFackltczhuU3J4NzNqMmZ5VEwvOVJ5QUNDTVpXQklNanVjd0VUeWJYaXZLUm0ySUFFTkh6dGlWenFiN09MSnBlQzlsaHpPL28wMWQ3c0lrRVJYZThPaVR3QmZTZjZNc0FyMzcwd0JvaUVybVltMWZJY0Y0UDJmRnF6dFpyc3BUckN3OGIvbjNVUWZnUFM0N28wc2twcjNNM2tMSTV0VkhjZXZpK3plWGl0bjRjaUFrU1ViMjNrOEFqMllBMnNYb3lmZk5QZndrMVYyeHA5VEsva1ZRbTg4TjV4U2VDdnkxVmtZNFoySUtzS29WeFZTYlMxWUs4ZUFlT1k2WUZVdTY2Rmxua0lRU2Y1eWNkRW9kSjlBZHpkWWQyTVBnL256TTFFZm1FTlg0MjdhSzgwT0pMT0l3QllJWG9QWTBGUWZpbkJya2pvblY2aU5MSVZzYmVrU29NbllzS1YrSVM2S1lhaXptYmg3azhOTnhLTEJ5ODdzQ0NES1p3Z0lEbjhoNW4xQUlnamUvbkNTSjNlZm4wYmhYWXo5Wmp2bkRWdHQ3akh1bFhFSytoVnVSZVdaZmh6TmgwM3oxVm5LMGt6TDgvSktVSnd5MC90ZmFXQjVFSnZZQy9mODFSQ0hnNVU4Y2JwVWlURjdhSDlrMjZ2NGFWK0htNUcxMUZ6TzhZMVhtTXhmYy9aRnlab1RLZmlWZEZCU3lkZUtpSE81OHlDZnVWWXArc2RPc0FTUjlpdUF6ckVTd2dnRlZlL0I0Y3h0N3pmelhjYVlkWXRhN01qLzhyNlppcjVGRXJ0ZTdGZVBncXJUam1ZU1N3QmUxeWFzSEcxdFdoM3dNQkJsMzlQR2RiYXZ1ZXBhYnF1NmpiZ1JzNUlmQURCRm9kRnNFc3Awa1dkYkR0T2RpNTB3cG1JbXZWZDcxNDJZYlBVYmVlMk41Qzc0YU5sU0ZMT0VGZlVVVUpQRk5Gank5RUxNeCtlVXRUejJCZDJrQzhEM0pTR2VrTHBBZUYvMWR3TnhHdDN4dnY1OWM1RmQwbXI5aDF2T29qdTYrNHVBRUJJUDJ1N0s1V0VoZlZ2VCtWVXhqZHdKTHFMbG9ZV3piMGNYMER5NHFmNzBWRzhEcjliMG9UZWZyS0FXK1JSOUp3WEFCKzNDc05SVWVUTFZPdWIxdXduektaSFRzdmJPRmh4T0hPQ1RXS2JNOWttbmFscUREYmxWUWU3SFpISzkrU0tXZHpIL2ZoM0FhUEFEekdCRm0wRnRWdnE1bVZzTXNZT25xN1VWTUpuSWd1NDVBVm1VZ3lOWVA0T3d6cFY3SHU5bUVSSk5Zb0NvZWxhUVZ2Y0tTVExPaE02VUU2RXFDL1IwQ1dFdlJ1M2l6SXRjelhUK25CVUI3TmZtZEJYUElaMjJ2WUpuT3RwUWxmNmlwcmN0SVBlN2xrR29uWitIZWxMVU11UXE0TFp6RzJCZXB6aWRqVGIzME5WTHMzNHpPYXBmVTVRQU1Jbnh5RFhSUDl1LzlHcjBsTHlxNER2QzhwYTd1Rkk1U2thMGZxczlSdnVWZ1EySjUzM2M5RjNOdnY2TmtJVmpCTzVvdU4xNVpPeUk0TG1RcVloMWZ2ZVl4V2cxN2Y3eEExRHl1VXJ2cDNiVythOHBPTjM2aXQ0STFXNjJIQzVidmVSQzZGVGdWeEVDd1hqMTRHSEJLTGNBYVJsejEzMG94anZGeVdXazBvOVg0eHJzRkVxMGF5VHRNWW9NeHpwY1NzdFFiZzU0WlN3REtycDR5Zm1wQVZmTWFXZWFRV1J2dkwwY09mM1l4RmY2TnJwTUhHNlU1TTVaZzl2d04yeklPbzRrRW41SjNzZDZNTWxJM1R3V2Fla1lhZWtXdUpnTTNVZHUxZk16MFhrNmYxQmZodXgyVVFpRHBqc1FleUU0NEgvMjBrVmt2MTJBS2tQZllFS2NwdlRwaXg2OGRtMmxaRU43ZmZaaGxBOCs5U2lrSnNjWThhMFVFSDA3TitadVZGS21vRlBHK0x6dnF1ekE2ZlFzOEtINkM3cklSaGl3ZWN6OWVUR2lWT0gxRkRqMmI1UUVOMUszcjBvTkJybVMrM3NwYmQxSWw0cStNeGl1MmN5SU1UaCtrcEhPVU1OWW5BVjMvT3NtYnJpaDFlckxzUEQ1VEY0NzVqTlFXbnpMZ1dyYThrVkt4eUZIREhOaCtDRU96bVRqaHl4L2RhTnBKZ3RKdjJVZzZKU1RYZDhXZ1FRL3VSODBFSm1KcmVSN3cwdkphWHZ1NDlOSUxjMGpTakkyQ2JkaEljdU5VNXFuL3ZYTHBnUTY4TmVudytjQlN2RDZGbGg1Wnl2am9odVNYb0xBVGdsU25seUJNM3cwclpoQ3F4ajU4TEZraHNWYUluKzAraUdLN0NodXpDMHUyV21zTWc0ZTRqbjBlSEtXc05pMFp0RS83b2NLRTZ0cXVlKy9qOE1QejFJNUxRVWFnelFhOS9IM2g1WXhsQ01kWHFjTjcwMk1TTzV1TEVneFU1cVlBckhEVjBudDZDZzBteWVBRzAxL3A5bmFFSnJZUDJrRFJjd2QzMnA3TldOMW05bnRURVdraTJjYitpU3dxQWNvSUlaR1NJNnEyYk1mVzZ2bXJjanExVGtTK0wyOUFJbkN4NnlLRWpHSnRKRm02SVE1dkc2d1YxeEg0VjdNT0ZzNGZneHpnSmkxTFNGelNyWDVKYTllRkJ2bGlkL2hVRnRQdWRwN3o4YWZ1M2lzOWRWNElZUnQrMnE0NjU0RkdLNlhmY1ZYRHZocC9oL09FTDFLZGVZQjRUNm1uaGJTZjFUbEdoSUk3M1FpdElyMlZwcWdJd1pSU2pPcmRuVTcwYzd5dWgxbzVNS0F6V2t3eWQzNU9lUW0rTC9XVm0vZVAvTFBJUU9pZldWM3o2aWI3S0hXRDRTZnYyK045cEovRDZaQ0Q0UkdJb3ZraWd0RXE5V01aOG9NcldBUjFyWEhKcW9td3NlQjRVRmVoVGVnQkkxTE5kd0JrMUs2MWYvSmZIclVjSit3akR3dVpqVnpkMTZqanN1NjBNRUhyeWx6YUpSMGFZOFM0eDROQjVRUTdhNDU4MnlUMU4rZjFDRk5lSCtpeFNhdnl1VnBlWDcrVmU0TkpMTjZYZGthSmdveTgrRW56MnBBZWdGcEZUVFFUOTU1akxIMi9qUGRiS2JtTFVQekVHcUt0eUZoTEw4WjRvd3gyZFhIcXBhcC9TYXhCQkNyS0VrMkczTWdyMEpDZFdIbVJZRVd3R1V2SWFJRmx2bHdEd01qR29oSjNlelhvazdaZ0N5aS9VQ1hiUklVN0oxbWw5TGo5NHFKbllZK08ra0xBZXl4OTYvTE12OXVpVVY4cWJhS0h4K0VKT2s4T0lBb2lickxiY01zNXZ2T1ZINGRzTnMycWpYYi9LamUrVHk0TEtDZ09rdHVyS2ZqZ00yT1NVREd3RUhueGd0MzlEd0NxNm5RRnR4KythQXJzeTVaZ2VhU1Z0T0UyYklxaVpGY1oyRkdUbUdEc3Z0bm1UTzJpR0Y2d24vM1NrRTFPQUpnVUI3aUthTFNGOThiTURtQ2pZOTVWNGcya0NhVVF3QTJ3WlowNzBkOXBTNlpheHd4QXcrUzJOd0dNejJvYXBFdnhWR3RUb1FHWnF5ek8rUmdvMld6L1l2a3pDMkNTbnZlaEVjU2ZXa1hDZDBGOUxTTHRSQ1lqanB4VHdOcld4Y3Jya3pQZEVCNUoyZnE1Z0VISWNROFhZV2FFWjlaNUtmOTRXaDk2SVpvR251enhKRSs3WitkY3JzR09mOUxWbTRjSlh6ZEdnOU83ZnQ0VlBKTkVXOGpzanFWOHFNbERiUEljSHVMMnhjR25pc2lhUTRwbWsxUUs0b1BnSEYzRkNnRnB3Ui9sUGtwR1pKMzJkSE1BMGVha2pmRm1PaWxyd0tTVjU0ellzMC9GUDI0RXlSUDlUY09aNHQrVVdRNmNtTG8rY0xqSjZNSnBlMjg3YzM0VEpXaXA1RVFtWFBZQUFQamF4TE9sYml4bmUrRHpQSWlTY2IxWllVUnBFbU41Unh6VU50N1pFMzlEWHhTZTBXanJEbHBkNkZKWmRNZjVnZUVnSXJ5NWtEcDBzUHd4Mmx6ZWpZWkgzSk5acTFLS3V6VjQ1SmpsUktncVJoV294Kyt4citKODdycFA4OElPdHJhSW5MeWU4R0pSSk1aSldnUmVGTE5XS2FJQlVRVGpCMUI4Z25NZ0JqNkx0WEwvTVdCN0FzdngyQ2R5VHBCcU5oTlpqWDlMdG82c2FHL0ZPMHdLZytRelhlb3NxTmQxRGIvOWFIMkxHMkZiVzJZK1doRDgzVitPZ3hPUVpVUFphKy84OFZGaVpBVHljODVicVhpVGhIMmRtdDFsT1Vkc2FmSnNoMU1HbUpmT1RHRCtWekg0OUNNK0RVeWF4bDVLWEdWbG1SOXJYcStuamtTRlRnbG1qL2VDRGpSVzN4U2t0NDVmQ2ZUYmMrcnRvWC9DUmNuWkhDRTlVbVEyajdDWTZEM1B1dFhGd3JSSGQrTVdxalFBVjl3N1RwNXpjZktPSDVpeFp6NG9pbFBIY0gzMVdIdHYwelJiL2ZRNW1zSGcxMEZxTzdpbEV0UkNiUGFVN3liZ1krdmxtMGdsWXVWY1JNc040cVVjdGpFa0c1bjFFQi9BL2w1dWF0Y2tIRUJNbUVKWUJWMDBZVDZBRzVtWHphL1RMYTRrWExYWU9IaTRSSThOc3NwQW4xZElraFAxbGVtRW05d21laDBlNUFmNGpUUGYyQm1lalQ0Q3ZvdVdVbE15UlRrRGRoN1NSTm5sKzJMaEJ6bUQ4dE1PNThTVjZKYWhXdVhqNGgrNlUwc0s0RG1WYnhrTFBzamxIRGhRQkc0d1hRQkxjRGpGa21PY1BuUHliTitDQXQzejBGcVlmWGg2SWpDSFVraU9hMTgrcmxyRkt3c0RpOWtacXpRejYzQXB6VU40RHRlQ0R3ZExIcFFZcDVOSDF6T0sxSlZaZDZmbW5kSmQzcThNT3FVWWRsQkpRZUlsSlBRL1hLR2ZIUGdSa0FheUJhN054djRienZHQUJwcXlSZWdiYXVDUGJEdXhYdGQ2STQ4bzh6OHpHYVVIVUFTTmdYdjFhOWZWOGZ4SzR2SGFWcDJZUHlXZFduSW9CejE5TWIwUC9VU0llbFZPL3Fjb1paSmFTVXAya1crZU52Y084bDBnTEdtVjZONlEvRDQzV0h4RjhuMzI2VWZnTjcvN1RRR1A0ZFcvNjB6UnJwaTVGYVFXanhNL0wvTHFPUjJmT0NPWUlrSTdWMjMzY2JOZzdhSHVCbGcyYkVJbGdub3NhckNBQ3RCMVdzODRST3Q2RWxnSCtZN1dJNHNLcCs2WVRGL0t3U3RlRU8waCs3bEtNbWRuRlJoUUtvZGxLRVljNlY3NlRucDdDK0Rjb2E1Y2VFdlM0a2VyY2xvSVczSmlSaEZOeXdKbVZNeCtqZzB0ajhmRHREUWNrL0E0S2ZPcUQrNUVLVU1paVBpQUQzeUpjZDJvZXZDVmNvd0J1TER5K0d1blY4OE1tZUtqSWt4d3JIMTREVzlzMTY1USsxN0ZmZzdXdnRMcVdMU09YS2c4amNIdlM5Q28wZHJ2UjdIWUZGUHk5REI2Q3VwRitYRkdRUERQc0IyMEMwK2t6dEdJVDViYkJ6R0RhMGJTUXNTNE1KNmc3eDVrZlZ6eTNZYWhGa3RyRmtKdUpyRHltNGlkOUNLcDNQWndkM08wdXRndXdmbDVqWXlYZHlxWFdTSW5heWJjamIrNXNaTW9uSmRiV1F0eGJ6eUVTWncwMXQxVXdjZnkrQ2VJa2hzY0tCck1EbElBeVJod3EwVVVTNmdoc2ZhNmE0UHowYU9DNVp1MkNodVNGbDk1RzVsMS9WYTZrN0lIT1FnVUNxYjNpMzR0M2FhZE5WMmhYSlJyWWR6NFh2ajVxQTdtTlJkR3Z2M1pJc3dzU0M1MUt0SE1SdEEyLzh5SkxEMTRiZHlKQWFlZnkwaWpYTUltK1pvTzR6Q3cyUkorZUd4S3IxUmRiMHBob2ZZaFlnWS9CNTZPeXpwcTExbHB6M2orRUs2VGlsNURPR3VKVGxUNEtML0oyMEZKUnlDdmpPZXhWMWUyV0NBQmR6M3NMS1FxWVBaeGJDeE14UjhnckRDajMyZ0ExTVd5S1h3V2RwUVV0OUwvNnh3NGsvTXFacUxSeHEvVkxtN0VEWXY0bjIvSDVUdGJ3YlJ3bldWbjBkd2lpVnB2L0w1bjlHMS9va21yeU9USVpSSmZ4bCtLbHB6blZYTHdhYWF6V2ZYa3FueEwxWVZqRytHR3U5LzZBK201dWdyRVBQQ21CejBaZHdRRVN4WEJKOFNNc3BvQWYyRXdjQ0xYaThZNyszNnVxcG15bUJqQmtabkVKUFB2U1RwWGIwRlhUU21pNzZ2bTBnQ1lPQnNCdS80Uk9YVnNZbWNiR1RTVkxuL1NaOE1BM0hHNkNodkk3Zml2WitSWVlYOUFMVEkvUUYwaXJrVDBFL3pqWVJEekp0S3l1a3RWcjg4ZmUxSmZ6cXFjLzF2V3VubFJFUk9aV2ZvZGZHcDVybXcxOWZ3WWY2OEIwNEMyWG0rd2xiU09oWXV0Y24xK2Jmdy8xbzJsamM2WVgyU1RaSXZEcGhqenZxTzZHZGlQU05YdG5sK090Y2lPUCs0WW5RK3Q3ckEweWhhNm04V2FhWG1BVFVkdmgrSFkvRldjdHBuMlpON010REdyYmlLa09vTGpadFFPdXZhd3l6Lzg5Nm9xY0pNWmZpempabEkyVTJMRityTC9yWHFvYVBIc3lJR1duN0hZRGc4RHBOQVlUWG1kYUdZZk1XTlh1L3JWUkljUWp2eUdnZ2JxL2kreTBPOVdUYnM4c2dzV3Fvc3Nod3lpWkxSeXJQZ3F0cUVvV0drRjVoMktzYm9wUDR2YWZXOXdIaGg4RkpDaGFybVFxL3JxOXhEV0FvcW02Y0VUc3puejBwY21Sai84dUJWeFI5U25HM1I2YW5yYkZteVA3OXlEdnF5eHVHTUMyT0x4RHEybEoyUVdwK1NwN1hWMDBKZUZ6T0JteWZMQkkrWUw2S0VOaElwVFFiZFh4OFFFTUlpVzZMbk5wMWt6VllMWDFNamlEc2tMTm14WnJXWlFxQ1F0UTEyNGUwbVV5WEttRCtQdmo1ZktkQTZvc0gwUThEN3dWdCt6aXU2ZTNFZHlNWTI2dTA0dTVkaVpGT2g5c2pUUy9IYUt1cGNubmdSQ3Z4dEpHL3luVS9hUG5xNnlOSFZjK3VWLzRiTzRGU2xoemhpcnpLRUZqNFVDLytwMzlGNXlmNldTZFI1a2hEdHRYbG9QamZCZjNMd0ZmWVJrL0lQOGdzU0gzb3BmRzczL2RnS1h2cHpCU3lvWktvd3RjcVpFZEdlclJxTnZJYW9FLzZnK2IweS9xbXA5WkhwRCtma1c3ZkRKWm1UVTZKejBzMmY1VzR3bjdPYVpEVGlHU01qTEx2Sk1hZTZqVGUyU0ZhcUNSL3p3TFRVNUtkc2h2TnpiWGxMQ0hGOWsyMVhidTJYMmxCYThqK2VHeFNGMU5qSFJyUEE0bTJIQ2ZSbVo5bzJjd295UmFvM2E3T0lpK3BDRDBsREsyYzkvTkxJZlZYbVVGNlh6eG1hTjVsa0V5emJaOHgzcGZ4MXJWSHZldTBXL21zK09LMEV4VFFEYW94YkwvRFhsVHNnSDBzU2owRDdxL0Z2eTNRYXcrdGxLdzVXV0FYTkNRTEMyRWhvNmM2b3pVY2FXRk02R3JFTzZVd2ZhZmpIaFluK3ZJb2FIS05LVWRDOWRZZnVON1F5b1JMT3JoY1JvajhGZ1NNazJtOXBqL2VYS2tYeWZkTnhiUmdTYVFtSDJXVTBSdW80akVUSEZ2YndRTkdjajFQRHdEM1VrdUYxdnZUMk1ycmEyNUVPSGJZemhQZ1pZRkQrNUlabU81Tk1PeVozZlYvTSt3WVVibmU5SzViNDRJR3FCclJjTHNRb1FLaGRrdTV3SEFpenFOeGhLNnpJZk82d0srNzAyYmlPajM4VFBzOHNpMm5kcG4wOHo0S0xmS0xMTHdtNm9GN01BUi9iS0NGamc2QUdjc3hGVjJ1amtKMlZ1RXVZUkRiYXAvUmtRTnIvZkpqb3BUcCtEVEVYV2pNMHAvVHIvN2ZmRFBUTmkzNFRLS25HUmN4QU1rbWtRSmxvRHNMRktzN1ZmVjJjTGNXZ0xZYllSQmxZZDB4c3BWaWwvbUhzSGhPWGZuMWVnRHRITkI2T2g4aGV6c0FqU0VLU0VyeUExTlFjenJDYm1hU3M5U0pmWVczU2tHelF6NHJSSkxoMkRDYUNrc3g4YmIxc2JtbzlFN1h2aFc3aHJ3S2RWbmJCd0JNS284NzFFNWZ0d1htcE1xNGRpVmRaSEEyekZJa3AxdkJZMEZ0TjVOWENoUWlkY1Bja0ZYWGhtdmhWdyt5N3V6M3lQNExNUU1xREkzejltajBiS3ZJdFFKVVpvM0RzaUIrdTVxSnpHNTd3c3pIR3JpR0ltV2VINVc0bThmNFgwSDZCMEtZbWFNeWx1ZnpjTUMvbUtzRDhjV2xKb1RISXd4elpONFRhUDU5dHNaSHRGZ2F0TjhYdDVpZUV3M2NDUnpJZHdwcUpUT0lMejYxRlNaL1A5S2RyWnFyWi9vRVppU3dKMXdBMUJ1eE4yRWZvOVI4M3ZjU2Y1czhnbzRZTGpWbXBqWVlKaDhJc1Z2UWQrb2VGcHoyenhLN3I5aGpTVUhhcXFEazhkcEZqaUxubHBsQzl3VWtIUTI0clN2VGtpOS9HUDNkcUx2YkFVUjNhclVHUzBaTU1iZ3ErSFlUSUJKTnVZd3NzUi9EN1gvRzcwNDc2TStqQlNONC80Z2lvcnhWUUtJaVBVNVlyMkE5UUxqYkwzNnpJSDlUcGdHM25NMDFiMUxxZEY0RXU4WTREZVpTUDBXTk5YTGpreGw1dmZVNklNVmNseXFiby9zdFF4aVRnNkQ2QktjUFA2VFdpek5lWFk0UG1Ia0MzL2xpT3ozWHA1RmtLNzdSOVFhNk1yUkJpSHNSdzN5TGkzQVBZdlAyZ0JVeW9iRmFkOGtzK0doOFF6MngyK2dybk4yK0JzMEJTR2J5V3A1TEdQOTRiQjZVQm5EUENsTmY1WG0xUmNLeENxTzVZYjJVNkRpTXhkRHU0OUsyQXFGTkpCTDNTR096a3UzeERVT0d0bXpxMTNrbmd1YVk0RVBudXFhcXd6ZUt1a0lBSldlYlBMNUI0cTNtdFJTa1pzUk1hQXFUaEpUY3N2c3hyMTE2ZFJ6L1U4Zyt2SmxSN0x5ZEthNldEdVNNOXJoNWEzV3M2bXRaZ3NXdjB0SlQweENscE5idnpNV2FHZlJLUFRUamZOU1FTdnQ4dHFBa29raWRYUDJrblkvbHh2Q3Q2R2Zkenp0OUUvUGxqVCtRVm5ETW96ZnhNL0tTU2dlMDdwZnErU1pBR0JBUjFoWUJ5Qk11R2N2RHp4VDA3NXBoUS83cXRVaWZlVE9HTXBXVitBZE5xczZ1REt1YnRkUytTL1puODZsM1JXVXdmUlhZWFZ5NWsvcUhHOWF5WUtWbEVEckw3SzVUeEl3L3p6bUE5elNJbENyVG9tK0puMlJpUzNIdTFneXl5SUMzMVU2UlFBWDI0cG5keDdFaU0zaTJVRWxKVFpUenMwWS9uekp0R2ViM3ZvaUN6d0ZxTlZXUWhTa0NQT2ZDNXd5ZC9xY3BoajJkK0dodkxBTGVmQmNnMGdKVVFrbVc0WGVBVlZlcDhqTWxmSFB2WVU0ZS9VNjhxNmpiZnJKL0NVNk5heHp4R0tnemovWWpWbHM3VmhWVm1hQVluVjIrb1FPQ1JFUHJLaktLdURWZ2NLdStKK08wa25rMkZnTytrbHA2VVdnTEIzaWl4UU1ZTVVUa0l3Uld2amZMNUpkVWc2V0V0cGlPVEl2MGVIYm1tcEtab0RrLzFDNmMwa3JITTZTcmdzZklLUXZaNXdsUGszV3dwRTBWMzAraEhLRkQ5WUYvSjFYVTdHRlpCYlNiTFZiekxTT1NxaVoxTXlSWTdiaUQ1QUtFbEU2c3dIa3dHOEV3R2JSTWhqQnZ5RjJKcHM2TFd0cm1vQUJDbGE0U3hUMSs1ZVBxQ0h1bUc2andpMEIwMHNlOE5ZWjc1c2RTWXlIZ01BWVB0SGRUUDRiMFltNzNFQzgyajNPZm81NEZOU3kyTzFWYWRNN2JxYzZJeTFUWFJRdU5WNm1VcWl5djZ3S3N4ZDVSaCtlQVJpRWpkNUFvUkNEY1dvZkpOVGlZQnZUMnFITnBNd0IzZ2l1UTlUdHRvUVVaL0ttS2JrR2VETFJKL1RrdDNqMTJIUnNzK3Q3WUxXTC95NHh1RElzRmwvcllMcFhKREFQQUpZc1c5UTZidXNiWDQvS1gzSldvcGtXbFV5a2VDQmZIeHBmeVZ3d3oxU054czRDT2hEbFRLNmgxSUJoVVJFZ2IwZkxPbHJ4dDg0bkF5Z3p5ZmZqR0JuU0JUWmZiWE42RU5OalUrb2xDbmRtOEx2S2Via0lhMUc4R3dKQWdBSHcrUS8zUVIxazZPSXpRUzdzcUN1SVU4K2wwWGFLQjcvS2dGc2lDT3JzMnpXektyaGtGemhubUs5SVprSzE3eEcxdHJWZnpPcjlZak9CZTgzd1R3SndRT2RET0orMW1KaHQ1S2k3STRaRnVUd01qYjlxMFRvcW0xMzBtTWlkUnY4YjNYbFBWV1Z1SXBaQVNvdjAzVFNxL2M2UkxtUk0wdk5YZWcrQkdQSUtabWxvTDRTdlRXUUVtSGFwNHB3bmRuKy9XOWd4c1R5MXRzeVY1NE9wazNTU2JIQ3VXckdpbytHaElNRTFHVjdRR1hCZEhJR2dxOTRoSlpJWTJpS2tsUzRoU25pSzJ2WnlOcEFGbHJqU0JXZnE5ZzA3ZUtYdWtUOVp5U01pdS9rRHVCQ2poV0RTSEp4QjFJSjN6N05vbmo3Nmd6Y3lXbVM4YXNRZTZLellPZUxESkM1QVVhKytvUUhnK2lCV0tCb0pWRFd6WnFGSnJ4Z2FHSjI5a2tOd2VJWVFVTWhoUGFwdU5HSkpWNDN4dEFaY3l5ejV2ZEpCL3BDVFhJMklkS1pjM1FWdG9KRUZ0SkpMK3NmQTJTWk0yL0lNTkRKZ0ZhamtTWXNmbkFiTlFJeHMrODl1QXRKUVNKV1dFMDNVVkxoN2hLUWhiRHBqMlRUQngwK3k4RXVJZjFrSThqamhkSWw0MFpqMVVSWTUzMjhlTk91UFRoNEtKWlV0ZU5oYjhVem9CZ29PWGNNN0dJOWJNNDdtMU9yVnNuOTY5SVRnTUlMQWZodW9iZFdTY242eGR6RDFPSGZob0JKMlozNHlTWS9peXZIVlFaS0VqenR4YVlVdHFJaEh5Z29BODh5Vy9EOVpHaXZsMDJrZWN6OU4xSC90NndvOENtQ2UwVXg3TVl2NW5ScmlsdHNhcnZoWFA5aXdaL2lSaDk1QXRPajRZNjl4ZXJGWE5aTjlVdUU4VEQvUnBaRllXc0t3cXk4cHp1Z3NyaWVFQlpXTmh3RDB3RFE2TUhyT3N0M1Yxd2phbjkyZzJSUVJjdHY0SXlsbkhZSC9hRnJZNk9iZTdvY0dtMjFIYmYyQVhjSnZrRE0rU2k1bkZxM3BZbXpzcXI4Q2N2cDU2NHB0ajhRTkg3cGl0S1Q3NTgrMzhpakQwOGtCeCtnVHZnK1plU2o3dm0xUGZsZTJ3TURKZlBWYVE4M1JQWWI0SXhrWmRrMWZSazVKaXEwVmcrZzNydHJJR2pxcS9YWVFCZU54Wks3WE1PK2NPYjVjSVRudWkzWHV6OUEwdUtWTkkzODJTekVUdmRMeEo2MVJLVVQ0aWxZemRWUitGaGZGak9hS0lVUERpNjBsbWVCcGJ3Rk8zbHBMbFIyZTFWY1JNemNiOElWK1BsNVV1ZlhBaFcrSW82eTM3SExKQVBFb2d4cHZ0MEFWc1FpYkZ3VHE3QTJJN2pzMXZMVmRrS2Rtd0JrMjVGem9zYk1KYk1LcFUzTHJ2eFJMZmpWM2gvRkc3VFRFTXNReW5JcVJRdEJsdHBsSERVUTNkbTVLNHdoK3BxZ0pGV3FsNWZzOStSZ1VFS0duMFZhMU9GVzFvWjhmMGhXRmVkNzkyVGJUdDViZWp4amc5ejRoeGgrVkwvRVpYdHZ3QXl2a1htTld3dzNMNXhHV3BTTHlaT2c1OEJmY0RDUld1cG1KUE4vckFZSE5yNDhqdzZDUFp0TlJ4aDhBTTB2Mzg4ajBZUVdVcURpb2tuYnRNdG9wV1pVeWNpOXl0a1c2cUdwaXhkeDVEU2p4QUptdk1HSnJxM080K2hNOHRra1cxSXZoME1yWkFWSTUwT2NVQUx0b0JKa1FvVGtNeHFyZlAzNVRGMVJsNG96NS9sN0dKOWY1cHhOVlZXdVJLaUdTVkpTdGRKa3lxN1VEbkJwUytiK3czekdBVTNCRWlheDdLMVpLRVY3MHV3d0xKeThWQTlPUTZ1dGxaclJ3WEdJcGZSZTN5VmVJSEJjVmtIVmVwQnhIL3BaTHRUeHRhbUM5TThZUFQ4cng1Tkc2MURlVTBCdzdmam15VDYzUjVrdHQ2STR6Tk1MWmdPSHZsWVk5UTdhOS9Cekc5QktOWTJUV1g2M1ZEd0lZTGIvVFQrMDB2N1VVZEpiMHlYQi8vVXVSeElTQ3FYWklsV0l1RUxFZzdpck5PcWRUUGJETUtYS21nbDBXOHUwL3FqQTBMaWJ5UlJhNm4zM1VBaTBYYTRueHJuUElZd2dJN2FadWF0UkhqOGtxMXF0WW00ZnVXV1hDWHlOekNGamtITlpNRzBPNmdjM2R4S3RCK01SRDdRelJvT2pKOUtOckxzN0d4SUVydDBKQ05kbHlBVWkzYlQzZ2RudWFJdzM1eU5DUWd3YXNqdGlwWk0xWkNXbEliOE1lMVFTaTJ6T1hockh2OXVCREh5S3VEV3NpRGV3OU9ONEMwTlJJQ2NCR1NYK0hid2srUW8yOW9sS2VIN3gzYWpCT3pGSWZ5L1Y2M2x3S3RxNkQxUElrc1pMK0orak9HaGZCTlJlQmdnVlcvRkRLYkpxUXhVazdQaHExL3k4Zk9zV3J3amY1eTdoSmtYbzRMQW41bWlTOTBsOU1rbDZCbklBUHNIOU5wVUg1UThxVVFvdTB0OWdQaUZqVHlxNTd6aTY0TlBKR1ZiLzRCTk9laVFZaFNxWWpJNXd0S2xSUHhQM3NkYkpWNHNucUJCc3lmUEJDd21uUHp2amtacWc5UkNFUmFCdk9GbzFjTmF4T0FTV2wxajFGb25VWTk2N0o3em5GMGtTL1I3RUVNdng2c1JGajBnbkNUQWFRNkFpVm1pWFV0VXNBcUVkM2tnejRzUFI2SWpVZnJOMnl3bWlEN0tMaHN2Mkp4Mm1nQmRvZHJCVXBMZjg5ZklnMXBaN1p0T0VpbGJsUVRmQVg2aTlpbk5tMlQwRzQ4UEJUOEJjVzRzK2lrTHArTUJ4NC9BcXpXNFRrbzNPdWdhRmsrVGpxWDBwanRxR3JVRUUvdHZsdFRWVlVDUlppejllZS9FNWgrdkdHMTZJSFVFRUI0UWhnYU41aHJ2THVSK2F5a3ZzQnQrOEg1d0hrd0dsVXJab2YxMWdpdm5kWUFFYVNlV1NoNXU1Nnp6U0dLU295RnNjV2hYcHNDcDcvSDF0U2pOakZHWWNXS3Npdm50QTFqMzFyTEliSlFxcGRqWUwwNloxU3ZpeWRJKzhhZHpidlVnR2krMVlOcnB5NXRKN0NzOEFiNEdWcndsdHFQNXpPS0tHZldJNUhXTnRZRnN4R1RaQzNnNlJnZHIrSmVlRDJnNmc4eGFkQ2RQOHkvSHoyTlJXY1NrRnlWZ1BRMWpkRDJJLzlhYk5OanowRmlWQkUwTncvTCsxb0FlWnVYSG1xR3dlU1QwdXpCUXplb0N3VmREWTVRR011QlRjQXJENWx5VlZ1UWZqZGhLL3draksyYTI2U1BMeWI4Q1pMZVA1ejVYaWNxQ0ZyeUQzbktiMG91MTQyWTFQeTBBVVQ2WEF3V1VscWFuZ0lpRytQZW41T1FNNWdaVG00ZERCbDY3ejBJR093WXlXcHdXV3E2ZVNsMGFvZzQ4Y2g1Mk85QmliT2dwbmVWTU93Z0pYQUZOSEJLbWF2aFJzeWM4b3EzWThXZGNIUHQ2OGZSWW1aNHpoWjZHbGhtTFdLSXArNGY2SWVrL3VCSWRCYkhxSWJLa3NIcFFtL25MTVo4SE85bmdyN0VaTThEWjZnaUFKSjcxVGY3RGtEQkxDYkxXSGpYdWRoZGF1bTJ5ZlJVU2RFeHpJUWU4UUNjamZRRkFjOHF3OTFUSFhacVp2eUluNngzWmRmdkkydUZDcDJiUVRCSVZ1MDdsdTJZU0FLb0FyY0F4R1A3RU5DaDZscndSbmRqKzN1b3pMOVQ3VjdOZDRWSTJINmpVMHh3cEtoNlgrYWdOelRpbHdPWEtEZDBIeVlJQTV3dkliNUxPek9jayt3cmZ6WU5FQmwxYWQrUmJaa1hVMWp2ejNKVHEwSVJ1dEtRMTdmNEswMEQzZWppNHdpTlVwcjFrMmh2YVdhQkFkMnB6VGJLckkrN1BTN3hyK1o3UGd6cDJ5QnM5anJtOE0rL29hbGxrdkViNldXWEJVSjFlZTZGS044Z1B3bG9LaWc0T3lVenFxYmpOWEdyamFSR2ZtZmk3ZEdNeWY5NkVCYXRaY1greVE4bmpwOVJZemo5bmVlTEN1QjVJbWJ0bi9FZDBnbXhFVzg1elMvN1RrdENoNWwwQXl3U1pJS084VlpER1JFUU9TNng1WDdnbUlIWllNWmEwSnF5c05WV0E1WGo4SlBzYzV5MEgrd3RYNjZUdnluY3pzZGV2dVZERmsrdFBvcHI4Szd6NmNkd1JiOU9Ldmc0Q3BFaXRNR0FWU3d2TTVhbWdsaEpnZTdRdmVHRzNTZmgzMHpBcWhXV1F1bkNXcDVnZURGZGE2RUdtdUFIZG5LNThxZ2ZWcUJMWURrY2srNU5TMUpKQ3BocDhZMEdjUUVPbGh2WU4vTHo1R0ZBS1lPQ3NlRmNzbng2anQ2OUIwSXpKblVBWDVIZzR1RTZsWHpydXB1Y2xGWG1HRnVIWTBDZnRJTVAzQ1VMa3lkTG04bDF2M0oxVUNFdlIwMThhSklHZys0L3hHM1ZtWW1ERWtjTFdvQ0NCTUdZZDNaVmlpQUZJK0wveDdiRjBnWGdLeUkycm9DTnVpM3pZcFd1ZUIwb01rRkE4TmFZWmxpTnpXMzcrZE9qUnlGVHJsQUQyYnplTm5FNzFnRS94YkQycC9zZVlES0ZnTE1Ea2FKOTZUM2NCQ0dWeVovcXlmNVIxenpHZ2FTU0YxSU1NU2JVR01jK3pNUVBWa0V4MFJIeVVHMlltSDJzd1RNZmJtbmZ2dkZjMnhoRTA3eWtPQ3RrV2hpQm5GSVBpVVVCNW8wdjVCVEQ5M3dtTS8zVGEwYUtKcThEbitFQ0FUekgyekhma25aKzN6ck9hWG9XM2hqaVpVWUM2UXA4ak9rNUptM2JNUmIzUTcwWG96S0VmRGVmUGV3ZzhSVUN6TFZmTXhoZFppUkdvSlcxRU1GcHhORzMvYTcwQmUvTGgxL3dlb3RxNDN0bEYvZjRqUmpsb1E1SkpmWHFSWDhheWRyZmtoZzE1ZWdrQmxaeU00cmNaSkxjMmNibnhUeXdJTkNqa0hjVkZ2YTV5eHhJbVptcXBqSy9FKzVpbFBZaitvZk5Oazd2Tk95ai9uU1BtQVVPbHk4dGF1RGJ5dEFXUXNNU3VRNGxtNGpJUUlmTmh4b0VHTFlLd01UMFgycWk4a2drZUZxUG5YTHhoRlFvb250Q3hleU9zRVR2cFNJNE9MeGtselY5VzhhNEpuMnZ1Ni82ZzVTNHoycXRTNzRaL1ExOHVpdW42YzFLTGtwb2hyV1dYWnNqd1hnWFhHcFVJdkZNWnowQlNoOVZKRHRyNkVHSkdJSStsOVYrMzVEUXpTdElRbVVsdFZybGtHRnFKNC8vcDJFdWxFU1VnVlpDK0lpbmdTT1JaZGs1U1ZJemE3a2hMbEIxWUpNaGFaMUY1THFxMEYzZmhPOFZ6SzFYWXN6bUVkSjhZNlJXalExMDBFZlZ3U0JIRmtKUzlnM3JSdm5BajJiMjlyU09LM0k0eWNOSGVuQWowbXFLVDczRkExN1EybDB6ZFpJd2daQ0ErNDVqc2E2ZzdUemZGSE1Zc0hKdThkaDdkemd4cHpCUis3YlhWZGsyOUFZL0lQVVJGZXlPTkQweFpaTWx0VllOR1p4Yk9CZXNFUHB2ZmVUN3Jna3R3KzVnamp0Zkp4TlRsN2lKaWZXVTRwVENiZ2dmY0M0cW9oV0FYOUNleFgwWU4zbUFVK1NJdDJPa2NLREkzSGpSbnVPTWdaTWg2eDIyUEdvQmtIaVgzaGtvaUFkNlg4aTV6WVRDTGFXdndWMWhsNjM3TFJkdnRqSHVYKyt3Mkx3UDlUekRORFBYRFpmOHdWOTBLUjA5VUY3b2FZN2dzaGY5MzdkSnVPMnI0UENRL3h0S3BjL1NyKzVHNDIwcEFzQW83T0RkQmRDOWhIWGhWRWU5U3lHTWVwb2lqUE5hRlRrQTdPaUV6RzJOb09xNUE3WHpyb0FHbXhUait0N25qOElKdERoT2h2dmFiSHVQd1Q3aythL1pleFVMZTFlRWRPNzFjeldDRTROS2RpUVVjTm5NSjVEdDhtNit1MzV1UmRKcDJZUDF2UlZZT0JVcGpBUVFDa2tHc0xYUmFQNTdHNlNmY1dtSEVpREZjS0RuOXpvZlVvdHB2SDVtU2E0Z1B0akhneTNhakd3WGwyS0t3b0xIbTRCTFJJL0VtcEl6ankvYW4yZkticHJHb1BhMi84dytHMFBWZ1BXdjNraVN4UTB0NHBMMEpnZU05anU3bzRoZnMzRC8wc243TkQrU3kzdUdvQm9adGlZWlBmdFBPRGZabTJwQ2pLQ3ZhaEtTTWxJOUdtMTltQ3NNQVpNdCtOaFVZZWhxYWRGUkY4OUhvV0tHeXNqcmNjV3oyMFZvdWFJdGpsOFdEK3o3ZTNReEx5SVhwM2NiNFFBa1k1WkdtZk94d3FiL1RaN0VrNnFxQVRpb1l2cjkvaGpTd3djcjZtNmgyOXYrenloK2ZCTEhqLzhDOVJJalBIK3pBdDJWc2pabW41bTJjYlZPQlJTTUVUVldLbkRhN0IzaGNKWDF5dXRLTUJrTk9GN3dMVFZVTitxd3NjS20rVlY4U25xWG1LTDM3OW81Y1hRT0Y5NzFWSUp2OVRlR29tL2xWcXpQNk4xVWVJK0dyUm1XL3RaOEJUeDlZOWVML0JTdk1CUlJoNXVJdk5UTFNUTTg1aHBzZ0dkNEM3Tm5lNVlQLzYxbXJpOTdOVnZLMWUvVXFUdXJNdlVRemZZZ09GcGJ3TGFqdDBYMkdGN2dJNTRySUYraVBOdHlqQlcyRDlQQ2ZUSEJSN3E0L0tpVysrNHpjZDBJSUR3SFhCaHpKVE1tcnNPQ29qVGNVcVRZVWxuZGV5YVdVbUt1bFdRb2Z5Qk1HRko5SzZUbUpkZTkvK0FUSG90MVZ4U2hVcDRuRmtOK3NBMnZ0NjhheEpNa1BYbk9JM0lUeGhGT2RQaVFLUGpCaEg1d0R5bkxnN2N2dVRaMHJyUG9NTkZHcGg5VHlhakpWQ29nZ3RadjJXN3F5MjhSMEFhemhYaHJmbGh2aVBzeEdqV2ZYU0xBU1hzbDNVNkZmbTA0NGVKc0wwZDFROG50ZzZKNWpkWFB2RFpxMG9jZEo5L1VOM0FpeHNjcnVidzMyRkFMV0pZUDNudE5BR09tZGxmdlc0YmZ0cWl3aUJtRXJsT09wS09VQXNJTndBNGMzZERuRldKQzhXNkJYdmtBV3JXb0JITW1yU1o3V1FZVDU5cW5BcE12Sm9lYm96ZUJ5L1ZVRVgwcmg4MlFYNHgydEU1R0UrTkE4WHh3UFdnNHE3SjFzZnl0Zk92S0l5ZXd0UzZiVitrNXNvMGdTV0paaTV1WjZ1bUs3NWtLOFJJUTVJU0c5SzlYKzJxZVQvam5QenpyczNjWUtnOG4ySUl6MHplRndWSU9PcFVaUDl5cEFqTEZFbTVOQ3lUSXczckphQlNISC8yU0dRbTZsOStoRlp1b2JHTnpGYStzV2NLdG1jL1ZhN3Z2WFVUdnhYeDJ1a0pVMm1mRWRlWCtzVHdCdWZGWmRxQ0w5K0Y1QW83a1h4cWI2Ymsya3cyLzFjUlFaVlhJaDJ4d3hEam5iUm1Ua05FQ2NMTEtrd09vaEM4UEd5eE91ZGlRZkVwR3lhNG1aeG5NWi9JZTZmc0dKeHk4RDI3OFVYSE9ab2RDSzNpbUd1eExUWXZJODB1eXNmNGJhcnBiR1BqU3lDeGxscFZWdzdlYmpoNmk1MFp3SlJFM3lnZ01zL1hiV1Z3ZVdybXMxcXlyNURJSTVkTWk4WnF6ZHRtTzJEamQ4UFEvV0ErNDBXWDNoQ1hYeG1ZdUlUWTZESmVaL28wNjRWZEc2dTRtRkdxSGpsZzgvRFFKZm0xbkF3a2NCMWxZS1ZpZUFkRWNTdVJYd1NDQ29IODhvOGdUTndOL0ZQUnF4bXhUOTgyaU5BNWJvZmlnbmdoTHZlbDBGMDBjZFVEUGZBSGtKNEVBU2JvV0FYMkN4VnRkWlJya0JVNWdqcGkySmtWbjdzUE5kYk1FRkdzd0N5T3VXWTYxS3hiMEVQaVpLdmg1bmY0QzlKSHNlOHJjbndYeGNkQVBPb0E2OER3UmZCVUJ6bHd0N0dyUXg5RUhWMGNrcnhmVDc5bTBoVkJxZXRjNVluRGg1VzRGOHA1RkYvMHI1eEpOajBudXFEcU5EWjBCRDFmMGp1MEFsMkdjMGJxQzlqZTBTZ25rek9kQ0d3cUpWV0FhS2Zrc0NXZDFIT3pJVU9xTDNKSGN4a1hyeDdoRVR3cXJUSCsvZ3JLdCtwaHhJN2lESTJCdFRiU2ViekJpRmoxV1hXTEZWMHJkendEbzlvVEZrVmtpN3FpU2ttK3RrL0M4YWNXazkwd1BWSEJLVTdkRHc4WXVCQ0JBL2JpYUx4UDE1VkEvcncxSTZ0aEZ1eTJDeU50TkpzYTNWWklrdC9sb3NIVmM3dmN1bWxDSTBScUJEYStVSXRPa01oaWVVMTcvM1RSOFJBYjhXWStuNmRkZlhjazFraldtZmpDVkJYblpXQzMrZDUvSERyWE05c29mZFhQSzNXWDd3WXp0bVNWMnNTa2lvYmtyNndWVUhMdU9OSys2VEpFWFZVYzJaanpuQlYxZTJjTHNHMWxsalYxdFRRMGMvWS9JSGc2a2t5VDZOdEswSC9qTTh1bW1WcE04bU1IUmtIYzJabnBLNlhFWk1ldnpXTnE0T25RUEkydmNDRFlEQVRZdFVNam1OWGw5cjIvN0NiQzhUanZBSlVacTQwcm5zQnFRdDNzMDErVVhlajdEUm5qbCt4bjFFOGt5NU5Za0V5OUNLdWg4VDNmQ2JqUFduUHJ2ZEFJU1N2OG5DdjNHcWRWMmNhTkpCL21XYlJRNTVIbG83TDlyaWQ2UDU0VEpMUFN5K3dydUdpVmJHZURCbE0wSDg5OHhQYW9GNkdjVjRGWUpjeGw1Q0RrUUhuMVlveW4xYkZhTGRjNnhwUUpaS2tZZy9oTCtIcy9pbFFFYXU3V2lCRXkzaGNuZWJGckJjZHA3UnVEWlZEUHFLZzFFamkvL0hkT0tsYW0rV0ZWMmVhZXdiTkI2WVpvWjlPdDA1eVFGK0xXTU0wMVFGTVUvQ3dINVJjT2hWR2d4OXl2dkpiWllKTU9HN3dhV1RFdklqTWpQcXFZeVM5T1lWbUoweEJ5T2VaUCt5TFhPN1ZhOHNwSTR1TW0zTm1CdytIVXovWDYxQVFBZmxyMkhabkJSblcwVFZRaHdZSDdRcVZ6d0tya0JNWm02d25DRy9idU4xb2dJendROW0rSXQvNDBmekp5aVlSazNJSWU5SVYzWVpqV0wrc29vb0svVWNycUR0dDhtdEUydzFoaGJpTjNqWHQzV0RVMExCQTBqUWZSTE96WlpnTDVYaWlPanhRdHpjT1VQVkpxNzlZZDhMVmFEdmNySjIvZkozSmRSa2NRWDhUZjI5bUpVZjV2ZEJOYUVCWFZTcUtTYmlZWjN3aytIbzUyMmdvNFg5TjdEMkN6WGlxSElLK1BMYXgxODdjQUtGeDk5S3VjNlJEMjFkQ2hFbW42WXlvblUvOVROU2tzV2hmYVJZTm5keWVhL2VYcnR0bjhvbjRrY0VJNGFnbnhiY1ZYNEZkS0VlTzZ2cUdFZDVmdWIyMkdjcHpuaHYxWm1CRjJoZ3d0UFRObEFEY3AxcEhyQlB5ZXhVY3hIYUQvZGUvZTEvSVNpc1RYRCtNK0xGcE5kYktSUlBuSlhqSmp3REQ2N2FmOThmTTlGZGEyZlI2c2ZQRWtrM3RQZ1UzVEZ3eGpsRmZPc3JUckhSVFlGVktyMW1kOHlmUlg2dmJjc0RSYmRjRDM1YUVFSlMydzlabGdXb212TmdwakpKWWFqZmZ2MHpCcXAycGVsT1NIQUIreDE0cTR6Z2IwMFZ1Y21kRXRyQUp6TC82LzlRbWtIa1JSMVY5dzVQbjFsZFVOUGFyejcrV0lMYkdBRkpuc3JESUI5bThrbzNlVDNTaEFtZjVMd2RjZjB2TTI2bGpnT0JtTnA5Y09IRVM3VGViZEtodU5KWTh4eEw4b2tWSzF0Umt6NFE2WmNjYWx1eUJ2cnhHUHQrSTdEU0o1amorK3I1eVlvSHNYeFpxMC9wZkJjMlYzNngrQlphTGRLQ0VrY2hFVDdXL2VJWDFTbG1jbkUrYXB0NUxFYTRhR1BnbzlsQXJEZTl0Q29TcG9sVDBBWHJRVTRXZFNRdm8vNmlycm9TbWlkek1qWkF4Qnk0dG16YkVTM01zSTVZNmUrdGlzK1A4Y2wzQVcxWi81NEVSY2ZkSFRwZnY1c1k2L1MxR1pTZVZseGh3YllJQ01KbUdRWENjbWw4aXRvdTQ5VnlRYjE5b2MvRE8raFFUNWVnODZuL3FlczVMVkhtMDhtdUpTQ291azEwT1JJRDdET2dmZ3FERDNXNVllcjhXMmkvcDdpMnlOUG5vekk0S3hQU1lkamhXSFB3VUxMeFZXWHlqS2h1WXVrR0IweEpkc1VVcVh4YkEvQnB5b0hmckpxaytpN0JzVWl3T0pwODBUMmlUeDdBM293T2JlNXE2dWhRWFFnc3RzVkpCME5tMlh0K2JQTlowdGdYaDc3aW1nMkxTQTZnbTZQMjlGeFVuRWxLQjNaTGwreElWTTVTNUJFZDh2WlRVZWlKSjIvMHgyc0c5V2Rrc0V5TDVaaEc2N1ZvcUdKd3hxOW1nOTNVMFNNWGtmakkxVk1qeXM3dXR2UEt2d1dCVlI2MXhQUnNUb3hMNVNKdjlRN1BoMnlvSzVwcEoxWHpwcUNwZmEwbVREZ0g4QjNTNzR4MVg3ZzdqNlRwRTZ1RU82cjIwTXJsZ2ZEdVFpVG5DaEgrSHlQYkkyM0dHVkMvQ202eEo3bVFLZ0MxWW9vVnVGYmtJdi9MZW9GbHMwT3ZLbDE1bi9EL0JBaEtPT0JSWElJaENrOEpOV21iUVIyQmVJcGF5SkhhRGw2UHcyZ3Z0YnV4YitjdDRJanVSMFhWUXZ0L3gxV1h2YjJrcDVQcHV0bVJ0WmsyaERBOHRsQ3oyZTJqNHNOR2paUjlaT1lZY2FuOWtyWEZaZHlZcTVHTE03WnF3WHo3UlBZRTdsU2JiKzZBUkVIdFZIR3pFWHo0eDFaam5laXdKVHBLSHhwQ1Q4NWVEN0xSLzFjZlpwTEhHWStZaUcxQzk2amc0N3NxZ21rc3lPZHE3NFpDOGZGVjhNSkFhbnc4UHlUOUJoUW5YWU5IMmVlbVB5am52M3FWRWxncnFsUTdNWFppdlpIQlhiNnloWHRkdkJsVzd1bGtNS0VMbFAxTzFtdjFvL09MYkJUN01kQTBYMk51cmE3amNGU2EwOG5WVEprK3ZudXpsdmdsVklzYWRTMHlLUVdaNGZNZTRYSnpxWnVoTnQrNHltQVZBbkl0Uk81U3dMck5XYzdZSjFmdVA1b1hRUGpSVmxGQkhMRHYwbU9zZDVKektqMTlBQW9UcnpxR3JNSmlBdkVtL3BQdkt0WlNyc1k0dXI0bkU1eDJuNGxlUnl1Y1VrbmVvQmp1YnYzVHBBY0RrS0NSTDR5YTRJdStwWFgxRjRZOVB6aTU2NzRjQmZ5UkRCZU1IQ3BOWVRsUldPb2FBWElGcE5HQlBDcnY3QnpVSWRadDB6UGdYWmFVeFhMTTdQQXBKVXcyUW9aa2JtNWtTcDBYY2JCMUZUK2JkL1lRUUdDUVdCZUtQMkpwcThDb1lheUpFVytWd3FKczZyanl4OWdIWW5YYlVKeG9INVIzU0E2SUpnZVAzSng2MVhoWGxiUFY5NnVHbWZkaDBLQnl5QkZ0MkNEMTJMRURIWWo4L2xpZzV0Zk1IaENBamNNYWNob0pqaXVhRFkySVZsblFXZHVDbmxyMmpmcnQzSVl1TGNtRTNQRHFBRndpVHoxQmt6d05RbDd3WFRQdWI3aWtqc3JxdVFmOUg4OUJIUHFmOUdFSk5Kc0FpVEZZajRTMllYUjlQVW13MDFwQ1pOWE42OXdQZitUa3R5RmhKQm80YjBQVm94THpURnJvdFQxR3pVN3l4M2pEOVpSSng2TTVBY3JXVnFWWkJJUHYwWUFxRG5kb2daRmtGTGdLV3lkM1BRMkJEU2ttUk81am9KK2svVFlBTy93OVh1VFllNmJYSW1vbGllZkxDQk9SenB4eXlvV3lZd1Uwby9aLzdPbWgySEV4SVFyRGtXc2htL1VPTDlnK2hmelRSc2JwNTlIbDNPaExraEdqNW5FRnRFSFhXcUJHNVdhVzc1MmRGQno4UWw2WFZJUFZLY29MYUxNTXIwV0dQb21yVStPRE1sU24xOE9ubE9keWZhUmZtV2tlTEJwZEZhcGpHVFZ5M2U3azNGMkdiM1dSdVlTbWVMeGRYM2g5ai9jcWJlS1c5bHpma3RLVHBXdDZqbFlCZ1M5YnBCWGg3cWNBSU9vVmhwbjFEYS9QdnkvYXVjM0NGMEZ1MEluM0VDdlRCelRZMmwyUnZaWWs4cGw2VnFaclV0R2djRDhVL2xtTytsVDgxcDB4V20vS0dOeWI2THVpK2RHZDFaaVZkNGtQdHJoUkNZckpkUGVGVnVaMDR3TFFsVlhrMTZzTHNyK1ZnL29DckdZLytCVFR0bkJvRURKNXV2WWZ0SGw5VnBhZGwvem9UamlUdmYvUVpUcnV4TGlxNnhqVmpnTzZuSFJxemttSGhBYktZRlc3SGtxY3A3WVZQM2d6ckNySi9PQWt2K1FuRTBVYmpwZFFxcUd1bHJiM2dhT2JXM1RxZWJFNVNKTEVESHczanNDbVdOdFNQQVhXVDhtZGlIWjdyOXF1NE5VL0ZRTnFUTEoxOW9LdGVsL3kxM2RkMGRZakQyRms0YTlmVE1KZVhhazlwYk8wSXVwV1NGSG83U0c1SVV2VmVBWnRPR2RvNXMrVTIzWWJSKzRZOUI0d3NSSzIraDJjRTg0QmducnZQMDh4RkgreDdlVUtFS0paZHhDcjdNckVwZ2xHTUE0eU8wWU95NGo1RjFjS1RpM2I2eTFQU3hqanB2OWkrVDBlakhuR3FlbFFMMW51ZU50MnlmdmFYc3NTbVprNEpvZkd3WStNTEcxejQvTHhyejBMMGd6MlNrd21hUm8wVS96RWVzdkxneU5nWUhCMUdaUU92RW5McXVUb0xYT0FVV3ZqaUxLMGp0TnZTMzkzdmNSY3J0OEowUjZ3UEE0bFFrMzBZVmZQQnZSOWZQeWFIanpmRGgvbS9YbS93dTZMWEdDSk16QThZN0E1VmVXakk3c2N5d0M4MGJSREpPSnpMMTVaaU02Q1QrK3BzNWhucFI5bXc0cFBmWEtwVFJQNTc0a2wyU2M0OThHaUo5c2w4dmdBL1owK2ZiODlOYlhBbkhOZS9KbmZGUVZOaUlSREY1ODFJc2RjMTYvWFRDOFhvV0pmOGRUMU1vV0M4OGh0OWhzZ0h6dnM3K0Y2Z0tvOGU3ZUlwS1VoUmZUUlJnUml5VzhzSk54cG1YVTYyWnJGdjJ4YjJWdVNaSU9nVFJVbmEya21xcFZRZGREbS9DS3poV0MrMWF0V1Q0RjNRSWxQT0hvR0padDR3UzJIUUpjK3ZJbVZRKzE3allGNE0xdmhNOFNUdTd1Z3hmUFFjYWRMUDhrQmtKNUhFeEpWeGtad1NUUDdobm1ldFBQbktlaVJ5RGRudi9IZGM2QUpWZXFFc2pZNFJxT1p6S0FLajJqY2E5YjB4b3locEtwRXE1emhEaUM5bTRJSitFQk14dHdrVXk3cmR3RzhBUFFZWFpmVFgyR3F4R2s0cEJ0Zm1IaGNTMXAva3E5cUZuWXA3MlpWMk1LSW5Mekp3MmlRVTJXWkQ2dVF5ZzlXREROVTFLc1pkMHFhTyt3djh3U0VHSGhWUnVrWldXZnN2diszNEFlbkRzWldLYmQvWWdRMEVFTGhFV2MycUNiWm4wTGhlLys0UUNYL1FEMU5sdERUZXhuc1UySXpnMEsxQjFWSmpmQVpzYnJFWjJZQnMvdGdNcjlyaUZMd2h4NTQvK0xWNHpDODhZYWF6eEh6WTZQalY4RDBZdzArV0xwUEJXYmFMbWVnYXoxRWVIZ3ViYkhpNDAvWGdiakR0dUhBSFpmaG9nQU43OWpTd1RZNnNITytBcE92cUtDT2c2TGd0NXJmTloyOGptUmJJVTJxbTNod0pIai9WaEdOL3FWMFNVbTRFeEN3ZkVLSWgzTGttelBDVmxiMmJFRnBnc3NPdG9EUVU5cU1CWnFrdmFtN2JVS3hmL2RSak0yZ0xUeVhPK2w2OXYvenBLUXQrT25GK1BLU0NwcUNWZi9xMzBPRkJVOTJWZEI1a2JwcVpwalpZS0E4Q1NLY2JXWVRxNE1xaGh0YVNJMCt3Q0ZoWUVJbklWRWV4RHhQTnk5TFdJMEExZVBlSy9oSm1IblVtS3JIV05WVmFRWkJWTlg3c3h3VnNEL2VZNEM0Mm5TWi9rRW1qNE5XT1lJZzJVMVRXZHMrYXZ2VG5Tb011WkpRbU4vM1Y3MzRxdVdvWTZtVXIrOVlNWWdNK0gxNmhlMEtQSWpObU83TDBwT0VjTWRXWm9jSnRNMUc3SXNWa1BGMCtkZjFkak1yZnd5MXVINENEUXZpTkFKWmE2UVo4U1YrYzhnV0xNME1VZFRXZ2hRYzhNckRsOE5ZV2lGQ3VxNzEyMWF3OGJaWmdGdldTZXpmeFQ5aHhpc25KblFzWHVKQm1TRnNsL0VZb0N2ZG11K3NkSHNhSHVnNy9CWFpHWG1wRXNuUUtnUTFtd2h0bHM3TUZIRllMOUhkWVluS1RocStyeCtpRFl6NFNSeU5RVWVZYkdNbENKS0ljdDByaGhWaEJJNW1DaVBzd0N4Zjk3YXkydWI2TzlCMVJzbVh3U1FYK1JCMUZ4d1NONXp2YWRWQUVESnhzSnVZZWh2dXJUSzIva0YweHQra0ZJbVh2UHQvNlFMaFdUNDUwSGxGemV3VjFJVEdDQlkwMVIvRW0vWGFpclBrR2dVZnBtdFpwWWZDdldxbzhrSDd2Ym5tQTdsTVdUZTZjaXA4VE9HQzFWVVpFNGtwdWtDbm1EU05JYlRnbkdSS0M1VVNXNlJMM0NQV25sRFd5cTJuRlNrUFkzTGJGKzU2dzlWMGV2TkRiZkRYRjIvMkoyT2crdGU5MDlIQ3JJUzdreHFPWVc5S2VDWmptZWdsMFBqVnE0Z044UjZpYnI3L3Vqdnd5M0RCSlZMVVFyeitxZWFucHZDRTNJNFdOc3pzSFl4WlZjZDdZc1hQTUc1RjY4b0pjSU0wcWo1S0o4TXZjVGU4bG53UVpiVTlOdkxpTlh4b3JKbGxaQXBxaVFCeHYyKzFvVEZwOWtMUEFOMGNTZ0lLREJCZmd1L3hiY21FUTR3S1d6QU9qMi9Zb1JtYzhTVVppLzR0WG03ZW1OMWpINGV2bGVmLzVpcFRMU0w1Y0M2Yk9qRk8zeXBMSGNqaStBOEVjTDhSZ1ExMk9aMjlEWElHM2htcDNWcjF4QlB3WUZPdGY2NWpVelcycjFSc0pMTzV1ME9ubVNKVXhnajhxZ1drUndXNWI3enNsWGJoazllWE1Kb3VyT1BRU04xZ3hTaTJGSFBkcDViS1FoWDJkVmZUaGxkaExOSjdWUEJIUDJpUityeHljZXN4cGZpcFo4WDFWNmJUSEZVSzUyNHJ2YjJXQ2xhK2p3WDlEYjFHM0NsNWFYZXpSNTFqSUwzYU9QVGFPZFZmOS9SVjhPMHcxS3JLSElIVDIyM2IwK2JxcGFWNHpJSVJiS3pUOWpzOGo1ZnB3ejRaZlh0bGFYUjFGODBFdTUwT3hZcU1ocW9rOFQvanJWZ0tveTVrMWhqakwza3Z6aHpCZThBVk11NHgyVm9kQm9sYzFZVzlETzgySURXNUlHSkJLd2tQQTZmMDBLQldBS2I5UGlwZDltYkV2aFZvVy80b0JFWGlEYTNKTkkzOTgwSDFvaVgxbXEyclFIUXJCYmZaWVMvTVdiNk53cGhuTHo5Qld1TEpBVFhiV3ZDeEtXZmRrVDVWYUFPOHVWRVZtQkYxQlJJYmRBTk5wN2Flc2Z6UnpuT2J1RkJGYUsxRWlzNTM0TlFhRDI2WlExZ05jNmI4K3ZlaXpGWTMxckNyTGRacWxwZHA5bWFKRUN0UnlrU3ZZRlM1SHZLT1RzNkFLQjBsRGtTeDhwMkd2M1kvWlhHUzJaZEtqTkp1S3VnajRQYlNNdXJBMDBYVG50Zk1yRG5Lc2dJNGpyZnd3aGdnMEpZeG10bkFFUjFoUFR6U1pUVUkzMmQ0MGw4T0d6c3FRaVpFcDNNL3hydXNQRkNzMHFUdzZMSmdyRXU1cW9mbUhSTTFBNk9WWkZ6MmdNYVBFekdIZ3NSV0I5NkJ1ZEQ4TGhrK1FuemI5UzhoMGZyQWkzN3NRaWtEcm0wWjBpSWJmalpNQmkvaDF5YlZhMjJOYklZSzA1SW5pU1BCU2hmWi9KMUZyYU8xMy9YU3BhSXFrNTBYZWY4YTBHWHZxQ2tjbW1VcTVmUm9LSzRudXh1dzEzTktRZUFnWlNtQjh6VWNSWGRTa1FHYllJWmtkTzVhNUVBeGtwV0FnRTFHQzkxWHdlTk8yRVdYS0tUSGpkY0JJV092d2paMnZQU2FVVkF5V2tpaUdab0xvQUR2b3ozbjRXTm1FaVdEMkw3SktmSXZIRDB6NWtJZ2JhalhHYm0xeXpzQmY3WWwvNEV2MnpuZ3VGcUZTWjIrbmtsTXN3Wnk3bVB0aklXN1pJSENtQVVqRTNhUkRzNVgvRnFJZ1laRjFZZXBaVmtBc0VweElNR1JLZURZSWV6VWZCQWx1ZkNMWFdsZ3c4eThQZi93SzRZL2dmdC9sODJsZUtad2ZOMUZQTlVpUlJPSVFuYWpJZVlmcFFSSjhUL3ROZTJucUVjaEY1aVhLdjZHcTB3RFRpeUhZSTZBRUZGa0dnMldOaWRjUXlNUHBNdVZYSzEzcENwWDZ0WXYxQXZOcmtmVjRwMXhhNTNQQ2prbVpkU29GeUdUYU1jbnRCVmtHS2hrNURjODBuWVlERWRUbHlUZnRxK2Z3b3FIZ1FhRXlaUFE3M0VGay8wWmF2c0NOTU4wM25PU1VlZng1bzI2SGtTYnllM29EQ2JIdm9Va3NISUI3U3VjWnVGWktjclNTeDNKV2VBckF5Mkk4K3ZUMFBMdVNMVTdiYm82RmtneHd4WjlyTFZoYmkrb1ZQVTZPdU56cm1ITGI5TkkxUnd5VVVhcmhPalBjeFF5SkthQ3piV2dHdlZGR05KN0RicDhkMGo2Y1paZURqQjM0SDVtSjI4bVA3U0FKeEozYXQwR3NRRVJCZUMvMTZjTGg1VWhpc2lZU1NiVmp5ZFNtTUFtNFlZbjdVSktzL0tLeFVTMDVIV2pkemt0RG5nbzN0ZkRSRFh3bEwyZmorbXhwbi9CbnlxcGdYZTE3NkNTWDVhbS9uT0FyVWQ0aXpEQlRVaURuU2Q1d0N4R1dLU1htVjU3T2x6dWROeTkvSWc3L3Q4TXUvTGh2ZWdoSE42TisxblB4bUcxUmpHOFRIVUF3a0lHTmZNNW1XT0tsWCtON1BLall3bHVkTGdmeGxMTThWYnp4STBDWko4aWU2TFY4ZEZMT244OE8vVDkxN25JN2d6U3ZVNzVkQUo4Z0RkOXVoMTlDWG1BR2d5L2RoTGlKTktXS1F1ZllLek91UmVvZmxuU1R6aXh1eGxHdGlXRmQ2NCt1NGxkNk9VV2o2d1FyY3BncFBCVDVJUi9qVTJja1RBOHBQYXBiYWVHZVZsVUxjV3dOMWpDaDVucHFONFdJR3dabWYzRGZzOFVCNHFPMnhsV3FlWUl1OGEyUUoyZDNXdzdKYldaOWNta2xMUUxiQVdETEkrcjVIZjlSQk5IT2h0NFplSkkrVUl1MDl4UnR2NmJJT0I5L2pIUkdOVHlhcDdXZVBBOE1zMVRTem9Dck8wUW43ZzBxQ3IwRWI4M1lrR3lxK0pJTkg4TjZnZzgyamZqUDNJdnpTUHltbHpXSEl1RVVMMU13d3VsRmowakw3NHZOK1hxbkY2OWllUHBFS2dUQVE1MUh6RVRoNHZvUWxMc3hvYXhpSXhRMGFQWlJVbDJGNFNMNFd3eFNhc296RjhpSENaNkx5TjBZNklNU01IckYvaEk2QXdRdG50NnJwTDJJLzRHeXJNVkRvMzRiNnZ0OHdjc0l1eUUvVFFTbnVOd0U1UWNjbEtYNmR3SjlFNldIanFGUWVwZzl5U1NhanZEUTh1WHRFb0haUktRMGMwNWNuL3Z4bzRjUFZ4eDJaOUExeW9GM0lRZDRFeUtpTXFmSUtzZGdPbmlTVjlvOEwzOGF6MG5qMFVRZ05aS2lScTZtT2tEeXVxMW1OQ3EzQ2x5K1BYdnU4WGhJUksxb3VMR2IyZGRwTEUxanVUL3Azb1VMRWNDZklUb01oTHBxRVhOY0x6VytCK1V2aDIwUUhhV0g5ajIxM3RiTzFBQXA1WU9vcFpUVUFvaVNvU2hFSkIzVnNWTHRHaUd3OVludmcxQ3N5NnZoRytuWllma3FRdEVTYWN1ZmUvdk56aVNnd3hwSjRjQWZ5VzhrcGJBVkltRGdqY1kvSkx0dXorbysxbW5iTkRxeStTY2xzWlNOUEZmSEJKRkl2eGtvTFVaMDlUckRqZExzb0lTTCtxbjUzL1J1bnNTOXM4aHo4UG91SWozcExlRXFlRC8wcWZsSWt0Ny9VcW53ZEd5dGhFVmhzeGVyVFZHWkNyWjBDa3VGdERHYTBkUDZMWFlGYTdNbEVZVUlMdUdLUWYycmN0b0laMHN0RkpHUkluQWZVUjJOMW9PeDBZaVZ0NXdibldObHJHU1o5QmJEUHZOUm5iUFFqTExyMDYwcStMOHg2VDlUZSsyUFZWc1JMZHc0cjM0TkVHYVVGRGFCRFpFL3BNUnBBMXQyODNQZ2JOdWJTMC84SjdpTEl5VmRYVVhMYm05NDNVMWtwUFpOREhLN0tPc0RGd0xTVkx6S01FSUE0N3ZlejNDdFZneldNaVNhN2RlTUY0aXgwaHpjaklGbVI0UHRLR2IxeGlhN0lCSTFFMFliQVVkU2NMTmtDQWx0NGxueVptQ2NzbG1BdkdqMVJ3ejBQMjdtekFnb25lR2Jvb2h1RkRqRlVHNFZGTFNxYk1zeFE1bzFmRGhmdnl4WHloYWlwZUFsU1paT1JicElZWE4xczZ0ZXFKY2kwZnU3aTlZUGJMOG1zcFEyaXZ0eUNyYTkrelZENWVPc1VCaEc2S0FyTHpzdjk1bEtPYWhadks2bkVuQ1NhTFNxSG12WkJNUzgvc3crWWRMQVVWbkZZRVFBSmxXR3JmcDF3QlQwYytINlZmZnlUNW5sQndkUDZSQ0ptaVVMdUNLNVFnakhXdWorZWx2V1R3QUcra2VqM3RmVnRuSWlOMUViQW1lTGpJOUppK203Ui9hYWhsenJndVJkNGJ6bHdXTklqZHFTb3NUaTR3Wk80ViswZGNOUVVyM0sxMG5IOXdqMURBci9qVnpYKzVjUGF5OG56cDFMOVl2bjZMb1Jpd2hFVUY1eXBsYi9HR3QyR3prYWJ2VmhBZlVuZHk0bUc3VXlkaExQU252MnVlK2xvcUZHeW12dE5vYTVCd1ZVdk9hMUVkaTJZZCtGYkRmQWhqOVJhSUNITjcrTEplR0Q0YXJ1dUJiT3lYM3pSSjg3RkJsOU9HeXB3VDlaRzBYQkpjbTJBYjY4ekJacTJnR0xkenM4QjNDY3BVcW41QllyTlZHMU5nOE5lL2ovVEs0bDhabW51MWdWRjljbHBCdnpzN3hNbXBYY3hIcmJwSHNEcTFzRGl2VFQrZXJpNndmR2RLMkpoQkpwL1JaRmxSWGlBNVRGUGtpSDI4SERmK0kreHNwbkJUa3NiSDhLdWhHV1ByYmlOSXhUbkFtQ05XWXNjdG8rM1dsNzQxdzY1TWZrTnByOHpoZGY3NjVrUHZSMWx6UUxJVXZCQkxsWmM2TXRXQkphTE1ESDh1NWxZYm9RWkVxTzZPVG5oT3NVeUJydU1MY2pkR2lxL3VLQ3ZWSGlRbVNuQ0l0MFZKSzZueVFHRmhBTkduamc5dWdUZ3NhVXVGSUw3V0RVbk1qaC9IcHc0eklDQWdJQ0FnSUNBOHYyL1JVZnQrbTIxOVFWKzM3Yzc5bjNOWDdTci9oOW54ZmI5ampnZWkzMjlnTjl2Y1E1ZnQrbEkvYjlXRG42Zy8yMzdaUDh6N1VyOVNoMzJmWlQzMi9ZZDRIcGY4TzBDKzN1cGNOOVgwQUY5WDBmR3ZuRDMxZlh6ZnMrd3EvVVRmN2ZyUjc2dnEwMTlYVjNmVjJRQTlBQldvZGVMRFc2OHdURUlYMnhZVjc2dWtsbUdnUWJOK3JTOGlKL0xwWmhoZVBaTFk2dVZHWG12VlZiRmg3dzdPNVU2bi9FWVZuMlRQRUxTQ1hPSkxuN2l4dllxdGtZRUZMT3NkNnVab1Mwd09mbDNnZFJCTFc1MUo5SFUwaGVMb3AzZ3hudGtmRXB0bmdpVnVneWkrMUkrdXVRTyt4aUV3NDloZjdOekxaOEJaUDc4NWxMY090d2FvWk5IOC92eDhjL09qampOZXBUU1lqT3o3TTIvbFVoTlJhQlVsUFp5VWJFVllVd0FiTFVMMGt6N2s2bVJVVzkxQWVvMjkybU02SVNHM0N1S3V0ckhhSDVCZXAxWExSZks2NURjVVdPRVVYVUtIdVVSOUlobDRTRUdzVFFDdlRjV0dETzNpajRaeHo1NW1mMGJNTW5lWWxNaFRqeGtPQWpydzNVdVk1M1Q3bzNXcWFQNnpWd20vWGdXaVZQTzJDc2ljWm1TSXc0eWRoVTFmeTNsdDVTRWVwWDhMVHBLSzhNWEs2ZzU3VUxQeXlyUHFCcTRQUUpYa21LdHJZRVE4WXF5bCtqUXBTN2IyV0l3S2J0ci8weG94SHBvZ1k3RnpKOGVGWjhwYm1IaUdBVENZMGliSkxwaC8zdStuN3FyVkdwU3FOclFSdmlUbWEySVpMUDg2YlZUeTdHazBsRzlGQWJKc29xeHJ2OGpLZmNjSXpBTlAwMGx3TTZ4aFJveWJ6R200b1I1T3JIbDVtdlc5MjVvdEJZbnFLVVhhWHZmYXdvSmRYeXo4NS9TT3JFb09WNlhpMm5ETXYwSk45eTFkUUtaczRYdm5sbHV5TVFHbnVTN0d4T2g0djhFRUZlVnltWmM4c3J5dXdISVc1SHhnaFU4bStxSENHN3pmdWRwd21ZVjlZMFErZDlham85T1JNQklybzl4blV3eXAzbHlrQnZwZ3pNWGpBVkhORGlCYS9wTGJKUlM0dCtpUDlGVWI1a241QWFNTG01dnAxODFDR0J0ZjR0VTN0RWtpSWl4WmlDT0l6WTBacW9nSzRDYXhuVGYvZmNoOC9UYmtYTHNUNnVhMnQ4MUR4L1ZSUzdYcHJrWUZMRGpzKzRHdUwvSGE5SzZ0cG1qcDExemhDSGttTFRSempIZStMMnlQM1U1MWhDelladi9mSUNHT0RFdWlOTk9jY2lXRTlnZjBIV0VZTDR1UUhuM2E4V2FzVUF4MDVFS2hmN1BnTjA4Q2FCLzNCZHlsZzF0VW1LNWpIWnRDTnlPeTBiSFRNT1NTaGJnSWJKTUFJL2s2aXRTUmxKeUJZMUhsQ1VnUzQ3QmlyZHd6MlpnQnRYaEY2NzlIcUc1V21MNnZtMEVpd3ZWNkwzbXVVdi9Xdm9WMTljRnQwb3RObDhTSU5KbjJBTmRFWVdMRVlzUzdQajdXc1BqdEhqR2RUbmNEWUt2T0dWS0xuV1NoUTNOV3hJVFJlNEVqYXNFMytPS3BpZHQ5eUdVYzF6Qzc0LzFYdjhBNHlMMFJ6cmRBSmFOSFZFbk9BOWZ1dEdGOHdTcGpjMHdpVm1GdHFxd3Y3SG81Y2VGRjRJTllrUmpSTEpobDNJc3UrMDlCSkhja3dEbmlsaHZNdFZ0bWJxTklsamhHazhUZGwrNVZNSEFIaVcyZTBPNnN6eE1tSm5wMGROOW4weWxRVG52Q3VXbit6RFAybmdwUTJxMk55elJxZHF3UFFET09VdDUxZDdnUGc3dGQ1bHNJSEIvK2puVnppbC84Z0hFcnRTclhJTVZBK1UzTHk3V01nN0YzajNLa2FCWCthREdNY2x2V0h5cUpNNlVVK0t4Wi9KTWpNT2k4T3JXdTBMVENiMTJ3S3hLajZPZm1RU21TZFFwRmp1YzdPY3AyblBkUDFwaWVEdTRUMWRKZTh2Z0F5M1BFSHlHY0N3TXg0UUtBWnF6SkovZDFHVXo5TnVtV0RBN2o5UHBWSit6Wk5VbXJxWTF2K05VdHRrdFlFZ1RUZGJadnRzRHB0OG4zdmtnMDBMRkpMa0Z2Ukx0c3RoR2RJMGw3SXFaRFZNM1dZa1VPVG05cDFabVhtQTdrY0ZmanJtb1dVcm9QL01NejErbmw3K1JjWWRnMC9XNWdQY2w0bzN1cGx5aGNhQ1ZrTFZBTnVzazZWM3hLek1WY1dOclI1WHBjODZBMTBodU5zZldmdzBLRlZxQUZwalFzVUI3RFlySE9jY1RWWldKRmZhbENRTVloQzBaU0tEZ2ZFVis5U0RGN0NlTTJtTE5xZ1NpdlZ3cEIzbmdjVGlnS1IrZ2paT05OejRRdEhOSCtMRlBhRU1TQzQ4c0lYSVRKV2p5SVVlMkNCRnFMZjcrQm9ROWo3Qjg1RkEvZHhvTlR4b1l1dWJEQ0pxckdNTmdLMnpmc2NzVUExT3MwVjUzd01HVCtOUnZ2NHBsQjQvc3FOd0FYcWdTQlBWZGNqZURudWw1a3hUYVhDOWJiVDMvVXE3RlBVVUJCdGh4SkdPcVFMaWFGUlBhaHZPc1NFcEtMVUhsSWxQT1ZQbWZxZExaUXhjNkl6VzlwdTVEWFRpQzhZQkVUTU1XR1JLK0J5cXkrdlU0QTJkU0VhaUVXd2RqREZ3ZnhUOURwZWxGaUw4M0hNNUFNRG1LRkQ1Y2VjWVFjTmIzdzdSNVczOWhETlNqU21JamJqUVBpVHdaQUZRNmIvRGhoNXc3bUl3MlkrNTVkbjRMU2JhZkZxZFQ2Mlp0RjBDNHVIdlRlcHpQUnRqNFVpSmNWcnNMam1ndzJRYk03NXNvSW9SNFpOcktlZkw4R0ZKQVcyb3pWeDM4K1JJMzdsVmdNNldjTEgvbkhqODQwVVgyU3VEUEZrVEh0N2p3cjJheFUvMDFWblpseFdvRGU4KzVEMEE4UndLc2RQNGY1NEUyM2taK0xGMWNrT2UyNTFJZWFVYTF5b2tvOGVWUlp4MG1rSUVZejJzNWVoQjQwSG9oSEE4emlDNGNVZmJwMkJYVEpCTkRLYVBpVmk2OXNHZkQxcktuQ1c5clR6cUFQVGJFekF3Yll6SjRmMU1rNm1MMDBJQnZoSmFCMUZJQXFpazBNMnFqY2RydGNHeUdLSnhtUkdSRzJNR0RLamZqTEZnWVA0ZVgwN0FtK21PNFVUMXo4MSt0aFJBd3ArMmM4QTFFaW1uOTdQWUVRa1dUL09VV3BwWnpNQ2JHL2MxRmZhMHZhczZYUzdiRDI3SWNRd2lMVldROVZHdFNxWmRUTVlFSDlINVBRZnEvRVJ6Qlo3YVhaOUpuN0pjMTBJOEtzdVg5RTRMUTFkaWpsNG83eXNMTWFMOUtqYVRnWnZWM1daNVFzTkZxUzZIb3c0NDlVMDRmZWZuVWxWREFUTmI3eGtLcFJZUC9SYnUyNzFsTWEyRzErNHhjUkh5WTMrRDZidGxSMThmVEZiOWJvd1djYS9hbWlmVEJlWEJiQ2NDL3pDUUpVLzZ5Ym9peGhGcTZBUWlhTEJxN1E2NEJ3KzFOczZDU0FJRWp0U3lRN1EyK2FnOE1CeDFJMVhuUENDamxTRWYvUExIOXFNYmlGVi9JWDRKY3RLK3dIMVhpcStUdDFnR3o0U01kUnRoMVpzRnBQdFF2UjlJT1F5bWJ3c0hJN3pramNtZDA2QWNrNldITzRmc3RjRW9vQUNQT0JEc2RKVlpLYzhGM3QzbUhRUlZ3RldLRnBmcjZuVmNQNDNsRzA2ZUh3QTlpSENnTFNSRGo2SmE0QWFzOXpScDF0Tm1VcmVQakFzcmpXRkRmcGEwOU14UzJYS1BqK1lZWFlOTkNXVm1RaDdCUk9FdldscU1ObHArTXVONEM2YkZZYklXR2FGMjRxWXJ2ZURnVEp2dGluaVJtQ0N6WFV4WFlwYXZJTzQxUXIrekJsdys4MjhWaTV4L3BsYmhWeEZ2a3ZVNmswS2RtN2h3WVJzRlZ0S3BlNFlXVTlKMUVicTZZdVhwQlRnNUdaV2taWk5TeWxiQy9PMG42SjEyR3V4Tkwyc3A4N24zdWZHVnVQVThBTkhlUWFhSzFjKzkyZ00xWTc4MW9oZjBCaThvS3RpNS9CWFBqbWlES3d1U0RxclVxVU5mUkRtRU1NblczY0YwN2FrbWVzNHQ0V1QvaGFSQ0tRWnFqV3BXM0R1Ly9PV2tBQ3pHUHhydkRpZlp5YjEzcUFHS0ZvVWNVT3hYWHlEcUNZN1JSN1pZZjZrRVAwdnlRZmxQdDhoYTJKa2N5Rzl1QnVOWkd2d3A3ckRpeTg3S0pKR0RGdjRldHFhbGlDV3lKeHVUN0sySG4vQUlucjdwb3hUU0JCY1c5SlE5dHp2WlRvZXg5bUs4dVhaOTU2TmZRNG5iZjNkRHZUNCtydUpaMjFKUjNmdmUyMWRSQUt0aEEweGhkMnRmdVYxY1Q4QWs4Z3hRUmFEZE5XVCsxaUw2WTcyaGYzU3dWd241UXhIK01ja0h0RkkvcWtYSGxIYzJrbm1KeEZ0bkt0Tms3NmF2a1hyckJzMEw3d28wdE9ON2dQVGRMZU9pSnJ2UGx2RWllV2thRk1VVzNsa21veW1RVC9saG1NeURnYndHYU0xaVJyZGxHM1E2dTRaVnM0ak93NXB3QmZSdXZZRnJlTkEvYm43cFU5Q3p4SE5YZkFzejU2MnBLUlNHekNiOGlVN3JZa2NOQUtUSXNHWnRveTlVRHJNWFhRZ2RRSEt6VG9nUUdYT1BYamovd2szSXhFK0lGdkFnYU5JcENqT3R0ZVJlOUhsVkJMcUhWT0R0cm13N2lWRlFhK2t4Tnl4dVE5T3dPTW1IU2VKc1d5OW05RFh4MmNvejB3MG9iMkp2WEtnTkd2UzRnd3pvQVNJbTBsMWtFQ0c0Y25GUU1LQkxBYmtwaXhWV21DQzBSYkEzYzg3ZTllWnZxTzVxOUlTYitXclF3TW42VEZmdkVlejl4aTdNazBIQ2QxS2dkT3pmVWZzd1krcDJlRnZaajZIZzVJVzE1SWN5Y3RLTzNkaW9VOUlQeG94ZUJuWXZ4cVNlUi9NZytNVGh6U09qeUJObmxaV0s2RmZHWFRMWEZCbjVUenltMXlVWmdkdjY3NEU5a09zWEc1a3BQWHc2a2RMVVMvTmNtcm1idHJoZWVzTmh5Y0h1M0FJYVVsUUtNOENHQm1ZVE8zci9lNG9iVXZTUUxFM09Ha0YySEFtbnB5QkZNbFp2WVFxbFA4ZVRyOVMrU0pSVHcxOGZHdVp5V0hSNmJkOWF4T1hraWkwYXNnREk3WDZWMWlZWmZaWVJjcW9wM2tHditxL0tSWW9ScXVKdjRkbkVPUkNqbTRtTWRGMlR2MHNUZkRIS2xoSldEbjFEaEhSWkw0dTlrMDdxSFpJaWxrOWZ3ZDhqcGdyT1MwRVhDcFdEVXFDR0NQV2o4MUxObXFkcTh4QTRCZEpIbkxoaElXV3ZueUZ4VFFNOVNSY0c4TlNVeFlWcnNBQmxUM1I4a1V2azBSYlpxSUFTYU1lakt4WEREUkZBMFhpZTBBWVRJak15bU9LYVMxNGxvaTZpdkNoVHBqNVVjYlRTdW85MFJnc3MxTCtGK1B1TVllVU1MLzFtS3ZoOEZJcGxlalkvRTRkaFlROEZtMDhMSXRIZzJxZmVKVU5SRVpaM0ZCTW53WmRKMmpDeWQ2b2U3V0pTNzh4cm9CK2RkUG5aNUcxd1I5VGhpWG5zRm9uK3pqTUdCTlJYTnEvb2grVTZnbTBxbG9TVXc5Z3pqa09NN3dHdTlJUithWEpOZHZxRks1WFFpQWwxTWpEckpBcWF6R2VYTnJNYmRtMWtZZUVaRVNMb3M3aGRTQ0NNZmdWM1cxYjcxbitCTjZkNlNMaTNnVEQwa2ZwOXdVbmZqTExUMG5Jd3E1ZTJlWVdMdGZoVEZDYklzb2ZoUURZczFSTkVwQzdReGw5NDhwazF3bjdTRGF6VEJuVjFnS3c5VGtvNnYzR1pwMEJ1TURtMmN2VEw0NFZRSUZXUUpmR0g2V0tsM1FrNDVWWW1tMkN0WWY1V0RXaGdzdC9kajA4VnRldnlad2JLVkZNOXltUnN4RXB5WXVoTk5wMm0yRTJ5TTJrT01ldGsydVlINTJRb0xIMEZ3bHFJM3A0T1ljUGk0NE5KZ0d4ZTV2L01zRGRkMGVOSHN1UURCQ2RHK2hsQ0FRSXVibWgzSUtRajJUV2J5SlNkdjF5cWJ0bnFiWGxHcmxUNnQ0bXUrZWxMRGNrMlAwUDg5TUg4VDhnQ0JteUVFN0xBc1FMaUtSTzE4T2NTR3ptQWhQU3ROODNHVGp1TnRseEVSNkk4MytTUlBDVFlsckZHTzBJaW9BRGtrS1h1UlFxcmluMENhR0dUdUpWbzNHSXM3RU5Uc082V0VPbjIxNDd2eThjUEZoZGZYSzNnaVY1NksxR3RTQVRwbWdQRU9ZaXkyL3QwT1JvNWVaYkl6TVJ6THJ6WEpHdDVoQ0NET0pyQjVROWhQZGtCU3pWc0VSOU1LbWZjODQybWtoL3djcXZRbmJtbDBvYVZ1NHJjTUQ0S04vaS80TXYyVHMvbmxMMkljSlF5UHpRNEs1NTNybXc2enhpMGVmenl0WTduSm4xSkp1UW82UW5WYmk4ZFpYcGEzL1g2RDNVR0dLK1lPWDR2YlQ5aS92NjlGbldHMHkvSXIrdUROMnM5QzJBMFh5SHF3R3ljdmZVRDRRM29UdkVuUmFzQWthUXhUYlNVL0FGZ1JtWkpsa1Iyd1FaOWtGNE9MVzNkRFBJNHJaOHBuTlJYTFFFVmZmVUVCSlFqb0hVZG5vTk1kbTV2Y09xYUZtNmpRR3RxRzVQcEsvWnpXQXVwVk56bzYxSmtiZFhrR3QrNyt0aFBHYVRmbkhmRjVsSnlWdm9xdW9vWHJZZlZvcWhSQi9WK0VOcEswTDU2WUplRWNOR0lQOHpybmJ6Si81bTRFaWZ0aytwNlRLMHoweEUyeU1wMyt4ditFM05RQlFQeFAzT3oreklrTHFYaWhsemwwZ1FmYXdRRVhISjg1TTcvYlVUZUpOYkVWZE9pYW50Q2ZpcEZ3U3FEWnNrQ3owa3VSUnlmK3BWQko1TEFnZmFSd0dGcjdPRDBQUzFReFJnRVl1VEVnaGtCci9HSUMxTzVZeTlVcnVMdGRlSEMycy9jSkFXaDBnSFFKWlUrVWVIVWl6TWxJNkxER3FRSkJ0ckNzR0t0YURUTFh4bkZweWk4RFpvbU1HQnJRY3pkS1pkMXJhT0dmRmFvczhONjF2a0pvUlJWQ0xDTmw2SXdlQWtCdDZQOFh3ZTZGRW1sVXppRWZNSmNaVUowNG41bWdJWC9Mb1FSTHNtNm5zd0duNzR1S00vUlE4R2Z5VmJERUFCZUJzV2xoZ1draUhodzkvYlNUU2lOcTEyYmM2VjBTRTl2L0I5UlJuVnRjd1ltdHdXOXh0MWJNcEVWOUJNMDc2ZFpkakRhNGYxOW1TdXdBRDBxeUVaTy92dXpQSURoV3lRRUswS2VhZXZhUnlnMVpwRFlSb0U3aVpBN2lja3JsbkJabWh3WHZvZXNLVDBid1NRWGZMdnhuNU9yL2V5SWNoQ3BIS2YyQWNZbHJjOG1QZ2FnOVM2ajQxaUlhQmtMS2lOeTVtSUJ5NzJYWkFmQTduOU1qc1lybTBSYnEwMHg2aEJabm4rQ1ZYbHZsNmNORHZwOTd1dTkyUzArRXZFcXBRc3RaV0Y4T1E5YnpBT3pXQnV0eDdHbWg2OTMyaUpDdlh5SXV6QjJPZUZlL0VXR0V1OHR4cTU0YTY0MmxwZ0VoUGtuSlZSNTFXOUFMRkpuWjBlQklqZEg1WjF1UXhqMEtUS3RJNi9nQlBNdytYdk1aMFlMTjFLTjYySTh5bG9oUDJZVzd0UGxPL3k1SVQ5TVQrcXlLb3hGdFNkejFjcjB5UWNielpyRWZDSy9Yc2JqUVNsb0tnWXJJK29DZlVWc3U0S0VzdnRzQTF1VDZIODI4REJPSW44R29MK2ZqNkNjY2pyVHE4RUR1UXNJUVdMQm5zR1FWUDFNTXpBbXBOK1FoamRRaC9xM3YvcWNqbndWaHhHOHp3LzhRVkpna3hHUFNROEFKdEFoQWJlMDlZZk5ycTliWnRsanA3dTFqM001aURWaXBrOXdHUk5FVVZxNEc5Z2hycWx3Y2RXd3VyVi8zUDJzZnVETTlRRmcvb0ZWVytodlRaMGNvaTZOMGxkVW0wRmhibjh6TUl3K0JsSExHcHEzWFZwd3hZTWQ5d1FBNGJYOUlpeEhzam5ZU2syd1VMOWVTbEtYaFdUaXFWM2wwWENBSjhTbEtWOWFoRmNmbTlUZE1mekp1RUdyeWc5NnpXbDk5OHdpV1E4NW1LZmZxeXE5SGFHYnVzcTZTVzdNWkJuVEFtYThWS1ZNMGliY1lycXBvSHBPb2dmWlA5THE0cFliTnZFdE5SS3VnKzJlS0lEY05LbjJDQ05wWG12bGszR3FZSmVQN21CZkxNZ2FjRzFtU1lCenh2bUJzSm92b0ZGb1Z1Y3J0V0ZnbFJGTllPUzRVM1BNMWJrVElweVJEa1hQcDJwNE4xOXNtUnhIOUJkZ3JBYnpIYU5tRktyZEptNHhuVFdPeGtRVnZDK0U0OHQrZzBFbkd2UWVQSnluYWFBWlk1S2F5dEFlcmJzMWRBTldnQm9PcmVkNVhRZWQrbEFzdW0rV01BZXgrK1EzSUlnd0NxUUxMK3V3cVF4bEFaR3VqYVN2eUI2ZFNldlNEeklRblhnRDBSVk5aZEdlTzhlM0RZVTBsamo2SzNZRTltK1EvVkwxeHUyTGRwWTQ0MFF5V281N3Z6REwyS2VkdlRPLzBPT29zWENHcVh6QnRDaUNhQVpZc0Z1cStMSDJuL3pnd0FIMjdXWmt2ZXFyWEVaRnhuZDA1dUI4V3JFdk1KTEJwbkdiVC96MTJSRlJnTG5sd3lXczhpaVNsNm1oTE9zQ1JKS25QU2JIVDhJTU84WmN1b1JvQXNRVGxCaWlzOFVQZFZ3Rm9JYUxZV09idC9sQkxaeW5SRWo3cEhvSllWNldTMktacVFKSnRFL3BsYTB4L3czUnhJQyt1YVRUVkl5YjhacnlvOVZMMEtiR3NvNzc2cVlINWVvMmpUWi9tQWdHVW1TUTJQMjFiZjNoQzZTVXk4VytpTlpwZ0VFajN1dFJKVUNKWXRPcXBjY25MVzhPWEdzWm04MWVOS2owMzdOTjVhNTlvYm1iUzN5RUFhS0VlRFhPbis1Vkxwek1adjJ1L214WEhoQ3hXZVRmY2ZtOVJDRlhrVWR6Wm92NXJ1OUtlMWFCR2pnNkVuZzd3ajI3NnBaQkZJOXAvZXpoZkNicXMxNm82RWRYekRrdGhhN29TdlRtZXhobldJbktjYmNKTUs5T2tZeWptS3dPM0l6enVkM0I0WHh3T0Z5eHlSbFhHS1hiVU9La0liZXdEYU8yWEliUnNVaU12OGJ3MEcwL3M2ZGRpai9rbmVzS0lHblJEdExRWit6a0lQZU1ubysxUnV0U2o2aXVSOHQwTEtwN0hMTERaNXU3U2Yrb09UVmFJVGJ3bjEwYU1ueWtJU3JPWnVWZkc4dEVCRTNHaHpoSGtsWXNMcDR1QUpTY1Bsc1oycTYrM2c2Y2FOTFBwK0dIVlpqUWNZU04zSkZlVkphTFlHTlNRTWNydmpidnZYOEZ6TDU5cDNWdXF1cHZwdC82V3JwWmNBWHcrNjNnbEY2Yi9NQjc3ZjFhMUJ4TFdCb1lYRXhHckZOdU1SdWFxRU9QbGhYcTJWTWRzWU41Tk9tS0kvTEVYYmxLM2FIazU1L1poN1M0Z2ZWYkxFWDBnckpzMkE4aEhaZVFhTWFlY0JibGFKRENiT0lUVll3cXppRkNuNTlXeDQzU2g2ZmtGcDJLMC8xMG4rSHI0SUNiMk82ejVoRTgzV3ZhaEl6RWdVNnB1OFF0c2Nwc0FsMzYzTG0zemIwOUdJaFhHd1lySnpnUUtrWWVJT0FlbHpCdFU2bUtPMHVRTEg3TENxNFEwOCtZNWVsdzBadWljbUUxTTVLQ3g2dzBDQVRwR1ZFZVg4dE8vRHVvOFJBVTZOY1F2M1dacUhNa1gwWTJVOHZvL2JJdjVqYmJDK2QwbXh3RnlmTlZIMWdSdTl5Y3hLZjgxNXBEcUd1WWs0RmQyTTd2RmtDNU5XN09ydHM1UUhsMmdab1hqYUFOOUlJMTBESW5vUDdqcE03T2tjNElGditMeEVwNVZRZDMrTXhGWXRSekI0eitVWWhTMzdia3lJVXUxVjh4Zlp3SWxFSTFCT3dTTzZiWHhZRjlYUlpnbFhTV0dUUTNvelFtNmRaaWZlUWJjRnd0MlhER3VXbUQ5RlRvbmttQ1NIeXBaOFRaNlVIK1JHNm5FQ0VaNVRBU2ZhUUNCblBhZmcwWk40bzFNdllROUpva2UySDloWnR3TXRhNS9Zb21EQUxZZ3hEOFhFeDRZSlIwRy91bWN3VFUydXVvZ3JxdkkrbDB3K1JPTk9UZWlzUnZNZTFnWVRWKzRtSkNhdzdsN2NtV3VVRFAxaFpEcmdEdmM2SW5vaFdjVUQrWmE3c01WVVJLVVUyclBEckwyazVSbHIrb09PMndKN092TUt3cVNsRkVOYmxaeEdiMGJEWDFVRTBEV1RzeWdGTGtyd0hOQjQ4MHpXanJYVVQvcWMwTnd4M0tIOWlldldwODFXcFNPWE5SdjJTODN4aC9XMFVOd3hzcHl1aEZuZXZEZ3pXb3UyelpmRkNCOGd4cDlwdmE2RkVtd2VReENwcXVYV0tmNXVIbXBhUzRpa0lKQjA1bERVUmQ0c0RNMTBDQ2NrUVRKM1gxNzVLeFE1RXFDQVBvZFYrOHpaaXVUQ1YvNk5mR3F5ZWZqZkhqeW1RWGszUkdvelZ5L3REeXJpa2V5cFhoS0tDOG94eVBGRDVLUnB3Sm1oTTNVUktVY1Q2R3YwK0lpKzZKY2tOblJMRWo5QlQ5c3J4VnpFSDZyNTcxQkd6UENTWC80M3JYQ3Fldk5JM2NiL2UySkFDRW9SVDFibVdsWlJyL2hXdHNmZXZzVFdFTG5nNnVKTzRETk1OcitlRzJIR1lOM1g1dURwSEdjb3FUcXlZbWtMZ3dObTRtakkzKzFYZW94dHdJak9XSGdxZ1ArNnRXeEJ2N1krREVxcWRTalJqVXBrT0FjcG8zNTRBVFZmRjlFVjBDRUUrbUQ5dS9Bb0RtcGQwMzhOVm9xQ25sMEpjVmJjMHRrZ0h5OE0yZzFpNDdFMTBpQ1VhWnE3S2QzMU5xcXNqaUFwc25weEkzUGU5cEtUNVJGMHMxV1pkb0hsWlFTcHZ2NEJQdnAvdXo2bnVLNms3TTNTU2gyMUJZNUkvOGdMRCtDRFFCMFhUYlBTMmFnNElnTE55eXpac0NXY1VjbC9aMmFyRGV0N0ZFTXlIQWprd25WSFdySmVLd0hTQU5kQjY0L2x4VGJQS24vQWg1Zm9ZaFgvRkhZemo4L1VJV0pBR3FBOTRReWsxbVVuNmdZelN0UkJKd0RKS2E0dnhTZVZ0U2grUkdPdVJseGUrZ256MlpTRGU4VWc1TmdOckI4c3lSS0dCQndYclJJNERxLzg5T1ROTkhGVkVqYzdZZ2U1VlFnTmJ6ZnJ6TU14dFRUcVV4dHlsaFNyTjdWbXg2TVk0YmVVcEtzVlQwRitIZzgwelkvRUpjalVrWldFSm4zOGczd21lcVVlZm9UT05Da1FPYklsUGlPTjhFVlJUWHJ5VGdPZzg5NTI5N0w4WlQyaHJzZjI5N0R1TXBweng1T2YzSzVOR2FyUlNYa0FNR3NnOWY1NlhYN0NlcjFpbzUzY0g3Rll0OHpsSlJmUEQ0M3FQNzZpNmcwRnJUWGlqUjZRMnY0ZjZoV0RoYXFsRGZjQW9hZzdkeEIvTzVtYm1xUWlCVmRXUFdaUSt5SHZ0aVVzYkplZm96cUJLN1BsNTBvZWRxUndlS2dqYVBRUmh5ZmRJakpRZlVPcENuL1BGT21TVlF5dE5YYXFGS0FFUlVnZ2FjQm5GSnR4YUxiUzFIdlY4RG04U3lzRGNwVnIwaTF3UklLeVFKUTlpVHZHYThRR0R6eGQ5N3JlZk93UDc1bjYrdXNuMDNEYXpDaHBzU0VHKzZRQjRRUGpqZ3pHL2NQeFB3ZUgwMVA1bDZ0OFkxc0xBSGhVTTM5dzhMWm53ZTNCQWlmdmFXSXdIVTlEY0tSRkN5SmdzeEFTTTVvMWY5M3FzN1Q1RUVDMkV2ckdZdk9jbWEvQjF4czZFSEQxM3VlbTgyRW9UT0h4L0hrcW1LdjlCSUxyZXByRHVoUlY1VjIwWGJiK1dRaStsMllVdk1kb2RTRzV6bUNoRGNtTWtGY29mNXZlUVZJZXVyaTE1OTYzTkxkS0M0Q29hMUNWWUo5MmVjNkVXUTd5VlVNblhKaWwvS0o0a3NySU1WZWh4ci9mM2lKMC9DMkpvTXQ2aWJRanQvVVRvWWJSTXNtd0QwMDk1VnB4eWV5QmVDM1NabkhGelZZbWZWaGFkanVvZ1FEOUJ2cUZTY21tVlJIYkI4QytTK3UzTngzZmVUMXhPWDF3NXZuVVJHT1kvVEo4QXd4RHVTS1hXZVJkdThxRzNjRWVTWDhOU1RTTU96NGhNSFlCcWxRb3c3N2hTL0gwdHgwNGF0VmdmZkFKK05QeHBVa25jZWh3SnAxcTBLaytXQmwxak53eG8vTDBHOThqRVgyTlNnZE9WWEZlNWVxNDNjbUx0bmZRY3gzV2JKRTJZNjdra2xxWG9PZEhlKzBoU3BWRmFIdC8zOXRxUXRLZDVVN2Ztb0ZKNEhEQzNZUEJNbGhhdnliVnVwMURQUW1pdnV6b3RUSis3VklGOWNIK2ZMN2tTVDRTVXdtWnZ2emxkL1o4a3RDdmFQOE9odDNuWkt2UGgwZXYwbkxwd1RsZkRaOFRONEcrMjdrNlNtRk9Fb0lCVE45TUJDSU1hQm1EV3VqM1NIMmtLa0R0ZGVZeS9mb0NOWXZSNmNaL0hGWHU2cFZZVTJYbnpVVC9xbmlMdFVOTW5hWXM1eXp1cVYzbHFkME9mWXNlZC9jYklKOTlNKytRWi9zZjV2eHZ6TXVaQVp3cjJxT0FwWnlnR1lmaXBJdWg2OWFRSlFFTUJnVjFHdFpFUFd4c3pzaU1ESXVlaVNCUXhjTkJrUGlaRkovbzhVSStuem9uY0F2MzJpNEIxT09xaGFmMXhoZlh2Szg4R1c4aUt6VkZlRzIrdzNIb2FwNzcwMHRCM3E3TkdZSll5VGVjQjg1bnlvRzRkblFDSThNZThEZ1hIMVhZTDN2cnUxQXZsSHlwamtYV1ZJZXFkMzRlTHVRUFZIa3lUQjRobldrNy8zalhXbjQ1ZlloRGVuREdzeXc4VmhhSVlDZGlTRWdJVU4rclI0cWtzbjVZMTNFZkFzbExvaGFLZWFHbFA4Y0YrWUU5NjZDVGZ1QmFDenJCZ0NtWnNuWEdlYmpNVVdwSmd3UCtVV2w0OXFhNFNJN3dvQTlyNVhvZWFaTC9GMTU3MHNkaUxNUFdGQnVWSEJONUt0Zzd2emRwZDFPS3ZrQmY2N0tIQlphVFpmcTRZbXZ3SU9KeExaM2FzcktaeUxiSU1OZnA4TkIwOEdHQ2xmaE9yOXF6RnMzQ3dLZ2QxSGY0cmVEVExZRzFvUkVpc29tQ3lnV2k4TzgwY0NvSEI0VUdFNjcyTnpscjFlbGxUd3kxT3N5WFRGR0xwZjN0OTd1bzBDMmgrbkNudWoxaUJJVXhtVnZYNFlsNVFWUXlqR2ErdmZwbk9wTzJsd0ZuaHhhUVh5SUVqaDNvUE8zOWQ1bGJEMmQweHRlWWV6VzI5R29QcGtFMmJnemR3MzRzTHhNTXdUUjEvVitvb3Q0djhhNVN2OCtPRXZ2K2hxUWQ1OXBvYzB2L3puR09xN053MDc2bGwxZDNKT0hadGVmdlVBQlZmVDJidzMwenhBUzltYURGSHNuZVlxd2lKeXJoZ0NwK0NoK0g3SDVWcGcrUDB4Q1FkVExEczdlakU1OHFFN1d6VldoT3UxZFlNNjdxbi90b29haWtLWTBSTW9HY0hhemhibUNldThBbEJUQm93QkxZWHVITDFna24ybzBCeXdKNnl0dFNsamRDcFNJbS9ZZWhaL01ZVmdTekFOdzI0MWFoYzB0QXpYU01BUHlhRkFSMUxLamRuc28zdE9QcFh1SVl0UmR1WGFOejh3VjhRS2N6ampQTlhYRHcxYnlpT1pYc3haS2pPZWdTQkkvLzN0cVZKalZsWDF1b2FhYzZzNzN2NU5PanVPblBGK2dZRk1VS1FWOXBaWnpnT2F1b3VrQVd0ckRMaXBsWUhINytEK3N4K2V1ejNpRFR3RGFMZUFzZ0R3SkdMZ1ZMNENETFo1eENZYTdySVUySEF2bytTRHMvaEVVUTQ4YXBuQll6bHVjMkI3SzZETHVWNEpnYTN6dDRmMFFsTjBLaE4vQ3FHNEhlOXYyY2duVmwyc3NwWHpFMTF6aVBsOFpqbmNvWXlzMzRiQ016SFB2Y0FzTm5jSEtuVFlOSlBPaW9TcHZLNkhxWFV4NGVQVUsxQmErZ3QzRnZoK00wV0lHaEhZdWt1SHo3cFFsaDV1RTJidUE4SkcyM2Q5eGZENzRxS3FVS01sOUZCK0c4SjJRT1lxLzJYR0NPd01RbFd2NXBaa1RDTThwWUs0TTFxZldwYXhRTjZYQzlVdTFEUDRMcU0zaDNnRzJob2VZYThlUitQM3RiMERTd1lKcXF6ZzBZM2VqUi9qU3N0azVaWFhyMFdPTWNySE8rRElBUllMUE45ckU3Q0F3Q1FtaFlCYlJwZzBwaFU5bnpuYU81Qld5enZpUmdkRnZWazJNWWxrQVhwb2EzbFRoL1lZVkRSU1J0b2hMWnVBbUpCMmlMOEsvZkhEMCtpeHFNbTBpNVhRdGNLbEorUFNkZDBkQUtVcFhlM3o4L3pYcDZrZnJQWkpHS3grMnZ0b2x5MFljb05mQ3k2ZEJteFVTcElxL3BTS2FVQklQVjB0bFE1RkVJb3ZMMUhER1NKc21NNTRodGtudDdpZnBiamJjUTV3U1ZPaU4raS9FaTlLbmRvSER4NGxYcjZDbUc2Skord1NhTDM2SlFBc3V4Wnk4SDlXZUdVb2U4Y245UVp5YWMxdlRMcktEMGtaZG5pdFRxd1dzdmU0MXFaMnpwT0xFd3FNMEFJU2NXQzhZeWdyT3dSYkJlOGFGQ0ZhS21RZmRvcWJuVHQ0cVpoeTFOczRxUEtLV1FrVDNjRHA2bDZQWmg4SlRmV2p4ZkVTYnFQMW5zMlAyQmlOT1B4OUd2VVRvSXM0ek9VYUVRR2xDa2o0TWZiVmxESk4xMXQvTjZXeUttMzFTVjhJUkV3TlRtZVBjQXphUTBJUml2Y21ycUxiR29XajdTbDNoWnJ1NytmYXBwaWpyV3Y2aGlXNFlaVTB6ZFBoTlpvbVplNSt5bmEvMGVQdXNYdkIrLzA1bXhSaEJWR0tMZWVzbk9hVGxMd1Z5ZmlHYnBlU2dzQnAwRHNWMmw4TTVxS2tsUHo4RzNDNGRRK0UxV201WkNVUVA1RldDblNNQmFaeUQzRUwzc0p6eGx1L3BGVVpYSHVPck00azhzMUhCeHo5eXVKR1I0M2J5ODZTNzBoNnpKMi9oNUVjTVAwcjgrM2srdWJnU0NUcDM4cmpCSGozdHA2K056UjVERFVlMjVOVEFiQXRzaGZBeGpHRDlFTHkyV1VJMFEvVTl4S2VxbGFXZXd1L29XNnhhR3JlVzNDUGJkYjc3RUhKTzBrcnJKeGJlRzVBTnpGa2NWVGR4bzhOZTVNMjI3UGF4c2xBRlJ4eDZVVk1CdHhvbURmVldmNUpqWTlwRnVTd3FPVlBWdlNwbWVNcGYwYVFGNlRDSWdUanBUVlNLZVU2TWxKU1NlTkNhYTNYeWVMZE1rMzZjVTNvS3dERG9GWVdWMzNlTlQzMGNMa3FTQmZCZFArT1JZWXdBKzVvcnlvbWZsbzNjY0FqdXltRXU3a1JPMk5LWThZWnlHZXR5YTFPSkJlVUhIeTRHaFZ4Q2d1eTczZFp3UDVkR29lTzB6UUZCT0QwNGlFR1JmNisxdFo2RDJWUVc0cXl0M3ViRllNeGEyNytnNVhvWi9wa2hUNU13NWR4aTVpMmxRNlhydFRmRmd1blVvVitnMmovNXdDa1JyY3VzSkNXbGcxUHhMMDVsTGNGNU93OEhEL0JZU2xoNlVESkpPSjk0M0NOUlR4MjBWaHdiQVlydkJhbEg4UW12WmphOUh2a1M3cUsrU1JWK3NiNVF1L05TdTB3RldjM2pTblFTK29iQXlJTkc4SGd2TnhuWTFjSCtSekl4ZlFrbXhzMkVaN0cwNVBOc2dsVUJuWXBUMkZYL1U4bzdvRE1vSUVzdVBIenBVRituRmt0aGdmNUw4bVo5QUlHT3o1MkRNbmpmK2lQQ3FZY1RYQ0xOWTM2VmtYRHFCMWR2aW51cnFTZEJzbjlobWJxdzNIa0hQMU54MGhqTnpyMWYwSmYzcUVDRUgzMWxDdGlsNjJRSHl6WTFMTnJjTW5GbFZ0RTZsa3NnblhUL1pYMzAxZlBFVHRrbzBOd1YxU3hpV2hpL0liRVNSRTRIWWJDbTh6VStuNzlqb2loa3BGekFwTktrYjdtaWMvb3htM1MyZ05GYm1XclhsU1FoL0o3NTFGbEUwWDk5SW1mSUlsSjFrUjZPa202dkZOaDllRkJZL2g2WmJZYkovZWlXdGJmbTdJU295MzdCTWhua0tRL3B3WmNNaHdxTGIyTTV5WWtKZnNvaCtnU0pmMlNkUjhGMGpxSTVyK0ZaQWlCVG5CdHZTMFFhY1dkK0o4cmZzYVUrdlNESUNIbS9xVk5RSi9BRWVHNnUxYnQ3WEYzemoyRk5hQ1p3dUR2MDVLYTJkUTJ1b1FCUndXb2dmZ0hFdkQyU0I1aWdYL1NlQmV4cW5YUnR0SGNudVpYNElHYTFrS0EzZGpDM0NTcVJDYjExbkpLWjRRRERSQzd5OGRWeUViU2FRTmVQWUlYV01JR2Z5STZxUFIxOWF2dXlRSno4ZGdhd2h6WFpwdU1VVU1RdDlQNTZkWU5RaVhQMG9TZHQyN2ZTWThpcHBJTzB0VURGWmtLK3FGdk0zcWgyTGpnb3R6T0daYUp3Tkc4V2E2a1luZkUzL3NaTis5YlNRMUVwRzc5cVVUQ24rc2J6RXNsUngrYWFaWkhiZ0x5NU5RUDl0UTJtNHFaZnZmZ05xaDJ4Ykc1Z01QdlVZQUtCaWZ5SXE2OGhHeVVYU3RQblA5Slo5UWNFTlJTU3l1cFJrOW5RZnBKdWdZbXB2bTU1MVFVbTRXWjh1bDRKRWtkRjVDU3g4RGY1eU43RjBLSkl0alJxRXdOd0F6enhrRlE3cEVHY3VXTjB2Vzc4MUdTbERYK2E2NSt4YnJGdTU5Nm9jOUxzRCtDYWJFVEI1SkNNVjdLcklBZHprcGFOYU96QzJhODU3WFRwZys4OEhWYjZpNStxb1dTR2dOZFM5RlVRcjRRTysyU2JHTlpERDcxVHpvR0o1NlZ4emN2UGJOUWRBSDRmUVBHbkUzMUE5QWxjNWk3TStwTHVJUDNyVkJ1Z2lMRnNMNHlKMkJzQVZ3ZHE4aGVEMVl5T1NmYVB2alpCRThOb0luc2JPa0Q3WUJDWXhhZEJkS0NicFpSaEZYK3dpUjhQNlhHSTZQdjdTWWpxMSt3U1p5SlQ0QzdDNzN1eHl1WEVrNW54VllUM0IrdUxQQmFoOFpFS1h1NVFvdVc2bGd0a2NhTC9Ockh2c0c3T3JaYWZYTEdSeE9YWE9jRDYwTkFQczdKeUc1R0VTRXFJYUU4YjduNjJmU0lxWEVEVnJTUVVRUTJqejZkb2xsbDMzZlhvaHRlNDBrTktIaFF3VnZnWkQwUGU5YVJmV2VzOENnWmVLbFZPbndBMWh3WFRxZllRbGR3Qmd6UFV0S3J6RmhIMzAyeUFQQkdVeVdWdndzWVNYU2l6RHZEVzZybjBJdGIydHVOZnl4WWMvZXE2THdEbVVYWkY0UkJhRU92YWVUYmpuNUh6bFhqTUcwNnIzckNEUkRFbzA4aWwxNVpuS2g4TXFBVVVjUWZQL1lQOUpBNTQ3Y3BaeS82UjNsRC9NOG96UjdMdnRYelZjdm1rbHhHNXVteWYwS1JibzlOc0VrdmNwaHE5U1FMcFBaam5oUFRrbGlZQUdjcmk1cDQya2M3b0lrbGc2YVNoQXQ2bUNSeG5XNm5aS1hIV2F0WWFQdklnYmFDUHhGV0RvcnlGZWNvbndQRFVkRFkxbXdKRGl0MUNHeEJnL3lIa25maXQrYWlCMjVpZlA1UXdpSkpVelVJL2hLNEJYSnRRN3FSUVdhRVh2WmFhREVXQU1hQ2xIS1p0Zm55SkFuaWk0NkR4UHlqZFhHZmg0WHVQblRVMGw0QWF2dDk1Tm1OZmVVeXZseXNiVm9hY2VFNnlSL1RZWDUycStDczFqTDlKaDNiNXhwMkt3OHppVUZQVlpOVXkwMEZtalY1ZFpudkU5RVkwL0UrbGhUMGp4Y3FPb3BLL2g5bUxhTWFGOGsxbWM2dkE0dnQwS0YxRUNVcE1jdTZyZGdrMi9SdFl1VjJvblZuWlg1TG1Ha3o1ZzRYeUR2dm05UW9iMFRhMFNzdWo3bERrWEFSdmg5NzN5eFFRTEJ6eVVZKzBML3RON3NucWt6MXF0TUZROThpRlJzUlc0QStyNndidTZjSFJlUWNlVTZxZTRySFRQbG5HaEg1blBkWWpraUFERVl6a0xReWhCN2hxK2dCTHFYODV4SkxFWHA3Vlh3RmdhNmNNa0E2cEphRUduOG1FOWVIYmRNYWg4YXVWenJsUXVzdnZEcHpTVHpQV1BwYk1CamNuYXczTTY3OUNVcGd0RUo3REFOYkVPNFV3RkM3RmZrb3FiUzh2U1ZiWGJVaUJja056R2JLQnZJWlRxelVsdEp3cXo0RGhVZ0l6RTYyYzlGNTlsNU9mT2ZmWlNqdU1mdVRnQWxwRnYybEFiZ1cyLzFyendrSldkL2lZbUQrU0VuOGVnT1BITmtIYnlmNDRWQ20yZ29sTmo2blRXWVB1ZDZZTWlteml0akNrUW55L3FXNlNiTnVCaSs5cW96dlpCZW9ES2I3SlNEN2dTaHpaaWxwTlhvOVgrSm4xZHFqVlBpYXZvM0lnaGNTaTU1dXQ3YWlraDZncUFkSk5OUXdCRXV5WDFIaWZSczVralRzL2h6WGpLN1p3ZDZubmVBUjFtNFpJWlA3andNQ1NIQVpTU3QwamxQSGE1Vy9URS9BSVFMTWlZcUppSHpjam1NTlRoWkxqSDVlaTFxNzVBaTZPYVpWQ0N1OUlBanFRWW1xS2ExL2FxdjhvZzRmS2k3ZVBKZW1UWGRyc29WQStFa2o0VktjNGFiMko2dzZJMkZxWWo3VW0rek9BQWE3NW1zbnRwN3JzTnhLZDVuUmhMZ29ORFdFcm9lWi9SQWhiWjFieDZqUTRoU2tPTXU2dVd1b3pGYnRaanU3cTNTVmM3U0NTWE9YelkvRGpISUxTNm9ydFhqU0ZsZnVnSWJBM3RqWEJ0cklsb0czdUNDVGUva2hiUGRJbWl2MEdXN2VxdGF4Y2Q1cTR6dWdhS2l3TmJnaW4wVFViU0huR2tBNHJ3UG1PRWMySGxmMlNQaHY0SUJNaVZaOWg3bVNqclUyOHc0aFVtOUJiMktjbnVIUlNGdEthek1TVGN3RmtTVEZ3ekVJRG5iSWJBSWlCR3VNclQ1TmJDREhGUWRDVVI0WlFLQW11eHN3eHBXY1NJdW5seS9rTUJPL0lON3JrUnR4STJXaTlVWW1kdEcwczAvU2VXbHRpT1pOUnpROXFZa2gxQndIWnlVY1BHZmpwbUhyYTRyU2JvM0JSdlFKTjFIRFRXN0I1YjcxdnpMbDN3N2gyN3NTQ0lMdG56K3JZUTFUeDVHeEtLYVBBd291Wm5Pd3NDVTduQU5LL2gxR0FrUnR6Um9SVWFUSzhmcUxMWjhYa0lMaHBmVm1WMitJRXhPN0xDaDN5ZzdrMXhqQzNaTUJudjRVZTg5UDRoclYrNjVNY1BwVXFGc0FVdTY3K082SXdkcjlaYnVtRENOaFRvWFZMelBMRCtCb0tud1V0SkQ1b1ZOUjc0QXpxU0I2M0tCWkZHcHgzYVUwM0JpN1lYblpxdEhkMU1QUTNMd0w0RmptWkJhYTlNdWI3ZWZyeTZWMWdLK0tHTVkyNG9pd2JDbTNqdlV6SzJIV0FwUHo5ME5od05qRW04MTNRRW5UdkIrNm9kWHFrdkR5dGNDWEpMb1l6TnBTaHBveXl2clJ6RW01aThheU55SUJqVk52UnFvTWd2ZlAvVzB4eGFKbVJ0NEh3Ukl2ZkJTbHFtd2NzUWQxRkl6Njd2SVVrOTFvWXVCeWlXNUMxUW9KQ0VhNTNyc3J2NG5FR2txb3BHVGIydnBVQXZxY0VVZVRsdDVPQTJwalhxQ3F6c05aWXFEVnNQSmJEci80eEx5d0k4cHo5aG54M3gvTHBsRVZsUW10NzNHYVpianowWks3dHNaL2F0T1ZTWTFzUE53TkZzc1N4eXJnQjRJOUk4K1J0TVRNTWxCNUNHN2lZUndNa0ZVK210anM5UDZrdmgrckdCeCtUd3NoMHRUWlVVRjFUNjRoSXdqRC9BcU5aRzZkL09QbUcxc1V4K25JRXR0V09JSklXbTBZMVl4N0pqVWZqRkp0K01SZ2xNc3VIWk5kenN6ZzhaU3QvYkI2RzVyUFhHN3QvNHE3ZUFPaEYyNzhKNHpGc2ZMTGFKSkFicGprMFpNaHBySzZoVHhwR1Jqb3h2U1o4c05USW12bkwvQXNOSU8yaURkdmVYTXFUTi90UmIzb2c2VG1zb05HWFZuZUk5d09wUmErRUtwVFBWMkh4YUoyV2RNMCtaTjlRZDA0SUNoQ3N6ZEZFSitWN0hkLzRQalRWQ1pwVHhBSFhsUUtvSXU1bXFhYjRKRmZ2UHZWV1RjN2J3a2lEVHhRcVNTazhZQzN4Zmt6Q3lOMU4walpwVW5oV0FaY1pxSE9qOEFHd2Ezcmo0SG1hbk9xTmlvY29CTEMxRGZNRmxTWTBRVkZHZEx6Z0pCYmNra3hadXY1TE1VZkpJRlBXSURhZTBsdDJYZDBFMzZiMy93ZEh2NzdpZnJOekhVUjVuQ0pRM2k4UExTMWNaNTRVbDhqa2RoKzlLRkxFekZkRkRHZFl3QWFCelBnY0NCeFprSVRMTjAya0JUL280Tk9NMnhSMU5lREFNeFNOWDlVMHUyYVNwZVY1TTdIK01YZU9ocXZaYjhQQ0NVbUI4d2krZXZLQ2poOTNUUGRDSlQ1NXRjNVlTOVZmUXVqbGVaQTV6U3IwUzNUS3BkSEo5VEhybVBqdXZXUVZNUzY4OWlMNDVVSUJxTmdsb3FnT1pRN2MzUlN4VHVuV1FpNm52RHA4YUwwSktndjhBNkdqVUdKUDdoYWhKeGp2dHRPQ3ZZN0oxdUlId2txTTBwbkVVYU84bTd2VVorWDg2Y21sM3hHa25jZzVxSVhXc1VPMUI2YlhKQmplRVJ6RWR3N1c0aW81bnRvbmVWbVVodThVdW5xR3J5a0tHdnpHcW5qVkUvOVczRHNGM2RHMzBKbHVqYkgvWDRBTGE1WGZrVy9OT2xoNzBRSlhvQWllb3RRL2xvZmo2dkF0S0RUMFV3UXMycko4MXJrNmo0bTFGSDdUMm92ZmhFb0t3NU9paGlNMncxTk9MTE1URWduWjlyVkRTZnc4NU52RHluQjlQTHR2eFp3UUNPbTk0dnl3QmVzVThzaUpSTlBHazcxNzE0cDBla1FvT3FoU0tndnlxMmI2cUJzS2w3c2R5V2Vyb3RjQUxUWmI4T3I5a2FVOUNFbUszRmJnZElldU5CbHdEa1QvWWNHVUFvcW8zUjR6YVEveEJ2Wk9xNmR1M01wMGttZXpRNkY1QlErUHBGOEgzcVFZTE5oTVVzY21BTkNpbHJhaTZlcGRvMmY1MWpDOG96dDNGUnB4YkVKUmg4dzltZjNRWmxIczF1RGJnS0ZtYU12SS9LSE5HTGNiQUpvZndvS0Z2THFNbjArMm1CbUJrdHBWczdOTW5Lck1ldGtHU2h1TkQzMWdwOXN5THBiRmM5RVE0N0dpek1tcGdCTUlZdUZkR2ZOWXZ6M2wyQ0Z2cmN4Ync3UGtDNlg0L3hKa0dKUjZ6WnNBb0k1QkprdTFMSGFnY0s1bUMyVUwveHJzSEhueVJEbTMzbTBvNFJ6T01QbUdSTnRPUjRDQ1RvMmc3YUpuZlRLeERnU0hKcUw3aWp5VExwWGZVL2VEU1V4WEc3V0R2RUtoZjZFUjBJbHZQeE0vMEpTaGtCZFA5L1o3OHRBYnVRb0lMVFd4bFRSQkd1QjRERC9QNUlrKzNpQm56TUl2K0RXdDlzK1pJcXlJQW9nKzRqK1l6SjNwZ1VycFdTQU5aNEhjbHVYMzVhVXJrdFJOMHdsdkwwcm9STTZKYnVsYWJqSmxDMkFndVBQN2FSYlM4bXhNbWxRWmhGMVNsWTd0Nk1UaXVkRXNpYjlxN2VBZFR2cnFQNGhsTVp1WVhDSUhPamlFMnVSZGczd2txVEd1ZGVxbkxGNmxqZ3FYWDNXMGhKZ1U2bUVibjlxejRPZXBZMENham5WUlpzL1A4eFdQZE5hTDc1UXRnSWhRRytJQ0NZcWZxakpEMkp2T2JLekhsQWtjamppVnVEdWxjU1FtejAraTdnRFVtZkxSRXZMUk9wVU5MS2VRazNlajFmbjRBcGxVcjFydlFJOEZ1bWZyMDBOek50Z21zZ09TZ01OV2dlcTJmZmdoRFpHc2xSeWl6K3daUmIxazR0cEVlaTFtb25icVFwaVc3QzQ4bGRMeEJtdkZVSWRUdVVtQk02REJZREhlZ1IrVFp6NG9yb3BpNVZqYWpIUm5LL1hnSDlqM0ZGSCs5WnZIMHJidGZxVVgrYTAxVEtzNW8wT2F3WTlpMFFXL3dKK2V6ZWJVSzZjc2plYWk4OXF0YmU5RGpTY1E1d2IzaWMzL1BET2IrNC9mNThHOXVSQjNsLzMyYjZHSXVTOUZjSVdHQWtkTEVhQ293Q2FPR1psUFZWVVMvbnAvZU5KMnFUOWlydXVVdWpaOTdONHJWYUowRUpnU2lkYktaTGs4bDYzQXV2M0tvZjFHb2pzbFkvUG16c1dGVE55Z2JRNkdvMGplVDFiRUM4bmEwSTRyZnc2cHVGY2ZLSEkxclJKd2RLUEVHa2drbVFrNE44aURoTzFiZHdyYzZTVHkyRTh5MUJ4M2RrVVgrS0xldENyUEkzRlF5bkNjWUdQMEtnUEhydXN4Z3B1djBwam45aWFFK1ZXejRuN1FzRmUyOGhOM2hQR1BSU3REUmp5L3p5eklYclkvd1RjS0hYOXEvbkVTRTBBM0pYUmdyUVdLTzN3bFJHSmVQWXRXRENCS0dlL3BUd0s2R2F1NG44TnRqTU9TSFpIdXBCeWEyVHRQN0pJdUlVUTROY2FCVFJqU0hnRFlGVC9ZK210TXFxclVPZkFhRzd1aElsNU1wVHZNaFkzSWxJYkhmNytPSFVWbjl4cjhtUitmRCs2MnhZdWhHOXM2cHlXUDBSblQ1VXpiY2o0NWp3dUxtb0VSNVQvbktBQ0RDK2FxRnExbGo5SXlpZ2FZbDUxVGlVa0NKb0g2Vk4yTVFzWldWbm5ERnR3RDB0ZDZBK1htQktpOGo2OHBLRDFCd2xCWXRrY3Q4UThqZ3RPWGxFdDVJcUdjdFQwSmEvOHliSi9VMlZYV3pNM1hPS3d1Kzh1N3NJZjlWcVNnSWx4bHNKcFp0N0JsZDFUT3lOT25WYTduOUZYVVpjWXRwSlppcGFJMFNXeFRWMHNiclkwaythMFV3eERzUEJUbWtIMU4xVDJSYklReVBPdlF6aHMwT0xtbHFjdXJEV2pKVUNTWW5TSWdHOXRhRFcvVzI2UnZVK0cxZyt1Q3orWjdtcnRWTUlUYk9LeFVnd0Y4d3laQ2tsdE5sbnAwNWpIT2NNUTA1Ti81UldGSW54ZWZnd3FtbzlYNVB1WUZnbTJwSjQvSjhkTFlwdmkvQU9NUlZvMU54VlZnTWZoS1ppRUpKbVFJVGNXUE1IUHZXOWlaejM5QXFQbmF1cFF0Y3NZMUdqWnhjVjBKb1V0dXZJeDZyNUdBMmw4dWJaQ2gvWHlvdERwUE16cFFNYXpTQlN6NXRmMUxlOWVrTmJEVXhMQnJQOTJqMFRBRXc1VW9HWkFYRGlKbEhYeDJKOFQ2VzZaM1ROaW1tMHdZWXBvM2s1S0JNWm4rZGIwMS94TXZJOUkzY1ZWOVZqVlBmMnQ3alE2SkpVcEhUSFdaRXU1SkRhZ0Y0N096bWl0SFBYYkhJeDAyTnI2Z1RmeC84VWYyR1pPTG1aNVBpOFlBUmlSVkxNTThQb25pa3JYa1JQaW8vM1I1bHkycjAxY1VVVDdVdG1vRXRnRjlKd2pQMWZsaUlPaitENkk1VjlrLzZqeDZBcjVyNStsS3lIdkovMElmSzBiWk9saDNFL2U2d05BaVI4Q1ZpNTFEL3hnR3krS2VLNHhkV1g0dXpjMTJ1dXM0WFgvVVZRVEI2K1MvR2EvWlZ1dzdnUzRucEhuWDE0M1p3NTM3OFhRUm0zNTNhbTRVdldFcHRTMDZPVTBnZDFEWUFTaWFEWWsxbTMwWjdIZStPWEZKcjMxUDVFeXQwaVBkd2UxaHY0bkl2WFF6NnhZN1c0dndudE9PMkZkMUIzbTU0UFh5Nk1WWVVjVjdhSHZERm1laU5uRGgrekhxanZCK3Nza24wa0ZTNlFrZkVSSVFxQ2RyWW5QUUZudjZHamdSTjlnM2hLZ1YzeW9nL3pJei93ZjRsWjhZUUxCWUZpdEh0YU1RMmZRQ044cDhFdUgyeURpK21ZWjlJVnc1cTdjL1lHd0N4SHp1Q1RUKzJrSUVLMUdvbTNWNWZMbmdqUDJqNmk4bnYxemNHZk5rTUdPYmErcmQvRDlMZ29NK0NFVGZXMmhHbkZFS3daKzZPL3B5alBrWU5Teko0QlQ1V1MrTTYyTjE0a0lybGs4b1oxTWprTE9LVWRuc1kzT01VcDRjVy9Ua2c5Q0E2QVlObUZaWmsvb2xXS093OFRDbDU0NHZFeVlOQTNweHRRcU44WUxjL3Y0T0NrdStlNUc1a3JGdFFtSDJQWkFpN2NnTkhNZUhGK2t4bnlMQ1VMTWR1NXNwajV4cmw3c1BocElzODRLZ1VzYmdaTk9HSVd0WHdMUVNxaTc2Z0NBKzBEdHpSeTBBakpEREV4MUxhdE83OEtlSEtvZGVOWU1ScU5HcmlOL0tKMjJ4cFEyQ2g5ZFBnbklKb3VSMEh4a1ZFa2l3UVFrTXk0OThJb09LNEwzOXdKaWRVNkhlWnhVRi9xN04yNFlvaFZNS0dTRnZzajArYURIK3JSMjdUc3ZKcjZwK3JvczJCZmFjdmN3em1vajk4bHY1d3hRWTJEOTZVaTVaYVdmcHR2NmxNRi9vZGpYNTdCeUV5UmRBbU9tMHFyaHZuWEtyMnFPWlc0Z2p5QnZLeWN2ODluT0FJdGZSUGpBVXVFODdlc2JqNUZZL0t4b1JDVmRzUnk2YkpVRFZjbVJMZ3VMd2pmd0JzVnNodEN0T3NHUnpmeDk4a2lRbFhQSWFsTWVWVWx1cE1IQ09yWXd4M25WTDBwRUtHTldJMDAzMlZLN0hrWWdDR0ZUNzhtdTY3RUlDdFdHaDdPajlVM0RuSGY4Q0kwd3ZVVzJaVi9hbFQ5VWlzaXpQSjVsWlR4Y3ROSTJBZ0hkSUljYURBUHJ3ZzgzeVBNeENxbldseUk5ZTlKdms0Y0prWHNSUzRpOVFxbjE1T2Vja0ltbTZ5c2h4S29jUXBwNk43QjgyZWtNczh5NVdZeFhBQk50SzBqNW1RTXhnR3VTNWlnckx5T0IrWStXZjg5RlBHSG9kYkRQVUJjbVRtUEZySWNMRUZuY2Fmb0NtWnVZRGdtajV1Umo5NU45c3hvYldWUmRDSVFtR1BDUEVoUk9hTitzY1ZmcldrbXV3OUEvamF3Y0VWd1NzbXhNdzNiQlV6SGowOFhUdGNZcno3dHc0QWRRYXkxNW5CVG5ueXJNWlVVSVpERjhsMHo0dGk5WktvdnRmUG5Pb011M0ZYS0dmTTNYRC8yclJXajRtd3l2NEx4SUVKd2NNN0luOFJKNjN0dVhqSDZ1S1p3OFNhY3NPUUlCRHRRQ1FPblh1QzR3a1MvNk1ZK1BTTzdzd25NUHhZbWltN2pHcHJxZHBJY1NETmhTOFdpcEM2enUrRHRCbzBHdGhJMkRRKzIrdzlqSmp3Z1hDUmdCc2hCRWZ0OXNadTVEWFBSUXFLZFlMUklmMklXRkhxbFh2dVRuVWlFTjNoVmRpUEljN3hYN1p4K1lXdjhiN0svOUZqYkljRDJpTERqWkZhbnd4UUkzYlVuYzY3R0ZlYk5SUnRwUUh0dnRIWEhkaXRLVm83RmtWSzlmVWNwMEZKaExjMkVPNDIzOS9ndmFYVFN4YVE3M1F5SHlzTzlhSUNuSkZmRTVodTFZeStBblpXTGlGbEJYODBldWZBU3RLaE96RGNEQWMva1JPM1c4OWZobnhmbFB6eGtzbUxOejYzMGNMNTJzc0d2Wko4QVlmdXJFU0J2SktpMWJXM010bVROUnIvdFJwcktnUmREU3ZQS1BJV29FMFBqa3NWTE9paFl5Wkc1VkZ2dUhDeDNJck80LzYzTWdJY2hIUXBPVTE3cXVWVXVLY3FteHJ5WGFCUTRFMS9JUWVma0ZqbTBpdjJwcnZJVGpwZ1ZGS1NrTzUvVE5qbGZvMjVQZzh3T0FvanRpZm9PMnBPaWkxRFd2dm5UeVBCeXV0bmRSeTZiSzFxRUJCV3U0M0FFTHE0dE5KaHhrc3k2R3ZPbmNkTDN1aWtYMW93aTZsUWxGMWZLYzRsWmJUOGlXcHN4aDRiWGk2Q2dzcUk4eEFWa2NuZmtrMlREQVZDS3ZTZng3M252QWFOZE93RXFDd0xzYUhaMTM2VVh2N2JZV2U0OGtRcjExRGc3VUlvc1lCNGNIb1djMUREanlqWE9uckxRZk9pM1hFSmZpUDl6cTFDQ2d2ajNiMEpLcWRoMmxmZS8yWFVYbGNMNEJKQ1FLTTRjWkhPV1AyK2tjanFVU2lTWEIwT05nRU13QjVTbHdGUlBhR0lPUjZHdkFyQkpjWDZYOTFTODFBcmhrQWhtZFpNU1B4NnJhdVVrVEozVHBvemw0MEpMWE81R2tOY1E1YTZQWVBiYnBuRTV4bXFBVHAyeTlhQ3hKQnZ1cWJneEc2UU9RZHptNERIZ3c4clhpVENVMHVBWUh5bmhndkhIZkMveWdvTHRtSVYyNTBKalcvQUMzTFJiakErU3lZRU9RK1lJcXNKYmtmYWpqbHlzNlh1bDFLYXJJcHJlZGdVOFZoRjNLSlNhMU1iNzJ6TnlIUDNMeFE3ajN3dWJOMkFOdXNSSlRlL1JCMTc2dkJSOU5mZ2VuN0FWTm5OQ0trVXAreE1ZblQ3ZlIzWllDeG5VMnNwdTFmZTZZc0lHUG5aeEc0OFlRRVVuYlhRU0NOZzdONmtNWWxsay8vTUJFTWFYZDdLM0g3VzhtUEpHdXNob3NnM3F6MnI2c2dZT3liaG1Fak1BTnRUVUtkUzN3bFpLRitBZEtySENYZHBZUkFQV2x2amt6VVFtNDZLN2xCNUtUelAzVnR4RUc5MThrbStNbVJxajVJdExNQ0ZKT01GQlp6QjFpOW9nVGNDbkJyeU51T25yTEVKZzQ4MVhIdEpRd1doajBmdTZPak1wWmVaZFJlVG9CTDZoRGUwdHhWOWc5OHdVamFCY3phaDR3WFRta0N2N2VQVzg1RXNZY00zQXltTUhtbE1RMUZKMFhld2x1ZlozM0Jmc0EyREF3VmUrRjhpQ3JTbjR3K0VBTjB3eFg0THNiQ2RsbXRvSks1TEREczJuaWw2K3VTOGxia3hDbWdyTkR0NVM2T1BrS1FPak4vcWtPOHdsMzBTYTNxZ1RSSk9TTlRTUG94aDFWdEhjWnh0aTBFVkpjNEFEeUxKUWdxTXFqbzFoemoyTURZTWJZSXU0N1BHQUttME5xU2ZTYTlETkwzTjNDWGVzbFFsWnZvUU9XODlOTUJsZnpZZTg4Q1hQRnYrMDk4NFYrTTFyQWhRNGpVSkVUamgvS2I3T2pjTG53TkdieHRXWlVqYVBqOHkxSW9KN1poNTE1cGZ3dXJzL1VWNTVNbHRONHpwcjZIeHZYR3VPbnBXMlVDQnFnMkNiYXNIVmg4Rm13aGpjQ000RldGWThyL09UUGhtY0JVbVhqN1lkc2RHNXp0S0lPKzFtVEZqVXNhREhpUjBHaFdLV2U2NERmMWVZM1N1SS9KdUJ6bFEvVnJBVmY5ajBvN0JrN1E3NHVEb2QxS0VoWEJrK0hzZzRMYXFTNHdGL1RUSGY4dWNIWHBkQmQzZThSVXREYlRiR2orT2U0S1BQaXNoS25yVHJQeUR2MXRVVzNiZUNyL0VOV2kzVkFYZlFsb3h3alhDSTAweVZPRy9Zb0dadU1SRjRTaU9MWkJQWEkwdHVVQWZwR1Y0VWVVSlVpSWNGVWVOcDR4Y2lGYTZURCtmcnhEOHFvY0o0TjJJTDM2T3BMNTlPM1RTeXV0aDgzU1k4Wkw1azBBd3RsWXFnK2pjRUdRQ0h3UjlscTh0cFlmT3ZOUVpaOVZwcktYeGlDVDR0YmdjR09sZFlWa20wYisrZWtYbjJjRk9lOHM1RnlwL0JoQjJONGxiSFoyUkRXZUpnQ080VDZnSjNlbk5sOXUrZWpxeGw0ZUhNaHk4NXlTeFcrTjBrUHNDN0MxTGppaFBrVzE4bkRnTUpWNEZFWVcvYTY0T3RSZ2Q3cW9RTzloSE9sRFBtd0s0blQrcnJFTitYbUdTREw1UzRQSjMveUNCMWxYYzBWbHE3WnVmM1VSQ2kyRjZQOEJjRmtRMy9wei9pUHhGNHk1THFEOTgweFhtMGNqUHVNS2FaMm9rMHhvckpoSlpGNGlRUW12bnJGUTd3TU9aaEtiM05zSGpDVUZtVTEyQ3oyTXYwdFAxQ1IyR2d0OFUyTkdZenp5MWIvckRiZm91aDJwYmV3QlpSV1pkVDAycHhTc0Q0RHdET2VndXgwU1BMSkxxU0pjU1p4dG9QQzNuYzJMZ0cwa3dXS0s1NGVlL0U4UkFMNEpqYWoyZmNoeUpmakkycmxpTW02QWlTeWxZMUNNVnRFRVRWRXFIS1RaM1BUMFVVeWFOVmpuakY0eDRZUEF0aVdwK0pNT1BSQzJiM0JYN2M4NWVDcFNJVzlkMzBhb2VtSlpaaGY5SDRkOVZPTHVsQ2V2ZGc2NHVYR3RqNzNHY2N5NXBEcVVFSitWZ2tHZXpNTk1oaHFMbXRBVUxpZlA5eFJmT3JMZG14Rm5JTUo3TktTNmpkelF2R1lWeGxpbHAyNGsyNlROTk40bUVFeFJOdjRtck5LeUc1SlJyMmY5SXpjdXRyZDlGQU1uaUlEc0MwVnU4VzBqbGdOUnhmRTk0eURMZE8wV2JCNnd2RTVabnd1akxIN1duMEpjSmM2UHNCRFZVZmYreFJZcjgyR0xsclZzYytFaFcwTU82ZFR2bWgydll1SDhnVnlFbE1qMmoxbFpnV1ZFZThKNXZUZTVYZTZzQUpsb20vQkQrVUMwR3Z1OVJ4eUVBNWtCb1k0R0JEQlNRZGN2VmlGVE5CU3BQUXo0QXMyMWdvQWJYWmxnYWg0bGtlSkpuMzVKZmJuQWowT29WaHNtRC9qZTk0QnI1QVFkaWQ2MUpaekVaRllZbmJST3Nla0s1RTYreUxiQXdaVkdxRTcrMHlKSjM2WVhKZEloSkgxZnBFdjRwL0FiVEV6R2txK29mcW9YcGExOGhuaDVHL1NManBRMmFOR2xTVDlOZzFGMEpFK1lTd3RCbnhXMGhOSkhkemIwbXFhSFdZRjBWZGhUdDZ5cmplRlJvRUlyaHljSmUxWkEvcFlZeDQvbFVHSW1LNnFIaGlCVUY4WXg4SDNwdnErcE5vN3lDTXN3cUdTbWVPYXFiMlh1dWZmdjhVbnRpcDRLWnNYZ0VtUFF3NWdReGlKLzlMeG1IaDNHMFpYSUJxYkVJZXg1OG51MzRXbTZnTnRjaFMvbXNHUW1wSk8rUFlVUHFDNjF5N1laZmdFb3AvQzFCb3BTZzBkQytKRVJtZ29mV2hqMSt3ckN4Kzd2WDZBUWpvSjJQWDdWOTQwVUNjeHNkUTBYbVZkdDFsdjJDU0E0OU9KR1piM2ZHeEtJQ3Rkdk5MUXdaZXJaZmhNVDlXc2w2NlNCdXNJNjRKbkJtaXpQcjN6V0RYNXZPM3g0MHowQWxpbVdwQ0ZQMTZKY2dPRmRvWmZUYTZGbk5tb054eUdZMzZiV1JSeEQ3aTh5bVI3NFJCQTZ4K2FGdlhaSTExdy9DWjRKVWdsZU04aDBiNHpMTnRvOHoyOGZuTnFWYUtxK1NrUGM2cUp2RHNTYUVJZ2xDTzdTZ1B6MHpZakFrZE92bTdhVGFMLzAyQmdxYm54TmJTODZidUcvVlkzamt6UnJ5TWtMWlFralhUcnF3NlVOak94WksvOWh6dGFUb3NhK25Xa3dDVjduV1FXNXJXWGtyRUdWcjYreG5Da3hxTkk1QmtZS2Y5U2kyY2dxTGRZM1ZOLzltcldmcUUxQWxubDdmcis1SmxFNUU1UWdnM1JRTmY0UDZVVUp1ZnRtbkpXdU9ST21paDFISHBQdVE1VjFuN05ud3NyM2VxL29YM2Joa292eExta21xVXcrM2s4N3BLNUlpakZ2ZXV4Tm5CODIxQVdkYkdnRWR1TXJCTXNuczc2MjVvZ05jUGs2QUx0SnVBUG5NMFNJTWdyZ0RidEkyNDB2VkgxT1JmMGk3Umh0YW1ZUmt0NVpNaTdXbGgxb2ZoWCtXT2JmbG1xOFRiT2M1dElDYnVYSDdIakF0YkNzYy83cXA3YmYwdURURFB5b2JNZFQvZFovc0tQQlU2OG5aeXQ0RnYyam1sNGNlcFpOTnIybnA1aGhaRU4reXlvWkhNaEwvck9ZSTNpM1dTR3dRNFZsdkYxOW0veW8zc3F0OU95N0dOdEErWHhMOWc4U0cxN01IbGZRNTdrV294Wkx1bmM0TGpaNW9WRjZDeXUwZXNxa3M1TjF1RzRTVFNNcHJGZS9wbFMyN3ExNTFHMVJjbENtNndzdHd0U2ZMTGQ3WEFPSDJVV2N5eW9UYkZoUVRUa1llaWRIaWIrekFEckdyM05PRE05VTdrbmZQZmZjY3IwNlFRTmgwOVFGb3NTM1JrT3lqUjRUSmppQWxVK1gwQjIyNm5vMFdqS1RidGxwUlBYSi9LMU9qTTN1RTF0M1RlbnV1b2pwRDEvVGh5ZEJnN3MwbjQreTlJZXhpdy95V2Jvdk1ZZFkzV0NjQVYvQ1cxb3pyNk9pc0xTd2pzU2pNN2UvMDJSZkkvdEl0QTNWZndRNUtDM3N6UW5Zam1PQWc4TnozYTQrUnVxWlNweFM0SGhabXcxUWRCZysrMFdhNW80QmJwVTBVUFpSbk5PdVNuM3ZjbkZodys0UFBVYzFKY2prNXdIN0xjRzYzaTVxQ2hkcU9Bc0lqczgxc2NEaWJnMHoyR3hpRVRBY1dJbzRPZWVZOWdYSW9MblBKUEdwVGFhZGVlcmZ5Q3gzY2JMeWdRajNQL1RnUk1UMTRHdC90c292SFhFVEtueWhhQXdCdkQ4OElpSU5GZVo0MjlzSGxiaEN3cU02U0srSHlGOU5rQnlkQVJxWjRJbmlQS2JUZ3U2K3lZeGthU1o4ZW9jTXlsTUNZYTF3aCtoclpmRXJsU3ZwR1BvejV6QVVNa3BGQjRDT3BtVkdsRC9sRlYxelB0cWNKTFVFc0N4OThCVHl0bVFzeGxNMzJqNjl1VU43QzJZbzdZUmpzUU1CY0Myb3Z4S3RIeGFoKzhXSXQ0MTdqc2tLalBKR2paZE1NbHJyeXlGZUhvRUx5V0pabWVtUFR1NUdOUTF6RVltck11QVNsWGFPY3pSM0xVR3o2YUdkbXBTcVdzdngyWEhCcG83T2M3YktwWFo5dmVsd05FdEpwNHpRMTYwWTMxL3dhWVVCa1BJa0pjV1BEeldxVERiL0NWeGNxZExTRVkvMFBlZllGRGFTNjNyRFQwdUhXTXQ2bjd2c3hnV1dpQjBORWMyRGs1emEzai9STXhha3FVSjFSQjc0M3hhSWM2dVMzRkttWklVZ3hRcFdFZTZKd3VSZllhZW5xblFNdTNKTkt0dE14UlovSERSc3hkSkZpMU1OVFNvSExaVVBPVmFZQ2RSMk1oNGozZVNENW5MTE9neXJQNlUyemYzNXg3amoxNU5PNGFXZm5wOTkxbjdzNlJqck5SZzZxN1hwTHFqN3Q3ajBSa3pMb0tYb1AyTnd1ZFh2SHVyMmRrWXRHTWEyWndCbFZSUHZFOWNwMnlvWStOUnJRVjV5NFdCbXZsSnNNcHdaMU1GZmwyMkVFdVEza3g2TWZySnVhSmFBTFl3Uk8wc1FZdXZsTkRveUN3SytLek9hb09NbDRCWjZyMzVWZ0hxTUhTM2tsWkhpVmhjT1EyMS9WenV2TEVFdGtyK2o1NzFqOUVSMlJOdG1aNDArcXRXSHQ0YytNTVU0TXA5dFFscUxwUVNnZUtTV2x6YVdxOXdGSDlaUE52YWk1RndUbEVmUlBkL2ZvMUN3WUdhajI5SGRHdTVrNHorc1hjTmlJS2d4L1BDUDMraGI3VTRzeWJGOHRNODNIeFlrTnN2d2ZMSzFxbWN6aldDa2x2c0dvUEovZ3VzZTNReThyOFZ1SzY5UVdMSFlQNlRYWlpOUC9kaER5OE9MM3hsZ2VqZk4rQ2xYMHZBZndMZGx5dGR5K3lQNjhCbXVjNm45V2lWSFdRb3ZQdExOZUEyUk1SQnJITWpQd1hIUElNd25QeXpPdFplT1FxbDVFNzVZMGM4SC9XVW5wK3F2NE1MVjhnTTVGQkJ1aXJGUVYraDNmemhYV1VtL24yeUdWNFdRa25wQVNydUd1SStQSlYrL2ZyY1lBbXFWSEVKQUFqYUExUm14NUxjTXcxYmQ4aWFBd2VMdng2c1NSdXNTWkpCQllrYlkrZU5vcHZBTk1Qc05DbnV0c1diOGVSeFE0NTZEMjA3M0luQXFLSWNqWXRqdmk4V0oxTlJGTEIwQlkvcllDMUMzcm5nNVpQWUVNS1ZPTk9GbkNXZnAzNHppZW90YzUyVVhDcktKQ1psZFJsLzdna0xSS2s4Rk9zKzZ2Wld6cXV2UWh2OXNqV1VtUFhSSXBOdE9BQ2pQMEFoL29LOXFhK1J4Z3JWekMwbnpkVEtwOEpPVm1JejRTZEJGMHNjeERGUXJOVzRLcS9jTFh6aU9RbXMxSTF2TnlWTUlhVnFIbVI4Qk0rNTlZMVNqWjVKTm1Ba2Y5aUd5T2ZpZ3dGNEc2V1B6MWd6Q3FvWEtEVlVSNUorNmQ2RVc1N1BlK3BCTjdjUHlzOFZJcGRjWWVjcmRSOTVzTEFSK3Y4RVhVZHNKV084Q21uNlVoNkw2T01WL3lmSm0xampDUm44NzFRdjlDb3B5UUZNeVdwcktaSTYrRXlrU3J0TldETEVZSExYTTRsZlhoYm0yMmpVVWVSa2xoYmdPTEcrN1B5bWV3VElaTU9CVWF6dXByT1drZ0FmZkdjcURWMTlzcUd3M2dMMnl1VWF2WHgySmNLMVpoeGZWZHZyUjRWeFlWaHVnV0I1dEdjQjQ1ZUE5SWRIbmpteFhYb0t4S2Z3dTNMQi81RU9uaFlHbmxrWnhmNkZBVEp4ZHduRXlIVzBnd284YU5TOENjcHRuVGRKWVdJNnFhYzFCdG95b3VNNFJJK2tCdUI5Vms5SUdvVFRxdE9jc2dxZXRnZ3FCaXlJMVNscGgvY095OVB0NVdLNkpwTkdKczVrK1FaQlJQWVlpakxXYld3U3Z2THQvaDdsZm4zNEtrS3hUMFJQZWtSRVFqRlY1Rmp6KzhKY3RZNUovakRhQmRlcjhXQVZLS3A0bHAvVEpQeCsxWHk5K3YxSExlUW1NZ0lNaTk2WGFOTWRiZi9xbHhUZFB3YlA4N1lXOTFsaFFVU0J1WEJiZ0lpaVpBV0NlSFExYlFvWTQwaE5naXZLVlBybDhWNG9Vb2o5cXFNVWRabWM0SG9YaXk5WFZFeUFSTGNKemZodVpYNFEzdkJBdjRoZ0l2ZXZSaEdCZERQcENoejRKbEg0Wngyam5oMHdqY3ZkOHVmYXY1eWpyKy9XMFdiaFVVaXlrcVM1bm1XdlM0QkI1VjJnd2hWaDFJYjZhaWZNMFhndzF0YWh2SkJZcjAwdllZdFhuVGJKdS9LQnJTbXVIQU9KS05FcEh0RW5mdmhKZ3NvV1hhK2dhNUxRQndvbk1MSU9mNWtsN25vUnRQUldTN2puZWt4S3J2L09sNXB1UHpKSU9ZUUtUdHh4QjFXaDVNN3VuRkdrQkh2eVF2K3Y2TWxTZ1RkblBORThYZWROREgrREVYc3YwZG02MEhCdWd4ZEowbHJaeXdQQUVwWTlPZEtDMTRJMnNFcTlweklTUi93TEJrZkgrbjZVTHJaVlJSRHVaOHpEQVNVcHF1TmtBcjNpTDYyUDhZbDE1ZTdrdDNqVWkzR1BwUEFadCtiQVlqbklBc1Q0YTJqTTBCUkxNbGxmWll3cUVoNzFWT1VoNTA3ZEIrTTVhdUw4RDJYRk5iN0NEZk5xQktTV0tLTjhSNkJ5YjJ2bkYvcUNsdVA5VEZTbnVhQkVsODBIZUU2MHM0ejR0d1dqeDF3SGFGMklpTk01QTVMaXhsSUxPMWo3Q3VWYkI1TEJXRTBCb0ZCMFc5cDZDN01RRE5CdnE4V3hONTVxT08vajArZnRsZDBQTXFqaVlsUzJMcTYxUGJNWnVUV1lpdXE2RkVXc3IvQk0raUZ1L1ZNc2o4M1JWZ0VvREJ4bXU0L3greEpHaStLZTVVM2YxYXp2RjlNQTJVOXFzRTBrSG12VnZtRlhrK21FemhxRHplM1U2ZHZiR0hDTVVmQWdiaUI2dGxGNmc0NjEwVXN2bDd5QStwanNPSCtFNTB4NnlRdFJuSFd0UkFFaEdNUERCREUvV3BRbzMyOFc4dlMrQ3h3Z2t6ZDkvS25iSUFacFUrMmg3dVZVaEVkRXdqTDlPUzZ6alJTWkExZkZwZ3hYamE4YlJvQkVEYTRqT3VheWZBOE51bWdsN09JNGlYc0VXbkN1UnM3UlRrb0JZOHVoeTNvL0xwS3lRWEIycytPZnRYWlJoYmtkbFFrdWFnTGFMM1FPT1hIRDMvMXdlZ3VwS3RsUmZoSGxyV3ZuMzdmb1lnL01zVjZ2WXB2RDBVUjZJZFhNQlVWVzhJcDhJdThNeFlFWHBuK0ZlakJwc1JrNElrckVwcUUxZXAvQTNzc1JyZWlkNEtudnUwcjlYa0RKbHZlLy9KdTlTMmRYNUR3amhjc281SSs3U3o5dmdlazlwWExrdmNzK3lTZEtOSG9ySGtmZlRyV0g4QWJ4Ymo0RnJTZjVzQXJKbjF3OElOeUtYdVh1OGo3OFNFTW5PWUtzQWpKanJxOGZLcXRRUWZDMmQ1SU45ZUJWOUxxdlNmWERrZmxqWGhDY00wS28zQ3pMS01makcwUmdGTm9PTkMrZGxKUTgrQzl0NmxFVkR3UXZpa01pQzNDcXdMcDQzdk1tNmliRkdLVE16R0dERk50ZUVBWHo2SWhGMDJmNW1ORmhjV2xVVXNNQjlLT290WWE2TTdrck1NWEpBYjBpcmMzN3dIYVFWYjhhUzJkS1M4bURtQ081UlByT3Jha0VJSElqcENITUtSRmxUMHd6T0dXZU55emtwOHJHZnBpNzdUaEZsTUtOQ05kWUNQeXJYbXlGRVZTck5MVW53bk1PaVpvUEUzTTZQcElnRHNNamxHbkFDUFJ1UkVQOG8wN2wvOEJNcnYyL2JOc3lVZk83Y1dlUnVaOGl6aHNCRytqbVU1UzY0clBzTFdnTXN2eUdTa21tV0VzeDQxR3pUNERpaUc4SVlsbWVLWWt3SWZFemYxQzM4Vzd6a0RhRlJmbTdWc0RmclE4NWNhS3k0dGJZbXl5WlJ6NjV2OGYzRDhjcjVSSWJSWnJRNTYwaUtzNVJDSm12U08wQnh0SnMwUmZ5cDRYQk5mYkl0dVBsdG5xaHV4aEFlenkzeElieXRDVkJjeG4wVmVkdWtQRURhNnBoTGpibEhuS05aRDNkMFpRSHZJWjNVS2MraHE1R2c4TDVqN0N1TU9FUFc2OFRub2o5LzEzRkxwUllXdzhPWWJ0K3BzVGJ1UVBlbVNnblFHNFM4N2FtcWpEdjFCSUNkSURYMkJyUXRpaGNwNDJQTmhlREhSM09yM1dONFRCNnZ4RHh3QURrZkUyR1hnUEgrQkoySFZPb2RTK3ZDcFFXdG5xTHltbHFHb1BUZTB1b0dmck5xeVRPcnllbDhWTW9DVmo2T3NZcmE2QUF6Z213WDlrYTVlaTJvZkd6Y2ZKczJEajU5dmRMM2IzRzd2NlczbW9zM1hMSVNXOGxGOXVWYXNpS01oTGJzV0VtYnNjTGJLaW5ZNi9QdHA5WXozeVNIYnlTS0JiSnQ4bWpaTzhCcnRBYzFqZWI4ckJKM0tlUEJlSmJqNjF6UjRWa2F4LzQwTnJEUm1LVHdxTU5TWVhZazJnWnJwRlp0TlcrZ0krZEJWbVVObWU5S2RuKzdMUVNOaWVGOG1rYW9IUlV1eFIwZWRFUmdqSUFiQWoxdHhkTzh1ajlVcWRwbUVHa2JyQXJzdnJIbWloRE1GNXpjRzFOM0FiUzJ2QWdmUmloTjh4OFhIUUVEbDRMTXVVY3NId2RrVXRzYklDQ0dBa3l6bVdocVV3OXU1czliREIyZUhkSVV5TnpidzhFSHViekcvVlpQVktaRnNKelV6d2NNZ0ltQ3FzY0lLTGIwV21OWU1Dc1RYRVJxLzFrNG5YMGFVcS9rMEdrR1BHaGxuZ3RLSldETTg3TW1YMi9XVnE3NzZ4WGZHcGZXYzNqSElkZUcyM1U0SEN6ZFZCWXlzdWVJVTY2ZnRWZFRJQTd3RUF5V1BsUFk2TUwxQmxKU1dtbWVFVFdJZzdsdXFIVFM4bU85ZFVITldJbnludEZNOW9tUEFjR3hqOXpsNUc5NHp2ZkIxMkN4c2swSlMrcm9DUnJyREI4SE5mbkRZSWZWTXd6Q2RVYjJNN3ErTXpTYTJuRnhxMExNNWNXaXlocFZwclZNU1RGN1BYcUpjaGFCajM4MGpDVWViK3lMdGFWZnVOTUJ3dUhmYVpoYzdLcExXUEErNW9UWm1rWW92cmlJTWhRcG1rOWpFcmpsNEJpSVp3NXFnelpVdTNqcjFpVlBDc0hDcTJSbGNnTnNoMGFwMUI0Y0VZNTU5bFRSU3hmd3JLdUtLWTVTUHpud3lkZXdHakVxUDR5MTdaenVOWTllMjFQUXRlT2ZmUDBTajIwSnpMRUdKWUhYZEJlR1NVTy9PWVhyZXBZSks5VVdWYnQ1bkJROEs3NzlxN1h6d3dUK1JubjhlZy9LTXdGUDNjTGNlOTdEZ05xOExyV1hwVGJmNnI2bjBlN0N3K3NuSU42STUxUWhHSGNhbnAxZFE0aHNjNjdjUDdmbkszSTRKTXpsTFllMXJUdzNFdzd6VEdEdU16WE1NZy9xWjFsSWFTcEY2SVR6Yy9jRjgrQjdBaE9waG9YYnhRSGFiZkRkS084UWJxTTRsT1BnUU5tc1JoQUlUNHJ4WExvWmFNK1V3aTd2bEdScWdxa0V0bHZMTGxHUHpTSGFadEg1VEZJV3FIdGtobnlybGRGZ2JnbjYxamZyZHRPa2pUcUpXOUVSTDdwWVdLU2NRSTRNSW43VHBIUTBDYW4wd252a2hjOXNxMUI0T0M0bWtIcFM1TkN1eURkUHNBQ0k0aCtTNXVIMWk4eCtRc3NuaWJUY3FWc0JzY2JhYURuenhQd0NYcTZiVHpBNEdRSU91RXpJR3JFL2xCemprcE1ybnAxclJUcVJGNWJQV3ZiTUNoWXY0TUpIeDhTeHhuc0ZxUjJGNXpDQkVERk5kNTE4bVpzcHhsSlZZY1dyNTZ4TGFVRXlndE9md0FiQVhHcFRDRjRUR2lNOGNJUDVGSmdzVGJBaUhMRzFIZjZzQlNsY2dYa21FK0Vub1FyZEFlOTRzV3dxTUJSRVRRUTdrTVAvVGVwVHpra2RuakkrNWkrWnNpaFFwRitkVXBLZTMrK3ZMVy82cTY3cXdRWWI2b2grTHFneHZqUERQZDFyS1p5ZjZCZk9rT3ZLVjRaenhxeTJPTVl3RWhVZXEyMkxkTVYxeHZhNVJyNG1Wd1NpdzE0enEveFRlMTJlZnE5TDhtM3dvTVNLZG5pRDlWbkQzVXozRUNVQldURnN4eTBha3RwYzRNdmdIU0ZGTXJjNjJVbyswdXVCY0E0Z1NJQVZqRXZxUnhnd0ZxZ2lKZnpMeEdVbTdWYmhRWWd0VDMrbnRUV1JRZ3JpclVtQWtrK0lQMm1oYzZwbmhZbUVjdVNBN3BZMUNTQ0dzTklRR3YyQ1luUUpKVDNWeVFFMXhoNTZnMkNtS0FCMWRxTnM5YlJDdHRIQ0h3a0pjcm9ZbG5sNGF2VEJuK1llWDN3aFBTTTdZQmNDaEpxUmlCZzdHZ0hEU01iOUpOZ2o2ay9lM0VWQUQ2OFZKZ2JsZzNuZ204YTFGS2lZL2ZVTGFBTHZYWUlTOWdkOXlCVGtqTzhKWmttSDVQaVVUWW1zWEptWEFQVzRYMWRRM0Q2cFlXc3lnZSt4c0hPYmoyR2VBMEkvd3R4dnUrYWc2TzN6cGk5WGpzRnhOaUtrWDZhL1FBaFZQYURDM3dZNmJpV3JmTW56M0lZYXNuSkZzVHFuUnBLd0JvWUVlVG9kbmxEN0dXb2M4N1VzOXNFT1lLbkRrYytRdzgxbXZqQVArZExlSmhOek0vbDY5akVEbjQySjB2SExlNVVwZDU4cjB1UFI2b2Q2b2tVcFdpTGtuclZBdjQ1L0RhSTB5RUFZMHRFTndpOWpqVVhaU3MxSTIxN1huc1VNdzM1VG1ReEVJODZFQVNncHZUQ296bjBSSm1yeVBDazRlTWRNMlJpL0RBVkxkaG5IcTZmTEltOVZPMmhaV0tDRVhvc0RsUmhCQld1R2c1ZmlXVVNvZFJ0Y1dBZWh0VG1ER3dCOHpEY2hEQ0V5YXNPVVJucktxNG5uaHdVencxdUJBY3l5ODlvQnF1YUxwbjhCWnR1Ymh2QXpVVGl4YmtvWlJrQStweDFqWFRpQUtDZHFlUmFwMlFENXJtaEJhVnlqUy9hWmtFMklzaERnc09IblYvSDBWdXYrajIwS0RSQko5VHRGRldvZ2VqMFFuMWdiT1V2SWIyeEdkaWlQVjFNY2JoVjhETGNiY3FndHlUbUNCVk1CVlhuMkNxMmQwalRlQW83MVE4OEJMY3hESGFRZkRyR1RLOE9sMWZrejNvUGozcytobnVnVUVDL3ZHb2J3OEZRdGtFMkZaNzMrVTBBcHB0aERoTU1RMi9mVEI5c0lYQ0RqeDJnVjJOL2hsWG9naS9VZVozSGJhbUw3aU5ZUzEydEdWTnFDSWY4dkdBNDA2cWdlQXF5cnFzdkRIRUI2dWI3dUNqU0V1K3k1Vlc4ejhvQXE1M1NWVmFJbWlVbFN1ei96Mlc5YWxmZEtnZzdtMi9hUG53Z0F3Y2RteG1XL1VXclRXYWxTN0EvY2lSdFlDRElYeVhJQTA3bEhZdHhPTHJRcmlVWEFUcU80T2xqdjZWeXpSQ2xzZzlOZFdTa0pEeUtkOWIyWkI1S1BLVis0Tys1NzFCNkZROXFmWDd4dFVZY0hJemZGMTFUbUpoL0JWSUk0NjRSU01ZWFhjOXdjNFhiaUMyUHpjSFk1Z00xcUtSSU5kUkVJTFYvUlVqdnRvbThzemlPYTVGMkJiamJUMjNGRDJJbDZMOVFKVmZ2aXJVL1VBL3V2cm9VTU01S25NbDcyTW5MYjN6alV1THZPMFh4elVKeHRuZy81ekJ6WnowSmg0ODg0WFlmM3FFYldyQTBYNzY0UjdSbFdWT0drZnBxZkJyOWZiVk5wVHNrN3B2dHQzTC95VDZDTWhIcFdiMDkwVUV6VnZ0Qk5zZmpqYUpGMnRqVUdjUkpHaWUrbkV5ODNoamk2L0I2SC95aVBTdHlZNVlXSEJuMFlYbFdXdEZvQ2JtcXJKOUQ0V2wvaHdiZmtBcTQ0L3Jhdi96MHRRZWYzbC9Sc05iVEpzV2ZUd0dXbWp0ZE1Rc0l2OFkrbG5Bb3k2YkRScml4RHNleW1BMnpsd1k4REppSzJqWWtBRFlNT3V4dHFpczdPMWcvSCtDUDcxcTI4ZlIwTU11RXRBd1RodnM0Z1NJVmQ3SlZ4enR5U1VSNFpVUlBXaWN1RmpJaFBES1ZCMmdzMFpuZVFxdkVOOW12YmpEd2FxdjF2UitWMVByUEMrZlNPUDZ6bWd6d0xqL01uV0R2UTdKUHBVcU1HOGlialk4VGlib0RtLzJiQmlhdUN5ZTMzNjlPNWROQ1Z5b1BveW8xa1hhN2RuRFZTU0JDV2xZSlc3OWpwNE5hNEhqWjB4M0VOaWFrY29rYUlrbUZNQURXWTlqL2lwK2J2MmpEcmRiVE4vSUVGVzdNTEY5NGROVmtkaUZFQ1VkK1pmU2pWeis1MHFDenFOYjYrSktwcTdqWU1Eelhmdjh0cjdXZmdiSE0wcWNWck9xbWpVYUwyK3JwVW1DK3BlSEVsVXJNRXFBV3oycWRnaWIrZzBxZWFmVXRVaWVEaWlNWGl1UDlyMFp6enJxdlk5YXRoN1EzZjB1eUFVZlZFRFFRTEllQ3RkV1hVWjBXTVpCLzVDa08yd1dlQmZWK3JiQjdyV3hQaHVGZDJDcHB2cktKem00NHgxd3pHNjg0VWxsSHREcm1tV3VXU3NhWVJZd20zdHBTZGJpbldaZUU0S0JENnZxU2hJZ0lCeDNzOG01Z3h6OW5YaFFRTDNRZXo4K0orZklyam8xTGJyRWEyL0hnNi9wZ2l5azZOdUpTNFJMQm9xQlNaR2FOQjBFVVdoWWFyQXJOUDNVZTkvQ1VtdjRFdFJDWVV1Q0EyR0FNL3ZPMERGNDVQbHEwT0hiNHBtdDNSU2VUQ1VlaDB3bGZCVzV5OVU1SG85Zk1FQWUxZkUzSS84dHFzZUh6YmNOZEp5WFIyZVQySUE5NE1iVU56a2ZBSVJqRmo0Y0ZjanVQeE12eENOZ05uRXJ1V2RTUC9jakVpSDZLVGdXSXRRcGM4T29ubXl3aDB6QUVCSHZuT2NMWWM2SThGYWF1dXl4MEh3YUZUWUxkSVBMOG1PUGM5V2RtaWtPWHNLK25udlZVRlltbXhNRDhobzQyV1hLRmVOanp4Y1duWEpkbGFJeVpoaVhteFlJY0E2SS9WOU5pMXI2ZitKL0VtVWxBOW1RemE2a2l5eUI1QjhaRGFZSmxWQ240SlZDOFoyV0Z1eE5tZ1ZQV0hFblR5aGpucEhUWGFab2MzQzdSajlENGI4YVZiNlFFcThJQi96NkhZSVZXNGRQVzNuU2dxam5SMjhGWWpMT3MraUVtRXNKZ2tsMmVOQ1BhcTdrbzNnTUNFeEwxeitqVDZUU3FhZW1HRXpUQStha1hPakNhWHdXMjQwOXJyaUlza3lCcUExN3d6Q2phRFVlSkNtdHYrSVJKdG9ITGJzbHhreGJzUWo1NElNeVZyTjh6Tm9NZHB4eC9ydjl6RStkeUNLTkY5cmhpbmlzNWFscE13MDN5aWpXcGRsa0hCQXczUlp3b0lqUWNJYkJMdFRzTW1ya1VpL3ZGV1JGK2NEVjhzTkN6K09WS052b0lzUkNzN1NERm9NSDM1UlFlU25QMTUrWHp3eFJOZ1BUQ1h1WnVyQWNyc1diK2hpVnEwd3ZGcGx2RmI2dlFwRHN3eU81eTRoa1ZWRlBTSkFzMGJ6Y2ZKMEJUS1oxNDFqVjd1Q3ZCM0svWFFoUzRVZEpXL0xYS2J0aCtZcVczdlVJRHlnU1N1L3FId1pQZit1dENTSDl3YTJOSTJMZnZ0a2RRLzVOalBCRXkyeUdtK3ZXdlRDMUpxVURtaWJENUh4TjdZZml3U0txdE1lMlo3YnFPWmMvWFArOUVqMnBBaTErVmpoZlVBb0NKWCs4cnRxdVpVZlRQbjF2ZWFkSGx3M3FXZ1VOVlhLeVo4S1lFKzhyNU45WTl6S1JTcE9Ua0VmVmJlTG9FS1lUSGk0NzBIZ2pIb2hjTzhOUE03ZlZHT0xkZy9XWUhyeVpTNHpKRUxVbWkyN2xKY1FaSGRzOUVqZmNLL0szU1VtZTZXcGhMUTZEUmdSSUZTdTI0WU1YS1JnaTJrR3M0YlBFSVkxZENNTjRvQ0hYSVQwMEZoYXdjaGVhd1VQQlJEVFpSNGhlVHgzRTJQZDZWQ2FyOWIrbE9oZ2NqRVN4U0d2cVZta3Ftei9TUXVTRWc4dTRqbEMrb0FGSzdzUHpVYU81WGlGUHRrdEZLUDZDZ0JGeVdIUXdwTlFBMFo5VDhoQ3VVbDFxSmZKSzA1WW9DcGxGSFc0REpiVmR2RHZyNHQxT2tLSUxyNFI5c0hlSzE0TW5rMjZQR0svdTB6ZUtNVm4vai9JcGhobXBxVzVDR2trZXo2dVZrN1h3YkQyQnRGSjJKUmJXK2ZNZzBUOENibHFNQTJDYUhGL0J6OUNRaFd4QlR2OUtPVjd0T2NveThURHZteGZTcGFyOVUyVU9RbFJZQzNFZUlFOEVwWHM0NDVuZzdUd0NvZW92R1N6b1VMeFJRaWhWUW9LS1hROWpWMlM2Wk9HQWI4d0s5c2hFb28vd240eCt6N3o0cXNFalpkT1ZHbEFxanphM2VINWY1S3pETUFTSThDSzhKekFsRGRJeTNrR0Q0d3VqNHVQMHhwK203WDREcXkwbHBiZmNIcm5VelYrT0I0ZitYaTJPVk90S0tpejBxaUxjTXlSbjdCcFJYM2RKYlhSN1FvWm9ieHNiZVJsS09TSDhWQnNHQUc5YzRJT0hxQ05McHJzV01qYllYanF6ZmcxU0IzV29LUVdIZmZ1WW1QOG1JQnEzUGpPYjNnMnFXVEpDeWROWnM1S2NCWC9TV2Rna3hnZ2EyMUY5bmRPS01LdGRucnc5T3BXdGdvUUZIL2UwVktveTlTa01wcWNnYUpmdnptYmJraVRBMUt3UjlFSDdTMXRrNmNRZ2RreVZycXZJQzR5bWN0TnFFcWZxeGlHOFh4VkxxUm5SazJKb0hIODNEczR2U3lhSG5BblJCK210VXEzM1dMRkdFL0tZWWZQbE03djRWS1FlNFB1UmxWTjk4UGsvYy96cU1BcmVYNERRYmtrRDdmOUhEZS9NNm4vWUJiOFQ1aWM4Q3J1YnMyWTljMDMrU1gzak5tS2JUT0VuTDFpT3pSVXhXNzZVZGxXZElHcFpjVjhvdzdwVzEvL1c5Q2pteG9XT3lxaWxSaTZIKzhsNS95d1I0RzlCbnpzbC8zWDBMc2VZdXZldWJNRUFBaEpFTmxFSDB3SGFQYmhOZzhtc0tyV2VKMXE5T2NZMXA5eFZuQWdKcVo2QjZUZWY3U2diVUdpTHRHNmwydGdiYk8wRW1PVG9uL0c5RHVCR1AxcXdnZ3psMzUyL0oweHcyM2gvZ2ZqUllndmN0M0I2bDlJcXdEMVFlV2hVSXh0blZ6N3FWTGlTclY2N0xrbGVwQkJHTWFFNHlzd3p1VktzNndxd3M1TjNhVHIwbjErdVA4UCtpOGpHOExxbFBCdmR4cXdNOCtScG1ZZk1Hc0cyNlgxTEF2eG9razVGUjhaZVlJM1NtM0dyem0vVFM0anhCcU1WUWhxNnFNRXljdHBLc09nN0ZMY3FJRU9pamdjQjU2VCtZWS9vcUxtRDVsaGlBUFhpWlFRc1IyNWhIU2JPcDR6TFdqWm1kYmRDa1BETThiY2JJcFZlbnJyUE5vZit1UDB2ZWdQSEQ4Zjd0OUdBRVNScTQvNllOOHNnMlNnVU1VbXFFaWpXN3BFY08yTWg0NERoMG5hWG81U1dZNkY4eHBVN1VFYVNTWWI5Q1JDNGpUWGJ5VFJVUlZ1WGp1N0lXMnBFSnBjMldkb1hCSGJ4SjJldW5iWDdWUDdVcE5FcDd4ZUViQUthaXFjYWJQRFE0N3Nnd0ZxaHlNMVZwdW1FZVRzYjVDMXFSKzhNNDRNMHExZmlPQUJCOGVTZHZ2UWg0U2hoK0FLWCt5aTJOS0tDREs0Ny9XdzBpQkIzQTZvWXZxWWNQY1Z3d055bzA4NTd3QWIzbGdZa09HYVcrTTh5cjVtbTB5cjAxTkxIZFplWHlYZnBhaTRUY2RiZG0xSW1MVzlNbDdtSzI0NVlSUi9CR2xKbjliMWlPeCtWejU1ZjR0eFJ1c3RhWXF6c3dzTnYwQkxyREhyNzIyQm11TXVHZ0xwVXRyS050WVN5aGFsWlNuRVliRWppRVhjMlRRMWFpRFVHcjVLTmVsdER3ekdERUUzQ3hpU3JjTTB6T0hKUWlhb2o0b1FSd0ZGVjVBOFJwR2VGTXZqc0x1QXJLNnIvQ1NnNDAzcmZoR0NjV0pLdk00ekFqN1dpelVhNy8xYkc3bVRuVit4ODhyVW1OcVlCN3h3SHUvbEJoSGJ1RHAzTGdjZVI0dG1kRW1jMzFycmRVSGJMWXZoVnFyYjFSdWVNYUljOCtTRUt6emFOTzVHeVVaRGRrMWdwVkxhTWRNQlZGem10UDB4dTR2NlVCNkdZQS83d1IyWTNnSjRBZ2VCa2RPWGVxYlFKNEQyYXJqWE04ampBV3RZQ0FuQ01sU29BelNBK0ZnY01pOVhSTVQyMitDUUcrU2doRHBSTEhQV0hWWjAyRDZEczltUFYxaWllUDZJRncyalpiYlVIei9MeXJKWFhNaWZDYktobm5BY01haEZTb3dwMmRCZzBkR0lMZWtiTUJDSEVBSGg3RnVVYXowRUp2c1h1RW5INllIZXY4eTl6bE9kRmtGQXB5U1NPbnRwRVNaZmVGRUlIcmRjcU9wemxvYW9nT0w4QzNBeEZuMWdDTVJVOGFoM1hJZk41M0JNTmp6M3hUWXZ2UGdpWE5oeWM3WVFOWHZZSW5XakR2b0pRb1FyY1NkQUtZcFdqeWdmYU9OaWpBQVJmb0wzVW1JVE9zTUFzZTdyakFyY3FGZTJaMUpEdGVPcGIrcGMzdU51YjdGWkRodUozTWlKUjRUUklLanJWbWdKa3hQdUdXMVoyL1VNNnNaaDF0WGc2MmVsNkJiRUxYQzFOblZ5bUFoK0hhQlhnOWxmVVZNalRxeWNEb1BESHlFM2xtZFJkU2lEUWNxVnMvRUI5d29kTTZ2V1AwZ3Uwei9jUUZVek5DZjhabTlZZDZLOHdRcXRuWDVIbDgyRitVVlRSUnBrWHpFcVdHNG9RZUFJdXFNSVMrNlBCMTN2OWFvMzlqU0Zvb0ZORzd0NnY1Mk05QXFaQWJEUGlRVnYxLzdYV3VBcGhIdjFjSHJhTGJoQ2liNUxReVlpbENvbTZjK1F0UHpOWE9Pd0wyRS9pblNyMFFacnlSQXJrTHZXU0VBaExLNHVEQ2dQSVRKcFczRkZnZnVwWkFxU2Jna1JLUDJnSklaVSszdUpPUmljdm5IZkthdGQ5dmd6Zmd0ZWRIVkVvRmg4ZkhXaFIxQUJ0SS9xcWUvcEJNRExJd1dFT0FhTmdQTTZRdmlaWjBPa2NEUHR3eTlkcHhtZUxHc1Voemg2UjRMWkI2WTkvOE43bkJlMFJGTUFqTk9LQ0NZRE5nTmFrWDVnQTYyeTdWcXo3VkRjQUx4bWI1ekJoN2NweHV1ai9wN1o0TERmdVRDOFN2aUsvY1ludzV0SDNaanBvRFg4bVdUZEFlbU1PNjFZN2k1ZDNtRkdlOHQ5a1B4a1FFQnVGMWVxbjJxbEc3aEVyRDZlYVJwS1VUYk02czlXbmxyZUtWS1UveWZsSEUwTEVhdDZiZko2K1pBY1FWRWtIMkxUbHRKSTBXb25WTTIxcFpETzBaaW9zSHJNeXcvSnBqS2wvcE9BTERuYTZKWFZzU0NCcndoZHJWZEFFTFV4NStEaXBSVE9wRDlTcGVkaDNsZWM4SStHcWZhcUFiZmhIWnBsWjFIRTRBODAwTGdYN2JXblhTbHVIOXRROVVJWk9rNGZBdTlqdlE2OS9Rc1FTY1dQRUV5TGNGejAzeDVEUHZaeVlHR2pOZHBISytIcnE3cWpwNE5ONW1CcHovTEpOTUtxMXNWSStBTEZNbGc5cG55aEdSRmZLSjdGS05aRjhYOUJDRzVCNnVLUkRFSXNRRGRkTDU4YXhjSGdjVnhxa0hBNk1iN3V5RHJiMnB1bFRaeVRLOTA5ME9MUXJndXhJYW9qNzYweER2dkhicDNhZEU2T2dNWGlqY3R1UFM2UmNCSm1FT1hMMWNMY0NockVCaFRSMnpCZXNaaTdtNFc0UFYvZm8rMUM3dFZuVmY4WVNxUHJONGVrRWZVRzZuNVRUcVgwVlFRalMxVkFYamZWek1DS1gremRpYktJWFoxbXhQdUVxcG53RlNxVmd6b0pQdFNrNjZYdTdjUkZoMnJOcTFFbDJreGFxQ0oweWdlQjQ5SDcxN1kvcDg5eUY4Wjk3RisrdExwT3M1cU1ORWhRS3d2cUtZM0F1Q1NmNGEzMnNHanFvMkwyaFA5VHN2WUVteHJQa21iZTgvQ24za1FBTENjRzdPaVUvc0F2SjR6Q1lvTmJpRW9hTFFQVGtTSG1IWlh0ay8xYW9GYmF4S2R1WmwyalIwdExNWm00T2dpZythVE9PaVB0UGNoMk9OYlVLSURxZHdlcWJOZENySzZwc1kxOVZ1aVM5d1p1aUtZYkEzL1dvT2tuOEhXTzQ3dUtIeGhhWEc1TjVNaExpNHcrTVlyNTl4NVFLTXhuODNBQUJCWWorMFRHR3laRG9tOTlFVGlyamRVTDZuUFJ4aHVDenlMeUZucHJWN3ZINjR1aW9uUkJyRDdtYnVFMG9tVXJkY2JzWFZ6cUtiei9TRHB1NXJTY3pEc2dLeVFmWEdsK1Z1M040ekNDR1NBNzE4MnFpVjBmcnNnL2hYdmNUaHVRNGxIcTNLZGVGcnBJNUpOTWR4ZHMyYWx3ckNqdUN0Uk9YM1pvWGxVbG9QcTZSbHlWRjEwUjd5TytNemxGL3V0T0NJK2lzQkpiOUZwdjVWZEFLWG9Gd3M4Sm1NQmxJeVFvV0FpNTFyeU9PaHBjTGJLUFZrNWU5OW14NUxoNi9NejhpVlYveURGMEt1Q3dwZVJ6RTQ5MDh6K2U0Qy8zcmVudUVEOVlUM1A5S1FmbGVMUHNNQXVSUHRUcHBqSXJwYTdpV2xJSy9JY2RpOG5iekczbFJMT0hFS0xPV0ppVlFNdGJFei9FbGdsMEZWMjRKUHE0Ym5Fa0Z6dk1LaHRQdTFkWTg4c2xPbGoyUUJ1cDhnKzc1ZmowK1JlbmZUek8vWmI3V2VSbHZNTjVOMzdyNmJ1T0dsOGJmSGpZMDhyNS82TCtoUENZRE9yWkFVaFJSNTd0N1lOamlZa252Q2l2RVkxVVh0TTN3Mmk0Rks5RjQxczAxaHBTSzRmNlNjTWl3N3lEVzJoNC91RkJpNW1nTVFxWmY4SmdjdG55UEo4UU4rUWNEdnRaZmFaTzJIWDAydXlPcjRXdXdNb0hocWFRMTFFTUJla2Z6RDJFd3VxbVRiMnpBNnVzdVJyZFZ2bU1jLy9GUmpzNWZCdzl2Z2JDYUozMGw4UUY5Tnk0R3FQN1hIS3VhbXdIQjV2MXVWQ2w0VkphQkdLbkczRjRyUDJLc1Q5eDFiZHJiL0RDNDM0UmxhWWU3RERCa3kvQWdSL205VWZuTGhoYmM3R3dzaWVlR0MxaC9ISG96VnZKbk1XWU1lc3VkTTR6VkVqMmcyLzh2bnFLdm1OVzIvMG5NWGhYMjZLTTZPeDhJeTVGMnBSRURWZDVxZlhWOEpwSGkvVzIzUkoyekI4UlFEN093ajBLeG9OSUoycDFjY3FsRnJsbzRFNk5aNU1pbnlERWlqSjJ6RktBZjg0NDBjdlNLSGZLY2lIRTlVS1pCWUdBTGVzY0tuNDJqVjVqS2MvNk5OWnNJYWFRQkRpVXpkUUYxZmdVUHhNcEhVWExDaWtES3FtWmFnRlZKUFZjQmFUMEhtaG1vaURNWnNXU0srYmhJZDNvejRqOWg1SGZvSUNnckliZzVwTjh6aERodWVsSUUxalJGTjBONVRNY3dRVEhMM25neENuYWFvOVNhUXNYRnl6QjRmN2dMQzBydTlsaTg1ck9PdGxQcEt3bzZvUVFiR3MrWWo0YWR2TEoyaG9zQ2lpN2ltYS96VElQeTYweEtHZUhOWkQ5M0daRkM4UGowYmIydUpZMFJiT0pxc1VIWjNRakcvV1ZiQk4ydjhLVzNTaG1oOWRYZUt4VVFuQWx0Z1IzUDR0YnQzbDdqc1VFc3pwUU50aWRuRE53VkN6ekVUYVdON1pPQ1VsbEpSK0ovaVZOVytDNDF1Smx6MndEQ1BvUTFWZEczRmdXNENKdG9tNnZCaUF5U01vSmhvYU1NMThxSmE0TStpU0gya0gxVlgwd2pkclZWKzQwUTVodmFwaEt0M2phMVdMc0NkU21MaEk0Vm4rZkVEdzZnSG5BMVNhUWJlc0czdG5tb2RUeXRZeW5iVzRTa21Kd21KU2JTYXp5cUo0WTAzbEN0d0dXa1hTODkrR2kyUmRXaUpXdkl2MmxVMDNteEVGVTZXU21LUUZydTkyLzBaRlRxQ21oQUxMNzZ0dGZjQVpPZ2g3Y3JOYXVnajhtSnBHV3E0L29aai9OTk1uVzNpa0pXNHlTN2E5eU9rNDA0ZDFWd3RRTXFrQXo1aEY5d0ZvYUY5Z0Q0OENKWlYxZzg0UERDdGNJVzlwQWZPd3R3NGVMcStEeHBkN1ZHaE4yWjlzSlhHdmlhOFF6RjF2UnphanZySFRmN0N4Qm1JdFhjaHlUK0pqZFgzb3BubTFhR3c0ZmxyWkl1REFsRlhLSU5HUko5Tm9XRFk3YUdyQUhlNWZ3ckVxbVV2VFRNYWJZeFpDNHFWcnIwMm9QM1hrZElaNm5uclZrZEZuZnhsS1FXNFVxNktKOGs4ckdwM0dCMXUvZkU2UHdSaVFDT04xNTk2ck9meDg1K0s5Y2p5K2h2MEtkbTdJWVgveG9EeXp5NzJ4T1A2MmJUcldsY3dJb0oxMHN4RXpIeFBqSkVpMldwOSs0OU5BYnplRTVqb3Jzd2NZczQxNCtFSytwT2ZBeHR1R0lkaU5OUXozR01Gcm1xdlgvZzVCUHZaYmlOK0c5SFFuWko2cEN6UGxldGZqdmlRWFcwUDVBTzh6c1h6ajBlMVlFek9mQWxEYUNnc001bkdYWW9xVi9RSkoyUGxFTitpc0FnSUE0eVkwcFc3SnZzekx3WGxGd2kvTmtnVnllVVJjVnFPS24yY2NWelljYmtFYXoyTWNLOWw2MUVaSjc2V2tuZDIzVmxzeExMVFEza0NUWXI5S1lBMWhTdldsK0JUMk8vZStuY3JwKzZDQUFEeXlsYWs0UktqcTRLRExHVm80eTUxU1pwMW92djRWQzdnZXVmOWtsUGZoMjFmVEl5Q1dSaHRidDV2RUFaYk9NbjV1bnhITTZGZ0FSeVRCRGlMSkhNNGh2NXB1eUdHZmJkSkEvV0FXemlieXkrNTRXNTJUVlFib2VFdFk3bUsxM3V5Y0JWM0dFWURIZmZZcHc0VzJIT2hROGZmZVo0WldlV0pvUTdMVis1VVl1U0g4NVJtN3JwVTQ2aysyT0RvVjR3a2hoVmRNTDA4ZDArV1hqUzRlNzVITU5zV0NQNnVLUnVSWmxNMytuQytTTU92Qk0wM3oxWG56c1U2RVk4MjJnakNSQm9Bay9oSFN1UUNnZ200Qkd1Y01XamJzRE9YYlB2VzYvRnQ0Um5oQVdIbjFFQjZHRzJET1IyYUE2UmdLeFk2NnE3WlAzY2ZzY0xwTDhJWXBIdjY0ZitEM2g1MGlDNVBoMklhUmZrYmVOUVova21xaVAwQTBzSmQrNHJkU2lMclJXVitEdW5jbGhWb3paWnRTWnlFVElvK2FKazQrRTYyM1d3UGE1VXo2eVIyeHlTM1RjbFlha1lBVnBVTzdMODg1cXZsa0ZQeTJ1aG4xY3k1dThZSDRkTWhDbUltSlJpdjhGeUdzb2swSWJvc1Z4K2RXSFJOc091dkVjbWZJSnFIckYwaXZEMEVyUktwdkNNWVh6bE0zUjZ6U1ZoMFZuRmo0UUxJS3pNVElYR3BjUDRLSkdrcFpGTTJMOURncGRabW41WUU4OStFa21ZZFA0TCs5N0V3d3YrM1RsNmI4NnEwbGkrSFB6eTZpcEtFV0pqdS8vcVcxZ3ZpSTJKaWc4WGg5MkZlMlY4SW8wM2tQTFpITkMyQ1EyK1A1M3BScW5zK1Bmc0tvdzRvd2dnVXJNWlBHY1g3TlRTUms5dXBYRVNGLzNGdENkOEFMbnZZSlhURnQ4bVJkWjZ0OWJJNXNLQ0l1RVFRL3FFNzhkSjZsWUhrNEswQ1lWS0pxVGJma0JTa2ZRN2x4dVVZY0RYK0JJSk51MWtPOEhNbjBrTW1wNm5ZNjIyZlNwUkd4M0RRY2xCMnphdDV0czJEb3JFelVmV3h3NjNJL29qczVYQ0ttNWp2MzJLQWFxVWEvTU9DY0FuMU1qMCs1TmhoQ2hsWC9DUWlUblZyWDF3RmZmcEI4SElmbTBjWDUxaGJQdXNvb1gxVjdnYTZ6RzRYdW9ZdnMrMHhIQVFqeDdEWVJENW0vUzJFNXVqUDlrNkRPTFZYemp3Unpvazl6bjBlWWVFeXBDUEFqTWdXM20yeUFGMTA3VmNBcWNEaWFBRDFWU05oQ0tMdjA0TWN2cWxCa05Gck5QWCtjZkhidzB6QTZwbE0yR08xcTRpY05GbGlHM3UwZ09mNFV0ek5xZ3VzUUtHK1BTZ3NjZFRUb0dyZXpOcVA1dFpxRnVhZzNKSXJyOFVPZ01VajZVOS8vWWUwK2YzL2hBUXVqRVUrT0pNUDFCMmNsMHNvM1pxZVNjckNoMkg1VFlKOVdVQklSOUtram9STGFQMm1JdGJiSy80QVNsMVB5UElPbStEczVXSUlnL3p0ekVQbDVHMG1FdW5tQXNKdUZmR1dQRENhNEpZeXpoU0NaNFcxTVNJT0JvQUF4RHRiRUdKTlVVN0FQSndzUDlseFUrUlRzZUlpTWI5OWxVQkRWdG5DdGFkNDBrSGdDOTAyY2JaSU5NY1BEUWg5NzhBZnZFY2VBcU1OTm5VZFl1cmFkeDBWRzZTWDRZMStmQ29PMlhTVkhmMU9uRDdMOXhPSm85MTJOdlBscENYUkcxTWovVHJDZ0FKRUNobFhDQ0w2ZjNrRHBlQ3dqVUZtaE5JVkhPQ1pZV2MwOWNENG81WGhOT09GdGpRb0N3M201aTJkbWJ3cXVaaDd5aWxZU2E2Q2lSblFkQzhYSXZQMm81MFVpbnlsZHR4Z0VxUXk5dHRKUlZjbE5aTlNSTzBWU2lFQnlXb3F3WUxjUDVxSzYycDFNc1ZUbkErNG5vZnBWdmRzc0RmSitMZ2c5aHZINUwyUEtEL3RmZWZUdURGUllqdVlpMWpMZVZKaElHUjRUOW51MEMzY2JJUUt3cEN6dCtEZU5FNlEyakFQclRmUG1ONmsremdVS2JEY3VadGlyaHF4Y1I1T0NGdzI5d01xYTJtVXFINlhvOCtpYnYxT0R0L1lKYUN0UVMzVWhMN09DNGYyTDIyTFVaR2JZKzl0NnZnUVUyY0dHUU5uaFZLSG9GWkd1QmJGZ09uSi80RDVISjlzdG9EaytuQTA5QUxsSk9LOWJlVDF1V2FmS2ZOOEtHbXJUdFJNMG56NnJTb3pBUjJOTmhmN3RoQkZvYTlrcTMwQ0g0YnlibFl5YUxJN2N0TURrQlk4dmRFdGxXb3Zwa0ZYVmthemF5d1BXUTJVVnZ1aW51Q0FiL1I4bWwvUzRydzJJTlJrVG9oZTVqTkVsaXo5UDUyWDF3dEFTbkFrZ1lXK3Q3WjlYL3lMcVhnU2RiWHdHdFVnbmtWczlzNmIrSlpGU1cyRm9KazFQOHdoQ1BLLzFzVG4zVkxJMWNtQjlleXZCaXBZMjNNYjUrbWViY0c0UzRQTUtScTQvaUNrUXZ4UDM0UDhlUFk5R3lrczNFRHpkZGx0MWNaT3M1cHp3ODNnNDd1YUFjeTBhYUNoMnY3NkVQWDZSRTdBUTJuRTFOeldiVEQyZk1vUHRhdU5GOGc0TDR5b2tGdjRpQzlUSmlkM09tNjZtdXpTYjc2Z3ZEYVZVOU1VQVFyYjh0QjZLaVJNUUNLZ21ULzc5SUlmSFgvTGpLeWU4bVk3ajZzSGg5R0VIMnlEY3N6RVlTczBFczUyWGxGR2ptM0hIMUJpSm0zVk40Z3RjNnBWSXRJT0V0aXhMNkw2N0RGYkdkbnU0WHdRMWJwN3YwRHpuTk9JSEZiV2o0djlBOFpQdXZCS1pOUnNBVzlVMkVBN0pHWE1ZcTRVc0kwUi9OZmZnSzF4N0tDZ2ppQSsrOXd4OUdSQ0RYY1NkWDZ2R0ZlbGRhR2lyOGt2WTc5ODk0dDc5YlE3aVJzaWhXVVduT1p1M0JxN2xtN2xDdHJoWnB0SzZoRUFZekFKK1FpSjJRT0FockhNNzlKb2JKV2lXZ2VmN0RnT0lZUmhQL25rTUE1cmdJeTVsdG1SWEZYdGtpejZRdzBPWVVkV0F0NXplLzFEUllaVDd1cllSYVUxeE9XUUFkSjhXYzRpSzV4aUpMM244aGNReW5XZFM0UFBUUm9JbE92OGRkdWE1elZaanJMcm1wNGlYVlh2WUY1bmxuTVhXUVdMYmY0aHV5Z2hqZC85RExQc1Zlb2JwcE5kZEp2WHFMYUh4eEpnNEpjSTFCTFYzcEtrWWpWYzRNeU50Q0t6UjlHa1JIbHE5QTQvZVg1NVhsNjUwS1cxaEJsOTBnbXRQN3RLdE03ZUpLbUo5VEpidjBuNkQ3bEg1U0UyVWpRNkhvK0ZvQjE1TzZQQ0RQYXlycXAzYkJ6aHgrVFV6QXY4MVNuamtDNEg3MjIwakg1SWFRSG5nbGJMRGRxd3Z2WUtFbHhPWVoxL1VoeElFOGF1VVBQblFiaHIxeDRlNnhsSGNrb2RIOGc2QU1LeGw3YnoyYkVJMGxXMTRDcTlGb3dBazFQYVJta3dvNmlITFF5SWxmNTNFeW9TRFVyQmV4UmRYL3ZMYTFDdGtZQTdKcnZwT3VrS0x2U2Q2TERUT1pCQlNqYnhkQkd1QktuQ0l2cVplV2VXNWpsWUVYbjAvR0syaHRjTTNpNjV4VGIySWFCVlFlYTZVTTVRdkxMWVhvc1QwdmZ6N2UreTVRZWxFbisyT3lCTnVxSTJKSUZKbUFjK29Dazk5SU1tZXlXb0I2WUZFSzFPSW9sZ1ZJNE9qSHlZNVhkbkdFSmZGY3gydk9EaEFWU2d2T1ZEZUROT1hxb0hweWlSSjZOYjdPZnNZTEh4YTFib25EaG9acW84dTZGWjNiVCtMb28zaWFpZmN1VytMeTdsaytkQTd5bXZoaGt5SmZRdXRKcmcrb0xZUFRNcmpHY2s1VVZSWjg2UkszMlhrVnFNcW9aRk9nakw0YmoxeEM5d0pCdGowMndFMlpsNFVSR3E3WmRtUlBZNmRKS3NLNGtnQTEyY1FqUDlBbjhlRXZvamxJN29qOWFPakhXZjVTNUt3Q0pPM1E1RThzcXRmNWJ0a3JLQU1hakk2eGw0NmNXWWdNYmZzWU5yNXJibVhNUHZQQmV6bkN2OW80VmFOR3NDd2tjWlIvbW9NNWJMZEpiRHYwbVUzdmUwcWpwbzhRVElZamgyVmQ2ajJCWHp4SytCMlZTZXQyZXlmRTR3bDNjRHBsM3FxbjJWRDVJaGw1S2FISlJGdzlBWEMzNTVFWVFLQk1GZERyOGdWWnRPak1GK05PeWhOZGlVaXRBcGJqdUU0eDFTc3FUM3lFL3dyVmRINXcvV1lvUUtleFc2UUpBRWJUSEVhSEluNjFmR0hJMkcxZW96cmhibWZHRUZuMS84TDhIZVNJRmQxWG5JME5wbEhhZkFZR1E3WlF6dVdQUUMzbTIxcTRSVmNtb1pwRGlxR3N6c2J2SmVkUjN1Y3JMMnJ2bFVTcFhqYXVoMFJtelkrTnlkNmZJMHBmdUN0RzNZNmdUN0dZVTZjcDRZcmExYUNXQzZIOEwzZStMOTI5VUhFd3NlZTFEVDdtdjZqd2FGakxXTURDMURFdmdTcFBVTjNoMldDYlJVQU1GR2YxVFNYYmxaOWxmOUFydk1SbUNyaWhBdktPRnVkZ1NCQXYyYjZXS05YQ2tieUZ4ZUJ2RjZHOC9KWUpqM0l4M0pMSkZuU1lXVHkzZVZDbk1ZYjdKcm5neFc1d2NPYjE4bDk2dUVmMThkaUxPaGhUUlZIZG0rMWFWanBGMXdyZFgxb2pnNHh4RmxBQkhqL2VTc3pkdkNUbGd0Zk1zR3FHbmJTV2FVNkVwTDd1YmVKRUlvTUhQMnpPVnA2V3NMRUNrcUpEWWN5ZllyVG1wSy96VXp4VTc1VHZIUXFUc0hxVlR4NXkxNmp4STd5cit6dkk3WVN1WHdhZ0IzVVdOUm0vSTB5aDBpWW9RVDRLaXVQb2FnTEpRcVZtM0lMUnB0ZFFoRXhOSVpLZDl3aCt0V09rbGhkZERDRlFJeDU1VWcvUGdsSkNOVXROMWxNVWI2U21kNkd2L2g1Y0xGdlpqMDUwei9jMU9MaWJzaDVoK1phSDFONjI5dnBmS1d0eDNFVld3SE5rMEZ0RUJyV09PNTdmZW03VTlzWHB3TG5qcFpJSEhRdE50azhVV09WbGVMQmlCOEZ2eDQ0VFRIcXdEUTBuYWpLMDZxYkkyUHMwZS9nSmhvRTJUbE94czV3VGZncFRLT29zL2dsTFp4dGJkUjFMU3prUnMvUmRqOFdMNUNRbnpUblRLQUZFT3ZIWWpnVWZQRFo1SmhZTEI1aTlJQkNObVY2cXRqZUE0M294RVlHTXROUVNyUXFPSllTUUVZYlZWQVVYR2hLT25URFAycm8zSTV4Y0VkbGtHZ0JYQ1NUN24rUVVINTNhbGpydXR5bm5uMzV0UUJIZ3JJTW44VUdMeWZvS29TZGJFelNMeFMyUUgyRXZwQUZ6YTlNNWJ4RVJQY1N5bHpVNVJWL3R5TWFZYjRnRmRQdkRPQTFRSTBMSzRSVUxRVzlzTGgwemtJdjBrNjR1TWc4aTFFRy8zWGxQd0dYeG8yTVc2bjJTdFVkeGxXR1VDbzZreWhzb2ZaY3RGbk5NRk5UQjJHSXNralVBOXlhVEJzNXYwanZrRnIyTlBtMi9JVmJlZ01CNmQvOGNWNGtObVhlT1hpK0RGL3U2Q2NMbzltUitFQWJyRjhZeHZNcDBaVHRIVWJJVUkxb0ltMFhOTExRejIwUnNmbnFoZnRDYzVFZzQ0NktBaW4xTFRPS0c3ME5MNDlyT09QK2hqNjhrZEw1QTJIajBNT2RSN1BSRzBiY0xIWHZWekJvVWJzUm4xcWN2R3IxaWMzVit5eGc0V3picFp3U0JiTjNrQmIyY21TUGlFdjZOcUduZzRpd0RLSjEvaWpKNWxLc1ZBUVhORHV4aFp0Tkc5MFBIQjBFaFJQTlZjeTZ5a3lUT0tZSzBXYjlLRXFheW5RcnRrYzVTdkd5eGNOdkZFZ3VKNmNnSk9RZDY3L2gyaFY1YW44M1M0WDcrTWNaYkdDMG0wbkZUSUswSDFBNXNHMkxiL3JWVnZPVW9vdHBWUmp3T0I1OWZ0WDVieXdYeldBQzVUR1JIdVhCRy9UM21FNXJHSE84eVBhYitUN09tR3A4ejI5MjE4Z0FTTXpzZ0tzUEFlYzF3TzJvVWt4MGQyZU5ZUWZJNHN3eDlIREpCSHRwL2trbDZ2MFR4S3krdEk5b0wwaHZ1ZC9kVElvU3pPczdqNXI2eU5neUVTVGpVYVovSFUzMjhyNWxRVmdxYTRodytUVGtVdWNxVEp0QU01M1RMdHgxcjhlTWU0cHBUWEZFdThuZmVmOG1xNlU1L0V5dWJzdXBhY3BrNUtoTjdCUEdjd0pIYU5HTXBWSnI3VTVDcXNiaFFhcTB5UnB6WWI2dmhLQ1pKQnkwUUFneTgwRDhOQkpWbUc1SUh3L2JQWUFSMncxaGsvMHhsVHI5SnN3bklYQjk1dGU2bGk5RXYvakx5YlU5KzFPcEFCSC9CeGJmckV0MVJWN3dGT3I1cUsveHZ4MkFtT0ZwMEVidjcvdVNoYjIrSkJLMUUyakx6RzRQRHZzK3NEZXdudEtYc3IvUHByUFdlQTRPRWtyek04eXI5K0YvSjlMSTZRNysxVnErUkJ2WkFWanYrV2ZqWFIwNU9pcVVnZHlxbFdoN1VSN1RKUDB0aDZoUHZFblpZVFhCRFBDUUdndTRtaHRBVFBRSDJkSWN4MW5xc3h0M2QwT0x5L0xIY0g2NmJuVC9nUGNBZXVEaDhuUHNUemFGQ1FoNmg2WXZFM09SYkRMcHJQK0QyNlRjWmxuRnRCSGk0MGNzZGJjY0JVeDBYVWEzOHdQdW96cmp6RTR1Z0lXMTBhQlRxS0c5Zk5mNHhBSGR2azVUYkhCb291WjBHY1V5Sjk1MytNTVZ4NjFmTy8xSVlwV2g4djlYN0kxUzlTNE5URXY5VDErV0h6N2NTaTdMamJNWnJ3LzhpTVR2L1ZzekQyWm9aT3FpYnBidnpjQSttTXBSMmZIWmJOV055YU9peno3MEMySVJIT1pvTUYzS3lkSEdPU0dMbHdqcWR1a2NSOVRGV1VsVHFYcUxibjBjZ3RSZmNmSnF0WEZEWGV5dFp2aHBkUi9pOHJvb1Z4RW1UVC9tTzFUbVNKVS9HM2lVNE1COVRlZDQ3UXNQTHlYcll3TUlxQ2tWaGY1STZDdExQQ3llRXlpWmtudkJrdzlSR3gxbFI5c3Q5VXp5NExVSVFKeVoyZFZvTFNMNjAzTkM1M3h6bWgzaUJSNnl4WWZTS213ZmkxREdIQUxUZlRvblNCbTRWeHZpNHpwalpKaXRLTHJpYytpY2ZXMGx6Qjh2NnpaVnpvUHUyNWNHTzlacjlKSTFOamNnanZPalcyNEduWlNQeTAweVZvcnRSeXZZK2p6aitRZldldmx4Yjg3bUFna1pRT0YrZ25vRXNPak0wVFpSRjlOeFNVaXc1bHJEdjN2UlVQZ2xyem96TE4wZDVTaXRkbUlIS0lGL0VPWGxXdGhLcUVHNllCQVhweldCZUFMUWx6SE1VSFkxdWdERFNzeS9FRmMwTVErVXJkZkloOWNQMDVEYjJHOTVVUm8rSlhHNEpsOU1UU2dkUDR6WVBJMkRhWkhQbG1ZWHprakFHODJhaE1uMXdRRVhVaXcydE1LMVJQVk5RVStsV3V0aklYWDhDcU1aMHhVRWsrREw5MGNmQWpuN1pLU1Q5S0hOZWFCaWJoaCtUcjByNTBCRUthdkd0K01aVHRQZnpTWWFRa3VHZGQwR2Rienh6T0dvVGMrTVdZOVF6VlBFMHovQllidGJOYUVMdXdXdmhjZFlUZnlNWVkvelBHU09WTGp3d2oyUHZKQzU2M1hrdTBFWW03bk5oUVUxTGtyNnNCODNHNEdXL3FRKzZ6VDNsbmR0bCtYUkVETGVKVGpsUWdnNXQ1MXAwM3YvTkZPeWNjV0s3b2MyZHB1c3dER0w5bkhqbkdrSXBKOU5zcllZbXU5RnhlcGZBRnRML2NKbW0yRk1kUjdLSEJDNDhvVkFWNXVOWXFYdWJMaG1QRW9vQkhNRmMrWWtmazBCYlhlTmlObmRCdERXb082NHcvVGUrV0l5T1JVNzJUSFNPNEw1QklHdjZ5WU9wcitpR3g3bjNOVDF0czk3VElOVTUyWFJMRktxVDBzTDhXcjNKVktLa3NXQWRTanZidWlWT2l6VU1QM3VCYXhZNGFnYXBzYjd0eUloOVUvVHpwMzJ4Rzg0U1gwNG5iSlpZNGo5ck03TG1iNDJOK093Q3A1ZUNsN2xNbTFDdlM4ZjhQdm9hdkJ0VFNKcnAxKzcrSFN5bWdQS1Jid2RvcCtGSDlFV0k2bSswWDMvS0xTVVhYVEg0N1RtbHlsTExKQ2FFUVpMSXBuL2dPTzNKK1BhcEpMNWtYKzdjakxWTW5lR202WmJvVGtRQUZDU3JBUVdWNFMrU1ZFaE5Kbk1tVVk3UWZ1eFNLYmpyVVlMWVFYeE9HVld2bUh0dlM5ZEtJZ2drY3BLR0hLZWZJd2NpUTMwOHZSRWhuRDVnU0YwZkhYOC9UMWFkK2QySjdpK3VnbE41dFJleVFZOTJOVzFsU1BaNnhqNE01WHk4UGg5NXI0UHVQb1ZsbW5GMjhVaTVqblFqU0twWlFLMi9nK2kybDR6MGNML0VUV1lnTFZXQW1Idk5iUVR5dFoyQkh2ZGNDTnBZQzdiZWIyOUpFS1JDTzJ6OFd4Z2JDWWpoZGZNUUU0R0dFVkliNDE2eElDbmNCT25QeWxyVE91QkM5ZHNrdmRIeUU3TDFxandKalZhMkQ5enhZTmRZZXlreDR1am9oYW4rd1VCcGZNVkhOZmk2UmdPbEVFSjl2a25hWDVhZlMrY0FlL21wWkpHd0NwQjdWWGZhUnVIKzZPcEdrYjZNYk96b2FIMlRoOC9LUWxwS3czS0NPb3NHUW4xMEZ2aHZ1QVJFOVBXd1A5Wjlqa21LUWZCbUFwMnlOYTM3NERPVzd4RTB3SUkzdmNTNmJkNGUwVE13emltVE1iVDZUVUVZamc3YWpobC9tV0FlUXovZEs4VW1xSURxZTYvOUgrUFlpbFY2ZTJVeUJqeHJVYkFxalJyU3R5eWFYd0xRdDBPbmxtMzNmZ2Q0Ull2VTNndjlOejF5cDd0QWNYSXAxR2lPUStOOTA0Vkp3L1k4a2hFeEZYVjdEWXlIV1pkRGExUmY3dmZzTFBLekRjZXF6bEZLMVdINFd2aSsvWXFaZjV3Nmg4KzRINWM4VnY2bXV1K1pUYlUwdzF4SnJUSmtoSkc4RmxoTFJmajJjbGFUMnhPdG5xTnNadkx2N3l1WS84Q1hzQU9yYjRwbUhxSHNqZ0lyS3RxRlI1eTY2aW5pOHNlOHRuNHJSc2ZxNW1ORDVPVmhyYnJwbmlweFR6bjV3K0hsU2RMU0hhWGpZTnRnVlNOMFBmWm5tc2t5TURUVnU5TE1ZMmtxTEl3c2doZ3cxMThTc1dNSFpVWVZiUmlWRjFDNkQ2a1kxbXkzeDdteGRocFlQM3FKbVFqU3ZTZkU3ak5QZnVLRGI4MnhBM25DNXk4SVdQbzQ3QkJFdmtCOHlwcDBWY1pSdElaUjc2b0RaUzdxRFcxUFlpa01wM3hYaWZSYzloWVNzeitaTk5lT2NhWTU1eUdtSDAxbVN6V3YwbmNTWkVranRhTHF6ak1yd0NtZlhHa1EyK0hpTGVPTWhkSGZ3R3BxRnJhM3lkdVVyU2dWMmhWZ25nSjhGaU0wQiszWGpVTm41Q1BFSThZcitkYU5DS1h0c3FzaXF4MUw2UjRZc2txM1NiN2M3amVXU1gxSFhkeHZ4dlZDVGxrTm5UTnBqK0ZhSktoMGJPR3dqaktWMXBCOE1CYzEvc1owUnFzTHFKdDVsN1drSXh0MWtEeGVWQU9tYjFUcTFXa2hIbUVPUDdZQVIreW5ZYzlpaXdYdGZseDJBU2FhZUx1SU0xOEd3SWNrVk5ob0RJa3VnNlhEVGJvY0VhZkZDbkl2TkRKbFY4SksvS0p1anowV3IyWXNEN3ZybHVxSytGN3UyTU42QXgyeTZsWU5TVzNnblpwYVFNZkFOaVlmRk1xSjM1WUQxTGswSVBSRThFTmtsMUlrMEFuVk1mQ0tjNmYraXMxc0t1RVN1d2luUmdhU3JmR2RLRGQxVDFkelg3N1E2K3FyY1d2Z0NjY3d3NytiaURHZFdZcmtvNGw4MDBjZ1pvQy9VaHM2T0huYXB2WGM1QTNRcTF3eVgvMUE4WWRzK2d1eXR0SitGcHU0S01vdFhJYzVjYzNSK2doSDJNMXNydzJZQmRlUzNCMXFYemFseTRNa0wwblFlclJyYWNyOW5LYTdtQUd2QWxiU3Fsc1lvWXh5dkF6cVRVN2YxODNWbVV5a3B1UGVvdVA4S2RhSS9nTGd5bUVJV2JDV2IycDhKQ3NwMHdTeE5iUVBFMk1xM2c1VG41ZlQyZnpaTzlUbE03NHNPQXl2N0NNVjU4aXIyaVpyYlFPRXJ6djJSRUJMa1dhWWdtRytuOUpRaFlaVEhSL0puN1Z2R3RwbkF3MDhuUkowd0Y5SXRNUGZVVVZMeXFORWJJYjhKdTFiVE05cXVPL1k3enEzamRMT1BHTGVqdmMwWkRVeGxuTFpvU1dsWWJEbW5xMXlSREhLb2d5NGJpeTJCaFVDSDQ1Z0Y1aUxwd3pxdEtZYUZzSHp2SjkxSlVaWElNL2dGS3VXRkFqL3pzMlF1bjZYTGNRbXdaSzhIWnlUYzhrTnZ1Wmh1ZFpsYy8zMU9zWVBBT2hMbUY0dVEzeTFXTXZYVXZ4V2lPN3AzSDZWQlVRcUplb1FCSDZ2UzRoZjYraElnMElDbVFIMm5nVmxobG1YbU5OZXQ2dHRMcW5PTFgxVnBnaXZLVnh2aGtoalMyNVNrOXhVNk9NblVZU3VpSWhudFJydXBEamdRWnl3M21yaHRKclJuNXB6TENob3pSOEpUMnEreDVTenVaUllnLzJoUDlCNEs2MFVPVHFvY1d4NWllOWJhZE41WnlzVkZsUXVVUzNXMVpEV1B6RC9ZcS8yRENhRnBKQ29jOE9wMExZTHFodXNMMzQrVk5ZS0tVbGJRek13R3pRUFRta0txaGRxMmlLUG53OHV1Q2l5NDZ5Z0NTOGlWVWEwT293UEVodzNKczJuR0R1NWZHdGJSWkRvU1ZESjlXclZwV0gxZHVUS3U5VmNwK2lzbkw2V2dzTWkwaHV5dUJ1eDBoOEc5d2tDUTFwTzVZK2VKS3Z4dmVKU1B5SXlZSHNuMlhOcTVtRlBuVVFHZDQxakVyczhvQ0x0TFFpVEtuTkE3RW5wSlFNSmN3S3FieWV5Z0NqWjFFOWc2enZ1eTV1Q25SSTVOcG5acjdGTExhOTZYdUdmTzE3SHNoTHlCSjVkOWlSaHl5YVplckJFYldzZ1lYcUd1c1czUVVlc1Q2UXM4UVJSTk40bHB0MHZucDNJckk5anM0Y0NsKzQrZ3lMY2s0cktnSXBCMENMNTcxTnI1emI3VERSYmNkWjZnMExtY2RrWTN3bXBrNGVCeW04LzFOWHdZL1p3dVhKS3RBb3Nid2lMTWt1TGJzSnNVMEx5YWo3a2J0bU5TNlc3aWM0ZFdMK2l4UllWbGtQTzFQMTdrTDRNQU56SzZYb0Z1a1JnRStDK0tnUExxcnFBZmdIV2JsM2twYWZ3eXIzMm1GbkI3VkhVNHlmUkRQZHVoMXUzQVV6WmtkbkZvWlFYS3Fla00ybHI4eW9Lb3VUNXBxdmgyQ256MHFMSFJxVkdRYkMwazdRZDJBSlJSZ3pveUZkTWErQU5KUHFJOUlBY3Z5ejhLWU85ZTgrWEg2MUdONTN5enFuOWdiUDFMQTErVjhBZUpLa2tRbS9LeXZzUzFJbE96VW9nWXdTeTVaWTJPYmdPS3FRc043dGJ4NU5ad1hhdTZLN1BvL0R2M0J6dzV3T2VsNkFSZEpjQ1ZhUzJYRVMwOHUycHBxVVFPSlh2Y3RnTk94YXB4eU5pM2NPWUtRREYrR0hBeE1rL3dRMWpwTEhseldJUndSR1hkUjVnUzVKYm1ZSHQ0dWc5T0tkUk1iYXFjMFBrdVhYME9UODRUbGs5R3FzY3dsSkJwUERiWm9GQlRyaXB2d2hJNmVKZnZZWnk1LzJqUmFKc1JmNzl4cHM1UG9uNHFJNHR4RFplQWxxYzFHT0dhSC9ZN21sc0ZKTHl0WG4yTmZ5QUtIRUxNY08vaDh5SjAxOXJGT2Urbng3ZGtQNnBuQ2ZJbGhzS2cyQWdqd25EWXB2bE1lVDlIa3duMmY3SGkyQUsyYlFKdkhqMUJ2QXUraWYwblQ3K2ROdFpJM1k5T1NuRHZoSVNFMHkxWDAyMm96SVNIQkdyVmI1elBuN0NiUHFtOGsvcEFlTnBqMjdKL2d3MkRUdHJOTXM4a3BlTEpHVlRHNm92bUI2VFNHL1ZVMFdiUnY2QXQ1V3h2WXpKdE9PYVFzdEVDNXBBSVF2M2RPVHRmQU5HMXFBZUMxRjlyYjVuWCtQejNyQnAzYy9DZkZjclNnWjJQSGFjSE9NOWtueks4U09xcWxQRkNvSmN1S3IyWkRMbDBCQzhqL3NCYVVuMTdZbWRPRCtHVUR5NGt1ZDRiVTIvTXNRY0l2eE5uQVM0aW1pTmNpd2w5TzhlQ1RlUlpHWi9WRTg0WHh4ZkQxQkMrNDMrQWYxK2xuUk1xVjBtOWhkeDY4TnFOWU9udyt0R3pvK3ZQdW9hMTRPN2tqY2UxZWFFd2ZsdVhOaGEzMUdIR0Njbk9DbVllZDdwSWQ4ZDdSRSszQ3R0cGk0UkJWcFo3b0F4T1lsS1lCUGJKUFp1NWVEdHFSMThqN1B4ZHVBK3l6ZWhrSXdCTzFpWVJVQXE3VnhrWC9ITUJDd3crMmdzM25URm14V1NQM2RaazZGRU1vRzZpSDRSM0tGL1V0QWk2RVVqRVVGTjhIYjRaalh5RmY2L056VktibkVtd0thbXJ6OGRjdjlPenI5ckZnMG82QjRHalBTRGZTVEpxdHBPa1NNYWtYNE5JeHo1c2Q0dFZKdzBvSis3cXBUdHE4T2ZyLzFUa0wvTlBrQmJLTkdzbEpSd252U0ZNbDFpeFBDMm9QZzFVRGtzaHMxTTVCSlpNbDJqUlp3bU9WNEpMV3ZFaUJBL2NuMDJJUHpLNGw1ZUJKWGF0MDZDcHMrcFhMdW5YcTlLbzVIRFRkK1BVM2dJc3Q2KzJxUXVZQTdVODYyc0h5NEp4ZnR0NWRFTDh6ZlpLam9YMVVtQ2k2UFRBYjhNZG83UHcvaE5QbDVqWnYyTEc5Nm5HeUltRkpTaForMWM0c1Q2TTdNaldqRHpnVHlyMnRjakFMODhrQzJFTlRDSnVNUjl5ZUlXOUt3RExTUlRYYmdoY2N5N2NVTkl3SHlHZEo0U1pmQ2wxbFJKZ1J1dnVuc1FOUjRSUzVUMkVodmp6TW5xZTNrVWtsY0F2N0xCNXByai9IZXBoSm94OEtNa1JRbXNlU2wzQjZZUENyU1puaHNwM215OVN3U1F0MEgzS1hPdEpLU0dkdDFlQ2VoZUg4UkczWTIveTRKaXhJb2VDcWN4RUcvNDVob29oUG1FOFVoR1l1UmJIRWxLbXA2cEs5eHNqZk9GNGdabDRKSmJ6YzNnSUNxdGpEMEY3dy9TSGJwVndIYTgxMWxDKzUyYVZxalJ3UVRYVEF2eHc0STNSbEtQUlplUnp3VGhJajd0Nkh1S2ZEbTdVaTczeWxQWFVZNitMak5GM2JRckxFMmttMlZLUXc4NFByUmlRN0k3WEh5cXNUWW5NdG5ZSDQzYVJFMDJrbXI1b3RFR05vb1luV01aUVRISWNiME9ZTU9qY1JUMzI3TDNwNlhwc1h6NmVTdzlmOXU3N256Qk12L09raFcvZ0F0VTFBTjZ3WmgyVkY4R09UZ3hCbW1qVjZoSzE1T0l4QTZ2ZkZXRzBLSGxLdmpBQW5VRXd0ZDFwV1lXRGM5K3RrTTlHMjJEQzd5emZsVXFKVFNJVWNhSjNtcTZ1ZXEydHUzSmJ3ZXo0eEI0ZWRRdlFGZ1J1K2w1VTk2Y2RtM1Jhb0dyQTZZVk5lK3VEaGJ0cUk1bklXRS8zay9HUGdPTmpoVjlZZW9wYkEzWEl5T0VtZXRwVU9ZQkdDcUR4VDZzdWhtWXJRcjVwTlFnV2VMNXJvNi9qQyt1alJJWDRaZENSTlpvWHV2OGtVVDRYNW5QVU1DamVYb2pzYVBzaEdMVWxXZWtuTm9pWkhXZGtOZ2lFVm50TkZSek5sOXJlQ3llUlVZWTRDQTZhTC9ZVEE0MEs4eDd3aXhFK0FLcGlmSHRqQU1uN2pCL0xyMGFxZ1pzV1lYajk4SVFLUFo4cUhKRTd1RGFNRTJGWFVRRFp1K0czbkdlMFJBaUdlT0hlbXZaRktQTzFUcVNiSmUvRjVsbkE4Y1RETE0xSFVyTGJHc2loSUtEUFRPeTM4cE9EcmdNVFNaKzJra2lmcjQ4dFZBeFNWbmFUT2dwYmloS0czOUppMmxLNThJUFY1LzBpNXRRQzZQbi9rVXlXVnJwTEluVW5IbkJucWhvMGhRaWc0TTFJdHJzSXpmcDZGenhTWHRDYXBDY1BCMTBJN3hRSldVb3BZR3haUnF5bzhFRXFmcWZJZWpFbDUxcTh5SE9saU1uUEZwOC9ZSkVMVG5ILzJ6c2FkNTA0TFoyTEcwTkljR3p1Qm01anlYTWJqMFdubEZtaytGQkVMN0Q3QmhLWHVlVWdBN0NBWEt0YXp1ekF2QXpSQlNCRmVvUE9GbWovOFE1bmErWFUwY0NsVTlOMi81ekhsWmlkN2wyMG9uc05ETnRNQXlBanBEZnpxMG9iYm9INy9pZ1RIMDBBdHRuYnJYTHpSSjVhS2xnL3QzUllPNUZjWEpPNVpIOERXVWYvOFByTFF4TkVqQ1ZnelRUMURNVFV1aGV6bXJIVkQ3L1dYaVlQR2E2SGZWZ0p2WlM3S1A5d2JaR1lFZS95RC9MYWZNTlZ5akRaOURZNmdFS2lYWVhjNUxaUXBJMU5XWVY0cElJa2xOVDRtZHdFNG8yNHNmaHBEeFNMekIySnVPU203dk51a1RhSzRVM3ZiVGNNMys3c2RVckRPUklNZ253TUVGVVFmelNadXFFUVFBTm5teGZCYmJrVHdXM0h1YmJ5SnZSUEJtNkNtb0w1R1ZsOERzSFhvV29raWIzcVNUSE9rOEljWlVnVjhkZEQ2aS9URVJGSzlnalRHMThMOGRqdSs0eDgxVkdpY05Kb0tGcXY5ekNSTUdVRU9WVkNaa0FwdTBrOEovVG82Sm5BbzI4UXoxclpCd2s3R0xuRUVEcEZEQS94ckx4NEVjS1pGN29ZSlhCTGN3NFpJRVAxNW5icVBnZm9ueHE2ZGZsZm5OQktrZkJMZWNoa1d3cWZFK3dVZnltbW1WS1BLRVV2c3NyZU5QdVdGUXZxODh3Y1ROQnlCdGM0M0ViZWFOYi9OUlpya2Z0elRBbHgxc05QdllsaU1qNWowTDk3VkVHNitVZTF4YUtWYVZLblV6NzkzVTBocFpmRVFBWVpKS1hlb0dSbkxNWWtvMDNWVGtnRU5zVkoyWkw5WHlpd0dUS2JYSkZieEJqdGVmcFVSUE9WSkU4bi9wNnBQZmhqeTdWWjFDSU1CYjFtald4RUIyWVgreVB4L29qQWY0Sk4xcS9rZ1h0R2xRbWtDZW9STm1oUlFEWmlGcUJsZDUzMkEzaDdWUGUybURaa0tXSmxlV2d1WEg1bDgzNFZJcXkyRXJTUElkZ1Zva1B0aEdxalJZejRnYzlPVVp1cjR2NWk4NFViRUREVU9vRm5lVW53Y1dld1RMVDU4VUJIZ1dPY1NLK2pKZWhpYWc2aHJTSXZxdG1OVjduUm5TL2lOcWl4Sk1JdWtpR01VVTFyMkhFYlVFSVBpdDhFM1VlVVdxRE1OY0hSYjBDWE9PdGRZUFhNYmtZZHY2d2IwWUx0clU3dDR2R1dMUFcyWVhobWR0YkhtQWw0S3dRYUZaaGxsdnc2OHovVG5VN25DRzFUdGtDQzdna0FCVVBCRTZJODBmbkRrM3kyLzk4c2oxc3dqTUR1Z1VjR2NFeVVxeTdBZ1JLcythcEpiNHE4MXNySFNGd0JXZElYdlhDVTZtNkVub0JvSFM3NjBIT1dsTlNnbXNpSzl0OGJsMVpWdlRQM3RZSkhXNW9ndk90eFk2aCtkRFlPajQ1WkFNYXY1RFd2WWlIMEZwblhRR3dZUGt4ZU9KSERLdG03OGhXMTFrMDVKbDBtK242RGoyT3BjWEQ3aExBOHVZMEk4MjVIOVJ0Qnk4NEVCMVplZExab0hVQVF3elBLakw5NiswbU5ncmJCcW16VDVqOXdCTDJPWlhiNlFGRFcxSHZReGRxTno1ZG9HZ0ZuRGFJdys1VGV4REFGWWxSdG1Qc3BaampSWXhCWFVNRUFReEZpcFpTRVYwMEE5TUZRaGJJdTNxNS9ITmxNUVpWOUZHaTltcS9hZm9UMldLY25TWEZ6aEpmbmlZWmI1Snpkc3cxSnFEWTVoNTZpSnoya2VhaEQvUTdTZVVDclJCUHB6a1BMTU93L3hMOGdvNWdoWTlkampGa0ROZEJiSjNMN1p4Q2JyenNZS2UzMXM3Z1QvNW1Iay9sSU9hejR1ZEFZY0U5Rkk5TjF0d1JUSjlXTWdXMlMyZkNzZUxqbTNlZGxEeWdFR1UxTi92QTJscG1sbWFON0J6d0toYjRmQncwNW9RUkY1Y3h3RjAweXRMMEdpblJQTjFJcXBBVkdoa1BpZ2J0VEJpeTh6RWJwcXQ1N2V6cUZtZFVXTEh2aVJ0NDlOdnc2OFNQalZTL3pjY2dvcHZUU05Ca1JKOUJiaHRFZGpDNUd3cGkxOVVBV2RjUEl3SjVqSGpNZnR1VWVHMFV5bFVBV3hFdy9HK21uMTREUmZCUTRZNG9PQkhvVndFdkN3TmpPVnZVRXJUOStZaElsaUIvRWxKMi9iZjlBcEcreVFMUUMyTE4wME1FeE5Xa3JtWjBYSjVPODFoSHdkMDJkTGhTNGx6QUtCdWJDMS9kYitaTXpyUDNXL3IxN3VWd2lpL2UrS01Kb2JublN3OTA0WDYvWGt4VURuNVVieFRVZ3hWYTI5Q0ZlaFhiNitpT2RxWnJQd21UbW94WkQrSGMwN3BCblBJczhRMjd0MUFrSWlORTNSSndhY2MrbkNkak1PZWNxL0tGZHYzSTVNbDBtUGhQUUZyU1d5SW1kTXhSclZWSlZhQlJ4Vlc2Slk1M244eXdJZmVhRk40RVo1UWpTN1p3bStzSThKY3NGSm9BbTFCb0kzUDg0Z1F4ZGhiU3ZHT3cydjNCMWMzUE55U0srVFR5VW5BUGpKdHpZTjBtcFBZUmRQT0lEZHp4MVN3VSsvUTZnUUpaTTA0aU1wS25ncThEUGd2U3FicWQxRm9hdnRoWXVUYUk5d2tqSE5MRUlQdWhtdjdBcjhyaCszdkxOSFlUWmtWRmRuY2luSHhoaUZWYzdzQ1BZNko0TGFLRmJxOEw0OWY5M1pRd3BwSWh2NnF6SUl0MG94a0pkTzZ1bThCYk1DVXpRcDUvY0g0c3pGRDRUUjMyOEtXR1RkR1Ayd3N3MVNuSXNiMHErUUtreWdEOGI5bVlwZmZQRzUxUjd1NGZha1BjUjNLZyt6Z1ZOc2hoTW16VUVDL3gvNCs1L1lZdXBzR2owMnFtVVo2MnlsUkJ6am00eFpBZnU3UUxBR3hheHpZdzVwNW94bks3Z2lKREcydC9VTWsyemg3Sk55a3lOTGc0NGZrYUlJd21waFZzM3hBUG02cVNOL2RtZlN5S0krVWVqUDlBZVQ1RisrandKL0EvaHJsc0hSK3pNbGdyemRMQ1NRSjVYSFdHZkhNTzVWckdXc2pWQzhVRk5nazRmZ2tvSXpxU3gxS3oxOFRkd3Z5WXhTZStUZWw0LzZsK1JYTFp5bVB0eVlWbUxmaUFKOU52djR5QkhSN1VKU2FZREQxaUNUWFUvdHBvcWlMTXRqTVltQk5tc29hTlc0RWtxaGMzVlp3MnVuemJhVjZjRmdscVVDcU9IMDZ0bWZ2RW1hbG4weDJVUzlTU1M1UENDemhyelkxMXFWdml0T1YrSkhld1NlM21LbDN1SjJ0eGc2emt6V1hrU1lSWFZJelNCMU81TXBWZmpQZFFsOExWdVZ5R3ViZUI0dXZ2TFhCUi9zYVkzWFlmNDFnUUtrVkQzQTVsZldVNldYZTlMUVVLUEFnNVYxZExDWGZYSE5ZNWlaNE1tM3JDdHVkMXR4eHdPNHV6Q0pVb2VGTHRNaDlFQSsrZUVaQ0N3OVNEem9DakhpWlllOGZzc0dLRWc5MVFuZkd4aFdGN3FaVWdTZDN6N3lDVUJWa1BYL0V3aGNYRGFPN0VUbDV2eEliUXBaRm1yQUJxOVYvMWxNT0tlZC9MRWtsc3VRR0xKZ004c2F5VzQvRytrYkQ1SzczYi9Ka0thREVRcE4zZVRIaVBZaHJiNHYxNEdSUE11N3F1WW1ReE1JSEpEeHNvbzV6b0x0WHdrQnM5TFhqK2IrZWZ5a1JVc2ZuMCtVYitKQUlEeW9pM0cvbXhCSHZUOGhrN0h4RUlyU1I1UzBFUm5rR3RGYnJTWHlkVjlIbjNXdUxDcHhQVFpCeCtRVVU0QW9CdnJsakt2ek5vQXRzNGNvYXhQMDhsNEljbEpjZW94ejkxQit1dDliRHBBUUoyNDI2K1dzOUplb0U4ZmY3QzkxbndRbHpaa0w3a0REQlBBTEJRMlEwZ2pNSXhsS1ArT2JFOU9rNW0zZE1mWnZ3ZmRhZ1VTV1RSNitGazNhMlZ3Q2RCRXhhTEpWNk1Sa1BPNnBhTVJDUUQ2UEhaRHdLMXVnZHhBTGFlNzJHb0VMT3paamR2akd2YjZnMVU3dHhxK2E2Nk1iaTBsWWE3RmlIQXNSRjM0WmFGL0lNYTE2TGZpaUNhODhSbnhNZEtiNTZobzNwSXk4c0hUalZDRGlYMlh6WGJ1NnN4MWZsb0c0cGt4dk1YVGZwMXNCQ3psQ1g0ampLZndNaHJqV3crTXBCU2YxaFpVMTBIZU1JbHBZeHRNclJNY0NzSTMxd0RvcmpIMitTY0JNeXU0Vi9oRUMwZEg3SmpESCtxSmZMd3NzbHpkMjdBVEFrNE0yYnkyc3hJU3NxZk9mT2hUMUJSdzdCUDhNS3RoMW13bzZFUDFTMFJWMXNFY2JaeThlVDE4RWExVVRLb2hlQ0VIZVp4bE1uR0dUYmlKaXJ4OEw3c3EybXk1cTlDMGtTdEcycHA5a2ZZQmxFRGpDMzBNbUFTUHR0N0pPL0MzejlxSHRWck5KZVVRYlR6S3ZyVzVPb2VReEZ0WXYzeXRBNW9JN0VnWmNWa0RpYW54cGt3TStRSlBRTHBpTlprRUpUWnYyZ3JqZVVHWC9iRTlUaXpEaXJ3dUpKbFdLVGk1aGo5Z0g2YmlxakQ5S0w0TWFuN3M5alRjNDIyekNaMnZTTGwrNG4xNGIzMy9oMUdNOTBHMlRPU0kwVXJKSFZRaHBPYVZhMHNUNnZITkplQ3ZvV1duVlBwdXVZYndqbEY2U2I3c0JLYUVERTkxbXdsMlAyV1ZOWjN5V2Z4MDZZZk1XaC92SHJrYmlpcmRibGFnU0N0dUxMMHlvVUs1QTFsNUlpQVBtaG5hTnZ0RG10VlJieXlOWExIVXJsZzlUZnl6ZmxiZFJzeXZFM29OVTJ3c1l3dDAxbnJ5VHVlbTBQQzgrUGlXemVFNXJnRFVuV29mVS9mWWVTVHB2czViMXdSL1dvWjlwOWx5NlNlSkZwUUM3TVMxSFhuQmgrQ0pYOXdaK0d2UnU4Zzh3dFU2R29peTRITEdIaTUvUmJEK3BaQzBhZmdlTHk0Qll5L3R1RWZ3UUpWRHlVWGFhLzl6a1pKR2NhcnFtSTQ5TFptZFlVNlpwUU9jeGxlbzl6VjQ0SkV0anFUOEducHBIM240SmRmOVRGRStjeXBkL01QRk9LUzZ6TkFiZUwwNlo2TEdrOU9KL3dtSFRPVS85QVVYMlA1aHlqdHVsV2FreTlsOHJ5N0ZJZWxyMFVSV082RDFXTnBQcm5Nd3g5T25lak9IUC9LK0R1aXNWZkZMRG1JTjJIQmtZV2lOWFVoYzZEcW5wSHFhZGtaVE1WV3RpTUk4aDJRZzByZkZQamdjdHBYV3FVeVNFVmcrTC9hL2NWS0ZyTjREbHphTkdrdElQRE1JcWdibFF2dTU2NDhmOWFyWTcya3dUOGo5di9XVWMweU50ZUU0a2t4akdMLzFiYkcvRVlaaEluNU9keGpUR2NpcmViNC8xcVROLzVZVGRTQkkzRks4ZHRIUk9hL0g5eHhDdnRQWHB0a29BUFlYVWNGZ1pEcmdkQUFtajZqZHFiVy9kQzh0ZmZmbGtUWlVoQmNGWm84MnRVQ04rZnN6a1lFNFRDTXp2UFFTN21RNUI3YjF6U2FSRWw2M2dHZXZ3L1hyVnU4eFlYT3J3dTRXdi9PQ2N0Y2R2ZUM4ME1jOGxMMU9yUHE0RmdKVWgrRmJIejdoNkVjTVExaFg2Z1liajY1dno2cGk5Z3Iya3pYM1MrUklZOXNrNFlXYURxZHJqdE52b2JCbnhhZ0NObW1uRDRYeDRsTklJbmlDUU01dUJjK0xwWnc1aEZ5N3EwaG5DdmgyeVpwQ3Y1a0NPSDdWaXFySkY0ZDluY3Uvb1hzRUhZU1BCQTg3MlRWRWpveFJ1VWVqcHZGQXNjMGhCVEpjejNITmdLNnVKOTljSFFyRDJPV2xZTERranBFemM0d1NjdFRJZ2RnMUVoUVFlc1g0MmhJQm9yL0RtRHNMU29WZ1E4cDI2YUovWUMvMittNWt0QXpUTWg5bFo5cDJ5RytpcGpQNmJZSGFQNEd2OUtpSXcvaXc0SlF1NGZJcGZkSG91WHhZYzNJaUhCWmZOWnlQaEJHdWtHOU1hNVhKVHlwTGg4eGg3RFVkd09kaURjeEx3a1FVN3FXSnFqTDFRVTZkWnZTM1ZXQ3NDNkpRNGVmY2xmdkNGTi8ySWhQQUdTcDlFczNoNWRISDNYRmFnMEZHUzEzRTU0SC9wOExwRDgxcXRPUSsxbkVPRGs3Y2RsalQ2aStHSFV6bnFuZnI0dS9TYStGRkhueUZndTB6TGFYQ1NnVTZMOXMvOXZzM0RNR2Q4bE1Dc0ViTW1uOXhMOTdRNGNhNXZ6emIreEFwaXpWVTdGcENudnRZMkduVFNGUDYwa1l2Rk1meCtJSlJ3V1k3eVNWM3MrSHY1R3NYQmhMNkhoVHJKZXFVdGJmR25mT1UyV2VUemtSbG1aNW8yYVg2TkZHN09EUkd4dmxlSm5GUjErWFJ6Smt1bDlaLzh6UTdNdURzMUZkSFVPd3FQcXhjNVo1ajZIM2NYNHZIdTV1d0VpSWgwUW9wUmVjNmFEVjUyN0Y1ekJzRUE5MEcxM3piWGdOMkNnK2d1SythYnMycjhxbFVpRXhPUVVGQ3ZGZ3hjWWNLTXg3VEdaZWJDZGhvL3VwRDgyNU94TTBOK2p6N1pQSmVMZnJIL0U4R1Q2UkRVWVduK1hNUURlczZQVlpqN3Q2dmpQUWNiRWhTSVBFZHVlSFI0bG14WFFQME8zWTloYmV5STcyQ0V6L0xQT084a1krWGh4V0VRZmRLRkI3R0k2c1RvVzRxTHFGTHJaTklOMCtUUitJYWoxZkxLM3d1b2RLOUphRi93MFczekkxczR0aElKUzBIRm1kVFFzNC81K0ZlMzVvTDhBSWlsSVdwSGJrMk9reE5KQUpkRU5weGlFOVlwaHVNblkwYjNaWHlkZnhhc1ZRbjhXL0Q2aWFUN1ZiTlBkR0FnL2taNUJlaS93ZGE2N1FLY01ISEpXams2TVBpN2Eyb0NWUmtBV2xzci9KdjVvZWwyTnM1R3Nhc0pJZU8zT1d1dFlMM3lWYnowdzFiTE1IUjRUK1gzbXNOL2ZreWNEb1p3WWZRVkRJYXJIVTZ1dGV6U29tZERjZEhSbUxxN1BnSDIremtPVVdWaVFQcVJUbFhqODF5cnVvL2ljSDFnNnFWdDlEc1c3TS93RUZDSWZCQjJQNGZ2VWU3YWNwS3ZwaHJ1MmJhT1poaWNqOW5CWUtRUTl1VGx6Z01CdmJXUnFUdUQ3bGZKK0FJYnNKNEF5cjh6OG14dE9EMjc0bVg3aE9qUDdmRTJta2x0ZHhzME1uUitjMzdPUXdmcHJuRmZGb2duZi8xTzcvUTFpM0s4VXdWbHBzUDhVbXYzcVhBZTZFRnRNSG1wUEtDVWVWWEhveVVZMEd6cnZXTkpqUk9CZVpXNUFFdjUyQjlWdlpSOGtFaGhrVXhTRkRkTGlVRGhrcVZPcU5acGdWdXFEREhnbSt5aE1hMjl0dFlIaktUZ0hNY2ttd0x0ZzU0UkR2LzhHQTNIOVBKZk8rRVBFYkt2M3BsTEZQNlY2UUFNMjVRcWIvMFdVTVY5TFR6VmVoUlduOG4xZUpQMEFkcUpEYXJTM0RjUmd6bGErRnkrVncvTlhNZjlUTmdSS0pyUVJxdVl1cWVGY084WmhLT05oQmtwdW9Nd2lOaC9BSzJSQkNObzJmMjFWbmdhUHFEQk02NGVMWGtGemhLREdyZ0VLSDA0V1Y1Y3R1aHp4S29WRTdqQnZOQU0zQ1N2dnZ3My9SK3FScys2VkpGcE93OGZXRXE1aTg1MWo3b0tLWGtFcURHQnU2ZENLVUd5QTUvQVd6QTdjbWMvV0dMV2NSUzNiS2ZsdFY5MmhNc1EvWkJTRlZadk1mT2dZNndmU3hVa3FOcG9ML2kvdWJrdERUejljOVQ2bmQ0aEdzQnp3dkxPRXJMWnB1OWtqT3JPcFVlK01GRzJsTCtBcmliWFd6bmpxZzBYRjQwUHlQZTBwaFk0d0ZHVW9YNy9GN3N3a1QwL0tHc2N4cHp6d0hJR3F6Skh1a1VKeWlzOEpuRU5FbllLNDBldE5QTU5MbkprakZSWmlCNG10aEIxNnJiYS9oTTdBYWwxalkvTXZNdnVTbFNIVFNkRVRiYU9kTWRXdzhkd2FhQ3J1cmg0cVFaNzNYN0VzL3gxMWJ0YVBuMFdNa2dZWmdYQTA5M1U4VUhUMk5qU2xJQStOcXl6UmpjZk9rUGJlWm8ybi8wNXBPTjVWNGlJWGNXTUgwSmNFUmZDTURHejRaa2tWVHZROHpZTnhqMEZneXIzbHVURllkMEd3NThQRllKYWl5cm5ONnBrWVhvVURzQy94WHJ1MWhYanlsdW1kWnM3b1ZPWTBEZWhXeWdua0p3UHFZcFdLQ3RZTnp5eEZySEtYRXFXOWdqZ3p2cnkwdHg0eEtteHJrYWF1NE1iUnRqN29GRkp5SWNRMWVjZ3I4ZHNtWEZZZlNGcks1OTYrOExaZWc5L2pWT0hBVGZyZDF5N3puRU5QNUNGWTdXVEd6RUdFUWxUL2crS3dYaHVKa3dWMWsyZ2M5eGdxay9SRldmek55TzhHbVlVQ1BTNXZwOTRrcGpTY05rM3hrYjExQlFVL2V6V0pyOUVHdEpDdHMvdkpqUHBWR0UxaGVERWlBZnE1elVVL3k3eHdRcXk3cXEvdjFjVFJ6eFF0SnhaeW13ZVBDUVIwMHAwUGI5NmZyK05XTS93aHFzMGkwZGZOSVd6S2NnUS80WjlCWTVIbTFUK3RvZUI5dWdtdDh6OFd2TGRSZXFZcHJ0dWs0T2hoTUo1aFVteThIN3FHa0ZkeER4clgwcDUzKzBieTBlSjFCTUlzMDExNG1NYkUzdGNxc0NTWVlwNUVDQ0IzY0tMemZoaU1qa1RWMlBDenV0czVsVE9INkt5ZzNibnF1cVB4ZEgyWnFaNHk3UUtuOUlYbjE3eFZpTHR4RTZ3TWZYMFVQQUlIQ3c3M0huTnRuY1M3UFZxdzRkOEdnY21rTExhL0JRVDdQazU2OGhQZ0l0dGF0RTI4MmU0ZmwxT2tyNmdGVW9kR21yNTltcHJRbEp6TGhJTlladURZa2RpbFZqdW53SnVPVFR1WWFaalU2NGF3dHRiMDlLZmVxdGJjREsrdGdQUmJSQUNsaUwxWm5DemcrUlh6Z1hsenZFbTlWWXNPMWxGYVdsbjJXWXUyNFBJZzZhVk1ZTGdtSnNmbHp4NTB1Yll4dXBWSmtqWDl4SExESks5QmZkT29vYnYxMk1RMUhsOGpodndBU0xzRGVGS2JDY2UyTDZnbzJVeUcyM3pWeXRNeDAyVUhBeXdMdXVreGZCRk9PdWlxQS8zV093TkZGY3gvdDhPZVlnM2FOTGgrWXpvV25sZ2haRkZ5RHZKWEo5U040Qy9TVnQycThPZUhJelFVUm02ZUNVTC9TUVl1blVLV1E3MDZhRkxONVlNMGIwRVA4YXE5Nm45ZjRNYWhFblh5b0FzeTZvYVl3bW9zVVUrT2RaYWgvWnRXR2pNblBpelZWVmV4Y3p0QVB4VC9GTjFVRmUvSVZNaGYrR1NiTGdQTnRUbWxmUlZKNVR6SjZPRGQrZ21EQ0ZaYTlEYXRqS0YxTmlDOEtxTFNvZ2VKNkRyMG9YSWN0V3FXK1BsemFVaFA5c05MbDFSNkROOTcrN3NFSzJ0S3g5VENqS0Y4Q2ZlRHpma0tnejY0eCs0em1DQnIxbW1YK1VwZFZSSVVLVGRnbUk4Q2J2TW1oVncyVWJYaFQvS2NMQkxFRE1vK0ZTVDcyOTQ5NUJlNEdVaVpzUGdlTU5WekcrRXlPZEd6ZE5iRU4vcUlRbmt0ZGQySWY1QzJtc2NndmxvcHFrcGtBUnVRNWwybStFbFk5QkttSGU4TmFCMVdlUTAzSlZnMTdSa0o3TW5peUlJcUYwc3c3Mmd4YzJsL3JVTDFuUlEzZW10NVBNZkx3cHJiMld2ZXlUckxVeHp5OXBLMnZZN1FKVXQxRHp0TDRVUkpFeTl2VFBUYlpjTlNLc3lEekx1R2FJYTlJSFBtZjdiU244MHVyS3F1S0F3UWgrMVcwWTUwczFraUFhOVZyRzB2VFVoWWh3R0FnV3paU2hVd1FFWGdJSWxKS1BPbVZWeEdoNzdmRTdxemFsKzB5dzFWaGpUd2x6eDAzZ2kvZm50c2pEbHo1Qm5yRWFBdUc5cGxRa0RlYjJYbmwyT0k4eTg5d2prcGgxZDN3a2hZZVpsOVhGMHU4UmNkYVMrUHJRekkyUmt5Zjg2ZSswZDZLK1d0RXpRZ2ZnL3BHOXA0Tm00akw2RjZwZzZzUW54S3E3MDZBVHp4N2ZRUnNIekRwSzN4MnAwWXBJNTVMeUt3OWF3UzNhSG8rOU1yMmRMNkpNL3YzclRpTDJjRkRuQlduMnVxVnczN3BEMEtmNElkdmlqYWt2RmxDdzBYaUJFdEZvZHhFSGF4ZzBSS1Y0TmxUNVBzenJ4aXZYR2UrSC9PV010eEtwVExpWWIwV0o1N2RPOGtOdlBRbE1uRmtsTzJiRFlmQWppZUFKbW45MVN1aU1weXVueVpCanl4cDFoOElvdmVpTWkxbVBPWW93MHFGQjFPb3RNRzIrejZibmg2V0p5cXdhSXR0TnpaMFQreTYzRWovdTIzczlRRnpNdTRHS0RtV3dFelAxZE92Slc3S0RwaGVVNXZMZkpjaEU3THNJdEF6TTF4QWZGVVRRZFVMeXQxSWtrcGs4U25KZ0dxbkJuM0J1TXljeFRNMW5vbFZmN2NWbnNwUnBNTEtEMXFzR204ZUp4RFJPZjVkWSt5QjlKQ29zc3Q4dUVxcVhIaHYzTWdHN291UDJuNDBBeXBHYWdpNzZTRXhVclpoOEtvU2pqRVFEc2VuMTNrd3hKNzNaMG9ob2xXSnIzMEszTlhnalVYMUxZUHM3N2Y3WU9jNXNwZUZ2cko5dHRLYnJQSFhxVmRkYTM3WUNsTEt0NVA0VVZDTzRsdmtQUUpFcHdvOG5FQWh2OHAzN0R4MUxucThtclV0NjN4YlJ5Y2g4dlZzYU52SERFUHYvNFBhd1JvZEZkMjgzTlNYdTFROVh6WVNlb3JpcENCdnp1UG5WOUFOTVlrZUd6Z3JodnNDY29jL3l0ZU1uWFJCcWJYczY5ejVzcUFMUEVodkpXUFhKNUcvMGM3Y1B5alVVS2ZBeVVHR1diZFk4TzZFais4OGp1WTZhR2RWeW41VTRYbW0xZjZMWVhtcHRBNDFtQjdhajhISEExSEo5OWR6YW95S01nR01tbkg1OUEyUlg1WjhvQWF4YVR5Q2ZkbmR3U3pEV2NVOFdvRjFZMDJ2bmVjSFA4YXY3VVVNUUFkRXZuTjVxNVBmcUU4K21GT1JBMkdibmpFNWE1NHphZEhFUXF0cGxscXB6dy91WHBKdGVKV0FRUzJJU2JBV2tScHViM1EzUVZEYkRYNkVBaDRVTi80cGF0RnRtRDhTTnRrNTU2bVR5a0tKMjI1YnhpbmcxNEZkN3JnNk42MGVLbGZOMVhhZUcvU0dLR0o5NERVR3d2b2txcDFiQ1NpNC9Zd0dxRDRMc05UOFVvTGdpWXlQQzN2OG9PQnBocHlaMDJRNlIvZ2dJRCtVb3JKcjMyUE1ZYVpTZjJuQkZDMFBhdEkrRFM0UXBXTHgwcElMOU9JYzdJM3VJVm00RE00UGR4RHJtOWc2UWd0MG02LzJlZGQ1cWJ1aEREOU5vakM4cmpocWFqWlY0dFlhSDhKZWdCb08zRjZDRHlkWEh2c0JmSEoyV2oyUkZlcnlaQ0g3eVBobFdHejhqVEVHd21RR1MwTGRyOFdtRmVHYU5Dc21zN0t0T0szdmprL0xscmJPV0hlMkRTNjBETHpIZkZVYm5JUmNwRUF6VGJ0RGxiZzhlMlpQSDlMTTJ2V29iWmVPZkwyc3hGYThJSjJyR1dBR2FVUXkyTVBJcUJsdm5PbS94N2xqODZoQjU5LzI2WHIwRUswamZ0SHMvcy9QR3g0akVxaUU3cGoxY0FwYVdzR3piMjFOZ2ZkSkVvd1FUSWh5OU9qNVdEV3pvNWNIZUNoSkF2WHluMlhDOGtjc0RUTWJIWUJuNmltU3Z5c3YvWFdpZkc4eC80L1hOcTlJdUxkQ1M0MVIvcVJlaTYvRkZDUTdqL0V2YUFsNFBtVXFEdVUvMTVDd3BiUDFtYlNpTUltdkkyZERBdis2TnQ0dXFzR2R6Y2J1MVJtemlucWZvdE82RXVIalZPeENrQVh0MkZrMWlHZmJRS0llVGsrKzFia1hNRlRwOFdrQWt0dXB2OGJvNXdRZmpxVWtJYjYwL2JvQ0k0WndIZzlid0dieVpLTEFRR0o5N0V1L0t3aGdTbFNidTQwUzJUUnpyNUVzV1pUN2lpR0VIQlpsVzZPUVpqcGVSVUJYTS95RTkxcGlDMnQrSXBZT2pDSVZEaFUrOGlzcXpKZDR5ZXhXNzBXQUc4RzZTMFBvVlBiMHZzWVF3K0NkR1lRb2g3b001c3VsSlZ4aDBEcGx6M3pDY0tkZUZodEU0Mk9zN1FaQkpjbExNOGRUOFdnUVZYbGh2NzRKTlBXUnZrNlpNbW8zREhQakpnSTBMcnlSaDlkREdkcDhwOHRvSk0zbUZBZ2xqRnN3dExHNk1kY3pOMm83bnJQRWo3bHkzczZLaUs5d3cvbmRGVHFVQmNLbTROdE0rZEhRMzZlT0ZFcWMvRm51UExPbUF3emtwYVBQZzJ2QUsxZURyNzRnajJJZm9ZWndkclJVdFErbVFqUjI2dFdiVnBIbC9La25vTXNRSDdQNXhTcTNlVkxnYTNDSFZjck5kWlRhN2lrL2V1bFhVazNDUi9WZ1RxRDZZaFBhZTN5S1N1ZktxL1dxN3F5Z04yUC96WW0rdXNQTklzaGFVWTRvRnBHVW96bUdDY25mUjRQNVBzeFFEZ1dBVGpHN1g1Vm5PMHNWUVVCUGZDTEM2UGgvMmRDRGhKbkM1YWxKbllaOTN5SHVzTDBRR0piRUFLcGFQVnQ2WVNIYW9MWE4rZllyY3lzbjN2V0MzQ3VZRENheC9qTVRHMTA3WUZ6Zlk2b0tMUVdIUERqWktXeEZrbGJQSlhkT2VwVE12V3R0aEEwNSs3RTFHUk5lN0lxRithSTVtTzVnQ0VCWXgyYktyR2RWbmlzcmJ0N0lwZTlRbGpvWjIyQmRoY0oyL3RTUVJhYjZ0dG5YekU2VVVrVTVYKzM3NTVYbVVzcVcxWUFNMnZXR1A3dVNhbThFZDd4SVZkVFVCTlJwMDAyNUdkcytoWGZKamRQZzRsejZGb0hNZTdoQTgxWjlSTVZ1T2pJU25ZVWtlcWwwaUUvbEIvR1VuK0Y0aHNaRlJmbjVXQjdHZzU2TFBiVzZMdDBRMWdkRzBVbHNWekxJQXg1RkwzNFVESUd6MHRQQVptL2lxVVkrY3g3UHM0b1d4QVYyTTRYQkdWc0RsZjVTNU5pL3pURUQ4MGp4cm1Ia1hjbXU4ZC9vdjgvaW9qWEdWdjNFYVlKcjNIOFFobkdLeHZSa1pIT2dHYThuUzc4NkJVb2pYMzJaNDRDcmg4OVhTZlRGc2FDRXhRd29NRFlzVUo1dFhxdlNDR05ISlFyVDdUMmVCbDIrb1hxdTl6M1N3NmVIcC9ONGVSZVdmQURxZVlwc0F1cmRxaWxiOW13NDRGbXpmdG9YYUtybXhhUms2ZWhpZVZNU2lDamhhTEszNzYwWm5CR3NrS3ZjNGU1b3dGNTdQU29BTGU4YTQ3NW9HZFNZK2hoaXIwTlJRaEJoTXZEWFUxM1NBMEVESmo0Y2xFZ0hWc0ZsT2lCNThUWU9GbFVUeDVQK04yUVZQNHB6dXF2TDdxRjNJbmF1U284dXBSLzl3M2hDWml5MlptLzJzUGVRK1p2YVBJa2FJajF6dUhSVDI0WnRTbDdSTm9yVHdkbHM1ZUlYRjg3bXpkdzJ0Q3RCOExoNnE1RzdNci9laGpadlNuZ1oxd2VmVU95SmpHanEyWFYyQXozelh5eWx3WG8wcjhuYUNWTkNTd3Q0TEtGN1N0NUlJMGV0N1ZHTVo0ajY1WWsvS3A4KzdkZVQ0eld4VHZiV2VhKzNUcllmYkZ1UVg1ZXVKRjE5TThBN09pT0hwWFBNY2txbmJDMXdJNVQvWkY1YmhrYkFhWDlsaThTZk9IVTBSS1hNVnRoQXRBUzZMTFhXcEQ3TzN0Q005ZlFNUjYraVA5VDkrNFJGZWNSWjVqMHlHNjBWQkhXYzJCSVBzZEdlTjMvSk9aUUpubnlVbzI0UVBxOGlRaHlsL3RUdjhsLzZKNDVDWmlwY1R6ZGFWS0Rlem56Y3JjekJuTDljTzBiV2hmc01sSFFoQi9maUFHazNnVm5VQ2JwT2cwZ2VKZ3FrdUFaa0FReU5CTUE3MjdveVhqSFdkaEZLRzB2Wnp5SGhQdVFXUjBHRkVDUU1zNHpRQmt3dWdWVTc5cmNzOVZaYkZGNXB3T01vRTFPR0JRZEM4ZFdZNktQYTM0LzRCaFpIRzVmUndRM3QxamJUMlNEa091Szh1djFrZmt3akNNTGxPUE1wdWsyS2cyVkZFSC9YMWEvbXpQRGdZZ01KNWJGS0sxYW13SXdzT21PUTdBTXRyMWFLRGVzSWJkekZlOHZrQ2ZYamNvRSt6NUNOQzhyZXhtZXl1ME12Rms0ODFtT3kzazU4czRTOVBCc3lWc0duRGpKbGZZSHpPbVIxM2t1TTVZbnJRMWtVMHdrZWF4VzlTRG0xdEw0TWU3OGIrR3IxUzJVeExqZDdCQ1AvdkpJK290bmxHM0tIUGxDaEFYU2xsMElaVWJudXFUd1FaVWRWZE5yVEcvZUFVcU9mNENoVCs1dWMwb2xTVzhRazNHY0lRRXhwVHZmaTJmUXR3bU8reUg2ZVR3V1JEa3BSVXNxTzFLTm5XRzNMU2hqa3RMZkZDRktpMk9laTdicU9PeHdELzdwcCs2SjNLMGJXL2M1OXd0Wnd6WllrdldDeDh5ZUpmNVNxcVJMUFNRZFVRbWF0d2VNSTVXN1RkV1ovT1JpVE5LVUtaVGtneE9iNzdudGJtcEVIbzRjYVc1Q25BekFCeGdDNVBRdWxhNXJNZXE0aVg4Uk9DZ2RsNFlYSW4yZWltelRNdlBPcEtZTlJTRTM5bjI4UGxERDcrSlArUUt0Z0NzdCtmbzQ4Vm9XcU84QmUxQ25PbStRaFMwUEZNenh5dHpXNFdjMG1rbmt2cmdCcnJWOXBUS1BBTDBZLzFNUHVYMDYvRHlhbXdVTzVNQnE4SS9XRldKTXhpWXdxREhSUzJSaXhDTjh3U2Z1WUxiR3EyajFmYUY3Y0xVajBDUU9aWHVTT0t6aGFYc2YvUWVmQTBSaUNDQ25XWG5iSWpQcVozUWlZckpMSkFZY1NtTDNEaHJMZm5uZU5FTWt4MnlrajJIaFhpanQxRzBIWW8zajFJMk9Qdk1RMDBsZzRNTktNMzl6YnVvdStFUjNuMWxUU2QrUVNWTUJ1c3NyTnhvQ0RMTE1oVUxlM3VBUmdSaUlqMk12THRBajdJek4zRDI5ZCtJZUNNM1NQT09NOEw1cTdzSC9McTk5OXh6V0MvZjRFMi9zREs4eTJIY1g5SDQvMU1OQTVXRE56c1QzYUNuYlZrMDZFUFJWUFc1WnN0SFdZamhGUjRKRjVuMGhvZVJpZ3pUdU1jZUFRNE5EeVpTVy8xLzJWU0ZSL2ZiUVlxaFNHMlNaUHV3c2VCZmNYUHhUSGxmYWhlckk5SU8rV3RQVzcrZk5BTmxEbDE2RnJyeFhFNmhmNjV6QVlGMkVBTmViWmY2ZWpjcE1SWUkrck5qMk00dFlnaDVSZ2NVSE45OWNLMWxibno4eUJ5eE96VnVzZG9lL0tDakkweXVLZGcrOTVYd2FTbDJkZWFoeVVlUDhlelZJYTNGYm0vY2tMeEwrN0JoRkRrTjNvR0FNeDd6VElad2VrRFZZb1p0d0taeFE1Zmdpek45MHRMc01FUERWZmVjUlVCM2hGRW96OFFVQVhGeVFjdEVOc09hTXNYYkNLVWpNVmNvS3QvZm9sR0xlaVoyL2RhMUxHOGllQ0drb0p2NVYzdUV0ZkV6ZkJWZWlidElxcEZWYXlKdm1JK0ZQb1dYVjJPc0hWVVlxN0NaY1RVL2lMZ3RNQVh2WllDWmFKWXVodEZsWDJGWGFqUEhIN1F5bDg2VHlRZWZzSmdibWd6Z3RnSUQ4S2lpdi9pQkJ3MXRhTkZkSGxpQ2xlNThKUTlDZ3cwTEk2TDNtNVF0dkgzSFNaSGU4bnFmYTlXSS9xZHJsRXoreUVPRXhiR3BNVTZZSE1wNDlYMjcwV3VsQXlBamZQVzArK2U4d2VGSTVpU0l4K3ZWcmU0alFJVmtNdkYwNmZMemlUUFBzQzNEYk93R2dIMzVrT0E0eWZkMUhMZS8vRnN0aVJob09CUlY3S0d6K0tRK1pIK1A2SlBaeXBDOThVUFI5dmNub2tSL3NIamh6V1pXWTJZM0ZBbjF1R3h5aGMydUkxTUhuWTJNci9mT3dWTjhoL0RMMTRqUktRa2xXdHl1Wjc5eXV6Zmpndmxrb0dLeDJNOUlocmVHZjlRVUNRME5VRi9aSmlnR25ucHcwdE0rTzdmZHd2eVU0emR5dHFmdTRjdG9DcGVUVTFoYVRXaWVsRjFsTWtBTXFlZDVYSG1CRlo3WVgvUTdZdU94TmM2UjlJLzhYZmwwbkF5VTI1QmVkMXJtV2lwSkVnMHV2Ri9SVTZQaFcxR01LNTEwQi9VWGJFUEdTL2xleU42eVduR0xDQUtiN2d6cXJkaHlwUTlHVXI0RE9BKzRETE9WNkNYVzgvQjhmSCttVW9OT0JLNlQ5ay9WSVRmSkNudDVaNXEwRTdja0l1bEpIWG1IU1pEeXFiemJ2SW1TOUJuV1JkRE0rVkg2dElwdTRqeTN0K0JLUXdSRFdBU3pUVTZsb2t3S1lWbHhyWjRhRGxmVEZub2lROFU5eGtUbkozY0QvS01GbXFWWmJQRXByLzFrUGxVZUh6eTFIS244VDVxRVVMb2ZQbkY3a3E0UjZwWXpIMnoyYnZMZlRSTHZZWEthWG12OEp3WDdXL1lqb2NrNmZTeGtyemRXbUF5b0RIdXJBb0pBcnQ5Q0dvQmpHYTFVdGUxeDNLdGpKVy9BdHI1NUs4M2FXYythUkE1RjFqL2VpVmMvbFlzbTN1SXNVUUhLQmhBcEphQ0JpMkszL0thWUo1UVRUUy93ZjdOQVhKTVEvMUdYcU1keXZaODRtcU5JRXNoVkJwWjE3dzAxbWdDZ3JnWXNQWTBORlM0WGpzTmF3OExnOGJtMW1sS1gzZ2NTdEZDWUdTcHgzdGtqZFdGZWFQdGVlaE9GVXlya3hnZ2lBd0hwWkdYVmNIVW9rRVNsSmQ0dmhINTY2eS9veGx4bGEwWktOZTdoN1gxa0dCTWc3RC9FYTM1d3ZKdEtzYTFTUzU1b1VWUGZLQjdNSEl4alB4NDRic2xoZ2VGRzJDSHkyam1QanRIMUcyZEpGbmxjS3FYRnk2Z2FzSlhJSGJhZFhIc1NsUU5ycHZwRVBpYUkyTGxKNy93b0lDSUdBeXZCMWx1NlZNUGVCTWsvdWFuRFJFaERPYksvVnEwUFZDYys2TldQbGU3R1pGT1I4R0Q1eC9FbjlaS2RUWUJTU0RPTUVLemsxdWVseEJ2V3JHQ0xnWUN0QzNwVGwycDJkMnJ6b0x6U1JSMlc2cWZmaXpqTUF6NkJqWkgxOTJaWEhwWFE2MGVHUGVJSVI3QjFKeVU5akorem5CRDY1NWFDSGIzcmFVd3hzYlN2VEdPNEswSHFtM1d0ckJpbGNGZ3B2SzhaY29Md09ESnFXNFp3b0Q2V1VPdUtEOE4rT1dZbDg2UVdLbE5xbC9xOVlwbWhUcDNhOUM5M1I3clhucFplNnFhc1AvcnNWcHRMSzUwUWJKVW5RZWFtZ0htLzBiR0c4aCszUzZvVFF3SXVlYVJjSGwrK2hBOWI2TGNkdTJqaDdCUEtKWE9QMElqaTY1SnNXby82aENVc3R1YXo5OStuL1NrdTJDbTdCcEpWVTZoK3p2OXNjTGJDcVVPdTg2U2NHcnRpeERLSDBuL2NucVFSU3hIdythaURGYk9CdVBLZXBzRU9xK09NYWZpU0I0aEJMbkNCc2hvU1g4VkJpMzNwcHZyQ1VYdVpSZjZTM2oyWFpmRHpIeVBZWXNTU2FBUE5pTFNaUkdLaURVaXFlQUNKSzJSQ2J5TzUyQld1ZzJLZExTbzJKOUJpejV0bW5QaWNmR2hsSmt3UkJwUHVDMU1XWGIxanZhMkxTK24yb0dFZnpaR0xNaU4zaHdURUMyU2dzQXFzOXZMSFVnMHJWbnhPdmNsaEpJMjdxQ20rSFZTTE5nS1dDWEROL2hoenpJS3BmTWgyL1V1VlZhdFFSeWRKc3lRbWJoaTdUTG4zdHFqZVpjc1kvaEJYRlpHNmp4SUNxOUs5R0dDeFFLUDh3OVd2R0ZVTyt2K2xoRHl5SUVveGJTZWRmR05kMDJqelB5WUJUeFdvZjVrVklLSDl1Qi85YlIxZEJnR3puZmJ5bm1TS0lsSWVIZTBnTEg1YnlvMkFLaVhPaFNBZFFFSDdyYmc2V20xNUFBK0ZJK2RXbkVEZFB0MVU5QWcxaHhCTGFCUXJLcEdlNDdCRjg3OWpadzdHY1I3TE8zaDBDMVRoV21pcUZsTW1kK0RwdVhRbWFSWGpNSjlqTHZramdESGpvVTNNYmlwU2I5VkM0SkpBWUJMcE82NkhzWVpXN3NjOVhsMWozdWJXRTgxSkd6NUt5emYzK1BxemthbmFZSGNUTzVxS0hnWmx0d2NHTWM3RkJJQ3NucTBQY3ZyOTU4K2UxZFR6V0twZmFoeUlzWlVJVXFoZ3NXQ1lqRGJYVlFHYWxybTJCSFZ6OXJrKzlvRTNUNkozcWJwaHVBQ0luRk5JSjNNY1EvTmJmYjhkQ3ZMVnY0WmFrVmN6d1ExZzhLbFBzc0dhMGp6VHVxSk15ejJYWnRoWUJQalV6VmRvVlpPYVc1VUFXMDN1Z3hxcnc5Yll2djZoR203ZFBHRlFjREhyUjV3bEZEbmlDUG5hT1lxQldLSUNPWkEwT0w5Y0JkL2lPOVkwQVZZemFqYzlxT21YR1ZjVmd5cUVOZ0JIZENka0Y4bU80TGFUaEdWa3NSdkpNLzJ4Nnp2cWRreWNrU0ZnWkg4bXRVZWZwRHZWcU11UnY1VmJtc044VjZNeTRXKzNBWGp4cGZjSlNJYlR3Njc0TVNZdWRRbDY5d1REL0p1TUhMWkhmQm9nQmYvSndoZmh1dS9GNC9jRmRSNUJGT0J3V3ZCNXZQcFNEZU1XYWhTdHlGa1BXay9UNitPc0Z6a3djejY4bHlKKzVXTkpFbHowdjRJUk15aGFmZkhTcEl1YjI5dFY1aUtJSmFDME1yYXVobll6eWUwVTJwYkppYUE3NllqVzJGZHBkcXVyQlRxcXdLL2RENStMYzdaV0lqN0dGS3JFMytBdVpNVGh2K1VQUUp5dTcxZ3JjNzNKQS9wbHU0NkIreTJKb1dIRVpwRC93aUNJS1Y2bHJGVXBEQzUvUWRrODRyNzMvY3BWOUxZMmsxcUxvNmhqemNtMnQ4djhkWGhoUlpIN2NoNFBSZ2FKWGxpbEVZUlFrczNUZ1JmQjMzckYxNG0wcllrUTlTLzVqZlo4SDI1SzR4Ukt0OWc1NlgrNFJpTGVQRm9mRHhMOStrZFRFcG94VjQ4MlV5S2FkMzd6Wjl4MmE3OHkwUWtQWlFsTXFXdjBWc0g5eGwvOFU4NFJOdTNxdmtxM2xmT0g2VFNhY2IvSzM5UzRZK291Wm56bFFZRUxheXFjQlB3THlSejg4OFMydWpXVEUya3VVVHU1a0NGSmczWDRFSWo0NGI2SFF1b01KV0l3YkxacEUrTUFUbVQrenRlRkNUT0I5WUI1ZWFKYWh4am1DWEI1VDZBMnhjbGZ2UE5abkgzdUVtOU5vNHZvbFhBQXJ6dUlzOHdEeDE2Nm80MktGZW5NbC9lU29yaHpBYU1qQWprU1ZKbVFmd2lhdXhXS2JNV3dFVDJiQXl0KzhxcmxJVEtxZGsyQ3hEYTVsdmhBRmYyZHY5alZ5UnAxQU85cmVmKzZHaEtHYkpYa2NndXRsRVMrMWdld010blE5bHNzV1dlNzcvMGlza1I0djJPTVVwUEhDbzRheXNOSS8xdHRwaXFxY3MvdHM2TVN5d3V6REhILzdaeWVlMlVteUg3dDhqMWhScVVVY3M5MmQ3YXRBVE5rS20wY29oamRCaDl4ZWpvVTh6THk1RnZlWlNXeHZ1U3pqQ0dOODRkVDJZQitWUFZBNzcwSnVqeERZeElnR3ZKZkVnVXkzZDEvdjZ4UXpLSmtEOWtXSi9HZjRuU3p2ei96eG5TdHM2ZlpCL1JJYlVCbkZ4MDRYcUZoRE5PTWwyb2hRUDJTTG96TlZyZTQ0RVZ1Ris4ZGxTQmJIaU8ybkNCRnRkTVFNeDVMRU5oYjJhSUx2dmlNbTZ3ZTBaZTU2bXRhUGlPbTQ0VTVPYWpQbytLQ1IydFNrVFhzWHZpKzh1TGJSMllydVlIaG1xSVZiK2dGeWJ0ckFqTHdoTCtpejRLNGtkM3Y1aGxjLzkrbWpaazNFQXFTdElmQjJDdTYxc0dLejFqazFRQXZ6NUhqbDlwQUQwZDl3dUhtN3FMcUllQlQxUzJiZlN4STZyNVlpS3I1azJwQ2VoZHFoSUx4RVd4QjlZcktneG93cC9OODBNWmg2L3dWTUppd2NxY2d0ZDVDL1Vuam1CNVpjVkp0bGVQa0EzRGlLVm5UVElMZ2VCaFlkVE9jVU1DSmVnZHhIVEQvVnU5RnlkNEhFb2JLTVlDZi9aR1FQdmV0aEhCQU5xUUV0UzN1a3hZRXJjM3IxVGtRWUp6bUFzdkN3VlFmK2lvYVdaUGhRWHM2eVVocENtUDA5Y1k3cVkza09GaUp6TTlHeCsxMFNIVEpUUXNYOThNQS9UTDNxaDVtOXVhK25rdGxGL2hNK3VNNThWalBSaitaYzRTNjgrVEZ0RjhiclZuQTJWc3BVM2d1LzJuK2tMeDZ2UktkY1JVcEorMnBOd2dFUDdPdHJUaTNRRXI3U3J5SFpFcGFKRzJlYjNsRmJDVVE2ekIvWTE5MUt3djh2QTQvU1o5ZUhvOExDdGIzRGY4T0htUTJnbEtTOUJSbkU2a2FGVFpmdUw1Q3VLV1NXZDhEMWZlRG1rTWdMMzV1TEx0NEIvS25Bd3hOakRRYWlGMnBkUlRNNFVsekVJcWJGYk5NREFHNFRLSzkrOWQxZG1TY0lWWXVNRnRkczJuL2IxdDNaYUdNL2k2aUJueHdqeG1mNDB3SjdoNDlFWEJSQnA4bmVSNmFhQStqY0djc2hudVpnUUZwSzEvRDZOb0xPT3RwaUl2MW9yWUtUK0phQnpWUTNFa2hoUHQ1cG1DTVJ1TFoweVNMTjN3dThacXpDR1ozV3JXNGpleWFUeXVuREhJc0twbmxMM1dKcnJJeVFzemtpRVlEckVhQzlVNVI1ZDV4Zk96dm9PNG54ckRSbUdpT0YvSEpGM29tN2FJYXdUWExTNDRwemVVT1JCd3I1RlRURHpKeVdZRnVwQ0pqSWo2ckVRMlllR2FSNVIwSzlkT1NrREsrUnBod1cxckEwODhUWUNNL2FzTkplVTgvTE9DWG0wZWZiV3dYUHNhRGc4WTFtWW45RVVYQVY4RkhpY2R5cVFNNXp1aUZtR09IQ29pZkNaQ1NHM2FybmprSCtxUUxjbUh1WGl4U1dtWXNHZi9GZjhxdmZtL081cnRjUU55WGJpZGtPM1FSUGpPOEl2NXZ4QWR6UU5PQWNwbHcwQzd0TWJYd3pKS1N2Sk5RcWpJWGc0YU9XaTBjbzNpYkRoMjByc2c0dEZpTjQ2RlVHTFgrdlIrUW10N2p3VHpLdlc1bUd6SytGaXQxTUtDeG1jNWZSUVpQV0JjMC9jbXJ5UWhmZTJJMWdDR3ZUL1BLU2FiZ2F4ZjREMERrTkNKbS9WT3NOUkMxUlNyUlBCY0dmb0RmcVlsWWg1REQxQWhuWTI0LzBwQUNzVUFiUlpBeEVBVzFXTlh6SXNrMGNyTzVQUDRYN0JHWGdtOFQrWHZmN1lHMDRWakE0Y1pHc2JsY1VkSUJBaE0wWFdidFBaemJRK3llMmtyb3pIZFE2bDVLVFdHSUwrblpNRWR0WkJlWmgvRUFId2hKU0JzUlRCY0g3WURrRlcrbEw5M01JM0tpZFFVQmdhRVF2V0pqNitDU0NvMlV6MGRVVW9KZVhNdk1vSzlDc1dyY0FGMklhaVEyUm83OHNZMTQ2VE1Pa21SS1RUcXU5Yk1SS1d0RE52OFVRaVMxa2pXcHZCcm5UemVnaEJKUTl2NWl4OUJmekJ4ZkpHQ3h5Sy85am5aZTN1RVNZalVhTUFEL05ONlVxcUJLSFg4VE1VUGJKL3pDRFpyOUtZbjlDbGE1RlJGdHY5RFlEV25nSG9kTVQ5ZGN5TXMxbG1FZkdacTNhekM4SnhIdXU0Q0NRYlZqZ0pybDZtTzlxdG9Rd2NsQTh5Uk1YUnhzODdPditCSWFpSjJ3M0pFTEFVRGJRb3FxN0JXNnpIWm5seHBZSWtDOG45QW5iNldOOEtIbkhUOXgyVG4zNjcrc1NLSjFxU3JKSUl5b3o0MFdSQ1g2WGVQaG82Q29wVlZYMExkdlZiZDRwTG5FL3BzZ2l1ajJOMWVENHFDYlU3SkRoaHZVYkRKcFhLU0o5M3gzdENBT09xeHpVRHYrQzREejU0bzMrV3hoZ2I3dE1qUnphbDduUE5DQmlCSXVhNGprb096Q09TRVZCTWxIcGxsdVJSR1ZPK0dGQ2p5NlFDejh0K0dVQ3hKajdpQUt0ZG03SHFyc2EwSXorekVsamNNNys5WXU5WmNyN1dGM09TQmVXeFFwMXJvVzM0YmNlbUw3dlgxb25ZRjFjeVNyVSt4d0FqaE1zNEtJTTZzczhreHo2WlpIYTBFbEQyaHFYY05HNEd0UWQyZUNWZkErUEdVaXp6TFA4WlE1MDZ2dG14NmMrM3FuRVpaWFozYjM2QzVzamVrTWx5WVNFVTZWVDFmNzljU0ZNUG5aQ01FNk1zWmd4YWNoTEZpckZuWFZIMEsrYmtNcy91NzU4bWJPSjZwZTJvWTBIQ2RLbEphbXZUcTJjWHgrUndLTXorZFIvbFlQMjNhRUkxbi9iZWpJM20vekd4eTN4SzJ1RVdWMCtmc3oyWDJYaWlmTDNWWkJMSmk1STNLVkRrT0I5ZGE3b0M4Q1M3QnZyYzlSbVlXUWc3bDZ4VHp6WXVvK2QxTkhlNXNMdUVWSTh6V29ONDh5U0JDSFdaTi8zelFkdUdxWW9EVEN3Rit1bE9GK3MzMW8wbU4zL0ZBVkU1a3dvOTc4M2tMNW5ZT0hqWWFVd1VGZ3BqdEhxdGRXa1hNck9DTktkS1dERnp6djV2ZVd2NkEvYXBuUER5WUhMOVZTZjlEYVVRejNCaUs3elVVUWcwOVRJVWdLQ1RVNTAxVkMwbjlicFJmbS91ZlhMYTc1T2F4L0lGUWRIalV0WEFvUXAzaFJOcHBGOHFsc1JNWEc4a3A4QWNOUk5WMGNsb3lsTi9MRWhLc1JtNGs5TG9xcDRlYnE2WnFQT0NpNkNRZEdKTHJsZmhFVjNTc1FCdE9Cdk5FZ1pWTGtyT29XS0prcUVndDFMOFNDaDJ5STlqTFNxM1JSTUNqbzhsVTJxdGovcUpqenJpQWI5VGRIa2NoMTBPV1dIVy8xYWdreHVRV0dNcldHYURqcURvYjd3bGdFMlo1c2tlK3VTeHQ1NDRyUlIvcEVjT2tRWHNLaklSN1U1Z3kxT1FteVZGNGlxelhnczBSNUhXK1RPTGRyVTlrREFGdFR6MDBGYVlMWHhNakV5dW9IcE90T2d4elYza25NQnhoaGpFeVdKRy9DOTJia3VscFZJd0FjODBxRUt0OEkwa2ZvZUVlMEdOcHJtREUwRGtGTWI1cDE3Y0tQcmNmUE9qRW4zMTZnMzZ2Zy9WK0RpMWNlWEZXcTJubFpwQ1NvVUNDaElqNHFuSWo0Zlo1elJuS1BGUHN0K3VaUTJDQmI3cEJ3MHNHR0FVT2w0YkxLWjJuVUhSbHk4SktsVzlvZkRDM2pyMkZjaHNlQWdRTDkveVJxSEVyMHR4OGkwR2hQZXU1UXdGbjlEV25wbU1uZGliS3RxS3hVdkprWEdRVW9sd3hra0JyNUNPVzlROWx1UGx2c2hrWFdKSGRKcnk1R3Z6VUQ2TXU1dk92d1NDOENDODdpSTlZK1hQNHVvSWtJWWdvYXA1WXhQRm1xS1dSUFN1N05vRk8vV2Y0Q2lYM0RjUXNjTDJYVXZWQmZjNUJFS2ozSG14K2VOUVloTGNpK05wSUJIMU9nSXhuaGthdlRYWWlQNkwrOGh4Zkt0Zi9LWFZqM3lobWtYYVpkc3ptZDh4bzBqSUE0RWtRN3pycUhLY0VyRjRMQ0t4S0Y0YXBFZjVYanJ0S0prcU1ZWUlSRGdldWRkZURjL0ErSzFtQ3RpSy9zdjQ4VVpYWGdlVEVaYmJrS3k4UkFtcUowZTZheDRsb2J0c3BqYVJqYkpmQ1RVZ0xVbi9WNkxhdDBKUHdzR3lsWDJrcmxEMUxZbERLREkybnROQUZxL25kNzZyb3N3TVoycHVvME16RmlETEZ3aHhIc2F5UXRGckpkZjhkWDZXemI0V20yZHFyVDFaMG1rOXJiT1lGb01IY3F2SExuYWVUckMwNktaWURzQlNrcEhNeFdVS2JxOUY4OVNpT2NwaE9YWFQ3bUtTSkJUdXl5ZVp0ekJTRU5nbk45SURnYWZXQ2E1QkREL0FaUVdSVUlXRUVwZElsUjBBTzNhbUZvQnF6RkZtNU1FOE5IZTdSSXZldEg2S1ZBWlZTcXdOYnplaTlMSkU1eFJkaE0vRVBXN3pTVDMzeTExV3VSN01xTXJNNTh5eEUxOWhqQ2syUmlueXpPNzgrR0FLWGhtV0FBVDl0djU1aWNhUDRBYlVJTHlGQVJuQWppNjViVnNqdkkyb3RVTzBOcVRNeG8zbUtXczNXdGFTR2daK0JGR2pKMDlmMFlZOG04Y2Z5TFZSOExrQnRpeEF5L3FXQUdSS3lBeFREU3JDV0ZTY0ZvUUUwNDd3RXdGVndiblprTFdDdnc5ZkNTQ1B5Z2tYU3I1blVZYVBDaDl6cHkvZllGR2dNWVFZNHNTS3JOVGQzU1BSQmZmaW1kV2dnejlyeDBmRitNRTVBMTJmK3VOSE81SWRVUDNrOFZrWGNjczcxbGpqVHdQS2lnQzA3QWxJT3hOb3VGakZiTWd4VU8yTmNiYkxiMlMvQ2ZGemZDeHBTenZvY0J2OFdJVHllWG9WZGlpcEtnRVZkcTZKelVDZVhqRHlqcDkxWjVpVVhRaC9wY2ZQQWJVQkl4SGlOek9oaW5HQ21UajY5ZDNnRmFEZXVmTHpuY1dEQXF5bHd2TkV4Y0hqdFVuUlo0T0tyaVRVSnh0bzlLNWF3ZTlWSmQwYU1hamgrUktRS1liZkQvVmtoVHg5ell3K2RTN0VXdk0vMW5hV0g4eVZHUTlGZlZvWTN6TWxJSkFOeEFwZjVYZXJMRHp4TDNhSU13NE15WlpXWEtzL2NpaTFBUnVsS2hIVFMvZE15MURPMVhGcWVqcU11U0k2QzFvZ0ozOEFGTEwrd2JkRzgvd0Y3Ry83cHFYREhoZDVkV21tSmQxeFNKVVYrSGV3Ni9XRklCK3JPSHFpdG0zZjJwWDVWc0FlUUUvMWRTLzhoK0JEOTBYRWVQR1dDUnVSYXU2UUp1YWZiYk1WQkN6Y1BWdkExT3YwL0hLZXFUMitobUNEWTBtT2YwR1ZNMmh4bnNNZU9kZEx4eDl4V01oRFRGUDZoakNDbDVxbEVGUndieVpxRVp6dktGS0xzKzdybURod1BIbjYwRkxPVjBrVHczZXVNUGdTN0pjakxMcFRNVENIbllBMW5FVkFuZThSY0ZpQ1FzSGxVVjZBdlBxQ21RMzJjNnVsWGh6R3FleVk3dEdtV0ZCYWdkUjFhTlA3aGtBWWp0UDMxeXRwd3gxZVozOXp2YVNpeWRRSEJWdWxjY2tuN1ZXTXAvSFRjWWRReHBKaUNZRFZxbXhOYkR0b05RL04wWXBVdVpjRSszL042eElXM20vRGRock4zSUFYZkxZUVg1T2VrQlpjc2VmUENNSWtNWWNKalZxU0VlR3ZHRUVWMi9HWDdFMitCa2c1ZE1iQ3luRDdXaVFHSE9LUVJHZm1MOTZyanlBYWxMMFpVbDBVbUVWU1QxanNWYzFrd1VseS9nUSsyMkFIeENtU1BCOXFqNkJjZzFIWTY0bC9kaFVMQ1krVlRoaGt0bVFINkpQY1RJeUtiRHp6TFUybU9PS2Y4U3ZwZHJIMGRQZmwvdk5ITVpjMmFqZVNwVkhXWk16SWljVkR6Q2I2eHlQV25USFFxNTd2T3Z4RUMrM3ZzTmJjYVNUS1ZNMzhONFVNSm50TmNtdkRUSWVMZTZQSWNGNGE4NmQwYktrM3Q1d0xwMXRmWHM3SjBDU0VkNEdDbEtDSVorRis1aVg1RG9iT2hYcWJTN3JyYmdLSTF6d3JPVmZqSGw2dEhHNkNMQWNmN2ljUHVrMDRTWTFtUXJvNnJoQ1RIVW1jV0YxUzdDWTBUNHp0b2ZHVFRQVVFPUVJPODRsVkRlb2ovNEhKTXY4U1NaVFIxYVVMZTZwM2sxSGd6UmExSndwWVl6RUk4dVc2N1lnYitsZ3Y5bHRqWFlXcjRWRUNUTTlNZXg5eFJWT3AvNkxHU3luR1BFcFFqbFVrNWh4Nk5icjB0SmRQY2VmWkhheFRDUG05Y0NIZFVldiswYllDRHQrdzdnVVlxZmRVV3AvbERFRk1WRU1JbWRLRlIxN054by9Bak5jcTdGNzJhSTRGRWEwWllDbDJrWEtBS2xvaGdIQzRVbWV5Rlc5bFZqTUVWY3RjK2pyNFByeU9WZkIyWmdmQ3hIQXo2QlpueUVHV1YrUU51Mk9nYUlYTUdyV2JmQmlYcWhqLzBUMyt3THRqeGxMd3FmMXhsa1BLZDFTVUdpMXFGQ0FXZGpCZWVTSDB4WXNZaGwzTDE2WSszd2llVWMyUGEzNUVHZXM1YksyNUxUMDVnL1NKUHIwNnFkU0k2ek5FWU9XSGp4L0J0UkxUZ1NGVHN4QzloSlpDeDBWVzAwU2h4eittbDllUXZTMzRNZE84YkpLWmlzbGFKakM0KzFpWmFqbVhRVlU1QTBSeTF3bytXbldrZ0dsNHRwSmZOSGdwdzFsaTlwR1lSckorOWNDK1ZrYWhCQXU1UStiY0dHRlQvS3BrV3dsVFVMZy9naG5VQ09ISVgyaFdvZnpMTkdFZHZqY1F2MnprZ1ptUldlc1oyak4xYjVrcDFCN1c1MlM4bDZHY2dOckNxUUdHOFJlQXBxVlIxN2pjTTU1U1hTYVk4TjRiUnpFZSttSG5TNGtxWHdCdXJ0RlpyYXBnUUNzajZxSTExZTlqbUJTZkpmMzAxek91VFhqM0NyMDlTYjFZZ1A5ODNPNzh1NHhVSXhnMmNTdFJZWlRzN2VvYTlUVXJGVkhwQWZBL25BNC95NGJLQ2RyTlhLMXhKZFBOMXVqVE1TQVBmVCtTQW9PTkIxNGtFMGp5cjNPQlpESWdTMFNtRHpuR2k2cW01Y01CVnRab3RPYm5RNWtmalJ4dkh5V1lLbUQ1MzZYQVNWUGRtTzd5a0c4YkI5amRnV0RSTVZwaTRob1NJUUtLTVkzajlJbmQxc3ZDTHNITmZwM08wTW5JeHF1RXlWa3Q0UTNremtZWERyUWtTdE5kNEgwYTNOYXRHUGdheUx5NXVrM3AvYVhnWkRnaVUwaFRiUnd5OFBBR1EreGR5d0ZRc0tTYURvMythS1d0MkhhSkFEbm9XWnRIdkZFdnB5T2o0QmFkUXZUVkhnMkdESjlSMTlmVzdJZW9scHpCQlgyaEJ4RzY5a0w5dXF3R1FMSFV2M2E4WUVNVkptdFVOS1YydUJ5eGI4a0FSMG8zVVVlc1BtZUU0aEsxM1RqeHNvOUdremVtelo2VkVOWHhDTlZoazBIOUlCaXp6elJYNm9vOHZTOGc1SW9odzJmUkIxKzFHUzUrdmUwOUhIZjF5QXM3bFpJSkpKVXdmRG5lZzFvZWVWaGQzWndzMUlqa3N4c1dVTk51dmpyOHFHNXllT054UG55QnJJQXFWZGloNnlwWVd2UTljZzVPZjVxVmYzWUhWRjhxa3Y1c09JNGVmbnlGVGRXY0FlM1ZzdVMxM2xxNE5qSjBxanNnUmMrVGQxT3BnZFdSK095NUpLMC8xRUt4QnJweUxqQnlrZzg0NVI0WU1PcER0SzJ0WXlXNTloTmlzazNoQ2ZQS0E3MjRuakhaelMxWlUxYXhxK0JWdzVtdmhiYVB5ZlZtMmpTMkduTWo2SEQveFQ4dkFqUmRWMDRydTUyVlVmRFdRRFVmbXlNM1Mzd21BTHVDNVpIT0NkZW1vODU5VUFBNnQzUzlWRy9Fa3RhbXZPK3BaTUNCRU5WUjh0eDVxWWJCbkVVaUxDWmZkZHlGMXFNaE1VekFlZFk2ZVNKanVTRm56ZldHNUdpU2hQOUpuaGpOc0pTR1BiM1pQZlpBYkJFUks4YTc4TUxESXFiR0tyVDBiWDN1TW1uSW16ZWlKa2NNNVo2NXUvNGVHZTEzcVVmbjFNM1JSd2dGNWRoaks1SHZxZGxEelZIaEdpdXVkeTNpS0w1YUpoN2MvdmplSWJ2SFZ3Qmpyd2F0dGxvMGF4ZUowb1lNcUFKL1lzYlV4R3dBUk85aVpDUC9MMWM5eWJZdUpiOU5sSEVyczNWcVZPY2dKdmVqckJPbmRTbXVFcG83V3lMTVNNVG5nNEphbHlyU2pQRVh1bURFTyttb2VmWlZ1eXMwbEZBQmllOC96RWJMRGh3UlQzdG5CYU5mbFUwYzQ2WDQza3REbUxxZzZkcGNTTG9iTGIwME53czNFWHR1K2p0U095d2tXVk9WUERXTkgyd20vVXVwSm1JUFFMSktoQ1pmL0pUbWtlOVUzNlIyeVp4SFowU29iMHZNZ0NSV2UvbjNiVFZPNENmQUVZN05Ba3Fzemd0RnVqTS9vT0Jab1k1N2RUZFBHRmkwSXZWcE9PZFhQQWd2ODNORnFsU25XYS8zUkxUOFBVR2I4b1dvWkJGdXVmd0pBTE5RdXZPVHdlMHVUU2IzYmJwNFFQeERycGFGVzNUbFRoajBtekNWN0tJWG1oVy9JYkdZOGgxaENoRm0xeEo1U1BIcVZ0U3VLcmRXOVUzTVE2MVh1Y1ovR3Uzc2cvNEQ5WnZJUHBYZnJCbzVjZWxhcEs0NUtteXNwb2htS3M0WEI5YzE2TFgzaUp0RG00c1ppY2Urc2hGL3l5WUdaVm5teW4yTDlBSno5blVLQW9BMnZJZ1dSSXh1bTUwQ0pGUnVzS0tVajloSkw0V05YV3U3VVJUSEVyR0JYTmhRK2c1c0x0YUk0TDVKM0dhYmtHU21RdEZSdExnQTc2YTR5eU1hamZUV20xako5S3FYeWpWcEs2eWF2N2p0Z29tVlhpdTZPUm1TMVNFWXBVNmJnZGtiOHBlczhPcDhWaFJaekxMTjd2aEt6ZnFuUllVUWZOVFBKVDMzTTdOc1pZUFZZMUR2RU9aK0o1TU1CemFhbHZ1SGNma2cwWStHaFNnWWh6d0xUQUpqd043K2N6aElZb3VyaUloUEJUMW0rbU1nSGdVNHBoWUVDcHhrT0NueE1TLzIrSHpreGY0MFNuQ3RjT2pOaVFpUDR1TktEMEM5SW9DM0dCRUtkWFlBQmZxdThLVkFqWDIxZEVJblBIYXNhWjFrZnhacndTMWg2TnRhVnV0czB3Mmphcy9CVHFtQjZQN0x2eXZ6c09LWFRydlhEdVJIdzZvSDk3K1hPRG9NV0RpVk0zM3BXRkxrZ1k4dXpaL3FoSXc3ZGFSMXJiSHREcTdvSnZ2OU0waEh3WGtuRWVPM1crQmEyUS95SVJIa2wvdFJQTTJjNm9UUmpwN1RaT3RiU3JJTXBqQjdFNVpOL1JzRktJMVBha2VZWmpqcTZ3c3lWQWJLZXVUQ2t6T0RIRS9wYVIvNzlmWkZhMDN2aDdMUzlVMi95Nkk1cGl0eW55ai9MRnVIZjZrdnZPTnpwWUd4UEs1QklsRUtoejVQZ2w0NEJQMElxeDV4TmZKdkM1aTYyZ2FNWk50aVo4emVJRWx2SVFpZ0hoRWtWOWVCbzVjU3dUdldKd25IQ0Z3Uitrbi9meWdaK1U4QWprSGZiQm1CbTJIZ3U0VTJaYWFZQzZ2YTFiQXAxcHE3SllJUURYS1lwQ0U2d2JYTE9pajVqdWVOVG9WUE5ESUJsMXY1RmNPanJOalpkemIyMGZuN0FEVFZ3VE9uRzI2UDlJRjVmWUJidFM5TllBZ3lSdUd0emhySjF0SWhocTVYamlWU25CTnY3eDVxSHh4c043U0JsMklIZ3RFa1BxMWJDY3dzN0IxUktCLzEreVVzY1lRMHc1M2JoUW1ZSk5DaTBTeXFjdHo2SmZIZ3hqS3FudENuZWVJNXp6ZDhZZmJLUVFZY2NoOHNTWWNtVTB4SHl2RTF6d3QrMGJtQVBmYjE2b2x2RiswQy94UmpzWjZHaFZRU0JMNEsvdk9hOWE0MWZSS2x3eHZqYkxxS2hUSXpxN3ZwaWNDcUdxSmxhK1lrQnlmUG9vaW1tMjRYR2NOeW9rSzlsMDN1dUJjZzFoclZzTUJZK0RxYXBTaUVhRFR2M3paWFhoZ2I3RDVUUzZFbXViRURabVJ6MEgzKzA3RnM2UmZ5QXd5RHVSVmlzNGFUU0dXWEgzR0QyMjMrQWZWbW1EMCs2RUxHdXMvekpZdTdhNnpCWlN4SUhLSVFUdk53SzlqTXpPRjgweERML3hIVUhnOVY1YUQ1NnJGVDlWSUhGY0FqNjhSZ1R4cTFlc2FTMERIcUppbFNrbnBwRlIycmoxSnM3UXVjQzVzNzErNko4NVBlUUxFdFFGRXg2MlJraWs3NWFpYWZkVG9HTkF1L1o5bnFPaWd0NHowMFh1S0V1bGwwMUU0VUlBWWtoZm5BNmE4RmsxZGxocmNvL2grckl2VFh3OUN3cm1Yc1RqRHRDeGFGVzI2TjR2L1pQK0k4YkNENjdWQ092VGNmMjBvOGtMU3hsOFNNVDcxUFVGTHR4SWNtSitsQUxBRE5mSjFMa0hMR1ZlbldCY1ExcExmRWpwZUFPSjVXekh5WEZydGhpRFdmcnEvUldOb3NWWHVjY1E1TmJIRUc3WkFnRGs2dE5oS0NZcHo5L2hDTG9ScmVKRFNNN09wbU1jTDhhNC9MR2FUaENITnlPSmFDSk9NbFdOUGFGTzhDb2wrMDJvSW5wdUFmZENRWFlQS0tWREZFVU53eVM0VHAySWtoQzVHaVFtcWdMUUYvb3V0Y01xbmxWT2k5WWNNQXdqdlpiRklDNVpnTktkOWxiRkhlNE1lVXgrRzg2WkpqczNOUDRsNlRYZE8wUVFsakFRamNZTnZRN3djMU5LTVE0SS9XNlpEdGNaQjZ0ZSsrRUVaZTFucG1nd010azNhOGF0alUzdmR5am96N00vSkhYbDlrdlQ4SUxyYndhSVkySjV4SXZDb3VnTGl2ZzZjSXA4bzVUTWI0Q2tNdmpxSThDR0UvVlZYM2xQbWk4MkptQlRhc2FOVFl3UE5tNVdMOTZHT3dIendqZ3dBOUs5ZFhSOGhmN01zbDVUUWxBdmtmSlFrcnZVbjhVZzlUa3RGOUl0aW5UaTJsb3htdW1TemV5LzFFOVEzK1VyWHd5OHIzQTFHRC9pVkRBVS9Jck1iZGRYNTN2c04xaElQVWRiN3FEVkZHSGtNUkd3b25Ba1pocGxnOGZNUHF2b0EwTXYrQWxLcU1POVJidnBFeWpzV2hqNnh6NTZmWDlnbDhGN0ZMM0VRU3pBcmhaRDdDM25EcEFldktUUTBQR3IwQkFNS2l0cys0UUQwdVI3ZlRmV1hHSGY4NkFENldZSGEwUUtQMGM0M1NqdnhzVXRGUTdxQUJvbjF6QTdFQlBaS2ROeFd6UkdUYmFWQ1BqeXhsNXJISVc4bG9qNWo2NFZxUzE4dEp2emhBMDhJSDZ0UENKTlJBTlpaV1BYOEE0RFRueFBDb29tay9uRWJ6aExKWWRQb2prQmhrN1JNNXBOVzdLSUdhdERodzRzRUpxYy9DNGE0QmQ2YTRzcGZ1NWVtajBOUE4rNlBKTTFydllIT2R6WFpubjcyQTNTcjRGbjVhN21xdDZOQW1uSEpEcDMvY0k4cHl1YkJXZExNV2ZYSHFvRkZoSnBlTjJkdlBXYnd1ejVIU0UzMWNHOEVTRjljVzgxRVdTMU1xMlFSTkRBdEpIV1hRNFdtSWJldDBYU3FNTjdYY1RUSmZzNnVJenpvOXFGRWY5TlpZK1MwdHhjVXdMQUthZFpMMktONE9UYjJiT3AwZE1EOExPQVphU1FGZ1BlOUdyb2kwZllUSEdOVndrSXZqUlRWZG5hTkdSeWY3K3hRQ3g2VnRGMGx5Z0g3SnNXdGY2YWtocFRYbFVZb1l6d2Z3STVSRDhjV1RkUjd2V001WWVrVmZEdktCRXZqOVhYcmVhT2hNalE1dXZDZVc1Y3VzMmNNOUFGZTRkaEZqc0dodFZiSTAyYnZuYkh6V1JOcDcybjNKMjM5elNYcnU0cWxOTDVjVndZSDZ6K0hueTAwUlRVblc3Y2tDZjZzUEl1cjB4SXZpQWI3dWQ5ZElKOGRtTEVrdmRMaTdqSlA3TEZaNXJBcXFpNUZrNW5nZERqMW1pTVpHWG8vWWdZdEphKytiZElzNjZsYUNCQlFJY3d2MTV2Nzlna3RUN1lmK1NoSDZveWFocEVGZDM0cVpPVy9sYmdmKzZ6Sm8xY3lOdFRQOTNhUkdhamxGUzhodzRDanc5VnV4UldnbytKT2F0TERIanlmSlhlZjVsMXNzaU8yUWp0UDhzL0xFNWZuTm1TcHJxWXlqdDFzQUNiQWk0NE9PZDllanV1bGdJY2lPcGFERjZDdURsSDFsaUJFbXlOUVlVZm9Wb0t1c0RaZGw0Y2lBYlBtcytSdnd1TmZxZHYyNjQ3ZHphc3RyRVdHMjZWMHloY1FQbXJXM0g1QmRJU3NlRjh5YUJEQi9Fc0tTR0RCcDM4SHhpYWpSOHJOUEZNYy9pbUpBdmRCRjJBZEJmenowK05sZUlZaElPN3VqckpwT2w5MXFnTitSNjM5enpUTDJ2SzJ6K2RSV1ZGTFVaTWVvWVJZYkE4YUUzYUtkV3JodWxsNS9xUHRyKzNGdm4zK1FEYzRoVDZWbkNwSHBzaUwrdDA5QXUyeFBzbWEydklDazlRTis3c3hGTHMrS2ZmUWdWTEdHRG1RcDA1UVJLSllKNXkraVBPUVZENG1tZkVSNWtwZE1UbS9tNEgydFBrajRZUDJyZGVvV3FZZ2gxZHcrNFQ0U2t5YUdISTNrWFM5M3dlc1QrWFppbFJqQVBTYlo0cTNFNmVXUVJ4U0dabi9TYlFwai9wVmJMc28zbGZmVTFwSmwxYUFTZEZudnlLdS94cGZDYUQwWHVDaHRSVVpzb2ppN3hFV0JTZ1FQR2N3U3pLdTRidHM0LzVhYmhyY3p1YWJSRld3V0VJVjM5b0lqVkNhYUgvMTUzN2kySi8xallDMHg5c1NGWlRDVVMxYW01V29WRmZmaklvSDFGSk5Lc3RMK3F2OGRFdDNXVDhubzh3VFBJWFVlVCt3elRXZXQwSjB1akNLSVgybTEyc2FXdHM5MmtlUkF5TGxDVFpKcXczTmZlWlp4QlpjM3lMQ252OHhvZ3JkWWN6dWRkRXNad1loS1J0ZE0vcGtremljUzVaeGF5T3VIakYvcGhLeVA4dkxUdGsrYk45LzFNNm50L2wrdTR1aGlvV3NGbGZWa0xpblBkZm54NFB3a1FWWnBUVjVNL2JqMVhQdFczckJVamRIOUd3dDlya0w3SE1vUWowU0Y4YUNsVTU4dG11TUFtc05BRTZRcTViS3gyQk4vMjhob3ZaemJXL2lNYTQzenRtakFuVVg0bm5OaFIxU3RDeWN0OFRwZ29INzNFZHQ1dlZDVnhnb1VXenF0Sk1USkFPZEF3YzU5N3hJTWYxR3FLNmprMTFtajhXWFY5TW5IUWIya1J0dUk5eTd0dUNLZEZTcmp6SkttUFJBNnZBeDFJU2RwSGNDU0RldjF6SXRVOHBNcXFodVQ5b3J5ME9PbnUxU0RZUDhsVWlQNnBQU1JMcHp4S1ZROVB2NEJZbnB5ZHVOTHZXRkVXbkdFVVpPNEg4RzFuQUpUT3djRVJObC9TeFY3R0kxWGkxVU5Tc0hlaExPV2RER3dCK1lEbk9xQXFJY1FtK2pITFRWbGw1b1ZZbkxTU29NWktvTUJxbmxibHp0QmN4YURMVlMxczhCbStLcHhrcllLMlhqM05xTmpibXVXRG5YWXY4T0FCYktNVTRBWG5qV3kyeEd4TEVnOXNxU1dtY1JRM0ZTTndFeitEZVNtOEE5cjA5aE8rdnNJeWFCRjliUWJHRDBKWTZSRkJFMS95WjI2OCtJNW42ZGxRQ2F2eHR0ejBsaCt1ZUFlazFaWTlsK0xGVVoxYlU0ODRhVWdaamFrNndtcHl5Nm5zRy9yNWt0d3JCaDk3eW81WnFXWVZjRUIreUR4SHoxd3c2cW9lbFRXbU8wdmxDZVB2N2V1Q2RHZE9uVHZPczJjQ0xubyszTWNaZEtGU1lleHJGc0l3Q05Rd3VTVkZaQWpiRlRxMURlaXJFZHJlSFM1cGZRY096c0sweUhmQjlIRVZCdXErb1Erd1ZsdjZDYzd1bG43cTZDck5lRnNiLzlkNkF0TFpZb1dqeFVXZE1QVUtyd0t0SW14cVVGWkNyaHcxSkticUZaeExmMnI4aHZubnpzZU9HR1dKdTE1eW1LMTEvT3NWRXNaTWExaGsyTHdzV2FtZXhvWUdPa3VIbU02RDlvS3hCd3BCRGQ5d05XY0VETEJneU5LbmdFb0FrSEM0Rm5CY0xnQkxKQVM2QUtqVUlKYmxha3Z3Tlp6ZUl6MUNiTW9EcVBicHk1U3QvL0IvMHpYOFNLZmlac21TemQveTNoZzRVOGlQNlJYVmVGdm1vUS9PS2g1OVNVRnR0aVVOSWllanBNNjA5NnlsRFlQbXlnVDdkaEgxbTlpLzdTWHZSUHdqZ3FoNE43QVBWc2RKLys2YStmQjRYa1ZSK3Q5V0V3N1J2VkxkRW5mRlIxZERZSHJDdHlRYWlhMGxjR0xHVGEvejlxTGdTVjY3QVZJTVdJTC9KTm9rRGc5Wkg0WS9oV3RQeTFUTURRbkN5TXcvbTY0cytYQnl2SDAxZktUdk1aczdiMUNKcUE2djA3cThiUFh3UDR0cUIrRmhxU29yYy9TcEpjRUp6bFloQWtUbmdkU01scDB1aHBZVnJ2MFc1LzA4emcrYWhKWTkwOGlFMGdaVWNVT28wWGpKcEg3N3hhSmJzdEV6dFZlQk1oN0ozU1ZtK3hUcFUxQWE3YUQ3YnVabGpMQ3V1T2w2SWpyVW5vRlprbXBXbTRWWWRyT1B4Nk1BVGRxZEpQNzZMNG42NnhSZG1XSWNMR0N1b2ptZWs5cXBoMGYrbHJlRDJxTjluYXgyenpGTDF6S29wR1p1dTMyZGkzZ3hsYzNaUmd3aGJMZkxoWS9qREh1a2V1RExITUR4NWVUYlVkeXd1bXQ0Rm9raE4rOGFwVTJSRGk3d1YvMEFkejRKNjluMmRtdUs0Y3owZjJNSVN3T1orN2IwN00vQ2taL1ZWa2Z4amFvRUl1Q3hDT3V5SXJFbEV1YWxuUkw3OFRLZys2Z3kyOEJ3QTZMUDZPSGRyMVdZRzEyK2RWWWtFU0JHdEdoQjVoNFl2bm5nWENycUdnU0FYM2pvNXZwUFdONGl0WlQ3aFp2NGRSQ1BVdkkxNmtPMXVhNnFCb1VGWFBIMzQrRlk3Uk52R2NMSFNPSWtMWkh6UXZCd0JLNG40cnkzR1pNWWFCVlRtNExLVi81dzJzbFI5bDQxNzNCbHBtK0xEbkFON0ZXZWcxWEgyNS94NEt3ajYrTFA4T0ppZEFtMGQrVXdIRWI1czBocGZzcERVaVYwaTBDcU1MaFFLT2RrNnNrSDI1YjdnYlBkME5Ham5DMGliZGRzSXVMN2k3cTdDbFVkVWpFNnNJdlczaStEcXBRTlRZVEVycS9vdkVwbWhsRHFMVjdhUlMrd2dNUzVvc3hrbm0wenljRVRwYkRxVWNqKzVzeERzMTVJbkYxQ2FYTFp1ZXJaNy9hRUMzblJkRHgzenVvWnJNbzIxZTBmOVlMK1FyV3pCUmlKK0U0aURrQWJObzlpdy9oZlFlczhtN1Q2WWxvTWE4em5QQ0toMVI4WTh5NnV3UDFvc1A5aWZwSjZZcWZSMTRtTWtsR0k5RzdUUjU2MEk2djY5R1lGL29NTC95WXcxc285anhBeU9EZzFDZmhEaDZBNmt5OHdJb2FBV3JsSkZzSk5GQUp0ZHRDcjVJbWRVOVNpY1N0VzBXZWVFT2dwaEpCUUhweUFvZVhaQ1F4Q3RySWlXQlU1WTFJRjhyeXpVZy95WWZOdmlPM0YxNkk5dCtVUndybWx4Lys2OGprVjVHanU3cWxJd0tKODdZRzZVK0NpbEs4ajZ5TldidGRpZkplNnF1Z0RMRXVuM3BteHFnbzNaNGdQWGVpS2UwU3FIRy9GWnNQN0NlUGtUemhkZ3NlM1AvUm1zcm8vSnpYMm4yS044ZmdSYzZlSHgwQXU2ZkNOUjBsc0FWWEoyOG4rbXkwVVpPRTNweWptTWN6OXUzeHJJVHZnQ0p5VnJwRVptMDBhNmxQRFo3bFNna3J1bmUzcFhFdk1SbTdIdEFqK0FHNngzZVlBbllMWUlnSkxHMHROb094RjM4ZXIxYUgySjBERnBMS2hNaTNZamhyQlJGUTdmcFZxZDZ6TThOMVFXNUFxeXhkQUcrR2pZV2ZWeTJudlFwaWh0Y0dzeEV4ck8wNTlQNDlsb0s0WW9IM2lPRi9zS0RlYitEVEtUd0hmdTVGcXEyTDdLZnhpVmJzK043ZVlNOVNVZ29rdnkrZmRQOVR3N3ppSGxFQ0Z2SWpUZE1YTFdXaUM3UlBwNnFlUTJwbmxyREoxdlQ1dVFTWFc2TE9VZHE3bm1pTDVjUHErdHZ4YUt4bG5MWEY0UTkreUZ2eHB2dG9sVG1qeU5xcFpnRDNTWGFsQTg0REZPQ2h3N20wcE14a3UydHNvSzB4TjdPNU1sVUIzejBxeVRqYXF0KzRKOUgwbWNPVzhqSmdEWGhVaUthcVNpQzRCazNNZ0RLNVNTWVNQVGM4V2cvdDJKOFdHU2UyS1N1K3hKTDBiZGZQR2J1UUo2YWxoVnYxQUZTTHkzb0VnZ0lzL3Y1U0hzVmNub2NacDNFRDUrK00zL0pTd0ZvUk81M0VJYkZqVDc3VFBqb0RyNWlRLzFzQ2o4dUpSdjVmbHFGZUo5ekEvbzE5QlhKTGh4T0kvNmw5aXlZb0J4UzM5Y0tpUGlsVjN6c0xPdkh3VGJEdnVYMmkrODBXbG90RnhXVU9QZjIxMEFXeUxkYnhGUHlBb0hNY1ZIYVRqVHFyUTkxamhtNDBZZW4rSTJ0OWNwY25OZ1RTU0dlN2ZtY0dlS3pNcjlERkZ5RFJSdFVzWTRLUHNpUVdRbU1GaUdQYW45a05USnR0WkpBWnYzNHBuZUVCNVBnbUVCVkVEaklTN01mMzFNWWFkTml3QWZwSTZxZ0pSUlRrc09xWDFvSDNtR1Z3SDhrT2x0TDNXYWJObWRUam43UDNWQVBzQ2pJVUxmdXB4dEhQV2YvMlFBQkFCb0FRQUFCT3dCQUFBOEJDanNDQUFBQUFBRURBYmxBQUFJQUNRSUJBUW9DQUFNQUdsUm9hWE1nYVhNZ2IyWWdSbWx1WjJWeUlDZ3hNQ2s9PC9CREI+CiAgICA8L0JJUj4KICAgIDxCSVI+CiAgICAgICAgPFZlcnNpb24+CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvVmVyc2lvbj4KICAgICAgICA8Q0JFRkZWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I+MTwvTWFqb3I+CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L0NCRUZGVmVyc2lvbj4KICAgICAgICA8QklSSW5mbz4KICAgICAgICAgICAgPEludGVncml0eT5mYWxzZTwvSW50ZWdyaXR5PgogICAgICAgIDwvQklSSW5mbz4KICAgICAgICA8QkRCSW5mbz4KICAgICAgICAgICAgPEZvcm1hdD4KICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24+TW9zaXA8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgIDxUeXBlPjc8L1R5cGU+CiAgICAgICAgICAgIDwvRm9ybWF0PgogICAgICAgICAgICA8Q3JlYXRpb25EYXRlPjIwMjAtMDEtMDdUMDI6Mzg6NTIuNjcxWjwvQ3JlYXRpb25EYXRlPgogICAgICAgICAgICA8VHlwZT5GaW5nZXI8L1R5cGU+CiAgICAgICAgICAgIDxTdWJ0eXBlPlJpZ2h0IEluZGV4RmluZ2VyPC9TdWJ0eXBlPgogICAgICAgICAgICA8TGV2ZWw+UmF3PC9MZXZlbD4KICAgICAgICAgICAgPFB1cnBvc2U+RW5yb2xsPC9QdXJwb3NlPgogICAgICAgICAgICA8UXVhbGl0eT4KICAgICAgICAgICAgICAgIDxBbGdvcml0aG0+CiAgICAgICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5ITUFDPC9Pcmdhbml6YXRpb24+CiAgICAgICAgICAgICAgICAgICAgPFR5cGU+U0hBLTI1NjwvVHlwZT4KICAgICAgICAgICAgICAgIDwvQWxnb3JpdGhtPgogICAgICAgICAgICAgICAgPFNjb3JlPjcyPC9TY29yZT4KICAgICAgICAgICAgPC9RdWFsaXR5PgogICAgICAgIDwvQkRCSW5mbz4KICAgICAgICA8QkRCPlJrbFNBREF5TUFBQUFXN1dBQUVCQVFBQmJzWUg1Z3djRENBcEFVY0FBQUFBQUFFM0FFQUFEd0lBUUFJQVFBSUNBQUVCOUFIMEFmUUI5QWdGSFFFMEFaMEFBVzVWQUFBQURHcFFJQ0FOQ29jS0FBQUFGR1owZVhCcWNESWdBQUFBQUdwd01pQUFBQUJIYW5BeWFBQUFBQlpwYUdSeUFBQUJuUUFBQVRRQUFRY0hBQUFBQUFBUFkyOXNjZ0VBQUFBQUFCRUFBQUFhY21WeklBQUFBQkp5WlhOam1jb0FBWm5LQUFFQUFBQUFBQUJxY0RKai8wLy9VUUFwQUFBQUFBRTBBQUFCblFBQUFBQUFBQUFBQUFBQk5BQUFBWjBBQUFBQUFBQUFBQUFCQndFQi8yUUFJd0FCUTNKbFlYUnZjam9nU21GelVHVnlJRlpsY25OcGIyNGdNUzQ1TURBdU1mOWtBQkFBQVVWdVkwbEVPa2RTUWxRd01mOVNBQXdBQWdBSkFBVUVCQUFCLzF3QUUwQkFTRWhRU0VoUVNFaFFTRWhRU0VoUS81QUFDZ0FBQUFGdFhRQUIvNVBmRzZBVHppTEU4bkJvL1o3cURGOEpubUVua3ZsTVpzK280N3RLK29hdG5OdDdQSjBWQWMranNkSU5jQnRHbjgvT3BFNWtlUkFUMHc0MVF0OExnSUNBOHBCd05EanN1bzhZRGROV2VoVXJpVnlkN3k2QThTRFpLWlBYOUZyalJVbmMxalp6OGlOdDJodUEvQWhBT0Y5NUpHNW9Samtnd0tHM2lTbGtIemVwMHBGRGFjTExCSGEzRjFueWRYRi96cWNUQUhMU05zZjJmYkYwQU1pbUJFMlNYYjk3MHNFblhBbFlTbi8xTGpvVlFKK2U1TU92MC8yZ2NEQmUya3JGdGoyR0Z1UnhkM2JpUXkzK3RyV25pME9tRzcyNXhEZ3ZXSW5tTzZZQTdJdmdwWlk1bkV4L3RUbDR5V2JtU2FCWm5SRHVjektpb1VvVzhkbEFQdnZZczFrTTVKU2ZKN2FsRnhOcW1LUnV3SkhWNERHTWxRQ280RFJYN0JLbklZS09lalBxNkJzY3RWaGd0dHVKdmxvWG5wekxsTFlTaUg0SkxmczI3K2ROdTJlTkF2R0R6TUpBMVJoUFZrNXdQOWlUL2xHK3JkS3EvRzMrTTErUWVuOG8vUklsZUdIWUU5cnlucXdOb1BvSzVXVXB1c0lUcW01MlpLRUZWeVowYjFmenZjNkM1M3VRMXdaeGsvOFhhaWpnT2c4M2I1K2J0c2Yyc2djUzNwZUY3YVZIdXdPS0FKN3dYZ3RDekVQei9EWG5ydFVxdEJwaFFXRTJHMU9KeHM4QmRUcWxtcXByYTdvNkgwbk96Zjc5REZlSU1QajI5OS9QSk1ZMVdNWmNGNWhXY1RpcEhzenpjNXRzczZudW9hZVJHU3pEMjkrcGxuYzdSWFpWZjRPZTNGVjk3c1BxSXArQXpxaWRwTWhsMDc3cFlxMHVvclpQWXpPdHZ4elVSRW03anFGeHkrQy9yZjV2K0FXeXRRd1kvQ29qa05INHZhSEQ0QTNzUXl0T2tSei9YZWFScDFtdWdHQ0RmeWdIZllUWWx1Y0d3RitjYXNmVUVuNktsMnorajUxbE9yN0hIWkJZTHNuVkJ4c0I2c0hxcDdsVVFqMmtlNkZWVzJldFE5cjgya0lBTXdsQllhcXVKMnhETDd2bzBXSkYvUGdTMWNZNUo1TnRBWHVrZGNIazg1V2Q3QndwVnBEYm5naGs1Smx0aTJsVUVjQlZDRzZCVy9WUHY2UjR0Tmh3aEMwNDVXUmc5eUppdjNFdGJNTWhXK1RwTUkranRrNEpDNWpuYms1eU56YUpNY20xR1J0SGoyMUhPUmFKbUtQaDNXdXo2clVUQnhLZC9OS2ZlV2R2TkY2ZElPek1EQlgvZGQxSlAyeVZhRmJuZUs3MFh0MnVoSVR4VitGU2ErWXY0UHI4ZXMzb0tiZDlRTElrck56dEtjYVZVbUxmN01udmNmenZZL0tUeW1ZVXBnZkwvTmtyTnFZcVkzTitOSTNmY1Z4N0E2NnZ3ejNoSjhETHBUODNCU0xzTm45NEcvVEtNY0c0NTZTVXRIazRpN005T2I3eVBzT2ZvRzI1R3hLV1ZMdmJ5UFNjVVNDV1NJa1dMdjI0UWlyaG1hdmwyVEF4bnpSQ3k4MDZFZ2Era2paRzV6RDhnemFaVXZiZHdaN0dlZ0R5eVlld3JZejBleVRZU1N4bm81cVRqTjBua1VWSUpLblYySjdmQXRBdGp3TjVmUWRENUF6THlxdm5pSHdpa2lSU0hsRGhaZjZmeDREOHlJZktrWDBxZ05RbkY5aG5ON01keU1aa1dmcFNCN2FrOTF6eStoNldhOHBucUdBVWdPZEVaOWw4VTd5TE1wSEo4OTZqdXVyNDB0N0VjUFJYZldYNStlckVWYVd4T3kvalBaZ2xDakRPL0Jadk01K3ViWDFZYlV2Q0g4WUJ5ZjBLenY1Q2hMejJJNjA0WWVnS2FJRWtBZXg3aG5XZ2pSdExnZVpOcDFvZzZ0QW5xOEN1T210dUFPTVNUN1dEQWxvdnNPWXZiblhDdzNydEtmQ3ROWUZDdlI1c3IrOVVFM0x2RWVXVjJOY0w3Q01QRDc2ZDd1YmZxTXdnRHNob0VqUlgyL29VSk9kQ2ZHTC9XSCswMkRYUHVmeFdwdkhXdDlUckcvSnFoZmhnUERSNDFTTm5tblc2aThuM1FMTUNHbEZ5VDQwTGdQeDc2WUFNVDd5NTZPRDM5aldOSXZsZkNiM2tzc3JCcng4bFM1dVdyVEJwK1VpVjV0NHdxWlU3ejZhWUJMY0NudlFmb3A2QjdJT3VucFZtQ3FSNmJSNk8zN1lVVXpuWlcvdWhhQ2VKaE55TjNHMURSdHRmUE1oNkxpWWd1TlRwUVpzT3BiL2JDaTlCKzRHLy9tVlpUMEpVdGdGcDlQeS9tcGhYMnZLWUhmd2daUUhRVnZwV2JweHRRWEw2UHA3R285a0NKZ3NFSlhJQmZoQWFWSDVCMGQxWXVvSWFKOWFEQ1RkRW5MNXk5MCs1MFlDaXB1cU1KVTEwV0lKK1ZWUHB1S0VseC9STUtLSkdvWm5JS2FsMGlGWUlGRXljYkg1TUNYd1RXWkNxNjhLb2VoNTBLcWpQdjA5RGRIejNUM1hyZWhKVmJnb242SzBDOUhpbmdtVFd3QVpyV3pwVVVFQUFGWWJKSzVQek1SeXoyUElSd3FkN2R4d3JMYWk2SGhkaVhCc3JRQlAwaGJPUkhMQ2lpT2Y2d3p1MnBRcXBsUGJPamNaa3p2OWhLd0NNWWNuajA3K0J3REI0bm9wRjYxQ2t6UEhvMU9XWkhKT2lKVHA2RFFjSUZlS3NaMUd6ZXJWbmZIaWd6SjF2L2ZaeXg5aG90N2dyMGl3TDgxcFprRVd0a241aGNwRy9icVk3NXBkcGoyZjgyUHhQblNjZDFRbytqUlBYOU4rcHQzV2RDQzNjZTEyT2M2eTdsVXJ3NnVYSVF0VnozVmdkVDI5TzBDbGgydS9Sc2xaVHNTWmh5KzNFell5eFlySm1DQWNxRHM3bVRzamZJcFNtUitCeTE0UEEyM2lJK2dGa1AvQkVtWlo0REdGU1RrUTZYN0ZISnorTjFQN0dBNjVIejBLVUMwaFNYRzRrZTBiQTdXcW5vRENVQUZjMTJJV281NDhnUU56MUV0MU5nbkdNanJIaXM2QW12L1ZiQTllamhSNHVMbkczZmlndDFkU0ExbnJVRjNNVGQ5NnFQUm9hS2w3ODEvT2pmWjZmWjg1anEyc1RoYnJQMEVGQU9iaVlWSTBFSDNHS1BrNG80VWprTzVKaktyelNVUDlsUHpoa2FGZHhOSUZZQjYvSjI5RDZJc0pmS3QyUElVQW5JMW51dW5uZXlGQlhlZnl1NjhDZjdISk8wSFVNbDVIMFFqaEVOTmFhc24zSlNDOTBKS3Bqc2FVTXVVS2FyMmRUOVlwajVyMjlQRmdWQnVXYnBTNVdRd0VkU21lRFVKMFp3M1lyMU1NUEFUcndWRi9KS3h4clk5WGFRWUJiZTlrdlNQMHlwemgrSUdyZ2w2UEp5N2dBZTBJVWVjR1FyRk8rZlY5aDFmNnZiZjMzTEdydUlmTHFJcGlRV3JoQTRNdWI5c2I3UTN1bTdkMXJzTjFZMkRwYUlXNXk2WFRkMTB5MXpQZStIMCtIQktFMWVPeGRzcndUajg0MjB0MVNXcEVhSEVtcnFhTXhyc1Jjb3hMa1NPTktoK1lJSUUrWlFiNlZUUm1FYmg1Yks2dVQ1bjZUUmYyRWd0UVV2VjhqSEpsdllqbmRKR0lWYWZzV2NkcjFva2VvZ2c0aElJZVNzSG4ydU5DSm0vcFBoL2JVUFhRTnNBQXdzYi9WSWQ3eTBFMjNKNzFqSHZXckxKQXRYUDlWS3VwTjExZ2F2VnNROU5IOUxaYXcyVDJ1U2RRMnVKSHJ3QUN2YllMUGZpR2VDTjNFZDZneE1menBsZ2dBdWtjMVlkUGh3ekFmMk1aazhZTSs4N2drWDVMTC9sd2hocnUydXBjWHkyMUNtRm1PN1lSbTdRZlFtUkMxYit0ekFaNzBXcktTOFlHYkVWYWozSWRFckIwUU8zU01SL1QrYmRDbjlqZ3JBZEN6YlJxR2VEUVZ5OUJkejg0RUpaL0wyQjN2Rkl3bm95YU1FU3gxV0ZyallXb3V0NjRsQlpxOW5kazFMVTFuWVMrNi9qUkxJOThVczFsWUtuUzBGamNER2x4UEZXRkpGS3BkSjR5VkowSjRQSVMzMWdDdUF3eDh5RzA2QjFQUVFxbHVxT3BHRzBRZCt3bXZzb1pST3JwTElKSjBaZ1JybkMrVk11WVBZYlNxRHJBQVROOG5hNHJEQTJJRlR5Y3BiZDBhTG5sYk5aYTI0WE5PT24ramVGVE82ZGkzV0liYWhJNzdDNzRONzU5bjdhRStpUTRsQXlkNHc4Wi90OHpQeTNFT0RNTmkva3VNdTRYSHdFZ3JtNzFSdHFjSW9hZi9TQ0VkL2FGQ3NFc09NUHRxMmdOQ2lveTB3RlFkUzJGZUczMDA5WlBiTTEzV3BxTzk0MUEwRExqNlMvbU90RmF6TllXVnd5OXNBNmRjbWpseE84VTZ3R1IyZmRkVENsVDQwT3RlUm1iVlpVaGFQSmxUMEtYRlJVRzNSOUF5MUkrWERSYWpneWN2SnNmNnRvRVhha3FTNEhwYzd0T1AyRnhZNU55K2JqRVpyTTU4aUtXYlNoNmtKbmExbmZpT2ZzZFJwTC9tek5mRXNyVisyUU5NQ2o4Yk1Ia2FXK1J4d2pjSk9HTjBNaWlzWVdLK2Q2S1d4T1M4MWw3VG1QZnc1RlFWT1hBWGRHYjNlRnRNTFZyMEpVcEtsbzN4UFFOdU1RaEs2Y1ZPaE5FRmpWbi9MS0xHNFNER3E1bGFXS1RJVC85bG5HenF4QTd3M3RCMk44Y00yY0laU3NlUlVjYjBjQkp4Z25Ma0MydUxSL2RxQ2hJdzdIdGc1MXpSNFh6Z1NRS3YwVzcrL1A2ZGRJd1Y4eXZrQlBLWkdFbUFPTmVRd210WnVjNW5xbHRtakxGZGpSQVZLS2FqUnZzOUNubXpUQlllU2Q4ZGUwYmtVU1VPMmFpSGtCQXBQVy9SVDA0U1lEa3FmMmtScGRGYXZwK005YU5DWmxhSFFJTDhYWlZPbTlGV1p4ZTkvdGZaYnIrUExybWcxcnZuQ1A4cWJrOVJ3M0MzSnRkYU1tSW4wNnRPOWJSbURuY2NEVHYrczVyOGd2T0NsUU10QzhIcHBIMVBCdTh6WGtVTUFGd2poRkNFaFBib2VHTkNWek5LUHQ0b2ZSUkdURFpjRW1BNFFMOHdUcWZtcFFyMGo1QUFqMnpEZVdDUEM5eTNRa3ArKzhmVVFzeS9SeFBKMm8xU055d1lWY3E4WTExdTYwNDZ3d3dVZlF3WjR4a2dmN0FRaXBKT1h2MDlYK0ZMRFRoVmpMUjlyQ0wxN2pYY2Q0Q2M4WGJGbG5ia3E2Z2ZCY3JVRE9PSmwzUXY4aUNHNVF0c1JBS2pOU3NVREQ1L1kvMEdpNzhjSmhYOUNBSUZTd2xHeHN4bGpmMllRMDlSVzloSWlhcWpuU1BXc1N6ZHZXNzIvc0hZdnQzNEI5bjZBZHBKczEyK0dwL3ZzYmx6aTFFOUdScURxeFV6cHV4ZkoyOEYvZk9uSFNuRGZoTDZtWDF1RW1MeWRxdEFJN2dvWXN2b09QZktvZU1kcXA0LzR0TXVUTkZzYTJNTmJybHl2Wk5nbWVrTnpjWDM5UnVDdWhReFpsOFU2OGVMZGJmNy9vUzJXa3dEZzdiNXlteklBNmNRaFZrSlp4bG5xOHVFVEJlWXZibzZzeWNzVkloc1ZnSVFxVVAyTldwSlg1dWFPcXhsalEyeC9wdHZSYnNQK0QxQUx2QlZSSmhzWS85RXVTbzd4Zm1hVEVSVkEvMlN1RTVvcmdORTRjd0tXeG44M2tYN2ZRQWkrek5Gc2cvM09aNys2MjNTT0wyN2gxRDVWQmNvU2ViMjN5bHNCT1hVSE40UHM4MmttTk90Rmpmd1FoYXlYS1orRUNlME9yT21YR3lUcnVuTS8yelR3cDg3a3BvWnZqODg4T29sRHVST20yQVRyRUlIR3NhcGZhNzh2M0NLZU1XNTYwdVhpMVA1YmR4NjdGRkhtK1Rjbm1JRkFvckluSWhHYVFMTDdubUpldjQ1eHpMQkN5QVdqaXJhNVZPckxTaURDYXo5WTFOeFdiOTExbm12RnYwcVAvU3FIOVpZUUtkUUkxN1padS9LSmFKeUlXMzVNdmdrcW83REh3QUw0MXNOZWF2d2IvcHk4T0lBY2JjU3lRN3dPR1NyYmcvNnBJcWpTUVU5YVdiZjBIRHFBbFMvQTV5VW9FSEJzK1hBVElaMGZQOEc0bndhNy80QWUxSlpPaGxFMU1XUmIrc3VEaGxqSGNyVXdMekRXUGdwb0pPYVN3QlhwS1lUU2JUZkJTQm00b1RrZ1JTcnpyeW0xak9MeUlvdUU5bTZIcXl3MUJ2KzRlckFMbC9IQ25POWhVYXJ5TXdaZkc4KzJRMnlZYUVoRTVoaVNwWW93ZlFEOFZqbmxIT1RyQkUwTTZnT1MxcW9KSGtaT1ZZYTJZZURmOXBiaEpUdFp4UTZJZTJlR1g1dEVPN0R5OXZEd3VJZHR2YnZMUVZMREd1K3htZVVNaVh2ZTRCaUptbURKN1BUdGZGMDNIeW5vclNoWHpLc0NFd1VGUWFldEUzM2Z0a3Y5THdobERPb2JRSnNCMVBrbm5GU2thM0RxaTJuTDFhcERZS3lhNmdQaU9RTUdVdU82eFJxWmNTbkNuem0wRUhYME0vOUtCMTBPSmZtcCtnR1FZSlErUGVHTEE1UW9JRVUxMUhqNUtSeURaREJEVzdSUldnemVsRlF0aDBoS3dTcjQrT0syNHk5ZGpjZUNRaWhGa1JUWlMybk91VG5ybXRlOXo1NHRQMm1CTjdLVlhQUUQ0V2YyWCtvaWVqeHhqL2lwQm1Paml2Mkl4NVBVa1d6MEpBSXlvN1dJbUdIbmpkTUtSZG5lampmZjRnVUxtOEZnUzBqKzlZaUlnQXFTbFpkTEMySWxkWXIyL1ZMSkh3bW9FMnF6a3hWS0tSdzJNQ1RXcElLMUprb2pLc1RmZ281bTladElzR1o3bHlDSHEreXErOFdMSURnUmp5R3NWa0ZXbmpuTDMrNmNWeWVWVzg4WmZhUjdMcTB0ZlpYVndLMTRqcjZrajFDUnB3T0s2TUhVb1VFVW42N1pyeUU4QnFTU2dKLzZvL2hmOXc5YmRQSHF2cjF3MStFdFFVYVJnNHJzSTk5R09UZmNJN0FtNWhTemlXeXdQcEhxSDBhbldRNlRaUytHWm9tdzJ5aDZCdHkxd3RPNGxyL2QyNm9ZNDY3d2V0Q2syNWZ6ZHZReU5TZllCOTRiZTJ5c3F1eHZ6cTRaU1NGMGliL0tiaXk2cTU5aUtPaWg3VnlUcXN3UkQvdHBGU0JEdElvbk1ZVFM1SExGbnJMLzJHejBRd0ZWZ2w5WVdBVzcxZ25zR0dFQlJvN0dzQ2RXK083Y3oxWENrd0J2L0o5VXNmWis2bkZpWHovTjlkNjhmWTJjZS90dkN2UnBXdnZrRGZkZ0tMRmxoaFhDa0JYZ1JLOXEyeDZqaXlXTXJFY1N0UTVKeElpbnVqbTJ2Vm04VnNOYzNFUUVOMERtcE42WnMyN3VVZjFnL2NRR2NoYjQ3ZmZmNnBHTWJLME9mclJlbjlpbWtBK25XNkFQL282UXUvNFBRVXlzUmNIakROcVNRSENpbDMyc3lQQUF2YklsRzNQdngvVWVxQ2RRVXljZ1N2UDVCWlFJMGZlRUJWaS9JTlIrZ0doWlRTaDY4dHU1ZGdlZXRhYkhzSVhVSlpRbmNXUVV5Y09lcTNtcms1REJPc0hVblBPckNhbmIzdDd6QkNUR2NTZzJwamJYVFllK2FSUnRlVkhxWklOZm9hUFhBRlFHNXdRc2VKL1dHVXcvam85bHdVd1VydHlzSjVFeWRIaDRyUXlxVjd5NDJGTDNRcDBWSzhrcjNncDZ0YmtCZW5KQXZFZHU1bit1T2htY3ZPcE1rR3F1bWdXQmhOSWJqcVpKUHZ1aWUxdVVJY0cwU1RTYzlVZEMvdlN2SkNnTnd2V1h1UWtmR2NqU1hmQTJlMUlyNWJlaW8yVElPcFhjVXVaMmRSSXhDNDg2MUk5R3BrMUE4MnpOWXBrSDV0SjM4LzNlY0lhUXRtTnNjSzBUemZEOHJYQkwvSjhTbU9JUEFQcjZ3V0FGbzFTcTF3K3doa21qUFMvdXNiQ2xsVXZHcGYwQXlWdU1Ldys4eENNM3BBemhDRkxmR1BISlRTWEJOaWFkcmdpNDV2L2Q5SHRkbFlwT1pKdkhkd0dmKzZ4N0VFUm13d3BiL1ZsR3hLM3BsdU1INDUrUFpZYm80ZmppenRRcUoxVFVPQ3FWZXVBUEgyM1NWaFkvd0MxcEJoSjJYeWhTOCtHZnI1bGZHVnM3bUk5Z3NZTVdzNVpJYWlCSis4S0NERVJCSnYxQkpRWEJUNGhNL1R1M0Q0aEpndUVHYktTTW1WYzJ0R3Z3bm5RY25KQ2FqM3Y1MWY0YzFKcHk4SEp1eEQ4VjlEL0cvbW1sQ3ZOS3I0U2ZtSmtNYlJkK1Z0VEI3ZDRnZnlRUXgwV0VjcXRqS1dVcFhLWDBwcnNFQ0x4Ri9QdS9aQ2NYMEpjbFRVZVdtc0xMd20wd2UzOUl5YklmakFqNnRMMHBIL3pyNytSK1JPZEdHd21DTEN3angxQnkrU0czNVU1RGdmNU40ZnhBUW1UMFIwTUlFaldFWHVhY0lVWjJzNDRkTDR3Vk9KYlNqVE4zNm5mNXlkdEVzMytYbUErVmJMREhYaXVzZGZrTFozTnVCaTBSZm92a3I2QUhBa1dFYmFEcStteG40SWExTU5MM3JDWTM1OTJXTW5yZFQ5T01sRHc3b21TZ0VHRjZoSjR6WHZHVVNlU2FEdVo2TEMvY0pVWTFUNDRsYUtNd2hUZWR5UGkwaEtnT0k1V0lhdkZMenQ0RkcvenJRMms1OUxVTllQRmliWG0rdFI0OU56SWlYZzJJejdhUnhzRW1zWHVXd2srYjloam1YMU9MZ2o5NzJPbDZPTVlIRXFyWTdZcmU1Y2Q5bnV1N09kNFlSNUJMR2JuL2sxYTBvZ29ZUDZqakUwOUlJYU5zdm1nd3lmM201TTd5RElEdmx5MmkrYXl5Y1VQYm9tYmtWRnJ0WkxkLzBCazJRMThLSzU3eno5SWNNandQODZIbmszT2lFbDJLdm43ZFJwWGVHbzlEZFRZanVoR3JHMTFydHFEREREaHJLUkJVUDRXbVhwQWZPczJ3bUcvdU45Ni9SajZOK1UzRi9Cdmk5cEVHM3JaSzZTRCsza1NQMURrMVFGM2FTVjZOTGNOVnhGTlB6d3cyUGppSGsyYWJ4RTB3VHlIaVZkV1NOZnd1ZFVJMTJoV1B2NEFYMktoNjBnVFB6ZTFQWlBJNUlNaDFYVzMrT2J6WHNIV3NyZjFCM2FoZlA4bWRzRC9ONzlOZ1lUdDNBMzFDN0Nua0NsWTgvOFlXUllYUStQM3kzUlp4N2llWXBtbGlnSUhMb1hGL3lRNlBqR2U3cjRIK29sSDgyK25IOWtRMG9DUVhVTURuUHczSm5BMXFXZFh5ZHphR2lVUDI1V0VxN3lYNkd6N2N1Vld6QW1lWWJreDF0REdmMnJmajRacVdlbW02SzE5N3QrMXl0RWJvNzcvYWErTGVRRC9TUzMrQ1RHZzk1c3JSTytIVkZWTHZzY0hSVDQ4RVo2T25XSFZMbC91bFJXdVVxVjloVFpMQm8vNDE0SVl0d1Y1cHd4NFFMU2xYd0NwR0IxVyt0MXFTc3JiVzE5SzM0VHE2dU1CbHhhVTk5Vm5KNWRxSWNFc1lHd0JKb2dJL1V2amdHalZDSFArVGtLNzlNWStnZmk4SWJndGJVN3dtNnFUY3NDQ214dVZPWEQzcGxvcDhISHkzQVIxeW9aZWh0Y2RIdEhqZDJVT3JHQWZ4N2VOSytmN3V0eHFPdHFCTU1PZTYvVDNtSU0xRDQzak5QODVSY3lLLzE2cjk1ZXR1NUlBNzVORVlialUwbXJ6VU9VQTkxNlJRUTB3bk5GS3RhUUo2TmN6SFRycEpYTW82cWduendzaGJpY3VCM2lsZTltUXRyZ0FWS20rb1BlRTY2QUNSK1VidUlaWUFiVkc3YmRWR1RhVTh1bE5KVy91ZWZPanRQUVBuQWlmRFY0bGpaZmNBTEhPaEo2L2FyTWNIemVuRWVYYkl1RzdwL3dsU2ZsUEs4emREZENnbC9MTC9HWjAzeUVKOGFkek8rSG1sa1lLMC9sMzFXeUhOQ25KUUwzNngzbXZDRXRWMHVvbVk5Yi9PYVZPNURVYUM3SFBkWi9HUnV5M2R4c1lKZlVxMElsTExwMW1uNnVoc0ZGS1l1Vm8wNkpPblNxV1RMbXQ5L2cvK3Y1Q1JlNWNDR0R2eXNxZmlYdzlkb0ZsVVNpemljaFZNZjhTcjNkWUl1L2JOTWtsT3Fzb1g1UzFlS0YzQlM1OFMvUnZvK3kyTWk4YnV0bWJFdXVHSEhoVVVNaTJ0S3JsRHlBUExVTE5rcmxid1FwKzJRMWZmcENBNTEwQ25kWkhGRUNDR1JualBjQmFsVjYzbkI4Ull6YWkyb2RPeS9XcFE1YlZuYVZsTk1NUGdRR0tCN1FYVnFGeDkyMUN6UDVwckwvR2NubzlxT28xb0VSVU1xOXRMSkt4TDdnQWVBSUZVSy9lUUtDZURIVVFGUVdHM0J1WGVxQWVsTXM5NytnQmFib1RwamRyelJBRlh1NWlpcVduVjYwUHBnc1hxNFBtWnhVL3ZBSUtUSEdoa3FLMXRXS0hzVXM5TG9aVWFmYjQ4ekp6VFJFUkFVYTNsTWEzb3YyQjMrbWd5bithb0lZTEZYYkcrS3Z3bG9RTThFZ05wN3RFclA4ZWRGT29XcnVpTkxxcEdwdUVmWlNwb3NML1YwU2lHWk16eE9QT2NFNGlvNHp4aWlxbGhXOEFwSnp3M1hiT3JsTjVyUFlUeUNseVZoakQ1ZE1aUVNiT0l0TStCclArMkl0OGlteW85aW15ZzZWYy9ZSUt3bFZZNFg5Yy9IbXhoWUxmWDY3MTBYcHNUVFhGa1Z2bDN2cGZxMDFSNVRYcnpjaUZjRGF1ZWJ5VE9DSXBTazhmYTRjVmpWOUxldlpWQlFvbmx1WTRqTVlwNFNReW80SDRXS3YrRWFhMEpuYzU2eEFQV2tuUmFtb0RUSWVVdGo1V2srL2xyNUJGNC8wZTdkK21iRzZyOGV1RVVaZnZicmFSZXlUSTRoZHduY0w1SVF5M3c0ZnhhRkVjUXZhV3BYcXVIZG1haGFiVUF2OXBDbDhMVjBaVzVoeEROVHphYVpJZlhIMzlleUZYT0N5ekplK0FJeUdMeWQwK2d3bXh5MU80aVphQjhRZ3lEbVRKSXJzMm14S0xnMFgwNVN3WW9GY2tYeHJHMkMyYVFpb1pWc2kzbDF6MlcrY1pZZjhtWXBtOGVUTHhaSjhvUXg5b0ltdHdUV3NtWm5uMURWWHQ4UjVjTGhabHhoQzN0VEFkWWxNNGp5Y1BaVHpJeU5PcE9pQ1BRU0RUTzhzQXVHSFI2ZWhQbWdlSmhNN05NQTYvMHU1Q2RhTTBUMUhxK015Q2Y2WGpjMlMvK0VUU3lDOXVXUFdza3hJc0llaW0zZ2VGZzViYXgwNEptenU4VGt1QlRkT2NubFZkT3FIVE5QOHdPN3NsNFk5NVZJWXdCOTRhRGthL3FGanZ2aXFJSDdUM3BaU2h3YUx6bDgyNE1Wc2I0UmRkYUJKdlZZK0FHa2RLZmdlcWhRZjdic01SeEd0TjR5WGZLTzZPZEJlNFlsR01USnladkF6VnJqNWhObndKYnQ5bzV3cEVGMDhWM2JNeC8xTmtBb0RmdEFvQmpDUnRIN2FXYitTL056TWxOZkhqSFA2K0hPNE8wUGJJSVg0a2RZWGpWaGdseUxhczA3ckZCc3M5M0JCYTIyK3E2ekF1VGtVMXM4UTg4dTN6WDhwbVJSK2UyUEZ5NTJXZ1BUNDl3VlhwU0tYNjBHa2N1RW8vdFYyZXhHa2dYb1hFN3gzU0I2SjNnNGRRTlRzQWlmN2J1T2FCRWRPaTJabGdxMXByc2dNNi9DbWpkbXZPRWVSdXlDdVpQN0Y0T1F6aWpCSHg3Y3ZmYnNpcEsvOHBnbWdaMHdJbmZvU2JabGx3Tno5RGlIWWRjSm1xY2RjSmpGUUI3U01OZmFqRGtsYnl6dURJc1lLUDI4YmNwcW9zVVBzTWsrWDVDWTlheTYzdzdOcFlhdDBOT3J1M2R0SVNkMC9tN3prTXlPWjArckhoYWg0RE5Lb1VlaGVlVGRDN1ZOOEVYa1ZvcDUvVU9YVitZeldOYjhLWlFENzhHV3d3SVRNanBOVG5iM01YeGhLb2NxYTNVS25uOHltRFFROFBkbUNpN0FWK3FvNW01MDcvSVYvbmJzVnFoWkxiek0rTWhlanZqejdENU04eDcvNnplc1BRa0ZlbHVqYjV5OFJmQU41V3EzeVROemxBRllXYk1RY0pwd2xVMkUzOTBYUVJ6aXhKbkNPalZRT0I1QjFEZDBGUGFKWTVIN0J4cnpaSC9VbElFRVpGOVhtenppKzRRbTN6YXUzUjVSL2lkcHpna3VJb2dWZW4vUjNVTUZWaTFUNlYwT250T2JWNHJyTnRRaVgzdGdmMUUvUUNKNXA1czB1Y1JQaU9KZFlzZFV2MytBYWJIUzhFS3NwUmFmSi9VRnVnOWxDUUNNRXZCcXgrNXZaWHdFQmZuL2JuS0RaN1ZWMlpYeUlPb1l6eTRoUzhuOFlqREJNYkdvWEsyVGhFY1BOaDNwcGtvemN3bjRoNUcvYWdScFZPdG85WnJXVGgyMEdXZkR1V0hNdnBPWWNHWEFmU3lVU1BNYzYrbTYzSG93aEk0bmoxNFdsR1Y2WDFDT29wTmxrQlNSQVRBb1NrT0hQUmZXL0d5NkQzejJuNHlkaVdEcmxWZ3dzRzJoMGZDeTBvMzRYRnNOTXRkTzZ4YjZqVkFPdlNGWkZXYTRoQXhVVDIwaFMzMUhkZERhNHBkdW5lNDl4amVlQnVDZDRUZ3ZudEo0NmF4cEx0ekx3N2tXcysxUnBBNnVsVklwQWY4eGxNTU1BWHlObDNnV05pR3V6RUFLWUxzM01OcENrZmMzaUhRMnIweU1KdnR2aFpkSERiWWlHYjNONnJvWm1YcjdSNW9YbFhyb3RmbjRkYWJ2bzVpMStqZVNodDdtV0h3bk1kYVltTFMyT1ZDV1Y4d3p4dXJTSUxLL2ZPSnQ2aVFQOGRUTU15bkhnWGJON1ViR1BzYzNRZjAyWjQ5OHZFZmpjUjI0YzArOTNwWFBwL2dJQ0FnT2IwZmJyYU9iMzhBTnRJd2ZoMlhpOTExL3pXNlZWRGtldlFDTEEzZmU1UlROdzF4L2JaYmdpeDNHRVNqUjEycUt5TW1ZU2g2TEZjaEc5SzAwVWZjZXhrOUhwVXdqSEI1VDJhT3grZnBrYm1zdVVyS1BNY3pSNlNSVW9DVGFWcGtIZEV3dC91OElCQW9vZmk2WEl3U0dPdW9mV0xqRFY3UXMxZVVwZzJwcE1LNHVXQXJBZ0tQUStuZHo4Ykx1WFdHVkdFWE1XZXNteTI5ODVhOXB5Y0ZZSysrc2tHMllzd0xhL1NKUjhyZml4Z3FHOUlQMnZjaCt2QTBpN2J0Ty8vUjdXVFNBUnlzd0hrazJPMWJqMW9TWUdpcUsyekw3R3Z5ZW5hMFRFSmt1NmZQVWlMOEE3WFlTMko2N3N1clp5aXZTSGEzZmlMZWJwcnQ0K053d0hrVzI0ekRBQVVOWWdZb0lFTkRTZE1aSDBrY2Rla0F2NDRMUjJYYTRHOTBQWEdUeEVaamtVUnRvUEEzaGtveVh0Uk1zZkV6cW51eStadjJVamdNellZTHZ6M3FRSHk1UHFSR0haRjhaenNVQUVDM2V2UHFTd01wTEs4NmNzWDMwUGh0eklVZkM4TS90bWh2cHgxYXhjRzQwaEUwN1pEQmlOUXl5SXhHWUdOcEVJbzNSemIybFY1N0V2Wm14TFRsZ2cwbGJpejNGWEpYeEdDZGhtV2dFY2p1a0NMUEFsVElGV3h5dVJRc2ZORUJ0SGtjY2FCay9oSnhWcFNzUVlkNDdOWXJtMlMzckZzalFHMTRuWUhQckJyL3JLdmlWZjN1RG5uRStYQUpKaVpHVWV5aWZqU3h4VkNKMVVBaUtldm9Yc05LR3U5RHF0VHQ4TWFqOTJMSGRGNE9RMEUvem01aDVMd2I4T0VkTzdOWGhPMFhwTUQxTHZuRDUzMk5Pak1sRUU3MXd4U1I4STROZ3pQU1dVQVdXZk5aUnF3S09GMldSWGd6dXVpU1dUbTl5Ly9MVnlkTDFCaitSV1EzM2ZlOE9RdDdod1F4eElPSUQzajlhV2RXczNaQ1I3Rkl6MGFwaUFjbGhZcWZEOWhNTmUzS2h6WHZFbFFQdGI3MjM2L2plbkEvVTFXZmc5TUZsK2R1RWRJUmpBdUM1Z2NUTVRhZTJrSkFWektXOTFSZTFHY2xaMm5IV1ltVTVibStVa3NNUXAyYWVuMW5JeEM4RDc5dFBvL0xubnlSMWFoTktSdkhrYmxrVDRVQk5QbUp4bHMxbEZPa3VjL3c3c0JraEdzei82ZUFFZUxuSm5vS2NGU1ZveU9na2hJbHkrMUxISG1seklBRGhEK3dadnAwTVRFeE9nUlRXTCtkcDJlcjhuM3JncHRnMUw5OFpldFNLSHducEJVSjdOTUEvY1FhNkRqM041aWxQWUV4NXlvZ1RPQk9mSjIraUpnb2xUN1c0UzFDOVpyK3Nuc1hMUy9OdG1DaHJwQ1dsSGFOWGgxL1ZibmhJOUVRVy9KMnh3cXR0dnJ1SnZoeGZhRC9tblVIUndtdUF4R3AxMWZqZ0tUMFYrdElWRExGeVZzVktoWTg0OVZ4VVlweXdxdTJLSll4RWlFSmpaNjRSRGxscEtWYm1sK084bWo3TWJnODdvT213bzBzdXp0NjhlVnR0dWl3ekphbnp0dS9RdXhuaWdadHhoeVVxSGdhK2RQV1ZrUmsyeUhFSS81eHQ1TWQwZXdNanNkZmhXZFZ2OTdYUlVwcEN5M3lYRStBWkNJZlEzQmNwcll1WXNnV2hCRk5UVy8zbmkybmVDdll1UkcvRGh2L2s4aGlJOUU2QXl0eDFhM1RBeE9TemNJV3lJeTI4S0dZRzNIcW5rY3NIaGE0b1NuNWd4ZE00RnZpam1IRkhWdzFFT1RHcTBiNHRwdDlJN3RpakhXejVyRlFobGRBcTlvR3lMc29pQWVNNFMvZUlrcVN5a2FRMjRTZjZhcTRDR29mL2haMGNwckdiKzVTUE9zSGN2VGpHSXhTa0tBMHNLakN4SHNodDg3MXlHbEUwb3pwWXJuWkEzSHY1cklWNVhLTWpZRDRXWHltRUFUM0U1TzRTbDRmU1c4VHFWS0hEU0RnNGhBaWlXRjlOR2RrZkNRNENIVkt4K016WGRKSXQ5azIxQVVMZm5XRDJ3dUV6TUs0OFJ4VWVORnA0cSsyUDRFZ1M4Q0JnNy9UQllwblVQOVdQbXZjcy9EQlI5bGl1Mi9PeGJhM0xFK2MrcGc0VVlkS1RpWEVnSzFLbnZRTEtQOVl5OE5UK29XS2xWRjZoTHhZZWx1YUsxSE5XNkRUaHdKQkdhaXFuNFRXU29CdE9WYzVxWFZNMkFlRjRuS3kzQk5yTG1LZG1yS3BMaUJhSElVRDdKUzFUUTlGWnJFMXF3SFpDSmtrRHdMU2dJZDA5bXhjdDlKR2RPbDNJNVI3VUJSc08yTHRDK3R1dGpKNytnOW90M01FKzFEa3Bid0JIUlBraTQ0UVZPdFB5YmlreHhoVXZacndXWkhvVWNqeWpDZC9CWDNqRU1zYXpKYzEwWVR5QjluQmptN0tPZWRCeVh0c2pSUFlPRTFFdmZ1N25saTJVd2RhaUhNN0dCYmZ4THltd1NOdVdWS0dXZk0wcXo4MG9LLzFrMmdrNkpSdVdQYkJCSXVHUnNZUUhPNGdUU0pPL1kvMnRVQlQ3dDd2Tk9nbiswdjNkZG4yQmxmendLMUFEYVd4eWFRZWM3TXV0VW1pZjFORWlGci9rVk5CaURoZGZxUGwyZTE3NGRrZjAyRm9DV0pvbUJlL1UwRGN1OHByQmZxMVVzV0tGaWZiNXRRZERqdHdrNmZGdW13eHBjeE42czQ2THJmZ2RXaStFejdOOWhVVDMxcDFQQVJjWFhRUTFCZzVta0FsSVE4VVlreTNock1rZERpdGVObW96UVRtZDN3QnZNUmhOODI2dUk1bXM5SFZDbE14djNzTXZkSTYvc0QxY3BxVDlHTlhWTzYyT2FJdzY2aVJ0dThIK3JjdUtocG9yRVRyV0I2ZnBMRFBFQnJZakl2am1RYURGZjArbnArcmxodk9ZQ1BTeCsvQjlOMDdtY21UL09PT3orREJ0YVYzY1o2aTJTc1NRU3NTaWNvaWNtZzIxUHN1bUcvU3NQUG9xWVE2YXVyUFVMTCsvNEhsVjIxSUdUOHlrSzByWE4zRHBHUCsrR3A3OGF1UXpRN0tqNXBzeVFRM1BnT1o2bWgybno2d2lNV0F6UzdYTjU5Rk53aE1ZMzBnQXQ3c0JRRGk2bUJUdHlLejBOU2VacVp5YXBBZytmUVhoZys4cUJZaEJPME5qd3d5LzJCNUlpTkQ0UENlT3BybjZERkM1VzNOdGRhOEpUMkdoSU1UNndUZk9OTEFnbUQvMGxtTTFpblgxaWh6RENwR2hGMUJyT1F2MzQ2ZHJMNGQ1M2l2M3pTOWlEM21Hb0djOEJmR3ZuOHdpZ2JnWFAvT0RMa0htT290dWVZZ21PMWZsZXRVMzJxWGRhWlRsZHY0NDI5K2xLMFl4UFpJZ3UrQWQ3aFFZamo4MFpKeE9DMERDR2lXU1BVbGJtRklrUEowcytmd3hYZk96V3ZzVkkvTU9JaFFiWDFkT2d6L2NlbnM2dnhZbGpJVFdrNXk2VlpvanovZFM5NmlCOVZlUkMrb3VWcFR0M2JYdmdTUFNkY21Ib0JUZ283RnF0VURwTThTdWNoV1JQUCtld240RjdPdFkyRmxtdjNMMmN6TGUxcGdtbEViMXcySjlSQUwwWmdsckpvaGwvQWJxWCtIUkxlT09IUkZ5UVpQbVgyUFQvMExSRWxHeVhwZTFnaWhTTGk4blB5RUJpUk5uUkU1cXFSYjdwUmppTnQyd2E2aGFIdmVDVHV6VkNFaXhsQk5aUFRpaHM3VW1yTGxOdVc2aWZqWS9UMFY4LzVLbCt2RFhjeWxSN2NxSGVESHlDK3UvZW1jT2RER0Q5UENIUnZTTUZ3ejZJcmhBMW10WHhmaVc3UXJMY0RDeVZnWnJ3R0Z3QitPdENuKzlSajRSUkFiR3VydUlvZE5SOWMrc3UvMDRORmNDblBTOGNKaXJub1VtaExGVkd0cC84enplenZnOXlZZ1BrN1pjR2NXNW5WUDFCcE02b2ZBMVEySGkyY0ErYmV0WEpGRWVoN2ZId3dmdlYyclM0dDFwNzBEeGZFUUtFQWY1TnBqRWpSeGZ0d25mQWhUbEpEajlCamRDakFRUDVCV1BNZlVRUk14WWtNNlVXcmV6LzV3TXJ6dm9wTWJVeS9CVDhCaURJZWFoMU1XZTZGZjRwV0lOelU5aGtHRndkYmZMVnpzOE83ZjFua2RFSUZXZUZ6US9RclYrb3pNNkx3QlRIMjc2M0V2N3lmelNablNHaTFKYkIwT2xXWWVoTkJTVDJGOHZhVGxaNzNJVks2dEhEQ1hnajdzOG03UVJTNWhOUlFqY0VJRUh5M013ZzRVTjQ2c2ptdHZsNkYzbkZTNExGUmw0MjNmeUpOcHB1VGE5V1dTR2F3d0ZXQ2doMFJ0WVg0aWg0ZGZXUFpZeEVpaEpWTFpUSGQxWGJ3L1dWYy9XZTc3S0hyNno2K3RZTjllanY3TkJuOWVobjIyb24zYWR2dTBmSDc5SGhRbmp5QnpFYWMvRTlxZkFJRldpR3UxQ0RwNldreVdvRHlFRWlZNzRhVis1d1BZVm9lR2hWY05STUlKOStrWkxNdTQ2bCtEbnFnT085Qjk2Unh3Zng1UlVQRzVUbjNnb002Vng4YXF6SzRGVjdHSklsaEhPSDkrbWlTbEZBODFxNzl0SVhjVXM5Yk9scXdlWUV1R0owMkt6NVUwTTlRbXlvRDZDM3AxZGFIKzlQWXNUODhIZ3JnSTFvVGIvNmtJTk1MZzMxV3VMS0gvcHhmVlJ6YzdtRmdyYU9HM0lNNk9ScVhIMVJhdGlHZU5oK0ZYNWNhbElzdnJQQjdQNS92K0NTcHdDc011RjVsUkpLcVpkSXQwdHFzZHVKcHlOMDBFV2gyN3dwT3BEUDdWOWZYNlkrODI2VVZPY1BSdi9SQlRCZnYzWFQ2a3FGMlQ3ODVhempjYitlMUVMV2ZuVlZiYkNwQnJSYkJseXo2dFJibTVCaVNkYkhYZ3JPUW1kei9RbXJ2cVNGTGN5N2RZTkpSQ3FxWnBnQXkzNnMvbVBReFZIN05WVEJ0eVZIcDloeTdmMEh4ZCtMc2ZYeHE5S1AwcmR3RU9xVVR3YjNzSUhYdlBHQnNBbzI3aEFKWFZYR0ZiTmZqRzVEY0JwV051NDFZVy9wb21CWkQzdUY0UzVoeXNoWEN5bkhjK29sL3FoL3ZxNFYvMXpFdnV5UjUrc2JoUXliczRMZkl3V24zb1hESWMzUHVlbHZhQ2Y1a1lyMklkMVJiQU9zMmM5aEozSHNsNjArS3pZaVNDcVgzLzFwNHJGMmhVT1dNbXl0ZHpPNHdOZ2hrV1lsdFlDU0sxL29YOXgyS3ZMSmZOeVVGZjQ5dXhPOWl0ekFJTTR2ZzlBS3ovejlWemk4dFlCRnNiY0grUitRcHRCMlQzOC9OTWVhTHB0UG5uOFU3VVZnYWRmc056MnJpa09IT2ltZWFkNndpUm9KV2dIY3pPQ29tbC9DeTRaci9NTmdQR290MVpuSGJNWi82QjFEeE5ULzU2dWpoNjZHLzFnT0lrT0FVcGsvYTRvNUpDckpXNm9UWE53L1VwR1BaV0ZtRy96dVVXck9IUEEwczJVNkJDNE9rWlo5TFhqUEJic045S1ozNml6S1VBVXVhOUdESU9aeXN6eStYV2JJZCtrZmtWeDVLdk5lNjFBN1dtVWdJQVZwVUoxeElPc1M5aVUyeWRnQUdMeDNCcCtaMXlFNldsOVBlQ2QzdDRmSnJmVXhlNElKRzFJNHN0a0JVd2loZGZibk0wMyt3NmMrbTZaTFF4VEFhakYzQXZsSTZLdGNnR1RrclVYSXBXNkpKdXVrTHQxM2tZekE2L21IWUN1UGNaU2ZLcC96YW0vZDNsaUc2YVFkWFJUdUJjSjFQQTc2ZHpTaHdyeno4aTBmdEk0cjRDSkZBOXZGcHNWeWN0Ulh4ODNZalh2VlNiRnpQb2VTSFA0aUdZYnhuQVlXM0lQb3ptb3M4U2h6N3h2QXZTaXdVNjArYWl0WXp3MHVTV1Zaem15YWNhM3R0VlZLSkFsWXMxUjJEMUY1NnlHZ1AvVnJ2M3p0UGQzcjZSRWhNalNvZzZSbWFrTmZsTUpFbmw2ODlzZUMwbE5NcVFkRlZaNXlNdFc5TjlBTThmcWJJL0U2cm4yMGw3L21NaXFiZG9uMXpOK1o1WEh0blhmWnIrRDF2d2NWS3ROaUVsRjI2Z1c0RXovb0tTTVdjWGI2dlcrekp0aUpkZXdKVStnRHJybXRVYjYvSTNZQ0l0czEvbE9rTG1icWpiS1g0Ynd1MVdkMVlZb1hiMWV5M0poVDNOUUYzRm4zNW5rOVkvQnQ4Z3MwajdYVGIxZ3NHVStUT2dEK1ZWcGRCWlJSak1iN3BjT290S2dYdXFMenZZc0NIUkNPN21oc0o4YkZnd21TY1R4MGY1eHEyVEdYZStTTFhvbmZXdkxGOTRjMFhWaEpNUFhLdWZEaEZtWVFkbHU0WWJqYWpaMG1HTTJ0QlhGbU1VcGpLL1pQUS96MmVlZ3l0REFtd1NpSXpaY1FnYm16Mk9hTnJrem10QzB0ZlA2NFA1aTgrdHZtcmRyVVdiVmx3ZHhUMm9qL3E4YXk4YStKcjJsN0RuYmw2TnROUHV2WDFuS1JyNzR4bG1PeWdhVE8rWERMMHlHdVF2T280aTZhdHR2aE03QjdadmN4WEhzKzhWMk1QQ205S3NVRHZjamgyQUR3TG9LQTRYSkpsZWp4cGIvOU8vM1F1dmZTSzhraTRrVVplSGduVFNOTzlmejVocG4vMzAxU0JndzVGc2NNWmhuQkE3SzRTRENuQ2N4WGlNM09XbWJkWVJRWWR1YndCUStRVTVtTmM0UTlMNXZ6SmhBQ25sa055R2k5Q1cxcm9veFhtZS9WRXpFYWxmM3R4NnJpVjlHdy9iVWtoc1VLeDFEMnBNNTNwS1RKYVdzYWRicUhTVHhVc2R0UFBIQVpyUXpKckdNdjVrZEJVeGd1RlpZV0Y3V3NWaXVvaXc1U3duQW9sanRpL0xQRmxoYk1pd1ZxTXFtaG5aMXBzeXNUQUw1SjdvTk1JdlpsUnFULzIvVndreDAxR3loTGFBWUs2eFhsb1E5eHQ1MnRmYy95UWZyYnFkK1BOZHBGQlFOYlFvclA0VXltRVg4VndCWC82U0hVVC9lemhkQUZYQ0RZSEhNazVpY0ZYcjFCL21nZ3NtQzJlTjlVTEhXNFYyWHlFb0pRUmc5c1Fyb1RxcnE5TE0vV3IvVHMvUVR6VmdaTU9YYU4zSFhkcTZzcCs1VndCd0s4RHhLZ0YraHRBQWJyYzltOWxRQTNtbXdhbldMY1ovVzdsV0h1WkxiUkFlQlNGekdJSTBORWNhSVpWU3lCU3JZOGVLbUxkY2d4L0lwMUk1UStRb01LejcwRWM4UENWQ1FzVUhLUVh2UHVFSkNxeG04VGQ2RGFaUW82TnFObzNiSURlVlFtREJPOXJKQjBQWkFXV2ZTb21SZXVyanJ6dUx2ZjdOTm5vZWgwd21wQktFT0lXeUVQNzBNb3V2MVRpMDhOUk10Q2ZEQ2xpSWpDOUVhMWR5L2ZFZEJwQVhGQ0FxNnl5U0hTUUcwenRFd3NpZjZsdFJiNkgyKzRyWTdyUjhkT01EWWRsdFdDdWd4aHdGQVJLb211RlZzSVQyUW10aytmYWhpU05tZTl5S0NOeVhwdkUvUDZ4ZWVKRm5nU3FuVDhQd3B4eVNqTXorWU5kTFA5b09rM3ZHWkxzUjg3NEpaNEU4dzN2QW1pZTZsczFaL1FqY3NISnZIWlU4Tjg4ZEJBdSs1NnpRZ0hKcDhmT2Z3U0l4dkpGVEFhdkxLeHZHMkE1WEJJdlZsWUtIUlhINm9UYXhtZ1NXM2xOZUdHMmlaanJOM0R5NXlSNFd3UGJTYXJ0ZzBLam9ZZmF1RFVYQlZuVHJRNDdPUjB5ejRjMVh2MEVkcFVBa3phZE9Tc3NnT3ZacERwSXZ5Q3ZyN1hZeWJYTDV3eW42MXRxVitKamt6UmVHR3g4VS9LYWtHcWo1Wi9MdVk2SXpPTUNSbmlwSXdiU1drSXZPNnc0NExURDkxeHlRQnRIbGkzaXo0QUxSR1BhbXVzUWtxdHZTVkdaNjZwNUNxRTNtcERwb1d0YlNyZTB2eUFjVmhBbkt4T3FrdWxJSzJianBrakxYUFdlMUJrck5kVzVVMmFoODJYRWtaWjB3VTA4ZCtuZEt4aGM2U1lEenB0MTU0ZlFJRjBsUm1zRE9tZzF4bjVKMHVYRVliTmw0cHBHemtycUZ4OVNDTElDSUZ4SFFxdHFiekdwNGNmUktnOW1kMEVrRjVTVDVRK3Fld0IyN1JjZkpFWXVKckJZSVhObFNsd3VZemFneHYwVGxHUVlVTy9LSWVXc1dZRUxIMExha0EzRFRESjh4MDNpdnk1NEJRNTIzR0FUMndrWUVUMWhOVzdVU2RLT2NOckc5dWRxL0NvVjRNZEF5R2tRRmpsVW1wdUs4ZThwaEoybGtrNFkwNGg3dHN4OHJGYjVKOU1PU0RwZGF3WVZ0UGtKOWphQ1hDbUJMaEdKYll2NGFxVkRpVlNRR08rVDN2QUlVL0VxSWxEa1VrVzhkenM0T2xvbWh3cVZ3WUJJN29XWnhpYzBOcUgxSWMrckJEYm9yWnA5S0hZZHQrcjU5cWpwU2JvTnNET21RTzZRYzNYVXNwYXBYTWJHWHh3M2hzY0hTYzFDbmV5Rm5xekpKaXRwWkZReFFTNVFPdGg0YVU5QmE5cXRYM2t2UkVySEFhamRMSUV4emF2bTJJM2t2MDJTb1U4VTBLV1hBUkJWVWtKa0xrT2djelI1QjR5ams0SGZpN2RZY1djNUd5N0JDeHpJOXBjaDNUcExYUmRuVEVDUWphMG1lUnZjSFYzdVN5MDFsR2U5a1E3d0dGdDdyZjVpNHIzWldrS2NBOE1xMmZac3JnODRqYjBQWXhDdVh2aGx2Ky9wcUFiTzdNT3l5R21nSk5WYWppMkh0czR0OFBxb0Z3OHhNd1llRS84MHRrcmdQWTJndWdTemYrVVZxYVZlMzg0bVBPRFk0TE9PL1hwalNXWGF5MHNsK055WjV4M1oxVHdudU5pL3VOb1oxVkVpUVNyM3BzZCtSdDZmTjRFaXQwb3Jkc0E5UlpPbnpSUm4vTks1aEZ2ODFBZzBGN2J3ZnBuYUEwT1N1bTJuVy9PMmVyMGFMSDlpcmRzWGU1QU5lVmp4Q1llZzdyUE9MUm4yYStveDg2YmdRQ0dOVkZtRmxIbWxrNkcyUnhYYmU3eUFhNUd4eE1VK3lBUEJURmtEcEdyS3ZuanlRVy9vZVZTMHlZZUtlVHNubmRQc3ptUE5RamliNFJxbWlHbXZ0R3hLbW9DUmM4MTZpRnlJRVA5Q2ZUUTcwdjdJUEM2d1dnTk9LVG82a1gzTk92ZXpON0ZwdjhzTk1OR3JMZTAvZDR5bW83WjVjSy9QMlh5M1BIcFVqREp4NGZMdnU0S214bmNEeVdwL3pUTFhJRzF3ZnY5bXFMZ0JHYUJ2SVpxM29Jd0VMRjJZMDgyMkdjRmwwcDVzb1NvbElYcGFPUUlWSGRWcS9aKzNhbmdjTnprQW85bzBGVVRtRnp2WktidFU3bkZSbklSUWM3SUlLUWZ3S3oxL3psekNKbHhSSEVOS011Q1JmNjZyQWVpRzBYNmpXSG5kTVFzWEtFb1o2YkdpWGpsS3Z4OXdQSWk5eU1MNklNZ0ZGcDdDZHQwTjRiUi84NUg2dXdCME9wYzFZaS9PemZ3a05GRUN6QlpaaHJUNWFnaVJ3cUFkeTMzcUovdnFuNGtxaEJja3FHSU1KcDQwUGVIM1E1RUxjN3ZuK3BTTzQrd2RnWmE4U0F4ZHdqMnBaOHZTeUQ2bE0wUXZKNng1dFoxcGE0SCtlT0tTUUF3T3BnRHRhWld2WkVzQnYrTmlkRm5jOFFJQlZkcGtqVS9Md1BkMHBlQmkvRDJYeStrUHJqUEJpa2FBQm5LRzhKNHdMR21YWjdSTHpJL3MvVmgySkVwQmwxTnBzb3cvelIzTEpzWW8xRXgvNHBuc0hnSHVCSEp4YzVyZmNGdWhWaTZwZXFKTEtWMG1YZkdYRnZOTENSSERYRDVXM29XT1F2dys5YjFkMGdjNnova1NyZlV6dG5uSTNTV0ZnRFFyU0tzMVdGR1ViQ245NmVYQmlpS3pqTjhGdmFqbXgvcDAzNjZrY0lYczZ4a205Q3I0VklnQTdHTXNsK3NhVHo4L3kyWUhxNTRha0d1TllWakZlY2dUUE16WG10aXlkUm1QY3hZOWpiWmVORFFJTitjUkJRb1pqR09UZ2hZMDlSRGZ0elo3bklmbkU5UTZ5RzJ1TXRkU3FLNVZySEdMZk9PZDJpSFFIRGxLR3N2UnVuc1c4S3hZd2FiZjlSdVkxZE1FQWdXUmp5OFVheC9pV3ZFaU9waWtXRnIrTGZZZ1IwbXBXRFpocndTeU1EVlNWQ0w1NGpNSjVXTFVieXVOandublU2U0p2VGJjYUpVR21ReSthT05lbG9pcmkrUHVoaG1GTUFaU1VZaHE3L1o1alIxZDdUZ2hvdTRDbHhuTStRQUZ1Y2ZvMnBBRFlDVU4zSXhGZ0k4a1BDTVdacFNKYVRiSTQ5Z3pDTTJ1Q3p4cHBjcUxkVzkzOEFKNlNuWWR0UUFkUGVST1YzaUtBRFpKTTl6NmF2cGhJNUZCZlhFNFVpcDZuelVyMkpXaFp5cXEvUE8zNWFxclNob0MzUGVIQzJpZnVNQlFBU0pqdjRnVzhjRS9udnRVdGVRSjg4ek5IMGtNNllpeDhHdUZ3RXA5ZmdZRE9vK01RREJRVGFKSTlNei9XRnZmOFlGLzVHNEgvQnhqQmxFOUZGRXNQTHVodyswbUFLREJPV2ZqZFJPWVN4OEJLMzdRWDZJVCtCTEZJTnJCaDhrcHJBTktXTDBUMEJpWjRYcHRILzA0S1E4U0xiRXY3THJFZm0vWjVvaks3VE1wU3FKeG5xeWcvclkwRERhbjhBbXFZWTVqcmphcjRvWG5MWUZ5V2p3bkZORk5PTjFuOEpXQk00emk0L2ptTy9zZ2dKWmJmRlVSV3lOQXU1ZGExWEdPZ1NIV0pROWIxek5vR25TNlN3b3dOcVl3NC9Kc3Y4RmMrK3A4eHR4VitvSzVVd1VPWkFFa3ZCZ0tXallhTlBxckQ1Tzc2cnlCZ0c5aXFxT25HWTJwL3ErM1pEN1ovQi9ZbFY2VFY0dmtTN04yRTI3WndNQkF4cFZFZllMNy8wclBhbEdCRFd0Qk1YbFFJMWtuWHNvSEtFOGQycmg0U0N4RXI5MTJVT1V1bGRnbXNxVnh6R3JHOW4ranhGcER0c2JOSXNoQmEvalZhaTk2eG1nRWZ6QTRHMkk1OUZHRUl0N2pUTmZXOElaRWRydlhFenBEQ2FkQ0lMSzdERGFGb0pOdytVNlo4VjMvVk1rUklzUWZXcU9qR2I5U0J0L1BFcy9qQTYvVmhGM2xPQjlUbG5raGl0K0l4UXd6TitBOTkraHF6eHFPK01NOFhZU21VR1ljdDBCbGozcmRZTnNmRE01THp5cnFCeWlyU0hpSHl2U2FpamhQQjVWTVovS0cyeWVkR01OUExLbVk1UThVV29wdjZXZ1NFNm5VT1JJeFZMMDJPZUo5Q1RVcDVybWtwVWJVbHJ5elBrZlY1WnZTV25WOGh0MU1ERnFWR3lNU1R3WjNTWWY5YXdEWXBGVHpOOUlYMUhCUFJRM04xV3lXK0tNNlhsMDB5aWxNWGVCUUxDVU83RHdUc2NiNXNyM2xRYWtudXg3YUhkbEhWQVVxd0dYVVRLdXJuTGdVSk40aDlPSVdOcEVCYy9CVHVqS3FtUWpsMTl5R0hpZXl1eWdhYXJ1TDlJaUM5QUlOeXVRempDK0VESkJ6RVA0ODAzTzZ3WjMrUm0vbWY1V1crNWw2RWVvL0huY24xSG5hUzRQY2t0aTkwSjdyVGVSSldPbWxZVnNwdjhUVnlEMkRzai9IZ1crWkFhaFRGQVNLanBZS3NjQVBMd21BUmNMVWQvUExnR0FRRFl5YkVac1IxdDE5QnprTGJZV3pRUkEzNDUxaUoyWnE5TG9pZkRBdHFQazc0SzdCdGhDVDJyZzFMWS85Yzh0SjZaRmt5UnQwNWdmdFkxWU1KVks2Mjh4RUxxR2k1TWFYcHJnMVFGTHlSaWpSUnF2cEJtSk5GSkpEWEpmU2pmVHYrNmhzTGcvN0RZM3gzM1RxNFUvMXBMS2NpdEx5eWdlakh1THo5eTZ3YkdKNUkxMFk4REF6WDNtYzBXYStsLzdtNUtTaXZaZzI0eDEzQndRS0JIdFU5NnFoeDg5TjBSSjdScWkzT0g3MnVqc01qUXB5Qi91Q3dmVGk0TlNUNFdzS3NrVHI1TVhvZXZRcXM4NGdIdm9aUDdUVmdxN0EzVG1BVVdaSWVrVGNPWHpYdXEwb2NQaGs4Y3FsZWZRV1dkS01KZkZ3K1Y3bmxtVm1LbVI4aEExR2o5bWFSVFdPTkVyZyt1b0tONVRzUUR6WkdkSGg3cXIzNEFUenlBbzZtNHZieUdMTks4WGtFZkdKY09ScVNwZ1R4WHloTGxKQVNHZ2EzNzVLVFZEVnBWekQxUm9OazZEaGZwbFNtZlZob3M3aEJVYVQ1MjZEaW1odjNhLzVzRzBJUExNRDNTVTYzTzNFT0xEa1BrQWtoWk94VFFxQUt2bS9NVDA2ZzIzQTBnRTlpT1o1bzlMUkRrUmkrSkJIMzdhVmFoTFNBajdWVVA4NjNLaTJsVC9xbVE5bzF6K0JRRjZNWEg2em96QW1UU0QwYkJVYktoNWxEaThJR3dBd1RDUWluVm9ZOTlxOEdTcG5oUnI4QkFZaElwRkk2MjhrMHRGV28zMGREZVBFZjR0bERqelg1TVhHNyt4blJ6ZGRYU3hMd3JXRmErYlplZnozUEE4RzNJUFFMdDl5RXNNMjRkNktwdVk1WWFUSDBuU2JrZnVjZjdTeDBzMzBuKzlxK2hKK0ZqM2NWRDRWOWRGNDM5UW1wR3lXTVhrTi90YlY0ckdIelZpKzF2Q0NuK0h6dzcxbGM3ZUZFWTdSbDhMMVVZRDdmTVg4MGFlYUwyakl2L1pnaUNGMW5NRmMzRm9IbzlEQTFkOW9jY0txazdHZUtRbnhMMHgrSU5HandnUlgwSlA5R1IxbG1oaUV4RDhqdXZoREVtU3EyRFBlVXliMnkySXhpWWQxZWhIV0hCQlczWUpXQ0lwbXFNYXExQlFoQktBRmkwaFExY2YwSnRaRWp6amFyY0lwL0hYb0NaM3BVaGg4ejI1czhWVkNaT3N5RmpZemJycFpHMkdrb1Z4R1NuTVYvSXhIb1ZFV2xST2xHNll4VTArVy8zYTdyMFlpOHVtbGVJZXBITXR4VDA3b1RlS01GUEZsM0hSUWUyN2I1YmhYWElNN2I5ZkJWQXVYRGQ5WTdDVHlPV2hJYm5kSGtBU0FUOVBlRWU5aVZoYTl1MzFKOXFsU245Yit4MDlUNWk5a3JoOGluWWROdHFUcmQ5KzJ6MG9nNis3c204dTUvQmpLSTVob2hpeVhWMyttTFNuTWl4RmhmaE9abXBSaGVMVG1zeDl1U0RXV252QW56ZUtLR1BXeUJYb2tZVzd6ZU9CUjZneHZhcVN6akNpVC9VOUN6RTE0WjhrczZQWW5ocVVyQ1RhS0FtbEVlMEkvZ2o0cHUwY2d6dE9sZmRubGZ1WXlsWUJHaVlUK2dKc0ZQUWQ2ZUcwSGFYY1lyNVFlU0tjNGhoRmNEMzI0WXkrdDVoQjg4UVROREFSb1NNck5pUGJVRmpsclVPMllXTkpaYTJvR2FSczdYUVpQK0xkaDhmVVQ0cVNKQmVtR1lpVEdHck1vS2lUaXNheFJ3a0VyMmxaTlE0QXdrdFF6bXI0c1NhTWk2KzJZUXN1T21tY1EvdnlOQXlaOUxLQ1NjYXBUUkcwRzRiZGlobXF6N09vdm9xc0FGRFFJSTgzL0JwVHhsWWprRmNZZHhSWTBtdVI2NFMzQTZDandrRC8xeUU0Y21nZG5vNDV2dnR3Q2ROeC9OeG1jZmNWYmkvNTVCTVRzS3VLejExT1UrZ0RQL25yZWx2b0tMT0IzZGZxOWNSdFhSdXlVbmZpcEhNbVJQbi9KOVIvSlQvSDlhS3NuMzhWMmFzVmlaaEExS3VHNzg5N1I4bElhVGtLait4eGhrL0I3eTZ1dGFWS3EzNFA3ZnlidHFQWkhRbkVjUzFldnJkbXlUREp5Qmc1YXZ0dksvdjNHN3NSMUR5Um44VERTTTREUVIwdGpFbW5OWmxtVUFvSkNrbDBXd1h1azVzcnlBZ3Rxb1B2TFZTdkIwUFh0WVA0aHRmbUtSQWpjZU43T1NScXYzR0Uxa3VTdkN2TzJVdmQyWW0rZVBVQm9LY0Mva3psdlVNNHQreFd1NW5kVHIzWUZFb1NkeENjdFhZR1BMQUgvR3dZNFJ4U3QvUDhsb0UwRkJyZG5tOGlaZ1lzOTJLRGptbmd5SjNwd1RtR1pqaEhXVGVOWTNZNlhzaUhxMm4xSFZuN0RVdFRxQ3U0dDdlOXRXSGl2K0V4ZmVDZmtHRDFvZ1NTKzRiL25Lek9uVWtmNkorbkhGUENFT1V1OWxndWZzUjJNQjZvN1orUlZ4bjI3Wjc3cE9uQzVXdkJ1eWZNUFhNQlVSSnBPakg5cjZRR0VqaEhkTWg5OXNuSk1WdzRkc2ZQN3FybVFSRGVOQ1BVS3dNZkFRa1RJdFhveGR2MWt1TGJCVW1QalR6NTByQjFrYVJLRkR6R1Y5TE5sdjNRVzZNUE9GbnlKSkNGQkpVVDhTNE9rQlE4SGVjdkgycjB2YXpSclJKanBjcVZCRnZ5enFkRVRTVFVGZkRuWHorZWVIY3pSTzg0dmdTQVNTa2h4NDN5Tm84bDAyWXZzdkhjNFZjSzZERmE4dmNpVWVTUzcxa1dzR2tVYm5Vd3VnT1c4QzdpVXJOR2tiZldDK0RKdVJLY2QwQkZGVzVMblNzYmU1TERZOW5oclhtMlEwbHQ5WWgzaVpqbkUyVHRYU0p4S3BtQVAvVXZOcXNwSXErUmYwaFduTHBFZXVqczkyWStlVlFrNC90ZlY4WlprYzdESGdONTRYWkZDaXl4OGNUYlZib2p0UU9kRE5kZUVKeUhkM3hZa0laZmhCU0dVczgwYm1nWUV2NW9uL3pDc01WMnp2WUFWLzJlWkk2V2FmUkRoWEJrNWVjdlNBVVB6alhxRGRmMWJrWjRxblpaNUpWVGFIRGZEa0tOM3FWb3R5YnNIdFZIQXo5aUVvSUlCQUVaeEJtZmEzOFpLaWliL1Z3aTNJSjdpckxpWXV0bllNNnQrazBFU09CbWR4ZldPOW1DNHNVT0huK1FmTnlvTXRIeTBaYW02NkFOR3NsU1JoNGsrbzkyWjF1WUxwM0U0UjVRK3ZtbWtjYjhvb08vS1NaaWVTZUZIYXZ6UmVHa3h1K2hwNm5LZ0hCZnc2T0ljVkJvM0ZSUzdYSmlGQVY3dTR1WURWY2VSYzVsb1Z0c0lBRDNIalBJd3p5QVcwMjVBemhWSXlOUlRPamJxQ3VsTWZkOWRSR1I4TDd6NXpLSVdtYVhlZlNjTjNlWEpBZ1JmWnR6MmcwTTVaQVBZVllEYTBPVDEwK09HK0pPZHRsWDNjMFVvNVBGUkNhcytOTTYzUTVubzFFS3JLRlcvN0FyUWRSRW9zUGRrVjQwK21XZkRFZytWUnlxSzVSV3NMalZIWm9OTmJ4dEFOR2RDSzJ3MVR5YXcwMTF4eWhFc2o5SHZRaE8zYTRWNEdiMkZoaHYybkhCd0FiVmRVV1cyNWhNS2kzUXdRdFpUNFVZWG1aYlhWN2tJN0VkRnIvM3V4YnExZ1BvV3J3S095eTBEVUh5djUyeVhHdzRlc0dqQ2RBY2ZuM1kwTVgyTHoxaklzUlJZZ21SRlVHSXdUa2Yrd1lsamRFeDBqSlIwUStVV092Nkp6bGFxdEZyeG9xOEVJZE1lT29neWpCdmphckhOYWtkQnZtUUZwY2xRdjM1ZTI4OE42anV3WitEalNOeWFid2tqcncyVlNRN3lod3ppL3FtSjh0dkMvem4yY0Z2a29WU2huY0pZUkJlczNnNnB2NndUSnNZY25BTGYyNFkvN0FjSHNmMUFrcEM4c3VxRG5hbC9oeEFJR1hXTWNUMnFpZUdmNm4ybnd6MG1hd283OXNUSDRyUjFKaVdBblpWVyt2Q0pxcDIwYy9Fc25Hd2hlSWZJRUJqNjN0U1dQWWNsTE5RSEZpM213RFZMSWlYWVdXSTVJQU1aRHVVNmpTaURtQUwzTTFmeWh3R0QxMzhQZktoOUw5R2xmSlZlV3pzbGxWS0c0MUpUWktCb0d6UnpCV2t6NTVUcnZFcUNURzFVR3pvY1hKV1VteDg2MGlXVE1tZjR2Wjd4VHBrZFdpT25DOWU3Rm9uYkVFTTZDSDV2THZSV1lpdFcwWWRRdG1NM3hvZEpnUlY5QU5vbzN6azEvMHlzUlFTVGtvMHFEWWZuUTNIS1NvekIwQUtXTVQ3SU5wUW1OZytqbUw1Z0R3c1J4cGxvdkRjYzFxcjVJdSt1QWFTdTh3VktHYTlpOTZhZGNsellpN2ZibzJhbzFwd0pDK3V2UXFyNnRUcExNdS9hcEp0VmpDOTljRjAzckl1Umd3VmMvemhjK0hFcHlqZUtMME5wbEVVbkJud0NPbkRZMUVGVWVlNk5YamtIb1FsN0FLT1oyT1ZqVkd5TlpwOHJxVG9Cb3J0b2tobmgyZDF2M1g4OUNyR1J2TXdsUkVDTWxqeTR0Skh6V25jN0pkYWVxaHJqOE9oQUduRVJYLzhGc0Q5YWZXRjdHSDV4M3hMSkZTUHdlU2NVYTVPdFBWY1B2WDdoN1NGZG5QTGpUMnNpRURMa2ZzaXlvZVZsQWJEdFdEcS80VnVES0RZNWVHSmsxQ1NRcDUyRXRSeDcrM3VaZHF5ak9yQ1dzZzVYMXFEb3hTUE9vK2tkYTRxZHVnZlFUcWZtWWErQ3U0TUxpL013LzBPYkZvWTFpN0NwU1IwSWVXcEFvWldUUDAxK1dJQzVNSHN6ZHBnNGRsOU9nbHNkWWsyemlRTTVqc1FSY2c1dk5NOFZGUW9FMFBMMWNSeU9IQ1NlTThzT2g1UEx1d0wxTzkwMFhGNi9LdjFNMDM0RTdIZ0hQZWdpSmdLMHMzTFo2bVE0bU05a0lhTWloK0lWZWs5RUo0L3gzaGoyWnp1U0E1Y2w4M1JwQ3F0SXpnK281T1FnUVpORFNRVFBUeVZDS0UwVnA1ckt2UFhtTENYajBpbFFhWklBcVhXY2c5YldhclExVk9XUDBpRnZqTkZqeUJVQm5penVnTVhWMUIxbmtHOWhhUWg0enhXMlVOU1did2p4cXIvUnVyMlBTd3QvcWlycXlXZTNxbTM2VGJVTjhYZUl0MUUrWFRHc3NmZ2laZm9FT3BydFo3dlZsTG45dVJiTGNuNklWT2dLc1BSSGNicGMvejRGcG9sVUlsNURGaXVsVXFWSkFLNkw2K0sweVBIUzZxbkNrcWRQZ0ZON2VJSDdaUmdWaDljcmZlczBBTUNPOGJsZ0FwbEV6SkVXNXgwbXlMbFQ4c3ZXNW5VYVVsM1NFVU5iZytndmN5ZTNXSEQrcGtReHRJOS9HQVdRYk16a1pWeStCTis1UkNtRld3QjBNRDZEdHNZVHRXVVN1UjNFMmJvSCs3blkyY1RsZlNYTUFZVE5OWjFIVEZIRmNwbkJsSHo4K09CNkl2amhDcERPUlhDUHpoNVZoUEtmQytEa0NVcFVtY2sycWRlVjNrR3lGaVR5dmhNbjFmdVd3cDNEVW4yZXlDZll2MDVTYUhSRXk5MmpNWVc0Ylo5MDZjWlFHVkFCMU1sNGErZGdEMTFXWThUWElaUkhEaHl5OFhSdUJhUDNzY2hSL3hxR3hEbFZWbHlIbmhsdnRJd0h3aUpNZ0MwZVVudy9ZbStFdVpSbUZvNGFiUGdkVEswR1QycXlodmlHT3RxbHF2NlJCRUE1dnJDYkRBbFBHNkxpWHNhUmQwQWlqMmt5VUM5UjI3YkVsZCtweHFVVUd5NlZUSEVzeE85QzU0blhtSHM5Z0xKbkxINWpIdTZ6a0NRVnppcGF5NVpzbHVTbWR6K0xWdnJQemUwOFp6Rmw1UWZEZ0xQVHdtMWFWQTVhWkdVQnJBMzVkaG9UZUtxZlpraU14elBaa1FXQ0piSFdIQ09ZNGF3NmJNdC90UUdSOWxnVUhVVThVbUt2aTlUYkVobEY3WTY0K0J6ZGFkV3M1ZVFJTlNxMFRyNC9GWkt6bzhVb1Qydk5oYUdhV3J2bGpmQ2NjZVR4MXZIVkw4NER6ZE8zc0poRnp5c0ZuY0V0SHo0cmY3RVNaUThyWGZIVUJyWmcxcjcybDJ4VU1QUTJsWkJTU0lWVTg2ZG9DNUpFYVNNeXNrSi9BK3B5VUlHQW9FYks2M0lHTHlpUlFvS3crUzFhZzA2K3Y1V2VJbUNlTzZPdlFvMFpwbHpRMFlUdVhqN29NQUxyaGRxV1NQRXI2bUg1WlVuZWszYWJMWXN2S3BleDMrcTExTHJHSjBSQWltQkRJZEVEdHprWGJnUEY0bktOazlnQXhGcXlqa0hsc0w2YkpNbUpudXpMY29BN3hOQVppUjRra2VpdjkvRkpZNG9HUG1acGtZaW1jSld4cmpIQmxhTXQ0TkxaQU10NEI2N0l2bnJ3bWM3akRqcFhHbzQwWnZ5eHVZTUV4ZHQralBqcFhpbWUydGE4YkNTaTFvUHpsZlloZmFHbjR5TkFwUENVc1NnMkxZaldHblUza0V1cS9TUURobWVDQWxlNHZiT24rY0RVU1lJdFVnSmVNamxrMm1YcmF3WDd1Y1VUYlBzOUlrbU9YZGVUWFNGU21EZ0REMnFoTmdGUFFlNldYUTZaYjJwYTlJdzVpQ0g2V2grMDhNVW0yb3RmSVlidVpGUHVzZkdTMzg4UVhOUTJGL3JCdlM3Sm4zYk1uUlprVWFFc01PL1VFMWRqbHNFMmFnaXJ0dDJaSXZBeHJkakpOMlYza3BML05Bb3NDOG1zdDVxUmtCaHdVN0xXWU9EQzh3aStMNm1uUThpOG50c2RpY21Ya2NVTWI0TUR4SjFQMGtVRGdUVGFWeldsR1NzYk9YenBNbWJ4SVhlZjNyVjI4dHprU28xTUVLY0ZqN25BNXQvWjhvK2tWRFV0L2ZqRTVjNjNhUi9RZWNva0IzVkFWeUdpWndKTGFCVjdhTngrYjZ5bmVtL2NjK05IMG1wejExQThGbUcrRld2VUhQdktFdSt5a0RlcEZtM3ZrSE16OS9UR2dNcVlwNWgzV21wUGF6MzdqV281RFkzbUZUckM3SzU5QnJHYm4yWnBaTi9kLzBnMGR3UmgvMkp5R0Z2K3JjZldEOTVCd0J4NFlnN0hma0dXZHo4bUZVdDZ2K25tWUJoZVRyY3VKZVI4dVh6NTJQVWh2YVlOSi9BekU4cUdWeThoK2lWY0ZTc0hReE9Zb040VzlpT09mdkIxdmR1RWg3MnJoK3o0d3BEN2xleWl6RWVWS3JKMnRYdXA1aktvUnRZMzEzVndpaWZ1WEsyL2hYNnBsTjBKM2tuUm1Ic3AxRmpKZGoraURKTlQ5K0lORHN4ZjJpdjdoN1JJUGYxdWFBMWl5SFo1OGkxSmdSamQwWm1vRUI1L0RkaGtVSjU0dGJCejlDS3E2Uis0QytoNzgrdmlRcDhta1NnVU1zdWlVVnVqU3NpeGR6UkIzVXE2WlVUT1NmTmtaZElUWUFvNlZDWDFTeDg3aGxNdURJWWcvVVpqYWI5RGFGa1pIeVNsMzMwN2RXeTVPSWdMdmI1cm1pWWs4cTF3d0N0SWRGY1dza0VpNE1DT2dCam5mZFhwOXFvTjBvSktQQlVETHJrYjZ1bFVidm9xVXlNWmRnZVRhYUpMbXhiMllFNFZnMTdvYzVuZE54LzBpV0l2MS9RMElVa3UrZGtGRUh0b0c0YkpxWVhKNG95SjR2SnMrOUkwQm42SDlLdEpGSGFHWVdOZFRsdDRMcG1UcWs4RzhtS1BsaERUeE91cmkxcHNrZzZ6SjhDZVdFNmNjMVFWMlRTODBsMHBUWXNEVlU3U0t4MUdPb0dqdE1WYldiZ0RSWmd6Q1VOMkdja3lnZzFIZGUrb3MrNXJrOUN1dVJqU1BVMFYrbkZ0UG5wQ2MyeGRDVis3NEhOZHlpdnJTektDSTVqeDNPQ1E5dnpsSjVQOFBTWTlibk8zWUtPdFlNbGRMTmpUaUxHU0ljWElKckNZL0Z3T3B6VlRWeFFTbjBybllkYUExNkMvOXlYVXYvOEdoZmtMbVZmOVpITWF3WEVYeTNFTWdKUEsxUnhJYThLeUdIdzJwenI1c0ZwUzFDNm9hM3BnQ1F6WVcxbE5lNXJLWWhLSnBSdVk3TVA4OVV3WEFBK25TNWF2ZEFZTkREK2x6RkFIb2lOV0g1aDNrNnpaK29NVWZsenlTYk93UkNOUkRKVzVrNnp5V0pUU0RVK0NHQ3hBa3ZpMjJnZjFSc0NmbEM4cWVoWHV5MEpqZGRhRjRrYktoRzhxdnEvZ09HYXhJUUpYbnJ1QTNSVXNZU05sM09XWktRVzEycHkwbDNMNmdmdjZQbDNHWUp6ZUNMVSt4bkh1RlNIaU9LNThFVmJoMlJXNXhhdzgxVXgyUXM4N2ozQTc5VDdDb09vUDkvNWZUZmgzUTluVzRvNmtMeG13L1ovYnRuTlBPYTZkOG14RUN2YnVhVWIwWWw1SEJUYkw2RWF5akJLd2JkQnlFaGNRL0hWZ0YvQ1NSb2NGZnpKTStHUVJKcnp2T3ZXaHpWak0rYzdIV1lZb2l3ZmZxbHJJS2c2aituL05weWVhbEZSZTFLeWQ5Zk9hbmlqSjhvZDdNRzZYVm9CR1RDbnQvYTVNaU00NmE3M0tqTlN5L1VOT0hRaDltWWlDUFVPZXI2UjVieXZQYncwUXJRUzRSR2wxOXNQd0EvWlR4U0puMGcydW8zY1ZuVkV4VUxPNHJiK0s4a1pOViszaGJkbG1jYVJuajlEcU1xeFovRUN5N0NsOG9OQitSQUpkOU0zM0ZOMGxTMGN3K1piRUIySzRENzJqbDZESlo1UjdTWlNzZU13YUhsbG51cTRQQWZTclEwclRGTTd5SW00VkZWcW9wMjZGZGh6Q0dzMmp4YkNsN1hoOWIzN0ZSY2VmTWY4YVdRVHlNTU1aVzVCOU54NGF3bFZKTGJkVllIUFhmYUdQL2VjMXVjTloyazl1RHlrUzN0cU9TOWdVaEl2MTM5UlVQaEovQ0NHZ2J4V25lYlZwVzZjL2htNlNVS2RkTEszdnBhQThjNUJMU2wrREEyOExHNHNldzVtOHRSVFExczRMNVlWWlRYd2hqK0NXK25yUnMvaENrWnMrN3hISkNWeVBYY3VTTGZwdHBNSUtDNHVGMVJQVzA5eEJxZ0xtQUZ3aDA2bkR4ZVhrcmFwZUhzMVFiRk5IQTd0WXV6L1pxN3pwUWc3N3ZYMjZMaURLYi9SUjN6UEJyd0pVV0ZEb3E5S3BURlZFQWd3WjhFUkgzSjMxd1ZFZ2l2YlRwV3ExZWtHeUtNOS9zTlJGL3l2c1JXR3ZIdkUvalozczM0N0ttRUR4RWVUTVFZUzZMRzhXWkRrdGRPQVRHWEovRTNxUWhXQWlENTJVc215eEtDSVhTOFhPdEVrWWp0S3R0RWhkYWU2cmVuaXNxbi9pMC9LZTNQeG9ZK1YvcWVsL1hrOW9qMmFKdDBnN3JEblloN2kzWVZobE10UHUycjlOUFR2Qmg2VWoyN2ZYa0FjODdmZzNzSzZwWjZpN1RreUl5SWgvY3ZPNVFNSENOZmVWWHI0d1JaS0sxNTk5aXF2K1NZMDNWSkRpdEg5Ui9PWW1JNlMweUtQZlJpSXZTVDVJN2lvTEZOTnZFLzJaaU4zWDZ4MUtiblkxN3BOemV1R2NUb2dLeTRFdGIzNm1KTXNZeHZqY0FFNmlIaHN5Z3BWclVkVnlxWkUzOS93MEdiSWZ3bkxIQ2dzbUZCbE14VGtEUzRkaGEzM0NDbUtNcDB1em1xZGxBdkVqeWdNcGRMYkxsVFZTNTFrVXNoczRpWWozREdtTThnaHc5NXNSdWJFa3ZETXdPQjVFYzB5blJ1Skl0dm05UzVPODBXclVTTmJHSTBVRFZ5SlNORS9GWlJKMnJXcWFDUmJ5OW00a1FjRUNTL3l4UUQxTithaXZFR1BuNTJzK1dhdnFXdHI1TDJYMnFQN0xQS0VJb21TOVYxdW91ZDZGT3lHa01HY0hiZk5WcHJaTDk3RGVvMVJ0R3NrYWFSSzFoenQ3MC8wNXRVM2dFTXltRjVXQXlzdGtmM09HZ0ZGcUtKek1CMHB5eWRQQVZsR0M4dzJoYnJiRTlVSGxjM1dCV2lXMnUwblJzY3l1bzcrVytWR2ZHd28xUmlPUGJ4bzBQMG1oUm9oU29PNlpvbzJRUTZvUnRPRmFLMzJqMnZhV0Z5eEhBallCeFJXa003YndjcEJpbjdiZHk3aTRxUXZTZVJUZUowSjdIOEoyWVBXdEFhVHBFVEE5RlY5blVxbVp1UW51M004bDdIR3ZKV3N3WGdJbWFnZjRTWUdRNXI2SXVXUE0xTkNjTk9DSmJRRFR2OGdUNTNWRTNRSVdHRGZ0VlVhRnNjaTBwa29LSXE5N2JlVXBZeHhHK1RjZjc1azBFUENQbi92My9YeVh1SG1ENlYwOGsyZG1aWDRhbW9UL0dyWGJnd2hBVUh5elUwbEtkbi9HcGZMUFczcHhDb29yenlSUVFKdUxUQ2dSWWRlYmhBY3RaMHUzV0sweUJETE1EMm92aVhWb2xHYlFGZ0FvM3dseUVtaWJjakpxQTl3cmJReWVRa2ptVXk1VFh1T2RxaklSV3hGSDFraS8rZmNxZ0tPaFllZFdVRFNKanFxVDYxTnhmWldsNURqUXlhOGlOMGZWVnl1cldCRmp0cGV5MGw3dHIycnhVQXgxRGlaNjIwUEtDOHRnNjFCVG1Cd0R5YWhFT2h3UDR6Y0tkVGRoVDlGQVNla2dDMEorcUlwMnpLeTZ1bGd3bHpCVzBSMVdTcmZQNFNmc0J2ZGt2Z09YVUd3SEo5MUMwd2dpRldrZW5Fd1pobFcySVB2Z3RjRGY0Y3MrSnBSSjJXQzVGQ2NyRjZVUUYyMVFEbWFhciszaktkMmlVWnZjc0Z4L2c5UDFSRHNVU3E2ZTYwZlphMHFSOGdqTmhZTm1CQTlCNUhLMG9YdU5tM1h5dTNaNE1qc1BucTFKT1pwR2czUVZWSnpYTnBSRzBaYU5BUEZJMUNmdTNNQ0Z4TVdTVGFQSS9FK3JFZ211WHNmU0pzek9HbEdIelBqR3pGU1FEdCtzbHMxNU9PR1hvZG1xcy9VSEo3ZE1CU2dKZFgyZW1MbWJSNG9KTjBHT3IzeG9zdVBvZE56bUt1eFBoV2FxNDc3MUZsSGcrbHRQU0RVL3RETTBTcHBrSEh1UG91NkZNZFFYNW40U0RQVVpaV2VIWHN6bGx6QWNrM0YwY2I1ajhHak83WmZGL3ExL01oNytBcHNvNnlJNXArVkFqUEFURjJESmNkYjV0Kzd5N1NQTk80U0pDUG5DQmcxNFRrUVhVVE5Lcnk3THhNQ1RiZUY5SFY1OThVNDJ0OGRraU1keHJncXl3UmZ5U01zdWpFZ0dOWm9yWjRUQ2V5Y0ZBKzZkNVF4WHpiOHliU3UyY01CekFXRUlPTUsvNC83a2FXeHBoNTk4eGY5MmpjK2FsQnBnbDhTaXFqS0JxZXdxd0VaRS9ucThucmh5QllSaGRJUnFrZTFOOVI1bDc3NGY5S01YZjBaam0xNEZDdkVQTmFqU0NPaDhnL2ZjbHFhZHFKY1dJb3Zya1VKN1hMQjQ2d0IzcVIreXNPK1k0M21lMjJGNDRHd2FoQnZTYWppWlBEWE93ZGl4N3MyN085RlovMzNEcng2S0ZsZUIxcWhPMUVXNThzSXc3NFB1RVd4NTFuZ2ZYeUNHQ1NIU0duNlVhWHduOGdabGNOc2xjQUdHZW5hQUpvSHg1OWtMeG5jNDdaUnVNQTRJTitVeUVjMXlUN1FPY3hxKzZOSXNmblRzLzFXTEswWUpIYVdzUzdheFBVRndYVCs2MCtwMGJDWlVJYUJBV2h5RVRjTWthQkNDMStHK3dvTHRJSXRJZmtSK2M0bmRyeEc5WUJ6SFpIQTFJWitxMmRhdDFGa1dHOFdrMXR2bTRMV09PY21XZWloS1d2MW94N1pRaHFnWTUwN21uY1JrNEo4NGd2RkViTEhoZFFFbVNYNlA1RmZjVU9JeEVDYllWNFh3dVJPVG5zMDdwdFZ4SXI3UkpQcTRrUTB3OG1OekZ4b1BTOGZlKzVabUhaamhIdkVxYk9XN3VTdG0vQmdGVFRSUXgvN3NkWEJUWWdlclpFVzRRejhLdWZLV0tmRnlUR1h1cU5pT0UwN2hJYUhNWXhvelJsR2lvZEpnVS94ZjUraHpVcGV5eE1BRkEraFZKUTU3ak5LdE5VZ1NJemduV0xPaFNLRVBic2F0YTBoUDBQYktKeXRmWU5GMHBocWx4d0owaThnb1lmR3BnNlRzeGRHR0t2WVBJMVhtTXkwYkRjQTVuTkxMeEQxc0VHbENMNDZ0SWZWajh2MkpNWkwyc0F3VklRUXprWEkxTDBsaHdyTlppeVdHNVBGWU5jVnJtN1h4aXhBWnVha1kwMUpQYjhLMmZLWnlrUnNQU05icTNDK0FIdVpJWElENXkycUpySnVkcVdqQWVYekZnRUtrZnA4Yy9uOUJ2VWxJKzBEVWxqM0FiYm5ROHpJdU9SMzRhK2Foam1QTVZTdXhIMEdMeXRjUkNodkErNkJKR05HV29WNFVtTVNqUTdZcWNlbkJKWFZUdTQ2T0ZrYlJaOTIrMEhSY1RjZSthS0VBSkkwSy9ycDFXczNvWCtpRTdKdm1ZTEZIRVRyQ2NTNGM2M3JkUXlUaHV0V3FEWGsvNFBnT05iSW1NWkRvL3ErM0JoK2RZb3czaU5PZFM5NXQ4V05IOWtXVlBtSytyR0xBVVUzZnNUR050OHgwOXM2ZURpNzQ4Mjc1RWN1ZzBKaTJXa2ZtMHdvdy9zNW4zOHd3eitvQ0tmRzBWc1ErOGp2VnNYQ2JiNll5aXhGK0UyaG9BZ005NUNoWk5FSU9mcnBrY2t1aFpTYThZTU1NMTd0aWlGVHJYQVJYMjFSb3g4aUNqSTFUaU5xaHYySEVRelpqY05jWEV3MEcvaHFmS2FsTGJxU0ZCY0NBakhocW1IUTFmclRVZkMwNExFbjNLZlRjdjRobUFuTzBLT0dMaWlqdjhNQWJISlMwK1loU1REM05KWllOc1dhTjBmTVJtZUIyQWU4NlFPc2hITFVDTldzN000eUdzUDl4MlptQmVxeGxoaWMvSk83V2liS2Y4TjhmYTN6dkZqQm9JNEZuUTl5QytLSHhCNTQzNndpNS9EcTlFbkM4M2ZwU0FBMndET0R1RUxZTDR1a1RsNGkvWUcyWXl1eU02aDB1cllTVUtGcDV4djJSRXFCWFp1ZmtIZFhGMytWejY0anZhUHdtekhoczlRZURoSWl4b21idHpQZTI2NUp2SGVWcmFTNFk5cUZVQndDbGtqNU9FbWxhek5yKzhUa1lPczFKUTJYTnZxNzg2MUt6T3Y5R1ByeGQwWEt5R1JvdTJ4K2l3NzJYcTBzUmhhY2RtaEhpbWNoQXhDTjc5Rmo3dHdmNWt4OGxKUkJKeDFZbU5vbHV0ckcrY0EvcVlPT1BwbDJVaFdiWnIzZUh3SW1qbVJHejdQeXFibkZCVUVCcE45UXptWVh3U3Q2WFhZQkx2TGJsVmZ5U3EzdnVuNmJqdkJyVUxONVMvT2N5Wk9NTlp2ZTMvMC9lZ3JLN0pVYVZmcHZHWlRqcEhOMFc0NWpmVzdoVEpCbmt1Mk5YRzhlRGxvSlBHVVdmS2dxWitpV0xQVi9YKytEcnJJSytVTDRUQ3c2c1NJNXV5cDBSY0JXWVdjQUlJREFwTHFkeUdET20wcFR3bWd0bmZnYlpZaUJ3T0lTUmNjTlRGVGVEM0t3bDNXOWRYTCt3UFNaOUdrU0FvWUJNQ1lpTlRGWVdVdFFtZVVIYXEwNzdSbkJCeU56endXTWNic0QwSnZMREt5c2FSR2IzNXRCUXpFQ2FMZG45bkR4U3MwZ3NXc1VTWDhLUUFYbGE5c1ZEb0x0QXp3VllWcDgwb3UrdTFObHc5Vk9Hc2ZvQ09Zb3c1azNHbkVtRVU0Tk11RjJVV09YK05mOTVYcUUxRmlVRTZBZTMreHBVU0FWbjJCRHAxRUdJV09XaS9QTjNhcmNsY1JZUkdZZkYrUzBiQ2c0N2tncWs3enpvM0hPL2ZNNjlEbXZ3WEZhMmlKNTNrcTFwUU5LYmlVdCtpbFV2ZXFPK1JHZ3RGM2xKK0V5S1FZMG1qKzRZRHRDWWo0empGMGwrNHFNZHgxVVVieVR3SE5SaEhSeThnd2xqNXJ1RGRKNkcvc0thMTY1Zk1ZbW1NTXhNR0xJTVRleGsvaC8rV2ZhdHJMV3Zrc1lQWVN4bytPclZMdGQzVFBwcEJHd0hFb1J6ME4rRXpNWmtDZkdmV2NRKzdlWis5ZFJLeFAza0ZkZDlxbGNaRlZHbDVFNFIvVThFZzQxMEFoSlNLVCtZSWpQWFFYN0liV2FMcmdPRVZoNzlOYmd1MWsyNEkrMWNVemFsL1F4SXVMQmd3czU0YVNJN3ltc2pkVTdxcUVjalVMMmM0aDUwWlZreDBOdGtIVURTVVltMkZjcFJZM2pjSEx6bk5QTHFvY0pQbWV3NkQ5blRnWGs4NG9ReXR5SDhFcCtHNVZ1b25hZStnVTB5ZjRzSDI2bk9hN1RhVlZKZlpjcmFsODE5MkpaOWxMVndkRjlHNVlhZUM4WVBubjFCM3V0QWZuK0M5WmY0Mnh5dVF2VFc3RTZiSTBYSGRvQ3JBWlJRTDd2aUdsYXdIMnU4T00vbXVwa3owV3pXQWw2clVrZWhwczAxZGJmVVdybnJWTHRNVTFIWWlGRWJHUDFNejhXMDBwQUxUZlhtSDZzakljRlJzaVJLM3FVRmxONGlpUUlrVktvUk5WcXVEbXpQNzl5N1d0L2llK015WWttWEpsdUg0Z3FOK2ZNR2lLdDI5WjJQVG04K0lRQnBRd2k1bk9JZXV1blE0dDJoaHN0YUwrcUduc1NEMjdGVmtMTTY2YmkvMzgreWFLOTRaMmhUUStaRWhuazFld1A0WTNrYzFJUUJVbXNZSXZvUzJ5UzZUWU42bkFJWmloL3FUb0l1ekF0OGpFVE0xY3QrM2hEWm5KU1ZUanhySnI4dFVranNaUzkzTzlFL0xYMmViTm5oeXdXMVVKdHhTYnhFNUFrQVhMQ0VYVkgzbU5KYnp4K2VmTkxYWi9YNXMxVjdpTWhlQUlVamp2YXlOT21nckt0aHpEU0xYdTlVTUhQRDlOcUNlVUpJYy9FVm5qR05QeTBrOWlxZXc5cDRwVFVhU1dHcTdaK0FtQlZhMnFkM2dwZTNrMU9PRXI5TEw3TlNkNGExemNXMC8wdmdEZ0JhLzFGdU9EK21JMmY1MFdLWWdtZ2F6L3ltNG1KTVVxNDVMMnQ5dCtQS1ZhQ0Y1UXBWeFBlV2J3elB6YS9ibzVGU0xuYkhqU0FMUDl3U1g4OGg1WmNERTRaSG5jRUE5bmRxSTdWemNNM2ExcTA5UHBORmVvQjludUlaUGV1Z25IeVVWT0M3MnBiR3pzYVI0TjRBeUhjZGxUYk5ZRzIrZWxtWUNKcW81YlltYW9wT3RDb2tPYzg3MU5va2RwcWp1ZzZDY2g2dzhEZEVjN3FjV0Z6M3ZCNkxIMDNpbEdnSHI4Z3RpazR4Mk1PZ0Z5L3ozYi85dndEdjNlZGxremR5NE1oWWdGazlZcGZTQ21YSzdFY0szTmZ0bFBYRzg1YWZNT25BUDc3UGZXdVBXRlpqM055VVFuK1UrTVVnWElKb1U3OVVWMkdQYzRiTWNxaTdKWk90QmdQbXJ5SCtJUDJCL3ZERVpvNkJCNk8rYjBtUzQxdHVWOGluYURwRmY4bjh5OVovTFpBSWtWN2tNc3pJN1AzbFhvUG5wVFRmK0NVaUxMNld5d1N1TmN6VUxYdlZIV0NYb2J4SU9wdEtXTkgxZXlCZ0hNd2VCTTlhWnl3RGp5aHp0YWJuZlIreHgvSExuVkd4cnhTSVdQYTFjZ1RpWHFPZDhyOUNkUnJFaGdrKytxZVlnVitkQzVveDdkaXBKVFNKQXlBSWsrUXloMVo1QURuSklubDY0QjREVUtKSFVHL2loODNPTFkvbk8yVTI1YUhXZzBiMCtOTDREb0VKMjRNd0o1Q0JQd2g4bEQvUXVQelA0TG1QdEJwRWVJenFoZWpUdDFBamZLRmpvQ1JkbWhpQzNINCtBbE1RMkhkUVZyVEJqREJGcmQvWFd2czZHL2J3V1B6aWVOeGpOWktwS1ZkZUpKQUVWL25hNHBYNXlEK0dzRHp3RG1QK1VmWlRDb0tkZlJhN0R3V25FNDdSbXdiejdmUFl6aGZYU05vTndRd0RVN0NrRDZiNjh2OHJpYUE3cEdSUWYwTFFsOTlpRWVKUzRENk5Eb1d4QUJQQ3lrdEtNMlozeW1od3NWYURlWWt2d1pMeHNMeXdBQkYvKzJuK3Z0VnFRYXVuNEl1MUtHSGVmR2xnT1BSRlZ1bS80QVFzL2FwT0FnMFZMZFhacDJydzR4SE1teDlNeXZTWEhtMURRWXg4WWcrRnVQOE1lNFloTTR5SzlicGFUTWZwV3MzNjBVdHVscHhIT2dTL3grR3RIWkdnTWJqSXQ5Z0tPWnNkZjk2Y2s2N3VWYjVleWZHamd2SU9VdDgwanNhSFdERnJFQXpsQXdXa2NsYWNkRklLZUxHR1JGdUlKV1lxNGFwYWQvb2RFb1k4TVpRSEdycitLT3o2K01hMUI5b3lWNW0zaDNua3BvVDI0UkM3ZUlVSHBITzBpR2h1bzFPYzhNcUloYkVEOEFJbVNoL3p6NjFPMHU3U1ZXbmxXbXdnaEJ4N2J2eVBRZGl4L2txWDBlTGdvZnorTnJCbVZoVk0yZFpLN2VUQWx1T0xxZWt2cU5UZ0VMUi9wTnJNL3hhb2xMaWZ3MGFQRkRZMDBaZThyaDVYaldmTFhGZGFvNkdEbEoybjVsRmxpb3JrQUo4U0cvM1FubCt6Y0JlOTBDWnFlMUFIMVIxNDIxbEt4YVNHZW8yTUo4WDgrZWlxRWsxNDUwemk5UnlnWlAxSi9rV3NGZGtNRS9FTzBUV2JyODlSZ3BrbVlzRDd0ZWV5NXczSjlTeDZtOVdmdWN3V1Q1M0w0NVJUWnpQS3QrOS9SZ0FLM1dLeHZhV1p5RXU5M1g0ZXF1aUtCYm11dGY3KzQydVRYdGE4dUdMN1FvbVV4WXFRMDVxcTg1YnY1S2xJbS9WNTB4SzI0THlFaEptR2o0M2VTNWdSb1lrQWZFbXp3eDkvMGpUT0ZCT3VvZHJxUnNMT1U3TURPcER6Z29CdHU2QzRVZ2tYM2pHMzIvS3RGdkpka091RlNqZGdhSVNYVXNNUU8zbnZ3ODhwdzUyMTh3dUFqWThOdE44MmxYUTF1Qjh3YWtQZlhnN2VJdDJVSjhmK2JZOUY2a2FxZmVUL2Y5YWprTDZTU1dDWFAvQjFKNUpNQkQzNDJNOFhjTG1SeXloNHU4dGppZVJidC9QSkhVMEZqSngwbzJySnBOKzJGdWJERGFrL01RV2w3MTVWRHNuc0txanNTTStob0VIZHJlR0ExK2hCZ1lrMmsyUFZYRzhwSFVDejQzcHhaR3VjaTMzaU9HMng4NzFwQ252SGI3TGpwbUZRQkN2V1h5Y0xaREJJMTB5S2s2b09iL2pqUXkwT3ptM3RWVDlwNGJFc3VEV3JCN2VQQkhYUjVJa0VtenJrRjR6RlhuTENXOXVDMW85ZmxsczJ6QlJsTDNwMmlzNDU5Nk5YdjdKdWtxN3o3WDBleTdOSjlpRGtXaXNSWFpZUUtDOG15SmtzZFU0N01EVE5MT0I4VE9EMHlvZzR5eFFkMkN1clhsVUE2ajRQREtIZ29wZVgyWHppTXp5aVQxT1Nib2lKWmZQUFA0RlhxOTg1TXFyZElOajVQZzY4TmlWRENVcmpzRitBQ29yNk5rNTRGYzcxcDEvL0FOT3F5R1Y2cVlGS0I4Nk1BbE9ITk9zUnRMZGt2dll5aE5XZGQrcGY2ejVReWVESDZXR2Y2d3Jka2dNaWlLRG54cjFFRDM3ajdqL0RuNlZIaUxVTythY3psSUp1MWpYaU05QnY2Q0IzenZQUFdqbGtVZDlBNnplUXBlNVlHMUh5R252WnE4Sy9UWGcwN1RNOUhxbEU0TjR6emRxdHdhZHl3dlJMeGlua2ZseEJkZFBvQjlDazhwdENKN3pzUjhhZEliR3JJWjZpM1ZOUklIaG81cm1maGdXVVMrVzg5S2pPNEROWHZNM2FxTU1nU3JxOHBKUDByUEgvSk85SDQyMEtCZ3lBMGNkSWJkTU5yWWt2bTZiVnJJUzY4d1AxTGN6NWx2U3A5djhHUVc3eExOQnh4eVovRzZBRVVrdVc3VDFuZG1kMXB0V2RQejZteTdIVlZIR0YvMlZOcVpTbWRUcXpyTkRxMkVIYnUwZ2VEdytJM0xzdkFHeWJxUzBkY0pzZENnMit4TXk1UGtreGJCL01Zd3Vldk9sUFRNOFQ0RGpQWm5DZmk0SEdCbTNiSDJjWUhRZHR2RzBmNWpXMERmREcrWkVJZDdVRC9vTCs1eUowKytib3hES2JMN1RNbm9la0crV0FkS0lWWUxrQjNaK3JUeUJmYnBscjJycnBxTW1kM0RvdkpMeGJMSnEvL1BCZERMeDZaOFVDSG44S1RLWTY2dkRvenlvd3JzZldEZWh3SE1qOTFmSmdJSGJYMFhKNHgwa2QvV0pjd2djQXdCZ29GMjRYbzJBc01NL0U3VEhQVTh3TU1BaWNwQVJvamd3WGxiU2M2UzAxVlVCUjU4L2NQQmVSUXFoUGhqczFkMi9MU0RqT1ltTm9PVEMybWJONk9YTWNxVmRXdUFiTWs5enVveVl1QmNkM3pmZFcwbzNtYWNUTnJoT0JSR3ErRjJPenB0L1lMWERCaUl1OTVzVHhOK3p3UVl4YmtIVk1kdDhuekh2OTViMW4vSHdRTEVMd2psWU5NSkF0WkQ0Q0JKYmpsMFpvTk5nZW5LUmZ3Y1dxM3hvRUxUMGVSYUpJWTYzdW9CZFE5SW8zUER0ODl3ekdvNVUvYjlOQy9ya1BpSFdaMysxRXVmb2tybWRSU2xXTHpJaVEwV2cwbktGcTZEb1VaSEI1dG9NLytPcldvODFqMzdnczk3V0l4WGdzQkV4cXVFZ0ZkMk5MWEJIZ1h0eDExT1ZWejVGRGFpVExnMkxtVDcvS2ZWVHdVNVV5S0lKc09vaHl4U0ZnSXVXMkxVR0xudElJQmdoWmo1WWRjckluS201SFVsbDBUbFpKbTVNZjBrd0hUR3Fyenpub1FMeVV6bnpGTk1GREdHQnpNbmxaWVdmb1FsRjhRcmMrWXFYSlhQMjJaNEgxYWExL2ErVlpMSUVZWEdDaVlYTit4eUFmWHFJZzZBREx1aUE2Z2FncFVMOWdQdEtLVnBqb2E1cmIvY3RvTUVUb3BIME5maHU5L29zbHZPUkkybCtmWFBNSUVwenFDajhieUhFN0VKYTBaYlNwekdSSVEraXJidzUyMTgwbnRZWnFpOS9ZcVBMMisyU0VrcFhqRitnaHZNVXlCOVV4d1p2dzRWcDJWTWhiUFA5eWRESFZ5Q0VsWjdTNTJPSDlxN0lWYVBYZkprUk1aQmxjT3N5NlNVUDg5TVBNTlRJVlFZN0ROM01KYmN4OUV1TER2TEZqZTdheHZsL1lMc3g3dWRlcXNYTk1HWFcveTNXc1doTzR0TWNCL2Y4dThRT3VUcXIrVEZxY2FoYXU2NnUzR1JDak5na3EyNUVQQ3ByZWxjaWFtQUV1Ulg5MFNuc0dUUCtGN0MyUG5YWHZrcTdxTG1ycmZpay94MERKL3hxenVZUktxbWpTZm5TRk9GSDJrU1BNQ3ZZOERyeXlYTW1pcnMxMy91V0I1WHhxYXh6dHV3eURjMy9aTitKRzRYNFR2b2tla1lZaVY5NGs5K3NYWUtHWFBjZ05jVEp1Y3R2WE9Eam45dUdNOVZKa0hNSUxLeEFqbzAxZ1RUbXNEWmxlWmpMb1h2SjIxTHEzbGx3ZWJUbWxaWjh5YUNxNG1RY3RUaVFwazRJcmxaSXBvQ3FmdWF2TkZ0dWN0TWNZcGlybUpicHlrOWZOdWdkK2RHT2lNVnRQVHpLM0FCKzQ5RUNDcDg0M2ZkNkxIei8wOUp4cVlJZHlmVVlXMENPZGF5M2ZaKzVxMVpabzIxQXp2N1AvTDdyTHljZGpvMW0wd3plbkpNN21sYUp0NUJldFRVb3Jya3E4U242aFhwa1c0YVEvWjkycWMxTG5MRE02RHB2eVk5aVJudWNMcDhZZUJmWTNDMzFmb2lIbGRkRzVDL093c3dKMU9HcWxxbWFpWFUxclVNdU5NcTliVS91dFIxSXVyTlVQWExUdHQzWXU0VXFxb1NOQXZGY3MxQUdjYlMraUtpOHo1UTYyVk9QdUs2L1VPVWlvK2tlbEowcFUwbVczSm4rWWZWaEJTQ0x2S2RtMjZqZC80eGk3SWdMTXM2b0NaRmJWWGxwTzBvdDYxK3lrWEhZeHpsVnlxYWFlRnlDVzlNdXZJY2oyOFFjRm1GbG9yb0drWHBSQTVab1oxM01PbUdKNktIT3NNUWduT1BkZGc2c29JNnlJekZ0eXlQS3NON2drOGlKQmVWZ0hkcXd2ZWVzWlh0a05FSkN3Rk5vcThSQy9kRFJpM0hqaEdubEJtSjdKMkw5bmYxTEp2eHBSWXRJdHZSREFQd2ovV0R5eGdKT2o4aWxweTVYZ0NpRHhqWUFjYlEyYkphckdTVldjUDFhbmE5c3F1dWZtYzhaTGZMZ08rbWorKytYclJKaytscU5xS1FmYThuMzQvVEpEZFd3ck1iMExFN084c1BYZTB1WDYvMkc5VjMrY1VBTi9aK0hnUjJjckVxVnh6Z3Y0dWY5ZTF5T3dLTW12azdKUzBCUmNjdHpmQVp3Z2Ivek9JbHl4akZHME5DK29lMG9YWnN3dWkyRVoxVXdnQ3VHK1dYVFdHZUNYdVJIdVVoRERYRE1Falp2RWJRdHREU0NwS1k1TzQ5NDYvYXRlc0xGS1pIenh2ODZ2dHdIaURnZTBHZ1pLRHNORmtrd2pITnRBQlBGRzN6bm55UlduMnlrUjkvNGs2NWxORWR4SFYxT1NRQXkrV2FyL0NsZXQ0Y0FEc0FGTHMvOEJxTWtpRmM1ZGhJcThFUzd2aVA4bEZGVFNVcHhHMzhTZXV1dEFmVk54R3FDTEVHRzNjOHdub1JCdFRybGUzV3hiUW1LSnljMitGY3l6SzFjbC9PanhCcndqU0o2YS80RUF2cHZCYnVsQ0xTalVETUJNaU1haEZXWmw0OVl4b25OSThrcWpxTWJiN1VtSEcwRDJsQjd5TGVlWmZZUVpSMFNXSXlUeldkazdRNEloaU1lN1VLazd6QWN6cTcyOEx6OGhyc2VhS25sVmxvanlxK3R2cHQ5UmwwMzcyU1hUYko0RWpCWXRWOUJDa2NGRVRqeHNORE5zQzNGcHFra1RQVEttNmtKay9zOFBJOG9wQmRZRlcwNUpFOE9MNEthaEFtR25hMGQyNkNwdENCeFFBdm8vVE9HUE4zbEdGMjZGOXBHVzlidEtsZTZ1S0hJRVFLNG5LYk94ZWRkcUk2RVRBbmJEUTl0K1RPZ1RJQ0Q0UGZDMUpwRnppSVBQM0Nta3BnK2xUWTlURkdXbld0Zm1UcnVYTDFBamdVN3dvQ09pMHVKRjc2blNmQjVEb0lLMnNJVkF5cG14d3dsSkswWTZQdkRkYUlaU29LdWZWOTgydGk0NnEzZkFnMkZZZXRtN2NWRW9ROXJtMmpHUE03cGVJRUlNaVZKeXlWUFpmK1RWbjRDa3lBNUVDZE1RRG5vay9OSGY0dGZCMzZnd0ZOMGYxRXAyYmNNYWplbUN6SzlvN254dWdTZGJEMWtKVFhodWYzNUJHZW1pWFg0WjlxblJscHA0K3JOUzFJQ1lzZlpaRWpXODg4aWF6aWVjSGFpcEw4T0taazJVbWI0djgwU1hyQkZWNjY2REgya2NEb1l4ZWZKZE1oVXp1MTdXWUZmZ2swRllaWi9jSkxCOS93bTRjazhSVExhS09ReUNsMWpsOXNmOUpPUzNTQ1l5VytOYUZSZXFVMzJQaFNvRXpRZmpPcmYyTURJb2RLcDhwM1dFeW1UQVB1Mnd6YU05Rk5zcjROYUJmU3pBcDY3RWNjSU4vdnh2RnhoakVGUkJkbUNkaldKM2xQNjluOUlJRVhoVStHNjR1bFlZUlEyL0lDUFAzb1RQdERsRy91SFRKZUxmcU5XTzRFVWpGQmhna3p1SVFnM2JKanROakZ6SGF6bUQ2Sk42Q2ZLWitubjRIMStRRVhIeDllQ2F6anM4ZWFndEtPRnpYejBEbGZid3p5NWJMNjNMTjRQZjRCUE45ZjRVWXJ2cUJPWXMzbVNrVklPejlFbk9uSnFnT1cvQUdwS2ZWejY1WHphL210TUFHTUt6b01PbXZPcktCemNxelJSS3VOcGFnbE1IQ216bTdZbFo3RWlOWXlFT1RMYTkrUi9GWldDeUhYQ1o1U012V0JJcHhkTHErS0x5dEV4elo5OE16NTBpSjVQZHRVaUZIUFIrQmZjYTlEN2czZ1lXQW9ZaE11VnRQK0grTFZqT0hzL3dWVkhTbjR0SVNyeW9hU0J6MnBDcUN6MU11S0R3R1dSTFVnUEtldUtOeXV4Z09zMTY0TGpZYUxnRWlCY3lPL0wzV1ZQeElGSlNXeFlyMnBRTDVOeFlTVi9TZytvVTFrUU5lMzBNMlFLZE8wMldvTlYvT1F4ZDRwVlMwTWdLZTkreXNROTVueDdobkVGV2x2b3dYcFZTTzRsL1ZjTXhHSjI4MDU5aUtKdW96YXJEYU1EUFhnTnZoMzh0cjhoY2c2dEVia0FHUDdDK0crbnI5YlJKNS85ajRrRjJJYjFJdGhQWEZra21vT21zb2w5SGFON3I1WTV3eUJxZXlseUpIcVVZK1UwL0JSa3pMMmdpNUxka3pjTW1waGJoVmZ2YjdlTmNnS3ZqcW5KbjBId3UreFFiVHNIUWxPNFpOclhKZUtHRTM0MTdNdGptb25QR1BlL3JNTVh6RW9HRE0rSVJGODArY2Robm8yY0dMdXdLUUJSTk95VXU3MW1sbU5Jd3M2ZHdUTDZ2eDlvd2pKZmFGcEVhL3p5aSsxNFNhU2JVUXRnOUdIYXJRN0NabU91VjFwNklraU8yYUM5VVUzMVpMdkRxSE5DVjI3UkgyYVNURVlSZ3pUclE2WkVla0plaDk2NkVXR01IUWczcTlEbjQvT2JjUDJ0Q28yU01HTmJqcy9MdGhSNEpJTXhzTjJkNmxaRVpkUTlIdFJkcU9EWFp5SE03a3RXd0hUZHNVR2w2dGpNK1RNVmJMVlVoYnUrbFhsZTVHUTQvakN2WWxRN0hYNGx2bGZ1RVEwMDdIVjhkZ09KWU9CLzhjUkoxc2YxbSt3RFdqZTdFZXVCWlh5aDQvcE1KaVQxVWNQMHQySXBob1dpVjc5SnNCaWFkejNna2ZkVDFLR1BwNktRUTZJU2NzelRMTlJHdk9KWFQ5S1lIOStPNVUyODZSWVF5Y2FhTFZhRXhjbzJEWTRRTkJKbWJDa1c1djk0UFRSc3ZpVW9yd1Y3eTFtQjd3WG5qVGNTSVNSV3VETUQ4WU81dlNzUzJNK1BkRnVOY3FlZ0FpMDg1SkVoazFOSjIyQlRJVG41M3N5bUt6cFE3T2F0bVA4TTNDNDViblFMcVBMb0pvRnprTU8vNjBNRnR4c2t3WlN6dzlMRkFQbHJmT0RPeGJJR2N6aE1CRzVLd2tONTM0dDlranlTa3J6d0FLN2t5Tm16Z2VhMHh4ZlFQenVzNUswVGRoc291cTVCeUxJZHJKK2dnUDRub3Q2dGV3L0tDNmFlRmJuM1JtQ1h1dXpHRlY2QWVuOFBLZkp2Yzd5S2wrVU9UWGVpajZmM0VsMVpGNVd5M2dpSkt2UXhoaGVoUWlUREZNWjNtYnExb1Uzd1EvVUMwV1dzcXMvOTdkZ3VBZ0lDQWdJQ0E0VDc2UGdDbEpONFJBNHBxN1d3Y0pxcTR1OXF1eG9jd1dxazdsSVk4VG10UGM2MlEwZjFIcDE0Uit0QVc4QXdGRjdjZTM5ZWxsaVNSV2wydlVtaEZmRnEzMFZkV3B1czVaTXBUY25wTmNya0pwODNrNEY4alV2akdaZXlRQjJ6Z3pPWDZ0WEtWdEFIKzdqbTB6Ulg0UVN5ZGRLNHFjWUg5M3pyK0hpejgvTHQyVHZDUW55N2VhRlJmUnh1QnYzZVBFaUo3S0cyYnJDaDNiMUdObVFtcXJIdXB6cmh4Kzltdk04dXZQS0JyR2luaVIyQUJXKzU1bVYyQ0xYdkwrZU9uTXJRL2wwN2F5MkVLY3AzSldSbUJJWnZWbGVxWm5yVzZCRUJoazZwbHl4SFUzQ2Y3VXQ0NVREMTl1Sk9NVjc4N0Q1bkV5TjZ5OGNxRGN0dHVObnNGbEFhUitBK2ZSSytoTUpUL1dEclBtTHdzNlpud0JLNmdBenBnME9xMVZJVGNlVkJick45dnRUWDIvWWlmOE9zbSszN1JINjdWZitIcUVkOXYySS83L3R1UCtIYjVmYjBuMzJkZk1mT2c1L2g3c1g4UHRaTiszcksvaDlsamZaOWp4KzMwbzkrMzdNcjluMmhHL1oyNC90NkdmMmRaZjdDdmgvWjY5bjdmclFkK3JxSC9OK3RTL1o5ZzMrcjBVZStyNnVqOW4xM1cvVjEvWDFiMVgwK212OUo4NTFWQ2RXYmVjc1Y2RThyaUE3ZGVBbzZlcXFNTnozVDRIRjJ6SktuRXk5RmxJN1RCTkt1SXZlYVV1T2E5TDVaLzZNVEc5QS9sVlFXeHI2VXZWYkljekhISXNMei9SREZBbnVva3BpUjE0aENDK0t4M2hEWTRRdXM0bVVuNVRzU2xSRVdGNVo5aTFTejcwdThnbC9XYXBaU0gzc3dRajFsS1JUTjRkRCtXUEZWd1I4c0xucGw3bTBQaUgzNUViVTh6cytDVzd6TnI0ZUd3U25mNUtpVTdqUmt4anZkUmFyc3h3bU9pQzc1N01nMzVNTXM5aUhQNmZRUkptNFV3Q01YWEtIUGI2VHJIcUVBM2w3RG1LUHZLUmRROHM1N210VVorZ09YT28vUncvRFNkS0tsdFFJK3BxS0poNC9BdktzWHJveXVuRHAyd0RmRDB0M0tySGVza05wZEg0ak93UnRMYnBTbU1ESTIwZDB2MXRxc3EvbEdNRTRaRE5xcUcxY1pIVTU4dHBNOTZ0bkxOMWtTeFJxQmVJYm85WGlWa1c1N2R0Y2haRHplZzgyYi9XbGZZajI2S1lmdVg0dXFBckVDb1Q4Y1kvZ1kzQzNuT1E2YVUwTVpiZkVhb2V6c2NRWjlSajlVZ0REVHluOEJiOHdOL1hqcG9iaDVoOFBLRmdEQmFSZlJRZXBHMkFsYzJjNTNtaGJHNE9USDV3SkEwVDZZeEl2V3JONXlxaTliZXduTDRWdjRKYmpSRGFNck5FMzZIN3J0N0VUOFkvU1IvdEJRam1Td0lEcHRiaXV5V0I5ZHVTVTFiREVDOHRycUJ1ZWVQTDEzZ29kbEdHdmlYNmZQWlZXRzlaZjhpNVdKTFdBWHIwZHBwNkJMVDBBQ29JdDhPWUVJMGROWTg3YUEveklDaWFTVVlTMmozM3pDRmhtaTh5TkI2eXgrZU5TVHMvMW9HVU1WaHNsRUlCSytQV0U1dmxjd1d4bzJNMERWMDZ0NEdVcEhTaFF6UHhHanVpZGkxYW5nQUpUSVJnVVpsODlacUxzd2JxRjE1SjhtM2dVZW5OR00xNGNxMGd5eFQzV29PU3dYMDFQOVdXZys3cnhwNStCN1dKcG9mdWFKaXpoNUNmUGhzU1I3UTlzRHlJSDliZmxqemp4L3pTa0g5a2YzOGtvcTBsTmNGdkdpZzBFckFNNkY2VzYyZzg0RklScTJhVndtaFFzNlc0cEYyL21DeDBTZ2EzUzVLc2VXa1FTNjNxTFhYWkhyak9CRXBpWVFBeGtuYWV6a2hSeW5FMU0zcEtDUzVDWk5YblQzVnlZMWxZN3Z4aHpEcXRCSTFBVVNhVnNUa25kNU84VndyNmtzMERsdmJwNDE2YXlUVzlzU09TbXBSOE0xREo3QjJuZ2hlZWJWb2RodlN2QVdvM1Ruc1VwejNueEQvUTNwU1BXU0xMd1Z3MUt6czNVM0hJMkhsbENyajUvMWc5R0pJV1lkUWZCaUdlZ1pCVEZFc3FISy9NSjBGbzduOVJna0tXcmZXcW81VXA2UzdCTFVHc0E1WS9SZEdVRGJWT2tZRW5GZGJuL1ZTSnpJa3g1WHpKZkUxdTVyWmFWc3FiZ2FJYzNaVEg2OGVHdnpidmc2ZDdhbGdreWJiQVdzQ0ttTDc1UU4wS3NBK29ZTy9wMEpFbThxVFBVNWdZQ0xSZmhrcGlHaEtUUW1TdGExQm4vS29sNmpYb25wcUsvTmZzcXdlRFJEVmdFM2FlOFA0YkZ1TkJTWU9UUHBOdkxhUnpQMjNob2RPVEowZkhubDV3bVd6RXdzYk53SGc5UGcxZXdXM0FydDJEb3dZKzB2cThjSzlWR0NHcjZ2ajJlTXp1RHNWRTlyTmR1dEMrQUxrSzhLNks4cFN0MXVjazVUc3NjZFRzTW9YMEdtSjZIc2xHUUozV1NLZlJwNVFRV1MzT3BYNXNhSzZaR2pmRVkvczd2bENHSWgxK2Uzd01XRXluNUticGlVYXBOMi9hR1U2WEJOVmVoeFBUcytqRUhaL01QOFZqZTlFdldSNXhPNlBxR2ZmZU0rMVE4cE9KclNBTkNpbWw2VVFacHRRZFQ3ZFN0a1JUY0pZU2FwMWZkNFg5OGdZd0V1ekZ4WUlVcjhoSkJtTjR4d0xkeDJJaFJjbU9uTDg4RDQ3cUFkRzlsSTRIN1J0Skx4eElDSUgrVnk2blRyYTExL1dxSHJMWXVQRVdLZ0JiWjMyZkpzYVhQVDRreTF6d3ordkNCTy8ySUp4SkZ6YTB6ZnRtRzNQcnQ1Vm5IRXNINXVRWjJmWERNV09GdjkvVk5ZR25sYVpDM04wQXEyZi8zNDJFdzhSUEp6UHMzZVRoRGpneUVvMURpd0JXdENBMEFQRDZiRjlhS2xZZkZmcVNvUURQVkNqYjRWeno3ZHdyWVNObjBYbVBvSjZ1em80SHNwY0RFSVlwN245OU45RVpnVmtjR0docXNQOGJsTEdaR25pL1MzSVlUVUNrK1NQZmd4eS9IQ1lPalovR1RJZExLclJUVmNXZUxMc2FEdlB6dDZiU0tzQmZzaEZlSXlKalVVRzRObVAySDNUSFRHejk2aHBxaVlrZDIxdWFLZGZ5SGt3cFRRTGxxYUZFVFhRc1RaYnZYeHZSL1dqelk5b0t1S1NyQUd2YllCNEtPaHhqM1YzSkh0TjRJencxWDFnOEsrbms1bXpiUTRrOG83bDZtbkE1R0pheEFYcnVndTQ1VFF4T2lzRkU0bWFUUloyb09oR3Z3bjg2SGt3NENIditxZCtWc0NnRE43MEJ6d1Q2TXhSazZOaGtoS0xvYzNESVE2QUxURmFVRXNzL3pZamVZL2VnYmhzd01GSFB2V1ZsaFNpZVBtb2kySm8xWXJzL3lsYjNMNEdyVnliTWlMTmptZVZjemFUamVMR2kyNFV6cSs1SFV0SFBZM2RvYmFWbGpxT204elAyaitkQ3h2NFdNanV1TnZzbjNvY0lUV3VKUnNJTXdtYUUvY2dva2cxMTlMS3c5cVpBZDlod29IeUk4N3FhanIxRGI2ZnhFTWYwVWtwK2VDUkllWWswcjBHVTdQcW1rcldNSVk5N1VCRDlBSG0wbWNuZEFJejQvY3V6NFBCK3lmTXlEaWtiaS9mZ3NuYjAzTy9oclorMmRySHkrK2FyV1hUT1dWcDRvanY1ZkFGREh2Q2JaVFVETFZMLzBVZUVPcTZ3UUlhZVdNdnVrVXlXM0YyK3dHd1lPa2Y5NkFjRnNOOUovZG9TMnc1Y1NHODQ4S0JBMDcwbDJMcDJpSVZZeFkzN1ZHcHdhU2x3NnpmUlFKRnpYcGhoWkJ3OE9PZnJXQnRDajQ1VXdSSjNTTUoySWEvTldiQzU5TXFyM0pTam5jdytsUS9sN3g4a1R5Skx4dkQxU1k2RU9HMjFsVXNVUWlraVR4V3AxamRsS0l6SS9ZZElFUlQvcTlJamxuUU1uUXNpZFNtS0QzYWRDaFdUM21UeWFhQ1dyZjJmUmRvSkZuY3JnZHU5UnhMbkphTWVNcDJZVkVzWGZkbTlQQkRzaDdKT1RSOVdsOEFKemNQeSs0RnlZczI2VjdSWnkwRFYzNHFlTUhab1J4dktuT1VlMkNLUEs1enFFd0lzZVltS1FVVjJaRkVrT3dPN1hFT1FyVDZXaU5VMVU5U1JYM3M0a0drUGExaTRVSEpMT3BqYU1xZGVKYnhIZm9aY3gwSzlTL0NMUDZiV1hOYlQ3VEZ5MC96UzV0S0xpRlk0YTFOVHhNQXc0dnFRM0lWWVQzRkJGaU16Qi9UcVVKNElpVWFOQmtCb3JDd1ZQRWt6Zktyd0pvc2lwYnpweXo3RVJ3dXRtYXJWTGpoSkM3Z3AySW9uTGdSdHNqbFFZZUNLV3dqazBhNlBJRGUzVTZxQTZNV1RRZ2kxV3RscEIyaWJ5UmExRlYySE44TkhPTW9LMk5SQ0N4cGdpQncyUk5mNTF6YWhnaFk5UDlQT3d3SksyVGFwSU9FS1gySWVNck1DRFIwZW94M2o1S0thekVyMTFRNFBMMUpMYkNNektMOVIzKzZiMU56L3hqekREdTBTVENiUVpBTDE5NjZvb29Pd2lXeVR3bUtjNmpoRGYzVjJJN3ZVRnFvbTl4ZExQcmpNWGRrVW1zdDY4WDRuNVFIbmxmS1dwRFFlVlF6eFJvVFFxUWpIdTd1WG1xYkNmRXRzc0FvSVBjTXdzMmxMckk4ZUF1dUUyTWh4ZU1mUXlTazQ2dFJPTnUwM2Z1VTJjVTJTbTZ2NDBPUnhtanZGbG5WaDV0blBwV01vcDd4UWNWWGNWZjJ2Ynd4ZWovWTlZbytmbHNtZm5BWm1CTjk4UTQ3cDdpTmJnc3dhQ2FhQzBYYXdRSE5DZVpQUVFjTWZHdlkxRlJVaXh6TmliTExQU2Y1ZmZsWllNaGZrWW53UGIxbTVEenBEeVVtclF3bEpvZzR1aTBjdk45dU1JdzNNQVVSei9DVWUwc3QvMjZ3TlhRaVJaNEloSUVGd3I0ZkZKamFqa0RvQXJLd3c5NG1RN3FnL3lpbHFQQWVTeERnd3hhYnZOK2pqYUU4S0VJSFlTMGQ1dkI3VEg5OFpIK1N1L05mV3BGYjFtTENIZHdPdlhBQ29FV2poK0hodTVPd1E4Vi8zRDF5cnZLc2lqMG5QTnZvSGlRYTFNK1c4NzdBTTRBRnAyL2lMVXpHWjlVMmk2MUJWYXhCK2dhekhIeXpnb0xnall4M0lWTk8rNVhpM2owVGFyS0NvVTVENGE1UDdOWVBKZm9Udm4xQ3ppemZMdGNuOFJneGd6ZHErYS9QWVlQT3lCZjY0RjlNeG9nSFlEdUxJT2xSa2lZTTFSdityN0ZLekxrZGtTeURHbDRRd2ZmMkh3a08zbkh3ejNnOEhVQ3FqcVVqdkg4eTg0MisxNExKZW0xSmhhVVl3M0I1R2Q2d0NnNWZJbTl0VCtzMGZ6WmJYeGM2ajZSUUx6TW13RXJiNUtKb0hWczJodjNMNDREWmxMeVhLQlhXRmZ0M3paZUVKcGdMVmxTMzJ6dnYvcnFJNE1NMEhNMkNFTnV6SmZuSE9nK0xpWFJmQlM3MkYrUVYxREFFTkRaSFpXQmk4RndUY0JXSDN0MkdVaHY1NTVlcHlEZm4rWmxDK2dVbTB1dWQ0dzdmekZ5T3dKOEdKNno0RTdtSGNVNlhYZlJibkJTRjVmSGJUeGxnWnFhQk85Y0ZleDBndmNsNE9lb21ETldGNG5GaWZZbzJJUzBBaHpONmhNWWVmOXRMUzRhRUFNSmFVRFl4ZjRUdlZIc2s4V2ZhRGZwOW81blJ1OTl6WFkyalZ5UytPS1h4cUNEVVVuZDR1cVNCMTZqYXY2elUzTWJ1NUpna1czNFRLMHFhYXk1V1d5QWk1aU83WHVva0F3T1prV3g2WjJqd0xUeXZmVCtibnRiSnVqV3RvZGk4S1VVcTlNdys4MUN6SEIzMldqYks1UG5PK3JOVTNrNWgzSzZEVlJSeDFPWmRNVDhwOWZHSUl1MDU3eHUrT0cvaDY1RlBRa1hSTnBrbGRUaUVXMjhLSEJ6UitEeGlUYjczY0FYcEluQUZwZU1qaVZQam0xRW5yQzlnQm9OdWtzWmlBRWQwdGxTeDZHOHR2ZTNieDFUZFVRQlo5VXlzbVZIak14bkl0UlJkNy84S2hrbnpoWUNpU3pxZ0FtR204MGdUaXl4RVE3OHpmcUdxYTFnWjIrNkF1MFJqM200SWhsVlZ6MlU0TytjaTd4M2Z4NmZ5TjkrK0VtcFdZQTYxOUJ3NitJWC9aaVRYL0xYWDg1NVhwME5lTWVYdGYzdlJYVlMwd0FHUkt2M3pGWnZRa0wrak4rc2IyQ2FiZHlDeGI2TGIzUVZ3ZjZER3UwUkxUNSt4bkhOMzFpVjMyZUFEa1A0V3RtY1dDdWVhWW9Fc3BLS055MkxMN3E1R3ZXcGtFK2JicGxHQUJielp2bVdzNCtqNWxVWFF2SGVTZEFZWHZUeUI3NkhuTnFxZU53cGVGZW04NUxuYUFkalJUK1NINFhiYmRjL0ZnbVpVOTlVQUgrUzJtclREUU42cnI2WEZXN3g4bGdFU1pkWWt3dFd1WUhUQ1JWSGFSNFZpL3dQUUVYbkd5YnVhMng3S3Y5VGs5TG9PZTI3NWlUWHkyT2NpV3dzSXZQTS8zZkpFVVcvT0ZKU2orcG1saUxnQ0FURUJONEtESjVOTjN1UW50YzJuYlRIMXN4RUFkcTh1aW94b01yTDF3ZFdVdWF0L0FwS0JXdmR1dnJ6THV4YzRVZGhXbmhMZGdLSmpnWW5LbWs2T3lKWGVmNGwyaDFyektMSHk2cDJqY1c4dDhWWE8zR2RtU2YwUGdKbWVsa1NDQ1UxbzBtUlpSVm5zWWVZODRCb29wZnhiaEozaTB3Y0pRS0dlTEtVTzVhbjhSVEZRS3dESlVoL1p5aDlCRDQ2Y0M4dnZpQ2FIWmVuelpPTUxDY3pxelhOMW5ITGpUbUtSYzR2aUtYeWp4UGhpWGFyeTNMakk4MWwwUTRSTTQ3TVcrU3pvYVBuZldJKzY1aWsyUUlhNmRLbWFETUlkSVdHaU02TlllbktlYU5NMXNhbzZhYTQyK2JKRmcyeWFEL3owd1puL2JSczVUdWlvUWJBS25LdlVmUXB4cERCRGk5TkhrS3dQQk1WMHVmZkVralhjWXV3KzBFOWJ5dGhGNzFsOURrYnloOW1aOFhLclN3ckRyYlR6Ylltbk1ZeEZrQWxmK2Nva2hGZmhtc3JuSGx5c3VueHJxMlNOU01ad1B1UkVrVjYyWFhvNEF0RnVMVE5BTEphcnJ1SVNDdC9nMEk0ekNvemxtTjBIMEJDMDAySE5WRFh1ZStlMFoyeUJJdTdleUVtc2UyMVZiN3JkODJENkx3WlFGdVBDemE2Z3VSQ0NxRWp1cVVoK09xNjlGUHNmQXRCeDM1S1A4V2FnRzUrd0twbGtQTzB2S0MrdGZuOHlpdVlXVHEycllVUlZOQ1RhbDRtMFJQbkJMUnFncy84Z3kwZXlVUHR0V05NUkQ5Z2lTUmYvUkU5TUthcm14UmREZUdnNWcyTFdBQ29nVnFQZExyV3NUQ3NjVGQ3YnhCU24xeHBPZnVDQnl5QnRjTzhRUWEwTmcwU210QWh1Tk85cHpkRXBKb0pJWmxjWTc3UEtjL203WURONzVrNTl1aXhGbmtDa21wSEpDaUc3NnVwU0ZPaVB6WmpReE9LTWwxTUIxTzN1SEJBb3o1OXFKTkwwSFdNM2U0VWpIalNTVVhIVWZicFdPSTlaVjNBaHNITEk2a3dLRk5aZ2xzSzNnS1VRYWVFcW5XUE5ISUJvK1d6RXdOckZIQ0hHS0lONVBVbm12Y0k3YnFPaExncVlxSjlRUmRwNmlERENmY3QrNmQ2V3I2VVN3Vko0bW5Xb09Kd29rYU9vaHRTN3AzWXJ3YWswM2dDakhOazdPdEJOUTh4amNxYTNkQ2lOc0dhU2dkMlBrSXFrR2cxazd6bHd3czVDU0srVmovbmVCWWIrR2tYN084TkNwWHJ3b0FtRzFQODV5VjRIeHpCS0wyTHFyc3lBRUM1bVA2UTZ2QWh3QXlLQmZxbjhaME9KV2crdUNZMW9WZmV1NlRiSmd0SnBYU1BMRkxrOVhtTEtSL29SQ1YwT0NxZmwwSWtUSlRSS1RrejdVeWNMdndHcVFTcVBPWnM0RlpmV1F0N0Zhbjk3VloxSE9STTIyTGFQbUFoa1hVaUt0QUIzMDlxTk9jTEFUUTZCOTlaS2tlaktWYTd2UXVBTnNPSzZzWGgxTENVbEYwam53NG91NnZiT1NTZ2lrYkk3eGg5TlpFbXNROFROajRoQ255UnpwZnVlT2JVQlVOeHBNamowRVEzd2l5M29DSk1DMzJkdnZwMlpxdklBcklhVUUzRWxhUEtBbDB6U1lIdGdGa3ltQTZPcmJWazRIL21ZeWh1MlcyZldIVWQ4V0Z3SVdHQmdxNGlYaEpHUUJWZ1hFbU9ubkU5cmFDS3gzQkZMdWxtY1k5K0hHQVdISDMrRk9ndzk3VkFGMXZSTUZYZGpMTWl0d1NacnNHdlZvZVhkYS93dFFpNUgzQU1YYm9US2l6ZzNGd25UZ3FOYXBqZC9KRTZ1NFJYZHV6OTk5SFhraG50VUF5VHlXZURyMzBjV1NXSkMranN5Y2ZaSThHblE0aGI1M2w0TTZSMyt3VTcvWXpYaHlLU3lXaGFCOWwzUmJnMXozaXFqamhWRHBDaEg3cFIrMTFlV1k4QzhhZkJhOG9Sd1dubnk5SFFVVlZFalY5VC9ENDFLL1kyS1ZNZmZGWEdhNVdmRnJpTUtUTHduaVAzUlI0a1pKOVN1SVVFZFdIOUdxUnhLTXN6OFFXNkpiWFRTSU5KcVRVN1M2VnFyMUpORlFwSHdLVGZ5eFFEanM2RWVQSExrM29hUWpFZk5iMVFPN05uK3lyS1U2aEpOb0Z0QTgzd2hOaXJicXBWbm9WUjFkY1hETFNxTEVoSEFYVXRXRkNjYUFMRk44UlpLVlozOEpmbmJOOGttODZIYlo5R1AzdWVzNlpNZGhSOTRzZldjcGFFRU41a2VianB0SGZXdVB5dk9meVFXMmFqaG1MOEl6WXoyWEVsYUtlWHBoMEM5SW1kRTdiMUNRNjlmQ3RTZk1jb1RCdElwNFlxWmJEUk9OK05rVnZxWCtxbzFEQ1hhbkt0dm83YmVsWDhSMWpjdzlvcVBSdCtqWmorQVlwUnRGSmRGVm96V3ptZzJkaDJnN2lNYVF4blJKUGROQW1sN0hSWG5yTkZ0UHlGRGNQY0dZOEVzcnFVdVh5MUZxM2pVZWk4MmZBdTMvMEZUeHJEMGlnVk5CcTlYR2kzcC9BeVplUjZUT2ZOTzQrenJGUVROVThuTFlyYjFhcEZvcmk3WUNMcUhSNUpoNCtQVE1aYUl6bHJkczZKK3phSGxwdHhmOXN0dm1TSVVjWEs3VlAzTzhZT3ZrMXl2R2s5ZStjN1NGNURZR2F2Y1VMdmpwVjdCTlFyVmU0WFNUK0ljUzVyalBCSEZSK29MYWpjN2ZaYkoxS3NlazFLQUpRbzJLc1VjaWY5TkVRcEQ1YUtsdUZ0dmg2NW5MQTI4S1pzeWZXZFZjVjZ1dFFCS2luYS83aHFOdWg3L1ppbUN0YzFSYm1CYXk0Y0o2V3lLWE9ycUU2bEpnY3QvOUVCaVhXWStNblMzeWE4cVpmajlxSERXS3dJbmZNbWlDU2lMcFFWSG1sTHNPbGtuMGtuK2MyUitxdDFnVktENWhXZjdlejNHbGlYZ2NZM1lCS1ZyekVBNEFpUTdhbEtaZ3RCOXdFam9vaHJhTW9UYU8xWVhwck5RZTA1THZIZGNUY1pOekk5bG9sZWdKbFNGSzlLSmF1azBVd1JyWW5zUnJmNUVJZ0U1bC9WazcxV0p1UVNMTVF4RWRBckVhMVpQajVCS21IMkRpT2hoZVczTUpGSkFWQkloNjMrRlQ2SjFydkRPcGU2Rzl6M1c5NEt0d3p3OGIwZUcwVm1Hc3hDdEp4aVpZeGZxcStTd000YVQ0OHNrcUloQjhLWHFTWFJJV2N3SnozYVJRMEJZVHIxanBPTm9DWEJEYjF1YmJocFl6WDJYQzYxUUhRa0M1K3pKMUhmSzkvTEo2TlE0Y1pwVUJNWjhkVm52cGNnc0hrOFJGcnF0ODB5dERJblVsWm9odXpPUG5lTklybEx5L0QvTUV1NGxGRFBLWmJkdG5oZWdxRUJveFhOMU5pTjQyaHU5WHJ1OUNpQTVwQ0VGTFAxL3RHbzU2cGY5Sll3OGEwbEVQNDF4KzErc2JSV25IZy9tT2lrVkJDdEYwTktWL3VnMkFvTHZrQ0M5eVdqOTN6bXgybHNiMU9MbzhjSmlYOEFFb0V3NTVlK1ovaXhNY1FhdGg2cW9hY2xGT01BRDNrbFR0cG00R0tCQ2ltTnUxd0RaTHBBdFVCclUvRlh1emI5a3dHNXF2SWswV09NSi9CSWwwc0pNaWw5TzByb1J5cXBFRWl0eU9CcFpmOXk0UTg3MEZzZEgwVnlqQXZrZG45MkZ1TUVuZGhNVlRUeXBWTC8wbHV4S0d0eGxMUTQ4U3lGRXRsaXh5T3AyNUxqU2NYMTlHN3Q3bDI2SkxrMGFsUXN2ZHAzcmVGbnphaHZSaFJFbjlaNDVTQ0drVllMZzR6cVd5cDZjVjAxc2pSRUx6Q3JTeG5OSFh4aGxpL3c5enBReEc5WnVPMW04OTM3ZkZvUHBQcXNraXdCZUZ6ZTNVSUJBNjEzT1dKS0RYWDNIYWVZcDNEbURuazBKSlllVXlPb0NmM2NSZDR5RW5BY0NBeWYxNVNlUTc2dWRHOWdNSFA0WFdQR01NVnZBNjdaM1NTUEE3V1VhVzRoSlI2QmlPbnMwU0hEWTFnVzZqMytBQUc0YTNESEJSZXU2d2o5U0VYWDE1N1J4RVcxUEQ4OHFrUGsya2xmcmRWaHZ4Q2VWU1NjVVlnWEhSMEl3WTY3WjhOaTFxRDRTQXR3d094L0dTSlIvQTY1S3ZTZ0Q3RHR5cnVpenBDcGpYcmE4c2hMa2JXVGo3NjZtU3JZQkVCd3hndG54SHF1VmVNcWVBNmsxcCtrVnBZMUJWNTBXQ3NwaEs1eXM2enVLZzMya2YxK0MrWVNOVXFjZWZ5QTVuZUNTYlVRVDNtYnFHMTVNVkVPbDQ1a2l3UWtuRVU1YVh1aVY1alBrb3c3YkhBdkdKdDhiNDg3QVJ3QU9VRC9GV2NSQnQ1VlhLODRpby9aUEc1S2IvT21DdVZsODVpNU1lOWJ3RnQ5WmxsdHpRZHVhU0NmODhVcXFIUlp3SjIrL0YzcnZzOUVuQ2kweERPMkNUTUVBSXVzWEZscllBN1hhZzBEUUpybU1sUVg2aG5ibXZUVmZNNDZud3VIUHpYZEJPZmFzUVdseDJRcnduSkdoOVp0cWJyaDJTdFl3cHR2dHdLcjk5elVlVkd4SzZUd2phZWZ5Umg0ZjhCbUtVbHVVZ0gyQXJDc2FKazZWVlFJL1pjMEpUWThDLzNpNDNIYlVHaHhiMCtkWCtyN0JNVnZvRHJVbXZ4ZDBTemVhejQ0WWsyNHc0L3pSWnRSYUxUVVBpWkFOc0JHZTNCL2hIY1NHeUNsZ1pXZ0RyMEMvcEJDaGppOXhoTnRCTDJiQUFaWUY2WVQ0Z1NhVHZIcVJQeThXdmhzWXJVNUZ0cGRTWVZwemVMOEdkSGpqL0tKRlR2UlZkKzUwUjNVZmg3VFFBYTBaY2RucjR4ellPSUwxQkdheTE2MnQ0U3pUWVlxcTRTemxGVXk2RzhxQXpVWlozUTJUYlE2L0xvTVY5cGJnUXVqeHp2RmVGYTFYbVI0VWFpTUs1Vm55cDNYNTEzcmJmcHNPUkhaSGJzVkNsZUo2b3dVWXNaMVErdysxd0JVRzRSTGhQZXV4Q0lhL2lxMEZtZXdDek5zREdxM2s3d2UxVWlyb0syb2VrY0lESFpBTDB5Z3kweDlhYjBNVnJ2SkpCYjBWZVpmblh3eVNGTmFUbERaQkY0ZmFhbUEvODZVcktmeTdGMklub0ZpWGE1VXdKNURUSEFGUU1CZkU5YlZMVjd0Rm9YOExOWHVhdW92QTZHVTBveG1VdDkrbGtObTk5NGpJSjZBNXBBN3hWQzl6M0hDN1dKbmtxZHdVQ3VaVXVCNWpScTN6dndiVEliNHIya2t0TXVjTndIb3hGeGZKOWtyZWo1N05icFMvUkdENlpKTEJuWms1cmdOTUdnV0ZnSU9EZ014aWM2WTkvcFNYejVrTHFzZEhBZEpHYVRpQWVGNXg1dDNqeHZyRVZ5YjZQNEh5cGFqaEtsTGtBdCtlOXJ5OUZELzh3RFZ5Q2tIdHcwbklMY004UkFDOUJjT3hHV29sR1Yvczk3SDE3b0xuUjJJY2VpK256UnVLTE9iU2ExM0NlL2oyak0xS1BJVG5Dc2ZqRDN3MTlqekV6WFk2c0tTVjhlKzV3MzdGaFR4L3VUZmVnODhJeVYxbEpScDVCeWJLVnE5TWFhVjg5VGQzMi9IN1Z0dDdKRFd3VDNPZCtGTitneGFLN2hqMmhzWlhwa0tWWmtTbjlIb2lTNnZDV0VOSklrNHN0ZjBreTBURkc3RDBJbDNibGVYZGNMVGxuLzZjSHhkazU4eEpPYUtuZHlTbklXWGsxU3krOENlUFQ2SUN0eEVjZXZ4d2NMMXFsbjVDQWVzdzllOWk0dTZKVk5YdTdTR1gvZW5LN3o1REFiYS9ZTjJ6a1ViTXM0ZldsK0p6VVhXS0dTOGk4QzFDYk45V1BmZW5LUGMxUDQ4WmxWMjRnN1NoWWJHUU9oWWRmZzcvQ1laVklVVVFCK0g3OG92Vll5VkMxQkFYWllWQ1R5Z290NUREUXZxZ21SdkliV2UzcWZrdnRPaU5JSEpRU0t1SSs0TFpmU1lYQ0lzR3dFb1VKWGl5NXF5U3Bua2NTaE5QeUhqZ0IvYmZDQzdaQWI0VmI5ZTdMVEtYd3M5b1F0alFoRGsxNDJtdnNITVFhN1c4M25MdWhUanhBLzAyZ2VzMWZkOGFIV1AyQ2tTeE5rQnA4amJ6Q3ZDMnZFNXNGYUhvZFRZSE1tN2c5UXcrU0hzVVgyWWsyRDFCUnNpK1NHcmQyRzE1SjFPMzc2ZFZvZWdYSEhZUjdZNnlkZHpwVklkSVVBcmlTL3ZHMmJlMzhxUXlNbWdWRDNlTlRPQUJiZ1A3d0VPZFpaVUpieXZ2dXZYU0ZmYm40SThwQXF1MVFIeFhKZUtIUmYxTFJiNTJXa2RYV0M0STk4NEZrK0JzbnY5TnF6amg0S05CS3UvcjBCMFY2SnUvVnFISWdWSzcxZVkvYmxsR2JVMVh3K3NYTE1VTWFlZUJRN205NkRsV2JIY3RjZ3RGZ2ZPV2dCb3M4N0RZUytFV25hNnh3NUFUMHlnUVh5d3lSK3FqTFFZelFIczZtdlRINnpFR0s4OVF5aEVsMFNxU3J0V2hOYlJpTmNxcytEY2x4UFFsd3M1cHpjVjRVM1ZHV042eUhHMnd6bFpJTmR6NG1IR3ArQm9sUUdSemV6NE0rUnhHUysvS2FkSUxUN0syMmR4OUxhTFdmRFdBUjZGbjFiT3BEcm9rZUU2N1htVHRTdnh6VTZRSXdVZXlsMUoyUjVYSk9WNkZDQ3B1cXdTcG4wYnRDNmNrMjYyVHR0WFRxNVh1MC9xaEZNdmh3eU81N0c4ejJGS2dPekhCQmZ6Y2FNR3J6R0FnbDAzMWxLU0xiWjFkQ0xMNzdhVlBFbm1aWi9MNGJCZVZWRFg2djlpVUl0RTkzT1JtbUN3WnB2NDdzR0lmMlI1QjFmbWVQdjB0R1p6RTRuQWUrazJmWFh2elpLdVBZWGZjNXdnbkpySFlLdDFaL2l6U1JKZldtWDhhMVRkMDlDMW55MGh5QWgrWk5NTllVeGIwNFp0UWhYQjI1cnRXTFlVYThwelREcFhSNGFFZWFYZE44RzJHYllndmJUTThuWGNQU1pON3FFdlFGdlc3TlRHb0hnK3BPcTRPRXQ2MWNzOUlvam1rdXIwNTRQZ2lGRElMZktMRDczQjVaOUdWQ1FuTjlOVUpsSnY1cU9iMStiVXkxNGVBekViUmJrR3lLRmNFRDB1Y2RhaEcrck5RWWc2N05rMEEvM0pMbFJoUFByaDdaSnZ3NHE5YXdiRVhHK0t3T0QwWExuQlc3M0dwNFdSYUp6enkvMS9QQVhqdmZ1NmNOT3piUDRNQ2lZaTZ0djZKWkdWalUvM3FnQWJOWFkyUHBTRm9PR0ZQMjZZK0VhRTdiamR3L3U1M29LM1BKTDlKbGx3QnFFR2QxZ3dVWlhCN00zZkpYSTlibDFxdVVZQU9mM1JtWEh4c2doQVNMZGRhQncvckNhaUMxNXV5UFBFRlZEZVNuWVdOK1lkbzkvYkFuYitZeUcweDVqd2RXWHFJbkNrSldsZFBBZld3bS9zQzRRaytSY2tLUDc4RVRmTlgybEZpaGxta1ZsMzlKWmM5YUpkSGNvT2FhY2VDci91TGJNU2NYdjl4czJRek5YS2lzcEs2ZGpIVDVVakhGWjZqQW1QVXdWNWRncXZLSjZmTVpUNmhQT3dBa1NleVZvSUI0SVBLWlphc2hocFk0VXJBamY5U1p6ZWgwcEFXc1JPcXcxNmtLRWJpWVQ5bzV3ek9HNnpwTmI5dGoxUzJ2R2FNNTBoMC94TEM5TUlOb0xIczZFbWF5aDk3bmRrc1dTdkVaWTJReXUwRnorZW9nY0Fpbmpaa3NqbCs1elVCSHBQRFdVSmJhSnY0dzl4R3ROT3U1bWdRZUExcG9Ha2xYTWNpVkFaL1Uyd1dEd09taWRjUkV0dVU1SkJzVUFOMTBQaER1Y0VlcHl1Yjc5aTY3VllXU1ZKUTMrTTNGbi9DN3dScTIyZzFYRFlXR0grdW5zT29zVjV4N05xSnkyeEZLRWtRSStNQUMwRzlZRmN1N2JZellIRjc2NHV2WUt6VUl3T3Y5alI4K1A2ZWx6TE5OUlFQWkZ6SWlxRm5JNnRibFY2VDZJdHNEak9OSWd5VkNqNXFkZlh1Z2s4UzhVeDBKTDZjc2x5TzdTL1pvVnhYZXFDRko4eGJpS3h6dE4wNnBjSEpBNEFWN01mcVdJcmc4dlRuT3V0Y1NwMWJqYUYxakcrNUNRMW1YMVJWWTBsZERubkh4RlhjczNBRnlESE81SS9raEhFS0ZrQ0R1c3JLS3hXSzdiYm4xb21zY2ZuTjBMUjhnVmpOTnVEMW5MbUoyM3Z3aUd1QU94Y1UrTCtVN1dKU0d3NE16UDhUdWh1eDhhamFVaGxyZHl6RWplQlNZMFZUbXNXNHhNNWc1R0V6M2E0elg2R1pwUDl0aGthUndFbEZsdHBRdjNZR3BvYnF0Q3Nxem1VM0dqNXpDcDc2c0xRNm1oTVpXQ0l5SlI0TTY5b0RlczlzcHZKZXZTdktJTS9BL1NETExTU09MVjhKSytLOFp5bW05cHlvZDhCQm50SkxaVmUwMHNQay9EQjdBNDFJSk9oT0NDcEgrZXp2dmErWmFVb3VaSkhxTS9IZE83VXlybGZLaVJpUG5Hc2IxZVhjQVZkRGI0WWVYNDlMRTNLZDZRZGtwNVRMdnBZQVFHT25rTnFIOUxUSTdiMXNmZTZCbit6VC9KdDdjSC9lTlJSTjJxZzA5TklmSTZwZW1wTE16V0RhTUtEaEdGbUh6LzRxbEl3VU5VUy9xSFNhREErNzNwVUNCMUhsM01STm04TkNOOFN0Q0RYR2tsZTBZdUJrdDVjYlljd0krcXd5TUlkajBGUVIvdDFTa2N4U2ZqMHlsWjZzZjFkWTBsRTZXS20rRWF5UHdqY09QUDZsakNNbUlnNWlZZFo2eGVTcHhzelhNWUF4cTZtbTlNcm9Nb21HbzVSZTZJVmIrZHdPVjhkUHo2UktESFhRS3B6NmVMaGpSTEdUai9LTy9DZllHTUU3LzJOLzZpejJmQW5Yb3kxaHlCMmhjYmsvRFdraHVMaDIwN1dmQ051TWtwcXB5TFI5c0hMQ0hWcWwxRGxYcEVQSTNLS0UyWmlTc3Y4Zk9IbjA3a0pKWjVyRzV0VTVEd3lLWTVZU3VaM1NST2psanBxclg3NnltcGp1eDdScmhYT0hoNk91U3Z4VjZ1aERoSERGM21OSlVKbG1JaGZqTlZ5NE1zM1hRbzlqbVdNcXJzNWtmNXZBR2s2MWFoa21FNCt0SnZRbE5obUFVcTluSTlLa3lNdklWZ2d3RXJGZ0Fqd0J5VGh5N2QyUzJ3RFBLYnNqR29nZnQwMTdhV1dLU3N5eTUxbDhRUWloZ3Vtb0FHdlFhb1FraWtjQnkzUWw1alFrVDJwd1ZnUndManJQZDlSOUNJY1BTUDVwZ3BVNmpzSVlRM25NYzExMjc2K2xhOGpHd3ZVb1BWMDA3OThjQ29MdDFxSWhUcURGTGFNZEY0WmpSczhpamFpdEpNZGNjMWZGREdtanJzbVNFUDlVWEtJQUlFTXlKVHhVSm9nNUhIZThadmI2WXdJWGR3aHNIbnMrMkdNK3FqVFBGU3c1NEtaY3l6NTdQdFlSZWphRVRtUmU3alRBWTJ4Z1dDeUpJZy9mMnNicEQzSkNRYVlZbTVsZW11b1QyVkNnclpTY1pLclBrTVZlUlFQejYzVWxPbCt5eGsyY1BKT1ZKL05VTnRYWU5XVVNmaC9xVktXRmxIWWtTY2ptNXQrbndPKytlcjJxNUZtM1g0enBRcmsySTBOZmh0c2VMa29PNnBPSHVhYm5iRlE1UTlxQWZ0cXNPLzdOYnhRMVVzdWJIVEZjblh4aE44UERXSTdyRzFpSlhpa3dBeUkrWjNoY1g0Q0RqdlQ3a0FYTytZVEIxdU55U09lY3Z3MUVvZjJxSkFWQXV5OHhEc1RWSkxMaVdvcUdkVm9GcDRHR3JWTFhGd0tHYk9EY29ZaHkvYlVPcGNsZ2ZCUXRKZnVxd241TDJ4NENDQkRwdUt5alhSVGNmc1QwTGlySUVhTmMvMGxITlllN0I3SFlQUlVpaXl5R1QzMTMyZ0R2dDRTRmEyVkEvd044blN1UUNDNjRZVjkybDMyS0ZkMjRZRWxDTk1CamR6SmN6M3FSR2lqSlV2WXZxTm93UkJQYXdidHJxUlY2S0dRSHM3VjQ2aHByQ2lSTGFYY2VLb0Uwci9qYnJVMy9VbEpmWlRuQSsydmpZQjkrZHJsVy9tRWoycVora0lwQmNwSXRvRis1SGhTOGoweGVHa3hUTllqU3B6U1EvU3FkSENoblVRa2NWMWRGTnpmNHNNWW9Pa1RZN1I1MnpYZ2ZWQ2NUYk04K3hBU2U4VVlFcTJyRGtiNjg0QlJ4OHlTY1RBbFBYdTU4NnRhOUtjanRmczFNR3JtcW92Rm1wRjdQV2lnditTcXZqQ29IbkVtWGhEa2lHVTFpb3NiOXd4WFhPMVpxendWUjVBWmFVU2F3dG52bVozMWJLOVBlN1RzUm1RUmtwSC80cHRlemlxT0NQeTdWcmRFWUtkVHdTTEZnT0h2RExqZ2x3SkhXcUxpV3J4ZmxFRW9Ccm5QQzhFKzhQZ2k0Ri9TQlBaek1wMm04ZnRiaVJkb3AyMjlMNnVlTDNiZDUyUFV6N1Yrc05lU045NmtnMWw5U3k5Mnd5LzhmWTNPdGxsU3k1T1Z5ZFhJdGUyNHBnUldabVA4U0RCekFUM205WjVCZzRQV01CUFNKSkF4UE9JR0UyQ2c4ZGE3UUtjdXpVNEZnd2ppdi9nWXVML1BpQzZVT2NDMUt2TTVUYW9tb0RyYU1Dd3dGWGlPalZlTGtHdlIzNm9Id2FmUDdDKzRJSmxnU1plMmlyTmU4VVROeTU4ZHRqS3lMQnNabjNzc1NySVJqbVIzbm52NmQ1MVViL3FuUzYzQnJsYm9vV2JXOWVhTG85d25Wa1dXcklPREtRdEJMaDJmTmFqWENEYktRR05YYmpNcVJadHRiQ3pTaWxzTzFPdElsdGFlWitMZmZla2RTMUhZL1p2ZE42Z245REF4djQzM3piNTVDUVFEZkluQU1rRVZwazRMR3V2Q0NuNVpVREpZUThySEhEZjNIV3hKUGdOTmUxN2QwelJTR3VOME9ENURMSTYrQlFzVkN2WGZjMWVEZ0ZDTG5oVWltWDdLeHAvOENncTZMRzNBNTc1ekd6ZFFSU29GVHljb2hlaHhEU09NVWVPWUt0SWlIRVJOaVJuNkVDMnR5NldIWFRBTXN6cE5LdWx2TGRwaDZrVXJsRzFtWHI1YUNSQlZXNnZQaElOdTJialFuTjBnZzZhME1xTEh1UW5YbEV5eE9PWHpzdWEzZ2I2V2s5VXc4VThGQjN2OVFNeHpOdkRUMGpPY2lncHZPS0d4aG1XcXpZdWQ0TDdYd2xDVVFTYlhMY3BZbGNRQ2d0TWEyanVreVhaWlJnTHQ1NnRnK0pTSmNFcldqN1hCaGtIRENyalB2TUhmK3Ivcjh5TXpzWXMvam5kTnMrR1lIUnJPV1NkOVF0bzdBK0VpZFc1eDF4d1VQYWZudzd4ZnNuY3RydkF6UFptNWdHUmxRMTJBOWpuemFPaVNPU09ISElZTVBWYjloTnppaUo4ZmFtWXJ5cnB3TkFHcElZM2RmUTdMWHA5bTRqdllCMjZFbXo2aEZzQWdtMWp3R05xbk1ySUZlcm5hNUh6eE9EN0hYVE9uWW5mMUs0NzFDUTJWUU82N2FFN29vMlk5blFITmhSMUVMRTd2UloxTStiTnNCd0JoL2JyMTZPc3plVFJOVVNpVjFOUHgxbU1vSnFVMFJhR0NNTEE5NkhVVXFoQ3ViaUdOd3NvOWUvZFN6YWI3VjNHY0htQUpIMXFxd0Fmd3dNRE5ScVRZOWJ1cTU2RU5rdHNWODM1c1M3aTNaeU1OaGtWSlV5ZC8zMitPZG1SNy9MQmNsZTN2VkkxS2w3OEtIa2xOem5Cbk10VmZUUXdYT2FWTFBVQVdJakZ0STBHd2xtb003Q0RDWFVHNkU0Um5UTG5tRkF3N0pobnZwb24vTXYzTXJldW10UWIvdmlJVjF1Q3IzNldQR1ZydGVRa2p4SGRBeUJ1NkZpSnZxK0lheWlRcUdBQlZwVHJobk1vYUFmWjVoMUVFSnE0akNINkJHMldrU05LdTFiZXR1cC9KM3dqVlN6R0J1aEk4NTg2dE5OMGtzd2hRSkxmTjRuZU9saSsvRnNrbjF2Z1ZkOTg1WlpiRmQ2a1BiWFc3TWFSRU5pNnJiVSt4aVpkZXFPMlBBeGQ0eHNoSUJmak9IYnI5L2g1RVFtcm16ekFzQWhHa3A5S21WTkQ5dklJRlNjY2J5UXBxbnpwWnlvT1VOckpiQ2NqZUJ2enM1eHlySXZwUHF4dFlKcFpCQXlqWVU4UHRTUlB0QkUwT0lhT3lSbjJ0czFRdmJFd3lzNmw5aCtQQ010czZBd3ZJMmwyeG5EQ1lLZkpIaXFLUzRXTzVFTzk3QWtlRVVvNWxVRUZjV2pJU0YrNS9xRGNFUXVPdkt5T0ljdVJaNUF5V1ZYRjRBYSs1NXRoT0RoaGF5Q0dDdnlSV25PSm5OYVNGeGdsR2p5MlZFZXgyeW5TcXh4eDRDc2xtazFFNk1QVFdlcUpZWEc1QnlmVklFWkxLMjdXQzU5b2I1Unl1cS9mand2UHlFdk1WTlp5QVNFNDhjUWs3Yzl6dXdsNlFXcWVYMEx1c2VDMThiOXo1UXdSQlpDcWJMMFdoTE5JOGVGdDg4K1R3a1pvcS94bnRla091V3N5TzY5V21uNjRVQkVadGJZTXJwVHI5cmN6QVVXbm5TOHZvRm9GWkdMbDJnOSt6L2hmc1kyVVQzQUlUaWtxRTE1NjlkUjM0VzNmNTNXRTB3VWdJUnVaVVpVVTFGMzZ4aWlURThzdzhNOXZVMEdhcDZMK0VnY3drbjZsRTlXMUg2K1BySzBTNTlPc3lUN05KWG43cFVoRjRtQnNIMmlicExLVXRFWkQwbERJU2s1ZWwxV2F4QXlScEhaUml0elpzcjR1VE5WUWZXNVBQazFkd0RjcnRmZW14ZFllazdaKzBYakVZbldzajRRZ21lNy9ybmlvT1NNRHVUVmRrMTRCVy9MTStIQ1dOaTA5YzlJNEJ0bmRvMldqa2NWY3krclA3aWhYME5sd1Y1UHBLNTNBMlZGRTE1OWtLWkh0ZUhjOGpYYVoxVFhqWHd2VitEeHp6YzA4cWhqQkt3RW5rcVZ4U1JoOCtYeUw0S3pWNCtnUHc3RmdaMEs5ckRsYndGSi8yeXBwUVVkUkhGRGp1RnJ2clRrTUN4ME10MFhob1oweHFWdDY1bzhOYUhsdHgyQTVIRjZKNWxKdHR3QWVEZ2llemxySXJnSERVTjNoSkYyMFRrSzlJSU9xMTd3eVFNZC9VZFF5QnBsSVNrU0R0ZlVZQk55cU9IMFVXZjJ6anphOFI4aG5hN3lzSWdQZXNGdlRrOFFEVW16V1BSckl4YktwVGw0Y2RudWlOb3Nla2VnZGNYbEFOakh5RHo0MmJYa1N0V2dkSjJMSzU1eXArYVlabnN1bDJGd3UrbEhFOUVxNUxCNEJJNzhqYU1nR2x3SDZFR1NWZzBKOXIyb1RxLy9PNWtwRzdtTHVpVUFENEYxUFljVFpWTHI3VjJVRFo4ZGZVS1B2TUlNamRBeUdaRkhWbllJWVlEY2d1ZnU1dmdFbURySHBISEZ1ankrWTFWamZrWUVSRmZiaSt1RWdjVkUra2ZESEZGZjRqekJPc1pTdmh6RGFONks1N0l3SWZORlZZRGxyTE9wSEhGek5HVnRsL1dUU2JYZW5ic2o3MG9YdTVtYS9sMlc5WU9wRHpOSERnYStqbi9YMXAyNU5Iem5iQ3pVWUdBTTE5ZzJ0T1hWMWlpanhPaHcvWWQ0emhRZ2QydDdLUVBNNTBSbVE0bGNTSDFHbFNIanRrVnBLdm84V2lFM0RPYUYzcHl0N0EwK1A1Nkk1UmhaZXVROEtaWHNUaTlJeWRhUXZsZXN2WTcrT0o1Q1RXcXpIdEFNME5DSUl4WGxxREhpQlZzbHRZWG5mUm9ybHdQRm5ZbjhpZlllOVNYRmRlUGc2bU9NRlBVdUxsaVFmTnFkeU1FUGp0bGNPMndOYkhzTWF1L094UDN2WEMvQ2tudFZoc0FzaUd2NUhnR0p1bitON1V5ZktvUUZkelFKa1g0cHNweWthQ0FWM2RtME9CWG9WQXNHOG9xUlBKMFVmUzhjMTBUOFB6a3VoQ2JWbCtuSnZ3eGFMMGUycXdVR1ZFM0xGaElvRnBCcXQ0dkx3ZmNSMjRDczhuV1oybDRiNndjK09UUDVIWmp4c3diMW9ReHJMd1FpNmRpUkJhQ2ZXMVBZWVZ2QkVJQUVYV20rczRMTmRpaHRFWnRlZWVsVEZFN0xvWXllVEVza1dvT1ViOHVnZkx1VklrRVFnWms0QVZJTThQKytSaUZyUklEM3JXRm56S1lUVXgwZWR6bFVaSjI3cEtmbEliNmxjd0hSOWRSK1ZHL3gxS1ErZk13b2x1cnk1dTA1MmoyV1h6V04xWmQ0ZGRtSzNvQ1I5MzNTY0V5clJKZnNteHBDdjY4cndrSFJEdHprZ1NYbDc1YVU0ZXAza0wxMzBFSjlLVnVWZXg4djFiUUtINFZ6Vnl0eFpvWnFmR3B4eWk1Qmp6RFZIQUFWNUVUdjNSMnRGSmk1VmQwV1NXSnZQWGtBQmYrTXB6MjBGVDhwa29UbytQZkN3dlhTWVU4b1NweDgrUFVBVHNITWVqbDdETlEwVThCME16KzVxV0RrdmNwM0ZrWElWSXRySEJBcHRRcnFuWHR4RWhtL1BDd2ZDUjlrNEx1NlZ0ekxaTmU1UnA2MlF3WUNGc29HcGxNQUpoajJwd0JzMXh0cTZmUG4yU2UvQ3RDRU00MW9xOU5Qd2Yzc3dLK1ZxTmQybWtLekNQZWhrQTliVE1hOFJCK0VmaDhaMWR6QXU1cnVDOHJpZDZ0T09XTjJqSTlNV0E4RHIxckJ1Y0FkY0l6ekdsV08vbGxPRmdEWXFxMEg0KzJ2dk03bmZ5ZHhObkhLazMwU3hxQkNzemxYUmtIYnhyQS9zcS92SkU1VisxUHZNeExMT3BYZmV6L1hXekhIVHluWi9aMjJJN0d2ckhQcmhBWTJweDhzN3RkOUI3SHJmS0pCQ09YQk9FU05Ec1hXc04zOGJtcmlzNWhpL05ZcWg5bUdiTytzSmIrYzhFZnh6RjI2YmxrS2F6ZDJHOFFjL3dSQ3dhbnFJQnJRYnJvd0liWjBwWTZWQlVERmJ4cW4rS3lKWlRKYnRaNXhUajhvK0RmYnBKY1VBMjZIeFFCcTV6anVtUXFhK0Q1d2NLVlJrcC9zNXF6R011TVIrUDJqUTFQNGg4REJSaTJ0S3RNc2dsL2RHVXBjdytDcHJuS2R3cWRxcFMvWXdLeU5XSTVtVGZxQTd4d3R6Z1hpYmxKRVI0b09ZTHBpSi9mTzYzUjFzMzZEcHZMRmcwbmNpSUd5MjU5STV1dzM0b2FNbzlQcG1RdkRvY2Q0STVkNzB5OHdJVFJxT0FHTWdoTkZWWUJwdUlUWXg4ODRWMGdUTGxJbVFqK1JnWkdhNm42Q1JURnEzZS8rOVhFakJXTmFZVUExVnZwNzdGeXdYVHZBTkRteXpYNHBPcHAyU21CMUhXbFU1V0R4THNlRUlJdFNKTmNiNDNNUjVENytoby94aHNaalU5K0hDYm9oVE9MWS9abEV2TFFjM2s4R0JMRFY1M2Vtb25sZXNNNGxwZU5OQ1VranBrTjdFY3JTejBXcDMxY1ZreE5CQU1aUm9aMzcvOVcwaEJRRnhxemtIKzgwcnIrdzRyM0tKdEdQQzlkS0lMMk1tblZPVUk1V2Jac2VRdlA0RVR6OVcwSmtSaU5qSDRvSEdVek9lQjc1ZVo1UjQ0SFlCRFVDalZMenpiaEw1clV1Mk1MS09iM0hPcUFtcUtXbS9udmtweWphNUFVOGFIQWJGMjgyWnJVN1hHN3F3RDE5bWg0S2RlMlRRY1F6NWk4VCs3Y2dEQ0t5dVN2NzZ5NncyMTAybkRSTyt3UWVDUk1CR1EzUkNqWUE3b2VlT3FwUUdDMlBUYmxjSndyVU9tVmxBb3psSEdrSDNwUFhQZ1lKajhUSUxRSUtYUEdOVFdkQXMzbWh1aEw5S2dDcUhhOWhuTlFmejFGQnZzMCtia1ZZSCszZVNkMThRY0lEQlVyN3hmTXdEejlCOUxDbVBReEpSRVl2UFVlQ3MvUk9LSDQ2OFJRdEpxSFR6NlVUR2lXNXdnekxkT2VwVzJTMkVCd1h3ekVxRGpIUzE4Q2ZtS3M1cjU1R21lMkVRN1R4eVJLOXdyRFdSdUNwVUhaZmxyVDJLdFRzWWh1ejB0OHM5dEFHclhxZjQvOW45a2xqMzlHUUhDUEkzOTRHelY3WnZSeXNhVW0zbTlMR3BiNHVDZGM0NndCdmpVUW5wZnE5eDEyZEFHUmJYOVBGSkgyUGo2L2FFdmU0eVVaVmcrSHA4UXR0eVBnOVRPdFY5TlBiUjRFdzc5angzNlduTUJWalFjRG40SW9CRmJINHRNN3RNZHAzTlROWmtscUt5ZVFxc2FGZGU4RzgxWEZNRWNwT3lRczFYQWJ2Ny9wcktQdWFyUi8rSEtnREtteWxiZ3Y5NTNZUWh2Z2pXQTBsWW9BcHFLZTkvTWxKbGY2S1RxeWROSWRCSkhOVzl5dzk0WWs5MUZLWHIyRlZ2eWNHam9QS3hiNzlKM0ZMMVVycnkrTFpkTXBhK2ZOWjRsSytMMmZTOXFZNm9BMEEzU0dmcWtvb2ZYZ2FXYkZoNzZSQm1NdnNPd2pWS1Bja2F4eTBmWFo4VWpWUDV1RDdPN2JFWWcxS0dwTEYxNnpQRGpNeWpSTlR5Y3Nma3ZDWElJNHBSa2pFOEVsNTZzd0FqbU9Ob0hBdmdTajZFWlh4NDNlMTRJSlh6S3pSM3FpU0N1eWx6VitDSVM4WnNtVkdDWUtrVmlXYTZyMU5aTUVOS1BzaGlmU2RCQlZ4WktkeG9MUzRYZXFPZ2hyZjZoTlRNWDhsK0doVk9OUGdhY2dRRnlQcWpjZHlHRmZWTDJzT1ZVS0R6Z1h2Yzc1MGluWDFOaDBRaEJMS3lyMGliUXBHZHpoTXNoRklTZ3RIQ1p4Mmp2Nm1ZRnRzV2xRVXp6ZVJLOFp5WTk4WThhdW4rVzdETWdKM2pnSUo2dnFRdUZSY2pqVWlzWVgxcEkrNGppWi9jTnk2Y1BZTzJBb0l3UjVUcXBkbDh3MEhJQVZ6V0lLWTBTcTFsay90YWlveDdPZzBhNVRJOWNUVkJQaHhrd1hkdlN6OE5VNjlTRmxWYWlVYWN0Q091eXh0bFV1RmVDc1NGWFJuMW44MmxVR2J4dk4yWmM3ZnJ0cnNQclg3S0UzTzdTSStZdS9zTnlFWmFnMDJGVU9rR2NBaHRsaXhDK20yOUdCSWNlWHdJMThpTGFTTGtsOEpQa2dYdTAxQWR5V0ZlTWN5a21iSzhkKzJoTTErQWZjY0RuK3Y2VDFxdnRiL0FoZzdYM2FkMUE1RS9SNlBaMjNDSEhTUkw5S1NjQ1VHWEYva0RIdFB3eWFkWU12dWhVSXFKU2pNeHpNZ1ZqUStxdGh2eXFRdzNQOFpPWDRkNUpkdjB1ek1LcUVkeHdGMUkwRThLUWdSQ1BVQ2YydGlzZUhjbW9zbVFhWURKWFZpRE85Q1lGYW9Ma2h5ZWdlRW1lYldvRlpZTXUzOVNLY0NITUw2dHNuakhBNmpvQlVqTjIyb3dXa2RjcVlwZTlqYytCMVNjb1JCM3A0VS9PK25pMVNtZkpSSmpnN1NZQ01oaW9tdnJVaXovVUcvek9Va0tKZVdUWUFPck1Pa1Z0MzgweVJaSlQvaFJ1UFg1UnhNOFpjR2V0YVhvLzc5cFNFUmFNeUdIcWRvWEYwanc4MXJxVG83UkV3UGtnNTNUOGNhQXdzeEk0N1NKQ3hSYXdDMmJSSzBmWFMxOUdLc04yRU1uamJtVTJuaGRKNW91Q0NOM0N6bHQ4M0U5SHJIZ0tNVDhIR2k0L2dMbmwxYm81RWttblAvMW1MaGY3SjRTRXc2WXBvNU02V2hyNmJpc3gwTGlFTTFHYVJWRU9SSG9pNC9zUnBGRHdDRUtUMUw3MmxzODNUUkF1RWRVeUdYWmU0RlQyajJYdDR5R01GK2lSYmFaZFBMNzV6eEZIYUlPVjAxYjlPRDJCb3duOVQ5YWVZdkhhNnNsOWdzN1ZDbU4vYlk3WEkwL3JnMm9lKzNLdUVYRTRGeWxjaVlISndwOG0vcnlWS2JNU0hlMmhDOTkrb3R5QlJOR2pJZktCMzdzOFdwaVA3WmZFK0FNZUo3TEJKMFIvanE0c1QvMVM3VzhKakhtcGJubVFrMFRKZzNaVTBFaU1jZTRRcThWNHovYldhV09NNmJnVUg5aEMxNlh4YUh3R1FvaEhkNVhRa3FZL0pqR1dZUGlNblVFTEFjV0oyL25oUHJGbEs4R2hFVjdFYlBjVDQwbi82OXNwVFFmN1lGalpkWVZ3TXlBTXBtT2pUc3R0VUlBSjFHVTQ5b3psS2JRelNxU3Jsb2hJWUZPWHNUenhQdzFOWVdFcVdWeFBLcVNpSS9EYy83SFdpMHd2ZGtkZURSUnBOZG1RYlF5UllKZWlaQWM4M2x6aWQ4bFZka3R0dVRweHI5Nk9YYTU1RUZGWG9XMTZET2RIT29YNE9IZGxsTVlRRUNkK2JwaFJXdkFwbjdmTnJTbWRKZFpBRENxVzRFYURmbi8yQ0g3R1V0RXZ2aFY3OFNXclVpa3ZKTFBUTkZaUTJ6eWhPSWttKzFTTEV3UldIQUpxdFFLTUJUcTN6Rms3M3pWVXR5L1VwOUZhK3dpQmY3Tm5VWDE3UmJDWUJiTnp4TDdYY2xRZkFlUVNLYklTWlFyT0hvcFc1b25QR256Q2dRVmZROVZEQ2R1UjJ6RkYxU3MwTS9OSk1TMFh1ZDhvSm4xQVB0U2Z1eXhOWXlBRnBKazV0OEpCeVhOWGMvTU1jaFBQRzh2U3Q2VzJSYmJhYjhIR0tOUFQxbUhPaUs5M2ZVRXJTMXRaSXMzYjV2K0VJVDdwbFRjZDEzVVBTakI2czlha0JCdHp1bXgreEJaMnhlSnl1RDh6SjhCV2pHVGhqbjVzNHlMMmJrSWpFRGM4OU1uVnZHRlBBTEhlcGRMQ25jdWdGR1grOHdMZ2FVNVhhejhwVGxLTFhHSjU3c2ZlbG0zV3B1L0Nlc1luVkpmNzc4MVZGdXlwbTNaampRT0k0VCtVN0k2SHVOMFErTVJ2NXZteDV2LzEwV213ME1pM2Z6ZWRLeVVpS0pKdVVFdkJ3dllLTWV0dVUrc055UndBN0d4MUNTSmZDNlF1OHRBMGdEcUE0dExmbUN0aWhOV3dtNC9ZemZDdTZqQU50QlFSN1duRmJoSGp4QXJzKy9ZVVhZbEhFUUx6NEUxeTVsbUxhblpiRkE0cEtMa3FIVndTV3BsYmhRbmpQZTM3ZytxeWFCUks1Q1QrL01VVG0xRmR0YmN2alE4V29xSk1jdGtNeEljd1V1bmxkRXhIUXo2eTVzcytxRHVJSU53dTJnU3ZTM2RJRFVUUmpxY05Md2JIZUxMbFgyS04wbkZHaTlvVXlNelpZMVZ3QUd1NG4xLzhHRExEWHJTS1JFR1drajZxd2srUGl3dDBaWUQrQjI5M0o4bnBuQTZ0V2NRSmt3YjZ1UVM4cHRXNTdJeFNFRG9ycmZyNmFqWjVtUVg4OUdoNDhBelNzNkVpZjFnOTQ4VXpNczc2OVltZ25EZm05WFUwZVlBNTVJcnJ3SFVZODJSWnp5VzdUeCtvYVUwOTNrSkNQMEF1eThPTTUrRE02REZyRFhaR1JRL0RQVW9rVzc5bkpHVmhWTU91Q2plaEMwWGlhci9BYUhUQ3M4ZlBRSWFhQThsdmo0Q0MveFVvR2Z4UnRFNkhmd1ZXMmptUHNiL1A5ajVYWnROaytSQkdTaUJCQm9XYnVTVTNSKzZjUXY1bkZRc2F1cE5yQUV1Sm9YNXhvMzRNWitpL3JLUktwb3BVT25wZmUvZHZxcytLSmFNNTQrSktMZ3F2Vkl1aVlCNVBFREtRZEFUbTFoeWxpWE5jaXBDb1FHaElncDFHcE84SU0yMVB0aCswVzZ1c2ZDYmY1NjMvcDV2UXpVU2k4MDV2Vy9qTUF2ekZrMnpBSGRCcTVUb1RPdEV0REFrZnpwbldRR1kvZEpsdEM2cGd0VHo3NDNwRitiMWZTdmx0T1Q5d0ZnK3BmcHVkOFE5WDZSc3dSb0xoaWJRTlB2d2FXei94RWVjQ05RQ3d4OVQ1SkQ1Ylk4VFhRYisvb0dGd3BVZ1VaV2JKaFBlYURBNmhudmkvRWovTjU0L2MrQmVaRmwvOXRlQ1FRM0hFZ2NNTkdMeHRPMVRsY0swM3FpOENOWllXUUxhSG1FS1ltNk9EaEJmSEt4R0NtRTBwQ2o3UTdTMW42ZCtHZkkvNlNFalYwa0FqdUtOMUlYdC8vS2VWNnJ5dWdmVUhGT2RINWQvSGl1L005SER6TUN4SzRWQTBPbHBQWGVjRUlQUlh5V0dBSmtMRFFXc3lwcCtSb1VZeGl3Z0xjS084NEdlRzdtcVdJcmI4dDJQdE8yYjNpeFFYQTZ4WkpYU2hhSG9CdFFSd3plcFVlTXBYSS9RT1ZJUzQvN2srYVFEVW5pQkJaMGM0WVo5VENVb3cwNjFHTTRFUkZZbVNNSW83YmZqUHViZUFSMWtRdWJCZlVIL2k5RWN1dFkxN2VibW5KSkFiRWREcGFRQTJ3RFZTMGwrdXloN3AvdHlFMExiNS85T01CemFFOWZ1dWhVV05hZEFBdkQyanlpRjlBNU1IWU9JcU1TUUwrSHRoS3FlSUVqN0lDNTZhM0dYUlRtYk9pNmIvZW5zd0xmampndkpKTTJuaWQyMG1MeWtWeUxGdUFpWWJ6MU1PQXNabmZMK08waTNJUWcwUlErQ1U1M3NtblNrZG9IWGFzU2t4REJMbS9TWEdWNzBNN21HdWRjY25RRWVuM09SRjU5c3oxd0JXNG1WbkliWVhhYm5UTVJhV1ovV282bmhPOG43NTZpeUVuR1NuKzMzOGE1c1g5U2dPSVBDay9VWVpOSXVxQUJ6RmY2OWlTdG5iOGVrdVVzQjhPNDlFK2xGQ2Z5cDhlNE1pRDUrcGFkKzU0dDFYNk1Rb1NxNit4MDFMY2ZTVkNVZlZ5eEVXY0sxckFZNDI3MU5nZmoyOXFlZm1NMXpBb0I2NGdveFpIamNaWnlkbWxVWVBiMjFYU2kxYW5wQzdEWFRDTmpvbUttUk0wNWZOUkFlRlkzSERhemZUSlhXdE8xVVExdUYrNjY0ZDhEcmFCQyswc0N2a2J1N3p5ekR4VGIzMHBxb05qVEI0ODZXRjZzL2tPN2FiUWNENVByN3JXajRoZ2RkUGxGRGowZDFpNFltQ3NBREpMdU5nZVdDbEdxNnkzSVFNcHhUUE1uWFFZV0lYc3YrSXkyOCsvYkJqQXF6VE9DUmNjck4zaEZla3prV3ZzbDFmbytZK05MNWFBTC9BeXJJRnBVZXZmaktrOTVXVXZ0ZFp6d3JudDVqRTR5MWRHUHZQUzdKSEREMGZ2TS9jdW5qT21vSVp0NXJ6NVdleThQRSt4Q2IvUW1jUlZJRjJkQlBUVU8vSWtTVmVxalJEQTgxZU84MFFmcDNiWS9hdGE2cXZRV1Uzd3Q1OG13bXVZZm5jYVBYamptNk15dWNzOWlkc3VzaitpZVBta2FlL1pqRFQrbzhtNjZndy9wbW15RUxEWHpST0ZJUkx5TEtueHpjcE4rRGRyWDRkN3pRSk5xYmUzclU4aUFMbUFrUUJ0ZUZVdHlkRkNzY1F1cUJuUXZrT0xXbjlocXRxZkdzRWhWd05XVHl4UVpOUGVlVUNDam96cWkxRURKK1VTTml3aXI0TXVHakdUb25BZ3JZcDdldFJoRHVmM3RUL3FTSHo3UGdweEU1RzdybnIyOHJGUFBER1kxeHpSd081NGthaEF5UnlGMkRJWEdQWWo4d2I2UCtxNUxoZXNBellpYkFuUGpFUXYvVDJ3RFVOL3VtbVFoemV6RnJNRXpBRG1UYjlmbys2aU9BOTd4b2FzblM4YXh4aFE5QzU0TnJDb0Q4SVpxaGtyWDhMTGl0alY5TmtZL2xYMm9DWmJrQVRpeDJLMXB1UlRCNGVzNDJhK0swU05SQkYwZFhKMkV3UUJlelVpMEhLRng1eG9yQUZPNDlFOS8xeUJRc3pFelQzdVRVSTQrOHhXdVFOWVpUeXFycmNKUmhHaGt2Vjd2VXFMWHZvOStSb1JORlM4QnVWY0lxME5kWDF6dmJYY3ZKVGZtMEYrRjVlODZUdnpsNml4bzdCVThLZWREQmZxczZLVlVFMmhQeW16TVQ4SVpycmxDMnoxbG9sb1UzejNyZy96NTBHVENFM1B4bU1YY1A5LzB2VDJOZjQ2ajVTQytBR00vWDdab2xwWEpqYkRLOTZGQ3BFT2hOR2FMOUduYWI3UXNGenBLWjZzU2M3dXhTOVlGZ1FEcUFuZTgvbmlyNkUxM3FVZStBUnc2Mzloem9ZRjAyeXh5M0hLSWpSdG55dzE3RHUxcERMRHB3OU42bXFGV0NXS04rWGx0MWpaelFFdjJTbEhacVI0bWxKekc2N055Z3h6THBVUlRTWURPWmppZU5wdmNERFlpRnR2M0xWTFBpMUVMdWxGVHVmaFBJZHF1dkx4aStaR1NET090OHhMZTdML0NxQ29HZmRRN0xXOFJ2SEZuZnhSOWlHV2pWQVROVTYwZHZtendjMWxvQ3VEZUsvTWM4cnY4QzFnVTJOdGk2TmFuSC9WRTRoc3gwQVRUMFJwSExyS00yZ3M1S1FmT0taYVhwQjJOR3N6YnBjME9xU0lvbng0bXRPRTg0cEJ6T2VQSC92VnNYcnpVM3lFVGRER2t0S3VmQjU5T0hkb3hSL3ZUYnRUQVQ4YTBTaXkxY3E1aXUxNHhzaURsZjFhWEdZc05JdUVNdmtJWjFRMTBEcHdRRDdzLzNJMy8xMW5rczFXcmlTOXVxVEg0cmI0dHNIWktDQ1B1Y0p5NnFzOTNsazdkNHdNZzBBT2JrUnpmTjJvQVVrNVJkQUJXTHE2eXBDb2hlWHNZWVk2M2NEQnFIM0JJZFVsSmx0NzI4eElBeXFmbmQ3dkNXUHY2RWJsOStvRGFlZ1lmKzdlTVE5Rm41dHNHMGkyb2ZGb0U3R3hNcFJLUFVIcE05djB6NnQyME1aUnN1ckg0Q1NJNmlPeTNmOE1DVE8zcEcxVVI2R000NFpYaWxtVlhuU2JSOFAzc2d1bmdIczNWRjNQVnN4WXMyRFpWUnZsKzk0cmR6QWlneEJybWR2d0N1K0FpMWhTRUpQV05raU9BT3BVd1FpWGVpa0VsWG1rYTZBemVzMXAyczV3NUY3QUN5bGhpS1VjU2RKK1IvWVlzcUtZZlhOaGJPTGxqL0EvKzZMRjl5RFhDdzZSVmFoL2dhRi9NNlRhUTd3U2hOQmgxTUg4YWV6cGdpb3hwcm5mbVNWRDdWZU5USlZXSU9tRzVCT0JLK1dDanEzOWF1YzZ1TjdZK2trQkp2dnVQdk9KMFFqU0lyWm93akt6aVdQaE1yY3BYLytBdXpib0hVdmxJQjZDeExJVzdFYnh2ZEljbHhQSjhNTUdzdDc1VTFTRm5lSG4wOXBucmF2c1hzT3FDS1BSMnE2bk5UZlh0aXJoQmhudjlyUVM1SXNXWVZBNm5pZmNLaitGWUtCcXk0bC8vT2NwZzdzMEtyUGVaU0w4TkRHZG15QmVvdGRKLzBFNTdiUXZiVi8wU2lEeVFKQUhOZUoyMXhTckxzdTBPOHlMbWE0dWE0ckhPTjEyc3NNM2JjSHJyRjRTKzVtdVQwTzRYWUhobUMxemlmb3lzNS9SQnJjZW5WcVV3d3ZESHpTcDN1TWlqdElCZHE2RHJQY0l1TjBKR0FLTFZEZGNQKzF5UUxiRC9PWk9zTENkU0pjQitnWTZXTlFkSDBoYUVESk5DSjg4dUN5b052NStPOEMrSStNblZpNXB1T294dGl5VEN1QW1PTk5zRFlXakpBWGlYQ2lTVXhXVHI3VE5hZ3poZGpuaVltYjV0cVNpc2RKNnZVTlhGYStJcnhUOU1PYWg4eC9hZzc5ci9abUF5cDNjWUVtcWhxeFZEcUQ1M2l5S1pyanB3N3pUVFdMUXlITlR1RGozOFUvSC9JaXZTN1FEbURKVHBLaFdnOVZVL1Z2Wno0a0ljdW1QSTNvd0s3STRMNmdsNGh3V0Nobk9SZDhsKytEWDFwRDR3Y3Q2a28wWW9hTGJiK25mK0IwOTZHZkJHcUMzZDlxYlBxU3dXWncyT09qdzI4K2ZIbTkyVnBuOFBOdXFsb25xVThVT2p6UHh0cERlRS94dW85TzRHT3Y2VzRBV2grV2thZWF3M1A1MVpyeEczeXJBNno4cGY2VitnVEErWDl3YS9kRlAyL0pOWXkvcmRJQ2VMSXRZc2pZZFpBQSs0SWxPbTFMYUUrTEFpak5NWGliQk5jbm5Sc3djQ3FISjRVbUVOQlBhNDNIM3Qwa2JmVkF4dGI2RU8wRmV3dGhPWnhpSmo5TDk5RkZvT0VxK3ZJY2x1NmR0YWlOdVlYbUl4NkxUNERzaGlONWVLQ3ZYSCtEK0MxOXVmSHk2QlFZRWFFbEQzZnk3eGg5MmgrdEVBVjd5VHdhZTJJZHVVaTh6dm1GMUFYR1dhNHZGeGl5N0NHRXNHaVJobjlIemlYV0ExS3NUK3JadGJaUE5ydmZiWEZTb3RzUXJ6SlMxcWhKaVpGL0REalVxSVBGTWlDMmxpSkFQYWxBVzRwdVoyYmlBbW5iZjIzNDg3VUc2eUUzT2dBZjh5N01WbHBoOWRKYjhMQTZ3ZW9ZZzhneWpuc2h1empNMzJtUWUxT2Z0azRabDVCZFNqTC9LRDEzeWZtc0NVQzA4Z3ppODkrNkFTeE8xVS9FeW1RSThzdnorWDB0RGpsOEdxR0RFRjdaMkVheGJObnpCeU1BemxlUkgvd1lTbFE4YzNkQ01UbE5SWWk2NTNibTUwd2d3Sm9wUml3WEh3N212U1VLdVRDaW9waTl5U0Vwakc0YmpPNjhNbG90eEx1MjI4Z0ZtY1VBRVZzTHIxTXk0bVhpTTVDc0FXOGFXOUM3UW5IRUs0aGFNY2F1K1ROY0Vtb3pxcUVHei9pdEFmQkI4M2Q0VnQzVkhCRkZnV0JpYmhVMGlsRm01OEZ5ajllRnR0Vnd6S0Ixb010QzA0UWdhK016aU9jbFY1aWxSVFphb2w1dzExSXFPeWpLNEo0TFNodUdNRGJYQnlXNmR0c2JCZ3hwelgrYStuM2V3L3FPUVZJZnFROVQ1bHNhVFhwTFlRWXZoLzFtVUszVGRuTlVSMTBNVTVVd1g4UFFQUnBlU3Q2dTAyQ0NxekFLUWdYTzNXMWRxNXdtWWI3YnFCSG1lNU93LzZRdmVZelVlcFdWdlYySyt0bTVHYlIyTjJqT1FXbUpPQk1KS0xGYzBCVEpjYXRxa3dCU3ZkY2ZuN2dtY0xZd3ZqejNxV0g5ZW9wcmMvR2lZVnZBVjYvYlpjR2JQajdpcWI1ZDJKRE5aTk4yWTc5bjJ1QmtZdVl2MDU1TUFoRmIxYTdaSHYxbzFBaGZoR0ljV2hkbWlZeFMxdy9ReWJYd3RCVnRPKzgvcVVXcmdKbEUyODJXVGFtMmU1SzZDZzBZbmIxMGwzb1ZubTgvdmx0SHVMMUM5Q3hreUl0akYzUGE3ODhYYlFTVGNTUEh3Qi9HSXMyK05aTGlnaUtoVTdxUzZXQW53b0o0WVVuNVlEZ01kSnhqbksyemFncXE5QUpzdndTb1htN2NXYll1b3FRSVdKWS9rZmtybmM2OXNJWG44dlJ2ZDlLTkl1NGdONVphUXlFaTBSMmR4algxdlJacUFXc1JqWUhlQXdNWGhINjdWQjk4ZkgrOW85eTZXUDM4c000WDdjZ3AzS1REZ0d6M202QjBWTEF3Q2NneEM2eFZsdUpwMW01dVFxYmppT3c5cEhJSncwK2duQ1lVZHJQVC9kWUI3dHpxV1gya2J4Y2VaU2FPaGdJTGZSQ1QxNFM3OThjQktmeTRoNEVra05BaGZVTURhYUdtbHpUTkpIRFVwWGVRUEc5T1dzdGZMdElqOXJUZ0ZhemxrSm1pUGNEK0Z1ME5yR0hyaDBjNERUVkhMQ3pCVHQxeDNGbllkcnBVRTlZZWJhdjZmbXFpcFg3RWFlM3U4ZTdLbEdjV3Q0czk4alR0aHpZYUhCaXJnWk0xUG9YNjJXK00yaXUwR0ZWbkVlbnh2dzFBVU03eDhXYnJhTW1pM2V0dWNEVThubWVHcVBlTjgxZk1QR0d0K256aUtKZ1ZNcFVCdmN3TmtpaVhNOWZYU3Nwa3hBclVWZlAzN0lxWmRkZ0trTkJza21FSFZDb05va3BhbjREUDhES3lUMS84Uno4VjljTjZTb2lhbU5TS2tWcGs4Z1B3N2dKSllscllpQTlreWswWVZwQVFNNzJKelduTUYrQ0ZLaXdqb0xYcTlKQkpIZVRmdHE0QXM3YnhpaW1uL0hKbVYwQzA0NnZtS2I5VWl1Y2VJYU5Ddm53SHlvSHR2QVEzNFBRbTBnNDhLVkJzaDhMbHpFSG4zMDJLVkxVMFpaQWhFaWZXQy9uSnNSMDZ2NDltU05Na3hIdXU5L0RqYmVYWC9iQW5CK3NORFZ5UFNwOHRheUtKaWtkcHpMaDY4WGpNcnlNdkM5Y1JVUHF2cGozclhrekk5U3RBSVdKRmxLNWdiMXBITDBrQW9mcFJidmx4L0s0TjczRkJwL1R1RkdFTlNydko1NXBMZEtrZE9FZVkvd0lzZGV3N2hRbHk0cFFwNTh3TGpBR1FFaGs2Vko1NGVHcG5lSDhLV0F4SHFDNHdXNktwbkdJMjR6emdWOUhwenNkc0h5VVNwODVZRFYyWldBSzVqY1ZGdXhpeWJLRmlvaC82QWtTYXNyTmVLVVhDQ01xY1hWWE1vOWdjVUh6NEt4eDhaM3FxaVZxQWMzVy9MODB2Qi9JaXJ3UzIzQ1JqVzhwNGo5eXhJWFNuVlVLZUNGaDVOaGlaeTJqZkNwaGptTXRRd2V2ejJrRkJJRnp1MFd5Q2ZWaENmMkpIaDJoSEU1d3ZoYzdnbHFhWHpPd3J4WlZtSmpVMUViWXNpWFF2VW5DeElKcXVVU1R5UFpPR2toMHVrbDVxZUhLZUpDUDhwN3ZjeFN6VXI0ZW5vT0hoRlFFRk9WaUN2dVBGaXMydUg0Ri9VcHE0Q1NpWFZ0TVVZdGpwbS8zcUJVbFYwaXFLMmR5K3FFZVhTV2Z6c2JHdmVBU3RaSG8yek4vdFpTZDlHTkNMTXluNW1VQkNabEtZei9XVlJVOFA3T1B2dGZBRjI2dTlHMVpkd2ZYNzkrV1EvNTBROUFnTzVkSG5lamdhNXRPck9DQm5XOUFuYVpFVFpJdnAvbUpPMGJaQi9yalNGaWgwSE9aeDljdXBqd1h0TndCbVBadVQzR1pjSjFFYmdWN2R0YUtjc24xWXAxT1JyNnNhZUdSM3NCcFhRVmZlVkJDVG50K2prOHFuNFRKK2FBS3c4UmlUSFlxc0E2Q25nM3BwSzJaODQ3VmNkOEdrKzAyVk80QlV0aDYxOFpkMGVMVW90VTM0enVCOGZQOVc3amZmTEorM0pGNWtzNFNDNVZGbGVUKzJGNmppQmVqajh4KzhSbFN5OVVSejVqWmJUSDBDbHB6OVMwWGU5OGg4NUJ1ZjBTN1RaQTltZUNtYzFhZ0pSSFp0QVQydWJuUjFJRmRmaEZ0MVpMaU9lSVMzMk1jTk5YelV2YVBWMHlRRDUzVVVLL295eG9HdW4rbkRSVm5nVVM1WnJvc2tyZ3RkSElnOWtFdkVLcWI5TldTSWcrazdLc3BzZUNUVXh6a2h2WmhuNDUvakdJV3hQaWZLOENoYXliUml1NmN6ZndLR2kvSktBTVhUbm9ZTVA3eWNIL1BSdE50djFRYzdKa25McG40czVMVEd5RTkyNUpGY0NzMGlRWllhUEFoaWdCRDI3K016czBKVkk0ZnJSMEpLekJLQXNYY0grd21vaWxtRVgwL1lBdmlsRDBOYlJ0L0dnN0ZHMFdlMHZXdUxtSlcwRnJDanVxNGozNVQvMUh1czlxRFlWdDVRQVF0R0g0WG94cUNabldBY2I4ZEVud0JhZXAxaHA4NUp1eTdvVjRYL1RZNXYzN01wWXJyc0NtejJaZ0VJYWFqTnFhMlZRYytqNDc5T05XNEJNUkJOL3l4L2V6QkcvNWUvL1ZOeU9vNG5oL1Y3c2NENHltNEtmVEh1RjNTZ1ZmUy9ZaVpWbWc4dkRKY2Z1NDRlYWVyV0hJYnl1Z0FRcTluamh0ODRwZnFoc0M2YlJLRVBqOEdieTB6Ly9Hck1uck1nZlBGU2ZQTTl0U2JFWVNGU1I1Yk9ibXZkako4OTg0bjJ4cjI3OXZlVnVvRzQza0RxcU5tU3ZuTlFwTnVzUk4wSjVYdTFwOSswb0JqdCtYemVycVA4RExOeGNIbGdVa0NtTFRPRWQ4ZmwyMjZWZzd6bFRQN0Nqc3VldkYvZmh2UmtTcHk4dlFSbVQwSGswOHdCeUEyTkR4d2ZoZHAvSnQxNDN1NFdqSzNkZi93cHZTRVVZSWZZZFMwcHM1QWxERXAwaVRBQVdpNVhFeHdWOS9RS3RLb0FZTVZ6MDhHYlZJbWZ3amxjeFZnSDlESisvQjMxSzB1RjdNdDBVWHBmOGNNTHg3RWVzTjZyTVZJSHVtWXRGK2pqZ0tmOHBydFRGdnp5c1plejkrK0dsMnk3TEJGV2J0V0NwdDNMK09nNWxJZ3ZRWTAwQWZoV2pEbGhDV1VoM3lZandoeDdaaHBETmVBSnJhbGpwOW9aRjUwZGl0bHVYeFpsNGh6SndiN0dZdlNtbFhhMmZKS2JVby91c0xiNkxSdEdiY2RrbXpud0cvdHJHcEZSVStPTGplUUFSVWpOeGhwTG5SckZWSG1tZFdFb0F1K0NLR3BKSEFmellYQWh4bHdWSzlNV29nU1hiMHJDQVBBMVl4ak1Rekd4VUZaNllUbkVrSzF5SDAxY1NGVHhNVHdKZERDWGhQYzJsTjIybVpZcllVZ1pjSGcwYzRjYWU2WXlSdlZ1UHlpOTVVcllDOTFnN3lYZjZvMXFpMnVqaHNHTkpMU3FzSTNlUHA0a08rMDZJWXorWktlN29rRUhjNUdlQW55Ty80OXRKdlNIa2drQ094V1VQY08vUUpaRHlKSnlsRmhIVUlmSEFMYmVFMnhXdnBTRDhDelNwSEpiSVRwZGZ6RnI1QWNxNWhJamkxeGhkSDFSZnl5MzFXeE5CR28xcWVQZHl2Q2VNaisvOFBtSHNaQ3cwVTBrRnk1TThWRS9vVUpYWjB4aGw2MVE4N0dEajhmM2MyeHkzcjFzWnkvWkJ2TG5NcUN0OXZvekhxVW9CcDZCTnUvbGR2V3p3MWwzdTV2YXBiNWlTNmFnU0RqcmFxOXhyTEp6Wjc1WW83SUJBdU8zb2huRFlwWlJjOXVPMnh4bnRqZE5rTktFbzZVWFRKa05paUxIeHZmMWdMcXllZ3VTZWd1ZXYrQXQyc1RydjJ0N0lTQWFKaTRwUXlONkFOT1ZTUVRRajNNaEpTWVF6a0tiNFRMTlBVTE9CaFgyVWpmMFgyU2JPcHpGOHFyU2dqbVFnY3lEeitpNnRrT056bXZRL1NUNnh2SkdHMHdYZGlDMFU1WHV5WnZHT2d3aE8rMlQ2SW9hYWNKOHF1MzhUWE9pTHZ1b284SlNIUnROTGRueWFXNmFZSTNObHg4WU9XVGdTcllLb2VXTTdRUGtObFVIbTZtM2hvRXV4UkN5WVlWdEoyQlBmWlE0UEp1OUJxTnFmRGVTQVZobEhBSGFucmttZlFUN0d0SHpENHFRRFRZcThFWnEzWnVHclVaRG5nQTRKbEQzYWNUUExNcFdkSm13Y1dBcHVON1RHb0tHQ0dRNnZWZUxTVzVFZEZLUExHTnpscUtoenk2Tk1GTlJ5ejRkQlVyRHh0MEduWDc5V1VBZEhlUllqUC9GTmFydGlodVpQVU1zcnhmd3NFWERvMjc1WFF4V0ljSm0vWHlFUEV4VFkxeGhVNXZUUnlQSmFXVHBPSXVzY2x4UlhMM25GaHpiTzJYYXRIM3hTT0xPdWFlWkZ4SVBidi9tYXFPaGlxK1hmRVVMYTlNVmZjUW1xTGxQSFdBRHFnR052YnJtaDZYaS90NFVIdlZKY3pKNGFOQXA1RXVpNERQcElRUU5sZEFIL0VEZHBvbC9kRUFsb3NQZHdnTG1GallSdWJwaTRYbEdYZFJraG1oL052ODV3WHR0U1BaYW9SemxnY3EyTlhPOU9nY05DMXJtbjZLajRrdWE3Zlg4elhIbjN0SE84VjhGaTdySG5udWpHZmk5aGUvWXdONUpuUjJhUlZUaUl3Rmk4KzZpQ1pKUEl1SWUzbkZzSXRzY0hSNmZiNyt3bzZsMTFyNG1Mdi9aeDdPalBRMWRTM3lGUzVKQkYyMkZxVWxUNjc5VkEzQktFSER1dWExQVVlN290RlZxd21adng0a0dJZkNhc2dUVVVDOFlqQWhhY1o0NWp4Z3Z0UEw3MVFpTmdJeVlsY3VIbzhoZzArK1UyamJwb1pWbUQwVlFqcDcweDJpVGtWT0ZnaTkrT2gwWFFjWFlJalU0N1BMR0dNdGpKRGxFK2phbzhRcTVDTVdGbmo1dDhheHMxZmlOTmZJMlhlbTN1SG1BK25EVHduZWNmN09ONExGM3ZDL2NldmtWRmZEeVprRldnZDk5VW1BcFBvSWJpd1lIeTVHTGpndS9jRmp0Y2hyYTZxaXVGdFY0bDVOcDdnZXJpTmw5MTA2SCtYQ1pqM3lVa1ArNHdMVUNnd3AzeVFaR3NHOGVZWkZaT25KTjJyZ0dvV25hNDNUZEFPUUtjbE5iUi92M1RMVUFzNkgxTEtscjVYYi9TQUQyK05mVEc1cDNGZlBjdjNHdFpybHJmd3VkWURkL1A0Q1NGK0pyWlBVRHMya05BMzhrb0NiUGlFYjg1WUlkbHZYcFlLNUUrVmpvNy95OWRNWWkwYWh2VjVMb3FLY1JsRW4rWk1RYnl5dkF4U2VJeGRDUUtMcENQbWg2dklENWpsT293ZS9HMXliNm5RU29STUt6cFhtV0lNOTZLek40eFRhMmF2MWsxeVVoT3BUc0wyYzczRkhtQnQ0U3RJb0xqNitkeUF5MDIvM3dWY1ljQWZDdm1aSWE0enFmZzk4L3FwTjd4aDcyTkNaZ2VnUTBsa1NQSjlXbTlqK2dQbE81T1RJTFZJMzFqaHVCTmNHdWtWMSsrbWtOMUpIcWhRZDcrUitlN0M4dHd6WnNKNEMwZEdsMnc4aTN1aUtlVjR3WUZVcUU2bFlWZDVTWCtzcURVV0t3Wk1YVzVQS20wQlNUMXpENW1rNzdtRnhSM0FqQzFuNUpPVm1VUEMwZTFYL3FaM2RIZ1Bta0NaRXA0eDFBeE1ueHBZT09iQWxZZVk3aWJHOWxSNVdhL1ZXNzJNcHhVYUlxaFRiaHY0U1Y3S1lwUDVpaXIxL2dUWUIxUVJqcXg3MkNCZGZpMTlxd3J2T0FpZ0ZKVTRwZXowcm1KYlJZN01NSUpndUlxekErcE9JS0VQOXlXdnB2aGlsUkVzYm5DcFRCZFRxZ2ZIRmk2RVp0NVJidXNrelFyaEp2cUJITGwzYWdxL1J0akljMmlyOGlkbVpaMTM0VDVtNEdZVFYrdmxlbStvRkVsMTJoNHJvMUxpTDFPNjdQcTVvVkRZdFFRUWJQcGVLWi9xV2I5aEJDSkNrdUlzQkQ5MDBtTUNqT3dXVUROVzZjUlJ3T1JaRC9XRjV3NjV4OEhUS3hPUXAycDU1SEhkMDViMkxjbjlBejlDL0pRNTl2RUtYWWM3OGhUUkhUcUFscER3eitNZGEzdStqRktOUUNNZDNuV05UcUxRVk1vNFVTT1BkdFM3UGR3dlNnTTJuc1ZXNDZlMDFzNTNBL29YRTJ2ajlIcmZxRE52SWlSRDUrTjZZcVpQNHJpZ056bi9OaXI2WllZRU5zSUxweFhFYmpZTml6RXBEcytWWERldWd4R2l5aC9iR3p1SDlNbWx6d25mZEdmbFR4bE96eVFnMGpTZURoVzQzdUluSVZkenpNT3M0Z2NXRDJQWldCcDIyOWRVTm9WTFJwU0laVjBITzRLbnBKQkF6UXBXblBBb2ZOZUxPOXVXTVdIYVlpQ1ZVTlZyU3luT2swS2RmUURJSlBIWnNWSEJhZXFDb0k4YWt2RWF4bTBNUmxsSjBPVnhOVUNDbUpqZ3BQd3BwVVdyVmVURHdkRXpQOU1GMkZPZmVrTTA4ZllidzNXTTkzZkxVMkdxaGVoV1FSQjhJOXVDbjdIYWFlOUhrTVpBZURENDNyMjdRcjZ2M1RSVVRBd1FkekUxRFlHUmNRa1RYUEVOcHZwOFYwY2FnYUY5dWk0QngzdEM2VFJ0RUFpN0h1b0RabXdlK1UrTVQzdFdqT1VxS1V3YUFtRWNTZG41RHdGVlViUnNqUjVidVlXYkdiMGxmb1BpVUM4WEVjaml1cmpJaTdMZDc5RS9tRDAydDRldE9BMHUxdGU5MXR4SVBXY2M5Uk5HQkNTbXJDYlFBT241andzUnRoSHBqNjlOVm9rM3NPcTFKT2hqdVNlSjFRNHE0L1pmNkpKS3QrTWkxL1hLdlBzZFlHVkRGWmtlRnJZcVl0bDVGZ0VsU09MYnBlbzBzMmo0RkRwQTlmZDhwNnI1NHBMOWpad3E5ZzhEWnNmeVdTMHI0em1KVm1zU1NKVyttQkZQRHJkeXhyeFNXUTEzaGh0RXNzbTV0QTViRjB6MVdrSUJ3L2ZzL3h2NE03d3NLOFpxVG42RDIvbzdjWkNqUFEzOGltTE9BbkVSMC9qZlBwRzE2TU9sdytkOWw0cXp6aExBeHFHZWFPTTlITTlhaGg4RTdyanBTYTBaVlk1TUl2dEg4SllDLzl5aXp6NE92U29Ob1FlWVJSZEcvQlJhTUFpeVdxL3lqb2tSRXVMWnZjcnhyUWN3SXFYYmVMMDhMTXBlYjlabmYrSGJpTnZ6OTB1UWN3ZElWaVdrNnN4dzNGY3BaUWUrandQNWVsRGVHL3h3NUxzWFU4Ykk3QTQxb2hpSFIyY1RYOUpUTnZvR3hMRDlGejM4UGZqQ1Q1TVAvVTFzL1dTaUEwektLTU8vVlB4RlB3Z1RsN1g4SEFrdnpibmxlS2lrbGY3VEt3TzY3by85RS83TVFsNGMyWldXVkRDY01kekN2OVJEcUFHcjIxaUlSQllsTGxPYVRndERzVE95dTdKR2EvcUJmSGFDalhVMjZDWHVRNHkwQ1IzZS84ZkNYVG40VU5KYUI0RnUyR3pFUFdZMFJGN3F0MkNLb1poNWtrSWpnU1FCcGxBcGp3S3UwUnNBRjBMZ3hZMm5VZU5ZOVdzQ1ljZWRrWkxlQXA3NS81d1B4NUZibVA2aWVEUFY1eVBoMzJZdzMyMDRoc0RuZUU5VTlNRmhsMTM0alVWRVIreHE5L0FZemNBMVlEK0Nmb010TUpCTExJclN0dkU4K2dpK0M5TlFUOSsxYUJ0S1pWMk1UWndVU21NcXl4Q0gvaXhsck5qZDJzM2NkOGFLcUNZa2Y2b2k5cTBGUU9lUDVpMnROT3pLendVS1dUYkVsUXdqVzB2QldDUnZvOUYrSlU4ZUpmMzZUUE8zeTdzZ0FKVGFQVloxUjJZcUMrWlAySG4zamFobzdRdHJYZEo0WmtqcTdFenVVN094OTZCamQ1L0JIUy9ZQmM1bFFHUTlHdCtxZEtvRGtkVDdrRDcrU014WituWnkvUjI0aUEvTlVzTUtXQnpvR1R3YjJFdlZIV1BLVUZiekdjMjNmN3pLR1M2emlnQVp0QTRuclRmSHF0WnFXZlU5NGUwaVA5dGhoS1lrazhIWlhnL3RNbjZzMmFPOExxSVdxaGpJUm5kMHNyZXppSWVjUnhpb3NsQ2FBdENtcVc2SUFtaGc1bnc3TE9MTHlRK2V1MjY4ZVJiVGJNaVdteEtZOU1FNWZEVUh5NytWVXZ0OElKRkYzRFEwOUo1aFN2Vk81ZU9pTFM4RjhRNU9jTnFHYWJCUTN3SXlwL3p6T1FZVEx2allqK3hJU3p4SlN3a0FHRERHUnFvWmJDcnBoMVgyMFhEZ0d0c21oN1lHbStKVHd3MzJrSjlxRk1zNUU0ZGRiTGlLUGtFbXNXbnIxbFdRSnhWR2h2Ujg0R2JwN1BqUnd1NGFGb2JhZm43UUpPa2J2eVp3UDd6ZUErYXVuUisxZjlZUGdBeFRXSE5KbzRidG1GemVlTzYzNmx3bGhGeWxiVktLcWY5RFJWUzAyZVEvTVFBMnBUc1F6TnZxZU56NHcxL1RaUW9VV3dnNk8xcnkzc1FsRGxRaFVrczgwYy8rZ3NGR21RVGFoUXRrU1doL2VEWmhXWUZVYVBkdDFFUTBNK1UwSkRicTVaelk1dFJsdzI5d0xUYjJvQlRTeG4rS3dMZDVTTklSRnlua01BVzl6Rko1ck5GZjY1MDhmOGR1N09QTitsNDY2dVFRWUthd1VzOXpwM0Y3TWpjc3puN3lITTRnbWVwSXRVZHl6V3dmdVZhcnFYL0lBZ3I5d2VyNWRKdW85blg3ckZKU2hyejZDNzN4V2diYzFlbGlJYzBqb2o1RjBYV09VQnlWS2lJWjhTRm1XbFpyR3ZZZmZBTC9QdXhNaVpXYjN1bHFwcDVEb3AvbXE5STFGdU9HVTBuNElEc250VTczME0wRVRWcXAvcEdHQlNza2p5bDFRK3Vta3ltNWNyVDVSckhCWDdIa3hGeEZQQm4xN2t5VDFKK253TXpQNFZ2YXpsNkYwcUptbThWOVRlaXFzMzhMb2Rjdyt4cWYxeld2b3BjZ0RsUmN3by9mS0FPTytWSFkxbXJtYy81SnlWMG1SRVRRWms0aVZjTk1ETTBhaGJWVVRnQ2RnczBtMmxZOFh6bkNPMmFGSzRoWEhPRVcyVHNFWlpvUDA0Q0ZNVzNjRUpUbnR0cFlHK1NHWDFQTXpqUjZxMmVaZzVaenp1b2xJOGdvMU9CVnhZNHJHSngvemE1MnR3ZndhVkdVODZUVC9Obll4RlFMYkR5N3BJcVhpTXkwMnhTdVVUb09vTGxEbmR2L0haQXR5TFg2R21IVUpxREFNTldVeTUzUGZFRmFVeFJMLzE5a0E0YXBUQ3cwSUlmRjRMN3diRDZSaEZ0TzRhK2VYNHF3TXNucVRPTTJBY3FETFVycml0YlpBbUZ3VTZoZU96OUNzWjZyNnhjVytCdzV4bkx4ZFkvN0JQSndpTXB4bExYaHAwN096QVRiSDduVzVZNU1sUmVwSzBOY1hBTnZIbkhlQldRWUduRkdYeGlTVGJROHdWK1JBb2tuL2h3RkZBZHdZZkxoVnZLOW5xa1cvRVR3Vll0Y1h3NXM0QXp1YTMwaHRNTGdobThWSmFZQkNacUhNZmJnZUxQbFhqN3NoUVpNbzBEeHdjcGVnaFF1dGV2MGIxUmp4ckhvWU9QY1NPL1JHRlBrMHlGSXhESmRJaHR0ZjN2QzFYRFpXaFdnb3BBR2xrbW90NUIrV3BnR0MrMzlzWGI4S2FvOXJ2V01FQUQwOTNGb0FsQmpyTGhVWWhOdEFYbm5ueGZqY1greURzcE1XRHE1ck5mejNSOEppbDIwZFZnRXBkUGdYOWVkYWRYL1lyYnVscXMxT1FxN1NTcUlBVTNSMXlSZVlISVhLbXVQUFd5SThpd2V5eFY3TG9kY2Qrd3Y1V2dVeG1jZXhYZmJYSTVLT1BtYmN1ZlJPM2FIMG1uMSt0NEoxc1NnMlMwOFBDanNkNXd2bCtGL0NnUmRZcyt3dVUvR2VXZEdXYnNMcktKSmlEc1BpWGxTeSsraXBtS2graDJJbFRMck9vbkR6MW11MDZBWndvZHRLWXQ3NngrUzdsbjBQS01yb1Z3M1RCQUYvUDNibkoyQkJUSnppcCtPOVFpQmxpd05vcWJWT0N1aDh1dHdDdm9FVjRqZDUwQk9XdlFUOWFGNmFHVWh0L3JHRVI4aGJCQ2ZxU1I4VzRWL3lzcXFhdTBmcDBVUmhLKzU1TWZDd0V5WVp4SDJKSVZMSndPNGN1Vm9IeWRZSE5qOUNrVUd0SHpKWGZsZ3ZmRE1wRTVBUm8wbExaRWtDSUpyNWlMVjRGMnRHMS9HRmJKalMyOWdFYXd1RFJPV3ZyMEp2a0drdkpJZmtmcWtEU1pyME04dXNLTS9zRHZGSSt3dEpFOUNORnBMekZ2ZTJKTm1PTVEyMVl1YjduMzRkYUQ4YzNHTmhQbW9xT0dLc2pZdW5pZm5RcTRTZCt0MkI4Q1VuSWZuTXZLWEFqYUwvYnU3ZzRRbGxWci9OWVVXeTdOSTh4NStLQUIxRFo4ZXFEQUh2dytkdHBudjNvY3V0RE1nYlM2N3B5VjY0cWQra0N5R0w4T0FhRmtKdUgxVzdLNE1qbVdWVWRSQmNod3dYQ2JBK0dWRmlnZmVZdm5mN2c0Z0k5dWVJZmcwMXVRVy9ZemlIU1ZYVEY2ZXEyc2RES2wrZmplcWtabTgvdnJCM0F4YnNrL3hRa25ieWhLWGtkRGsxQ3czLzM3VTRmRmM0Uy95RVBndHJIdmZMckpnRFVBeWEwWlJpNkJlZTdsektUOUlvQlVINlFqakc1LzBKRk05eVp2S1M2Slpsd01sazV4R1BDeUM1UFA3MTQwaGg5eFpobGkvSmVhR1VJeUg3RkZFV2ppNVdWMjBsM1RVZWovVEx3eFhVS1RNMlVVeDgyVHAzcTk2ZGpXeHVyQnp6ckVzSlVoRVJFY3lFbVljalNKQXRzbjUyd3RzeGo5T1J4QjI4cXFXdFg3S1ZlZk01WVgyRnRQT3lDUXBQcWxqRlVObXp0QzhkWVJGV01qTm1OZ2I5TTdHaGxkWWgvOWYwSmFYeDEyaE1ScDlBTFNJSWl4TDQ0bkVnK244UmtFOFE5MHpYczBoRmFVdGpQai90elZrV3pUWUdtNUF0aGphWDYvNlZVSlZTZ2J2a2NtdHNrSjlFdFZQOFY5YytKTFFEZHRtVWZNRnZQc1FLdlZmZW82ZktqeElwVXJ0eURodjZ5ZGFjdWkxV3lLM0pnRzVTUlB0U1pjd21mVFllL0c1ZkttbWJ6amx5d2RTRGJTRGlFNmVpRkRYK3gvTHhiTGI2S1NqMVNFY0dWWlFvSzh3RTZMZi9Na2RmamFZWVR5eW9VUkorTmhBa1U5TGtnbHNBWWVBekVIeWVWK29YeDUvMWNNQkZQczE4QWNLL3pPZGorRVp3TWdtQzNHVWFOeVFKN3A4ZS9lcE9VNU5USjBwNHByZDk1U3ZJUmlaVGtjQTNrbU5RVUxEaGpQTTRReEdUcjNlL2M1by9BNFJ3MnlRYStYRzVCaVZjMGFoOUo1SEtSUlZHaXhPNVNhT21JZFJ5QS9oUXlULzAzYWFxT2FSOVZIQjhnbE9LQ2FqOVF6RjY0VEhFVWxVOTJmZVdxTkJzVCtkODNaSjJZSnUxU3UxRU5rbm5qU2lXcTNGa3BaUjE0bGlKYnN4eGlydVlJemNpVEQxWElqUEh0MG9FS2N0ejgvd2sybVJrc1hpczJCSXBmMUYxSGtwR2dhMXcwWENPS2txSk9nUWF6aWZjdmpqYW1DenhpS2hpSEFmWDBxaitSTkc3YzVjMG94bXlKTm9pMDFCVDJRRDNJOTFHdE1ZVzZocnZzVi96VTl3QXBtS2NxaDE1R1dXczJKV0xqK3VUTTV5N011NlNFTGlCajhtSEIwMFFwNlYyeUtub1VKK25RelhNNEd6RjBnYjNMS1UzR1dhT05tdVp1MlB6M2pUUmNNMVdhcTgwTHM5dlY2OWhNalpjbjE2eitVRDhLeW5rVzN5ZTlON3ZMajZialNTRFZEVGlHQ3duQkVlWlJjQVphSVRiUVJibHBMSUd6TG1SWklPb0J1dnNoWGM0YnFwTVc4NnZocG9KVnh6Z3h0VWpPWXBLbVBoOXJZd0ZrdEtaWWNTdURKYXJYc2JlcnpUaUhHd0tDVkJZT0RyM0VNRVlreTFRL2owc2F1R2l6NzRPVXYwbC84Q3hBMWVLNmxjRkJNVzJYT21wTndMbGYwSndDa1hkT010Vk8zN29QVHYyVWJnU0taMElGNDdhRi9JVmhmRmdoNFhqd08rTnlxaXFwSG9saHAyL0RFNTY0N0ppazVTRkx2b1NnTUZXdkFqcXVrdWtud2xDZ04rUEl2aXd4UzdxbnlDTzgzSHp3K1hEcG5vOGx5RWhlc2xtdHdhcXl1aHdhL2RqWnM0OG1sdFJScFNkUEViaGMxTWlvbktFOFFjWWpYWTFCdk1paTRaMk45Sy9kNHpoVTUrTnVIWFF0YmZNR0ZiMGU3d3VzNXZkaVBLZGo3clJyYTRnZ2t3UHdLQW9za1dBeGZRN2I3bllRUmJMTmR4VWhZSHBKQ1BsdHJFWTgxYUR1cFhjZkZHYWJDemVPNllQS3ZXN0dFVFZQVkJRM2hDYlZ0RkdDUGE0cWwwSTlveHpCVXUwSHFXellFYVRLZjIrZTNNMHJEMFVsYU5oNmljSEhXbUJzbkZaS3hnd3hSZTgxemZ1aTFkVk8yYXZJcGd5M1NzV0kvT3BhTkNCaEU1TytWVHdkZVdRakYwcitiQWtMeTliUkFJaGQzK3VHdGJQaGJFb05peHo2OXNsam8zcFlvemo3R0UzNW51c2cyRVkrODJ3d2ZCVERXWThCSklLbTA4NU1MMHBsd3paNkFtRjk2L3FRWkgzWkZHQ2ZQV3B5eGx6WlFqRTlTa2dqVG1rbDV1My9ya2FwSkV0Z3Jkdm9FRnJHcVp5RXRiM2RoYU9rZDNielBmekR3ZUFsdE40emhZRm80RTJMSXlSS1VaKzhRUnlrY05pM20zdHFab2paUXZxRU5VUGl5dEdnTE9jdGt1MzBUQ2hENlpKc3dmZEJaa1JqS2tkSDBIK1FuckJVbDZrRERIa2RDa3ZIbld0c3kzL2ZPdkljWVVsb3diQWJkM05IcDRPRmRUb01KTk1wN3NSYmFvOVlJUVQ0ZWFORWd4bVd0TjdtblNEQThuQ0FldnNnOVA3eWRkVDNUWUhYYTdub24zRm5CYjc5eXA0bUFmbmJid243QzVKSGE4Rm0wL2xmQjJDR0dxSW95SytrRDBTdnZ0b0FYNDU4aFEzSTNyNDJ0K3RqRzkwZU9DUGk5anNIdEh1aWhTWXY4WUhmMTdnQ2pXY3lodk9aL09UVE1abUovNEc2dkdkTnZSTDhCOWdveFF5a1YvVXdNNWxoSmhrR0pxWGFYcWZ1OXBvbTFKR0w1N09HbkRxR2d3YVhPTE0wR1BoYnBMSmZsM1lPRUVMSGVzbW8vZXBwaXNsU21SdCtqMmphMWlpWURQWkQ1L0pYUisrcVlCM2pPODJ5NXF5Z1dhZjhxQjRYZWVlRzk5c3FiQ0d6WkpOTmo5WHB5dUpMVjMyMDVFQmR0dzRXSWNRSzlIVjlJSzhBY1pZVE5oSmJRVmJrRk5mTHNqZUwyTFRDR0cvb1RQTTBWbzJVa25CK3UzNnJjRUorMUhJL2hCUWJUVXcvRHF4ZVJ6YkxEcG8yQ05maTc3YnByNjRCbm5rVUdQdFZOaW9aWGRsaWFYUGhrY2h2MVVXQzFQb3NCRmhML0FoOW4vMGwzSVZpNm40cEcrRjh4bVpOTW00VC9jc1RJR1JSTDBCL3Z1LzdJL0NIcjJKWEZydmdKWGdPNTFJMXBXc0tCVjJIaU1SRXhYSlNHMnlnSmhMYWkzM3lON2VoL2VPanVveEt6cTBocUh0bmxzUEQzU0pFVE5QdDFZczljVU5MREZTdjVOeTMxVFFlSmN0Zm82bitmYVBBTUtEM25OTm03eVpYd3doZ2xPbW9Say9xWGI1R2tnSlA1Z1o1NVRZRmZwek9ETVpCZW9hMDB3MDB1WU4raDJUb0ZCOC9DK08rZTZVWGs2QTM5ZnJ3WjJUb281ekpjdW51ZGZWQ3lzclpCVjhzYnVrd2ozR2ZKWUtoT1gvRk9BRFdocGJScm9wUy81MFdkWGE3RUZjV25iMm5uTVFpdlpJRmIyUWNYWjNIOFJON2tsdWR6QzR0QW5mam1BdEFOOVpUVDRDdVJSK1NsamhtakxMcVFyKzdvNU9pbUxSTDZreFlrQWJYekQ4anBzRG1oU3F2MGQ1M2VtODRXOXBheWYrQjdBWDBvVUZnMHVxb0M2SHhReTN6RE5WdWhubGt2NEZRbDMwcTFsYmdITjNPSTZTV1pCUlNnY2k2YkEvZDJmcUVMN1dHaGJmMFhZeFFCUXJIMjdoUWtTa1hrbkNHVXNhS1RTYWl3TFhWNVl4TENyaVNCNHdrSXdBYTluZVl5MkZpWXp4T3lZcmhqbk8yWEh4M1Rid2ZpUVUzdUIrdGZXV3JPWkxsWmFabGdrZkRaSGUvL1V4MHJiKzZxNU5DQ2F3Y0JZcEYyTnhmVlZiV21SUGxWck1MRlZHbE9XdFNYTUtyTUUzUVU1WHRSSER3Ri9FODlINUJHYXJLa0NzVEs5RFNxSkdheDgxVjIxTUxkVGwzdmpzVGlqak10SG95aW8rMHlGVGV2aHBFSHVScWJseFJ3bi9taC8xZ1lzRFBXN09UZENWT0dmang2aTRLclNRZ0czSjFtSy9qQStwYmtMbUc2WkJZWWltNUJLSHNENnhQTUdyUmJLd0JQNHRna0lNR3JZY2RIK3ZGbi9wSWVjV2pPVWtjeHJ0NUxucXhqU3kxN1pOR2NvdkkxQVNEa0dQWXdwYXV2UkFodmp0ejB6cGJzeDJvRUVVS2lRRVZkRDQrSlVUV1Q1SHVyZFF0NTIyV0VrT3JVRDFBRGcrYmM0cU5sZmxMRTlnZnFROEhxT09lK1hlZFR0UlZvN2F5REtLbittN2VSTUtIWXFSL21aaXhmekxVNjhMQ3BPT3VMaTY4ZzYvUVNzdElUdms2VFpTQUdCVldrMVFMN09QOUV3SVJucW55ZFlWMEhqS3VMMHcrWDB2Vllkc3FwaURLcmNPdWEwRkZXQ2RvalpIaWRabnZzNGducXRsZ09XSUY2d0pYN2xkc05SbUZ6SXErNXZjQi84U0hCTkp0RFQvNjA5bFhZYk5wRTFPVDlCMTFRbjdBUUxtNWNKZzJhTHZZUjlqZVllTDFseW54WkhWSmlOVG9hdWV1azBZT3dCVjhub3F4aGVld1I3dWIybzdTTWpyU01hR2ZZVVpiUG5LSko0eFREelF5ZkdYTnNPTFhkSGU4Q1ZaK281ekxETmxUL2IwdUl4b0t3aDl2VmRLR3huNHF4ZDlpdTRTRlBvSHdLZjlnOHVDK3NCOEFiT1Y3NnE2cWJ5OVdwYmNyMFJvaVZaQ094Y2pZZ082VlhvbTZrRkIrbW13YVAvY29xenhFRnM2VGh4a0pSR1F5bFVBWWJRRXZ4L253TWN5b3psZVdIR004aHV4blBaMEwxc3puNmpOblJ5WlpRYU11THZBck9GRGNJdVBaY1Nub2hycWw5K3p3cDZhakxJTWR4bkJDcU1Rc0JPbnhOZ2Z6dmFCZ3djZkwxNFJ2aUEzTVFqRXUzUXA4M0ZyM3ZDRHZqODRJRHYzYUxDaFgxTWUxZE8raGhsODNkeWVaZFNJMEZma24wSkttNkxtL3ozcG1ndU1vNFoyUVFYTjJRaGtyaGVFRG1mcWZ6Wm51OEk0bjlPQUlNSGc1UTNzaDRtaFdUM0xGT0hRN0c4UlhtT1VCeko0SFN6L1VwWlZTeVp6Rko0bWlpbDBadkQ4S0J6RHBBemN0R2kvZW93Nk9RNDJqTzhGTGtzNWlhTjkzTE94bHdsczY0MXN5WGdTS2RheXFDU3dVWlNSVEdISmVwbjg0dGpZYm1ZL3I5Q0o2QlR0aDBOMGVGS3VFOVN6Mlc1YjYzWkRaNEUrUnh5WWlWd09TUGxuSnlpajJVZ2wxYWt3MzZFZjk0LzFKaXFLd1dUUG15c2grVDU5ZUFyc1FGN2x1UVdqRnBPb1FXbHcvVWl6MEgrT2ZPZGRiWFBDM3FHN05wV1d5eUpUaTYvaVhwTlBheHNJQWxPMG9tckUyQWRvSEFvL1JCMDVXMlNkUHVYdHJUR3hOelNwaWQ0Q2NGRXhER1ZFL1ZkSFp1S1J4VU4zZWtaYzRYS1d1VkVNSGZSNExqSC9LY3R3TVV3UDgvVTZiMWloV3lmMWgweVBvdXgwSVBaRjBVUFdrWVlMc2wxSlU1cFdpa0d5NUlJekw2OHpBOWpZYlhNTDY3czJ6TG9FN3Z2U2U3UXdYRzB3TlVreVRBV0hqa2Urek44NlRQR1pkZ3haRm9VZ3BYaVNBeHdHRTZaTGFNQWVwb1hEVE9zNU53WjR2QWpRZWtRT2I1NGpxOXcrRXl3Ymd3a0VpaVBxM1Zmb1MwWkNnQXJmc3BCbWtpYTlxSkJzdlRzS0lWcndSakx3N0xLWVhmNEE4VXF5dHFCQlROL0dZelBGVnZ3clE4Zk1qSWZhRFo4ek00a1NsakFIL3FrVUgxak1vU3F1cjczd1ZoSSsrZlYreER2alg0cmFhNEhpMzd1bGxTT2dnZUhJMXFweUxCNENuMFd2OFpnT1NiUkxSRXM0L0E0V0FqN3F5M053cUdSZ05ocGRUOHVZbStKRVgwSmY1ejFpTkhaVVMySGZmeXRQMjQ4VGdKeDRML1Q4U1lKL3ZuR2FZNVRRRkN2TDhKWjdmMzhWeEFhcFR6dVQvaW8xQnM4N1ZZZ2pZU1FldDRZbFpZY1NKSHVaWFJKVlhQalJNYmtRSXJpZFN6N1pKQjFEWGR3VVN6Q1RRNG1SSForV0pMVkV1R1Q0NHZDdWtPUmJFRngxKytPdUpLOEQyek0xMG42Sk9FMlJmVGtFSkw3Q2djU3AxTmIzeXExUEdRL2U5WnFFem4ySko2bjFZLzVCQkZRQzBHbW04WWF1bnkzQlVsblNQcjFLbTVEN2ZnTW5vWUwvdzZjQ2VHUFNHUklxUVhmS2x3Y2JhbGJVT2lZRVhxb2JOQkpoZm9WNGkvNXRGWEcwZm5ycWdUMm5SQ0tGcFgxNi9rYUFpeXZBYVJaSVcveVZBaXJxdU1FLzFtc2phS2pkTFc3WjNqRHRROVZBZTJOSDkxVmtwSUllNUxaa2x6NE1qeUV2Mk1vWGJmSER1VTUwZUMwc0xVeVRhWVMvY2NDS01DSlJJckVOSEE2THpmeG1pVTNBbTVmZ1YzY0F5bGdtNEh2bHdseWw2dDBHMmVpak1OajVYOW1MdW9XRUFpQXQreE1UM2k5MXhvazJnS3RoQ2N6dUdTWDBhbnRXMkc1SVNtZEMvNGxkc1NpZ2U1NUxBNDBON2ZwWHFxQy83ZzFiRi9PMFhCMVN6b0NPV1I4RzE1NXhaQnBaWG5EZkJVelVmYzBpZVlTbFQ2NTJ1VkNDd0U3cmNMSUlEc21Ed1JzMW5uOFk3cTljbDdmemMvdEh3M1NHeGFSbk5HWFlZOGxEWFB4SHYxN05ydFc4bDZzTkJjK0lCOTFIYXVkY3hQTEkrNks3RW9YTDM5ZUhMbzk5akREbTEySjhGa0JrU3NjTzVrSUh5Ni92bHFqd0YzemFFUHo1T1NENDdKZTZCMVY3NnJ1QUdSeXMvVS9mVmxPNTRETUlRaWJzV1l0UEJxUnd4OVVaeWlZb0ZEdDNxaFg1YTJERkY4eUZPdnJRcEcwb004bWViUnBCWHFVMnVVS2lvT1B5akFGbjZWSUJqVmtnTHdpd21aMjBMNmxzWHR2aldHSzdvNDhNRTkyY3VheVloR25sa2QxS2gwWTVDKzhJUDFVc2FNaE0xNURuM0NQNDZ2cWZYaWFsSjNScXp2d3dXS1d5QzJvam9KL2ZiMHFRbDdsK3VuOW1vK3V2WmFrcjVBdi9WVzZQdUhucXNCYzZRSWtVYjJpUjZ3V1N4azBZTWhtWDBQejRmWTdsME0vQkRMdXdnWFE0NVJTTCtLMnFsaHNsc0tRNWFJdlBud2ZORTBPWHgvNXUwWUF6dzZOSE1TMER2YVBFbXJ6UmNEZTZMT09SQU9WMjFrLzBXQjZCNzJzZXlVaHFGOXBvWEo4bElycW5ibS9CQzR3SDNZUC9iazhyU1U4eTVIM1pRTGFCQVpaRlBJTjhORFYzNG9RNDQvb2FsaWJUNUdiSGEwT2pjWFBtSmNxcktyU1I0YjNUb3JjN3hlNjlndzc3d0grejQ0UEMvc2RlRTN4Mm1XdGYwOTJveDd2dnc2R2pyTnA1Tkp6TXdDbWIyZisyc3ZLTjdwYTVUNHlJaTlxWkY3Y1JWS1BXU0hvODdaMU9JRCs0NnFoODZuTmJBVWMwcEFFYnNPNmNFRTR2UDBrRkZWYXIxSmR5ZU9WRmZ6KzZmSFRGODlZNTVxdTJ6eldtZ2xFalp2RVpHUk5Bc3paR3dYZW9CM3Flb1NjNHhtM3Z1aFJYUElkVjI3akViSTh0dlVZRW1yUGpLOS9zbDJJaDZRZ2o3NXE2RjJ2UDlyZEg3ZzFNU3JCdDVYZWlXSURCUE94M2tUNlVlYTlDWEs1MFFPYm5lMnNDMitoNVF0cEwxWGhaS25IVFJjaWRjNVRMZEU0N0NOdk9kK3c2OTZxcThnYmxrNUVjeXgxRU5yOWVadTQ0VTh4SDBBSDNLckJPb20vMlBpRW9xLzBQRXlzVzNoRHhsZVNTaDM5aGJUWDNIRkljSnFNSnU3cHNZWWkzMzBEZXFvYXZvaVRvOXdvOGJKR25obDR2amdaMkIvWU0zcjdYZzdiZVY1emJpb2x3ZWxLb3BXcEliVXlmMmx1UElxNDhKOGJSei9EYy9YY2xYZ2MxcGJFRjA4S1Q4d0tUSzc1cGNsbTZEWHZ4UHBJcld5VEh1RU4zaUdCSWRsMWtPcVMwbzJ2WFhBaHVYK1RFSk1CT09YUFE0RTZxVlFaNnl1cXRVZVRRZW1PdmUxeFAzQVFKeTJQL2NsL1EzZ2hpR0ZNaDJwdGsrZnJLSU56TG96SVpISC9YVXFVYmZaTkRWd1psZEx4Y21zOERzWUxDa1Q1YlRJUWw4dlZzUFpKUmpHdU1jQ2ZFV1JoWWM3dks5Syt1MWZYVGd4REZwbWhBWDBoaU1hSU0yZzlNYm90bUhxK0IwRzdjOFFieW1TZzA3SjlEYXpydTJFZGFsZmpGZTh6UG15K0FtcUFCVEc1TEhZZWthV0krdHBCWVl4ZWJWUGgwU3luZU55ODB2TWZVSHNtbjd2ZEdmQVVvOGN5MVpkcnJ3OFZCaThYS1F5a1R6aUVmTjMxRUl1MUkwcWFoN0ZKL0NhRUVPMWc2WkVGMmNPM281MFp6TjdaNDM5OEUybHM2RlQ3bjdwRkQvK2RwYlZvcm5lNmJrdTY5SkIyb2ErbDNXNDVvOWJUSDU4U1BValdqcXc5bmhlWE5paVRCVFdEaFpNMFdjYWhUc2llMERiWmhyOUE2eXZlUTFLeUY4MUdVektFK2VKUGdhdkovdU5tdlhwUXFxcWpwYXdqR2wzaU81V04yUytHR1Ricm81Zk9mT042NHA4K09DZ09mUmRNRWltYWVFVHZ4Q3NkeDkyNTVNSVcvUjdZcjlESWFlODdxeFhac3Z1N0VCc3lQWUdYaGQxbk81TXJxVk84NjE2cDlTbk5POFlGcS96UGJhYXA3bmZuSXNVZGUwWE85dGJ6cTFpUHhncXRoRm44WWxOQU4xbmRXYXl6enlCeHhPU3BlYWFYVE9JNUZlakFnU1lHaXNPUTVxYjFtVXg2RmdHWU81Z3R6QXloQkNMZ0VOaGczZm55MEpScTZoSWw2djFvQzJuUFNGR1Yvb3lmbXFQU3ZLOC9RQjJNeUFaMmhjdmc2aVZHZUoxWjMvVnFtNWpFdno0M3pnR3ZUQmFRc1dhQmdRNjBMNVBRUUJvSHFjZTdBdTJISEhtU3BDTWtDWHNIM2h1UHBnaWdpVlV0Ulhub3ZiUks2VDJRaWx6R0toelNFUlh0dXorMlJoUFFoZ1M5VS8yWTc5NlJiUkZKcGhvMUZ1VGdBMTFqYy9NYVlVc3hZa2Z0RllpTW5Yb3hMcC9rZmxObE9RVW04ZUVyK1BpUjZQUWJoV084QnEvQUtYdEE3VCtHNmpqZ1lTUm1mbEJhVU8xUHBwYlZJZXdVZTR5cUpUUlZjUXFaZVVFUnVwcmgranBvVmg2TkdNWnMzRVFqNWZLTTNmUkpSYU5QeDk5OTdpbEozN0F2M2FEdE45amdYejYvZ3kxcStLM1NFa3FxTlE4SldmeER0VG9vdWRXRDV5elNKRVI1L1FRbS9HOTZ1VDA1cFZ3ZVlUaWJpL0M1aUlucFc4T21WZlZCRlV3OWpUR2FmSVZ0SldEakdUZEZrL0JIdHQxbEdUN3lPeUY4Sk5tckRZdktCMGtGNlRVRXdqSE11TXE4a2FOU1E2Wi9rWndtVCtyUXlBTUpBeE1UZ2dJbE0xNENQUVlCbkVoa3M4TzdWbEpSZGZtakdqS01lOE1HRXlDaHZCYVlwcUlhWjZBU0tUMFlyUGNReFgyS1ZoNTRrWHpIcFg4NXFlRXhSeXROV1hiZmh6MWovMXVGVzV1WEowOElEdnhyZ3E0cnl6a2k0WUx3Q0xVMVloVVl0bTBMRlNuWHNEYmdKWm1wazZpSENjRWVuVksrM3JmWnFQYTQxeVZRdTJuRWlLTWhBdll4Z2VhczhsVTJHV25NL2tRSGx5OGFPWmRBenN4VEVwVVl3ZHRHUDd5YWlDYXZOcld3a2lMQTNyd1lBR2Z5eFJ2ZitKNzJ6d1dROTkzT2tUbTdKeW5NTE8zS3ZDbEcxOTZvN0R3RzNuQTNmMWhxTVZzQ3JvWTdSNGdyQVVmbCthSlNLcVN1cXdqcGNSNkVFdUF1d1lHS2w3UGZ3LzJGanlyZUVGeXE0MDV0T3ZlSEtsbksrc2ROY0tObHFOMm5GTXdQTklvMDB6V2ZFU2kyam5RQzdGSFVEVEtBa1pFOTZKL1NCTVFhTFc2WEFDMlY1WXRqSjFxSFFhV2NBOXphcXBLa29VVldreks2L0F0eWRJRE5hRGZlNmVPa3VNY1lKTC9OM2R6UHF1bDN3QXFIY3FCNC9XajZiYnpIL2p3ZDRuL1ZrbmJCY3FIZkVVcHdSVGJ1ZjNudWhGRVFybkt5OHFZbUxkckViN1JnWlo0d1l1Rm1MdllrRVVFUG9wSHk5WmpiUnJJU0JYOWtzdTBTeHI1Zm9UaEJYODVPaTVmVjlLSWpvSTFqVERnOXZrNHBodXFUUGpvY0JBcUZOaXdLNTZ1K2tudDZmQjdzZXZVc2d1V0lQajdaSjh2WnZNajVZbGlPZUV5SVVDSWw1QjdoZjJrUzRzU1A3dGNaS0NPU0VCaHpvTElOK3ZaZ1pCQ3ozcGJWVnJjM1VjSkUySEFScHlvelpOS1hseHJnbnU4VjJWYWNodTZWYU5pUnd2MWdXdjRIT1BCYTZDcUFMUks2RHRiQVI5UlZVazRZb0dOckx2Q2JKeGJqMHp2bDR4cXE0ZUJFaDlzRUlJUHVyVlFXZHJjcW45Qm8rYmk0MzMyUkpFWmhqRmxZSXM4NGxlblo1eWlHWU9Mejd6VU1RWkFpak5tb040WUp2MTRXZ2hxTXRuVmgvaGZnT3FGM3lVUkhRdDZyY3VrbHpFR2NwUFNWamdpM29ha1o0MnFyc2Q4MlZXTmJoVDk0OWdlZnExK1J1MWJkUmtXeDBaTDZSUWVDYTRKUmJQNUtSTVVSSGMxdXhFQnFnaS9GSGxUbXlnaXY5Mnk4ejEyTlVyanR4VUtGeTlGL0VIOXhUWmZPZVVtZmdWT3NmU1R1WGpmT3Fkb1EwSkJZd0F4MElJUGRSMS8xU0NzWk95bWFjcTNGOHJLY2R3SXZnSFJ1aE80cGxuc0Zud0pqTzU4eDJ2VldrQzJ4YlBYTUQxRmZyalBtSTdYVk5uL0c4dUdhcWVjT0ZKTkhhaDJaLzZiTW42M2NheTBsejhiYWFjUU9md3Fjb1V1YVpWeFBHM21XZkNMMmFvWk54ckJmSDU4TkllaGxiUk9lcUJJdTJEV0hPU3ZoUUxXVnhDL0VTNmpVdXlIL3dWcTY0ckNJaXF2OU13VldpUVVnOCs1V2ZYTHEvaHRkSlJwalFZRm9DaklhR1FCTDZkQU9jNTg0bVp6ZHA2d0h1ZG1EZFFSSzdnYU1iWTU4UWxaQlhzejRwWDZFakFvU2g0UkpCbjEvbk9SUGQ2ODdUNExGdzZyaXhqYjBGVXUvZXZ6N0hoaFlGNE9uOHRZWmZvUUVoTTIvQXJJL3U0TEk5UWE1b1pwMk1NUkkwYXZTY20va0V1Vmxzcm9adlI1VjFIaEozVVg0cXNLMmRXdUNtT0dlUEVsNFRpZjY2dlBRUUhyNXRvVHNTVjV5QkprV0RwZXEzRlIrK1NBc3RxYjA0RUU4dy9FNGNjOWV4YjVlUWVQUzJGeVdSZ242anJ6ZFo2d2FEMS9lNG92NVRUbmlDTUN4RUM0cXlwUmRIeG9wWnRvM0FOam1UbnBtTTZwQzJpeEZ1MWtmUjBTYW1qU25FaHhyUDlLS0hXeWdETDVCK0lyREt0dzBsc0N1anU1cEdLaGxaMnQybEZZcmdCZkVmcmZoZE0vMFlMVlhWamk3SThDL3U5czdBbnY1N0hSYy95ZWJNMldhYm16MG1TdWFWK2Y3ZW50M2hhNHc0a3RpWDFWZGpCejJLem9CZDA5VXBEbkNYVGJnSEE0VmFHSHpRalVYcEYxR050SVZINndxckFSa290SXcyY2IrdUNqdHA1cHNRb2VraDFkYS9mbWt3RDdLd2VyOS9wNmRRRE9vaU83V3g1d2cvc2Rva1BxZDBncEcxSlV2VVV5KzF4Vlc1NHFmVkVNZ1U1QXI1ci9iNWNzMUpPdkJPTENMaVRiZDExYXFnS0dCYUFWVE5QUVd5bzJhTUtNS0doVFIzQm05T1VjQ0FxNFZSOVZheGRCM1MyZEZCY1MyMUZubis4OUkzZjBXbytkVCtrRnFmdHBpc0RXRGxKL09TbHE3UEVuNUI0ZTBHSVlhT1JFcVZ3QmZ5SUJKMCtmMUNhOGkwVENLR0lTY2NrbWlXTWlVNXNuYndnUGRhQjhyanI0ck4xa3RydVhsWmpQMEpYdlRUcXlodFYwcnhBM2RQdFhENTRMbllGeXkzVG5reFZHTTRDN0NIZlQ4SENQMEpFWmVFaGpzSGZNbFdnVmg0TU5XQkd0SjhGNk0vUG9kQzBTT1ZnYkxpd25qNVg2dkNtUFhiVDFEeVorVTBtY1c4dkRDK3ZuYzhiRlQwOG1CVDJOWkl1cGxzZkVoYjc2SzVVMWp0cVF4MXFWTE55QXRFa2ZpbHBQMHRmQ0hKenRGbmF5ZFZQWVNjNCtVV25GaEY5UkE4VmNGNEJyRHJ0Vk14Qk4ybkRxZ1I5UG04RjJnWHM1ejNjMDF3blJaam9GUmo3TWlXQUlSeUN0L0tOaHJmcldPR1Vwd3JCeFJGMFI5Zll4Q2Y5bThzdktvbGVvUXhITU0vaTlGR0pQRFFHQUlQMGJ6anV3K2RnK1k2aXpjbHRIUlQ3Tm0yWkdlOVU1ZlZTOXBMNnFiUDkvRHdGbUFGaHo3MncwejlZcWMreitiM25OejhFV21KaEZyejRQb1ZSekhxakFRMkczRk9Jem13ZnQzYUFuOWptVnJmRmZKOFZIMlk4dXMzeFhxdlhsVzBZZm1oMnlCd0srcEUzdlp1cWhtT09qZXM3Z290Y2t3ek1UZVYrZnZPMVV5YlhUTlF3K1h2RENNVzg4L0xTWlNsZmNCeWIvT2xGbitXbW96UnZEd3VyVlJOcU9DZzRTWk9nZTdnNTRsM3NpUkx5Wkl6bVVTNjBlbTFiOHBYOTAyV21zQjBUTlgxY3MwOFMxWDZWWkladGFwRy9IdDlGUEdWdC9COFFETjVTSTlaSjY1YmtMbk9KSmFyamIyeXc3YklrOWo5V2VTZExGOWcxTGpwMHlxamtpdEJZc0wxL202Y2tIbzZiekI4UWRUVGQ3OXhHNVRuMU93MzRNQlJQVEJMRVd2b2hhSmFnUlFYMjJ2NjVEc2tHZ0J2SVVOQ3FzNWthOXpvaEVua2ZZS3RoMzJ6SXFicWlUbVg1bXE2bForeUVNNE80M2c0WjNiTWN4NThudG5iNW9lQUkvUkIyWjZZaTJYTmN3eFJDejIyNDNGMDhKVDhmRVNnNGkrQnJTY3VEZEFjUkdpNGVIRE9OV2FaT1huZjZrdk5hK2U1eTQxUWVpakY0VFp5L1B5VjhCNXVNeDlvM09uRURKbWlhb1AzbG0xNkszU3lYM1Q4ODYyUXZSdmtFRkFIbnpHNFh5OGNnalZ2d1RhR04zamtLaHJVZGNsemRTZkZUZ2E0MHlMSzdwb0JRcVZlQUVEdEtZNFZIWG1qbXNtekQzLzFQc1FPS3ZScUNIR1U4SGVuTmdJOVdpUlFpbTF0RktoQllUUEFZL3NYdGU0eEs4N2hmNDFDREltTGtqbmZBbDRiTTh5SVJpc015MVNpZDdlVnZnYmNtOWJ1SnJWZE1IU3pLc2tFTjl1S2xEYU9SVWdwNDB2em1QRnhRZllIVUpnRUVnNzMyd1VTbzdmWDR5c3dRY3RXYWhUTkR2Zm9INkRIcmpjdDhmMWhuSmJzRVBsZXBZVTRNOGJpVlZuV3NwS2tETzJvUlFFejU0L2pXcktiRlF4eEFXdUVMNUZIMXQ1TTBWTSswSFZ2RVVnZ3JQN2M4bHNLdVdWbnBzVXJFY0NUSzNkajZKamRCUDg5WHdxakNhbGdvaERVSFA3ZjgyUGtyRHQ2Qk5mcFFENHNHT3pWN3V1RTFMTEJGTCtIWVd4U3dQNkg2L1ZuZEJpbVhyaU9nN2pFOEpINnRhWXRWZ3NjcEc0NHpWdUhsSk9acjBVVGl3a1E4SDVzZ0JweTlobmxvYVRUWU9RQUxZU3IyU2ozVElJZGJMWUZLa0NsNFg1c0MrRW85VS9vVVJkSWp4TzY1Q1VXRmdEMTQ0S3hxSnBZTHNKekxLMnZidnVuL0ttTEorZEJ3UDZzZWp6R05wdWcxSEprK0FQTHk5WVA5SEwzOVRJQ0dDNUJBS1ZUVUhHcDUySkpXNDFRcHBKMjRTOFdBOTc2S0RXWEM3TC9rS3oxUHduenhJMUt4ZGlkVi9EZ0lRT01Ld2pLVDA5U25vcERDN0ZuWEFuNW9DMm5oTjhYZlVvNzEveFY4eDZMSW4rbTFiQnNDK09BRWhVQTJ2b0svOXdjUTRBK3Y5SjFaaGU1OXZmaDRsdEttaEFTZklnN0YxZDRHZzByOTN1RkR3K0xWUGMzTkFwL0lpZFZ6RzFYTzlZaUtubW5QQTJBVHl1UVkvZ3JYQjEyZTRMUVpUZHI3eUYzN3EvZUJrWjBSVEYzeTdCUHdrQ2U4bFBMUVNjM01ydFpmTjIrMzBDOXR0REtmdTczK2FFTUVXUUh3blFPUW1QTUNXazdBRmpmTUVYV0Q0Q0U1WVVqVFZQSmlWV2pWakkzcC9wTWkvTG9YWDJyYVAzNjVqdTV6YjlDV3BROUFTVU5Ob0JuL3A5dGdhc3VBMFc3V3Z6WE5VTmZaRmdrajdjS2Nta3BISndxWGEyeTFsdWxNSjIwV2hENmJyRXdPVVhCZW5YRHAzNy9oLzRJRnpHYzJuL0d6d2V4K3hmZUQrRTc0SmNUd0ZGaTUza2pvd3l3eFFuZHNkN3d6K21EOStVb05rM3ZhUStycm16Z2VicjdMdlovdUdCb0d3dDZ1OGdNUStqMm1KaW81SlUzVVM0bU9OTzJKbThyZThSdm50aTYvTzJQOFlQV3lCT01QdENEWTAzdC9NSGNqUHZkakRjSlBzcGNLbkhRZjZZdkRPWEJsRnJXckRVcWJtcHFTcnVRNTM4dEkxQmhzaHdNNWNaK3RuZDh6b2E0bXM2OUVyL2hpMS8xNXdHbWxrZ2pMRTQ4OUthYkY3MkhUemZQVU5SdzBNeHZFbjFoMkE3OWNNeEMzUDZwamxhVm9wc2JTYXpYWnovMUhJcEc2ZDF2SFR6UzVNYXJEbWZhYm5lMHAzWGQ3Rm1WSSthNnJFUkV5YzQ4cDNwU2V3YU9NSWdPaDE0UVRxWUFSb3VtN3c5Tm9XL0RhVDlaMWdsbzY2V1NSV2REYkhCaDUwTTdpcUdCMm9NbHJOMytkbzFhM2J4dzRhYzJFOEgzY0RuTWpGWjdRVVhVOXU2RWM0RCs5a01YSU9wRjJjYytoOFM1TkFReXJZTkFLbXRxV0E2My9oeUM2cFdoSk16NWV6YldML1dKUnJ3QUQ1RTF6VU1LQ1FEbjZVdXRjTGRCVERUbk1MUktMdE93NUxUN2lDUHNoNWl5dWF1Zzl3d1hSRGRtWW9aZVZ4K0owNTEyYkpLWUMrMmg2R3Mxa0hJOGxiOCt6aUorbGNuem8rOEhOcWg5NnkxMklNQkkzNEpYbTFTVlFLL1hlQktjcTZHeW1wQUhhY0lsOExjNnEydUdtSG9WZ09NTlJWdUFDalhhaTE2RmprRGU0QlBmOWhMSUJleFBLamduVC9HNDVnY0hRVkRVZFQ1UzNRNnBXNkd3NHFpaWNSSHNTdWVuQjc0cE9vVDJBVXRKZFpsRWloYnJ3ajd4QWtKRkFDemdxb1JyRnhlMkNRVlkzVmZCRzlzdDV4UDltV2FOVE42MCtKV0V5d0NDbzhrWUZyTXUyQzY0azI3VDdVME1ReDJTdWZ4MEtXOHowVi8yT1VwMHllNzNBMUlYZHJ2dFBVbWlBWXNoeFhaaFZyQkJIR0dlTjZLMUZMWlk0QnNLSnUxTkVXaDJtOFBMUFcrVER2eGVHSVdBUFovaDZzUStYTlAyNjFIT3FUTFc2Q1ZwMUcxSnZGZkJ5NlErQ0JnSGw4SzFRRXRReEVUejQwT01HeWZHR1BVM0oyNVYxb2h6bjNyMHBCZkFiYURHRGF0c2RGc0NzSGZCd2VSaDlpMk55T2s2N21NV0xrUWhmVSsxOXdhdXNHMVBkTThvODRjTzl6Q0tMV0s1SVUvYWpIdHdJUTVlZHFTQy9JSUtxWHlHRDlFRkJ3N1RGTi9FZDJDRGNmUHFyNE9BbWNBZklYYUE2VkpsS3B1cXlvT2F3TjNweUN1N0sveEIvWTJqZkdRZ0RoSUg5bkhrR3R2dDJuUXV1QVJYV1Q2OXB2SkNzc2FreHRsZ253R3o3bDRzL01waS9zamRaa29nRTFIUEJYTlM4TE1MUlh2R0lOM3M1WFUzWjNDMDJIbmwySHgzbzFubi82ZFQ3WU1qMlYxVVlSSUZNajlFUTZ3RTNaejViYlY4ZjNYSGJ6M2RwRHdLaTVlaXNyU1FoTHFHMGl0MkoxcytrU0dtNGFvQ2M1WURLQ0YvUHJlMThQN3JaTDNqSlo0dDdnMVE0ZjdhdTR0V3J5OTlIdnIyN0twSkFEeWJjMHBsb0cwQzBJZjhPRTV1OW9vSWJ1T1JkMUlVbGh0QmltcVNUbXBZTVM2UjR0dDRQYmo4S0V1L1lEOG1rNUtlMWdjNnBURjNRQ1ZRSUswVFZZeG1EVUVGamxsL0lodDNIRTJlUzQ1WE9rQlUyRU5USkd5UytVRUwwWlhzTlhGSDlyaklKWmYvNmc2cTF3L1ppdS9sOTRqZEdUaXgvV1FFVGxvVTFlM0E1TlRnYmFqbkkrOXJXMWRLOHVzTmVzaWVSdjArTHZINWlQU0tyNFc4RmxFd3ovZjRRVDRJaWhlOFlGVjZQRDcyRGt5ZnR1cjBxWjhVOVE0L2tmUHR1SnBRNWRjTjNlOStZVDN6RmM1bFdqYXBMMW1uTVJ2SWZ0anptYzFGZ3piWEtndmRqeXhyaWdaVG52MVM5L1drVCtaL1JwdDJWMURxTXlxTEx4a3czY0pMK3JGbjdwc0Z1bzhIczIzTjRTQjZlL1l0MVIrTHlsN3RsRFJ0Qzh1K1hTSUI1b0VHQzFLSHFGc1JZVHVpUnlEd21tZWNsakwzOFhaUE5ZUlprMi9jdE9LRzAyOWRSQlVEc0tXRjN0NzZ5SzVxY2JlamlSTVVPUlo2dGlmOXFZSWxxK3MzWGdTdGY1SHJyVTBTY05QMXM1U2FFMWhHcjc2K1RZSXZXSkVRMjBDZzY1VGVuKzJGZmdiOXRudGJYOU5PZUVROVcwSFdLbVFNMWM5VW45Z1JJc2hPOGxHNE5tcmVVbkVkWlYxNWxCTFRHSlRFd3RQYmliUXVuOVQ5ME9ZMDVwb0FxVnV2SFg4WmEvUWVmS2JqaW9WOU5DRGk5c29CT0pNVGUvZjZIZjM1SXpIVXJ5em01cHI5MXNReDEzamUyYS9wV1M4SFNxemZpeG5jOTN5RVU1dC9OTDhETWVGb01nQTByamE2clZjL1ZWWDgvbjl5S2VDdzFzNTBiZlNqYXJLNVZXcGNleXlYYkpDZzZIK3VrbHBPdHY3QVVob2g1YVNBWE1mRVRZZHY1clAzcXNJc2REc0NNMFJkOGpPSnlJcHJOZGpWdXpSeDFxS1g4VDZtS0VXTGRKQjBxRGJnRklYY2JhaEljdElKZ29tc05HYVlOU0UvSCtSbTFpNkIzdUt4NldyK00yVERjelZvZis4b0dKdmVqT244SlYvUXFsMjBTYjYyUnhuYUJhTGErQ1REK29HSFFBZDNxbFpHbEIrTmRRejZlZEFEaXcyd2hjNTJjYzFwWWpkaUxNZkxFZkNOS3J5N2srUU5DQndSbmxyWkppdkUrSmVvS2FoVWJZY2toWTlINjMzWkM5bjA5Q3NXUEcwOHUyMzhXY2xHM2lhM0NNUnNTZm1lTE4rd3hONFA4MHJ3Yk03cmVPM0Zha1o1NGtMQm54V09vY2pFTnJsWG43cmNjSjBYTlhUcWZiOXVWTGtLY2crbUROZzVmeXZPZk9QcjcvSm0xSSt3REsxd2ZqYmtyOWl3MzZtdGxJbTU5NFFCYlAzRHBoRkNDOHhqelA1RVFuL00xRnNyVUUzN0VsU0NTVnhSbWpIRGo3L2kxaE5TczJmbWlndWJaSmJpV0FoVEd1OE9QV1czTDJjdlIzWGFHNmRDZTdtMXhCMDZnWTJTQkY2ZTVwOFdyNVMzMXpieWNObElrYTloZWxNaWczUTF5V2p1Yit3VTFrY25UTzFhU0lNMUdXVjNIQjJCbDNRWEtqUXhDQUVBUlpvL1BvQWh4dWV5ZnJLd3hWQ0dZdUQ5MFJ6U3VScEE2TGJxUEl3ZHJESnpiRkUxd3p6enV2UEQrUjRlc2ZZSjMyRnJ2SlpOK25DcHhyM2NKRFlSbUYzeTRuR2p2YXVUSVZlQWxvWmwrcTVNUHlEbjRib0kvVllIUnpJbzhDNlI3Q0FQV3U1Smt6cXNEb0EvQlloWSsrbHJja1YzL1FNbURYd2FxZ0lJT3hVbVJLYUlHR0M5QVU2UHFCMG1RS293N3VjVTNkRUlzZTF3UDBqOFM0bmJGTk5vbFhUWjZtaVBuY1p3ZlQyRURRK1NrMy9DNGRaTlVzYjFFWm9oU25sOFRpdzdoOXQ0YUZrUjVySGsydDJnUEVvUnlKeEhUR01TamxDTGhUNys3S2RERFluemQyQldaeDFBVkYyUmJwY2Fqc2NlUEFVOGx1TUdFNEN0NUJ6NURma0xmWlZBZ0I1VmZVZHF2QVlNamNsL2NXMzJMSjZlcE5oWHFaQmhsZlFBdmZFWTlDWEtzYXNqanhwaVNDY0tFclJ0Q3ZVdERvRFd4WlYvS1UwVDdwbW51S3MxWWhWb2NTZXRRZHNERHRHRFhMNnZxSGIzOEovMWJOdWt5WnVtQWtWbHcycFFGc3Z4R2lKdEpZTzdzL0lqbjRhNXVscGFMblcxdVR6SXk4enllNVZiSThUMTlvbEZnN2Y4M2Q0cHNMQjRwYlBxU2ZCejdGUmQzb1hpUjU4U2VoSDI0T2E5N3phaVZ3eldYc0ovSmVvVlZJcHpDWmE3T3lxN1E3TmhxTU1nUFp3VVM0bmdZNSt3RUUyMG9ZWmR4aER5YWJQK1dpWExhQTQ5QzNXbDI2aG5za3BoY2ZJTWR1bGZnQ2JIbW5KdTN2Z2c0b09nVmd1cXVtcGdzTFdyVGlEcU5JUlpsV0ZGek1QVlNQOVVIYytGdzB4TXZRLzFGY0ZmWWJnOXcyTldqSzJoM1BVb0VwZ2dKR1kvZloxaGYvTW9kR3krN1Uzb09ZT0JHSkxXemw2K2NrTzEyeW16czF4cCtqUE9SYjhDRVNZdUd2bW96K010WVZOTkhZM1hjd2kyZndkSVNYaGFyVjZCOXJjQ1d4bmRDeEJQSmZXRDhDY21wYlBCaVlQZk1nYlJZL0ZIUUE5Vk5uS1ZKNlVBVms1TnhlZ3NpVEJENUpPaGdKN2QrYzBaRDNGUXZlN1FWWjhvWThMNkpRczR4N3RtK3V4M0RzYjI2Q0xrWEtocWF0bUh2bG9zSkpMVlRRSnhVYnFZVk93dVhGSGx1b0NmTzRocGF3LzFzQmlTTHUvY2EzZjJzMWlMNDBFMXFBSmZOSTRGWFpCZ0JDOFNvdklaUCtNeXdWTVJQT2dLNk5TS3B5RjhxTFRvc1FnUmt0c0lxS2tjY2tDRkhaUndKMkhENDJjdnpQSjQwZHIwR1FtRjhBZmVweWFjdDIybnBYN0g4OExXMVgrZHpFYUJqUUhubzRocjRpOW1vMmpUUjRERVZVSjFtT2ZUL3NQSitXYjE1eFJQTE9zeGlVSVNsaS95Yjg5OUJpdVU1VlhRbmZNZmJBWmZSbEpwNnI4Y2pQVG1aWDBLRTVMdEUyMnFZeURvMk5Rem0wNDdoMitpMUJPUFBVWmg1cWFVMnJWV2xEekFUanBCV2NnRFk5bnFEWTgvdlhnOG9pSzVzZW55UTJCYk5GR1J3eitMR1ExZjdKMFFpMFlrRTFLU1VnTmN1MC9lM0ZFR29OR1lmYTlvTk1XYnJVMVFiZEl4K3lXcStIVWZ5Nnpzd1UzUitZQjFUUGdxZ2tXbjFPZU9RaWJHRmJmTUtWMEFrRnE1SnFrVnlwUHVJMjdUdnlVOUtkTjc1c2V5ZUVBdU5GV0I2c1Z4VHhDRm9CaVlyZ3pUckgrVW1sdCtLbi9DeHFCUHphZHR4QXA0NURVU1NWajhDWjV5amN3dVRidEFhd3RLSzVVRy84Y2lIb3A4K01ITWRVaURrajNIQVZPNWxYQXN5TEpQMTRnNTVSNndIRUJwZ3I0ZGZ1eHU3VEE0blE3QkFhenZ6MEVoSkIxUkhSMHEzalJnZktQWkQ2T2YwaTFZWVZFQUc1K2VKZTFpVDUwemo5VFpzYUFDNXVvWWs0UHJvc0ZrcFFUbmJJLzJ6OVkyVERlc1VKMEVXbDR5UXlseU80RWJVWE9yK0xrZ01Vc1NpWjkrV1hCVGpnVk8wT0c1MnczcEdWU01qejY5WkNGRFlXNHZQOGpyRVplVHRvYlVBUithMGxURFhoMERETlZCdGFYbWVnenRBUWRRSVJhOVpkUVlxS3BXVXZqRkNqYzFybUlQNVBqckhrMTlHSjYvZTk1RXNGRk82aVhCMytET1ZaeVZSQm44NkhIWVlmUWNaUTc4NTVkL0ZSVWU2TU83R3F0T0pxUnQxS21NODByQ0dwdnFtYmNJcWt3QWlJYUVKT0h5NUU0dTVoT2JFN1FMUUpuYUtCVnVtbENhcld5UHlSbXRIVW05VWM5bzhaVWJ2eG9CaEJpRmF6OXhkT2tidFJrT3dGZFg0UndRTEJVWUhod05lQ05ycXNWbFo4WUI0YytQWFlJVUk2VldrL0dDYWpyUlduNFM1T0ZaYUZlQkxaVUpObzUvQm8zQUxkdi95MEFPRzhUdys5dGVrdjB1WjdGbE1zeVRkTjI5Y3hkRWNPd3dUelA0UzM3TjRnWEFnSWpINWpMcDZBN29PV3JubXVXV1VHeDBlVFJ2UzNnUlJDTytrOGZ1Z0U5dG5TMC9sYWlNNUNOMVY2T2NZdUh3NEV3TE9UUHlSbHBjZ2ZBcmVWYjR6YXMyN3lEa1VaN3NHZGYxL2ZJR0lDeG9BQTh2TGR0WUZBLzNwR29yOEJhMXZPNlNGbXBkbWIrRjVpTGU1UkMrY3pDTVM2bmdIV1R4bmNJT2dBNVA0L3JzVHJaZXg5eFoyVnJuSlFibTlwWFR0U0REdDVFamhoSnJoTGRrajBDTktpc2RQU090RnFJK3JleUNNK2ZrSlJkVHlFSXJsOUtZR0F2Nm5VRlVNTGtwY0FYK1h6TTd1WEdvL1lXYmYweUsyczVmVzZiL1JuRG91NFRPRHZOOHA2d095N3MzSlRCSmtFYWd2VHNLZlFndnZCVEkyYkNtV1d6d2M1RlNtT1VkTkx0OU9MUEhhb0ExZ3JhQ2dpUzVuSkZ2OWE5OVRzcmdjWVpFblhBVDBuRGJMajZxOTRuVldtS3pLSVVQY2czUGNJejR2WXJKQmFVOHcrdm03TE9BLzIvUGRHdCs0andxWmVwa1JmaGJPNlhwaXRMZ3NRWUlhNGYrT0lveWh3R1ZVd2l2Y3J0NGt6d3RPaTlYZ0RObkwzckR0ZDUwTWRvaElIaEpBWFpaUGUzc0NEMmltcFZMcmVpdXhYS3I1b2lZT1ErYWxUNkRuRnNOeGJtREF2b05wNi93RWlpZEJTTVozaUZCODdnaHh0LzArU1V6TWFmMDFGWFlGU2xVYkZPbWtvdjExSktQcHRCR1JQU09ublRpUWRieVY3YUZ1Z1dpcW9VSE80bFI5QjdJRW1oL3NvQ3E3dmpHYTJEdENZQklQNlh6YmppUUJKOEVmK0x0cTlWUDkrRDlpYzVtQSs5VjcvSTZrVFVaNndEZ3R3N2wxRW5jekIwc3Y5TlpSbEJGbEtRd3R0TVhmMkJmOTlveHphVjYzYVhvYTJibDYwbGtSU2loOVBkUEd2MUdLcXB5ckhrYWhkamt0b3NBVnd6dGxwcXU3WTRsOVh3OEdvTElpT3pvaVVYdlpJS01nZmNrajBmeE1pS0JFL2gydzErSm1GR0lKWkUzZlBZbXVCdVF3TzVDakZtaHhKbFRKZFBFY2srYURBODNjWEd4YXZYa3NoZ3FobWZsQjBjL3pudGRROVlMU3h3WkhsSmhQVzhNZ1hZNzFTUmNRV2tTK1ZZSEY1UG5TcGswa3FxWUt3UnVJU0xLdGJjNGFtMmVqa0ZncXJkSEJ3ZSs2N3drREZjQmxBbmg5aXFBZHJJZHJIRFljRnViNWkvaElqSXNvVGc2VnFTSU5oYUxpb24rcEZPZFYwTWVJT3ZremdyZHc2YXlFSFdQYkRtdXZxWG4zdzJGYW1nYWVDZjkrcnY4YkVLNG9qUkV4eE8vT2FubTlZZkVWQnBZZTV6TXA2d084d2hSYjltM3J6MGRoSWJrK21saEhGc1kvUnJwNDBYdGtZNVZvN1FJWnNZSGJWZXBFL0tvcGtOMFYrazVSMmJnWFM2RTdkME5ZM0NEUlEzeW9QSUVwY1pPLzMvMlFybUlZek5RcHI2L3NZSWNlRElEOGVWc1ZGZHRGakdMdWdMRGxOR2VlUVdQSTQ3bEZiN3NuVnZNWDQyN05ESGZHb0FhbnVjbUhFSWVxenQzcjdFR2Y0UDBYT09DWEN1cGFONjZ0bHJuSE9oMmRkaDhTM1lscFdURkI2ME44bFBXZTFaK2UwUnl3OHV1bE5VMDl1OUp2R2t3SzJldnZBdlpweXA3OEp0djVHMUpPdUtnWmJsV0VQT3VJL1NSWEt6QlZjUDB1OFBvOFFORHVjQ25TUGt2eWlvV2xGQUZiSmNoWnZBTVphQko2aFMxMnE3NWxSbXY4MW82MENoNlJVZFZjQTlwREIyTlEyNVJnVXowMStiaEZMdnNSN01sYVdSbnVLSVYvbzZaUXZHb2N1UFhaMkV3VXJ5SUxpc1FtQWFydWFCOS9XVkY5T21OaGhPTU90dzdmZlk5Sng5YmxpUnh1KzkrNmMyWFJiSVpQTzZ3V1dTUGVEUld5TzgvK0ozZHY4UmQ3S1JWQVZDdGtUOVNhUW41NzdDUVpmKzFMNEVCbW5IZTNFMzI1M0JNa1hDVXJLam9ZN0JBRmgySmZEd1lMQnVTNXNKQTVNc204QUJuWmxURFBGV0pWRGFXamJZUlovaUhueCt6L1RzNThiaE1OYmI1L0VXYWxValZWWGV2NS8weWlYcHk1bnJNMUZsM2tOTm9PS0l5NHlYS290cmVCc21mVFB0MG9YRkFIakpNbDFDNlo5dnF6cDR4RUJCNzhlcStnbTF6WCs3OXRpdHpzM2RMMThSZjlaQkFQWkpMWDhHd2pKbVpHWVp6cHRCenNnTDBZT1BDN3pJWEJuaXpPdXRWWXQ5ejJ6YnRpVUNoWVpDTXpNd0Z5aWhKRGVGQzlZMkNzVm1MR1gwWXhGRzliRzN3WnRGN0lQWUZPVjJ4TnFZTEVLVy9UZWVtYVQyb0tGNVdkbjZ0U0VIZHVlV1lyS3U1V1ZxR3Z2NHF1VFgrK2xkcjFsbFBSaytNSW5GVFNXYk9LTXowWCsvMUFPeDZWMmJ4TWRCaUExVGtCbVFWVVFCOEFXZTdVcVhWQ01CajNFNFliZVZBMElBendESDcyOWRKTXZYK0M5UTBpUXVKR1Z2VTh0N2FwdkUyY1ZLUmJjbHNVOXBKQXpkOXZXV3A0dVdIdm1IT083c2d1OUZHb1V0RHRma3dYWWk3bEZrazNkWVRqWVo4dUh5d0xuZFRwdStmb0VTQm5WV3ZhbFlidURNbjBVM2k5NWtBemJjdzlmWCtIeTlEZFpTNlNCL3lTa21hNU5xWUM4VDZPaE5uYW0wTlNDUm5wZ2h4eStQVUpQUUg3Nk5Dc0pTOVdaYTc3eGRaWlpPQnNMRExBTGduWm5mbHNvUXpYYnZOSCtGdVZXZnRTNmxCM1BKd2ViSGV1QTRyRjdXNS84dDhqdVJneG82TjBIbloydm4rU1JaY0xaWE9MNUtkNFBMRGZ0RHFGeVlSRXpVbnMwTEM2SnJxSkw3UWxsZzRuanpiRG8rQmlrRUg3NG9iT3p6TGN5cVdmL2dERXhaajhTTTNocDBZN2dyL2F3UExNV3pGNVFCa3ExQXEvbno2TnlEc1BKNnBGbmlVNmFRK3JLU1Jpb2RyNTFXZ1g1Q0xkTHpBa2dZaDcxOS9kS29kejVYL3pDazA5ZTNUbWhLUWQwV3dweW5EK3NnY2hSeEV5SElRVUVRVEg0UHpJdWZoZ0F0MzFLaDdKbUZzWTlzL2tGRGdHL3ZRV1E3RUU2cDlTdkpsNWtNU0JrZVpCbUQ3Vkt1QjNWSTh6b1JTbHQvMHJRa0llSFlIWnM1ODZENUtDU2k1REkxMUVDNFZPQmtiSzJOQ2lUM1dTd1R0bWg1cXNJTWxQZ0RvU2k5czZkNVZzSjRQTHUwRkVaU3ZEaHJZMVhjbWxDRHVvYTlpSkk4M09WYUdsV0YwSkRTeFlCYWlqbFFYaU52ZjJRWWN1NEV1VzdUMUZEN2VaYW1pN3BzdnNnZkhKZnZ5L3l2VlNId0laWlI3SVU2ZzgzOWltQnd0MmhubWlFdnMydFZUQ1I2TmhSN0phdk9EUThwc3M2MGpiRUEveERWejYreTB3RnV5YnAveGlnYnBpblV0bDhuVWlmN0pnaHV6Wkd1aUIyREFxYWpKTFhXWk5oL2tab1BnMnR5bDZrY1pjd2k2dnAveFlQSWFEUjY3Qjdqd0YxU3BVcG5DRXdOS00rKy84Y3NzSU5kRWRGUGxybVpzbmg2NE1TZFVrWk5LZkNPS3lJUS9HbGpYaDJRVmRINmM1bFNYT05ZQzJoQmQ4OWlyTml5OElGZTNrMmVnNlFreEhEZ201Mm5PcXVnT3EyNlRYMDk5K2UyWWdmbnVCcDBhbCtIMVhQQVlITzRQNWI1TWhPSlNZV2puaFJnU3paOWN3bmIzQWtPTTdNT1g1Q1MwYld6UTFQVTF0YTFRVlljUGR4R0x1UDN2akprNVVZcjZsL0lObzZmcys1OUZOR09Gek9PcHNCeTBsRG9tVkJTVi9qZmhsa2xSY3ZyNEI2ZUNPWDd3VFVkNkxDZml4clBOVnVSRzlOVG9MNlVBaE5xMnZJdzhsK2o0Ky91OFhOSlh0a1JNQ0tmR3pyeitDWmF4YmF1MXd4clJpVVZ3Q3VQeWpMdnprdHFsOXdjZjdVSzJhb2hhT0hteG1aQW1tekM3TllUYXJ0aGpobzJFR3Z0cmdqN0tmQSttTHlueVN5UHA3OHhZN1U3UzA2Y2t1UUNwMlgrOGxWOFBFSkpmTG5rNERQUGlYUm1nU2dWTlpoUnFLUFgraVp0N1hkcUs0N280QzlLeDhOTU1NUHJ4UUUwN21TKzB5WjNVdFFkSGpSQ1lrVVl6MlhsR2RORzVkMVd0Z2dKOGFBTDZySUVVaGYrQVcrT1JZcUppVi9lWDNEc2d3a3BDazhvZ1N5YUJ2SUd0TXFQSFZwNHhBWkJQZkorSVN0M2ptZVUyL1ZOeFBEaHVuUnBkUEhmZHdlTm5pSDJpZzAwOG9JSXpyeGpodGJQdUhwK1V1ZExPdDEvSEsxMm05QktKZzNRdElPRU1IYU9GUzdLVHZWVGNmeVZETXdYNmpYekZiTzBKcGJpWFhuVk1SaURhSHlsTit2NlNBRmFIOEpkajNOa2Fla1IxczRCVDI3K01ML1JYOEtqeDRNZzRucWRlSmllSHNjd0pGZ0F2QkVUWXBLVWFHUHRFem9WOHpmMjdyMW91NzRZRjJUQncwK3dWWHlvbCsrUFllbUViaTB6Ry96eTJ3UlBGYmZWdmpkWVRKRUVKRzhyMzdIeWFxbTQvUHlHZlN3UmRveFBnc2ZwMDhRajVhUXdJNXhXOE1lajNhRUJoayt6V1hYVmpZUDdRTkdUbm03S281MmEvaWZlZ2xQb1hQY0xwaVdZYU9qU0R4S1VidnJqemN1U1pYZ3JJNU50WElZNm45eU4xWWpUajRobkIxMEFZTHFiakdmQVptVVVQMjBlRXNiODd5b2Uxb1c4ZVYyZk5xaTZDWUsvck1HdDFNU1FVRUM2cTVOWllWUXE1WmNGUTF1d2twQ1dpVTV5MXNxcUorYlRsREFjUzBFamhkcTNSTGhXdU1CaUhBb3Jqa2ZIK28wMU84a1VWeFBLalV0RHNwcTArcVFXOG8rTzRMYzREME5wc21hbUpkUHc5S09sUldabTA3ODRIRHRPY0JBN3BFY1hVSkpqWjNGT0hoZXJEQTUreEQreVFMR0F4eWNtYmlvem9KcStaZ29JeFVtMzVveW5XUjNYMjdYM3NMZnZjNjdlem1aVE5nOTB0NkJBeG9hdFZ1NzR2bUxYWEtnU3BjUDdkS2NmMkRvaFgwZml4a2dSalR5OVRIaC9PN0NCbVZZSGRDdHNHQ2J2NXJoK1pmancvSnhTL2IwSmcvZXI1WWdDMTNRZEtUNlhBWTNFYmhLTThwVFMrUjFnUWVQeTBNYm1XTjVyc3JFdHpYbmRMeGtlcTNEdXhaRE9ObUF4OFdSRVJsb1lpZ2tXYjA2cDFPNWgrTS93ZklOSW1TRWhoSkV1S0ZibWxZVTBReFVvY0VvMTQxbk9ZTmh6UWViSjRORUZBVGhHTWI2ZDl1QWRyTmRoaWk5cVF5Qk9qMWdCY2NyQTJxcGdKZVAvWXI0N0hONEtoMDRQK2VZV0pIZ3U3ckVqM0tHWDVRV3ZUNEk1SW03WVYzRitod1Urdm5YWS81dE9KNTdLc1pSTCtqWHpDeXRhdXEvekZ3M2RrZHhNNU81NjY1bFhPUnl5M0VaNnRYejhza3I4NUpkbE4xWmJvRU4rNThJbU42ekl4NDY0L3dzVlhCeHFxejIzUnUvZlBLT3JIQjRPWFAvRlVRdUFpOXYwcGdlYjhQOSs3TTlmZjN1WXpmdjdJQTBwcmlyWHJzWm1Kc0JoS3pwbCtubFNncmExZ1ZKdjZRRTBGUktIaDNRU013TlNVRXlKU3FyczFsa0lwcnVrRDhnK0g5T28zbGRvY3pSOXZsOUhlOUlsbGxOMEY4dU9MdzFsQ0ljNmRadWovWUpXcC8yYUV4VFJvazZxM1QxUnQyMUlscXBVNTNUbU5OckJHbndjUDJBYzVKMnFKMEFsQTFYR2V0b0JwcXV4dXh0WXRkUC9DMmk5ZDlWdk1ZbkxBZlpyNzZENzFwSW1mdUNEVjArdUVJaHFkcEV1YUFHUDZ3ai9WRitPSmhucjFkQjFGbE9NbXlWZDNSamxOMGF1M2pZM1VWejB4cW5ZNDN2UUc3L2YrV2NNSThzU3VPL3A3ajR5aW13TXRnOUR4QTRmMENWZVNtQWRZKzNLc3dSV1NwaElFSGZvNFBhc29jU2RWdFd6c2dRZ2VZeGRIekZKM2FjRkZXK2VlUFBGeUxKVS9ZVjlBWXE5YWlCeFR1RndSa0NiYmw1TUdJRGxYdVRPU2taem1id0gxZWU4TlBBcnd4TC9wZ2ExN3JsZ2JGQ3grWlBpOHdMa2NFSGozN25ibUZVVHNMOEpyMFAyQjBhRlB4YnNIUTFsa3ROOU16cW5ZV2RnT2t5WGRqVjZkZVFVS0pPUmJrR3hCdHpQckxPdFc1T3BBU2tYT0lPR3RmRzV6UmIxbzV0cXFuRmxvR3ZvbU1mZVIySWRtQ1lWTmM2VXY0SjRISzc1dmRwN2xPSmNlRHptK3RoSHI1RC9mSWp4RStva25TU2NBYXJlZ3QrUWNwL1ZrVGQ2OEJMRkF4MG9JZmlZbTg3aWEwTTBMdGc1OEUxck54Q09PT0drUjd6SzY4Z2g5V3BMQ0l5YS9MZEtlNm1yVjBYbzVwSTJnOUplaDFEUHlhUWdwTXFTT1VPSGM2WlV0aDdmNnN6TldEUEE3TzU1WkNuSFdWT3IyNFIzWlh1WHROeDRna2lmWW1VMHo0QU05TnNiTzNsWFFyb2RseEFKNy9vdXpOV1BPK2xuM0F6QU14b2pxKzdpOWNVTTF4NW4zT2hIRm1WTVdiQ3hadjk2Qnpza1JSV2wzYnVaQ0M3eGhDbVJDL0U5NUNzNVlJcE5ITzl6a2gxa3EydTF1akZ3cklzK0hLZDd3eUlIeGVaVzFTVTNneHc1QTFGY3NtbUppR3RTdDhBWGh6K2R6dFJRbDV4NUxUQzVnWG84YnZTNGpiUTR6d2JJQlE0YzdEcTBOTmo5RzhHV3dqck1FMEhocWhFaHE1cXRJYmYyaTJDVkxWc09xMHIxQ1MzSThlemc3Tk1MMkFReDJicjFveEZKK2o4bGNKL0FNYkFwK2lhREZTVm0yTFUxOWZvNUFLSTk2TmlROWdqSitZTTQxZFd1UnprY3krdkIrQVZJcmxMTkp2cXBTdXdDdHZ1MXVrOXpVTTlES3VZaXRQeVFnYW9IVm04b2xsTk9RcWg2c3IzVjU2Z2dzL1lSZnRmaThId2lyYjRhc3ZqR2tiV2dveTZrS2xUekc2YU9ROFlmSGN2ZDBBZlk2emExNEZFRzBMTmQwRnkrYStSUXpQK08yVzdiV1dOc21oZTRKSlNQY08zdkZxZjUrbGRqbUxCc1ltWmpmNE1CNU9VVmhXVDlnWmNTemFxUVJqbUFiNk1VMEp1VHpsY3NUbXd4N1Azc2RpemIxYzErV3ZqM045eGUrL0M4dzlDa01MSDhQODRyUlBZN0RleUhsZlVndW1ZRi8xYmluNFQvelQraGVkazFTY0gyRDUwQ3N0aXRESXJ6c0pWY0ZpVGhxZi9WU1ZmSHRKSkJPOHphdHpUbU1EM0RwTGNmYjU0WjdhVFFpY0VqeW5oU2NJd3JDbWRVeXRZZG90czNkeHBRZnFDbHFzY3lRMXJCUU5iRW1lSkJ5RDh0S1VKM2RoalJsVHZvQm1tWUc4SVhSWERHZllMZjhtdHp5Y1dqOVAvTm5hSHgxemRudmxSc0t2Z0M2dVhXWHJuQmR0VGlsYlprWHhXL254NHg1ZkNvb1JMNlkzYmIydWJSY1pPZ2VlRmRVZS9WdjBmNkVTaUNacVpudnRDdFBmME1mR1phT1k5NTRYdmNmN0lNK1hwandpMmdna2FLeE1SMXhiMXpiWG5iTFh1Rm56bUQ0Z3lOVk14dk0rTnloM0lyN3VXV0kxRk5JSjJBdHprb0hQNzA1VUJTQlVrTDRJNGJNc1dTV2VuZTNIbGtWRjlxSXAzUVphQTEyeTFtbjFwbWRhQnFPbHU4NG5WbzIvVnpVY1ZCaDFsSDhhMWoxSGFOTDVFTGFnZE1CMy9LbFhHYks1MDJzTlRkcWZabjY4STJpZm56UzI3Y0xzcWxBMW0vMXo3Q2JiUk10Mldkb3N3c3JMSFBDd0JUVVZYVHB2THdOMlhndW42OG10ZmFDMWpiR0hUb0NQRkpaRlNaUy9ENkpWYjVCSkkvcnZhMUNsVzVhU1hla0M1Z21sSEQzaisrTHFST2lrNlRRSHFyd2s1enpWNk1OV3VsajNta24vMGJCRXZyekhKTjRsVlVDT3ljZTVNRlNnT0pUanIxb21ScURlYzJpYzJ0UWd6VEduUkl2SWQ0V0RtK1pWaU5OeHdTRjh2NDRaN2xwb2pvUnZSb0tNcnVISnorMFNkUXRhK1JPTGF3MkFPbEEzV0xQOXNyamtqbCtsSDZqL09IYWw1R3k1M2RDeEE5azVyTEJ0cG85U3U3MHZuUEYwQ0IrRWdXbEdKQlErQm9EMXJVZ0ZxekNpdFdhT1dWTnhUd0RBQWJ3M0x5dTVkWWZwNStnRFc2OGVJNng1MHdiUW4vdHNKZldvem1EeE55VUgxejJXZUpBVHdxSm5yRmI2OUFaT0R5K1pQOGtuQjFNYnJaUFRvUTF4TEpNdFIyUnNOTGlwSm9pNlA0Z0QrRG1FTC8wZXBVS05xcHUyY2tuUmtBWmh1V0RjYjlTTm1jdXFQME11UjBOQ1FhbjJpQ0FNV0tOVEQrdGR6eE9PZ3dhZHlYWVNESlhjajE4RlE4UXE3Rm5yazZ3dmFLTkd6Z1FvY2VBREczR0dCRFFIRTJycFU4dm9lOTE3T3lteVhJcXNOcnZSN2EzWEo4aGhtbnR2NzNRTlp0T1hTVmdXbGNZYUg3enoySTJLazFCNk10T3JNZzdZOW5lMlFGYllQWU5oZGxnSGtyczlOZGQyKzFOaWJkL2wvV25ZSmdoRVowV2VublAyaEh4RWFPcWg3STd4WWdONXdMVWpLTWtTSGc0dkJILzhiZ1dkR0VqTVovU0F2Tm1Oa1FZU1M1cUIxZDB1VVo4TXllZS9HSHFYclpjVjBlU2RaamxaZzExclFycmNkZkpLaUQyTi9HaVMxWUtLQUdjbzVNdjZLSHpYMEpUWEl3WkNLN3JyMzB2NnlpaERyeXoyZVZVVnZXTnhPQW53dWxNbVozMWFuOGN3YllkTEc4RDhlMWd4NUtGU2FqdUVpK2Iyc2tDZVZtaC9yR1Joc3lNWFNQWWtLemFDSzBkSGV4L1o5aUhScjFLYU9XL3EyeWdaUENaQnVHa3dmZ3FWQ2VrOGlzTmNTMFZsT0I1QitIdjJtUnoveDZNbWU4RDBwUTBINkJXZFFHcTVoOEdicWhQRHVaMzlYU01sTklKaXlEQzdVM3M2OGkxd204VFQzb25HY2cwZXNkY0xHVldjL2tuRFM1eHh0SzNJblFsNU1RNzBSbFVKdW1wN2FvZFQzNnB5Zk1EZjJxV2VWZTlRcWtycTRzNzRPV0VJN1BSMVhpTTBoeXhuUmRhSHFaQzkrcVl4cmVtc280eEF1aU04bHBhSXBxQURPRU1zOWdYOVVIU0tRQkMzQUdJaVhIMHd3NXQwellnNkx1amZ6WjhnczJBM20yRWpGcnV3dFdiSzNCdkowL240THpVTDhlTWNJTWp0ZGVUVnM4Nkx5Y2YxUlUyV0Zmd0daZTFOdmNEMlZlTjVIQmQ5ZExtRzY2L1Uvd2tKMVJQclIrU29peDBLaVJWTlJYRW1UVnRYUDQwcGFvUDdXTHJYYWhOYldlb1ZZeXg2dTc3cTZsQ3pmVWlBVVRUNnJHdUh3OTN4T3hkRDRTSzVSWGdrSmt4RUlVWldNdlNNWVZXdEFBSXNoT1NsUVJDcFVmWHpaeVpkL0RjNWdBTnBCdnpISTM4aytYeTJVWlV4aUdqcXFDS2FaT01nK3RnMUxJUE5NSlI1SU0yYWxWYjh2YVpZUGVObC8veWlzRVJrVUt6MWxURlZMUkNSUDQyTWVXL0hCb0Q0SnlLUWdzYndoZXVTK2pmVG5aMmJzQUJyVDN0U09EUkpxNVhhNk5ZUEIwMENYVldSNlc3NFR3dlRyaE5JQ29DYm44bkpwWVp2dlNBeWkydWdneUJEbVVBeTQ5SW9YZ096SkM1RU5HNS9Md2RNeDVqcVpUVlIrZmJGWlFNdVJMcXQ3Y1JuWkFBNnE1MU8rR2hTaDRGM0o4bW50bkpHK3ZRNjVNem5jM25lbmNYRGtNeWFLZml4ZjJSSjBWK2hwSHMrTGVLSkJ6a2dPMENEWHhydXdRU0lGblp6UmxiZTZBVUVvcVNBT3djVUFadjJFeWtCclNFSjFTbU44aWZNa2NPMEZuSTNheDBoaTZhem9rRHFjL0NWMkRMUC9RSkE3Y2V5MmJQMDg5ZjBRaGRxdjRWRTJZNmRMRDRRd1ZiNCtuZGVwY3puNEZNbE9OOG9QL3hKQlZDa2JSdHQ4d1h2bnVRZXdIamVvVFI2QVRYRzdEUDlPQ1dOVklDM3JkcUM2TE84czdpK1NBRnRZc2tiUHd5RWtoQ0NwODBiWmk0WmdBdjFXV0hITUdqa1o5bzRlU3lMOEtXb1Y0Z0cxelVRMUk1MmhBSG9YZy9lbWFhY0Z2bk1DdHI4aEdsQi9ZTmhqcExTdmRjSmcwOENJN0RoUUZPeFhEb2h6TjNNMElQdVZLMGdhR3VGSmtuVDRjQjB0Qk9oc0g0NDBhRzVqZ2oxbC9Vd0c1VHNaOEh6cXJxUGFoNC9lanJCcisra2FjWk5xR1pkakZ6OTBBUXFNUzVCY201SWtkWDdMK0F4YkpLRnZDQ05sK3F0Zmhna05pa2VhZXdCNVRpVXdHR1F4OE40aElBejZBaGFOU1JJZzlUcElsTWVLcUJ3TlViQTd3dmR2bGoyWEpHY0hSRnJCeUUrZjVKWk5wYzFQZkJYQS9KSnJ3YVdSWXAvYnF0bHozdk1VYjI3UHFXNlFyVElneHY0dkFnWUpQR2Q0TmRZYTlLRzJPc0JQU29kWmZCZ01ad205VlJyTW43U1VPMk96c0lyaU5iY01lSmtQTi9IUGxIMGNKdEJGZ3NPUkVzeHIvVUxEaEhCbEZkWjdKNzRFMkk5RWlrQUF1SGJWZ29KSWtKVDMzUUhIbjNpcFcwYy9UNnJ0OU5pOFdCK0xLL05zdW1TbEJqUTJLUDJnaDJpK1BwZTNna0FqdXdSeGtEUUlQQ05hUWFQalZ2bS85QXJ0L3J6amg1MGR6VytSV0VyOVluVkh0bkFhL1ZtZEhXaXV6UVMrQ0JSMXdudENvNEl5SFhxbnFWYkhTekYvNjNKc2U0QWR2eG1ZeUpKTUxRUlpYcXpOY2laYVN6SzFUNzAyZit4VG1nQzNvKzNFTHJRZVE3OEhzUkg1VU9hWHJGdDc4N3l2aEFCQktBTHptSm9yNFl1cGpLVzlxay9xQkZqSFlwZGdjaXhWTlFmZFVneWpFY3RiUzVZRVJkQ2hRMm5waVZoclF6Y3JSOEZ6cStTUG0remJoZktCRnlDRHErQTg0b21jOHR0VHFZRk1CODRMa0lxcUtGUmtibG9pd1hvdjJOUDdmNDRCYlVZQ0VuVmxmdjZlQ3E1bXcyTEF6bXE0eEc3Zzh3WE9UdG1HbW55NDdHcGh0VzV6QmVUU3JOWUJ5aW9qZmNmdmtmSkRESlZueC9YTWhneGhCcXhEUmtFVWg2WjI5UWc0d1pCUGkvMDdtTEdoTldnanJ4YWxNZEtsRFRFSTQvMnZFek5vZVMrUDNCQnkvV2R4Q1hQcSsxZEY2M0huYTlJL1Q1K2ZoTjB0Sm44bzkvSTBBZ0Y4NFVDTXJPVG5uQU5vS05nVkNLeHVHU1BPUFdwcGl0VVlab0swaWY4clFlK2RYZ214cmcvK3JJUFFLSWF5RVBCeHQ5YkN4NjlyZ09CaE0wMTR0c3VxUmczZEJhaHc1dkxid3B6WW9oSzI0WHAvSHdEbWQ0ZGh3UEhUT2xvTS94YlhkTGhYVDFJaFVNcjhoMWhnRFByQU13R3U0RGxZOWJmN0E2djBQb1BvSkhuWTJibXlkSUFJbGFxbTNQNXVHVk45V0pJdC9Nbkd4NzZuc0piSm1YbDMvWFJBNUVEaWVhVktnMHZMZlpKbVh3L1AxVUMzVFlaNHRreWU5bThNR1NaY0VjT1MwN0dWOVA0Vnc3QW5VNHo2dFFXTWp6L1JQWDdCVkhiU3c5N1IwOTlZbzVqVzcrZEZ0T3hTbVNTeW5jOEpwSjl3dXZUS1FhYXpHMFM0MkNjenFkRmtDdk9BMzBUcldFcEVhZ0Z6aHhiNW5KMTMwclkrcjhmWGhxZWkxRzdRc1R3ek1UUXJKNjA4ZFplUWkvYjhYTmc5RmlzQk9Lc2JDWGpsSE9kVDFySFlua09wUngvWW1vN1R5bGtzN3AvSjJ6VDJucHVtNXBIRE1ja29lQ040S1ZhaDk0RTJhajlvRkNvUDA1OFk1OUxDTWRicS9ETTRFb1FwaHlhMHhuTGhDVit3OVdBY2N1MUxiNGlVN1BMOFJXQTcxMTVYd3B3Q1NHbHN0eGFRckFidDF2Q3ZzY25ZTXhmZkJjVytLT1F3WlZlcThLZFAyMWY4aEhiUkJCK1JNaFdYaDNQem56ejVWOGs5aXJwZ3lrbVVEL3p4OUwrUklYZ1QwcS8vVVRaY2R0MDhBTERLVHI0bnhTeTNVZHFZR29tRXM0bHJoWURqazJjcmdVaVMwREM0eElhZ1JDeUYzLzlNdWtoZzVMaUhuelZVbjFMRmdWdmxkeWNVYXVqMU9yNVJ0VFhPQldsczg3SXd6ZGppYlhuQTlzd2VLQmRRR0tsQ3JjKzlTdnVXQ2h4SUhmUUhNVWN5WEx3UFR6T09maTAvanBDTDV3NTZremsyeFVNRkhLRzU0WGhGbE1GdDNvS0NFUVpHSjhnZ0VGVlBpZEV3ZUVoczVqMWFPZFdCNnZwazRvUmhvalJnUzVCR0xEa1JOYktRNnNlQXFVN0JkVUdqL0sxNlducjNiM082b2JRTW1DcGZNcmhWeklvWUR5VTZHSlprMjNWNjZpNUJZTHlSSlo4S2Y5cXRLRVgvZkVrY2VCYjlOa2FKWjdSbzZ4cGRuTGVYWkhyWHZJNjUrSWlESXFhSDh1TjZaSUUySUVlQUFJelN4MWV2OEx4VVJPRVFJWnBUU1ZJYWFud2k4c202V3lHaU1rblVtS1ZLZmhDaDR2OEdmQW90a0FidVVVKytXM1pxa0F0MVlvb0RMQ3VlcGJzV2oyNndCY0FUVFBaSERMNWMveG5DbEluVzhjdlNYcmYrOThndXpTWWovZEtLZTlvbXR6bkFVOWt2VCtkYUdIbEhxdzVYUXgxZm9BcjdvVG5ISmczTkdhUEVURU93TEk2Q3lFMlQrRDlkUVJHSHgxZldUT2MvZGZpQmNCQWNtUXVDWGNNMi8zT0V6UmpQcXVOa0VlaXNFVnBRREtUOHJRREh2Q01mK3pJNUk3M3FNc0hpMDNCcnJVYVI5dWRxQkxBVFBtc2xBTWlrcHQwMzR2SFpnRHMxTm01TDl1SjcyT0tDYWtsRHl1NFMydGxYQXI5aFJFVHlLSS9JcG4ybGZ4bjZ3cjdVSGFid0FZUDM5VjR3dnVYbXhGQ1Z1bGI5MVhVdnoyVmxLZzNjUnBua2pLOVpJbW11UWUzZXdsZkdXZWFOa2NFOVVxUWsxS3ZxVksvZmMvM045WnY0bStOd3pVWG1DUEV1bUpkeUtVU2VaOGNMUmlNa241T0lvMkhjWkVYY3FVM1I2TVJZb3d1WGg2QjNXYUl2Ty9uWVM5S1NEb2paMUQxNVVTK3ppdlRaRHc3UFErc3JOckVyalZxMXVLMDZzZENIVzFuNmFuZjZSVk5YbTRaQ2FxT0FsbmtHU1NpdVB5b0t1WUlTVGFSOWF5K2RSNlJvM0tiNHlWRklJbmc0VnczWDk5ZjFRRDJWRG1kR2dZR2Yya1N0YjlMZy9Dd3pYdW1RSzlIa0Zac1hTVUgvTVUxSzJ2QjFRSlFiZDN2aVJ5aytTT3pRT3FZRGZ3cDRnemlGeW1tVFMvcTArUFViRTZONzBEVkk2U0s0QmgwdVBKZlZ3bkhMdWJ5K0lwdTBqdFdJZ0lsaUJGOU0rcnBncS9QQnZPN1BXRHFjNVlVWm5YcG5IZEp5N3Z5SDRlSFBBOFdoUTgwUjdyd3lBNHZlUm5ZTkhCcU9nWWdDbE9QQnBHSEVvZU4yWUs3MHh5VkdVaEh4dUJRc1EvZHpZQzFzVjZQSlo1a0ozS2orQ2kzVk55aWFZZlVLNU1ML05tbjh0NXZndEg0R2V6Q29PNEJXcVVLeFFZOVI0eHAxMXpTK1hoQTdRZkpVR1BGVFNaWVhJQWxYQjNzcGlQbk9yMFc0UGRIRzNzNmtvOXE1RW9rbXc0aStUcU92TUQ1SmJWR1dtS2hyNjNKYXM5SW5ZaHUvRlh4b0hXQ3AzdGlmKzl5cEtNZXUvMHhreTYzTHBCNnN1SW8vMVg2T3JwYWE1VHRMUGQ1d0dWcEN6bnR5S0FVdzBjeEV3aVQ5aXVwMHFhOFFMOVlNZFpZdm82WG9wRHVNMm9LSjlRVGlIRU9uRFhWdEplT0RPNi90aEtyclJwL2RDWDdEQzE0RVNHZW0xOTk5Vnp5ZjRqWlUwOW0rejVLVSt2N2tQTklkSjI4U1o0dWZtMnZxVXduZlpBZ0FVTWJxRFU2QklNeTcrN240ZlBKaVBZbE5tYWRSYVh1YjgvclBQK05mTWFGbXpmemFRbWdmb2pCR0tIa3NsY0M0b3dBTkxJU1R4N210dnRpOG9Tc1h2NWthUy9pSkREbEZ3SGtGUEZGRllrY1ErdytYWUlZQUk2WXdURjg0My9OWUNoVy85RDZkTkRHaE4ybTN6eDJjVm9jMllLZFhvU1NQRWUvOFU3ZG1wZ3hZMDhqQkgwMlBuN1REYkw4MGNXQnlxSWhxUXRzcWt4bDRuOGlyWWIydVJxNlRPU0FVOWVzMldLNmoyRGYxTVI3clJRM21DTW5xSG95VVcwaWxJek9mT3pOY0tjYU5pUUF0Qy9BZXZqMUxQK0Z6M29KdWQ3V0w3UjB4di9hYWVGR0J5V0E2K1N6bWZCVklSam1sdGJzYVlibUFEcE5VVVNTQ254RUtjVFB3OHRybThjY2ZIWmd0MzlzYUV1WjYzb3JwUjhXQjA4QUdpcjJyVE9BM3ZWV3R2Ry9wOWRXYUdpUVZqUWtGQ2o5WmJJYUhOOUF4NnlHT3pkdEova3A4RUE3Zm9LK3lmbFhGdS9PTmZCZHBmVUJMa3JiUU5hQjljanlBMXNRdXd4SUZtaVp0TGV0aTVQUW16b0Z2ekZObVg3TTZIQVoyalBkVGIrbnV3YkYvQUZCL25OUHRZOEFqOFJYM1MwdC9xM0piRVNNT0ZBU05RcUlqcFNUSGdLUEdPalRYcis2bGxqQkFBbVQwVnBwWVZHQTkvMFNGYlFYRlRQQ2dScmpMczhFU0VWbWpDRkd1SjQ3dzMwUzdFT3YxenpaM0tSWUdtWUw0Q3VsU1M1cVlBSUJGNlJjU25VUDJnNlpMRVAySmZkQStCZUtZdU5TNEJiNHAvc0dlVWFhZjIrZ1JTSUkwamo3dGhuMXdjVU9LV1cvREVtYWlueGRzenV5NEw3M0p2WnhUM0lqaEJSVW5OVXdiL3BTaGJqVTV6ckxDUk5LeWtVK0JCYWt3SzE4UWttVjk3VzlGck83OGpFVDJ4aUhjZFNDV0pTc1NFU0N5OUN0SVZJSHNJZHlOYUZ4WVJkckp0akxxR3JpL3gwdTdXZ0tyQWxHUXhqWGoyR0x5ZGM5YW5CRllTZm0waEJXbHBDelJ4dElmNURocE5OWmEyQlZsNE1tK1ErZzlVQ1FZV296S0NCWDNsU2VQWTlEZzRTZEdzR01GWUZ1Z2J5a3ArR0pGSXB4TjdZKys1a2RvMXZpeUdGR0NpZVk2Z25GTFN5eVZ6YWZsamF5S2NjTHRQY1dTaE9NaC9iQWh2MmQwKzJ4djl4QkhKSkM2SXBVVEJ0aTVJTUJGc0lkS2dHL2M1ZTh2ZFdUbEx2WDRDdHVNOE9nd0Y4VjByak5nSzJONVdZd3c3SmNSZmpPRmNlVFZ1R2dTNUNLU1dQU051RHRvUTJZMVdQSzNIVlYwdXRUeWllVlQyVUVhRmhqajJSa2w0aWV5dkVLWm1QQ1N2UDUwK1JmRFRFdW1xY3hnM081cDRZcEJTVFhTaTQ4NC9uUzhsbE9obWFSaFdFZGx6VDBnYS9wZG5ITFBhUlFKckc0RW1KNnFSN3g4TFAzN1pFUmlqRlU1N1llMWxXMnRHZlhRVG5UbjZPM0Z1cXYzQkU2K3hlM3BNVW4rdTFMb2prN0VZUlI1TVFzdWRkZUk4cTRxaDNpTlF6RlV6NVhRMmo1T1NQTzB1UjRNL0FUdUp0R2JVb3I3UjRhSzNuSXIrRHpzVjQ4R2RxaUsvbjQvUGxHd3lZMzJUTmR5QTFjMnM3UER1eld3YlozZ2tQc013TytTT0NIYVZHaGUrbVdNelpoS2FQcUp0a25zY1lVeGo0bkhhalJzVXRxc0VuQkZDQlhrckxJN1NwQmpiNk1pbXpSVUJLNkdhYk1FQTFybnl3emp1VENPbEV0dGpsZWlvSDd6dXNXcFdTK292NjFQMFhWRUJqeWNSdlUyRUtXYnpLNUo3UWhPRm16TFg3NW1Ga0toSzJ1S2dvMmE0WUVaZ3F4ZG9CeTFtcElPV1VpR043cWE4dFc5RnlhU256K3dHMHp6bDliTjR1Ym42aytlY01aeEJyaFhQOHRKbWp2RXNrZmVsWWZFOGxPaGhTaDlZbzQvaE9kTEtIRzlrS1lEQlY5QzdmSU9UTE43QklGNDI2YVZ4OVZnSjNlbUNzSFNNY0NzUzRHRUpPTGFnSEhzbVp4MXFpWEdmRDlUNk1SVCtqUFdGNTRTeW1kZjVlK016Q3ZQRGV3YW1uUjVCakczN1pPNG5oazdBL0cyNjNiWWxxdXBSMURxMW4ySUNvRUtzeE43cVlnd3hTRkMwa09iMWxNYmV5Mjc3ZzRoamEyMWlTaTc0ZHljUkxGMkZnb0twWlA4Wkh4elowYnFwa0xYMHk1cXNEMHFLeUlDSjhQNkJ4bGxuQkJNTmRuVUhhUUJKYlAyMEd5anpIbytwS1ZrNHF2TU14TldiMXZFK1UydCs3ajk2V3czUWtKMjlXK2VNMnFDNEZydTc3YjdNbEloaTdpQnUyOCtRVEFWTnhsMFdscHFqTktLNVBsTkZaSmRyQ2lEWTJ1SjgxQ0YzMjJkdFp0Wkh1R05Gd3Y4VVg4K3N3ZTByQytMeTdhSDFmTGFXNlZjd0ZwZmZUVlo4aFIzR2MvMDhWTWZUUkJkVk5BM2J2VnhYLzkvQVF5eU9kRGV5MjJWZDlPczcrelhuaGlKL0xib1Z6SFF4NVJUS2pvSDlxRk9ubE9ZNStXL0RPSFdiUDRocUc5VWJrQ2Y4YjhOeUxHMGoxVWhzRDh6OWNjN0p4WldoSXJicmY4Z212Y2pyLzhrbDVuTHhjMmZHR2l3SnQxSDJ5WW12Q2tjaG9IR240WnVDNTNDNlh1cGpsOVk0bEpaRi9oaHp0VFY4Q0pIRGUzQS9qUjlOamZBRlAzVlZ5Q0NLdmN6YmpWTFpZc0ZsTVl3SVZLVVIyWlhwYVZoQmNncURqOFZWcnFmZ2xDV1FQdnpyRmtKcG91alBzSDhCVU83K2hCVi8xMlFVaHJ5ZjlGYlZhbXN3V3FsSlNnamM4Z3E1TC8rZVN4NS9kam1iR0hSMmZ5b1FHR2Nnc1hXSVdrYjBmWThyWmlWOWE1dmpmUG1CRlFESE4zZFZEa1p2bnU4dG9JMlhwR0MrdmpyTGVhaHgzZ1FxME5BMGNBVHBWNGkvbUFUL3cvYjUxWHZGVEN0N2p4TGwvOFBwSnVwaVQxN2Q1RVdWWEIwRyt3Z3A4QWFNcHZKSnM4N1RmR1dzRWdGYVExRFZMTGRib09mb0l0U2EzUWEzOUFvTy8xVVdJb0lYU2dOUTEwQWFpcm9QL094bE9vd0hGeHkvRU5NOG5EZ3dpUk9RQUdhQ0p1L3ZtSWFNc1lVUCs1V28xd1dES0UzdE1OcW02aUFqYURuZzdCOEw3SmpDNStKRmI5MnBtd0lpamJ4WEdkQTNVMkFEdkE1a3BQZnhsWloyc3FIbkdqZTQ3MStzTDhlU0RvVHJ0eG1RNVlHZEoxMEQ5WXhRblJHSlUzVjFQbmx6RHpkU29ORkZUYm9XQzl5NGg1Uk5OKytlb2M5RWZab0FWR09OVzZOeVBuMTRmSzF5VFpDbkVOY1MwbXpkTmF6ek5ydkVsWTRYYWk1VWMzcDF4TXhCR0RIT0Q3ZmVEdVU4UlNUcTk4Y1pKSjVXdnVpWXpUNCs0UzNzdWM0bFpGUGhiN04zYVR4TkJkaWRKYnJtdU1EWG80OFcxS2dybllSNnV5dUxWR2J5dmZoR1ZGcVVzdDJ6d0l4REw3U1pQcll1NEZOS25jbmVVMGdiVlNIcldOR2xOMHNialVlVHdPNjU5eGo1dnVpR0N0UVFLMFJpemg2eXRTN0RYOFBmQ2Q4anJwT2Uxd0R2OEF0cmkwNVdaS01HNDlyaWR3OWo3bzJWdkw1UGxIZkk1a0w0SnZybkxZS3dPaktBM1p0cm1jMXg3TU1hRmNMT1lFcmRNTXUzSzJEYk1rRDFjbTk4UEdqVlJGVDQxRDZpUjc4ckQwaUNudHNVd21jSGthR21FOG9nT0xqUzFkeStqUHRCd0dubFZva1B4U1ZrbVJJbEw3NVVOM3hkYmtMQTdjcWVxeHVBa3h3cUN0L3B3Z2I1cEdQYy8rQWdZVzc2NmdjeFFCRVBhTHZtTm5zYmwxbTg1TkVLblIwd09vZGw5V1N2NWJQTmVINWZqT2NwN1RQYktxSlVwdy9uOHY3Q1JERDdYVGVGYzJqeTdpWHVjN0dnc1JFYjYwNWtXSEhPc3V3UGx4alpaYVY5VFJSOXRtR3plbm0xQzBPQjBqL0FoK3Z3MU1VNm96SnNJZ2FwekVrNHlQeEpFZHM3Y2JFOURiaklvUldLY3pseWIwcElhWFBNT1lXVk9sSHNlQUVUS3NOYmg2ekZCV05sVDE1eHpwc1g5aGpwb0Vmb3dKNjZRV1NIRndJcEsxb1FpajExZk9HbGRKWWJIUG9GKzhmY0FjSXpiTUZicUZ2NzB5SFVqNW5wQUEyWUQ1WWViMWk1SGkwRGxzTHZMc3ZBZ1Q5NmJVZlBpcXB4YlI0YzV4cERxc01TNkNhZm9qRjlUMUFVenUvc3U2cTI1ZWVHbU50UmdPdXZrTEl4QmJZaldvNEJ1N0M2OXU4aytvNUJBNkhoMFQxTkpzdHVzS2MwWmdyaGQzaG05NERxSnpONXV5VHVjcCtERUVwVFFrVm9KMzA4UThvUytrc2N4a2hEUHJjZi9IV0JKSVhYb3UvSXV4QVoyL3djNGNUcGVhazJPNklhSFZrK051UzZJUmI5ZjcxYnl5TGVMY0o2bk9xbEZrWDhjRnFTRUhZVzBpTDFLRWN0T0tNR0hPMzJlbUErOElneG1CQmhZNVRpM0UxR3RBZUpiakwvZ0F1VjM1MFFhVlhud0poQ2N2QXA2QnNIV1grd3ZHL3hmaUo2WHptUHJRaGNuRnJtN2Q2KzE5bElTMWxwd2F6WUh5dUgrTXNpQzFOUHFFa09UTlh6WmtJSW9QUDk2dllEWU1MeDNIbUVVY1hwSFczRG1YWmZ3ZmpzV1JoQzRkbnllak15dFVaME1iZ2FmRUtQdGlzT1ZnUFdyRGJjRlJTVklocmN0QTlZTGpmcnhKMGhiTWpVcXp2TU02Y0dwY0prQWFUNGdMT2s2NWZPbU43Qm4yS1NEcWFFZ0ZJb3IzVndrYmtpREhNTk5UTVVQVkc1Qm9aWno4UzFFbXFzSWNURG93cjA2bmNUUTBLTHdsSmRkWDIreHA4c1lCRzJBZGsxcTc3S1JjaVIxeVVrd01kelkyK0F3QURPN0hhMlVDY2toNzJQcHArbUtGWmd2OUFERXYvRGlJbEJ5VFdycnZGQ0NPVUxab0JMLzd6TjBLSDdGRmNWR3llcERqNERMcS9SMWVqbnl1MXV4QXNGcUJydVM4SXB4emRONyt1M3RVWlA1QmUzSUZtUnM0ZjkvTGRJMVIrMGdPSWJzdERSRm1WSlJKSi9qZ3g3dFJYa3FGTEdNK1VnUndsRWZjVjVua1dzMGJaeWJQazZYUkdpYjZ6MmlEa0tUeVIzRjhZTnd2L1ZJSXB6aEhpOW5zWUFTNVhzRnB0OWczSjJOalZMSkhSMUJ2YjFlVFJVMFJUbDVQcXdnZDR5dmo1UTVmR1dtaTNhYU9ZaTNLRFM0anNZQzZWb0lsaVh2NGI4VjFTZU8xVjFRRW9HNlNtNzlyZjJGNndNczhSZHF0aktDWmd5MTdXeE4zV1FrM0NaYndpMFA2ZXVZcEVxRkVtTG5iNG9xTENmM0VqeVR5eVhKdkpadXdFZmhGZC95VCtFN0RnUVkvcCtTUXFaU2lSY1p5d3BkK1dRRTNpVWVnOUo0VmxGSEYxclR2OGdpbTQrTWJ6MzBQYnVtd1N5RVRWcFYwSXQ0WDcrZHdkOXN2dE5SejBRbzhUajJidnFMdXBaWXUrcktYM0JRbXhwdFFuUkVObTI1MDJWcS9yYi9UNHJXN0pxdE0vYVZmR09Vbkt2VitaWjVwaEY1NEN1RjFjOGx4UFczSXFVMldlS0psVXMxZ2l4OWpEd0JKM0JlbXVCUFVRR3pBanpFMmdhOTZGYVJNc2VCTzdTSWFKcit0SnN3cnBtczBRdGdPZHZPU0tMK013U3dNbm5BV0pzb3VLcTlmeDBDUXowRThrTTFRa0RidFNtWjZlMTZhUFhRMEFCb0dkZUp0VXIydnhneDFmbTZEY1F0UzUvMlBxY29NUWVXVWcrbmRwY0R2QmdQM2ZGcHp1MkFPQThONG9zVC91TmJuYU02bnZmbXI2aEpadjRkc1QycHprdU9sbmdma0IzZ2RlUm02enkzby9YcUppcWJzUXk4WVkvU1l3YmVRSXI2aVI3eXQ0TFRyeHJCWG55R0Rib1dCd3VnNVppUXlncWtRMWp3cGZPYnRteG45VVF2YW1NeitZbXQ0cFJob0VGZUlKeWRWTUpCc2NYOVZiM21MWUwzMDlwWGV0UlRjdlc4TEorYmZUckhhZ1Q5SDlTM1hsVlpoZmRydER6Y2xUMlFEQm5Gb2p5RlEzM3BuRnJaZE80L2RkMmgvZVRvWFIrK29CdkFIOEpDTzhlSVhtMWJHcVppczBBc2JIYjByTDVCeWNPNUNCbC9ncHFGOE9YWHdkQ2lEeGE3dWIwRW9TYStDMVI1U3k2Z3FkS3c4QUZLaFhHb3VFVFc3TUNTZUZhR1FRdzU0SFFTZjZpT3drdzVBRkNsMEpXN3VuQk5IelRjNzkyMDhsNW1obFNMam1wT1VyRTlESFl2ZVgySnBxN3JvcURUVVZUWCtxZUwyLzh2NS92SXRJQ1dyMW1sN0YwNGs4VXlSMXp3d0s3UTBLSFZRYXJjbUdGaTVCVm5mTWIvRVZpQkZGcXQxWlQyZVYrK2U1TlBjeVNJa2dQM09OckxYeFJ4c3FybTlaWUM5V1Y3Z1liL0FUd2tzM281SmJzbW50czVvNWJkS21PeFRpaWRCdG5GUWdXN3VTcHVSZE51TllYYW1ZdlIrRTh4WGgyUXFRQXVRNWZsZTEzSHVDM2JXcHErZDVtNWVpQ1BSTFZmZVpVQlpud1RFTHRaajFNNlQ5ZUJsaWcvVTNDWXRocUpMd1NUZUhzekNBMThXNlgwbVh3V1M5YkozdWZtN3g2Sm5LUDVJV2l6SnlCRDRKRWpCbjlyQjZTVVpMTnRQdDB0ZmtaWEI0YThERUpzcmRncjJBc3AvNzBJUnlDekZoOG9XcTd5NWdSUlFIVDRHcmt4Z1F5bXdiRjMxK3hpYVJTYlVwalQ1QTZZUkFycnlKQUZLWGRaY1RFMk5sUHhIRjQ2c2pKdmU0Sm1icVgxTE44K1RBdDR5NlFna1pqOXMvL3daeGU3MWFEaVRsc3Y5OVJrK1B2NkxRcnF0cHNBR2tMR1dsTVh4Tzc1MytPRU50d1lwd3hUNlh1eEpuQVBoZ0I4QTVOdy9tTWxXOS94RTF3dnViWmZTYU9jRGJHdC9uYUlLY3VkaEVqNWxMZ0hjMjJNZkRobTQ4Y2paS24vWVllNDdsL2RST0JrWHd6TElRUHVQbTl0M2U3MmZZVmVjalM3d3NzTWR6VkNzSXNULzVPOTdST1YxL3JkQmVVNGFxZG10TzR3b0NPZThZbkJaTjdYVUQ5TTZsaTE3MU9PcGRYcHp2RC93ZG5pemdyekY1MFBrbU82eFJEUkxzYlBacEdyUk11T0lCaWlHMWtNaUp4US9Rc1JJTXpqVFVvR2xvL09yRlU5TmFwYXhwNEFrckpDVUtqV245QVIyQzFJVnhXRjB3VVNYQTVEZWVCb0UyREF0WHhoK3FnNVA4S1VCSitjT1VWLzlsUDl3bCsycFN4M0ZwWWZwdkxvTmdUSFFBSGdsNU5XbzRtb2ZIVzBTRmkrM0ZDL2R0L21HVlhiSS9UQ0MxbHR0bWhYMm9oV2pHRWkzNC9MV3FXWE1zWDh4aGpicThDWmFodzdZMitZVzVGdmcwU2NHRDBCT3hvNzdGRDF3MWxwQ0RYNE9MYk1aQzRJNldOdUhLblFZNnZIN2plRzJOcnBWcEFZWUJyajVvYzd2cEw4TXB3U2pGYmY3Rm1uOFpwSjBwTWRyN2ozMmF1bXloS1YvM0lLRDI4RUhjV2Nrank1K3R3Y0ZjNkRtZUtMZVpoS0pVNE5JVzVNNHlhc2VHL05QWDNPcTdQbm5USFFiWlRMaDEzS09ReUx1SURWMk0rOXVRa0RtTG1nWithem4zODZkYXB4bUZ2RGZMWXhxbDh1WmUvblJuWU9HMk1PaHBGblRybU45UDVob0IybC9FZmxlT2FUT0JWNms0ekZrR2c3ZkhtczN2OEpIb21DU1QyalNudTg3SnAzTnhldmpRRys3YWxvdEpqcDZvemczU2lPdWw3SDIrRDJwUWJ6RVFlNVpwdG5ZdHNBSTBiaWtybTFURGRYRWZ0TXlhU0RENVRWZklLNENBOTJMeHpCRzlsa2ttSGVuMzUzV29sb3FCeVNGdUcrZHFWZkZENzJlVHVJZWVaWStoK2p3ZVBrK3ExT0RDWlVyZk9FNE94ajBZWmx5MzZVZlFndy93VnVEeVRjQ0ZRM280V0VJODVMeHpxcTUwUEtlb1EyN0s5aEpnR1dsbDNjSDFEbWJaY205U0wzSlV0bXVONCtCMk5HV2VWQzdhRHhrZVlkb2FZcmdlQ0F0RW5XRHFScFFMaW9TK3Z1YmpkczBQV1RvbnhXTHB0b2EzQUpoamQ1TWl1QnBxaFpLQU1qNjl6cmY0WkVqQW0zbHM4ajBrdERDTHF6MXJEd2VOeDF0OHRlazY3ZFRhVXRhQlhQSldEN0VUYmE3Y1NGU1hLd0pTUklzQXkzSmdFR3dQc1FIN0ZnaVplRDMybVpEME9POW1mTXkxRU5ja0NaQTRVQUM5TEVVdEllYzJtQ2QySGcvL1MyQ05XYVhBcVVtY3N1UHdIeDBNdzFmeUt4N29MWk9YVzZXTDY1QjBXci9GVTZ0ZWo2YlBHMnkzRklHQlI2S1NhWkRmOUtmbm0vT3B3d1BRektaZVQvMm9qcnNpT1lXOUR4djR3VTA5ZUtBSTdBMG4velZ5dUxpekpnL2JNdnRsbTRiUFYxZzZBRVpIRGQ4RWkyNm1uRDBmRG80eDMrd1N1Um44c1UwaUdsK2RGaDZubHpmNDMwZlVwdmFaMisrQTdiaGFwZGNTV3h2cWZtWERHRzNuK1VjZDBBZ2l1TmhEcCttNk40dlB5V0txV0ova1VuQ0VrTmR4V3A1bEVSVk03d1MyNllpWHptNG1JWkZ3S0pvNDVFaGhOakZJc2JodTdiRFUyaXd5RklZUG84Z09SMS9OUDhFRFpJelpSUWpIYTJuRFVtL2kxWHVqNzFPb2x6cW0wcWVGY3VaNmZVbFcra0k4VnJEdFU2aHRoQXNKOHVGL2Z1TmRkbGJ0aytBMk9pK0pIaG52QVJIUnRUUFRicHNsYlczY0NuNFAvb2djWkxlaEhXV2FqSW1jU1RpR3JmdEdmekh4OHhkMnBpWjJUQWFSVFVlNWV2RC9FejVYL0NUejhSbU5mZEZiRzAvOXJrUEp2SmJXc1hlK0pMQlBRdTBMQWx6QTVBMWV2aXVwVzNOQ1RyNUVKMU5uQ1BOeEhDTXl0UmN6Z2RxWXNxOXZuVWtqVWltdDNEaVdkNUxOdXg4RXVpMkc2SWYwRFdiNG1uSUZDcW4yU0dBZWUxZEIzR0NFTHBNUllHQisyK0RoT2xkb2xOSHdYVXkvNzNYOHJRWm0vU2wweUdZS05paHh1em4yUlYwbXQvQmh1NWJCc1M0aE5iVGRXV3h3WE15U25ja3p2dDhRbnFhalpBMVdQeEYzbmhRN1JLS01VQTY1Q2dGT0NZKzdoWXdrK2lQbEZIckNjTkd3QVBLanU1YjdkVEN6eWdXeUpzMmpVNTFwbWRCa014T3puYlRNRjlSQzBqNnVFNVB4OGlPcjVxR0dmZXhNTXg1eVNMejdOOUFzOHFlTmFvN3RraFg0QVlmZHZnY0ZleFExYUdxOTMvSGVDcTFIOVRkdENRVDBQbkN5Umx4eUZoTGRIbzFmVXJzVTBXRFBBbldSUHR2MnhhY0FmVVdYV2NZN3ZGYjlUWW9XZVU0dWJzeUhtRUh2Vk81Szg0ZUJ0UWtHa3BpTW5nV3lSclNnREJ6c3FYK0JNajBhMC9sYjBlNExneENqZ3Z6YlUvem9Zc3FoS1VhSGtVMjFLV3dLK2ZDUUIrTXB3bjdkcThYaVh6RlBLRUFPQXVsSDY2bXR1eCtoZ2s0b0ZsRURPWWs5b3FWTUtLYmx0Q25yU1NnbUx2aDhFVC9VaEZTR0ViUE55MlRub0NDeHZld2t1VUVscERjZWdpbCtKK2ZnWGRyYVBZVGVCemMvSmRaZkNwM2JDdTFmVVdSMUQyQjh0RmtvdTdmckI3RUgrWDA2eFYvakxTNEJwQUpjY1ErVTFvSk1GRXRNYjlSdlZNY0ZBWVQ0bjJTYjRPVEg0UityRGRocVBMTk5xTkNsQzUzdDhiYnE4TSs3RkJxUUlnSHNwMTVWNE43WCtxS3pVRlRSUlZhOHBKSEZuWHh6NnNRVnBBZ3pvNnh2WGw1eWhTbndWNDRJbDg5QXBFMHdUcHl0RktjaVZaamFHQTdDb2VZakNIL2xWdGpjckM2WUhpRXlVZmFqVGpEMTJ6aDhnaHJWSjBSRjFqZE01SGp0ZUlhMTh4RzFkQ1ZXZ082NXBZSlVuQ214NW4xaXlLaTVnajU5NVYyRnN3eXVpMis0QmdBMUU5TnhaRk1EeXFFckt5b0JUZ2p1OGpiWThCbDBHT0dRcHdBVnpSNXYzN2JjS2FvN0gveHFiaDVYOGpsaExGK3lIbkQycmVOL3QySDlEVHMzT0Y4TFN2VU4ydG9iL01kcWhpeHMydjBremNlQW9UL1U4MXZtbWg2ZjNMKzhKZDdZZlVncmF5M2U2b0ZGSnBNMysxVWVkY0dkQzh6ZWJOSXd5U0RnZzVMb250blZhRk0xS2FyZG1wa3luc2t4eEtrQmx2VDJjdmk5SW53L0llZDBzUEIvSjkzOGxxczlqRGV0MDVpWi9DMS9pbTBON0lscmVkaXZsVnQ2a0hxemdBbEVTSXV4MTFRRmEyNFZvZW52ZHF0NVhFZndkV1JkYTJUZTBjTnNvOVN1ajBabnZvaXNyZENoOSt6bVJNWnNBK1FuZzNzYVJFRWRZdHpseVdYSHpYTERrVDFEeURjdXJoRzFyRGs1b0F6dFpZWE5QenFWY1BCenV3RlU2akNpTHd5NlFKN25YQ29hSEhNRmN0TFZpQWRtaWpDcXBhdzdFOFRiYlU0NjBnTkZmVTdtTTgxWU10OXlhR1ZFeUlXUWtUeWNxMUpiQTNrUVpMK1ZONnhuc0lKdHVGSjR2RnNJM2xDN1dMZWZ6U0h3cFpPb01PRHFqQ0JOMXRjNEUySHExbC90MW5NS0xSRXZLZnR6aGpnWmRyNHgvTFliRGJxL0ZvUStmUDNTQTZjZGJKTmhDcWl3K2JYS1VBMFBxODhHdkNnSUJ3aXNxbkJuZ2JtNDVtcEVROG1UdzhXeHJtL0pacTgzektaTERQQnovanlaUUtkSG9tTXhnRGJua2pGTlE5UnVUSHlzVklDcVFuYkh4MHpLRFpUSVNFNTQxRkRZOHFYbksyc0NIWEtvd0lWMEFqSHAzdThsTWlqcFl0b0FTZHMxem05MmdxQjVqeWVjMzczUmlnRittVFRnMmdzbkpOcUZya2t3YzBoazlIWFFGdVprdlFjNWhSNWNpMVNKM1VCTW9Zbzl6N0lLWlhycmFKaHJhUGhvWW5mRlR6bU5RV25FQTJYY2N4NEdUMTE2WTFPcFpvTnNnQnRTVlVqSmxDR3V3WWZ5NEFVMXRuWlhFd21SSGprWDhmS1ROSWRkMUhnQkw1Y2hPNVpYdFVTam92cnFGdFhxeHJUUmhMQW9QZVVlRnYwYTE3eVdjTVU1Yy9XL0wrelBlclRJZUJjQ0dkRC9UY3ZNVFBkV1ZKeFdLQ05CaVNUOHgyY1NkUS9pdGZUL1hINDBIRVBkRUF3TE5GMTNOT1NKb1BkMHFvbkhRMjlLVnEwdFQvakFER3BTbkVWbFo2ckhjYVd6ZVEwL0RqOENlbEdRL0lweDNjcSs4dEhaQW8xU2w1SXN5d0hwTnJacW56bWF4dktCOUlsbGFtaHVpWDZKbi9ETnIyQ3k5cE1oNnYxVXdlMi9FUk9ldGxSNUcxakRud3g3TkR4S0xxOGprdTNZUkVFZzQ5YWxiT0JVclB3cU53WEwveUNuZE1oSlJoRnlwQ0ZJdGN1eFFHMmN6eGszRGVydS9JWHBrYWNNWHhnNnBpd3l3OHdiYlg1cnNEanA0QTlIMno2NVo3U0ZQWUgrWXJYOHJ2bVk1WkVNMGQ0Q0tOSHV6WGdzTURqWTdUR2hjNlM1WVFVbWt1QmMvbTI5ZUM0VUdic0R4LzdFWUFkZTV1anNQSnRoSzF4ZkVwb3haaXJHUC9aU1p5TVVGZXU0N3pzWTVnTGhkR0FVSXdXckM5NFo5R3J6dnhqcmxzTWhBRWc5dHNLUElPcjY3N0VWY0NLaHRocndmWDhMMUtpSVI5Ny9VbEZpWTltTEVxV1Baa012WjdvTHB0NFNsVU1aMEJHVVN3cjhwZmVURWVnRVI0K0dWdjkyQ2JvUXN4ZjVLSEFpNXkzcG15NVdaU2JmNjVidFcxVVFyZ1FwbENNaEdkNW9uNEp0dUFkRjhBNkE5RFc5V3RmbEpobGdDdWZzU2xZeWduRXVxQ3prNENPSk13QzlyT1FLbXRYbTJzSEVoZ0ovRklFM3d0MW5RWmtreG9UZzkrZUlUQkVsZjVDUk52a2d2L2JldGdrWWxWZlBJSE91aFBnRGdLKytpemduSExTY2M5YnpTRGpzTWF3OXdKTkxVNWcycUI1LzBqS204elY4NU4xRW1lRFhjUkdQWStnL3E3dDRYa2VObk1GTHZSVjEwU3RYdS9aL000NVg2d0t2SUNEMGhLZ1hld3BsRGtPWDIvTFkxZW5jaWN1VUFScktMNlp1WlY5ZlRCNXI1MldLdTZMZTBqMjgzT2xHRFRZbGpxbHM1T0FnNyt4SUw1SkdwRFJnOEZnMi90Q0duV0FzZlZZTHB4bFBsMGxyMlVwV2xSbUJOYWFRT1hQWng1ejVZVE94V1NiZTVZbktTWHAzaGdVcC9kN2l4aUFXRkkyUjFZZ3JqU0N3VURXWTNGbXZOZHg3SGdQMm1ILzNUSHJDdGxUNVpEYXZSNzNEZzlFUGxKSU9aNzJLTThaSEVOU0xkK3VsNW9QVi9LNlpxaCsxaHBsZFU1SVJLOG9oZ3pWa1hJMk9zWTIveC9va2NhKzZxckVVam1nV2luREZVV2V5Qng1eEQxWGJ5Sjc0ZHhpOHdHRmxGYnMyb3VIRXRPVkcrMG01WVpOWDQxbWlMWkRYWFdiN0ROT1drY3lGcjhXVm53cVZpcGg3VC9xYUNYOUV6Z0lvN2lZMlVqTVdSQTA1TWMxMVFyeDhTK3ArUjJuWWVvOEJhVmx0Z2xDWkhaelRzZ0duUnF5K29aY0NsaHR3WWU1dms3c2gxWk5aZW03ZnpnUUtwZ3M1OWlpaWFJZ1dsNDlma2VYTjFpUDFDb05NY09ldEtwU2ZVNFdZZ083aHVzY2dJdjlGV09sU1g4WTdwWllSZWxHZnFSVGFXd3FpTGNidlRlcmFjR3oreUlsR1Rydy9yd1ZBaG1CdkIrUmpDVE1QR2tpOHhEcnZHMDlIUmJDNGZ4eVRBZWQ3OE0wYjNYMzJ3dm9XY05YQVNSNkxOUzJOUGVhUXhwN3dyamt6QzVUSVdmWlpuNDlBeDROandyRGVLdjhWdzI2OElER0h5Mjl2S3owMmk1WEMycE9rRFRnS3U1YTZaOHQ0K0NuN2ZWV2h6cGt1WDBqNExIaFJiNVJxZG1zbENMK1hWcWRyc2xma3VOaHBYZ0NCcTdoWjJYS0RPeFBSVlhlNys4MzI5b3dwcEtZREo5NXRHLzV5UjU3WGVKTjNvQTkxTzJXMHNRT0I1Q09KZE9DVGlCMEdtKzhBSFZmY25qTHozbFJlK3ZYSWF6dVpwYnk0ck1ZYURiSWJBQ1pQVndwdllEMjl4ZHlGTzBJUDlqVlZvaXpzdHhZTkZON0dUZEdyZlF2OW11Q2RZcGROenVOeGtCejdtRHRvWStLa2R3Qm53WUhJQ3ZwK3hPbytmYlBqeE9lZkNTZG1ORG9GQ0M2anVmN21hcHYvaFYzWWlFUmxtRUpsZFhpZ0hCUTBzNWNJcjJXQ0xMNzF6Rkh1ZmRHejFYRjZLc2toK1R6VXBCUVR4YXNpYWZjNHZRVWJ6U2plSjI5ZE5jbjQ2MFVId1ZMc1hwM2NROTYwVlNXei9PRjVaMVpRdFdlQU1ST1dMTjlvUXliTFJRM244RitrY1RkZTk5dnpKbEVCTHEwQ296VXRtU0NxTEdGSUc0MWphS1pGYlVVajlpekJPS0ZNSzlMeU0zeXcyNkd4NE15RWlpRkUxRlhodGF4NzRVNENKa2FPYlJ4UFQ2VHhOOG9STUxrTTJOVVJpcElsUWhXSENvbHBqT1pXeitKQnE2dkV3a2h1QzhOb1ZqNVJpYmN2YlpTM0FnYkd0ZkVydTV3YngzeUpKRXlzeXVrK1BNSUl5RkV5WGpnQ1BVT2tiS2JPUUhhbi9mZEF2dVp3TGlUdXRQUTJYaVRBdnRNWGlFeEpDdDVlMVZRdmpvbVVoL0hrQUNERjU5dXZtUXRBZlZSYXltTE9kdy96Q243cm1ibnhWb2Zoc0EvRTgzZ2psR3RYelRDVVlLejRtY0JMWG9jOU9JWG5XOCs0Z1NDYlpnTERHM3duU3lSRmZFOHNNOFVZenZVb2VDeTFFY1NPRGpOVURSVFNUU0hiaWlHa3ZtTm94bVM1SFBOV3JZSTRUZUhFTmhFWmFlUjM0eHFudFUydmF0a0JHSDI4SWsxSnA1KzE4SkVES0tDR2w4RVJLdHVtR1BsdXE1RkpDT3NKaTE2QVVBZWtoY3Roa1pKQ3lsRXNnZmVlNmlTUjNMam1Va1ErMzJhZHQxbk1nZCtxOHRwM25ORnZ6Q05LUW9XWCtibTV3QjFxUzZGd1dOSHZMZ05BWnlYTEE5K1JOVElVTzFydE4rNjMxN2FGU0xwMStsTHRreWNVSk5SSTFUUVdsMGMwbXBVSGZvNDVrcWt1elBIdENwdzZmc1hCYkI1dCtXVFNEMWZubXRrOFRjV0hqRm0vcnZGbzJrc2JJVEdiVGhlbXNReDZibWxKL1c5K3c3U3ZoVHgrQ3JZL2lXcldtSW5ZdVc2RlEvRjFOUkV5ZzVRaGUzaEhOTlk4MEttNXFCSlVFeUxEZ0dHTlZ2UVpULzhaVGg3NDdQNlpiUWFGWHJ0MURSTWR2ejFrVWpsSXhKbFJNY3M1Skliemx3UzBxclpGb1VuYkVpUHRpMHFHaHZ3YWhZUjRvY1JTbWo4SUZLalFtaTlvUDNpTENkQjVsOHRBR2orTkZyZUNoTHhWMUovbW9qOExRTjNYUFREaU50TitiZUFpakhzMUp5ei9EKytlaUgvSEdsQkpZREo2QWZRYXJqVGphcll3KzlFM0I1bXI1NnV4c2ZkV09KZmZiSW8yeXp6VVQ5OWxWcDFsVmpSWFN1YlR1ZThlL3pBbzFLdTVoQ2VnZDVlQW5XcW5xUVR3U21FRjk4TlU4Z0JrUTlqWXI0UTZkMXRNNXEzYUQ4elJibjBndDZRcFRZZTc1Mi9qb1IvZmFVaE5PZ0E0RTlZdWNLQit0TkdpNC8yMmFScTh4TjVwL3JXWlBzMW1JcU5xRnFSb1RmYXZBSDc0dVlIQnlGWHdzMiswS09hcmNidzdwZ05nR25JM0dZR1Q5ejV0dzRuM2JISlRTMDdmd3IxUU9KQU5KV2R6UWhWUFVpRHQ4M21WODJ6NnJPLzA0YjRRZElkV3MyUDllMkZNRjIzVS96WW9zZGRoaEpDOE5KeHMzN2JPOE1SQXdnYlNVK3J1MHJ5VHNIUGpMdjQ4UWpmSjN4L1dLcXFzdC9YSWoyNFYraEJ6TXZXL2F5d1haVk1keVl4ZUpET1doS2d2TTljL09MLzM5S1lPazZmdjVaWmJPcGs2NXU1M2YvbmZIUDdtclBUU0IrY2FrbmxVUWx4ckJSSW02bytmWE9uRVlyNWdrQUc5d29hOE5tTmcwTStHd2NGOGVuM2NHRm5LQjFkN29QY3F5V21pR252YkErMDVWUWpyU0FSbThHZ1dCZGc2YzBzSHRLOEUrL1A3N0t2SHFuZ3hnYjRWTVRhL3JNK3lhS3FkTHJUcUN4U3ZYcWZuU1J0OGxsM0FNRkQ3Q3huYVpJMFovVHFnYkFjcDVqUzA3SlJhcjlWdDljbGNYZnRBOFhGQktsdnd0RDZEeXdtdFVNc2kzYUthWmt6MWhkSkp1ME8zTzdTV2pZSmxZNTBjVSs5MXZRM3NRdG5SZXZXWlc0QjdKUkM3WVZ0bThVelErdXNodWtkRlNkQjFZU0E3bkNZdjlOUkhPY3FNdDU4cGx3a1ZaK3JhMDNFa2JUaXkxREJnanJiL01uOUo0UzljZFFMcXVRcnNyWTdoNFZFMzVvbEJBaUIvN3BTend3c0hyajAzZExQQWdrYm1pVllJeE85VCt5eGViaUN3VzhkZlJDWU5zcCtMMS90M2RscVZONzlMWmdGZWtFeXZyMFJpVWpKcUVNcUxtNDJYWlFtSXJ4R1VFZDl1NG5yNGRrWnJsOVVvQzhkbFg5VUF2SmpreHNiTFlkdjVZNzU4enZ1aTNHUmhnQnplZEhvVnFaYkVHQnFKOWJGUUhsdlBLUzdFY1FOa2hWT2hOL1orRkw2OUVYUDJQZTZUbldzZi93MEV1aUk5RXhReXIzTGgxWlJPQ2lVLzZrQndKODhWTmdhZlRLcHhVN1kvbXIydUZ1NDFxREhHcExMZUtCa1NkeUlEUm5MclRldkx4dC82d09yVS9IOEY1TGN1dU5tL3ZRNzBlMkpZWUFXN1pyWEJOME5STExDcnV3VzlXbEQ2SDBTbUhZMmRRUXNPc0FmNHEzV0dPV3VYVkN1WjBtdlRIN0JNNjE1VnptU3ZNTDlOeGF1NnBnSHJFOHNUOWdXcnRiTm5XeWRhYTZxN01uQm45dDdPd0Vtc0VUa0NOU3VTbDlFbGE3VmVsNUFuZjh5NkhyUzlVclR1VTU1VlQ3WnFFU2EvRHhScHFqT0F1VFN4bFJMVDN2MTNVdW5hYm5GMUMvWUIyRjZCSXpEazFJejk4OENsc3o3c2tTWUNYL3lkam43SG4xNFYxYjJoZWVaYjQxc1NXR2pNbDZmdnhJV2ExZWtjdngxK2Q4anNPUjN3S1VwcHdzR29oT0RTRGdZc1k4dWhFVnYzMGlqM0ptV0ZvT1ZnS2xmbTVvZ1QzTlZ4OEdPVkpPWXRVTHV1a0V3djVLMExBM2N0UWFPWmw2NlpwQnFkSXFabkZVOTB3QkIvdC95b3ZucTJXV3oyUlJEVlJ0MnFEQlByOXRuQ0tUL29RcWR4bzZ5ckFEajBMVzAxZnZSSG8zQlVOSlBLSXZCU2xiOUY1eHN3MkoraFhvWlByUWp0MGdSWGRBTENVVzFtMnhQTlhmclZXZnNNbkVTaEZXS1QxNWd2ZjJjZlpucmo5QXo2N1BCM010MGx4UW5GTUFlRFk2dHAvUlpGOFpMOWdOeU9JUXhQaVVGZUlJUWFtMGJpU2hmOFppdFhhZFhzRnhmOFIyQlpaWkhLaXAwWVgxb0ZSTFg1aTE1UFV5c1VkbmFyVTJqS0hEb0FLTzltUEdHWU1PUDhCRmo2b0Z4UngrTVVHaVlham1tYy9WVG5hSXpNTHpuTjQ4RFVSK016b3RlbDJFUk5TQ1pNU2h6V0lITUREREFzbnd1bXNaajlaSEFnNndnK2J6QXdsWGtwZjNNZDNONGt5WEFRNUFqQ09IeXdnVG9XTWJScjhJeTJMS0JraHRKNkZZc0c3THljdHhMd0Q2dUdaLzJBeWNTdVBIcjJxeUpBdWY3KzNWenVOdmpEa0h2UWYwYnl1S3F4MCtSSElxLzg2WDJ0eExUU0dNbG4xNFJqcWZXS1g4YjhiZG53S1dabXFsOHk2T2pQRXlzazU1bytBZnpkNDNEbTRyaWZRTGc2RzhiSDcreE9FT3V4eS9wblQ2VEVZUGpCZlhhNDJVOVVTV3M4bzc2R0xKM3RhbmY5ZlNJd0FYWXlzWTZaNnZ6RjVXZ1hMZUs3SndJRGhvY2NReGhIdXVtM2dmRzdodXFNWDZlejlwSDlBbTJTc1NOaFhzMkdMSERpQnVuUG01K3phSGFLSXRiUmVYN09GNEZpL3V1MUM1ZnArZm9Sd2dmQmNpSytWYlpOKzM5aE1lTWhOYVZqRkswVnpyL0Ria0NOdjE4amVsdWx0NlhHZm12RHlNUzVkUXZpL1ZyTUU5N21iM2RXZGdtaVB1YnFKR0lmTWRKRUZQdnVyMWpESVhyWnRWMkpJN2FuM0FBWk9QSWNQODVqRFpDZXMyWUhYYmFtM2hsdSt6dUpMdHdsa1UvT3BxTmNFRWNKWXRBRGhEVks3NWZtNzMrQVhQT1hyTjNIRWljaWNIWVhZeko2MWYxZ3BDZUFMTWJDMmM2amlmQzlTZ1FXNnEzL1ZRNWxUOUVtOGNRV3AyQ1lxcGtLTFpBaHlmSU1hS01FTTFpNUs2ZFFLd21wQ2xORmdpVTdEelZ2UTE4cnRpRmFTOWUwVElTZHM4a1IwazJRZk1XQUo0NHd5SlBHQStZaUhHY25TbUE2SjYzL2ZnM3hLNTlrSjlsOU5vTFUxM2o4eEtNL2N5QU9YQ3pJY1B1ZzFWOEtOaFRaZmg0WnJOSlJRdU85enR4ejBDZERkMWUweDVVbWZKYjJ3angzdXRUWll2TjZLdlVvTU9nUlJhTmRWTVJiY0pZTjVJS1R2V2ZtZ2JaOExSSW1PU1hGWkwzZzcwU0RlRUdIeE4xVmtNandUeWhIeHBGUUJGV0Zjb2hMNEt0Y2QwQlRlb3RSN3h5dWFWbjhzUU1uMC9ZR1AxWmdNV1ZiWXordHRJUEpsOVBjZG5BNWkrQm5OdXBQams2MFpjSEFqRUhzYjRRMm9VMXBkMmVrN0w4QTFxald4bFNneHpwZVdGUHYrSjByS0lDcUk3RUNBaU4rQ3lMSmRCL1FOdnFUYm5kenhPQ05LQUJCcW5mNThmY2dqS3lkM0JUbVQrT1RYWnZPOUVDS202VlNwN1JvSnVPOTN1Q2s1UDlBblltbnNodk1samtST3NHc1pEK1duMm5BVk5JTlBaUjBON3FYM2lHeFZybDlTaFlRYlc5K29KK1NnOXdjeDlwcDNPcFErbjhWSVF0RmdlZGFHekdsc3RJcEg1Ry9RYjNEQ1VjOTJQWWhCYUYyUkh5M2hpSGdrUlV1NStXb2hlYXFLdTlaK1d0NURJTEp1UWpTVVlSY1hyRExTY0t3VDdJdFlKM3dtM0l0WEJFeEVUZW84MWtLOWRZYzV2bllVUlBra2V3WXowOGNqVHFxd24yMy9OcnJZMlR5bldWcUREa1hqTldrMm5FKzZIdkZGTElQNUJ5aU9IKzVCVHdSL1F2MEV2Z0pRUGdFREt5d0dFLyswM0Q3NnF1N0VLNVoydTV0WTI0WU5UOTVnUDJMK0d4OWJmdytYWUF4aHlPVmhCM2krZk9LcEtKVzY2YmlVRlduemhxemNtMXpjRy84S1NmdzAzdGs0N3dwaG5IMHQzc292MWUrQ2IxWEJRaFg2Q3FWM3Y5OHBrajJpZHBmTm53eE1sZ0RTMTdwS1c4K0ZOVWNBWFc2aGVhbmNHTXlMVmM2RFJ3WTZ6dHBHWHpCRFFRTlQxb25QVzRHcnhYb1V2T0JyQ000TTNvNENpbEQ2aEJKMkVPQVNHbUEzR2FqUHA4ZnFrOElFOXZZcWt5VUt3bVJZd1JzbHpya2FsemFtNDhQbkFlVDBleUV5UmtKNTg0UW90Mk1yODN4aG1LWVVNMTUxdjdZYXV0dVlYWFh4eUttWk5IeDVaOTNld0hiZUVEZjU3bW9LYm54Y0V0OVJaWlgyZkZoeTRwekxaM3pDblFtV1VUSERQV2x0QitjYTN6b1hFM3EvcXNGRGU5VXF3ZE9ZUkZ4Sm5NMHNFTXpqcFIyS0RwQWRwZkVQSkRSbVVBV3Vkc2JDZTY5SktBMmFuc2Z2eW5Md0ZhNzd1L2YxemU4T0FVSGRNb3k3a0QyUmRDYUROSHVmbWt4OWI3MXpqYldUejRQL3o1WWRWTmgzM2hZUHFyL1dPVU02a1dEQWl1OWVBeHJkKzhiT3B2UGIxcVA0a0d1NmZ0RW51Q3JwUlFHcTVhaXE1MDJQZDl4bHhiVXo5ZkVIQTRVS1hROEhQRmV3VmZ2WEtIQlRwbndkc1AyMFd0UXdGRTRydEhucHYwamxHeXZpNmh2OGVFY2Z4NFhUVUtHYmtkbVBWOG80cGd3RnE0cnpWUVptSFRjSU81SHkxdHRJR3E1OStGbVRhTXduQ01CU2NCSU9BNWxYRk4rdnlmdG5HUXhLZm45eXRsNFdSMzgvb2Y4TExFc1JYM1g2L0laSldaNHhMMEFNSUZSK1JpSEx4NVRHeVo3TDh2S05QazNIY1dYVVAzTXVlVXpOaTNmY1VYYkNEck9uYm1WVGJubGhuay9Hek1GU2RLMGFMUVpLaDZlQlhTcGY0R0x2ejBheGZHbWVvWXNhMHdETDhPNWkyYmUrVC90aTJMY05jeFhwWjVvbVlvOTJpWnFkWG9qK25yZnlTVlZVa3o5T1cwRC8wcFRuRjBnZktnekNmY3M0RGplaHRpVjNKbGxoaGtVNjRLTTJGQ2RWU29iZk5qY3k3NTFLcTh2QmJKWThYSG5GSnZjVVFDSVkvekY3bEJPbmlxY1Rnem1iVjZTZlMwb2tjMkh4TE55WU1YMlkrdnlLL3VWWER6bDJVUjdjVllzdHNjd2F2RXhiSkIwdWhkT2VyRmlHZ1BjWlc2YWhFaGg4b0hsRUMyWnNCTmNvT3ZTSG5xa3Z1UU5xMnovR2dScHdCT2N0Yk0vSnJIKzZXL2ttMkd6dUFTNEI5bS8vVDkrME9lNUNwbERJZkRyd3o5NXFJVXVaYnk0aVo3d24rOGk0dDJSNDdQN2R1aU9jdXFkN1NaTDVCNXIrZ1pocVNWNXA1VjA3SFlWTmZmaldiM1ArY0x5S2Q3UmMvazdOeFdOam5mVnNEamxKYXpUWVZrVE1KN1ZFdnIwUDJiSnpXSy9zcENWTGhRZ1oxdDdnRmI3MVJzNy8zQi9EcEtxcnhielRvanNJRDhqTWRVZTJ5d0tCMytRY0g3VHM1bXhSLzlYZFhhSm1JT083OTZvNFNYZUhqUk5pSjlib0o5NlI1K2NSNGY2ODJ6TDhXb1hNbExkd1pEa0FLN3pqcTRXL3ZER09yQm9xcjhYYWxpenFyVkErM0U4dDR1MHlicm1oNmNGUjF5ZkNjdnNnUllteHpnVXBGSE5rYUJDQXRmMno2MkxZeWxTN1NQdGxPdEtRM0xlRktFOUJRaHNjZ3Q0ZXBZNklRdDhDK2NWYTZUS21OZHk0dCtaWFgrK2hnMyt4dEQvV2tHenVKUWZvMFJ4akd5aUpYR3JFTk95SGo0dEZSY3dEbU43a1VRVWprWDltamhIZ1FjQVIxUDAvdllUaDZhYWRZdWUwanA0WkxPSDFBbDZYYWJ0OXFWZWlONFdpYVlkeUZzdHpERVlvVjZ3TkpQRWNUbFFPY3VYb2VzYjJxUGkxYmxSMDVSandPcFgvdzNoRjBIUk8yT3FsdzU4WmJDODdiVUdRSjZRMG9EZ3I0eFJYZHJ6dTJ0TEVBKzEwTHRLWDY3QUtuamhyR3RFSzdqMnBxSHJBcjZ1ZXR3Q1RVdHAvRnlna0FLcmErb0E5VkRnV2x6Z1V6NXhQejBSdzgvR3luSXQ0MTJxbGNqVUNON2IzL2hqOGloeURuRnVtUlpiUnQrZThRa0tDVjVlcW91dHo4QjM1UWZLQzFsNFA3eGdYYUdZWCtxb00rWGk5NHo1S1FNZGtsL3pVWHFwcWtSMmpnYVJpWFdmTGFyb01VK1NrV2ppZFVWdHl6TVZYeDlEbGtaWXBLRklYK3pURHJuR1A0dnJpcmk1UmpJQ0RNMkdzSVkyQXR6N0pDTFZ0RU0za21JdFVBKzZ2NzluTnNxQXk0OHhaM0pyaWxjdWYvNHVrSzYwSUZKZWt5MUh1cVl3aEgvYS9PdlE0YmxlS29LZWU0citmMnNsRkJ3czlxYzZmb25GZG9aNzRlSVNYNFRaQ1BrUG9LNElQb3BHYi9HVzdXM1ZQYmgyb3B6QUpjcElWdjRrc1ljZkhZOXhuRXlBamV1YmJiMlNNTFhSR2V3Y2N4aFl5MUFNK2h4dkRmQTJFWFhNbFBmckgwRU4xN1BQbFN0K0xyU2NLTlNKRHY5eW5EMmllTUczQ3ZVM2ZuRytwTDk2djJUVVNoOER1SnpMY1o3MFZQMzB4VzlGM0RGWW9waXExTjVSa2ZObzZOL2lWYlVVY2VwUkV4SVpMS3hXdFVTVVJWSE5HMXRsUGZGVWxaQ2RXcGZKdHUvYm85d2QyanpxTjdQeGRPbkFtK1VzZWxHYUhqNUlKZ0xLM3hZL0VjaTBjSGRVN0oxRmZFbzFvVjlPTEJEK25hUjA5V2c1eGRnN1l6TmJabGd4emdaclhiT3ZXeGk5SDVSSTVwWi9xOU1xOC85bWZYd2VUeEo3dlBTdUE0WDV0aG1ZaEpZNzJIUjMva2NPZUpZZVpRT1ZJbVk3N1RKODloNU1RZlVSeTNCRGJQdGN2b1ROQjg5SG8wdDk3UGo1Nk9MSTJ5WjRFVk9mb241L1VNM1NzbDFqd3ZqWjRITzlSZnN3OWlhamN3WFhpb3RvMFNHR3paSUZodHNrVmo3dFJ0N2FDa25nYWcrVUVzRmRFd2I2ejFLWGZscjUvai9LQTVISm9Vb1dGY0JYd3ZWZGNMS1RWdEg0QW9lbm1NUmFISTBCMjRWT1BJNTJKczB2RjBsUERMT0lnQ0IvVmN3SWppbzZ0UzlmVUJVczVOaWFqWks2VnBuWTFWN1J6VnErY3ZKS1FGSGZpalFncHZjNWxNM0RjKzVUd2E2Q3ZwM090Ylc5aDVZTVhXVExwa2pqaFduYzFUZmwwWGgvVEx6WEV4UU0xc2cwTXJoMGxudGxpSVhqMGZkVEJJMzk2QUNydXhPU2dsSlRVOGVtRjAvcytmZXJPMWNhKzFiVU1BNDNKVXR3WWRRQzEzMjc2bzJxSkdFTE8zTHR4V0lET2FDeXpHc0M2aHlKTnplVTI4L0JXVld6NDU0VVY5ZXhkaUpjbG5YUFpSdWdhY0FuN1lQUG85LzhOTkdaN1pZcXNiNmxEMEZBN3krTExSN1pxem9Pby9pYmxROExDVmczcWkxcThScmFwVmhXc205YTlxUTc0MGtoSFM1ZmxRUlNMVzVRMW1yRXU0MjY5U0xHWjdKL0UwQ1BJTFQwM1k4MDdSazhORkdpY0VFdE12Zis2SlByMnlhVUFvaUk5QjhnckEycGgzYUMvV3d2d2xqemxjaGZoWEo1WFZPc3M5UkZ5QUNGUEx5UVB2N29FZ0dZRGs5ODdzaUd5eDlBRU4xUmJZRVJJNkpPS1RrN2FyTWpxdWIzeEJGV3ArTE1XdzZuZ2tNWkJmbzl0RUFEaVhJOWY2d2hyb1oweXJSM0dhR1JiakR4Vm9ZTCt5dlZIczkxSXkvZGtvZGJVT0tpRjRpcWRYc0pxZUpLUHBZYldLWUQ2NHEra1ZlblhhUVNGanRtOStLMFBVeCtiQjBrMzBFbHYzalBpUjBFZ2o5WGI1RC9PL2dOeFljODdEcmJRUDZRZmFkRGZZL0JySHM1QlFPY0JNSGZ1eXE3U1ZYY3lSdTROZmJCeGV6RDhaczlwamNZMVpHRm1CODMyNlQrWUxvaW9xcUlmRVVXNlgrS3JsUFdzSXd3UjZscUR6U0EwQnFKdVA1S2Z5VE16UG52bWs3Tld1bldtWlZFNloraXI4d3hDN2g3c0RlRFlLRGRvTm4yeGxXSkVvL3hldXVsQ3N3Z0N4OUt0SjEzdG13YlBJZjVxSjR1NDBrQUVRZFFxS2prOFYwQlEvWEcrNjJJTldMOVpDNGx4Q2U5TlE3UGwzb1RhYm5DU2V1UWMreHU1OXZHMVNIWHduaWE0akFRZ2J4QWwvUlgxcEtYUk4xKy9PQjRxd3c4cHlrdDJhUDUwTTBWTjBqMm5Lc2lROHJac3gyaUV0aWVoQjYyQjE0dEVLZjA4VFNwTVhKNHlhUUhMV21pUXBrN0xmRktnOUEwZDNaam44R1NqWEczN3BtYzQ2VnNPM1MrYWJySFRGVk9WblRLV2pMWmdTOVp0c3l4cm9DKzl4VXJSdWdhUWN3TzNYRjBpNEpzN0tlcVNVSHFaRGV3RU5rSXoyYjJtbk5KdVl2OGhGbVliWWdUS3lRbTQzRm12MDhBbUtGWGN3WWFWNy9uN1JmNTArdUh4RzZlS05YcDVsY2R2OWFYTmc5eDhib1p0KzdvMlZ1ZUEybytrQmtiVmhSNElnRlZuUS9uT0NhbG9sanUya2tiMzFHSHJ0N3ZtQk5HekdGQWZlbHNCSjd3VHlMOGpjNWpEUHFubWJyQnJGYVUxWXlGc0Yyck42MnhuU3JJT2NQTHArbDgzaWd4T3MzOUpuOTBUb1U5a1ZqK2dUVlpwRG1tNTV0QWgwSXdWSGFxNlpkbjgzMHhENVlVQjN6TUxiY0dhNDgvRVdJK1hHWmtsTU45eFhxNjFrUWJmM2syKzJMK2cvdVBhZENiVTZHTExuNTRiRUNPbWd2QUt5RVRDK0FPNTh4TEg3L1hJbWNkRVFTRElTU0V2alNrUE1MbEJzRk82NmI2Zm15REpNakNreUVCWjE4Z29wbU9ibWpCeUNxU0hiSy9yVmJNTE9ZTzV4V2pkU3RSZXpnUUxad043c2lvYk9vQ2NtQUMrblI2eUVtV01vOFJqMmVoNWVjUk5ORnVQeVI1SzhlRm1mc05aSWdqeXprQkEzbGJZQWc4ci81R3FCMnVlN3lYZU5Eb3dMREpUS3AyK3lYcjdPeTZLaUZ2Zko0bTFKM1BIMFY5SFBNckdqd3gxS2Ura04vMFN1QUQ4VHpxR0ZtcHp0UUdVWnZkczE3Um5EMzU5cTl5RnoxS1VSR1d2d3VjY2lxSUluZnZySnVER3pJb05Tb1IrUytFeGtLdFAvU3g2SEROYy9oL3V2TEJqdjlZazRZQkhyamdSMWdwbmlkTGU1NnFianAxbURvbXQ5bmtTMUdkOTl6NEhLMkZoYkVqMmpwWUhCcTRSMFVJLzA4cTdZOE40dWFDTllUMktVeHdmaEh1VjU4MG5qVmtEclZlNndIVHpmQk9JbTlqNkd1SnN6eURWTUd3Uk1mOE03aytFSG5MYWJhM2NEcndlaTgxTGw4RDRQTVhVUjZhc01YWGZXdDdmS1hpUnVaSGd2YTQxNU9aaDN3TnFYQnIxMzg5WEdZTno4NThDNEh3UTR6S1paOHRXRDRNQjgyeFJkQnQ3RkZkQ2JVZlhDbGpFbWNWWkhVSUROUlVnWGYvQTN4TGhDaW5XYnFDSENjSEYxVlFwRVFnb2JNb0UvbGdHZUV5UytvaW1scm9oNWZ0MVc1VWNJRWRDWlB0Rk1HZzBCcGNaUXh0bkRMZVFFUG9WUnRuemE2K1ZFLzBuVnZ6azdJekRFUllRRUZTUS9wc2N1THZVMlFidzlPSS9RbWJDUDRsZkFQVHRndW1aOXVjZ21tZ1VYbUdzRE1oQjZERkRKSnVIUmc0UzVYTk94RzVQNlBVbjJBSThQbDZya094VWxwakJLWVRsb1AxdktSSEZxVFZoUjUwdmhuUTRNajRnWHcwalZ6Slk5bmY3dUlIcHNoU1daRGFrNkY4QjF5VktkdGVxbVFBV1ZacUFhQXlGdFJlazhZaWtjMlUwNG5EbVNMUGNmei9JdGZ4dk9qMktUR3A2akdsT1Vlc2praW42MVdpVFVyc1ZDdDlwS3VUeFBvclN4amF3MWVESFJPd3ROK3E2UzJWSTRONlBkdWFRMllxV2RwNDJTejh2cmNPUHJHNTVVb2lOb28zVUJTcVFYdGEwdy85SnNZeHozeVZ4U3p4Y0hXYXZhNVR6Y3BvN29MUkpjMFdHYzRaR0RKWlpSa0wwY09MaUFhUHhVN05TRjFPakxSSGxZQ0ZJemEvZTdlMk5RaStnL2dVeUQwdFRaSi9nbzF1amEyVG5EaWRnUlhGR2c0emltR3M0WXV2bXVuVDBlRThaV3dhVUt6bjhJVmJ3MldxUkgrb3lMc3dEdVFEanlFMjZINnBQTW5EanQ4cng1WURPc25hWlFXL1kvcDRKUVo3eVpNVmhjbnJvZWwxQXdITU5YUGorclZpUWlYKzhuRzdBSmcyb1lxcGp5b0I1a0VxOVRzcHZFeVQ4K3NMZnQ4SDc0SzFDbDBwaWdMdG9vYm9XemRocmJiczI2RVgwZmp3V01LcHN5NUdITlhwcWpnWi9SeE5vZzE3U202aFUrczdNTjBEZGMwR3pNOENJLzRlUzlYeGs4d3cxblhJNm1hNk9IbCtCTTAzRmIydHpyaHNZODJvVkZQNENCeFBCUDhhOHdwNmVDVzcweFRRNXZzcGdpemdZbldTSTNQMzR6OUZpbStRZHEvUmovaGJZRUxTNEN5Nk9aSDRDbEhpMjlyUkVBbFQ0LzdnZmhsRFBhWktNWHNDUXREa1E0citzb1Y2NTk1K05LeENVTFROMEtOYVNxVEIzUnIvY2toZTJUNHJudkZNZ0M2cHZhbFh5T3BxVUhNdXd5UDcvMDNIS0JFZndvb0hrdnU5S2JCd1V4b3ZSMkxBc1F2RmM1SXFienZlZ1lWdUlSMGZ3cXV2czRwclkvRnlYK0ZyazB6eEY5SG54MjFVbUcxSjh6WDJlbEZSdjJjSDgwdzlPZlhsc3RFczY0OTRNMmhhOEg5MnpyRzBKNXhKYWVMcGZDc1dNb28vdW9HWEgyK2JpaDVOSVo4QWZEVVdIa2JPeGxuQjdad0ZSVjV3RmpPKzduaUs1K2tFUFpobFdUcDN1eU5UQW5PT3FzQmxMK0lwMFFJbEtRMjJjUWVSem5FMVI1ckR2emd1QmlNckoyZFZTeG5TZHZyQUVOY2YyVmlZNldyZXkyTmpSdGlwdWg1L3NKOGxxMG5lVkdqRmk4VnlVZTE1UUlsY2s2b1ZrNi9XUGk3ZUwyaFVYdWkvSnZyVE8zYW9ZTFVLb3VVb2ttc3dsQjR6VStTU0c4b1Z5TjVGNzBxa0V3UGVNTk0rT3NaaDZtNXR0d0xjSmR1UldONHJPbzF1amxTK1ovREVQVU1ZRWZpOW50QWtUNDdUakhtY1hTeFpWR3dqVjgvUGg5KzF3dC9wdHdGU3FZS0NVMk5YRHF1Qk1iSHplL0VVRjRvNGFtME9jYUdianlnS3d2NGVPWW0vTXVLdG1yMlpDcEt1QUUrZDFYaEcySk14K2RBckZkTXFKVkFMc3VWRk8vc3FUbW4rRU9ZVnR0aWVyV0h5ellXRXAweEJ3ak03UU9SeTk0NnBZcGt3Rk8zRjRneFlHYzFQbDgvRGxxOVRrMEJCSjVoeFRSaVVsQjZ1K1Jtc0FxRTlFdmxCYzVIamRYTjhxcVYxUG9kcE1GUi9uK0V1WVVZdEV6VjJGM3VkY2p4TWlCTXhJOFhRa0dGWDlDYnk1dkttQTY4TWYxeGRQbUk0c3QxL1M3aTZqYUw2N2RubFQwMGZxUktpMFpHWE9HaEErK3JjS2I0dXh1OG1RcUNLYmM2K2lpRVcrMHFtMmNlMklsVDRLaVNDUkNYVTlyWEFxTEZrWEZDbDl0ZjVFY2NHcy9odFpDTW16UExnWVdYQ2RyZS8wdjRwM25WSzVqYU9LV2VHZmpxZzJINWdCT1VsV0VBM3Q1eWFsWW8rdE5oUFJtOW1LeUNmR1VJK3F2eC9uQUZEZ2JJVkxOL3V0NWtmN055MHU3eEpLL2lybW9qbVBmdzVRU1RCYXMxdGtxK0lTQ3pwaVF0b2I5QWkxYkh3SUExRzdpTHFXbDIwNE9kVHRONnkrNUN6T3RRcW9GMnZyRXJ6NUVsSEUvSno1V0lHSEJhbXhUNXB6RkxIYUFRaUtrMUwrNFlZMUpYNXZqa0txSkk2TmUwY2R0cW9lYndhSDBpeGUvRXpmRTlEWnZteWNVcHVoWlg0Nk84RldiRWRKNzhWWXcrNzV1Y2NsVUoxa0JqaVloVlk4eEo3YXJvUGtvcUFzeXJRV3JJL3RycG9YSjJ5SlpmaGRvemg0ZHVVTEJqVmNaUXRqMGJNakRjOXdRU0g2cWtWMHJ5SkgvYm04cWNod25zWFlpNDlnMjBoY0hHRkZFYUJ1MjRiM29xM2NkZWlwZGV0QUd3bnFPSjFwU3FybWRnOHJQUTBOYWRlZHpXR2xOVE9TYzJNc29lVzU4TGwyUjQ2SWZONk9NRm9HZW9HRjcycHpKVDlGRDQwWXRXbHFGdVBHTDBtenBRMklzaitWOGRqdjBCWnhld0gzRXB5VDhWbzBuVjFrUmFZaFEvTk5BUDRodmhlZ1ZkQzBKa2hKTE5FR3BSSzdCTEN0aldDaG5ybEFGNjZoQ3d0TlIrREc1SmVKMEZOdVNGcEo1TmI4dUR0Mk9ZYmFqaG9Qclpteis5a0lHNWVJd0J3VzQ0V1ZQWTl3WFFyNXJobXZOWVhDcC9nc2I1MUkraFlqbjRWc1pLOXU4ZElSdjZEc2hraEpyVUVIL0JUS1JRbW5WSlFJbWJvTzdqZUJySFpwOGx6Q0VldnlFMzFTYnhrcU5DUTZ2NjI3S1FySFBLZ2tta1N4aGo4YWRuTzEzcU5XNG13bEp0K0lOdDZBT2NlWmZOYnJYNnpNK0p4ZUtTZDVaMlQzS0M2VE9MMnJCNFBuclFHWG5FYjh6VTByUlNzNURRWFRVUWM0QzE4Yy9OeFVnbzRNVWZHY0N4VmM5WU9FdVBHMEZ4MUxsNURnb2dncjFOZ2N2ZEttT0E1Q1hJU1JCZU9taXFnM3BPK204bVZLUEg0eTRUekkrS2hFQW5OL0x1ZDkvNUNUbjVUbDdDNGpaNGQzS3U1OTlESUZ4NTZGbGUyR1h6RXczQ3U3YUFsck5yenZhMXorb0JGZDRkaFN5algvM1lDVlZkRTdoUWhqdGlMeG4rMlpyM0FRRGNLcDkzM2FhT25HRDVzd1RscW9SajB3YU1BNE1CK1RYTTVRSlJNZzU5d1ZzUVFJa1hKRGh6WlRjTDRkQmUvM2t1WkV3NlpRaFNtR0FEWTRaVzBZQjIrS1NubjlybEdoUHI3a0tJak1leDh2aHhnd3FXQ044RGxSeTZWVVNtR3J2ekNnaC9Oam9sMDZiNjJ6M2hGYlZUZ1ZnWjlBb05jb293OFlCT09nZFRJZktUbWxKTXRTekVqTXp6amRGakgvb1RENWVza0IxTnZhUGZEVy9hbVdWVTB0emJwRmMvSFo2emlJVE1JWkI2d05xZW82S2NweFh5blBwbjVWTU5lMjY1SkZjQzk3U0VVNXpDd3ErUmlDY0xZQnhZd0hFN3YwUlBqRm9wMnFheitzdVFoWWpPd3kzQzlJWmJBVlFLTE84ZW1LeHN5QXM3V25aY1VVTjJNdXRTZzg3Q2F2VS8vT004ZFh4ek84L2pmVzZmdUhYdGhqTGZSaVZNZnhtMWJVZ0hmT1Y3bTJTeGlGbVpFUFRvNE9iV1czdk9JVFhnZmJ5MkRmQmFLbE9vSVRXUmtGQmdJNW1CY2c5RE5La1FGTG9RMFVjMUZEK1JYM0dLU1k3MzJMcjZUditpU3dZZnUvaUI2ZnRlTzlqdVVxODd6eFZBWVlNZlYrWmdPbHF3R3dTNDZXZ1BCa1ZBcVM4RmQyRjJYL3o4Z09yd3VxdXkrT1FXL3BPTUlLTjI1MFQ3OEVsS2pqRDNlVmZMcWxYbGJBYTZudDdDL3BGcFNqYXJTWENGSjRMQndnSVUrdm00cWVYN21aQTdhQUNYL1FoZGJaRGZYZDJCYlZ4VmhFbitCT1c3QXBvcWlOa3Z4d2tvUnl1NStNbHlyaVpRVWZza3FLVm92MzhRNmtpY0tUZ0Q2blFjY05JcVdCMDFsUW1idGdlbERVZkhGTndrcGxGUmRYcGdIa3BqNkhjZHdDT3lrMFh5b05qUDRlcUwzaks0S0VoRGpQNzdzRHl3b2crNENLWGU1bTdiZjhaRjEwcHRPSXM4d21hWDY5Y29qeXdVVGZrUlJQN1RydXRwblgzSXVZOUdsZDkrWDd6YVpjekFudEhqL0hzRVBCblVGdm5XYk5wbWxVOUNQbTFPV1E4Nk43TXBsWjRCOElzWVZiTDNub0wvbGk0czl5OExIaXZSQUtTclNrTjN4QU9SWlhmSHhZYUFEaGpiV2l4bTlycGNmMmR4dlIyY3hzSHE5TlFNQVBNTnpOVjh0WXRQMC9jS28xdjlkNWgwa1VLQ3IxeGpzN05EVGhzdkpESUFMU0VlY09MOTlDSUdmZklKS0xvYi9EVTY1SmJBUGdYb1hTWG54ZjJZSVQzVDZyakI2cXpJdU40OE5tTjUzbVgya0JlTmJTQ25uTlVpV3VjTVYyQzQrUUE4bzBJdjNkOTQrRFNaUDZ2THFkU2lGdDljSjFsYkQzaHo5K0ZSSkdaV0JpVUsxV0owRFRLc2NDcUhWV002M3FmSFZxUndCMGR6Zm5hRUVPUlBwekYyRUJYL0hzNFpuYmZWN2FNVS91YVFMa1UxL010SEZGamNuY01ET1F5ZzZ4R3Q2ZXVDWE1uVGVpZ01RdnFtSFVrZjNLYWVPWk5MakFneDR4dTJNT1dwRzJYVTgrZWh5dk9vNEYrTWdHMVJWZWRHOENRbzlWVXlHS3dCVTZ4cFVHTHh2Z2s3ZitjRUJ4Y0tZY2NINWJ2cnNkNmNhaEQ5cUlYRzUzK3ZDWDlFaUljUXVkd1prdis0ZUVLc0NtTHhHWDlLamc0eGdzc0l0Nm4yMGUxMEQ3WENLaUpVK3ZLcm1RMkROUDRSTmRmVmYzQ1QxZi9XTTh6dXVWaGZiV3gxWHQ5eTdrUS9Pc09JNkppcGh4RTBQRWJyMWlDcklIWVhRRVRieWIzOEVnVlU2TFNzMW1aT3g3VFAwOGcwQXhlUmN5UjA3dHRMdHNzZEl3cmU3dmRlQ1grMTJBY245Y211UXNEVkE4dTd1TUJBV28xY0x4V29nQWd3eDZRdlNwYm1yRUFkWkhNNVJtS0U2NUpJQmdLZ2pjaU0vaUhPOEU1eitGRDFXQmFuamUyVU1WNkRtcDdpdUxqZ0l3emRFVmlzOGJPSFNyVnBESmx3a3pXbnpJOE1EWUlVODkvTlE4V2NqNk9QeUtCY0VFQWgxeUl6cjZ2cml0UndUV2pOeFJaWi9KTXlyR1NyMHZNbnU4Y1JkOEo5RmlVc1FZNjhWN3lPRXY0M1NreUl5MWRWRmNLOEdZaERYUGt3SDV3b0JaTUl3VlF0RUJKZ1M0Mms2aHdtTlhGSlMvVDM5MVMvWGdiUWVVOTNqdkFVS3FTOHk3bG93alpqMHMvUmpLUzh3aDgrazVQeXZEVGVLVGw5dCs0NTg0b3Y4YnpKa3daZDVhZVl4Y1R1WDd1bFBHWmVuYUFHekhtT3Zkd0JyOGxWR2h4dEdtNzI4ZEFjUTh1TGZ6YlVjdjFRcktGOUYwQzBDTURqb0VXYVI0TWg4V1Rld29RdTNkSEdlelZMYUV2UDNWRm1kbEJLQ0oxQVNyVkZaUXFQYTdXVGRkaU5YUVVqb2NiN2syQzJuR1llUWFQNnlzSUFPSkdYTmJFQU1STER0dHJXcFg5WjkzNFowUTNjNW1zaEtDZ0ZpM0xvUnpNT2N5V1FBdlBkaldVd0FkcHZPOGpvSkhDc2hxT2F6Zk1zU1hOVldaZ2JjSEdaNjVqZFZ2WnFkSEhreFoxWFBzWnllb1g5WGtGZlJQd2UvbW1VSFducmJ4Z1RQU2pxNmEybkFhUnVKVXIzUmR5Y3B1aDF0ZHRYUk9mNzFkUDJCb2VJa2JJMk5KaTZKbDQyVkFmaU56ZU5wRUlYV2RPTVB2OVowVlBGK1diSVFicEJ4ZzhMM3JuNFd0bFVuRXlYTkJ0a0lNVzlNWjhRck1iTVNCamhyek03UlZWQVg3MXhaMWd3QmxLWWtaemFNRjkwVzl0aU90OWtmRkFpZkVxbmxHVXZHYzJLeFR1SGdvbXZDaTc1NmViT3pSdXhxVy9kY0diVnN0Qm5uVU5MS2pRd2JnVW1sZ0dZK1VYVWM2cnpvQWt0Rkk2OEtWSUhHbG1CTVlOQWlLRVUxUzMwY2ZZa2FiVXhkL0hwWWFEc011ZURuWktVVytoN09OVVEzbFZzR3JxbnNqb1FpQjRxemhqM1d0NU85WlBBWUc2NXZLOHh5T2FRT0JTKzhFWHJvMlltbWpxbGdUMjJKNHZKZEJvMitQMEM1SFNYTnVMWHV5dHMwL1NGM1ZFZDBJTU1HM0hVOWFpemxLZndjb0xBalJ0S3lwVUpxdXB1Q0Q5RWJkekloaHVxRnhhMzd5bWdWNDlYNHlqVUE1WmcveENHVUROUkV2WHJoUUduRFppTGxNdndnNUZvOHgyVjhiSFA0a2xQZGJoRUhFZVN6T29OR2djNTdQVEJPVE9UL1JxN3YzeXFUWlZZcmRJQ0NCcWNkMWFGNjF5LytORU8veXRkakNDU09weHR2T1hBWFhVZEhXZVNTSDlzSEFZbHpWY2FpcEJleVVhTkRRanRLY0xFczh3L3VGOThJVzQ3bmticWk1bGZYcXdlNml5TW5DTTQ4aE9XemYxdzBqVjYwbnZJd1YwU0FrWURtYTZUOEhNSktaYkljUHZsQnZyTUw4WldtRXI1TzFkWURFVUkyMS9saHFPSlBZYmNyZmd0REl5UDN1MEs1Yi9tTUVIa1REUUkxQ1UxRUhXR0s2U0U4OXBNYWtiVnhGWHlsUWJUaFdQbnZCNDZLVG0yOTVLRWhyTW9kZ1NmZ2YwRVVkQnUzNWdMQkVNdzJETUxTaUU5OGd1bnBsd0FaNDVJYlBhdW5ZblJrY2RvblRTQmRkTHRmaDBZREgza2tKQ1BOMUE3U21SMG9QNWFIajJKSW9NaVRLVGgvOTM2d0NVaXFmb2dlcnlML1lhN3JzKytkakRBTmNqcnZIL2lYZGRjeldTUXZvYmE4d3VQcEd1dGRLRmpTZHZzYmk3NUhZZzJ4VkEyMlN5Rk1YVUlIS0dBcDh6dzd3L0thOU83Z1JieFpyeFlnaWg4NXdOY2NZbjNZb0FIVldnSy9QbmZhaEdscjlwOUwzUlp6b0JsaFR4WUxiK1V5TUNCQWRDMk5PcUllOVpPb1JzbTlXalNLNE9vOXYvVHVtRUJTK0FnaksvVzhJMlNLbXhJOFRwbEVWcE5JV0JqU3VjNWJJSE0rQ0E2c1FzbDVxRW9pcVBZOW43WEEvSW1UWUxaVlZQYzNsb3ZRcUhWOXV5eVNWRktFZERVbTduYzl4b1RMWHRzNGZNV2RWbHI3SkVNZXZwOW9ad01oYzBWbWNKV09HL0tVUjBXWE9qWWVNS0RWSEljZnhmQjNncXNWeWhCTkg5WjJud21McmhQdU9uK1FvaHljc09PY0RuUjIzbVFLNXRBQUlYcTA3WVpHNzJ2VUkyTEUzN2NXRXM5Q2xEZm55d1Y4TXc4anBOZDNZVEJldEYwdC9PcWpLeXFNSXh5eCtkSGcyRTh0TXJyZXRVVlJ1WmM5Q2VNOS9KVDhNZG1SUFJJM2grMThTNXdRcGNIUFlVYVI5QjNNRGh0Zkh2b2xVazFpVy9ydVhvQ1ErT08ySHJTNnRVVFc2bUd6alZIbkY5YWw5UUs4U2hOQU1nNTBwRlA0NlJWcDVPdUM2WGhGYzB6QW83TXpsNjBZS1pVaFp0bjlsbVo5MEwxemliRkdSQUhaRG9ud2kvWHl4aVV5RUwydHdOeUZ4Uy9qTEhLOS9JN0xPTlVZbHNiZmdjanpFM0JYYU4zcDZGMlBYdFZrK3FrR05MM3RBbWdMdXUxeks4TSs4Z1RWWTVwZ1g0SE81bUphSUtzMGRGZ2I0aXR1dG03N1NYd1JPekZlcXYxSENpd2t4NDMxUnovcVYrVlo5QmU0NDFrNkMreDkwcktaZ093S1BoTTNVdTlONTNhY0hZamdvYnlKdFFtUk5oVXBNNjhacjF1UzNHV3UwKzhVVHE1RTBZelN2RjZGcklVOW1xTkpJZm0xMVUzVy9Rd0dyZGtKV3h4NnpibWJHTGdyb1BHWFpsZHpVUndzNEJjZGZJdFBJMWtBYkxReE43cjNlTlF2a3dTdE1kaFFnOHpQb240cS9jQ0JKMFl1c2l3M3NLTmFtSTg1SkQ1NlRRQTBtWXJkRjNxV1g0SnNOUnBCMnBER1VReDhIZlZscEwrcWFDalFXWThKMWo0NGs2cWhpK21LMkFMWHMzSktqZldoa0VlOVc5d3ozdTkyU3dUVjFTZjZkWStBWEs4Vi9CM1VBWEtwSUMrV3l5M0o0MVZmVlRVaXRNN3hWR05pUVExcUNGR0pPMlIrSUxDb1UwdU5pZVgvQ2lTQmdSL0IycWYzTFR3Q3VtVTVUZWdaeTZGT1hvZjc2RXZiZG95T3IyS2E1ZEg5aHpaQmQ0OW55N0xJdWc5eVBHUmFvQTRtRVQ5TExDSzFCSnFzNHptNFcwdzFYd3JrOWgxdHo1UmN4bElrWXV4VzIzRHR1bGM0TGtQdGUzbVEwT1BRTE83b05ieDdRVEtxTHBRa1QrUHJtNk5temNpcWlvZ0dZV21lbXJxV1BSZVpDL3pvSyt5anVvRDl4MjB0VDc3VU9RRmhLQTI1ZUhrWUp4TnE0ck5SQ1NXcldkb0NXSXZXUE9MbDRkSEJSQTRROEliVUlpTmowV3VKRmNMU1BSNW1adlJrN3RxaE5zaEp6S0oyc0V0bUlWN3Uzd29aU25hek9LTVpTVGkwTUxRSXMwZEpBSjJwckZnYkV4eWdYQ3VVUjlLZXJIdytXNVlGUUIvOHIwRjBVMUhYeUk5enNRQ3l3bi8vMlFBQkFCb0FRQUFCTndCQUFBOEJBamNDQUFBQUFBRTBBWjFBQUFJQUNRSUJBUW9DQUFNQUdWUm9hWE1nYVhNZ2IyWWdSbWx1WjJWeUlDZ3lLUT09PC9CREI+CiAgICA8L0JJUj4KICAgIDxCSVI+CiAgICAgICAgPFZlcnNpb24+CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvVmVyc2lvbj4KICAgICAgICA8Q0JFRkZWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I+MTwvTWFqb3I+CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L0NCRUZGVmVyc2lvbj4KICAgICAgICA8QklSSW5mbz4KICAgICAgICAgICAgPEludGVncml0eT5mYWxzZTwvSW50ZWdyaXR5PgogICAgICAgIDwvQklSSW5mbz4KICAgICAgICA8QkRCSW5mbz4KICAgICAgICAgICAgPEZvcm1hdD4KICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24+TW9zaXA8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgIDxUeXBlPjc8L1R5cGU+CiAgICAgICAgICAgIDwvRm9ybWF0PgogICAgICAgICAgICA8Q3JlYXRpb25EYXRlPjIwMjAtMDEtMDdUMDI6Mzg6NTIuNjcxWjwvQ3JlYXRpb25EYXRlPgogICAgICAgICAgICA8VHlwZT5GaW5nZXI8L1R5cGU+CiAgICAgICAgICAgIDxTdWJ0eXBlPlJpZ2h0IFJpbmdGaW5nZXI8L1N1YnR5cGU+CiAgICAgICAgICAgIDxMZXZlbD5SYXc8L0xldmVsPgogICAgICAgICAgICA8UHVycG9zZT5FbnJvbGw8L1B1cnBvc2U+CiAgICAgICAgICAgIDxRdWFsaXR5PgogICAgICAgICAgICAgICAgPEFsZ29yaXRobT4KICAgICAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPkhNQUM8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5TSEEtMjU2PC9UeXBlPgogICAgICAgICAgICAgICAgPC9BbGdvcml0aG0+CiAgICAgICAgICAgICAgICA8U2NvcmU+NjQ8L1Njb3JlPgogICAgICAgICAgICA8L1F1YWxpdHk+CiAgICAgICAgPC9CREJJbmZvPgogICAgICAgIDxCREI+UmtsU0FEQXlNQUFBQVlqZUFBRUJBUUFCaU00SDVnd2NEQ0FyQTdjQUFBQUFBQUVqQUVBQUR3SUFRQUlBUUFJRUFBRUI5QUgwQWZRQjlBZ0ZIUUVSQWZnQUFZaGRBQUFBREdwUUlDQU5Db2NLQUFBQUZHWjBlWEJxY0RJZ0FBQUFBR3B3TWlBQUFBQkhhbkF5YUFBQUFCWnBhR1J5QUFBQitBQUFBUkVBQVFjSEFBQUFBQUFQWTI5c2NnRUFBQUFBQUJFQUFBQWFjbVZ6SUFBQUFCSnlaWE5qbWNvQUFabktBQUVBQUFBQUFBQnFjREpqLzAvL1VRQXBBQUFBQUFFUkFBQUIrQUFBQUFBQUFBQUFBQUFCRVFBQUFmZ0FBQUFBQUFBQUFBQUJCd0VCLzJRQUl3QUJRM0psWVhSdmNqb2dTbUZ6VUdWeUlGWmxjbk5wYjI0Z01TNDVNREF1TWY5a0FCQUFBVVZ1WTBsRU9rZFNRbFF3TWY5U0FBd0FBZ0FKQUFVRUJBQUIvMXdBRTBCQVNFaFFTRWhRU0VoUVNFaFFTRWhRLzVBQUNnQUFBQUdIWlFBQi81UGZFeUFVTFBjTUJlVWZGTWhxbU56VHNad3NDdVpoNVN3bEN1T0xpdlN3LzBHR2RmVFk2NlNScHdCTHd6aHFqQXZabG01Q0lOYUFlZGtQOHIzdytza0pzMDc0Rm9DQThVQVJFaG1sbit0YU9GQkwyMkdDaWFFb0lWaHBCb0R4VUNlcGg3dU9LMXBXbnQrZ1g5VVdlNGc0M3FkcGZZRDhDUUJFTk5iQTU2R0oyOVFhRVUzYzhUU29Rd3p5eEM5eGVSS1VZSGRlYlFZN0tycnBYREhIVjRrQUpCcnEwcjJiOEpBSVdaNy9EN1VMdGxpR1NCQWVzZXlDa2k5enVPaFdnRkVGZTd6R24zd0d5TlFqZWpaRUhsN1AvWElqdjF0NzIrY0hONnRBUnNwVXNsenhyYk0waVhaVUxOYXFRTFBZOFhtNml2bVcyYVluNnVFc2RFVWZkMnNUY2pvUTFrVnN0S1JuRDRUaU9LOEpnRDhEOW5ueGJ2cFVNWlk0S1RTRzZWRWgwZmF6MjVaV1NNTEdPVzVxSTlCL25lY3NlQUdvbzJFWnU5S2wySkc0WDgwQVV4NXlleGRWdGR4bFFCOVpoOGlQRHJDclhjeVlKRys1alBLL1ZqRDZPS2RCZzdNWTFPcUEvR2NmR2UvTVRGMXJJN21CSUlhVWY2aFh2MEtBOForcXhRRjMvai9JRnhEWEtJOERZUVhQSERUdnZQS3RUUEhpdTRoc0EraVFtclJHOFkvL0dnSi92ZFhIaG5tcHd4dzBkdkpmV2cyd0hVVlZjMlM0YjJOZWwzNTY2eGlEUFRucjJtUGw1SGw4SmZGUmVueDlLdWJnZWVneVZsWmh0ZUZhTGl4OGo3dVoyc3pUaGJ5ZElmVWdLeXl4N1RCTEVyUWNQSkJXT0wxNHNUMmtucm10bmNIMHJ1OTc3TjFDZW4rUm1DTGlURWYyS2hBMGZQTEVOQjg0bzlsLzFtWnVZK1Jkd0xpSVM5SEhWck9tYUx4MjB4c0dFeEFlQ3M1SjF3dTJqaTJRcVB5Nk1HUjluYmZ1dUU0a3RvQ1d4TmNkYkZaWHRTSDJic3poZ2xBc3JwbU9UY1VsR1lXZzZNNGsyVXdyam13WHVSWE5RajRTYld0R3ZDQ3BnTWQyRGxENDRDT1prMDdNUU92cEpVNlZ0YVJBZ3ZHbXoxVVV6SzFUVXlFRXRFTkwzTDBzRHhmOHJjWHBjaXFXLzFqSm5BU2ZXZHZuNjlwRk1Ka3NmaG84VnNpajhkMUZic3JraGZTN3hrVUh3SnZXRDBEMW15blhIRkZJUk9keE5GbUJleDJwenZFK1UvMFlJZjlsdWlGQ29VMFdpaENWS1dZUFpManJ0cWg2MUpFdmQ5RzNVMTdQUXZSWS96djlzc0JwLzJKNFVJMWk5QXNPVi9Pc0VXMlVZMlJ6bkJZaGtTcnZEZ3FYSVd4UFRvNi9GOTBBUVkzbGt3S1Q2ZUV2bEw3UU5FT1BvU3VTNEg5bW1IMWN2SFNoOXk2Z2hqN1I1SkdKcnF1L0JEYTUxNERYRTNyZ00waml2Tlk0UXMxSzk3SzFpVllqNUhGV0FTRmI3SzRUNnVUUlhHOE5qY1JuakRZUVdHdVZDZno2SCtwUURFUU5sZE1zUENpK2krSVhCeFhwVEZCODc5MnVJKzNldFdhUGJnM09QSEtlcFoyNTZWSDJxZnhYY1kwTXJxN0ZWSC9MN1d4WXN5b0h2NkRKQnJDQzZ6b0xxdnhRQnJSL3BMaFMyZnFIeXBkdkx5aEhuRDc4SXNqcmF5Wkx5djlVcHVKT2M5M3UwTW5kTjNBOUlPNmV6ZndTVGU4cjF4Vng4bkxFSXJoRW9mQ3hzb1RkdXhDOHU1R3hMNjhvQi9vTXMzZTMyd1dLTTZDUG10ZmdDQXRtVnhkVW9CLzc1YUwwcFo1ZFJnK3hsRERDaVFCU2txRG9OU2dBMTkrbi9LbXpMK1FYbjBXckYrVEFLSWsvYVRuN2hMeWwyc2JBSUY2SjErd2JvMHpmSjgvOHlTZk1sUHpwb05mREtVQVhoSzdIa0Y0VEZSbXhsQWQwRjhrdE5ubVVqMGpJbWthK3lCT041ckVoUFEyZDhMYS9QbzFHSFVCZDc1aUhmQ0E5NFE1dkIraldFUy9IQUg0OWdrc1VZejM1UFRxUVR4UFFIcklVZ2hlWm43ZHZlNHlFMlhSMThyVDhmRVpnY3B4NTlic2JWRFhwUlNKSUFGTDcyNkxRMnlDVlByRFdLREFLdmZyMXhWMkdiWDNJR3RmdDJ3Tnkzam9Jd1A4YmZYZ2hucld5bzFlSTBTeFFDM2FWakFQNGw3dE40Nlg0RW1od3Y2OFk1bTRpVXpha2VxUEMrUDhaZFc0U0pCMGJxRHlEM05xb3NDK2ZZOUlCeWNYUFJLSHJJMk55MWZSaGNPd0Z1WXNML3VUZ2xLK1RTTWFvRGZCdFlHSUp0YjFyQ2wvNmwxVFE5bkVoR1pwQy9KTlNJd2lPTVpLV3ZwOS9BR1k2b3pOSFo1V0pZQ1JtVHYxeExJWTZBRXpiNHpGbzJCOEhFZmV3NGFJOTRHU09mNWhaWmhrVWlySklMMmdpc0FCMmIyOWRWeGhQQTBxTHU0NlNWcVVSTk9obUZJMnZvM2dtUFlURlNtSGNTUndYdVl5dTV3QWkzZDduS1o2Y1FUNjQ2SElKa1BJM09zWkRmYWQ3WkFLZDcyZ3N0TVVxRUY4OWNGM0NCdzEvVGgwbGhUdEZxdG56eFlzRmpaQjdKT2tSbkJNZTFNUUQwVDUxc2RIOEhSMVYxbVRuVVRxejlYaGlRV0Izd0xtWnc5UUFlOVhlbUNFSllnMGI4NE5wOTRseUdEQzBJRzdPcVVHdGFseE1HL214WHZqbjZoVVRyVjVvWGdvdk9rOUZUa0tEZEVPZnlHemJ1dHcwNVRBUlVKbmduTmNYZDZQNkVnNHB3NkNsNDNiKzNMaFpLWnhSZno2Q2drSnBhQlYrSldBTTAvWHZDZzBzdE80UitmYm90NGUvL0NGU1o1UUxXVVBWR2o5YTN2Y21SQk1LcnhEdnBxUWRmNStPN3RTbTdIODl5OWtHenduUzBxVWQ2aDNTM3hiZDIyckpGWXpNS1QyQmVCQXBabCtQR3dxcVVTN012Vk0waEdwbHdqT2JLaHhmeXhDaGNrcGVqd3lMank1cy9HTGJUdGJDRjJxdm1PZVRZcXRsYmdpWVpZbkZzaFlsb2kyUWx3YVk3ZWlXTjRxUzF5ZVN2SlVldWgwNzBuNUFZbUdlYVRtOG1EQ3g1T2lLd1ByQzBMN2pEcVN6UHpSeXVjS1Q3cjJTNDRVNld1bEdnWlF2OG9ERDljTlFWMDI0aUR3ZElSdHp1UlZlNUdrSGdFNGRRdUxVenlaVXh6SEZJdHNBOGtYbEZVTTJNREhjYTRIekNycVdwaHo3U2F5TFR6Uk43L2dhQnV6ako0UmhMRzEva2NUOU1tY0lMQ21CZUZNeEtMek5qTDhlQTZEL2NtN1dGSlZpK1V5ZlpqVTF5M1lVcXhUMUsvZVBVK0UxTFZWbHU3VnAzZWxEVWViamI5TDhXSDJXQk1BSVNCT0RMOXVUZWRFWVlzVGVYMGViRS92QklSUXQ3OHZYd0pSZ1JlbytUYzl6YkYzL2RveFV2VUpJNXBPb3ZablY2bkZ0OXBYeEtrZmxEWndGSUllSTlBUEJyNlE1c2QvdElBcFh1cXRpQ1dVNWZXdUtFdjROS2puRnRSZ285akFMUDRwR0YzUUkrVXV1TkE0RUloQzJGSWV1eDkrNjRnTTZwZW9nVU45Mmw5R0FBK1F6dWo2TE55MmhjdmtmSTFMa1lOTk5MaFdUS01xTU9qRENIR0QwYlNycE9JbzhVeE1kYzdvd2l3YkE0bVF0M0NtSy8xd1cvdUFiRG8rWkxSSEliaktYUmk4bEIrU3htMUNteTNrSXEvUlJ3WmJIaVZkNzM2aldldjdMT2VSaGNnOHQyYWRrc2xnUWp4YXN4by9WNUNoa2hzVXJJby9vcVBIYmN5TjZEb2ZWWUg2NmlXdHRVZ1F1OFNWL2lkSzlHelV4N1l0Mk5OSHoyc1lsNDUxcjVZUzZKekZzTnFHcmduaUs4U1ViZVNwaG9XeFJCVDJiV2tlSDZaZ2pKUElncWRxRnFJWkluUytjc05pR1dXVEhXYTBYQko3cW0vRVRROFNpbFZ0V3gxNWFLTFg2TzNVWUNVdzg0Q2I3S0lLYi9QSThxaUlTR2MyRTFlRFpGZ2k1VlhlUkxxdURESEkzZWpCWnZrRGhDZHVJWGhaSzY5ckhMaTA1ZXhXZEhwRjByRzNjKzZpSTA4b2tuZGNpTzhHSnRZRFlZbkRZaVpHbjBDOUo5a0thVzVsV0FMSDBNMDNmRXM0TVluL1VmWWVNQVRrSkVkSmhWb2RaY0dJRmRFSFJKU05uak84VC9yV05EOHFUUHFpQWJ6QnR6R2ZjRHdxR3hQeThnK3JVaTMzT1hjVlBzdXQ2NkRWWlRHM2VkVGYwU0ordmF1RFpVNzAycjlwNXBnZms3cFYwVnlXZFJWSFh0V3ZYYUlkdmIwV1NZdzFmS0lWT3lKM3FjUWxVMXoyS3dsRENCZ3VDTlh0RDFsT0NIaEVaOHpYQlMwL0EzT1M5eVZyZ3F0RVR5QU5hM3N6WS92Y3pYcE9XaFpTajh5SU1MbE9hRzQ4eXcyV0NSVkdXc3hYYTJwYis4QXZHcDBWYjdGQlN5UWp3ZlE3SHJnTkdvdXM2WG5BZWJmcVpkd3JwUnZuM2IvYWJObXYvWkNNMnVDZlhyemxMUVpYQ3NaM3N5anVXSklQeUN4UGJma3k2eEJiNVZoYWUzSGkxcDUvbVc0NGlQdmxIMzIvTDFib2ZNQ1VkNlFCY3ZWeVphdmtZRFJXd1RLbldoUnlscU0yb2p1S0p1TnV3UjlVbFhkZXdKSHpubmhHb2NtbXlCNDhkTEN0Wm9COFd4bCtDV3BWMmIvbGMxQjQ0cnNleWdzMnpyclVBVnhSOWsyLzdkejFTRUhia3Y0SlFvNHVwMlJzNnl1d3pDemFwNTZHVkZCZFV2VE5MS0M2eUdIQVhnV29vTC9vR1o5eGJvUTJDWGFsaUdoNHYrR3pDa3U5RU8xVjJ6a1JMT1h2a3lENUw1SEhjVm4zc0JIVHREN0Z3UjBrbXczdlZTVVRBWldxazlWdzhYUFN4WU05N1g5SzBNNlhBSUlrZk9hdzZvbXM1eldsZ2FMOXRBdDhqb0JTR3BRMWdzWGp5YWlPdjJ2YUl2bjdRbXFyajRJRm5GSWlmOURxUXZlNnZHOHNhdWRNUWcyYnJISVVnSWhXaU5ZSHlrVkJLbnh0T0lMelJKN2ZPMmI2OHExK0FCalp4alpVdU1QbVgvcFRZa211Nmc3TUhiSWdiRUZNN3NYMHdsZG1lYmlSMWVpRHVuODNtRGNDdjY5N005R3BQOUh6RlVvR2pqRDZUSWFKMGRTdHJmOTVpVFZjNVlrOGRtS29RMUlPbkI1eXExTVlwaVZmMDNjb2d5amtKUHhWMjZYOHJiWlplVS96Wm1hVGM5NGwwVWo0dUd1dDZJUzQyZHcwUm0wSi9uV2c0aFo4VUxVWXdFNkQ1SE9YSEdtQWRZVjYwQWpHdlI0RnNML2Rsckg2bWhyZFRPQWEzR2hibHFIV2RpcXhsVzVGakhlbjc4Rmsyb043S0ZDRk9jdWM2L25BWTM3eVFUKzZQN3FIazNobk1PaVFOemNzQVN0ZWovcEZTcVd6ZDFTYk9JNGg1Wjl5YzRhOEwrT29Gb2ptQXpiTE9Vb2tFVUkxQmp3UVVsQm5vR29wQU8vYWpXMiszdEZoUEUwbmRsSDJWYjVJUENzaXlWdU4yNWhrbkQzWldzaEFscTJGUE1vY2IxSkU3YmFlTEd0K1VtTDBHeUVXY2dnT2pPclpVeno2dnlwTUJ3YUFzQ2pVMXZlNTUvblNoRXhtdlFZblVrcG9ybEF0WWIxSFZqQ3c2TXRISGR3a3Ryd1VzZ2U1MXZERGkwNmxLUWRIMFZ4bVdacjVKS2lmSUlEUEJJcjdML0d1SGc0MFpjMHBqbFhFSmN6WFA2NnpodUxKZkF4anNPQ0VhYTRRdGZmV2FqSXRiTFcwaUxEMThhOFFEMWRHdmNyTlQ5ck9VR3c1amRGbTgvdXNid203K055SFhEOTB2ZVVZVWNTVU9wdjJVWXRwc0U3SlIwMm9iajg2TWhGd0lvL3ZoaDMyNDFFK1V0cUpjbGd3YTlJcERxYmUyV0FLMTNraXVHQWdQMzlmSHMwWGd0M2cycDQxdGRQaXJweXJrSnliQk9RTFZzMytFSExmN1RJNEp4S1NPUFJZZnlja3JXeUNmbS9icERGemxTN2E4WEFjMHd6OVpqWDQ1Tjd5U0VnSVdLUkJYQXEwMWUvWUd0MC85WW9yTGVlempKQnRTQ3Brd2xqOWVCRzNuZnc3b0IxN3RPUFFpaUhLaExSMS80UmVnRTZJdWtFMkJTelY3cEw3MVRvV2JqTS9PeG1nT3VXclY3NzAzcE04VDNiNkRZQ3Frd0VSbTFxaWwzVGxDY1BjTFhSeU81ai95Nmkvc1Q2OURHdTN2M1FyekR4WDRDd0c2TzNoNjI2MTNJSTVDeFNuemFQOHFCZkxwNEhwaHgyTDVDbituKzdTeDBVLy9idUZIeEFJQkE1QlBSRGVtV3J6d0lnYzJQSjQvUlk5UC8zMnN2eGtCbzF4RVNGS1liV3FkRzFxc3EySVhVZFAzTnBNQXp1bzN0ZWZncEVvL2FXaXhyL2J6Tk5HdFJQSDdteTJsZTE1alJLTDErRG8wVXNQTEg1ZWRnTVcwNUJOOHpNYXMzeW9UaTBOVm96VzE3WStCVGRFMC9VZEVEZDIvM055Y3dnTWwzKzA3WGJ1MXNSOFZtS1JqcWpHMUxsNzRLUW9HVVlQa0ZvQ2tWSDlaTDFlVnZldjhvWnQvMkZ6eXZaOFFmOW94bkRLc0MvSVhtelBTS0lycTc4eGcxbFcvUFhPU2IwdzhkRytOa2VBcXl1TWdEKzlGUi9OU2RPVVN4UEtVUG1LZ1VPVXlrTkI2TXlJVFQyeHVXOEVDZG80WmMyVjc0WGJkcDFsZGUxYmpHellrSGJhZ1lxTUpCYnZQZzhhc2x1Z2Q4RnNxblV4cTdveDNGK0lRcXY1VkpSTno2RVBqS1RIQUlhc01YZnN6U2pySzE5cWxGcnNpaFFRQUl6bzJPS0p1Z0hRTTN2ejlOWWdJdWFNeFZNbFNaR0xhcGk5YzkvS0tuclg5Q1hIMEp4ZldXMkJSdEdHcndsSEdTd29keW8vTmMzMEFDdFV0L05jakNIMThCREo1eStCTmdNdGREZnhoYlF2cFBseS9NbW02RE1mdnRleDBySjJpZHlaM2NZRy9YMG1zaUtmWVhaOW9ENldwQTkvZmV0cDcwYkw3K1hrUVVVQXRBYjNHMlFFeWc1NW9TaUVYdVdsWnNUdEF5LzdYUTJGQ3JETDhTWjUwbC95WkxaUjJDMGFMVHJNRmYxSU5pZ1NsTy9GRVkrU3BaYkN3N3hDQjBHTWxBVGFCOXRldmhKS3hRWTc3eVRjbW50VU91eFlWRzhQT24xcXgyWHBxZi9SNitRNEJ3NTE4anFlVExkWTNpb1dOZHR1MTlSbW5mRGc4eFkyWDhZOXcwdEIyQ0JWaVgwb2ZSbXljbXlDVmRScXhEQ08yNTlhYUFQRjBUTGk1L3dQYldjMXZscm94WWRUdUVrSG9YVEEwVWdLNy9wTFZPLzZsUGMydGxpTnpwS3UxY2czZTF3MkJCVXk4TTdjVUk1M0V2cHVEdER0U3dKVVhaaTVya0pzYmk5cTZseEVqSjdVSXNQcTVlWU0rNXJCU2VOM3gzVWI5RDFkZjU3a3F0SFdaa1lNeWVadzlDSGdMVSt5WXhEc01vZENLOG1qN1F1S1ltS0hQNTZCMEE2cjcxZGl5a3Irb0grcWY4bnhTUXFYNEZTKzV2QjJvR056V0NhZjhSVkZNcnd5OVIyMTgwdTRqUHJqSVdIRHVoQzhyZlllZG1nNzNyV3A4OXI0VEdoeVUvM0NPUUhVamdtdGMvM1FJVklTK3ZzQ3FmU2c2WEJLOElBQnpVUG85RXk4R1c1a3lwcDd4NnR4dTB3SzdNdXBoMWlLV3N4YmNTZFVkNjRMT3U0ZzhMNXF1R1lPQU94MWVtWGVEcExMM09JYnZ5WmVhMEhtTmI0Sy9ldUtEUzNzODVEQnJ5cE53M0tpZkVidE1tTUh5QlRhU0RlajRqNExYU0xRVG1KZ2tDcTAvSFMweHFLMGJlY3Q2aGtzQjMvV2NUbzhZMngvcmprSEE2dXgyOTQxTHBpMnRicXZQdEwyYW5UY0wyc2ZPL1NEOWdFMjY2Z0xyajBlTmpxZzFWdng0OUZVdHBRc3ptRm5RbVdOU0syVWpXZ3JhTjYyK1E0WENsMmpadTQ4UXQ5VnZaN1RDUytGM2RTcEVBekdndVVWRGw4T0hNTmNuckc5cHJUZ1ZiMWRKZDh6YmlXZlltdEdpMHhvYmFmZ1VVVm9WUnBvdDdURXduam5RN3dGNGhzL21pOTBaVktrWnNsbTJPbzJ6U1NoaFpwZDE3N1lsdGJQK0J2Q0RZdmFqTG1iV1h5UnhQaFBDQi95WGwySWJyeCsrekllMkw0bDU5OStFcmF1cjVtckFIZTNUWFYzY1BickYxZnVUSURIdzRvelZOR09RS3JvNUlGU05WaS9HQnhyWDZpYThBNXpuMjJkVU1QNklhY3k4ZG85K1VCckoxMzRoK0t2ZTBhd2NydE1VWVlkbURORGMrcEpveTBSNk1MTnI1VTJYS2k0dG1IU3lsZFhtcUpKa21xdllyZ0tqUEkvVW16d1B0Ry91cEFocnBJUFhzRDZmNUdaNXB2SXZFSUJaclRZMjVNcWlaOGVlNEtTWjhDV2lXdDQwMm9jdmlRc3JaMFhOUWU5MEFCM2FNdExmZ004c0o5NmI5WmREQ2ttd0ErVjF0VDhhUTFYWkFhVVFtUWw4ODI1VjJqTUwwQWZSVkNjTXZSTFZpK2x1MjEwd2lwQ2VLcUJDaEpQYVVpS2xZeEtSNytXTWRqSHp1eGNoVEtoZWpxN29rMTU0c2JlM21yVGsreEFEY3NoTDZJNnF5dFdqYVJ0d2RpaG5PS3ptVFZ6enVJNUhtemN0dURpVitvQkprbUZlMEtQVWtmQXVWOVlBVHdDK3RscU1BY2J1OCtxZFRzeHpYTisrYlhvNHY5WkdZQ2FQeUc4Nm01S3pkek0xdHRIcUxUOTd5b0xicEhlUTd5a3Y3ZWVaRGhoVkhiSGdqY2hMS085em43eU5rUWlPdkZ1OXdTSWg0TVQ1RU5rU0VjZUw0cEJPOWxnKzhnRnQ0VnVKWTh3QXd1SkhXUms1SnpDbFNQWmxXTzlBWjRndVYzSm01Zkl2YWtTdkhUV3hldGtWbldLSm1PT295YTZpVXVYNXhtYWFoVkJSTEQ1R3o5eWRhaGFoandsbVJnSnl1OXRKZWdWUHFvbThRWUF0aDJLK2Q0U0h3TWtubitvNlY5eDhWblFDMk9QejdGOURENHpKMmRNQjVUeTdwRVNEMDM1UVdPNnZZTmkzS251eis4VDBvNHJKUDFJakZmbGFucTFTY0dhWERrRjRKTjREbC83Z1JiZW1oRGlDSnY4MUNDSzVhSG9GUWY2OG9pRGZhaklvQ3R1b0RhU0huL25HUlUxM29XNE1xZDkvamJ1OVhJOEJoYmJzdE5mT1hiQmxzb0RjSmNGZTFPMDRSZnZQeHVmZlpMZ1JMZE9OTU1jZlF2R25BbjJGMzZGNm5ISmI5NXV0Z2NnRStzaDlNVEJnRUhvZDRkSVB3VlZ0OWpUeC9xMmlOWVdyNmpGNWlKYWlhdHJZb1FycmNybnVyODJ6SGo5UUpmdS9Fb053MWdqRWNld1djSU5JcUpqZzlieXRNZC9wVnhHNUNuMnJSUnJEVHRCSTBTWHphQW1EZUxHMlZ1RFRzejE4NldiSGRVR2xXNG9meUErbkUwNmlsQ2VYTFJHbllraFRHOUpLcjZPZ1AvYmFwWWNtallnT2FFZnJGSHJRYjFORlUrOUF2RlNOeXdTSUNvVzRHQyttTHY1UU4xbFA0MjhONVk1bVFKUXFhaUo3UmU2SThPU01WU283MUExVXhqaitvdjhnZ1VtS2RQNnZFeDNkRk1NdVl5cHhXMUFZQno1SGVId2hOaVFmMHR0SUhLS2ZOSkxpckN4dkRqdzNEWnRGTW5pWVJ6T0o5NUw4MWhBc0VaREdNZ1RZQ1d0eXRKZ3JMZHJIZ0JzY3ovQ0NmVk16eG9VU1F2ekRQb000SDVTdWVSVjBoUGI4ZWU4bzJobjA0VVBLTE9Oc0pHdEpHTW1jcldPRXZkTzBtQVFVREdIYkNndWVZTXFQWHFIN25iRFA3c3hoMHcrU0V2RVVNT0c1MDVGSzdLUmVSNWhlaE9BSEFsUnBtR3ZVd1MyUGk4T21yaUNIN3hJTTNkMjQwOUdGemxYRmtpaDB3M2RqUW1QT0Vma3J4ajBJMFZzZWd2bllYek9sc200UHJyeW14SUJZSWFvbVI5NS9pRGZQWGt0NXhxeHFOeTZSL1dVRTFKV2NIN21OOWJ2V3pkeWp4OC9QODZsbkIzbm5kRFljaGlZVC9wWmhaQmJRL1lLTTM1T1UzUkdJNVFDNmY1MFZkMFVOSTBybjkzRkhJRTROdU5FY3k3bFZzcVk5dlk5WTdyaDBhOXZOZjNGaFNpWWlGQ0ZaMlVqVlFUZFd1ckRmSkwwL1oxUjFvbEJXcVJEOU1IZEJ5VXdjWE8zdHUxSENwWU1XQmd4U2tmRXM0Wk1SSmg5T3lNeVdCVHRWVHlYaERpbm9qWU5nenpTc2xBQkhQWmJIQ0JEcEVFaWxuMHJveEppR1E5NVphelp3alNBZEdVL3lSQU1kdS9zL2dZSFlGcVdEbmRES1IrUUVhaGFDUVRvaEt1NTNWN0hwMmtmdkhSU3NQam5QTkFBWlREWVlOSnRISXBNaUVqWjVoN3hhL0ZvL1o2dWNnSnVOc0tSdEQwUXBQRE5abGNyL1huZGMvZ21qcFN3Vi9NR2o4VkJFTVpYb0NLSllnTDQxd2JGM2FKN0VHK2hmUGowaUlyeXpSZDFlVjhRMmsybFRWeUYwY2hGWkV3YnptWHNtMHViWi9RRjkrU1JKZlkxQmt0clRGKzl5dmtmS3pESE9vcFNsNFZVM2ZWbzZsbVZudXNQdGRyRmNnN3NWa3hIeWMvU3NMbzJxUElCZm5HWnpnWHMvSTRwV0YraWVNWmFIVUhFZUJwd2xiZEl1cXorNHFDWU1aR2N3OHFWeXRFbzFmT1RQZ1hWelc1NHJoeWd5RVl2WWhMbVlIU1lxNi9QRFhpZGtDQy9TRHRCbHVvYzR1dEh0R3YxSmFaYnhjVTlKejZSMUUrRzg3UnNhTUZreFhJUFg3L01CbTF0YW10c2FxVG9zMnBMOWttT2pIQXV3L0pIL1Fqc0pmRmRWWDJnYnV2WFdkbEZWclRpUGswSkVlQWtHYnlHTm1YMm5YMm4rZ0Zvb1hhL2FhVnNTQmxmL0paZlptdXVPemRrbGxBSDVpYisrNXcyWnQ0cVNWRHMveWRoa1lVOEVmVGl4aFNqaFJyVVhjcHB0bVROMFBkbWJmQTE4RG11cTBkS2l3enM4TG1wL3k2WGNicnJqZTY4eHFybFBuRTJaRW5jMndsRS9MUUErc1EwcDlVZXhQN2lrSUF0SmtYRHJyTjE3dnljbnQrZEFSY053VWQvenFTVXZtWmpnMDBLQjQzNEJCS1J4NVE2anpTTnBobG9ja2p3bDJyUDNCYlhRZWxRcmljUFpOd3d5Zno5L1dIN1M5dzAxQllIckk3Ym16M1VPUGVjWUpyeXRTT2R2RTJjYlo4aTJ2VjROYjIzT2c0eVZMTGM4VHVGSXhaeGJ5MWpGK2E1NnJzdVpIRlFxUGs1Smw2bWlyWXU5ZVM3YXdJayt3TG53YW4raWI1dzFzUFFaL3FQSFdSdk16bk0wUHVoa3ZuK3laWW4yc3dZaVJRMGJMcUtUUlBZRGVVdzEyMjRPOFg3MEJHTkJMVGhxN043Tjk2cVp1SXBTa2F1UjJTRmJPNitEZ2t3N2hhZXI2QW93bzdhYkFDMUlmeUhBZ1hNMFJtdW9QREw5S0QrSlZab00vbUQyQnZ0SlptelEyOGI0eThmejdYV2ZrRXZMa2gxb3JCMVM0ZWQ4ZXhpVjFPenErc1JJcUhCRml3MEdqZ2tiaTV0OUY3d3BEZmZ4VWVHRGt1VnVaaXBXTGh6Z3A1L09yejlCNmpKYXJiQU1sa0lZZnduWWdnWXdOSldpMjNoWFJ5ZzZlRUs1VjhqZFFIR2VzaE5TRkg1azJMQ1FlQ2pwRm5kQWc4YVBwdkVKaW1lMDR0SElIamdCaVlITnhPZXFQRlMvWDFLSnJqOTc0aWhHM21Ec0V3RitVbnFKdHFsTStLTHF1bjZabmVjU2ExeEJ5dUJHRlBOUllFTHhpdlRvbzdEVkY4cTBTYnFUMXlFaFhMd1JqLzZuNTliOXdBYjJzWEh4ZWhsR003Vk1QZUhmcGZVUjgvU2NJSk10OCt6NmRPWjBaamtOOW9YN0c3amNnaGlEV28veGIweWNZUnFNOTMzQXBYYVVkbUxQcWIzeURBbktFMCtQRngyTjJoYk9KTTNNc0hZRXlkUEVXZ2tjLzF5ZCt0NHZjQW5TNjgyZXJId2Y2RUEveGUvSW1KZFNSVjZaZVNRK0RoemtiRDlEdU80K0VaNDByK1RLZHFldVRzMENhd1A3NmhybDBiYWk5bm5WcWs3UU9ZZmJ3Y1RlVHIvWXUwVjZrQkUzbEhyRnM0K2ZGeG0rT2VFNURtbStTcXBIdFVxZEEyU3hIbjlYWVBJS2hNYW00L21ZcGIyc3VUTHVvTWtGcXBKb3R4TjZlME5xYlQyNGZKRnVLeVVpUkU0eWFzMHpJcFVrUGtNUUVpbVhZeFRIUCtZYUxGcGo3b2J2TFpMVnBUNlFaY1NsUkgyNEtDUUg3Y3dPcWU1SVBCa2tzZjhQL1RLdjQyZm9YMS9NcHN0SUZjMGI5MkpOZytPNVZ3ZTB0QlBpd0YwV0hweWcwdk1HWnVpcjBvckV3b1VHUWkxaG5PU3ltYm1hZ1hDSjlOMlB0UDYwWWdsbXMrZmFORlhacnlkMGdWRDlNeUtlSklDejB6TXY1RmhhUXIyTjdzcFN0ZDRyS1F3cEdscCtkLzMxT1crMXdzb3h6ZEZHMlFwK3M5OHlUbTF5ZTlmS2xjdmVwWjVTaDlmR1JsS2NVamdwY0VDZlZzTmxNZTJBUmZGU0JQVWg4SkZ5c2xJUmF2bmdaa3FkV2F1SHRnOHZIcFdybTAzSjBYcVhZeUx3MTQzRmJkcDdNSENmSUE5SGMrUU11SXZaeFRUNmFrWW5wRUJSeGZIdHZFZXZkZUI4QldJL3pZK0Z2TDRRSnFGNjBIVW45ZkxXQSthb203R1JoVHR5VHByd1A4c0xBNTZ4dktyaXRGajdUYVlpSCtzelVwcW1PcmxkYVo2REZaVStWZzREUDcxRjAvSEI1bVMvdytuMDhEY1V0ejI4eUJZbTJFNXZKbUtkbXgzRU1DcE50UVlvMnJzczIyV1lZdEFhd016eDBjRFZ1Z20vdFUxSmx4SC9ia0lUMTl6TTR2bEhra1FwcXlESUUxWHZCK1B6ZjlyV3VoQ2J0TnVkNUpmcm5RNUFzQjNGSlNON3BmaUxjWitidnQ1eUxJaTQxZUN4L2hIMGVWSkwrTTdXMC9hT0JBbHBpY3JsQytSNS9aYlBhdTdWKzBSbmlXSEJrU2V4N3pDWkFvbktoZ1RMbVhsUmZpNmdPMUZFZG9mVE9oVG5qNUFqMXN6SExFdjRIU1RwS2VoWGpmRWRGZ2kzRXorNjg5bDF5TWdIV3lGaGgvQkxWaFVsdzJHZ2tRRlNsQ05LbVBmOW9NMUhEZjRjajdKWFFCdVRTaVIrQjBBUTgzTFJPVGs2aThRRWRkL2JBVXFDREJzOHJqZ1hsNnlOOEtQN0JQaG9HVUNhVDl1UnhLNU5xZGVoQk0xaFJ6VEt5MHlCeHZ6czNDRWZHK2srWHVJNHNXeGREalZBVDNIV1FybExwTGZiNDFlZmdESEswNmxQWDVmOFJIc0tqMzRhdlZ5K0JjV2swNVJxWGJXS240Q0FnSURubjFRQTBkcDhiZ1VoeGxTeUFHNHBMb3JNOHRPSlQ3K0l6OVNsQXhFSGFRWk1mMElWVFNhOGNKanJvb0tuUDFZc2tsbVNjcmdVdEpwc1ZwUTVTV2FvV080bnFvV1lFK2ZzWFJzaEJpQ1dPT0JrODJrSm1hSzBHTVozUDNiRTJQVFAxQzIvRDNJNCsxcVBOT2hNTnExOFFxc3FDcy9hZHp0emZwdzNGd1NBSzhjMHdXRHhUbE84Mld1NThUdmpYc2lpdjJmVXVhQjNJcUJ0akVvcjZqRTNqZDlGUGtHdmR3WmN0Tm5ISGozK0RBSkRoOERFemJFUGh3YUV2VVdrYUNaTXlvaW5tVWN5Wkd2WG55U09rSHBURUZpK2lzY0tHQ0dRdmd0djdTMDVEWXlVbVBPVFVZWGxVVnRNUFE4QVBLekxDMGdPdllIbzlFdDROUGZiYXo3MDJkazNZWno5YnNwVkVqbXkyOVRvTDRLSHJ1Zm0zZElKK2NlWkNpL2ZLSEZWdC84R1crQUZPekJ0YVdYQTJHYiszWlFJRTd1QzNIYUp2b3AvNE9PcWk5a2xxcEpCRXR4enVCU1k1eUxCVEJYelB2MXpobm5vQnUxQWhVNGU1ZmtBbWgwQk9jNFppa3dSTkZMeEhsZTNjdUZEc0NJUXpxcWVnWCtYcXpFTzlXNUVadytjREUvZ05rM3FGclpnY0h4dCt4RzFwdmdRZThlejQzWEV3MkZkWlkxVlpRaGMyS2owSm1TUU5KY1Y5WDV0Z1BnQXY0cFVQdW40NkhFQUJXT2p3ZTFJRGRoYjExN2NoUHg4MEhVYnBWTTRHUlFqOGY5S3JENGNVM2xjZGFTSzRubzR5a1pNRnp1eVFqWHRLTTdVWk01d2tJRkZxU1hWTSsxMVFoa2x0eWJXOEdDQTVONFRrNVg5U3RuWmhNMjN2ZWF2aHpYTXdGeWtkNzlYanBEeGNNeE9sVjA0SEdNUktQNUJCUDRzczVrTHorNUJZM2ZISkxlOEl5VnJOQ1pXc21HZUgwMy9YVFpPU1M0Sno5cURpS3ArRHpWd2VGQ3JkTURLVkZWOGZ0UWptQnBBUFY4UnovSmZoOHBVYnMvTFBoeGpxNU5aMXFkVXpVMmdvVHkxZDFlc3pFSjBZWlZPR1BzeXFHZW4rY2hvWnpsbVNWWTNJMXpuMDd6VFk1UXZFdWVYNEx0QXVaS1F1cFBzaExoWFlxeHRyMDhSbEpDT0Z1ZHg0MWcxMEVJOThsRmw3Vy8xU1UrMmhRWGZLOGl0STZnSGxTb0tRVGpoZ1E3Njh1WHVVMmhJYXhsUmg0ZHNxVzBrK01Ld0t5SU8zbDZWMTJRaGpEVXhKWmh1S0N2cVVYMFgyNTBYdm05N0p6L3lrYkNzYjFIVkpTQnk0a3pPZzZYOGRMKzYwQ29odXlPMFlqazBweFdBbFh6RE5QRS9jYlBQb2NIeU83SjJiaFYrTUpTYjVmb1doczcxZ3pRbHRxKzF1cW9FVTZYRE1MMllXRk8yS0VEN1laZGorTDlNREt5LzZGYnFlcVZjcmtBNGZpL0hQaW5FR0d1TTBER1EwamR1QzloYURZSHN0d2ljSzhocHozdXFvSFZXUDVvZzdMVzU3VGxnYWtvUDZJeVNqV011a3hmK3Z6M2NWczJiVnR2dGFTVXplRjNmSFhxMHNSYVNNTWp4VHNLdVNJT044VUtsMjBzYzB4RnJrNW56NlYwbENSTmVSNnBPV3lvcS9ZQUdDbUpsc21hZUZWaFhjR2dwaG1xblY1UFRCMVBkSGVUcHNuYnNtZkNqcVlIOFlvU3dod2ZNbGVTVUhXZzJYTWpIV2JaS281R003L0MrVEpzU2FscVNGd2FEZ0hGVjZlUlh1ZDBzM1hOS3ZOUFp0QzVPQi9GczBIOUVZMlpEZ29BZUFnWlZVTGdpTktJYzNFenRYNWVmSTliUTVEV0hPMDBkVmxFaE1IWFVRcDJKSmhGaGc3ZDl2M2UwUlRoRENpUU11Q1pUY1pGQWZHSGdZaGRyd0UxRnEzNk5wOTIwVU5NTkZmU1dNUzVBQUpoRFlDU2dRWUxhVzFzM2RiZHNJWXd6dWU5SFJnb0M1dzYxcVVUdE9tb3VrYlc3K2VFbDdzSDdWR0dhOTNoOUg5Tjk0ZlVZTS9FT2p3cHlyZUhBRlFoS1pISFAzc3FoSDIvVXlDMm8vZnhsYndPelR3K2JrMTIrYysrSVZObFBldjZmZHdjV2dxZllQWWdWMEFySTR6MW96Q29HWTloMVVHT2wvNEpLeXg4Qy9tV3laK1JMUmQ2UGZMTEMwcmNMbE02RkFWcUVlM1g0ZFdkcm9xaHBNQWdYZWlaSVoxTzBESUk0WjZmVDdKb1haVkNCbUxRbGhUWW1abE9JMnliSDRhRGptbGVKZEJmMGgwM252aVFWcWUydExyaTNuTlEyZnIrY1VDZnNYL3lNaU90dHFCSk0wWTRpWEV6MjZxKzJoTVh4MDRpbDBDVmw3TFpZWVp3Nk5TWlp5clVJVGtscTA3MGdBSnNjV204VFZrWW04VXZLSmEvenRCVTl2ZXgvNjlkK094WTAxaGcxbExjaHF3NVRqbEdyRUJxV3NHbjVRdVVPTDFSZDVYR2RZSnJ4NmRVV3NwVDB0L3RtYnkxZ3pwaE81TkdrdzBDcjBNeDVzVm5wK2toVDlBUW52MWkrSXp0bkxzS2x6eUZjYWpha0FnbkhncFlocXhlSGFodXorSEpKQnlsNVRYd2l4czdpSGxJbDk2aVlYbVhlakFONlB4SmpicWczZU11b0RVakkyT3IxV1N5RmRqWk9Ta1VoREJHSUZ6M1k1ZzZvYnJiY0N3Yk5OcmhuNzFzakZOWHdWYjFZMnk4ZWVsRzZFTFIvT3RSZ0d6OFNLeTg5N0l1dEVOTksvbXFtWWNPWW10WU5ZUHE0NzVZa0xIK1ZNSjl4VmlCMTJ2VnoyVVBkU0QrYW9qenBTM0tLZjhpYS9JMTdVTFY2OTVIcUdZZjFFRFlrSHJXQnh6S3R5SFluMGlaNDRVTUd5cm9GYzQ1RWNKUnRNQkY4M0duTlkxc0tXc1JOUm9NaTk4cnI5em9sK0ViTThtNWNodGpFMTBrd1RJallZbUdsTTZ3LzlWS3JqWnhlcERKcXNrTmJXMURtRnI1ek9pNkdHR0s0V1pKYzdnNkZ4MmZGTFh4WTFBMllkZGNnZWFoYjMxdWVOUDNNT2M0eGRFMjFOMmw0WHg1YmVhb2E5ZnJrK2VHWnh0OXNWZWluL0JUQ0s2M0cwZTRzaUJhUXZkcDNpNk9kNWVjQTJadnZnWHJ3MmdpejA2N2xqd3N1ajhmeWRTcmxiZTFlZzZDTkxsdG1IUTBnQlJpYTVUQnRpdXlEb1RzS2plV0x0UmY5eDBvNVJDeWJ6ZU9RK0FmdHB4WUEvMXpTL1JGVnZpeVJaY2ttbTNRaVpVSE4xR0xqaW5Jb0FWMlg2TWlnMGVkR1h5YjRWRU1VUG1rSTBsVjZDNy9BWk5EbEVrUGJCblBzTE9zR09pblhFT3VqN2hhQ3BLeUNHRHR2cURtWXB0a1YzNGVmeCtKakx2OTBRa0t2bzZrM1lCSmNBUFNMd1YzOWc5WGhld2JDVXZ5eEtIMGFNbGo1SHprSjl4UEZxTmV3TWRCVWVJc21FSkhQMzc1ZzREVkFOR2JTMjcvdVl1ODR1VWFsdC8wLzA2RUlnOUs2eWR3cCtDeGpWUWtRNU00c21Oai9LcE5TclVGdjZzN2p3YmVUcmdSdTU3ZXhsNHpCUFJFajdmY1lWYkZQamU1Yk5IT3J1Ym9IRXZxZDJ1aU1ocm0zaW12aGVnT1FaWE53K0FwWXBIUUMrN1hoNjdGZmRUZ043NVRlZ1Y3YXV0bmpxQTZLSjlxM0I4NFBtUjZjNkE5cTBpNFlCc0RPU0NjbjNLa0g0UlFOWTQ2UU5pbzdlQW5lSHVHQTd2NElKSjlhOWNvN3RDMno1dkxEblA5SlN0QkFqQXFMZGpzR3JSMTJhSGdpR0xkQmhJTHp3dmhUaEhoNDZUM1FBOFMyOGdlSXhZb1JQdGNDeEF0ZGRKeGpTbHhRMzJWdDVvMVV3NHlTYXFBTjJ5WTIwRWFwb0FVQ3BHd0lDWWNuY3pCb04zaVowN2g3WUx3dm1xTU1JRWNwU1EweDg5Mk4xeDJoQnE2bXgySTFIN1VhckRZSExGREMxLzlrYUwyalFnNDllU1RPVTNyUlpTTE5tSWNLWWlRd25FL0NzQ0Zra0tnazU5MTV6b0VkQnlreHA1NzFsakFEVThnNVhMYy8vcEdFblNPY0Rpb2F2bWlXdHJIRXJJdHJuc216Y0FqdEMrZ3RydXUzT20vL0plcTQ5Y2poWG5UaCt0T0dLc09ldWNTUkFVZ2UwRUdqK2ZxWEh1dlQ5K3AxWVZqMGd6aEpTNzZCbmhZcktpeHhuemVOaVpvdWtPalY2NUZ5L3dHZmFyb2ZUTHNnRmQxMWh5VGdpOTIybUl5RUxvS2syNXhDanNLU3hadWRpMVNJV3hhVlBuVGF1RVBLbUsvT3JFQkpYM25oSXhkR3BLTEw5WkdsaS85eUJKY1gxc2tkQ0M1TEl4UEk0NmpUY1NhM0ZqbERJMjNlbTY0cGs5dFhKM0hRcnNwMlhGbnpxeGJpaThPS2FwTVZWZTZqRkN4U0M4Zmc2NUpBeVBvMXlBUDhiVWpZKzNiL0NUWEIrd2FsUkVqR29jMHk4UXV6cDJ5VW9MdlJOUnJDcjBwcmF5YkJXTWJScmJSWXd0ekoxYm5vRGIzN0pkNmVNRUFsMlJjbGQzZmdKc3Q5MWpNbVJoS0ZOR1pkTXNWcloxMlZkVlN0aDRBTHA0d3p4ZCtFMnV6U0k1RC9BT29GS3lHUWdvSGdPVmh5YitoVGJ0aFRvS2V2c05QWE1KZ004VjcraGIrbXoxLzFsRjVyRTlnRHgyZ2dCU3ViRWtESDgrVGlyelNEN3dPMm9hTk5CV2NwQmo4OE5reVRoNzUxUFNKNWZLbDBhaXhjcXEzMmdNZDlEVnlkRDJOM1FxNXhWMnpRZ2dXTEFpdkcrNmIzbmlXZWdpa0swRi8rUkpMcGRGa0w1VmpsYXV3RHdEYXoyR2NlZlhFa085bjU1N1ZwbXl3V3AxeXVqamdrL0hOa3M0NzllRVhveFBGQVBaYVRncDRJdmRaWDBtQ2NpRVZUbFpUNFJzREJIb3VkT3I3bnAvbTVtNFdYc2tGeFRuZG9NbmFWNUkzOVpTbEh6b2ZzMlUvOEZyNnlxRyswMCtzc08rdGsrMjArbjFGSDM3ZEsrMWRBbVhvaXdCbUZBbHNNb1JsVmh2VktaV2tibUdXR0gwSW9uYVJoSDFFTjY2aEpZUEdPbTFKNzRRUTBYbmRnMXBoNGdMYXdtR2Y1VjNJUmNyM3hvWHFRelVwNC96KzlJT0Y3YnJGUzZOS0pKb3RlVzBXNjRGT0l5YWpCaWNxNEd2VUpxcTlXT1JwRkhRSnlaY3o3cUhHd0hzMEExK2JoVWZvcHBoaU1EVllldkpJY2dHZytGM2o0dVZPc2JaNnJiaER5Sm5hRE95K0p3dURTRXRQL0h5bGRmZzg0VmNjZVE2R0NMWkl6bmhPUGJVTEtnWStXOW1IbU10TTNFMHpyVVEweC9ySjBGK2JVMUl3UzZ3MXBFSWlEc05jNm9VY1UxUjB6S3JHZThYNisvbkxJejltcklhR1IxclA4eE1HOXVuazgyMVJWZUtPWkgzUmRGVGpUVlpiY0NKUnFsc3Qrb3ZOOFQwRU0vajM2d1dJM2U1TGNTWmRaU1haM1QyenFWSERGc2JXV2lBOTdwWHhhZGViZ3lkQVdGTHcrdkZTaldhN1VibTFaeFZpUzZkSlNFR1JOVkRiMWhZL0tCMFgrbnVYUmNveEZwOENucGtYUzFOdzNGb2FRM29adVpWdHo1ZXV4Y29Kei9TWmMvZHJLT0Q2Y1YzajZuY0doRkppTVJzMlQ1S3p2dE5RbzIwZTdkL2VuSm1IZ1FCNlkydmtIbEIxRFYvcWVZTFpJQzBJTDYvc0dLZG52bnZ1VFdIaVEyRUN6VkJaQkZ3VGU3UGs5VGhlZ3hZNFlNQ0w1SFFpei95T3hHTUU3TkR6S2xadlo3dW5rWDVnMVlwNTB5emQvVTJmWlF0T21vV0dFaklVSUhqRGlSaFo1bVpqYUQ3VGc5cDhYd2x4V3cyR3ZJT1N6YS95anFtWFpQUmFtbWIzZzZRWC9XeUpTV2FlWjVwQmlIZ04wTXdDeXlsMjVFY3hGZ1hsKzRHeUs3RGNrNVgwUW5yelhwYU9zb1JNb2JhNWNvQ2JneVdyaDE1RjZIcU5vSTJmNmxNYUM4OCtrZWw2cDdTd08zMTFwelRoaytrZ0xYQjBMbkliUUd5VUxIZG05dys0VmNvRXhWTlIvRm5QaFljdHQ2N0c5ck1oNnVORUV3ZVNNSlgxeFg4Wi9DK1JXdlZ6cHVDekc1SkJ1ZTlOaWs2Sjdyd3hLZVFPdTl6c2JDZVY2d2MwOTN2eWtOMHZHUzRmL0xSeGduMjhIYmJWMzRSenFyVGVHYnA5dzIwVmo0bnlaSkRIWkJpa21IZFhjalEvYW5OQXlCWkVLVUZ1VFpyZWZScTlZMXJpTXZDZkQ2OE01L0RKZlpoM1ZRRlFGbzdLSTArQlRSUnJKV0VuMm9jV2p4ZE5MMlFGdVZnK2NEdm9vWS9DdndTK0lBMEtxRDdsOHRldDRKcjZoOHFDODlncDNvdHRnaWhQUzJlVUtYWWhRU090dVREaEJNbjZVWWZMYXlZY1BPZ2FDL2sxSlRrMW5OeXhpWkRLNTBjeXI4V3AxTDVvU0ZCVllpVFFTM2ZiS3hwL1VvemNzWHBlWWxHWHRMVGdhcVcveHBZeDIyQWxnMnlGeVQzZFhjaitOMVZwVnRoM2Q5OUFxajkwaWpWS2dacWFXUE9vVmZyeUFnQjNWcGhvRUZESjVFejZoeG5veXdpMjhMZWhKeWVtY2JLVHcvTXdCN0xPUmwwMUhHN3ZKNG9YVXQyZExVejdab2wvWXhZbHl1UzlWMWt4bFpRL2lZbDdNNHJpTkRRSXc1NVRyV0IxZjZ0dGsxdGw1bkFTVjlsdHgrU2RkRVRPMVJYMndzL0ljaG94VldyYTdjRW1WNW9la3N3Z1IrOVdWNjM5VTNqZlJiMnlTWTJPNy9vTC9PbFk5N3hLbURHSVpNZWhLczNqbjFLV08vWjMyVHZXWmJPUjRHanRneGh4bUV3WENsTGloS3hKaEVSdzJVMFFVcmZyR2drcGhwbkdGWFU3czhCVUJnZXlhbHVyUlBhTEVxQjZIdHk2SWxYaGZ1ZXZmMzM1bVo4YnFTTVRLNzg2SkU3d05KS3o2aXhRWWgzQzczWEh6ME53ZE5xTFhoNGVuZE5UeUtCLzhnQ1VBL3JJbTZUVnhpUE9ySURtZXIvaGVEdFBrbUpxOFI3N0V1NGN4aCsxWkFoVmQrVG1NTVQ1WDFkTXpaQTFMOTBhWWtTRUNxWUZOR2ZrMlo1Zlp3Wk82VlJPUmRMUHNNOUtlNUxKRDhEaTBscFdpUkxuY2RsSzFUY1FkUklIVjFLYzhhZHBGZktLam5PZVMvRWIxWHdIdXJVU2RDRWg2bzl2UU9rS0hqSEFEN0NUbHRBVm05STZTczZlYVBsbjgvQ29KdjVNTGNtMUk2YTFPbm8wbHRoNFVDWVdGeXpWVEZBZGxTV1l2N1pRMVF1aFBmSlM1cE1EY1hkc05sWVRvVi95MVZKc2hmaThnNEpDWlNXbXFEZnYyKzZEQWlmWXhiZytvNEFTSUlvcGUyVGVqT2ZxaG5vNk1wbTZLZEUvQTVsbytRalNURjJkSExwaVhmbFNWRlJia0FpWDdOdUxRa1pEYnVtb3crTnA5aE82OEx6Z0RoRm91SlQ2elcrb0pRNXdsTlhqMCthYnpreE9VMHZibVZjTVd3VDk3eFlOSHdRSFFLM1F5SGJBdEh2ZzZYQzFPemlONkNaNStwQXZRNC84d3R0K0tPOW9xMjRPckpLY0xYSkpzRGRyVEczQ29HZ1FTaFNEY0NTWUh4eE9ETFFiRFJObEpsaUNwNnRKZVFGNUlvSHF3WWZubmoyUTYrNk1sUHRneDdTSWs5RmFCYUZodmkyTXplbnN1N2RsanhxUDhKbnZMRzVMSWJVclVDUHJYa0VhMTJXRS9VYXh1SHlqSDBMeHJCVkR5ZWN2UWVncmtjSnR2S01XWUhOZWl6NTZ4ZWdQZ3J3OGhJNFEyVjQ2SGt3eVV4d3pqNm41N0VGMUMvVEFzY3g1RjhhVnovaWl6eFZMYXYzU3hnS3U3dEdmTEF6b3FKbFNKQmRvZGZma1plTElYeWpEZXBZL2MzQ0dwNVFCRlN0NS9pVUhxbnl0ckJPS2hFYmdPci9kRFEzNUZRcDlKNnBuWXpGSWgrdDcyaFZHSElJeXRIazg4V2xDOEhnMmcveUZvdFFvcVpMMjB6U0JRQit6TkgvaWVDc3FJVHQ1amdTUTlNaVlJaGRHRXdjMjRHQzIyWDRVQkJ3VW5sbldNa0xUY3ZIUVRIVGZmT2wwRHRZSzN2QUFjSVFEYStYeG85MUxkMGtPVy96Rlppa054bFRFSVRVN1djL0tybHo5VHRMOExScHY5Y3IzOUhqTTBtLzh5MVF2TXAxVnVybkxnY3lsais5em11Wm13ZUNQdk55OFNlMDFFd0ZNdTc1bkFLNjIrZ2VScEVxZHAvTlRSTDQ3V2pQVHRoenNwZVJtT0R0U00zZDdiZ1RxTGpLUWM1WGsvNUdIdWRTUmlaM2VPL3habE10VXNrWDdpbmZEOEQrQ25ZVzJOU09FQTlsMVFVcjFUbWJXZGh1b0FXVEpvTjZkUFpNTU9xZ292ZDZFdG1pZ2VDV1lLY0c3bnFXbmtLWTZoZlRNYjZPTWFFakRyR1Z3T2FvZXJBV1NwZ0N0Z3JxUXpHYXpmaGhXd3JKYTdtTGNIZHUwYUZ0dDVLNjdHUVJqdEJxS0JveG1BeVNBZ3kxN2Z6ZFFqYzhXdFRRNkQyOHU1RWVOdzlDYXlJMTFxN3daaWI1eFdyZHF2SEpNcGV0d1NyRS8yWkh6YXJBQ2JPWTF2eUtjalJjb3RtZ0pNU0x0eTdWZzM4Q3VkOFJQV3loK01sdlAvQWl0b0YrOFR2S0wxZnM2K0pSVTJkQVhWaThUR1FtUWpaS1J4cFVBc2M1cEhNOEppWm16VkNNbkkxRUZMclZUK1ZCQ01idkF1RkRNckk2cUV1WStwSWVqVXFhN2tNQmMweHVWZzBwVnU5YnUxQ1Q0RWhVWVlWMk9MNGZ0M1BXejlpT0RadkNOQk11YjZHNzhVVDlJajRtZXhNVzR1dW5DNHZqZnprMVdyQ2d0NkpXL3RuajV4cE9BSWJMUThhVS84Mjd3ak5zSmZaMU5aRzFGUUpGdXpxTG02aDNUek1relZsNXFGVUhEMkFWSTlSNWxuV2hxcVVZWXlTRm5XNGN2c3NhUnFkWmNsK0hFMjEvUDJ0UkhqTFhtUjdndHhUSXpGcHRUMUkxVjF3Ky9DZ1NlM0xOSGpTNnFZTlVWbEx6M0RNRU42OUt6aW5GK3J3RVpzMGxLTUdOdThXRlZQb1FDMDNLUzNWS3dTN2pQdXpraU0vZGp2L01XRzl6QjBpWnlXNk1PdXF4SXliZ1dTNjdsazVyZUtjRnNLTk9jOGZudkgxQkU0bVR1Vk9uRWlMd1p6ZEpYK3JGYlFpRGpwUWN2SlN1aXRwQnNRTER2T1cvejdqdDQ4RC8xdHROc09NbTlEdmRiV203bHh0aHgycC9iMGd1UHkzOEJoVjhoZ3p0YXY3eFFmOGVPVHJJbWJaQ0ltQnB1bWxGallsRlkrTkYyK3lza1djdG5XT2h0TTBUcHAyMy9JNlpWZGxINmM2L1RLN3dhaGZxRW51dnZYRWdZaVlBK3FnVjJnT09rQ0dNTGJiYlpraDZSNEpyK1lXZ0JYWE9yTFAyRENsbmdPRUN4UHVjNXpCRTN3alBYQ3pGd2YrVzRrQlg5ckduQlFrd0VtOWtITEUrcnorcU9SdnR2RXF5RW1PZjF5RUFseU9nVUU5R2pSdFlXbUw0VU5QSUV0aFUva0kxMGk4WHRZM1NSSWFGQjVtWWR3ZTF6WDZQOUdrKzJ3T2R3NUpVZ1Arako0UlNSZmI3clhzYk1RbW5lZXdIKzZBWGZHQ3BMeVYwamF5dm9FdW5aOEkzTEdiZjlSUVZ2Slo0ZkN2eWwvL20vRDJ1RWxuWlgvUUVLV0VsTDlDWWU5dnhpeERuOHZaUkk1bUVMOUs3YkJ0UVdVWjg3a0N4QVpISmNveEFnbC9oWDhyeUF0ZFM2ejZ5VFdkcTFrZG5lUmlKNWpCdGxJalorcnV2TTFEN29OQ1NWTzFGWFVtVmNSQVlHUmEzSEY0Y1lTMThIMy9rMjFzN3VNRnByOVlsNktianpiZHo1cUJrcjZXRkJtTWVTN2c4WS93RU5IWUVqUFVvK2JYZlpXRHZzcVBZbEZXc1kxbEVncVREWkNpRExnSHFaOHhEV1FoTW5ib2RMZDhud3h3dU10VmNTVlp3V1REdEFWazY1ZkJLaWJoMWpvUHBWZkJnM1Z0cE9wZThjT0VqMlBhRHRFaEl2ZVdXREs0cWxmaWlTOEIrSXlHajJzdEdMVDVBSXlrQm5aVmYwZTJyVGpuM2FHVWdlV1ZFVUZMUnRiUjd3MitqYWtBUHUzblRSeGVWWlVxbTJwU0NiYVhtWEtHc1FOZm51OTZ0QytxNDcxMEdlQUhOQmF4cWFkTkIzRC9XMVlnUjRiQVp0WWJUWHFwVCtwRHViK3c2VzdPdStSeEZWSm83bjlJcjUrM1pIbDRuM1RSWGRid1Bkc091NGlnempyNExqcXBPTXd4MnVpYlgxTDRUWUxObkN0bEZUSU05Z2NHZEU5RERCQ2FjUXJBTXFWWXp4SHpFaSs2VnE3UnNMYS96SU1xcWkwa1ZQZkJsekJRZlNKR2wwOGd4UmxQeU80dW13empTd3lmNTVFR2QyenZZWm1wd2RKd2tMM2pEVUpwaWFMZCtiakJ5NG85WHRTTlh6WXpTWkJ0RzRsNXpvUWVLUFNhL2tBemVoSmdNN0tOOVNoSnhKQW1BRmhzZGNrUkdiYWVESWZpb2VoRUlFK3MrMFBoQmtyejFZV1JaYWtBYzdMMjZoTGNMTjkyaC82aXI1UDE0bG5FWHhGUDMxakVkektlaHNkK2pMbEI2N25RVlhNd21nM3M4TE05L2xsejBoRzJ2WjlDbFFHbFBFOWRMTjR3d0VmRS80Q3YxRUVBalhiQnRqUzRldklCQW8rQ1JmWEdubnNrWGtPQjdLR1pYZHV0WVd0eElla2pqeHFsQkd4aTFnMm8wZktNVFVrSmxJc015dUZ3cWJnSk84eVc1M2x4THF3alIzTElib3FZVG8rR0cxUFpGTDd2NDlNKzFhdzkyR2RhMG9nQmdtVGpwTENGcTBJODQzRXF1TzdRNzdUbVJsQWhrdktmUTNZaXhNcDd0UW1oVGZKenduODBsQ2pDalY2QkdrNFZBNkFleXhrWlF5aFhsbjd6eTdpTXFoRW9ZckRPOUhVQmZDRG1ZbUNUOUZzSEFMZE5SczhvQ0FCcy9HNzBoZk1WWEIyYXpHeFdkOXdwZzhLczdsY3Mxa2xCVHhFbzliVVZUMUhDek5aOG5WV1pIbGpzQVZXbEJlRThLdWo4T25rMVVKNkFzZ1o3bmlTUWdkMmtNMmJFK1BuaS94UTdKUUtKMDNnNm1jOGtadnUxbkpuSzVKRFdIRlc0QnNKb3dBTi95cys1K2ZQWi9pUnBVdmJNZEFqekYrL1p1U2REQlpsTFFVWEFKM1dENFJjYUozbG04enpVdjk4VENjRGdsU1NQd3AvZkVpRjZSbjRPL1FKVFEydVkzTWVBRWs3b1FRSzBDRnhXQ1dibDFRK2FRaUQzQzNoQysyenJyL3gxUnN4ejd6cHRWYm5aK3NzTHMxUEpya2ZRNXFmWVpEWWFkK3RrZlFTRDh5WVVyRDVSQ1JPNW9VUUZVRXlXWEV5Ny9PN0k1MU4xRUkwb2xrZ3YvTk5JMFZnUzVpeG9kd3J3SEVraUhZRmphS0Z3ejRTblFnTDJlVEdPeldMS2RqdDJxd2UwcWdCRExNWU5FQm56aXp0TUFhby9IUEZjdE9OMGdwQnEwa3JwRE1vVEM2d1QzT0t1amtXUWhEVDRuSDJRM3I0VzZhS1ZXNkR1cHI2N1ZkTWd5WVU0eXFWbklrN1NjamVxV2twVEhpa1ZMOFdTaXY2cG90bk1qMExiTDhGb09MQ0dldTBBdGVJSEJtckh3cjkxRnB3dTI1SW1vTXpBdmdYNDF0VFhwL3pFSDc2Rnp6NnF2TVZNTWFmVXBPdFVXZEpvTGRadnE3Rk1mYnpHZDQ3RTR6Zk15ZFNoRE41Uk5GVlF0ZWY3bndYSWRzWVpYdFVhWGdNSm1vaHd6aW5UWnpZZHh4WUtZK1dyVW9ISTFFRDdKUlJSbStEM3paU0l0UUZDWkxVWTVmVXYvUm5oVUhTb1hRa2t6YlVpTDU4UExSbnVrZmZpWXJhRE1vTU1NSFlLc2hiU1lNd0Q0bkZCVkpNbFFBOHI5czFSUTBDQWs1Rkw0YW5QV2ZBRittVkw0bFNMdzlwdC9ZODE2cEtOVENGOFlueU9heWZEVHRtVktpOGxrVFFKeVhZOHVoa2lHVHhXZ2YzdGhRbVAwWkt6ekxvTDJGa3paeC9iT1E4d2JpSHJaWHoyWVIrSkM3eHJiRDloS0NuRUt5SCtWTnBBUnFCQk4wYmZzWE5LNEFjQnJIaFMvTnlnM1czL1dIRXNZeVFZd3Zvd0F0ZHd1SFNkS1paOU9jRDRHS09icWFRNGhCNnFjUmdNTmk4REtST0VwZ1o0bmFSRVpuWWtTY1dLTitlRHBwWHJleXJPZDVKc1F6VzlOYVpqZWZjKzI1cHVsRGZMMUZDbW1CVC9NcUtLckl0NzRTcGNOT0Q2RTdvQUplYlkzRDZPU1ZCUVhVQ0oyZlJyV1k4N3NBQW1MYnhMd01SZ283djgwb3pUTVorOWdpMWFuVXJNRStZRzJFY3RaVE9PMU1lQmh5TFN3V0Vjc3NvejVhaFdRRjBtdTJvSFBXOTFSa0R3MVREVjNrS0N1R2lMaUdDV3BrZXhJVTRsNG40cjFkcW5DY3hlY1pVbE9ObW82eXlXdGloUDBTRmRibnFlRDcyc2ViRUh0M01CdFhQOTJqSngzVWk4ZmpybmV2TXBNNFBicmI1dGVLK1J3R0lxU0NrWFhaaUp1SkpBWlgvRFJwVlN0akpESytGaVYzUStMNGk0ZE0xR0VjWUxNeE00ZERORWpGeStFK0FXaEdPb0tiaXByaU1XQ2l4QWZWRHYzdkN6SmVYMXN0OEhwdjlkWWVCaGJXUmdSa0k5OGlvU1psakgzOXF6MUpEbXFRNzhCbHAzRHNPOFZwR0VHb2ZydWE2OGRwY2czV3ZpcjUwT1dlNFBXVGVHaFo1bjJlMGNZYU15YTgvTDJwQ1pma2ZkbEFKUVFUTlZIWkdha3pCMTB6QUxOY0RwUlFjdzZjaGhDNlMzaWx5ekQ2d2VIK01MbFJlMlhpMXBBTzYxWDZncEUxV2NjeUdzZjhlUC9RUmZlUlNBcVRXL3RrZHpXckQ3NXB0TmpBTDR3TEs0SkJ6cENTYXE2NnRzNVlpelhaVkZRZHVjUlIyNUxOc1g5bEsvcXJtcHNiSENBNmwydUE1bDFqUkp3SXZmbWU4WC9RbWcxOHAwYnAzQ3ptQ285cS9PMGVDak5JV2ljdXFQMy9LaFlYTStBRWJTcWI1UDdGL3VaVGhFOVZHR3k3REs3NS93c2oyMXRHMHFkS3ZwOHdPT3MxaUF1QjR5dGNlTXdHZUV5MlU0VWl4ZUJSZE4rWHJ1Nk9IeFpIdytQS2dIVGkzMkdLWExZekhjT0VYejdadFh5Y3RNcG5VWVd5RE5rcHpIWEM5enIrK3FpMUZqc2p4dHAxU1B5a2lqQlhta1dyUVhqVkowUmJFMjY1Wk1pMkpiQ2ZnVmtQa0RLendwZEFhNk81eUE5YU9oY1U2c2J6MDFRcU1zNVpkZmhuZkEwblRMUDJuV0tVU0tHQms3RGRrYnRVancvbUQ2c1FxMllBSTBESjR6L0Y0YXBwZHZ1RFJTNjU3REU4Vy9qdzB0T3ZaM0poYzJWUSs4b0E5L2V3aTRuc0FHNTNoZnZXZG5GSnVmbjIvU2M0bHZkWjVhR01CY3pzR1B6OGxIdDNJK0VMemlqK2hmOUd5WHVvQnJXQlVIYTAyQmx5VmsxcEMwSnJybFBya3JIa0wzeWxXbUtwVkx2NnpXMDlNaU1VaWJ5bHpmd3pYTGZaamh6dlBYdEZDeDhsUkc1eU85d0ZoZWl0cFhacnhGRTBGaE5rMmxMZEp0dStTN1JjWlpMTGlBQkxNWG84Zm92VWNNTDhjQjkwSG5CSDkrSnhrWGZIR2N6WVBZa3ZJNlB6VXU5SmlrT044dlRBWnlBNWM5YjYvZkhFT240WDhyZURnYWIyR0c1WGFCVVFlcnphci9teERUb09xVzdEZ0x2TE1xYXNnYnJaYktXY3I2SHh0NnJrY2Npb2I1V25ERWR0UkJaWklyT29xZ290L1k3UXdVZDV1ODAzSHplOWVSQ3IxNHY0V2twZHBpYXdqOFkvaVBuQXZaVVpZS1lFcXgySHcvWE9aQy9RL0M5MklBcysyMjlhTytuWVhsZEZIQmlCbG5pN0hWbjB1Nk5SVVVEOVlRSG5yMnlTV3huSnYwRWNDckNZWVByYnN4SWZZNU83S3B0bk50TTZIZWs5SFRROUpnaUpCODFXTGtnWEhCT1hJcTAxMmNkNTBmN2VTenRFajRnZ21tTlB1K0g5YmhqUk55MXphbUJLQU85UmJrQTdyanNFTkFrOVhpeWtCU1VLc0JmRUl0ZnpnSjBDcXVNb2JuM0ZtZjF1V2VQZW4xYk1Md0hydDB0RDMzcDMwcEkyTGp2R3Z5Q1RsMldzcGdBbFFyTExtS0lNYlFsQjFiZWhoZzJ2c0VDNkNpSE9kekxmazBwNEJjRmU0ZzBDUG4ySkZ6K3J3emZvM3RaWEZNclRjc05xaGx1ZUl0QU1kbkVLeEdDOERrTmJEZjl5NERtWVBYNnJqZENEaVdETFJrTlNtam93R2wzNFZEeVVJU1gxYkhVT3pTNlZpN1NxdktzaVJVQVBuKzN0c2dsTlJuRm94Qm8rQUNJbnNwR0xyd0hNdUpOVkJhMDR5WHlvdk4wV1cvZndsZXNFQmZwT1BsWXgva3JpMXN0S2d1QXNONTloQnJZaWtsZzJWNFREbE1GTXlWczJXUkRCNmUrZG9CS1M5V3FFeU5wbm1tUStWcmU3UmNjK0l1OFdoWUJTMTNDTEZGTEl1SnVDWHR3cHZub3pqa2ZtSkI1K0pwbncyRDVxV3drUUdOUitYSVdkaFA5V2R4RlVvK3hzM3hlcHM3OU9DVFhKdmFxdGtUdm43Si82N3hRNmROd0NXZURIaUp6eFBtSTJsNEVyYXRHRk95eDQ3Z2Y5ZU1xTUxiWXdnNE1xOEIrM282ZlV4T1grSGxHYkp6RXJObUNFdjg1Q0NFbmlaRHd3b3pCaUhwS2o2Q1VXLzBIemJnYmR1OXZYbFJUZVNqTWdwd3lYaXdZTXdiN2tzZnJBNkQ1ZVlWQlE0cWVNbElHbDhJOTROdk9ZNSs0MzBOR001UzY0VzhyT3RrT2NjRmFvSWhvenVJTkY3RHJZdWhqcWhrMXB0N1VuMDgvTXBFaE1Kc2tmdTcyOVlRRk1MMGxTOE1FSGpreHpJYlB3cW52c3Vid09qbVFRUmdMaDNRc3dtRWdBUzBaOWR6ajFrYnAzeExnbmx6TEZqZitiL0RNUGJyby9JNHl6NlJkZU1xakk4NlRqK1gvcEtlQml5ZTdHQzJjZzJVYVhPeEpJSGxnY2pZRTI2M1lJanZ4YjkxM1JVYXhaYUR2MEYydjd5aGdDMkRVcmd1bExNcGY5ZG1JZzBtdmFnd0NEc3k3aXBKZkVLa29HcWN2N3pUelVKQnMxZ2FwTng3akZURU5oanJjZzVnQkJId3NlRzAvTHlkb0JTdTAwTENlczlXZmtxbzdaN3owZFRuZ2Q3OFJoMUZmZGZXS2JaQ0Ixc1M1WE9XR0xZQXZWYTBIbGYwZFMvaFBPUmRNbFdaZjdtZnB2MzZuUVRCUmdDQ1RKT1N1UmQzQVNQTEdXWkVaZW5YMWhTMGRPa3YzTFZERnlnYXU3OXM1a3l5cE5lOFltRVRoQzVlSVRoVnJSckE4b0t5M3VWZlA1ZitxOGVUd1k5clRFcnlwUGZCb3I4MC91SWExeExxQ0RxdXNRMFNuTWlKdXI4dStOTWhMV3k1MXdRdUt5R3BIVUlrNzR6bW1FZ0V1YVh1WUphMkt4K1dxbzdVMG55T2pXdmdJdUJZRGVHYlRvRVAwSnBmN2ROUml2MFpXbkZ3dXhUTHB6UWVBK3FMbnNxcjhEazQrdU84anBGUmc2dWl5T2tiVitaUGtqN1I5b1lqMnI0U2dINUNDU3RWcFlFZEZiL1hBWWNkMHg0eEJJYTVLTVAzdzRQSW4yaW16b3FNQTBncnZBOC9kSE4xWWlQT3Y3ZVRSeHo3Z3BET25oM042NFJtNERoYjFNc24yZktqaEZiWjV2N3h6SlphVDl6RlV4WEpXVDFkVU4wOFRlUmJJWnI2Z1JPV2NvWURqUGU3TkJEZkhWWWtrZ0JlUXJpcUEzVkx4Y2R6d3pLTEtaL1U2Q1BiSCthRllrZzJoZ1QwRnk1cVlVSHJGMHphVlU3c1VMU29PSEk0bnJMVjlHTFRlZy9rTjFDMzhrUGtBaGRBaERCSUpqeVMrajJKVHNqZ05GakhoSHIrSkRFbExPMVNHdlQ4NWloWS9zeng3OFkzNVQ5dlgxQ2huVUlEcmhTUVFJZjdONU9WVDhWVHVaQW4wMklrYXZnWXJBSVlvS3YvYkVzc09rY1BMV2Y0WnpwUmJZT1dPVFZWank0dE9PVHJLb3Znb1hwVnB6SzdnRkhYWm1vTld2K2svOFNGRzB1UVg5djNwKzkzWHNKWTB2OG1yTFJPMWhDcWdjSmhuMGE4WGZNRXhNNGYvb2NrbDdlTThjaERGMXFjTTRISzVuMGxVT0JFa2t2Sk5OUnh0eFV4TVZPeTJ5K0hyd21ZR0VQVWxwazRlRERvOTZ6dVA0NEl0bmFYdkV4Q2lOYVlhNEdlOEZNSlFza0FmTy9ZTkMvMWxHRVVqNmJYa3hjd21uakxZUWppTDVhVlBwS2VkQ0pnMzJKYnpxaTB3OU0ya0RZaUdlQ1c3cXo2R0ZnYS9JYmNWOGxhU1NxbEpOMDE0cDVjNGJsYk05cDlFOWpEbk5Hakp2dWFVRGpBcVNhcUYzUFZQbnk4am00aUV3WE5zdDVVVkZKMDF3Tjl0QUViNFAvWE8xQXN6MHhTZnVwd0M5ZldjN0M2c0VTRk9CQW9ReHZZVlV5YTRTbkljMDIxb0xNMHprZEszM0lQenVkNHp0S1hlbEErcG0wajY2MVR4d01yYVVsREM1N0twZFdUUVNHVTc3eWpiNGFUaTYxNUJpcjBSVDJDSkZWaS9aUXRHVDVnVzNiSnM5d25uRDFDVDFySUdIZDE2YzBxS1MvOTQreG1wM3E3VTVpWUxCVnhJQzFqRWw4UWlxMXQwSEo3TkppbzlydUlEOGZsUHJOWlVvZDFDZHFPaEtXd2xhWUNPWXc0Wnp5ZGFlR0R6VmM1NkczOXV2cUtuNG5RdVlXQ3ZkOTBhSVJOdUFtVnpLTWtrZENnU3lJTy9UendMOXpmWVVYVlNiay9lRWhjaGZsOTJZYUVXS2JiWTc1VXg5ZFV5T1NBa1psZm9CREtMZUZVM3ZWV1F4UVBLdDFIVDhCNHNHOXNtOUo1WmFVMGF3TnN2OFcvZG9tRHR5Mzd0RmtqR3JKRklmRmZ5NDlkRVFaUmhHdDc1T0xYQmRCQmN0RmZCM09PR3lubjg4ZEpPZmk4aUZLaVNnNDRERm5EaVNMdXNNMThkRkNObk9nYnl4MUIrSUZRbmR5bndONWd4WDU0bFlxYmkzRDk0eG90bUxuWksvOFFyVGVoMlp4elE1VUZWL21lck5sME9GcmR1MnE3SGVETEpNWDh5ckdqWG9aeXRmS3dmeGxlM1U5U2JFTW5pa29YM3lIaElqMmsvd1BTenNRcGI5VlRkYXhYM1UwcnQ0U2Q4N3hGYjBUQUZFanI0ek9oWnpmUURQZHN1bmhoTzVJZnlLSDNoVzgvMHpDYkRwRzRRQ1NnT3RGMi8rR3RKd2RRT20vQVh4WGI4MGVhVXBxeHlaNzgxcEx6cnAwL1NwV2lJWWNSNktCU2ttcFNPTHFBcmhpdDNlanRxSWJ2YTQ3QVU2dlNqOXVldU04Rk4wQVM4UWxha1VtTk85K2xKdWNPa3p1M2NwSTc3MzNtbHNtTVdVbnVmNUNaWXN3cmhTQ0x5TWJPUnlKaFErVkhld2l3bDh0MDY1bzlDNldjWGZhWmZmdXVLTkRkYnY5K1RHVCtueFVqazRKYTRMeWZEYU94OXRQZU9lSzQ2Z01OMzBJY2M0TVJFWXdpRkRRelJVdDlJVzg3eHBwWkNwRncveGVKU3o5L1RsR0E2MUw3MWxNZW15UElKNHR6emFEWWx1RXZJWHlsMEpURC9MakMvZHJiemdvb25KRkkvOXpHSnIydktITGNtVUFCbXlPNmQvUitYL0NLWVh0cUl0TkpMV050dW1zWjVKdmJab0hFdDI1TGgrcXcwa082eUhkdXFaNUx6cWpNSWV6bVRCYUZoZEJkNXkyT2F0TE9GQ2xoSVJHMHFhNDNIYUFqMnFSK3l0RzRwanVBTDByNWZXTEVZV20zYUpTQ1JWTkZvQXJnb0NpWkVGRXpCS0VhV1dLZndDWHhSQjFsM3VsbEJIcVJrbFBzb3dxSUx5TlVMek5rTlNYd3FYNzhLa3Rsc1Z0STZFZEVyTFVHNDdhckkrZmk1bzcyRnlETkJvNVBEMkthditCWjgyYTlMdG1ybU5YbXFHMTA3VFBkRHAyQkVCbmUzdTVLbzlQdjNLcVBLYkVPT0NOU1VBN05kb1dXQ1ZwY0lHYitqdTVQaXNvT0w4YXJzYzBJSWRjMmtydmoyTlpQVGtHbTJDUmRVUWNQTTVhR0FvaE9nYlRXZ3ZPenZCU0ZFeHk2VGlXSU45ZlJVbnFKdzMwdElIWFFaa3lEVHh5M1ltSzc3U1dVMzdyODhQUE9oWVBNUjA0cXNSQmsrQUJ0WHB2QStuNGM5YU1oWEQvT1M3NDVUaUhwa1gyUmUyNGhPa2ZYTTBrMHVjLzhJdXR0RGVHNm1SVGY4QlBIcmRhenRTT3FSL1pudk02QWxFZDBjaUtUY3dHSWx5d2tmd0ZUSG5ITFB4ZUVndkZ5QmFHelRBMHRCU0Iva3RsNE5kb0lnQWlDRjhaV1Y1T0FkalRCM1E1ZXJQaDNjTlVld3lhcFAycU9LOGdOTmQrZzRlRWt1WW9IaCtNaE5zdkVEQ3duZFFuTWZpenowMi9mVDQyaldQaThydnZFeGNkMmRBbkphNUQxL2lneHZQOGR6TDUrdGNxSytTS2U0VE9EK3ZTUWdBZFhQcDhMYWJrd29BendVc0s3SDVMWGd3Q1Q4S3FCZVQxcUpxc21yS21ERURnN1REYXBNZ1hVNTBCVEFtZlBnSlNaSjAxKzRtZlo0c1ZGVDFXVnJqeXcvZ0VGZFNLMnovRjhJc05DcHAxN3d0WlllVEtQdlZZUm1KS0lNbDI5T0lBcHNqZGNwWW95eGYrbmdDMDRibFBhTUlnU3ZmRVNBMjJUcHJoY3VmNWdnMy9PRXMvdEhzUWNBQzBuMWdqVzR2L0xsbUJ3VmM3K3Q2bXNsVVFHcncrS0xtRHcyVy9lQjUxUXZyU3pwVUdkK0o3Wm1ES00yaVROc1hRVE15TUNWRWh0VGJLZmZLb3Y1UGxBYmRVQXdxdGZIR3U1R3ZiblNuYmlNMGx6azdTSjhZWTFQMzRKL3NsbWVJdkM0MVhlSjVZMko2YTY1V2NCdFV3RzZibmJaZktSdlF3SnpVYkdFQ1liZHN0VFNPYmRKaE5FaExDZEFKbi8yVjJ4ZkxxMTBMRHJGR2hMQi9PVk0wQ2UzMm44VnRoVS90dVArWkNhYWh4UEtLNVJiZHltVE4vOWQzVDgrS1NSdy9qRS9BWXl6UjZpUTE5dm1OZXB5ZWJKQWtjU3N3WFhjWFhkc1Q0RHhtTHQrZ1Q1UWpOd3ZvekpPa1Q1eTBFbC9VVkpITkFzTnpVYnFoRDJNck9FZ0tlY2RjMktPMnJ0amdDa2ZzQnl2NVlVS25PZFZmdVk5MmhWR1AvTUhrcklxRXc0UGdoT2NvYkhzZ2I3OHFhejhSN2M5eUdrakxVVWR1SHUvYXAxM0ZrY3NKOHlkQ1FEZUw5U0YxY1FCVjMxUDBUZHlaNXdNWHd2R0x3TEdRNVlndGNLQWlmZkVFOEtJRW5QeWNhdFJLcldnOVEySEY1RlBOeE1wbDZBNGxvbXR4SmFaUGpyV0hVdTVmMTljcVBIQWxNbjdiK24wSllTd1gzUzc5V3lwQ2pybUQ4Y0FYWm9SR3dHSWFEK1hrV3hXV0NyQ3U3dDkvRHpMMWRLRHpZZlMvZTlsdGdyRkk1eDNhcnphTHVoVlAvWGs1SWJ6S3ZDN1dHU1hPYndiUEJ6VW0rWEQzUll4TzhQQXZBZUxyQkRHd0FRS3VIZnF3ZFowZVlYSkNUZG85Nzl5SHVVM3pVNFhhZExNUE1IMEcvS0czaU1mR3ZUQ1FENmxJVGovdFcvQWMvcFRKRFpBOEk1TEdCYlIvNWRFMnVPMVl5a0E5QmRVQTIzZjFvQ1FoQ0tIYWlERlVLdG55R0p1T1V2dTdaR3NYVDNoQVM0M2ZFcTJqU1hhaVpjNTl2SFlDSmRrMDdaUnZLRlFFTjYwR2JXQnhabjNpYWRaQWRwaUxRWHUrRmJtQlRBdENlVUJYTzI1bGQyWlB0NjVma1c5anZBYURhRklTMS9NR0NGSFBHT0Z2eGt1c3hpNWhGalpWUW1jd3dnTkJrdnh1UUl0am9vV1dJT1Q2MnlLUFRJLzhGNERwTDlNL0sxTy9RTVAwaFhHSCtjRmc5RmoydHNXUkRSVGNDZVE1MGdrc1FlU0d5R3prZ1BFTGVpMWtJQVBLUVlkUHM2KzJvaHcxaVJUNmNOZ0dRaWZjWDJKbVV4SW5iaWRzQnZEQXJoa2tlSVJ2dTl3ZjNSODJ0bzBWQ2ZvNUxnS040UmtqaUtOQ01lTkozd1BEWEwyR0UyRDMvTnZsbTVoRkdQTzFRSm5iUWtpcmdMMy85QzJuT0lsTlUwWTI1RVJaNlFqZDh4bTVTK3g1N1lwSDdJeG9tR1hBVnN6UDZKRW5EUkRRRmxOS0Vqei9lVnBJQ0pDcC9PQUJqeVRPeVpaU2FaZlpoSngvQmJUbEdyakNBTzJjOStPeEwyb0NRamhlWW92bnp1eCtIUXBrWWxnUFJselRzRHg5eVhhSXFpekwxNi9UUjNQNlNNRjdyQXpkQ0NXTXRRTWNqSXM0ME9nbTNveVpIOG9NUHU2NEw1VmdMU3UrQ1BMZ2t5UUFqSGVjaEhsUTNCcmwwUkx2MHdjSjZ2SFlCQkxBWExHMFczT3NDNy9ZcVB1b0kySElGZkhrUlNtMmM3bDVQRGRROGRNYUV4ZmMwSzA1N0F4eGdEM05MZUxmM290OUZCeFlnYWdjQ1BwWTluU2tQQnNDNXJxMWJaVHc1dk4vV0wxZDR3RWJlZ1dHTTAwbTQzQnlUZUNJVlZnRmNtVVpNZ3ltNzlsdXp0dFQ3VkxFVzFiTjZJNjRmRU1IdjRXcG9qQ2t2TmRmckV0ZGE2bkxjbzVOWk5WK21GRjlDYnhwTDJpUXpGNWxuVWVmUWNRT2ZXc3gzSkRkMFZhM3VRTHFkUmVKeCt2V1Z6SHJab0o4MGtsVzczb0FHZG9Cdld2MSt4ZGw0WEU0RWNCYWMwZUZ0QUw4c0l1R1A2eGhWWTJkVExyZzFJR3BUY0hNb0I5TG1NTkh0VGY5UEpWMnhIeUpUUDl5TzV1eVl3bjdSSDFxdFVxczlGSXVGOTBEZDZYaTkrenEwNUhVcC9qNVlZalllRWkwaTJramFOS0FkSlExeVpReEpKaC90WnAxdEd0NnZaQTVIRVQ4d3ZhVFpiSU8zN0NYNW8vYW5hdkpkaDVBSkQ3TFloLzVqUUZLbG9XQ3JEMnUzYis0ZDdkd2ZaU0ppZFY4WDdOTmIrcm5hQlpMTnJtN29xUUVPSGFLdlFheENaTDlnRUloUE9OVmZEenAvWnIwMVZzQnFiN1BDblRvTzlGeWI2aEdPRFhIeVpNTnJONkpaUURxMVdqK2dlQXhEejJDekhVV203dzkwUnB3b2JsWUVPMkdWbGRIR29rS040S1loeTZWMTE0UFRPdFRkbEJFWFVkVllTZnkzbEVKSWVzVk52NHg1cFY3RG9BOXAyNlc3MzVqcktMNzNxbjA5dTYvNDllaVFMc1M1dXcxMlBhZSs1SE1rdjJRRGpRY1l5NzNpeGFwakQ5ZGVJTlk4TXpFOE5iTlFKaU5PcnBkQTdaaWc0UldaY2t5T0NjQk5rNjlwWWpacUpwSFI0b2E0OU1wRExHUGtqZ1JlSm9YOWV0UXBqTzBuU2ZwNGpFbmxqVnlSMTlrdFRMWEV5WXpubERwTjBScGJXMlJ2SUhCR3JVUHpZTU9maHVqeklualkwT0hwSGpUQmF5YmJOeUFiWHJBeWxVcU9Cd3pCaG9KTFlOWXBtalBrdkt4OVRqY0l5QVo0alBHQkJSNnJBNGxCN09oTlE1dkJpZ0xCbVRWdmxXVmt3YVRmNHJKeXlDd0pRUVAzazZYeU9qZnVCZjE4clk4U0ZMMmxHMEg3LzFCb2R0dGNIbHZTYmRqU0pBd2tTWXFTQVUzMU1tQk92Q0NpQS9TMWt0NFptMXlWanZOOFJQOWdKK0pLcnY5NEtpMDh3RXNpV1kxOVNXN1cvQ3QvUTJCbFNOaFZvV0pJU0xuVHZmMmpGN2p0MVNhVlZuaXNRRldjazRIa0M4U2tDanRxSlpvZ3VnNXVkbm92bHJ2cW4xRFhrN0gra2tSc2lycXN2KytmYXlia3hiQUVONFVQZnYySWpMRXRwOXFxZDZnbTRlSnR0RGRrdmJEMzkwUmE2cFFlNXNVZnd0anF1SmxaanpxaDhjRHkvQmRhTEtNa1YwcEFyWDltK3U0MFIvOEJjcHJxVUQ0Y2NaZ2ZOc2hLUUY2UTFwbWw4UjRUS01xWEk4WTBENGpKcTZERmgwQ3dxVjNpWU54VmpFUDJuLzIyRnJSQlNNRVYvMlpMY3BVdkUwMFBaTWtHNUEzNDNsU0JkMzFwT0I4enJxdzRBZjQ2bGpBRzZXUzRYelNCN1pKWXIwZXZ2bVNKbFMyK3ZmcmI0bWdFN1lFazFobEdKYXZLcVQ1WnFNdDhFODNubzhWTU94cm95ODF2azl0Z2g2VS9KVkhlZjhnMExHWXQyYXpCbGxXZ00vNWJjQitrRUhNT0tlQ3I2OWd1aW9qS2hKbEo0N28xQmVlWHgvTWUrY2trdDdxRXR6aVlZcGxZSXJYbGVxL0lnOTY4ZEpnTk5Jb1g3aU1aM2tYaDNhVzVTbUlXZ29QTDhENmx6U3g0ejFLMG95b3dQOGlWUmtPZkNpck13UXFvV2ZvWjNJd3hIYzlaNTBxa0pHT05ySjduQWx3cnRTZWF2dGh2cEV5NGdDS2ZIeXZyNGlQOS9PYmtheGptWDkrdGowekZNTDdzWWZNRWpjQno0bmRhcEptSm1xV1prMXg3M0c1MVpiWlZtOWVDMVQvYjVlbEt2RFZrN2NYY1ZrVjlBWmZHSFZBV3BsNnBub3NtcTIwbmNCTWk5Mk01SCtxZ3g4dEVNcDhWVDZ3aDJmMWFDbXA5NzlYVE1Tdkt5aFB4bytzNGdVaHMxKzJwTnhEL1JoWG04emNJdjNaZTQwSkZjSDB0M2NHRWJUSTRGc3ZJRU82dCtQOFFmeW9TUHNjU2lHRkNVMjEvelM4b3UyYkZSOWlidXRuV094M3VoNS92N3FzSGZ5TkxsODk3d2kzRW1Nc2pHZjhBbm42L0s4U3VJaENFT3FQZ1ByY09xc3p1RFJmZjdjc3VLWVJzNDVsT2dVeWVOeWVnR0licHNRT2VUNDk1bjVzUEFhQ2RLQURuK0tsRDZRWXJLNVRKQjB2NEFhM3o3WDJkRlpVNjNab3VTUGhvN0h1dVk2UlZ6QktPQy9mSFpUUERTeW43a1FzT2IwMUNrWGUrUlM1ZzhYQ3NqbS82aGtEaDdCRnFCczRkRys0alpNN0EzWFVLbk5VL25KMHlRV1BSdnZVNkhuT0dNYkRJT3ZaOEg5S1R4THJkRitaaXhra1BySHJSaTAwMVBnQzFJbzNLWW1lL21hcUN1TEs1aytWMWR6TXhaWU9UN3dIbDdzVVRwTzFhdW9mNkhqMlllNGVDQVMyQ0xDR0VHVkRFdnVtU3hQNnlIYTJpdkFyYStMeVpPLzg1cVJ4cUhNNm05Zld1T3V1bEgxUVM0QUwvQ2V0bnFENWFNYlhJWlgwZXEvQkx2R2d5NVFTd0hOa0JTT3NqRXVkZXhXTTB2MW5GbG1hRlBHaFNpRWZTUUtjVmpGUTIwOW12NVRqREVGNkJFWlJsSjlNVktTdWxMVFBOTllseEN6NVcyR1AyNFRHZDNRa1V2N2M0VGZYR3UxWWFLSlVWMUhpa01vb0gxNnFwVXN5aUlwK0JxWndhbW9kakwxSGJGNjk2QmJqUDJUNndlYlNEUzZJWmVsR09KY096ZmJwZ2NQblNkYUZJa0xHVnBvRjFaeWtRcGRQdnFIUnVmTm9QQjZzYi9OVGRaUGswUXJhdDZ0aWg2bjc4UXhWZUYybXRFYUdsK1lBdkFOZ0ZiNjVsRStjSHJYMUgxbEdXWHp1SnRjT1hiN21EMHk5OGp3OWJiOEVzQ05PcExvWGVKNFBoaWJ1bkVVUmZVVjN5WWNKN0tqMGZlRjMvS2pISVJKa2JvdXFRK2FEM1YxR3dTenpZWTNFTE1VQ0haTENVREU4R2hoaWx1Uy8zd2g2VEg4M08rTVRYUGZJSG85M2lBUkQxRVMwNGJUOExYQmdRN1V1VzNjckJxb2twc2haSzdNMXRoTjVkeHFNeUl1bURvQ2Q5V1YrbS8xTy9HQ2RuWHhOYURyVGhIeG90VURSaVo4dlpndk5pVjBLbVQ4TEY3LzFJM2VSWXoyVFd6SzJQekxOcUVXZitnTmp6aDd5UlpMR1VKcTNEVldHbFBqcm80cGZ5d3BJL2pFZ3F6UGxDMHFuaUxjRHlkSWJmQ3d1NUVsTUpnb0hDWnAwZkI3OE9xdUdXNnNmRkgzZmNEV082WlJyamYrMGF0bkNXcG1SN3VOYkIzQnZMSldxMExFNGdzdTdROXNzQjZRWkl5VUxDWDZnbEdFZVpXNVJtNzhma3pMSlRCeENBVTBhV1IzaDhNcVJXRUtLR2Q4SCszSGJ0L0V6VUFvM1RRdHdDSWw0ZE0zNDUvVGxCWDFzN0pScC9RSUNDRG5UdHAyNGxUbzdmQS9vREc3dkxETjlsK2ZjdkFhSGllcGtUT20yeUdyZTBxcUdlYzhaMjlqeDgyTzIyWDhrSXA4a3l1c29zSk9RUEx1cEd0aU11aTdTZnpXSndxYThBMFNLZllQbWl0VUdoWFA1VFRjYVVDRXp2eXB6VWVNY1pUUFdJZnd6RGd6NExIQ0Z6T00weFNZQnZwVkNvVHRPRXIrYy8vSDhRT1BEMW1CL1d6TkczbkVlQTNZN1J4UHc4c3JsTGMzL1B0UmUxTXNvSk1XZmpkbnFndTd3RkFOZXB5YkFneEpzUVkzVHNmQnRZNmdvRTlmMmNMQnI4T1dOTFpJU0hGMVM1TGRJeFpMUFlKaHprN2QwazljTW0xdWxURm5icmpyMmtpa2VQVDVSRlV6VHpGRlpVcmh4eVNQaklWMkhqbVZkZVRtdDgvMVQ5ZTZ6Mm5tSFd6Zng5RC85MzNkSDNUd2J0bHk1K2oxQ1RnblIyTldQMHZJVjdCYzFVN0J1Z0x1a1diVzg4TEFQSzFhUzBLL0R5WSsreHlLZFIzUlV1Qml4MXNsTzFmUlNBdGxua00rM0tHMFNqR3lDV21rVkxCcDEwWnR5OUhMQ1o3aFcvdXU5QkM0KzV1RUE3RVFaeE5zbDQ5WWE1U2xjWVQwcHBDZUN5enZzTTlLKzFITmE4bFdVSERDSG1xM0FtbXFvN1gwZElWbGkzUTg5Qi9uSnVVKytWb3U4dnZ4bTI0bS9jM1k5UHNPWW1OL0Qyc2xpd2hLanhLcS8xUjRGK2V1cmovM1ovTFlESHdFZ09ucTZIRGllSlNnVy95bWNHYU50dlB6MmtTU1VHQ1IwclRGZVdhRkFYQXhtSHNLcFdxbmVKVllyckpGRjc5N2lWendVeHVhQTVVejBiYUxURk9qYUlhNEZMNHJlbHl1VWMxb21EVW1oc1lkemdHbVQwUnlLNE5KWHQxRTVtZ09laWJUd2RiQ0lsRE5DSW5uRzJQWk5ZSUU0bktFd3l0aWVabHhZYnBBbVpyaHhUZ2ZTallnU3NoWE1BSmVFdnltMm1wTjNlTzlyL0xsOVpRRTJPS1lmeHM3c0UxK213aDFPaFJaeEF5VnhOZHV3NEIwZW1KT0dLV0RBVnlTdUZBcGUvZERlWlVKNjE4bHBISDBqam1vazJHTXRiN09wNlU5MnFDUll2Y0pkUUttdENDK2VkeUwvYzQ5QzVaWU92dWIyclYySGlxL0xNNlBtV2dkdUxHbVJJTmZWVHo4dVExcFJLNHptVkc2cmI1V0t4ZlM0bnAwSHJ5Qmg3V092YlF3d0lGcGs0Ty9HdjlDejhwb1dRRmZLVE04STVKWkdFdnJGdkdIOTA0RGJUcVI2UVJ5dGZNV2hwdk5abjlGVnNqNTQvSUdBYVdCVExkMDdjTExSNVpqam5LaFZEd0tTMnZMcXV1Q24vU21rdm1QNnJ2TGV4TytCSE5EV0NaNElsdXhuVjErc0lPN1VDcG0rcVNpakN4Y2RDYTFYRUZFR0pKbzI1QzhMTk5zU3R3OGg1RFo5bXY3aWNGT3ZvZGVMR0dPR095RGJNUDF5cFE4TWtqVXZGUktZV0NhandSeFZsaG13dHpLeDdxam1PdDBTMVJqaFJzUWp2R2pZa3dlQTIxS0Y3c3NtMUZnYktKeHJKV2lVczlqM20ySHcyd0d4OUMyVGNDbE8vUnZRTm9iTDVudSt0bFRvaUluaXh5WGdWMlMydDFtamRSSjhVNjVxMWNBbUFkblJZZVhkVHZJcXhESnhzMGczRTlXeGpMNmlkSytsMmQ4YzJodlpUSkxLTFpOYzVyNWZnUGZlbUxhUER5bkFGMTlHMnRPWFlOdWJPeFN6R0l2b0hQTHM3elFlamh1ZngvSDRKMVA0RVlLNE9HOHhQRkVrdkcvbEM0UHRBV1U2S2hRSlROaWI1ZTNHTktZTWY2d2orNGNITjJuQjRiYThENnlpamp3T1NTRWlGYlh6YmFGZzRxbDljYkdUMmFGOXN5Yjhaa1hpRkxYTzRqMjN4YVhnT0JyeFBxSDlsVGpldVpnNEppNGc0Vm1rTGZsdHgzK1Q1SCs1SlJXMmRSU1FuQm91M2ZibUFzU1JWN0lubUliTXN2SVlLczFTZUllOUNRZWVwdit2a0FTWUZvV2s5N29NRWxESzRLbUVteHpCRzBJanJFS2VzWVB6czROWHBqQnh0M08ra0F5Tlgvd2tzSlZSMlhTdHlYUTRDM0VQWnV0Z2FjL0NML1RNQWhhWDVnQXhTVmNYcm1mZXZvSFNLTVRKdE9mSHgrcHRXdmlKWjhXYUFjMFNTa29QdFRTMjlzTFJ0Z1U4RVYrcW5EWlFibk5iTmFrTjVRaG1nS0h1SitEbkwzK3RZbHhiTVo1OEpGVVZyVVVtRDFMc0lPV2lHOGwrVDM4L0xHb1ZsZXBCSUVTckpldjd0c1V2TWFTSWJnRWZPVlh3TEI5WjRQQXQyMzZwMDBaV0w4d2JScklJU3MraUFiSnF0a0NzMi95aWIxUnNTZy9sY1BTUnphdjlXMXJLeUgwbzVrdFdyYUtiaUxiU1NUZmc3TTRDb0xDRGszejBXc1U2MkhUd2NHOFdqTXk5RWUrZEJiR1FkRXJ1WTlCZkN1Tm9kM3JWUm93bXZubDlhazQxTlMvVGhLRk44UEpSSzNWTUlrK05HZlBLazRnaDBvc0xNb3pPVlhNeEM1R0NLdXRBWHBobms4SnVpWjdDUDBBSHpDTjBtUlNMeVdLMkQvcXBWb01sUU1qSFZOWHR2NTRjZEpKQzA4Si9JemRwcUVob2ZXaE56U3hIQWdLOWpyYm5Bby85d3g4QUhzRmMwWk1YL1lET3RCamRDV0VmYWc5ZWZyVDZtd2xFckw4TjhuVmNuclJMWjB3SlVvbEtzWmhIR1ZlZ1VBa29DUTNvQ2RuMCtYSGRSK1FvSURNL1hmdGIyRDJsTm9nTFJkb0lHUUkyMk5CcVhxR2o0bm1heGU2Q2lrWmlwVWlCODNNMFhJaFFhVm9PeFhoRTdwS3Y1b0VtQTJYY3g5NFlKYnFMSG1Wc3BjRjRQQW54cEJsZTBKV3N4OVViUUp3NFRWb0pwdWtkL1RwdlM4MnVHWEFOWUJKc3BRL2FPMjNCc24yaktFMmU0N3kyT0I5ZG9QeVlWWndnaVZTdmZKMm42Zmw0RlpveGpzQTRlb1pyRGdQb2FQSUdwb0lJWnBtcnFkS3BONUVKZFhWeUYvTjhkZitKTkJrdGdNSUthRXdnN0xhRlJkMHdJbGV6VE9lRTUyclFRQ01jTlh0NTZtNUxYeDVJUWZqa0MrMVFuNmdmOUVqbW9MUEtCQWdsQkFLKzNwbmxTMnRQbnBJOGpSL2hxNm8rM01vcjhDaXlaWGJ0c05kaGVpZkR4L3JuS0dpb0JZRmdZbXFnRWNIRmZyTXR4elN3Z2VFRFozd0VuMHFEMnF4R0RXK3BLbEZnV3IrMVpoT2s5c1VxTDBHWGVMeXI1anpjL2ZEVlZmVnVGUkYzS2pycjdLUGJGMTRYNU4zWU5XZHRVWXE5eE9CcFhhemlSNnZrZGZoSFZ5SWdPaXg5QWpnTW1GN2V3RkJHZmhjMzhsVDBrZGpVcUsyQm5qdERqZUNheXl0bFdTVXFFTWVZTUl3Mk5xM0FKbENEVUZDNmdVSktsN045MGpqQ2FiQnp4dGdxMzZnT0hUemVmek10eHpHckRXV05sS2Jvc1R5UHcxK2pmUFQxTndPUSs0bjA1K3lmdUU2OU8vRWJmNXkvVEFBbFNPSGZmYXpUeTZteFJ5K2RJZHRxc1ZJa3ZWV1poYkRzSnlpbjEwZzN0bWlKaDRqMUlaaElUWlNRQk0zQmF0YmJuMGR5SDA1YlpOdnJxQVAxNEFpTndSZ3VjbzZKbmpqY1l3OWxZc1NaS3dEcVVzOWxPRFlvNC9TZ2FzYUNEVmVqYm1aK3UxNGVEZ05pb1BwaXg2Qkt4NC91eG5yOVJkdnBNQTdZUDdpOHZxVzhNaDFEdXJtN1hMdjJtNnRTY2hONXZZOHdsNDVNUms1NnE2Qk1hdjQ1d05EWlMvMi9rRFVpWVkya0Q4b2g3eVpVU2tobTY0ODZoYWJXUXVPWC9ZNVVxaXRQckt4RDJDMm53WnlCY2ZsS25aNkxOL210RUprUjRpSHppQ1JtekJieTFva2ZmNDdOZk9yR21pbG9xQzVzRmRlQnRMaGJqOHBIT1k1MUtrTlFvY0JjcElHR2NERVFMOUtxbERrOHlPVkVIUUdWb2E4K2xYMTJQTjk0R0gyRnRBMVBFZFB3SFVGZ3U4a1U3S2lCcEtCdUFlYUJPN2lWSHFBckEweXEwaDZ6MU5MK24vdmVzVW85U3V2TmorcmoyaVJ3TFdUV2NBaE1YZFBSU0htUnA1Zmk1VXlnelpvMkFCTjdYQ3JGWVJieXllK2FpbWJXcmJ3YSszeENiUEZMNmZFS1dGbHV4VTlzOUE0eS9ZcVBnL1JuMFlKQU9PQXlkSDhoRDI0aWxkLzR2c28wVzFINng3U0l4YUNBUUZVRVVmSWdTRGpvK0lVdkNVcWRvSlU5eFhJdG9TS0pxanJ1WWJ6L0hRc1BjdVRpVk9uNjFsNWhDbjBxTUVuSjhVSG5JSFNyT0txY1d2Nzh1S2t3TjN4S25qL3ovUUlJMmRVdlMxY3NKQjVXMnlsRnh3cTRoa0Q2eVAraGJVckJrSTlXekdBVUFEMVdKWkZtbWZwK0RIUU5QZU56VEdmWC9IYnBrTHVZRG1QS2FsTUZ2eFFMeUZTK29oalh5ZmFkbklzbm5ZNS95NzJkQUZHa0hvYnFjU0ZxcDJGRDZibVFOSEN2dUNrZXJLSUY3VFJnUi9pb0VJUTczRDB0azJpOXB4M0djMEVCb0dxamRPbXN4cFpSNXdMSnZvU1RSTzUzUnB6NEdaVGREbGRoSTFlZWpRTStlQzlYQnBkS1JHZ2tCMElja1VDcDhVYTFqK1ZGV0VEMW1IUkdnUjIrcVRmWnF4b3g1bm5ncE1mMVJMSTBIWFpRRXJkZEhPRFk1bS9RQ3VCT0ttU3Yza05CZWRRYURXMWRMVFZVVnNweHV0NXJhdzRXaXh6WS9VMFZwVUY1Q0UzblVVbmI1d1VqRUNqNTdQajIzY21GdUVBaHZYQXhHQjVRc0ZhWEhzQStROTFSNlpzRUZVVlJpdWh5YlVjNWlJcHp5UHVCZ0U3WExtUGdkbzBYc3BTQ2FJLzlJV1VnUzMvbml2MjZDYlJ5UWw2RExQOTM1QjZrblh5dFI0bk92cTVjTnM1bFdJMXJib29SVC9TWTZKK3ZWeUlDRS9QWUlmdVZqamFrSnk4ZFZXUHhXUEtRZGJTS1pxTmtjMUhqcE1DL2xYMXNWNlZWMDE1SGk0S1hLMWJ4Z2VaQ3daSkpFLzM2cFo0WVgvRWxwVTNjU1E0a1QxTGlDSjNvRUpJY1VyaXl2YUJpdE52a1hpUTdLNWxpeDdnL0dITCtTNzRIOEhwbVZVeWJVcElPbit2amdIWG9Eemhtckw4Z0JLZ3Z4c05pVjE3aUtpdzZTUSt4aWRpZlRaMDJYK2toaVZhMGd1RVVYa0pFTDU0QW1FYVhXcTI4amFIeC9taWVzNXR0UFB3YllDeHRRdjNpOTY3cjNiT2dUOUFEUDUxTTlMc2NMQS9NZGd0SW40TzZtODl5Ri9pSGJvLzFKMlBHZDdiRVVZZ0hhSk9EcEpLYjlYWEE4bXJKeFRhZ0tIR1hzU0FxMlloYlV2QmpGdmcvcGhHR1JuRVllTlA4V2RCdzU2MDRvaXVnYk5tVGllYWhVYkV6NUVUcHFLUk1QVW5iTmYwOVA4b2h6dFBSRnkzZllpUHBob0IvYmdsRk5oZmNwV09ocUl3Nm1BcjRyVU1IL0FyRFRIL3FleHpqQVJ4dDdveHY4ak42bHM4NEdha1lVMjhnSVBjWjZaRVNFWFQwQUNWckVSb1YwT00vbU1SU3NnRGpwL1BTb2ptM1U0bXE5d0pJVWlPYnRhcUZGaUJHbm1GQXJnRVhvajVnUmZaVG91M0dJMUlpU1B1SldYeHhnVnBXMkw1ODZwejl5aC85UnhlTWJKVkc4cW1CMWlkSXFYRnVKdHhMMHBwcVNDKzYxVXZKNjRpeHFLN29BYm1DTndubWZVVUxFNDV6Z2VvbWQ5RU5jVTZRUTBDRU1OQldMQ1U5cW16NmpsRCtydzQwRVVZczVqUENoMW9icllZdTVCTW1ydktYclU4VjgrcDkrdEo2VGtuTjdFcVRhMjdrckY5VS9jTjNPSzFYTmY1eUxQblF1OUFZQlJITUplWnRhV0xzajdCYzdTR0xDcnJ2L2Q1ZEluUkZpWXE4RnB3MHh5dG9mU1M3SW1KTVBFOFh6MWVHY2pONVBtU2EwUlcvOTZNWnluUjh2WG5rN0dubTJlSWVYYWlEWS9NOEFiZWlZUnZxY1FyN3dYQStIbDNtMXBhbjFla3JmNFJ4WE5oUU15OUZrWVVpY3FSRUl0eW53bkU1ak8xMXBxMll6TkZFalNpOVlycCttRFREejA1ZnBLZXg1dEMrV3g1L21xdzFqcWs5TFhsMS9maEpyQjJhSmtIc09iRGptcEQ3d3ZLd2ZieWxkRWtvRlpUQUdQRVl2Y3pjb0l1aTZuU3NNVW5scDRwSWpPYXViaCsyMm9GQk43RkxNb2N2OEtBZjZlVUxGelBKc0xVMHpCUEVTemJDNmY4U1Q2cFMzSmo0SExsTHo5OEJnTVhUelRjejBKSjJOZmI5UXVna2pLRUR0ODF0RnZqRVhRQnR6VWt4bmZUeVE0c0o4Y3RqQzhTcnZDNDNURDl5Tms4U3hOSlJDeHpUNDdBTkxJZWkrVFFVVFJybXZocjdWR3g5bXJvMWVCUnBDbXd5cWNOTG93Z2NBVStFMUdpTklpNE1YcENkSlJGQnV5cFhXRlh1OEZTYUZSLzVtYURUTlJwSWZVcjlQcjFhTzhOZFlud3VLOU9sZVBYRTNkcW8yWVdKWmtBZkcrM21aMFRYaUhUMzBXcGpWc1hGWWJhSm0rZ2V5ZnNhVWNsOWdLVVRlRGhnby9mVDNObXUyK0VsVEVrelUyaGhvU2RnN0EyaUM1UWN6ZkROM1NCK1Uza002Y2YxeEZqeDlsSnhETitwN1haNFZ5K2djRGV6czNXWnYrZzJVa1ZjbTMxd0ovdjhpYnNRRkVCNDR5M1NFVzVoaThIa2tlU2Y3akZmUG5zdnlubXV1WktDbzRBZGZQOGZHZ0RxU0hsWityR09sdXNEcDlTS1JhemdGQmJxOHgwL2hLQWozZ2ZMTmZEOE11Y2lmZjNpNVE3UVcwYmtKNG1LRHUyN0tCNWJDRWdYSVVpU09rR05lT0k1aHF5MDFJRUxOUjA4NHAwSkV4UjgxSTkybDNnY243VUZiN3M4bWF4ckFuaDhWWnI1RjltVnhSTm1zNER0MStJaS8rMlEwMDFoeHBHR1hrOXJnM2lSaEs1N2UveUx1cVpyNEZtZTFEaDJaUjRxZ3RVMklyTzlKN0J4c2F0czlBT0xkS21uQXMwWnJSbGgvVFlaK3FyS2tCV01ia2VDZUp4N1JqR1loYWY1WVdiS0taVGJwK09BbVM3b2FEWlNuYVFSTmd0bkgvQTFtcVo4SDBWUHc0aURna3RxWjRrMlBDWS9pMmNONkRINmhXSHVrWFdIL0tZd3QxVXYwdFVPbVhQZGdodUJyM3FpWDZXUGwvRmRXdTNqdm9DSTR4WGNDTUVRNkYxbkh5bXlVSE5JSzJ1akNHdDhlYUJQd0lCNEtqZjlUOWF1ZHdxQ2VBalpndjdhQVBOTTZpUW1RVU85WDBTc2E4L011VTZVN08va0pxTlZMSmUzY0Z2anpRSVBUY0VTTWpYOFNyeUdPQzJnL1BGbTJ6clBLMzJHTXBZaTZLVmJXQkF2Vk00RlpEbFB4OENON0lsTk9KTVFHR3V2VFhGUVkxc2dkdUMveE9YR3dLWkUwNmxqR0ZMbS9zbnR4UmxrVlNpUVpwcnVkdlMxalZVeWpXTkNTalloYVFVSjEyTm1IWWVLSHJTWXlsekpadEFyZTNOam1kOVJsRjgxeGErc2VRLzhoMkxLNFFPODFEQXlVQ3I3cGRQeFFWWDdYbnU1S1VOQXJwVWxtd2J6QU9GSS9od2tKb3BYMDgrWGVOcG16eVNORE1VWjA0QkVBSSttYmFjZFFhbWR0RXJTZFJnaGwrUzNSNGgrSzU5T3Z6OXVMNlljRlBXL3hlLzlIZkxPZmc5Zk96a3VZVDRITGVHQi9mdzd4dVJCZVg0djMyT1dlV1ZKSjhTdUNFTHJhcC9ma3lkTWNLUHhqcExKcG1uNFlzNlYrN0owUlUzd3FHSVhSNU1McGxCUE9mMXQ2NHdUeUVES0Z2VEl1dk42ZThHc3VJcG5RaHowUmFKcFdaaTgycmNvRGNHdU5RWXc3dlRySkdiK0dGK0wrZ2IvcFhOTGh1YkZGR2NJV2dHUWJobENwTGsxVU9kYU1GZnJ2ZVZjbjJaMXg0Tk5YN1dSZFhTZ2xsMzN0ekdRUm8rREFldEV0aHZ6L1IwbnFOcjJ4Mjh4d2tsRTNXYlpBZk9oUktwVHJCeXE2SDBCc0phcGtIZytMdFN1bkVuNlBaajRicnVvYVB5bUlYVTBKSmpVenVHNWRsRlQxV0pFOUNpQlI4QzlpYjVYbHhrTGtERWd0WFREL1lvcnE4aUtqRUk4WkNDVXo4MVF4N3FaSktKU2swcFhCVjROeGdDZDY0a2EyVEFJazFTMzhuWll5bnFsRVpVeFQrNCtaUjlFQ3RMc0RkTFVHVjdrdHR5cndURkE2MFZudm5idDBYWE9kK2F6Q051VTZtU1VBdStWMWI3ZGF6MDJkQTdJd3dqZVJ3TSt6eURYK2FUT093M0hlWSs1NWFKR3RZaUNPUUNUTHlkcWVTSHp0aDFucjNqN244L2pFbCtQeG1GcVA5bGpNWUp6QTZPTGtkZ1BvKzJwUk9WKzlHVEhqTkgwSEJud0M2VFkvZWtkbGs3cFNteUZTVEI1ZmZnV2hjWWNtVVlPQWhqVWgwUmUrbG0vSEszT0xiNCtPYnh3cXhXSEFMSkVKRGdaVDM3NElkenU5bHBwdXB1djBOWkc3cHNLT0U5ekZHU1VxTWdmN0JyckZ5b1AyRExlZG9CRjhtWlpmRStwRHNDdHRoR2wvdzdseVljUnVndVJ4RTVoZUNjOVdPMlBXVkczc0YwcjluVmtDRVQycDZYQzQybEsrVldqOTdkNXdjYVJBZ1cyNlhTRnByZ2NNUTUyVVkrR2w5UTJXTXo0Zzg5YWVKdGo2TnIrOCt6ajMwUEhwYkZYZDZRWmh4UnE5YlJZV3ZySUEyMGsxL1k0cisxSWNnVUl6UHFNcHgvUC9BSUprNWhwcEN1UnB2cHplTEY0R1dFSUIvMHd0WGNpSU04c1FLamZ6TDRHcWh5RXZjTXVid3FFZzRnRURIblp4NlNVVkt1YUhGUThtK3k4YWlxenVjZ3BNZGFzeGhYUGdjSHZaRWhDRHUyUllXZUI0NHhEcjl0TlVCMjdybHRpRHdjUnZ6ZERhZWZwaDJpMnowMWIzbVprUENBRlRWVk5GdkFUSVFualZpR0YzeFVETGZFclVSRVh2UkYwU2hrRllMVDVYanJBditINDNVRkg5U1dCUDZaVEt1UVUzRWdjVXN0VGE5elBWUlVyeWIveGtnYlhOL21XS0ZoMlNqL3V1RDRIcC93cHFyNVNCVnRBenQvY21pWEQwd2VjcCtUaFJENkR4R1VoeXp1cGM5TDQ3cSsxVFhiNG9Rb1lwb0JNRTR2OWlmTVlwc3JXaTFCdVRGVGtDamRUWFZ5U0U0SVZ2N3FkRjI1MkFTZGcrS0hyb2pqWENwRzJ3NmxPSWRYWlRLL05PdHBZc0JkRW9FdHAveWxURGI4MFBPT2xhOUhPbWQvdEkyaW54UGRPUDU5OFZNTjZSbzIrOStQNTI3NjhPU1FhSlJqa1FtVlNZVExNTWV2WEI2TGpLd3BOcWFOT1VHLzIxZjN3cXpqNW1HNzBJajBkNUg5TzUxWExBVmdxRDhsQnVwbkV0ZDZZREpTK1FxUHBwL3NWb0lZSm9IdmlGd01LSHpLNUxZWUNjK1V3RitjRTdFalFROE1LbXE2RFVkeXRrVnFmOXZxbU9PRStMb3RKRGNmR1JJYXh1ZmVSeUpvYzVWMTI3RWZpZTNpem4ydlN1eFF6OWlpVXRFczBsRHRGRVd5ZDBmbHNsSEkrWjQwOEpWOUtuUWZYNTY1eFVxRitNdHpLb3dqc1NwaFlOYmFWVENJYWhweVN5SW1MdzVudzN0NVBCOFdTZXNKVmZKVW5nRnVQdytGMloxMm94L2NYUmNLQUQvRFg5QVdvR2lNL3FrbUo3OUhKNHVDTWJ1dEN1bU5XMmVlYzRpcU9DUEVOOXpIOElvKzZLeUQ1SkFrR2JTYldaRGR2TEk3NWZ3RnlCZUNXb2sxVnVnUlNsdHErcnl0ZXQveHI1azJjTnlZcHhhTVpYL000c3VtRFA0bUdMUVJCMGhlQTF1Q2dFWjJtb2tXSmpnY1p4SHdrNmVWZlQ4QzFVN0l2RUJLRWoxVjAwQnBBa2N4MlgvQ3MvZTdUTEFQeUdJRk5vV3lvVXo5Yis3ZTZZUzM1YmZtRm9TOXBBNDRCVzJJeCtMT2kyTzA5ZHVDOVpmSVl2Zkg5UUgzU2xTanZYcFlKWWRzRzJ4ekp5WkZ1TGNHNWNodk1udGNSUlhEV3lHNlN3QmpzVkdMVFR2QTcrK216T3RmNnlXY3pkT2I5cDRQUWF6YVo2SGNQbG5JMm9sczcrMTcvbTB3ZDFyUDVFMFduOEhtNW5mb3kwdXJNei8zaDRBRFdxTk9hN0YxNXVOZVhUSmdiaXVXbk5YVHg0YnkxRE1PZkhOZEtRNHhubHUwYkIrM0FINis0dmQ3dmhyVWU3WnJOSXAzcUM1TDhOdkMvSGlrdWJ0R2s5N3JuZVBDc0Fvd3dJdjVhK0N6c1NZRWpqdTdMSEFVNUp6U1dQQUJWb2JwOUtOa2NYdytxT3ZENzd0YjUvcTZNdHlLYXVtYVpVcm5paGh2SHh5STZOU2dqTHBpQXM1MEZDUHJvVW9yVWdRaUs0SFNDb0pxYUFsMXg2QVE0TWFSSGhVNzJzRFN4djNhRGwwZy9NSElIM3Ixc0cvVU1aMkFmb1FWQTRYdWxoOTZxcGxFdk03UnlzdDEwVVJ3YWdEcytsZ0xmTUJ3TDBLUjNkSlRzQ0RCSXY5UzlaNEdNa2g2OG9SbGovYmgvSSt5RGx5ZXlCdVhtbXNreG9CNzl2S2pPU085MFVKTkV1ZzVyVWlpSldvbHVMeHVKM0piT2MrWEZYeEJ5WGx6KzFxWHZFZEl6c0V6QVl1RVErbDFCQ0FmY0tOZWt3dTNkVys1YzJWRDRhT3p4eHRCQ3dPTUtQZnIyT2lXYTJXd0VXMXJBRXgzaFJtbHhpSndwTlJ2U0JZTHdIYlZkNWpYeEppbk1PT204L0ZNQmdrUVV0NFNTaGV2a0JXTCtMVFVmZERtZGw1dlpxcE4xcVZ3TlRaSjdWbWVwRitKREVSNHlXYk5jT3gyaFVpMVUzaUhTa05yZ1psZzJIaDhHcTZiL1RiRkIrSllZQTl3N3Fta0pYeHdTcVdya21TYkcvYnJNRmJxU1k2V2xub2JnanpWSGZ2RkN5NHJOUTllVzJmSDh4UDhmYVRsZENjSXhEYnUvMmFMV0R2bnkyYjdNcHNYbWh0SGdGcUIxUXBOM3JhRGovVlhTbkMyZWE3bHlIc1dKVzF2WmxScll0THl3QWIyQjYyRHF6djU5SG9hMlZJZzErOEZqbFdObHFqcFMvSWdwVXptNktOcUgyb1l1SGkvZDFBcTd3eXBNdU54cGdLZ2g5WnZNNFR0aWdtWkt2aVlseW4rWVhtNVBjYURkdVJPU1pzL0h6VDlKSE5icmxQRU1YZ3paalBlSHpVUEg0YnBvTkMyMjNsWW1oRysyckFaYnJXWkJ1SW1HeW5xeC9lZDlPdnNHU1FnTU9idlBnSDJ4VWdVeUw2b1VkTHVJUnVVcFBxUUkzVjlSNXJmVzR1RlJWeDd6Zmtzb2ZKMU4rT3ZFQUg1dlRjaERqQTlOa3AvVDAvZTlwUDJCYVBjK2p2amZUdzdrVU5TbE1RdklZMG9BMDVlOU9WdUk0cnR1ZElVY1NKWFhwQkNmQ2pDeVpIRHdYMm9McWFZQzd4d0EzOXI4bUYxOXZFcHd4WmxNUUdqS0lDbzM2ODNxVkhHTW8rRUE2ZndYcGcxU1doQ2xjdW5qMjJCd1NHdnBBV2pPZFordktqSEkvdEpBUE9QN3J2Z3I0Wk4vWlg1WHR2NUJPc2hWbDRBUHNENTNxMWQwbExtWWl6cXlxMkpyQXBpZEg4enk0MFdrYXBSdnY0TStuRlNIUUxMaWpHVVNQNkRTRnZ5YlJLS2Q4WjFqMCt0eGRmY0NsZGRqTzcrem5LS0VVZkd2UW8wVDJOeHR6OVNyZXQvMmNmS1BlMXlUY2xYWCtUeUlHZklEYm5GYkRlbjM0Q2szRldORTQ3dm5OWUVwMDBWYkNhQUUrYnpINlI1YkZtR0JXSTR0bTBCUDBEK3MrMnB2REprbmRIa2Z3UGhZc0RSOVhSZmNJbWExM3B1eEhUMWFhWlNEdEFIWlFCcDJsNDZGK05TWXZHeFJhQjU1VUFYdlZqc1JZUkpuSEJEaXZsblliYzBnWVdEd1FOcG1oTmI5MlRIdVQzUnloSFR2a255d0N1WStTUGIyNTNvRmRYL1RYNldzMzJSSzhFaVZ1YXI5ZmdJQ0FnSUNBZ0lEemZiOVlKL0Q2TkRGOGhQOC83a3UrMzdITDg2M2Z0K3pKL2I5V0JyNmk3OXYxMGY3ZnNKdjIzRHovQjlWcmZiOUlYajg1ZSt6N1hxKzM3RzM4N0x2dCt6a3Z0K3RoMGZJdy9oOWNSZmI5aUgrMjcrSDl2MDhYN2Zmd3lmQ24rejdGajl2MWQzNTFYKzM2MDYrbjlORnI1MVg3ZnFNYjZ2cXBQMVdPeURZejlFbzFKRElOQ0pVOXdLS3FGUlZxQlN4NWVkdEJoYzhMZTV3ajNhOSsvR2xOR3VIdWFFVGkyeEh5MHdmdUF4NVE5N2tBdHFKRU5Dd0ZQb3ZLWTZWUS9ibnN2RjFvdzVsRUg0QWlSeTc4bGsvdmJGWFRjT1J4WVVHbXBIejhnbDR6OTNGTXdLaEx3UFZ3WndhOFpyVlU5dk5WQ0lEcjRRSDB2YjZNamRvb0IrWUY1djBkOE5qbWtCaU1rV0dZR3ZSaUZtRGZEeENNOWV0NURjeWgxWnM2V0NjNDNRRUxMeFNxRExRUGgzcHUrQWxYOUFlYnVDbjZld3BBOGJma2Npek53d3Y4Ui9tTGFrbUwyd3JVelRBbU9aQ242TU4ySDc5MnM5eDlXMk1yUUlkSFJOUnpYVk5yTHl5bmtDZXZVZkVuckI2S1RZd0hCa003U2JUMmREdGY3K3NhVjlSMkh3OHZuUDhzL3RvSkJFaEVmYkFkSzVBTWJMUnB6NzM1bzhDQVpaUzROU3h0b09zWUZFQnFoZ2RpTTVmdk9JTTdQMTQ0bEpxRGtQd0RxYWlBUmlITmJVR3J5K21qVi9mYnZCU05CL2RscUpGbXUrRDltR2Y3L3Z2dFpmam5UaDkwY0I5MzhKelhNcjMyS0RhS29XRjZacUl1RzBPVzBkcy9xZDhKWDh0SDlCQ3VPa1BPN0RwRDFlU1cxaFovVmlITjNQQ3pJMGROTGRLVzc3ckl5c1BsK08xNWl6V0JIRXlaL2t5d2pVWUV3WVhnc2dDMDVCNTQ2MHpLUVh2dUZ1aExzSVd6Rmd5bldiVHE5VWJPWWU3QjlxVy9IVzYyZGc4RFZ1ODRsaFZ1c25SVXlWMVlsRGU4SVJIZGxSenBTdGRMN0tZdjV5dk8zamNMdEhhK0NzSDJHUkg3Mk9EaEgzbHA1Qm5qaHFYbk5jb09ZU2Z3N3Bsa0lMT2dmeHYwN3RuOVEzdGVGWURYb3crRUZvd3NqbnBGYmdSSnpFQmdnVlF6dlA3R2F1QUxBcVBSOGdjKzhVYXJYejMyL2t0YllGbjlWUEJhenlvaUpjeHQ2NEZUbTUwL3N3NkZ2OXJqQkYvVFdNcDUxaEkvL2tUbWJmRndLcVZHV1hENzdtbFVSWU9TN1N6R2MxQTB0OTJzc1VhRGptdThlQVRXZEhPcCs1Y2tmWXdWOWJEV01UVjlnWHQvN2d6THlqRDkrdS9HUElIWVdhVVBSRlBYc1p2UW41WmJjd2cwbEdwVE5YS0pKMkRLcGJneWFsZWRGUXhxRHVtbml2eUw5akgvRGlBZnpZRXdqVThyN1JkeDJleEdVYnllZ2JPaVg4T2diUUlUV2FCbTNNbjcwQTVzSy9wNzZ0MEF4bDJwb1A2dDY5a3htSkRmb2Y4azM3ZnJUbTRoS1JwZ1NCaGx2TkRLTVlOWmFUZzdmOGlKYnVxaWNQcHRMaWRGQUo3cC9qTm5abVBsL3JLUU0wL2hFTTFrbTFQWVRvWUtyc3Q0OVNDYWc3K1dzckMwd1I1TEg0WEk0TVh1YUw2cXBuRUNuQU83MTBNUzVoWEdkeG4rNDB4VmV4MUVhOVNNc3NONXFIY240MG54aDdoaTJHbFYrVG82dUdKaUkyTnh6R1Q3VWpUY3JuWllxOVNjS1ZiNWcreEdJazhNU0daSGZSeTQvVlowZGI1YXZPaGROM2F4dnNyNXJmZ0U1TnJDVVE4WUFqUDJGYU92SFFTQmZIaVN4M29wMWZPT1g4UEpjSDlaZFFoT3BjeFF2V2ZzV3V0SThrTEl3RWx0UzViaDNJN1Y0alBJYVM5Uk5qb0o4bVBGWWtpdGIzMEhYeGN2OUVjZ0NaVXBkdXdORzFzOW1qbnJyL3F1UHp2ZGxYWkZTZHJRdmQ3SFZtTG5VbUVsR0RrVk1FWjBBSmwxZlR3ZENqaTIyUW16Y0l4T3AzQzhBaVhOOTdkR2JzclBYWWY0cW1BUU9melJ3dllqT1lKN0FGcmIxY2FiNE16cEd6VlIvUzgvM3J3TkRjZFZrUWszcDJGWEpDWUZEcEJxUXBoVGJ3TWt0NzRuUkxoL2hUSHJuOFZxN3lRUEdLYlZoOEROZi9xdjRpQ29yenNXS2JQT2d4bTFpRDIvTFlvTVl5dDdIc3RSREwvOWlpT1FzbjJrSkFvbU9OWXhIYjZ3VkF6N09CVmw2UzRZUUZTVC9rT24zcnl1QUdkT2lJakhoS2ExMkR4YlRHQ3I4TVdaRW5MdklyVndOeFkzbC9ybFJGam4vblVPdkoyRU5sTFprYzU1OHVEM2gvYXc2L2x4YnYxTUhkOEVLQ0pZS0J4Q2R5TTBoSks4dnF6SC9OdlFKMnVkem5NSW1saWNILzZFb01NeklxTGNZMUZuSm9CY3hKc0d5d3JMeW1BblN4OGI3UEVzYVVBdXdXa0hsdVV1aTdVRFIwK05RMnk1NGdoS1lYRHA1TXFYQ1BYUGVLblRqK2NjMldiNW1zdVM5RHdkOTJ4b3F5bi9KYW02NEsrT3NXY2RPbU1TWWhNSjNXUlpSdnFtcFFHcFhVMy9NbVg5cFcxcmVzY1lObFJuTGNsaTZWNjlXeUZKVy83Zkh0SU9sYmZGY3BHMW5sUE5kZkdYZnkrSS9mNFppSHBmOGFBdXdKbXVYVXdFRDR6ZXZKMlNZVitucnZpS3RDTE44MzY3cEFQd093VkE2MmFsVjdHWDFjNFI0WHBjbUNydlhlM3N2VGg5L0FNcVdwUGdpMVpUbzlyZ2RmYnFOeVZkWWs0UzUraVNYbkxPZjNjUGFwVTkrNHBQdjBrekIrcHdDTkpKekErMUorZDd3NWt2d2szY3dSbHh1YXlpK3oyWlF5QUt3RUZ2T3prZllreVo1OXFOTFdyMEw5RmZoVmxQNnFDOGM5WHY5OU14N0k4SDB0Mkh5TDJJdU5KYUNaaWQvUk0vbmZpVGhpaCs0ZnFQbnBXcElDYk5VK2dMa1Q0R1lFK3oyc2hGMFBQa2JuOW1RTndqNk1TTkhkcEkyWkhOOTNhcE9JdEZuMTVYdzk0ZlMzeGpkNTY0bFZvZkpIOFJKMzVjOW5RK01aS3Y2K2VSR2pvUmo2NGc1TVRrUEpoNHFPL2RMZjFIdzVSYmRIQUh6MU9TQXRialdaOHJYaXdmT1UxU1c0RnROTHlyVjd4N29tZytwd3R6b2d6S0hnZFplTVI1anpHcTEvQ3JTQ3hDVFJaa1F5TU5MeHAwU0VSdnBCd2FUbldVTEJPeVltSW85dFZKNG5KUlFFUkFPelNGMTdGWTBHUVVLVDZacllvNFJSdzhqYk9KWklpV3AyZVl0VGxoRjZaczU0WTVONmhMM05FbmNTTFJNcTlOa2lBK1pQRHJqL05qL25ESVZLNm9kNzVwYThNTjYyNFl3UzI2Zjk3NHhBUU1BWWpTbkowUFNGMDJTMmpyU1dlYzAyWUN4aGJkV0tVRkp5b3Jzd1VlT2lRc0MxQUpqQ240SHVnQUYxbDhEQ0VHWDE4OHo4a2JGTWYvZ3B0RVo1TTRnbkZrR2xoTkhUQ0JhNGlSQlZ0WjhQek4veGVEcEtBSHcyWXFGaEdSM3IvczdocGwxaHllSnlYQkpmb0lTWE1JNGpFNVFNcE5xR3pQZ3dBaHcyMFJwSHk4OUxtZE9SODlXbGNQRmRPZEwreFgwc0NhS3duanBUREJWZTdzOXd0cHRJNStaTjlRVHdaNW9zVjhmdHArMURMR0dQK0dYT2dpMkRUUFdCSVpLbC9mNi9FUEprZVNyOTdyNUUyeEpFeXNGNUhtWjJlMGIxRXRUM1hTWVlxZ29LNVhFY1F2OHlvajBrZzZOckRxMWt2ZHBOL05MQS9WVGdadjB1L2dSbmJLcXA5dHZjcUJDcVJPYU5xMkxDaUIvS2ZLVVJ4ZEE2ZGdBU05ES3c5RTNUVnVIa1pvSjBCeXJVZk5TUXBnalpIcTFSU09jcHplWWlQTVFIbXd0MVJnaU50c2VncGJaUE5wb3FVWmxxdjZvQ2J5VE9VZEpqL21MYnNNZ0Y3Rysxbmsvdys1SzZ5c1c1VXBiWVd5UDEwZldRMkV5YklnUWZpTC8waTFhV2VBV2V3V3Y0VDhUYjNvN2N0MnFtRFFXVDZKVHF1MEVQOFNEcktFMXNEbXV2U2IvRDdUYW9LYXF6eVBLQ1o1bkVqNHN4Tlh0OUtKUnRHT1d6QXNkOWJMTUxRZWF2RTJ1UVk2eGpFQ3ppellzakdodndkMHBXelo2Q1dhYmxxT01VWUxKV2JHbkFrYXQ1dGZoaHYxR3JYQVZNSHROVzNaWjFRenQ0M1hXVG8zR2p6YTFFSXJZVVFNcDBSOWJzTUgwVjIrN2pYOEdjYlZUSXNZL0k4Tnd5NWhlZURLTnFaNTQvbkpDaDFwYkIvVUkvR01ycmVTS3pnUG15MnBsWkJTUjgrL24wOE0zK3AvdEp0eDBqUUVvU0xDanordTkyTGEvUDh4MW5ERGZpb2c2OFVqZnNQYXVOaGh1a0FGNTM5eE1WVk9IVDNMTEhWNUs0bzFySW5xMTM3c0tNN3ZDZ2NRdmY5bjNydVZPSm9NNjIwRUhNWkxEdUlKQ0RCc1IrYTZXd0NzVWN3MjJTdnlUMExWZlV6bmFLb0tIbmZXbTVjTjArUC9FY3JwYkZ2Z2NWb3RKQ1R4cDlsc0ovVkVUZFZOWFhYcHZuYTlraTJEUFNaTHVHN04zcE9uOTA4V1pKcWhTaGQzSS9NQUVTenF1YmJUZi9CTStCRjNNTjVzazM4UHVHSDF6SFdTbWkyZjNwOWNBY0w2cDRNK1NhYU5yeUpkdm9oWm9ZK2JpczdDbWJuYjV5aXIxR2JxRjBPelFaQ0NGYUIxdEtveHRDKzRxVTU2NFJ6YU84QTdIMVhuaGl5VUtwOGhUTUY2UlRpQ0diN0lUVTY3b2lCcDBJZGxJeVZQTi9heEV0VmV3dDZ0QTE0Q0tBejl4TVc2emZ6MTJvYXR4RWVPUGZRbitHZU9acGlrRHI0TVVKOHZUeDk5UC9nMHVibEp4aWZMZkM2NENmMCtOY3AzWmNlNTB5QzE3UG1jaG01c2dsNUFBb2lUZTJFeHppdE80cTZFQWEwWXpPUkxyaWZkQS9xMzNWVGp5WWkvVStXdFNDZGt3Ym1XR0NZMTA4TDhyQ1ZaVTlZTmdYbzN5MkxtL1VIbkZIVlI1QXVpQ1V2MVdWbmMyalNoNVpxV0hldlFwTGlBSXNqaTJwTVhmZnExWFZqWXNLY1VQUHFPRFk3YVJteHFuRkZWUjM5M1pvSi9jbmdYWm9oa1ZxZUhkRW5yN3F4THV2N3FGaU5aYXh3YjBzMkpXSlU2YXRzYlpRQmlrYUprS1pqSzR6Um9xUzY3dTE1Wnp1TEpNYmNOamZsNDIvdk4wVklQNlBQVUJzTzA2TlRKTVNPMzQ2MjN3M3ZHSlVONzluK2pRUTM0N3k3NVgvcXNpSWtWQnRVbEp4czF3RnprM0ZOMVdMaXlhUlplN0JrL0hValhpdHhPWGE4QzRjTUUzMlpNUk5XZEhrMFNmR0JXUElrZmlDS0lka2ZVRmJwemNrU2xSMUhtUUl2L0N5cFdBSEFjT3ppMWVCQXBvVGdGQ0pRZzAyZ2cwRlZScU9RekN5U3BxSmdLcEVBSHBOdnVEc2hGcVNWY3I0RkRzdjlyL3Zob2NIMExFbVlnSWlzYm4vT3NOZktGQUFDZ2NtYlRwZCtobDdFdlVta1VpSTBDcGRkY0xQZjlEdEl5ZE5CRjg2UlVILzBmSkJmMUE3UUhOVDJZUDI4dmtpckxDNi9oK0hlS1U5WXgxckU4WVhGRUYrbGFjbFFIVTBVUXR2d01XOVJEZUxkT1BaTVlmaDlPRHk0eG5DdkdicjY1bjN1VE1IeEZycThhSWNMeDNvdXl5aGwzTFpJSGRHNk8xRTR6amxra0FzT1NBKzdNUGhyN3ZVV1VhYkpLRlZqZXJZT05DUUREK1NWNjNOa1FUOWV4S1M2STdOWEFWYkVBSDNnUHRWTExFRFRPZHllNnRyekdBbFdIM05wRjZnTDRySm1sUWpmWmxXTGZLeThReURBRHBmOFppT1k5WjBnTDF4N1NZSDkxcUFPZ1ZuQysvT3YrMWNNQmF4dFRHbzFmVDFuVzJaYWdHdEJoTE9HVmlSMkJmdWw3cmJNNzdwNkE3MlZOZHBSeW1yYVA5aDJHUHhSRVlyTHVtcmVBeEo5QlVoMjNNcjNKMGFWQk9EZUpSY1UxYXQ4NldyS0RMeVFSWjdaZ3hMTDNwMW5zTE9vWXZDemRvQmhHbFJiWHdKUVZDUHlxTVhxK0hhOCtSVUw2WWJEdFVwQmJERHdVcUVZSTFrcy9kZFY5MTBBN29GRktKdXZZM0JLWEVBLzFRV2ljR0grQjJKZjhoS2NDTm5mVDJ6OExDZkgxRHZFZzdqNFlKV29LV00vakZqUHdWeDRUMHQzaEdPYXhBcXpLL2M0MlF2bURXVlVRTHA1WTBZY2drWWc1TFg1cDV4R1lkbGlXM21KL3UyUDVxbys4aTlpa0xMSmsycGdieFRMMEF1d25XRE1rKzZLWlowb0xXNlZzdld1RWlmYnJLaFcvRm5BRmlYSXl6djk2bkU5cXlxelZvUkl3SDgxREFEaG85MXNwRnVuQzFrMzludHdidTM3NkgxUzZWampXcEdid3RYMllFTkp6ZEJNRno1VXZEUGFsajBzZDhVMWxSNzRDL3VMeEdkY1F0NEs5RlQ1TGxnZ2ZuaVg2V0tnMG5QTER2UzhRMFdnTnRzRHZRdFMrS2lEMjI2UTg4TmZETHk1aHhNeDRwSWZWd252bjVoVjZDS1AzYkN6YXBRLzE1R0pPRXBCR3MvdWF0dzZXTDcyamJhaFQ4dFhocTJvK29yMWdTZnpFdlRyODIxaTBNdDBUYXBuRlpxM0l0YURTUUxEMC8yMlRkbVNUcm1QVkRRK3lyMnBLZkxLRFFZd2lidDE3eFBPZ29aR0V6N29jTTVZZGQ5Q0hwZ0h3SDM5UnQ4NnU1bm96OTEyWDdhaGt5VGM2bUVBVzIxUGVLcWtVNTlIVmVBMHNYM0ZFQmJoSnlJd0oySkpmUUs1aDQycFVuUzhNaVBFSk9yUUJLbnZ5OEhhRjRDaGpXOUlXRXpORDI4RHJEUmR2eHN4YmNUc1lCSnNVbXpmVmY2eC9uWWhIUGZiVlFJUi9ZcWFPSTVLaG1UM0cwUmFpSllxek8vOEs3S21MVVBlWFZJLytVUDdPUGVhNk9YajNNdXQvR1JreUZkM0Y5TzBBTDc3SHl5SWJpWW9nZENvd2lIdm1pYmRKWVhUZWFXZ0F0SDVZZ29wQzZHYklMTGovVE5UVnNDbjhvandoS0o0SnBGVDJyN0VNTmI1N1FReWhNS1VZK29Oa2Zuc0FxRURFN1NFdEsvcXljenZYK1p5aGtPelJ6ZUtXMHk1YVB6MDE2UjMwVTB1WXl3V292QkZ6SzE2Sk5NcU1HVzdEbXF6a0V2ME9hNS9wU3BJZzhRTUFYeDZscC9pd0Z2Mm9HVEUySmk4V2VEQTRLTzNvL0FOd0V4Nm04dG9lTGVONmFnSHEvZXV5a2tZeVI4b3UwclJXZjhpb00wZXU2MFUxcU02U2t3aFBUcll4VjNESisrWWY5TXIraDdaWmV1alRNWU1oYXl2bFNRSU9aMkJFU2JDTWtvMUM0a0FXZjdZRElRRzBvUE9MTXRjU1NsYkZLUlVQYzYva2t0ZjJheStyRGVkZE9ZbnBCanQrczBjMjlLNDZERXozVlFCRk1TektaaHBEalV4MTdZVFN0MExSNk1UcnlCUzkyMXVFc0hYeFc0YmYvVzhrQjZmUkYvcThTc2psZ2NLWE5tQzQyNHhnRjVPMUVxL0J6aG5EZFdHOTd6R0VRVDh0T3VoTHMrWEN0Q0lJV05Jd1VPeWtzdk4yOXRlaVpsVjVrZCtDR3BUTzFhM2FydHVCamluQWlEeFgxaVEwbDB0dE0vV2J1aFdHc2RrQ3FMZGxkamt6SVJVL3c2cndHdGNEblYwQy9DNTQvTFdyekYwQTNRTXFNYzBuR1kwVWQzQlA3REdRakY2T1hXeFZWREF5YU1HRFdrRTNNcXNZWHZZd1NHVDRWMmhXOHQ2aVR0UFU5OXlEdEdvOXVYd0dXVmpUazg3SkVuaDFDNGJkZ2JVTUxtd2VGQjJobGRvNTFFSU5zK3Nia25GTHFOMW9RcFJsSk52VlNJTzdIWm1GWEdXdVZTelpMQTNXUDIyWWhlVTNDMGlsaUozUE5oaWN6dndFTWNUKzRzUmhNQzc2c0VzL1RZSDVWcFVwRVVpUnZmWWZraWFaWGp0d2dYV3F6VDZtYnIxNFJ6UEd1RTdTc2svazJyTUNkaGozRGxBNDFaM2pCMFF0M1lyTlZJdWgwN2g0NHZvWDNUWG9Tb1NjWEZYTXhqRFZwMnFmZmxzR2Jib3Y2WXNldnZWY25BcnhYQTFqcHdMZzMxeGtXbmhMT0xKejlsR1M2WUpzaGx5SHhSOTNINlNWRDFiYng1TGlOZDVwMnppL2diWmN5bFhKcitOM1Y5UU8xU0krVjkvaFJHUWczZFl2a0ZCU1gzR1dha0YxTGViRzFvMXRra05nemhIQTU0SVNmWU9LeVhGTkFLcldxZXFEWjNSem91ZnJjK1FQbXh5NGwyMzBaemhoM3Vnd3dxVThueXowMlJVdW9wVjkzYzlxWXlIZU1DeGUyaWlVdWozaHUyd2I5cW9icnRkSUZzUm01aXBSc2RZS0d3d1htZUg3KzZPSEJ4V3FKVHFDR3lyOXQ4VWNURXNmOW5pdGs2eUtiY242aUpqWldyTnlzYktrRkFCM3FObWFiY0ZXb05sTEV3WUxFUm5Hd0oxMk1PaG5VbjVYTjlBODBEU2MzTlZNWjRKbkhFTkgyR0owZE1JVVpDQng3aGhLUjlUS1ljaDAvc1NPUGJsNHYyd1kxajJrUG1xOXRoMmVNNUxYZzVzaE0zWmkzQWJZY3UycHd4NHlwZ1daYyttNXgzNmlBUlhDcnczbWo3aHNMTDJub3ZjcWJZS1pjaG12S1dsd1dZN3JIMHUrWURMb2JPYkZFLzBqTGVXbythMitzTWVrNDFBcVZXT0I1MHhqelJsVG9SMFh0YnJMMHp1SHhYelNwc0FWb0tNeEpJVHM1MDY1Q3JJUERIeW4rRG5zM1NkN2tKUGRJL2dmV1NmMWFEZUVGUm1WUVhCRDNYQ3VFQ3Y0Ny9WQ3MzZUhxeE1ob3Q0QUhlTUpTTVFUOHNxRmprb3J3bEczY21aU1FVYnhCazJJUVFHWHpNSkxjNHMvRWJ5TlZLWFBCb2VEVERnbjFlVVVKVEE1T3E4K2NoZjBqZExuTHh4SGRtSTRJa3lQUDVwQ1UzN2htUk5reG0zNHJ0K1BZdExFMCtScHhiamxtM1FQQndNa1k4NHJzWVhWZGdISFR5QVh4cm1aWHhiN0JERXF3S1pCOVBLQld1MWlqZExDa3ZwNWozSHFOelRjMmd5Q01uV1ZSOUc1ZlNXNEJtdjNuSG1TYmdEZFgwS3Zlc0hIRlVveWJUTys5NTdOZEJwakJvem5DUUJKOUxLeFp0ak9rMUpJTGNtMkxXUE4vYlpqUzRCYjdpSVgveExHOWtIaWlpcEtQRWY0Nzd0YW1FdVVpblpNeGZGV013SjExeDBRMzBUUVcvZEZlU2Q4cmpmRWFQYytldTRZSFRwcUlwMmMzSG9HT29YT1NlYWQzc1c1K2oySXNjYXNhSXJhaGN5TjBHbjBDUzVHK1NsdjFKN1hpVkNmcE1jcUd1ZXExS252b0lSYWgzNlIxdmxpVDRDdjNNSDI3SXFqZi9MRDU5b1JBRGxGZ1dRM21tSlEzVGtvcktPaEROZUh3V0hiQTR4VkVaRThWT2p4OXI3YXJ0czluc3lIZEdlWTlQa3Z5bExHVjV2Y2Z4TEkyMDZnT1hCTGs5em9pUGRwQ0c5aHIrQ1NLeDl2ZE5FbGxIR05GNVRGUlZTL1JBQzIvMDVuaUdUM0FZN1JCRUw5Mzk1Y1lWaGtXckZyRVVwazRkdWNoanNjZE1KU2FvUjhvNmMxWHNUaVV0NGNodmRrdlYyWGlteTNlSzhQL0wyOFJycCs3NnphekdTQmRiZzRBUmlIQUpyVVpCNkNTWVJYQllOMVMvRTJneFVLSlJkSzJTTUE4N1VBc1FaSnEwd0VpRThzeGlnaWtzNSt3QjZLUlRBYnZjTktIQllCWSt3UTJmYkI5dmtsMXZYNHBEamFpRkVGQUlBSngreGsyNUx3N1I3cjNyWHJZR0lXZGluYitVSnNlMFZ2b3AxazJhd0NtbXFsa25RUWpUMUxmS0VsZURwenZsRDZteDFBaHp6NStMa1VHb3BBb2h1WTJOcUVTbitEdTFQWHJ4VDEvWXVMb2ZmN2hLdExuZmhEZ2hjQ0RhOGE3RktUUmhrVXhxZFBuS28vMXRzRm9EUWJIclJtMS9ya2d3cnk2ekFZaVdqZmdCRnRFaXVsL3hKbjA1SDBPWC9yN0NGTXZ0bFg0ZGYzdFNnM2xLazRlY09RVzI0RDRhVTRFa090NXBPTDFXaDcwQU5JZVA0ZnpvOWhFK0RkYVpYVG9MZEhQSVdCY1VNSVJOQU9HbzdIN2FEUzJGNjh2NVNBdk8vcEY1ZGNPdytoQTVzL3RJdS9IQm9Wb0JlWERzNGxjQ1VucVgrY2NlTGpOdUkrS3VXLzJXYUEyZ0pzZEtpRnNqVHN4K0kxMEE5ZFJ4ekwwaCtCSGFxY3lMZjdFUkdTNFJvTVM1cEJyeW15TEFZWXVkKytOUDAxTytHZUxFVXFiSmcvd25OYnVROEJrVERDc01tNllYVzluYnIzSEV3eHc3NjcvMXpTK3M2RUZVYVVnWGJwM2RTTVRpOTVqRS9GSDd3SC9RMXp3cTlyeWRMN21Ed01LUE9SSjF3c1Bwa09TK2FJWHB1OU1VcERsSUY5UmVxekRuazk3N05YUXphdUNKV05QQ3FtbXYzZTRlTnBjTlM0dmtOUkhoM2VGN3pReHlXRE1xM0JmaFo1WEVjeDMwRjVmKzFCKzh2SVN4MFkxWFRGSEZwbXFqYXo0dlgrTisrZHAzY3BWdkFQMi9RdHBtaWhHTGtWK1JaTXZQeFBkbktORkJqWHlxSnJtV0xyN1Qwd09kS1l3bEtTVTVlbUNRcWdTSmVRSW41UTh6T3hCWFJhanhYZTdlOUxEUTVlOGpqUGl2S1AzV1NYRVNlNXlSNDZNT0o2bWZGdmI2NktSZEU1T3pjcmZUOWZLWXhLOWZWdzhhMkFXUklFK2I1WnZ4QlpIRVlVS3owdWlTdndFTHVicDE1L0NyRzZtZlJEek1NZUx6ZDhxNVZpWmFlTXNCRmNUTzdUMmg5OTI0TXZPdng4anVOZWJVNjZEeVhnUzdmWkY0UDg2cEVaY2VWRGt6YXhURmJmRjQ0TmhSQWhWdytSaG1KMUErejEwSGxpN09vS0RweWNaWVY4M0hDNDBuVUZPZGFJcHBtRTJxM2NobkEweHVjY1pCd0hxQkQvV2I1ZlR1N005SWtvMTRtajhvZDVSUmE2Q2o1TWxRSXR2K0poVlZxRHFORGo4b3JRM1lVYjVTUzhIMWgvRStwM3kxY0I1TGhIQjRSL2Y1TDR3UDMydUtzVW1uUVRnb0J2ZysrSTRqV3NPdWx5dnhjRjFuRDNaSWUzbTM2c1ZMMnZNS2JOL2J5WEo0TmdZZGJwdjZYVmxYbDE4VmdLdUVVa2tuRUFkbWROOUNQUzlOMjBlU09mS0N6NkpIN3JVa0pya1JjdEZ2aWpReGtoejdkNHpWV1hwTVlrTEllM3hsK2Y3emtKbGJqczBPVE1iR0JJdllMdkg1eUlKczhscEJpWEtkb2VHZmRBQVJ4SVNtWFRwbXFXYm5GT2RBd1ZSQ0U0TDFhNFFWZk1ERElXVjhXK1AzMi9rSkJhWVNvNXl1WXBEOUExMnpsV25UL1lzanBDSVJ6bTZFWUd5Smo3WWVJTThpQm1YMmJqZFBmeVlnRFFsOWhtVWFjM0VQeGp2WlQ3VFRFRHJWWloyZ3pkaWwvVDVzbkJjY2tiQktCRWIzYWdkdzI5TGwvVVdaMEN4WmRMWlNaNnRMall6WERZeWczOEM3T2d5MHhtVElKTlp0ak8xTmQ2UWJMSnF2dUhkaUFGem03L1FiaG5oUUJrTnJnRXZRTVVkYnNvKzlaakpKSTUxQUh4cUk3UGhQN3BMZE1QeHFOaHpwdEZOZmx1RW1rcEFaL2FINGFLTjBzeUEvOEI3Z2FwOUtzZ3llVzJnNHFMUThmQmRyU0ZzVUxOdXJJdmNoSWtkTnZuMHFlZGJNb0JuaTlxRXdjT053dzYrV3BOd0NhQUhOR09nSkRINkxmZWlpcW5zdjVGQXZzbWRUU29uWSt0TWtHNEo2M2JaVXoxSEE2Q1BOSDFrUEhHNXN2elBoRnZIN0NJS1ZydW9ZakVUTFZuWDJkRU4yVzBkUGIvZm0wcEtSQk5hTS9tN2IzRUpVRVJkMTBWMm5MS3NGeWZUME9WWlNPNDlSNzltRVRWaEVUalJ6Y1FkSVdSdVRtTmk0TmpOYjV2QmhkZTJmWXNMb0V2OXhrTjFsTDNsY1FaR2hFOWN4d0VDc2MzNU1SeEhuWDU2a2ZiR2ZoTHlCQWJrL1JaSW9QSHFmTU5Ya1dENXJPSHN0V1RxM2NZUm9yeUZaL2FEbFhVcjJJeHA4aEJYSGRXdUZ5NzQ1NjV1K0YvRGxzaVpxTmR5NE81SnpEZFdJdGY3VDZCNGFzaXZ2OHllR2lQdGpuYnY5dVVlMUUyTDRjY0Z0VTF0dmRyeE1MSkVaOFhKNmlVV0hDYnhmUXc5dDNTS1dIb1diV1l1bGZWQ0NKeUhhSGplSGR4QWdkUC9GZm42OW5BbThZRFp4K3JQWWVrU3VPZWxJMTVWWFJ3NWhvQ0kyb2VpYjhiQjlwWDZYL1BqOWRKTWJudldTTGtRdDhEREdwaHhrcyt3YjNOeG8yT3NHTVJ1Tjc3QThHMm52K0FNVnU2ODlTMy9FdTRDbmUzN0d2WWN6WDE3VmEzdndxSlRJcWNzdzZYVGtRZnp0Sms5ZnpjRy9DZE1id2tXdmVESTI5c2tJelByVFFDVmQ3T2RGbm0zYkxYd20vSnNscCt1Tkp4b09NQjJhak4zQVJhNHQvYW1aeXk1RytNL1o0a0FCSE1XSmQ5T1ZHLy95bStQWWxFbTN6Q0FyaGovZHgzeEpoMXlRck5WUTErY0dCbzh4WkVKQTlRSkZraERwOXFXMmwyNnBDMDBrc0t2bnVpd3BOTmdnVjVxNzBtREp4MmltMUFXUGVrU1ZNci90MHNsdmxHQTN3Z2o1b1JWS0NIeHNySTFmcWtKd0lmczhJUy9tUFM5NHNVcTRmNURoSWZBRVR3cDhqb2JLRm9rRkJNUXhjZndwVzh4c1VzM1M3ZStkMHJVV1oyQ3h5aHlkeVo0MU9IVGJjcHIvMEx3L0ZXRUZKTG5zQVduUFcrMXFCT0tUaEt0SFhXNzZGYXZnYnJQcTM1WUtrUjVyRm5lcG4zN0NqZStnb1NBcVdOMmh5aElNNVNqb2tSblRXTVJYN1hFc2FtbE5UU1laTEJ0THlBYnpBVFd0WExicFB4NVJFZEc2amxOSk1tZE5DRFJTR0tvMVVCdjY5V2pzdEVPUktKMWZGWVhSaVlNM1NwZWxzN3JROHRDdEsxQ2FTblhxQzR5SG8zeTZJNm1wZW84QjJXcGtRNVpmcVR1YmdnYmg4WVdRcmp6eG4rUGoyRkRDNVFIa2tGbHc2ZGVzZk5xZGZ5VEJ0R0VFTlkyWTUvZjFPMXk1T0wyWU9QWFpNU24zTExBc2lObTR6RU1oR1MzOEp0aUhKZ25vNW1TeUhtNEJJa29oMU9vREF3ZlVMTktsZFd2cnJlMjc4ZmREM2U0R3lHWlRycXBFblFreEEzSmFqNWVrR2wwWGlmVVdCRnVsNFFJY2p3YlpIM1g5ZlJqdHFKYVFpNmJCTHhBUXRVa2l4M21waDBsSEZxTXhlN0xaNlZZd0hFTDFIaVhGOFJQdEY5SXZ3dlNmWnJ4NFpDQkZENXRMV1Q0WWh0ZGhNc3pjSzVWZXVkSjN3RldrMnd2MktNdHFVaEE3N0VOcGtiRWhnWUt5SXVWTDRadlR6N2lCSVBoRGdwVzIwYUlSVGpDc0ROSWlacDB0VWc2QVVqUkVYMUdZNU0zVlFaNUhTUnV2ZDJzL0pPSmZ3bjdmSW05VXZMV2hNR2RBWWFsbUxBSWd4cW03My9IY1piV0NacS9kN0YxdGk3WmVxenNya2tWK3JnajV2Mm5MODc3UE5RVVp3bTN4dDhKMW1pWWlxSEpJVzRRdE5JcTA0TVdPOUZWOWZyNEhFMFF6ZTd2U0NiajdZNHozb3ZqNHBabkQyUlVFY2FpWU55ZXhZUXcyd0taMG54c2t5OTNZNTlZTElERWJDV2R6eXFjcVdaVjRic0luV1pjU1RuTTEra2tUb1dCYk1ndzNoU2kvbHFYeVpVQktkb1cyMkdTSjFCNWo1QU5SdGkya0pNNlliVWxBbU9wdkdoTXNNT0VwUitLcWhEWWpPQzhUV01tOS9PT1VEYnZidzBmTDdGRHN1NzRTVzhlYXFad0QxMHJKZnV3Y0JmWEd6WUZOUUZaY0hmYnFoeDM0enltM3ZKYVRTdTFuZEc3dVRYMHdUNXVBTWtXRDN3Zlhsb0FROXo4anpWa1ZiaFVGS1BXc3NnWGVyQndUNDRjMUlmWmQ2N2h2N0g1ckYwaTNSU0RkcENMRldPSHZTOStuQTIzalQ2c0dBMkFnTTFJQVd3NkVzWXlEbVladHpuOXJXK3l3aXViMW53bFB5RlA1M3Z5SjhsSXdFdS8wSWcxb1BFeGdxblU1OUwzTEpOSmRoNnl2TGF3NU5UU3NQN0dVeFJPMkc5ejhOZlJEdlB2VXM2clRSVisrNDVpK1l4aUlHWUpVOGNpeEl4ZVF3SjBOQ1J3cGEveXAwdytwekcwZ2ZGbnZwRzduY2JwRWJPNi9NOEJsaCt2cjJUSHROek5zMnBBNjBDUTZxaHZoTDBxZTNWS0VmVFpNODNsd2JpWE9mMGptcEpYcU5YNDZ6VFZvRTJGbTdjUEgrdDFqV2ttTDJSWEIzTWtkdWtVeks3Y09na1p6OE1xZVQwSVN3K3RjNno5UHRibzV3VXVYbGJwZ3hxaHFaV0pjNHF6YWI4bmpVRzFDNUNiZ1dWRCtobHNVVlpRaVVEWjlRWHlKbUE5SmlMZzNWMEtuNGY2WVdESGZEWE5EdnlSbVB4UXgvZ21qU2pHc2RNb0VSMFM1OENxS01FTExyandnNHhHTzVGU2Q4ck04ank1RDlpWDJnYWZoOG1yNDVIRGJZc2xHZEY2d3UxMS9oRTJLRDBDbzRmbTdCMis5Q3dtc1daMXg2UlFmT21LYzZzOG5CQ1dxeWRPb2VIRFU0cCtRWERBVDVwTVBVOU1JRFJlVlVxT0JGS2o0WHRpRGJYQ0VGc05rV0NUc0FDbFRjTUQra0crUWkra3h3Mnl3bEplOGVQZ1NpdS8wdVZqaENJUElSNGFwbGR6bDJ1dENJT1BiYjREUUd6NndBZHVQa0FzbC9pSjJmUXlFZ2lFR05CYm5FWk9tZHVDVkppeHNEWlRtZkQ4bnVjTUpkNGg5b3VoaEtBZlFYMks2TCtWVTdsQktCYkE4TjF5dTZ3WlJuZm50VWw0aE9jc0NGOTlCUllWdG9NTjY3dFRUWVg0ZkpNUTFNbVhnbmI4NXB4ZnlwMHRrRGJRQTZDdUc5N0ZlZXkzWWRMRlBhUDFBNzJXWEE5bitVLzQzZnZoaDRXNWlkM29iSUppaFNBMUFvUFA2Wk9Qd3B4RGQzSUhlL2c4ZzUwSWxXOWsyZ3ByTjQ0VCtjREp2bkJENlhQNEx2SEJ3NEhPNlVHcnc5U3R3dmFYdVVmTkdTNk9nemZ1NTRjVVhNazZRQitBKzRrbFBTVS8wQ1dWYmNxWm9xc0FWQ0hOeFlRQ0d5c2tTY3hGRTNUbTNqT3pGWVNueWlZSTBza1oyb1E3bHEvZ3YyV09MZ0VVNzY0dzlCMXR4aDJnSTdhSDQ2Und4S1E2c0pBVzI2aERnZzF4YjRMenNqeENYMXVrdGZDeVVSdmMwTEw4UnE4OG5RZ21FNnc0YzU5Z1V0c1ROWkRQWGZiUHZqdU4zTi9FOTNrbWUzSEp1Rm9GNFRRWmdwNjMzOUdxbTNtdkN1aXdUb2hTM0NBOUxtUW1vS1RKdzVDQ1E4Zit6Tm5pYlRvZmQ4dDhHZGJzNEwxL3kwNHdadTJ6SGNCQWN0dzBYU0lsaU1BOVJiTm82b25ocDllM2gwZEN5NlJQOSt1WFhtYXROck9qN0kvVGZMVldnaG5lcmJYdVN0UjlndU1ReWttUWJnRkF1ZmJhZjFiUVhjWkFEckQxOWpOZFVJMTREWms3MGx1TDVvWkxPajFTQ1NtTEt0S3AzUGM1VThiVXlQNUswNTRaaEFSbjhPQ1ZmQzJsSjBYWHZQS1hESXhZZUlMbzU5SVJ6aXRwMjY0K2lnOE1VN2NqVmFZVWYyN05oRG55SlhpYWNDQzJrSUphYSt4Q2p1dFpUeXRwMGVob2FYbGhpTDFEUHpLWmgzSS90UmZ5aDVtQkw3dzd5NzdReXN4SFlyL0Q5N1o2UlRUQ29EZ0hZR2RVM3dLYmI0VERVcUY1Nis4NzA1eEVGSldxcGNjUzZ3R05yVVJnSHVDanlvVjFXMmtHK2psbGZMZXllZFFsbDM3UmFsQkg0Mzc4VWd3eDZYUmRldTMxa1hsSFQ0VXB5R0ovMjRrVVNHT011S1IyUTNlOUdmOHNySXEwN2lZSEg0VTlZUFh0a0Z5YnkrTi9IQXJXdHpYeFZwc1I2VVc2TW5GNHJSdnJaSTBXbUtjRlBxRUdWaW8yNG9QVitnS1UyY2hTSnAyRUlvdkZXRTUxM2haVTIvaU1vaFlCbEhqRDFnRCtyeDlvbjNYSlUyVnBMYTJmK3pTUjhnbW5VM2xTblFIUElXMWFnVnEyTENPdnlRNlI0TkpGWERoL3hEWWpnVjlsL1BxODczc3NRVXQrOUJSWWtXYmpJYmJuWE5qVTl2eW1TVVZzeVQvRHk2NmVVcjlBRDBTb0RZVkpVVzJLYzJadml5WlhVWm5YV1BHSXNmbnNoK3JYaDUyYnp2M0NFNjlDTkJDSW52T01zQzhjUmZ6eU90M1EyQ2d0Qm93R2d3QmVFYXJwUXRPTWo3SE9qRkMzeXo2Sk1TUHJDaUFwaDlNVXdCWXdrbDNGemx1V3hQaUxyd1ZYUVFmUm9vVWEzWkM1cjZpSXpOWWxlZnN3SkRHaUlNMW01ejJNdmJYRVdieWE2RXRBVi9ET2dKa21ZNk9QbFJsbVZOUENBeFJnRnRFelVoTGQydS8waEM1eGh6WVZ0WFV2ZTNFbU95NE1WOElXR09sRXgwS1luMjY5NmtuUVg4K2ZJV3VUUlZmaVQvQ3RXZDEyUW1USE5Cd0svdzVkdlIrWmV5WjZTWHBRbGlQaTkrRFFJQlM4Ry9iK1YwYVlZZW5tRytQNEhEN2hOZ3lZOEZ0WmZLb3ppeU5CazhjbnJzNDdXNWNBRnhheUZrMlZzcEJwV1lSVSthRWljTWJDNE1hcVNleG9YT2RBd2x4dGZqWVNkTVFxbndZS000L0tlbWFDVHBSWkgyWGdCNFpBOFVLb1d6bE9icEVoQUMySlpldjBRRUxKc2NkWGZSbndBcVNPYW8vSEYzVXNGam1XTlJqa05XemQ2dU9ETGRxTzYxeTJYSTFndVI1QjhoeWNBc3JhWVlBdWkySWdHQUNoaVp2U094NmtLekNNSXhTUXdFb0YvRXYrSEpOMXF3NXdpMzZ3bW1lWVhUeVF2MHduODBzMFdNYlp2K0ZFNnhyTHRUbmpaNHhVMnJGdUlzOS9SRlhFUTZXYWJiZk1Qak9MZ1c3UlFTdDI3WTY3dHJBRHFVREJyM2ZzZnJKa2N6bWZmdVJPcTkxd0JLVXVQTThoc0FNeGZxUVZkN0pNaDlpZGx0VFRtdGlXOGhNMGtyZ1JDdnhPdjN4UW9xa2IvaEF0ekNOdDVnM1ZHdGVqSmNuYlZHeUJjdm1tVEQyV1RKT3F5b1NLQjl5VGl2Y2Q5ck1aOXRsWWhjcWpzOXBrUnFPTUx3L1dLWklUWCtHeTZWVGo5WTVhL1NpUndaSEM5ellVdjBmWWpzZDkvb3FaWlF3T05FeUtzMTc5clUyM3pNZmcrVEtQem9jMlZuNDVOSndyMlFHUUpabm5QbUJIdUFSZjBlTXR0UmNFbkhkT0VpMW9YM3BFdFUrMGhhMmliRW9tSzJyN0h5UnVmY0w0MmRLbURUaDY2cjlwbWs5ME1idEpjVkx3NlI4WHR0cHFhMzl3SCtER3hET28va1hpNTlZQzVMMGdtQ3Bja1FGMUFNV2R0Y0VRZHp0am5tQmhPMUFUc3ZPTVoyNzIyN25OK3VnSFk1ejE0ZnQ3NXoxdFlrdXJJc1FqbXh2VjJIdHpiekVJSmxXdTZOdG9QUUZMRmhtZE5lRDc5UUtaMGE1ekNFcDA0WEMzZ0VPR25XMEQveGpoaFYwV0NiaE95MTNhRlpmampjQ3ZFaWtBbEJGV1oyWE9yM3NNRkZESEZtbEUvbVFNN2k4VTFrb242TThNOTBRMGZYdlEwRE9KejZkTkQ2WXBtWVJ0N0NXUlNWSmFoK1ovaTJvaUN1L21vSTkzZVBxT1c2dzZsUCtBakMvUW15TTA2WFFuZU9QbVFTdFFjOEdxTWJSd21PeUlLSk5NNmZzbnNCd0FjOU0xNlNVTFNWRnR2SzJkdGVTaDVEbmtSaXdKRDlaNjJBMG5WN21kUDNhT1BURkhWQWMwajl6YXJxUkpFRnpKRDdoK1ZmaUs0RCs4cnRkUGNrcHlWbWJiTFQ5YWNuVitHOFdsNXhtNkUwTmtWeTZJTHhhUzRKbUx5ank1TFpZSk42c1dYODF2Z3hnYUZqOHdrZzU2RHRyM0JlaC9IZnpSVGZBczU4eWp4dkVIYWNNTjMvODZ0SWpCMHROZWVadDFxN1krT2xGbFV4bC9NZi9PSHVuL1lMSnQzeUMwNzlZYW5EUnlGWWdsdnVQK3VCQ3Q1OHlPNnU0WldRaDhzcUpFMEhjaUZIdFR1Qzk2anA4TzR0YTR1bU55dUJMamcwTkF3QVpjZ3lqbEVUc0NZemU0Q0JMbTFzdVJObkY5eURFQkNkdXZJdEE2RzZEemI2R2hzZmliZ0x0WXAvemwvcVhtUXJmQUh2NnB4ZzNHOHZtYXFkQ0pSdDRnY1JrVmF5UGpJSmtQS2d3Uzh6enlLQUd4WHNORm1vRUxWd0xjQ3I2YUpIdkVZNTJqaVlvWis4azl6YlVqRGVFQ3o0ZkMvdkhIQXRBeWFMTVlzN0lHbDZqQll0ZDZUbGs3eTdscitwTi93OWRsVE5OdFJmWjc0OUJqd2dBUmd1bk0yN3BZUDlUS0k5VlZWc3dISVRaWTVNc0VLYmNIdGNqSW5PNng0djZETG53Mmh2eGFjRFExRldBUnJUMG9qcjVNR0VvYUt6MFA4SXd4WkdIQzdWZHZZTDBHVnF1c3FLcFdET2E2cUZjaVl2cHNnMVk3VG96YVNmZmYvWVdxK1R2b3ZKRFJXWWMxek1WcHlZbjM5QWZzNTcvS0xWcTVsVHFESVRvKzRoNElKSkhyRWExeUxmaHF2dzNNYWdNaWZoOWU0SVRldnc2OWNxM0Q2UE9MelN0MHU5cmZaL0tjMlRiMjYvZzFOMzhjcFVWUU1aZEhvL1FLalJtZk1ZNC9ucTBNRlQrU0g1VUdzOHpMUHVrT21UaHZnMVZQTHcyWFNFV0dMUVpyT2RIYlZzZWVwcm1VZEtTL3pLS0hOejB5Y3Yxa0dWUzNneEN1a1p2OVRVUlJQS0RXSGpLNGFxYlM5REVUc2w0UFA4bkMrUDZRY2thUENGME1qNld0TnpRdDM1WGIvalRIRVN2ano3c0RHWGY2V01YZExRRUxNdC9Rd2xUOUc1dGZoWjk2SldPK2Judk5OUTFER29LZjZwRllOWGZDRGR5cnIzS2NyQ1pRVWlGK0lWNS9PYi9PSGxMdjBjZmhldG9BeVBtOHlGeklGUFcyQXpkbDE4ZlV6VzVrZCttYUZKWURKSEpTd0ZRZWw3aERpcHlxMjg0YmE3eWw0Nk55NWI5ZDVDOGRmQ1pnYjhxNVgxNUhyWTFOOStvQ2JUdXhEdkJnelo4UU9kNmU5QWpvSExWdHdTUDRmOVExaVNCY3FtWXJJM083S293ekcwK0g1ZXVsSXE3djNuU0hoMWVwYzBVMFVBOWw1b3k1RGFoWDdCYlJZUURtUTY1aC9VUUszUGROTUN0ejI3MytwZGt3bmEwTXgvd3R4OW9hSjFQR29NeEluSGRYR3lCMlVrMytLdjVsMWdaYWY0OWVRc1BENGFIME5WYU11eDd0RmNFcVR2bUFBdExqdERlTVJvdzdJd3RsWUZXSUtENUdvNmdKamF0bWRTRVlwV0oxRHE5ekJoRHNZMTFmVW93Umw4QzZMdm0zeDNCWm53TlBTSUhQUy9Jb2xtdGNnaFU1VmRDZWQ0Wjd5dVFrQ25KcWJCQXVJd01oV1J0L1pNa0JtWDVDVk9naWtiT2FBbWFnZWxscUJVdVp3VzVNQWFyclFqTHRTQWRSVGwxam9zL09iV2VVL0ZwZWQvOWd2Z1pobmlzcWt3YnpsZ1hGY2RBV1lBeCtiS1dvbWo5SEkzUFROZTExYzYvRWp6cU1VWHpPTVlxWHlRZWxWdWRjMzhpeUtOa09wTFZMM1lTcTMrNy9scHgzaTdqVVRYZ1JDWEhjTXM0dk56dFBzSTlzRG5xSWpaS1pIM25hM0tEU084Qm0yUk9JNXZ6aGJnZUlhVDlrZE5ndjdTME5TQTZab2xmcUg5NjF5LzB0L3p4OHZxMGIySHJ2T3JsWXFjajdPRFk0cnNLUVVya1MrUXRXYTJRSmhkcFdlWDA0dWlUWW1OYStJaHU4T1plMkdVL3Vsa0E0eks3enc5MmdKU3kwMjZMSVpvcUpaVWZTVGV5Y3lqelpOMjFtNCtZTnNub3BmNlVCNnc3Rk1xUkxoa0VQdC9zaDFrQ21OK3VnU1psd3dvUmRFMitwVnFOZ0RMdi9lay9GMDg4TGpWQ0xzc3duT1E2U0JPdDU4aHlVakdwbHVlRTNNMUVsZU9CWUU0ZlRxcm5UVnA1aVBGeGxEU3RWMjJtaDJoSVk5RmlSSWxvZFl2M2E3VERqZ2VGYlAxVlZ1dlg5SE1RdkRJNVU4ZWVOUWkzNGlNd1VmOHUvMHdnYVQ3b1pyY3ZIbXVsQ05ybTFkRWVHUXhwVjFPMUhZTko2VGFMN0JpS1BUblBtNW5NekxiV3RBZmVvWm8xRXlhZU5lM1BsY24zb0xlclJlUExWbzFKaDQvVFpYM3hESWhPdjIzQTgwcVpVMDlLTS96K00vNzI4TzdsT3NtR3IwSlF1Ky9zYlBnM1pLcXl5dWlWam5qaE5uWFBDcW0xVUZkbjE2WUF0S252UllxVlFLSk1DdlRPWXFNeWdmVW53TlVzaXN5STJiNGRCUWd1cjZ4WG1HbTRrQ2VodlhqeWlvc2lBUmVVdnZEQ0pkc01UeTVjaytXa24ydVRhcGRsWU1CQVVlRkd6c0ZkejJoSjJiZVEvZzAwZWsrdFRsV2JHM0N5R2VDL1p2RlBXdjkzRGNMbmtSL3pvc0xvb2lkR3EwcmhBd1ZwbThnbTNoZmh6VURFNzRSVzRWa1dsMlUzRyszUU5lMEdySlRFVnlFVEhuRmhJMitRRzF4UDdqOHFkdW5FS1YzcFJGZVZZVnlHNFUwd2w1di9YMUVPbGpLOEtWcVpQQTFIWmkwbWdqYlpJUlFUdHY5OGdhdSs4TGplNisvRi9zcHorTTMzTWdDLzhnK3UrQkxuSmZQUGhSNk9RWkN6bytJSEd1STNURmx6REpMMUpHcmU4SmlTWW9lemczaXhiZFRHSkUrWk03UkJYVkNSd253UmE4LzN1b3dVSnk2RlhBdkxqK0UzYWQ4RWc3ZjJaeXd3RG9VbkJ6UExhNUVOMHEvemtLdjRwUVoremhtZG9TSTlTQTFNdVNaL0J1eHpmcWhaL3Y2TjlkelptdzMzRHczVWgxd08zNC9aNWs2WHE1NWNibEZWVFlNdm1xQWYyU0hpNXFmZDdGZmtEczY0RWFJQmU5TlduOU1aZGY3RmdLY3lRYzNKSGtuRnFEUjd6QlRPMnBIbFRzMzJ5WFQyOUZiZWFQWjJSRGovRUNTZXdwTmJUYWVuQUhyMS93dWRVSzFKM1lDMXZxVzY4ZE54cU4weDEzZmthVXE3THkvUVRLRkZoa1g2cm5VSzdEOTBQa2xwYmZFWTlRTjVBNTVRYk1jaXlvTFpmbUlBSnNkY2hTVjkrSXEzU2ZVdytaRmJkd2VOUGYyRUVPcXErcmNSSklxZ3FtbjY3WTNLWlF5MWZvRHhLQkpsbFhWWGpucE5tWFlqQy9sMktYTm9yQ1AxSEU2U1hlZzFIYVpYRHFOZ00zQWp6dVJPSDNTM05xRVFzREdDVHV2Vlk1akpSZ2wwVWJIaEx5eE9pVFNFaTY1OEplakxlTGZ5QWU2WTZCK3NUTk5ZQ1ZKT01mbVBxR2cyTitOc2RxTHJPTERraVBobEpvbkY3Y1Nxa1BQRTVhK3RXQS9CdmdmYjlJdGxva2xRWTdKTVZWd25IUTBjUFNoZlk4R3o4bHpqMkZnazZ3bFBLVzg1Vjk2R2FqcGx4bkovckQwTlVFZk8rL0lmNkZCcXNBZnhNT1hGWm1acCtwS3lvV1Y5RjZKMTQ4V1Y2U2pXR1g2Vnh4WVFxK0VRc0xQbDJWMGNGdkorK2QyRmE3WG5VaVFPeGlJT3A5aGVQOGVOUytFWlgzS1JPU0p4blJ3bGd4VGRIMWYxNHlPYUF6RDFPUVIrYnJqTC9vMEQ1bU9KQndmTnlRNVpTMzlvV0RhcytBUzhacmtrSVlnWVpHUHlMMGF4T0RENnVYZHhWTTlJWUhQc2lpaTZ6SFJhYTk5NWdqdXBKeEgvSGE4M01ob01UWTdScFpaVEN3NGxDQklCQnJKWW9GNnRWVzROL1dETVlOak54QXA5SVJaR0FKUUZ6Z0NRcnhVckFQSnBwZWxnT05hSUVhN29WVU5JQmtlYmE1NWtEaUJXbWJZR21QaE45cithZjRsbGZ2RGxmNVh3dDZOOHJLTmg5YjViRkRuczhGc203N05zbEI2dCt4RzVkQjVzeFE4RW9JKzVxZ1FqM1lwaTRqMG0vSmwvQklqaDEzRlN1enM0YmY4M0hDdUVyalp0VWxiWENCZlVaV21OQTFhQ0hscmRsSGN3WHUwOCthTjhwcUlGelVScUpycDVySktmak1WYTI0RVoyNnYxSjNOa1V6VHM5TFh0dm9pUzhSTk0vdDh6UHRSRmd3YkpDMWJLWmRtWkNCL1k1U1dFaFpMUGZMZFkxVHlrM2NkeENLZWRkUHZxZGc5MDZWb3NkT2gvMFowcGVSL3JMa3hTL2FSaGpZMTc5b3Ywa2s3a0UvQVAvQ0pYc1cyWnpES2NoM1dEck8vS29kU0t2STFFeFZhblBualR0aThqZDRyeW8xSEZVczJLN2pNT2dUVDEvTU9XWm8vbVBCeFQyVnpoaSt1d0RRUGsyd0tuK0tZQTRCSFhFU1VRQXpraVQxV0tIVW1RMTdENHIrYndZWVVOcWVZNk1xVFlXYWhoNlA4V3FKaThyOStUQTdIMWF2VUNHSHoyM3o5SnEvYThZOHVwK0FHNUkzckIwN0l0dTdKUjYvZ0R6dStaTDBlV0p3QjJuZUhBRG8wb2JWQ3BRNkZ0N09TWSt6UzltK1YrVDM3bW1CdVFSTExSVGZlNFIvQlVKbWdxa2dvWmdOK3BFV3R2QmdncHBUN1IyTVJYMEN1OUszb0JXNDFDalAzMzhmWlJvaEFLY2JubmJJWEVBVmNpbzBGdmlySENKc1ZLNTZNU0UrSHJ3Uk1PcG5ndzMxS2ErZHowdFR0OVQxaFRjRytVdFIrV2NZWWVadW5uSi9WSVUzUUdRM1hnQlY4dEliaE9LQXFZZForVlg2U0Z0cHNsUG10YjhaMW12NHRJS3JPYm5zcFVJajQ1SWtxQ3V0U0doL2lJcC9LbkVZeWE4S1NrN29BZ25pZFV6SmJHVi9qOGtRRWNxWWNwWGZXWm1IVEpMZ2g5R3orWm1NR0owQ3B2VkJBY1lXbmlqcit2WXdZUCt3MXYrKzJZOFA1SjV3YXFoMDBIV3JRbHdQRlRKVnFhd1FlZEFObUxRZjd0azkxTDVielZxNjRvMXhqdjVPcnF6MWlIVHhpQWUvRVo3RFNaVHRldmdYSWFXcHZCS0tSeWNQM0hTeS9jUjdHcjhrbTlRaXllNkMrYlZDcTM4Qis1ekxPYjZpOGdNK3JYWkdDRnc0MkVNTTZLRnRicFZnV29uRGVxclpaeU9aeTZXYWZaUyswSy9rZXdWN3BpV3hudzN5MEhTbVFtOFA3enEwVnM3cUpjT0J4Lzg4VWdUTnJwbE9QeWZaUXJFd3EwaFZ4L25UdUU1eUd2ZTc4SFd0aFhrRWlSeHhKQ1hDS1gvcXZvV3p4eVNYZEVQMWl5WWJHa2JtbmJibE8rWDl6N0poNFZPOWJJSlVUcHJWOTJab2Qrdi9Uc2hsQmZhREpncEVyVm16N2RKVXlhVTNuK0pXNmxpS2RWWGlOVG1iMWZkdDZYQ3liZTYyWi9MNkxVQlhPcURQR01SVk15bkw4YzVWT0tOOFhzQkFqQTI2MHAyeEhQOHJzSlU0QlQxc3RVL0VTTVlYdUZxdXFpYWtUT3Vab2ZqSytUbWlMekdMZFVCcUZaOEZIYzJGZldqc1BNR2NTbWFWNzhYK3pKNG9yTDB1MnhFdkZIUGxzWjVhbFpjaW9KTGZyWjA5SlMvUTExZFpjdkVTbUVxd2FnMDRVOGc5clRodjlCUUNER1BhQmVDR1NPd0c5RWN6SGVocmVPZUdHWVE1bG9iL3lqV3JPWS9uT2wyMUg3cnBkd05FZzQ2Y1hpc0pVbGdkSlpBWEhlcEZMSUw4bnpLRTNGY3grQTh0ODdFZzNzVzdVcmFlalRTOWtjQW05YVliL2xlTUJqNE5nQXRXK1pEbzMzS29mdGRUcEpuUWtUaXpBKzRPNHBPMUJYVjNpZENXRHg3YkdvaGhMV3Y0OWovenNtQXVVWmdiOWN5VkozV0M5UDEyVURsaVJtSEJwaEtZM1Zoa1VLK0htWE0xMitLdEY4NytPWDc3VFBXdU5RTFZYWkNvWWtnUGlKVEZnRE95ZmY4ejVGNUtFVUdkMXdEMHYxZkhEK3lYWWxvU0tCellHUGNQS3NTQ2hiakFQN1RTa2ZmMzlOSStWalZzaWZGQkVvQ1ZIT2lBQ0c2REZOOGIyRlFkMUd6V1phdUJnRTgxRHVFYjExamtTbHFnQlVZMGhuekxTQjh2VmxUQTRmZjQ1U0NtUXNtU0JlUUNVY0ZCaVhpWmV6bGdINjVzNzhFbHY1S2g2cHY5S3ljTUNacFlESS9yZXQwN0N6ekxuWS9GODRmT1puVzJGVWNkSG1PcWhxR1pVczZrWUxObjFKaTVmU3hoWjRpSG93RjJjTDgzZFk1R3BGWG5ySS9GUDF5M0NxL2QwdU56MWRJZ1FFczBxdEZrWjk2Wk9XWWZzNTE2UExzVjcwYk5nYWVOSVB6ZytsQkMvemVMTFFZWWFsWVZJQ1piUmxSQTlqZk5IQUZqekVDZkVRTXlYNVh2NWMzSWx1MmhvaHNZQjJMbHlSa3czVURMcHZuUnpRckUyZFVmRW9DcVFpcUV2c0M5UjdYaUhNaVRMM0tOanNNRjlCY1dJVlNnL2ZKS0x4UTg2RTdCbnBHVm4rY1ZNRXpMZ0xHZjg2cms4Y0RhdVNkR3N0c0F1ei9WcG41U2Zqdi84UUZqK2FqaU9icXZpZkRkUTNPZUdYa1JBTGhOZTRRSkdMa1V1SmNOeDF0S2Erb1hXem1TaUVOaUJoQUs3TFBlYnMwaExvSGdmUXdKdUloazJmb2tVQUE2eHdVaCtIT3JGdDd2Y3JFUElmNEJtaXNkNzhTdkRRWTN1T0lqamxLNlh5TUdxN3V6K2lqQTB4YWNWeDZHTFczZnJKSVZRQWZvWExnUDJ5bTllSXZDci9hVG5SQ3BqTW1LNGQ3VkhDMHV6K0dBc1l1SElLaVY2ME05d0hla2VGMFVhRk1HZ3BzNlNrUkg4UURJallyMmljN1o1c1lvUkRiQUpmZDROaEd4ZzZzbTc3Mk1sZlQrdEh5eEtMTjB6SjAyb0cwSEh6UjF6WnJkaVEvMFVjNUlkeWlvbURwZjA5M0IrUmRSdzBUdHNOenRyT2p3d2hHeTEzNDFvblVQa2x0TFRPQXlYTEt0L3IyVFJtYnVraHRGWFBCM0NiazBZUlhlWWUycW10UTBpQ1N0OFZ3RkdwQ3FwbUNyTlVXaWh0WGdncWtKMnVDNmQwOFdmUzR2UWxaSDRySnBOb3Y4NE8rWStSTnZJbFFkSjBCTk14b1dUdGt0S1EvbS80bUwyNFQ2STZSWnVPTTBYTTY1RmhSaXdDdXRVeUhZbVU4bkVmSFM3a1JkSk5tUENBU0d6UUd1WTlVbm1ZWVpqV3cySVFnY2FmQ3RITytiOHZzNjNiVDNKWlQ3SXVaVmJJMG5aTUo0QlFmVVVyY3V5eVU4eWw1TUVTOUdwQ2RTdXk3Y09XUnIzelpRTzQweVl1WFdEeWVJRkI1SnlJWVlBNjdQM2NLQ28rcVF6VVhuby83eklNTU1vdzdrZW1GYm5aM2xEWlk4bEZ6OGlPUEkySGVkUElPNVRlV24rSmwvN1RHN2dwOTR2bElMUmNMUkI3QTIyWTM0dWZKM2NOZzgyZ0dzOUYwTXMxMlVvZmlNcG9nanZ2d0F2bjRoQ0RyN1Q3OUlaemlxMGtZRitkUHRQVnRVZ3dFU3dBSFIwY2JJMER1M1VzUFBYeTFGdzNIMHBDNU40U2U0ZU5KYkhzVTFJMEFrazJnM29WZm4rUkZZemVPSWpYMEh3aU5SQmpDSThGUWtZZ0ZJUC9aWjdDMDdjU1VFVjBOajhicFJrL1Z4VGVzRTcrR0JwNmQwRy81WHU0R3hNa3FtSU9UcnRNVmlLSmFnOTdpZEVoUldzS1BJL0k2UVVQb0dnQWZRZXVVVkkwQXlaTGpEL2xkc0t2NUNVQmc5UlJQc2RLNk1Nb1l3aFNHaWJndTljdWhZK2FKcXB1MEtMc0YzSWFRWlE5NG4wczY0VmRtVWQ3dmRYSHB3cG0zY0dueVhGeWFaaHE1QUw2QmRiRmp1UzIvMkJGOEVNVXd6aW5wOW83aFdOdE1mNHlCNmZudjlqSnQ0d3hZS0p1REc1WnN1Rk03SXlvSDgvVTNhWm5uNWUrbVdKM2dqTk1Rdk92V0lmWVMwcXJSQlZVNWx1YUMwZFc5NFlRVlNuYVZHVU5VY2VJckRpUURQSUlRRGxzcFk3YnVBcXdaWk5iTnNDMnhFQjVrM0dlZEhzczZqekNnT1dlajFIbmdoQ1JlV1dvYzZpYkpyV010TW1FMDVuL1pHNzgwU0NsYjZIZWd3aVBSSmJMYlpaMCswMXFJOHhFS0E3VU1nZE96Q3I0eTArZVk4aEJmRmhZWUphOWJxWVMyd2RoZkVFVjZDWlV2Vyt3SGIwc05CYlQybFBRY1BPQ3hWUHFFKzg2d3RRNElTOXZybmdadzdiYkExLzZmVEVpMFQ5elI4NkhWcDkwd3F1d2p0cmJZOWRxZ1MwSFkyM0l1dFJLUFB2RG9leWtZSlNMQ29wVVpoWlJhRExMajhoTlV6bHFUMkcvWnNxWDN5ZEZDQ3lxbG1heVBWWjRlWGx3RHdPVFUvT3JJN0lsSWFSaFRPZDJTVGhDRTQwRGs5RDVrdlcvMnB0MHYwWXhLYlF3cUJMc1JxeW8xelpjemNaV2phNUNxYWNjUUZ6N3F1eERuTGFZL1owSEJwVngxSnlVYlJFUkljK0tvYzRxanAycUNuWTRGWUhoaUVPTHZZUVBtT1QrZGJ1QzJDcG5Wd2JDQ3ZLVWh1RjB4MWZRbm44ek5yek1GM09rY2xickd1OGRwYUZpRzdhTUk1bmVPUWdmTnZVOFIyYllDaVpJci83VURId3ZkQys2VXFPWDRha3pIaWpYekVWNFFWZVgrTEJJcnhKZzBqOG8xZnFjRFgzQTF6Qkp5U1llRjR3VWlJSWFhNDNXVy9HbnM5cVNMRENVYmxyZG9RVjNNOXJlSzlBV3dYbjhlK3B5OEVXYVFoTUxUaVFieXY5SDhLd0ZsU2FSRVhNdjlmcXVMUDk1OUtDME5TTkhiOVQ3djA1V3RxMUtNZWhaZWdpcGR1eHU5eGtpYkVQOUtsK3hVbUlpWXlyTlVyWTVqbHlKdFBTMWR3VDc5MEhydjgvblM4bDVWWjZxVnRHMnJCLzBxdHVRWjd6OHFlV2NLelhDRjRObXBnNEN1K1dzSU1ZYy9pYkVkK0NHbUVHQklpZ0k4Z1V5L3JxWFY0dkVnaEJQaTI1eUZWb1ZTdFVLdFcybFZFZFNUaDROSS85R2czM2NWRFBxWmxqZUdtYWtRU1RNMXBqdFFValZYdXZCUmFjRitVMEpyemtodzR4QjlzaWZZUWNXeG0wOXViWXc3SVVwVEk0aDNHZmhtNkRoc2w0YmFyUlUxRm5oQUtDZjNpSkIrWFFPZTR4YVVnVTRGT1VaU0JUTzVsb29zeUdQOTNQdlNaTVAraEhZUTh0aTNSdkhmWVVqVDFNZDM5NDJvZTRIdXNpTDcxRE03dG84dWVSRjFJci9CQXpIRkJNOHc5VzJTeVFUemQyc1JwTml1ZlFIeGhycW5aMGxPWTl2NnZBd00zWW5jUUd5V3ZJTkRmOXBEQVpqUFZuNThOU0Q0NVVBUU1MVmNHc3NaNDllQU1YelpaZGwwY0xVeW5MdXJqQ0F0TlpEWWRpbHU4TS9OQVFkSjJXZmllTFY2S3k5Z3NUaXQ3bGNRS0RFeUhFOGlXNnkxbjYzaUlhODFucXJwM2dhc1ViOEFJZDJma1hHWkNUWUg2MGo0ZFVaRnFia1ZFMmd0azZoOWkyc2NvOEpJUkhJNVc1a3lxaEVqUmZuZEg2ZEJRU2F3MzYxQTJ0VGd4VG00WjhOdy9wVldVdHU1VHh4VkZPZ21UZWJLQmZkZEFKY0JXelkrZEd2NXhRSlRtVUUwc2xIQUpQRXVaRGM5QnpSVXh2bjRiR3gzblN0TW9BSTUyWVdzQ3hCRzFjS1FiaGtQWWtTSFN3ODdHcTRwbktOZFRwUGZqKzhHbkNPVUtnd3JGSXMzS2NqM1RWTmtKbnhFVFg2a0xoaDNpcmJtdnZZeWJwdHdRM0ZxMUZ1cXRiZWFlZ2Q0ZGFESWo4NHhlVUg5R1NsRXV4S1pvWm10eDhMT3N0YjFZMDZFdG41SDNFRTJZR1BKV1gyQXRMcVFjNWJHenJnV1lwQ3BNd1U1K2d4azBYZk5TWDVTbWwyTmxlQWZjQ3AwZGwyZytFVnA4dGhIbHZXbVA4dFBqSjJIY2xhME9CcW01dTlIcUgwcDhNem5vODRsNzBlZW01QThxUzRVYTRjWmxiMFk1TFBLd1RCb3Z5VmUrUWo3MFdmTlF1SXVBMjhFSzJQZ0JJbjVURzlFUTk4WTFscXY5OHpMVFUwNEsvQ3NHdVVmVk1tajZibmhEVTVuby9Od2crbmRKSngwc0ZMS1NEL05QU1FvaStodW1MRnVqYUIreEVJWTlDa2ZXMDAvZWROSHQ3WklvNUd3c2dOMjVKMUhPTVYvaDBzbzZ6UVM5VjFVSFVPdzkvZmlLWE5Wd3VoUmhxRlZHeUx0RDh6NFdDVHhjbHJ3U1lNMU96b2p6cTA3SGs1eVcrc3IyRUgyRDYyWW4zeHloWXVNTHIyTjlEOTJQdUkyb29jMzhkSVZtTnBybkNTb1c2VitpZTNZbTY4bTB0UUdoblNnbW03T1ZZN09Fc1RWSGx0WmFJWm83cHdRV2t0cWJvUGxuYUR3Z3Z1R0ZCb0pWMmVZb1hQOHRiQWswT1FKNFFLRzFVZE5NcHI2ZHhRbTErQmdGTnZQdGIxSm9keUFkdjRITU9TbGRYRW81dS9OTmllNWlZYjFWQlFibEE1QTFWN2xoZUQ3bXBuZVdxOTB2cFRydHBDYUU2MFE1NFEzcFZPTFRVU0FrR2hOYzVDVlpFREZwWjNVSG5NNTB1U0QyWDErdklJQ3YyU2N5ZUx4c1RTNTZkVGJBcmxHdk5heWhCL2tpNXc1WGtaWXBaTWdDWDY1NmVpL2Rhb01hV0wyTmVaUDNCWk1vMUlYVWxPNVAzb1RSOEMraDNSTmN1WnR4SVVKVW9lT3J3aXdtZlZKWGtFeEFBaWRFNU8rNUF1MHJyQ250R2pFY0hZYmovT01ETDFRYnUrV2FYVWZKbUsrTzhxRWZMb0NQZ1pFaXoxTDNDQk1sZWZ6Q2VPYmVTbGkzN3E2ZWsrQXZYcWZseElOWWVmOHV3M25UUjZDRXI2SCtsTGU1N2JsZXNxK2p6M0FkbGVvNlBCcVVQNU5LRVp0RjJKTkY4cUZxcHlXWVhacWtuaHlIVVJTOW5PMEE0c0FGTjVhWThOYXRMMWZDS01OMEdjZ2JxRnpuNW5uWnlZT1psdmZ5RFVGUmplandEaytVQUhPTEdTZDRXWk03d3FHN2RwTmxVbE1kQ2RMN2xYWi9MSGVuWitMN29WbUhWRGJ2eTEyZW02VkhsWTFvZHNDRlRDeExMTlhGR01HS3oyYWxlV1A2UlUyZkVnYnJRM0RKSEZHNjZQQnRuQkhmQ2o3M3ZJOHQ4OFJNV1E0YTJhU1JoS00rZng5WGRsRHpXQXRNbmY5SGNpVkpleGdiTFNUK24zR0dFVnQ3V0FNdGRrN3hUOGNFUGRxRDl0SjdGYkgyNDZEeEl2V2VCVjRVeU94T2FuSUwybmNPano1cVNTcnQ2NGJUdE1sVEtHMjJHU3duT2VKNVpNMlJDeXA3dmY2QUhzU3VHc0NrL3pINUhGUWlnNW9CS1dKajY2N0dPdW4yVy9RRGpyeUoyRmZnaVJNOEFpTFJ0TlE3WkJZbHM0UXROUjFyTXFBZENGc2M0TG5MTk9xRlcxZGVwRU5GZ2xDZW5nTVI2MlFpUStMQ3ZaQXcwUUNQcERwcS80UGVQc0llMUhkc25sbzBKcTlITEcwbFRMT0M5SE1pOUhiNGRmdkRlSVZiUmpUVUFKa3dTeFNtUEJqKzRYMW9GczRqRUpKdnQ1RHptbG1JajVWSW9velFuK0RpZGpkaURiR2dZRjZIUitPSkdKWTJ6Q1JmQ3YxTlBjU3EvQXRpSUZkd0hQRWp1ZDV6aGYvVUJCU3VTZmp4OEZxYTdQT2FkWlpjR3RXMW9SRUtYUzFseXVZSGVWRWt5MkQydjdkcmNTK1ZDbHZjdnNNNnZVRUxJUjNaKzhRNTVCdFA1UCtuWlNnL1EyMENWRVJrZFkzQStHbktZNWtBWEFaZm1ML0ZxSzNKUGNBdGZ5QkswVGE0MDlXRlRlZGFBdHI1OTZ5cC9oK3o3NDVCVHp2dlRhWUl2eVlTd1pMbHVwa2pCMU0wUEdKRUp0RkdrNklYOFNpY2tMZmlYQ2I0QkRvakhlVktzakE5dTB5bzk3d3hzek5zWkNaNFd3eTBLeFAvU3ZycFNwSTc3NTV4OVMvREpOY05NLzJsY1Z3QUhOQUNZR0lHM1MrWlpWSm84Ym9QRVZ3eUVsSVV0QXhuODdGV29nUDhObGNzTGFLbThsaERLb2RlMndjQ083dW5LS0o1TVBRZWpKNUplaUdkTmswM3RrL21DeS9USXRpMi9jb1QrN0piY2hwL05udU5ucG9NOEdzZkxydlBBbk1JU2g3aVRnamVybm00dE9EdkgvRDBrdkdXWWRWUWFuRG1vMkFhaXF2bHg0ZlphU1ZXVkwxODZxRUdqdXIvekdENkpLQlUrWVRXelA3Vmh3eUJlbVpZTTM3Qy9IVnY3WktML29MNjRLd2JzY2hqWjlvblJENHBXK0RjN3BHaTRNSWc5VVN2azB1Z282bEltOTY1Ukdnako1bCs1SGV5OWpMSlJSdXBKS1ZtdUxMVWZub1lTR3crbFV2RU1ReCtkVDF3emc4Q2VzVEw4NjF4YmVNcS9NeE1qUGJIS1hOdXdEb2V3OWEreVg0dUJSdlc3bEhGcmkxaFFKUW5Ra0lXeElBZHRjbmtyRGV3WmliTldLbW9mclFiTmV6d09PRkpmQjh4ZTA5amRUNitlQnNpV1Y0MytCZTVYL01raDdDR0lJUXQva3Z6K0VwSGhWS2IzcDQ4c2pic1ZBcFZBbWtiLzZTN0V0NVRmZTdoN25wZkxaR24rM1M5T0JhWnhYWjhvMXY5SW1TK1NWQy9jWnh0R0RPMVN4OHhXazVJOUpiS24yZEZqY1JkNkhGc21wRnZpMnd1bit0c0NWSStGMUg3OEdYQW9ScDlVU3dIL1hXU0w1S1dXNnJxWENGMmVHZEFPMXM0d05FYTR3RHh3T3IwRDNGWlQzZytoU2p1eWZjZU9WYUgzZUV3S1czendvZE82TjU0Sk1GaXp2ekhxN2FMM1RZY1BoQ2dsZG0vQThCU2RyNjFRd0Vtc0swZnBINGtDb29VYmZsZUh2ZGZMTFkzbmVxYWFsWVBoajdOMmRad1FyZTVBT1g5dHMrMk1JN0I1YVZ2SXBiTFRKOEEyVTVMWjFqcHFWbkhQeFRVbkJ5QVF6SzRzYWthOWxZQmRlNlFGTnFmM01qcWR0SHlWQjBKbUwvUWVjeFA5SkZKYXZocHNhbHNSc1NJVWVFanlVNUQ3aW5lUXFGY2FKclUrdmZnamJ5L0x5R0tzdFFRNUdpTWlSZXZUUDNHd2xmUi9xU3NaWVJzMkFzOEdrVkYyUk1kQzRNbzRLeGxDczEvYklTTWRWQUEzTm1hUFdUOU40eTFuMkJGK0dMcHYya0Q1bVc5SUpFQkp0dFJXRlR2Tktabmg0VWlVNEZkenl1K3p5MUFGY29HYnE0QTNzQk5qODNnTGhEV2hZTVNxRHZTdXBFeUdJR3VvU210WVA4b05GKzZtOEJHdDByaWttckUwTGdBc2tTMFFYQlJWbDhpUnRPVDRnZ1lmaFR0SjBVMmRSME44UG1INm51NUJ1STVPNCtjRnBRVFBOZlhKWGZJSU1lR0paT3JNa3N1R0N2bVBEWDhhckUvYi9Dc2NRTUhLTnNBc2Fxdjk1RGNBbWhRZERJYVM4TVd6cG5RSG56bG84MFphTmhRb1ZxY3ZmbmFkVEFxNW9pK0RGQmJadmxZbm9QMENhcVYwRDNvdUg1V1hsSHpKMVpSRUg3TUpJQjA4LzEvc1FPOXRMRUhDUnN0Z3pMd2JQcXRYN05adlNRME9sMUxFdkdsVFZhUHZUL0VMT3lNdVp3SXdqd01Cd2o5Qi9JZmNkaWNZN0NxQ3Q0YjNrNXpubDVGTUsvUFF5MktIN2xudGRWVWQxNmRZcDBDNkgzMkx2d0NFRXhzcFgxWmh6dnpPSExzRDZ4cXg3ZEx3S2d2ODd3b1BEeHVKL3kyUlJCSTJ2TXdsNklTcnQ3VFBwTVFJeGMwbjBHQ21RUTJacjBobXRFdEljczB5S3FmNCtXM3llU1hFOStPcXYvM0FmTllHS0VVOHVCVVpLM0toa1hCSk9kNVRFbXY3OXBkS3JhTFV1TURtWTNIS2R4eHhEb01YRHFzY1JkLzRFd0NSY3BrREZuRTEwdGpmbS9pZE84Sm9HSmVkU2JWRC9LNVViM1Q1c2hubXhFdjgxZStTaDhGMHhoK1dDS2RrUithRUxxa1dnTGMvR081ZEpkcU10YzRGT21lZnE5RGR4MTVSN3VrcC9FOGxweDdzczgzR0VBa05MR0NTOC9hSEVnbkt4T2ZGZUQzKzliV0NqbDV2Rm5uWmlGSDQrQ1JpY2tJTDZVTEM5UFpnVzlVWm5RLzNRR2Q5czF6UndTQVBPTlpQQytCU0YxNjY0RU5QM3VRTlBpakF6UER4cm5iMFd6bm9tR1hITVdiL21DVUFybTY2Um8xUVV4T21iR1RHMXBWZjhGQ2p0Tm1WY1pvZS9hOXhIMm9rQkozOGhJdTNhcVJhakRSNzl1dnBwRTl6OG5MTURKbWlGUVBnRUhVT0taZzljcWltUk9zQjVaeENFNkxrcTdmaWFKaW9naVhWM1ZybWVuNkFuMVlnUEc3QVp0bUtDai9zT0FYNVViVWZqbTY0ajArS0pWM0I3QkV3dDUyYVBSQmJUc2g4ODJQOTFLemNyWWlJOU5ZejJFSlpQbXJDYzFScUxGVnRoNDhkTVZ6eENHb0pYOHkwd21ycDJDTGlmR1JQUnBCYmtsdGx0WHFOUnlOVTl2TEJLZFpkQXkvU2hvQkViRHJMRkN4eFpPczc5SGgwZWhYYW9HMUNIWFBlYVVTK1V1RG9WVGtLTEozcU9KdnJFWEFxQlE1cEx3TEliQ2w3MnVnYWVkYWNmM2ZibjJJWXFFclRwTnlzOUR1UU9jUXlFZVQzeExRMURrYmRkRnUrWUQ3enREejBVb2UvVERreFllQmRibWdrdEpKVXphblNHbHhZT3JpVWFhb0g5aDRzcXhjZHB0cER1c3VnRVVJMEN5UjFacmk5ZUhnYmxONHdkZW5XRWllMThCQTd4Tko0aGwwalhlWEJLQ3I2YkFVbWlFNk5BT2FlZG5ndng3MElmdjB3Wlh2UmVRWHZsdEJUNW8zZ3dWMVYxWEp4ZlZnd21KNXJ0WDUwVkc3RWEyMkFaWGpZdjMwR1FKanhyNXVueVdIWkdKVlU5TVNRbm5FNVB6SkFXS1hSU0EwaHdQZFgrWmxiNU0vWmpiV2xkemdvZ3lvRnFya09zQ1piZDgvNTYzNjJDdGJFNTJLem42MUJxMFpacTJoZXNSdWgwK1NRNE5mT2ZwTTYxOEpWTW5hNHlzaTdPa3JuVkYxWitnc0RReVZ1ZVEyRGVXRVdnYXl1ZzYzd21NVkxiWmxsU0JrSTJIZjJocUJLRVRKc3RNSDNnVGJyV1N5MHM2V3kxdW9PTVlDQ3dSUXJCQXhoWGRROEVuSVhSbHlCeHVZbTkxZzVSRkRLS1FOMzVLWmxZSXNKVmVOcFNHVmtUNWNWV2IzL2pjaEs1bmUvUHhwSVhPNlNzRjRjaFBleEZZakdjQmp0QU5VbHdONll1bDRDc2VnMnhoNkFGWXhpekN3RHRSa2xGTWlRekhoTEtUUkp1T212UFY3Y3MxMWhZakxXUDR3WHdCQjhXYnQ4eStHSVVueHRPeUJXT3daM1BoSXUzNzdPbU8vSjJKSXBZM0JnaHFYQm1zdkdscHFoZ2lTL1ByZHpBYTM5QnJDZThiamxyb0FqT2JETVJGQ0piaUdXRUZ5QmhDK3BuUUo5V0RraU5YMGpiL1U4ZTgzREdRYnFNLzNHZ1l5NjJOWlM1VnQzeDE4OUNJOUFUYzFXbUU3cHphUmlqL3Z0Mm13cENmN0RNTko2OEl4NFFVRUd4dXFvelZDc2FBZyt5TjJPTk1UdWNuMkFKR2lVdnBjRVo0RnlPZ01XNk4yTkgvQlpueFA5WHE3VnFWaU5WWkFKcjBoclFRTTU0SXRTY3RrWFJ3c2JQRkVzb25RcmhmVVIwdGwwRWlMU0N6YVRVWldZUnFOSktRbmpwWlg5UWRZV28wS3dNdmhpbEprRllIZmxDenFWNmErV25jdFN6YkZubG5IbzE2SklhOHc2cjRFcDNITm1zTHF1QlU0NVgrRUZCS0hJQXUwZjBpY29kTW5GeFUvOTJHZFNERDhyU2FoR216NnV1TkJCdWFUems0cFFSM1hEcjhvd2ljNG52Z1VtM1FxaFc1MjZHTjgvYTFDL2g3M1BQZERMSytlKzU0TngxU1g3RGVTZzhjcUlHVmJaWE1EMWhOdXBBU3RwSWJGWDkwL0V6bDUvSHlBYnBRV1lMQTRqTkNyRXc0YzBIQlp1MUVGQmNrZGwwZ1VtUHU1LzU0L1FBa2J5N0VkUFNzK2IvTXIrWUE0U1drT3lsTzBONHlLeUtPbGFnZVB2SThhOTJQSkNQb2RLdGRSRklpY0c0R1Q2N2c4UGh1VEpmK3JzME44QzNlWXJwK3daaVJzbURza0RWVkFPdU5kakFIWDB2UU0weTBIVmlWSjQxZU9neVRTTzhzaEdWVENuY3FtQkZScm5pZWxTemNtSnpUQkxQZHNJOWpNU3hyangwS2dWd2hrZE05V2U3NmxLQk53TW1CeDlXU2x5L1VtYXM3NjJuTG8rcUtXSWFHZUFCUEFXTHNkODc4dEN5OTVuOGgzNVdRWEpCbkZaQ3dQbkRUZzJmNjRkaFkwSGVHOWtXbjkxU3NYNEswVkRBbEJTR2JleWd2VXRvVlVVZDFSQ2JwVnZXTkhTaDYzTmp3TzJQdGdveUdqMTFvVmJPR01HMVVITEhPSFMwZDE5RmtuYlU2MEg4UWRtNFhONFJycVV3aXM1Q3U5NXZQM2RIbEthRWVHK2xBQkpJTWxnMGdIY0l6Z3FUQmJjeFRKd3hGdDJ1d2dmdWx0Z09UQ3o5bHBuRllYMG1hdDJoUVlUbXg2T0NyK25KZ3R2ZGpzMURsOGJBUEdtUjE0OG44Rkg5SEhCN2d1bjcxbll5VmlYanZBeXhKMGJaY29HOEpubi9YVnlyVnh6V1dQazVwU0hUWERYamNoLythY050SEpxSFFlKzBlajl4dXBJY3pRNVovZUpkRVM3eGlKS0gxL0hocHJCMFNGY21aeThoT3pxR0R0NjczSnVzNHNDOXRQQ1N2Ri9ja0p0MnZFTml1bFcwUCtwdEF1MVN2NkRZdWk4c21VZFlvdjNjZzBTZmRDSXNRZUpZdk92OUNxcGNueElSYVdiWjhEZzVBcWxzUzY5MFQ0cW5nMDhkNlhrOWliMC9OR0hrR1Z3VU5CSnU2K0dmbmMwdnFkTXdQRVhVeHp0em5NUjNjb3VQYUFyREVIeUpRVEU1YjZJbTRXaExqSmFWMUpBUWYrNFhna09YK2hYT0doRTExY1FtdE5TNHJNZk84a2NDU3IxUDNCL1VCcUlhUWp0elRsWlVNazRXZTloZGRGMXlhNGVocUZ1RzFVdXl1a0l3U0RwWk0vS3dyRE5KcmNra0xYYkl2Nm4yMmZ3NXdUSWhtd2VKTVdXak9vWUFTZ2xOSitPK3hJdU4wVE9mQXc2Y2dSNW5zSytVd3dSbUtTOGxNZmdOSmMwZG53bk03K3ZzUVpaeFYxQ3VYMnl5YW1ERGlySnArSFRjdElIOHBaZ3BrZkpTV0FuSHZ3U3ZLU0hrYkxLaGtOOFVVZGN2dWgyblgwWE16UVFac1NkSFFVYy93N0YvZ2xGRUdXSHdGM0ZYeHc3MFc5Z29pVWdoM050L2lGSGYyOWJRNSt1Sm82S3FxQ1AwWTdRTjg1NDA3cGs3blg5bC9YUEFQaXVOc3J4TmVtcGt3THFxUEp3MXpYYVpYcDF5ejVMbDlZeE50Qjg4MCt0RjNaekMvRmp3WjRSWTdEOCtoQlcyQWxWSGpBeWFGVkpueFBWOU42c3hXa3BXYUp6a3JXb1Bjd25hdTNrc3pTcHk0MDR6cHFLeldYTzBOdEFSc2FzcDA0T2Z0UTRtaDA3S2cvWS8zVmJiNUwyN05WaXI2Z0lUdkU5dk9CYmZFSzNBcFBVWFRsbjRlTUFrMmNsR2xJY1JLdUE1YjBJZkdPUC9SM0xTWVhvZ1ExZlQ4bnphRUdSNDgvOGlka1Q5NG1wK1oxT2VyRkdqQ1dWMUxQYXZHMHlQaXhEK0F5cDlSUWlmMTNxcTZobGFNS3pZMlRzOWpiNkhDQlVhWmJMVzdXcHVqNWhHemU1c2k3OGc0Uk12SVlPdVRaczZ0VEE1TDI3V3p6Ym5wL25ucHlOVzBic2J5N2l6UE5WaTFqUnZWZEQxVXZkbjhUbXdXU1lud3B6ZkloLzdhUEVrcjBrcURSSnJTWXNKM2I2M1B3a2xWekowT2RlWEdCTEkvcHQyajI2Y3VVZG5DZTZpR0hlLzZad3Z0MU8vRWxmUDJ1VWlDMS9XbnhtdTRoME16RStXNDFWMW1rMDFaQmc2R3UzNWpwRndWS3JJZ1Z3L1lJR0hsNUJscHRlNWEvYnVmN3VaZjRpcmNTNVMvdm1zTE9pRkJuM1V6eGMrVElrUVNPUDlOY0U4RzNuTHVLZHRWUlFZYUJLWnJoQTNCT1dPZnc5eS94RjRXMUJxRnhZQjl6Z1ZVeW51d3hkRHMrT2NkQlI0VjEwdTNEdUc4L2g4SzFBTTM5V1NnRTdoSWp4NktrSTAwbE9NanZMN1RFT2ZzSUhESWlJZGtTaUVsMWdkRVNweWs4bEVLbStxSmVCYWEwNHU1VU13RG5uYWVYVktQRzFXbVlPanBKeWRad1Q2QVIvUFRUT2M3eE5kTXJiSlNjbHdiWXN6RklxK3Z1bmRXVWNoa1N6VzdqcCtNbERMRDNrMjlsSFh6N3RHWVFvMEtLc1ZOVGVzdllyd3NqT09FeklVVEpJdmlPMjhja29OaDNJdjcxa3Y1dGUxRUViNjFiS3lsMzYrUjZVZlVHT3ZLY1BnOS9QeGdlaWljbC9zdWZCeHlQVkVTbUN6RnhDUmtlRFoxL0Nhem55WEhmOXE0TWVudURrcW1BNU1RaUZteTVyalFKazJrcExleEhhTEl0c0ZReE16NXZURU0xQVR2aUFrbkdFSmltV0JHL0U2cUlTVEE4cUNwK05zQUw3SUZpSWtVNXJRNEVlVC8yWFdjQzFCdnZJUHFydFZWN3lNaDN1cXhvVi9ZamEwSk1SQnVRR2E5S1o4cHhaRG1qa1pubmlDZkc5QjNybE9ISXMxcEFGaWxyRWcweDZTM1dpREZZODFDcHZJMTI3NDBVWW9wYXZtWmg3NDN3MUFGenRWN2pzU0prRExEVTdGTk8zeHhaWjBSTjZ3ODhxMmlsdlJjOW11ODdtOU8vOUlhS0VVN1d2UXFBUXArTkU0T0hPZGxmU2grUVZKQm4rY1crUW1HOWlodkFnYlo5b2xCcXhqSWUycWwvTFhySVJOdTRua25tdW1FTExaTUd0aG9QSmFSNkhLdmUrL0lQSlNDc2V6eEQwcHNvbzJjT1BsNmxVNUhsby9oeWxyazFnU1QwR0JSbitqb0FLSTFhaVErTzFaRHphN21aK1R6ZnAvZUtBQWcrRW16UnZCM083TGJPZ0hEbDQ3cHZoTVJJblQ4NEJ6VTJhVFpFV2pMWDQ3UlVmUldPdEU4Y1pwN05hd1lRUVRKT05WVEt6Y3ZJWVU2RTRubkVML09IMmlBejA3RkZWRmkxYnlCQkpveG1GcERkOHZxZDJueVk0NXhMWEN5UmZQZU00akl5c3N2cUovdDV0ZlJyV0VKZEphQUtHd0F0N1BYdUxqdkFWTHY2VUpLTnAzOHhrd24wdys0bW1BQW51Ly9NMm5NMFRweU51TnE5c20xNDRCa1lOKzlvTkpHMXRjOGVTNFg4Q2c3V2IxK0tzaWlidXNSemM1azFXUlU5Q2R2YTFldEhiYVYyOS9IMDEzQUw0MngyOUVvR1U2NWZoeWNLR3FOUGk1VGNTTzJNWEF1QmVwdWZRZTRIVHZqWVhpYXdPK093cDFWSXpIcHpuTk9HRytyQ3RvVFNjajNiTExib0UrTEdQZWs4U1ZuVVdWSmdyaXhiVHpTYm0rQXlIT1BHMHdiV29QU1A4N0d2ZWlIK3ZJK2NOdnU2clZFa2srSjJqSHd2VTJUSTRUb204SzFRRUFpUkEyZFFOZkZ5QlZpMGNhY0FEUUIxQmVveGVVUjRNd1hqYnQyRjBKQ1g4R2ptYnRQeDBFOXhHK21ZNlVHZGRZSzFzTnIzUHJuOTUwUTNFU2w0aldqcU5YbG54VWVTS0szQm9kdEZacTE5TDBDQXlkVVVXMDl5SzdNSW1RK3RSU0lWM3lkNUxJY0pZTWRvYjhvTTFQY0Q4TStwSXgvZmM3QXVQcG5mbnZkMWtRai81dUthYmJjTFNVcUdubXNNT3pqeW5Ga0JaekhoSEVSNnNKV0FjTGRWRWdSSGMwanErUHNFaENQdDJ2VXdkeVA0OVZnTENJc2p2RzF5TkF1cVdTeHk2R0kvOGVXOGxCVXB5UGNIUlFJcXlZcjZzcmdVQ0RqeS9LdHpZRlA4MEFNRkZXb1dTVzBITUJuZ0ZSeFByNmFkSUVEUWxHc0wvK2F3ODQ1cnQ3WFovTGlxWFZYUWt2VHQ3dVY1VEJPMUJ3clpXWEJobEU4ZEpnaXh1NW1VMERYWSt6clhyMlladzVZVm9NTGlFM05XblNHMTJlM214OU8vUUg2NUdIUmY3VHp6WW52dHgxeU0xU1cvdVQ4bmo4RUZKanN1NnloSlR6SEkzb21CclFqcjhQemxpR1dDQXVhVzJvTWpHZnp2bDhJbDdaTEFqTkwzZ3hiWUVoSy9uc2VZTWcyZ2QwMmR3ejA2R0YrN1JCSlJWM1VCUjJvN2tsWDJqaTA4eXNrNkNueUZqNEt6MWgrSWxJS3lDN0JmV25FUmQyUDAyY0YyZE5KNmJFTEhyeHRVb3Q3TVRkNFJZSVhnNGNXUmlUMzk1Ym5nYnpZZnY4WnpkZWR3MExLYXRtL2oyQkkrL3k3TzRaS1NDSkt0dFplZndmbTM1MERWd0w1QUJtcnFWdjh2enp1T3VmSWpSNXlURm9nV1Y4OHRVdytsYzBsdlpSRnBGTnBuekd3UFMwZ052eG8xVE9Kd1ZRei9PVzYyV2Y4ajhUbFRjdzRqR1Y3c0R2d2V5MjdNWDFobzRmdGkzME00dENQT0IrV1NsT3FoVHhDd1dtT2xVazZvQVpVQVBsc2tEeHh4Z3YyZUhFR3g0b05sTWZSd2VRdlVRRDJtejY3aVFIeE9oVUd4QjZ4SFpFb2RqSERldHM2UnhoSThJaEYxS3dSajFnTzNBZms5S0FmcHN1ajE4M1YwenRrSEQxekgvU1dLYzcvM2daZStyTEZOMmdoaGxoL2IvUEtiK21abGswM0tjUHB6Y1FxWWlONTlYSFlaUE14Q2RTWDVoV0loRHZIbUd4UlhBcDhNQ0t5bDZxd1Q4bEQ1eWdSbzkveEM0bkh4eFJtK3pEc3lEdG1pK0djaGR3NWNSQWY2NjlUMGJmVHYxMU85ZkVkUWhBRzB0RGJvT1VXUjRxdVhEdGZDVGxhNXZ6Z0RrRnAybFdEMWlJNnRzUW5FbnNFcExhaXFtcEh0eWVqTnB0ajRqUWJHNXBaZ2tnUkNFcGozaEZiS0h4UGVubWl2MzFVdmlEbklGcjdOTjhoeWpkQyt3TzZXbGkxcGpkdXY2TFc4M3paSkZBdXVtY0s3TlVtTVNRUDNlWlZ5Q1V0SHJFdDlkNUlCSmY0eWpGaUE3ZTZtdnB5UnBSbCtMYW5BY0hLTWp0RXl2Q1BBVEh2UmtxcllmRnNra3RVYmVtUzd2aE5TOXBxZy9yMEpxMUNSZ1hialRmV3ltdXJNSHZldEhNbjFYWm9EclZQNGRWYllVNXdGSExXMmhGM2JzQi9GTFg1V2NnTXZzZnpDRmZVaVhoN2d0YVJ0TlpaV01iNTkyeTVCMXpsRmY4STlWVVNCSWpFcDZCejBFTmpxSWMyN0lKdmtOZklLR25yaGR1VTFOcVdHd1JLUDNTR3djMWRYTlRRekZpOHRzSnRLTnNvR2pNVXFzM3Ewb29hZ2RtdUlIVFdBNjVPbWxMQWRFK0E3TjhLN3FsVlB0eE1tWmIzVE4xc0hQSU1DS1hndy9iTnhOZzFCTGxzditHT3BFKzhzUlFaaWE4czdqZmR0SkpubU1aNlFweGlqSTdsM2I0QUhFaGJiRTBRWDBpVXhIYWZuNDUwVUlxT0xFYTd4eTd1M3o2VG5XaEUrYUhWZXRRVS9nMG1OKzMzZTlqdi9DUnpBUEczbVVGOWJ0a0Q2aHB1KzQxdVd4YkYvcGNSajR0NXgxdjVvbkUyeVJHc1JGWFhZZko5MVo5dlg0Ly9SWk9lcEtydWN0NlY4MVJUa1B4eS8zNGFLcXBsVVAzT1Y5UnFzYXpUYW9hZGNtZ0RvaDFEZUt5dEdPanlwSGhNS0Y2SGt5NDNUdVR1cGdMUXR0VnFtRU1Pd2VhR3ZxcEdCalBWS00rQXJndDNWN1RWU3VhY1JRbnh0ZHdmQm9tMjBkeFVwcnJHZml5Uk5ZZEIrTFVRSXQxNmgxQ0l2NzdUaFBudkpwQzhDQUlaV3ZveEZ0aGJIWkRFVEV2YUlEcEQ2b0JpaUtjT29ZU0RwbmJhemY3c1NZcGQ2MlVJaHYzazh1VVAycW8xOFhLdXBKdCtDNXdQMXM0MU4yVFRmOXVyWDFZVGFOSjFJNWRNellKNEJlUnQwY2xkQnV0MTM1dkVxWlFHZ1ZxdU1OQWdUU1RtUlJlM1puZ1k4ZWJXN25PcFg2emJtaUtXK1dIQWhLVTZxYXVnZFQ3a295VEJvWjRLZlpHSnZONnhabUtmbE9XakVOZ2ZWRU9iU1JMeldWUUpjQTF2QlZnaEM0c254K2l2NGNzdzRPSmlKYWhOME9YU1VrUUUwYzd5Z0dXU2dqWVNDTW5EUHJiMTk2R0dTd0M5c0Z5dXRMMDIwc1F4c0trSnM4Z2JoMlNXcVZqWnY0V0FtdEZ1b0JNQ2Q2eGNaMFZaT1RDRlNXVnZWRmVkR3I4cUtCR3JRT1lIWXhlVDc5bUE3YlRNdTZ2SWZNYVloYkJCWWF6RkhSWERsODBiVjVvc2d2ejhTVitpMHpNODJ2RUhJcE9BaUY1Q3VNZ2ZyWnhUTm9iLzRCc3lCZVZKSG1LREVqcFFaNkZBNFdiRFhVUUFzTzg3bjAvNGg5ajVPSzRlUXNBMlFac09BZjhnd3d5blRPUWN1RGxieVREb21WdEVnL3VuQTQ4WCt6ZW8wVmpzQnl1ZjBTWnRDUksxcDVRYjAyRUROek5QZFFndVp3elk3Nm5yVE9TdnEvbUY1V2dIcG9jZmpOMU9DdmdRYXVJeDJ0THI2Z1NQOG02N054cjFJR2ZGNTUvK0tDM0lCL2drSmQxbTVqUFh5SWIxWjB1aGtNUjhkeXFReWg5VXN1SjF6OFhTeE1EbWVkZytXdFhCR0pWMitwZGdlbDkwTWdIWXlLTnh5aHFBbkQvUjdialZEVHZ4K3prQ29BdENqYlR5ZEpGallnellmU1BFUVNhVzVkRnpZbkYvU0NSRXk0VlhOVEJZVWZGNTJyZW1wMjZqYVZkZ2lwWk5KVEdKOE91WUlNOXZlc2VraUoxQnMxV1lBMUgxSDZva1puMkN0UjJ1bWdoMzFiakF1N0hvTmY4MDNTWW1ILzZPRVFMMG9tb0tRb0xPeHJIZ0VoMjRNY0h4Y0p4eFI3eUJoZXRnNHBSTEJ1OGQrYVdNQkUxQ1RoeFkvTmwydUx5SFdxQ3QwWEE2dzczWDVUeUV2OWdKOE4yZysyOVNITmZlaEI2T1lPcWx1YW5wd2thYWFOR0xmbDZQb0ZKWGhWOUxLVG02Q2syZ1RrZ0gzZ0M1Y0duRGVtNFhFR2t6STl0YzlQenlPalJTRG1mZ0d4N1B1ZldCeEJ0dlc4MkJ1ZmwrMHNwTDRnelRKU3ZrcGNUOU12Q3FjbGdleW9CVm43L0xZYkNGRExKWDZ3U01LdXZObWNPRE9MVkxzUXE2akZPbkQ1a1Q3Rlo5TlpOOGJySXZibHMzU1A1QXN6Zko3cHdnSjZpL2dBSm1zcmY3ZGxLWmNFKzBOby9pMDVwQ2R2Qk9QWFVzNzJubTNyaFI5Z2xNRlFoMitqU2pnQm9tWGNLWWdlMnpzYzc4bS9aM2dWRWFWdUM5YnpvbTRzLzZQdUFwaG5sYy9wanZkeDh5aTJERUh5UWVORlVVRXVjTlFpNmV5dkVnVlFyeXI0V1FDeWNzQnhGYlg0V000N2pGVHJBRGpnL0MxWHY2VzBGTjhHNE5ORVFYNEVJSEd5aWR1UDBDSm1wVFliMzlUbGx2SnptSTFFelVScFVheUNNM1VhNEdqeDBqbnd4QzBaSDkyalZHd203YmNHRm5LbjNiQ1BkSUY0TzdKeHp5dWwxV2ZXMHZlNXQxb1JPRE1DS2dxTlY3empyUy9QZzRHMTNEN1M1T2xhQkJoNXhrRElEcDRSVG9yRmxiUnAvSXBmS3hGRE95WXp0czgvdmN2RCtnc2M5RUFCSlJGK0tRWTJOd1FrZS9KMEdRREtMVDVaOVc4UHprY3d0cnN3dmRESlR1c01DTVZWbzNjcDltemNydFJtZmFiZjhVNEplTituNDdEelA1a1hYL2sxYXNkKzJJR0gxWURPa0FQR3Qzb3ZaRjBKYnJWK1RPeUE3VGVHeE90ekp0K1FXSXNFdS93Qk16YzFKTzAvNitiZXVUTnRBVU5PVlNpWSsvb2ZlK2RIZlIrS2RxTTROZmJodFF3clNteWtYUXg4KytrSCs3amoyMWZXSC9XUW83bFlSbTNQYzR2T1RSU216TExkVEJxTU1NY21UbmdiZFhTZSszelU2L3hNa2ZQUnNkTHk0WUFzalZ1WDhOdWhPWjJKS29pRzR4VjZqbkdLT3BGbXhnUjI2ZEhleTdyeUR2Skk1Zy9Td3NvVElVRkdOTDY4TkcxVkVSYXF5OEU4d0pBc0t0dkp1ekM0dW1RNkdYblVBaGEzdXNjeEV2cndpSmdOejRIeFpJQnRFNTJBRVpCR0J0YitPY1FoMkRLVDZMWTk3dVJuVEVPOEpiczJzaGMxQ3djQXZ0bFZQY2lNSWF6SSsxanExbHQ2Y2lmdUVldFVpbmJhL05YZ3daR1ZzLzFmb0g3ckZvS0R3eU1RRGdxT0ZEMk9pUHZGR0QrYXh0Nzgvc09sNE5TWTdqZnlQTkU1VDd3ZFhWSEZHZFBDa0hUbTNKNlVjcFZST293M3lLbjFDZDRUWUFGR3pFaU5pTW5OS2t0VG9VM3cvcXpud3FtaTVVaEkxS1FLQzBGZlQwN096RlVkbkF6cnhkcVdOZUs0dlZIVXptU09zUXV2NjFsaTArWjhlcEFXc3VaL1NaU1hVVWR5dnZaT3hqamowVkduWFZsQ3E4MFNlbkxPTTh5dU81OXNZd080d2laWW91aVRlZ0lZbTdiTis4Y3NISW4ycVJmZTFQODNVNjExTTUzK2VSbEEyeFVQOTJaaG0vMmEzV1JVV1ppRU5GSHNjVnluNEppNnVPWEpFcE9EaU9MekVoVFd2dy9rN2NwYkxIUFlXbDV1Wi9ibGUreExFVk82bDdBUlVDSDY1cDJnOVNha3NHM3RRTTAzWHAzdG9LSFFlUTk4NWh6ZVJWTG9Wck0vTThhOHNuazkzMmloeWY2UWhzV0RhOXhzRFpyajdObHNwSWp1U1VzbFZWcjFDN01kMFFTaitXTW5ML3lnOTV4Wmd5SFFhbGZEK2ltSlhybHVEUDY4V1ZkRnA0Q0ROTDdWZk9WRG1NNEMyL0hoTDQwV1gvRTBvNDZDQ200cHU3c2VKblJadGlBTU9Ma1hJTUQ1L2pxT2pSY2I2WFZCRHQ1U1dVK1lvUXdKYTR2czk4UTdUbWxQRC9WYVR4UVhQTlBKdSttMnNob2ZDTzVIYlZxZEVOUGkxRXlRQ1kxcktZSjlSZ3VGM1VWbjdlYXNDNFoyenlsdkVaR0pVSHVTenNMdU9GL3JYUExXUFd0QjR5cGFCNkx5VU5pZHV1Ujc5MTBhQWhxdDAzUitJWkJzMUhHUEtIUzlLeEhMQ0R2cDY4L0NjQzdXVXZzYmpwUXpwL2hBODhuMENhSTJJektlWnl1RHZOcm9hU2ErZmtISS9XN2N4elF4dFV3STU5YU11MnhQeW9mOWoxRnp4clJnZ0lBWTZRbTB5NWFXU1FGNDBVUG55Z2R3ajQvU3dyZGtqcVBoL3VEbk03dDZlRU9SbkRkbi9DVTBUQ0U4RFZKbTV0K1RzaUEwTmhuZVJjTmM1WDFoTW1HS25pdlh3bUlXQVdNZk1FczZVa28xTDBiV3loWUoxNHlycmpvbGRSVlh5TG5VVFBpeHdrUzFTVmxNV0hvd2tVTnFrUFU4Ymh6VzN0VDQvY3d3YVk5dEkwdHZORVhXMitTWkdHeGRZd0Y3TjN1ZElQcFhjczBWclp2R2lUaS83UlBVd2hGcmRRdm5rZ3JtQytUUkhoN2k5eVpXOTl3aDlSZ1FuOEF3NEY4UmJNNWtvd0J0VW5NaGYxYkpjQ2hTNjFrR1BDZUZOU2FGSG9SSVBFUlJ3c0NxTmlpQ1lGOW1DbW9sQzg2THVVN3VOc09tR1k1OFozaU5OajN5UzRydGlCMU92dVNrMC92VDViTmsyYnhWVytMMHBZWldaMUM2L1NhZ0RFNWJnSnFEVlJhYmNtMEVHaTVqRlV3TmNRNlREQ1pKVDc3L3BudFMwb0JEczkrd3EwbUJTeENYOVgrQzhNdDcvZXgzd1RxMlBHUjAzdXlqdmMvNmV6a0lYR0gwMUlhRDR2V2JRci9iQzhhd3VMQTdRVG5VcXBjaWFOWVRvdnhDOGZYdCtsWFdlVllkR2JiVlcvNEtmSFpHK2dJL3Z3aDJ4bmNwN2Rxby96aVBVekVNT3VoeXBZOUNwMElSNkpMalVETW9KdHdKZTBGa1ZHV3hiM010NFdPL1pDQXZSc21HdDk5a0tJdVB0cnUzTU9abmQzQVUzcVJTb3JoVlV0Y05nL0s1MVVxSWgyZjI4QTk1d05Tb05lRUZIZ20zNXZ1Vjg1UStUejEzR0JRbm9sUVU2dDFubHRxMHU1S085YWR4TnA1Lzg1Z1NMZ2FBLzdnS1BnckRCdjNvK2k1a1U5RmU0MGdLWGlycEozZ1NkMHBjTm5MTUp2ZmQzdXlqUmtRQjNWUGJ5SmtyWVpaVU81OG9EVGZuU1g2VDJBVE9pam9JTWNyMXRMdjh1NmVEcFhNbGhoM2FwQVE1QmF2RjZGRmw3bnBXRDZVQkRCemYyYXhxZnRRTGdHWS8ycWk3aDdFUmZjWm5CZkxZU3phL2JjZXVPcmt0b0tONTFhODYxa2VZQlRvczJUY1hHdVdWNEtoMEtYUW1HVG4ydWp3ajlwSXRYWjg2RUp0c1N0aWNGenh5MXRKY244cDUwQTZHYVNSYW9ZTklOdEJ4Z0kwdE00TFpNc2RiWi9xb3h3YXJIbVhQai8wb1loTU5ESEltQ2VHL1QycEQ2MUJVbENXYVdmYjc4aW93eVAxYVdaNlZXbWtlb1B0VEdtb1I0MW1WNGJnT01oU2JVRlkrZkdDbUFYVEVuSzRic0FEUXN6N2Y2TDZ5SUNmYjFDUUJra0pKd21LTnJ2bkdTblpJRUUwNTRhTEo2OXN4dElEL24xZlFkQWg3SUJKZmlvWWZCUjlER21sc0dCYktTaDNTQ2g2WUVvb3lmOTlYWUNDTW9oeDlwanRTWXMzSkI2S3hLSWlvUTgxWm4ybXFjQ1puc25YamJjR0ZPdWRXcC9KOUMzZ0l5TjVmbW5zMWNsemhUUlU1MHhGdVVnbzdUeVc4UDRFb2l2OXhlL1gwZFRGZE52WDJHL0JXbUo2NnE2WkV2YnJKR1ZyWkkxcnAyNHh3Q3R0Ri9MbHZ3VkJkdUtTV0ZDSzNJUUMrL2ZRU3pzd2FITURuRjRvcllmVFpBM1BUZTRtTG8wVWluN0lFV0JoODYwRE5kKzVtR2M2WXNGbllaaG5iT25TV2VYUEZDbEVvUzFBTVc1K0ZKTWdSbmt5d2padkhWVmlUWDhuaHdpanVZd0R5bjdQeW5kVUVDUWFpL0FjY3cvb2w5OC9zeHA4bGZQQ291MkdGS2JpVVFQZVRhUVA4bU1kTHdjYXVlaGJ1Tng3RlJPRkRQNVp4NmlGWmZ4bkIvUDZNMTFBYkMxNDdEeHhGL3JmbFQ5Ylk3eFp3VWE3MVVNNXgxSnZ3ZTFkT3BMU25pUTRZSjNrSW5VUXNwQ0hVQm84bGNXdThNbTRMZU1lMk44OFZNU1B2Qy9PYk1oaFpwUjdIMnBqM280UTZGUGVPbEdWelpJelFSYzNNaDBOM3Rkdy9rdXhRQjBGRG5OZUlIQTZ3czFmVVIxZU9LWmR5QXh3MENxTFNIb0YrejJjbFU1UlJ1OFYzMUdOdEhGQWNmdUZ0YUF3TFdYeWVlZHQ3UmE5ZnVST05hMFZ2Y1NRSUc3bi9QMDNxWitUMDUwelUyazBLQnY4SXBJRndTWHg0Q2tVbU53TmZ3QlBIbmJMckkrNzVWQTR3WDZYcFBiVTFjQWcrUGUvNTE2VHRwZnI1Y3hlOWlmZkFVaG90bjdWQTNPcVhpdGk2TXJXVE54ZWNPNlhVUWRBa29sWEpBSlNBTnhYMnNiUDgwZVZsa0lIZERESmxVdGg2KzhKdVhuTXJsM2ZnZnhOWUdnU1diMDkxYk1NUDRwMVN6WHBNaEVpVy9mZTdQS0JvMEpaczJNUHlBdzRkU1dFYWVzQ2lMd2MyWG9FNS9CdG5MMmpFUXJuTDhzNXBrdmk0K3V6QlJEcXZDNG1ZSmgyeDI5b2FQRzlobDREbThqVlBsaWtuOUNPMzI0TU90ME1aUTNlWjZpcC85SHJFWFNxL0MvZmNJT1U0Y2ROUFhHdWVxbVJzS2pkdjFzM2JkTzFZWFFqcmcxUjZDb3k1V2tlM2Fuc1o5bWlBRHU1Y214MWU4TWliTHorOTBBOW8xbSt1ZUpTNGpnQWd6blRBQkpqOTlaZGRJb2F2Z002UkYxblJxZC9CVVNMWFVVK0c5UGc3SUJ3ZzBVbmxXdDZOZHlJNmdqVHgrYWlNM3p1UHFvVll5cEs5SjcwYmdhL3Z3NmNCUURoekFnaVFNOVV1RU1wN3Mzd0xCRWlPeFAxVFgyUWNtNklYNXBudHAyZmF1MEtvcWVPY1VsSG8vWXRtMEZNcFlJSURGL29jOHptUjE5NVg4Mk1IWEtCMnoxWEEzUzVCZGVpQWdJNG5UODBkQk0yTnVwY3B5OUhOT2Z5LzdDUTlDanF1ZE1yUjZmcW4rbklld2EydTNWWnZqbUF2cUJkVlJOT3RabUk2bGpBMmljd2F1SXhBZWlFNDJDYjdSTWpXdE1RR0JUUDN4dE8yamdyT0RpU1E3aDZQMFpZTmJvSlhnbFo4Y2hWK3oveTkybUJOQkNycGxqUVYzVGhwZjJ2RDJLQk5UamgweGgrWnoxSFdYZnNEdU1GaEJ6RHBrS21IZ2hGemVPb1JBRk4vbDFJR0V2SExPYW5RUE8rd29yV2R5NFVYRGtUelpOdGtpOUtmblNoNjhqZWJHTHZlTzl1K3pQK0wxUDd1djk5OVlzUXFKbEZYTWFsY0pmdzROeE9YT0FRdk9jYjFjcHBEMVFhOHM1T3AxMHdUbjZsdmpWY1YveW9XT3B3c3BqVDZ0UmxtbTRsUDFjbzErcURXV09kRU5QekpnMFhmaXZrUUhybG9TQ1I0MmY4TzdSWTRRa01oNmJBaktvVFEraVVBRmtxb3Zvc0JkRDJrZmF5QzJ3TWZPSGNJWnM5WWNKSE9Ib2E4T1RwZlgrZUFpUE9EZFZ4QjZKRFRHUFNyaXZmT1JjdUt2M3dUNzdBZDNxeTl2bytabGpvcWVKNTE4NHZ5cFR6SVE2dXRZTCtvRm1wWnRpN3VZMVM2Q1VLMmVyOHN3ME9DYWF0TE5FVXBzREQyZy8xSmUrZlNOdHl0eWhsVndweWpGVTByVFNVZ0Y5a2ZuL0NQNnVFclNvQTR5SGxaVlpIeWJPQS9QYmw0Vkt0SGpVcW95aGxyQmMzbWhBNHVSandJT0RHLzlFZnVFTzd0OXRUb1VnT0hZODEzVEI2b0F2NDVQaUhlbWU5L0FUOVIxelAxN3g5VVpzZEpxNlBKQnQrYVpXNnpnc1IvNVpWNXRQL1dWK3ZJZzBOTTIxZ0dnb01URlFYZGFJQmJ6MmZJNkxsY0gvdjBGUzZGODBNM1Q2Y2dQQ2NON0RTcFhWMjM1Z1Q0Z0tTNHdwdFU3S0dWVzFRRnZDQ2pZZWcxYVBrSzFwa0c1SnpSb3V1WWR1aWtRZzFzUWxlSDVsVkdoMVQ2bytWWVZVVDRIcm05RTFNYUxYajlweHYxZEdHaEs4OTRMUk1aVm9vdzBTeEdDdVNNaGhvN1RST3puUmNGT2FBRFQ5RzNwTE1oc1JGeml6c20vQkxHTnkxbHRoeklEbmRSTFY2TmZTajRKYlZLc2RkZDM4L1ZDL0hQVkpaTklBcUM1SGh0U1V0Q2pWSnlISno4elBBTnVkWDNWU2FQcmp4ZjhuU0VVNHJISm9TVjZuTlBaSDFvZ2MwTVBGbmVreVFlVmhic2FicGw3c0VqR2FUdWZyUHM4UEVGVzFQc2N1OVJGR1NzaE1JR1pjRXdRMVlMcENCUVByN1hUME9vZE1ZTFZZek5XdmtFd3RHM0UzbmZncDFRNG1zS0src2I5aHc5UUJPUGNGYnhEUWpzUGRVRitFVnpaUUpiRWxYeGZudGNMaklSSllKMkl2WFNMZWdVWXRnNmtETVBqRkpzalZzUERibVlzL3hkSUcra1BmNWU3Tk83QjNoaUZObXhoSkh3KzAyMUE4U0x5aEoxTEtXSWlTVjM1L0s2VGxRUStyT2MwcDgxcXpjTCt2ZUw5WmZsYVNLeW1yMW5IeEZoZTFHaHA4Q2FVNFg3dTEzS2UzdC9yK1UxQmM5NzlETFIrRjNROS91SGM2VHZ1bld3UXNXZUtEMkt2QXMzVW82ZUpVcndOSTFBUXhBVy82L3lFNHRXT1gwMW5hcm1iSXFjSGU3YzY2dGh0TWloV3Z6a1djNytGUThIVjdHNGw3K1RGbXVQSHRCYTVBQmt3QW5ac1p0S2Y3NEtPUnpvSEgzWlFnZjJqSGVPaXQxMUNzbTJOUzBVMlZjbUlVSmJJaEJZdGQ2S3Y4ZDdOeDRUeUNvakwrcWFIWGpId3JIeU9MeDErdFA0RWxXbDRLdzQraXBiRzdUVk1rd2RJQnVhSldiYVVNNDZWQ2Y5ZzBvNVFiMVhwVWFTbFhyRUxnRVQwQU5mMFVJeEF3b1JhQVdTS1pidklKdkxkQjlaOGxRanh3UjEzcUorOEpDeWpSV1orS3JzTU5UT0pnN0E2QWY0clQ1akJTK0hnSE9zdW1ydENJcko1Q0I1K1JKMlMwMUtZVjNkdmFLc21UZ0hvQkdoMERpTkZIUkhmZll5bGVqN3lPTDdXdThyR1A2WW9ac2FNU2R1V043UHJzdUpQSGdUSitRclNwNXEzMTVZMHBDUVlsNGRlOWJ0VkxjQTBESWMySytuWDEvZWg0d1ZnZHlkWU9JZVE3eVRlbUtENVpRTmhySHUrbFlNNDZDTmhSVWw3Slllb2lFKzRsRWRPOG1HcEwxVEdjR3pKMThMWG8wbzJJb2hGS0wrUHlKbFJkNC9hSXgzUGtSUDYwVDVLVUoxdXlVMXZXbzR4aGRZWFZhcEFMbEJJWWt1WUpEaU1yS1d5eWJRZHFKMTl5YkR5MitlZS9mVzBPYTRZYkdLT3Exa0NFODVCYm5VVmluNlAydGw3VHgxSHBRbW9iNi91Ymw4aFE1dVYxK3gyeGpHeVB4b0ErSnMxWGhJS0M5SFZTRTAwMTlmU0xRUzV1Zmo5OFJVWVlxQUN2Y0N2azRyZVNObTdYNWwxTW55ZVNEdG4vSFhHdWU1Nnhta3A5SXo2U295RDI1Zm5pR0xEL0ZZa1dCa1JvZkc2dU41dHFWbHpRWjgwR29Qck5JODJLT0s0aXoya3hQR2kyM2pvZUxqVUdnVGZlenFkRWttS1hFY3pjaURBYmRtUGVxTnNaenZxbWZJZlhiUWxTK1h5Qk1rR0N2TWU5WWNHNG1LRnlSQnlXNUYvbHF1cDNyMGZob3dXSzZYR3p2YmlDUzJNYW1wZmpJdjV2SmpTK3dHd2FaMDExeFpxZE5sbFVMUGd4QmtCT085Q0Q2b1M0NVJmcFV1cmp4UnhINzhsSHBvTk5ZLytUMVZlQlNvMDZuSHJ1WENPUktJdE1YNkg1YkpaYlhXWjl5T0VWYkc1V0hXK2d5SGtwdEk0QlRsTThmYk94SkRYTGxRTm4wd1lReEJvbThHcGlXS0NWNVU0VmNMWitFb0c3YjJzRFd5dG1vQnFIT0NEWVNKd2svWWR0cDBYd2liUVVOMXpTeTRZWGdmRHRwN0JIcFNXb1I1THpDY1pabzlLVlFFTTlvTEFvR0krU3EwaHZhMGJ5V0xWWmpBOWdpa1pHa0gwMjVOZkw1Z1c3N0RiWTZpSGRvMk8vZzlCSVk4L296bVZyeHJMSnVaSnBvNnlIUzJreVlMY1o5WG5hcnpNcE8zWkFZelFBanlEdTFUeis0czJaR1VWekJaRjZTQm1RSnhaNjRMdTJibUZNMnNlNlE5eklScDBLNG1iNUJLWXFKZHFlSEhhYWhRMFRyWnFyNXpiTVR3T2VvbUZRTWg2R2VhQlF6bjVFck1PUEpYL1B0WDhvVWhGQXZQNU9abHdab3d4b296U2d4OGp3NFZSbFJSWkRISjBTdUdVeEFGZlI0cjdZekM1emdwaVUra2E3UFd6L1JyRmEyWi9zWGRRZTBZZWVVMFgvTVNBVHo3dlJ6MEtGaDNLdG5HM1JKaDUrbFpsTldBSlNWOGo5SExQc053RzZrdUNVTjNwUCtISThQWVFKWjArVWVoV2dzeTI2S3UrTVBuV0tZRjF6YWd1dTM3SE50SWFEd1RSUUowdnNLcTNPRVRNSTluWmZSUUptbjBKcDhBWEE4d0IwOHhuV3FxMFgwKytFdjBiWlRPZjBXVFZ2aFJpZERkbEVzclM1V2ZxakF6TUd0U2h6VWd3c3NPQ0E0L0RsNUlPM2VlczNnTU1aUHgxZU9aVWpNQWJXZ3NGRHR5amNlVk9mL0VyNE9iWkpjNWsxRDNaUmMrS3lJZFp2bCtVOWx4OHpBMmlYTUZjWExMaTlYdVVuY1h3MHRVNU85RStUMHlxaWtHcEp3RlRUTW1qUUJuc3pJL1BMSHNhM3FPSWVCSExzWUJlZVkxTlNuZmI4cTd3cVFNUFF3NDBmdHJEV3pnUTZpV1lPRjMrU0k3L1pmUFRXOEdXVDlxWTl0V2R5aVRkMDRnRmJQemtwWDdQN0VSdU9Vczdpb1FRZ3lpTDcyeXBlb0E2MWZvN1R6c1FDd1E4eHVWT1o1bXFtWnIvYjBhbVNEVkdNTmFZK0gvTjZ2dWF0SnhCbXNOVkFKaTVDMm9OMTNoTWE1MFlNVlg4ZnFoajlKRTZUcFp4SGF1U0p0ZU16aHVmbXNlU0tzbDJ5cjlOZVJGRFJXcDlPRnhkalkrRU5jSUtNTXorTWViMnF2RFJYbmxtS3NFcHdFUDZmdUdnV0ZxWWhwbVp5LzRvbXdPQU5kQktabWVkN09HRTZvUGE1UG8xZVhyWmZ5UFpjWVpna1dsZW51UnJpamp5U0d4bjl3bGRrRnJRcFphWjdOejc0S25SQ2pETm5yTGo2ZEdvL1dtUE5KeFVwcFBDV3FrNFBIejFmN0JLMUlxZlZPRGFPWEdvT2xkbmFlV2NwSEczYkRvaDlDbVY3c1NOclRaN2gvaEN4bVBObmRpT3hhWTdVSDRqYUl4ckM1R3dQQ0ZRZnpEcVE2dnVkbTN0TDQ0Q1dhTGt4QjJtMTl1bnRLTzEyZHBISkxtc0FicEZNZ0I1L0xSYUN2ODh6SlI1WktCZXZZRXQzSjZiOHprZVVUdWRpRGtUOUpnK3hZMk1PWnE4ajBZVGthbWQxMmpMWktYYkYydkIrUHVCZVJCOWlJeFQ0NDcwRENpQTlSUzExeENxNDF0eVQ5aFAxZUw3aGE4MXU5TzgveS9Fai9KeThrU3phN205R1dVREVDbmxCejJhcy9MNGxnYWQvWlZvTEtVdUpWTURjY2piUlZKVHliM3BhWHRKN0cxYjRKd0liZUhqOERPRnlvekRjL0h0RVp1eDJWWmhYbzVXOW93TXl4UFpsSFFOOE9DZGVBRXdOQ3VGOURUWE9CVzhnVzU5elNZcU1uZnFPcEpwcHVMeWNQRzVTSE9aTEIrOVpwRlVnMk9YVjRnNVZUaUlqT25BakFpSHM4UzEzS1RJUFNHMS9NOFZkRDBhME5zR0hGYmhGKzNoVUtHL1EwN1VOM3p5WWdlM2FWU0Z0U21nODBWeW5pRldSUXhqSXBDUWtta1MrNUIzT3dheldaRTJoYTdmVldZNEtkb3RLMXVjNTZ5RlFnVG5BdTc0dC9qMkxjdW9ZeW9JblBOaElZdVNEV1B4aVg1ZjE1ZmlJYVhQL2hEUGxpUlhhSGJ6QmhFT3V1eVpmV0M4OTNseSttaTYyc2h0aEUzQjZJUWhTbFZiS2tsUDMvNzJycXRRY2dZcEZoZHpnK1NsbVZCVjBObExiclQ2WXo1bzczeGtkdkg4K283eURac0R2TkJyWWhxblAyOVIzNnhQLzEway80VFFBcEZDOHppOFhFS21LQ2RnNjlSR2lpeEhIVEFJYmh1bmpXYmVPdTlPUTZIQk43dXVZSGV0WWhJRFhRK1hqZnUrd1lraENmUllaOUVoQ0hoVTAyU05yL2h0MEI0OW9VZFkzR0RsTG5pQzJxR2N2K3VYQmZRMEhDbnI1Mi8ydk0vSWJCR3hCVWVzMTBLc2VtRnFiRnRhR2JUa01hUzE3Q0k2ZEhHVkU1dm9XMUNSQjB0L1p0eEFxNUtwZCswVGRLTTdhYWE2WE80S0VhM0pwbVE5R1RyZmpjZXd5K09XbkR5NlBqM2lTMndUYVlNeWJEQlYrMVVCR2J2bzJRU0R0blVkdjN1ZHc4WENpNjVmT3lORGswZWtGQkxZTlZScXhwbjBRNEsrVE9oUGZCQ3J1ZjhZUVZoRm5yNmZ4NnBJYmJkNUFuNDc2NEVGNEpINWF3VmIyK1V3TWJDSXNKRUt5MGExQm53eXRpdC80TmpXQ2Q5MDAyQXpFeG5na3ZmMWJVWXZFcFFabG5taFNoQzBuZmpWd0Vuai9TRmF0ZG5qK2JXZDRjM05PdWhkRk4wR0E5STYrVXJJakhTZFcwUUF1MnREV0tmQVhIZk9qaFUyWkxaTGlQZFUwb3htR0l2ckdrQ0NOTjk4bEhQeXpRYjJZK2syQjFOTGp1VGlpOGIrajhhYy93K0grMVNHN2Q3b3EzRG9QYXViSVFZSFczQTI0K3dRM1hjdmt0WERadXIrUGRoUDlYUE5zdFlLTkJLMHRxdVZPNTdjcnBzUmNTNTFSRUVkYVpDSTRwLzFLdk1pcXgxNTdGMVNGNlpNeDJsUldmOURHTUk0TzByamdWMzVoeFlxNk1vVXd4TEsrenBhMnhLMnZuYjNrcVNtVXIrdGdsSENOL1dTNHpKMUxwc2Z0dGttMWIyR1RFbDl6ZGtTYjJJeXNsVGVFQ21EYVA0MGozV2pvNmszZVNjNUVXWmZkOWN5MzgvR3p1WVovTmtISFJndFIzLzhSWnp6N1lkYktUNzJoOW1icVpaNVE3aXQxVDdya2haNkRlN3JiS2pPaUQzMUZqUmhPRENPTE0xN0RVQ3ErWm5QS1p2RzNYZ0ZCUjZXV3ZpRVlxd3pOVWtwMnhIN2hyRzBCU0FXZWM2SW9MOTBxRS9jQ2Ryd0syWlZoT3crMFR6VFFSZkpoVzh2bjRCK2poN0NGZk5mVHEzSGk5RmhWZ3VKcjJkeGlya3U2QWZpbWlWM1ovRFdpMnJXb08zek82WnNRU3pja1gwZ1JWZ2F2eUlhdFpmeHg4OEk3WmVtRDBtNllkUmo4YitqQkV6N1RNb1c4Y291NWRVbStjeTNNYVowSC9WRXR6SHExTCtQdHdIRjhvOG1RQmFnMGwzSzhJWmtXSS84NlgwU0ZBcmdnTlRUV0x3RTFZL0d3Q3I4dzM0VFZpL2VPRUJhVGlVR3pUVldCUkVnNHV3OVRCMENHZkhvRXg0Mk9PdFJ3WW1oMVdDU210V1pkNWV3TW9FMWxjcVJqRERLNlBaeFQ5Y1FCRGI1WlFPeUFhQ3ZXNUV3NGxnS25uZFJmWnJ5MGFtVzE4RzJkaVJYZHZJdUhEbk1ScSt0VTNjQXZBa0E2cVBrUDZGbXZneGgyVEhTWDdhdlFtRDVZYnJ2VnRCOEcrWEVWSjNrWVpXbU81YXRBSzRmdWVVUEZLalZRdjlkNnlaeXk5cVVIS1JhOWVRUE1tZWJIeDVkOTNWMGZYZ0xZQm1uTWdoVEJYOTd3MXZFSnQwTjUzQW1Sd2tCWXgzS21raTFoeExhY2NnckhWd0RtdEcrQ3Z6MnVCTDkrMnp4UDRtTDhPQ1YxWDRDYnhUQmVKSk54Wm9tbXdYQkM4NEFQYVJ4SEFxZ0MyU0dqQVdaSXdHLzVlbHUvemF2a2xhVEJqcXptZk1JNSt3VkZ1b2U2UDBORFFrQmVWQVM4MVJRQXlMS0luTmI4ZlozMWZ2V09WN3VaNm5SWHdJVnRuL1JISFRHbDhSNlFld0tCKzd0RXliTUY1Vmg4bzlidDdKSmpOSFkzbXI3ZGhzd1VNNllxL0I2Q2NHdHYrdU1MY0UwelJlSHlYaURiZ3VoelFOajIydlN4SzU5OEMwVjBQcjJrdUhjVFJ3U1FMQk0xRXFqcmNVdGM0ZXRUa0UvMllsa3hLZlFSUmhYRHRDMFQ4L0diNzdoWUdRbzRNa0phbndJbXZoNVlTb1hZYWZCeWFrQ1JhN0RvM25HR3NteSs5T0tkcldDZWZXdzF5eXBXQ0FieW9KQUhZOFpNTXh5ZEtOaG5DV2E1NStDSW1UcHErRzAydXlMa1hueEpGNlRLUE4wYUFOUEE1ZXZMaFZFQ09la3UvME9PK3NER0FKcXZFbzFvQlh4endqbytTNGJHTzRLZU5LQVFlV1oxaml1aGY4YmMxank1aFJzWFU1LzNxdzd3OXdMcjV6L09GMWxhcDMvSGtWckRYOXJVZWxnem95WGloeVZOVVJqeHNyNkYrZXBNaGpUb3RHRHo3ZjlHck9nckxSSWEzL0Iyd1Y1blZFQW1PMDlRQ2g5emxzWXB4Zm5LQUc3NGJwVm1jSklLNXcrbk1kTUpLSnFaM0RLa25EUGVBcWVnV2NaclBzTW1EdHEzQ3QzUmptK2hqNk5TVDVyKzZ5Y3pmaXBkMVBlZVBSbXlqVEdISE81VVRWcmV5MGk2NWpKbnphNzFBelBod292aEFUV21vUWVROTRuM3ZGNDBRYVJVdS96YnM1YnJ0L3R5RURBeUlJQlFkTG5Mbzl4S1BJT1VvMzNqajlZV1lqNE5INjA4RHhjQUpsbVYwUzMrRmo2b0hYeldPWFlYWXJuaGVtQjB6WkJUaUw2UExhSW9UYnRwNzVEa3dWK1M2QmZ3dHFEM3JVR2dYekZoNTNudVpqRlQ2S2xRT3dhRVlBQ0M5bTNzNGU3MGtSdk1aQWRud2FVYVcxT1RQcnliTWpOaWhrSUlGVk5TdHRPdmlaaDlHS01PWFRVdWJjMnJXSzVQOUFGM2FkUEJ4RGhRTXZad3NSakZTV3cwYzIvaHVKRTdxOGNUcEFkaDRrZEtaZDhVbHljT0J6TWd2bUpEMmFpUXZUenBCbSs1MnNuMUNMQXRGYVZEWk9vWGl0eHk0Szg4b0hKWFBqUmZNemRCdUliT2kyUThrTkN0TjlGenFCM283WjgzVGUwemFrcFpxQVpmNEhTdXJJVDVyL2tjS1hhNXhCK1FPd3NBeFkwbkJyTGY5dG9xRnBFR2c0OTJxUXNUaktwRGFTUTJPS2J6YjRHYUJqVjFWcC9oaVNsdGFqNFFCcitTVGlqV01YdzJaellrd0RFOEFqa1JIb2hpV2tPV1c4dTczNzlFYmlpUGJkSnBqMGdZZkRNOWJSZ0dyTlkrY2JZMDE0eEY3Nlc2WEU2am00Q2NuVVNWQVdqSUxCUEJmV2xVekV3NU9qSG9DdXdkbGZVWUc0dEx4WGVhMzVYakdBUFVHSzNhYjNDYnBFcmIzMStidkwySDJaWUp2R0c3OWdJazlobUhKSWRaS1JjTkdJanJVSzY4YkxGSXAvaHQ3N2dia2pZZ2JBRTFEQlI1VWpvSnB5QjQ3RjBwTXBCb3BHN0hEcnQvRzVLSHZncGo5c2gzbk9za0JZMDNqbDJHWTBqRXc4WDRPUUd0N3Vld2kvWGRka3BudlV6WmJ1MDVMVGNjWTI1VGRRMEhuSEkzamhVOWh5aVg1UXJWT0hnaEJ0dTVSYVhvb0VFTnlCSVNZakZYcWtMd1lVaVdqMWFMMTY2M1VqVnNXTldMbXdHVDg2cmZDQzJ2L2RqbjRGYk54OVhiK21JNEU3cFF4OE1YVzA4WUUzeVpWS3VWVDk1S0t2L0pRQWREc2dud0FSekxTNFVvUTFxTkVWU2ppdDIvS3gvbzNqVmpRRkVKcUFINUNwZC9zZU9wbTFHT0g0QWJhenVGam94MlY2S2YrQXRlditCTkZuZ3VNVS8rUjdaNFhpaUxWT0NOQVBXaEV5L0l0VWVZQmZqOU9GRXRlZ0QzQVVmR0x3Yk1HN0VTSWlrZlpXOUZrTEtMaWpaVlIyMmFONGZzVHQvckUwQitXYlVzSlhleCs1V2ZrMm5EakhqYSszMHltczAvdDNUZG14WTlGMmIyS3JFWU05a2oyVkZzUEloeWVSaUd1K2thalhzMCtYVlhVT2M1aFdlYmRLT3hFdFdaM1E3Yk9ER1gxT1NocUZTUEtOYTZHU0F2ZXJVS2NMUXYvVUMrb0JtNDJhNkVaRnYzZ2lpU2JiVThkS3YwMkk4cnpDcmxGa0ozQlFXdENZN25icWFOSWFpcXNVWU5ScWo3NElwK0VxZXdvelB6K2NjMFdvZDlPU29aOWFpa2VjdlAvMjFOY0NOeUhTM3NBN21yT0Q1dlhuVm1EU1dOVU9lMGFhbTNrWGFaOW1yVGovSlQ1WGtEdXM0Q2FZb3F0QUxETkl4SHZYZEpicWxodkhLZnpBczNEbGsxVUlTN0l6bGFjYitFazJWd01WSnR5dlNFQnpxS0phSjRnTlpOS3ZyL2xhWWVlcVNZbStKNXhUTEhBa1lyVUU4NGFPRnlZUGkyNUdzWGNsOUwrVndvYlQvZ25GNktHOTFsVmJReEE1MXBzVVllRmpvYnRabzF3dElPcUxPdjFpNGpqT3FHbzlHbUpudW0zNnljZzNOMlVBWnlRdUE1dG9tRENxVVI4K2FnOU1PRVBIcDlOR3M3bE1pcGZXa3grVENJZFBFcHBYRElZMk5VelBDL2hMY3I5ZkJ0WENMQnN0aWVuaTNWVnVNZnZmTXdXaUNUVld3TTg3R0lhRjhWV2kxc0E2Mk1nem1OWWl2NDgxb05SV2xOdGdacU8rejZsQ2l4cG5tWVhTMGREMk05Y0ZseHFZa2lDb0lpV21qY1JLclpyVnA4OXI3THJHaWVrSUdDS216T2VzOEpPV1pmRDl0Y0xSSGJyQzBEeGZReTA1Um5SNjFOV0dpOWZVdlcvaHFhM1VlbE00Rml2OXZ3RFVvb2UyN1JUcUs1cDd2dmFSYTcyWGhTTzhEU1FieHVXVyszbGJWMWdXVWpZUWRvMDNpeVl4RytENVFZWWVFL0JmaVh2UHozZytQcmFaMU5pSko0VnlIZEFUbFRXQ2lJems5OWh5QkVmM1VOeVF2OGV4L2k2OXRkMmNaeDdlL0g0ZEhmYWpuVHEvRThFek9vQTUyUit2ODVuY0pzTUcwV1NPblZ6azdGZ2tqdlFPM093d244Q1IwS3RqbUVpcCtwNzBQQWhnWGRySmVYdnhwdHNrOUlPaGp1aE9ZREIzL0lNTzV6enlraVVESUszYURIZzNMMUtma3NkM3ROd0tWVkhCUDNuZStEMnFWNWdzbTBCUUY5QzlBSnlOSkRBbERlU21MSEI1eFVXbVdkaThydC9TUENJNlZ0UUZMNGZod201YnRkS0l3a3cveEk2Wit3SmNQRUx5NXk1bU9zQjh3WTJURG0zd1Rvcm0rZXZ0WHJEQ21uWTMvUmlwZkxJeG9wditCU1RlcUlsQ3pzaTJtYWdibndGQmN1dXJ6ZTFpL3ViS0g4SlBBVldjSU55QjNna3RnZS9mb3ZIMC81U3oyd2h0THo2U0lIQkNHa2xmeGxwZkcyZ1RPdnY0d2hVcEVlUlkzdVpzSVNxcVlYTXZXWWI2b05LQXNIYlJ3dUgxWFByOFdiMDA3YVhtUVBqOVZYKzJ3YnVDQ21hcDMwVDBTMys0Z1B3OFRNOFR1SUs4N3lFRTZ6S2twVllQZDZtbkUwMEFPbm0rVnZtNVNneUJXdlZIL01yRHZMMGFVMmoxanRyY3R0R1lDWFNVbHhyTnVSZU9pVlowTWxrOVpvd2ZhamV3WlRtWGVFanFGZWFnTzhzSi9tZXM1eUI5QndZUkF2MHVYZ2VTTXdDb3dycjczVmcxME5kV3RIdlZMNlNyVm1XVjhiRFhmam5iT0VjYzB4c1Mrd0V5SGdkRDdwdTlHT3Vod1UvM043RVZxekxwM1Z5V0d2aXJOTGsvTS9VTEVESnFCLzB2SllaZzkxMWhYcGppWGZVZWNoTEl0R1dMdkYrK0ViYUtEZ255Y1pZUGpaekJ4M1hGYXRRYjNGSDhjbGtwQmtSNTdQUWQweFhrQjRNd3grNEQxamhWd1Bhc2FYTGxhNlRyZUt1UmVXa1R1bnU1TlZtUktzV2t5RXEwSS94QVdFMWcyWWI4ekNSNmI3clJUSUt6alVzVndaTXZ5WnFZMXNpWG1FOEh1S0V4bjNLMWdqK1hLaVplN0VadEJOTVJwTEhadGFvUTgzaFlGZVJBZFd4U1RERGlBdWEwcm8wakdXUUZHUkhmcnNqZkFSbkNGb3lyT1VTUGVSNzc3YTk4RXVQdm8wSDhMcXc0UEtRWHlNZzNEdDRTendaYjd1K2wrOFkwOEZ5Y3krcTFyWGRsbndkN2I3QVVINGtPV2xBNEhFYk5uZUhabFJBNWdxcHpCMllKcGFFbUdnTE1rZ2xVdDkxN3M2Rzl4MVlheGZ1WHpzSlUxWmpnRWJSRVB0U3RTbTA1aDdhVDJBQ2J5NVpmUUdEVGRqekRWZ2FNelpZcFJFdVE5aGd5OU4ycVFMMmVoSWljT0hsMTl6b1NoYzVlOUFKR3BQRFpCOGRhdzJkWlBQd2pDcjdaalN3Q2pSTWQ0bWlNYU9iZXQrTGFLSDdYWXJrNXc3RVJBdmJSZjM0eXBoTlFFYURCNnpqVWdadlFya05DRldoWHZiS3pNRFJzN2dHVzJEN0J4Z3o0enNiTUp2cVlLNmg1ayttR20rWHV1L24vZTBBSDdweUFVdzN6bmh1alVWVlFjNFFkNWc0bk1xVVhUV2RkTWRjL3JrUitQN0lzZ3FWZnVWd1Q0d1VGR0hGL3ZMQngyL0Y0RUdFZGlJWGxSd1Z4TFNxWExCUEhGakFxbzlmOUtkMXBQYUI5QldoN2FDQ3loTWpBVmtsenBmWVNzQTdkQ3I1T2dwbUJROW9MdWtaSVlFc3NXN3o2TFpaWHN5OFRsdXFSWXFpVGhDdnRSZEZlczNYbFlWTjJEN2Y4cEVnclVESlVpa0d3dzBhUVJtaldhZ1pPNU1Hbm1CaE81WGJQRjhtWURBN2pTSU5QSXZWNUd6WlRTL0R0VkJndDhhckR0UHdMQ25ZZnJxRldLS1lnZmMwbVBPUVF1WmkrUWl4TVZIQTlmS3UyTm9WNCt2Q3Yrck9SVnhSNzVpQmw3YXcrRkJWZ0RGNHdpTERrNCttMFVNSUlqbkZiMm8vZ3lFSVdUcWdlMUc2TTlsMGZHUGxnM1ZvOUV5NSsvZ0JOV3cvRGtoL1lYNTBYSGRJU1BGQklETEpENCs0KzJLejJ3R2JCaExmRm15N2tjRmtpTjJGZm1VTGVDTHkvVllZazRvOGFOT1dXSGVSd1c2dWFoUkpNSUtnRW1wWEVJdk13ZllJWDlidEdwTS9kM1pJU1hqMEhJL3EwT3pSc2FWRnZTU09CVG0yR01MZStUbVNSTHFLbVF5UEpBRXZzQ2ttZFBteE8wNi9aK2hnZFZsWFBXVlhCNUlwYWtaUHFxbnAzcHV4aEJjTCsxblJzeVBOZHFvdnlLNUZVU1VTeHVVY1JJOExSQ0xqbGZPcFdCRkpjS3JoVTRnSnRjMkV1bmpYWWhtTkt0eFlvbktSQ1l3cWdJdXNHSWN3V3NyZ2ZwdjA4VTBjeGE5Uyt2N1NERlJTMm9zUGdLaEVKQ3RBQ2hjZHhQRGo0bk5ycUpzMHl3L2swN0oyL01xR0JsOXBCc1FhcnVKU3VFbzd2NURiT09taVNzTmlWRVh2bVd5d1hzSytaYXhzRFpuUVArbTlGejlpdVBXV1JnQmluYTdqSUNVNmhWZnJqNVVhOFN0R0hUV1N3OFJkZDJrcUE2MlE1U2NmaEVtbnZHT1Z1amJOenJMcmdBY0lzZlNQa2kzU2xGS1p3bjBEdFZWVmZkKy9KSVZYdUVYNVJOZFJBQjhXekpna3ZkSG5scjRpWnBQQ1R2SS9HaFpXQTN1ek5XVFNkSzdtWTBscCt0alRnemhQc2tRbEpQWEtnMHFtNGdsQWxyT3BrWmhCNjhFS3F3UnBkQ1hET2dtemxGYjNqeGhRcU5tN2ZzZkN6NXhSQkdtL0cxWDFDdkZKWTBJQXp1eVVWcjhxdXZrYkx2T2FISHdlRzdPWFZJTHhBS1dYZXVvVEd1VDhvQTMwWS9jQ3RHNjR6aytnbHJRTXV5SWFWcWtvNXRkVjRBZ3JJak94a09vbEFjQkZGRU9MdHh5M3pHMjdPUXB0VXFPaVRHSXl5NXQ3Y0JkdmxoWS84OTBESHllMWd5VDAxbXErbUEvYW1XZmxBOFg4bmlFSmV3NStNSWNMbGFiejJ6NWQ3MC9uMFZzdXdGc3U4SGhwV1d3cVpwRG9ucWl4ZGxiVUpONUljL01UdzhnNlh0ZzUyRGV6UUFQa0JMNFp3cHJkMzJLYlhrc1JCY2NHS0pPNzYxRTRqUnpEN0l6UWZKb0NBT3RzUmVDRWIxS3JmN0NqSDVqVWViWDJNNytzcXVZWG1WMWQwc0o2OXNMQUNzRUFKZ0JObHB2SW9qVWtXeHdvTEhjWEVmdUY5Y3I1MWNpNFJlVnUvWm43aGdnbXJSTXlRM2E2azRyN0xqL1lTQ2dham9RTHI4VldxRjE5TTlLVVREcWZqa3kzMWFsUERxMDV0R2JRbk9SbmYwdnJJVXp1alVFR3lPamU0aWhGOThEcGNjdWRlN1YvNDlxQzJJR3NWb0M0WVpXeHBlRVpJclEzNVVvZEE1WlNyM00vQ2dXQ1BKdUt0WmdFQmZMbDhmWjhlWGo0ZEkzZGg1bjBETnAxV3NLQ1FXdkVZeDdSdEYyVnJXamxWMC9pcDVNRDFndzM0TExycnFZaVA5d0ZlaEpzSGtPZFVnZlNJd1RjekdvaU1OMzBaZ0l3WW5iQjlOZFJhbWUxOWZtcktnYVNxTjFHR25ZWFEwb2pwMWdNQjY2VXJuSzEwM1B0VUJPMkphUWg3dWdGS0w1RFZ0Y3pHRUVYSE5pQ1JEWGd1OXJjdE1DYmxzeWo4YzdENTF5ckR6dklzaHdMeHY2RnlNcXZVQXBzekFvaGtjWTh2UTMxOVM1VDZHa2dWcWlKQ2ZwNmZFTVFsR0JaZGgxN29wU0ZtSjh0aHBaaE1sUFNmMlFOQUxqRFFKbFh3ay9ZYzQ3dUMwVHpLOEMyd2lTTjRJblJjK2RpV0lqMTNucUxoS281QW1KM1dZZTd3ZTUzcUg3ZlRsL0FXY0ViZFUzUGYxZmp0NXFBQmFoYUp2b1dLWGNwUlFtZGhQYXEydFNGVnBKSFZoSklURG0xMEsrZW02clMyempHdDcvRTlhUE8vd0pUL3VoRU5BYTZqNHdPaS8ySm5JYjhYeHA4bHlXL25Tb3hqT24xZG4xeWhRNmRpTWVKV1JmN08xVDJTV1VqTmRBUlZUV2htSEdpMFBaak90OXo0dUZzdytUNVRrWWFrK1pJTFpCam1vamRMQ0RHT0NCVnZJcXRhMTZqaVNJdE4yM2g5TFVQc0dkZnJSNW1tTFpWR29DZFUvcm9WV2tkRHl0blNGZzhtbkwwbnEyM0ZRY1pTTjJ5Ym9KWE4xT3o3dmFRWkRUNHAreEtWSm1LZFJicGx2MHdCK0E0SmNYaUV4c3BNTlhONUpsV0JMQzNwTmR3L2RNNU1lVGRaU0FpdlJIUVlUVm1XL0JWWCtpUDdaYnNjNUFDL3ZnR29PaVYrTkQzTVozc094aktUU3ZEdmpQRVNSWUFnUkM0SXRFSTFQRmliV01tcERnenBtdFRkR1dOMmNSNFJKeXJyRG85bmJxRGsyOXR2cHR3QmhkS2RoRTN2eHo3U05WT2x6SXJtaWdVbTlRdC9IZkNNb2JBdU9waWNzbGE2UFk1T2JjV3o0cVZuVHd2V2hKcUErQmUxUkFGVG8zV3FTazdnem5ZWFlhQ2dzdE1aTVducHlKajA1cmUyaHovcVdPOEZacS9XbWVMQmpSRmVKT2hFRDhHWXpiazFKSHVvaFQ3UlN5ZXdSeUc0MkNTMG9rRDdDUTlwdmxUZzJxWDU3OG95VXR2aVFUQWpYZVFiaFVaa0JPZWw2L0EwdzZyR1A1clA3R3ZRZ2JJZ0c1a0tLYjNnMjc0QjdpWHRqVkRzcE9CVHdCTnBNYStOeXBtYXdsSGdmY0Q4K0hVTjlBSGlKeWpGYkVkOGVlcUFXWjlmZmRibkVoczBFUnB3Uk8zUUlRL2hEejJweDVJdXBTUStlSEVIRUI4bVJRb2tFaERXL0N3R3doTmhuNE5FMmhXNDFLbjMrQmM5NE5XaDJ5ZE9HYjFZQzNpRDJiQkxJNzVxSHMzMDZQZnNEamtqTXpaU3lXQzNDdzY0QkhPUWtYNVlLTmN6ZHc3MVN3ZzM0VFB5RzBVSm80TWdkcGk4cGE5dVVVajJHOXp2VDhvNDJLNC9vVUZ5N3NjOUpFdWNYNlY3Z1dmWGMzY1pLenFJZURpdC9EOVI5UnZTUklvQWVvVXM4UjRZcER5K3JRR1lHR01YSkNmU0JlbllINm0wVDhGNnQ4TWpOTmxoV0c5Zi9aUGZZdVd2WE8vQVM5eXh2eExUYUxUdC9OSnU1OUcyNGhZWk5uUThYWllGWGFvOGROcTNrTVdwanBTYmVnTzU1VXplVXVNcUxXRzNtc0prSWR5SS9lNXNMVWt0K0VJeVBnVm02SVQ2MEhPb1ZhL0Fsb1Q3THQ5VW1SZTVoenp1ZHdrVjZVelQwSURnOCtpSExybkQ3bDcrYmFSRVlZZVVVRWZKek0yQWQ5aXBTNnRaVVlkZGN1bGE5MGRGYWRMTGZTdVdOSE9EL1BkbE8zRWVKcGdPblBjRE9wY3hPSndBZ1YySTB6YmRIRzFCVVRzbkdvRFNnQW16N25SeGJ4SU5Gb0VNOU1ETU1qem1NRmNzMjNXdmpBRUhydW5zckVobFJlRDFEaVpCcDJPMHJPeVhIZlFSRzU4VWhRemU1TUp1bVpLQ3F4djk3aVQwL2FJUElrTU1CeDA1UWlZSlpLRnQ1WkdEY2RSMjBia1pZMmVTRm02M2NtZGZWZmdyVEVRTFpnZk5tUnRJZllVeEFNT003MUlRRHNsaXZSdklqYWg0RnJiYWZrM1FwWEJCaDY2ZEhZODVDeXNWZzV4ZURwdXVybmRjVU9QSUhDaTl0S1lMaktCYjArSkZsQXBIT1M1NVJBb0tWdVV5ZXNwdEp5QU1SeWNMOWUxNTgrSVZXaUZPWWF3OENtQ2tWTzlHdTVBMm01bEdjRE9Bd0E5M091Z01KTzlNcHhVNG5rTlBrNG91UEM1WkV6czdrMmZYNms3dVhrNGxOTWZmbUl2ZC9GZ3dNUzRkVFRoZW1DOExhbDlzeXRhUG1YanQ3TWFENzYrUEM0VzlDTXFwTytZL1kzOWZyRXJjM2JFdVNPYmY3eWdaUm5aWnBCMlJPSnJpaStzSEk0ZFlqSitSWU9GZ3ozQ01YSnlFWll2ckZMdzd4emI4V1VqNDVRTC8yVTJ0YmlVbUo0Y2ZRdXd0N1ZJK05tWXd5bEQ2aFJOOXZuYWFwTFhXSUQxOEFNZlg0OVZJZ3p6Lzd3a3dDMUkwbXZheG5PMEtpVDRYdXgzaVNTZjhabGdCMURBTXprd1hYYVVZam8vNWVqY3F1Y3U2clJQQ2tKNlppTmU0QTZrb1hIaGh5ckVhOEMzUTlJT0NldzVadmNWUmxLWkNienh5VS8yRWhBYmRvUThuQWxQZjhNMGMzMDJ4THhsSXVuODlMQ0JyTHI4bUtaS01JbGw1SzZhMFMyRkhGVDJKblI2WWFacFFTL2hYWG5vU3JqclZZY3JYbkI0N3F0Q3NUVzk5bkpLK3MvQ1AwM3h0N09XQVA3NXJ1WE1MUy8wSzk1TnNMUFVTckpKRktDUmFybUJHMktTQjV1Q3FheHkzcHJoMWVDTEZyT2NpUWZNdk04V0trVm5aT1krSytwVC9PZUdGRHIwZ3pla0hGdER1TUxsQ2VWbHVJMTR4YyswZWVXalNNd1M3RzdIMzVqRUJacW8xSy8wTVErbUx1RHdVOUZMbXgrZ2lLdmUrd2JYVE1jMUJ6SUJqOXNhZXo3WU8zMnlTby9uRTdWM3Y4YUh5NDVRRGJHVVI3dG82Uld6MWRPR2VSb29QNVUrRFlDWnB3ekd0UTlDWkVWMmxaSWZSS1pncDRYME1QL0F0RHBhRDdHS2ZGYzFlc1ZSV0RqbFlROW8wMitwT05lZDQxRVhvdjVYNEtlNmJ5UEdXV3BXNXAyQnk3ODBYRHd6ekc5ODJvM25mN0ZEclVHMjZZWklaajNxWExKQ2pFcWliekxXMDRtcFFZZi9oUGpiOFpFdGZNeXdvaEdWYzlxT3R4RHVtcEtnaVYvUEkxRWgzaVRaOXNzWlNINmFLckpGbEpLalBVNkY5Y3dYYnlTOFFydjNFdTgzYmJhTm9GZGI5Ym82VllSL3FUL1ZaUjRpZjVSVUxBM0RJcWc4RDNUZGY3Q0hvTHBNUmVUSy9vcVZ1N0QyalY5NUphMi9zRVlUbHpsdVMwWkRpdHdZaU96VE02N2Mxa0Q3ZURqMndnUVh0Wmh2aUVJNGlqb290UGVEbXhwcERCZCtVemQ5UXdSczhDUHdhbUxvaWo3UndCR09GT2JJUmdZdUhhcFNoZDR5eWtibXRIemJDRjB6emx5UU5JblZkOGV0aFdmd3JQSEJRYXBhYy9STmQxbUYyaEpQQU9FNVZxNytUS3gxYnBmRmpMcFY1OXEyenE2eE5nUVdyTWFwclN1VHF1MUdxWmFhSWdNOS9jOGZjUi9RZ3R4dUQ1TnliWjNUWjJoR0UwV3I0M3ZqV0U0aXlPaGt0OUJTQXc2QzBpbnl6cVY1UEs3RVIwMlNSb1c1MDNBNUt2ZXVVSTJPaE1OVHFWL1lMNWhUNndCZVNaOHlJTkhRYm1sR2dmaFMyK1ZRNDZMSjRJOTdQUjNSeVZ0Z3dtZUVZTGlqZmM5RkQ1UE56YTBDL0VtbTZTVEVWc3NjNUNkQis5dHptWFBQWXltRE1HaktBQURpT1Juc0pDcHBkZzRsYUJjcS9GMVc4Yy8zckkxK1VaVG9CQ2U0M3NObWZQOVBnY2NaOGdwRytVYkJ6ZVRVUlhjSXB4emc5alJia056REkyTXV3aitmSm82dUNUL0xhNEd5eVNveUFxK1BjYTJ1ZFRXZ1R5QzJnbW1wY3B6Qi9qR1dyWlhXOFN0M1pRY3VXN0lYcVFCcE5hTDV4TXlETytuUzNyMEVuZmM5MzFYUjBHdTRGaG5tQlVMV0djK21MZ2tCQnlEelpvQXhSa3FRQ3VQZ1pQUDg1Q3BHZm1lclFRby81U3luZnEyZHExZ21xb2o3U2w2bGsvNTd3UG5PWXJrZjR3Q1NVN0tsdzVlQkZrMFBOaGNGRXBkRjVXblRNME9vMHZOVnF5UHhMOTU3eUdHZmxlM0h4d3E1YXZxcHB1d2tLZDBCc3EzUjdhdlZPVTBJZENkSC9HVVBRVXJiWFVwM3BkTXhnMmROeXhmMlRXWlJaVlBEeG9BTDZhL0hDOWxUVXNJRzlFQ0Y5TXRnRDlybnFGU0hBdE5wbXJMczZTdU8zTXdjZWFHeWM2YTdJbGVNOXBPM2ZOdjJXTU9Cb0h6WHdZbU5KRzdRMUdXUFlGaFdPdkV2QjFUNmF1RGxVNU50NGFiTkRWeG5nYURQZzRyWDlYMUtIYWk4ZkpreVdZQlI2WXRGNmxsM2J3SEtsWnRBMklNT1hLV2krc3JkajJTWFdRclhqRWRRclFRd1FONlBQSk5OSWUrK1B3TGpaaVlzb01mQmpLTVlvelR3dS9xMDVXMVRncE9UU24wWTFIbEpzOG1JeUdBSUdSZUgzT0x2bWd0SFRtQTBsVkF5WVpwRlRRZFVDWlNzRHJaaTd4TkFmbGhLa3RhdGlxdXUyMkFZTkFRWjRGSExXb1N6Q0NRdHBWenM4cFBWb0wvT0ZkZk5pQzdsUitVMVpMUTg3dGpJUStaZ1NHbEhvcmtENEk3dGdPL3RFRWVYOWlTNzNJenJkNjJ2eGFsYnBGcWZoZW9mYlNVa3dscDNvbDVsOUVGaE1DY2pXSTgwa1YzMG83MERXRjZoVUp6SXRkZkJackUvZEF2L3ZmS2VvOGlQazdxR0hLSVIvNUJkUU1EZnpPZkdZTGVteGVqUGx6Qk1GWExyQ2JUSTBTRkJTWDFZKyszWW9xZEtxL25tSXpXZjhnY0VGd1hpMzM5L01mcWFZVFhNNDQyMlBzbGQxd0NMY1ArV29LbTdQYlY3cGRHVjZhQ3llUW1wWG1ocGg0SEN1MFArWVVCWWZ3bW9udmRoQmRjWHd0M1YwSnRrSlFPbXNnNU9zNGVOb2IxL2FJZzdxcXh4UmQyMHRiUG9ZdWQvUWdnUUFmRmN1d014U0ExeGh0Q2ZLUXNmUjJ6UFlicFRuaUtyMmF3SG5yZHhJZUZrbjJnbnBLTHA5VVVMRzlNWHRXMEtVWW1FeGJCazJ2MUZVNHRBeExkR1R6Rk5aQmYrRkl1amFuZEZyZXdZcGMzWHhDbUFQNkxESi9jRTNwNUYwWW91YXU5NnJGclgrcStUYWp5Z001NGNnVlc1aXlTMitZcXdvWk00QkVlNE01TXJBejdUYzdlMExpUldJOTZFeFRpQXh3QnY5cnBlVWMvekl3NTNlMmFyUE1Ob054WkpOQ0ZueVJwbmN2a3RtU2loUHRCdGVEZ2JSM0UxYzUyUElWd3kzZlJRT241ODBCT1ZJRndzb3NEaWNPaXQxK0h3bjNzVWlFTi81UVRyVlg2Wlh6bmUrb05IOVhrOXQwNnJhREp0Nklmd0RmcGZOOVRHQzNWcENNRXltTE9FcEdaTnZtS2hLWGMzbXpCamYxTW9tWGJFQWNFUS9kSXJUWFFaYVQzZGdFdXp0TmNzcU5paGlZUnc3ZVpDVnVGc3lKUGRpaFZ0NGpqOWg0NE5JbSt2bEhZRjdCRExyb1NsYkRqQWM3a1hWS05WaGFpSmw4TUtFTDdIbkoyM0E3SE9PelUrQ2ZFcEx4QkdYQ2c4Qi9aWUZ0U0NrRVp1NnNTNzk3WUNnbHVHT3dzSTlSamViQTFqTFpiVHBVWnNrZUJERXA5aHZzNGtCSTRQWGV3eHZSblJNZVl5WkthVkIzQjBEd2x3OHhLOCtiWGRQV0Zha2Q1WVZxYVhDRTdTeVRUS3lDcVllaEhlTkxPQmw5Z3lxNXFZRkJXcWd3WVErWGt3Z010Wit3eXFjRWdjclJvcUpOcVpoejFsdzRGZWN6cG43dngxNUNtTEpXY0NsM0liT2xzOHppZDdIQ0UyVVJZUWMvNTlEWHBWQ1hLWEI1NjgzZGQza1QrNVAxbjdzdytOT0hjOXlRN01POFR0TzNMYzJEdjN6UWtDalRza1dJa1RIbGNwdDBWMEpmSVZQWitPWXFwK0FQUWpQNlVCOGFGUFhiUXUyd0toZnlKWkozcklwMUZkTmVzYk1oMGlYZktvME1ZeDZBeUlYQjhRWng4K3Z3U1RZOEtKOE5hNythTTJxZEc5VlA1TWp6STRkU2huWUx5enhxeWp2dFh3SVpXUnFYakd1MXVCc2pzNHVmSldiaWhhUGdEQVlTYnNZeGtTMWpzUWtHbHp5YjZZc0JhSy91emRMaWEvRXJNL3dXN29qZFlpSFU3amVlbWx4ZFIyNGtzcFdEN2NodlhQVTgvM1RCZzM5NUMrVjV3SjdqVlVSV1poTE1ySzNidUJGN2hWb2lyZ0lFemNJRkxNQ1B1TVNNSXZuaTIwU0FjNmdFWU1KN2dUTndhN0svSlJPNU9zNWpIRnAvd2N0ZHVUSmF1WE16M3craDd4S2lhSmM2Yi9LNXU4bkh4S3NvSDNDK0c4M1NnTVdSUW0zSGk1TXd6Vk9HTnpQSGo1YUVLTENRdTY3SXNlRnBMd1hMT2Qwa1JnMmZNNkozNjRWL0lWT2drYXpzWnI1V05NSmhaQVE1L0U2T0ZPOVpneW5FaG5PbnhhbzB3OEhXZkcvcTFQYWhkeEZ3bGZuMHVDT0RzYjFueENlMUpidWtFVUl1aXQ0RXRyZ3JzUE84dXdaMkRtWGZlUUhSZUE0QzRhb3puYm1YWmZqTVZxMklqdE1MV3VhbTJEWGk3cnhZamJhU2xpbWhGaVVMc1RKUkpxZE5IdW55aHVpSDdHZktnS0FQaXZVVkcvamVmZVQ5cVN3Wko1d1Z3eDlRWVJkc1dLR2lMUlVjWFNZSHJHYUZ1Q0dHb2FVOStsTGYyQ0RjV3dlcTZmSURhU0RMbUU4VVcyMkh3L2QrYmxoVlBvdTF4bTZUMVZmaXhHQWR5Tkp3cVBqY2ZWV2xOSitVUnNjR0pHMngwcGI2dG4vQ2Y2K0RLNjlzakw4Wm9DSlJYay9xUTc1WmtLSjZvTmVxZzVnZWxyNG5vRFpVZE02MnlnampkSFlSd0FiKzdmY3BxK1pHa0VDcWh1VWVUNjJUUXIxYUhGM2NjdDF5T3pDc1BMUlBpbi80VEtrOTVkVCtGa2xPbDdqdERnNS84dk52OUFjcEpKWkF0SDY2ZmE4MzA0S0p5ZlpKaU5Nd1NTOHp2R0hFcGZjVjRibmhGSmFvRjRmNHJ4aXJGNUY4M3JvODV0UWl0MDhudDhvMjYxeG9wdG1qbjA5d0h0OHB3aHovU1R5cXZHU1hkYmxYNlgwVVh5UUI0WXVLaUhPNUZhbUNDYjhibWhKWFFQMWxqaW5QcURqNUZ5NHovcE9Ed3VEcjZzNW0zTk5PcEJQYjJLZkZVUE9MNitRVTNkYThwUGhqY1ArQ3F1NGhZVG1ySyt2ellkbU5tbWt0OHVzZitZbElHYWlYZ0o5OTJ2VGczbFE4WmVJdnNLUEhRWUVvVHJmTHNNNm43N1BmdFBPeUF3YmhvOTV4ejRNcEhtVFJyWkZxaC9VSDhsNk5yTDNTNXNzcTl6ZGc1STN6RllFYVMrclBtVm84ZEZiZnljVW02UEtpMjhOTG5IdWNEbVZ0QjlSOFpSbVFSTE1jc1YzcW9KbUora21mbVpmU2k2S3lqS2FoblA4eWYrMEpIYU1tSzJIcnJROU85WE5vU2phdWxSUmFKRktiZFJlbkZjM0xzRm9ZaUhTYTZHUEtUTTZHQ1RCbjN1VkpCRXNzQTdRTTJBcDE1K3dxUFNRdUV5OGNROG9YMzIyZzUwL1orTkgxRGwycXd4K05hK3BOYUhQNU1yb3ZqS0NvK0FZeFpYbnpDemVnblZ0STVpU0VkZnVYR0lMNzhGQ1ZaNmp3eWRrcGpSRVUvWVVCNzQvY0lSa0tmYVlhUzYzV21QSTRqSFNucjJuT2FVNUNobDIzQXdhRGpMT1NOYTdBN0FIa3FnYkZpbk9teCtYaTZBeGtXY3YrZjVyT1dHUGVjYnJBL2xDdHI2R3lXOWRuMTVOYmFKMUtLNnNSZ1RTMk93aGFzU21CSEJTNVhrUjBDang1NnBEUXVNSSsxem81Qjhkc283eGtKMDEvVUM1dWRQTnBkZmdaaU1vYUlqTmhzMFVuNGpRTDhTaXlWbzZMd3J3WkRPbHRCeXJmQStUczdFaytMbmJqQWJGeFlrQ2QwbkdSWDdTTWlKTUpER1hGUzFlSkZFd3BPSFdub2ZDM2J6SERobmFpb3llYXpxbTdaOE5OeFNnUWlUWTRPaENkK0VDMWZmMHcwSW5mMWlSUjRmaGNoV1gvUHllbVh3bW90Rlc0OHhHd3ZVREo5Vit4dWU5TytEa1luVFc0Qkc1TmxISTlUYjZnTDNNRUJ1UlRCREZ2bDBxbGVzVHlpWHlGZHN4bmdkaUZ5LzRveGZwZXdlNWZmalRUaTVFQUR0eXM4bEVsT0lrTUhrem15WG5SRll4T0FsZWt3V3B3VStBT01FOFlacWRZcFdvYlNqWkt2ODNRTk4xbGVHajYyNmw1YmI2RWxXcGRsUlcrcVdwQXpuaFJYcEt0a1hKaUdHUTVJWVRwSkYxN3l5Sk9SeEgxejRmei93a3pScUxVTFljV0lwd0RMNkVqU2gvblZYQ0VqWDJ3bk1DcE93dksyRGhDRy9kL0hNTTVjYk43OGxocDZzWG5pV3FoT2Zrc3YxRzRsTmRrVDRUcnpmSHpXMStHVDFYNjhRUjVZNFJPZnVzcFZlak9Ick9vSG5WUkRQVmROeUNOa005UER5eHhUOHZGTXV5SVB5Q0MvbDRQR0RxL3FKKzVlS0JlZFREUzlJRlVYVDVHdTVka01GYi9WR1RkcEYwTmZQZ2VCN3JLRC9yU3J4QmlCUnBUeXFzM0hucGl1M0xUS0cySzA1VEwrUTd6S3BkSUc3NGNreFp6NEwwNWdXdlMzOCtiSFk3bGFzMllVZ1pEeXpSbkhDRVZ2QW5hL1QrelNlYys4aWVlU1dpVU1SZjNNSTltM2xpMm1jUjRWaUtqYllMSDNpdkhsQUYyUUtITEo0a1RMeEVGVTZiU2ZnZGJveFBjc2tBUmZWbml3aGk0N0h2Um1RcjNOTGtsdzBpaHU0WGc3ZENCb2kzcStjSFVRS3dhbjUrUkV1SFhiZFovSzdBKzltYU9wR3Z2bU45Unpad3I2eERhQU1sYTNlSlBNd3c1and5cHA3SHhndWpOb2hvNnRsZ1RoQjJRSUVPV0hyYTJKck1sNHpOV3B4S3dIb203RE5wNElZVFpyQnh0dHpCTG1udjJ5RzBHYWI4UGhFTWFBZzk4dDZBelhveWpqL1QzMnRUZTAzSDFIWHlWMlVOUk1KWjhya2UxQ3JKM1hsRTJUQVBUaXVsZi9lMFpkMWRiQ0xhd3dsbXZDd2NmajU1Vi9jQk45NzBpMERHdFordXExbjZjbFVzMTZFR1Y5RG5nUDgrQm4vcVdZa2M4SXhyNDdwR2VtSTVLWFRCMWZ6RFphTWhWV1RsZVFnalV4ek56YTFrQVBCcHQremZ5Wi8wa3p6c09jMTY3SUV6STV1SUNRVk1rMmZ1dEVNUTFWSDBjQk1SNDBtUjdjRzR2SmdWY1N3Z0V4U3RySHpXYjlacDlxTWVoMWJBWkhTRnB6WjliY3ZBNmdKV215cVREVXdocTA4d0pvZkZsc0dNK3ZjazNNaDRGeU1JczNHbFg3aWtjdVNNWmhWdGdWSW5LdHRpWVlteHFSeXd4U0pNdklaamwwelZMdUhRMzN3VHZldU5LZ3l3NU9BUHdNMnljK2FzaDJ6UzFjdG1hSDNmaU1ZMVExT2wrdXgzcVpFMmQya3BvU1NLTjNlWGNCUzhTZGhKUjgzSmlIOGVTNmpZdjUyV0FURXEyeUFVNFF1WVovTjVSd3E2dnIrUmtoSytHY0lYaXNtb2pRdlAzY3pnbUNWUGkzSVZ2YU5kcHBOY3hHNk9LV3RvM1ArTDh0ZE5wMWU5VjIrT2YvRDM5b0NuNWFBUG1iQWdOd05jL0tCZkxPa2NZaHI2MVRNR1htS2FMRVpEN2ZJdUxsNC9NOGxBYk44dzNvWVg2NHk3Yy9lSVl1NlAzUzVUbURIU0lnRDQzbURNWmMrR3dqc0ZwS2U3Tm5OdCtFMldGTkxlRzhWYlFTSHBKZWNvcTZLbkcvMzdMOENINHUxU1ZQcXRQcjZOVkhuTzFGR0o5ZnZaMnpSZm9YQ1kwUWpRejhDVitjUzJxczJPcnZ6amdaZEtpbUdYMEdVL1psUFVzQ2MrTWxjb3lTRzBmNnk0NktiT0Y1NGNobW15RXFwbWF4TXdYaW9LSVd0YVdRYTFnMVhHVURuU3JiLzE4SjVJZFhOaHAzdHA0VzBBYmRuTjNqQXpWcThFTWRLSjh6YWUwQlBDV3Rpemllc1RwWWg5dlhrUXFKcW44TDBlZFlKengxSkY2UzVla0FsTld1OFZCQUJrYVNlbDdNRVo3T1ZRSmZZQkVXaEZZMnhPc3NiK2x0TXdManhPMmt3M0VDcWJITDJDNXNwQUhLb04xQTJZdy9abDJDRHRzN3FGTGd1dW9LMEtheG5BS21lMUJYdSthcWFjZlpHN2VPZ1pKRW5rT2VRWWR5QWpRcDV2UnpTSnh2MzhPRmZwWm83bk1Rak1uOUdjNC96L21YamliTE5KL2lTVDE4VDdZblJrUy8zMXQwUmh6SjZnMWwyNnNicVBQVVgyTlBCb1J3VFR5Ym1hVll6RnRWOWdod29jWGxwVVdacEUzZ1dkcEFsU0h0d3BjVXpuL1JLbSsrNVpYbm1qaVY3Z2dqbWV2UzR2alYzRlF0MU5EejJsNWFNVTRnMzhKa2dVbUZicnppQ0wyblJndGl2NUxpbG1mS3NsRTdZdXNDc0VVeUN2QzdYZGVJUlc1WG9vbEh4YWprTGZmaS9tVTlWQVhNbDJocFVneC9ObEU4OHQ1UWo0dUNTcE5SRk5rZDY3R3FiZzFWaWE4S2tQc2pRcnJCc1prRzI1MXF5U0dpSlJsOHlla1ppSEU2Mjd0S2FDUFVNbzRlOHN6d3FzNnBnYmJBa2YvTU1wNUw0eVJvMUlFUC9OZ0FuTlUrNWpQOGtMWDFtdEFQYjBiSW42eTRyckV1a0h0NmVmd2RSMnZlSW8rMDRpdGN3RWRGZDJxamM0TXdjcTB4Z1MzR2tPazhScHdrbnFubkdLQnN4YUk0M2pkYUlMb3haempBMU02a3Q0cWNoK1d3VXExd0pWT0RxVzNRNVdDYitkWVVoYXB1YnZDNndqSGt2eHF4cU5Bd1NrbExSVXpINXZzeHQwN09CdUVkSHFzVVYyZ0RPb1V5YWMwVVdld3RDNDhPaGlvTW55Q1ZKOWlUVkFpbzF3UUU2VXRvYVZaUHhzcVVFd01Hbjg5WXlIQ2VPMHR3cHRYeUNyVTQ4UkNPUlgxWGs5M05RUmRoVTZRWm1DSnZjK1pzd0NOcDlXVG4xUG9nYzAvNDRWSm9qaiszYXZmZGZuUnhsZlhLaHZkaFo2T3pRYVJ0aFR2UlkyM3VFWEhja01HWTNVUmpjS2pzMFRNeFloR2d5NjdWSWliMWRoYXNkbGRVU0cwZmxiaThKMUdDTElxOWFNeEZMK09zMjYreGsrWnJyVURyYUZXN2kzREZvN1N5d2VsSDMrcjhUNExPbGM4anh3K1FLYnN5dFY2ZVRWTEFUaFE1cFZUa01mQVVnZ1F3YTBLQVNaVlVhekdTZEcraUJaQTNwOHFhM0tIS3I5aklma3BuVE9HN2lXNmw5OVJZek1MdSsvVE5WcU1iSVA0NHVqTGJDUXRXb0h0RUV4b3ZBY0RHdFBmODI2Y2wwdHFFMldERUZqazZuS09YcjRoYkdXR3YwY1lYVjc1b0hocXhwb2dwMzg5dnZaVEZCUGpBT0U5aWx6TnhPNWZyV0tTMW1zTlJDUDhjcXhia29rZjFIVlNHeDlKM1VOdE1ZV1IxUTNZMWtZeXdmMllLRWpaN1lISGtWYm1Yc3RGdWNKblZRUys2eURDNU1hTjh3ZUVNWjVyNEdPclNBd2pWZ3FJMnU1eVdvWk5scHM2TXJSRFJUbElOTFZpRjJOazlKcUptbTJtb00xdVZHb1pMZ2gxcEFNZ0dBS1YxaFliWTAyUzhPWTlhcnpPOVVuS0sxa2VJdnZKQkxJNHpyd1pBZkxjM2IyQjFJcHNxS25hMkFTSnl3a3QybFhJTUh0MnNCL0lmVGZDWHVIenhBYitkOURsQWRPOHkwUHdnRlFtbUFVRGhJWTFkL3h0Qmh4bVpDdlNmYkxrcExNaElSeDRlYWRBN3dtV2k0MkdDTDFRclpDQUdJRmxmUjRpRk5ZUE5QRUtvMy9xK0U5SFhhb0dJSnFQOGpLUDZXVFJtdzB2b0poMHlJTTdCSENXSHpEUGwra3FnUHRRY2pObDdCenJQQVRJSTRBTTJ5RGxHWDJueW5XYzRWanFnbHVOT0pWanpVSmc3SVhzV3NUckJ6aU1zanYwc3Nrb3RDWks1MVlmV2daNU9jeEhTM2hEUi9uejFvdCsxMGxzeEhsVldtTFNsYWVoR1Q5cGg5LzZzeHdiQWp3bE96ZjlVRXhEYklBOWg2UmhzSFIwZVp0Qk5lWHpWTCs5ZTlYY21EV0lSNDhhbHJJY0daN0gwNW5JdFNMMHpxcjIyWWZmdVA5VnJXeC9NQlZFOUpSOW0rV1lxNDNvNUkyNGhrUkViTzNtSWhpa1Ayd3BBR00wRmNGKzRiekRLNUh4dUxXS0w1bDY3QzBUYUp3LzZPRVRtL0VyK2RMQjJQM0FqMVJudkVMalJPaGI2K25ZUHlzbXppZ0NwcHJqMTE2TW9UbHlwMGRNUWZPclNsSXgzOGtTTzMyRFFHbTNkdVQxSC8zMDM1YzFlOEh0a3BOUHJFZSt0UjJ1ZXdLc0M4T0NwUFJEZGZuR3B0RkhCYk56QU5SWFBsT2FhdHFuSUtRMVJ3cytKWXFkQVducjhkUkdQcjEyMUY4aEJKQmo2Z0pIVnZ0TTZxV0QxbDczTStkYTEyam1CQWpVMHhaU2RqNGRVNXFFR1hsMTYrTFFOOGQ1K0VTSFVXNWgySmE1azdsU3p3OG55WjZrWkN5Z1RKVWFoR1dQdyt1Y29sSm9xclZCbDZpdnZmYlVaams2aUZNY1k5RExtSFh6NTNlNDhvWWdTOTNuelQvL0RGRUVwcUUyOHhHM2xISWY5OHpBa0huRWxNRmNiQ2F0WEhKdGNDTDA3UE5mNElON0RGekxJWGRDb1poUWxReEovVU5jNlczVEVVbGpqelNwWldZclZWQnR2OFpRNnZyV2FkZW5TT3ZGdkJNL1RHUktZeUdoWmNaUXkxSGtjQ3BVLzBIWEh3aCtuNzBzbUpCclNGeVU0UU9OWmV3SmJla29VM1VETTV5MWZ6QVg0bGlZeDBRSG5FOCtta2hLaUpmb2UwV3c3bjBhbU96RDRxZWJkRlVOcXp1cWlPMWdCcDhNdHBFbWVzZ0VCa1huZEgyRlRmNmJYWm5OU2IxWWlKWDFjUFBoWU9NbmNpK3VSQlNKYUVZMnplTWI3dnhyemVmdGlYVTRTZjZlMWtzNENVeitkNFBtTzNuMWZVakxtbm1hUXZJaE9jRnZlSEdSZi9NZUk4K05yMWxnL3JPQkJvVEtmdnVSZElpT29pRmJwMlM4c3hZVmRiSzVMbzA2WnB1Z0dGMThwY1psM2MwZGFpTHdCR1hSbk5VbGs0QUpBNitlY0JaNWxQTW1MU1lDRTNmMUZaS1loOERneFN5akRQSmZGb3lBTjJuTFF0UDZJSkFJK3hpakN2MTBFQXRONXlLTkFTSlg1Yk95WTNIL1BxL3ZoSEk4VzRvNjNiVFZ5SVdZRTd5RlVnTkVBcHFWVVNyT1ZpUllXbkc2c0hUMDFsaElKQnZvOTJJZHlVSXhPcGo4UTU4TFVOby8xT1VKUEQvSTIzTGZCV2QxdVBMUGtBNGJFNUpEeXY5a3VIRWYxYlBDeWFDeC93TitidzVxb0hhZU5IeldhbVo2NUJzcnd0bkxTMGNPemZvYkUrUEZHdHlLSTIwODBnMjRjcERrUDJ4c0xRT2tIMHVVNzBPdkN4VGsvbVAyWGFDV3RtVXhzZG0zcXkyenoxckxUS1VSbXZFME4yRUZUbnFkU3hxbHh5K1JPUXkwOUhVUG8xWnlGeERTSDZFR3dzdUJFU0hVN3IwbmhoMjNwalp3UGN5aDY4Mmp5SnZIaGE0S1R2RWp5ZDdUYkRUcWdqYnplT1MvVmtHTzQ0Z091K3Qzd2N3YUZsTWRYMkRtMEppcEQ0dHE2K0FyS0xROFlsY2V0OC9zaEZVVlZCWlIyVHFPeHVQYlBlT2hrNVBZMnhsdDVvK0doZnVNNm42UmdmSGxqQXlyUTl5RGFVWkpVRGM0TDJ0VEZEMTJzaTU4UW13Q2NUd1c5K04yTmwzVENlaTk3VmVTdW9IY3lCY2w4ekJWOEQybGhpa3JwY3lURUpuYVV3dmtWdDhVTG13aUx0RWtJU1d0Mk5qTlNuSTV5c01QYm5Ha2pmenJ1Y1VnMjlDbDJtTHRPaTc5OXl0M3dpaE14cGFRNDUzY2JZMlR4cWpidjQ4eUFiSWtqRmRqekNBSHl0bGtyWFVEcWlaZnFGRTdsUVZjdm1SNWd5bzdiQUVlWUdRNWVSNWRDMUROQXNqL1lPQlMrSmd6VTg4VzB5QWhCME05UEhLRVcyU085c2RWZklKTklBaHZ1SWE1VWxuQmxDVnZPSWhaSkxaWXVFaHJCK1htNnlkd29DME54OGlGcERLeEY5dnlQeUx5V1BFcXJHY0FidjlzSUMzWWs3cWI2YnlCVC9xYU1mSHJDOCtvNFExb2FUY1J1QmNsUTdtbXROVnQ0V1loSk1OLzFnNGpOR3d6UDdQR3NKUU83MFNwdGhkNHIzbm5aaDhKeXRBLzlyc2RPUDMreHF4cFJMRDUvR096MkhZanMyMWRJUUlHZzMvbUhqakF4aDQ2RVp2bXR0SW9jUUlaUzB0V2JUaTM0SCtqQ1IvV0hBOHRkUWk1WDZuVXd5K01TYkVFbEVBK29qOEtIVmU5ejRiSlQ5a0xBVUExaWhXZmNoeURzUlBOOXp4Y1QzaFRaNWVaY3E3QTRwUW94ZzFOUHE2a3NDcFZ1bDVldnZJZjNnMVIrVVZlNndGSHdUUURWMzVWM2p0Yyt0dW9sb1JFb284MmNrU0h3WDVkN053blBaOHVlSzBKdHRKOUx3cTJsdDNKT3U4OUQ5ZFFFWTF5UGFsWXl3VGZQdFRIakJwMGZSdUlwcDR0V2VQRkNrcDBZNjgzK3dVVE9yNHAxd2g5RGlPTDNFRnNFWXRKS3BTalpGdklST3JnYVFCMHUxZW03Qzlmd2xTd3pLZVZJTzR3SlBTZXk5T2lpeWFyUittc0laL0pjTWVlL1FVZTh0bmNNOEtnT3NjQTZ2TzMxMStBSmVqcHI4bkRNZnArcWprc1R0WXhqUkhhRWc0RkwwbHJ3TnlrM3FUTjdUa0JKNytFWXVhRm5BWU95N0xib2VhcVV2UzNRRGcwU09aM0Q0Y2JjV0FTb0JMV05MVyswaVFTdFREL2JwMHVRdU1rbzltaHQ4OWR6dWRUNG9HN093b1Roa0s1TkFiM1Z1K2NUS0YwYUgvc0xmbm45ODlFK3NmRVp2RVRTV3Q1a3UwRk5RWGFOY1pJOXVwbWp2YURDNWdUNGlaVlh0UzF4SzFRRWc2U08vTmVMeWNpeXhVR1M2ZTBrM2FzMTJNdFFtdk9mSFFGSGdCenZMY1FGNEVxTkxadTZwU3V0cWsvMGFtaXJSMjdyNlliZmEwcTJTamRybi9GZU05NXVEb2ZyYWZQUWY3c3V5WURmNzh4bzNycVNudHhPUW5nWFRCNFpDbW9RVlltdnR3OUZqaFlSRkhzSGl3TVdydlB2Sm9MUWNzamlTRzNMK1h2bWg4MVdRNnZENEhjRGtzcWV4Y0FmeXRxYTRZcVFSbFVCZ2JTaDZVWm1QaXdMdlVRMENqTGtRSjBnVXlyVVNwQ3Uya1RxczE3ZFZJeTFIL2JXQWRDRUpkems1dnd3cmNkNndDeTAyQTNDZWpDdnd4R09LZDFWZ3RHd1phK1RkQTJTSGVmbjQvb3YwaU1aRm16TnRJWFJFQTNmdnlocEZrS2gvNmJuUlZsQzB3eTlTUkhXMm1pRWs2YXY0eFFaMzNMWUZTNDJWbzM4QkxGTHJEUWZUcWtpTzJ4STdUbmt4cmUwd0hMMXNjeEpQSEhpQ1NVRzBhSEVVNXlxbEp5cEZTR0VOb0puSm9SNTZBMHBxWjJuVjVidml5NEkvSmZWTmw2WVZ3UFVXcS9sMmZ5QTY1ZUNkVW5LL1JJUEdjNDRpeGdqdHN6djZZZFdpYy9kcFZlc1FFVlkzM3orUzJ2S1UzL04xUmVGdG1GRE4vWGtnakpWV1pwTzVpeFpBK2ZHT2h2R0ZkUVUrb0R5aEJzRXljS1RmcU8wanZMVzMvMmk2RGk5MFErQXB6VjJ4WGVUUW1veDR1RndsQnh2N1NocFJSWlYwZFVpYUVxdkI5ckRCa2d6OGIzMmh2bk50UnY1dUY4SUhDNVBSdDVtUzRBK29Mc3d1K0Z6WUtNT0MwdnFtMmt1dG1UYkZSY1Z0Wm4vbUN2Z3U3WEJSQlJSeWV6aUZnbnloYmJpNmE2WDRmYWdWYjV3Q0FqQWFOeDZZVEdMdEFpMnBURnZSOERVYmtHV240Z0l0MWxIb0VFZ21jMU9uaFkxU0lxZ2g0QUZXMHB4NmxvazBMSnUvdUI1VllmeHVuRWVsamltcHJoUkFqSGp6Z0pWQkRpdzV2d0x1VVY5OTZPRmw2OC93QmVyREhDWkU1VnY5MXovVEtqc0I4M1N1am5TalhXTWFnbERFMzNNK0lYQ2thWmJ1S2p0L2xvWUl3YzdrWnQ1N0xQSTd4Um9sbm0wWHJUOHlOdlBqRlhXQkRKV2tYc3E3R0FSbFMwcVRIdFk1VFZvQVkyZCs4Uk85YlFzb2hnRFZ1dHI3QmFPcTMrMVcwNzFNem05RVBPM1FjTUNEWjNhQzJkaXppSytIQTEwdjQyYkxGT0daNnd6WDE1TWN4UjFtM3FrdFA2SDJnZDBmcVBSNWkxYnRhMC9uaWhsTEh1alFNSGdxWWlYSVBzd2ZVemRuRFVPYVFwRURPeUxpdGN6bFVUOHpnNmp6dUx2RzlhUzExZGxmc1NCZmp3M1MxMTRGb1EwbENuYkh3QWx3Sm95MmY0ZXpsY3Y4eVJqMWdqSVk4ZEx4cEVNTDBiYWFkd1R5TEJwOXkrNHAySDY5a1JNcy9LQnZyU3ZYZ0RPMWFldGIvVm1ldXF4cXpjVVB1OXk4RXhobXpqWTNBejBiMTMrRU82QVpDNnFpbTZhK0J0TXk0cmwwN1NyUzlrazlza3hociswTEttamVrRlc1VmRkZW1mZ1Rpcno3MnIxSFRRdnY4NnhtSmpVU3NVa0NVdk92Z3dkQ2JBRFVIQVMxbzR6UllNK2EzblU3Vit4VzVHTEpQRlg0c05Eak14czdlODlOMzBSS3RiaitWQ0NCekY2dDJSOFlHei9CcldwSDN0VkxGbkpXSmRsdnpGQUlOa0dDc0Fhb1R2SlVjVWxJZlZaaCtQbWQ1OWNnbmkxbHhEY0xLb1Nva2NienBEY1hLclk4SURMcWZxYkNrSnRxRmkwdmxobTVtc2dLSVZSQWJrOXQ1T3BURXk5QTR3dHc3MWtUTE0wdW0ybXM4dVJHL3VuRitvRnFXUk9NTU5IVGtnVVdUNTdpNnpvcjFWSEtYZFFaemNSWFQrMjY4NDFFRzZ3bkMzOEE2SVZDS1FWdjNpelJlSlpKdVNGR3Y4TnhXYVlOYmFNaUc2QzJWRXZSMmEzTjlUR1YwK0puQ1E5dmxtLzNvVHhaQ0J4ME9Yc09vOElxM1J0bXFFYWxFL2RmRWt3dVIzT2JqRU1ySmtuaWtZbGsxeWlJeU1LVERNS2U0WXc4N29FMnpqcmo2RndqNjhseG5MN1laaEZFMktUK0JlZWxnRWg0SmNzWXVqOGpEb0ZhZEw2c3ZQb3E3NktVcVIrQlZVaEdia2ExK2cxd0JFdFM3R29KN0Z1d2tuS2luZnB3UVQ2UWJCL3VSNlgvQmN6QkhudmFwaWdMQ1h4N0hCZDE0Y2szNTN5RTdBaFlXZ1dHQjBINGRZYW9NVVFFNGRXU3ZxYWE4d3hRZkdsMVRVdlBYKzN1TFJQcVRNODJLV04zWVRXNzc0QTlUaGY2Nzk4MGc1YlZnRE1EdG9SOGs0V1JvaGsrR1dCZGdmZ1hoaCtjR2xXUlpPK3ZnNGp3SVNKcGZmNWNvY1N6U1p3N0xkTDQrRE90SXJBUjA1R1o4SkF1YjRjUjdvNDE1dzk4ajJvVDc5eVFIM2RPdDdiOUdhQTFyMnpiRlRWSWJSL3N6K3JHaHd5WmxlTjRyMlltTE9iYVExcDl0N1NxUkpuR1plWFZFRVQ3Z0ZpdlNsMU55RnA5ZUJEc2xlSFVmMis5eXNZeTVPWDdiMW5ta3FpejZpdzFWOHFjbnVabS9CaVA4SDVTYm9taVArazJMdGc5aHpFTEY2N1JUNDdtT0ZxZnFaazNNanovTTBBOWx3dVNVZlN3Qlh3M1d4aFVUK3dPaTF1TFIwZTBzejV5dmordWFDOXRHemR0a2ozTVlVZE1kZkdUTG0va2lSb2w0NkRSelpydGVna1lSOVB6TWxIUjBNOFdQMndudnpNYXV6alpNRmxybm5hd1REaVVQN2FSa0svWno3NW5NQkt1T0FWMlpBY2JpaGtQZnNTU2FHRDNabmE0U2orUVFRUTdPZzNzK3Vpenp1L2lnY1lUclJmaS9nWHRBZWdRbjlXaFBtVFA1aFo4MzBiWmxLTk5RUXZPbzhOcFZHbnJZTFJteUhuWmFCMytvOHNWeDF4bER5dzBZbTBQOXJmOUhJdGtDTEl1bEs4UzJCUmRnTDRVOFhHaVJCSFFlK1h6QmdtTDVOcFB0TGkxZWdFaDdacjVRNlg3Z3dXUUNsOW85ajFFRzFWUHpEekd2djh0QmVLOGx1ZXJScjRzUHU1aG91NitBei9EVjNJRkFtSDlTeDk5K2hZYjJtTmhnZlFYdGsvQjF6NU5PTk00bnBmWXdHR09ReTRpVUVSNW9MMlFSMGJSRmJXQ2lpVVhnWWxLOGM5SnAxZ0g5RmltNVlRQmFCVmFyVnYwdmduRHNqbnh1Y2pVMmRhVWtFQlBjZHkyc2NBTDNFb3cxSENMeW5BQzYwQUlmdCtkMGpvMEV2ZTUzSms4dnY1Q3dWZ2ZVSmlBcHBIMzN2aUpVNFVURGNaU0ozcnNlVkpENk9pd3VtVFZ6aThiTElNRGpLZ2hxTlpDN2F2MjVYQkh0R0VPNUFOcWUyR0JGeGNLYzlUZ0NKajF4T2pic210Zk8vcE5VLzFpNWZZZitFT1dQSk1sZmRHVjkrelZwL3hiN1haMEtxWld4L25DRUJPZkQ3VnlYSGxvVnUrRFNTcVVtNFFKbFkrMk9oSG1tUlI5cytHMEhPd2IwSTRVZkRCZGFtb0NiM2pGTlVtdHgyajhISktESWNJV3pBWGo5ODczbWpjeHI0eHZVcnVoYUZXZFpiS0QvL2dEVjNFd29aenkzVUNucUEwTVhsaXpEU0V1NG82bzVUU3hJQjIwQjhPdnA4L25KUCtnNjBhbCtoU2RpMnFMaE12aUNpNFhhWjRCUGZJMkd3ZGRwdnFUc1lIcTRVbDJPZDlMUllheUo3M2ZKend6ODlDMWhqVGkzaGdSTTFwNmNJTHNWQ3RMS3U5N1lRL29MYklJRGVrTm4vWXhPUUx6QjBnZU1hYWR0aER4dm9kazFkWDdrd1hKVHd0Z1VxQ081c0FjTERGQjlBSjNycldpMmZ4ZDBJL0NKK2RXM0ovY01GN3ZsSTJURkQwaGtuUUVnOEJ5dW02bGgvaEJBd3VlaEc1bDZ2c0M2YTlrQVVIanQyUEhOMjgzK3c1YkZyZDd0VGFtaVNHbk1KaFBVT21lYzhtK0pvaHBzK1RQbzdEQXRETGxiN1JRL2FNVVBEeHlqUmVTVlBEaUovbU1USWxHbk5icUZHYVZZT0hQRnl1bWh1Y3A3dVpkS2hIL2NJM1MzdGh0T2ljTGlYaWNhdkFZY3h6blZTTDhvYkt4ZEMwcFJKNUFEdENUNnBGNG9LRnU4TSs2Q1ByZHpZYnl2WGtsb2h1NWxpaUNpY2NvbzFNN0lKSGsvczZlZVJrRWhMYW9lbTJLL1VUdWF6eEpXR3JJZGpVN3dLcStZZGd1dlpkRDZDQ0JzMnE4TG5vbmxzRTFEOUpnZzJ4SmtGTUxCRFFpR0QrVXh5VE0wamZORkhBWWljaGtXSCtKL3hMQjgrR0R0dm00cTdtNFBDLzFKMDJJMVU4TWhoVU9xcXg0NFNBald3SWhWUVNKMjI5dG4xNkJuUTFFM2owakI0aFhVczFmV1Ivc3MwTDh1QzdBSlBqU1ZCcWJsRFJLV2pMZDJhK1VKdisvODUxTkpUZldUT1FuT0xIdmR1aTBWdGFGb1ZNbXpGOGt5ekFESHBnRHA4aU01MEpFbm95RU1VTFJTdFp3QTdiTk1KUkxJelRBWTZqamVXNEM1Mi9ieWVOOTVTdWtLSGtaTVh2OTFCYlhZQWliTm9IQmFaaFRFeTVibkRrdm1VSk1UUS91WW5YMUtDWkhZUTdyMjdRWDNCNVovNjFzVThDVTVTeGFzQ2pib0ltV3IreXFjZ3RidnlKRFQ3VjU0QzNWMUJmbTQ3TmIxRC9zZEpxamJ2cmtrSjgxNUs2TEZhdmlmSklwbDBFaXp6UzNEV21UUVFDVkdTSU5ncWMwdHlGKzg3SkxvS3lrYk9Od0pybGEyYk5RRDN1ajI1Y2NBVHQ3S1Nra0Q2QXRxd3Q3OTBmOFlLdW9rWlNqYmdhTGF2N1FCWnJiSkhveE9CUSt0d3pTRVp1akVYcHZhUThNbWI3dXQwTEMyckp2dmpiSW1LZmNHaTNEazJCWWgxaXUrWFJ3SGV1aHJacEhVOUlzVGtlUmZlcFdmS29ORUx4T0loR1Q4cldDNDNVZ0hMOXJGMllpcENSR0tqamFTSTlBc3BtZlc5SDY5UHAxTEswSHJRVDBwQ2RsQmwyZHByV3hyaE12Y2gwTUFCd0pocGRKelBWc1NCVXgvTFJaTVZhSmtzMGhReFZMOFVFdUZDcmx3NkdRajhHNnpjMjJLV1RST3J4S3FDV3o5dVAzSHZiQ280QTA2NFJpY1NVdEduelpOYjN4L0xzdCs2Wk5ja3FEMWJwb2xnMXp4TkhzcW4rK3dmWnd3Q2VzZDA3aS8xYkRNSzUxRnJrSFJXelJTQi9aS3B1T1dMREc2TTdwRVdoaFRrYXNGYXRoZFpFU1Nnck1xVExoWTArUmlkT0FzZHNLcmp2MHhVZkNPdUJYRFUrd0lVeDREUTFITHdoaTllRkhFNUJ6UGlyVVVYUDV1ZTc2VGlCUHBMbWRvQm1qb2g0STd5MkpnZWRxVERTSDBQbFo1ZzdWZzdsR3o4RHVybkl5bXFsVkQyRndPNFRNQVlGU0pJZDI2WExUNUpqUFpsZHNjWktKY0JaVWp5VXRQZTkrVlVKQTNzVGo0K3Fwa0srTkUweThmSEM2Y2o5SEpIOVhCRDROMXdmTzE2MEtQR2cvQ0hGNElvNFlaVEdXMUdhVll3WEJJR2kzaHR1Y1h0VzBEUlhRWFM4d3l1Q1pFMitVZi9XTVl0ckt6Z0kvZEtVRzBtMXZ4cVQ3ZTAxc09mTGdvODlmRVljUDZRR1hkb21OWHF5SHJqdzA5RjRUUk9KY0J5ZUx3dnF4TlZISml1dUMrV09mSURTTENVY3JLc1ZuSi91NnpSdHFHNjVPcy9obkNwVDBWYno0cGRMQllIMlVJby8yalhJYnFjM0dnOWhlaHV4VjF2ZGNtTlBJeUVxWVYxT0kxVjRrQTRhYjRUbWdWNUtPR3N1Uy9mNXh4dHl4NVQwQzQ1Q3AydGJXbkRENEZ3cDU4YjRTR1o1UEVuMHNFemlKYi9CT3VjNzFaQ3cveExzWjU1VGlRWDFRRmNjK0lBSFlwempWaDBNZzA1NFRLVzgwaHEveGZIVENPaFRGTTBhYUJibWRnTTB4OWU0bVk5UXR0Nk5aaVQxRGVIaXEzT09lbGJsc3BSY3JPSnl6Z3pEajlPbjZ1WXNWZTVpUndxZW16RjdTYmJodHpEbzlieG5iQUVueHJobERzSUJXZ3BQbUF1WU5wY1Q4bDNneGRtQ3IrRnNQVWZJZVVZZHV2MlBYcWZxNE5FdU9iZEVWMytQeEpFWTQxNWdSMHYyYXhOSWlqZjl2OTJ4Q0FWV2tPcjdGZDUvWW04b3ptZ2pSblJ3RVF0bkVYY2EzdnRnWlQybXI3MzI2bU5EYlkyZS9vaVlvOFp2dU8zOHIxMjFra3laVWwzbWxsNVVGOXhKN1hhNmNrWFJoK0tyYUZUZ0svN0crVnZvSHA0cE9lcUhFSG56dnpTN3ZkcnBWSHNuY1ptQVlINU5CYzlCT2JJRis2QW1aY2hZUjN4NHRndW5RRzMveTFrc24wOXIyaU9idGJqSjdWTGhWTUIrdEV4WlRmRE9IbFhKVHNDYVJhbnUwUzhvQ3Y4ZUFqeFcxeE80K21ndDVMajBWSHp1QTBqazJrM0hmVFpud1dnSEFQbVYweFlaK2p6K2ZqTWtJbFBHOWFmMkxqdm1OOVJFZjlLNWRwZ2V2S3ZpNUJRWUpIS2JWaWZRYTBjRHVRaDRML1N5QTZjTU9rNGZleUhNYktBeFdsb2ZxTEU0aVpCTW5HL3h4RWVnVFppRUw2Zm9zMkVNQTliSkFYT25WdWRLaHR0RWxsNlkzb0x1Y0V4eVpZQ3VyVXVqQ3VmL2crSUxiQWlpdkkwVWVSbTZvSDJUcnVBRm1paXFOMVV1Wml5KzhmTUd5Mi9vRi9vYVJSOGtiK01ORWZ6UVFVbmZTWG9JQkh0Ylh6UXRXR1BVZzFPTCtXVVY2UTBTN0RSK1pkdXBTYUNkQVowWG52Y1ErYWM1alBKYWE2UzI5d244U2M4TmwrakJJTHQwRk5hSG41MHROL2lDRFpxcVgxVk5lWjViVjdySDR0WEtNN2FHTjJScThvaXJiVTdvMzdNTmpDdlQxenlRZXpRU1ZDTlFGOXo1a08wdXZNd3lCaWJTVGVMVHlVeEVJdFJmamI5dll3eHJIZ3ZrK0gyWnhDN0F5dVFYMlJ1TllqWXVtYjJLbTM2TUpCaXFOTGxkZTNGMDNYMjQ5anovdHE0UlJEazNIbmh6dkpOUHNJMitPSDgrbnVuMjRBQ3lQTWVEN2c4UzBUbmIrbVdPK2xHaC9wR3ZiTmI1aWdxcVA0Z1Z2SGdKSFRFSGpSZzM5QmxPS3AyTGthUlpLaHhmUU1WRkY5Q1pTNTM2aVhicFRibCtFOFdzZFlQZ1ZkQjdkZkw3cGwycEhucVFHd1hxeCtQZzllYU1hcFBKMncxcFA0c3NlRHE5RjFPVHZ1QnN6Smdya0RFUHRQQytjUGloYVNGRnVSUDBKaENIQkoxeEZrZHVaSHZGd2x4NC9ndllPa3djSU13NjliL0FZRDZlRnhkN1F4NDRTVUJVOVVnT0JCTUV1d2ZKcG9kS1NsU2JoOGNCQVBKZ0R6RWYyYjBqcldVd3B5cW1ubWg2UVZXM05TOUI2WE9QdldLUXhRc09ZMll1cHNwdjI2ekwvRE4vM3JxNzJ6Wjl1VVhHSGlwMHM5ZnlqN2VZSm8zZ0htSGs1OTQ0Q25WaEJuWHRIWFYreUttQ1RYQmxJQlZqUWVaelhzTlRwQnFsQlMwMTI3a2YyTHFlT2VTYmxyaHJLMHExUzRBNHFEWlgvMXNrR0tkWDNiRCtsamtNUGt1SVUwNVVobTlyaHRQSGdtTmdFeGtocmlIOHd2UkFzOGFzOGFlQWdESU1VM2dYWGxnemFJeXNLamRJbXFOTUFUdUIrZWNsWUdqam5DWCtLTmVrK2V5VUpvallUN0p4ZVVoMDUxMjh0Q1IyQnVRK0h5bThVaW5SZ3A4V2hBSDZsaEVJTm9FUjFpbStIeUIza3dPMkdnNklwRXZ2RHBhL24rRCtuM1M0SXdURUIzdFNxWXVWUmNadFdiY1ZpbytHakxjNnVIb1hTRTEvbDBSekFlUnplOWNlZml3c1BWSUUwV2RvUjExSnltWERudlFqM0R0QVNrQ2E1QjQ1RklrUUQ3NHBHRjJGMU9HOUxValdTS2I1ZG10cE1uNU5CWE9jMDVKSSthS1dLMHpHTHBsVXVJR0hlQUJUellFMC9VQmFyV1pPWjJJTWs0OVM0aUkrZmtjQW1zTE5DVXMvQ2RRSWxvblIvdmlKYkRqM2oyQUJRR3ZURk10YzF5MytNa096RUtJNy9vTG93MHp6VTV1Y3ppVnoxOVdvMVpETXBRUjNFM0tXQmpGZUlpWUFyQk00V1hXWVpPOEUrc3U0NXBKUXdRc3NjcFlNdjBRenk3U1FVeHdFdzlhcHZyMTV4RXFwem5PbTFRY3FHcXB0dVdBRUFodDhzRnZQL04yblVNM0tpSC9VMFJ4OHhPaTA2a0ZMbURLcnppN3pOVndyOEtaUEQ4K2lsVlZ1Zm5OL3NWUzdsVkVJeUNJOTBxL0xEVmNOZHpCdU4xNitDRnB2blBjNllCTk45KzdWcWREd3ZWZ2dFWnk2ZmZSU2t1VWZhcUhYZ3FJWWVYQUNTZHVKWmJMRkRrSDRoNi9iL1NNUDJmaTFIM2h5eXYwVk1jWHBzcXRDanVlQy9qcTlGTmdyYmJLSXFIK255c3NwclJwNkRlaDdnRktGOXVodUFveWdqVWg0ZkhMQnBndTJvMjl2SWZIUTV1OEV0YWRWTVVveWMrNGFia1hiTmNwaFBOY05SeWk2RVZqMjZYUStEZmY3OFI0Nm1QREpubWFRSVk5UVZyQVZqS0xaR21RVDRHR3RGY1MvMnhqS05ocGU4Qmg5QVpBdHV3d1dTTnJIUEZhdHFHLzV5K3JkWXFvekhzcVo5enFkbTJXN0tIaDV0eUpneE1waEI4MDd5MXEveWNyZVhDSVNieGdLbEphbkxGUVc4UzlqLzdUS3pRekRLR21uVHpuYUFYMDFGdW9GMGhjVGZ1YTRsRnIrTDlQQkdneVVFNGdSblF3M3RJeTcwQUVoRHpkVndWSWR0d082RUN6ZXBySlIrcmlZeEg2VTdOY3h5OThzMFJWRWdpanl4T1oveDJhVTlxaE0yMENHWUtTK25rbXkvUVV3Wng2bjFwMVJ6L2pnRzZ2WTlsTk5rMGlGR212RTB6MU56NVI0amRZVUhrT3dEdHhHMEMvQWNnL085aUVkci9qQXJjMTc0UUhqdHFYeVp6YkR5bjlQVnlDbENWYWNtVjdISitUdzdiL0s3cDdHcGxHR28xbnFzNEhzQjN6TndKTW53NUhFRkUyV2lwczdiVFVCQ1R0TGJvVjZZL0xUS0ZrY3dZNU0xeDEvR0lFbU5SS2pVQVVnVTRZYStzeUxQN2RpL0ExcUpCSFMwNlZRMVQ2aW82dzVyQWY3VVVZWFBzWjFOQ3VMdGxLazlqR1ZCNXhpRTlCNGwrL0g5dDRVVG1YWHNlQ1BxRVoveXZ1dVhYYnBndjM0MWZndUxVTDVCeXdwUytrMkVyaVVZenUzb0NZNUV2WXNXZDhqMVlrVXNNWXF3TGs4eDZMbG1VRGxiWnN1Q1d5NWhmbkE1TmhWNDFRMnRNdlk4d1ExNHZDV2VoaEVNaDlzYWxWWUsrVjZwQUlzdUF3Nmd2YTRKdll1N3hMdFFFaTB3OGpnMDAvREVMZVFWeDV1T2p6cGhFWUE3S1BNV3Bjak5VU0lBUWVJWWpEY29MNTFndFVOZFJtNlVIMWNTOFVKSmZhVmZwOSttVE9GTUVyeldQWFZNdC85MVpwSzM3U1JneXdMc3VoeUtMbk5YendGb1llemZMc3BnQmwyZ3A1L0dZNWRLenN5U2VvNzRzQVNXbDlMS2RyT2M5UExGUmMyaklNTXJtR3gzNjFvV2ZYYW9jdnkxajVWQ25OR2o1dDkrZDBPd3E0SVB4dHhpVlE2U1k3Slg1dUhvVUdodzRLZGR5WGt6dU1hbCtlZHk3V1hmN2w2TGtubis2cDZ6MCtic0pkM3ZzcHNjV3dXUEZpVGMvcU45Z2U1U1FVdDBKeVBLdjErS2NDbHQ4dEozU243MytpcmRNT2lhaGM0UUN4Y3ZDN0ZFZGlQVU1LWGFWVzdJNStLNmI4eGtFL2l0bk1GSDBzZ0loSzRQYXZ2dmFtbDFkTlNMTUNndTZ5R0lNVG5wNW9vNkQwS3I2Z3BVMlUwenA0ODVzWCtrK0Y4QklrMy9wczZCUFJ0YW9ZVGVUQVR2ZlR5RXRsOGxGbGFXUTNzdm5vY2l3MElBVzhQV2FjT0lUejRuUmhucDBhSlI0V1duNVR0MitwaXZXMUZ5OE5sNWNSTElSalFMNWtVOW1ha056Wk9BYjJRUDl0UVRZaWpvMzBid1VDczdXWWo3NXdLUmVFY1BYWW90YjY5QjBUQWtSVEt3bloyazZ2UWRiKzJmZzJHZVJqMjBvU203eXllNy8vRVp1YTVodDRjc3Q0UG8xMUxtb1MxYm5RaVM1VU96Q2NoSDJYandMcklIbHI3YldBeTcwMW1qcE1xZ1JZOXVzcURSUGJSZjF5WVB1RkFHOCtDSzlmUjUzTkNIUVRpMWt4OFhHL1JXSGdxRVZXOGUyQ2ZGY3ViRngySWRHM2FVejgxK1U3dHM3VGpVVUhESWx1TW1HNkxhb1FaN1ZhYlFGUlkwVXFDK0ZINVpmWjNYM1AyM2lSUHFMdnYwTDhxUmMrM0JRVE52eXlXRmh0c2FQazMvTlJzQkFaZjRLS1pwbGZKc2c4R3FKdlMzemw5VStDVXo1QVY5ejdNNzhvemF1dFlTcGlFS0dlMlJ4SEV3b1pGS1lrRkVsak1OMHQ3NWxpNFFqYUg5Nk53T2NEa25rVjduU0kwaGxhNEpDK1dLL2ZmcjY1ait2UmdQSkxRbWxQTytrSzBxVHR0cVNCUTM5L2V0TzhNckhPTFlCeGgxT1JPdmZobzhOMVFYNllnOUtkVERVQlFkSldmcmhNMGYzdjhhaGQ5NDFCdWlZT2tuZVdTN0Jici9CZktXSXlZdnBKaEk0VXJnNVhHaVR5Y0VJZzMvbWNCSUt0RDlxbEx1Uko4UGlSQnYzN1I5ZnJOREt1bkR5YXpLVnhaUW9JMmZxeElCRFg2Zk4vVG01T2FyeElnY1NFWGpVVFZjU3dqNWs2MThLQ2dYM3R3Und2eUtFK05ucW1TRnZTNHZVdC9Vemlnc2Z4QkhxQVovenAyZ1hTUllyRDMwTTYxTUdLeklWM1YxZDgxN0h2YVlyVEVCb21TTVoybHp3M2llWlVyZVVmSmsxdG9iZENEK3pubG9ZNFJJaVJ5Z1dVQUVKbkJGMVdVRm5QbnJEYzY1eUV1K0R3cUZpS2ovSk8zZXBMUWd0ZzZzVFpKamgxclMwRGN6TllYcy91Mks0aDVCdkN3eDJ4OEZWbEtjcEF6SXFKSzVUR2d1R2Q5TVFIZlBIWGdhVDYvY2xVZ29JN2JiNHJLUFA5NERKL0tPK01oaS9ySlQ3SnhNMTZGNWRobzBwTHZadkxHUkdaSGtRRVB2OU4yWTVxTVdtYkR0UW1YYmFlMFVqd1ozT2Riak0yakZadTdnRHpISTVPaGxSd1lTT2VZZXpLUXdrd3IzTEhpN2xVQlhUMlp4VUN4ZmxNN3NxSzVPTjZQSGdFTnZLNVNLbkE1K0U1WktEVDBXUlpFMjA0RmJXTnBYYnNTMGNublJMV0ZsRmZkek5BTk1VQzVrSDJSRWRTaHhEMWpXTTI0ODRJS2RoVndIUFV2a2QxT1QyTGlKQldYaFpmUVRSZHlaM1BmUEZmRWxlK21sU3VpUTRFZVQ3SElEdzhTNmxhSm0yZTcwc2psMjNhYUlobk9NbU1OemJubVpyRzNMVXpsWUtlbHpySUtVN3l2QW9xbTFuYzVuSStyR0NsejVRakF0aFhucmtqbEN5NGkxZnR4SFVQMjU1bE1lbFF5Yk8vZEhtam94USs5YTNaZGpSQzI4ZGxNOGZDTmpLVmJCOHU0dlRwTy82ektqb2tVYTNCdkxwdktTMStNN2dnU3R3YURHZXRGcG9LUnRPMDhnYVBkQTZXME54K1RIaUhCT2FPbzd6V0E2c1d5d1YreVRTbi9PUU5ReGM5N1p4a2RDanYyTDJTVjUzYmlEMnhPZDhoU0FDQ0o0ZUlWZnJkK2k5d2JLcGcxNHJZdFZHcFZmdW9SdDBGek84QmdBQkZ3QnRlRVl1ZUJRQWF2OUJFaFJzLzJ3aGhQSG5kWGxxSzRlOFp3emFnY3pNdzRVUVVXb3o5MklxaFQwbjhCalBQTWFrMExjS2lYUjV5Vkw4SUZtVi95Rkx2SHlvSlBSZjdlSmJEV1FEc3oxMVdxQ25ZdkJEUUhIRmQ4WUlITmFXeWhtbzl3UkFGNjRRWHpxdkwvZzM0cGxnZlpqOUZkYWI4YW5UMkdicEZSVmtuUnljVzZFMFdQVlpoL2MyZS9hRjVrSzUyVzgrWlQ2UWNOWGtFTnBNcDJzYTJ3a1lDYzF0dDhpSFhEMldnOXF1RTRHcTZucmlId0ZFeE5STlVXREtiamc5N29lSk9RNHVXcmwvN3ZPaGNTOXRIQS9RMEljaXZjTTBrNXBSaWxaUG5JWkRld1JsNzRTZ1NMc3dkMDFUQWU5bFhnVFBncGFOWjdpampKdkg4c3ljVEYxQngrOVVmZ1k3Z2hPS0svSnplMDU0NFppalorZ3BmSGNtUkJBdE5hZW9jNXNFT1ZNeHV4SWI5WGx5bUVwQXVQNXdZZjFkV21oRG9SblpyRUNEaSs5U3ArR0R6cHFxYVkzMGgrZUVSRWNjY1Z4SFVSWXRhcUs3MHFtQktNbUEzVDRDVUF6WndvMXJaeGZHekprdXlkNXAzV09yTndHVnA4bE1rUVVpQWQ4R1hhTTRpbGRKa1J4VVB0TVQrSU5mWXJjL2c5WWV4S21IY09Ic0FTQ1RIUE8rcGVMbnc1N0Y0WVd3TjZVZ1FaMWhNVnlmY0FwL3pnUVBiSEJrY0hoV3AweVhtNEhNdTJmYkJ5VmQzak9HMUgvZU41QVdNYjFacDA5ZjI3aHZINTU3Uy9YdnF4eWdWWnF3RGRKMlV0Ymk4TFYwMXZKRHVnWGt6OUQva2FYWmtYeEtxOVBDa3ZlWkZlOThVVjJPeGNxUmYva1VMbkpLODMrMEpOSlVBTkZWck9Wb3k5QTl6VjEzVXErbjNSTWtFZ2VhWEUreC9MRDB4WXZvVUQ5VVpuM1dIbFhjaWJwVkdzZWdtdVZyRzZvOUd2cjlNNDE3WG5tYWxaTFExWVpZL1JiV1h1OHhjRlRNR3ZDNktRVk1peXhLVDF2Q1ZDRHlqL1JCSTBMS0xEVjM0Y3gxamRiUTRkMFZYcjhJLzVRaUhUakVlNE82ZDVCZkV3MHVLQzVTQ2tDRmtoM2xyQjI4ako3K3VUT2N6ZUZXblR0MjJVSGYrcEhBS2xicm1YaUhEUTBCa1pLYUZlWDkwVXhnVFRFVU1FMFVNbTNxSzBCUDdjZENTVUtIUTl4bWdoZG1xamlIcDFlZFV3K0hrYjJueVpCL1dNUzdTaW8xUFNzZ21HaWU2S2Y5M2V4ZDhtdnhTckJEOWl4ektZK0tiTUNVRFFQMVMvdXdhT0pubWYxZGNESkFESDlrVGE1WHhpa2JZY1hvcUpEbGYyUE1CUG1ub0ZXaEcwa2VpbmVkMkxiNHNnbFBtZEF4eE9tS2pqUDVVTkN2T0xiQWVMLzFKYk0xMlpZeTF0OGxCZGNMSlZSeWIxeW5yQUlDSTdnNGFYTHQ3QWR2Z1MzOG8wMmg2d3p6WnV2Ylg4d0ZYY210UnRQa3VGNTdQR2F1QmlaOUgyUEJxUjI4eEJSamF3aWsyQkYwU1dEdUhodDFRMVJoZXFRNnJHM3FvMkIwN0lFaEdMQ3NmeFR2Y01VbStNRFlkOE5BK1ZJOUc0M0VuZlh5Vi8yUE03R0JtZU9FYWMwN3dhN1p4WHRuTWdzOU9MTXNhWUk0Qzd6ZTBCUzFucXRRSWZRS2VYbE11dUpJNVdJRGxDaVJuZGNjSktpVkhISWJEWVlocTJOdHZJQUJLV0hJVCtPL2YrRGNkaklMREh3bW1mM3lIUmJsR0pscThVNUNWald3ZWkrMWJCbm91M3NQVWU2R25XOW52ZVpoaWRFVE1BT1ZwTllMYlUwZWMrOHpKdnNFUWdoTDlvMmVhaEtacmc3amJSaExvMnFQeWUxaklUZUZEVGUxQUgvQlZMYlliY0I3a3BUbVh1bmdEclRIVHI2djluNXdyZk5OSjlmOEZHWmJsYVZKRG5XTExxSklRTnZzRzRSL3M3WTd4bk9ZOVg0UXpkUmRzZ1JhS3JBVHY3TnZYZWFIYnJKS1FGUFRHUHBzcU8rTTZvU3R5WUFWWVNEemhkczd2dElyckJGNTh6V1o0WmVQR20xTTcxT3ZVeFdBR011OXVqaG1jdmNXa1FtbFhqZmVBQW90TmwvOGdYNUdQT2h5SmN6dlMvc0J5QU9MaWJRTlVObHpjNExraCtoN3NYck9WWm12bGlaU2hEMFF6UGNKU0NDRmN5M29scklqQWU0QkRadHlrM1hLOWlPelFxYzk3bmNqYzB4SXJkYzUrN2tKZElDd0wwcThRNnNveFpScDhaOTREbEEwTkFBdS9waCtJT3dkYUg0WVlmUFJSYVBTN2V0QTRxdjBhSGNTWUtRVkpsZExrRDBmRS8yV0ZpZUd3T0pPcHNwNWRZRGlGZE5oQ0pnMERUdC9Bc1p2NkZTNlUyTGN0SWJmTnBCU0xhanJ0c0JpUTFtUEhlYnplTlg1TjEwTEVSTnJSd2VSOU5FQk55aWlTckJ3QjBvaVRFM3QrZ1MrcHZ4a0FwczI5M3pYTmNpSGJMWlRhcFRldURXdldmcUhzYlVGL21wQVl5WlVhV3NkdFhQbk53Zy84aFJIL2ZkNTN4WDV6Z2pWK3ZwbVpQYk5pSjJJYWk2dU1jRlMxQXhTLzFBd2h5cW5TWUVKZVFrV1JGb0FUNEJENHN6WU1VS1lCU04xbDlZVjYxcVoyVXlvQlJHemtBa3o0aDdIWHZQdm0zNTdoNDRUTEpnY2toM2ZTVGc5S25PUExNSm5XV1diQUoxODREcThKRTQzQlNndmp6NElJVFlmQ1U2Rmg4QytVVGlzbFhLVXdHUE5CcDgzSzVzZmRRZEpEMXAwbUp1SVBIUnBwQm9TZTNJcm9acUhBbWxFREdOSVBFTm55NjFQV01HZUs2U2dQL2tHbUtXcWE4RzI0eEx2VG52eFZTeEhtQmFXWDVNUzZSMTc5ZTFiN1dLMm13VTNEcGZMMzgwNGZ5amNxT1FhVXBReUFjS0xqTUwyaDlWeHJxVG5LdUp6WXdNRlU5YXJqNlZyV1ZjSHVQV0VUUTlkaEg1bU0yMFkzMUM1N29kQVhuNm4raHo5NUw3V2cvd3dzNzE2OUpXZDJ3QzNlSHdPeGtTamI5b3hMQ2swMHBTTCtLOVF4V0tuQkkzazZJN2g0VGpEN1dTb1JDQzc4R2pTdmQ3aXZTbTQ0bkhjMXpDMFp4MFpjSEc3ekQvNGFxQ21KaW5aa3liRTlvNlVHRFR4VlF3cGRTcWtEL1F6SW5lVlV5dXB5c1JLNWVKRVdBdGFtOXY5MUg4NDk0bFIwT0hNU2xOSE5QcUpoTGs2ZEVuMVhUWjJYRU1PaUdEZng3eVpLN1hBZ3Ntelg2K1JBSFFuMUxKQUsrYkQ4NVlCdVI1Q1ZpdWYzRml3Z3RoZ0RyMTZ1ME5ZUFRGNVN5dkVXY2p3Rlp1c2ltNEc2TllERVhUd2ZQQjRrL1RFdkpBWTN5M2l1d0djOXk0VjJOdExRbUlSVC9qNk01WDlYWkc3M3ErM2t3ZHVoazVlK3ZGc1NReUsvcVRobDVkVk9DWi95em55TEpUQUt3RWhRdWdVTWVCc1NBVmNEbU04aG1JRkoraFEvdVdRc0gvZEJIT3hHVGlRcWpYZytSNEwwdmZYYkRuR0JLZFM2UlU0Ly9KMjM4dFR4NTBxa0grU08wMmtRUUs1T3ZhcUNzNTBXVy80WjdrSEtTVERMYU9xeXVEaGVPL2FBWm5JZktUQ1M4VzhFVWpDUUc3OW1INFhzY0JzRlNsbWl2ZExwalVFaEhxWC9CSHRNK2FXdzhwbEZGRE9wdmtSU1BWaUREVlZleDV6aXJnakRIRUt6ZDZjb3JHdmhBQTl3VjFkVEcwRlE5NFJheFZNZFJiSm1LeGlpRy95cnd6THdYWkVVZlkwVWJiWkovaU1jeW5ucFRZNWpkSUsyeVpscWtOaWhtS2N3L0w2MkJvWHFYbHFQUFdmVHJTd0lRaHE0Wmk4eVM0bGxDM1NjSGorQVhxSzZEeVBQQzlRR1ROOTlFSXp4dGdpSkNOZkt1NUppQkVWMnoyYkhMQTFVVVlabkVaRzhKYjFEZjlUclFOaEV2aUIzUlVRcmVFYXJmazJUdFNBZ1RGVU5pL2NNRjQyVzMraUU5ZVQ3Z3o4Wnpmbk9IMjJLSlBxUjFuOHFCb1dFQThUT0dweGFZOGFvcmV1Z2YxcHhNL2hVNURuMnNlZzNCLzZTTGx2RUlUMnJocy9kbmJhdElYdC9ibmwvSWRTVUZFeWd4MUV1bnJGZ01XcWQrRS9BT1A5VUc4VEQ3N092UnRMUHVMaWthaGFZVFJ1djhUb2dKaGlBa204N2pILzA5VnFUS2lsSW1RVHFub2NTZUVMV1pLSkZEbEt5UHFzNXJMY1pOTmZhRjJQS0hpTWIvUGx0Zi95V3UySUJtbUUzUUdsVXhTU1NTQkdWdkt2Q0EyNGFmNUcwemE2Ump3RTdaOEVqWk85OUQ2TEkwKzBBYnlxMjFsdktrYVh6b3RCUnVtdURDUUU2WWlNUXprVmwxakE0c2F5eldGQWJ3aWNiY0lMM0RmRzU5NHo2eUViQjBXcFZZZ0xlbGJ1QWIrOWRGNlRpT1h2enp2RnZoOEZVSlR0azI4QWtzZlIwaGZuMlp6Vm5KT0xHbUdOejAwZHV6Z25wR1RXeFZDQ2JwS3JaeC9RcHJzS1NMOGRMVlhnT3RsK0lXWDlmR3V0NVlnR1diSWc2Nlpyc2pDS3dHVEhreE44QVdiaUpjblIzNTRuOWlqRjJkMUF2cGVpeUM0R0NRRlA5S0VYWHlPVng5bVV3VHY3dTY5RWVsa0pzQ21wNGVXWmg3cVZZeU1OaDlKVnlYWEtWMjJUdnNqbkx3NkFJcGd3eC9kZEFONUM3L1dpTCtZRkhkMHR6TFhNbHF2MlRiSXIxU0k3VFVROURTdHI5M2dHWDZVSWpzalN6L29jY2Q5QXluamxmVUk3TzZTNTFsd2xaV3hVcGlqZ1FER1ZzRktYK2VIZWYvUDR2VE5NY1oxQXkvQnVRRmpzY3hhVjNYQkhTbkdhQ2VLaGlpcDh0UnFBcUpGYytYYkZCWmozSnQvN1NYcDVkd3FyaXg5U2QyVVZKL0FvT2ZwY3djY1g1WGVZcm5oVlRQbFBZZUxIS2ovRlVUOXplTzZGSUthaHdJdFNRS2RXRmhMU2NLWVBxbERnaDhUcHpERkxGWVg0cFo2dFpUVU96TjFTWXI4MDB0ZEZLTDVKU2pJOEtueGhSTjRsLzM5SGNPdHhYc3ErV2EyQ0w4eS9Xb1gzUSsxSStldjZxWEsrYnZmaGhUVzFmM1hIcWE2ejBGWDBJRTRTK0FWa1BYSlYxWVg2VFpuVlppa0JGMFZTVWJGTEhVbUxtYTBOZmxqU1lWUW9PUkw0NHdDV0hKY0YzNHN6Tkp1RnZvc013bGMva01hQmtaU3EyWkJzWHhERFExcndsbmJUTFliaWZiaVpUOVcwcHJ5ckNrRFovSWFqS2JhUVlHZkpqZjdiSk91WWR1VW9aeEZOVE80Qk5pdFlkRzJPREc0bEduWWROVmFPV1lCWjJMek5McTEvOUN6MFVXYlFpYlRXcE9JUGcyZkQzREVwMFN3ZEkveWdBUy9SZGltYWgxbG5tZ0ZKRzcybnova0ErQkdHeVJrRzN3aS9HL2NFcHQyMGNYZ3NXaTBPMmVIMDdmWlc4eThHU09rZkJ6QTJaRTJENTE5VmZYOVJQYzRYNTA3cm03VUlaNG9xa2FUTVd0U21WVXJja3VuMC8yc1JCMUVFbk5DckdqU2d2K2tvei8waUFTWVRMcmxvdGpJbmlkSTk0amUvS0lsY1lpMUMrQlZOWjUvUXVwNjNnQ1JFWFBSZzd2UGxhV2Z2WDl0TklvWFVSY1Erb1lzbmdOdVEybWRpZXQwUmp5enloVWtuNUlSYWZHU0hNelE1NmEyMUNYZ1BmYzByT21pOC8zNnFGbC9uaUlmV0NPR3N5YSt4UHRtL0FQTFo2UG1qVkduOFBibzRFQVNmSGFtM3BjM1FsSDZXMDQ2WE9jSGFDNUJSb09ONEhyWkx6UENkKzFrNEx5T0FyZy9LY3paWG1yMGFQWldkU3U5WklRQit6RXREZVFFSHc1eVVzd3lsVmRYenZsdEJWYlJ6M3FTWU9sWUxYUUV1cWwwdTVUZzZjMXo0WTVhenZvdzcvWm9TTjYydDRvU21wcXpodXRPMU1rN1ZuZjRGbHBiMWNEbzZOQWhPeUVUNmxZVjFkUVNVVW1QbHRCakJZYStadFFRLzBYOERUNmY1cC9CME0rK0RrY3dBbmo2VVFiZjhyVCtrWG1nR1M0RHlwbDFyQy94UU1JRDRBZWl1enYxREZUMHVUTTNpbXpHSEhTS1JRRWRDekR3aWNYR3lZR3hvQ1ZHVUk4cDU4K0JLbXhCWE55QWdwdG42cGxVc1lSQkV1SnZROUYyeVhQUkt1VXRxQk8zU1Qvek5zSGp2Q0tVQ0VrMHdHT2NIVnpFMGJvd3pxVzNoNHBxTTl2OUZrV0lpRFdMSklsSVNvbmpOcFhkbTIvZmFjd0F3TzNMTjBKc0QwN0NwWFFTSVNqVlkxTitUNHE2dExuSXNxMlVwVkpkZWFST3oyZDRNczU2MDUwZGlHTDRIL2ZwMFMzR3cyaHVTb05NN2lHYmFCbStzRFFiWDIzd0JSN1hIaGlNVWpJbFJyaHRHUzFJRi9wNFgvR0xSZXVQRFVGTklDeVRUOGwyb2FoenNQMWVoaFNsaWlpRG1YeHpWZnkyNkt2ci9kWHFqc0JYamZBWmZCSlVxOEp0dkFJcFcyQlppVlZLVzJWbkVpYXZBc3BBZ0cwcmdYQmNVK0Fjdkt1TmJ4REhQa1IrVWUrQTNhRkh4UGpyUEl0b3pvaFFNbW5vN3NXTCt0aHhQdFEyUDlXYWlYS0dKRHlUUG9LWmwrS0JWam5uNi83d3NBSmVIUWdQUVpQNmtXU3hUNWRxaFJXcDB4aHJvQStoendUdENFZzNaZFdFZi9oU01wc2xMM2VjdzJQQWJDM1J3RGg4bklqdnVUOWNDbXhEcEQvWG14OWhrN3o4eHE4Z1lQWHl3YjRwMDI0M0pISXdVcWs2Z3RZbXozSzRoejNkK0xXdlhYK0tqSWE4VkpXR1g3Q2pvc1dCcGNUdE5kQlJCeFhoMUhRRDdESXljbnI5NjM4NzlzUEhaMTR1WHAvM0VSWnMzZlltVTlqakEwWG9MeGpkOHhCRGJjaDUyek93bGdSTDN2YUtWZ1ZpY3lyMTNSenZWZUtaZ0Jqb1JGRmtOL05RcDFsQ09VTU9EOG1VRUVuQjBWcEx5N3ZlRCsrcDZKU3F5SzMzNHQyeVFJWEhhSHI4MlErZTdiSEh1NUFPVCtNMkd3UWRaUVpVVTZsa0w5d09RYlhPSnUzdEpPeXRLUFh4UWR2ZFB0Nml5bUw1SFkrTDMwNWtESlBYNG51ZUtsa3lLQXZwM201RVRaaklTV1NSdytoTHhHdFRBT0E3VjVGbE9zMnE2MXMrMmZkN2lHTUU5RGhpK1Z3aGFIU0hTZ1hzMXJjOGppQm5udzVkdFlzL0pobENFSy9pbk53cFF5c3M5NEJFQ2pqM09lQkJCblZnYVJUaGI1MHR4YjVDbFJFaDFDU2ZNWVFKMTk2NnlETzhDMkZsQzc4dm5Gb3g0d0hndktEZ3Q4MnhsUVpHbERYRTVsSDZKMVpRVVl2UjAwNUEvNGtWSFh1c3ZoRDNsQ0txUHZEZjJtUWZiUHprR0xRTXh4bVdLOUptNlU3WXpMdzUxY3RFaloxdCs5Q3dVQUsxa3BXZEZxRXZaa0Z2MVpXbm1XVnVMN09FazRDZHFvNm5lemZtN2M5R3VRUms0Ri91aExMSE5jQXhHaFplUVZ5b1VndUxKeElJUzFlVHRSWG1QNTRaV3FrV2JZMWw5RTc2NFRHbGxUK1BTempjTUh4Y3d0Y2JGWHZvYlFhZjNhTnZ2NHd2V0RGMG41U0ZwT1NxZVhRMjNBV3hNRDlSRDU4RUFFak10dzZVOFFLNkcvWG5aZkI5UDBoQWdlQTQ0VXU4QTJlMnNuMmtoSHozUUxmVk9iQXF1UkMrREkzekg2SlNZK2Y4Y3lCbk93ZnZOd2FDTVBaaUhGUTVWR1VvS01hRHk0MU16TWpZdzk1aG1NOEd1M1VVVEFFTXZZNUxxQmtNTkdUa0xHZWhQYTdKcExGMVJMaWd6ZzkwQ0NybGNDMGwwZ0NWd3dSaWU3ZEpaeUhVUXdGak1zUk9aR0xMUVo3eDU1OEJYeFJaUlVyUGNnbUgvcThwVHNWU2dDWU50TUxrMmpWV0p4RVZCNDRMUG41dVZkQ0ExQTlYaWdCSlZrR3BBQk9sd0swbkZGNWZxbUltN1NsSmpFejIrbktEa3pmMlhjVlUvTGlQVEJvZXZ2Q0EzcXV2ZVVDV0NBd1UwQTNYZHY0YVVRQ2oxVVJUaEc0TnNSWGVvNHZYL0sreTZ4RzIwMFJNeUk4VW5GZCt5bEwrY0RtU0xyTHRyL1BKaXN4ZEs2RDFQYXB1d1R0TEJScmdiMkEwZDdHTmhKYkZ5K28xTjcxNVN2Z0hGV0ZNa3U2ZC9oWG41V0RMRzBRZW0zMGVncnhjUGQ0aEJDRXlNYjZaSzh6dDBXRlVZaDNVSnpyaklXWEtoTlJCRTBpZk1MQXhjZE1QQUlIUmlrYlkyeFZ5YnFuNVh2TEp6V1k1N3N0UVA4TzVGOGNET2Z6cjd4NFBoaThjVnp5c1V1b0RmbUs5YWxqYUFUaTg2R0tIb08wZXpFSWt0MWR1V2c4M1p2dzVvV0xmWXIzanFNZms5U2F0bFl6MTIrTnE4WGdYWTRMelVBWWJPNWdkdHdraHdmWnQ2WDU5dTVhSzFZRWVRM1Z4K1ArQU1aNUJtTHFNc2pqQnZZTHVnQVJpTUhCdnI2Y3hnYkdQa3B2OExBVkhDZDVVY0sySE5jSTYvaXprTXVoY2dmR3pDeFNIKzNpZ3dpOHlGMnBoOTJzN2pWYi8ycFc3bFVjTVZyeXEvRkU4bHlUYWxCV0xIWmYrOERNc1hpdVc1cGtYSXRWTzBDTVZnT3g5NldraTBGK0k4M2JXMGJnRDhoR0dBMXRyYVRPcEJnY1g4eGxCVG91QWUzNzVPMStiVDlvTWFURTFZQnB4dHgvQm5EZEk3bTJ4ekI0V1B6Nm54VFZZRmZ0YWM2WE94QllyTFFNNTRNMXVEMU9QRzBpK3lpU0tENkE1cldMcjYwTWtYSGdBQ1Y2WlduMU9FQVF2N1dxRzB3WGl2NzBEMUQrMTk3c01MUS9MNGxUY3dGaTBBRG45NlVnY2ZVR0xGQjVKemlBblZjeEJ2am52OUpGT2pIQVMrbVBxQXBIdGFvblZjcjlqZktGaHlGNkVlYWFIbFVGWU9IVGIyRnpVZjhtN0dwYm1admN0SWRCazQreG9KaUY2NmNhTDdhb2kxNWc4RWlaUXNReG12T3k0V1JXU1NoK3c0djVtS2w1T3BkaXhKNUU3QjJsMnZ1UlY1bHYwVWJ2U0Zkdk12c20xUUJ5WS9pZEI0R29tS3VDVnBFM2VWZXFUT3Z2UE4wWWVPcjhzT0RNQVJvdmhvYng5a2tpdElLdVhWZmpWQXkrdkI4c2xvcWFCanJSMWhnUzdXU1dFZDU3N0lpTThlM2J6bDNmL3hNYnBjZkx3cEpBZ1VQRlZZMTBKMWRSMjZkeHFXRS8yMDNpQm1KSHFtS29tcmhNYzh4Y2kvSFY2NjI3bzlmcG1XcTJTc2F4YmZiTy9MZUs4bWF2enpYaHN3TEh3TnlXMDhhVCsrc3VIcWhRbTI2VVA5WGE3YkVaVktvb0NJS3BsWDY4RUdLOHFhUUZYSFhuMDhzQ3VSMyt4OHE0bjc3RS9yL1FTZ2I0dGJXKy85c2lGWitIQmtQZ29MMkVwaVdpV1Z1UmsxbTUyelQ4R00wS1JHU2JQOXJqODhnd2xlQmRHTG4vV2JOSDVBTUxma2lIczlmYmY1RTZQVDJJcTZXY1hEem1oV2VRNkpNdTlNMG94OHVxMWZtaDVvSTVnSlhuQUtjaFIxclY5dDUxUVNHQjJFcHlJemkydFFwTGhpclRqSVFCSG9ycGExMlBRZHBZdDhGVDM5QTF2eWFOSjN4a2VrM3BEV3g5ZWF0QnFWRDZBZzVscWhXdERBS2N1L09JbU9CRVZHb0laZVlEQmQxSGtsSGFDOG05VWpqbFdDZlFMbXlnTVhkbUVJRjhCZ3ZRbXBkTGd3NlRmelBGOVpWc3ZSaVpzUWhqZG8rRzhqeERnTzF4Ymk5SUg0ZEVWTVhWVG50dzhZQ1J0ZDk1cEduL2RrS0h6NnowZG1PTmJnQzhXdW4yVzlMN3BSeVJMTWc1M2RwU1NNTC9aR0tXMVgwNmJPUFR4SHBOYVVIQWNmK0hSUW1KTHJocUI3QTZ4U25ucHBLNlowQnlEM2QyVzMxWUVPbWtQN3lKVVUrRmczTGpkMlNFbjZKQ3Nmbk1qZzV4Vk0yL0NkcC9Wamc4RWJTa1orNGhqT0Z3dkR0U3pRNzMrU2oyZDR1VDk0cWQ0ME1uRzVDNTI1RnBnd2dlNDBiTGtlY3RmU0t6ZVk1Z1JESEFFWkVzRkVkWkpDYTM3WWJqZnJxSW5wWXNJYzVRNXRvK2NRL2Q0a040OGNrVTExQzBUYjN4MzhtNk5sbE1pUHJjWnhnTE1acmZJMCsyQ0ZiYXMyajUrY0NQS1BEMHZabDVld2RTMnVIUFkyM24xRFg2QzltZDlsaWFmVkh0eWp0Z3JsQVpYcTNnZ3BIY1AxZCs2NDZZSFpJQWJSSGdqNzVwYXNUYzVaY1pPWEliQkdiWit0T1VlL3EyU0svYmx2aVdjaEVjbG9kU2RYZUVsQmt3a1B2MFdTbHVMM3hwTGhXVFFuZ1VyVGVMUTRqNTRDMm41cytPQ05MN2JTNVNKbVNoZzFIUzFqenZXSEtRaTVqMnlndVI5QlE2RTRMSzd1eGNyZnF2RSthT3J3S0gyMWhNTkJCWFlXdXhMbElsSDhLU3QwbEd0akowQ0IrUForcko2UklDa3RDeU5YcVREME82UkhyOWFiclBwS285K0Qzbk1tTk03aXYvQmoySkdsbGNtcVZGQmZraDFudzlNUTZRS2l3dkdYWnl5YTZ6WVNMczZxelc4VGVnc0lMcTNTYUUzNmxBdXdzR29CamFmdFg1Q1Y0QTNJVVdGdGwvTTE1STVLK3lpMVJUYS9jaHBMVUdDMExtSk1sZ2pCK3BQaGhLbS9GblRtaTRMOS84NERnL1RsRGFvMitIeE1SSzF2K3pCaDdhdnk4STFXN1ZmdmczM01FNThwOHZTeE9nRER2RmY5cHl6NFRueUUyNkcvdEU2RDlDTWZKSmRKMDhleDQyajBTbHlNMXdQbWRxWG4wOUZvVmxSdmpOZFRIMUFDSjg5ZEw5NFhxRXN3d1lZZE54Z0pKREEwV3BjblNkNTFpSWY3SlA0bFNOeU1PVEx6dlYwZWtyek5XdE1WbWVJS3JTZlBSMVUwVnBzSVdMV3RPK0NhM2hmaXBmUGxJcTRka0tTcll2clFmV3VJTzFUdVdCNWRRRDRTeFhHam91SDFNRVA2dGwxNEpMWDloUFpYOTROWXp3OEE1TzZrTkpiUEZCOGVQbkpSbW1tSXYyeUhkc2x1MFdTOFh4emVqZlVQbEVjVkFTNFRSSys5QWlRTUkrVHFSYmhsNno5MHZtK2FmVzNPbWhjdFlVQldCQW95SzB3eVF4THVNdjZZRnJIRW5ZeWZLZk9UVVowZnFEOTQxcHphMGxoc1kvVE11RndoRWtzU095SitYK0J6VWpLZDFNRWExSVA5RnRYaGtEckJmRHlGMDhvaFR3VjBUQmYzR2RrUWQ0Um10OWwxY3NMU2hpOWdwQ29BRTZDcGVPbUtIV0loNlllNm5qYlBUaC9STGFEYituL2RmQllkUDJsRzlaVVhQeUpQK1dUMCthVzFQYVJ6MXpZQWNWUExtaitnU0VZaFNvQldhNy9heE41RDg5bldRWXN6d1VXenljSzdld1FEK0FoSEJQZEtOeVExRFFZdlVNaWVwRDcwcFBMY1R5NlYrSnBLai9xcWxSenVlRS84b09EMjhQNmRZR3pkTkthYXBweWRNTzBSNURyY1RFVFBHQ0M2aERCTk1kZ3FzeDd0Y0hzRUhlc0QwblA0WDFIajJhaWkzb0l1R01oemxNVWNQQ1Z3RVB2ZDNWL3hjalYxRnM0aW13Z3l5RVUwcE94SWthSDd0UmFnQWJNSjZyNkxRWUYxcS9tQnZyWFhoVEczUytYdk1PVnl2elhXWittRXdNZ1RZRDJRbWhpYjF3MktmNnpuVEV5UFg5dTF6dHFsMDBWNGp3ZjhNaEIwdHc3b3BoQldWWTJBcTlnNGFyYXlFNXJLQWY3cE1QMFdkYkZSWDA1UXorNjN6SUIzMldQRDVXRVBCR2k1TVNjbWZIUjZlTFd1RTFMQ2ZnR1I0Zi9YZGFBcmZ0cXcxSWFGWkFEdy9tWkwxU29zbWFZNFYxZDdtdmhCdE1RZCtuMVducnJRQzZxdW81SXhuY3pGRVZlbTJCckdTemlGV3ZhNmhtOEg1QjUwaWpraEdBUVNBTmN3cms4VHZWWWhJZmhueExyenIzNGlMVmxodFFnVENyekZzeFhUUzBrY2JseWNqM1Znd0djVHpwYUZUOTNGY3ljelI4MmZiZi9pRERSQzZxL3JqZDNDbmkxemRmbE8ya29OelNlQXA3aHlZczR3R1pkc0d4cUhmdEtPSkQ5SHRJQlphS2ZnMkp2TmxOcjNZTE5Kalh2WHMwMG12ejVzRkF2OUZjT2xlcGdEa0xSdlZCKy96cnp0WGJybFJuV1oxcUF2YUY1QmVPUUJBeEk5Z3RzWmVhUDFSc0doQVJXMkNGWnpzeG4yLy9rTGdvVG91cEFRRUFWZFpBUjdRTVpKUGVEcGVLazNFOW5TOFVORHZlc3N6S3BoNVhlUHFHK3UxQUZwS2FVMEo3RWZPR1I4TWNGYmQ3aHdZaVlJZnViS0JDaGx4QmhiUUlHenhvdDNWUDV4a3ZHMm9nVDB3amlRWUpmNVYxZDJWa2JGQzJhVlZQUmM0WGt0bG9xVG8yeG5leGlwQmZCK2FhZkFaZjZxNUErZ3U1MGZ6Ti8wdmZrckpGZUp0T1NEeG9wUDRpK29XUGY4ODI0TEo4ZHZNZitBTytxMmVxMjhGS3V5YWFobjBoRHRXUTJ2eXdyUWh6SStiSnZHR1RyRFZWbXMvTmw5akc5ci9KL2tBS3BYbnBkSTBxMEUwVk02RDYreHB3VFUyakVQaUx6OTNUNW1RQ1AyWnhtc0FnY0pFb1Jzd01YVkV5SGJxaFlPUTErRUc2OW5KRzJZOVhQVFJQL1YzYjZTV0o0dTg4cTJIUm5PZUw3QnE1Z0hwQ1NZOXZleHhXckl3YkNEWXpMT3J2Y3M5b1pMQnZZamtYMCtTY3kyT043aGVXUFR4dVVYS0lZdVhkRDE4MlFXSEM1Y1g5SjRsL1h0RTZ2YUNmU0ZEWW5hTUlrZGhoUGpic3E5dVFYWjZQYm5RYzJkdWlwbWlBQytzcWJnU3JNdEhUd05JVmx4T2FvYXdaenk5aURCVHNFTy9PWjcraWEvSkFtSGpXL1hjREJGTUhmZFJvakxXTi9CTU1yc3ljRXZOdWNCRGo4QWlVbWIxZjhobHJSVjczeEt0OW5ESkNwbXNGalpibDk5ZTZYd2RNejhPMEFiU2xseTNKL2h2alk2Sk1ORGk3SC9YaTZjUTg1TzlnTWNCTDlsRkNmcStNZUZUeEl5a3plTnhGcktjeUQ2MUs4V0Z5M0tONDB1K3VsTnNzTTZEWmRRWW1Ba09LeVh3Ym1sYzBHbXpCSVFqNnhtRVcxOXhuTnJXN2dGU05LZWowSmtxZWFXcW5hZ0E5T2s4QUd3SGR6emNZanBFQ1M3aWtwVnRteXN4VzNpVURVNXFzUEFsMWxaVld6U2ZaWVpMUEcwSFJKemoyYkRrQjh1YVIycFF4VXIrUFpRcHZYaHBzREFQT0xWT0dKYk9HbTlHWU9VYjJKNkNOSi8vTnlKM0ZQZ0xGa0ZWeEVWZGFqWE42eTNpc3JkbXhKWjRxNlNNY1BFdW5HNUkwM3RMRktpZFF2Ymt4NVBEYmNMeERBQTZ5M0JUMFpWL0lVdkorUy9sUXc5bDQ3djhzeFNSSG0yQnJxNURQa1B5L1hmYWRheis1V0pwalFVbXhIeXljUEpjUHBUdkVFY3ZrNXFIMjJSdHQ2aEdVSE9XcVlLY3B3OTFINDZsWFJIUkI2WUlxQjhhM3R2ZzhsUHdzaHY1S1hYZ1kzQ2poVjNvNjduL0dOSVAvMFZScHVYMytGTzBVNU9ZcjRXd1BQYStTZHhjdFlIN05RQjR0SjJDU2Zuck9ZM2piSHU1NlYwZDBKcVcvc0YwMlh3S3dXRlZudmxmbmNKVnJxSThzVUVyenhWcC9pMjVGRE5GSlYyOWtHMCtkcEFEQnpCdENKcGtsVDFLaExIZ0F3dXdMRXowRlRTaXc0M0RZSGpWMllQN3hzOWQxR0RTU0JLK0VDaTZtU2FPWnZiUDlVenhQN1hKY1F6WXFzei9nNm9nK0RDVDlybUJmbW5MUmJNUWFxdTRsY0lQZ0hPZTNUMVYwcmJZUG5zd2xvOTNsa2tlZSsybkswdEJ4c3NYTk1sbzRQVE0wbnJVRlo4eXowZ3hyT2hqVWgrc0hMVFdXT1pvRlVTVWdCYVJqMWJFRnJEbDVROEYwRGQyWDlDZnpVVFl3YUc4WWFPVU1OSWlBVXVyeFFKMGRGbit2ejhPTzdEYzRHT0VtcVo4cHFiT0dLT0RiSURJR2Z6MEIxdExKemFLNEY4eVEyRmFnUmF6a2ZrVmtkZXI2N2QycHladnhJekE0TjdFMVRyQUh6RmdUQndqdUY1SGVCbnBrTEhtbkczVEhsS1B5K1V2eVpZRVA4U3NLZy9pTS96cjB6UnFaT29WWWFIb2lZalAxbEZ5VTB3K3dpRk1UeXFKNmtvQWMwY0lVbnhpL1lkRW5icGwvNE1qQ3BGTENXRXJRdTlCODhlZktQSkhhZHo2OWlrODZQbDFzL0NqTDQ2TVYyL3orb1psMGlIZC9OVXpLRW85MklKbUZvQkpxWnA4aTJoanVVYmZIM204Qi9TWnRvOUY4QkNwb1Z5WDNtZ0MrdGlDRGRUTFN6TEJXUE5BUEU1TjRkYlBlKy95LzBOaDN2ZGRXVjd6U2lzTlBiSHE4dVoxR3hicXAveldMNGsxTDdsTU5pUFJuODdrbUJhOHV3cU90bFp5dVYxTldSdTVIa2RpWHRIanUyajR5SzJ1MkZINnJRT3EzaG5tZ0dFNkQzTzluK0xhNVVTNTRDZklUZDdnSDFVZlBtU3c3T3l6V0NzTlpqYlo1Z05yTVludE5BYVpHZWdBNVFxY3A4M1F1ZE9oT1hqdHFiUUFKclRUMFUrN2FRNk1WY08vZE03T3pUSTJzN1ErWHpnZnVHdUhwd3ZVWEhXT1kwYVNSclB4NVdMaHVSV05tenVmUHJuekU5SlIxMXFtOGMwWUhuRkRReThJZ3Y5MHN4U2czOHFJWnB6aE41VHhuQ0c4S2JZRUxENEMvTU1Va292TGc4b1ZqZnhZUURFVm9YcER6clhUNkdNczJrUnBnWVh1a1pBeStzNlN5TmZwQm5jQ3JCVW5BU2lRR2t4NmlVcWQzd2FPNmNXNGFNUjc0L3grSnROcjNaQmJXL3k3cUQxME01dXQ3YmYrcThyZW95blZ0UDhFdDN6Smp1em5hMW9lZWMzTnRsWWk4MlN6TnppdmxQWGR2YnlrcFZDMFJDS2VmSkVzTHlKTDZmOG5Ja1pqb3ErSUJFTHlQazdEK2NmZnFmbG1STS9aRDhEdmsraXpMWkFkVFZGbDljSzJQNE1PVXhKNkF2VHRkZHhHNmNhVlpSWE5SWkRiNUZPOWlNZXhTTmRKeiswMVN4eXF4WUh4bzNLc0Z4WHVwYUdLaWdZQ0M0MHowam50WGUrVVhRNUZtSlluZHE1ZHhTUTZueXRYQjhPU2Q4VjVCOGNPSFh6bFZDanozQ2ZnSEpJdUJ6cmlPRFhqMURhRnM1TGNSSkhFenBVRmpKR1BwOUFLVkhVcGJPRDV3dkFRbmNUdE1mdzlXTDk0azh6T0RTNDFqK3lSRlhpZlVWY0hzY1NwdmhJNzVKSGE3bUg2Y2tRZTJ6bEN3UUJtZDBjMnJLQkN2ZUcrWDJqUXN3WWtSUmFVREZjL25KYU8zZlYrWlYrRFBxYnh1bDA3OE1JRFdvVk5HUXh1R1I1VnhVOERwd1pnUTVaV1lHSUd5ZEpZOHJKTHRZdlBmTDJSQXB3cGUzNC9KbUJKZlN2RlBjUUYwaXVrYnl6eklud2Jwb3FSUDN6RDlvU2lvWWRPVGdsVmppczJtQmt6YUxmWDFtSmRlbzVFd0hYMmR6dEtoRzZTOC9vYkdUVzhlN2tETm9Hd0Z5UWVKNnpaNzQrcHNadG5nZHhxRE9ITm5acDd1UDVvZ05BajBheGc5NkN1MEhYallCNHBRTzB4MHNqaE50c0NLMUdOUU41ZTJCN2F2dlhqOUNBZ3NaOG9HZ0UrWFFwa0RZK2J0QzhzR08xeUFuazRNWmVSTHNOblV2NmlrMEszTnR4TVJ1UlpnYSs2YTdINExoaStwdUh4bUYxd0w0UVJ4UE12UnZCbEwxNlFEU3BHVzRuSWJyeW5acmkyZjAxTDRwV0NlNkpHRjc2SnQ1aFBBcnlvSVNzQjczTkkxT1huSXdaL1Q1VG16MEF6T1d2ZHNzZzlVUFNQUWR2aGUvOHBGYmVyb3RURnV2enRuM2ZYaVM5ZWpKNVRqWmFiVHdQRUVBeWNiU0xYdWRNUXRtcTYwV0Y1blI1YjR5bVRSRjQ1NlplM0RVRlBoRzRuN1NqbWFrVk9VczRLSjg0YzkxSTd2Y0NYT3ZVZ2NVMDJIaG9NOFpRd2ROQzIrYThnUEV3dm5XZ1ptcWsyMXhzalRoMDdlNmhPZloyck5iZHM1VHIxdWZmN0cwTVdaRlFic2M3VktKUmk1NTlzZFI3R2ZTVDRuWWZaWExmaDE1UnVyRGRlZUVNWURmUVg5OS9oUWh5Z2JrU0lFampoNW1jc2dzbW41eTJnNXkwU25md0ZrM0Y1eE5PQ1BzWk9sM0NVbTcwRGROKzdER1VGbFpVMEgyYTJWMm0rbG16YysyOEJkcFNZcGxGeDdzR3BXNllOYkFZMFBvVTlFMnFhS0hrdVZjM0NUTndxSUlRNnJWengxdFU5UFdUVnRMVGZWZG5kN0pwa0xONkppMHhIU1FkM1NrbjZFYlh0T3JQT3pjWHdoSnNnOE5qQkl4MTVqVjVZMCs1MEdDU1JoZUpZbnpWdXhReUJQcVJtb1RSekN2S0V4aW5ybDVaeWF0VjlpTHpySXE1NXplN1FJOUdTVktmZVJoV1RiRk03dk5MOGJYRGdSQWVSNm5sRW9KUkd0Z1NzK0Z0Z3VHRUpIS0lzdGIySllHN0RQei8renFCT0hJZ05Ubm12MkZra1o5b3VxSlNhUG5ZSnNWVkZVdjJmS2pJcmRITS9oQ0dsQ1R2U3BoSkI4d0RncjdzRVJ2VkFTZFM4SVoxZzhDYm45V00xdHdnOE9DR0ZUUHkyaS9kNWVYYzhIOFVOQndheHg0MmlUdzhORGg2Q2VpNkZSNCtjSHRXVS9zS2d0TzJJTmdWU1RrQjJscHFsak12OFBXUzEyTE9ZcE85QnRiaVRwRFBLckhmRFFtYWkrREZLREgvSlJNU2xJdktuSmJXOGU0TCtlQTB4SVFmVDREMzJERER6aUZ5M0FDT0ptTGtEbGF3dUxZanQrdmJPaDl4UXhxMWJ2TXdmQ0xHREhwaVVJT1Z3VHJIUk5nZE1nazZKN2JHM3FlamlSVGlEa3dTeEx3Tnp6ZTNJZFlhQXlSWE1OL3hZeHc5YlNDSTRpOVc3b1oxcHJGOHQwN3FtSDhTZGpMVm84OXBlTWFIZnZlTEUzcitLdDVTeDlYTnBXeFhPeHJleTI2eDRWZmhMcys4WnJvQ2VTMHZwR24vaXM0ZEZsbVhzS3VJWm9qcmI3enJpQVZDMnd2QUJYbDJmK050NHl5RkVzSnNCNjQ5MU11NERyakJtWTRUSlYyN0VVMWFMYUF5Y3VYZCt6dmZDQnEvNGs1bnNLZXlRNCtFLzh4bmJ0MlZFcDJScmNHVi8rMmU4QTVjOUlGblY3bHltelYrejU2TThnNE1NOFpCVVoxY2EvRkM1S2d5djVic3hwWk1XRlNLTDNhYnNxaUZ0YVVCckVLRCtNcGUwWnc0LytscDNnYjN4MVlYaGt5bHhYTTl0b2dtdGFQUUlQeEt5RDFGTHBiL3FzSVFHclRpTDdyNkZsWk9xdGRES1NKM1V6TVRZK2Y4cmJEMDV4VHkvaURyeW1aV1NlWnpFVmMzOGJ0cHQ5K3Q1NVVOWFZuOHNpSEVxV0dndS9nL21QcHJJcWc3NGtlZ2JwVklGTDdDdnBvMitVRExqTlFMVlJQT3dvNDRvNjRWeU8zaGRqOGFBNEQvMnRiSWswMHJBOGpsQW5BdzRoYnlwWWdveElhVUQ0RU1GNnJTZit5dVBpRExJVEtyS281VVg4OWpJUys0bFBTVUJJK0lxdEk4MWlxL1RSc0FpMWNXWndqQlBIWFRqZG1YUFVESDZ5djlyY0RaM0pBR202aGlYUmZQMXBRMDg5R01qVzQ1ZTFaL2VmeW1WbGhIVm9ZY0hRamxLUWtwM1kyNU92d1pVMGVKM2VybFdMQXQ1WmFlcEZCMmZKOFlaMzZFL2NDaFh5N0IrTTBzYzV1V2R3U1kzZHdad01qWmgvMS9iaDdydGNvbFIvRmNpTCtXOEtiLzhFRTVHR3grOTJvdVkxeU03eHo0bzhrOHNlTzhUNGVGQk5KNDh6SVRHb3M4OFVpalFYL0NyQnk4T3JKbVR6Ykx0QmNBUDZqY1R0UVBkcURLYWcvaHppbFY2Ykl6cThvOGErN3dLMjFlMU16ckhsVk5RNlYxVVJkZGZDUWx1clV5MVlkeVlRUmcwVTZ4b2k1TU10SVc1cHQ2bnpjMTdKdTBrNEJkblNVNVdwc0MrK2oyQjBIUUFFZ1F0OGRtaTdpaW82TzY3NGtza29wdTVCSGNqU3dOcUY5NTU0aTBhVGZ5MnVkOHozZU9TaGlZdmdGNTN2ZGwweHB5cUNBcU9tN3FZN1JHZVF4YUdSaW4vVjVtUnJJNXZmbC9ZWHN0T2lmWi9PZWQ5anY4bnhuRXhOWnNxTUVzUStnamdxdWhhZGR5ZUdlNGhzcTJGSmtUdy9pT2w1elU1NnRMWDlZMmRkQWJwd1FBL0xESzNaTVJrZC83WUQvOVd3ajJqTUMxWEhNczV6RTN0a3l5OFdqK0hHQ1JXTURXdjdvaXpad1BHSDRSSDFBNFdqVXQ4ZCtMK2hWT1p4NFN0NENMeEZ1ajZmWVBpeUxLVGMyelljSW1GeDdwWExBekxCSndiOGoxUVp4NkZZSGpJUWFtVDFEVlN0OWNyUlU2T2wybm8reExUNndwdGhxQ3o5cVNUWTlBNWRocFRqL3c3aW1BNDEyWmRzbStLcXlNTXNmZ0w4eFFJcDZ5SVdNQkNTMFN2T2l4RTIrZUpwalBnNm9wNTV2UzZKeGd0SmpPKzhJb1EzaE9pVmtlV2h2SUI4c1djTU5zNmpjSmJuQ2tOVE85V3BIdzZpWEhDdTBwTGhRQ0NQY1JwZTZzM1gzd3FTL3I3cUhLWW12OGFwQ1VRTDI3Skd6VEhoYXJnallBSDRDM1luZnlLTkZzc3dtVmxxZzE3VUR6TGJrRlFsRGJVNmdaRFcxTXdNeDRwQ29wcGswbUIyMTgveW44RkN6TTJ5VjlXenByTS9DdmpCRXBUdTBwd25VaDJ4b1kzZnJjcGtyUDl0VFVUdjdzM1JSU01Jdk0zaGI2c05EUzZHcjVFSDhmK3VmUjB5dkFUMVA4blczVER5Y2xlby9OSXFuU280TkN3Nnh3ZFFXK0NHemRuYzZSeENpcVJrTjEvUXl2aER4d1NhV1gwQm54M1pmZlNBdGNpaThhRlNoSThsU3ZuU0tOcHlHK0EySTJXbzNJVVJwdFlKUnQ3ZmhFdmI5cGdCQ21ob3JsWUlWcmNOVVJZTHg3RFAxRVM0cTdKRE1JQmQ1cjNGWEJ2cXNIWXJJWHhaa0JsWkxEV0xKRUlITWFuaFF3N0ZEUThIZHNrdkFOQXNwM29OamFYdVB3NWcyY1djNFF1M3c2WWhuTEhyeUJ1SmRvc29XVjMzNGVqckRMV3NSLzFrMmRqMnJ3aDIwYWc2N0xvNkcxSkRsYythS25FUmlVaHRLWG93TVFNWkJZOTF2ckZ4c2xGWjVOaWhrV0dnKzN0dzYyd1pYUE9FaFlxNVpEdmZZRHhOeFBIb0ZOc2E1U2UvME42SUFJR0gyN0IzTktGWFV4d2xsdEtwK1FUMUlUSEFYdnpQbVFnY0FNWWw4bkpENlh4SWlFbVpNejhEYVlISG5ZVXNJTzZ0eHcyWUxzWGVJM3NqWUgyR0FxSGVRUHNzNG1OUlZlckxEQTdZRytDYzU3MmtHdEJCdWtxek5EMVRxa29IcHRsVGozdjZ6Q2dQZ0V2MjNWQVZmSVVVOWViTGpIMVlsSkFkVnRGellEVkpETTdPT2NiOEdNU2pycDNTSkVsaDFHeHY2bU1iM0VKT0VYUlZmckphaE1CS1QyMkhWdTV0NFZsL2JEN1N0NDNkK3NnNXo2dUNyb2RxVTVnV2txWmxVQXRTdXptbzN5MFp1QXVlQjdubXVZb3Z5bllpQ2xiWmQ3L1NUVE5neks2U1BXZ1pRWGdYK21jMktiY3Q2QUZZdTE5bWxUdGUza0Q2T1JUZ1JtYUVVZUxPanFlWHdRa0U3aFNneFRIdFgrejUrODJRQWZKSEVwOFY3bFkzbnUwMjFURHlBMllmc21NaFM3ckdHRTl2b05ERi9GbldTSWZFQXloVVF5RUlORDR4K3AzWTFhMCsyN29sZHgvUXZBUmZhSUh6UHQyRXRvdGZITWJ2b29jWE83SDRRMHhPZ3VJTVJJbGVFRU93MFVJQ0pSVUllakJmR2tYaE80MllscVNKRUxVOVEvUDFBblY2YS9nUnRLRUxmN2g3VVNqK3VvNENIVGtOSHZWR1U3dUtYT2FEQXZ1TjQ3OFFDaVFnaVQrU2NlVzFEZ2w4d0w5cTNOUFg2TjgxdDNHaGVTSWh0QjlVSjIwclNtTWtqUFlNTG4xem5PcTRkbFd3bUFFNG13NGs4QlZzVmxJNXNrbTczNlhKZlhyUE9aS3lRcjFGMjRhV1ZXOGhuclpveHlpd1JYNmZGU1RDalhuYmU4MkY3cEZzaW9HNXE5Z1pSNmt6ZzROSDNsMlFlZXBXS1dsb1ZPM3BpdUdVa1dqaUZsVzRUcUVDMytseTV5NEtTcitQcStrUmQrd0VncHkwMkdLL001ZlJ3eHU2TjdPbmV0NUQ4UzNMbTlrc1VUNm5TZ1duWTBEcFZpRjF3Q3lpTC93cDExOEJTcHArdHNpRFoyWDVwbU93aTBJckMrZzYvSHdrTCs1OXdJZjJLTmlsTk5rSHRpd1hCcm51cXhVZmlHdGVFZWVkZExBbTJvdkxaVDZTZEY0SFVKYTZId2s3M1hJcFBVR3I0alliaWwwNmZhTFRHK3dERXQrUGdzTnhrZGU5WWFSRWZRT2ErdjluWUNaQTh0NFF0WU4xaDNWMXEwbENZSFBraHY1Q2hUUG43d0EvQ0lNc3dlQ3VXYmZjejNpK3JFSzVOZlJrTWs0aEVCbE9LcEZkZys2VTRadkFzMGIySTNGakIwSittZFNWOWxIVzZ6dEgwZ1I2eGZoMEFkSDBnZi9WOVlXRTNkSGlaaGk0SzNaMkdoTU5WVFQvVGFmQTl4cEhHSEN3M2laUG9XNzhqT3F1WWVjU0R6Z0NXeXppdjVNNThEdEQ1eXVCYWIzWkdIcWU1MkpIYUlDS2pIejg5TmxCcDBjVUVMN3YwMUNIMENsYUkra1R5dWZmcWtQWmNTYjJRTlRTamVqWUYvOUJFZi9jUkY4ajNlTHBTV2RVRW1hZTZ1d3hWVGU1clExbDBCRDZlWjgrOERqdGVYVVRDSW9BdjBUdVYvUEs2NTJoUG9SL2pjOHV2dFdVUnVFK2FsaGdMbnR4T3V3V3pPSVhWV2Z4N2hDQ3BZUHR3TVpMZjBaQmRQVE9FZjd4QzFBbnVxejJtWUkxTEt2b2V4dG9kWHhkaThWM3BCVjJoN2JnTEFhYlRiY3hpZ3ltVVk0Y3M4NmJYTXE0ZW9RWG1rMTlOVllOUFpBTjBXbG02bXp4SGQ2UHhPNS9GcEl6NFpjL0s5eWFreTcrQkh6T0FVeHlJL2ptYjJGUXRGN3VqK2F3d3A2ME9MaUJ2ZTBhaFlvRGJzdWVsNDN3SmZhWHN6cC9ubDJKQlNQbDlkSmFWckpTOEw2L1A4MWxlSGVqbjZpTU5vWDlhK2c5K0pSWGRpeTVNeCtZTzR6NkVzdy9lRkdkRzNLQTZUazBBdmRHSFNpdG9oSVZZSnRxNTZ3R014bnduNWRBWVBoT2xqL0xheFVwMGpqRkx2NERkVkhzSEZqc0VWcDNpVFY4RTdqUHAvQ3FlZFFuMENwOVQrUjhOdG83OEg2cmw2bDFJV0R0bktSUlpBeGdvQXYrZjRjQ0RneDdLNlE0ZkR4MHRyTEN1ZFVSaGVWZW5UT0pKbTJvcWRSK0RmSGhpeWphUm1udmZma1NXWncxQnhaUlhFaFI0NUF5QkpJSDhkaXpBUHpkRS9kdkUxSWc0SDN3NmFHdm03K1VOOFZ1dStUNDdwU0ZJUm51dFRHRnp1MllMd3h4VkhjQUV6b2d1OGxzVmpWcnU3VGE5OHdUdFpTWHR6RGVIZUNMMlp4WlgyM0Y2NW5CZzg3d0NSejNxdnYzMk1WajF3Zk80VytYRVlmZ1VKTGZvbGpuNzBZMWZINHpZTnBCLzBldHgwdXdVaEJBb3FJUm1DSDlCb015RDdDZVFBOEx5TzVpQlNmNW5hMkxBaTR6dlVwVzBxVUgxUWM5SE5XU1BVS1cwdGVLVXBINWV1Mk0xMlJSM0hhYlBKZnBUV1l6WnJHNEFneVQ4OC9mNVE2R1NSSFQ2U3lSUUg4OStxaGl1OGhYNGh2bXhacTNaRWIwRVY4NkwwRUxYV1Y1VUU1NE1wdXJhY3R4TStEbEVmV3NjTUZoaHN4ZnMwZzdmcWtDbko2UVdrRHhqa3hBa3h5RERhL0xUVUQwcDB1eFFWSXkwRzBRdG1VbUpIbklXRVFjSkZoM1hXcmMxaXgyclphY2lxbXhXOHRLTEUvRXBmY29wdzViTE52am5rd1lETVJ4Nk8xcnVIZFdSd0l3TVE4Vmk2SGkrajJaa3lCUjBIWWpTR0pRdktKb2JNTU90c2hRSElvc1pQcWgyV01oaGpUVUZjYitzejVwK09FWGhFZGVHdXB1eVRmRGdieE9JZWVNUWZKRVE1S2dLdzdHZUU5SmMzdVJ1a0d3MEZwRk1qNmFnaExBKy9hMStFU1pEZWlYdGQxVGlVaGNvU2dTR0I2SlZPUjd6QUpMczUrT0JWdVZvcWVQSEoyQ1lKUmpKeGN4V0EvYUdJak8zMGNEekQ5WHJubmlqQjF0TjN5UEgwWGtjNCtSS1ptQlBTWTE1dVMvVjdVVVd1N2dsSjI4NEFIbVJxTTVTSFJ3VkdCaHJUTjIvVGlnM0tVTVNqRE5JVkY1SXVhUHFaRVFpNTlEY0dlenlEd3pBenM5QjFFQi9pRG43R2d0cVZscmxZbU90Q2xheG1DSStwazJQaXh6WU1yWkhleEVxUndZMVNYb3FBTFhOemthVFRac2JXb1gxV1JjVHN1bFhpaC9JWEZwUFl2eEVhNkFGWmZ4NHhsTk16Zk9JdVVSY2J1KzZxdmhhU2hmaCtYdTZTa3ErVmFER05hb3VLcHhZT2I2QitBKzFUZUlJRzdMM01SKzVIdFVURFIwZ2JjTTB1S1o1NFBia3hBRzViaHNINm5IbVErMUc3RWZwZG8xbDVjSjdJSWNIaDNuR0pXc1lsM1F2dlhaYWhKdlB4NVU2Sm1MUXZvUURKY0ViclFaNTIrQzNSRnIxMXBaZC9NVVVSdjN0UWgxMi90UEIraHdyMXNtTm9CVWY5bE1TYjhBQmh1MDZ5dU5mdWIrUzdNN0RiSUhyQlJtL2ZFQmZNZWZtVllVbmdnSnAzeXVZYnFIZ2xRYjZDUVZtSHNlanFhWjlNVHowYXJDRXJBdXF5R2srVWYycmo4UUFSWmk1cUN3bnRDUDBmajBLM1FveEpsZ2ZwYnRrWkdIRlRTdENBR0JLS1kzOG5sK0pLOU9RRkZ6UUxnU0toUExORG1ySGkvWnNIR2JJZ2RTendDL1pXOXU2aW5vN3NuNElVUnUyQUNUOGlGVjhDanBHNnQ5dHlDdk5TNTFjdTlTY1FzaW45K1ZSa2pLZlcwQ09pblhOVWpuNXQ5eG8zOFhRZURjcnZqampMUEFrRUlhU1RRazkrSUVIN2NSRXdFNkhsYi9qdjlTT2ZkaWtmclFsSlpxQTkxeDJEWDNjWjU5cnhZbUJiUGVHS3NaTkZJT3ExU3psSnJCU1Jid3BHYm5UT0lxM2pZemhwNERjSklibDVremRqcFprQ0lIVDh2VnhYZ1lFYnBwYUVjSmJzY1BucVZGWUNNd20xUDRzbGI1MkxTN2JUN1I4REFDVUptYi81bG9xUVBUVVZwWkNrQ2lOalVCcEpNeE50NFpxZDQ0eWwvMWxibllDcnpZR1JPc0RmZS9OcnU5QTJ6TjN0eXhCZmhvZDNRNzlTcytMOG5MWnFaZ3MwSzBxNUh0dUZqQVUyWVArdkFMRmt3RytpYXV1bndBTjR6cjI3U1owakE3dm4xclIwM28vVHU2Y1FvTDFPWHFwVld5dHFtN08wMEZrNFhvYi9zdzZtQ0lYUzRNMHBTc2NaWWw1MDFOR0ZibDJtM1VGZlhzUHdncVRiWkhGNlhCMEdqdVJUMElmTDFWZ2I0ZWVLOENnM3JPVnNtd3JoUnYzVlp4c3lHaVp0eFlYRFZxYWY0VGZEb1JSR1RnZkk3eFIxUGQ3aG0wYmRUdXlVUWZ1Y2hlbHlLdlpIY1ZHS2NMVDUvNW56NVVIMlh4L0ppdU5KOE5SMUxUZ1FxWXlnaDFsMTVEUVE3eStDcG1BZ0EzWGVIS29Tc1Z0R1J3YWh4SEJ1VVAvd0FrNHVHYVhYRGI2SzMyUk50K3BJbVV1S0ZVWVlyQkMySXc0eXFHTm9JZDJxQmdTWGpXWko0TVhOVFI0dk85NUlWbkMvYWdLRkNVdjlvMGFmbno4WlFuQ2ZscUlRa1VBcFRNb0VBOElwVnBUNHlhbS9aRy9rWHJ2VGNxMWt4TTFGUHZ2VVEzaFdLYzQ1TzQwUVozRlpXZ2NzVzFUdi9BK0cvTDZqZ2FmWGVCcVIyaEFoZ1RpbE9kWUx0VFB3ZWtvaWNwTFo3aWZjZ1FpL2ZjZEFmN1kxQjEvaE1lSXM4UG9YTi9zNS9zVkJUc1U4QmNiVzgwemg1MkpTOVA5LzVCNnAyaCsybm5qWU9zNlZVeUpPSlFwRmN3Q2wwVFVsUEo1bzJmNEZjRHpQQXFqYkF3Y3AxakUxR21uZVkxSW5VbnFBWEJjOTZsQUZqSFB0a0hSeW1HeWdsakZoMjFZblMzY0V0MFlEOUtzdFhVYm1kTGZGSk5ZUHM0VS80cVlueHRIUzR3ajJRWSsvSzVXbzN6Uzh3bEU4Ky93bXduT3lMdk5ISS96aXJxK0l6RitSK1A5RmtPSmFEZk9qVDhzTlFBeGhVbVZsS0R2SU5KMTMvRk13OERzci9NOFB2cFFQemRRNldvWkxyVDJyRE9UcFY3b3dtYUladEg2UGtJTXZZa3lXV1hObzFMc0hCaEh0dzVjaUthSXFZYXlKcUY3ZTdPRDB2N2pvaW52bTYvcHoxdVI0ZFNKcCtXeDZzZk5sNk1TcTk4VmlBek9oTFpNY2RBOWNldmlRTWNkMDdnT1IrSDVYVmZaZjZyYWU1dGRBaVUvVkN3MXYvWUs1amF4VHdpa2o2OTlZa1BzZXpSMVdtNUM1c3NmNmhXSktUTDBiWW1yM3BHZ1Z4SnBLd0IycUIrcTVxd2VaRVB5K2J5YW9JWkVKNDBocXdlYkZObkRMS3M5bzk1dkpwL3F0TU5aSFdiaHVhWTVjdEREd3ZZZjVVNVptY3UvaFdmS1AvQ3UxbkIrelRLRHhWVUNRWGZ5b3g0R0YvQmVvVDlaWXNncU5tVzBkQmtyUTUrVXYyTEozc09Pd1pmV0xuclB5Q0l0OUszOGE3V05QclRpcnFwbkRIeUYxWmE4RmRUN1lJc0FQU3U4YVl1VU1vOWszY05xWWRPRVh0djlHc1pacVhKZTBJK2Z3UmpjL1FVTVp0N3lhOW9DTzdFcmVMUjdDWEhRemdqOUlGWEFJZDNNeTJjL3pLUWdDUDhkSTZubnNGN3NNYkI3Z09BT295bDFVSUR6VGFXZHp2aHIxU2Nma09JZEpSQTRzdU9Vc1k5N1B4NW1sdEdxcEsrSEN2UDQwVjJPRGxMUWFrU240MFByZVVmaUFDa1loQUlXaXBqZGZxUGJpOFRUL0VxNEtkRUo5RkNKMnRxRTR5dENWMXFmZVdUVzZEbERFbUNaY1FtUVJiclBGUlVaYzRTakhKYmw5N3hKait0dUI1Y1FhbEdNTWpBT3BQeFozdjMyK1pCZEN5UVQxMXpYWDg1aTZYQk9kY1d6UDZoWWVRazhTQWI3U1dqUVFMbVVXeG9nQytHOFNNTHZKTjNJUWdlUFkxY2R5dG03Q1Rib05hWGxZL1N3NTRKeE1rTDZhVzZIQkduYTd3UGJyN2xRVEl3cmNURDg0NzdsR0Uya2l6Z2hEOVo3bVlySk1DdDFWckRXK3JKdDlvMEJkd3EwNTJ2L3BqT3J0b3NwR3poVGl4aTY0RFRqd0FRdjZjYnROKzF6NENDekVBSjdJdHlMVWRtL2pPbi9BaWVtTTVqRWdHRCtzbjF6M0JEUTZnbmxsSldNYVhnT3oxSmFNTHIwUHk4a0E3T0FNK3k4L3ZOdWRFcm1xcStCenNqalRRNzlud0VXSGVtQVZsSmx2c1p3a09IZnlWZExDbU1MUFN4elBXZWs3amNvWWVINnhvY2N5Wm9yNThTUjRZVlo0ZG45ZEdqeWw0VkhPT0xHcFhjRFRxbGlWcnptQWY4RWJnUThNL0tZem16MFFhOU1uWjJ1TWtoNU1JQksrNWFqMmlPd090TjZvc3FiUGlTVkxudkNONG9wUjRWR3VTTjRPMEFxY1J6RCtqaWVveGlyOHE4YXhTbUhOU1JDVjJnZEoxRzJRU2ZkWDJ6dE9uQ0p3L3BXZkFLWGVzN2JSVk5ZNmt0MnpmUzA0cjFXU2FDSkhvRjd3YThwODd0YnJySjdGdGx6dFVodGlWYUNCTlc2SDl3Y2hCNnE5M1dHZlpqdU1zRWhlV09MMHdUM1pEOXpmM1YrWGVyYmJOdCtLVHdqRU5MUW1sUVlWNnpiK2dBM3NtczdxWEtidS9IWjZwVW5ManNHNmkyQy9LQklQNWsxblpoWCs3cXlra2tPTkRSKzFXRFZmcW52OWZLNjFaaGYxRElnQ2ZON0o1S2JLUGJkLytVK3kyQkpHQWZIZEZ3NEg3aXA1eUJncDVsU0xTMWlQU1RFamdMMURTNEE2eHliMU9jYXhCRWxJOHJBb1NvVlNEWW04QTUzQWE0K1JZK1lIU1NaaEtLdFJNOCtXTVNYa2RyZHVFbjhGT0pZVFQ0bXFpYlJWdjZnVVhXV3VleXdQWXdzbnEweWJUY1lwbmdxaGJ1RDFuVWNzSEUxT2s2alEzeWswSHdjbmJNMVFwT0lIbkkxQkxKc2ZpdERkNEdIcDZJdTMwZW8rbVM0MGZQc0wvZHo1SnliZ1dRaFoyT2pzUUdJRklFSVNXcCtXZXBuVEl2clBqdzYxeDdHcVp0V3hvYWI2MUw5OHVxUGFUalBzTGxmSFNXaFBUQ2dkUnFWVE1va2MxYVJCdXkvYml6L3kyVFRXUWlwOUZMd1NxOVRYcXBseDhPbFBPRkU0aDJSbDNYSjdRRVY5Q2dSWDAwSjlzcXVVNUJqckRSckQvVzV1eFNpanFTQ0tlVzlzdmxjbnM1VEdJLzJJVWhXU21oWkxGN3M1TmpxWTJHYlYrYzltSFZ2UXAxWWl4dENCLzl1R0x2cThFYW5xbnJQTlo0SmVJSmNTZC94eVlBSDl5VTU3VTlZdFNOeUF2RnU1ejhZckZiZVdJVE1LSi9kK3M2UkxrTXRkR0I3MHF1R0t6TkpGKzlCOXZMcmRHMHE0NGNnYlBsdmhQWXZTVHlMMEl5a1IyUloySEpyVXlybldic1F2VDdHLzBmM0xCUzgzcyt0R3ZPM2VJQlNRQ3crMTQ2YnF3eE5PT21OejY5bzFQTk55bThzRDZWaHl2RlJNcjBHQXJWUDJZZEo1eDlyWnhPOURJcnR3SlJ6RmNraFgxY3RiUno1MEh2UllPdkppQXpoUHRFaGhlTlJXOUREakRPTUVuaWJtVENtVmwwVUo5UUFxendpUTM1eWVUTk9VenpJakNsZ1NKUDBaTDFwODBJVFVkSUdXVDI0WkVrc2JqR2hiL1BPT3J6a1QvTHp1cG4rSE5ydnFSZXFaUUt1V0I1eXMzcTVieGFSMDIxODlTeEMveEpkR3U3djl5OXdpdzV3T3ZJVHpEbE9NQ1hxOGk5N3A4SktEQjVCejFYTTFZU3U2WWlxcEtqRURMZndCSHZUM3o3NjYwanJDazV1dnlJNW5GV05McjA4ZDhSYzIxOWdXMDdsZ254VlFHSVhHTXFjZGdmMEM4cHRZTXcxMEVBblJ6ME9IVzh2Z1lveHBBVFd3L29CT085Nm5yYUpNS040R01adStiNlM5c2QvZ0d5S0Y0aUtRS0oweGxRdy9idDVId296dW45V0FXeHZUNU0xS01GMXViY1R2N1JvelZHMWhabFNtblAvVzluRDFNRlpwSi9xdDFrMlNLT1ZWRFVLbi9UeWhCaFBseFJERmVDYWhJSjRXaEUwYmFFMzJxN1dPZTZTYVpYU20rbXpZbzY0K3Y0WWtuU1MrMXN2aXhaUGVlRWxDODQ4bzZpOU5PYlNZVlpaZUxKTG1rRmNGWDdCTWJGSzMvSGhMb2FBY1Z0UzZwZ2xVVU5YMjRrSE9hcHg0RURFYjd6eXlJQjBQWUtjU3liWDY3VDBEdnc3VnJ2WlZNM0RtcnZhd3Z2OU1ROVJka2xGRytTR1dIRm45c0pjN1Rpb0UzZnVrVFVyaUtWM2RaSTljazRiNW5MU0VhY1ZSQ2dMeU9xdlRjckJDeHdBcjBISXJ5aVl1NTVjT2tZckI4LzJFSFpGRHRhQUxxYUloWkh0NXQvQVVpQnM5QkZld2hmc1lTU2lkUHJXbHZRbmdKSlVrVnNQNnJCcTFRM2ovU3ZjMjVmTTkxLzBFbzgrME42c2VlVTFjZmE2Qk0yWDJBWHdIQmtkS1paRFpSK1lDaElYZHJtKzdLazVLTGtUUGtTcjArOTZTZS92SmtHdVFTWjNlN01pZWFOYXdueGF0VGRlSXZhWHZkcy9GSzRsNWhuckZCdWVEYm53TVpCV2loY0tHdGcwQVlHSUx1czNrUU8xWDJoemxpSFl4ZUFlT1Uzc0FuUWdkeDYwVnZmL0I2ZnFLcW4rUEZqYXVPVnNXWGNyWFVaT1JYTjNFSVJLOEs4M1BEVC9IaHdnS0RESjRmYVYxSkorclhxTmZJQ2FvQW9FbHBqdzhHbFpHK2phS2xIb24vZHUrSmRhcC9pQmRhbisyZ3BwSFJDSE1qK1dhQ1p0dlYyQVVjZjZsUTVVVGNvQ1djb2lLN0VrT2ZHdHFOR1Y4emhlaGM1L3dEQitmZDgydWVZNHJjc01id2phWTR0YnhoaHlSRlFsd2VhU1BjNUZQam9kTzNTcUloa0w2OUw4RVBNWHMyS1ZocmRsRktFZlRSRlk0eHBJcS9PVURsYm9kZDUrT1VVcTRjbElkV21YYklHSktIN0RUdHF5T1JSRXByUStyWDVSZjU3WWFrcURobS9sdy9xZ0ZNaDk5dWMvNDFlMEpldklvalJBSy9uMUYwOHpCOTlkYjFjaXpYQU5tdnFseGxsV2xsMGFJTmFGN2VzVUlZVlZCQTJiSFo2MG14OEtCYTVrNERkNXpxRUdSaVNoN2VDZlRtQTYrNHArV1BtZlBOZWNZQnFSZHRabExDSEc5WVpEWjQ3dDhGUlJlOEQ5STM5S3hRVjlUMU5rZGtaeFhROWp1U0hiR25vdC9IVHpPcitzYkZVRFN5TjBmT1FDS2pBOTZUOThJUHVHdXNMRHZsM1V1TUhRK2tPdjh1YSsvKzBMYWJsbkRKcTF3SGpOa0ZnTUlSblJQUzJScU15TklRZ2NKTlk2S1lzS2dobkVTVjFMQzRSQkJNb2xBY1dYODU3QzMxb2FUUHhxczVDTkIrZktiK2NnTUJTRXNEYVJjUjFsRURDRVZ3RFBSUlJpeVhMcUN6MW1vT0VncjRhVzlhd2VCOU1mSW03dms3WTd3NjJSTkYzY1QxTDF2TEZKSFlnQmtKb092QzA3NGI0OGpncUJqMmtqVGd0bDN3c05LOGlpUXFzYUM2MUV0M2JwazRBOEozcFcxT054TTd0d0kydnFya1lQcTdXZ0M1RGU1d251aVVTTDkyT1ZkbTZ3R2RsVDRIMjdGZytISjZuK00yNkhuQlF4S2FOOXdFSG9yYmdZd0hxcUxzM3g2SjBRbEhGWk9CR1hyRE1kUHJURTlxdVA3ZzRhRHRvTmltWllUMkpQM2pyRzJXZHhRdWNGWThpckpkR3ZRRW95MjJKdmtqeGpLZkJYamRQOUFuZkkrNTNWb1ZKWjNZb1FEZ0pVQk15RjM1dHZqZW1qWkhIWEhkV3RSMWU1allHakZsNDQ2WDZVWC9JL2FidFRjNVp4emhSeXRlRzVkYkQ2dmcyc0FWeTZ1YkN0NWxKc2NNM0o3WnJsVUx4QkdnMG01NW16bFhHRE5iOStocWN4Mm1xb0FQRlpjK3Z5Z0dFeTI4UjRiYnJBTzFvNjNqTHVxMjJESjcxZ0RRbnV6TUNhQi9xbjhFZW1tUU55L2ZXTTRGdWpqMzI5S2FzQmozamFyY0gxeTJCaGFIeFg5L0RwcHZQKzVrRGJ4dmVCamV0WmZ1MmRVMW9DSnIwbGppVy9QUGNCbkR3YkdSZVFxUGRQTjE3TlJaRXVMd0ZwcFJkZWNhUkEvQ1VkRlRCVnV4M04vSERLRWdRaEozVUxnSUtQNHFkVjNLZVlsY0tJV0l0WXpYNExqYnBJcnQ2RWtFSjJVODl0K3lQa0c2eEdKT3BwWS8vRC9DRDNWTHVHT3RGdFZYZnVQeURjV2NtOFpmbDFkcmoydHh3TUdJelJPMjBWK05COVQ3dVN6WVRuWWFvSUhLV3MwY0dRckJaY2ZWWXBmWVVIQ1hJRm4rUXF4eWZnd24yRldxVWkxWm5JaDlNN1NkRE5pREl1bnFZcmEycE5LdGh2WjBBSUpJdFFzR2cyRmZRU1BnUTdtNU1mbmtyM0NTeEZOVHFQQzdnWlhTUEVjN0ZVLzhsdzh1UGNIRFRjSW05Zm9jeVpzMEFlak1LNnVWRm45ZUYwaXZNbS83NWNDbjdJQ0JnVE1ITC9oWFV2RTh6ejNXOGo0ektOdHJ1Ni9BaEFqbktxaDdWRjVZLzlrQUFRQWFBRUFBQVNNQVFBQVBBUVFqQWdBQUFBQUJFUUg0UUFBQ0FBa0NBUUVLQWdBREFCbFVhR2x6SUdseklHOW1JRVpwYm1kbGNpQW9OQ2s9PC9CREI+CiAgICA8L0JJUj4KICAgIDxCSVI+CiAgICAgICAgPFZlcnNpb24+CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvVmVyc2lvbj4KICAgICAgICA8Q0JFRkZWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I+MTwvTWFqb3I+CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L0NCRUZGVmVyc2lvbj4KICAgICAgICA8QklSSW5mbz4KICAgICAgICAgICAgPEludGVncml0eT5mYWxzZTwvSW50ZWdyaXR5PgogICAgICAgIDwvQklSSW5mbz4KICAgICAgICA8QkRCSW5mbz4KICAgICAgICAgICAgPEZvcm1hdD4KICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24+TW9zaXA8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgIDxUeXBlPjc8L1R5cGU+CiAgICAgICAgICAgIDwvRm9ybWF0PgogICAgICAgICAgICA8Q3JlYXRpb25EYXRlPjIwMjAtMDEtMDdUMDI6Mzg6NTIuNjcxWjwvQ3JlYXRpb25EYXRlPgogICAgICAgICAgICA8VHlwZT5GaW5nZXI8L1R5cGU+CiAgICAgICAgICAgIDxTdWJ0eXBlPlJpZ2h0IE1pZGRsZUZpbmdlcjwvU3VidHlwZT4KICAgICAgICAgICAgPExldmVsPlJhdzwvTGV2ZWw+CiAgICAgICAgICAgIDxQdXJwb3NlPkVucm9sbDwvUHVycG9zZT4KICAgICAgICAgICAgPFF1YWxpdHk+CiAgICAgICAgICAgICAgICA8QWxnb3JpdGhtPgogICAgICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24+SE1BQzwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPlNIQS0yNTY8L1R5cGU+CiAgICAgICAgICAgICAgICA8L0FsZ29yaXRobT4KICAgICAgICAgICAgICAgIDxTY29yZT43ODwvU2NvcmU+CiAgICAgICAgICAgIDwvUXVhbGl0eT4KICAgICAgICA8L0JEQkluZm8+CiAgICAgICAgPEJEQj5Sa2xTQURBeU1BQUFBUG5GQUFFQkFRQUErYlVINWd3Y0RDQXNBQ1FBQUFBQUFBRXdBRUFBRHdJQVFBSUFRQUlEQUFFQjlBSDBBZlFCOUFnRkhRRHVBV1VBQVBsRUFBQUFER3BRSUNBTkNvY0tBQUFBRkdaMGVYQnFjRElnQUFBQUFHcHdNaUFBQUFCSGFuQXlhQUFBQUJacGFHUnlBQUFCWlFBQUFPNEFBUWNIQUFBQUFBQVBZMjlzY2dFQUFBQUFBQkVBQUFBYWNtVnpJQUFBQUJKeVpYTmptY29BQVpuS0FBRUFBQUFBQUFCcWNESmovMC8vVVFBcEFBQUFBQUR1QUFBQlpRQUFBQUFBQUFBQUFBQUE3Z0FBQVdVQUFBQUFBQUFBQUFBQkJ3RUIvMlFBSXdBQlEzSmxZWFJ2Y2pvZ1NtRnpVR1Z5SUZabGNuTnBiMjRnTVM0NU1EQXVNZjlrQUJBQUFVVnVZMGxFT2tkU1FsUXdNZjlTQUF3QUFnQUpBQVVFQkFBQi8xd0FFMEJBU0VoUVNFaFFTRWhRU0VoUVNFaFEvNUFBQ2dBQUFBRDRUQUFCLzVQZkd4QUpWT2QzeHpjWWp1MXc2NVZGaEtwbnZQRGYwMVYxVmdOWitSUG1ZOEYzSS9wT3hrbjlLK0dyTXF6VWRCUGZKb0JvZ0lDQThZQkhIK1FEdzhHRWI3UmJQeXFBOGFCcnpZSlpSN01hS3lIZ3djNU1nUHdKZ0QyckgwaWU4c0lpVlFOSFZoMDFTdFI2MUUraFVpaysxUkVFM1lrRVdKRExUa1ZYbVA5MVNhT3lnWGFBdzFDT1FiQ0lvRm12bUs1VWFSWlJBRVcraUc5S2pBdytYMjN3N0U4ZVZJVXJPcHlRTVVEOFNxL1pKdVM5dU9VNGNhNnVNYXErbEZwcGFLNlFoa0cxT3c3emJFdWpBSEhrSXFZYTM4U0lrQlZzWThzYVZGMnhNb0Q5c0J2NTRFeDV1QzNUK3BQMUJ2eGt2d25mbVVDK1JqbG9SdDJ6Z1Znbmx1Sy9mUFdlZUI1S2JUV0JQQXdWQjNzTFMrRUZ3RlYxakU3UHNBSmUvYmwxTFBiSUhPc3hBSHgySnl2S2dsZGdJc3djczNUL1JqLzZpMkQreXBFMTJISWZyaTJ1Sk9DdVBLNlRVc1I4eHRLdllJUGh2RzFDQUxUYlFiQURYRTZQa1dnQVNMQklyNWVUYnI3TjFpK0VwV3ZPVklERm96elVpSC9zOENsL1BMaS95LzI5V2lxRitML2RyN1Fwb3pscDFMYW9oZmYvRGxIbi94ZmplamlwcnVqak1SeEtMdGlubjFESmtNam8vSDVXaFBqeDB2RXV0WXFBL0VXTkFMa1RuU2dCakxKdlMxQ2prYjZjb3B4blZ3RG0vVTVVQWVDN090WEdUSzhyZUhGemV1V2dSUFRjczFHQ2NiNExyS28wRllERmR5NG1qR1lWMldSVGQrS2tFRzhJdFBYNWlQM1RqZGdwaEcwRWdOUTJwcVFIV2lSVkRBVVhIVTFUclY5MXA1dUhXQjF2aW1DQzVhZUpiZ1BCWXYzY1VrMXdpV1NHL01DTHVieGFTTUpQbjN0YzNHWWpnNVNpdlB1RUtWdnNROVZMTVlOMUFTT09JTEFJMW10a25uYk5jaDBIYlBOSzI3UDd0OXJCdjF2MEdoc1EzYlB5ejN2N2VqMnplZWVvbytFOEc0TkFVM2Q2MEtlUGdmR3p3eVNsVXk0NjBMaWtjQzV6Y0NneG9JV0RBRWkrdlgzbTBCOHFscS9iamNUQ1RBZ2FveEhROEErcGlCZ0h4MzFwV2RGbnB5ZWFmOXBhTmtZV29ZcVRpMzV6Sko2Qno2c1J6d1RnWnlFOFVIcllYeXBRa201RWo5QTJmNG44cGZmSVRYem1NTGRjb2ViMFo3UzJ5NnRmNllsaTMxSnpnMFN4MWpSRkVSdkNJT0ZWTnROY21EaWFqTGczTG1TcndXOHJXMUxsOEp6WXkwbHlsSzg5a0swQWluVGtxaG5ud2Fyb0lyZzVpY2Z2VWQzQmFtZVJ6ZjRRWDhNaHM1bW56d2xnc0xlWVZjbjRUWTJDNzgyVHRpanZySXVoT1NXK1FlcXpkQUJTdjQwZGVXZ3FFQmVJTk0vaHJhZ2RXM1VteXc4dmNsVkZDOGlkWnZaSGM5VDluNFBLdDJOTURBamxFZldRS1pTbENZNWRTN242VkgxdExUc0hZRGFQUW5PUzVhclRJOUo1czk3WDdWaFhSeWZwY3hHOUc5ODZiTVdrcHdkVTdSN1N4YVI2YnJ0eHliMmdsSk1qNkNHeWo1S3R5dTRyVGdoQzB1UlRwQ0NreGY1RkZSNVdQa1VTbHB2aTVJZ0pKaUFrQllZYk1DZkJhWW51VENmM0k5SExZNUtVV1I4cTlHeTY4dTJVMzZVdW4zaUczNzRMU3ZvNlR6Q2UyMmp5aTV2Rm1HRVN2ajFsNDFhc3lra2NTaVNjcTdqZ1FMSjdlK0ZtekFoL05ENnpiSzdKd3UrSEVGZVE1aGxyUnBxUVEzLzhwN0Jhc2tFeG5Dc28reWI0SitwMnVmdVJVVlRjdE84cVhjc1o4ZUdFblZjVE11TmpCOHh3aFlGQ0h4aTlWcjdxL29vdndOdDRmVlZLYVk0VExkbUl2UXRHbXZqMlB4SXdRc2c3bElvdlMzRnpqMVl4bERQNmhOcXBBSUE3b3VmME1kc0ppR2l3UzJ3Qk9xRTAxT2VDS3lGSHVpS1gva3l2RFlsNVVjQXM0N2xsT0ZHRXBZNm9iWlN2QVQ5WnNTRCtRS20zekEwUVhqdUU0S3liWVhUVmZYQUVRdEF2Uk1pQ2dJRStZaWtFVEh1U2NDZUYrREpQeTdZQW9od2JIcDc1eEFBU3lkVTE5YmtqbW56bG9DTGgxZzI1Rk9lTSt2VW5Jb3ZyNWwwS1Y1UDdRQ3M1cGJ6ZmFBek9TaXlFRUEvNTVMRFY3VHpBMmRLOE5EVXFQd1BGSVBxTVNTblAvdUJRY04zRTF4K3JqemtyaTNxVTIxYThhQ0o3SWdCaFpaZkFWaEZhdDBoMWZ5cVZHbE9lMGhpUlYrakRPLzlnWnZqVmxzUWUvejZuT3RDYVpVMXZ0OFdpWWtoMDNLYjZ5cVdwemhvOStMb2E3NXJTY3JuN0Q2SDNnR2hBbGhxb2xDWkRpSThjVFl4ajB3MTlUVWd5ekJWeEJQS25VcFQyQ2daU3Yxc1RDZlRvNHpNYmp2MVFzeC9nRUJuTUE1ajVDWDFiRktPcWtJODJZSjIvelF4cEVSL1NaRVN5V3pJUHhOYlo2VnhDSmN3UjBMV29WbVEzWmhQcmNHMUY2bkM1MEV1WVVaeHVZWHQvbEdzOW1tbkxSU2EyWVhXaXJNeGVUV3JsTDhUTVJiNUJlME13azNZVGd0SE5rN3FBSGo5aHFQdkNJMHRtYXlsQndlYThtWGo1bE5vd3VMMXdBVkQvQVlhblVhN0k4cHFPTWNBdFJjaUpPMGxlczcrRER2Y0RNMDFZdGxkU2VOdnVaM1lYbnZlOExObWdlR2J1WUhIQWlWTlBEZFVwY3JVTWp2YXhYWU1BR2d4TkV5bjFidkVqMTFld0U2WnYxQSttblZsR1hBclh3Rk4rTndpT0ZJdERvYm5tTVYvZGNxUzJCTlBYMmUrYW9OalFLeisyR1ZXOEorNGtqRGZob2RFTEMwNHdGelVGbWY4MXlybnZ4bE53cEVuVlllZ2ZMcjBZVHkyb2RkRGJnQ2dsVnRBZmg1S1BnRy9PVmRQNmVVT1FpMVA5c1VOSzllK1MvZ3FUSnRBOUZVbFEwb0hGTXdPWW84dW5YcWlqRDRvTXR4TlBqNmRBVzdVZkI4Wk93d2wwNEhXbEl5c0lWUmlQYk1iTWh4Y3dNUiswbGNzcWwvanR3eUF2NkVjWUpGU2pXZHIvY2JqaktFNTdXbldQSi9yV2V5emFtWnhIeGpsSFgxTHQxSFNnOWQzTEhWbWpMWnlRVFBWNnNHZzF2blJSeHc4ejMwdzJEOFFpOVJodndhUTY2d0E3ekNlZ1RnYmJzeTVqYWhmWDI2LzJaZTF1Qm53L3FLUFFaZm9qV0hYN3RtWnU3Nm1TMU93VUl5dms0QmJzOTVtR25qdFNUZVlMUkU1d3pkODQwRkRzUExNR0o2all2ZTcydEROUmQzU2JBb3U2akI5ZEwzVDhXdEkzTHdhUXdSVUppS01scm81eldsSWJ4RjRFVCtZM3BnUlJ0VHN6YUtmZUxpeUtOOW5USWNLSXk0cmFNVXhRNnNGZFNjRk9LenlweW1FdEI4TDNQRFpsMzgvQzdUM2F4a3JZVzBxKzdTVkVZenlIMFFDdHNCNHN6aFowbm9DeFlNdG9QdFhXc2ZZeWliRWV4TkgvTkNWb0RYSkU0YllmVkdDK3VMbVRwQnhCejZYaE8rU284djlaeS9VRTFnN3Q4cmJjL3pROFY1WlIyR3dKRUlHMFQxMXlFUlRkZVFEWnJnWkxkeUdHaW0vS2RYQ3ppdlAxZDZkQU5Mcnh3eGd4TW5SSmkxSWIxQlhmWFA5Mk1ud3paVmVPakF3Qk4zQytQQytrR0hkeDRqQlhxcVg3bkRnNTd3b3p2K1hBSEJkbk4vbks5alBNTlVMbGJlNk1vMy9Ra3hZdWVKV0J4akRPV0NLOXI1bk40alBMK1JRdStyM3lKcENSTUY4RVlqQW5NUmxIU3ZQR3kwSGFtNm5DRXMvZHVteUErb3ZzT0tBTkp6eGcySEVoenU2VEQxY2N3cVk5MFdhbmp5V2hQSmtTRGtRRkFqeFh2Qm14YVJrYWFqOUtLZDRXcGNTU3YrT3M4RTE0Vko3UmlvM3NnZGxjOVh1TFoxckd6Sk53UGFTRFFsZSt1K0pZUFc5eG5Pb2Q3RzlzSkFZY3l5dHc0dVJDNFVLVWo0TkN2dDJpek5HS0VqVXp6Q3NoSURxTjN6WVlaZXJNd3ZiNjBGNWFKQ1dsMVdCQ2QrUVovekFTdE80SFRqNlRkRWJyY0dhMmFrMzhIQ0d3OHNLbTJvZjZXM1d1ZCtXOWI2VThHTUlReitZT3Y1YUZZdEZQbU9MU2VvMk1HcHZZaU1pUjBsZS92dE5rdmlxLzZZNERFWHF4MDNnM0RpbWlrSU83NnJBd0VYWENGeTJ2RUJaTVE3Z0x6cGdUSmxvMy9JUkcrQlZScHhXRWhvSXJ6cTl0V2JtOUNNZVpaQkc3VjIvVXd6TzRCNXNFakxHaC9Rd3Y2R0kvV09vQS9QblBiWFhwRXZlakROYkx3UnVtdUJ5aGZ6WU1JQ0RISHdVN0EzejFSQW5FT0trTjBvcFFTa3FZVGVGOTFtMXpWWEdFTC8zYmdhU2I2QWp1L3ZpekhwV3c1QytUTWdNQzBXaERqREV1ZkY5RVVnYVNMd3VpdW9kYVlEZHdGMWNMNVNFSTh3WVBQNXJxMHR3NDN0bmtkelNwTnlCNWJIWElPODNIc2prYXp4UDc5NWpqbHU0MjF4TkpJNUlXUTJIcnBhN09URXlheDdqcDNySVRoRHQ2YTRBNCtiTWp2NXFGeGZRSFJRYzF6NzM5WjdyblRnT2tSVVlJQ3JYdlNtWG8rQmsyQU54UnUvVENOaVU0dzBrQm9qSS9MYTQ1SnRwQzBxcTBoc3JpRmkvNmtUZ2ZBVVFlK05pbXlPeW1PWWIwTnhxdzhYQ3J3aTU2dG52OFZBSDVxUEw1RlRSVlB6eldnWk9hYUdmNDhJT0kxR0R5OGJ6dUFnazBNaGhyL0hSTW9HemNzZ3czU2dsNUpuYzBLV2V2NDBFWUF2a2g4RHlRb3hlZ3EvUFVYdktMZVlmN0dPN2FUMStRRGVtREQ1ZSsybFMzdVVwT0kwTisyaXVjaHlIdFRUL2NBWEcxRWlxQkRwc2lpb1RmQThkRkpHK2xkRitFUUkwQnVXMVB5Um42STlBUHhsRU4wcmFTdWRxaUQzWXphakNLOEp2UGNpTkFyQmt2VVFWS0wvbTRRbXpzeGlza0R6bjZxT1NrTjg1NjB6UFh4OFh5NzNHMS90WFplRjIyamhrTm00U0ZQT0QxU3p0ZFFBelVqK3Q3Wlo2cFMvRUtJNURUSm95UFN5KzdQdHNwWnNxZFRmb0d4eGFucXNRY3JkYnlnSE1OcCtpenV5Tlc3L2ptMUdVOHZ1VVNxcWlxVVhOazJyQ1IzaFArRmw5UGw5a2RNV2pEZ2pvK3VUYnFEbCtiS2NYdVh2OHZ6MkdnUFhRVFZiVUFnNDlka2FqQ3YzUVJ2d3EyNW9zZ04rby9ETUN5M0R5dnYxVEo2c0FheGVrTGVhd1RPMk52SnFmMFBpNHg1dFlMZWtRck92eTVYTy9tcUVyQWIzVmtlMlVkRUtJZENpMjdZRXVITHcyMjlUR3VaRmdQWVQvTkxMR2ZVUmJZeG43TWVRVXQ1eFplVjBYOUtIVm8zaFB2dHBOeEorelZWUU5FdG5EREVGNk0rUUtGTElHS1dMUFJHZmh6ZEFhTlduQ0JIcmtqTlV6djlETzJwUUhXdFRoTERmWVIwU0Nid2l2STZUUHRlOGdUWFlseUxWL25CcG5wWi8yZHhiem80VFVqNUZtZngrQUtmRnJjZDMvNUVxYjJudmlwVHdlVW1EVFBTYjZwQ0VvZHNHaVE3cW1mQStDOFJjNEpGT09veUNISXJycEE4QXpDWFFMSGJ1Qm9wdTNud1dUTFJhRGwzREdoNG50ZHJTcmtpMnRWZEtlNmR3UkQwN2RWUUkxdnNEZytXQWdXY2RQQVg0bFllNXA3L21wRjlzaldnc0VQLzBHeE1rYzc0SVpOcXV3ci9tUmV3dllQWVE0K3NOVXVxRGxORmU2T2paM3BGQ2RNdFRSamdmcE8wMExnVm5RWHI4SWZFbHQzL0dXdVRwMW8wMVVxMjQ2Zi9pQ01ienZmL3ZRdktSNEZKQWg2VVJpbngxMDJoeEhDYndtRVN4WkVhcWkySDJPZWJwdlI3WWxrSlRvbkJSZC9lOFFTNk9ORldiUnZTa080TlF1OGI0VEE0NzVwZmJHQlg1dHArOEptb2FJRnFHTUExdjFra1JzK042bzUweGxiUFhoRldPOEdGSUE5bStTazdWeVBJOThqODBOZ0xJenhQNEY1bVlOMHdlUHRJY3VzeTk5SmNMZzVCbkFNY2RaN05VaS9jYTRqbUdMM2JXb1YvcGIrcmJhRVlRa24zeE1Yb2JZTnB4ak9oc25GS3VSbng5cnJuczEwNTh0cVZhQWZkOEdZSVFNdXpLdzdhSnpld3crOVJxNGEwUzlhUE9hZWtYbzRzR2s4cU5qWWswSTI0T0xQdmRoazRqWTQ3SDRJZUl6WEFFSnlxWWRsZkY3SmxibnlxUVVlUSsvWWdUSEpMemlrc2dNV1ZjL0FPQWtTMHFiNlRlR2pSTVhZUGxMUGFHQ01NNldJeU12UEt5cXRKMFNTWXdtOHQ1RkZDUzNmZXNROFhKSmtIWkZkZkVIM1plTXdMQUdDWjNZVDBzWHRhbjFtSGtZWDBHN1gwdFlJVzdYdzQzcm0vay9uWDlBZThFelNlcHVaQlJzYm44VG1rVUNiZ28xWHNjYjJsRXgvaDVDamVrSTRXOG8xbExaNysyMmFsQm1WOCtHcjNVditramVkUWNWMG5KU1duNmNkS2pqRys0YnhjcGtGR0NzRzR1dE5FQ0hwWnVjMVhNWE02Q2JnN1pDN2RVLzFPU2UyelNRUWdTNTVQVzFqMnRUR3hLTXNZZGpHbENpSU1GNndleWszZ055cG5ZUUlQWTZ4V3IyRXVNRlcvcGhzajA0ak9VRElReEc1OWkvMHBVVTVyUk9JekxWNzFDeEh0V2RENnRvNldxVFUzMERKZzNtNTNscWZlS3BOaEdTRVNOb29SSTQ1UlkvRDdvbmM1VEFOR2hNeVRoZElRenVLeDQyMUUyeXhnWGlRU05LQjRsSXFHVlMyL2FPMDNjZ2NsOWEzSUJhT3dNazYxYzdIcStnMXRFWUI5Q3ErK1ZmTlJvOXplVm5FZjVPdnpjbGJPeVlDM1drbXRHS0o5UDVtVldzb3dWVTZ1SE9hSWl4Y1dtQkFnMU5GQms3U09KaUsxdENFK0JZMmlhV1AyOEJzWXhZSWpxc1hyR0hFdzRwV2J1YzFSQ2lHcnJzM3BySTBqOWhGeUxna0t6SWpHT0dlc1o5dCtpQzVQaGFORDlmdFAwY1ViM1BQT3ZXWkpZTTRXRlAvYko4OVFhajdWU1NKdFg3UEkwby9heklBTS9CQWNVdzlFYnNkcVFkUDRqSFBUY2FrVEF5WTEzazRKTlloVURFc3dhdVdwcm5LYlIwUjErVEpidXA4d2VyWG10M21nSHFpcFU5SjZubVg1bEVuRjlwSFJQTWd5RmcyaWU2TVpWK09uQ0FJVHRVRE54cXJoc0dtSEdRTlF6OE1JSUlYeGFXNWVjYVBkTGlFVWZVbktKUzdzZjlRR291Z1dTcS8wd2F0RXdkN28vai9PU1Q0U29aUWV3ZFlFc3IzcWZLVGxVOTdTSzNDcmIxN21zYVdRc2p3Ynd0a2lHWjVLSkp0Rk8rbmxoVS9jMUtSZ0VOUFgxZnR5M1VtNkZidnhBWXlsc2JUdXJ3eVRHb2I1a0p2NWw2OEx0blhIUmNtRTVJZGhkZThCYmxZMDB0R2Z2QmU2RmJNaWtuZzltS01lRjl6N2d6T1hkSzVMTmNiTkEvOXNrNXl3SzZIbW04MTRwbU5qTzlWbVBocmU1VDJiTFR5ZWZFYmRQNVhUbXBNek5MSk4yMXNvdmtaR3AydUVFNUpyTjJDVWNGWDE5eHdXaldic3oxWWdZRXdCK2tOYk0vdTlzNWcyNjQyMzFKeDhaQms2b0cwSmpzQVIrVVVnMC9kNzZJeU1kTkxxb0FIeXFwWklwMS9TRXdPelQ3Rko4ODdPMU9qNDFRcE0zVDZJTURad2NteE4rRk5JN0tqYXloaHJNL1NFaGFycm0wcllobFNrQWpnZk9sNU9kei9ab3ZXN0FyNitTdlE2bVV0T2pMWlo0S2d6eWRYZnFLRVZmTktjeEJGQm9uMEF5bTZGZ1hVeHE5VEhqSE1lTDVvU1VuOEpWMXNCSTVraEZQZE1YeU55cmpMZzNQM2N6TFBCWDhzcU1hb044akErOTlDTlI5amFRVkFXOXE2L2JlYmxtd1VrOTJjTy91UmhvZXliRmd5TmM5Y0dlenFBc2l6VHNJYWRWWnZ0cU03azBVNStLdkt0L1lpOWFwcFhhSnlTb3R4THI3WXBLOUVBcnU4YWl0U2NCZlVUbXU0WStlak9IemZTWHBvd1diTGdVbHdzNktuemV1NEpHVTd6TEQwaEtpQld2emNBTGVycmhKS2ZPOEF3bDN4UkhpK1BsMXgrU1FLakJrTzBqRnpSY20wd0lrRWpGQWlsOGs2WmlQNWp2NkoyMzJTYzgvdXVjUVVhN0tKUjVQZ1Rwa3cvVW16NW5oSDVxYjZ0dVFaaklKS0pGRVRHcm8vZnRyRVNYWnRkMmdWZDdZN09HeVNDS211WVRzMG5IamxaSy9qUTJxVjZmcHV3Yk5rRTZPRWx0ZFRmNUxOV0tqT2crUDRPSGVpZjFIaGM3TDF6MUczSjN4TmRDZkQwY1Z2VGdZVjd4cFU1MnRpYjJOQitxUnVDU0Jyc085M01HNDdTKy9EWDRDQWdJRG5uc29BNVdKOE1zNGpZMlByVlRYQzQzR2luUStNbzZWSElxdTFmSlR6d0x1SEk2YkNNQ1ZVM2N3ZlJXK1FPa3F6U2VPTlZScFpCdEMveCtkeHpiZnQ2SEdubFA0eVdGS2l3dHNWN3EyeVBFRkY3MHU4WERXdU41bVAreWt5VkhkZk9FTzE1TGdPVS9Kd0hpOStpNnBjSVFrK1ltU2xIdFVvc0JHeTRkdGE4T1JaK1hUUTRYYzhyd1luZnBRaVhFczB1eG1jQ0VzZ0p2T3pnOXBZaU1XL2U1SW9sV3F2MzluTW5Fd09lUDFJUEtjRldEb1FiaXE2MUdLMDViRnN4VjRyQy8yNEcwZ0RlTnd4eXRDQ2dwbTFnSkhseXpLK3hmb0sweEQwQnhuZFRoSm51NHV2TkkzV2I3b3ZPam52UmdCTzNNZ203NHU3ZzlaOHJFWEJJSFJHSWxjU0lhWG1pRTUzY2g3cHBwUEZtTEJSNklDOHA1S2UvMGVGdUozNStGM1pYM29FMmRwWVhFNVU0U0JsenMrWElneGY3c0Y0UG9NTW1JT0cwZjVCcktMRjB2bEU0aEt2MDZUQnZpSTBoaEkxakxDNnV2TmZSNkdxcUZvZFJXcDdrQWtHd05lMUQvWUNNT01Vb1lkYXE4ZzA2U0dObEF1YUloT3RHNFR0bzNOZHExOGh0b3BYS0orSy9jNGN5MlR5WFcyZlBIK2huOE9rTis2OGI1MzlwL2diZk9CWkJYNkRFTWRtZDJ5WFBhQy9qWGZ3ZWdUbSt1N3ljaUVudVhoeWVjQTlNbTZMMWptYnFsSTZpem9QNEltKzN6S09CSTJlZGUyUWE4alBaL25Ic1ZSNFU5V2xwT3pWRUN3TzRkcncyZjJQekZVZkFDcjB3OEVsY1U2ME8vS2dTQk5yRmhxamFVVGtWREtrVXFOV3FPTUkyQTJWNC9MdU9waTZGdGVGL3hWNS9BUm02VDkxZEZGbTFYaFVpeWVNaG9WV01yRHhUbHdGZ1FJU3FWMXcwTzRTaUhyem11TVAxdWVTT0VZVTRuSk04MGdPZVd1QlV2VmFFRnF3MmViclpHNXhYM1pmTW5JN01KcENJSmtzZTJZOEJtTHlYbHE4bzRiSU9BNTd1MWUrV21nRzNHWURVTzFwTCtPcXBIekdIc2NESlVseUNyVG9XYlpJV3ZiTnpDbnRTcVRTLzJlMEFUd2sxZGFCN01DVGRGM2RYa21mZ3cwREhsT1VhN2ZvZ2FsZ29KVCtJb1B1VnFkaHpqUWdEY0cra3ladjQrQVA4SkkzQjRQbC9YazdzNmhZdlZBM2NBU2d5L0huejA1UndUWUgzaEk3MThSeUg1VFZuYnZlZ1VSa1hVcEZ6bDU4MFBtR0pyUWhoRnJudkNFRTYvVlZobTNvMFc5UkJvNHRUL2g1eVZaRUZ5NWtqS0U4V1RQbnhubW1wVmRjcDg3VEEzMktuY1pVVlA5WUl1WTBoVkdtdmJpRzg5cGp0R3NKQXdpNVgvWnpyekNpQ3NVbXRXeFdUSWVIbDFidVUyMUp4MDcyQ2dZeG91YVRrNkpHRDV2Q01obEhldDJtdEUyODFBYk1IWXFxM2UyRkpZVWdsVVl0TDFwb1R1VTJDaVhreHhSM0t6TkVyY3RVaG56MEtrSEhETlU0dEpZM1RrQ0Nud2xqZEhsVVlpSnVJeTB1ZExsQ3VVS2ZKZXo0aCtqbVpCNnJ0Ty9qbjh5a2JyazJ5eDQ3Zll5ZzFNdTh4UXBtd0t1ck4zUFh3LzJ3ajZJU2lZWVlqRTFHVm0xSysxbWREejFsMm5GZWxwSW1mTG5NRnVjRjJmVFZMRmNUSUFxemFsOU5yVFFoc3REd0x2OXhXQVJNQ0JCcllodDBNMmdQNyt3NVNuVVN1RXFXamxIaklnSzl2OVk1NXcycWoxVW9uNVk4OTh6ZDZXNS9MQ1Jrc0xUMWVOdTBGRmF0bTFxTWl6bDRZaVlxMFQwSWpXcC9LOHFIZUR2dVM2OXFWUXhHUUx6WW94aW85WXl2MW9RdlcxTTZoYUN1bVkxU2htdjk4bERzeU5VMGVJTHhKb2Rwd0o4K1QxSWplQ0pUVlJic0hybFpUcTFlb0VzWTd4S0Q0NTRTcXVRc3hsbTROYndqZHltcGgzMy9PS2ZvL0xmcFVJa0ZCSTg1QzN6bDREcVNoTkxucm45YmJyaHh3Y2xnRjZTQmpTZG1vZTc0eFp2VnpleXI1WHRjdDBlZXh6akJVM0l6Q0dJUkFocnBYV3JyTTQvTHZseTJkbGkyY1ZWdXFpNnFMRk1WUjAwSTNIcjVJOS9mdTNnYXZvVUd5cjRYK0dIMEg1cXdSUUhxT1VEaXk1VnBuWDlxcDk2MnlsaTVLL2lSbEtINVFBVnk1UUVCd2hUdHhva1BiQWZoZXZtb3VQNThNbDhhdk5CSGhwTG1xY2czV2pKV3RxN0tEbHYydUVOc0pSRlljZnhIY3lBM2dyRlAwbVNyMitWVGVrV0VwblBPMTg4b1cvdTR5YzV4WHJOUk5RYnI5b1FxNTJTV2Q3bWRNaE1aM29uMTNzRXFWaW01U3FweitvNWdGcmUzN2YxazlYMTZhZjJMZnZySVRmZnN6ZjMrb21ESWtldlpQd0c5c2VFbUtYZnhGRXE5RkFSU2k0MjZLYmVzb3c5a0MxTDhUWTdSNWJNNFRUWFYrZHhIWEtXVlgzNGNBV2twQmlmVU96akFScmtEbmlVOGpXQ2VKd2VxV2VleC9mSU1ua2pORjNmSTBqTUc2b0JsdGcrK3dJbmNHWUhJalk2cS9HdWJqZzZEWjRCb2lYck1Bald4N0VsYm82bW0xSnVvL1BxMmRHSjRSUFhoUXRIdUFHdDY0c3lkeURkQ3c4bVNBS0Zpb3Vmdk8zZHF0ekUwWWJFRGtKK1VPRjYxZEttaFphZmgwbXhSekdWdnJsU2RuUnBMb1Y1TTluUVBKekg0djZqZ1RMcnJqaGJSVUpMZTBzQlgrb2FwY1RlYXl1ZVA0YnZHZTNTZHdvY3dTREExSWp2cEl5bUdaa2Urb3NMdmhqLy9JZjlKS2ZxSmxJRXNJRnE4MmlmRjE3ZjR4bk5MNjlKanpxcU4yaFZYeXlxVFRCeG95a2R5eGdmSDJsbkU2RXd6bkJiVHNZcWw2dmJrSEJuN0tCWU9IWWdzZVBydkozZHovMWVKd2JweVJ3bEdZcS84RFJKdEYvcTBlOHdCcVJOVkxvRzVWSi9ZMXE5bjB0anRwU053N0hqZkp3OCtNakdxd3N4OXlidlY3b1FRV0NZNk45Q0RpMjVNOHZENUZucjJpUjZGNTNMMi8wTVc5WWtZOUIxbENxaU1Dd2diSW8xZTZRVW5UZXlpRjlFTG1JZWRCUDdoK28xRFRxNjVNYXJqQVBkeTJKYnBKNjNTc2ozT3gzcjYvVmVBMk1nNnBmRDdXcG1VUzQzenl0YXc5cEJ1Z3dTZ3hyK203QXVkVElwZ2N1d2FLUFZKN1NEMFlpbHBpK0NZS0oxdVBKemZNN1ZRcXFYbmpKU2VNTmRQVVB6NWdCcC9pT0M0Kzl6WklaNmhMZUNWN1ZGS0Fjc0hrWk82NFh4Tm5LOFRPVTFJZStYRGtNK3JtVHNRcE9wYWMzY0ljL3pYSWYyRjRsQkZaTlB4dWUwMnQrSDMyZGIrVXkxblFJb00yU2E1TU1hM3pXdGNqZmRVakZHR3BoQ2U4ekxTS2RlU1l5Z1RUMkxrdmsxRHE0Y3FLeFFZekpIOUtVbUJJSzduaDY4YXJrZWVoYzBRRytZUlF1REo5UGQ2eWl5NDVpRTQyaFZvdjE2eU5rWThzUmQ0MHgxU1RvblhFV0MrRk9oR1NqVTlGRVNablRLeVdmU3doNEpTb3VodWVPMEV2enBRZFdFZGRTOUcwVFlyb09rUzMzTG53NHl3UG40Z200Y0RSTnJ3UmU0RWJRYTFwNUo3MFJNSnljWEY0V2Fwb0NCa3hESVdQcXJCbU9zRHZyUFN0QVdSREw4RjhuSXNUWjlPbUhwSmdPd1ZHTzRPclgyQ3Nla292dEpUSjN6RjlXSlV4dkVLZVlRQmhqZVdwdllrY3AxVUJVNVBEWTRrN3prYUdDT3VlT3VibDhucm03VGRkejF4ckZqRno5MmVqb0VDSStZMkpXSWxrdkNrVUROQ1BPVUJQODdWNCtrbzdIWi9ZTnFZZ1NoNWYwUEpkZEk4eGJrMDliSFFJbU5uR0oyZDJGSWQ1bTdaeno3dXJYSFpWbHdMSWMveFF2bHhQOFIzRDNWZnk1RGdUZXFSYXFrcnBvUlU0dkdldFNPWlhhaXl1N2RmYjMyVWJrcGJHVHRoMFA0S3ZXeVc2Znp2OG5ocEZUQ2NNaktlbUxrUmllMGxqNDMzYmxmbDhOK0RxY2lBNEVIT25hTS90Y0RQNEVSVlZ1WWhjOHlMQmV2cDdCR0tuU01pV0xZc0RacU8rUEMzT1ZFNndnSjFXWDBudW1OOERXOWwvQ3lPSEdhL3F0UlFVNTJYdW9ucWVlL1RSM2hkdXczSUNMVmRQdEtRNmlZV0dhUVNwSHY3N2podFNMa25QaGFxU2F0ank2MkJtUDhTclpQY2wxaVh5dmNONUtFd1pid1g4clhZeGtJY0ZlSDVVK0JHaVRzR3g1OWhOY0R0a3JaREg0eEo4Qk5RR210MXZZR05rbmY3ZU5MS0xWWXBlaWExMSszUXpQVzJxSjZOQ3Y0d1FCdEExWFdQa1RwQVVWbjhoK3dwUExlcnh2OWVmN08rNFBveW9JRk9BN1RCUkNRTzViYU9TdXN2eTlOaVlVOVA1ajhLZzNWLytnUlpzT2pxMVRzbUYwdUxNSjhKai9EdUFiN2tBVmxZeUZXTit1cjVicE5RVG5ZV1dLL1dpMWNSdFRDU0ZRNm9vOElDYnFDYmZhSDZVTkU3WlFYYzFrUUJTVTRycmNUTHRFc0NIcUZRT0NEME5LbC9GdXE4OXF0SDBWMTJvM2ZJT0RYUWppR2Vrck9VdXpkVURra0ZVRkwxUCszeVc1N0tzQ2FMaVFQQW5JdnVENi9CVm40elVyRFdSSDJJbEM3YXdSUlJBQ2M1Y21rL3lienRkZm84aWVpTXdYWUhHZC9ZSlpBZEJ4dWlJNnhlTWxjTzhhYWJEb2FwWFFIc3Rsc3VlY1FyV1o3c3IvT2JRMEJ3OG5keTlya0d1VlIxWXlxR1J0MGk0Q2RZZ2xMdzNwalhEWDZLUXpKUCtwcUJwemhNK09MdTBaOEMvR0xpQzZkSWJ1MDZnQlhIcFlueFVZbnFMd2liR25rVkJ1L2puVWFNckNtd0c1RmlDM2t0UHJOTXRSOVZmWXpkV01IYktoMDhQUjRYYUhCRG9Qd0N0eUsxQ1cxQkR3YVZjTlpYTmo5Y0VhTGhXbVZ6WVFmZ245TVNSWGRNVHY1YUErcEQwUGF4cGkzQkZuKzAwQUpOZ2hKYXI5QUJwd3J1MC9HeG9JWjRMVW1oWWJzZUNWOUdwL1FIKzV5c25NTHNFeEFWYjM4aUF0T2NjcU5td09yOTFCblFET3NJdFZqSmhyYkZLSjcrRm56Q2h1NGlKOEtNeks0TlliRGJMaVBpMG8rc2dpdzlMNzNYM0RCSVN3MGNqaXRuRWNCdDlEdjZZcFVmNkRvQThtangxU05MTDN6d2pBbitJTVhQWFFqRTkrcVFLNkpyUEJpTk1qNnZXYUdjakNGRzJMV09XdFFrZDR2dkhoNUhpZVVqVGtxZ2FlS1J5eDhURzNtd3pSMnN2ZytMK0pVaUFXRVJyTWFlOGJ3dmtkYzd3RFdBS3VZNFBRRkNaVmhSOTNGOUtjQzc2RkVZaWZyN1F6YW4rMk0vT1Q1dEVpLzFPZE82cUxKVGhMNmh2YWt0eGNJTk16OTYwdFdjZGdxNGZRK3hmQmdxOHJDRjFBY0ZZSDZCbFowWjlpK0J0K3ROQktFWWhnb1ZQV1ZuajFLaWJCZHdmZkkydjBuRGRmaFg3dW45SXFyUG5ueDE0MzZneWQ3UHE2QU5VWHoxL0NybFdrNmdOeHB4ckZZMzJPT25VSk5UMDJOSWRFVmpHbmNtbFlvYzE2bE9oczZKdkVvT3RlQVNYaVNmQkgvUWxMZExITUF4eWdNcHp6SndPKzkvS1hHSXp3TGdGSThTdlhBZXF5Rk5kZ2VxWmhnZmFiL3cxbDVwRERMY1E5dkFlUEZOeG9YRDNNU2ZWUy9IWURQa2JFV1VNTmsxTjZWOXVnc3kya3MwNjRxcS8zaFAxSzVnYkZyR25rM25RT3R4Qnc3MWtsTWhJcmNXdXdHbWwyVElUdWJpNDBFVERWNDBiRDZsVWpYTjJLU0k3Y2ZNS0hNWEtYWUtWT2dJZU1SYVRHTHg5RHM4cXQ0dVhucVNwYy9RS204cUY1VjF1TDFNNFBBWjZvVW42TVdKTUpZUEhPaUdieWtJbnptY2dLUkUrSWp0OWJ3cHpmQnh6MkdGVzF6RW4zM3NFT3BQV1RCNHdadm9kT0pwYStmekxoR01aYUZJNTNZR2hweGpTajZIMDZ2cExCbHU3U2ErSVp5U2NuYU1RWHF4bENrdUxYODdIbldnd3RkTDF4R3d3RG9BRE9NRUFPZU5oc0VlTzFFaCttcUVMVVNDbUdMWkFOUjJwNCswdTM4bUszaTNwTmVLVzhlMUdqbUhDMmpOODU1cElXQ2FIcGo0N1JBWjV0SUgzZ3NrUTJ2VmlCeTdYampMRmRKU1N1VEFmVG51aXJ2RnJrNWpWVXA5RUl4RjZrNXo0TWdwWEZYY0NxY0Rubm9IdHpnckRBS0pTeGoyMVppSFVxRHBWTmV5eFAwNFUwRUV5VFV1Ym5IR3hGejVsUndCL0JzeVpDMTN0eSs4MW9HYlBtNlc4c0RUVG91azBUUG9yTWVqYTZDaUVLNUlCaDllUEpvbzVLY2tua2p3ZUI1dStOa3pja1A2cHczWXI4eC9xc0QzQTNicXYxa05qSkdGeVJOL0JwWmNtK0VOclZyZEIrb21hYjdKZndmOXpBUFhWRTZ0UnIrSUhrcmRCUXVienlab3dzVTR3ZGFlTnpDb05BYzBvQ092bEdUOEN3UzNoaU9rNkJNekVMVUk0bFNIanE5VEhQSDB6WERHdmdJdGlrdXo5WHQyR3FxVWtoelNRQ1JOaitGREllbVlOYnZDcklJSW5KYWVoQktSWXcrdFQ4WiswejhJNjhCNHdXMnNvb0VSVTNYWlVndFJBa0pUS2tHb2NKUytuOENYVFVFNng4WFdmVGZLS1R1NEFwTHRtM2N6cDNZdlVZRGc4VjAxWHhiUTRxNzZudFRiR2VoSEIzcnZEdzYxcXVzVVV2T1dIbmZ3Wkl3aUtaQkpxb05jdXdSY29LTG5rTmxGcXhCYkJtdGZtbVpVcjdvZW8vM2RuZDZNd1hIUWswYkdhN0FjUEJrR1lnbkhQMlVaWkd6QVh5eE1uMS9FeTMzbjEyTGlXbVg0SXRWMU0yU1Y0QlRERkpieCs1eG5mN0VvdFpoWW80U1hTNFJHN00wemFsbzh0QzFMMTVEenFheCtxOGtoQWQwQk1ldnZhUWIxQStTWXE3ZXREZ0R6bXgyekdOVHJGMzVkVy9kNVFsTGZnV3kwQmZwMnppdVp5OVJ4dnRBamhMSkFKUEZOWXQ2ZVBZRmVvbEpiUW1pdWpCZmNRUDdLSHNZWHFFdVBRU00vU2I0UEJBRUh4Z0xlaXE1SE50T3RFNCs4dFdaSFJ5aFFtbEFrb2ErQkxKbW9FSFZRSUc4TGF2ZC92NVEvQWViVktrZFo5WnpGb21tbXoxMVNaY3VVc2FPakxDVEhwTWp4NytRazVMZitkeUVkN2tNOGprclJ0SjZkdDBvL3ZrQ2hCNm9EclZTeUNWdk9vaDZJeDRLVEphbUM4K3BuaUtSdzZab0prWWNhZlFmdndlaTA5UHJ3YWlBSGRLeUQ0czdGY1RTdjh2MWFlQjRMc3VJRXo4RnpBaEZLRC9FbzZBOTZSTFowRHgwbmF5ME5Lam5pSVVtUEpGaFhFVE1yaGtPaFVDZGFsMWkzRnM2dDhQcy9lcVhNN3Z1V01zYlowM2s2Ny9tVzhZR0czTmZ3ekxLMHB5UVR3SUdiV1VwU2FYQWh2UDdEa1JueE5JVDVTSUhSNCtvOVVsNkxPV2tiUDJXVlJGcDZ2L0pvZmttU0hiN2F2ZjJJSWNzMTIvQjl4Ym0rd3FOUFlubEorWURJT2JVbXo3NjluaWtYMVorSThSSVdiYXRoMnhVTGg3aHp5YmJnNzRJTDQvbGdNVmxQVUdCcW1UMmExS2JpVjM3dk1BN1R6SXNYZ2NDVVJaSThlazhHbXpCYTgyRDVTVmRZeEI5dDNmT0I5bld2MGo0bGE4YjhORXQxdFhCM3Z1R2hQaVgzWGFsU3BpcEh6YUs5ZUtEUFFxc0o5Q3FoMmhtS1k3QmprVTVScG94cHpQZHNCbU5ab243bVZPWkJhN2srVzRwaUhQUjUyTFJKME0rOTdoMGkza2xnZnVjZWRvOXNicUFabzB4Qmh6bFZlR1QrenlCRkhLTk5PZXJFVzlEYUczbmdLdFNvdTJGKzJZa0xNNWloZ2tyUTJPc3BZa0tZNUdnb1BVZGtwdFkxMGVhMjZyVlR0Z1pZYUJFYVRDZDZneDNQclFGOTd3TG5tWFRCWGxGL2pTVWlwWkt2NU9CWTdNLzZsUXJyVURKTWh5QmtlcytYend4bGJLbDIrVktpZDZLZUo4Rm8yUlFlUVlUbkRkc0JWRVY1RmdKRjlrZWtaS1k2djZ0bjg4UTNiektjOHp2MUlwOXpzSnZMN2FPdXViNER2dU1uSXpNM2NjNFlhV0MrNzlPdUdTdS9NNzRYTXowM1laOTdiT3BsYWZXQ1V6cXBEWXlxV0s1ei8zYW5NcHhlNWc0NWlCbWhYWFkvUkJKV3ExaHpwL2dGdDYxSW9neUhLeUhWWlJqekZhZjgxQ09wZlp3bmtvdktFRE91MzlRSGhXOVoveVF5SHlTY1JRYUpkbHZZcUFsNXRUdXRYSGZZK1QwcnlCWUZBdU9rMGNobFhEVHBFZ0ZjbDlCUFdaUFBleGNxdHlKSW9ybHhhT0Y5a1FQanJDU08xODU2eVJ5Y0NETzhSTGl2a0dVQjRZYVBCZ2Q4R1ZyL0RoUXZxcjZtTDBYODNKODZldjdDUHkzS2hnR2JjQlV3VDczald3Wk1qalE0MmZpcWM3QXFON0NETDRzMU4zUHhzRDNyUklQbVdvUFdqODFtQlJHYmtlekRrNS9aUzk2bGpvbm9MN1E3WFF5OHY5d1VsSWkyaGhNNW5jVElJN1NMQTRmZ0IrMlNmWDlsdkI2cXdvY0JxMGx2OTZITFJhWERIN1IxYzYvOW1RdU84K0FIYU9rWk9QcHRtbC8zZGMyOThTSHNhSVBFd1dYRTVOU202K29TajdwYzF1eVRXRVhsZGlqYVZsSTA2dys0cWVnbmJybE9iOFZyMm5Cdkl1RXU0djYwbEZ3bUd2YzQ1WHlycHNuV2xGL1JrcWdaK05rMGZGZE42RHp3Qk1uM1h1S294ejROWFJhamwxbHhSNHpuVkd3MU1WdkxGa01XU0FIL2FWWFN5dmZ4VEw2YjJTR0pvc2JrUHRsdzhOVWpzdXJVNEFraXErWGNxaHJoOXY0STR4emh6RG1KWkVxN1NhWUJ5NmlIeFNBYmZXZ2FkRmtXS3ZIWG5ZaGxzMmFxTEZMVkRNNWRyTWZsM093MW5NYjFGN2VqTmdTY2pxdFNTZVExSlk3cDJoMlR3YXFBNmEvMEVIckIvUGxkZ1ZZZ2ZIeTFpNldYMUVSV080RmpFOVFLcUpVeG8ydHFXekZoT01MNnh2OVpFOVFFaUU0dURWUVdrWi9KcVVnRWsva0YwV3hLTExVUkFWOFcxekJXSTd2VlYvdThzd0J0UU8rZENTejhObytQVXNERklhTFlrSEhQd3A4TlZxd25DQTFPcWxaYTR5Y1ZwbkF1MXNUV2lMNWxNNnZiM3VkQmVqaHQ3SGkwZ0I2UGhqdDJyb2huYUdYcWRpQndmK2dCMW5PeU1rRStSbWZhYzY4T2lGemdyeG5DZ09SUVpCRkVIdFN6d0VVWW5lMDJyZ2wweCt3VndaZUcvRGE0WC9SZWJBSzBCU21jOG1ZWUxIN2lUYzAxWjh2ZjQvRFc5MUs4c3EzTkNlNG9SSHVuUHZJcUwwSGE5NllrNVkrS3VhT1hMek5GLzNJcXFsTWFxSG9MOWh1Y2R6Q2JDZC9lUnJFZDhycGZ6S0N3cml4dytKd3FndzJKNURoK1MvNVBzU0RHekl1WkZBbURSbW00S2ZjVXVxQTlpUVF0M2dxZ2pwTFd3OGRxS0xOTjZoR244cmN6N2NHTndrd2U3UmdYUmtKQWhZWHI4ZVlkSnJsSVpLWExFWTVXMGMzc0E2ekpxWENrbW5GcTAyVk1yRVkzZVhkcFdHLzJVQndtVUVYNlh5SjVtWnVOM0lmZ0o1eEZRN2FneXBmYkRDNHhrUlpqK1ROS3N3Z29LSURsN1l1NFE2VWc5aGVBS1NiclZLMzU4QXlKTnloZDlGN2M3YTBKL1RzRnNobXdoai9hekkrV3FXM1FmeG5Gd3BQWjg1clVPM1JpeXBkNjl4RDdHbHhrUVVzdWRLZ3MrQkExVmtxYlY4WW5NbkJnUkRtT2w3eWN4U1dSTWdvT28wYmV3RG1pM1ZMaS8xZG14TkxURnB1cTF2ZHNvRys5aHhSUTdvQVk4bDlkaktYN2VsRjZHdGRZSUdya2tvUGlaRkpPTFlRb29EaEk3dk1PTllyT2tIOWZqd0VXY1RKaWg4QjJqUVk5YXFIRm4vNWx5aVpPektNaFZaWFFtZ1U2VFV2bzVWa1Zac2NzMTlLcmEwR1JhalVkVlgxOCtOZjlpVVZqNXpxUmFENjhKZW5ESndMb1l3MHVtRXBRdTd1NWppV2x2enFZZ0F6WWx3elhXZXZONUIxZEJEUDZkY0NGeWRlUGNvNjdxYmhqTU9NdDdrSWdlZlIxMVROZHFNaFJyT3dXYkZISGZEVVNXNmE2KytZamdMWjlGWGVBMzZTWFNPaGhoNjcycGg0VWFNQzZXZlpJcHRHTkxzR1F6Z0dDVXp5N3JZSXU1T2JqcjMrcUhQTHFxTGsxb0hHZFJZbVdMdjF2RmNpTXY5Tnc0VjdIZHJwaitRK1QvaEpvd1VLTXFHK2U3c3JSOXRRMXZ1QThPUm9GZ3BrV0I4N0J0NHlxVmh5NU9GQ2gyNXlGRFVxZVVnY01XaE1BYXZVcWFuRWFNdW83VjNwUnY5L0pPNjBMS3U3M05LUllEZ3E5Qm1iTkh1dEZqRUtiNDVBdmV2Z1FTazNHUXpIdUVWSW1rZEt3Uk0yMFhuc1dKQVgrdzNtakN6RVk5eHl1NTlzVHNWc00zMTZoVU40ZE5FNVNUWjF1d21neFVWazI5TkFQZzc5Z1FrWXVSSGt1M3hJWGFBVTZSVDROYnFIYy9rQ3BGTjhYQk9YazAzdkc3S2plZ2ozYnNTb2RZZTVMbHZPem42d2phSFBYdmNaNFNxaW5rcGN6dHV0a1lHSnlESmpKZVZDYUcrZzhRZWkrb0MzTWt6cm5VU1R2RTBzcGtlQVlnbnI4UkJLdDIvaDh5a2dQODFiOHY2Nko3elFPRzFIUHFkVHJjaHJTNEtlakhjYVVFMzBFQWt5eTVlSkMvMGp6N0Vkc1pseHJNSWhDNURDSE95MmRrdHRGakNIaEJ6cytqNmhDRFlhMnNWVjBUMFhFUEw3K1JWRjJDOVFEalFLZElBV1J2bjRhcjNYQUNuU1JZYVkzL0Urd3duTHNKWlo4ZENWaTBUOFVZdEpvTTBDK0pvVld0TmljdVNJWEZOeWxoREVYY05oSC9MOFJBOWN4TXBRa2lzbHIwT3ZEWVMrQmlYMWRXM21TcjVHNjhTN25aa05MR1Y5RElWNHhYZ0lkMFFybUxRLzJxeWhtVXFlQkZOek9TK0VWR0lOeVFzU3lYVmUvSWd3L016NFdvTkdxS0IrQ3FyOTA0UWRROU0yVHZDVVBmaFRQTmF0bHczVkFGWnBjcU0xaVJkTDJRMXkvSlRDMTJOUlpkVE9ncWsvTG9aUUljaldZT1RzQTltdG1udGlqQ3dld3NTUFJzVWJuUzVYdUJpT1FSeGZaQWdXY0ZnQ0VLWit0Y2dnK1B4NXpkMlFra3ZxWnVobmZjRHVHSWFqdEN3RlVscHY1cDJjUmtKQXRMUGtTR09VWnl4OG1BU2I5YnREdDExMFF0WStFMXJNZzFMeVpya2g1YWdzMjNFVWVHU0ZSd1huK3dpTHFxcTU3aHk3NUtsMVhQS0hMNWprU0s1S2JBbTIvSWloSnd0dW5lSVZ5TkxDRE1MQzArM2tmZi9LSlVNcTV1eFFjdXIzbC91eWJuOGwveVc5YXB0OHk4WjJRcTBNVlBPMW40NW5BTk4wL0RjUDBUQm5UdFhjVEJxQlUwTGIwOWQ1WngzR3A4MmdmbW5tWHpwRVpQRWdNZDJTcEY2WFlsNXp2S0pGNU5qVi9XbTBjY1JCellaMWtDdjRVSjZpeW93dDA5UG13RnhKcG45QS82aWdiaTJzcDNYQ2dCajJ2aTVEeU51YnhIMk1Yb0VkU2JQN2xKSmxFNlBUd3F2VnBrT3d3c1c3a1VnVUtYVUx4NjJISFE3N0RxOXJmOFlzN0FUSnNVcWZZYXFRam9xaU5BdlhCSnJ1ekx6S0RTbU9wanV3aDVDQjZOWU1FenJiUkFWZTl0cksvSXdlOTJ6MmgzQXhsSFJRWVZ2RTRJT2cvbVBDaEMzNDVnTDVsb2JmaVpiVmxraFozcDdVMnZJaFpKMm9NRGJxbzBzT1U2cjI4bjNkdFZ3ZTlUZEFrZ1VISWNuNEFZejEwdXZZZGh4NGZZVS90UmpmNjc3NzVDZ0t2dDdwVnE5aGl0cXFKYmc4NEUzdWJBemd2OTVXZHUydUd3eEJRT3RpLzdaVTVqajlZNHlldnVWWitKWWRGUWYzZHREdlNSam5kYjduSUt4NlU2K1FacGZFU1QyUWhOVXhPakIrekYvSENLeS93dVFLNTgvdHRsbjVGNmVsSGRGU3p1clNWL2VqWUxZNWFjenJZNkc0cXVnT3dTOWlTVHFab0M3WFhVUTFtWWQrT2d0bmdaTmtGQUsxNUhYR1oyckJNNTBHdy8ySkN4dUt6cTdNK0FCNFdaM0plQy9vMy9SWlNsUzZOQU9VektQVmhkQmhJMjgwS09Xb0VpNU83dUZWb04vSEJhVk02dlNWQTgyTDJPWmpNOTdTZC9RVllIUmFMRkVkUnZkU005dEV2MS8rRWtMRnA5UjRKU1Uvb1d1SVF3YUFlRytGelMyd0N3dU9vSVZKamFhUU1aUGtuWmFGVDBoYWVVSWgxS3B1WXZ5YjVUaE92YWpSWG5pS2dRS2cxWXRHcE4vQWVRSGo5UTc3NXdFd2NDR0ZrUkFMT1Nta2hnMjBtV0JLZTZjZUJHRFh0TmlaakE5NmZ3WVkxQ3k5WEJGOXRoMHdoQldzaGNiYUZaY0xsdmlGZjA4Mkx1TVVud0hxZHdJUGtBS2NkWVdYdEpzMjFmQWFKOTBjaWgvQ3JwaXpUdkMxQlZJWkdKbzNDWjY4UEpTSWpIL1FrWW4vUklIYzhkL3NTMVNvbzVKVCtkb3ZqdXV1ZzFiSWpKTzh0N1lidUVBanowVFl1V1FZelRPV2VhZmZJSHYxc1JySGNBSENWYkQ1bjl5a0dGTHEyZnFCQ3RIckl0cHBmaGUzNFVrLy9BRFZ0Y0ZTSU1jMlh4amQzUnVCTzdTc0xTYnpZeXFwOEFNTzc5RFZZWnlEOHZhQ0tOdEYwcWZYdGhyNWp4NFZ1aEt1VGI0YlhKNUR3K3BCajBmV2l6ejlvUlhZYnp5bjc2VElaaEtBSmFtOGVsWE5qWnY5UU5hMXdydlM1cWZZQXZjQ3pEbEdMZFp0ODhrZXRiUnlWcmxpRWJoU1BvNGZDUkNmNUxONGQ2Y09vZGM2a3Q1L3JORElZV0Q4eE5FQnhOQ2wzbU9hZ3FKYU1TY3lrOXIyTTN1ZWdHRjJwU3htSWRtcEtYb0NZdE81NjdBc3ViTkEvYS80dklzQWJOSFIvRWxwTDUxMFJDbVp6N0RaV3ZhWnZTYUpreGdjRXcyb2tIcWV5NU9Xanh3RG0yd1cxNW80NGFpeTJEaUpUbjJETmpkdUx6Q3lHNHI0bXF0SXAwZ1E2L2lrYndMVnVMUHlzTzFUYjYxekRyNTlnQUovK2R0am9oMFhsUDNtQkNvZHAycGlJWTVpWUQzWEZLV3Q3T0YvS3VnYWVhdDAzYTltYlg3TitNZjRxZEV2Rlg3Tlg3UkpMcWp5SFltWHA5cll3Y1dkdUVLQyt2M3prS1pnWGFqVkFqZXVEenFMSTNFOHdSMmZIczByZ01ydkkxUWR3M0dvWjRlN0l4SUZxdWVGSDFSTWVuMStEYlpsZzgyR3puWnMwL21zZnVQYm9KSVRJZUhnbWduUkZOOStWdjFRRUdRdURhbEpab0xXWlFMVytlbTBvNXdWN0Z1N0g3a0ladktmVUxkeXVvUDh3RktEejE2QnZOWkEvZG9oa2xXNHBRRlFHRlhSTkJXWUZtb0NyVGNKS3lkUkYwYVVPSWRVelBuUS9HanlEbEZ3cGNvOTc5TEdYdWU3NTBENWxhaDl6OTU3K04rcVdlZjgzUGRhSGZ1aTFZTXg2OXN6N2J4bFdDVmc3VjU1SVovbUdrV0hkWmhsNU9MMmZBVHRLMGpaamZyQVNKTUlKb1ZBdTlVeWJQZWtmNXg4ZXdrMW93azVXVGJhbkR2V044Q1FnVnFFRjZXblZ2dURMaThEazIwdkhCeXFGQ0VZeHNpZHo2Uk9EKzBPdVFVaDJHbjNNbWoreGhuZTcydGpFU1FvNitzcGFhTitydTRQWkp6V09WbG5wNXRYSnM4dmpzVUdETzFaL1lUZzkvcTFLaDlaSkphUEM2REdEbE9rbEo3RjdGWUhDOWpUTFpMSGthMUtRTms5TmpxZlBablZOUG56cDlyYkM5TTFFNEFzTW9CYldEWGw0bS9aN095bmFkWW9HWTNibGVpNFpWWm56RWZVcThEMWY5TUpZRVRtV3AxWFp1YmZjTFV0L2Y0VUh6dDMrMFFOaVFSTnk1Vmw1bEVoQXpZVWJBSGkzMFZXOER2S3g3dlU1ejJmRTBKSU9UdjZlZXJHek1vK3Z6WnFaUjlXMG5jbytEMmJ2RWxoMVVSbmt3cjVMbFp3T0JqMUQ3RncvRlRwNFFyR0ErdHFMYmcwY0JVeHlPSS9tYWQ0ZkpqT0R4Ni8xV3hVR1JZQUtYcENBSFlDZTBvaEFWREIrQm11QlRoSEF6eFdqZ3JGS1pCb1l3Yk9udUkzY1BrMXZ1RHRYQlVZV3BjMmFtMmwyVEVvcTlva0lXekMyM1NZZzA4YkN5ZG5iZ0NWcWMrdTVPTU1NTjZWVGJiYkFRNnBIclpJMExCeVNpNmFrVmVCUUE0NFZpSXpFOFFwNzk2OUlDR1hUdUs4SmNPN2F2RGlCMmJtRGFJa2tvRWJUbk9vOEYwcUN5dlZ4bUN3UGxpR2Z1WHlqYjUrM0VXY0xJWDZiR1RodjRKZ0lMSHhOVmEzQWozTDVLY0FYcWpubHVVSDBhZlprbXJPbHlyN3NWTktINWxFUkNjVmFWSERRQXFyQVRuUjBmR1dRTDRsSk9scWJMc0lTY2hoK3liNEFlclVvT08zYnYxR213eHIxc01qTFdzVWtNNXdLTklZRE4yUVdBcDRlT05SZUhqMzhuL1VvZEF5V0hjR0JnQms5WkdJdkd0VmlRN0tHZ0Z1ZWFVWW5MT2JsMFZUbEt5NUM5OVRZNlM0VFI3U2NCdkpxYmhRdW1EQXQwRGRZRUJKY1RpUnpGTXlLQ1hEeHgwTEgyRnFpRE1uSk9VT3NmeDZqWG9iUWhSZFZPLzR5aWx1MWx2c1ducEUvdnpNWXRmcS90RVFlR1Rsb2w0b1puVnJQQ2VROVdiUXVoOHZTeDB6L1FJdktJakVuMElNYmhWcDlldDFWd2h0amNmZ0NxOGs2RzNmY2JVMzhmalpFS09hNlRUam82dXNpc3RCUktJRHkxODg4Um1ld3VMNTJWZUQxSWFjRWIzbnJmSGloYjJJYlpITHNjamZ4Zjl4UVg1LzlZY3llRFA3Q0dQTWlCemViN2FwV3hYUnJsbWNNQjdmcWUxY3lUTTRaSmJYeXlmRVNkcm5zUjM1cXM0aGtoZGJUZk9KM2s1bm93cDF3VFEyZUxobDFWNUdGK1BUVHN4K0ZJUWo2NlJ4UVV3TXJ0VzcvY1VNcEwxVm5zUDJ5SXhiWkR1ejAyc1VNQjRBYlBkZHR4NnlLL3pYR1ZPeE5iVDZsS3BFaHFacSt3Y2hvaU1ZbDBGZDFFSUZhVm0zTmdXUURQRVh5clA0ZWQ1dzRqMy82OUtGYjEvQTh1YnhHci8wVzdEZzRjMjN5MkozSXIrOVVmeithRU5SUit3NGkwTnNzMy9rZGtHOUFBZkJxMW1GcnBBUjlsL1pQQmk3VWhxYlBkUEJNODE1WmYvaDNZUWlrdE81US8yRWw1Q3ViSkorMjZhSzltblhFMEJydlNHcEtwVW1pNWhEN0R5YXRwbnphZ09uc0orbXBSMUN4L29SZnpyNTJvbUFZN05MT1U5ZGlVTTN2T2FUb1lQVWp1UjJxb0Ezd1c4ZkRSVjVndTdtNUtrd2phUEJ3OUJvejY4TlpwZ213TzkyQk5GcGR0em82YkZJSlR0cWt2SkczblBHV2NEMklMQ2dCeDllYmkyemJGcUhJR3RWK1RqUEwydDZpLzNBSWJ4Y2Q3b2g1aW1vNjA5eVBRMTczK2g5dzJ3Q3poYll3R3ZqVDJwQTBSVzRrQXk1TmVHeTFZNllnNHgrMjdndU9oNXMzM2poMHBwcHBtYVowRXhvYSsyNWM5S3JZc29oaTYzSHdmVFhaNHVaMG1BazRqOHhJQ1RJeVcyR09QMXNrVzlWSU0wdkZoK3pmSVV3QmtONVdOQjh3dlozczJOZHFpb2VZbFlNc05keXYyaHQ4ZVZUZHhJZWFzYTM4ejlpOFhHZW1vTjloSXR1WTU0WU5BQW51R3B3T3VyLzBHeXBlUm9VcDlKVHNJNXpEaTQvaHZYenlkaUpRYjRxMlRmWW5ZWUI0YWFrZFVqZ1EwQjhtVFN6eVh5UEo5UEl6MENSOFBjZjF3V3ZmeEMxM2NNQU5sU0lUU0s3TzFOMHNHbUNqUWJseWRpVVVqZmZuNzlRZDBnQXdJZ0dQUkFLaFJURG5zOXQ4ZVVBa2hPWXpLQXhaSkYxSTF6TXFFRUJyZEhKZEhlUm5uQWVCODRha2RsTTU3K0NFU3ZDczB0aVlKL0FSdmZGdUJwc3UyZEJyTTBabXhvaS9RU1BjbThxVy9YT3RsVFYyUjFxV3MwVkZROU5aOEdtMy9Yc2ViK2YyZkF5ZTZNeDFVTzIxTEdRWFhLMWYxZFpFUTlCcnUrcDMrb0tPUzMvemFhZjE2U28yd0hNczdOeVI0UUhJYVVFdVhXN2EyM0c4Y3RZdjJRL0prb2sxdFNZK2NVbDgrT29ZZkg2WDNmNmFQb2NJcGw3VHE5MWFnd1o5T0RORkV2WU5sWTJGU2tzTW8yb1oxNnNPSXQ5aDNaRUorQ3o4dXJmWi9lQUlkQ2RLUnl6M1BxWXk0d3UreXR3QU1qWk9wRndMSklwR3FEcTRvQTVhYUVsWmVhclVhRVprVnZGa3VzK1lxYnB4L0lJajBIelRRM1owaWZlcXRCeDE3Z0pSbEtsbTZKWU85YlJ3NUdPTG5ISkY1VkQybFpPZFRGOHplM3d2L01wRXdpb1BrczNtcUo1ZnRuaCt2aktVWXlOSVIyaGdHdFBHV1JkaUxMRzFTbUJJUjZFbkZxMGVBU1FPeUhXbmp4YjFoRWowS05HUTcreWNnK3Y4VkxZdUpCU2Rsc1JsN25wcW1HcEd4SmRQVjFzZ2pYb0pIOEUyakU0NlFqTVNwL2l4ZklEN3NtZGhPRjVQUUNnTDdJdnREZmN0RUtqalY4UzlPV0U2VXVnMWE2aXlOTnZvbENFYWtOL1pBWHVNWUR0eDlDSWJDNkJtbmwzUVd1VDd6ZUJabDVKa1dGS1NhNDg1d082elpMN2hBRDYrc2lPYTAvWjNqMldiZ2dETjFsT3lRQjkvZVVsRmFvcEpvYXNudXBUdE1QOGdKUWNOZENWVXliMVJxbUpSRE1sM0lHZE0xdk1sam42eU5mODJ4cWhzdHRFQUhGSE5XNk1Eci9CYTllbDFOZDE2WXVQU3FDcXhjMWdyUGp4SUxLdTVxMkM4TWJRdzF2cFd1eDBFMlJiNThLOGVYVGxUUjEyaVJPNkI1cUFLTDlvUVRsQXE0UksyVXFpRmtGU1V0azhlUGovZVpYczF5ZkxSbUpzMUl0akZRbnAvQ2NzQzRVY0I5NGg5MVBIeFdXTEVCbHFZNXkyZ0N1YzFDK1dDQ0M2ZDc0RXFEUzc3TDlpdnRDc0hRY1JENVI1bVlJTWhXWTdqS3dUS3FFTTh5UXJseGo0VFhSODVCN1Z5REpRTm9DdkFNQ3BaTW9jUzZOODV5c3Q1OEdtS2N0ZG5qOUhlSTRHOFZvTm1oZXEzc3U1aTluRFd6VTVnVkhmdjlScjFIQWVVUU9sTGgxYzljOUh1c2pDaUtUcS9aUkNkd2V0K0VHWFl1eVJMYmdsYWxmUEQ1aVpTc1dCbE81WFJvNXZabGpWdHNOdGsva01pem1hRHAwa3ZReEwyN3BFcHNjTUY0RERoRFk3cmtZSTRVMk0vMmZFTjlCdmZxY1ZZZlc5aWR6cDZ3NzI4RkFWYXVLTHM0VGV1NWdLNExLbjE1Sk51OTlRN2pMWE9rT3hKdS9uc0ZEei9Nd2NpYUJhb3FHK3l0bnVPbUxDRFlwNFdYRTc1Z2FHQTkwZzBBQjRtNGh6OEJDeGU3NjljblR4bTkzVlkxWWZaSVFNeGJiZElCeXp2ay9mSVE1QThuenl0aEpka2ZINXNMM01GRnVUUUlzMjlObkdreVFHei9IVDh4NXR0WFBnRDJmbFVXR2IyaXVxaC8zajBydjVrTkpxRVJVZXArMmZUTWVScTZGMWFWSmgyZ2c5d2xTYmhhUUNXVGVvQmhVRFhQeVVtTmVmTTVQQk1sMXAwUFFWL3JEcEpxeThnNWEyaDJvb0xBaW9iN1V4OEpKU25nTTlibE9uWW41cTRjQ09OZTM2a2tUTklZSGNjaWdVdnplVTU3TXcrMHprM2R1QmFNRzBMZzMxM2UweE4wVFVoN2NaamM5TnhkemgwRm9uWUF5UUgva2YrNWNGY1I0SGdGd0Z1azVYQm5mNVVKRHI2dW1STVF2NVZvUnVDNHJ5SVYyay9xdkRHbkVrc2NVLzFudUE5aWdpZEJWSDZWZkhzMXJmN0h5TTFPc1NYSzZIemNLQlNPK3NWSHU4R1UvSEJnaStLTmp4L0I2UkxtdWZZTExvcHB3d05kT25TZGh5MmpONDhIcjFLd3hla2N3Z0wxUzB6RzRIS25tMGFadHBEKzVXQi9QTzIvVnUvNk90SzcwclkySCtUTElXV1BreTF4MVdGOVN5T1lzeWJ4a2FBeFNiZFZLcEZrQ3UwYWtIUllYR1pHQTJHSTNyamp4cEdCc0tWVEw4Zmt1ZWVkWjBHWTVyaFp3VXVhYWU3MHhDQ3FmN1k3YWxFSFhEeSs0Qnp1R2hTbHR6eGFpZFBXUnd3VjJNM3hxMWtKWlRmWFZEbHJnZkQ1eERhZSsrZmNiL0F0YVdHdURhT1pIR3JnQy93Y0tlUHJLSUZPeE9rSmhyVXN1aEVWNEpNK082RHkzc1dFcFdhRWdieS9IK2lsQzdtbmdtakxpd2JhZ1I0Y2tIYzltWFN6a21rajJVcm1jMUxuU01zTkNOem9aYTdHVEQyRC85SmJNMVdmQ0VXcTZrdDZTaGhwcmhpZnovTHhZcHE1VWRBa3I4cnRNZnlRWVFrcVF2MTlBZmJMdUliY3hna0lweHU4aG02ZC90T2RDSFpmb3pRRU14d0kyczkrS2VIS29rNEJoaHdMa0VwdU5uUGQwNmdiMUc5RjVuVUo5MStuYnRkczVVbENEQjF0RWU0TGU1VmpqTXdIS05waHQ1UHlEQ1VqNnB6YTY5ZzRKcjBBaURwanFkR3NpbFNiOE1FMll2bGdNZEwwV1BPZGcybGlVZTQ2YWQzR3BYVEIxTFVmQnYxU0llMklOOVNLQ1I3MTZVMzN1T3NPNDE0bGxVVGViK0xKQUthSUVFNUcxc2RPN0tJeHRIUEZUZ0VBL1BvUnAzSjRZUHRQSWhQaUpqOG1SVHB1a2czb2JSQ1gzbnFyRlo3bTBBcFhSTmZhZjY0ZVhQb29KblZCemlrYVVlMkttM1FWYVVmd0NMczVYWDl2Uk9yZVQrQ2hBTm9lQ1NnM0haaFN4TUFZTmVraFl5UGhlWW03c3J2NTlxR0Q2NVdoV25yZXpQb0VvUUQ4WnAzZ1U0UExEcGJ2MHVHek5aZDl4ZFB4VVYvbEc1Q05YYXN2MExZYUhFZTQvajI1c0YxS29oQVFHeTllTjBORTUvMXFmWW5ZeHRCVVRPcmMrMHNQcml3VzZiNnY1dFpSK3R2V3phTTJPQ0tvMkF5TnZ4bkNneGMxWUFvTlFRRDZrTUFuSG03Vm9qb3dTeEw1b0hzVXY1QURVbjRtOE1ZS3lsZzAwRlRWdHlGbFV5VFF1dmRXWk9VNHhiVyttWHdVRTVQTzRXYld2SHFaRFNZazI1Tm40eDhqYy9mOS9KbE52cjJkUzdiVlpTOFlvQXZYcjVWTmZSTXFDSUU4ZFRIc3RaVjBxQUYrdEZUUUZ4VjFGQjhuWTRNK3BubkR4MUZqNGZQSGl3M3cvR3VmanRDQ0x3THZqZ1podVVKeGpsT0tOR1pRVGl3ZVFqNDBuM0JHSUdTdHp6TFhUdUpQQWpJdTJQMmRBblFrRUYrL1U1OTA2QldqeWVHTHJYVG9WSzVVSjlEUU0wUnBqdVVjZEdSZ2F5TDl0Yjdza3hoWFJjekpXYUFyNTVNZEE4clQwSUh5R0lLWmhJTXg4NTd3SHc3aG1xdy92eTM1VTVLek9IZFk0SWozdVFtSnhQcFpyYi9TdEhoUkQyYSt0b0ZZUnJpSExJMzF1bmpwN3R5TjBMSzdDK2h3VVg0KzBTMHZyR2szTTRVQU9SajVLU050OWtRUnNPWEhlUUJHVTd6Nng3UWdUTUFEYWMwY0tHVnpuR2pFQ0ZWSEVGNzNJUWNQZktHempiak81U1FuUlpMRm1KWlNjQVRpUjZYRnBZWHRSb3UwVzBJVEVaRXFzTi9yTm5sM1QrcWpiR1I2MGttdlhHaGdjMEFMRW1hTThGMXh2VXJQd2xjVk5xZ0djWWZXbktnUUhuTjBwdUlzZS8rQnhVemVlQlhmcWJrUGpMYytYenVpNjYzMEQyMlZMaE9EM21YY0NJdTMwcmdBVG5LSlo0bXZ6MHZvT1FtWjFGTWJUOCsvMFowWnV6UTUwU3JNUW45Znc1T1lIai9EQU0zRFIvd2wzOEZNcXkxY2FGc1hwdm14cTVsUnZRU0ZSWno3U1NpMG1TSUZCb294VEVaV2tWZ2k0dlRIQnBpY3B1WWF0U0tYYTZTckJCbTBacXkvTCs4R01GQkhlZTJadGNiZGl1WmxEYXRQTW4wM0J3UzhyQ1hXb3Vqem5tNUZWQUpuOW5DM2ZqdU1jYWNMZDE3NVlvaDVkM3c0SXFkU0lhQnVsbEdyTjZuYjRBQXRGdHFDa3JyZGR2b1IyUjZpT3ZoR2ZkWWxxbDgyTzluVXJ2MWJiSTMxMHNCZU9TV3czdE5vSXRjQ0szaDJZNjdQVEZndzROZmRTSmpLTHg5T21zcXNDRk42cXRBM3FjUjRwUXJqOVh5b3hPNTliVU04amZWdmVMUFJLSDAya3RrKzNYR2dKcjJOMlFGM0N5V3BtcStvN01nSVFoVzFPMHFwZTRsVCtmdit0N01HN09Id00vcHpmemhTK0lPRG8zdTZsempFd0h6bnlFZkFWWlNzaTF1Uml6VXRNS1BTMTk4M3A3cFI1TlNadXNvRHRobmFIVjc0OUZFMDFjdElQOCs3Zkk2c0JOUFgrYWdGYUtHNWg1VGUyQVBlbGlCODVEMjY1RUJWV3duWnBTZ1ZmSXFsUExSYlJ2bTBXcW5ZdUNUdDRBcFcxUVpBMHRIKzc2cC9jd09NOXYyR2V2V0pvMGxOMTJLQXBWN0FXTGpqUlhHSmhSR2VualJpK3JtcjVtVUJmajZqK0VHWVIybVNJTHlEN25rL3hsYXdweFFZMzEyeG5BWEJKRjUyQ0k2RHQyVWo0N3cyQWVkU0h3aFUxRjdJbHNpSW9seklmOFRzZ0dNbjhZdXR1T3UvdG5oVGlMY2JnT2k2bHJFY3JwSFFueW1xaEdWOU5GcVN2OXZVSEQ4R0prUWNmbVp0MW1YVnJVTXlFZzNlL0pyVVNTNHI1c2FCTkVPWXE2dmwxbjljbEZVZ1U3OGYyYkp0RGhGc3lGSEhvSXZjM1dEWlNNUHBLRzkrUlE4cDZSMzB3ZjQyVjJTYW1lOEpuWnM4Sm54UXVCanVmd1lyRFRPTlJ2WDdWeXVCODdkdFh3Vmw1R1JOMWg4L0ttSnYxWDZQNms4bnJwdTBlbitkSzNGbFEzdkRyT3JRQ0hTOW9DSTZDNzAyYzAxTFdFTkVNVzE1SEVzeUN5eVF6RlBmRTdIMkt2cXUxdWc4WU9jY1g1RjBjem4venRnTjZ3ZG9lb05BVWc1T2JPbjFJNit5YnM5V0ljc1ZUL2xUOEMzLzJvMTJkUmdrL25YUHlwOThya3Q0VVhVVm1UalVpUG9oQnY1MkZzM1RCVjNFVm1yZStsZ1MvdERGektYcUxmaVhkNzBXaTBkU1libDJnMkxudFAydDFBeHErTm5WOXU5WUlYTVBDbFJReDVmQ1JqMFFyYWt3VmhLMnoraCt6S2k0Z2lGZlhNNEw4NHFUaXJpNzVmOUZzb0V3K0ZPMFZFQXNTM2dlZzFXM1VwTUVwcWFsWmtSbW54UEhSZWwxOHJDY1RiQXpQdWRRTE5OK1p4d0VLSGhvakVEeDVjSDNyK2s5WDNzYnBTdkQ5RC9aZWhVVFhwU0NMQjc2MVVYWENSU1hxa2JBZHhlOFJOUGZvWjRsMFhnQlZ6NzcrcHI1TUZ5Zy93a20yVnFKTmFpUERjdUFYVXpwMTVRQlQ1Wk1jRys4eXJ1Y3RiSVM2K2xFb0NaSElFRjc0aGxMWGtremY5Uyt5VEwxMVZXZlFVc1lrK0xHQS9SWExiVzZBR012YmJiYmExU0luTS8yWTd3WG96cnRzM1FRMEI3WXJqYkVZR3M1YzR2cFhjQ0RsaCttMFk2S3VVVEhFb29ad1VNa1RzeENFbjV1SjJFUFppZHN6d1htMlVBNzlXNklMNHFuL09JNDNYakZGYS80akcyYmFnaTk4K2NLSGtLbTFHK0YyTHJxNjlXTWtPZ0hRQ0ZPY0NPQmFoY3h0RnN4ck5wQzNMTzZqZENrWWtOd21OZjhKOTFTQTZvSm1Pam9RTzhvVC90TTV5YVpkTCt4QjBTdXpRUmorZklLZzdoOWVCRlBmbWtjYkpza0FSdHFrYW40dWd1K2Roa0lUTXQzdzJyQnBVWjVwdXpzM2grWkpERVhqenBnVDRXYnpZMzAxdHBmNjI3ZHBjdWkveUMzRmVGVUczY3p4Wk9wazExWEdjWTFPcWZiUnh3NHR5OVYzS3psaVNiNTdaRFBjZEdxNGJkS1BMaEVicGNCSmlqUm4rUWVmVXl5ZHlEdnVYMXlMb210cWNRa1lZMDZyS0s2Ky9BMzRXMFpHZjk2ZGF5V2RJSTI4Y2J2QksxYlVmN1FjUjgwSVRSbFJKOHM4N2xPUUxxM1I3UEprTmxyRkFYMDhQeDBrU2xiRk13OWx0SEFhWG45SXNIR1Z4VWc1OWFTN2JJajgyMWJrWGp0KzMrT2RwK3JadnhVVXk4dE1INUFySnJZSW1zM0FQOWZaNHFwaWlPczE2OUdGa3FyVmRIM2V1WFpIWkdyZWh0NzJkMDNlZ1JpU21ZcE5iUHI2VzJGR0NFSmZMVzFPdjRuRjhTUDYzNGZQNzlUbXZHWldrQlhiMEpVcXJhaUdrVVREZmdLaDRXMVlNcXFqNnJqc3VDZFVkcWNlQUUwUTFXbmlLb0MxR3lsTnlsM2VwcFYra3c1TncxaUlMWVVBV0ZVbHpHa1BsT2FjTzAvZllac1FDSVZoQ0JDbVlBZnR5R2JzZENZVll5YXcvT1RzMUcyWCs4UG9yUEdPVHc4a0hqeFVUUnlPNTRBZUFlQUM4Q2xSdWNEWndodXl5VmRqQnZNb2NqNVpqd1I3ZTI3WFNqWjdJVlJ3djEzRWtXTU4vbno3UjZMNENBZ0lDQWdJQ0E4ZjIvU0IvdCtpcy9aOXViK3o2OTcvYjlNSCt6M0IrYjdmcE4vMFBvM3I3ZnRHcjdQcnE5KzM2YUQ5dnUrY1A3UG9aLzIrLzUrMzdDWDl2MU9mZlY5RWYrMzJZdzZiNExxaCtwcGw1cUVzRmcxZ0xwR3NTRWxWMkNTMVZpR1pjUEVlVUtDdjlaaE9TRE9KUDZUaWJEeUlvcmdMNW4wcU1Yb0NWQ1VvU3AraUZOeEphSUphaVZLZE1vUWRRWEIxblFUT2lMcHZMTmltTjVoTVd4SklVWDdkeGc4T25Ib2dnOU1zYVQ2TFU1bXhaWWxGZElVZHJUZmRzQjhjTVYxK1pWWGg0TUN6a2x0d3F5VWhUZjJjZjd3dERPQU1Kc2IxUHFkMkNESWhxNzByZmpqb2lCcE91YjAwNWFEZzRuZGV2Q2pQbCtvK2JPU3QvY2xhTHg1RWVCYW1SME15b3NBTDdUY08wUUZFY2RaR1N3RXNUN0lmZk5zUnZMYncyOEFsV2tGSEZ3VXRWejVQSktDQ2tKQzhtL2JMS3c3YTRrM2plZ2JQVVRUa1FzazF0VUZCdDZYVGtINElNajdpSlBGYkh0aXhzb1Z5NC9TM2RMVkMzSHFXM0I5TnVXWWJ1ckVZV2lSOUFpUWZieGVEZEZ3R0xHNW5QQm1FcnpveDZJc3FMNm4zUExNZDhxZ2pFM1Jxc2ZVTlpPUWdsYXNVNmZta2t2U2pmOEUzTS9UWlRFVTQ1cENEK056TEJlY3pPWG9rdExtQXd2L0Rqa0lDMUVOWHBEcHNhbkhaQ1BYbU1vTFNheENXRCtpNFpjcWhIZmttaXZ0UXEvdks5a3RVdFIxSDlyd25tM1hPNyt4a0pHNkpob1AzbzVHS05pemkrVXFmTXJEN05BeXQwNzVOUWdOU1l1c2RYcjloZDVmQ0o2QVV4QWx1bU1tczk0eG5LMnFjUWoxTFkyUUNmeHpLRnhrd1FsN2Y4WVpIQzZ1RVI0b1ZOTDR4aUZIUWc1OGpSdlVnVzVjTnpkeVFsRVZ6RU9RTGRtVnhvaGNhZnJCMURoU0RkcFpWMW9UM3hUTjlBYWloRFBBcVNwWmpZUkZCbXl2SDluM0xwZGdEQVg1ZzRsckFsYzlOeUk1d0JiQlpYSzBjOCtCWksza3BpV2kwZ2VBNmg4cDYvUUVXaUs4QVhXRzFSUlR0d1dXZmxSczdxOFRCWGlwKzRRc21uL1NPekt4MlI4SWdERlRhdWloQW9Wak9GUy8xR05jaWhKd1UvVlk1NHd0akw1aEtJMDFuWndHYXhGemd1WXVsa2hvUUlrYVlIa0tNZTJDR3dWREFlTFZwNVhOWlpLNFFzcStrSHRJcHRoRGhhd3pRcm4xYnVyeTI4ZkJUcmhNWWZNWWhBS1BQaUJhaDJYc3NvbTczaVBTVzRZQTRKaDBYNkY3S1pLRHZ5YkpzdHJzNGl4eGJkQS9WRlRKRzlRVzFRK2JVdEJGclF3anNmaUoycU1lT3NpVjl6NFk5WCt2ckE1SHQzZzdCUDlBcVMxclFGZFJYMzNRVElvdTJ6SzBtR3BXWG5zVUl0aDZkS3BCZGNUQUZoS1NsQWEraTdnbE9xRUJxTDV3cHJwZys4MnBvVEpPR0FwYUlrNDFqbVJ3VC9XdERiYzVMM2xsTVcyMk5jSTZTWHVhWm1tY2VYWWkxZHVpdVUxRUJPZVJWQTR2MXZaQTNBbDdXMVB4QUlwSW1hLzZQMW51aUp3UklkbnJ3bGFuUjJGNnNXWGVhMmdOK0gyTWk3SC9PUDZ0Y2RBSitFeTY2dXJNenhKQWplNTVNRTQ0UURDeTUvaUxZUHZhMmd6eHRZRkc3Tmt2SFNydHduWDBpaEZyaUhJR2FvUGdzblg4NWM4SU5Cd0ZTSzlyWUQxWmZOeEdiR2hIc2kvaDZUcnJrL0lNS09wNGlCM2ZKQmRBUUt5cG0wNytVbWkwdVNsMmlCOGJ2U29zcXBNajAyMVR5N0NkNVJnTW1YOWNGcFBqY3VHQTZwQXBqOVdSQTRsSXF3R1AxRjZFdEJ4dnFHOFFYQzE2TU1IUk5IZE54N0pHbkFqa3BENklkT01mWHdEay9wbm93Sm5DRFBsbGExQURES2FMeURxSk1JNmFEOWtkQmdEN2JhNWNBbVpFeEtsMVE1SzhicnhQaW9xK2VyaUh0WGt1WCthQ3JxZjFIUU92MDdqcThFd0RLblBOQThVOGhPaHN3K3hoYzR6OVRMVHJLclNGUzBOc1RidGQ0Rlc2NFpxa2prMmtraEZ4a0kwN1hCV2NEUWs0RUtLYmFzOE1WcVgrTGV5ME9JSWpocmhpOWdtSVBwUnhOVEJGZE9FOWxkQkptL014Z3FtYXFRRWs1SG5hMFhuREw5ODJQa2xkSnFwMWVXQ2lLcnAvVUtpV1EzUC8xSExmUU5vRmxzZkd6Z1BUd0JKSEoxMVpxbWNuRk9FRThGaVByL3BUb3lwa3lTaTdad1pwY1Ztakg1K0s4cXJWMmR3UEFKWEphN3BpbHhEQVMvY21PS2EvM0pkWXJsdG43TVZ2MVRpRGoyZWhCSXRGbytZaTRBMS9aUkxkOEkrMHJqQ2U2SVY2Mk1rRlYrMXNKdWI1ZUQ3R2VnTTJFRVZRTzFHUzRCSW9MeCtjYldxS2xaRlVwUTNOV3dRNFhOUy8xdzQrdFB1THpVbVdLTVFoS25rN244cVVzcFc3VEZNZGxLbWF2RzRpWDZqcDc1d2xoamE1c2lYSERVajZ6VWR2U2ZSM2JGcFVoZzRIVDBZd0drWUExZ21nRHVGYWdvWitYazFHQmQ1UmhhZURrSEtiOHdLU0NXR3RtQlFLWlhnY3F0Zk1lQ2JOZ3VBZGpTcUpZbG9aalVnTFVVQlRQWWVobUVkaDdBV3NQdzlRbWtxNzdBbUNucXdGV3BTZmJMWHN3NzREVzRoZGtKTHhYTFVFQ0VveXhHZDdBR0UzZWhhMFhKZ0FLeDFXOEJBS3NTYlVad1hPMU00eGZzWFZ1TVM0OW9JY2habnQ1R3BoZUZ4UGxJcXZIZEFUQnJVam5uR3RJQUFKWG53Yzd4VGhMdGdDTEdnT054d3QvdFBaWDNWamZMaldYSWNDUmk1SXI1cXZtRjdyOUdlb2owdktsVllBUXFxZlB3RE1sVVNIc05EcDdERW01amw1c0pqakRBTWJYWFhqclByRzcrYkFxRHFyR3c3dEJiMVZGeHdCcDU2YUwwaFp6L2xudHd3T3p2NVk2Rm9Cc2p1Vm00UXcxOUY3SEcxdUI3V04zTzBvV0tsMGdSNFJPTHdSaVk4TlJZdEpxbkdJN2NpS2ZrYXJFTU1GRnpqOXpiR2xuSktpK2wrclluZGRqUmw1WUlsWGN2Vk5MSnVJWkw5Nkphb3dNdmwzanpVa1JQUUtuNE90TTFibUpnKzB2TTZ4QWxJNFZKZnkzRjBFSFZvaHQ4WXJVc3o1QTNLZDFLOXZXN2FqNW1nV0pQdGJtOEtncjc0NjFOcjhkbXBNQ0ZmYlJDbVNCOTlLZ3BEQUQ0SjdLd2FicnRMQk5hM2Z4NDFuT0FtallHMG81SitkMGRvMEJpYlpaR1Mrd0t2MGVlQlBQdkxEYjNXZmIrOUtSK01GdlNJd0NqN2RRT3lZSUJ5L1JsWGp2dVJhVkN6cG1XcVNZaFRXN21DTmZJZEJtZTRXdUpaUW1ISWNCTEVoN1RHTXdYb2ExMXRad1ZOYnptTmlpc3BacGlTa3gvWWtsYmhCTWg1czBTdmJBS0tKMHp3U2ZyRFZqZ0o4Qks2WGZuemZTTXRXRzRldTRxOXAwSlUzSUp4YURrYTk2MC9YMWJGTmRzazlVZ1pDUjEwYit3NXB4cS8xZG93ekhLOFlGbU5qZmxoOUtwb3RFcVZ0dkdkdE43VUorTUd6QXhxUkxjaTFjQ3VUUDZON3QrKzR2a2tjS0hQZkVORGN2MzNCRFlQNWJQc0RNOHRMUWUzTFF2RHpyNmUvY3YvZkQ5Y1pkR1c5RUh6SmZMeHZHS2NtRmM1U3R2dDAvaURRY3RCaUQwQ3NmSVc0dXZIRUt0WjdJV1pBRjJLaDlLWEVFVCt0dlZGZld2MnBwQ1RPd2dlQnJJQ2hKL1gySm1wb0RuNFZ1WTJHKzc2SHdudThFbC9QSjB3Kzhpb2lzS2hINFVjTFMyWnppbHdYeW5sOTJrL0RZa01JblFwM05LcmFnZkh5ZGJtcHJtZk1ONlNaTmplSzQxTnp5MnJjSHo3WXgwSVJOczVROS9HczVybjZuZ1dBVGN1cC8ySTFxQzBIK2RSWlJKRzhxQVorVll0ZWxHRlhmMXd3dlRVWUtVdG95VE90NFBWWkw3d3RNT2RDWE9mNjdkOTRUdEJhU0d3azdMTW1sTDlhOWVFTVhHb2FkcmpSZVI4NTc5NmlFcUQ2bHlQWmpvbkRWdklyWlI5ZkQ0R0swUmlHRWNNR0ZwbTlzOE1pWHNaMGx2dUpCQVA1QjBKeWZvc09XU0NGS1FzVXY2amNxV01oRG9QVy9IMmpPOE9RT0txYzZRME5FNVN4c3JMT2ViT1F4eUlyU2JUTVZoamZWa0p3L1BvMWFLUU9XMEw4TExicmM3aHBJajkwMlNHYlBBTk5xaE5td1EyZEsyaEZQekJjYjdvZVdsUkV2ay9JQjMrR2FqYjdGVEJYQnJSVDdCV2NVMDNIYjdrTk51TmFzVDd4Ni9zVHdKWHV0emxadEkyZWxkbWNGVTBGaEFxdytyQlVCa1BmR243dVovZ1d1TDRFWmxEN2dhQzRELzNiUnJpNTFrUnBEdnh0ZlBtTUxMVDFTci9LUjZNM0xxU3F2MWQvclJSWXJ0bFhNSi9TTzNQM01udUhtUVlNWGJBbW5sTnkwZ0xXTEFxRzNKTlV3OHlURkFPSzNqVk1PVUdtWUlHMG5JM3V3ZDhWQTBtTzh3VXliZWJTS2dYajlFZ2VsMk5RVjY2bnVROEZ3N2E2UkIzT0xndUl0N25qbHZVSTZ1ODFVTGNqTitVVkZBZEFiQ2xqbjR3Zk0wRWtvLzFOVW4xckdvZ2pVTGFZbDFzV1dTR2g5T1Rhc1ZKTHRISDc1SzZMNk5YVCtqcnlVZFIzZnMxK2VtZzZtS2pBRStzb1hMcGVrMkZIUjRIemdqQzBsazhTTTR2b1BWUlNVcWRKanpzM3ZkdGZhRmtLa2FYc3dFQTI0bm1FVkNwQzRPbUtNd2lJZWtwV1BPTjNPYUk1ei9CTnlrMm5aYVFUSkhzeDcydkx1aW9NRDVrQityKy9Qc1RsUHNRWm0zSjgrNjhsL3hDVm95MGJwWG8zMWVvS2Y5N01ldHBreVpaeTdVWEdVdXc0ZDhtRWxPY0hyTFVBcENjMHJPWWl5WkUyUUMyd1FvYmo0cFNXcXF1Z0VGNFBjWmlBd3dBY1lON0xVNmN6bngvUktaRE1XSVRhT3dVNm8wV2VhenVjcHBpckJsU3RraStzeGp6cjFzcVNtSUUvU3p1RHBwd1VacUJJd2VaV0NNSmk2dTFHYW0rVForRVlMMit4ZDA5dzZIMUM2L3NxbmEzeVYwV24yRWxPek1xYjRaVFp2OE1VR0NrQ3dzUHprVjI3REdxc2NDV2QwSVNFR3F1M1lRSGI4eDBxZWRFYXZpMDBJWWErV0JlNjE4Y0hOdXk1eThoWjE2ZExGSlZpd1hrUGZ6cFFyQUNHaEJ0QVhiMmhoTVd5UnRHZ0NYaUFrUUpQSGJoYlM0aVF6VG1kL0pLaXpBWnB1aXMvMWdMakw0QjZhVnhQd1BmMDJkVDhtd2NpalMzNlI0Yzd6a3Fxbnk3bHZYWFp3MTZTQ21ZU2ltcmdza29Wckd4MlQzSGlWTWU3WWlGOGp1NTJUWjhlR2VTcmVoTUlMS1FBK1ZscXpwRGxNT1l1VDZxcXFKZVJBcWRUUmtSb2FOQStGS0xuTUw2Wkh1V21GTUM5cExicDRCdmZvY3oxNVpKSDQ1UWtiM2E2c05FSUxCUWxwbHdwd2c5MDVnUkxoYUxNK0x0MDVsVWgrVkFKZjBla0FiNXVWaURoU3lpZGs3Ni9EdmEzODJQaWhMSEovcUMrN1FWVVFSaU5EQW1kRjhYTVBGUVZmbHdWMEdUdnVHUlozNTdiakVya2dPVTYya1orWWVXT1ZScFFNY0hRN1hsQWpFeENDZHFYVUNtbnBuTjc4dE9RemdRdjVQVjFPZGJHbjlNV2tqTmpaZHhWdTdCek5iZFRhOHBmK3gwczg1SVFLWmNyUEhxTFcyMGVNZ0hEZFRPSnl2YTR3RnRmR1A5Yzl1cE40ZGFMd3dtUEN0dHRXR1NZR05WSGN1b0JPWVhxRFdKc3NSRTVQMWJ0b3hqNTdjNjREZnQvMDNxb3BzNmY4SWhOMTlOazZJNnZRTmhlakpaK0hWMmJJLyttcFdVdmJXazgyVXIwa2lnTFd5cm1QQVU3blU3dzJBSG5zcFVRdGxJTXBSNHZPb2twSElNVmZBN2s5VUd0dkZKWHdlb2c0VzJ1YkU2bGpueDVEVDJ4TmlidHlUNllZK3QwOFl3OFpTd3UzczRzTWhDVFdVaU1heDNJcWRtczZoM2gwc0xEc2wvVjZ3V2pRZ1BkRTgwWkFoRU4zdnRjZkZHV2dNbW9xbGp2eGxxNUVib1oxYjlPWjV0bVRub1dvQTlHOFV4NGJRbnE0NFc0aFEzT1RmNlJ3emZCMnM4REhmQUhYY1M2bmgrcTF2OWlYWFpxZ1FWU0paZFJCeWJqK2xVK0g5RUNQU21ZUlNYRk5hVUJrS25Qa0ZNZGxGSzZnWC9ENm5zK0hHWVhHNktvWmRLRllGSzU1QzdLRHM3djNDdFBXMTdxUWkycTlHVzdLZEpqd2UyK1VpNUk3ZC9XODJFSHR3ZGJSV01jZFVLZGdhMzlzdW8vRTR1ZnQ3NS9qRTVKQzZzRWJPYWIzZ0ZpWmpESnR1UGNtdDBTMHNPSUNRdzNhekJ1Z0tFWDNteXcrRmxkZjlJUGx1a2JETFVEbWg4QjdqeWVxVEczWnhuR1QxVTNFeHh0Uk9Ca2dDOFdUbWMzb2VSNEFvY2ZLTGdzMkJzaUpFWDVoa0grNkVzWk40MGF6ZXpUaFBOTWZEOVcxYnBrUFNyQnB2cStEa3V5QXJENlUwdldRTXE3MzNnOE5RdXFoN0FOY2xZRGRSVjkrSTNjajBYSElBc2R1d0w4cWNXY09aTG1ySUtUb1IyMFpMQmo2NlpRa2krUGRXVWMxTUpvYU9OM0lnNm56MVRWZTV3UnNPQzhhVWlUSnc4elNqZUZJbVNmS0E5UW5SM2pmWHlnaUlEN044QWpxeTVVNm5GUU1uQkN6MU9jMVpNcTFmaGNKdzBLQm9oendlUkxpcVkyLzRaNUlnZE5ia2NhS3lCRmFQaHd6ajJMb1EveXR6SHZISlEvcWdwcTNvWkFiU056RERPSkN1cUpxZmkvTzJvY2tFcGYrcktJQlBGMXduQVRKdU9lczBORzhVdGpQVDM4R3hEckpxelo3QnQ0eS9keXI2dXB6Vzdic0dUdVpTWkgwcTVMUThpMHVXOVloQ3lncXQyMkkyMGxDNFVoQ2d1Z3NGclRibTZWYXJrdGZRSWJ0dTBlWDhQc1ovcVZiV3ZNQzZldHppV3hKMWkvbTVNdXdqSkRyS0JzZkNIVVJJQTB3UzR4aHFjdEI1ZytZWWhVcUxuRGpQSUx2VWEwYjVtQ0FEMXFPSi9LdjU1SUF4R1pMOGd1Z0xyK2Naek1sZlFJMGdrTmtuRGE0cXZmS2lPQnNsMHYxTEh2Z2NoU1FiNG5sdFc3b3FYNFJZdzN0MllCczdlVzlMOE5TK3hhT0VGMG1CNmxBZUIwZ1Q5alJEWmplRzBWU2RGdFRNMUdpS3JKZ3VKY0xnQmlxRDFnVlRvbDRFbFkrTlFtLzdHQUo5NDYzY054VUZQeW5LYlVrUnpDM1Ntek1nVFdadURCWWlWRnlqclZWZXZma1hFMXpBaEtwKytwRllNTUVpRWt0bW5UWFJuL2VpV1FOOFBiTWFnZHhZUFN5U1dMWDFla2RnNDBCKzNvRHRxbnVxMjIwV29peFZ2RTB0UWlMbVM1Nm5IOXAveUZCMWd4c0kxRDM4WUp6dzI2elJ6NEJGVnlGRUhhZ2toWmZjL05oSUx3VEFMb0FBVStjaHZrQUsxcEQ2Y0JzZ2o0VlZML21DT2VOaTNHNHR3SE5ITis3OE5XS2pFY0VVcSt2ZEcyN0w5OGpCcXJkeG5iR1Jkc2FuNVJDcHBsL3hyeEtpeFJyWDhibElob2FkQ3QxcFZMZDduaS9rR0FjTDNGMFFtSXFucWV3RDM5dXoxK0h3c3NlTTkramd1c0I5UTFuZCtHNHlIVXBzTzNtKy9kSEk0RFc2RnhDUUIvbmlHbHZhL0MvaDB5bUpkOWdTR0VsM2dkNU9LK3lKa3F1QnlNSlNFQURvaG1weGVGWmQ0ci93TWZMNlFBc1dQUExmZHI4S0ZuUS9JZkNzMHBiMUg4QmkwM0pGdEpXTGhQc1BuZkVVL1JPKzMvelZzeVZESkg2SVNLc3kwM21WOWpyRFQ1YjYxS0dkRE4zZFM2bG1rZjM4K2RFbGUvSURvVzZOSW42YVJFalpsdjdsZUJ0S0xsN2NPelpGN3hWOEd0cGg1MWZWU3hRR1ovUFBTL1NYcnBsUzM3dnowYmI3eHRSY2pUeE42T0ZvWlZwTlN4MEJvSmlOcVAyWW1JUkY1L3lsK21FcWFUaWorSUxWTHBYcU5seHdlZS83eFlaQzhqa1FzR1NFZEw3aHJVaGNzejN5clpwb1d3ODhGSzJOem9YTUd4elBwSjNzUVVJOXlmK0hEU3lQMzhzU3dnemJ3eWhZc3RYMU8rWEV5MmhNemMxVUZvNTJNUDhMZVJHdy9EeXRNbUhSNml3V1Y1dVRKNE9SWGE1bEU4MysxY0JpWFVFTEU4bmlPY08xSlBJZFNnRmdPYzdodExuVHFGYW93UXBGeFhrU1ozUGExUytlR1NyMEhxWkszVEhaUU5EaE9zaHNXTFQ1aE1WVlZkOUdwcWIwUUlqalpiemhoc2lQWW9RNVpGQWpLcDBqU29PN1VmTW91Q2orVWJNdFR6c1VYcXc2bmRNMFpjL3VHNURJZm1HdHpvaW5kQ3EzNHIrOFpFcGNiMC9CUU9UUnJIeUVhMkJMdk9odGs4ZTg1OUVlcmxpYzRybjJRTEUxRVNwQ21QeUhNZU5adHBtTWQxeHNyc1VhTFFFekxweU1XdlJkNDVLRnZqN21jdWJ5Q0x5cWZ2MlExemdmdXNpclROREQ4Yld1ME9reFhuZTk3ZVU5Vmt6U2IwM0RCUWZEYWluUldGZWtUenMzQXJGdEduYVFabUdvQ2FWMUtYdFUrVUhjQzBMcTgwLzhtNWtpQlE4N3RnL1R2VitLbDNxSmk3R2swUmtydFZRRkV3b3l4TW5iSzhKNW11RjBQY1lkdWsvYmFSS0VjenY5TklFL2NwOUlSR0NiNlpVdXJab0FjeG1Hbkt0YTdIN1ZXbE5WalBDV2ZocEZoRHFJRzI4TFdpRlR4RjFxcHlrekgvM29JbHhhWUdUaHVIYWx0ZFVBVEN1N2w3NHhnWmdWbDlJQk1RRDFuWFhHNkpUbUk3V29Ec3NyY2VwblcvZjVRM0htSDVUcHF6RzgybktYazBnMjBzdFRacG80cWlkVDRvaW0zSUF5eWFTazVock9HNEZFS2pvcm5kcWNWbUdjUUR6OERSdXpNdWMvdzZMYUlvVGdtUElENGJsbU84bHFvRS9aZW5mNmxoMkJFMXZQL0d2c3VYWDVwZlRJeFUvdmRlSzdBTVI1Zjl2RkJQTU1iWnRWUis4NWJEQmpnY3JHQ3ZFMEg5eUs2bGUvZ2UvMHphRUpjTlNmZUw5VGlFTVJlNlFQQ2ZnKzNEaFhNdEVQOE1rUUVaZEV3RkZkK3BRSmFDMHhaWFFHRlUzcjl1dEpMYmpCTGp6ZDVlK0Z2S1BNZXFaYXNTd0J0anBEcU4yY0VCNEwxdm5QMTdIQWphY3FiNnp3SFVIL2NxbHYyQWg1MXZ2SkFpeWpSNGR4ZUE1Y2NaVis0VDFNbGIrSjVBWVQxY3VNaFl5QlFQanJxTm9TMXpSUmhzU04vc0l3dGVDUXNmZEZtaFZkSTZ3WjhJVk9CUDRiV2FkdTFETHdCU0wwL0ZacTU3NDBNUlM5eXB1UFdmbE40aHBqWjhzK05ZR0RwVk5Yd1BPSXpPdVd0cmlLaTF0akU4Z29rNEVQNFBoVkIydldMTldDWmZSQ1RPaGtoMXhuSGY0S0M1QWNXMm51cnpqazlhbWRkYndGZ1FiT2FEamZpc1pSQ3Q3a0NHTTdBYXpXSjFIOGJYYkNKTmhVc3VMQVF4Tmx2OEsyT2ZrUkxUb2dQdDMzdTM3cUVxNHROc25nWENwMUVlR0ZRMFE2LzFPWXg5Zk1aWWI3d0pJS2pKSGRYTXIzR3JVNEFPbHhpTFNuTVBjWTdyc0JWZWY4a2hsQ2hYN0FPbXMvTm5Wb2xid2MxNHdMZDQ2SzZENG9FN2JVcjlhUldPeXNQcDZZbTlPeElEb01UelUrc1pnd3E0RUEwbUpvTm54MWJuOE1rb1lqSmlJKy9hNmtmN1dzVkN5TGhiTWwrYjVCb3VETVBCM09WV1JDRjJKdVd5bVorVU40SjdqcXB0NG9mOXJmWGtmdUpuMk42cThnbmFQQXgvUW53WGlya0lza2xVZTEwTmZiWWdZaU5PVW9iK0F6QmZTcHRURDYwckMrRmllSGFuMTBPK3hQYzBNNTJUZ1BiS0VEelRNWEl5U1d3MkJqTldSWjMyL3BLdW1FK09vM2VCMHJQNGRDV1lEWWZlMVJCQzlnZzE1ZENDTDJjOThVQllXbGJYN1I5ZmtLWit2aEVabXc5Q24xcVpuZmFoUzdEcWRyNDlUa2Q0cXlmNjNUMnhNTVRvVGR1UitLYjdBY2Z0dzVqOC9LanJhMXAwM29OaTZLRVlnZVNoY0lxeTBrN1p5bkRvK1kxSzd2clh6UmRmUWN3YlFTUHU0ajJBMU93S3ZjblRSdFVrbEhvRGpSelM0Y1VpRXk1a2Z3NS9GWGRWVXRWdG8ycjhVQlRoNEREdnFHekVmMzlWUE9NOHl6WFJOU3dtL0hsWDdlZ1JvYnhJWS91UlVvZm04am14YjF3ZktpRnNWUDhsVGduSlM0TkQzYlZkV0Voc25Ud3U0eUZEUGFGQmJrVFBIR3FBVVBteU92WjVsRkxvQTRYSHZYQlRWdUVDaHRDMnVkT1hvbEMvazRYWDZQMk1vUTV6K2cvVDZWZEJ4TWQ1TlNIaUpTVnRubHd5YVAwd1lPaWtMUlJCM3dFRHRZZ2tGYU0wbHlvaU9QZ2FrSWV0a0tQWmMyQXd2cUlxZFY5ZjNHSUNOeG9vd3lvbVlDWXZUSXErNWdJbXdvbm9JLzhRelhsMU0wa1Q3dmxHZjlhL0RQU2FhajJKSy9lb2lEZFpOeE1WZklKNHlGY1JiN3dnMUZ2a1VVaEpISHNQVWdFUEg0RExZWnhJaUlUSWRCczB0SEQyelFvT2crekRrQTl0OGF6WFlQS24wOG91TVQ1b0QzVG54b2V1NUxKRWJtbTVYYzJ5NUM4UXp0S1hVOUVxck1CNitRWUNJZ0lrMjF2L1FLdkdVeXovallpYlVXTFMxMmJlNWpVdzFEdFZXSUZOQmNBbFNOUjZtNlpzOEp3Z0pzSnJHUEFEL0h5M2tTSEFJRnRhR21ldDU3bC9QbnRqa2NEbis4SzFDWjRhWlBmU09lQk4vMitVSzRCM29MbzlNcXlqRTA0WmJ2aXJoNE5zdW4rOURsUklNS3RxSUJ2VW9lQUFlZi9TNUNuQnlvWld2czZueGVGUi9adGFWbFFleFhDM2pRNHNrK3krREsxZVFpbVBDbmRycmJpZmluVGxOTkRBc3lCbVRBRHNpT3lia2pycU5ZbTJ4emFMZnNXVWJVZzFkUytqaStIdnhaQnVqN3c5ZHVsMTlxU2JLQmRjakVJMUFzbk1vYndxQ05lM21DcktROS9UTkdzd3A5Z0xaYkNlend5emtLSFN0VnRLdENTNzc1b04yZU5SQVhnWkJaYVdaNkVaUWw0c1NGc3dWbUJBd0Q4OWZQZkxVUE1RY2kxbVFRN0dZQ21XelVKSTVYQmpJUHB6TzJpUCtXWVRGUTFjb3g0NG5PSUpyMmR1WTBXVHp6Z1RBQnFZOG9EZm5GaU1BbC8zNXg3a05SdmF3SXNGYU85L0J6cDFYdmJZc2Voc2hXVkFpcFhERFV1RUFvMGdteUNzSW9aZFFWZ3BaWEwwL3EyekpyUmFVNGtpQVNWMHN6TzNXcEFwQzFhZnBoLzNCY29KNGJhbE1Dd3pKaWR2ZjltZnhZYmZJTWFmQitSNmtLVEdIeTFTVFNZaTFmRVAvUDdYQ0x3VEdtVEdBckNhUVg1eHQ1R3MxdnRjcy9QcUlFeEdwVGdCblVLMDRLaVBvUTRhWXdBaU9kMlJjSlZ4a1FLeXNYcjBrY0g5TWxzR013L1NnWmVVWG9tcnNhZ3RhR2xkcjdWOEkvbkVwUWV1M2xYL09OWnlWdDEzaFRkR2dBdWpHNWx6NVhVb05NcHZqM2hXdkJkbEtmY1h2aDZHWXF3dTJoeEdFV1dSdGc2b1h2SnlRSWtWR2FFaHd3dTFjM3JuOEE0eW42emRVTDhHVmdtU0JBVE5DZWhjMGRRTXlKcktrT0tYQmhaMWprcHkrN2g2UW4zbEpTbWlzSjJrRmh1Q1NIbFhQVlBwalB6ZWg0TGRrTlBjNktZdHNGeTRhMFlIUWtXVXR6b0Y1V1NiSndsTnlMdGJJM0RVd1NLM2xSNlRaSXg2NlBaS2ZlRi9QdWxXS0RVUVErMEJhYWNqV1dienQ4OFJCanRJRWhGY1lzKzgvZWdxTjFrTFE4TTBmakdQZ3dqQzVEWFA4RWRiQ3FFYXRjb3ViZ0s3R21GVFowUDdZWHU2RS9MZCs5Um1ZaDJCMkpZWG5EV2g4WEtTdTdrWlJhdjJPTFJ1TnJHM0E3MEFwWGJsVXprNDZSd0R3em1LSnlZUDdVU2tQNjFsZ25rdmRKQ3JqcVdXWnNwRjRJVzBFQURmaUJKL0dJSkhVNWprY1ZrUjIvcTh1ekVLSlRHRHNyYklIcjBoVG1RZzFveHR2QmlieHhBMGxQMUJrWXYxc0xFZTFhZWFQeFhEQ2lRbXozaGIxaUwwTVloNE1WNmRBcHJ1TnFXTFdUY241ZGp4d3A1bU1nQldhMDVsWWFERWd0alRlU0F1TmJ6dXlNZGFlcW1SVUFKVmtDYVI3MWNxU25FYnc0aWNVaTFDS3c3VWN4K2x2Vkp2aHlZRXJzZW1OV1crS1RWMy9GWkNHV1FsdXcwaVZUM0liU1Y3aExvaDNqcXVnTEtCR1NQWkhIS0tyMWRCTUZhSkVpUk9pVmVZTGxTVjNVOTFxMGlVQ3hIYmNTVFZ4VG5GU3krWlhtTXV2OFQvZksrdnV5cmo1R2cyQWU1NVVySG9tY1BVQzdNNmgydmwxeWx1bHhYQWo1WCtlVW4yN3BtTDRJWERCVjNtcmJGd1Z4enRwZmdQNHpobkNhMGxFUzd0ck55VmJjcUlrb0crUEtwdDdVcnk5VllqQ2NtTjFiYVFnaFF4L1RrSXA2a3pDZzBsVlplMFppUlpvWW95UlFtWFdZbjBrbHloOU1QOHMzOW5OaGxsdmZqMnJTMkc5UDJVSjhkM0V1TldmWHliQlVGVnBIa3BtQ0diOFVYRjc4RndBS1BFM2dHRm8wbFJTYTkrTjF1cXJDZkRpOFd5SktxSFhXd09CdWRDRGdmRVhTSStBeFArZTZ6aEVhVzhaeXdQTHdHR3dndXdpN29QSWg4clBlcHlQb0twTUdGN1JmUE1vSE9ib1FpcnE1RjNmNUFsTWllc0lhZ2Qra3RKMWpmM2xuMDdlOWtRdTFZK0tOOFJudXBiRUs3NndiWU9BUDVNWlhOTklZMWFRdlFuNDhHUEtVckFtaHFXNnExWVNZWGNrMDN5c2VReTdxR05VSHByTjlyZ1l4azhLYnZOcDJNV0wrM0dVaWJCcVYvL2NWZFdGaEtMQm5PUDBQZ1RRTFBIbHJISUF4bStuY016TTFKRGF1V0w4RWJrNFVZcjZGK1gweE9oYjRncVBNQ1FyV2JTNG5TeVFWZU9wbkQzSXZlUHc3eWJFRXRNVTJTUm9waENOaXI3ZUIwS2ZJNEZrMU4yd082OXBrNnVJQXg5Q2pFcXZ2WVVOa3ROeFRZU3gzWVpHdWM1elBhZVVGa1o1YkVNWk1TOXlSOWMrUmtlNTgvdk9PMG1rMHJYa3JlNFpTaVRwNWhwejNVU0JFUzRPUDFHQll2eitndWhTaUJSaXNrRUo4MGNzSUM1UkU2cXgyRThVQnc5SEJqOWRSV2FlN0JzTHVqdllzK1pqUlVuMU53bVkrV3k5VVhBSUVLN2NXb01GNDBJcDdKMFlkaGRPU29sakNLVlJLam10ZEhtaWQ5SERWV2l0eHpVakxJUU5UM1lIRWpoQ3o4Y3FtdEUweXFtT09MakZaUjlGYmpFTWpzSmlFZFFKUkEwOUs3UnMzWjBpNkZOTnlrUmpYeVRzYXgxVE1yZEwvaURjUFRoNlBtNnJiVDlJTVBRbThyeE50Q1FMc3A5QkEwQ1dkR0xzQjFwQkFibjdqblJzZEoyYmNjblI4V3Yzc002RHZuSkR4Z1JUUDhKV3JFR0xJNkJucklsbnZoL0MyT2EzOTJDemEzaU1SVXJ6K2FIOHd3czRHUlpxQzlMbFZYWWJaUW40Ly9WODdjckF5YXNsMWoxZHAxVUYvSkVQa0tTQ2MrWlRJQzM0VWdZdm80bVowaGl0RCtaUkx2SUdqd01QM2JBMmZNZzN3d0h0QTR1SW81cXliYXVtVURCTUlWV0N3V1FtVlNZa3RIMnM4eTl5dWdRMW5lWDVLdDRNbGZvODNvZmhxcG9Nb3AyeEdTdi9XNHZtRTF1TVA5T1ZLMlVJRjJCS3pSZllBUnNBanoxa09lUVUvT1B6bC9hS2cwdWVoR0Z4WTM1VHpMOEdNVGgxMXZWODBpVG1MOG1UbGZHYmwyMGIzZEUzTkJMYzRYbS85dnJpUnlQMW4yTC8wM0hvb1plcXlERjRPYmw0blZLU1FqYWdhSkwyWkpLdDd1UEFLV2tyM3kxRnZFT1RnaVN4bit2T0k2NkVVS2FGSmhFN25acmV1WVlId1RRaityU3VCTFppRnpxWkR4Slc4WnN3K0hIcmVLbldlVjlKeU9KNVJENnpBUlF3RHpNRjZlTmdDOUtFRjMrSzIzWHlZU1NaTEI1S3FXRGJKYmM5cWt1SnQyTDhHZllkOFo5dmdPVzBZbzd6TGIvV0dJZ3hFOWFQMHpaU0tyU0lpTDlYZG85NllPVjExV1BMVGJKWGJ2NzZocEJyZ3BxZ1pReTJqK0ZDc2IrRUFONW9BNThtb042d0k3aFFYUURvRWZrNVgwbS9kNE1TOXc4NkpoVnFnbDY0Rkt2eWgzSkk5SW0wY2QyK0hXbFNQL1czR25xRzJ3eS9IL1ZBYzdpVFpSbXlLc0pNd3d5aXJIY1UyNEJ1eVF0b0xzV0VIdmIzYURuNDFXQUJON2l2Y0NDTUFqdFdMbWFkSTlyOGlpcCs5NHpBMm96b0JBeFBFSUZhUnc3b0tqbXkrbUYzUTRJZlN6VTZaODZVWFlOd0lJbUJrcVI1aG0vcW9hWTlVT2h2WDNEV2YxM0VsWUtCNWxFemlkRXUySjdDVERiaUliSkE5eVNZbjlkaXg0U0diaWFWNk16SFlKa0RCcjNNN25NVk5PTXlZWFlWQVQ5ZHZxdlpLN2hjTU1UdXBsbitQS21GdGhNR1EzRmZURnA3OWRyaEkxcUJDQ2F1WnM0RG1MVy9nTjNnNjlTbytYTDN2cjhuSkIxVk1GNXp5SmRCb1JHZkdmS1FDUGV6SVE3aHJ1d2JwOC9NV09leSt2bWVzbTVRdFJWNm1YMjBPbEtiYkp6cFlMb3kzRHhBR3Nyb3NkK1dlQ2VobE5ockFvZEFSQ2JIeUlieXpFTzdmdlhpMm9qdTVNb3FPTGFiU2VkOEN4MEFMNG1aUnRPR0ZkcVBINTRlL2NtUEVCMHFpSUxJZG90enN2OGFKL1k0RTM1ZjJ6Y1hUb1hPbnNSWTEvVm11dWNPcnB5UnpNWkJLMWFVdWlIVU15cEVBVXRzdWVaZXJ0WlhNaE5KOE5FNllkZXFESDV5WE9CMittbytVUGx3TFRBbWlwMWRQS0pRTGdWRzZnbm13N2ErdTlaeHdYWERYZVlIYzk4NUhBVkVmb0RqNHJza1ZxUGova1hqUDlISHYvYkNkZW42M05sWjVram91V0FzN2VrNE9mQkUvN0hZdzFTaFYwYVFyOFM1b2JwUVA0SWk4UDltclA4MXBpOUVSSTF0RTZwV09LY3NhRzZEM3BWcC91b0ZiREV1Ym9GR05CUm9FWXp1QzloWm5hR292dXYwVHRIR0xFRVNWdHQ5NVNnbFVrTHNCK21uVmZRMG5IZkxxRnZ6UWM5a05iZzl6Ym8rSlIwU0lGSkk1bndRSUh5NEdQalhnQVJZR0p5eDJRTm81Sm9GWWpZcHRHZDRnMy9SQ3RQSXZiTUZINVJFSlQwYkhLMUZYOGpxVjIwTjljMW8zRkxoWjJuZjNFSEc5YUptSzdSOWNjNzJhbVlyMnZnYkp5SitwTUNQWmRhQkJLbDNRWkVwQWtjQTZXNElhV1dSNWVPTGoyeXUxdTc4cGNjcnNnOXRwZEh2aURHUHZTS09tM2lkZmdMQVRZOHNyTXZmdWx1cmpzd05KK1lOV3prVjhFb3NLMG1BMzU1aVJmaUUrZmplK1hqVUYzZDk0UlNnV1pqT3c0TjJJc3hjeDNQeWozL0JaR2VNL1NtQkJXMmFVTExlTEgrelFjaTRMREsvRkloTWltWWp5RWJYNHhnTjg2Y3FqZnBqZEl6WG9oZWl5M094cmpkS1RMSTRDc0pNanNGclRCcTdHWnNta3VDQXBLRG1OVDFzK0Z3TUdhMDdBM0MvRm4ybkRUNjY1Zm9ZT3JRMEFKWVJiVC9ZVFNMdHJrMVBXWDZjdHdHWFAxWmROaDVObFNIcGFUQmlVNTBVck1vVHB0NmJReDR3U3hSemI2SElQUFZIR3RGMjJwSDEvMTJhSFdWeFhLOW9hbVBoamVFek5NdHNQRk1qMnBxSmEwYWV3d3ZyRXpTdTQ2eDhPNFNrZ3ZYUW5YUnVndWxNVzc3aGdZQzJjejBrdUgwMTJaUy9LOTZFeTlYUzV6QXlGV0V1YkRjK29aMmhnb1lFTDZlWkNPVzZJRFFsR05Wak5KeTFGQkFPV3RuNksrbTNUVDRWZ0dwdTJkL2FQTmY4RjFmcUhDNGlWVTc5K2lhYkw3T2NKK0ptWlp2a1YrSVFQWi9ndFRHRW1IRUxuOVR1MW5NVkhKR0tHOEN3ekkrQUZFbDE3bnhQTmVmTWFsMUs5WkkwdllKRVVmcDYzbXEyMGVIcXVldmd4Qm9mcG9hc01NMVY4Z0FKMzRPaWFpRU9seGFUV1VuTVM1TFNma1ZrY2w0UnRrOEhTSlc4ZWk4dE1ENlUwOFBLNnlLRWpIWFhab3JmdWh3cDc5SndpWlhkZFMwc3R0VlNrZzRQOVlidE9VVm9qT04yNGdRN1JoYVNMZzZ2QVNaR010QmtEdkhlZ2FXRTRRZTJhNE9IOXZNamVlN3hxU293N3hhZmNTQUV6SnJkNVFYRnBPUzYxV25UUlVmUHhXVHlRYmpXMzZRQkNDUnBsSnhxci9LeUg3NjNEalYxTXQxN2JXTWpjWWZicVFFV0VwZzNVc3lzMWJQL1cyYUs3OWdVNG5VN0ZaYjMvV1p1SHlXV2tqWXhYYzFUY2crOWxUZ08wMGpWcHQxcXJSVjRTamlBTmxjeDF3Sks0RTdLTVpLd1ZzbXpFRWtmY3pXdHhxOTk0aXE2a3dMNUFXdDVKZ0NRK01jdEJadllPajdKMGJvaW1WUVJNS0tYLzRHR1ZFUVUwemJCQ1FyQkFSb05wYmVMVmZtRnR4RThmaHc5eUZVdUh0QVJEdVVodmViV2RXM3gzazFwdlQzdXpnd1BsY1JoYjlrdkNua3UrclJhOFlxaGUxRUZlZzVGVG1ubTZNV1FFcUpYbjZ0ME9jWlZNZ3VrWFMvelp0dGVVOG91dTEyYWhyMFMrTDNRMjVaVzJNeklVZWZZZGZxY3dqTHJxd1kvbk8xdWdHemFFeG5ENW5tNXZqREd1R3FqWWNobW9XSElzWXpFS2JhWEZlZGl2bUR2OGU4WGxicWRoM3o1eWdKRDlYL29qeTh1NHFYMVgwdHNRdGNSRVF6VW55Q2NXOWhLUWVkR1ZkUTZ1UkFiekRNL0g3MUowRzd2T2RucmMvMTdOOVAxNnJXQXBvTDY4OUhSOEh5Tm5kZ3FnckE3UTNhaDNHcGpBbkZkQm4vWjFLRUZoSzRTVXRjSW8vQXdoRmlIQ1ZuNkFxNFUwZFlhTkRMUDZ4ZUdjVzcxQzdyWXJIdERYc3dDOGxwNW15RG53VGdCRW8ybTUzMXlSOU1pWkpDYmI1M1lVK0gzL1lHbG1WOVlpWmJ5SXJWOC9JbEppRGk1bjFWaVFURFJxaWFTdFF4QllkQk9sQUxGNEk1V1N5UWwvZ1lHT2FZYW16empiWU10N09OaW03UStpNWhHS3VRNFpoOFVndW9yR3pMWnNnRzI0TU1EQXpJYVhHVjJ3MG9QQnJmWWwyT29NR3ROQm04NG9GVW0xam9RR3FvcXNWOG5ieDBabGsyUzU0OHk1ODJrNThCVnd3T3ZvMEJ3NGNKSXJ3UlpTTFFjS2hWM1RoV1dLS04ySUhoMjgwbS9hYVJ2WEdWWHNrV2dEcmY0a3hJaDB0ZktnWkJZUmpYS0tZY2xydGRWd1pENHVNR2tCWHVXR241c29VVG9xa2ZvQ2hVbnlUdXcwemNKR1orUENPaW9yMGp6c2x4MktvaG9UM2F5RnVtdmswazdtcXF3YldNUEFWVlFQU0dYNk4vdzZEYSsvVE50RUg1SkpueXFnUUdTLzI1QzdtYTJXbXB1aHNQRDh5YUZNTWZMNnB1N3JPVERjYjFNeTdVcUk5bHNnRndEU0owTHRjR0ZnK3ZDRUNjRG5mOHRydTRzYk8zTEFUTFcwZ2xLOWFVWVV6U2Z6Qjl1VWxDNERMMENjQWV6akpnb3NQaGd6VDZtamJQaUZlaHgzMzJzcGVJd3NDVjN0UGdMaVlkMW54WklWbGthalNvWlZZVXpXVWJzRUxGYU5jWWxMZ1ZJTnZkMzcxVjd2clRQSzNremdWcHltT1Rqa2lqQ3ZaMS9CVDYzeTBJNVZ6S29aSS9sK3gxaDVUTG4rT3RobXU2aE9aVldIaEErRkE3S0wvYmRveWE1UlkrK0I1ZWwxU0NkNjZoQ0duYWpXbnhJbHZHRThraE14Y241ck5DWnZybktqRVNPTTdQYzU3bzExVTlRZFl4ZFJ6eFFSczhPZTRrb1dYZUk3TU9tQ0l3S2FxY0cyWVY4YVEyZVZsMXFMUzIrQmdkRzBPU3lnNG1SR2ZlaGxFUEZxRHc4OEM1YUhzVkpsbTRreFJ1WEJOTmRTNnBkeG1wOURWYzlTNkxiSVFqVTFxWGh5bCsxeHR5Y01Wd3daQzkwdS9ZYVg3TWowc2lYczBtZlZ2TmJBdGdHbWVwb3VYRGYzRC96MldPbVRiR09mbzU0cHhSYU9tb3pDNWhsSDRaeEJFVHVRTHpiSnpYelduRkdnV1Q5d2Z6UmhNRzRHNDBSaVZvTmQyL1liYlVRYXR1eHIwV0ZUUzNuWmFOamlWaW5rUTgxUnhOeURoUzdBR0lOOWVmSm5aQWMwRTNZS3pNMUF0a3FzeUJDSlhZZGRJNkJoKzUzRkpKbUNNcVlEdjBwK2NTUGtuU1ZzekEvRzljVFRNd0RrWXlTUEZXOWNNY1NXL09Vc0RMSUNxUGprd285b1E4ZFBsK3ZJc2hlQUdmQU0wb2duay9HT3JxRXBxZkwvZGhvVnNxUGV6TkZGbkRXUlArNFF4bDZaUXFRSkJBa3BWRmtlUHh1SE9PV3hXSDYySFVJMlZESUR0YzNydDJUU1JDNGVZb3I2TnFhYjVhbUZSYnl5ZCtIQzhsOGZVd2VJT3pqYmpIRFJUYW9DR2ZBVzlHMm51Z3QwVTMvbDJpbURCdW42dDRhZCtTdUk4bmFiaUpBeENhbFA4QnMwdWgzTnFtSFpPY2VnbDQxTFpCQytkTTEzRUFRWTNKMW9CRjBSZTBZc3haVUlBMldOV3dMTnZIQnpOLzEwdjB1eVhyRzUyVjBvZ2dCYVRDQTNsWnhTZHJEM0xaL3c1L25zMTB6NmMycTRRb0FvWkZzb0Z5SGtFaFJHTGd0T1YyRFUyZHRSRTNFb0tEMWo4WDRxUkVyWWRjaFU0aXhJd0NsS2QyZGY5cTRob1BaNEFaRG9RM3VMT2h6NkJFTG5yZ0RLQ2JFbVVUbVZMNll3aXBYMmlEN2ttTEFLeW14b0tabUZNdm81a1hpdnR0TDVzOE4rYTRoWWZXMUJiUUVRc2FkT0FEYzYrZTB0Qkh3L09jM2w1aEJBcEo3UDMvVnlpSjlmdHpqd0J0OXcyTTRvMTN6UGdubVI4eDJkNHUwdHMxelVHREF5Z3h6MFUvVzA0MG04dE9Ldktpdnk0UkwvdHZ2ODRXSlpJUVZEWlhBemJ0ZlJOMzNpdnk5eGRYakRmT1RYQUo1NC9XMGlCL3RNbzNZakFLYktKWHlIMTNiK3BIdWE1ZzZpMXlyZVJHZjgwMytXMVZYS1hQaWNHTytwLy93V1BQbTZHc0NLWW45d293bFJKK0FzVXkwWjdRdmxSaVJWcnh1cTNNa1hyYi92NDA5NDdpKyszNjRPY0loTkdEeU5XRk9pSGhlUGdVZ09yQVdyTzdCWmc3SUc3TnRhVU5TUWFkV003bGI3R05Ic1JxTTB2MHBRZG1PdHc3OTBydmNqaGRhWWVua2M4V21CVXFYSHl0UFRmTTR0QWhCL3VpMndBMXVVVHU1YW5EWVJYTUI2bHFEVWdlaWR4U2FxZC96UnBqYVhDMER6UU1RTWtwYkZrU29XMmRhR1lzSGdHd2tiSkRCUGI5UWV1cFhzVjY4OGNadkR1eG83SmtwQXZMa0dqYVhJNW5XV2VZZjBSS0M2WkVDSVAxZHpsOVo2WHl2WWxiVGJPK2h0dnQ3WWtDNzJTaC8zcVZIQnlzQmZzYVdEeVVzN2lFTHpwWmlEVmdKRUgzaHhVRVJQeDA2U2FkVWh1aHFXTE5Ec2Qxamp0Wkx2NXVTOUhKTnVCWEhSRDJrRU5MclJYWWVoMGVSY1VHVmsxQVFSd2FVSXRISzRBY2tVUkM5dDVmcW9sT1lHV3RvZmx3ckVJcnhRdkdsNnEveVZKY0N5Z3hCb1BTYnFMVnl1bjJzV1Y5cUFua1h5cnhJRGtxQmpxSFUvUnNTOWl5cmJ4M3N3eG9GYk9leHl4a1pWMnJINWtsTGJYTU56R3ptMlFuVkxCZFRqaWZRMUlJWkRrb3hESEJkbE1OYUdvTkthbysvWlVBeVZOMkgrcVc5di9WS3hCa3VXeWJObTBJSnBnTUEyVVcrY0cxYmNpQ2FVK0VYVjNmMWM1Vko5RXZmODllajdsVElCS2lKbDFJWDJoWHNuWndibDlOYjAwekE2RndtTFBWbjVmZEZLMEg4RG5JVXFCczJjTW53ZmQ2b3o2TU9mWklER3JLY0ZqUWhHSDl1c3hiTkdVVUNYb24zdXk2YVZHZU1BTFBhSUt0dy9kcmpTUmlIUlNxZXFUZkNGUVhwQnlNSlVxbFBCWlJiaFlzdEI1am1IbHBTN05ab0F3R2VoNDZPOE1EeTBQYzNyRW01L21ta1VJZXdtTjNwbGRqS2FqL3pKeXg0NW5oa2FrUmFZZmpSYjNsQm5vUDk1dW1TdldLVFhrazl2RHp0TkRpZnFKYnNET0VqajV6MHl2UWZMK3N4NngzV2JNYk1IaWd4WjFDL0FpaEhvRkN6Z00vUzZRQUpkMHNFV3UydUxkWmM1Z1NTU1hYdEhrNjlFYTc3d0pRbldMSlIwUUI3dS94YUlXaGdFRWp3WTMvak5rZ3A4MmU0U2U2NERaeU1yb3dzWFpGOVJtVGFlWFFTZFBrQ1Rmd2dsU3UzWHF1TW9UOGoxdkdYMUhtYUVzR2sxNURIUkd3VE9aaVRBZVBIdDRUTUovWk9DaXNVRUpaVnBteXk3S3E5RHdSWmtJcExBelhhbDc4ckFWWjlDQzdLd1ZDVjNnS3NvbGVaTmJ3RTVjMk00YzVVV2lpV21jNWE1YWNqOFYwWnViTHovSm9ldmZaSXE2cVJRNmtsSTFPN0NRd3lrRGZEdjRYZ3VVald5WjhtNGdFeDVhY1hkVzZFd0hxQ0xkazlIaHlwb3Y0ZHNQdjhuZlJWSy92cDJZYTZQOWNYY3VqZWh2MjBramZnQ1poQnpyd0dXck0ycEYyOFRHaEdHMXRZanN4bzIrdGl3aHNXeWg2ckpMU3ZCeko2ZEpObUZvd0hhS3YxbFZtNkxZdzZNVGxOSnhmazc5WDRXTVY0ZmkyeXVKSEVoVzRQejArL3dEODIySGNHeUE1R20xVTRZby9CYU5iNy9waThjMmV0VTNXTTR0b1VpQWNIU2N4T0c4aXhYdnBtWi9Ka1BLWGxiTEs2YUtrcld1ZitwckxsYXBDWHF2aDgxczMxWmphZU1xVmNKdG53Mi9rVi85NkZVRnlCbHg2YVFkNUE0cXFlQUdZdFlvUkxJVDE4RFRUaEdTa09uZVVpODNaeVBZbFB3d2c4SG90dXFQY2lQWlJuYkZoOWtOTlZ3c1V4anhCMzM1VWI2amZXcHF1czZXOXFMMDQyTGswL3B3WEtHL0djc0hZdWk5QWdCUzdKSnIrSzVlRUlvK2RBNllHWFlNdDM5YkFIclVJKy9ibVNwTitzS1dVREFoR3MwdkJjU0N4NEZzcWR0VTJ4djdjZkQrUFpsR3JZKzNNeTF0Q1lvTDU4ei9BYzRCREptWFo3U0l4SGRIZytGNnNNZ0ZoV095WEVockd2R3NDT0lNUFpnaURHMU1CZzFVOVVsSUpKNFVoWkZBaUJibXN0YmZhRlpQbzVpN1B2VFNaUXZFN3Y5Mnl6L2kwWFRycG54VVZyNVNHam5UOW1leWd0OVFKWDllTUhOempiR3J6U3dTczdZUFZyakZNSHhpTTNLZDJoVzZlRTlUcGNNRTAxTTdKT21HT05HR2xMRHkxTW9vUmFselYyKzU4Q25oSktjR3h3Kzk3SFpxZHduU3gxcHNYK2lFVVRVd2wwY1hiRkdWUko3YXlJWmZ5TXl6RFpuZlJqT2MxM0lXZTdTYXFFdWlNenAvaUR0d25PaTFoL25mY0VvbXAxMFc4N2tMenNaS0JyNldsQWwvWjV6Ui9Wc3ZSZkhVaFJjYmg3bDR1NUdCWnBCM2drNzl2WjI0b3dlSFNzeExhWEl1N25JRldKMWJtZGhuTnNRNUFWVzZncDY2Wm5PWjVOcHN6NkR1MlM5Yms4K2lSMDRtYzIyVjNPbiswbThNUVQrSmNkaUhTYlBZZldOTEM2d1JHdFF5RVYxczVHYlBBc2lHNDQzTDRROE93LzhQaHJnZWF0UVRJOTNvcGoyZk5uaGlkdkxMTlVWOEJWWm4wQnNEbWZTUHhuTncrMUx6bkNpZnJvTEN1ajR0aWN5amg1WmxXckNzdGh2NVF4ZDdBN1h4MHgxWUpWVUgwTDNZZkRQVU5nTVkrTEsrWTkvUEl2anZObC84b0pxRVdWS3VvRU1sUmhaK1o0Y1UvUXlGdklUTFJSdVZQZXlabHV5K3h3empSMnJsenhZWFdncVhkZ3BKMU9LbjRselR5RkZxZHl1T0FnOFJwbzFldlVSNk9iY0kvdVQrNzNoNmVLK3MwV3BHZitSUUJCWklFNWRvbmFiNVhYdGhDMHNISENNS0MrdFM1Q3lNcnJhVUZHQTFPYTBIUWFXY2pEeGN2NHQvbFFDOFhTU3dYQVZhWFVuZ2lHTXlzNDVsTEUvMU5kK3hhQjN5cXdWZmFpcHd5TnBOdEN3bmZtd3ExWTZ1a3BhcmZ2ZzBaMUt1S0JWNmE1V2tGWlRNVDdjekFyc0xOdFdFQkQrNXJHVmU2RWxiM05CaEZaTlRrWjlEc1BuY3kvdnhBWmsxOXlrYW40SlMvZE1jNU1WRkZpZW9mUDk2cTZkbStzeTFUclRtUFdxSm5ZbXdVRDNzZzU3czIrbnkxNEEzbzlzSGgzbnplczFOcFVLempiL1QrcUVya3NtMWg1ckJpK1J1TTJuaUZvZHh1M0tRWGZoZXRORUhqQWE5SFk1WTVjQ0ZDaVBJZ3dacmdnbWpKSlFvM1J3K2RId1ZiVjdSUWR6WjNpN1c4UEl2YVErZFVJUGxhU1NJUnBkNG9jdTM0VWgzdDNmR3NKTUI0cEdWTTFQNnlGOVJuYzJEQ3hsaWx2SCsrQTdyR1hlUzdoaXZEWWVjbFNWWFh3Yk0rSnRuSnBCRXRocm9BZHl1SDdWNVRObU1hUERMYmoxZFdtdnZGd2hvNG5scVhUa0dNTnRrbFJINjlleVMvUTVtZmhqc1RVRUFNcEFFMW5CVUJtMXRXbGZrVUFkWFFMQlZ5a3pqNWQyM2N6aUxFbG85TE8vYWdXSkg0RWFtaFZXTC9CRjBGQVRha0lOUWt4UnR5M1ZGL3VtbDJXQTBVT0VHMjM4MUhYeHZFNXViYTQ5eTlKdUgyMENqRkxjc2YzWXoxN1o4Tm9GNStLeVZ0R2lLK3owcXppek5uUjJvZkd2M0czMTNYSUFRNHUyY1JKSVhaY2tRcmVqb291Nlc0T2Fnb3paNlhyQXkyTllJOEZ6bGpCaFBwS3NwUWRMQTU2d3dSbkxkWDdYc3hyZjVTdXlwTkVNVWQyQVA3NnJvT1R0bGRJOXkwa3RtMWp5Y05sak8xNFRNbVZ1S3ZYZ3ZUTXdNaVJ0WDNFU3YxazJqQVpsbHREMUN6UkU1Qmp6b0QvQ2UrSW1Xc0ZRVXU1TUV5VHNBU3g3dTk5akZUYlVSc0FvZndRYnIrSk9EMFU3MHF1dzhpMWpUVjVIZlQ5cGNqbFQvSnV4SFJ2NDRJaGZlY3dKeHhVOGh2bUFaSFhTaE50eUkyZGVwdllId0ZCNG9sRkdYU1VyTmswdExrV1NaaGVrZzI2TElyZkF5ZVRnaTV1L2VYMEFBM3dmaU5qUmZtMkRyQktMZkRHUHZudFRtUkE4VUhsVnJiUGV1NGNpcmgxV2NGTGo3M3MrNUF3Wi81VUxKMUdQc25EcFhkTkZGSHhNdWdkTDNpWHdUYlpadFd5em5GY1Q4U2pLL3dUZHU1RVk0OEgrVHltL0RtUHRkdmVzc2d3bks5Rmx0NFZ2YWtaQk1ES3FSSmswcjFzcGV0KzIzdER5RjhhcmtCTTBoamVRL2dwUWtBcGhEdTQ4eVZTZUhtZFRtQk81L25kRFQzcFl0RGxCKzJFNDIvTlNTK0lmN2FsY3dGL29PSmhDd3VGcnRUUE1FUEdqWitwOEN0ZlNRc1pkbitWWCtiM0FxWGhCMkhiVC9PTmtzaHlDRE83dEdDcDFmRHdIMHFvc1hNYmNuN0xzOCtId0lRaWwyWUVMOHF3cDFwSU5lRzZ2ZGpDbmNMb3hBUFAyVVNuZVROVmVDMFBsRm0vTXJsbDI3MTZpU0hoWkthb3k3OUlPQmFab0k2Z0FnblhZZlhQamZMN2czdmkxS0Q4WTVqMWdCZUQ3aUMxZkF6NnlLK0hiQm9RZ2l3Y0lOVUFFeEV6VWYxT04xK1BzRGpobUJuV0h0YlM2elJtd016QW43TVd6OGdzcUtoMUcxNEI4K001SWp1Um1ieitNcjFFNC9wZDBBdFJGZisvV2h3cDBZc1g1UU43QWcxQnRpdkY5NDRrZGkrdVEwWmNKLzBsdlhwZ0ZZRldmemxUT29JelNKckx3aGRWQ3VLSWcvSUpZaktMb1NMSGxSbDhjT1hUK25TNjgrTXBXb2lQOVNrRHMzTnJlSkdwQ0dlZE13ZDRXQS9IMXE5aDE0MExpR1oxM3NrTU9hZDV1endnK1FiSlhoKytRdHN1VUhoc1RqRDhjckJBR2huWGk2ZzhrZUI1cGQrbVlxcHRKYmowOTlkbjRLd2d6bDduUmtjR2Z4WHhkTFUvQXJmVm5TUFRpUmFsMGNDQTdCTFRTeHZlQ2txUmZHcFYxR01sb3N3N05yVmp5SEpLOEl1b21VeXpGbEpFY3pQOXAzTGFCRmZtV0J3WitMRUVZR2krYXlHVUJ0dFNoWVZFaHVidHh4QXJNNjlDUTlLNDZzMloxbHBlanVYbkZ6RFZjQ3pwUWhqcjY2T000TWVVbWM0cW5FTnQxYnczUldMS3Y5RkJKNGZVL3Y5UE16TExZT1drb2JmY1BXM0VoNG4wWjRGZ2JWT1hmMkQ2QkV3WVNGVmJua3puVkMyMFBRMkxZcTdBNFJyWVo1VnBuTGliV0VLM1JEUjZUcWRSR2tGWU5tcXJHYkJNQ3d3bjBBbnEyRVljSy9MdzNIaHJ1eEZZUVE4R2Z4MkJQSkpDTWUvM3V1azBOY0UxZzR3SU01NEpodkszTE9QeG5aY09BZnFZQm1WYm13SGJ6Sm82Rkl0aTBUbVV5ZTljazRHbythZ0x4SFU5bittTzZ1bUdkeE9aN1BOT1psS0syWE1SRFhGbXBaVndXOHk4Z3UrckErUUh0Rnk4cmFQZEZGV0RVTHVocXJFZ0VodUhZMW1PRTJ3bGcwS2JmRGxaOHV5ZXBsSDNQVjZJYncvU3FLTFlyYjN5U0R0cEFTREVja3dPRDZWK2FPdERsZzZPU3JTVWwvaUJiTElIYlhMOWpDbG9ZQ0pEWGZjdXhvNkNhTTU5bVVJVGt0ZGltNmc3d1Y0cndxWmkyUk1ua0UvMDBTeDV6UkRyWE5ZckExY3hpWnVvZzBSZnZ4bjByWGJ1NWZqb2dUd0MvV3FZTzNiQlJjNzRia0xCVEJJTFgrcHRGTWlBVzVod3gxY0JOTnkrTG1Jdmt2V0pmNEk0c3hWZUtNUjVkbjdyM2tGY25NV2RDd2xqcHY1eDZVc1huc1Z4NHhEc3ExUUZ1YmZndXMvTEx2SkxXV0lrRFlQSUZjTG9IN1ZVL3daYUtLNURGYlA5ejdDV0UwZXNSTW42dEg4OWlsQ3hlYjdXTWNsTTZ1Rlh3S1ZsWnB4V3pYREZDQm9IVUtmOTQxelc3S2ZjUnVJUUhhcmdVTWtLNU15elB1aWZMNTZQSXgwTFBtZGFkVFUyV0ZsMzRxZm1sNHN1UFhIVDczUkNJM1VXQmxlWWd0TEwySi9MS2VIR3JVR2dXL2ZvUDIvMCsvWEMvTzM3d0pwbXVLWWlyalhpUEpPRnRRU25CWE5yUllIR0VxOHdsQlNacllQOU1zYnFVZTNlbkhabmVkYjdEYSs5UzZSUmFUZmE2WWRRYURFZTBreGQ2KzJtLzIzSkc1TGEra3gvTXpRdVBoUE1xYXRaejBtVm96djBIU2dBbHV2OVJHN3N4OWdjTVlBZ0U2TDZ1YzZ1MlRPak02WkFueUlkTjc5VWtJaHowVkpuakNUQzFYdW5mb3ZwUjg1Y01zU2RLMUp5ZWtxTmdDcHo2YnpJbUhvWkdLRGgrWG5yVnBldVpQVysvS3gxY1RZYi9MLzNRTnJvaGNMRmlUMUl5K2NZK0xuSEtYZ0I3cDdCM21qT3JGRVI0Q1JhUkpFRDlkYlREUWswdGRpaGljTno5US8xNjB6Z2ZGN0pTNHdxaUJ2R3NjWDVGL3VkTXNPVUhsSmY4VTg4VE1QNnNhM2VDYjRNZndMd04ycnBOdXpwbmJGRDR5RndLSVh0RExlZjg3RUM1WC9vbnJWL2MzL09wdCsrTER2NkpRNm9XeEE5SEZqcE1qVlU2ZDFXUWxsYXVJN2xrbkZIRGczL0RXNDhXVm1xK3ZTQXJsenIvOGs5WEJLR1hTWEdnUlVUeW1ESHV0MGxGMS9teGpzd05qMk5GK3MvekVkV2k2MFJSWHhtc21TRnFxODkySEdVckRMbG94b0dWWHVUM3N5VWVPZ3NRQ3RQc2lVU0hxWHBycXBuVXZkaEZyakN1N2NHMkw2WVVscmxqL0Irc3pKWFJXamczZEZvWERFMzhKdGpEaDJJTzdLR1FkL0FKT3p6WDI3TnlKcjJMclpTaDMrWVZmNkdsUWdManhTbXNLNDNrMHRNN3pKSzBDL1QvYzBNNTJSY2NXVlpJeG1OZGlXNWUzWEhWelRGSEl6YThRVlV6eCtXZ29ZUTZXVTVhVTlaSzhXL015ZHlkc1BTaHBBREhEL002K3NwMnNCUHBLckgxcS9IdU1GWHJBdG40bkJoZzM0NDFjdnd1bzdCdTFTTlpRU2FySG9pVnFNRVhEQ2JJZi8zakxCWjZNS3k2M2VtejhHaWFJbnlCSGZYSU1sdU1XNlpTSnBvVnc2RzRYZHdEZ1o2TEVLZ0Fqbm91dzRLeVJ6SXNhYTJqMFJJSVFFVm1mNWplR2ZYS1NUL1VJMElQMy9Vc2E1WE1pVEpOQVMxYTJuUXd1RXM4T0dvTFREMFRSN1Z6ZG5UbGkzRnNGNTNaOCsrSHhuL0JSeWg4VUNLL0hYREFNQXB6djJFbHlxNlhyN2o1SXlMQ1g5aVhwOXZBbTZlcTQ0WlZRRUpaUUdaQU45ekNYSDNOWnJNL2FySXBtNW9TaE5PdzRMNnhBK2NtWkdHVWRpOGRodDI1Y05iRmRQSnp0TlNiV21FMEVKLzZHM1BiWEpVMEtzdEdLbXJXRmxSSDVjRDRGd1lwWmV2WFBjc3UzUk9nSC9KRDRpVDgzb3FTK09ocUFBOC8vT0poYnFuYytlRXlCaU43TFdtREJqVGRqbHA0bTFHcUtzOFNTYVVLL2JIdzJGVVFxcEdac2JLQ24xTHJGWXl0MTM1SjZjdjhZdDg5S1dhVGdDa1hVWm1JeEdhcVdEay9aQ0V5bU9LdUpaM3BZandGY290T2owb1pBMVJvR2FDaSs4MHlGaUtBNHpVK21kQ2ZDaGxjK3g1YWRET1FTZlM1SnBCdFpnTW1mTlhrYmJYb3hlR1hpRjV0SjRXSXNCRDRWUXorM2VSUjdvanJ0aXFwNzdsbjRzeFRqQTdwazVSajg4bVhSSE9mb1J0NFBmSktiOWNkM1REYnpjcjd4U1JNUmQ3YVlsbld1WUF1TTFlbVptdGd2VUdjZ1JtNUdNck5XOTdXTENhd1VvcnZ6UEgxeGxET1pKWDBZV0VzUURhZFJOYUs0dERrRnhVZWo0aHpTMW8xc3M1VkJNUm45TElyWkVjcDRIaVdOU0JGUFhudEVPaWNRK3M0ck5RLzVmYUI4bTgwOU13TzZiVkhrRm9va2xzbmZzY2ZxRGtPTHplamFGNkQwSjdQOHV1aVc5Ry9vU2ZJeStudVZVdkpFMFRuVExSWnMvQ28rWTcrckphOSt5SUgzMDloV3NvMmFmRjc2Z3cya1cwTjlkeXJDcHdoV2syaWJUZzVrZDVpcjNZeUhUcGpicWNPM2xIL2gzRDdSL25qamkraHNPTE84bm1kbmNRTEdhWWFUUUo4dmdNU3h4M1FaMHhkZUZYemQwREFucVNvNE1jcWp3bW5mMWp5a0hvMXNDWU03OWlMRFNCbEZjcG0yOFlKb1RQaFFtYmp0c2lVaTI2c25DYVU5NnNFbVpaLzYzaEN4cmJiUlc5U0duZzhLZUxwSDRJWCtqVTdxODBMSUpvRHVpWWpzUy9ObC9nMVdwK3hVemtISkV0TTRaRDlOTG9ISTdNVEIxTVFianJOd3B5VndNMXcxOUx0a2FNUUtzUWNZOWZmdWdzZTBHMkk4c014MW9QbmpFY2FMTFVDbWZnZTRFRGNlWU9PSEQ4Wm50UU5rSUpoaHp5L1dEa205K2VHNVlneDBtK2hnSCtEY3pNNDM5Yld0RE1ObC9mWnRnNXhRRis1WjBPZlRBd1NDOEFwMHpWSExOMHpYbTVjbnpZOUZaUG5XY0pCNGNvNk5BWUFIM0lpZk1HU2gyWnFkNCtWVk4wSjcxNmpQRVpId0FKbCtCdDZDdXhjRERlTkExVEo5N2J0ZUFFMGdOS1REN05pQWhtZlFkK2w1MzJPcTkrWnBhbWNmR1NWVVhVNnlQbUNGaTY0Y1loVDhyanN5blZNMGNWR25MYWlvV0NTZHBqSFVrQ0hNMHk5bEkzczEyZ3lEdC9xcmthUkIrYkhLWlo3TFRicXpLWGJ5Rm1KUlRybU10MVZpZE5iQk5Da3A3ejdqY1BWY2s2dDZoK210aHBEc0MwcG1GS1k5cWxZLzMzbGNTQ3pEbXo2Ny9raWt1UTkzRThoT0xMeW5ObVlRT3FWYUdmZ0V4UW5tYmxVOHh4aExUMDRqVk1UYjMvcVB5RE8yTW9RYXE4dUNTdWdRVW1IeHQyUFRLN08vQ1ZTbWh6UHNOb1pqYmgwdmFKdjBoVDVXbEYyMlZjSzl3K1g2a290YVpUNVpsQkJuckJGM0hvQld0M09mYUtxQUkyZ29vbG1ZczFpanFIK0NvalpQOFBNcWNlOHNvcWVVenBnQWQwdXNUMlRXRTJTRitOQjNuZUMxRWZzQUQ4cDE5Q2k4aVFmOEliQkQ1eUN6NmFkdXlHc3lkRWVQMUdQeGpQTUtickdRbnJQb1dBSUZxMSt0VTM4Y3l1clh2cWJTYlJUMndlM1lmcGE4UFlpMTJ0R3g5S2daSFVJcFZDNnJyZ2VyTnd3RzBBVkQzSlNjTk02VnZ3Z2s1OGozRzlhNmJaNk15V3lKRkwzRGd4V1ZzQkRVUXRWdnB2RWtxZnlPWDFRL1dMOFo0VFNDOEpjWFIxSkRpWkVodkU2by9XWUlmcTlFMy8wKzRLY2d5UkljS0UxbUd0a243ZnE4cjROSndKOGh2dU5rTXJ0YVIrU3JyaWt4SU5LQ0Q4RE53YUo4dS9QVThabHozWFB6RlFpYmF5dTlrdFBXeUpqNDY0aE54Z2FiYThzOXRXbGgrNEQzZVgrdm16eXlnNnFUTTkyRml4L2VsckFuQmV3N0dvSkFVcGx4STMyMlQ3RUVBck9QRlF6QmJSR3V3eHo5NnI2TUtBaEF5VG5LNUhabDVUeVp3elU4NURJZHk0ZEQ4MFVTQUVscTBaQUc5eDlMR2JKQXBSVFJiNEZ6d3l2b0h2UXhVdEl6N21QTC9Ta1R4WndreEVCN3FkcjQ4RkpqYXJyVWloOGVIUVVKUHZUYzhuUVlZOHJSdXBxQ1ByT213NkIrTUtWWVdvMk52ZUdIN3poci9mT1dPbVZJNmdEMkdxVi9pTklVZ2dlNll2OEd4bzYvR0o5SHhQTzNMKzFNNmI0V3BNVHNDZnlCemg5OG9HcXByY2Jhai9ybjNUakNwRWYyMmRCcHpwZ01lK1JJMFRSa2ZJbWtPaXUvVVRKMU9tZXZ5UUdDRUQ5QjRVNkJzSE1GdVo4Y3lIMUIyWmFSbWlRdkZ4VklzeHJEQ2xTVkdCMDlBbXlzQUdXVzlIenZ1YlBTL1RMN1daVTl0UVR5Y0VhdVRZRE5PTVB5NXhWTFRicTNFYm54TGJ5RGpDQkl2UWR3WWY4dzRaMmhzcCtCRnUwck5tVDA5TlA4SmpwaXlXaWpncHQxWHpreVZyZ1NsbWUyWTg1TkVCVWc4MzRwaXl4YmYwNmNEdWs5L2RFVlJvRXJuTUxTZW5pZFFETUhuemQxRzZMclJDNmxTaFkwSkNLNVlrRm1mK040MmcySVlSN0dkWUQvQm9OVHFEZHFySGRka200eTlqRC9DVHF1cFRFQzlENXc2eXQvdlY0QWpLNGtsTU9TRHBCUjhzVlBHS3hxdm9SWUZGRlM5b1ZDUXhuWU16NmZFSFlRMTJhUHVmdEFwSlc5azg1cURKZHE2eU5tNm9STEhXNDhKNEQ2aERoWDJUWEdOUml6ZFpKMm9vSXVoNjFvMnpyVGd4T2NpbWdMejljSlNzMHREMnMrcEc1bUV5UVJrSEowL3dFT3p4TytBYjFSaWhEM0ZQT3lKSHV4TTRjY2ZiZUwyaFVIeEU3NUJOQmt3WlNwYWlNM3plaEgwTVF6MjBnSmNOYlhTNGl0QnZXeUhJV1BrRzdVT0xJRjJTVnZEVkZUQ1YzVzRUT0w2R1pUUXdhSEt0RVdxSmRwKy9xWTNFWkJtb1Y3K2Z0dG4ybHYzWG9GeFphZy9iazNjaXNUUmpmRC91b1JveVIzcjFTNzVKUnh5TXRCMWI3L0ZwaHVDOWp5N2JyYi9sYm9sZEhrSUxSK3d3L0tCWGJjOVpyMlVxWkJDQ3lQbHFreWtBM2FGdjhucWQ4TEM2WXZxZ1NJaGdDNHdLaFlCMTdOd2NBS2pXSndyRTVYWGc5TnFZVDErWDBUVktHTEJEQmhBVHA0cVJWU3RibTUreHhDcnhTUEtMODNwVEMzNXV6ZEZwa0lUaUFnZ0pIM3ZOQVdYaFE1Tk5UKzVhSm8xdjluVTRpUEpzQ3ZuRDhZN2tOMU9nRXg0MDFwanQ1Nkk0OFUvbmszSmV5dHRSKzE2NDNQYWt1ZlZBWXFqbmxkRmF3WjVMUVRmbFIxZEdSNURMb2szdGhhaGdyczVMd29oZDRRVkZ5d25IMENValJFYU1RQjZZOTR4S3pKRmJqL1dXUVFKY0hkMDRydVRqVlEvZEdaQ1llRjhSV2JEQXV5R2RhZkdEMHY1ejJHRGJiWXk0M3dtWlNlSERweXBnWGt4OFhIOHVOR3BMZ2F6K2ZSckREOTVSU1FtUGk1WUE2eHN3OHdYdlBybG5SSi80TEt5Q2NkVlNjQWpPK0NhNGE1RGtLMFdxQW4rcTJENTZ4VmVwZ08vRFJ3U0Fyck1STGlNZWxWenZxVGJoaWkxVHVCNkZJK01vVFE5YnpzMGxiTE9QeERTOWxxbnhPUDNjaUtXd2h0OUE3YWdiampxdVlrNGxCaE1MbmdON2J2Rmp6Y0ZOcHBaVytGZUFvQXVwWFhJaVUzVXFVTTY3aG1hVGNPWXhydzRGc0NGeEg4T0gzM0ZRVGdUaDBmS0xJeXpobFpLaFZnbTZwdldnNWlUM2V1VmFxcmw0bEw1eDNjOTZKVXUzeEh0blcwdnJGVUF6c29RWFI0cjZId1M4Vk1FRGZXOXJYU1FnUkNFbThZMWN1TGxGVUZ2MHY5Q3FUeFZmMDVWazA1eG5XRlpaeW4rZ0tSZVF6czV1d2JubC9OM0V3VmJRckFZeTVpdGJWQVdFeG4rNDNsd3BxT2taazJMUjAwWFpKTDBuT0lScUJvMTltWlBhd25ldlgyeC82VlNYajU4MGM4Y0tGWXNjVDl2RUZmZnRTZDBpUVBOSEhucjlEaWhiRVlHVWFJdksyWnFlWWFacEhWcDdsOGxHTVBldlUzMnJjS2w3ejA2SUk4SGNBSkEzYkJlSVJ6a0g3SXdURG5GWTNIVXhxN2FWOVlQRXA4MnQ0RXIrSGpUNWk1alBIQSs4QVUvRFNueTF5Qzc1RjlZaTlseXYyV3hKMlIvWGY1dlJyZGhDeVY5QVRVcGRWQTEwTTBHV3YyZ0FVZzhJS1hZVUk5eFlQc0hXMWxHUXR1NUF4cHpsUkswaUxYVmV2OGVHRE02VTZhWDQxQlJZTDZIOEtTNmtncWJNdlVtTk5IK3grWnMxTGlpdUxTN01jQ043Ui94ZnFxNGUzbWNCdGNqTXd3OThHTEVsZXV5dDdwa2R5bEV2aXJvY1NDcmlQSnJBK0NBc1l0Y0N2UGtLWU5uNmVENkRZaVNpZGlyWVJ2dW5qejUrWUk4RFU4ODlaZS9rZ0s2N0NjZW1valVHOXdpVkw3S0xqQmgrcjFCQ1RSaDUwOVVsTVJKNDIzVm9CeGVSczRGVnJOS0hnWm9DZG9ZV25IYUc3Z3FuRldEVlUvQWFvWFhRblJiQXl1SXNCMWkzSlhvbDFvSHREdnFnL0pFWEQ4aFRYcjJnOG1TSjM3SUgzY0x5b3hmR0lPOFdHMEJXZTQxMlBhcy80OE1SY205Z0N6R1NmcVVLNnNXZ1A0Nk9FTjU4eDBUb1NOVW83S2hLT2FITjRvbTNpQU9lRGx2MmhyVnBGM01qalNJMWhiRTZpUjlnejd5YTU0N0NvZkFjL2JJYnoycHNmbisvSXdONC9RTmtNMGNOL0lxL3UyZVlVQXJtN0N0WnBXZmxtUTlKdlZaeTJiUWg1MkVrNzIremRHREV6c1JJaFdHZUt5SStmeDFtdS9jYnhyWGY4YUNyVDd0OWNwYVpCVXdqZkE2ZnpWVWtpZXVML3ZIR0FFdkhEckxPemdNYTB1T3FiY01McUNMQzJZdkRJcU1uS0w5ZDJKbitwYkYxbGR4T0pqOG1nejNsSkE4d2pHMDN4TVZxU1VkaEFEOCsySWFqVy94K1p1b2dzc3E4M2RQQXREa1VLYWpwTFZ0TTI0cko1bUNLVVBHeVhRc2RuOGdOVDJFRG9qckhQdXF1aGJISmZteTVzTnhuYy9iK2VCY01zcTV0N0tsWWpZQXgrUzd6UkJUOHFodDk3UEQ3Tm15QzA2bi9sblU4aHJzK0VSdHRmYXdaZ3VqcFhzdHB1SUhOV1p2c29RajJTZGVja2d4aXZHTUNpaVg0cEVmaXRmNFZLWVdlaHd5NnVzdFF0am5ZN2FDaGh6a24ycitSSFBrb0lBNGhsSTFmcE9yRUtlYVJ3ckNNYjBiR29JYWxPWFZvOXZPWTZRbWNnTTR6NmlvdzNyL2x5SWtOdnE4RWhKWi9QVlJtVmxDVXBRSTc5VHYyV0tLVFV6alRaRmduWEJZaUt0cEhPcURxTjBLRUxwUXNZSTlhMkFPZ0tyVlBPS2VJREFLU0hWTlFnYlNBVjdNREtTTlZ5ZGtNUjNId2c0TWFrMDJVK3J2RFJ0UUJQbUx3OUJEdTEvVUpPaERQVkhmU09nemY2Y0x6U3lkSjRJRk1DM0w4VDBiZ1h0SE9jSXBkWXBwaksxbEViZDFMZHJ5RU9PL3cxRTBxY3BldkNBUHJyQ1NTdEFwTDE4bzBmd2tobUwxckNRVThPbE4wUVA4eGw4YWxQRGw2WmRETVBvZGZwUkp1ZXlsaVRKSDY1TnlOT0ZyeXorQXBqYXRXNmRJTzVFakh2K2V4TnBOY1I5d2JlTFJwQWJaSWVvRGVxRk55RWYzVldaOHA4SWNiaGF0U0xlMlpGRlJNeUd1RlhBMzFIWHhGbDdraGRVRkdnK0VGWmVPVnpLZWFpSVdPOGtib05SenZsTGp1WnpqT0JidEdmcm42cnQ5b1EzR0wyL2o1N3dKZXArYXVxLzlFV1F5QVRRL2N0WmhWdUlyWUtZVFQvZVlRTURwZkpIUjJ0OVV5UVFLVFNjSVcwazJhNDF2cVNjaTE4L1FFakx1dVhvQVNmZlRVdTg0L2MzMkh5elhhUEhYL0crUnBrUS9VNEcvVUpNVUJEWkRhdE00QXNmT2dXbkpNTStHTDAvMUp2OXl1aEVaZGpoY0hVeG10OHhzSGVhT1RZdEVyNTU0OUZ6WVM2aE1obW84em9ZL2QrbkVFWjdLNVpXY1Q0VFYzelNxdUhjaG5rNFZuOFMvcWh2OVl1L2NZMS9xbFRvTDJ1ZHFockhsNkhyVFJ3cnFJcXVjODJFaXJISEhzRGdiZGlNWVlTQnJNdldwNGlaRW5UZmQvNTJpeVdzYVVFWkJxazRoeS9VRXV6VnpTV0dXNllTc0FmU0pFOUNPLzBKMGhuRTBWVXBBSTBxNXladU9UdU5vR0RQQTAwejRHZUp2akw4RDJ3MmFIRlRvY1lKTWJhZHd1UFpud3pEQUEwdm85SWQvRVAwQmQ1WlNlazZaZFkyeFQxUURkSHd4YmphT3RxUXZ6Ly9mdlM0eEpDREZybkYzbzdaQXF3cWFUcCttS1I2M2NSZWxzWklJOGRLbjJQL2drOVV2SEU4bEt1cHJZckpOeWpZRFgwdm9za0gxYURyL3RMOHhpbkV2Uk5ycXp4ZVFyN2IrcTNjRENkbjRmVnFtN2oyV3VEZ3Z0aGcwbko0ckl3ajNOZDdSY2FYbXE4Y2dXc2FmWFJkNXl2d3JaODBSOStUWW9adndwcS9WVFRZUHdHVGNnUnRtWlFBSmRnbUNTakVCQ2diTDA1cFZHOVNtM2JUYlN6dkdpaVZ1VDlzTmZEM2xrb05TMHgrbW0zUTlRaWNJRHFMVEp1VVhsaUNTdGRkOWRuK0l0emVFRkVTZWJTL21idW5EQ08zUkNua0ErbjFxL3dVTkJNOXBOL1JCVncrWkxWbDF2SUVKWkZCeWxhOE54TkxaSlBGT1pTS3JPNU51WTErWnMvUXhTaWE0bWhSSHEzNkplTXljVHpFL1dSbzgydjF0UktvK0lIYTRrUzlvQ0c0V1Fab29vM215L0hzTU9UVHUvQTloZnc4ZG5yVjV2TkRNQzRBck5hYWNTbTJVd005ZE5pKzNyTnFtaEczcDVMTHlwc0p4Qm1VbldldW8xeVVNb2JqVEcwOXhGTVNlNkMzZlZIYTJ4dnRvMDltTU1IUzZoTkIrTllpaHlhTWRQcW9jT3grTEpLVkRrakxCSk9tQjVlbDZ3SHpVNzJyb0xvaW94bUFram5Ia1k1cnk4MkxiYlVTUjJLOHpzTE1VYkxnNTFIRitzNmxwNDdJNmdrb2wvQy9BY2lidVV2RXRKTHJCRXEvak85TzlWb2pOdGJsMjhkZi8wVWJzZ1RDeXpHcitJZzRQd0JtdFBVKzVXRVM4Q2pxRFZMUHhxc1c0UVNzaHpESk1TOG4wVTYxVXNhd2MvVGIvVm13SktuZXJONFY1a0RTT3JndmpzdS8rWTZLSWFVM01zN05DRWpBcUxHNU4wNEZPbktjaDRKeXpOZGlZK0t3L3dwdmRMUHhCVkJ3RGNZZmJtRUVlTEtUa2x6dTNyajk5aUFKakdWTUFmRE5TclhVSlRVNnI0VnhGU1lvY3ptQThwWE96QlNvanZaOVNwVlZiTmxEZzJTYm10SzNJNy9vZ3VUb1Q0cGVCYXBMQ0JtM3haTXpMODdidG5TVWwzMG1NNlRGSW4zYmdYaWxjQ051aDBLcHNyOEhTYmN1RUpOa3Njc2dPeC9VZEdySWxpRmtYMUlRYmxmQ05RVlZKbm9SM095SDJkK21SNVZhOFJGKzFYTXBIbG93QkR6anNBY0dtL2dXSXVwd2VZY3Z1V0QyNDRreFVoUXRQaVJmOUtjd0lSSmdzRXNaSVUvV1VFa1lnUTkwMEtaWnp2REl2emJZNHFtcWIzU250ZldrblZaMXJXdVBLTzY1ZTlmNHlYZTZCL3ZvbUw1RDVyQ0xiZ1V6SEhVVXlKQ2xiVXpON0VGRC9XVW9vMXRKY1VqdHdKVkwxZmYvR2pvb1p1RWd3Ylo2eEozdFlJQ2hsUHRDb1doNUFSekI5ZUN1dTEzOEkrd0hDMWY3TnBVMjZLYzRlb0k1YzBuL1k3WlRTdlBGSVNxZ1FxUVhGL3I4WEtuV3BlUThFQ21nOGFFakZOenFvSkVtZ0JWRE5Gc3BPN1FsOFAxcHFGVGt4empzSEFaMURraHVlQUNzTUJCTmg5R2VPMXJNMjR3aGw1Tld5OENHRU44M2d6WE1rU3VDeFZ5Y3JTNW5tUjM2WlYzcEY5aGswOG91MDV3b1VyWnVLeFVTMzMvUVEyaHpBRmtlT3VMN1RMSUQ4K2FnVjFVdmlmQlIwTEwwWEtzUzdaRXFJU3BwWjlTWjFJY3R1MllKSThEVzJMWmdCSHM0U3ZSd2k4dXI3YVdmWVM5RnVQSW9LZXd6UWxSbnpKT2RqTlZoRWt6dS8wOXk2cUVCZ09VcmRkRmlVL005dW1RM1lFR0xodnpWeU1kMUlWWk9lSk5BdE1MdVFsY2E5ZHJFVTlpRFRwdXYxUkNXRkZITEJkZ3NVck9PRVU2Z09vakFvZEJOc3hmSWVKSWNrdGtNS280S282Y3F3NTkwYVJVL0VOclMrbXVLRmg1Zms2c0wzbXNTZ3ZwYTcwdmxsZ1NIU1BZRzBnZUVBVW91c1V3MFRKaWpsVmhidlpSVkRtK0cxMDlIaTFFamJaM2RaSWNDSnk1OFFIUWNnQU5xRXUvRWlIN0RYTEtOcnVXNklqeDJac0c0RkxxNWVXSVlNTmdSR3hpZUZvdWtWZHMwUklNRGVGUjFSamgxR2ppOHdINHYvYWtGTnVBaVlOaENqSE9wblBtRjc5a2N5dzMxVjErQnM2TnQwWFdQT2tCS1gwWUdtR3lmTzFKYWE0SXRJU3RiTXJZZi9OZlJsb3RhUlBUcnI2R3FaLzByT0NjMjRPaDA1NGNHei9BU1pyV0grdTZhcTBXWllQbTNma2FjTUtJVlRVL3pNdW1KMmJqcytyZ0o4OWVDcFRxUzdURFk4MnA1d29EbmZKcEJ2ZGxnZE9LTksrQkcydDl5cEszM1dzVWVIRC9DSlc1M2lueG83bEVJNUV1ZEVLMUR0bXl2RUk3N2pOUWZ2Z0RRMWd2Y2NoamtVWGpPY0taeVpEbFhXVzdiWEQvMkdCam9tNTNOWk9vWkRFZFdBT3Q2QzMzMmIzU2tUMWpvMjRMRjVHZWZLY1d4a3FZcjByUFpyaTJ4NlJtUEFQc0RIVlNXSS92ZkZYV2ovZndJYkNxQ21qQ3JXajlIeXlvaFdmMVFCTWV5dGhkVlVZUythNFlQUy94NExzeFRlK2tmVUNvdlhhMG4rT1ZicDh1MktOTDM1dmFmbHg1QUF0L1NFV2lqYmU1QklLM0UyeGZKVDNhL0IyMWF3R1VSYjlzSUZ0Si9ydUg1L0U3b2hCUk9BL3Y4MHloeUtQSmtDYlVRRzZaNTE1TnplMmZ5OCtYampSdFZEYW94dWRXeHQ0N2hyY3lzODFOZkhRTWxoaU9HYzVjaXBHMTZMUW04amJNN09jY1YvVEpGdmN5UTg2R1JPM1lEalZiUS8xOXVrWVBEcUE4YzYwZnZVMDBBWUJJWk94UWZuODlmbE1vb2hIbDlhdW0xaXJ1MmlYbFh6aGVqWC9KR3B2aldpOXRJY0VzVVhVVWdJU3N4WTQ4ei9Hd3pNRUZMT1B1cmtzTEU4bEFaVS8yRmJYekt1cWZoTHVYK1Irc2hOWS9qQUhPajFjaHg4SFd4dENQeXBpVllDOFhNdmtGMmI3MXZzSjhRZXBTbzArclR0bG1vcmY2dVVYR3FiRW8xeEpKMTlZYmtBYjAwaE9uYkFjRkJaMmdweUdDYVN1OFJabEpMNVZQcFN4UEgvbTVSK243STlTV3c4WGowYU9kYWMyTncwOW5YaHNMWjI1K2V6R29CL1VaYWNYdDV2cll4cUZGbnhqdXBRMTlJcU16Qnl6RktweVN6aFVkSjI4VU9NZTFGbk1hZzNka3V6TG5Yc1REQXdsM3FmcjdyQWdlMnBnZkhhOTdlRnIrOHRrOHBOSU9ocVlFZzZtNEl0N2dHRml6NDJQa2dJYWFMaHJQS0YvRFNUT29VTkJld1QyUFdyOWFqL043MUU1eXZJUmszQ2pNMXhaT0NRbGk4cU9nVUgvczgwQytTditYNlp2aHJhaGhuK2VSTndGNjJNQ0oyUmd3Z1pzSzdsVVlpK3FlZk51YjdZMzlGVVdOY3NwczVMeHRWZTNLYjZBOGZDeVVyQkpEZi9TaVNsZEsyS0pKL0ZlQkMrYzkvUi9MTytNdGl3dWt4NEtmcHoxb1IxR3FkVU1tOWVaTzJqS0hvb2lUYzBoKzMzcFB1aGppUEZGUGhlWmhXMGlpdkE2NDROZ2gwa04vZzBjR0J0VHpORHdhdGY2R0p4ZTVPdUxJQnJhS083UjcxUE5sRzJUTUtmRDB4QWdPR0xaTjRLcHIweGRsMnBTVjF1TjVsbmFFWW9hemFIMnVTUmRZcWNjV3VodDVxOEJVYlVPemt4KzJib2pjVDZTR0h4eFo3b0dVZlZoYmNkenVEOUoyUGlPbkdQK1Y3bklMamhBb2VtLzhVOWRzeGx1RjFtVWxaS0p5Z2x1dWVNS2h2ZHIxcEllQ0ZEYlJSbzB5Y3NIZjl0Nm5hbWN0QysvSzhMcnlEaDFScUhMYXVCNHNrOU1oWEl4Si8xUjQxdExVcXVoZm1SRjRENngyQU91VjBBUE8yWVRjMTYrSjJCLzhmdDVQK0pRSWhhN1R0bUNTUlR5OVhWRGs5NHdOZS9QcTVQQ0RrRk9kdzROM1hBdUNhbEtKSFlDQWs2b1FUYVYzVmR3dmxlWkFqTkpNdkc5czI4TlpyTDZmK3FxRmt2Qjg0RldEREFldjNoc1FZU0FaRytIbUhWVDA3a29oMjB4R3NyQUtGMU9kVEF5MFVESnRKekpnejcyaXVudWNPS1FUY2lnTExoUG4weXY3WmVXeDl0dVFlWWtiUGJkS3ZydlNJV0d5UDNod3BHN1RlOVFBSWpXM0s0YnZkZGdBdm1zVzhTbGo1KzN6WHFTcHJ3R0wvUDdwVzR0dmtvM3hvR3RXVDNPWjR1dkR3QzcwWTc0ZHhlUDh1bHE5Tkx2SFBuVFZiVW5ORW5HTS9NMm5JeEtBOENWMi9NeG9vNmE3VGJ1UXIyc1EzNUtKMlV3MFZFVU1JVHlDRmdOVjF2NTczZkQ0SWk0bUpLdXdvY0k5a0tPR2dBelRqQ2VVakp4N0dtR1BSR1UzVkR3WWFBNzdYdEtvZ080VmRTd2x0Y3djVHN1QTlsVXhac3RSMDVqd3Z4VXRHbjUrMHN5TmhUK2ZhZFJpUUNoVFEvMWt1VzVzcDNoVnI0RW56NlJSS3l6SnhYWXJCZ0pWMEluaVJVU0E0NUhjZTJiMFpZV0FlV1dsZTdpVWY3KzFzMC9EdXQyeklEZFVVZFZLVitLZm4xalZFbjRNWTA3ellPTE9JU3gzUEMzbi9CUEo5eFRwMC9RbEZzUS9jQmQ2dE45QTV3K1RTVTZvaXNaQUhGRWc1eUZiKzJrN0hzUjJkTThPVkxQOTYrZzFaTVBhTDZvYzFkTXdLZFl5STR4bVUvaE5EdWRGVEhCS3dnanU5dW9CK052WnZrLzV2eXZoZkNGYnB3TlVJS1YwSUxnQ0YzV2dxWjB0Q01yaUNnODJ1UlA4dFBaY3hybjlpUERmaDZMcHhLNm5DR0J0QmUxVXI3c2VpU2lXaDluTUo3aElrZTJOQWRndXZxRUE1VVFTZE90MUhRdkRYM0pjdkFIQWRGSEVKd1RobFAyUVhGSkpLSXpBcHQ4ZUVnbTFsblVoeWJzMlN3MlBKYTJMdmJaei9kN0F1TEUySUdiMDB1bDVHZjBubHdGM3dlS0UxZEhHclpIRFRSdGVpQzhTNkhSWllaWTRwSHBVKzJOMUlyM1dIS0pqOFZOUXhCZDgvYXNJYlQ5TFMwK3BxdURUanVmNTBCRTI3TzJRcURLL0tJVW10aUs1Znk0aWhVTEdVdjYyTDJnemlFZUkyODF6QVc3OWo1Rnhwd0VYZ0hxTnJkNFdjR2N5NkJSUGFhVUVKL0NJbnZQTWk1Z0Z4WXBJYWFMQmtQL3BzOVFuQWhQNFptTXNYVVV6aklaY291Wis3bHRuUDd1OHY1aGpDNzVRU1FnWHVBeHV2ekRiblRPYVhRWDFrL204a2RXVzRWUFFYL1R5Y29nZjh2VG9kQzBPUnBCZU1YUDc3UHVZRFNsWDJVcGF2R0NMTmc3d0kvM25ZU3FCaGFOaGt6UHNwV2w1Q0JBSjhIY01rT2NXdEdPTGthOFVUWXRiV2JZbzFtZkh5VmhNV2h2TlpEOTB2amR4SjVKdVhCZ3lmMjZwNm5IcmlsbTBJaHBFeFdrb1BmaFZHSUoyN1FuYmkvTGszaWpKWHlKRnZXLzhzcGh1dmpQMmZzVXQxY0piWVdleCtSZkNNektRcE5TTE93ZzIyME9mY3Z6Y05VRGNvaWRROXpXUkk3cnZtY1JNbW0yMFR5MEpxQzd1U09Rd0Z3L0k1L0QwejBsYm9wK2x4STJFR3ZpL2VVWE82SGg4UEdEMzgxRVdobUVmOGEvaWZEYmNSamZuY0pLTGVKdmZNeVRIT1AyNGZnM2xGVEl4SENDL0RwN3Jic2VrUGJEQUl5b2Y4L1FmQTVjZGJic1FlV2ljZkRPSEJZWmRjVTdNWHlVRG1sRWtTdmYzdlYvUWV1R1MrbkVKcFdZWGtLRUN4MGFaNjE1T0ZYTFJET2FFYXNsL1dXdnl3NWUvTW1PeTIwKzdZSmFtdFJCSzBFZkxVQk5saHlDRzFZUTAvd2hjd05Kb01WZ0dlTFhjMFY3ckdXakx0OFNMS2hJVEw3RHJLNU1mcDNzM0tKenNrL1hCNmtOZEE2OVB2NzRPYUJiclpLaVVGMlloNkt2OFhKcTB0d255Qkk2RlNRMUlZNGxKZkptQXNibDl3bWJhUWg5dHpXWUtEaDJWT0lkQmFNQm1RMHBya3dQNUFiREdpbWJrTU8vZDVaQ3Y5SHNSdGdTb0JMUENLSGhKbnVLZzgrUDllR2VKVVdkMzg2NmxOZ3NjWXo2b2R0MlFxdjVWcENWNitEaVhLM2J3QzE5Zy9DVW1FOElLN251WThkd0FIc3BNQjBnZExaOWFnWG5YQ29kOXZVSDZJRjZmSVU5d0w2SWhTdVNnaHFveEtycWxwbSs5M2FMME1YNEp6d3k5amNyK0lWY1ZnRU5OM1VGS0UvbElESjJCZHB5NG41cTJVOU4zdlk2dlYrSkdpd1ZrOG9VelZkQVZDeDhTYVVwcUNVL2oybXpvRnZMQTc1MGFLL0I0elhka1hRN0tJRDlZbFZHSm4vWmcwcmVrM0pKcHNJQk5vM01yUXM0bXZCYmhmbUJjb2M5dDRpNCtlRFFnV2ZvbGsrazNiUVJ5YWFXTG9oWm9MYWN4ZTY1ZVJZOWMwOWZnaGZyeVdxcnZzR3FyOVBUWUV2NERjN1BNQTU1aVN0WnNyc0wxeE5nOVNFM1MrZzg0VzZjQWJuU0hobnhnaHNMN0NEVU5nM2x6MWJPL0h5OHcxL3BTNUp6bkhaR3hOQ1NiNW9lR3RaN3dCSEdHU3dXNjFhOXVLZHhETE1hZGNkcUlEV21EejFXZ0dJR1VWRG1MTTlXSUd0MTgzUmJHUHQ2V3IxVUxJRXV5YnBUTEZaVVJYZnJnRERCdXZESUJNTW5TOWxZNVRnREVNZFIxZWZSaHRFazZoWVhHY0ZUdURpUnFnMmI1Vm9jcm5YTlpOTWxidmdWNWpXeEhFT1Q3S3VkQXhRY0JDMWVKbUxaS3lFazc1Z0Zva0k5OWtnZVlLTzN4Sk5GeUEycXhvaVhFQWpnOTJGUzVQNEU3QTdtLzNwVmIyQThTUHZxUFVHbzJZK2poZ0lWNnptQjBvT0QvWFoyM3BjQU9RVjN3M3h3Tmo1bVgyUEllTmlkRFRSZXhDc3UvVGVFT2VKZXJvNVpVL1lwQmQ0S0M3Tm0yMDdIZW1wU1dpTTFEUy9nSWZXWXJuWWZ6RFZnWjhSb015WWVMdXN1eUNyd2hCOXhSUCtiM0VFbTBDNXBNZXc2WVZ3NjdaWTIwYy9TL2l2MDdqSGc2Qzd5Ujh4eS9wT0lZeERscFNmR09QVXVrK05tMmtkNTBLeTBBRkM1WC9jbTZMVHVOQmM4ZmkwSDJ4TGhlMjl3Rm5wTHZtZ210UlkveFNRcnNrcG1JK0s5dnltWlBmMSttRDByT1o2ZGIyM3BOb0dRaW5tM2hjNFhxS3NnS2hrTVU0cDVqM1I1YnNYclduNFNndjM5SllmWmZTWjBGOG5OenlROFJXNnJycm9idUpDT2piZHJJVi9pUU5uVTFlemdqQlVlTllpU0pKVDBKMDNPSCtNVTd5LzE0TFcreUhYZFBEK3pLMDdieFN3TEVGWnRncEM5L2toekp3dUIrMzdKK2tSakQzRlQ5Y291VmJFV080bDg3QllXcWJPKzZwVXl2WlFlM1kyZVlSY0hwc3pzRnY4QXlhVGtNQzhzOVo1M3dmeGRZa0JWZ1RKOFhjNFFhK0tEV2psWjBGK240T25DR3M0cmFnT2E4ODhDcE5tRFBDR2F0dEFJUVhBWk1ybFJ0emZZWmt5aDFSQmY4TjBVZEg4cXNCaU9GQ0JzcVlieEFRWk9LM29uK1lhQXA2OVpQRmxlTE9EVDVNZjVpZm5ZWUJSZHVEbUlkVTlIMVdOekZHVFZzcDNKOXNiZzB3M0I4R3djczRtM1h4T2QyNWxXMkRBckNDY0VOK2ZRV3VYUE0rMUU2cFdDbmhSVGRwVWE3ajFWZ1MyT3pDWkoyZjdPR1A4MzZielZkK2Q4bTIyOUVEYWZEWHRkUFBQd2FEQVUrTmR4RnY2aHhZS2FsdEJJVElhZXdPYmpzYVE1cGlxN3p2UnYrQTZ1anF1dW9vUEltWStESG1jVy9venVua2xXOEo3NGFWKytCUGxoa1VTR3VKRFRCYnZ0NHlWcy9ITmYyaVhGTVdGRGJlL1hwRW1OaExobDl6OHRKeFR2TDJnZXU1Q3ZMR0FQQklyN3RMS3VIcnlqc3NVcnZOSUplVXMrWFNiMDIyZnJ4WHN5ZmZsbkdQaTNIS2pRZU1icFJyeDFwaEEzcWEveERRa1VOODdjYjJ5R0I4RHh3NzdOMXNqZndpdGtYbHJpMGVVMHBVWXVHWDNCZlphNCt5TmtnOUV4UDI0OTVCcndHVjZQUDRiUDJ4Zys1dHpnWEs2c21XcW1uY3p6Tm5kSm5OK0JVa0IzOVg2WVZVWDF2dm9MUVl0WUJXaTduRDJ5SWY4TlVHM1Vidmg2amFpN2lGWXlPak5RU3RIZHdoNnVXR05FVFZJNjJSTXgwTUJzNnN1WGxuTUZYTlc1NUVsYS9CZUM4d0plZmhpd2JSNnpZMkdZMzZaVHhRRXFlNGd1czFNc2x4azEzQnFpNHNHUEJoekM4Zml2TEJvcmtkY3V2bXErMGdSVDdyYnhKZnpudFRmc1VseWoyZUY0Vlo3TC8rcE91RlZzUUdRZm1nU0RLZXRtY0ovNE16SjJjV1YrNGFoYUVxY2cvSER2emdjcGxINDJIc2EyUitNZ2treXRSNGhTWFRuZ0xMVXVFallHUEs3b0ZBRGhYRHJhT0xFYmJNSDJXV0dhRHgvMWk3NXJBeFBGYjBkbEg0OVNZNjVGZmIxU2JUT3dSSkd6Nmc2SmN0bTJCTXRQVlJvMlh6WlUxM1dxeVRBYnBkd3JiWXIyTjRVZ2RSdzV6ZGc1b3JybS9qVlBHbGpwZzNWM2N5eUU0QTRrQnZGaDZvK0IrVm9vRk9nWjVyMld5WkVkR3RtbENpdXFIQWlJdnhMVDBSZ1JxeDh5M1hxWVNRTVFwK1VkbCsrTkZ0OG5ZR2tTclBmcVFaS3JiNzJlRy8rUUNuVkJZSnRnV2g3Wjc0c3c1dm02RXNxR1FmZFZIdXRDMW1FN2NCUUUxZXFCb1N1U2tLSDlQS2VuQStId3hrWDl0dnFQMWdyOENRZWMvN0NjQmxCeWV1T2k0c1BTRDIza1A1dlZaZ1dVMDgxTk4rUEJ5bWVmSjB5VlM3bjNKNkt3UmUvQWJzNGVWTHo2dkFZbUdVSmRCYmRwTDB4UDlRTkVQZk5oWldTSzVVcjF0ZXo5cklUcWJtcWF3bVJjMWxzTXMxaHY4NUpwdUVrcEJuSXVERndKWjM5OFgreU82YnBsM1l0YlV0QXRJSmthbnhGZjJ2ckhkWDJWUFZoWmN1N2h5V01sK2RmOEczaDZOeDBmR3NuQTBwL1BQMXA3WlhCL0w5MS85ZkF4ZzhhaE9aQU9NTytTemwwT0xkdVhvazFLYitnd041NEMvOUluMSsxSk5Xb3JZQllPSEZ3OTVGaXhTbFM2dWwvVkRxWUZXc1ExQXpSZEdXRkthOTUrbTdTVGNZblQyeFhyaXAxckN3cDcrRyt0MXZna1NDekxRUjFNVDUxTHdJRnYxb3hvSGt2UGJXUmU1TkNjRURvaGg3R1FSSVhTOHM0L3pycGtoSHhzcmNHaVB1dm9DYWdJck14dlZyeG44aEMwdFpSbnVtYjljNGV1azM5YytqdFJpa3BmemQyb1gxWDlSaURHOWY5UkoyMGZ1d1BPRVFsVjk2aC9TVGNmVEVPRzRrQ0ZxczRMTmpDR3hPOERzbzIwLy9NL0FOWENaNHZGeVViSXFYTC8wZkI4cTkrdmxnaDB2Z3VXcUxNNWo3Tks2Yy91Z0pYUHpoZEM1am4wOTJmYnZuQXU1eTNlTUhDeHRhUmhITHVWODdnbWtaQURma2RIWlIxWnhLampLUUhFS3VWOHFRR0ViVUswVW1DbnltTW81cnFnR2tKOUc4em1oQXhyYWtVN0hURTRiWnFnbjRDRThXZjhaTS9NOTZ0MUMvTTZXN1I4UWRmMGUyOFA4WHdDT1B4Mm1wYWIzZmNlK0hWRFZZNDI0SDBaVndCMGwrYWFIVGdnMVBGWmMzNVlsYlpkWXpOT0hUMnlpMzZBUVZsS3c0Nkdad2hLQVFsWDhRY3lRT21vMm45NTdOVEdwa1BWb1ZVMWkvNC9jdnY5bUJTZmtxbXdtTGVRS0EzMnNxb21vNTVrcXRnNCs3R0FZd3NDOXA1UE9FYmZZYkZMbTBNOEQvVTk2UjJiYndjMnJWQmZJQytMZ3JRMW44QlhuM3FkUlZ2U3Jqb0gwZ2l0NlR0em5TNHpuUUNTd0dNa25BUWVjY1NoK1VEcjNwYkRTQi9yT2FpN1lRWGMyRGVuOEt0VjQwbGgzMysyMDh0Nmw4TkhSYUNLdzdQYjNEMFQwdzhaWnEvSjc0MjBtempQYXpEWktaT0VZSDB3ZjZsWHBnUWxDdExDVGh2QWZpa2xxc0UzYms5aHRFbUtMN0hpMGsyUmhCdHRLbXphUUxaUGZGVjFCWE00ME5QZ3FxVkQwSU8xWURlUkJrV3AyMjhlZC8yYmJJOEVjWER3KzFpUGdWZW1WTGh0aXpKRHpIamdOaXA1RTlTYnlRUFJ6d3V2amg5R2x2ZVNrS2FLZk12L2MzZ3luakZSck1vZHdTcUlSZGs5R2xjRldZZWlUdDQ4VzNMaGkzQWp3MnpvMVFvODZQVEZRdTViT1ZxTWpiTUg1QXU3T29tSkd1amExdE9CWTNFZ1A5QzU4VjN6ZFlUN2NiWUZBdmE0Kzk4RFkrUDBIRThSSStwT2VkYUswdEdsVXR3NDNjWk1zTTRFb0pzRTBRby84YVUxS1p4YlJKV3gzeXk2bUhod0NqUDFyOUxiOFlzamVGRTB3SmdQR3lldjFBUW5HMG9HSGRLQVl6RjV5ZEdjWDVnQUR0ZDNBYjVadkdvZ3NOWHNiZXVLQU1oSEtlZmRmSkxZMndQRlViUjk0cDgzVThhN3J5TWp1Z1hCaE5hRVp2WWNrQkR3TWYvVCtaaGFVNEpJSGFOeXN5a1F0amhjUU9DMG0zV1Q5RFNVby9TN0NmelVnMUFhdUhYeVUrWlhjTnQ1QlBlRXZGSDBKOWpqR2luNFhoa3VNSUx1RjNhZHB5VHc1WjZrd2FsLzZWZVB1STBaNy9Qemg0ekU4a0lzTGhlYU4rU2t1U1NwWVBzcHMxYjhGc01TeEFWTWhIY0V4RytlTXVOZU83bSs5WW5qckx5U05wclcwNDRBZ0FQRURMeFJEYkdZVDRFTUdHWGZlMitiR0ZCaE1PazhpQk0reldIWTBwTUhoeDRXOXhFWm5aOW1vb3VnQnphdCtMQUJnUWhzZmZPbmcrMjM3WHB6Y3RlRWJsT1JzSFBHdk9UYlJiZFl0TzdUTUVlY3kxRXFEUWtPZzZVU21PRkxpV09rbEdSam9MTnA3MW9lRkc1YjBjN0RubDlsTWI3NXpNSGRXZlJtYnhMUWVMbkJGaWFMVGlHUXBjN3l2UVR1WXEwUmNQeTVIditPNGhRSXV3MElFZnUyUU9pdTA1cTNjUCtlMHEvTTBQZ21UR1JCWlJlWTFSdnMrdm1LMW1RZngrbUo4czZodklnUGNReTd0LytocVJUaFBMT1EwcUtmOXFqWFNpRVA4ZVN1TFFZYWgxUVpsOEhuVTBhNlJleFlNZW1vR1QzdmhOVHdTT3ljNzRhdjhQdE91R1dzYkMraTZQZjR2VVo1c3Z1ZjhkVUpDY0V6V2ExVXJDL1RaL29HU3l6bXhyYnpwNzF1aFdhRWg0VTZlMjZkendYNFhhODJnWnAwdDlvekhlUmVDZEZhbUM4Rkg2ak1kSXhFcy92THc1QlZBd1BCTFQ0MVFTL0ZiaXZ3YXpGV1BCY25VZE0rWVNNZS9JTVFCR2trRFBTWUtSNXgzOXRuMnRlWE1KdGMzZ2tKOXZEa3IzeVBxdXplNXNsZTFOUVF0bldNS1JrOTM0UTZ5Zm41dVdzbEF1aW1JMXhlckx1d3JzMS83bXZYUDMwcnJkemxJNU5iWm1uUUhReFNLVTgrTFFuYzlTd2U5eTZpM1dkQ2pvbUFRdExKdHRrcS9kLzF6Sjd4L0VoZk1Yb3hVUkJaa1AzNkpjMnhVV0pCbXJqS2pNRGNCei9Bc1l2endUeEFzT2tVT2YxWTNXbXFYSG9NbG9BcDNVSkY4QzdtcCtvaVB6dURoNUwxQTlDMlhGeE5PblVsTVhhOFBWTWVPazlIYU1YMHEySTV4UTBGeFJCaFJ0NWZrMWF6ZFh3WFcrdWJJWGMxdDgxb2lNQUY4N2FzbHNPakJVRDJHZFBHREF4MkhENVRjTjc2TElzR0dmL2lNeHNoSHpvdFhUQmJnYSt2YW5aazlYc21nZGt4NFZMeGs4UmoyMUlKR2dIQUdDUEJOOFZtczgwUk9iUWpXWUh5RXRGVVpVaUZFZGw4eGJ5djhIQW1SM2ZjV2dqK3JwTW9LdlFhd1Y2SXcxNllRYjdweHJWWmFzYnJBSWg0V3hPa1dDWm81dVpGZ1JvMmg3R1hSSklocWdKVkxpK0ZjbnZIRmtYR0lvcXR2QVB2dGpiVldYMXhmdVNTVFRGSitJTElQVVJOM3U2QkJZVURvdW54R3NEMys5VHE1QVpMTytZV3N4elJoUVVHSERsZnByV2c1VUM0QldmTlpsWHZYTkpSaU8xSWZBemg2VkpmQWppYUNSMmhvUnpwSkN3dlVVSWtKUkt0Q0hvb1NuSnBvWXEzTFZRMm1DTlZMKytlck1EZzQ5N0d4K0ptK2lUR3VpWmx5bDNSdnV1bUw2SndUWXI1OGRncy8rWWhtWXNkYVFOU0FmRUVHQXdPMmN0SmRaeUJ4Ly96RHgvSDlBWGRyNm1sQ2lSWlJVNFQraWlqdE1PWFdIbzVKTDRDRW5ocVFVZExKOEZka2RtRlR1SVJaREg2c2Z5eEFEenNLUW1hamV3VWloOHpUOE9pSW41OFQvSjFTdmhGZ3lYOXBBQU5RY2VIU0dQKzd2YTFmSFY3NzVvL1lZeW9kWEZvT21CUWZ2ZE1YZkF4aEI0Nm9xK1g0bmJzVzNtOVUyZ3ZlVXV3TEVLblE5L1QxY3RaQzAyVFJVa1l0SkpSYmIzY3l1S3lWcUtDLytmYXBDeFR4WkMxcjVXcGY4ZVltRVhKSC9LRmdGSm4rUjJIUnA5YktKZHR3SkViL1JXZktKR1FKSlQ5U1dnY3NrTTJsaUJkeXN5SngrTm9mUHFNVXVRNTRldHM4R0xmZk53TEIvM2ZFSzE0N1FpSEh3TlJCdURORVdPaEpFaFJvN29BVytCd1JUSlo3dUs4MEtuWVhPL1hTbjA5akltUW1yWDZVSVhDODFNdGxvclprMkNSRXJxZkxrMTZiSU0vSlBqcmhaeGFtZTBZNDMrNDZCS1l3ZWdNT1RJQWh3YWVQSWExRlRMbVBocWoweHFQbFpEVGpQcHZ6R3JQUkZ0UmwxYU93ckpXcFJ2L3VvN0pRWmZlTlZCSVErZUdwaW0xVlhOUnpTVTh0dmo3SVNGL1FmZE1paExxNm9NU1pFYkJXMWtERmoyeURSRjR1NzFKQ1NuY2N3M3BZNXlzNE9rZXF4VzgxTWxMamcrczFXNC8wR1c5Ym5vZ09vaU1ZM1J6cGtDaUVMSG1BaUczeXJVb2VLL1VER3hNc0ZTY1VkT3ZJMENGTTU0Q2J6Um9TRityMU0reFM5dnVMWTQvQ0pybDB1Q2YyRlNERUZQaDNMbzlrUUZMdTE2aEF2L1l2L0FzSTV4VHUrYWtxTVZWdDVkT1BhOEZCOHVEcHpSeEJlVFBSb2VFMmsrb2tSbnhYSnhxLy9WSHBldEtuU0JZSWlWWnhtUHQ4bFFMa25jaUl1WUNQMFhFc2FIdTJDcXQ4SGVDMlprREJyQ0RvRnZMU3g0SmNHNVlSQkhCU2NwNTFEeVN1c29HL01tMGE3SUpEczljYlIwakR0SXM2MHFsRTk2bnNrbHdsa2pCSXc5bTdJOUVIMmlacjBsRWt2S051NTNaUlZDaVdsUDZjVmFZb2RUclRSVllWL29rdDY3SmNJZGUyUURjWHlDWTllUHliZHNUWnRadWpLRklqUFM5RU5nTG5EekJmSmdpOWJWU3JaYjZzOUNlUjd4dytWdG0wQ0dEUkVlSkw2UzQyZGtydHU2TGlYbXI1UDE1MGFSOWVPK3RPNnh0MzhTeGViU2lEUS9wRWJweWVwTnhKalFYOEpPbFh5QmRtakJnSnltWjE0dDliaXBxTll6dUZKUE8wcUJLOVFodHNDbzFsaWM3WDhMS3BCbjUxeTdBVDF0bnZ2QTh4VFd3MnpQcEFKSC9sOGVaV3paaWtReFlZMUdxSzNUMjkwOWRWci94dkp2SDNVSXgxSlZWNEdNOGFnYjkwUDRmVzV3M3dRY1ZvSlJLMnBsQlV0OUdTbkEweGlJWVQ3V0tmend2MU1SVnFpbmh1cEFYRVFleE9COHlZSzFYVDRacVRDaFIwSEVLQnljN3daRXFxd2hoMUtHN0FSdUszWUpCQnZ3NGwyakhCWWdLVFJEOVpmUCtIWVI3NVBTUkY5Nzd5SzNWaitDYkF0TkhFdWZ6M1AvQUhCK2ZYdTdmN1VsZVIwdXNSRjROWGYrS3JZK1VKeVo2L3ljZmt5TmNmeXhqOUVBYU5CVHlIQ1kyMkxFajNwanp1bHVhVFVzLzVibnJXZnlaWUhlMXprSWhCamEvVGdKK0F0WmcyTWRmM0NhbU5xd2xiV0I4QnNkM3V2SmtHanpxT2hVcTIrdkd5NG9pd0pNUUJEL1pBVnd1UlhFTGpjRVhpb2RyVng0MmVZd3ZHYXJCUHNBbGZCU1B0SVJ0MlZGcGdBMTVlVW5oeGJYdjc5ZW1SVXVUZVlKSXhQYzc3Z1lDTDZQTEtoQzZzWklycmZpbEp3KzRGSnUrbXlMWWtPNnJLR2x2VUsvV1N0d1ZVc3F0UVNLbHZRajhWV3BuOEpORVZJNHRjNzJIRXRTYjZERzdOM0JiemV0bEpKeGptTEEwc2dHU01OWnZiTEszNFVYWDZFSllpNEJ3ZzFwNzNxNmY3cHNldDdQWXJ4bnZnZVhidm5qTkc3UUErYnAzeldxL3dRQkRLbDFCeVEzM3NsWTdwSlVwVHJvd1dFVnlscG9sRURzb2pmWitxYzFuRGE2VmxwVVVrZ0U4Y1U5djkvejQ5TVVleTdMRFQwYlJIY2IwZzlsajh1TmltR0lpb09oMm10SzEzNEhFTmZSU0Q2RVpPQUpwc2tXcEhXZEllQVkvZzhYUHc1RDByVndkeUN2RnAxQlNQbGx1TUt1RlBKOGZ1a2xaL0RJc1NqbW0zczl2dTJaM0x3UVlDeWdQdG15T2ZqN1NKVVpZS1dKTGMxcXo2NEJ4R1Y0RmdvcGtDV2RDTVA4WEZoWXhYcjR5eitJOGhYcW8xbnVrZzJSWFdqVytGR2w5Y1lQUlhBS01JVi95WGRiczRPSVlGQ3B6d0NIZHFuQWhKRWpUcUJUV3hXWitQQWRkQ29LSnFXc3VtVmc1R2QyYk10OVNKNnk2KzVFRHY2RzNhbzNKSkRoTk9zR09LbU9HTFV3bXhxUjM0b3lEQjE5L1FuTDNvcGVxZ1k2eWZFUUx4L3U3cG1ZSmd3U24xejJMRlhKOEQ5M1pFdEw5RDBPWGIwNFZSYlpxUlJjN3lkN3ZsK1JjUnZPM1QyYjREaTI2ck1ZK1Jzcm1rYnBxNVNYZ1lrdU15MGFrVlMwMzIrK1kxa1kxdHc4eFhTRFEyS21LZ2RMVVRhSU9TVXRLVnBlL01DdkE1UTlQcmpLa1ZnMkZXYllpRWVGaHBZOGF0QmtxSnp0LzhQSi9UL0k5OUlMbUNYQWtlOEJxUkNaZTdOdndMUXBaaUhJSHJjVzA1VmQ3OXRTQ0FqRlgwYVBPdnpoV1BsK2xWVTFEZSszQ2RCcmR4dlFHS2d6bFh0QzdFL1NvZG9oeTRaWVJkUVlUOEdoaWE3ekY4SUlJa1Z6NnN5YWhtUUltRlc1cFl1OTZFRGhLVzZ4dTk3REIybXpNTnpmT3JFZkZTcENtRXBZV2JncUZMdWJXZCs5R0RYOWtYRXdvTEhuTDBudURUZmJGSGZGZGx1UXZBd1lYUzRwdmN4MzBQUXl1MmxkNkM0NmZhOTR0OHdJdTVSWVVzTDllUkl5YmdLbktXdHR2Y3BtZGhSRFB2S25XMGo4TE5YNVJTVGR4SFNyQ0crajBoT1VjTitwOUZXaXhteEdSVXNnSHp2MzFSNW1JRHVYUkZpMVZWTXFmRTFCWkU4ZkpMZXFqNUQ1MUpORGNRKzZVVU1XUllDOU1ScG9MOG1OelRaTERrc2J3cGlpZVNPMWpUTkMvVUdIdmdjS1ZPQUhZcXE3WnRFSStmc1RhaU9JQmdGYnA0UVJLOEZUbys4K0ViaGNZai9STGtqNjkyV0h0NmM4NGcvMTNlamtycGhrT0FsdDJnN1RSSE1JYVlXSEgxc05nUTVzVHJodUVEeGhSOTRUN1U0MkZLK3ErYzFxRzdTODJ1SGN1b203Ymd1c2ZCS3RLa2JIMWloanAwdWxMZC9GK1VRcXNoY3lFa0xuVDBPT1ZqMnhjSVFPaEJRUjh2SllVeE9NZFhkaXY5cmczZjk3YlAxSVNDZGtSZXRmRVBJcEZoQ2RMOUUyMzU2NGpwc01uUjhPQ2ZENGNsNzFQcGlsYStqR0Z3VCtERlZ3OURZazZiMFNiRmtyVjJlaWpYUEtFcURKd0NOa0lDc1FFQ0I5QnJqR1ZidVJBT003R1BxcjMyNWFxZmQ5TXU3VmxGZUxoazJKMmVPT0xabWV3MFR6MjFPazBybEtnNlNUVEFENEJJVzUvSFJkUUtWV0N1YUxMZUpXRlF1dEE1QXZvVERrZnN6SlVMeDNFV1A0QVR6UGxUV3JUT3ROYVFuWjFFY3lDVGVsendoV1cwVUVFZk5wQllGTHlISjBzSVN6Q0pWVzZZSVdWa0dYdVNzN2RnZWlUQldEN2FZU2ZvWXo0RC9BTHovUHhVTFEvTHdEMnYzNCt6dGxVaHd1SUk0bWNQQzhHRVZYWlNpa1JjVHFQb2lHRzVZYll1NHJYNXM0T1NDbUFyejRWdTI5VXR2TCtXWFNCNXQvaWVIVHBQWmROS0ZTRFJmMjJEWFBGMENtcFJmQnZjeWFJRU96WXBKYmRDZzAvOWRNeVlHWS9IZUdocU82SGs5Nm9QNmVEQ2tvbk1tQkRFcXlQZGIzalJiQlhhdkF0VnIvQmRyVmJPYmhoOFVZWWRET0g3WnNGTXlzRW5RSnU5U3RwQmZvMU55L0VoaHpRVGhkREFRb0YzS05JcE8weDlPc1ZyaFlxL0VONWRBbVB5VjgvQnlqbWI1UG9xQ3FsQjdkNVNseHY0TkRVM01adjFtY3l6c1dSMjA4L2VTdmEyQXlGVlYyZTNGR3lkd2xkSHo0cUhRMllReGZPcHdxRGZxZG02bGtTcG9NMGNmb1RQOUVCTGw2U3d0MS9oOGx3bDF4eUFsR2ZlMmorVHhTcWsvRHFSdlZVTm05c3EwN1ZqQ3N0bGpnSzFNcFRnL3lhN1JIZ1lnVnlJQklYVy9YTnN4cUhIU2dtSHhEMWtlNm5tbTM2V2xpVmE5TmNqdGJ4ckFSb2Vqd3RqZHVlYjRzbU5qbkU2MnFsOHJFb1NzQVJUM2QwcmtvSTRxTCtrREdiN2dYQ2Nkb0NyeVhZd2kxNURvQWtHVC8wL3lhNGkrdDF0L0xGY0hsc0kyMUpSTXpCNHZyT3J4TmZReVJpVFJiYkhlVHY0WWpVMVJ4dFpPNTNhQ0IxTVZjMzZiOFQ2NHBiTkVoeUtQUFdpMmdvYjZHSzlKdVRQczlXWUdCRFE0a1o5MWFISFI4QUhVOTlzcm1TdkNVUVd6TGpWYVdmdHF5VXBsMWF6dUljRGxqNHpycExKMllSZ1Rza2JpckdpRVRpK3JxUzIrUnlSWkRIY2dSL1pIU0VFWnV0UFRKVUIrVEx2aEdWODdTRm9VSHNIWmZtVTBhMFNHK3oxbWZwZFFwWUZDZUUvOWY4aUdHYnliZUZSYlduaW50Q0NyTmFvRG1XdXdMeUxvS3hVdzVTSWovdTVLemc4bzBaWXFMbFA3RGQ0bnpTWUZYT0RVTTh2blhiYldUWU5zNnJrQ0NHTHVzekUvWWtydlkrY0MycXl4SkRkSFdpOWlyUVBNem5ySVFjU0ZuUmFGZDJPaldRcXBna2FManJKZkZqeEVNTTZ1YXNiU1NSNjR0V0pjam1ncmUrWVo1WlJtMEt3dVNVVGlWVGxTb0NWQlRKcUMveG00d3RESkFxZXk0T0hGYTMyVmhuMlQzWnJVUnFIRC95QUhPQzh6NXlRUkN2ZnRCbUNnRmkvRFMvUFhvUk9KTDhGQnpSa1FTbENKd1dvK3BRR2xxVEViWmQxQnl4QWpVYmNGUWUwTkV1TUVvbktraDdUbG1INFNxV1BVTFJVUm9lRGNyS0tBSjF0VWFkb1gwdmxTKzJxbm9tOUM1VHNpRjJpZ1U0THRvMFEwZWsySVhuUElFZjJ2SUdWbkoycGxNQ0ZyQzA2MnR4WGpUUG5YeFNab0MySHI1dktBYlJzRXFjNGlqQm9kM1lzVkVsV0luTDhHUk5wekFQeW5rbzRyS0QvWWFIdDQ4MFFrcUtycEJ3ZU1hTXVxYUtzR0lVaysxc3FOaWtQaWZxWjczaS9KODB6RTJPRVl1KzZpV0NaVEdFWHB1cnUyTkJTWlFORUpMREpicWNxaXcxMnVaU010M1EyQ1ZSY1lGNGRzR3lPSWh2Vk1vbUVPeGNMeVphcnFSNVJUck1sdTZSck9xeCtIOURSWHZsck44OTVZbm1xT3RHT202dDZoUEc2RDJVQWRNUUxDM25PWktISkJ4ZmZTZ1pZQmk1akVza2p0b2dmbDBTY0xpamtqZTFnTno0SmJ2ZXhObTRiTXg1Y0VFbGNNNFdURGo3TU8veUtTR1hiRnBpbytNTE1PZ2laNmpxbG5YMUN6Q3RNOWxVRWZiMldHa2VBc2pYQ3pzK1EyTkdvd0JJK2hpdjhQUVY2QU1QV3IrU05QV251LzNHZG1qTDJGVnp4OE9sbE5VbytqcHdIcEYxUWpydXF4eE5kZzhlRC9SVDZ5YmJQVS9OMHpEcm1QN0lqOVlIbVViZGNhaHYzUEYrcWF4TEZjanNNS1E1SUFmTG94dUo3enJ2RmgzNXF1UHpxZGdwNXdDMWp0dkNjalJBbEIzdXF3cFpZOFYrSThRUExQWHM5UkFqZy9keWFmMzNlM2lxRVlrN2pURzB4Qm1JWUI4SEFmbFBXbEhIVjVwM1IxTnJIbUFycTVNYzErMEEycWZsNFVkWkZwUDlOYm00MW01LzkrWlMzU3ZrZE5ua3VsOHFVaGRCUkhZRkwrQ051WXNhSWh5bmd4a2VDRE1jVVZmbWxnSUI0SUYxbmo3em9HTWhPSHAvUFZLZU13bVU0aU9tc2lUYjhrYXArblFRUERmajczc0pzZEQxQmFlWmFhc0hWN3pNcmlVQTFlTEpRcFlMU08wUzZXbnR5QkRzOUFKTTg3REprUDZYUy94R2UrcWU5QU1sZ0g1S3lVay9tSjNIVjJKZHBFa1BpUGRBOUVmVkMrMk5JN1g5TW4yL2hENlorUThuODZ0Ui9CazhMVlYwSjMzekF3V3NGUCtxUnBUaEVyYjdTQVY1K0Zya2h3Z0phVTkzdVJwc3Y1cE4zYkRQUG9USGNhMFB3d1NLaTFlZ1FwYzBXMzVlS0tRVWhFVGJFa0hLSFlyZGx1LzJsTEVPT3FVZVoyUjNnd1RVTjNPREdVeTcza2ZPdklZVWh6dEdQL0lNbFNWT0x1djFqNnNDd3NoT01DalZjeWR1S3FGY2x2RHNmQmFyRytReUVxQXhKdTdJTWpETnZaSTJVdE44MGdVTjlUN1NiVnRyQjlibWNFU1VDV01VZ3JJNzFKc3kyclR4TCtKdE9IQVZQamN5bTdybURxelJlVDcxS3o5OFI0aFg5WnVsbjM0STMyTkxCRmpaUlN4bENVZ1NSaTgyMzZTZ3ovQm1WZFhMN2ZaYVdYcXFpV3BwZ1hIbGNvckVQaEVmMFlSYTJEN0Zxb0h5RTRWclBVTDNoK2ZCVVA0WmtTOEdFYzdzMzljMWtBNUtyMzl0MlRXaFI2OERhbEc0UVc1OTNtNjdWTzgxbmNXZk00Wngyak5iRDBlY1BudUVWWGMrR3grYXVwb2tqT2padTBtRVlCeHl4ZGo4L2hRT0kxRVVoSkJGQit2aHFEVFhESkRRbWlVdXdnMWdtRG5wSnk4enB1UDNJNjNNcGVReW5CRk01TFVmUDdYN0lybWJJWU5MdWdXU3hLL25jQ1UzTHdIQlpySkFvVStrcC9lVUlnT0RnN243VXpnOXY0Q0ZOUEFHM1ptRU1jSmQ1M1VhUUg1Nk9hRVBkUTRrZ1ZYcEZZSWtVeEh2WE1aYUZxaUMxRldPcWozSjc2THFKRjRhaGg5S08xdTViNjRuV044MXlXcUpKcmVqZ1RlMDJjS0hhcjBlcFMvU0ZJbldYODJNUmMxT3VOTDJlV2xZaTI0alJYNGtiOFpaZjB0ZkhOcHY5SXAreTN3Mm9vM1JQakVVNFJBaUJab0x0R2taZS9Na0VQa1Nvb2ZjSUVoYU93NGJXdXRHR1JxRlhGYUhvRjhxb3l0VVAxeFZiT051RkpwSDBrK2k5MzUzQXljaXMwQ3lXL0RxUkUwazVqc3RMNmlZTzE5dXFHMlpQc3c3Um40TXExMUxrMWN0dm8velZMaEVGNUZ0dWJobm82RzlOTUk4YlVCb3d2SmZsUWxUN2cxcURueUU5T0JJbk1kdGVqQ3hEWkVSRTM4L25HM1NLd1VvTTZEakZYMk5INUtxeUZmbVlrZHJQQkFJejVuV2FOODN5REJzMWFPM2gvbGRZYTV1ODg1VXQwZWdmZCtKVTJkazdxMzg3UUpPTldKRkovWjFaaEtSK1FzeGdBdmYwYkdCZUZVdVp2NGk5ZjZqQUhpYnhteXBlZTl0cG5zVGhWZ1hLaGp0aERyanJHeUdtRXJmVmMvd25xK3ZkZTNza1lsVDNTNHJoNUZrRnRSRE83SjlrRWpjenh2dDN3VFo5OThDbWhzeGNKbFM1Zkg4TkVJUDNxM0JmVnduNDNOM3h0aFV3Nkw5Zk50TUFEbWJTVkJHMTk0VEFQRFRleXk1YWtWeGJrVU1CR0hMMHpwS2dULzFWb3JrSWVOSHZIc2szeCtrNE9pYjR4Y1k5akJ4d1NlSjJwc0dzT2tZSStTQmFrSlBPUWo4OG5INUx5Mmx0aHAzeVZSc2ZIQlZNU3FUZzVMaVZSd3BhZ3NKWStKUG1wVFlFbkR3VjhMY3RnU0hQdDRCUk9WS2g5RURVQ0VRUmNGalZJY0gwZ0dRNGh6c0xKdE5SWGllcEhDRmxvcm04MGV6RXAyVzZCcFgzL1VCa0ppK0k4TERjOFN3eVVPV01jak5FbDA3VDkwUmdvaVhOM1Z1SjRFRHJ3cEVsRS9IakNmZnlDcHUyQ0xDTTc4VU1jMWdGaHVKYnEwa08wY2J3RURYVERGS0IzRUxlek9tQzF0S0FBTk1Pcnk1bUM2QlFOOVVUUGwzRW8rUmxmNEtJNFFsMFRkc2ZLVG5OZ3o2MVhoTkszWVdCZmdNZVE2UWtEeC84NjJSTkI4eWo3TUZLUkQ5aDlHYm5tL1R1OE4wbU1kQk9XV1VnVUR4VGM4Rmx1VmphT3BHcGMzaWFRenB0QlNPaUs3R1d4aWpQbmdxUWczcmVFZEorcWJjSHlxUGF3YlFsNmUvRm0wYTI5V0lsUVhWZTRmYWxNc2dsUDBPSjMrREVvbDJWKzdUL3pMYUVPeXFHbHBHL2VBTVpsNWt6TWs2SnJqbmJ4TDBXcGpuWDIwS0ROVUh5citaYzRqZzlqNnA0UUR2UmZEaXllOXJRSURBTzlPanlhbmRyQlZIS2RkRzVKU1ZmNEU1M29Rc3lyc1RLcjdzUE83d1huZlBDVnVOczBub2RySUpadlFHZlNuVUV3WXFYMnBiU3RlckJEU3RPUkhEcXFDaERjcWVZYTdJVUVsRjJQeWlHRnR1czhLaWZmQ3JRbUVkMFhWZ3d1cy84czBFSG5BOEhOUzlwdjJmNWYzNUl6K3dJc1d0TC9ZQk9UdTRFZzdLWmJITlRDNnE4SVlKaVNnRDI3WDFLL0FYNVU0YVhaQVZZQWZxZFphbG5TYWFFVHFGUGRCODQ0K1N0cGFiRkk1WWRyQXZwUG41b1dMSXdiUThham04aitGWmRsMHl2NmJNbjBpTWovRXhJektYVlNTZkZQdy85Wk1LVUl0UFJ4aVE4cjE3VHZUWVhQR1JNRGVZT05BUjY2YWJGT1JFMXJZMnlZbWRRRjNjakZrdVdzUHQ1UXVaUmNxMDN1L1RySER4ZnBnRi9BaGpOTUdGNDl2cUhZcHlCdzFaVXJReUdKWDVFSUZUU2hDYkUyWmRUS1MyNzJuSW5GL3dMbm5od0lFOWtnZUVEcUIra3AvVzZSMkl2clBwOXA1bW4wVDhyTHB3SCtlRSsyVkQrbkVGOHRtK0E0WDVXRE9OK2p5NnNDa3Z4NEdlMU5TOUQ5MUJkSG9BYkZYcWh3N3pVaDRRWW52WWl3UUNZNDdaTm1vWDM0elAxMFFtNVNET0RSY0xNd0FZbXhQR3dCcy9ZUFNnMUVSOVNDeTRCTkl6UVEvd1J5N3Jzc1NkS0kxWVlSVmlIM1ozUVRJaG82bFpqbEJlM1ppb2NucGQ1UVFjSzJkWGQ4cHo1eCtEUGl6YmZoNUhKVS9CUjQzbGRSUkFvdE9RS2hDTlUwc2xFc3huNXFZUnl6NmR6amo0OTNRVU9yUGl0SmNicDF5SVRUcCtxeWhpa0w2T0Z4Ri9jSkZsN0JoRHdRZ01DcDgxVzk2YkMxczhTSDdCUkIzS3NCUXhLWWNnZVlYVGpUMmFsSDVILzFLeHVYVk4rK2hRL0FZb04xMWorN3diWEhPZ2ltdmdyT3liUHVyakpWR0xucHE0d3NTcWFBRDZlaU1CK2IzUVhZRGsxTEQybHJQZHVjQ3dFTGgvTGZaRk5iTzdsUDBKSTBTb2ZQUWdjTkhzdkpPakl3M3hZVkVSRDZTZjFPa3NnSlVhT3EwOXZzdHZpanV5YmxsNUxzSjFlYml0Z3N5VWFZZ2hreDAzVkRnM2R3bVhiTXhuRCtjK1JQcnBMbCs2ZDQwcHB3UHEwUUZvbWVTbU1DcmtYQVkyWnJZcm9XYU5GY25QeXp1Q0FMOHJldVRoSzl4TndnSHpvWGl5T3VTRUN5QUtlMkR0Wi85YVVwODlTaU9OaEF5YkErcjd0YngyQlpLdUhyUDNCSENFM2hJVHR3RGFrc0ZqenJhSlZKR3djL3VaTW55MWtiSHNwZDlFOHBxWDgybmdOeUh3UWJ6T1V1VmVTeElHTm9oS0NkTWMybkFDRStGbEJwTnVzelNKTHlUaTFqTVZlcTkwTDJVVTFPemRpSjZKUWx5b0hrc0JJVFFRZENOMHZDZStFRGZIb0pLNkZKWXhvUHlKYkV0bGdDQmlvTFkySWxqTVlPYzdpQ3FMZGY1SDgyV0UrWGhJcUYzK1h4bnM3ZWRGbE9aRno3MkhDYUtSWTlWaEFvOEJKdU9SZGZwM1h0WnJsWFkzTDlYRUJjckdIM0tjeStadjdsaUg1REE5Nyt4dHlKVnd3cGVmTWdzZEpMQ0JlNWprQ0JFS3k4Mjl3TXdxSkdBdllPTHlveXVxcXpraUtmOXNtbXdWdGJIbWhFU09EZEk4T0pjRUFrZURqNGtCQ3p6QUNJSExKQ0VDNjFoSG5rWUxtN1piM2JQei9QdGZlQmwwQmhDZTJ3a2NQTUdXOThhZDU3dXpUa2ZPY2dxcnc5Z3BqVW1NcDRTTklEOGhpSVNMTytucjQwaGptbzd3ZTlidVE5VTNyS29CVHBhZVdDNUxLK1ZKQXBMekpWR3lOWExaeXRjSG9rMWhoY01Wd3VvakhMU1F6NkYzeFlVcnJtRUJ6ajJBRkE3Mkt2UmU4WVp6TlROQVpBYjgwaDNzU1A1aVg0eHQ3L1dzd0tlczBNR2tZSnJhZWNhN2U5OFpoUHpOMExYQjJsK3ltOUdXTEI2dTYzdnEya0NmbzVBbzRXdXRsVWhrbXVzeEpTbHUrVVIrbXpGVGJZRjZwcW0xaVBxSHZ6Z1RrM1dsU01DRW1Pa2w1UGEwVy9YcjlqZDA3MXhZM0xEMFp4RzYwcnJ4VTJNT05SbUlBN0Q4dTdGeklUR3Q4QTE0ODU4MmJ4cTVyRVF4cDZVZW8vbGZHWTJjUGxZSmJxMTZlTEwrVG5Md050SzlsVTlXaUdUMXRjZVZSL1lhdFptaHJtUDk0cFdsQ0E1YmIvRWhCcTVyeFVRUXV5ZzIycHpRaWNHbHR5RXVVelBrQjlZbzV5OUpvdlRrRTA1NGoya3VlK2NEYUUrOXg0K1RMN3ZTU3QyNkxlTVdRd2FCZThTa1lUVTZhR2R4ZmFZZDROaUx1ZmY5Z29lYkRUd096bXBCSU9LTTYxK2RSa2toY0tZR1hPRFI2TWlXSlp0bTU4SlpHb2E5OGt5NS8rYWI0ZWNkSWhRQnVuVlhJdW4wNW5PZnZ1bTJMVS9Oc290c3RwOVVjNEZucjZFVVdoSmNXeDJyUjVxaS9WY2NBWjZJS0RrR3pucGMvR3hQSlMwcEQ2bmxoc253Y0prZDl6b043bUhPRTdmcUExUDNIWFVLYUNSc3JmVXdqS1A0ckI0Q215WlRCOW0vUTlVYVFlNTdjWnNqd3JKLzlhVVVyd2kxTWd1c1QySDNTd2E0NmxvM2ZoVXlyTHk0WW92TnNtbHhIZkR4ZkcrMWIzc0JKOFpKYU5Db0dVb0NTMjBRd2RHMU9KeHhDZVhSL3pnQktwK3lYZnpFZk42SU9zUXdFenE1dXNqOUpPZitYUit4dmNHNVBneEE5KyttOTh1Tm5oTnErdnhUajVQTDA3Wlo4bTVmNzdwVWNhYlpubURwa0VhU3gzMlFnOERDZVFTWmRzSXVpTmMwcGROZU1laFpSL01yb3lBNzZwRVIxdFhSMjYyU2I4c0VhY1VrRng1aUphWGtEbVB5Mkk0UkpNQzRuMlFWU2JXMjJhamFQeTNrTjE0K3dwbm5pbHNtZ1dwdElkamhCWGRNa21CQktuNVdLRjN5OEdsaTZwS1hxRWxvcEpGOUtMekVwc29UcEZDRy9oUGVETHBCd056V3pwb1lzdGEzYkxCdEpLQ1RCbHZ1NUhHMVlCTjM0TXhGTkYrMTZyNWJ3L052NytnL2NyNzB2N2N4a3dVZ01zWS9HT3M3Z2JQN3diUjZNVTBQemFCSnZNOFcrall3eDE2Y1paRVduTGQvNDhNOWswRzUxUmI5WE5mcVB5eWNuZ2xaaUNaTlBYb3VjdVYzWDM4bittcFpzUHdIbkFVUEZlNGpSQm9TNWdscTgrZmg2am42aXpHR1hSWWFHeGpzMWx4OEpQcjIyYnhadzdrL2dGdTk1V2V6MVpjVXdueitYWlJzNG1icjU0a2xTMnQ4bEVKdmhiMEgwVnkvV2xTT3dHekl6M0JXRXlkKzFuZTZZRGxabGdUVTdZNjFxUWJEMmVDOGdHK1NFL0U1bittaUdTUkJ3L08yTlFnaXVORmM0cmh2YVYrRXdTd1pINXR6a0JNMGF6SVFOb0N2eVR2Y2RRVHowd2pwQmZ4dDlxWGhRaXBQa1M5L1FrbHB1RWt6eDBPMmFUblJuMnZIazFzTEl2R1FsRXVOWXA3V0hMbzVjaUdUSXFZcitkcC92TUlTSzZITERyRnhrUlVmWFlTRUx2WElwT29XcVB5c1g3L1VMQS9tYWxBdlVHRDhDaXMybVM2a052amFtODdUYUJZSFhuRk93TU9uSFlybTJxYURiaFFYTk1YY1RaWWc0S2xhY0dGdTlIWUVjbW41d1ZyeGRTWjczZkN3Uzg1SVlXRklLaUVpZVNHSk5ydittaTZmNHdjbVpmZ3lzaEZUWnB2VlRJR3pOUDFIV1VaM2EzTHo5T2FlT25aeXQ1ZzFWei9RT0d5ai9QbWtseDY0SC9CSHBYeGlrZStjV3FSRTBGd1F4QjVubGRZclpyWVVobDZhSUJKOEVmbWZjV0ZRRGpBanFySjhqU3RaMVVlc2xJRnNzaWx0a3VtTHc3K3ZiVkpsV0VsNVh4a1M1d1FZdDFwZzZobHd1cjdJS1pseThhRGQyK2lKTW5vVmhGcHd4MzM4L1FFUEZtVldzSUhpb0IzSGw2a3Y5UmJzYnQ1T0RkVjVwSDRjbXhDZ1l4UTNtLzAzUVdxNGZCMWtSQXAyZ3F1OUI2ZVZ1SU5TNjFmUVo1WUhyQ21XOVh2aXo4R2tLcEhhRHhwNHYvUndUelJhMklDU1gzWFRhTFJwbHFxaFE1MzdWQmVwb1VsbmRNRlVrWUNSeVBHTjNuVVF4eEJHaE8zdGRrRGZxanVFdXpDNGtDam0wbmN4cEM1STFQRTNVZVlUT3RqTHp5S1dtMElWWFBtUyszOE1KbnRVMy9CK3ZRcEdta0lRMkErc3hoU3RTdkpaaE91S0IzR3ZMVDNOYlk2QkhNeGhYbVk4RFZhT1J1MHVMeUtOb1lDc2RUUVl0WW0zRGJqeEFQWXpsMlR6NzNUSm5odUlBQlQ1SGZ4N013QmxabnpVaS8xRmRvWnd3TC95VTAwRGNKd2lvZENTT1F6L0tqTE9WU3pVeVk3Qyt3c0ZsRVQ3NzFUeGdCNkc0NFNIamRRaitnVDNKeFJkUkpaUUc3T1JReWFjS1FpRkZRZmtBTFBHSDAyRFZROGNIZGY5S0M0aDUyN1FuTDVUbFFxTzJHTU50WEdTcDdXR2NSY3FQa3VSSmRWT0x6QThnajF6dzgvMnAxdEhheVRVVkwvWkJCYXhham9vRS9qc0ptTnFxajVZVUM3R3Y3cVRRVDFiYU5rekt2YTZLeGxLcFZnaXdJaUJGMUVRUmxZbk5hb0k3QzZ1cUlieDl5cXRHT2h3UmxVRFY5dHlNVURiRjhOZ1hnRmQ4UTgycnhPeFVCeGk2aVV3RWdyellzOGlxMzFlS2NzMlhHZkF6WUc0eVdoNWF4NFVCeGVvNlN1M2VWb2daTlVwekxmTEhaS211RFRqTWxRU29tcFhkbVc4RDQvbjZpcHJ2YVlKcTZhZ3RRUDdIcENvd0xkUERzeU5NdnZ0bkpaOFNsc2pTdno3cmFrbHRIZFJmZFMvNkM4dGoyOGNEOVBqNFBkalloZzZMUVBnbkJLblZ3YTRuSFYyODlsUXlLbk1QenlYaW05bjRjM2NvOW1mOWNsdnB3amNrT1dqekhSZjNwWjhUWDBNSE1NSzNRNGpvT05Sai9XaytYeGZEWlE3SWpXcEQ5SUVKVVV0ME04UkMvZUQ5VlFqRVNKN0xyV285R2VKSUFnU2VYWHVDK0hQb213UHFWTEZhM0duT1E0akNpYWx1MndsY2t3MUZmWkFRWWJqMEpvVTJKK1N4c1g0ZVNRU2V4eCt1MGRoRjNaR0QxZnZ6bk5wSVNSMitTTlRWVjcrWmRvV1BydnZ5dWlHV0laVlBXRHljSldjK1FuUnI4eEtZQkxYZGxwR1FGUUF5bkplK2pDc2xrbzhnZEo0UWl2L2lsR1NVOE9wNXJDNm5VN1djckc0UHZxb05NQ0JHdnNBWnYreDViZURvVCtPTTgzMFpndHBpZjNQUUU5UmVSOVlxOEcrdDhoanVGWWJQUTJUckZFS3JzZGhCVjNOSFREMSs3b1dLZVdTL1lrL05qaC8zaTNkTTdCaEFFWFBQMkRIN2JvWFo3TlgyNWZKQVZYVzh5aWMvVi9wRFcrb2QyWEYvSXZ1R1ZIWisyeHVZMitFbXQwbnNVVlhKSVZLSnhGN2xNY2dsQlFHSk9LZzZMS010OUZkbzQrdVpjVGlCblJTR0RFWS9MemJwUFlnVkpZVTJmejJTN0xGUDVEcTlvWHE3QkdsaXB0cWhwZ25mMmxnTktybTZKSGplSE92SXZKOWI1a29DbC92SlJ3elRSNWJwM0hRNTBkcFU5QmdMZ3NmUjlCMm5aUDYwZmhFaWVGQlBHaGVYaEZGZWRXOHR2eldIdGJXME9tQm5vQlkyWXNzYjZqN2JTSFRoU1ltdVdKaEduVkNDbXVySkNhMmpUQXAxdjZwTHBHZytjSDdmQ3Q4eWovblBjMkVjemdFQUZJdGpOYTlnNzMwMVhCRHJhNnBhVVduZW5NMzRZZnFyYWdxOW5seCtpSlluZFZ3VEVHbkR2OVJrU2JGdkxyejdKOU1tYXJmT2ZBT0lmcitEQlUzSXpiQXU2K1dmVHZTTGFYdjcrSmplNWZobzFvdkNNZXBoaWdURjQxODM4Qmwvd1FOQ3pvRm1VSjJPc2FZMUJsSjdPT0RCTTA1eUpGdHJHdjFQUDNZWkhicHlIclloMjFNQ0tBUmw3c0daWllmcEdBbU9Ga3BjODRJWkk1UmxnR05KM3U0N0loclh5Qkh1b3FneTRMaWJTaHEvOXJzVkh6SnpCQ2dMZTZPWC9SZFo5WlJNbzZFb3hPVHlIK2hJUWgvUDJ6NDAvS2dZOURuS0pKV1dDM0ZsTUFkeE1JWGhjTEYzYWtYVDVzaUxxbEhTaTdVN1BnUkdsQkZ6dlM0RjVaYWZwNkNNajhXWWw4ZmlKVThjMU45TytyS0VqQWpjY1JCZ3V6amszY000djJLZ3JQcENaNk9Xa1JMM0tUc2I5cDNMQk85TjI4RlJsWjlCNzZ2aXlFbVBHcEEyQkNrUWtVckdwRzQ3RWtHV252SjVJSHBvWjYyV0toRVpRQmh0MXhMdHV2S09FdE11RG9CL1pQM0MvbU14TWcvNUIzWE5ETjl1aUZERmkxZ3hiWE9QaVIxU0xyZXVjb2N2b3dFTDAwV2F3dzE5eG5NcWg3SG1jZVFPck9jdHhyYXJrQ0NhcHlOUkRUbTc3dTJLaW1DRWlGUHI1MDB1VHdCdzZmdVExZUs4U1dySFJMdnMxVVVaMVpyZDJFT3VscFJXOWZocER6R2RiaHNZNk9JUTVvVnl6TFNRaXByWFEyUlltVlQzK0dWS0ZDOWhob0tPNXNrczlERngyc0VNeFY4ekdPYzlXa3JHbVJLRnlwZTY4SkxLR1BreDdRZ1YrTFUvQ3R0OWl1enZ0YzE4WlJHSWgxT1VtNTNCdlM1bWczZm9hRXNFeTl3K1MxZ0NqVThLSE15akZwSmYxSnBNam5EbzhYc2J5bjNGSjFuWHlpVGhONTVUa0pMWmpaby90WEdGRWU3TWtqTnNsa1JMUVl6SVYxZWlTOWJIMDVMRENZU0hYOXZiNzN2ZVIzcVVLWTBkalJEUFhmbG1RRlQ5dzVSWU5oYzZ6S2dOUlFWeDY1emJTbHd4dzhUTEUzK3dZZTBVb2tldlNvZ3YyeFRBN25EbXVqS3d5ZWhBV2RXK2owWUltVUl3SGt1enY4Z29KRjNhUStQdzR4eFVYakYyM1RHZndHSzZha09xZEhFOEdBcEFISTN3WFpGQThxQ01LZ09uK0lZS2xzSmNIK0JrZWVGekdZb3JLelFwZEdKS1JqbGcrSGd1VHZMVmVHSXoxVUtpUXNlNEVnTFIyRU53YUh6bzBPdFIxalRvdVJvVXRLaUlCRUhuUTdxTWF2RjZob0RFejBEUDdKbnFXK0dSY3VqN2VpTFBZck5sVnV3dXdmdEdJenUvOWt3SWNmcmhaREFXUEZ6d0FMUTRNVFpSOUk5VmhQSFJ1bWlzTlgxS00wdzdCZ2IydWtUT09hUW9qbUJoS28rRStmYzkvVWZJWG5nWHhZK1hIbW45OVIvYmI1cUM2MXQrV1BGbU1KNnQwY083SkZSVDVURWZJV1E1c2w5U1hNMnJ0MGxpT3g5UVFkNEozZzZzMEN0eW5PMmMvTzZ0bXBiakhaL080R3VhZXB5SmZlWlBKL3JLSnY1Zis1VXNVb1FUS01YNVM5MGExdlhxNkFUM3llSlcxRTJLbXU1eHdEaWx0bWEvMWM2b1JtRDlWenBLVVVRazBDcFc5bFVvQ1BXRk9uSzU1RnBxLzJZaVR0RGd4V3c4cFlNb29pOXJyTWsvZ1ZhOXhxVForQVpWV3lFV1FjSmFKRUVtN2dBSjdIcFBOU25EVXpqRTZrUGNEVlNvWDExTUdBY2pLU0YwUVcwTU9pbDMrRGJuV1k2d1BNbGxUL0JybDZBMmhYakVuWW42OWtiV2ZZY0lIam0yOVl5T2V1VW5VR3ArTVprb2JacXlOWGdJVTdxMEY0VDVtb1JYcUp6QWVnN3RkVDN6QXgveGsweDhTWmtoSnM4Q0k2cmpvVDEzYW1SV3F6NEJTMXNjM3I4Z21pUUFIT1dyQU1iZmZQV3FwZ0NJWHhrUXRMTHFXMFZ2S20vMVl2M1BCYXJXUHd4U2kzZ2xjUytISGNzVkFtazIrT0NFVEhYaUsvcERqMmZ6L0RPcjhGUm1nT0wraVBlRkhEL2RrSkgvM3hxV29kRU4zd3YyNjhYZEhWaDlDYitEUlBrd1pUeTREVGpJKzRKQ1dMYTNPQ2lOTGNmOFc1aTVQM2ltWWdDVHJURU5URmFvY095MHR2ckN2TmhidzhiVHkveWJjY0RsZW5xU3JMdHhUTWtMcC9FUFJHS2g5QlFkSnRtYUNhbDBuZFUvenFQZUNGQ1FiS3ZObGJFQ0hmRjFJd0FlcmRxL0J6Uk5SYUQzaXFLdTByTVd4ZkgrcGEydEZoeU1RY0NOOVVweStIWVFUbHBOZ2dkZEpYQTNrK0p3Q3VCS0lWS3ppOFNvODQ3STVRVDVuektIMm9naGd2QUErQkVsQm1qUkxyeHk1QjVHMkllSXJadTJSbmZKOVFNZHBBb0ZxaVpwQ3p5aWZZaGFuRjdiRVllOXhmZGxmSTR1VE9SeXd1cVRiTGgrM2VNTFdycmRmeDdaUlBRMVhINjFCTE5vZ21hNlpra01OME1hK3JLUDlrM0NEcnBkcVFOako0TCt1UXQ3eXM1ZEFabDBkekoySEM3R0RQUWhsUzEwOFVmNDJpRDJ5WVBzVXY2Z2dPQ0pVMFNURkNkdVlvMGVHeDJ1cjZCT3Q4c0V6ZlBqMFZGUHF4RG1Sci9pMWRzYTlIeUVQbEkzb1dRRUc3ZDNkbVRTWUZtMW43aXNGbDhqOHhzMWRrQTQ4ZlFGekR0cDQ5TzJUWWVBcDI1UGZoUDRFQkM0STVHdFFiSkluWThDYzRyQ1RvT1hvL0RZazQ2R0prbkE0eG14WGFWSk5KRnhpd0JGdUJ6aHFVaDVMWkc3S0oxa0sxZCtHSGRXcnlDL0h4Y01SQkdKdGtjL2tWVFZrLzBZb0s3a0lydUlLekxxZ1R3NTVoT2NoNlpTOGpHdzlUOWtKbWVZbC9ITHowYkQ4TVBtbk0zT1pQTytUdmhYazM3NjJFL0JUTFZQaERQN0VIbmFIVU9MclJHZHdsVVhkV0VwMHNKdWRud1RzeVIvTnE3SHUrUTlST3B1V29UZWI5OGtWR1hSdVRwU0FNb29saWF1dENZYlhFeGM5ejM4NmNJNGVvVVlTWDY1TC94Znpjemt4dFJvM1VYRi9PS1czMjRORzExd2lDWFRxcjRtdmlVNDh0TlhFWTNsSGx6YnBSckN0TzhqYmwxMDJwSmFTY3l2ZFRGSEhCZGIxSXMzVVdIU3lqUVRoSXp5YlkrVGlUdmNXaDg5ZGxUV2dDZTNYR056UCtrb2ZJb0Y2Qk1qT0dJL3g0dWswMUhhaDZJdE41OUhJTUFNclN0MWY0ektuTEw3YzBVYURDNEwzaDJ0WnJhMXEvTmVZRUdXbE1QU3F4K1ZSMHB4RlN0THlZdlhtMDhzM3dadzFWaitScC9pL2FYZUVTU3ZzZjBOVDg2cnV4d1g2a2h4TTcvVnhxR1EzbFJPL1VETDJwUVM0V1RUdG9Cd05ralowTFJ4WmhndkpRcnFEVFlRS0pZU0NMZmpVY0RvRGRyRlIvS0o1RG0rdWE2a2RsRkVCMTg3a0dYMnVFTVRVU3MyWWV2YUdkQkdaNU1DRWZBQXUxc1Q3bjBCNDRLWmFXWDlDWEE0blZnOHRqSlZuNktzZGFtMFM2NjJTSnIzTmhZdk11aDdyK3lwWVhUaGFQa1FROHR3MW5EWTNJVWJkMHFoSWE1UFEvU1R0M3AxVlBaZCs1NFlPZUhOcVFIR0plM0pPbmM3Tnp3dms3NzN1YkRHWS9oWlNTRUIxQzFkUHZJZTB6RjlFR2p2STA5VGhZcVZ5SG5BNTNqVitNcnNQVWhnU0tLVnlPSWluYldVaElwTU1Felh2MlFqUFAyZ1lQd0dkWDBvRXVvN0JmazBxSmNlcU04MGpGY1dFNEhScmtJNmk3d3pQMVBaVERMK295dEVUaTNVV25WMG5HOU1SakFVcGlRaFJuY21xUzBYeDhWL0VGaE5mdGxJRmNaRkZVZVBJeXZLa2lzNS81QTRSWUdod1RrWGtrd3VtMi9aVjRneFRUTEJHdVBPdkE2ZTJYNzVwZGR4RVZsaW03c0V3M3oxY0EwZEk0aDhYTUhlTTZsUXZkeHpsOEtSTVFmUEo2bHRXUjlLSlViWkpjcWR6NzFxL0pXVUVoVytMWm9lMFQ2bTcyWjZTd0g2Nkl4SDJ0YUZ1YjBNTzFqYlYyZFlCaUphbERIcTVVYjdJZXJPOW04Nm5laldwK2ppSFJNb256ZmFiekppRmRJbU9sNXE1WHk3d1FVeDA3ZkFpQkJMZEdzanBYZlFKcDdpYWxGek5kYzdDUDJYWFd5WnVxUWpvbzh4RU9wUlUydGdwRzJwbUJqVkhzZFIwVEpuYlhmTFFHSk1VSi9idDYweCs0cG5VbnYwTnRqMVRaZWl5V1JoaTVmWmxBUXRLemRFUjBDNWVTcXNTTHd3YkplS3N2KzVTNzRnS1dRVlFmU2YvSnk2Z0p2bDJmQStYeDlwNGJjM3d1Y0dYVG83ZXIvODkzeGF6QUpFKzJZMUJlS1VlQzMwMFNzZXd4RXgzTlR4YW9CaG95UGJuR1ozai8zWjNnNUpiYmdsYk5ZR1J1elFQWGV4L2tlYjB5d2ZBYzFYY3UzNS9pNVV6NXB4S0lJZW1yK0R6SHVKREdBT0VOdUlVUENtSmR5S2xhb3BCQUxPemxZMjJlbEk2UEZQM3hiaGdhRzd2enFFb2tHbVppVnB6QTVjdjhINkRwdExNaTc0Slg5emZFRm5tRFA5MTRSaFJ5ckx6cTlocEM4WWVkSEVmdWs3VUNLVG8wZWdpUGFuMFMzcjNZRkJhdDRBM0RaKzZtdzRsc2RzR3FpWWhGTHVNaSswTFlRY3E5YlhRcVlpL1RzRk1HaWJoS3BkZVpMWW1VNVFpR1M1QzVWSU4wUVNwMGtuNS9nYWpBSjRxWUZKNnNRTENWVUd2ZlJCUmFyRVMwVFlxQU1xNlI1ZXFZKzYyRi9icXpab1BIdmZzRGEzQ1ZmZFhVcmlzZ3JsbEY3cGZzZC9EVTB1NThienFjR3EweWRGaGZZaWhHZ3ZCaUlmRHJzSEdkekU5UkJGSWplQ0l0d291TU1GclF2NVZNNlpIKzMrMm5tNno2dGRCZUtzTmh0YUpqU1hpbi9IUUoyOVJaSk1uOWNqWEo3YU83N0k1UUZTOEZOeHI5RmNIV0lhR0hsdDRaQmJtcDRSRGpyVFcvejRaRkx4OEp5S2lsU3RxTVNsMG5TMUhSVldKaU5ITVh3eDRVVkhuWk1IOTRHQXVEaHc5emV6UFhUQ05FRnhJSE0xSlJyTE0xWHlvaWxSN1YwS1JxcGNJZWgyaDVOaGpka0RObzl3bkVBclVTSTJVeXpsRHlVN3RWVGRkVHk1TnhuV2UzeEtuQ3NyNUhkRzI1a3NLVTBvRUFWeHNaVVNCS29TRU5TbUs5K011UC9zdXFtSUkrVkxoNmRWTERtNSsveWMwR00wcSs4eWZJTmFXRlNtRHpFZ3JmV2RZNzFMYjFjbXlUZ2UxUHAvL0hlMmFmdWlSbHhrSGd1MWp0aEp5bHBUeFJlQkxBYkI1VldLbnZnMmVZN3libXhRYW8vV094bWpqTGhWb2F2SlgvUWErbEl6K0pSQVVVbkJqTTJ1UFRyNlRCeWZvcCt6T1dKWWJQSmRYUkQxUHhhNzVCRnhDRDhPSDliS2JYT0I3SXBqVnVMSHhQd1NOVkFzR2JtanZJT1I0N3ZWblZpTllhdnFsTzNJSHFSUnFSaGYvSWdWUi9ISlVNRW01UTkyekZ5YVlvcFE0alpNSFBvK2QyTjdLdENTcHBXelVWRk5OVXZiL0x0azNVbVBreGt0OGRJSkZyNGJWclpVTGRDNTYvQWJLSUNRQ3FLUGhDVy9GSXRWUCtYTk1RdU1wbXpDc2ZTdzUrdVZNVVpFQTUxNWVSWHhtN1dFZVNxNnZDOTc4clpwM0lZVGtmREVKR0dYY3g4b3h4MWJwVTJPbTRYYk5qYysrZFA3bm1TcFdobEhZbzJvT3pQRmVlT0w0cTAveHEvWVBaU2pFK0grRzZMUUZlaDdVMTllR2ZzWUxWN0JkUjY2RktTeVBIRW5rZCt6TmwzcXBnZmxRMHd6N0o0UmNkVTNZcDQ5NDVCL0JlU3dPaTZlK0kvWDM2aUs2bTVGUjdIMDUwRDN3a0RGNCt2SldJVnhYbmw5RW9wYzhETEdyZHMydDI0Mm5ySkJ5Y3VJSjBCcGFmVUgyYjZOMlBHZGJMdzFYVkZzUk5jbkZISXQybzdjdWc2enduZlI2UUFKekFFaFcrbnd2VmhhNk1zSHl2ZVBhMmQ2dkljdU04eFZ2WisvVzl0aUN2NzZtY3dnZTJhRkx3TnBIVnp4ZlpyN3ZHVlc3ZGFZMUt1SHZ4MExDeGVwK0laNi95MnpkcFo5c0RVL0dHbWRYSDdTNU9xckFlOFdpczRNYjFMMkpsaU03YTVqSnF6MlUvc1RiMHl5eGl4aHZVUlRtZnhETWNHcFNsTS95blNVcXNWZ0JSM0xRUFVhNUZBZG5YdDVIZkJTdUJxSUp5Ti9Nb0JxMnM5dFdaYllHMzdXR0xKODBMczRWVm44VVIrQTh2c1ZtMmwvazRZbXZHdHYvRllqYkNHMmMvcStlZ0JTcUhNUTBuV2JCZmliWTlRK1VsQU1YYTMvZVBJSE5jMFk0SUt2RDRJNnR4b1p0dXFra0cvOHBvMUFIZC9aVlVydFcwOUZGVEs4Wk1MdXdKSXZTZDZkalRXYzhEZ3dkb241THM0b2E3c3ZOTWFNZVhQRURUYU1Ba0s0dnNERHlxbmEzMzF5QTJoTVhUdTRaVG9PNHpYdkdyYSt1VXR1cHhmM1lJNGtHV29sKytkRnhmeEJvRjN3cU5HNERkVlM1NnRYbGxOcVlxeXZJVUxaQWFwVkFHMHFSd1B3blcrdmxhQlJqNkRLWHN2eVh3bDNuRklZYjNDMnBCeDRyNllJdWNlSUs3RzgrdXI1dlh6QlFpcTBmblRFMDRDT0pDREN0THc5UkFtdVdhZDU5dUN0QkFFWXVRZ3hndy91TXpFNS80WmVvTDdvOVIrcTkxbEpadVNmRTY0bUVzQTllNzg4WCt3ODdhZDlCWm1tZitTWFd5UVVjRHZYT2g0QW1GTkRPcWdEeEIxY0VUMXJXU0xOQUwwbHVXa0l2NC9jUDcycVpWVFZySUhlK1VSUVJsZk05cXFrbTA2cy9QcmlKZmU3dUdDUS83MkpWazdWSkVaRWlLdnp6SDdDZSthaFdVc3ZJb0FVUzZpUVBGdDJTTWE4cE1kT2MzU2FpeTI3akNOUDRCQVVLaTMvU1h1V3RocjhQMURGbFJQN09HM0FvU1ZEcXlITVZGNGtOVUhTbGJaU3N5KzAzR1BDTTZNMmZ5bUZqZk1sR3pjRXowdW00Sjk4M3dtVktzRE1DbS9EVWl1SkFybmdobVRrbjB1dThmTno0a0JWbFAyRTJCdStpRi9VNUpsdVBSN2hFaHp2Wk4xMzNhUmhMaHZtbnJUcUxUcGljYWR6eHlsUzltM09uWjRTSk1pcFR6SmY0bmJIK0RkdWoxTHA0eEswMEcvTW9iUjBDUm45Vmx0U3d6L0dXaWNwTGdmMWNBbmE0b09kSkR0WHlwbFFxWURkRGhBcWVLNlBwTmhlT2FjYmdPblA4QUl3QzBIVVdpK1ZVUDFOSGt2azdFdWtmNVV0d2FBZGVYWG9CV3I1MVUrU3VQWHNIYVhrNzlFN3ZhK2psbXUrSDV6SHRDNW1vRFB4Tm9HMWFuQVpHRFNWVm95ZGJFSXZGcEJwMTBhUnU3SFlzTTVnY1RRcng3eUtrL1FnNUlWZmgxcXl6NFJPMnlJR2FONStoTDFsTkplcmhKOVRQTmlsR0FRVTBYM2hjdFlFenExaXlsbFArOEZDbXRSaEdqQngvWlZ2V0t2NDdLcVVCUGNYQ1pFU0dObWN5VHBrWlB3SWdrTWVFdmVGN29hUFFPbVZ3OVFObW1mYTN0U0tsZ3JVQkRQcFVDTUNWYVA4amRlQ0ZhWFhiSTd2RWJJUnZhc2ZVTjNFY1RsV3k5c3d4eEdMM25vZjUvRjgzbWN4L3I5OXM5SUV3VEF5bjNGMWdJY1pyeHFSYkY4MVRTQ1NQT1ZPaTRPTjF5Z1RucG1lRVllQ1p6amZyUkN5WWNNVUF1V3haV3FQcVNRbVlEYndXY1NIUzFpM3ZQNHN6dGMyNS95aUIwMGdlSmtUcno5Um9jTW5IQzRYVmNhN0l2ZDF2WW9VaTBwS2Z3a1c5RUhmaFpYb3JUb2hYQnhPUitSMjh3VnRDL2J3Q2VMa21jQTNHbmlpRXRSL1lZaUpoVTdEZDMxOEJTdW8rdXdFSGd3dnIxOHRyN0c5SVlwbjRlREpsOG1CelpuQm1zTzNJR1NVZjJUWG5ET1o1MWdqT24vcTZmS2tTdCtmbTk2TVZIaDlmZENCUXloOG42dVMrdGFXdlpsMnBodWxHSUg3M01WamhVejE5YWM3Rllkd2RKVDJOeTFBQVIzb1U1U04yVnJ6Snl2bjh2c1FkVGx6RHFBK0JFQzcxTEpSQk04Y0NvR3JoY1lOR21tN2FNRlMzYU1SdlgrTDFZaHNqRDhBYTFtalJzUFM5VTlvei94a3BtakNLL3k2QTFBcDZTcFdiZVpnTlBzcWxtcG1KNzMzd1RzSTJaR0NmeEVicjFNcS9vRWRPbWhTVC9oTFdCb1NsVkUrbmhyWUhMV0syWEMxQ3hnd25tbDF6b3EwekU0d1ZPZnRiejl5R0VZZDRvWHFzcmZxQzU4MU5JdGZuNVNzRnJUNjJ0ZDlLMktLbGpQb0JpUXJlSFgweTM2dU1IdU12N3U4Vk9uaUFOMXBpS1E2STZYcGgxUHFqTC96aE0rWm1BMC9HNTZmR2RqS1ZKQ25JaC9Nalh5Nys2bE9hZEp4cDRLcGxhNnRURU1WemU3SnV3Mk1GeExwTk1XSk1KV3BZaCtqQldVSUp4MkRTZUpFaDBjTWtiY1FvRE83UndTbXg0MjBIOE5DSmxUSG53NmVIUkdZakg1RExaMlJPK1JyUFoxYzV3MGIzbTN6V3RDSU1wR0cvNEIzVUV4QVplZlVHN0tVYThxWW1OL2hDRWN2ZDd3dTBOM1dZMG1WWGI2blVYUWIvSytrOWVLSFFSR2YwSnR2VXorL2g0dUVaRUJyYzFHeExqemg2YklhcFpGaTFVbklkYnZ3eGxESEtiS2czcGVVcE9TWmpjdWFZWlB5cG9QOGkvdTJyWFhrVEs5dVdwd3FmRlBaTXA0Tm13ZDhrT01aMTd5MUZvN0FQcVZFbU9KNGMxUm1jcGF4cjd1QnU4a1BYdVpOVkM4Y0Y3TjR4MWVhZlZNVE5sdjU0a084dkk2dis3NHRvdTUxbjNtR1NZWFBvZnRZczc3OXVTZlgvY0pxRFRaUk9tMWFFV0Q0V2IxY1ZCa3hhN0g1TGx5Z3Rhc0dXS2pKR29WWHJsVHRiM085RGJERFFrblcyQVZNSWgrWXVvbFhNcHlxSit4dVJOVWRXZ2lVNERzeW10d1dOaFIxVXB6Yy9WQ29wc0NvcHRJV0hYcSthdkl5NHh1T2R2ck1hc2t1dEVCRytlMmVYTW1TU1p1OWZwYjlDT2RkRTdXK3M2bTh3b0ZwaGNUT0JqYmxQZ3BZSjVycFAycFc2V1ZNa1pCRXhXaVpibWRxcmlkenMzdkFObWxxTGVQUGRqRnJvMm9QaWRCODVsa1pxK1Evc0FIWVBkVmszQnM2bjFHTFozRkFKYjdnL0s0T2EvVjhYRTlwTVRway9JVmFyS2dPYlJkWWZseU95TS95a0dCYWRubjUyUG90MTVqSlJIUm9WYkhPZEloK2dacUJXN2QrYXBNcUJTZXl3RGlraWsxZFBSaEhqTnRPb21vTHdxSGM0d2tRNlFDeUJiSkh1L0YvcXc0a0Q1NHZ4SUZBM1NyWWZMZkJoTEVrMzdFTDczQTVjeU9kdDhDQ2dZeG5RL3hBSXYvR2FEcnIza2xoUzNVWDRQNGxaOVNWeGNGWW1VVGpRaWh1QUxLc3lhcytKSTlkdW9rNFNGWDZPekxKc21HbDZBMU4zek40aEFsZXk4cVlNSGFCZHpLb1BZeFFPSGI1NHNnZGs4c2pTRzdzblA4a0NVTm1sNjFPdVE2ZkJUTmFOOTlkMVM0Z0prRVdpWEFoTWxTRUNtWnV5MzJGVWxrRmNwNDhCZTdQK2pZbTRkUmNwU25YdG9sUEQ4NWRvUTZNL2t4MGJzREUwRTdkWTJLdmhWZjZDM2NiMXloZWlMeHN4SG1RV1d3Uk10T0xwNkNZS2M5a0szenE5c1hyMG16SExxSnBFczRobEpqcXFrS0kwczA2dCtIaTV3K1RtMmY5b200bDJ0NGlESGNXci9tcVRZVjc5VEJndGcxMUFBaUloVHYwZGdraHA3SHZMaUl6M3U3MDZBOC9xdjhNV3NXMEFwcjVKMnBtK1VvcEFzUm5Ga1dtK0dWUWRRSHp2dXJuYTBRbnNmbEgvVXo2dUxWV2Fmb01IRkUwT21BQ2I5QStvWStaMWdsQWFHZHR2TDFDUzNUL2xoZnZPSWNvdGEwTy8wZlB2TFVYbVNMVUdzKzNZa3gyb1FZUTdQSmFyZUFFeVhOUUYzVm1XV01pdTZ3VFNBanNtclR2NWxTdDRLSlpabFlUamlVNWZRazB6aGpYUHV2Q0Z6UlA4SDBMMm9CRlh0MkJFYVc1TDE1RW4yTWFmaGxodjFPaEthQzJERk1yaDNiLzFVMVlQL3RuWUtRWG1hNVllcDlGQ3BJT2p3emsxOTh6Wk1TK2RIT0lMdHA0RVo0ekkyL0czelUxUHhkbHhlTTlaL0tMT0U5SEZRaFQxUkQ4aVc3dXZySUVRSzlyMVhmc2hvL1JTY0k0cGxKWnZPSEhDdXc4dFB0ODJPZjViTU83Q0VkbEcvTjVQM0RyOU44VHBCa0R5dEJOcEg3NTZlSDB0QVprblhuL280QW43c3lQQk1ITngydURKSHBFanlhVnVHMUlIdmNiRkdPS0F2UzNyVXdpUmtpMFZSZU1aOEhyVFlQQ3pyRW9HejlpUGp0T1J1Nm5tRVJQeExmZkovUW4waU14MkNlb2V3VnZnRC9kaUtXZ3RaUVdYakFPRGplaFVpWExmaHphZ2c5Vko1VnNLNDIrNVZiRXYwcTN3RUluZlZ3bWl3ZWVRelpTUUwrallGQ0ladTBSUlJ6SFBJcUdQdEliODg0WHJzRUttdWJoNFFzL1dzamhDbDNkUDRGdzk2U01TRVZBanBtMnUrK2lhcmdvZm1LNVB2aTV1Y1llWHpwN1p0cUFaVW4wVHkrZmsyY2hwb2lsaEdtMWRKYkcrdVNYVVZJSTRRQytIb3RCNFRaWHdKSzVpVklnV0ZBOVFYRFdTRDIrSDdGd2I5NWFnSzJ1ZW1vMEtxaEV6SllWdjhnYkRsSC93MURCYkZ1Z2Zod24vZ2RnMnZBUndRUUNUMDFPcThPWlpHeG0rWWhiMHFJQVczUWJ6UUVENThPRVZNeXE0NmRJQ1FxVm8vejNiK1NnKzQzaEdUZnBIWUJhWHY3YU01dWZvenowL2N3WEEzdTRnRWV3bVAzdGhZU2ppVytoQy9lR1Bia0dSdEdRVkhydE1JN2dkbXlCR2J3UVppbXN2R2R6VUpuekdtNTk1SW5DaXhiMWtvRnRUeDhDeXZ2V0dhY211MjBUYUVDbXV2a2FTRXRPUytwTFdDRjh2Sk55Wk9TOGV5SDA2S0hlazhzUTRXQW1rTGNCTFBaTUVteHJ5OWFlRmRSaVgySjRpbEYrOExRUGhPdTc5S2I0QWlNT0dlQ1EwR2Q3aGM4RHdNV004SkNuZm1wSzZuNEJSTnJOM21IUC9aNGVJbUlsK1B4QVErUm5YWERNeExiUm1TcDVXcHUxSURBQlBDWnhmMVorTHhQOHBkQ2swQTJZM3lWbVYyNWlyMDFwcWNhNXVEVlpiUTdKNHdSMVdLOHo0UmFPeVg5UHBnQkNmdGVPSjkxZS9TK3VzaDFtbFdXL09XNmhIUEFXZVg4elc4THkzdTN3bW1ubGg5MExPZUM1MCtlQ0NPU1JjMTk5T3NWblpMQ3RIVWpYOGFyNWdlRDdYcWJMVXVNWGM4c0ZlYk9GOXR4WUxPQytVMVMwUlEyd21JdStJL0VNc0ZSOGdjNi9tQXNVMDR3SU00dFgrM1A0NUpFZE1ib2J6c0dXK2lWNlZNeklaTUZ0OGcxNzlUcGkrSU94RzZoSTBKV2pUOFRvMjRBOTlCMHZudzVnNStqM1EyWmx1TXFqMzNVd1hONnFOZW1zbEFlajhKUTJnaWEyM3FxaGcrSDduNU90ZjcycCtKYXJmdk9YaWtaMXJxN0E0SzlJRTBNcFNOVmE4WmlpNkxWL1VrOGVHYzdYQUtEcmNNRVhTOEhuZjlvZzJFNWprOUcrQ1ZtN09oc2tEQWN4OE1Uakt2bDZMeUEwYzV1VVNORDZNUlJTOE91dmcxSzZsZmVuL2VBYlVlQ2ZtTnJNbUtjc2hURG9QK1ZadTVwc3VKUTR2eE5xMmRnSnFtSlZHVHA0Mjh2NVRYYlZRcGw2TEJycThvbXh5cmg3RGRxdlkzZEtSNWxMSnY0c2plU1FCQUMrTkMzVUZDVnNQZFJwZThIT0JIajNVaGFaZXRscndYU0o4ODBpZW1OazRaVVlCNU95NzkveXlQRFlVdVpuTm5mNmtBS0V3bTFvUkZXZzdWTkdabTJTcXg2V2kvek9NbHVudFprT2x1ZTRtMjlYd3FoM2N3UVFMQnByTEw4VjNPTGpOaVVRcFpGcWw2aUxPQ2JEOGxyNUxhMVBVL0Z0Tkl3clZHaUJETnB2bGFVekl1UnhsWG5GNEJTVG1DUUVqNG8yelRwVTlkUnJ5cFR3cmxITlRxRUhMU0RqdEdadmlHWklPV2RqS1pGUTJTMGpRcjB5RjcxKzA2cmJKT1UwYldrV29Ub0F4MGxqS0dNc3VzNUY0RWx3OUV0TnRZNXZPVzN2TUFyamUvdWlaTDRobkFYT3JabHVsVHBTYmtDdUpMZ0VXUUV0dHNTYlNLRTVsaHZmK1ZoczZML3FRZ0xzTFpNNVIxa1ZacTdaZFFqYkhwUEFWNFV1emdkVExteHlPdnFvVHlDeFJvNUM2VWVsbTRxWXJ4anZtS1hyamFmeEdyZjdFbFNLelBBcmJuM2I2L0pha3dPdXAwT3hQdWZMRm44NkJxODkwUE5Sb0xZb25WVDVIZGd0YzMxTFZiQjRtak5DcTQvMWpETE9Ib0pjdHl5a2N5R3YrMEtzbmRTZ1pkVW15cVV6REJMbCs2Z0MwUU43UTI0c01PSnk5SU9DV2g3Yi9WazA4MWFhc1dVS1RRaVNqYzdpUTBETTJId3pyOUVKc0VYUC9hbDVZT0hIbjBIYlBUaU9JcFh3TnoyVCtNMldGdkc0UEpGTC9YWjN3SDJLdUs4a01zRnRvSzFxYkpBaFRZbmJibllZRFZUdGl3d1Q5RHZXWG4vMEtPcit4aTZwOCtVTFh4aUJWWGx6TGpOL3lkcHRoamRNUmpxd21ZdnV6UWFKTWs1TXJqY2tCQnpvdHcySmEvTnNUYml5L0JON21UZE40c0gzaWptRzZ4Y2dxRHNNdDZNSVpjVDJrU0NYVnlxUWZiUkVKYnFjSzV4dUJ6Ykw3QzFqUUUxRDZKbklYaGt0SzJ1ajlaSXRNUDFhRlR3YktrclZ2eGhxUkp5TVRwOHQyT21DTDRLTmY0R08zajFYV1l3RHdHNFpzb0wwMmpNOGU2RVBRaVZ3U0UrSkpRcXJDaHZLUzZGbEVzYi9QUVo0SnFnOWE3TmczUVB0eTZjVFllbm90RGV4KzJ6cG1ON0g5VDhSYnMzeTF0MllOVXhqZWwrOVIzRVVlUk4yMG5XeGx1MkJYOTgvSWhoSEhZa3grMUJFOUVncWJHYXZlb3BKUjRGQUdEWitaY2wvUC85a0FBUUFhQUVBQUFUQUFRQUFQQVFNd0FnQUFBQUFBN2dGbFFBQUNBQWtDQVFFS0FnQURBQmxVYUdseklHbHpJRzltSUVacGJtZGxjaUFvTXlrPTwvQkRCPgogICAgPC9CSVI+CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I+MTwvTWFqb3I+CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24+CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I+MTwvTWlub3I+CiAgICAgICAgPC9DQkVGRlZlcnNpb24+CiAgICAgICAgPEJJUkluZm8+CiAgICAgICAgICAgIDxJbnRlZ3JpdHk+ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8+CiAgICAgICAgPEJEQkluZm8+CiAgICAgICAgICAgIDxGb3JtYXQ+CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24+CiAgICAgICAgICAgICAgICA8VHlwZT43PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MVo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU+RmluZ2VyPC9UeXBlPgogICAgICAgICAgICA8U3VidHlwZT5SaWdodCBMaXR0bGVGaW5nZXI8L1N1YnR5cGU+CiAgICAgICAgICAgIDxMZXZlbD5SYXc8L0xldmVsPgogICAgICAgICAgICA8UHVycG9zZT5FbnJvbGw8L1B1cnBvc2U+CiAgICAgICAgICAgIDxRdWFsaXR5PgogICAgICAgICAgICAgICAgPEFsZ29yaXRobT4KICAgICAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPkhNQUM8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5TSEEtMjU2PC9UeXBlPgogICAgICAgICAgICAgICAgPC9BbGdvcml0aG0+CiAgICAgICAgICAgICAgICA8U2NvcmU+NDc8L1Njb3JlPgogICAgICAgICAgICA8L1F1YWxpdHk+CiAgICAgICAgPC9CREJJbmZvPgogICAgICAgIDxCREI+UmtsU0FEQXlNQUFBQVQvY0FBRUJBUUFCUDh3SDVnd2NEQ0FyQXo4QUFBQUFBQUVpQUVBQUR3SUFRQUlBUUFJRkFBRUI5QUgwQWZRQjlBZ0ZIUUVSQVk4QUFUOWJBQUFBREdwUUlDQU5Db2NLQUFBQUZHWjBlWEJxY0RJZ0FBQUFBR3B3TWlBQUFBQkhhbkF5YUFBQUFCWnBhR1J5QUFBQmp3QUFBUkVBQVFjSEFBQUFBQUFQWTI5c2NnRUFBQUFBQUJFQUFBQWFjbVZ6SUFBQUFCSnlaWE5qbWNvQUFabktBQUVBQUFBQUFBQnFjREpqLzAvL1VRQXBBQUFBQUFFUkFBQUJqd0FBQUFBQUFBQUFBQUFCRVFBQUFZOEFBQUFBQUFBQUFBQUJCd0VCLzJRQUl3QUJRM0psWVhSdmNqb2dTbUZ6VUdWeUlGWmxjbk5wYjI0Z01TNDVNREF1TWY5a0FCQUFBVVZ1WTBsRU9rZFNRbFF3TWY5U0FBd0FBZ0FKQUFVRUJBQUIvMXdBRTBCQVNFaFFTRWhRU0VoUVNFaFFTRWhRLzVBQUNnQUFBQUUrWXdBQi81UGZHMkFVTFBjTHM0eXpxMENpVU93aGRLWXU3QTBvN1dZcnhjc2NVc1dwNkpLYWh2Z2JraUlveFN3MHpZbzlGZllFTFpmaEJNNnJwZk9BZ0lEeWlJZHhOaUo5Y2FSZTlCS21jSzRkbWZ6QWdJRHhBR2JyS3B5bWFZUUwrUzRBbzZqSjdNajhCNEQ5WWhCZE5UMXBLSG53QzRRQ0xBeE5UUk54MVFEM2cyNUIrU2lOQXQvSFdBQVlyWGh4eDQxL3FpVFZrS3VtTjhMTnFEVjlsSFR3U1crQW85UVI1Z0FxZ25CUGJ4UlYrRmg5YkNHVEZMMnVMQWFLYTYxcS9LVEF1ZCttcW84TDkyZ2lSaGdDT3dtWml3cW5wRnE5ZFN3WlFtQmpZYkxLb3RZQXN1a0Y0OUZCc2kzQURBWnZ4SEhncmxuc2tuMXFFQ1dNTFlGVDJmdHovdkZBeGVMaWdMcks4ZjFHc0RReEx1Rzk2NWc5eDRHNGRNQUFjSVJxemh2c1lVb0U0MU9jRzVJMGN0Ny9QOGdBM0VDL2U2ZkVVdmo4WmY4TXMrWnd2Y0VuMHQvcEw1c2wzZ0ZHczB5N0IwaTRIUElmU1plTlFYUlBjbHQrR3I4aS9PNHBaMlpxbEFObnhCRHduejl5QmlDczYxTEt4Yk9aN0ZxMElDZzJRRjJrMVBGbE8zRlpQcDM4NUpLTlFCUkN6RGlFT3BMcjBFZHFINTY0UjZlM0w3WHRBZUtIZ3VwUkxPZDlZRGtIRFdFb2IyYWUzQktMc29jRFFENUJuNUY3bklOU1ZlUXVKUHRPOEVzWWRHYWJwM0I3eVVDTzVHMGErS2RvcDFuQlV4SjVPSGlKbloxblpQNGFROHpNeFNBU0xySlFIakV6aU5temNSM2EycEk2dFFiRyt0ZnYwWFJ1NkZLK2gyTFoyKzZaQTBVOTBJYUQxUExRRlN5QW02TmpCWi9RYnlXTnhGdjZXZFNxSG1yd0xOa0pWbHl0UHpYZ2ozRjY2c2Q1VjZ5eE5UV1dTcXBGNWx0em9IaFVhN0JDenRIQlZGamxpemcvZjFOUXNPay82SnJRbXgrRVNEeVEzdlNWSVd0SkpVa1RBUFhvbzdLcG53UnRhME1vMitMKzZDOENCNlJxS1g2dGcwY0FLeFh5OXdxQWhvS1ArRFFNaEx3K1BpeHZFRE9vOXpLRXk4ZEFvNlBvTzljdS9QVDRud0FJbnBreWU1bGZjckJMWHh4bEVhQjJzTGQ3QU1lai96WXJTakNFUXhBSUZ0YnhTS2lXVW5HTHUrTTJmM1J5MUtvbXZvRG5VdHJJMDV0YjRyb0Q2bGQyWnUzOG10S0VUeHdVNW8zMUl5N0VGQ0xvamtORzV6U2RhcUV6SktaN1JwcXc0bVRLeitUSXFvMjhRUWZ1N3BVQTFFY1JFbVRrWVBsbFZjY2V1KytOVFFzU2VrMy9BRTBsRHRROHJjWGExdU1vVGE3TjBjWHBNVmxmRWhtWFNkbks3ZllhbGcwM3JUN2VIa0Jya2tsZStIY0taR2N0NktBSjJFa25nOFllK3lMSjdnMjZLRDE3TG5uNGdFUzdaRS9Ib25oQWR4UkcvSG9tZlFuT0NiVmVYcmFsOFdoWkRIWWFnSHd1RE9lWlBOUGhFdmo2MUJ2ODdxK1k5L29SNE9VZEoxNUV4WlFYYXVQSU5heHdlWFE1dUJPOVg2ZmJxeVpzVmhQeU1uUnVsVXRVbUtQa1N5R2VMaGdRWEdpZmlpTDdubWcxUE9DNFV5cXpndllidmJDL2M2VDhJVm82TDUwNGhQdXJ3UDRhRHBXODRHRTRhMVJVN1h5WXhjaEtRYTRBbzJSM09QOFNFWEIyaVBNZ3Ruei9OWHBJYW85bUMvdU44WW9SY1QyRUYyZXFPYkZyMFFDdDZFcVVkMVkxNGFoQ0JHaUpCTWF3bmtVS0VOa3djQ3BsRWtqMytuWFMvZ2Vuam5DS2I5WDhuTlBuTGVQU0NObERISjZjUm0rQjdkVEdLQ2lkVWU3QUV5bkZUQm5VekVzVUxpb0YvcTRSRTlVcWtqdlh4SEM1SUFTU0VRamFjN0ZINzZ0R3RiMlVpS0NVMTUrbEpBejVLeGJYRzFzUlBJZnZER3U2NnBEbkZNYitGcjlPcnkvOURvU2FTT0VwakhQTmlxS1hKVHJTQ3JTRFRMTm9acTN1L29mdmdCZ28xak1OMmRuc1RTcHBNMmJhN0Z1Z2hnU3pJWm1DU2pCNDBjRnFkT2RabSsrUVRuSnhESTlmK0hLS3JEakNoMVVBYUN6Qm1HdFVUQnFDMkhCbG1PdFBDMnd4NXg4WXlOT05ZUGhQa2t2TUlDd1VnbnBmc0JaUCtDb1BkbEJ1dnRQTHIwWkthV1ljK1JZYXNmSC9hL3Vjc0RTR1Bna3Vpbk5UWHRBSWpEVDlESUVJOFlkMVIxb2t2OHltOEVjckh4a21HL0hIQTNjZFlMTzg2MStVOGRLTEhHbVlPZE9PdlhtdTJwUGhFMjlKOFhhQjRqK0RlYkk5ZEs1Rmx3OXN5RVQrd0Y2VlBnc1h1L0VKNG0yVHFMWjlOOVBNK0t5UE5rR1Z0N281MDFBMWJCU0JHdmNGSGZ0RGhORnhDWmltWVY5RjhvYW9jMnRQVlJYeFZvOHJic2w3MHhycWhXN055MDhEU054VmxXeGltTXFSbFZzQTlPS3F2UU1LWjZHWUl6bDNKQithYzJFM2RaeHVsTWc1YlZjVzJHTlQ0RjVBbUpYWFplVTgxY04vVXBjWjh4bk1UWEtpK0E2YzBqOCtUMVRzaXhOU05QWlNOajRLVTZobHBmbjc4cFluUDlwdXJwY3ljZ1REZ1BFNW1kcHlYTEVhcjNJQk51MTBqMWVDK2wrcGZBSEtOaDBGRVNFcmJRdlc4eWg1R3BraHJ2Y2lIbWNGWU9DbTg0YzBOemNFY3ZjLzBzWFlpMURFL20yVTkzbVlybXJobnNhdFdUbVorYVpmUENQa0Z4ZCsydW5uMkgwNStzUUNreWtJTUJ3UHJ1Z0FtbFVBeXJaTzlPc085TTJMdTRUVlliaE1odFpUcWhYN3h0Q2lSc25zUi9pMUs3TXVIMlRtY05VdmFCdnhZdStmcWpjbTdvQmNzQm1XbFIrYko0RG5lZDNWUU1ZUUFhQ3ZkcVhvTnBtbDArM1drSThKd0QwaXlJVTlXYVdaa3JsUWo5TU1RdWtBT0R4TEJyYS85MXFjSWRyUUhrZVZwekR1dVQyakUxd2U3RVhKVTNiRlFsTGxLOVo1Ykx6WVQvT0NNNzBLb1FPU1p2dnJPS04rTTFIdjRzd2NaSnU3ajdVQmh1TTlXN0Ztc3l0ZDhjUFZmZk9iRGJVWSt6dEpoQ0FsZ0hMUVNOM3RGbU9BMjlkNXFVUFVWOXhsOU5yNHk5UEsxN1E1Yzd4OGczT2tXcmxmUFdiUkpOckRBNjVTcVhDN2VSdFhMTUZDaVZpRjRNbSt1cHFUV3VTMWttMUFmcVBKSjRBeFhEU284VjhROEg4UllUSXBIYjZTZnlJL0MyQk9xN1k0SlpidDI5aXEyUmJBU0xiVnBCeFFLTnlGRzVlR2ZCc1NWVHd5L09vWC93cWVWMGFoSFFnR3RiSWMxcGtwQU5DZ0pMU3pEaTQvUlYybnV6SzVGVlJRb21KWld2TlNTVUxyaUlGMUg1akJIS2g1ZUFFUGFXalNoS213bWRWTHc1c0RreHQrem9KaEVHbmEyek52Q0s3VkdxT3FvQ0l1YWhKNGJRQkNYTXkyZlQ2U2dud0I0RlQxN0MvQ3lqb0NWTnFyUVoydXIvY3d1L0xMMGtwUkdwbHBuTjREd2JzU0xCUllFOGVFNTJVeUpxajVxSTQyOERLZ2FpeFFBZVlISGdCU2FkUXFsMzl6VkRvakhqRnBINUsxcXZZWHo2WjdmUjNUQXhMbkgyMnlUZ3czZWlIYUl2Z1poNisyK2xaZFJsQ2k2b1RoamVWTm5uSWZRTkV0bkpxdXJrblUrTTl3YzZRNFBQQk5CeDB5MzFENHJZZXA1eURHNXhhV2VIMzV1c3Q3TnN0Yk55OUpwdXIzclhyRjVTUEc4bi9Sd1Buby9WUEE2c05lRGtQclJzd0JFY1ArRU1xWWV6V0tHY0Y1VGFselR6TW1OdUdIeGZ1S2V5MEJ0OXI0VU14a0tDUDRSR1ZHYVBXV2grWlhpUWFPWnNQd21LN3VxSEowQWs3VWcwbVQ0dTdBRzcxY2taMXEzbHVQOTZWdGhaNWR2WTZMOU5zR0lUdGptQ2xLUWNWdEJ5MGU0ZmVJVEpBUGpsUVBLOWJPb2RNZW1pY2ppRkJnVWF6dTV1NndiZjlad2Y1UTRSMjhnODZUT0ZVa1RreGlKWnB4b1F3bVBmTmZ0Q1BHQ3duYlQ1VVYrWkdNQXQ2ZnRRWFRVRnU1clR3VVdmRy9VeGhNQmtMRFZYNCtlQVlFYzZ5NGJLZVF3ait0d01scnI3MzVZbWRIcWhKeUloR2RMd3lSUDJlZkE1ZXBpVVFVZ2hSd1N3Uk1YU2lMc3JxemNRWS9wRTFROHh2M3V0VFZWYmM4dnpKelFRWkFUWEFMeXpKc0xxc216VWFMNlZWWmNtbjNXQ2xQNjA3U3drSGR6SGtCejE3OEZNcWdJTWk5c1dGQ2Z1Y1ZJTWdMcndQd01PY21CUEExMFQxOVJldE5qWkNuc0FHSGg1YytZRE1WUk1NWnNzYUNWcFNtNHpXVUQ0K0xuS0VhU1dvbGpUM3ZqMkY0bTZaeUM1RnM2RXhZbEtqT3B2Z3lYNnorRUtiOGEvU2VnNm5CN212R1R5N2FvRVJ5NzkwQllKcjZMQ0UyUllPa3hsaTB3MEZ2UUpmV0c5aExXTlZTdmdldkxVTjV2Zkw4MGpKbGNjL25IYWZkZVRIUS9uTXNCSTlKVHpKVklsR0hkcE9FdDFZSEpCcTFrd2ZNS0JKRlREYUZhV1ZHZlRGY0gwYis0N0pZNVpOOWszUk1scTdoazZvOGh5anhVUmluZlBFK1YyVnlhbHFUbFI1Mmt6c0pnMU91VTJuY0U1bHZONTd3V0VVSDNqejRaYnErQkNjV3ZFOWRMeWpSblRVMDRNbkxlczhqbE4vREg3YzNPUklpY0pqR3oyajhNNTdXS0VvYWpXOVBmOHpFQjRTc3NuclZ5TUZadjZlQi8ySHBpekM5WDZ6N1JYSUZibk5qWFNxdXRZdVM2b1B4VjdpV09KQzZrUThvZ001WVM1TGdOQ2lOYmtLT1FxUWNhcUt3WW9rcVR2QllnRnY1cGlHQlIwVE5nbW5wRXlvNVo3akZPbWQzNGNYTnZDckRoR3VURG5KNDE5Tk1pSjd5MmRrTFBmTnZYSW1kZGV1OExiRlBKVEZWTStXcG9jM0V5OVJMR1VZWTlvUEhYdXZmOGdkSkpQSWh5VHU3ZU5yMUtqSk1qSjZzTVQvbDlDTU1lbEhZS3ZkY0dtR3J6ZkZ1WkFEb3pYb01XYVpwUEl5ZWZDWVdLaExTNXVXcnE0OFFyU0dNZlA3M0YrRDRGb2FHV0loNWIvYjN2Q3BQM25MMHZlUkY0TW1XTDVxY0xCbUt2OVBqbVVzOWRuZEVjazRsNDRRK1NtWExPZFNkdkFYbk9NdjFFcDZYTVdzWDhveTkxWWQvU0NEa3p2dm96dTZRdzJTeFRhditjQmlXS1JXakY0OVUrZ3FTZWw2dEhVOTdwdCtReHNaK1Y5L09La1lnSFhlV0hKZ201REdmTVRVcGg0Nmt4ZFZ5MERHRGxoMmRxNHNtb0plQUN1aERsNlc1Y2prK29Jdk45OWVvbFBBVTEzNk9vYjhwc2VpOWpNV21aSEkzMUt0eTdQMFBpK2xIcjZpVXdNRjFMNmt4SEt2d0JrRDRWMjlIeTd1MlBTaFBhTm1HYURxM1haZ3BLbTBxeTJ5eXhjcjMxKzdDbTZQQmx2ZkFHOE14Szk2NUx0eHpCUlc2RjZsRE9UbXJ3dTVnMmVuREtrTlVSRjQyMGNxWVJzakNrL29KN1I4REFyaHdOY0NITExsZkIrWExkbFhhSU14WllvbldSbWhReFdPREtmajYxR0I0V1lYZkhPUkxwdUU1bFN2R3JJdEt2eHJhYmR6Qi96RHoyWThpUWRXVWFlNXlPMThrNE1xSkdhc1h2UWRaK1g2dCswbDQ1elpXY1czNlU1WE42NldMMEMxWVVMeW1ZSjQzbS9OZkNVZmkzN0VlWCs3VG04dTBTcFk4N3BhS1VZdm5OWVA1anZadTB6anZBZlVjRGJJZEpUMldjOGV5U0g2NUp4anRPWDIwaVNmR2p0QkQ1blc3dmplNE5NbzBvSC9ieVRHUUxLdTVyRGtrcmxDS01wSjFjTXphQWo1TnVRVzlidjY2RWNVTHdNeXV5aU9Ta214dWtHZEVURm9VSktLZ29zbmNGOVVOU045NnNLek16S1NkZWh5OEdCUC9mWlRlTjVZa1J6OTIySkxLdW5iNmxqZVV2ZXpFZmc1a1hSYU5xbVNsZzFCa0hlSFNnMGVFMTAvbW9UeHYyVDlwZURkSUVCZHRKK1ArSkptcWtIeTlZc1hGREU4bzdTSmUySjhDR0I0UG0vZWRwTlVjOXZVMmRUdHJXYUlOWk1jNHNkNlRJVjltblhJSEJGM2xtd00xdjFVUmY5WVN5WmNKL0dOeEVVek9qc28raXNDdW5tVUliUk5UZFFUVlZ6MDdwOHVaSlE1bFFHR0FPelFlRGtFeHNQc1ZwbjN1dFh1dktqZTQ1MDdsNTlXZks3MVIzU1FROFJHeEtoOCswZEUybnF4V1ZiYTF0SzJHSjZidGVPK3hlYVVoUFM0Z2NaWFljSFhpRWlTMHptMGk0Y3FzaGszZG15a21TTEdhcy9BYUFwTDV2TS9WblBIc3hjME9DUlRmM05FZWgrWHpZd2NheU5tdlBYcm9VN2d4VkIwSEo4bG54bUUvTnc3TFFWcStWQmYyV0JyT0dxbVBseURNOXMxM1k2R01sMUtWcU94SUhhT2wxbnlsbTJxYnI3cGx5bFptRGpOVHQ5ZnRXekU2UjBFZVc4QnV4WWZISGxlMUJlNGhQRVkySDZybTRZdS9zRzAzR1VYRGJCeVVPQ2tnUHJiRVJQVS9kUE9MbnZ4eWFHOVZpbEppL3lhc0FCZ2lIVHU0SlBNUE1pdmxRUGw1QUNoRlVSclBsZlVIK0RHQnQ1MnNaNDlHcFp6TWpzMHFiZ1NnL09vdDNjcFpiZGh4NDQxQVo3bG8yVWNhcVlxM01JV0RrRzVtejNuNzdNZU1JVWtocUNlL3BZVU8zR3djNEYrUGJHVXMvalBWL2RMS1pqcnZFRmVWUmg0SlZMSmN5endDeERMcDRHL2NFMXpzeVRHR25tYkhuK0hFVTd5eWN3amw2NkU0eFdSWjhIRHN3QVlmcnRONXFWVWpoandCNE1Lb0hoZ0NFenpmeGp1TDJqWjdEdytTZE5nSVIxRUcraFcyMkdvdHVZemx1RU9ocVR3alExeXVCTENIeHVJcldNM0YrTmMyN2cwYmd4WTNGQjFwUzBBc1QyZEhyUEQ3dHdpM0g4TVJvRThwTjhWdmJEdjBwNVpiRGkrRUhFc3VrZEp3Q2pIQjkvMkxvejdXWHFMSmp4d0xjNGdyeG1ZZmk1Kyt1RUlJek9BU2krMUpwRFpsZ09sbWNZZG5PS0JlYkU3TEU4QWtrRU9yMVJja3FvZ0htZFJ5ckl1OGJmRGt5eTBqekxLanNkVEh4MnNrdGZtZjZBYWtOMXpQUGlvVXprbVpJSVRIaHJFZEpzY2xYU0NlamZKcWdMMDNRMVlPaTNZSHc5L1F2R3o5MGhFUktsRDBCTk5pK0dRejIwTU5iNHFMdVA5MVQyZitNbnZoTWJJOUYxVDF3NHI0SkdxcTdnc1JtVEtOYUJabkxham95cXdXbnp0bjcrVnBkRjArV2oyM0tUa0xmTmFnQ09OenVad0gwa2hXSldUbDBuVmNtNG56cG1qcVpCOVlKcWlDSE5Eb2xjRDMzYVFhUkl0RTlqQ05mdXovUlFYTHZuTzlqL0kwbS9mVVRpWTNvUjhmSjYvU1ZQdVRBUjErK2YxMlAyU1J5aXJvZXlpaStWUGMyWllRM3NCR1F0Wk9SSzQ0Tzc0M0hzVUwyWDN1bU9nT3pFcjFFei9XdVNHUGNTME9Odkp3Y3V3VndhVXJ5cFZZTDU3VENoOTB6ekg3K2RHdDlwNTVHb2Z1bUdYWHpmWFM3eGp5T0tHbGFsZzU2TVVwdmNsWTRvSlczOUxzc0JsZ3dkUkoyRnBlWWdRUU5QbmtFUFdrNjl3WXM5YitxUUdPYXA5dDBWcjBKcStLdmJaOXZtS2FOc01kaEpOL3pPM0NaRWIvUDBrUTF3anloaFovSHBvcTBVTjUrN3lpSDVQSHFKTHRIcTNrTHZoZGJoZUpjZWEwUVlzQUhxTjdSUHJoSnlJNUk5VlhJT1BOVDJiNDlBTDJUTXpzT3Zid01zeWUwQ0swdlZLWFdoS0dsVzd2WGQvMzlPRXBVN3FzMjNKYzVBRWZic1FoMUdwU2dsUlNIazlGTzBkM3JjRndtTVRzNXExZkZ5UUk2RXFKS1J3cGdHcDJzdGI3ejF6UzFibUFrSHJZbTF3NlRVOWJ4R2hiaWJMRkhNZ052UTkzdm5lZFpTWng3YTJBODMybk5NeS9KMFdnMEg4V3FXc3d1WEZZOVd1ZnVwbk85dGhzK1d2OU5UQm1qMytFV3cvOFBNc2NSQ0w5NE1vUDNLMS8vbmM3ZXZCa2hnWkFLMThTUUhHZ3RTNnFNdXFxUDMzR3hOOFlOM0tlTElINkNhcnV3ZUU5NWU4SmFrNGtiS25UcndwUWlZbjk4Z0RDeTRQSFpaMGloYjEyb0lpeklESkdMSjRmWkdHbWdOeVRhUVI0c2xqcndGdTBsUDU3NWdqb1RkNWZPRkFjWUpsdmNBVzZkdTJuZHZCQ0hXMDd5ZGpQbUNJWXpBdVFFVHF1azNhZDhNaXlJei9nZFYxQzUvT3o5clE4TTdTZjlHZWRlRWNPYkZSTXJpQzNnNG9ZWnBnNWs1NDlMZFNmQmRJTGo0S0ZlclhmYk90MUs3UFRtc25UNkJhTVRVRkU1bm9LS2hCUHBwd0Rka1BzeFBGa0F3b0ZKZnRlZ0lQNHhiK25mTGxsNWQ5TmpFcng2UHk2ZDdJZWtJUStwQThob3dzd00wSjF4KzI0SFA5YytTMFBGMy9YN1NpNzdxb3pleG53WHdvZFBaMEFJVkFPaHlsMnZudlZRNUNiOHFBbmh3VUFqRFJhOVBoTXowV3JWOUNaaEJtTTFpUWxQTW1vbTg0Y3hUeHZ4bVlmS2UweTQzN3FxSzIvS3N4SzA3WlljdFdSdXRsUEpjNGROUHlIRHN5T3BWdXQzY0ZQRzVobVBZQWNYa2NzeElJeUloeHE0L21rNXU1aHNWR1I5WExhaDFRSWE4dE5EYU5UTTl2M0V1OWM1SXJUUmtGNUpCT053ODVuaEdYQmZOUHd6YS9ia250WmwyWEtEYVVoSTdrem5JVnVobTd1RDZSQVlKVzRRTGJrOGNLNkVXQUZOWStKL0FrZHZaRXFyWHJaSE5vMk9EeEE0M3hHOTB0SHdIZmE3bk5vUjNYMHErcUF3RXFqd0JYdkxadUtIZWNtOVF4ODJSL29IZUJycm5Oa0ZCNk93TS81UUhacVNFakZXZndrSEZOazAzLzlqTHJxYUtyRGF4bHFVUnJ0ZWxaTko0VXlQVU4yNURkNFd1ankzVzRvRkhZbUZnUG0yVE1oTkIwSitheHVlVk50Y0tCeVZRRHZyN3E4cHVPSVdYeE44V3pLNW1JMmlLUGNIcEFwd2pSaUdESlpQS0ZEdjBQUEg1M0lTVUpPSUN5cyszZ0kzWU5CaDRnM2J1RHU2WUJxamtQaTgrenloTVd4anBVQnRGVitUcHFYcUpNNUhUOXloS0kyYVVWVkppZ0VOaG8vZVFFSXpoeFNlOU9EQ0hSVVRBTkpJZFU5NGdIdnVCeWowNytTR0x0NzlGaUhGVFhvMFVnRGNLeHYvenFIMk5BZjA4RGs0Qmt5VW40STFCbXBwZzBPNkVjVEN5a2JnZnpBMG1Db1FoV2RlZHJPQytncmpXaUt1UEllUjhQZHhZQlBEL3JxZ0h0aCtmMEcwbWRTRTZvenNEZzJ1c2NtTmRpVDhBV1A1cnlCd1ZNci9QR0RjbFFIMCszdUpBZ1hLS1VCb2ZpRGp3YU5PUDFMYzhHODZIVVdBQjhlZ1dNdnpPbGlFam5qblBhRzVhd1kreUpSaStNekJyZW5CZ1Jmek5KSTlmY2xiOS9YbTdOcDRiSTg5Ynl4Rm1OWmJQRjVkaVdVVENJT3VVcCs1K3lZb3BlWUsrUzVtY0tGand5LzNReVNEY1NDREtjL2tTL1VQYndzMDZGRmtuYXNsV1ZzUjdtNjVRNE5mZ2owalNyMy9zVk1qMnBzL3hSOWpFdE0yOG9Zem1CQlNVOVErN1hGMVlHSVVNdXU2ZXBMbmY2SzUrL0FwZjBqT0YwNXhHdEUybU9XZzBwM2FxL1pNOUZBVlpSbDk2MVFYZlg2Unk1NlhaeENVLzdrekNEVndtQmhOcllvUEN1TTIxOW9pK2NxK21wWndGS1czQmExalppTEJPaHYwZEd1Z053WjFIOC9OY3ZBZml1ZFdiNWsvMWhkUW4zOGhhZ3g5UmdYNmxDZFIzeHBJZ0Y4RWRYMU1oOTB0S0ZRSko1aTZYamNOY1VjeTM3M3YrNlAwTVF2YmdjVmtYK0h5Y245VDRlWHZQOFhoaUNIQncwaC91aGMrbzRZNUE5UDRCZ2Z4NUUybUFhVFZhWmZRRURESE1ZVzdKbW1xZmxUQ3JVVTRVOGFqQXFzY1RUZGtoTXhrVWRHMWExUHlEMUlUclZGZm5NMWxiTFphMjRRTFI5MWFta1kvQkJnWExZYU9PcWJsdndibTBpU0NPV3lKVVhQejFQVjltK2Y4NldxbmZuM1dHSmROQTBjbFRkQkE2K09vaWdQTnAwV1ZITlE3QitsN1V5UEV1U2VrTWVVOU5kTEViUi8ydHNCZjR5N3MyV25uOFZoeGxiazlUZ2FQaXQ5MDlVMU5NamVrNGxKU2pobWhQS3c5WG5MQldXYkM5ZUtPYnMxLzFqWjhobWgvbEZOSFovb2JFM0ViTWpxWjErcUNmYVVMTjltaDZmZmpDN2dCbHlkZnV6eHpHc3RVaTBHNldRck13MDVMbXVuMXdHRllJT2hPV1oxeVNUOXJuMEltT2thVzFkekUrYWhFQnA2TTYyM3V6VTlONGhHWUoyanFTZk90VC9RTzRJREl3N0UzTElnWkd2U215cEVJcUpzd3FHU0ZWbkdFRmI1eVIrblVZYUtWeUJyNis0TmtMV2hiMzdsemJ1UUVRMk91TnZYZXJoeUwrQk9EZTZ0aE5lcG9CWTYxSllXYUFDbHdQc3M4UFl0elBYNTVZYTRnYVlzSWtwcC9GZmpPNVR2RXNWWDJPcFNvTmdPY01scDlFSXdvcUl0SlVYNnM5RmNHM3U0U0dHWC91TDl4NDgyZEZyUWxrakF4TTdBMC9JdVZxOTk1QVRGaW8vUzZFMUlzT3hLdmRhNVdWVmZNOTMyL3RjT1BsQ2QxV250UVdrZDB2UTd1VW82WU9lVktGdTM5eTJwSjRJU1RFOGxIQ0E1dDNFeG1EQkwvVWFlbFI3S1FYeEUvT2VManZPYVlNUFd3L3RMcGtsMVg0Q0FnSURtK21nQXdNYTB5SG9pNk1HZVkxQ2NraTFZSzJsNllsVnlnV0pvblFJVXRVNHNOM3RaNk4rNmRrZXdqMU1PQzhaYU5SUVhQRnpUTFZmOTZVZkJNelp0VkZXQW9GT2pxUllOeVdSclRHdHJwWEo5RnJDVzlaZEUxU2hwUXJkalpieXA0U2RaajNrUlQxVWYwU0NLdS93UnBWTkhHeXY1ZG1QbzBnSS9zbXhiTDdBajFPaVdJVkFUd2FqRStHYjRrNHFNRXhzOGN2RG0xRnVlVUt3Zk11UG9aNTZ2QVBsaldoZFVMbnk1aWJXMW1hQ05nMFVieUEvRHg1QlJ6c3cwQzBEbXQ1bWROenZrK3J5bU1MVFZkU0FkaTFOWEFaVDJXL3g1SzhxdHg2WDNaZnpLWTRmUldCbDMxbWh1SmJSK3V6QU5paTVzZmw3ZzhRbXJQczJjUTJabExWYXpoc2pKVzBzSWdrZ1RBZGdyZ0loTndrOEd6ZGRuV094MEZQOWFkSlVZeFZxZno1WEowdkV6NS9oY0UzMXpWbTJWWUZTZEdheTZ6eUQzYnA5eFdvYWRwVUJUOHVPYkFML1dCOGdsZ0sxWjFSWk9QZmliUHJPSUtWQmsxUUY0SEs4bjFTcFdFYytGZmVjQWxzbitWVytYclFLNnRHRys0aTdRSUVzMVhYbEJVWk5aMGZ3dGtsRzZOR292UnVQYnFsd3pMd0tCQWR3Q0k2YjFadzdBQzlJZG9WVnNvV3hGVndMOFZmVHhKbHpmSkc0eFp6YU4zd3NLU2k5Vyt6OUJFL05PeFBJYWswZXI1eDBRck9VQnhFbld1YXM0Q2VOQ1ZIVWZCWmN2R0ViRHNCWmpaQ1JpU0V2aXVrM3IzOXRXdDkrMlpCYWpUb0IxQU9rMFJucnQ0Z2xCRzFnMTlIQ1BoU1ZISlV4eXk4aWduUGh4VzAxK1pMcXdkMHE5L0xBdk9PaFE0b1piOEx6Z29nVlVKSDVPRkdlNWVCa0YxK1dVdWRyeGNQTUxiOW43c2o2Q3hPVXZzVXN4QmRqanl0ZTlicXgzdmVmcVlEY1NGWW5sUnpHSENXQjl2NUFjVlRZWURRR3VUUjZkVmFlSm1JVjBIQkFTWmkxeVUrMjB1UHNSa3dOeURPd2xTMC81SmUxSzlZdFN1dGUwOENRclkzSE9TV2llZG0vdWRpTEpZQVBJeGRXa3k5VDBaRGhwcXlCUFRBOHhkR25nVFoyZlo1VkdqMjVBOHN5TXZHMUQ1M2ZqcFhtN3M5T2oxR2ZGOUJsMnRCbDFyakVBeFg3bkt1UDRpLzF4M2RBN3ZtNG9xcXRtSHArWkUvREhFcXIrUjVZUjkrN0hES3AyUVJXeDFVdmdWMUdDcjJuenJtMHRYdnNvU1J4VS9iVFJZSkhkai9FNzhCQUo0a3NWeG5oYW1WK3hkZTJCOEVDQW9UNGprcW1RdnBtU3JaSzg0Q2pLMnJlVXAxamtNaWU4a2lFaVMxdU4wNzJXeWtQU2F5N3dseWpPQkR5VWg5VU51TjhEVXYwRFNIak5rRmRyUTZkdGdSbGVMVzhRYjJBSlRlSDAxbjRHeSsvUlY3K09mcGpwUC9DT24zRFM2N1dCd0gwa0Z4TmY1dTU4RU5nMWF4eGdwUm9rUE9vb3Y0MmhyNVpXQkgrTGRURC9HMHJsdnVGM2FobFlYSHJNWGtESUNMaWNyTmxqdVdiR04vOW1tQU1Zc0FSb2tTdC9WaFNSUFcvMUQxa2llYi80dFRKUVhsYVdUay9JMVVVQ2hXWXJndEtGZGxMZnZQQ0tFVkU3L0owaklyaEtudDB0L0xJSGJRbSthek9TYUZ4WUlHc3lpc1g0L001UjVWeld4bE0vTE14ampSQXVCOEhrWTRHNjBXR3RBTTFXem1TREdwMld3eEM2a3BqYXQ1WDRKdjNXRWFnQSs3QXNpNjZUS1pDVklCdTlGelROY0FHQlhBZ0ltZWVlbHhtaDMwVktqTjBWL0wySU8rOWY4K2VHdktGYmU0Q2R2ZTh1NGxMd0VXTmRvTEhjV0kvYXRTVjhQaEUrMXBrVlh4NTVDSm9wNWNscXhVOFlXdVZ6bWxRTjkvV3dIMEp5N2dWRzhUa01NYk5CQ0VRdEYxaXFiZGd2aVZzY2o3T2o1UmhDaW41TXZJekEzTmtZdEVlSlRNMUNGWDlFZ3BZU0xoVG52UjNtbE9zbkNVc2FKQW85dVFDUWs5YWV3TUxsK0k5ek5WWnVqQ2hLRlVSc3BaRmNZS0J6aFlucWpBUUxITEVST3JNTm9GQlpheVg5dEIweG1TZzB3WXhtcWlMblB4Tk5BZ1laRVlaUHk4cnNmQTdZSlJHSW9NWWljeWljTGxVTXdQUTFLelNQSHlqYkJBaGdVa1FtSGFFQzV0TmxsUVE2VmdVMjRJazVlcHJ3d3p1YWZVNmM5NVU4RmtVVVByZVVzMUdGWDI1ZTlqTjJJWC83SVlJZHhpeUJ1SGgxdUlEREpBUU9sSTFlL3RUVncrYVZlK2F0elZtUFBhb0FwckQvVlI1V2pPYk1NdEwybWZQa05HRjh4WTU0cUZuK2VNWjFuTExTa3lKN1lFaXZ3SmhWSWJUWnJnNHpqYkFZcnJUOUI0cTFuZFZuUnhyVHF6ZG9ZY3ZZZVBQdVVFdDFUWFNiUFI0U3lmRXRJeGpmY2tHRUc4aFVxZnNKbTlPdVVkNlZNRlZFY2JiaE5QazNnMEE5NnFSU0FDM1gxUHBjNkZwanNvcDFqSFpFcnhaV2wzeVhJVzBsa2VNR3V2bXcrNmNwTU5SN0VJTCs3Z0lUenVhQkFkUmlELzFmOVRsRk5jd2N4NGZCTlNsYlJ2Zy9XK0pCU29lSDRVOFR0QXVib2xRWXU0SXN2bEtWbkZITHFyMnVib252TXRXOUl1QnR4OHR2a25ybnJYOWhncGJMRDVPdUNxUUlpdlUvb2ZWTnBYU2lsMjF3b0RHSjBxNXY5cmRVRExLQ1ZPcTRKbFB0QlhsaVRHN25NSnZJekRTTUNQNVZMaFB5Sjc3aUttNzh1SGpaNkJjQXM0SGFOdFhzZ1o1SFIxb0svZHBtdVJyUk41Rks0T2ZHR2ZZQjhGNk1HS1lVV0lrOXh6UURWOGg2L1EySm40ZzZ2Q1RiaGZlVVJhcWF3MERKT0xDcnA3ZWFOOEN5QkV4RUFObVUwcHQxMGw1ZXQ2RDlPNTlheWY3eEM2cXpHQXlXZTl2eThScFhDOTRBWk1uMHhkZis5ZWs0d0tjd1RsUnBMeCtCVy9yakErdXhvVTRYK016L0ZGazBldnA0TjFLZ2V1V2VCSTdiMlg3K1NpaVlRZFBjb3lnY1paMi9Pd3hka2RBWnRhRTVRNzdpNmJkWDNIVnFER2hGMEcwTWQ5alN6dmg5WDM4NklGRkF3bmpzRVpiSy9qeWNvbTh0N0hVV0g1K25GYW9oMFpTUGoydDVTMGNFNFhRUnhVNHl0S3NpZW11L2I0d1FVVmZWUk1sa2F6YjZrZmtQM0pUL0ZSQ0RoVUYraXVDbUVyYW9GK2NrMVB4dE5mb0tMSU5BVWxMdk4rRkx6UUtOMlJvZmttOWdBa2RuVTZKdmFoQURLL1htMmNTWTZTM2hFMm9STHlQQjFiSHZHZHU5VGd2NGUxVlBIb242SEJNMm9Edmd3Sy9XejU3ZjJWN2VTUm5kV3NYMkdtcGM1VnNmTk5ua3lXWjVScU85VW5jQ0UrakFMRWE5aGRFQmpwRCtiZnAzUjRDck10RThTZ0g4aTRxWk1rcEIvendTTStNL2FISzI1TFNPSVNHQmIrUmlOME9hVVBJKzJxVjQySURvakNJMzhTN1orQ2JlZk1DMGdQUHZrMjRQKy9PWGpRM1o4YW9ua0FWNENzUmsvdVBNMmZ5Z1Jyc2I1Q25lcUYwbXd4TEVFUUFJTEVLN2l1Y1BhT3RlYXV4S0FzaWNsc053WnQwbFdteW5uZHNpVzluWStnMHlUUnJlOVF2NXFtdU9wY216cE5VRnhGeTAzdG5uNFpwWXJqRUsxRWNRNjRNaEIreTVkL0xNZkJCaHE2RndxenBNZDIwVXdYYTdMYjhkS252TWlhMm42dmx1L3FNbE5tYjlaV1I5Ymo5bHl6NnkvMnhpYjlkSC9XWkQrbzBmYmEwWDIwYi9COUFGKzl2QXhaUWthL2Vaa1JlaWo3QTZsVEVueWRxZnBBdVB4enlRNTN1UTlvVFIxOW5ESUdrYXU1UUhKSWhnWDZuV0hPamtxMVlMUTZ6ZjBIZFl3SW12Q1B3aDJqQlpxdklYanRudzN0SlRHTHFwNFhyRzlUV3ZMMXFqT3pXWllxdzRvQlF5UVdUNnBNNlcrbWJJN05IM0t2VkR2Y0JCL2swUmlOYTlpakNGZzMrTm14OGszekhHd1BUYmp3UFFWb3Zpb1NyUm80MGVJVUl5WDhIcVhyWC9PSzJhQmNPN2FYa0c1NTJFeG9hVVExUGNDSjJTcnZwN3VFL1ZiS3J2dmk1c3B0WExwVldiNkZZa0l4dk01ekxPSnVRNnJWNVg5R1FwV01VZDRXWjJUWkR0aWNyeHg0c1U5R2NCenhJaGJ2SnNIellWMmxoVlNsMDJLdnhwMThGWEN6QzR4U0V6dXdiNUFzT016YStxUnQ4dlRWaVNQbEtUbFAyMFJsOThQU3FjR1FkMlY2aGtuQ09CamM5enpBanVnb210UU5IRHJXbGlTc3djdmFIRDZPT0RBNDBYR2RQUzhIdEg3SUhaSXIwSmtPQURsRjFtbGxMK0R3Q3h4SGkwM3l5R2cxN3FnQWd5MkFKU1JYVHA3eDJtZUczdXFnajBDOEtCeUpoT2tSaENFaFV1OTFYUGdLdFRub1FRVFZtTTVvSGsxM0c0bTJJVTJ0SGl3OGtxT3A0UXRIZVpRaThIN29LTjRPVXVSa1hOZ0xONFNsdDd1QUkzdGNDRm54U2hKSlhHa3h4TnBxQmd6eGd3dHZZZEdOQ1JpZGtQMnpURm5BTzFtZUJrYjlTTVlveFg2MzhyTUlieC8zMzBuMGpsdXVzZDY4OExEdHZ4Y01MR1B0MmRLdGpMb2JZM0I2R0RFVFFkMlEwZ2tRMmdHb0tnMnJEK3diZkxTa2NSditZb3dTMXBrbVdkWi9EZXhkWVhnUWtZY2RudEFKM25hdElwUzk5emJpZFJsbVYyL3FKemtVLzVzQXdHV2FCMEVLbkU1TkIrb1Zibm1CbVQyaEx6QTBjejFxU2JnWXdGRTREZEsyRzZ3ZWlEc1VsNXVsVGlRTTVmdmRuRmVXdkcyZmZIRmIrTkVrZnFJV083VllQVkJXQ3JxdDFZUWNIMUZMZjRhOUVJY1JONG9VV3Z2aTQrMWJjMVRMQ0V6cDVHUzRXcFJjTWdSSHhGYVNZdllDRXVPU2xnS1dpS0ROR3dRdW0zTGlCNEJKdGlTNVhwVEpaM3JtY2JBL1BjUGRoU3FqbElHWWRKaGJWeDIrZVNNRUxqaC9hREROK3g0cU8yVWlXMkVZVm1aUTljdm84c0xDSlBjVGhsamxBWUFPT0JRQzJYU2FlQ25mOWFOZzF1SDZMVlZFSUtxSEgzNVlLRzg2OUpmd2R2SkdzK3RoMUkyT2Q5K1BnZTlDS1lybXpzWnJ6RksxamFSaUYwYStJTFZLWkFUekJoOFhEeCtrbkxuNHdKb2NWMk9RNG5SZ0tLanZXQzNaRWpZOWY5YVBLLzV6WDIvRUNDQTlqb0ZlampaOUc4NW1VanJ0cEZCUnpEcDVOMTBWU21sRHYrUkhXdzlkWGZ3QldJcjdNNmdsdWVkT09SOGVGL3RUbEt3R25qWk5NZjRHRmNOS0JueEFLRlNtQ292eStQTnc5TTVWcDZ1YlQrWThTTmM5ZFB4SVoxNEd4TjJ5cVc3bXY5SHFVcHRFRWVoYXdnWFBLTXFubzdlQm4vWTd5RGdRYWZpQkpyczB4eFUrZ05KL24yQnlRb2N3VjFneDRPR2NRd3RvaGNxRmhFaEF6bFdhbU0xTncrT3RhVjJQek1PeCtOTU9ZcFdqSjR1bEZHaXBWRG9JWFVYNkxwNjdSL3FVdDdYdjV0azhpck4yUTFBVVdsVEVKcGhON1dOQ3ArTEljd09yZHNOQ0xsb1hBZjVtNmY1K2h1NUlicElvVlljOXNZblhuK1N3aURZYmpwN1dmc3EyK0kxQUhnNXJwc1BRK0h5L2hqdmMzVHcrbFp5WmlTcGtMN1pNVitsY3hBUlNwc210bmN1L01zVmtEckdraG56TFVwcGpweERxY2VtZDc0ZmtiaEd2dFd6OUdMeUhYNitnQ3JaZ2tZOVhvSXNNc1FQRXlMVEdxZXBOWHNVdmU1MWszS3RyTU5kZHQ4UU8xWlhvL29pb2xHbzhQMTgwcjl1MFBvT1RreXA2QVE4V1ZPYzVobTR0aTlrMU9ZQnQzc0h5RnVRanZtd0V3ZFRtd0IzVFlCcUJJajdma1NSZVRvMUhVYjJMNGFDa21EMWZ3RzVCamZNNGI4dXdTNWphOEYzT25idmU0akx3aUZiOWNYR1d3bDEyZUdoL0pOdDczeDdPeFEyZGtIM0F1b2VUNXlRdG1wVGFnaGxhWUZiU3ZEUkdVd3VkUzh4aVlsd1VicEpzOXlGUjFjVmRiMXlBVE9SNVlON1BHV0pMNDBUKzhCTGlnODhHYmZTZzFTZFp1aXkveFJvdlBwN1E1TDJ2Zk9NSFRzOTBnbXUwb2NBbUhqenQySzVzY3JoSGJSQkV6VVYzOWExL3FPWk5yNlhlMFdSbVNzZlI2cHRaRXRKbW5tWkVjOWF2WmI3bWlsTTFQTmZPMitNRUJ3VW1KN2FuNGdwNVFvMUFEaXA0VGVJakRZR3hzaWxzMWhuaDgxR3pJY1hjVlpUek90SnY0bzg0ajd2a0Y4ZVpkT01pWkJsWFBDd3dxbVlHdVZzeDRJMmt2YUQyMUczVWQ4aVJaZmk0Z2M0VjZDUWVmZGZXdWhheDdac21HeitNMSt6aGFGd2xSei93UG9UWWlrUXN3Z2hYR2Z6Ni9CVzZZZkRyWjNmWG1RWFBrVTc3c3BrZVM4dzlmT1VFTWdFeXdzVWliQXBVWUJQa1EvOWw0OS9UODNtNnZkdVVReSsyYTZSbm1ZbElFSXlOMkxXRktBTkZrWFExREJBYWgveEVoSHpRNCtGKyt0dUU0MjVvRFRCaXRiWklDMlpPbXdLZEVsZ3FaWmtDYllyOVdOd1hONklTaDUvZWF1M0IrQ3BCd1lKdUpLVCtNOHhGQUdQc2R3ckRnd1lVWHVzVzFXcWQvcEViVER5T0ZidjQ1OWYxU2pHMzRncHBVQS9YOFBZbS96NVpvUDN4R3hhTUJnK2FvR3JTYXVyMHV5eDA4Mm1iMHBYbFpneXgvTEF4ZUZxUlcrVml2YmM2Z2VJcG5mbjQ2aUlKRzdnUXpjc0lRRzQ1MnFvMWpDVnBzYlgxaXoyVWU1MW91YlVnaGtpaUhReDgxbVNJR2hkU1hlN1NORWlpQVoyUFlKblIrZ05mWlJaT0g3b05rVEg2b1Q5ZkxEeG5LUTBsemY5aHZmbUNWQmlLcXJTUWxKcGsrdUNReFIzWHRFcUpjYWlRa0tqM0dzUHJSWnFVMnd4U0o1RGRycUc5bnFMdkQwb1d3MDM3OEdtaXR6M3FId01BVDk5dnpnSXhWVUlqLy9NRkNxR0pxSzBLOU0zZGJGTUF0UGVjMWlQRzJxUGEvd2F2a0NEVEV4c1RoSVVqQktycTJwN1k5NVFRejkvWjNWcG9kaU1xZkxPVGIrcDFjblRkNmxXZDlPSS82aXpqeGJjVG05cVJrY2NWenZERFZNQk83SDY1ak55Zko0RUp6cHQ5aDlNWEtvZy93dHJneUJGa2w4WlBqV2pWbXl0Y09iZ01MV1I3KzNhZkx2MDYzMVhLVFMrUHJ0SWJDdGw3RHhtWS9WSTlFN2ZlT2NMZ0oyeXRuN1Q3WjYxUE5xUnRGLzJrR0I0NHhyYlQxL1FoSTMxeVVDcWY3RUtkcjgxaCtoTDd2a3BGZFdOZ0tvRDJmWHlMOFJ2MER1RGZvREtkZkpkV2oyZzE0RW44WUVhS0lNQld0OVhqVEZnai9kMENVUDFJK3lkRlk1OWpHMGMxZzEzek5ZZ1FQWU9ldUFmT0Y1ZGw2ZVdLTm14ajN6UU8vWmNsVGJmQ2hmSUdsSVhjQW4zSHhTZWFUbWVJdnBTZWNnZ25LS0RCbTFDTkRtRmVKeVhQTmlyYnE1MHM5Z0l5bzlVWEttM1lVaEpDZC82a1hjMGMyR1o4QXFmaFkzTGVSUGVIQ3F4d1N0NWFwRDM5TUFqbmxkczh2SG9UdjM1Y004ZUU5U0ZucUI4eUM3TmlJalRWTzY5SkxoQWdKaHhocnc0cTlWSDZNM204c2tRRVRJYUhpckhzQk8zcVRJQ2RsaklIZ0FhR0pxQ2UvYlhpWDJFYmZtUFpFMmlOcm1PVisycUlsdlZMbXI0ZlpLdnljVkhoOEJwK3IyZXdGbnRYeks3ZTFvU0RVejVRZEpxQkI1QnpxZlBrUFJYQ2lsSmdSVFZoaW5mK2lKSEhWTS9hNFZkTUkxbFBQSEViejVBeTlKRlkxeFhjQjRTMWhBd2dXUGhRRzVXc0dOSzRtMjJqQVNRMmhRMnRkbmNvUHYrNDE4RGNiSU5abVl2a0FHZURvQ2lzbXUwK2w4NEtMaXdzaFJEdjBqYUE0eGo3NEhGZC82dXBPY0xKMEpUaHFRcTRBd2FGKys5bVhVck9OS3FvbUdBcVFPR1ZiK0FMUFo4ZHdIU2w0MWhMZlJQQ1FDajFSWGY5amRhV0dIb0VjMStmVDRuYjd6MDhVU2dnVkZDZWZNUlo3Tlh0aGcvWHg0NDA0eURsNDFsd0E4Z1F2RlE3SFk2ZTAyZFhPbDFURDg2NUliN21nNnJ3dzh0WDgra3ZKU2F4MWoxM1QxNEI3U1pDY1RpcGl3NzFCdFh0TjRseExkQWQyQk5hWk5VOVVFWDl2TDhjZ2RkQlJ1RW5PL0Y0MVZHZC8wQkZET2ZLWW9IbEhndTRyZ3pRVHFzYmZyaGo4UEhKNWxEZWpuSWlKc3owM0p2eFlud3NCOTh1bGtVZElQTGhuc1I3VUVEb0NXYVd0N0IwNUk3cU9tZ3VOSllpa0tISHA2dmVMcVgzNXR5bzhCemFXVk9hTWdScE1CSFFkU3BGc0owWVU5cUlNK3FkdjVXWEQwVkw0MW51YURtNXRnUStIWWFOUmVwTHlVdWZTNGZIMGl1dCt4ZkYrcDZoZmh3eTdGZ3BXSkZqOCtKemZ6NzVBb0NibDRuUmZ4T1YybENmRDA4VXVDREZoSHpJTlU0VXZlSGRqNWRNTkNnelFwRmptVDRaNjZSMUlGWk1UaEhhMzV1dWEvclVCUG90Ums0VG5RSGtuVVRVTzJ1U3BySEZRdEZHL24zVHV0eFBYeDgwZjhucmszSE1vU2hWWDc2d2QwMEc2Qlo1U1RrQkYxTWJxdGgyNUNvakpyaDA3Zko0NE9JNlVyT092dGZaVFFYYVlMNmI3K1hVTmNaWGRjS0Yyd0NJOXRuQjJ3WStQOTRuOVlMdWtIVUZNZEVnbmx5QUJ1QWlKcGNhNzEwR0RnUFN1R0lpdktUWFhITk1IQ0kzUGM5ZS9tZGNaSGZ3SHJ6cEZUek5FWFB6NHVyMmdiN0tVQ0N6bW1BRnpTSjdsSm5xcnhJZHAzSXg0TjM3QlYrZVZRbnBoT2l2eDNGSDkveTlDNHhtTmFkYjBmK2Z4RjlucFg0N0dNRVNSck1Vd3NkM2pLb0xDZEw5TElDSUpJeUFoK21tU3o2V3JSYm5mWkRnanpKMk54bENHc21oR0hNUkJNVkk2QVREeXZycy93QzBtZFowZVpYSEs0bWxtWVMrZHRXOWtya3p1dEhTZTgrNlV0REpYcS8zVkxydmVDNGxKWG1TbTVGc1JmK25Db0ZDNWdtc2JVMDYzcVNEUktyY0xaVjFDODJiM2x0TEcyUE5oSVJ1cnFIUzdZQkgxNGQwaXJIdFNVeUl3R2NmUEIvMVdZZkpYb3FHam5kMW1tZXJGOGN0ZWYyNHRvRTdpRml5RlRuTVFyZmhONFlTcHpkQ3VBZEZicnpiWUs0U01DNXNmMGl3TzFsS1NyK1FhZVFneEFQS0czaUVnck1GeTZIQlRQLzJRbUVKbzFyYTc5cWoxTnMzeGFaTUp4RlYveU9pOFNwNFlKWURJOHVGWWQrMFFqNnF2YjRxSHVSZytHMnlNUGpnZGJwdVdUQmg2NEVTYlppMEUvZkNaMDQ5K2xINEJOallmc014ZWVRUlZucXhqY3EvbmxxUHZjZTJ0MlVDb2xwUjFaOFRpdk55SmN6WkF5ZjVVUjRlUkkzN0lsV2xzcWtXdW9HZVFWekhzZlNKQU16TWVFOVFMT2ljRVpreWV2RHhDM1NEc3JlZ2xFR05ZMGhPcCs5VW0yQjlWQVVYRWt1UkpDSnduR2I1Nk9KSWYrQ05kZHpmSFhrZWptTy9SbVhxSXNrVk5hVlA4NWpVa0NPOHF1Sm5Cc3JRSFRmTTNzc1hPUmErYnFjK0hiYnRZMnhlSTRpYm1JQVd0QTBFNEZCQm1SbDNvOXp1ekZqT1c5VmFVeE1mT0VUWnZ2SW5yM2dUSnBPNHhSNTBnTWdNUmY4dmtZTHpvaW03MHRUZnFwaFJhV2Z4bjhNcVNGQ1czcGRscU1sS0FLd3dRT2NYOVhzNXdPSTlvTWtJUlFEelNjd1pBTUd0TTgydytTTDF6WkZKUWkxUHN3c0ZWVzVvbTVZY1dxNzEzUGIyR0RZd3cxT2FGNU5CSmwwd3JESnp6OFp6U1VIVjhzRE45K0s5Y3FZenVYSGpjNHM3YnV6UlNOWlhUZXNaL2U0MldLNysvT1VUby9taWMvc2JqdDlBTzNYNmhrWHUxOXFYZFJHNVFjQ2lHaG00dmtXMFN4MGhIWjJVbE5jeEtrZmdFcU5DQitoaW9rVVJwbnA5U3Q3NWtmbnY4RVkyNTlSVUw3UnNqMGJTMkN0MVFqVFRFWHRacHhkN2JGVUxsRXRWeU1HMGxoR3hpM3hyVXNFUVhVQ283eDIrR3pyVmtFSS9yNG0yRElEcVVnUTR6dWxjQ1Bldjczc0VPOVV2UGhPTU5wN2FmQzlkN25lc0o5RVBYempPWFlsWHo1TXNuMmhGZnp2S0NLQUJSc085WDUvT1JOSk9EM00wM3Z6NkxxbkRKMCtiVXMyVDBycklHOHFEeCszdlR3b0R3QThBWW1DMlVzdUtrUGVhS0hqSVIrOFhrMHE3cXNRNXZkekdEN0g2U3JUMUg1dHkzL0VPQVl2cTJVMnlhbWJ0R0xCdm1OaVNERG8vUldwbS84UFlSbEJhNTdwOHBtajdUV2ZjMk1HdE96aGtrZHk4Tk9PemhROFVBN2RqQmh3TUJMa2I1T05BeTBZWGd6dmowWElqLzFpcmR0SkhRc29HNHloaSt3cEJrUWlEdkdmZEJsY1FldTBoRzVDcUFVdmtNSTlsYm5sVktYTXJ5U1NTUHNsd2xnKysySmlzZnNuV3prc1hvbDVDKzZTUHZRVXdrTjRqTTV0NVZwT3FMa1VLNFZUOUl6V2x5ZHBMOUpBNUQrRTI0cC9JQklsaXEvV2ZNR2tuUzBZM1VhMFAyZS9aU2VwVDJ6LzFYQllmZk4rUUY0QzZCRTNuZFlnVGRMWU1ibDBVbmluSml2RkgxZmpXSFhQdk44N1VmV3hjOVBPcSsydTQ1UHYxS2NMeVp3aGd3d2JiYllMR1RRbE5WNVdFemJtWGI2bXlXd1pZRkk1WExZTEEwSTdyRFdLbVAvZDJNNFJzcm9pYkFqQmZ4ZHVwMGdUS0pjTWEvMFY2MUIyLzhyckFCeWVkb0piZFVPdTZUT0UrWklja0pzU2w1UkJ6R1Zxa3FDU25Fc0JibGpSZklDb0ZtaGFwMWo3dUZPYkxXdkxWQmxZK0dYdWxjNUw3TGRvUFRIMVRoeFZ1QTRVb01BaHkzbWxodmlyRzd3ZGhsVkVGYnRJK3dpcFNNdUhyTFh0RkFxdSsyVjdUVFd5RXdtaUNJRzlha1ExbzJ6QmsyV2R4MytVcmlXM1o5UTVRaDJJUjd2cWEySUw2TUVpbXBrYW5XYVpWZHNadWRZTXJRSGRielVjRU9CRDFDRTBYN0FnVWRYckEwazVQeGduSjFES0h0MTBxVGZSeVdwNjBMSGJmZ09IWUx4ZGkvMFgySG5QbkdnbEZoeFNFZ1BGRkRvckNrTTdSSFpISUdWNnJJMFNWU3lZN2t5WDZNc2Nac0s5ei9NV29BR3lkMU0wYnd5ME5GQkV5d3B1aW5MdjFBZ0hjK2wvYml5VTV6YkV2MVh5Vy9lREloTmZFb1Z6YXVvUjA4TXI1MnZ2VzdzeGh0MllURk03RUZJSzZNODhaeEc4UU40dEVIVmJOQ1dFV1ZKYXFWeTF3UmZhQmNNRW1vNGFoQ3A0dXA0bnhOdndXbElQOWZneW81WDNJWThQTElzcVIwV1hucytobFhPVmNQSVRSN0lBcUZ1dmthc3hQRVRPR21kdHpCZ0U1dWdSWTVjdmwzTUpNell3MnFoYVN5eTdlYmNJVTNmbjAxRmZSSGx0NGtad0d2Y2FrQmJZQmw3WFJqRGZJSjNodjRXMmkzTTJNbDd4VDhUQXpORGJ3Snd3dUM3bERFcm1NWHF5VmlkRC96SDVlWkdwQ0VpWm13SmNxNC9xY0dGMHg1cUxQVU9NTko5dUlJUms1eFFVU2RRaVdFNXgwdFZRa24weEw3aVp1WHhPU21INkdzaDVWaUJUcG42WjhoQUpkZlA2cC91YkhTSGhqOHNnODBUTXFSOGJ5b01XcWJPclR3QXlHTkhjV2dTUnBvSlhCUnRrQzVza3BaejFDeHhUckNUalRsYUtFaEgrc2M5ZTdUZ1M5SDFEY3RCMGJDTmVUVUpYMVN4bGU0bGcrNmxIVTJRQWlKdTVCd2xTZFNCT0JXa2IyL0pzZWRxUnNXYzdQOG9YZWkrZjg2eHVHcFd4aUVCenV2aGp0MlUrek5FTmR4WW5YSnB5dS9BTlN2MDIydm9EdkJ1V0QxNkZ3bGhZcWoxeHFxNFN0NlNOQWxXVWY5c3lBamdVcDNta0J4RllPZ3Nvd3duOTJSdGgzeUZkZVIwR1NKVHd0QldGMkltNXZrSWw2VjZrTVgzd3hBZ1lMeVZ0M2QrYW9Halhhd1JCNFQwbDNPcFAyOTBaSW1QbEVFa290aGpnTnVFSFQvZ3BlajR6Ui9hODhLei9wUnFuZnpsbzkrWE93TnMrbE5pVm9iek81Mkd2eDJ3QURJQk5Kc3cyb1krVXV0SjNmZFZnMEVsdnE5bitjY1B2TENmLzNJdEtFd1RlMFhoWXRySFNEVjRnalduVjUyaGViUnF0LzlxckQ2TXgwZG53bGdqYUZvcVlYcnNMNnd3R0RTOTNpMEJ3M3JhK3JJYUpTSG40UDVYMUo4QnNtYUxCR2U0NHJ4UHBYM21QZkhmakFNRVUvWW1EOWZxU2FWWEJXaFNOTkRyMnk4UHNOUXRKaFlzT3Y1ZWFQclU5VWNvUzhJL2pHcDdhdEFxeGxtVVJQNmRYNlRISVBDbVJqSWdUOGJFemlaY1lkNy9XL0lKNjZNenJnV2RFclYxa1JFTm9abzAxQUh5bUV0SFpiay81NmtLZ2V5cTZaVDVVQVlPaUFqWkhudEdhaFR5OXI5b2NvZnNadkUxNDQ2WWFRME5oeFdQNFIxM1RHM0JITzhJaWNDb3lrcE1nNHEyR1BmSVc3K1F0YUhMYTNlWGxoWEx5Uk1NYVd6aG5WOVV3dU5uUkZvV3ZQNEYyZy9PQ1RDY003WUtpMHZoaFhVbEdzUWtTSy9yaTRyNGw2UmxGZ21sRTdkc2pnb2F4QVVBVC9XOWNHTkJoM1BwNkRmUE1WS2xxQXNBQ2k1dDFSMGx1b0puaFFuM2l1enVvTytHWkhRbDVwTFpHMTFlenl0V0NZV3pYSVJVb0ZxaThZVmFLa041ZTRuVzR2M0VKbnJEcVRCYkpYMi90MU1aOElpelVkU0xKRitlUUdJTlRJdkxxRXdvM1pMTEl1cWp4eWV1b0hPREw1eGVZTFoyZWtGam9DUkxqRXNDbzR6bFl5Y3EwMC9WRW5XRFE5MTdkOFdFbkZOT1ZWUWs5ZlZSUTQveVhmeEYxNkdtUHhqYm1jZVh0ZU5oWE9kVlMzdHdvSERBVWJ1SDM1L1dEY3BVdDJsRytqS25DMVdOQ21uc0lzR2ZZZzJubEN3R0JGc214MTN2bjN3TnVycDNGR2g5T1hWYzVHSGJZcldXZG5Nem9xSWxDY2pSYTBERmFqYWd5bTRTZm93NFpjc0wveGhMTTlGbkJmMlYzWWxrOTlod1lRdzhTdXRIZ0lLOGFQUi9ZZU9oRERCMnVDUjkyWkY0ZmxLNXJnYjhTbS92SGVLZGhkT1lOYVB2STBGQndjYnZvd25USm9qc2NUeVdBL2tua2hsdy9QdUsrRXdDVWxWV1FKUW9Wem9rY0c3T1RjUk1hS1pkYm1zMmNmYnlrTXptRzI1bzE2cjVKNmpQdlBiWjZhUHc1MmF6OUFma3BGUGxYQUhJa3BNN3Fra1BiMGRWTEdxSVZMNHcydm5vOTZVSUZjWEFNdkhuUXBkUjB6Y2tVNEhoYi9kVjEwUEZqNTEyQ2g2QVEyZlc5dkRkK2syY1JXaXVIaGpvYXNLdmRKdEhoMEI1V0VSYTFab0FmdjZCM0Q0SGVDQktOcnQrZnBiNzZEMDFqMUM0MXRzRDFlWVlPcHlwUlc5aXhtenJZdXBFcnhrVUpTTEFUTnN5VXBVV01Pak5vZjBDc3o4MzB4bktyUlUyMkRXNFlXK2tGcyt3WU8xdTBwSmpWbDR1d3gxSUtYWkgxYmtkcjZzZ2hZelV6M2NFeXVXcTV3bHlET3ZSbmh3MXMwZ3I4ZXpoTTc0eVpKcThPK1ZETE1Ua3lobW5UcEQ3RTZMWC96MWQ4TDk0c2g0QVlyV1craG5PTG9meEl5VzNscnEzK1JlUnRGeXFLR3Zya25PdC93ZElaQmFYZWgyK2dmNXZJaUQzTFJYMnNkbnRZZ2xFN0pRMDlEK2RVSTY2TDhCakpzVGMzbjhQb2hvb3dLMUdLVThDdUpRQmhIWnhBSTBCOW5tNTIvcm1PME9DQTJtenI2ZEFPbUVyckRVa2QveFpiaUQwV081aXd0SnRidnI1T3lmOGZraUN5cm5ScUJNZ21SNnNaK1BIYm4zUzRHMjkvS2xiWXR6bC93NWVQN0U1ejNhUXN0YkdHbFJLQXpVRUtnWSt1T2Y2RlpiL0ZUREhqSmd5eFBLZnN2V281TE1zbmNjQWlNMCs0R0J6eHEvMVpUbTBRLzNYenpLMStDNGpPZFY1WXp5Sy9nTmZaNWYrZkFISWM5KzBxSDRSMUNKZEhhVWtlZ2sreTlJd09TUVNqazFsNDhCL1pTaEJlL2lJQThobDJabVRlc0NYY0NWYWladSt3MjhDdHVBV28rNWZHT3Z0VWlNUkwweFJBb3M5RUkvZzlJRENxcndrMmlCamJzbnFWNkRKWVZCaW9FS0F0K1NzV1Roa2lqVytyMUtGQ21sN3FzTkZxSlY1V0M4My9FV3JONWZrMWR2Qitqb0psMzdZUmZqY0xkbEpYa1RrQWM0ZVQwVHNseVhHNWFRamhkWHAvdk9yejZyUzdHOVRvb1NYQ3hJeWwrOS9OTmxnSVNNSExET1p3VFNHQnk4YzI5OHdmVnNuWW5YVjByQXN0bGxvajBOQThYcXFGYXpvdUtnSEl0eCtNQVh2ZmszRFdHNmFXQnVpR1FwS04vNWo2SHVhU1ZLSTF3QXVpeGtRSFJDaXQ2bzZtbE5nanJiWW9ySDN5RC9DSkpXZFlHd2RuU2FUTVFWY2NpVDNxZ2FXeC9UaTU1U1I3MjV0RFpXcm96NVZaRHUvZ0h3ZUZKb0ZPY0FzMDFCclNiTDNodHkwTDQ1KzZOaWI4NmJBL0ZVUUZZQlBlYVBLTURTMWJCdzRxOTllMnl3UUJkc2dVKzM4bnNGdDY4aVVkdWh6cEYwU0dNSVcvUGNkUDkyZC9kNzVsSXg1amR4Q2xYUEVwdkw2dlZUYnpQaDVleGpScGNIeHZ3MDdFamFQanRIQSt4ZVg2RmVpb25IUzNSUWN4NWd3SGcvVWFuUjRsTnJ4M2lheFNERi9ISTZzQ1hudStlSm5oc3lZK21CZmhpS2xvaG15U29POG40UVU2VFRSTXFxcW5mcmFDdWxqOWgzejQwaklRT2lHNm9Nb2lHN3Z4UHg0RlppbkRxWHpWbWlsaTc2OWNabVV5bHZXMTB6Qm5hSFpOYkdjQW5xVlkzK0wyOWRFcmFVOU0yVmFOUDJsUGJCUnQ2U2NLNHhLdmZZTmVOQzZWY1dlSHRpcjhyQi9FSytZV0lveWJZVDZZMTNKZmxKYTJCcUY3OGxoRjNoUWxlaFhjSXpvVkNieXZLSFkyUVpaUWwyditTTHdoZ2hJNThtL2dQNFhXNUhOay85NGVPZ21ncEtyQm9sbjFlRWg2Ym10R0FoTkFya09aTFdEWXZoTFdTWjArZjdsT3llZm5GMm01dVlQaEhtTkRWMFBKZ3BFOFRHTHB3L0FrUmZuSXhjd3V5WkN6ZEhseWY2aERaQWVRalZKSUdGTWpXenBKM1Y0R0dqQWZ2c3VzLzFoaE9BOE5VRkR0WFhjOTIzZlhiY2NaZHNMb2N4RDV0YW5Daml3cjlqREpIYmVmZEtJUUplc2JGZkxZNGJJYnk0Q0d1SWV3aVZQNzdtWkNoQ3ZMMy9LRU1LbUcvTXB2Yk5oVWRuRmdJVkZVMmRsSmRTdVZwMS91VzhnTFJ2aWJ2bGtZTHAvQmtLSjFQeDVpNVR3cjAxeDc1M3NMdTB1c2x5dnZ5eEJneVBocmd1N3NERW9uTHlZVjJtWk12TVFhQ0gyN25wYmo1ZU9jTW1WVmo0T2pnSmNFZ3JKMVN2NURQY0hrODdNZWFSRlNQZDdBejQ0SC8zZS9QT09Qbjk1bU9UVnZGd09kd2NOZStWUjZ5cmZLRkcyZ2ExV3VTSXYxcTZtdWs3aCtFb2p1dk41VVhzZEQzN3E4UXNxTG1rQ0hUNlduaUJNeUcvM28yTmZQVkkwTmh2ZVk3cFpKTnIrVnU3SGtvNHFKa2VEbmhVTDNhTnNTUTBpRVAxM1E4UHlUQnZ3VHJkbDQvSTVYSUY1cW5qRnVTeHBaNkZFc1BoMFJ5NFJFMVJxbE5GMS9IVTQxbWJkU1AzVnpyKzNhMzg2cmFOUzgzUFpGN3hObGdZMzBYNTlwZ1JVRVVhcEVYdlpaYkZqL1orYXcvQmJlNm9qaCtJNWhZU0VwQnVGM3BRclB4QXEraUFsQldEQm1mVUx6MG1VT0tSNHpPRm1QK3BKNzFicjB4anFyL0hKckVsNWE0Z2FKUE5MQVV0S0loU09rbk9GT2U4M0hHOE5oTmw5cXphVzZQSnVmYzcwanlXR25FSnRQeVBla3o2RG5zTHRtcnl1Tm1lK21ock5WZ2hBa0tvK1ZseHFDcUlTSnVBdDVrRGxmZUQwSGUyOVlIL1RiUGcvL2hNanVTODlNV01IVHFYZC9oZk1Ubkp5ZUhwcWh5TmU0VzBUQW43TjhUQVd1UnpWdUNzaGNjMlpZYXFZMXgxdkFHc1BHZDdYN3R0S3U3WmpLTnQ1a051YXdsT0kzVnFJN1VkTkhnczZqVzl1Z1U5VjhYN2dLYnBTN2NvTWMwaGZneXhGUHZpT0FSbVJrMzBrVUFCclZ0MWdhbXZWUFJzRUZUWWRBaGQva0dnQWl3RndzcjJma0hZNlUzRTg5aDdtT1M0c3c1eVRTSmF2eWRmQ0pnTGJjdlg1dDI0eEd0R2FzNnNLZkFaMjhpZUUxT25ZTXp3OU5CaVZOZjF2aGZ4b0NjWDRnOGgyTkRYMWhqREx4WnNRK29wazd2c2U2ZVNPbDhLalM1Vy9GbzBtNi9OMkcvZHBhQXRpUVBHTGFNcGlYZFVoZENQSmxXREk3aFptM2JYUW8zek1udnd0djlGNkViVTBvaXdudVQ1MFF3aFB5VWpGOXFnUzBUSU9hL2pRYWNZSFNzdWlETisvSFdXRmFaUGVHUTJvR2FpaHZSRnBOWU5WdU50OUxYeWhOWTBmMFFwaExXeDZXSzZWRUh2cytMRkRIYkk5ck9VQXBjM0ZEU3prSmVPVEgrZlA1bGlOM09zcTM1cU4vY0l0NVJ6UTJoVTNaNy9odHp6Q2hPM2RucU1wOVZDRGw4cmN6OTFhbXpJZVpkR3BDdUxKZ0UvVWZqTVp4NnBxSi9hL1dkM1BMRkpwd3RUUWFuV2VoUlJRUFoyZzhvNWVJN1U0VVFQeGFKY1ZOa3NvSDlHL09hcGRxOWwvTHNsQjJqQ0xWODU2bloxbVlNR2xBSmtVK2dac2RxWU1LbjRpdHBIWWlVb25JdUVIdWRRYitVY2xITDgzSXk0d3creVFSazFic0szSFVlK0h0NmJOOXZtQmhrWXRnTmVUYlJobE9kRHRNYmQ5bitodzFoVXdnNFFLbldjWXFmbWhCeGp0YnFSRmVvQUJMVnpwV2E0dkRzd3pEK1krMXVtQVVKN29vZ1VvU0x6WlAxdWhGYThnVkROUXJWYVZ4aHM3TTUzNGpzR2VkaEhkK3gwdzNqY3poWTd6NVVvRjZBVGgxZjl6NmxiSWd1c3VVWCt1ZXp5Mlh6N0VHR0tYM2szRzY2S3Y4MEJ4L0c2bUJxZXI5QVBjbFk0aU1ieFVJUVFjSXZrL0plc1libFJlMWFKTGhUZTF5OGZ5QXZBQ2VvYXowdlk1YjdQaEFuZ0ZGSHFRQ3F4MWNpbHJRM0FWTDAydUF0VG02QXdmZTl3UlM2VXVzTVpycjFBU0NudjBYMUc1b3B5WkYrVWpLTXVqcWNSZkptaFFpb0VVTzdZay9uVlFwNkdyZTduWDhOT0tTVlNJeE8ydmFJcHU3cXFHNlJ3TDJycXVxalU0czJUTGU1ZzByOTJIZENyaDlEeG5sUkNvdmJQc2lsOFRDN2xKQkpBcThYLzBLVkJFck5CSFVNMDZsRFFaaXJ4enVPb0hWMDVINDMvakNOR1lWd2srNGI5MTZqeFM2Zk9pemNGM1NYd1RrdUwzQisxSWE0a2ExM1NEQlcranBGeDl4UlFvYmt4NnM1aGhwSm5TZ2lPVnhKSEJtNHhTb2MyVjNtUHpIL1M0S3hUdzdxVENESE8zdm9COHBvOWFXSUp6VjQ5S0o1VlVwaG9sLzJMNEVZdlNxOU1EczlnZWVPQ2VBZThhbHJWbSsvOUFTT0ZOMFBwRmJBRkFaY3ZUOUl5eGRUSXRPMzNkME4yNVJ4VHJ0dWl5b1JjNWh4dnVHbXhBRCtQaE1sVXRBOXp0V1JDazVGTCs5Z1NQUy9MOWkwUHRHbUxCOXBaTEg1TGtWT3UwcFpObEtYZzhGNHB4dk5wU1lEQUMwNllBd1hvUDMzQ1g1aW5abC9oRWlEdVl3V3Q2Rk5EN2wyK0g2SUZmSHJta3VmZTRPdWZnZFI3a2lud1B0Yjlyd2NMREt6YTBMN2tDbFh5K0lzK0pBK29oNEQ2T2lnR2E4eWRxKy92MWZDb2hOUy91STFHMEhKN0V2aFdhVGw5Y2wzY3hwS1NLUS9NUWJ6cWJUN21SWmhpZlVhU0ZhT1BhOEFLaE1xUlFVMHgzTGZmVy9EV0hFUUJheENkV3RGSTNqYlBxRUtncTFsZGFuM0VKdUFTK2pMUWlVR2ppdTlXTElvMVo0ZlYzTHd3TzdjMlpnRW9YenlXcVNJZDI4ZXlsV1FLWG1pN1J0S1FzSEszbFhqOGppZ015VEExOFVvaG1aMStzd3Q0YU1uRS80S0Jyam5HSTZTdkFoTEw0WGFjT3cvcVBrSmFXS2xXZVdsREszRVlMS0ZaMVN5NkI3czVwcWJuNlpWK3h4ZU84VlgrV1UybjJOQldMeDg0R1FYTUVGbnJrOTlWRE5sb0paZFhLRC90Vm83Zko2SU11SExxNGgraVVTb09rc2ZuMjNZSkZybWZTbFNZbnFOaGI5MmNyYW5nMHY4N2p2R3ZWT2l1UWN3WlQ3TXBtU2N3TDdnVDRwdjZRLzJmMXFwMGRaSzFJNFNrNFVvM1VpVjh5R3VIZ1ZFS1JCRFZ2V3NQbVNUWnFRRFFCejYxaVlGU05TR0FvYnU3Uys3SWVJcWNaTWhMVkg4eldHL25LL3FDVFNlRU4ydU03YUVzbEpuUTQzMWJPVDRGdGc2ZXFUWExRSnNuMmJhcXAzYlc4SFlSMzhHVGJidW9ia0NQcUFWWU5OZ3R6Ymk1dDZLL3laM0dXcHd1cWpxTGNtbWE2NTNBbWJEMlM1dmhTSVZ1TlI2NFZzSXFrWEI2a3JmcVdRYW9GeFVIdkJzdytZUDJmb2RNZVl6Zmc0SEtOMVNaTFBMeEV1VWZNV2I4SmVqcXJxWjNIVkgzZVFLUFFaYTE2SXQ0V3hHVTNhSTc0VDErQmVTQlp2TFQxd2tDN2Z5eCs4RFVRVXArNFBEaEdjYU1lVExHMWNhbGJ3b3Mxd2JybmVSUUh0MEljc1BRL0tZL3IwRkJCYnBHbU9KaFM2cGVWTG44bmZDNDEyc0d4RTFtOVFHTmt6TDdRamZKbkc0NDNyZG9FYm9yRzZaNmc5dzVoNTRBVUhSemJGNmVLSWxvYmFDSzhORFJKMFZxbXVRc0I0eE9mM2pHaUtrZ0w0YUxNeE1lM0dnR1lQQi8wVDZWQmtuUlNDUThBaENzUlFBbG9PR25MNnRyOFR6UEVwemZhZ294aUYxZFB5NGpUVExpeU9WZ2NXUHNTNWIvK0Z4ZC9rVVkxWkxveGwzOERodUJyanhGRVBYZnFXUk5XQ1VvMm5kWlBRalBRYmRaMHZVZ1IzbFBFaWJERHdzb2NWaWU3a1lKcXVWbWl4UzQ2UzhHSFgvWkI0bWlYZGM4TGROdFliY3BDWm1mZkdtOEZjT2FheDd2RXY0cS84cEpIclNXVWgrK1NHV3hBMWF3TVhIYkNVL3dyY1p2Sll4d1QwZXAwMXJZR256R05iT3RHYjRhMjJYMGpmVk1jbmM0TGU1OXpENWFoWXVvdGRUWk5MQTFkMk9yRFpRUy9pWEpsY3J6cTRFT0FMcS9yQ2E0d0JHL2ZtK1FzMGxyVnAvbEVUWEVWenJjZmwxUUUwYWcxZVFQY25mYUd4c2pnb2hSUElqSDErc0c5c1YvQTkwN0tDMGw4NFg2bG9JNjF1WTNPekJxMDRwb2J6ZHV1TWtwUTlDVnEzb1J4aHdQR1h2UUgzV0tEU0NoNVZpajRrRTlpWFlleTRkSzlKZTVMTExaVUFrYUNEOERwWkJiWE8vY2hpZkMrK1JSZ2xPQ1NhMGIxUnJKNzNzbys2UDlMQmxmdzNnaW1pUitqNHhZaC9QeUZLNC91dzU0UndwMVAyaHpKMjB3MDlwNGVEV0wvV0c5UENYbHh6YjNWNGErUE11ZGVUNTEwRGRySWY0VmdXbGlzQTVlSDBhcmswbWpXWmZpU1l6NVpGVnNvNEFRUXEveTNmWFg4UjExQnhKcm8rK1FjSkJuQ05maWZSRW8xeWRlb01sdnI0SVJ5VjZIU045S3AxazJkamlwL1h1QU1zQkJNTXh6bWkxSHFrcGJYdU1TN2swMFpMNWdMb2ljemhZc1RjRCtOZmFFTTFka3FLNHBDa3ltRldCNEJEN2lVeXJRWURNam9mL2wvcFVhZG1FWVdKS1FMaG1pZlE3RnAvQkFlSzJtQWJVRHBYQzFMWUFIb016RWxCenFYZjR5czVna2QvQnNraHRSN3JST1FDQ3UzWFNXaU1qRGM0bWVZVGN6c0w5UEk5WlpLR3dVWTRVVTR6c2E4aVNrWDFHdXQwSVZvOFRGU3BZS2haTlNnQTVmT3MxY2VzV09UNjZRRzJWbGthOXY3R0d3T2hKaWlkcmdXZHM2a1NMZHpwSnlseFQvVkVMVTZRUUhVeEl1K01lN0RBVnVTQ3YweFhKV3ZHeUNCekI2ektzVHJYV0xwVWkvRzJjZGRDQUoraC9Gb08vZlYxT3ErYnI4ZnhUTEhrUHBPcVc4U3BzTmp5eEo5MzFNV3VpYkdhSmhJWVorWjcyQ1Vmd0l0ajJKdmxmWDJMT0tDR1pEYXY0b3VTQ1d0VWl2VE1ZeFR2ZWZhY0N1NzYrcjdPVmdIdi85YXh6eUlWRFNwSnpiVjlySkYzRmhUUU56a3lOQWpzamJSMGdXQ3pSNkNNN1czeUpWUHpiLzM4SmJQcEg3elVDMW9oNWJjRW0zdUptMkt1d251VmI3eGl4R1ZqeW1SY0drQ3htWk5LTElJaTMzZDlIRzllZDIwbFIxWHB2ZEd2cWN5RkRwME51TTBodG9vMHplRkx0ZnRkd0lpLzJmS3k1SnlwbW1FV1c1RUI1Slg1K3lOQXRMSHdkTWhOQ0FDSUlFNGoxSUlRRGJaMXp6VDdUNnUycWJOQ01SalRucnZpaWlmN0tCMDJuSFVLdUJFcWNsWHlIcXhqNDZYbkhIQ3hYaTRHWENaeEQ3MTFuM2JGaUJyMm1uQXVyVHovdFBsSUxvbVpTYWF6bEZTbmRrOWJ1aFRBOVRnZzR5TnF0YVpwdVVVWnBTV09iRE1HejZDRjNqY3dQdkY0TEUvN2I3MXpWU255bElLUVpkQXJEc3ZjenAxSFZrSW1IMGk2aTdJRk5PdENMTE5lTWdrbnFMTitJR2hmQnpzRmxEVHljTE5TSG83NEI0YlFwTXNUamxVRUI5UW5WRnJXYkJYYzNnZW9BOGRrK2RRajFISDRraFM2c28rd3FuSkUxT0I1WmhpWGoyRkphZXJTY3BmNG5oWERIcW8zSDVzVkQ0ZHp2OFcwV203TTRGeDNKaXNQU01URGs3eG1iMjlhQVBpdU9mc2xHUTBPdzlJZTlKTFcyWTR2clhoS3JuY1JBakZRNXhjd2pib3cweGpJVXJYVkFIRXFST1lEVGZGekZjL01DTktWK3hidnpQU0dtYmdQdEdSVmdtaVpjdlNiZXVRUUduWkV5RGltZWZLRWViMjhZZG5NMldKSVBGRytJQWpkYmJydjM3SUdPMjd4OUdvMFJVVlQyZTh0SXpSR1QxejBvdmlLWnJhNHhaRDRJSDArUWpXMVBkbCtrZkpUYVVhaUgxSmtnMFlQRVpsY0V1OStxOWx2R2hkK2VMK0xRam1RRVR4T0tpdGd4M2V2WWVtMGU2bk54ZkQrM3VvTEdRS1hEb2JCMUsrMlpGODluMVg3SWhjUkJsbXRCRDRObEFOZFVDOVVHNkM0SVZWa2dpbmVsMzMyYnFQSlV4cjJiRjljNTF0a2E2S2dCRVpPNWkxSkJ0Z2dTczRpZ1JJOE01WnpjbWRwbWt6ZnN4N0U5UWlWRnpud1F2S1M1UzM3QWpzK1FOc0hoaVgzdG1jdXhWYndESE9KRDdoT1NGdTA5Qk5HMUFTaEhrK2xacmhqRWJhS1JQNUZiOW5WZkE4UjFYbjJ3SzRaSUt5UGRaRnRvbmxxVTd3dlVIcWtlY2ZNK01TYlphRnVOT0FWRzJKK2xOanZuaGFLUG1jdHk3M09yWGFxTFR1WXM0a3VHeHJIeTBueDFtVVhEemNSd0N2T3JjLzlUdDJwOGloYzk1UTFyQzFmOE44cWNBVmo3RGVSam8xUXEzaHJ4Ulk2RFNXWm9ZYTZ4OWsyaTUyaU0wMVFZcFhTdUlYSEtYYWtOR3FhVkFYUmpvNjVuRC9DbWsyaExhUHZKSFc5dXZGM1RRbm92MzloYlIzbXVJVzF0bVcxU2hkS3l0blQzS0JaM3pySTJpWjZwNUlFbzhBeStpNFhQYjIwWE9HdU1QMnBKbWlhblVoLzMvSGFoQm1IdmZiVzlUb3h2cjhKNlVCUVhDZUoxaXVLVVppejZobzNmVDJ6VG5yNmE3S3BHNmFtcGJlQlJFSzBJKzl0OHR1SmwzV1VXWkJYbWdhc1U3ak5yS2ZuTXcrK1BEcmxDbXFGYWU0Rm1FS1ZtVCs2TjVMQUx0Rk1zMGIxWVFKMGMweUI0UDhIQkJLNlBGNFRTL1ZrSjgwZWF6NzgraDB6NFZQeHZGMksxeEdNcDR3WXRUdDY3MGtVdFVMcjMzam9LanB4V1V3cTN6K0ZjT3ZWWVNTdE01RUQvb3JuYTBSMDdJL21UbldsaDZQMHR0RkN2c2FWMjBKVWVNRDMzeHl0Y3QrdGJWaWpTWWZ5TUFBU29ZTzYzTTNZY1NPRHgxMmtxOWtpVjY3a053Z1l2dW9GZzgydUF0bUNNVFhCNDIxcDlOaDZGYjQvR0luaVh0R0hLc2ZyRlFDajlpdkpveEZERkdPejBRNk1hZjhBNTRqVlpwME1zSktNM0l4VUxCVHJIcGdtT2JLWnc1R3Q2U1Y0MlI5RUdTZFMrTzRlYTY5OFJFMFppYXN3R1JBV1I0d1IveldYc3c3UTFXUFgvRmg2MEVERHFtYlQ4VmVWQkhFQUdzNzZSUlQyNE42b09RcG0zaExkc29iNU4xTTBJa0lYRDZGbGhhREE5aUMrN1dORE9JQnBrL0tSRHBKeDR0Tjc4VVFrTW9lc1owczBuaTdKR1I4eWozY2poWDZreWllMEN4VWtLSUE5U2FLd3cxWUV6ODNvUG1zRk5ka29DQlRkK0VEc05jem02UmI5bi9FRXF1MTBYWGY3Z1NSNzZaemVEUlNWWHdzUERmOUtveDZVVjhFWEpMc3lZRTdCSWw0R3pZcmkzVnN4clU4UER2U3UyWHVWVGVUMXNCSHNpSmJzTjZwSEIyM0hvNFRLSnJOMkxRV21nMGFLeDdZdzc0VjZodHVEbTJ5WHJDWllUL24zcmRYU2xQalJrdW42b2hYM0l3Y3NIRHpIaStQdHdKaXZabzl6R0NaUktDZFdiMHRtaWt2WDZmZFhLMDB6WHlUazRVaGRlRkJ1YUxkU3pwbzUrMGN6WEZrVjZtV3l5UWhXOWdMbTVjUWs1RjdzZldHSVc3N3FvZ3VrMzFUZ3o2c29JbCtCSjVEMnhmNmwrYmtIWERUL3lLOGZPYmhMT1dPSHpyTHE2dXlCTXByMGZsYW5sRkxuRTZ5R3lyUGR5UVZLcjdRcmJZRE42US9YMFhZMFgzUEZQeHZrWHRxSnFIS05LT01nejZReUNoMHlDdk9NdHlpVDRXZUhhSG4vaHozNjJrM1I3dFlIaFZaeTlpTVoyMTVaOXdvTjQxNXYyOEJwVjZORVJteEpRVyswYmFRZXVXbmVybm5wbkJET3JETUpMYVVLY3dFbytPNFR0ckI0MmJxelNHdWNaQnU2OVhka1JPRFFZVnQrOERWNDJpMVA5WjZpMVR4R25xcWFmRlFzaWhKeHNRN0Frd3d1dDkwREtneDgrUDNoV0Y4NlYzYncxRFlaSk00M2xxNkZIbE5ldWNCbkFhR25jbHV3Smc0UVNpYmdNeFRlTGl4SElsNS9VaEFXdzZ0TEZPSWpKZjUzSTRrdXl4NmsrK2p5bDdmc3RTWm1MZWxySVJIZ243RmtpRjZ3YjdERnBNQVBlN2lxTzRzcis3elRsb1R0SzY0K0xqN21jMHpsZjlRZGJTZ0M0V1E2aDhtVnNmVXoyb3AzdmlQYmphZ0pSbVJDNCt6UGRZeEhwSUloWGdtdnpTR3RUU0JXbEZxdWZucTVXbklIdVpXTUY2aDlIWjZVbXRmMnhHT0xiVCtKOFBWSXhTbHNDVm9JVUhnZ1EvOExsdkgxY0d4SkZHc1FmaXV1Vit4VzM0U2xRcFloWXdmckhWdWdqMHdtQjFnSlVPVmdPb1FYNEQxNlBRWlpLc01CekNoR2JYWFlDTW9GeVNIU1loRzA2UzJaaU5IcTBSVFlBN1ZSU0U3aWtyYjQwdUFlNjRNNmlsL2Y0aWdXQXVnaHV6aGxuY2JPbHNvK29ER1Vub3lSOCtlNEtPZFlqY1c0VkV2VXR0S0h2TDhtWmdzWTFqZGdpNjZncmFzamE1aE51TEpDb2ZScHlXUDB5cTV2enlOY1lVTWNCeW85OVc2aWlHa3MxdUJWTWRlK0NHVVVabUNPVm4xdzhhMnBRcnBjWkJWNTEzNFVhVDhyazU0K040M2pQeEU0blpOT3dwRlc3NVZkUXZCcnFFZUd3amMxNTdsNmtXQkNQWTB1L3M4c1pDZWJJT0UzOUQzemFQUlV5SlFweXJNMGNZcUM1bC9EQWdQV3RiYmovbElxQVJoMXhiZXZWWlhjZ2JTNGsrVk1rUTJQN01RWUVpek9XTmFDYWpBanB6M1ZGUEJTUllBVzc1UVRlOE4vRzR3YmpwQjltcG5HZmpiTlNGdGxvbUxmQWp4RzQ4S1IzdlVpOVMvbXdiR3dyR1cxVE8zNkJHRk5rMW5DbHhMTk54b0V3bTBnR2tNeWdmeWkrU3hCV1NFZkVjb3ZKcm5yaWJ6d3QwcjNibERUWXVFdU9xaE5yZmZCdHhyMVhMSUVxcW1CaDVITy9WMlRWYlljUUU0TVpCNkRPUFlibm5ibWl5eEdMcFV3TGRYRE5JNHVUYVpubllUNXR4VHNDc1EyVVo0clYzNEY4RE9UUk9aRVFMeHM0MHlGMXczSUsyNlpoT29JNGtnVUJSc3pWQ2c2NTZRTXZ0T0lVdysxeU1wYWM0VmpCTFBxb0FnQXNiOUdrR1oyRDZhRUkxRWRBZ010TU05dkVDeXV6RHJnTlNFeUdBcS9wbEZXWFIxbGdGVkdFcGZRZkU5WWNIK0pWRTFwRnNjVFNBSE1LL0ZOSDFHZnhPbkJDZ21MNE5TSERaa3JFbWc0eG41MXB3TzZWSkUzWkNCb293MXJBZHliN0ZjdS9Dd3U1dkF6SnBEZXBWcUlacHloTjl0eXJ3cHNzL05UYjhaNkp2V0NJNmQ1UnZuMlBJV1dOMkFmb3BWTXJDeWRGbjZUUHdaZ2ZWUytQQzNRY2dYSTVWeUlRUEpEaE5QQVhsWWR5YzFIY28vTU1rT0R5ZTVacUdlbll3c091RDZoMVF1NWtvOU9LU1RKK3FOOEgvaE56S0NCVUc3RFFwMVdCWng1bkppTmU4bWdKZDNiblhYak5qcDEvenBKNTZVbFlvRXdSTzdENjU1S283OXdDYlVHWlBacWdZcU8xK2lkSEN3ZVgrNjVtVkYrNE5uRzc0NjVIQXcwcWFjZjU0dUJHa2tZcEpHRTI3WHhMVE8vcHBNVFU0ZnFvUUdUTVZLcFkxbGtucmhmREFTdUxNS2ppTjA1RTE0bVhvOCtlZHBVeDlPUUh5Ni9ycUxmK0Y5WGlRWEFHMjJ2cnBsM0k0b1M0UmQwckd2WGxuWmJTODltellMeUtITXZweGRpMFFpUm5aaHhOV0lPbUxDVk9sbU5jbGY3eEhnbmd5cVV6eXI0dCt6cmJEQ2NmS3Q5bWY5VVdVOE5pVHN4MTFtbG5OS0ZscWlIa3BIZEJnR3BTQ0RsZFdHVHNuTzBvWVNvZ1NteTIvOXNzVlorR0lUbDF1aHR3MGFvV1RHMHo4SkVSZ2JRRHU0WnNWNkRDTXBJb1k1YXJPUEMvdlRrVjlDUUxBUEhlVWNvYUdNcHF1dnU5NkRUZ2ZlYmFiN3RNbFN1WjFucXdCRy8xcGp4NkthSnVWUDAvbUVsRmt6eDdxQ3lTaEpGRVZHMUZvWm9nd0E4cmgvM1hkd0w1VXplS3VqYmRmNDJ4MFI2bzRSOUlZU3pnUjh1bk9xWWhiK1UzK2MyUG5xUG8rSVBVNDNwelZNOEgzOHZUaWxDVVpycUtBZ3NVMTR2ekp2ZWlKalBWREI1MHFub2ZnVjVCNUtuQXV5MjRhVW1UV0xqaVlibFVobHdvT0RvR1NTOUljTlcyYno1d21wQUF1K3ZWa0NSMFUxaHhuYjVRRHNSZTM5cVpaZVp0VjZRdEE0NVVUTk1nZE5hckRQajlLYjNkdEd4Um1kc1VzZlc4ZFJwdkRld1hnRkZnU052bUQ0RkU4S0lpMVFndnhSYUJMNVlRcHNtSXhTNXNadE91VE4yYkxsdWZ4ODFqQ0Q0SlhjNGpJVEozaDZYaEludnhQUy92bkM0NGlrdjVMVzVKKzd3T3l5bHVCZGwxQ013N1VVMG9sWXhnbUkzVEpwWUpidVA4dmxWdktmS2dZaGtIRVVxaDE4Zlp1N0thRHFxWTBuLzJCeTJjUTBtQ0cwV3BKaVFwYmozVkNHTlhZdUo0QVBMbHVJYXFmbTJLOGg3YkNDWE1FamhWV25yQmNaWXFVRUtYUXBYYmlsd0JZK01Ha1FnQVQyeTJWUjNtSVVtT2loVUxwckY0T2o0NFIxUEhLekxTcGdqL0w2aFV4bW1kYlJ6M3lyNDY0aXZhRjRBOTJKczZEWEhCZk9GR1JPbzZPcHlsVi82ajd5VVRmVWlBbjBCdXhHbTR2bnQycC9zYk5iTjBZQXl5YjMxTzFISFcyOWEzNWhVVWpCWSs0bEpwWnIwVk5PV0pLYkx2QnMySzJiSVZKVFMyL3JKdk83akhCbEQ0TFNmSWo5R25yaGxFbURqcFRGT2Zvdzk2WWV3aDYwc2FmOHdpeTBvY0hMYy92QWNSUzM4dWJqK08yN09tNzVBMmRRKy9uaU9JTkhjQmhaUG1ZSXAxdk0rQWx1U1RVc3RFWUNXcHRIZWdpTk1lQ0dJR1hERmdlZVViMXovcGFHYU8zWkdzMnlzL3RCL3FPNmxNM25zenNDOGFjRzB2N2NLbStGZDNiYkNhUVB4eVcxZFJEZHNKY0UxSldmbkM5OUxaRUNGYnhVbTg5ZmJaMCsvU09ObXhjSXRta2kyL0VJMjd1ZXU5S2l3cE5kR3pQZjZic2pzak9Fc2FjeE9BVUZCdjd5ZHMyN1JVYmJpeGdkQWI4L2FQZVhyK1lKWlEyaFNDUk0yVGkzcmw2a2VRVjFtUlM5WlhyakVpTHB4aWc2bDdvN0hlTlU2cEVDU0FKdDcyOVh6Zmx4ZlBBZ2Rlb0NoSzdvbW15eUdNUTRqZVVZRndzYmcvQkhaY2FLUEZGV29DZkp6eTRVZXV6TCszb2lJcUVXaFVkZ3RGM1JTS1pMVDI2K2RKVDBQMnp2RXhDbzQ3MU91bUhqWXdnV3lpUll3R3NmQ0ZxbE5WU1RIaHQ1NFEzNjUwYWFNb0l0d1NHWlpTOFJwRUVybmFiOXN1bnZlRFJreWdST2toMWIxdWt4ekdkY1Q4OFdVUTZ2NnRycmc2WXBmcFJZSHVNK2tlV3QzNnRMQXJadGdBZkpSNzFxVVpIWjVISTFENHBURktUdlhlNmlWb1Q4SFI0YVhhWE92bEN1YXAxQ3N1NkZrNXI2bm5iYkVaUXlXYUZoeEVISFF0QnJXUEhTcjZVQWE1SzUzM1FLa1hDMlNmbnNnZUUzM2V6Vmp2T28wM2daYkRMR2ZkeGxldUh2RlRwV0V3dWpDMHI1d1dpYlgzZUZWOHIxS0NMRG45eU5QRmU0ZWkvQVNNUjJ4TG5JbUkxSzhRRUcxR2RNc2RyZm9UU3plZFJlOGIxTWpSN1Vzc1BSQXFnTG5OS3VpcW5FUG5kVm9FTGwwaGVqVmtLUE9xYUlseEFleFZrOWMvU0huQTFtQTVXbnJxUFBvTFAzdng3QUprYlhyS3N1UmZCeW1tZ0NFZ0VsejgxRU9mRTViMnU3ek9Hdk5sakN6YytBWFJ4Q1Yzc0dTU0dpb0VTeEM1UExaazN0T2F5Z0ZJaUh4MkU5TnpVbVdtSlR6VWIwQ20wUkk1dW9hVzlOUWJhNTkwdWdoNTFQenBydmNoMGRXQ1lJcTBBT3Q0WHQ0ZkRJektmRkdzQUFxeEtyMUY4OEhuWWc4M0s2bEZ0WjBZaEdaR3lXNnRYdUluWmlOcTYycWV0SW9mdWU4Z0JSdXZQdnRDYkFrQWFpbkJ2VTZkaUtiTm9DeHNzTUcwWEJtNXgvdGpJd1RGWkNNayttcmZUc3NDbXk5emV3MHlicDhTNWFkalh4d3NDNzdOU1VHUHVoVjJ5VXJFRVlyZUYyMHJTVjFwVUNnVmE0Wkp0bE5MQm1BeEJvWVNBejh4UzJXaDRZZDUxVUFOWGQ0SEJOdjJ3Nk1ZTkFnMzlWSUJBRTNudzN3dTgrTStDOXR0YVBEUFgwT2lBSFg4cEhwbEpIY0g1ZzFFa3FTbUx4NStCM3BQanVpY1JBcGRiZHVZV0tVbnNjV1NWRVNNeHNpVmNVRlYvQTRiRXFkVituNnEzWUQ5anFLTkxFc0I2bHI4VCtWUU94UW9pbEUzRVN4ZWpVWkFQa296QlpxWFkyRWN3aEVVc2dTYjVpSzVQUEF3YjlPOC9HRm5xbGN2MnU4emFDN1J6SmhqeTJQcG94TGtFVURMNU1XSUtBaDRYeVpKb1gwT2kzd3RxQms0NVRiZWJvT2NlT1VHM3k4R1JoNGQ5TDZoSGdjWTZRWjV6ZWxDVlRmNnlOUEplYTBOT0xvY29yeENUcEtUNEJlcDVGUTlTS0Q1RG12NDZsNk5qelk2OW1XZTNBWm1NUm5iam9pajQwZkFXZkViNUFHakdqYnpzRm9iNFNWNm1rMGpOQ2FyWGd4M0dSQnY5cTZHR3V4emVrZ2twZUtIclJ2Q3hiNkNiRi9SRE4yM0luTFM3ZGRZQk1ZUHRjRjhkSGk2bHRkTWtnVHZUa1pNbStCUS9zVzVad0hhZUJLOXFjWGhjdXMwTk12RlVTZWhtcm1aK3JXSGkrTEFyVEtRM3JBTU44N2M3RzUvWmZVVmYwTFg1UnlmT1JmL0dFVnRLalVZbWZPRDY0U3ZSWTE1dDYyc1VCVi91UE90WUNHR0cxMk9ycjVwVkZTS3drak9SV3RXMndCRnVtL01HRlhwYkdmYjIzYUVIM1ZtRVNJL013ZDNheVR1WlhTc1lYc3JtalU3K2tPc29aL1AyT2hmZ0pHaDNQVVBnSXpYOVluYnVnSFNaeTYxMXh2MEVYclVUVG5nZkNnUkVpaWpHSHVNL291WHVHQ3B5RFdmUmdqWUJwM25URUludGdXU0M2RWsrUVJySlNBclJzWmJDNXh1QkZXWitlSjQxc1c2azN2ZWxCQTQ5U3ZidkI2VkprRWZldzJITTBRVGt0N3JsQzhpcWdZSnU0eGFVNWJxMWRCL0xXRDJmRVVnbUFSZS9JNzdoUXFrSU1qOU1YNzRiL1MzSDlwSS85aWVsWnRSTGlrOVZEbXdwYnFyZklJQ1pFNnl3NTZaOGN5Nk9GcXdHTGMrTkhlOXZudE41OWVpai9SclZEU29QSy9zaWpESjRpSENpbkJ3clNDU3RyNjlxblgvdmNRaVFkNU04S25wQWE3dkJGVDgwcHAwcW1DaEZDN01mWEh1RFdjSHpwdzByMW0vQmlwSnBOeHlRd20va2h4aWh4TFJsY281ay9yYjJ4NkZ0YlJQclJoYS9TYUk4ZUtrNFdRZEszMDUrNlpOQ2docFh3bjh4YzM2dEN2MWMxQzIzaU9FSzVHRGpUVUE5bHNlRTBTQk04QXpmUW1EeGhqNSs1aEpNWUtiQUEyRmNUQ3pQTEsxWWFZRUJ0aGU5Vmd1UFZtOTlyajVqN0VXejJncGhZMmRBWWFyKy9HYk5uRkRxTUh3eGxpRW4wTW9UUEZSTjVnUjdkQjNZOEZKTThveGhqcmV6dDFuc2lCSFpYV0NRK3RrOEFnSUNBZ0lDQWdPSjdSQURCOU5FaGFPeGVTQm5aR2t1cnJuMm1ROVR6UVhUaWNqWWlXQno0R3NHMEUxWmMzMi9XRjMyL1JmNmZPays3dUY3N1B1RFAyYThiOXYxY1g3UHRVZCszVWI5dWlmN05iblA4UHJLNzdmcGw5UG5WL3dmWnEzMmZhWi90MkgzN2ZxM3YyZmE4Nzl1dUg3YnEvWnFHNGYyL1VFL3M5L3pYenBQMi9ZTGZzK3dQL1QxTDM2dnBsZjAvcnFkK3JTTDlWdGZwNk5EYlhjZVh0SENUWlI3VWZnOXBMU3dXc3E4WVBLY2xnd0JRdHhSMHYvNUROY0RYalA5S1lLV2MrdVNKYWNNOTlCUDhObllkVENnSDU0U01DSTVJM0ZjSUtCemdVV3pWZXZMcVBHTzFEMWFseXo0VStGcElaVnFDLzIrQzY5QlBERGhCdFpvbVNrZnBXZXdyVFFZSmYwNlEwNStsQ0UzWWFUMTlLQnBadzB5cHN2SHBOL21HNW1PblRyTzBaM2J0SDRaQzB1R05rZVRLQTA1RHl0WTJSb1ZxVm9xYmZIcEU5b2RHYUJsWEw1dmNMeWlIUlpNNFNGZVRhN3hZcm1BVllhZkVVd2Vtc2JxbWx0bnN0Q0JyQ0gwZ3BvWGRjN3BHcjNtNFVkc2ZlNzJYeis2MS91dmZFVGxIVEVvR2JzY2J4TktPdmsvTUowV1ArSFZBNDdGM0JVL0tVWHo4eWJJSDh2MHYvM1c3a1NTaWRBdC94Wm1IU0ZXS1JRNWpwT2R4SmVIVDZzVVI4R1k0c3dZUzVENDEvTjZhaXM0aG9ITkxsN2VETHJFenMweHgwdGpaL3dmTHZkazBZR21BSXpQOFdMNlpFOXQvanRKeWxVVGROVksvbUFIdE5RN09xTEsxNXI1NXhPV1pFYWwrOXFJTzZaSDBRSHNQWXdBd2JwaHozUzBoTDU4L2E0TnZ6Wmk2OFBxdmNlNFFETWFtdmQwc2R2WFNXMVpZOUpMN3ZzaGkzWW1SWEdKais2dnNGMGRicWcrTXFsTEhPRmU4TXNzc0sxMkpqWkVIaytaalBUekFnWGY0UUs0cUY3T044T2xIRGw3eXpFVzdMc1BhRWVnYmZkM0NadEJnbHVQN053YXROQWs1eFM5NnJObFlRQzlYd1dkRmQ5K1hBdk9RUFVzQnBPanFTanpINDR6RjFUWkovdTdIL0Z3OHdiTWo1ZWdoN2dXckFoTWJPN0l2L1BDRjJYN3pnWjJxOVVsZldMMW81cTdJdVVHR2VrbHd6WTM5bDdqUXhmRUlSem9KcnVkaDhlVVpaaDR4TURZdmt5RnRlVUZjZkhibkNNZExSRFdOQVB4aXBqS0tqZ21TZWFmL1pOMFFDaXFoVFBKRSt4UVB1aDIwcmJzR2xJYWUrak9RY1p2dXlvc2wxajduRXNJVXhaQnRHZU9QM0pqb3k0NVFEWnFhRG8vK2VHeWt5MU1lZE1tUnNpZEkydE5xWHAwZVFpbU5aM1hpV2ZUSk9XTW9WRmJScWhSbTJwVUdKcUQ4UjJObElPTml6MExsdVBhWW5lTWc3S1VUVkFFVXdDV1psck5hcC9ZSlRlUUFsT2dtalpOTlFLSC9TckE0ODY1M1d1SURGbEpvVkZtZXRRSDFOMTBmM2pKSkR5VzN6d2hoNHUrSHNnd2thdDdRWm5EVGxMTFM1eHZYR0ZpcTlidys3c1ZDbkl0OGk3UThrUy9WWm1jRmRIem9WZFo0Qmw2S1pObUV5UGNNMlF0d2RLUDNESmpBUGhGZTNJODBjZTBtM2Q2aVBXbUQ0VEJjUDI1bk9VcEJOTHRuNmcyTndxM2tyd0RIRnc4KzU5SEE5Yk93cStrQm9UbjZORCtoYjE3NThidDBUbVZyMlhSYmppUFJTaHZnbG9RT3owMk1haSswYUl3VXZJOThvWHVIRGRpVlZCQ1g4OXp0ZjRabEduWUJMVUU4SlZHUmV3SXdNbVpjTGZTQlZPV1BzV0ZiQzZ6SGFBNUFHSXdrckpWclpGODJjT0NDYTluUjhvc0hUUU16NjdRcVVJMVZNVnJZZ1VoTHZUOWErWVVQR1ZEaWQrMjVpaU9SUS9CdUVpY2VGWUhzSTVqSEIxbzhnWDdGd0VZaXluRXZ2ZFZUcVVlbUIyQ3FjS1lIU3FPbUwvRzhjVU1mdHBmNTNJWk5tUUZuSld6aWdiK3doaThjTXFoSVVxWHZ1SHY0dEJkb1h4ZW9MbWpsUHVWMmdhdHBkdENTNkFIVSs4S1VlT2dKbXdaRlhoT1RsTzEyNzQ0WGpwZ0h0TnV4ZlNjNWtuUHJBb3NuVGY3ZFhXcTdTVDFtRXVkRXJ1TFdhQkN0aFZNV1g0c3RUOFRaVlNHMSswZ1lUaHp4VjY0WTBIMG9ibng0TkVtY3pxenJHSFpISUw0V0lIL1c4emlBdmxkaE91SHlHUHBVcG1VUFZndG9ZcDZUR0J6d0ZOQ2ZNLzY4L2tuR2xQZWNtcmpMcXpZNTlJNE5lVytpdXdPR1RQZ3l6cTBya0hHcktmeFFTQ1M5eUl1eld5dUhCM0E2dW85U3VvZXNqWTcwZlJabXNZZFBPVHk4RWJPUVJCRXRlTEJXZktJeHBGekFjaGs3QzJSb2NGbVRNTDVidHUxVmhoN0lsS0pka2FmTE00R2IzY1E2QnpCVkpaRW12dyt5bm1pZGkxV2RNaTdVS3RkZHFZTVJGalA2TGhrZUJPaDZtUWg1aS82dWFWYjBqWmIzRmRJSU53MEJIKzZhdHdrVDIvT1NybXRSREV3UVFmS1VoMjVzaEpEUFdCSVdxV0JiKzR0MG5Mb2FYRUN3VUFhL2xSelhyWUE4N1BQTWNYdy9paUVLUkszWW9DMUJvYkRENUZVTTQybUlTVGJCUnZqK1dTQ3ZaaldYNVpvTGRIMDB1TFQ1QkY0bFVEakRYZ3dMR2xTSnM2NFR0OXBQWnJpRS9YSDNuUUR5T2pWNjEyNmFDV1ZEQUR1dDh6UjVYR0VMMXVhRnNxUENnajk4c05hbFpkSWxFbGIrQnpwbit2YlNXWS9KdnFxbWIxZTljaWhOZFpmMDlqS3h3ZmVmSm1saEhJa25oYWd0ZTAyMjlrY0ltcXBoMFZMTFE1akNGR1JiTTNvT3RYR1ZSV21aQzBQamtJY1NESTJ4NHdJOTZ4SktwUHU3NHpDcEZmWFJsNzZTNjBoU0ZXWGF1NkJPNkxWTTcyODhEa0JWVFE0dzB0UWo0Y0ptcUYybnN0ZGpmeURJaGE4eENvOGdHWDBYTWVMT1d6Y01OUDQ0TmJKbkFIT3FYMWpOeGNhRG1UMnFiZ0Rrck1JQTFpNlJmN2JKMGFEVTgxempZeWdEOGVaQnlCaGhHcHBPS01oc3pHaURrRTdabFdyWHpFTGV2UTZTMHlCcTVaWEQ1SFNyWGI2OWQ5TkEvM3kvQlUvVWRsUWxxTzBoM256Qzc5d1UzNFJSWnR6NUhtTGhnM2ZiREdpMnVJQnlDMmdyTUtWeHFNaHRsS3NqdWhuM2g4WHQ2dlliei9lb1B5eFVNTzM4ancwOEVDS3JWVkN5S21lZklFdVQxbzlFMngvdjFBd2Vvb2lVKzZ4dHROeHozbHFaUHBrM1BmRnlEMVR3RCs1aFZycE9wWUFrK3NUbkU3bG9uMjJoNmo1bTFoK0tNNUsxNFhpMm1WaCtlMGdvWFpEeTBoV0ZPZnh2OTIrS09oZEF1b210L3VBNkJpR1daVFAwY2RjUE5WREhyQWFkVmNteTdlYlo1NWZLOUhCWFRZOWlDWWVodVI0SUhmSko5bTU3TTIzdkJxRVI0dGNxZUhCL1UvUUFUVUs1T3JmY29oM01LZ2R4aTlTVkJWMjd4b295RzFJMFQzN3pzUVlFVm9PRTZ5KzBlcEQ1QUNNNHhTblNDZlVRc3JWRiswaGN2Z05EYmRaSld3OVVXVkFrS01XOGtiT2xEYjU2Snkxam14eGF3OSs2Q2wzaWRHNjJtUnJsUmZ6NlozRlBYSkNyRlhqYy9iMHdvMXBQMitjbDVTWGpnWWxWOFRuUTVFTVNKelgzSFdhRnF0bmpBM3h0cU5CZnRtMXlSbStQWjVFbHFVZ1g2Nys0djI4ZXIzMGRrWjBsTkVxWHBwL2FjM0ZkQUNDZUVSMG9LdmhRSXdyQU11UTIyZ296MS9ORHFPQi9semxUSlRHSWN0TUNlR3hxNkloMTdMemZJZ25CNjRuWVBwbVltTUVpamFwSlFvcy8zK0VBL1J4NUREeG55clB0UXY2d2FRWkw3Q0hvQkFOanN2TkNraTRHd0tEZkNHclZNcDJBdmFqUFg1Qmp5M0dITHIyLzJCMkRCODJjMXczTXgrUU04akdlYi90WnJncjM1TklXZnBXbG9zSkFLOHN6VjVHb3JuRjdPWXJFTGVPeGJuL3FwejgraWVoOFhPNFRmcWMzdDVGczhaZ05oMjdUUCtLNVRQOGNFaksxVHBwS2E2Q091NCtCQ1NYVlJXd0dTVDliV2RlRG1CdGNyVjdlSFVwdnhWUXp1NzdUemVUajRMd2toOElJRDFoamE1Z0drUmhnb2NUTVE2MllsYW9KS0srN25xYVpubWIza1pVTjBMb1gvUXFmRTkyaWZBWUtRbzkvd1AzSHh3VFN6dWNxMTIzSSthSFpYZ280UlljdlVvcW5xOUVsMzRNdTh2M3FmejdlbXVxVkNqL1Z2dy9QSWY5QlFLNEtRaVd6WlUwbENKOTNLUXZvVEpHak43M0hFaXNkVTJvOXVJTFl4QlEva3pCdEM1TVJudUFrNkZwR1F0WllyTUtVWXJKZ3ljc0RrTVg3SlNhVFdvbmFaRE1CenRFWElueC9hSXZNaGVVZU5WOE5wdUl5ZkVjYmxvemZSTjRST0pCcmFLbk05WEljeWZVN1BGeXJiTTdwNXFnRHBtNUtyRG1XQS83NjNYK1Q5UDR4Qk9jQi9hTW1OdmdpM3ZxOFJwU0Z4c1hybXpUUEZQNjdId3dEd1FWRWF0Z3dwNVRRb0s4WkhuUEM3OVhhWW9nc0QzVzlraW1aOVdVcFBkTzhDV01zNDNpZ1ZZNk1rcTRGcmt3NXBsWmh0NFF0cjBoNlNoMll6eUVIemZqMFVZZEd0dkNxdndDOThsUVNnSkF1dGt4a0RVZ05MaTJ0dGhiaGxoUk1TazNyM2NCekZnNGFKV1Ztbm5lSmhVV1V0UmF0cWJCL0dQbnZiR2drS1JzNHpZL09Pd3ZNWitYME5nc05tckpPV2xlZ29neUYzM2NIUWNaZnpNb2VldHFWaTJBZ1VnUFlUeTZkMGFWYXE5a013V3NPd3hxeks4QWVPVjJWNGhOWWF2OGNIS3VPVW4rbUlrakpXekNjM1A5d3AzekFCbmF3WjhKK1Rob1FCV2dOU2tsK25UQ2pRVHdTcVlCL0svRzJLS0xhY05ZSlFVTXZhWkREUjJyM05oT1l6cktZYVkybEdVZi9PVjJidFdQbERMYnhORnlUYmE5Z0VCc1M0d3ZNdzh3cWxZK0ViM082VUFNbG0zR1ZjdUhjN3drMjgvd0lvdW1hR0JpWjcvR3hSOUJ4Z2ZjQnhjbXlKR3kyaXRralJMSnh6NHdOeURIczVQMUFpSWRFSHJ6ZWZ5Y1Nqc1QzVUxDS1N6M3M5d2RzT05hNlVvRmZtNHpYajZrdCtORmFoNU1ocXM0VGwxY09vNFhMdi93UFkxbUIva21XYThjODI4UVgrbFpEODNHcis0S2lZVWFiaE5KaE9UeHRnNXRwVllxdHQzQkZxeEF6Wkd1Qjh1REdzNTkya25ydjN0UG81RzNkTjJuS1hETTM5TllQcXMrVHQrUGNqM3N1aGU4anl3b3dVUDh0M0pLYUZpYjZnNUxaclg5UGx1ZGgzZUlYVlAzQzlIeVNGRjhTZmJOL25KSk1Hd0dCNnlFaUVkalJUd2E5MC9oUCs1TGtuRGYzRW1Tejh1ZUh0bXc3L2VpZW45VitCTllHZFNjZWlsVU1rVzRRaVZrNUc1TGhZd2xEVHpKZkdtWk16cFQvRXRUWXZiUU1KSTU5ZTMzSU5xcDhISUdZMkFrdWZFQUJHK2k4V3BvSVJmOGFYMG9FVTMrUWpYQjZCRVZEMHcvcWNySzkwMHQxQmxEbldGWFprU0pERXFDYjIrSFZRZGxoZkh5VUg4RTBXNVBGdnUxM1NQenFLSHY2R2d2S1ZLS1F6b0ZJVENLZUdFa1RzbkFIa3FKaEx2QUk5UHFVdXdkeS96eGw0L25TVTloY2YxM2k4OHkvK05rZXh0cVc5WmR0ZHBNbmZVQy9rNnhscUt5em81MC8rQzYyNXNqUXhyL2RBSS93YzFURzF6SkNHd25WMjBkNU9FVytyRkJiQlRndFROZWdGOXlCTUZwOFdGaFVCd0NLZ2Q3NHJDWUVuUndUTkYrY1dvWW5qdUpoQ0Q5U1d6Rlc5UngzRlhtU0dWUlNUQkdBSEZKZTAyd1JMQzRNL1hRUWlzWmFodjFxWWt2NHlUK3o3Q0hWSzJwNU96SnhsbnRQNnJmTkFqcDZtNHNGWkR3dzBXNTdGSUxLL3hucVIra0t1S1lPSXNWNktuSG5mNjdiUVFrSFR1THpCYzFOOUlIRXd0UXFBY1hGN3BOVGIzUTNXMk53YkZhVEttSmNmV1BvZlEvbHZ0VXYzbjM5cVdWbEtFZExyd1luc1pUdW4xT3pEUzFTciswRXFDTTZrTklndDlla0dOMWtEVEhQL1pBRjZYVmJqd2FRdzFTcnF5U0ExK1ppRExnYVRva0JuM0ovbnVKSXJFbjhSKzFVWjF3YXUzaGcybVBuWUV1cHd5Y1R2N2VqSVk4Y2ZVTmljaXh2cWpwUlNBVlR5RXNNZ0xRWHczb1JuOVIvZ1NHcENQTnMvR0ZBNlg5Zmw2Nk5PWHFtWEY1b0Rib3l1MTA3T1VMR3R2bCtyL205RC9TNytCOW13aVRLOEpVQ1V3WEttK2V5aTdpVUtKb3BMODFWMHRja09ocEQ2cjZxc1JoR3VRV2JzZzVKTFZ3WDZiU2xyUFlHcmRMN1ExS21mSEFYaXVuTjZZMkpUTSt2MERBMVJoaUw5Qm9jRVJoM0NnVEdZM2VWdmhmK0dONnN5emtkMDc2bGZEdTMyQld0dHpPVDkwRG9tTWVGR2JTUzJBNnV0K2t6dWdIc1VuSU5YSXdVZ095eFhjNHFKNEcwUnFWMWNjNlZ0ZXJTck15Z3gzTXBsT1FXbW5OUnduWG02TG1JRkZnZUVUVEhyNmE5NUpRWXREekdFdDVCVWxNdEx1bytNelNjcFhhUmNkWG0zTEVJRnJoeDlVTzd5SGtHUU1ZNXB0VUhDMU42WXJkRW54Z081Ykc4YWRXVnhsRDVYN0czaGNuKzBSWC9RRTZodW9YZ1BQaTFXT2xmcStvRnZtWjBwZ3QxM1lKb2FtNlF6ZXpyRTNmTk5yc3JyN0hHTUtSejlCRjg2ZHhkVEpDd1FUeVN4ZU83S0ZleDRLL2dzL2MwblEwNlp4di9SYjRkeGJZMXNQUUJqY2wrV29tZXdrSTFQSkFKYTl2YmhNV0QybUZ5dnRGUG5XZ2podUh5ZXBxcS9xNFZZV09hek0vQnl3amRQNEZUYW13UHR2VXpxT1AzOHNtVHF3NW1ubVovTUt4T25LMDhEQUJWd3lyRFNRUDM0bExEZmdmMjQvb0JOM3NnNjBEMVVBb0E2LzFIMytUOGlxOW4rUjRaQmNzVlhmcWJCai8xUW43bjdqdUVtSjF3UEQ4V0lZOVllUFRTdVNGL0dBZVhuM0dGa2V0Y2VOblBBdXE3L0h5dzlGZ2lvMndzS1hmRXRaRzRxSVh3bDFhNVBIVFhMZUkyendiNExMSlJuMU9mZjNiSXdFRU1XSkhFQmdnaVJLQTV6eDBTa3I1aElWU2h4L2doQmprVkMzbnpXcHNwZURpbVBHWE1OZWl2SGI4SkM3MlhLOUxRNDU4VUFCdGp2TTJmeHppUVp4SFZvLytFZ1JVM1g3RWlGazhMdS9Ud0JrTVo3em1Sb1N3ay9tV2dacGVueis0UlFRS2NoZ2V6QjdhbnN4QVZxaFJyS0VSQ3NFQm96aXEvOWpzRFlkY2VxcUxvMzNKczdBcUtMb0lJR2xXWWkyNThpcTI0VThCZjkrSGVlbGc1RDNSM1pwc09UaTBKZnlpcU53ZVljdGZTdEU0Yzk1emhkdGJNZ2VtcVdLOG94WVZHcU5QRW5aRHpFQmVSUU9WZzlGRjJJTWpZVjVLZWYzaGNDUFVnclY1L0Z0MnVWcVo0U3ZnazBsSWY5ZTdVcFA0QTg1K2NnQlByUHBKUEpWK3YwWHZ3SWhEejJEWmpnbG1xOGZWNkwzWXdpUjBRbXBiQlRMZVZjSVdEUEJzenNUa3kxcy81cW5tbnl2N3NhNzV4cVhOcE95dEtSc2hJY2g0RkpOeUx1S1h5b09lWlRMemdzZE0wc2pnUnVETyt3bmMrMWQ5U2JYc3lsZWZUcithOXkyTlFmdUR2Y003cmJDRXBSRnQ3UGVhYk1xRGxVcU44YVo2OGJ4dHJnaXdzaERIMWFOaUlXQ0VSbHpYVjNXNXpkeEdvWDVTNm15ZEpQNmRLMjE4TkZlc1lVc3lXVkNKMW8wY2pjNDFLM2V3dFFaQ080Q2Rxd1lBSFpnUmtvMFdha3ljNDhNUlY4N0Ivc2ptOU5HQ0h2UEVHUTBRUDJGMXRoY2JrOS9raFNmdEljQzZoNnErTEVyai9hanYvSW5kblpoMm5EbzY4bTcvbkUrSW54Ky9VVWxMY1ptQkFBYjk0SjJvNmhQa1B6NXZmT2RObm5jM3RoSDhnMVFOUE4xZlJXb2E5cWs3RmdjMEEwcEM5ZEJZQjBuNzFZUkw4b2pUL0NUODNXWStwc1c3RVZmQUNyRVlHOVhqWnpJdS8rRXRFQlI0L1llZHpXT0FpNXcrMDJaS0Vhd042WURwM0RFRWlYNTluVWFONllTNEcwbEpVYW8rOEw3N0xYbHdtaGw0Q2oxREkxWFlzWDJyRGlXdjR1a1JZZnA5SXZ4QUdZbzBOMFRqUWNwZW5NeTZMaFdKaUJqSE5hdE5kVmxJUFQxVmFIb2hBQjRPQnRiVk95VHJreG1JdVpMdW1XUkdhQ29YYTFSOThlNkJLNzk1cld4QWFJQ3Iyb2hYdlVLVVJCWUJYL0dISjFFZS9wMEYxeXc1RTJqaWVCd3crL3hRTDBZMTdpUXBtK285QWNXMGlKRFQ5ZkxVRzVZUTltYnJlZU1vcFQ2ZzRUS1UvbEtpWE00M3J3aTRoL1hzblFJcmE2WWNaRTBaczA4WDBTaUx4YmhjNGs3NGhJOFk2MnJwNE4yODFrdCtneXAzMzRhL3RyS2hCQ1BmSTljUGViNDVRVWtDZDJyWEY3WVhQcE5UdkFvMVY2bjI4MXRPVjhkVVdmL0tSekZuN1Y5YzhISzh0Umk5YkJxSVhzZEJNUFloQmhnZk01TDJpWXM4YzFEK25PaFA2d3ljcWNwZGE5T1Q5U0NKVFhmOXEwZEVENWtwdkhKdHQxU3dxYVlUS3Y4MHdCeWxYVm4velFzQzNlZGJlcWxCVWFGZVV4aEpVbFhRbzUvTTNYUFdYdUYyenVORlZyWUhiOVcwUzBDR0YyM1h6QmRGYnNIb0pLWUNkNzE5ZVQrRWVKSERIUi9SQm1NRDBRZmphTkU3VlMvMnYzUXFNTWRrMnJyWVIyN3dWcmlJcnVpbXZHSzl4NjliVmE0T1dsR3o5aWlWMjNUQWsxd3lDZy9UT0d3RWFXcWM5T3F5OTVrUmFlM1M2ZkQ1S2R0b1VIYXp4UUtkTGI5WjErMldLRDhTNGR6Z1NiaytIR0d6ME5YNHFRUmJmTzNCcVVXdjVBTVpDVU5icVVkWk5pRFN5NzdNWUdaakJWWlZnNjQzNlN1dUpCVFk4anMzQ2ZlNDlUWkg1RWRORXhMUm1ST0pwU0liUCtJelJuckR0RWtoelJBMS82bk1IMnoyS0VQN3FUS1VibXAyRWZRSE5MbTNkeEhUK1JMTitLeDV6Qk5XckdpclJkclBtKzJUTEUxK0J2MU91bWcyc2ZwRzBpZ01oKzVmdjh1RG9pQ2U3eVZoRGRJOFVaVFhqVExZQ0RLcGRURjV1RlhIU25FTUl1aGREQk5ISjJueVpsMCtVdldtUi9YY2RZNC9oQ2JEbGtOMzhXd2IzZTVyTTBTN2s4NXh4a1c2WWNsa3UxUmQwdjVoanprUEdSbmt6WlZlbTRPM1Y0Um4yMVB3bW1VUUw1eVVQUSt6bnJLZlJieFBCb2pqbFlBRENsN2xxVEpqQlAvVWdaT2ZBZ3lHaU5wS05QOWxBWlVjckN2UE1rUGNhUXIxcHFCQlp0WXNreVZQNis2T3N3VjNtZDZjcDNOaFZuU0hFVldJc2tsRUVpeU1PWWcxcGp4NjE5ZGtlT1VZTHBoL003VUlvWEk3SVNYelFyRmRuTkVybWVyM2tDWU5OTUtFOUlMQk5yU1dkRXUyaEYvRHpFQWdveDJXSFE5MXkrSHMwbDFURU54bFNpVk9BTmZJRjdZWjcwRGVLOGtrNDZudElnc2RQK0JSMDdscUcveXFuLzJKdmpLNURhUm8rZk9nb3hjQmlxOWVmZ05DdXVnRGRubjJIR0k1NG9Gd1o1Q2NYN0h5SURncVdZQWNrL2dhRGNhVFZrNzhjU2k1dnRuaXlRc3NjcThFUVowZ3VIS1NLOFJQZFBTcjNuM3hHWXI5WDVYWjhwZkpkVFhOYlI3TFU3WThjYWRKMmVwSlFkRXZScStZc0d6ZmNnTVQrV0V3d2o5Mm1TY2tzbkY5MGE0UEUwZm5CT0puTHdYVWtvd1JIVHlESDA0UlpwVGxQcjhPenVLQk1UT0hldHNtdkJ2OVR5dmszelZITjlBZ0N5bHBaVmd3RW9lMmJEVzFxNk9DYU92T3lnSHVKU29uVTNxZmZidkxyK2V0SGlkMnNZOUZuVjFJUEJqTTRPSVYrNDNRdmk1TXY1d3dTL2VuNU4wQm5SNmlydG1tRm9zMXEvZ0x5TnB6T3ExT2JtOThGOUhGTXNkTjRQOW9ZTERhcE5YVkhWY1hwL3pWMXdSbGJSL1cxR3MwWWZOeTk2eUVzZnFLcFMyZ0tPN2Z2UVFoN24zUkRIQUx2Ukg3akJWeWQzbjJjMFRtbkZQeUtMSVRDc2JJVFZUT3FjM1FRTVl5cXVIYUpFUTBYanczTG45YWpjeGVSbk0wZUNvRGZFbGVxbFNIcGJnM1dDR1MvRUJNNGhOQ1lNVXFHVmJob2FiSVY4dGI2OUNwUVk4SUEyVHBKUzdlanRUZUZlSGRiZzJtZVF0bVBIb2FjT3k2VUxGbkp5T0cyR1c1VFQzL3V5NnpFVmJRbExMRmhSS3VtVWV5TDVVZXQwZXFTeTFnQTdDS2ZmVG8yNXJ6Mm1iQ2lyNzhHa3pTTERudkVIZTlaWTFhY3hWQjBHdWZpc3RVaXJRK1pEL2JJdFpLakw3Uit1OVJiMzNGQmlWTmpLR1B0ZlRsYnlacE1iUnB4Vmo2M0hIZnhVN1V2WTFGTjBQNFZOckVRWXZhVkhjUU9rZnpONmYwQy9rdjJabHh5NElJQjdIM3YzRkJVNlBBTGI5Wmh5Q1MxUVVaOHNzcUdlTFdzQWp6WVkxTHk4Wjd1dVJFUDNpcEk3M2JDdm5oS1ozNjVhQVFKaXJ2THBGRUhydUZYbkswQW02Z053ZUxmUWRaMFBmRFArNnJRUVQvSDJrc2RLMHQvcDR5TXVhd1FnZzM1bjNNRVBqWjlYaERJSlFER2dyb2lhb1IxY0svb3gvTm5OSk5WZmR4OG9Wc09uZ1VVMEUvWGlPZ1M3dGsyWnR2VVkyN1FDQkNUQVBkdS9JKzN1NTZIbVdZdFdINnhlMDdFK0YzS013ZVNJREVpM3hxcTByV1FqZkZQMkdVOTliNXk1eU5KWGpXMTNqbncwRURvY1NEQU5sT0RucnRad3oxL2pCVHBSN3NoRHU5VGVFcVhNSFR1bzRPQ3VIM2hPVkdmaE5Uc0UxUGVFQjcwVUwwZTJUUTNlN1RzdnpNZjUvRm11Q2VMdWo3aEJCS3FobXdnWklXV3c0aUpHTkVUem9IanJtL2xpWHJ6N3ozQ1NELzRZb3p3dFM3YjBjR1Y3em5SZjhDSGh2dDVQcGRsU3JIS2huMlJ5aTc4YTcrY1c2c1dlTUZFNDJzdDBkcW1teU5JVVAwQzdvRVNjWVNXelJoelcrbVpBWExmNmF2NERlYVdudkNkRVdHdkpPeGNITVMxcXdjdHFaVm82emxibDNYZWVyM01xRjMxTXlmSlFtV05IaGtVWmlZMU5kWDc5ZGlYWFoyMnArOU1CSFFFM09GT3JveGNMR1AxaTN2bEt6MGJLYmovZm5NTWkrMk5LYXJFaEkzQURQM0sxSUdNS3FuZHRCalVKT3dCWm1jK0dhU1g0YVV2ZWdDbE1VWElUV0JtT3hvUEFUMmhHTFVIbzRKWFBTZitJMm1LME5FbXhSUXhZdGJ4SXF1V0tnZ0FvVmVGcG9zbEFvMmxuNnZGSEliaDVOYi9SNmpRTVZXN1hTQ3VtSDNsU3BkcTh2ZXpVS0VTRHN4NE4xNFp0emxXSkY0aVRQeUxBZGw1RkpLT2o2Z3U0K24vZWxQQTdidXZPcU92anB3Wi8yd3VLNTFPVkk3RDliSTJvRCsxbUNycEhua3plUHV4NU5NT1RBNkxIY0FZM0F3MUdWbmJ2eWRoZUFaN3FuSjdSQm1pT1BIR2FKcGpPSlF6ajY2TEM2Mlc5a0ZSaWk0VnErN3BYYmpGSnZkUyswVjc5UGlGaTN3b1AyNTcwS2owL21tRVhQdVRxZzNVZUR3RWtiTVFJb21hYk9yT1FCVURnNHhBK0I4cjdtNzlUL2pPZG92ME53SDR6dy9iUE5PQlBESmpoWldFNHllb25xODdaVDgvaVA0N0NYVHVIUnQwWFY3Ym9QTlJ2ayt3NU45NG1aRXIvYlZEVVVpVy9yRDdGQ0xDYytnL3dzN016TEhuejhkS1I1M25pMEJOUWNGOCt3aWMySUlUY3VmZnJ0NnIvZTBSUFdXZm9RVkxjS1FZUU1VZ0taMHdMNmE3dlpVNHQ5TWNTU1BOc1h0RmpqYXl4c2I0a1NJNm5TM3A0Q1JHZzdVQnk0N3YxQml6NkI2TEh1UnhwdkNHVytpS2NiRGJ0dFowK29QdUpUZnFzR0lyRWRLdUR1aVZPOHNpYS9HZ1VCcGZsb2V0bW42b0F4dHdsQ09wZExUSG8veWM2WnE3dFJmT2RYcFlDbTdXU1p4MG8xU3ZvMlorSCt1TGFuWE9TUmIzbXJOckVoaUhJSWVPZ2pJdzdLL0lDUktwUHhYc2hFenBjWTd5b3Zaa2FVNW5FbEtSR1ViTEtOSUQ4Vk5jODdCLzJBemNxVE9uaHpXQ01HMXhWT0FyZEo3bGtKMkY4MVpWdzFidWlYcHY4TGdGUWxHVGZtTTJ2Q3Mrem1PRmhUbVNCMkVKNk1lZUU3Y1pjSjQrZ20vUkFtejB3QmZwL1UwTVFhdmZxZGNJSFQ0ZTJOMUd3MEFMa0lmaFlKSVA1YzlFeE5oL1pOYmtSR2hPTmFwdkJyOER2dGp3bHJNVmJ4V1JiNm5veHNrQU5WSkNvVlo5YmQzTjJsWkxXb05LZDhySU10NlB4K0phNllZOUVNeVloa245QnpVcHJvSzkyeHBnOTlzVXhoY2RuSnZzL2JYcEdacW50VTdkV0U4VElEUlZ2dWdOZi9MbUptUUxPTFFmTXZFYjFYcVBHWWR4N2NqcDBHRU0yWmlqSFVyTUdHdDlPOUVZb2pPYkE0UTVidkFoYnUwSS94Sk9LeVBJK3d4SkFqd3UyV2w3c0FCYXBBYVFZaW9yWEdYRjhORndWL2dpOUg5Tmx0aW9teFhJQTNpTkJsMmJZNDN2eG5MZDhmZHY4K0FCbXgyUWt2SEdPOVNZS3BhL3dUSUtrNVJ2dUptMXlzM3lzVThGUFZaZklLY3hIUzhwTDIwQ3RrVTUvcmlEMmYxT254QUQwczZiL2s0MHZibTdScm1ZRjRxb3gxdEpESURtMHFNbVoxREVUaEFRSUdiR3Z3YlhpdWo3aHo1TEpHMW1sUWlCajB3NXViZmlzUXFJK04rY2pZN09iQXJQSk9PU1Q5WVlRN28yS1JPMlFTZXZxWjVEbS9zQTY0V1RyRFQvVkNpVVREZDlpbU5sUnNRSG1aRlpOTTJmUnJOb1REenpzekpJWldtVGlhNFp6OVpKVWJwbitYZXpPL3ZKaXBsdjJRWEw0bWU3MGIySFNqSmRiZkZDWHNMUkc5elZkWVlWYmQ5RVhDd3h5ZW1RZjRQZUxoOHJJZzljK0dZU2F5dm9VenJEYk1TL0ZmaDdQZTNvNDlDd3lNUWJ2UlhrL3ZmRndqbVV5L3BUOE9YZVZwNVk5VTNjSzYwbm9WWmhPWVV5NlFZaE43UlBxRDVmWFFpUitlMmNKeE5PaGVEL2ZPTEFZZ0dmcUNLbXpvUlF3YTFqdXFteHJCL2RoQ0Z5c1Jhem1HM3N2dmp3aGJGMGZVVFloc1UxS2FLK3hwb2Z1YzFhSU1ndGNDUlVqQmMwYU1sR3V3Z2dGd2xtUXB0a1RLY3FxS3pHU0ZkUnhtNzJ0NzNRNmpUdmZTUmo5Y01yUHFyTEhYTHFKMGdpMGsyYVVPeVYxMlpOcU9LN2FFZ0ZyUllTVS9KQmpVYmFIY2pjNDJJR2ovZmlOYUprck83ckFNZ3lvekZDdlUzVVoyU0twL3dSZHVCWEt4eWZRdFAwcHNUWDJiMnQwY0lNbmEzNjJqSVBlOEJ2TXo4ZGFiU25wOFFGakpxTUhJaEFlSjJ2M24xaXovNlk3SHI4a1ZNamJNMHNUVmxsRFdiRmZSRUNZTkVRVldlTUZYUVlKU3YvVEFFUkkzeElNY3MwN0M5T2E4TnVqK1ZxQ1NoQk5ZWWhGcUtPQ0FFTGZZb1pYd3Z6OWUvaGI1VVRLS212a3RSK0lncHdjd1BXT0o0Y1FKVW9zeTEweUUvSmVIaFYrUHF5YS9RMEtoRmpMS3poVm10bEIyYWg4eEVLdStjc1Y2N2RyVHVSUWJzSU1pZEdhT0owbG9mdHMva01GbkVCNkhKeWcxV3VFOGVzTUZsckZNa3g3UEtLdzRyakpwTkIxTG1ZOUtWWnk4STNkK0o0NWQrNWVhZVRFTmVJTE1peVdibEdvL0FJWGt3QTVwRGtsQ3B2R0JBWWttNWpMdmF5UFhGU0plZVZTVFY5N2tGNHZDMDJCcGZwanRCM0cyY1Q4SjBKQVlCTW9uV3RBekFvWTZKNXU1anZWaENpcVhGQzJLdzE2cmdLZTQyZ1VJMG8vdURFN0UrNU0vZ0psQ0FtY2cxa003ZUJ2emRxVWFTdVE5d1hpZlJaYVA3cEVPRlBmSi9UdGNXVHdLVGZOdWUrWXFsVWFYSjBkWllaVjJUdXpKaDZueTFrMFNGb2oyUG0yaU9mZ1dnTWEwUkNjK25wd0tmeU9jL0tPaU9MaEFUM1ZzbksrdWNqaW42bDVWOWE3L2c2WXpEdmphWW55ZmV1VFFkbUtsK1BUSE93eVhpQm9vbzZGamF4OGVQV1lHaWEwbmV0SXNIYnB1ZHVpSHJDRTQwMDkzeG03dFFXc2NFcUVWL2dxWHQvZDVFMm9Cay9TVzhVdTJKbi8wNjdTLzVoWG5RM1pZaituaExtZjcyN1N0MHZKdjduak1nV1dxQU5ZL29ZQUo0VGdJak41TDgrVnZaS1kyYkhwYzlpMW90ZUYzK1B0UU5aMmdCU3FkVEVwMHZqYnlJVFZ5QnRFM0ZpYjVoWUlHOWpjVjJmNkprRDc2d0I3ZldyREtiZWM0MlBRelIvRU5RQjFoVmZuRFIvSlBBdUlWam4rNS9yV1h5TTFoL1JDOThaWXhFWWU2YjY5R3lCK0JsMXJSUExmNitxYzFHdy9hZnE2blc2ZCtmN2NTdFYvWVZQclNEN1JHemdKY1lFQk9EQkZ1REcwd1VrS0pnTmpLRzQ0WXZ5dnRLOVk3aUNkMzU3QzZLYlJFTzE1a1NuOHdsTHc2RmwxRnVhRUtJRzZMa3V2K0plVEtsaTdPMm43L1FxYXc0VHVSeDJDWjM2WElLaEJFYlo5YmxQVlYvTHkvS2hWWEE1MElub3FJaHQ4a1RNQmtKa2JjZkRveE5PODJoRzNJRXVXRjh2OVdNaCtBOHlMUnlRelVCZ096bndicU80M0hVT29GRFFXUmZiSFZiemhKUkpLbUttd0RpaDJBMmxoSmFIUlE1MHh2bUtqY0FrTjZGTkp0RUVZRG9HVEhTbzhhMklBTjQrQ2lrRXhNOXVITWpWNEVPMVowREl2L0pDcGpJbW1tbHlvRnhZMTZUb3JpL2hUZ3puN0FiSG14Z3Zud01jSkxrOWhjNUhjME1IZVpUNlhBbFVQZEtvYlRxSE5UTFdVVjdYRHgzR3dxOHo2TU5zRG9SakE3dzlKRk9reUhRMkFEbHNCUkRhSkRqUjF3UGk3aUdqK1lCUyttVncyeFZ3SU5jaWMzVnVQdk41eTF4RnRtemVlV2RPRGF6K0t1Z2hYbVZROEhHemw4QXNNZWVDc0FqTGtDcFFGL2pTS3hheG1OYXZDOUoxNVViQjRFWlBhRkNlbVJQWEZFMTI1eTl3MVc1TmMzKzZoSzhnTjl5aEhHOWRDWHEzRzVSQUpPVXVVVE1mZUJiTmgzWGd0TWFadnhBenl5WGFZYnU4aXRWcWpwTGFJMVhyaUNGYWJJZ0h2M3B5S3c0MU5abFhkN1pxNjNCUWNHMUNNb25pODJ1UjJwTzFINGV1UG12L0xRak1NMUk0d2ZpVHN5MjhaOTQ4aXFmSFMxejEwSTFWRWNod0t4K3pxTzdBQ0w3OXE5SHFmMGdpd0ZnRzA5ejlIRHhUY0M2SnhPUmlzcDU3ZTVkSFU4cklrSlBWMXNucm9sWXByalFuQmZ1bEFOc3paU1N3QUxra0haOFowUUZhQzRNbCtmMDEzM3NqbXZqeStQMTRyYmFwU21JZTl4S2cxcHdKWmZqcW9ETVVuTVVxK2lORkQ3N0NzMWgxOW5MS2FhTEZIMHFWWXFlalVoRDJVcUxnTHVVOXRnVkRhb201eFI2RFpGTmpTaTNNWmpnZTNuZlJFYW1EZXBUaE1ZYit0V3VodFpteEV4R1BNdVpJclJDYnhxS3F1SlhnNlUzZVFiZmFLeVJHOE1jdHNVdHl2RWxYVm4yNUZFNy9ZRnFyaWFoQzF1SGVwTkhablZMenJpaWxyWmlhQWhhQm54M0NLNXZCWWRnVUtGY0FJdnhoUVlhOEZhMjI0TE00aWxXNnh5V3hmcHd4dmM5ZUxwRlN4VStlOTVaTmVhOWZIOUhUUUU0NHMwbFpsR3diTHdnSjlpSDlsdllDMWtscDRDeE15dFJTbExjOVpJdng3ZDZVK3RvQWt1T1ZXYnhObFlUS1hqbDM3UnhsczRobUxJYzUrdEZKQWQwZFVtVjMxakRnZHUyNmlHR0pxYzBhb2dBTUtkTGNEY3lyR2loTXI4MVFZYkgyQXFjaFpBZnBKOG5jL2tjVkxEaEZpaVpOS045S3BBdlZhcDVBQWJEWTVabnYwS1A5WC8wUlJJcW8wOEhmR1dHNDZjUEI2VlN2RUZvdUQzdi9ZUEF3eEI1SDl5Mk5XeCtLZ1ZMS25xM2oydlhBUkRmbHc4RDBBQVA4YVhRM1dZK1B1VnE0blhXYnBkSGVCWnR1S1l4VGtUaWRwOG5GL0IwaDQ2MmpxZHlJczJndHhEbkdhTUg1T1IvYUhaNW9CbTV2RUxjbUg2YUw2RFBhTk1wMXBHQU84em85N3loamZKVGpzU0RPVzdXaXpsSVZDVG9xMlhIQVhpalBnVzBxNThoRkZFUEFVUDNJNy9KejcwM3dZR0ZVU3VzS2VRWnh5TVJOYkc0Y2dDSnBYeWJ2aEtPTHRkcWZtbjQxK0kxa2dUUGt3SjVJRStoKy8xeTJRdFdLdnVua1FmdnpDMy82MU9WeGwxN3N5WVkxRmVCNUZpRDhRREdmWmpEWloya1psWlgvZmVIN2kwL08wNHNmeFVFNDZjRlBrZUwvSU5GV1JiOXlDVlRzOWhWSExiK2k2a0M3ZWxLc3FtaThBOTRrYnQwK3hIVjZxc2k2RzNwL0pJTGl1ZTA4UVBwRVU3dHE4OHNuSVNxZ2tRKzlzY2V6c1VzOHkrd0JScUN4aVZSRHFnd3RsVmlTbFVmcE8zKzZoTDF6ckhlMGgxaUhRZmhnaVlDNE5XNWdWb1NGYURGV0lpS25aMWlxK0s0VHM0Y1pPcnlDMWhMZmMvcGl4d24rc0tkeXpaTFEzWCtjWDN4MmhFdFlBdHZncXhneksvbzdUSVBLSW1rNlA2eHVvRUsvYk50VVQ2ZTdSOXFEOUJWenNQQzhtNlhKSkZOcmkwSnhOVm9vQ2ZjMXRPQmhvVnA5YmRHMzljdGpmYkpQRVNLT200UWlUWmFrYXlzQkFqZ3ExbHBKM1Q3bVJJYnd3bnBuWXhsRVZYdFdTQ3ZqenZmYmRYcXd0SVUxc1FzdG9NaHVFQ0pHRUtKYlN2OUZBZDVqRjV2Y2ZGTHZMd05icnp0WnBqNEEwRE9EUC9NWno4UXgzU0ZSUDk0Z3lSOFV5SU43ZFdYVFV2dEw3b05wNG1hZDdWbFcyZlRJRkpkRkxPM2YrMXR3aDJ6emtxYWlZSGY0UFp5SVdrUFh6UVJIYlptZ09RcXpxa01ReGM4WE5KeVNic2ZDdzhFNzNXMUtvVndPbW1SbGdTTnJlc2VkU3NwMmRHOG80UnphcC9QTHdmRThteDd5azV6YVl2N2k4c2pRWlBFdVB1SWU1NFpxRXdlS2tWNE16dXRGcS93NFlzc256U2gvQjNPL1JOMWlGcWFPc01KMFVYRDFjSjBaYm8rdWFHVXVRcWY0SnhTZTVQdjdzelRvdWFNUlhsR2JoYnR6YWp4ekg2dWJiR2JpbXlZanRJVk5BZzNxNlJ4TS9BQjEvNEpoamt1d2ZPM0xEeW0zZWMxeklCRWlYTTM0bTc3Vm1EYjg1bDRWTkgzdUJ2T1R3MXZFZGRBVjVjelhxOHEzMHh4Qk1DKzdPNnIxWjZPZGtYUVZEWk1JY052Uk5ucENLN01MWHJBQzMwTlpKU0N6V21qaXgza2lEMVcwa2hyTERGd3dwVnNzWmdzZ1dKc1lBYXFOY25MNE16WWUvc1lCczk1NG82ZmlUTmZmTmp4dll4aThVRHBRY1BLd2RQTi8zSFVTZ2J3cXhhajhTMjhsUk5lS0hORGl3c0hqUmFHQ3htai9mSm04RVlhS09Oc3grY3lSbVJIUmhuWE9YT0lJOXRSa3FLRTdTUHAxU3lqY0R4VFlXZzlXVmF3eGFjc0FkWnJVK25NdzY1WjdVcll4VmprT295VzYzdWorbDJ0N1FvWFVCZ1pycjVlM1dFNDNyWjdJRE5FMlcxS1Fya1YvdFB1UWtDVXYwcDhXS1N1VUROQnBWZ1VMa1pTMzhGUkZMdy9vOWpZL3N3OHAxZFZmMkxtNGVqNHlqZ1JjcVY3aGo0NTBBeVpLNGZwMzRQOU43UzREaXBOTncxa2JiK3h2ekVhRGdFc1hGU29MYVdibXJ3RkIvMHpBaXRqejlxZDhYWUxURlVZUG93dGs3cFdhQWsxalRsTG9GSDE5NEhCS25yR2RTK3JNa3licHZVWDcycUwzblI4RWp3a05vK0oyYU1yVUhKNU4zUDZJbTVReFdDdkhISllyZTAwMVIvbFVVQ2FRazdYQmJESGNnQ3VnVTFra08zQUl1Q3RVN3p0NDYwQm5YVGRKNXNUdmhPZUFkN3NxR2crbW1RdnJmYlIySFE1N3V1ZnNiNURPL250YnBLbTJGZGcrMzA4SlFUWWFON1U2Q0FvNzYvWmNwVXRibFdBUlFheDRrRDhIUnVYSTF6NDIxWHgzcHpLQXJIdVNwR3FBYlZnaFd0anRXUUUrYzgyZE5xRFR1MHA5cGNEWGRCMEFPR1dGZHhNYVNncnI5ZDFoTUdUY2dLdnNMZjhidkJDN2lSMEEvbDJ1aXNEYktvR3F6OVQyaHFWMUh4L25JanJhTHZMaE84eWVPRmlvRC8xb3MxSjdNQ1EzVVRJQTVabHZucVZxdEZJRkkweERXNUZnWHZUam10cDl3WnMxbFZoYWljbWFsNWwrUURQZk0ydy95K0FRUUlCQUhjRnpMVVVFenU5Wkl3ZnpMK25tZHEzVWsvQkdNdVd3ckpHQ3F5MGEvRk1abEhDeXlYRFFMSThHd1M2emNIaDBLVU5IaEF3K3Flb1FPOGpFU09kVVNlRzBDQWtrVmtHSVhraWRsT1RyaGNXY2dMZmF5SStGN1V0K0JKdGFwS2xQZUR0RTRFOTVITnpnS0hEK2E1TG5BVXRFMGc0ZDdEdElobTJvKzZac3RmaVRHd2YwUU1CcGQrRFhkT1Y1dUd2MGdzdnBzL0x5Z2dzOUtqdkJFUW1xWFlnRENXd0Z5U1FUaGlxMDNOYmcrYVdIcGxqQTl4aUZnbGlmZENuNEdQQ1VkMXRRb2Qwek1RL0VuWmZQNUcrSVorLzduMUJlYWZac1ZhejNubDh6eTY3aG9ueUxaM0N4dkxpSzE2eXZ1ZzBOUG10ZG1CVFdTVStPUHV5b0d0OWRtcUtlNlF3NVlCaHVVMFJNU2VzKzJpVGFCcXFQcDZlaGdDeHBnUmExY3djcmJwcHhPL0I5MDdCUGkxbW9RaGtwU1c3dEdjbi9XVWl5QkJsQUFHU0FReHBNQkFqUllhM0hzQlptUU16c0VScHZQS2N6dlQwbHB3Mkp2bDZDQ3BvcWRocjl1ekNseXZXSGtmbXp4V1pNNEh0WlVFUWR0bHR5UjV2eXRmaFl4WjFlZGtGSFVJUlV5dElMVUFSd1pDU1ZRaG9lNE0wWGxKSTNNTGljMFY1eE12VDN3RUhnSS9lMFc4VlBGYlduZlg1QVEyOWJ4UXdDVmdUK3VKbjdYWml5MEVPY3M3bFVxTzVTeHZ6alJtV3U3YTdEdklIeGxTNjV5U1dHdGRFaTErR1lRSGJ3bW4rbjNJN1g1NUZpY2R1TlBTMUVBWVB4ODZ6MWZiREh2Z0FlUER1VnRnYWpsWFg2NklnODF2eWRIRkN5UHNjbGh5TCtkb0pJc0JuYTVDNkVhdEp2alF3Z1B5S1E3VzFhZHR3ZjdLSTM2VFFPUUNOMUZKclVGTkNKQTMzc3NnQmVBaWppalR3WVIyTzd2QnBnekZ5OU4zT3RSOU1nTjBSNEk0aVF1QUpDZDVYM1dVTzhOYStyQ0xjWkpBSElNVTg0VUZ1cXlDQXRSNko1Wm1tNk1iTFdDWjQzVzlmS2RxTUF3bk1YMDVodXFiUW5OV0owYU9Obmt2UmJqdEErUytGTllDek5YcXlML0VyODlnYlJ3dy94UU9Jc2hpOE11N0FNUm5VME5hVlRSbCswa1A2NTNUZi9haVY2SlhiZEdqY2pOUU9MQ3R6NVBkblBQZW1zQzBMeGpUNXNKcUJ0SC9kUXoxbEJpYTNVUmxFWlArS3VlS21mWHh2bXp0V2RBOGdtK2ZnSEk2VFBPTURCOS9NMGFNMGg1emdCcDFxRkZ0WllaeVlTWjdMY0M0dWtBd1czZDFJbjZ1TTIzODdBSVp6dHVhNWw1N1hRQ3ZvSnJ1N1V4WFcyYy91VG0ya3lSQTVXRG0zdDBjajFxV05UaHpUWlhxc01KWldFTUtLeUFzUWJaZVJIQ1hWcHpTQjlZQnlTaEhwNU13cUtEZlJjNkRVcFM2T1BYSi9sSWxSZXMwc0FWcloxUWFMOHlmc1RaOFRSQm11R2FDeDFRdXcvenc4cFNuNG9oMG0wdmZoRWdLZm1DdUoxYXpQc0tFN2JoQU9pNFI5ZlBvTmtYamhjQXJSejRTdzcvenhOSVFGSHZUeks2OERDbEdOYmRnTTZRcVlKcmdtN3RNUVFiZHJYNHUxRUYrem5UUGxLQkdDSk5sUDFpOEJNWU5EQ2xhaVVlVFMvQm8vUG40eE9ma29vL3prNTdVNjdzdkJnY0tBb01PVVVKRHp2MndEOUttL1UvbWdPeS9meVhaa3l0OHl2RnREdVdOSHltbnFqa2FZWmh3UTNPUEU4MWVsdjlET3lzZjEvNCswWUJNa0ZZQnExV2VvOHN5MHpNdmpnZmxTWDNIS1JvWGFZRTVQN1duTHB5Nm1BUVRSSkw3MkU4bjVZWE11RTRuRElZRHEwUW40bEpjOTAxUElwK0s5S0Jkd3MrdXIzNW9tZEhHVGpObnZRRHFSUFpIRk5nTjErcGt4SkNrdEhXNTg1c3dwRklqL0dQMUlGUXFMWkJHM1VZYjBvbGErQWRoYXZqNkRxK1BTWmdPWnV2UjE0TEdFcmhsTDJIb2NES0lXUUxkNFprQ3hkYmpxbjU5MlAxdHM4bUtBWThMajE0MDlMU3ArQ2lhendVemxVLzM3OG01andLM09ENXhTazFWWkVSbFNORHE0Y25MLzh5OEx5eTBtSmtYQ2s4WVlOU05wZ0ZDd1dHYVdMOWg5MzVMRXVnb1R3azFWcjhDOVJISDgrcGxYMk9yUmZ4eWFFZSsra0RuZUM0U3I1TTBXUFJYSkdwQW1ucERWTG1VRUt4K29qem16OS9iMjlSMGRoM2hJRHBUU3hpd09sNFFVSHFzWk5Mc001OE45cjQ5VVdZUXRTOHJrTVg0SHJ3a1NTZnVZM084bjVpaFBUbDNRSEdudHpGTjdyQ2RmUkt3aDFXbFJTS0NaMzA1cDMxZUdQbzhkdUZ6V3NFRC9DT0FkK1JrVXQxY3NPK3JsdjdVMU8zTzd6Uk5EUmo0Y2krWG5TSUFFY1p4RVI3aXVzTDhUVDhFQm4rbUo3aTl1WCtad2RqaU94MmFUVUQxTmdxcWNMS0ZYWGI3OVVXZ2lEUUFHWnozZm9mdGFTTWlCdXcvanJtbVYyOXlKdWZOWWI3ZC9sOURxRkJzTjF3eUZaUEVWSlZ1WEo0L3FKSWNkdVo3ajVORGdNbjl1dEo3aFJMQW9DbFJsMU1idDgvUTV0bE1NTDA1T08rR1puaDJ1REN4Q25FQkpLdVdMWjVxSnBwbHo5STZtVHpON0hIQUhWdlZuOHExU1VEVHE1akowQnZsdHFyOHowTjRvVHA4ZGRDSERJZzZwS0R0VFI3ZDl0SHhEMHF1MnBiM3ZDZXZLdG5WL0NoMUV4ZjJteDB5Z2lNZCt0YStHSWw5Y2M2SHBzSk5MczVWUlNBWEd1V0RLbnFjSnA0Z3NFZkk3YUgxbEJoSXRrY2NYYlN4WklNTTVNK3Q4RmV5dUkwbHAyK2pqQkhXVDRWbituT2ZkRVd2K0M4YWRFaUdhdWtoVFJzVi9KNU9uZjdWWFV1L1I4UUxwZkZBYWFhNnpkOHFVNVBkeXFSR3lmaDhVdWI2cUVBWHdxaEFiZkZHdEZsZGdTZ2pZTW1UUDFnL0RrUWVqRitXK3hPVGszT3hXclhzbnE2VkJnRXhkM3l1UHZlcUpsOEVPUDZqMWhwODJuTXBmREw4UExDaEt5OTJEUE4yVUJuTzh6dlRYU3BURGFoRVk2UFZ6M1dmblRPUXA4U1RJdWt2bkZoa1o5Y25QaTRKSXBreHNWT0U3QlZtV0tvbWpHRTUxOXk0RVMzbnJJN3lyTSs3L00vdE9xa3IvZmJSdmRkNmdtaklBREJSYzhjRTMvSmQ2QnR1Y2FnaGtzNE1iQmJDSzBCYWFWanRKdGQyOCtNeGM3bWRIbUV1Tmw2bmZ1L2Z5U20welluTFlXWUMzelI0OG8zNTdiNDhHSWlkU3JpT1dMazJIcUJzRHYyRUJFY3B2SWptRWM5cmhxekxPVE0vd3VIZ2FVWHF1RlVrOTV4eTNVR2NSZlFCL0lDM0hVY0Q5cTYvaDIyUkdtVFlnb0ZjQ1E3R1ZlajhEeUgvQkJJUENPam9WT1NHVHUvSEdoalpBWDBja0xtVXV5UG1LQUJzMHk4OXViL2ZOT1RaTXNpTXhMMlFvbVZPdndkYmhXR0R4N2VmQVFsclArUzNVY1pldWhpRW4vUzBxZ3ZUZGJ1MWRaS3huU0F0cFhiM3U2QmJ0STZQdU1EKy9SQTVvcXNqRWYyRVFFenQ2a1pUOWdyMDJVeWRncTY5MG9rWkkwMG9xd3JxOWNXWERZVjE2TjJRelBiWUlGNWR0RHFWUlgrQ3VEdllRUmZBMVFmRVRaSW8xSkJxSnNHT1RtMjVkcTY4bFB6bXBaQ2lmTmVEb3R1UThQY2kyREtFVkJ6VkdSOE9RNHRjYW1xRVI3bWx4dnR1a0Z5RlVLbFVwNW9LcUlkN2REcUtmSlBHWFNaMXY4RlhuU2FSdCtsajA2WHd0bEl4Q0lldXF3bGE0dHNlWlR0R3pST1haeWpTdTFjMEJoZlNzSnl4UU8va3UxQnNKU1dZays5ZW01SUNsRHRaQ2cvU3VxWWdrTWxpbEhidzY3R2JrOUpJUHhGVDgxdytub2hGbHRTL0R1QnVqQnRNdDFUMCszMy9GRjdReVFJTmZHaGg4OG5LbHRlOTc1N3NTaFYxMklhRWY3Y1FlYWRWOSswTWJHU2VtSlhUczdOVkh1aTJKc3haNlBMVnpQNitJWXZ5T3NmcENZeDE2dU9ra3lvTU5GK2lUL0wwSysrMUs5NEtDdE9KU3lJWTZ6TTQyWWFNOVpDZXhVb0lPNVFXVTA1RTZFU3crYkJpS2prenVkWUdiQlNvNGZSa1VXZWN5QkpjZHo2Tnp6ckNsaWpSZDBtcG1pbUZqOXo2TlBSRUY2UHhqRzllNUdkRW5XYWtDTzVyWUY2RUJtMHR2SDczMk5NU3RLc1JDN3pLV1FCVWNlSHFrRERMUjd5ZjhlbmRQV1A5aFRBSG44Uy9uN1E3UGxrMFY5N0h0YXJUampES2lDR1V5a0gwbWVYK1ZVK0JkVWNkcnlpQ1FXZFh4Z3E5SXZZYW9qaDZpU0Noa0VsUU9hYmwyR2xIMTdCWmIrd2tSYW85T0pkYStEOFA0Zkp5UjluMndTajg1Sk9lelhMem5MYjl6b0t5RGQvTVZJaEhpZHY0amNFaW5tdExNamg3Rm5NeFFNNkRUdmFZdlduaG1reSsyall3R1VCbFIweFBnZWNyUGJHTjM4NkdnSGR3bi9CcE9raFE1MjFwcEordFlVK09QM2UvOVVSdnI2SS9MRHhPbDVscG5MQ0U0MzZFUS9CdTIwY2poSlRpSXNiZnN5VHU4RUdZM3UxQnZlYTFYbTZjanZZTVFOOFpTVG1ONVUxU0ZhbjE4YzIyMkVnblZHNitGVWUySHlBNk1kZ1dnSi9Tb090MHBHTnVpVXBSdXlnWjQ0TGlDVWs5L1FQNVhqU09lbG1Hc1VScGJ1RWZZOXEzWldhelNoZExjVEtIYit3cldKNTl6MGxGMEZ4bmxlVjlEWjJSNWlWNUo3OEpEaDFXWWRCY29lZTVvMTMrbmpjV3JvUnVzQmdqQ1FZMHFIRUJoSnphZkQ3c05OTVU4OTVNbDdlSGQ4djZuN2VnbVhQNVg1UysxN3ZWeGFrTzVET09XdEpXMXpPcC90Nkg3WU1QbWZNUWNOTENUSThKTkwveTNyWnBCZjF2aS90ZW5jVjVOWUZReEZwUXI1c1p0YXloMVU4NkVpSm96Y09pNFk4MFJQL0NjMXZDUjhxOTNuZ2dRWWNBRVBCVytjNnhMa2FySmgyQ2N4N2h4c3E4c09NZ0JYdHREL1hQcis4NUFHeHZZOElzUzlReVNxVDczZExab0F0dlFhYU5TS0hFUEdxL2ZNYXd2RkM3OVVHNVpiUGJaOVhNRnl0bklwS3ptOEdMdVNXNHVNQkh2aHVmSy9LWkpnYW1idVBteGQwa3ExUmxQUXBnUStPTDkvZ3Rad0c4bTk4VEhmamUvcHcrZ1JveCtHU2h0L2RxdFFxMjFybE5kOG10QTlqb3dmWGlXTG5idmV1VHQ4M3RrOElhRzNVNGZrOWRyTGJ0Z0tvVUZseklxb0JQZWpUaWVhdmdFcWdtOHBwaFFISytEYW9rQXNNcTNSSGMzZGFoa0pPSCtlWjZaTHlUMVJlQStta3FUeXBuVE80VWU5VmoyMHBWYlRQOXpVdVhlNTBDa1Z2dWhoYTM5dFcwY2hXbXVFNGZXc3F2NkZoa2R0aG1YU1lxYXFMaHlXNlJwc1E1aGZKUmNGaTFwVXhZcGJ6cVljM3BKbE9SR1F1RTdjZ2hLUzZRdEt3SG5kZlhjNk1yU0Z4anluaXZHTWhtcWswSmNkOWtVZlFvMEErZTBiMnBlN0hOZ252Tm1Ob3Zad3dPVUJkbEJ0bWpvelZHOE9UUTJZWWF5YnRPK242ZlRiUTVUWWxja0hyUmYycnAvb1ZiSEJhbHUxTGdIb1FrMXBMNWhGSWhYaVhnbEJ5NXRPczR1MExHWkhFcFNUUEllUWZPNWI5OHNJNWlHa1VKSEJXbTB1alRBVi9IRE92b1IwdTRXVERvVUx5OFk1WG9yb3ZaQlVaMTVLTnpoa2VjL2R2VllkUFc3Y1ZoNVRmV0N6ZkZvU0ZLNk52SS9aSUZLVHg2bzFTWlc4ZFUwZHFsbmVKTVVMcU5tSkxjVkVQTjBPL3AzMmhKV1E1TVFqaVFTalJZN1lLRytYdFFRNzNHMmF4ZmxmZWpZdFhGMFh4L2d2YjVpRnRIdmdpczRUQXBEQkdmM2ZzdDQ2TURiRUVYYUR6VnNOenFGaDVZZExsdXpUVk85U2Q1S0s1VU1vYm9ubi9uL2VPVzI2Tnc5VUJJVGR4TkE5NDF1Y21vYXhwb1QxRkhpOE9IODBpK2gwS2tSNFVqSTZpdjlvR0xNMTIzaVIwNW8xb2JhSXlVU3g5K3R5OVpWbm5jdVdmWWgrc2gyU25NeGZWaEVJZEd5OXo2b0FYSlBLOFlHVS9UU3BEb2dtSk9mZi9QSnFJQWtwNmlqZC9Xc2NnRW9vZXNPbmFMOVZXUUxOZklJN1Y5L1BLSG1GMXdwN0RRMGJFSk1qaVRGZ1lBZy9QZUNNQWxwZlVNeGZzRFNQdkYxRk9tZjkwTnRvczBlcmRVTWdnMHUwV2dVK1NvUkM3Q2dIcE5iRVluM2hqWE1SQmJMVXJ0d1huQzBOQk9CdncxQzdmSCtVV1NGT0oyamNhUGVHVEFJeE96WFFjcDFuNTFsT1JuTTlLUm9hbm5hWUpFcXFnYmtBdGNZdUZCbTd4OWZRL3VycHJMbHZ2b0Q2Q01ES2toVkN3TlRRbTNFdXdaY2RGV2ZXQ0o2djQ1RUVaTWZ5MFpUTHpxcVU5cUc3TnBLM1JPbGtmRUVxOG1wYWh5S0VLdVBrUEJTaExsMndac0d2WklHYWU5ampneFZZdnU4SUt1bWo0N29kRWNVUFpJeldTa2V6UWF4b2huSGNoWVpCczNpQlRXOWZQZE1wTHQxSmhzOFVpbkRzWjRqL1BIVUdGZE9NejJMaGExdENqRG9QTzV6b3htR3dIbVZiaTdnWCt0Q3hJYU5CU0xBelNpNHpPVXlTeE9lY09qc1pUT1pSM3RvU1FQZ1A5WUpsT2xiWlZCc0NFaEJJb1QzR1J2OGh3bHNYbDVqWG0xQmlIK3IvTDZwcFNTOElMeFZVTEdFU3lGKzVEQ2tvdmhld3N0cjQ3dDRQR25BS0tRVTJMK25DbTQ4cUdybGhaVXdJcmNXUWZsemZkREZaamhZclFBVzJiWmc0WWhoQ3hnUjBNY2d2a2dqQU5ZTjZQWjdNdnVRRm5aNElZWm5IZkF4Y09CODFCUmJoUDhaTVZibXA1QkE5NUx6enRwWTlMTjFUTkNGV2pFK1lUU1hhV25UU0pjUHorZm1wUGVGU004VFNUQ3lYRzl2dDl5K0l4eUVjUW9QWmpnZFpOY0hKN05RY3o4UmE1SWgvV1NhblhKYTZxOXYxRkwyVVJIRXZwUVJvVElwQlNPelMwSzRwTlNUaFg0THU1SzJXZjVJcUtjSkEyRGkzVnNVdmVwK0M0VWxsckFpZlZHOXdSUWZ6STg1aTZyYnBQbFQ0M0lIZFFiWFNJcmZvQ0JBenkrL0w1Y1JSa2ZDTWpRWW9NSnZBbU1TK0tMNzJTdDl1LzNZZWdDZUZnOWpPVFJHeDN6ODFGcUxhTWlqSHVOeWxwaUN0aWZNaXFHcm8vQUdQWFhueU9NRnZqSkFCTHRTK01sUkJtRWtISUtUeEV0Q0RPL2MvTDBRbmNxOGtlMzlCUXlBeU5XSUpzbW14cGliaURXL0dKOHdRQndIRTN3UTZVVkcvY2VXVUNELzVoWEcyMHN4SW5oN2pzK3d1K2xwMW5VekM5bm0raTVCMVNhdzg3TDAyUTM5c09iRE80dHlKVTlNTHQ4U2tDU3RQMGNZVmtIT1JaSUxOWW1GWVlNcFdxUEFETVg0WTRHODlFdFN2VW9mN0ZmOEVxUExYMThHYlNpVmJiUmhGQkZPMWNTWGxYSk82c0NyVHppYndCRG1OK05YQ1VDVFp0bE9XYmpmcUQ2SmNnM0M4aXhHTjluR3prcDAzbHhuWGI4anFtcVRTYTJRMnYvbkkzNE1JWkhsVmhyaEcrNmd1QVNZN0twZTJPMGdGVzhZNzVTVFB1OE12Y1RNM2xBSHV0WVFMdG5vN2FyOFlNZFJHeTVzd1l2cklHNmtxbjBudmdEdmM4QkFXclVaTzVOOTYwQlMxUFBmeUprZHRxUDNiemNyOUpNaUpoYk1Uc25OYUZZUXluQk5mNDNhMlRwTjh1bVdEaVZwbU1TdzhXRkl6NHBFTXJSbFhaTEFPU3ZldzBQemd0STJjVDV6dFA4NUViUFNvOUF1cGZyUUF6REFLVWJhWUNlTEQ4aG4yWWhQcGJXaXE2ZTBuR2pheVl0SDRROUNkNUZRY2oyRXRRcUxEMU5HTDZtN0tnS2hJOHNMZjU3T1QxQkV0c3gyK0NLMmlZY3FyNkJXYUVNMTkzTWE5V3JrNS9JUkhORExFK0E4MDJqTE8wQUZMUmVBU1ZZV0d5aytuYldoSlEvRFJpdWtUWXFCdllZdzEzUWxuOWtYUVgyczBxWllwU09xTm1ZNy9WaVRPbnluRXZ4NFhLYkMxbTllQk5GejliamdtSTVyNlhac3hoWHFxSk1JTzhhUEJNNzd2MERUVUFyQzBjalVINnBIc29kczlENlhFZ203OW9VY1ZPbEdMclppR3pRbXhEcUQzeTVMVW9Ec1NyOFlxV2V3ZmZpOWxFVDZsWDBhSFRWRGZXbjNnSThLeUJWRW5TU0x3SHQ2WWp5Z0twM3F4blBmNGZjb2hoR1dBL0FPcFJudEJidWJhcWxodjJ5SE5QdEE3OUdlR05INHBKYmtxc1VFeWdhdTd3Yk93UjBPTFV4TlZiZmdYOXVDV2xVa0EvY1ZQcmxVOHR0TTBzaDBuVFFvMENaR2FwcDZXQlErcjh4d1N3VkdHVTRXQVJoSE5pZWg5K25WUjNWL0tKS2lsQ3p0aGUrd0dzNjR5dDMxS3ZTK0pyd2JBbEt0VVM4WG94M09jeVJUZGI2MXM3a0ppYjJZVzI5MEJUelk5cCtxQmZFUk1iU2drT2JHS3BkTUduUmVmMWsrMCswNENpcVgrbGNIZlYvZEU2a09EUXZGL1JyQXpnVzVPUWJmTTB1WDZFdUc3YzFvT2M1UDJFMlUyOTJvN1cwb3FQTUpjTWE2S296cFdDZWxjVE9NM0dnVkF1NDNpVGpOS1RTNkRtOHdIbGJwdjRNY1gvckJsdFltVVprNlhNanRnYWpRQXcvMWgrZjRYazYwQ2N5c29ZaW5ZQ3M0c0xjT1p0VlFwRUY1RWdHeXVvZk8rN2locmR3YWVDR2FjTmpid2NNQzAyTm5lVDhNOW05cVd0WWhjKzNReEY1RThGbm8zcGJ5WHg5UmF0MmZ5eFpWaWM2aTZEczdXVGFIYnZ2VWZ0bW5oR0lIam1IUnRMYk9wYlo2TDM1cVlucU9STGhFbEg5Rk5JL1VOcVZqeUJsNWltSmQ0WXpvcW5PNzFkaGQvaWJKRy8wQTBRK3cyNTVyNitXeW1rVDByb3ZkeVhvTTF3ckRnVVR4NVZYSGVGK3MvcjNiY29SK3k5d3pOOUxQZ3VCa2dvV3d5S2FXcXJaVit1MVNLcEliVDFoWkRlcEU0SmZrbWFrMHBYVVhURnpwWjRZYzh0VGFXMlhVcXZraFFzQktYYTBBZmlJTHlCQ0c0ZGo2ZHNOdEw0RmtxQy9YZ3pBNTRESlFhelNlNE9UTnpCNGhJWVhwcS9KMVJsSjFmSW1yY3JLMWNUMWR6azFldVVoOU80ZVFEU1BIZWtzRkpkRGYzRUpDeEpzSmZIYUdOMWZTU2VOcEpvQlFra05GODVBRUs5WlJaWDFqUVBOeENyWFgyZW41aklhVlRpekY3bEJwSk1oQUVvTHZRbllnNXNPdFVtbzVUZm1wTkdXaUFDdmFwWmJ2c1ZDaWFWWTlWaWM4OGpPMzd1c1dCeTRaRnRwQzVrWnlac2l5QWxkRi9QL0J2bWtMdmRITWZHYksxMHpHZ2Fna2lJUWxlQ0lvVXhDYm9tbGZkU3ZTMERCRU81N0NvcVlhc3Bzam5xT0tFbmNOc2VjdzRtRU92WkpJOU5VbitRblVJVWxGcUFBNml1UlVxSEc1eEpZdlF6M3liT0w1eGxRTFdBYU9hV0N1YjE2TVRDUlBhOW5KcGxtbnhiVmxEMGpRMGozSFc2dmFGQ3Y4RmhaOERKd3E4MTZFckJ4THBaVDZIZ25PSWl5ZTlwU3NsbmpZbXdhdVlVdDlrNGRMZ1ZLSjhqRE8vSGMxcE1lMW1ocFZMeUNPZ2FwZ01oRzN1ZkcveXZoM0RYbVkzWU5sK3VmUHNmZkdXUVB5a0d4alNNcGJXaGQ0dXh4d095RWcvOE53bzVwMzlZWjUva3lXV0NPNFJ0Z21IdVg4bGlaRjcvR2FJK0VqWW9OOEpjRjJYSjI5Ym9nem52ZDU5aERpRmx5OHhJZUFEVG5DTkdkajBydUxKcGVuQ1d5R0hwY0E3SEhET0dHUFZ1bXVQSEEyVzg2VHhVYWtmdWtDYmxiUUpzUjl0OFduZzBmK0ExTzc1VWp4TitGSjZ3K1FndEdBd05zK3NhVzdKemNwdit2ckhSY3NYRUVHUDZkMEoyZ1FhS0g2T2hEcGU3QVF6bHJUUkxMWTZ2eEs4S0FXR21EL0VDNktYd3Jod0M5Szg5am9pZVJkTFduN2xaTUcxbm5oQTNtWWMveEt0eThqdytzdk1sMTFNdkdQaFd6T0lldEFuanV2aE00OTlOKzZxcWIyUUJBVWtUbjluZ1loUVE4cjhtS3dya0VBb3l5eXk4N1VYcHpKalZJUFVkelhkM0lUQ1BKOXU4c1RWajgvcDNhQXlNaEVXL3lsU1c5R2tOREdMc1JPQ2lOT3FvUjUwaEVncWtpbTl4Y3V5ZmNDRUpMak1mRkV1QkJCcGs3bW1IRXVHbW9mWXBaOFdSRVRNNXkvOWRsM1VTdjdKWDVYNWdXLzNJTmkrYmRReW1jWWtNVkN1SGU3QzBUeU0wdTVPcmRFeC8zQjF4cHEzVXk1NTBoVGJsMHl3cnI5RmVDTllTUnlMemZxR2pBNUpmQmh3dENTMnpOWnltS2ZURHpQcktPRk5aREJTVXo0bWpYNlVIWE5Weit4UitKMEw2Q1hnVFpTYjBwcUNDL2RXd2IwUVIrSU4rSUJOV0I1TjBML3JLZzZTU3JJR21zalI3TEozU3N1cmsvUFlDSmo2U0ZjZ0RmYm1hRW1Ld2tITE9wRU5VQ2x3aVpNSzdsUXZYWTdsNmpnNWFNNVhoR0FwWWZ0ZWFkUHhVMW50cmtpQmdTS1ZaTUJqTjArdWpVUisvWVZ0YTlsUWdINktPMm9YaUREb241THhjNHIyMGZTWk1wVmExekJETlJpNTFmZm5GTEhidXBWLy94Y0hUZjlrRHhLd2o3VUM0OXRPUFdHSlB4NEtsRGdNdFduSGpsWm95L1JMVGVNWXp5L0IySnJUWDBOb1pTZDJoenFGQVlzZzFRV1dDcERoQVo0UXhXS1JxdUdLRVdlby9NUGduQnA3UmxIVm1ZOXBiU2dkNlBTR3o5Vml1dkc2K3dSYTVDUllCWEdBVWoxVHAyOHBrSTl1QXhmZmszTVVUYkx4TW9TSk4xeUI1dFZuUkZwVzd2TVU4OUFTTFU1SWJVaVVjczhNOE1sOGVaTG5QdE1qSTRSWW1ZWmlYN1duN0hmWGN6aDF1RnNrbTdZTmpjOFExcGRMTGtoSThjSVpzUnZTVUtEeFVvMHhieDdoOXBMRlVvSkFqY3dsQllpNFBxNmVYb2ZTOE5sS21LbkNqNk0wbktVaElBTks5MUVoUWdJNUppRVhtcUl4aDdvaENjWEIveGp1OTZESEdrV3JiRHd1US9WeG80L3hZb0JoVjc0U1ZaMUFhblZFTEJIYkc3ZEZoNDBGSGJ4Ym9BUS9wYU5sb0tSWHcydUVhQWhKYktFWlVNSzR0b240a2ZkMWpWTVlHYklEc0ZtS1ZhQ2VwM3IzZUlXdXhiMG1ncHJtUVZNT1c4WE51eUE4Qk5pbEhKTGNjTnZDcmtocGVSU2t1dDA1NWlIcmhUSkV3RXMxbndtRG84K054MG9FK21UQlBHaVJuUlJiazhqNHZJQTNUWGs0cXJ6QTg3M3BoMHR3bk5UUU5ha1k1bWhFVkVuSEdiT3FtZm9qRm9JSEZNdHA4eUxROE5US2N5MDNWRU42c1h5aFh1TTlsTExMSTNreklJRmpmU2N2UW5TeldqOS9yZFB4ZnY2Z3ptblFTalJJNCtxYnBieE53c1lSMFFTRFFZc3liMUp1ZUt5MEFEQVBkRG5MWWQxbzFWcDBrVGFGWFFBZ1RYd0YxMnlhdjBwRjNBTmQ0YVFCL21KNE9FWWdMQ1ZiZC9EM1paT285U050TkNBa3gydzFWTWJCL09PbllzRmJsWnlBNUtqZ3I0eUtITVhaS1VmOGttZjNBK1l4NGxERDh0OWxnYmh4bUFWZ2xvbFFkTzFPWldqTEJWYko3alRIVFVpY2hFYTc1SHlhWXRjNDJqQlZiWTNwSW41akxPMTBEWGoyUUJwRWJkK1dDVjNGVmtuTFVpSUVMZVFGV1hoQWJNMHVUL2srZGt6bS93REkra05xVlZPVDAyd3dUT0lURnhLTWNUMDA2em5WOEdlTTViNndaQnVwcldXQm9yQ0gwRU96eEdYN0dRczc4NDNJRm0ySjJ6amZOZVZoNkhKVk5vZmM5TTdCeTRMUXBncVdSUE92d2h5dkNob21lSmZYNU5PdURqVkJjVWRTQ3AzMFJVVU1oTjZUeTVWRmloYkEzU1V1ZzBmVDVkNnM2TVdLMjZyMVVYeHl0T0tUV2oxNDdxeU0yOVNmT21HNEtDWHlVdWdFMU5Hd0tJNEtib09mRVJHTm5TUnkyNDVEdS84Y2xTVTBvbG1vMjFhT3NLWjg3L1kvK2MxUDR4bnQ5TWVQSUpIZUFkTU1PblhkNnNST1FXZmpyZE9NaXRPVzdMdkxjK1hYNXA5VDVYQm9DQ1o5Zlp5aFZUcHUrbmZaakpNbHlrY0Nid2N6N1g3ZklpL2l3K044SVl6TjJvUXFvdFdXek5mWGNaclZYV0paRTlXT2Nqc0t2YW9ReFg1cDdZY0t4dGpVVDVXdnJ1K0pkenJYbVBYZWppcDhTd2svVDVnS0RkSDBNMlJ1YnZ5MHZDWFFLLzQ5WDI4US9KTHZobGwrQURzUFNzUWVXMHVXamNHUXFzZXd5TXBZbnVKQ2lsSkFtL2NySGN1c1JKa3Urak1DU3dxeUJHQk9aL1BBQmk4R0FlbEVUK1VpMG4vaXc0aTF2WWFrNzR5SDc1eVVGUWNXci85MGFVK0tiMWZyY3o4Z1pjRjFlUkhwaWRkdlAwTDlkNVowc25BVVdMZHcyckRqT2VEMHM4MGxrN1h6Rm5WeG42UEh1Y0lwcWphQTdSa2h3cXFMUTVYajRaWUxHYzRLWGZEU2w5WVdRRHZOb0pXWHcxS2VNUlZsbHJ5dWJSbUdqcHVHSm5ncU0zdGYvVHluczdoUVpkSkIwMlZmNUJibTRqMHVzUHVSZVp2azFwNDJsSGVHQ1RJUmxVWnBEV08xanBEb2lRRWtteDkxT2VXNCt4M2t5VjcweTVhTTE1Wmp1RS9FbmRyVnZnZmtML3cvbVBlU2JVQ3B0UnpuQWhRdFVVRWtYaG8xMjNNbmNyalA2OEk1aXF6STFqQkNmNWZjZ1diUVpISktKZnQ1Q01DQlpCbFNFZDc1SVl4bktGRG9HWW92a2tLZFlHQ0Jlc3VmNkQ5NlhJRXd2cTFlR3BjMVRWRTAvaWp4UDdTZUlWemhTSUdVcXUrbWFkb0pJd0FKMmFydEQzR2FEN0Y4aGY5YzVxOFljWVpER3g5aXBGMnJTRXE2WTltbVdYRlRsRm14cVAyT0xmbk5odkdjQVlJUDk5WTlwVVRjeUp5cTRvdU91akVtS2hZWHQ2SnE0WlFRRk9meWU4YWlTUUhIMDJPMkRJanVzQ2RTRG1uM1JWUVVFNndPeDJRaFdSK25ycW45d2NRUm1seXM2YUtBKy85cFQxU2l0QlRXVkROUmNRdEkxM1ZQUmNvZVYySWVYWFhSZkVmTjdFay9HT0VYblAyMVV3MjNNWEQ5ZmkyVDVydXl0UnloNGVRc1V4T051MVc0dkVydnJ0ckRZQXREVzhpRmxOMGxVZllTdU51dmk3RktscGVOR2tlTTBpOFprQTRITnhUVGlZRHFPTEFhaGhMYTh1MVk5STEyUCtmNjBYWWhpaVZBcFJwNDMvOWpRN0FlcWNBd1lHY0x5cFBMcGYyOXE2SjR1REVEOHI3V2JvTkgxOGtkVGZiemtDa3loK1I0U3VrajRvb3k2eUdLN0Ztckg3NXNzQlI4STNzeDFkZUpXUnQvT25jSmFmOHBpK3lBZXVFdXQwVUN6VXk2YWZQM2pmemUzbUJDMDIzdDA1NFI2NG54S1ZYTXVLd01UUTNld2RXUGdtRU9SWHFmRVNVWFZwcnJFK0pMOWZQdStSMlBFamtBL2ZEbDRSOGI2enpZc3h3ZU5nQThmd3JEaS80YTNCQis2UnFCWkFYM0MzMXJYWnQ2cExESjROODI1bkg3dUI2VUJQZHQ0TzhwbEhYanorN1liR2tJSHBaUjRRZi9FR3ZMVVBjVHR5TDYyUnJwdkRaTEpsZmllWXJMM25pTFZTOTFUWCs2bHZ0VHlaR2ZJN0gzaGtCNlBzaldNeEZhcGk2NXFxYzJMVW5DemN2WFJCOXhjZTV0em5qZGRhM0hXTHA4bEFyblpucWl3bUp4Y0VXSytqd3Ywc2VLcWRCWXpvZVcvYmMzOW9LQkwydXB3MTYveTNEUjRZak5Td2s5MkRQU1Yxcmo1Y0RMcjRRb1dlNG1OVXRIbW5WdXFwOC9JcE52RjVYbk5DSGFFZndHOEE3OXJnMlJNdnhpYXRzMDJ5Vi90S21hTEVIclhMcFc4WnFTUGU3S0tNQ01OUmFHSmVqS0lERG5jOWFkNWlmRDc2N0czTWRXQVBCVzhxb2lPd2d0NVRiUlVLQnhmMUhVcTFtekdLc0V1Mk1NNGV3WmI4MzZvRU5yaHozRnlRWEJvYzJxc0tveDhERDBweFdVZHh0RHk5QVV3dE1ETDBSWDRtdnVDVlMvV2NUQmJ6Y3Fxd1orMjlWV3ZmaGRvVXFXWUpSSVNGQ3RJSG9aV0RKczFrYTV5dnZBVUJiRE4wdVVySkdUdmlvVkJxbjFVWkxDSFBKa1l0RkxQVklIU1lxcDQ4OGo5RC9JU1pDUzRRM241VXpaYXk2S3NKNjIvZ3I1WDhIcHcwSkFYd3lsclZkVGVvM0ZQUmd0eWtnWlpucGIyNGlMSkRndkxhQ1BMYXhXdXBPeHVqT0htNnhQSlhiL1hvazRqeWZtL05aekErRXJwK3FXVjlFRmdkSWdOVFp1S0NqVUd6UGc1Q0pmVmtvbDZjSkRoU200QUhidlVkVmtkRmcxVm5WNUJ3TlRmY1NhZEJxZVBMZlVUcXRoOEpRRmtoWTZ5VDh0ekZoTU12eUJWRndsYmlXQTJ5V21mTjlCanhYTHBTRmQ4Szg2THdUR1Eyd3JUUW1jUDRzRGZncHM5ZHNRUXh5ekpPWVk3UmV0SW5VZjExM3NkcktpZlBMY2xSRGZvY3RKUVpPMGZBWm1JME5tVm1SQjJYT0ZKU1pFQzhETC9GbXR6SHhXdis1dWpIcDBlVlovbGpGZHBobkxEOWpDWUFzVjZINWQyeVhVd2hsNkE5QzhhRWZGaDJmTC9kKzEwQ2RCWUNBSVNTZlloc0FrdU5GaHJwZ3p2cktFK0ZDVlRyVldSVGR2akdoeGd5RnhuUllNbnc0S2pPUGJUTlhJQmZ5aGNoWFRVR0xqc0dtY1QyY3dVSHdjVGNyVkR2WElLeG5oRFVSUHU4S2cveXE1d2x4ZHBjODVBR2tRWHJqazREZHozYlpkZG1DY2NNckJvUm83c3ZybmpiS0h2UnNLM2REVDhtSTNDTEJsL3h2YzFWcU5BTFBhbEVNN2htWmJIRXdMUDNGMXpKbUh3WkpYdXdWKzdxdXNzSGkxcUxHNXZ4VGgwQ3R5ZEh1aU1HaThIcldOK05hWWplM0ZaVDhZUjFuQ0pXL1BQMkgwTGt2THZvZjdqeU1kUllxUFNOQmp1WG5GZkRvZWJlRFFlL2NkckdiY1ZXZHFFd20rQ3Z0NzUvME53eTRSMDhYZnhFUkNpMS80ckUrZExnZkgzM0lvOFlIQjVKMXJXVlhmdkV3TFhzUXJCMm5NTGllYkc1Kzd1Y3VyZkZoR1UrSGpOUW10UmF1ejZXYTMzbGptRVQ3aW01VXJFeGxtVkxuNUZJdE9TNmttcGJiZDBZN3hWUXFqNnhkRFNYN2dEVjkxMEV1cXY0Z1Z4L1k0cDNZY0lJTjFIdkNmbTJYY3hMeGVLTnZ0NDVBc0tWRjZSTFdIT3lnNyttbVVzalVtZUlweHFySGdOcG9QblZ2bGFIcHlWU2k4VGR2M1Y2KzQ1SmZjanJUanFDUC9DcnJBMXdkMXdBNVhFYlc5cElRVGt3SjJQMWlSdHJYTlFyMG5hUHZhM20yZTlNdGpXOHpmdHllMkUrbWRxOTV1VU1QOHJreGQ4SkNlRVVzVjRCak5mVFcwaFRrRG01OE5RV3duUm41U0lTcEErOGZMK2JWcWNYWm8yaEhQbEdPREpGQ2dYZGhFUXJRL0pZTkI2MS84NFdTYWo5djIyYjJXTzBvK1pwMU51eWpHbUZoUklxTzJteXJFdUdLUGZJOVpYRDJ5SVc1Q283WWVYYXZycnFaTXRvaERSMjNLME1QWFNLaGZaNnFMY1FqM25yUm15VUt2aWZIcTFWdSs0RnI1TllYTXdHMjhQc3ZVMEpyamxMNE11ZmQ2MUpQQXVEOU9WQjBza3lzSGpHeE1sZ0pmaUtPcjdBYWNEOVc1a1NrU0g1cGZJcjYvTVNXb2V0MFY1b0FGNG4yWjdrMWlHU3ZsalBKTHJPV2FiVWx5ckJKZmhkSXNtNmFUUlA3dWE1eEpKS1NScWdUSTQzaE9yN1BmanY0dElpWUU3VTlxSVA3bzNhK25KaEZyOHhEUXpkeSt0OVg1Z3J1MkdGYldnb0Y5Qk0zZG5hRTdQSFhjVVBwTGNpZU9NVStvT21GbExubHZ6Vzd2Q2Z5NTlvYVRCcTJMN2w2Y29RT29mUXA3ZCs2L1JYWmowUXpDaUFhb1ZlVnV6NUdVdWUzaG52U1Bhblozd2NhUVJCejdSdjJJMVRMVjRKeWVoWHlWSEZoMFM5YVF5My9XUHpFblp4dm1mM1BqNm9uTHJuRDVuL3lmdGpCZ24raXJBSVQxY1o1MTdweXFaRzVrNUpXMzMwaXJpMzlGYUN5TGdMZ2FBanVacGdsYU9CN0wvUitoN3pyWWt6OUZRSVRzRXY4d0s5TkswMm9IZlpiRTF1cmxwbEl3VSs3QmkrRkRaMmVnbWp3anNNZ05VQUlQVU9xeTFISGozTkovWWVybldDd3lkVGJjWFFQdWtBWTFMaXhUV3BaNmNzdVBMajR2ajNHU2p5c3VLNHQxRUlvQ3NjRUE5bjlzYkp6UXhlcSttR0tyT05LQ3UzcE9Ta2VUK2l4TTd2bUxjR0JaQTYyZVd0T0xRWVNpa3lpcVJKcXVJK3RrWEc3eHdPbVJIN0FzQzF3ZW00K3B6anFGaDd4bzZpK0hiWDlDN0xWa0kvQmJNby93M2ZnamtVbmJIaWVjOW9MNk9lSHVEbHhaQ1ZPTVpOYzdBOG1SeFVnLytjWGpMdkVzeTBtVEpmNnczeEhFUlRVL0EvdnN3a3ZCTlIyQ29XK09Va3h3eUtRZUV3RzFhMkRjWXVnU0VRck5hUFRMSjZSMmF3b1NBNkZmTjh3OTcwQVVBMTZxOGZkemVqaWZqYXlqeWx4TjFHTWZvcUNvVzBvK0tEaXpZRStnVUF4a2dEWVNvaktreThneUtUNVF2ZzlsYjNtS3I2V1p2b1ZhSTNxY1NlamhXWjAyVXF3UlJKNGVNZXY1KzR2dk9VQ1Bqb3NTM1pRTE50VW9EWjlrd2xuODJDMkdqTjJwSS8xblcwSXcrd2pLbytvUnRRSFFiZlhmTExCQURLcUFnbXZUL3ZRN1FtZmFLYWpyL3ppZ3NXV0NWSE1WS3kxMVcrVkdyNlUzM3IwNFBGSktaUVJxMUhjUW8yZk9uTndNdks4eW5kSVJBTFdyMDFPa0p6Y05ic1lVamlvcjlUbzAyV2d0aktKQWxsQzk3UHRaN0ZleTFoS0l4MnZNZmJ1ZU1zTDQ3N0NaVzVzSzFVUlc5a1J0VjEwL1FNTzY3SEJQWDJ6bXJxcEVjc1o1eGE4SE9WcXprblFYSlJ5ZHFMNXIycmYrS00raGlldVNCeHVObW9OZE5ocWV4TStOK25xOE9PL3pQVWFPd1RaNURXNDhyY2s2M1pEQkNUZ0dtcUJDSGsvelZKYVl2YVp1Ukd0czU0U0ZlU2Q5cEppRCtCQXUyVUpYOURESFlUTXBsTkxuVmQzVXZvU2JBN0xLVWRPUVU1OGV5WVF1N0ZsNkJwK1dkV0VvNUtjU2RNQU14Y24xbi9MUTdPc2lEdjRUZzU5OEdmVGx1Z3JtRUdsQVRoTEpteEFlcVFQVnl5ajVRVE12L1JkWXc4RWJTTW83WXhUYkYwamI5WEg1S2FZclVUNkNodFQ2dytpSG02dDNnS2NGQXM3czRIYmhVQXZjb3lxWk5jRGpDWDNsRmFHc3ZGeFFZY3N0eEFhaldLNjlzTzFIYXNRYnNXV3NMTmxWUEM2S0tUM2k5bU00T1ZRNVpwWFQ3SWdnSTlGakZwbENoNHZNUzJMUmcxV24vRFRsMFBIUVExeXFxSTZkSWVmR2x0TGhoeGVFRnFlM1RFV3FZSW9wdWJTVUdnMXZxOVljWngvSDBmMUE0aTZjcXBJUmZTYWxBSzE4bE1VQ2pickR2aC9lWFFVZ0hoa2dOZTc5SjA4c0lkTENsSElkOFhQalpEL1ZkcXdlRVByZDhvcWc3dGtkZElROVBMN3pMNlVKOUlIRDU4NHZHY2ZDWU1HSHZPekp1MW01NWYweDFCL01FVHFDdnNIQnMvTy9rRXhPQVgzRHBMMGhYQm80YW8yQVNuNURtbXlSQ3VWR01QUEFjZEx0SldwdTc5MkVlTjJqcTZPSlB5K0g1MVFKZjgxd0REcjBQQ1BTeG5sam5qNld5NTVNUGR3MWdLc1E1S0VUZXI4NzBzV0htY1BwSUVmYUJlNUgrdzhrbGZTUVFwYmZjRFVObDI0c295bmRZaVpZRUMwK1hTVmJvNExoK0FCelpzSGVSNXpuN3FRM2pEZlpGQkJxTjNwTDMreFlPV3AxZEN5QkgyUEh0MXNBMzZWSnVvTC9oa1lLRm5qaG5UdjBlY2lyK3hrK2pTelg2REtLVmNxT01ZN1VrZ3Y0NjVmNWcvT0RlOFlkT1djaW5qUVBJMkJMRk1DblJQNWxpVGRvUGxZODlueUh0Vi8wQnhjZS9OWEJ6dVB6M2UyRUs1TDJmNHh4a2ZsSmticzdjTHMzS2xicy9MbGRGYkxQeWVnM2NmRE01eWhKSHA5c052VVIxWVRaUjJLaFJFV042MElQdEQ0a3Jid3B1QXVTYkxwZlpJdEZmK25ndGRrNzRhR0F1Z2Z4eU9uK0dubWF1bXZnTCtNYXZCSXBmYllHUUJuTnlGV3lUV1E4dFU2ektTZ1F6cTViUDN3bXFvMmFkendabUxiMEFtSEMySHpycmwrZGFEbDFsNTlCSE5iSUNRRm8rQmVVQ1ZrYllOcTg0Y3diZGZUdktPTCs5YU4yMW5qYUUyekY4YXlqb0ZRVkd5YXh2RmJ1dUdRUXJnUGI0bUZPZGVsUjdON3FIQmRnUjV1MTJ1eHJ6TDJrUTdJdU1tT0pjL2U4Y29kdXoyWmJzMTBTQXVLSC9ad3pRdGR2eitvYkJ4b0tmbDgrTGtHcFJscmczL2tFTkpKcXZIMnF1eFo1TGtDMnE2aDBqZ2R5RE1NMktxQVV2dnQ0ZE45a09sTVFvRUdPV3d4MG1JOWtOL21mRCtwY0JORTJWUGM3ejI1Y2dMMGl1OENhUldTMkQycmppWm10eGlhc0d0bC9HbnQxK0cvNlNvcFhSRWExL0FUbVRVTVVGTEI0TGhKMTl5bFRJZFhCaHhacFdFVjdqVHRMSEk3Q003K0VUTUc0cXc1NUZOSlJuWHVyZzJOeFlWTDFteFVBUkpCMnpobHl4UWg2Q1RLZU9wdVkxWkVVUjFSKzl3TWRFWFowZjk1UU9QOXZkZDVkb1JFa3NKODJNTUdaSTFRWnNjRjhCSFBqYkFGVmRQcDhQZmFjRUM4aTYrcUZDa2dVS1pNWTJRenpvbU11MnlzVFJENmhmUXFTNzBtWDd1Z1BBUnNIRjc2UVczR0kveDhnUGcycFQvVk9UN1hXbjZEdlpMS21qK2k1OW0wam4wUjRBcGluTlp6ZEMzRnhvME9lTWJXNE1kRXdLY1pqYVRUaEVuOTFyRmpZVllnUk1OV3JUQ0dLTkNyWWkxNEZvcDJBbU55Wk1xT3lqM2ZnMGZEdStEa3B4STl4Q3BPdjlmUnRaUFRCeEN2WEJkZnp5S0wxY3IrOEc0eGNtOW9tYitBSnRLeDFXaXZacnVTNERWdU8rb0ZVaE1Xbklxank0RlhyNTJnV2ZIMFNWVytoK2JHNW5FQkJxRFc0V0tTVWVFWVladmtEb1FJM0I2ZEplYWlqampEUlBROWIxNzBTSGlYVzMwa1pLN0dja1JTa0h5KzB3WHpudkN5QmF1TFNzVzNOTGk5UnJYMUtoUFVLVXBuSEUxelBCbmNiNDJzN016VUxiZlpSMmtOSFRMM0R3cTNWT3J4andWUStsNnYzOHVjR2tOT09UNjZYaFdhNHFrblBoUnFNc1k2M1dNanJYMG9xOVdKV0Z5NVNlRk8yOWU0RjVsMkc4amkzVkwvak8vOWpXNEQ3QmtTK2tTa0p5RWRkaE9wZm1hNXpiZGtUSTlYZTRkYTRucGQvSlZQZXVPZTlsSHpjdnVFZFQ1cU5ISTZabmZSbURYK1MvbWFWV3BaYW5OR2lrRC9Wb0Z6dW1xRFJZcXhRMXRMYWxLVHZoa25vT1U0d1RLOThQNXc4bUZGOXNJekVTMjBMR2NuWVFSSDJsY0picHpISGtZeVRFUFo2dlFqTXloeUg0TmVhQU9Sem9kSkV5QkdNS0VUWnhXemFZYlR4TW9GSElCQ25sa3N5RmtnYmZJNjB0anRuZXRHc3NKQWlDRUFYL1pwd1ZGOFFnZjZNMzRjSHdLYTRFWUd4ZCtJazdRbWtRdXkxd3VkRXMyMW81QXBveGRwbVJVQ253RFl1OHBOaWZBMExvV0o5ek1FWVRzU0JBdDQzWVFtOGRPVkNzazc3cEFSN2pCeVZiVmFvS3NRZnlpbHIyS2hIRFNvaS9aRUlyRXlEMDllRml3eEVDYzFieEpNdnlHaXh1d2l4azQ3SGxTK3d6Zk5tQnA1UGVrUHNXWmltUXRzVVR1RGZHYy93eUt3ODYyMEg1L1c5SzZ6SFFtRU1xd0U4REMvejFpOENPcmZDM2tyMUFJTFh1eHM5bGZSa2piUDZMOGZNMEVpbk1uOWw3aHYwek1lNFBiVSttcFpocGdFU1ZRc2xxZmg2NTE1c2MwQkUwOFhxS0pQeTJYc2MyZW1FdENENzczcmw4SVhrWm1QcklsWThiZ0ZqeXNxMXZ2OUtGUUZ2a1VXUmdFc1NzNVBDdTBsRWZvR1lNTGNyU0h1MitCdE52cmQ2YmpSVm9uTURJWXpVTVhOT3RmYjdMRWMwWk5PWStVY0JCeVBjQllYMHZjaDlIV3RCMWdTYzNvQjNIYXY0OE5sY2Q2ZlpBa01YVjVhWnd1WWwweERLeElhL3ZzSzM5RS9OQzFydGVML0VselAyaDNpZTJ2alFsV1psUGJSZEVnLzl0VjdFNVB0OXlYOHVqaHNJTzJSam9MNUh4OFF6cE40cEdXczY4cUMwR1VoaElrQUx6QzlLN3JNa3I0enFYUDlCdG90Y1RzWDM2emtWNlNUbG1NQ3cxeThOYks5a1MwY0lYcjZEREVDU2RFMXBFOElqSG1McTFVUno1bGZ4WEVSejhzSzBzeGo4SURFMnBpUmR3MlFVWWhSS2JybEhMT29TM2ZMbVFhVkhsUFl4eDZQaUNaQTBjWDBKa3dCZWcxMGpiNFc1VW80ZzlpdERiVmpjZis3dWtKbW93ejM0Z1lrMEszbjB2YmI2amg1dHdtVWl0bWVlVElXM3N4RjZyYktqcTVrVVR6NVpESHB5dzZzM3dKcGtscmJCVkRPOTVmV0lWWWRiWVRtMEVuUGV1N1ZacmtiS05kKzVsTklhUStsaHZKd0xCdWdIMldCSjY1dld0bTBOM242cGZVUkt0T2s2OGlmSlZCT3Zod0ZxWGNIRjVid25HeC95bzBBSlIvMzMvYWFEY3NzMGdwWVRUazEyd0JLT2wzV2VVZDc2dFJ3UlJQRGx6KytJcjVzTm5BUm5DUnJXQmpLVEx1c1N0Ny9ITDZXNGtJNmxHaFJjSzFqTGtPUXlVR2U5VnhVeFlwVkdTWDlCTVkyUnIrTWUwR3JpTXFxVXlsbUxUTmViY1dVZ0lhWXJsQmpHa05vUkJYUmQyNk5MV1BiYTk4NlFYaHFyVmNreTRPcm1IcW9DTjgzMlhnSnYrb1JTakc3bHYreHA0aE1hU3AxL0loaUgreU5Cb3pQaW1wVHlUMGJwcW9Oc2wyMy9MU215bTZINDloMzlHM0wyeWFoUDduMGl2dDhpN096Qnhhd09jV2lmcVVmWVdjZG4zUkdNV1kweWsvcmNBdFhQUWZYMEVlbHk1bitrNEFkMnBiWGFESldubENTQkZwaXIxVUt4V2RhbVlsdjQxR3RTZUF0Qk8rdGRmSzFNOUtpWHFEWVorVnVYU3RSaG1QeDV0dU4wQTZDYllkQlhyM2puL3ZXbUVWT1VPTitzU1hJVWVoMXZiWUwzWlQwNlZiQ2drdGQ0K1ZMMkZFV1g4RnhoZkVzZmpKRjk4enhhNW9GaEc3RUF5OWF1ZDJabEU0bU5vc1c4UlIycjhHam9ZVnFxdnZIOUxBeWJwQndodEJDRXRrTDFKd2o0SzRwbEo4bkhHcm12MzVXZVRRTU4rNXJsYTVvNGtBRVpDeXRoL2NBaThWMlk5WTJKWWpVVTNnbXV5bUdlcUFnUk4wbzJDMDFCME9YeDlRUm5lSk8wNG1VM2x0TDU5aFIwTzB6aHhxeUgrNkhnb3picXhwZGtZRFAyUXFtVGNncXNWQ0FsSXI2K0w3THZ5MEVkdW1hdDR3L045YmQzTi8wOVNyY1hMajVjWEpOMFRrT2JpVXp3QzJwYkZORFc2aVJSVnFkRndmb2xVWi9OdGo1NWR2Mld6VXlOQ2RqQTQ4M0NNdEtzMFNFNnZ4MndIRU9LZnVRNmt2aEFBU1E5S0ZqcTBnTHc3WCtkV0tGUXhmUlIvcnlSQnhpUmJrRzVndGNuUnpnRFF0bDBkb1JGOHFObzVHS3FXMnZhcFFMWmRkaGZxUHFEQkFUSlJwejVINnRvbHNzVEpuM0gvUHUxWEdIY1JQZEVuSUpZK2c2VjN2SmZKb0VkYW8zWWp2b0t4MUptWGNJWm9FZCtEM2dqUTJGTDN5VjgxeXIwQzA1Mms4ZGtNT1ZaOVF1RXI4Y1lNSm5YSmZCSDhpUmVYZFphRlhzRERVVmdsUkNYRk15bTVWVkRMQjZTOUdIMDRlTHhsOExqeFpkZkdNSjkyZy9KM0Raa1p6akRaS3ROK0lRUk4ycW1TcllLdlV0MDQ4L3RmU3NqR2ZYZ3N3OExjUXhqSzNjSHBsUExHT0xpTXJxRTQ5b0xJMTU4b29rWG0vVWh3c1VqaUZWQVNVRG9PUkpnWnUwc25lYXU5Z2I3bWJteFA5bE9LaVp2RkxFSVV2bjNraW5YbjJrOUxIVmdqNnBiRnlLYm1CbWZLRkViZlhUMDBRcG9YbzYxcHJEcUkrVEFuYVIzQjc1YnU5S3c4cyt6RDg3Q0JsY0Y3Nk90WXBvMU5mNWR3UzNXMlAxQyswdGlwaENnU0dwaWFSTVFZenk3OUpYL1k5SnY4bkhCNEt1SEs3MHN3MThNL00rVE5UQlhKbUNGL012ZlBIN05jS0hKSU5ER2krZ1cwSnMzOGc3TEJDSW1QUEpJTnFlMkVpak5IN2VsV05FZFRjMVIwanFVQVV4Tm5GakhDQ2hrTVFPalNtRGZJNWZieVpWcjlPeW1CeHp0RTlmazVBL1lSZ0VMaHhEa3E2WU56aVlLVnEvY1dSaGUyd2ZKY25HZjdQeEVMOXJyVkhiRXhBMnhjTmx1RDJheElqbng4TWR6c0poeUZTbXBtdDA4SGJZV2tTa0hWaWxiY0hqa3VQNnZLUlY4VDJJTG1iRVQ5KzdrZ3ltMUV0Q1B4T1ZSNWt4dmlJcHJJaTAxYlZLRStBSVU2dkFpKzcvbVZWOGhZWC8wRWdLdjQ3RWJzVHFBT0w1M3I3S2xoWlBLMzBlNndBLzFmOFowVlFDODJlWExnczVRdlJxMWRNMHJyS3lIczdiVGw0QmV2UkY3OURyMVBhUjI2dURxelk4Z0xBaGZjcUY5VHliek8wV2NSbHg2d01qY0MxekFld0MyZHliRHpWN1E4SE1DV3g1Y3l4MEdBWXEyWVM4Z3ZPRFdaajFrWkZPdGxNT1VGMXA4UWVqcERaUjFHL2pHNXB5cHltNXpoaDhYWDRKbjlEK0dKaUhWMk1sWUJNL1Z3Q0NoZGpVQ1g0a0NtNS9TeWpFWHJyRFVPWnVEMGo2eVNEb0ZUa1FscG1KNXpOL0lQQkFCekZseXJMWmxpdG5WQTJNd2NzaVUyVzNzOHRPb3hTZ1grcjdGL0srbXEvalgzMndwbTE1eFlEeXpyUG9wTWx2QXVJWk1hbk1QTlUwWFhmamRrUjlYeDVsUkFJWDF3eVpzTno4bGpEVm1YUExOeEJUaU9hMXB2MWJiSXl6OXB6c3QyVnB1cjY1NHZ3MCtRSVFxRDFPWjdjSWpmdVBON3ZSd3MvN3hXcUVNMmVibE9sNGVHK2Jnci9nVTE1NVJrdUgzNjZpdE5Zd0laV2QrYVhzR2VXamszRng3U0IyWXROa09NbjBMNGNtNkVGTFlDQUVEWm5SSFFCdWhxUGxKdXh1cXI5UkYydERRTjg1NGpEMERvdWN0MTlCSVMzWi9lc2pOWE9mY0d0MzhkaGNjcU1Ccmt5WDZNbmJiS1RzdDhYajhjbTQ5OTRnSzNzOU1HVWErNlk4VzhzSWRkOVk2MVRXTklXbTNIZFM3dmEwTG1TZWFLRDFMNGMxZWJGNklzVzZlSHVNekdEM2diYW41Um9NaCtkSHZ1bVpySFdCeVVuVXdNTmZPV0pOaGk1bnJHclpFalEvSjFReFZoUTNsdE9DME9rTm1tZnN4d3lidXRRdjVlMTBMa2poN1RTZEw3TlJBZ0VqSWJOV2xaYklIVk5CTk4wSzlEOVpnbzc5T21HMzlOUlQ4NVhpSCt5eGlCOWcwcHBlVkRIblVtVFV6WEk0SjU2L3BIN0VqWW1jUGJzNmxqTmVHQ3crc3JTRWgrWER6RHhIb3dRUUtncjFVeWlnaGhWYitqWHZCMGlDNDJPalJDOEJpRzdSdE9CZWp2RjFUWDJEaE93RktLWDFZMy9iZ3JiVWpaeXBBeFcvRFBuRmNGODdWMzB4TlgxbkREWjc4VlRrOTFQTFIzMnM3TU50dVY2YWl3U05WYTdqWDNxNlgyNnFpejhBbUlteVVJK0xMeURod0JlS3IvelYzMUROb3FEVDMxaVllV05WOWVmMDUvcHNOK2xiUEpZd1FjWlRxWHFueG5Nd3didjN4Z0tZVnJJcGdkRlY2MVVhZ2psWjJicjFtMFpKOWpFaW9paDhHZkovRDBjZFRqd1ZhVmhmUnhVMnkxK2duMmZPajNMQmVUdGw4SXpldnpWRGdGNUNJeGdidThVWlREa3VDdjk2aVZQUzdRNm10NysycWo5ekhzOE5YR2plVXZlS25KWHg2VEd1VjVycmM3SEdOZ2dGYVVDNUFUT3NrOU5xaE1zMzNiU2xTWE9YOWRDMm1ZRlRCMkkxQnJRYk5mUityQzM0cDVQSjZjc204RVZCcmptMThUTkpvbmw3aEVGdUhnM2JDMG1XZlRIZmlwaTh5aWJiajdIdEdaR01ZVmpFWlJQazNOZkc0S2R1ZDlEalIxRjRlUWsxL0NFci9oU0tTcyt4TE13SndVZGRKRjI3d1p1cnBvcmpkQmpvaUxBTzl5NzVZdWxZSFIvNU5mb2REV01RVnNPeUwrZU5JNUtvYys1dFMvUDlWcEpLbStpMm5saVg2NEpYQWVrM0thanM2R2hKdmdpdENNaHc5cmw5NVNjU2g4WDJ2cXZPMWlwUmx3RlgyM2laUTRnZjY0ZGEvQnY2NTI2MmVNdVU1MmVHMnQvdXlsREFKd3RzN2pCWHUxWjhCb0w1SHlTNHgyQlBMNHptSDJpelBuWTMwQ3RSbi9BSFY4alJScFAwbXBKdkJvNmg3Uy9sWWJoZDBESGh3a09wQVVmUFlFOWlPK1lra1R6Tk5UZGVYQ1Y4TW9Zdmc1bkpIQnNPS0tiVFJucDVnUk5DeGp0YXQ0UGRvcHlUeDJwbDdCU0V0d0pkWXUzUlFjc0p2L2phUngySEEzKzBCbDJxK1lKSkkyRlVwWU9kcFNHNExYalpsejUzSkh3WVJVUHhFY3hFdmRNaUh0THBuYyt2VFFIek5pdkFNNWhlSS9ueE9MejZJTWcxUVU3d3Riajk3U1M3QWZxdmlKL2MvZEpMRmVPa2tFQ1BLZmdZWWFmelhtTHQwdXBlVGVwZUVsNkFXcDAvOHlidXFXVXdUVlV4bHNaNGZ1Ym94MjJpOS9KbXhMQndEa1ZlVE9wOThNdG9sbm1HMXhYNjE0UFRZYTRtVlozbEZ3bWRaeDU1MjNJeXZmdldiQlFjbzR4NVIvVmozcHpGeDMrcGJHWEl3MmsrUC9jYk5qNTg5VjI4am9ISlVxZ2hyemYxbUQvVmtuTFBNSGFnbzM2TXZldXlzdFUzMkIzZGkwcFRGTEYzK2Z6V1FvQ3gycFFsbWVSSmVNSy9aalVCOEFHQnFYOEcrRWt3MnM4dFQxUFNSVWoybVJnYnd4QUNNc0Fkd2JHTjRyWVVqMTNXVDlmdEgxbkhxT2NUTitZTHZibVZaSTZhTUhtNWVyQjNpMXpISDU4ZDRPLzZhaU9sUFUvVGRaVSswc0I4K3E5d1lZTm5nRThwQW9xYXhmZ3B4TUxJZWovY1QyODFqbzlXMlcrd25LT1N6Mkhsa205TTFoR1Nyck81MXo2TnJnNHYrank5b0UxeDZLWURuU3RmeWZnUXo1cFdud1I1bDdIRlM0Y3VaSkplLzBMVklnNFVkdGt2dEtuUmhsaWVVYmw4eGVYRlJwWmlQK0RNK3NrNFFmem9oaVJ2RVhqS1VwQzVjVCtPV2tRYmlQbVk4UkkxV3RHaDdJYjFTRWsxNk5SOTdVU0tSQ21sd1JHcUdWazRFWFVXMVRmWkl2VkVacG5EZUdYUm1YQVp3Y2p2OTdzaU9QNHlvMnd6bTZGdXhpb3pZRGV5NTdPT0pvK0xQOTdzenpyaTlaK3ZibnhENEczbWpDNEdwcWVET1d5WXJDd0NVVzhod2M3RDAwOStqNXYyR3BQR244UytoUjZqL2ROK1h3SzBKR1hJMmtlcmdEdzJBSU9STURBOXpCTVRtbFQrd1oxVWNLZFNsR0l6anJiY3dFZEI3eDQ2QkdPbUg5ejJOKyttL1hka2JHV2hVS2xFUUgwa1R4OEpKei9hNWpBMjlZZjJwS0l5a09EVVBEekUrRUViTkdkNitLTndsM3B5cTVjWFRhZTR1cHc5Q1ljMzNCckVjVSs0YUVrczVWdEowbEJCQTcrZTVEMzdHeHdoVkR6UnliaXpwYW5wVWIyeDdLQ3A1SnhESnZzSjZ5RGdlT2Q5dzlVVHY3WnJ2Sm9GdTBOMlA3VUhvZlRBb2NCNVJaSnU0MXA2NzUrSWl6S3ZoeDdVMStaUHZ2dmtJS3ZFVjBGa3JzQ3RLZnJpa0ZkZzdYK3JKYWlFN2I3ZXBpb1JneGZtY3lDcktnNytRckxJdFRyckRvMlM3bUpKRVZUdGVsSkVQWUJyUmVCVytSdlRmWEF2WGVUWmlwY3NuNjJTUlJITStrTXN3MWhFbktVdkNyZ0tRSWN6VU9qYzI3UGZMc1R4amNVTTVFS2NzYzRkYnZpSWM5dnMrWUk1V00yN1hIa0ZZODZXYWluR1BCcGJrMjlnaEdlKy9vRlNGNk1FWTVXTXlFemtGMWJSb1RyTFBHcFpyc3EwZkI1MDlEeGMveFA4QkpVSDZkZXROOTVhQVFjSXh3RW9aTmRyRmNTV1ZmSWk1R0dTU245RHR2V3ozVlZGaVVBUFZYMU1TcnNpUXBMK3lpWWtFZlRFMDFNYk9Hb3RSVUhuYUxhQzZxdnAxTXBtNzhMalJmTmQyN1ZreFY5cVIxdkdTSGZ2RFNUVE5QVEhOb2p5Z09ZOVdUUUJIbEZ6ZUxWZEIwZ3B3THMwU0dyMEU1Wm1zbWZqMHVxR1U1T0xLMDYyT2JSR1I5anFzY0Rjd2x2TEVRVFE5a0tBOFJuSU5Ocm9RRkQxbS9Da3FoZWo5cXc1T0lkOUY5QVlzamRYWXdPWTJQV0trYS85OWk5YUJQVlZZdHM2aUxzajhkUWVSUDVxY3BXRmF4WFN2ZDJBRGtyMFVHRkxzTzBJaTltaytkQ2ozdExoRWJ2WTNqelM4emsrL1ppSjVha3IwTlFsVTB5UFprdUFlOXZtYUlTRkd2VmhyTU5mdFIyUnAzK3VEQkdqZHVDMXE3OGJXMGU5VWZ4aUk4TVRwWWdlbnBIdFJsOXBFTEg2WnFwM0xDQmg2Q29hcmlpbHJSblNuY1Fld1QzbFgwa2l4QzJlNDN3dlV5YVA0c0hqV2VHS0NTekxKNlgveEduOTIwT294MTh5RTY1NERTRDl1TFVoQUltaU9CZVNxaWpKQXhBZ0I2UXRZRndqVGxCV1hVUG9xbXVyNjd6aEdKZm1Pb3pyWC9YVnpvaXBtZHRFQzlPMXVRRGdFRFFnZ0VPNkppanhXWXI2NHpyV05yV1VGUHBVeXVIRThKSFpMS2JBL0h5VGdaOU0xdG9zS3BQczRndjhpeDgxT2RUV2hCRGRiWUZFbnREd0pGZnNxbUtDU3lnd2JpSDNEdlVlYm9WOW16dTh4WDdQa3ZOb1psTEJWWlRLcnR0bVUzQjF1aVE5V3VuMnMrUU1lRDV6TkdMVmRQZDV6RGVUSjVEekZabkQ5Q0ozVXpiRklSMDg4Y2d4OEF3b0FMdTh2UHRMRmNaOE5WNk41WktLRFlKaEhHMlV4ODQyK203VzZnTWp0QzludXBsODRHTnZueVlHWVNzdG1YNkduSGJyNVRjakx0N2swaVRSeUJRRWwyNkRhdzY2TmZVYTFxbmJqVVdUNkthRUkyUzlrcG52dVBDLzBpYUxqWTJqY1NyQTF1RjU1WjFaTWpyRE80dHBMdjh2VHo2WHRlWmpSUzlLbXhKMjdpdEFMOGZOb0dSdmI0N0FjdnByV0Z5MllkTnNPdVl3eUU5V25hSHJ4Q3NvVlFoUGFCY1pCcHpiL2dpdSs3UUdBcy9BdUkvTFVpY2Z1cjFkRFVlUFBTdHJTb09ybFVFcXRqM1c4QnZaZDNBZ29iTTl3d1ZTY3BXRCt2UFdZaFgrMTFLYjhtYTRZQ3BOMjVJc2Y0a3hoaVZMYVNqTVlQYjlxRHgvczFZbU9JMjJNc0tlVlo2T2N0cTd4TFdwWmoweDhsK2V3MFRPeHd2bml2czk3L0VBR1VKTmZRUytFVFU2a05VMkwzVURwZENDT0JCWGdnMkZyL2t6TUZ6TytBbmw5L1VGUkRzb3Jyc3hxS0JQUWR0WGVZNUpCbnlMaWFBekVKTUpiVTZGd0dJR0ZuUkVtRFAxZVgyand4dTdQS0pJbXBRMWF1ZFFCTnVPNXhkYlhuK0xDV3ExSXV4Ui8rc05rRXJFTEE3ajkvQ0pYZVE4ZEljRVVPL1ZVTC9TOGdYeDdnS0pwQlRnZVFTcW8waGJxM01Wc1cxVFhrRzFiWC9wRjk3d3B6SjBrUytibUhKYWlRcDZyQzg2S0Npa2RtdWlPRDdGU1l1NUdPS0p1YmY4VXltNEpMK0QrY0FJRjduWk81OG5hQ0VUL1hqdk5PRkdWdk9VUjZaZlVvbjlaUzczdDVPRFlsVGRNRnRkWkVDNmd6UlJkRTc4UTZXWGFCQktNOTFoOEx6blU2S0tnWk9hc2tuR1NFc0F2ZjFpUy9YMGcxZ1dOcndPMm1tRTJnRkN0cHAvVnZxYm1WdTFzdVhSR1UwUXhKN3p5WlZtQ1cyNnIxY01XeFk3SXJISzlUZVl2WTg5ek1iY1hUVzNVbEFtajlkRTBPVytuMDhvMklPdTlKNmYzYXFIdlBzRHpSSmhIekdPWFdUS0RZOWpwS3pOVDd4aHhDODdoU2I3MnNJT2s0bGVERTIyY0lUQUlMMGlMMnhDUENaRlgzbitCSEwrZHoxWnhkekF0N1Jkby9Ea2JnaUxiVnM4WnhiczlTdEpReUIxUG45ZHA4aE9rVGxXeG02cTlGUHZmSkthTk9zbHVFSGdTbjZLcnhEbnNsUmVyRmNkWFRzQmdwSFpUTjJ3anBIbzAzNk1wRVFkbUQ4N3drc1B4dVBqN3VKR1VKM1N0WVNOUk1FdERpOElITkp4aVRucGlSb0Z1Slh5d2c2WW1Ga2VsMTNIOGcvVTFBS2VGYTBoV3hPUFhhWi85WTBBN3JhaUdSWTd2dXFlaWhVTkZmbDB2OCsxODBtLzdvS09uM2VSZm1kdVlwVnlpL3FkUkJKZzI4Y2RpWlBrZFMyQmRtRUl4QWtGWUdWdVlpUUJhcDl5c2ZjZ3JsbUFrRTVHVzg5VDJ0d0hzM3ZVdjljNW8vMHk5NTJCZnlDa2hKeERLeSt6Z01wMjN6UHkrUE1yamlFZ2U4UTFGcmtBbm1naEUraFJ2UDRZSm1XbjRqdCt3MUdicklWQzNFYUxHaHhZOVVVWEh5elplUC9QTkdzYzV0WHBhelpSaVdWM0NoV0hxVEp3akU2bmxBYXkzTkRSRG5PcWQ5Z2RVRWtiQWcwREtoTWVMS21BSWhWM3A3M3F2S2pxWGlUdFVBZFpBVEpEOHNNeDJuN0xNTGY2WFc3VVl4WXA4ZEJPMG9BYXM5d1NJVW5SMEJnWmp3bWVxa1dhQ0I0Z2FYRkxCZEwvbGo1Wk0yQ3dja29xRUo4c1RwRlVTVkEyVm9rYklMeE1tMFVxc0lpUzNKNmEzWEM1OHdSajVnZWF3bS9Ka3Q0UTl6T2ViSlRMdmFsYjJJNFY0NUhxbVZnK2txMVhGTjltMEl5TFk1eVV1NG1TbjBhUlFXKzZ3YTJ5eCtacjVpN1VhMG9UNXZRR0NsODQrcXFHamFCZW5ZMUhTNi9ROGtGWmdjMEJ6NUhzVkVjM1ZHRm4wVDM3ZHBOWFNmaFg0MjkxRDhnZ2NxWkdDaEJkYURCZW94cDBqTFE2bHB4ZVpJY1psaXF6VmJZc0NVaDEzMGdmL09EblJsYnJDbFZKb1FNeklqcVA3SnliQXVQV091QU1KNXVpVmM2ektDdHk4WGZVbW5DMklNUkJsM3p0Rjg2cGRGWm02SGF4QzRNMjFrVXR2NDVNRHA3TFhMOXZHMkZlZ0VGUGtzSXJ2SjJ3dVJxTG1BVFYxTWdlOFdEY0NrRS85Wjl2L2Fna3prSzJBMGtLRHN3bFhqUDdUbWJwUndHS0lGY0o3MFVEMm0reTgwQXJiY1Nyd0NjaHJjeDVXcUFSTUU2UGJvS0pmSXBhOUdjaE9kWWJMbVp6MGdUZHVQbUFKemYxYVJsdUVRU3RzemFyQU0rdTN1Z1duQW1zVWtkdnZVY2dHZWNXZ3JqNUE0T3Q5bFl1Ymp2M2pFc0RBTi9Qb3lvc1V6cm9xYitPT3UyWlF6YzlvRHMvZVlDdGF1aldjZFV4SzU0L3JBQmd3cExBTnZmOG52bzFTUTRUZGhnZ3BvYUJMUE96WENaREl0c2cxSkQwWmR1cjdzRFJmeWJKdkVGWlFUa1ZsK0t3SWZtMk5wOHJMOEdMM2t6ekw0KzdENjBZUVYyZ2c5Y0sydklDaGQxRzMrSDB2TXZpRUZBbDc2b0pzd0FkektzbzFmWTNWV3JScEM4STF1djNBUjRjQWhMZUUxcUYwTEszUXpWOE95RFlBK0ZjMHRKTHRIdFFmb25NMHFnYzJ0UzN2aCtIb0w1TXpwSVRiMGVuSlhKdS9rMkhxaGZJbzlKOWQvak95MHcwWUFRTUtYQ3FRNGNscnhEWlFuRi9sMWlzZkhTT3F2VjRCc1JVTGpmZElxUElONFJPZTZZT2JYekdiSTZEUzZVbmVSM0s5c09xSHJaM21VVCtTUWhFN1o3UFBYbUNkemY4d0pDMUhZY0YwUlY0T1JJUThSODFDSjIyRm1Oc25WdkVpQjBDSVEycEVaeVZnZ25BaC9VOWZEaTNRTXZqSmJLbzZqT0QxTnI3NVZsREViK1RkRVdNdUlhNElydUt0V2ZZV05ka25McS9zVFZQSjgyOWNVcXlvNjNBWDhESkdEdFZmNjNKL3hsZHFXZ0dmRnNKd1F0NDJFWTQwdkhqd3JIdHlrajZFc1RzVkkzWGREVkhnSDlFRXJQa0VmakszMnNsZ1dETXV1dnR0OGhDWHYyUDBLczhqdnFHbGNJUTlwOVlnYU5CdzlmQXYydkkrNFBwTmRVZkgyTm9YdDhTaUozazBnb0IwQ3QyelNsSldnZkEvcjJJa1JXdWFlQlJXWnljaGVvemJpckdFQllFZGYvODVxbE1tMG45S3hYY1hqaVpWM1RpZmo0VkFRdjBXc3kvTkpKUzloeGZ6bmJHVFVCenB2c0s2QmlYRUR0Tmdsc2c3Z0ZwcTNObCtRVlZheVdjVG04Qm9xMWtUcGdmS0MyWHhRUDBIaTdlNkp6Z2d1WE1KaS9LajB6QXU5OFlVQW5mNXhTd0Z4Y1d0OUc0bnE2YjFUZE01UVNGc1pneVVJaEtlR3ZXTCtQVFFjYXlNcllFZ1VCWXFtdEp5a0pIc1ZUNWN4b3BIMk9kSEMraE9pY2pvYXJBYkxXckhyWXF3emhuNHpEMlo1TDlzdWZxblhoKzJtZUd4RmlGSkE4ZFkzN2NlSS81dnlMMWNwSHRhWTdzZzZPb3d4MTFNVWcvM3NBdDFPR05WMzhYbHdSWlR5Uk9YcURxZC9TK0NHN1Bqdnd5VnRsRGNZUzYxT29MdGJEUjJZWkpjZXZtanNzVFNLcDErclhUbE5XRWJWZHRvblorYStqOVlnVWxLMTgvWmh5dWZxb2U1Qk9QZnM4d3J2bnN0QWpoNmx4QkpYMUc4a09lM2RNcjVZdmNORC9EYkpWVXVzYk9JM1FsK3RibGdnL2RHNmdYdjROSEV1L0h1MUJoREpYUWNWV2RoYjlpNzNFMzhQcjNCVHdsYXJVbzBOaGhZWTJsVjl6WEFsSGVGRGtBOFZuMkhHNGZCSk9lQ2NZNDExVzJnSUFYTlFnbHBUNnEvZ0Q4akVlVndicTRTWVZEaGpKUTR1azJVeW1vUHBNUmg4L1cwRzhqaWxiaHhoN1h6L1dmVnoxU3Mycm5sWWdkcVpwTFJ5Q0Z1UVQ3eXhod1kvR0JhQWZjR3h4Y1MzVlRuZWJBcENJVFIvM2NTNnIxS0Y2VUhXdU92NEZIbHYwNks1eFl6U2xSU2hxN3l5KzhGYU0wMHBGWFhCbUxQU05RTTNvVmNLQjBYVEl4cmdkM3BSYU5yM2xkUStqVUVaYzE1dFozV2srajduOFRXV0pRK0VNaE9WNHppSmxyK1Vhc1AvZUV6amt6RThqTVl0bW04dWV1b0ZLNDZKYk5wd1VuVXVqaEhwSEgwd1VkeERCdEhwYTVOUTNJODh5cDJNc0pmUjI5UFR0ME9YdG1zUE5mUE1XYUJXV0V6ZjlpNjJqTmNRRkQ1RUttRitORURmM256bmlTT2dtZTFZOXlVN0tQVnFOTmpxQmg1VlNhdG8wdnY0MVY4TSt6ZE5kaERKcjJsdjVSMGJwNkhnSElwaDR4UWhjcm1FekREZWsxTWVST1hDOEY4bGQ1TFNSb0dtVW5RdG9scEtMMmtoc3dERDY3SzMvRzJ4WWIrTklaWVd5YWhrd1JGVXQwYnFJZ1pIbFcyNXFsOVVxMDg0Mk9JRVNGWFJvNkQxcjBlRkQvY21ZNi9MVlQ0UUxpVFJQYi9NRjIxaVJiVldHM3pTNmpXclhQMjllV0h6OHVERXRPRGNvd1ovdmJ4ZUUxdHlqVEZ5MUYzRlMrWXhSRk9aREhMZEVNajBuNGNSOENLUWdsMFVGaVV2YXdJTWUrbW94UCt5VXpnZUdMNGNjYUVhQVpHRnV2dHk2L0V4bEhacXV1ZFJLUzF1K1BHZWhqSXFZWTcrMllscVdYcTRTME9YczJhTXIzWDlqQ2Z0SUl0Q3p2ZEtrVHBWZk9GeWV5RC9VOHp0Sm5xcGFlS0Nzd3QwbWdwNWp2b294dll1a3J2dWozcStMbEtnT2FQY3RMM1dMYzB1U1l2cC80bElCQXNWbEhlWC82WjBuamlCT1NXRUR2WmM4cWVPS3pOa2d4V2c3bXhvWEpINmN2NS9VMjhBUWZtZFFjayt1MUJkTGZJSkN1TVJBcHZlODNGUHhGSWdmZEJmVVdMU0VWRDkrMmdvcmFjWllLS1NRWHJvY3gzNG1rWXhNMWFob0lPWEN1b1ZZck9tYnFGYkJ4R05relFQc1BHblBmTk0zMFJPQytXSk9zemM5cWsvR0NzY3FYUGIrSE1iR29WRERaMmdLTDNNcFIzZnQ1MTFNeFR2dWUyczVzU3lmWDk2VGRWUHFQOHA0VkdRV1FjOFdDWjYrNFlMWUdGdVJ3QmRYQStzS2g3dlZ4RWNzVU1UM2FXNS8wMXM4d3QrZXl4cFB0a0RFSTJITnNXemRCOGc5bGIrOWNTNHZpbGRIQ2JiSkhheVJmVm9QMTMxV3JOVDNnZkJ1U0lKaFFJU0h0VGVWeldrbDlLT0hEYjBXRUJHYU1veFFnWEJTYTZtaFhHYnhxcHFFSDlYOUJQbUlMTk04YmRqUTNoczdvYm1PTmdrVVEwT1dsUWc4U0lJMXFlTjJ1K24vamJwQ2dEV2JFYTVJbEZES1dmTGZZL1hIRVloME5Dc2owcFRidi9HRTlJN2xsMjFTL01LN0xoa0g5UGJlRlBJZTVrempFeGtodnhhaGNYRjFFRWhCbzhlU0N4c0tNQ3pvWHg5MzFCb1pPNW9HOU84T293TVJoTzZ0ZXM4ZjFpVDRiYzF2NGF0UUF5SXRGVFNYYkJiY0l4OGhQODVPVitLZGpONXBLUlJBZTlRcW9kcG82WDdhRSt0WEM5V1hTMll0SzZoLzdDSE9TQjJxOUVLeStwVHBBdlJ1Lyt5dHJOeEdvQ001Y2ZXaEhwVnRDWnQ1ZUNKSkJRMFRrdWkzeVl2ZGF1L1ovS09VWXpSTWhlWVZ1UFNPc2l3MWl5VERDRUgrWWplTW5udlFmRFUveU11QnlsN3VLNXp6K0xrV1JYMDdvZUR3dmFwMDFCNUFMZW1Jei9TNm1RSzFIY2pJc2lURERybTRqOWlKQzZPa2tGbHVGcGduRDIveDIzSFhVMGNHbE9pNk0xaHBMK1JDSmtxeVVpclcrT3hLVENyTUpjM3gvRERoZ3hXaFBoRzFpNjd0NWo3Uy81akprcWUzbVNyNVBJMGZBYnJvQkJTWk1Ca1BWN3VCendCazBBZy92WDJOWTNmcDJrVDJkMHIyRGFYREZia2pTMTVBak1JaXhaRkppT0prVGlZdU1Qbno1d2FRd0d3N2xwKzl1OUZDUFlMdU4xNTdoRnlvbi9JOUZZeFhUVTVrZnNKajVIbHdDbEtpOUUyMjBhVDNKbUNYQkxKQXM0dEFvNzFVOGpST05Ma1JBTDFKS1czcm5rVGVOOVJ6anRSdHdDd25wd29UeTRsZHZNbTlOM0RBNHhlNS9ZdUFQTmZoaHl1akhYdVFVOG94dTVoVkJHZUdNZXA3b3V5d2VkRDhqWk44R1lqYnJHK2dROW0zZVZXTHZXdktoNEJuMXZ1RnVxVDRIWlpaS0VGeVF2U1F6NmlmS1FhNmFmd2ZxUXlIKzFOZDhCajRveU0xSGJsanRPbEhQdmIyOWMxYjZ5MkNUOVJsaE9IdlRqK1ZpSXJVN0FlWHBzSWdqR1ZKT2JrY09BYWNWQktoMnpWTkVYTkRzL2ZCbVZsUEwwL1RLeGNUcXZySS82S3FCYUQ3dGp3bkdud2FuUU5wY1UxQ1JjbTZWelF4NHRvSSswNjVHL0Z6WXA4YXpUSE9GK01VUGVqcVp0YUwyekd6ODNDcHQ3S3Nuc1FENUFHa05LcXRMa2RxcFZWM2xhM2Q5VzBGU2JObVpqYW9RK0NzNHpLRWhDcHI5czVEWGhkZW9na0RER1ZsT1RiUjhkTkN0YUpieHhTMUtyaGxIdUFOcXhUTUtqV3NUTmowRzNCSEk0Rnl2T3ZtY3hDYUdZQ2txSTNSMUcyWkcvNWRRMStOcGlZTFByamIxRlhqWCtkdGxiQlB5RzZHRTJJdzMyd2hoeDFtK2lQV3JqNVFOcU1NWmxYZjk1enBBbmFxSXRPR2hCN2U4RThURWkrREt6b1lZWmNNMUFMUGJ1M2hNdXhCUnRCYThMZUpNRUZGaXBjOVc3cjlmSGZSbkZlZy9EOWdFS2xtdkNNMEJDd3lROHdJeEphN0RZTEtTY2YyWHk4ZkY3cEVOLzdpKzZXcDFLUzN6VC9xVWI2eDlGNHZBTWpLaDNkbm45TSs2VXQzazNKNDNNekdLMzhDODRlVUluY2g0VWFWdFErK0tQb0g5SFE2S1VraEg4alk5Z0NseWI1Zy9ZTnk5R29HZ2lRd24ybXJydURXS2NvU1YycTNNWURhdWtQYXhJM3hwOWtRdHM3c1prcmlwNGIwU1gvMktEOGZZN2ZpZ1NMR0g4U0lQNkwvbHdFaFlXbW0rOWRJbmNQYnhJdENlYUxCU2h6SVpJOHFGcU1MK29SaThpKzZaUnFpbzc0ZUI1cDFtV3hONWVMYlV6K2ttUDBIbDBwZG45Y0ZWeUcvckJMakRUYjF0dUFma3JENlRXRWFhSDFFcWtiWXZwTzdWR0JoMUlSRVZMclZleXc3T25UcisrVk1ENUM5bmVndTdlUWdwMkhRUVZ4Z3h1ckRLeDcrVnV0cFlDMEsrRGNFRVpQWllJWmVVemRneHRRMVVpdjRRd1A2b09qT3VFOXV3RCtpWGdWMGI0NDZ0TnczTHRMWGVlNWhRZkd3ZjQyT01uSTNndjFSS0tvMEhsWTNPNTdiejlDbWZnRmFsNFY4ZENEOUZkNlE3VWx2RWhlUzJZVlBmN2E2aG5OY0tQRU5oNEs5dzFHVjcwazIySmt5ZGhRV0pXNE9LU0VCNUdrTEtDWnpoSEJuLzllNWdjTGZHZlJDVGwvamhmMlFqUFdkNkh5QTcwd0w4bW1NL0RVelBFTTI2bG5oWXhjSm1mZXV5SmVWZEhOditBVHdBZXJFNjRTcXMydVZTK0RvMEhWVWlTT2dWSjMyV0ZwallJMlFyeExsL3JKR2JtNkd1dFZDU0YvaGxVUkhZK2p0NGUyT0VCY0ZTYnlyZ3JITWJZZ3ZMdXdUKzR6U1NrcTAwZHhNdFFUVlJJTnJDOXFFcmlxMFlQT3pKUzVtWU0rVnBsaWRrYjlwWDFJOGw1bVJYVkc3YXd5V1FZVWcyQW1BV1AzSUpTcENCYTZmTW45bmxxdHJ0NjZLd0sxQkdXTE93c0VnZ0hYZ1EyeFdvOXNlMWxkekI3MlJQakhJYnBXbzlsNWsvcjlIdEpyQk45YVM4cGVlU0piRUhGS1R2RHdNR3NhZ3lTdVVBNnppWTMzUk8wY2dSdVIzR3BMakNueXZOU2sxU2UyaGdISVhORWZlUXI2UDdHd3dqcm14RS9nQ2kvV1MvVVJqenNTakxmWkRRVnQ1QnZNbFVScng4enFKWUJSbElKdkN2WXI4NkxxeWxveFp6aWQ4YUUxNDdZVWdma1F6YjNvVk9sSlJLNjhHT050SXk0TFgvcEhOUmUrKzZOR3IzSTRjdHdIeXg3R3l5OXdGT0k3MmUvU3B0K1dUUFZibE9YVmJ3OFZ5cUpGRWpXMnA0OEVWTEtPQ05BNW14NTZta21xNVUveDdIQmJoalQ1WDVBNllKekNpdjAzTlI5clk5RGFyUWpKLzlNTm1WbmhhVWlQTTNxQktsQWdwYk5McGJPTktYeUo5K2Y5Nmo0S1JUY0NKSVRuYzE2SHpFWXliMTM5L1UwNjB5RFVINnJNZVNrNzJWdmc4NkFJQTJRWVFtUXpleldxVWlDaUZTUmROQU45cWlEcTFHNkFWNnNDM01RRU9WV0lGVGxLeDBlNkhrSXJ2UHF6alNCbm5uR1ZoVzUyOHFpVVk4SG0yVmdDaXZFRWlBcnpmNXVVRFBUWEFGSDFKYWszM3h2NlVyeUUwdi9LOEJKMHp6ZElzZXhWeE1jL2lBNTJqUDVzQ2RFb0xxemtQb2FadmkxTmpVSFNHbGZ3OGs1UTIxY3dCeGJ5MDN6YU9DMkNaaUt6aXR2alZ6TnlSbmxnbnM5bjJQbWpLUWgva0JoOHlGUThlRm5UelBCbTlQR3pCN3p4NWYyVVZieFJ5anpJUGdwMnppSkdYSFFNZmhtMmtoMVpKd0FwY3doSkJ1VEhrSjNLenp4bHVPOG5NZStNUVArYytrOXljSFZ4cEhkTXBnbjVJVVAwSHNCV3BtTnNJdHcrLzFrZlR1eEg5WU1hWXpNOGUyZHp4TlkrK3IzZ0tHb29sZ09pWlVLSk15MzNMOGJXYXpLZkRDa2dYKzVWc2dTNzdpcVhNVFNhL3licFlHSmdCdjFJWFcyOVRiOTlSVjdPcjFlVjJhcEFHZlAvc1Z1Mks1dVQ1aGZvSnNEVi9COVlRTnhuM2FCTncrRVozSlBrbEE5WGRGU2pVdzlGb1pyait1Um80MXVKNXdJbVVOaUcybUdGSDJZdVA4WVFJY2hKYytlUHBRS01YVWNoUHZhdHlETTdaNWpCOFRybGM5UzlMZEIveG9mTk9MTmxLdXZkVGt6djBzcVkvOFpZQy9jR3Z2dVNydWVXTnB4UmlkKzNDZnlKUEZNc0k1Y09hdnJGMnRTSlJGOFJUZC9WM2RtaU96RW84V1ZRRDV0TEpKUVZ2RjdnenZlL0oyVXNBLzNuUlhvdTRWNjdOV21vMVRjbEtEMWowNThsMXRvOGxsT1F6a1B2SXRvc2RwazdQN2cxSXp0OTBwOHhVM2RqVGtra05QZGRKaVhCT1FoanI4cVF2NXNJSmlhbTVtV3B0QzBDejd3Wm1QckRIVy9kOVAwbG0wb2xNRHhOc08yUHdUaGp1R3ZKSTY1Z2FwVUIyZThKTlNrTFFqSXlsRUEvYzFld21tUWRnZXJ0RHJhQjBFZU9mK0QyeHFwVTFydTdoa09FQmF2YlFneVZpQUtwMUdXdEk5UXgreXdQVHZlN3Z4aTlrenhhU2cveFZPV0hyVitYbS9lK093NFJIY1VzeWgybTQ1T25jNHRwa3FWYWhsVm96NmtLV3F4SWRPdlBqVmJDQThkRUx0OW9kdkNUN3g0Y0lSaGlOVHZ3eDJ2cVQwRU9jRmRLeHpFN3RWWGt5SVNpd2kweXBhaFRYb3pDM0Jac0FuNThvSWMwSTJzUVNpSVFpNVhhYkg5OGVickpITmhmQjBVeU5vSzczd0lMelhyUytJK1cxM2oySy9EdEc1eVZudXY0Mnh4R0JUTGhUczBoWDFqSytHUWtOU1NZcytmSE5ybE1oUW91MDlzYVpIWUh4V2tjQ0xEUGxza3YvemcwazFKeVBwZ2ZuQ2Q4R0ZUSjRMc1FmeEFYcm5meFdaMTQrbHBoV2phRDZGbCtJN3JBWVg1d1pCS0FibjhXSFNPc3cxVFI1ckFwSUR1cHo0OEI4UFpCNloyMVMzMkg3RHJGY1IvWXMzNW1JY1didEFJcjI1cDhLK041ZWFtcnlES3ZDZmNRQUJ0bUhwaVlzZ1RtSWlOanBoVW9McUNOOGdQamgza1ZQOG1yem1vZEFkZ3pUUm41ZWlES0xDaW9SUitubFNhWXhGeXNMY3VaODBhb21ZejA3dzNTbzJDWjk1bHFFQmIwSDB3OFNnUjZPUzVtelBrY2k0eWp4V1E5eXhJM3ZNbmpYYjV0ZmxiQngxWUJNYXo3cXVjdUdGMnpKa3BWQWhhRGcyb1lxbkNHUW40emRmWFcyRS9DbWdOQTRQOUxyQms2NFVvdnlhU3VpVkxxN1BMc3ZOZmd6U0hXNTE4Uld4TWtjbzYxdlFQb1djMHlTZHJWd3diemMvT1krWlBXVFdXa2p5NEF2Y1lqa0Q5by9CSDA3RjhJY1JjalRKKzlqYml2STRIYnRNN25veEFPYms4VzB2SDg2MVF1RVJUNnJkWVBrQ01mY2JrRTJxSlFhcGVFT01zbmF0RXFZOHlCTlVpc3UxTzZLQU84RlQ2WG9sM3NOeXMrY3ZSeEozT2d4cEFtY0Z4Nzl3RFh6UXEyc3F2Nkx5cVZsQithWi9tTjAxSnVhL3pQZmpDOURhZ1ZDQ0Y2dFF5NkFpWWJjS2FhY1VYU1dZRVFLMFhhV1hyU2NHVnBveENLTzVEMzUyYXlrMXd6ay9Mdmk5eEt0amwrM3JUbXdxbno3NWtGaVc4TmlsQzNnVHNGYU5KZStpMXppUlIxNkFyeEo5OUV0elVUUys0MDVvZktndFdtR1Q0RGtYeTNpMEZWRWI3SzB0K0ZkL1NvNDh0K1RCODNCZXdBbTFMSEsxbTBoZzFFcHZML2J3OFlsQ1BrNTJZTDh3ak1HYjdPc1pxdXpMWVBSQlhlZXRMWGFha0xJcDllVm54VmY0enp1Vlo0MEIzd09XQm1zY0k5aWdjeXF1dEN6a1ZrS2xNdC9VQXFXSm1OUGpYOVNjaTJwdldpSWhHc2M5TXBBM1VLOFExbzcxaE9aNlpBRVlmVmMxMi92Z3NEbzd6YUZXZ1hMVGg0VFJvUFVHRWdPYm9uY0pocTFDdmZXa2xEU1JsU2FrZW9tcitUMi81Tm5RdTRKYjFTZGRWN3daUU9GT0ZyU0dqcnJER0lIT0hTbE4zSmRNdjMvMFBVUXhXcFJXVWpwTjhudWh5eHhuSzkvOGpLd3psME1xeS9zekZ4ZnBibG4xSkJpa1YwcENIV1Ixd3d1REV3TEIxSkpRNndxRmhWMXBPMXVSb3BHcjgvSmpWL3RWcyt1ZURNTHcvQkNNblJ4enF4M3QyeUlIckxoWmhGclNWNnQwK0hXekdTWmZ6bWQyN3ZzVWhHbjJGbU8wTkRVQWJCSUF0a1RROUpxYXkvd2tremNOM2tROUFTQzY4VG40VTlNRDBDWTFJR3BNU0F1dXQvQlpscXhLaHZSZU9GVUUrbm9YMU1OMlNDNC9ZcGpmMk9oa0R5a2xMT04rTDQreXFWYkpVOGRodmM0UW8zYzF5MzFidU9rT3F0a25INEFseEZJK2RvcnJjcmpTYVRvd1ZNNlF1SXZNNEpyZGtxK0pDNFlxMWFZSWM0ZGlLRHFnSVVHa0QxVEMrOU5jN0pJa0g2S1VVZVlicjREWkpHTzVQSFcyL0M0c2VFTGRGNHp0R0U2SGIrSWV4TE8wb2Z4S1ZUL0xPRitXMldvN09MSFFPMkZ0MCt5MWlNYXRjZ1k0ZHMzVm5vNDg3cFUzb3BCU3czWVg4aE9BWUp6YjM4cEs2M2pNVmlkZVJnV2NtbmZ4RWZ4eWl2NmxzcmNoQXAxaHR4a2dqMUFyUkNidGRNeEtneWhLRVYyYWFaSURhWEE5ZkMxdGdFamJJbnJIdE94aGk2dHNGWVhOelhGR2tkS2VUMWdDYkRPTXF2S1VKc3UrWGlnTWEwdHFOMXVlZW5RaTdXZXBLV2tSUUcwcFUvb3JxTFZVTDFHWUlITERzYmRWZUtnTmNqdEpUZGljZkY4RlM1WW81SVRzNkV2MUtyeEJSc3lvUDZZUGo1MDFUN01CMHJNQS8vS0hxcjlNaWpEcXhOZjRzYTI5UGprVlhWQXU3eW02SS9KRWErb1lOYmRiM0lLS2ROSi9tVWdPVGxrV0EreS9xSVd2Z3JvOUZCdDZKc3RReS9VMkt0N1daQTFlMGRJckttRkVJdzNTN2ZmZ2JJZHRvT29GUlhkdFFncmpiYU1BNE9jR2xlRVl1QkZpOUloZHo1Z3NQYm4waGsyYlhmRnBBS1F1U2pJNGo0VjcrRE5YdXVUV1pnV0VDV0c5b2VyTEdSbXozNW1zS3dRdC9idVlNd0dRNEZac0tDZHNkaG53Q091QzNmcnVHRHI4eHJLcUxDRHFDYmdvVHNZWHJQdjNRVGZQZU5uMTByb0NQWnRYU2RFQVJFQ2xyRldQdVlKUWdXcUdYVzM0Y2FxTVQxVk1tcEY1MXFWeFNISi9wZ1kydkhoVlRPa3g2Q3lNTHl1VXIwaHJMNmdOMG9XeXJYdlp5S0JJb2NQZ25obXNXaEgrVitITFp4dHM2czRNWDBXOG1odkpLWjR2ZGtrSXpTZVE3bTUxaVpjdzlUMzFhQ0hJYU93dWxPd1h5QWVwZ0Z3VGw0MzFSb3c5UHFnR2tPREJDdk9SaFhMSlM2T3VLMVlJRXRQampSMVNEVzFGWjVzNGJvUFlWWnRIUWdEYWlSN09BeSt0N29YUTZPaFg5OGVRTWk0akpLSUVIcXdTbWxaVDdiU3I3QXBWZEhkcExRNEx3dXFKQjBSMTdrRmR5OFJMVktvdjJuUGhEYU1nMGxBNDRpYVJjZHpSbEJOTXVBei9RMjVtMTdNM0pyQzNRRmRvcGdBTC9CR1k0cndOb1duRDBvZFEycU11amdEQVdieHFZQitUTU80d2QzVjl3SWpyYkhSdGZQRVVwOVkvUGtyc0JydjF3Mjh0YWtOUlF0OWszMTV5SVZJTDBZNEpmVkx2SE5Dek55ZHdHbGNvcytSVjZwVlFPZU9LSWlnUG9STU5ER2NEZHVJK2Nnay9pN21McUtNdmcxS3hzNUtoRjRaS3ZBVDdZTklFZHZxY3BNS0ltbVdFZXg4YUIyV2I2cGxKbmVFd3N5ek5jWnBqS2VDdS83RGxUSmRNZHB1SGRNZ3V5cFg5dERqTXR5bGhEcEZnSnRRSk0wM3VSV29DMCtIb08yWWZzdGZQeUw5a1FhMFp4TVVRREdCSEJQK3NhQ1FlblR2cS9MRXBycFBRaUJIMVV3ZGt2OXZ5R3FndW9aMUx3Z2J1WlBBRmlOaDJpSm5lcVZsS21JcVIxYmhsaFlsYmVuSVRJVWEvMmZxNXN4T05CN0JLZ0ZQQW9ldHo0SVdDREYxVjN2ZWRIVUUvWkN5V25SNEdZK0RPWkhCQkxwa3JlUTc0QkNjeWVkRlROQ1ptdkZmUUV4R2pvR3F1cUsvTVFaNUpZSGlQdHA2MTNLN2hJcWhnQ3c5TGx1dzlXYXBHS2pwYW12YksvdVU2RFZzVTUrUTNKWTRUSCtDbW1hOWdLWjNnNVlmUWVnZmYxQUlaZHFNQXZEbWlqeElNY2daL3F2NmU1NDRJd2pZS2NkUitlUXRiWFdCQXZxdzhIQjJnR0VsZyt6L2MzVmNCY3pBd1pQSG4vUXh2SFBOVXUrN0xKdE9VYmwvcXFINWViTVVuK2pWVHVJbFMxc2IvR0xXOEpzOUt4ODM5WmxRc09lMkgwNEZUNEptUVNMOFcxSzByNXpiblpHVEJ1MXdmVzhOVUUzWmpLa1NoelpPSmgyNDJJYUhudmp2T3ZrWUZYL0duZ0FSZjlJUzk1WWhaamkyeWk4TkVRdDNxTjg0YzVqL0VXemJUYktobE1XRDFXQndKUGNCalB5aWFzUG9uQXpGTmhGT0V5MC9PQ2Fzb1orek1nR0ZBc1JPWVpBSDVmM3lZRytNa0dUWThSOFRNcnlaRjNyYWJNOUE5QlkxOUNnMDg2SFIxa1BTaVlJSkZXWTRkVHBxTGhKM0RLemNDQUw4d2xxYldHcVRoOUFkZ3VyTFhLOUxHR2U5Uk40YXYvRW5TRjVjeWg0aENZYXh1dWNMK3NaSGhPVXIydGRjMk1yWEhoWW1pbEJQZjhiWW9iTXpZRUVZZTJJSDJlcWVubUY0Q3puMnpTZEU1WG9Cbis1TGIxZEFkQXpRaTFWMTdwTzF3NmI3WHVrZnN0N2o3REJoUnp3eDNmZkRYUzUzc21nMU9kbjJhN016cHErbVJxUkhJR2lvVTNCWHR0akJ0M0VDT29hdzh5NE5oSnEvVDhUTVR2SklGRThWemFhVzdoQ3dJV05UV1JKY0R3dFNpalFlV3dXb2EzU1pqQkxkbVRTbmh5RVJJTE5KcXFlQ0FTMGsrQzBqUHk0U0lBYnRwMEFJNU05YlZZczd0d3NIejdCQ2hLdUZTVVFlaVdZK3JiRWxrQzZ0ZzYrWWJLN1h1bnU5K1BRRkVLMUdSMUtTeU43ZmFjbWtJbTBMZ2RLSXhpc2J3MDRjS2x5QWNJZ0swTldTTG1WdU1iSEVSd2V4anRWYkJvemJRcnhNanBCVjV0ZlZDcjBnREZobSt0bUhXbkwrbElsVjZXajJ3TWFSaXBjZ3ZCdDBmekNsS1hSc2V6TkxPL3RYVFJnWEVxVnFNRmdYWHAzVnczaFlVSEoyTThhejdMblYrSDVIdm5sdVpUbW40dDdmcmJoZDNYMjBUbU1YYm9vSGFRdUE5dDQyQmJiZ2xaRDVwcndGSEdRZlZJbGQ2WkxvSCtrWmltWFlsRStRWTdCdVVkejRkTW1IZGJ1Q09RejdXb3d4L3ZQRC9tRFMwcGFkalNjTmpIVjBRUXpIbUtEa0t6VzJiVDRLamo5NkErOFhpcm5CRmJDWU1vMWhuSzBqK2JaVngzWk9qdEs5ejBJeTFwcUZvYXBBZlE5WHFIS0VJZDd3NjVwbVBPSENKaHJaNW5odWh3OHZCWjBrb0FIVE9xcXRIcElmOXBneTE4NnVUdldTQU83aUg1U2ZiMnFzMmExUk1rSkg5Mll0NGdRaTI0WXZ6S0g2Z1ZITVlqbEQzSGh3dC9BNnZpUVlaSjhOMi9zTFRkZ3o2QVd6QkpVbGl1UmdScWxaU042WVFraThsMUl0ejRqTFZTMlBPMW92TlltbzJZNGE5UzlVRmFCTVkzNUdBZDIxN014L252a3Y1c1NiamhRcVJ0TlI0a0Z2UWo0MWo5cy85WlQ2dzdjZWJ6cEljTDFpbk4rc01aWW91cy9tSXBMSEhQVmVEREJHTVl3bmJXa0lSSEw0enhQT0Q5bUxENGhMN0dmSWxOUEpQRFcvcnp2YSs4M29rSXBYTjZxN1JuQkdra0taR1hHQkZTbDAydTN1cFVwRzkzOG5hMm1Ub3JEWldibWt1ZXRUK0l1WXJTVWdWWEdMaG5LcDk2clVWRXplNE53RFFDQmJVbVRwTlFiMHJQQkVDS1J4bGprZ3doQ1NjcVl6MmUzZ2dRMnF1VnRwZzhHVDlmdDJqMnRXNTNzcmlDR1ZoSkdnOXNrS2lxTFlUY085YUVNVzJTT240SVlmelhJNVlRdGJ5Q2l0RXRZemNydzBMeW9GaUhsbDRJVzc2VUJ0Q001U3IzSnN0RmRjNlUrVGtYT3hEU2V1Mno2dmZoS0F0OStJR0dLREdnOTlBWm9TNXFyRm5LdThRK2JpeFVtdjNjKzFJZjk3cDJzOWN5TG9Ob2l3eGVabU8zUmFNUUM3RmxRSXJENzJteHhrVFZ4NldDNVlhRW1sQWNrSm1jd2EvWko1bStWZ0RGSjFod3RFejF3YzArZjdONEtlRng3eEl1N3BLc2NVRVUwSWQ1SmdpelhWTUF4eUFHbmtNUnRSVFNmcjFpMlo3L1k0RlV3M3l0Zy91ZFF5UTR5ZTQ5Z200YWU0OTB2YXNjSWtwQ014WUVzdWIvV0NhOHZqTkh2OHlyOG96Q1BxNDU3cmpIOEl3NVFSUlVzNGZialBSVk56TTFRU3RRamo2bmtZaDgwRm5XcHVaR2VETzl0Ym5kbEhhYXlJZExlT1ZyM2tFSFQxYW1vZkh2SUdLUSs1cmdiTlR4K01xenpaRHRMTkYvWU5vUkp1bm5YUUhkc2gvbDI3WTdIcnFzR1Z1S0lCK1Jnek5VYnVaM0dnMUlpU0dXcDhlUGtqeFJGWElMdlRwVnBkRGtlWlpjVFc4T2FwQjY0L211Rjd3Z0Y5NWRXOXhJRWtURlY4bFlxK3JpcFhFc1N6bFRqNkxIdTdVaG5WZ2pEbkFmMTN5bm5UM0FsK0NWUHpDYVpMNEVFZmc1Tm9lSkdxM3doaDRnbSs0Z3FLVVplVjBDOU9tbFh5YWVJU2JIeHRiN0RoR2t4Rm5KN0Q5SUo5RWF1cUFvdXg4T3B1cGlyY0dpOFF2TDFocTBRSURaR1NtcmFyaWJjNlNVbFJ2VkRhMU43Vzl1cVIybUNKT0tlN1NOdmRaaHUwakxrY25jajhOWkIxV2RqQ1dxeFZBQWJOcmo3VGFsWFZISjl4WldoNVhrRjBET29qNW1HVlhhZmd0c01mV015cnlwT0VKVXYwa2Q4UzRaT1ErNHd0aXdNYUswc0ZaVk1zbjlmYXd4WDFuVTFGYTJyMENqcDBrN1FXK282OUZpZ3VqM2t3UmNjeVNKdVV6dFRZcGpad0U1ZVNMc1g2VS94S1BNMWlyMjY1S1g0QVRjY1AwVXJEY241RXhBL25wYndvTzRVb05jWWZaTHg3UkR3N0FvT1VpcDFUdjh4TzFFY0lIOStiWGhwdEdWbGJ4bTNsUTl2cWdpRnhaYkJWbThyd0RUNXl6MU9Ka21EbGthTkRUL0Z4bnQxMU1QdlRpK1B3eWVXWFVtNjVNTEtndk1JUHBsYzZaNWJaNFlIQ05YNEpiRzlVQjNJY0MwTEE0YTljT0doNzN4MEIwdU54MWRORkVTeVI5M2NuUDNtbVNJaWdpV0hUSm03ZERVWUJXVVJ2Z2JWSCtpTS81ekI5ZDQxNXlQSyswSU9QMU4rejZ4d3g5SU95Y3pwMVYza1lRbUxNY0t5VVJYZzNwSjVDRG5leDgvWUlYWWNsamR3T1VzbUNLcCtRdDRtcGFRNitJQUdHb1haQmc3b0VhdFU5RHhqRmxBSlJWSmdWZm9WTlZaM1o3Y0VNSnE2ZG1MT2ZOclJuTTVzbGJWYnpaRVFtczZTdGpDQmM2RUl3QU96aDZVdHdHbHFQRUZNU0tTU2VsMXRTUzFqc3lNUWFhQkRpWjdhR2JMbVRHeDBMeFhnUEV1dWNXTVZ3eS8wVERMdW9FcGo5Rkk3dG5RM1BnbW9FcHBqMzhXUFZ3a3hpU01WREdkcFFXWFhsajhQVXNaanJNOFJuWmpuaVM5NE9TZ0w3akx1SDE0dGFCVWR4TjJSMjBrb1pjSFRFWDFGSjJETFBnZ2V5NkVTUTltUmhsMGpzSVpOOGYvV3JoY2tseXFOUitFRUdyeVNjcFE3M3dTNGp4SlpaRFVKZ1R6NFJ5NmV2VGFkaXRGaU10WXpXSUQ5VCt0K2UvbzVacFdLeWhNd3c3T0NOV1BsbkprbHM1NG5qcm1aa20vZTl1SWVuNGlhSjBLSEdtNXNVd09vUnk5ZG94ZWhtN1BEamhTODhKNHIvb0g3ZTF2MWFTMklPaDdJNm5ZcmNGL3JhTGxNSEtETTVmV1pGNm80czZodiswSUdOTi9BRmdWd3lMZm9WUWkzNWcyMWxDRGJnZ3RhY29CTTJIM0w5T0FJaU9ZdTc4c3d5aSt1YWlTbktPdmhPOTFSS2lyNmlJZ0t1TzMwVFpUV3R6cVJYVTVxcEtRRXRGT011Zko0QzdScGFXck9MRmpVUDNPdGhPN21GUVl2NnJ2L2sxUFcxT0g2TFNsU1hraHlvU3NseW8vaWNLckdrWFlkWFkwV0RGaGVmaGFVZVpEc21ib3hudEsyaFdaenl4YnlNNDRDdU1taVZtSWtyQldiQ21GTEgwbzUxbGZpM3d5Y3VvRHNQViszWkEvNkFhb3VqZmdEZk5vQ3ZyTlZnS3VQVnNkdTNjNG9TaHZaVnNCMUxPN1FadUJOeUFpYWhLMHJVQXhFQ0NwOUVnRUFmeTZRUXRRb251amI2allrcWg1UUYrVlBkTTJxSHRDaGdwK1lpRVpMbVYxQmFYeDZ2SVBJSGZtR2dSZFVoYW5GbGNLQXQ1ZFRDQzk2VFE0N0lRc0lwYUgvdVhFQVNwWU9ZTHh2dTNMTHRRcVlDbDBhd3RQbE5ZcGJESEpFQ0dtOVpnc0ZMTGxDR3Q4TUgrSytJVVdoUDdEMUNtZ2IraDJnSVZURXdKdmt1VjVGY281aXhYS2VQNDl3bktReUwwc0ZBWTdLZC9ISVJqbXhPTG5tMDIzQTdmcUdZejBuZ2hhNWloK0xyZ3ZLdWh1d3lGcnR1bzZodmx2NnJ0Q2I0TXYyTitJRUlvZ2ZxMitPVGRVb1BCY0M4d0hIRVcxWG5BNm1aK3l1SW1wSjlrN1ZWOTh5YzZoZWlxMzd5MHNaQmJBaExGdi9LYkJ2Z3JUMy92TzAxd2MzZ09mRkRuZkZrbWQ5eUZGcXFodEU1bU5PY0RFdVdUcUlmTWxjQU1Xc1BPTSt6Zzh1c0dPOTgxZ1I3Y3A4aGJ3RC9OWGVaZVh3aW5rVmRSdDdDaXJ0UzlTVkNXK0RnNGZyTjNDU1E1cGpOSjVmdWFybDRkMXFpeTdML2x0S2s0alU5a001UU5YKzYwbjRTckw0UGM5L2JtdHRXbi9ScmpTenh3ZFl6SjlnWjc3ZytsVmk0R2RnN0R5MStSK2V2enBnSFRkSDNITm1tWmtlaTBsd3N5bXVCK3pxWkluMFcxRHhLSGs4Zy9CUSttS1ppcWlLQ2R0TDVzbXJxd21vYXJHZEdhSkREaDBnZGYzdkJEVGdKbUMwaHM2OUJ1Rlg4M1d3Zy92NlJvS0hiTEM1SkhQVnRCakx4d2VHR0dENFRzOEpFN1N1MldKcXk4TGgwM3BGRFBRRDZCdGwzMmpsVzVza3FOVjMySThweTJNYWFEMjFqYi9SUVRDR1BlNWxxRFVtMytGaEQzNlZQTERZWjZYNmxwcCsvZitjMHRPWGZiRk9jUThOUmFHZTB2VUZ5MzRVTjlTR3Qzck9LcmkrNzRzUE9mVGtEYzNEVHhMWStGS2NNYnkzYWh6blhnYVB2eDlpOTVtNnlwSWQ0VDkwUnA5TWpOTEptWU5tV1BsYmNxSHZ6WUQrbk5kS2NxUTNuMnZBTkZTNXExZnh6a1NoUUdVazV5T1ArNUlHWDJHRXMwNXZseHkwSG5SZnFISHJzVEQ5eC9LdnpNQ1NuYWZEaXFXYW5Gc0k1ZmpPeFpsVmFzZGdoeWtTRUh2b2EvMEJzYTJVV3BBNnIyMTZzYVBlWTlGWWYyb3o5bjRWa2lrRXYwUFZldkZkYk5melRteXcra0xpN1RPSEoxbmhmZGdISXVxWUxHSjRsaEh2QjRUcmVLM3cyelF0ell3OTRFNTNvMEw0Si9iTWRtMzVaUHdUVkJOeGp2b2pKakFOYTJxemFoMWxjdFVEc0t3RnhjYlBsTTJmbTlRL3lTY2xqRDlpL0N2Nllab0pmUEQ2ZWdoeHp3bkpjOW5GUlRXelVMcDkyeTRBNVJlRk16bzZtSnBqVk51ekVlb1FIZjFCVG1WZnJkTVVjbk1pNGlXZTZrbGF1MWhtZFhFVDdla05EOEE3ckFReSsxc2IxMHE1eklsbGxsYWdIa3JIRDBzZVp5L0FiYzJvN05pS1FhdlBFbEhjY3FuRzlLS0I3a0NhTTN2VWJvNWpzRk9tOTJRWU51UmZLWjBOdVZ2dHZrMWVldUhlN2JKT3hPT2ZIMkFncFpla2QrRCt5Si84VHgwTjFiWGplcGhpaHlSSFZ1QXdJcHMveDNJMlVwU0hYejlBOEdPQ1VPU1d4cnJlUEVoT0grczc4Q2RidmlaWHhYOEJtK1lwQkNPQmpVaFhycFBnNUYxU0ptRDNqUk55TU8rQmtyNk5sSUVidng3cDRieGZ2bWJQQ1NCaUNYQm5DTFhCcTdNd1I1Q2ZQNlhoNnl0NWQvSUlHbHlsaDVXT1JTckNJVGwydnB5cTR0c3ZFNm1Ec2Q4TWFsaFdUWVJlRVdRNHVHWGdPdkJtbkU1U2t4M2NZbEJWMzdrRVVDdlRPb05pVHFDMGF4R2JMS3dzVUxncnJhOGxGcS83WGlpM1lhc1BpaUswZElqNjN1NkNISG1NdWhSWUorUUt1SHJmMUFjTGd2U1ovNGo4U3ROaFNFbTZrYzRMMWN4Umk0QmhmYjh5bnA2SVRIUlZtUG5wUnBKNld3NGRSWGRxeC9DRjFDQ2UwYkxLOWFXaWxpWTdWbUVRdzBqNS85cTJ5RnBZVlg1VnBjcUtOZkJRVlR0ZTh5U1VrMlZhZGd1eStBYXBmUHBtVndTaWV0UGliWjVWNkliSmpvMUlmbWl6eVhpY2poN2FDdzVGT21XZFpCdUhIVlVFdkMrV3Z1a0UxRXZiUFJTcTNZVHdGOUFROUZQTVJsUk5zbDFjQWt0TmV5NExMbWIwNjBhQjdjZ3lzRnQzOEJqZEZIVkFQbGZRVjhnYWlEQ3hvY2lRdXBoalBzdDNzdzRYVURVbllKN296VWVQWThyMG9UQ3dRVVdpS3QwVkZ6bkhQSWd2WjZ6MEpwQTY3YytZeDV4VUFnRWZxRWFNSmdHYzVvaXE3WWhaZUhWNjh3N3VVb3plTWJRSlZmZTBlWStOLzZxWmlPK2RDc2Q2WGNQSEVNOUxtbWVScklzR0pHK1IzQUQwQzRzRHBGbmZ5OS9VZ2htc21acER0dXcwbmxJWDU0czJBTEVlQlFMV3JPU3FaTk1vM2k4QW9TWVRtKzJQbGNFOStSQnRSZWlHaGhBc0RLY0VzUkl5YjViOVo5bjQ3bHJYZ3FlV0IrTXlTNnVpVGN5QnhUWE44OEJiUy9VL2dLQ0pwZUhkdVVSMHc2c1h0cFE1dm1WVStSbnh1VVdOWGliUi9DT0NPeWlHSU56QkRIYlpTWkpMNVF4U0M0ZkQzVDY5T3ZlYlhlcTJOdTBZcnAyOUFSVFRhUmNVYVc5d2xhRDluZ1FwVWlvRFM1KzdmZk9aa3JSa0MraHBoTERna3BteE94RmtmSWtTQU5tYUl3R2x2aUVxaEFSR2JRRHRYaTZFckhtV2h5VjExWTd4MUtCaU1CR0R3QllpaVpBMFVyOHM0cnFIMXM0a2xpRGVKaEZqd3dBUXBPSjNUaWhNeDBnUGRzWGFvTGlVY3Rid1hEV3ZsR0RWMWRtU0tuZUZ2TndmZzlMbkhqeG5tcUlJVDhDNnNEdlFyclZVNmhvY2pxeTVlVzMyWC84cHVLMkdwdEVEakpVWG8rcVRkdVp2SnBoeTBEWG41YUwwUUdFMnJEazI3MXpDaTVkNTVEck52MS9HY1NKVU1ScStsKzVRL2FVMnlJcUdZOGNNR29qdUFxc0c4bk5ORDdnUW04b2FNWGtaM3JTck9udnlMc3lGK2FYRGpOc0xRNVk3L0N4TTdZUVk1NDB2amxVajJ5QzJRbkFIRGtZNEVFaForTjAzMG1jWXdMU2xIMVZMTTc4Q3VXNjNuMUVJbGpmVVlaT2J2VW1XcWlIVEpDQVZzOGlCK1lRYU1XaEIwZmlyLzQvVndNOU8xNDVLYkdEeExVS3RwYnQ0ZDllVzcxUDBGSjNoV1ZHSlRudHY3dnlOcytJQlh5WU43RlJ6VkhQbkh3b3JuOWV5c1BpSmg0d0NSOGV4ZXR1c0U4ZnRjU20vMnpIN053cFoyTnBiU2lDblRrK1VzVHFUa1gwd1UyRXF5UW0vMGNwK0tPVk85MkJFRjlkSnBNNmpaWWlpMUsvUm9yMHpsZXlsYjdRa0pWUVJCTlpOblg3emVSMVNCcVlZbUtZWWtNYmgzeHJwK2dSa3gydm1Pa1RoUGxoVFNOcFMzbmN4c1h5UWhGdW8yUjZUZEtRRzJaOXd1bTFHMnc3MktXQk9UbnZBc2dwc2pCSlc4ZU9VSzA1WEtoR3g0dzFGV29DdEtneVk3Vk1PUjRRWW9oNDRHc05kMC96Z1U3dWRZVFdISHFjZnhWNGxEWjV0ZGdYSi9JenppSUxweEZ5Nnk3ZkpUSTRzanV0MDlRWG5kbElCK1IyWFUrU1paVjBmWVJMQWg0UVdiTlBmMGQxQ0FBYnJIMG5McHEwdm0raXRHYWpMbmVMZTRMc2NWYWM5MWRlb3RvbTd4MXdBZFI0QU0xR202Z29mTURHMFhYb0xFTHpNQjNOVWpzYitnK1RGMmQxVHJLeWlRTUZnUGU4bVNTUXN1a3EyOXYyUGZRV3liU2xIdlJsb3B4OUdTUnNzdjU1TTZ4NGF0RFJWdzhLUldYYXNvWk5LY2ljWTZxcXJsaHhROXJwQ1J0WUhQTFpuMlpMVjlIUG9oS0crT25ySDl4SGJKZ3c2eGd0VmFvNEpOejFIWDRIZnJGRFJhZnU1T3plMnY3OVNUVWxwK2h2OFJtdlpvWWxQMFk3OWErcXVwOHJkVDdPeXdrN200c3luMUM1QkdKUEZLMDczTEhuRnNiWVJ2V0JNTE5mQ1lDa1hJVG1qN2dySXdCNkFpOVpZbEExVXNueHF3Y3VQOEYyV1FGRzJYSHFzaDkxdmlRUWVhTTZGVzNOT1R0UkIxeXFkV0RVakRjWU5hSHhnNmJnVzM2QmFGMm14NFlkbFc4clFZSTExeWNlQmNuVDNhdGNsZHkxU0VNU1NaVS9vTm9VeEd4U0xzNm1NY0lVVVV4bERyeHpOcXo0WjR6NlhuZm9qUURXZUdZTkJrOU1oaDkvNmN5VFRLNXZLOUFPaVJleUc0L2JUcnNwaC9YU1lyeDRGQmRVSUpzK3M5Q3FqUW9kY0NsR3prRzR5SDIwNUc0NkFPSE41dFdDa1RHVThVMU15endQMnRrcmFhajE0bkZpNUcyS21BdFB4dE0xSUhQeUN6OStNTlBHRTBkalQ4RkFmUDZyUGllVG5iaWpQK0dLVEJ1NmhHL0l6dHhZWFU0Y3ZHT2VEVnB4dDNTN3hleDZVczZSMTRwK1FuaXdyK2x5RWc4cmFwWE5OOHNqUGpKeUhlTW9QS3RoTUNJS0pJR0NGRm5RR1BlcTgwQWFnZlY1MG8yWlh3MmNkNitaZy9oN29uc3BIS0Vzd3ZMR1pCd0tCRmRySzc1WWV3c0xQUTNmUlJ5ay8zTk9IY0tuMWZzVkorRmJYZjRVWlRYbWZVQkxWS0h2UVR2d01LejhBVVJsVGQrNmxxWmxpd3pQMkFaUlpTeGZIY0hDRzVXN0N2MVVtQTZ5dUc5T1RWL2VqcVV6bmJKZHkvbXdXd1ZkdXozZkp1SmY2b1RsRyszNWZORWRLY2poVzc5ZXNPOW9wcEVVSm1TODJPQWt4azNaZ2lWbVBKZWVIbHlsNUhGcGpLdStVVXhwRjNHT3IrOW1uMmxlU0dMOG45Smt5cEdRazRVUlQ1bS9Yc281bFBUR0l2MGs1NENQeFJVaEhsVllVRlR3OWtxbjR5SENOK1pIYkNKT0dnUVZua25XaldGamw1S3M4Y2FGTk12dGthNGFuVm43bFRrT0ZKcllFT1hjWFJNRnJQOEZjbjZiaGlRVGd5ZVlXY2V3NVUrVnZGckxDQmkxN3A0TjBodWpGRzlSQU12OU1XWEhCZXlhM1U1WWlmU1cyczNraVBmaEVEcG9zcEZlSWFLSm5rV3RkeUtDZC9RbitiQlRPOVA0QTNTTmZucDBKMTVETVFHMVhRV0ZidGM1Q1M1R1VqWGg4cU9xNjVQeHpEMUdHNEF2cm1GYUZQRW9WbEZWQmxpc1BUTmdNK3ByK1BMTXcwd0Y1SXB3emhlc2V6cXhmSDQrVkNLYWlKazRJeDNSQjNtc2t0VWZ1cEZBVi9VeWhsRWlQaUczT0R5Q2tKbUJuODN2Rks2OWhDNDJMZFFURzEvSlpiZW9QSzdOM3NKOEwvNmp6TVlsUTBPT1J3bUpSQVZGVUdwTE1QZmVGbTVuTVUvRk9LUHRHVzJoOFRlNXVzbGFta3NKMU8rNWk2MEF2ZjlIZ2lZSXdIbVpQTnBJcFRsOS9TT2dwZXY5cEs1ckVWeWx0SGJDTFdla0dEaU53b1RLRFZMN3NGSThGd2VzS29kRk4veExYb0xFRmNyTFM4cTlVZUJVMmlZSzdQeEQ2QWw5MjYxY0lUT25pR1JmQmdkby9pVWlBcCtvRmZJc2wrb1NDbStOSU5DY0xwdldGYXIrV0ZBTHZpa2RuVUV4MzNiSHh6cWxGUFMyWmNPTHhmV3poZGFYWEpsL3NTUzNXYlY1OWtLV0NKcTBtQmt3dGt4YkZkSS9TU2JIdkJGcmtNcGIwTWRzYWNaL0ZGRWdRd0UzYUdOREF4STJIaFJkYS90Z0FxNjV0c0VjQWxYR1ZJb1l4dS83cFJvVXdZeG5reE1ocEpwVFYwSVVCZDhNSVNENnhkRGphTE95M0VNWWF4VURFamY3NndJS0l2S0dpUzVMQUxJTCtCRSt3S0FnSWo5TVM2cGdnUVdLcXpjWDJSWW51SUJzaUt0Zm0wMVJaTDlnUHFBT0xrMkg2QklQbTFqWm9vSUhtVERzZmlPZFJPa3pDNXVkenN2NHh5b0hTYXRuOHdUZXB6Z0VqaGlwaTFhQzkvaUw3Vi82aG51OUhFOFBMOVgxYTNkaFY3Q1htOW5vRjhjZ2ZJOUUvMTJndTE0cGUxakNhR0wrYkt4eERIRHdncXBYbU1oNzB5QS9taVd4WWV4cExTdGR3Nm9UQXBzZWVkNWtsRXhzRHBvOGEzS2NvdThDcGd5QURNdTByUTg1Vm1ScGpudGxXTnBYQUhOYnp2aVpWRGQ0OXZvU1FMbG53cVgxdEhOZlNPaUJxVEFobDRVZFRHMTJIU3NPUWRDU0psOWF3UzVDYWhXUU5uejVWeC8vVi9DWDFYWWhNNWxuWGdRMkxxRUN3UlV3YmNTbmZMaTJ2cS9rZ1pGYi9wSVBTL0VaeFlUQ2Jwa0VHRkc3VXZyREd0M0FrTENEQ2VURlhmS2htSUoxNXBZSkNzZnVWeS8rZnNQVnlTekhnMTRXeXFXR09ZSS9WQS84ZmozSGttcFc3Z2JZb3ZwaW5jR2dPSlpNY0VrcDY0UXF1UnlTVkhUR2pDUm10MDJwVUh4NS9BS2pMbEFCcWFLZ2hKZXpXYWxlektSekhFS0VnV3UvNTNmZVQ2NWdQMFQyUlR5d2J5ZFd2WkRDK0Rzc1VsYWRPSkVSekY2ZFlMbDBwRUFDVEtVNGFWN3FPV0ZLN3BrTFVBSXRXTXNHcnFTRnVoaGF3U0IvOUk3UlhmdUYwNzBxRzJnV3F5b2JpMy9iYy83RHQwNEtBR2xlSlpCRjk4WVRrbEJkY3RzeUFwelM4b1pIcXBKSXFPTWhtcDZYMTlYaEVqb3F0TS9mN0hHSkV3NUZUSFRJQm9IVXR5RXBhYjJNMTNHdDBaRkQ0SEJSQXdsRmlNQzR1U1h2L05LWjJLdjVsaWhYZnZwVGU4clpzcERkQTJRRmRMUElLWWRpZXhjYm40UUFtZWRmZlpTRmhDRGxlMmZ5My84aU5VeUdaSWkyYUo4L1dmYk9rVXhRb0ZlYzdQa210eERvYkMvbmt6VlRjZXV5Y3RNdzZ1d1pjTzZCWUE0Q2ZYZlBpZ0VLR2lROXZBOUgvdTJoUmRySzdPMnNENUR0Uko2OFZYaGFWR2ZnVGdKY2V1OHlielBnRTZHVmpIRjkxaUIwK1NiRHRPMzkzTWk0MTR5UHlFRTNTMmUxMlVhakVqNHpaMVo4K3FrQmQ1ZkZwVGR4Tmc2MEIxSXM3VVpDRFlQa3dETVVuVmp2V2VKVThrSTd5SWQ5clVzbTNCWmJLaHl6bU5zWHl4RlJ4VzVzRzhHdG5FSGNlODFsNEE3YVhheENjem82c2F2VTA1NE0yTzZ4cUpTL2JBUWo3aGVvdFRRbWoxVG1LVWJQTVFjNldSVXlIVTVna0pvK3p0NjlsNTd3bVVubW5waVZhNlkzME1CWnJ0VE11MmRNa2hOWEkyVm5hRklra2JaKzZMekRBQ2hpV3ZENnc0bVMzUUVSK3lzajNncnVEMnJQODVHZVRqZG5TbUNhVG1NODVjbnZPY0gxVEp6Tng2OFhFd0tSRHF3MHFzZGdkK2hkaVk0OHY0dUpoMjUzR0tMUEpyRVFpUVZaVEFOb01lSEt1RUl2aFZVQjJBWkY2RG84RkJPUUE4cE5zN0dySFcxcWsvQmZ1aDZtampQV3hVT0tWVURYek5sTUNtVHBVTmloZzhXSWllSFp0ejJibjRtaUpLLzQ5UEs1Z3RMcjBYMGJ0d1Aya2UwamZCSlJreWJuaXBieTI2WEFSN2hGSWM2a1paTGtreHJ0dmRRWDNWaWFCZWg4QWxVTEFwY0QvcW1oUEJmQ2NiL0JCOGRYcCtuUkRuM2xPLzkrd3Y5RDRya2NpM2I5M3kyNk1TT09SbVQ5ODNZM1Z0b09jaXlVbVJWaThoTkloa2lPOGZ3djczYmFxUEFScUJDZGNnZ0lFMks5YVh5S09GdWg5N3lFbzQ4a09aYVJMTkhQM2NDYi9PZ2sydmNQQkRFdE1DTFRNck1JNEZxelV0cEl5eUVFRjdKTnVYOTBNNnkyZjhXcEtFdHpwM21ObTg3K0lGUkttSmhYbjFaVmZWd0VVREFmVlY0RTRvZXMrdmlEdGZPVGVaczIvdk1jSTZYbVJ5QitZMzFSUGk1R0hHeDJVZUhzRDdvblJpVnZIdUZRSXdKN1NtQllCd3JhU05Hdyt3ZC9rcERFazh5WFowVFNoUUZlNldaVEhSTy9jQWdOK2hiQWdNYVc5QWxmZk10VzBUWjBjU3k2RjdtbWpxYmRSNFpyWTNucjZjWllFaUsyRFdVWFI1L201K0pQQUlwdTRvSjFVV3YzVnl4QllZcWtJWnFxbUluUVY2ejAwWWVOV3Q0NHVVdWpmUjN4eEV5TU1EdUp1aVlHTlZwc25QS2sybC82b3pKUGJ0SVEzR2w4NmRFTEZjNnQ5VE4yT2IyYUZGbTBLb3BnR1Y5YTFrdXdWZ1dETE9ldVY3YklYM1pUT1lScXl0NmM3dlpmQjR3bGU2ZXc2Tko4UHpUL2dVZnhYd3g5RFpMcGo4cWlGSDBxNTI5Snh3VE93Q2g1cFBqclh6ZUp2VFpwbUVsSzgyYVJ0QmFJNFB4MGc3b2srbi96djIrYjE4UzQ4WjRtM3gzWmVnSzJsMHNDZTR0SWhPZXJXM3BHUk5qWUVRd2E1dUhVdVJGMnR1NkJrclhZSEYzcDMzSXNFOVN6c2VBcVBCWjNsc2NMSHk3dDJ6NUEzSGs1UCtuQmFzNUJTVjZBVjdJQ1l4WU95LzE4YTU1NEgrQ1d3MGxGdHpwL3FlSnZGL0NEL0VjblVKQUhmaHdOUkRFM1k3cFJXcUFxMURDajF1cGhMQzZkOFBucHgrcE00TWxJUHBQV1dFMkJHeEZVT0xaZEpJVlFsTlZQOWRBNUFCd0Ivc09nZlQwT1NFNkhVK1NyZDFscnpVUGdNVGF0bmFQQjlmTWhEWWVPWFRabVp2SDlET1pKcmNWZm5zNGM3eFliT3IweW8xYlN0YmhsN3VRYU5JRDQ2T1kzQUhraW9mbHhRM3ZNME5vR3V5dmpkd0VCdjVLNm1PR0hhaGRHdWtTWTJ3TmZmUDJtcjcxU0U3RVJaSlpVZFZNWERaTUZaWGx2SDFURWI2b3AwN0pURDNOc3pPaEtNYW1FWlhSem9BVWV3RUpGYjhEb3U0VEt1bTBjYVZvTzR4bHE0Y1c2aDZjQW5pRUtYNDNKM0RqRE1VUUxOQUlmaGplVUFWNUw3eDE4em5tc2NhTHdzY2p5aXp1WW1hSVdpV1J3OUtYVm52VWJyMEJ5dXRCcUZNdDgrcStLTndxV2s3ZmdIbm53eTQ2UXFKalp1dU5NdFliWkNWRkduTGRSZkt6UFcvRXQzVEFlMDVjV0dxY0krZ1JSeU5IR1k2Z2dQRC8vWFVUUktNL1NUWUhNUWlEVW9tYmxDNDNWV2w1VVFIMnZrMUEvSHFWRk9zakhQeUthOFpWVzJlS2xSOVVFcGJYVWQ0eGc0bDFrTmFNUDlTT0ZTcVZKaWcvTjVhcTRqQ3krQ1R1TTNxMVNpOHlraTBoa0RJR1hKOE9YSkVFdndyY0VBUFovS0dYRXB0VThBQnFlYmNRbDE3bzFITnVBQ1dTcFRBd2w5MU5XWHV6RVFrOUt2bHMrdG5JWC9WK2ZiYllKWHk5M2VwNWZSQXdtMTBhbnk5K1hhSDE3VTBVNEs3MnZMSTJIVDhnSGx1VTd2S0c1ZGtSdHF5amxZWVh0bU5PRURWUitnRUZLcTFZbVkxUEdYRjl4ckVNcm55OTYvcGdiWTlaQ2lSdkkyTG04ZHpYUDhrMEV0djB2d0xNZVVtalY3ckxHKy9yZWRLUWg3T3ZuSGgzOXU2NCtEVzk1akdJTXlXUXVuRmM4TWcxSTJRMEwra1BPemN5R2VCS3FVSmhrWG16SHFNaXFGaXRpNS9TTmNQNVRrWm5xcWdqeVBTV1ZOM2hnTXhNNVFtNnJVMkhLeVJqYjJiRm9mcFNLWEg4ZW13QW1mbFFMS2Ivbkl1WXVqZW5DbHdDTEk0L2JKL0loTkVPQ096SG5SZkJNNFpTeXgrZmVsTzliVkU4TXZmTEtKeHRQVkUxRysweDYrRjcxeEF0Q1BYcGlpZW9la0ZnelZjc2RjMENqTkFuUS9aTnIzM1ZtcVVBdmFTUEJuUGxvaEs3NmwwWmx0OVJUODFONk01UWVnTE03WnJRczZMaE1TQ3pDcmJvZ0FRaTVIb24yMENOUzZ5RUptQnhySTR4Mlh4a1VUOXA0czZob3V3YkozcVNDVkFWTmUvbGFRa0FjaEszdjUvOTlRK3RiNVJEbGRrMlpGazdVOU4yai9DTWZXY3NJa2tPZm9MRUhLdUNUMDUrNXQybEdSMmpOV0JZVXpxQ2xiZnIyU2Y5WkpvbE9nbGlSQjBqY3B5WmkvcDZqT2lKM01JU3drNGRCVFRBN210emhzdjloZzMvekgwdzN0ZEptU0M0RjZxTzNCbFhjVit6TVF3OWF2bnZvaFJaRitDM2FxWTZXcWZ5MzcrQkc0aVFIb2p1VTMxNzVJWWI3NUR3ZC9ucVdtWVc1aDlXSG90aXR6MXBBS2U0K3BhSHp0bnZwRHVqVWRHdnFvalhZdm1ENERyQ3dRVGNPZzJVWUxZMDAvbk5kZGRTK040YWYwYVpCYUo0aHR5Y1RxZloyWHNXV2E2L2lhSkwvWFB4WTMrYm5CVjI2YmtndFBubldwY1VhSk1UNGVNNFRzSTRkRkJwb2YvYW92eDQ5RjlPcEJWSEEraktUYTBWSmZrMEl4WlZ2T3ViaXNBeW1SVXE2bk40QjlFK0NJcFZHVGd2U3BJK2pRWFUxck1ZbE5UeXBsUmtJRGQvS1dMZWZhcVFmUlRwSERDa0Mwbi9KU0k1VTFlVmxZNkdhVG9Nc0pyS3lkV0crNHRlUmJELzU5ZGRvNDdxd0hXaDZMN1hFRzV1dVg1N3BkM0xWSU5tRjg2Wko4QzFPRWZSK2MyUG9WM2NMWXFpbkJKQkZhVUlGZUtIU3FveWl4RkNzMnlhRGRQb3N1T0EwQzkyL3ZJNXFKZUZPWHJ3QVY3NG9FaVRab3Y1cWMzRWhTd2xEdFpoR3pPQXh2REpKdnMrUndmMkFHRzJuWVpPdnB6ekhHY21ReFBROUtMTi9RTENDZzljRzdnSEVSZlJKdXU3U3RiYnFTWWlkTkhBcEVoTDUyWW9LRlo4K0tDSjlWTExnbzIxanJraG1kME9CZEFUVC8zSXplTWhVZWYyenkrNXNnbVk2Qmw1bjBoOHR0bkR1VkpyQjZNTkQ5UEtmTFBKeGVwU0Q5ZHpEZ2NxN1hKcVhqTktNcFd2MXBCTjkwQnJkVmNNamdjVC9QUm5TR1BIbTdrUFFDbkRaVHR0aEpVM1FQamdlUW15SXVGeThoODhvU2IxMDlNSG5UOGVQNVpTZUwzSzNrTzlKK1VNOW5RWjVwRG0wVVdRelVvQUdSUGh1N0tlWkFpYjFmcTJuNkY2TDk4SjZLZVVsVWJWRWJSQml2N1hVZWtweENjdkdEZXNRYlJIdXlkV2xxdER5NVk5OFZvWTZOTmlvbHA3WHk0bUtzSVg5andvLzZRc3gxNjVTYzN2QnJHREtnbUZPL09yRE5GM1ZjR1hhU25qWE5OblA4b2JEY091eTZKNVEwUGdPZ0hrampCSVNPMk5oNXVQdHpTYlc0VWYrb2lianNFOTZCSHNjcXlNOWdReGludzN1eTJQakxSQzYzRjRPYlB3N1J3NDBwN21lNlRVekZ0bGFVRUUrWE9TT21nNDNXbDBWNmlFVkJqRWhpVWhWeENiUWFWRW1VV1pPR3FUREVSdmJGbUhwWDZjeDJZcUIySFhnNGdadWVrc0ZaRmlLck0wclVmaTQrQUZpRmV0SHMyb3FDZXVlTFJ0aGU3aWdrOGxqSEpaZnU4bWJvNk01RysxNU9tSnQzVHJLaHo1enFnMk1RTnE0VWcyTW8yZEJYRVcrRWVQNHcwS1NzOWdsS295Z1BFVnl6aUJaMmwzNHQyY3c1aVVJQWhaSEdCcENuK05DaWYwSFBKMmh0eGhSTVhyS3c0WkI5VXEvVkQ5aVE4M2JYYU1uTmhYUmdyWnFGdHpzWTkwM0x2WGppSWhlc2pCTXV1ZWh6aGJ4cE1EMjdqWEk3dGhyVXBwemhXQllMWlZ0L1dNRmlISmFxTXZrcXZieFFBSXEyeldDUGF3SGQ2U0pKVWZ5SDVhSjhaUHRGbmNkNnROSEhTOHFmenkzQkJwTGtNMUxRdWVMQXZRSVlvd1lsOUtWNXBRWEF2eUlZa3JlU1ZYMEUyTnpTdDNhTllFT0p1Sm9vb2xUcjBsbGZLMmgxZU8rQjhoVW1mbEVzRFhlaG0vYVFvd2JPZnA5TEtvd0lZZUJsZGhtakR3V0tZL2t2UDVwd2VlTFNEaG51VWgyWmIzbjJxMSs3RWk4ejI3L1ZHTW5rY2d1alBnVVp3dzVMNmZPaUhWaGVPZnRhWFFiTnZsMXplbWduSDlrSkNzeWZkZkY1UlR6eEI2dzlyS3k2VlhEM3p6enRaU2VqMjVQYkpTelpSV2lYQksrMlVvQzVaUXFtR2R3aEViL1FFcHk0ZWdqNW5lTXB2UFpXNTF1c3R3Y2VvMEtyOWlMUlczMFdVdFpqamcyQXNkMlpHclB6TzBqY3Mwa2t3Wmlyb002aU1mOXovRTNlaXFBaERMeWJDNlBEd2pCc3AvalV5N0tpZHN0bGtIbkloN05ucmkwdk5XdnR5RmtEVnd5S0FFT2grRHFteFc5dHJDUi93c1o1cjd3eUwrVWdNcEZRWlZORkNTYUtoaFVoU28wWUxpbjB1SXBSNkRqaEdJZEFLQVlTc0pBb3VPd3k5S3FRYVRHeU9JcDhySkxBNXVjaTlydzZmVktzNFJhN2dZVDljakJnQWs4ZXozV0czRUlvbkFVeThRVkNtS0FlT0N6eDA1MXZVNm9XQ1VIU094VUUxVW0zc2lFWkVvSmNnWXl5eDlMcXpsZVV5YnY1Wk0xWnJFUHZXaXNtUWFiaS96T0pTR1lTa2lodHFqSkxEekRqNDhOdVFoeXprM0owZVZsTEg4bzJsTzd0RU1nNmMwZTRJWHdscjRBaW45UEx1VDFpODM0UWQ0dXdwT2dJQ00ySXFOZ3B2TjBRaHNocVJYVWkxRXBGcFJWUzlCNHVsTXdrSSt0cllteGxpVGp1Z1Ntc2RNVEpiRVpSQXNBNzFWWTd3NGtacUZIYWwyTlhJajQ1c1dyd1M1YlBJdEdJcFVBWlpwUkhrallGOVNXMTdNTUppcVV1NW9Dc3h3VUNmTlc2SFJEK1BreSsyTE5rTW9SYzdtajkwczlGNWhTMUF2UjErdndIUkwwblVLOFVEN3NLUTNxaThNSVVVRm1MUXIrWEFVRDNralZtZ1FWbk50ZDY3UVR2TkFxR3V6VnpXVFlsL0FSa3RiamR2ZTUxTHErRWlFYmFIYzJVdWY3V1dJclZKTG56aUpkMVNLYm1JeFlKS0JXN1AzTG1QSm9LcGpxYnF5R0xXOWcyQU4vTnlESWp1cVNUN2RUazBveVk4WkhaaXJDYmM0YXZrWnp6TENldFBHK1c2UTJZdkdPSWk2V2JBbm9FUFA2eVJxbjNvSUo4MitvUU1hUnlYOEtXMGVHQjNzMGZNelBIckltRGRCaTFDWWxSL3hKNVlyQmpGQ1l5YTlOSngrU0IzbXExaGtIN2NUYUg1S2I0VGpRQW1RVmJDR0d2NEtvekZ2WnZBN0Yra2JxOE9mNzRhMHhZUW5PbVExbWRkWlJXSkMzWGtKZ0hOWGl2czB6Z3Vhc0RVQURMRVlBc2V0Q09wczIzVGg2cXdIQ0R2V0dRdDRpNFFvTnRJbTBIVzNJalZKdFR2UHdhWndRcXdrYXZzdFBwNzd5YWdmaDcrMW1STERmRXJHWlpwM0NsUi9mQmpOL1c4V21YelZQM2NBYlg2OGsrOC9EWUlGUWFZaFpYZGh5UXVoVzZHTVFkMTFEZHdtZUpjNE1wV2FZczk5V1lrNUYwQ1VWWUhrZWdhbTE4dXpibldNK05CSEVuTnRGZ05kRzFSNmc4aGtVVldKU1FjSjlDK1BHb0ZwRHVQU1Q4R3RpMGpWbkpkL3ZXbFpJTXhWVXhwWExtRXJKNkxrbGU1TlI2SGJjRTB1ZHk3ci9TdGY2QzBLR294OHJMazJ1RDBIYUdxSVo5S0V6bGx3bEZMNlc2U2tJKzVScEk2bzNHQjNSc3pEQldoR3YrMW0xaHVQeUdINGdjMmJxeFZiSXdsRGx0b3BCUSs1MUhjTmFhTWRqLzB5T2dhQkVlc3Q4TmpIeFRXUUZBWldVWDBOK0JIS0JFUGgwTk1Wc205aVNsUkVLS2tGbTEwc0NpM2YrM05qY1g3Zmp1cU5YVlVIdTloOTF4MHczUERzb1dIdHFHVmV4M3ZQajNRcGR3dWd4TE56SDJFVHphUGxsRlRnbXc3QUFweXZ6Z2lKbFpGS2pFZ2dIUVZCUnN5Q0JBL082RXJ2MW5EM05YUkNLaForMjZyRjVORElIOUlrNnM0Z2pBU05wMjNZSVR5UHd3ZzZDQ1hsaG9QQ3RRTVo4Wk5Bb09JZ3JmaUQvVTJSdExEUzVlVTBRa0krWDd1aGRwdDdtMitjNkhNcU9uVXZjQU9mRzBQTjZhTVBKZmdRcVJxbU5WZXR6c1IrdEpoZ3YvWkZjaGtlU2Vkemp5a25ScFZLek5VbGRVQVdMbFBLTHBKRnNOWmVxYkJPemFmWVZ5QnVLYmFtQkhybi9DbUFiZkw2QVJkRHIrTUJiTjR2THgwaDYrNEI5eG1vUFpMSUpSOTl6SFE1b1FaSnljU3RLeTQ1TkgrQzdLdE1sanhVSTlIM3UrTHFhNVhsTTA1VmlmeEpnUGhUancwLytoM0c0dHI2UG9BWGN6Rm5pTFNKWjV4ano4T1FPKzFjcWoyUml4QTdVRzgveXd3aDdwamJXM21KNXlpOFFpV1gzODg5UW1iRndKV0NUU1pYdSt2ZmxWcXJXblJTMmtyY0tKYkdna1lhamMxUzlvVy9IeTFSb2tvNGpqMzIrL0VXSlQySDRqZFVrZGs0M0QwdFVIdk5vWnhJS0dvZlpQOFJPVFZtbnN5S3huUTg1OWxTUFVlVTJKenAwbnM5eWM0c3g2MlM3U1VDMCtaazlPdnp4RGJNZW45WWVYbkNNL2pHYmw3K3NmbTE3aGx4VFcxZmJiY2lVdDhLeXJSSFZHSXFZQThMZmV4a0pwTHN0TDRDWVVxNFdidll6RUlnQnFEU0hmdnJEbGRDWGJZM0w3ZUhCOHZ5UE16alVLT0x4Yy9xNWF1OUxyYmx5RWlkOHkwOUV1dU85KzN3YkswQ2R5RWh3d2FRa3lFbU5zNU0raERrVjBZcWRJTUZiZWxoTkFnREN0VjF5Q2djUmF2NUVhOUpUbHBnZDM0c3NxZXRnaEpLY011MFp2YStXWWhtaUtXNVoxNXFpMDRoT1ZqK2JuNGFUR3dzUlFhc0t1T1ZaSWVHZnpmVzc2eSt5d1pFKytadGFFbVdGT3RvYWo4SUhTOHJtVzRUNXZwSjllMnRsSFkzM1R6aG9MRG9YVk0xWklaZ0d5dHFqM0EvelR1Z1BCUnZlNEJ1dnJETndub2FrUjg5c1UyckF4Y2JOTnlpMmpRb0JDZzhhSENnRmd2Sk9aNkpWQzZXMFptcHZkaGdpKzcvOE1pRVNFTXVwUkZ3NWlnQmdCT1Ara0JKK29IenpqZ1FZYUx5S1VVV25xMTVZMzUxU1o1cUxuZEtKNUloWE8reko0Nkh1MW9oU3NVRUV0Y3VVQjRUYXAvZDhPWjBVKzhOZFlaWUJrUlhXR0tnV3NEdzNuN2F5VjVqQXVmWU43clIrSDNySVRtazVkN1FZVkJuNC94QkY2ZnR2Zkk3bkI1S3Y4a1VYMmQ2TDVOdG1WZVQxSDNpUlI3akZOeWhKb3pJYUNYQ2wySEhTWk5zNWtXNEFrV3pQU1padTAvYnQ3Ui9vNE9hSDNSTG93MG5uY1IrcGREckdTQ3NvTU9zc2NwbG1SaldCZ09vMjdXajdDK0xnTTJWaUtReDFBWEFsNFdoQnNiOTJaUFJXcEJpdDBZS1R2b24vZWtCYXJ1c0hsdXlmeE9JUHNhK1VkYWpSRmxWRWRvL001dXUwZ1FwRm9zbGp2YmxQVXBxSzNYaVl1cnIyNWx5SW4xREVUdUlsUlgxUEx5VzhwVy9FT3hNdkVlOWVuRVA4bk1BMWJkZ3gzc052RkZOTzNBZDZoYnYzMlBMc0V6eWJUSjdjWVBncm1YMktEUE9Kazl3aDlQZUdUakdiRFBteXlVQWdLbTFMWHJ3RWQ1L2x1NkFjeEVqbWVVNElZUWdpZUlJa1JkVDBteENyWDQ3QmYrSGJlYXZMNHZPWVRlTGdBTmlSclo4eXhYWmNOVlIxNFMxOEE3NXRLMnRUTndFMGRBVXM1ajlZRXZROVA5eExxbUlTR3RnS0d5M2I1WkhTTllBSWdNRFRoc3lGWjFaa3FJeTc4RTFUV2xudkNvTHQ4TEpmWlcvOEFrOURINE1FSXpRY2dnSEs1MmF4NXdyNkVQQWtJcDVqNy9HVmYwZlJOT1hSMEJ6aXVYZHhaV3dHVE83OXNSVnBxMzJtUnNwS1ZWRXRiZ29LVnJKc2JRc3dQd0E1eG9CbE53U0FrenQ4eGRSOW4wOVZoSVV6cGNGMjBockUveERTODdONHdrRHZpU1VuanFiclJqbU9KR1M1Y0dMbjNjU283Y1ZsaHQxQ243L1VudGh3dFVRNUlQbmFwRE95bXBFTUhXYVdUTTQ3L1RXaWx2UUVIeW5iZXdqR3kxblRQZ0EwV0dmYVc5aGVOcXdWakR6TC9Eb3l0SHVLTHNkUkdITUNybU54K2dGcVJKNjFmMis2bkdLMy9xeExScUtVbCtWL3A5dStmMk8wWmJ4d0wzWk1XdDA4dXZvMXlWTzJaM0ZLaTA4N3BTYjlIWFRZQXQ1MmwxZSsveXJNRit4N0FBOHRudGFvS0ltbll5dW9HMVk2NmJ6WTZzczlQRWVteWZBc3VXdmlGM2hQWm9sTWxzTitiOThNT2pMNXU4V1AwMVNVRThiZjhyeCtSR09mZTZmaUVMODNLcUhkRU9kN2NKRDhZSm45Nk8yK05kS3MxUnZ3NURiM3A1aGxiTjNJZDNNV25QUDhML05Tb1J4d0tSQVh0WTVSSW5CQ3hKWTdzakN2c2MyY01TeENPZ1ROa2hJUnlsVFpaa05PS1dTOVdaK1RrS0FaS3RWNjhvdXdHck90Qm5PR2s4SzhHNW9RbGxEUXhUNHZObDJBSzNPT3cwVitFMFE5SHFhc3IxclAzTEMyZmpsV2ZVYXNrZzhVSWZ0cTRHNm5iSEtkUjNlNWM5a0JqRkc0aXRlY3dkWUlnMFppNmo4dkdoYkY3R2lZbWV6aWlyMXptRFhJOVV6Q0hKRmc4RVByUXA0Y3l3QU85c3FkaVJ5R3Q4RVJ5WGY3ampFaEUyU0NZVTJUSzYyeS93UjFEcG1yek00dVF1TXhwNS9CbkVWQnNCUHVTVWIza0k3T1BZWHE2c25hSys3ZUNEeTFzUjBERmsxSWdIbWlmeUorZ3VLT3lVWFNhcDJjRmRyVnRHOENvTDdzaENnckMxRUh1RzR6TWh4aUgrdmErb3pyWGdvMktLcTBqLzhwcXgrdWQ0L1o5S1lsdm1hR2l1OURSSnZ5UTBhNlNNZUl6cHcvTGllWG1NVnNlbmd0bkdZRnFCYUt3YnU1cmFPZGgyeVEzTDM3TUcrYm1CbVpvZmlJL1A1bnIrY0FEdzdrcmdSUHVrdHVka3QrUitJWHl5b29OUkhFcGFyR1J5STBXZ29uWWlSV2dqSkNzVzZjL1d3VDRhNVM1aHdYY0JremRLT3RUTHVxOXBhOUdFcDdieVBJckVaUEsyZi9TcENxcDhMQVcxRTRMNU5CYXNCWkhnWFhWemRQQUYwR0E1YW9LUjVER2xTUTA1L1hDWHZPc2p6SjVSUm9qQ1Q3dmJIVFA0YWIrcUE4VE5ZbEIyZThkZnR2OEtETzV0WFEwL2UyZlJEUGJ3YStaUGtYc0p1SnltQzh2Mno2cElkZUVIaU9pWmJEbzN3cUtxQ29ZZm5ZR2xpVFR6UGZwL3h1dCtzSllQaGdrN3p5ZVhsV1Vsb3A4WnhET3VMUC9DYWZaU1NJRU05M0E4OFJDc0V4OVk2WTlaRkdKUzFvbVlMN2taOWpNR2VmR0pBTmJqbTlGV1dCaFN4UG5QNUhVSHZDV2ZGb3RwWklBajl6aXVFL255ckRVTmg1RCtXcEc2VkJhaUdPanVzU1N4a1p3QkFnZU0rdUNZamU0dGdOcys3RHRwZjZTZGIxS2ZuMER3S0ZkZDN1K3hlU2lkcUlDT0lJUlRRaEpISENQK3VrSjJ2b0hrbWZ3WXZGWG54VjllRGczMGRTT0VSdVNhb29WMWc5UDc1aVdWVUtFc0s2dHAwSDRzWG1WUEJPeUQ0VkQvTGtZTE8xYTdLUXdnMTZEMUNnVmdrZ0E0ZjNsYng5SmZaOHhvU0NzSVdxT2w4ei9MTHN0MGE2UUlpZDY3Q2tPdmlBeVlvOW5rRFV1WHZlZGRuVWwwcDlTMG5uaEg3M1RudTBGU1ZtT0ozcCtBdHRYOGRFSWZxMG9TMUFLQUMydFZBa2RqUkc1Nm1jc09xa2J4VzVJNEhhdnZtK1BORW9CcmExMFZBRnFkOHRCZEFXbnpGa0Y3TFZpY2svOVFOMlRacVlXVi9OaDR6ai9MZ3VRbzFIczVITVVld0Nzc3h3cTNiNlJsRUNNN1RpaWM0WnN0YWp4UFBqSHRmSEZzcHJKZWhwaEJudnRwMlpVQitJTWZsRnY5Ry9GdHIwMU5XNnZsN3J3RmptUDVNMVdHQ3J5U05MTVZZR0lndW1mdm1EOFQ4Yjg4dkpsY0FsOW9ZV3Yrd1B3NnhCckhCTmx1ZExiZEVWRU5jQzRzYVBMK3huaitWQXJOL1hoOEZ6N3RnL0NaSFlFV05ZT2ZPS0FPTndCNngxQU9IUHF6Z3JDZFQ0emFlWjlzTGhDdlh2M2NUQ241Z2J4bDhWc1RBOExhLythdmJadWdJMVRYazFVK2wvY2s1UERrd2lkQ3FJa1N0c3B0bFNaUStsY3JsclI2SmVOZkNiL0JncjlLTURaL01Na3FFejI5VXZ6RHJ4VHBmUlZqMm02TGVnODdIcm5UaHAxZE4rYXR6N1RhNkpiUkxxUUFHZUdrRWJpQWtGbmlaTlFud2xOc0ovbUlxRzU1SXVBY3ZDazJRWkN4N1IxRzNQOVErMDZVV25Rd29TMklObmtGOW9oL1Z5Z25UVGVHalFYTlhHaWVNZk5QenFmb3F6eTlJaU9YVHM2MmF5VEllMDVKNDNvWUR0SkFJVDNvRS9EVjF5NWVPcTBKaHZZSlR5MW5BZGxKOEJId0g5dVRCelBYZ0hpNVB3dUNuZ3duRjljbzB5N0FMbHF0U3RSWExTeHlTSVVhUjZ1dnI4M1BSd01XMXFBZUZ6bE5VMFB3T3NETkNoWTI3VnQ2cmdodUk3bU9sU1VxR3hrRSszMXBVWGNKcjlYd0VBbHJJaDNYNW1FTHdJTVMxZGdUNXEwUGl6ZVlXdmtmTWwvVkVJeGtKbGlLOXk4UUVMQXFTVkl1M01ocmdqK2dqa3BuRlE0QUlwOFJHN2NEOFprRW1pbFhrMDE4TTZ4TjB2WW0vVVZyU3ZWK3I3QlNBVnhVY2ZqUVhnSDdsMlJCQ0pmcHRNUmRGMUZrYkwxUjc2OXhueUt2VVdvZlhVZ2VXaGxidy9pTHNjRTZFL2V3MEl5T0RHVlVFcXdUK0ZXM0o0YW55b2pVUnBwTnZIczZWL2xMN29qbUVrYlpnOU5uVnJSd0MvR1JZMjd5QUl0WUx6MHRUa0ppSU9ZbjdxeEF3QXBuckRjWGlHZ0g5eEdpbkIzWGhYZU03T3A4aWdNZ1pwOXFZY0lRTzhLWHpnNVpTOGVtUVJvZUcyU3g2Z3I2Z2d5SUhqRll3YTlEMzJNd0E0SnhJRkRiYmVaZUhkd1JLaFovaWFHVzZ0RjQvZE96bzd0dTFaQ0I3T1EzVVlQZnhaMFh0bjU5ZkZBR1h6d0pWUkZ5ZnlTV3I0ZUR4WVR2emJFdkNTaXhjcUlteE0yZ0lNaDB2b2ZET1owamNsNmdtUmFYZVVWQkdZbHZwRmJFV2lDRklmTjFoRk04MDRmdHN5UUtPQUJITVBjVWNxSVhRa0FmTkNlSjRIc0IyMHZ1YjBZeVg5TUdnK1FpTkpVckU3Y3dXa3I2SlY2eTlCbms1MS9xemJLNU41SXgxZ2xKTThvN1VsN3daOHR6THhsMmRxTm4zV3MwYll1dC9NTlA0anI5RjJtRE9Za2dmZ2NWcWJsN0FRRW5STlBxOS9MR1V1WUpaL1FQejZXZGthY3VjKzFNMlhHNFpvZEp1VDJLTFExZ2VsNXErU1E0bFFMTHpraHBkcVptVk16ZlhyOThhVjMrNWZ6YkpKSTBQN2trQzU5MWJjSzJSZkNlcHNXTloxM3p2Z2M3NTV1ZUVOd0VJNk0wWGk4cEJaZCtrOVF4K2JnTXI4RmpWcEoyN0srTkd4ZHlkb0o2cXB6VEZzQTZVckEvaW9mdHBqc0ZsZ0ZCdmtnWkZLNGIzVXE3VUJVSkY4LzJTeldTNnYzUXVsOGFTZGdFVk1reC8rQzE1QUNseHY2YmJEM0d3b1FwZFNFRWxiNlRoeWgyQjVuV2I3bzBSOEJiZGRqbWlhVk81N3BXZXpXa25TRm9wZzVEdGMwSjVYU2tuOG9OWE9LbDZoYUwvR2psVVBRUmxpY1FYUi9vb2pXeGtWZkVCR0FVVDJDZmNEQUFyNGhhQWJBOGxlRGdmUkhBMnNJMEkrOXV1SUVxN1dVZ1lmRG0rbDlmbmZBVE9oWndQOER6TXNwVlN5cnJsanhERjE5NUc3Y3NnaEZwWUZRODBCRWpaajNvdTJ5TVJHbjlLN2NyQU5uUUZGQ2IxemxZSFpobmRNMUVRTnpCaXV3U1ExV3JuemZiZE1jSzFhNHNaV1IrWGtab1JQaEZVZzdSN1d0WFFYckJwbTJCRjAwMDVJREpTS3J3ODRCZVFUc01BR1lVYkVVREJtNGg1L1F3MklXU0IzTW1tSWYyamI4SENHYjFhS3EwalVrTHhNcmx5akJGbjJ6aWpMYjkyeVFtUGt4TVpnei9QakJicnFYNTZQdG5pMGFVVjk0b2FCRU9ZVngwLzVyY1NXNHBSeDJ6QU1ZNjJPTTdXRVZ0WE1tU1JsUkhRRWhlNzY4V3BRTjJGTnhMV0FUK0c0UFhmTG5qMjNhd3I3OEtxUTFwSVQ0OENKcHVOZStESnFyeCs4WjhQM1hVdTIrem9XZHBoa0x6eUhia3Z2RkN0dmowbVNIUFhscWlIT3BLSTc2bVpMRWNoMWVSc1JucEk1N3NDeDA0Uk5hOFpiZm13bVhvR3RkdEJQUDFQcUM1azNvT0tlYWExenR2OThiM0wxZnZLMm0zMW5oUTA1WlF0MStxK1grMDF0Vk9CYlVUbjQvaTZTcEZxbURDKy9NU1dzeHRJRzRSZEVHYytCemdoUVo0ZjBZWXhQVmlRWEtqZ0Zvd2dXSWMvcWUwajJIMy9YTWJRR0ZRSFNSalp2d0lqTmxSVkRUNVluQXc3dWhnWnN1NXZXUi95NUkwQnBScXV0U0pvUWZOdDhuSTQ2ZkhhV2Q5S0JXZE40aEZRK3RrMUFlU1RkdU13cEIwUmZXTDlQOWZoZlQ1c1RYdXJwMVJjOW5WZ3N6RFQ5bE1yM1MydVYvSlh3RU95MWxBemJOQUk2eXB3Y2tCQVJ4UFZJTXN4MFNXSmZISmowMldhRnhNRDZBMjByNFNCcFpWelNxbDZRU1FiaXp1MG5rT0RlZ09RYjNnVGZTQXZCbW9uUkJSMjNqeGlIbzNabUVYQmhhZG5QWDNiaVltWkZ5NHdIMnRvRWpiZ1Rmckswd1ZkNGdQUHVhTllMLzNWS2FjUzJYWmpuZExyYlRoZkVVaEVPa2paNHlsZUgrVWlQMkhoZlFsVUlBZXp6dGdXT0g2b0ZLMGkyTTZUeko2NkZaeGs4STU2cHpKNVcxV3pBbG83SDNLNkJrVGZHSTVuNGlibTB0Wm9BdzJnY3VLSUE1RTFQdDZkc2tiTTI5TkFXODROUlVmUFlGWlNNT0VnbGtBTGkvMTVtNGFSZXpuQUJPTk16SWhGbTlSUG5VMlRva2cwL3QxcHh0dm12dXBMQlFWL0FMeWNsNUhQK2tQaTg2OVJIWFUrR2RBRnBUczZ1VVpBUTRIbmF1RGZmSTdrOUY4OThsQVExWUVmcER2aENMM1VkaHlBZWtENW5ST2UwaEJpazFuV2MyQW1Pb3BNaG1HVkpVR1BtUjZNU0FtRFZTaERQRzlSRHg1MGRrODhTdFIxN0lUTUJZTDA3NUpnUUVRdHNEZGJYSW5yTGZEYXBrUEpGcFRWd2d3NVFxMVFMOUV3dFhLZEZINS9hdTlQRld6cmt4SURwQTJzb1NjODhxTDBPci85QnF3YVJjZUhERVBwOS9iVU5NWmpuQVVKbjA2eTg0VWpUU3gzbmNUanJDWnFHbXRPTDRid2w2U0RydnZkMHF6aDlzUHBmNlZzRnVSd0tCZFU3ZDVybXVCYW01ZjllU0RVQkRQZk1YYW1lSzNBdUdOVkFCTUptVDlremU4NEdUTU5sNk1tby8wWnRlU2xSWk5OT1NpYVdhZldZeUI1NXZmQmVKQm5uRVl6dTZ5VDdOVmQ4cmRwMnBpNk5JWFl3aldZRzhwVDMrdmxVRlorMmJPZE5GeE9tSHlwSzQ5WkNtMjN5dzhZbVo5QVM5eXFObkdPaEVObTByR0JZUWlKYWlHWDYwY1FOMjA2UUtaU3Q5SFBmcHRTUERTU0dYMnNCR2NZaGVrb1NENVpsTHhBdjhmaDRBK0xXZmlINFhndWtVbzVoaE1ja01rMStSYS8zQWlnSTNBQkNsZHpoWFh6cXlGcmViOWZZaFd5UUpibTVvejNNazU3SjdxeUErL20zdnMwYjZnRzJrMmtINSszOUtpMlFuaVBKcDkwcjVHeXZWSnUxclFqL1ZLNjdDMm43VmJYQkN1YzJ6OVBJWTVwNlBUUWtTbVZ6TGdKNjhRR2psTVZnRmNJcHg1MEZoSGZ0SnZCYkttU2pKdFppNVExVytaWnpOa0dnays5Mzh0NW15VGZTR3laUkhmZ1VmZ2pqYVZyVnhoQ21NaGFsYWExUXlDZWczNWZuZjBrVDV0OHEvdzlSdEdoUHh2eENqelE5TDVRSnVncDZYME04QUxGOTZzNzBQYksybnFTRnJnQWQ2eWlqbmZLTzBxNFJrcGM5RWFxRUpNUTZlUlpDSHllc1QwaDZrNnhlNVdQYjE1Q2lpY28rRWwvNUFLS1UwU1lMTWZwWmdKaVFpK1hHaUhSZDBTUVVkREdPR0hrUUtoeTJTT0o3OEdGMzJESzZCQ0wraElFRDJOQ1pyMk1oa0VDVDhSa3JGaVc4WVQxVHJheGEyTUQxQ3dITHVmOWdwbVhSY0xDRzQ1L0tpeXNOVVExRGd2SUNBUUROK0NNWkZZRktIa24rUnZzTnpZZHFHbU5zOE1rcThLeXI1SnEyd3ZFVy9SakJqK01tdmw4L2Zmb0VRTDFITUJZZlZaNHpqY3BoaWZjeDR2dzl6QkcrSjhkcjM1blVKRzZlWmI4Rmk0Q1lFNi8vUzNsWmFqSjc5MXZGL2FMSHRtUllCT3llaWwyMmVjeGJpNkJ0elFOZFhtcjNmS2dUS2dVRWpzbTdZMzNhd3RMK0FjcUxOTW5xRDEwbnFPS2J0Y0RHK3N4MFp3RmkxSTRuazRjTDVWbFZ1NktFQzdBaXVxMGJPbmcrM1Mrek9IelNLNVp6R3drOWdhdEhiaW5IVDd2NEdlc1U1UUJzcTg4V1RzWTA5YVFQZWpzYkhWWXV5b1R6M04xeUs4eldmbVorcVB1VU9JMUVyeFJoOUxHamxFdC9heFBuY3JaNDN2RC9FTC9BbGYzeG01c29tU2NXRjF0blEyUm9COGUrWEVRaGIycTJvbkRDeEtmZWlEclcrQXgxckJROFNESm4vek1jQko1VWtuWUxFNW9SdXNoS1pNQm5aTEdib2V2ZUMrZk9nOWtnMzJuYS9nQmcxMndSSXUyeXlXelpNMElvUUZXVHYxV3pKdWgwNUZmc0Y5bmIxQmNHc0Fuc2VmdEFzajRYQkdlcStjdTJONmsyNkt2NCt5Wm5xR3EvamhOQi9VYnZOTnVHM0dXMmh5M1NUVk80YjJCSmVONjJTK0FndjVvM2t5ZG5keWwxbFhueExVSEhDdHpSeld0UTh0Tm1hRFpRWG9WUjh4NjNXVEh4aEJ2M3JHZTJtcjY1K1pMR3hQeDB0Z2k1UmhoVzhrN1lNaHpBWE5QMHFxMkN1bWVacW9JZ2RYekNaQ1VFU3k3VWRDbjJmYVpjQ2pPYklRMEJudjBaTnlpUXBlUFFvbzg3T1FMMjdjK3Jhbkx5MnlRNEhDM1JuQUpzSk43aVN2U3B6UnZzQ0pCZm1SUVVWUW1YeEQrZ0NNWmxnSlhiZTZGbnF0NVFOb3h1d2lXU0hhTlJzODVMWHFBb2p3NGI5TTVSVk9OZDZNa1lsREw2bXR1K2FBZUZ1VmtuK1A4MFY0RS80ZGx3L1VZN0hDOTZ3QXUzMnZlaWQ2Sk9TKzBaUkp6WXV1dW9HWjBpczEyNm9UQ2hmbjgyUlRlckdXUENNUlFmMEFUUTdtdExZclpFNEhNWEpyRWdrR0VTSmx6ejlha2xHRXVSWlo5Wi9CbmtWRWFDS2hSR2h3b0gyUmdSOWlBdW9kK3owczBRdWNUaUltN0xyc2VRWEF6RzFiQ2M3anZCVCtCMExzY0ZLeTJIRnRRcXltcStwMWdpK04wdVA2MVdLcGY0MUNZaXRQRGxnNDZWWDJYSEZRaUtSaUpKYTQ0eENNZ2pvdFljamtzSkE2MXExR0krNjJKa2VwNVB3OHhickRzaW5uL2pYYlU3NnF2cXY4Mm5hcTczR2NiMU1yd1hadUhiNzR6ZTN4d2I2NFczMWZhQ3RuWEZaaXlwT3ViUnJZdmlreFhHci9NVHZaNmRoZ0JLZTBUcWhONU04S1VKM2JVYkkrZXZhVTVwTDg4Z1V6VmFVN0gwK1l5a3ZHNDVYQ21vdFg3RU5obC9wSHkzOUE0d0JscFZyZDlOQVA2dDU5SkQrZWNWb1VVY3RKNTlQejRzZVJYMlMxb0IzNFlIakdhbTZ4UGwvVThmM2czSzQwUU1YejhaV3pkRzBKOUV0L2g2dE13SmFzcStaVTlORjJ2cjVMNVNKTzJ2cGRRQkRvOGdoaXk2K1pHQk1NOTR5aGNlN0hBWW8wamFjL3U2QjNKdXYwcWIxYklTYlpibUFrS0QvMElqOXpUQUtCd0U0a0ZoNHZkVUd1U3huRnV4b0dmMVMwVEJMc0FaK3Z4bW0raW1oV2ZXK2k2cHJKNmM2bkZtL1hjN0FGVzFmZ3hlVlBaNkxrdVhtNnFPeDR3S3YvT0FNL2RnRFlQSVV1ang3eCtrUU10QlpLNmkxeXc5UVQvTE5sQXR3bnVLdWo4WVRvVG9zY2N1RnZxd3dQS2VxTmVmQitsR2pMdHlXTVR3M0RMeVQySWo0YmhmS2dSVllRV2tOQkJWUXJCYU1YaHc4V3A4d2ZiVXIxZGNGd054TDJHZ3dXVEljK3BIQ0dxbjQyZ2ZtOUpVTncvbjhiMFpVSG1ucEpOdjJDTkI1MjB1Zy8zUlpIL2NmbHpjTENjVU9vU0tQL3NSRC92SXNxRS9JQWJzTWdRRlpVWlVjOThadERQQmo3WFBHTHdvckFib0dycWdONnlDb0hKYTFRMEFZeWZ4dHl3eE9Tek5idWg2Q29zZHl6SlFudERsSDNkQWFFVXNBSWFXR2RkNllDeWlVR2FwSysxbU1XSEFCaU5LSkxodDRkbFlKOTZ5bTdxRnR1NUNWWnVUSnpNZzlaQ0hMb1IrVHJJaTJPUTl2TUFuWFhsck5XWXdDUEhPcFpXN1VoQ28yMFJIUHFWQmU1UDRMOUE0UDI4amV6UEgzRlFJb1VoWjFOUUxFdDRoM3BpV0Y3a05mbUdlSzZRR05ZK1NFOW9UYTFNdnc3cFk4NjNFbUhNNlFaSkU5Q3FMdGY5aUlJdHZXSXRYb1VFZEg0ZHVtWUJFZFloa3J4ZTVIcW9RUkladXpUNmxyNkhieVFGblRjaGdDUk9EeTVMTGhLNktycUhGd0g2RXVDY1JaUTczc2hDVkFOM0k5ZnMrWVoycXVtdW1oak5jMXJ3cWkyekt3UDV0MzljV0p5UGJyeW8vQTNoaDhaQ3oxS29pZVlGNTB2Vi9nRUFqcnVrK2dDeG9uYnNtRnA1QTBtNVZWRTllNC9UT0ZWR3JBcG1TL012a1N2UzIxejhFdXgwK3F6d29VdFBGaWRhR1BHVHY5REU2d0NFRWxOTUNZY3BHYXFBNFlzZTBDNzI2d1g1OXFtQ3I3dTcrbUtLSUxnWU1zTzdMQmJKSW1FRDhyNDh3ZGtZUVBBdnlqdm04YWtaS1FsM3AyYzRrb3VYTTVFeVJjS25BNTAwUDFIOHM0QzdUVThQMmN3QVlrYTBhK1VRTm9DUkxzZ1Q0L1dwT0pWUUQwV1g4a2h3cEJlMFJURHprUWFlVGNyZ2JzTUhiZWpzY0x1Rm5UYVF3U2tKNUZHajNJaFZrWXYrQUkrNHVyVTAybjhPdlNQMFZsZmxvYm44VkZQb1JlZG9tcXB4L3dRbWFFZXZaQUtjMGR6MjVUcEFYTDZkV1BwZ0ZMamQzWTdaNXd0eFU4aFJYZ3ZvZEsrUnVQRmZib0x3KzhZL205SFNWSGdmdXF4M3lQUDlCVWlBcHFLWDI4bVdrSWtuczN5Zis3SnBxYzB3MG4xclZISzgwNVlLTHk5cWlMZDQ1djZUVVNhTXR3VzlKOEVuN1U1Zlhnc0x6c0tqUEpvWFd5NmJnUVlyMGxXMU8vMW1XOEwxeENYbXVxb2ZEYXFmNkFzdGhWYll5ZmNRNjVYdXV1YS9HZnFqci8xS3lMTFJHMUI2RVBJeENkS2RSeTN0R1c4bS8wT0psMlU0aElvVHFIOVJ2VEs5ZkVMRnM4R0pCWm16M0J4d2Vobm15b0FhTXVzL0tDdFUwUzJXSVpXbzdrbnVuMitTTWJzTWNES0E5dUVqUkRxVUUrNVkxZG9UQzQ2Zy9vM3p0aGVkVFZWK1pubno5T05vVlU5cUhqRXBrR2Q5SGxad3lML2NFSng2ODJibEdlem9ISGtUVUMwRkt2MjhEVUNTQ0ViQlBIb0dsTVhFUkU0SXQzd0hTaExBblB4VHBMQWF1R1ZsU2t0KzRwSS9UMnE1YzJoeXZCeGVOVHR5eDRsWGRhK3hyS0lNcDkxakZpSUZ0WHFIb2luQTZyVmtnZGZsQ2F4aUlESWx0YjIyMGN0bjM1ZzVVZVFHa2FJbUJyZS9Vd1NGeHVOcS9ZQUFQQmV1ekZ5a00zQlY5NVNpVDdrL2cza0p3VjVRREdSRFp3eFFsTTZ1WExvUlZuT2R6STFGODRiQ3l4MVlaY090em8zWDR6REFKRVdib085TmdCbWVGQVpuMEhVRTRuTVU3YnR1TytVaGovYjhZQU52UVBZRG9EelRBZzUvZG42VDZwRGJBRW5rLzBrNDNkOFNiTHpQamRibDM0VlMwVTBzTlpNUGpuZlk5ejRwY2FOQU51aTRnaDRINU4rTTloeWRVUWNleUU2V2ZGT1ZpbkdVdWFJSlJ2ZGpqQ3YwYlJLVkpjQ3hHbE1CeTI1cUExK2lYOEpmQ25pNEY4TG1SV1dKYkdUaG9xZGRqeHJiS255SWc4aklxYXY2SlVSVndON1B4c2tlTWRqcVZVcng5bnlhMWV1Q2puSDA1ZlR5dXhMakdIOUJuSWR3RXpOVmtQWW5BMTBMMjFnTHEyQVBMeEVKVHNvY2FiZC8yNDRQVS9ockhPTjZBZm5VL3IzNUE1U1o4c0dFZytCUTgrd0RXT0JPcnVZZ3ZtQVZkdXZxRzlnQmZSWHlpcURFclVXeWxVWTBkRElyTGp6WjR1cXpQOXNzL1FMQ0k2emNvajQ0N3FwK2gweHlMbGlHRUNMTDNXdnlnM1l3WTZTZVZITnREOUtqMll3S3pFY3o4ZWxJdmx6azJnNkZtOVNhcFlBNWxjY3k3UXlrQ0E0eVB3MWZwa2JJYlVxemd1cVQzV2VmUTFOdFR4TldSSmlnQTMyYURnRlh0NDIzVjRFQ3FDc1ZJZkdlMW5YVzM4WGpGcEN5TU5BR29ZQWhVS0gyc1dQdDlva21KMVc5alhXWnBHZmgwcWhVTjZhMGw2SjZYalhRR3h6N0xuMEQ2Z2o2eUlnZ3RNRFJtN2hSTHRKYW1hQndwUWg0cFh1NFY4ZDNxdkJseXFjblJHNkpTdGlwTGZ2M0YyQmo3NjkxeHMwYVp1SVgzWXNjc21tVHBOZWVUNmEzelZMZmVuY1pOSXRMbnRWditSUlhnaVBKT0EyVFV2MXVjb1VYanlnM25aN2dza3lEZ3BUTHZJSm1WRVdWVXdSVWNZa2paemQzNU9RcVhkai9aSjRxc0VuTzlta1piOWZ4bFB0VDM0cFpZQnRKclhjb0g3cm9mWWxkb2VXZkUrOVloN2tsNFkyOHRJU3Z6bkIrYnZYUTlpWnZ0NE9uL0tLcHF0UTM0ajBSZVc5b3NEeTNpK0IwNGpmbEE1YklNYnhEZnpCS2RreittL2hQOVFsOUNyN3poVWFjK0l6Z2pqVlpxa0ZlTjBTRzM4dTloZktRRC90bHh5Njh3T25DRzJNbzZFdFRZcWFhNGRCeXVmSWt0cENyTFpzQ3c5UitzV2NEbzlQRForVGkrdjZOM3hHVDVFL0x0K1E2c0lCcDU5RjZEYTZuOVFRUkxYWEMweVA5VGxQRVAvTm5POVlUNGEyQnZENkl1Z1JpMmR1RTlhSnkwM29Nam1CMWVHZW9QcjR3cU13dGNGdVE4Y090bE9KZVNvSHU1dy93VjhpNS84TE01d1dTWWF5d1c0OStpUm16Y2JzMUNTSDJtUDFVdWtVZW9pM0hFQncxVEV1S1FMWW8rdDlhczZjTmZHZndtUjFabjFJK05WTVRLSXZoOE5mT2pKTm01VSt3R3N3MGJQRDRKUW8wZWNUcDNOc3VBenhBMTg3cjdsTUp6c3VEdXNtVzAza0p1QmZIT2xhY1h5cHhyRW1PNG13alVtMlhxUEZTTVdpellBUy92d0JlSEhFSm1vczU1by9uMjlQaDE2b1k1dHRUSTRkdk9tRXdDVmdZYnptZGc0M2xGdVlpaWhHazRveXZpWmE3clZWUmF5ZU92aHpqMnhHTUZUMFo2akUvUXgxUjZTUlRXL3oyZGl4QUQzcjdZSE9ROUg2TnBvc3U5dHM5bUN4Y2pETXI2c205cG1lYkpTcXB4SEYvbTNqMi9OUVRLdVU3TFIvdFQwdnhWbHl0VXkxdGh4VXdKSC9OZ0NFSlNkM084OUhGaUI3eTZHMjNFQ2IrTll3VzRDYm9WS2dlZ3lic3BZSkZMem1uNllaWUNjVWhFTWJnZG9XYllNaTVkenRZa0RTY1BiL3FLZWVuc1BPNFdVNDRENWxZR2d2c1Y2VjltYm5PNFhpREEySW1VeTFtTEdhWVh6TTdqcHg1TG9Ya3R2RG9OdlRwUWp3MFBRWDdOcmY4aDJIWU5vK1h0MzdSVTMzUStZQWNRMCswMUNyc0NjTlVTUUxnQUwzNXhsbjR3dHg0SlVsNFRZamF3dEZpcDB3ZklCZzRLbjJSRmlUYWVvUDhkdWNKbGVyYmpKVHVtVWdiemxjQnVySW5rMnNMMEZvVGYxV1RkMERLNkxZanFyNWtMaVlaTFFsU0xYY3d1aldiNU5FcXlVcmdMbVM0WXZNTDlVdDJmS043QktsQnB2SHI0czdQbzZPQm8wd1Z5aEpTRGF6aXJLbWs4Tlh2YnhpVDZyUjJLMXVHclFiOUwrSEM0THVkc05HVW1FZWxZTzFKdDZGdkNLRXVJRCtwc0FGbHFteHlwcC9lYmQ0OFJibnozdnk2UkV4QWRIbi9xaFd5MzRpbUVVaTZ4OVpYNFVYKzJxWkNQWWhMdS93SjNlSHM2SkF1SWdtdWs5R1Zid0R0cE85OVN0M1BtelFvRDNLZk5rWVBvUG1VNUd3eHlkOVFLamRONk11TWYxMVp5bkFUSUZzSDcyMUJVRjdtSCtkRWdxVE55T04wL0RoTlp4M0ZYMndiWDFLWElmQ2NnbzlydXNtcTV4d3RUbXB0NWlNbE5HQ291bkR0SEtORHdHWnorSnZPY3NPTE01QlE0TjF4VEU3Q2lTRlhUSVk4RlFMVWNERUVqazlmRi9ObGp3aENsTEhWYXNlbEF4L2ZrYndJcGRnWDZqT3dnaHZaa1hHSWRLNWxuSnphekhuMzMraWY5NlZlQkwwc0Z3WW03a3lURk13L1Q2VEdTMElVNm1vRkhkdnlhWWVNcFEwc2ozNDFzSlhYN29jeHcxK1RDYjFsTjh2SjE2NEI0MWJETnpXSnh6aWZwNVlBZ00wUXFqUU5iYmVjYk83aEFFbDkrVGMyU0Q0clp4d2tzZ09Gc3dOSkphdG5aQUF3dGF4emtLNyt3eXAzSzBMd25ocVc4bEsreE9NSXNRT0ZsTTZOYUdxUkl4WDJDcEZDeVZUZUtvRTJmZHRHd09Memd3dHhVUXMyeVpNRHdQMlRhSlhETmVEZHJjY2l2NlVKbE5IUG03ZGs5K0VRbllkYjdEa3JBTk56NXQzS2krb21SVkYxaDA2U25ON3dybFFScWJZQVl4aWxDNnp1eGc1QTVndm9uWEY0ZnBNbzFNVkNPUHJmQ0VHT1N5ZEs1eXlxVG52b0dLM3BQa3JsUTIrSVZQam5rOHZpWHFYcURhaU9JREF1NS9IQWlMVFBrT1dDZU1iSWNxeUtIWHM4SDlrRTFQU21sVkNoRkgvVGp3VXVEUi9tMkFOb28wN20wamY2TVNtVlZhUUtPa05QekY5bG85a0pwdlVHR1J2d2lINE1TaVpHTUYvQysrUG9MbFZkS2tvVkRpSXUwUVByVHlSOE1PZkxhVUZkOFozM0Y1MFA2dHVwZWZSd2I4WkE4UGp6S0ROWE1PYVYxU1ZHR0p5TzZrZGQ1SWs0SWQzL2wvRHhiOWg1RGt4MFlzY05WdURtOG5Qdi9UK0J1K0QzOTJoNHJ3Tm5RcWNvQkxTMlQxc0lha1J3YnIvWUkwNHRTVUlYNVFxaTlNS3YrNWhmUFFBQVZ3RjRKdWthbTFJdWVqckwyU01jcUdWY1hMMGRMU3N2ckp2VExkRUhHR2JUVDVrYXZ1eld3OTlFZHp0TGgyZ05xKy9JUXFIbzFWSmV4cFA5Ly85a0FBUUFhQUVBQUFTSUFRQUFQQVFVaUFnQUFBQUFCRVFHUFFBQUNBQWtDQVFFS0FnQURBQmxVYUdseklHbHpJRzltSUVacGJtZGxjaUFvTlNrPTwvQkRCPgogICAgPC9CSVI+CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I+MTwvTWFqb3I+CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24+CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I+MTwvTWlub3I+CiAgICAgICAgPC9DQkVGRlZlcnNpb24+CiAgICAgICAgPEJJUkluZm8+CiAgICAgICAgICAgIDxJbnRlZ3JpdHk+ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8+CiAgICAgICAgPEJEQkluZm8+CiAgICAgICAgICAgIDxGb3JtYXQ+CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24+CiAgICAgICAgICAgICAgICA8VHlwZT43PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MVo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU+RmluZ2VyPC9UeXBlPgogICAgICAgICAgICA8U3VidHlwZT5MZWZ0IFRodW1iPC9TdWJ0eXBlPgogICAgICAgICAgICA8TGV2ZWw+UmF3PC9MZXZlbD4KICAgICAgICAgICAgPFB1cnBvc2U+RW5yb2xsPC9QdXJwb3NlPgogICAgICAgICAgICA8UXVhbGl0eT4KICAgICAgICAgICAgICAgIDxBbGdvcml0aG0+CiAgICAgICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5ITUFDPC9Pcmdhbml6YXRpb24+CiAgICAgICAgICAgICAgICAgICAgPFR5cGU+U0hBLTI1NjwvVHlwZT4KICAgICAgICAgICAgICAgIDwvQWxnb3JpdGhtPgogICAgICAgICAgICAgICAgPFNjb3JlPjc5PC9TY29yZT4KICAgICAgICAgICAgPC9RdWFsaXR5PgogICAgICAgIDwvQkRCSW5mbz4KICAgICAgICA8QkRCPlJrbFNBREF5TUFBQUFhK25BQUVCQVFBQnI1Y0g1Z3djREI4VUFJSUFBQUFBQUFGUEFFQUFEd0lBUUFJQVFBSUdBQUVCOUFIMEFmUUI5QWdGSFFGZUFhc0FBYThtQUFBQURHcFFJQ0FOQ29jS0FBQUFGR1owZVhCcWNESWdBQUFBQUdwd01pQUFBQUJIYW5BeWFBQUFBQlpwYUdSeUFBQUJxd0FBQVY0QUFRY0hBQUFBQUFBUFkyOXNjZ0VBQUFBQUFCRUFBQUFhY21WeklBQUFBQkp5WlhOam1jb0FBWm5LQUFFQUFBQUFBQUJxY0RKai8wLy9VUUFwQUFBQUFBRmVBQUFCcXdBQUFBQUFBQUFBQUFBQlhnQUFBYXNBQUFBQUFBQUFBQUFCQndFQi8yUUFJd0FCUTNKbFlYUnZjam9nU21GelVHVnlJRlpsY25OcGIyNGdNUzQ1TURBdU1mOWtBQkFBQVVWdVkwbEVPa2RTUWxRd01mOVNBQXdBQWdBSkFBVUVCQUFCLzF3QUUwQkFTRWhRU0VoUVNFaFFTRWhRU0VoUS81QUFDZ0FBQUFHdUxnQUIvNVBmRXpBWkx5T3RIQ2pYR0ZmenZ6WlorZjF4dkU5cXc1Z01zVWtnSTc5WDB1LzByVFVDY2RNYXZwZ2xtdDExMUlXd2V2VUpYOUNBZ05lQVUyK21XRFVBMkNXK2FHUS85S0F0Z1BGdzk0UGFiTUlzZldNdU8xTkNrcVpyNXc1SFBwNUJZeUtBOFZDdWVTQmkzNEkzT0hHQjMxNVZaQ0UzNXhlL0xlNzhDZ0FCVCtsWmFIMjh4RXN2d3BRWVc4ajdhWGxYWFJ2UitpdzVzSis3SVVBM0U1bXZmSTFjWFNOSHhVaFlIM3dZVzdZSHlldnc4R1g0NnowNVJrOTBZQlMyUHVwdVFhRnJSMWtlc1lqWlBheDNra3VwNENKYmhkT2ZxZGFxY2UvK2ZCVlNXbFNBSitwdzRRM1RjZzY3clAzSzRiSHBvaGI2aEphQWZxaFpSVkJPeW9XZElxTXU1TFNhMjlUazRRQzVrTHdRYllJRnFYZXJKOGpwU1ZvK0dSZTZDV1RkSEp1NTA0dXFMamdKV2ZSK3Vua2RpSitMdHEvQ2NJWWFrSjFMN2pxMUNmNHM5K1hKeno2Y25hTDhpTkNacEl3YU5NQ2VaZjV1SElhTzRjREpqMTZIMUZaS1lXWXdpdHErMmNURVJRQ0Q1cEtxc2t1SjFYbjZxSjVtbnlTWjUvUHd2dllBR3VsanpKcjhZNytNZGZNVEFQWmdvcU0rODhSWFQrcE9WVTZjMHVKUlV2WmdKMEhLQjRzR0QxWVUwRkQvY3BoZm01TEx2ZVRQcHVNYUN0ZmtUeUpyZDRja0orZnhsdXdJZ0N6cFRPVTdaYlJwQjJXS0hFWjRFQWtIMHh6QzF6aElDYzhCYkRlTDhIZG00Y24vQ3IvQ1RRdm90dStYSjJTZSswYWphUExMU3ZDZG4vMHVXQnR5b3M2emNSd3FFYnBCcWsyR2JVcHlsMFFMT2Z0RE1aMERqUEs5MHR6TURXQmd5VWNvTjhrc2hkU1RjSVZOSm04ZWE3TCtHK0Rzc2xNSGZsOXlnU0Rxd2lvOElOM0FEbitsWk5UQXRoWXdrZVRzTWFiaDVmMlpoY01LY3BFVEk5OThVNFVKNHdvdXlFOWIzS1pxWUdTbm11STd2ajlWUE5ZbjZzeHZRS0ZxQjVhM0F5UVBSeGpaTkFpbm5BODU4OW8xckJDWC9pVVlHaFQ3QU5vSjArYkd6SjFBaU1WUi9XVThPTUE3RVphQTRnRGM2L3FuVDU4VmRTa0NrbE9yOUpEclpRZzkzRGtlYXZ1aDY5enJZS2NlekY0Q2MyT2daQ3NtRTBhaE0yY3M2ZVkybDkwaHZnN2hiL05LNVZ1VXdMcGJTZVpGU0pGWEF5aFVWbm9XQ213QjI4bkJWdXN3bWs3b1ZNdDVWWG4vYjA3ZzBrdlViRGl4cW54NDVJZ3FQWG1rR0F2M3V3MCtSVnloM1VtOFJiM2pPNDNKa0UvRThoWXdiR1l4VXREZzIzb0RYVmVhNGkzOXhmVnlReGd6YmczSUJqckd5SlZoYjU4Y2NEdzZzVXBCbXZRMmx0UXk4S2IzY2Q5ZldHNkpQcFk5Z0tPZ3B2M1pwaWgrZG1jTDRrTkEzNUVxOWpBc0NnUkM3TGVtaExYTERzL0hyb2R6dC84dldXUXIyR3JaUk9YR05rWCtGN0lyQkk3eWg1OG1weGU3NEFvenNIdjhNdWJEM2lBcU5qc1FsL2NDemlUZ2pEdW0yK1hYWmU5dExHZW5mR2xGOGhaVjUvSkNrN0JVT0RCMEduOUtpampQcEFweUlXdGtvT3QrZ3RNWi93WVpOa21paE45b2docEt2UDQrOENPbUV1clN0cHNLWUU5ejVuYmtlQ29wMTM3L1NzOW00TTRBTXVMSVpkRGhvNWdNM1BkQkd1YUpUQTVkTDNCVEsxeXJ0MHo3RTlnNVNtNWxOM0VqQVI1SVF5eTNqZGJBN2lzN0gxVVNjVkwvR2I0NkE1bmRnY1N2MmNBYkYyWlpreXN0TzFjYXRIZEdCV043Sk9mUmZmODB1VVd1ZzFNdFNtbW8vdjZhcGRHakI3b2NlTWREd3Q1MDZJeVo0WWpjV0FQeFFENHhobk1GUHZGdlhrR29wY2hXVi9VSE1tQWN2VVY3bjBwbGZlMU5FQVhjMSszZEMzak1xa0NML3hWVG5yVjFhWTltNERwQitvbVZMcXdvb3JzbnhXT3lPSm96ekd6OHFhL01uWDBzS0tKaUxVcHRDS05IMjg3RmRBdjhkY1lxcENMTmo4Y0VJWUZFUjFNdU1NbnlRaEx3MXhYNnZKdStTcjcwSUE5citrcnBDeUdYL3FRMUI4bkhhdE5Jd21vaXhWaitOc2dhQkpxV045a1AxUEdVYis5ODVpNU5JdVRIdm1wckVuSGRQQnFQeEd6c3FFcDNaUWc4STR3UmtQRmxMN0drc1Bkcy9IUE0zUTlUT2FQVi9VenFvUEdvZi94bVNoRlZVRFgyc3FBYXIybFU1bkdpcnN2MWMzR3lseXFvd1UwRVVLeGw3emxMSTY1UUUvU3VsVkxhTlEwSWY5UGgzZWtaZnltVTFwbWIyZURqZFliUmMwTGkzbVhsdjgrTnFWUWdlZVozaUowcFJpbm5XVGN2VkNjMFI3cHhTUFFMdGRTZEVEYjZZeDlMT2NXR2lZSnF6V21sMzRZdE5XYThnK1UyKzBsTTJ1dFdMT0ExNnFSc1RKTGpGZGYxWUhteTVTMCs5SnV6eHhGRjZXYnZmaTE3QkRFK2ZDU0dqU1lLaGtwSGtubUVGUjRJM0pFbzlMWWtDYWY2SUtUTjFGWHdxYW9URHNuN0JCbE4zSGZsc0pZUDVGY0pQYkk0UUVvVnhONzBtU0xvU3hsVEZ2Wjk1ZUpEQ1VzbHRDQXQza0FEblM4dXZCSDZ3UHJCQ2lYUEN4V3o4SnpVVkpFeTZtanhweFFjZlA2Ym10dDRQSTVJaXVGeUwvRDJndVFyVEdBbTZScWRTUUdjd3Z5WUdPUWVDVnBURStDd0FiVmx3ZUpXTEVpOG0zMUlhejA0OW1wSmVTUFFMQzhEMktlS3d3a0t1Wmkwa0FzVjVZeFlCazRaN1JlUkllaGhRangxWXNvQ0lLOGExQmsrS3BoQ1lGWjNXdUZFMXBVU2NWaVJIdEZXWHdWVlR2dUZPM29rR3ovMnk3RW1kRlZEOEs2RDZpTnpYTFRMZ2lPMFkxamJEdGN6SlVWV3hUVkhHS3I1eTh3MVNXNjFTdDhIWUUzSkl5OCs1ZGUydkdsMGJTMit3b3ZhOXJ1aitaaHJoSDNvRHhLS0dzdFEwR0ZldS9zVTZHMUt0ZkVqZXpLLzJwOGZHM3drRzVHazVKZlFSenoyaFRGVGVEdjQ0b3lHMGlpcmVlRmRkTnk5RnFmeTRHSnpUWUxFczAxdFhNa2FtZ2UzL1liUlhyMEZmOGpVS01kU21HUDkvamV2NldVMWQ3aklSS3lkZmNrTWM3WnFnU1FPZWtTWDV1SUs3a3VSRGxiTTE5U1ZzRzBOOExEVEJmZTRLY2x4T0EvWnhrdFRmcWNqV3dvRU5ZUTVKK1BpcHdXV2h3UE5pRXlhbkVaVW5tNVFReGgzMVFocDBoZkVTcWorN1BsZW1YS1htQ2lvUHgvMnRQdlJqaCtrUUp3SUVOdmswVkdacDJ2Q2ZYS2N5NnhTdEpDWENMejRpL1VKQ1dTTkxOSnZJQkVJNFJSc2hIOGpjQjM3T3JFVjhaNWFEZUZTT3NXSkdCMFNORG5ycEp1aFFoMnZHUk10bEh0VGM4ZHBnNVNucFJwa1kxSUpJUTlEUnQ4bWhTY0FHSzFBSmpZOW5iMHY3N2ZmZm8wRHBHR24zbmF3c0Q5Z3ozNWFuQ2F1VXR4alVuRVJpVWJtOXAxeHJRY1Y3Wkc5N0xqUEpPRU1XK25vL2tFbzlsbDVIa2ovUUZJY2doNlFldTNqRjlmbWVrY3p0NGhqN0JrZjZSb29VcER2cTNwZFhrM2svRWVOYUhuV2pWRDhiT05CK1VCREdyL2JmM09pQU5vVWhpQWttMndiaUN1VGE5bEY4c0ZZbHJzM1pwTEZMdWl3M0NjWUpRQ1N0MCtYVUdQNzZSdTUzTlR0RUxremxPT2VUc1ZhZjdGaUxkWXhua3pYamFhVjNta2hjNVV6elZ1U3d1ZTZkU2ZjV3lYSkZpMzFyb2g0Tk1GZ1VOTEdkb3B4d2g1bXlWYzNZa3ZCNC9XM2VHYjV3WDlWeTRIZ0lkN2YxRXI2ZHJEWGQ4UlU2NkNQZkRsei9mMUVPL25DUno4bm4xcVNMSHBCMkNPOE4yc09UcFIxQXJsVEpEcjViYkorQmlhTUNtYmVieDFOS0owY25sKzYyT3dqa2RtRlBzL2ZQbGpBR2dEcm1kWnJKUkhZVjVIMmFYd3pzdGkrUS9FNkZ4bzhia2R5OTdndXIzNXRSclFDdElUc2Naa3dKUlpVTFpPVDFIWWVWcXRrdTVEdWlJT29ZVGtyNFFVQTNCR2VaTnFseUlRbkw4UDhoZEVrVy9qN3lWc1JTYUlzcG90OThrS0ltZmpLNmVhU2RneGNUditBQkRUNWl0RUVpNkQ2UzhIZkhNOHRMeHh0ZWN3ekdHNWtidEFqMFA4QTA0Y0pGdjdpNGR3Smt1NDBjb1cybmxlZkdHWWFhS0ZyeGZhbFBldnN3cE4yeTFjemVQMFdVZ1UxQnpEY3JwSENSR3Rncm1pamlmT0tlcUJ3UTFBeFhQajZBVW5OSHhlbTZMZ0FkcVhzNVFLd3o4M2FGWllBVkpqY0JrZUxDVWxPSzFZb2pZYWZNYUc1YmFOYTh6eWMxQWZiN1NlVHpqTUEyeDg5Y05CV3VXenhtYVdXSDFZVzkzRG00blk5eUJwczhGR3ovdk1Mdmt6UjlCV3ZhMTFpbVV3a3c2SVJzMmhJeG10ZjFjUk14bTNIcGNPQlE0TlBDeUlUdmgvMFpSbkFyaHVjNFZGMHMwdVRTU2FTTXViUXJGWFFsQm1sc2VvcXp4WFNab2QrNWUzWkVxNEJpTVFUeWNtc09DNHVKU21ZVGJxdG9lcGFJMWErVXQyUG0wRDRrczk4Y0F0U01PcVFwQ3JjUTcrS1pTMmxONXFBMjdhazZFSU9JM2EwaXJ2V1EzbEZJUndGbVRCcFpGcnY5U2JwQnpZWFVnM0NIbEU2N0JraXVpVzlMUTVqd3hqb2hkT0lZUFYyVkx1NmFaY1E4c3MxZ1ZtaVJNNEJFaGpFVk9mcjFIYkxJeklTcGxmdUo1dXE2R0Rzc3hhNGtYUHNBYldnYmRVdllXNVBaU29ydVc4cE9rZDd1am9MQ2NUQTlSZVY4Z1gwTlNub0RZLzh0NDlVZkxYWkF5VmRCbzlld1RDZkw5aEluYWxZd05peHFNdXZoWTdiU1RTcEtIWEVDOEdDU290ODUrUFJPaytlRllXUCtYR1JHVS9oelVrS0hUR0RkcWlQMHEzdTNsaEk5d0dTUDVJT01nNU0vMzBOM2hjTzkxY2k4UVdWNS9hald2b1hjWm9La1psMFhUSGFONjk2ZnpXVk1jOUp6bGtZZTBRemtveGRiTVcvSEdUS2RuRGZSYTRIaGpxV1dyYUVETEtIZ3JXMlVZYmZEcTZkenRNcGlZWWRKZXd5S1VnclBTeDQzaG11SXR3SGZvTVVwbWVzR3l2ZFhtYnBwMEdMankwUHpkZVdLNURseTdVOVNWTXVmNzg1VHUyNXkrdk5mamVxbURMaklaNmw0UUNaT0dTbGFrWUpRdWdUNTZadUI3OERnc0ZlVnZ1NEFTNlFmVjRnWU1URkRBMFNjUjlJSGlLdUtrVUYrdVZ4KzJ0T0J5SStCTFFseVlpc2w1ZUc3T1V0YkpCbGFHekJBYVBXVmc4dTIyMmhZZ1BwZlNPc0k1VkNHUUNQSkxodVQySCtwN2dTdlEwbElNVHdMYzFMMkZwbWtCQjgvRWNyN2NZSHgrQjUzYXU4ZXZtTGJZUFh3Ulp5UlJab3BIUXBjR3dIcmw0cDNBb3gxZkJwUGcvckZFRTVIcEtHTWM4R2IvelBXYzBINGxMZExDbzUrTkFMeTRPYzZNc0pqOHBZSjQrTCtOY1pQQ3pFTzZsMDZDWlRTOFF0Uzk3d1FDa1BoNWxUYm5WeEFNMHBsS0ltUFFtYWNlWFQyNk9OSjYxT1RQUEticEM2c0cvME52WXlEQ3BoT1RyMjE1TzZVL04vQnhIQit4bEpONTV6TTJBZnQ5ZXpFbWFYb0czUXN4QnEwd3k5Ny9IVXhYaVJJWGdVaWFEOGNqUXFYcmJOZWlkeFV4N2tDeVBrazlxUkM2dGRvWnVNZGpwOGMvMXA1YVU5RWpUdW9hcFZSa1hPSHMwUjRLRkZmZjJEYnJibXNtLzVIUklqbDZZdzljZzRyUWhFY20vRnhsSUYwWWc1RE5wQ2pYcTQ5ZEF5Tk54UllRc2xBOW5NWHlnN0FVajgwbFA3YjBHRTBvenBPSUUvOGRRMlFRVGpCZng1RXJHMUdOK21QZVRKa3hNcFdlaGtDdlVieEdxZnZRNWRaQXVHREU4RTFoei9jNVI5aGZWUkU1SVRNbm5Edi9wb2lla0lVMU9uWDBqMjNvNXcwWVVVblBmazdyMW1DamVRd3dCZ1hSK0U4WkkxK2Z2Sk9NdkU2R3JYNGlLVkVUdEs4ZS9PTURkRTJ2V2xVdjhGZUxiTGdFN2U1bG0yNXpBc09NVFlkcEVZTU9nL3p0OXFpMG9zWHdrVGlyQ2cveDFnRmg5QWZKc3BGUmZESFZ1RWtPdkFRM203MXZLU0FZVWVKTHVodHUyOS9iVDlOUmhyeHhSZTZIUjlMQ2FjcUY0U3BaOEZpTzV2VHVaeGFBVFYwalRaaHpRSXVYSDB6VEJKUEk5V01XZzRTSDJtWitwTXMzb29FU3IwTnd3eGl6bU9PeVV2bXZraU94K054NnppaXNlVjVwV3VJMCtJK3lnaUVTZHYyM2ViZXFuNVBPU3l1UzdMSEE0NlRPbnJxcWllbjB3UW9MUG5YeWR0TVV6Y1BlbGdJaEZWL3B6QTNKSGNQRWpjSGQrbHBITDhZMTVBazRnczZzV293MjdZQTd3b1N4YTFIaUlQZDdZQnJzbVZtNmJwYlNxTVl5UnRzVlpsOTRIYlgrTE05OFZUa1BDMThmT0VZOThOTTBHdDVwWHZUUllhSHB1b0RMNTNXYnFSRGhSZlVya1ZuSTlRT2VnOHFDOTJabFNYdnAvRnRDZEx2ZElRRmVVZHRwZkFQR3A1U1VhZ3NQSld1clpGNGU4T29OVkZXMi9VTzBzMU5hK3dJb2w3THVLZXFQd0RkL2lLVnBlUTdHZnNYMjJUNWg2MWw4emRuQllJRGhvWlpDeUt0U0ZJQzFodVdkTm1lam96WWtDT0plUUpzc01MRHJUZFZhamZzcmovREF6V2NqVE55VjlnZm1ySG1NWHdwbVFscXV4enNpV0pDcks5N1Zjb2phM1RhRE5ZTmFBdmZmbUFWbEJYWm5ubmsrWVhFSmZ1ZHNxc2dzRm9WeC85WjRzc29uZmVDTEpmQkhNR1o4Vm11OEd5dWRsK01SRjA3emV3WjZqZjhwUFlaUHZRR2MvbVd0NnY5ZE5nelZvTUpDTUF4bnZ2TXNpQXp5ZzRSYWZCTExTeExubFBhbkU0UFRQQ2F3T096L3hQQ0pnRGNDVHFxTERndXBud3Rja2E2YUU3cGYwcmovU3QxOWh0b1BYMGpLNUxQdGNvNFpnUWZVZ05ZSTRiTmlORk0vSjJwUHpXWmZEWUZWOFNzbk5wVGhBbDh3RWpWS2FnMFlpeGljS0RXalAyOE83VlhFMDFudG0zdzR0eW82WHVvb2dHWjhnZW80SWVrYVNFejZWUE1rR05UeUtXMzJyS000czRLMUF3UVNUSUUwWTV6eWVYWno4Vml6My9mN1VxUTdveHlBQ0xabEZRWXB1VGkxQTQwZjhrVjBMSTNRSkI3WnNnenIwZFlxL0RzREt1TXdNT3JUNmFrRE50TmhCQWJXT0k0OHZhZk44SHg3Rmw0ZjlMNFNEdzljQzJ4clZsdTdmd3ZkL05nMmtoN2x2eGp2M1RDYUU3YjRwcms5YzRYalNUTFBCSFY3WkNSSWxJZmpES0JTeG9KVnhEdk55SG5HT2hCZlJZQUZReXRMeHowVjIzUmJNWEk5Nm9raGN0b3Z5SVRzRVA4WlhnWHRiVkpnaVo5Um5YQndpOTlOaDFtMmgvSVMrUS9lWWpURWpyZUxtaUIrNW8yTnFTMWJQUy9JV2NpdGtzUzg1aUpmd1dxUk42SUJFc2hsT2twRjd0L3BZaW0zQXR3Wko1Yk5NcW8vREkvdy9BcUNDcmRjdDdhalRtSDlZV3lwTC9aY0VHU25qNEJPK0dvb00ybVpaajJCT2FSa1FDTUtQU0QwV0NVMUQ1MFVkM1lBWkEvdGNzQkxOSVp3ZnMyUFV3OEtaRTB5WWxwd2FJaUx0UHpwK0pVbkpHTVhtT0NTK1I4SnNNZ2R2K09zTmZRSXB0WmxNUWhLKzZYRzM3Uk5yeEd6MGdvcWxRS29ma3FHS1dGUXJSRjlFL0VpaGtFRlMzS0ZueFBNTkRRNDUrL0hFUWFBOVJ4UlNJcVpoVUVyRmFYMmFyVHJXS2h3QldEWUlVa1N5SnlaRVZ3TWhoNVp3Z1FtV3BvTVYrVmpQd2NuS2V1ZmJSemhSUmplMElRYStsTDRFbm5HQXF1ZmlyTWtzbkdDeURHTVNzYUJIelVXVWVvN0JGa1Z0QTlwNGk0eXJqTG04THQ4Qk9RQ0hHYzhsd3IxVTZCb1BCRFhrV1hJUFVkRVFLenZUc3p6L1d6a3J4bnBxNjl0SiswUU5wOHRTYU1MTUoxTVl6M09iZ3YyOFQxRUFOUVFaL2Z1bFd2dGJsTW04S2x3MExHQXlpcHByb0Z6T016c0Y4aG9rdTg2akpseTJRMGZwOEhYSVQ2UHRoRmwvZXVRNTZoSEpUUU9lV0h2ZjFIdWNTTTRYVmhLQ21GTmQvK1BESDdrL1V3TmZYcDB1LzYzcDlXRDFQVmlvM0VlVElKY0NUeEdCM2RKa3g4Wmh5YldZcjhtZE5NQ0docktoNDdscWNlOUdFcm4yU1E4YmNMK2lTL1V6bFVEKzhlR2FQMzNJanlUVzBWRVVySi9ZMFQyRFFTNlQ4N3Btc0R5UWNaUTFMRHJCS0NmWWlFZndHSk5NdldLQ3k4b2Y5OGd6dUFNNldkY0srbFN4alJrc1ZuQlIwZVQ5SzUzbVlReU8vRm03ekRmYnlSNjVZTWZkVkRiUnRjdTdVRm5aWWdrTU9yQVNCVnFZUzRnUWNjOUt3bENGTkRvdytpMkZFSTcvTjdicXFwcVdUclMyeHJWNGFpNmpwM0hKMWhmSEJlSnQ3MXgzNjIxempBUVlsVVFPMGpZdkhaSGYvRmhuUUtsa2o5dHlRVGRLMW90TEVNTTZVWVB3Y2c1cjRacnBuNmp0Z3RyQWhPdmN4N3lvM3MwVzk4eCt1R21RS3RiYWxXSEZUVnJJMlY1NXVyb1dFMURHVkozc1o5MDVDUEFPWVpVYXhQRUZUOElRVC95NUozSm9samxuL1JiVEZSK0l1VnY2NE9WOVZoaE5weG12YmF2bStZbHI0TDJHY0dvYTVSWTBYTlpjUlZmdkZaZVhIa1VTNWVUU2x4N216UEUrVjlZeFp3TEQ1Q2NWTjdwMGlzbU1LWmpVVjR2YmQyYzJNbkNGTExnQmp0Ui92VHRlQUlrTWxZb3MxWldrUjhXbXFmR0RsbHRPVityOFltbzNXQkNsL3lmTmpjTkFSOWJTTGs3eStsZWhBOERzVURWVTJ2c0Y2cmNaMzVzZFR4b2ovZi85YmFIVVRNK29MOStHZXJ2ODdQQjhIeGZvUEkxTHpTYkZ3Qk5CcWtRb2RyOS9UNHFTWG5ubE9KODFzOXVhanNYOVRIWHVuNUFWZFFaeVF3Q3o5cFVlYTNlcDF1SzRFeHloRVo3T1JpWXMyYmo0USs5aDhKM3ZQY2RrL1ZDTG9hMkJGVVk2eHlwZFZsR25wOGNWQ3Jac1phS01IMnY3clBuSlZualNlaTZHSzVSNUFNc3dSWnltSFp0QXJOb0xSODBIL0VyR0M2T2lTYS9aZFMrb1QzRDd0Z2U3ODJRZ2MxeFEzNlEreXZLSHFGNDI0SW9oRHc2SnJVNDlzYXQ0ZkkyM1I4UjJVTzNPV3U4aGdtOUZjemxTVHNqWU5vbW8wd21TWTlpZVlGNURzcEsvZ2JyZ3l2Y08zTXc3Z29maFJROUxMWkF0dHdCcU1VZDU2dFZCQ1k2aWpnQlVBVklVK1VwU1RsY2RBNVVqUmYzaWZsMjZHM1l3Y3M1dFpNQjROV2ttWitiWWVLS1JNZTZOUG1BM0VhS3N6WEVJUWpVam94cm5pS2YybHk4WlN2QSs3MkFTdmlZSnBWR29WbDVhb2g3bnA3RHI4UnduS0lidkFQY1FEWTBGOGR1VzlVMnd0VUY3bmJGVGhFZGdkSTBvb0pkSWxtbG9mMGV1UURYMFBXWW5uWjk5RXRrSVdQemZQM1E1S1lVZjN0M081aWJPc2VFbGQ1NHBEU1lOY3RsSm5HV1d3Mk53UWQ1eXA5SHRyUmNOOFlpOENGamJPY2JRMUlyMCtuamVsOExJY3RnWHRrSENXSXZkRDBWU2k1ZGpkdG14UzdOYk4zTUdZZTdUZ0MrQWlyMFdhay9UcTJjaUxnTk1yaGxYVFdVOEVzVnlBM3NzK1F4REdTNVhqWUNlRkdLOWpSWVE4QU5PdVpOZHFJMmg1WlVTa0ttcm95UDAwRlF1V0szRVU0NE5uWjRjVmZyNVBiUEkvWDlDVG0wRkZBd2NnWVo1ZUE0OGlhYm5PZzN4eWFCUEgzU25LaE53ZTQ4Sm1CSWFHYnpWdVBXNkxWNjgyQWxBY3BlKyt0UnE2Vk80eWdTUVRRU2I3Q1BLWHdFMVdCKzI2ZnNuejVnR1huQ0dDZXR0NDlKMHhwYlI3R0J2Z1F2TFN6TndBckF1elZJbWxKNm1rTXY2Mm1yOWZad2dTVVdnQ0pHTkZRSDFPakxlcFdSNUFkSUlRak1zNjJXank5WXdsdDVWNDE0R0l3c2lGL2JuWmFzeGc2eHpiZ2lKdmxjTzJwS1plUDZHRnRMcXE0cGFPM0NEYVdsZTRwUjEwOU84UjN6Q3BOUTdLbi9YMUtqY1BjTEU1Tm94NXNqT1c4Zm5FVXlpZTVwK3dPZzJVR1RCL3kzZ05QVnBMQkxRMGhuejdHdUp3L0NjK1VJTlBnb256UGFVazBmY2VRQzZkMFZrdFV1SVozYzVnS2Nmb1VFUXk5MjZSN0NjUVlndTA1bnhZT3BZanhjUzB4MkFDb0sxcG9hcCtIQkdzOWxRWEN0aC8zZTg0SzZma0gzeS9zSXVvQ1IyMFRySGN1TmxMaGlnV0o2K1Y4LzNUMnlaYkxHbFhFRnQyN2tDVnV3YXBvb3plYTRuNGgvY1JrZUxFZ1RhWnB5cW44UmtaODQwN29xM3VPZ1p4enFTRGRVYXgrd29QbnA2dk42VmxXckI3b0hEQWU2VWlldnduRnR6WFJia1pveml5dFZSajFrVTI2U1p3RHZzQ3NmdndFbUNuK0tFL2toNklBUDg0UVhab0pXcUN6RldyRG40YkxFMzRRUDVHREtseWRsT1NaTUtsb2FCS0JkR2pvZUZPNTFocEVWVnluMlVNMXMvQ1BoRUJmVGRSN0wzVk1PNGtlYlEyeXo3a2NvRTN0bGRsSnNBdG84U3h1dnlrWjBYRXg4RDBSWmZyUGprc0hMZG03anZDVjRDd2tqZVhQamd1SnI3NG9KaEo1ZGh0dTF6QU9nb2lVN1pFTmZLQkVDOHNoaXJaOUtDMHRBNEsrSWFVd2E2ZHNuamh5WGQwbW42YjZhU0FyR2liZmZvL1lTa1lHalNPd0w1M1poNWliTGhtTjlHTHhNQnRISmZwVWZSdzdiRUpERnJCK2pJVXpESituRFp2RnE1aS9KcVRwS0tjazJuL0g5RHNXVGZ4REJFbmZROGtQZHN1NzF4ZDFRRy9Ua1AyM0lIOXZlMUFoRFRHRkhFbElkTWxBbmtkZU15S2t6MTRyYUQ2dzdlc0RMT1BSd1JhQmlXS3ZFTXVxNkovbGtKSGxhQ2dPZFU3WEg2eEYvYXlKaTBJWUh6bllVYVU5eVF0UzExMU01eHVKMkt5VjRuUDdScUw0VUVYWWZMVHRhRE1yUUdpbzVMRDR2Zk02c0p6aWFJV1hqVENzS2dkRlF5V3F2dTc2YkhJSldDcEZnOHVIUjFWZU82MHhYKzI1QU8xSnZwT0tzdkhWMDdCV0syRDlONnpMNHM4ZW1QZks2Z2FweGVYeWtVMng4d29QeWNGcElZNkFkMUpZVGx0UzJmNHltWk5pNFV0Ull3Y1FobEVZQ0VBbzR2bEF2Y1VBS1ZjQXAzVFdzUU9mYzN1UkM5L0h5NjI4dUFHWTljY1h4OUdHampBU0hYSEk2cWk5RlZGSEpxQ240WFhubjFDNW4yalpGNWkxbjV3c09SaXVnSDZINTJVeHUxOTZhSTFNOExrNkNvckZPZXB3TGVkeG4wQ0l0KzEzWk9INTVsOWVqeHVCYjU3Z0FkbHhEZ0xUV04yR2pFcFRMdlNHMjNVQk8ydjZiS1hYRy9UQTJBWitKZm5HYWtEck1Zb09ud3lVSGNLeHA4VGhJYlYwVkQvQ3ZXZ0xiMkRpQUxEOHpSSm05ZFVqLzVyUVV0b24zekI2ajcxTk9YT1BlRjhSNitZZ3g1ZkZtVG94bExjbzdUamxyckd4OUVjRXAva2pYTE9qellRUUkrZ3hMK0FPUHRseGRjM3c3OGYzTU54eU5EWVI4QnZLQzE3bjNLN2hOajFzTllUd0dBUkgySExMT2NUMXlDMnhQb0hRT2U2ajB4L3BCN0sxTmRWSS9yaTVtVlpMUmE0a0tGMzh5YVNTSXBzdkhvTWlZQm9aZytqTUJmVjBsYnoveWVSMmgvMXVmTFpJNERONXFHT3REcUVNNUZzdC94Y3BOYnFNSmNDOXk1RXRqSk1kOTRmSXVRMTRYT0UxcWN0d0JKSFVORzJiVzhMRWhIMXJ2bjhlM1lzM2lseDI1ZlRQRTd5OWN1T1VKOXVXRkhvUEZoYWl2Ujhoa1RWek5YUi92dnNDVEJaelZZY3lTZ3dXeGw4Rk45K2pTR3ptUDlKcEdnVXNFaThXTytwQ0JDNzhMTm5KMmdVZWVSVGhJL1cxd1pNN1Q2Sm9Ea0FYT2lDZnJIa1U4QWxHZUJoTEZTQ3JsYjRMSWc2dDRDclh1cTZ4NHdlU3dhTXpzMjRKRE1UUjUyTi9xNndGNHNRcEgvU1B1NGFKcUZRRU91OFMxMUYrY2ZVaEt2TnplTjNjQy9VVll6RWZDMndueEdHV3BnZmhBTVVuUHVDcituUlBMZ3NTekZFUnNWQVRZOXFyMHkyckt2U1ljVW9PVEdrTk9Fb3hLWmZiSnZzd2FYclZNYlNjZVMxNS9ZWnVJNnhTM0gwZUw1QS90YTFycS93bUxPL0wwK0VTSTVoVENkVGx6a3kxNk4wbEZSdVJjVTBPUzBJYWNLcWFTazVnV2ZaeFRzcEE0Z2NiTkRLY01zTTQyNFpSN1hNT1JTdGc1UVV5c2JXUGh0alZ5Zk1tM0QxMG01LytyYjVicko0ejNYRVVoTXFpUElmUEtTZjJKdVEzQ2lPWjVJcFpVK2t4eEJoMmZQL0ZORDlnSlk5T2J0SFUyQjZUaG1tU1MzVXI0YjRpYU82NXhEekVlYUJKTW5iMlpBOXdHTDZlNGtyQlVQRzFuaEFmWEJEZnFpVkdDejc4cjdQL1JDd2JFVU5QaEFFZEFzWmsrd0RkcDNWUmtYNzNBNXhsNGxkQ3pFeGhXOTRpYldTYUdRNEh5Y2Rhb0hpVEV3Rk93K0JzaWJjU0wraXAxMG9vYUlPb2cxQ3VnWGNNREFXVXV3ZkJ4RFV6bG1IWTQ2bHpaWlhYUkhoQzB5OTU3anUwWGNlRG85QnFsTWZqYlhBUHE5cXJBTFk2eGxDOFJOcUt4VkQvWUFGSWhXNXQ5WVU4cE81dHFMWnE4T1JQRHhUN2hSZHJvZm9JZ2pQNDdsQmVsSkY5WVhBS0I4VXRsTDIvQW5OS1p2bVlmOXZvWW4wOTB6Z0Urck9SRGtMSnN6ZUwrWXVxZE5lY0loeEx2Uldic2s0TFBTLzN1VmF3WnY2dHM3ZmpjcnMvZVRlalpHdE9LbWJRQXZIMThrSlpZL3I5cHYzOVg3UEVyV3JpSVV1YU1scVhzNTNJbTVjR243dnBwMFlJQ3huSHVkUW9IWTdpbk1SM0Q5YlBuL2NwNU9oa1ZsamtjMHhsTW9NcW5mUjVEYXpuNXE1VmwrVlVoajAzN1VOZm02clYxZDJDNnlKQ2ZkeHBUS3JJSFVGTi9hd2J1bGZzK09seUpIdHByY1htVHU0d0FNVnplZUxGUFZSaU9sSUN5WmRaVDVpZVJwTzlacXdCa0JpZzhkdlRIZFp4NC8wRGxKaGJKcURGUXNBRlgyOGlyOGtWNHVFU09kOE5WVGJRcE0xUTdrKzJnL1gweDdRUURPRUJVQVovQlVha3kxNGhZV0xCaHVNZk1nc0t1aGdzNlpqMVRDSUZsSU9GeldIYXh1L0RmbjhVdkhCZjBvcDRyRXV4NHpDOXlKUmdTY24zdS9ncmxGWHpSY2tiOHlhVTNaYkZsRWlYY3hIMGlFWkxqNDBvRVlCSTJtZDJQU3g5dG5wb2FFdmRjRnpPb2g1dytURzhyOUVMUGI5RHRuUEdCUmJKbTBieDJsNkVjZ3Z6QTh2YzJ1enBYWDlOMk0xd05EOFpSdXJmUitUVFR3STFKU25iNG9idlMxSlVDRnNkcGF1NHpFRDZvT1IyUlIzRlZxalBicTVKRjZlVTYrYlRBNDNDekhzaUw2UW9UdXpKRExiSGZIRVdlRENzTitibHdPWXRCWUZ4S1VIRFc1VUdlRWMyT0RJL2p5ZmFhQ2VGeXBzVDZxWW41QmQ0Vll0bTBxc082eGl4MkkwTy8yMWZSdnhyWkk1MFNXMGdlZTRDdVFqWW1TNDVMMXRGK2NqM1NyeUFQcWxDZ3VNSWR3OFhPalBiTFlyUUVJZ0dEak5jWW56NzkxdUtTaWp3bkxWVjNSaGt3WmtJdEZyVVNFelNQcGFKWWJBb1ZscVJueGpFanVZUHNVL3hNemFxUWx6YnBoYkVwelhYVVJ4VXEyaVZDMjdWS1VkT0h0Z29OdU9JNlgrQWJsZ2VJY0dQTU0zam1VOTQrZFlKazNIZzk0NmRWNUpJUFB3RHppSEo1endBMS9hREdJQUx6ZEF5Y2xsQXh0TDlIMkw1eGxXYnlHUU1kUFladHBaQmpVMFhDcnJFM2FqVHhOUVJKcGY1MVV0ZU9EUHBTZU15c05uWmVtTmR5SnE3OUV6Mm1FRko5djF5WkRXL2w2bUJmRlQwYTFvMjFKc3djcFZoZ2F4WWZJZUY2WlVsRWg1TzVabmJ6TVJmbUs5TEljSnlNcmtIRW95ZlBuTnJvOExBY3ladUt3ci9HOUhpOXBUUyt3bXlsS2lmdDc3LzBtZm1sNFdwY2wwMmZiWkxRZ0ZlbGczYTN6WHlPTklUMDlmbG9NbjUwdlVHQTB3M1ZqcU5pRFMyaGY4RlQ1VW96RnFkY2V0OXc1UTBlZVNTMi9pbVluVDVrY21YalNDbElObysxanhScHZwTUlEWWM2UStiSHM5QkthOThGSkp0ZkMzZGhjNlVmRE5ZRFlBdFkvVWhsSWZ2WmpWZW44dnhEVTRxa1BrZjIzTTR3WFFuTmo4VUVHbml2aVlUZEFPU0xTR2l2M0J4cUtjWTdpWTZpR1RoOTBoUHpOYzlWais2NXpqMHg0aUF2NmwyRjZwbnRaaGUwSjRCQ1VvUTVFdmJIZzhvSjVRSmFza3FCNTB5bStQdjlMT0tFemJoeWg0TGNnZHhNVU92SXIxY2hOMFpuNE53a2l4dms2cUorcE9qWGdnSm0rQWdJQ0FnT2VmWVRkTVozMXNBSmdJUnJvVWh6VjI4cUdxRU1ROUFnVSttRnBTUEl1Mzk3ODU4cXpNR1hnTkFlaEtLa2lvekFNdUh1N0Q0eFVNYk5obFI4YjlHa2MrcE5vUmZvd0M3UDFJaTVtT0VZRmtYby93Zlp0VW9MUThqTTU1QVI0Kzd3eDZPWEpOOEQyb3REaisxYXo3Z09KdkNxMXJOMWtQbmM0NGwxdWozVk0zWnJEZ0s2YWRuKzNhL3RwSUpLWUthVUpLbTVtYlZTRjZWYUxjY0RURW5Tc1JWWGFJWEZoWU9iVVRSWERrVStwVUFRUVl2RFhmeWtkVGh0M2NYQ0RwOU1kRi8wdGFnYkxQTFZlVTltdWo3NXhGTk9qOGVnL3hDeHJkclh2QlQrdEFiTW5jSG5VempUQm1nc3pqN3ZlSElUZ1NqTE9UL0ZHQllLa0pOL1dCczc4ekFuVEVPS2pxSFF5Rm5YclpSemVMQlVUMXFFYVRZTGVEbTNkZXpYMGNlT3dpYmpGbEpvY3pVWXEvK0FUNUtqQXI0cGU2VmhvbnJmU2lUWWgyRFVodk9aeWZaNVh4K0hCbXg3dHlFZngvOXU1TVRsSWNIUld4ZnpORzlwMHk3WVNaRERrdmVqbUpZUDlEVVRjSnJraXNudU96THZ0eFpJT1ZZZHdaSkZ6L05LbTFZV3RzRVoyd2g4TEJjUFcyRm1HMEFKbVQ0SmRqRHordGNkN1Qya2VEOUJ3L0tPajRSSFJjdWFNNDZzNWdzcEd2aUpSOVlOQk1iS1lHWjU4VzJZaWpsMGxuSXdjbXBnQW5lOEVXKzdiMWNNSWpCNUN4SG5nQkp2M0haNXJNZm1mMHc3MXRVLzRMRzI2bWthWjZMdTNDT29nVWkxREdUS2o4bkVpNEt2d0xtWlFNMThnakZ0YWVCd2dXei8xWm5YZ3lNRDZCa2drTGJMNElCQUJVamNnTlZxU0svbVB5c2NnTGhXYkNsR2xWbGdqazkzcUpZYSt6cVJlaFZYSE4ySGo2eGZuOVVnckpnY3ljc2dMSitpdEExdkZTM1dXVUd5OU96VWc3U2xnbE1xc0VWeEhDei9lYmloK2hxbSt1T3h5QUQzWSt6TjlYSGRPZDgwU0NtUE04bGZqM3lrOFJSMktCdFBsVXd5alZTK3pKODc5NTNrZXNSYjZJUHN6QVdCRWdYeW4vQWl6aEUyL0ttTU1PUDNQR3Q0WGRkekNIaDcyT0dSWU41d0dFc2d0eFphNEJwV0EvMXlNcldxem9wMkxZYndlRTJRUjFkNi9RN0lPY0M2YWdqSFBkeFBwa2MzUGVjVTVUQjBKSzFZUWUwek5CU0lUNFlabFZUOFkyMnFndUVDK3M5TzlHbXdiUFVmWlord0t0UFBhZGNOWnE5am1DeVdHNXFlTE1ybEMrZGQ3WVl1dmVndTNmdlNCZ3BMYWRETHNaR2FtRzZ1N0lsTkFIc1JaanFjbnJEZFpJS0Mxdzg3Q1YrR3JmdTBCUXlyZzJqWFBSaGZBVmVIYVJzVFY5WEpsWTR4VmZhSHdNM1ZQSmpLMjBYTy9TS2JSMWJYbU5QTkxXK0trbUw1ZFZvbk5QdDVFWk1iR3JqcDdzNE8yM29KckFsZ25nSjBFWHZZMENSY0l3bkN4QTZtbjc5TVFxZ3EvRHlrUFQ3bHVLKy9qYWtvclc0NVkweFZJTVdobGQ1QU02VjRhTDZCYVd4N2Y2dTMrdDFFMDhkOVVlc2h3cENTdWQxZm5mNkVFcjJGcFp3UTI4cHZtVTVBYi9QdmhuUzBpUnNLY0RhWFpoZUJnbmRLRVBpNnBJRFBPSExHcjRhNlA2Tk12b3hLa25GbkZES1RkTXY5djRza3MvaDZESlMrbDZhSHlHdFVvc0Q1bWR5WXBvbU9IWHVpT0RyUy9sMUxadFhDUXJSZmtFckhqL0NJMnZkcmt5V3JvOGZpYzlCekVGdWVZVEF1WFg2WlMxTThhYW1LMVNSOUNuaFM2TlJtb3U1cGJiVjgvOEwzWWxuSy92Nks0SE5SNUZQUGdIaFFzcnNaVHUxTy9kZVJ4Zk1uc1VLZTdlYVdaN2I2NXBvL0FNZTNJcnk5KzV6cTEwNmxITUtLL05JVUdWdFg2UDh0Yi9lcVVNaUVheDcyY3o5b05yTTV6VW1BaE9DNkxRWkVxbGJnSFJNWk1XUk9HZzZuczJTalM5OTdoSDBhT0FkdUZONXJUMnN4S1gyUEh2LzA2azZnRlZySkIzTElINzZ3b0pwa2lMTC93alFhd0dJM1dsUG02UEZLS3B0blVLNDVEL09udzRpeEpoU05jQ1NoZjhvVDZuVG5ITUhWRjVlN0lDTnBJWUxLVmhIZjYvTGRRNWRJcWZzZ3JLTEZYVmkvTnoxb0RBR2FPK2FEVFVuUkZ3a0VLQ2lVbXhuTHBoVi9Ga3ZsMzRJYTNpenN5WE9kbmRYUjBIbTdFM2VuK3FxbnAyYTlQNHlOaFl0L3BTc3J0cWF4U0dDWHZKY0tmdTZ6RHVORExpdUU0Q0NWeWkyZVBPbGhqUG1zNmhLMkZVTHg1THB6emNlbjVTSTdpa3Rra24veGtrVW5BZW9SbFoyR1N6cGU5d1IyMUVwYmFPOVZWUWsva3I2L0pIN2JUbEtqNnI4d2dWR1p0NmVUSWY5VXBYV1htSzFTVmtoQXBhUExTY3RXVjBocXU3L1JvWTZzcGVtZEpreFhMN3FNbkpNT0tKOERGTThLNkRPcnJFajloNW9XbkE0YUpRYVo4cEwva0hnbjRSeTB0cTM3T241TVg3OC9EZG5FalU0RGk5VVZlam9XY0dzMkVrUmMrQjA3T3phdCtaZEhXRG9HWjJzaUJzbVRrOE9VVW43dVFrbk8yVmlQM0lBUjVNM2NpU3ZPV0pkU05uT1pSUjdYNEJFSUVOd29hbzZtenJqeG9yWWN5czdXVHViTU9EVGJVUDduN1FzNHQ2eHhtNzgzalJxQ2xocVBUc1h4TFIzcG9KZGZwenc0eUJCa2N4TnhpMk5PcVU0bmN5dW1YZStmcWc2R1BsYXl3ZVZ1dVpyelBEWjRjZ0F2b3R4THNNZ01VMEs2NDdOTERpUC83NHAxVElWRnZRd0ZkdHhMMXJ3UjN2Y1dQR2JWZXFnWVhXZGliYlErVGFFL3M0YnFSRGdJK1JTMXVMeFRLMFVXMU9UdFd5aCtZeE5WUTFaTlYyWmJSdXFGVWR0dE1lZTNnQVo2N3BxTFYwb2RLa1g4Y0Vla0dMSVZCS1VXQnJUbXdyZjc1TVl6TjBYL0FVYzJNbzVwTmZTSnRGOW45aG16a3BTMnZ4bDVDZVdXMGdLb1lPKzk1dUN4N3BhOFRNazhiTmY3bjJzeUNkTU41UVJ5NTlJS3Ryc0JxZUhDaWtmUUVrd1RPZmIwZkdEbmVxcExKVTUxSlIxcFpXL1B4VkUra3hncHMwczliUzJ0NENXZ085YnV2NFo5NE5DODRZVXJUc2pXbWhGUHk0YzdhalNLVjN6WEJSV25CWFZSb29WU2owV0VDdmsyZUFKTFhZaFgwU29oTXF0c3JDNVhwVzFzQ0YwWUVoTVZFZXFBZ1FvdnhtSjRvdklqcnZSWkJVVXVmL2h6ODlsNmphWmNQN0RCdERlN3oxcFdsMzNDSWV1RjE2NTh2c0t0UFJzVEt4emM4d1VTbndhMkZoRmpRVGE5L3oya3VXUnhQWXV1STdteFVsUms4SUl4K3RBMm9qbUVMK0ZwMC8wdmZHUjlESU5PQS9UUXpWbXMzbkxQRWNlRExYVVlFZ2VvTXFRNU9ST0lQNnBKVlU4bEllV0FiRGt5aWY3THpPUUliU1NTUlNOQ0twSVNIdUxocHJzdFYwWDdtUy9la1hTbmV0eWpRdFBod1RuYUxMRVdQeW1LUmhSdnZkWlFyZEpJMUU4cEI5czVLR0dXT2cweTd4RS81QjlCMDhWTDVCNTUwa01ROC8zb2pjdUtoNjhzMjhMSjhJZE1sWHNBZVZHdndtci96bGJZYUsreE9Icmp6cmFTcHdaT1Q2SzdqZmZ3cG5PYURxcUZlNDdaMjJjUi9zR3lrcU1HL1Jzb3J2NEJRYzZHYTlpRlJKRGVYQmJ1QlFNUVczZW1OVWpVRFlrZWNpamhXNnAvS0xxMFNYbDBpWTZWblpySUpJdGVvcXh2MVgybWxKZlNJRzlZZEN4cWx1U2dtNzZ2eXQraEdySk9zenBsWjFKc1BaMU1HcCt5cVUrZExCY1hyMmd4bndNY1VzV3UzNG02b1RQVE9oZm5ZQ2F4ZEkyOEphNFdaRk8za2xpakY1ZTJkbzZFSG51UkY5NXJFUTd1ajd0U2p1cDFyYXJ1RVY5NGkvUFBPN0s2NSt3K3FmTkp3WVhmc2dGQVhRSEY4cG9tbWovaUpNNzV5YStCZWVpUmRKbUpBdE1CQW5CNXNwUEFEM2Z2OEI3T1kxbGpnSTVBVFhCMHRpRFZMMU1rUWowZHR4RlY5WkNCUk5lWXY3UGNZdkQ4ZytWTGxrRmpNNEdjZ3hITG5ySHFYOTVQZCtJLzlMdll6aGo0OC93bTdrU2doaUJqN2o4eEhhQmJaSkFnS1NXaldrU2RDcjdaZkxEekt3UlRtNFUzZ0JMRmpjQWdGbS9GVEZwc1JCZzNIdWFDR3MxMnBDdGxLRk55d0hPOHk4RVVjdmphQytTU0ZhZFlkbElnWFVqNFBja3dhbWNHU1VFdGtwdXBoNFVCOW9YeDhRL2hNTmp0M1pydnZsUlhSWU9pSkZZd0lqT2ZGaXlhQ2hrM3Z6R0xGdWZxRFkrZFFxNU5QYTJBMG1XQlE5TVhRT1ljQWxkeXh6cXhBK2xjaFZWWmFhY0NTL01QWUdVSHNGZkVWY2pwWXJBQmt6dEsxVXcxOXdkNDZXNDEwMnovSDV2QU9XUDlWVVNNL1Bud1ZvYm1jT0RQNWltM25JMVRiYXlIWjdRU3JBSnBCRXFzZm5acWpreVhlRnBDY2NrOVRyZmJldnh0UnE4dHlJbTB2NnozYVFoUnRRL2ZhdVRzekpDem1zQ21xbDZYcHFnL0FZSXMwSTBhaGk3TGhOYzVtWUxNU2h1TnBhckpGN2hjQk9DNDEyaVVPTGllcWhod1ZzaW5ncTVJWmxBYXh4STNMS0IvWVRSTlFOU1dmMmVabjQ1eWZHVnhVZWMzYWZXYTA4R0l3QVEySkZtSHZTcTNWOHh4M1psRlhGMHpOODFpeE45YVJSVFo0NUl4Qno3aXBIMXNGR1pQRUkyM2s3YlBPcENRQlJ0bGQxM3ovR1E3dEU5YnNlSEM0aVBMd2RPRDlwZjhvaURtSS9qTjhxQjNrdkVkbHhZdE11dVRadW9keVB6WENZTVNOdFdibWgrbGJVMGgzN1BOSmVwTFFHamJHY2FpbnRZdFZZdXR4Zit3Z3BabklTVEd5Qkp6d3pZdklkODZpd3JuTktJNk1udCtOK2dSTTdnWU5QZFZwcXY2OHRHbmNpaFFPY3FvNkVaMXVnd01iU0RGNGNJV0N5MnkxOUFKYXFiTkw3SEdWVXZzc09uRktjeURIQlpRU0l2VmJGeDZZNVJLRnhHd0kxQndxd1ZPWmFzQmwxcjZ0V2xaNnhmaGhFc1JnTTJXcWhkV0tlYUtoREJWKzFXN1kxck5iek9RQ0RkMXZJZE8vSVd6MEdFc1F0SjgrbEFDL1VJODBlV3JDRUE4ZFdBN0ZCZnIzVEw4VU1IZ1BpUFpGcWhwUGJMWWZmQkMwV0FEcmpOdlliNXM5c3FubGdBK1BjeGYxbEQzMWxlL1drcSt4am4xbE1YMk5aK3Vreit4bjMyMmNuOE85ZjkvMUNuOE82QU9nTlM0cktVQ1NQMXlHVGxyNktqTUtyZWhUT2NkU3ZMUDJ2ZkVianZvY0xIUVQ4djhEMzJDSnJvdWdpKzZTOHJoclIzbVZ0bTBUNTVKc3IxNVh2akFFWXJWdnB2TWhkVUF0VHNoclFMbjYvL205WHdKV0hSamF1eVp2L09FTG5xWnhSbWIybE1qN2pmVDlEZnlic0VrWUJVRStPdy9Cb0E2K014L2VaZ2dqTnNXYkVzWDRTV0NYNitZN3hTUmpoRzZDM1B5YmMrN01PU3BpQzdLNkdHdFBmT3BXOGlFcm02SHNkWkhEaFBBMGFIdEYvRi9NWFNFS0Y5TFRJZTE0TzBlVm1qL1RuTU5qYVlXYzFXcVpPZGRuS294cVFaT2dvLzJZcFlsYVplMTRjZDlLRUg3MzZJL3VQeUFER2ZKU3R6N0lwaEJwaWtPZjlvdURNVytYc1hqM3BqSHBKUjNCMGNhQWw4cnY1T0xSR3doWG5paG1uTGF3T1ZEZXFZWjlCNXJ0a3FVb1g0a2MyU2JhSDhjaWZQakFpQjF5Q0xYMzA4TE96aWI3MTd6TXA5N1N2em5LVVl5YytFT2dDVzV2Z3dld2JESzA3VG1US1BPYnVyeGFONFZYcDdkaEZiSTFyQ1hCOG5OWW9rSHR0ZVBaZUtwY0tpS3RzT252dnh4ajNManJ5MXVGK2VuUVJ2TElmS0hkekl5ODcweG56YUhBdUkxR0JRWjF5d1JESUh4WVFxM2xlTTZyV2pId01EdVNReHpMZTVYeVN5K0dLUWQwcENiWHJqK1F5VmU1YThxQTJ6Z0VTRkpkZm1ubkU3L0FHdE9pUzZsek1nVmRId2F3c0t5SmJWell2Z0JnWFhYSFFvN3Q3Z2VYcnBsdzNHc3pOUDZQOGgyR1NhT1dRN3hBQnZXTDVtQmdxd0pXeFNuNk1HMzcyMFR1d0R3OXRhZUZzS0ljMFBJNWdKaG4zZ1U1Y2RJYVJuYW12Q1hXejdJRi9oRXhWQktZbGFWK1JxRGdvcXMvUDJJa2FHSjdPMGxkQVFnT2hKL0pSb0RYVHhNVnlpZ0RzWE9BYzhBV25PcVJCMzMvSUhucXZrblpyNWdZNmZoRTZCSWJpL3BDWHVmV3p6TysvcXFPVXFsYmQ3UmFmOG1seUZLdEsyQ3hueU4yN1BETDhrNVpwV2NqQXJKcGU5YkxCQkQzWDJ4aGtXMTRIdVR4QXFhK3hubURSTTRvZTdjVDVRZXk2M2tRUnhlb0lPdFA0TEFwcTd2Z0xmRTVtYUM3Tm1sQkNnT3N6czM4L3d6bTZ2SzJvYnlQRFE3cUpDK3dUZ0RmL1pHb0l3MTdoUG4rSnZ4dlJQSGlUOTZUMXl1VzZhT0lqNVdUck56cEYzN1pXYTdVczZrWVJWTDhKUEd6Ti93L2FkNjV1VUJlLzFPOHdNcWpjTEJQdVpHRXp6cXBvdSswb2NYRVRiOU5jU09vcWxWNXdDZjdzMWF3blpwRzNnQWVPSFpTMXNCZWRHRWQrK1hlbVNuck8wUHhwZTNTMjUzV3V0eGZ3QWRHZkl1V2R5R0liNEl2ODBjUGl4NWtxLzB4eTlucVdCRG1HeDlVOGFGTGdOWkFUbHJ2MmJTcGxXWHJDaVQ4N0grbVZzemM3M3d0QXN6VWdMTUFXT3JoRGZYL1FFYWdZd3V3M28xaFJSMXV0d090bHVQTjZaMVVtMzBjbFBrNU05RFlQb0l3Zm1LWDhqK2FOVzhtZUp5Mm82T2NFdEJMelgxbk43M0tJWWFqSkNBWnRrL1pQSCtUQTN1UUZuZGIvR3dVaXlMUzdBVWR1L2pBMkcwcSt1NjRvSmVvczdxRWEwT1h4eXAvOHJCL0JrTWxBYS85WFJrWGFWQnd4cnBlQkxqaVJrUmc4NzZoc3lSLzdUdjZWeEx1Z3ZJSVFqUlYxSjFCTHlkMzNjVzN4M2JVYWU3VjVXOHJYRlRjR0RaTmFNWUtDRS9PNnFSVzRsQXZnNVg4cEU1ZDdSVkpId1kyekZnWlVkbkRUcFJjZkdjMHJraVR0c250R0tkZWF4V0tqaDJZMGl5dlBtQklsejUvZHBNV0MwTXVpRndGeFA4V0xwK2s0NnJYa09qZ1NrazJHbDNJeWtnK0hqUGNLTDZxZGNqc0Z4eGh1dUtvMldPUWdMckRxZG1reEt1bXBvMzA3VVdkcExoVmE3ZWpzcml4dmdIS2Y3THh2WnoxZnB3TnViL1UwdVY2VlRNYXVrS2RCY3B3M1I0L0Y2Y2ZPOHN5VnF0MXQ1RGszdmNXNlZ6c3RId3BGT0ZnMkhtNUNuTkUrZzNZMkxaT05hZWFoRmtsT2RwZEhGQ0RaVitUbnBTMVZzUFpZY0wwdEE0SVljWVJyM0FRajYxWFJTSEFPUlY5eTJXZ09iZm1rOXk0V29lWkdGQ0R0MkNkOG1oTFpoR1pOWjZqRkVULzEyYlZqUFR0UjY0NWEvZTVSWVQ1NkxBc1pHakxIdnhpS2hmUHV2Y1F1Skk5RmcxamN4aUk5TTdSZzZGcDg3eFA2T2NzYjJjZjBlOXlwSmZNMnpVRjEvZHhZRkpsSnh3WFBBRUM2bHh0YU5qMDlxUXFXbUNBZ1dKRDE3aVkxNXpQZC93aE94K0M4a0JEaC9DTjl6b3NFYVRnTzF5Q2xHSkw0TVdnSlNKcFRBcGpqYnBMeUpJWWoxK2NyVDhWU3JlMUFzRGZYL2RxVXZkV3VHd1l4K3lEeEFDVnZxZk9DdXloSEdSaFRycjdvRkpQZm5GYmkxS25NdmFMZVlFUGlESVlqa3c2OStvdEVNLzlndmJPRktmWjVCNndJRlNiaHVvbFlzb0JFNTB6MDRQeUVpeFNNWm94eVVwa1ZxVmJvMW5jK3hGdUNHa1hBQVlSNVpxbHNJenRLQjBic0w1cUcxdE1hanpaaGk1QlhUZUxKaTRZc0Z0K1hPOGJvdEU2MHl3WDd6cUhJSkwrRVFaWmVtT3JUZ05ZUmFIR0kvZWJFTllYTjdPbnUweUVuWHFBcW9jdmxnUy81VVE5aWpDNS9xQmdPcmJPUWd4a1FPR3YydkNJU1A0ME9iYjNWVi91d21rTVk4eEE2Q3VkQ015SFR5c0FPK1BpZlpFSXZuWmVFN0xtdlRlRzY5UlQ0alNocVlNa25lZk93KzFCeURMUlpTNGJ0VUtHdVBBUG9rVXZWZkRoOUxNMGhNM0FUWEJLNHNKSDRmd0g2NWlTbmVYYkI3VWlkUVg2Uko0NTZjZXA2aWV6U3g1MExsMEZKS3pxM083S1JvS20rUDJKd284c01uVkRyaGhLMG81dVJBTU01STFTcXU2amZrbFB0OGUvNkhtVktISGtvTmdwVFliTmpwTG9LZGlVdERVN0JiZ0xYQ0MwSXl5ak1VTHk1NlhqYjZXZitVaTl5K00wY0MxZ1hxeTZ2elJld3hPUkx1b1dEdFlWNUNHSktxeW56dmNPNlhjVDR2OFpHU0dleElmZE5xUTRsSFFRMzhBOE1SQUdzazhWd2gyVFJrc2dVbENVaWJleitYRmV5YjVJRGYyWE1IaHpuUUxMaXhLMHl4eVBVVld1SGlOTkZFbGp2N2ZydDgzbElZcHpPQUp0UWVXRkdOTW1aMnJRVG5XYmszQndUbVJ0M3BLU1NDdjRJc1U4VGVSNDl2djZ0Wm92NGd6U3JIVStaVVFvQ2xZSXY4ZUtraWlSNUlNeXgvYzJiSnMzZ05QMFBpV0ErWmVnMjI2azFMY1htRUVkWkxZY3ZuaE5lb1h2YzlOckdsVjFDOFgyQkU2N29DTlpOaEFFTUVVcVhFdGlZWG92N3lwRHlVU2xaaE80N0JYQlZ1Z3FEUzRIVjhrSHZzblQ2QnQydTcweVlValc3SGk5TDB4VnVOS0NGMlAwNUlOZ3FVL3I0MmFuaG5ZMmllSG9lTUdGWW5KdlNaRUVFYStNVklyWlZETFprMzFzZG9SWjllVTBpQlZ0Mk4vemlJZU5STWJJRlRBem1HQ1ZNRkFDNDQrV0RxUXFxakZIKy9wV1creFhJQy8yV0NmT0JiKzczNzZScXR0QTk4VWFicmNBdmFWUlp1NWVubTdLMlpaWEV6dVo5WFY2ZmFxN0hkQUNnNlRqZlFsdG5UZ3BBK09aS1pHQnQ5aWRHNjBUUTdNbHBHaGhDSnAvVEQ4Sm1LOTZXSUdQMGVrazdXWllSM3MyZFpNZDQ5bWNYdFcvN1RJckNRVDdTZmk5TTBuVGV5K3MwS2FUdUk3L3hibmk1QVJlV3lheHdHMW9MN1NobEJ3cW8rSTlFd3dqUjdUcjZuOTRWaUJRQVUyVnZFM1JvalkwQllzaHhiemNaejBjUnppZXhGNm83Q1VRdHpPNE5LN29aQ3pKWVptZm9ZblVwYm85c3h1NmlLTk0xaEhsbHZ5Y2g1ZzJwckFERThvWVlHc0gyZkRrRHJWMk5OQzNodHdsQi9OTDVRdjdHL3U3b0M4Y3RwSUNwbDNKNUpYY3RwYyttNnAwaVA3M2J4U1lIK3Ywb3A0Nkhuajl2UTNFU08xZXJLK0x3RFVZNWorKzQ0ckQ5dE1jR2pnTlBwYzE0Z3FDS0ZnUmpEWE54cVBtRmRacWNEQm5tOWo2YzNqWE5XM1lWUFpIRmFpdUx1TU4zeGxxd1VKRERkQnNscTJ2a2ZNdDRlZkdmUk5EN1dJQkJKOWFaZjRsbTJSMGhDMXRqUDk3Mll4eWhPSCtRdU9BQzdLWjhZZHNnVWQxS08vSWNWKzB3Z29MSFpNdlJOcSt4dXpqUHlkM1ZWWWlmQU9QeVowREdCUDNIRzJtQkNxQzRLQzJDaXR5dmpWeU1zbjF5NktLR0NXV3dueTdMc2RYcFQ5T2VHdm90Qmk3Q0Q4cG1XbHlQVlM2dWdxczcrOEdPdXBvK3BDSFp4QmhjdWlwZ3YxU2RIc0tCZURpOXIxSFowa0xEa01meXBuM0d3MXNlYUwxbGVXb2p2K0dYeWcxS0VrV0NIeGMzU1R6T2pwVmF3WHpuZW5IMXlPZ1NpRGZDSEZNeU5YdnkyK0FmcmxjMXNoekJ1WjMzSFp0Qm03SXRzbENtZzlqc0syTHBpaHVmYUdoMmxqcms4OXJLT3lHWElMbzl0V3NMcXZJUTBKbzhhOWtUWDkyblZuNHZQZHppNGlrN1BKQ1pVOTd2SUdXOXdhM3JUNnNpRzZGK1NRbWVOVnpwQXZBZ0NqLy9QZU9KVVNzbHlUZEZxK29EYkQ5MVQyL2ZJNkhVNkt5cmtYQnR6Ky9ERU4zY01QUHZTeTN1M2xaaklDU3JkdFFvOFl3b1B3V3RMRHZ3RExRZ2lxM3h4UkJTR2dTbHZBSHB2bnFXSUNEWHYyQ0lPSFphZU11UWNKY0xvQnVRNU8yMUhvZmxzTGFtbnlPcXNlcDkzc3ZURElNYlFkSzdhQjhqNFdCRlFNa1VkRUt3ekdlWnEza29IcFoyajRxazdxUlB0eHhsYXZUN2xYYUF1U2p2ZnJScHp2Y3UrMkV2YmJQRmdYU1BlWHNrZU1QWWRQWUpEZ2tmKzhIMXdQSmtBSGV6NGNVaG4rZHd5b29qcVp0T1BOZ2I3YkIvNVdCSjcyVUFIMUVvU0Rqc3NjZFYxYWFqYS9FanhNRFFTWElIOFZzZ3VyZjUxbFl2MGZTUFpURGt0ek5jVjZreU4rVk5UbWFaQTZQWnFKbUViUWlWL25FemVnVnlZcUNNbGtqNHVhdmdaUnlhOXFyTjNUNjJLaHFMN24vTmZKUXVscDZ4UUlQc0o3MFlrMSsxRVZDSVVCTDM2ZEZETDZmSm5TSHQ4eHNVTjRlczQwbGpxUms0TzhBek5xOTdmd1o0dzR4c2VrYi9NcUgvSy93YlE5czF0NmJEbHdneExOeDhmY2U2b25wOFdjdTJnMXl5NDZISVF3ZU5vY0JKWEtXZW50OTROLzE3L3hjM0JqS2JuMTdSMlJWMytzYzBjSVRaQUtkTS9yNHc5N0NpMkRYWW1oeFV4K05VMG9DNk4zbjgxcDJPd29jTyt0NHk1UE1NOUFBa0R6VVNFNFBHSC9ZY3ZUN0xIaC9tR2FIWkdiYWtHTFR5K0dBN1FaUmZMbVc1OXRYdnRzcGlQS1cvK2N4ZjhxNWEvREpIMUlTL0NQQmhTeWQ5d1JvZVlzWEcwckVRejN4T3RjekRJVUkvMXcvSEFOK3g4eVFsMzlEcVg2R3N0R2tlU3VZaUtpNHRXRFdmRk9uTDZrNm9ZSldXK3prRWtuRkY0TzRzc0I4Y2ZZNmtwdXJQOU93cy9UR2UrREhUS0d0MXMyUlVKaVVFb3d0aW1wWlZLMGRISGlmS2hyL0YyQ2tvbU1TTkhQT28yQWpUdlVNTXBKK1h0ZkJ3S0xkT0x5cVNYVjRQZWNNZUE2aW9nWlR0R05tMVp2d1JJaUorTnBDdWxFcEd2eFNzNWdXVHRCR0ZNRDd2K1B5WjQrdGEvRzVQN0w0MkZvSndwRWJhV2M0eEpDQ1M5dytJREtYb1IxZ3EwRFFCTmFNRlJUdEgvSFRPWjVaOVJrWVl1em9UbFJ3bjIzeDd1V2k5WlFybGwvenczMEpzU3VHdVFqVVcyVjhjS0ttbUVlRVdvVXNJbEdrK0hpNktka2ZWNHZodURiQXJZbjBPSWlRZC9IVXdvYVl2Qm1VNFpoT0lnMHVvQ2VEcjNKWndCUHdTeEk0V09YRFZaSE1VSGs2SlF0YmlWcnRaOTZDSW9lb2MyR01JOXFxb3ZkRVpFZzRGc3l6cmdGK2JETmtzMzQ4OVlIN2R2Q1c0eHp5NUtFamROVHpKWDRTdzgza1l3TDJ0ckJwVUYzYk1oeE82Q0l5aFg2dWNtazJUQ1QxRStYRmtyaGszZ0dCUllsOE5tUlNEckhVRFh5N1lxMGRKSlpyblQ5Mm5rQkt5RHpQM2pXMWl4VURZTnN0NUNsSno0K3hHbW9HbHBKV3VjMGNQbXFNK01sZzF4SXRFOFRqZWZyZk1sRGFTWis2RzljZWlsUmxjeWJmWlBDR2VTdXRua21oQU1SRUgrWTljeUI5ZkhOVVZJSzkvT1lTRjVDQzFzUXlhbDVoOWtETVBzL3FxTlZvckVCWWk4MlJCQ0JWeDVaTGdHM3F1MDBFakxFWXFSUFZ0R05rMHBFazR3WnU2enliUStlTmZQQU10a2Y0WHZIbDVMSmZhVmh2STJCYXdRQS8yQ3o0NkFOYnhIa3RRc1pNZXNVSFRPZVkwK1RiT3czSlp0YlY0ZzdiUXlIMnRqbFlreG81WVdzVTMzOEhzQzlQbDY0YXJGcUUvK2xtL0dOOHp6ZHFYRzB0eDVYMUZKZTVYU3V2SlRRbXNuTVV4eFlPbmxnMGxpOHBHcTUwS3dScUN5cUp0VDRuTmJrUEN4dTBEU1Rud0ZFaVVEUU16OEZ5UWRESXdTNkk4NUR2V2xPOXdGNFlKNytvSXVvN1BKR3VHL1N5bFY4MEFmNVp6S3VQTXRKVnFFRE5Vd1pJZXJ2TUR5dFIwdnl2MzBGcmsyblVuOC9RcnNzeElJNDhaOVVTZWQvSUpxODd6bi9nZHMrYUhad1h1TjluMTRVS0Y5RUlzYlBNU0tkbkRWVi9UU3NNeE1jL0lwWHFYOWtOdjIrcm5Ndks4R3VZTHNqQXJHeFUyRXJMNFpNU3hiaDZLNFVUSTl5REJGTHBrOW4zVG90WmRhc1BVVFV3Zytud0xDdWIxQlh2WWtWay9BOGFBV29RSUk1NzhPa0pGSTF5OW1lWUdxbnFUZU01Nk9nOEdVQm1WZkMxaVNTamFWbUtRTFNHQi9xZmRZNFZMTU96NUVSZ0Q3Y0YrVFlaNjlma3NRaGFUczBDWnVnbnBhTU0raGNFemNLak5JZndZRlQxY0Z2SWZjM05FUFc3UGc2VTJoMi9OU1d4bVhhS2Q4OWVlQlNIL1U2RDc0MjJSMkFrQkV6akhzR2FOY2hxNDl1Y0lBSUdjS3AvQm5ubXRTZ0Exd3JIaDlnYlRvaHUyUndROFdSQ3g5ZjRTQ0htcXFBT2RBV2t4N0tDWEVqc1p0QkFJOERaRDBJSGM3ak1HZ2ZLcXZ6cnhXeVE5UjJTUnNWNUQ2R0xwLzNXRFY1NWdKa1U3cDZPVkF5ZFpJMG5NNUtQTVNKMGhob25ZbzY1MVVnNk9FcDFjWUZVRVMvSlVNWFVFMXA3NFRENy9mOUg1VnE4RDMxeUlWaUczcEtQdVJMby96K2ZseXlSdFIwZmRBbFlqRnI0QnlnTkpiRlA2WFJQYVdxZXJ1dVkwM3M0T0lhMlpDdGI4dk0yanNqUnZLR3hvTWt5UndGMmZJYjJvZW92SEFuMWUyUVI4TkxMdnBhNCtLMWVsZ2ZLTUE4S2VCcG1MelZwUkdKVlFaY1ZTci9NUWRhUTlYYzE0M1FrNGEycWtlQXZWYWxZWmoxTDN1YnRMN2RoR1M4c3IzcnVlRGU5aEI5N2ZxaDBoK3Z1LzlaRGh3R2FwT3BpcWtQSVI1dE5xanRzYVR5enRvMnRhcWVSUzZOTEtaTWFCZ0YxeERRQ00wWFJpdnZLd2lpOC9zYXFJNnNiWnJaTU1sRi9iaXlIcGUvQzQ4SUxMWlc1QkdqYzd5dk1EbkxLTDR1bEJFYmc4NzR2TG9KV0xqRVhQZWtIS1hrUXUrc3hHOHhBSU5qa2s0b290Y2JwWUtQMDNSZFVQblBVYVBsN3ZMb3pRVTJqdWFLMUdXWTN5UWFMd3l3eWJTRTRLbnFnbDVVV0JpRmJWMm9iNWkzN2FEbnpKRXdraVlCNURDQWNVQld1TVgzNkxVUGtWczFaejJ2TGlpeUhZeXNLYjUyVHFrNjdEaEdZK3dzaEJoZ1RNSStvRTVZeXhQNXl5YlgwVlpwbkpENmpQWDh4Y1R2SzduSEdlcmd0TUMwVEg5anVhRHhzNFRHU2tnQW90bTN3QVM5M2NObGpUNHlvaGtLZ21TazBrNXQ3Vm5yRHdDakNQbEE3ZzVJb0tPYVdRdEhtSk1rbldlOTBSTFI2d3d2cEJBUmh5cjl2d1Z4N3d3bWJLYThnWWZiY09Ldmp4VWRNT2NmYW5ORDBNcGw3U3luZkVJYll4SXdoM1AxeUd0WjJnYXQ3c0d3d283aXJHcWd6N1dsWGY5ajN6bXRwYmhpZHo2ZXFZYzNGRFZoVWpQY3kvREhzbitDMjFvZENJQVNGR3VOdW0zQUFOdzVKckVaMGdqcWxMeWNSNm0wVG5HOFpIdkFXR0M2OE1ZOW1rYVhKdERSTnZmaDhSWWtySy94cFZpQ0ZQeVM0czdFenBlYkJud0xmblpsdC9aUlBrZGt0QngwQUR3SmplV3g2NHo4OUpvTlVhUFZYR3ZYcjlzWXNqcWhLdm1GbmJ6V2ZjUUdOUzA2dVhNSlgzeUtSbWVVQmZwQkNBaDBVa2pZLzZNK3NOcmQ0MnFZR0lHeHlUdlRKeFJaU1RraUtsM0RacEErREVoM2trTXpXcUZSOHZoblNnR2cwUUtuUUpCQmVYLzNjbU5KOGpZWW1Sb21aUS8zaHdwaDhPdGNUU1pRSExzTmFwOWtJb2k4ZFhqOVh2alZlcjdmaVM0d1NoTVNMcmljbFJIWHdlSFhsWE9sczNubi8xbWtSWkFKS1FlQkIxN1hxbzVUa3RIZDVidUJvcUNselNoc0pMdlR0a1I5U2ZSY0UyZktEeEJBM2YrMnozNm9jdGVsQjNJcXZMVFErUk1WdWdJd2pDYTExQmpxWkFPeWNRSWkxeU1qUlU4M3F3WVo4UFF5T0syTVpzSUk2cmdhaThyZWxUZkRDT0VlekZlMVRvNkNvTUl4YmtwMnV2SEhSUlhlS3ozS2Exb0lBRVFqdVpPM29GbXJUTXdLOXpIM01TNVBjWlRKMzFPSEpldFdDSG1GWGZrbFpRcXY4Tk9qVklUaThRREN2bXZKR0lDYUhxRTE0UlRaQk1MYkxlQ0dLYzgwVEp3c2xlaC9iRW8wY3lEVjdDN1pNMFlNbXVFcEJrU1V2T3Z4SWV4NVFiMVNMZGM5WXBIM1FWc3hjUGlqdi9mdlJocnUvL2NNdm5xMlpRdEc4N09TdThoZy8xTzhoZGliV3cxSjdFM1lhR21kWGE3bVVlUmFjaWdjRGxZYVlPUWJDOGVqSCs5ZkdIdGxNWEhPeW9kbEhsblV5OHpZS295SDdYZmluWXJZUjcweFBTNFZBWUppZWhtUU5pUzhCN1NNRzhMcnpFazhTUnUrU0ZVY2ViRzJ0S3lrSXltUUE0RjRCYjh1S0VxY3FacGcwNXRUM0o0S3RtMU1sL1l6blQxOElpY1IxaTNnWEIzMjlKTEpycFZIWFljTk9GM1BKcHp0bEZFUmVwUzZPdmF5ZnlCNHFuVDREdDkzMGxmVXRPVEtZR1VGdnhmMlFqRlF2T0tpY3RPS3dhOHJlMGg5YU9nY0t1SDM2YlJqRUVGQVNYMC9GcDUyWm9MZEpmaS9PNVNGL0NRTkZ4QUwvOUtTTmRVeWpYaGxhNjMrMVlUZGIxNGxOZkVIUnQvS1pQUlV5WGlFM2NxWC9VcWtna2dSOEJnclNvQldESE5rYlZKZjluTEVPVlJQNjBrSDlMYkNIY3ZXNjB5RUVoNUY3L0tJeGRQaFY5K1dhY2RvR0l3ODVTYUhrWnMyc3hLQjhSYkk1L1RPZng3RzMwN29YbDAvVDhicEhiazRwblExeWNjWDlWMEtkSGFwbGZZMmlqZHd4RWNCZWRPaTdmVytPbVRyNmtaQmRRVk54azNBL2NKU1NFMmVqb1p3eGZ0NjNmQXd5UWNRQkd3WjJMY1VRbDJ4K3B6a2p6OGxmSTJ6VFc1SHZWVzdwVDQrYmxjUTVTY2NoZStqOTNoZzlFRThURmxxOGhxSW1FRmcyWlF1MVFOT3lCSW10WFpodFIyWDVkditaUTdvd01jV3pFVVFBekxBVVIveFlkZjg1SE9abDdaUGR6a2VSSXVkcHptVlp5Z0hWZnZvV3UzVHpOQVI5czVQNWtGMHhKMmdtNXJvcDNYOEtQTlNtK3NCNll2dER1QXFHcGtqQTQ0aVdZSXRsNW50b1dYcHpWRkh4THlkNmxPVGVKV2tpMlpybDZOOHUzcUsrY3pGajFRSG12Q0V5cFZsdnlmZmZkNFIrU3l5eklnMnhZUFNKaFlVWVVhTGN0cXAwUDgyWFk0enBSRzZma210b2VBZnZPa3p5US9jWVJIVlZPUmhPem94SUtrd3Ayckg2cE8zaDlzai8xUVJtTld3Q1JRWmZxeXY3NTIwQlVKMGJtd01YZG1CcFJraThMWEVqRm90UFg0RnFicHZkWEVLakp6aDZsMW5sKzIvUGZ5MDhkVEh3OFI4OEs0NG9rVlBLRFl0NU5GUnptVVExOTNiaFU3dUlIQXBVN1BoODIwR05OU1llVXVlR1pkYTltNDY2dFltK1FKOTJQWkhjbFh0WnZiYTlKM2VjVDdqUXFJZ3VDWFh3K3pSbFVhbzNidnZFMUVqV3NuRktYQ0VBdi9GeGx6bzVFNU5kdXlmaDIzWWZSK2NhaTJiSGtBd1ZPNGRBZmtiR3pjYXExa01xYzNXYm1hSU9NV21VUm15Z054OE1nTXVQYk9uckgveXplWHpSZFBYZUhXL3ZTYzF6SFNiWEZ4R2xoeHlhSVB0emVEVSt3WG5NeWc4RitDSzNwUG5FVU8xaVdkemlsUTYzZk96RzhrYmtFNHBlaTc0blM3WEZhVTVoL1VQRHpJeXRzMWlscDZWVDJtQi9zeFVqa3MzS1N6SEpNaUVsY0ZjVFZwdEJoYXpwUDM0c0M5NEFZSzdnQW5aeHVjT0FuZkNsR0RKdTIvdXI3bUZDR3ZTMUkvaHBxc0NDRDRUNVMzcXYxSVdsRllTNWE1cDJCU25KM3k5anpLcTUyODNtekFncUlxZkJMZ3FaTy9rWUVubk0rTnVXUU1xZzQxMDVFb2JSaGo4T0VCRUJHd3B2L0pzNkloc0REUEFld3RJZ0RVK24vS0ZHL3VreC9XWlZWaTQ2RDZ4Rm9pZHZhdGVyYzBXOW9lY1lXOTk3aDg2Wk5DSDBsY3NHRUl6YnBVbkdDdHl1ekZhR2JHS3NhYXJKRVB5M0RGOEF6UldxNllTdWRFbHdZVDBtZml0MGd4Y0h2OFhJWGJuWlN5R1lYZmROejNkTExiNHZBZU9IY1VoQkw5MUx6MWNCUU1ML0JYWENKY1pYb1hyS2h6N3Q2bUR6ODlaVkxubXJqbWNuL0ZPTjZiVURrSmFHVDZJbGRWcmVsUktvNmtRaUVqZ20zY1RpWFk4dEJNS01rSWhNMERxOUNyQllkNjZtZXZ1SjFjRUl5Qk05L2VXK0g3N2xaL243ZEZuUzNMWFFZd0pkUUZBZFRWSEdFNkNRNlFpOWFHWWRaSVJFVHV2OVVYZ29JUEM0VFVCQ0dPVzBUR1JhdUErZ28rOHVWVFpLMzM1Y1FGYXY2N0ZIaEVRUEZsWG5pMlFtUFl1VHJrT2NVcmRCWTEwa1BPekRkNjFidThEbWdZWUhpVVBEaTNQSTZnQ2NIYXUxdk55UW5aR3BWdEQ5VG1JUXZQelpxWkxLaVI5TGcrY1pqclV2Y2xTbmcxdEdrcjJleHliQlBXb1lVdVpDVnJJT2FtaWZReGRLVDlNKyttL0FLMXQ2VE9OYzFEdTBReUdMUysvdzJZUU9rNExrUUIxTHovMWhkbWhvYXd0UXYwLzdVZ1pvbFZvVjVkaXFqUzBVY25iQitmUUpXd2t0NC9DckFldmZiNERHMmU1SEt6VlFrQVU1cE9pd0o2TWV6b1k4cHJlb29zbGZrUS9zY2pjN3ZBUWJuM1JkMjM1NnZEQVl4UnRpWEp6aSswZ01CWW1QSk5SbWlzK0pUYUltdFpBMWpPZk1sVmd3VXRmNllYUUdKZ0ZPVktXSWhnUTN3cWxMeDR4TnBlU0tpSTd0S1dhQm1CYVhjRkxrM3YwbVA0WEdudUhCK3M0NUYxTnAxYWtueG9wTGEvVzgwT2lNbS9OZ3ZkdFJCK1JINS9odHBJTjJnQS9pajI3NVNzSG5DOHZZN2k1dHJueDR1Qm9qMndSdFVQVERTK0xQNzJPZ3VyUDN1aEtmbHVZYnI4N25VUTA5TnFyNjQ0UVV5ZlpieU54cUlYc21OTy9WeUs3ajgvZUpLWjVMTVhzdDN4OFhyT250dkRPbE5ZTUc4YldhWlowYzkzbEFnMG9PMCt6VkZHRmNQcEVLVUZnMjZ5VkhvZ0tWRDdZZnVxTEJPeVozc1doYXlxeVdIank5WlorL2tVbC9HN1Q1S1YvWFJ2Tkw0ZzBvNWJkdGVseE9saHZIemhxL284aFVzbWhMTVcweUlZbnVHaWduYmI4TGYveUd4M29VV2hjbStod2JydXVsazRPc1JKNytQZ041TytGeWJJMXhnRnZRUU12UXVET0xRWUh5Ui9XT21RN205cmQ2MmpKQWJFdkJTelErYnJmZW03Rnhvamh2aWs3SzlvM0tKcmloWjhhTXNkeEpuTWcyTDFhSmszNEpTN3F0ajBaUE5sT01NMUtiTHhQVEJvM2MweUdTRFF5UytMWk55cWpRNTY3d3VMSmxUakhvUTMzTkhqSlVUV0pVdk5STDc5ekNSdUNnNnJTcXpUZGZPRmVOZ0V3ODMvQjJaaFR5aDFUajNjNFVESEtrZkQrTE16ODdLSTd2UmlJSnNRWmFxcmFCY2RZZm1uUkhNdERSSzlIaVFHOEsvUUlPRExObWt4aVYrcXQwbjhYMWpQQU5UWUNQUDhGRmJQbmRsbzlLVXhsQWIrWkhFYVNkbHF3cFdxczA4K0gyZFI5Y3FDMzVkakZWUFhibmhGdUx3Q3NJckpUcndiK1hTSnNzdXNwUk9LUXBhckk0Y1dtU0JRalpwalltb1lYamdWYWV0QUNFd2lTMDVTOGUzSVhQa05DUWlacG5tdzF0a0hKS3RWSkg4NWVUbW1mdkxJL0V5V2RScm9ZeWZ4cE55Rm1BT2t0RTJnWUpBNzBGSVN6QytqMEZZSTBxTFg5RGRjbTBERy8zZVZnUmFBVnp4RkFmMkhYRk5pZEwvSzRieVltR3BHOEZUY3gzWGRrdHhoSU9pakVHOHdLKzZ0TVBjbVJqK0FEZkpxZFpJYkdkQmRIZ0JTMlpMd1lIbGQ3OFJpc1JYTkNpZ0FYemFtanFuRmt1NWgzb3VQN3JadkwxTlJYcmNBejdkVnYzcWd1YUxxSUpEVjNrR3RQMy9lcXFhWE14L1p4blNubGdpeUxTcjlvWHVUblZZK2ppQmhhSGoxSXVLTHg3bVFrOVphdStKNm8wb1pUSFViS1ZBNHFtQzJhWHlPVDlUUG5LZ3kzQXgvbUoxQTRDcGxIWS80c01pdThMcW1vKzdXTUtyYU4yWUdlYmFCNzgwMWNaWjd6aUsrcmtHSzlTU0w0Yzd3bGVmNnJVMGpodkw3aXRkUDMrUUltbVB1NG83OXNZclNQWG5YN0s5TWtGTXp5V3Jpb2ZXVDBNVmhKMHlDemlZbUhrcG90N291NCtFUmdZWFdSaGUyWmxySjhWdWJlNDExZmJGR2hVTE9hR0xMTjdXOGlvanJCblpXU0RGMmhSWnNGcHliMWUrMklUMS96NXlZUjJtYW5OdFp1MEEyUlJiWmthTkxMd3JGR0ZaZk1iSC95WGlSUk5WbytGdGhPT3BRMlJmaExxV3lCMVc5R0pQcU1BMzJXZnJsY1Z2eWdKeFBuSTJxUDR4ZFJWajBXV3IwR2hxZUlweHJ6ZWNnTzhxU3FLSjBNd3c3c2Z3a3NGSGV5MEMzdlpqQldFTUpsbnozeXV1bmZoS1FMVDJZV3paTVZWQk51TmVFa0JjZDUvQllxcHcyZTFZNjNaU2NVK1E4WXpndWw3ZVREVGxyQlBaeHVxemIwRUYxNG1pR2dEbGovUzlGZktVM1NiODRNUTNmNm40TGUzN0tEK0VmZXR6c0oyR0hCMlNId21CRUxQSlM0Nzd2Y1A0U3BCVFMvS1c3RHRHRTlYZk5TWEhlMUJ3c2NIWTM0ZTJ1UzlZRHFUVVVaMEJvdGdmUFhLelMvcmM5bWhDWFNBUmhOZ0ZJV3F3T1FrUUtYc3NqNGFtclFFN3lTK2xsRWdXV3hoZ2lNQk9KU0NDeXhzSXUwSGpJc2pVc2dXbFJBQlRTSitXemw1WWlMek9aVDArdzFqL1lNSmgwd2l5eHYxbmtrU3I2RDVtNEhSYXhrV2ZRS2E0TEl1Z3hEU1NIdWM0aTE4djlSTitJamgwaVNsWW5FRjNzOVloVkdnVnNvVEQ0NFNlNVJwNTFwUGFqM1J5b1dFVnZlVGxkS0RXQklRTEFNRDQyUE9TZmFvbHhjWGpuanl6R3ovQ2ZLc3hVWTUyY1J3bnlUa25PbTlPbStpTXBnU3Yra2JkYTlTTUJoWnVKaFMyU1lKODd3SEpUVDNVZDFnRFo3L1pROERMQ3ljalRzSWtqbWo0eWU4ZlZ0cVdER2VOZjNLYXhibjV2YkhXTm5tVWY2ZzBaczJRcm43RDNwSHp1bklnOHcxS1VYV0Fxd0pIYWpXTW84aVJmVVNoNE9ReUJGY2JWZlpsY3NHbnBpZk51R0FtY1Fvc202NVhNS0x5SS8xaS9JY3ZDZWd1eGRMZVlHR0kvUWtzWTZnRGdackRSMnBuNkFNbTQrdHNDdkV1WEQrMTZXMnh0azBHVUplV0w5ZTZvck5QY2pWRXdyUHRhTFZNWlA1Snl6VzJzeTVoZXdUa2tFRkVjaWNPa09kb0xRZFNCZjBYYU5rZlJscmtwWWIyYWhWbEVBTS9sQVlyQnlGRENTR3N4WitRUnRzWE40SE4yTld0M1A3REd6UG96MGExOHozdmtsNkE2NDV2eW9EcVBPSlBnMEgvZk95UUtmUW83WnBIOThFb2xpL1ZjWmpxTEUvaVhCOExpOGY1OVZkdTJqdkJERFduRy9IR0piWitSNVBUMWJDUzQ1UmF5azYwU2tLcHZhTWVWbmhOWUdvY0JTREFvcldjR1hpdnZpaGtVQXUybGs0QU9OWTIrUG0rRms0SFU4SUYrUDVwOHBtcFFUcG8yeUFjU1lON0U2ck1ZL1I0ZmkwL0MrdUZDaVp6UTVJS2ZlZkl6TFNIc2krN0pEcmk3OU42VWJFQTI0M20veEErTkRpT2N2Qk80UmpWRG1vaTd1bEJrYXNaMFBJOWk5a0VBRjdWdm0wY2FuNFQxcWFCVlk2S0FSK2xHWXFJWmgwTjllU3V3UVduV2ZNZmJacGE5YmY2cEtFcWVqZ0tDRlRHTzVUQ29kdFZLVG5DODJNSzNUemNDZXJ2TjBvRERaTTJYK1QraE02UUhEV2ZxdDQ2RlYzSHMxcE43M2F4QVNqU0hjUGF4a3dvNE9tbktHdUw5L2JEd1NDVy9VUUloTWdWcTRHOVNMUWZxZnc3L2pFK1NSNXJVWWtOMjRCYWsraHJrdFVjdUJESGRJT3d3ZGd2UUlXdVNDZnNtZGloT0p0T0ZYaXJsdXV2QzNMV2NSc291SmlTNjZ2RzQ3dlQxdXc2Y0Jja1QwRmJqZnRXSDF0NkZ5eEtBZjBFRDVFbHBiRHVzdU43OVFQM0NZeTVkQlRDNFFYNys2cVJnRTFnZi9kcnh0MU55L2JtTGFrclEyVUZtYjJTcDQ4TnZodjJtelppdmxHTEtuOURXOFZqWmljMXJKaGxlbGt0SHFnTmpqYTQrYzZLUVp3Nm1YL3EzRDN1UWJaR0NXQ1dLSHF5M3JYZUJMR0wvMk1Ca3E1U2lhVUhYN0FVWWtrcC9wMVJ5Q2ZYV25xVzNEWkI4ejNqQVFMSTJ4L1B3eXNvUU5nYVF1UWtuUGw4cnhrQzVjVVVwSmV3Vm5Dd2V1R1BkOUtETHZCNUozemVRUFhaVytjYURHWkVqNUcxdjR6UVJpK2hZMnhaNzZkT0pleWJCZHU4L0JQdS8wT3lHTWNVK2ovT1FLRnduQjBZM1h4RkcwNDMxNzdKazJDOTFVbEcrZnhHL3ptYmd6WDZDUEhzeGFWL1pmNm9ESHp2OCsvYkE4eENuL3I1SlI4SXMyanNOUkJ4ZzdrRlYyM2JlWEtVNHl2MjFHN0tpQkJWN3A1cmgrY2ZzV1NsaGNEUkJMdXJNYkx4WUNKTTlQOGN2ZzJwQlJpZXhSRllmeWthVzhwV2VsVEFIVkZ4VUZubWtJZ0xMV2ZDRTg1OGVhcmZXNUswaGZxY1EvZmxOSzB4Y21XdXNwMnN5NDducXNvbDhZMHBoU1hwMkhSWHZVSGNlY25veFhiYlY0ZkNaQWFpdUE0a2h2NzB4MGlpRXQvZVJHZUR0K0srZ2FZMHoydU1RaUJPbko5Q0N3bW9TeEtXQmlHQndJU2V3MVpXWmpDdjJCdDFVc1ZudmFRaDU0bzQ0bEpRZFJRZmhVSEdUY0ZTTE5IeENFUitiaE9vUk1jNTE2b2NYRkxzL0NsSUZyeXhkd0tYbWtYTC9Cd2tzTyt0czBaQzE3M0JSVThBcldxSnJ5ZVIvM0VEUTkyVGdrWUpjQi80dUw0ZFlCMGJDZkxRYkcvUWRXaC81cVZWTGZiUGdPSkNIN3hHbzNjSGpNeE5WOWh0M3I5cWd4ZzNDb096WDYycGE4T1lTZDJaMTZ3QWNiYkRoNnBBOXZaMmx6VXBOVitDSW01TVNkbGgwZ2ZNWnpxd1FwMkh3YVd3SWJaOVJjKzFLekZTSnAvS3RGNE12d3lmdGVMU1J4R29nbmJhelhUMWVXc0tmdXNWT2ZOY1lNUTlEaEhIZmhUT1VSVmZFVHE2WDhQZjhFUlExa21JMVRLbDZZWE5ueElLQ3p1aTVZUXFJd2sxV09LcWlZZnBVNlNwQVZTa2s1RFBMMkNSUS9EaW02RDJkamJMNWlTRXlhTDRyVXVDeFVIckJQWEpPNm55VkpjS0dFa2h4MTlxdnk1QmdhZ0hXam9tT3RlbEtPaXcyeFZnM284VWxueEIzOVNrNGw3YVhtbENuTzhHeFJSZ09DRk5iUTlZWDFUOHFpc0ZVUXNQRUttalJ5N0diN0o5RnZzRnBtNHU4MlpDN0o0RE16S3czR1BTS3lTcFluSURMNFVwUEhFWkdVazl6N3Q0M2xFY1NzeCtFalVSeFNjSS92c1paeGJvb3JjR1d2NGRsZ1UvQ2Y4R21rRUtHZDRLUmZEOWFndTZUQ2s3YjljcUdlbVdoVjNtWUVqL0NrWFFtRzY2MXNlcjlUTThRaitjODZIVE4rT3MyeWxORFVrUWRrZEhCeUdNOUYwS0lZZldPSGNmeXRmdUpUSWVqV2VEQnBCcWU1OVZMUFVmRy84TjhYVDhCTEJ1NldZYjZPclp3bWdnSkd0Q2I1Wmh5QW9oMDZRQW11dzd5SVkzVFNRYjlUQyt5WnZFNmFMOVJIdlhlTGhXaVhzZmF6VlhHS3pKQStMV1VndGV3MkV0ZTk5d3dpWUc5UTQ5cWhnNkc1VWhyVkxNTk84aThqYTAzOUxzNlhEWDFPNU5ISEFUOWFVNStXaW9VT0k0aFRJSWMyS2FCS3ZCZXpyUm1yaXdPY1V4RjFxWE9aNVVoWmRuNzUxUWUybHNCWHBjYzd5SWplQ2JkOFhlUnE3cHhOTUx4VFVWYzZoajFuc1hGa0UvV3NWYjVJNmFNZDc5ZC9LWVZWQVdGZXNWRStPVHo5dkQ2QVp6QWY5TnFXS2l3WUorSGlqQUlZYlhmL1c4UXFFeUdhNkVKM1NiL1V3ckVFdDVUeXBMbkdaM3BZdXYvbldyY3RGMldveFh2V2J0NTU1aU5yTTZoakYvK3d2TDZFYW92ZzRHMHErWHB4a3k0dFJ1NnN2aTZvaExYZ3FYWDYvVzV1NHBNdWtPaFM3VDRvd1lVM3VTNytaYTUrdC9GaSs4WFpiVXdDOFdGakpkQW1BVXpGRlFvdGRnWWFsWlg2NXpRcnB6aWpETDlnSXlmcUZzK3U5azNyaVA0Rk5QZE5wZ3NRMEhmQTBieXQzaytoRmRRV0JnK3dUemNmOUUxdTFZRTNkNWtHTmpwVU9oVXQxa1IzQ21sTWZEUHBUejdsVnp6MVFRUzNrY2YzZ1czQndHTzhEdnJrZFU0OEQwYVJyS0RaNVdscG9ZU2tkZk84L2xpK2lYOVlieEQ5VHJENUdKK2hZdWJvUlV6YkdEMkV5NS9tblZnZlVhREs3dG5uVVMwcGhBa3Z5bmc5c1FkdEpkMERub3h0UHJEUVBWdkhGY1VyMTRMajhOYmh6YXlZbXFTejl1aWl3NnVOc2pBTUFNVURCTFNFYWlldllYTmY5TG9hQzY5ZW1uNk52ei9STm12WnFGOXVyZEhKcTI5bDl4Z2JhWGJxdkYyQnZtY1V0VHphako3cmt4UEdLQlpBVTdPcnpLdlloSFZwWVJRN1BaWlQ1OWxRSHVUdzhwSGk3aExodnBFVFMrRWlHZmRheWREcEZIYWxrUzIrdENCOXFGcFFnRXZMM2QzeWZNZGNJYzYzMHNGNjV1YmREMzF3UUZVS21EeG40K2FFVHoyRDcyaTFWWStBUERCdjlvbXhIQVBoMWUzbk1vcXN2STRWM21yT0Z1a3ZzUVprbGdkcjRNOENocnhMdlpIVDJFa25ib0hEY0xzRjNIVTV5MUcwbXdCZE84SkIyZU5DK0YxUloyNHpjQjl6UU43YTg1NnRUa2RiWnI3cEsxNEE2bWtEUkdqdE9UQlZMdlRVa3Z2NDVGcGtMS1pWMWJhSlM3VTUzL0ZOaXU5ZzZRdDNFeGY2ZjZRQitUU2gveExXSERuRjAzN2FwZU5KK3l2cldmTXVlMCtNSjF2dnB5a2I2QXlTSmM2d25jOTVGR2syaFZlM29jTTU1T250bzJwdDl5RzRDU091Ym85bzF6akdZUFE4MnF6bVNwY1NXMitVcTJxeFhYREpaeFJoSyt4dUxtS2ZNU2Vyd3owbkF0Yk9KQTdVZWl1UENTVTBZakdRTzFJWHJwd044RXRkRjdpWFNVdHdEcUgrQTFTdXRmSGdoaVVFTVJqclkyNFlxTWFPZzRXTm1sU2pQN25NYTRVU2lsdmpYQUVXOEJwbTRPMkY4Z1VIU1haaTh0VHJveHgzYW44SFBoYmhhTmdUZHc4RFBBbVZPMWxyOFJDSWd2QjFIelZrbnhQOXU5WnZnRVBhdkkya2tVL2R5YTFzUWZnWm52M3BPVXV3dmJTNTZkVFA4Qi9xOWNsbmZHdjZhL0pWOXQ2TTVPQ3dBRE95YmtzdGNYaGk5TEp6Mmd5UWQ2TWx1NHhOSlpGOXVMRnVFbmtibnNyYnFjU2kza25seHBMck9tR3lidVlmNzVvT3ZRY21aaTlVbHdPUnJxWFVUQmsyNDdvZmhZK1R5OWd0S3hiK3NZWlQvNmVoak10Q3A3aHI5SlMwTmlGNUZHNm9pQkF0ajhxVXkwSnhERFZrSGwyUlFoeE5OMGQyTTV0SmNsM1BpN1JXcEFZUXErQ29XSGY4WlJuSTB4SVRIemxnOEc3VUtGb1Y5SzV6VFBPSmppN0crQ1ZoZ0luNVhpY29Qakk2NForenhLUjlmajVQUnEwd1NBVWVXN0ltcVpDcXRvY21adzljQWV3cTJXVVBGTVVSTnBHWFB2ak5BNXU0Ui9oa0QrcjRzalpHKzIxdkw1em5sOS90V3VvUFdDOEFjcjFOZXR2ZC9rL3FSV2kzWHp0dElud290VC9Wand1cVV6MkVRSXFzWFFGbXp3bVRnOTgzTS9VbXlEYXRxMXgyVFhwZ1FYN2tqOUxxZEtDemUvVEpIczl3YW9SS01wMERnbmtJN2F0Skw2cm5MckFRcjVsazlYYnV2UnMrTXI0aUQvZ01GVG9yREVHQlR5Tm85TDlhTW5hdTMrNGtLQVM4aEpOUm1WeVhGWS9qL3dXOWp5a1RmdmNKblFqVXhOU0tLUjFFNWR3citFdjBQaVY0SkYxd2xUVFpWdGlTQS9SWnlBKzFFQlVjQkM2dU5jMzhiWXFMemJEeUE3V3k1Sk91Q3BWREpEcjZYblowa2Fmd01oMytpNmpmcVJ2bWJJcm9SMUVaTmtEYm4wdUNvM1dXMy9EMnVjZ2UvWjUvNGJNSE01TDBCMUNFdnBZRXl6bmhQQnhjdjk2M2lUcVZ0M1VKR1FOc3hJYTFESkpyNUtuN0ltRGZlZ3FSTVJ5bk9yNjFGYjhNYUdBeVg0bWhWOFhEM2JkbmF6cDFJY3BqQUpwS3VCR0FHNkdvUXcyWGs4MFVzS2dRM0hxS00yWmZnakxmaDhjQm01Smtzd2thSzVEWlU1cmtVQkJiR3RhM1BqZ1V6cHlkK016eTB0a0Nwd0VvNkxRN09URFlJWkhmeDRyQmFFWS9BMjBMRzNrenYyZndwV0ZML2VrL1A2ejU5Y29UemRLbTdpS2dFOEhkaUc5VXZ3RDFucnNNZ2pXUkhoNzRDWGNpeExXbk1EckJMRlV5MHZrY21WanIzVFBkUm9HekYvZE4wcDR3dnNZWktCWC9hQkhxSTlyOUVwVldYS1NKWEpJclR0V05sRFdCZTlPbXFnbmtwY1YrSGZuWmVGUlpSMEtzOXZsQ3JSNVNOOHkwNDllQzlyTklvT1hSS0JQSUcyQlliMk90ZldvNFJ2OFp1NXU4YXVvbmVZb1BucEpQYlJjLzh6c3NYUnZteTRDSUNVSTREeGtoVkdWelRIZ3FNaWxud0lWbzlDZm5aZGgrbHFPd3JhNTM2bUdScEJuS055Uko1RTFjQUhxdzA4Qkx6Q24xUmNJSUt0S3VzV3VRR1pudS9GK2JtWW9BZlhCZldQaU5wWk1rNDlwblozeTNieDJYYXIrSXpoT1d3b0pCb2xyTWZyNVVlZU1GSDc3ZmxnTzQzL1VTdHZRVEQyQWxBOUUrVDJsRU1pQ3p1MzRmTFd4ZmI0TWZ5eVh5ZlVIUUhCZ3ZZLzV2aklCb2RWYmFweDlCM2ZXN3JRek42ei9ONUxwQWZ4NTB1UTN6aWd4ZG4rS0YvaFh5NkRQbXBJZGRvSW1TUTlBRnFKcU1jVHA3Mi94amlpNVdKY0VUZnNUNFlDeXpoUDU4U01OcUFHSFpHaE1EYnIrc0VpT2pYTTJqKzc3ZCtYNUlJMG5xUUFwUkdQWG5sQjFvWG13RGVhYk9TZytZbnBwM3djenBGQjZqaUFiNEZucDk4d0cydlJiNDIrTmVPbEN6aXJFTHlrT1FTUEVramh1a0ZHVW05aEY5K2lPUUpUTE1IUmVWakpodW5EUGdtZTRBUStQN3l3Qy9TVXZHRHlOd2pwWXRoL3Z6Vyt1K1UvVUFNZkliMGF3M0FYOXA1NzJ1aHRIVUR0T215OUlYbGlYcDdTK1J5cC8xNHpkcHdEM21vWUU3c0xFZWFaVGJhRTBsMFRYYmJkQ0JYNnVDRnJGU2E3eVpSSTd6dEdNbHZGby95MU9xaHMydGQ5eXdvdmU1a1pPV0VHdG1JRUIzRDBjcHBJL0wwMHgzS043MUJGcHIwQ2QyVXI0bmdLendoKzE3Sm80b09DYk14d3pacjhVR3FyL2U3V1V1UW9rajJIVXVRUHhEZlRZaks0WkVpRVhsa1MwVjlTbHhhejEzRWpVOC9yZld6dGZ6YmlhTUhxRmRITGF4VDFYYVM2NFZqNTUxMEdRbVg2UHhzcTN5WlVGaU5pSzNLczBROThjakJuaFc2dzhCNXkza0NaN2p4MEJZUVFOUE1jejQ5NVYwMi9oMmxvTS9FdW9JQ0NZd1V6VWpQd1VVRE1EcFJvb0Y3K3I2VlVieVcvNk5JYkgyWEJlTXNRNHI5aEM0R1V3UkdOSUdORTVPbGJzWS9rTko4Z3U3MG1BRWswT3MwQ3lmSm1Kb2p6S3lndVUzL1VTOFJNMDlvQWxFRE5aSm9aNXc5ajRaVDloVXNKV2p1QU5NOXhQZWxSWFB5TkZtRXZZVnoyak9PaVFPVXlMdjdLMkF3UUhRdVRPSkVQNUE0MS9sREJEQ0ZscklzTnBGL3F6N25rNVEvd1g1YW5nOFlhbzZwdkdOY1NpODFvNzYyUVpMbk0rSk9RbVZNbmxPMzZYUkZZZmhseU5sZVk2NXQraGNRa1h2cktiSkw5M011bzJFb09JeDczQWpJVHdmdFV2WlY3VUFleVQxeW9rdGZ4L1lpWnM2OWJ5L1RHeWNYWTBuZFFjeUxrNzZ5K0dXLytBZS9maTZ5OXpqVGFtMXdpZ29maWdyOUlzRlZjK1ZmZHMyUkJxcCt3VXZjeWdmanVldUJJeWZEbHFhUUt0dTBMbzZ6cmNXeGhlK1JieEwzSjZrV0E5TmQzTktBcUViQ2gyOU4xTm5GcUZKU2Z1eXd0dVRUN3cwUDZRT2RQNHNVSWlIRjdLR0dQT2JvOG9xSG9zNlFBV3N4YWNrVzJYQUJ3bXhJUytseDlVSnNoc1RNL3lTT2lhZURoUllQUi9oNWx2RU5vZ0pFTUxTWk1yOXVpckg1b2VKNTcvdWdsbWhQZUZ4Z01paTJOMi9tWTcyaGltWjRyV2xoTVlYTEYwWlhWVWZFaUVubW1XZXhKcFQ1eTd0NXY4dHowVnd3UmVMNzlScUduOU8zUDlEb3dyZU5XRFpYZXZJSzQzbTh0aXJ5dElaSlkxRzZtZCsvQnRPcGJrNmlQbElFUTM2cTNqaHZyekMrcGNCWDNqdDBTZVFvNjNjazkwWVJzakZrNmMwN1lLOFRHY1gwVVNna0xXQzNzTW8xUGN1NFBJTjhmWFVZRENQOVYveVZJOU1EZ0JYQ0h3MkdLUFdVMFA4djJBUWltQUxUYnJ2V0tjbStnRHRObGlPSjMxZEVwMTZNSjNNOXE5Tksyd1JCUmdkZjlBTEs5RHR1R1RQSTdIcHZqYTVFQVUzT280ZytSNlJmSzV4N1Y5WlY2Z1daSWFFWldyZFJKM2NkaTROR092Q011ak9hVkVtUCtvVjlqSFM2c3ZtZEl6OFplcEhidENldlZ4N3RDbWNUcmtyeitDb3UzUTZjWXdHSEJuZUpESjd5RXk5K0g5cWduSlo2ckNzbERjNmhKYkp2N2QwQ1BzVWMxdzYyUjg0OG1BR3dDU1paMUdEbEpJcnNST2FUZkZCVHpVVUJmYTNZdGh0UTdkNWhCKzMwU2NySzdYVlVOSTJaRUpBRk0xZFFHNWF0bCtvZ0t5N3ZRMWJlRjN1cmI1MTRqd1BlMmFhaTBteEVQNHQwL0N1WVpvaEQxTzcwZVZWRFBNNjhDT1pzaUhyT08zajR6M1krSm45UFVaWlNFRmkwV2ZSQmpCaVZaT3lybXpGVzU1WWpXNlJ3RktLMVZEVG91M1REUXc4MEhFSzRTZWJEaFh2UWNBMlorMjZHRWQzWU8wQldpMXR1RFhSQ2hjL1oxWnN3RGRrckVlNkNicDVqS24vWkdNQTdGUGRTUmJCSDcyd0xhQXJYQm9OYjBWZG9HblBWaTB4NUNXTXJnYVl1OVpvdmtUdFU5cDZMR2N0YjJIQzlrWndoeHJYRnpLN0VTK1BXYXdQNUxuOXMrQVQvYWNrdG9lOEVqaFRBMExiakJKVlBnSnIyZWZIUERzZFNidGtVQVFNVkxQZFlidHpsQXVPcEJzZks1YjBjNUtYWlgyZy9kaFkvaHUwRUNvUjZlSnVveXJ4c1NKKzlZNUYybEpDVUpaUGlubnU5K2lyUTV4c1BpUGFzeDRIaEhlMWdlZ3VjUm1QMHVXb1F0VkhOZHdqaXV1VVJFOS9WS3ZKazE3QXVlRFY0TGNrZm56VUNDMWdtU1dJZ25WWWh6L0FkMllPNFFCYVN3S3JNb2xlODI3ODV2NUpsaHJLQU10azJ6OCttWEtzZG9BMG0zVVBwMmEvVTA1eTRjbThRUFpQenFTK2lZM0N2UEdqWVRHc1U2NlZncnNMa3JqckEwVDNCMGdFNFRTUnR1aE9wOVB2b0lUWGp2L1lMK0pOZ0c1N1hEYThXNThsb3NiTTA0M0NvZ0RBcE5tNjRML3cxRWRDMi9GMHFPZVhtblpuQlBrQ1NWY3BhUVpPZExFMkU1cXp6R2xZYWZWZmJDMlhLUGg2cURUOHJ3R2JQY1NUWlpKaERWWTdZUTFZOWdtOXJ3N0ZPNDJVbHhrYVU0bGpQR3ZaamNrUmh3dVRLbndoYWZDbXNBYyt3Rm1YVldqVWpIYmd1Qi9vdVBKaVhwWEFJOTJHelNtb21VbFFpU1JhOGpoWGV4Tzk4MUM5bVVib0ZhSFJNK2gyallnZ20rMmZEVHRkczA1d1NoM3lmRHUrc0tXSFRhSk1QaXBLYi9UeHhyR1ZjMTY0WmpUUW1MSVFrMVFZa1VnSTBuVnVGZXp0aCtrQTZOdlZyRjFGZmJjVmFxZGVIWTdNZ2F2clpWYmU5clhaS1g5K0g2SHJidmVjWW03VGhDWk9RWUxpU0JZb3ZQMXNuZmhKbTBzSWYvZC9kRFdVYjV0ZWVXdnFvTHRPaDF1ZDF2WDhwQ2cwM3YxWEcxRTdlWUpJdStITXRyQjZGcDBGZEpvazV3SUN4TzVIa3dRNEFML2t2RTVBOGlkcUdRRThTVWtLRVBnNDAzNjdXNE0xWjQ4RnoxZkc0aHA4RE5Yd2lzc1k1d2ZSaWdMNmdLZ0hPYmhEQjBDTTNKeEliaXZQUVQxTTU2Yk5ZeURTYUJNRk1kUUVXa3ozUVloaUtCdWVuakYvYmpramM3ZzF4L0pNSmlsUE1xVjEyczZldEltajlNeXo0cXlWRnJsUUMvYzNKYW1WdzVKcHBRZkk2SVlmanRmVWlON1B3N1lIVFppUkgvVSttenJBSHFzdWRqOUd0L1RCaExzM2dPWm53UXI5UDZEaUlrM1p6WDFMR3RHQWpGSUh1eVUxdEJyTGdDYWZBcHEraXNTQ1FqWDhyaC8zNGRvdFR1ZjZsTTVMQ2NwT0pwTFhMb1JBSS8rZG9BMXF6bDh5d1B4NGVXOWwvejV6TVM2b2tyeU92d3A4ZEIxM01WNlRIMmxLWFpQM0ZxU1VXTVdnN2dPR1cxejlyN3ZyOTdIOHA4bjl6SGtRdnE5YnVTZHp0ZEJTcEpMcFlobThLdytMRkgyK3FhQmJOSXZnMjh1MVlKcU9peFRyd1o4cm1IOGdPcm1xM1plSXZnUXVPeVpWNnAyc1pXWlM0MVh3d2ZGMHdwQmZrOEhaL3dEWmUrVnFObmZuMGNXNy9pSERGQTRVL3M2bE5mcm5CbGR6TzhsdXp1TWsyZ0lWQVRGTkQzZ3lrWG1oZmZwS0hiRWFNQnNxbGhhR2M5b1l0c0U2UlpmeWMxQmpCMFFYazNwTEpXZ3FpNjcvOVUvMlpVT0NkNUxzeXRTVm9ZZWNZbVhRaHRSQ2dib2txZEU4dE5BdmtFU3FWM2tHV0lSNFlBdVNPZUQ4UUQ5RlNZa2J2clppTDZubGVyR1UwZDlZZWdMNFdLemZLQTg5clEwQWR5c2FzUTh2ZU1SMEZRMDRrUGNodVNjdlJ1Z0hOSStxTFVxMU5tdHN1WnpoVlFHUDB5V0lWTWsxZ1hzYktjZjl5c0RzVEltdGZWaCtmdXFUNTh2eE5BSHJRdkVrNFpMc3M3Y1lWWjJmOCt3NENEZTNHYkhkNnMwTXJxSHh4Z2wzNklCMUtBa1BjRm5tV2hHTXNrU1BRa0RBaVJ4WW1maGVoanltMWthWW9TcmRsL1ZXV1RtYlNCYkNEamZIbEFpVE5BU09YdEFUdmpYNkJ1VkZYMzJKZE45Y0tQQWJ0MkdMOHNIZlhhNHYydCtkbHZFcWhic1NXT21tTzZBb2R5K25INytVbnBJWHBrSU9XeDY2VnA1ZUJYdHB2dEZwNk1NcTdMdWRiM1BmT3IrQUppTTA3SGw4SEtLbW9OcThvK21rK2JQblFHNGQxRElNTW1OaEQ4SzBhc2RieWgrWFdXYXIyeXpsWE5XL3IyQXRQQ3RkMzY2bXoxbVFYNU1KVGR3eEs5QU05Nm5BbEIwM2gvQ1RleWtQTXl6cndtdmhmTDFnVlJZZzE3dzVwOStDc1ZFOWRGZk0veVA1bDNvWGNrWGhkcjBjYXhza05WSGpxWkNTaXI4ZHZUb095MmlTNWgyN1lLRWtXU2lLRCtGYVh5WkNxZDBoY1JTbEwxWmZ4Z05SVjI2Q0FCbnJzZUt6UURvQXE5bGpaUHI0ZmQ1NFlwTjAzdHJZMFprUkRDcXZOdk4zY2tOYVg5UWc5Y01HTEQrTmppdzl2UjNWT1hhTy9mKytEbmlEeWhSaG13OS9JM2RTdmluZGthYzA1dlFCSjJFUm5GWUhoRDd1Q1NRVzQ3dEd0VU8rcUNneVhzQzcwUTlhTUJQZ3NScmFWR0tzeDZIRGtYUm1wM2REVlk5bzh3M21pTVdObHgyU0wzb1ppS0g4WmI0Zkl1ZzZjblVnQmI0THErWCtSNE5mMFpMR0o1cmpJcXVYY2VUQ0dkVk5PMmh0ckZkSUtnM2JIRXpRZHdWd2Z2SGJ5MkljY0doMnpRSW95endVTHdWc21kMy9pbFRDNkdPVlFlYkpEK01pZnJKRDVHbDEvMktrVGFVODlFMXhwRkJqZkdPUUQ5OW52eWl2OVhUOVBYODJZS0pxUFdpQ2hwL1EyRUtMd3pUdkNsdFpKSTR1L3F6aGx5cWZRUnNyUWJNVnluaWw5Tk1Id3lQSmdYMDkvYUtRbnRmMGVVM0FROTRmUEk5MG9uUHAyYWdyK2FKbG42VnV3MWFBSWN3VXAvZEVSdTBSalFlaDdPSUcwYmYzcC9XcEVUbDFFa2RDSDN4c2VjY3MrT1V6RjB0SCtsTjI4SjFrNU9Uc2tJd3QxT0xGUDVGdVJzZEdTWmZSQnRob1QybFc5UEV2RXA2WHdnUlcva0FZeEVoSVIvL0NvNDh2RXdrNHZjQ3NmZTZha1dJQ2UyQ1h2ZE5WWDhoU0IxVFZCK0ZvR2FRWllZZ0ZVZi9DenZ4a2tFbVpFbXQ2aUxhVHJsdDdaZmxzcjRvdnpwVFFwdldTK0dGRHNuanlCc0tna3IyOE9PanNUT1JpWkdReXdPTkJ4a3M4ZjVxcmNDOWl3M20raVgrR3lTUWpyc2lpdDQyeGlVNjh0MGdQR3BEWGRna1NDVVpMV0U1djZjcmk5QysrTXNzTGt0eHc0UWFtbnQ3NlppZUplUVdtYWt0N0dLTFJFUW11R1l4bmNOR01rTG8wVTVNWGFlMklpZ2ozRkxhUTBpZXZhT3ExTEZsZUpIUElGc1hYOG1ITDlFNjVCNmI1bWljN3dMdjdCZVRRY3M0QWNRdzh6bllkWmw2cTZRbk9VSmxlblRXRWhOOTFob2czY1JIREc5NzQvQVNDMTVHYUhJa0dyZjhKRGxDZGt2bElWTnRRUTFnajgwTjVQUkN2SUdLMkZsZlZKejV1V1JLTUg3S3N1WldkQ3BUWXVMSnhXMDcxd2R2ZmYwUk85eEovc0QzZmgrVW1wYzBGY1JPOURzSUdSUlRjeVkxSnp1RVNEcWlteDhjMzgzTEJvTkxDbUd0U3RtTjlRQm1NMGJHUDZ4dVp5am1oRktFYVA4YjJybmVmbmJyZDA0bGJ5enQ5amwzenhWRUU5Tk9LYk5kMVlaNG91S1dGT3U3OVg2ejR6bGgyY2RvWWFMYTVIRzg5ZGZabzNqTC9RWlpGVU9PeXcxUi9IdTZtUkdicGxFZDlBdXFETUZMKyttVlBYSU9mV1A3akhDdTN5cm5CbEFnMmt6ZXgyZVZIS1hyNE52OUFOZVc2M05hR0pUcDNoeisvd2FETmZJVFR0SUhzQ212SllXL0JVSHZTOS9lcVlrcWJSaGJ3MFZoeGo2ZVJQcmg3MGsxMTBDb25ISnRVdEFFLzF4MURTV0RWa1k4cWoyMjF5anZ3TEFEZDl6bUtFQm5nUy9EdWlMbnBSYS9yMzFQbm9kcFRRMVNkem9EUGdlTVdwNzBEOGpGNkZkRzJJZkNVcWZmUUJtMXMweC9WOXNPa2EwcFV1eWxjd0RZYW1MaFcwM0VSWXkveW9YL1FBNW9hR1A1djh3MXFMUXM4SXh2YWJ4UUt6bXpVcnRDNStUc3lwZXBwOGxYUVNZblpmeHU3NGJnRXpsZGZ3UFp5ZTlpWU1HZm1oTVhuTGIrNDUrVm4rVEhGUXp6YzZpM0dOZUsvR05OKytJTVBEeUF4Vkt6Zm5Iamw1TnBBaUdMVTgzdzdVWGw4VTl5NDg4eTZEN1RuMExQMEw1QTF2dmZEODNkNW9SaHZRaUxIVWZlVm0xZHFhb3g5TU5kME9OeTZ3dE1LWmZmS2FOZWZQMUNqZ2h4ekhRdmo2N2JtU0tjWTNZQ3dVOUlEUW5CUWlXYWlRenRvS2tYQVlodWF3VjYxd3ZrUWxSS3JKcnlsRWhvY0owdGMvMDMzRUFKZVRzaGMzdUJFQi9WYnFDTDUvTXZndUNIb0JmMlNDRDRZTlhHQ1YyWlQxVHpCNkNyZjlETTZEajAxQnY5ZkRBZWk0T25CS2hkUHNFTHRzVi9HZWZHNXliYUhmaU1JQk9iS2RoN1ZvQ092bERHbXhGUCtOaDhSOGFHdE1jT0dIVGVpTEE4M3pSNEp2MDlsT2FybEphMUhPQXJ1VmF1TzJpS25odnJIT2E1cWszYWNWRnlSNnVqa2MwNmZRVE42K2lUM09Wb1U4alIzWERjRFVzOVNwSEZ0cUprRHU5SmUzMXkxa1cyMXVUSUlXNUN1SG9vY2RnU1RJSWx0VUpSa3F3L21Ld0xMbXFORUZvaFBvOEFtL08xZ3c2b1dtMHJ4R2NOcmJ0RUtSTDNtMURIc3NuQytvMGx4LzVhNlVTSk1idDA5R2E4eXBIV2tqbXZDUjNqYWsxVERXbXlYSmE4YzhQL1czaFo0SlZQbFhTTUxtQkNhbmIycnp6WHJVUkovTDh3NnhJa1FWQ3FocVNqRUhKT1VQNm15am9MSzdPMzBldzZqcTlFbGM0VXRXdUc1cW9aNThUbUNrSHdCODFSNjhJZjU3U0VuQnYycTkwa2hQNjMwZEs1REg5NXdQdkJPb09jZEdBVzRxb0o5eUVLWHIrR1FCa2pxKzZZMW1wVlJxRUZZRkZOaHhhZFgwK3VvVWtUYWdRd080R1NHVm0zYWJ6MHU4YWJmRVhQaUVlNUc5VTR3V3dweit3L01LdXBrR0duMFlFWlk2SUtuWldjaFZuaGY3NFRNa0l1a0dHalhPVkRyNG5ubmNSUExGWWltY054N0JlM2NlWnRuUDNwOStkazFuaDZpc3k2L3FDWjRzUG8veXRwMHI4dU1jL0NYNXJFNFNjVEhpaTBVTGhvRFRaMzJabGExL3VOcWZWdHczQTNVSW9yc1d3czZPTHVBTmpBMVVqM1RyOTFYOGRSNlliR2xuWXUyNHV1N1FIaHlnNW91RC9mUTg3ZnhXTUVwdG8wV3MrVFFaZXRXZzJubHFYOWJUaEt4bEM5UUk4VjVGMUM1MC8wZGthWUkzWEVZM0VXLzRZc2Q4ZnNEbHNUT01VMXI5Q1hNelJ3MXU5WWVGdHFTeVY2QWs0UjNNcnB6SXBvNjN1Vm1pTmplTGREYVM1bGtKZ1dBZFJtNUdFQlVMT2p1TWRUYUFJS1JrMFUxb1JjWTRlZjZmbWFnNjZkVXJLM0dwRnFmUS82SkFjaE5ESm9LTjhpcGUzaUxEMkIyRlNicUJhT3gwSmJweGlDUWdUU0F1VU5TUmswZ05DU2toWlVacmNLbHNQcGpsbmljM1VkMFJVMzg2YUFYN2hwTmZZckZvbmF5aU5ld0lydmdNbWI2a09nWTQ3RVAyVUljZUs3cFdLTDBxQU91NFJycmltd1ZML2ZaYXdRZzVYaU1hZWtXaU02d01ML0Y4UWdsM01hNFJNVGVMcjVaZWV2UTZwaEQvbVNXM3o0ZFFsQnliazZocE1KRUE2YlRGaUV2akpsQStSaGlTTjA1TWN1OUZ5V05FejU3MCtERXBML2tvcVVORU0rTjBVcGlVZWJINTBuRzcxb2lJTGM0YmFIenVZZHBWWVpyUW5TMkNnajRlbXhBQ1I3VnVTMWJZTGgraWY4clY2eEFPcFpRK3R2K1RRVTNPbSsyd01pMnp5Y3I0SlZhS1N0bXpBWi9hdlhsbXdqM080cUdZS3RTeEpWSFAvQWF1cElOWDlBRzFPZWNUWkI5eVpaR2VUcjh3ZDZzcTN5OWgrQ2JKdGxnVnZteDh4L1pMNjNSNDFEUUM3RUE0blB0YjByZUdpLzRCUktCaVgxalU2QXVFVmxaMFB6YTI4L3pXWnlub01KNUhKL1pla0pRSlRyeUlYVVgzRWhibDR2aTJZMy9NaWtMcjZRVHBWV1NIZVBsWTVLMGxYR1BhZTFpWlI1OW8vWmVzWW56NjhqM2dVUjBydUxScjQwTVFKbzZkQzRuS3I1c0xIWmlXZXNLbWNDTThTTUZoWWY3YnhsNkxMcWcvS1hPcFRwV2pkUHlXZkNiODhNWW5IMEZSbXZ6ZXlFUE1Xa2dDR1hMdU9uMks2MHNZeWVlN24zczZOK2Q5YjhlaTQ0bFFIbHdOVHhMZ044WUg5RXErM0dqcUt5NDE0Zzd4WlN1dkdLdmh4c2NiZm5sWmVuaEUvOTNQN291ZUxXM2ZOQWY4dE9vcHlMTGt0SWxqYm5JRVl4cUtsOUJLWDc5UVAwOVZrbW1FM1Q0dzlzTE9uVnZFVklPSVBXNFFNQWZDSlh4bVlIVm93ODcrR0VKWGZEMk95VlpyOW40MGdlaURuZkdUcnhES2pZbDc2ZjhJUkJ3azYrMVphbmh1MzVzNEdweUR1Nk5hTUp4WHBrd3BUQVFqcWhreFJxNys5UlJFZk82V2JiUVQ0YWIzaWoxNkgwZWR1MCtvZHNOL2F5TUxiV2k0WHhhYnZvY0tIclB5RlhrNkw5QVBiT3Q2SXlhZTBWN0JSQ3Zzbll3Q3MrOVk1Y09TUjJDVVo2amNDZVZCcElta1JkT3RHQXVWcEdWQTRsQkY5bHhOWTJuVlU4NmVqWVhQMm9XS2ZTKzZFeURZMS9ya3RUZk9HcStsUXZNWm9HM2g4Wk84TWV3eTNpUGNZODZFMTZycUJMMWQ0Y1FEdlpOSWJsaEllaXlnSFQrSzY5YmhrMDdndlhxQnczMlJYQlVLbGN4cUFEQUl6Rm0ydW5iNE44YjBlZ1VoQXdHYkM3emgzRVpZVitEM3YxL3ZBRWxRWFV5QXF2QVVMSVhGQVJkK3RHdFRaU2o2N3FFczNDWVJWYTk1Wk9PZXp1SVNQOUN5NG5mUHVWU2IyNG5uRzZQeW1DV3F6TlJKMHFDUkE1aUtxTGNMcE92NHdWY2QzNXppMUdJbmJJUVVNQ2h3bHdxUXc5TS8yYXhYcEpOR2dNMngrZjIvdlFwbGlrdDF4U0lVeThxRDNjTGdrSjJGMzJ0S2xoYW9jbFNPVVpYNmNFY1hCb0dvRjU2cEprSmdFTDM2QjJrdWNzTVNXTmgvZHFoOHpLZ0lSZ2dLN1Z5ZUJ2NHNJZzNJczVvTG90UUJhT2dPeG9JaW9BYnJPN25qZzN6T2UxT3A1RnpIRjJOYWltVUc5c3NWeUpWTXBEMUpzTTVpSlEvRngvdGRONFlpMzNRWTVPTUo3WitVM2FvdDBOM2xUbGxJYmhXUlplT0o1Ym1leWlvN1FtbHlYZ0N0SmJ6STVwY2R6QSttZlgrTHFXZ1pJUjFYNFJyZUFFQ2tRd1V5MzhMZ29oVE1HUVJSSG5XRDI1dGFRcVRkK0htNURxK3FuN0RmU0UyZVpoMmxDRnk2Sk1iWFBybDFaUStDZloyYmxkbWF5NlRvNDVZK3ljOVFMamFmT1F3K2F3YSt1bkNETUd1Tk5JYUVFWTdjK0daWHVtNWQrTGFBWlJmQ1VaRWsxaUNnZ1FBQ21pWmwxcFE1RVJ0WmtKYlQ0UkpRbmd2V0kybDFudldiTUpNT1A2MFlpNHpad2FLcGE4UFZ0SmVpRjNWUXY4MSsrWTBSbjg2T25QK0VRVC9WM0xPZWxqUFAxR0hQS3VBamU2cS9DdGNieWhOTThEdy9zSmdXc2czNndhT3RVOWN4cnBTQ1N2QTg4aTd5TURpTXVzUTN2K3BLbllBZGdubFlrRUFYYjJUOTR2blE2TXNrKzd0T1ErdXhxS0c5WDN6MXc1bURTNWdNS2xGVnhTM0tBdGR4NEpoeERPT0JwZWV6QlI5ZG5QZG8vUDhGeTJ3STZNaDVKZ3JHdlN6NzY1WnVpTjM5dkNoc3B6ZDRMR0NzQkZvOEloM1IwUytQcUdrNXljWk5lRjVyeHl3OGZtMVNyUjZBSTZCeW02VmN1UjByRExLTHRBSGc4VWRndUxmOEJQWTZ3dFoxVVliblRFYk5qY3JOTmVqUDNMb29EN0wyL0lpMjFqM05hUG9PVm00LzZueVFMVUZ6MW5IL2VQVW9Sb0NVV09HUndvVVVrUFlUS0RuaEpDVkFFRFFYazZaSlluNFVObllLYllYbDVXV1REakRhOG1GWEY4T1A4OGRTa3ZrZkVMZk5qTGoybjg4djdGWndzc1M1bXl3WS9NMVZELzJoaU10ODZMYnRVRG5HYU1mQmtSdlArMFdNUjFwcUx6dzh3U2xoVFJjeC96WUJBdkRtRG8wTjRNVjhoU3RXTDBsVGRLQ001MlNtNUN0Sk5CQWliRWFXWGYvbE9zbXl5SVVSUUVZcHJDU0x5OFRreVRRYUlJaUtRVCtJc3l6MzN1cHJDcUJsaFBVaVhXVVFKT3ViSVhWdG9ZNHJPOUpOUmVHU2hVVzdlV2lML1JBcGU1b2VuQXF1RHJON21xV016dUo0TXRNb20wTnNlYVJLYTkwdUxYRlpTemtnUmpqYzAxTk1kTWtUL1JQNjc5cXBWL2JMSk5HcTJHU0t6RkRacndxbUg5SVhZMVNuMlVKY1pFTEd0QlRkMUhTaU4xSnNVQzBDMUxmYjdEQ0F3ODFyRlpIc1ozb1J6UGdSb2Rxa2x5WHBTbHpFTWExOTVKUnFuc0hxVVJSdlBKeWxQWUtmSzNQSSthWlRidXJHV2kxV1dHMWhtRmVTcTBuR3hxb1lLNXJwdWdOSjJrSkRSV1NEWERHNC9oL2pJeFdEcG4zZGxTTHQ5QVJxUE91bG1TU29XUVBjMk9yYkxZV1h5dER5V2J5dy9OclRKQ294WW4rcFVhWnUreGtxM3pGdW5rcHU2Q2ZsNHEvcWtNa1NVaG4wUXc5T2l4bi91Z2NxWlJYaEVvT05DTU1ZaTVGSVpUQnZ1NWwxNWcxdHJqcjZuOUVGQ2VWREh3SjNLYzVyRnNxVFRLN09yUEJmR3NDUFYxREhnMk5XRUpPaXMrVXRndG9iU21rbEplYXFiYmJwWnZ4SFBCNDZjR0JFRCtpZUZRZ2pNSTVacWFuUUliOTkwWjhzQmVBTkFESllWd0FsRjF0MHV1T2c1aWo5QVhML3JVYVpxaTgvek8xcEVFWmNkbCt5MGJrR2ZieThTTVZmcklsRmd1VjNCUU54akVmaEtDSTZKemtHdHJyWXRsVDNybmZ4cWJMUmNESXZPS3k0bUFHZW1JbU9vZm9xNDd4QXRuK0lYQnZ6T2owYnErekV3Z1lRZmxYSk9KQ3BTaG5UbkdVNjcxR0w2RzJRR2t0KzhrekpvSmhyNDJDS2Irb2daWDJ2SGRFelgyNkprRXhPenVxRXlnWHU3aWFxS3lidXgvS1d4YVp5bWErbUtWckVLdGlvZ1VrWUZ4K1MyWjFTY0VtWWNXaFNzL1RTdzU1QXI2Z3dUMmFNUmhJOU5yenRHblBzNWFIWDhvb2hvV0JZN1FpVStqUzViUjlsME9YUDhiU2hQQkp0YUt0bmxKNThZTlc0TzQwVGtEOFRrZkd0STdtZEt4QU9CL3BQemU4cFl3SlA4Sy9SbXk2dFZXRjIwd1pjWTcyRysrcUtJRkh6SEJZbDVxNFdoYk14ZEM5eHZpZjAxY0wrNlZBM1h6cWlzcnZTOWhSb2lhMVorbDlSYU1IcXdjSHVUNzllMkg1Zk43RDEvVENNcEFyS2xsMWZuejhtWVZoNXdSZ25SNVpQcnViRi9RaTZ1K0IvcThud1c5MzNjRlFEU2tJQWpqRDFUcEpqT3JMcGZya2FBWkZNeGNoNFRpMnp6dnEzeTFUT0dHS1d5ZjlUOGpXRzF6SVNZNFRkZFFJb0FZeHhyZ203Z1Jaek92TTBFUHAvaHljb2oyS0pYeXI2VjJJNWRDbHF2Rjl5UXU1WDdIellZK0tDKzhpdkVjV0diUTQ5U08rNU0wTTdtQlFHQ0FyeDZlVTh2dkVWZGptY1dwbXdYc2dzU1lTcWVQeUwyK2lQam5LY08wN3FiTG5WdGt2YWVFdVM2ZHZTUjgxZ0NjN2lSUWVieWVWT1Fybko3VktXd0FyUmFMYWp4bTgwUmJiUkEyVXR6NVBNL3Y1QXk5RXJWdjBTT01ReVFueWg1VU1JcDNxdW03S3RrQXdyTkpVMGZQVk4yK0w1U3VwSmVFTFpvdTVOR1NpcWlZaXVOb1EwTWVqeWRsSXE3ZlZrNjlRd296bEU3czlhTlRJVlZPU3pBL01LU0w0bXJXWUtVRmhoNkhUR2VxVUExNi9QU3ZWQVhCaVhxMlFQSEhmVjMrQWpGRERtRXpVUTlGSjNZQ2MzalAxQS9hd3VBclR2RDZ4eFpRWjhSZkZrUStQblJpTXgwb21mSHlCdHIvWGxPbytWOU5DZ2NWMURFRW9hYTZmTjhpYkw1bXRSZ1N3bW1SekZBYUp0VzJubkRSZ3dheHZpMlBodTZrME1TL3pkNUxUYW8vYlpGUytWU24zTmh6YWYvS3lVOWFTM2tIY2FOUSt6aUg0dlRGWmlqbmorYm9XVk1relRnZmlwOEFScnprVXBadlorMlRPWDhCT3l1eWthNjVUUkd2NURmQWRPZEhiUkQ0SjhkMitsMUVraEZ0MDBzYkllWmNCcHUwaDRyenVXZytZZCtJYXM1WTJ6cWhKeHVuaGhTdUFSNEFIei9HSGR3Qmw4Z1dSUnJScWMwRDJEV3hoOFYvdEV4VzUvR3EyODB1U0RKaWx5RURxQmMyZldNdXE5V0kxdmVBakpPTGNydU9tUTdTUmR3a2NtK0huSjgwb2Q3NWZDSHhubTE3N3l0ZS9kUkZrajFpY0U3NE9tcU44VTJzM09sSzZLemFZLzJSTWhlaERvOXdGdjF3Y1M2Yy9Za3hNN0laK1VKTFhIUVcyZEpkMENDYkNPY3c2c3dlR0tnT1MzVGk3Unp0Vk1uTG0vZEN4S3NIUFY5V0hhdTBqZktnK1hJcE9qVksrQlNEZ0t1eCs0UU1yN1RtVU5ZWWhRQzRsZTdKbzA4K3YwRXFqTld0RXRZbGVmZm5oQWMyWE9ZZ1dNeDVLWEs3WkJmTm9LRjB0WWNrTUcrV3gyVWZBakZXZng4Y2VEaG96TzJOYXNYUkloRHhTQnh3Q2pObE0zK1FlYVhlY2Yza1FMVjl4Nm4zdm9lQ0pmdTV2SDZJcW5TZlhGQ1B2OGlZZWZ4ZEdhOGttdm9DVm1aazJuUHJOUFFIVG5lT2RYNGc5eGhMbDFJcHZhL3cvSFA5QjF4N3VkUTEweXFxdmtwb0JYbXJsSHBOSG9pU01FQVlMempJeVRhVWlnODlWQ0JHYmJxdENocFpjRVhEaDlQNVMzaE1adXNHdVJhR0ErT1N5M0IwT0RnWXdPcWhob0RkZkRUcmh4WEQxU2hCajdUWS9EUzJHaVprc3BGSkM1aFl6QUxFYlpxdGFRUlpKNHZRbStuT1Zha0l0WXRvOWZDZ1BnT1k5di9TQ0w1eUhIL0gvOXZ3TDBDVjlNb0dUU2RSODRqRVVVL0poSEZKeXdkNFl5Y09XVEZ0RVNSRkcxcThnMGlCTlRKNmQ1ZjVrNmNMLzA5enMyYmRPNFV5cjR3ODBWRVVIUUdvWmhMMzdGTHpBck9GcXJZM0Q5M0lKTEVBbFZOTXNocU5VYngyaWRobGEyUDNHZGZleXJRRG0zYmxXTDJtVEordGV6UTRBRk1pVHJBdXlDb3BhMWVLTi9LN2FKcGpNTU1RY0I3RUdYMWdGZEZDNTZGUlE4bGVHN0pTeEh0VXZ0Z2VWT2xEbWxYYk9VaUE0TE1qTkluQkJkaGNQYUlCWnRtM21CWklYSDEyOE4vZ0lDQWdJQ0FnSUR4L2I3R1A3ZnJndjgzcmQvWjl0VCt6N2hUOXYwdFArMzdHYjluMnBYKzM2WXo5dmROK3owUi96ZW4vbSszMlUvNGZhcDc5dlpIZlo5a3YrLzdaYjluMGt1L2I5b1grejdVei9oOU1iZlYyOGZzOUJ5KzNxWTRmMit1MyszNnpUL1oxYmZzK3V2L00rd1kvYjlERi90K3NJdnAvWEVmN2ZvZzc2dXpPK24zSVgxZEhZRG5WdUNEUUpXV3Q0b1VCS1NJd3pqYy94MnJEdGs4eGVZNEFNVlBGbjRMRHpEWThLVG94dFluaWRLV2crQ1VSbmluZ2tod28xNG5vaVFkVUdUQkk1WDJaRTJhVkFTVzZuZjJ0dFFVSk1MQWNjdDlidmRBeThKd2MwRUgyTU84Wm9kQVZsOXJZUzJwa3pJb2ptVXJPL0lQVjZhOTM2Y0RKTGlFT0ViVXZJTm4wQytlUEl0dnJmVWZ6MlBjVzIxMkVuM29qTGdNV2ZLbVhjcWZtY29LalpZMHdURC9KeDA5SWdVYkhabUpmMy9ZMG1USjFBOFN6dnpxZHIxc3VFNlZaaTNVVnJxTmJOUUhpYjFTaytpc0NRYmNYcGV0eWpUVHo2b2lBYnRsMU83VExBaStTRzVTZm1JWDZOM0J6KzlQYVFSOVVnbzc1L3FrcmlheVlDbVpmNktoWmcvRU5XRmJVWVhtYUJVL1QxRWJiZDRLa3NYQ0ZXd1BmMHE1WjBJb291VENZaUhwcTVVOFVUVXVWejd6YkkzdDFiYWd3ZlFubUI3WEhXRU92N0kwM2pPTzJhWk56cVdhQ2U2emNIRWFLc2x2OTFyZ1JZYlp3YTJaWkt4YlFJUjE2eXkzWnYxWW55ZHhOdjlRZDhrSW93enkwZmlodUdqSEJ4bzVLbndGeEJEOEtQcUlkOUYwWlVJUlFoaXBSODNseUdZc0pTM3h2cDFNTThxSWpRb3IxRk1YdTQrekpsQ2ZsRmM0dEFmZEEzMjZkc0hIRy9IeTRvSmdhY2ttNlFaZzZ1dHFWVkprL1hUL09BWGpKNzJRRmZRNDZjVGNFRU1pOXdVYnBNTVhZK003dVdyZWdLV00vamR1K2xhT1JjZS9CRTNnZEVIUDRJcmhFQVFiK3ptcHduL2VudENjUXZCVWJnMnVvVWw1b0ZtOVpmbGFkMm1OME93NHVQcXIrN015TWljSXJzakpORHVBV0swVGF3QXk2RDVuekZFblhraUhteFZZSUU3NmhxV0ZCTHZKMHNKUTdCc2JQTkJJMjJySlBPNnkrdFo0Nks5MFEyMStZM0tvektWUTFNTm54RmdSN1Qwc0gxOTNEajBDa25TWEZhaHVmalp2WEl2aEhjY05UTHJwMTlQdTBiOGNFVk5xZU9ka3JwSlR2THJ1T1U2R0Fxbk42V0ZlYnI0dk40VGllVVp5K3YyYzhrSVhrTGYwYUd5ZXVyRktORVBINnFiZGNybldYeFAxNkJ0N2pnWURHSkdFSUZiSyt3aEtJcXltcGttWjlFQ0htWjJBNk81amdFcEpDQzkvYjJ6Mms5VUNXWktPYlpsZWYwN0ZrRUM0MlFMUEdkd2h4bnBRc0VDMk5BL2U1R1VtdTF0eGN4L1FwVndKNklpSEF1TUdzUkNxSDl4VllSa0RsakVnSXBqMTYrQk9aN3VEZmFvOUlTajUxUWN4UjZUZ0dveGR3QlVHV21Ld3lOTnVnd1Z1bVBVd3J3MUh1TzVjRkdVTnE5cTE0TWM2a3FZZ0ZBVG1reEpJNWZ3STZkOW1lMnc3cVNxblJTUXE3TTIxemEybEszZWs1MTZQeldPcWpUWlFkRHRSYmNnbkRGMUQzL0FPcEZ2bG1mbENNS1NMSUE0cGFkRzRFczdQRU13Nno4RGRLZm1KMU5tczhlZE9LMmVHWUp4NXY2dlNhdEd6UXZXL3Qrb3RjV0JKK0dLdjFnU2doVWNVUldhbERRNFhiNERvUmFjK3dFM0phNTdja3kyaW1TMzVpNXNZV0J1RFBiMTRSWDhUM01SNDBqKzRYbnVZZXNHUU1KNnhFSjRudmZ5S2xBeEFJeVRmWS82VE8zM3VFNm5pQnVyYnFzMzYyNHQzVEVxbHFIak5GWkZlUEM5U2hZdlk2ODBlc01VeDJpUk9UQlAwWnRzcGhVaWtMd2ExbFJYbUNrS0VWcVdXcm1sT1RpZWtUcllpb29iT09jOURwKzU5STJ3N2pOd3Rpc0tpcTVrTnRHM1JtSjNqbG5mQmEraTZ3bnNvandiYkRCa2xUUFpISU51M094aExyTDRkR3g5QU5OUWNkVjlSaWo0N3EvdGZtZVhCS01IYlp6S0hJUUF2YjlhaUJiTDl0ZG81NCtZY3BWNUF6V0l0cnNkTnhTN0k5eU1abmVzTENSTDZ5dVBNRHBsZjlVVGhqNkJXUXVWdERGTnFHMG1VNGp0YW5nSm9EeDBSNzMvRUNSbFlnbXk3T2U4elZwSlhNbU9yUmVCTy9MMFdoUUt4b3l4QWYxNDZGdFFDcWRNbWYwY21oSGJ5Uk9hb3NvVUpmY1lNekV2Y0xjY1hveUh4SWZORWt2aE9lcngvVWszL1pOaWoyWFNRM01rajArRlMrYkgxbThOR1FDSTZvejNJcTRsUHlNZ1dyL2t2bS9hRkNCWm80MFNOaTJOUEdMTE5OTHVwZEpnNVJvWDR2QU8wZlNmUm56UHEyMkNpbGtRekZIV0ZySXlXWkxuOEIxQ284ZGUyMTRSZUJqVTV3eXFoQ0w5WnFlSlFISzEwbkRzWlpYdWNXYkhleExzS3RqcE0wY1pBKzlOSmEycTAzRUo1cmJZTkxRRE1jMC9leW9MeFFWTnpWcndicVRwT3gvQi9yWUpwV1psa1lqSlpKQzJySzdHWVh3ekt1eGhTZ2JKdFlsbWtTajFPdGM0YldFaFZ5anVkekhFUTZkUXZ0NFhodFVpL1drREh6OXIybTBJUXo2L0lGc0hxRmlPYlFqaVltYkt1NHM1cEliUFgxc01Ta0FjN0cwUXJiZ2lNYWVMRDBqUG50UUh5L1pEUnorZDdFanRtU2tGTXBHR1pjRTBMNnNzSEdSdHF6SCtuSmNsQk1kcTVOa0wvZXJ0bUFZb3FCOUlMNXZFL0Y5SnczakRVamV2akVZK0puTlhXQjVtMXp2Ry9tdk9lOVpRekJublREM0sxTjJUNHNBaU5LMUdVQ3hOcFRLaHJDVXlUYTJzRStUSHhoem5FVjRCajhSZFhpM0pqUFJ1SS9jVDNVbmFVT1p1UHRNbEUzYlJpcWdzNHdmRG93eVgzb0tZeXNiUmowYzVCOGVHYXBCNlRFNFFZR2lUT2NweFZaM2MxVTZnNnhrMmxDV1NhcWplNmhCWEZJWXNqSWl4M1pHZTFwN2hvaFhNYTllNStObXBobmk3TGVWdFhESk45OE45a1FiekV3M0RpK2RTZHBLS0ovd1NUOFZPTldtVVdPVzcyWE5vN3UrTlZHUDgwbmQ3RVhtbHI0bzVjbmErQU1mOUs2Skd1bEpyTEdwWUVIODA3dDdiNC9PeDBMaHlGcjhJYTI3eFRxTGN4QXViL2dVMzBmbjlWV205bW1EbHR2ZXdlREMyanJ5OWZvOWtGZmJvbEdIZGxiQzJnaDV1dnVkRjNFWW4rTEI4dUIvdm50ODV6SGtHMFFsdW84Q0hLaThVeGxiS2dqWVlqellWWGJrbW55YXVVeEhRcGtxYTFjZ1pWQXRwbXl1a21FdUJjekg1TnpJSjRiMjZDdGVPRTFWaGQwUXJ0cUdFWEZpT3NFKzd5STR5bG1JdDY3ZG81SXphRGttYWtXZ3cwTGVCNVd6YXhkb0pmV3RLNGZocFF6c2FueUZqTjVzWmIrTVN2aUJRQ1Q5ck56TzJ3UGg5T1ljZkx0YWhGd25mYTFPREdvc1IvNUlCbHZlY0E5dzR1SHgzTk9vRG1sU1lDRkdHWjIzbEd1SHpONVl1eWNHcXczSEFrQUVpR0JsS2ZwNjJYeTNJSFZKM3BOWW5uMzMxTnhuNHdJMmZubmxaRWVpVFVCVGxxSFdINHh2R1pleW5QTEZEK0NXdmJYZXd5RHBBWHJja1Y4a0hKRkJCc3JuY242U2JZejZFMTNFOHFzcUtJditVVjVFU3hZVEpWNVN5SEhTT1RLNWkwWDNQMDVJMTFZM05iOVhVU214UXBEZjVIcUQyMkJaejIvS3JHVzR0NWROS0RSb2V3K2g1KzBSYnhvOElCSk5lMkJ6SW5sSXpyaVc0Y1pEU2s1Vkdiait2V0xYWEluclY4aE9ZNzZYd1lWUFh1MC92eThWUzJqVnUrNHNqUEJxMUlwMERuZlBIem56SlgvMVdJdndXLzh1bmdBQTcxcWRySFV0NmFHZThCL2ZwanZmZC9PWUtpaHRuR3UwbXRUQkpnZEZnWE9KdzJidWF0UDBXekc4bk5CeE9VUHdZMGRQd0J4VTQ2OHlBQjhKS3k1Y25zeW84YUFvTXk5T2duQjdLUmpJQWovblVuSWloMVVGY2NQTWVucG9pWXZsZU04WGI4RnJWMlBPRXVKN0lKYW1sVVN6eDhkcmR2Ri9QbjU3alNNQk52dW1kMFhaLzR4alE2K2RkYnVFa0xkVUdSc1N4SEFIQlpiVjQycUdvMTJvMFE0em9Cekc4WmhJTHpDVEg0ZnIzejBTeTJpM1V4N2NqUEx0THZJbU9xR01WVzIvTm5wQWpCODBRZnIrOFdkZUNmMVJKaEFvWTlpWVNVemNxNTdiczd2RFFxQm1PMC95aWNIRkYrV1M5T1FNQzJVR3N6aERPQ1ljU1lxcXNTd3NwbmhROE10SWNRaXkvRWdHY1BlcTdkandOTjV6dStzc2MyMU92NkZ2bVliQ3dIY1dielNwdk9GRU83SVRoY0NMV1dXSU1RT3orTVFPM3k3WndpempPSVpDK2FHcEkyRUZEWEIrV3BZOWRvdnFTajV6dHpiMEZheFVJS3puMkEzNGNNR2FsQ1NsMklubTNrK3RpQXowNmFVK0drZHJEWFQ5eVRKd1RGODh3QjY2citqVDUyaHZOVFVibFRRYWE0WDZXQmNDbmZNbEE2c2JrWFVQMXRRVDd0THg4SVNha1g3T09GME01YkR6aGtRajlHL3hNUCtQMVgzRG5iK1YwdWtZTy85R2pwdVhrbG4xNjRka2FuTWNSR2VPYyt1NTBnMUxDVVZlV1B1SldKY0FOSUowcVhua2s1NkNydmUwejFSVnhHUVhmQjJGemZFZVAxNjhSQ2JZb3l6c24xd0dVMWxTSE5GT3pIQytCcXByMFpFSDhKMmFDWjNudEdyUUh4U2dQemtIaExsTFZCWkx6NVFtY05PUSsyZ1hEYlBGQzZZWC8vUk5pUzIwQmg2RE5POW9aQk1sRWh5U09kM0ZSazRHS0hXUVZsZXhHVGFUeFpKRlJFVnR6S2g1c0xTWWVHclhLY3RETTIzYTlIZGZ0VnpKaS9UcEFLSm4zRXhTeStHMTFJV2RjejdDcXRzZXpUUng0c0Y0b2YzcFA1YW1DcGVxZVlrWlBONTJUdVhwTEgyZlhsTzBmeUkzd3RGSDlOOHhudTFkSy90b2F5RXljcGY5TTlxanYwU0lLSHA5ck5sOXVpdVJ0NzJBOFFkSnpqOGNJMHNlZDgybkJFVnE3UEpIQytHZ3plbmk3Q2EwalBwS3pVK1F2NTZSaGRrY3R3VUtzQzhNTWpQakpqMDVUQ21wak5YL3YwZUEwZkRkMU5KTjlIVk82RWFkbFVyTllKL3JibjFRV0JXRHFRUU5HUjhNNWsydFRzRjdRdnFKa1IyNU1JYkZJeWJObXpJc2V4Z0I4eFpVaGdVWWlHNlU1ZXlEVmZqOHo2NGFSN0lqMVYxaHBRVkNPZ0YrUVYzM0RUQ0hrUG9RTzI3d0I5UE1RcFpzdFp1Q2RTUkpRelZQaUpneHFrd3pzNnk2NVVpVWlMVDUyZ1lNRDJDTjlqWU1rTXo3VGhLU2diU3ZjVDZGay9NVVh0ZVYwMGFhSi9pbm5kb1VzNjlRTFNaTFBtb0h6ZEhRdHlDZUpwMHgybWgrK3p0QUpxbUFJeEQ0YU9oMFlaa0YvYUpvbnR4T1V3RWVYc1FLM3Q0ejFRdHFqdVdjUENSb0I3bG5VWjhNLzBMRDlSalp6ZEg2YWU1ZUpKUy9TdFVXQktwNWFQTmdMQk5Ta1pWWUJtckgvaUVOTkUwaDhXYzNhWXc2aWlkSkNnWWJrUzd4d0FhNkVuMDZUSitUd0E2R0RwN2VUU1lyUzFidjNtM1Uwanhyb1pRUENwMmFBeGRoNWN2SjY4SlhoZWRsMndvdDhpT0hRZFRWMkZRck1OeHJFTUgyWkU1engyZFo3RWZNbzBNeDNSUHpna1h4VjU3NS92cnA3dTIyV2hMVTkrRXhlN2FZOFNYRnY5T0pndHRENVgxSDJXQmhZSFNodFlSU2dEc3pvT01hdFhRTlUzbHZ1OTYzUXdpRGZMY1FIYmNuOHYzS2pKNDBBMkdoRm1RaHo1UnVhM1NraWJMWWlXOGJPbDl3dlNqbnVBU3UvZzZZV3RYQlBjM3BNK05rU2FJY0lwSU00RFhnNzdLSjJSSm4vcVgyVFpKakJoOWxwZXRNU0dLM3ZsNWFZS0NsQm1EaGMrUm8xK2Z1cjRWa2l5Zm1Gdno5elNVNTdlaVAzTkdwUit6VWRpZ1lNUVJpZEN3KzF2bkVvdEZPb2padGNGTzQ5VU9UbkFuQjN2c3Y1YnY5eU41QjVubHUxVkdjVUsvbmgwcDBSL3llcEpvOGFPQzh5YitEU29IL3p2aDMrdnN5V3h3VFJOMmtoR1JESGNVVW9odmgzUkpFY2VJTk53SUZmeEhPQkZpb3BjeXVONGlPUTBONjJpK2JncVc1dDMyQWZjaCsrNy96TGJVd1JldnpxVjNIUVNpdTNOL3lvV2hSMUFSODdtOEFtcHEyakFyRzN2U0g1SFFLcGduT1BjdmV2RTQrb3FMdUtUUkpvclB5cGx6bmRiSkFXd2Q3ZTI1dDNRVjRTZWZPa3kvc0E5US9CdHpaYkdZeDNydklYRVJGYXJvT2FhYVg5ZTk5Uk5xYmY4ZGtMbHpTQ0hsNFNJeDhFUEUxc2xoQ3JZL1Vsb216SndLNTRRU0hKdG9UN1VZRnlaZzlrTzV6MHQvcENCNHl4QWtFaTZrSlp6b0t3aHdQWmpEUTdxRVdEVzBrVVZZNHE3NGU4VHhmZDhpWHVETHlzVkVjLzBhcEFtTzE4RW1rd1NRWDdQaUJoQ2N3Zkg3eFhZMlljdmNoRzdjMHowaWh6V1FMcjIwaTdRVDI4c2o5dTEzS0JKNXF3NEtDRG5TTkU3WXhRRkJ3U1MrR095MTQ4eUVsM3JHSFpOaHo0bHA4RHdmUXJrUGJWNFZHWDcrOE5sZDBKUHI4OExrMEFsNC8xWEdPNmVBN2Q0MXBxNHVHR2VxbDc3NGRnS1FrcnZHVlJEWUZ4YmRMWGdqMlJsOUNFUlhKRXJkRC9qVlhmcklYa2xPZzNUSFh2WVZhYzIvMXViblQwTmNRMysvbGprMFlVVkVjWWpoTmRqWkNoSS9aMHpndFJxdzlYTXh1L0c3Y3czcmZLdzQ2bmFDaHNIZzNtWUVSayt4SG92NVVLWHRDY0RRNmdiaFdsaGRhMi9vT09IR0IzUDZBZ1IvaDBTUXpONy9MV2lMcndLUjBDUlk0alBZU2E3cktqVVVERlRvenN2YjZuTUMya3RjMmVLcVZieU9rOFd4MGxKVmw3NC80T1NSY2VHU0JyVnVReTNWSzlZMjJmWXh6WXViV0N2bHBBOXNYZmtkZlpkb3VPVDZDdUdKSUhVNldWZC9KSFJhdTVsWldpc0wxam94Y3NuempnNm1Md3BVR3NOZS9IWGZuZkZOUVJ1VTY5VHFPL1pLWmRLK2phdmU1N0FjZkpPRkRKNGhNV2tZbFE0d2FFTEpKZUthUGE4VVRZUkxVOFlqaWhXVlk2d2VhSmlaZS9oK2Y4VW1CQjlWTEhhL2gzdWhLTi8wV2V6Qko4aFVuVGxma3VRcVVoNGJyeEtvL0lBcHJvRVFkQlJNMWJDZGxtRUF2R0c2WlFVYmpjaWJyRlBQc1IySE9XemFWR2pJQURKVlBjNzd0NXJOTTRKNVc0ZXh0SkF2clZ6TWhBajMyaXpSUmIyOHRFSUxGaGZzVG1CT2FneHpsK2JEUHpPcXhtSGdvWFRHM2hGMXJuMFBJMnZKdjVHYTdBSzhIdVVJcS9GNzVOVlRyRWxHelN4V2RlaVJ6T3FQY1lyQ3BzNDA2Nm1iLzZnSHNpSWdnbzgwZVF6OTQrQXpXaXNMdkxwcHd5MThiNkVhMTFRc3FZZndIQUxscUl1UHpPeUF3NFprT0RoNE02RGtLRTA2VFB6Y0Rud1gvaDRpTElJcjdyVzJEK1RzekZ3QURvSUZmT1NYRzZDTUJmaEM1K3JmMC9Hdm9NZFphaHNiUFdVM3orWU14aHFGaVU1di8yQXZhRFVUU2JSTlIzY0c1eEd2RlA2RVRPSmVxQ3hxQ1piK2xZczNIY0ZnL0N5WHVERkdZSTVuSk1wWFltQ0lTMENSL1kyc2dsbHgybUtzaW9VOWYzeHhrb1BVV0J0a2l2L1EyUXd4cWRqaFZ1UWRXZ2N6RlFTOG01S1YzZHpTUGwyVkZWOGpIdTFESzJMYlA0TkZOUkZFaEJrUTdONEh1b1FNWDhiV1Q2RUlEc0tIazVtbjNmTGwxUTdoNEdmK3pidWljZTVOUDErNWw3bnl6MEU3T2MzTWJQK1JXazQ5b1dyR0FvZmZPd0ZING0wSGhQZUVpY2lZdE9BU1BYQ0tsakRWZkloaHNlMkwzV1NycC90WlFrTmtrNkcrMytPTlBTZ3BnNEF0WWU0bXloUHRaai9GSzJOZEVaZmVzRjhKT25iQ2xmdStoK1VKNml0YlkrSVliRnpVckZGQnZ5cnRUdmhhdG45S0V0ZWxxZVBqVG91cWJNTlVnNmNFWGlhbzB5SmVpa3p6V1FWdDQ2cmlwcmRHWitLNkNSbmx1ZVNVd2ZxcG1UMjYrN3VoREJsUkF2NEJjYndBWEMxdkx2RlBHUi90bysxamZCa2FzQ3FwT1lvZjZob0VLZlpETDlRcXdQZUhOMytPTXlVeUVKWXpKUi9HUTYwSGJCY2FQMGtrRGpucjFsNmxvbFNtTk0vd3ZqVWg3NEhoMjA1TFJnenk5UFc4WW5nZDgyZUhnWDEwZk96R05GTHBhc2xSUWtHZ25DdnBOK3l4UTROaTZwZGYrcU9OMVRPdWJJWkpwcS9ScEFyNVlUd25SZ1NCRVd2ZTgvb2N6YmYvMHNySkM1NnUwYmJKNHlZWDlFSk5MRnUxZzhnNXpieGowRTFlVk1FdHh6OTNZaEJhdFhFaHRjK3JsQ2RFNE45QVkyRTNSczhMSkVtd2pIN05xQVJNdTZ0YjF5UWNOWHpCKzVBY3NXTExYamdhNkQ0SmZGeFlLT1QrQStmNUNGL0dUTFNGYW1iQ0ltWlFuR2JING81WmZadEozaW9JZW85dThwTHYxTHg0N2M2L3JrY1d6RnVWU09NT2l1ZDdzLy9KSVYvS3dMR0p2VnpTTEJXY0pRemQydmtHd1AyQW1oVm1BOEwxaUgyYlVFQ0E2elFLTTVJVUYwcGFqbGgxT0o0cXVHRjErVDg4L1oyYW4yK0E3OFlmK20yc3ZoOW9lN0VtNHpUSitrRUl5aG8xaGE0M2liUGd2dVFuTG91SmpHcmk5Q3NpQi9iOG5UaGZSMDNOWjh6eHEyNVFacXVMTGFCVXVJWTAzZlZPRlhoc2FLOHNPNzRVSVd6bUlTdUJvamhyTHJ2Wjc5MHpldW8vaW1pYWM3V3RpNVNyZVkrYVc3WlU2ODc5OHRBM3dVcW5abEJGNlhndndDOFB3WnNHM1VGMC9lSy8zYXZTcC92MTNIRUY4RFNvOUt2YVZBR1ExbUZYVUlKRTRZbzBFUnZKc3VCemthdmxhY25yY1VNRlhKYjR3YVVNTDcvRHdnZWo1cWhDdHVtU1daM2dNRnFaRVFLMHVPdHI3bFhndlZGcThSa3oxMnNGU215Zm9RbmxuZWlicFNLYWNma1ZsWXpMMXRDdXdxdDI0RGNGdmlKV1MwQzlRQ2FzZmNvdkhyaXU1M2YvSGhSUG15bEsrZU1FREg0d0RKdURvakoveHpoUk00bXNBeHpxYjNLVjRlZEpGSnZqcU4zMGVWdGIrQmY5ODRaeXFrV3oyZERUMjdHL3o3Tk5Tc1ZKQVV1aUprWVF6VWFCck1HL0FoTDcyNnFZbUlJLzJlQWVwbTNZdTFQV3pDMVBoZWFjVkVXc3p0VFlMd1hlbkNPRXdCMDhTTGlRSnUxdnY4MkJNTUFFcVpyajBSVExpZ203OVpDZXJWWFhWbHFyMGNRdWJJTm9HY0lySWIwUncrY1kyRTE4TmNPd1pwNWRndTJ4VndiaE5sY3YxaU95TTJmWlFVVEVWQzBmampFNlZDZHlyeTRLVTV0eXVkNnF0cXp6bXViNHNXZUFKMGxoZkd2dUFvMW9yL3NuTjJRbmtveE4zTC9PYlpRU2s5cGhEWVAybFU2KzE1UUQrVkZSekpsbE00N1FHNVRTRGVmYVV1VnBsb2RrQ3hEa0toRy9HSWlCSmYxMUlZL1d5YkloMEptT2ZyVjBaZ3R6ZE92cHowNFBaYUk5Y1JJeEVWNlY4OGUveEhKbzlDdnNjd29aa3VmRHNSOWd3SHdhajg1MGE5SExxMmZvOWRxeHoyZmFtTjRkUVNqMXZuOGdzQWpjdFB2bzVjaE1CQUgzQmE4ejdlMFd3R2xkWmhOcEdlN0ZkVnJDWmtlUzNYMEJoUkNKYlJZaTF5UExEZnB1aWQ1dW5vUWE5blg4Z3R1VXRaVlcxS2NpWmd4Rkw4VWptKzFheHRhdHJaU2R3U01rWFN5ZDhSdjBZaGhxWjQ3US80V1JORVBZbUREV0FCT3JZRVc0SDJzQWR0VXlCdEVxcUdvVFgwODhOQVVlcC9BTUJGUVVpQ2oxV2tLVzluYmtCbURvUHhSQ00zN0lmNUY2djdwc0hBK0l6WVF0Ymp2c3U5NENYaU9XNVZiYmpoT0xDOVgrdWVET1Z3QUlkUlNXK0NTQmJPTjBSK0MvRENhZlIyS3I0QnlrK0VZQXRRZ3p5bW5Sd01sVnpOTGMzYytRUnd6eHlpT0JwZmZlT0tJNlBGNUp5Yi9NaGhXN1h0UGkvODhYMVZCdlFlaWc5ODdOdlRtR3BtRVJmTm5sbTJLUDdVdlUvczZKeTFET1hVZWNyT3d4WkNoTzlCcFBLZXVrbVVHV3BOSnQ1akZNcFprYlVqQU9FU3VxUG00c0F6SklYSmdrNmlLWTN4S1lmWlhkMjRSdjR2Z0lLMWZyaGl6NVl6eVc1bXdOMjlGMlR1a2psbFljZE1ka3BQM0lSbXlqTG9qbGtxMDJwK242TStCMzZvSStOa1JkTUZHZXBZUTVHYmQwWjFjUGc1c0E1Qzh4cjFmOEhkenJRZnhrWHNQZmlJVjVuL3Vmemx3WW9ENTVCSkhSTUYxUS9BcWxDWm4rZWlTRDdpTTMyanp0ZVVSQktRK3pFWnRseHhqbkJ6ajBydVRxVHZXUDJBaTN4TlpqU3ZUMkZzenhEa0Q2Uy9ETXUzSHE3WUF0R3FFS2ZUakR2T1E3VE0xL0xBY1lqYW5qNlMxRHoxQnF6dFlKRkM5SUt3eXJrTUo0VmZUK2o2aWk0WTdDZGY2b3diN25KTVd1TEdsS2U0MCtjbWs1bG1oSjJ3T1JtaDNqQjV1S3krSVhlUXpTUlVrMGZLakNjWGNCMUl5MFVhS3lPK29jU2ZlcytBTFRaNTdKY1NzVDB1bU1RVy9VVUZ2UDBvODFwYzFQTnN4YXVHWFBzN3Y2bHpSRVRNS3Q3WTVmZ1Ryb0NacUc4NFZjUHMwbzgyNDdQVisxOWlTU0FqaEIyWm56aWZOS0hyY0UxQ29VM092UzBJalJtM3lLcFZ3RnRPWVY2V0swMEo0cDMzT0JISmN4V3JiK3o4OGFMRWlVS252b3ZHQ3BXdFNGYzAzUkdZRE15bFlmUXpsK25QMk5pbDMxdHRvekFBOE5YOVBVdEN1ekdDMlhtYmNXam9pMjRDb2liMVJkMG1maFROWm9rWFlKajlnclJRV3lqRXhiejl1eG1nekc0RER3OXNZcVI0MjBaVGR1Y3Y3VGUrcnBEUU1HMFoxODRsTWg5Rjc5RkpKZy9DcTdscVJ4aXp3SXg3b2FEK0dpV3Uyai9aTGU5c3NaWW44eDJMT29MY2pOOGxNWUE5b0lCOVBKOTJ0OFFiZVA4ZWtJRzRvZWgxZXU2SDRBZmRXc0RQUmM2dnhqcEwwUTJIRDFVN1VZTGl6QTNTQmVJOGRMTU1BWXhwRDZQb1k3akFWU1hWdmFOYjRMRkN6eXhUNUczZFkzWjR6QkZpK0NYTm1hZ1BtM2g3d2pRRDZhMVpYSVM4WnpBM0ppU2pzcjdnYkxXd0dlRkNmenh3WGE1OFpXVDM1bmE0S29ldk5kLzZCem5uZzIreGxOc1FOVUJWc3hwdDRkVlJNcFAyaUYxSkM5QjhtMzBHbkZBN3RnbE5BZExUcEt3SjUzemt0N2hJNUxabTRKd0hiL2Z3QlZRZzJ4SXNDclJydW1QZE1mVVpPdkFZYWxIbDVUeW1vUHI0Q3lRTEYzRS8zcEhyOEdSbnNmY21Md3diVDZwTDJoVWlwVHBZZ05RcVhtVkZXV0NyclpjNFJpOHRkeGtnQVBOeVI2c25SRDcvL2VMMlRHNU8zUUoxK09RSzJaVGxrS0xUR05UWDR3b0EzaXpJQnhNcjNVYXNVVkxyZ1AxQVh0Ylc4NzdJZDhrb1pTYnB5UFgzbXJWQkU1YmZ2b29WUW1KVWZLSWdKUHpwVWM1VDFDbk0zelhLajV0UWNLMDF1bmNTK2xTRDB0S2hBYWRwQWlSV2xEMkdGUEhBVElwM1lHdHVybjk0cDNCNlV6VW5mZEVMMEprWFZTVG1vNGNuYTdMTFF3NFY0NFJCbWFlbkRaZ09GYTlGUkNhdktJRFg4U2tuS3hzSkNKMGd0OEFYQ29hK0RYRTVrZmltTkJLRlh0ZSthSHoxM1RBUEV2RzY1N1ZRU3hNUXhKSlhBOWN0enBIemZjWXBQdmRhZWozMUFOTGdZdmsyQVRRWnRLZTBWYjg2UWoxQUduRzViZDZMdFVFZzVOMTFZeVRLZTlDaGwrTmI5WU8zcFdiU2RsRXJLMG9HTUdtTkNQZFg5RXRpcmU2dmNVTEs3VFlnK1NIcHpNcFlaUUdzWUdmVzE4eUQyNDBBa3FLbWYvUGJVVzJxejJJbWN4b0UvNjFuTWVuQ3l5SmZmMGlxdDN3L3NjQ1lUWjM1RTE3TU1xOW42Y2dic0d2VFQ0S3cyNXFqMEwwUE5jd1hQcUQzZ2QvTThNNGpBY1RhUEgwWGpsK1JFQVZxcDdMd0M4ZzVrYTFnWHovQ29KeExveGpQd3ZVR1p6aTl2bmF2MFl0RUpxSjdHMktLanpyTkpDM25vNnJNRVpBT3hjcXJkRVpxSEJNZFNZSGJPM2s4U2h4NlFFRklVWks5ZGM3MllrQ3ZDdEV2TWlhMXlKY3NMMkVacTE2Q2ZvRnREcDBxbXVrZE9uOVI3OGN4R3k3SXhIb25CT1E0T0tuYXV2YXJmeGVpUHpXcm92M2VHRlFmenVTQkUyU3pQbFVlQTJ4dVpxelJ2VS9uNVZ5QUdweE9WcUtIQ2JNS3I0RXM3ZlI3OUhoeFVlYkxUVE1pa3FyL3FHVXZmZ3BjLzluMHpyTTI3bkpvcFhRS2xDa0hpZGY0QnZLaUdsaGVqTDc1SHJLZHhkOXRMU1VzdmczWHk4QlR1bEFkQnU1K0ZxRmlZR1o2UjQ2R3R6ekl4djRES0x2M242MFYyQVN1L3gvaE9tU29IeHFQTC9NOEg3Q1VUYk9jMjdsd1JjSng3eGsrNFFyQURtM0cxUCtjVThmOElOL1dhc05tNXlDNVVUQjBKSE1uMWovK0hkMldBRU9HT1lUL2RWY0tJVmJpdlRMZXFYak5sQjFpSnJheUNvWDZ0TU1oOWRzUWNRQVpieXdWWjArQ3lQalU3NVBFSXAvTnN0NUNyZWhKMTV6U0dwanZqczBvbGxNNytIcUIzTjIzYVJORWtIZXRsdFlkbmhibGNFY2FZUjY1cFd0bTM1b2U3dk1Qd0s4VWZDWk1FRmE4c1hjbUZ1MDU2d0x6eXE0WnhWVGRrSGc0Z3FBS0N3U1pERDZzSEhlcEc5SHAzeTV6aEl5UWxpZkJ0dEpOQnlzL2tmNzltdTRsb01pdzhpUVFCY1hxUDlQbXZTbTVRTDJ0UzMwK2pYNzhPc3Q0RW5XaEN3MWxZTXdBY0VhQW5wM1lMY3lJL09nejVWSDdwd1hFOTRDQlNNaElXYzY0a05GUHZXL2o3WktCUklBTlB2WERaQ2Fpd09hNStsUmprclZNd1ExbGJjYmZWQlFwbE9EQjMrSDB6SkZuVi8yZkJreEFNNWprYm1UV0pkY0JPYTFoanVrQUxzdVlmNDB0NzlheGlUN2hDUm5kaExzUHUrN0VPemt4MlU2WG4zWWFxUE8vclVkdFZMSld5STZOVmVsMU9XNWZVWVRXdTNBa3pVVkZTQ1RoV3N3NGwzaFpUalkyakdVamEreFRuQlNNYXVpWVJvZTJ5YU1LRTNmSTBNTUM4Q015NnFVNHBTUHloaTlhNnl1Z2MvTmdHV0FST0VnSWRJak9MRmhBVEU5aEJPTkVJTDRNVHNEczBsdHN1dVJ0cENzVGRHTVVRbkUyQzhpNWFrNWt4cERKK2llSEVVVGp2Z3RnaXJjMUMxY0x5VVNNMnlTaFYwQThIa2djZVFyUXQ2ZHNNSWs4eWJCRVhsL2hCYjZuZDY4N2dhWXVRNWtlTkpmS0ZkbjdXTUIwQy9aYUl3TkVVRi9IVlBoSTh6bWIybCtPQVJkM09oUWY2Uk5DdWJwY0ZZaWY4MzVpSnA3RUxhTE45ZktHTHdzTk9jWGFWaVQ4Q0V3NUlxbitnK1orc3E2b3BtK3RzNU1jcDE1Z1ZqaHRmTThVS1hLVEt6djQzTUN3clB6djBGWmNzYWdST2dNdlI2YzJqRTlyL2U3anYwVFkydnlTSWZvbUlzVG9wd1NoSTAvTE9jQUs5dk1ReUl2bkNEcGFIblQ2czFOaXcxd2QxM2FJdmszcEpncmpPUjNNSFBpcmJVSjM3akkwMGRhOWkzOERPWVV3S2VXUXZQT2hucHpwL1JUT2RSY1Qrbi84QkxRVU9FNUNKeDNSOVdWVTNpbkxkWCt3U0ozbEczTE5wanNkY0pvSzU3YWpIZE9DYTNnMGNTZGF3V3AwSXlzRHZoVWsrVlZnMW5pRVpqVUZyZjNtWnNtVTJvMmdsMFZORDVHKzNNR1QvV0NZYWZtdW5abldwTEMrcEtxUjRneWpQTTYrNm5XOVNkZ1JvODFEL2JjS0JRUVVGSnZZd1hWb1g4VUttNzRWMTdaNmlEc0M1dVRzZGIwQ1dlUHNkbXAvNEptSWVROHRvSjFrRE5rZEQ0QVNucUVrM2twaG5OZEhaWkJLOGo0WjU4RnRqem1UclZmZ1hxUjlUNnNHSWI3V3BTdkdYK0FJMmJPVzQxMGZRVWNjUnRUcFFOVzl2VU1WblhISXFZT2EwWnBvUlN6T25UM0VlRnZtaWxOanhjb1kva0FMT0F4aEk1QmV0NVRncXkyTHRCUGlVYnQwNHhweXU2MjZ6Q3VhbWlQQngzREljMjlocVZITFVYZHZ1U3hLeERNWjRyd3hIWEkrTlc5TlJabUNvelozenFUK2VBYXRvRGM0ak5WTzZWdmdSYzcwdi9xUVBpU20rZE1kY3VzNzVrSzBKOUt1V2d6aTBtODZycVZHekYvcXpXTU1iVDB3TGVqa1U2U2ZoZ3p3ZTB2d3JaMmNyTXMvRlR5NVFjNFlDbysvdTZmdVVpbWZmQ2d6NlRmNExrYTFJdGhkeDJ2REpxeGJja2dWQnhydnRvM0c3dWsvdVh2ZVVKM2V1OWZGa3ZMQ2xNUkJ5ZEU2Y2NhaVVPc01DaE9EUlFhQnAvMHVDVG80TXZwMFY2YnN2a0hKNGZhS1RUKzhXbXpOL29mMGk0RGlVUi9uSENPODdMR0Q2VmpmdmtIcUx2LzdiV2ZYZHo5OUY4djIrQXFiQkhPNnhwNWhwYXRkZFZVek1DTlRBMHl1VmZQcFNwL0E1S0FlRGh4N3NxdTBQNFVnVVF4bmxGQmlxZWZkS0drNkdza0RsMXk5STc0cUdKYmdMS3VWVGI5L2NyTlVqMDZCMWgzcTlqaDhyU21xcU02a3dTVW00RkEySHAzdldNbzg1RE5TS1NUbDcwY2wreUpsM2NVZS83bDh4Z1lLWmN1eG5paTRDUGc1Y3B3NTdKVFAvRXRCSW9mbG5QVGc5V3ZBdnQ1c2VzSkhYeFlxM0gyQ1owUWw0eFh3WEM1RDJVaXcrR3YyTGtveERCTzVrNlNTNHAvdTFtNWhFZzJpUEo4TFRxb21pVDlUYlpINTJ4eVhFdGpBRVVab3dlQ0VuMTBXZ094Z05nUDAvdUpaM3BWWUxOdWFkMU9jQW12NUtKQTQ0ajFIWDFHQkd0dEYzN1BTRnFPYzc4ejkvYVI1bFJrNUhTdSsvbTVUY3V1VXo2NXRFbkFaeTA0TW5DTjAwd3d3eVFoY2gxcURzYjdJYXpUa01xWDdNa0lPN3gzTGJiQldrOVQzS0JId05xR2pKSTJkU1kxNFhBcFhXMDlTc00zTmhSV3RybWVRR1dOMHJGL0RmWEdVQnpPM1ZQcmlLVEVlb3FUVU15U1doQUhPaEF0SkVWZ1dVR2NpckpPMnl4dkU4UXliMEx3a0ZhMEJlaFp1RHdlMTBUTVlPRHZuckdMcC9uUFhpZ3FzUmQ1QWNlUWVieXF3MXFkQ0ZlcFdSWDhkZDl2dXBueUs5dFo4UDRmQmlldjdyZXFHTG9MZFRwekk1YXJwb1ArREFWalZSWGhiN3NrbENjUStaZUdsQXlBWnFQMEU0bUNkc2NxYitUa1RZVm8wVWZscG9UbmZNNXhHNjgxWXVqMTdlNnBHUU1CTHN6SC9Ub1RLVlAyWEZqOUFvcy83aDZSeUpjcUFjd3FsYWFxSGwyc0VTc1JSQkcrOUhUUVRkRGEyR1lFWkVQSmwrY2NGaUxnQ25aclNMQ095WVBDaTAvRWovVWR0cVVVczZUcFhPYW1nbjBoWjB5SkQ4NHh3RzMrZFJkaEV5NmVuNTlvU0c0SGlKczV6UUd2ZTNRNVNsbEdlNU8zdUFZcmlxdExoV21VZFM5dkEzNU0wNlpTcG5WTGVMeG54aTVpMzY0ay95eTVGc2hLbkxhVGM2TEYwWXowL0xib2NDZWhWSkxOYndiSk1jVEtSOWxlVzF3SHVhdWFkMUp2NHUwOGlUKzFDckY1MGRQNjVVVEVuTWxzYmdvYnpobWEyVFRWazM5SStreWpTWWtzZ1JPM0JCUDdDY3JKTGhmYjEydDE4ZmdRYkY3cVFIYmZSMzZhVHBVQ2NQSkh5OTZ0S1lwM1J3YUhCNk5ma0pseG1tNUk5dEoxb2ZTZU9sK1VLMm9HYnFuODMzR1R6L1FPNVQyRjBmd0JjSjdvWWhoc0VwNHp2OHMzU1BacSsxZFo3OFc4RzRiL0JnRkdMSUVQZWo1UVNDOHBQdEQ2NnR1ZDZxRzVERVhYbmlaY25KRVlWR3B5elVQMDFUdFN4SzVNKzdmaFYzQUtrdmg1Lys0SEtVMXNkQlVsZzAyTVNTdDUvNU1HQ2lucElZMERXendpYVdYOU1wTUQyT3VTdXk3clZYZUh6ZWVmRzNsdWl3Y2ErcTJyM0xFTE43USt6NkVOcTZLMDg3K0hzZm10WEJUcVIyNFBwbEVGTmFPMVh3VW42c2Z3aDU4L2RKbCtnbmkwaVBRS1JwazU3dW8vR2tRUGhLb0hEU09wMm1KUjZOT0Jzc0tIcmxHT05aQVV1cTZzb0p4TjFhSlRsYk5uZkN4SGhlRGI0S29jL1ZXTGhocEJLY1gxMmpTaHlZU1VMMzRSTTVxa1pGWWpBdUViUmluc20rR1VoOFhHM0NRTks1OVVNTEJiNEVhY1Y4bXJSaG1Hb1RFTzV1RWxLVzFMd2tJQUczZ0VPSFdGdXgxTm1YenRxelhuYTZ6K3FtdlhqeWk3N21wL1c5YzQ4ZDYwRlR4UjFKTlRQNjNaSTNDV21zWGZVUTlJdlF3VE1jWkEzbG8rQkJTQkFVeUthYmdxc1Z6amNOd2MyZnNXa1ZlVHFNTVRrTUdDcUF5L1c5bmlkOCt3eTFBd0QxS0Z5UXFuSkJQUWd3OWMzRmZRUkR5d0ZLTjl6bDdaeFhSaDlxVmVuSTNwUkpoSWI0Nm8vVDRubkwxcnE3d2F5U3RDYm9tem8xa0krdFJ3dWZBUTQvdDFJamlidEhaeFlBWWYzcXMxVURBNXR6U3VxRUFWUGx3QlRGckE3WGFyNWhIT3N5dlRXVU0yczI2a2xZeUpEaFZZdTR5Qk15Tkk1ZXZpUVk1VC9EZkpWRkFwMUZHc3l3anhIN2x2VHd6T1o3R0hUbnRyajJXTlNjRnJIV0RFM2M5K3o3WXNTbWwxcEtMS1pBVitQL2ZxdnNGT2IrUEpGVU90S2VVcktUUEFqczdKakVmWlIvK3pxNDNoSi9WdDN4SlBMbHduZXMxUm1MdXpQdXJZSHE4dmlaMzVPbDNEZnIwd0xENTA1RWdZV0hPM3gxenlJcjJmaXU2REVHR3RXTHZoK01jMFhxbTNOQVo1QmczamdlSHNKSTUxV0pzZEhPRUhNc2piYzZneEZXVWdFZGthVzZjMy9Ldk1OdWlPOU4yV3FVYzE2aDRvQVMzRy9YRlJEVC9lY1NFUHplOEVMSkVsQVFvVWMzemtlMFZaMGVyZFExY1NpZFFUUnl5aUdBM1JoTkRyaVVkZXdRU3BiUGIvc2VYUHBnL0E3SGNxTnBSdkxOZ3Q1RnZBVzR5R0pHTzNjZHQxVEtUNXBOQ2VGUno5aWJPQm5yaHFCREpNOXVLTVpGL3hTNEljbUZnR2JTcE51NjhFYnRFeTFqRmJVWCtjS1hxdEcyZ0hkUjkzaEpOcDRXWC9OR0diWWJrM3lXYTFRNURsbC9DUnl5anUyLzJXdEJjTm5yaXQ0K3AwOGlQcFQyckRaSllJT056Q2Zva0dTOUp4bHpic1d3VFJlQVBvaDhjWGV5VGRyRmhNK3Mvb3c4RHJib0lzVjRyektvSW04SXFqbm1pMlcwT2tyaVIwVEhwRDZoZXlMcG9rMzB2ajJRNmdETHA3UVArVDlTM3FUbXVaUWxmRFlaWTU4VUdOaDBGZjVtdk9FbXFta2hpNThMdE1rOEFCWjhDdWsrMVdYNkhOWmJvU0FSellkUktWRWxOT2RIVk1OMm5vS0dTREp2cHJkTEtSMGp4aVBHb2tXV2V1SUtmNko1VXFTWTlVSXNzU0swUFJ0eXBTRjVYeXlsWVQzWGQxQ1FQbUFOOHRoaGNtODUxeFRLbnRVbUx0NXd2WGE5VzlEdzUxVHM0L0tKVSthM3RoUFBrTnkwTjcvUFJDYTcvM1kxWmZyMktBalRXR1pxVXdsQjcxRlZBajdURFlXMjIyL1pKTytKcGVYdWs3TmpKSDJXOUZLWnhrTHhoL3NES2Z0WFRuK2Q3a0tIeDlyMUtoOFk3UUwyMDB1MklKTmJxcnpycE5xS3BCR1NXcW1SZDUzcjlMYlo2ekU4N05oMGlsd2NQaUovbGprdzk2VzdybkNNWTNnWEJveWZJeEYyMzFpRGJweEp2VW13RjhMalR1WFlyVVQ0WjhzTzljaUQ5aXMxVzlaNTRBYkczd1BtWVZ4RkEzcWE3a0ZNQS9TVlB0dDFUMWc2d3BTRmQyRndxc3BoYWxWdlpteFJwVjJsZEpwdTdCTXR3TTMwUGoveU94Mkh3SUg3YVBLUW1jMEZNTWMzYkVxVW1DWWp4d0EzT2MwY0NaZTRlSmE2VDlaaTdtbmhRWUU2QlV5YnYvZnRoZW1makhjcUJUTzlrQUthVlVabjBINnFQNHRZQWhRQVhJRUVMaGwxUlF1ekFaMFVSY3FUMUgzYXl1d05TQkN5clBYWnBneU5EdW9RbVJ6MC9DV1ZTSkxaWnVnOTVZNGRzRC9ucHZuY1B0V05GaWxEZnhXQnJXSHFVbUlCcS9RUTFmUE1qRWpsSDV0UjJORUpmMXdnbXpBZ042Smp3eU5aelJuT0p2aU0reHUyL3p3YVpIdThUazRCaXJmOU9WclRCanVyU1d5WlVJY1J1TTlEM0FuTGdBaFArMXhVRjJMSWhmazZGUkZzd0xOQk5Mb05VQ3ZNbUgrWkF0cVF4Y3VoOWZQQ2pDMXAwdW9HaUdrT0N6d2Z2SE5OaHRsSkh6VGMxZ2hhZkpIVklBMlo3U1YrQVhrUWtEbkpBajBXbXdmRzVINDFNTS9WN2RqTUEydWl6TXlYaUJ4cFFBazhVTFMrbm9CQWdxVkIwVmNRQ3pDWG1FRk1kYWpST0tiOFNHV0p5QnErdWc3RGJKekpZUXRwc1E3Ujd3aEtxaVdBM09YTDJXYTBGWFBHV2Fxa1VTbGRHTlJsMmZiTGdFVlU0V2xRaHRxcG4wVzZ2RDgrdVVkdEpHMCt6cVpYWFpDRnZpcHE3SGlpRHNNYVJzVE1XTTZNc0ZMUnpFSjFqbjZKTzhWWjhYQzJFcFpOSDRDVjYwclRLZlRMOTNuQzYxNFRKZUVBNnNjSkw1TzBZODBweVVHeitWYm50N1VnTVV1WnZJcDRWWnp0RWFIZ3RBYUNyQ0JWalFJY2F5ZzlaZkd4SmpaWUtYekJQTkczVmlWZDlEcjRRZ1NwTnVQOEkzc3J1YWdKT2hkS3RxcXhtSEpiZEZYRCtlUmNwanZCdlZ0UHB2ZEVjOXV3Q0E5V2FWRSt6bHNzR1RiYkYwK2FSZnY5WlA3WW14RGQ1SGZyVHlnbVg3M1FUTnpNeDBIWE1XVGtyZHQ1RDhlUjBhUytMUkdMMEtvQ1FFcit3QlNTUlNYczB1cytYYWtCK0pydkhmVmVORWpxaEw4U2FKMVZXYTM0MWQrUmtYc2FNVE82ZXd3QjVYNVdGR2lRTWlSZjBkVHd1eWpYclhCZ2xKL1FxczBiUjhWMzA0MWN0YWtaeGMyOXNrd2ZUaGhqem1QbjRDaEgyNHRqVjZBbEkyaGcxVm1WMitSUFg4cGVXZkRaNCtRYUlIc1ppT2hKZnNNbHp6QkMwY3lmRXBFa0N3U2xHQVFXUXQrSldLYXJKVmhtcHZnS1Btd0ZTK0hpNzBtRmQ5eFVXSUtrZFoyM1VCWkJIZTVsd1N1Q0NodFI4aVgyV2FHTUFWYitKMERmcUQwZC8zdjROSXg0THQ5N3NvTGZNbkpLTDlqbExCRzlWczBGTEJvREpSU0tWN3hDK1NSOWVvQ29HK0libmVuQ2ZaUllrdlI4bmZTMW5aQmI2VnBUelZVb2pQcmljZUpiUHQ0NHB1RXdTdUsyL3J0MTV0MGZZdG9zVFIvZU5LNTI2RFNKVjFyaFRHR3ZuWDFqTUM5WVNHNi9DblI2elRRK3lyd25sTTBjeE9RRnRUR3VraFRDR2R6MGJTclNCNXFJR2V4Y3hRRGhrMytRcytLQWN5THBIWEMwSGlBSnZSZGlTSjJMd2I3dDdlMDhzREdyQ2I1MFN2UVNQNTBtK3VFeEJVNjF4L3A0bVFFc2JHK0ZDZEt5REtrOU8vYWRLMnZIVXI5WWdxajRuMHh5b1RzNHBJdUtVOHhMYm1uUjQ0M2Vwa212a1ZwaWV2SGdDaWtHSUVHZHU4WGd6NXBmN1F3UzZIeENzRFlwM2xPeGsxYUZUa3J0RzJkUmI2dHhHUVpqUlljT2YrYlQ5VG5ET1drcldhVmM3UnJLMDNHaW5UQlJENGN6ZjRuQkFjbHRNa0JHV2NzanZPa3I3SEZ5VHI1QVhhbVpJMTRtVG5naVhJakdHbTN5T3oyZHZ3aTRrVHg0a2E3Rmw4VVV2SThrU1RNNUJEeDJIMHBrM05BdEMvZk9mdTVia1M1Mkh3ZGlBR0VKM1ErOTV6Q1VLNDJGeTUreXloRDUrek4ySDQ3UDhkdnloU2VHREx5cTI4QWxPbHI2b3lrQmZwTWZVejg3L3JlcGtaV0hWY0xoaTNYQmRSOXJmUlA3WWVRVlBtU2FiMUFyWHhoL2VTbVR5YVZEZkQ1U01VdGlPeVpVTDRCVCtEbmorT2pNL3oxTmFUUjM0eXBNZWo1VUMwaEZ3L2xlTEZFK3pBdVBocGRNQkhSQzFOa1M4V21rbnBYSmptUkV1Q0JtNlppWDdqOVhwSURlZUk0OCtRNHhuZmRqalQ2K2k5Sm1IVUtwOHgxN1JMS0Q4dDAwcHl3d1BRZUplbXYzZk5PZ2Q4K3NxNVVsdFJvMHJxYzliVlVKeUNyUUNOSnJUUXQ0RG9RVXEzbnQ4WXhkaGZyK3VXcDJRbkUxM1lFdnUxa2FVREcwN096WERjVzBkcno2OEt6dVNTeU1sN0ZKWUpCSXY5eW1XS2lpWFNsZFNSazgvZUczaGoyVEVSUkRnSS9aMUxLc0RxSS8yYVR6Sk9HWUFTamxqZUpENXdDeFB4N2IrVmx5dUp0cFN3c2l6eTROZlp5bFZIRkk3R3oyUVZFUC9YVE9TNGx0S1RFZzZuMVMwZUJZY3NWSmVUUEk5WEpMcEZSeFhKNmhhNGNWa1hLOG5taW9WM054V2FJc0wySVJsVTdTRGE5MFhwOEhnam1FZmZHOFo4RFEveW8wbm1JT25kcXRCMk5ZVjBTTXZPSWRyZHdWWjBxS2QyaEZqNHhVWGpYTUduN2RpYVhHVlJ3VUVtRU96dXN4eHZISUtBZzFWRFliRGV5dStlbnBRdGgrU0ZmRXFPVDlnM0Y2Z0NUUHVTUlF3bi9lYmlYc09sK2V4aDF6VllvYlVrMGxBWGxUZDJOK0RTSFdzemxuakNlRE5IV3hqNXY4c250WE1SY3Y1SmxpbHBuUU1ib3hyUnRnWFhlc2tTSTlrN3pvTW9VU0R6TnFrTmMzTUlHU0k2WXRuV0RFby9LeFZlSjJrN05lTmh3K203eGkwTlJxbDdVWWo1TUg3RFgwbkRuTzVtSzlwNGlFRERoamNhRzNqWmxEOWR5VkhTRXA3SnpUNWorV0hONVZwSGovRzBEa0RLUlF0Nm92YVlXTGtxVzhIVzM1T0QwSm5PaUR5Vm9lbWZZcGtBVEdDTEZPWnRKWXhJUWJ5Nnk3OEZ1aFhGQ21nY1BaczZCdUZOOEUrVXVLUnhqK0c0bGlINkhodkhtREEvWXNOeEZsdktvUDhqazdvdFpUbStjckoxK2VsdVpsU3RuQW8vTUN0dE5HMkNZVkZjMHdEQW1MMVVvcjNiQ3dhS2VLbDVFU2R2V1NYTlJUKy9VOUFUeGdEWlBxMjJPQ1Q2emtDYXpyeVAyZnBLcmlaWDMvZHJiNFY3THlQYzRWODVVeFZ4MHhlMTRURDRlMkZkS1h6TW9PeGZwK3FGcituanZqWnVvQ2d6K3BoSXByYlovWXlsNHg5WkwzR0JkMFZmYThhUzg5NU04Z2NOU2hKNTN1N3RMdGRqejBGNGFFUjRFTnBKd1plSEtGYktnZThUSmgzTit2RmE3eWdaaTVCbll6MnIrV0IyUmV6SmUvTzcyRi95TWJmL3RuenN0ZExGNHdtOWFxcm5iNGZkZU1vNUhEVDNtZEhmVnUzK3h5aTZtUmIwUHVYUzUyQU1hSndSZTM5RFNZK3JTYklvcmQ1Nzcrdk5xMEE5VHZJUVMxME1VbjF3ZHl3bVU1QVZpZmIwR0pHdC9ZaUNPZEN4QjBZSE8zUzlHMnkvU2kxcjVha2JmdjRWbjl0b1FvcFh6Z213ZWZMeFE1QXFVazZpRFNtckhsMWN0MWFMQVRPdXIwVXcwQ2pxL1ppRDlhdHVXNFd6Qk9DWGpONHp4eS8zSFNsMzZaTmpla202QzFXWGVtNHlWenI3M3QwM3NIakpTRW9xMG1sUU5VcWRiZ1VXTWtUb1FwVG5HSzh0MFdEK0NCSGc5UmFDc25UcGxsdC9wWHRlMDZYQ3h6M0VZa3UyWlcwUlRpa0t4U1RWLzI4eFY3S1VRYkhEVnR5WWllT0wvcktLTUNkYkRxTStSUHo5V29palEzMUI2aE1vTlJ3bG8reFBudnpRWGdLUmc5bUQ0R2tpamc2RVRIT2Y0c1hDVGk2ZFhsb0phTXJIaW5ld0d4VXM4eEJaT1lMRCtETXBCNXB4MXpyV1huQ3VTS2lPNHhzdS9YSkx3SWtoUEhYcFUraDYwdjFWUnFNZFdtcFNGcEVtb2xWd0xaRHlhV1RUVFVwd0ZBS0Y0WGd6bHpiM3RmOVl3RGRhSjFTZzk0VEZkcVRKem5nT2VjY1JadFlyUkpxai9Yc3ZMN3J6Q0c5aG5nVmJWK2o0MHEvdWZVRVZ6VGtGVjduT1RLWmU0elh5QVE0bFprS0dmTDNTeTR3QTNNTGt2L0xqVkRXWmE5NkxRSmRhZ1FVNFQ0NGtqMnEzaGdsa0RubDBKejRjR3dNejlkQ1hPRzk1cVRNM1VjZDl6ZnVUS094M3VDMlJZYldDcTdQcjMzZ1ltQVNDSW0yelhJQ09UQ1o3Zk1PTGU4Q293aGRIMWRIYnNIMGpveCtJZXpxTnQ4YWUrdGVkdFBqdDR3bWhUSHl0TE12NXc3bW4reWNacmVFS3dGRExyZS9JMWZ4R2UrUm4wbUNiMnFsVnBaaWpyS0dncmswaEd3RzRGOGRvWmFjbWZMSUdlYXlnQnhtQzJpMmlHRDYvNDE0STF0cjB2Nmc4ZWlCa3U2VDhWUHBkTWhEbkhmUWZYU0t3R2dieDlIOC95S3dWUGdpNDJkanpiRi9lUmcwR2NURTlJTWttQUR3OUJFWTN5RXc0cHVGMWJYRFhsVjRQVHpjdndadlBMSTRiRGUrR3B5WXQvcFZ6TDc4S1BxM2g0MVRRSS9kamxid1hEVzF5R0pNeWcxZ1RlMTgrd0Zxei8ydG0xWXY1Tk1TZ2pwTmR1UlozN1J2NFhvSDM5WnBHTk5ML1lTMmp1eE9vdCtDMDF3cTNxb04wWUdXb25CQ3dndmVDOHNjOVhqNkUycnB2WGxORVFoT3hKVU5HY1lTR2s0RnZSZW5wQmZ6UlRBcDZlTDExZHFDenprTFZoQkRxM1pjZXBubGZvMFRWbDJERXhOZFRMTDhrSm5NNHhtUldyQWlWekYyUnFnQmhhMCtwaVViUGhsd2c4VzcwaVhZd3BzbVFlRzEwNVhpam1EaDllVW44b3RzdmpJbDJNQVpUZ2x0bDlDbzRLVnIvM01CYXd4MzI4UU9peGwreE9EWEFiZG9NUVAvY0cxNzBGNWFINjRqZUpSVFQ3Sm9qaEhjV0IrTFRqQVN4aTB6S0pqR1hXNCsvZmVsaEIwZ2syQVVBQ3pjUlpXMVg4b2ZqRURTVEhtUWRWdEx3MDRZMFVSZDdCSUp1WU5ENERCRjAwZ3BWcWJ2cnFwSzNsM3MrWHVOTUNtV2RJMFVJN0RTb3VOT2l2TmF4Y3ppZWExM1RmRDMxZFN3VVpHQU9lZkdTbnFlTE1lSjRORmFkb2dtcDgvZXpBMVRLeHU1ZGF3OVUwd2pHb1o2RTJRdW5ybWsyQXJzNHc0QkExR0FnMUtlSi9qZUh1dWZ2ODdWMUpmQ2JkTzlVQ21MU0hlNjVQMmNuMDN6dE1ycVZ1MG5GbGxiWm50VjB0bXhyaDlQN1NYckRiN1YxYlYxdXR3Tm1rSEFKa2p5Y1lQc0I0K1FJNjB6dkZLMXFSNjZubXVZMHNpYWtXK040ZjRDY3dHNEVaYTZyaG9aS1VvQ29uTmJFWWQ3eEN4cTZ2WTVqNkcxZ2lyZ3J4Y1Zua0U2Z3NRQ2pTemczSG15UHNhUG1KalQ5bnl2dExvMExLcEJwSU5LNU1NbUhMclpwN1M3cDhjK3JiTi9jaEViNTJ4eUpjckI2bFp4Q1BvR0FhSjQxa0t2UVphZE1BZWNtbk9HeTJWNHBodys1NnA2WkdUMVp0NFk1bUF1NXNZUk4vcTZWZ2JqV0MzdUwrRE13ek84dXlTMkJUdVZTNFY1eG9Fb3NLNmVBV0xwcXRCU0Q5OGd5Q3ZjUVJnbU12ZG1vWG5LeXlNYmRESHJVdGFwVjV4M1R4K2t1K3A1bXhXT0dyTWExeG5KVzFhMzlMM0ZBQ0hZRzY3WUtiRkx1bW5GS1NjWEdDVzNYMmNRbVk2L3ZBTEd2YUdlcGR4TG5weDBwZmVVTG42R2NiMnJaMHpkUHdnY1dnb0JXNnNJUEFZSHluTmVPdmIxYUNzTVVLc3A3aVpha3lIQ2ZOenNKWkhHM3VFVmNYWWcvRGVWTUhWRnpxU05QZmx6UjRCU3NoeXdBaGhGaGtxajBhYjhuN1htc1Y0UThkWVBaa015UFZRNFlaQmNMekdBTmtXakFKQ1BmaWZnZHdGUEVvN0RGY3l1b29Fb3QvSmN0Qytla2VGbTVFOVRjZC9oNnY3d0JtMGRaemlkZ2V0MFZvNlZRaGxUSUN2NXJOR3RJcnE2bEd2b0drRlRTU0IrMVBOSlQ3WGFjRFVJM29qK2dOQW40TlRmc2h2VEdQVWpBenorMlpDeDJjSlIzeGxkNGk4eHU3eTlVK3pidkV1RmRVdlV3RHBtamRMWmNoLzdwMFg0amNzVzRpZVZTVU5DeHJscjliZmorNnpVUG1QQWZOYkJTdHRIQ3VGUVhTUTF3dHVoRFhZaEswdEcrbXpmSUlCZXZkcTFLaUlKdU5HdlVtVEJ0ODlXUzJ4TWE1akRodWZwc21RdlJ3dG1WQmNPTU5WRnlpVnJMQWhnRXRSLzJmb29kUGl4bVFzczJUaDlVdEZ3aWFQK3ZnRzBGSnlZY3FwMVplL2N0K1R1U2xDQVd5TFc2dHl3QjM0UEgvcExsbmZ0L3oxV2pxTHluUTdkb3V2TE1PZnlEYW1KQkh0SVpzNFBHU2ZtZURFbDVyR01laU54ZmFqL2IvdzEvQklma3JJajVoZFZFNFhGdG5pSjJPVlBWRjYyQzNLNFdWZUlueUt1blladjMveWtxWjh0V0RQM0svTmhOWnFRcUV2STduVHJVVTEvSmFBMWV4c2RLZDdtODFCY2pIeW8zU3F5T0NUVWZqNXBTQnhLV0h2OHR5aEJmeUpNV1Z3aXd4T0Fjeitmc3FqN1dpS2hnMjBXV05YWFFKSzlsTGtlN0tYcHE4RkNoaFc1SS9PaGVZeXphNFZrTEpTRjA1NmdjTlFCVlY2dmNaMUFNaDdtME5FOCtlNVBON3VDTXVreituTFdhcWgzbkc3U2x4Q0QvZFpmY0tZaGRMc3g4YXZCb1NPOUcyUEtKVVkzalBXVnp5Y0tEVWluRWpmMHNtcDRybmd1MUpkSDBPaGE4QVF1a2RvU0hjVFBiSm5tMFZJVkd3eEkvOE0wL0RmQnkvSXdvTUwxY01SSWlsUFBNR2lmQUNuQ3hTNTZQNHlYcWREYThZRmZMVVloM2cwemF3bXcyY1d4WjhlZmRkVE5FRXp2MGM4Vm9oNEo1RnJaT1Jkdml0NVZYZ0J6SzRJa1BpRlg2Vjl1bnBPMFB3aEFsL2JCbENkL01QN3hwRWVnODhzOC9NOW4zWmhYeFZxaUgvbGNEdEFaSnR1S0V2enlaMmhwVi9mT2dkN3cyRHJzSUFnVDJvcGR2ZDB1dVk3ekpLYkUyMTA0YWNrQ1RvL3dHbW1KWkdPOGR2R0prNWN1amplRW10aExxT1hwdWNhRE9mVXZBWEcwME95VVkrRnZWVnNVa0w4WTdvUmtHK2ticXFhOFRkQkZDa3BkSTl5WTN3WkkvQ3ludER1MmpYUU5sQTJDWmlnckFhMVpQWTFqZTlhYUtMZ2lMdGZjdXZrYTU5bVI2SHlMOGhOY1BhYlJhVENYR3BQZDhDL0NjYzlVRDJCWDhjMHFyRGRDZEQ4N1JCWFRrRmplejRRM25BYVBUQjZXRkF2dDNIc20vRjBJU2krV0pZQU5pSXFvbEd4OW1qRjlKQWpxVm9rMGh5WVUvcGZPblkxU1FMdy9WUGlWS2w3cWlTUk9LWXZESEllbDdvMndRczlqTys2N2cyc2FyYkxUUDlUa2NzRUFsSGxYNU13TGZES2MyY1huZjVjY0c3TTZ6SWJHZk1uTWxPWjJ4Uk5uYy91WnpXYlFHb1B4KzdwQ0oySG5oV09mYTVKaDhvMG9HTFdyM3lXK2tFTnVEM1NiTDhla0hnM3lWY0wveFQ3K3RLcmh6NHk1VnJTQzdOdWNVL3lWeUk3VzhHQTBUdEYxYi9WUnNtYjc2Q1dlTFBNYi9WQi9kYTFsaVJTOThnbFlIdFdwZ1B0QldsdWZNTzhjd2d4ZW1YaThWZFZzeHJTNnM1VUU4T293SVpnSUNwYW9HT01KamttVllrMEFsMFRSd2RrVmxsc2JkVnFkR1RQd2xOUXNZczdSaHhQOHVOdHlzZUQwTE1pUU9xU01IZUhnN2g0VlphaWpGalJXQUJNTVZPYldGNTRGa1JWMlBrUzczNUhXTlJaZmZEclNXNEVzWmpMN3FBVHhFanpTOG5XR1YzUGhJYjdxYkpHT3I1WE56d1Z3QU5uK3Fhc1krdHloNWh5WUpBZ1VQeFA1ajc3c2lXeUFRRzNSd3NuN0Zvd0FpUHR5VVBkWENUUVR6WHIydHU2REtnYkJvWURzNXlObXFrMW1qbnY5ZFFXOTVnNmp0ZHg0QmZjTEx0YTFsTDlJOVAxa1pTNXJvbTgvbExTSFBxTVp2aWJCRi9SWWsxa3dFYlE1WkZBcUxFN0lwVmx2TDVYR3FkL216ZnFOc01DMlZqWmh6cjIwYWNIZ1hYd2ZJN3ZYa1B4YzJvbjhSTXRmSkVCenN0WVNpclFxOVlrK253T0VjK0JPTFJVOTJlYzJCdDNyZUxzNUNlenJiOXFpbHdjRk5YOE1CRit0d1V4b2hVQkxrY3VIWnlLWnFqNkJMeVJzeXBBVXBTQ1VYRXAvRVE2WlVJdDNBOXRld00xbTc1K0NmSUZ6WVI5VDZDMnc3a3BzcVg2ZWJuNThtS2UvVDF4SCtQcE5ERklnRXZzS05UcDJLL21BZFMxTmk0OExYWXd5cC9yREZhMUFtYTBrOTFIRkk4Q3JWVjVOVURzQW1DR3k1cGpoTWpZNGRZdGdwa3VMMXhHRjVjZnNSR1BaM2psakkyTUNrTHF4QU9XWjU5dm8yRmhJK0RINXRDT1I0NmhJeGF3ZmdIamROTXJTMml6aTN2Y2x1WEN5dmR0QUpHVFc1SGVKc09BUHNrVk5yd3UxeHgyM0VnOHJFeHFqZWRzUHR1VzdTRFk4bG1sT3RBQVdpSDUvT1RSdG9TMS9vM3BTc09VQW1rc3VZbnUwL3E4TGtZWXdIWHBIeXdYQXJCU3lqMmNnRTRkNG5Damswc2NhNzZkOUxzekJMZ01jZHh1cHZTV3ZYVm5mL3RvcklqR3Vpb1VmL0gxMFFoaE8wakVKdUJvc05MSmNVOFMzdVUzUmNYN3BTS3BFR05HVkJlV21zOS9lazF5Y3VXVmlpbDdYN1p6emJMWnk3M3pUSzJkdi9xc0s1eWgrSU9zc29Zb1ZzTnhrZTdPRmtQbWRSdXhWNDFFbUM2OGZjYStNaDZZQzZxMjExOTZ3c2J3dFJ5Z24xTXRtK2VvTFEvUlRzUFpPeE5zZjljV2pBL3B2THhsdXd5V05QUFF3UnBRSHowanZvelpoNzhZZDZ3QzNRNEx5ZC8zMDV3Ymtpb1FzUEVQSUtvVy9FQ1VuV0VIMkNPQ094YzRWWThpZ1FkN2NMMUlySHA3OC9uSDMxTjFDeG5BOTV0TmN0WTB5N2NWdFVXMW1JcW1TV09iNC94KzBhcUNuREVaZVZ0TWN4RzBHbGczeWZrejd5aFkvemtwUnZzVXc2cVNkSmdXdTNmV1c2aUpoQmNmSkFXd1FJY29RVXFKTHZzQUlacTRkUWZYWExqUmhTRm9IR1BTek9CWFljVFpmTGxNU3RvT2NXbWdnVjhRNVJ0UFNVdXdPNzdiREZTcTFqNm5OOWl1OEE1N2RjemdOS254NTRRWlhzUFByTkI5RzFaT25WZ1RmRzZTU0pVMXorU1VwQnFvWTFFL1h6WFQ0Y3V4TnB5eVNvWERlMzFmZWFCZTdKRndaa1dHcmcycytOREdMSW9ESjI1UDN6d1puYkpIWERxSmdMNVRsRXovRlhkRUhxK014SWdYa2tLd1dnQTBEK3RzTmJBdUlDdDRFdTN5R0NlWHZIbnF4K3FFR2dsVUtoMEQ2VTdpdnFNYXF4RW1zSjIyYkl3TGY3cEwwVEd0aWQwd2JtV21vamdQRWtVNFFUdnA2a2V1bmF2RldDVnNhMVpHakg2K1J6dDRIbVQ1NUJCdFFCYzRURy9scHpNUTIrdDVsUHA2WFpBMnhJa1JHVWV0L3UycVk2RWtOS2RxVVZZS1pZVVIxSHVPUkord214Y2taK1BvS2ZKcUNZMS9ON0xhdDVJSmhPWFdvTTJZWGVTbGFwekVrNUFXRXZnTjRsS1FvdWZqV0N0eVQrNmtVYkpXcGttUCtmNGw5VGo4NGd4NGV5N3lHMVR0SXNMd3hjVTVwcTdYdGJjQTNqcVB0K2dPaFA5MDlEaU8rbTcwSTZ4Q29wK0VRY0ZLWHBEdCs0bUg4UjZNZWMyN240NDR4Y0YyYlYxTUlKWUNKWVZDNThiOTIyUnFsU1RzM1Jsb3Z1NUxsTU5TMmxrdmZENktPOXp1b1R2NnBKQ2RtdG4rR0F4elJjUHhDTmhIL3hzYWNlK3hPY2tTSHpoS01ycXJMbytzUEtxL1I0Q1RlaEd6UlVVMHVCTjZBeFEvVVdqQ3liMzZwcUN6aVVyZTU1KzRVZkRhQjdiZUoxN0UzOTlGT25UTVRzNnlqOUorbDZZT0d3VXQwRHd4MjNKbnJ2T3V5WllQK0tjQ2tta3VkMnpXZFlzRGFNUXlZUFNHbm94NEhvQ3JseXlndTVyUW1TcWRXRG1UTHd0Z1Z2a21pQ2tZMm5SZjFjZGxYcnVxSXRPV04rdHA4T2c4aHF0NU1xT0t0VkJ3UjR1RXFLcVRwZm80WkFFREE4eXNmR01WbnkwWWtOVUEwMnpHRkZNMWV0ZCs1dmVqUVhodmhBbzhQaHBVUGFjWHZJSFBOTTArRTkxWTlUbXJHZkphc1FyNnpseHc1bDJLaWkzenpRa1dtRyt4SE14Y3dVSFZrRWJRU0JQWlpaMHJHdDJ2M25WOGNteUpEZ0M4V0lOQjNoNFFHcmlPNi8xNC9aclNHUTJCdVpidDJKTVNMZWJlS0FERHRYcVFNZUxWOS9tem5oUHZPZXAxWnRYaVRoR01oLzhReDA4NlNpdVByT1NybFpKalMzNG02MFBMU2VINnJDYWwxTFMzNzRWUWVmZjZrZ1FqaktBWFREM2tBRDYyZi9nMGU0YXZSZjlma09GbUtqT3FpL0Z3QnlNNXdpZVhjaWwxL3c1S0lLUHNWZHFCc1FJNHdLams2ck4zUUFUUk9VNG9wNFcrTVJnMVkxcnZuZGhwZWFleGtXWkF0eXduM0t0b0ZlanNYdzR0dHF3djc2Z1pieVpQWDhFc1V4WXNuYmQ0UXY3SVVuUUlPekJKTk5aVlhENm1JZ1UxeFZkUGU5ZEg4dUs5dndPRnRsTElXSXlOcFdZQVVJSThRNnE2TXhGQ0hTdFcwNGlUQXJwb1dZc05KVUpnQVF0UnF0bjJUdkIzSE0zamNMTTdJMDk4Q1lNenB1SWFsd1JlemRIWUw0ZXBtV0RPVkdzU1FzNitKemhCemJ2YjVmY3RncnhFRlQ0VExLbE0wb3A5YXVVd0F4czgvcVFxSE41Vmk4K2o3YnhNUGs5dVB0b3FJY2c4L3Q4dk1JaG1QbVlmRlVmeVpOOHVPSWMrcDJrdE9Ib0t5T3RjY1VXRGtmbGI4NWZPa2NKcmZIblhKT0hPb0E0eHRnaVZNRG5IT0JOQ0o5bG4wVlZFTWFhY2xmZTcvQXhUWHdTSDBzQk45K2hvdFJYeU9IVWlUbWJpTSs3RGhxNkNOd3h3a3gvY1hUODZKOWZFU0Zxa0xXemlvRHp5VnE1OWsxcXZCamVGS1JQU3BJRDdFQm1rYjczRHBZSWhXUW5rdEpjc2pUZy9tYWs1Y1RSSXc1WHVTMFh6NmdSZXBBWDQ1ckNzM2NaUUQ0THZ2T0hNNkl0UllqU00zMDNyWSs5Yy9UOU0zYXNaeGl4dVZPdWJBS04wM1R4ZEQrcVNEOHQ5ajNLMWxocldoUGgzL3VNRkNxekRDZ0RsOUFNRWRuTS80alRZQlREWFp5UFpNemtpcXN3OG9PN05GOWZLR2JuN2FqZTNKcitmc1lZeW5YSElkc0JkV0NBK3k4RENxY3NnUktjaWZGSXg4OVhodms2Y0xJNWY5UzdOOFVkU2VkSXZuMFhMUksrNjc5T0ZQQzZmbzhzMVpNS1dreVo0em5jdWFSS0V1dEtOc0lEMWszS0xCRncvczdqZklwV2VBQ3FuWkFnZVBUS0dDMW5RZzN6WEtXZTZEV0hkWTlBTUM1dkRZSm9xR0Z2SHBBRTJYUVRMMVloVndnbXVEVHhzNFkwS1dkYSsxV24vT2tORFhoQXdxS282NDhHa2lXRG5nYkpBRU40NlEybHYyZXdQclhMRlRtazlLbFNVQXNKMDZ0MkN2WlFzcnl3dFRRUkZ5QXVYeTNSOG83R2UraVRJTERNNkFOV1BRVUtTWEtZalVKZ0RNbnBuVTd6NnpteXRoL2lIckIvbzZ2T0VVcmxuWkNNc01abXF2VE1GVUFrNmdIM3ZtdlFjUVlsR3lhYld4bGhLbWF1QkdtcG5ZNDJaL3lMTlZLTS90bys4emd5WjNMZDlTU1d1ZW5yeXIreWJ2dGUxdlBsK1l1QmxKMGZrdEtkNTJTNVF2bXhxK0FIRmVUdnBKTTlFS2ZMbkVxUzFEZlU4MFl0cnZPNk5RcS82aHBtNXhUTVcwUW9NRTJKaE5EdmhKa0dHMHdvTDB2czdYOVFKemNlWUxnWmtxRy8xN1NmWHR4VGkxQXVmME5hNGc5dWx6eFNMZGZqdTJPcTdKalMrWGVCWHpTSEtUbGJ6NzdJcEV0UVYwTHA3Z0s3NW02NEVYdUxTbW41M2dXOTNlSngxZm15S0tjdm5nU2NXMXczdytld2hodmJSR2NiNi9SWE50RkFLS0NoVlNrRE4vR1lrQjBObFljYzFYRkR1MTRXVGE4RUppRmVCeVcxV0JhQ3N1RjR5UlZ3RmUybGdYR2NLRmR6RnBINDExVEdyNzZTbVYxSUVBeENNK2lSK1QrMUo2UGFwbXloWDJDVldwaVhFb2FDSENhNnpIaUhQUEFnY1oyUmFOaFZEcFA4Y1hReUhUUHRaNGNEOUVtanJFY1RyRUxyNkttK1ZjYjRoOTQvOWhBNmJMT1k3N1FxNDRSZzJHL3g0WGprcWxsT3lXSG1raytwR2R2ZmljczkxSE1yU0pIQWRrd0ZLZjBYZVFLREJxcFQ2YkduTlZ5RFRmK0NUY2Z5VGNrTjMzRExxcUQ0dU5SczFJV0dUUllxSkxjbjIrMkJrVUhiQ3pueHNtYUNVQVA2MVdvenFyOWs2VDBPdVhFMUZuVUtwS2JPSHBjWTUxZm52Ty96OGdUZ0FWSVpjZXBhS2xKaFl1dGp1NmhrbVA2TEM0a09uSmxvTFlUKytzenFoYVF1Sk1rcHhkcldOcnFzaSswTFQ4bXlhKzRmTXM3N1c3alY2RzEzbEY1aXlzL1VIQTlQTllScS9CMFJBL2lDVU5MNTlZQkxINjhoOXVjSzlJaWlVQkkxZmdzTGJVaTQxUmRmYU9jZnppYWZNRk5FVjBTNE9taXVoZ2RnZjVJU2txK1JEbFRqVURDQ0wyc2V1N1BHcWVYNzQyTjc5NHpqeHBaK1poR1JxUmhvYXJPSWRXMDFTbmR1QVZINzVGcUdXVXBXWEFwa2tQcXNLeXA0Ymh2MUtQWGE5djJxSjdIaHFiRTdCM3NpS0EvVjhKMkRnQUpsZXVmNDhxZDRsTjYrRnJBME5qOGVNdHJKTG81REJYOUVxYVhCTWNQODRBL0xzTkZ6eU9pb0RWN3FTMk5KWlUwekhIakVQZWFOSVp3U3hSdDMyclNCbGNtM1pIdjhHWGdZNUZSVFFua1ppcWd3enI0WUxlQmFEeTNQbHZlR1RnT1gzMUN5OVJYVmZlSEdYN21HTTJxeHBhcGFBN3Q4SXB2NVZMMFJTdThuNUJmQ29ESDlDdUZad2twQnpoaHVMQ2NZUGpCeVdOWUc3bHJUV1cyVmlBemxwcVFMRjFkaHUyUnN4MFFmL2gvZHVaNVZMQ2Qxb2dhM0dNM0ZIRUNiYjIrT3NzYmw5V21aZGJvdTROV2orbG5KRHNHNkg0MGNtdjZxUk56bTI3azVQVElWZ2kxU1VZTWdBbE5CNFViR1FybEJnb0Z1enREV1lYcWNWVVQ1Q3puY0RQcmF0OE1Dd0lsMk1Ec0ZERmJsZzA5NHo0U1VRTXppdVJYMGgwOHpIcmp2TGdmbkd6NHJQTUREYmlUekU2Q3dXQTJLeGEzZEZyMTRXNXNjOWo1OW5UNUdhWUZIeVIzMWtNQlV5TVBCVldhV0NuWEVlZytLOThQM3hiSmpTcVNzM1lsbFJSaFVmOEhmMVVvNTVoQ3E3cmJURWI0ZERzRmI4Sy9pRmFpdXRPclZMZDErOU96R0xvNm4wN1l0NTFPcmo1ZUFldEVGOEtqZGlTRThySk9HRkh0TDgvUEhxeXdRNUtNR0RwRmJvMjNXUDY2WkVISXdabmc0c2F5ME1NelRmcm1ma09IYkRsb1JhVHRZdGdxankxNG4yNGtTaXhYZmtHd2VSWDJiWTV4VFZPWUw0VlV3c05GanhZTVRvZEcvdGdIMU9UQjFTd2szRFNYam9weHRmV0dqei8xZkF2WW9DOU10ZWZqZC9sTDVsdXNVaHJ2MS9WbGpoWTdpMlFPdzdZdVhDd1ExRms1cW4xNERZcG8xYjFUa0l2STBsTGNiVzZKV00rRkxFUGtyaGZVZjlxRkhkS3JtdWRCMFBZNGVpUFYrMk5ka0x1dDdNciswMlBvcVB3SUdTQVpncFlpZXBVWHhzdkhSU0RkZEdveW5hUDFhR2JUZSs3MWt0RTN3d2xkREZ5SWtXQlpFQldCUmhMTzJ4THJTNDZmZG4xTzFBdWd3dGlJMXdGTG1ibVlTb3VxZWkreUo3bmFxREtnNnlFMFpxWEppYUpaaDg0S1ZqZ21yYUE5SERzem9UQndiNGloNFBXeTVyV0o3eUl3a3UvSHJxYTR0cG5BWjVscUdrMW5FSWtkQXJGVGk3TFJnTC9GK2M1VVp4dS9ldm5uNFVSdGtZY2tsVmRaM2ZMS1owekVnVi94SzFCajhYcjB5a1dwdkhOcC9PWHk5RnV3ZHhtb2t4c3Y5ZTkwNHZFeWtQUU1FT0R6T2J0a2tETGx3Y2ZiU0VlcXFmb1crbUZVSElhdG5STFVBSkQvc0NCSTN2ZithWXY1WGpsVWsvUG5qN0ZhY1FSNUNMZFlsc1loL1YyVjUwejBSV3d1SW9nakY4ekxVWk5EOUpRUThXSmtodXpQY005bWEvTUtiUzZvTll2WDBzU0ZIL0llYnN1a1MyaGVaSE14SGlDNkZ0UmlRUy9tYURVUkNMMGpMQjc5WXF4dm5NTGYzcHFIeXpVa3o0Sll6blhOb0w3ZjVRdkFvYjJVbVY3ZTlyMWFmNlgyMndMNmFINkJGT3ZOUFpIUWFBdWVVYzdSdDlWeEIyalcwakI5TmZQakdqR3owSEFCdklpc0t0cThNSllmQWNsSUJLTjVpeDFINGJibGR4NnFodC9Dc2hJdUlGWEZsWnRxZnMwOHduVWRkMzVZbHNoQ3ZUNktBcVRzWEpncEkwdVQ1azFkY0J4a0Z6TWlhbGJVWWFJU28yZzVEWTVPN2tkTUpkWXVQaXVtSzRpR2VsMUMxU0dxeFRtaVNIdGh5bjdJc0o1YVZOMjdZNE44SkRiN0NDVCtVQ0c2RW5iWmswVXh6aWhwaVZiV25KbU9mMnNMVGxIUTM5VWVyekhrKzFheDgyUXYwUUlOKzIza2JxSVdXWXY4SmpGRkprcndaT3IwWGhFWENUM3I2RnNDWUhVOTFwdVZIbkpCNFhBUXZPZlljdU4weXUzREpBODRJUDRqRFh2MnV6RjY3WVF1aHVFYUlvVlYrRWtCaHRHazVzZlZWN0pZNGdQWE8zSkY5c3JSMFdtVTdGMkxoTjQyVG5sRkRkVGNrR29YSlN4RXV2SEdKRkN5QmkzK1YxYWVBQmhQRS9Wbzc2VVpsZ2lhaUd5ampQSTcyM0xYWlc2QkU1NmcvcUFlZ3NESFM2RmlRQjdrdXRVM0FpNVlISElTV0I5QlBiUUUwYXNVZEd3QkJ0MDlXbS9KZEY2dnp6dTJwUlpPbXVIRGczYUZXQXR4TThUN1pLaWlpc1NSdlpSYlR4T0N4TmYwZTdHUEpRU2pQT0RtU3BzYmhSbE5IdjQzNEVHcUc0M1VGSWpabExVUi92TjIrbUk5RVF0K0NRaTgvQ2xBMnZrdzZjUzJPc3FxTlJ5ejB4OHJCOGdrY3ZuOTg4WGIzaENUVGZwSmI5bGFTVzJNby9JOHJTOWJaVTdOa2NZL1htaWkzcFUyb0xuUFdYWmhKa25CMzR0cWtSUS9QeFdTVzdXU21hQWVKN0o2VnBxbmxhdWpyUlZSemRLOXcyL1ZuZGo2M3huZlhFZWIyZ3Nwb3lHWVZaV2wzTTh2OUVCS2ZZUGRuY3BNTlUvd1BMc25yUzE1VWNlRGZ2TzU1bFI4NmNHVUQxZVRhSEZCSXhPYmlNeWU2dmtqd3NISXl6bVovZlBxNldwT2pZZk5Ec0VDeWFsMTk2dWxQUVM5RXMwSmw3b25LSDZRdm1maUhpWkNWZDl5b0xHa3JiODE5SnIzVEhzOUV5UDZhdTZYbXZlRm10SkgvUEwxM0hwNURkTlgwdFJ6aTNZTXJmVzJ2TUVRYnBhYm1WUVdvRkdBeUYxZWdGMFJrRitqNGtzdWNGL0dHQ0JNb2NVTm5ldVdNY1ViYytGWnM3Rm9OUXN4VzNYVDEyMUJoOURtMkNwdHBSU1lmWlF4WWN4MFJIREx2VEhiMWZCU2NVZE03TGJLU0ZUMkpiZVMzZGtPNlBnQ1B4MEJ4RG1EcXZmZTVNbTVjKzlqV2pZOXpSWS8xOW1OUkY2SmRDSFlKd2lNL2UwU1NoZCtQdDhYWVRqZXhRSGVrd1hzcXhKaENxdG9Fand4cWVLRFN0RHAvbjI3VThVeEErQkhZeGRFejE2bEloVXZCeHNYU0JDT0lLLzJqaVFOdHFQcjZTaW4yWitramh1OGo2aW9UaUNGOVdhaWVxMk9WUWM1cHlMRWovRUFCZDdrQWRJWFZzRVdybVhEeEJNOVZTaEYrZ2JiNGh0Nm1lVUJ5d2I3STRMQzNOSFQ0MXZKb1VKRElaSUxRMFdBTTJTaVJ5WDZId3NzZDc2U1V3c0dIMmgzbzdhMUhEWk4xdE1pb2NzTmRtYnVHK1NocUVLWkRYNGcxMzRicEpUYUlaY0l4c1FjQnlvbGdNc3k3TzcwWmZZQU1RQkpicGU2aEJJOHJFcjJLOXp0bm1SeDBVVUNCWmdKdmFVSXgzWFdJL0pNRWlWdXF2UUNlSU5EeFFtN1B5SVQzZzZ6SnJST3ljVWlzUjFxRXgyeVpFNktmNENOaWpRZHNHVis1VjZRclRVWTRLNlNIMmc5VDdqTTlYUW5qU1Z6VDRFdFB4M292N1UvZmg0allOend1VU5zTHBBRnBmMVZlT2lEUTlPQTM1VWh3T0JPdGFtVFpuZHAxWWZXaERzMmxoRk1NUmVXZGU3UFZrU2w4dk1vcnNQcDBOYTJhdEVielV1a0d4bUlVd0FGU0pVUTVFYy9na1pHUG9FQTByV2RMS1NRb0p3OXBneFowd1MrU3AxQ21wOUkzbzU5aWJ3Yzl5amJueGVJenFhV0REU0x4TU9UU2ltbThaR25vcUpiWk80U241ZzZJVEwrbVNidlE4NkxkMUZkZWVvZlhYa29tNlNGcEEycmd1WDdRQVlXNzdITU1WTWtGMGZ0L1hKRVdqNmk1NWw2MDBTNGpjOXdsZmlaTkFCU014NkhtbjdsSU5tZDBvNDhXUWNBcFkxRmNLU21tQ2FHZ3RxN0toRlpSYkJGN1MzVzNsQzRTcEF5blVqUFBnaFY1U0ZjUW9KTGk0NllMRnlud01RckpNVGNmNEVSWFEvMFVTalJ5ZDNQR3RmYzdGNFI1azM0dGxsMUlmM1BNeFA0Yy9zTXN5SVFHZkduWmtOTFJ3ZjBxQzdsV0t0SnpmNzFlWWJ5dHBSaUpaK1BVL1pEdG1ETlZQTy9qeEZEbDZXVm9ZMC9ad2I2NnMwQzF5RHBzODA3dGR4dnZYYnZuYmhxa3VBZkFOa0c4K2RmeHdBNitYV2VaSWZzODdIbHJkM0MycktJN05lRTErQWZldkRQVVhBMERJQjBuZktwWER5WkM3YThSUVNFcUxqZjhvQ3FQUzJpalhBVHEzaUI5OUNGanhVcCs1cUh0ZjJnTUdCanFiN2pLQ1hCT2VVY2N6TlIrUzBPdXVpU3NaYWowS1VUZ2dGdjdLZFRoRUxyWHRZZldGV2lwNTJ6Ly9GazU3dXUrOVRITDBKWmRReEx0alZpaXZESi9hYUIvNnZKZTV5Qzc0NUZoc2xJS0V5MEVBUjdHL2Q2N2F0bU5KWUlHRGVzSXZhNFhFellpazhBL2MyVGVFbTRwQTBsdUdPelpuTjFaL0pzU0x5SDZvYlZobkdjTmVtMUFUVlgwd0V6SytDektlcHlPZkNHcFdDV0FIWkRuRkh3MzZObUFnZGFwYncybTVscFR2MmQ4SWpPVDZYczVNZk5LK3pyajR5NG03TWk5ditiTVo0NUJIRFJubHNKaHRjUlZFVEZRbUhFRmhMdlhOTllhTWs0anZITGowUFNDWUNVTVZpWkEweUJMS2hnVEhxa3F3N2JOWi9DdHErWjlGMDBGbUlacjBmTk5pa1BiSURrZUNEYVRTL2JETXFLWVFnUG9uUWczQm9lSFpyNHNGamZTN1VHSUN0cXVhd3ArMTg0US8rNEJKWkJpTSttVFkwdkNlbFYrOXdrY1NJTnNCMUdDNmlXUWM2Wm5Ra0o4SWlIZDY3UDcvZGY0bVVmeXkvWnNyS1ZSNThlNjZGandmUFViVWRiWjFJaWVsUnhpZGRFYjFHazdhcXVMZEJLNzV0RTRJSzczaWZtbXRsc3RxUElKcmZtcnVvSk5mRndqS2dhOFRqd2liT1V3cjJIUk5uVlZ2S0dpb3Rldnhhc3JZU0QwSVM0NExzWThWK0JCckNYZDM2UkpwQzNGZkpEWjVPNE5Bd0k3U2NtQ0M0ejlJck0vZWN0RTBHdkRsK08vRW1OYU4yOWF1bVJZdXdZQVF3VlFPc1AzemNPMFFpVGFadFROUUJHdjRYQUNaREhMZFJibnZRb0RCdHpOVmhsdlBuSWZ3ek5UMGFXbmJ5Mi9uQ2d0ODZMeGMxR3VaUVZWa2pyWFFKdm4vV3lvTGdjd3hWeXRGNVovSWtjcnEwbXdzRUMvTGxINFpsTlBqVWpuaFMwL0xnNnZzRW4xbWg5azRENnRlN0lFVnY4eVJONWF4bSs3SlJLK1BGRDZrR1prWFdBcEhYN0tFb0t4cHlGOGY0czZxajhnT08raUhpcEExTU9aL2NYblk1VEJCYTYxL09rQXlXNTJYQXd4Tml3ODJub2twVWFGTDlEd241T2JBZW1SQzM5NWVmZlh6NVBjeGdySlVsL29rbE45ZlhIdEd6RFVMRVJta3NhZXNnWW9yazZCbkVpNHlCMW5GTXFGeDlBVnQ3dHhvbnVLNFN1NEVnYTJaZkEvOVZvY2JLL0JLTlJYRjAzdzlXaVpheFJtZ3pXbE5xSWhLNXh6QVcxWFdLdXpzUXVucDYvVitCUzZRQ3pJMjlGN3Y2SDdzWFJyVy9PK2dpcmlHUGdSK01OQldDZFNSVThuUFIzK1hFdjR3dENEVjBmVEdweHVIWjF0N2hKelNKSWdiblNQTzhXWmx6YzlsMXBpRnl2UlI1SFpMek5GOXdzWXRENDJucDF2SlNnakh3U3hTZy9VK1BxR21qSlh3cFM1Y2dGUE5PT253YTl2OUhxbU01V3RwUWphSnVVYkZ3dmVQSnB2WFRtQjIrMW81aWpPd0djLzhWSko5cjZyRVpoNHJzRkxpaGxNY04zOTZuTXphcEZib3padnUvektQK0VzMlVhcmNRVG1EbjNEM2FTS01HWGVXcTBkZU9OMUoxa1d0MWFXRis0R3VFbFduWHV4Y3NOOWI1QmhaWkV0ekVDakVWZ0ZMdm9Hc1hqUnNpTXNxNlBGZVJVY0Y4aWRTOHU5WWRaUnJMSnhLaWRUV21SUVk4NWgxZXNzdS9UYmVxTUQ3anpLL2tzTHNNS3JRRXRBeWthNVB4YlR3RllBb1o1RWRXZVdEN25tVUFveG92VFlweWRYYmZxUWJGM0ExdnRCYkkvelY1VU4vdHRtTjM4dlBIb3ZkdlEwYjl5NzJEWDRiS3VMMHN2TllPbXhraW1mcGdIeEJlRGV6bC84aFMvZEZkcVN1cUdNTGhEYVE5T29Ob3djdWVBVGd2Q0lBRjlRbkNTbWE0UVFEWkRiY2U5TGdMVE40ZW1USmlKOGtEQ3hxQjZrM3k5NHhvUGxmSlJ6SFNCWitVeFhkT3lkbUdZZGV6RytXZGkvUlBVdTJibEN2TUp6ZUs3WFJCcW9JbGVQTmcxeGFkTDJGSWlHSnp4anFJdmtKdGlFbVpwU2tPdWtPZkF2ZUM0WTZQQ0VacmFpSE1WL1RSZ1JsRGMycm5UenZtWEJabC9LZ0NBNFhYN2xBS3NVWVI4bVc4UzNScFB5V3RFSU1QRGZNWjlXU2dkZFA3RUFGME93YUdjZ2ZvSVJ1bEU0OHdKdlhSZkY0Y0dwUHhXcS9hQ25HdmxzeTAzMUpLQTdYb2IyMDNLMmFlVWlrbXFOZUo4QThOUjdhTEtnc2VkSENZQm5CUEFFR0IwQUN1TGtxKzdRUUNvNER0RkRlNVJBeVdoOUcyeW44eEZ5dzk1RXBDcDR6RmMvbStlYUE5QkU3OGVYbzB2UTlhZ0hSbjN0OE1iRmZCUVpXT1RNNWpJdmw2bUZIUHIydEQ3c0Q5OSttTjhoS2NKVGViTlF3eTYvYWRMcnRCREswV01aV2ZZdUp2SmFDOWRLNmRGdWVMV2pjTU1FTWYyV1o1OHZqRU5xRFNLc01wYWVnYWNSVGQ4dHNXc001T1hLUkZIR3NwWXdWTjlKaEpIOFV1bzkrODVGeEZDV01oVGdaTG9KaG8yU2ZZczhlQ3ovemNWRnBKNFNDdUlGZXh2NlBlT29MVjIrdHh6bjNYWDgyR3hzZmovODdMbU9iZmNZOVFKa0tXcisxS3dBZ3diTHMxTmVLNFk0eEVIb3BXS2wrT0VOUFB3czBpdWdwSmNSaHVjZ2pzV25WV2tYQUJhNWZxUHFtT0xMNi9sZVpVSHRNNmx6SGk1TnI2d01pU292S3pkS3l0cFNnWTVHdmFLeDR6UnpUMStqdnZ6SVBiZCtMVW84WUdDR0dHUGhqYXJFdkZONU9GK2taSHEvd2Q5MHl1Z3hOdmdMNFVDK29XdjhOQVRrZW9qem96czVMRHZFWWNuZlhlZ2JmVzNCRUt3NjJmUHhjcGVRZ1MrY3ZLMDdmQ3hDanh2a3VoRXB2SGVkZnFOZ3RpR1hnTFVhandhUmhvbkh2RDdMbDF0TVlqUUdPdGcwdzQ2blJHbVJhRE15bFNTRmdsQ2VZUytZTkV1ejNac0x2dlRNczVNdHNvaFJvNGlscE9GSkh2cTlkY2pYbXZ3c2RPek5ZUlJJVndJcUNVN1AwRnNyaVp0SzF2c1YySWRhSmpNNnRheDFkc0ZUenY1cG5HWk1WNnpLSTg1WVR3K1lYOGVMRWxFSnhRM0k5YVplTmxqdGc0dmpJcmFYOWdEa3RKTXVnY1dkZUl0RXQ3alNRMFl2YUswQVBGSGZvbVhhNWlJRUQvRFpUKzluMzR3RGhTS3J2eUhERFhiVmVLTkdVcEdUb1EyTk1qTmxnZ3BjcDExRWsxWXg2Qzk2MTdyODcvcEpadG5SZzBTTmZZeG9LZU1JWjQxa0pPakFxOXBvWEc5am5WdEJveGY5LzRYSkx0VVR2TEhQdnhHT3Zwc0dkdVZuMEFNQWdVMXg2aTlmWHN1em9CWjRleEozcFd3MktmWU4zcVpqYk80M1ljN1RnN1Nvalh1TWJrYjRabkJIdFZVNjU5YnZDdFVqZ0xPRkFZbWtHTExidnVBZzBJNWo1ZjdyRU1odnZ4cWpkRkhZeUtwdHk5djFyeXpIbklLRjVsUmJsTTRkNjA5RTNNUWJ5Q2tiK2ZiWkxvN3pxYU5lWVBGWW9PT3N1dGhvaEJETEFwRUI5ZmJhZGQxNWgrK0hER2c3aVE5RlFFMGlmRlYxZVNQNUV6TUpVTWlzdndnR3ZMOTVuZUdiTDdxWDd3Uk94VzVtM3djSzNwdE5OZGZHZmpUTHpUN21JQ3RYcHFBMjF5eTAwcm10Yjh3blgvUWhTYk1BeEEra3VqOTFveHNpdU5rV0l1OFJscHk0bDZCSjFYVGlSdndHdms4aUZpRHIxd1l4MDVTQTlES3MzeXB3OXprYi9jOURVUnFvcGN1dTZUMmNTYTVqbEcxQW9iNFQwMi9XQm5uYWRML0JVc2hOTWNBZHhxNGhiWktRRXNEaDV0a3hURldUWkZKYnpYazVkZi85U05lOWsvVkhPQWFEM2E1UmFqcjJ4bkpHUmtoZnBEZW1pRnZ5SDJmRHJPT3J6eUU3T3YzUTZobTRJS3VKcHdVckxuMVF3cWQ3Q0FSdk1ySnA5QldMZHZhSGYvVkN5OTZxUlNhUTkxL3dUQ1ZzNkR5bFpJUXN1NkI0U2RwbGMyTjVUc3NxRGtGa1hONVFkUWZiZTN6R1Z1MnR1Q0h1T1FXeHhhMVpxNTNnWWI5VDJ0ck8zdWFuZEhmUE5oYlN0VlVjUlRwQnNTcXpnTGRrdjJEZUVyTjhBQzRiK1VDSkJmQVB0Sk5GV2M1YXNQMVk3NVZjVXBqcTZoMVlFc0ZhSHZZZGFoQ2Vnd1VYS05VR1NUUmRPb2NhRVhwdDA0b2xJZnRYVG0rYjFsRHU3SENrOWU1clhqVHY0LzA1MWJ5V3NISkxoOE9NcWxoL0QyZzVxUWxLemJIc0wrRmJhUElsczVlLzJLb2pFY1lNb1pDKzA1eHN0cUtjd0hLYlRQOWN4NjJHZTN1VURaT3o2Q0tUYmM0RWJqVU10bkRCUnIvUXVIM3pyb3JWWUdVckN3WnhsMnlDdFE1enpTOEpROTNZUkZCT0FpOXZTaHJpVGJQODlRUS9jRUd2QmtGL1h3ZkNuNitDNnRnRzdWTzJIQmphaDZaVEJaTSs1L2RuUTk1QUZ2NEs2cHN5OVFwMFgwQkF1amkvNjV4bGdWWEZ4QVFxUlNaNjdONlBBVmdpdUJDU2RxamlwVnpRaTVVcmUyZnpEcklMQlYvNDhFOTYvaFNZOWp2UVQxdmxZY0ZvUkQxTUJSRmJJRm55M1M2S3Fic3kyVFZTb29jMEZtT1lOSkU5SzEzNmwxdUYzQnhoamFJOS9paUF0NFdEMWlFZHhDa1Z6cEdlYVp0UmNLNFhmcEdCYldhNkNKRHYxVWp1TmhUTy9TWTlSd25FTTVaK0JyZy8xeVRaOHpMN09Oc1dheGEvbUVpVC9VbkVlNmloQmpBVEZFYmY3Qzl3SjhnSjZSb3F2ektnTFA3MHIyd1FDdUE3cGo4NnhpNTYxTitNekJxN0ZmeDdpUWhHcmJnTXdrbzVROTdCOGl4eVJkbnBiYmY4NW5JWkZTM3dQRzFBU1pPYlhFcmJwWC9uRVNmNjZwZGRhdFhmU0RqMjRCSm8xRmNSazcySjlEK0lnK0dsemNkcEozSytmVkxLUnZLaUgyZnA5ZG5ZU3laQUN3U3RtUzhXNXJJWnptWlJUb29nZkYydUtjbzgyS1pZTjZFUVB0QkY3OXZGR01NT3FOSEhUSjNqSVBEeUpLM2VqVDRXcnF3Y1FoZjVxTEFlanh5cFJNdU96emcrUi8zVWpaTUxsWU5idUZwQW9DWFVvdUJOVlA0bm1RVlpTUkJzN0JyTXNLTXp0cWFaYUVNM1dVSTE5MjRqMG1NN0tzaWNaaVBMVzBmazF4cTFlU0sxbHF3RHpGN3RtT2V1K2VrTVFwTFhiWXlpc29JdHpLSXBybG0zTy94N0JTL01xQXRDZnV4cWJpVlQ5aXdUTFcxUlE4SGFiWFgrTkoraWp5T21pb1Rqb09JbExZZ2U2MFhPM21KNVRibTFTdGRRdFN3Qk1rclpJOHFGeERZRXRGSlAzR05SeDZlK0haOFI4d3QzYm0xYUlIR0xOanFzamtKemZyOW9ObktkWnZxdkRaTWRaZEQwR1dSM2NOeE1oM0pBNzdnQWQ1Vmw5NmhlbXFiTHBiSHNlM1RRenZuOVZRUHdsYldDZGxKdTJacFZxSFl3QTY2TjlEZE1KelBGbE1TdTFQVmxTRVpTT0VST0hRcmgrZWo2U2pCeGpDbW1oL2lEbjdjSFMwekNJK0NDUlhnWURIMkEreHJvNXFWQVZyMW1iRWM1S2d0ci9VcHBXSDVsM0R4cm5NbEhsc2l6SUtZcmg3eWZsL3BZWGU0dCtGQUpLMHNSNzNHUEdseHRNaDRpTUFnTHBFcFVmeDNtZFNVQjRqNjJlTDVUV0E3VUhkOStUck5tQWxNTGI4ZE4wSjN6ZmU4NDY2S0psc05veFBsdDg3MlBRU1hQM1phQUtDcHNpZzRYRXNJdHRkMStrNEY1RW44ZTZBUnVVVU1DUmFFY3pNOThVNmRGeWVvQmZFWnBOY0VTOEJrQ0l6b3FNRDdwL1lpcGFkdXJGaEcxNEh4eG1VbE1rOFJrUlB1TkVwWitMMjZTK1hRd2ZBNEoyVTBweXN3M3htOG5IZDJ4L25JZUNMNTFwakplVDltNUFnMTlESytpOTZXTy9LbXNxMnh1WWV0K01RSmRuN1ZRUm11Qjl4T0Uvcll3Rkp1V3RUUkVnYmJjdnlXVXBXNlo1UlNxZC9PR1o3V1IrbUkyVTV4SlZlSDJKYk84RU9iTnB0UkYyNHRqWVV3eVBpck41OHVQZWZZa2ZUN2ZJWStIZko0anRGNE9Ec2hmTEwxelM2elBSUHdoZzZrNFNLQy9VbmdINXVjWXpjTE8waDNpUlFJNzJjRGRsd0dNckZ3QjhUTk55akpERkVtbmw5WFJkbnVXT2kwYTc1b2dRSUlGN1hleDN0U0tUZWNtR2owVERNaGpXQkJIOUdPazh6UzZ6K3JCUlFRMVh1NlJ6SW5heWdmckI5TlEzd01FdUNsVWFpTi9ralFraVJEeGducEN6a1hpdHVFL2lXVVR5QmJEdUhTdm5JSElybG8wT2NFVVB4UWtON05HMWY3dGFZMEJ0bnpTNy9DaXIzd0ZQUkNPR0NiMzg2bWlqcGsxcG4wRzk5b0N0eFAxUGpsa2RTNnh4NDhJWVRQSm84OXppV2k0VTQxU3lUQlNDTTc3L2RRd0NwdDAwaEVQOFQ1Nmw3aURjK3QzRWRSMndUUFpUdmRCWEpJeXJwbDVCNW0xcm5qRktEeTFQaTdIcEczTndueGRhcWhISlpyK0NweTJlM0tERVJ1ci9lQ0dQdkFYSHZ5QW83Tyt5OHlsYTRZeklleWNaUG9HWG9TeGdQNkZ3dWtGN1NacmUxYlM1VjdnOEt1aWNwRTNzSWZhZ2JZSi9CcmxQMStkNEJJdlZ6N2QxdmErOWRhU1BFY2VvTWpUT01Da09Xd0NISURYUlpXL1dkOEV3cGR6cTk1cG5KaGR6MFpoWnlGcmlaU0VzVUxKUFduV3hQM2NlaGk2RDFnQ1R6RkpvdlBpRHBsbVZ6L2Rna2lEVmlXV1k0WHovRnFLdGNnQ3BtTnp5bStweHRzTWcrSUNvTm9UMjFjWVR2YXROZ2VmZkMvMGhPY1l1SWFyMzRZYUZ5V2lJTG1PSGFIVDNwcHpjTVhHcEp6Y1JNQzkySmZHcHJoSmgxbGM4dXRUNjkrYmtYRDFtc0Z3VDdtRmQvUSsyZ2ZpZldTbGNXTkxlbyt3eVN1cFV4dDZpNHIyTlNEWVdHWDNxVnQ3eStJRXRQWExiblZjTXBhdUZGMW9YTXZ2Qmg1S1NHUUdab3Z0QmRzUGNab3VnZm5VOFBWdi9QSUcwUnRscXZ2TXZQYm9PcXBEZlJZUGZLTjh1S3VOek5UUERkZmdwbVhsaW1NTEpkcUtERDVrOWF1Z2VxUGlld2QxTG40dlE1VmIvWXNsQ2VvSmp5M2VCT2tNSDRHcEhVc2dmTElZTjIycUM1VVlRNjhtanIyK1RBam5FamFUbzhYaTBYMnJnTHlEUFhKNkYrUHhxWDRnUDVUaDYrS1NSa1RqdDNpaUVXUm81YVBocm1EcWJHUis5Z1M4Z3RubHVVeUZZczBZeTUrYmUvbCtoQTZOWm5sY3djWWFDeWxXY21LMTBmQ3lzNEVlN2Z6M3lIelVQYzNzUm1MNVc4MzRTdnI2dUU4aDZZWkljZE5DQTdiY3N3YndFcmpib09abzRoZXByQjkvZ3p1bXZrMTJacVd5VGE4Y05IZVlodVdXNUdSNVFqM25DbFAxMEJNeTFOV214RUhOOC9JTUVOMkhBeHVHOThiOHFmbTNabnBsL0JuZUlaeDdYYUxPTndwMmF3TTNtUUNPdXlQZVArZEdmUWZvcGZmazkvTlZHQ0F2NXBJU3pXZ0hpYVRyNEduVXVTTmR6Y1d5SCtOUE5DYlI0dkcwRDVHNDZxSzhPWEc1dGZiUFVmcElHS0sxRksxK3ZiOXlHWkRmRUl6azNLVlpOWVJPaWEvb0JMT05RREsyNC8wVGZlMHU0dy9sMGw1V2lpTlVyUGxpL2U3SmYwQXhKUjJNQk1YckZNcDg1bnEzRUFnRlo1MzlCWEdVTGtMYTFRc3RjRDc4YnBsQ1NkQm1SeXJEL1N4UVZKTUpxMGJvRjVSbUVCck1GN0RHUmNiTzhacDlMbDNSQmlIeTg4S0VnVDkvdDAyM1c5TzBMNk5NMXBNeFd3VVN3MnN2ZGdjbVUrQW10R1B4S3ZkVnRjeDFHMlIwS2JVaHprbGNIZnZTSXZia1ltcTlYZFFWMVdOT2ZDRVU1Vmx1N0gvTjFxREo4SXRhL3NOSlgvcFNUenhvSWtMMHdIV3VmYUIxZFRUbnNCalFva0JjVlUyT3MwU3NnbW9GVnlJZUlxckpYVWxYL0d0UWIxdHBNVVE5ajVobmJVS0Q4bThCQ2M4akREcS9VM1hpSTk5VFkxMWxFYXErUjJwMit0OFVDRTZTZktkWUZhbjhvd3RndlJzOWtjRkdIbXJXVi9Xd3RxaEQxY3lxTW1DS2hTNmZtT3VCbkNFeS9ZRkI5RUVFcDZuZmpuM3Z3OXNPVTREUEJsRUNSWlNWZkFqV0lUK04wQmNpZ29renNKc21DdVB0MExZUFVwWWRmV3dJcENoU2ZvbFZEYm0yTDVRa1cyMmYxRFYwMklvT3R6cHViTFpHLzBPT0xENmxJT2pwWG1qLzZpV0xTeDFQeWdCNUNFS285aSsvU0lia2F6VGhOeDZaNWQ1b2d2UTFjUlZPZFlIMmI4RXRJM2R2WXpXSEdyM0Zpb3FjdE4rUTVUWkZicDh2TnN4eko1UURUeDVzUXFOMVlOOW9XUjlYV3VXUTRXMk9XaFI0UEtjblVuZkM2NXZtY3h5SmdMRXRXYjZrUXhOK0xYZTZ2SXBxdUVLVVpJR1ZRdVRuSk8ycWxNaXFoZXliN2RZNDduTlBUVzFRUTBTTGVwRnZGN0g4ZlBsSzhYQ21DVFdlQk01ZUREbi9MMXZwVVNhbWRFLzhVRVVhV2lzdHZYZExxSXR3Y3QrS09YY2NyWkZUL0hYZExNWnJBN1gyMmRmOXk3czB3QlpORnBOcEVabEh0VUxnUUV1b05reTh4YkNLT0Y5Z0lSdTRVbGw5RlVmRDduc3lTT2RxYUpQT1U2VGN6SVpTT0NlOHpWSjVwbldGbWk5MVp1b2k3VmRzZXFoOXVaNjZ6b0xuNmdCVUgrYTRXS0dHaVZYZ25CUVRwUHhiWjB1WElxTWtGS2lkTERqcktZMm1HL0NXV1hrT21BUDQ5dWcrYnd4OUtBdjhsTi83NzRUUmlYMWZDUFpzcXZPUVhuaDNxMVFnWmhIbVNBN3AzanpNU2d6ZnhkZDFKTURFRlJyZVh0V1AxeEYvUCtObXl5Tm1oc1hsSE5TMVBWV3RuZzhLam1TazNiWG5yZGthR0tqa3FUMUVSL2FBb05IWjlQb2RxSE5yem5jdkVOK2s0MGtOWnY4WTVjRmo0Q3ArK2NVYzdLQTRYbTZGWmp2RlBTemJDVlNlcDU2M3pwOG9iQ3Y2cklscnp2eEZVNWFXbVZKaER6RnBXUlM1aURoSUhVa1oxL3dRM2JrSnVDR2kzZkF3UHh6UnBXS3dQd2ZneW93VTJyaGFXRE9sSmF2SHZkT0pibUw3L05UbXo2blpzN0tOalNJR1dEQUI5TXUwTExpblYxYmJWRlhBQnJxQmtreU10TVZ3SDRKZHhDdU9lT2ZFL2pZc1RPRzRaRktZNFl4SmdnNjlaeTMzNzNxTm1kQzRORm9PQlJ2OXRMREtKUlZaMFVQNElGb3FaeUxrZ2FaOElUNWk2dzVuSXdVMXJGdmNTaEhlWktLTk9Cc3JIbW1ad0lTUktXV1FzWXFMVytmdkRZVEFEQ0I3N0gvb001a0h0ZVlUTzE4cnY1c21pSkZPZnAyUWhubG9LOXV5RVpuem9TZ0JZZjRNRXRUK1h6VmkwWU9uZ2ovYSt0VzdDU1c4TUhBVCtrTmRxRVJOK1JiWFNENkk2SzI4K1l2TWRmZUJFVFFuMmJwaEZrL0NrMDZUd1QrQ0l2ZjhRa2poTEZaZkZESG1GOTE5U2d2VHdONnhzdDlEUDBMTk9WZFE1VzJLcUxNb296MUNjU0c5d2xVdUoxcWJUTkhZRmtHTGVYQkRQZUIzanNhS2NDMW12Z1RqamcyTTNZNUlObkwrUzMvZE1QSXVmeGhScUVMRTZpVENYZ2xKTVpUdnpaYy96cVpwenZnU3JGUWcvR1Bka1V4c3dpeGk1OTc3bjRyK3dZWlBPeGVDSEI5VENnalk4SkxUbXBXaEx4ZHRmcFdCYTVLOWRTejZjOTJNVVRod0QvQTNpVjd4VW5xTDBlaWF3eEExVzdIZVJGWngzUzZ0V3MyZnFoUEgrdmFEanJzZ285c2Z5WGhLZnpsdmlBb1BoK1lqWFpTbTJKZU0rTUFJVS9VdGcwSitMZHhoZnhTZ2tvSjNKUEI5d2RlN3k3K2hKY2xnN2hKNjVLOVVhdzRPcEVET3lWWkF5OUdXVm1ITi9qVVh1K2ZRU3hhdVpVOGQrN2Zxd0RhTlFHNzZiZzNhVEdVTGI1Nnd6QTIzUllvYjZoNlRGYU5aK0JtVEFtK1RjWk9BMVNVNEgzU1dvMkcwbk10SGtGaXZWYStxdThVUU9FV1o4RDdHQ0t5emNZTG9ueUpTYk5BbWRrK0REN0RXTURYNzA4WE8zQlhsM2Y4R084aVhxd29Mci9Da01MMml1MFpVZUhzQ2hOSWZJUndYRlluRlRGSzU0Z3NZWC9kR2lIbzRsTHVNeGVDdTNZTkdvOFdpYUhOV3l2aFZjaVdvanVxYVowNmg2M1Foam13c3lkZmhFRGxkdWtKOFZnYXA3VmVVdjJBSVI3NjlseVFVQ2hkMnZ3WElreTYvTDArTU5GQWdydml2QlV6TWYyUE9pU01mdHV4TG93dndPLzFBcFo0bGx6c0s5dzRqMmRDWUZWRmkxVzFKMHBUYUJHNDdLK0lGTUZ5TTkremd1dVhHK0JBempVRFBsV29NejlDYTF0blY5RjFRVjVhd1B5ZEluSEdZNDdSbEFzSDlZT1haeEl5Mk5qdUFmZnI4Y2RHWFlkNGFJVFJqSXpSMEFxRjB3TUVxYmNSMDg5bXExSGVMYVhyT3ROREJkYlFFZ3FXTnpoV3JSNkxzRW1UTXlJN3orbkMyTFFFV3l0NzhTbVRsZ1A2VjFEOGYzbUJxcHJOYis0d004S01RV2U1aDV2NnJxS2JFai8wN21nZkhWNnI4NnpoOUYrRmE0aXZ2QllvdFY0STVsZktNTzgwQlJUN2dCb3FRbEU0T3RYOG54dXNyQlUxcGFDZms3SEowc2xlZ2V1UmtoNW0xckduL2FvSmlVelNKU3lzcjY3MFNJUWY0VWdKdEl6L0JOK0pkVWdYODExcTVtTUdRUlM3Wk45M1V4c0dEMUZ4bXJDSFNNYW11bUh6WGROVmViNzh2RU5UazhQN3dSZjV5Q0ZZclNRQ0NVQWZnNGJGMWFIWGJLeWFPdHZ2VDFLdmNBYUtHM0pzVjM4dEFMelYyRlRWOTRFS0c5YmcwU1Z1bGFvcHhFWmxKamN2VjdqK0U0YUxFSUtacVJRMG1CNGs0SVU2b2NhbDd1VVJnMi9oWDRpY2J5U3lVNjU1RUtjdmFubHN5Q3hCSVc0NWczZ2FFaUsxL21wSjdnb0gycC9nUFpMQUlVSVlQMGk0Ym5Rb2h6bUQ5a2VKK04zSExqblU5WDMzQ2d4ZnRhVmtRVjFXNVZHTEtOSVQvUk5rUXlwb0FOUFJvN1NnWjBDdkJraDA5S295MzNxVm1yV0UrWEFHSGtrYzZVNzdnL085bEhKZjJpZ2pjYjVjb3pyYVgvUlMwTlNwaHhWWFh0M0dJdmpvNjhaQmZlYWVuNjFHMDA4Yk9xY1cvZFJKZ0c5S01hMzcwS2JhenA3SDYwTHloMGorVWllVitHbklwQkVPcEJqVVhucDNsK1kvOWN5U3JLYVpOckdtTVR4dVZCSDh5T1ZSZCtXSnFJTWNFWjVXckEvYVB0SFFQaVppanFqWFNMQXF4Y3JDZTFDcFZoZVZGZWdKeGVBK29Yek1iN0IxdHJwS2RDVHpZNTZxNVlIeGRpcWQyVHZqbWZEYzV1dkhtK2gyK1JqeC9lNzhuVEV4YmY4RHhwRGFhMElwQWJmRnlnTjZhSDVvaDZxQ2R4MWpMRWsybEF0WnF4d3dyRk9lUG1La2ZTWGNUdnJyMjhKKys3bkRFd1drVUljTkUzYVVaRHNWbW1Cb1JlYis0WEprcVdFR1NmMThJSDJob1BVazJ5WnA1RUUrUXltV2drTEpBaXJZRlgyTmwrcjd4NEVXMytOTmpybFI5RVlqbEk0d0RTMlA1OXBuZDA4eFdlczBoZlc0NndMN28wdXMxQzlrZ3VqMFM4SklWenoydVlIRnV1cnFaRnd2ZG40dndJanVXUG9YNGMyWHZlRG5qWFp6VkxSZmpGb0xSZjRSYlJEcXRON01yOE1hSUxBOCt0QVZ4UHl2SXVpMnZ4eVJ4UWZXSUprQmhMZWdiWUxtS1IwcUV4dDdVcUVJcldxN0c2Kzk3L0FoYWpHeEdlejlGSkVtSkdJeG5UQTZkcmZkMkg3RHZ1cmg5bWdGdHRXYWN1VW5MWHhGVkhOdVpaMHRoaHV0NDcyRU9hSzFFUm5RYjV3ZUdvNjA1MksrQVJzbkRYOVNUVzRyOWtuY0dlbUxIQ01DNjlPYStsY1JLTm0vMUJhWXFaWFVzaDJTM011dzFMeXlYdU1PVGpnd3hmMHQ5UVM2TEFlRXJJaEpEN2pidXIyeU94Q1NYME9NOHpxOEgvVThEWS9LekhMd3ZxREZMYlBicUNoLzlJd0hJRnlOVk0rRDNnc0p0M1JNbnZleHkrWGp6Y2YyNDc2Mlp1MnJqZnczaE0rRys0ZEdWNVhwbmlpM25iWkZkUTJvUXBIQXpoN0lBOGM2VmF5MXZWY09IOTh1MzV4TlNDRGRoT3JFNFNwS05iOXAwK2NDY0FTaDMxNGtPeFNDQ2FrdHB1SlhETk5Sems1VGZtK1pUeU9yN2lpc2h4c0Q3eVdaRFl5ZTQwRjdsNWV1SU5kY0NhOTRFWnBkVU1jbDBrNlozay9VKzlQOTh4S2VRTVRPeVVVUHZKZjRpcy9WMVE0NDhkZ0tWbTJuM0NJVlF2L2ZYbzBUcUVtTmk4akRtRTdxZ0ZoMzdPaUtLMFpBTFBZaXZNVnJucThLNlVtZGdhb3MrSVJHS1ByMk9Gby84clkvOS8xTVRxdXAzTkF0V2Z2Z1k5S2RZSXlrbXVLTXVUL3RqVFZsVnZERWM2bC9vN2Z1a0VMNVFsOUFmRlBsb2YwWk5oRXBTcUZEZGs1akszRGZnUGpnQXlMVFNvR0lNMm5uajVpb0M2RXV3OXNvSU9iNkVrcTd1ZW51a2dpclFiZ3hZcU1XKzB4L2Rnc1cxamNLQUJvaTRzV2VlbUhOc0ZMcFdvZENTKzJqbE5jbWJTV3pXUzJsK1JhU2RJdS90VmhOenV2R3JzS0RROVRUTzRTSXkveXRjYzhYb25UUk9ZMnNHdzV1Wmp2eitZN0lKL1NoRk9ZVTBYd1MxR2NSMlQrQm9zc3MwN2NUd1ZDUjJLOTNkbVVnTlIybm13NkFNaG1Kc2Q3ZDFaelZmeEsxUEZwamVSTW9sTjdLSC9HaEtHajVpVW54aEREenVuSjlZblovYW9QK2ZBNDR4WWRPYTlzeVZSMGRGQ1IrZ2pFcXBRbDg5c3U4WFJtcS9DYnZaMk5HbzROYUp0U015dnFQY1lQdVNjc0RIZU9nOTZZRGFOMUpqSGtkK0prR1dUamR0WWE2azlYMjdLV1BZWDNnSEJaVFkzWWU5RWFNRWlna1lLZTZ6K2lMSlpOdXNWWlA5VVNBVWpac3JJNDhDUkhjUCs1UUcxZVNzSmowYWtFMnpZMFRkRHJ6MGFxSnZDeGRuTExQUWNUdkJVaU02eXdzMW9GRld0OU9ucjQ5ZDRBZFJpdlJGYnAwVGhIdURzTUlVV0pkQkczTEZpTjFXWE1kQVp0dmluRjNraC8zd1F4TWk3TEtDblVhNjNaM2cxWVRRWTluY0JLRFIyTGxodVNBQWxORHF5d2tQRmZ4OEtTM1Rmem1Tc1VkR0h3T1B6dktRWXp1Qlk4SEdBd2NWNEdLaEVqNWFYS0tTZ0pjZ21WRU1KM1pUbmthbkNXN3VpR2lpd0wrZklEZkpKZEZBYWM5TTJ1Qlk3WnJjbjJkK2k1ZHN3YkZlRFhFN0hOMHQ3TUxLNXNBOG5UNzZHUkZIbnpaY2MxWDlnVGNWdExyUEtlRC82Vk8xbVdhNGhjQ3o1OEMyV2lNQ09zU3pSSlN6S2FJaVVCdmlubG00dXZ4ejNwUmpnUElkNC8yVzQrZ2NuNWtJRC9mYnVETFQ0WG9XTDFXck55bTZjcS94ZjZ0TG41d3poR2xzTGp2UHpieDh5WmJlOW0vM2o2UHB0cDNLbGhoZVNVaEVhNzdRejlCT00ydGovZzJaNktqVSsrWm44WW9WcXNwVnVxcmgvbEx0NmdoSkpZMHI4dkZwbTVzb09uL29vS0pLU1pWcS81ZE9nNGhQSkttSnpiTThNOHhRbENGWVBSTldYdENiVVR5TzBHVmxONkFLQk9FaFVuS1ByempVMU9PbUtxVFpaNXgzTnNoRFI2YkhFNFpSck9ITkkzWDhYOGtOWndVSFR0bnkzMU92dkp5U2pCZ0Q2SXVBdThiejdEcWUyTG5ub1lBMC96dG0za29Wd0ZFZEZ6V0VOMEtSSE1yTkt4SWMweXNRNGgxRDVreTNPSFlCbE5rYWltMHFjbTh4UTdOZE8vdThEK2FSK01aenFyQVhnTUZ1WHJzZTBPSkNnZFJFSTIwY3gwbzZPUXA1WDJsM2pZZG5ybnlYbFQyWkJMR2lCVnB2b0pQMzFkNEhsMXN1NDB3L3R6a0tyZ1RsYXRPcXdXaVA2Wm0wRzgvQnRKWG44WFMvSUs2TUdtQnBhSzdRREpqNG41emlyMFU5aW1lTXNvNi9ZVjk4MldGaHY2a3JGQmpiMzFjR1pSZWRQVUJ0TVZqREdwQ3NveGFEcjZXeGtKcWJCY1BpL0dWTnhPVEhRV3BiNm5VWHR5UzA2emhtZmFDQXc2NUIrNjVlL2lkd0ltWkZJWkYzV0tQRjdzQ240dXoyL0NWVzNHZnVjZWtCVHFWVEJoUmVDSldaMG5SNzNJTkJCZjRsRmFFVEpVYkZFTkVtOS8zUFJESTNLc3E5dks0bk0rMm1HcHUxUk5nWTEzamFhQzJvU2J2SEhJSnN4ekFxcUdBR0dGT21IVUEwTjNaVWJjcCttTUJrZTZqRFZ4NzhDb3dPMngzR2kwWUM2YzdZVVhPYzBwNEhreG1WanBOSmhqUVcvVkpwZElPMjdVYVJkeTZKZG5hRklTT1QyRll4NVYzc3FGaU5YRENQUXRvNGhSV1UrQmVIenVHZVVYd29qZVRCa0lycTMwVHVjcXl4bE15TXhwZlBuYnhNL2IyUnVTK2dxdHMyOXJHWjdCV0FUNGV4bzJza3FKVGlZTEpVckdnVmtoU2JMaXRIK25HVmVwMU1kRlFlNzg2a296andFSTlENTZhUFUyZHJtcnB1d2tWRHhFbm9OL2JZWXA2ejRUeTlJT2VpNEFHSDg0YmIzNXJ3TEtmaWRQQ0kvUTM3aWxabXQwRHI0QkdzTlJiTmRDWDdSU1hEYTdkU0o5UFB0NmZyNFJWaGh5SzJQTU9wbEZtanVzd2lUMWJmMm5ieGFQUU5FTkk2dmVXMW5nNGZKZ3QwcElSc05PUGNQZ0dkQTBML2x4TTRqQldYWTBkc0p2WUdYd0thdDNmOGhraHIzM3NWM0M4dEVxUnVnY0ZrZ1NiR1ZrRlJhWjhIb3p0VUpNNWFqVzk4cHIwU21Eb1ZMTWs0MXhYOUhvbWQ2UGZaTnZhRzBpTE9JYVlrdVJpS2ZSbnFxaUpITllyd2ttUk9IZENnTll3STBXcURQRVl3Tmo5YndRTXhQREpUM21ZQ3o0Nm5FbmNOQ2d1T1JlSWMvWkJLekNKT1h5Y0t6c1c1S3VHbnZnZ2NzcG9jREdLRHRKQTZVYVhHaFZxUnN4Z3NadnRZRlA2bUtiVStTcExaQnN1eWtEVEVYNVNqclBOeGdKN0JUNUVkTUNyWFBqYllEa1ZteE95cWtNSEl5TkJGY1BSYXVjZGV4VDR2QWp0bHpscGlZdmJacmQxMHhlRkVoU0UrQlJOeXN4WFB5Z2wvMkViUjdSaEtxT0N0UWxxQVd3dEJGeml6d2xRdmM3bkgzVjZKdld4NnpDaDB0M0lBeW14R3lXdVovZ3lFeVRxWjVmVE9KRjZVZWtjYnI3SWJseVVYSkhEbFJmT3F1c3haWVgvSzViM0FLRmFBUGRaQ0dJSFBSZGd4TURYMGEzUmt3Z1B1VHFzZFlKOWd4U1E5aVJqSlE4UkFwVnJRSGRFUW9KUWtCYitJUlZ0MVhXRDV6bjlwOG5xc1dVd0RLZ1JIVXJyS2g3MHBVU1M2S0FDNnF5VHRIVEV0aVZwY2dmNU40ZFZnWXZzbDlhWkVVUURjcmNSV0V0bGgzaFI3YXhTM1prd1p5eUl1MWpQNHc4YktzdHdJM3ZuNkI5N0dTOUxHa1M2UWJXdkNRZkhYVFpxZWRhY0VTN1p1S05Va1BxekFRYnA0dzlzSzBTS21vYnQ4S1hFSGJHVVJ5Z3VzajF2eXYyZDFWTk1aWlNhemEyWUhyNi9wdSthclYwSG5pU3FObVRJb1hFd1RSajErclBCUjRVYUZDcVVWUFVHNmdESERsVVY4YWRmbVVVSGdoVE8vOXlnUTE2R3BKZ05ZSWd6UDI1WGJ5UFpLc09KQ2VvRGEwbU1tcjVIVW1kZERnMVJONENzb0hsQTJUby94emRmSXF6eE5obXg5Q1NQNk0veGdiMHJWUTRjSHJZbmFiSFdiWVpNcEF0NDhmN2JubUNnTDBXQmhjOElCRFlHZ3ZUVVM2d1FMYmhSOUY1cStsU3ZZZkQyY2ViMjZZS09HbUtTWTgxOTNNa1AzYTFuT2NqcityZTNBQ1MxekMydzYxNXNUT0Z5ZWhQMDQ0alVBMEt6Y1EwTmZkVTNraFhELzVHQkdyU1NsRmRpcjNteVFBbU1SSnY0V0dUWG1vMWpSbVdTWk9hNUNyRzl5Ynk1Mnptc2czOGJNczhCREx6cE8vOVhIWlh6akpQbFNTYTdlYk95TVZqMDhpK1FzTU5TZ1p3SmtnSGdJQ0VTTmJpRjlTeUdWZ2FCbEIvYlhseXZUSStJVjgxcUVUdDdCQWdPcHA3TFRXRkN3UkVZdlJDS2V5N0NGalMwMjRiRmU4WHp0QnBVMVNXSWVXN3FOa2dDNEZCdHB3ZG1iaE5kVVlMZlpVRy9TWUI5LzBnYTZjTkdTMGJoV3IwWDhOWDdqZTJwK0ZhYmhScVpVQkZnVnY1anI1Sk1WQ202bjhnajY2anVUcXBHcUtGdnFudnhpQ0JOdG1vbVMveUJDOGFUMTJFWW83bjF3cmdvalNnYXlKY1M4eS90MU52dm5BYUtOTXdaZFk1ZUJuc29JRU4xN21JTVJsZXo3YWIzTHdtV3RObmJrbmVPc0E0V3AyMmpHdUF6eFB5dzdSVmd0b0NBQTlDekdNaGNISFRDUXBEa3NjaEthVHRjeWcyUTJoT2VvYmEvODRNTFNnRldIYldHc0MvT202RFRQWTNBRHpiOElJM0xZN3FVYk9Hc0kwaktML2lIckswVzVoN1FzMCtuYnNFbmVXUWorSHVPTEZqSHF1YjJxSG1hMHJoNGU2SWwwZCtCNGNvV1dTNkIzbEpzOFArVVBRWFNrRHVXS3labGw5eEFlODhTY3lwS0FwaVUyRFpWT2VhLzhUd2l1NFNYZmxDOXJVL20wN21mUy95MTN2dzBxQzVUTVpKMzFmTDhWQnBkWUczU0JXR0VBUUNUVGhORkRnTEhSaFNsbzFVWnNSU0VjSG1IU2U3MmZkei8xaGs0UTNISGwwcWppK3FGWGFBLzdTR2w5OHhpbnhQcG5RT2JldUViU3VycjlRczdISU9lL0hiWWhrMGMraE9Cc3cxVk1RMTRzclJnRzVETTRRbWtJS1g2enRhbnlYbEp4aUs2SnJwdWI0d0JwUEZBdDFxWE1UanF5aE5wZjVVK05ocy83K0FUeGhvbTNrWjlxa2JRZzUzMnZ4MmRUUW9sMlZMbTcyL3ZuSC9vRTZLdlZWcWttcjRSYVZkVCtndERsVXdILzNoRkI4dGxzem02RG1Oa1ZsNE1aa3lJZXhZandxbk5wMVQ3WTJpdGUralBXWkJuN1lmaFowT3F4K3pONndENkl5ZVF1b1Nvb3ZreXBIOXNDRlR6REZjSytMWHFGL1MzMGV4NlkrY1pEMXRSWEZNSWplajVDTmR4dEdhL1d2OHRYVU55bWhxemltWmpTQ0N4Uy9NZDExYUJZdDRVblhDSEFSb1NqTFREUXJTTnQvcWpwbkpqVGZkQklsMk1FNzZBT0VQL29zQ0dTMG5RVGRhWTNKTXp0OUo2M3VYbnVMOVRkdHVtNTdvUDhESzRKcW8yQkxxOHIrOWVLeUJVR0dvaHg4NzJicXJ1c2VnSThONjIyTWdSbStyYWlEQ3ZpbTRzait0MG05eW1aaVZwMnI3Tk5xZGdiYmU4ZU1pS29UQVcrajhJbVF0bnV5a0hucThTZDVrV2wvWHExVjRnOXhSR1N5SEJGa1dYU3oxblNsRVJsSGhIbXZTV1hiemhxZm93SVhHU2ljMEI1cUt0aHdKZ3BwUEhuYlZvQVhoNDcyY0FmTXEraXZKMGk4TythNFZZUW1sbSs4dFloUGsxc1pDU3BuayswRDN3aDA4QkZHRFEyUHY5eUZQb0w5bDdKU3VSZjgrTkFGT2lrNmZxMmRTZTFHcGJKWU51YkdTTTJjcVo5T2V5WUUzSDF5VFBrdkRzRzRjNWtqMms4cHM5UmtCRHptUjliMnN4UFpmbzVYVlZ0ZWNtQjdvME9UdzByUDdNNElxN1pXQnZ4YnlEOWJueHY1Z2tFQys2emJWeVlQMGFVUlRyL1lQWmE1KzdEQSt1YUVleWtrQU85dzJMVjFCQ3BhMWcyVEQ1TENkOEl2VmQrOXA0c3VkanVwdE1EZGZvYVBsdTB2Z0xNUkpkYmd3K0ZYNTAwczFKMWFTU0FQQ01QYTJtL3RwUW5xeHNvbk9wSnQyM3I3cXdFcEt2eFJaL3BBa1NMbGZKZUExdFhiSi93a0hFU3R4MWE1NUFpL0NNbHBGZkQrR2NvQWFxSkx2WVU4bStwVThyQ1ZPcjUzNzVlUVN1ZFc0S3NZOEVYdlRWaUdoOE9QL3Q1YThRRmZLelZZaUYwcVUyaDNCTGZTUEd2Wk9HcUpLNzRSSlI1MmRRRXoxdCswNnp0OU9EcVpVNnZKWWFjMW1sdzE5Tms0dDFpZlBnc1B0Ylg2M3FUbzNYMzJublh3cEY2WFFqRHppMUJUOExGSWRvd0ZGVDBsTGdyOGxBZjNzZWtmTi9UQ1dteWJUWHBVcm5CY09SOEhWOENlVDZYdSs5ME9GMDVLYkRDdXAvQVBKL3BMaGl0aEFDeldjckVlL3RENmQxbWtsclI2b2NkK1dBaG9UNm9FV3BkcFJHOVYybGtMSVhPMXdTOVhJWDVPTHVmclY5bFRwWXA4NG15cjc4OFBFeHdCWjZBalNvVTJXaDFTczltUm1ob0N3b0RSYS9hRXFRVDhTTDVaRysxUFk4OU9BR1U3bWxiaGtuejJ1dG5sZ1MwWFM0ek5BRS9kdEtXOHJuRHRWaHRSOGNFSkdnbUJUNTFwcGx4blhnbS8rdzJiTW4vaEsrOWhWS0N0d0Q4SmwxcFdQV3pnSDl6MkQ3ME5iQ2ZEaTVvK0dxaUpzd3VjazdXQXFrY1Vub1FTbmZPNm1WSnIxeFdZOFpzNnE4MFFDSzJoT0JqN2VUeWtnVGcyd1VyOWhaSHE2QW9KZ3NSNFNDYk94ZFlMVi9DcjdKRWtpRGd1ZUIxdjQ5UGJQcU1yUWpKaytzK24wMjA4Ti9LbTFUN1pDbzBTK09kUlY3bDNSb2ZYM3puandyQmFtSkIxUnM1RGxvblp1WDk5aEMxcVNpdnFHV1h3c1oyOEhmTmhVOVdpRk1RajhieExRd1ptRk91UkRmQk5yWnpyUzdZWkttREVoOVVXUjNiWFBmUm5zYnptZlNrQldYWElGMkwwRmZjN1RvdkVQYXJVbEFYZlViaE4vamFZYldzOXNjV3B4MUtPb1Mvd3NBUFRDeHlIbEU0OXQ2YmVhcXBJbHB6Rkdqa1pETFo5SnZtSlJWUnBQbmxHS1VWMm8zZzNDNXJYdFFzRG9iYTVSSit2QTlMZW8rUy9sUG9YTHJBdDBLM0dBRmwxZHJxay91NmdBVUQ2WGRZMVFzeFZUSjJSNjRGRXF1bXJEQVA2Q1kxS3NCd09IRnUxMkZOKzdSMEY5d3gzK202aVNCODdVd1Rwekk1OE5JbzhrRHRkRFRHdWNwTDZGSjZQb0xyMkdvR3lHOFFrbnp0elRJSUFHVjNiL01FLzFDaUZqcXVsbm1ScytRczdLTTE3d3h1YUxNUkJIL1hBV2k3blBuSlNkMjFNNkhyVzE3QmlKME0xMWFlcXRFN1FJYk9jUW1QRUs3MEdYNW5OOWRSRFg2WVF4bzZwUHZKc29IdXc4OUNHY1FMSFUrdHlvQWFpNFpVTFR1Qm5Ic2tWOVo2ZDFPQ3c1Nkg0YjZuMng5enJUTTJLUm9ETlZtY0JNSUY5dVFFQWEvemJtcnJwQUtncU1LS0lxWnpKK2dlendKRmJxaC9jUWg3REk3dG05UG5wRmZqMXMvcEt4VEtKbjVDcU9RbTFsSkhDaDI0bFpONHFOcFFmSUh2aTlmYy9TSXp3d2dUcTVVMnJOa0ViYUVyOG9DMUprQ0hkWWhMYjAwQ2dpamlUYjRKaUdLVVZmQm5HRmRmZFlobzZFdDZiQUpwMWRDQlZLaGpSNVRVMnBBWldoZkk1VkZta05UQm1TN2ZBeGtwSXpYMm5UdDRDS2dHd241T09aVDcrbzAxbGRBREhSQ2xFQUlETGgraS92cUlJa1N4ZGt3eFozRlZRK1NUNkIwRldlaVk0bzhocWRVZW5NdWVKV29ROThvZFVLQmJUSlF3aWxjeDM2L0krUjJrbTRKNDYvZE9GVjkrYXZUdUVIaVRSSVdvZjJJNWdLSDBXVEh4YTNuVFNvMndCclRqeDJpc1NsS0FyYnJFT3p5VlhNL003RkJhemhWalRURlFibkxtbXlUQk1tQVFxTXhaRk9NUnpKOGtyMG9EM0FteGMrRzVmREplVXBMZGtkQnhSVXdPZ29tbmhIcVgxVlNtVU1ZZ0d0dGVDY2RqNk5lTWFGOThHOFIzdVYwRWlWcnBMaEt6SE5jdmJNV2Nmd2pFQWx4WG03ZjZ4RG04ZGZ3RCtZL3JVUVlBN2wyNmxNYzFEVmNSeGtvRXorVHN2SXNORUNzQzZXMTVadGprMEZ0cHpmVW4rNXBMa0JBeDI4N3ZXdzkzV0FiUVNyK1pSeXIyVlJnYlJwMnc5dnNFMGoyWDYxTWZjV1lUSmptVlVhWFVYOEhpR0R3K2VrQWNEcUhucStleXVHUU05RmNPUjl3aHdOVXFEbm00U0s5UHhzYWkxcXVjQk9LUFFSRVJaVTBPbzNFTStqdWlUMVFtakxIUUs3TGdxaGhlQWZrVkovWjhzbldib3g2aE9WWjg4Kyt2Qmo1SVdHWUZKOHZKL0tjdEFmSnRNWmJEdVVZbDkyZHJ0VXUxekZndVdMMms4Y0oxd0x1WVBKSk01Z2pLRXJDcmRxUzFJTmRxSHhqRmhLOVc0NE55Z3QyRG5Zek5IZExZYWlJSzNvQ1JxbThaeXZMcnV6MVFHRGZhT1dSN0IzTWFzcEYwR0ZiNHFncmxBSHZhQ2xNeEpINWR1TE4yUEtPN1RwTnNPTmRsRHNUSkErRGJobUluR2hjQnlzdmtLd3U2ZXA1ME9BWUY3QVZUZE91N0xUaStCc0x5VVdtVlczWjgzY3U5SnJEMlptNHhwTzQyTm41UmRVTzdWcHN0T3h3dWZxUVNRUXRHMktpTVN0bXhpN1JLUnpGald2V3FGNmpXMVFMNEk1Ti9vamI4eENWd0VPc3lzV1NqdUdxVU1oZlZtdVdCNE5iTHBpNFYxYytIQTJBdHBnMXlZcmgxeHUrbGhDQVJnN0hBMFBtczY1T09TUTl2QjdySVZNWlFlZmNSTjhjTk5FM3JyTVl5OVc4VmdKQklPU2hBc3hpQmxReEhkMElHL0t4SzNzeEFsUVpnOHNmNXZKbVU1aFJQZVVFV0dSbkJQM1ZRLzdHWU05NVV5NnlnblJNNlpoVE1IQ29aWW9LTUVlWHFPaVVUQzR6cVZvRFB3OW5qSUZ1aGh3cXpqMXV4TE5LeUc0WEdtMGgxSkhjWnFVM1FSRlR1U0Y4cmR6NDU2NG9WWWRNcmRtNU5HOUg5RFFRUzlEMVVuQWJHWnArT0NEL05IQUdlSzl1ZFF3UVAxSFgveFpsMVpHQkczbTNKY2VMeVUvWjFQS0p0SkdDMzdVazlkblFHNnBaMU5SSWRMV3drK0p3cDZvcm9xVUtUc0EzN0VveWtsWG15QWVJQmFiYTNsc2g5cFROUlEyQUxkZWJiUjJ1bDBLUVk4LzJ3RlhOTXAvZHdhcHd6WFJPSzBGYWJKSTJ2OUhXZXZ5ZmgzNFBaTWYyNEpweUQ1SE1mVUFaOTZlMThmdzlVVnpHV21qdzU0R3V1QmtVOXdncG5DQkpHMDFkbzJlZ2pjYUlhS2JyM2FDV3V6RlF4Q3VZYVR4Rm1oRTlOb1czbkUvRUx1K3NWTVkvS3ZWdG55NnZFUmtUOTRqUkd6TUZHdWpCZXNDeWRrdTBXMmhhQk1tTm90TEJSODhGMllGN1lEaFYzVEpVRTQveW1vbkhhWEhKSnlrU1hMbzk3VHpabm8xRmVOOXkvSWkyT0I0ZS9DVW9tSjE0a0xsa09jeUNOL05temdxL21EdGhlQi9iM256THpqSWd5akZycFpkb2hhYStlcVU2NjAvRjBrOTJNRnRxS0w5c0M1S0hKM1A5ZWhDeUpIUHJJTW8rVGk3cGw1WkZYT1gwcmNoU3NzY3JnR1lkM2ZtaVl0VlVWY205UXR4QkYvRkRFd3drL2lGTFYvRk9odTF6M2NJeFJuSWQ2MHA5RCt1dGthTHJaejBzaTZxQkFwMmFiTmhhSytzVnI2cjIxQ3RLUFgyUk5wcnJGd05nUHROemNmbzBLenlyV05ZQWlkNit2VDVscExxQjdLbmMvOXpid1lJVFZOVkI0TThvRnA5QW9oWWE1UkJpUGcwMENRRWR0UDQ1TlREM0lwR3k1V2JjK3V3Q0grMWE1SFl3b204K1hBU05DZEt3bG4ydkROenduWTNiTmJpL3M0MXp6c0ROZy9sRVVGaVRtOWtnWWpTQXhXaVpEZnBGSzNkUWJZMUF1eTB2V3NOWTZ1cWxJdk9YditXUzh0UXRUS1BPQmZxWTNnTlRmelNiYVZVSDJqRm9rOUdpUzN5Um1pZFdidHRlOHFMaGY4T0pnd2JiS05sbUc4aFhyc04zSFlVK3E1a3RObHl5ZVB2aFlRU1d3Wks4Uk5GZXo3eWJjdTVCUVFXVjNoQVJDT0pGbm1PVFRkY05sMDlqS3dWREhIdmlyRExUK01nMkg1dEZDRGMwTjBNd3VCWDBEU3NMeDl3Y0NjdWZBZzJyUDhrejdPSGVqUGlKSTlJNmw0VW53VFY1VEI4aE9ybmlsY1NEMm1LTGVRMDczWFNvalpUa1ZtcDVMdncvRSt4bDlIMEc0WS8yUmp1Vnd0T0txWjBpeE1OMHQ0UWE4SUF1SG85Z05QV0hDdkpSVnl4Q2tJSkozc1pQZ0cwUWlTb0srQVF4dHI4R1Q5ODFibjRQTnlCN0tjTTR2WFM3bDFOY0ZIUUFrLzBESVplci80Q2FFNUVqU3FlNkdPOHhpdDBBdEVOTWNUd3NocmpRbUNYM1l6SzFEa2NZNk9sclkxa1l0YlEwUGo4cVZYSE9ITVJFVnZ3R3V3SytvbHZ5ZWJqaHMzN3JJTmFwZWRSOEUyS0NyTkNwOWFDbXVaQmUwQSt5cVl2clY4ekVuUTJCVkpvb2lrWFNmN3NONmxEdkxONE5jZHN5NEp6aUZ3K3VLYm1NL2RkYUFEMm10OUpBOVpqM0E1ajBLY0Jpck15SGs0Y2NwWHU0a1ZLTVFiamJMR1U1b3hVdU9ZYkdhTmtIY3Y0NUo4b3R2U1B5MzFhN0Q1RDFYa3B6TURDUUUzREFzNkZHOFBiMVVXZ2JQZ0grS3o5ZVFZM0Ira1dnMW5mOE8rWFRZNkVRQjAxMmhwdnFFWE41TFRGTzdxc0Qrb1IwanU5OWJOczdQc3VwWGRRNzQxbVpPOVZJQ2h3YzNXdDI3QkgvRHNTcXpLY1hTTUhDM0p6QjloeWxyS2oxZFBuZzhOQTlBQ2tsZVlzSXlTYVVvaCtydFp5YmVoSXVLYy9aamFKWEUvTXVUN3ZRcE5VbXU4cm4yc0VpbVZyVGorS1RhY0hmcG1vRUFvaGpIVUx4cEZCWFZUcDRRc1hkZmptM2pKays5V0gyWEt1cU54ckhjc1l3ckE4UTVMd2UvL0R4Rmp4TWx2U2JGcEx5c29TSjlTU1hhcUVLRkZRUXg3SDNrbnNmOWlLSXhhTmNJc0o0T3JRR2NPUWFEVTBpQ0lqLzR0RlpleWRhdEdZbUw4eGMvdUZIMkcwR3cwNHl5T2tvRVQ0NVlLYUlEVVZjTDFubVF0L0VCa0dneThQeGZ1bjQ5ZlgwbytCTE1WamtaaXdGZzNmRVBHUFJzYUt6Q1ZuZkpST3FtQjhRa0UrWE1oVzFuOURGVUxvSW9zVC9peVkvWFhFUi9WVEhBVFVEMFF3eTBXRHlJWWxzcWJCY0VuTlBZUTBIMUM0UE5lVGNZRzFRbHRrd0JTSnMxTEdOSWFLS2RsV2hOc1NsY2FUcWZsWU1yQkc2SHFnUHFkSFA1RUNMNTdYU2YrUUlaai9pVHB0a0tKa1F6Q1hRZEQ2VWFlV1NOWmk4VmlmbXN2elk2OEM4VDRVNUJZa2tGeUdURUtxc29vTDdTeVdESGIxd3ZhZVA4MDFPTy9WTEhXNDREcGpYMmpJSnRPYlp4eDJPT3RXWWh2azVRRDFOTnFkcTBQQUdPZlhnQXhOK205QmpFK29hNWljSkc1K1NnMC93RTBJRHRwNWlRR0tkd0N6aWJDMGx2TDEyUWpXZkJhM04wVkp2dUZKM205dUE5eTRValJYSVJ4UGdGNElzRzkwalRRRUg4VHZzd0lhNzFqRVpGSzdHcjlSblQxN3FNTVQ1aTFDSHg1Vk81Q3ZSWXhIYzloLzExMVVYcnV2R3JwZjlvd3pKaTFRMCt1Ui9uVHRSeTJ0M3crdWVWWG5uTUVvZVpwakFOV2RjZGZDMEhqRzVWTXpxMVJXQXpFTGRGVjNDYk1MTktseW8yNzMzdWxMQmlEejBMbE10aXBVVUNSU1U5YlhiMVlOblA3WDd6aVFnZ09OVXhuRk1pc3g2M1JiUGNLU3U4d1JLRTJ1akZBMXNlR3NjMkhvMDhsTmFRL0ZsUC9IRXN6Nm9JeHBOb3VhNUhmSXhrM0FuZ2Y4MkVIbVphQWpheHZPR0xRMFlDeFdVZ1ZsTVphZ3lFT2Fqck9ucDlieFRocEFxMXl6M21HLzBpaE9yOEpFRDBEeFhHMHNtMEc1SGhyN2VYTDF3YUs3a3gzYkg2L3ZhckJsZmRSVFBKNlJwNVlxL3pqcE9UYmhPVzJwQTlkS1dsZExHMUJOTS9mUHVuemN1VzlncUlxUWtnQWt6RlloSDFmV0Z6MTFJL01nUUtRUklpRTBUODJRU3VmdzlUSVhIZnRwbEkxWFlwUTJ6RitsUm9WanF1VHFycHV3MUlJQ1ZuV0trS0xFMHRoOWdqWTFEZ0JSd1AwdEFpcC9LamNBSmI2UG5lVUpoRUt1OEFFU2REd0dLUmhUbEV1K0wyMDNyZ0dUTlZoYys2Y2ZPeXlMRi9FVTd0b1J5bmdOYnpHOWlSQVBiNXp2d0tGMFhlY2pvTm51OEVsRlhRamc1R2hjb0Y3VVBMcElETzhxdXlGNEtGNG9uOGNHejVreHRhY0l5aWRZNnppbURhRlNLRTJoVFRhT2sxRmU2VDVGWEFmc2JOTGFaaDFodkRheWNBMTdCNjVTellHRC9FZ2w0aFVkWGlGdENla2VYTTBxN1ZROTNlUmIxY1VrVGcrSzZ1dEVRRUdaWnFRWWdKeTduK3ZYWElxbmhPVWNIa05CaFBGMDlXVndXVW83NVEyZ21uc0NobTB5Q1RWZVhpcC93bENzY1JRSE53RlhaWHdUcU1wckZFTnZrYUVoblJRYjJDbkpza3R1TXc0dkJuRFdFcm1UVWlQSm5HZk1EblYvbkdYakRwdnhTbDFSQ2h0VkJCOHA1YjhWUm9vOUtoSUtmZW8xQzFUWmFNd1lKTVhDTndoakRtaldYMkxCSVFpWGlsQVZWVFptdTEydVJtUlZJWm1JTDJib3RXUHJxWDIrbGQxRjVZdlk1OHRJZzBSaUNFUk1LendXOS9wYWlNK1hBamh4cS9WMVJ0dVlYZFNXTng0SzdxcWlvSE8zZGxDdGxkUGduTkpwY2lYSldrdGxHUEl5OXFjeUpCQUptVmRNMVV5aTYrdENKc0xSTUx6RWFuMlhabWxlN1RYT0dManhwb21uWURDYU44UHlLZ2VISVpxdGd3ZFIwMklXYVl3cXUvcVZTZWFXSFRtbXZMMVhodHFCT2FpaUd6b3dpTkhhT1RXR0d2T3g4YzJ1bmYvYlF0MlhRKzk5Zy84N3R3L0Nkc1Z5UFRDa3hEaVFrNkkzTGpJZlpaeGtvczh1cEk0NS93ZVNCTHNMOU45OUdNTHZ6UVZJUDlIQTVkdG9nQzg5M1BEZHB6VFpkSUFYbUtkSnBVUFBSYkFPM2o3WE9meVdwaVV5Qmc4clVLSTJNWjIvRXp0UVF4Qm5rVCtGZVBMREkva1dRcFBqd3B4dVlmMDk2Z0h6QWRvTFZqUE5PZHV0ZE9FSmxMSWdBQ3VlR2V4cThlQU0vK0J1OVFDWUdlU01BU0xLMUpFbVhndzZpOTlzVVJlZEkxUGFadmoxejgrNU5EcUsrejRISkhQNkwxWURScCtoR1crWTY4UHI4dlBzZXI4TkROTGZLcG9mcVl2SnRNVThGNFZURkppK0FocG9MdGQxT3N4aXJYWXQzMVpCbXRtL2UxWVNDVG9SbHE5UHJDV3RaMnI2L1FHcWFiNkNKYnErTThvRi9KK3MwQitIdkpYU1RSUm5YTEZ4c01WZUkyRWl6NFFFbDNaNnc2d2FuRVNUUmtYZ3RHNHhZN01MY0VoRno3Ky8zSnJtd2tNSmZpdHk2QkdIQmZiZ1d3SE1zWGpiaDR4T0ppcURyZ1EwaU5ubUlGcUZkRjd3SGUwSG92SGYwZ1ZPVVFTQWQrcTRxalZ0NzNQK2UrcDZ6bEdSVkpJM3M3MWU5aVpYZTZYc3ovckFGQ2F6L0V4ZHFQZWFhTVpGRHF3RDI1dTRKNmwwNzMzd1lXc3BFWHRpd0hrNjZ1MVZ6enpudFRORStRSDRPd1NhL1dkL0Q5dTh1WDVDanhyN2wvVTZna0haWHRmczVKL01KeXgrQjkxMnY2V05IMEdUeVRtL1VVcFRFVmFzVTdibC82YVRsWVlRQ1NrMm1kS0RIcytHdHpmdnVVcVlEL1BHOXdhSW4zMy9YTlBxWVJJM204eW9OTnhjMzh6enVnZVo3SkM2QVY1aTgzRkZadU1yaXdsYmxIQTZpeW92bjJqZ1VwYk13YVdINkJBenBIMm5UZFVOS2FDZUtLMEZxVG8reEMyWmtSTVdXb1Ntdk5mQjc2eHM0YTJqaW80djY0ZWN0NGUzVmdLdHNrcEV0OVkyNkFMWDQ3UWloN2ZyOWN3ayt2V3VQSFJaTlBxTERxVDZORXVCYzZ5VldjUm5HbTJtMVhtVSs0VUtrdnBvQ0syUlFKVmc1S2J3QVpMUGpSN3lucC9zN0Q2WGI1K1kwLytZS0tpZUtQaWVodlpDVjhFZzQ4TVM1aG1WN3pacEg2bjVJWWtnaGk3akNNUDZ4MlVqTnVCZWNkcDB1WGIvRnhxWDlMVDd3NElaY1l2OUhOZ1YrUVB0UEZyVXlQbUloQWZxZ0k2cHRvOEd5NnNWNnlKN2dBdHJtSlQyV2xMWlZ3a1hLTlo0a21reW1XNnZ4SGdPUFRUd3Jnd1AyME5RTmROVG4yeVFKWi9ibkhEcmNBMHoyREpLNW5LeENWWjF6RE9DcXVYWTZMZTFDTm0yYVJkWFJOZzZscTdJYkFwcmlldVJ6cGI0SzREdnRtZDBtR1R1RXpFcDF2c0p5TFliWDNjZWJaZ2NPNzdXSjB4QWtiT1FxOWVEbGhscWFEZ2pVSDhmRHl4aHUzVEZwa1JlQUtrbGNscEk4emlBalBGejRKTGpHcVF2cktnUDNOSW92SFhUeXAxcVgwZ2lYWTBWVWNFSncrdFB4VUc2UU9WKzhUYUdvRDVtTVJZYjdBQVMycWxPVUpYcFNKa3Z5Rm8rdXB5M2FqYktyaWI0b2xJaDJTZ2pNNVF0QnBwVUxaRGl1NUVsTmxGVktmajJOYVlDZG5aRG9IbStGaXN1Q1VpWE5CWERweXBFNHg0ZUlFMi93ZjdFNHY0N0krelZ3S2t1V0Y2TE81ZWFFWjRsU0dFU2QxbmRTSEh1RHdGcjVMVkkwVmdWbDRnaWRmcytueENqNzRBOXdrTjh3S3lDem03VnJWOHBtcU5WQTRlOVJ4V0VscU1jcTBGejM4YVpSdWtnbDZhOFY3dWZHT1FFbXZnMmp2YVhsSStqRkNjYzNUOTdxM21yYUwybUNJWFY0LzAxL1hpbStuNkl5YW9kd3lNbXZ5b1NUTGZrRGliOGpMT3krbE5oZk05amoxUnVLd1pUWVJMa2Y0bXJlN2dRbkpOVUpvekN2bzRveTN1bmtRYVYwUUtrb20vSXJ5ejhBRVc5MXc3NFFjeVVkbEpFWnNnVk1PZGtnK1luV1hEUjJEQWpaM0RsS09tbDk3c1pLVjhKMlgrTXI5TWdZYzNFcjBRTHllZm9tbHhiKythL1hZblZVcFdBMGxrQmVEK1hDeUdmaWlGSjdoK2xKRkdnQ0IzaXFmUlAyQ09IZ05XOE5XRHAzU2QrTXpBRHk0WWZrcmp2YXpaT1JlU1VIRlY1L3JwVlpYL0ltN3hkQ2hMNlRwRkFhNTh5eDl2VTVHWVBpZ2JHMitXbFNQOHJySzZEYWMxNU1mRVhzVW5rWTViS0s3SjVQalhUMm9uY3VOdXkxUy91VG4wa3hwVUpRaUsvSzVxM2lMa3ordEVoUXNRVThDekg1UFBncFQ1aE95aTl4RnRaSjVMWTZrelJCOWNlWWV0aGRUeXV3eHdqZHdaVEQ4Y29tcEo0SU0zSXdQL1hMWUFRYUk4KzRiNlNGRWFka0ltZEtlQkhuSERmelRiWHQrM2xtR2dZUHkxZmh5L3d1YTlGTG5VTmJVNkxaK3o0OTllZ21HRDFNUUtaS1NERjhCVi8ydDYyZ1I5bG9tbEFPZ3htV2FhQWxxYXhmNlZXY1g0R3prM0ltbjNTd21LYjJpYnM5NTRzZzl3NmpNQVlBNjJpMlh0VUEzREU4YUJNQnBVdDBIQmQ1Zk5jV0Y1L3FSQWRyODVqSlVYWEJsRkROenN4YkFOcUdwajk1QjZWUncrSnlYeGw2WlNScnZ2dnNwNGsxMlpaRkNEMmFJRklsOXBvSFUra0Q2UGJMVk9FZE5xMTlmdGtRVCswUHRqbHlZVmF2TkhEOXhvVlBzcHc1NkJPNGI3M2sybGtuOEg0VHR6enJzYmROVDNudlY0bkpkQmhBaEhoQXZkQXJKemdwS3hEdjhPV0pnL0dnOW1sbytuUC9ENHY2Mmw1Z3NFYTBEV012OVVGMXVHMW8reGNRQzJIcTJXb1dGdUUvd3FUNjU2eG5kQlpWbEdsUmp0UnRoRUd1aTcxVG5HalEvZ2tZUWdwSXNmYmFuam5MdnBHeXpJczhzR1huVDdkSEZrbVMwN0hqM2F5UFUySFV6cklHSFBxczVsOXFxcHpzMlluU000YXJObGdoR0VsNXhicC9KY0N1cTNRSk1KNUxnazFpYjRNbUhiMytEWEtjWTlsNFZQaElKSGVEZjZWdVJwNUNIWk9qTVpmRW9qVm01aElBOHdYT1JYMWtqOEl5VHc2VkxJVXFtQ0hIQ1FKSFNYK2hkSUo5WkZCMEtZbWtwOHBob1FIak5MQlNYWW9lczlFeXJnUnNhdkxyU00ySlRRMHp3cVF4RFNXZW9OMUVicm81MDZIdDgzbEdjd2U5UDBvaDdTTUFHdUJsVEpsMWFuNXRDbnZpcVNMeXBqWjFyOWx0aVU1SjBVNFpRYlc0WCtGZ3RzMitiUTVUNVJ3RHdKRlA5eWNpbUFwNFFnQ3I2czBJRlkvZ1dSM2NYNTRISlN0eS9lUzB0blFGMXFJc1NiQ0UzeWlCMU9rbkcvODJiTDhTWTlyREZnUm5MM3gwdjlvT094NXRwS0N2SWxXaERkN25RaWx5OTF1YzhYQ0dpS1Y3Sk5OMm85ekhWK1BnL1J4bzl3S0wydVdCM212VE80dTQ4RmZjNmtKV3grcGlXRnczdWJ3dHhvTnNwYVlQSVB5Z3hCc29YVTE3SkZwMjRVMUw3M3Exc05uaG9wc3JMT1o4RTNEdUd2MTNwWlRBdFY0ck5lRi94dlJnV1ArMGF5Sy9wR0NPSDVFSmN4ZHZueFZkZVVINUc1ZHQyb0hvbkpYMlVKT3BRVzBibFFPUmVPV1lCSzR1bnIrQW84dkRhMityZU5kT3dHMmtZNytRczNyb20rY1pUUy9zZ0RRTjBTWE5waE9kSVo0WUh6ajlxTHRXUmV0WGQ5eHpzaVB6dWgzTmN2ejUxTVJRc2d3TEFZS0xpYWlVRDlFOG9jZ0tQTFJUYUpBTTBWQmlOVEs5SDlZODE0NkE3Z3JCUjZWYUpJZUt3dXp0dmtzbG5oVWJvUjE3NnB0aWZNOU1UWkhYdDZQSWxhbG4ybStnS0h4RXAzdkZJS3BBallPNmthVG82dDNmYkIwVFBrUWduMEhSWFlDR01YSk9aOVV3dTM0UVdqWVNnS0pGMlRURzZHSW94ZjhFRlBFbDNoQ1c2aFoxM3hCalRkZnlrM3JXR0NQMVp6QXBzNUJCaHg2aEkyblZSNnZSU1gvdURDR1lHczJhU3J1OEVrVVYzMEhMMm92bFBNV3VZWHJkNWFQdjRKdEFvNmlFMVNRR0lQdjZLdjBEeFNZWVZvWENIWjNnRkQwTUhxZngxVDBHK25JN2kvWkdhUWdSNGpxMlhrc096SXgrWXF1akZMNWkxTnZVeDU0bExLSmNWdGxyZlNkT3U2c2hZdVBWMTZnN1hrZ0ExaFN0ZSs5UTEyS2xqSXgxVGllYlZ0YnJ0TVlFOGl5WVBDQjMvUzBXWjN1WGJsVVA4N0VEYktuVmRpNmxYd3ZTbHZoa000SlBEL1RTNlh2VHBmODZ1dWkxaWNSZnhHaU9id0dmQWhzakhieWpQUk5Xek1QZFU4dXppM1ZkM29aOE5vL0hJRmpad2dWVHhrNm5CaGw4anUrQVg3VVduRFptZldmZFpyUXkybXFrOTdKSDdtVkxESVEwam9sYXhTMHB2TGxpWGJCSC9VQi81TUlPOUYzaWdhamZFVnZNaGh0R21BUGcyUStsQXJ2MzlDbGJGSnNMSmxwK3oyMVU0LzdFeFZYMFlVSndiNjFmYTBURDFqYnZlNExNTGpydlZJMUhLVmEzaFBacktmNHNpanlDL0YrWnhPaDFRR0NEZXVaQmRnaXNZd1FlTzNTdkszSnFjNU9ibDRQVWR0TDQxTVVTc25iTkRqTVhjd0xydStxQkxXMUdUYXNIdUF3Zm5KQlZkd3pseXhyejlHbHBTLzZUdVdxQkxuUkdWNVByOWJZa2hvUUdyaEpXUVlySW9sMDlpL2FVNmpoWkVic0hWT1NicjJ1M0ZzcUlVU29HaVdMOUMwL1FMUmhwTFpGTGZVUWErT3E5V3VLY0ZSUkRnMkdBUGlxU25Pd3IrcExtaEl0a3dRdW5rS3VYUGppeHlJdDl2dmlMbGJtdFhBWkNCTGFuNFFwR0hISjFXLzFlZWFlZTFCZzFEVGtiR09rL0dnSFJsWG4zMUU3S2R6bUQxQVV4SmR6bWh2R29IYUJpUEo2U1RSM0xodEpydTgzL0pYWDBJTFlXOUxUWmY1dERCd05VUUhYVjJqZXB1RTFDZHBFRm9jRm9QTUhleEVQaGJLc3hOWVA1RmtDM24zK0hLa211YVdMU01XeTZhSnA0YkFRWlBsRCtUSVlHM2N2aDVHWndjeVR3UzhmSnpHbGZDVFhmcklDU1BIa3NuQm1qZ1V2MVFjaGc0OGR5cFhKR0NLYmI4am9SOTA3RHVaazAvWkFiSzIyQ0dtczhjZWFwdzlsdDcwUjREQTN5UnlJSkU1N2ErQWhRM0J2ZFlTN01jL1d0aGsrNlA2dDJhU2U1Wi8wcjd4RG04dnZUUXA5UVFTNFRGWXdSNnFOY2ZydllRQjRhSGc1Vk9DVXAvSWdwWjFVVkhxcEpLc1NPSEZyVThrV01rVUwyYVJPQkhXcjZkWGpYZlQ0RWQ1b0RWTXkrS2Uvek04ZS9udE9WdEFaUmJNR2dGRG9ONUkwWkZxQ21mdEx1MFdRcytuOWxjQnRrUjh6NFBaUU92NVp4OFBPR3RTanhxb29ydGFsOWpsMjEwaVFUNWpzOE1YVGVQeGRhMi94Yk92d1ZPYjFyTkRKWDhHOVNMTldFeTd1c0NuZlJVSFlDeVo4WlBVc3dBc05IeEYveEZ2ZTJ4dGRYWUxtRmJNVUZVRytsUlZjLzBhandaMHIzTTFVZlZqSzRWQXZOY1IvejBTdGZKMXFzTWRaZzd6ZS8zVjJlTjBlNGtZL3RKNnFjZ2IyeENYNUNZOXZYOVJHNERVV0REaDVIcmhQanFadW1xdXgra2JCcGU3TUtwSkkzMzErWXZKTEkwcXlaTC9MUVpZYzhERXUydmNidmlIVUFyTUQ5cnl5QUtXaHp6MFJDek1tOUkvWEhMZTdLdUVNbkVzUFF0c252SXNJZ0EwR3ZXU25ZYXA0YldCZDlzU01Cb1Q4UjhTdCs1S25VSUFkZzQ2NlplbnovV1cwSmNiQWUwWXRHY3ZlaXVGblpQQmtmWDZTcWp0UU9haXplcDh3cDF0c2t5NThZQjVJb3JlaWVDNU9rcEcra0d4UkdIT2s3bHlmZXBDRkNQNkltS0I1WG5qcThPUXBHWk1kaHFVaXZIWEs4Y2pFc0JqK013Mm9vR2l4YlZXM2srSURiQzRjVXJCMDdrdy9OZUVNMnc1YWIrK2k3emloMTFIQklvUXUzck44OU5NRlJkc1JDM3RQd1ZUWEd6cHVJQ1VYZHRTZ1lUcnFGaEhMVU1aY2tuazNnRXNUaEhYeHhFdHhLekR1eWt4TEZFTFY3OXRpam45Q2s3eTF3RGwyQS9mNVBSYTBRYmV0THNqczBoVWVhdW9qQ20zR1VTUDVPUlNtQnRzakV6SE1UbkIxRTMyMys4THdLTXJVSVFGOEFHWkcvZjJUTWZ0WHVOazlNRHdhenpBNytJWkh6bkg0U0xVQSt0Rjd3cGtDc1B0SmpxTkE5Wi9xZkJ3VDdsQUpldC8vV0F3TXgrYWM3UjNwT0JVUG9YZlZsNFhQK1VjU3pFdWNva1BSUGFldm9WdnptS3JBSVhVdXRtbW1GNFFuVmhhUVhIaWVLcWJGVjlWL0RaZUJvbUxOaGtscHdRK0djbzBuR2E3WWQyTE4yem9tN2pYVUpoOTZBZFQ2OTlYenFtSFNFZEJQbG5CQkZjbVhkU1pHN25DUG53UzJlMURvaXR5eXJ2MVI1QkF1RFBOdDIrNFVhRlJPK3lhc1FtTTQ3WmxJRVl5eHZTbVRDZFlNMW05WHJ0U09nQWhBQzBIWE5yeWlwUjdrdkk4SVp5dE12bmltaG43eVhUaWN0UER1eEdZTDJBYndsV1I5TC9nQ09BQ3dXNDlndWQzbWJzcDlITHZDOXk5b0o3NFhHOGZLZExtT1Yyc2NjTlI5L2F0Q2FUb2piZFpmd2VCY2pYbXk0V25Rcjl0RlR5K3l0TU5Ralo2RFl2clkySVFJWDY2c0RyN3FDRHFwMVdXd25tSVprUGMyNjBlNHhpUmlodkhjUldVd0NrTTRvRy9sb3p1U0xRV0U3c0VPOEZhTnVCa25ZNWtuWFBCMzlkLzFKY0UrdVNIWERxSElrd3p0eDVqbDliaDBZZzl0OS9ySUwyWSt1ZzRQelhxWmFCWEhROWF4M2dmZkFpWTMwWjkyY1lVN1N3L3p4ZXhhWWVLQ1JTUmVwQ0Y3UDc5WWRDYlhDbWZoN2FvMXFLUFdNZEhmSEoyc0hkVUswTVhsRXJCQ1E4T1d0WUxScThYSG5vUTV1NURNRlhyZ0habzduTjNXdG9MV01UZTRETHlhRjVISGZqT2plakF2R1JTZ29BeVFMUmNtN3dPeTA5V2NBblV0QUZUbGhENUdldVh6ZXYxL3UwNjB2NitTakNBK3JlZ2pQaWl5SDlVSTNtSnViYnc1eFhYR2FwM3YrUHlKOCtYSlVMWFlHTU02dCtPdUdwZ3FpQUFPOXJMQ3pYTXBlVnhDMzdLSlZsaFlMNlhrYmFQWWhVMWEwS2YrZHRoNXl5VlJ0bEJGa0ovNXJVOWV3YXlzczVQc3pReXV3VXRCYkloeXBibVpFaVNrRDRiTkJDSEpnZmtHTDVUNmdmNERKaVA5ZUxqL1cxUmFhQlZFa1RBcEpMa1YzaHBpeFpLZlhWZGNlT0pFVFFwUzlSOUY5bzdaak0rVy9mSmE3d0Z0eVRmMEMvSi8xOC9JTTlZWnlwaDJqRFZEelhjYlJOTS9PWk5JaGZGT21uTHNoTVlBeEpZTEN2Rk03akt0SStrTmNBZTBsOVBlZCtScHBiSUFmQkZXeGd1a2FTTExTOEVybmdGeUwyYTFSaG41TTdDMlRMQjY3Um4rNEswcEY2cEtRdjNVNk51eGF0NHNWZGFiUXhWeGFub2VpY1Z5Zk5SNFBKYTZLc25VZTErdVBjMVYvOGJwY3EwMlRiZEh6WWJwekJIaUtjOUQ3ald3eDVBVk56eUp0WXNpK1BOZWFyL2Q5dUEyaDVWMS9mc2JROWtTZFBjTjdIdlNrNnFhWFJWTk4rbjZwVVpwbFozR1hUUkZyTXpUYUh6K0lhcW1wdGtNN2FmZlZzZXRBVlNkWXRPV3V5d1o5ZG02bkg5N3FucTV3TXE5OGUzWG1LTml0SUowTHJWK1c4TG52QzE0K3hkZGdEZGJGM2s4TjJoVEx0eXcwZTFlc1JGZjRrblBuSXBtSFV1bTNNc1FlNzZVei9EeDlUWTdWdnFBVXJQbTlyUTFrT0VlZDNrQUdjUTJpcUhsTUgzdmdDK2hqU2dWUkExZFpXU2d1SkFxQkpGZU1GNXVuZzlZSU5WVFhSK1c5OGFLWVdWRUxGay9HT0QybDJXZk9IVSthZzdGeTVDS1N0ZXF0NFc4Qlczb0NhK2FmOW5wdWpCMlZYYlQ4NUFwQmZYVm0zNU5MYVYyMzVmRVVGbVF4cWZha3dadFQ2R3cxL0JQLytGdVdaSWg2RGhMUDh6ZU43NkVDVmM4Mys0cnJveVBPN28ySlJvUmoxcXpqUXdPT25sVmg5QVBwTzc2TnRKNlQwQjZiMEdZY2E4K0NMWnQ0aUp6QXJUNmk3dTV6bmFtL3RxeTI1TXhIMkQ5Y0JrMU9FUFlGQVB5d3dMMmsxUDZQSy8rbHBFeDFOSHF3Q0R5MHFjQWNUWUpZZGQ2OG5DNk1KY0IrT2Rtblo3QnAwK1FZSHh6MHBGZlFhM3RHUWx1cS9HSGFldlpBd1RpMCtMYVh5NEtNTHBGZkRPbjN2TVRWbFZ1YTJHQklYSHJjcnVnSyt6MmFROHlCRWFuRzRXOVYvMjU5WUVuR0E5UnNvdUZTK3FBQkpsRlJ6YUQxZEJEaklXZkVWMXR6QTZBZjA1Q0N2ZHlMSTd5eXM4RFlGY01rbis0NHNaL09ISFE2c0hpUHI1UlNweDRtUkkwemNyQmRlYkIwemNIWVlnOVVsb2JyM0g3d2F3UlVXdk80NEF4U0JlSTQ2djlWaFBIcDQ1eExLR3BzZGszb1pPWHhFSW9OVmVYRlJIU3BzLzhaSS9jb3l4Rk1xeG9HVXRqL29PeURzRVMvT2JyWTBuSE9LUGVpVGlWa1NvN2RvZ0lxQkJ2WktLcXdjL3hUaEtHVU41WEJKY0FCdlVuS1pHWWxRNnN6VHJVVGV3cnFrcSt1S2tNbllXRFhDSCtEa0JlYVpLcmduTGMxd284dXAvUXRSVVZjUVZnS0xMNGV1elZSdGRXTmM5OEpPTDJiOHhKaHB2MXc1TDYzN2FTaExYRkFmSWVOQVdsTW1EUnUxczAzaXRnOUVaekhsck5PazcvamFPRHNjNlFWc0xWODNNeURnVzIrSHBUNkRSTUNKMy9odVJUVG82c3cxV3RhMU9LL0RvMlo1VDBncHRIeFlyem4xSHJ2S014Y1BTNVZCUVNKS0NXT2dxNmg0aDJYTC9aZjc1VFQ4SFg3SU10Y2V0b2s0SlFDWHBwUVlqelpnMDZZTEZYSXVVM05KMnlSQ2U5cHZuZ24vd0NyWVhIa25wcmpjY3JmY0ErYU1PV3EwVnhHa1RrcytLak0rdEwwcUtaUUEvVkdsN1dRbFV5Mk1UajYrQlJEdkNiaUE4MG5xRFJxMmhsVWw4azM3V055K084UHd5QjcwLzZyd25GMFN3dW9HTWxPYWFqbHlucTRSbXliWWNMNDZTb284NGY2a1NoOHpnNW9ZV21iSEZpQU5Ud0dxUW9Ja1VVeUxBZkMzQmNZcm10cFdXSnBUSmFEWUFLbnhLRk1icW1qaXNpL0dod1VvKysyczJNeXYvR1ErVlowa25uc3ZvQWdDZjhtaDZ4cDkxbHI2M2h5RFhhN2Y0VUROSytGaWFYSjJQWDR4VmRmS0tLa08xd09pS0hKeHFFZ2pjSlJMenpaSDI2Nmg0b0NoejhhenlBejUzQ29uQzlRWlNBMWhzbEZYY2p1QWdYRDRPRUxoT3IrWFZCalBhQ092djRueDRtQnVtcFYrZ0RXYlFuMlRLZnlmWWQ1QTFOclcxbEFpMnczT2dEblJyMXBnZ0VqZHZ2WkhqL3EzT040emF5MU4vVXdNallVVng1eTNHZ1J5VWdvMnhXdDJsMDNyTDBYc2dWL3BhZmZ1bjg1M1ZsREZMVjBoeXZGVGUvVGp1ZFM0aHJRL0pVaDJPKzZZK2xzclk4VFUzVlJ6WlErLzg3bWF3UDBMUVpEZ3RSSE5pK3BvejlwM0dnYy9jN1htdkxBVUJlYXVMOTFHWlR4bE0vTUpqN1hmRWZhYlhWeXNTSnBMNUQ5c1NzM1NuM1RDck1qWHV0a05na0FOMVlBMThYV0FDTjlHc28vTTNnZlR1NVdBaC9uWklkRSsydGxKTEVoVFZCRVk0TEtKb0wzQ3hxbThvWlRTZUt0Wi9EK2F4K05YV044VEpGZzJFc1NMa3pDRGhQcEhjaDl1RHpJVFNaWVhWZGVCajZjRloxTnQvUmJFcXZFeUhuSFhPSTd0RkdhbFlTVVRQQ1hjVUg3aTJlUW9oeWxERnFiU0FKWjBGdmE1eFk2Z3NLUzNNMmFXbFR4NldUeU5tZDAxeEFTSUw1Snc1ZDRCSHloNDZwZXgxaklXQis2b21qMjdDdG90bXZxMCsvbVltRno5RU13UWVZd1h4cm5jMCtWdzRsTWNXSDBtVTFXQTUrck5Hc2M3MStkTkcxd0k5Smxqd3VhaEZXU05ZdWVDWFlXdFUxTG85cThmbTY4RS9vQWJxMHY3N0xKN0RZb2tRWWp4RTAvZ2dQZ200K2haOXduMHBMLzRkR3V4VS9pdGwwY0k0SlNBUTQ4TUZ0c1pKYmxKN0NrbEhqQXBqUzU4QWJBajJYS1Y4VWN2QmFaV0Qwc3Y4SGZSaXFYMjNDTWNMNU1GSkM4RVIwWm5CVHo3VnJiVFE3K3IvVHBDNFhycHJEeHY4clF1alpZQVJNWDhFcWsyaXhpZTI5TW41UnFBbTk5R0VycEJ6NGptL1Z2a3UwU09xa29NU2IwVFN5M1hPdlVFZ3p6ZmE1VXBydmloeUFMWnh6Z2RFeHF1d2xRYzY1NEJFaXYyRlNSZGJwT1ZQc1J0dGtnMlFxYVRSb254Wm5aNy9naGJYS3JtMVVYVHA4R2FWR3Evc0M0clc5TllHMWt3bHZIMlMzaXlRKzc1bkp3SGgvd2xhVE5PRmFOMWZLMEFnd1VYQUtnUkR3dzFGbDRabmdCaHVGZ1dKa2NSUHRiazQ0T0xhNlBFZThlMHhQSE5SUlJSYWVSTndlRm94ajNVSG5Vbnd6YzB5WHNKVTI0ZWxxU2lhVjJta1l6RlJqbGFPZ1ExUDF2eGQ2M2QzMW1WbTRTVkI1ZWlHTEUxZ1B6MzBhRldGbXR0VFdHR2orSHRoM0NDNUFIbWt2RE9FeWRRbjNscm9HMUdKZ2MwZjVzbnYwSHNSU2J1RVhjVHRYbnJNSlpPb1JBdWxOeGFTWVhPY0JRRDNSeHB2L1V1MUE4YlM4YUlCTVZjcklEamo3dERoM3YwQ2lQSVFEL2ZUN1hTelpnZzI5NjZJRXNJZVBNdTBSWVdmaUhuaFB1SWk0MTA4MTdnc3A2YVAvc2pmZi9YRlJ6Q3kxdzQzVEt0ZEg3VjNOS2R5V3hSS3JtakxKNHhvRm1nY290SlVJYkV2dytCamxwNzREL1dSVGl5eFlMeUlmRnZiT0djV09yeFF5TFcyT3NsYTZFeE1nL210eXVQeHd4NGwzSXh4a1dSUmltbHdnZzlHa2hhV3NzdHFyR1paQzVGa0ZDM0d6ODFVKzlPN3Yvelo0YUNJTTdUaUNHMlFxdFJwWWpZdklqMXg5Y2V0ejg5TXY0SkNKRFNCeU1rRUZ1azQ2VkwreWNMbEd1WGhwbXhxb0ZjU0NqV0p0RW5BS2RXV09nWVhienJTUFVPZ1pnd3FTZnVNQ0RJTjljQ0dKc2pnc3dpSlhNaHdTUWFYbGV0KzBVM0RnY2JQbjZodkM2YnZEVXdqRFpsYzBnTVVuSFp2RXN0SXBXTFhJLzMzbENQckpzQ3pra2twcy81OThIb3dMdUttMkVRSlFXQlYvU2FhZDlyRVR1NEVkbEtZd040UTE2aW1PRkdHYVlvcjBicExxeTZ4RVBEUytKZndMaHdaakJPbTdwaWlMazVhT1JYcU9pazVuTlJVa2VuNVFhSnEwckozQlRrRUIvd0JxREhyY2N2VHpCekx0RkpsUzZUTm9VZlZJTmdVc2tUNlNoMkh4U1p1TzM0aXhtb3kvelpibmJCSzdVbmhsKzY5UnlPeEwrOWJBZ3NpNE84ZUtpc3FmclBwejBIR09oTzdYTWNSaUNHL2M0OVoxbXdrRzRpcDc1NmIvd3VLd2wrUk9pdXVsS2UwQWlFQjRXWHo4SlR4Rng1QzhRV1NkM25yMUI4Qzc2QXhnK3NQSjNEQUpEL1ZFblJIWmlsQVVHb3BKYjN0b1RucGhUUEdNdnpaQ0Y4bDRYZlVtZFo2bkh2TGtDV29hdWsxd1RpNDhrQUNnRUxyMjVnN2xtWmJJZTYzWHdjb0tQek9mbzZrakhnd1IrWFEvc0FmNTNzL1ZwQ25TaXNlWFB2WGdteW1ETkNRa3ZNZitCQlhRaWVFc1JRaHExYXAwWmRmVml1bEpYTjdTWTB3NEJkUDVyNFlxc25LWjRVcEFRV1pUNzlOYVVwbTh6eTBQeE12UlpBeGJMMCtvVlJWSzZlWElEaldnRmlkTHgvS2ZiQ0ZHdSthYmcxa0ZVd3AvMVd4V3VKcEttalpqK0VnTTZCMVExdFN3c0tMaWpaWXRHejZ3VU1nWHZPOWE4VFNsZTRVWkxuY0xVTDNnZHUrMDlGeDRjT05QWTZISENpUHBHV1BkSnpCWUVDTUlFUEp1dTdRVUYwMStzUThZRHZYV0NPekxvZHZwRm55dXlCeVJ2a0JrT3F2VGFSbWZhVnBzSng4cFBacWlMS0dqa2c4MFdpN3FaRmJJYVJKRHRlcVN5dFJYeDc3bFg4dVRMc0ptU0ZoOTl3TjVyL1lyQWJIcDRmVDF2bzJZSEdzZnFkSkwycXE3cGMvaHZBQjJNaXRncHBhWDZ6NmVIb0NiQlFMS0VHeEtiaVVtVElyaEF3cmxTZ2ZUeDFYbWVXUEV3b1E5WVNDT2xSeVFkZUtSMTUxQ29PdkVuV05CQmNxdVJURU5zQXFUQWxHUjNLeEE4ZjhIVEkrYld0MytEY0VHcWdrampRdDZOT1YxcDhzWG5FVWpGU254S2pMaFJLbUJpeEtvaHk5NVF6Z0c0eGJjVlJhOFpsUm9NUkc5NVpKOEdZak4vVmtyR0lRMEgwM2hBWXk2ZUd4ZEVQWFpWYTAxc014b3g3dUhjNkFDQm41eTdIbTRCZklkcW9NSzdqNTZ5RUVOVlUrVmFtakN2NEtxRlArWlk2TlhaUThGVVZaOHpSaUdoQU1TaWRJbDN2R0YvUW0rcHhTbkVsS3lyY0hCU1hESHJXeXFSUjA5dFBzQ0hXOFkrZ29HQUtrSU8xbzgyVXpmYmNlR3h6M0JTZzhPQjhtdzlqT2JqZE9mNW1lVEhqYjhUNFhyMmNyYUZBZE5qcHBNaWNzamlSVXRjendPaVdKbzVMWkRCYXpCV1FBUjk5T1V0eXhldmVDVDh5YmlwVlBMeWFaNTE5akV6bU1PRGdzUFZ2U3hpbDBJQnVmUGhIc2VMMHNvNEpRZk1mTWNnNjVOYWdPdVNhNlBMMSswQndWQUNrR1BnRlZBa2l4NlZNajJVMXBGYjRBMFpmQ1FMRlV6MkhZSFRsM2o2N0hMazQzV1pTT29WL0x1b1UvRVJRUk5yNjdNWC92SEE0M29uOWVlUzNMbnFURjZWTkFKU25xYXZteW9JV3c2WXZwYkpkYXhNYlVVUmhpOG5mMHVOaU0yT3NXODk0UUdqdm1sK0twcGI1VXJLeS9VYnJTOGRtN2ZYQUNGK0FiZTBzanZTSGNsMC9WWHUwbmsxWTZ4RmpTeTdRSi8yaW1wdExxZDdRMjJjK2VQZXJ1VURkc3Q5eXBQWVQwbnFiK0tZcHRxQi9pNDBITU9mR05Jd1ZDcUdiaDV6ekEvVzBjMllJcmV5empMV3dwNndPSVNId083MFBQNjRBNkFNd3U3NE9GNTlud0RzSmJaeXpPcitmcFJ4ekE3Y2s1Tys4OTBaYmV0TEk3OEY5V0hmYnN6TWl3M2JsTUhSdUlyWE1MYjJPeHFvQmxlYUJta0RkZ2doMjE4SU96cFUxY1E3Ni9MTjJDRW1oRlNtbTZPUlNib28yWkk2cGt3a1lXUjdXNElQNzcyTklEcW5XZXBhSjRRY01obUdyY2Y0ZzRZc1JwRnVwdnAwUzUzS1BUWmQ4TnNRdUloOU1XV2VFMXlwRXpMRVVPbzBPU1I5WjJtY2NWVjEwOHRxS2lkQjdHVUdRRW1iR1ZMdTV0RGJJQUszZWVJUktOd2RyajVQUEtvdlhqUThWWmZ2ZWNSRUtoMHBXZ3lqT2xlcXRkYlRVLzc4UnVlOFU3bm9xckRoWXZwbUlEeldzT0FiTklPQk0zN1I5T3lJYXg4K0t5d2FEOWRCeXRlc3VyaXJXS2lzQ01zQ3dHOTBwYXBVQm8yV2V6TFB4WFFkbW1lZnNuUHIwMjhBcWdVdVRSUFpURjZQdzducWZJazZSSmVPZktLMmpCVCtITVh0WVp6NmJxSE92UWhZVjBSQmFENDVZQUo0QTZwWEMwSXJuazRha2FncDFOR1NNYjlkcEkyUHZDSFRENDhzSnYxK2NpTlAydlFpVkdtN0gvZ0NCOUIxdzg5MFRXMWFXM0ZhS1NjTTlac3lRdnFmYlhYemZQUFlqcGJiYUwrdUJWS2N2ZkhGUmhWbW1EVHkzQ2tzQ2U5dEY5MDdtNHEwWjBTa0dsVm5sb0RvV0NZWFZ6VUdWbTZuWS84M1BsbkM1OWRzbGlxSklsQndFTUw4bmlJUm1CbFJiQXpUd1J6L0hwU2I0Qmtsa28zd2lnam5hc0srUWVLbGhlU2J0WW1lMFFBNFZJV2FIVkhMbWZnd1cxVk16WWIvMHRiSDFFZSsrZ0JtRHVrV0xsRWM5OGVXMmlPR0xhSkQ4L0NNNWl3N0RoZmFvZEVLNFM2MEt5Yk9yTzltMTc3T2RkYXgwQ0ozVDJsb3Frcm9tQmdXcGsvYXQwSmlTVldDK1pCK0ExdGVRYU5OL2tic2FQS2cxRE5SZFBNNEN6Mmlma2xmcjR1elpmTVRWZC9MWGNYSUxqSis4ZXNuL0xtSjNhaGY5alRJcWthSE5ISXBkeWZrN3JEZTdZcFAzR0dOUE9aSkRvQjFZb2lWckhOUmdka3UzY3NXamtyaVFGSUNJaGZzT1M1WkwzZ3VkcmZjMXhDc2pBTW0zczh5L0EwTk9BZ1JCZFpaMmVLeFJ6WUVBUVpOeUlMbzR4NjRvd0ZwRTNrcWNWY09XWFVuTHZDRXZFZlVNTEg0UitNcXZMc2FMVXcwa3docTNDUjBsQm0rK2hIVkdJVTQzbE42d0lZMFR5VkQrdzhGQ0drVVkzV01LN0tUU2t3eGNmSFBZeWlEN1RQNUswUzZHUTF4L0VSZFo5a29vLzRPMDFNZTdCV2tqaFMxWjYzUVBHbHI5dlY5WHVPNFpqcVZJRWJBaEZFVFdJWGRoa3JyWG5BdmRlVmp1R1VhOEozZHcvb0ppeGVUc0szeGpQeXYzRzFlK1NDV2Y4YytKRjY4KzB0VlY4TWhyTVU1bGc2SGFXKzlPSjJOZTFieGpFb1lPamdqamFVM1dUdElvQW1SR2lDUTdhZ1RFRHNtUzVrUGdjdVAwcnlWak4rK2t1SVpCYlgzUXRybVBvYTlUcGkxcmpNbVorNUtBNU9ZYUcrY1NES1NRQ2gwNjZIbzNXSkpZM05XRjZ5NElSS29nWmJkanRwOE9nYmVURUtDaVlGcU9jRDJtTWxyTXp2cTcwUFZqUklKc1BXYmc0dnpPeU9nRWJGaWFTSFpIaCsxWmlrTVFONko4Mm95N3BFczVjR1FodEhCSHRjOXVNWWQ1c2FWbS9mdUl3RFg5L01OSUd6LzNrcGxiMmc1V2p0T2JSWXo4TG13RFFVMjFhaFh4V0k4b2Q2OUo4MjFnMmw4SmRtWERiaEtlN1lqOUprWHdYV0hNdGxHWTFueE91WjdpaGFlWUlYbHRNd0hPMHljZi9WTlRZcytzNmREMFRteXVURC8wckRJRHJoWFBHRHNxUTk0U09ENUREMngzNUJlaE9LUk9JbVg0QjR2MEQwVDQ2WDVSWHZGNGUxSjNtRHlaMnVVcWhKVkFFY05zeW5mOG82M2F6bWJkVlN6L3RZcUZHdDhDMFVRT2tlTTV0SWJEb0p5TmpHR1FjR05LMWRBZTZWekk3R2sxRnplVjhydnc1VkJtVXFhUHpXNkxKRHhLRjR6WjRKZ3JoaExqZ2RjTmhyTEhYRjVBWXVzcTg5QTdMTzNyZlc0V3RpM3Y4TkM5a0pkTWVUSXZnNEtJamtCM2Y3TjQ1ODNtV25oNXRoOFhzZmhGWHA1OG1ObWJXc3pLZTB3cG9hd3pmYnhZMnl1S21oUkFEU1VPVGUxdENZUzNqWUVQbDZ4Z0VjZUplTUx0OHY2dTVvRnhodVBWR3NpZ0FySGxhUlhoYWFsczM3cVU2cFRhMWRrOVBIOXV5eERKUlM1djFCd2Vncmp0bGMyM2hGSS8rRnppY05iUEtFWVFoMDljaDd4SDhvcW1xc3VEWTVTczRtNTVpeE16MVFKeTRYN1FKZVlDcFU2TktxS0NMcDh4YUd2UlM5SzZYdUpYUExrWVFrbnhzV2xqV3E0VVRvKzNYcXFpQ1laNFNCcFBQT1MzRkVPV3o3Vk5rR21mbkRFNWhiTjUzTlJON2s2bDNIZW02NUVsSjNxcjhuSWNJQUtLbElPV0RUWnJxS21ZV3BxL1NEVk53OU1xT0NIV3cyTHFtcVZPelBoV1RmaHZYV2p3WjltN3VMUjdGOE1PSzRnOEdqU2ZxVUc1VVlqM3hiMGtuZEVXTGNjQ3pCZGIzTmRHektONkhRTUhTRFROSmRiRzZILzd4UFFsbGcvaUNNVVZJUFBTcGp2aHJSVzYyWVFSdU9Pd2c0Q3p5M0Y2d0U3L3B2MEZXTFM4QWJsSGVZckNEQnMzWmRYNVRGek15ajJjRCtwbHBGak9EdENLY3MvVDg5TFlQT0tHeWF1VVMyS3hMK09MbGl2VDRNeUVRYk0rcFJMSXF4K1g0dlhBT2N1MnJReWllVmcvendIOFRIRlBZZEVzL1A3djQ5MkVqdGU4KzIzd1lMdzM3Nm50MUdrYkZNdVlBbzVkSmVaSmZZbHpEL3ZlZGhiaUJRNno4SG93ZFFVYWxaUUxYSkdZd3RocjZJZGNmYURZZmc3WGxROURuQU9BRysyUlF6YW5JVHJYYUw3dDFRTkJNN1U4aW5GcTlZeGFRT3lzRUYyN2tjTnByVzBreTk3Zys2ckszUTI4OFMzZzRSU3pZejZMNVRvZjFFQmsxYXZwdGM2emJQUHJ0S1BPQmxpQzZiTDEreGt1TVl0TFFDWFhsVDdubUdJWDNSZ3gzQkFxWnNRR1dSUkZ4UWlFVis5bU9oeVNMWVJ3SWQvNUloYThHN3RiaWhTRzkvbnlYSFVrSUVYcHZhMDAyK0xSU2tpdEJIQzY2WFNnUk1xQWhHR2NpOUNVWUREV1BOYTVxbm9kZVBKQm9sUmthSkhsR1BvQ3QyUTlRaWJTS2wyT3d5b3JLQ0JiRGcvbzVzQWJXZmFyYnVGclF0ejNQOTVpUjVOV0NTNHBEOUludVFCd2xjMlFoSVBUUmUzKytYWngwc0ErcStUMTdWZnNYV3pVZWx4eHl2b1E4emVMUFMwYm51MjhtT0NLQWJFeUZhbUFCSSszRUpJOThndGR4RUpKRlN5ZGRHdHhPYzEzaXArK1Zyc3hmbzVlZldqYU1Jdjh3QjU0WVBZR3FHTXdBdTV0RFFuQTUrRXU3b0NaK1JCMVBhcjludVdhT0F4L2FVZHprc1hHc2o5dksySHVWUlZ6UWhsUjc3K2lhSTZtZ3NOMTluYWJ5dkd2U0hFbWhBREQvWWtmL0NGMnZHU3MzL3JNQk51NHVuVHNYcXQ1WTlyaEtROEdYeFdDY1U0Z3NrNlJFMXBhM1FSWmRvbS9SQXl3Qk9vbEFZSHBOVjdiUTNid1NTS1NjeWVodUlyMmRuMUo2YkhjZ0NrbHVZMVNHUk1BeVJUWTNNYit4emk0a1BaSVNIdkhDVWo3T3lGSVQ5aTRKTDR5Nm1FaW1MWVFsQU5OMGwwR0k1aGt6UXJkYSt6elozU01tV1VhM1gzWTBoQnMvcDVOc1RLUXFDdXhod0xVWFA3OTZXbGpabnlLRHlRenVOc2RFckpIbHB5M2dvT3BlQ0EzOTJkQWNBTnBqZTlyanR3R2gzUzNGQnhMN1RvZTEvZUZrNVdmOTNRVzVpSmh0TGJucGllVGFtaEdqdzhSajEwRGVSSFFDR2lXZHJreE53WDR1ZW9YYnpsSi9RZmxVZ0hTMXJLczYyeUs5RXdKWm1NbS8rTUFYVSs0dm1IcjN4MnBjcncwUUZHOHJhVWZmdEdGZnA0SG5tMXNKaWh5RDFZQ0FsbkErSzF0U3dIbUtoOHVIUU92M1BUbldJc2NDZEFQTjB2RG5jSVJ5aFZhWFBxVTA4c3JEcmpIdllZamFsOXIrU1JkVkJpcGVkZHpxZ09MR3VFZXhVWXlralllaytqZUMyQ3Z0K2oyZCtidit1citqVjM0ZHM5THZGUisrbVJyd1BVTXpHWmU3U0JyN09iYUFwTTNVSWJmbTVmWFZxSHVKd1hkdzRuRWhoVEtwZ0hKQ3k2dzI3akxTOUpnZDBlcTV3d04ra1lBOG5RbkQyTUIwMXU4czg4dFhUL1QwdUo1WjRlZEhrdVo5eXo2VFAvR2ZoR1FIWW04UTZVU0hFQUFwcjVRVHVUQnh1bDFNTm9jUDQwaWpERDgrYzRLZWN0ZDhMREtET3RxNStFVTV2ZXVhTSt0TzhyTS8rU0dNV1RrTUJtNEpBYU5ORFhZUmlDNnk5MXBVYzEwdUJ3dnlCTFduMDFLTXJjNm9xYzNYS3hLc2Y1Q216T2NqKzVZSlRBN1hqbjlRTnRrZThFRjJKU1RVcFhLV3VYbVR3TEFSaXRoTzZzYWovNFBEYnVwTUZ4clpBWUVyWU1saW1RbnRWanlBTzR6NGlVUzhhYThacS9kY3Z6QWkvSnBPSlBBZVJtWnN0RzdOVVBhUFZOVlQ4dUNpaFY3N1dZa2dmUWFRcU4zOFhERnR2T3FmQ2ZmVm81UkJEazZPL2RYeHRjVkhBaU90VGs0NVBCdEIvVXJLSDY3YWhwM0pYNTdCdFdXd2pWVmZlMzB6VFIwUTJ0UXpOUHpLdlVxLzhXVEFYQnZ5dnZvc0RsS2d5QnIrQW5ESVl3T2pCVGJOb013OHN3R1ArUllQSmFXOGY2QldmT2hxOWM0RW1POEl1TUFVMU9IVC9PWStWVThLYjI1cWg3R2VBTExGU2l6YXNpU21tY2JNRTFGY0dQcVNjQkJlU1E1d05kU3NXa0RXZXRYendDTGV2OE1JL3RPTHo4WkFMSm4xYmhkckczTkNvV2c4UC9nM1lORklvdG9ZbzJhUGdneHdjV2pRZUsxK0hNKzVueGhHaGdOcGNpeVIwd1BnNTdRYjgvWkd3MXFWWmtQRE1TM3hpK1JzR3lnSzlkWEpNK3NXMm5IaUwrT0NDODVZUkpVWjAxcXVXSXBjZHkxWnRGbktsaVlEeHNFc1RBK05yQ2JFNDI1ZmF0YXpLek04WGtZcnEwbXFvY3dPbHVPN3hicXUydzZ1OFNpdkpOSmMvYy93QStWZUJoMzlvLzV4UE1zZEgrS0NOam9CSmh2SUpSYlNOUXRBVUFmcXZkNjJKWVRTVUtodkxRdUE3TTRPalpFSzBQV2FPdU1YTjM5NmlYd0NoM0tzUGdocTJLSkhBdTh6QThGQlhxMHVGamN1citWVklhU3FtVGhTQmxkY0xCWjVXVzBOSERQYWZYUk5ZdXg5bHAxYTFsTitON09oNWRmWUxWaCtQb3c4T0cya0lQWUQ5R3h4bVcrQjM0YjNMeThva0JOOElkVURHelBiNCtVQmNFS0lWaHFKcWNMTURtSFYxWG9yUDYxZ1o2ak1TdXBXY1JHcDBsMXNqbFpETGZKTWx3ZCt5MmpjQTkxeTBvY1YxWW5IZ2R6eUhFcGtBa1ljazh5Vy96VXZlT2NVWE50Y3UvOHI3clMrSmpHbGpzS2JZZXhpQW5xTEs2dGJXa2NpRC96Rmk5dENrS2c0RWw4Y1lKMmVnRVZmQVQyd0xneDFsWkpxZURDV3lwcS9mQUx3RU0yakoyV3ZwaGNuYlFtdjZKUEFiVHRzenM0V3FJWUY5MHVmaUZjc1UyWmg3d011Vkx3UVJzeEJ5MzdXSzR3VTA5MzNjWDVjc3BoK3poM1ZGNkdFeGJhbUptTmZqU0pyTGlhNS9Jcmo4OU92YWtjT1ZTcmdNVWtpWnprQWhTZCtTK3MrZzgzS2NpNXA4QXhKa3JtMTBGRFhkczNkQmNiaTdWY1NtYnlWNDcwYnd3Y2E3bHdQMURZMmluZzhLNkZ4dVBkbzUxbGFtUDlrZFRPUlV6Ylc4cFhtYXgwdE5OV1ZGejVuejM0MXJGWnVpRHlYSFpycW9wUGVBMDRPYnA2REp4NDFwWWZtcUd2cmUyd1lKa2RBbjdWL2dWM3Qwc1BMeUNESUVPTlB2cmVPaTIvNXZyNlRrbVYxcUJMaGgyNGFnUDdqclN0and6Rnl2YkpNUkw4cU9YK1pBMERYUG5yQ2U1NWVuNks2c2JaTnd3aGQ5NktlKy83VVI2M1VKM0xyc2pBSVJpMUs3aFZtV1dxVGV4UzVQdnR2b3hJaHN5OUpTNmtmNnpJM3NuTzlOOEJsaXlYL1hmU1JBdmJYanZZQnQ5UDBST3NGa2VJMS8wcGxkOW4rdWVkWVZuVFZwcEpoTEx3b2h1UHVGS2hlUWp0dnBjaWpKZ2FXSUM0bEtpaXJsRk9tcDVJaFRaUGVmTGRKbHJBQm82bHZUcDRRSmR1YmNoaVpSMGpOUTBhMWVENTRzcTAwQzdnVk1HSndPcW1Zc3NPQ3J4TXVISjBscHZxQWNqeHFTZ1Jzamh1d1VLbmRoUGxnUFFPOGwvbFIxa1dFZGl3d1JZMFB6ZXE0UGdrQkVhY2ZQT0lQS2NwZnA0Znc0WUtyOUxDVHBCb25SZVlWL2ZDRnNvRHFEY0Jhb1FRNU5KOHlxa2Q4czF6K2FMRjJvZ0l0c1Axa3QyL0F6bTgyb1czNzVMV1RYZkdIaThzaWxIcFdQSk91STZ2ZEdWQlJIMXNwUGdPeDh4NEV0L1d2ck84S0pwOWZNVVpqY3AwcnhTRXpmUW52WGpxTSs4Z0Nid3Q1YlZLUVlMcDMzbHJ3b29NVDZxR2VjZzJ2MkVEaEhOZ0E0VU8rNk9oaVRhZ3c5NFpOaGdSNG5HYVYwUFdkc29WeG1EUEg0TlViSHhMQU5pT2FnRmpPTmJibVU2ekswOTJwR1ZSd1oxSWVkdmc5eVJyemdlT0J6WVRuRGpGZXQwNk5MRU5VVlBXTzlQMCtDQkdYQnF0M1ZoSm5oOHBuWUx4YzBoZjUrVllDa2tTTkFqV1RwZGFqblkwNnNxcW5pQ3FwNzhmK0NqUkFBUDZWTVVpU1RvWmhBTU5DSEo4VC9KRFpRVWQxemVJdlBOeVArVEswNnY4U3FQMEZpeFA1ek44NWlaK2JRSU9hbDVhTGg2NDFWRWNYVlFlUnIzOEhUSDRDc2VSTFZlN0NDK2pMSFRQYTlKY1ZXY3MvSUNjMWRNVlJoQndxK0dNYmdmNWlCbFNvUXpMOUNkMHBHQ3dVTlduaS9pcHRlUzR1L3NrV3pVSW9BRXlIUXZlUFR0SkRBQ3VzUVJhdDR6eFU3Vk85eDFxQ3lFR1pZNVdDTjZTY0NhRHd1eSs0NG5IMExqcG1HVkVrUXJoeExzMmhiUU92R3pZZlIxZGxVU3NaKzg1ejlReno2dkxIZmYxaTZDWkZIUmFnOXRMOWxhZmt6VDhHZTBQRnNxV3cwWFdodlBJd0FTc1A0VnFTVHRSWFQrYTdkdXRHY290dGcyS2lrUWp0UjFJaXBzWGRYenViSm81cGIwcjBwWU4rM3FDSlJOYzh6ZWJqZm9xTzQ3VHdSODRKRGtKZHYwRHFXNEhseW03dW0yaDcydDBsMzJ3WmdPR1d3eXRJRXkrbzFMdXlrNzFhQ0syQkRuS0lnNjRNQStYWWJ1cUM5VzduSUIvcG5MQlozMXBBY3ZoR0o1YUpQQzJyd3lVOFNOaWhMS1pBT1ltdnR1S2hTZ01lemZHY0EvUHhEMVByYnFIa3UvTmpJTmZxUVJlR1ZWSzNURyszYzg5WUo4dmJhdmRMNHprdnMxRmFyTEZLNDQ4dG1jZkpMREFUNmNqSEJibnMvTTlkNUhrZWYxZ09JNFh0QmE1UFpuM0N5akkwODlIeGJhVCtIRXRUNnlwWGtSNlZ3L0ZFcEx6YnNuUXFLdzZCMG52dHU4RHcwOXlmVFVxVWhCU1JYM2ZHUzd3US9rKzFlbDhJajBpVUNadUVLVi9ZV014cXN2RFJqT09TVmNiek5YZzlJZUFoeEdFVy9kS1hta0RLRHdVNnB1Mmw3SkpDK2tGYWdZOVFjT2hZZDkvRXFFa3UwSEdSWDlJZGRUZzI3bThROFUxSVZEM0RYQnBXWVd5K3lVZmRJMFNVYlcwQWZsMTg5dlJUd253Q2NnMy9XV0FDZ2d4TlJyZElFY1ZmS2tKbDhOM2l5bnlyVWZWQUl1RFJjOUJtR2YwVjlKMk5WcmRUcjhPaFRuOElxeFQxZExHUnlFZXE0TGR2cnVmcHdsekEzTjA2QThZOU9mY2Y2M1NxSjVuMEQ0b093U3RZSytrN3IzSlZ2NVJFK1grejAwY1pyMTk1RjNDNklGWDNmRWtCUmpRb3lvc0ZPa2RudTlIeVhyRyt3bVRKUWI5dEdlcVdWT0plVU1RMnRqYzl3c05RbEM5VSs1a1g2UDNXSnUxWVRGNjdRODdHNzVIVkZ1T0N0azZadk9xUE5yMkR0Z3hndUFBMnVGblRrTVRlaE96ZG1YYVpXOE8zemp5OVd4RCt2QnJXRHFVdUhIVklzcE5ZS2hQWGVnUllTcUxBY1l6QlkrYklzWUFSMFcyemdHZFpILzVEamdsckczZzVoRm1FaVR1bGh3Y1RuUDlCS01laVVFVy81bis2L1RsbGFqOEQ1Y2ZoNndXRTVQa3VRaHRPbXZXbkhoR1RuT1cxYzh1Ym9yalcwQXpVb3dVc1NlR2l4bDdwYm9TOEJvQjZ1bG9tdDVzWWFwbldrV1lZWDJUWDUwUXFCM3JVSndiSlpwUEt6VC9kaTVUOW14Z3pJR3RZK3kxTG1ZRjF4SVJ5ZEZRbTRtaFR6VGNmMXBaWWl1WUtWKzBqNGZTbG1XQUlhSlpiY3dpVTZiNnFNb3ZVVjR0SmdwYWlyakxVYnkzSVRST1RuUklBRjBCRkprTThkTzdtS0Q0OHJiMk9jL0ZCU2V0RE5zUzhHaGZUa2k2VVVZOU8vMTh0ZzBIN2FmS2tYb3NvYlh4Q1c1RDFXamJDK0xiRnpOQWYzVXU1TnFlcGtGWUNwQ1NjQ2dyYTNMSENVUDQrNW5qbkxaREJyUmx1eVAzY1AwUC9lVFFwMFJpWm1lODhtSTYzVTluVTNTUUV3RE9MVXVEamMyOXNSMGFrWjNGeDR6cUZJM0cySVpDUVM0eXhBNEhkWXVNU3hlN2QyNnBqS0NZUGlBNnpGVnpEL05NaUwveXVEdDd6QlpmaGt5Q2pOMjJRVjEyV01jZTJOenB3UzZjTVl3dTZjN09PZFAzM3oxaFk3YUgvTk1Pem1nVUdNQjVGQk5jdXp0ZDN0YlhuR0VZY01TR3FoMWpCL3pzR05OOG5KSEQ2M2N5dzRFK2xqdmV6WWpuMTFCOWNGTWNTcjFja21IYmdDUmgxNXVla0VkcWRjMUNZbk02NDV0UEg4cWFDY3kxdVBYdE5KUkRMSGJ6Y2dMRnBSV3RobHVnU1J5ZThhanFlZGNHTEFnS0hpVkVYQUdrVzRPeWxPbmNHSXhQL1BrKzhkb25ZbWp6bWcyN2Z3V0hmbWZMSWVSY2ZoMXFic2pzZ3hpOHk1WlB2OE4zOVpmOWx3Vm1mNjhVc2J3aVQwcUZXVEF0cmE0RXVrTnhtQWU3NUMwVS82dHk5dENhbGhFdWFNNlg1Q093K2lKaXlHQ3cyY1VGM3dRemliQ1NJYjVDeDBWZ0p1R01GVWk2K2gwcFVFVWlVK1RnYWxmajdraStoVGZEWXZvdTV0SUNTYjM4UlNSOEdsMU1PNThtRWQ5eUtwOWFYdE5DRHNUQmdrUGltSTNUMVluNi9lZ3NZZTE4ekVCYkhtdXpDTzk3ZG9aT013U1FTUThNVXhoK1p1Q0xxK3BkdHBMYUlUNis5ZEFiTU93bnllMWxjU2NpTEkvUFdObEJnTFIxYUQ4akhZR3EzYTJsOW9MT2NBTlpDa2h0ZVljSzBkMy9ESDFxS0pycm14a3VaWkxBcFNEdFVETVhjRGJnRG5WRS9tYzBnYjV2SFFUZmRTc3JvWjRNN3F1Si9memJXajREa3JaSDJqdFlNU0RxdGppU29xc2NXb2thYWZGTCtFOGhFVVVnY0FlcFJNZUdVNmRiVzhKTWJpb3Z5aFRnNXRQVGtGZ1N2MUkvWk1NZTNiZEp6RE9zWHdFV2hwUEpHYTUrN2I4SWNtdStwY2VMY1ZTSDQwZzRjT2Z0NjNmVmo3dGQzdmFOUmdQWjlwUWljZlFVR0lQMWRwdnpWVnhBdDNTeklkRUM0V2hrNGwvUUVNelNkSUxaNzZ1NHFsNGExUnorMVFHZFo3bkFJalErakxoN2NjeFFqcnZRUFV5ajBqcmI2R0syMzBEck5DMnkvV25xSUNKdExGVVJBS2syQ1crUlIrWW13MUdjVDRNeWVKMFVab1J4K05SclFYT0Q3SWE0L3BpMUxyaVA3YkdVK1U3NkdVR0JlcG1KZGdVdXpBNkJZSFZRb3d0MEtGdVd6R2RjTmdvTUR2QlNtUTFEbVJ3MHJkTFpZVlIrSmJMRGFuWjlBMTF0SlNPUmdUWVd4R0RUU1luVGx3SnFJSXJxRGpGRFgvdjVmelBnNlZWYlpkTE1yaVNwVU9TVWVabFJ3Ujg5aFdMOVR4SnV6d0xYa2dQTEcrc2pCZnM2YUVuVGRxM1FDN2ZYdiswV1kwVzE0RHNkb1pSWFNCdzQzNkR2VVcvd2k3WE5PZzR5Vk9vVEJQTlJrNmk3eUJCZWhxN21lQ0tUeUVCSWgzZE9BMzZBaDFyeUtFcHpuNUJHRVpNNENzZzd6bmZCQkdjZkQyOHBGeks3U01ieStuVHJlVlMrcnR6ekdBSGNCd3d4aE4zcXNHODV1WkxkRWMvcWNXTnBhZ09pT0d0blVqMEQyeTNJSXdOY1JwUmVYUlVXVFl2YUYxZjlleVhQN0JPV3BWcGU4TjRxazF4OWtaTm03VVlhNlA3ZlRiU2NCWTdWczFRVU1qRE1yTXdFcXJDK042TXNGWGZNZlgxc2pJOWNEU0tYazVLazdjQVJRWUFuQ2Z3ZGJSckJpNWtjY1VlNS92SG9EZUM4Q2M3N2hqb0t5Y28wdEJ4cis3R0JMRWVLNEFtcjBTSndET2ZCR1IzUVlwM005YjZPaGJiL09hbG9JRXJlNWI0dFV4N0d1aERUSFhjTERaM3FyS1dRN3NnaVlTTVc0ekdlcjRNOUFVVXpRMSs4Vm5FL1ViMHV3Ty9kU2J6MitNZzZqMlo1c3lESS9Oa1Y5YVIyMDdsSnYwZXJpelpMTzZHa0FYNW1kTWZNT00xdUNpVStSbkZuTElsQ2l6a1Y4MjdLWmFqZ040L09meWhjNXIrZWZjQXcvZUxGUi9ER0s5MGFwRTM4TTM1WUR1Z2U4cnRhWDRmSDV4N1lpUnhMK2ZGaXBKTUxnTVVPYmFxNVFPeGJZOG91TDUvTTZmNUFENE1hcVdGOHA4YklGRnRESkFuR1JJNzdONk1kY2VScmVFNWNSY1B1Ly9EeWI1ZjFlWmFxOE1YUDhyazlabFRCNlZoSDVrK2NHY2M0THJJVkpxODNKaVA1Rkx0TGdzNTE4NE5McEpNRVdNR3J4OFJ1RFgxVHYwSW9GblplQVYxRDJldUF4a0YwVTVyby8yWm9vanNwN0tKeklwVklxSWJPSkhGR1c1ZHlKTXRPb2puTSt2OUIxdWkrWXpML05rdHpmaXFlM0UzN1hFNFp1YmZXcnJ5L2VDdTZwV0J5MS90RWdMOVRJeGZzMW51VVZwUGpzanQ0dXZRM3Q1aU0zeTJ1ejJyQm1MR295ZGNMOWt0UHZWRU0yM3NTbTMwNGw1RkZLRG00RVJvLzZKWmIyZVh3UU9LZEdqOXpJU2dPNk1DNGM4M0I3SFJ6bFpVd1lPTkhmamRza0dSK3V5OW9rNEd4V0FLQTVhN1JwREZ1dGUyWHRnQzVPNklleUxiT2czVDZneWJIcnkwdE05dkk2czQwSDdXOTVUVVh0NjFNdTl0WEVxNmZSa0gxMEJSWU9rK1AxUVIwVDk4cm1hbXNySXU2ZzhHS0lxendPRUI2MzRhWGpFSTlkdytRazNTV2FYNTExT1N6NmZLOTlFRDdmUXFwRTNybHcrUFh3YkNoSXdVMXVZa2JxWUErWGRsNlUzc1lIdjNzTzZwZVNaREZscURjaTFTUUZ0MHZXVXRFdE1oVHdLdzVLWDRDd0hINitpUUVhazc1MXhheFE4d29ZczhQU2tOVnNsN3hrdkNSM1Q1QVI4anZ6OFA3dnZ1Ny9NdldpL29HdGZreGwrbzVxeUhHWVFReWg3VFUzSzM4MTBDUEhZOW5ocEhyeXBNTWM1dzIrczVTRVE5SGdhWDA2RkVvQjBId1U3eVVoNXVlcy93MTVNekhiS0VuS0Myd3NDTVpWN3lyVUtjdFlJVC9EdXdLTmlnRUNqTlNDdzJwbnJsOEJicUFOaEtjc0VkaVR6c3haZWlWT2Job0ZnZVVQL3FOMjdLWDRKcDN4OU8xNFBvVTQ5SSt2TEhidytudkNWanV3K21NQ3R4Z20zUnl1c2QwdXloeTVkelJQYjEvMmtSN2lNd2llZzAzcHBURG5NZjdHOHFzeTNocU1kTW41cEwwcHpQT21DOXlBT1l0VUdLNlAybDZBTFVNUWhVV29HM3NrZ0VEMW9vT1k0bDNaS3Y0aC9tdkk3d1l3aTRNWk5va3IvSitYWGZHQlplTkxISUd5WGVXUk9vZGx1OS90UThyNVFiVndxdVozMEdRcklSVXVxOVhHWHh5blcyQ0pZT1hTME9TcnBYa2ZmbU9xZ1c2eVF3YUdoVGZvbHRCTEdweUZoeFBPbm9saGdyeFJidkJtRHRjT0UrMyttTDk4Q0IvS2tFWnFiK25oTmp6WWh3OGhmSXg5TCtjazlKcFd0MER2MHZsTFVhZ3dGdzdIb3pTclpjWE0welFtb2J2aUFqTnAxWWVxZ2s0S1FzTmNrbFZxZjVvQjh5NUM5d1plbUxNYUFESThpaEd4dkIxeERvaTR6VmJJWllVY0F0L0h6bzRKbnFlTXhsRm1mcEhHL2tXMUxwZlNZTHpNQzY0T1FBR01QejRvUllMODczZ2tSbXdJYU91LzduQndMTXhZZWZuUHJ0eWdvaFJTaHU4ME56VjlNRFFZMTFuUloxbVdmclRYR3IvRzZ5TW9IN0pidXU0UjNTRVp1RjdxVUhtUFhRdDhYKzhkOFNwZzN4Y2RWZ2pudEZ5UVhIMWt3RmRzWmdWajY5WDEwUkx3cHIzbEM2aVAzUjBQOVhKM2lSazBUNjYzSEZHdUVLaXNxcmhmWmoveTloeDYra20xM0NLa2orMkZKeFFPeXF1WE9EWFNsbVYvSlVsSytuQVJ1WkpJeWxPeXp1My9ZUXVZcmFCOXBVY3d3RWtlUFRaQUk3VjdBeHl6WHRkK3ZnWlpVZ1VnbUFjQXd3RkRUWmRHUlJVbE56NTZlc1RzNm5IOUFDWk40eERjbkdIZ0t1dk5zZE9oVDR0Vnd6MllzbW5wTy9waThhOUtHbkkzTldJQlNlSXVWYlhPZEN6VVdzSTJGQlFSSlhjVTh4Umc2UTFCampQVGxrQmJ2cDV5eFFRLzRCM3htZUE5Y2lGYm1uQ2ZlS0E2bFFNQlVSV2t5amkvcGJrM0dmREhTQmw3R29KMFZPOCtpdlZEbVJNRGdhbkRveFJ1OE9abXpsSmd3MmtlY1Jtb2VNa1NBRVgxTThjRGs2Zi9ISHJrSkFPbTFtZ2VUZWFhYWpJWEd5aWtOaG9vNm8wblFRTTU3UzNLcjNlaC9ncFp4MVhGZmVyejFUWDdWUEowUWljNG95REpnTzZObFNMUXhodzdwMGtpb25qMFQveUxjN25RNkRZVk92Vk16a3ozUGt4NUZsMEJFd1FtM3NJVkxjcDFuWExrczJiMjI1ZnVjVll1aERSNkZ1Zm8xUVlQQWw2ejhocDFmaExGdUwxRjRBWkhaVG1YRWNiemhxRVNEZkFKcGd1N00xVEV3ZHJxTkc2My9vS0UwWUtyTEZqdDB2NXEyM1FsRTkvdkhFb284MHhHNTdObnFsWTcwNTFDeEtmSHkzSGY4L2VVV1NRUEVoRy9wYTh4NUk3SnErSm1zQWovVFFxaklocWk5YjczMG5jZU1tMTExbTQ5QmRXRWtjSTRqaEpoa1VPc0pRUjg3VnFXWlV6cElaODlUNitPSVNMT0RzUlk4ZysxVWh4eGsxM1l2SzJSb3BuYnhxRDlSbTJ0a3ZnSXJvTVErRHAxTnlCNDdHYzZmZXhqcUVPVTAyYkQ4WWEySGVocFVhTTZqY2JyQXRnVC93aExhVnpQRHd0YmdaNHE2ZjlrUnVwM2lNREl2bUZiRktmYVdPMlYwZURkbVBWM0k2S09UVzIzOGoyRmVLb1lKWFRBVGFaUUo5UDl5VXVnV2wwQW5qLzQzNDI1QlBraXNrLzJnK0tPNk9kQ2o5WFdRUmIzWGM3YytxV1FsV3NDbjQ5WlJsTUJ3U1lhS0FZQy9BWVVXOExBcGh5c2hLWVNOVmhqNGJwRWR2dGN3c1BuallmbS9ielJCc3FWeG1YMHlVYnRPazZDeTdOZElVMEg1ODZtdEhOdmhLcHljQ1I3Ylk4OWtPaTREU3UvQUExSzIxYkF2NElpbkdYUkFkVExudGpyTjFvbWJsYU5OenRtWjk5Sjk3bmxQN0FzeVpUNkJFaW55Q2gzb2V5ejduRmh0M2d0TVNpMUw3NEpqZjRNcStNMVNyNmh2U0luZmhWRm5hSHZWK043cTA1WFVycFFpSU1UZlFXTElDRVZXMVJZWHZXUWZPUlBUbWt1aWl0bHlaRFFWS0ZhK3l1S2QxSVVyNXl6bXBtZnRsbFRKSHMwMEZnY04vSEU3TEU4UkRPeFpkcEs3SlYyclRqQ0Zzd241OU5UeXR3dzdaT1hoR0dvVWtSQWE5QkYvSktJS0tlVGUwRnY4bE9lSkU2ZW5RQjRlbHdTempMQmpObFREZGhlcWE4dkZlbklXZ3diSWNBbUNIVUVhWXZkUkNVK2hwMng3NkR1YzY0N0NndHRmanFzZjdmT1FleGRRSm9ub3V4MEZpOFV6SEtUZTZJTzJBcXNnc0J3R1JsejRhQVUvbEtMbnRIMHN2MWtETE5LckZkTEErQTJ1NjA4UFo4U3l2VVh6bXVXWHZIVDVjWVFheUhmVm1keHJwa05MMzBNNEF1dlNOUTV5V1djaTJ3SnlOWDBaRXpJSm5wQnZYd1NIMGZzcisvdmpiaWRuam0xNzNuWWFaSkFLUkY3cDBoQlgzSUlKeVpDSFJYZUp3SWVrZ2h4R3ZXMWI1OEw1QmdaSmRPMDBiYnlhZlI3RUxyOWZITVl1Z2xNS2lVZXU1anFseWRqNXIvWjJpNkhnWE40bDJyOWx2ZDdrOEJPVWFkRVh1SkVFazFOVU1zN2g2bm0vTnplQWhLWUhLejZoNmJybk00OXdLOWU1SndMYWlWdGFUZS8vRFNxSmx5YkVTeU1LL1pYMHcxNFpWMVRCcG1VRGlFNFo4UzZpcGQ5MTg1OURicWVhZEo0cHJwcitFbWswUGwyaXhTUTJGTTYzT0MrOXppWjVmdlN5a2hYVWx2VitHdDN4bFFkZGpWVjVSZFlFZ3B0cmY4cVJrcnk5ZVN0Z0hLdWVsUmZST1NRSjV0a0E2ejFFSmwxSVRBcU1Ma2xBN1lzMnpqNmN4S2lpcWFBN2swWHNnbjlFNjIxMFhsZU41SG9JZ1BBOHhUbVZHQkt1Q0dTNTl2K25lMjNmSytZTE56RmkrT1JqNVVjYTJndnVac3BzMjJSTnRmR0diekl0US9VSEhwSFR5c1pzUmQ2emlEQW5XTXJybGpkV0cwZTRXeHl0YjNab3J1NTZ5UEhNZEdHNEc3R0ZuWGVudUF6MjVEeDdXZFhKT1pEK29abHlhS2VqVThBRzdhYVRNajEwZHJTY2lxWU1GMjFTNFdIak1MSWtPei9hS1JST2pnL3NoSHRaeEFPQ1pnak5wUnBHNEZDWnBUdEhLTWdrYXIwSVVqdEs1ZDVUYi9UOWVFZzBCcFd4WklzTmRCdWFRNFRXQXBkWktESCt2WWc0b05Ud1Ewb21GWkltVmNkN3VURFN4UmNncFRlR1pTcEJPSXhlU2VOZzBmd0hBMUQ2U1huTXhDT3JLNkg2bm9EMXhCOWVtbjcxbDJyVWwyZ3BMcUovdDRBbmFpbm03eFhQb0h2VHNjNE9uTDkzTU04SVNXSnRvTlIvUkNWK2Qzb1diamh4dGY3T1Q1c24yZmR5bXRDUVcySDVPN2tjNlBWQU5Hc0M5cUNkVmV1ajgvVWVNZEk4NWJpUm5heUl5UXJzZ3lRQlZtbGJNYW9ZK2YxYzErZVgxS1RRUk9aZFVwc3BNZkQ4L050WmNKZzZjcmlEY0NZUzZQVFhkUHZwTEJIalFUd3lQWUFXZFFPQzZIMGhDeWlmcGF1ZmNRN1RjUDZDSzU5UGZ5SE9XV1pxODlscDlIYVZZTTNKdEdsQ21OM2pGMzFzWG5Ydk5iVlZmTGJWRndzanhvQjkvRktPRWhlNWtHK2wxRDMrQlYrdEVYUm1ncVR3LzkzeEgvcGllckVkWURFQUtrSlh1SGo4Q21yUVU2U09ZK1ltV1NIVHh6THZ5bndST0g4d2pIaWIrL1RXbTdtZVVPR29yd05NWFpvQWd3VERLMHhpZUg3ZEcwUmxuMmFPcGwrWmx3RGszZ01NQlJ1YWtscVVUS04vSW5HR1BHSWJFNm9zV0NQTUNzRVJWUTJtZ3pRMHlIOEl5c2hvQnNLL2NRa1BnYXQ3cEdjQmZXbm5GV29TekJlOXJ2ZUl0NCtmcU1rWldEZHZ6UkZxZ2hoaEJIL0RQeEhvbC94MDRSenVUTm1yMGUxcmtTbHJzeXdkbnU3cThlVmVBVDc5YVlGdWtoV05EOHQ5UTFRNXJQa0MwK0VrQjFXTnlrSGVtL29qdGw1Z3d4elV5czJuZUUzbkRmWU00cHgzMnI0M3BpRzU5QUc2RW1mQkpndllvYWZ2aFJHbkVlQ05GRFIvTzliT0IycWZ5VnltTVZzenNJSnZwcHAzR1oyOWJmKzR1TDFRaitxcUZ4VGxhNXloaDlvYVMvMFcxOFVMQkhrK2NTOGJTRlUvazZwbFg0d1NTTjlMQ2IwTFZ2Z3Nya2syQXdVQW9WK2VCcWliNnI1NThPbnNmQmNWMzNPVlMyazlnNzRHOE1uWTBzaVlESVBoeW11bzJvZkRoUmdjd1BTZFJPTVpIdGtFbXNZcDhKaTA2VUVKNjc4SkJFWXJFNHVDOEJtc0ZDdm1RV2doWjFQSm9sSGw3eU5HeTBmbHRkeFNSWUtMUjh0YTRmQTNDNUd0S0xra01VNDlFWjJGWjRXekhuUWdqWlJ6SjhVVnFFRElOZXlCcGh1bFo5OS95N0pRN3gxYnp2ZTlqdWNla3I1RjJmdkJwWmZNa0YwVXFUZTdDblg4RXJBK1dXRlRFK252VlM0YWhGc0cyb1BNUE91V0NEQW44Q2VVVGd2MUFxcUE0ZGpieWgzTFRiY2J3c05YSUQrVmVuOEpLVEQ2MmN4VmhieEdZZ1ozMi9rcDk0cUlwVUdtdHdLUFc1c0F4YXdYa1VMVlozSVBZMkp3SzhOeUVsL3pxVS8yZTByUndhNTl4TDFWRW13NHZxZFBORi8wTHdOZnd2VU54bXQ0dm5oQmk3OEJGbFZXUmdPcTRacUJwcjZRWFVCYkRZSVJ0UFk3enVaQTl1eTdMZjRKWUliS2V2WEFkZzIvM0JHTzR3dUdpR2lqTGpzNklKTUpDL3hwazd2ZjN2ZTJLbGhjeE5NSzBzdi9GaHlqK3A3L1VqcStGUjVLbThGY0VxSloydFpKMm5vek9Mc0hWZWs1MStKSjQxS3loQ29yaUYvTmszMnI1Wkp0aG94NWNVamhXTTBQWG9qRXZBcHB5VldGM056Mm52ZkcrcWFQYldoWEowL2dYcXk2eHFRaDhYNDk5VDBNbzQ5TUpQM0xyRkNqalFaMkppazZ6MzdSdStpY3pOTTdlSHRVTWkrbzVURjlNeDBUNS9LZUNQTGVZK0tRMHhRc05IdmJHWFRpM3dmU2ZhR3RTU2VrSm4xV0FoTVo4Y05NRXdUUXdlK3BrSUF1MVJSbS9selNFbTdxdjhzazhxeVQrRW9WTC93dVd4T21pQk5xZTV3MVRFSEdtK2p0Nzc5bTJJRXQ1ak9YMHNINmJSYUZZVVZkZUpjZjhrc21pS3VCMjV4Q0FlaW5XaUtlMlZUeXdKcVF1QktJeS8wT2JPVFdtTGlMcXh2VlF1dE1vOTAwKzEvR2VBOUl6cUUrbG5YVkdWR1kxYWEvM2Mrak8vZjU4Sjk0ZFk3RU50Y1dLWklYSHdybU1KYVZvbDhzZEhNeGpYRm1MdWtnREErNVJ6NTlnZmNicW9QYjJaQ1RlZkU2UStGZkVQWlkwaDVjeW1kODIzN01ycnVnVXdmUTNrNnp2NytlS1A1UVZyZmtIVmU2MkhNeTcyUEV0RXVpQ2ZLUGZiT0VBcy92ZnRJS0xwYVJlZzluOU50TTFHcFEydXNkU1dodVNlMDRXcnY2UjFEV3VWU2NkellENnFQeGFYUlIwWXJMLzlPU2tBRDRIcnVJL1JDSXVFVFBlZ0ZnU0hNUFlkclhUK1RZWjhBSWdhY0Z5NHR0dTYxWUpud202SGJVbE4zKzFOZGJTbnhoUitwZUNFY3YrRHFiSW1TM2o3RTk0TGhBeWgrU1EzV01Ndnh2bmJDbUM0dXJpcWRKWmkxNnVlbFVocEhqNVpoWi9qdHA0VW9vRnZ6UXp3R3JTeTFSc2d1MHdkcGp1T29iQ0orWENneFVjWmdDOTZVY09yQUpkcmMxMkpDekRqUXdza0plMS9XcjJvTTEyYlRzLzl3YXFsZ1dUcVlUa1I0dHgydmU2dHA4Rk5URXNVeGp5QVlpVHRvZzB0SXJXNU1OQnhFNGZPNXY3OGh6dFd1d3hLamkzU3BuQTBVWkRvYVpzQU9ocDlSNWkxSUlrUUF3UjNTVlg5Q1lVdkdCYzJqSDJ4Z2xYQ3RjM3F6cVVwbFAvRVRudFYzamlBOENhYWlJQ2h2enpma2R3MVZsNkFoYVk3Qm1TclNSQlIvMlJWb1lYSmd1czBxRXlQa3V5OXJtcWdYWGNoS05VS2cyaDQ3cU9kZm1ad3N0c0lMRlNNN2NTaVc2ak5aMXlUNUFpNVpra0dhWDZDYXJpckx6WElEcyt0aUtpMW9NS3BEYnhmTC8zWnFFR3luZDVUZDhueUZQM1dFd0wzQWFubGVzUm9nSnB0V1pZc0xRekNFS1B1djVxNDcrcjNJQWRvTmszV2EwWmpKRnd6amJjR3hsTDFpdEdweTRDRS82aHppWW9mVkZNUkdLSlNuRHdHeG1RMm41VlNRY2RHNUE5YUdWZVhGK0ROZmhMa29hUW9IQURUUE5JcFZ0WXVMNzRRUldPVDZwSFV0QTY5U200N1BUaXd4TEdTOVN6RGJoVVJWWVBHaUo0VDZGdy9pUkFPNXdlV3QrTjM3c0VGWjZQY0RhcHA5NmNLWjcyd0JxTWJVZXRMQWRGeEUwNjhOYWQxNERKUFdCTXNPYWVzOHhvK21ybXFKV0pTcU1BcUhVT21qc2JwRXgzODNwN25kK0NqcHlGNDhpamFDNmJNaFhqTGNKL0pYQllMYmhJQWpiREpwb0JtbzV6SnQxUk81Q3FBYWhVbzB2VkJxdlA0N1NZaWZJZEdjZG8ycFlaQXdqczUzL243bDNzTnY5WHVOUElZWlY1bWYvU3p0NldndkNXNlBFM1ZHVDNJYnh4ZTQrYVNLSDYxRnRqQ3RPSjBycUlJUHVpUkF0U1QyWlZoMm1GTmMxWTZ4bmo1NjV1NGlYUkw2L0ZTQzBXc3krY3VWYWJhVkNyMHVaTldybVdja1hHUFgyTEpuZWJBaGM4K25aaFdnTzZjcTVTS1dhZktUVXAyT3QxTTFHTHgxUnpLYVdUbmxhMkFiZ01kL2FVTFdXbmpKL3duOE5WdDVEMnZoK2wzQmRIMEVTNjJZWkthVmJvWlBSZ3R1QTVrV29nWWtEanJ1RUFjNElLSXpRYWt2M1l0YnF0Z2QvMVBoT0lsRGdDUEp2ZG16UkNPU1lzV2FTQ3J4bDQvZHRZZ0ErUFFPQ3BmSWpzbWptR01Uc2pCU1hvczhBT2ZlQUsrc0RrdUNRR09KOXE2M2dtb09ENjNDbEZYMXozaExyaS84dkRjRFdQaStYQ292aUk3cEFMR3dzM1dCd0FtdE1FcHZDdzg0aytTRkpPb2hGa25rUExwMm9pRnZ3Y0FkeTkvOGl3eWEvS1ZnZEcvc1A2ejFIbWc1eDB2SmRkcndhVXVtcDg2NEJhWFMxcHpvTE4vYytLUGwyRWtoeFh0ZnBYWCt2RzkzNG9TVmhBMEN0RzBDY2pvdGJEWjhuclM5RWJUdHdZRGdZQWFGUG5mbTZPQU1EUSt3NTdEeUt5UXI0RkJkMWxJV1RjYkhleitiL29WRisxNHRHSmxocjREbE9VOW5uUjdTZ3pxV1FnclhuNGdKdllEdzBRNjczOHRCY0plUk1qQ1pBOHJhUlJHWmFJSCtNKzFlcllKcFprVDY5YVJzWXltK3dWRm5zdUtPem9xcGRJaGFPR250ZlM3aTM3anNCS2E5WEtkRjVoTmpINmp2eHZWdG1EU0tKbDdrMWhHd0hQa0VTNExVV2Zic1B6K09HU1VwWWx3aGdiSmZnc0N4OEpKeGtkaUVVZzRYbmlZL290MkpxQWxGWTVoYk04RUxZalFjL0IxdVVNNlNaWlJ3cThEYUk4VkZVNlQ1YzVhNUdIYlQyZ3JSZnBZNXJ6MUlxTmVJVmxyaGh2dWxaeldaVjZQR3l5MFAzaTczMzhobWNqQkp0ODRlbEQ2UDRXL1lIUFIvOHdyMWYybkdHaS82ejBCczZwZlFwOStsZW11Q0R1c3dHNmNCZU50UGczbDNaZTl0b2tMSkE4c2R4NXZqelJrMEkzRU5lTWs4Und3YVVQRkxkWE9tSVcvak1nVVorMCtUUGV2bTZXcGM1WCthWU11QkpnVzRQcDRBbmZYZmwzN3h0TXhRWkhUeituRFJKZEx4VG16UytCclE2aUxCRTRaelh5NHlqN3l5SThVY0JNRFhkYjY4OGtoOXVORm4rRGYyWXN2OFBuclR2ekFXdno0dHBEcjJtdGIxVmlpTmNGTlFKdmoybFBCNXJQd3VQendsVVNnem1GNjVoT2t6UHk3bmlNb1p1SXorMWtJRjI2dG1nb2ZuZ1V5ek4vbVRDNUIzNXlqeThFS1MzWG9jZW9Vc0pvQTNqQWt2ZVB2T1FZc25qakdYdys4TndKTGM0QzVtZTRZa0lzRU9kbFVpd1l1WmtaN0hnU1QvVmJvMEhGTnBrL0UxZi9CRW42Mmh3NUUrZ0h0eFpjMWhZSURWSmlHRGhrdjQyenkxUStKT2tCa1g2UzBiZk5UZUR1dDkwNCtVOVl4Y2x4TzZmR09SRGxacEVZR2pQUXU1QUhQZDNEU0pNVnhyUmkwbHNtZm0zTEJuM3h1RmZZc2NjZUxIZ2R2SE1PZWRLRW9HMU9HVjRjd0JlVmJtUnk4MndxbkFmdWhYUGxYM05lZ29mYkhac0VQeHpnT1dFYThldlZFSkdGZmpaVW9LNWU1Q0dwSlJEN3NZdTk4TTFIOG4rN1huUktGSHltamdTaFU2enBkcmQwb2dYZmtyd0p1QU5uUlBWSHNjTG9yNE9jcmVvdDlGTFh3QmljTmU3dmtCQjZibmNnZmlJaHliWDA4K3ptS2xIYUtUU1FjN1Jjb0VZcXc3UG81cjEySmZmTndoRUQ3L0JKNzhVZXZtWmpwYTBiS3hETEwxanFqRk9lRE55VXlRNE5nOXRWMVdCMldKYU5lRkhaaGU3dUU1YlNsUUtxazgvaTBLSlY2d3Jpd1hWeDBsdDBYY1hSMnpXRVlQNSt2QkJIMkVic2FNMTZGWmlOelprOCszMVJCODJrZFdYQ0prbzlRa3JPUitjNjV1Uzc4NDNkL2RFVkRoYitXS29wMk5MUFBzUmJXcGZMczBCTkwxMWJnNTduaTB4bEo1blM5QTd0eUNKNlB1N0VsSkVPbXFQZkt2Q1RGeGFLK1RjV0pwZHNXRWQ3U1VDWVZSZzQxdE14RjF4MzZjcmR4bWcyUFlCenlVQkF1UHpDWDR3SjdzN3ZYMDhiV3RNdDVMMEpMQWp6Z0t6a1Y1NFBSdjNib3ZsaEZqR1VFRE81MHNrWmxtYkR3czB4UURaWWk3Wlo2YytISDEwVVQ5NVQzcHp5eTdVc0dSOXJ2VEszSlVOeU1ZMVMvZHpZcDVmRkJPR3BKUVl1TmlwWXhHL1hkNlZkaHBuMzZ6WENFZlNDb2ZJeVNuU3FDODUxRGd3MnlKOENhVGM2Sk4yWEtjTkdTcUlLcFdTc1hZNGhqdmZ1REpxQmFKdUZuVzEvQjFBZVFuVEYzbU8za0VpT09aYUU5RkRpZGozaDB3RXgvYXJ1L1MzV3dBS2Rtb096SWdMWWVqVWlocW9jL1AzWEZONnJCUkV0RlA0cXk4RGVBcWVUNVRPaitOM29Ed0pwQTNsV2dwQ0V5SHNnaW5MdEVpM3JpOVVNYTVKNCtTSktPd29DU09ISjJFRFJBNlFMR0g1RGgraWI4VDdEWGlrTUZmcHMzOHFlSThTREZVV1dsU0lJa1lnaWMwemJkU1l1Q3FxRjVTTWZJU2U2UU9wZnlTOEdYWG5sYU05cEEwMkYrV2JBMGJJYUZheVVqZDF0M25LODk1Uis0ZmZTYzUvdmF3dFREVzcxdlZxQnY3S2hWMi9qNlRSR0NMMkYrNTRWT0c5bjBIUkpNVlFoK3dwOUhmZ1FvSy9PbEFSUTlmUHlPa1ZnNWV0TE0wMWZMWk5KeGFmOGl5dGZwT294aXlSOE90RDROaFFNM2EwaUhlc1BaQXhsMEdIbzg1S3pYeUtrZ2FMOGM1SlBWRHZrWFMxVHpMVG9tTVBRRkl0a25PWGovYUxkTGIxeDAxdjRaekp1SWlMR2MyejlsWnZHczJGRmdBVDluWG9zVzVBNWptd2VIclpQaHVBUVphWTNtaC9kaDZoaU0vSFE2cHpHcE03RHdKdU5GbVRaQUFEdVpBS3ovYmpCVm8xR2IraTBkVFpYY0E3OEkrVWVkc3dvRGhIMmhXeHVqZVNkZHNYVVprR214L3dIQ1VieUcybFp4Tmp4STAyVVM3bGZ3eEUrekJaOFc3UXVBb094dkVWSm9BYlY0dllEb0trRG9yWDBHYk9zOVhxZUNIYXhIclN6SGQzeEVlbEtDZ1FDNkZoWjIxR0dQZ2tWUEtxd2pnYjNmNHFUN3ZxejFiRFNIbDY2dUgrQVBaT3lxRTUxenhtSzR3dGVaTWQ4Rk1jZTZ2eUowYTZmeWg5LzBLQW1iNHMyZitkVWVmQ3VKbnhwZ0ZML1RnY2tkT0FxaStGeUNGS3BmU2lJalQ4MFVpdGI0ejlKdXpaQnFMYlRtd05XZUcrelFzelA1S1FPTldhN1NtQjhkV3pobEl5bVp5VGFEdUpta0k5MTFFUmF1TnMzdHdvYkFrd0p3WkJ1Mys3SFV1MzUyNzBGeDZ1cU15clNITVV6SmNNcEl5Nm5oMmszb3RHNEN2RVEyeVNyYXN4RGExS3RqZWUweEc1bUE5bnBzRlJXajR3dTNMRFE5RkYrR3RxSWZVVUFaNGdRVDZRTm82cG00Wi93dit1UGZ3VlUrVk1zYytSYWZabkpNdkpTeWpGQjFRUXFzSFRWT3BYdkRvYlZkbVZSenFGOVZENGhWL3cwcWIvZFh4ZUkwWDVaNE1WTUNqRlp2am53VnNyOGl4SWFiaEIwZVp4RUk2QTdST09zVXZYMUNUeHc4Q1ZVVXJzN2QwOURGb1J6aldhT2VOZU9FVC9PeC9yKzdqZzFJTVVSRWlsT2hyQVZYMkhqWWUyVlp0YVZGaDdUM3VlMVRLQmRVdFFKMm1wZlZEdHg2UGcvSGpuL3J0Q0NsbzRhNHVJSXhJYjBFWDdqOXB2QWhydU96MWJ3Z0Foem1pV3pWTWViVUhaamU5c0QzMFg2Qk14RUhvbG5qdnA2eFBJSS9QaDVEekxydmYrOFJ1M3JPa3NpdDBoeGY4UzBhVzVxc3I3U3pMd2FiR25YTWpEc2JCeVJ1REgxd1NoQXVOT1pTUk1RM2NVS1FOemExT2h1WEMxUE9QR1RjaWs0NTBGTmZ6STloY042R3RzTERSQWFoVGFvK3JLRm1XUERQcDdvM0d6SUhGNVU3NHhzMGJoYThWUjhBVXR5Mkozdm10dkdHVUoyYTIrSWgreUpoRzFYaHJHd2RaaXRPMFNJVWcxL2krRTBvR2dXdG9lUUJIL2FHeXdQY0pBZWkvY0R0TkZST3hyMlNzM3dXUVIxZUlQV1BjTXFlMDBobEM2bEFtWjZnZldQVmpQSzVLdXAxVElCV1hWeHpQYXBwZmdDSlQrdWdiN283SUVCRy92ajFtb1JpSUdmYytRaURRMElab21zZHExdFVIYXg5eVIvV3Z6YlNhQlhVendNRSt5N0Jpdk5KTFE2NWZlWlNwMXFyY2Y0N01JSlUvN2RCY0Zib3FWQUpYZjNBNHJ1enA2aWFoV3BHd3g4MWhpUm9rN0s4c3UwK2hFNnBWaTJ3TGo2d09SNDdoM2FObENpUm9IcmZlUmltbHVQOWhNNktkWGdkUStqVmF4anlRK2VwN0c5b3hNSG5VcVltV3E5a2YzVDQ0SnN1aVNReTQxYUZGSVYzVUptMDZOTTZsTFoxdDhMRWtINU5KK1pUS2JVa0lrZG9TNk8yWVB0Y2N4YXZoelFrS1B6N3VGcFdwd3hFMTJPMmcrUkpZcnJXTWZTU1hrOHpFZjBEMmlDNFJvRWh1cmY1TURPd2ZndlJwZUFtYk5rZUZQR0M4SmVPRng4bkx1U0VqaTRYWGcvMFFrdHV1Q21IT0pNZVh6RTlrejQraWxGVkl4bWZWbm9GZWpOV1JZcnBPYThWZHhBWjFKanBpRHhCWnBVODdDeXUxNzNJWURUTFQranhSUHpTY2l2STltVVIrbmV5TUNhcWhEd3c0QlJtU2N1M2dFUVd1TXQ4eVBhbFV4ZVJwQ2k3N2pBaUJ4L2ZNVjFYdUxUMlBaSHhJbDkxMUdQV29QeHhIVFVHTXRVN2NyamlwZTJrMHR2bWpHUm96L1UrVDV0N293L1h5OVE0dEg5U2Q2ajhkVDZ2OThWVmVsaEhkejNZdGtHVjk3bE1YOEtPSzF2Mk92NSszak16RmZqTWRyaXdLbTFWbWdTYmhLUkl5anBjOUlUZXdMWG01bkk3dXVrOExneUF4SEZScGxHOGN4NDFrRUh3c1BqTHlhUXRlcjVGOTBEbzF5Mi9wblRWMGxNd3V2eFphV0tTdFpCNEYvWUNZYTljS1dQdHdqNERqQ2J4eExkeFplWjZ2SUx4WGZhSjV1WmhBMndUdjQzVUpKQUU3eG1teEM0dzhSUkNSb3UxaFVaeHJsUHVFYk4zS2JMbEZvZW1ZU0hFTmhySUhyeFhZRjIzcjcvOWxhcDNCMndNeFdadTM3cEFDMTRSYWo1aEYzN3NOVjF3M25MLzRPNURJUXlHRDJUN2ZROGZmN2dDTmlYY2ZySm11V2Z2aGhCVXNmbFU1UXBIaXR5WGE1c24zK3l0aGJGbGxuYjZSYWw4V3RSSDFFSEpSbGpjTHdDazl3ZEpFVnBxM0VLVDNhNDFyR1phNHE2ZTV4MFRMNW96V3lFRU9QTmpWL3RieFh3ak5Rb1B4MmxqRFRTNXlORktqVUZycW8zQVJqd3dzaUdzcEpVWmIzTnh4dlkyODVwQzhMaGpDUWRTeElYV1RRdmRVU256NENUNllWRkdFVFNLWC9VYVA1S0RQczVLR3lIcnpsb0dhY1dJd0FzYU5jMGhUaGR2WWx1OWd6QjY4TENIUU82b3h0S3JrYW5ZOUVoK1RKbk5ybDJBVnVWUEVlczAzNnpXN2EvUGFUcU5zdy9IakY0THdtS0dSMTFYR3dReEs2cU1aVmJpTDgvVTd5RVFYbXZCMjc5aENERmJZdkM0ZGRlTjQxd1dTL0xIb1Qwai9NRjNFR01VN0pCeE4xajZLMS9wL3JtU3c2VjloTDBOeG56MCtmaFlXQlhyVHR5QjhSMGZEMU4wTlBjU3lFNGpaVjk0NS9YUVZSTGQyOHR1Vms2eEUxSG0xd1pVUHkzWUtZOWtRRDJKdTdId0lZK0NpYWkrdTJaRzNiWFZ4WWw0Vnk0K1VYUFdaVE1XTFpGK3NRYXUrem9WaUJIM0xuVFJoK2dGUUxBNUdObmhrYnNxbU03OGNKeXQyTWdaS3JsUXVOMkRMeXFuT3FVU1JnMnJIOUFDMG5OR3FLWDhERHc2b1g4UWd1a2orSVdBMk84dytBeWxQNmNjbjkzWU4zeVczUWJxSTZGbmZzVjBOME43ZXJlaGRaU2xNdnZDVkY0LzlObGJCaG9xMzc4bjdINEtaS1ZWTkdQZWY3SDhHcEFCa2VXbmFCNmVrYTBjUUZvK1JTZ01yKytYQWhkdzJWZnZQZlA2a3BDSlpReGZYRW4xS2dMK0dEbEkxK2xxTGQ5bGVsaHU2cXQ5NHhzUXRDQmw3UkFkdGVrM2hHbjNHWUtkc3lWVXRreDVFaFJGWFYwQ2E3VlBTU0pVWEhlUG84Z1BjMFVTaC9RZmJHS3BCY29aTmRLMGNaN2s5bjU4Ukg5KzJTWUZVMWRrVmx0eUVxLzJ1T21zZHFRdEMrVE03UWxFcW00KzhzSWMxdkExamppdkpBNlVFMUF4TnlGVWVDa3hYOWZvQlhHWDJEYktQUWdIaXZCVXFJTWRSSUh1dUpwVlFSTlpnY01BM1pLaHFlNnQ3NWxvZHM5YTJRc2U1SFVrSmNmWTJvSE9xYnlkeTg4MHdERFlncXNlRWpHVVBHRXlyQzF6K1pxMTl1ZnhsSFlLRnZZRjZSMHlKeFovUjZ3U3JIYyt5bUlxMzZQUkFYNnVNbEZQZDVxM3lReEhVVlBnNFJMSFN4anR5RG96UlM3bXRUWkRMN1pjampvdGhHUVJ0bUZkbjFUamMwV0JjN0o0ZUFQbDN4cVZ5RG9zUTR1bGx3M050bWhPVHV1d044RjBpbnl0dFpvMEx5Um9tRzhEZU1WR2hlQlV4dVZKYUhBS1ZwKzc0eXg1SnBZT09kaENMb3Nac0JaRzVhS2E4VEwwNE1GRDF6ZEhPak9zMXlpZU5HWkpXV1RWcXRtMmpSTTFXeGZpbWdEejRTcHRMQ1hxemxhWityRHBZeWtPTmZhbTdNMi84S0U4c3NxWEkrWklZNy9QZGQ4WHVhcnhOMEExaTRrZWRLZnhUSy9MMjRXOWNBd3pIWWxUS2ZJWVlleFRUNmFyUkFtQzF1Y1lDWWtxczkrb3cxWmNKYzhMU1VBQXJiMEFpYjZRRWdyWWlSbE5zR0lTMXBpbzhwdnhaTVZoZDRQSy9wOWpjY3pIUVpQWUpzTkdrclVwTWdybWZvcjRZaTE0OEd4OE40SkptRTE2K0k4ZWxHU0lFQ3FjckRMZmNGWlUvWlY1VDRyU0FHQ0lKd3VDK29iVDBBbUpUaW5yd2p3Y1ZDK2NpaEhpYzMvc1ZLZFY0SUY2ZUNDTEsycG9ZNWJDLzYyR2IyTlpDbDNnQ1ZnUUN6MlNPL2x0ZCs3aUFGV2VlL216dmI0R1luRnFrTkNrOFlMOHc4L2Rqck1nMkZab3llYWwzb25lK1M4MWUwY0VnQmZlV3dIY28yMHFhSE1RYmNPS3JEbTI5TGZNVGJvSDUzUDBhRW03aEhpazR5bmJ5UEhIdys1WnJkMGEyZEtvSUhKZmkrbis4eFErblNxNGJRb2krUjZ0b2pHWlFqY29GVXhTeFFPendRVEpIM1dOZWZ2aTJwdEdOajYwUHFaS3BGMHhRQ0I3VUhFeVFrb0lYM2VZbXRUc09uRUVPQWRONmYrdEszMDg4TVZ6TGFkdkJTbFZtdFVENzJKbnY1VWNVR0dMQThQaDBtMlo4T1NEdjU0RUEvMUpqbGorZnBacVl2ZnI4Wms3RUE2alMrR0R0bDN4MHZBNzBJQTAva2hib0ZLUlNWMUo1ZllmMTV2NGFEV1VjWTN0VHRudkF1dDJQbmJUWVU3azFvazYwU3hoaC9pMzdJUnR2aEd0bzdsQ09aeDM4eHc4N2FCOEJ5b1hlcEV1dEdlNkcxcDhvdHZPZFZ2WGZibTdacG5QcUFxbXIrS3UrRW5mSW9vaGtMOGdGQmlIcmxUOGZvMGo4M1gyOU9TSmV2bnBYNXFXQjEydDhWbmFNaHJzRVIzZTJLaytXelU2SVYrcGxka0c0RW1obEdzY1d2QW9FQXYyZStUeHEvRm5tUzZ6UmIxMndrUXBMblRhZlhsM0d4YnQyS0xFRzdmUGRrOExxalNYS09nZU84TmxpenhIdzdsSXg4ZXJDd0dYbGhoS1BPUVIreHpyM09tRVQwNFo4TWdUT0xHbHN3QVRCYkp6WmZQZTM5TXRLQUFnaVFUbzNmMUZHd3RURzlTc0loVlIycnBsK0dxZWVCWHBJbUR1V0pSZGFUU1A1aXdQekIzSXFwN2tVbWtTWjNvOXA0TkpzN2pUako5Q3lSYkNSL2NSTXdVd1RMbFNvcUNGVzVLc05oS2tzVzhGQ3ZhZTNadXZDMmtES09uL3FNMnBqVmFBVWRBVXljT0sxWnlXdTBEdERNa0pBKzJRZ1hwckNXRFpGOWZqRThGRU02T25SODJrZXRBUHdmWkNvakNpQWk4SUFPSmZYTnl4STlWc1NGZERySmVzcDVWTG5hN1hJS05FQ2tqaCtNMkl1VGZRdWUzTmgveUFCNTJwVllHVkcxaU1UdGE0eFVzVXBJMFNnYmtDVHJ2Ykhjd3U4bWVmekRFWXJaaEZJelhna0dnYUprM0NRYTFncjNmOW9Fa2lHVnM1THdRODNhK0d0TUFzNUhVSm9QdDdNQmd3RmFiUDdaOHRZRlcvU25Eb3F3b3pRNWYxdStoN1JNbzBpNXppT2hmYmg4YlpZWVc5cm9Wc1ZQakxNbFZoekQrUjl1VDh1M1hFZUhHUGpCai9Lejk1eEh0b0Z1WDcvWU5VeDNrVElLM2htVkgwcUJaT2pZbWpaKzhadmFmQnBGUTBkdnJqOVdOa3p0YUo5QVNoMWJjM0w3Q2xWTEs3R0RPSDJlaGNMZ3pDaE5sRTZNeUJZZStCbXJPY2hBTEY2RVVlTGlsM1dRUUsrdVZ1elJWdEZ5RnhZNlBDTGxYdHBqVXNUU1Awa3pmQ0VjN09raGxrdWFkOGlkMnB3OTNURjdvMHl3aTZ0RGtQUlhKVS96TWhHWXdhVkFYNHdQMUVkbHdCRHM5S1ZsVnVmWHZkSkIxYk94akdGL0RTQktjd3pxUTdVSkZadVFYUFZEOVMwelg2eUF2ZDNxbnNvNDFUMmUwU0tuVEd2RzlJeVlyckN2T3huTXN2U0NSemN4TEM1TGRlakpwK2Vja0I3aG9ldzZ0SXJqUERLZ205bkM3ZitBSVc4OEFWVkcrSVlEUXJIbkhBeWZDRVBLVllMa1F6L05QY0NJK0dYQ2IvUmtnMkppU2V3QzlCcklGclgzdFlOWTl5Szlzai9HTnV2OUN2dUh6TXJDWWNrdjY5MXhKMzV6Ri91bEl5VGJmSFhsTWZWb05tNjJZa1JYNTFkOGg0dFBYRWFZV2JBVEJJTWxtcFJDSDhFSW1Ca1ZkNUlmNDhiNVM4V2pDT0RXcjdaS3d2RXJOaGI1YU8zOHViMUZkVEFHNFFYZE1lNURkUXZoVnc1NGwyak1zbEtsbEk3bFBGT05lY24xV1FZT3BsQkx3SkI2dGN5NENMaEhCTDBicGhLM3RCZWFDSFZNeWNyeDViUjAycEJWdlRlU3RFMkxCWWxRRzIxcUU1a05nK1RyQ2U4OGhpVTY3dWZFY1E0enpraWRPN2gvZnRYQTlsWm5QcC8vTldoUkdaS0VnTU0xa1BwY3Y5UktYZnBJcGF5RjV5bmUyNVV1MHZYd3oxZ05zcjZOVUFNNVRIL01oT3hJRmtEa1QzUGpIUGpVeDRHMnVkOEVCOENFczJSSEY5R3BvT0pMZjBzSXJVdks3cithQlNBUndtekl3cVhRUmNVM2VVbHkrRDlOczZIQVkvb0tEUW5ZeVdzTi9URzg0U1M0UXJYQWt4bzRYQUNFVksvQ1NpRkVZeUE5Z0d0NDAyUFN4RVhiNXVCVUo5cllpT2tRMmNtWWxOWUpGYjRrZGxhU0dHeHhNYWFTZm9KelFTa2VqcmpLV2V4MGJhVVhsS3NzNzBzK0l5a0MxV3Z6KzNTNEhUQUVWazUzMW9QazFuamxHWEp0QUJWOTB2SVFjSDErVU5CZmhXY2dIUmhCR21vSVRJR0hYRlcvMTNPaTlVZkhyZnpwVzNxUzJZRStuVFlrOXU3MWFKTnNTb1NNcy9KZDBweThDb283MUN1Y1dUNnd3N2Q2SUhiS0l6RnE2K01mek01YWJIYWlQY2NXTDk3RmJjRzFWWmJsa2xValI2am5DZFJMMHkwTEZ1TWoydWdkOXFmeDdNV1NwSlRuWlZHVm5JakZla1lhMmFjd3Q0QU1MMnhCdU9ncXh5OTZ6bjN5WmxsNnZ3RUtRcXVwTXQyNXY4WURKc2l3bkRvQm9sWEpyb0MwY01oYVdnaFhqdlBGNytRdWxpdHpKN1BFTEFNMDgvQkdZOHBEY1llWkdTZVZTNVNicUhqVTErVTkzb1BLcW52aUJkWUZjSVR3b1F3RmlTNkVTYm81MVBXMVhhcmJzdnRUWUs3RjdRT0R0RndGZW92QWhqTVZjN3BKMnVGNmV4aHRLakVqcXMvWmYzZnlLT0VUT1V0MWZhelluQnZPdWc4Q3RtQ0xUUXpyNVNLZmhZQzdwRTVTNTNyY1I1WVdtaWVkeVYwdmRGVEdpcDE3aU5DUDVtSEZoNkwwYVJlRGszdi93cnhObUpqQ2g2K2J6T0NXZWYxRk9NM0FwQlFtNDRjRi9nVDNnUDUydjdRZEp4U2RYUG9Sa1k3YU1pZDduelVuL3ppblk2LzNocEdzaWx2eGpDcnE1MzUzZVF6YUMrSHQxRDBHNWhYdElSZlFEOEhTYjZLWDVZdGVhdVlhUEtxYVo5b3JnbTNlN3l5Vmo0a3VhK3UyRGdwenhwVEEwZGs2cHFsMDZhVlpERWtQUlluTnNVc1V0OXRya1RDZkdWcWFGbU1IMXU1M21rYTdUTC9EdWg0dEZzWmlaSU1jbE9OQVJ0YkN6cG5URkovUGxIZmhIcExzOCtlaHR1WGJKcmN6QStjcUpFMENwSTR2NGtNa3FJclB5UFJvZmVBVE1uTE9NQnQxL2Q2am5nclJTb0NSWGFWQngwb25YckJCNC9WejY3S0ZtaDNWelhNT216NzJmSHF4TnZ3Uy82Y09KUnJtdnVmdnZFUFpzR3BBc01hQ2dCM21aSnJKTGh2bWxYSTI5S3lGUUVMbjlpYVBNY3AyMWhUeHVXRkthN0FmcWZ1anFpU0ZxQ0UxakF3eGdqQVU0ZVIyMi9uNVV2Zk1INC96WVpIWFlzdXc0UGpLdm9vSXpPRGxvQ09jTVIxSHFVVG9yZHVMVUZRdS9yYjgvTkdPY1p6d1R2QnV2S2xNaUtFamFqTnp5VStNbGpTbmlON21WUDVaVTQ3QXk0bGJEbGR4Vm42QUdsMmZHaThzeTliZmZvNG01bzY1eFY2YWw2a3dvUitQdWFwYVl4K2FldXNYNjJoUDNTaWNaUXdPYzJSb2x5eHpkSG43Kyt1VXJ2YnQ1a1c3M09yMkZDNWIvdWo5NVQrbWc1V25MZXFRVkppMmt4OWl1UkMwTzdaMlRQUkpNbkFLcEVLSDdmSTkwNlNpNjNZMU5Bckh1OWxiMmtiQVhSMUphY1VqL3AzQnE0K0JJSGNlWjhnY3M5SXVBOE1nTmkvaFFsS0lWeUhna0NBeGw4K0tqL3F1SGpUTkp5OEpVZ1hBTFU5VkUyQmFaWmU5SkdpY3JRSjYxd2VtYjZqMURKSzYxRm0rZXkra0JqTWU3VXZhbm9sZjFYdmlKcTh3MVFCWTZkTkZPSnJ4RS9EYnNGbjhxb1FjNlYvYm4zSi94SGxrcDIzcXNaMTQ3emIyTUlUTWZ3UjhTclEzOUhLVjdjUFJ0UHdZWTRXMEhHUjhhdWlHUlJEek9QZDRvOFZyTHFGUVpJMjJ0bmp2R2k1eklhU2NvNXUyL09lSFhYRnMrSVAwL245R3BMYUpVL1VBc0Nhb1RRdkVwVzQ0RGM4aGhWQnFaZjZmbWdrcjYybnVFRjRLTVVqenJraU5nRXJmc1lQZHViUVZ3Z1lvZVJ2bWw1WHNlTzU3VzBmRlBOWXVRSkY3YXVTaDBqMXZpR1Z0TEJnRVFYZzR2OW5NTmxBN2J6N0ROdlZXNlN3TEl3OERuUFRxWlYrUllJQjEyYkE4Q1ZpT3YwN3Bya3J0RnlRdGNDK1FTV1Y5RWgyQ2NPZ0FTa1RBWjF0MWI0b3RBK3lKMjQxTDV6bmh1TjNiOWpJTC9TRE5QZFdNb3llV2dyZ09JMzQzSmhkRktMWUt0RTRlNlUyaHJGd3g5eEZwbEl6bDRxNEI1RHFocnBwc0JQSnNCTGt6WlRkZ3MwNlpIQVJVZUZKWXZUN256Q2xPS1Y5R283OFJJVkV3b0piV2lJeGRYSXEzZktJQnRZSGxZMVJXd3NlOXBtYzQ2THVjSDlWRDE2b1lpcy9QSXNOUndQWEpYYUlPanpzYlltL0tCS3ZmQmk1R1JqRkxjSXliWFc3aDdBYmxQUVdQWm9tT0YzRTAvQ283emV6cDFLOXRadGVKUURJbUM2UTZlQlZLa0hURWpGWmd6REhUMWhHbExsUmwrbFlzUDJnVDBtOWZzYml3VlkyQzZQOHhwNHlzR25GYmhLa1BFd2FXNUUrTUI0MFRDY29ra2RUL0JxemtVaTVoUUdKVHpXcjg2UDltTkVhNkE0NS8yS2tndEV2aDJaQkI2MVhPR3RFeS9EU244Wng3YitSZ2FOS3orQlRaaTRPRVloNUFEd0YwVW5mdTJRcEpwQzYzUGxIS3lpcWlsTGhTM1d2aS9ENjNxVTZEeEJ5YXIvQmdXS2daWE9qQTI2aHljMERTcit4aFFnb0lkSkRKaWFSS2NDaFVFTVNqUTNPV1ZXb0k0QUU4NWFHQnlPOVNtcUZxbTJWYU9GeElXM0o5VEcvVTNVNExzNEV2M2dyWkRVaXlMVXpacjhCQkUzbW4xZGJYYVAyYXlIb0NwU0k0S09BVVd1YVF5Z1FOcS9hTmVZVlNzM2dnb2IvUXlQYVg3aWJKZy9rYUJXS2hPbStEMFBMaGFoaW13L2dKSmFLcDlMS0pqQjJGQ3d6MW1KUHVYdS9VaW9obHcrRUk4TG9HYXRGemxFQmxDNjN4dStPZXBrbXJMNGk5OXlTTkVBZ1VuY29NMm0zSUF3cTViWWhLdjZMajNVMjBQcm9yalFYU3lVcXBVYnFzNWpXY29Lc2t2dTdyQVJXZ2hlVzZBM09MSTZIb3ZoNHpOd2ZaQmh3b0ZISHhsT3ZMN2xXVmdOaHhlV3F5ekpRREl5ZGhkdHUxcXR6Q01SZG9GY3QrQmNvZ1o5T3pwL1FEUVRHNFZVUWlZNGRuQllyT3FIOWZyVGk3STBiK3AvZ1VGMjNGR1NodUlheDZMRVFhNnlVOTlsV0d4ekRUeE95b3lnaUtjUEpobXVCTmZJKzdKeGoxYWlZaEpuOCtaNGRzbEJtTzU3akk4V3F0Ti9aVlQzYVBIb3RMSFVaZFBkQysrSWFNUWxEUzdsRXRaektlOVJqOE5meCtlS25wWDFMZjVXTkNZWjRwTGU1K3FDZG04eC9KSldMNzVNbGxUdmJIMkF6eWdmcmdmSEtmMWhCZ3F6Wm1EeU1EWU1oVFNvQU5uU2ZwQ0pqeHo3SDBqZjBjL0haRmMyM3Y3SVl6VUg4Q1Q3NGNuL0ZPd20zQlB5V2dCbWp4SmNEYnlycVRDYVc2U3UvN2N0RmszY2NOZ1hDUS9CQkw3Wm9oYlFHSUV3QjRYM2xNc2ltL2dCbHNzK3RkcG1ZamthdG83VUx0VUhxUU5NNWNpMDloa0gzVU8ra0VwMDRiL3VCd1NwOEoxa3k3WllBbjA4ZEdwMHd6ZGNEMmxHVHQweE9icEpKOGRRbXJZeWJRaEZSRkNJVmFlZ2RWUmIwdzd5c3A0UUZMdWI4YlVsWHpwQ3BoM0VobWViMUg4Z0o5QmZweWpPL1lVUFRUb01SQ2RTeCs3Q3BwZWlpZzhWN3gxeGY0V3BwYWRGRTZHU1NkQVFLMkRxZkNtVlFwa1JPMGIydXlGZlpBcjdOaDdHRWY1b3RMcE9BbmJ5em1aUDNKSTFPMHdnSmRxcDZ3NHIvUTlySmNnOXMwUlorVmF0aEYrYTJvQVQxcitkSEJIRVRucGVOMnZob3ZlQWQ1c3dQNTd0T0ZtT3dzWlVDSEU4UHlWRU53MzVWb3I2VWpCdnZmVnk0SEprU3E3dU41aWJzcmZibWltQk56eXQvSUtBdVpFQnd1aHZXdm01SVRORzZ4UTRRQzhScnlNUlp0L2VWQWhUVUMwemZUVkZqbUdySTFXdkNibzROdy9icGQ4QUV2a29YeElwWUdYcFRIbFdSRXIwMkkyVU9JVUF3clU4aGdrcVhLTjdqQlVTUUtyTG5kUElqZkdDclN4S2RXTy90Y1JiRm1KdGt1NkREd2tZYTNjZk96SXNicG10NStXSGJudkJ2Y3lyMWY2RHBTMVQ1Vlg3Rll4L1g1RzJnM0NKWW04NzdaVG1SdEpmVi93MVVqNzJSSXBsMWpoU2FJU0NxVG1BS0pKWnhlUjdXTUk3Wm1zQUhYUDNzLzNuMmN5UTlMSDRGVjJ4NTFpVzluRkxsQUxrOGFKVG4zTWZMY1ozeFVKYU95YVdGVlFCdnc2K0hUclM5bEVYTGNYSlNheUlQUGdlZTVIVDQ0V0hRb21uVjNielVLYW5ubE9nQW9IU01BYnRCQjF3UmV4L29jMzJtMHlFaDVOdTlaTmQrWmpKREFEWHlrdGdFcEpsYk05Ni9RSmdPYWRzaE9NVWdmNEN3NXdraG1wTmgycmZoTnpvNFlnVExyTldXcXNoTE9ZOFZqTS81VTlaeXcxZm5WNWdoZ1lKdFBaWk9LNFJ1Z3VUK05kekpyd1B4RTdpeGphZEdsRWYvUVUvVFpvRXZXSXE1T01Ndnp0dnpIQ1duZmFDMit4c3FMM3JKQ0g1VzB3ZkEyQjREaWpxbGJUTGNSdW16VTlrOXRRS1AwNkF1dm5yakJFamdTQVhheXhKbE1pU1o4QmRwYk95L1lhYStwM1BBNGtIZFR4cUh3S0JVNXJnNkRhcDVXelVmVWgxeU9jZU1PQUl5QlN1QnVPVTNSU1phaWZZajJoNVNSd0ZaZTFrQlhOQlZLaTFncTJSTytZZWVuSXhtSmcrSklzL3VqWElFaE1nTktxbVNjaGlVbnhCbHZsdmliK2tNM1BBNWVIWktCL29lcFhmTHNBSXlSV3krN2pBdlBKRmhEcEJPM2tlSTFoK1lROVJJcUZNdXBGT01GcGVaelUyMzVTZlM4Ym12NGVxZy90SXV6QVFYTnE5b29VZWRaTGxSakJKc2dDaVZieHBvSWRBZytDM0tEK0YrK0JieXh5VEpHRXJDYWtncXlmYUJlUnVIaUlzVzFoTUJ6U3YrMmo2M2dtY1dWeHhpWEtXZXNiMWRtbzh3MTlvOUFuMFpHdlJMakhHcDVBUzlyTzI0QXFwRDhGeVA2ejVlNjdOOHhONjE3MTVaK0RnQ2E0c0xoSFRmZUJoSFdwalRhS3JROGdrakdPOHJ1SDV4TU03TThKUEJRcDlMQ08wVWh4YllpNkRSQVpITXdNNlg5eWNBa005bUdoVWdRN1c0L2w0S1NFTmtEZm50K2l1T2FJK0ZXdXFIMmQySkVRVUpZNnBrZkZibjJERnM0aTVhdEFXU1h4a2gyZXJhbzBsekRCN1Bpejd1TXhGZUxGeWRhb0RyeXd1Mjlla2x5bytCa1J0aXhXS2RYY1BtOFpEUDV0dk5IblpoWmdWYmo5Z3krRkNtQVRTL2NRSy9MZmN4S1NVTU5pL0FWN3lxQWJLVDdqZGF5YVdBTDh5OGRMam8zQU1HSTlDUGxVM3dSSVA0UnlnYlB6cnI3V1hDVHNlZXordEtkM2d4RVVnWWNIUWhHVVMyT0pyeFRqTCtGbnprNTd3TWhtQlBTc1JERFBHK1RIYmVNSXRZWDdyZjhZRHQxU2wySzh1QlJwQ0tpbksxQ0FJbmhLMkE1d0tWamdjT1hRR3pscWFQUnFGK1VPSW5DaThPcnZWTUlHUGcwanNRN3hnZkF4WFVCQm9IMlV2U25ET0Vya1IyYlI0Nno1WDlvc2o2WGUzZkkrUGFSZ1lsY1YvUVh5SVE3UFpSWWFKRkIzWDhYTHBYMVFIMXZPM1BoLzg3MnBmUUZEQ2RTdFV1VjFKcS90bjQ1VlBHZkcwaHN6WGlHOGxrQjB4amJ1OVdtd1hsQnBWdWJyZSt0eVFxVGZQWit2S3hVMXVYUVo1bVozZnZyREJ4ZHZPK2RDckpiNW9WZktsQktSU1I2UUdEbGh3d0t3TkRpL3kzZW05ME1RWS9kaS9ZOGNXM0RaYkI2Si80WmJuQlhsdERGeHJleFp5ZnlXUi85bFpUeEZodEloeTdhU0V4QzgrL2RnR2VzVE1UUkpzNTArMFBNVFUyOGoxL2hvaTBDOVFGNjdKNEpRazN2VDBVZEN4R0VWM2l2cEZHaUEreVlyZHlQSXFuRjJHc1lsVmJsV2Z6d0o2a0UzNkkvcEtTWWY4K0lEZ1VtMkZzajF4RElSMVdaTWhIcmNTc2ZMWkhCeHAwbndmMG00c2ZTanFHelVxR1BSVmZPaEw3Y1pLMkFDSzBISmV2VUpZVmNNTzlqUTgrSFBwdFlrQ1JKQ0ZHQjcwbWMxd3NtNFRIaHZGYmh5Rm5LZzJzWUxpZG5jVW55QWREMjBza0wxampsSzBJK1NlVXVqS2FEWFU4cjdyMm8vbjNlaGJ5dWJLcDJFTW1TSENKYTdyWS9oZlZUbmRCb2xmTnZzWHl6WnBybmQ0N1NrQU5ZZmMvdzZvOXBxRW8wZU5VYk5kZjZiYlY1aWd1dkUrdytYS3BucXp0Qm9jU2g2eTYxQWNmL0oxaVVCWUgyNGNtYUJrc0xZSWszL2IvTEZ2blFaTzllSzYyemJSR0NaU3Zxc3I5dkgzS2taN1p2MUR3VDlReDUrZUppZ2s4RDJCOVc2b1FDY2hYSFEvbmVIT0czSlJ2WlcvMTRTcVk3TEl0R2tFZmxoL0tZa09NOXJ6QW9OOUNnV1RoY3N4aEhvaGMxK1ZuRXZraXVobXZrM3JaT2h2S2RtTXEyY3BEZmFjVFRwYTRRQkhuRGZEOXZmMjR6N1dvaXlKM0tpVEZkcTBUQnljcEJSeFozS0JLWHlWeGwzRVk2SktrbDdDVDJQb2JyRjVJazhWcWlxa2RZUU1Nb1l2WWUrWW45Wk1PU0Q3L0tJOXdPSWNTeHRramU2SDZqc3NGTC84MlZZWmVTc21sdDluR0cvWWQ3MUR3dHRlL2F6Qjk2cFc3ZHREZ1loTmZLalR5ZWpra01TSnVlL21BU3V1a0lidm1hRGxVRWZSZ3prdTQ4blErZHdZZ09TVyttY1Z2NGdISVRPalA5SGE0T3dDb2RuRFlUT0lad1lkNjh1NzlsSTFsSkwxeEdmZWRyU0ZzRUllYzNPZXdrYkxiSFpaRDdsVUNObDg1cnY2a3JiaWlGTDdiVnNWWTlQN3V1bFE2NlJqQWwrT0Qzam5JWG40MXNRQ0RDTmU2THBwSFlnTTNMNS9UNkFudldzVUY4VFZxKy9UNHhxN3NQOWNKQlovM3E4WDhUL1dENkNZSlNYanFqVjFLRStUVytOdzVaZXNQblZzTGY4b2pDQVZKMlVBdlV0U1I3UzNVZHd1T3lEUTQvaGlwNFJvb0k1eFpsQVRTM3d0Qjk1UzhPWUR4R3RBMHdCR3V6UG1XV0w2UWNXd3V3MWFZR2grS3ZQcEFXTFYvaWp3TnQyQjlzYkNMdngrb1hFN3RaM1VjcWxDcDJibFJJdmI1VzhBOUpRTW5iMFYwWWpjSlJ4a09ic25OUmpEcUZHbFlmWHlXTlc3M2xLR2JjL1FnelBiTlpsU3E5U3g4LzJWNVIyc1k0dGsveDVTaE1WZGh3Zm11K2UrWERiRlZqRzhGZUtMbUpvZGJweE1LSlVlWjc3cXR1SmF6MC9ncGY4UlZ5cGxEdlVlZ3hrZys3UDIvN3RlOE5QcW5lTS9iQlN5VXhvWEJhdU9oWExpYUNPV3hiNzlCWWxnbHRicGZhd3hRMUNsSndsa0E4MDNXa1pvRWhCZS9EMEpwL0tuQ1NaMWlQekowekkwZEJRU0U3YkpLMnVQblk5YXRWUEh5cXJWRlVsWS9mQy96WVNqMVArZjMvYi9jTkY5TXlUZURyQXc0WnJjYmNZRjhxY0pJeU9SMElGWDRoamZVUGpxT2NTUjVMRTNCeXVmVmlpMmlBanM1dXp0SUNnQlV3Y0NSbURnRUlRZVJUUm83dG9kcnJqNVpSYnEyeXI1QkhuSjFUZm5BM1JkaGtRWGtzNDhXTlZUSzdMNVJYWDVVaExmSkdlcDNGRUtRUlcrQVpRaTRoTHdtR2NCTENrV0tkZFFCZ2gyOW16Q0FHeUVpQjdSSVVqWTZsVmRFTC9ueU1nR0FITlBrS29TT2lGMEtNemI0Y3VySXdNRnJvZ1U2NmJLcHNxYWpsTFp5d2VmQ2x0N0c4aDY0ZVN3R1p6RWNxN3dUemdsbGRYN0ZySmdwQXI5WC9IMVNFMU5nQjVvQUdRTWtseGVsQ1VkcnFvQmlDMmtHWHQ5SkwwM29KSElUYmJZTmdBaWZpdmdJV01ENy8yZDJ2cDc1Ri9OWkFSTGpLWWNGQ2VOQ1hNUzRtRVY0RFRBSVkrSmN0Nmg4WXdpQnhVZFZROVRSYmtIRzN0UlowaDlhbks2VldicS83eTZxN1J3NG1aYlYxeVd0U0Z4WFlkZDcwakxTUVQyMzdjbGJidGEwVkt5SW1RTnF3ZmpaaFB5MDRvcmVzakFJMm8xMjg2YmowOUZjdVVpTGZpalI2enVvMnFIRjBnL0NacGMrZGZBZWZ2V2J2SGpDakNPdjJaSHQ0NEU3bUFDbWtXV0ZqcUUvK2FpM0E3R2N3ei9iWlFVZjdEaXlWZjBPSjlVdU94TmErU2lJUE5sdjl6cGFXQW1sS3AvUkI2dWc5WGF4SGU3bjRNVjcxbjk3b3NCa0lTU0M2WW1ZUzRTWCs1VlkxaGhGSlBMRXFodHlaL0pLaG41OEY2YXFBdjhkbXNrWkRJVzBONVVhcFQ0Sk9CNFoyMnZ1NDQ0RmpSVmwzOXNxMUxnanlCcHVnNGVwd2sySWpnd0RKWTRqenlpaFc0WGV6Yk4zMUlYV3JUR3JoMEtkendteTROTEwzUGo4b0lRSFQ2YmR4YVdxSXZ5NHk0ZklseUNac0RkZEpGeUtFNGw2eW9qYmY0ZkVOYzIxWWM0TFp2Y0dIOWNLZDhCS0s2ZTZTVzdLWHZ5bTEwckhOR3hJTmhXMndWb1NyVjFZSmR2Q0JHWGl5b3ZERUNoWWI1cDZ6UWxsa1BlZmRucWI3V3RnWlFtWlg0djNrSm1LN3cwNVBGdi9YV0JFUkJubEkxeG9zMnh1RUNlaG1UY3JIbEQzUGVjeWhMWW1uVjV2UDRRVEtHR2NNbXRTVVFaT0JCc3Vza3FmK2NJMTVyL2wwL0tDSWlKWWVxNVBiVmJEelF1bnFIT1AxMmtLZTJ0VEZtbldtdGZXZVo3MnhxaUM0S3RMT2h3eWhWWlg2OHpGcWZ0cFFjSzR4NWFEakhFbll4V1Rlbllja0dOLyt3Z1JTcG5nZXZoa0xEdGhXQXJjc2luOEhMYk1BdG83cE5odGpEempFK2w4c0hobzJrL3QyZVMveVZLeTl1ZHZGeXVMaE1iY3dHMFhDZ2dXNDhkL2lDYWdSRzI1b3dDRHRkdTBpbVJ3dGx4b1NTMU5GQWgrbFFramRGb2loVjdPaXNyVTBIWHMvejd6am1jQUlnU2pueXc3ZGVxVlVqTk9Fdmw4dnNjMXdSM0liOU43bEFWNzA5eUxtMkJFcHh5djNxNnJXbm5Od0QzNk5EKzdJNlFMVkt4TnYxdzhZa3JIcTQ4bzdEYkFOaFJWQWt4a0RLTnNEdFh5cFNIMWJwaVZJUjBObTJEeG9KMitsQ2ZJbU5UVFA4U0FzQklTelRVR09aZWhuOTU2MjJGRlh5d0RCdVlEZ3BBQnZqRHFVelZkRWoxL2kwVEdVeTdaN1VnVmRGUjk2c1A1b0pjb1lNY3hpTmk2dkhOeC95VjB3UzFlRFpPQjJoTzhzc0M2TWMxaEMrTVVSYVVFTHZrVW9nSFM2emZncnQvRXlOVHlmZ3BwZWQ0Y08yNjlQcTdKWDFJL09Pck4zWVZkU0lZbzZPZFVJUW1ZTXUvM3A4dU5xdDdyYjVaR2hlK243TE9ROHJBamp0SkxXVVBMVDBGc1dBUWpXSDNsWFJWbDRyb1BOZXBLV1VvTmp5bDMwL3J3Q2FhMWFtOVVNc3ZqRVVSaVU3WWVBb1RNTm9IMGZZU0UzK3BjQ0hJb2l2OVdwSTZoWHF5K25Ibk1wNThHZnd3R2lkNEMxdkcxcndtS0Q0TXJyZktURlNPYitYSlpDclZYblp1ZlRyTnAzZ3h1cEN2b210aG9BcTJZekhiTjA5UTRuNUs0N0VUZ25IQjNZWGFXT2ZrQ0taZDVLN1F1Q1RlY2NCby9QWW9UY3BmaWFLMkkwTitEcVh0S3ZhS2hJcldZWDRkTjVFSnZlcjNobklwcTRmRGdpYUhWcW5hVnpsdC96VlpnRzdzTE9acWdHZ3lOS25VekdyTFN6WVRkRFI2eWVENlV0RVlqRnFNdzFFcVoyZlVmdGhGOGhKeC9ZL0crWWRibDh6ZEs3S1NUTnNWc1U2K3NIcUFGb0RXQThscEVCK1lkZHdmRXBTUHAydDlVL3ltUmtYS0RaYzJoZHFhczEvQVhoVkwvSjdweXFTdkNuQnMrajlSRlVkUlpxaHNFMWJuZ3FlQldKSDZhRW1JTzFidTk4UDVHWUZiKy8ya3d2SUs1T0JxMk9hb0pIcGRTSitFenhkVEg2Qmw5UXpFd0pvZXVpN29CK3BlV2UyaExHc09qSEk4bk5Yc0svU2haNDFNVklQdEJKczdjNTI5S3QrREFqRCtsVy84Ums2RnBvQitVNXhZcVZGSDBlekUxaHdKSGZJVmVURFp6TXlBMnY2SjB3eU9DK1hROUVUYkl2Z0h6b3l3Ym5BRk5za2RJSUZGaDNjMlBzNXgvMjErQW5ZSTYzbkFoMlp0ZHBQczVMV1RJNGppWE1Qc1JxSU5hQyt6SkxISzFKekEzeU9QOG9qbStld0w5WDRESFdUVVQzVW92YU5aemxpanpaOWVQZGg1d1VLd2xYQWxLdUxZNzFIQzZNNG4rdUd1VXovUDVBVVBUQVhzZW9xMVN2NHJ2RStzcFYxNDZVa1BvQjNBaGpkM0pzMjkvaTExVlVneXVmalFsdUdFOFVzTnE0ajR4emJWOVpCbHZnVk4wbHFoK0xOeG1MSit2RGFVbEJuaW1JWlU2VWVpSExxalN5TWQ3WWtpb3VYRVp5TGxtdGovV0g3elpkemxZT0JMajU4elJlK3B2YVlycE5zU3dYT1NUZUVRV0JNMmRWRmI3a3VOK1VEc1YranRuODltQlYrSDR3dUg1MnhpN0hiTWxkc1VqbnE2Y0lWMVY0Um84R3F3SlEvSlhSY3BBanloTTVsRFcwTWxnSlJIMStUZS9WOEtRQ29RQUpjWlYySlFNZXVrWTd2WGFhWFVBZkNRR2dLcGdsWW8vcVJyZ2xBdE5YcXhlOURDR0tWMStrZ29YWWpDYitLTVRrZ1Z4M0Y5UkUzeEM2UEtHdzExNmtzMFhUOFl3b0phMHMzNm0xVEhqOFpaUzlKd3lRZkxBeFR6WGhtcktmdWMvSVJROEFmSHF4K0FsdlA0eDl2T0hMMFgzT0JSUDhJdW81UjhSQXFVNzVpM3MxU3RiNUV2VWtER0JFaVRWMXByY2VGTDRQbFRGM01KY0s3bDE1bGF6dFRQV3JjU1phL1YwQVlCZVR1dWY1U3N6d2o3NzdTVVp5eGU4YUFDVEZ2QXRJT3U0Vjg0ZFRsQ0UrQTBLSEpxMkxWVFlVdURidzR1dFNJSFNHUVRQUDdWc1F3aDZESW1CWVV5d01mYXpqM3kzMXJBRWVPUitlN2prRGtSWU5Ib3hVTTFYUis0T25WZ0RWaUZCbnpuQXA0TTM5eVkwRTdhc0pmdzNBTkVZU2lkUGovV0RMU1Bkc3lDU2JpWGlDeDFCYzdWTUxYSHZNY3lVakhvc0FvQ2VKMVh5c1BHREVNRmtVTU01djEyeWQ1M2tWWEQxQTZwM0dUN1ppdHdGNlFIZlp2RFU5TnJKSGU0NTVlaDRqRWU3ZVRncW01LzdKNHlpREo4Rng0Z05PS3pGa1NHSUxNbytCUnFxcyswR0VLWDZLeHM5RXRHMjVEL2g1aW1yUWk3VlIwRk40am5JRTZ2YWt2ak9hYyttdjQxZ2RJb0hMckZCbHNhT09maHRXR1dQN2Q3ZzVzNkQzVXB6ZWx0YVpnOG51eHJmZGs5V2hCODFCaGpMejRBd2Y4SkNEQnA5NUxmWEFvM2JYQWk2Mll3dkk0dW5UdGcxRDluYzF6UWtuSjZlNUNUSmwxTlVjMzljSDVCZmo2L2RxU3lMZVNnWGdNc3FRTmVKUzlQeWVuWHZGQ0M2dFB3dUZkdFF3K0lPcS9JeFV3dzFBekM5ZFd4bWt1bjlIeW1rVTBOQUFSOTE1VnhLNDJydktrWFBFbllubHBYcXhMSkNyeUNGK0xvRFFWZkt2anZyM3FxMXRNa2s0YzJFazQ0MkEvbnpnMHZ2ajlwektlRGVWVzNLNFlSanI5dk1HTzJIZ2JvbWd4NjRQbU1ITGFTSHFTekxyUjQvQ2d4Sk5STzJDelJlU2lMRUZPb2wvdmtDU1dINW9rRDEvMWt5blJrLytBTjhVazYvTjFkWE1JaFh5Q2xPbWtFMDBTMmxBNmZpWXpXUDhOVnVwNHFOeS9TQk9UQjhVVHZCUVB3TzZDYzg2Q0hna0JOaWhPQlMyRWZNaWEybThsVkh5bmNCVGtXL25VUGNUblUwanNIK3ZRRmx1V2VkSWZDYUIxTHA4cGEwbnZQTEZxZEx2VE1kK3lzUmgwMFJUYlN4OFkxdUU5ekZSVzRyMDdzRXZtNzZqNE04WUNMdElaQ3BvekhaRERMMnhJelliQXZQNTlQVXpvN1VTUCtJSlMxcGxuVzRhMDd5N3o1TTdHUjVCT2Z2dW93MUFmZk1vOWltS2VvQmVzNzVvMjNwN2JHcjV0ZUd3MC9wL1c2VnFNK09aSG1mWUJzQnhJMG1iWEVySTRFUUxVUWFkTXJTVUdNRDF6VEtmRldDZVlUQTlETm1OM25ZckhpSnIxWnFwTXZ3Q3RzNHdZT1hwUmdlL1E3bEFpYmpYK3ZLZFRLVElvRG0zb25VeEVRd3A0bVBsWnR6YmdhbldvbXFaaS9kUDVkcFJWT2g1SGROaDIxWW1hMUpNOHZhM1RMR0hLV1crWVhBQ3Q0NlpMS2pTNFBuM3Vrd3FFb0Y1RXNsRFc5LzJrdnBkZEtpOFZzaVVLK1JFL05qeVZlalBtSE9Gc1AxckFTNmNOQnYwOW5UZWFNdEZDVEJEZE1xdGhXOU5ZR3NibjFjOEh1V25wdTIrR051RGZNWWl0Q0IrZjk3YnpXRk1zTi82UEgzWXkyNm94Y0J4RWdWVXZZWUFzeWdvb1N1enZpTTZqWURySXhpVEhOa1gvVUoxanVYZHpxbnZNeWVXREJEOUltKzE4MnNsamJyZnFOMnlqbC90RjV1TkdsYWlFaUhCUEZyejEwTjJsQlc4K2owK0hkem1mSXg5SEFETkhwdmt1MnJSRnNkZXZxdUpNTFN0Mkg4NHhNaHFKVlpZbStuQ09rRmw5T3llejFSNm9uQjR4OXZxL0Y1WldYOUVnVTU5WVJCZ0ppT0J1R3JGZkQxeHl5NmFoTjl2SWJwc1M0SkFSaWp2RldZYXp0emZoU0ZTZzRQQnpHdHIyOTJKWFVHb2pXYzdDSHVhVWF6MngwMmY4eVJZaGtlenF2UjNSMmt4N2hWWFpNcGJMbkoxZ3ZQcjQ1Ni8wZkM3NGNDVmZtQ0lyWjA3WGx1dkJuYkpONDJvazNiNmVlVCtXbG11QlU5WDF0OFV4MnEzclhzTXRKVzRNUWR3WjJSN2xaMTVKcGVYdG9PcmhVTEowU003eWJ3WlBmWStQT2dhS0x4SjlzVDJCbS8vSFF6bmtvbmVNalJ5TU5PS1hWVnhZa0xDWmNuYTF4dHl3eUhJNVduT3paczUzOS9qNU5xdVpRaFRiaFBYdUFwU2RHREt6cFFsOWtya2ZSbW5hdFRHVzRTc0xuUWQvc3QwL2xUV0FSUnFCMDgvZ3lRTnZ5NVBLZkJrU0VyZmZZbHRlRDBka2VoVTZOWGVHZ05sdml5aWhkenlZQWFjZ0c3YWovdElLSGVYa0hKZmxhU1htckllUzBYMVNhUW1HNU1YZHlXMG9BOHRpZE9XWmNKcGdQMjltRGFwOHlnZDh1bmJIQVdvWkg4WHY4VE5tRkJaRU5UVFVIWlE1MlAzNnhYR1B2UVNZZjFqR2xHd1ZaaVZibm1pSEpIcGtTYkE5cW5mdGtIaVh3Uy80Q3dIM3l3R3QxZnNuaExONWhZYjB5VWpFd3MvaXZtOXIwVFJCdEs5OUdxaUJkSnR3Vys5eXY3K21xTXc0YTdVRlNIYjZLZFJWZ0VUS3NQaElIeTZBbWhxcVpWc3RUTkpMZHd1MEo2SXdha3lMRHNxUy9XSnlmdXhDLzVNdHc0OXgwS09aUXFuTXJtdHRIWFA1ZG9YYnRxdHNVbTREeTBMUERPYTNLSXNnOUpIeVo2NGVBcDdzSkZkU0ZNemx0OS9sODNUMVNwbko0T3I0SW1va3pHUlZEbUhKN1JKRWU4RTc0QjkxMGplcXlHTmFPaUo5OFZrYWFOSkVaYUxHOHpveE52eXRvL01KbGhQNFE0eUc1VDRuendFZUF3dVYvZlBiQmtNbk81dnpzYWxMa1pIa3ZwSjRieHJRTE5MY3Fpb3VBU2x5eE9Mbit2a0ZySU84bUVjdHZkajlTaTdrdDZmaHZmdDcremhFUXkrK2VoKzFETmFHelFGalpQWVc4V090aS8vVVFPZ0FDUk1Va1RuMHZHaHZOckhCZE5WR1ZtbThmYnpVUzdoMFpPOWwrczcwMnBhcTZ6aTJHWmlRbHRJdzlKd29RcUdRcTczTldEYWdLNmQrMlNjbG9ZR0pwZGo2VTZWOXFLeFBTeC8zcEpWWktidTJPZE92MVUveGR6RDBJekFtQ3NKVXdKRXBtcFl0cTMybWUxUnlxLzZZZ250YnFZdk1YRjh3K0luTmdZSFRtYXhoaFVHVWloVWxhcnVYRlp5QU1ETWxjangrUnhxZU9MNlkrdnFJL2VwZkM0Nm1TRmljaGlBY1dROWlQN1N6THovbG5qSUtnMnN6YU1yNkViaHg4Qk8wQmVoV3huZ2ZnZDdCR01rQ1M3aG9XVkMxQmNCbDJIQm0zb3JUVWJpbFBsa2JHK083ZHIrOG1zRXNxbHhGNCtlNDQ5d2UyWFJOWTZkZXdjd2NGd0VkWVNSa1RXVERoV3UwM25jcFNiWEdOWThTakRJOUMySkxsNjNnOVUrVEV0OERmRHJ5TUNyOFl3a1p3UC9zWU44WFBpanNhalFlR3VxYXYvYlZnUjB4L0d2UGxkOFp5RldNbE96WkxyRks2RUw4QXVsaVFLTUp6V0dQdCtoRDRqYjFWV1lTWjloOXgxbGJLMmFkQUE2dkxXL21rNCtGckVCeXRRUEVBamJIWkNDbXErWnh1Q2ZDYUVQNWZieC83TDNPZFdqTDcrNVpUZEtDSVM4RkRqN1VKUzJ4TkZRLzlIMmNhRE9qYzgwVnFhVmQ5M2krd291MWl6K3p2ekF4NFVxZXdabHVENWFZekswOEF1RDE1dVZPbk9hV3FqaTl3VUx4M1ZFTllWWWhoVGdXSWVhL2RNcVVoeWM5WFBTUTRESFJTWU42cy9DQk02ZGtCMXpyc2w1cURjTWRNbnIzRHVRL3Q2U0VtTGVIazVmeldkMkJLbkRaQjdsZ3FnOVRRV2E5SEZLTnhpbEE4UVJEYTg5ZzlGVHFRejFDRE94bmdwT2hHQldUdmhUR3VuT3lFOVc5T1Y5RFVqNWpmNmR6ckJGelNOVStNWGR2ZG1HR1JFMWY1MEhVRlNaODYvL3FGSHdSOXdBblhCcmRUbHdXQ0Z1clFzMTgrT3dxR2JmbFdEY005N1R5R21PR0xHTTNKQWk0WXN6aGpDN3JoVTkweUVxdkpNa1JJZmxldGJ6c29XMWJCaytLY2lHdmxIRnBXbzZIWXZybHpPYXZrcy96ODZ0V3o0bnpzbTBzTHE1MnRlbnF0RVI1emdMdFpIaDBvM2hrSzZJQS9Nd2VMaHRYY1U5R3BrODhLckdDWVpCY1Nsb0hTNTlWTzJ2ZzAxY3pPbUhYZEVFeEoyc3g0b0FJaktNTUdrLzJhdE11YnF1c2k5MVhXWk5Sb0RuZEFjSGQvdzlKeGVtSTBIV0Z4WWxGaGNaQnRIaDRMWVhaZjlpN0FzUzY1MWZxaVJlQVhSRW5LQTI5Uks2Sk1yUWZ5WTdjM0M0Wk9XRkpGbCtmc0RTSXE1Z3NuaWNUWHY4T0Z0U3A0dzU5a2VseHFCNno1MmdJRzRWcmVqZHFYeTdFYTFMLzJxaHJSNEd5ZEkvMFIzWkpLWFQyRnczejV6V05lODNuQ04xMGl1WFlHdi9mVjRkdXRRbVlRL0JQYXprNjNZZW5RYUV5MXhXRWt0R0RBVU01RitQUEh5VWFPWldhUGtsai8vQyswaDM5VURUVTYxUnBjdDE0U0pRSWdqT3MwZ3pTTzBPT1F0RXhtTDcwUUFtenNNL0ovVmQyb3FKeGVsVktWTkVaZzJuTmgxQzRlSGE1V1oxOG9QRDU5amxJeVdnbjZBQ05tL0dPdWtPSFBHdmVtTkxpa3ZvNGR4UnpBVWZtMHM2bDJYQmNTN09KMWxMWlVYc0lldEFUNWgwT1ZhaW1RR1R2eDdueVV6VC9iZDVPcXd0N3N3S2ZTekxkV3MyV0VyUExVblBkckRPUHFwM3VjMllDMzFIVElRRW05bG52MjRiM0hHN0dnMEFMYVJrbTVVR2d4bE9Bako0Y2d6QmdZZDBOVnlPdjh2QWFBdFV1STdMSEsrb2IzaDN5OUE3c2xONnJPR3NNc3hCM21jTmgwZjl2S1F3c1l3VlBGL2ZmMkZ4djR2Yk9RVm9mNkJ4dlhMZ2Y5ZlFZV3doZUlTYWJQWHJrZGQ5Y2I4UWZLRm80VkFkQXhLOE9ESXNNVzB6QXNWcTJaR0k3TllxWTRiTHFwQkNxVG9oU1d5MTMxcVU4QjdGd29wMjlBNi9QMlpvWTVtMTFZamRqeng1VE5XOGZJdkthcVIycCtoMHhKVzBubTRBTURSTndWT1NTK3QrSHBXaEMydHYzZDVlclVDQ3ZHNzVUN0xzREFDV2dUKzVVOVAzZDFVYmRid1pXZm0vZ2xoU0tFR082d2QxamVjci85VVdyWmNSWGpVakJNcFNseTJoUlVyQlVDRlQvSnIwdFRzNVBjREtIbzlSamNaYllZMTh2ZnNLY0dOV2prdWtsK3Vud3BLQzZPRDFxd1JXNzZabklJQkU5bGtFMlZRbzIrbTQxN283MlgvTkc5RWRsM0VEWmpKV3VNOFlucXE1RlV0TndWWDRQMlBkTU1SNE04dDhicGYwWWlreEY2Y0ZVRFlCcU9kT25Id0x1RkpWQ3c3L2VDang5WlVNUjdEdGxyU3RmTXN4QkorVDhFZExMR0dQVEw1a3l2SFRMaGNDRW5aWEFpSWZnaEYzQnF4a3FYN0xaWllvem9ySjQxdkdWdmdiNE5PUkVRVFlORGRDRy9Zb1Y5eXVHdnhzNE02aXVBMmYvbFFPUm82WlpPY0FxdVViblFxaXJRRG5NcTZKb05xajFrYkI5ZDNNK3BMYmE2anFZV2U3aWxPWHpvN3lBbVVhcStRQ1ZiWHpMRmxzK21qMTd6YXFUZ0VQUTRhaUl1VUV5d0tlbGV0WXhaNnMwWGprRzJSM0tld29WaTdOWDR6bnlLTXgrSWwxcTMrMy9UTGJ1L0lMaTNNaVZiUjZBRjZ5M0FTOFVBaE5yL1JZcWx6Y1VzcXpScy9nVllNdng2OTc2d1R6SVZsWmhKSWROb0NYR3Joa3lBekNpMklLV0g5cUNWRkM4eTQwZTFCcnlBWUpvamxGY0Z4OGdwdlhxekRDNFExT0JuRnVZdW1BWmNUajh0ZGs3RnJDZkFva2tTSzUwQ0pjbjJsWmNtRUgxaHhEOGk2UjRMKzBTQ0xwL01qTHlnSXg5ZEhMdGRaaW1kUm5PMzVYM2h3bkNpb25WT3duVEMxL2Y0OTFXenJZMXdkRGx3dG9rdnpETFhCWmVuQlBGb2o5bmhwU2lBWHpWQTkxdm1OYjdKVGNqcnpmU1lwR2lCTDBjdks1QjZuU29SU2tGd2tWdzZZWWFUbEVkZlp0SHhQWkZUbFJlU1NaVmRGT0FzUkVFdW45UGtaZXpnRnNzN1Fsek5nKy85LzJpQ1E4SzlBcnRpK0tkUGtmcTh6YVVMVldHNmcvU0RwUlpLUGJJcVNSSlZ5ZU9NZHRwSHBsL0JuZlZWRmFZUHl3bzQyd2lpZFovd0svU3EwaExFMnhCZHZEQU4zQ2E1Qy9JVndja1VuckovbzVBUCsrc1VLS0ltUHU1MjV2cER2UWtJeDBxb1RJbW9xRHFSd2MrUWRHTUkzWHZoZlY3RVFIUTdIT0ZjaXhwaUl4RWdOc3hBMDAwa25LTVFVSk1VYWxaZFFvSThFMXBWU3JjSm5VcFcramhTUzRWTFBiOXhKa3dIbnZpcW82WStMb213NDcyYUcrY2hQNzdwQVZTRkIwbEo2cklNeGdTb2taMTk3YzducThoRlUxeGpHcUo4elNwTVJNYzE2cXFuUWk0RlQ3Nzc3cDVsMzFzQzYyUHNjSmpnMDFsUDZZOENuV2JQWXpCWVFscWQ2K3FNUGlUY1B2UjVvcEZERnFnakxYLzgvYkhBSTVDdkY4OWtVRUhoZDBLNU9CaitGMWlyWjlSSWxrYkplZ3ZuVFN3N3NWQW5WQjBUeTc1SlY5T2tHQU10eVFIMXo2eUNiNlp4NEtWcmtRNE1jaEhmRUNsdFdOL1dESHNwVEpCb0R3ZzdjZFc2NWZUTUM5VlJHRDRYTkdnd0xCMTl4SGxLRUZPZ0R4bXJjY1VBY3RJTE1SQWxwY3JzREdQckFZNEUrMXd3VU45dHlXVmtETHh1N0Q0dGkzOFJMSHZtNFNOaWVlcExrVElnS1pzV1BvQmVEaU4rWWNDR28zb0Z1ek14Q2lyUzl3TUcyQ2NBUE9CQ2NiUDMrdDNVTlZySWhPWWRVTVB5K0l1a2t3a29NS2lvV3RHQlpaTkZ6VVpoaG95eGZqUm1Id0dVNXR1Qi9qRUlxL0JsVW0wWjZjWlVmakZ1RDljNXBpeFhBU2NxNGdreU91SEFLc2ZWZ0UxYTdvMUw3SkVKcVR0Y2RORWtkbUZPN3VTMUE5UnpTRnJGRzAwQVE1RVcxTXJrOVl4SGg0WGxNNVRudlpkZnRXK3ZxWmRNeXpMS1JQVGZBUEJwWm9Vb09meE80eStUQlpNS25zYTkrVENscmdDVHdiN2V6eldWU2dYMER5QkVYdy9zQ0tEeXVtcDVlSllyUjQrVkJaaW9ETjdpRzhBZi9iREVVdUUybkpkZEVKTC9yMmxONFZJdzBGajVGMHp0Y3praWZaaGpTcDFwcWl1amdsVmRFQ2xuc2tkZG02Z3VYTnJ0cENQZ0JUWUtoMUVtQXFhNkM3UGRqSUROdWRudE9kUVVmd1NVcE9KN0Y4ZkdlcFU3cjJnQ2FGaVliVC9MVUpSTW5vSWpXZlJBdUtaTDlnaVVZbHpOYi9IK3R2cUp6SWoxdG05N2V6bEN6aXUycnVPaEw1M3Vsc01Nb1lwUG9mYWpwSVZrSTRxQ0NWU0xNU2U4SXdXa0VWMUU4QkFUR1JKZVo1eGN0RWd1TWlPdGtXUThwSUtnaTZFMW5ETWVIcmNXbWRoVllDZEh0T3VIR2dmdU1JNkQ2SlNWbjE3YVNZM3h3QzFOUHY3SEdmdXl1WXlVMGtrQmNNU1JVN2VxRTlYK1hlTFl0MnIycTFKZmtTdXZ5ZWxWWm5XYXg0YXFpSjU1MmVPRk8vVkQyTWY5Rnc5RDFpSm5Ya2I2U1RYS0V1SGVmeW51Q0hXOHpHODdta0FhTjVEZHZIcFRyOU42ZXlDdjhNSmFnMDkwbUxONWFxa0F4LzBra1FpdU1TVkNsbVA0V0ZEMDJqZHl2ZlNtcDkvOFMyRzc3VjBsd2YyU1piTFZzcmRPd1BORG40am5sZ3pnRW4rbWphZms5NmJCMS96c0tYVmZDZ3VBR0l2VmpYNnZtMTBRWS9rVjBjVmx4UTh4UTdwdW1KNXRtTlYyOGhiSkpxMVlrZmNJUkZXdXU4OXQxWFgxQXdybUFDcWpQZ3dLRWpUd0xLWEpkemllRU1QZituNjZZRlY1akNoenRPdCtjKzE1dEJmcDRHNkFpRU1UMFFQVWVjU21RbXY4TjhKQmwzZ3dZdXEvbHoySFJaazQydzdaTk1janR4MHhJZWFSY3o4aHkxUmx1MGwzN1dsWEdTMFlySU03b0w3cngya2NGOTlBTG1YRXAwODZVeGp4dGxmTmJsZVVnQ0M3Sk8xa05mVVh6R3FKT00zWk5LREJjMzkrSXJJRXRwWkdtdUlIMXltNUM1U2VxSFljckd3clJROVlndkV5V29KQ0pzdXFwd245Um1vNnVCV2VoMG94RTFkQUQxcVl6eGdFRWhnS1RFNlM5enlCSGFmaGs3QUlidlJocXFOYWNUYW5DcDExeXBxS3ZseVV6YWRYTUxVcmhEZWkwZkgvOW1NalJKbFc0V2RCZ3VuT0dsM2lxWFVaeTRLRXpsMDMrVEZBOVVZaExqa2w1cU5FYkp4b3VLZ0oyYkpkTG9xMHZ0VmxUWS9PdEFOczRnTXdZRVhNNW0yR1NOdGhocVFabkpuUlowVEJqbUt3Wm1ET3FPc1h2NnE4TDN6U0ZuSFZkcUk4UmpWL3NhRTNQa1dLaUp3TmJuNkVxVjE2NzVJYnIrT0UrUkNXY29mUVMwMlU0YUNQWUs1T21EVDNkOTVDS3JBUEk2Wmc0OGJadmdIaUptV0libm5rbmRzN3ViNXVBdGhBaHZlZmlLeHgyYnVJb1M0d3M1RUh1ZGMrSmQ2ZG5QVDFUT1htdmR5NXNpRm1RSlNWd0hQcVA0NlFnVGp1M2lBbW53c09Cb09IdkZiazB1TDl1TGV5WHRXNEFjdEJkTEdacm0vaUpXU0UrZXA5NTVEMy9ZeUpFTXhVL2xPVFd4bTZVQmk2U0h4dnFYRDJlY040a1RUSk9SOFFoeEdFTWcrRGtpSndzbHBoeHY3TUVmUllzejNZVTZPRGpaaGdHZmlZc1QyZHRiTGVOTjRNYTVOcndnZVU1ckVHRjR0dXR4Y3BJR05pcFBaOXBVdE5xUzVWVW8zY0lQVndqbm1zdjl2OWg1OGIxSWlqZUNOQUo1M3JkLzF6K2hwN2t3Q3ZVVXVDaDJ5UU9RTGhZQjBjbDNQS0hjTWR5aGJzOTZnbEtrMTU1UXZOTk5ZWklTM0JLcnlBWmtLaDcyVlMxa2tnN1VLUjV2cWUxc21pMms4M2ZkaVplVitWN2lMYnJGMkUwdkJtejNKazNNRVBKOXlUL0F0YzFocFdNY09ySzNVMzFDMSs2Vk1HQzlRKzYybGtEY3l5ZldSL1MxNTlrSU5qSkFVNUphMmc5TSsxZWJoQU9LcmV2Z0tTa2hYcVdPTXpWVzArMzM5eTZSemF3bXlKRE01M2pMM0d3U3pFV0Z1b3dnMDc2UTdQZnFaS1puMzlFWVg0cUx2RlB0UVB4SmE2SnZYSzM5dXd0NHVuOVBvSjk2QTYvcTJTUzFHZWs0ZjBxWXpmbHo0SDUwYTBkK2t0bjRnZmVkV0dIdWVuTDRPK1NKSUVGNUR4ZVE1VVY4WjRoaE03NldMK2gwdnNYeGptYlZsRm0xTnltcHBjMHhQNFRuTFA2QnY1T0RNTzBEeGk5bkM3Zk45Z21kclp2QkFSZXJZN3g4SEg0SUIyWWttL2lUQTkxaFdMOEpVYlhLMnhTWXZxMnhWcWg1RXhKYmU5UzU4RUxla0NFaEFkeGt3NXNNR25JY1BOM1IyTFhoWi84RlF1WEd1ek9PcUtDY001UDNKOS9XSWFtZ3VlOUQ1Q3V2dlVybEhPRUUreWhVaW94L2xqaXIxZUpJWkJjNXovS2RwR1ZJVm52SGFyNVhTdzhOdnNlaEJvZXh3ZGw1ZThjZWdwc1NHZE5JUS9SK1M1am5NY3hTa0tGOUt2bS9CNVZ5elBDYmNtZ1NvRGRNMTU0TExCNDhGVG8rd05BcGVlTDNlcm12WjI3SGxmVHVqVVdEU3BtekhOWkpSaVRodCtFZDZiUjNScm42L2Z0WGRUTXl5YzhINWx0S1MwVkMvTkswaVFuRm5EcFBjWjhoMmNlZU1GMG9Tc2MraEc4ZmdrVFhxdkFaK2NJTE9TbnJXYktlbnFuZW1BSHU5MzgyajdPSWpDUmJtb3p4MFZqTW8way95eFp1YThGeTlHWHBSQms4SU81TEUzQml1Wmppc1BtNWVBdUh4T0F4VC9qN3BQS1V0eWljNkltdFlwRFVTR0xqQ0htVGdTaUxSRE5oN3JtZDdHSjBHOGI2U0VRWG9vRm5uY0F5SjE2bVlpVm1yS0xod2JGK2d4T0FTc0VLNFJhc3JJeFFaL21aTTNqVWtLR25jODkzS0VZNnBSMDhSRGc1OXpPMkx1M0Y5Rlh3Q3pZcHhVamx6NU03RXFiSXlieURxemlNRGc0TWltMlFybDhwOVRydDdxQVNkMG94T083d1BlVkpHdFAwR3FwdzVvMDEvMDZoajZJeGdhOTEwZzQveTdRczVpczZ0dTZZaHN3eGhqeVpTV0F5aUUzc1ZoNk02bitWQTltTlp0dkNpLzVYaHk4U3NKUnd1cUkwWGg3bUVnU0dNN0xLMjZSNkZNWVptTnFiUWY5OWZDc0t6aVhCZ2VHdi9HQUNJQVo4Tzl1WTI0a2llbXBldVk3Q2ZkbDZpc201cXVaNDBoRkorblNwQ0N2bEQ1MUphK0dKbEpQQ0VOL3FpU0tJVlJaNjh0aWhvcmgrS0pLaE9lSTNqNU9Ya285Z3hRYy8xMmFieXVBOG9BNFZBMDlFcS9FTHMvVUI5bWVtS3lHY1J5cTVmZGlNaytVSGJtZlRkVVJQajM4cWxTdWtOLytralRpV2x3UmpheEsyb3ZWcm1VeG5RK1FpUFlCODQ3dHhQZWJUMzRaU05YekJaM3FOTTBqdUdkUGErUWxsOGZsWHRLZEdLZlhGQnphMEZZV2pORVE4RFdJK3pTU1ExV1VaaU1QejYraktaT2M5aVI5bDBBREpzZ21KUDNiemxwaGxpTXlpM0d2SjNKTUlibHdnM2VTOXhwcXM2MFBhRTJzMWhNWG03NlhFZDZuVFY0enIyMkdabitydjRtZ0dBVGREQmtuNkxic3Y5NzNUaGJ5R2lqMXlySHFjOFA5TlRCbWJkN3dmYUNCUFF0K2w3VzU0NUtsNDFSc3E0MXR3RTYvYUsreHh4a09FUTZON0N6QndYT3ZZUjR1ZnVMNkVNeEZBR2ZZWGV1Z2k1WnptMXc1NUZLZzQvdnpSZE5EZE56WEhZaFI4STh2cUZTUWc4RGUwSnhsbkU5WEcvd2FoaDdLQk00ZTBxL2xKa3lPa05odFREcWJJYnd1Y0JkV1BGQVlPZ0Z4UEtTM2Fmem5FaGp0SStQR2JVKzhpYjdVZW9pc2g5VE5WQkluTkQvY3VwdTcyUFk5SlpZenkzcjZTS1lJbC8rQjVtTzllYzZVSTk5QVlBQ3VjQWdJcjRRQzRaMHFiU1BIOTVkS3BQS2tHemVBYmxkV0x5RmwwcVllUmVqdlZhS3Ewc1NCRmZMUy9jQzhZRlVzRmtaZDU3NTZkZTAzS0FDekdvNmpiTWFhaXJzR2FOYnUyRzVhV0NkZmhzT2h5NWpCanFDaXZiNCt5Q1lmVmFySEFVRnNPZ0t2WVlIcEJnbStJanJqRFZROU80bGUwU0VnaFFQdHdudEpZdmZPeHJkM3dKSm41dXlkbEVwTkZRVzhudFVJTndsWjdkT1ZjcUh2ZnZ0S2hOZmZqTEUwaE9WRHZJT2dZcEpCZi9SY01FVlN1M1RuTnVJVGRiSko3NEtiM1NzQ1JlMFlQVWt0bTVnZUF0ZjJKaUZhNUZiSDJ6M1dqYmZLV2NKbEZmMU9IOXhxa3BHbjdBUm51VjNGd1ZEd3JzZTR0citNQzN6Y1hvUlBiRDdBZGEyVE9jekI3UVZFZGJ0ZC95Vlh1M3M3RDk5N0FzTGwvZmxZSGZnRnhkVnQ2V0ZBY0tDQlFrVmNveUNYWHNSNE05MXdSc01wTTY4Vnp3VFVHS2VSM1FBZEgrUXhoNGdrV2d0VGhzLy8yUUFCQUJvQVFBQUJUd0JBQUE4QkJrOENBQUFBQUFGZUFhdEFBQUlBQ1FJQkFRb0NBQU1BR1ZSb2FYTWdhWE1nYjJZZ1JtbHVaMlZ5SUNnMktRPT08L0JEQj4KICAgIDwvQklSPgogICAgPEJJUj4KICAgICAgICA8VmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I+MTwvTWlub3I+CiAgICAgICAgPC9WZXJzaW9uPgogICAgICAgIDxDQkVGRlZlcnNpb24+CiAgICAgICAgICAgIDxNYWpvcj4xPC9NYWpvcj4KICAgICAgICAgICAgPE1pbm9yPjE8L01pbm9yPgogICAgICAgIDwvQ0JFRkZWZXJzaW9uPgogICAgICAgIDxCSVJJbmZvPgogICAgICAgICAgICA8SW50ZWdyaXR5PmZhbHNlPC9JbnRlZ3JpdHk+CiAgICAgICAgPC9CSVJJbmZvPgogICAgICAgIDxCREJJbmZvPgogICAgICAgICAgICA8Rm9ybWF0PgogICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5Nb3NpcDwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgPFR5cGU+NzwvVHlwZT4KICAgICAgICAgICAgPC9Gb3JtYXQ+CiAgICAgICAgICAgIDxDcmVhdGlvbkRhdGU+MjAyMC0wMS0wN1QwMjozODo1Mi42NzFaPC9DcmVhdGlvbkRhdGU+CiAgICAgICAgICAgIDxUeXBlPkZpbmdlcjwvVHlwZT4KICAgICAgICAgICAgPFN1YnR5cGU+UmlnaHQgVGh1bWI8L1N1YnR5cGU+CiAgICAgICAgICAgIDxMZXZlbD5SYXc8L0xldmVsPgogICAgICAgICAgICA8UHVycG9zZT5FbnJvbGw8L1B1cnBvc2U+CiAgICAgICAgICAgIDxRdWFsaXR5PgogICAgICAgICAgICAgICAgPEFsZ29yaXRobT4KICAgICAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPkhNQUM8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5TSEEtMjU2PC9UeXBlPgogICAgICAgICAgICAgICAgPC9BbGdvcml0aG0+CiAgICAgICAgICAgICAgICA8U2NvcmU+Njk8L1Njb3JlPgogICAgICAgICAgICA8L1F1YWxpdHk+CiAgICAgICAgPC9CREJJbmZvPgogICAgICAgIDxCREI+UmtsU0FEQXlNQUFBQWd2TUFBRUJBUUFDQzd3SDVnd2NEQjhUQXg4QUFBQUFBQUZEQUVBQUR3SUFRQUlBUUFJQkFBRUI5QUgwQWZRQjlBZ0ZIUUZsQWZnQUFndExBQUFBREdwUUlDQU5Db2NLQUFBQUZHWjBlWEJxY0RJZ0FBQUFBR3B3TWlBQUFBQkhhbkF5YUFBQUFCWnBhR1J5QUFBQitBQUFBV1VBQVFjSEFBQUFBQUFQWTI5c2NnRUFBQUFBQUJFQUFBQWFjbVZ6SUFBQUFCSnlaWE5qbWNvQUFabktBQUVBQUFBQUFBQnFjREpqLzAvL1VRQXBBQUFBQUFGbEFBQUIrQUFBQUFBQUFBQUFBQUFCWlFBQUFmZ0FBQUFBQUFBQUFBQUJCd0VCLzJRQUl3QUJRM0psWVhSdmNqb2dTbUZ6VUdWeUlGWmxjbk5wYjI0Z01TNDVNREF1TWY5a0FCQUFBVVZ1WTBsRU9rZFNRbFF3TWY5U0FBd0FBZ0FKQUFVRUJBQUIvMXdBRTBCQVNFaFFTRWhRU0VoUVNFaFFTRWhRLzVBQUNnQUFBQUlLVXdBQi81UGZFK0FKUVRSZWxQQkUvcXRaTVMyM2dkK3NhK01nSlJ0MnhsbExOckhpRHJwTVYxMkNRM01scDVWTTdvbFpTejBOSm9KRTBDbWVzQXA1NGFOdDVneFZWNERhWUFJd1A2TmZ0QjVPZmRORXoyUWpJbm1BRDRLQWdQRGcvck9tdXZPT3BPZkdUTFdVOXZKcnp1djluYmVOSVVmamtrQ3lVb0R3MEVtVzI2SFhROVZqTmJGVkJQOEVlK0ZNbGx2U1gwQTRId2R1L0FaQVZkdUZhcFRYVHZJeldvYXlGLzdGcHkyNURCOXZ6aEhDbktDcFZhREVuWWhOVjh5UEV1WkRMZm9OMEdpOC9sZ0hEeWVSMXNDT29WRHVyRjdSNXp2Qm9vczA5USsrUEc5VjIrNWNEck1xdUJPQXgxcU9zRE9LQ1Y4NVpYMzZER1RwMFlnTmo4aWwxWlZHUnM1R25TVjFoZTMxbDM2WXkybXNrdmNuT0UyenZhd2RUQWJqaEt1eGxwQUFwcGt5U3R6SHA0VmRURU5zblNpajljamE5c0FxY2VUWG9FSzZSZkdOVVZjM0ZvY3dtWm9Kc1NDdnVra3Uyc3AvZ0dUb0VuSlQ2bzlMZ2V4YWlUTTBwQ3hyRDhKQ2NNang0Q1ZvOU1SbGwycWpPbUpGcGtIVElUNjNraHYxNE5wcGhhQ3NqVm5jVThuaVdKZ1dTZ2NiKzVNSlkzTFIzOWJQWTNSaW8zdUM2SVpoVitKakRZZGVLZm8ybGU4WlAxYlp4VVVBd2g2SmF3KzhPa3VxNHp5VnRlbEJpL1h6dXZQOFpLK01vZk9hZ0lQOERVZThSblZXS0s3ejBvNE5oK1M0QUdXdndyTzJndk5sbVdadlJtUW1UaEJSKzZGdWdWQStNYmsySisyQzVhMGJlNjZCeGZueENGNlJtNXh3bnUrQy90SHYvRjIxSFV1L1lRbHd1cElHTzhMNWVtSWZFT2hnT2hydm1SZGt4bzVGRXI4NnduMTNRRkJzV3g0cVg2Qzl6K2ZXMW53c3pMRlRzQmVwRkFhaXJwdmxCUUZ6UUdUcFEwaXY3eVRFSDVFNGRpSEc0UFgxQ1pqaG1vSS8zVjRCbDhpalJ6UE1ucmxvd3Zzc0tkcFhkT1RVUThtcVpJVE44OGl4QThtREJOL1E1d2ZZaHMzdXZ5UEZUK2h0RVJBOERhc1VKVXVDRklaSHZxNHhtZ2VQcG1TMFpsa1dsUW5NbE1HZTVhUUFqdDBpbU02NlVpM3RhbjEwV3dhVDNrbzMrL1MvcHI4emdEK2sySFdxOERzQnJIS3hsM0lnYm5GdlhTRUFUMzdzQTZwTjNUVWhGOWFGTWgwSUxjSHZsVHF0aHd0Q1FJRE8yZW9kbzVOdFBzc0NhdGNPSG03ZDZzRWp2RTBlc2Jib1VMT3NZOVNIYVVEUjNBbG5abjZodEdPeTNZalk5aVpGLzFLTGx5aDVCVm8xQlRqY09iY3VpWnZVaUIxRG80clBrYjhQUXR5VGVCc3NLM2p1SzhZNWh6Zm41eWpIRzcybUpsSHpnRUoxb2d2T0Nzd3cvUk95UkhhWDVMdEZyN0JOUHVtTGxjRG9CaElCSXhXZEU5MytoTjFzaFlYdGFzSDdPcVlnTUlTbjRPamF0a0xSeEdYakZveWVCcmdGWXdjd3dORDUyZmdxdm5yZnNOZ2FRL05TNVlNUUFGZmg2RlptT1pEMDVIWWl3OVZrd3Ixa2NrYVBQeTJTZnUzUDdDc2dCdGErQ2FTTWI1VW1Tand5SUEwTXJNa1QyQ0kxMXNYdjZjVEpHNmhZUk1jRXFkUXFsNkp4RTgwN2NPcmZiMDFJWHhnV1FsUGo2V3pkR2FZbEcxYjVGRUxENGV5aW9VNjFENmVDTGE3MVZHNENqb0k3VXNZMFRXQTl6YjNNRlF5dmVnS0cyR0N2R3A0ZTVCQ2k1Vkl5UlJzaUNuSGo2eUYwMDZlUmZDNDJUcTNEdnBXbTk4RmREbzV2eWVxMGh0OCtqTER3RGZOeFJCREg3ZG13SUU4SWNYMno5K29QbHFqS3hrVURPOVY1M3labGZWRDc2WlBBZnNQc0JlL2VsaFAwOWZyVXRqZjF2N01seC9pcTlhWWE0a0RnMTh5d05EZnc1Q1FOcEMyY2g3NDVCRE5nMStINFRKb2FyRk9rMmt3dEM4c3UxR3FHNHVJVEg4WXNCNUVBZ0VkcUluY0Y2V2ptUVJTY1ptQXQrMmpIcEwzN1NvajNNcG9sYWxMMTRsQXNyQnpUY0p6TUMrOTQ0bjltQVhPc3pLZTRBWW1pUDRONzBYazlQTkdUUUNnUDRIZm03SktDT1pFaEpxaFoyU0RXdkdRN0R5TmlEV3plS1JsQWUyOTdPQ0NWc2x3dGlDZnY1SzBoSFlxMUp3cHZsN25zcjVkbmZYTjQvalZYUGIvRFdFV0lBQnpMSzVGSU54bktDZ2hPa0ZxNDBiZEpTeEVWNW56T3F2SnFTeTNiaXEvcnJHWC9aL2pRUy8wYXpxYkRnSEwwcUVSVkxuM3hlTFk0ZCsvZ3pMWmtEdm5JOVZOZEFiQ2l5cExBWlc2STNDNm80c25Ybk1qUytURUVxN2M2L01ZcjVUQi9RNlJBWUdHM2ZUUnBSUjVZcFBjRjdGK1h0c0k1QmQvWEVCNzUxdjdlYjFkeTJ2ckF5dE8yZXJHdmFjcTRvY2xMZnI0QmhLdmRwRDlEYUdtS0p2SWFrREV1ZUErVnR1QmpGNTNHSm5YejBrdHUyYnJsbkowOWZNb2tLSmZzY2hrZHE0M0xWajNFU2RxUE96cFpORWM1TGlweTErVTBsWG9YVnRGMkJVdm9temlUZEZzTVVBR3NnK3owRkpIWi9zU1BRRXU1YXk2MVV0Y0I4SGptNnFuMFR1RWxKb29KNzRvK1JaZkJjbXRzY05wSkJoMFdndzVQbHhiYVFPdWhYSEFiUHNZWEpVbnY2UU5JOERFbnpGZ0RNaDBYRTA0WnZSbHpKV2JUTnVocktIeGhLTnBZUzFNaEdyc3FUbUxZN1FSRmEzOFpKQlpsd29pWTZlQllRQ1lzVGlBbEVlbTV3em1ncDV3V0ZaS1BuOG9ZNDBRT3B2SzBITlJxcjdMMXBuTkp4U3VIZEhqVDBFK1VZR1BlUUUyYm0vNFFGQzlXSFVIN21NR2ErQmhIeHlXakJjdUtteUNTU2FjdEFQQWdrQ1U0Z25LbDFTNjlXSk9JMkgxUkozTGxHNlN6Y0FFN284Q2pEYXRSWGhDSElhY3BSUVRHeXRFdFl5NzBydmVqWWVFSnNuS0JEcnR6dnF2bmlRWS80ZVUwSU5pY1FEc05vUEtwYUVka3BULzlROGFJaTFuT0hxd3pjTVhOaCtsb21BQzNIcnpVSGhobUNlRWY4R3Fsd0IrRkZ3YmdvS1dXTklGZWZLaUZIVnFWUzFRWmRnQXU3cHNpQWs0Nmg3em9aQnQrdXU4R3F1T2ZERFMvazFPZkVtbHdzL2xTRTJmYVd2MmpENTVFazZ6ZzJ0MXNPRlVRQWFJWVdlL01xOUJuakhqa2taa0l5VnZuZWZrOTFvK1FVUm40cEt0azFNMk5CejRGcHRGN1ZJRkFVRDRVRjJCU25zb0tFeElZQVIwRU1LNjQvSEc4OW5OeW9mWTlBazJsUEthU1NubGlkWis2ZVR5OVhlUWhqUDl6QVJzWGExNVkzSzUwcnlzZ0d2WjlwQTZod3Q3SGFxNGwycFVrNmswaXhLVm1qR1NQTkhkT2dMVE9GdStPV091azhST25CcUNFRmw5amlCUHBaZWF6eXpPQ2lLU0pXUjBleUJzbHRWcDgwNndFWkhOTUUxUWxlWWNRckc0V0JmZ3FjSUhMWHE2ZG9vRWljYkhiVjllTTJFcVFDYXBmT2FzK1BJWWczTmllRno3clNDOE5pRkxJUnhaMVE1UDNWR1N6d3BsTjRITDZJNVBjelVCTEh5OXJqV0pZWnB4TzdxdWlKMEVwK1FGNVNMOS9rK2Y4ZzJINWNTYVNPS01heFYzZi9oN1owZHl3dWR1SmpXOEdNRW5sL29GUXY5bmJKbzRkNm91SEFZK3JRVXFyK3VjbUppWlZlYzdWLzI0WDVPWS91N3FTbVFuQStJUnJES09sRnBtclRCTEhvYTdaM3Z4MklSc1R1MW5LZ1J5OEV6bVhWd1JjZXpUQ1IwdUlNbG9hOUMxOVphWG1QUzJjZkpzbGVjNG9VS2lmemhTWnlqOFN2Q3FtcktGK0RQWlI0T0VvWGRsMC9rK3IyTktNck1oMGJuV05uQVgzQVVCdGdTNnZJU2w1WjNLYU1wL2ZiWm9sOHRrMyt2OXdYeG0yVVpuYVJkQ2RleFBjQS9GN2U4cGlVajRvMmtqN2dJMVhQY2RRZGJGZ01raXBPTE9SUUVQbnRRNGFzYnJqN2lKR09NcmQwQ1lVdnYyZm0ycURaU0lyNmw4aVVQV1NYM3phcERpMmJ4ODFZaEFDbDZwTFVsYUY3QWIrNHI2SklMeVFzYUJzdkFtbUszRXVEeUJiSEwyZVB3eFozZFFTTzZpR3B1VUp3bERlVXM0TGMxR3BENEZ3U3JZWFZBSnZsaXZYeVlBcVM1YTRyWnZSaTVuQnI0TmRVMnRkZmJ3cjlBUWhrMkRvektReXJtYzlSb1dVblcyKzdQSnRITWorbk5JK2lERjJ0Q1ZZM0VWaXEyOTlTaXlFQ3ljeXdMU0VQUWwwTVpiTUN5STdIWWoybzVIZEtab05GZzlLWmVQQkVWWVplV0VmVkh3TWJGTlp1dWRQOWJURmF4RU11Z1VDS0FKdnkzcmtqa3NSNzRkRDc5cTF1aERxRi9VWUtPRStzYUY0Q3R4SkdsWU55eVIzWWZQTHJYcExtRjY4eTc2ZERVb0U2aENPRnQ3WU96bGZHRkVxNkRqNmkrWnphRDNoN1FJT3lUYlJ3Si92RTdHV1Z6V0lVWExvZC9Ta2wvVHNXWjBJM1RzaHVkaFc3b1hVMks3QjlqaEtrNmVVd1ZSUFBFTkxiV1VaclBrWnZmYUZHclVsVHNtaEs2Sks2U1cxUmpxTlY4MUprVXZLbU9MZHQ3bFlrTDF3OC9zUGt1a2tmVGZVa28rVUJCKy8vbGpRR1NhaEtkR3hUUHBDK3E2NXppWFl0dWttOXZCM3RCWHhHWXEyOWo2ekl1WGErTHUxTk1YR0ErR3Z1L0Y5cTR4QWhoZzlQVU1uRnMrcWJLTUU2WHR4MFp4bElBek5nYVlmbSszbERIY2xTaXR4OEpBaTdMUk1YM04vbVJqcmlOSUp2OUFGOXQzMFU4MTFVWC9PQTJPd090Q24vdXVUd3RJOWdSRU4rcVdYRStYUjdaeXBSbkNTUWlXY0FKbWNMWmgveVp1cGhJNDA0TE94SGdQWnZWYVdXNkxPSXZHeThzYnkwRVdUZ2V0WlMzdkhvc3AyYndsSWtsQktMZGQzNGhLMDFpRHlPSDJ0WGlIVjlTa3ZqTlEzaTFpVVpuMlJQYzJsOXBMMElLeStRRlI2MjVtTTZ3MjBWajZOQ3VoZGNnbzI3NUxBTU9WSmlzNE90OWt6WUxFc2NScncvYUJ5LzJTTERydlVHK2RGbjZGcG9SczhyR1h6MnYzZ3EvNnl2ZFRkV1dMQVNDMStjMUVuZDFBMGtqc2dZTEcyZUo2Uit5WVNGVUFBZDV3bi93VmdCayt6M3g0ZXZQOGE3bUx5bU9NL3NleWJtbzlKZDkvRnRWQnN1aEZ0RzhVclVUOFU2eTVXVEVENW1sLy9aeEVqY0NNUGxnb0lWdkh3NWNlVGthTEFhdmpocERmOWJabUFxMFdab0luZFB5SnB2Z09TeC83UC9scGVNZ3FlT0Jmemg3ZEgyYkU1TFh3Q1h2YUllR0ZjdXB6d2tRaklaOG1lbXRHdU1BRmJzYmV0SlRpQVNCZHpHZk1kRUlQeUc5YlFqR2xjck9rYk5kVHlMRW4zQWRoQnRGWDVmY3M4a2FYU1BGeWpCMHRyK05rbjZkZCtoeU5VS2ZCZk9WOFZsRWM4enBKaW0yTUcvSVNjc1BPTmZKTTFDaFZVYkRUZXY0bHRSYU9sMEJNU25mODdKWGZ5cGRhbk1rWUtZdFdNVGpQMThxL3NQbFVBam1nc1pqZzk4bCt3VUI0eFZObzVOaDBXUy9wTGp5VjNSYzFyUGcrOFdENzd5bGxJNCt2S0xONjdDQlJQdDdUcGpRZ2JwYXdEZVZVK0NvNVk5cXVpZGpwZ1UrcXk5L0V3Tk9XT2E2YkZLMW5uc2QvSjhMSEpYRXlpWXlRa0U4L1Fmb3l1QVpuM09iMTd6N0VUTmNBc3U4aExGd29mdEVVOGdqZThlSEQ2NlBHbE9DZnI2NUNtdENSc1VNVlBjOTg4UWVJWEVmVW8rc2YwT2JhQjRNQXNlby8rRHQ1OGpXWUYrTEpBMUlvSHRXZWgyR0d0K3JydVdiQTNGRTdLOE13eldvVFVMckZnWXJwRWs0UmdOeWJiekpxQnpudzAxOStTU3ZQQ1o5aDFpRmxJdkc0ZXJnZFoxY0ZTRm94TlRocVVCa2Mxd2h5M2liK0FZV2R0UW1ueWp4MkNQMEFyYi9KMkJqWHlTNzVYbko5TVh1V2pyZnV4RzhwVlUwQVVQM1g4dG1EWmtsMlIvdzRmZHRmN1lQUHhJdGtCVmExOFBCY1VaaGYzOXl1M25oR2hzN2RVMFNPZm50ak91RXVjVjhCM2praDhEUEpWQk4veFlGbFVGMm1mbllpZWtLT3JMNkN5VndDYlhnU3pYMXVKWjdSVGxjb3RHSjVkK2xaZ3RQVkd6ZmhlSWtEekEyako5RmxPSXVocE1TcGgvd24rTkwyWS9FTFk2TXR6M3VwQzV3U2RrVVFwdDl0SCtNQ0pOeGowNVMxVFBHWXhtcSt0czVKUnBxZVZBdDAzTUt4ZUhyOWZrdG03UitRVU5idGtSbVpXeXg1QWtyZUN4S2lGb0o3ZDNqK0g5eDQvUVIrL2NyQTlEcXRySUpJZ0NsNEJ4bk1BODhxY2VpRmxvWThWZFBzSGVzTExmVUwzWWYzNUlVK25EQSt6UmxWZGhMblRtQ1dySkRoejVTS2F1SEtldzFVdnFFOGp2NVl0b25LUlppU0ZoQ1RDUzNtMGhqdWxyWk80VGxYMk1idTZEUDExZnBZSmhUSDlnOUFFeFVOUkJlaGwwWmNuaTFWd1RDd2cvdDRwa3ZsSUxnbmNwWk5UMy84aWtJV1FiR2xraWZibzZwcXRGdzNnNGV1Q3FBS2NjUlA0VXlDK29DVEV0NFE3RXpYT0NyaGlFZXVKUlhkSzl6SnBCTzl6WFRFcHNreXJibFBQc053aTN5MjIvWVN1Q0c3UEZvN01RcllKS1JicGRXSWl1SGYvTkRwSGRVbjZrV0hROG5PbTNxb1lTdGFNb290YTZ2Y01LNjFLNzBlKzFWT0pjaFlWMjNkSTNaUGdRT2llVWVWZThmcUJJd3lhWnM3TXRvdGwwbGt6Z0NGUk5DODQ1VzZqaWtCaFoyOWliQXg3RlVXSnpxZzVCS2JrSDNkcG9vU3JhMFZ6Z2dKMlc4N1p4UXpBVUVsRkxRZllPcmw0NkJnWUxPR0E4RTB1L3prbWRrcGplZyt1MnIwL091QzM4MGY4d1hSYXBZNVVqcWNrUDJPRW9uTGoyaGFkZXRRYlNDaC94ZzhrOWhlcU5aZmFyTUFwY2dIVnpCK0JxK1BVa1l1VUhDdTB0a0s4bjRVdzVrNGhlRFU1RG9Sa3RiQ3B0aURIMGhSa1pBdXpueThZclFKd09PUk44aGNYQnIwQUtIUVRpNytOdS9KMUc5N2hEWk0wbk9WT0JXVmN0OFNYUkQ1SHJMektGTjFxbm5OOEZwZHBxN3BxMXZ4NnRVUEFJdVkwbXZ6UUFyRU1oUUI3aVd6K1N1TmlTTTN4SGxKUkV3UDlYOU95U2pVaTB4Z2h6Unl4SDAwRmtvT08vd1h2UHNnbWRMNmJpRXBYYzl1Z0hvSFhRS1JQMjVYditzZjEvRzNtd1FkUHFPejV6eUJ4YVltZkZhUFhaYVRNMW9xcGt4cFRuZnhNbWk1OEtidzI3Rk1RQ09aSjZPVEJ3alR2Z2lnWStTM2NEb0hvUmdjSy9hTVhzN2tCQVo1MXl0aG12bFdwbjc5VDhVOHdrenVGUS9mS25vUkhrd05waHp1RVA2Y0lXWVlZYnRiUlNpR0d1SlpFd1J3Z0xqTzdTVGJ2b2xDbUpDdTNNZUhjOVRTYnpMS2JhY3h0UC9MaEVlZU5VTWVzQnpDNGlzYkUyR2JUajRzVzZRZ05UNEMvdGIxc2FLTkdWa0w0QnhYeitFYWpTVktHY3NvT1RyNld4bTFOcVlEbWpMRVZwV1ZTVTZyTEVndFR6amZCbnh6aUcwd1lpWWErN0NmYkFEUnlmUDhlNUVEMU1EdnZTMWEyTHArQkwyV0lDbXA3Z25FZllnZzBPWFYzMGF3cEs3MVYzUUx3a09IbkVaa1VVRER3VXlrc24xVEExemo0dXNhaDYydzhWT1JFU1Jqb0J2MWxZZnI1RUd2MlVNV0JaWHh4SW50bVV6NENXQmUyTi9BbWRtdVQ5NllHSk52b2NDM1o5aE13WjFRcnhMWUlqUEdSWHdEaTRybW5nSExjUzAvL1l0Tys2MjNMWEZSQzRQZWRYNnhnU2ZUTjRUUjF6aUhlbmFMcGlmRFlSZHJrZTVQNm85bmttV3dzRUV3YVh0SmE2R0lEZ08yZWdkK2cxblpmcnFKK3liaStxY3JEUHFUS25ZRUJQMGZLRU9wLzB6UjM4WC96eVB1bldaVC9kcW0rRjRmcGJVbUt5cUFvU1pCVlJGVTRGSFpReVZJYnM5UXhVQnp4dElkWE1zdThDdUpkbERTbTBqdStrUmZqTXhzZHM4eE9nd2tTOTdZWHdUV2x5OVhBVk8reXlqR3JRanJ1QitqS2N2VlVxakE2bXJ0a1VvSE5uN25zTjViTjJERW0wMm5LeG9PQkJHT0lGeDRsbTc5eTJxOUxKamxTOXhaQWwvNC9pZjhiRk9UMm1DOGNFeHRrOWh4S2xaNG1Bd3pGejJzZTdvc0dGbjFLSUtjd3pKaDRUaUduaU5XQ2NBSllIMlA0VVhHRUZxVTlYVldLN2liV3N5enZ6YmtIZzlpaE9KazlEejB5Qm5iWVNabXJESm80MWVlSnV6d3lUeFRIYnlGQUY4M0FVU0ZuclFHcjJCTHNydVREbk5zeUZOVnZOR3pRRmFyOTBEbDVJZXNuSzY5S0d5dHM1RHdqWGtOMm1ybUZ3SDBBNndGUkhoWVM3WUtUQjdlMzJMQzZ1eEJrWW5peUNyTS9UeWgyQlpFOXl4RERBZk1Uc2FqS3NkQnZHMDNlTHQzbk5nZnd5YjhNTnl1VXR4TXFrKzdxQ2hWa0I2cWQwem9ISG9PYnIxb0pTZGVPWFZPTy9TNDE5TGpIMUh2Z1Rwd21SWlZmYVhyV3NNbVVBN1pydTBockpVcFNCVUM4ZFFGbUlCdXhNbjRONkJKOGR4cStZUUxHd3lFOG5lNHVML01OOXUzMUo4T0xhZUpLd0V0Ri94Tm5VNStoNzU0NGRQekdZZGpBNzlsaU55ZDU0cnFjTk85MG5lZWNZMXJwK25iR2oybjFQcXFDSGRJamtZU1k1MkMzSW5DdUd5dmFyNTZZdU5XWXRqVXZTV2k0Rmlqd2JMR2VmeDM5WlFmQURrZ3Jpb1BGa29VVEtVZ3Z0YjR1ZFd2QkJKNjJ4NmJ5VGJ4UzRxaEJzdlVPZ01WWHMzbjJKT1RDVlFxZ1hpK21RTys4TkVBV0tOVnQ3OXUrODViUjVlcXBuYlRwYk11V1M0bDAyT2hITmdEck8zZlltTnhQRXBiUUFkZTR0YzhNdGpHSm1NMHMrb3J1Tkd4VHQwUDhSYk1tOHo5M1BEakVKR3RQeVFJZXB6N0k0ZkFnNW1mc0lEbGRHelRqQUl2T2E1eGxBR2NaRzkvdUFqbVppWVBKb3Rmd1lRaVdtMi8rTGJTT0tBZVNaZDIxRUVCQ2VUUnRNaTJuQ0Y3aTQ1bDJEWjkyWDNJdjd0bWM3UUV2YnAwMTlONnNuK25KODNqaUE2akdqYTFSQlRFeEREYWpMQmpDUDJEY21SaTBrVWdNQjVnOGlDNEpEQmprR3J2SEJxS0k5OWsrVmZuekh3R3M0VVZHdWVUU2NISDZwSFZMb1djZzA5d1J5NkxaaGg1dm5tWU1KWThGcEtmTXVNVm5vVW0rOE11VlY2YWxUWC9ibFA0djkwN1VvVjY3dzdpU0pJZElNdURHdlNNMXNKbENIeDlWS2xaL28ybDhsRk1wSWR3YVdRbEViUXZna1plazFjTTdwL2NyM1BLNHBRcjhOcDRVWDhLaDZrcVQvanpqRmRQWHVPOUFKa1YxVTJSNmU5M1VjaklKaFUrT3FKdUpRSFkzUUdvRXFWUVlUaUU1WVhhVjF2a3JSVjRWK2VWTzN0ZWJ4dHlqQVA2Mm90WkdJSllOdWtzcUJ3SWlnQUlUTWIvM1RVVGUzUjVkUXMxeTNoWkdDZ292cnNxblZpVzRXM0RzZFFUL2dQbUM0K0xFZHJzZk1DNzBmOFhNOGdSVUpENXdPVmIxMlkreStSVzgrclQ3NnZleVdUR254U0tvbVF6MVE0NFBVTDF5V3ZlZ0ZDUGh4eVpZMmVxZE1ocUZVZUp5WE9rSjV2cnFrRUk3Y3kwS0JBY3VTRDFQNHJKeGhaY0RGYmlEYmRxMUZMeUdMWWZPTTJMcU50ejVBalJ4U3RwTE9EM3JBODBLYjVNV2VLY25zS2VjdnJlZXg2VGFDTGhxYmk1Z1kwWDEzcEpscUZBbTdvVHlHRndyRGFPV3VLRnhqcHFkMVkwVkh6YVpnWW9xNWo3OGwxYy9BWi9PWnVvem8vQUxWTzl1cGFEL0EzZzdTNzRHREV0UDBoWGhOUHNyVTdla0hSTW5ycmRjcys5WklDcm9DWkNZSE5IaktJWnlRd1gvQ2V0ZVM0a3hGTk8yOXFna05OUFB5Z3lEck5BSXZPeHlQVVdjQjJ5RVppbVkrTUdiS2xEVmRFZXVBb3hZTkFXdjFVaDRZZUNYY1Rnb21ER0t3WW12RzI3YXZVVVkvMlFjU2c5WkgveEpHNUs4eHg4cEcwZFMwWlZsNFJIbmVlVXJGOWo1SEZaTkd3NDNoOUNmZ2QzQ1hYT2ZxTTFOU0h0dmZkNnM2dk5pSEdCVkVCUUI2cTJGYWhaanVmakpJaC93Mi85Y2JWSlpYSXlVa1QvbEpWS1NNeG0vSkFlbVR0by9ib2ljdWlpSW9ld0ZudHN4OEZ3Z1FJcTBPTU83b0o5VmdQeVc5THRvNCtueEJRcmtBNUJNekNmOWJtUW1xc1FHRWdKOVBDeFFqa3JVQW1xUGJiTGg1d2E2Mk14N3hDc1ZnZGtVMVFaUlJXa2g2NmNtWGgrLzRHS2RSdDVlQkZMT0luL1N4S01YeWxidzBCRjFpaVVUaE42ZnRuT1NNeDRPQ1doRVVjMlpWSFYzWUU1TlBaL1ZnWFpQaytGNXcyN2lreVpoVG41RlhVaTgwMHBNRFVIS2pGZTFwNVhUVU5pRkUxQktxUEh5ZG8wR2dqK2haU01jTHBwcWxYMldXUDVzelZyMlFBcktyTm1oMjJ5U3ZPMFNkRWdQdERFbU5PRzRKQ2VmSUJUM0gybVVKTnM0NWZlVTdib2U0OHVNRTMzdzE3blRZWWFONkV3Q1NjbWNBMFBUUHQ2eTVPOFdZRnJvRnVHRlFndC9pYmFwS2VDSXc5OHorS2JkZW5XNEYwTjQ5eVljeXNlVkxOUHZiN2xzZ293dU5CcVJvaHJKNjMzdEswQUl6a2RQR1JWU0hMVUdWZlB2clhpRm5TbnN1QmlCUmhWQnRDR3lCckwyNmE2N09QV2ZZZVl4ZzdXanl3aFlzZWN3ejF6NFlOT1NyTE15cXAzc0lBU2ZodVdLei9wb3ROdC92MWxSeWNYMkx2c2Iva2Y4MUVxamU1d3VVVVhLMnVsb2hyZUJMZkF6Q2F3eFdKWkU1N1BMVGFZV0JSb2FEM2t5aFc4ZUZ6TTVzclFOSlRYYVd1RW1zTXUyMTJLajV3eFFrS081QWgyYlIzZFhEaW1CNS9sQTBrTUxNQUhIWnRvYnFPU1RYNWM3ZjJQam05Z0s3T0FwS2IyS2V3azkySDBjOXN4YktxSjhvMmUwTTZjKzRDQnVsR3d0ZkJVUXZOMHpzNkNMZjZ0Z0k1cmFLTkd0Z2YzekxoRm1iK1owKzlJWmtKSWJtVzk0Z3ZNWE56NFVRWVh6OXBRMEJwbWRNcmVDUkIxRjdOT29Yb2JPdW9ORGo5MStlY1JCWElGR2ZIelRQS1dSeE14dEc4R0c0VHdxUXBubFpENlc0TUNKc0NISVExa2w2SGd6YS9wOUlCOXZUdkFoQXhGbGRHNHJKQnVkMmFNQlJUUGYvcVZ5Zm9yUTcxWVA5UnZGNXZqK2JQbVlLaERlTXlIRXhZSkZLRjhFYm9kczBzWHZoTU94dzFVcndnZmlDR3VIVkxaV243RE04VXMzSGVaYUVOeGJKM3hrQ0lZbS9aR2FBL01kR01scVVYcGlvai9POU80czJ4VDc0SG4zQXdlaEE2UG0rMFlpcDhxd0FOT3lDUno3RjdTNEVPK3JiUkxXOHM2dkR6emlxbjBCYjFkbkVraWFsRGxBMXdOWmxZaDA4U3JSMzJPdFhhMUZHZUNUZVI5Y2x2RU9MNCs1RkFDdEdNbERsNUJIUlpDWXBhRzIyWUoyMEVJWlVrSDdmTkxmcldMK2hZdWJxTzU5Z0x4SythR1dzN1FrVEFOblllYUd3eWhJN0xZc0hYcVNTSlRpSnVFd0pHVHRHSDRiZDJ2YWlyKzdIei9MSXhyTVNpTElXdXZxYVNDc25GNnBIY1MyQTVKZitiTWt3dXJ5blBiVTlNMElpWmY0KzZQYmgzQThMNVgxbFBjSW1GbWFTdjczVGxTVEpTNzV3YzJNazlFcDdNaTdIQlQ5c2tNU1pKWVhya3VQTjR1bVQrWEhXU0tBT2MrZjFKMVdmTjZIVGlqTFN2dGFWbVFxWllIQWZtQ3RrTHkxVUxlblRUbHE1Nm1TK296OXc2bHBxaUFIenl0QnNpais0UzNHSVdGaGhGWittZEJJSmYwb3hFYUVyaCtyTnI4YjQ0Z2ZVK3ErMVRjWGhWSDczeTlkakw3b0JNUHRDRjUwblVmZkduSGpxNC9NQnl2eW9hYk1lZzdrdW9BUEhpV3o0RE1IQWdHSWIvVmRza2lXVTdWcWNpTnowM2tjWkFQQXMxK1Z0dFFQVTlTNXVDMldDb3RiUHJGV2dLRjhsU3lVbzMzZXRsbXVEWjF3MWp5MURKdmNhQW9TY3ZSbUN2NkZ4MENISHgvY1g3VlNqTWJnN1ovODFxbXZSeWpnTzQ4a3c2VW5zb0o2MDdubGUwYnBqV0FwM0F2ZmtMZVpraXJlQ05KdnVmcTJxaWZ2Smxmanl2dWhoajhDZ2UvcGhwSjBVMEYwR004ZmcwVG5td2FMVTZmaVJlcXZiZkdjWlhRNXI0TzRzeHBPK2hHbDFwOEdOeUNLWFoxbndqcVBIRGNSTWM5UUhWVDZTa1k2UEgzMld3ZVFvbnhadVFsUzF4aXY5UEVEd3dvc1pueFZXK3JUd3NNS1VPbEV0Z1QxVUdHM3d5cDloR2pXcUpkQzlRQ3pQYm9oNmY0RlU1bzZCZ1pnR05SS296cnI3YzU0K1ZBRDNkaGczZ3ZBTTdldUl5cXJsS1U0akpuUEVSSkVVNlQzcHNSR0NBSlRYcUk1L2NWNXpjVTNVdkJjN25xc3hWVk9XdFMrNXFqK1U4NXVSVTZ6NlhsaHBIdXpnYVRHbkJ6L1BScFR4RFNjS0ozV041eEdVbklqT1g0RXNjREwwMGVXdkUwVmZDUmFJeG1ZL2NLeTBTZzZFdDZ6ei83MnhFN29MWFdoR1dJVDVJcEg4ZllqRDd0YlFOTlE2ZTNJUHR1cHNUTDZpWlJuYllhOEVDZUxRUE5xM1dlNGg4dk1mMTQzZHcxaEd6Z0t0NHcwNlhpOHhVMENwRUI3YVhyNm80TGVYcy9WRjJMVDliWE53OHNEKzc5QXZWQWRSWldJYkF5eENVZXdCcjlrK2J6NlZvSmpHSzZoOGdLT2NMelJQajErRC9XODZiOU4wMTRpZ0lIMEg5SE9veGVmVXBwWlNGQXJld1pTdjYzM3cxbmx3M2NQZy84eU5QdGMxdzdNNDFEMzVqWUdLNFRwZ0gyUnZNc0VNc3YvYnZLYXlyTFZKcUR4NHdnSXAyOWRjekRqaGpYUHZLamE5QXVYS3kxYVFENzdUeW92ck1qTW9mSDNVa2IxWFlSZVpST3BmSDZpakhLc0ZGTGlrL1FPWkZqbVNHZnF4Y0JWM0Yxb2drVi9wb1luMEFuWi9tV3dPMFNLdkxYeEpySlhocUN0VVVnSWNpZnNRaHhTUjRBVlBwUWJDMVU4T0ZueHlTTHIrSDFYZDBuT09Bc055SklnUnVJaWNsWktnMjRTTXJEd1V4a0NmVW1YWnUwVDdVNHVZM1NBWXZlYXJUN09GeFVqWkdCTEs4cndERWw2WmF0RUc0by9mSDhkR1JBTDVGSnkzT0c2cjFFcHAvejRBT0ZNc1hNOGhsd1ozdHhrYVJnTEFGN1VzMWVhZENJN2NqU1JPRVVWcmIxUm1aTERPTjd2QmFDNlRCVWtwNUR0b241dkNrcjlsYlZGVENKRWd2RzViNmtrN1h5UHlqc29zcHhVNlZTeDRXVEZKdG0zNzdSYmdBS2k0aDFKZzYyOWJvMHZhVXlLWHcwdHVabkllS1F4bXN2elBtV2RJQUFyNmpYTTFWRFQ3WWpIdGM2QzhFMmdPK2VmVnBtWVdBMWFIZnZCTnVtdEtkYlFuUUVYNkh0bE45cHRwWmJkaHJKeFVRN2Y3bldXeWozZ0ZmN0FhLzlwckxSVTI0RE1TTWkycGlNVVlFKzkydFhHTDV6Vm55K1NEUzZ2OXF4azJOUGxSOVhLSzAvV3dqKzVSMWV0UXcvUHh1dkhPd0lWWmV1T0ppTEFrREp5dll0d1ArVXcyTnZQSzNDcUlnQk9XT2IwTUZvMkh0dWJ4OFlCZG9tM2N5ajg3RmJnTXp0VHdoc2NETWxxdWNrZVJrWjJqUXdYcFA0QS9ZV2lNV0xpZkgyb2IyUUdFTVB2ZGJQRnJpbm5wK1Zaa3hLN0dBSWFhOExHYUZaWENDU1V4bWg1WDR5a2VhSVBVSG55WjI2TlZxOW5BOHlGNWNsdWNnN2UyMEd2N1hUVE54QXQrMjBYc2o3Vi94YVhlTGVWK21DckVDaHc3TGliNjM0MWkzcTd4Szhlbmk2ZEVNZmVtWHRMVHl5NENyWnF5dm5GM3haQnlROFdMbVNiN2xaY0FlTGRZcmZwbWhTY3ExWFFTcDQ4YnEveFNPZG8rTTFpRVY3MFJmMnEwTHl1eGZ6ZU9KVzlJVEU3QnF2WTEyVFdYckdtdmNNU0piRWkrS3ZPQVVORXEyQlZZT2R1ejZFaExVY2c2N0RIK21GWFBKbVNEMXErZXBQOCtKdmxWWHo5cXBBb1A1SUNOQkk3ZWxFcDJ5bkFqWDhPdlVZTEwxekc2eFpOUVF3RXlrbitYVmRlTmViNEtBM3lKNXhodTA2WVVUM0pOTmdoZEl5TlM0NW9vVXhUUXU0L2x6RmpzQTAvWDFHV002MG9TMW5kZ0Urb2ttVXQyRGFHdE4xcEFIVVg1QWhkR3ZYZWRwdEMzTlZhUUtBb2RHMjVSTXBTaVlORkhWZEN3ZEptM21yR3lUbkJEZFNwM3lTVGFkMXZPQUdyV1hGZ09ZSndZNUNjei92MllYcVRHKzMvZjBuTjdDUDVyaGNpNnJNUzNFOTJWajZIWXRNdmpHbVYvaTRHUUttaXcrUWF3L1kxcVRXcWJTUGdZdjJHejJOajMva2IrSHIvZlhhVVVqZ0VuSjBOdEdrdE1nVktYSWRVNVJOVnNQNzY1K3E3V1pDNjVBWFdnbGFMUjZlV3Z5NUhqejlHU2pJUFFTbWowNm9ES0dqOExNVHNDZ0JidW5Pei94U0lzMVFtU3F3cWpScGY2b0Q3cnA0V3hlSzNUOW1PU2JGRnpXMktndE0zTW9oWTVMMXFPTmNpTVUrRXRLK3Q1aExvSjNCd0RVK1VoaWEvWTNjTXJHRjNFdWJRY25TV0ZvR0dlRlRBdnNQcktVaGVzbjExbkxER0hJdUJ0bi85bkJKZmxiTk1jeDVxbXJKMzdyS2lnWWJpTVZvWk8wUXpKNG1BSUVOemt6MFVuUERsZi9zZEFwajJwdGdhTWZuckM2Q2hhOEVrUUtxWHpMazFkWUdFc1F0T0hYUEZMYjNFUnNsd3ZWNmhFU0lDTE1RRmlQYUJXS3BnY2ZmSmJxZUh6ZHh0cHlKNEVtYWJZb2djUGxydHJHWndSL0RZemtvU3VWbmlYcXdaN1k1d081Sk1HRWx0V2xVTUFNdFpOMGxuaHh5Z0lzVmZQdktxVDBxKzBsdHJSK3lCY1VVdWo3ZFhERkdFeDZwQ1JxSmV4YTh3NEV0WElxdldOT25WRHVBaitoUVBZZTBEU0hoZ1FLUTNIaENLYUtUWis2MlZVOEVOZ2ZYdENDeDVTdm1CdlU0Rm4vNXhqd3BCR3VBQ0tMbkUrdWszdUpZaVZTd3doemV1NVZyaWNUR0NtcERhUVVLL2p4TklnT3EzSEJLQjIwUWxNZHN4bUY4eTUyaytWVFQzU1pZZDNYaEZBUDgzd1dycmFicnVqa2xFV01qMUZUYkVxb2dMd05HTmNYRm9sajJtR1FOS0ZTdklZYlBPZVNVTzcrY2d6Qk9UWnJaUDdLQmhWUGM1c0Mra1BVMHlqVXpzamNHaWxkNEE3bER6TkFzOEFDZnROK28yckNkaU9zN2lpZUlLbGNqMmY1WWVrNzFBaDBWTjY5RG9rN2htZEFBcE41OGlaRUNtMll5MTJ6NjdnZXIwMlZyck00R01JQm1kd0hZN1A2VkZvOWdVU21hckFQUkVEQWk2aHNtaFlMTWdCR3JsTkNWbFNCZWY2bnhxUzViZHE5U1puak9FNW5YWE9nN3ZaUExPOVY4Zk1LbUVDNDFpTlErNEVSc3V5eml5YzJIS3A1UDVnOEQ5M2tRMGw0YXBFNkJSWDdYM0lsdXFBVnpSaVN0U05DUHhtTkR3b09Hc1ZJdkJRU3orS05sbEtOVFc0WDVidEZUZFJ2OE5uN3ZZQ1diWUtyd082dkRCVk5oaEZjT2FSZWNHVGFQRFdhYUdlaGN1TGhHVmEycDlxamtMNm8vR2d0Nkg0aWVoNGRTc0txWUxOOVQya1V0NmJ6NEhBejJmTXpXUW02djE1NXNmVlo5My9LYWxla21KNEZtVGN3MHNGN2phOVltZTFYWHRnN0VmVHZtQVJESEpXb1JBK05kUnZOWDljU3pUM0tyVkg1bDVMN0dGRmUzRGVRL0kyeVdWZjc4bmF3VXpNdlE4Y3JCYk9CcjVLdlNwZnM0ajhQVWxHVW1PVENQQ1c0a1FWcVpvWmcyN3NaVWN2U2lDMnpQdWhiYWttck8wMkk5cmQ1Qndmc1h1MTRGNXJyMnZnZnhscnF2R200bTVJYURWamhZYzJSTmNtMm01UzNxS0Z1eHZHNzFnd1BCckh5T2x1L1ZuaUJiZ0k1dDBOMUpHU3U5V0d0b2cvQlp1YW5NS2dCeHZUV2tkYW9nd2pIK2hTMGY1NU53U0NQaU43eHUra2V4bEpqZVMzUWxQSk01djh5eUx5Ti9pbGUvWFkwNUxrWlBrTU1NaFFYSUNzZXhwVXE4MDdsRDdZZ1o0dG1CVU5kQjBRTXBTbXA3L0JLRVAvMlpOcGI4Z2ZTMUNBdkZpUklLSThlT0hQVGFhenFXeUZKVjNWZVM1ZHk3bTZpSUZydkpOeTNmSkJMRHFzZ2F0YTVzcU50a3BZUFhoVXJPU1ZoWjg2cUJXTHVFajJYUWRyNXRZM0NhTWhjTmtMZ1FhcERGL1FpWDlucldVRm9zNHAxSVRtbFZIUTQ4MUlaVlhlYzBmWkszcWV4OUVCUkJ2QzhrV3pHaUxoYXc4dTh6UHpiU2E3QklTZHdxMFhIMEEybUJKYkQ3d2QrT2swSlNEcSt5SjU0V3ZpbzhvdFo5b0pqOTVhTDZPb3pYYzBEU1NnL1Uxa2s4LzVRR2sreThpcU15Z0RNOGpXNmJ1NUM5TFpLOXB6bU16d1RSeTRYZ0N3aE12VDZjblZqRWMvWkIvanJBbkZMQUlRaDBaQlZyU0U2L0ZBeWRXZ3FaNStoaW5xU0hlUXhaZW5iM0FhUWZwODdkMDlDTVI5OTNiOXlFTitSNnV3SjJEWFFhR0RmOXZFdHRrdGFJM2wwU29BaUxyWG9XTVo3c05WaGtlYXZpaUFLVUViM3V0Tm9UeWROcFhsMk0rNXY2V21aVXI2bzlJNEpxNk40VmJWenkwbjZNdVNPdmlWQ1N0OWtRTmRKdFhGTE82WGlacUVQbXd3bkVpS0NCd1AxZHE0WUNOeEVrMnh2Y0hUc3JUeWZlL2xObGd0dFlBWWduSHcvQXI5ODduSHVTeE03d21LRWdYcGQxTEdmYTA1elVEUm1BK21WQzFKM0tNN281a0o3WW1za21uTHNMWFZnSXNuaXFuVmFLNXRjZzcveVJVVy84VWpxWUErTlJBN1A3cnhYWkErU3h1dVIySGszS1JFbEFLTjdnRXlhV0JkZjhNd1dMOE9lQXo4RjJUNmJKU1JTVmhnc0ErRUVsQS9JQVRBZGpuWU1kTDZxWStpWDBBM1dhWEJlR2FQY0FUUGpsSkx2R21vUEFCdmluOEtXRDRGQzNFNVRISHF3VGhlUTYzSlRjSjVnbXpQWG5uNXBhSzAzSTNtb0cyMDYycWlQaWhQMmxxS2w1Y2lpNXhmRzhOVkl0QTVxamxSc0RNUGlralpqNjJCSXYxNU10RWNRZW44bnV1RXhJRmQzWXZkR2ZpRzg2dTk1MXRQSjRxdGM0STkrbzdZeU01Q21IOTJOQjlGc2lXNFpBN25scldFN3MvdlVJRjB3eDFmQ2dnOVhqU0dOYWI2eWNmalhyMHVmMnNiTkxJZEIyOERlMFdNU1NQa0M4QWJOVXJHV2VHNlhnR21lWVF2eC8yazdpNVNwbXBZRWk4bFROQThIbHB0bk8ycS9ZZGJlMGp0bkpPSGg2b0gyc2NmMXRScUF4YVZENDUvMTFDUlAxRzkySmo3d0xISzFKbnJqZWM1WG9MUU9hVHpvWnpxVkNZc3BiWUc4Tk5WOWM5cnJHQy9ZVThMc3Rzbks2dUlyV0x5UndGMzQ1WWV5cFI4dWQrU3Z4R0hTVUFyZW1lWmVNL2dJQ0FnSURtOWEzVitldWQxMi9COUlBQXd1aHcxcEIyZ2IwakFWTEhmVlcxaDdoSy96UEM5c3krYmxraE5YOWF3ZUNWeDlwRFFWcngxSFNFNlRWM2U5ejltUU9KYTkyb0ZlUndHT01JdHhXRm9ud0cvcldUTDdIUzQyQWdrMFQra0VTLzRiNzZTRVN0SnhxVXhwMnFKRTJSeEZiUmpSaEJtNlVtZVAxMWxwQk16c3VqWmgrcjVVVFkvWCsxa2tvWGpnZklWaVRMMUIrSFBnWmd1VFFRMkF6aGZBNzRyUFNLOEY2N2xYc1F5aUp1QXg4Vm44anVadXc4NXhwakZUOXQ5Z1Z3UU9vOTN3NE1RQkUwNmJKNHFWMXhnYkFKOGVidDZyaS92dGsreDNVY2FZRzRRTVdjVllXOEZHTjNtVVBWZTEvYWplK01qSmREWkJISU53dTkrdWdRdm04Z0g2N2d3YmdtVFVQQWJjOGpoSjdRbTNmMEZvWVZHSVZPeERJRndFN1hhTmg1NURxRk42RGhFaFc5NVBOWVl2Ri9OUnBSQXJraGNqcW1VT2ZzTW5kQWpzb2FWWGdLQjA5VW9KSmtGQ3kzdkdOdCsxUFBkZFVjWkVwKzJLQmp6NWUvZEx1Y3BCbWFmWlozL3gzbDZpY0tZZFhpc0NHQVEwejBHUER4Z2o5ZkpVcDZGMnBmQW9xdWIwM2ZrUzJGMXJBWUdPUzlxSTk0ZTVEL2RWQzQ3T1ptSDd6bEx0c1hjbGphc0FoWW1jSlNqOWw1bE9GN2VoVThPRnFJTDhkK1cxYjlqSVkxZWdmQ04zeGNFL2xJRHV6L1dXMjNIMlY3cWZLZk9IQmpVUjQ3SzBpN3B5bGxaU0cwRjY4ZlkyVzg5bHgrSnc4dU9YeFBBV1VhdzF0S2tTOXlrcHU1bWNXQlNJV3RWa015eXlrODFCRmdjelB5Ui9pUmM5aEcwUm9tTUNsNWZ4SjdLWm1WeVJodlJLUVB0RlpFZDdXZW84VjVUa0E2WUxlTDVYK3dUbUg1QzNCQjVsWmtLOWpZNXJVb1VKdTJ1aTBLbE8vcVFrUjhBVlVUa3NHV3hwN0djbUo1YUhvdnErZkkzWFBGZWpRK1JYZDYvdG5xY2JqR3FLcFkzcVdaVXFsSzlIcjFnOHowRWhhRjZEdnpnUXUxVTNQNkhGanlUMS9OSWZReEhEcjdiS0tNSWlld2hHY0J5ZUlUUmxUZ0NtN3FTd3pSRlV3VVovN1RpOWJiNmlnd1BNc3RGTFNCaE9HNytDUExSdkNvKzZDaWhxeDMrTk1tNE1QZmRPWmRBZFNscUJZWFovekxpcTRMcis0QmhuUHlKL2pMbWVBOW1waVVmcEh1UXZrU1ZNT2tEcUx1TmlXbkFURTZZelFlbVZYY040aGpjTEdkTTZ2dWxYMkFIOEtNWFVra1VBZnlta204OEpES0FJUGZrangrWGM4NFpCbmFMNVhFcFRNY0h1NjdCV1NzTnhxUUoySHRnNjJPWlhHRG9rZ29wYy8zWWtIa2pFcVdsUHNIZ2JNcWJPMkdndXY1STNJdE9lRHhnUWxqQ1hPS1BIOGp4Q3o5OVFKeFMrTllac20vRksyeTdtZksrVzgzT3FoaUl1U25KS3AwK1ZjZlNSbGZhVTEwZ1liVDFGUjFjZ0Fja2Jha1UvNTl2WGlaVEZmYWRZaGo4L0xBY2RuS1JramJmM2ZkME5XdGlEZU5GeVBSbXY4dVJQOWR5clo3RjJjQ05hVlVnekE5SGdxc2RKRmU0MW1wT01tbWtBUGhOdzdEeGpCZUFQc0p6SWxkUUdVeEtPbmxiNXNtcHdnSWFabVRVcmtMQ2tnRmZaMkNZVEVHWmdTUkhLa2Z3UEYxYnhLQzN0YU8wNWNrM1lEaTZLNTVHQjNYT3ZRYU5wcFJmTEtwMWRmdk44bXRwQVZvMnV4VFhIZk1UbEJJam82MWk4ZUtzVlplc3BOTE1WR3NXekR6YzkxUVVQaFdCamo0V0JRUEVWMjB0Zk9XMFZTS1ZNYWNwUGhmYXpQM0UyK3NGNGh0WFdZaG8yZjR4VDdobjJYUXJEU0NWOHVrUktMa0I1eXAxQ0NYWS9ZREY2K3FzVXYrOEhRcFZiV0dKaDRWWmh0TmdPZEduSlJvZCs3dFNkUDhyNUErRzhDWUMrME5mNURLZ1hUYXZsVGVobkQvUmZ3bzE2NHdsK2toSENydWxtclRpcVFEbjZDMjZlUlFMcFp4aUROY3dNYTI0Y05hN2dDRlg3ektGOEFyaWV6MFkrdjJMOTQ5RWN6emU2aVNyMEo1ZkpOWUdOY3habGF0bWpWNU44ODVlSllSM1VDcG45Y0J5ZFRlVmFDTEVEUHduUFRJQkk3MHptNmUvSzdVOHQ2cWxuU0kvUk9oL1RJNWZWdXhIZ3RQd2F1RkIwdGZyY1RYdVFyOTdNQmFsT3NBaTNpT3RZcERsTEg3TmtvQ01rdlp2NWgwaDNmRjExZDBNQk4yUkRSNlQ0VjJqNUhlaC9IM0lDOURVSWZNRVBGV0lyTlRHa1A0RzYzc0oxVEdwVEplYWZSbFZxZnowMHVDMGdobzFQMUFjWmwzbzlIVzl5NUFsbWcvMytmb25pRzZqS3gyZ3oycHRGNyt4NTQ3Q21qTENLOUhZb0JVckttM0ZDbkdkSXg1aTBURmJKWndXNVBvVlJWWjEzMUJjYVhCeWdzNTFTZjdaYytraUVLL0tBYUNUbmxGQVRwU0FkVGVVM2tFQ3JmOVNXU0M3VStrKy84d3o4eEpNdWt0c052ZC9rcERTN3Vtam9uYStHT0VmMDZJQWs3b015K0N2R29KQitacWttZVphcGNzalA4RlRWclRDbXdpeFVNZ3BPVTY4bkVhWkRMUWJ6cUhRc1dqWFgxQmVIV2N6NE5qTFFHY25SQ1lPbkhwdDA0aVZ6dGNWbW0wNlRJa1hPYmhVdDhFN1lHWExSYjBJd1NFQnpvMGlZQTRsbm1lM2M5aXA1djVGb3BjQU9zZldpL2s3OUplN3cyWFI4NEQ2eEZhUUM0U0Qwb3kvQy9DSFNvV0l3a3JBSnY5b3NSZHBwRzJoTHJkZWVWRmVjYzVxZ3h2Q3NCWTlKVStraElUMnJ6d2Nlc0NRNnBRWlZSbnpqbzY4QW43bE52Sit4UHpWV2Z4Qi9qMk1veERtcHFYL3cxN1VkZ3MyREk1NmRUR1pHeE1HcWZ3eDZDckhBR3lsU01MY0k5V2ZFMm9xWVlaYTZaSVlHd0U1dFV4UlByV3F6NFJQNmtoT0ZnTDR1eDBiSEg0d3F2dEVUMnZMWm1IUWlsUXhUQ2pGVHdnbXkrWW9qNlJuUmp6a2xhWXMwcE5PMkQ4aU1MN3ZaZ0doZkY2UjFMVG5Wd0N1eFdKN1NGem1HVUhXVWNQZTRpbzBHbG9JUVhFNmp6RW1uNHpDTW9va09VaU5BaEs1NWJoaXpZN3BaY2FGUmFYRjJqV0xFMlFqZGRDZzhuMHRWQSt2cDc3OTBOazI1QWZOUEVyLzFJc2ZGbEdPV2l4SWxCM0NKVXgzSjh1ZFNkR2JycUJGd2Faa29xMnVteXNWd3o1bW9IaTRBcWlQcHRMM1FiN1JNc2ZkK1FwSUoydUxDY1pPNUNDeUY3NHBrTm91S2daTU1uaXdOdTRnRFhMZ05aSS91Wnc3bmpkdUo5YjhqcVlvSktaTFRQMUtNMU04UjhyS1NkUUM4Qk9FLzV3a3h1RXJKWUpUa0lmejJsVUI0alM4SXBzY3FtRVVqMjhPWjlDVldiNVJGUVJRY1lHTHk5YUtML1BoRXl3TCtZMDB1a2g1UDlPc0J2NUxrVnRpSGxRN2t6UnhSQ1VWbjNldW8wVW0xVUJXbTFqOFJsem5UNmFHK3VlcDZvSTAxOWRGRVdyNnNBRjYwZFVvK0hGS3loSUlDVU5zWlg5bnBtKzJIQkJoN0FVQ0pCejBvU0J0ZjQ4NW12R2FMeG53YlUwNHNLbTNRSmNqaUFQbU1BSXgwRE82ZUEzalNibVYybEQrekkzTjMxbjRDWXl2VGtpRTdpMEFwT01LMnJDZlpQQ1JKbHN1Tm5UdEtzRzBuS3F1cEs3ck9mZzlSYm5mN25lQUt2T01id3FCRkcvRExLRnBFMUlBakN2M0JaYUxodlgxQm5tQ0p1WnIzdjBZZFo3dDR6eE9oNERvZzhtQUJuL1I3bnM1eVlLNkJpRGRzWFJSeG80dnIrL21LVWs0dmJhWmRLK3lNaWwyaGVSWHBSUkV0N1pxRnZUN0lZQU9md0R0RTAyb3dWUnprRWZyWEx0OWMzQUg2eWdrU3hRYzA1T3g2RDZkWTRRaU1zYVRvaVJKenNZdEs4UlVLMXBldU1wWFBMUSs1dFhTRjNUZjl4YjlPdTFKS1p3SmMyOTVKdVc5VC9ML0hweDY3VENpTkZVdzBrd1VjN0tSRExLT0ZxcXk2aFNDaTIzUk9ka1dsWnF2eWJUcTRVTmxFeDRaZW9HUnlTVmMyS3M4QmVZTytTRUE4Yk9uVFliOFVIVmZDa0wxTUNyVTJxS2s4S2dNVHBqZTc1QlBlVDB6M3dlWm0wSjRVdXFZVW9ieG1QWFI4QVdjTWQ5Qkh3djVSNFhxWkFYVXVQcmF1R2k5SEo5NDF6M0xMN2Q2c3NDMUZ6QlZjaWxlUGxoNU0zZGEySnFCQzBleXE2YW1aaGYrUzF1alhGbFBBb0hXNS9mSFVmZTU4RTkxekxSRkwrUUNKeVlpem5pVi9UMGhqclN2eGZqeFZ1a2lFck5Bc1JPbGhTNFJISE9Bc3c1QXA4emxjeWdtUnIvZlhFN1pxLzROL3lOV2l0NDZCWmlrZzZkdlFIUnd5d1VhbHVNajRXMUZPMDBzYVgzZzBkVHNBLzVFdzMyN2xjZi9yTWdGRXZ2Z0VXQWduY2d1YTMrb2Jhdmp0QnZpc3MyV3dRL0NKZ0kxQnV3VkN1ZEFGeldBekJFSjE1T2hscHpzNVpjQXlBZVNVVnA1dWVKZ2N0RjhSN3MxMW10QXU1TWQwczVhNy9qWHl5UURIREhYandUV3MrZFRJWm9yRDJ4bDkxZWdORFN0bVhUd3BYTzB3M0ZGdytEeUprQUlUWFpKU1dxL3JSOHFISlhWUmdsdmhONWtiK0ZjRGIydW4zTk13bk5VQityektYc1I2R2FqRzIxVG9SWmw3TTE3RVNYWCtuL0RWWklLREZMa0RDekRCelFJOHpIUmEyVHNjczZ5SmE0MTRreGRsSXZ2TjJsQkhGRC9ubmlpZDNTN3BPQVdtNzltdzFyWE1yOXJIbFZna05zSDAxOURFczdBcjlpTEpjZkFZWWRjdzFxOHlQWldlTGFGRUJaNkJoVG9MZmpueGhtUmYzeS9QSFdsRnNnMVZMNTdBV21UYkdBdUdmTGxtUTZ1ZHpHRm1US1FLZER4S1N4SlV5MU1mTllycC9DNVdTMmQ2Vm1wUkxGekNKV0hUMmFZMUFRWi9RS2d0azhvVXN4Qk9PMWFUTmZlTEhnc1UvaGorNjJVeW5Ya2tJcTFvQU9sdkJTZmNJd0VEeEc1ZFhXVTlNZzRhbW5BOHlXN1c2NnNjZDZNc2Rwd01PbEoxM0ZBTDlJQ0xtZ095RnIxNDhLdlJiNDRnUGpWZHRFbzF6M0FOSTIveDFpdzBUSVJmTVB1d05tM1NjSXFyZmZ6TXRrWE5GVzBpODRpdnJoSFNsYkhQR3BjT2x3TEd0elRCblpWTzdlYThvYkd5N0NXM1MrZXJsVVVBOUlkcVcvV2l5UnR3U0JrdWx2ckY1aitaMVJoNDBlOWROUkR3TmM1TTJacXgwRUFwWktBTE1laEZwdi9IVFlJck1RWkkzK1JaWGR1aWsrVFU2TzJ4QjZZMjJ0TWJjMVZBSEZMbGlGTUMvcVAwZ1VUY2t1b2FCUDg2eEN6NEdDMURTbGlPcXlZcG9BcFl6K2VVNXdUamRyNWdpOWM2clVBZDczRGZZMjZRZ09QUk5xM0QxQ2NCcXVraVcyNTNUL00rU2RvYzlTZ3JOOWg3aVRldUhGZW9FNE91NW1GRkRXbVNqTDR3cHZYRklieEY0dTRubm9IZWxadHJhR04yTnAwaFR3eTRnbWl2RHpEc1lPWjVkYzlpVVNkRGY5NnowQXdudktoQU9Zb0xxRjlONmY0anRmWUIrVEJhTmhreGRXeUxMbXFwdVNJOXVzazBocGVJQ1pCK05xZGNuZ3kvOWdPUTBWR3B0d240bERtSUNEb0pQQVJyZnpERHRybjVvQUR6Zm5OMURjOGRkRHA4czlHN25YK3JEVmh0OGgySEtNajVDbVhrSXJQTjZqNlA2VlRLOWNvRVE2cStoNjRxWDNzNFZnNjVhc1dZQ2pEZmF5VHVrbWc0Ui9GTytIbi9ONW9CVjVPVkROWkxuTWZMcElhYitoVVlNRzdZMXgwbXkrSFVxRWRKYWt2WUhuUXcxeUxHbU80R3VSSlB1c0oyZDFwOWNYNnVkYi9Jc2I5Vk9QWWgybVVGNmt4eC9uQ0kwRncvOGJMVFVIMFZDWEJkT2E4c3pTbUwrVjhVVGlnWkx2TXBkeUY4L1FVUXFQeEhWdTQyM0QxZTg2em5IRlpDYTRtS3FsRXhHOWpHOXQvTEpaNGtHOFZxZXNGT05iVmVlNko3TjU0NmRnYzA5S1YyVnVhNFl2SnlBbXpDRHZaU2VSZ0owTVhwdVZtdXdDL2xhejk4WFo5Y0JkcFZESTN5a241TnJIZE9yZlFhSU5nWGZtMm9DdGcvU08xK2ZXVHJzckpJTFc5dzQwRFl1WnUrQWwvdk5sbGR3L1EzQVRidGV0SXpHWnAxSzVrVzY3ZEhDc3kvVGpLMUFLbDZTY2tKQUpXb0pVbTJLd2swenovdGdCSDBsaW1nSUh4dzlqNTZQZ0lDQ0EwZkhWOENGa2pMVCtPWXl4R2lxRlBKeVdKVXpaYmtmemJCVHdtTXBvTTRqRlhZUXA1UHBZZ3dHRFVJM1htT29uU3ZLd2hneUxRMmxSMTQ1OVdwTnJJcVpNcWFjQ29EczQwT0d5Zk9jSkJRWDgwQlBWWHBhRVM3M1lvTUgwaEViRm96a0QveTlyejFzVDgvVDIybVlKRlJ3dXR0WWxPcjNHTmx6cnFWWlRFSDF1SGx2MXhjM0p1cmxDbWZwT0J6K2dHMEJjWlArSEpRYktIYkdKdGNhUXFxbEtUR0w1WmUyMnY1Z3FrMDN4cFU0SitZK2p0ZjJMNi9yTWorc3N2K3hMLzFaVHI5anZmc3NjUHIwNmZ0dEcvdGVmOXUzbXZ2OHEwT1RlU1RsaDBQeUlCV1BxZ2YweWRwUDIyOWd1NkluS2Nzc25mT0dkcnQvSE1DMUtZdjRnRmxTTUd4eFdCYlZqOEE1b1Y3MVdUM21Zb0dBYXBpTUJUMkVJYnVuc2RScXdYVEk5aHFpWkhVK3FYUk5WbGtkTkhwejRUdjNNREUxWmlBbFVsbnJ2NzNOS1QxQ0RYZVpRbWdoOUhwYU1GWmFEbURxV1cxeVdIczh1MVVkTmFkc25xOWdNQW10aVBZRVU5eldZQ3pZVVc3NGpwTnF2Qk9DTXA2Tnh2WFVFU3k2YlhZQys3eG9DaEY5ZHkrNURIWlVKcG91YThxT2hJTnVaRE5wbG5PUExGT0hQQmpBSFE3TlJEbVhPek15blNBQjhtY0dBM0Q2WFhKOW1MNXoyZS9KSVZVanVEOTB5K3pEWTA3WVVSaHp6UitwcFQycHMwN0U5ditzWndZMHR1MWF1UkZuUE5NWHlKQWZRU1ZmZXVNOWRJd3dwVTRRL3dXUUIrbEhRWHVrUlFXQ0MxQ3VjaDJZZitldkc1a2RnN0tVS09ySDdRWU85VG5hSHoyQTgwQVBZNVhvTllKb25xNlc3eHc1bFFOWUM2aWFZS3ZMYU0rR0YwVExCa2NBQURVeVNlS2hwZm0xY0VROTY4MkZqRHV0cGNDZWVUTGVKZHpwYjA0US8rVHBKVlpwenU4aVRUTWdjdFF0WGMwdmJSaDhCSytOa1RuUVMrZ1RwMW9UVlZDT1lmaXdEU1kwZlV1UW9CcDgrMmowMzVQQmFsRjZVRlJSdjdpV0hvME1pbEYxSjZlZmY0VEtOOWhYWWd6WGJlMXdjRkZnMUM3WUtqby9DRGVEL2dna3l5dm51Z1ZXQWlSM2lCa083cWlXVzJ3SVMyNCt6a1NoWVBPZGl1ZUlQMThZK0FoeXNXZVgzTVlNRXBHVTlVS2Q5YitEb0FwNFNtQ09janUvQjBpN2NFTWhFSUh5QXc1VTcydVEzV3N3cktVSkRRYisyTnE1WXlOWVd6OWlDUGsyVG95Tkg4U2hSM09TeVd4VTJEL1NMblA5c0FtMktKeDZzTy85c1B3MHp3MVc1cXhES3NxbXlwRERObDhCcUY1UUNKSUdhM2tYNVJRbzVabVJqQzlaL2VPK2t6TVNGZEZQYStwVGE5eE1valRiUVU2Rll5eHZDSHFTbWsxQ3J1MmE0RTI0dkZBd243bS9lSTNBRjVmRDZxUllQeW9DRDc2aXhDUnlNNTZZYU0xdU00RTdNU2Z0QXZZM1dPWU9NcHVZajkwYlNUMFpja0Y4MCtFOTcxVDFVTGlrK2s1VTdGV2I2V3J6TTlyOFd5czRIZXlLbk9uMmV5eklWcWlFb250d3RFaUZJWWtiWkJhcWgwOC8yMEZXUTVzd2N5SlBxMitycVZkYjlZdzBlUTVRZlQ0Z2ZacG9OTUN4N3NKR1F6Z0N5cTBnUUhsdDhmdkwxRVNiY3RIeFFKSlFhT3AzdGRtayt2Ty9MVFpuT0xoSkY2L0RCWDU0QWRRdzhPN2dmR2lhUklIWVZSUExZN00xekxlTUZNWGlSVExiWWZBcVkvblJkQ2QrYjloZ2VKUWpLanBOcU4wY1p4alhia0JHYlJNMjNLWUc4cHo1NStlOWhWUVhiRm90QWZzZzF0emR0SnE5Sk9lV0lsVWhBMUx3R3JJQ3BiUjJtZ2huR1FqcmpUUGFQNEErcXlJR3NyWVB5VnFGYXdZUURnWGpvOU5EMVpIK0xNYXR1dEhUL1VrVFlUcGpvNWhSSy9ZNUhGTk1EaDBsRmFhdU9JMUxtS3hwcGNnbTdSQ2sreEdUM0FISkJhZTkrcXd4aTl6R2k2djQyc2FmSlBKckNFSmQvQ3FqcFpHb2hRR0U0VE15clBzczMxOG0ycnRHS3I1RVJLWTNrbENBNFhQYXFZYWhZRFExWTk4YStWSFFZK3hESEdWSm5PRkE0eDhKWlRVZ2ZkYWJtblY2Y0Y1cDF0VWVKYktRRlViQ3R6WmZiVlJUbzhjZmkrdGNQWGNsbXhmQlpua05BdFBDa2M0aWN2UWRQdytxTVlqQUkvWjFocjB4a3hhbW5MOXQwcGt3U0dWeWRsVVJvZlZneUF1YkdHUXdSYmYyemdBZFhWZDlQdG8yTGlXdnZkWWo5OHVLcmd0dzZkTERuZU5zWitUaWs1a08yTVJRNlgwV2FWYzJVYk9kSnhiTDVMWmJzeHVSa1VHbnQraWtJOWhmVFR2UEFoVjZCdFNPMTlOL3FXNGpNbjc1SzBJbjJSVG1HaUtxb05aSG1kNzAzVVArQzRLbG5NKzlQYm5HejhvY3loSUtCS21HTlJqQUVUa0dUWEluYW9sNXdlb3F3U3AxTThGdnpHNEs0NDRSRjkyaUxramlBdW5VZGxveGNxci9RU25nZ1VPTlBrTFZMRU5nR2NXY1ZkTjhSS3BraElMVDd3WVZ6M1lMRFVZUVNRcnNWRmtFMVd2NTFFbjJmU1BSS2dqUWtwMkxsSTVHT3B6WUNhUDZUeWp6ZmxtcFQrNGppVEh2eDY1WFpCS0FmOTZtUDZtSGdVclNQcVIvQzdWYWZIK2NxVlRLQUhCNUZiWTlpMUJzMGN1UG1uS3o2NVBUSzRhbVpROE03RFVKVURSTUl6K0JUWTcrMzVMbDRLZ3FtQTZITXBBejBsM2NrQUlmcVBINGYwRnViWHRIMnVCek1pYkFqWnM2cXZzTno1dUc0V0UzWitUQm1QR3lRekdlSTcyRysreWkvYzI2bHNsRExmRWYzQlZrckNvQSsyMlBRZ2pZNjk5SHRxamxYZlZXa0lhbng5Rms5cEFGaE0yZmVoZkkxZGFla08xWXIvaXZzbWlNTW8vMU5jMUJqMVFud0Fwa0NSbTF1NUtUNTFWa2RSSm5Sd2lidHZ6VzZkcmx6M2k5YUJHNFJKdk9abzM2am9GUXEwUlNFLzFCSkE2WWwxeTZPelVwMmtMZ3JNcGxoQUIyN3BsOXlsU0hZejY4RkZZTlI1cUFGR25ja2VVM2FIKzJ1U1FNaE5qbDdDMFU3RUJjMnBoL2JsVkEydXpRWElXTzlzWFl2c2toa2FMbUs2dXp6eDRTa3ZQeFdPRUR0dnNnZU9wZVpuU3RoMXRvZ2xVOTlqR2JydEQyaStuakUrK2FucVRRVjNQZGZzRkpmeU5UZjhLVWUwQUd6Tm9EWnJxeGdVTHNINUNyZVNIdFJpc1QwbW5VVWEyeHJiQlh5QVE4LzA0R0htOGZ5S3E3Tnl1OW1ySm1mQ1NTUWtST3kyZXdQYVR4STlZbVNBeHpiZGJ4WnpTN3BmWWRvcG8vUTd3LzkwcWwwWjJhVGZOZTYzU1BsV1loNFBidnJkcVo2aUkvNFdlbXcybVBCZjZBNXVKMWZCbFd0RUhLUk9wR0VwT0dFcGE1NW9OL2pFTnM1UXlzU01UZTRwKzZVakRHMjU2YjduTWV2cEg3V1M5Wi9XMzFzYzM2RzhjalVEUjJ4QnNNaCtJbHE2WmdENEE5ODR2OW9kenRkQ0Q5MkFFSXpxdDF1SUN3UU52YkoxczAwSm1ZUzJJT2xzckd0NTN6amhvMmF3eE1FL0RzWVJHMGpYVWcvVGNCaDZROHEyOU9RRWlTcFU1SUtkVmxubWJtSGNid2xFbFRxa0wydVN3d2UyTDNuOU4wT2xDNVhibjg4aGpNdWUyODd2Rmh3L2MzL2VwdzlFZkl4Q2kxa3RlOXBvQlpBZG9MRFJGdW5OajdXWE5rTHZhdFVKV0xWNkxpR3Q4bFJxZjhyTDNCbm1LNS9Fb2RwS3NOOVg4cXFUSUtGVWtDMXhoVmlZUDl4OVR4OHo3Z25tSWtzcDJyVnNWNkxrT2cxaUJFNVdUT1Z5aEhsM3hMKzFpVG5jWXJ2d0xyQXBjclVPLzljYXFyMWIwME9aTm9nOWpWRGs1MG80TDNBNi85dmV1c2h3TlorMWo0RzZPQll6WUZRMU52U2pOWVltNk81OGNZQWluV2crZkJKRm80N1NDcTJyT0hRVGphZTJTSTUwYXBNQkNuZGd6bm1mZGE3ZWdOMzdBUWRqL0RYaFQwakRrYnNkRlBYcm9Md2xCaGRYQlpDeGl1UHdSaDJqT1lJdUtlc3ZNR24xZ3pCUmdzL0VZUWxSVm5pRHhUdnowM3ZvMStzK0V5dCs5cWdUS25kME5Yd25MME1JRGVONUh4QlJVYkhaNExUdFZnTmg1bTIvZUtTZmJEbXhVQjRtUDcxM0dyTFlTL2tQVGVhTndUQ1IzbFpPQXhvSGp2YVRZZjBjSjVUVHpHTi8xZEVONTJjcFJtemkrMHpEME5ZZkFNZzdhYXM2ZnR3aXJKMytuYXJaTEJtSTBjdEJUamsxMDBmR052SmFKVGVtZmx4QVZsOUptdUpzZjNVL2h5UStXekY0UjFmczFDb0lkc1o1QnkwNGlyOUNXbEVsYlBuSERkRGJTTnZ5YXBTUnM5ZWVRMHFDMGM5QjIrazJTbmhEMDVzS2tiYTlsM1pLcWxuNWZYb3djWVFPL0JmVDZxUE4xbjREWkdvMHFabzFWM01GRXVZM0g4cXpJNmJwNTFnZ0JXSVJNYzdDbmRxb2tVVDgyUkxrL3YxOEVYakR2Rkp5N1h2NGVLS0I2MndvQUdYY0wzRzdhTnpIMTh1L3lGaVVKd1NUWGwrWXplbitQdDNXKzRHNWV0ZVd1NldrUXNaUGpXVDhVVFA5aDJkSGMvWVY4bldHRko2TWhvTytnKzJlREgrMmRzcWhCelY4UmZ1M1A3R3pEWnNia0tjNXBhaGFWWGVhTWRiYWJLS2dWZUNMNWxWWDVpWnJGRm4rZ1RQOVVsSm5lTi96eUJ5cHl0UE1MbmY5ajEreWl4ZXN0R2tvaVB0cUhWRm9TanRjNU5mZjRwR2JKQU5IUGo5akNlYTNkQ0FJMG10OHl2WXM3OFUzZEFteWphQmFldmhOb0tod0ZCRVovcklocjk2cktuVHUzYjZoeVJPR2ZqOHkzK3pQOXE0M25TSmhYR3RVRmoyOElvOVB2Rlk3SHIwVFo1SHRaUlpzY0paMEZ1RW1FQ2V0NGpiZENCUGhUd1ZMZjBFRUN3RGgvRlZ5TnNoNUxnclRZa0xINHBkT1NycHVEdmYzZTZqSkYxQjFSb3BUdlFoOHB3ci9qOElHa1lOQXUrYTlrbEw0cCtacmxZeEZjQURCWmZIOHFDVDVhNWZTOVJvZHdvUktwYlJXaDZrTGUwZWtGYytjakRmWUhRSEhJOEpaWGtvN053VmJ1M0RxN1Y3WXFLWnJ5Yk9BWjIwcUNpMFJlMVJBRkQ0UUU0VmJpSlhyNnRUVkRQY2UxdWwzbHErZHdsbEFnV0krVFZJTnNpOENtTzh1M2djTHNGOTZiYVJEVHpvVkgrM05MYXFCeUZrNk1LMFJRcHBFQUMwSmM2QjEvenEzamg4MmZrcU5Obm53NlFuSERVMUpYTGtzVmxwNUgyME8xN0RHUXlwWFRUaWQ2dWVEM01vQUJmaXJIMVlzNzA2VmFzUTNwNlNJemthbVcyU1hiN2J3MGIzTCs4YmJaV3EwUEJYZ1VyeWJ0c0VCMnlUZnZFK2lVclREK1hienN6L1lvODBtRDIrY2luMEJDSU8vWStERjU2QUlSSk5EUG5NSWNXQ3NvdTRkMWhYekVad3J2aVdzbXUvcjdkRVBWcWpwcnoxQVd1R2M1WGdqdmcxVnZLdVZ0cUtsMWlvdnZtcEREL25NajdCb2JHbTNXUmpHR1VORkF4UEJkM3BuY0hwbWdHaGVuWHQ5STg5aUxtZm5hTEhHdUJsT0lWK05RSHZQMXYzcDdGY3lNUkNnMW1Nb1NpbDRYQ3d0VU5zSmxoa0pTR202L0xZeFBCT3VaQkdOYTRDUXZDUUIwVmhGZVorK1NSQXBLUlRwMGxYT0dwU0NIeUsyNXB1RUxrUzhweURuWmlIeVlLL2x2MzR3MFhzeUgzc0xUVENsRTZLOUxOa3I1anoyRjRNRUJuRTVkZDBKMDhBUkxaU1l4VXZqRXpCUmFuaEFHQXMyckp1dndBWkdzRkNJaXNsU3U2eWp5Uks1WmNuVWxHakR1MG1nMHlTYVRwYTYwaWJBbDlkYmFVci9wbGNMUUFxYTJkUXlnWndaSXZ1bGp6MmptTnV2Wm9paXYxMXRDL09xY3RyWTkrT3FURDVPakNQbGxSUy8xNkZzQXRhTHp4ZXhnMXdheU91U1ptdFQ1VlVYM05Rb3hwTEdoem5CL1plYk1QbXd4eVltS0dLZVRnc1U3cnNWY3RaU2JDNHVTUWJVdXIreG5tT2ZvcFpDK1BpY3c3UFBUOE9xdk4yaGJ6dWUyU2VNZTJZclJNdXZlcHVtck4rMXVTcU1xdU5qb1VWWW1NUTE2cGR2bEdKS05XNHArSnUwYTVLNGtsbzJJVDFCL0VqQ0hIQUpkZUZQUUsrUUtIZHhORkt4ZVNzZ2o5bDJwOWg4YTlybXRFckRTOGs4bFlnQ0lPRVk1a3N5Tld0dTlxZHR0U1BFM1ArZ0I3cGt4VlpkclhWUWkxYlpLOHhMbmNsSUd6WXMwU1h1U1M4YnNWd1FzVGwrZk95QU1sdnhvaURxN1JpTXkvVmJBejRWSU9sclpqSTgvdjhhaGNIdGVVL0cxTDM2bDNoVEFJV1U4N0ZKdnd5bitWSDRJWkZRaGtYeDhiKzdleW52enpNNmZWWHRFVkVNVHBWdVloZlhIR3kyY2RxWXpRZm9Ca0ZwdjJ3a0JvaXl5SDBCbFJaNFkrNVJSakY1K1V5dk8xWGJLVFFwTVFRV095ckFTQmxZUEx6cHUzVHl6VForT2NCelN6SUllRGV3YWthRW1BVVVlRktvUk9HeTkxWE5uVkgvc1ROWWFBazZhcHlhdEdMeE9uSlNBQXBkcDk5V0RhNWhNV2JIMVMxaEY1RXVUcXBUSmR4dmY2c09BU0QyWnAwWlUxV0N1OE9XV3JxajZDOHBybUtlSjdtMHlzYzhtRCtsL01PRjRiUDVBYXFkV2pRL3d2VnZtczlySXBkalpkSTJQaThQTW9ERitmdUNkTnBZTXdCT3pwcHcrVXU3bE9nWXhoYnFZdWVDTHFvMHMwQ0pKZlEzTmRpWmxqRVBzNStJSnZ6WWxKaExCWHh0RTJpeFI1V2o2KzBuWWkyZnA1Njlzc1NJVGtkYnJlMjdLVXAxZjhWMkhRU1BhOFhvdkF6NWZJL3FpVHUwNXNRNWVGeHRUY3JHY2NFcFpMdWNRc2kxN1BlL3lXUE5pQktFZG05R25LMlRjbGRVWnBUM2VBZTkvSXUwNVJ6eHJab2NuV0J2a3NIQWNWTGZUalB4Y3c3TGp2YjNIaXJxNk90YURUTkhGaHZRdS9RWHBVNUhXcnM2eWhGdklPbTdCYjZ6dXdUNHpsNlZBNk0xcGxJTkNiU0hxT0lVTHNaKzNHWVFDbmdCWDYyLzFiS2xGVmJyY2ZHNlcvRlZ5cnMrOG1FbExQa2VsdnJTaGYvSHJSejVzbS80aU9SMi9wWm9ic0F2aGRHL0JtZnVPcUd2LzNHVVdSR3lOMURSb2VKbHR4NzFaWWplVnBycUhvcm02ZzJjeG5hT2lyZWkrZDVpLzRzaHhja1ZDc2RIbHF6OW5ScEgrck5jNFJ2RUIxSXZnbHE3MTRCMmZ0YmFzOGdFNjF6c2tGL0MwL3YzRFZyNWVFYXZudGhxdDZxUnIvRlE0M3FXOTRTMUttMzRUZ0hBSm1YZCthZmFISWdqbmRvNFA2S3h2SjhxWlVGeUJ1ZUM0MlNQalNScnlKVGZpS2NOZG80bXhYVS94WWxFSlBodXB5YUhmdDdFQXI2eXR6WEw2Q3Erd21qaXNlZVJnK3dWWW5UN1Y5Y0QrRld6ZmU5VkpHNk00djd5a01TeUZGanRVT3ZZYysxTEc4YUMzbkNyeUxrYnprUyt6a0JnVEoyUEtMaklIb1JrVkhtWVlBSzIxUTkyTkpORHZ5SXUzWGQybzM0bVpjKzgwRHNBdVBwOVkwNGI3TkFWSkg1OGt1TkJja1FZaVBKLzRCNE1YMm9RMlRGT3RHMnVYd2t2Vko3ai94dis1RnJMd0ZTZE4rU1Q0OGlodE9yTzgweHVBUDJpc2pJUkwyZUg5VFZoTGYyZnVIVHIrb3ZKV3BHOGphc0ltbWFQZXpnUzAxVUMzUGJQOXlPNnFqNXBKc2hwTFFUUjE3ckNmNEtrOVNmSTRUckYwcWVKN2hxaUJKaDhUTWRlOVUzQnc4bFhVU2JBOWN0SlhhbVR6bFpxL01aQWRta1pXRTd6MHVzNFNWenhXTHJPd0h4Yk5kbXBhYncxVTBQYThLVzRtV1N4MUJCd2pONE5rRXhvSGhlRzJxeGJ6R0FaU3J2QTlrM1dCTWNKZWxTemc4dUV6UE1ocGRhWTBRQnpoMGE0UG1JZncvYnpOTWhTWEdZNk1oSndkdmFOQWgydzdwL2hEenpoU0JudTd1aVJHWkF0dFZRWjNNbUZzVmN3NFQwMG1lTGNBbzl3NnN2Tzl6b01nNnQwSVVsY09oZGlwOVE5T0w3bEFlUXhZZml1cDVQSUI3YW0ycWc2KytYL2MvZElVUzMvYWxxSUpHZjJVUlE2dDdjayt5NjJ4eXRCQ0kycDRibmlGMkp5a3RnQ3h2WGtMTHRPaThwSnpzdldZZzNSSDJvM213S08xUWF3d29kSjZiL2ZiRW9ieTJpOXZzTlUyVFZmYlBDM1k0TS9EUzkySWx3M2VtUHdmUlpYQ2NGeXN5cEZtdU1mRVJKSmdNS3F5KzVLNjBrZWl5QmdPZkx1ZXAxOFM0bFNHY3VOZDk5VjQxTkFGeW43SXQzYzloUXhNTWxvOXBLdzN6MmZEVURTMU5xeWR3WU9aWGxJN1hIUTUrNDlwYTAyOTVGSUtDYi9rbDRJSERmMkpBWFFQMUxaWmtmdWdLTStYVmhNd2FwWVRjM2dtdzJ6OCt4RU11SytpcXdKZkdBUUxPYmZaQ0VTamI4Y3JpVTBmMUhHQlRneGVuL1g3aWFFcFRKNWVPUWF4NWo3Z2FKZUIrREdzTFNzNWhRalo4cWZKRXd0dE94d281aTdmVG1rbUxETEFiR1R4dkJlbWxUUENSR0Y4VzZybDJ4aE90YVhocmRWTGFrdHR5NVJ4UTc0SVpHd1dQSDBpTnRBQlNFNVF5R3JZZzZ4QjYyQ1JOeWtXTSt3RndPclo2UExaOHA4YkYydk5NRzV1TGZuT2p2ejhoTENvditOaUhVUFlGTkpzeWV3YmoxOHNpaUNnbC9uTmlHaXAxZUtqN1BtOW8xTGw3MEsxaU00Y28yS0JSWVdZOXpmSzcwYks4WGkzTlJlMEt0WXpaNlU4YUw5L2R3T2phY2c4M2VGdFFHZUJLYXc1d21UcjBUR0Y2Nzdma0c0L3hzMi9zRklrZy91QkUrbE15aWUyejdkZnpBdzF5Nyt6Vm0vQVpTRkNzTUh4dUVTbjdudFNXMzg0L093Z1FsdVVyVzlkVEJuWGMzN3oySnpTRk1FZzdVaW9uakx5TmVtRFhQRnI2RkdHOHd6SUx4NUlpVEozQ3dXUHM5cW1hYzNrblcxYkZSbzlyNlRwY2syeXp5QTZnQUpQc0dMMGpGc3dkS0U3bzlQdHBJTklhUW16MXlKLzB6b3NobFBYUUEzS2crWVNuVzlzQTdzNUdhQ0l4MDRjdGxKY2diU28rVDl6SUdqcWRQMXdOTFdvOVh1T2tMN1ZScjFBWStCWkx1L25UcEZ2MGtlZ2hkaVlYNUs1UHAwSy9NMlRIRGVoNjNBZXM4NWxYc3ZtdGJBUkxtMmYyWmVHNzlSamdPRHhacFVNOEJCVVVLTU1PR0ZRTnJtQUVIM2N2N0xQa25uS0ZLTGtMY04vYjd0OWRRUU1VMFBJTzFWdWVHYkY0WENMUGRsaFVNWEtQL0NhZFVBMElnMVlLWWtCWUlacitOSE1mUUpPWkl3K05FYjl1ZTUrTVdjbTF6dnNTODRMMTRKcFdSQVE3M1ZVSWIxcm90NVlHdmFPNm1acTBwMVVHWUVXZmk0Y3lLanY4SW54UHRiOVFYVUg2WFVjcDdUbmVEeWVJNmRDUnduUytReElCN25jS0xpT2VVNHc3ZmxTOGVpdGxEVTNmMkM2YXNWUS92MzgxUnZWR0xwTzNVV2lQYjJ5TithQ2RMQnV2SytSMXpCSGNxZEZXRnMyRjFTdjV5MDNWRWpNUlJzcUJUY29ldjVTaDZjVE9DMFVQRkRkTXZVKzRXNi9vZy9UQ1hmYjUwTFVFQjAxYkRVbUc1bGwzTERjZ2cvQXp0TTFpQTl2Qit3c2tYSWE5SVZiMkhQaGFGazZvK3BnQ05Kbm1Vc0tlTU5NcVB2VFVTa3ZYYzdNeDlNc2VUNitSc1ZWOGRiT1lSMzBUd0w3anRkMkEwNlk1MUlJWmx6KzVoaER2aGk5ZTBub1RkZjh1aHdxamVSazR3NlVqV29FdWIyVEdJbVkyNGJBNUFHbFU3bmZQUTBidStGRzQrM1A5T2V1dlUwSmxMOURSRXc4Qi9LYm54R3FDV0hFR3g0eC8xLzFSbkt3MjFsTjRySkFuRVFISGZXZ0IrWFpjb09jS1h6V3MrTUQ4cjJEQTBOUGFrTG91L1Y2OWlhaTVhV0hMZ2JHNXBtMkxUaWN1cjlNSFgyZVcvZUh4aFFKcXFZUWJOZG5UKzFjaGdhSVVGNlA0UFQyYWhzazJ4SXVmbmlCUXRVTExpOWJWaHA3YkpBVVBSL2tETWZzOFVwRkxJU2hFeVVQRGo1UnlYc25nV1VyOGpQRklGdDcrOHRVcDhYelhRTDUwYnl2OHgzSU1HWVdsZTlpTnkvMU8ydlJnTGRKTHNsWXpnNFp1RWNrbk5qOUdlY1NyTndEeml3LzA0Q0NobVVJWVdFbFc1V3dPbkYyanN0dHJrZ2pDVGs4ZDhJMlJqRDluTTl0ak0vTzZMWWZwcTJja2xxeTNPaW0vazIxOEwwS2FRbXJZS2ZweVVGQnRvSnhxNjBHcGx6ZWJhYjJzRkc2b0lQY2hrOUdoV1Z6MlMvMDhoZEMvcmVmaUpJS0plY0ltNS96VllvZDl1a2ErazZWRE1LMnFZdmlmNFA3RnJLWmVFYmZqc2VOS0VZTWRSQ2l5endpRG9uL0pSYiswUkZXMFZGV244VmVNQ1B1MStma2ZSbWcxbDJNUFRNT3BiRWZmNFZkRkYxMmpHOXBzL0IzVmlIQVhiS1pYbEhHUzBhWkVzRkphZFJjK2FHV0tQQmtmTFNvTUdWVHgxeHAvTk1SR0k0WkNSTU05cnBtdmNHSVpqS2E5aEF3RldwOGhCQjl2WjIyU1k5RFNTUGQwc1lCUWFPWUd5WWdWdWlEaVZUQlBBdlRKNnJOSm53cFYxSGMrWjVKQXN6S0s1eWRuK3BENjQ0L0daUUpxYndEMkF6REFxY2pXdU5XZHljUkVLSm13aXBBVGpiU09UWmdCelUyOHZXdHhxSm10VXFYT0FuVzhOQVVVQytGaVRYQUFNbVlselFJaGJ6RnpPMW53Y2hUNXM2QU50WE9kcE9nSi9RY2NZM0RrMVNuTFNYVUN6dUJpVE5FZEpMMkVmVUpYVlBIcjF2TlRtOW1KdEo0R0NkZGQzeHFkQ1p0a1pMbFdnVTBoY0NwdUVtbjAyM0hEVjdYZmRGYTdpTXI5S283dFgzWU1RVkM3RDMzNjF6SmcrR2p4OHBXdk0vc3BCaUgySk04ejY5aE5XTmFlVVYrdmFNancyRWFseVFUSW5jMWpUcXNwN29QZ2FwdGNTa3FqNjZNdDg4SS9EY0xwcyt3MkpaZmw1RTI2bWY5a2pGd0FWRmtML1pOV0Z6NjdkSjZ2bFdhTHRRQ1pjRG15ZEEvOCtFVmNmL1duOWFPVG84NG8xZjlmV0JINGg5c0xBSVZHVSt1VUZRaHJMeXpBeEFGUHE0dWQyUDdjZE91cFF5TDN5K0hIMFVrbkZrUENZVmJUY0s3ZXV5cFFaSVNoNDRSemhVc3UyTlBmNXZQV0tSdWZwbG5pM2VVdTZKK05NWGRmdjNpWTdQVWZ6Y2Rrek0rVEJKeE4xK0lRSGxGWkdqSXhzUEdBckJ3Y1A1NnN4Zk5WZHZzcWV5QSs0MTJpZjBGbHdWbnQrNzRndmtWeFVMcWVnME5tbWUxNndVU2dLRUcrSGx1SEdLYnlBQmt6NXZudWJ3N2hVMmpMSkhmWHo0bzFpa1J3NzRGZlFVRlpOajY2NkNQcnhiTitkSXFTRXpCdWk0Q0FYbVA0VVJBVGoxa29QbzlvRi96SkxlcHlyN1FMK2VISTEyT2VkS1MyWnFHcitDajJCdWlrRlBwRDR1L21GWG41V0svSUN2ZDlEc3htZWFyWVU3L3pXRDNkbHdFTVRMZ1dqWEluSGIvU3F1Y0JHNHg4bEN4MUFoQTFpaWRKbWhXeGMwcktlVWdMb2s4MG1qYWs4L3RkbWc5K2ZiMjFVNmNLZm93T0xaUkdjQndLUGwvS0FxUENqdFRqZWw0dTh1djlxeS9leUZKSUVGZGU2VFlMWWZ4NVNRSndKNFVjOU4xTDJ4b0tyMGRPWFlsTTR3bDdtQ3lGWk5aNzFkcGZBQkY2TXBXaWwzeUZmQU9tbkJoNkU1ekRzUGl6RDZLNzBOWUN6L1VpcEpNUlVHek1ZOFVxQzRFUm9sTlZrWUhsS1g0ZEJsTGVJQ0c5N085eUQ4TER2QkZRSUdaNUhYTnlxR0xackR5T2ExVFY1YVJTWGliWUZUdHBoeTFIS0ttUWxBT3RTVmpacWhRSDBOdm5maU1MazM5QW53eGJMTzF5ejUzY09QWklrZHB6SkhhQjMyNXRZZkVoYUZLSmExMXpRS3hpMEREZzVybU92QVh6M0R6b2I4b1ZsMFFqSGlHK1lJSnprdWllQVQ0OGI2Z0VqRlpYazA3d0MwTFNOMG8waHNuclNMQ25XMXd4eVVycnJTSGtRQklmSDlxQjlDeEdrUHdqVVUxUVBMYVRkRFp5SUo2eUEyWDhVTzVNUzVLT2FYV0JlY20xVnZ4aGRYa1cvL3p5Sm9pZWkyT1VSbUdzSmQ0NzdBTkNuQWFyT21COWdQS25PWTRPRzYzUGp2NGw1RUkrUGFIbXdFTGNEWXc5RjZ5dHYyaTMrakY2YXJFbHpPTk1ES1U0SnpiaEdDUUdEa0poNXFNcXBjWGFTR3Rvem9FOUZYOXZxWitsUnBqeXhyOVU4cUJUdmZkMlltOGJTd2MzczMycnVxNzBrYS9vNi9sME0yejRkWGttNmQzMHVJTVNXc0o5MkNoTG1kUnVsQVM2VHJscjZHNm03Z1ZyUjVpZ0I3bE42ZmxZbW5HZGEvRDI2MTNYczMzNjFld084ci9DSzB2UjE1VE51ejdqUzY3aW1CMWVnRm9SdEExdi9IQUEvZHpUWks5WDgrY0JQeVpZSjRzMTFlZ2o2SzlUamdTcEZoVlFHUTBFZDMrblRJNW9NWm5ON1p2bGFwTUowYndUNG1yb01lRk1kQ2tJczRBYVlVcm9BMHhScmNNVHV3a0xuYlpWOXFuamVnM2U1V2gxS0tSRTFrajdUUXFNUnlWdWR0WTJyU1E5eFBiU25QeDZUQVNuS1BJa05kN2t1OUFmZFVPZFExRDI0Y0RycVlCNEZnT1EwZmZpRVc1cEVXbDdsQU44MVY2eloxS3JzWG5HL3ZPM3B0QmtpeXkrSFhjNXluRUpkRHRVNkYvSTRWSFpQbjhEbXhKNjdYYndwU0RhWEUrOXI4aTNaVlJHK2N1bU5jNmg0VEQzb1BMTWd5TzFvZnhtUCswN2g3d05ENE5CRC92MllXSzRLUkkreHBNdDByR0NkS1hoS3owRWtCajNkOUg5b1gvMTdZMDNvZDV4bzBaR2JOSTI4WFB4OGRUUlcxbHM4bmZLd21jbUw1aFcxbWgydXpEWnJkVU9HUUhyWVZ6TEYrWTZKYjNad0RPRjVQbUlLM3BlNEtscmcrMDhNeFpFVlptazVVczkvb3FWNFA1NzNWNlkxZEdsbzlmWVNnMEdsTU1pc01oZzNlVzZVdS9semZscUUzSmRzaHEyazRrUzdoWU5ZaEMxZUlEUVB1Uk9XSEk0eDZ6NHRNUVJwYnFUTEhmdTZyeWg3TnBESFFjYVM4RitlU3lmKzFwQjBQTS8wU0ZLRGZSQ25uWE95c2tCQXZGWVcyeWxyV2ljQkFERENqTDlkemZDcHYzeStBWngzTVpnYzM0THNPNS9pOTVRVzQ3VkVOK1ZjSk5menZld25WdU1XNnF5MDRZNUxwMFZIR093aE5JQmViZkZFM2FOU1g0L2pKTUVBNDB3REJVWU9mbWRrTmpJdTRoelVnYjZzMkM1a014OUdUa25meHVGcTZwRDNaR0pOeGZ2VlVuL1JFQy9ablpzdEZLOVJaWjlxZE9rbDBRWUg2ZDYyMlR6S3JJeUllZlpTOC90SlV4a1pyTzdtc3RNbXdwMUpDSjRERFBGeStnRmVGUGhEcG9hSjlZc3M0TEd4bFd0Y04yYWVYemJ4VURNZ240TzRYVjk3QmFUZFpkYUgyN2xjZHZ1Z3dnNnRIaEZWbUJnUVFPajZQLzl5eWJPcjdiTjI1Njd2dEVVbHNKeXVvZEV3YXJyY3Y5YXU4UTYvdUZxa3gwK1czWlk2NVhTZlh3blBnQk5wOG56N3FzYXdNYW1sQXNVQ2NwdDF4TzdFbTUwekhiaHV6c2lRYkVOdmcwSEpaNzF4Q2dFcnZLQjZtNmtRczZ0RFJQZ1c4dk9SdTlMbTdsY0VKQUlEbXJrZzdjMWNHengwUkZMYjVVczVnNmJscEkxbWdzdWEwY0k1RG10Nlh1Q2M0L0hlOXZYU1lZb2doZ3hqckRZYWNYN3N4enVySlFZeldSd1ZQV2JZYTBraTRsQTNkSHFwZ2tXYTFjVU5NN0lKL3N5VGUzMG1Ickt3NndRci9TMVMvd0dpZ3dyN0o1U21INEZNekpJT0w0SUl2VWdhWXprOXlKd0l5amgvMDlkQVovYzFHZFN0b0RTMXFPRlZ6YzJ6b1FqYXp2UE5CMmx4cE8vb2x0M2lUaElaViswTnBIYlIvQ1NGL2VxT1lvWXN0cDY2YjBOcnRHcEYyQUs4MHAzZCsvbi9WNmZpeENXZjhDSFo2UjVQTlhzakgyQjcwSmpXODFsK2RFd25hMWJrN0lLRE5IV0VKd2lmaHp5V3RIZHRRTG1ZMm15ZGgwY3kvTm1RVlpodFJrNkFzWU1kUGdMMnRLeStzNHkrOHp5Qk5KTFFsQmhvcGE4Nk9pUDlrcFdZZmNiTHRKTURYdFcvamtEQ2JYVGJoa1l6Ty94WmlxQU15TEMvaytIY252MjI1SVYzcEIwTmZoeVp1QmVNZUtVb1pwQ3VRcFZnL3JPREowL3FJU1NrTGJwU0p1aVowSFVId3JRWEJPWUx3RnFNOHdUaWVGQUxLNmN1OG5XcnVBZ3hmSWlQdkdBUHF1TnQ2d29JQWdCNHpET1ovTjljWERSeHRHTnpKckx5bStqUmFsUjZPVnUyMTRZOE9wRTdQZzh4L1JVcm5uQ282aGdyM0hOa1p1SHMrcVduMFVZWXc5K3FhVE0xdXMyK3lFTGdYd29ReFdlMDlGV240ZG1UNTJ2eDgxU0lCN3BGbHNaQ2xkNkVHWXlUSytaQzhaOHAzVDVnVmZEQUY2NFhUNjI2MTNGUTVicVIyOGlkZEFMa29TaHd4Y2ZadFkvZzB0b3V2b2x5cEtEQnlqRmREMFFUNG95YzUrdjBzalJPQ3NSbnB0T0NWNk96SzU3bWdqY2VPVFFjV29hSzgyakMrempmVzhZd1puK3dvRU5UVDBDRTlGSDVlTjB6VEk2U2w4TERqeHE0aHlTdDY0SXNyclBHRU5HNlpRcFF2RW1TMkN4M0Q4NGdWYldJSTVpWjZGZE9jOE1xbXI3UnZkbnBGYm11UFFRbTJuRDlhZlN0aS9HQTBIb1ZVVjRudGh5WXgzKzd0OHpNdFp2K0hXSWZtNmlrVlJmOWFObGIzajErS2VCUWRoSEFMLzF4eUIrRHBHRTlkVXFUSmZpVXp1b1Vjd3NMZHFqY1A5ZDVrbVl0UHFveTJ6MlBKNnVsZ29yMXMvVWloVUhGM1ZrVkNCa3MyNGRZRDlXbzRDbXhiVVkyTzB6WDZMODI5TmNRclc1L1hidXhVd0R4dGlxdDROamQ3dEtrbGhmV25NSXdMWlN1bXMyNGlCa2R4NU5yMnh5NjlWQVhmbld5N0NJbzVuN1NNdlNMN0xjdkk4Q09XTFJGY1dYMjIvOFdwSDJ3R0hTT1dKMUUwbUk3NXgrY1dJVlppdUZqYVd2V1BNdW1uZ0wxd0NpN29yUngzWTdaSVZVZHR0UDNzTVFWZzZDVCtUMGtHcFIwZFF6UzY1bFgrbVpCUWlPL2JIckdHL0hBTHJHVlhZeDNoQWpwZkwzV21BUWcxdU52TTJGRVFoOTkwRHBmZE4vc2VzRDhQbVExTXU1Um45RUdyNFJkMlk3SWJXVk12NWxsQW1Sb21KYklOVXo1Sk84TC9ZUG5aSGdiVndGWWRxZ1VwOUNZQXRrakxRV3ZOckFOSmxHd2ZOKyt5aVExeGd3bzYrQ2pYMVpOSkkrc1NtazJGTzdiNjlhbFNkdS9ER0J1M1loSVorSnJUbFpHU2RwYXp3YSsrajdQRXF3NzFsRU03Zkw1ckZGejl5T2l0NEp2bFNnNHlqSWRjY01MNWJWL2pWSDQrTVZBN1lOdFNNUWRHT1dNZVdFOTJPRGRyRnJSMk84RGhlZzMrVXBwNVJTYmNPNWJTeFVpcDNCUllmY0ltM0FyUDl6eThEdThxek43QzVJREd4TlZyR0xnU3I2SXVsWkpiSyszeGtVcFpyM3M2eXFnUGtQQTY5ckgxZzgyM2NFd3U1Q091MnJ6eldseGtrS0RYVVFyZDVyODgyOXIzOStGSnBOSWpGT2s3dGM0NFl1dVZXWTFmWUFIQnFzQllabzhlMFF2c1lFS29PNHRhNmNPT201MVM5U2lTV1JaWXpFWExyUzNQSURFZEw1VENCNXF5c1lNSXZqSzF3eTlIWFYxUXBNclY0SW8zWklSQWNRcktoakE3NldjQjRQSEFaRDhjTlZGWHBWUVpIRWRVN0NEN0ltQXFZYWIvT0VRcVdUYkVna3hjMzYxdTlhVGVTaVlEQlBOc3RiUU91UEJkWVhRbnRxWnlhN1NNcDM2MTA1blZvK01tdzh6RytycWRUMXBFdWE1dFBPc2ZaSjFaYUtHdFNQRUF1eDJWMlNwWjRKdU94WEszbWtiSWVjSE1kUlhuazFaYzNDQ2FsUk5vR1RjelBpbHNmOUNsRDBRbHJGVlJpZHltbkRLVjlGQjBqVXdnZGlCNEcyY24ra0ErVm9NV01nL3pSSENmR1lrYVlMQys5OVRsSnJGdEJiY1kxKytwZWd2VHk4bWNCRXNONC9xVm1jSkNFc3ZWMjNSc3ZaR21iZUNDM1I1TTdvS20yaFg5TTM1Ynk0Vld5Qy9ER2hGSXJQMllYVk9VaE54STk4WmFVVXA4ZEdMbDJYM2JlYnZqL0hMLzB1WHFhYmVGMnRsYm5DSWllUFVaQlhsekluZnlCakhQMUE2OW5WTVNDSE9GeXBEUjdjeXlOcmdZWndVUXJ6MEs0eCtqRmQ3WE5wclBWbDRMaXVJUVU0Uk15d09TMnNISWpZazZBUGRFRE9acjZBVi9MVVdoTTF2ajFKSjF0QitScFNEVGpGMHEyY3FmMkQ0dEEyaGZ4ejRobEtrRFZaeG5jSHFLSml0MXVHM3RYbGEweUtMMXpzTENHS0FQMW92aGdKYW5weTFUMUQyQkZ0ZHpiWWlYenlaT2pEQUxrS2ExTzZtcVJJVWRLSkJZY0lvUDhpWGxOUm53Ni9QMGpYVmNicVhXbWZKRkJsU3hmOXRFS29MQzJhOU55WFdYSWpOU0t0elBGTXNHMXlXMlRLK0owWVo3anVsZDIxSk9PbHFEVktaMjR5M3Y1aWlaS0IzOWJIMlluVVlmdktXZVZzcDZSRElobW1hTkdFdER3SHJtbWo0bjM2dzNUR0hzVmJpRmJFb2JQSktWRm5USTFUWUFMUm94RGkvWVA3dFhXbkNuKzV1TUVoZE9sUXdLNG5pS2JvU2RUSWxyL3NHaytFempyMHlmU3hkbEZrMHhxY0xWb0s1ZU84emZ4dngxeEtlcjd0M2xYeUdqcU5aUVB3Z25KNTkrbDJPSDFnRjgzS0VqTUp4all3Yjlsa2h6RkdrNGUrSHNPWU83UkdwZzhJcTFGYnVBT05xWEZMUEx1SVVnL2hlRzNHVHIyZk02MEVGbGNoR0ROclBqaTRKNWhXRlFzTUFCSDNCVHZYWkFIRlF5NjRxODVoaE81dzQvM2dkZlhDSEh3WnFqMSs5OWx1RUFoU0hDOXVDVUxmUW1aSGcrMDA5aEhRalkwZ0NuRlJnazJWRzdaRDI4Y2VLelI5a0NxaFpURURaaHlOcVdUcHZMWDVmSzRuTlIwQ2NhaE16cDhhWkNIamhQUnFYYU10dnJ0RmNKdjd6S1pOTjlFS1gzcjVERktvNHZxenAxUnBXOWE1TXlrdGtia01HY2ZtdWZJSEJkbDdTZFVUSFk1R25EMi90cWFqRGVXNlk5SHV5YmE3N0xUbkdpdXNnUnc0RUxTTzhhVTdzTy9kSVZjSTdmUmhGcHplcmptcEZhcnRHck9xWi9kTEp4a3hJRFpKbmhpblM0Z3NkMzdsbVpuNDlmR1pGdGQzelA2T1Z6TUE5MnFLeFlSLzRYbUlpMDdwL3hTeWtMRnFpdEtxdGV4YmN3SFpGTVhCUlRZblVIY0JFam50YkxCMngydkRoMXRyVWtuR2xnV0J4cXIrbWtmUVNoVGZDcU5ESWdobldXRlpTTnM4OHZ5WmhzYW9mcTJlalQ0VWVKL0xxL2dIeDdxZjVKYTVwRkU5SmZTYUlPSXA2ZGFhVExFUUF5TE5FVXd3Z0FHUVdlN0JVRS9wd1RkMXo2RWkrazR3b3pFb3pYZDFMRVFnTFFXSDFzNjk3WG1hRUhrM3dTUkxKTzI2TzM5YXBvbGI4M2dYNDZ6NWROZTlMRFBod2lTQXpRRFdBVEZXMGRhZUJCS3pRT3J3T09pWHgvV0h2N1A1NUlmSmtYbGkxUU52Z3E4dTBKRkg3RDA4M3B2TzdvSm52Y3FXdm1ucGQ2cHp5NnRINGF6WlRZQWtxanJmb0RMWmdxb3I2UjNWVzh2OG5MRzlQVFpvRGxCMUFWZW1KMitFV2RFWksyaVdxcjVuMDZJOVdtUFdFZFJKUG9PWEJaOWF6RHl1bXpVaURmOVVCL0VlSlJvekVnQzV6RktvMzBpQ0RmU0NpQmdLME5oNXlVZlI5VHFZdzNnRHh6TWJpNFRsdGZadHdMeUJTNmJVbi93RTJwams2Q2h4OU9PMTJqWlFFeFhRNi9NMnh5UWxHcWwvS0pBeHJhS0YzQWdlRWMycmsrS3B1NHBYV3dFOHBXTFFNZUhxSW8zRVlaWW5xdmpUS2ZhejhzT1R6c3VQQ1B1ZTdHTEo1ZXJxRnlpeUtXMktqem0xUnNTVDBIWHF4akRQZStyUDhyYzQrZWdObHpRVUtqTENNUWVVWXk0ZzJwTzZKaHllUWt2M2J3Y3crd1duQmVYVGZXaG9seDd4TEtxVGg0TDdFbXdTcmFENXZpOVVPeDY1TUdMditaYU1tL1lMTkI3SUlMVXZrNlVESDZhVDNZVXlWZDNnQ3YwbjlDVFgxd1MyNCtZbTZqRlduNlo5RXRtQWN0aERlLzNsYUI0K2tkU3Y5SFdvdlRBUGhVSXVYcFdOeGlJMWZoMHVreXo5b3lkbGU0bzFlN1NXSWl4RkJvdE9jUVY3NEtCTG9qbDE1Y2RxR1hSRGZWQ205VVFWSndia0g5ZXZGdW83bzVHOFJmdmZoWUJaR0VVNzdxaUtQMVpOUXlnSktPQlNrZVBLSjh4bGx5eHNOMVJ1Wkc0WHF5NUx2MXV4dFFqRjJqZWwrTTJiVmF2VWVDMU5xQzhTTHdLN1NvSCtwRTEwMHVVQmxUd3NOUERmWlJvUkV4UTRjRTRnTld1TTdvYllxUGlHRVZQenpOL0xXekdhODczeWdUTzEyb2hiUGRZMHU2cUJaNnZIQWNVbHIzWUV3aVlFNHl4WmlZTFZieFNpSjRDMGdTbXBreG5nanYzYUxaRjIvR0pqclo0dml2SzJrZmxpWkdmaFk2TDdqY1lhZnlIQzh3SC9rNmp0TXBkb0w2SU14TlA1Z0xncUhRdTFQVm9vcE5QVjRDQ3VYdTlTNTVtMXVxbXpUS2VDUkZhTUtaZ1VYQUUwWURmZTdwd2VIamJhM2ZUbENLTU13ek5jNjEwMnI0S2pMU3JPUlBOUmVLcy9TNDEvSGpjV0NlTldoYlVERHVSU1pNRFdZeFdaR2RYTU1TT0ZOaGZMTHlmbyt5YnB2bC85ZXpKazhBdDhBMXRJTkFZTHFwRSs0Z09jQjRPSWVHZVM3Qis5a204YlJMVzJHTUFRazlSaTdVOGc3UGxkWDIzdjVSOW02WE55eXl0ZTdCTjhNcy9BRGZ1am5nR3Mreko5RWxlUXRESHY1dnYrSlVSZUpIZU4ydHBzSnJyVW5DVFVZTGIyR0YvWTlQcDNwK2FVWm1ZV0NNOEhwZFRiT2pVcTVsNGdIdFUxSVh0YkxZaCt2Vk5oYldzdzFjUDVjNUh1M0g3eUxMbC90Uzl4TFZxd1dKdkE5VERxUWZTSnJSU3VzVDFvMCsrbmRVRDFrRHo3blhYaFNPN1pCWURsY3lKOGJJZ2RxQWM3UGQrZWNlUkN6eWFsSkJvOWM1SVZrNXhEd09zeEJKTmtLdkJidTNtdUE3ZU1zTDVpQXNJY2Y2UTFXWHVLMS9KWWdaU2tKMTllc3dveERyYXA1dTliV09Td0dRb0dzeThhRUhwL0t1SnBUSHIrZVJPa2JoQ0hEQ2piS25EY1BGVWdmZEtxc2dEdVQxejFucWFSZTRuTWEwVXhteFFZSFNiUHBNNVJxdmtuQ2FEaW92RS9NdFo2ZGlqS09uYWwra3J2WEhXZVVoQnZMMGxPWHZNMVE3L3U5NXA3RjFCZFBGMUtGVk83OExjbGloQXdtWTRBaW8zN0o0b3BhaWNSYWJwek94NXdmSTROL0RnaW95OUNKTjhzVEphUE1nOGJjM0NaaE8xNDR0RW5YaEZRTlpjL1QydFhMdUY1ZmQ5WXM3dG8rYmxYSm0vTEhManpnTUY5blY4ZVM1WEs0aUlDVGtMWTFXcGpETmVUems1aWlFekFtaGlRc2VOditoTEgxRGhiUG9BY05BQktkV2dFemlCektCam9rWVpxM2Jaa21Edm1yelVtajZ1aVZqVmp6V1NSZmZmMFlQWWtVL1FKWVVJM3dHUFc3VlBBdnBzNzh3UmY3QmF6Vk9pcjVpMnFVcWFhQ0luQlkyVW9kWkpVWFVWcmRBSXhTbk9IZ0xETmxVZzAzNFBoVmlXeFp1MThvZ0ZOREx4d3N3cDlQWitWYWlOVXErLzNvRGVRRS9VaGJSL2NVc3dhb0dmTWVzb2NkcmtqVzYvbmZLTFlCUlNiVjJ4Mmw3dGUrWkszR2dNSGQwRHY5eTE1bzlDQkZuRXJzYmpTNkdRWlJmeFY2Z0ttVnRlTnZ2bmN6Y3Vac2JNbmZLYiswUEhEb1ZkdmZwcUdnN3V3MHRVK0NlYlRqdmNJNWdhOC9aUWVFbG93STVLUHRGTTkxZ1c4MWxHZEVwTmlrRi9FR0VndjBSbUZwNXhNYzFqK1B1MDY2eXZLeTI1N1hDcXp5eW54RUJyRzVpekJxNHl3K041MklZM2tRcmpFSmx0RHFHWlEwQXdzRzJFK1hpNk9IMWp4RXViTUs3cHBGQ2FEL0hGamxmbk01TjIrUGl5Mk1zTGJtU3F4blRScWJjMFdWNDh4US8xMUNXcG4weHBhVTM5bXkxK0txS0lMbHFhNDVGT1lqeGNsRVloalZucGJCb2hhaTFlMmkrUUhnUkJOUzRYQnEwbU0yajFDRlN6cjFRc2RxcFNTdmxXYzgrbXhwcWtaWGRlZ2JsS2o2UHRjdlh4UEFPalFndENML2RpUjdRRmJ2YVY1TUVVZXV2VThIYXNHSStDcDBNV0FCVEZiT3Y4L3ZOaDRZckNFZ0pyRzlna1JGQ096TG10Tm9GWStTcXZPNVpEN1N5ZGJnSmNzclBkSjM5eFNsYWpDeE9nbEs3dkExMGwzL2EwbDZNSXJlc0FQZFRWZEV4SEtTZmI5RWkzSGJ3VkZPT1NsdXNmSklSc3FHd3pkM0RBWEk4a3RyaThiVVFMUDBvWnRVMCtaTFlZS3g1WG0yak9IbFJ2aGZ2TXJiNUxoSUhPSWxNZHdzbUErVnV6VUc3Q3NWY3E5UXpFNEN6Tk40QzJLTktmNXZKWCthYXpsVGFzWHVpMDNyMW1tYXFHRWhYOTJSYkErRHlVaG9MbzRXK2UxUEg3VzI3Zk5OWE9tcGxoT29KZFNRSld3RXM0c3lGTHFBNy83L1RKdHhOK0NlTWZtMHVhM3ZBNnpmYzVNY2szVVNXaGxTakhsTjNyY2t1cEdHZzB0Y1h1dndxZE9yQm45UmFGQUR5TWg1Vkp4TVJEWGxkMk9VNXJ1dHBrVzlmRzhDYTYrc1lOL001cVFIcDhBclNrMWdLc1NnVnJQQi91cXA0UWRxVWxHWmxYaE5uOHI0MTdPdy9rWUw4azJrNkVJVm9sc3YvMnoxSnV3L2ZadHJDMW1Xa05haWVBWEV4cC9qRS9HYjhjWjdNTVhZTWRtYTE4dFc2dmRWYy9qWUhBTmlMblFiNFRpTU1QYTJiSmd5dHlZNUtVb2FvdFlUM0oyLzMzbXg0SDl2RUo1dm1RSW05anZYait0WndtOU5leVZIc21mU2N4Uk03SHdZQkxtTTFucEhtTTNBa3A5UEFnNGJDTDhTVDYxVHl1QVllQVJMS1R6R2pkYzFjZWFqUWE3bGNENTJLUFhCbHMrd25pT1l3Y0ZENGx4SkF4dUFLRjFvR09pN25YZFVUb2hDa2pVd0VZMFZzdldzRWRza01vdEpzUHNIUzRabUdtb3VQaXdxMmxrcHZKcU5iaGhha2hEM0dXMTV3Y2hOZEhsblhYNHkzRzBZYW1MRStENnQ1bzN5UERXQUNvS3JCdmYvVmg1bnJMbENNMXJRSDdYUjB4bm95SjVWaDVweWJLeUNKR09aaHRPRTZKZTcvbjd6bElUaElUcXlnSnk4em1TZHRwSXB1Rm9ZREdaaTdwQUhnSnhReWl6SHRKVWROMSt2a2FYbW1XaUthcHhiMzVDQ2pKL1ExeHJ2Y2Nzem56MGpLa2pUSTVsWWNYVktTQWpEOXRZWml2ZU15c3llKzdXSTAvUmdZZmtaR3pITm5IdkgrRlg5TUtRR0JBdFNrYmQ1Ymw1dUpYUS9oeGRiYjJnNWJNOEF2emgrc3A1Z1ZqYjZkcXU5cDRENmhBckNrU0hVak0yRS9qV0ppMzlkeTl1dU9YbnZrc0FubVJhZlU5cFh4ODd5SERvVFN4eDBqS0U5d0t6RDdxejFkYnR5MlhINEhub1BDNjV6cFUyMXFtanZrVXlIZjRvcW15ZFM0eGs4R1JLT3JqN0dSVExLUCtydG5uZWV5Q1N5SFBxaTlnUkxXb0RXNWhhNEJyOGNUaDYxTFlBaU1Hak1IOFpRRnZPRm5hZjY1WUNaL0JsRXcwQzhIb2M3UXBkNHhCdEZNTjdNTVhYNVZiY3VndEJYOVdRbXIvYmQ3eTd5alRNaTg4YThETENCWExkWEVjdW9DTFNabTdqRElmbGZNaU5FdGpCQnFzTVlhQjcweGxtZmF6eFNFVWwxV3BxcEJvWGN6MHlYL1RTUEFybXBLc3ZKZkNzVjdjRFBtY2ZmcklDN2NVczVKVkw2YmsvR0R1OW9mNFFBU0pqYkdyYlppcFA3MUxaWXRjZUU4RWJCRXB1ckVsbWViYi9BL1ZmZk93cTFxb3ZhTHkrUWtjcTBBZ1lWS1B2QmhlOERsY21BZUgzVXljc2pIeHFicmEwbmJPYm4wL0FBeXBleHlHdWg2YThHRXJ6aHNCY0VhL2Y2L3F6TUlCUXRYZ25MbTZWZGFrYUZQMlEwQmpVRDBxVGxzbS9jc2k2RWswKzFublZtRXlzcWdpbkVxR0pQYmQ4MDZLOHJ4SmVObkd0MXIyUS94Mi9hcUdPcGlNcUxLVU9SQnlqQVVaQWdibEJTNjhsd2lEODZWNjhCd3gyalRKODlwUUF2am9aQ2hhTXk5NmRlbTI1Slg1VVhpUzZPVHVEeWc5QU1mZ3dWR0JTeDk1VEYvMzFPMWZpVFVsU2o0M1FGQXhzeWZEOWEwWlNNRWFrSGtjUnU3SW83ZHIrZzBCK0hlcXd2N3hBQWhRRkhnWlpVQUZMTCtmSkM5N1k0emhkZVdMTkdJZnMxUFhaYisrNERQRFJzdStFb0NxbTlCcFRKeHM2TWpPN1JyZFJORTRtbndQN2pHUThZbDRNRFZ5N05oUTVJWUozVUllNTN5SmlGeFQyc2VVYVl0dXNiM1o1RHBCSlpwV3FseUdEN3hQOUZtbUZGdVJ2TGNGZXR2QlF2RGViSUEvYXo3L2RXb0VHZHY1RlJtYzcxdmJTMjc5WTByNjVpWHAreEM2cVFJVFRONzVTeG9UajU1N0lFNCtGdjRBd1RVUDJabTR3UkRhekt0RXhFcXNVaUx3MlZDeDExamUxR1FRVFRaNjYyd2p6RjV1akJKZm0vcFpaV0VGUktpcVAwQXA0cVpHdmFEY204Z2NHcmUwQW5hd0tEd1lBNGM0VHFZK1FLeFlqbkE4alJCekpJOS9vRXZsalJyZjFWcFRleHZVODV3WVEvVHp3K2VuZmR5eGQ1Yi9qK3lxVitFbnZZVll3RWlBeDViMlFKcHdob1dyWVV5d0tkRkFneHZrWFJGVFZkYm1QQm5GRDhjazdvNHBZaUtQa1d6VklmSGxpUmFXcEN2bVhrb3VaY2JKNTdYVXRWMFR3eWsxSDc3eWRNeVYxR1p6M2JmdGlKaEN1VnFtYTdacCtKYUZKS3A5VlJUaWtJbkVYZURoYm1rRXN0cGFuY3V6M25iUWtxUWhHZk0zWENJcGluVnFmWWNnUDlacE91YVRqbEdUV1EvMDJTazRnMERHcXlhbUxBVm0xdTZRdWFudUV3MWFvaDR4a1I3c0hpQkFMZEZsZ1VhZ3NwUUJZQk9jTnc5WlpwTEt6S2VPMEpaTGhzNUdyMmRvdHNJdTFiODBMeVZRa251czh2ekwyMCtIWXBSaXJLOFFETDNrMUpuYWpyVUw1QzJvNzFhT3dEMHpBZWpiL2I4SDNvdEtVRXBzTzk0YkxjR2xXL3BVeFpxWVZWSE5WbHV6WXFMeTlvSkU2WEg4bWphZEswYldURnFMZjNUS005R1hHUnEyZk5jazQxZTlHWEdMQWdIZGNDOUZQVlgrbVEzaG44RW1nakdyR1NZalNndjRkLytZdVVIcWxoRDZ1bjhiRmhvNTdwSGhTQndPWC9Tck5rM3JyTmJKZ1dDL2pxeDRrVHh3SmRqaldjSzRyZkI4bGk0MkgzYUtmQ0FFQ084ZktSZ2luYjhKMHlrVlg5bE5TakpGTlF4dU5FMCtaSVdlZUFlWGZldXowQ3d5MGxHVWxBVzFQTXdYd2lMdHZIZ1BhRzkvdWUxZURtK05jNzQ5SUlidHlORkNJTVJJdGxRdzlvamtTQlc1cVlGbjN1bVVBSVlwRlhvNDNYd0pLTVpibVBQVDNLR3JpbXRCam9FREp6T1EzcHlsemoxWS9iNS85MTFqNkFzMFEzYzBxbjd2UEhvbEovRlo3Sjc0UjlmcFZxaGMzQ2tHb2lxSGFVRXBXSjRMSkdKVDhSQ09GMHV6ZU5lQm1UYjkrTjQ2YUV6cndpMFE3MXJDWGVmUmNrSTRlM1ljZncwKzd0Tnh0Q1Qva1hUSWZmbG12OU0xVEVpL0wyQ1lqbDVYczNmVXhNQi9nTm9ja1ArMzQ5akMrUnpSby9wSUNDWit1ZFhrTEJNTDNUbVY2bW5OM0tsUGRZQlR2ZzdsMk40QWRUalROaklTTHNJNmtRbXFteFJ6YVVSRUxrZGR1RVJYZlNqQTJNYmlWL3ptYWdaMW55anFtdjdnYW83MEtHdldsTG1QNjhIVm5EVFhOQXFndUlobSt1UTczVUZNdjVGeEloT2w2Q1dzcW5COUoyeDVCRmEzbVIvSEVWbzNrTUJIU1EzK1JHbEZoR052eTQrc0hFK0JacStPbVpya01rOFdHSUQ2bStQUjhyNXo2d2ZPcjBwQllsN0lOS2Y3dUF6bmYxTm8xcGZOaXdwZkZGWmxBTFZTZGdJeHk3QlZ1RC8zWTlOMktnTE5EUHE2VHV3YzNLZEdPd3dMdmsvcmJxdEtpK1NJa1NjNHRJQ2FPcU54cWZhY2xGU3hZR3NyaUZsQ3FzODFhUU55T3NWUko0dTdvbE1OU201bGdxcC9nRHR4b2ZiY01zK3p1RUhPa2lJZjkvNk1OSWlSMEdUc2lQUGZvUVFpZXhOL2R2RG1jbGYxV05RcFdXNlYyUmVGc0hsUWk3Y2xSR2JscUlSWXY3QTBOWDF0Nm5wc1JCY2N3RUtBelJVOWZTV1ZEQyttNENmL20yNDNpNmc1akNiS2M1WENXOVErOVRBTFZwTThRdW9oT0ViME5mMCsvMy9NWS9tL3RMK1ZGNUhBWklmaWhNamdmNjVjS1FBb1VGd0VFQWdnTU5kNm50RTNXM1pCUHoraGVvTUVTQnIvZmE4bkxab0tDOWlzeG5jbDB0a0xzeG9vZ0pKZnB3UFM2VVgyeXdYSE85WE5WWksxbng1UTZWcXcwMmJEUzhzZnFnMVhqVDExaXpiRGd1aWlZWkErOHpzTHZ6OW91VUJBbFM1S3pSRFBkcTNpZ3h3UWxJVWttOWNLWVRQbkI4M0FUdWRXV0gvMmErek9UaWdGSXhBRlZJWlQwUnFOc2hyTDR4cCtaclpVSkFib3ViUm9ubDlkbWF5NXZpYTVKR2s3U200V0M0QzEyL3FzM3pZakdFSEJXSVdrcmw3cTBmV0dPemNpdzF6UG9pSG94a1NGdGhZZVRKdXlTZUIyb1hZWmdSdFVWVkZ3Z3BMeVlzWEhQREtiSCswSm45U2UzdnkyYXdRWE05WUpvcnhzSkQ5MkVYa05qL1Z0dFByck96Q2w5ZHg2NU1NRDhwUDdjeEFSb01EZU9Db1FOVW9iNzNEQWp3WmVmZW8rV2NsNFY0UCtPcXN4VnlJSTQ4TEE4bUV3RUIxRGd0RlVxeFVydnRib0d5dGZndWE0azM1T1R1VFlMdEN0bDBFeUVGOXpBU1FGRG5jc0pmRmhpSkVkcG53bVA4OHB5NjBJdktWd0h2eHNkOW5XeEZDaW5qQTRrbkl3Q3B2K0R5T1pOTlJmZDBYQVN3MG1VMzAwQWI3NUNxMVlWcWFLZXpXMnlzS3NHc0hscHQ4dUlZempIZzY4bElPaGJ5VkM5MXVoaEF4aHFZb2RjdE05UlFaQXR5MjZVT2Z3ZXQ2L1RuRm13WFhDd01ub0xTMzZKMzMxUUZLMmIzR08yZDJNNUY0TkNnNWVWNmY3WVFtMko0ZVlpdTB1R3E1b0VlM1JrYmFmdTNjTHkxN3pxL3VFb1d4aVhtQ3M3dW9LVUY2VjRlaWVLY2hIUlBOakdzd292Q29xdkZFa1hCUmNXTjdQa1NYN1NOVkNBVHdKaHhnTlV1cUhVNXlFUGJZY25SVEs3eWJIOHlSTURZa2p0L1FkZnErWmVTZzJxcnUyblJMMnpGTWNISTFnYTVmYXFpQTZWd08yem9MZUYrTmF4T1J3S05HdXlUWEFKR2lWa1hFUDUzMnZHRUVGdzBJazdJNW5VZVJDeHlwRUlpcW5rTGd2QjdMKytETjJuWS9hSllQdEhRRFdUdkhuK3pRbldEZS9CbUlvMTRmajlZRlRZWE4wdGlLZnFsenczNzVEUFlWSXZjdEtvUS93ZXo4bmE1aWU3ZnNoazRrazVuWXhYWThCT01XZnlDS1RiZk5VVmNCMTd0YXpHcDM5WEkyY2E2aHU3OFQ2dVNiKzZPbENqbFNiQjdyVlNhWExDT3YzZFZEMiswbUYxRmx0WUpQWkh3djZZMnhqajRzbWpmMFVjMm12aDNqS01EV3hwUVdodXIvc1BqdVFmMDN5dkRsZ2QyV1l0bk1TdTAzWk5LVUw1ZnFld2oxaVdEN0RTMFpRbGJkcm9RMkNyM3BSeG5GZ0pYVG1CK3ZNZnMyeHRzY2ZIQmhaSzhsRnZIVzVBd1N1RWFVMzVmV2w0NFBCS3Z5anduc1NWUVBwWWNMRldTRlpRY0JicmVKcXZrWEhsNk1XT042WVRJYXFyUXQ5Vy9ORS9JWjRxZDd3eG1sVk5SRmhiY0V4cUordXEzeEVlR2ZCU25uUjQ1QURmS1htWGlMdW5UNkpFbUYrSnFyS04wR0tvQ2s3QWNtdnJWYWFKMU5BeHRldUp3anZKQ3hQTWxhclBKMVA5NnZqOGhLY0NsekxBK0xJMWNIbkplT2dhQ2RIUkJPMStLU2toWFVabFA4OXhZQk9xRldYakxIL1oyemczSlNmdnRUUkJoTDlKYmZvNGlUS1IyelA4azVVL1Vxd3RIem9YOFdVOGZDejRHWWpVSmZXeVJ0OVhRUXZ6NHpIM0w5S09QYVBOdW00eEE5SGdsRnF5elhBSDhNZEVyUFhac1RwNTliRVNlUXQ4akNweWgzNmxjR0JRR1UxbVZMRVNyN3JzRnZjRDhxaElMMGhNVS9HS3pyRldIWE1rQ1UvS0Nuc0pzTUJ4OXlPQVJ5WHVqZXlkem5ra3dRY01pQ3EwZkdBTGJVNGNnRnRuOVU2MU9HbzNwZlA3MmtManFmV2hscGZEVVI3U0p2ZHM2ZzBKWU5GcXFzL2tkdk5maFBwckJFbHBTajJGYURrLzBJZmRFcXNmNGlVMWo1TWIxcFNtK2lTTkZ4dEhmTXIrVE1ENVdOKzhsb0dFNE83cUNmVnAzMWw2KzBIV1g1YTQ0R004U3ZsR3FoWlNxclhDS21reXFhVDF5L0p0M0pxUzk5NGZkVG5TcW1qWmhQTWdxR3FBNnRhWitDSmQxR0JXR1pzTVgzaDNZeDhOTE94Sjc4WVVuM0hpTGxPd3F4U1NCUXJka2g1Um1vYjBOZG5ncWd0K1lxaDQ4bkpDWWM1anF1UmNDdHFUdElXaEoyV3VnN1VybFREd0FweDhDb0Y4MzFqQ1g4SGFsTmN5Wm1wZlBwVmo2ODFyenAwcFZ6elV2a1Byb3M0aEZTWGhWeU53c2hqMXJMUXpTVHNhVlFUTWxyTE5sYlZZSTdiakZac3FMS2VXNHdQREtoSGpsNTdrcHBvU0VERGlENW9RVDdWMHJEbUtoL3hlOHBwNUxabEs3TVR5NXAwbzNFOVU5TUFrWU1jYmIzclF0OUNOdlFZUDRBTHBCaDdvNm1RUDZVNEsybC9TVWFPdDVQVnJYYnROZkVYUlhOVHpkeGxGVGVVY1djL2FER0lzdDV2R05FZGsvdnJCeFFEV3lER1JQbVVnU3MxbjEwakRwK3pvTmhqa3VqM2dUcWhzcEkrbUsraFRUNXExcTB4K2hla1R2WkRiL01qbXhlTndPTXpBTzh5UkExdjlzOVlmNHRNS3VkTUxlVVVuNXR4WUdLd0syYzZ4Vjh5cWpQZW9mK0dOZ0FOSEcwTkNpVWw2d0hmT0MzNlU0R2xaQk51cmo1TlN6clUxMUtVMDJxS0NkdVkxc3lmaUdaWkphVk9zUXJBTHozQ1FaWE1hNlAvREJCOXVwTkZndFROeDZ0ZTcvQnlSVVN6bXIxYXNoOU8yVWdpUFpIUHB3aHZQR3B0aTNwMks5dUZ5UWVGTVEwRmlWcW9kb3FlWmxqTGFuUkNFLzNIV2RyOW4rMU5ET3FUc042cHBTUFUza2JSL0w2c0VpK21HTnFHMml1SG1wK0V6Y3hya2Y3Rm1tdFQ0bFB6WDc1eU9nYi84OGtuOFRrZW1kSU5RcTB6cHVqakpZS093cVVSWTE4bU1uL2dXVVNhemJQZDI3Rnd2b0d2VjhlK2Y5aW9rSmtQQ0JPOGlBMW5yMitYR2NTVEFOVFo5TlRPeUhXbkpncTUwbjJTc0NEelpYOXJ3QnV0TXFNRi80ZjY4azVTbEtBYUhPZ3Z5cktHaG1xNU4vbUsyYTVhM29LT1IreUI4cXF6V2VvSEdUaHJFdUdiOW16MmlrRXlmelJhbGtNdjFHUDlUWWhZRDZkb0tkeEtudGpkTHpmZVp2WXorN3c1cjJzZ0R6SHZ1dUFMSHhhUWEvS2t0TmpaU1VCUFZ1QmdDV25Sc2QrZG5ZbUt5ajdrdjVIRDlERnNwUGt0WkFNM3JqRE5QWXNQanBPNitMYXFjU1VTUEgrTEMxMk5oWUY4ZFRjU09LVjlKeVdSV3FzWU9UaGpFU1BYSGNiUHRxcEdCUEY3YWZLelMwR1hnd2N5TDdLT0UvRk5jK0xGdStoQUQzLzBEWHpKSCttM2UvMkMvYXgvTW42VzN2UVZlUWJzVkQ0Sk9PQXA3OGlybjNvdGNRV2dvL1J3MUNDNDRIOXY5WEFCc3FxdkUzaDJJYWJOZEVzVU9JVjNYRDZpaWUraGlkQkEydy9xNHJxQkJQbDlwRk9ybzk1ZnVoWVRVUC9nLzRxSWJVSnh6ZWZIWGVDQ0dWRnNsQVg4WlkvYzF3TERnR1JFK2tPWENzeCtpQWd0K0FOVSt0b05VcWpkZ2xCWTM3N0wvdU5zTjhZSVpPMDdUUWVkNFp6WVNlUXhoT0lIY3JRdFV6clZ4Mk5zQndDQUZ4NE1FVmFYci9jYm43MHZkYWFYNEU3MUtjNUpFYlNTUnJLcjA5VUwvUExucW03VE50bXVMWCtQZ2tqaVBtQjdNT3NHSGszcFhoRkVkNzV2NGlPWm9zVkJ4bXZBNGhhbTlESmdHM01XRHk1NE1jUTdJcU1SM3NTVm0xM251dER6YkZlajNJRWNkMUxQV2NEcUM0c2xaVEs5emlORkpHaWhTbUxVakN0aUVNVjBQZUc3WHBlQlAwSmZUTW0rK2IxVjA5Q0ltaENlaVBGK0xBaVVJL1NacmptNjJnb2NWWnpSQzFrWmhIU0V6YWlOTWtPUlFVc3J4R1ZaOUR2OVpVUVZQUlM3UlNacFVYNURYZ2VrYWlpZjNRVDJWOWZLRGpZSEdtY3dTekYzK2VSZnhreTN3RitoT1JIMlQyMkpFaHZkQWFxQkUxMUJNTmlJM1BkV2NMN3J0bVNDNklqenpRUVNkdFlsSVBlei9aRE9BWEErTWFSbzRVZFZVVnlWUXE5VVc0V3JsUXByRytxdVcveTh6d2JEMTFBc0xRT3VaOXFRMzdXT3g2WWR6K3dvUzJPS3pjMU1mS0Q4QW9tQUlmVklPMnBZeHp3ZnBSanRLL3p6bXlVdmg1YktiamhQc3l0ZkFBMDZqSk1QU0kwM2tVSDhDNlBrOGhqM0h5MFE4bHEraVFGaEh6UFl6QTg4eWhtTGN1d3BacjZuSXUraVliVjhwa2c5c0JxL3FEcjZCYUlUYlZnVmYxR2trRUFuN3Y3c0VSNXI0dTFSb1Rhd1Z5SW1uVm1HWDdmV3Qzc1VaVVdlbFlBZ3pDdXRuWmU3SnFiNTBoQjNpZE9FZGlNeU41OTJENmRRSngyTkZESCtkdFNJa0NFTnNiODArMDZvd2QzMGlDS2VCR01CcXN4dFU2a3VycUZXWWsvVUdkeUY5UlF1R1pWZW5uejhFK1ArN2cvcWc2UnJFTUwrdnI0QnBsY0FCdDZkcmVOaW5rQzd6SWExc1JBdjVSRkNVMGIwbU9PczB2bG1hSUhreEI4RlRQV1IrWEVpeDVVTVRvd1BsSW81ellIL0hIQmNwL0lKWXk0UTVaU1FTcmEweWJzeDRGcWZvRTdWdHhCc3VLY0VmZG9ZeHhvcXlQUFhCMHhhemhQb0s1MmFIV0NQcDMvWkVBN2hlZEJCNTZPb21jakg3c0dua205YmJHZWFnRi9nUElUVEJlYjhNZlQwdC9qNUZ0Y0xSZC95NmlHNXkwWVFPelpteFdQRUFLZ2ZMN1BjZmUzV3hjOCs2TjBvMzIzK3dyMlAxZjNHMTVaWE1hMzhJa2tBU2JCWndpQXlHSUtnZmEwdmtiNjBNNjJlclBBbGlnRjRyUmNXZWtNWno2TU1wQy9rdGc2Kzk1eTkxcmMwbk1wTlFPS2x0aVhsS2tnMmNFazN2L0N0ZVhmM3hscDRyMStYSEowQkVLRmdRZFErRUxkVlg1MnhjVkFhd21UejdVSGZaQUI0ZHh1OExxcE1XVDQvOSsvdVlnQTJONS8xbGNxd2wveU1zRXQzY0kwMis0V0VwUDdGdmFyUGhReUY3elBUTm9CeEdScWQ2QVQwSDhqV1k2ZWxxU3F5T2JWVEVpYkN3WndMVHQvWlZjYzdMMGMxL1dqTjZtSkJTZDJUZG1nQndtS0NkVTNYL3lYVGpCakovUmthV1BxOTlTRmlsWjc2T0RodzY1bkp6ck5jMEs0ak5sblFFQXE0UlhvWURldkJnNDE2SzhHVmtObGZUTzFpcHd4dmV0VHl1dmd5TkNKRC9Tam9Ubk94b0NPbDRYZ1RkWktMYmw5MUptYUJhUElMQUQ5REFVMFY1OHZQeEJPSHZ6bmdudFBsN0hubVYyYjdOYjVpNDJLY2hHSzlHVEJsYXNxbWRFMHVkeUlTVUF6Ny92ZktOR3oyRk50a2lMaG5VMXN1Vm43emRFZW0yVklFN0xMSnIzUHRJbWw4OFBaY2E1T3dRYkhKbHB3ZkxtRERCUHRmNzdkUHdIRGxwYjJ5SzErR1lRbkVXbk1XbmxvNUJTOVpVbGN5UGxtMndCaC8wdGlLMjVlNVVoMkl2ZDhvRTlFNWYydWFWbThHVWRxdG1FSGpKbWZqbzFzd1BPWFA4WkdkaDNLYTZyaG9TdVZUSjlvajd6L1FaMG81RUQvZmJNUHBFWnZnVGdUWXRkQ2NtT3dtN2dTTWh4RjJsUXlNNTFoRGNNa21FMWROMmN4ZW5nOHdvS2xOWUVuZG5nL1h0WW5xN01tR1FNYzFPby9qWDBlcDg1eFNSbkVOcUpzRm5LMTlLZ3huRVZwWDZ1Qjd6MTZ4VUxqa3RkcWNFZ0xBbVhwVCt1RDFKWVlyN2dxNm1LMDdocndldjM0VUFGYTJXODJZejZOd3l4bEE4MFFIbjRoZ3BUd0tQWDZ2N3BVSjBDNjV1dmJldEhlTmhNbXlqeldPcmRpWHFLL0dXM3lkQzI5SzVRU2J5ZmFZRVNXNm5lZ0N1Sld5TS9KZ0huNkprek5LWjY0Ung2bFFpSWZickRyaVRJcUovME1INUhQck9pOFpDbmptNkp1KytVOEZZRlp3dFNQVmZMSkJmQS9mRzFwK1FoMmxGeVp0cENQVGJnYzl1OXRaSC9kNVlvU05ZZjUxRTBUSzVjMjVmakVnNTFIWDlGT0Q0a0xpSmVGb3VBdGprU0F6SjZsMU45cXo0OHZPb09JaDhyT3pHc3JSWlh4RWlmektqcS91ZFEzQUtGbTZkemxOanVjVkcwbkZGYlBBWXhOb3p2VWJKYmxEYUdxRmVrU1FTbmVEcHhWaHZxYjhSRWxXMDJNQkF4RFg2V3N2UWZHVUI3NUZyZFJ4cVZjZDFZOU14c0szbWU3WDVpcHlBRG9MVkNySm0yTW5PTkovcGdOMnNEb1F1U1gvNkpRSGdBc0FDZ0V4WlViQUZEbUF6TVZwdVpRcHRUNW5ZZFMrbG8wRnlUb2pubkg1aFhHOG9za0tFMkYvTnl0Z0ljRkJNSEhBMzNoUWRWTXZhNmpMODVtbW82UzBrQktEUWF1WlVHeU5RUklSQ1dlSmV0dXdaQ3htWXpMd3NMUVdHcmMzeTFNZVVpMjJyT0VZNHpxK0xmWCtrYURac0Fvd2ZvUW5nMzU1WVVpSGJiUmJaWWk1amFUS3ZJN2VibG9uVnJlVURMOUdaMUgxQ1pkVHlrL1ZSVCtoZjZ5eTZUZ1RUMmpkWWZBbUdLN3hML044MkltaW4wNmkvdUJJWHJYVGtST2psakxGUmRQRHJHYnIxbnBKTjBtYk50MEpiSFk5RmIzek1HUVF6d29MazVESS9LR29oSWxQNWZJMmZzWVhZUTFldkJpZHpJL3hNVFZQVmZIWTRkU0hQNDQzVWxIUjRhMGVPWFMvYU1MRlhnWjJxNjU1L3pGdG9qQTNyL1hLUWxoOS83SWlscEE0QWVYS1lDRzhBYlMzekloNmZYalp2bGQ3RzFEVXFNcXZjMzROZnlCdkFNdTZ1ckIvSEY3cDNwTHY3bkFkdFhsQU5yb2VxanN0Ukt1dFg5WGJ0UHVzemhjcUp3VHFSUGphcS9sUkJpOE5NdFd4TFJ2VDVwWEpWQkg0WkpIYmVLTUphbXZWK0ZpOEVkN05KTFlndjd5OWpHOGY4Yk5kdE5yOGRFNnR1QXkzZ0tZallaMEhQSjQ3UnEzbHZWdU00Y2NBNUpNYTVFejRsR3ZhekxVZk1JNkt5RS8zTmRHakRIYi94LzZ4a3h0TjZwSzVPWHVQOXBDbHhheXU0Y2ZNTWM5R2NwMmNYUUg2eVViVkkzRStNdkdLcmJZUFNJcmV2QlM4ZEI3THVSRlFqVkxYS1h4RDlGZ3FITUx1eDhDenNXenZuL1NqcUVnenBJZDkxUVVETEdSeWhEY1BQT3ZLOXVSZGVUM1V6VGRPc2ZTWWZGYkR2QUhBVkxSSXhQeWVHdUNkUEtETWxHcWJQN2FPQVBSUlFtRTFycFIvZWMrT0t0aUYyVmpYVmVKV0ZiY0syOGZhNS9VSVE2alpSNTlEZ2ZoY1R4YlBXSlBJMUFhSkNmSTBwaVZaVFlXcmRlVi95RWJKR3p0U2dyU3d6cld5NkdaWG52WEl3S2tpMzJSRmMydmRjQ254Z1U2YTRPelJIU0RBNEZrS3hvUVNGNEwvZUJpYTlLMlUzQkhPMmkrTktDTmY1WE81QVR5NEdkYUdzZTFPQ0YwbXU1YTE2bHJCYm03NXRubDBmOGRNbTQ1ZmtMS3IwTjVBTnJ4b3NSUVZQMHpUWHlkSktPWUo0dEY1NlMxc3ZZSkE3UzlkbHhoNWpxV0o4ZVFPVXFQd1F4bkdOenFHdHNOR0Yxa3ZveTFCK1d5RmxpNVJQR3haeE1NSEs0RmNKRlQ5UFF4Q24rK2dEcDUySmFNdkdhZGt6dkUwR05lcHdFNW8wb0hNVGtWZE9QdnA4NDVTdTNGdk5KQXBlMFdqZks0V0pONzlTTjM4QUg5Q0M0SzhXbFlSQTB6Y25MdW1XQmRjY2c3UjZudWlIYTM3T09nbDZ0alFkaUVaQ1R4NWJUYkd0TkkrSGZQVVRQQldZWUpzb3lZc0Zxczc4OHZYV3ZHa210dEtQZ2FKQmppdUZBcnUwLzRqc3ZYRlh6RG51ZkRoQmsxS05OS1ZQaWc2UHRFMTMvYnZxZmR6anEzRDdiNnlON1llMGFwK2pOQ3pTY00waFVjMlRFbEZqWnowS3hNQS84L3JmeHlVeUV6bUpoVHVRMlRpazkydXR1ZTZNcnVVb0t0Yi8rS2w5NHdsQ1hPd1d0UWVJYVpFSGVnQ0hNMk9qWHFrQXFCeEVUcFVzbk1zZGdWMVJaalZKd0huSkN2U2tHemVVWklQd0dhbU96Ky8wNDdOOUEzTkpRK1kwUGxLakdGK3RKYXlSNisraGp1am9oaTlsTDl3bndrS1QzMWNoWUtZNmgvaDJSQnVjSFFBNXVqTzd0YnArQlVuMm5HQXJsZHB6Uk5xMjBOM0JmV2ZJMHkxaXJodGZ1eWtMY2laMFBMdmhsRHU1WFdyd3FubXc1MGJaY2tpSDJ3Y2pUbVVERmQxLzNVMDJrS244aWZPTzNxRXcwbllZMC9VYnZqVU9KRk5ROWttMjF4R2JpWUNqL2YrZGhLMGFDVDlkOU5vSTlaUWlPR1JlWDFzWnJMWWo5ckhGTE5HY29FUHQ1K0htQlY2dy8vTWhYcHFoUmZmUDBSbEYxdWlrNEdCWisvcEovZ2ZTcHg0b1RDR2VDQUtkVktaZDF3TkxYaEhMd3k0eE5MMUNyS2pLNFBPTWdQVUozSi9ucm5SNWE1bVRsWkdqYlh6S042VVF2ek1yV0wzYWRVcXZoVytpVC94WE9vNU12RU1BeUhBdk1EVDJ1eUg4a0FWS3paazFsV0MvRkpSdDlKekU1Y2RjcWlkcjNPbVYrV0o5S0s3Sjk1L2hzT3Z3Z2NRWUY0YzZ1OFNpMzFzLzIwZXRlZUJkaEpCRnNaNUxLb0dmOUVHWUp0TVkyNUpiZTlaa1UxOVJkaVlJMVV4Q05hcHlFMzFRa1NPZ3hFOEdmbmZSQ1liWXd6NE5HdlVzamFRN3Bqdml2cFFIT2ZpazhaK3NOQ3VKMDR5eFA5bXFkdWVhektKREpuOWJFdUljenRsYlNTSjlOQ09KWS9FUFEzNWcvaW9La1Fsd3AzMlg2U2ZTeE53SUJJd0RsKzVOWW4vRlA1WjREN1JKK21vNmJtaUVEZFRldUJOdUdXZDN4R1kyaHEycnpWVmptM1A2NGRVYWJ1WDhHSXkrcFJnSnUrbnlBdDdjWG16cjlQb08wZzR5RnpuRzJ4Nkd4NGhrZXltaGZrQWFyRTdYWEkrRTR0UnMva2EwbXRKNFdab3I1Rk1GSGFZZVgxbGFNbzJzTEhheGlTM3RkanorTkJiU0dnOE9OTXJlcVNVRDNzU2Z5RmowOVBHNlhnTU02S29Hd1lyQy9WNlhKK0tnbUlNdk15RWpyY1dZeEhuSlYvUGJpVDNrRTZhbFpTUk1XcnZVNFhIeHMzYVUwUFJ4KzFIVkZrQXgzWDNDU2ZUWXNQUU1wbHJZclBEcVRTMlRYeCtpc1RITjNrK0VySm9BYUhnMm5UQ0RqdnkrRTJEanpkMERBVktOMzA1Ylc5ODRDS2pZcmRiYmlwK1NPelREM2lHdUlHSXVlTVZRM3pVS05LbmhxTkpjSUZkMzViVVMwc201b2dXWG1NL2J4emxmVEc3dzFwN2dneUtqa3RveUpaRUFZcTV5UWtsc1h3WExmZkFKbTVwTkR2emZhaVZRYldrTC9IaitPSzVwUzRJQ3dxNnMxV2NLSEc4cENDMVNyWm41SEIvQWxUTWlMTTVxZm1uV0c5c0FiY0VsREt0bWxKU3d5RFpENEV3a0wzdzhWdzVCWi95TCtxUzI5WnluU3FlV2JJa1U4bTIwd20yWVg0R0lPOGtMYXM3UW9UWUZ4a0p2U1d1OUd2U21uUUE2dmhLVW9IbHpWOE5USkhXME9SL2h2NXV2cEovZzZpcU5iYVZ5YnZiRVhxNEtOT28vK1pVYVc0TWI5Z1lhdE8rYWlMRVhaSUxWTFUrQWx0V0pjcStwVFVYWmxRY0JXRnZzN1VocmpRd21ZZ24xaFlIK3Y1Q3d0TmNkVWpnME52NlBEb3g0dDZCT1BSUm5vdlhtNGNFNm1XUndBNEpxZFdNaUtNTm82MW8xYVlmT2Q2Q2JvSEFRTmhUb3ZNN1h3VHFPZ3VWUUkzK3JQZStwWXlwWkE4Y3UrcEpkVHl1YWVLeXh6emZOT0MyQzF0a0pBU1ZJTVJhOHVBekE3a0FFbGNpbHYvd2QzSEcvSUVsa3ZwUE1XeGdQTXZ6dmxZb09HWGx1UHVaOTVJbVpkR3ZTSE04MUNVQ1lSdnlmTjByckhoWmtmbmZRV3Y0ZnEydllLT3dkWDIvblZWMVhXWGhYUDk0eXNEeE1yVXpwSkxRTE9VT0NxN3pvTE1kQXdvVE1ybFVKUWVlZXZqdG1PeUU5V0xBaTBpZGgzZWlLeU84V0c1Q2NlcmFSbnRya1ZHL2dkSFNUTzFCRUVVYThVVjRLeERCSTBVamNUbnRiVWFrK1p5cTVuZ3FmV2VjSXcrOGE2bWEyNTlPRDNhUDM0L1UzbCtNaWFrWW1oYjllREY4NGdQYVhOY1d5MDlyUUdPaHlvcEtDUEJxWFBCYlVOcU9ISlNZUWRGaW9QL3hGcWFzUjJ0Vk9hMk0rQ1Bwd3Rnalk5SnpvTVBpY0orT3JnWTVYb0hGU1hoajRDYTg3WEtkWTA5VXE5SXk4My9GYmVnYy81dWk3NzIyZktFa01jdFhLMzRhWHVvck53YU54NEh2d1JQZXdYQkI3bU1EUXA5SjIyS2d5YlNudUtaQjFISFIyRVRTbTVXV2F3WUhLcHB4bTkvQzloNmlOT0lMVFVQTllGR3g3cm16dllRL3FWc3VsZnFCN0d3TmVwWlpqUHNlU1h0WmdSZ2dyb3ZHMHpaTUwybW9WOVA2UUZQNFlzT0J4ZzVkY2ZrbTNlMENVWDBIZGJkdXJTbUdsTHd0UEpYVERSTkkxSnArY0pHQjVmNXlodVhrN0lzc1JmaEsyc0tKR25SM0hlUUpYZDVjUUt6QmsrbjFHUlhSR2prZjJOajU3clFqK2ZoT2RNZlE0MEVyMWZQNUVMVzFtQzRmTTRpMk11NnRLWHRPSHNtMDhGSUFMU29KWnN6aDVOL0dyMzZJSkVXWGZtam1WSXpZR1JWd2pjbjRxWFFvZDZudUIxZjE5Um85cnJrUUd0SUFYU0ozZUp1SDlqYlU4eEFrNFRKRitsZVV2SDYvSkk2WFU4NUNSZWs1WVRkeTBwME5TWUxVWFErV0RVdVRwYjl0eHhtdUFNVHN6cjVuTnRPQXc3bGNjTlZ6L0ZVOC9DZkxWcTdHVitaQjhOOXUwTzZmZ293cTFRRnVkWWVhQnRhRFN2S0lhOUlwaUpyNC82VTVTSmRYWlVGbDlGQW13MzgzNjZmbXZEOFh2bWV5bUN0MnJWTVFvUDBSWTVjWFJ0dWdLbkJtWjE3bVlNUkxQRC9neDRDQzBNRzlmTzhYVk02NFlpTzkxVStPcThSRUpHYS9XTFdUa0RPTUVrTmJMT2l5UG11bytMdE5wU2lYRFVpb093NHI2ZVcyK0R6N0xSU1REcEZEaG5EQU8rUm1sU0ljaUQ2MjY4eFlVQkdmcXJPU0lyNEFPbHJIRnhoTE5yMTQvWVVrM25UQVBQVnFYWTdvU2R6QmxKdGVkdnVoSmw1c1o0Sm1DYldnUDZQNS8yL2M5NzBDU2czQTBPQzZ2OWhEUzJNQ2xzWmg2eVRmdkozNnJuamxjQXJzZDUvMm8wTlRQbVVSZ2RtWDVuOFJLRDliLzBVL1RBa3NkSUsrZStORlN4T0NEZ1BTN2t1aWl5YlZvZ2w1bTIrM1JRQWZtZDRRWlBYbW1VSnhpNEl0OU1tMGRkTXBHaWhOUm5FcXNjbDNoaFVEbHU1MVB3N0hvVVhhZCtScnNNUlBta2FEREpQbjFpODNYYXludkt0WERiQm5aR2diOFF2YWhFQkxDdm5wZStqTHFCK1RleGVWQU85b0cwdnlSN3BETEg3THdGLzJjT2c5WU83b1h1NDlzVzNPdVhwSHRtSG1BQ3ROOFNKU2JHb3dXblRjK2xqUkFrc2pMMUZQUldubDZ2MHF6L1oyc1oxcXg5LzJMc3dYaFNXRlVuTHczckVUeWVVZUtKcktsdkt0TzZyMUo4M1hpdEVHbk9rQm9rcHVFN0orME1nRkdNekxZZHFrdXZVbjY1eC85bHVrT3ZzL0U3cEtlOXZmZTJQVitkZ2tpRVhrZUY2RVhUakFQOFBqZUVNc3dhY3F4cmpBcjdKVlRhQWtndXRRYlIzSjd0cyt5YVhjVlA4b1RYWEJCamVTM0pvU3ZGMlhweTdtRU0vUXpscGtBQ3dyYlBEYjVaaXhxTGI3NDQ2VHprTHV5NndKbUdIeUYrL3JtaktiditkOVVDL3luSzV0NnFiYW9VdWp4Z0FCNmtRNGVCeVpkRFZHNUZmSmtRdHhlNTQ2SWFDTENTcEZaUERYVUJGMDNseVBTOEcyME03R08vOUdkeFo1OGY3K0Z2c1psYk9oNkhzeFBHL1I5dUFmNWxWRzR0aUN3aHRxWUlSZkJHbjJnZWtLNFRLTjk3NUxuNVdiZjhZT1Y2TTJBQ2lMTkZINzFoQytVaXIyNzkvMVA2M0NNTnIzYjY1YmxJWmVkamUwUmp1WDBUVzRUKzhtQUhZSWdCbzNOVXYvTS82NUVjY3JXdXpMVjlZc2NjdVFSekNaRUJZV2VHQ2dkQjBOd2UwbkRROVp2dGRSRjNxSHlKZ09SbTJlYW5lbm9ZK2h3WlpZZ3hpUmpFbkZMbm9QdEg5VmxjeTIvMDhoc0U3aVpuOWY3MkM5Z0pCQ3Jqdy95WTZnRDNsM2J5SXJXWTZmRStTSjQxekdYcHpZMGVBeE5nRlFFL3QrWjVnaU5BMStxVHVmc2pLa2JSTFkvb2pqWmxPUEtIN0RPNDQvVTJYdml3Y3JLMTlqVklHaklHZEtEdnVEZWM3eDlWU2RMTW41R0RMZURNdmZIQXFRTVg5NXRyd1doeis0ZlNmMkIySm51SXdJK295dVcwNVZZK1RFWjVSWlM5d3FaOWF4YlpXMXNjcHVzSHpuanllcngrRHFBMCtrSnZUWkF3RktuRmo1ODVMc1pSY05wV1FzRHlZb0JvTEVGMkVCNXB4Vlg1YWI1bDljQzF2RGVLWTlTZmpxdUMzUHFiTklCeEFqYzFGTlJ5Q1JWQWhTalJLWmkxbHk0UzJ4L0Zpa2F6M1QwZlBPbUdzalRUVGxkVWEwdURkemVyS3dtOERJNFY1WTdTWnBIRk1GOGpjdUdMaDNLOXMvdFZEcmJrRTB6dDVqSCt3MG9MMUk1ZUJjMXhkYzlhUFB0SHhWUUM3dU1jLzFLU3N3ZEZFU2YxS3VCYmJRZ2REU0dPaEhKMTQ4RFdTQWlZS3hJZEp3d29odlZPdVE5OGpoRnpPb0MyNlkrRlFpejU5MzhKN2hNa3JYWk5zcG84V2R5d3FEY01ab3pXc29uYzFVZFhxNzdMbnFkMHBSMTlYOVRlcnFGTzRSdCtoZWllUVA5a05nRVhDSmVoUmdvRXVXL1lHUHJtb3pkMjJtdDExTW0rM1AyekI0WkZXWEd3TStna2d3aDBIMHJKTFQzaWhsc0hTUjNsSU9PeHdCWGN1dzdDWUtkVFVjUTE3cXdoVExqbUNpdWlENXRqdGZLZ0MveDF0cXFhc0RhWXNBc2gySHNnSUlOajJ6bG9uSG8zQ3FzYlFMdC9ENitxL2RpRFVyeTZHRnRCQTVFV01ya0lwU0M3dW9OZGg3eWl6ZlhiMkFBV29DRnlCU2dZQjlsYjdwcWRyL2E0eitkWlY5d28wM3pRZHdiVm1sWWZwb2lHRlhWT2R2NmNDY01lWU1PdmVSVkphZjErWDhlUzRESkJ4TVMveHZaci9kV0M2em4vRTRNMFVEKzNjSk9qazVlT3FRdnZ0c1dmZ0JIM3B2Zk5pYnhRRDNQMlFqQ1M2WVNhQXhpVFowaVlnWlZhTElkemsxZjRXNnNPZTdwZzJqemNKak9VSEJwS2FvZTgzTUc5OTFwWkR1WFhUYjlLekhZOFhJUzZseVFwZk10NDJHNi9RM1o5TmI1T0drWWJUWHN0Skl6emlQT0RsSjZuejArZWtZbnd6a3E4d2FhTUpCdUJTZGNLQkZqYnF1R2RCRzdxRXBXRk42eEd3VXJkRDQzWHc3WlZxQ01yQ1ovM2xCV0h3aUNqUlRGQnJhMXJxNUVJdnVSaFN1Mkcvdk5QaVo1ZUMyUDdJazhSczVRbmNGaVNOQzFaNHpYOXVnM2lsVVhVSVMzcloyejNMM1RFVXUxdCtXdkJMY2pvZ0NES1lPUTFJWjluZnh4S2dzbzFNQ2RoaTBUaGpmQkRJcWNqR2cvVkQ1SW8rTllmeVFmRFZPbnNabkw1cDB4TGg1Rm0yUnA1VWhEOG9haW5yc1BuQzRucmgvN3gxWDRsTWRyTDRpK3dYeE5KcXdLWmh1MzA1aVRlVEYwTGV4bzVBVnJQcjJhRDBoK25SbDFkN3p0V0p4SFRIdHFEdkFNRDdiMVZHa3hxZk1QSmZmdlNXeU42eS9SZWxwUDZ5UmthWCtzOEplQksza0tQNHQzejExb0pjMmhwZGxhZ1NqQis0MDJ5cTMwUEh0WDEyOHZBRDJXKzhTdlUzZk9aU1BVcVZlenlVWGlKT3dQUW1WcHBUOUc4STZkSUZFYWRxS0RFcHNwVWR5TEE0UW5jcmdsRnlBTWtQZnFQSEdhMUdKQ1plZkw2UnlDZm5SR0tiZWk4ei9INmxkQVRzOHBidSs5MVpadW9mVXgwS3pMaVVzNE1CVy9aSFcyaGM2OFRnUGxVQTFFTU9GZk9ieXIwaXc4ZGpmcElVN3JNKzN5K3puUmZlTnNmUEdJdW5pcXFsWVJqQ1NWRUtUT2RScG5nMHp0dUFNa1pMMTlOOWVvVXU5WGd1eE9pYjBLMWMxOFBNMTg5ZUZTOEVXU2EzQlpBeXE4Z0k4ZEhEdnFJNld5ZUNaaVB4TnVmUWhoYUdHQUhublVIU1VCdld5dHRTWlFmN283ODJNZEI3VXNmMFYzM2p4WlAxMU1qeFBSc0R2bVpJRVlPaWhpbGkza1FjK2l1aEZpUWdsTjFlN0JCdnJRRnlUby85RlVnZGhuT0VoV1NOVnhpN3NiTi8yWTVKd2VtTjh5b1BDYXNTVmJQbEtuc3V2Uk1YQUhRbGMxdndJcVFhNGhLWmx1Z2EyUVBXc0pOdkJMcjU2TWVWTUQ5MkIrWmQ5SUsyUjRJMG1waUU1Y2hrSGdYbzNLWHRZeU55T0I5L3pRWTBaMUExY1d3UXlLS1lha3VhUThCVkNLeFRPQlRyU1AzakwrVXF0V0lpZ2xRU0JjRWVUZERsSWtJQ2NQOU02NFV2SGRDVjNEYjFmMEZVNDBDWVBhcXFJVThjQ29mb3gyKzAvekZSM0N0QmFuVS9xeGtYc3ZSV1JvMHF6YjgyY0ZCbVRQS3pCdk91b3c2Mm9RS3VSV2kraUNqUnNOT3ZNRjJIL3FIK0twekphNEFmcEpMbGVEdmpMY0ZvNkRuaWZZaGhjQS9PUFFhbmQyN3NkUTR4cFdOcHpnRlFCUWllejJKRWVENVpBRnI1TzJ5Zk9PNDNmWUlubmp2Q0lBdndOSDFmVUEzNWFWVzZBcDdUWGNBRnJUdDNrRHpJcGhrSTB1YjJDbUFzbnNJUVRSck1PVnBkZ21BdGsrcHpseVFtUE1XTU1PQSttcDNoem1sVWF4Q0QvYS9yV0tYMllkM2RGWTJLc1VmOTE1ZlFNYi9SM05lczJUMy9kN2ZnZjlaZkoxVEZpMTM5dWFKaXRCNVZGMkljUDNQUktXdWFCY2JHYUl4OEV1aXJIVjY2MDJjRTFYUkNvb3ptUTZzUlk2aU1vOFFOK2xqR1lxOHcvdGlLdWxhT2NEYTBZaktab1puOEFCNHJ6TEpWSDgzSVVJNWZSMEc5dGZabXJIY1UzcWZLbFY3VVBaQ3NGV0J2YS9jc1VFdFlzYlkxd3ZnclNEVFZScU9ERFhCTXRzVG41eUtNRW9JQ05VcnBxb2hDWm5DeEpKdU9NdnVVSnp3NHlueWR1TXVCYWlDNnJhOE9jUjZ3VzkzNlp4WnpscVlZaXNLeEU2Nzc3a2dyT00vSndtcXgrd2FWU1JvYmZwc0QxTzg0Y2N5L0M0ZlkxcUt1cVFaMk1nVCtBK0pRUVZlS0I1UnNsQ09LKzlRdGVNZVBYM2FnS1FzckhuU2tUbmt1VnJHQUhMRUtVZ1dxa1Nrb3FCMFh3SzlMMC82ZHJ0YlhWMnE4WUxWVGNNQWlWQWxyUkhxM0VnaUREK0RBWmZVaEIxNHZDZ09XbGNDdXlUbWpYTHdsc3FXbDJiS21PcVFpbUhqbjhQVE9uQVBIZkd4TnpqMnpIZ0U3WDg2QmpxTjBJVkxKdnJ6aUhVdTg0YlZoTzl2eGRuNzU5V2RsOFBHd2dnSEdVc1BIYlE5c2RwR1lmYyt4alhDc2R5cXBxM1ZwQ1kyeE16MjNtbWZXNFdKcTQ1ZG9Bd2pzYllLcEdxRC9lRzV6eWh1S2RVV2RDZ0tSaHU4MjljeGZlcFVyakpuS21qcmlBYXZDQ0FkS0pNMlZGUW9nYjdRaDI1eUlBNHhWMTllNkhwcDV4WC9XT1FsY0hZRXcxM1RqWnRsTk45T01GMUJONlNCc2I4cFFLbzdrOVcyRE8rblJpZGlxTWY4UTVHdEFsNFh1bHgrMFkyU3ZnamtiOXBsM05qamJmc0ZLNmx0VFpwZDFHdExJR2FRQ0Qza3BJcmk1Y3VtckpiVXV5a1NFdUFPQVhrUXFyamEvZ0k0QVp5djhTajcxUHhHeThMNnJtTEd4UTZaalRpaFFjTnVRSlBNUU9RdEdOMXZHRkorY0pHeC96cXRJenRrMVNraDRBUERuMitZZnc4RjdheG9sUjFBcXRnVjJkMHJFYkgrcXk1Q09Cb1VCZDEzcW11emowNkRUZDZJZWg3Mk1aejB0SnlNcFlrS204RnZJVGtjNnJoUWtId2tjRFpXZzFsN3RFVTB5cStyMTZBZk84Wkd2eUhxa1A1UE85Uk4wb0JuVmhEaXkvdHFPZjhaR2ozZmNZRm9ReHJTTE95TUNlWHVoeko4cTNxQndGV3MxdXlyK0hQY3lTZ0xNNldwTkxXUm9abTdQVXRpcng3eEx2bVRVNlZ6Yk5mRE9aS0w0SXVyRTB0c0ZKTThxSTFCb2pPTXc0SWxCRDFMZ0lDQWdJQ0FnSUR6L0QzQTc3ZnNZZSszdFp2dCt4K3ZzKzQ2L2g5Tnp2Mi9ieWZzKzREL2NQcTZmMi9TWi90K3JqdnQ5blBuK0h2VC93ZmJhYjl2Y2QvRDdLZjkvenM3OXYwMC8zaDlwNWZaOXd0djJmVTAvd2ZUUVgyL1dVL3Q5bVRoL2I3WDM3ZnJxZjh6c1A5dCt0bC9aOW5sKzM2TkQvYjlpVit6N0Z6ZnErbGcvYjlEMSszNmNQOHIxekR4d1MveXdyVzJpUktHOWt4K3N5MXFldnhUOVV3R2lZc0FuWlgxSzROQmQyU3VWSWNDclBWelY0VllJbEhBSUowYWdnckozNTUrbTB4UFZsRDZFaUpDVVhDcFUzSWZrek85bVhPc2hGUXhrcGxHRnNQRCtwZCt5ZUhCbWRtNWpZRlMzTXVkdE5CQmx4c1VNZzhHclRBRTYyaElHS3UzY25UYVZCTC9lOG12WURvd0IxQU9tS0hxZTc1ZGxHN3VZU2psWUF0eVpBR3YxRWNLNXByaU1iNG0rQysrY3lBQitDMjZpVHJqVjZCZk5CTTlzY2hOdnNrTG12N0Zyb0gxMW53dmUrU1JtRWpkcVFyYWlHak5JbE9CRXpmZU1WK1JETCs4b0dwdVA4UGxMekk0ZVlwRzQ1b25TTXV2ZzFWSzVxTnhEUmFCS1JLSnlkMlBMaVphSTFqN0FTZ3B3SGxlVXh1RjNBZVFDZVBYNWtoSHJPQkxUeThIYnhUaDFZU2VRQ1I4Y2haaFdwTHRUYURVM29MS0tNbFhwbFpiSHMvRjIxZEJucHJoMFN0ZVBIMFZIVyt5Q2ViVWJEMXFJMmgwQTY0UkZhT0hzWXZpS1ZDK1JVSjZZLzlhcEhFWEwzbllNTm95OVVPWXZQanFzTnNyaCtPSGVBVGNvSFBXRzNIWE1ySnk5aUhaSSt0eURNd0tySHUxZEZHSnptM0dJVkIxZHlZZHZEOGVUZVJlU0x1OE9YMEFNaitmaUgyNWptRjc1TFRMdjFZNlNGdlIwNW0zTitpbGhESUxsblRNZ1FJQlFUNGd3Q2VDOXU4TG83SWU0NGlSazk3UHJ3S1lSMHBxRHBmakxjY3pNSkdLQzhwY3VjcTVFc1ljVG5laTNjc0V2R2ZYbUN1eElEWkJyUWVMMkN1M3ZsRVRCczBxMXkyT2FxeWp4dzJyOTVJTEpEeTFIN3JEQmlsSFQxNjh6TVNodHZobjNBdlpkK0dvSGpRL2wzbnBSUkRkekJ1VzJ3TlVlaW4rT1NHZk5nYVJyYW0xQzhzSS9VbUVEcmNIRkVTaVhpaCtIeXRSbWJDOXlNR0NKdW1oaGlwY0Z2TU5hTnFQMWFGWnEvTmwxSmMvdW92d25obHo4RmcxckNCVjg3eGpZVkQxOXlPb3NrRmNhOFBBRlQyYnpFNEJLV0I0Qmp2YkFzVnRkaDJUeE5tT2gyUGRwdXlDOElIa3RWWm9rVmt0OFVWdkQwaTN1Sjd0bmhGMW9ibFJOSXdpWXVWZFlDU1pSTmg1V1lKdTNUZTlzQVl0dnNKYktsVE9EMGlvOEZybG9NSHdEcVZMZ29KeWppOU96N2JXSkFXM05VZGhlL1NhaGZlL1Vrb1JSc0JRKy9PMkNNYzVSTHpGYkVTd1EvbXNrZkFNaDk2S000OVRKdVhycnE5TS95aWZvT3FsOWZ3ZFVZYWwyV0RVTjBYVWdzanBoRU91OWFmalJQMnU4UEx3aXcvd0JjQzJkVU5rNENPRmVWZlBJaGlSRHhmNEE1Ump2dkpaQ2dhaEFmTXFxVzZZaGt2aDR3eEw5SCtEcTdSV2tzMmtYRW5DQVVpTWRCK3Z4aVBzVDd1U1Eyc05vRmlzU3g4aTRaRXJZaHZlaXI1M3NZMTVLRW1EQklPeGh4NkcrQnBKOGNwMlVLTjV3enY3cGpWb0ZVUUxLU3RsdDAybUVHMGYvdFgwbEJSTU9YNDFJZkpsaWVtL0RKVXVVdk1hY05aL3QwYmJKUnhhS3pCd1Zja0tGclhYelhOUFJhaGVsMWFmWEZHaHhCaFNoT2RJOGFXWVN2dERyZVdYbVNnTHdrT1R2SkppdmNrWXMrem05T3BqNCt3YXc3WC9CbzJ3V084Y2t1Y2h3U0VmQ2dpMGtnbDdOVFZlWlR3Tlo5N0hrRWo1T1lLcnBEU3NXaDNxMXZOb0FnTDVGYkdFbUlhei9TV1FMWW5hdjl0T1VJQmlITHVhczhVREduTVdNQ24yYkRCVzRzOFMzYzVOaHRNaXdyMnNkVEVvTjVzUnIvM3hEOTNFRTVoclFxSHJMRjR1WjFTNTVWYTljQW1xbjFQWW1VN2tBek80MndnUGd1WjNRSG5QOExxVWdyUDIrK0YrMG82Y24xZ000S3JBMXovZ2VkTmxNSGZiQnpMd2w1WVhYc0ZVTENIYXVEc1FyNFBMWjRRUVJ2b2ljclh5aEJSS2x2bzJ6Nkh5S01kUlNBM3AyVi9abFBFUkxpRVVDeGdqR1hyNC9PODJ4by9MZURLS2NZZGZMdXcwWGFHWDJSS01HQk5Yam9UYVI5K1hReEtpSzlLQWNVUmRVUXk5UjFWaXJaTGNDR0VRVXgydkhKUFNVWEhEMDdFQTBua0dTUE1EVDNHNmJPTjV6cEY5T2lDc2tUUDJGbml3ekljaFVUanRtbW1zUFdSV3JEemhxOHRYb0wzTWJIU2w0TUxTVm93YnVESnRDNnd3Vzcyb1hMQVNkUDJ6L053VTZxU2JaSnJYUDJ6a1IxaE1QNk80RW5qaVdWRUJ5aFpEb3VyQlMwemczNS85WEJsTkh6d09EV3dtb09ocXNlNGcwQmtORE5rQkdQZmhGSGl0WXlMZFI0MWQvMDR1Tnlsd0xnU2p1blB1RFJPTDBxSVlxaUNlNXJyMjBNd3pVbGVqNkhrK1FVVXlRSXJFbmNhMi9nM3hjRU9Ed0RQT2FjaEd2VEtERGdyNDFFODJ5RHdRQkk5aElCV25hVkVKQzNUS0ZwOXBOd1d5aUhxOEgxSm50OWNibGtqMEFwSXRXbUZkSkpHYXFMMDVSb2hUcTdPT1Bka1kwZ094bU81cDRxWTA4TmhxTVFIMmRMbVhTQ2h3VlpLRUMrcW5GVEJ0U0p3L1N3Y2V0K3Fvam5BS1BGRnJ6L09ZeVYyRis3YjhOOXlzOHdQWGZ6Z3g5aGlZZ0sxc05UZnlmcVp2YTcvV3FDajdIdWRqM3RUK2pOamlJQ0xTR0ZKMnJkN3Jabk1HcU9aNE9vaVdzN3p5RW1TNVgrSS9BMEdreThiZXhmNCtyTEwzZmNMdUtZOXdGdDNwc1dGQWsyUjhYZjc5RlFBZ2dZT2RSRWhFR3pIWXRiNXh0Q05DSzB6YW1VMlhXNVNIMnRJem1RemR6VDBybm15ek5sdk4yTGlHTkZzbGNuYUxHOXpWQjE5L09WdGFqY01VWlU4MWJZTitlcTloeDFoVTV2SzQ4ZWdzbUZNL01jUzJZSnR5K1lrV2F4Ymk4dWVsOTJ4c1pjL1NlbTdHaG1jdHdVT3VZcVpaVGFDT25WUVJoU3lGakVBNnNDRi9BVitkZGFBK2E2YVdnZDB1MEF0TE5kdFdYdlBPSmROa1Uva3hwNHJGMGp4TzYwcnQvUTBsaDYyc283TDMwS3JBeXM2RnYzUnF2SlFObFhaeHhYOHpaQUVnODg2RzFnbXF5cTg5YStveWNtMFZFczc2eHFENDMraEhiaVQxM3ZnWitob01pTVV3b0M5MDZFWTR5YlBhdkhabDhwa3p1L0t5VndSOWk2NXhHTGY1RXQ1TnVTbHMzektRdUd6MHBscnk2OFZSbWxhRE81MVUzL3FQNkUzbnhISjFvTERvZnhMczVYcGhCR3N5ZTgrVXFpRFpETVZZSmdBaFArNU0xVTA4QmdWZTdJWE9lNEI3MjZoWFBrR0FnaEQ2dFRaWkZtZHlMKzBMelpFRVpLNmVGQXkyeHF5cExIOGcvMmZsajFYZ0k5ZlVsblU2Tnc3eTByaHpMYTFGTzMyM1NINytJOG9PeVhxOXV6amVSeDByZ0h6Z3p4bGhSQzAzcE9hU1M3Zy9WWGphUHZnM0cvUzlRam42QTVyZmd5TnpZY3NUcGFqd2FoZlJXR0RqMDAwTTU3andyZjRNYnpuZnFMNENSeDdOcWVwalQ2d0trSUVRM2N3Z3ZPZ0VtRkJjZnMrQ0RxZEdYanZGRlJnemYvRnBXa1k4RDU3aUZxTWR4QitNUmEvVGtJZTRrclRmNm9sdEtyNkxtMzgvK0syV3hmQ0xNLzZqQUZjZWUxUEI0WHF0dGE5Rm9ZVDlScDBZRnhESnVwM041VU9sVnF3Tm13cHVFRDhERHVmRzU1R3haa2lHUms5Q2VPbVFXUE1Qc0RKemhsQ202MTNEVTQ5UndqRUp3YW5Na0N0VlBYTVlGdG1IMzdMR2QzQmYwRW1XSStXY2tvSmZqNWFsQ0VOK0xMYTRJQlN5U2h1b1M0MTl4Ykc3UVRYSml2TjhpelFqTmJPaXZ5NitjSzVOSzFqUEJvWVBUQmwyb2xIMVJKekJwQTc3MG5yUEdNY1RpRmMwTGRYcDlXcll4djlncitabGJpVElSa05JakY0aThrZ081Y0J6ZEdqaFRqaHdCMmVBUVNKc1Z6L0p6NG4wZlFIc0xWaGZyNUh4ZkpXalArMHVxQ3BGU3JScVByeFRaenBDSGN3SzdndVFENnlWWFZpQlpyV0VmMVpHdTJ4eDlRaUo3NlNFbnltZUNqU2VkV0xWWm8zQ2Zzb09uQmhPL1NGeUovVzVFZG1UMnhVd1RtZkRFSmNSNFdOREhTTHRaeHRJcng1U0ZqbEFZQnZscU56OU54Uzk0NkhYbE9UcVI2Q1pSZ2ttczlkcTNDRFQ5alA1NFBrRW9XeERsd0ZDbDlHaU13WElWWXEzR08rajNxRHFCLzUxb3NaaGVLcDZOMmFUNnRUdHVxWGRkT3ptR2gzRmdta01SdEx3Q2FSVmFDYWlrVUlxVzBTcDBlbnNDcmYwbEhMa3lscU5hcnV4b1p0QjJ1bzV5TkxPa1lvQklBR1lUdERrK3lqL2g4ZW9nQVo4SzUvdXdXczc4M2grL2hDeUdHajVIUkxQNmorVDFkOTVuU2NyZERnQk5jdStrenBZRzhGMnJBWHFzSFkycVpIY05MMEtDcU55Z0IvQ3RjV0ozL0VLaWFic3FQOStzZURyRUVJU1NOSVBidS9NZk42VFFuS08xbFpkZEZDbXhQZXgxVW5mMGpGd1huZXJsRzhUUllTZ21FWHR0LzdNbUVjY2ZuNmtZNkdKaWtMTzRsSzBqRWY2UWIwaUd6SkVaZEF6YWZETG5NeXB0dkhBMG9rUlhyRmk3WStkU25KU1N4V29RZzRYWHZ0eVcvTUFvUTUvZjQyZWh3dGtZQmVlOGtUdnh0R3lOckFMR3laK3ZMREYzRm95VzhFMnhldWRrb3ZXSld6WldMck9KVzM5TStiWW9GTHlQamVTSzJNbUwzaXZmekJodEVSdHFsNVdXMnJYWWhOQlNWS1dxZVBVdThhazZaYkdKdmxqNmVHeHBseUpDVXRtOG1LTzJmZG9KZnMyUzdDbHhQVGQzL28yaHhEak8vbmFZTWN6L3JZeDJQMk9DK0txWURUNGw4MTg2c0ZxWWdoSDNxZFltaVpzU0V6aGliOXcvSDJjSWsyUHJEY21OdUJxV0xiUVgzem56a2ZHdXk4cXg2TkcyU3BkdUxMdGdkeUc1WXI2NUZLZ3lINE5weDVhejJ6MkN4RWp1ZVlndDQ0UStOTDBnK0s2Z2Vkc0ppYUZWYWRYd2RST0JvRHlwc0dPRFNIaHhxc2R2WVVnL3BDcWlPMm12RnMzUks4azlmRHpiRWgvZThBd0dqTm5RTG53ZlhZZFRQRWVNZDU2ZXZzZGREb3hkR0YwUExKNXNBR2R0QlBSQVFBVFVjNlZPV0NBTENHa0JQYzlFTnlTbGxVbmNJMCszZjhzK05hdlJSVTRtOUpUbVVKQlF3bnBaaDZsa2w2TVVEL2k1aFdYWHBndUxBaXNzUmUxM2ltSzJPZkx5Rmh6WGgyKzFjb1Ezd3BMWnRzaGh1dGpEd2cvS1JNNkNnUDVsUkxQcUpIT3ZSOGFnRGJFcU0vNmRFVTU2cVk1V2h5ZXNwMUdWYnZOTVlmM25TOFUzSGg5T2o5THNqNDhKNmpMRnk0QXAveXhncXkwSHhtL2VHMXNFRllFRk5nakM2b0JWbXJKU0ZCSjBVM1dOand5UmdTUEx4R3V4enZPeG1rditiV2lZK0xGb3JRQkF2cUg3ZFFsVlFiQzQyM0Y2eUhzSDJ5VmpoRFdNMWxjUEY0VkFuanJKd0d1QWhHZGh5d2JXN1dHQTVoWm9zZG4wMjVzV3VtbmIrQlBMbE5mNk53OHFnbGNaYVlUeTd2NWlUejlNVDl5RUNoVDAwYlFiSkpHVDg5emp0cG1odU1MT2dzUU1QalVURkJSdTgrWk5QVENGd05IdVROc2VVdFhYWHhWZmc1V3VqL3pEMFpzYzJJb2xuTS9VaGJuUm1vaHRaZnJjUVJNUkt1MmJHckFFTWJYcmx4SWppMk16YktncGxvMUJjeTB3ZE1qZkY1UFNRTGgwQjVlb1FPYzk4dUZoWWJXcm9vM3Vkd0RONGt0WkoxakJDSW4vMW1GSm1tdFhyNEtFaG9SQktJUk9hdHgxOExmVEppaFBzWHRzSTd2aEZqOWFMYW1PSzByb2ZXbXlrYmM3ME5ESTBjcFpFeUlVMENxT2pnQ1JTNmp0eGNrcWlCVkxzTEU5b3RlYzltcE5EZTJlL0R0Y2hrVzdyWXZFangybUVxWXJ3OXN1Y2lWdmUrbStGWVZxaTBJZEdZa3k4VVpnWHVXUXAyd2ExNldjeW1IVUxjTXRaSG9nSnM4YzRyZFN2TzhNajJIZHNuQ2JvcG0rSCtyN3hoMnVGakNiVWtENXd0L2RlZWQyaG5NZlQ0ZHo3NXRXS3RSUUMwSzJxWlBMUFhCSU5SOWlLdVRTbGZCbEJZaE85bGFTK0E4S1hKOGNIRFhGKzlzem1ER0ROalY2VllLRUpEalJ3b0xhTFlGM1Bsd1VXRUVYNmtBVEg4aHBEZ3RLcVR5VFpmQ2RmcnFOYjVoc2lLLzBuMkxJMVN1MncyTGhkTG5zcVpJcTVYZUxGTzhXMTMxUnkyR0RPWFlUcnhZS2UrU1hDSzBPRzVsbTNDUEIrcWhoeDhmbFgweXl4cDQ5TDU5Tm12SXU1enJEZ2ZNek1VcUliUEpiZjQrd2ZHOTRZcGpYTi8wK1AwdEErMWlDQ042Z2xTSWJleWRrTnhZc0pvMFpxWjFuSVFSYjNIZURvU204S21FZGNkemt2cWdyTnVVUzlhb000TWliVk9Eek9KVmJsdUZ4TThRS1RiSDY4Y1hMR1NXM1ZpOUxrTjZXcW1BaWsvSy80S1M5bC8yVHpsbmJMa3hodWtUcUZXRDM2Wm4wQ0dyRHJNSzlidTc5M1VreUk0dHhKWVZBUVM3S1pmSWIwZ3dnbzYwWWtQZ0RyV0ZCWktPdW44U1VUMDJ2RmtGcVdlSTRjMW81M0RDenBWemcrS1BUNUhnMEZ4T1diZGVQNmc4Vll2K0VSNkF4L1JreG4zblBnaEFkUGtHeExDTUx6aytGdjlLc1dFZlhPb3djcFZKUHIrVUd4dHFNb2hGaXpEMmNac3FpYkZjTVdyQWp2WjE0bjNsOEUzQk5ZKzN2UVovWStZem5kRFVNckpxOTJhOWRWMkZLb2J5UEl6Yk1VUDZBR25zYVYwWlRxMTVNUmd5NVFtSHhjSmIwQ0R2RFg4OU1mcFBpMVFDK3RBRnRmdFVZdkVKd21TM29MYWY0dnVoVVYrai9SQm9aZnF4QU9KYWpGRWlSdGk1dW5pS0NpcUJoRHI4QktPd2hTVWwvd3N1S2ZZaVdQdkY5UTNCRkIxY1Y3cTI2dVlPWVcxUjhta3lNb0dMUGY4MUE2RlNJR0VTU3QrbTdTQVRsemlwNndGd0c0RzgydTFmUkxRNnBIcjFISnFKTkpKbFN3ZGxKeHNrckwvL1VZcmVwK0hnWThTYXVocGNBZlJQeFNmZkRLM2JTQjlaaXJubDYwUFY5VGZyMVFDRzA5TnFqWjJKR0gxckt5c2lEVE1oc2Z2S0VCRGRtaWIwOHJEekdoQktIR1NEQnI1NFlMM2cvQkdXcUVBRlo5UGd2TTJQUzdsbmJDcVdYQnh3blo4S1ZaN3lyT05lMUZPeWQ2R0h4ekRJMGc3SnlKcjdCMlN3dXVDeXh6dkJSMWU5aENGTm00dGU3bWY1WmFlZWJmNzFma0VpOUtnK2NkU1JaaHk0eWhsRFd6dGcycG1mMW02b1JEL3pKNytobndxU2prOXlUQitZTDJDbDBFNjRIUTRVZ1c4YkNiNzBJNWpWVi9Denk3SHNRUndFOHJSNGhlNisxZnIyNE9DdFhXMkFXNnJKZnE0NGpEVnFlL2x6cjdzZFFGNENLaVRuT1lvMjd2RGpFUXNWUUs3bGtocUM2b2s2cFd1TzlYWEV5VXZ2NWFLa1ZLME9tTTkzMEhyUExKWWdVbnJQZkFZMnJWRkRkeFZDaDcwa3JYcW1SeTFYLzMycStuN2dZb1VvMVlRVGtHSlNPZ1pXbXFjZllqTE42dXhwYVI3VU9zQ3dkRkVmVnZNNzZ1aG9DS0VPL3dBMUE3YjJZZlFTTkJWYkpFeWltSDd3V3NySkVES0FDZ3N4ci9mTHNMVWJkM1BrQmZ1TGIxMFBPUDlnR1QxWUtNR2ZjdDFJbFR4a0NLUDR1RzBwamxyTTNsUDlxcjE1UUR5THlnTXlVOFBlY1lmTmExVU5OZXp0REduSUZMRFJremZLbVlramFkZzRpbklPUTRSdThCYWJRZTVPQzQvVUtOcGlheEhsSW82S29FeFRDcEtyNkUrZEJtczdlZ3dWNmErQ3lCanFvMmFuMlRyekJBSExMMUtjc05HMzRHWDB3OFQ5c014RFhNZUFnTkdsbG4zOXByYUhlNllvVWhLVFArb0hZRXEwdmV3WWZRZVhLdmRlMFBHd0xNa3RFbkVab2lxcmg0SVF2VDRxRnNaL0RicTVub1lNeUNSeDMwdm1kbm40andWRmplbklOY21yNFY3U0Jtb3ZNZm5haGJSZU1qekUyUFMrd2lIa1BGUGhQdjg4ODJkNlBwUWkvZ2gzK3Fid1c3am10YTlrYVo0TXB6eEUweDFMdnNvdDlTRjl6VTIwSCtySGpIcDljdEcrZ2MxaFdwWFloSDNGWGthUmhRdXpxV201RWQ5YitodmtXUFBUeFh3YjF5U1dlSGptZytqRytSRzhTNzVTM0h0SGJSczFwMmRONlF4Zy9qU3B3RUdvb2Qwd3hKREFONy9adkxUSm4rdXRmUGV1RzNza29YVFFCd1R0ODhJWnpDVTVTMkZnMTMxMmJCbUt5Ui9uMkhLK2QrREljdzlCMjQxcmh0TG1wNE10aWhCcVhSQ010VWtNV1hiaFg5bUxvcUhSY1dNN1ZrRkthQ2VrRVEvYWZJcFFtK0dxQ3hSeUwrQVBENUZMWUxEWjF1bkN2bzhnMlYzbHBwRWdNdjVza2N3VVJRbCtXcXpteUpWV0d5d29GVFEyUzkwWjMxd0pSK2orR29uU3NseTV4Q2FSTk1saU9VcDJPU0RXaXpyd1pUVXpRNE4zWjVhTmFsVkdkQi90Y0NjZi9mbytabkVZZzlQcFFRbm1nUlRpZEtEbVZOU3cxSGJwOWx4MmNaY01Jako3b0srRk8vS1p0OXZpRW1oTHdEeGtNR1d4a05xOS93OEhadm1OblpNZS9WSm9KWWFaM3I1TjJUdDY2Z1g4QXJWNXhxTzdyYTBINFhrQWYzZ2ptbHdKbzUxajZoM1BIZVl4ZTBiNUt5K2hvYWpCSVBYaFdjelhnc2tBZmtGQ0NIVi8yYWJ1OE1BSUdrdmFnMU9kd3hVazgzUTVGd2FLZVlka0ljdUJZSTNtRDZoWXhsaGNFYUJDcXBkL2FCdDFzNnlhQ3plckV3dVVvc2FaR2Q2ekdvZ0dseW9XWDZqK0dUd2xTK2E2alFwanZvNFZyeEJmTVpRL2RMdzhXSmgyRjE2Q3J5YWMwK3RBdGNZNEorTVlPY3o0ME51emVOeVhDZUVuSC9aaUdlTzE1NVk5V3RrSExsZHUzamc0TmpkclRoaHpXZUJMRWdZbVJTNFlSanhjZ0EvRVZtUUc4ZFRvSmhDaldjTExQTEdJcTZHN2Q5M055azg4VE5NV1BhSmlpK2NaNHVYamVPVmUzRXJQMEJvL3N5bmZ2UnZkaXFNNEhBVGxrSTFGZWpXVkNNeVJQSm9TaUp0Rjk1QzhGQWR2UXNWazB1U3R5MFNvSU5RRHVtYkxoTUFsZTVNbHdQaVIxNkdCOXJXelk5Y01lWlNkT0VZdHNQVzJFa3VoVkxqU2g1ZmRTajAveGNSVTdjTEw4cmRyeEpZZHYvWTEwVWYxYWZxNXBHUkQyb2I3TSt2ZmtHU2JweitVVEp6ZGp6OUNLTktYY3hHaTFjOHFneEVXTXQyY0dNcVVtUnZQYUxiK3NlTlVXMVpzalFxRHFocXlBMW9QRFBmcWQ5SDVQQkZPdnR5Y0dHckVsUkxQUFp0VGRDYWZpSHc0VXlnZlFpS21HcTJTem8vNnhRejFvVDkvb0NRWFZzenVsWDd5SE92bWtLd251RG5WcVExV2dEeFV4Q2puRHJkMnVSdUpmVTc3dlJXQTQwa24rWXRPOWhhb3BWKzc5TDNoV09MbUszYmJrTmRwZHQxTFhNQkxYczRFWG4wSXdwNVNGZWNtRnAwWFhRa2lzSUFPKzZEZzB1VFRXbDFySE1EL2NFSW81WEsxdlI0amRRNExrc1lOeFhVaDd4Z21wQVpJYXhHODNqUkFSbHRsa3VhK1ZjdStaQ3Z1Q3NTZ2g4YUZQSDB4RFJaTFp3b0UxbmJSVFFBbEZvN01mdTJZV2V5d1hEd3E2dlpBZno3bXZqVmdQNGdhVlRjU3Z0Y0xQZFRHWFUzQkJ5SS9Ibi9nVFpUKzN3M0ZPVmw5WWtzamVXYmlCSmp4QncrS1hMaXBjNllwbC9GbGl5KzlML0hKVUpZOHRrNlJqZjRhaE80b3BPMktsWFNBd3hSWTNLTGloRnQ4NFp4Wml2RVlOT2hHTzI0UTJnR1ZPeWl1alNCTE9GM05hQ2xMYVZvOGQ0aUVGVjh4WE5PZ3YxYlFxS2hFcjZZdmdpRG1WcUlkUU96QVlCSTloZ0VKM3czV0RrNnBmVXlKTDJqSEt0NHhaMHBTbGFxeDFteVN5OWI5Q2hydFZuMlQ1U3pXa3Z5MXh3YmErTjV2Y3llK1ZSWG42bk14dUVYd2tOMk9kcll3QWtna0RiNEFhdHZMMUQrOU1yQWFWNUsyeVd4ek9xZ0Yza0tpandBbms1M1hrWGNuT3pzMW1zZndvemF6MzJteHhlRkwrOGlxL1dkSzV6ZGE5RTZxR0xBL0ZadnJ6ZzUwcUxYRmU5bW9wRys4N3J4ZnpLOEMzMktqbkg1OG5acUxObGUxMThJTHM3bGpKU3JYZGZVK2RHN1hnWlE3YUVoRm5kZmJ0K1VjeGpneXFKcGpENzM2KzY2T1pTOU5Rd1I1VDJqdi9KNDVocnZWRGl0YzNnWXJhVldaeXZzeDV1NHR4aHVUZzFiU1oyN21QYlppakNUSWhIWGp5T3p0NFZRc1hXVzNrSEdPb09hajI0cWZjTmRGdE03VVNGeUNUNGdFcjE2UG5DWTdhZ290cGdvWXdIVXN5VDFWWXA2KzJma25kRmMxdlg5Q2d1TU1zNzVzN2JneUoxbkcxRFZ3Tk1sNk1DZC93NFdxRVM1czRTelBrb1pXN2g4RVNMeDEwZWF1TG1zMGJYTURYZFZ4SEhZLzZ5MWxzcDVJVEZGTnBuRlV2OGJLVVBUNGhtclhlaWdaQVRmc1YyL0kvUVd5OTFudkZvKzdHRk9Oc2c5ZVd2eHoxNlUvRG1lNjJ1MEhudURuRWpwTjNhbDJMNlpuclV0VElsRkIxRUoyV0tIcmFXQUdLZTYrb2VJa0VWeDE4NWhBZHV1VnNya053MUY3TXEzdmtSVTB0VXE1SjZ6MUdaQ2RVaHNSUkNBbEM3UEc3UHU0K0prUnNCZDhLTDJKK1pDc0FqTGN2eVVnTjJiS3dYeUpFOE1BYmN6WVpKVC9mOEpTRGFHM3R4YThualAvU25aRWxNNFptd3dGSkhneEhaMkszSHo2R2RCeEIxYzl1QkczOGJwdFRHblBjRnN4L09kdDdIU01QTVhOL01OWG5PRStaNnhzdTg0QjM1ZVBiOWhYc3pZMjhvZ3puVmJoL296Q2tUWDIzeHJCQitob0wrektPVGZrV1BoMG1qbUhKbTF2R3JyZmFoaTQveGk0Q2JzL0NTSEdTYlh4ZTM3NVlKZmFZOUpOS2NCSURPRmhxWjdzR2hNS2taR3dIRXk5UUZuT0dpVjU0c2V4U3NRUyttTWVFWWZEWmtIL1l0eG9mTzFub3p2T0h0c2ZvOEdDaTdLb200TDNmYTBwTjJGTzl6dlRYVDMyakZCZDdNWTJkK2l1dWVGdldFMTg0bEJFSURSOVd4RnNxbVpqc1hNV3JEQ0NZcmtwUVluQXprRzEyZWdBV3UwdGh0czRkZVA3MCtJQjEyQ1ZkYjIweUx3bkppbHY4bUhwcVVBa2pGUWsxdnc0QlFJS2QyRkdKUHlsVXMxM21KK2p5aFZ5LzJDVERGUS9ieHBHelFTektDTGhmclpUVUpPRDd6dnhBaklHZnZqMmpvRFB0ZTFyVkVTZ2dkVmlFK2l3NDVCT0NTMDVuYnkyell1VTFvZ1pwdHFZbXlMaVgzVUpKR0NkNFdtcFJoNzRWNSt3ekF3Q3FsTHZhZ2x6T1ZXSXh3Z3FENmFlNk4xMnpzQ0JyMkVHckltVUtJbmJCdUhueEFlcklIcTRLS2F0M080UkZWN1ZFVFZTQjhzQm9qNXBtN3FPQ1VQaVJueUJUeHNSM1BpWXV6OXE0bVFkeWUvTEVrU0VQNC96blVrR2kyNnlNNzdIdW5oSk1OQmpwdlRjbUMwcXN2bVJzejRmQU5oMU9qYldNQ1l3Yzh5US9DWDJIZDNtSFRPcTBBam1UN1JkRHo2TURXVDJ3c0gybGRuTEl4emxTZU04ODdVZ3VJL2ZVTHg5TUl3dEkvWmpvUmZLSVJLbHJGaG1wOU5PUnQ4SXowYVJBYmxhNTRyaVNzTGx1TnkzcTc4dFFvSDYvWjlFR0lOdExZQm1KYUl2M0Viak1waG1ETld6RjRLUHFCNlFqOCtkcHVTTXVOd0VabnVwdFU3RHR2dkhRaVRuY0lzMyt2cUFIbjljY3BpWGRjTnVjRGc3dktLS3pPSUFlM0FHVFhVbS8wMVluTVhXZHNVMzZaYno4eU9TOXJMNEhEK0FzNk5BWXZHYUN2WnJ2akZPczFXZzRSVWsvMEFjWjhMWlV0TXN1cHI2djdWbk9icURmOERMbG1QdS90SDYxTlpKWXlVT2hrRlpycmNRSm5sOU5LL09UeDdmZkZvRFhSeE5FakVYSXlVUXYxcUtRSXRMUm1RK0VvTjRacHhUb1pFTmV0ZS9NU1RYOENMU3JRQ1JUQ2xPakVNMzF6NUw2V2RGa0tLV3lMeVplWHhKOUVySnRjZlQwSHNIZ3BpTnRoRFNySjB2dU9hZEJGd2xjWTNyS0VYOUk1ZHlkT3g4VFNxc0hRQ1dPYitjZVFzMlczMDUwQnNDbFBTU3R1Q2hTaXVDVXM0emZkaHgvMnRVWWZUVUtSNnlUTHNrcmgxaFYvQ1RxaVBraVh1aW5KS0MwTE1tWTlxS01KaXo1TjBPSHNVZGdkVXNuekhwWXFUaVVwd09rQTJNb3Eza1RnYjNDQnhhSGVJNXVQYm1ZVzVDTkx4VExxckFHOW5qaEkwTTh3ZTlZZ3VXQUFUeDBhSFBMb3BVaHdMczcxZHVxYzl4MmdpMUJVMzBzOHQ3NG9aSjFSNHNlOStLRUNhWllBR1ZkZXBUNTlVSGRwREoyaHNLVkNQZEFNYjRCTEJFRFlXakVwT0k3QWUwWEoydDZ3TGh0aGN0MWUrSG5GSHlQSjZIMVY5VTBkb09UL3BEQ1htajV4OFVZaExTMTVzWjM1YUFZZWtTdDAwK0hUMzdNL1Y2aFdpZ1A3M1EvVTVWbGZpYUhzQUxlSmtyQXJKbXdSMTlWNklVNWdtVzI4SmhDVzBPeEtBVnJ3Z2dIa09JSHVIWnRjcSt4NWM0VU1uNFBYQXhsL0h4WXowY3ZLTGtlRGZNeWQySUlVS1k1MkdEYTBLa1BxN1JwQ0NEQlJJbDVrdSs0azl0UEZCSER6UzdHQjFKUEVtMmZWcnpRejczd3hwRVAyY3BSQ0lyYjZOYVdsZUtzMkg5M2FyWTdNMTBUU1JwMVhXMDVtZU4xM3pLaHlNbzY0K0trWUdHNVN0OWxPbHkrcUJoQUtkK2s4VTM3TlVzZnRYcENDU2UyNVVyMFF3ZHk2TDBuNFZOMXI4M2FZU244dzFrSEszL0pDSDZFaWdGbjFlVjRuc0FVWDZoQkJJd3Myc0l1SjJMTE9tWkFjTUU4eVBvdFpqSWIyWXJRalhva1djMXgwSTVYVWRQMGNXVTdXUnN6WnZLQnVUVTF0Smc0alBhZHUxYkRIMTJhdHZwd3BnUTY1SUpHRkxwMHhLbW9sSVRzZGs0TUZ3dUZIRXJMNmN0SE5GaFBrcmZHMzhoakk4Tkd3YmQrV1NiLzBqMGp5VVczR2htKzJXdTVDWVFaN3BhSkI0Y3FoaVEwK1BoM3VncDcrbStZKzFjUTd4aGlrS2p3SlY4TGVDYXdYQ2p2RjZrYVYrNzlXQ21uWVZjSG5SZXlzU3VkQTM4RkdZWFpvT055NTZueTVzcUNxbktRN1VnbGFXUjAweUk2VmY4MTBhVW50RHhJbll3dU5RQUpNbXczd1hYeVprTWMybjdpR1lTUDZxc2Rzak1PdkpJa2RXZHlvUURoa294UWRLazZMWUp5clo3ZkNEQk12RFlVc1FjdjhOT0l1bWRNaEdFVlVHUmptb3ZqMG5FQWdjbHJaa3ZrMldIQ1g3OTErd2Zrc0h4NUJnYjlPYWgzMkk4ZnUxd1BmT3FWNU4xRkkvUU1KSWFhbWMrbHJla2RMelF5RUFEYW5jczBOZXFQc2pLMmx2aFhMdktlTzJLN2JQQzFlb3dxTW1mSmFNcTNoZWhmOG5TWjI4Vm1FbklQN1BFNldqRUhxWEYxaU01SnhFaThlc0VmVEdLQ3RmdjJ3SnhPNEdYT3k4WVJDTjFqcXg1dDkvRXNzV1gzZWpMS2tqU1JFZDg2c0xyR0RiSXlIM0Q5b2NzN2Q0eVB5c0lodXc2Y0xrWjFFd1VMdjhveWpJbHJCSFo2b2YwazlPMjdsKzlsMjR5aThwUFdwRzl0QTRQb2tYSWRuc1VnL1JqWDU3dncveFNHdXRET1dWUVQyY0M5VWp1SW5Sd3RKcjhhNGJhTG8xVDNTL28vaFdHcUVTOWxpbXVVWERjQ3JtU2FIL2EwZy8zM3FhMW5HdG1EUzExb2lsM2MxNUFQTU9pVkExeXY2S2hrQjhSU2hxZkRnMUhTUi9lRldWcVFMRldwMDhYNjlIQjRQUFlhQjI4bGFpMkJabU9sUUtrWVYrZVZsOUEzSVIvNWw2SUtmNHBvdVVudGxjd0FGQ1l0VHMwMzduVnIxeUh6R2E2N2Zaci9Qa0FmekMvY3k3VjVCaXpzbVhMVHQ5K0hTRWc4ZWk2aUNpVVVFKzdyWWg2b1hOL0ZyWERpS0FGK0pXNFFWN21NT0NSOUt3QVZYeHNBZ0ZJcERLdGRhV3l3VXFvQ3RJMWh5ZStiZWVhU0ZsNzVtbUxONDNaTWI3QWpvaW5DZ05GUkppRVZxRG54ZmREWUlCU2VXb2Fpek52d0JGQVRCeEhRV1MzUmNmTHhFdGpVd3FHNTNQL2R6KzJCbEVBaDhSVWhmYkNvakxtS1k1dFQ2ejV1blZrbUdjMWlNWUdnMHRRQk03Y00wai9Bcm4vQzh6M3NmaGFYazlOcTlvSVVvVUFRelJVTDdSQjJBek9Zb25CbWtDYTdhdFdab28zanc2cWhtdXNPZk1RTGx2eG9sbkttN2plMGNtOVoyNXlTV0oweGh1N3dzMjA3eElpNlVta014NEd0NVRmTkRhV21xUzErNXJyRlpCSmYvTjhydjY5anZDYmNwMTZXL1dVeTVRK2ZoelNSUnpiOTNIa1NiNkdCVmVCd0ZkU25jZy84SEVKTTQ4VXdFdDJMMWIrS1VQemxCb3hlL0RENThtY3crTkpMRFJNRGE1aWJqMjNQY2tMN0NyTVdOK0x0ZThaUTM3aE5LU1NPMGl5Yjl3eW8vdEpudkRCRjgzbWJnUFVkbXF3SUtLemg3WjE3QmdyTU90QjA3MHB0cjVsQm5nNlB3cE42WTZWcmN0OWxPV2wyRGlTZDBMT2lsRGgwTkdlYjRWZXIrQ24yeHU0WCt6aEs0VDRuMUlSVk92R2Jxa0tUZ3JaL1ZUWlFob0NMMUNINDJyUE03TWFVUmxRdG41L09HY0J4SHdFOXczQVUzOGRrYTZpc2tqMUlQeFFIMjR3Rkp4U0NyQ3BrY1JQaDlpVXlBREZJV2RIVWZwMjEzMjNsSjkvdnF0Mm5pMmEvVGhRU3VZU1dmZy9SMUgxc3JGeC8wcmtqS09zYnN1RlM0bFRRZ3cwODErNlc3eTlWMWpDcUx6dTIwcHAwS0hiQ2d4M2JZcFlCOTBYMWZDSG03cytrTEEwTk9SQlNTaWNQRk43QWJIcURISnBhTmtWSWtDTjUrYzlQZGhyWDF0VmxlQjFOUmI2ZC9hcTBnaGh1TnVwRlpSQ3ZjaUZyc1l3V3hVeVJLWVRIWDBtUnUrdXlHZmxtVXllYjBRbklreXJuRUNHbTlOVlAxdkxESHVmY1FtL2VPY29BRGJyMkg0R1JrNDRZbU4wRThSWjBsbGlDTk85dURaclNIbHRTM3RRU2FDV3JQc2hyczlsYnU2M0lKb09xT00xK05uTytEYXpqYVRNVkhhanpCdHg3eGdrVjMyMThBcjRkQXkzZUZhRk4wNVd5YU5mNEZTd0l6Y3VaRlhFd3NhVjg2ZmpVeDA3K2QvTThFZW5lKzFQa2pxMjQvdm1EVVVlOUpKTEhsMmoydVNEbjhITjdHYzZ5UWlEOERpVlo3RmNtSmw1RFFObk80RVlDVmpEM0F6bytCdXJpM3hxKy9RL0NPYkdGVG5YNjFrOFIvY09QeElVd2FkalFrVUFGY0pqSDNna1Njekg4eDV6OHdkak10bGdyYnJ1c0o4UXZhY3B3cVloQ1Vhb0RzNGtjakFScjI3RUR2THNjYzMzMzQ3L2E2SktMc2xKa05ueG9UUElqQTg1Y1V3Z0hXMW9DaWtlQmFiRHZyOGtNZnZjcEJKRXF5bWRtdFkvUzRkaXUvYkVjKzRBbHVCdFJlZGdxaXlTTU1JWVVwdVBuS3BFcTRmWkxLU0IrdkozWkRNN0p5ckZiMHVtTTBpUWpPRnhzOEpnY2VseWJFeENoMEh1NHIranBmZjZsSCsybkhWdmVHRFFSUUN5bjBwQS9uVWhSOHhuTXpBWGdKRE9VT3c5TnRCVldVb2JQSlFmOWNUcE9kRW5hL1ZOMHJtZDV5Yy9nZlBUZlFJTjlNNXBIQTF3RDlGcFBuUGJTb0hhVjZrOTRmdlNqMTUxaXdlVERpTE1lQXQySS9iNkMvZElXdkVUemVGNWIxaU41c01acFNxOVJxRVhaQ21wMXd1L3lNYzU2M0piak5yOWVBVDBuR0lvWEZERUZPT2lwajNaM3d0Ukg5UEd6dHBVWG9iempvbmFSWGc0RjQzT0hwWWxGQTdLU0NPbTJpYjNKdWxMK1lMeTEvOHZKYkNvSXZIY3NsNWtrZkFqa0lzNkJ3aUZUSXdpMlYwMU5TWFRCWDJRbyt3UDBKRkQ1cTFYQ0ZWYUwyaUFGUS9FWkpSS2RwcnhNb1M5cFJXeUFHeVVHQlJxOHhsTXZ5WFA0ZTRXZXFYVTFESDUzTld4NmNiYm1MelVxUDVpbVZSU20wc3VPRmRlZ2ZnQnVORWJWYXNkMUl5ZDJvVXBXOXNBWlprbWt1NTRhUmZxQkNRUTlDZ0RyVE5FYUJ2WDlUYUk0WTNsdW42NlJMQnpvWnZhVzJWRzNDdlRqZGVOSDlmUjYwc25BcWc0YnRZSHpJcy84QmlKaEdJa3JmV0ZTdHZOUHlKNEhFbVRFeWNlSUlrQXVaOWlsZkJvL1dleDVHRFFkL0FGTXY4VjdTcUt3MjdnQWNYTmhpRzZ0ejhOK0Y3TG1CS24rM3BuTThKdy93TUxJQ1FCaWJ0Uk1KZ3gybXFpTlRWY0FPK3FSa3kxTUllNmlmQzljR2NXOWhncGtsOGduMHVGNjNKU01iUEJ1ZS9QZEdoN0VzaHAyOC9XTHRPUVFjOTdUUHh3L3ZiL0pVZmdDQ3JtS3ZMOTc5RVlrR1hoSW03RVAwaWtxS0UrZkRITTUxLzNkc0t5NndKdTFTdU9ubVRQK3hTOERPUTliRmlTN1J0aytpSWowRDh2dE1lZmYvajRUY1k2VUNtOGFOa1pVRFNtZ2NNTW9ldWI1VWM4T1V2ZGd2eFp2RGRIb1Y3aGY0V3VjVEY2V1pEZGUxMnhkc3FaUjE2WXdYcUEvRFAydzJJdXhaVE8zMExDV3N0QlhDQjdCUnVjZ0krZmd3YkpoRFZnV2F2cUxHTDZSUno4S3kvUlVrb1cxYWc4alplVW9WcVhLSUp3ZWRFb2I5VlNHR3RSTTc0aHFTaHRKT3dyUkRabVNlU2cwTTdoVUh6VlhHWTduVHlkZmdKaFI4eHozNHNMaVFLczEwc3E0Y1RsQVA2T1JtR1N1ZlF1N2g2a2dUYnF4aDU5YnptdmZsYmY2NHpkR1JjR1FrcVdVdnFLZUd6anYyYXVXRlRZRFFJSFFaWFlPRTJFeE9QUExZemZ6SCtnMlNMV3JCL2paQlA4SEN0ZWRUU0xjeDBqdkJsWU4xS0cwS25ndTN3eTE5QnRtSU5HOG1zaUV1QU9kVk9LZmkxV2dqRkpPekhaYUQ3eFZPS3Q4R3Z1YjZHN2U1bzZOeExpRVczT2hUQzFRQytZVGhWUGE1bGQ1SjhRNEVuRzF4YlNhL3RpYzZlR2p2cjk1aFZxNzRCZ3R1TFgvT3daQnJVeURITVhlWWlhL2ZJUDVyYWpmQSsrVm5BL3ZaeHl0VHU1WmIwaEtXQlorcE9NZkYvT25rdGs1eHoyL3pwYXAza1QrN0g3Q1dnMmxsa1ByRTBtRnhEZXJpUzNZekF3SWJsOFVjaFBnYVdGWWIzaFpUOVBTdnoreDRrb0hpTllGdWNTbk8yTHJZemFSRTd5c1NzWC9aTzJIMHVhcXI1eVdHcEdCUVIwckNkdTlSMXBtejhsNy95Z1FwRGFNeUU0b1hkL0hRZmhQaGVkcHJMSzYvbjNydWVtVnFNbm5mdkxrWHppNStDN3hnd0lKRVVSWkdKSGVxbWkzVFQrMnBaYkhLRjFqRlQ4ZjNiREhra2J4aWJ2WkdZd2VYVzNTZGVweG1hV2k0NGNlbFRHMzdGZWpSbCt4MzFZYnluOTZKY3R0cUdlZmdRejlVeHdlR0JtcGJvMXhSVExlejIxYWtCM3BIYjBSQVpOTWpsOUJid3laUU1YNklyL1psWnNaOVBQWnFuUTNvZGJmRFU4V3l4OTJQR2tHMno2Uk92NjVOWXF5bll6d25MSCtYZ1RNVHlKNllGS0FWakphczVxZmtJMDhZRVJCZHZUdkFkVmJUVDBkT2Vtb0lJR0xobXMxdTFCVXd2amwySEZ3ZlVjdmNtT0R1S3J5VzVrM2l3eEV5Z0d2QVNoc0psYmRxcXpxaWZCVW5TNmJqNGlFbVQ4Q2ovL0d1Sms1N1FuSnpxazE1L0V2Z1d4Ymt3TmlpSXFiWEdQa2RaOGlIQVlpYTJDUGtheDNYNy9TamdSenFNOFpxN1ByT3BkeEpWMjVzRzdKRXUrNExSUGRrbE9TaU95OS9saDZSc21sb0FHQnFpM21HTHY0QTlWcXRMUXVnWlpNa09aNExNZWhIbmVpYm8xZXZRZVRsY2w4T2J3ZVBrQ3R0bU1ZNC8wb1ZQUTc4dW9SblgzYnJhN3JObFRaUDhKakM2bHAzZFg3VGpDQVdKU3pXdGhndGx4MDQxRVphcGtkL3hleXpLK2YrWk8vVFJaQkhSVXkwR2QwZ05lMVN2Y1paSkI4aUJIdFNjVlRVckFKaXlSSC9uNmFyQzZsN21BSWc5REc4V0l4NnhMQ01vdGsyeldiNW1PNFNNUFlsYU80Qjh3Q3RzNjdJRVlMUnQxRGNCYTJzL3p3NEVDcm8zM1htRXB0T0dmTU5QRFNEUnZzRW91TzBuQXowdXNya3ZUd090Tm1aSHRYZmg2WmtWM3NVK0VFdTBZYklEQmNha0owMDJWQkVYRFpXM3FLSWRDZGJaQllLRHR3Y1dPWEVzMHIxYURERUJtdHExM1NtUjJYdUxsRWJETFdhR2NOVTFjNjZtQU4zOVBZRm1mZFphbzN0N3JmZ2c0TGVGRi9OTEd5blkrbU1FMEtydmlKT1dVY2ZnaFNLMVR0VE5XS3kvTEVqd0hTYVE4bVYxdmozRjhtQ29aRVJFNXd6Z241bnhkTXNJOVdoMlJYUmhpaTNCRjNTZEQxdUFueUJLTXJabTBJS2RhbzlqSHdtanJHdmM2QXR0TStBZmRLaDAvdEFRT3plM2p3eVBUMVJtMDhoQmRCbFpvMnhKQjNUZWdlV1IwUFVUSTJpZ1BIRTVCNVpKNUVKeDM5VFR2dXV5b3ZrelhGY1htajJDNVRrcU9VRmVCdEFncXVFcS90WWdUblZaZmtFSkMyM21wb2hEdkV0RmM4M3lCYmRlRzd5MHI4MTVVMjc4bG5ReDAwQkxWc2pEak1kc3U3UGZsRjQxek9NczVnVkVoUUp0KzZDTTc4U1hQbTM5ckhoTVdQM2RxVVBmT1FtNnFKaEN0S2Z2SGpKZzZxeWlodE9adHhIeGhGdk1Wa3Y3WFhsVTR5aXAyMnBNRE42clBOZzJxNDhsa0dGV1ZlM3RmeXlFR0RkM0p1MmZwaWJySFVSSE9FZ3BzVFoyZGdxWFh5U1RacVZHdXZ1c04xWm5ZUlZpSXQ1OEVJa0RLREZER0JhZElHR3I2MGd2OFVKeVpVTThvVFBPU3grNitRYkM3ZHJMU054cjRKVlRFNjNmVzVqY3F2N2d3VjZISkk0dEd5QUdBb3kzSm1vUVk5NkZlczdUdVNxdHlwR2FDMThPcm1EZDY4MVJ4U1JyK1A4d2UrQytKMlZLdnd3QmsrbVpkazJPM1BTMk04NkpYY3FzbDJBWHEySFlZOHc4dW1JL3FkOWZIcHRicVI5Qk0zN3VrWXB4NVRIcEMwZDBaaG9MN0J2eW5jUnAvNktoMlV4YlJXU1NacVlHUVdtUGZwL25kckJSSFRlbnZsbWRqdUZzamErY0RWSlprVDhxR1FReW9zNUs0MW1uN1dobllrL28rSVliTjFTbE9ObjJKaWJLZTdWOE5taldBaCt6YlNPRm5LQXNyMVEvUEJmWkxsdUhzanVvL2dWdldLV0M0N05wQUttYS9YS2NsSjQ0U2twbDhuVUJTcXVveTVQMTRjOFpkbmc4Wm1yZVVNRk1xclJXWXJKYlh6VlJISy9qTU01UjdwbWpRYkZCa0c2UDBrK2hqd0JHOUlNZzExNkFmb0p3Skgxdkc3MXBsYWcrekZnZXl0d2tEWW5kd29MeERyZE5KejV5R2hYZ0hwU2o2THF3RUllbVUrNlJkT09iOTh5RHhUZkZJajZ4WUdsZk9aeU83ZlZnU3BDWnVYczFCRUh1bXpqY3ZmcW1wQnBENmRVMUF4eUkzbDdXNVVhQXd0cmFHSWU0V0QwTm5uNk9IYlUwV3Nmcm5pdlZzeEVIUk9wMTJPbSt1OUIra3kzcXg4WVNkbUZFYTlPc3Nkemx3cjlGTTQ4dkM1WjdSRCtqNmVsczJuS1N1UVpWbjNldWNvUDNSV0V3R3piVHc0Z056aVdmRWM5cGZkL3c5aUdsQm1VZWlRSGhONGJSdklQNWx1c2lpTmVveW9ldjhoU1FFSmNHcFpEeFBPOWFyM3lKNXQva0NXeGNLbDl2N2Q4MDA1WnpNR09uT3UvR1o2YTR4d3R3Y1l4WlkvMmRGbkRuVThVSGU3UHJjQ3VGYm84YmZuUWRaQVdEV3BmV3Y4dU1saWpVaEplSkd6OWpwd25FWVJ0a2J5VWJjbTJqaVFOOHVWc3J1bGpKK29zRXdiVEVQTkZ1cXo0Yk1VYXYzdW10QXZSa3JMMG02WDViemdXMng1bUpiYWEzZTBHbHpNNUFMa1kxcm1EM0dFdlNYUllBVXl2YzNiVW0yOU5SSGl5N0VuZCtncDNOYnVNNzBINjFKSEhYeWR1NitzYVFUN0FHVEVWTWpJdGg0M0NiSXJDQThpYWx4eHhkVUdpUkRMZWJmNnM2U3V4Z25ieEw0RlM2cThnZm45WisxTnk5TDd3S0FmTFpMcDJScXFVZEpTSVVlRDhxMzR4QWNNeHREYTZHRlNQOS84VzlXWWJUNnIrcCtSbVVJaU05azVpYUJSRHRVVGdiVjJwejIwakJqYk9jd0lVWVllZzh2TTBRTEw3OTdFU0hxZXdQVUhtL0taR0xJenhLdHNKSXZjM29GWmNWcnRkVyt5WlQ1eEtOd3JnWUMzUnlBU2hyV2tRVFdIbWU5U1AwQlFkRkExdDREdHExVkdVcGVma2dvUzlxSi9ZNm1TbzJvakFvWFhncG9nZUw2K2N3OHJ2cEM3Q2Y2YklNSkl0UTAwUExZVEd5VjExWGRCZDQ0ajlMcTR3SEUyVVB1eUlqb2JMK1NjY1JZZk9DWElZTjVQelQ0UERuZGoxQ2x1SkRGeno2TklXdE95Ry9udHpQUEZnam1CYmZaR0pPQnVEb04vMlM4Ym9hZ3hadHZwWXdwRm5yb011eGJQL0lEdVJBVDNiUmtvY2puVTExWVR2OFAvM3hNL3piazZ6K294Y05EQ2pCdzJ1MEdoTjJ5N2FJSDExa2IxSzBLZU9sVXNCb2tzMHlrK2dTUmxYa2lTTVBrZzlkSlNPNHFzWmtTVnRUTnhCRWxQc09GbW5qRGxXTUJKMUUrSE9jR1JqY0ZWQ3VBQnVjSFV4bFB4aVJsQzR0UjVNZ3h4UndVVFdvNTFySFJxZ2ZmUG85ZGFITTlPU0s5U2ZBbDZLWWYrbVY0QWdQMkxQamJ5OXZWWHFYQ0oreUpkR29VaGJlN1FiM3V6Z3FOcS9jUjRXcE9jb0ZBZGI2VVArUFhmaDhpRUFSY1FIUCthV3VmaktibXRnMGNSR0tUL3dVcEZJUW5NcDNMZDNyNWsyTGQ5Z2UxN2RIb3IyZ1ltRlRTRm4rb0dFYVMwQ0Q4c0pUbWVjZzFNeTltN056WDB6SFpmWkFQV0VYemVVM1kzZzBDeWt0c0lYeXowT1Fua3MxQTFSbmJUUXRTajIzb3BWWkZ2MndvRkR1d21XeExMdmtWWmtXeEpYRFUwWUZUMHBMTGZqR25TMW00a2xxakdMdUpOendpUnpVNGFTajhwcUx3TGtSNDIvdFlHbEk5ZHdVZkplNDI1Z09wVUQ0VW9EaVR3TTFSVmFvMmREV242OVNEZm80VFdlY3NZSk5IMnFNUGYyRmNqNTQ4bkdFd2cyeUxBcXBRd1M2SkE4dXliVjlNMWtRMlVHb3JaVU1FMldEYlY1ckFZUTkzWFJNNDZqTWJCQWhaTG1nR2RFZENibHRNTjFSQ1JTQ2o1YkhuanVudXhTOUVCU0ttd3B0bkd2d1V6TlgxcnBoc1VMVkIyWUZGZ0g4SGQxUVFBdkVBdEFndUZFL201N3R5Tnh3dUZZdGdmck1Yek9RTU5TdTNFaWlJRkUzclNYbGd5VHZjTHFDY2t5WGt0UjZvZGxtdEhrNW5ocjVzVXI1bHU0ZGdFYTVGbk9kcVFPVGt0TlFhUWhUaWRLRHg5M1lndTY5Y0NBRlYwQStMK1dSV1pWVjkxczRhRTd4Z1ZVTGhmY2VPeUsrbWhGajlUbkV5aE5hSHRhaTBNVVd2SEd5dWNlR0tCMVI3M2dOUHpUMXVtVmhQR2pwUmZUR3drUVZXSHpPQ0FiQjk1ekhwT0ZlR1pOWEp4djJjT203eVRZY3dnL1VnaXZnaGduMVNzNlQzZVI3Nlo2a1ZmUTh3bGNqYllHVGErckZTY2FQallGYTJBejdZMXFFb1ErWmRxaURIMVVXZUVuWUlOS0h4K1AzZm9lTU9iRUs2emkxUGJiM1dRRXpsR2Q4eXBlV2lpV3Q4RVRiMkFoc29CSHZvQmc0Wm5zMks5Q0NTZllJR25iTDFTNUU3Q3EzWFE3NXZ4b3Y0SW94T1h1Wk41dzRSOVRqaVh2OEZlT1RzWmltM2pxTmttblZ3TXk4WUVPcHJKS28rdHRrVlRNT3ErUVRFTXpESUpYTzFDQUF0aGYzZlQ1dUtKWk00RmZPZmFMQVBhOXIxNjRZRzAxOU1VKzhwaHZqdVM1di9BQUt0ZWU3QXBoRkZGZHJEMnRoR2U0UlB0TVFTOEVLbzBYTW5QSG9idVVLTnJUbFg3M2tlYmg0Qy9icGRVZDEvSjdERWFDRWFkeEVZdmlacEsrOGJiK2xyQWhVMVFTNWlPYS9LRGlndlR0Z25xUkFwRUVnU29DRWNtbE5aelIvN01VaEI0bnlpeGN0TVVmWVptWGZ0Wit2TXZZR0tiVkFrNUtMZW5nVlRsb0U5RnBieVVia0poa0Uxd25PSzBtVmxWMHM1WkRJbWU0UnBQK1NyOXRVejF5QUhZU2YyQnk1Yk9ZRFZqZ3NrNllmSmRiSU91V3h1SGdsdHk0RkVMZzhnN2Z2Y1VEdUNFdWtlMWJYcUlxYW1JbitGMEFsTzNQUTN2TGc5UFhkQTJpNXJNcjVEdHhLM01RYzNSU25rYkJ3R29iUldjdlovZDJNOEZDWTJydW54SFRmT3ZrY3hHdm9PcTIyUFdySnNYVnRsYUhTcjk2a1Rvczl0NC95N0tGb2U2cVQxTW4zYjdlUWVHRjZGNUxrYjMra0ZTNGlDN2tqUlB4aW5jTnZqZXM1YlQwNGIrdk9ORzBJZVk5UE9kelVGSThpaXZEVWMwblc0TnVVeDdNbGpqOXREN1Z1N1pKanJjY2grYlVuUFlMSVpkTWN1RXJNVnI5ZVdZVTZSS0d2azM4UURxY1RvOHRLWnRqZE1DMDlGNS85QU5jWDBhQy9KZGVCNHVwbVo1eWxvWVdydjZDZG5LY2JHNzJoc3lCS0xXNHVKOWt4WnA4WVZzZWVIR2g5eFppTVE3VzlCdS9hU1pEbHBzaGRGbXZkVks1cVVoUGo1T1Y4MDNKZklTcTdTaUZGZTZrbkxtMUlOTUlnbVhiSnJLZEhmSjc2Wk10a1A0V1BjZ3pOYkFwV1hoT0ppTmRYMm1UMzBIeTh1RTBEWXlDV3F5M2lkQ1hTSkZHV2hRMUNSN0pXdllaeXdiaXh4aWFRVEw2NEQya0VBdFNGTlpMYWZxUkY5WXpmS1R1TlVFMmxMNk9yNGhQTEZwTldPRzJXQk40bGpDYmNDUkZLM2RINmNta1pnajJoY0cwZVlMdXo5L2tlV0xzNjJUb3VrazJOTlJ3blpBNkYzRjR1UDYzWm5yZDdEWEdsZXhHV3F5VnBoQmdoM0Z0b09NemVYdjdPd1ZEeUh6YW1aQmxmQ0tSdGZzeWJyRXJlVE1EcXpzVjFWODVhOW9kNGtEUTlqTU9OaVIvNEdtM3EzdVhOek9lTUsyMGJxTUlqTE9UbWJDYUM4YjdJU05wYWtyV1pFcnkyajZ5QVo4RVNQVWFxYzU3U3pHRFNvZk9KRXBwdklqdm9FMnNCTjhUNGpqNituTTJDd1Yxb1VjS3NhRTBQWHBpVmhTRy8wL1lDQWNMQThYaE5aT3lpQlBPc2NzVk5uWUlNejJwWTYrcmROUm44amEwSEdNZWo5UXM0V3lrcGZxRkFKaGIzbDN3NzZTeGc0d1kydmtXaktQYkozSERqWisxaDlCeFdGTTZIdXNqZDJPYmhteDBQNzFZeVd6R2FBK25WRElKYzEzOFRmMUpUR3FqbVpIK3BFMTcxVmRUSVVaMjJaVlZSc1lHdkEzS0YxeVVhT09pRm1SSDZnSVZTeWdPcUdiV21DYmtlOVJrOUJaMnJud0FKNWRSNzlIU2x4bUVqcG1PaFM2Q2dtQlJoVXNCMXNIQjZDT2JTdjZQeDl0eWtZZ1ZkRTl3aXBINU5HcDEzNjNrOGtqM0o4WEI2NERNV1RRb3l0QXM3VmVidU9Gckw5Y2VvQW81cldNWkhST3Q3ZjJYOUcxdzEyd0dtemFMWEpUSE9lTExKMncwQ1FuQ0htcW5mNmdLVUVVbjkzV0ZRRVk3Vy9teGs4NEVkVWgwcE5IS21uMnZObnlEZm5uQUJuYm5Ib3JQOTRFNmRrMXlCRWJHMW5JdEFwaWt6WkxtZStyaVprYWdjVVExelhvTWZZdVdHbUlLdzlhNFp1K0xQWjJydGRuZWFsNHRjUmJoUjBBTDI2TUczVVlaaWhvYXNscGpCVVF2cWFHakFvMkY5b3RqSnVkMlNleVpBWTRtbzR4WFFrZlFKdlRWd2hBQlV3RVlPMUlWQld1b0VjNVpYem4zV3RkRVBzUVRUQVpTdEF5VW84a1pQZURkeGNpcHJhR01YRCtPYmFjdEhsZ1JKcGdvODhwL2FmMm9PbUtJcEFPTUZmRkxUbnFQczZTYlhRdkFmMnZJMmlMMWUrR2U5WnYraXVUa0xrRkRDZ3FOQXA1ZG9GWkxTMzh0OHVoR0J5MlREY1dSTnJmcCszNHJYTFVZUElTTVUxRkcvdmVXdys0aVY4ZDhkK2lsTlBIU0RDR0l5M2FkTmZyU3N1VXZ1Y08ra3l6V1lhdmpuL2QzbnZlUXFCV0FnQW9ITHlyS0JZUXdrVjlzNnRlWlN0Z0ZLS1FqZEtHUitkbndMSTNhRTZrYk9OMG9URUR1S1ZibXFSNXNVcWdXMzZnQ2VWdXBsMW5LRkIzd2V0VHkwN3NnTytNKytHSTVaclYyYSt6TmRHaUI2alhpckxOWDZsKzlqZFlhdFdkQU8yRnhBLzlTMHBYbngyOVJTWlBoUHdOL2hiYk1KTHFiMEZrc2NYWlEveVFlVlhXZWxGTFBYVGl1TnlFUkRuWDF5R21zajAyK0lRejlJa0Z1b3JyTkVVUitDZ0JmNHFSODlpbnpuODV3c1NhYUVSTlkwUmFnUy9MTHYrNmlWTll1cGh0d2R4UExIanh4U1BlS0dCd3RjMFY3UkVjUENQb2ZvYzM0encyRW1oZlZvNXFQcW5oa2FNTE96UTltc1dLM09GY21Ndm1kZEI5NDVvbkZXeVFKWkp2aDRKZ1ZOL3FOeHBxZGNNbWk5ZlhxaGMxQUkrNTI5c3JxeHFWV3NuVVRacFlMbXRsOTRVU0RHRm5GQ0hEQkk3TVB5QlBHNE1uWWQ5Qm9GTGlsdTlFSG82UDVIZ0NQWlNsTXlDb25meTVZRVd6dnp3LzNJRVV1WTRDZ1RRMUcyM0VteGNHNXNJT21mSllCTURPYVd5S3RDNTFobzBja1FBdjAxaUl1STZMdjhtNWhuRFdwREJnQ200K0pRckdHaWdtWjhFT1ozWDg5a2FmSTZSQ3NTZ05adWtDUi9oSUllZG1ldVh3WVMxR2lDWEpqZTN2a2gyTXFJRjc3ZWg0Rkg5dlFLM0VkY1g2VGNDMnc1dGVuR1E3WWtIWGZxdEplVk1JbHlwK0hLMENVNFJGalNvYkk1K0NpSDVJZklGMTlTVUR0L0hQSm40VjR4UjVpZ2hFb3ZGQkZ2NVNkYTM1SUJCcU9xRmorcjd5cVFxWUhKK3NiUm9Ba1FwSkpDcE1TcHk2eHVURXp0NGViRk9iT055bmlNdURLYmtQZmxXaTBvVlVnM1MycEl5aXVZUk5MenE5UGQ2Y1g4Q2N4TzRMZTNEb3RXQURCdEVYemlkY0hKZDNPRG5KWkRBYzZ2cW5MWXpyUEp2LzMrbkF1SlM0TExNNnNUYU13cG81U0tXTGhGYjFiSzNOOTBUR1VEZmxKS3hGSThSZVprNlUrUFJxRm1PVVZjWGNGK1liU1Vwb0JxaUNsd0R3VzRuaURLNjV1LytXMTBaVkJvR0RaVGVrcnZvWFVsYk1RQzM5OXdtaisxQ0ZSNHFiWE5hNEcwWS9nOTc0WVpZZXVRN2ZsZ3E3Y3JmcVhPajR3RGo3UEF2UWdNakJiRGxhOEsyU3VEUk1xR05LM1dwT2ExV3NBWGlhYWtKV0NWbWM5OXZrM1ROMGxFUWJTVUtNd3ovQmV1QXFLU3Y0STBpdSs1VkpsWDJkRENOVFl6UVFNTU1tV0VtOHJ4bEQ4R2hVaW9GT2plZTBERzI0YS9ocnFKeUVrNkdXSWMyc0JUTGZ5b2xiMkFwUmd2dzc3Y3hoQ2FQSHBLeElvek9lOW0yQUxXZDluRW5xbXpKVENFeUUwTHMveGN6cVhBenArRER3WWZ2V1d1ZUwxL3EzTHU1NWlJWGs2dGgycUhUUm9rQWtPeGZRRXVyL3VRME1tSGMyK0IyeXBVK1dBVlc1eCsxQURyR0U4Uko5c3R0YUdNSHVZVFV3aSt0TmxVVzRUTzZWSzFGc2xnM0Y2ZzdCcEF5NjRVM0tIS2xkYUtMUVphWlNUQTRvc3pyZWRiMHNlS0ZwUGpnVXhJTGo4RmwydDJLZEl1SW5BK25vYmdKYXB3dFRINlF6cUUwMVdvRkpIQ3ZVUVdkT0ZyK1M5MVZOOTRzNHYxc3NtUjBlb29NQkNZWGNSNVBIQWZmbXdFdHNYcUZwQXpuRFVrT1liQW9kYzVYUk5CK0tOdGxZbTl4SW5YdlBpWTlMVHZGNmxUbmJpZEUwN1Uwa2tJcTZBRy9FMmJjKzJtZkliZXE5N0VFSTAvWklMU1lCMnhwSlQwcUxUeGlBd213cTJqbW8xQW9pTnVqRzNCd2FIWjl3SGNVVzN0ZFF5ZkRXNzdFcUU4WVFpMUUrTnR3WHUrNTNNOXArSU4yMy9SVDJJVGZyVG84UFd5Um1uNGtzVTZXWEdoVWwwY296ZlVJSUhSNUtPTmI0NzBxRENOb1k3K2tvcE1kSm1RSTRtSGRTc2xlN0lISkxVVlNRN1JNa2JyVlAzcHJmQ3dhWEV5UUgycWtJVE4xWllUbU4yM1ZGZmNOaUJtRlh3eEpXMWFDTlQ2Wjc2ajFTTmM2U3RrV2dyeWtIMTgrSDN3TFdqUmN1cllFR25SbE5jSzZMV1gvWHJSeVNpYTQxV2JRT1NMKzEyUndCTll4dXRQSkRBalQrOVFOanVhVmRxc2I4NTZ3b2VuMXdlS1JkcDkyR1Q2VkJqK3JZM1VEanpVVldKelhXcFQxaWE5MmFPMDUwQ200OUtPYWlTUWhGUVVjVkdsTWVzQncyYWJyQVM5Z24zWDBzNG5BVzNVTklqT080Y2NKR09lby90WEZvaXZSUGdNbktjdmdyOWFqeFNNaEplNkhWdGpKNXVEWmpmSGw5U2hCQXdaUGk2aU5sbW5NSVlFbEJLdDNmQVZpZnlnYkgybFd0Vy9tYUt2a0hQbUtZMTVFUE5ZejdIUTVRSnh1WnNUT0xnSndiMm05MDI0ZVFkbGJJajBWQWR6dDJ3MzcyUmZNNmgyL0t4ZFAzWlRFNzNXMFh5NWRyRy9YTzhQNWRrQVVhbHhLTk5zbGxmclBiZERCMmozVE9tWW8rYk1NVU5wYnhqMVdFWUY1MXBEUWZQVG5LVXkxU3JrMHJmOHZDV1JsYzdtYncwUkJvV3JJa2Qya0txK0hBVlBSUlhlNllNNTArNUNGbmhZTVFiQ3pxK3pST2NpK050VVVvMXozV0tRRHJGQU9weC82NU5IQ2loRGova2ZCM1hYOGdlK3RHa2Z2VnZVTGtpblBneWRJc0szVW9IL0hQL05HTzl1azkyNzFjVjhEMmN4VnBKZFZsdlZPRDR2a1FHRnpmVmxWQlY3WDRzZCtmUGEvQU8xbG9LTXRXaE9jRXFGNWtaSjlsUHltT1k5WTJmRGV4bHJDZWxWZXVJTFhsVFF2N0pkSGw0WnlaYWV1QmJVUkYvb2ZJMktBNkFiZEFFcEdoVGtlbFQvQmlNUmhrdnkra0RWcXFGWUE4Z00vblJQdmlnSHJjSVR0V3Y1VkRRbllzMFVjT1dRVHBhMUZ2VHlHNWl6aUM5NDlsZm9wU2k4WkpUUlhsQUJxMVZBSWhBenRLNlpnV2dzcGtmeUZwL1dwbGptd210SVU1S2lsOWJWWlZkWTBNK1QyTm5SUFJQZ004bm1hdG1GR0JxdGE4UUNTbmt5V0xDL2hRV1hCd3pIdDVuc1JROEdKNkdBNW9QcW84SGlmSE9XVnJ3VWJHSkRDTFBqRHlicU5ob05vUHpjN3hMa1ZqbENLVWE3QzROcFVoNUFTTDBYcFRSaWRKbzV6eWNUYWE4NWRsYTcvTlVwaDhOcVpnNytvMkdqNEhUVVk5cHl1ajU3QlYxMHNBalRreEZ2Z2JZam1VOXpnU2RjRDBPSS9BMWdsZXk1NndJT3NoS2YxcFlDYkdTRWQrUU11Zm1ESnE3NENtb1ZOZzlhcTV2eGNKNVlKQksyTlF4dU9qc0RRRHByYzZFVTFuaVdJNDBPck93cTViTllIenB0NG5UVVRRNXdPc2NqcGJmVzN2ZHRwYk9TeXlaT2FTWXFYR1BBVEdUU1hRSjFnNG1GSHhDOVZrTkdxUy9paU01Yy9WR1U5RUtxWEdTQmxJbnIzSUdKLytYR2lUMmdqU0RCTnNXdnBPMkdjdXFyVzZJRWRoanpyM2wvVnVET0Z3UmFGUy94VDRIUE1adXBEdFdHM05wYmJwQ1NiZjZvUkhkQXpTNnl6TGlkbWkxa1k0WHAvRjZFMklUc3JreUhibnQrV1N0dmtWb3FYZnR1S3lnN3V6SVNHd253VGtlNDQrNVNsM1RraWwzcmVGaW16Z1plTEY3UWR6VWdoZXoyVERWWTJmYVBERG45TklZZHE4VWFIN0VnMnVvMURyL1dycThkaEJscW5nL2NzYk5JQU93TnJpYnhRWi9FZzFUYWs2Mm9leEVOdDNpMnRjL3JKVG9OQkFsTkR5bWpJakVZK1ptT0JIT0x2VGRCb29tQnpYSWNOS1lNYTBQV0JKODlrMEJ1VGdKdUtaclZqY0s3Z25Ca3pMOUxTZDRNNWRlbWVWNkJtV0tEeGxmeDRQVC9CT2g0clIrbUtKZ09HRVZGVW1aZno5QTdTSTc0SFQxV2NyYnlIUWVhT01iaWFBT1hneUo0UXJKbTJ4MjJ0T3dHcmUzaVNPNytMcnJqL0JkVmVuYTlvNXdvRExueSs3WjFZZ0dURldvYWFTWWJTUWJNRzg3YVpnSnNqRmdEeW9QTnBObldUWVZ3eXByYjlIMmRJRTA5bFozMmpKQnNVUnFDWEJ4SmhXNWtBZGlHTGgxenBhSGs1SUpVSWVEcll2ZlUrMXBtZUxXUlFtc2dwZUNNUysyMHBick10d3ptalVFZG1WcXRFZkpDWjdqajVQOFlGU3VabEw0Q2lxRWtkZlI3ZHRTZUU1YnpyOTM2VnUwUStCbnV4T1QvNVVXRXZWdjdud2NWRURwR2l3R09jVnZ1MW53ekluZlFkUmsyOVI0S1JyNk9ucFo5cGI5dFh6MkpPVE1rMEd5YkFIU1JKYkg1eXlobitYTG53ZGZLbENyREpYdDhVMkhnNW42M0gxZnIvTXJ1UUd2MFZNVkJ5cTNBNUg0RzZ4SlQrOWpQcWlvNVkxZkU1ZkdBSXRDWEoyeURPOXhwby9tT3lrcm83NDZGQ0tFbktIVklhQzBwT2RTaHViSFZQVVFmZFQzUCtkeHBWR3IxT2cwbUxrY09jeTJFaFFGUGNyeEY3QWFSaVpBYWp3a0tQVEtHS2UxTFhBWFpkalpiNjhCVnMwVFQ0Tlp0bzNuZkQ1MWZVWW10OWVSUmdyemhmQmg0SFM2OGZ6enlVcDVhOTNvS0t0ZUdzWm9RakxlWG1rZWxNQ3hVdDJMR0xHcklVZGpidTlVWU9ndnE1Z3FNblo1N0hzNE05Vmo1YjJDTWl1eDB0MFE4ejZvanVhN3pTbmVKM0FxMys5OURmTU4xQS9KTUVsNWdMWnZRQ1VRRm5ZSmhYLzBWWHlZbFcxYmJ3ODNiWmNkYXdQVXdpK1hQN1ZyamVOc2lKQmVKbWlGVnEwYlozbzUrSVcrbDVRdWo4elZWYW9FWjA3RUdMUTcxcllDWHZpakZVMlZRZXZvR0ZKdjJZbnJrN0NGQWZ1N2Q1VS9kc1RXdDJZOVZuTm45OTVyN1ZuS0wvRTB3S0ZWRTdRY3NDeEdXb1ByUjZsZko1YW1CcS95Z3lLSm5uOEQ3RzdtS3BhWWtFNG5BTnorcjBPYWU5RXA4OFRZTmpXcGErU0czZzJXcmtndzFrMkZnOTVCaEYyN3BXNkkwOHVxT0J2WjZENEh2R3MrOENhR3JYM1FLV3FzUG9ucjNobHdRT3h2bWhXN2FvdWNveUdqOVE4M28reXFKTFBxbVVhTnNCRmJYSEhnQUNhRlcvdkFiWXNJajN3QWN6VGxpOUcxUER5azRpQWlWNUNLalJmM2pPZ2NkYTRYaXpwS2pQTWJ2d0xNTHRvSzhXY3VwZFhnc0pPV3YxRmlVc1RvcCtUOTN1emI1b0UwZ2VGN1hPZ21LcEphQ05yYlRQMTdPc0d6VUFZWlZTSVhzbEJnc1h3K0dkR3RkZE1xKzFpeHBaNVVGbmlHMkpXNyttUUpYMzBQaFlmZTJmdkRDOG1KVnI5c1lHYlkraVI4UzU3L1hZOEhFcDdEWVdBblBkd1JwcklRYXFoT0VneUFzSDJJUFArb1RWTzhIRHQwQ0ZjTGl5RXhpc2xGRU85OUw3dWZnVVJ4amVFZXFoWW1vWHB1bDNFYXJkOEpqbEZSWDJFb3pLVnN1S2FzNWVSbzVqL0I5OCtrQ202K1JMdnl0OU9aaUppMEJPaGxCeWdpV2FuZVprdWs2QUtKWGZHdzFZYTYrekxTOUFMaVBML2s0dTlVbk5uU3hGL1pUNGJSQ2toUjg5cCsyRkRrQmVtZ0JWRDdLbHZMVmNKWHFxZEkvMEdWN25ZRnB3VDFYV0FQZHFrYzcyeE1HRmx3dTFTMS9SQXhKdkN3TEhPZnNQaU5EbU5mVitKMW9kQlFQOUNsMHlWV1ltOVVKMmd4cVlkNHozZnpaWEYvOEszN1p4VlovdzdmRzVxYVpqTjVEYjZVUkZZOEUyekxoRVN4TEZuY0F0NGhxMFBGZ0ZyT0JPUEFkbE5GWlRIeDU1dWNNNkhVUHh4YmRQZ1dhYzRHYnBwd3BQcWVJZjhINlFxSnJOYytiWm9TY2VCcVIxUTArVkFjemw5TDlLZkVLTnd1U2REdFhYV2crSGpTQkxOOSt4bDBJU2lxRjNwS3puTk9RRU9jWXJEd3p6SzdUQlJjTTJ2VlVzS0RRMXRnRGp4ZTdaZVhMci9IZHZ5RFBHS3FzSEFEWnIwOHhUdXF5ZHNGTjd3ZGNXMGc3UEQvT1RnenljeWZzOWN0YWFlNzhON2ZBSVNWM0lvNHNGdDk0dmdnWVloaUN6UENqcXVCbVA4ZjQ1eVhieUUxdnc1L3RBWTVGWFdZV2lCY1RmVEpZbk52QWtPYXhna2o0TjFSVXBHcTQrSXVHb0NVRCt3NVhHYjJ5aHlnUHg5djcrZ1NsRmdNKzlUTGFGbEFDUG5PRGtHS3IvT0xBMDhpcC9nQ255bE5DSVYrL3pSUktOTjlpV2kxZk5QY1dQWnlQVmVLQTh4ZTRUWDRGRGVpeDBsV2JkcWV2cStlQVN4NGNWS05MTVhLSEFqYWZwSUlqM1FINWFKQ0VPaUQxNGg1L0VoN2g1U0hUQ3hLNFA1anIyemI5d3FDZVl6T0xqTm81ajlnVGVCV3NPekNXMjN0Uk9BZzc2Y2lCV3BuODZKcXlwSnQzTXhKYUJXdXJvdVgzSFlOQVN5ZHFvdEQrWXlZQWtkbS80b3puMlpxZkVZcm5rbVZ3UFB2b0E2VFpGK2k2d2FWdlgzSU15akZETzF0TzA0U3hBM09ZUU9UQkRpTHhEQnRkY09Ic2dNYXFKR2tYN2NNWGJQdkMyRmJJL2ZYcjZ6Sjhrai9OZmdsQVIzcC9PcGRQWU9UVXJqK1RLSldrWEZlWGJQSlBRWlVFbWg3RXlPYWU2cXdOeVU2c3pjdzRFcFo0dnI5OEt6aSt6WE9nUjN1bzBWU3hqWjR2N0c3ZWtDTGtEZ3VyM0JRUmI2akovUGJyY3l3MUczNFpURlZMRDJjQndYTUozSlBKZmdtK0g2M1gvVmlMSVM4THFIUmRMNmJmSDJoK1dsR3VTVWlsVzhsYldPTERnV0FoS1Y0dGJDNThxZEpVbmd3enJUT3owVU1sT0xMOWxVSUxjTWc3dy9HWHFERmhEc1JwVnNtRFZucExZMXQ0MU9KQmhiMkMyMnFpcEZXQWg3by90STVoeXRadXpUcnhwdVdoUWJhTXFBcFFOZkdrZ0ZLbXUxSldWSkVCY3YySFlRM2toUkdyVitKK0t1SVBBYk9mKzJ3aG5kcDZXMXJzWXZYVWIvZ3FOdi9CVkZLTFlnTHlhdGM5SStCUWlSTlVuWkFWbU5FcmlFb0F6bHMyY2lkbFFtK2k2Y2wrMHpxcXdwZXdXN0ZxYVhQbGZYWG1DRFQva1U3T285cG1wTG9UL2dBN1hmU216WmNrNUZYTWRhNFVRNlRkaEZNdXhLYUFvK1BEVXpEYlJ3NmtMdHZRWXNuY3YvQkYvdk5Xb0lvamFZNVBOUUNTb1pRcUU2UFk1Zy9SSlo5cVJiQnBvWkpJTEJWSmN4dEpKeGRYVzFtdFMwZUNuSlVuL1JmZzZ3MFRWUWpxbjVoQWlNeW1wcTR2SkhrNUxVOStIUm80TnMrc1R2RC9vYVEwN2NWV3VwYUxsMDQ0VnZuaXFSOFg3dUNDaURoQkU4YVRpVlFqSk5uWEtjbmhRc3ZMZjhBV2p5WktyaXBsajhBRERiQWRlemsyV0tFVDVaL0tPZnpId2paT3JvLzhMTUd0ZisxMFp1QUxEK2w0YVE1N1VPcFRBTjFzb0NXUE9BWDI5Kzd1MHVwdFhvWWo0VVI5UjRuYTFpNC9ZbENZeTQyWkRxSlB6a3Z6OVptMFVRc3VvVVppZzB4aUhqVW1WRng3WCtoT25NVUxuYyswSk0ybmJNQmNVbm9uSTM1OUVGV2tjTGdhQXlJRXVTUnN3eWY5YTVMMFMyYWNPalQzSG9wK2hHL0d5aGdZdzlqVWdSN0JQcENDZU5sS05ZV1FHL3JIL01Ic1d1UFRnaURTZ3orallpQi9yQ1BlNjQzVFRlSlN0Y2Q3VyszeG1vVHFscitMMHlFdFVrZk9jUVd0L3hyZWJLWWg0ZXIxZEJjNzhHN2NIRUYvU1dGRzdmTHJBbHhDb0lGekFpLzVuT0lNZlBIeUxMUHF1RWZWVzZERndqVmJ0ano1R1FFYzU4WGZZRVdVNnhpTkFNSHQ2N0FodWVuUnhhV2tGejE1VzhaQmFVTU8zM1ZGSE1JZHJDb0Vjd2ZhZlU0bTh3VVlQRHFaVzlFUmNsZzBRTzVnK0t4dWd4UUxBeGV4V2FSWFp5UXVkRzUvWngyV25TU3lHRjdNYk5uam5rK2lkOWxDZzlDMXZMUHdHNmhZQSt4OXQ1ZzZ0MkIwbmpYaC8xMHZkWDM0Z1Exdlk0NXlCWHRnV084dFFNZ0lEVW1oN2VPRnBBSUx6RjBPUUpZR2ZtYnA4aUNtcjhqK1p4cDlUYzNWNC9xYzRuNk1mZHVuMnVmaEhkNGNjMTcycFIwY3hPRDh0TzE4U1RwdTJqTk5zUFpvYkdrNEc3NkpYMDhXL3lVUC9LNVV1N3VUUUozeXdCK2lxeCsxQ25rWExZZmtNdHN1a0xvY3BXS0MzclkzUTUzNkRDeWkxM0tiWTAwTjZmTlpWekhwZ0VFbWVhQjJiQ3BzR3JuWHdqM1pVZHFUSUJLQkNHVUx4YzkrbmdhelJiWCthVjJCcDZwdDJ0ZHpTV0FnbFJhb0lmZ0t4cjd4UjBRUldsaHZqVk9GRE1YNUxaaE95cVNVTHVYSUhWT0lER3FOcWc4d05CWlVjRWIvSE9xR0I5YW1QNmNJeEFJRGNEZUtqeVhvOTVWbWFDWjdEOHZSaTdRRGJWYmdVbkdIS2RTNE50ME9NOEx4bUs0RWVjS1E5UklraURqUXk1MnhWL2dqNWhWZkJpYWhQa1BRRUsvRGN0S2NBVUdKOVhPMVdSNFdkQjErU1Bya2VtVWEzRUZ0TG5sQUZKTjBYMFhkTUJTSHhUQXdKMXlnYnB2TTRnQnFrVmhYdE9nbEFESDU2eU1tMGZiWmNEZzJyd2l3WmpnNjZ5S2ZDaDl4cWZaeHJSWUxOWnRsUnlxS2tQM2hCRVUwT2F4bmtrck1aVVVHYlJsQTliNXZJcnE5d25GYUt2Vy9XVXFzcUxxWHExZExTN0dKOG8yRkMrMExBZWtCaEtEY1EveW1ka3NvREpKTTB4VEFQVWlIaFhXdUpZYlg3eVFmN2NoVHZhOFc1UU54WFc5eGdreFBrTHFjUS9CamlaUWozRE5DdEo2V1hiN1JkaXI2bWN3SkMvYmFCRjhVZURVU1ZpY3VxbUxUY2hTa1hqMTc1ak02T0wreFNma2paZE9YMGVMSUk0YzdVNGljUUtGSjR4NnUyb3VybmFXL3Zac3F5SFNVWDdwdUx4dVFyd3RHY1lYTUMwemd2NGNQc0pVMk9neDhGRDFxUzY5R1hXcEZHV3FSQ2NCUUsrOWtoL1RKd08xaXZDbG5veFFvUFhzTXlFTDF1czAyTWNhbit3SXFCL2ZLSkZkbVhrWWtKM1A0bnovTitFMkorK1JsejcwNXpZcVdDNXRJWHdtNko1aFVaSUVadi9ZS01uemFSdzlRM29zSDVMa1FpcE53Mkp6WC9kK09EcURUaUE4ZG1WdzdiZmg0ZnVsVWFFSnJyWWFFdTFOTE9nL2sxWXJwb3htUG5VUnRoQ1lOZXJBdzZldnBZM3RoM2ZMQ3puaHUwb1ZEWTZFbTJhb1NsMHVFT2tXSXVoOG83Uk9kellkTFdSaVRtQ3FIZzVveDhLWjJJMWh2ak5pY0kzRCtXaFVPMW9wK2VZeE91OUpOZnIyQnRxOHJEd1pWcFV0amhQcDQrS1ppMkJNV2dlOG5uN0xLRkRvcFZERWlBUUdOUU96YnBVMFhxNHRXaWswSFVhNXRTaXpMQjlqb043ZWZudmdUMU9nTGg2SElieW1rRDVVYUhlMU5MTDk1d1A4NEVlME83R1RFVklFSVY1MldBcktKaUlQNEtKZHgwTE1YZ1Z0UU9ibldNV3dUeGlPYzl4N1RHT1ZTOHRFOGwrbW5OMm9ZVzYzZ1pBdFJRbDd2UjBHUUNEY296Ym8ydVFXU09Gd2R5NFlib2thcDhRMENua2l2Tjkvbjd4emk2OGxFTmVyLzYxVnRSdTU3ZnlOTk5PbWJaTmN3SDFCRlZPWFhKSWxzbzNWcEZhanVvNnJrWnhzSUpDL3p4YnRTWVZrVWdsakQwZ2R3eVRxTlFxUlhFcm5LVWVUTEs0YUNCcGtIK3UySXVEMlRxNmt0S1JRMW1JTDJhNno2ODdIRG9YbXBTaUNEN3lYdDlIMjJEZ3NqWVZvSW5XUEF6R1hZZjlrZTFKVGpSY3BJelRHaTFCT0JTSkNyRS9xVWNEYk5aYUJWSU1HNVNIdWtLYWRYdEMvMk5NeDA3RDZDMzA1d2Q2Zk9vazlCUjhPYmk4OEF0aW4vSVBmMHY4djZkdWI3VklwTnZlLzJJdnR6RFhrS1RMK2YraFZ6NGxXZDRYa2trUFc2RlpNNVhBRE1SeDY2V1pXN1UySk1TclljWmJPeWNmWjJKb0ZnYnhUTGR6YlJtKzd0Vk9RbDIvZUdhemkvNnRDaXNxZDFsUHZBVWhacG8yaHFVcHJtQmhYMWNleUFRZmdpZjZOQTB2akpUbHVyUisrT1RnMTF4aC9odzkvK0NWYThuQnhvL2JoSzMyQXhOdTR6YUtwWHFxTW40NXlyZDJwTDh3UEdBeVl1dEhYWWN3cmJ2c1QrcUJCc0FMVHpVQW5YNHhXajBsMmFUYVFWRnBQR3FYY1dBZUNkVlplL29tT1Y4cnFrRnBCSVRkbTZGaXoveU9DcVBLRDhVOHVGQ21zeWs3VjZORUJ0R3FoQXcycC9nQ1dyWXh5bWFBOUxIaHZxVi9GNWR3RXpwRUQ2Ly9aNndscGl1SU8vcUZRY3ZLck0yYVFEZHdxaDBCbVVGbU9jYnh6ZmhwNVJMdXZlTk1odzh3cjlxb2Y3Wm4vK0Nid21qbkNwWXFPZ3RFSkt3d3pQNDA5ZlJScjREcXlCRlBuWGdSbEh4UDdFYVFpb1RScGVTQWxzQXNXOWRpM3Rld1J0SC9oZ1VuL0tkcnNxMUl2M2pyaWo4OW9yazFqYW5UNmJ0QmU1cCtMR3pUU3hOcklrdFNzajhZT3Y0djQvem5uWGQ2QTZhRGwzZVp4RVN5TENFNmsxVVNSZmdlUkdaWUNtcHJkSUhoeGNMaEUrZXZ1MjNQRXJJYVdpZEp2YVNUNk1SQVJDWC9BdVVlOWxhQTJLeGNCL0FKcXpTN0NCcEZHcnpRN25ZSm0xK1VxVnRDKzc5ZTBFM0VsbGVhS1lUbWdOSU8wa3J3TXhtelZPUUJCbFY0d3kwME9rTmV4Snl2Y3k2ZmplZElPS0xIQ05TZ2FUTFNzTkI3bW1IcVF0OUhJaTREOWZackpyTjhpN01BMjdnSndTeUFLMmk2dUFJODNVOWNMNU15SmljejE5WkREdGpNVFRybDhMK0M2SWNJaWZQNGZXNmN5eC9qY0ZXUzlYVUhXa0J1U1lSZmErRzRMU2JwbHhwRjhjL1ZBbExhK2VhQWRKbExBanNMLzJMTXQ3bU9HZnhzeTdYRGg2UFVKdkpiMGozeGhjN3BtT2ZHdVZwMkdQWVZybzRybVh3Q3ZzTG5La0FudG85NUtpRHc2SU0zZFhsaU9CSUY0NUhldE03a3J0c21Cdlc0VitYQVhuYTRrd2IveTJ4azNqTEl6UllSdGRaV3l4MFk2b2x1RjgwU2V1WFozV3N4TXVNQ0g0SDB6NXVrZWZyQ0NQajc1ZEJWOHNlOXVrN09QNWVSZnI2SXJkVkYyWkFMakZzZE9IRThJV0UzTFk0VE93a3VKblhCeWZxSEdtTlFGOHdwZFg4SFdkK2FpNXAwTlNKSlAyVnF5MTZZTjdGV0RpdjJhMytOZGFRRm9nQndIeXRJdFVRbUpWc3ZNR3Mwc2lKdlNoczdwTVRaSmtTVE1KdWRyK3JXdngwd28weUwwaW9MYWFTOW9Pdm1BR0lBTTEwR2F6QnhUUWpTRkJKendCVkU1K24xSDI4M2FUdzAybDNqKzQrS00xNGRIMU5YZFJPYlRvN1hzc3NFcS9LMDJ2OGQ1NFRKT0NQdDRPRVV5Y3d5Z0haMzdkd1YzclpaZzFrQVliTmZJbkFpSWo3NEY5c0MvcU1Vd2IvRngvbjhaUmFzMzl3a29ZK0tMUmI0SC8wM2ExWndQbGJ1aUltZ3AzVW12SlJ0eEc1d1BZWmlPR2dETW5rbnlqY0VSV3ZrTnJKam9lV0VTSlRZbXEvUkxlQ3FIUWowT0Z2bUR5clpSTFVpVkFsUGZLU1oza1l4ZFJGTW5Hc2FjNjZHaEh3VVNENXpoQnhxNEJvNmNHSDFDeERlTnlJdk0wRDlGalBXMnRrWld3NlhTK2ZKZUdRM0tLS3VPTy91RUJROXlXcDNrbjVMMUdubitHK1JwVzViTGdiRTFyN3cvM0JhemVSWEZnSDZEV0J5OTEwNnAwakZlVFFNalJTZWdGdnY5Y0hiTEp4VGNROW9YWFpFOU8rcUxHNnd2VkpiMXAweURXblJnaTR6Z2ZPSm5IS3pMVDJZb1hMc2dQMDlwMXEyU2lFdVdJcVplcjVncHgzeGdxNEtPVWRlYjBuSVh4NGZzQVd0ZWwvSVovbDRRZVM2SHE3dG1vUkFuUG9nTk1FeHdwSTVSb0tvbzdVMi8xc2RyRFJ3dGNDZ2RHYlZhUWJCSTk1MnB5UnhUMkRnRU44VEJ1VUdNeU9peVFaR1V3eFd5SGh5dHUzY3B2SFVrREQ4b3NKREl5Vm95SEYwQkYxblVWZnd1ZTJDS0FhemdxUmxUbDRMdFh4dmhKbWZQNkFObjE0OTNIc1RtemZ5K1N0K0NlKzQxTUtBTVA3L0gwR2RzVVhidDNXYXRPdGRXNUZKMnZoUWpjTlR0RThpeGlLa1p6Z2MvWnc3STczbUhKTFNKTUhlMzR5Ukpxb1EyaDBZV3RMYkhDcjNTVkIraks3anpxV011eVhLWDllcDE1bi9WbWpaQkQzWTZaWTYyOE5iZmlYSUsra1ZnSnRFc2hJSGJnc3hOU0VteTFDU3h0OXk4dGdsMlJvYmNIaldxYXY4aTYxU0pCZm9XSHpwVHhHZkNVKzMyWEJSNEtZNWhSajFRajBvM3lyZGNkek5OOHNPSHk1OWgvbnl0K0Zjb2pxQWJzK1FQRDRXQ1MzWmJGYTIvVDFKZGs3YnFmVzZpTUtUTFFyeThSQzlId3pvZzRNWXVmVWxXYmxzakw3Q3kweW5hdU04Y3o3MzE3VkhmaGtYMlE0N3U2TUZtNGFMcnVuSHZuRTlNRXN5dE02OWxvY1dCMHppT3BReGhmWWs4Uy9HL1I1ZHlPeE9hR0F5cHkyeGJYK2Q2VHFDM0UvcHUzbjR0Z0lRNTdrSkd0Lyt4MVUzQ2F4b0dOU2hMZGZvQjR3V2xOR2YrRWlGdmgwanRJZEhGRWVzdmwxelV3VkplbUJ4N2pIdVhNSGc1RTE5TGFCY29JQXQwMzVoUGxld1dqb1p0Q2RKUzNzYlkvZ2doN0Uxb3diNG9KcVNtMS80clJvcnNZVStlVER2dWZSTFFjMUlnc1RVWnljOWh2d1dYRVRSNHZTWitIQTZBTElidG9NZjQ3djFVODNBeUhIOUg0TDIzajlNeURWN3dETE9hSmw0MFN3WTg5L3RkZlh1UnNmSWpYUldaT0kzTVN1VXl3R0JBdVhUd3lvV2p6blNQOWs5NTY4cTBWTVBPTjRZQ2pWVTg3eERIajl2MWo1Q0I0UHloTnhwdStXanFMNEVsbW1kTHRZSU9jMlgrM09kVkxzSnIyREYyakp3cmt6RzZ0MWJPSXlwZXZ4azUwaUd0Zjk5Y1k5enBMTjFKci9kRUkyODRUamwyczNCM1JEZHhhM1lvTGRSV2FnSmUrVHArbmM1dTAxU2x5QXV6Q29RN3NWcG1HRkN5MWRlMkI1c05LRUZ6Y1Nsbmw0VGlncWJmcms4THdMQzQ0VzdVTlA5elk4dFRKaEtPaldoV2szanpieEJZTG1WbEtRS0dsbkVRL3NhT3haaXFicVozTEozTmRrZWdMclRvaXNGdTQxYlVjdDJrak1uK1JWL2FqaC9UL2dqNEpzUlFWMlJNREQvRTVDM2xoTDY5dEdMR1l3Rlh1M0VJM0lYdm5FT0RydmU0L2RYZHBPM2VlbzgvMkxoTFRRSEFqTDlET01CYm1OaTZwQVpuSmI2L3VOQllnSDhHeTJVY0VTQVU2ZG1Xamd3TWpkbWRyeWRUN2Y2bTBBeG5WV3ZjbVM4eWhrTEdJSHZQSDlybkhqK1pXbVY4aVM1WGlLYnBWT2V1YjFNd1ZZVk1VQzk0SnZlUXgrWk1UcDJhclZVektnZzhIZ2ViSVZlRTVQS1ZmN1Y4U1NQeHY1cXpqUGkxQXo0OTBjNkFYd1lwRjFnQ0MremhrU0VZSitJd0I1QWJWaTZ5L2k1bnN6OVZDRVBaVGdYZHVFbEdzVyt0Z0NVSTI0am42ZEF3UG1SWnhUNWZnVHZxdUVJWTRpRUZsQzBsbVBhMFlLYmF2RGw4dnJWUTNDelE0QWtEUUlSdnpXWm9uckJmYm1oZEVvc3hqN0t5L0lyektRUGoydVNGbXgzRENqZDdmUmFEaG1GOGJ2RVVpVGJaOHBjR2lQRUYzNXl6ai9CKzZNZ0NwNXZKYVF1cjg2SWgxWEYzYmZETTZLWEEyL0pQdDR3bytSRkF0L0w5KzJIWTRDTWhaREFTTll0dVc4cE1EclduL0RxS2paeWkyZjVpRkRsQ0VXZjN6STRocVJtY2RydDE4ekZtMEZjWVRUdjB3c1J0RlplRm5ZVUQ1MnhkaFpoanZiVmJvc05FU2lWY0h4ek1DSnl0d1NFdTBZdzF0M202eTRtdTNpOGt5OStWbTFqZFVERjQrb3VncGlESXNST1Jsd1plUHdXcEtRVGEwYWJXM2s3dXRVdFk4Q3QwQWFWMnZHd1o0ZkxWV3p4RDk3ZVR2dHU3blVMVUNDc2dkSU45UktzRmJnQTlUY0c3bE9tSzVrNW1TWHNaVExWYVI1WnhpTmpLMGYwT0xETXI5SVYzYzlKUVV2K0IwaFZsYTBkSFI1Ykxab3NMNnpUOTcvQVpLTjhYb292eUFtY2ZQb2k5bG1hTXh6eXE1NTJaeWFmbWIvRkEvTmZVSnVQbXZaUWhYSFRtVVBSM2RaTWd4dVc0NFBOMFZ4SkJheFF0bWJiUkZGRDVsU09oNnlLSk5rOTYvSTNGQnlJYk1rZEI4Qit6VU02RWZoaVF0eEtVdS9qTStIYW9GMHRIS0RSbFVZbnFhR2pqc01IcFBrekpxeEUyYXFtYVdiMTVoZHZNSERkZzMzaEtDcUhZSTNIWkZ2NFNVcy9DZkFyV21OblByQ3pMT2lHZEF2a0UyZk1iZUx0dGQyTlluSXU4K3BPWnhpdHRPL25ycTdnUzFWV2FMWDZzeEszSFhwb285b01YN1V2dDNJRHNnQXRpbys5eEpNVDA0WFg2SlJFVjV5YnpIZS8zcXlxMVM5bWtyZGpodVNaNmxqUHBoUW5DYmszZkFLa0grMkVYd0pYZ1E5ME1qWXdHOGl0aVg3dGVka2JjT2ZGa2E5eUxHU0dzbTIzM2p4aGRHSlE2Q29aaDlBRkQrZzh6QTE1eXc5YkpCdFUvUjRZZ3hlc09YZG1tM0NYR2Z5cjRhYlV4NnJWQWlHU0hJKzBEa1dMODBIcVhsRXNnTVd4RlNaQ3Frdm82R0l5UDQ4NE4vSDJ2OFhFVEoxcHdXZzVKNmtjdGdPTlZYVUdtR1N6SVhGeDkyZW1wN29ncDVRNm1URitaTmFUSndrbml2ZTJSeUVicFZVcTB6cHdNaGF1dTFqbVp1S3dSclE0b0gyOFIxa0hZYzloU1VyMzJNU3NUNGExK21Ca3gzcXBmendjSWM0b3FEektOd2ZaZzd3L2hpQlZ0MzZKci9qaTdndHZ2YVo4SG1DZ3F6andpRzNqNFY1d1FGT1lJVDh6RjkvWmY5VlNzWWl5MDZPQ05nN0dRSDJqZE9hUXpmaFl4b3d2MExNNXVxK015dnBRN09vbFJkd29ESlZ2ZUN5Qm1WalpMa0pNUm9ZYzAxRVNSbTd5VTMwZmNBdUtaQ2l0WjlTOHdvK1Nveis3Q1AvZkV3VzRDdUU3UFZ6RGE0bmwzMDBkRW1zY0t5Nm8wR0xlRytYOExLSkRva0hmMW9OUUNpQVBsdzg4Y3E5WDg3RnJnV3JIYVNGdmxnV2RTWDJyN0tKVTFGNXZ4a25uK1dDK0ZVZ3loUkYyWnp3OVdzMUVNVWU5TkVmUmE4Wm5JZFUxYjl6WWFqU3Y4eWpzWktCTEdEbUJYMkd0Qm5WY1BCUzhiU2tzUzZDWWFTWGRGQmdWOWxxZ28wMHUyQmtIbmFIR3ZKYjhsVzFtRko5NGtRamVLbXdlcVJTdWVIOXp0WjAzMnZkNHBtVURDbFZBcms2aURtaWpyUitacTlITVBHWDdWelRhanVhSW5QUkVNc2ZvREhJb0xOekVCSUMxMjJWRkpPWllWUWlpSTlTN0dHNUJpNHF0NkJrMXcwaS9DOER3R2JlOEZrRWhjTHQ4c2lqU2sxU0hMbzh0d0l1TUZCdVJzV2ZKalA0STh2aitCeHBCRUFMekFDVm9FUkZUWllJRncyZ29qZ2pyOVlTOGlsMk5vNG4rTHJsYXkyUDViYU4zc3EzQjNJU1UrOHhPMGFaVmpzSVJ2Vk5DTDNnN09ySG1xWXAzS3UrQ0hnTkVXNnlWL1ZRbVB0ZzJWenZRRUNYRFlNN3A1SnVnekhrMjZxSFBTQ3FyNm1vWG82L0owa0srUzFMdEVOYmlyaHA5TElaVXdiTWlaV25jbUp1VU1jTURhaEY5SjlDdHdsK09yRTVPU2hpOUovUTdmOUM0dXY3SS9qdURlNU9FTTVMTXVnclAycFdnYUI4bWdidVl4bU1SZGlLUUNESzI3cWNaQU1IczVnTkxkcjZQQU15dnBVdEhqWkdHaGl1cVBMQlJXWTg1MVZ6K01TUDJZdTVaV2J5WGdLVWJhQ1BueVJ6OER6MDRDN1c1cWdjazBjZVVnQWZJQkY1QkYwWTRCUnNiNjh0dVd4bXc0MS93b0NIUFNGTGM0cDdnNlVqRWVTR2NDVDBFVjJjZ09URzhWaTFCdlVOR0tNeHczVE1xVU5tTU11NG5OYnRxeE1IRHJwRGVpZ3NFeU1kNG5CMDFHSkRYc1EvTm1tcHd6SDZiQm1XY2ZZZ2h5U1RxUXlVUWxOWm9Bd2VzcVJCbnM5TTlDYUJONHlCc2lyRlZsVElMTW56UXQxeHVzbUFkRW1jSVVEclVWRFZtUGZabzQ4ODZ1YXBTQUQrLzNBVTZzOEUvSGNlTm82Mk0rcU5BcmEzZ3k4WDZwZjlRU2kxMFQxNXQ2UENSV2hIcEI1Qi94Z0ttOXNmTWd6d3FrTnFqRzl3Rjg4YU1VbUNQaFBTNWw3b0RGdkNPb3BnWjhoNEZvWmgxZTBOV3JRbU90Nk14dDl3K2doWWV4RkJLY2FlNEN0SFhHdW9zYk9kZm5sK0tzZE1FUGxacUpDSXYxYjdqQy9WNjBEUVVzdlBMYXRRUSt0ME1Hak1TdVVaY081dHZSbjJQdGFadG9TNjMvQWZBRitmSnRBdzBtdGp4WHJwV0x6b0RjRkVPS1NVRkRZOEFyR21EQ2NjU0Q4SHUrVDgwclBlMTd6RUFQaWN2TlhxL1N1ODZCZ2RVcHVzcGUrd1RqSnpLOWoydkNLNTFINjRVU1d6bFBCcThsYzlISGRaSVkwa2wwZDhURjFxaWVnZlZRL1B6SjdBQnJZbVgzMGhzRS9kcUQzQmdMMU9FVWEzQk13eFpJTWJSR1hKOEgrckVlS0pYT2J6cTdqTzdUcEFBOGo0UjNOdHJXSDZJT0drUnlMNklZd3F0Y0tSK3p2aFdUY2ltVkx5UGcxRjdUYTZwVmhTR1ZsU2I4bElXaFRnOWdzeVJQSVMybi83ZFhiTjdXV1hGQ1hWUlJMTWVKM1h0cTQ4V2U3NlVoSGNLbVpZRXhqSkZnRDNxRE1uK3NpOEt4UUxLY2tvcjhseUlEQUpSNDJPWDZmR3VsQ2wxK0Uya3lFM1lKd3owQnVwRzFJV1pGaGxIVE91VWZadzRFTWNCeEgrWE1TMUZIdjRib0VEU2pvV3IzTGNtRlJHd0FTMW02T1VUQlJucWVpYTcwM1AyTjRuSk9rb0lwbEcwWEhzSTNGTk5oZWh2c2REU21ZM3YrMENjTDlWRWtqV2kwOFY5ZUkzYTJxb0R0b2pPbkI3UHJ4aHR0UmIxRTVmMmIvSWhBZ29ybVlaOUdkKzNlNGtja3J5YnR0NTNzM2xRSjdKcVNWOUFnblZRMjlDRUdFaEh4VEppeEhOcFU0UmNvRDBxUW95cFRGNXlPM1dtSWFUcGlqbGxvNS9zbXM1OWdTTU5mZ0xDNitVWFdibEhDVjhPR3FJcUQweXRvN3ZONEhiMXRnMENIOUlZZDk5OGZxNUdxRXkyc0l6NWxZT2VjTlRJNmJSWDVBTHZLWHliUkRZNFBUN1ZET3p0K2tEMlIza1JCYjhEampPZzlISitlNDhXRXRJYktKb1EvZlA2Y2sxZmY1aGl0M0k1b0dMczZLNFhtTzJNeUVZYVNCMkdsdnRhWU9NdzBBdGlSOXEwcm5uZE85RWJKdnhCcnV2T3Z6OHpBNmZlc0hiVzk3UkJ1OU53TWh4WlpuUEhaR0NCalU0bjFwNWNxcW04SzJ0a1ZHWkFHU0phTHBtTGtINWtJV1hkZWZOL1U3WG44OWdKZnRRZnhPRUs3SllwamQvRkVuMnlCSnlqSi8rMnQxVE1ENmZVeFo2a3o3SUtkbVdmbE5OL3l4MEZHRTk2M2lOZTFPQVEwaTRHL20zUEttd1dQNnMyQkkvR1lJdTZVSTU5bjJyeS9wSHRORmNkd0o1VmNOb2V5SmlxemVxU1doaFZrVDdLTUFITjRTR2RaZzIyNlpuYWtsUWxHUE1NbkxoZGJMU1E3WTIzTTh6ZnhVNEZySDNJdnZhdTFaTFRhdEo1TmVWT3I2cU84ZHNNRzd0OHA4MzJiU0dqSUpEaEdKWjc4OUIzbjdzQWdrc2E2b1ZxTFQ3OHdTMjBCQm85TmRqT2hSRzF4SWpGa0svOXNRMU9NVkJFNkN5aDExeUlXMGdTY2pOOTcxZUhEU1RTRDlWN25nYzNjVTB1T3U0bEpQUDBtQXZoNi93N2tZSTZ3WHFLZjhITUs0Mjk5OS9OWjN2Y3BFV2FTeGhicHdYQlBKOExMWm53RWI3eGM5TXZKME5RK0lKcnhJMHhpNVdXN21KdUZLRC8zeHlBb2Q1Rmg2VUpIZ09NdFJzNmZhNzdXNkZ6Q29GQjdmNUZlZ2UzZHhQS2RUMEIvZ2lxS2cwMmU2QzBTTkRJdkpybnNOTmZVOUR5OWp1ZzBIOUFlSWx1ekdvY0R4cVRENlQxT2tPL3dyaXltTS9oemFKeGpuaTNlUUViRjlhczZYVGtKdkRGL0prRnFwQzlIeG54WnBDWGNHODJsYkpsZ01kYXY0R3NiRDRQd3RkUVhiL1h5d283bHBqTUZJVFh5NUpvU3djZFJRalR5VVJ5Mys3czJkS3B2WFFZQnZwbUQ5VGgvazM1elFUakQ1ZmNnU1V3Smc2MzdDNzBQbE5weTh6WUdwc2c4WXNNdmNJNXA5L05RcUFlZWxYMi9lL1pERWlZQ0psVVNqTjQ4WXdoRkpQWmhoWVp4RGJOMndRTHBJU2t3OTZDVWh2eWQ3WmVRV3RITXJaRVhrZVlzRFJPc1k5QWxQNUlKR3drNE80ekVoVWYwVElDYWdtQnNSdHBrN1JZcjBJZ0h5bHRPejk3KzZtdmZkQnBsRHY1NmtVdmtiMlB0SVRLVS9yeDRZalRHaWJwek1nMloxaFNKZWdYcmpMZ3BJWit5bVhLNFFVMGdKVWs3bDBvVXU4NWdUeFBrVjVjdVlodms5amR6dHQ2QXhvejBRcFhvQzNMdDVkaEhHSE16WWlUM1E5OGRYWWdxaVlHYlBDQVMwQVB6K1JDdWlTTU5FVW5VLzhrOHJUZnA4TnJ0R2dENUtSdkduOVo3TVV0V0JjeUlPQVBEWW1WeklOemdlSlVuMTNoQjFFMTR0dk9FeS83R1loaVcycGEzVTZDTzdXVXA4RGk1azY4bnJrcVQ0TVBGWjFDMjIrYk41VTBxVldIY2gxVndWZlZ1akVvN3pURFFTNEVtYmpHT2FBRjF5Q29xLzhlYktZWEhNL2Fyb25YSWlncHhqYUE0TFFKUE1DVzJKN05VemNCQmhUTEF5ZUNjejMyb1k5TXQyVHlVYjBoNkpFQXd0VlZ4MUVWTGpqNDdITU5UWlVobGVvcXZMTk5rK2Yxb3JFL0p0TnE4YlFETnNPZDJiZGhVRldtbXJGcjkvaE92eWhudDFPcWpnYTdVeGFYSUszUHJwS3gyNDhBekYxZXh6blZtd0hqTnVqd3BQZ29oalVIOEhKaldFTndLTk9jVXFKOUZ0VjdzN2xkWm54TUZqQmVSZDAvVG5mQ1BSdGtHOFc0U0xOREdETlRCYUkzQ29KZDdKZjFyZXpEYzlmM0pBRkVnMjk5cHBMWitaTWZiK3N2TlI3WnJPUTR5eVIrQ25ySkpvcTVmQkxJc29aVjZtRDFRY09hVWc5cnRRL1lqUnZnN3ZBdklsOEJFMVBEQllZeHhLK0J1bVhiNXdsQmJOMWg4Q3ozOEZxcXMvSzd0MFp0U2dkZFZxVW9KZmt2RG8ySzU1c0xNTzkwYXBqZ0p4KzEvSjM4dGlhTFAyN3BvNXg0amJnVW9mU2svOUFrdVNNaXoyekVIRSswMWJFTHc1RHFteTJOVWQ0R3Mrb1Fqa0ZCNG1JZ3RONVZCRGw2dEV4KzRzNU0wMWdDeFk0MVpsRVNyakYwdjlPMUhuM0VteXc3ZEM1eVprQmNoK0I5Ynp0WDRqWGVDSFljbFZsSEhkb0luSTRKbXNXRnM0S2g0dzhUUkFlTG8rY0J2TkZKelZEMi9zN0VHWkMxaEthblpVN2xnMXNFZ1pVcEo0L01Ba2lSeTI5eGVpUUkzdnpCb3FQR3hrVEpqZzcxbDVOL3JTQnQvZWMwTWRuV240dVE1VnpXRndhUVU1RWhJaHR1Y3V0SDAyZVJoNFJEQXpZVkxhUDFMbWViOWNnLzIzU0RLMWZ6Wlhqa0wvY2VkV1dtL1l6TlBNd3pwc01hSzVtQk01Q1FVanJaelJYdStWTU45anBuTU9ISzFRQ3NsRE5mejNGWHhJalRlSE9BZDB1dkVnQzdZb2oySlo1b1BFaHZNSmZuWXgyMWVIWWRaTVZQUU1nK0RHSXpZR3dSZStTbTN1bGJVS2JLakF0MFM5WGg4SHJGSTUxWWZ6Rno0WUNCamRjY1ExS2hOaDFGMG1DZHdXL1ZlSmxZQVRTUkZKS0pKQXN4L2RkVmo3VjU5OXhCQ1lmdUZRcEtLdzdmVmFUWmZVeE5VV3k1ZUZXMkN4bFl2SmNUNTNlTk0zY1hOdGZBbUR6MmZ5cEc2SHAvWmVSYjNJNTNNOEtWUndhdUYrUlhid05YNFllSS82bWxmNEFHT01QUDZJZmhxSUk1WFEwaXhlU001MWt1NlJEK1ZZRU95S1JWemN4dkR3Z0xMRDhBbWpYV2JSenVzRVlDYlJWOVRsYVd0YVk0T2IvU05LSGREVjYzSEs5cXJxekFPaEdkY3JOTkZGci9XbWdRWTBwVUlVd050UUNsL3FMWk9vZmpMdWNVSEJxSzNYRmgwcG9QMHZkN05OdGtqdTVZSU9TZWtVc2hJVGNiZ2w0TEkydys1ZHlSTXhtS1lqVXR0SzNicDZZZ29PeHJrNjFnVXE4MFRUK3BkRFhFWjgrWEZZb3pPMjFVbVRadzNIdmZmQ2VXZjRzWk5SL0t4NUx1aUZHQTdiY2xJUXVWcFpYOVVEbTFXazdSVFJUVXdLa1lhYVYyY3pleGxxcStkVDh1S3FnSjhoeTFwbURMSDRiZzE1dVdhQWpVcXJJNGNHL1NERkgzUHdKeEozUlJweVhqODJPcVM3VlRHaTIvSkgvVW5rU1hOM09GR2lMTVk4aWJxOVJ0bHUxYThxRW5nZHZEbGRCU0EvUUJibk84RkY2a3YwQzNUM2tVMEFsM3ZqNW5hZjFtOURTT2F3eUZDM1JLTG1KZUI1VUo0QzhzV2VOdmdlQmo2dWN2MmtXL0Z6RG9MbEVSUVlIQVREdHJScndTSzdSbzA0SUoyWlg4S0Z0bjUxUzlrN3pZbW5SZWVrekFFK3l0N1c0VCt6MFlEMDgxWE45Z3J5VXZDNzhjQnBJZ3pDSFFadjA5Mm9iRTRMSEFxdVdQMmx4bENycDJ0NXpjTll5dWVjOEdGUEJhRjV1elk2c29IVnQ5RFNIYXl3S1NGTS9uL0c0TGo4UUlHNExTY3p1aFJDRUR1akRuVVpqWW1yMVNCSURkMzU2RWFabG5YaFZ5cE1SZDBZWUNaWTc1TW1wVzBIdmZtYUs4eERWUytscVhvSkhwa0hicy9TWXhQdFh3TWV6SWJodzhyOGIyd3JBUXpjd3h0eWl2UkhzVzVVOWx5SGJkSVBsOUEyWlZuLzE3OVV3V3FLYlRSbFRYT2laSlZLYTQ0bUVidERYa05Idm1XdnE2bndnU1FCTTBpeDhuQVkxMUoycVJYKzduSFlkK1pNN3l2VktVditBOWI0czNpaGcvTFhWZXd4alNDM3owb0dmY2tkVDRyZ0Q0Nm1QbTk1dXdRWkdmREMwV0JyUjVmYzJQbmxkTzFNQmdEOTBSQmhUdHFBUDg4dGViT0Raa1g5NzVxa21OeUR5TVY3NE5yeU1RT29OVW92SFdWd0lDZk1takR4Z0RrZGtDMUxMUjlBWUxNeGZQMXVRUC84QzNUbEx1RnZ2emNYMDhETzBmRVJIaVdNUkJ6TUZvdW45UHVzNXlQTU9DVkRSRVJsS2ljOHZKWnFpb3JyaXcweGx4RTEySm9XeUJHU2dyZWtId1J6UE5STVVlVTRaaCsxWXA4b2lQTjRGbnRmeWhhN3FLU0xnK08wTGh1eXNOV01zZnErcmlvZjFvNHl1REpXZ3J0L2JZYTduTnVjaGQ2dnppcktReS9oVGZ3eCsyaDY4U0Q1VDd0R2htS1I0QUVFRVV6Z3dxeUJGYXY4dHNTTGQ2WlZTTXR5V0wzRm5wSGEvMElsdzRFWXd2ekFZVmJHenJkQ2pqTHdaY3p1Yzk4K1ZjT1NqaGd6YnB4UDBQTUp4TUIyV0xnUjRWWTl4UmRVblpaVEV5bVpsWit3WjVvdHNMZHBmRVMrWlBYSzRiKzQ0dkxIVk9NK28wNWFzZHVZd2RGR1JYdy9RandsT2dYc1d6b1U0b3RyZ0dBVk9ZVkRrSGZ0bEsra1FheEJwd2swVXU5UUpEdWZkWml2RHphcFBUS2IrcnJsc056WTNJZjhBT3hYRWovUTJiQitMUXRUL0c2OURLV3ZjVndlN1JtVWZOZFRPUGg2M3h0dmZ3SzVoUXg0WVgvUDhQc3Q1RzVab0pqQnZlazFwRzE0a2JsR3hUY0Nzb2xBWExPbVp3aTNjd25YM0R3alFGV1B4cEphdGRETFU0bFBCNnRlN1pCTmZFOWtXUktSaHJKSFZCdWNtaDArTmdWRDZHdzlveG9jOExNV1RIY3ZSTXJPNXRyVEtGb0VFa2gzZzNkOCt1M25tTHplSmlpVWFMMG1nSjFlSkZCMGJ1aHJKZDJnTGNwV3dDM2FVQU54ZFp4SW1LdWNMNTV1K2ZWai9IUjBud3ZIbnd1ckljMEdJVEFjcG42N1hXak1xK0k0bDlEbllHOUdzTlpsdlcyaWZnVFRZNHFpN0dGYjdQdyt1akNnRnE0Tmg3YzNuQlI4V2cyeXdPVDJTeWZvYkQyR2dhRnI2VFZBS3QrWkRncjdlT1dHVFhtT2NJa29xZGs2cjE2T0tLWXJUSHUyM1g1SE0zY04rRFBESjVlSFJlRmQ0ZVJDVm1mZHBvdlpaTUNJL25uWS85VWpoUnV0T1VZTWtJRFBmMFZpc1lnd3Q4cnpRa1dGd2wzZTV3UnJoL3gwMExCT1F0MWV0QjlPR01PKzJmZXdLRDA4WGpYMkc0ck4rWWg0aWhpU2txZ0dYQ3A0S0UvUVd1MlZxSWs5MklMY05veUcxRGNFSlFjZ2RRVVMzc3VsR2s1RG5DTXBObkM2Snl6QUtrRUY3ZHZCanVGTGdWM1F1dE9jOGptTzZIcVNsditpWDdTLzNQMEZLc1NaU09lRGx0TVhXUWRneW91elZ1cSt2cUxUOFBOK2RqZ2JBVzl1ZXRCTnBYVll3ajByTzVoREFveEIxdW1abkdEMkVwcjloY2p5YVpodVVuMWVYaTZDZHY2Z1JnazFFRzJFdENnV094T3VoN2UrQ3R2VlUybVp5T1FPQm1uNjhmMmo4WklSTlRyNGY0OGxJNFpxUkp5Y2VIbXl6amp4TmphV2FPWGFQZVAxZ1dqVzRvRUpZcnJESFV3SGFMWkU1NVNnV3VsKzZ5cU40Y2NKV2ZoOXVsT25Nb3Y3UHU0UmwxL01KUUF3OTBWcnp4cWRTdjl4ZW0wUUZ0Z0dzNVBRSDFCRmNIMEVSZ1dzN25HVVVLQlZXYkx5OG94cUtIY21DUm9WcDlYcUl5U2prV1VrM3hTUnkwS3JOZ0s1dDZsR1U2RGFvRUM5WFRjcDZnQ1ljd1RJcVZ4Y0E3aTRzQXRocGMxYkkvejBlWEVVc1B2TCsvUVI5cVhmRG5EOFdINTl0b09FTmJoSGl2TUI2b1J1VFI2eEcySEFiSUQwOXFkV0xRUmRCUi80a01UUXFlejArN3hSenVLaWpGZ3pBZHg2dUhDdGNKQmM1ZlRBZXdaU3pEZDl1YmU5RURkRWR5QitGMm5kUnJBaC9nVVVxdjlrNWhtSzZpWFp2dzZQb3V1NnFpM3RqdHR0NkRzZS9hazdjb2M5bFlWM1R3dkVsNGxCcFhSSERxN1pKWkZpa0tBcDFxWGV2L09QVkVxL2sremlLZVR3TGgvQWdDYzFhR3NsQ1B6eVc0SWs1aEJodXNjejN5ZUNPS2dsRTNrZnB3NkhEQmlLbnY1anhoTmd3cngrR3lYM1ZrQ00yUTZVeU1FUldJUW92d2F6OW80dktOWG5TV2lRREdEaVVGVHFseUpRUUdURzdLU1N5b01wRytQekpHZWFDN1hqSnh5QjZVZ1MvcThRSTYvSjdVa0FzU1RzenhXeURGbzV5OVVoN0xzTDh2VnJNSFpESXBVdFRrUVkyRmZEQ3Z1eXNGZWs4ZS9zdFlhLysxUTdEazAwenVqNlBQU0M2aGxJM2J0QWpqUnhFbFFuQVkwMU9RMWNJV2ROR2RpQU9QMUVRdDJBYWthcmtLbHdNSnlBUW5CelNGaFp6eGpxemxhY2sxRnpiZ2VOcDUvakxsU0JYZDBJZFg4M0NsbG5XWndRcThuYnVncldQVUJBLzVLclF2L21RalcycFlSdkN6ZWtKb0FTbk1IWUlFUGdBUGpVVFQ1NlBkMlFZdUttOWRsVDlEVUN4TStQWWc0anh6dXVpK2FWWmRwVjhiSnp4cmx3cmtLOVBQWklwL0k0eHcwTkZleWpMTHpYR2dOVjZsQjBPcWZhSHNUWENDOFp6Qi84ZzBhQTZURnRBS2JTZ0RiUnJ1cWd2Yy9aVUdkbjdjMVQ5RG85cGpWc3RvQllIeFpqQXVzYUxvWU1wY3UwRXdyN0x3N0FURlZPd2wxRVVrQ2lydEVBYXRXRC9hNHJvRXdnM29MM0xrWFI5akZ1bFc4czBlcW1tNUR0QnkwQmpFZHk3UnU3bE9PbDJqWjA1cWNzWFJyYVp0OVBKSnZkRjhHYjZPM3dOV2F4Snh1b3dqNkM5M1ZYYkNKcWlNTUswbUUrQWJOTVZhS29iNjlBNi9VRERDMWNZYzhHaWNYUDQ1aVh6dW10Y3lhSVpHbFJEY2ZLVE5yYzJpeExQazB2Y0daSlFZL1FYR2xYTnFIeGZudWRqY1hUczByWlZtQjMzeUtnalhreDZ5aFhpVzBzVm4xUHZlbU9KRnk4WXI1c0cyNXRybXZldWxWOXlQcGdicXNwZi8zTGxVeXIrY05taWJjaG5rVXR1WXgrNHE5OHpzellrVjdHelFWZllqVVFOcW94TlZCbHJyTExab0syU3RpbTFBdkovREpXNEUrOVIwUllEMnplS3hVWlY5MHFQOTVWcHlacTN2eldiQjBlRFQyZUpheTlmSi9OamxXcWtJdUZRK004RStxYVhEek9JVnY1QXhuWnRyR1ZERHZubXVFUFRUMFphZjZ2Zy93ajN4R1hQUVVkNjM0UkgxV2VZU21senRnZVN2VHNzcjRSWVZIdkgxMjBWQWxaQ1U0L0h6bDRyVkpGaU14RGxlYUhJWnRISUNwUXhXQWJqZzVqdUFNejVYVmlkWm5DZG9VM2dYM3Fxb0Y3Vkd1cjJnWmk3UDFjaWFZZlJKaktBcERTM2xFQVF5WWtQUkNvMU01aCtUMDVNYWt6UjhQTHM2MTY2dUJCWVNoWlEwaFpmV3RFZ2xHak1KTkU0U3BnejluZ0hjcVd6d3lIMEtPN3I0WEJKSE9RVGUydExFdWEydFJYY0hTMXBHdWRsVjYrQ1FIVGNJVDZ4dkp0dWNPRlJ3U3BGYkcwbWE1K1dKNXEvVzdHbnFvUWhGR0tMaXRteDhYaWtxd2luVmd3Skp6U3dBNnkyUk95SVFRV1dVU1l5bmJSdW5JUVZ4RlBJTTFHWWprUzRPTkVka0MrVHpWT3dZT05lSHpHSkFtOGMwK2tFZ3MvaXBvM3BXcTVyVzljMEV1amtWR1RpWVI3ZDhEWktnNjJZU3hjL0wrRWF1cDVKWFJuN2J6ZDMxSXA4WmpzcTZMNzlYa0lMQ1U4aUI0NkV3NzhPekQ2UzJ0TitiRUV4RlF5UE42K2FoTWFFenFJd1IyUDZtbzdZYlVnbWk4M25jUmMxbjNQQXNVYkE3Z0g5U3ZPVG9LaHJWUDhob2FRa0I4NFZTN3N1azRSNm9ETHpXSFdVc0JXY0hvR3BhVUdTRmpucGdrbkxEd0hFcDRQcjBLemZtK3lRVEMwMllLRkxnaWVmVjdRM2lwMHRja0xJRHhDVUZoVGUwY2FiU3h3cXlWMHBHZWdNQStDSGpoQis0M2hUeDh4dElEUVNEeGdiTmJYMVFnd0xZclVtNDhRdFkvM29LV1Z1d0dsMDRqVDV5bDFiRVlzWFRvZ0FaZWtjRGJPYkpQb28zbEFNOUhtWXdSaVRCbXpsVzFxcjVNSy9lM3h0WVQ0ZHQ2Y3BFbDFxR0lBR3QrVVVsek1lczVqcDVnV1lzMkdYZW5HZnJQaE1ub2V5OFRDeTM4alYvWGFqWWc4SytER0tXUFJMbjZYRmt0d2VicG45NkxheXpvU09yODNLdGpiL0lWQmtRQTRYMk84c016S2VJcFRLNkNuajhiU1ROMUIyZWY1cC93M3ZYVjliaG4vOFN1RVMwWUwvRDdqT1dxUXVSRk9hakVFc01rUWNnWnFFVGtDd3FPME1OMFBjT2I1Q2hsd1c2Sm5KMGU0cEpzTzFLM0NsSUk1VC9ramlPeUQrdkRqUEFjR1NCckZPbk1Ob2tmNWMyaHVPZmozRlBkbXJVS0Mybnd1NmFrN2dCL1pnRE9zekhKeWRBa3NiSGkrVWVadFd1NFFVU09qVmRhL0Q4UG1vNVBwdkxiUnJIdTN2U2R6cVUwcGRsZ2NYcGtVQzM5WGUzQlhlMlovMUo0R1ZtbDFUaGtIUUlmVTZqYjF4RlF1RzIxZHpDUWQvQ3p5Uk9na3dWbVlKdE9ZWWk3Q2xMUFZNTmpjcUsvOFZISFZ4MGNZa0dQaTdlMmwxeE03L0dpSlJWeHM4WlU3enNNZkpwajFpNUwwZXgyeEZzRHNUNU96UmRWNU9MNkdmaVdlSzg5WWswMjl1M05XQWxPNWQyT2d2eWZNa1prenRLV0txMUZ2QTY3M3BNa2V0eXMwYjQyb3FYazJhdUYyWE9Va0NmV01Sb0N5YVF4NmJuMmdKOWo1RFBabzNnME1sTzVtYTV3RTZBVnZrekF6U1RQUmlMTTdnTTYzVVVYYkt0T3VoZEZmWVJDbWYxVnFKZUY5WHhYTkJPSUlwOVdaMUdmT0pmbyttZ3A0MTNFVi8rM3BJajVGSUErOS9PRFB2MkxtUTRvSkxvakYwOHFNVGh5cjk3SUQvU1B4S2FMa1AvSXl0eEYxVlNFYkhUOUV1RmxKZ0paVzRIMEZvY1ZtTHdmd2JkN2Q1YW95K0Z2bU5kUklkSUs0aU1Dbjh1U1lFNEVMSitNekRFc05VMzI3eFFuL3BCdjQ5bXk2ZytuWVY1aGg3VkxwVGprWUxXTks2My9seHdNWW1Xc1AxQmVGMno0d0lMM3RIQ3hmTkl4MHJCeVdFTFMxOXhRMkl6V25mTE1POXFSZ1l2b1g4b0NoaUVCME5IeC9xMjFCZGFvbFFMc0o1YjRWemNoV1BHeU5sTFErQzlkdUl4Y2NFQm1yR2kwSEJHNStrNEVOanZ6aS9ja0tCaXp5NGNCdFJpV2p3elBmTnBtamZ3SlNDd1E0c1BJNy9PSjFGTitEY3ovZStteUlZeWx5VVp3SDJvQys0VEdxVk5tMzUzYWpBWjRDcGxCUzN6aHJtdStyWjFlU0g4SUszUXlqWmNZS3BoOC9GVzd1eEYxZjg4YXhmS1pvUUZFTzI5RWxRNmx0TnlrNnVYWlgraTVwbEx6MVdoZXhZdCtIWkhzRnVNclFXWUJBNkxlaldramVGMHJWdFRQRHN6VTcvRnVBRDFEVGNxUkNSTHladDVwbWZKTDFLVlJwUzYvYzZsQnp6eGFSSU9iMDVhSlpvU0JqSVZ1N0U0REQ2UlpyZWtDcGpFZkl4YlNuVUVHMFdKdWZEV3duajNhUUhCMzNvaTFoMkZHZ2Q3Sjkvb3dwR2l3RXhGTVRsTmJLdHFpNHlnazRqMzQvUmEyVitlZHUyL1pKUmVWSWpuWHpRMXdSUEFKYWxTTmN1UFRZRkhqZ3lYdjhMK21naTVnRXJXcFRIV0hScSs0b2dwSm82K2NENjJKSjQwSmkvNnlURERpTUlpd3dmUTFzMHlvTlRlbklIYVRob3dqazBrbThLQW1mVnB4T01iMXdDdHhCTmRjU3J4dnNhWjRJSG96WWxLUEs4Tit1Nm5KeXYwNFpTY3RSRUF1bGYvS1JZUFFNZVowRDFGamZmUjhUTzNHVkhtMnd5WlBEdFNvOHlaL1ZKZU1JeVRrNlludXE2Zm9sRmpHLzZ0cXl0c1FWTU9kY0pFR0tpTVhTNjZacFhDR2xTdnM1aTl6eG9zSGZib1BNNngwbzlwcTlDdlh0VkV2UHlrUUc0S2REWHdJd3dxTEtFdCttbC96aWZTSlhwN1g4Y0YydGVWVGN4T3VmSFg1eFpNMXpJcm5ZVWtzRm44cXR4b1Ywa2lmZEdINEIwNEVGaEtyQ1RmejgveVo2TnZKZkVDd0V5UHJpb3lQbnZ3L0w0VHRCK3ZXckhlaUdnNGZSYkJSaFk5UDh3Nzl4V0pqdEZWUHVFZWI5OG44bWg0STR6d2JIS25pNU9TbmVxaFRrOVk4TFYwbEVKWHBhbXczVGplb0NFRDYyTFZtdEFkTFpWMlBjT2tZS0VReG12RHZ1RGVuWDBKbW5nV3p1S0t3M1RKS1ZsNmFpbU5WL2xjbjR1d2dla2xzdnE4NXRFUmJzc0NMRFIvajFLRXZNdlZkUXNDTGJaemRzOXhFY0tLLzlEdlNnTWpMYkF3U3RVM1dlazVpY3R6SThoNFpXWDJRS1FlWElRWHN4QVdsUVBUVE1BdEVJN1MrTTBoREEyMWdZWHp2VUY5Zk9pbG5lL0QxQnRJenVqemEwUUl6TS9IaGVZYXZDTnFHaGtNa3NmYXVPZXZnRlk1WVo1WHA2bjIwVDl5N1NaYklKMk9Hbnd2ZzhwNTBmTElCR2t5ZnpVbG9MdFNEdUpZbGVtcEkrYTEvZThSeklobWI5Y05udzNIREVYaHlEbXpDRDh5VlQ5Rk9CRUtrY2V5MjdPelFab0hFakRRUDZrajdpakxRQjhZMFp4Nmk3N2YrbkE3WWNKcnBUNWZzTVhvWXphRjVZeE0zZ1c0cmRGV21VaEU4bTF5dXZSYStJaE5SS3lYZUQ1b3BwUkRBNE5IWnZOc2ZCMG9yV1pLbjd3a2tvTnI0Z3JPUWZoK3RQd21YMFRBaVJGY0tWNUl5QnFnZm1JZm05N29FSW9KREpyOXRBRndKSCtVWlJuL2s5L1Q4cloxYmdwUGtWU3NxOWtmK2g5aEpINFVlMENGeEFiWTRPZU9NV3RrVjVRaEJpTnNscnZPYWxZTit5WWxzbGx2U3pUc3VEOXpvRUhwczA0UjBJdm9XVjVqYndlQ3pETjdjbGJFdkVKK1JzR2pxOGQ5TDlWY3dUdzVmS2NIVEJnekhjak4xWjFvclAyRUlZTHdHTGIvWkJjQW1kZ25tVnVnQW5Sa0tWWS9VRlhKZ2dzZG1YSUozV2NON05ld1YzMmh5TFczS21KeWJOZTF5WkNSWXhSS2FXb2dVWElJVHhpeFhGU3hEQXE3Q3N0b2RweEJCYnlVRUVYSTBYVTRVRGx3ZzIxekcrUnlybWFuczVJWXRIN2JpNXNIQnlDYXZIT3d5YiszTUZSazFSUGplT0VYQjAwUUUvREtpcWxoWURScE85end5TmZ4OWN6SlZkTmNEbGJ5MTF6dVk3akJMMTRUVFIvZnJXVUhwMnJXczZyNXpNeFhWMlJiYVlQOC84Q0ZHd0hQTHljKy9SUS9ET2lhVnJkMFAyOXVTSGJOZ2JvQkMxTHFJZkpCQzFqa3IyeWNoYXUyam4vVVl0NlZKNlNMUDZoSDlidlFlUFBodGhaT3owNVFHTU9yU1lkOXByNE8zaXFYeUs5Nm1GU3ZibjkwZXkzNUtndVloYzh6VDdqd2tFNVJSRUNmSm1OME43NnZpNHNiZXJiMHhFUUpXQVVmb1IwQ3pUaHh0SklvYjFuRUkwWXhuN0xqNmlTV0QzakhobGxtemlNVTJOMm1rY3hVdzRHR2dYY0JKSzhiaDY0cFp6S0hMTVhzV2diYlRNRjFjekxQWkxDR1B2V3o0ZWxwQzVDUEtVMVA3d2VLRy9rT2F6U2szSUY0RVowc2gzWGdFbStJTXJtNXhnY3hsM1Y0T3d4QmoraXluQzRxQWpxMy9EWHpmZjF6RE1nS2Jydmk2MURvaitnVGFPNENncGZ5VHZwVGxKai9SMkdCWStqYlJGRlZhVjlIN2hMclZFNHJPLzl2VHZsRDY5dmxDZXBsYUFZbkluTjFUS0tpOC9YZTYvdDBvZ0VkMG5PNE9pQjBMR3YxT1BMRDhOWGdpMWRhSERSSGtwNU5XNDZmNytKWUJFNjBxbmVFZzJnS0hNV1lIamk2R0pWVGcxekVTckVYVkJjaDVWRVpJaVd3WjlxY2VSNVVkSTQyOTdGT09yOEZUaEZVZmVJM2JHVG85THYxOVJXZEZ3UXg5UHRTTkpkUk8rWnNOV3M0bEUydGY4NkRPRnJlT3FYVU0vNEk0UWtFYytyNVo5dFFVSWJEVXp2elNnSSs0anJ0KzNpS1pGRVZWWVRnWkhsZVp0SWI3a2pDd2FwU09MNno0RS9PRUQ0N1MvTWlmamwvMy9URGdqODZseERrYnVESHFPT1A5cFFzVkI3S0ZJemllUGJKUnVWRzRJc0x0eTh5TzZDL3B3bHpTaWRrV2RWc3Z0Q2NNMnFsOTRVSUxMeWxxTTNtOHNDQmozL1ZjSEZHYnVIVzRid1V3NW02c2UwdkR2MjdtMW11OThCMzIwRUpnU1h1WU5wVDJMR2NuVnRKcEZjYmtJRElWS1o1QmVhYktEdU51VXpnSWJ2b2NWVHNDWk1RQ0JNNWFVdEVSUDIvVloybHFvbXg5NTFtZHZ4NWtIK1ZiMEprUVdIVEtsbVBRS2lMbnJvb25MSmQvbWdqWVFYSlJTRHJ5ZGhQaDlXazdHMkJrb2ZoRlBYQmY0a2VzQWdhRlBET0Qwc1d3MnVGRVpwNzB2ekp6dnBIbGVuZ0doOWZVUkEySCs2NXVDVU04SDF2c1NZeW15Q2NjS0pKcm9pMm5ZYTI2UmZTbk8rS0lMZGYxVzhsbFJJMlgvOWJRMkE5ZDNuUGJTUVpDeFlpOStGVkpWbUFtOHZMdEpaWjRyZkYraHNsYW1zRGVRWi9OeExXQS9Da3VQa0xucXFZaWJPQzFJalNsRENkNldJUHl2elNqaUQ1dWtrSTFjNnJpYlpCbHppdUVRS01iWXpjTCtEdWl4VE1iZXBKLzQ4SDZxbndEQW9pV2dIYllQUm9Pb2s0M1diaUlLUUpTY0F1NVV1UC83M0Y1NWFXWU1MZTF6Vk5RWm9rTEYwYnBaZ0g3Z2huYkxIeERhcWVFSGdWSkpaZWl4ZE9XYXBmY2lrL2VzZkNiTEF6VTM0Qk1lcTQyYWVkOXYwWE53Znk4VmVBWkEvTlJ6TFBwOTYrMFIvd3BZYXppb2Y4VUEzZFVwZTRyWkUzN2VnZ3hja3BZblM3bWhrWEZBOUJXL0RZN1dONU92c1VIamJ0VC9Rb0dKL1RCUmFRRFVlcXZPa05yek5yUmJ4VVV6eUpEZlRpUmQzc00yUVR6ajRSSWxvVWo5VDVzeTdIZkIzcldOUHBjSFJZSVVpYTZVczIvMWlwOXFoSSs1RUZiMVFhbm8veS85ZzlmbExnTGhBN2x0cnV5a0NtWHlJcWJEWi9DY1pjb1hDdkVPNFJsRDYyWENZZ3V1d1J5a3lJUEU0TVhtQmlCT0NidTZkamFBVzJIN3dtbVRab0VyYmZaWndrWEdJM1FNQWV2eHllc01QNk9nUjhHWW1oeEE0SjJnWkN6amNEY0VmMXU1aVFoQmd6em9wYlc3MmRhQUgyWUtUTEtmdnJmaGluaGM5L0oySGprRENWM0Y5RGtodFQ4MjBrQ29OVFR2RGRkVHVWNktqSGNKUUxEdVlqejRUaUZjQmR4bEdEdTVPdGJ5aDMwdXR6QWQvU2VzRExNbkR5UkxmaDliZDdHdWR2TTY3YmFjcVVnU01RVENUQUdhcE9pWFJUUmVlY3RCUFhJQWlreFJ3T3V1ZzJTa2pNV0VRNGtHTVlQSi9ZSm41MHNHMW5GZXpEVUFzemh6dHMwczJpaXdLZWFtaTFpODExaWpWWjdVanJEdjEyRCthTk9FbzhBdGIrMXdXUElZODJvTXZYTENWTm5Id0U2VkRKM2pIYytsMGtvUGZqUWZEaVhrbFZGeVo4L2dBYTE5VmFTOEJJUHgxcjF4RGNuNUxYL0lvdUgrTlNNK004YkFuZlVncE8xUVA2d0dKK2pJNlFFQkg0YjVFTTNEREo4ak5rK2ZBTzd4aStvMmJsdWlWL2psaUdmcE9hRWNSZFFoR3RuUTFNRmxyaGlVK01kcjhYdG00TzN4UHV6ZTg4TWExelRFYW41dEx3UFhaK3plamRXMG9YUzdiTTFmTHNEcTFtTGRCWGlBNm1SemxwbzQ1YkxWQVdRaDkwZUFMQzB4bHZqSlkyQmNoRHdhcUlyUjRjRXRObXhxZ1pSdlIxcWNUbFZ0SlRMaTNxdjlsMmswNC8zbDd0ZmwrUk9INm5IUy9HalgwVE5qc3RveXNDdEZLWnNFamU5T0VuYjZScEN0YTl1NUVoSVlGU205K2hiK0hRalFTV1IvSkphcTBkRGtIOTRpbmQzUitDK2xTYTdnSWtzZ25FRFpZcWZ0WWk0eHVqM0wzTy9sVmtCRnhoK1JMMTZZTDRYSE9wM3BUTU4xckYvcHRZeTBnT2FIZitlYUw2Z1RqbkgrRU5GSzFIbVBzR2dWRGQvWDRISXFHbFozaDczREdrMWlUWXJyUDJQWSszc0Jwa2pHUXhYSEtFeWkxVWsrWkVGVG9TUEcraVNFV2VMVnJEWE92UjFyV2NtcjJ2OG1qd0RnK1lySEtBaVNEdFE1VkFjRkl0TnExQlpJVnRTQldGbVFEMkVoYVN5V3Yrb0VyV0Vpb3FGUnMzQjhubW9RS3d2RTlzYXlrdkZyaXk1NzE3ZFVlMlI4SmVxK1A0ZXdGNW9zcGpzVjRvazM2VWQweEE5dURaSVBFNGI4U0NkUThZNW51NEQvWm41VmF3OEdMa3U2MG1qUkExMkFhTzlyZm1MNUxQTzlQTTRLOG1UUjhBK1lWb2V4d2g5c2xFcExnTG44OHMzVXB1WThnbFpnNjV6cVVCRFRoQ3M3WDZoR2M2Zk14dDBpYi9kejhKY0wzQXJncGxzM1NHV21pOGFLNU96RWozOENjcEFXWVVjYVFCWTczVW16bTJPb1BiM0ZZMFAzWHZheWtOREYrcHNQaFlYMTdJdGs4WlRwU21aeFBqOUJsbWNScmJpQTJyWkZ1YmU4Vk9HK2FSS2xtTU1RUzdjTE94SVZrWFhYTUNMM24wQktsa3Z1THh0Um1lcFk3TFJ4aEc5VU1LQWwxRjN4L0FuQzM5aTloVllZaXk3ZUZqWGc0UkZzYnhwM1B0Zlc4eFFHaUFoYWhscVJncGd0VGtIR0lSWjY5ZGsrWnA2WDZtU3pEMmRuUkcvQXU0RXIxUmU1OXB4WkI2WThZUXF3RC9mVnZTcUUwcnoxUUk3TEg4M0ttbTg5eFFSTE9xSTRNSGNDeEVQQnVJZVorVXVOMEtjaWYxaUZ5cEhxdFdzVXdnTlYrekN6SnVOamNwN0VuU1lGcjk5UDI3d2dqd2pxYTFyS3VJMHVpWmJSUDRrMkhndWduSXUxYkoxY2FiTEVkRWhNRGVlSWRRWUdrUlJHV0VzMm9vZDZ2QTU2citpSVNQbS9sRnFheUFxeDQzaWs2emk1ZGU2TjhhR3djZmFKU3g4aFVtb0phTVlHQUVnYk9pclFERmI3NXpiYVBZZ28rcUxBc2MzdDhQMlFndE03RWE2MCtkYVdzMTlXMzhBem03cCtzdDkwUEVlcEhNNlJJdGZsYmRIdzVacE83OC95WEtMOGQ1SlZyd3o1TjhxRjQrVlVld2JSS1ZSendFZE5wTExHaHpjR1N0RFJnbWROdW00cVE5TGFmVGhhT0NmOXl3QWdvTVpnTjRTTU5haEUwWnlITTBhVDROS1N2OUJ2NkprYkU2ZFBTcy8rQUdZRXVZc25GTHFQMzh5V2p2eWRkQmY1cEpxOEhkYXZXbUpEWmY2UlJBTGlkRTNQYncvY3V6TUpYTGZWbVhpVHpUQUNGYWYzNitPUHgyWG5DZ3RYR3dHV0ZQRzlwMHErVU5FeHR6eHRONFU5QmRDdzJ4ZG94dzhmS21CMWo2Sk1ESW9YOGZqMWljWWFiemhwTkV6T3grQzFzL3dDZHZlQ2N4SWgvOTI5V0tRUFJNZ0VVNGhVZlBPTUs0YTlyZWFhVGNDMnZFckNkZnJiVExmVXFPeGQyUWdSYTIyVitwemFUbW55L1liNnVTUUlVbFB2YlBVZUM2UE1DTzAwMmhrZG5tcEhpTDNzYVpBdkdzUUZBb3VzMXQveGJuY0VXRnJrR1A1Z1FvenpSUFRGZlgrejJJakdRc1dCZ1F4VURhNzVkVmpiQmJvVW1OWGhxNlNGaFJiNjRqU1dTc21DT3llMDNvV25UQ28zK3FvSkZLdW9YMk1DUWJLb0o5YTNid01lZnJlM3AxWW9LWTVmckgxaFBkem9TSVlEc2NTc0Z2QnoycC9UU0FYQmhyN2FXMUtyakZzTDlRZjJvSUZhdE5YQ09YOUpvQ01aL2V1M1BlVTFhTjlzRThFMk85ZXVPejBFS0VwSnhtY3Z0eVJHVWRLNzl5YWwwNkZ0bm9jWWFzTzlrN2tSZjZFNDFlS2dnazJpbE9vaXZRWWt4MWZ6UjdWT1hkZk1yeThOaUgrM2NVaFVoOUlPVC9VZk1YY29YbG9LV2VzdkllSVE0YkFWcDF4bHd5QjB3VmMvckF1UTYrb0Rsd3VKaG5HSjJrMWhJOGw4T1g0bnFGdVJxSjJReW54MGgwSXd5dHZjZnQvUVdBRzRpOTIxSmU4Yk9wZ2VnRk5RcGVRWGJ3aENmTG5reTVrOXpRTVBPTENLWEpWd2NvZFRwSW1EQXh0L25WN0o2TTMrMXR5NGVIc2RwN2M2VFdpOUtLOXlvUGpHSzU1SXZqRGpTUXFuN3pNRmU1WEo3cEtTN1IvZkFwOHRSL2swU1BweThld0tmZ0E2NVFsaVJ1ak0rRW5wZXczZnZwUUYwM2FJbS9LdFE2aXhSbUdSUklQMjBBY1hqSTd2ZmdtQ0cxN21rTmZXV1lvaW1XQnM2V3R1MGpxQyszODZ1KzkySU5zTGFNaFJCQ0hmZXJsdGY0WkJYKy85NGRIM3dPOTR4M2dDVmM5bExkN3lmWC9VcTNGTHVhOW9RNHpjRnhSNzZSRUx5bW5jTVdDSFk0WUY2Q3lSaDhoZ2dTeDRWcnpQc0pWNUtaelBIOGZUOGxsc3FCRGpwN2NNdGk5emJ5UFdVbXN0MUx4UWRRdCtoNE1nbHplc3ZtbGhkc3BsTDdtdjB3RGFubmM4WFZmRzR5UEFRaXZpVkhkK0lHbTc2TFVsL3VjTnV0UTBkYkZWbCtONTl2bzA0YXY5SlpqR2RqR21XaGJjblZ2THNYTWkvTUxWaHoyemJFaVd5c2NPS0ZPOGVrejd4TmdSak82NUJYcFdJZTB3Sm1pRjNKMGpWN0RLNDE2aWZxZjg1L2hTQlNNSTVFZ2UyN21ZVXNlazZrbEMxeEgxN1ZkdGwyRFFLOXBwbEtDZkk2N0FlczlHYW1nbng1bS9ueFNid0pJSk1jcmdUU1lMNERvelFNelhwcW5uNkdKaUpvQWtVMm5tc0hoMnVkQzlrdnNvTmhqczM5bDRINjlVN1J5VXlNc3FDOURFWjhOR0FCTFJYQ3Q1aVZpTm4yZ0g1U096K0VtVG1UZXFmQWtEb0VWUExsQ2dMVjVRNVJmbEdZSndJWmd5OXFOa3NVeFgvTU5zVEZ0dUxwbytDbDB1Q09wZ01QZUFxS2tyQVhiNWpGLzg5ZTRVeTZLNDdCQzVCQmZXdjJSWGxaN2ZiNEZKTG9EMndzNzBNOUl2L0g4TFBRRFFtWnhWcS8wOUk3aDJWL3NzaWdzcndkblhIc3JHUStYcXhmYTlzdks3WWNBS0lYcEtGbk82UHhVM0hEUUxZTlE5OE4wczgvYnFtbm9McUJPTGdER0h3WGhHYmVLSnk4S2xjNVd2SnNFekFrV256c3JPWlJLNWZKMGl5OUxNWGo2MUlJczV1V0tzTDNaekdRcnFUV0NmQVNzL3p1VEpiZmNoNGo2Y0VBOENvS1RjVHJvTHlEQ0l0UTl3V1crVFdYU0ZJMmo3WU4zZlR0bVArYndGTDFkcU5zTzZZWDNVbHhJeWd5RUhkTTd4MFBSRDRkSmppVmZzUnZQd1hxYi9xYXJxMzNIZ0h4SzJweDZ5TDVFR2hNL1dsSXZiRXZsc0wxUERxelVLeVVrZmRjSEsvV092amN0QVFwblRRUVNGbU9CTmxpMFZocy9obUt6cjVyRkdYZEpmendiOFgyd01JNGRtQ0FaZmxSK05UbkVudFR2eUdpS0lGNmNJZUs2QzhFdTREbUVDUU0xMnZHSDAzU1VLM2pBbzZDaFFZbUlrMkFVRDR2QTBXS0pBelk3ME1GeGZJa3VBQ0Y5UmNYbUlaZG9ocGtiVzlHbCttVUZyRDZkdVcyakdDeFNVWStNUDAyeHpacTRSRjlQSURGUlNWcEplUDdCQzl0czlLTjFadXpIMVZ3SitUaEt1WVFoWEFIa1RVeUFZcGsrdktvNFVPZkNycDJzaTQrcEt5WGFQdUJ1Wkpib2c2YmlCL3dsMGUzZ0RTa0w1ZFBZb0RvdVpTSUdFbk5XZVJtN3ZYSmQyUldIRFE2Q0dDbjNOdTFCeEJ6YS9yVWh4VStkVTFabGozbXJiTEJsQ3NibWRVd09INStNUlUvVE5pU1oxbnBmQ1lvY0NRQ0xUbkxkUi9RVFlpdDBqRFNja2xLUmNvWUxmSm1Na05MeHFTNWdIOS9NVndKalhWN1MwM3dkZXJTcUQzUHdYMTI4UGhFakRIN2pVQ0VIem1XZEFvbzBWTE1sWnVYZnREUmViVFYwUzVNNk5yelZSdHRvMXRXa2YrUWcxQVB3b216bXdWUlAwell6YTA0eEpWbVFQN2Z4bEhtSitHZXBFY3lrYVFxVk9uUUZWQVduekpTYVA3S0FxNjlLMDZLc3hZVmJqRVY3ekd4NVp0OWVWWUJ3R3pHVjhydklvRUpxejBxMmNoY0lyTFZhMHA1Mjk0RnVtK2lHWHIxMXR1UFdvQVVCbzlhcFowQVRZTnBUcGQyQmN4ZTIzM05wamQ3MVY0N2tUdTVscWlBZ0QrWm9tWHBNNzNyTWhCaEJxTHg1ZUJna2VQaEZiM01BTFM3VC9IanJ0VnJsUkRaMU5EQmtpTWp5eGx6Nkd2ZHNCQytwVFFXTWVkNzZxMmJsMnVHMmVUV2VRMm1aZDE5YzVWUnpzQ3pZd0x3WFBPblN1R2N5MTRaUmUrdVdtSy9ZcS81dDNVaVpmMERkdHp0SW9uTVlYUHlZUURIZEMzT2h2ZXp1emZQQnJVSG1IUEdXc3g3YktWNklVaEl4Q08wRmNEbE0wbkVWOW9pQi9TYlFGZFN0eDJIK3h0Z0RmV1BMWW5hcTdIZ05VckhIeCs2MkROY2d3a0k0TkwvQnZuUGVrcTJ1SFRFWGR3NTQ2WDI0MnR6d0dMVkl2d2YrYzFvTEdpVExqakVYV0dRSkRnSFVFamxWdUhIWFRqVFdkTjVRYzdGNy9kZi9URXV0a1B0S0VzcE1xZ1BrTmNyb2lQc0FkUkZPeisxUXU1MzJ0eU5EazVFUUpIV2Y3Z1ozZVBnclNKUXBSN3hHQ1hWdUxyU2hLZTVXWHpJZ2pCdUM4Q2diM3BoY3NqWmQ3SEs5TCtGZHFZL3FxeGdyWkVnaGxzTXNKU0k1T1puRzlOSEVzOEtzWE92QWY3dUY5bk9UM0FUM1hHMW5GS3ZaV0pBOGYrRWUyb0tjdCtYZTdQTSsrUkFhdE1CSHphMmJPYTZrRzFiMXdrZFh6SjQvVG8wZDBpdGhoTTJBbEZxWWlkZFB4WkdDeitXVUF1dTFibUZOcmZ6RmxzOCtPeW1GKzFFTlVBaFNEcUUwOXlHTlpINGp5ZFN6MUFJZlhTM1pwZzZnYjFvTVdGd25sSDZ4dGRMc2NLVWMrc1JsYmtub0xHZEJ0M3FCdHo0b01PVEl5VHpHckVOK2N6YiswdGYvTGNPQ0syQWVZVDNHNEtvVGN1RzErRFRYUG1KVXcvMVBiYndyaUZ1eXJYNm53MWhWYU1idVFSWTRUNUVuTnJXRWd2TUVQZk44UDZuSHUyaG9aWmpsR1dSb2ZvUVJIR2VWTFhBb2dSZmhaSm9ocmpJQ2NkMVZwY1NnQWNpaVV0Rno0Y09kL0IvMHhzZVlEcVlMU01lcjRvRUdoUis0ZWVGRWNYSjg4b0ZUMHpxTE1DNVhPTk1vb2hhdCtNZ0FGaHlLaFlmMjZHMlBmcGx6VFRmVktONG0ySmUrUjFNOG91NnZRSmhncHUweGVjMWQyUTcwNVhPVFh2RTdyenl4Y3NVclR3M1dENHBvRlh1M3lzN3BUeTQxVzJBb09wZTJFYmpJVTg2RE9CUGhGaXExZzFDMTBDVm9Uc3JuQnBOWkVleFowNjV3ZmNxdWZxbDB2N2k0N1lVUzBIRXVLUFREVlArK2dqTExVRkVvNm1leHM5aTRWMWJRR1loeDNETUhiUG5jYzAxNVZFTFlxdWxqYUpQS0d4c2xvSlBpanV1ZXNmZ1g3WVZKY2tTbWJnZEJ4OWdwM0pEc05BZkpqSHVrS2xuTG5SbVhWMXZ4Z2o2RVQxanBKbHJ1TlpkZ2MzZTJ1clVkWXRyZ1VkM21lWmk4VFNSR1ZtM0VNdFhvTFFMckx3MXpqUmZUbUo0Q3pUTU94SEZtc2RvMHRwWVdMalVtQ2ErSi9EaGpSU0pVRWU0Y2twQkwvaU1TOVhFMlNaaVlpUG11dExBS3FmeVRtSXNlcGVzVk1kb3ozTUI4MTBXL01ZUTZsUFNzc3N2MHc3NjlacDZERGtiUnQzci9JL3BOY2tQR3lhTmt4cWZMQktuNHVQUGdQemNjM0hyMGNuQ1NqdXJScG1iODU0MmcyQ3RKSE5vS3pLMDI1TkVlb1hITkk2S2dLaWRJc3hWcllzS3kveGxEYmJSQjhaREs3L1lMY051VTNMV0s3Y2Y1M3Q4T05qWWJwQW9yaEo1c0g0QmliZTdiMDBpK1ZCdVZZRW1ndjNUS1Job1lraHlTL3kwZlNLKzMvNFNFWkN3OUtCbnl2QU9IL0pBdjI1d3U1UFA1WGlpbFZFZ01YTmhIOXlHQzhGSG1wSFpoaU55eitSN2sxOGN2NXhCRDdQeDVKWDN6bG9VWU5EV1VGV3V0SzVnUmJ3YUhRdi9KWll2K3F2Wnk5MVhieXdzcm12dXBvSU1EYnhySmhFbXNnRzBxMWlXTjFZaHErcnd3S0lZTG9qSy9TaXZZMkdsSm9NVnk2c01XbXo1RmhXdjRvb2VVTSthL00weVVZN0hCaWZRQkpOaDcxRW92bk5sU1ROTEtBa3ZiUWo0czYzNk5DK0NLckovR04xcDMyWjh0cUNpaTlGNDAveUQ3UGRHK0pOWDlvL25yVGdiUTZQUlZJMEFMN0RRUDdweTVMZ05NUk5jRFdlaUgvQ25HQ2JYSVA5RlhPVWdzOEJxKyswWEtnNGJPeVE5bjIwR1krZ2hycFE4VkxnUDFORG5wQjRkajAwVkdIZnNjTU5OblNwbnpGbkI1ZHFKdjg3QllkQVhNWVZoN0ZQRysyN09oMUplUk5GOXFkVmRlWVVaNXRHL3dyNHBFa3JIVy9lN0s3enNmdVFGL3lCNU8zVjhLb0RERHdWYkJ5a3RuT1A5ekRXSFYzbmRTcXEwdUtRcWk1MHUwa1V6QkdVTUhETzdueHM5OTM4ZkJiTFZqVmJRWEJwWVpTL2w5U3RiUG1CcXVSM2xScGZLSzgweGJSUDQ2dkk4eTRSc2xxRGFEZHpWNDVWZTRFeVpWQi9odWo0alFwdENac0hxMXdpbVNNUUtzWWFKQ2Y1WXBLNThUQ2RqRy9uTXdnbVdRcnFic0N6QTZ0ajJoN2hNQUJTaXRZZWJQTXZyQWtDTFR2cU1QNEZHNXRFdG92aHBtSFh2UzZjTjlJNlJFQnB5eXI5K05KRFVRc2djbUJ4OWFYeEdEUkMvVU85RWoveXlmaDJsayt6dDRhVndacW53N2RQMUVvcXdueS9GNTQwbm5tWjdTYWtDVmorVEhPYWhGYXF0Q0E4UEZRblBQV2l1RkxxcitocWhWaWx4aGIxNG84TTZNYTJEVFBaQ2l3emVYckdwb202M2pRaHVYUzIwdTd6Z1gyTDdLWTVEVC9iTUVubkdLQjhMaC9UOW50ZVpGWCtocEtJbERQNWRVRVRkbTlTVlFoVEliMkNmb0ZjVEoxb1B1NjF2U3lDUXhDQW1xYjVxMEpLWmtqTjhaOWx4SWFGNzVZbXZ5aG5rZWNGZm1VcEVYY2FUdWYvQ0pMdmprQUdYU3Q0S0NNelNZeDdLYnJnK2cvSFdQUDQvMnJjRzVVR2hKVkp5czZYcFJ0VTcwRzdBUXd3SnBCTmVSRGo3RUxyektqendpd05TWGVqbE0yUHpsdHNvR0xUZGRJeVMrUndIdTdVOVJVaDdOZng0YXJkdE1aeEx0YzhrcytncHhhckhzRkw1SjBJTFhURFY2UzJuWm5pVS9YUTUwNGplc0NFVHo1M1hxdUlmNnZuNWthMzlKTDJIbStRcGhhM2diMUZoTVFvY29FaDJLaE9ERFdKK0hqeDk5M0M4eTVlbHlyL2E4NXRXSlUyZi85QlowOXRqa2E2OEVvM2d6dHVCUTYxTGJHOTlwS2JWdDlFQVg5aUNoNE5EN2I4S2kvampmNDk1V1M3YVBGRDgrSFVRT3ZNL0ZTMytLdlZIeXlhKy9TQ01meVhIOThsd09pUHgrb2hvWE9RTnNvaXBZSi9ZVmNSZFVnWjF3V2l6RFJkR28vYXJkdFNQcFhXYzRubmlIY004eEVvUVZoS3labmhUY0VEQVVHRDZ0SVBPMmpOWlJ5USsxZkNaWTREL0lxcldOZ0UxWmJ2eDB1Y2FuUlhkM3lYeE1Fc0tXN05ucnlqWmZldGFGZ0NpMUwxUGdUSWpKcHRSVWJHdGVDY0hFQ3dwaWFMMU1menpQSWFrU2NIcUxLZnFSQjdWZnZnSU1YTDhsaGxLdmNtWGhwQmRQS2VqTlVHb3dZUEs5WWNTcGpRekFwSGhhWXc3K1lrYzJuYXRXOEp1U3kvZDVVN00vQjRMZTRFQ2I0SmhjV2pxcFVWY1Zqbzk4STNNeDUxallzeDJRZkdydkVLNDhkTm56MlhtTy9DYmNLYy9HKzd4UzJEUE5wOFpuMU9CeFJDT21jSjIzQW9WUk1KSW5iSWU4eTJCbHRKemViOWhMZ1J3VGlsR0lubWg3bThmM20xSHdWN1dSK1oyWndMUjNQbXp5andIVFArSTQzTDFIOElwSndiNnE2YU1zRjl6U3JQQXFQcU1kVDRzWnA5Y3hjWHc4VGp1QndnOEtNdHRmSXhpSmppeG5BdHN0TERXMkRVVm9PNEVPT3daT2FXOHkwRjJwWE02OXFESklDMGNhSFFoREh3cCs4ZzZMcWJ2aE5XYW0xM0p5OGE0aVBvN1RGMUVveVNwM2plQnRZWWxlcFJSYlV4UHJ6d3NjeGVQUlIxalp5a3QwY2I4RU1wR2hnWmRJU3dBa2I5UTFNZ0ltV1VSc0tselJaSXdKeDN2ckVwZFJhb3pPWk1iaUtteUlBK21oMERSalFvc1RGYkxpUFFySEdpZEhwZXJDVWJva0ZxSDA3UDZlSndrYnYrZnJoVVRNdzZSOFM0Tlp0NUkyRHArRnBUVWJpb1YyUmZwVFFYU2lLSDFXaXl1N2FlQkFDaGFSaUxid1lhL3YzcklDZ1BtZXhhN2oyd1hkK3B6U2lYNFpacjUrUk52c3pjYjFVWlFnQkZqSmhGWmtxNmFJODdYekVsTDk1RlFsdlpRVmhYWEMzem1jU0NlRmloWUc3WTFpV0ZoTkZRWjQ2SS9pNVhDbjVMbnZCRUpjUi9PWDRwZ0dBL1V2cTJaaEFGNGJWSzZEdHJ0cWhOdFRXMGRNTXFQY0M2MnMrM0diOStNaUFVeDZ2dFJyTWcxVTlxNFdtMjdueFVDWGd2aC9nV09qZk5xZ0grU3FYV0ZxSEJwT3MxUFZISWtSTFdvcEs1a3J5dDQ2Y3RnbE8zNVFOUElnQ2N5cUNtRWFmd0ZNMXhwK1hPWlczRGhzV0JZekVqVFp1Wm9MV2x4QnBBVmhJUmh2dG84UXRsazV6UWxqdy91ZUhlMVJJaXBBR2FJa0Y5aHpEUzhIbHlsTXRuNW1wUGl0SlJWVlB1Zmp2WjZ4RWdNREd0OE54WW9KWWhUZnIwMlRyUVNrU0hhUkdQT3FkallPOGJjanYwVDJSNGRrRGJyWjk0Qnp5ZkRLc0U1ZkJHQ2FMQjAvMHBKY1Bxc0tJVVVUTldCK1dVTUt4VnFBcVRoK0MrQ3lMYWYrR1ZSaXNiMU55a3dLN2JxaDJwQ09mc2tTUnc5cFRNbFlyVkNGT21MR0dQTFBEb241TzZYWWZxMjBQVC9TUGRHNkZ3YzU5UllMbWlHeXpxQ0drNC9nRUkyVk9EektZZk9iNmY0RDVjTVRQWDNZNmdZeEVFL21OSjhTWk5LOTV6ZUU4OVBFN1RBV0FEYm9DUnZHVFRFY0dKYXR1YmFpVHk3b1pGMlFCNUtISDdnNTVrclpUREY3eTRqZ2pnZElGc2lJSFBvM08yaktveXR0cUluZlE0VWxVVGxiN0VPTllZNE9RaUIzWFQrZUxXUnNvUUREM1hadEJYdXo4ZXpNQVl4a1k0U0FSM3lZbUVXV2tObGNySWIvZWV1Z1ZqVC9mUTdidGxaeENPcFlQWnJhQ3dadTY2TkpwSzF0bjIxaFN2Y1haM2tnSExPTXZrY1hucUJDTmVUdHgzZDBGZERMWlI3WmZYaVJkK1lpQ2ZrVEJtWGdPZnR2V1JlMGNyOUlWWTk1dlVKWHhBdzAvcm9EUlJzZkpYcysrR1djQUNHOStIb29NRTg0MDZZMWpDdk5ZZDFKU21WMG1IaVA3RHJMNmhGODNXdlBTcklMM3VORXk0SWZXT3dMTjNUTzVkUG1GdFRkVnUvQ01uMTZoeERoS2h3Ykw3cUxWVzMyUUVXeHV3cGtCKzNjT25iaStiREZ2TVVuSkZGQzRIUS85RENadFdGYW40NUZuQzc0NmU2cHdpZWczZ3MzRGNIcmxUQUorN2gwUGJVUDlxZ2hoUTZNeCtJYmhPVHR1Z2xqdnBJdmtrandsSWJkdmllNUVUVExPU3FIQnVJdGI4U2NMalp4bXhMTW5pbVkrTkF4MXlCbGk1NnZwRk9mVHhsaTZnZzd0UStxY3dGQUNUenkxa3F6Tkg0STlOSjRlcis5aGJQK3VpT2owSi9SZ1dpZjh0ZjZpcU5oQkxpOVkrdmJhNHprbjZtTFhrdlZPTnFDanhXMnFsQ3N6SXdXMXZTemFrS1RocUxYQ1lvTDNyMVl5QlBycDYvdFptSXR4UkdEZ2ExZm9TOWMxa1B3R01OMVd6MUtYYThnR0tvYnVqZ3NtZXQvOFpBTmtJN2gyZVJzN1VocEZiVjh6Sk5GUWFSNitwWDE0K04wN1FtRThXUkl3Skk2Wkc4QjdyS1l6d2NvMUlDZStobmpkQVJYSjdDSGltN2FDamhxeU9XQS8wUlhNWVdvYktrSmR2bGZYVGdVSHo5bkVPQ0VjeGNXcFhKUlpaTzZ3R1g5U3VOb3p4N3BBMXRPcFpIWmwvTFFnQWZUemhpWDJLMXNKcUgyZW1MWnFxRC84M2pxVXdnbUgyMDM0N2QzZlRjc08vNXA0czgrNlorOWRoM1A2czUyT2ZhWGJoYlJDcTlDdCs2QXZTWHNvczdJTkFSbUVHSVB0SGVMaVd5aTZNRWZ4bDkzd3o4VjJISElrOVVJeEU1MnFEOUxVZ3JNQmZQV3Nic0tWNmRMTS9EekJrejZnMXY0azBMcGVXeU9KWVc2UHd0UUdNT2JpQnl0YlBTL3dGZVQ0bmI3RU9hZGRzMDR4SHdUU3NYNHRBSUdwQVgydjZoY0U2eGI1WGlzenhXbWIxczBpUXc1VTNFSVd2MUhBRFFZZ2hQSDA5OEM2c2k2aTZaZjF2WmFNT1pxYUlrTGNXQk1VTGY2ZFZJM21pSFNCUnNvNDZVZmo0cmR6WW0wcFlDSkhGTlkyQjdXM2VraUFyb3dFVXM1eE9tU2pDUXNKazhVYmpkVVZ2YXlIQlp6cUQ4NlE3QkVJa0RHbVdPL2I4dHl3ZDJENEVraHRMY3FodzAyeTRkeFBrRTI1dUltNW5EVzlheTFwSEVTZk9yOStTSE5TZG9jNVdtdysyMzZRdHVLTHFnNStjeVcvOXhaSCtNZjFtMi92TWN1VEQ2YnoyTHdHUFlQeHZiWFg5N0Rjc0hlcHhCeVlOeDhiaW9SRTF3U3pTNi9nZ0J4UVBCcFREa1ZqdlhtNTBjNStvRWYwcHJCOVQ1TTdlS3NCaUJsekd6dUJIM3BDbE9YMFh0UjBiZFRFNFFjeXFkSC9RRU1LaERYRnpPemZGdmplM0xlTVVvWkZSc3dkaGdXS3FRenJVSElJM0Z6ZE56bFZrNlJFQVF6d25qTlhBQTllVkVrZ2xSbGJwaVlNdkdId1dpQTZrM2h3bTdxS0tPQW5PZG1jSjR6cDNLZjlpSXBVc3BYMnloZjRzUi91bXo5Q3Z5K2JIT0s4WE8vUFNWLzlvYjhTSEdyOC9tZ3gvVjk2cFdlS1MrSWlhOWN0YWpTaE4xR3dmcnJSbnJIa0ZDVUdJYjJ6M1VmNEFhRGV4aGQrR05zN01TeUlITUhQcDJSV0FsMDBZYXVSeE9ySDZNOEh4S2I3UE0yUDJCZXduTEFSc2NLZEtBMnE0VXIvcll3N0FxcmNyWkJRa2w2SU5WYS8zenRxT2o1ejZET25TbmIvRENHK0h0UncwZDRWMW1Pa2g1SDhhUFdERXAzZzMvVTVuV3gvL2VGaTA2bXV5WWx5a2VqR1djOWtiSlMrZktzaUhyOGs0bU50SDUvQWF6dzdoK1dCZ1NIUHliZTk5ZjlObDY0cDVXbDNUYS9ScE9EdDlmVDJTa3d3OHhxeXg1YW9ncis5WElYczJWVTh3ZmNlMEozY2c5dUVWYVprR2dWckNZTy9hZWNydXdPeThocGJldW1PbG9YSFlBVGFoeGZMdk5JL3FJYlR6M0FQMmxac0tnY3JSMFpXT3ZGVS94VGxpUVJKYk82dEdYendDcDVDS0hmdnkySS90Y09SS1FYelNPYmdZamNuSXJacHQ2ZjhMQVowZ1I2cFYyQmJTTTNxdHpuL3A3ZEh6dTNLTEpSVVc1SnRMRG82bHlVQytGenN6VUl1T1VYcmo2SHVlZkdVNHhNMlNob3gzUnQ3blV5M1krTEU2dGEyWUxITzNrZlhrUjlGZFpoZWlaS1NHNENldEVhU0JjaFVBc0lvWW5BZ0pvSUZMQWhWaFB1TFIwUE5iYUg4RjBtYzdhNDFkU0psSGUwZ3UzZ2ZrQXpMZDdKWWk0U0YvREZKbUhOQnN5L0hGakxUNDA1NE1DS016Yzd2OHZpWWsrZ3FiUnMzT2hTakI3dTFxa3E3b0RSd0NhUUtocUwvc3dUREJXVEp6dW9GZXNkWEd0NThmM3JQUGpabi9NNVBkR2Z0RFJTWEducUpIeVluOFpZeUd3MGlwcHdQUnZVOXh6RnZXNEIwV1hsZUk1TXVHOVBXSmphQmovMHJQV0IwYmxsTDBKdDJWdnkxajFxK2t6ckxsWEYxZHArSWFjNm1ZQ0pjRDVQZXlFU1d3ellQcXh5UVpad1h1MGNIMko0NFhmR1Y5TDVwQ3ZNOEVHUlg3TE9CRHJyZnBlY25ESE9KWGhaN0VnS2doVkY0cXN6bmRPYUhGRDd6cFJzeFcvWm5yL0pNdWEzclZHc1YweWFJVXFYVHpJUE5YZFVsYWZvOUtVQmh5QnJhTnZnNHFqV2lJS1dZZ2tkVHlxZ0cxVEFwZ2tvYXV0MWIvU2lzKzRxV1MzR2Y0MEJ3WjU5d2xHeDZDdVdMSWppRTFPTzRHUUMwZFlMWFRFOTBJTStFYWRydVBYMUtDL2pHK2dzMWI1R3pVeUVrNlBhOU52Vm1Ud2tndmFFRG1rWDlSRStJcmNWKzN3S1QvWGI1czFyVGJSYWlKZ3NoblVUTmlzcmFXYi95bUZTNnVjeDJFMUM2SGZ6MEFjYVNvK1Y2Zm1ObjRMbEpvVnNpYnJKS28rczk3dVk3cVE4RVl6K3N4YUN4QU9LcWpUUW1ZYU90NitUL3ZNMFlkWkxWb2hJRDcySm0wcGw3WnpYUW1JSGNQMFhSZlNGdURlT1hzVm9xT2hEWjlzNS9zbjRLMmUvbWZUdXcxR2gwbzlYdVZBQ3FpaEhVRHFidURuMktLdzVwbXVjRU83c0RtMUNvWjJkd1Y2NGJoY3NVTGx4Zk1QTEh1UEtwZnE0c2RsaGpzemY5MGlpQUVtcEFXRWpFTVA1eDFhUDFuSzRQNG9tWUREeUlsR2NlVHZDZFpPS2V5a2dHOUdwM0ZyNTRuRVZaKzVqSC9ZUGxwak9NTzdLOGNVY0M2V1cxVDEvTTRMNFZhQUFSdVY5Z01BbVJVd2NhRzE1WmoyN3YvVmxKUldINmVBc1pkU3Y5dTN3QmxRamMzOHlTZEswTTAraXlJYXZwaW9CemZmaStQT0kzYnVIVnRIa3JVWUV5d09zbktzUmNsbWF1NFdkQ1U5Y1IvK2kvakVuQVZpY3dmRS8xb2ROOVlCRE1jRjRzcmpIZ3oxWHQ3TERnSEx1cG9LdjVLUmxWWHY0VGZHVjVpcS85ZU5Ia1F2blVVVkNLVzIxNkdHZm5mMENnQml2S1VNVVl2Szd4SmRoNm1WUEx6eEJqT1FQUFJzZk53K0VuQkJmOTJzdzk2L0dDQ0lpY2gzWG5PQmZyaXNldkdLRlcxczRLYk5SK3p6eVB1eHkzWms3VXhFa0s1enBWNys3Z0RCNkpNVExPSDl1UDRtVDB2dVdIRjBPR0xMWm0wS2V3dE00MlF1SkhVelZGU0wzVlJ6YUVmUm9xZzJVTHB2RENjWjl2WTRueUxDaEtKYm83Ui9BckV3R29FZldSWU9sQ3FSNThrYnJmNHY3VUUvazdpamovWW8zaVRuSjJmTWZaVmtMUG1RSTNDODI1OGdQMWtPS2tuaHRhU1Yrbi9CbktScWhpdyttTWFMTDhkMGRVeXNIa0JNYjhtVHJwNmloaXJDaWFWWlJ5Y2tSVXJ4dFF0Um9TakRiNnBpeUZ6V3BRMzlkQzlYV3F2cDJhQ1ZnQzJtT3RoUXNLNm5QWUFrd01oMFVwbVN3Ukt5UlVRSjZQT0VKazU3UlN5OThhSEJxYndieGFQTlkyOU1XRXpxTXk2cW53aXlSc2FIdC9qTEY5RGFLOGlodXhsa1VRbllOeno2RlozWUFCWWtpeHpPOTd1ZTV1Q0lvMk1CVXArWWlseDJZR1ZvUzBoRzJMQWRydmp1Um9OVzkrWnhtZUJOcTI2TU5lSVFmbEFuQ2tuWGMxZnZpVWVaOTJLNkFzT1NVT08vbWRjWENRT3d0ays0QTQybE5OSjE4clYxUTQrc0g4SW45VlVWL1lFNlhzbUZGZ0ZQNG1OSTRGdDN2aG5lYzFFblJzVFhGRFJyL3UwMHZ1VmF2ZDM1aUwzZHQ1MHp0RFg0OFk0NjN5YS9hSFNPQUl1a1o5SG0xR3l2akEyQW0zN2lEZW9XeDJXckNvMDJGSUhYd1g2b2xlY2thOVBkdDNCamRnV3ErYUduTlFPVmVYWFluQjhsQSt6by9mMm1uOWhCOHlXV3FycVk4WFlHOURycUZHSExKTkRjdE9aeEpoZ0IvdmRob2V1amNuUXh4NHlKM2duQllrbSt0VkJNbWNVZlVCRzE3YVQ3MUdMbmlvYmRZcGI3K2tiSThSZW00Zm1tTVQvYVA5SHNsQWxVTjdrY0tVQmVkYmxwV0NQY2FUMFZiejBESUxZMStjQ1R6VmFoS0FFbGpPWWd5WEl3QTR5ZzVZb3hRWFdJa3VoNjBFdHRzR2ViZDJDQWUrVnNXVG02L2xHdEc0aUw5Q3h5TmE0M0R4WHVpdEtaQ2ZRV05MV0cyZE1TZHlxak9iQnJObXRjMTc5MUhvVXhVRFRzNEV3NHIyZ1RZYUVxSTRMYVVSTUdFRjdJOTFXNmlTMFhzNERFZ0s0QVA4ZjVQYlhVb2Q2WXVuL2FwN21pRzFrZ0s0SFlVOTJWOE9WejhXRkRwSTBqNTlLYW1QK3FpaVphaytCeUNFYWRNV010OGZDM2VKclcxbGZ3QW5GT3FFODFMZmJiSjdqMmFrMnNzV3Bjc25MY0RtWWkrTitDVmdkb1VLRGRQOHU0TTllaDBxUjVzMk4vM29RTkkwZlhRL3FIbTdBVS9FYTVoSzF2TUhxOStZTlFwdzdOcjBCeTBIZWU2eWp4dkZuUVJBbG1jS0h5em9Yc0oyTllCTnNXZHpiT2xlWkhQRUFkTnhpcS9vMkJXMXFHeG05TWRmZGFMbnp0TUZoMFA1TVE5SG9UcTlRelpRQkRxa0tncUpsbUJnUEdPQTFQOHhKNU9lZEJXd2hUTFJKLzBJY0sxNUNBUHVTamUwTWRPRHpMckVudDF4QTVPM0J4K3pYUHJBL0JZeEczR3g1a2ZFZnBXN2NJL0VtSGtYaXJVTHB4T3h0NWkweVFnWG5wc0RXZmFZMVk5OXhWdHZQK2pOOGxPbWRXcEU4S1hJS1BSS3hvQmxwTk9FeXpSVkh0VXRRdHl4YjNyUDZFVERPOWdXWFRjbk12UUtUWGJwM1BqOHNoRU9CRE5WbTNzTFRoMEJ5VU11eG0ybzNEdWl5U0x1NHJuakk0c1lNSFhQZGZtQWJVV1oxdHZvS09XZW02RnZxOEI4Zys1elpJalE3UG41NG1lZnp5M3pSWE1VTld4Y2Zid1kwVEhxVVpsOTc4UVM3SVlkSTc4LzhCUnBxRWp6Z3QyeDFVSC9JbWU3L08yTUlKN0IybjhKLzJsTXNDclpIWVpmMktIZEJ6Nmo3S0tVS1dqbEdYT0grWDNNenFyemYxdXA0dXAvN2VwMkZoKzlzQ2pvMVVRL2NFNm1CeW83RTVOQ2U1MTl1cmE2MFRGdmRJYlowUGJ4ZUhXajl1cytpS2RaaldKTzRGdXNITmxscXNnaEJhSGhPaFlqeUl5RHZ6QUFUTWowL2VPSStDdE9UajFQYXBZMldhVXlPWFhhbnpHVXo1Nnc1RmovUkhEU2w0N1VnaElJWUUwQURTV0RGMFdoZDRMcG9BUWpQR2c2L3BHK0lPT08yZkM1dGxOVis2SGp1dnljRnhxMVljMStKVklUNHdkUGcxTjlRY0Y4U3VyQkpLRjZoSkJGeW5ZQUhNMyt0c3U0Ri9RM2djYVNjR1FGWVVVNm90QXRJYUIvMGl3WU1DTWRhYXZGSUZSS1FTNmxNb0t2Q25CODh3MTkrNnd3T3BzTzdpVHg4V2RIWXZVN0xsUi9SMWNaUXZXRnI0dnJtQkJzdzhWRk9UcGdhRHprU2IrRzdFeXF1cmVQclRIRTc5RTdadVIxbnFWR25FanViU3pabXMzQmlKdkRTNGRHOWpwbUJvbVluNHVncFp2aHlBT3QySlR1VFZraEtMcG9QdVpXYjhRdFR5K3BYakNnVHcvelY2MzNsWTduc3IrT0lsbHlTVW1vOFU0Z294VHJLOXBoYW1Tb1plQ0gzeHpUTTc3dmpEU2lESHFuSHcrOW9yM1Z2cXFuTXV4M0Q2bTFXc0xQamFyaGRMY2lyN0t1VW5xeEYydGwyQnF3eUtCeGJvV0tPcHU0d29Mdml1MjU4K2ZsNVE1UWF3eE90M0NvZHFaTHJpbnd4M293c1FObFRqQUM3QlViUUFhQmVZa0JJdE42a2tPcmVaTjRsU3U5a05xdk9GY3E3WmlGbzFoUkxiSHpac1RqTWJsd1VUN3VJUnBuNDBjUzlDdVo2bEtFSnpNOGkyNmVDTU9pa3dNak5yUkhHM0g3R1N5WUxZUWthRitzWmEvVm1PdWp4MjFHRkQ2b1E0MHA4SXlnMlJJY3h1TW9mOWhYdHNOZERDdzhvN2luSVhTTGlTbGZDOFJvenJwc2J3NlpIdDQ5VHFrVzBQblZvSVlFVHNRa1l5ZUJnSmo1dWEvbGkybGdvT3RlUHBmRFlRU0lMbnc2blNhUWpTbWsrc3ZDbzE0TUsvczB1YlRCdjNUSUFkamlPWDBicGMvbnFQQjdOcGJmM2hQbmI3WTYvTWVGRks4RTB0ME5BaGpBTUpQdVpHK3hSa1p0bUpFYmVYZUlZQXJtUXFiRkZXUlFYUlRmVzJyN250Qlc3WE9lc2F6ZGdrS05ET3R4b2NrZlNCbnIrNDg4SE9VTE8rVXlaVTBLZHpGSHByY2Mvc3QyMWdQTkoxL0ozeEsrM3NxaEx0V0Y4ck51MEkzRmNmdHE2UXF1N3AzYk5yc0VjY2poMGFRa1lXZ3NZdldEalFWYWRmRE1RVU1CZDhzZkMzNEdwc3pqV0VFNHYvbU1ueTNZRUJuT0V6Zzg1T1crREtuYk9KR3h3R0dUamMvVDh0UFRjY3BJVXNOb3V2Qm1pb0FlVGttOE9LRGxoT2lFWTdwMkdDWmNxUUhZSmxZWDAzakZjc3pLUjdRSWZxNGpaVjRscmlpQ1NDYjBTSFI2YklkdElxdngvZ2lkUE5IWFZGUVI1NlFoVDE4NkIyWWYvUlc0ZXhhQ3YrcFhxMStYbmdjN3pudHN4a1RwUytJVmVuUVdEUytxdDhwYnpScWtRVFljakNPSStmZW84eEJFY1M5OUg4U1NoOHVOSEJic24yYkxxWFZLMnZxS09MMWhFZkhuYzMra0VhQUcyRUY5NjNXUElXaDhtMnJPTm14ME5yV1lIeWlDZ3V5ZmI2RTFkYmFNSlk1a1BpN3laSzNQdkp3V1ZmM3JleHpKcGFTYUUxQkcxN3V6YmlzR21IWFAxZVBPU1BPd3ptOG5hNnNkeHdqWTlVYXhNUjk4eERjbEJTeG9nQk1zMnlzbVo2K25RTWZ5NkRpVDBIa0w0VlAweHl5TmFPVURpT1E5akZZWUVTd1FLMVp2V1NSY1R1dXNmWnAwRStrQ3V0dUpXQll0ODJTS3MyVVplTi9yRHFFZHFwSXpveFozZThjTlZIMTM3ckV4bDA4TW1FNktWb3ZYanlxa0lrNU9SNWFUNDJ3OEd0b2lJTkF5dFFsT0RBTGF2L2VqZFB2SENteThlWmREQ3JtRCtSSnF3ZXVsZ3FGcFAyZjU0UVd4b1JicnRydkE2czREWks3eWdBbklIWTVoV1BhNm82dDgycGYwQXl4Q3lzenRIZXRPQytxVmJFZUtSaWFKNnMrNmhsWDBTV3NycDNwTk5Xc2FHMkhIY1l5a2tBb0xJRnhCYS92UzdUTWdQSElOQzFnT3RybStMZDFFR1grS0d5RDhERmhROHVDcFhFTWxyZTBObWhoT2FyQXpmd2tZUlRqMThzNEpQMzZIWUdwRjZLVy8zTUd5L3lOTXQ5ZjBOWjhuc2hCM2h6dXJ2MWd4QnFCNFV0WS9EL2NONWFMakc3cnl2dnN4RGw1OGFpTytEQnhGYzBzV2V2c2E4SEM4Z2oyYzBJei9jc2ZOSVhFL1ZCOHE3QUJVamRrbUxId2RrWDNCbVpEem5QbHRhc2ZSTGJTNWMzT3pFWlZ4VEdNaWhNUWtscGh1OEZjNjBObUxmOVdGTGh5QTFVTzh1QVZ3THZETVRJV0tsTTMrTGYrdVdkdFRUL296U1RBVHI4MHhUeFBkVjhNTmVEbWtTeWd5MWtDdzdld25rcUpHTFhRU0hRYkQzTUs2MG92dFZsUlNWNWg3ZkJOOS81bnBUdW5HemdWODFkU3R6RUdDdHBoV3QydS9aM0x1d0p5YXFtWThQNGlucTBSTjBiMWJkMVJQek9ZYXBkdDgyc0haSnArZ3lDWGR6SkhIVGhOM3hoWTN3MlQrQWkwMXVQZTk4YS9VOFBocituWlVKcHhtOXVpMzJQR2tvbG5jejdWTkhpRzZmYXVaQi9MQU02c1JTcjRWYmt3K0h2ZkxuRjhydVZKUTV4bmJyclRWdUhEa05RY2ljV2NyRFRrZVU2UnZ4SG9yS3ZyVTVqZkE4UEx3ZlNaZVowdC9DME82UStNT0pTZWxUdXgvZXlhbjJEU3c3emFJRGs1TW9UdzAwaUhzZzdmY3ErRnJSTVRDZDlHNFBDQVhpcU5NSUhFUlFlekMyVlpmL1lKdG1CMGphZ2xycTRZb3cyV2FucVovaE5POTJVRnVxbll1blMyMFN6bmVPa1hFcFpnOWJ5MStyaGliWjhndE1FQXpMbkoyTWhqcXpNbEJXaE14bmxTQ3pJQ21QNXhBckFNMkhqT2J3S2FQOFVwYlphMTJvdVY2Vlkrc3BtWnk5bm9WQTMyaS9sbmNJYVNrNGZUVThJbmFuSFlGeXR2K0gvc3Qvc2c2U0JIUWEweGhIZkxxamQ0V2JpOUJMOFl6ZzJJWDFqN21xQksxMlRaQlB0VXJEMkhLYWlRcVNvV2VlZ01FU3ZySVBnaTMyVXhNa3B4cFV6OUVMaVRXZjRqTTJWU1ErYTZrVnpuNFZDOEY2UUNpa3Rmdk1aQkdSYjlpVmlNSWZCMHVmQklBcHFZTjByYlJLVDEzbUZYanJsbFFwcG5ONkEzZ0tFNVpIWG9CZFFvcUhJbmZPVWhneG1yU0ZHM3RHaW1kTUY0THkwVXQ4RjFQeXJlT3RHQ2JLMGxCeVo0bi9PYjJ2cS9GeG9zcklVNjFIT1dDckI0NWkxeGNTOEtpNWFGNW1SYWpJN0FHSUtzb0VucUtQeGNDVjh1dG45YWlUWjEvOUN3WFdtdURLMGl1UStORnJualVxZUJUY2tMYVBTYVF4NGh5d0ppNG9PNktGUDNXNzNxVkp5TTNQenI0MmRCdHIvUlorRkdZTVJtbEpQVWdxQkhkRXRBeC9LR3phZzJOeVFBbHI4d09nL0FjYUxVQ2M2bGJzWUk4aFpERnp4OC9jTWhHN291UDIvUXhCUzd3U3MyZHpHZkZ3OFNtZkNQUjRDMzhOMTFWTmpqb0ZQRXdxSFoxWDBUZ1N1K2xPbDJUTFhPUUNsTzdZQjBJcksrSkMvb0l4MkdscDV3UmJOQ0NMTkc3Sng5RVRsZFFzRE1uZ25CY2I4eG1kNlVYZkpCNlJsbjFLZHd3cU9PWHF5L2RxZ2RudEljMzEzMzlnNVB0U2RGTENkWmdET3JTMGJSM0JVcWFsdlpna2FwaEpCNE5kcnlyWUtPWmYzbmI4TVorbmFYdHNZa3N0bHFOV1NMdHlwaEdlN2xwRUFFQkgrdTl2Q3ZGUEluNWlHVzcxRHllRkVVM1B2dERJd0xBRFgza3hlem55RUpwYW9aTExhNklybStubGdheUdrUFIxRHo4MSs4UzlzV1RDalJEemdxMUVHNktUcWdWVnErN2o4RkppSE9FS1U1bWtPRFV3alBya0JaTXAvTW9NV3RiWENQUFlmd1RJTWpmQzNydGhTOWVkanl0b3VGMnN6M3owVVVsVGtRR1hEVlZXUExLalNXc1pOZzVwdlFFNUQvSi9ZQmZNRkQyOENuOG1zR0tHa1FuTURDcWVQbGtrSTF1d3Rtb01JVVhYNkl4VU9VaFA4Y2lGUFhoMXVJdUFHa0RpcjA0QkUrRGFiLzhHc2lqNHg2RzBTaEVWSkNYVHpBelo1eTR3ZlZTQkd2cVEzQmR4MnpqdnRxUEYyc2I4WUV2QWRITHRiTWRjODFRZVNlbngyR3IvVERSUm9xeW1HSGRYUWVEellITUdlUGhyMjZHMGpVbDA3ZlZETDhta3h5S3kreTNUMFlKekM4TzRlWEpOS3liWTBLYVZ1cFYzOVNQV3I5MHlnVjNCN3ZFR0VSVys4MWthVzNzRGJOb05kalo1YytxeXl2QkRRMkhQYm1ROTY4eVZuMk1MK1NPaFZURUNkNjMyNWJmUFV3Vjdld0Erb3VVSHl3RUFTMFBYNExhTGF5MkRlSDFHanNiWVU5RVlJVVM0L09CNEJER1dreWZQTGs2SXY3b2ZVclpwYnlDSkRrSTFoQkpNbGFZM0cwalVCQXlqVkNFVUViZVBrZjRENGhvMWxvYjJOVzd3UUpSM0x3b3Z2c0lRWTVnMnczWlJBWUN3VE5QNzBRK1ZETzJKOWxEbC9BYis1VWR4YjkyODNFMG9PYzQrRS9CSHJxekJIc1Y2b1N0bk1OczlsSzdUVThsRzhheDNoU3hrR2tSQmdZM1FZaXQ3ZUdkYVQ4UGdjUGhqTjZMTDFTb2pBN013RmNhdCs0T3cvMlNXWGFpK25JMEgvWU40b0NqN1FVOUUwczIzZ2lqTTJaOGRiUHptdmpNU00xb1QyT3V2WllpQjdPM3lrSVUxVkVlUWhpQ3V1eWxjVEFQS1RzWTM1VkhnbzFKUEVZaHM3d1NrZzVLRXpDc2k3SmdWa0dFdWhMeEU4Lzc4aFhTYk9FUk9PTVA2VnltNzVrc2NxRjQ2S25NOThLVVgrVWJSTUN6SG9BVXdOU3E3MmpjTCtTam0rQmtVYnlZZ3Y3WXEraUVtTnp0U1Z3VEV6NytBcFhzK1kzQzlxWHNRUW9qTi9tWFFBR1VTcWFlR1VMTTBZaFpwVks2UU1jNGQ0Y3BpeFIySjB5R2E3Nmczdi85QW1FQUVQVUpwcFIvYU1BOERLUDdUVC9KS05Qd01LMlBFTjF2dzNIU2tDVmhCNVRYWk40QVlqd1NTV2JlckJVM0ZoeUlsenBUMmFHUjE4WFZITTY0WDYzVW1SbVpLc1dYMHFaaEsvQmtUaGRyUEtOUVZUd0tzQkpRVG93UERsQnJPZ2pST2dJVUo2OUtkOTlzSTI2Ym1xbEN3VEorTU94ZDMvVEd4Ti9OVjBnYmVNRnpBZDRVVUd6dmUrcWxlU2hMSW5henRjM3ZyQ0FqbWp2MlNRaXN6Q3Y5SGM1ajRqaGxPWWpSTndsdHYrY1FIZWczckdxNUJVcXdCbDR0ZGh0S1VuaTMrNE5aZDFPbUxHdndvd2dnR0VORXJsTTNjdk9MeVJRbDYwUFVOYm85VFJ0RDE5M2liVUZ6V1paUXNKM1Q0bmdjcEl2bFJRcll4aXNoUFlieUYyVENzQ3JJSEpua3R3b3EvaDNra3k2WFRYcnp0M2J1cE8rVnZ6ZGJ3UUNXWWhiRjQwam9HVFdTUC9rYTd6MlNwcXBrWlhJV2xBS2kzZUovMnNkU0xZL0hxV1VjUjBZeEZLN0ROQWR0VENkbVRhMkFVVkMvRGF0dlViNHBCSW9UU3AxMEdISVdwUXRqTVMyRkhuaDg2QXQ4dGtJTTBIL21kVVFYSzJKaG5tZWRzdkRza0tSR0tkVXNFb2xWVW9mWGtYblZGR2ZLbEpXSFBiRS9xdjNUTFlyQmt4TG1VZCtJQWp1Rk9QQUprMytBVUNodEpLOS9nUTlyL05ZR21IVHNFS083RU9OU1VXaU9EODZhL25CZUdLeGV1ZFE0QitOSzFtYVAxeXI3cDMwTHBLWjBzRVRtOURwcWhnNUxrcy9RYjN1U3lEQ3hIWEh4NzlRUDBsRjJJcUpjVy9qNE53N0VLTkNvOExKRDBydllETGdSdUhrbWU4aUtIK2NGTmh0cm55ZlMycDIrZEVMM1NRaXdlU2lRSHdHRkY1WVFOSW5TVG5WeVU4Sk43bDhnQk55elgrSXJFTzZFZFBkZjJZbk9qc1JBNmRuWkcvaHN5TlNxak9VblEvSjVodTQrbVo5SFNFZGRGWDJPZTc0aTkwVVdWOFJXLzFmUTNMSlNEVWU1Y0RBbzJaVHBVMTBTaFRqYi9HeEZUWFUxQnVtN1kydE9KeVZ2aTNzYmRPRDNNS1hrNXM1MHVMVGgxd1VYVXpKL0xMMWpOMzRMclJmVTBpcmNoUS9tMzBjNEpUOC9KY3F4RVdBUWFJOVplSThrRDRxcUtVVnpTSWowa1dGSzhLOU43QWNWVWkzeGxlZ0NuYjBCbC9VTzllN011eDU4TzNxdDVjQmZ0VXB1WXh0bnJWdXk0cXUzTmp2bW9xRXlENXRTcFRFZ2hEdWFnbGlEcVB5SUJHWmJrdExSbTBoSkdvSy9MNjZWTTM4Tk9EMmVyRTN2VHBBVjVicVI2Z3VIcUgzeTJXclpCQUQzVEJNa2ZYVXZ1MUYwSzNrK3U3UVZHeWFxaSt3MktOOWtYVEpoZFhVWXF1dG1NMzRGeCtESnUxbWlEQ0RRZW9JK21DWUNpYTZCRStsY0JiOHV6ZkpHa2pvdEt6eEVmcWZLRkFCUEVFaVYwRlcvYk4rSk5jM3V3SkpielhwRlJRaWlXb2RORTlEcVA2VGwxcDNnYTUxN2d0a3lRVHloZk16MkZicW1JbnQ4Rk4wVGd2ZlJlR1dSdm1CWlB3bnFLaldkWnpraWtUdDhLRkFlTHRndE5oc3pHSm5LWXRGUVpjeEpGd0RLL3dTWTl6Tkk5QWpiL2JheVpML2d6em9vVVRUVGJWTkp0TEF6bmhUVzdHZ04xUm1LQit0RjhCYmNhT3FITmJaUnhRdjZYWHBTcjdINEZrTUREdWVWelV6aEp6a29hNGdSMm13WHIremFTb0hRVFVYTlJ2Vm5ib0VpOWo4SEx5U2NJVFV5QWxjd0hBUkladkNqMk1TMEVqWGtZMkNRV2RaYkxYdVNKRUpNZEI2bUNsOVJ6b3lCdG9XUk1GNEsvUUZEWGQzeUNPdS9DRktkcFRmbEtCWXhVZkZUeTJSb0dQYy9PQTArV3FTcS9ja0IwdE81VTZPV1NYS3BJZjhuZXhXK2tsdXFMU0JWcGs3MnAyQmF1MURLZGlUQU81QXZJVEJNUmRYRmVCY2ZhODIvSkRyRGVvTUx4Y2VTdm16RnBuN044dUdwaVVNbXgvaWs3UWQ3YVhBL1p4U0h3NUttb3lqS3FRckFyUDBFQlY1U2tYT0FFK0lmZ0RORHF0cC83YnZUc21ZYW1GRjRkUTRhcHRka1d6V2VlcThIbUREVnR6UGhLV0VtQ200TWFsY2Fqcm1IZ2ZzUzF5WFdGaVNnS2xPeFhIN1IxazZGQy93QkhpK3l2eUloYk53Mk9jeGVObmIzSk1ueTdBWWhnUjJKaFpsTXJpUkh0dkFkcjFHa0VkN25SS2lyUHhxMjFudWxIUDRFTnBTTFdNT1ZTQUlWd3JFN2tBRitEWEl6RDQ4UnJtT3NkTklsVXdaZndGUmY2aUk5Wm1CYjdNNEpNUHJHTEpKQkJVR3Y2QW9aOXBSRmpRY05FSC8yNzZOOUg2MTJRZGM4MjA3bFJZZFVPMFJKN2dQanA4U2tncTFPWUJTcUVkaVR5ZnNScGVOanJaUHJ6c3p0YXNaQUp6QWJkN3VwaWRXZ0xkTVlMbU85VUtBVWR0WmpuS2toYktxeC80UnJHTXJLM0dwMXlGQ3dsSVBYTTk0RTJrYVM0eFZsaU9hb0llNDJncUY3dEdKUWw1UzJJS0tjM2pyS0w5dWYxSzI0blN6OGRUTDVKbFp1QUluVjZzbkVCM040ZE9TaEJQTjBaVi81WWpraHFzV1dkM2xyQXRRVEhHSnR1amovbkREb2J0ckh0MU90TFROdkFHNmVFTkJKV3lqVTBtWlRaZW5JYklDNDVBVlFHckhMRWZFRGJxOFhLck9YYS9OcW5mYlFUc2kwbVNuM1R0VURVNlR2RFA1QVlZVnUvMWh0YVY4Z25GaiszWGhxUituYmo4dm56dlZpOWNlT1JyRjBBVXdUSFZRRE1pVW40WmVRaWxHRWFPeW1TUTZseHE0cm9MbS9GZEhNS01naHNoZTNLYjlyVzhhT0k1SWVnMWM0cCs0Nk15NExaZHZnNWhhU0ROeEVQMVB2dEEyNWI1T0EvYUVBV2xGcVU2NmUwSXM2YnJCbnhUeWRacmoyWDQ0eVd6ZGd6eDBjQ21yTjk5aEVKUXBoQ2V6cUU1SXpDcFpoMXlNRTdYQTRmSGV1SzJ5OEpKckIweHYzcm54WHdxRzRzN2diL1dFVFZYdUxGaGtIRzYvaTRKREV2VSt6NHFvSnErVUxPSnE2ZVlzSlNvUW53QUhrejhRMndQeVpOVG9KTWtXYjZKdVFIT3hGTlgwRElyTWdGZ1NhaVZzai9CS2JRV3U2TEVneEVwZzJIZm0xRmVPVzZ6K3E5TitzZ0MzR1ExSjhkN1ZWelRORFo4L25CQjJYYno1Z21FVEZzSUllWlR5QXNzMXBuSVJrWm50WHMrWnBBMHRSN0pFYVNCSVprR1EydGhBRC9OaDVyRnNpZE9LREM5dHBUd3FDNEtXRUNieXNNc3JhcGh1QStqOHd0UERYUTRmSEU5YWhvZkRSUEQ1a2toRTVjczRqY1NSakpMWjBUZE1JMUtPTUtQQ0VzRHoyL2VpUXhGNVJubU9KTTRNT3M5K0d6QWViR3FUc2tzU1pxbDhGWHJaWFU2K1hMUnNlc3E0c0tldmFHY2dBK1FRbzFEWWRzbVVhMlJ6ZWs4ZGxaeVRqUklvZjlZNmg5SGtNeUtJczQ2VGl6NW5hdDFTV0NONUpxL0dJMmZkRGtodU0zYzV1c29SZElEUkVRTlNvWHFtWjZpeEMzTGlUNm0zN1p5dkc0a01GSW0wRG1SUDR6cnpSV2ZBT0VFU0dPcXdva3dwMW9DV3Z0ajY3L2JTTHF0cHcrZThlV25WNTNXdTl0ZVpIa210eUp6QVdONHl5eWJPZHgwaDNoSGhZTTB6ZVpMaHRXR0ZoSE9QRnI4NmZhL2g0NWxCeitQbFRUbzFYN1VyRCtGV2VTN3l2L2VraU1EbXFxWTcvU25zN0JYcUd2UXhkU0dYWVU4OHBHNUNoLzFpRWtwOXcycjZySERGbTEydjI2YkZNalBaODZVbGdaZjFoRWJtL01mc1JHTEpUTjRta2VSWEhDRFVteTMyV1dmQngwL2tBeDJmR2pVUTZucVRGQ1hjaU5zb2ZiUVRlTW1KNFhqVTh2WERlanRiZ0ltRFZnbllsRGdUb2hiZFdhY0VYbkpNNTV0OTI0OWUvKzl4SDl0bCt5aVRtUzcwMnRQUWYxYVlqaUpoZlp0aFNMUzJrODRmZXJWc3FINlVTUmIrM25vL3lHQTQ4TkowdjU0ZjBFaFdFd0ZTaVZwbzAyc1IzSmNzZldCRFdwQStKSklzOWNNaEtwU3U4V21DbW50WHJDT3l4eWR6dE1FV2JGSGVBdGtiMWV5d1BOeDV6RndvajFWKzBacEpDaDU4TWU5NW03cURwNVRTVDlxVmc1M2ZjS09WVTRWYmZZMnQyZVBRTC9KbWRQU0RQVnZEZTYvWURyMUVORjluM2tkam4zNEFDL2t5dEdzbDViSFVYUmY4eTNKeXgrcGF6MHZoZ21pSVpqSElSZE5OS1hudHVoaVNWNVUwa3BWRjQxeERMQjQ0R3VMQTV4QiszZWExb1ZVQTJMQjJySktKdDg5dHg1eHJlN3RudEpTaDZGZUI2bWt4UUExaHlpZGtxeFo3QmRiWldvNVVBUW9nRlpkdW0yQUQ5RzB6RFMxUFVvTTFTQUtVK3Y2T1oyekkwS0dUYm96elA1Q09qSFVyR2xTRWFSS1lWdHAybWhSYWFYN0FUOStVREpSN2x3TTRVYU4yZHd4MnNUMnZQaE5oNVF1ZzNUM2JsYzlseGsyaVJheERHM3RVREI5Ri80QUVmcll0THlkTllPd044Qm85U2x5eHFtRjNEZWQrcWxPbFNSKzhUd1hQWkVKcnlJc0IvQ2hJbEovQURyZTVpQWFFZ2UzSUhIRHEzQ1FkdGNqbm1teW5wOE5JNWk5bXFLdnl0WE9pcmRCYWlmNHdVUThyVWxYVDJWUFJxSnh6Wno1SURFd2FXMkxEZmthNDJtbEdibWxSbTBvaEt3RUttZDFuaFJDTzl0N3JwMi9QcGpxRDV4amVPam0ySjVETGdkaWcyL0lxNlNJVjBJeDM5SEZzTGtzK3BETHpORTEyTzJvRVdVZXkva1ZkeEZpdDNCdHY4cExRaFVyOWs0OGsrcjFmWmxBOWF0Q0haTysrSEUyTUdxQ2IwcG1uY3F3SFUxRGswL21aUlN1S3BFQkwzbFdjTkJuN0ZzdHJvNlh6NHpIcFFjQTQrM2xhemV0MThuQ2s5YnMyd1d4blViTnZCRFBkcUNJanFjbGNvZnBReTNUZVltWlhMYmtnUjlQVjg3QWJraGNpbjdhK1Q1NTBRQ0JoWXEzKzhLR29rbzNlTThITTIvencvVVFSQlBkN1RsRk9NWVJzWFBxWmxubUhEaWdnOGNRRnorNkh6anlzbUFseEhDc3U2V2lyTm84WlVJU1NsVWdZZXJYM3YxaVJ3QllUbU1BRkpuVXR2U1YrbElNMkFvandvSDdnbmF3aTBYUFl4QWxLZ2tTcG9rNjVicTNrUGpIbk9Oa3l4c09seWY5bnliVllVRVJDOXB0MGNEUjhZSUZSbmRxcDBzVWh6NnFnSDNRTjYyZUluUU4zWHNvMTRzdmdzSXQ1d3htSnBUTjNURFBFU2orV3BsSzc5OFM5bkVXWHRJdjBXSWlINkxrbHVISmJybnkzY2RiT2U4dExyQncrNXRiWlNTY1hnZG1Ub3pQeWNHV1doQytPTWJ0WXU4anRnTFplL0U3bDNvWjJhUzYweEJMTFF1QjN4OUlIdCtpSDZURitrR0Y5MkdQaGh0VGJoWXRnaWlFYllScktXa0RDTlgwSllVUU5ZZC9FMzZvb0tYbkFUT1MrUGl0cHgvOG40ZFloS1Nhamx2KzBuMWZaVlA2TWZzSFBvMlF4U0tFd0luTDloa3RnRTB1QjNoRGk1UEptaUh4YWNkU1pmQ1BydmRRdTFwclBWMWdibDUvek1FZWphcllYdU9qUmo5a3NrWmJFRHpObHFRVHU3VGxkb25zQ1FtMUdySmE5ZEt1ZHJOOGxSbmhrVStOd0srVXJjVTdzWGRFNmhWV0lBb2doU3lCYlNELzE0andpcjZ0YVNQL3dpZTVuR1pramhpaTNIekpETkppTXhNY1Z2a3BmWGYvRHViU3ZRVzVvU3dCdy91ZzR6SWRCZzBVY1NBS21peXZ5RkZSVlhvMlFmWlFwL25PR3pZZTNzRlJ4anR3b3oxc1FIaGFleVRVZ1UrZFllR3NnY2daaDVHZWw3VVYxRjJJYitKWWZsbHl0NnE1VEEzY2FXSktxQ2lNVW5wT0RvaWRoNnRRMEE1TlNsM3VPcnVkMmgyVE1sb3VjVWJGTVlhcitIVzVWUFk3amUwOFFFNUhsVllDeDF4Vi9TNHpPejNqZHZGVnBHUlNqb2xxUms4Z3hGaWJ0TC9KTXpTOWNvTUdMMWRZRVVmdDIydzF2Z2FjTVZVZkFrVW1DaUhEYmNBMytjcEhnTGZHNFRuZUxNMmZCV2hjbUZhczVOb2ZBZ0Y4bnN0MjRBKzJ0ckVWRWM0aGVLTW1FSHBNbXlrcmFvYWswSGhDSVcrVHBRVXZ5dWFhaE9mRFZBNmMyYnN6UlY5SXpiNXRYUDVydlBUSHZ5L05LWGNOenZTaWYwcElPcEZhQjlFbGpaeERrNXZCS0dXSGVxSU81TVhOd0hnUnZORG9XQ2lRZUNwZzh6ME1GMnVKR3haMFc4OThYWWdNQVk5SFVZMjZZNnRZZGJYTDV5S2dmb1I2NXdobVJuNGh4Y0VnNWZlU0gwdU9XUzE4a0VBa3JDTDdtS1JPcEZxc2tSTVJwYjJhaXZSaDlLT0ZXRHV6WVZvVGVUMnlxaUlQK0tIN2YyQXFsV09KVnpPMnBxR1ZrMHlQbm5RM3RkQU9jL2V5YW1kMDdpSDlJUkUvcE1mdFVOOXduKzdxcnBiSFdxQll0SWtydFVaUDJ6Q28ySjhhM2F6d3k4UmRtbUFQaDdPejROeHl0dVREK3FCc243OC9Gdkp2M3NrUGJyL0pVb1QrcGtVOTFGb2hlaFpxOVdzVzNrdTRGY1BjRDdmTGVyZURmTm1ZRU5pNXI1ZENOZHpmNmpZUFlPeHBGNUMzYlpMZEViY1FzdUFmWXZEWlpOUHlLVWtoemRQRGUzMGNFcFJEL3N6Y3p0NFlGWlBEWjA1Z01OUzZ6cFgrY2FXVU42dWtzZEUwY1FaQ1hmQWkxT3hYUlhJT2VXcTJwd2plaG02Q0VJcXdhWWRwTy95ZGNVclArQ3FwckpVOUVZQVNsdWxLZEFVL1Y5ZTQwbjdLV09uZWtCRDJDZDNmSVhZUjBQekkxNG5GQ3ROeUF3dWZzdDI4d2cvTUNIWThWMFQ1b1djeE9HcGZ4T1hHK1NSMXlkV2grRnhtNG9PaEpvTWFPWWx4dFFNSE03ZmRHTWVlakh3YytyZm9KQlhsLzBtbkVkZ2ovbzk4NWxzZFVSK3cyakVKNzRjWHQvdXdTbEhKUy9ZRkl5WWRva0JVUW80dzhObUtSZ1BJYXZ2UG1Eb2JvRnJUZ1NZQ2tiVDgvV2Z4TG9NTHdobjkwTGhGRUg5WUlNZGRUb1dBclRnYVJPRHFacjNlbUUrUmcyZXZFcmQzVkV2YzhjUUUrTGQwYmJSTVdzanJ1VlZPMGhUVmdlcHM3a2pmcXVmVnFDc1FyRDlSMWtGb1RTVzJZMndQeWtEanhZMUNsekRnWGhsejJ0TldTNXR3VFA3cWxrM0tjMWE4d0lkOVZiTFFUL3pqY2RxM3dxNDA4SHQ0L2N2aUVEMGpGQ2pqa0xwdjNZM1RTSnlxOXF0TFR6b201c2dtZTMra1ZUeTdqU3VoTG5pQXF3QmJPVXJxRmhjM2VHbGx5Q25jdU0ycE5kd2Yza3FTc1c4a0ZGSHpPN0d3eEJJcjRiVzZuZVFYL2xwa0NGaWlOQW8zb1JLSGFWMVFmRXNHSGpMUDZSYkhPUXRkUWppcXpINzdnUm5XRlVwcVNjdWdDeSs1QzVTYVJBWGV3UFlzZjd1emZCWGFsNlFPNGI4NDREK3lVcGI0RGhlUFRseHZhVUYyUGJQRTR2Z0NjaU5MUUhmQTNuc2pKUkNWSjF6dkJ1ZHR2Y2ZaTFYvMmpIV0s2Z0VIM1BhZjhCVk0xNHlWT2xQQzNqYjczeVRaRkIySDdya0lsaUg0U1FvdCtheUlsS2JHS3VhamJCdXhUOTMxaklpaHRlVUZseTVpd2k5bndxaVUyR1hJSkEzVXdmd1BZRjlqaFhnVjRpMFVDTzEwS1VQUndGQWJuTW1nVHZkcUpyTkFEUGpwUjVhMHdFSVNoYjErTmNZOE90NXlMYlIzQ2RTa3dOQ2lSVmVKNUFTQXgxOEg5TkpVR2NKRENZQjc2SWZ1MEovZVJqSENxUnNmcW9nWEMvNEZWdDZhcE5zd3BaQnVHaXg0eUF0ODBYMVF1a3MrZnMwVkNHVEtNaGtwbTJ1L2JDQmNSQXdpUFNkTFJJV0VYQnNER2c0ZVpGenI0U2lyZGJNdEt0US93V3FyU0dIRldlaVE5bk5RMzFQN0dvQlRNdHFrd0xWV25HNEVtMEx1QXhyK3ZTTlZqczVlVDJ1dFNwTjFDeGx0L1FuQ3IxQVBvS2s0Y1NmS1VGMEFDajg0dnQ3elpqL2pJZmFsaGlrUEN5SllDaDl4Uy9YR2ppNndFVjc2UHVkcXUvaU90UGV1ZjFreERNbm1CNlJjWVNtUnNyMk1aVElzd0JVTmNRT093dUR0WHdRWFNjazJHTlU1dVVadDdsQkJDUjhCMzBseUlEbGtBNVl4cDRLbEZQeFhVallnMHdCU1FRR3hQQlM3UktSZ3gyREg2ajlPNkpiQWNWS0JUcWt1NlIvWUllYndVV0VYK2JEY1NtbmJxNWRROVFrVFBJVlI4NG5kUlRIS0xIUXJSQXhmU3JpTXJYNlJwY1prQVZqVFNqbVVmRVUwQVBHVm9YV2FYNjRibTAvNDdTdXNRelQ3bHROTHBzckVYZ2JSdzdtb1FYOGJYdUJWWktMUis3R052S0JKYWRSOGNDZGZnTm1hRjRMNWlyc2pNckdySS9OQjZuNzMrZ25VZmpLMnJJMURMN3lPU2Y3ZDFIaFlJNHFjRGVVVkhlcXNONXo2TTBwNnJqaWYyS0RQMkdiSTU5d0xRY3JzMjNTSlJERk5OWXhpKzJMTmRwQ3FTektqK2pEQmFtR0JVandTMnBBNmErYmtkQjliNVoxUGVzaG0rMjhKRnpMWEtFYkk0T0dOUlZuRDFGcXMyd0hBWEcvSGNvbllzbmNWbE1UM1cwOGZzOWk0dVlXek5xZE8wZ2pzOGNsMHN4czhLWEprM1VYTGszWHhUeGQ2UGdZMjBLakpmQjhlSldRaTFuV0ZNOEc1cUkyVkF3RCtDK1kzUFFCOUIrNSs1RXdVdDRSYmdzYXNWTXBVY0JORW5WSERQdmQrVDBjYnlFdEJiQ01DU2pndnZmUUZFRFk4MUhDWFYxV0R4eGttTGxZTll0Umt3RnhsQ3BEZUUvWHIxQnBoZUFFWFVUY3U0NHBBZm5xb2dsVUs0S2h5ajc0WW5tZUppQmF2b3oyekxlcWlJdXlwcVAyZ0I3My9vNlJ1QUhBbnRXQjJTWU5BSGJWK1dQdXQrTEkyODlYTm5rbUFITGpMNWNURFNhY213MS90MzJ1Sm50WDhOWHloVFFGaFpZSGJvSWFXaUd5bHgweTlFNm43VjZQNGovTGEyN3VHNTQ3YnhMYVUzSU5rWlBvT3I4RW5aRnpBVzFZdnUrOEwzaW1DQWNYdDhDeWx5bG9RTlpSTXZsRFZCKzdXYSs5M3FLcTRlbkNNQ202Wkt5MDg1K0FXSVl5QXNpcDgwNXRadmdPNkdWbWlxNTRmelNTY1JFZmdHRWZ6RDNYK3B4d2JOallvZ0d4cDBuOS9FOFJCc2ZmUkNZUWhtbi9HSjZKKzRpalRyL3FwRUYrT0g5TFd5bTJkNXZrUjdWNCt2VngxVVBHa1JVV2taY3FHK3hsUkNJZ0Uvd0JxaUdaT3k1Q3hEUkx4ZEE3MDd2NkNydDN6MTYwaUpEV09Hc0QzVitIS0VHSi95c08yMmp1Y2t5OXp2RVk1NnZza28xbi9TTGlER09PSGRJeTRIS2p4L0FESnRqNmNLYXBXd2xkc2JoVDlWa2lTeVdiU2FKMXZNNnpOYXUwQWRabjVEU21oWkEzUER6L1lBdksrZ25FRnExTDVqWnlldEl0b29helVoaFEzelhTcWwyRXN5N3dGZzE4L1p3UXh2cGlmWkdUekJ2SXVsYWdtUDhpNWFNYzNmY1Q4Rmw0OE9hMVdTaTFHM0JwR0lpVEZUeVNhSjMwem1DWG1IWnBRQmYzTEdPcnpEZ0ZkTHNCb2tOdTR1aTZLY3BEaHFXdnFrVk5DWWJFalhmZW12N3ZWbXRjY25XVFJtOWhGTG9MM0UvcnIvbGNFbFRpQ1ZEcVNDRHZxZlJqcG9qbGZzcHNFYkRzTEhEcndiMStPcnJwRC9mVjBlRzNTQ1M2czBGUysrcWNkZ3VPT3lEUENoTGdRRVRqQTA3UDNDeS9KWm1wRG5pVTU3VENhVVZwbnJjMWFPQmVhcngwc2JmVWQ5cHNJNytIZGszMnNiYWFBUk5vbG0yaituMjFUNFV3SHRnRHN6U1JCOUtxN29aWEJRaU1rckMyU0JRUU13QXVPM0w3WVFIZGJ5bTBrVUxoQmxSa2FLZE9OdEM0bXZSL3RBd294U0dtRnNzdWprZnNERk94M24zenBBZmtGY1dRVzcyRWJYdjhNZEE3UGN3QjJteS9XL3l0cjlaVDVKdEZPWG40SGl0NjhwNzNONllJR3kzWUhjWXlsUVJQUTdVcmV1cDFPcERSUWZ3STV2M1BhZWRjNGlRNFViZ2QwVDRZdkR3VEc2Sk13M2dZSGJYSXB1MXdacmdnNXJ2RzIwL1hPWUlMQWZCYUxjS1VheWUzT3l2TGp0MHZYQkg2VlpNWThQN0U3K0hDNWcxclZPVC9VM0VBZ3NoUEdZZjRIeER5ejBuZnp5MlVnTGpFazhiNjhzTjkxRko3ckN2YXJTeDdBcFVBL3pJTWFlbWpoSjRpbEFLSkdzNUZhTDRSZFZQQytpU0FlNWFwbDR6Y0RZMVR3dVlzM0tCMnZSWXdseFhkNE1uT0trMDRxTE9LSC9nOVRkbSsvMmNqUnEyWDNYRmZzcHlXNXU2bTJmVVd2YnJJVzNRSVlKbC9RaHp5VUxsWVMyTUE5d2IzZWdWc2kxS1hvV0tOUWpDbnRFaGxhTU9PQ3k5OWFjalZ3S21qUVVOUDFuNFgzUDk2R1V6OXJ6YU5BZjNHM2hVU2hGYUhjOXpGNHZtZ0RsTVYreERhTjdqZk1kWHZXOElocnh2M00zMHBpK0YzeHZvV01kWlB3NVdDWTVtaSt4Y1JyNUErbHRvQXBPL1pydFRJaFR2U3RKWjB5bnlBcjBHVFNFcWovcVRpWkJXYTl0aTh3ME0wc2gxOGdjL09GVSs4YUQzQTRNajJMY2FoYzNPRWZ4bUwwbUp2WU05bktrVzRuMTVQYXRBR2VQRGs1YlkzNG1PRjZkdXNKTlNXWmlHNVZkKzR5eGdGdmFicjZOcUxEMEx0TVhxQzV1WGVVTUNsdGtRVUgxRjFKVGNUU1RzZlEwTjdpMkROVWxXTGI1eXNQQlQ4RTRqQ1IzZXRlZmJINnJnVi8zTUt1bHlMOURySzF2UkJKTjlsUGt1VCs3dkovWi9VbGwwSGcvWTZIWjd0MVJEdkllNjByVmNFaDNMdkIvSVBkaHBTRjloa1BEdFpKQmY3YWlvNjY0bFVVQVNpemtsZldXTXZUcmNDQVRncUxhTS9pc0JLcVRSa0xMUEdDeWpZUUZ0eWxSR3htT0JUZWJwZ2dYZ3ZheG5SeGpzR3pKZkhKS2JLUmVTUGZVdEV1UjFJNk04MURnM09ta2dtN0FVZm15cnVtSzltWEV0eUJvR1NiNmpxcW82ZGdRUTdzTjRTS3Bxd0FJR0JBcGNNNTQvTmdjU2h1dHRIVENuNTdnbmllYWVobmxMc2hkTk4rZy8zVmt1L2dVUWh5aUduRmxpVVFaV1NYelRlRlNvSy94UHNyZmhLeWl3WFVzbHNLUyt1bkwzWWZqV2dGdVNpT3RyYW5JN0lDbk9HV1hYays1VSsxVU9GbnR3QTI3SExrUmdoUmdYSFNsRFJpYmZ0N0haTFpoczZsMzJFM1RKYlNWNjFhNDJxeHZUVDdjV2VaWi9HdldUcDJNOEd0RjlFL0J5R2RTRjJQY2RQbVpub0ZwTzdMWVJlZnNuaTVVMmR1MFl1YnpiSEVQdFAyNUFsREFsZTVwVUptSkRsQUkyd2E5RFFEbW1vQlBablNFSUYvcjVVT29WOXBob2tVTzJUVHpsVGkrWHJyT2lOYmVKMHd2eXRkY0RadGRRNC9CRzVGVFZVRUtDZU51N2VQZnh1NFVicENnM21xWXE5VHJFUGVreGFycEd4NW1kcVFsYU5VaWFabGo5eURZSDhicy9HKytkMzl1UmxnTlJMWDd1UllmY2tYNHNUWDBiNWJuWFRHMkhOR1dpZ0liVEVEUTd5bFk1WnlOV0VwZmNuZUFML1l6bCtpOHk5VFdoQzg2dDZwRXJML2FOTWFEQ1ViWjYzZlVoVWZYNy9hOWdHVUVRcm8rYWdScWdudi85cXY0N2tDdFBMc2ZEWVBuTWRZYzZ5TUdBMllvTTZ5Y1Rlc0RGekxxOUtPRkhsT292c1hwclhuaityakpKdGF6RG5rYWFLQVZYdTVUczcveStwU3hDenREcVZYYTBPSUk3YS8wbGFPemp3WDAxZ3hZNkxDKzZnSWsyVThjbTA5ZTdBSWRxOG9lYU1xUEFOY2pId0Q5WmwydjI2MU1RNVJib2VZejI5SmJaUXBiQWgya21CcHlvWHQwS002Yk9OTWROSmU3Z2I3cmpycVFxNzF0Qmkza0JSSFIzb0VPT21MNmhpRzJ4UE8vSXl4eVBBQUlzK3lrUHg0M3laS2FjV0tjUy9LRUtOVXlDakt6QTlRMHhZUlFqZmd3S0Z1dHhKMHVPWmZ3VXZwY3prTHhPTlYxRDZSK250ZmtKOXFOc1JwckhsdGVuTmxDMCtUdnBDZXA4NmlQaW15VGpzSk0ydWlGMG9QbitaZDhtbTdjdllRQVNMdkFRUTZqT0VjYm13UGFBaDFqVHgxQ3JadUFZTG1Tck45T1JkOWVDMElZTXhNWDd1NnczZE15SjVBcUJVWitDU0I5THlJN2NiYUx2NTZyNUV6eHIvQXU3ZGp0OWdRMWJvZzZMeFREMWlXbXdwbHhnVUZRaEFWclVaS3NqRmc1RDNEejZJMndUT3RxcnA1QnFmbzE1Z281RUZPQTlyMVVBS0x5aUdBaEN2YVl5UjlWNHRXSnJjcHY3M2NRQ2NOUmQwZjQ4UmVpWGtLcW53elIxMzRraVh4aWpwMm90dU9sdWtKZlhEeEcwSlAxT04vMEdyWVllYWtKVlVsY0k3cWgrUW9VaXJoTHpSaGpXTG5ZczRSVHNrZy83L1VITWd0RmpJRE5MZmxxVWVDbXJZbVFkVkM3MTdqQjZrRkpUY3lUK1BvOFQzcWw1VW1IMmQrUXo0Q1JUQSthUEpvSWhQRVRSa3pVVHVDOE9PUmxxOUZlREtDaDVDcEVSRkhVckYzV2U5TmxlWHRMYWlhM0xQaW5CdE1ONWgvTXdYQ21tMFp2OUZFaHQ1Rlpua0lBRzE1elRCL0o1eUQzMXZtc0srL2dwUjliWEhWcWlMMEZVQnlYTnBxQm9OcUdXL0Z0T1Qzd2NtOFN1amVrc3psSmtSb1pMTDhrUkF1MGJBOFhDRVFhaDdUcVhGL0ZOUCtjLzdaWmhQQVMrckxIRWFzS2M4RGVsQVgyM1FWWHlQL2R1WmJsZ3hrWjd3ZXdXNmZXejhNV1NXbmowbUp5Y21GdXBMbzFobWR3T1lEMmd2RnpiRWtoZEtRS044T3ZkSDU0ZUwrNGZ2cU1tTHpHOHl0N09VNlM2RHd3OXN2enNHZDhQb2RETHlQN1FESHdSTk42S2FhQ2ZYVXhzdVd6RzdRdXpCSjRiL0IxYkc4aWF2bWtxWGRwN0JlZVBKWHVFQWI5U0dyM240NmZVZ3pGQVEzTHRjWTB3V3g3bEtrM3JsL0RJbngrS1FvbUlQeHZMeE9YcEU3L2QzYW9UMVd0cDJRY29naSsvTVZYNkUwOWpLc1diQ1hUQkpGV2NkOUo4T3FJcUUyMnVRM2tramZGUUo1SmhiNCtERXZWcy9QUEVzZjVuNERLY2R0TlFDY0xQQTAvbXlBbFFMQUVUUUdlZXdURmhHK2JHRlFkT2UrbG9mV3g5eXpNSDFoUWVXQStZb0hqZGpJN3FPNm1iMnhubFZ6SFFzQkc2R2VGbk1pV3NtVzlVQzl3TkNCS3dlSlhSamEwbFRCZk9OWU1GV3NsODE4ZVY0Q21ubzkzVHNudXJPQ0todCsxczUzN2RVeGdhbUx1b0dKeVQxRGlpSXN1cXRxdUpGV2E1amhTeVZpZlBVZHFoWWpBMnJPUjRaWkxKcy9RN1FuT1hPNE1LdmxrSmhsWHFPVzdnWkVJbVljQzBTNGdxYnBIcEl0bDAvbXo0UEk2RnREdE1vd1VadWtmZW1HVzFLcXlLYVd3b1FtZTl2VHJ6SkVMUmRNMDFMZlFwRWFuNEd6bVZRdXhmL080dlAyd0tYUjhjSy9YelB4bk9rV01QbnVtUHo4RmF2cGVVK3lRSW9JZ25LL05LS0wrKzRIZnBLZURwMG1JMXhqWEIremlBSDFKbWNYeGl2UUNGcUswRjNETTJ0SHFlS3Z1VWNzcXcvVGgxQVlZVmtmM1BWd2J6ZWFpRjFXNjc5VysxaC9OSHZOM245VEtjcFZZbGtqSE43SHZnaXpRUFQ2cTJ0dWFSVENITG9zaFB0RkVmYnJLOGxFSEZNRnhBVEs4eEZ2eVJUWGlxV0ZkbHVod2NlOEpIeUs0REhhNkVvQysvNWw1OHlJaVpUMjI5cjdhbnhSY08yOXpFVmtCZG1JbXdHSFBBUmtXYnhXMUVrSXA2UkJ4NnBrM1BWUGNidzcrdHBTNHNlK1htd2ZFSjlUUXFKUjdvSm55bTRjbU1HUXhtRjIyWlk0WUE4aWlQTFlNa1hDYzdLN2FNdjBZRENMd0U2eG04Q05ROW4rMGlzQVdqWGtsblV3Z0d2UGRWd3dVRFRveHdxeWo5amsxYXpuT0NmR0V4ZThPUGN2WmRXQU8xaU5zYlUvSVVPRHJYU2l5c3NWdzROSVBESUlTY1hqTE5jbEpjSjBjM1gzb2lXQjl1Ry95Vk9sZ2lvT2hmMHVqbHlRK3lXaHpDZzd2UXh2Rk5OS1JsNEpIZmtrL0NtY09ySkFtOWp0R1FwK25CbXA0UmlldVFnRUZEeFNvQTJJOEVZM0tlOVNRaWEvWE9VQWY5d1dTcmx4SVRTVDI4SUdKNFlVMnlVSkNsYldhT1RocWsxYnB4T3E1ZFdOd3VyTytFQk9qWXJwQW83bkJ6U2ZCcmgzdWlzTFBNWmt4K3dESUcrcFdERnVialIrQzlBODFJdkJiWmI1MjJndTdhSWhFcGI0Nm5GcWFZZlJFeUNObzBzem9IVE1KMi9lSmMzV1JOaVAzZGVaQ2xQNFYzU1gyK3d2SFJ3cXVBQnZjdlhsTHE0enU3Y2hyZXhmTGZHemNjVmV2cVlhZ1BvQ0oxNnRScmVDSW4vRVQrYzRPeGJuM2xmQWZxWndCUmFyQmwwUXRrdXBpRFptZWdZQWZIbmJCWUpnZzMxVTNRMVRXcjNBbW8zT1JhVEJmaGFNUnVBVzkzUEd1TU8wZy9VMTFKTzZLSFBKRlduZUhYMHRRbmNTcUZOSDBYZUZHSGpmdUM1djQ0Mnk4ZmFNODBybWVRN2NnWENWVlJFTWxxZlJtV3BNZ2E4cU5NRFhzOEIyRzRCWXhQNG9Kend2YW5PQ2ZVTXVjOHhodDBKOU96VG5Kd2thUm9nalBiTHhkb1RzQm9UMzdmZDJOemJHNTk0c3EzNTNoNXdhcHIyb0NuNTllTEFrTEdXeE5KWTk3aXNzNmw1ekZNM0FjK2R5MDRuZlZucG9ZMnMrbExuTEhySmdDZ2pJZlRzTjA5YUcyUXBZOFdtd0hFanJQcHFmZW9Qa0VQcStDSFhRR0srcWV5cmlyZFhGamZsSG1xNlNaUEJXMTR3bjJGU0ZlNlNMcWJNc3VpQm1GRk0vaUh6Y0d2VGJ0N1VuMm00ZUFpNVhGZzBHbmVLeSsyTHdZQlE4MjFweldDUlNadytZNkFNbkk4bXV4SmFLZkY4SkxLQ1p3dlBnQllObTIrWWRxaWZqbnVtNFZYM1l2V1N3bS9BWXFqUEo3c1VkRnJ4OWsyc3lzd0RNbU5qR0NpMVFpMmdaZDdoMWFNZ3lEbStqT01YY0pzNUxlUHFNK2hHNUtkeWxoVmJvdmJURS9MSHZ2dlI2QXRHa0hZaDBkR0hCQ2g1M1hyYkxCeUxHRXVnclN6Ri9OUHprMExIRkF0S0VWR0JYOTluaHAxR3c2OUo5RE50bzBaWHpSOHd4WHdNSDZxTnZXMDBtVis5RDVTRlc3OXI5Rm16YWtXY2llajdzY3Y0cmxiZTNGVStwN2FxSUg1aytiREdqZ3lJR3ZtUitNVWdoL3EyZDFxa1dZODdXSFNHVFdNOC9ZTlBOYjhUMGduQ2ZKalRVeWsvOFVRUFU0MkFRekMxSlhXR21oNG9hTTZMVmRCVzBjQm41QVI3bHpsWEM2Ukkyd2Q2WW8vUHU4YmdNZmpKbDYzRGcvb05RaGtlbDZFSnNVb2dCVnE4NHBjUndadTRyVFFIRjMyU3NXdVdlM2drYko3QTJTdzc5TXhnd0FWQXpFRjhlT0RQWWJtYWk5NkIyVEdleWVJc0pLYVZUNWt3UlRJUS9XYjhOWkNPTk5VWWdWVEhHaVJSMUVldG9WazRMUmxXQTBuZ1NLd1VneDRnR2tlZ3VpR1N5dlZVR2tpQ1FVdEFIVlhMOVEwNHloVHNENnpmOHBpdGhSQU9JcWxEN2pkYjRXSUpaQ1BrVDRYMnduV1ZMSGVQTjh4eEpjWGpQNHdCZ0JmTGVhTW9PcFdyZTRPMk9OOXBaZ1ZhL0tQVEpyUjN5NFp5L2FFSENmRkRQRUVTZ1kzOGpoV1ZiS013M05rWlhFUVFHbFNhSFcvOGlzZ3dvRkd4SmxjYmpwNDhHMGlXaFl0ei92aEJuenkyNlpOT1c5UUhnSndWSUFKSWxCbUdqL0tIcC9HTnlJSXBnWXN4V0tpMEp3V3czQ2l3cHhBSGh2OG9aYWZIOTR6dDlSNFFCTTFSRzZBUkFxVVR1bmhtTXZRUk5HZG1BelJLLzAxNitBZ1ovcVNWUFFpaGl5a21kdG05TFYwWGtNNVdoWXJudXFWTjVDbjdpSk1IdUdLWWk2eE9TbFJpY0VucSs5R0kvbjBCaWd0N3RENEJKQU53SFVlTjlpM2RzcnVDUVlDczFUcWwyci90WnhKRjFiSGxncno5bkJFTnhPckFRQkVMQTd1dlB5OEtTeTJTaHpTUW9JWHQwQjIwdE4xTlRoK0lNR082UWdmRmFWMGc3eWtFVCtPN21mSmlMeW0za0w5ZzZwTDdYbDVYaWNoN3ZuWTdXTm82RW9RUmdTcTVCa0M4WEhIeWRFYUxhTld0OWVET1cwRy9RSE5Uc3FNbno2NXd0WUpjU2d5N2JuZGRYczFGZkpGVFJ6NGU1b2ZNRGpKZ3A3eDh3UFpDd3RKd2wzcHk2L05BVkNoaXhGSFZPcDN1czNYMUYyY3BzZEtTOThvVFQrQWg5SHRNMk9NUXIwLzc1YlN6L01Fa2JXdE5YSm1YbDZ1M3BuMlo0RnU4ZEZFRkJCL1dmWWJQdUJyZWhkYm1OV0Zta1Vwc3RwS1h6N3UzNkc3ZTZYTmNiTjhTTFoyTTI2bVlsRXREL2hWMEJPSjBYN0dKRjQ4RDJ3NE1xdlFJMVlCdHkvSHBHYmhNSS9uN3dHT2x3c0llR2xWaHNKZGE5cU05SFlaVjlSLytka3pvRzB2KzloWWpUbEtxQVJwajVpZ1N5ZlkyNFN4TGZwWTFpSEJkMndzVGpZdmJlb3BBYnlTUFE3aDdtZ2ZHdXVOL3lsa3FoTnhoKzdabXFWQjNEaHlveFFMZ3lBU1ljWFdiYzl4a3FhMnk0bWRITXl0N0Ewdm5rTFBOTWVGSzlCT25sMktYSjNvcVpoZ0dqS29BcmdFemVsTkRvYUZNL0thNmZzOUhUa2xHVFhRYkF1ZEhjUnVyMmpXSkxwTXpNUlhDcEpjaDFBbnVSLzdmck9YRncwbzJsUDArRUw4bjBkTSt6QkZPcExCcDlmcDdpdlV6RlU1Snp2Q2Q2T200U2hzREVRRGh0akxiSnZOYUpGTGRYVTU4aklWY2lnaVIxMFl5S3g2QnY3Y210N3lWMFlrNy93TFZXTEo3ZXJWWlNCdC9ZaFJwSUtOcUw1ZzNNRjZINklHU1l2bUVwMzM4N1pRdWhzaWlXQ3Y0Y3NwTWwwOGNBTzI1TnRweFVoVytiQVpmVENUVmZ1aHJhSU1Cd3lES0JhcmluRlFYNWFVeUp2SEpIZnVVcXAwWTZnSjVOTUdubTc3R1BTVytZdXpwRGFjOGxGb2IyeVROWThtK2NQcXhNWGk1M3FzNzFhRkRTclVTU2JYWUo0TUFRSHhRM1ZnU3BONm5sV2I2bHY4VG9VcGNuYVpOVnhoaVV5M1RDWXc2ck42SHlqRWFaU0pNRGVkaVFtK3ROYkhQUlZvTDhlM3J0c1dtY0doZTRlVXVBVllIajNyL0VPM2xoSUZ0Y2pxWG93d0VoUWM4dW9HM1gxWFNtZk81andnditMaVBOYlBaV1pjMEhqdG9KSUN4Vld0dHFZU0lPRmdQdk9oTitaZGxrVVE3aWhSSFZ6L0t2UTIveTRKSU9TaCt1N1BoRVl0S3hFZXlUNC9XL0gzd21Na1R2eWZUSWh5YS96VFA0YXBjcFlYNFhBL2ZUbFRWTEV6WWd0WW01MHE3TG1tc2JPR1ZLRXM4Y2ZpMkM3ejJ3MEkxKzJENzlaWmVrbStLaHpoQ2w2bHRSNlAzTlkrajFGV3VxOXk3c21yOGRha0xjc2h0WlpYZDhLejRsWmcvN0F6dlcydnhrVnhNY1hUL0lCc3dwb1hUcFZPVzZTWHcrZkJJbWt6MWVSWHZEOFRBSXZsSXpJcVFweU83RldNekpaZi9JZlpSWjlJMGh1c3NXeVZ3dE5VOVBCRnBHajJuQUZjb1A1Vkg2aVVJZ1l5UkozTDFDMUtGQVhuN0dhYW1sazdVVHY5cmVqS1hRVFRnV0VPaUJlTHZzek1uMGtTeW1EVTFtOGZWRzNiWE5pMVhkMVdiVzdoQjFkMWJDcGNhQk5GaXlnOUNjM3RJVHNYWWwzcUlkTmhqTTR1dXBrOWpIK0NNaFF1ZzNVUnE2MG8rUy9XYlM4NjZzem1uWmcrTVdPSDRRZXBjbVNPVUFuWVIyaExzTnRDVlA2ZEtob1RjcnZKdzM1QlBONi9YcDduTFFlaEZ4MGpQTi9aOW5vVVgzS3M3aG1sbHV0aVJsZjl0aTRvaDltK2N2c3pJbTdDd1RZdVQxbjl6NGFDSWUzNWFjRFQ4RmNkVFNhNVp2L3psWi8xR2Z3RzRrdFMzTkdxcHlOcjJmcXBvdC9vYkUwajYvamhyR3dvLzVLV2xLM0VDNmtpd0hza0tBa3M1a0p3akNmcVB0M3c0Q3BGVEJrTjlvQS9iU0E2VzdPV2FTdzVOT1RSREw3V2V6MmQ4WVJDVnlCb0lXZjlETEVtVFpKL2RUOHVTVFBaRis3SHRhUXFyOEdqTHJpczdyTXFQS3E3djd4WHIySWpHYVNod25kYk05WWhzb3BHdnFMS2tJdjlWM1phTWVqYTl4SmlGOUdUU1NLQ3NoNkZwdTdFa1pPeTRtbHUvRkdSUytZQ0tJMWJFMWFqQXQ3RE9OUzJKTExhaXRhc3RFQmdpN3JWYVJ0c3BRTHhDZUJOUzlMcFBpSnJBYlRiK24zU2dIMG1Yd1J4aVZBMjVKRUUzb2YxeVRXdm5udXFYZ0FEUXZOTUVqWUY3bE44OTlMRFFxbGdFNzJZTkF5T0VVK1d0eWVJV3NpdWRUcVk2cDk2NVh3MXh4QVVKRUNWaHBDTHVNQWtjRm44ZHJwVWF3TTRHNEhkd1BhNG1lNjM2WTg2aDd0emU5eCtFT0lPaUNjdS9ualVFN2M2eEFzTTg2Mi91RHZLaHhYQ3BidmlWQkk2cHJ5NW4xYnBkdFJBdUY3UlZHTEpTUkZDU3NlYlZxQXVkTjhSTUxpcmxQa0kzV1RXbWQ1eVJaekdxd0R1Tk8yNVp2alFMYVh5Z1lleWJmajBQZzFZRWdXMjFzbzR0K2VvKzNRdDh2SGEvaGV0dzY2bktkZUp3ZWlENHkxZ3M0TVRxOVBzY0h2SGl3d2hVamMzZk5ibWJ3dW5nT2d1dnprbzE5dnMwVTF1SGNSMTltT25qU1N3U2tvaWlLeno1N0RyemJPODN5a2NvcGFSNDE2bmN6eEdrL3ZQVTdNVUpra1RLTDdxYWI1MVJlQ3Rac0xFdHc1OVVJVHZZU1hRUzl5eWZzNWY5eEZ0c25PRHpTbG8rV1ljSnQ5VUx4RGdkU1ZSbXpCL2UyYkRMVTg1RGVkRWlPb3NYTEY1TGF5WVdlVlIrcVUza08vT1lTdDRubVhxQkdXMklzNWVncFBMMEUyRlRURDZUN0tRTmhPSGNWOXM5SEMxWlBTL1d0RnJRak1sMGpjdDdsamkwbEZqd1BjUzZic25ielVHdVJrQkFGbWljUXltTjlNMVNSaTFqTkZSVk9VVmRzWjBhNE1KSVNISFc2MkNmM0tHanlpQW12cGZzM0lNYWhqWk52Z002Y20xQWsxS0dydHFLdm40TDg2N1MzUFl2Q3EyNFBvbGZNSXBZMkx1anloZW52VHBDL0k4TUtpRDEzUmUwQmNuR1RDWWU2SjYwMDB2Z21ZdTQyM0dTSnllTHVKZ3cwR3dZdGtsazc5MVEwcXpibkNIR0UyU1BseFVrdGJUbDNIVUg0YzF5ME5CY1paaDVoek9Gd2dzaXdtZUFvemF1TDNIUjR5WEkxRTZtdHI3R1gvbERGMXg0dkFwSU5FaXFWR2crbUYrdmkrR2huYVprMzkwYTdHTjRrVjVNSE9aOE1waE5VSTdoelJ2UkpHNUZBcGZHTThYa0RzTEc5Qldtc0pJRHZ6NEZXQTZUd3I3U3NOQjlkL3ZKak5RbDl3bDM5RWQzcXkxN2FhQkVVc3dXWVhQNi9pTVh5VFRGNWY4NmpXaTk3dCtDdzV0dHIwWjNyMzdaWGQ3emJlcGhTcEJiaGhMbHRoN3Q0d3oreHhDY2pqM3NKdXF4NWVmWjFQZDNxRWRKK3ljcVNvWTBPUVZNNHBUdndEZGYrQm5TWjJVZHVpNlUzVGt4OXdPamZpZWEvSUtBOGxPSERUVmF0ektCWW5JTWF3NWJUMGhMVmVvZER1a3pPUFBDdXJtVjhQNG9PUXZqczhZVGxxbTZkZytETExDRFgzUllpRlhod2hYRllTRnFCZ0VqN1FxRkFFeVh5ZXBmT1VyVmlIY1ROWW1mUDlTVTN1Yng0YlBWM0s3SzhrNTdJQytnaStWN2NJUTE5a0dBdEZ2aEs0Y1NZdDBYSzJWY3oyNDMyNFBoVEF0UGtQWS9VbkwvaERzWDRpY2prc3JtKy9ZK2RlTE8rK0hkSXpPSGpXUVBsTWVZUTBtdWFNQVBDK3pxK2VQd0Y4ODdCYkJKN2lnb1dBMHlZVysyQlF1cVVnZTdWMmRXS2ZWNnAzb0dadkowRGlEcjNKL3JuNHNJWnZpVHNiOXRBSUZBUklWYmxBejNESzFnR1Z3bWswZjRhU1hmaWhWUEIwemhZS3NQb1BtRDZQOWJvWXcraFVaM3FueWdDdmlRTlAxSWdMbnk3RDNZWVFaUWhTbVlta3FLVmhUV1RlQk16TXFMbENVcUlicUN5MnpGZDhYcSsrN3ZQWmVzTy9QY2N0emZ0MWxyZlBxS01IV2pndko3TTIwT2JnVDFyc2wrQUJEVkVVOWdweW9BMEVaUjZpTnZRSWdqT24wVmhZYURZdG5hTjVIZWhLQjZMUDk0MHJINitiMHZPSVBWYnVza25DYkFkNXlodDgyMHMwT2E5VUNwbG1YT2libm15T0N4bVBYam9xS1NYWDBsZWFWWGZ4bVh4S0loaGxIY3dzZU9DYmthRzBwY0lyOFZrOSs2VzNmdDNKM0ozcEhRV2JINXpVblJqSVVXTjY5VzMySVByQzQwZHpjejVOMzJPQ1paMExOM0FUWEVtUjIyZVJpQnpzaEsvNEVDNm1oZzFLdnVHMzlzUDFGZzJBZmN1UVBnd0w0VTRXcmNiVHNSdVIvamZneUdmTlc5eTZCbmJsV2JIMDFWUU15UC9NaDZrckRISUgxR01PM1lyLzl4WXhUQllkRWZXUUhZbG9CLytWUTBmWjFJVEd5eDd3UjY0cnV0VkxuTURNUTBPRlV6TXh0VUNra2l2emQxYUMzRUdCTllPQWVuMU1UbStQczVLSjJmU21wRkZUSHZWQ05wKzhwT203dDZQT0NaY2p1QVRCdWxwWkNaMGw2cTJ0NDJEaEF0VnN6aGVLbGR6eXRldkRJcGpUYm9Da3BEMDVuaW1XdHR3UUFYUzNhQldiSEppTUFvdXNnZHNBYXpGL1pBMWNOaGswaGxvaHVTVXBYalpGUXErWDlPZW1nSWVUQmowcHgyaFBDTVdQUGwxdkFOaGJ0YWp4NzBnd2xWdGVLUlEzVnlmVFdveWFoWWlFUE15MFR6Sk9hMVBFN0dmekl0ZjJ6bmxZdUg5akFFdGtPR2Z1SWp3Y0I4a3BPMmdZb28rVUVIa20wbW9mdGQraHBHWG5VZmJNRVZvYWZndUZ0YWhEU2xqdGVHOUNQVmtsMHRxaGxKTlBqcUR6S01XakVlR1cxQStMbytjcnJNSlNqWmFGUjRLYWZuTEhoL1pEb2kyK2p4eHNTdkxGdGRaazRsaEhvNlp1ZHh0azFLMmlUeGRXZHJBMDlndlhscW9yM3ZzY2FieWV1YVdDTXM4M3l6TWtTYjlsQXAwSWVkaHNDUU1HVjQ1V2JjZnNVSzJKalhwOERLNVNZYWFsbjQvTkNMekpHV0c5OFlLSFhLYnJoUjJjVkNwbmEzSGdwZ3FFci9TVzhETHdPWEhQVUhBRHRBQTBQMGV1Z1k3M1A5Skp1ZEo1dHBCaCt6UnVQU1B1d2dqYU1oWG92MUw0d2J2TCtlNDNFU1p6eFAwN0hqU0lCbWVsaUtWS3g2c0ROb2JtWVhydEszY1lZeUU2TlhtTnlkZEZ4eDdLZnNTYXIzU3RLMEFyRENxK3B2QjlhV0VnZ08rYlBCTlNpVnZ5RVQvZDJZaVczS1haWHkzNDM2Tzc0ZWRqazJPaVIyek5lM09GbmlrSTNpLzJaTHJKeXc4RVlGOFFoUG0vTndhZ0ZXK2lESXE3dEZGODlEMjRUUlNNZzNMTmFPaUZxL1V6d2Fiek1hVWhYcmRTaDh1YnNNQjhmcDZERTVyOG9YREFPNUtNajFSSHVoOU96UjV2c2h6NmV4KzVGYUhlYlZZaDNXVkVEZHF1RU84WmRZWUdMeWFFVmwzZHJ5TWhXNEpMYjgxcWo4NEx3ZTRIRWptUzdaZVA5R0g2Q2ZHeFQvTC9peHVtZExjeGJxVzA4Z0JRRkdPTzJYQTNaSE1ZMURId3NkdUxTcUdiV0V0NXIzSm40ckZqMlI3QXcya0w5M3VaN2c4dG1MRWNtSWk1YmNMaTRuekhzSFBoeG1oWnlXN2ZZSkp5NE84aThlUDJzeVZlUjM4QWNGZjJSQVNHc2NaQzlEYnJpWnJERjI0bXo3VlRjRks5d3VVMUx0WGZReUFva0dSU1hqN3JBdmZhRk1TSDBBR2l0cklmVWNKUTZaK1ltRFRSdnA0d3JmaUFYQ2sxRXdIaGlOc001SUxXbFlqV2pJSHFIa2lPVzdhb1puK3VHUUEzVEdUeGQrZUdOV1JyWDdLazh6WW05Tnh6TkdFMVFkMkxvRVcyMXRwdkw0TVJ2YlVWK1o5TC9ubWIxYUxFbW5GL1M4RWx6WXlXcWkxWHZYZjZoNUhvbmxRWVZib2FhdW4vVDFjV1ZKb3cwMk5td3Vlc2o5TWNoM2lMR3hGcTZadEFHQkRRT0Fva0RmbVJENTJNNmgwMG5POTZub2RJVlM1ZERmeDBodUsrVmI5cGdTd0lMUWgycjdPbVV3QUVYL0ZMbHFZc3Y0ekVNTjlJb3VEV0VkdEMzM0JSWU1aUytLVkoybE41eERJSlpreEhNTURnMktMZWRNNlJmeEdncy94T0pJWktadFJFWEI5aUZtNHZRR0t4eWV6bzlHSGlXM2JpOFVNMURhVHZTTUNHN1BtdWdyaCtYRjZjeUlRbHNEenF5cFg5SjF5bmNVZzRGMFRKQ3JqVStWSDJsTDNiWjdENjNBdHBTMU82NEZOb1dFRXFHczFwNVVuY0x5aFFkRlE5ZE12bXNnOE85ZlAvOWpUM2cwQ0ZybCtEVm1QK09waHVZLzRVVW9KMFR5OGx4SnpVOUlJUUJ1QnVrR1FIVGJzbnhoN1F4TzY2b2FsNW9xSStlUUtnT0hYcTVJQUwzeGU4RFhEdE05U01jc0h3TU1KZmxQdDZJc0dFUVUzbjMreDFoZ3lHQkJEcXRiRVlSTUFFU2lVSjJuNVBjRGh3RnhvRWU5aFJJOGd2ZlpOaXlva1ZsUWpqaFlCNzNvOG9zaURFSDJNQlc2QjVDbmNuOE10WFc5QkNRVkNBaVIvbVI0TnRFS2EvdnRyM1FnazBuVzhsRG5SeUE5MUZFZitiY3NiQ3BqRW11RnNKL1JCcHFwVnc1eWlNZjFXZlhicjVEU21lR0lSejg1dU5VWnhEcERsNTFRbEMzNGswbVYvZXJSUkJYTEYrWmF6bGRIVG1lODIrUlhLUmlrT2JxOC9aMFc3K0twb2QyNzFsQXRlK1Y4czhwUW14SE1ZWHQwK2pzei9GT08waEtjWXJpeHMwaGJhR0JlMVF4WkpBbmRDYmZOODNuZTg5TlpDQ0gzNy9nQUcvcVk5UTZCZlNab0hwdmJPSjdwdGtBS2VOM0p1KzdpcEExMHN4TzZzVko0d2dLa0VoQmU1czBpTExVdHB0cU1NRmtscGUwUDBiRGJoZy9OdGV0OTFzMlF4aStjSFNkR3lqcmpOTEp3a3M4cGgrd0RFdjBkMGRKUG41VTF4L0pUWXZTQjEzRzFCUGxHV1grL1Vnbm1nYmsvb01HTnJtVWx1TmU1ZnlCV3NsaSsrSVNYOHduV0ZuYlUyd3dsRHhPZXIvNkFJU3FYcDMweGVlempRcG14V3g4Sm93RXlpTEI4Tnl5MTd6WmI1Z0JZQTlDb3l3bmlGeGtrdVZ5UkRadlo1VVN3NUZ0K29ESGxiTTBSY0J1Mi9NcXFsQkZTcHE3ZGFMUVVJeG4zcjFNUXJSdnBiR3FrbHJzbElVVm0zci9WTTVKa3l4QTdjb01CMkRadWZ0dS9QUFgxU3BYSTF1dlVqcmtiUGFUR3RLZkNkYUJlRTU2RmFRTUxBVkI0b2Z4b1ExcHduYXB5elBNTmJGQmJvSTAwRnpuQTJtOTlxVGV1MDh2b3YvWlpQRFdpTnlOeXFpMjBpbUNKWGZtVm44bStPMWxrQkFrOEMrb0VzbmUzRjMrMzJOZ2l2dDM4MUVmMHM3bGNXaDV3OGMrY3FDeUlFNEU1bEN0bmpJL2x1cDdOdWVPUnFCMnRycnRNRWgzTGNMOVR4MFJ3RmNiMGUvOW0zRnlqU3NJRTkvWWE4NzNkbUVmYkoyZVhIaW5VdHdaZDd1eEN1VzhtYzFuMlJBbjNEZTExVWl2VG0vSnZYU2RCQzRaMWVrSkNGS3JCNW9MYU5mWlUra2ovUzg4eVhHcWI3N0ZncVlXNUJ2OXZsVmVGTjMrQ0NKQkc4S0pVSzEwVTlNUDZKVkM0VG9RaERPekRLVWpQcmxRbzBQZmRITXkweFRGZlJoVUFkM2VnMUtvdmVSd1IwZEprM1VPbEdVVFNpdWEzeFdmN1NWR0FpeU9aNnBzcUx5cExhcHlQbXBGU2ZQVmIxR20wNjRSY1hnUWxxYm9mUVNGOHE2ZlAvT0VGdHNDTllOU0hnSFI2QnlMV1NaSXM0eGE2UUFPN3h3OCtoTVhNYzVJU20zYUMrU0lUZlA4ZEhPaXlVaTY2aVFPelEyZVhUNXFsclJJdjQrWXhFdlRnV2t6bk5CNWYyVEZvbTdmWW1LUE1zQUhiWDBGTDVLcE1uVGF0bDRRc2l3WHpoVCswOVI1UzlmZHlaN3VRR0pTZ0t6VWpPVDRBcnVnajRSd1BEQkdWeTdSZmJwUmk3bjJ0ekdIazZTZk5VbmFLVEk4OFlETm4wZGVRVUEwRWNBbFBnVk1SVnYyN1RWcWZDZ0FXUGo2MC93ZFNGTStzZEt1UnhlNXQ2WkRGVXQ5V0pmanN1NFM1cWRWNUlDL2VrR09mN0NIZ1ZQOE1CZ3oraThTM2ZQQy8xN05hMFUvYzYzTUp3Qm9HYnRPVitwcklScUs3Q2s5d3lMVG1jelh1QnFOdDVFcVFyejNGVk9ITWJySFh1RlZ0K2JEcnJZbGJwN0VwZTBjdTNiSE96UG9iVDZ3UUI1WW1CNGpGSXBCUldJQ0s5YXpsdnhHaGNwU3Z5WithaUhSQTYwZGRENTlPdTI3VjlEWFh6V2FONnZXS0RHbE5VMzZ5ektpOEdxN1JJMXRiZkY2Q2xna05uU2dUZ0dsYWlWZlphTW9GUkNmU25aR2ZkR01tUXNEQ1ZVWHJ5TklnQk92ck81WDNMeC8yN1pOTjJ2Rkt5QVQxVlI4OFB5YzJyZ2lFVUJqR3JxVXk3WjFoZVgyanc0WEU2eDJQVmdhNWk0Uk51c1JHZkpBbURPa1pEbTAzVXpBaEhPNjZuZWExSkhwOVZDTDB3a2JheUVPWTdDQlc0Q01sbGZuMml0ZFV4T3NZNkhjTEppRnFLS1BDSUJvaFZ2dzdGMlFvTkJ6WFN4TlhJSEc0OXNlSVloak9ZOFJ1d3hjWHJ0eDVmUUJOVERFdG00UENrWmE0bEs0T3JBYnV3Y1VXNnp5RklqNHFnbFNsWnlUT01XdFlSYzR2U2NINTRvMnNDbG9ZZVJtZVV6cFR2NlhISlZZMTV1dFdNOHlaSkQ0Q2tuQTBmcGlCUmVSeGtSa3RIeXpDeVlSSVRLeUdhVHRGb1hmYVNWYjYzbHd6RHgxZzJKR3B4dXpIYWV0M2RUWjYrWWdJbWJMN2NSNGhnS1FpWDBiU2tUYVFtQVRuejNNSUZWZmNuYjJBbHZUZnE0VmpaODluMnkzU09zbEVPR0E3UWtvV3V3ak5pZC92empRRUh2akpNUDJBQTBQdFBlSW9PL0xtZ2s2UXhVRVZ3aWpQU210b0dyaHFrWVJTdUg4TytYWXJSY3laNmc3WDUrVWVScDdVdDI1dTBjOGIwanRLSnczcWc2bXh1U0loL1g3MDVIaVNlMitWcTlJK0t6clpWTFJMdVRIQzI2cHIySU1mMEVCRE1YNERsa3hlRE16K1R5ZjFVZ256NFRHMHdmUEt3dWVCbkI4VENQWFB5RjFuZmtBZWY0elNSYXY5aGhxMDRpamVvcjh0bU9nOG1GTGhjSFpnTEN4OW1MOHZ3RWdaNjZudDBGM1ZMaGhWS29OdSt2MFJtK2JLenhGSkREUlBPNW5DRFB4d0FrQ0czNTJvQ054VGk0eW5jYS9oWXVnMkZvUHF3eDl2RThlQjQzdVJNTVo5RUZvVjNrUEwyOTJId0ZsanVMUVF4bVE5ME5FNmJzcUw4ekQwb0xzTWV0bnZPdVVsdWRmditZUHRmcG5PQkljckRMbkdFMDl2UWh5dnhlUmI3VVBiNFZYZnpIMG5tdXRuaSsvYmZsSk1yS0pMOEhhbTZldk9QU0pUdTMyS2ZHWUhEMGdhWUVuQ2FjQkVHdlRSbW5mNDNOaEg5ZHJLU0lvQXgrUXJNVG1CSGVQQ3RyTU5rdDlXOHlsbFM5ZmMxTU81TXVweWgzYVU3amZNVldOR2t3dmdHR1VJSExWaFdEMGN4bzIrWEJwYnRFNURzajBQZVd4ZlVLa2x6d3h5OGdPMVdhSjZlaFJOc1VqN24zdk1Edlg4KzYxMDJtVUdxd1FYSU1ISjMrWWJ3UTc3M29mTXBTNk1MVHZRUll1SWd6RDRuWUJQaEpmL0dwV2x3bURXRlppbUJYNmdKY3oxQ3VKczJhNWZDaVRyZ0E5eU1teUlyV3R2NVpBOEF4SlJ1cERaeDY5ckxINXVSWll2bDdVcEl1N3pYUE1iL2drbmtkdjRqaFpkanBnSnNMVXNDNFBEa2VzaHhyMW4zZ04xQUx4QUtFTkNHdzdlNVozVlcyd2hjWXFFS3RGYVd6cXEwTWh6MHB0Qy9VcWphUkxGWXM2M2NWc0RsOXlDdUxQM1MvMUU1SkhqK2JmOVdGczZzcUVLQysxN1ZDZlNNOXkzN3pPRU4vQ3ZvUkFxYit3TjBGeVlrMXg4VXZkd3I1VGpVTS9wRzlMZ3NMMVkzTjExQkhwQ1dteXVuT0thWVJ0V2ZILzJoblNGdi9uR3RmZEVONUZQb21FNG9iRTFSOVlPK0d6QXUyR3NVcjNHdEVMeEpHT3NZOHlIMXc3WnlTaktPOHJZR3c5ZDlEQjlhKy9zbmZ3TzdiK25kV2J1MFZRaHVKclVnNC9YNkhQSFpjemd1TVZndmJkblBuMk5WcWltMDRwTUNpQXp5aXUwa3JldERSMWM4SXNIenNlclBFZ0ZaT3NLcTVZUFcyWkJGRkd6Z1VwS0NOQ3A1MERPZDdUZVFPb2dER3JRQU5INGp4UlZobmp2YWZ1dHI4b1I2MUhLaWh0bFNJOEkwUGZreGFVTXVrWVA5N1hVMWRNTnZmbXZpQ3ZEOFpOdjRvNnFZcTF1b3J5eEZRbFRDdnBTeXJrTG9MWDV1V2lzKzljMFJsYTBBNVMvd3EyaUV6STB3ZVA1YUFsVmZPMEZDcFJ2ZEdTdnJjN2VBQzlVQTQ5QVhyZjFzeU1SWFZ5RHJBUnI2SUNOdE5lSTdUMW9iaFhNZllRa1NsQXdMK1ZWcWZKMGV5Rk1mL3dOZ1dwWEFQajQ0SGMvNWNtMnIzT0Zqb29yUXJnU0RCdUlFUXVaMnVpajBtY2lXSVpiUWNPT25xcWhKUjFKTG5TTm5nN0FWY1Y5K2prc3ROcUhES0kxVmZ5ZXlqQXZ4QmhBMXBBVlpsWGhYcHV1N1FWSnROcElDci9aRTA3bXFUWGNuNk9BOEN5K0FhR0xkR3FyeWR4N0oyV1grdU9uS25JV3F6WUhIK2lYL25MUmFBOWZtZjhRTnRicDFLRTlEYXU1aHZUMlNPKzFJeXR0bTRuNk03c2FDbllhaTdtUG1PVUFtVEhIWmx6Zm5EUlFIck1oRFFFTFV6cVA4UkM2eWNvNU4xa29HZzMwdDBFN2tJZ2RlU1hsRDYxampNNnBHTld4a2tBWmlKaHA1MWduN1dtVEdnY0txV2M3T0Q0TGtkWW9xMk56MGFZTm90em50U0wzSGNRd0tMRzkyU0d6MW1GTm5TWHpBZGFjLzI4UzJDdXNSbjV5OVA5VlVGNDR1bm5zOTB1TE00UnFOSGpiWDQ4ZkdYTVRCdmpjWGwvd0hNYWxHQ25OWDF4QU5SVjZoWUdxTGxFRGpxQlBIMVloYURYbVB3M2lqUm9SaDlWS25yRWtXZ0Y1TEJRMGZiSzlHd2FQYXJnaDNNUnZFSkw2cWpuVzcrbG1MdHNqZEpPMEc4N0ZSNzFYd1NTVEVGOXNTWXhURG9WMk0wdC85cEZwWjIxQ3VYNHdER2d2ZDM1YWRodGZSNEcyb2VQSW0rN01iSEVQdHdHRUJMVzIrNFYveHN2TDNEVzR5c1ZlNUNHNHp1YjV5OG4wK2hnZTJ6WmpUMWZuS200MFdlUzZONCt5a0FnYWFjQVJkZmZub0hLaFRXZWwyMUNRZ0Jld24vNUNRR0EwSVlzbHEydlZhVXJ0OWd1N2JzZnhnVEI5YnpRbXJrazRIY29KZU1iRnVXN1Z6TTZJamNzSCtNcDhHcXVaVmRGZG9vMEtHOWplSkQ3Um4rV0hGcEVYaEtRb3pIaG1tZzRBZTFVcStiTGNhUGR6S1RKRkZOUTNxYnBQQUZWSWVzbEVPRnRiMHZ1MFJJRnJVRG9OOHVvUzhXc1JLNG02K2N5dWVoeXNyY3Q5VWZTZVFjMkQ1Nzh3Qzh6T2hHNis5ZkVHaDZ3UFQ4UlpJUlJrUGRBSkV6YWdZS250SmFibzRzMEFyK01hRTRkdzZxdzZVZEZIa0dZQkRDUmhmeWdVNUtmS1lrOFNXOVVnZllMbjk0QjMwTFZ0M0ZObHIvNk96MGFBd0o1eEQ4RGE0dFZvYWtQL0hqemZPYjN4UTVqSk1rc015bDNXdjdCS2Y0ek0yVkJLRXFoeUJFdkt4OC9yaGp3aGVKOFhtQTBYcEhtVy9Fckw3N2tyemhRN0VyaGExeWdmbUw4dWtFMm5GNTJVcEF1MHV0cUMrMTRBaXJrUlYvVlV6eElHLzA1ems3R1lIZXF2MVdDQlljQlk5VTFQQk9YVWJjTlVnT3FwZHdJUHBSMHNabDZFZ003K3hhRExMd0xBVVBwN0RodjluVmJpYWM5aTdoKzFjUUhaZytNVGYwYWhPdVVSdkZyTEV0R1BKUWV2UTBKSjJsaHg0U21PK0huazBxSGRVdlJaenU2eXNPc2JzWWFweUE2a1JyOTBYN2FROUxsdGZ3MVI2N1ZrclRwQTVrV0oyc0U4dXpuVkVEb2lpQzdkayt6WmJRTW5lRVpMTE16SmNyWGRmbDN6OEkwM3FKQU03bENuaTdISDdzWUR2ZlNMU1pFSTlrTmJWc21iSkZHOEh5SWFyK0d3d3FBVE80V28vaVJ5N01IN1VPYTY5cmxSMUxEUjFNRTBnc0NBSmpTcll1eWI5TzRPLzBQaTlFWEhtSHJhZGZhbEJpRDl5VlVESTljVEhDOHV4RHp6ajFtQlNRT1JjWG1HYWZJU0w2dVNUbWM0WjNONGZSQVIwaFFHR21hUVdzNGF6QkQzK0dtVmh2SFFRYzIyc3hCZHNmSk05U1JlRTFzZTcvVWUxY0tUTUl2SjZkMStlL2xsZGRkVzFiUDQ3RTlHNnY3Rzdtc2c4dGczUlJrSm9tRzRKNVR3K3U1K2ZyMnpJV2Z4bjVsYzl5ZmpqbVpOcGtVMUdTamhKSWxkbUdkbjVMRUFnd2Q3MVZzckZ4c3Jld2NxRnVkOVlROEVJVThlRjZ1bDk2YTl4dzNDditRKytWVzhwdzJ4TlNxQzNmMVB6bFd5Y281Qk9TM0ZxeU0vaWpyRkw1RFpMMk5BbHZhSzZIUCtqWWJHR2RsZDZPc1JORldKaVhGS0tjZE54QXpNeWRidkJzVmlvdnZTcjZBT0l6YndSdHZzM1h3V3hOUlZWcncvQTIwOS9WeG5URGRPNjdFREw1M2lnbWNZSlY3bW1odlJZMXRNTzkzendIUWU2ZDBqL0c3Z3FFNzU3Wi9OWHAzNit6bzcxd2dydTIzRXVnL1pFanZFU3NrUmd3S0RxSDdkMklwZlRVODFVWmhjWmw4TFIvdUVBMThWSWtJL1Q3SzlEd212UmJkNnM4M1dVZU41ZFhBYnZScUExYVd0TFZocnNHUXg5RXd3cU83V2ZCOUVmcDNUb1EvZklzcW03QXJrekI1NjZBOVpCODRwV0V0OXFnbzFVVXdLMG9mM1pXZ0lMT3lVc0lDeElCYlJXSllOTVRsRWYyVmQzTnNmVnZ0MWFJR3J5TUJBeDl1d3V3OEQydnRpMlQ1cnB3N0s4Tm0wOGhrUWxLbmgxelpJN0RTSU1RRVU1S283eTVSNmpYQXB0bitVTkNZV3pPZXNXMHdEc0dPdGowZWdwTm9Ha2w3S0pWdlluM3ZiTkJieHZCTEJBT3VYYzlwdGxxTnEvVTJyZnI5T09saWIwVnUzaGVQRVlmWHFCUkJsMGM3NWtPZ0E3M1BKOE1JZEc5N1A1VUp0bkRNbGJudUltSEE4YVVITUFHNzNEU2xjSnhHbEw5Q011YXJqV0ZWQ3lXKzh0UTlqeFRKUWZndE1YTCtjRCtoK210d3ljTjgvNFFvYUIrT2J5ZjJSbjhuTmpFRTVyT08xZjRCcWRpQkE2UE16dmRid1lJOUFRQVZwNEVHTTNCTVB4VFlNV0FwQVM3REhKZmZWcVg4eDUxd3ZFRXVSaHQ0c2h5OUxEQTQveFBOTW0wbzBxN2hBRmd0Z1lieE03OVZqK3NyOFRhSlMrMlNXMGpyZExhLzArZlgyS3gvK2M1dFFMREFzMDhJVHUzbTBGSDNZSXJiWDhUKzcvRmZUZ2xXd2lmNGxvaWpyaGw2TWljQk9xNmMzV1llYUcxc2VHblB4MmMwK2puS2VLU2FWMUdhKzcvMXNHOXBralpxbGFLUmxGWjZvc2pJMlhnTjJzNzcwbmxNSmN1RXBIQ1FHeG02YnRTeEVkbllNZ1RlVGcwRCtnUUZsMjdFRVA2VjNSeU5FYzhmell4ZmRyRkhyaUFoY1RtMm8zVUdHL3NMWWg3MWtlYlk0VDBzKzMxTnA2VUNzU0IrNU5JbFdDOUhyWHpCRFY2UlROK3dQSzNJVkU3RDR1dmNKSHBKaDl3eS9vRG1NcndwNzB5Um8xK3M3RmlveHRGb3l2Y05DVm9hTTBNbjI1ODB1dFI2Ni9xcENKMjByZEhsaU0vMzJaQmpyU0toUnZOb21rVFVVR3lNdndmUEJsck13RmdlM1FWeUcrQXhVZHdianFBMjBYZ3RMTGtNV2RCSmphNWtDdytYc3EzK05YVERJTTJCL0NrNlk0bzN5Q3laazNRd1B1ZVh4eCtGN3VsSVFhaFgwK0RZK2JPTkErQnpScGJvWlJIbnRiVTV3dzR6ckFwdlVSeVl4MmhkMEtxOVFCS3JsM2dxZ3M0Z3M0K01vRTdmaW1aR0pHMTFHbXFEYk5XUzdLeDRML1pVMTc3bDBJQWlDWFVjRllueGRYSnpPUVBzWEI1OEVweXY2WnhoMmlkQjJRczYxdUx6RVpFeUNIb1lYaU5Na291NVA3TGtJNGo1VXJMdElienoyZDJtSlVOeXlGcDJDY0RBamxnRFB4MmYyK2pXcnRsWDE5aC9QTnJxRlFZQjVPWENRYmZhU0psazF0S0QzUFJwYXM0Nm5iVlBOaFBDWVdzMkMwRC94Qm01UGc0T3lZeVNEb0JIaGZhS2hXYlNpa04zV1BGczBhNW9YN3BwTmN4cGNxRjlvMWZWeStlak1WOUVKK3RGeDJFVnpnK0RZTjdET3FGalhHQWZRVHFLMURNY2pkbzJTQkxvNGZRZVZsVSt6cFVHSXdhTE12WDZWYlcyenByd1VScXlwQUlRL1hjS2dFUzJ3bDFVY0VQWUswUEw5S3NacUhuTGxmRzhzdWhzU3gzc0d2MFZESnFGMmM0aG9xcG55TDNPWXI3d1hNWFVONFVaWDJqZlMveElTNCt0TXNidkpiRnFwWUY3MDdPeDlsZnZyVjQ3bEJHZE5qNzR3bHlVNXBJd2YxdExWME8xN2xKVk9lUE5INnltZzBTdDBPNVBMdm5JMjBQRnhSTVUxV1Boa2huMzI3WEdNL09oSVIvTmg1U2lPcjJiVkhhSis0RzZ6cWY5aVg3Vk1WOVhzdUh5a3R4amVxcnpVOE5kN3lHcnZPNWN3RmdlNVVCcVF5K2ZOSnBRU0NiZytyeFFuVlpobzdxSmowR2JoaFhIenB4cHFrMnJrdVZqTXhGUktnNWEwNXI5ME5jdkpEN1BmQzhGT1hCNDFlbGxjWHJxSHRRQ1kyV2FOdzBEQ1lUbTZnYUJjMmRHL3Zodlp1YmJzTTl2S3JNRlltajhqdlVQc1RzaWJvM3ZQdUppbFIxV1IvZ2VteDA3RWE0R3ZwRHVnalVhbWFmRjNEaXZSYmlqUWtNaENzYXpacFVsMDk4eEs4SWNYdlpZVWNEYWdITk9iNWJvWk5nalI5RjMzdmtmNU1YRXlzM1hsNmJrRFZmZlRUWk1FNTVrRmROTmt1VkZLRUlEdE1PSWZjY01wb1J2dWxTTDJ3Z3hzekVlUFBqMDNUVm0rNVlzTEp2M2FvUm9FUHVVUEZ3RFl3ZXNkS0JSZ0FXZnp6T01lbUJYWlBiVGdkMzdhdlpjM05KZjNKWGEzK0FpbkFiZjl6eVhvbmt0UkxGZU9hYlUxT3dnZlJ3ZjJnN09wOHlPSVZVVXFXWFI3RkNWaFBWZ1RQN2UzUXJtMUIzd3NxZGJBTzE5bHFyb3Z5dkxVYndGVkJnbHhZeXFObHlVNlFQT3VnTm5MUHg0dFA3bUtnN1RJVjZFd293MS85UHZFVjhTSlkwREZBWVJ3cnhMdDVYSUZmYVZQQ01GWFMyZDI5SkVGbWhhdFgyOFpjZjRGSWErTk1HRkQydGk1c0J0aGExYjFJVlBmN3ZDYkZ5c2hWcWpuTElRMmwzUERMVmI1WFpadkpyQ0h4TmVFODZuWkhCSTZFS2EvTEFPS1VkWkRCZnU0ZHJpM0lBQWo4a0ZBak9kZkdPWHNZZkxybk5qSE9SeGVzcnpDekplRUxnUGhOSURvSkZSSkJHWkRoRmdJT2VtVnNma2QycENhR0xJUThQT1NpMnczZFprazlLallIZytDbTVxMFRwZUIrZUorU3EwbTYya01JekgyTXVTLzhvZ1NtRmdTMUdSSHdqNHhabkJYNnZUdG92eXVDbEpRNXV5c1hHVGQxWFBJSHoyZ3dnK2s1TTRCTVVLYWc5ekNtUWdhYkU5TTFxVExZM0w0Ym9MY0U2K1JXWmpXbnZDR2Y5aFpmRmlZSmRDTTRGMGZUNlUvQitHbHRWaDE2NHhWTlZLRDFCUEpmRWM1SGRsY2xPNzFEZnM5aXJKSTRQdCtaNnpaU1NpY053L1dXRTlScWJ5Z2o3MXdqWnkzVldoOURVS1ZwMnZnQWt5K0FhRjR6NUNiWmxwbGZXRUhoUkhsQmFCWkQ5Q2lBYWFzVW00ZUVUa1U0QUdiYXhwYlBlc1FRV0RKT3VCdVN1S0Fuck1tUU9Ga1YycUVsNm1KYngrSHZpSzRXaTcyZDQ4L1ZJMFdHamlGM1FieEQyTVcydDlYc1BlTlFqbW50cnhhcVJEdStVb3ZGS0tWRm1rTHdpZy9McXhOanMvaVB0T21ZbkpSY0ZHREV2aUpYK2dYQXE4bVVCVFhReXhleDRrcHdGMFoyMlhxSFJQSUhXWWZvbXQ1aVBGUnE0aVlRMjZwOFBVeFJPM21XOU9ZaWY4R0lSQ296aFhOMjFRTDUwWHI1UkRadVFRTW9tMnhsS0R4OFFhYWd1NmoxUjZQbk1Vd0owZ2lydWZvTDk3SHhRZ1ZkTGU4d1lkamVmdjIveTN3d0NDU2o2Q0E1aEljalJZTnNvd1AxRXZUbTBQS21BZit4amtlTXVYcG9sVzRKUXNDcFVWRW1tZnJXSlc4OTB1cnh6YW5jYU1PbWxPRlJRZmNuSXlrUDh4NkpINlRqYWM0NUg5SEdJbHpWUzcybDlZUVRRSnZQcWltTERMUXZkYzdmNUQ4VFBrS2J4bWlsNGtwRGt0QnMwSyt1WHNMcWdaU29QbWsyUWp4ZUJXb2tqcnVDdXQ0WDVIUTRYVXlseHZ3WHN2R2k3TG4zZ3pib0g2NEJoQVVPbXNoZTNmc2VSWGdlM0t2K3dzcE4xN21zWVVDdlBXYUo5cVF6bSttN3MxdjNRMmwrUzlnMXcvL0lSSnozNkJyZ1JjenZONkpXNE8yeXAxcDJxQVZ3c1doNG43d3R3SlBWdnAvRjJsSlNNOWVzOFlxRFlXMFNGRU9mTmZJNjBoVDZoWVg4TnlvVUZOSjZoY1k1R3VGNDZPMGFBMnNieTF4VmtVbmRhUGFhUE9rUjVZb21RWXVCNzUxSXdZY2tEd3FQcmoyRDhYSndBM3AvbVBIR2luN1FJdHIwakFybUJuVXplQllNcS9NRlJwQVMyM0hJakZCeWdMQUF6dU1HNnlWTVcxeXJPZ216dk5zdi9oejMwM3hjb0MrTXNxa3dGWFB5a3ZIOVZUMVVBMGVXNk1LK1lkQmNvYXZndTJnYmMwZlRIZ0dmTmx3MC9MNXMyWVZmZGdaZExNT2dlZnk3cTFRbEVCeDdYN2JrMnFTenhNRjlrMWtDbzA1eStYNXc1eXFob0xoTHhvWjRuZnExRm13TlZUOVA4VkhBS3c2c1J4TlpYUklKVlk4czdMc0J4Mk80UW9SKzRkV1h0cmdiUzNlZnVxQ09zcE8wTlFZVUtHL1dsVXRtdU05WUp2VzhpOFhWTENYc0dUSk54OWl2VG5pYWl5UW5jemlSSmpxRS80aTI3bjFvdDh0aXV0VmJNNXhVODZFNzlmVFZabHQxUmFjNWRiakl2N0p5RU9xOENaVHlpaWJEdEJBWVQzOExucTZHQ2lPcDd6OHpxTmFCeWphYUhzaVp2dUZXb0tVMG9kTDJVVGY1Zk5TaEpSaU1BQlJTUENjcmxnK1N4WlFNR0h6NS9GbEJ5VlFqNFArR3RvckMySjFQUVV0NGwvY2FoQ2RNQTVuR3YxcUNEd2tLTUNCWU5qejN3WTlBbEU3TS84OUJUZDF1R3ZqUlM4WlJSNDN0NjZOWnQ1Q0t5dFc1T29pMkhOZHpPN0JCM1VCWmI3cG0ydGpUbGZMemM1TDE0M21LZlE2S1h3b3RYU25BWnhuYnJLeWVGc2JqNU1yQ3NkZHBSWEpHVjl4bndiL1V3T0JxU0QwZDJ3VHZna3o5V3VGZDRQcmJPcGluVDlJSFBjMjh2S3NLejhHS3M2cEF2SHhaMTdvSW1ld1hjT1NobU1uYVliaHJuZ1haYlk4bUlZa3g2ZVA3bGZ3Z215WmVvYlJVUVVlWkZuc2o0TysrK3plelRVVFd4TkZqWFhUczZmRm85NHBhT3BuQUJOUkxUK3RKKzFkQkltTXhUUW5LSVBwUnRQK1NIcDZDSXZOdDBSQkRzYWdtZFhJRFM1RHU1L2FNMU1ITVNLNDBtdklKTDVQb0RUZlAvU3hYOXp3Z29uajhyQWsyU3ZzWVdXMjZiZnp0VzVWL1FycXhySG1kcUJNSVlObi9FY0U4WjU3OTJTbG5mcFlQREFWelVxVDlxYmNZcXJXaGt3YURKbGp6enl2TUZ3eWJUSVJzVmRzbUdtS2ZKZW9xUmtVMWRzWDRSYlUrd2lsRjBRS01rRWdLdldZR2VGc0lTcjhGYnA2WkhiVTBTRXBITlMrVGIxOUV2MWNBWndpeC9Dc3p3L1BaMjhwVmd6SzQwSHYrb3NVbEJGTFhUT2Ira1ZXalZVUDM4UHZvZGdUUjg3REpmZzArOHJtd0JOMUxhak05TVpvRmZlZGp1djJ4cm5rZUtHbWExMTQ4WWpTSW1BWi9mRmdvZmEwb3pLM0xnaE1yRkl4VGxuNzJ5MEZMczNxV052VHdyZ2xIcFM5Ylp1RGlzZExuY2lYTW1zSFNtdjFmanhzdWxnc1VjVTdLUDVxVFBCZHJmSW41TmNldUlDcWxCMzNYTU1lVmNWYWVyVkFTZ3lZNHpIaVpMc2loVlVEQ0wxeTA0Z1htSi9XMVlJWVZnUUlIQkxpdUMrdnlRUkh3TkVwMGV3OHd6M0tPV3pBMmhrM2pzdTdDcTdrSXVRSjF3MEpvRVdqdnJmT2pEcDVyK0Z1eno4eUlQTWZ5eXlrV1RIR0pZY2JuM1M2eWtYek8remdVd0hQN0dBKzBMVWlKUlVsWWwwUUxKOXZmNlFYcU1DRi8wdU5GTFNNOFliTWxScUxrWS91QjkveEd5bEUzWjhJZGxtMUFoRlVuK0M0WDRmMmV2OGY2SXBjVGIwQ2l2bXlFVXBFVVNRdHRSVzNHdWN2a2pVMm56NXROa0ZVa0lhcktvaHpZVXJneFptZTdZTjNFUDlZWE1GbHY5SERKWldzRjFEK1Vzemo0SHM4T3M5WjdDNHlXWVFKdUtCZjRwL3hCMEdFNUU0UndUOFJNMktxYzdtYkgvc2VKNU1kQlMvek9XWGcvQ1N3R09zSi8zbVFXR3Y1cVphSktTdDZmdlBMdG9RNUZkMDJCNnpJdkszYVdDRW9ZelRYdzZqeGUxbzhzNFUrWEtsTFJzblYzaktaeVh0N1dFTHFEbWFnYzJyY3NGTldJVXZ2MVBoVSt6OVFKdzZDS3lmRGJ2bm5vTW1Xa3F5V2lhcVUrcWU1VkplckFOUnBlekdZd2RtRVAvNzJ1TWJkZkV2VGNSMGpwcCtuUXFzSWxFc05Ga1oxZStZUmx3MGg0TW93a1BVY2Q2aTdEV3B2cHhmUXRRY3AzNm5raStaNjltaVYwK09vektseDJ3K2F6eUZ6V1pxY1NKM3BRNnB2eUtJanFVN3JOM0VVbGdPbnZUOFZEbG5hZk85MWg5S0hET1AzSmE2cU8vNEZwcmttbFU0cVFHaDVNRGVkUGYwL2o3Z0lQTFNzQlFCVG1XMDJLZkUvYXBrMU1GaW9sKzAvS1BCZTNDdGwrMWxqWk1YVWtGaTJ6QklLTzBCUVpsdXp5REdvY2lhS3M5Z2FCUGkxUktyMzVZZlZZazlWT0Z5RnozVVd2Vis3dmt3U3J3dEx6M1p1emFZY3p0UTNUL1dlTW8wcjFlMFRMMG9relEwS2JGRzZ5Y202eHlrb1drSGJHL0Q3UDlxeXpsRXpaQ0RkUFdROWVyaXlNdXpzbHZVOXNRektZOUZjR2RoMVBOWkowOEZmZm5MN2VIYlc5RjBwM0MvZEVreDNZdUh1TXMrM002UllwbjJzOGFQUFFjZ2YvQkV6QkJIRWJUMWdPRCtDalNzVWU1em5tU2w0WCtxRGdMa3pxSytDTzhvUWpGVGw0UWpTeStCbnVVb0F5ZEFFbHRQQkovQ1JsQ1NYZkp1NlVOV1RLRHhsVlZoUGMwKzdXZ0h5RWZpc2hpcGNqbXFpeEJUQzVyWTV0M2I2RlpqK3hsL2ZHRkVWeFYrZFRlcWViNkE4bFVveGlnaXR5QWk2KzNzZ2pJUHNha0VDS1A5RDVkeTVmd0xkVEJiZ3hrazVzNHJCVVhRekNRSWl4SjcxdE9YVjc0ejU0Q096clUzaVloK2lxYllGOFZ0eStDYzlDOWJ4OGgxTEY0Yy9RYTNLN0J4YXczMU02aVFjbTY0N0xSUUpnUVMvejFuM2dBWGQ0OFNQa3dSaEhjVHJiMkVTN3lFWXRTZWhpekN4blFCRHp3aTdiSHp2bFpaVXFiOWFYbk5UeC94VVdyRW15K09yN1JmVWRMcjV5RUxyTkE3KzVKNW8wTFZUS0xtZTFRR1E1K24yM0MxS2ZZM3dDTS96VFlhQUdGV0ptOCtZU0hPaEFWVksxOW1EUTNCT1hCVWpTTHJDNFVVODRkRW1ZVTRXRm5WTE5oRFExL2dWUDl4YjJXa0ViS1NnM0xmNnpqTDFoRlhaSU5vclNZN1EvbUp2Mmh1R3AzQlFack1WazJPbFphSWRqTVdEMnRBY0F2TW44Qmt6MHZ2N2VJeG5iVEV4ZksxUjRYRTJVVm9UdTd1b1dvRTdpRjVvMXJydThnV3NyZVo5dVN0WndURGxnSTFRcWVuZEFOU3lPb05BMzF1SitpelZWOTVpZEQ2YTE5TCtYeExiTmw5dnVtWklGekVHb1U1MXdkRVZmdWJOYUw4aTJUUlJ0SDZwUEJra3lhdkJZZFdMQkFPSmdtVDZodjc4QTlrMmVBWkN6S3VPOVNqSFA1bGhNTElkZWNyN2x3WUhHcUMxS3dzaUxydlFPN0srWmdIVytEejZzRjY0bER2VlZIR0cvMkVYY0ZRRmQzRDM0RXpURDFSbGVCaUxlMnFzVlJueGZSLzhmS0lLNVVRVTlENGUreE1oYllsR3l0TDFBbmZmWXE2TFh6aWdGY3ZqalZ6S0h2QUxObVQwY0RabXdkcm00R0xEQzJ5eVphMlI5RTd6TW00M2Q3Tzk2Njl1V2RDZmhTWDZGSFh2bElvZEVvOStmOWM1NDdqVFFaNEtQc1d1VGppV20yUHFXRE9DT2RVK0VxS1V5Z01jVU9oOWNrT296K0xpWnZVZ1pxWXpLdHV5MnE2OGM2Q3MxeW01NjFIaGZWMHBXYkM2Rm42bnZOaVpTS0NCOUFCUHo4SHJiSHdwWldWR1hUNXh6UjhxUDNFNFBVZWF2UElVU0VSdVloNHg0a3BkTEttSGduL2pNWm90TXRiejRMWDgvVWJibDNaODFxMjZhb1NMaEFsVGJUckxHQUJ0UHBVckxHRkN1Yk5pMHFQc1hZQS8rWXZVUXFCRG9DU1FWU0JjWDVNeGNXeld0V013NEhnTkZadGMxSG1mZkdsU1BpaHgyNUJmQXpocVBJM1NieFd0bTRuQ21kZC8vQzZFTEI0MXI2VXNCK2YycVNFSDYwT2lTSFZ1eFhXZTMxZGRlZUR2eFkzQSttbmkzUzYwSTM2NmQxMTRsUW1aaytFS3Bra2FCTXhyL09ERzF5MVpMekU1YWF4ZVJleTI5cVBuVzNHWHEvaXlnWDFxbzVXbkVuNUJZcDJFdWdkM0UxU0NBZDVIK203S3VmSFRLdnkyZW1QVTdTR3RjYWVLc1NPTmxCc2h3ZHpTaFhUTDluUnpFcFMwRVRyZlZhY0l4RUc3TUhPV2FkY2RSai92SWlJSFJMeEJzTnlFejluekRqQzdqa3FPc3NudlVQeUVWRVFBNXR5eTBlcEE2T21VTTB1NlVrRHFBVHF6WVl6SHEwSmt2cXhjYVhiYUQ0cHRBUk1ubndjazg4ajY5NWJOUE0va0RQRkFKSXdjYWpubWtzTmVDS25iQ3d0MG5wck0vUGtaZStxb0cwekxoaW5zT0RYcUs3dVBxcS9LMXkzeUxJdVhCLzh2SUZZWTJlelJDZ1JoS3IzZy9ZQitoWHJqQlNwVjJTUGUxYmZjd0o0WnpzenphaWtoZFluVTVEVitxZlFqR1paYVdIY1grYkJmMVlQeVI2RkEzbStRUjF2N243TjYzNjlVNDVoMnlDSmhyay9Dbzd1WGdkcERpWE9DTzZnd0wwYmlLUk1mejZnWWxDaFVPQS9jZDM4T2ZIOWRzbkNITkV6aFR6ZDYyeGkrNWJKd1AvS0ErWStSTVNUR3pmR0ZjWmRtR1B6dXkwM055S3ByK0hndmdXbmFvRFdCQjVUck1zYk9HRUtxaVd1MVFZSi9ZcGlRUWNHTE1vekpQdVFxTzJMNWE3Y1FOWWQwTHVUbFBGM1BMaGFVNTBhMFhUV2ZVTDFCOHIwbjczRHpmT2NmUW9ZR25YczNYTEhEK1crcjI1M0ttLzE1MnVTeTFjZlF1MUs3a0M5RUZ4OTNUbkZweEhUdzZWNHQydmxENlZ2WHIvYjJqSCtXRytjRVQwUVVjeTg2dHNoZk5naXdsZ2xGQThTUU9HRXRyTklvbDc2VTFVVmRhWFFNMXJiemM4YVVpbFVKd3dhN0tZRCtCWDVablMrUm1CQ1UzQlVyTTVhQzdGcXFWbjZtYlNGVDAwU2U4NEkreG5zUGFwNWlYY1RuSWVEYTB3NzhLQUtMcDNOZzhTemkzeXFUdlZiVEc1ZU1FcG5OZHhOQnlqSk1iZmsweWEyOERaQ3BmV3BaUVlZN0JJRDNXN3ZDS20wZWV3ZXJkVG1Ha2EzR21wQnA2WHJxVGNCWVY3YVpVb1ZyMytzOXdKeGUvcXJHcldxVEJHZ0xtRFQ0anhpWTdvUWloWmV0VkJsVER5cmpQR0hCQUJFQWh5S1B5YmNRcXM3OHhjRm0wMGVnZ1BUMndLdENrME9QZFlFd1JLVE5ZdENRbG9UL2Zzaiswcm42RkpGTGFEZGFCV0Erck43Qk81RVZwWUpDN2lvdWxxcjRvWWNDK3hmdGRQQTdzcWxjWmpxMXY2cy9Zcm94ekgvK3QraTVOUVVvd2l3UlFjWU9zaXIwbmdlU3FVemEvcXk3ZWV3UjdSNDF2UGNpV3BZcEdsN1Z2V1ZoUmJqd3RmOVRzTGhvNTQzYWdTT0JRWjN1MFdXQXNoQ3YvclV6QWwvckl3VElteGhvVDRicktPQUtMVGhTdUd2a0ljMkdTY2NRMFZOd1pRSytXNFdHUlpGTC9UVE91UEVrRXFDdlYySkh4aGhtR3o4SmtyRUk4dEZSVlBqeHZjTW9Qc3I3aWZPWGZKc2tVYlB3bFpvMDA1RnBLOWxZWVdYTlUvTSt6b0V5bmNaT3VkN2ZubG1KMnp6cit0ejNwVWFqcUg5cS92SUpGYTVCb3I4N0poM1JybnBVRHFRaGZNRGtWZlA3TDlvNjExcG43YklvZXBYVDMwT1huZTVQNDRsT1p6Z2VCb3Y4Um1tYldPaTdQczN4MFpzZ05QU0VsVzU5Nk13MVFVMEtXTWhtSXo3SmNqc0NGTWpHWjYydGhBWTRJQWRlK1gvN093TEl4U2lsNERES084SVlUQlVOTm1NR0JFdXdhblFKQWJQb2RkSTlFTHA5NGtIVldYLzExem92MWZvT3pTa29yZFAyb0dLMTBaL29DOThJTjQvWi9rWk1aaWlpMXVGNXh3T21GMDdOR1ZxUkxNT1YvUTVJNFlaT0wwSGNuMXpmSWRFWDdSMTZqeERENGZwUEU4Q2t0UVVDNzB6UE45L3k0MzNmdXpHb1phQnFvSW9SWVpWa1JrTlJvNm9aUFhyL2hLTVRlMUptL2g3Q1lyVk5NWWY5bU0rcjl2T1BnVEc3ZjZvTU5FUVUxbzJ4YzR4R0dpWW1sVXZDRzJyU2dBYm1JMVF0U2I0OXpPdGZoU1N0NEJFbWFxbWo2ZStaY0ZsbjZjK1FFd01rYU5OdFlldnFVVURXYjA3aU5GeDhsTFpQS2lNYmhrMElqYm1YSTlQejlXZTJaN1ZUQzN0QlU2cVg2RU9IWmxZQnJsWlViNDZaUHAvRnZ5VzlXTmVkUGkwdlcxSEVPbi9VN0JSMWZ2NFhlcnZjWVg5akdONDk4TThKZ3MyTVIwYUtsY3ByanlCZm5lWmU1RWh1UmZnSC93ejZ1VnBMZFpwSUpRYVpNRkxnR1A3Y211aVgzUkFmTGFCRTJTdEFydWxZdkxjUDI3RWFRdWNWQ2NqckxZTzdhbGtiTVZVTEVGWW1qZUlDdFRRWnc1S2hCVkJQdlo4N1NVZjhoNjNmRHlZcHJ6K25OaERadk8wcmlLU2MvM2RLYlhOTmQzZG90MXdxdEFldjhyNmVDZnh5VDJHU0pmOGUySjNHL1BLYzFqRUhWRHpDT2E2b0h2UVBZZmdxelBseFkwTEMxODhPVEFvU0pDRmUzejN5amJreXp1SFZaQUtseTltODJWVWU3QXVuMlhydmUzYkFXY0dxNTBIZzBEeklpemZzSHNvYWYxZHpsYVJGNGdjbFA4b1BpeldNNkJQYXp4MTIvcjlIR2JpdFVoSnp0WldEVEpDcUZRWjhPWEVadUhXWlN0MU95aGNhdmg3bFZqb2tyblBqcVFURUczeTFSWW54QWlqeUF6dWdYN09hV1NDRXZNRTRSK0toVVdFTnNSc2FWK1N1ZVoyVHhqSGRVakJrYmdaVXNsNWFoV1JLdmtiVEFtMjhoMTVyUFBwTVEwZTdZVHFIN2JvcUNMVFRtb1dpWi9aYk9mUlF2azlDQ29ZM3BIM0NDRFFEakE5L0pwbWNML0h3MXI5cmpQQitNYmJkdlU2Y2s5T1k4TVZCM0FvNk1iSmRvNjhybkEzTWo2UHhzNXBUYkpYRjZPUmFMWDhrQ1FmU3FicEcycm9MUm9RNmF1eEdONHdjWnRlNmdEUFpyVHRXengvL1AxWVdpUG0yTWdVUlA4akQxaHc2S0hhR2pNc1JjTGVYOGV3ckFWZmxGS2F1azl5QXFuQ28vZU5Cem1Sc00xdUNqYkJlZVhmaUNyaHpLdjJ5SHRtR05aRlhzMGxCZU5pb1Q5Wkw3SzQ1a0tmOXlDNzQ0bnJ6U28wWk01czExVUt0S240aFhRZ0hUZlpNZmhLN1JiV1lqYVRVdk9LT3VwakxOdlhsWW1QTDFUNjNENjJJakh3bHUyOUdUWHVBUkxYak1jbU5TQjNoQXovOTRzMExicjdhcHNrYnBUdzlwTFl5TEFKOWNOcFJKY2Jwak9kUlJUaHMzd204VndadmZUNXkyRnJLVkNvZTdleWJZamVkc3krL3NJa2F2ZG55SVQwUTh4V0xnNTdvUUV5VDRvS2NnUEVLc3RXenJTMWpoNjdEUlplR2VmSjJiQTFkNHNmeUVmU2dOTHMxaWRTZ1Q3UWJSZDEveVY5WXVieWlhUDVNRVNaaW4xVlk3cTh5eFhQWjBtNGxXNTdMWWZxUnVRZmZId3YvTFBQVTRkd2JlTlIxbFNKYjRkVjh2YTI1ZHlqYmFJTmp2bHFWQys0bTVVaVpZT0VlWDVjMko1VjROd1VOS1RxUFJqU2tod2IwQWpaMjNHYmd6bk5yTVRDeE15K2Y4UnZ0TDU4TzNLdXZDNW0rUkNtU040UVVtZVN4bld0dkRLb0ViaVFxWHZsN1g0b09wb3UrNFFKRDFjekpKakI4SUNpQjRIUjRVaXM1b2d1NlozSmo1eDNMM2E0eGZNY1hwM1Jldm5hOWRXdGdKM2ozL3p4dlM0M1B6OUFYa3ZCYnJReno0RUloT1AzZXZtU2Iyb0o3RVYraXE0SStBbzIwQW1JdXdWbDlxSnl4a0tkYzg5dXZydjcvVTRKR0VmK0J2R25WOXlEelRjaFZMK3cyVE9GSzVlbkowRGZmZDMwUm1WV0tmY0pCR2NEelY0RnlSeGMyVFpubWZRS2FXRStpbkExR2ZEUFVyVEZWMllhUFN3b3V0UmF6dkdsMXg4ZHlVblNxT3hibTJYNXFEWk1LaGpVelhKb2RiTTNya2taR0ZQcVNURlY2RVhsUnlTdFZJbHR2R2xINytwY2ZDZ05JMTBvbXlyWFFNL3NhWnJpUWNKTEs3TXJEVnVlc0FFQjE4UXZnenArVlBxYkh0ZGZwY1JDZEE1cDUxa1hyVWFsN1dpSzAzTVphV1R3SitqYjc4RnZhWkR4VW5FVkJVNE96QVJxVzlwUi9SYjZ1eGlhL1NvZzRtSm82a0RleFdiVFV1TFcxV0NwcTQ2T2hyeTBiWTNORWVZTFlscDRrK0U0YWtUcmg5VjBlRG9zamJ6N2dUa3NYZnlFMHhrRCtiWjdIcTJvc0R1TzRocGdNZWwxTlQ5S1QyYlF2d05jVW55eDEwWkhyemdIOXNHSXZsSCtDTG02aXFUdUFEVStuRlNZa2docnNvVXZqNVgrUFhHQnZvOFUwYlFvNEpkTkhERk1RNWx4QmpWVTMzV01waXU1aDlGSnJzWTErU0pKRUlwejM0K0pxNCtMVnJGVUtEdjgxbkY4V1ByR1gxcjNjWU05eUVHbWx2NHBUN3NEcFFuVHFoc2dEOHlxWDJHRmRQTzZPWCtBS3paYk5BNTlwVlRVMzkrRlNLS0dNdENmaVRVYjJpdkovMFkwVzVBQ3poSFNFMjQxMGU0cVI1RXorZ0RxVEhZamJaZG1nc2c3ek9uclgzUlAxVDhhdEtUWnBCWXVoYkZSUXZUTGpzOHhZR2psRkg2WjdmNS9SeXlFbUk4akRkUXlCNzJNc2NaRTU5c0tuZWtVTVdqWnE4azd1ZlNSdlo2aHFVcGlBTk03ZlR4SmZWRHhvRG4vWVdtTWViZm03dTJUaEdWV0x0SjR6SjhHdk1nU0d4Tkt4NlRBQUdyaFBrSU40bC9SYkl6bzJZQ2ZMQ1J0TTBKU0Vob3JKSC83Z0V0eGxEeDdyRDNRSFZ1dzAvT2VCRVRrNnhKOUxWUUQzc3Vob3BQOTMzSURMZEJxckQ2TWJ2Vkk0bXJzb1gxZUtoOVpuR3F2anVJN0duTUR6Q2ViZFB2TVRIS3VocEVibVZUWmM1RDJoL3FVd09VM1A4eU81R2JkSk9zNWcxdUtadkRlUEcyZWNGTTZqZ0xDYUxJQU5zSG5yRis3QXdCakpXNEZ4NjhwZVorNVBVNUFqRloyaVE0NkVwd2dSTkpMams2bnp4d3VIVE1lR1FYYmxHU00xYXdITmJIcXpHQkpyaFRZejdIa3hQWExSSW1GMjlZMnM4c2pxWWlHbTRKWlh2UUR4QXpZdkJJODBMV0xIanlGQWw1SUNxOHRGQTUvM3VHRDJvMGhTUFA4azJHL0FsTnpFQXE0QXhHbGVzdC9KaUh2SWJNc09mR0w0NnZhUHBBa0gwb2w0TERCb1JKL0hNbUlhTU9kUmVPREFlaWZBeSt2QzBNWERtbnN5NGtvYXdEeStxYy9RdWtrY0t2VHd3MnMyUDBPVkxEU3N4REMrYk1TV1BsUnI2OWZNQmdSN3hRdzlocDZvMXZVRmRnQ0pSRXd4b09HbWFyc2dweUZiL3cwWGE4QTRQWCtoOEw0Zy9WbFJlZnVXSDc5Qm04UEFjWmhlZmRjSU1zNmRZeno2b1J3cXRqZWM2cW11WG9FMGMxcDVjNE91UnpXNVNwQTVVempnK0RhZG93bTBtbnpld041VWx5K1JHZjdHTFhYOTdRSlhsc2o1Qmp3cTNFc1pCR1huTU96OXFvYnU2SHZmRENHaEYzT2NyTHBtTFV2SXRyN0lTNXBhUkxrKzl3bko3MkVSamIvMVZvaFdPS1phdk5uR01YbkZTV1phK1VYc0JZWHBQWThZL2FsRE1aNkxDdVlPQWVnRXNFc1g1ZCtCb2FCbzBKUlEyTitCMXNxZHRob2RaZHc5bXZKKzRiOHZyY2dTYjRCNzgvS3pJZEl4LzBKZy9Qd3JSVlZvby91anhNb1RFcnp2eVVJVmo2b1d0UzlWS2JlZFpIbExsRnZXYXh2UzBoMmRreVZNM1BLRmQ5ellHeWpXbGxydGFtMTU2andkMmRnOEtDSk5OaHRQOWt6c3hITi9FY3NXbHZMYlpRUFlhWDIrSG8vWkFJS3N6aEJIbHh5dmFKRnpnWlkrNE1nVEZKa2JwODlrSG9FWjM5Y3N2OG1zZVJENmFFTVJQWTc5VTBjNk1OODgybWVubzdjYk8zMTM5TWExeWNNYnBpWWMrenhpazJOaXpEVU02QUpRNnVuRDliZ0lqMTIzMUM2YysxNzg3ZEJFc2NIanU1c2hhUVpIUEt3L1UwanV4dGFoZis2K2JJT2V1SmRCV2tZcG9kbFJTTm4wamEvUGNWLzBlK2pFZ01DNFZYRTVFM2VHRG91L0lHY3hYOEY2OEQyOVJBUEN5VEF2R05hNkV6SXNqaXZHa1JpU25SZldGOGZmT0c3QXhPL0tUaG9oWnE1ZW44bS9XUHpFT1ZOcEl5MFBhNDFYcXdidGtKeHhBdkk5OGpMMGQ3R0dLVWJ0UzB4THF3Zm1Ybzh4SFM5dUxncjNkaG9USk1zU2k5L1p4UmlEekhwaWRnK0tmeUJSMHNRbXFRb3FsQlp0bFZ4cHpOa0ZkUWhaSkl6bXlZQThQSmh5dW05ZzlRYTJ1TTBnRXJkNlBoeU9HUHYvUkFZTEpxS3FSRU05K2NKR1YvS2pNN01ncGJGV1pCQ0pUdWFsZm82Q2E5TVd2TG55Wkk5R1IzWkNJdTJLbDJoaUhhMDZRUFN0TnJrUTBSTVpXRjYvT3pSSlZIZ2pMa2g2RStxTzk2OUFyQ0p2OGhrNUlLdmhXY3BVcHF6M2pMRXBxblQ1UUNyZHVvUVNWNmpYSHpBc1FIN2gyOGZtL1FVcXVQckxoeVJwZUpMaXNUSlRlNDBwRG1KVUREWE5lSG1RRC93U3p4ditWNGNWQ3BFbyswWmpQMUo0SW8vekdwbVpiaXFXb1JkT210NnNCdGJmYWptZWVZeEd4NURwSzZxOGVQeDdqdWQ0dCtaYm4rWjF5b28yeXFBck5TRkNLakZkOVhIenB2Q25Zc2dYNUNrQk5RamluWndlNm9wbGdGWjJra0ZFc1pQOFBYdW9nZnRxYUtHYzc1R093MzM5UXZpT0NjZ2dnZXRmSEJmcnpzU2JiVk5qbTU5OHdPMHA4K2FkelhzOWMxNTh1OGszQ1ovcXhCanVReDN4ZC9MaVVQVFFlRFpyWm1BUXNjRUhoWE5BVHh6eDdFT2dQRHdGWlZ1dys2b0txdVBOb3AvTHNGMFh4NFBQTzlmdGRBSjhvOHNpeHMvZk1kRE95WVlub2FTUzVoeXd3SUIzZDZTS1ZtL0FzWDYyNnVwOTJ4WENlWUhUb0F3M1NDeHg3aFhjVXNyYjY4Z3dHMlliVmY5V3ZJZnFhTXpuQXBma0FZUkZ1YlJXRnNHV1R6RG1UUkZGNVkvWHZDVnVpWVZyRGNaTElRYS93eFlJS1J3eXB1dktxMWprcW9ZNTFTNlV6cnE4d2dMdTlFTnRzWG1iVXNIZ1AwYzJzMFVrWlg3cS9uSW1QT2RsUHVEczJwelVpdFRJZzdVcTZQY2Z3SHlYTCs5a0xKWTNoejhCeTlGSnBuV3VGbG14cDZoQ2d3amRrcnR5LzFDUmx6TWZYY1dJRFNzSWRYSTl3KzZkVGhrV2VmWDRITVJHTGs3NTJGWlJFckd4dkN0aE1wREZKYTQyYjE2YWVvc1A5TTUxNzkyZ2kxdFB4dTRjTXVucDljYWN1WGJqYnROeFpIS0MxOUREcU9CVm10QVVvSUFNcjJEeUZDN3Z4cVBaMVNMSUxPVU9TajU0ajJOcHhybitiUGJlTHo2RWFmZlRVQjJPcy82WStWN0JaTG5NcEtkK0M0VEFjVnVhNlJCaUZpQWJTV2RQTW55bnMwOWJTcEVCNDdUYTZkTytCTkVFMEhOell5eXowc1B2b0JyQ2w2cFhFajVjQ3V2dlJxcFpZT1BmZmpCT2o3cHF6dWd5cDUzTUJZYjZSb2xkdTdQaEt4SnQyRlkwYWVMM3hqTE1GVTR4QXVMSFJyMm1uUnl0SGJoTW1QQ2tsWFU3ajM2YlBLOHFKQTNXbSszVjIrdVdUVDlDUjVLL3VnWEYzMG1NNHVKTURLL1I3Y3dWNG5XbmtHUVFLMFJyN3hxaUEyTmF1bWlWcVFJMzAwZFdld01QbFpwdEdnRnpXRFVLa0RLcGh4Y21NdGFISVRDbXRNeDZjSlZDaFRVdW95ZDNGUml3TWRQYkhpTVJCRUg3TldkTmVuSkozQ2hpaXhLRFdIeG5xVjVUYXNnbmJNdVZVc2x6bHZseFdaeHhtS0ZyLzNQVE9Za1JEL2MyRnZDT1FoWElYVG0xT2VDbjZnT0NvR0h4NGxDVlFuc01SV1BDZ05DMytuSFZLTFRmSVhYTHEzMEF1ZE1LTUx2VTNoRU1EaHA4czNBaHdUWHlNUElyWG9sWTFac2g4ZnJVc1Jrd0J2bUZQTFdsMUxGaFVJblVsU2hxdllZK1drdUZMVjc2VVd1cW8rK0pkbzF3VlUrZ0s2QU03QmtNVzMzcitqT1NaUGE0eGo0MDdZK2dnZ2xTNmEyd2REWERKQzhmNU9DN29DakJsa3lPZlFqUEVqR2JPRXVubnIxQ2ZBT3l5bDJHSkR5RlU3cFpFbHdWVTAzKzc1eEpYVlZTYkhPVldIQmtSd0cwZWZGZXZYUTRtcnA3RC9UVlgzbGRnaFB6R2lLZ29LbjhiS04rWm1WdFFtYm1TaTlMb3gzRTRxNm5YUlE5bkhLR2J5WklQdXZBdFJmSjU4eHB0SUxrZmJvYXZnSDI2YVhURnZySmRMYkVTZ1czdHBlYzA5OWI0NjdlYjRLUk1mOG9OS3JUT2Vid05WbHExKzBycG1RVWI4ckRKbnVhTU1QSldDTy8xTWN5bUpFOUJYUEdQNHRiMHhoeEE1MTFycHdwNDFnMHVibGx0c1FucHBlU1YxbVdBekFiSm9Fd1dCamU2TnRlOFcrTVlldWczdVM4eGNnVlQrUVpSY1NzblRkZXpXZFptN1FYUXVLdjc5RVBacHdpRUNscGM3WG9xT0JTY0pielVTVnE3Y2NRek94aUFqR2RFd1gxNzhybkJuY0tlendRMldnSjR3VGU3cVUvVDFGQ21ZWEtFa2tyK2pldUQvZ255THpWeXh3V1cydDB6K2hTZ1N6MExRYTdBVjRyd2l0Njl4NStXTjdteVNCY0xqYmJSKzZTK0JIZTZWK3ZjYkRVWVpiQUlGWXZ5S1VFUDJPTVR4T2VTajRKZ0UyMy9RQ1N2eDhVMXlKQmZEbnBUZytJOVBHY2lZY2cxNDc4WTh5Y2pUU1N0WGZlTFdzaFNpQU9zUUYyU0dQTG9ERXIzRXMyQjkyWGVIWFRBckdtOCtkS29VdjFZNENLSFBDOFUrWFpSMGkxVnRFTlRQckwwd0VOM3JLMnNUN1ZYSG9TaHpKNGtjSkdOWFk4ejc5YUtzZTNJY3pybjFmSkNFRFBMdEdjUEFURzB2UmR6VG4wTEVpdmlHQXg5NmE4Wk1pdDQ0QlUwS1BMRlM2OUxjQlllNEdOQWdvcGpFTU95Tk1uMXovOU4yalVyRUNQSmx1ZVo3UTBRWGJBV1FMcXZHZG9CVnllVGk5QVlEdURqMXJaT3RNN1BoZ0puTnROWjJnZWZRV01KOFpBczNCckkrVUZWT2t2RjNoaXVhQk5PVGdla2N5eUN1VStMRDV4djBGNjBCM1RMVXYxUzJRem1KUmsxYng0MXc4YXZjVFo0cWorY3VEb2QvWm1xY29wa0pvQ3ExK1QxY0t4T3g0c0RCOWR1SnJMWWhZSDh0UC9kbjcrUXpHUVd0dUtRVThKOWpPWTlCOXpXcUJCWlRzU0V0SmlDTURDVDBFTFlaUzRob2themZjaHBseUIzN05PWHBVdHcxaGs0WmVpMVdDSlZRcERmNVp0ajB0WTZVVXhMQmo2Q0lXZVlQcVVqbndZOE5YY05ldHhKMGpmUzgybFc1QmZyYnVHWUtaTnBoY0F3Y2lnNkRTYk1KWUJlVVo2WWpRMHVUWXc0a3lCWDN2L1cyc1VLMzV0SnM0ZnlxaVdnTWhkbFVrNUw0aVovWE90STB4ZXkydHpid1pvSlIrTHArK21nQmRHaml2clNKeUhkN01uMGZGaFFuaURMdEdWUUM0NkorbFBLYXMvcVlVZGNKZGNQWElCR1VKbE1QSnozT2EzRmRzM0pEUmVzRVdXdXFuc0VWSTNZZmRKcEY0Qy8yQU1tQ3laZDlPdDlmdlpIMzY0K0pkWDlCUXo2VU1LZjgyWXZodGljRTJEU1ZEY25nbUwwV3RjamhCa1BkMzg2VnNHQ1h5UTNBTjIrK1J1VWpOdG5qUzNBeDcrc0Jnazc3VmJPdnNZbGVlR3lLZkdtOG9USWlvSytPN2t2eWFOVTExOFRPalpJa0dadlF6RTJUS1kyQWZKT2s3Y2tFeHlBZGNlVU1mQnZqbFZRVmVzK3QzWjFMSXE3Tld5Qzk5V000eTBqRzUwZ3JRZEFuUDNOL25oZGpyMGtkUzJ1cjN2YTFQaW9wZ2h4clJiVTN4Y2ZTQllLRDIyTWxTS1JuTFhpN202MHp3UEdqcSs1dEhSdFRyVTFMYmpQVUxaYnpPNHVzeU5UNVBBQUMwTXU4NWVTM08weVpnVGJLZmF3UHNyb1JqeHMvbDNmUGY5d2l3dXllbUg4TlRxMUVJZGtrY0paNkRrMnBuVmVwVEE1Z2U3ZDZ4cEdQakIxUldLcUx5ZzB1SDVyd1dYZzY0UjkyTmtQY3JNTkt5QXoxd1IrMW5sQ3JwV05SRkFxcmhpeHVNNk1DUk9FTW9zNmM2VkdsbWRZQlBJWDF2cEUyaXViZkdVVzd1TUp6dVVNdjdxOUdZdGtta2EzZThIUlVsY2J5Q3FDQnpyR0ZPZzlSaFRpT25KbWFZNmdDVlV6dm5najhZUzhkaEJxdDlReCtBOGkwYXFNT2kyZHRpYy90Sng3SUx2VFJ0dXZTNGZzaituMzR3ZjZOL1p1citKZ2dHL2h6Tkk0Sko3eTNJRVhGRlJXT0xmTnlVZ2kzeHZuNkd3MTZoRjNiVlMxK09uM2dGZkpTTUJLRjlpc1pLU2RCaTNsS3hRQUdkYUhEMXdaemo5ZEZWb2Z3ZTIrbVlVRVQ2UDQ5dENXS3JOWGVhMDZFSnh5Z3ZTaTh2Tm5kQ044My8xL2dFMEFPMHlocHRSOVZ0Ti9OVUJTQTUwemk0WWF5TXpTNkcyN1h6Q2VzRUNTRTVXbi9BUEZXQ3ZXVm5rQUx2UWlMeVJNblRGbDk0UEFWMThxMlJwaHNvU2ZVa21tbWZNaHVzQytEVG1KMnlac1M2czZGL3FjN2k2VXlOQW9GVXN4NmQ2THJjS1llVVF1REJTek5pN1FMbXRtWTZuaDFkWFNsNjRRZjloN2lsVFdQMWZ2OGFjM1BwSHpCbmVoSnd6OXprSmN0eUh4dXZCWkRyR2hOOE5jWUU4eUpJWHZOUjJ0bVVraGdQanQwNVdKRnBLcUlqcHNTeDMyQzkxaiswMy9zZGUwNDRNeWM4V2tCRTdPLzlBdmxHSVRDZEZQaVNaOVhaZ2FuM0pnSVlOWk1pNDZObngwd3I1SGxDWEhrczBCaGFsTytaM3FFWXp6MGREWjlPR0ErWXU5alBFNE1Ib0paQm5JVXFtNUEvYWEvMjIrSEpjVEF4eldiaWVBbWluRlp6djlqM2puVjBaa2VpWW54aEJsTThuZ1FucWlVM3ZZSTVtV1haaFJ5ZElLTVNuRmVlTUIwTXRwSUpzUUE0V3J3VnB2RFZ3b2VXOU5DWndWSUtvUTVzUWYwOS8zQ0dKQk5LMUsxRnRab3E0WmczeGpFdFRHcloxZk9vZk1MMktvay8ySjBYQ3dkKzVEMFNFWmVSUjd3Q1A0ZVpUcEhsT2VtVit3RkZDSU9lay9UZVMxK0lPQkdUVm1TQWh4aC9FNDQwVmZCeE44eHZBVEgreWhEZ1B4QkFXK1MvemhVM0VGdEl1SEZ3akRCem9Cc1I4Y0FmOVF4TVFiU1FNMDdRMVh4UVMreDBVVXUvY01NN2N0eXpGaXNTc2YrK256MHpvUHRDcDNiaVZSTThXUU1Celh3RXFNd01saVpsTHd5WTh0UE9DeUlzOTN5cW0yODh2d0FLZnUrL01oa3JCT2hXV0FuWVV3YTJzamlIZ3MvRDNBMU8vVzU2UXQvQzBDcTFCR2E4VGRKY3BRSWZxTFZjNERhVTZ6WC9EVURMZ3EyL0lKRDNkV1pjcjFiOFM2OTE4aFdoUG8xdzNwVHpCV2p4b2ZNS0xsNU4vOE1lb05uNXZzRGlCKytMZW11OXJCRExJS2pwenMrTDUwVTJ1Z21ubHpLT2RoQ0xDanUxYytIR2Vmd00rYnJ6b1NsMGNCVHZjeFg4ODhLS3NZT0VNWHJXMHQyb2pXaTRvVUY0YUg4UUFNcnZGN3NqMEh5K09tNWVvd1J1NU1jSHp3OWt2L2czYVU1K3BXTW40NmZoUk9XSk53SDVDbnljc1A5ZEVzZmN4QTArSEs3ZlViQzl5Y294RkErck1WYVlIajNIWWNXa1dFdHlXaFB3VnlMREk1YWpvNWNOZ3E4bTdXQWp4S1dVaXRKV3pra1JSWlcxSk41VUFmQVdWUmtCUk9ReStHd3Z1UXR1eVc1b3FlRTRSS2lIeC91WU8ybUhJYVFvR2Foelk5RlplTHVpUlRYMEtha3EyQUdldVpvWERNcXc2MU1tUDBjQ0VSMUJJdzlFd25FVDBrZDA5Um1rMERqcjlnU3ZzUmxLU0F0bmdVZjkwdWlkSFlEZmxIMnBiTDdNamYyeHBuSjhNMERmM0w5UWhZSmZQY0JKbnFWbmQvcWc2eWI0YTd6RTZISzMvWHJUSzFlcndNUklaV1kyc0JtWkVtUWNwR0ZhUTlXLzJ4RHFBZVI4QS8xTEJTbmMyYldjOHVwT3oxNEhKcFQ0eGVWcmNaM0dWN3JyMHU1ZGpjOC8rbUczRyt1QysrZkFpakNuSDVrRnhRQjRTTmFCemk2WVA1enpoS1hyeVpTdmZuMHpqUnRpclNlY3dOcW95U1drbnQzc2dxVktEVm8rWCtSMzFrWGRuR253cVNvUXliNS9JYllBTW55Mm1DYWVhT2NGZXA4dmNLSEw1NVVKQmxaMXUzVlVLY3BJSmo1a0Q2UjFMSVhuZFFXYnphaGtNTDl3dTI2SWYrYjhWSm9FcmxTZlJBN2JOWHdicFNKcUJFcTV2bTVRcy90dWg5eFk4SGF0Zy9xUzkzam1TdlR4WC9PMjNsMXVydUlabFBPYlF1T1dyVTRxYVFOK1ltREFIUllOL1l2aTVDUXpHSzZGQVpQUS9BK1A4Zmc5bVoxZm80Uyt2cWIrN3dLSTI0NjJnRzcwdVRuTXk3UEN3cXJScGU4ckpwZlFIT1RGRHlGSGgwZHF1RVBZMHRaSGNLVXpkdmRlMUhXdWZydFg1eU1VdHl5Zk8zck9FS28yZjBYL3YwM1BZMkViSkJpUXdiRjA5REFycGY0WFR4b2s3NklDNEY4TnRxK0hmWXkxY2FXMkNoWExkN3RFbk1HUXU4VzZ2Zm5XcE9pYVF0YmlKQStOUXBaSDEzMlhjZWhBa0tqNjFDRXoxWTd3YldUOFhvNkc1S3Ava0w4dDYxRndYNkF6YWpRU0NrWDBkT2p6R3M3MWI5L2djcDl4c2RsanFVU1kvbEhkWXNYYlRiUW1ieExYcUtNRGpCeWVNV3RCakxDcHZRdlprYjJrOVJXakdxbkQxaGZVbjY3aTBHazdLV3hzVVhTL0IyczNzZThIOEZtY3V4d2E3ZElpTTErZ2JhZWNLMlAybkZxQWdMUGtQdHJ5YWZ3TUI3aEtDMkZUZUE4NWNtall6a091V0UxNlcxSGFDUnRRRFpUenl5MXJaMHZiMTJodXA3TkdyYVMrbGhmeUcxSXFzV1l5UUQ0cm5NN3ZxU2xRRTNCeklKL3hSWmNWQXNHVldlaDI3NkVJYUsxQjJ3ZFdFbFNjaHd1QTdZTDJnTkR0VzBLZWljNDhwZGpGVWcvalI2UDJuRlBpcTBhM2txMWZCVCtzbFY1ajFFVTgvY2c5cGtUZ0JNN2hZejRpNmpRYjZmRCs1ZTlaNGoyZDVQWmNzRHc0VjVWYmxXcm1Md2xMOC9sUTVvc0x0aDROUnNSUFh2MWxEbzN3R2pLbjFVWHpWK09LMjJybnZOc09OK1loYzdwajVXTXJPNnBwT0N2N0Z6OHFjaDQrSGtVbjVOdXZsTjF6bXoxRlJGSDlseDVUVVZmUVRuUlJDN21WMUZtaFoxWWVwbnJxNVo0Nm50c1JhRGhnQ3pRbGRNMVExb00xSld2TUk3WFhrRmh1Z01vT1RmWTl0VzdrVUFzMmViQ0lhWWdxdnJLNmhVTmxNNnRqN3Ura2RPSUtsd2x6RllrN0dvOVJYZlZrbHdvWExzbFUySnhlU2p5dFhUNlh0Vm1TaXlQOXZCcHRDODBvQnBlak1nV2NXSkVFSjA0eHY4aVFMZzRVUHhzdGNQY2ZqOXBGLzVWWGR5a2ZxY0J5azJrUXhRZnNDaFo3QURqZWdQRjhTM0c4OXNaKzJlVjU2QVBOZ0s2YWxnQTRoR09HbENGRDFiWjBsRGh1SFhaOWlMRWUxWDBCSDJMVkZFQUlGUmlQbHJBUDcySitRZ2FXTkorYUZQK2E1TnpFRGhucWxLQzJKejh6cXZ1eUhQdDJmUit1MnA4ZEl6aTNUb2JrVWJLUmRiQXhtWXNVbDUxUEp4NEN1d3paQkhiWXpBTG56bFlGb1lCRTZrQlJROTRHZnpzTXdCV2JyeGVBWVp0MFRWd0hHRDgrMVhjODlKUnVUSGFvSzlMU204SWd6MWtSa3hWOU5kT2hzRzhRdlFtTUdjNEpZMDN4dE5LZmxDS0VzMm9pR0pUOVZrMzBWaGF4Yk1mVVNIRGJGSjZKQURybHVrNkV6cUpnY1ZjYXRFdUlIeEVsaTd5elVZUzRJSVFzTktCTXNiUXZPNmVCbXpiT3haQjJQMkxhNHZRREN6L3ZZbUlYTVI4NGFSSStvUWZhNmgvOVFLeHdqMWtTa3YrMjBXNXJtZzE1aHFiQXhoMGpzbTJEWEtiTTVTb2pnTmlmdTJ5dkxjVlNoOXk2TVp2aTFvbXRBT1NDa3hBdjVLYXNkQWduczNKZFJ5QlZDUmN3dEtqV0VxczVpVVR3bExmcERuK0E1eHN2aXIzdFVaQjRrdmZJTFFWcE5mSDFFOGpETXAyNk5sVDNrTHRIZ1lLemtrZEMzK2tBVVRacWdocnR3dDc3elZTQnE1blovUWpLWGgxOFNLeHV4aHdHeFJlVEFjRGZiVXE4bFRZNFpKdEF0QzNXSTJkcWRHdmJyODdDYjFlcVhCaUlTb3QzOStvKzVaQlFWcWczY0huNTl3OStRQUladUZ4ZVZZUFhIOTl3Z1pnV3pxd29kck9rYnB4YlNKQ3F6U2Y2dzVPVHkwV1FRaVVUZlJ1T200RTJhNTZZM0lNdHI0S1QyYVJNNGx6ZGE1Sytldi9uTUJKYlJleDVOcTFLMUpEUm1GQzRNRjFWNkFFUVdvMkp4UTR2L2FWaytCT3VFSXo2WFh5Z0lEaXl0MHJvcGN6c3NNSmNoTkp3T0NHME1tbXdEYVltZ1RkMHA2M2k1SHZTNzBzSkl0cVY0Wkh6TUY3bEdDclN3d2ViU3gvMmlaVUlnd0RuSStxa3QrYkF0US9HK2pKZGN5M2dYa0M0eGtCRVhDa2lTU3l6aHlPb1JOSm9DbFBRRFVhakF3L2hVM2tVQzdKdHJhK2QxSThkWDFTdWdDbHhEam45NkIwcEZPQVEyV1ByaG0vaUYzU0x1T1lZZ0hBM3lHVHk0MkRVMWFpZUsrWVpaTXVjNEF1dXR2cVZqZ3E5a1hzaXRIKzF2NVluZWpwK2xRUDhKOExyREd0aE9SMnhNOURDajd5WXc0R2JucmNROWs1OEYyMWF1cmdYMVVkUURzaVFNV0l3TFRMTGtEeitTbG1mRXpYOUJBeUJ3SE9LWnZQQm53bXNaOVRUMU5rQkFUVFJSR0lXMVlmRlNMNU9Xd2hSa0VrY0ZOa0pEeXgwb3JJRmloSVNVMGtYOGJNRG9UYzJDNCtsUC9KdHpZUFhkSDk2Z2NnbFdIWGpNVE5Eai8zUERkczV4Q1FIaGRiT1ZFNmZJbjZxUE9BQ2ZxVnhFLzMvSVNBMDAwUVRsbWpOeGI2TEFOM2laOWhBblZpbTFENDNqcVoxN2pCQlpsdFFhVVRkalJBdSt2cmxrY2pBMit3OVBjNWdiaGRXM2ZGRHkzSEhxaWpEc3JPaUNCdGVzd1FjRXV6RmNOeTB5N085VG5RNGl1Umo0M3RLK0ZTV0NEanZVenVJdU1JZCt0WW5zd2Z1OFd1dUMxY0lRRmlkanBZelRUWFRGVGxNMHFGVGNWTTFyQ2w3Q0h0TEVwdlpQRlcrcVhlVUJZdDhiOTNPWWI2YzZoSEdLSFZVNXd3WkVTQ2dFMkc1RHNETkFBc0FQb2VmcVNrTXd1amRFemRuWHJyVDBSU3A1S3VQRm1TKy80dDhDWlV3RDFSL2VsRjdVQ1I2Wlo3MmxuUW83WDh3Y0tjaVhid2RzS0Y0Wng3QUVocFVRMHRIWUJsdTRHbmJGQktFWmp2NzJDanpZNkNrV3VlNUZtQ1hWbE1aeGl3Njk1U05pZE5XaVNlSjJKWFdNckJMd0JjV2c3T3dLTnhYaGh4RVhhTzhIRHBPQ1N2ckI2T0ovRDFmbktKUEFjNGMrTmg0MUJrWVE4YnZhUFJZbkNoUnhUNTFMT1dTelh3UlZkbGEzMWdrdGp3WXNiR2FKam1IRU5LblZ2MEdSSjdBblc1REJwNUJqelZUYzcwWDRtWlA2dW9pUFpqYno0bEcvb3FGbHlXdDlnWTJ6WHg2d1pTbmxkWHEyVUQ0ZEZPdWkyV1dZRXdxZlhkM1NKN1A2eGVGVjlYZytPQmREQUNnRWs1Qk9vYndFUUNOMlFIUmNOOGd1dUh4UkJtOFQrYWc0YnRZeUJ2bzRWMkdnYUxaRWdHdjlOU3JUVWR4OEEzWHJBelgrOXUxdE5nL0RjQ0hFU0tkSmpmQ25aSDZyQldGMGpQVkZyZ0VtQW5UYytQQnVTYUtnUDc5dCtZdzFXVldDVE14UXcxZWIxZWRHU0xwNTFncDdWZnVVRVc1emdqbHB5dzFkdlEwOXpySkZtRGtXekZBQjByVEpnTmNEc2pPL2g3Sm9VTVhrRTBZajNMNzhpMmFGZi9US25FUW9ibVVzVEdmRURnaEtSeExpTjZub3h4eHBDckMvV1M4ejFmRXQxTW84SXZCODVsa21OSE5CKy9XTXMvd1JVUnZFTnRDaFdYZmp3VmJGU01qWjRvUE9mNVdmYmR5S25LNWRmNHZSZWhGOHowN3lRK01TNnJVV0NLdmwvZFhHbmY4UFQ5WWtGWm1ybWQyS3NBanprdUQ0QWN4UlZkLzZ3M1Q2akMzWDFLWTNhQXlkSnhlbFFjb1lqcXEvS0VGV1ppZHN5VERWeWt1WTFMdndRajhHdllFVDh2Yks2UUpBWHRoaFc4N3pEMWFQOTB5QmVLdFlXemI4R1M3V0xYWDczb2VZNEUwTG1sSDJrWkswWG10ak5FbWV4dHlmUUg3SmxaaEd5eTNWazhQZkRaT3BDdEZkejBSRWJ3NkUwWC9vVXl1ZktvblJOQnRkM1VQQXB0REFHaExON1NSMG9LUWFvWlkzVGRPS2dIN2tybHphbnJ1Q05udnNWaEovWDFtbTl2eUpPYmhYajJSb0JKNmxhVld1NjBZNlA3QmV2RmZOYS9TdXNQeTVtRUduZVEvV0RJZ0tiV0JMM0dIVkJIMWI0RG1aNUlSV0Jnd0duQjYvS0xla1FNK2l1Y3d2bGttbjFNNDJ2MkxOcFk2UGppeUc5VnBUaDhQU3BoZ3Vsc2I1K2hRakxycElnS2JSV2d3L2xRR1pWZnd3bWpMREFrYjBmdk5hTnFEVktxTmdSeUlJOXVwckFuVjIxTHN2TjNUMVhyWTZGQVQxYlFHbmQwa3RWNkVkT2lpbGZUS1ZJc1B3aEw5Tkg3TlE0RFlLTnVaVWg0R2FkTEY4RUVyUHZQNldyb0dZQjhBU0RjL04xWjdBSGdZRVdNdTI2akNab3VBck9qQ3U0K2hNeWRRR1pvUUtoRjFQaGVQcU8wSU16Y3VRV1dPWHJCRDF4TjVQajdRS243a2hsWm1PeW91V3h6ck92TjJUbkdGZ3cxYmkzQS9uY3JNRG9sODNmNVVVK0lPdHliekc1M3hTK3FQNFlYYmpUcC9xc0ZsVSsxNXZPSHJ3dHc0Z3JaZnNoNXcwR1owbjlqaGMxVzk2VzRJNDR3ckdZbHdPbkVuK2Y4c2hPMHh3SDZBNSt3d0xnU2I0aWNWS0h0QUhnWEZFdzBoV2tmOEw4b0dDaFVwNXVaVVYxYjlvb3F2ZGQ1SkdTWjZNanRhYW1QdUpxVjVkemw0cnZ2RmdpbjhlZnllN3JaaFJpSTR0R3d3cHcxd0tRM0R2TnR2RDRiZHF6VHRycjRsTkZDL05PZTVaSFJrNy9XL3dpZzJscjRnbUxMdnJkd1RuYnpoWG1rK3Y4ekFubWh1R3VhTHBzeEFJN25YeEZUZjFOSDRkK3dtZWdEWElscTZaVys5aVM4TjlSS0FlQWdhckVYSjRuVUN2OWpHUVdPTWpOZWFOaUZ4Uk5LRE5PZ1BkRkxkcC9HZGVxOUhRSGpEaVd1b2t0dFAvSUxleHh2OVIrbU1raXZ0UXNJcVN0MzBPa3dqSDNiZHB0UXQ1bjJ6M01wZkxsc1FMYTFWQ0toUFpqbndERzBWWWJMQXBzaUNSTGRjTFRhS0VzcUlPbzZ0R3hVY0NyNmE2SlUvR29vckRtOWJ5VFZnVGU3OUtzdnFpUmQyQzU3d21OTmVVK0puOHdEeGhFeDcyUE1JaE82MjB1VUFLL2VDQTFJL2NNUnBvbTdyaStPWmxsb3Buc2FlUEp3NWJHbXNIV1NsNkpqVXc4Mm9QMDFFcUtTY1RyOHFXby9uV0V6TmtzcGhwQjZ1N05PNkFnRTAxVGtwRnlIRWZYZmNEVDdITWcrSmZ3SHo4dGNOWk9keEJ3aUpWT3g4V1RPbmdWTlBHWUp3U1Zrd0ZxVHZJYWtnbExQaXY5d3g2TlRqRkVkcFEzYjNqUVE4NFRJeU45a2JqUmJ4WEFJMkx1UnY1T3F2RHNmZW1UVU1TbFdDUkZxeUlDNHdJWDRRUTNwVnNZUEtjYjgwalhGNDcyRktYYTNlMmxTeWt0VkN3NFQyVFNYbExwdkplczkwUmkrUTBCMlZPNEQraTd0aWFad0JXR1dsTC9ERlF2UGNZVk02emVrQ2hJVjJjbG5KYWc2SlZZaEJ4WmZvbWFhUHR1bk1zckRaWjIybEhiMU9veFNIVlRhUTNweGdhS1JKUXRlck9DNGU5a3IrbzY5Q2tBWmE4SkFzRXRWUVNIN3JuenFMUkorb29OTjRzWlNuOVJPeEVTSHBpTzJWVEtMK2NVYnk4TnFFN0FwT2tPdHlxejVXMmMwanBvTGRlOTBWQzlmY3NXczBkbXovT2ViSU1rMXpUMmxyYlRhaU9tSzY4T2tiY21DSkJIQ3BvckhsN0x5cGJLZ09CSU5Va1Y5NFVNYm5sUEdENVFzeElvR2tBNVdFRlk0SDRiZ2NpaDFOd3F2cmRsZjBDdVNySzRTT0JhZ3N1UGhscXpEZ3lpc2Zodm1BOS9lak5ZN2cxbGlEYW9nY3ZNT0tST0RLVUp0cE9ZUHR0aXVzZjB3TGRIK2RCTHhZSkxzbGpUWmRjdmJTVGtVcTJNL2xLeTR2VnI4ckFMQ1dFWTJ0eDVTUnd0VkNpeEcwcFJTYzI5S0V0RlF0NmoxdktBWTIwQWF0M0w1RlprMW5sekhYNmFzT3dqRnl0WnkxNWhFQWpFVFBFYVpoSGNINU55YWw4QWlCZFBqODlTRWVCRWx3N28zTmJuZFFaRWhWdFJPOHVVeWV3cWtaK3lvUkFkVk1WYmdXM2NMM0JkdEdoQlpXS2xVem1Ud0ZLaDVtQWhZakZiZTRxVE1mNE1yNG5QalhBaGlOczNsQ1pCZU5ybnVocnkwdEV3OHJzOTZhTkY2Q2R1QlN2U1FzcDdYb2RQbU43Rko2RlVmdi9LdSt4dU1JWUJScVd1Z3BsRllhQmx2d29XaHBDZ2trWC9RWWxIbkxESDhpd0RIdFZxcEpSZzE4M0xxcWFhV00yeERCb05paWxFck5XcUVoNlBjQUR5REZrM1hjYzhZMU5YaFNXNGY4VHpyOUpmY0ZkRE1GcUNWOFgyT3V0TEpwMFlHbzV2d25ESlJ4Znp3dHQrT09SWXBaS28ydEc1OU9XTEtadzk1VkVHeHZhRU1uUm9pYlUrQU5MeityQ0RnNEMybjhOTHBHU2lYZm9GMHZ5aEU3RmRjbjVWQmorSEp3VjJZNTRQSjRiLzBVeUc2UldvaTdkR3FmU2FhQlBFbUR0a2RYcE5YZTV3UVhFdXV0NGRrSFh2cHI1bS9JK1FGU0tPaTRtS05oNkNGcG5TMWFMbEVteTh6dXpaUXVObk04aW9Fb0JWY3dPQnVONHZ0MU4yY0NYTmxCdUxKY29xTEVRZ0pDNEFLOHdPTTY4eWx2MWIzbllFMEp5UjB0RC9yMjNoVVpWSE0wTWdQSEo3N0hZRWpES1VLYTh4SFRiV05KUU9Xby9OeWg3QTE2WXhMQ1ZudVdKS2NDZ2ZjeTl3alpEbXlEWThDNjZYazQ0cW05QU1PWjQrQmViSVJDNjhKYytFa1hyN3V4YmRjczB0YmliVmlWODdTU3h6QnpwR1hRU1AxbXdUZWMrUkZCalMvZTkvcm5sSU5xelZTd0R4RVdDQWhWemcza2sxR0ZITkFiQXAxbXlsaGxvK1V2SlpDOWVHTVBnQmFaVXBDT1F6RFg1Vk5oK0NObnUzRTByTE9IOXZsYU1VZFZqTUdTREZvZ2tKZmZtcjIxZ1BFcHl2SGpVdVplWHZ1Skl5MXdmZmNLUGpBVFgvcDVNU3pWSFBHOWFXeERyY2x2YXZNc2UrSzllM0FhYTljc3FlcFYyRTJMUFIyU1JtcjN0aVJFQys5alliSnVqZm9wRlBzTTdaWkdxSmIvN3U3T1hJQ2NRYVRMc3pDTW82ejdFWHlxcDVnK2g1L1FuOG9BNXNtRVM0d1B3OFhMZS9VWitQeU1zSHAwL2FqaVRvZnpKejkrcWRDRENpci9MRnd2UEZlcWtnT1RqamN1OXo0bzZyV3QxN3I0OU5VNGRnM0owS1dvb0dvQzRQQjYrTVowaHJMOEphaDlTODJxZGxkMVZmMWVoSEpnYWNGT2xaZzN0M1hpSHZPcE5Sblk1dXhvQzU0UGt3SmlKdUR5SUpnSjRUallFSEZtaHZYYVNYL1puY25SVGNxMXFqZ0VJY3M4V1BrenE4allheUR3cHJCQjFaVlY5eVRrTTBZaDRFeUxRZ0tFOUFZY2pVSU5lYVhMcmVRdk9XZ0ZkNUJjWWI1dGRMTklJM2JHYnFKc1ExRTVQdU9kUG10N2plMnhmaW9aNDQ0bExramVsaGZrNnUrWFFXVXYvVUJLV0VJemhtY2l3TU43SkJDdkd2L2ozdnpqOS8xZUg1QlRSQjNib0N6OXgxZXdPTFV2RE52cmJUa0ZmK1IwMDJpeXRPRjJ4NnVCcy9IM1JzeVVhd29PMFJ2TjF3US9LVEJrVThaT3ZxL01qbEI2d1Z1RHErS3VnWlZDQkx5Lzh3RGtidXgxZHkrSUVUOVZaV1BmWlBiNThuVGNQOCtJOHA4MHhRWW53TWpEWit3SGRzREsraVdhUnhKd2VVL0p0NlRINmZtSGZ2OXNrKzZpbE5ONkVuY3hPeEFyeTU1bFlFK1lwRmpHblRxd1hvSCtYMk5uZzFlS2xOeDFtcjlIajd0bWZNcnJLMzE4SGQ3K0JPdFRENVZQbG5MRDRtNWw4QW1LNkYycHJuVUNVYmgzbG84MTAyVmdQN2VTcDlkNmYzdkhqakQvQWliaTlCVFlQWVcrMDlieVd1OVJBY3I2bk4wVzlRZkhpdk4vWmV1cUZ6ZXVuczR5ekVtQ2JZNHR4WDNWZTRQQVJibWtyMW10WEhpUXhURUxRdVB0ekk3SWl3enkyTVVRakI0S1FXODQrM3l4cDJ3Y0w0bEo0ZjRZYkFiWWpzcHJXTDlYWWpsZjgxOEFCYlh0dCtiUWlxU1dMZjNaM3RlSHZNZzN3YkZXbVRzRzZkUHExZ0p5Rlc1OVNOdjgvWk1pUmVaYW5JUWVGUys1MVUxekk4K0N4WE5uOGp1M1ZxRFJyY0dXN3g5NXM5K2FScElvWTBucTZmaXVnd2dwZEJ2aCt5cFZndWhYVGc5VEdNQTRVcWpCR0tFTFpMbXZYS0ZIWTZVUnhuWGduUWFycnhibTV5amtOMTh2R3lWRUxIdGpnMEVyV0ZmSndOVXFacXlxOXRIUHhKbWkwYlJEV2FMWElqUE1zU0hwbW1EUGRiY3VyTFhzNU1hV1VyVjhNdHdLWTZZb01jQnNaQTUzeFExb0cxSWU5TWx2Sm5RdS9aYjF3Rit0dWJOUDJ5Q2dhYUtHUGFoL0J3cGlEN1JOK3pHaVRZYk5UeFZTcnJCWXpubllTUEtvM3IvUkRrZzVIUkwxZUsrUzh3WmRGbzlHT1pNdTB0YnpSOHNiRTBQcVVvZFFKbi9wc0V4bnM5V29UTU5RaEpmNHMrc1k0UjNWUWUxa2ZHS2xlTXQwTU40aVFqcG9weVVoTUJzcEdUMlJFSm8zOVArRlltR0p5N21vWEZ1SjBYbllxcjZuT3pnVlE1ZURMZzY4QW5FVWFDa1o0Smh2YjdiZTB3L3N4b0VOYkVhZ1EzNGloeW82anQvcEdoTFAxNFJpdno0YXh5NDI1UjJwa09xcmlxMFZSSjgxSGtMWWN6c2dOR3VuUUZxVDVtaTdsTGdQRlQvNjZ4SHFhdDM4MG8rZUp3SnF4eDJMcWVVcmtUM05IYVIvL2Fhek9qVExpQUVTZjZuZ2J6Tm56UDJ4YjZWWVZaMjNjMXFzSC9FZ0c4TmNlYmJCWGFZR2ZrdFlQOXY3dDdlUkFIb0FBaFVrYTR6VVpEN2F6R3k4UWVYYUcrRXl6NUlFNC9XUnhXNko2Y3lDQmUyaUZWOCtzNllKcjRHL0R6RnJKT1V2WHNkVW4xUEpYU2dqQTJrNUN6N0twdXN5bHdvcDNVMnFLN0RTN3JNWEpjT3o5b2xjYXFLclh6ZHllS2NPeGJTSGVCbVN0a0c3ZnlmbWMyU1kwek05WS9xd3NoWkJtc2UxYjJJb21yWGhoaC9kdGhpTm9hNDdnc2QzOUxDWm10WUM1OG0yUVF0NG1TYkdCQnNXaDhJY09rS0ZVeWtqQXpJZlcxcnlvOStOMVZsbnN3V3V5S0ZsUXJoTWFrNnhCdWRaWnZVSTNiWFhJQWFXVXdxRkI0V2cwS3FVTmdkN2poc2ZyS3hqZ0lUV2dXbUNJdlZHWUh1WmNxTVNLNWd6ZXhDbFU4Yi9iTFlZVFV5TStQbEFmVlZESzl0bGZ4dnI3NHNBZUxjRmR6NERVa0hyaEJUazZ1Rm5hanFsblY0R1VUTVlZNWhHclVJVkEyZ0xRV0g5SlZBYzNBdjBFNUExZ2Z3ZmVtL0g0UEZnY1hucDRRRkorN1UrY2J6VXhGZDh6a3oyV3VxNVdUVS9hSEVXVXRPY2lIWTY3REZNYWZNdGk5aUR2MXFMSC9LSlREU0FVaGhDYkkzWndPQ0dESk45ZVlsMnB2NFJKV2FxNXpqQ0Q2aEJab0RZbnRrQUNkM3d3RlcvblYxa1MxR29oMjhZbzBSM0x3VlVGSjAxcDU3UnpBd2NIMlY2ZFdpVnBJWGh3WXRBd0dyMVdxcSt1SkVUdllUci9PNnZsbDNjZ3NTK3RtQTN6RFUraWk4T1NvWUp2Nkc2d0xiay9ZRDVic2FGSmxqcW5EM0V0MlozRkk0Tis5c3dsbWRkUkVEYThHWlJzNEczbDM0T3c3RVZlditnZGNuZjJITVlTYlJFUlM1R0tFYlJkQVZKcENrRnFick5nNEFZSkY0ZjVselhQcENIQ1VLOHFqS044ZGVFMUUrNE82RzdWVzJweGJrenpPVUlUUXlxeGN1ZDZNWjhld1ZtT1dwVHZ1MjU5VkRlaUZNd3hBNUJVaE5TczJkWHY5QUZyZUpMS29NV0tua3BVYjlncW9tVnlvQlBwczZUc3k3V0FFQlp2bzJ1Q1gzam1ZS0NhMk91NDg2cDNiNGovZStjdXlqRW9YRzkzelZ4R0w2QktydjQ4L3lva1RtS1J6VEhFZDdvbXVFMFRMTFVLMkRTTllaWCtwWkw3b1EzZG5iUnk2c0hPRVdZdHY3dHdmZXZ3VUNVS0xsUlMwY21XNElZMmFFMG0xdGR2azQzeE81cFVsSHRSdEZKNE9LUmI4dUVONnNsTURxTVZCK3pMUWpNU2FhbWlQazQrSG9WM05OUXNkYkEyZnhsL0VmRDUrYVBYTG9oQVdzNDhsek5hODhQbEM4aTF0UnA5TkVzQUE3YVgzei9LN0p6MTdIN2FwZ3cySU1oMXRyTVEvZW01aHBmS21WdEljVGYxUmhHeUJCS3ZLc3B4YjltQzJrbG1abmlFZ1lIR2JjYXJRSkVJWU9GdGQwZmtwUkx5YjlvNVptYXFSTWxrQ3hWaFRFa3l1a0w2cTliQytRRHd1RVQwQVBMQ2UxNlJjNGc0b0UyajF5RGwyOVFPUnlMZkdhKzJHZzNsUGVBMzF1Ykl4aDdKandua2d0cnp1L1UxbTIxNkdWcERWK0R1TFIyWWNHVk5yYkNiWjN5NE5yaldxUkg1M2FweGU2SExLRjY1MkI1R3NPOXQ0bW5FS3pFRDF6ZUp2Tmk4R25tRHZLK2tTK2hDaDU5S1lJV0x2aEdzTXg5bWJEanFjUG9WMzN6V2hGSzF1NUR3UzNhbU5oNnE3NDNQMkx0YWtkT3BiZnZ4a1hZdVpISm9LNFNodGo5cnNEcUxuV3dHTnA1N0dXQytIRFZoeXpCZVU4b2Zhd2JDS25DUnliRWZmWTA1T0tPdXRzOFNmdEgwWjJYeWI1VUNkL0hlNU1ZQ3lYWmJzL1poSmErZTJ3TCtGYkMwOHY5akdCeEl5NlNuTTd4YzN0YyswR1pRTFdDaGpzMW12NXgwdkpjUDkrMWhlZVhvOTZSNFp2U3NUNHFxZloycHhTb3gyeHZHbm9YZnhVOHAzL28rTzhzdlZiSjlsUFo1bGY5NytNbExpZEttQzhtNjBGdlh6VzcwK3ZkWFg5VmdZeUUyR0pxS0NOYzkrOG1EQ3J3bTJraHhWdjBPOUNuWVZHN0wvMDZScUtLdDREekhoWDhIUHJxNW11OHhUREt4OFhUT3VBRHZtQkxrb3JrWUdZbmlJZGRUS0lWT2xORzVQeHZuYTZqL0IzU05yc3dVQkpnVy9BcjJQN2FJQ01OblhRRWJYYnBpNmZ1cWtXdjc3NFFLekpSQlpEb3ZyalRwL2lyc2hCTXNpVVRmQ3YzRmtxa3BIM0NuMStyY01ENENFTkxvQkpIalE0OVpaS3V4U3h3Ry9BYjdmamFTdTkrVisrZEdYWVp0b0NoNCtRUTA3TW5tRWpZVEJnN2lVZjIzOVRZelhwK3pheldpd1RvQlFjTXhKL0QrYUg0RzVhZ0I4SjhDUkQzMmNDUTlKUHhxSTZwU1dqL1k2WW9XWTlqb2Q4REV3ZWwxbUIycUZyVXF3Qk5EWXZrQnJMdlBjRTNBZU1uemNzbEV1aFAzYkZUWmtwZmVFVzJoVHdKTTJxL0RTNDg4ZFVBKzFsNjdlRHhLMkNxWTBOZnU0cWRqNVB1eCtITGNZRGw0SzU4Tlh2dlZ1TmFDMGZRUjRRT3pqSitDbSt1UmZiMi84aEVMdDhqbXV2VitSa0M3aVp6dWdVc0VBTHZhTXZjNHQvRXZVbjZCYU5hUGxubldtRDBick5PcjY2ekNyTUlvZ0dPRXRud1M1cHFpUDZ4c1pKNGI1aWJDb3pybHRKL1VkQWJUcU1lRld5dWs4SkVqSERtVEo3VjJCUFB1ck4ySzltTkwwSVlibk5HQ3VWQVcvcnVyZjZZdzhSa3ZVUHBzYW1hNElobzB2bHRXeWNGU2pSMHMxS2E5UjN4RDMxWldhOWZtN2pVK1M4L3NuU1M3L1ZwUWNrK2RGV2t1RjlQR2xlL05VMnRzVTJXNXVBaGZJZldkeVdjZHI0S1JLT1hMK3VEa2RXVTAwV3RHMGg3eTFYWWpzbDkyMTZzWnBnU0xubGhmNmZMVklGVVRjek5ldmRxS1Fib3FqY3RxS2laNDhVYytvVDM1U1hYM2xYc0gvTXNxMVZhSkVlOTVwWDBJeHI4L0ZvQUF4cFdkV0dsUWlSTE93T2tmN3pOMlJZVW9pR004M3doSDdMck9jUEtYVkFEVUc5Z3V2ajE5ZW1ZTHRJK0h1SG9NYlV3VEc2SFo4b2NyQ1hOMHF4S3dWT3prZmpnWGdSZEhTQUhKV2pKQnA5RW54QjJObFNoZmVaVk9lVXRTdVEwSFAycm5aTStCRTFrM0FUcmVtbDRlODUzbGRkNG1BM3d1TTNER29WOVdocGlaTmtDMWhpa2g3R0JkQmQ3dWhSVXNoU3FPT0JmcHZqTllveVdCc0VtbHBSRnhzc1NZbTZhakMwdXJ0ZlU1Wmg3bU8yQnQ5R2xKVGg3SUJKNW5DRlJxYzdHTTFHMnhyMTJYaXZsbC9jRGdTNEFKRDMvK0RTUnlMSittY1E5QkcrNFNTMVJDenliS3NtK2N2Q2tCZENwK3FYTVE0ZVg5L2VtQldSTDMxL0ZwZXJaSzQvaDdic3l5bllxMEJHUnlIMWxsbktSc0lSa2szK1h4NkE5MkNHVUNET1psOGZaUTVSVDZLSjlOWGdsWmJoR3Y0UklrNjFqTkxkM0ZseEJnOHU1d0N5WjZPS3k0LzJNams2bDVFL3JhcFBsOGNiQjFkRGwxL2NHQ1ZRdXY1TVVOcllBMkpIbDBoSEVyekp1OEZLNFNab2pBMWtWVXZTK3JRaDhjWGo4bHdxSk9QY1c5SDJscms5OGhwTmJ1ZmEvUnE5VVhSOXlRS2k0UVp5QWEwWGQ3eUxjUVFEMWNBZ2JvTm5YbjNoNytrRmkvdituMzYrdnBIQUIrbVJRc2lJeS94cFBKMkpCR3RjWUxXNExGVXo1Z0pVdXR0akNDNlZBZE1MU3BWZFFLdDdYTFZYNWxnYmcvSWFIM0RlbDM0SmRvUk16akxxY3VvSGRUKzZEV3ZFamNhMVhjWWRicDJwdzdPMTlPNm9FaVdBRStvOTVjYVNDWG9ydm5SWHZDQmxibzBFenJhUTR2czNlOGhySGdOL0UweDExS1RFY3B1RDU1N3Q1QjNieHlma3Z5ZkJzekJ2dU5qenNsWldpUWVrTVRRVGY2T20yVnVMbW05TVJKWUV1bURsR1M2eXVjL29CNTZVbW55ZW92MGpFRXJvcDdnSXIrdW50VkE1Q2RCZzZmWjMyQXFWb2VNK2hObGtYV3p1aUZ3M0FzcjNFVXh3TVdQRjVQaDNnVGVwams5amJjdmhLNjl5eHVueWY1MU9rcnQ1OFR1dTBOL0pTODNJZDNBN3NvL3paUngwYW5pbzUwZmVSbzZ2aVdsamtmb3dmUERRSTVGSURIL3hWQ042QjRPUjlFY1VqellkaE1uVTk0aHgwME9ubXB2c2oxbUltdXJhdlFCQ2JpQTZCMEkvQ2lTbWtEa0NoRW8xam0xNEpJQTBxbzBwK1NOdzZROUtLRTZJTHMzRm1LZGZTeUpYeCtTand6aitwZFA3Wnd4alpCTFg4ZkpxSkJlU0VTTExGTTQ2Mkk0alh5Ykl2T205cGpaVkVmdVEzSm9VQ3RINnVnbFFMWmhVNERLU0gxSFNtY083US9VKzFKS0g4eERTeStaMW9EaVhyUnliNnVoNlQzOFNveThMckc3eDI2ZEFVTkkvRzVHKzdmYkNHTU5XdFZFU2tzOE41SlcrQlU4U01xdy9USkxNbXo3MjB2MHdZbVlySUpzMXJVeTlURm9namRoUlJIUmhHUWc2cE4zUnhaT0JWQUVrRG41ZzJCSjZWM1BSNWFMSTFrOVVSTElvbkhLR0RrSTZ3UEw4NFQ2OVBabE83ZWo2L1cvNEJ1WGhFcllGTjVXZktRTFAwZng5S0ZTRDZkNVJxWkFKR3VkQ0NSRmZnNy9kYWQyRjdBNFdBZ1QrOFg3TkVJa3lLRjVOWFBmZ3FHeWkwa21ENGJXQTZhdVNFU2M5STdWaEpCSTFmeWFEU0RZN29hNlR3Mkh4dW52U1pBdU5EeUlNZmkrOTAwMGFIWFQxUkhHQndZUEl1elM0OFNIWnVFbWFZc3lLZkpyMWE5TWpXZGRVUytlekFxVDZMZUdia05ibm9PMktvUXBTL1Jib2RpQ29NM3F6eTdDQWxvSUpqNEpZb0JLM01mbTlKRUsveFQ1azU1U3RiQWtyWEZmV0QzY09rWjN3UUZHelFwWHRQT0NtdjIxYWN4UzVMdGMydHZOZ1VwWUtiNmhOYzQ0S1NCWUtoNExxbWdsQm9YWDNBN3NuT0pzeHBlQlloZ3V1TnhxR2VoOUE3SytwWHVqOXRQdHgzVEE5RmgrZHpMeVMwbHQ5ZXVXbldYdGg4bWRVbWJ0VzdkK2FCV0ZUUTh0NjQ3NUpya2kwWkIzSlpWUFpuK1htcENoWkxQOWtHajVJRDk4aW9sK1h6aW81TGpRTUVjZGtLUXZFYWpidC9qK3JybXFycXYxdXdCc2FFTkJQOUlINnpyNjV1c2ZJc1MxbHdRTGVaaERtZWF4b0dRdmZWWVRIcU8yQnpoVjZRWVdDTUc5SlpTMWZmYzMwalFkMzR1YS9hazBLZVp4ZlFEN2hpZFNXWTRKWUdSdWZlY1FzNHdrYmNqZzhVWGZweHBEdnJZU1pTOFdOYlVFU2ZIejd4aDBNREhOemwvVVJMNHFYWXc4T1cxZWFGak5MRFhqcTI5UEh6OWg2SVc0bWU3eGs5Q0dVazROVGRHc0tJNWRVdnBKQ3JlZU1mSHF5Y2ZrVG9VNnBScUxTSTUzaDU0bFpIM1hLSHM1SmZqUi9nV2pDWEIvMGk2Nk1OY3RsUXpGS2pzZ1RtMVV4cTh2Mnl1eVhjcWFVZFBONGorL0FkY2x6c2c0d1dMS2pocXdvalhkY2psR05vbEl5elltbyt0bUJKdkFXZ3RZbzVucGk1ZTFuNDFham1LYlFNMk92RndvTTNaU0lJOXBmeXA0NGMya1JhL2s1dmI4Mmp0WmxvWWdrS0VTVjBoL2E0VnRUa1VrWC9uV3BxNWVyL2JHYWFKNWdtN1Bod1hobTBJUjNSOHJsUXpNSUhUSXVPVGJpdUdScmpOaG9lekJNc2RYZ3FsbzU2Y3FmQ0VmVldoMncySG5LdHU5aXhLcHRRYndmb0NrMVEvekpDV2p6WElLOFp6Q0U0TU1sNk1VUmJ4MkFhZTI3VVgrVXpuRTZSU0NtVjVKOTFJUG1VNUZ4WTBheU5ORXA5NlRuZkdoVjdUT3JUY0RGQmk5ZE0vVEVKNXhrb0NINUZIczVYNDZYVnRiMHNSNmpvUzRaZlJQMDc0dHYyNDhPL1VpOFBnOXhaY2xMb2xMbnJUWTBwVDVPYU1kMGhZcDFLYWFiNkp0MzQ1WjNEamNzZDRYTHJkQyszMDhPYko5Q05FZ2VqRHM2UUlrdzAremxMM21XaXlMazdyaThzM0pLcVBnMG5IYUdHZXgwNDhjQWpreUZnR2JHQndFakZYeldkTUdkSTFEalNpSnhtZ3ZOWXNURHhkUDg5WlM5Q1VzSzRJZ2hDZm1yVU1KQXVpT3lmYjg2aEp2U3IyN2FsM1FZeno0cVFQTCs4bWRHVVhRTGlmMXptbWRpUWtnNVB6M0doU0pEOEVGRmlSOGhueXlXbGVSQ05ZV08zS3VCZmdLekJxNm9oZUxtQkJ5RXlnNzUyVllPTTNyOUNHNElaeWVvVTRtb0FxWkxEWVZJbStoZ3N5bDlxVkRNWE96b0tlWG4ycXRTdmtYeGdkKzgxL2N5VGRBUTUrTmttWXlYV3ZJUk81WnBTVnIxbFRpU05RaVlOWFNqTitveWtGaE9ieFA4ZkI1QXlhcnF1aHZwWkttcmxvT1lJcFpxLzY3TldjYTg0aHQxOE5JNUtIZllkeWxGMlhvR0NhcFFLWWk5VERDQ1M3MUo1MFBLMzd2ZVlCNThZYnVHdVRRcXJua1FVWXYvOEFzMTR5QkZweit6V1pOYjdYV1l2UG1EcCtBQnRTN2pMcTdkaXFzSmVxdHlQdHY0Wi9DNW1lWjFBTDh2NjZaZkZPRXozRXdOaGZid21kSGR2RDlhRjdrY21ydGtuUllWSXhwV1ZDV0dTb0RKcVBFYmZoMzNVTmFzamwyV2hTQWR3Q0JrcGxBUDJVV25lVURSRDQ0MmowVmVIWE0rL1F2Qkc4K2c4OWxlMDkvdTRWRXZLWkRKSHFrQXJHRXJ3ckdqRkFLaXFpbExlU3NERGNHL1d4bFU1d0xSaHZTUXZLdmhBOGQxYm1nOU9iTnEwejJKVFhHdFlaZmlBOUwrRk1TTlY0d0dHc0pqUnVWbTNSM3BDeURYSTB0VFZZNytKbjVoSnYxakt5NWtOdElRU2hBK1RpMElreHBXNFRiV0tWVk5UNDY4eEJXZVhMekhSSW5DSTJPL1l4ODR3YkpTV1dXOFAwa0xYbVpSNlZNOVVLSkVpdUQ3R2taOWxwUFN2SWF6ZEFZalhWUWxtRUYvWjhrNVhWai9EdUpmbTVXZUdjVDc1S3F6clhQSXlvTEdzUjA5SGlqdmhtV3BteGRXN29yU1VYb1o5Y1lPM2pGeTM5YXcrTkp6Nm1NK3V6K0FGbmFNYUdEQ0tuV3RrUlNORFpXSFp2T214ZHBWWTM4ZWhNM0FBVGZaQkxiZThJNC9ReUtneG9KVi9JUzJQNWpkTkgzTTZGZkFLNDc2YWlDSFM5TTNBeHo3czFjS285bStXMTZRWkI3U0hYbTZVL012U3ZQeWptTFE1M0VaR0ExWUNsSEFLYlVTcTF4VDMyQytBUW1Zdk5qOFd2eU82MnRUbWhiMW5HbmxqZEN3QzR0Qy9GZ3A2SXRKZDh4bzBUVHZ5Ylg1ZTZXRXhNYmUrTlIwbHIxZGdMakRrODBISkV2SHRCMFVlTys4WTF1VEFlL09TVlBDU3Ryc203dWZ5MFU4NkRnYVJiNi9MQVRGeTVJdnNXUVFEdzA3ejJzY2Z3NjIvYjc3L0RYWmJQNzVjalBadEtNMEY2NkhHY2NJNThobUlaU0FTVDAxZ0xFQS8xTjNJUkhZRWk5RG83S1hUdXZRK0twenRydmVqMC9nVEJmV3ZDdHFQTkFDbWlMeFV0M3BKVVAxdjdBOVUwa3d4anhxRzJBa2UzUXVTeTNlS0FuNjdQZ09paE1ZMFRweFdEUVdEQWZ2UlpNZldhd1A5V0FrS2VLOEhuZStvZnVzOS9JcVduTHFxNTBiVCtnYmRyVnlZODVKREJYOVpqc1FkT05kWFg1M1p3NXpBK1pnS0VScjFwOEZUZy9Nd01OZmxWb2xucjZHMG94MFIvOGZ3WG9MdXp6a0owSExXNzRIWXRkdjF4NEIrdThUNHQ5S1VvRFFYTWkxcmpsdEkwSm1UbHM4U0JPY2E1KzNWSlBNYzhRdlhrZUR1ZU1qOWJKT3JVZVNrS1F0aXdHelRRMmpPUmFXTXBIaTRFTWJENVFKNUdKd252clpYY2lTOXhkRkQ4WFdZZlNSUk15U1VxT3VrMWZmdU1ta3RrSS85dFdrRDFtblVBY3Nud2dDc2RBL09IYm9VMDNCaVVTR1FjNE5COVdXMmFMTDJPdUxVWW1OS2hON2lNZ2ZCbUtVZ1crM0k3UlNCV3lTK0ZNQmk4bzhja3g0N2J6bVFjRXRlUGYvOUMrTzg1T2ZaM3RsYjZJcTBBaFhOV3Zlc3c0OGN2TUhUU0M2ZS9VaHowclIweTN4eXp3UXhzS3pGcCthS2RTMzJVcHd2aDFIaCtWUE5FdmtpT041a1BPQ0pkanhsUDlQTmtPRzJqMHBib2o3cDNremxQZzJBalB4bEtCalYyakhBU2lFcERKUGU2S0JyL01wUTRZZWFnbDB3RXMxcTN3Nlp2THpaUTk4YkFnTDU4Y2N3TDJ0N3NIYWpsWVZCVkRTa3JxWXBMWGRTZzJYZDVHWjduWHpjbDVkdllnTUIwWkFZV0p6M2cxK1pkcVIxa0lMcHB4a2YxKzgxWUt4NFpEVXBqMjZWOVl4OTNWK2Q1Z1Y1TFdLdnFjRXRtM1hGdzVTaXVMTVMrakxabmhzakZKV3pqVklySkZmUFpwVVo5OXhSQXVCOE8zQUh1Z3Y3UVM4OWx1U1JxWU1ScFdEdVJZT0NvVGJsd2tlZ1BTRlFxWjUxUHl0SjIxQmttb0pWdXIxQllEazErUDB2b201UmI3RzU5a3dpYmNJSHpXN0tpc0lTMkcvWWh4WjFETFlReFRUalZ2VExoRVJIWmY2V0Rla29nSUxmSzVmUWhvSzJ4YmI2Z1JEajZlTEF6MWMzTlBjUFR4bDhQVk1QekNVL3I3VUltaHNYdjFad2xhSGtiZ3MzRnpURlBGbyt1TlFOYXAwd1pOREtWWmlVSEVrQnI2RmpLMEhQMlM0Uk1ZUkZIL1JhWklMcGV6YTRpcnNTK1lDVkxZOEd6REdrbXR3cStIWUZYY1BsTDB3TGlsTlFzNlZmZm1KZVZtcHFMcm5SUUI4aFBqaGJBdklxL1JLcEpSTGJjdko5V2pJYkxySFF5azIzamJzb0FIR0ZmOG5SSHI1N21mUnNZdGVUSHRaU0JoV0pTbFYwdFdITksvWVpsME1uSUVmOXBBZVhMT1JUYnBjRXd4WllkMkR0K1BpSk9xUlJiNm1temJyVGxmUUNuRDl2eUNQTHZNRkdhVzdzVFJTblFPWFRacVA4TDBpWjJvWFQxQ1ZNTXZmVUdHWndnZHgrRnV3SERjUDcxUzlSdm1LN2pPSzFDeFFIT0kzaWFKQVdybEY3QnNGcE5QMkdBdnFaY0hpeHh3Y2xMU0tFeHVqa3FjQXF3UlBHcTlWWDl3Z1p1RkhGRzdQOUp4eU1mZ1BvWVhJMDIzWGkvTE9NdG9xaHhFQ0xHeXpsclhNQUltZHJYZjFCT3hGcUZ5STlqQWhxQ0FXWHAra00zMHVNbHhJQ0w3YmVkK2ROaHBjRWZ4YXJmVmcrQkZ3VXc5MkwxWkpDVWkyWnQveU5xN2pGYzBmRUhweDkzc3l6bjIzQlRndDJqcUEwa0kvRmUvTXJ4aEcrTUI3dGo1MjljUGx6MjUxQU1QanI5Smk0ekFXOWhVWkVXa3BDU040RUxadmVLdU9YL05jSWY2ZlJXaG44N2pPMmdvOWVLQmNYRG1Ca2taa2lwS2k3Q1ZsdWYwdGllZkgxbjhWNjBTeGFhUmZJdjllcElaenloNC9KODIvSzVFRXZ3azdiTFI2dndEYU40UWxqR0U3bFJvUXU0dzRpQUh4bVFYVUR6WU8rTlRVemtIT3BvOGxiSDFveG41RFZnVFJkaUdSRGhwWUdHY25CQUtYU25aZ0RzWDlXb0JSR2VHZlBRU0VaYmtCTzZqeWpFMU4wcDdJNTg3YkRlV2hSb0YvcnBIRDBLalBmK0cvQ0lIcmlCVFlnSU02dzZBMVJXTng4cER3VUVlbWtFcTd6OFFzT3QrOEppSVdlME5YdDRPaTMwaG52cHhZTENsNVpWclFSYkkySlQ5clNLeTVsRGNJajdpeUl2cEZBNHJ3OS9qZFd5VHNzUTJkRVdaLzEzMFlib1BwUWdJc1pYRWpBMXZIZ3FselpjYXNJZzhsMXRaSUZjNGVmMnBGRlVmOFVaY2tRMDFoMmQ1Q0QzZzJwUHpGSGprLzloU2JJSDJScmduYmdhdCtuQ2Nnd1RsRXdGck51MG40VkVkd3QzS1dla2FPcHRZL3VreU1kcEdSdUVHWVZ5RFBLaGFvTlh4a3A5Nzd3S3dnZGVUOFI2NXNZZG1YaEZDbkFzYlV3bDM2dDM2ak1YMWRZTVJPQU9XM2VFRUJnYjNEcE9Vendld3NaNDlIaWdVbGxka0Jya0ZoTUY5d3dXTzBHb3hveGhHc1lueDZmL05VSVpFa25ielo2UkVwLzFTQVVyOEEwN2ttT0tvdHlCZVllQXZLT2ljUU5tYitZOWJPZjFpb0ZTOTFjeGVuWXpsVGpWd1gxQURyZ2J2WnNZWVREVkY4MCtXU2JzZkd2RTdYZ3pSS0lUaUFzOFpoOE9WUnNtb0dQWHJTYmxka1lqSFhwN0RDWjd5UFl5NTFGaFowZjZpRk9ndyt6NytFYlhuYy9TQmx0TEo0NE5DUVlVT1pkeWxzODZUczZhWUNlTWNJZmZhcDNhenhoVnZMckl5YjgrTjdtb0lwU0dBZnovRjBybUowWFF6SlNhOFF5d1g4TFdqZnphMnBrei8yUVVNTFh2cVhLUStpa3Z4RHRCNEVzNGpWVjM0K2dmMys0N2tJemhYOHk2dGVhZUI1Nld6cERTVFAza2FBVEk5VDNmQlQ0ZXZHUzVOSnhaSVpBWmNRWjlaOWJLaTdOSmlqcHdYdE9ucXlCWEFCNzhpRTF4QWZOeHgvNnYzOWFCbU9aYVBKVDcxL3k4bUhjUmUybWhJcXV1alhNRlh4V1V6MDlXWk55a0V4WFlUeTdDd3RyRkw1K0tCN256MHRqeW5CQkJzbGtXZ1h4eGR6MXo3c3pQOGVGdWczaHZrWUNGV282RFArdmlYQlRDQTkzTEcyUjBHVHFRdll6S2FobE1FWDZlTFhJcERWR1FvMFlhdWZ1REkyalVld1pQN0tRdHVhNGlNbGpzYWxGZnhqYXpoNTVHM3BiK1hqa2JlWHdPZ1NWejVHWDNtbDdyd3puRWtsdXY4VlJHOVpzaDRWL0NZK25XZzRpZzY3YjA5cDRkMHFGTkpSYkptWmVuVXF6bnhYOUtMdkg0aW5ON2FzZS9Mem04TldQaWw5YUs5bDdLM1ZLVHVGQVpCcWsvWUFqL011NkEyZVdtM2I3MTU1QklNRW5iL1JUYzY3dGNQTUhKV3krWUIrc1VMMVdhUG1wdEIrRzJGTjYzVnNhOW9yOWp5ejZnVEpNZEtVNThUYXFjTEMvVWp4RjBUbEpQa3NENUl6Uy9lWXNHdWVYSnZtUFVwUGxVQWh2WXZvN2hFc0dVZm05ZnRFMDlGV2cvMk9Gblc3cFpDa08xdUVqNnh5c0xpblUzcCtjVTg0cmNjZHNrYmc4S2RLNFlYdkRBdk9YM01ZS3ZkZVRVeHlPY29KNW0wL3BrWGVwSjVPM2xqM3ZMYVRGRk5EVlltb1Jmc2tiZDgrVnVoVW5EVjZTNS9pZ3FjNzNrdUZEclpDYU8zdktTZFd2M2JTT1FydWZOOTNKY3pXYzNhTkEvS2JYTS8yRnJiUkVSYURKUnNRdTNRS242Z3NRa3JZeldCbC9SazVyUVpxSktIMmZzN0VDUEIraDhTMTRuYWQxRk1RWFNPU1djRnU0NWRNRUViY1pYTjBkU2xDZU5TWGhKcSszczJpMkMveVZlYkUxV1dIYlgzeVRmTzRVNnU0V0t3eiszUGZ0d1BNY0JTNzZXYXk0bkM1NGFySTdIMXhXbU5CTDB1cTJvYVVQOCs2TmIzWStKNEZLbFpUZG5HNlVnT0pua0RFZ0M3TkdmWFVUeGxNZHBVZzBvY29IL2JCYUFodHZ5NGtwNFRoK0JRZEJLT2Iwd0tPUFRBTCtoUWtNQlowUkZmRGtoVXQ5dzdEOFNQbDV0R015cDhpbTRzb0ZkODFvZTNhNW1TQmpIM1JUbUlNVUhWT2hzNjVTMHcrdFU2N1FSbGRxSTY5YXVCc0taa1NQdmlRWG8zdjh2emFDRzFSb2ZEdTBPMzdPMjA1N1gydnhqZm5YRWRFczJaYW43dDBWVDQ0NDhML0pWSi9tTzN0T3Q3MFhlOXVXa3Y5VVZSd0JOaXVBci9DNHExSjY0MFN6T2lObmJodFFjMTFhNlI3WHUwUWpQTzZTWVlvT0FNeExMbmMrcUtvZ25oWTN4cmhaZVVJSENuVS93bVhoSG5McmtwSlduSWEvcnBQQlNMQVE2ZEVuRDJhMlVUUk9taTYrOG5QUWxZd2dDQURXTllxbjMzN3VacDVzNVFmRm8xSnZwb0NxVEpVellsbGt2OFhJeUpXRm83c3J6ZjhFdmZYVWlQenh4bCtVVTJJNmVhZzUxQ1dIR01UVC9QWmlnK0RvQlF0bmVhZHFwRTNsVHpFK2ZsK1ZBNWtMYXFXWi9Sb25VUyt1eTlZdm1BMm8xS1o4dmZDLzloQXhyVjFhZ1JpeStWUzJ3bjhOMGh0aDNQUDE5VFZwcHdsbUd4SUhWWXU1SWJ3UkVyQlZPVGQ2QUhnT1R1YitCbzMwbktESGU1d21kc08wbmlpTGxkRGFnNy9iQXVJaTltZksxS21qbng0aEFTNjJyTjd0V2QrR2pmYURYVVY1V003RDZJSTIreDI5RHF3dHdPY1hLUDBKczdCTzUxdmlsbWxFSUl1VEJXbHhDblU1aElSejU2bFlFK0F6ek44Tmg1T0E2ZXRuS3psWmNTR0NHaUFnaDIxN0UyTCtHK2liOXZFVjlrbHVWZ3UxeDJqUkpoNlFrd2pOSFFwTDdzY1lSbnJ0V2FQc3BXUDQ1SUVOTTlqeTZuOHE5SkM0OWdyMXlkRjMrc3EwOHlkUURhRTdKV1ZiV1MxQUpkZ2JhRGYyUytYVDBLZ1djSjBkSkRrZGIxdk4xWXBJKzIzMEFRTHJDcEFtREsxQVJxeVVXMm9zZXdRMFpiaXlzbEZsQUR5dG5aS1FQRDNkeHFXYU9Ka0tFaFNyK0IvR1IwQXA2YWZPeS9qeE9GdmJoRy9ja2llTUVnQ3I4RW5teFB2cyt0QXFMRlhxZVBlS0NzaHkycFkrVTFYS0dYSHlLS3cwWXJJTHBNYnRXRkFnOFg2Q2JzcS9xNHlRaGlWNUNDVmdBU2NCWDVwTTFjUGdvWldNS3RhamNWRzhaT01LbTUyRDhsd013aFJ0d0NsQ1crMUFIOURQOVZvVlhndzlXaEdCb3FEdmtRQVo0cGFGUlhNbzNGd3ZnV0RScXIyVkc4SmNIN01GakRnS09oUXlSL2pVYmdrSDdJbGFLTDJGZ3Nxd1RCdVR2NFhFT0UvZXRJR0lyakYvOHR5bGprRDVpTXFJMURQWHA5WGtiM0w1SDRBQjEwSXhYSjNoY3RFWVFIMkVIMitlbm5uU00xUHo2LzN4NTJiNVZ5RFpIeFFQaktFYTlNY0ppNTJsVG5zdmQycnNBbnh4dCtrLzJscnZuRmFUZDI2RW1DTFFsQm1vNCtGQ3FtMGRHZkxTeFhxZHdESWZDcTBGUjF0YWNwVEI1a0ptK1FsUFBqMEQrMWkrTWc4ZWgyYURBU28wNDhLMG4zYXJMOHZWS3BSeTcvTnU4YXhXaE1PWnkyUVd2YWhtb2I1dG5YSWMzNSs2RlNUQlB6aUdXZS9Fd1huYnVxaXJXNk5RbWYvYitvZnBWRTZPa3pudm1LVXE2NW4wZzMrMGp1WXBIa2dyRWg0V1pUVDdFMEQzcWZQQjlla1hHQUJVRDh5Y09qTnNpYmgwZm1hOHBDYmhlU3Nuc2hkM3owYkZwR2JZdjc0MFhCdVV4eUx1Ylo0cUU1N1d4RGkvZ1cvVTJWUjRZclJRQTFWSFZEVWpKNEdoKzF5RGdSSFpiQ2FiZ3NhcVg5OHRqTUtaSDZJZjRDQlBkTzRZTnRNK2ExdzNQK0MxcjBYWEFvUFVEY3dwZHhCeG9JRXkrWTc5ZE1UMTc0NHBjK2hGQ0tCQ3J6anQ0U0JCb3pZNW41S0c2YXEzQzAwdzdjcmwvM3B4QlNnbWJuVmRxMXRhTGgwWHV5VW9kdU53T0lFWXpEeXBpN3FwZEY3US9CSHRiM0l6cWhUalEza3Z1SG00N2ZNUk9JSko3RW5WVGRHWW9QQWNvQnh1dlJVWFFvRmpsWHRwc0VMaWhYUEdhVTBwUi9UTWp2eFVsL1ZRcE9hbXN5WGZIdzJnQjI0b1pqc0pnZ0UvV1libUVEYjFZeGRPKzN1Vk5xdy96TlI1OVc5MVlua0pCWU5MYndFVTI0cTJlYUYxd2M1VjJQRGhFMk5od1dqM1d5ay9qMXM3YStxQ2U3TEhxNUZGSTBCS3JTdXFzUFdLbnMybE94VDFPcnNkS0ZENG5Va2ZGSUI1SlVqeFh3RkZNOER6UCtmS0h2a3VJMUpibzhpZTZET1N6UE1NQ3Y3Q3FqYlZadUNxV3FBMDJGc3VNRFVMOFdnaklnRWRLTENpME9FZXQ0TmpYb1UvK0c5U0MrNXNiYjZJMXF0L2lkSkhETTRtU0V3TE5KbXh2UHNPS2lFYXllT1J5Q0ZxcGFrcTVhcVQ5VXg0a0hvbWd3dlZZSXczODVGT2tubVI3ZFZmamdOV1F5dVQrVTF5eGpQeFdFUytFMXQ4NHhqanZiUklVKzlEdDdPMVllLzlXZFd5RnNnYit3U25xaUJWZkJ2SUhRb3NtNytFQ2gwQ0FhVXB4cEZMdHNKWVJtTzBRMU1oSmVSNUlkbWpXK0g4SllTQVMwYStPRG1aVW43S09vOFBIb09CRmhRS2NJMWMrV1k4dnV1eE9UL0JUeFFDQllycSs5cldGS3lsSDBjZjcrb0VvdW91Y0xEeEo2R2RmcGJPZnFRbWRxcjhlWG1SS0NtWFdmRGllOFRNK0dJa3c2NEVYVGxxdEVucjFGSDBYU2x0MjFDNHR3RGF6cDhBTkJrN084R1o5Z3N3STBRcmVLYWlwTDVnRzlGcEp3b3FqSE5DVHJ4Mm51L2JJVkgzTTRZZTAwVGdZRVFTbW4vbTd1bDRMWkZSOFBRS090TGMzZDJha0JpN3RrMkxPZTRBeTlVOHhVVG9PcFV5NDkwQUNyS05DSFQ4SDNSOEk2NnRJRHByNWtpelladCt2TllTRzdJWStTSDZEY0V5bXRuejBmWXJYTGNzdkE4WTNNK1RIMFdVTlViL2VIWERHaHpQZnhCM00ybi9LY0pLM3VUNjdERGpPNDl5TWJmUERPalFFVy84OTlqdEkyVE96K1ljWFdxemIyeTRtQWp1UEhFYnFxME9CTlRpMlJSelF0SzFnWm9oMUJ6Z3NqbWdXNEpEZGtvVTFnVW4yOU03VmVVLzNFQXBSUlFBYlBIcFFUYmRmQ2UwaWdNZnJKWHU1M3dTNDAxbVd0VitYUlFiYVVuS2ZzUEtycFo2cmZmcG15b0YyeURQaDY3eVhGYklrS3ZVUWlia0J1QnBhclRRZnZ4UFVtdnNLd3JPR0F1SFloU0RmM0pJOXFOWStDbHl1VmhWTHk2Q1BVSnlkUDhEOG5wdEU2b0psWUNTamlVWXlaVE9PMVN1SVc5R2hRMDFCSDRpN2pUaFhzWnd1VUY1YmQ2VmRrYkdEakcyTS9IYzVBTE5qeHdKVHc2YUlEdGthS3JRRTBJL2xvZUVWZ3FuRVZHSVYzMUlEK0tocDRxckkvZGlRa1lUWlJTWnltR0ErdmZSMGJwZU9BMDNJQmVYQlhORDl6U29oNkFISEc2c1VpK1NWR291WkZicDlrekJoa0M1MlNCVGpnVzRselNEeGV5NStkVkR0NWNIRUhhcGpEVFZIcWQ0aFZ0YjI2c0o3UngzK2U4MDU0Mzc4Y2hhNE9zVkdPZU5WZnlVU2JFSGJLbGhmTkgxcnEwM0JWOVYxc2p2UUVBOHR2SWQ5dm80Y1ppNUkvSmhtbld6ZWszWjVCc3VpL0ZLZDJRaTZYRWFjeU9SSHRvWHZqeklPbHc2ZTB0YVNlYzkrSG53TDRuU0F0SkF3TEN1MmQwczJMSEovMDNKS2VuckxCbzJsOEhaSW1Db05KYi9rYmM3THhpbkpLV0hWQThUNW8wNlIrQlhXMjQyQjlRU0Y0VnVvbkZUZnc4WjQvVmZEWnFocGpMcmtTdjRNbzNwRlpHQ3RMeWdRclJTaFVXeUw3M3h3ZWFnSFcyN3IySzE0dG85Y1gxSnh1elhJUXkwUG1DSWFST2ZxN1U3TmZZTzZTeEtHRndxcXBoVWl2QWV0VGVYR2ZlOXVFdzhnVlFVaWgvYk1MdVFJYVQ2SkFKdFdacGZtOTUvMk9wRFNGQkpXSzlFZG9sRytZSUxYSUxENGJURnlZRTRrMFQ5U3J1QXl6d0NwZ1FzK0ZWb1BWS2R4TjJ3SUcyVGZWUHBtQW40NFBIdENaSlQ2Q05VZHpwckc4akZOOEJWZFI3TzVGdENjYnIxMHZ0OTZtZkcwZWY5WHRRQ0c1Mks5MW1VQlFCQmJOaTZWT0xHQ1h1dnNUQVAxTm1pVW1zemJvNTJsU2R6U01KK2Y3YnpxR2tqSUtlaWp6Vm5Ed3QzYU1FSVJpUEpWdFBUSEhCRUtoWTRJa0VNUVcvZTV6SVRhRzJPVnBmZ1RNQk1kVEJmLzJRQUJBQm9BUUFBQlF3QkFBQThCQVVNQ0FBQUFBQUZsQWZoQUFBSUFDUUlCQVFvQ0FBTUFHVlJvYVhNZ2FYTWdiMllnUm1sdVoyVnlJQ2d4S1E9PTwvQkRCPgogICAgPC9CSVI+CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I+MTwvTWFqb3I+CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24+CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I+MTwvTWlub3I+CiAgICAgICAgPC9DQkVGRlZlcnNpb24+CiAgICAgICAgPEJJUkluZm8+CiAgICAgICAgICAgIDxJbnRlZ3JpdHk+ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8+CiAgICAgICAgPEJEQkluZm8+CiAgICAgICAgICAgIDxGb3JtYXQ+CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24+CiAgICAgICAgICAgICAgICA8VHlwZT45PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MVo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU+SXJpczwvVHlwZT4KICAgICAgICAgICAgPFN1YnR5cGU+UmlnaHQ8L1N1YnR5cGU+CiAgICAgICAgICAgIDxMZXZlbD5SYXc8L0xldmVsPgogICAgICAgICAgICA8UHVycG9zZT5FbnJvbGw8L1B1cnBvc2U+CiAgICAgICAgICAgIDxRdWFsaXR5PgogICAgICAgICAgICAgICAgPEFsZ29yaXRobT4KICAgICAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPkhNQUM8L09yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5TSEEtMjU2PC9UeXBlPgogICAgICAgICAgICAgICAgPC9BbGdvcml0aG0+CiAgICAgICAgICAgICAgICA8U2NvcmU+MTAwPC9TY29yZT4KICAgICAgICAgICAgPC9RdWFsaXR5PgogICAgICAgIDwvQkRCSW5mbz4KCQk8QkRCPlNVbFNBREF5TUFBQUFNcnNBQUVBQVFBQXl0d0g1Z3dXRGlZWEFIMEJjMTh3QmdGaEFBQUFBQUFCQVFNS1FBR25BVDBJQUFELy8vLy9BQUFBQUFBQUFBQUFBQUFBQUFES293QUFBQXhxVUNBZ0RRcUhDZ0FBQUJSbWRIbHdhbkF5SUFBQUFBQnFjRElnQUFBQUxXcHdNbWdBQUFBV2FXaGtjZ0FBQVQwQUFBR25BQUVIQndBQUFBQUFEMk52YkhJQkFBQUFBQUFSQUFBQUFHcHdNbVAvVC85UkFDa0FBQUFBQWFjQUFBRTlBQUFBQUFBQUFBQUFBQUduQUFBQlBRQUFBQUFBQUFBQUFBRUhBUUgvWkFBakFBRkRjbVZoZEc5eU9pQktZWE5RWlhJZ1ZtVnljMmx2YmlBeExqa3dNQzR4LzFJQURBQUFBQUVBQlFRRUFBSC9YQUFUUUVCSVNGQklTRkJJU0ZCSVNGQklTRkQva0FBS0FBQUFBTW5YQUFIL2s5OTlIR0dBZWRISWFDdWZJMVdCMEFrdmZqZzVKaUJOY2FIdk4xb29PVHM5Qnh2NXZ0b01tbkNWRnVFdEtiRjhJNjlqeEs4RDFmTElLajZkSGlXb3pOUU1uK2RuMlpYZ2wvamF4SjBLRGdIdUJoRmg4Q3cyK0tCRzBnYkNxd3F5WUROREsyY08wRXVnNDZWWXZ3ak1qSythdElZV0R5ak5RWFlLYTMzQmxxUkM4NEg1a2ZBd1VYeVY5azNLdWJET0VsZkgyTnNmWTd3K3h1QTdPN0pFVWhvMzV2TmpKcm9rUzV6TTRHT2R4Yk1IanNXcVVrSWZKa3IzQmphRERTMGtmbWs2aVk5RjczUENKUkhBVkE2R0swUVR3M3ZlVStYandyL0ZkMXYraXVFMVdjcGVLVVlOZC9CUGd5ay9ScWlsNS9aQVRwQXBMbHVGWTZwNmNEV3hGZlQyaCtqbWhScy9KclBUTFoxa2trMTdEZXpwSUc1OVltdGY2aE4xU1VVV3V2cUdQWEVNUnFJQ3dWV3p2ZjVhR3RRM1o1b2hvZWxBV0w4cWIxWkhidUxIQXJIZ2xXcnFoV3BPbXZtWUYvSFJ1T2JuTEtramptVXlNVEZ5WFpZUitseHZhVXYzeTNvZHE3WThUTjZrcTBYVnIzU2JIb0lFSkFXWTlaSk9yRThyOTNwODNSUmsyZUFzbTlCeE1DMms1aWFkZTF3OGppaHZYTThjZ1hWM0RTNXE4cHE3Vm91dFlJTFlUeVY2bVBFMnlYaWhZYWUrTngzSmxmV1M3RUMyYXVNUnY5dThMd1lZWUM3QzJaaERsallMV3pMaXpjdjYrRTlMdUNLZnYvZkMwZ1F5YTErVEpJQU9XUHlIMzhmWnJMSDJhNFErelcrdGt5aGVkTVRKZkhic0VkZWlic0c5Y2RSTDZsaHlKcnY2MkpFa0dGMDFjL2Z6VWN3eEVzNFNFK1hKN09wNWdRelBYYXVQWnVoMUV1K24vT1lBMEZXMTY0T1JiSUVoNm5kY3Z3bXVBSy82czhKazBFUCtsdXNjMVBRQnpueUJwTWtLaFJhcDkzdXlCWm1VTjVXakZYK3F5SkJGelAzS2tWNC83dUhGdVR4Y2l5K29iS01MdGdtTzRSNXNyTHk4U0NVVlZ2Wmd6YkVnem5xOExSQjFVWXhYb0ppVUlQWmJoZExsMnlobHptQWE0eWlaUXQwVE5lajh3MjMrOTYya3JXOURtY3FLZnlRRnZsU0NxeUU1eFMwQnNpcy9ZNVkvZGF1NDIySzMvR3k1VVR1UHNlRExnOGFRNzloYlRXTmhJWHl4UHhtdlkyYUtjQ2NkSWNZQ2U0bWVBU3YzVnV5LzlHUE5acFlHcWlDQUJZUHl4Yk9UTFJnOEJtbmY5TmZyK1Z6aGJJbHp3ZXluZ3hHUHUzR091d1FOdVNWd2kybGRMM2lSKzE5NWNiSHV4OG9LRFpncVBpdGtlZ3hGL09YdmZsQStwRC9xUnBpNjN6QjBHaGlYVlFDZnkyZVQxNnhKOG90eUdxdUxtS0IzRksyeUJtdFJoc0wvZ0RDRmN0VlJYYlZVWEt4Um91SHpSK2Rjb3hWTCtRK21PTTAwRHBKYzloM3hyK2FEdkg3V0dxOC9GOWgvd0x4cFU5TDk3SzdnbW5RVUFOaFo2bjRUbm8xVkhwVTNOZUtiMGhWN3VXS3J1cFozRGVNa3E0cnh0OXNvN2RZdmEvZytBZ1hCdHpFMkdIZG94VW5VQWZwTXhoRjliR2dHQkJCM2IwVmhDU0U5eUJOM3NIdHhEU1dsdkV0dm03NWdHSjZ2VVUrb1lhNXFCTkYxd2loaEc4RnVVOERXeitqUm1oV2NtcWhGYU5pWFNCSmRGV2lYdFZnNGVRWHFHVi9zK3B6Misxcm1XMTVzMnM5Vk1yMzMxdUxSUlFRa0lUWXJvRzJyd3FMVkxVMzRwRklHV2JqQkh0TzhRVDV6WThabWZNakFRdUlyU3N6cGZsTzNqRjR0S3ZFT3g4b2ZpcE5EaDBkMCtsYzNPOGVGNFpubnZxR2JIMXJKK0dTYS9EZUpENVhYVTdTelpLZmJuc0JWZzY5RlpzYlRWZEhqckJONHJMRW5aS2JoMnoybW02OUZXWEpuWUVOY2lLQXJwakRNZTVuVWJOaklVSlF1QjJaY28xUXhSQXlBM1B5SGxHNmFqWGRVamV6blFLdGpDNTBoZkJnT3BEK3hYQkhnTnYzNUQzRThxSzFCcEpQdkVDTEtyQ1dMdkdJUkJ5VEkzYXF3d2hoVG5ZK3gzZ2owZGU5WkxGV0JFc1RaWHR3WmY2bHcyejNZaXluVHVKcXNaNlZjbjh6THZZWFBUT1o4dWRLajgyL3d1SEpubzg5cEhJenVvS1M0ZWFGcG1IYzFNN0ZFSnRXTlp1eXUzTG1rMk44L0wwNUFsT3VjTVhpNkgxcDdyaVNQR3NWN2VYaTRCMnZtRnBaRDZ5Zm9UTXdJNFR5Q1R1K1lHblRxOFRUOGNHU2liSk0vNVBUcnhQa0ZIS1Y1VTZldmlKYStTaVhCclRQdzNuSjJYUDVqRENERmdOSWI0eEdYU0pWZDdMYkIwcFhiSWRJeS8xTG44UXFDMi9LZE5wOENzSTJNRElBMExJdm5OZjFldjB5TTUvb0pPd0I3NFl5eFB0d0Z3eU54akYwbXpxYkxkZXJSUnRZTnd5Wnd6Nk94ZFBXTnFTOTlqWlBhN0tlWHVxTksrMmF2c1p6OStPTVJKZFQybDdNL254NWhCT013cnYwWnJqcXhQT2hGaUVjN2FzUDhrWktFSFJqWTgzUnBmR1hScjVmTklYL0gyK2xmSDJlbG5INGVtY0NGVE5xQm0yMktiSG9ZQWgzcEZOWVBRZkwvRVNiNVdqY1VEWmlGNWVIVlNOZnp2TEdQZzNIQ3JMWkxmOGVqRzI0ODhuUXJoakM1VklKTkxMR3ducndZQmtiM2RBaTBOOE1LV01MTXVRZVBrQTVCaFc1NFJXTGZPWlB4RlNLLzJaMlhTSG1odTBWTGc4RkpYRlZ0OXBuL01MZkk3aVRXTUdpaWN4c0RjdjhPMVRsalE1YUtuVTVpTVNNWVlwWVdoZnhxazA2VGhDWHVnMVE4WDhCTnBZeFdEUUUweUdqQkw1a2lYTUFINzBJeVpQWUloVlZ2MzhlYXBneXJpb013QXNxWG9mVzd0V2tyNFMvMGh6b2ptN0E3NmNIdzBLZGxPcENoL3pWOGxSZ1RpdEhlclVhdFVUVGlWMlVudnp5b2Q1MHVwbmI3R29uU0ZLOEFoKzFib2RoZ1hMSWdFLzBrd3pTaThkZFc3NXZZeUtiQ3p4TGVUU250OHB2UXFaeDRUZ2NvTm1TM05pRys2K2JmRkdMcnJDRTY1ZDhzV24ra1E4Wmp4RndjZktjN1BqeXBLNTBIM004YWV6ZjdYdVhzend0ZEFZNm5TQ1gzQkh5M0thME1VWHdUckh0cjlzTU5WOU9mTXhSVEU0WCtFWlRSTGhWbi93L1Qwc0t4aEE1RU91V0xxeE9manhMQnJTRlo5WmZENnZEVGEzT051Y3ByMTBGRnM2QXRPdW9SRWpPOHpFS1NjbWJCeE1IM213NXlGR2xhYmRBQStyaFF1RENYNmQ1d0p5dFozS1NrOEM4M21zZXJoL3hJU1FVMFdZRExWbC9jdXpXNTk2SE1QMUFSWHJSbWlNMlRhTGlmenh1anpRWFliNEVMeTF2THdaK3lzZ05oY1FRVjNzS0JtUGtjTXpwcDBEbGprNE9zemthVVV0Yk5vSzNlNFNNeW9iZ3BpaDlWdW5laGpLQldCWmNyVHVSdGRKbCtVT1ZkSHdma2J1a0xaLzRNMVViZWpUcjVReFIxTVRNaHlZZGdmT2xMZDJWL0FrOEhaK3o4YXZqNElFUWV1V1M4UkdmQkpjOFUwTFpETlBrSG5sc0dtNkJCY2k5eWNjejBacExHcCtiQm94eUdOMVB0OUdlUmYvWHk5a2VLQ0E5Vm5pcWFVK0xCZzJwMzlHSjdFSGpoVllENDdKMVJpU0hFblE2MXhvS0cwZlFQRzVrb3VVUllaZ1loZkxTdTV3czlPTUJEamFrL2ZPajZkUTBYdXR5WTRuQ2tXL3hYdFZjcnNSY20xenkyUFVSMUMxZVhJN1NnZ2tSQUZIV25SSVdPYjdxQ2dQbWpiZFBLc3QvWG5nTHcyc0RlK3ZzSVJjcGF0bGRlWGVFVGhwMmVocDRIODdIM1dDa1BoNGdZUnROWXM5N2lSWXBQMGtlaXF0dzVmOG1iS0M3V2x2SHJsaTlXZGlhaUNLRXA5RlJ5ajNCM0tzNmFSdzZLMUZIc3ZSVGx6ODIzN2F3YkhTSzc4cGFqY3FyUnY2dzN2ajdkamdLTkJ3aFNNb1pxcDBJL1BZdFNrQWhLVFFvS1g3SHVqK1hqWGh6TURUUjVNN3BMODNGYXRVbzQ0YW1vSC9qdGJaZlVCMWRlcDRMOFNZWGVuTUpEbit6L1hqQmhTTTd3MVI2czlIV2ppZzlhY2NaRVllUUZvMk41cVBadm9EcmdocTZjdWxra1ZjemRVdnZWdzZhWTU3WVpMRWlZcDNNaVdiWHNkUFFJaWFPQmYxTWcyaGQzOUpqcGt2VUsxRlVhSVkwUFZMaCtoVi9lYlBNa0hDYUVQUGkzcTN0ZURyYUczTldQaTJML0ZHbDZQOWpOek9oeU04SFg2MDEydGxkM0ZrakNYREVGNmllTFFnOXducDMybW9rVExVV1cwOGRuNXZuUGgyTDhvSExyclc1WVVDM1ZGZEdWWjFVODUxMG01cWRVK3ZYRUsvM25aZXhEd2c4b0VEL056Ny91Q2RHSUxqOHkrdjNXL3dBTWRNeVlEWU1OcklkZG8yR1dJK1Rpc010TDlqbHpTWGZQZkdOUi9YWURza1lHT284UjZJbmx1UE9kOWxrSnhPRFBzT2FkcDdDM1RnRnN0bDU3VCtYRGpvSm84eVdLQzBIUVByZG9PRm4wd1ZmY0czS05NK0g3UXlJWGw4WC9jMS82YndJVnRoZ3BpeXdTaWpLYVIyM1RVZSs1TEw1R21UWU5SVXBReWVkcCtrVmhGQkxNVUFxY0wzV1lTQ0dtYWVpOTl4cHlITWdhaGoydHR3dDdLTnA5OG5wL0ZQdUI5ZTBDaktRclNIdG9LNWxkV3ZnVUQyTEw0c0djQmNtQTVSUzJFcXpHUTc5L2RWL3UyOHZPM001L2M5Qk0wc1ExQ21tU1ZZamtpYmJiQUpoWUVNQnpzVlc4bTNnd0J3dnJwa3N1a3JPK09Vbzk4QUxDMXhwTWVJVllTTFphWDZWd01lV0o5ODJqNXhaV1ZiUS8xQVV1T2dRdkRVRWhJamZldllBRjBvZ2s2Q3FXTkx1V2Q5cGp4Ui94V25nQUcwaFFaSmpFVEJaNHBMV042RE1heTYvYlo3Y3YvcXlReU5CM1JSbkw5Q0hGY3BUd1F2ZmF0Ky9LaFRwanU2aFUvckM5M0RicjRGelBMQnZhVzVzQnZTMVduaGF5VVQ3VE9sSlhYektHZDZjdlhMWHRzSU9nTm9GRm92Y0V5TW0waDBwc1hiTGlzOFhObzdVRjJWeDZ0V25rY29aMVJacFk4YldwWVJHNnhDNWpndjhhdWVrSzBrWmRaWjEvMzROUGNvc1FSRkN5R1ZSakJkU3JScWZobFNqM05rYVJKYlVUTXRLTGpwS1BGMzRhaWtuN01VbVFHWFM3Q2JrNEZDcEliWVpyTmFKN3F1ZGdFTzY0SHA3S0RoMWNiS1czb2dUSmNWeUZTU2lnc2RvMVp0bGFBUWw4eUtHMVM4THJYaVI3aEZYbjBLSGdhYTN1UHZodGF1Y0ZEYU1Mc2xhTjNGcVNQb0JFSFcwQlB4WTh1dUcyQUw3VUVHbllMOXlqdG5TK0V5RC9jck40b3NSYnNJMkZWdXQ1bFFoN25WSEN6cHFyZmhON0UxMFJybWYrUkhDK216d1BlTWtOVUl3bjlSUThLRkxMTko2K3ZaNEtwSzlsdnQ5L01WNlVFZjk2SE9RRFBjNHI0eGpPVFVwRWtPWkRMSGhlUC85M25sZ2hmOFB3Ry9EUTBoWnBOZnJRaEhaUUZqYjVBNDdHZnVLVTlIOElqUndkRStwckRCMkc0b0FZZTRyL2NlU0NTamxGMHk2R0REVk04bjRJZWxSZENKRFNuK0IyNmxlRE13REVkSjVSMXM0UTJFcVdKaWV1VnpSODJTUUZObkhNMkUvTUtDSXNoL0VwNklZR3FMTm1STEJOOE1JRHpGYk9GTFZXMVZTbnV3TUZyTkZZaHRrdkZCdnQ5VzVjUmJqUHRmSTJjdXhLSnprbExwRnpwTFlITnZjSlA2WlpGMzgxb2lhYmxNOSttVjlzaXZiOWZXZDlmL3doMGVuTlI2Z015LzhiVkQrdHIzbDlPL0FXQmZDS0JDaHFLOGVoWnhzNG9LOFRPYVh6a1lHVTlNMGYzZW1zZUNSL09TZm11dHZsSU4rMkF2UGpNaFRncTdiSUU3THpMQTNMeGdkYVZVcEE2SVY0MkNQMUtlai9RMDJKRS85SnhKUkxodDRPaGJmU2lDaGk4bERSeFJrK1hCMENMeXpaclJzS0NNbnR6bG5Xa2FjOEt5cE51S2gyQUhTaUMvelRRWXV0UmdaUVN2VmpjcGp1OW9RNk5XTzBoUWIvVmZaZTRpd2NYUWRFbEJHSmtWTmNVK2tFWTJwejZrNE96Zm5jNy9UbDhHZHZZdEVJOXMvdk5XVXZ5UDlDem9rL3p3b1hvUDkrTWlScGNpS25HYUQxNFNKNlYzMCs0cy8wUEdRREw1Z0xUdHk5KzhRcnRuR0hjSGxzeU9FeVhndDJKVi90RDI3MnBXSVdPeEwyV2RFcWJVNzNpUTdnWG92VERHcTVRSklIT2Q0MmJKYVNrS05kUmZJV1NuYk5VZkYycDYvVmJUUEdENm9UNUhoa2ZHUTQ5bjJ4MmVwaVVqSmpPNENRZ0grdGtuQUQyK0o2WHRPSExtN0d2WTlqdGtQMmpPOUNYZGdNLzJYSC9mSWVMUzVwQTZiUlJpRXNWMWh1ak50WE0yTjFiZHVUaWpoNUpBVVdaZE5wMnZrcU41RVhLenE3VG5pM2MvWDZ1TWpqbXErVDJvdFNzQnR4Yk91Zkk5MDhwMEhzTXNDV1p2UVpxSnA4RnE1bHBRSDk2ZXdqbWZPbTFKaFBoeVU4VzIzNEQ4NElhZkxqNTFjRVZjOXc4MXl5QitDTUxvVHdBS1BGV3FHSWFKVkFVelpqSTh1UXRFOS9YQlZSK1cvYUVsc0xDV2w0VzRmTW9tdzdkZDFXVDJvWG1Ca1VsMkdkRk9vWXBNc280T3Q0VEhxcDBSS0VXR2RQSUFKaERad2tYUS82d3JDM1hPQUQwdjczeDN3YnZVSGxpM1J0L0Y2WFlNaG0wL0FSdkJmQkF6ekkzdnNLVVMxZmdRYi9OZENjblRrUi9tdEc4MDBYblpUSkl4eU1pTkVUU2lOQWJPMGxoaW4zVU5SZEdXMjFMVmRidWpPU01HL2E1OWFlQW1keExaV3BNRkJoM3h1a0l0Qnh6ckJzOWVnY0Rkblk4bzBvM05OVTBab0NMSStGci9PREZaT0FDb0QvZ2NPak91L1VPamZFaEhqeGdodnlwbnJOL2R2U2FnM0pBa1YvcGQ3ZHRYeWlUK0JjV3lvZC8xdk53SzQxbFF4aXlESWFLbVphYVR4WGdEUk85RTVUZjk2aEpZaG1zWi9WMjRVR0ltYldWMzd3WWhlM0t2UzVFRVpsT0xST3VmWmZGYzlXSVJ0WGNSdU5yOUNkMXpBeHlLRlRQK0VHSm8xdnlwV2RWL1FOcmc2S05QUFcweFEyWURRRnFqREFJY2VXcXE1cEM3STdEMC9mTitNVHE0cXN4WUduczNhWmI5NlR6WUUzL0FSM1hVaDhDNkdUbW0zSHY4cERKUXdRa1BUb3NSNTYrVzd5RmpDaDBOcVhudFl0NFk4QXhoMGFoRTZ3OUZhZ3J2NnVnT1lFQzBNa0U5aERwQ2VpMnBSaTM5MjZVOFFzSjVXR1FuT0V6NzVQOFlaamh4enVUbHAzcWNVcVRDNDJ1TGx6MTBZUEZJSHl5bys2RGhxUndReFMrZWptK1dST1JtN3dxWm1RWXZkZHY3a0xrVVVZYXZ4Rm5kNHk4Vm00ODRmZnZYRU4vZk0rMENtQmdhS2Y4VEhxVjNBUkQ5UUtkaVJHMG5GTzZiZVVNRXM3RFRpZndjZUJ3R1FCZXpuOCtRSHRhcWp2VU9qSXRndG0wTGRVbC80NndHSk1kUDNNL2FMbEhhd0Z2TGhxcDRoNkNibWZoMmRVUDRmTDFsbTdVSzFNaGY3aXJramtRblBXYW84R3l2WndNVGtZclRTTjBxcWxxR0VHMy92UGJEbHRCcXBlVTVZU2NTUzc1M2I3dnNON2svM2tBa3dlczBjS0NVS2NJZkFpYzFqZ0FaZm5OR01IVERjdmI0MGNseEc0eFEzL0phbkJ3MExHQmVDcFpFNTd1OCtadkQ0MGhhRFBBTU9PbFU1Z0pHb2xZUVVnRkJzM1R3ZGNFa2FXb29tRlZQa1hjYU9xUjAybm9OTk9yd2ZnUldRVk96alA1Tk5IclR4RVNzWnpQczZ2MXJNMjFUaCt0SFN3YlRpVUthWm5UaHdxOGhaaWZYUHFLMVlDUU5YMWk4RzJGKzFTVHkrU0o1cHJNbGJHYTZ0enN6U0J3Y1hJL3pKTEVLK2VTVStVbmp1bmtheFpHLzArY05TSWNJVWlXTlhCK2RmYUxPRC9oN242UjByYW4xWTlsRDFGc0labS95WXZqODhkR1RlR09HS1FVRFFuWC9ydWNVUWJuRzJIYmN5aGc0YzduQllSNFdIcUxDa0tWV25aZ3hmUGF2SGY4R1hISXlJaHRweHRDSURhWDNSbjZBbFN2NG1uSjdZL0NvUXFxVWVOMElveWJyQytVYm5jR1NHQm1iNFovYTM5ekJ1ZXAzUzV6amZNWWJaMGNEQ2VWek41QVd2OERZaU5XWXZ2dnpQSzdEVVR2VFJjWGVxVHZmRzh1SUNjUWYwZ0hzcEtER1VYOE5EekVuZElKWm1EYkhHRG82NWNqdlJwRWp4bTdBRnhjaFUzbWFJSGViNkhrVDNGSkMvU013a212TDJxbmhBSmsvelplbFBaTHNRYmZQQStDMDN4blQzWW1SUVFSalhzY2IrV2FzYnZqT0orZXR4UVF4TWFFdlhWQjk4NmRGU3AzTmkwc2x4RjBPUDIvUW0vdDlkQ1BrNkFUNTl5WS9iOUJuZlQ5WmVQazZIWDFYN2grMzZHVDl2cndSOG5RK2ZQdk1EMFRwRm9pdW13QXBVNzViMFpCb2ROenVITk1KNkhEWmt1YmpLd2htRWV0cGYvWGNzTm5adk00UENpaloxaTFOL0pnV3IzVmRuSVhNUk1CVVF5QVN1WGdyVHZINlZacWRMMzdyeUR0LzE3cXVFelY1Wlg4VFM2YzVSanl4cW90UWhLcm96dTVGbEN2QzZYZFhQV3VoR2dWRHlOVW5nMkNtb0tVM0FLN2lOWkhwaXVTaHdSQVRkMU1LQXFBV082TTloM0ppWFNNNXJ2b2tjbG03bmlwTE0wKytxdlVsa1VScGJYNEFnNUpQOU1tZUk2WWU3ak80MFdLaXorN0tDYS9MK2JjblhOMFZWd2hyMUZOL3hscFFiYmJWb3BEUDlvYTVaZmxTeVlnOWVheWZWRDVnQXlib0RLeGovTUVKTC9SaFZidWMwOFg3S0dsWUVod3ZadllhQlZ6T1VpQ3o4cndsQU56b0lGK1lpMG9YQ1RsSnlmNXpqV1BLZjd6ZEo4bm5aTjcxQU5DVEYxOVFyQ3FkdGI3RlFLMGNEaTRYZVozb1FKMU4rY3kzUHdGbllkNEFGRjFpb3lLd1l3MEk0SUZtYVJhQXQxeW1BNlFaemg3NTRjVUlQRnRDOFA2ZXhPa1pNUnowZjdMeVZYdW9OQmxrdHZlMUMwM29iQUl6R2VNM3FBMFZCS1ZMOGRoWjVmQjZNdEFGSDZPenUrK0J0WWFSSzdhQk8rNGdpTVJjVi81VXBURFZzeXFnSkZrdWNCYXZrUXF4QnBXRnR0VDFubytBQlI4NnVpVi9XMFk5R3J0NVVMbUFpMjJZU3VZNXo0bnNicUFZUVB2SElMV3lMeUY2RHkyZ0N5MXVMSENKaGlpSENjcC9WMTV1TjBpZXJ3eno3Z3hsQThOWlFkRnF3anVYdWo5cGlzdjlaalF0Zys3dHJZa3pVeWtkeCtkWHNydE9TWHF1RGNMN0VoMGVxa3ljRmNXT1YvU1FzcnFZZVN6SEY2bFEzMHFCMXZUbUc1Wmw1M0NVVkVUc2l6d2NYSGxoOW8rZUlzMFRJQWhsbzcvaC9TZCs1NHF5d2ZpZnlkSU1SdjB5Y09VSlFLeWJqMGc1WURRb3Z3a0FRRFdBeG9nSk5uTW5BZ2ZzT051THA3cVR4TTNMc0diT205RWhuRnh3WmVpWnBHaWdJbHFOUkxNNHRtQXdFaEp5V3RFaWhMNEFyWEFFOXBWTms1VmhkdUljZExLbktGOXFYdnRML1pibk9mbVJ6dGNFM0I2WlB4bWV4dVNZdmtMS0pmU3BJTzJKaUY0ayt2UWxFV2hsRzZ3dHJTbWZwNEhsR1lveXdWV01oakpLb2p4R3N4c2pObmo2WGpUWDVkY0g5SE9LTTdReDdxMkJ3amVFakU2QXlBYWUwSzRSQUdkZll4cC9JbVMycVA1YUZsbTFvZE9LSHRoU2ZtU1Jqb3dmOC8zY21KRlpZSDMvTVBRTE1ybk9obGJVOTNRaHJ6ekRYNmRkcWxSbWZJNlpQdE9RSkQyR0llM3hPNFhjcDJ3ZmdDNDh0emZrNmg1YkNtUk01c0FTREZ1UVNiSHBmVXNGV1VwY2NRUWVDYi9OWDB6T1h1ZURIZjRaVUFUS0IweWxEcXg4aURMOHJZNCtnWUk3M2VrTnlRUHJnRHBVNEZLYmpMM1o0WVQyV1dHclltbC9SN3BCTEZqcytWNU4vdG9ENk5JclZnMVpzcDNJdm00dklaRzZYOWtwNUc5SWI1d2daclJRbVZRTDcvYlV5WFFCVWNkMmhNU2ZZcXRGY2xtTzcwZmY4SWx4bGw4a3R6c1NEcTR5R0g0ZXZJdjQ3L0pBb0hpWlI1VU9nMjlxK1NzcjdGdkFZMU9ockxnSkc5VzhrRWFRekVheEtWdnNHaXd5TFpzLzhNU2JvUkxTQWNSa28rTVgxTXptamE5ZnowSU5icnRpVHo4RTh0aVRFK0VSa3R0dlRDYk9scjl4Wkw1MHRoYllrOGhza05Md05Majk4VEFMUElSRmQ1WFRmanViZDNvL2xoOHpxSlVGeEVHVzdsTVZwdHEySFFxcGorcGhLOENMSmk2bERmZVpPNmdiRXJmdXRsNW5nWURGZ0E1eTk0TFFoZ2hQVmFTVXpscVdHenFneVFQcVYyakc0bGlFNy9SZWx1R0FON0dUOWxsNXlzd1RDVDBkNzN4NDVId3JWbDRwQUhLb25hazZjNDZ2Qkd4WlppaW5wcndaYm53bStSeXl5TDJSZmhUN2VOR3FrYk03OGRvSDBSMzg4dVVEeUluRTZ6TkluWlUvZGNENTI5RTdxREEzRzhwcEJtek5MSGFhajdlVFRVeTFtdmlhYWxSSFpYbjcwdmFVcDhWU1lmZXQ0UitHR3JaSUNtaTVZYTlHbmkyajFjYkN2cGxzT3hlZDdoRTFZM2l2YWl0ZlZFcm4xL1o1a2VGUytEYTk4VkRPNzdsR2ZQZWhpWWZhemlsb2lDNmlNdmMvQ2VkTUszS04wYklUalBqdmlIUitqSnYxL1ZvNU1iVUhPM1JIZmRnWXhvUUpQMjdQZitQdGYwZDhlVldYdHhYbmY3N01Ubmw3Nm93cnUxOEFPYitaQWN2eGZ6NWFCQWQ0VHhqMjVoVVgxbFFXT2g4cklSdlRCaXpPeTFDVU1mUkk0eExpeG5NL2VQZUpPRUlVQUFyZ3ZmbnlSaFA1a2NNMWJ6NU5aZnkrdzdTRDZVV21LcG9xZ1dBUWdvV3pSZzF1VGlOWWRaeUVhdFhQZTBORTQ4c2xweDJLZW9iSGZmakNKOTBuTWZ1NVliVkZic3BVemlsY2RhNlZZcE5QQTJYcC9IL0t2SUQ2UkplaVNEQi9iU05xT0dVeWZvWDFHVU9DNnFWMTNya3JmSWx2RUIyTzJwbDczbW9vSkZHYjRjbnN2ckRwZ0xNMzJKYlNsSkxVQlFWa2dhbURDdXZneGgrZFFSM080d0c3MkdiWUxlM2VKWS8xSzlUWGU0L05UM2h1Q1ZhUG1ZOVJhV213NzZpUFhRbkJEOHlXSDhLSTh1SzMwd2Nxa2tEaVhaQnZZYzJIZWtHSEFaSUxQbWZ2eml1UjVjZzZWNmw0ZGl5MkJBMXZVdFp5R1B5eTB6QWVqMjdoWFVNeG5jS3hRYXZyK0ZBSVVzSDNOalY1WUZGc3BZTFhXSDdhL2YxclhyYkEvRWUyc3dnVnBsaGFkeVFoQ09PMEJKN3E4T0hoc01NWXJhVjNpRFdmNWthSWZteFZ3UUpQOXVCKzJFQXg2TUlEbFZUdGhiZk5KRlJBWmgwVVdwOUk1M0U2Q3dwcXoyay8zK2tHUHh5YVhKV2hjbU5IamNMU2t2SVFGbmlhVkUvWlZOcFdGS1JBSXQrZlBGMWU3YVJyQzdlaGUwT2lkQ2ZjWEt3U3NPTGhsOUl1VnNTQlBJVFRQQzdkZDNIaFpLai95ZEhmby9USjJoSlp4VGt2blJSMTJEbmtVUURMRE94ZUtsajVNMVVWQWpPbGF3SUVqMGRmUlhEZXR1dlBvSlVBY0JCRXhPMTh3VUdJaUg2Y091V1FCZDVNSkFDbzN3cG9qZzdsL0JrTGNWUGtJVGoyZjJHZU05c1I5QkdtQUI4SnJIT0xIVXRRZkVmRnBHaVNkQ3VKb0lETTVlSE94cFhVYUI3MFF6bDU3VHJab2JYTnZ1OGsrOEdXOFE0U1hTNklGa0t4UnpSZkZzS05mbUdWZVRYSWdEZ25DL1lSYVNIQW5wZ0hURWdjb3MxL1Jxck5BUG4veXhDYU9mOXFYakluOGNlZHU0Umd5Tmx1Nkd2enNoMllaZUkwWmk2bDZIVXNJN0JwYW4yZ0t2SmFNYnRIS0pwamtzYk0za2xyUzJ2ZHFhdUgvaHB6dGhQTnFpaU91SXdmUUVqTDZheW5EMDRLOWdDWnlqK2RrMk4wN3FOVGFneml1UkhkWHVFS3dyOHRoRUhOUlNmTTZZM2Y4R09PeXNoMzZhUjQvdVdoTzFSTUt4RCtKcDVIdFREVnZzRHNDZGRCSlZZWE5RekpGVGVzdG80S0xQRGRQUVRZUW1UaFcrN3Z6b29UNStPWlJVRmhtM2U1TjJRN01taHh4WUkzNTdiUUFmRzErUFFhbGVXbitSbmE5MUxSWEkrMExiRlUxTzEwODRhdEJJS0t5STZja0ZUVlRLZisvVGx5TXhxL290ZVMrZGtGVHkvMGhHZVJHc0xYYUpSTGpNb29XOC80MXZmT0xFQ1ErUGNhenlpWnhWTzRFQVprUklaUUthU2syUnJLaG5NS0ZNK1UySks4R0tOWVhtczVidVFidmdCbnRTcytYZlhNMWZMeENhVG5YQnYyYVBvaTlwQ21KTGswZzlDUE9YQ3JmYXB3NFQxUEtzZTZBelZrSXI0aEI5THdkU1pWbFdMdEQ4ZHJuM1ZsSHNJeTB3dk9WOHhVamZrOTlxK1JqVWtNa1RiaVZTNVRuVTZNVlhPUEVCeVZCM29WbW9GdHBUMDJWbVdOQlNGbit3aGxnMHFkSnU5QTF3cWZ3VHovRG5acmZEN0xNdEo0M0RzQlJHOXppN0ZoTVJtVjNJdEluSm9NYzcxc1c1ZGx3S3BTZlJ0VlBhWThsdjJPV0xNdS9yTmVGN3lybVM4KzZZZnUvWXZjcHplVUJnb2xaL0hSTi9UdnVXdWJuQys4cGdITEpiR0pBcURwOHVWOWNlMXVwRHR4UVVoUmdCRW4vcmMvNXI1ZEZEaUdBMzdwSEd2T0ZXbk9NazRPMG4yaXlIVnZGRTBjdzJGQXdZUEpGQ2ZnQXRzb1hpdUcyZ3lkNDcxRS84YWVMazJlN1NxcVVRNGc0ZUxHQ2ZmN285RWRwWk52cUJrQmV6N2R0bWo4aC9MNzYvdS9ZQktYNUhaZ05GOWM1cGxYNUJBUkhSUk9GVTQwaTA5RXZpMVhUaXNsWEpwb1h1TnNpK0pxWWVFZTZhNjUxNFNxZFBoTjRFQ0tLY21yRTl0UytTVnlFampNYTVWbmRPYWp2d0o2RSt1b0FqZ2FCejVocWFHbFJ2SnlsODhWMjhIdy9lYVJPWk1GejB3UWt0RFZra2NZdXd6cHpWdDlESGZVeDZmZXBzUkJvNTYrajhET3g1a1lrbHhvY05hWFlSRjVucUVpcUMwYXA5U0RKSXdlNElneWo3TGJFandhMy9lQldZSDNVN1VkcXFMMnM5dFN3eFRoSXVJTzhjTElQZEFuM3BBNEt6TFdDZTcxbEhDVjRGSXVFR2I3aExXcmpQWGdONCtKRmJ2Rk1wUTFmc2ZuWlVnYjcxSEhnaVVvUW8yOXR5WTcxeFFsZ1Brc2dNeFZsV1RjbjREUzZOQVQzK3RlV2laVEVZRllIU1l1em1lVFZLaHBSbFJnUUpKS3NyaGhlSEZUTXRaemZCbVE0dVNYVmhMbG5VUlJWSW1XeHdzWVlpZW1YSE1DbkV5UE8xcEtCbmRZV2c1UU9qMjBuc1o4SHRuVEx4Y1N0SkZPQnM4M0prb2dmUm13SWlZZElmTkFQNWp3RVZ1ZUorVkpiaTlXam1CQWgrLzJNNkZNT0J5aW83N2VYTFdzNFZReWRjZXYyR1dYWlduWVJsWEhLaHZlMjM0QlJDQ1JZL0MzYmdWWFNiL2VaSUxiQk1NTTFBeHduQjl4bzYxZERjRExNRCs4NnZrbXI0T1pnVXIvOThlQUFOdkU3Vy9oTHBrblRoSWprRDNDb3BVdWV6V0tHcWduaXpSQ21SbEZsZXE5NTlza0ROWG04Y2t0Sk1DTlBtemJCWGczVUplNm11QXFHRTZjWXpjWFREVlYydnAxRzZsQ0lnK012WllrdmFlR0pIV3RYWFI3V2dFMUFzbWZFRCtNUXJTQzZzZTVPc2hGRmlBU0l3cXhGdE43VHNkSmFWU2ptcXZXUUdSSWZjd1A1cFJqQnhBSWZ4aGZTbnorSGdhbWF1WDVrM3VrSHZSdTVORU5Fcjh0czVWSjhuRElCTWFxdDBlWXFMemU5MThOZkc2SkYyZzRDZzdNZnhleDdSL2h1bEEwWjN0V1UrbUM1ZzZNMzdsWEhxTmNKVys2TzloalBLck1FTU1NeWRyM1I0RnZueGNGUlJyNXpGZmNrK2hKaFY1SXVScFJOVEdORHMrL0FmK2REaXBVR25aejY0MGZmQ2xGYVBwZVFaMmh1UmJoRDMxZTJhQkZ1NDRBRzYwZnAwMXV2Wk5FakhtZHg5dmViWjhBb040ZDdVKzVGQzVVWDhXWm9zVmo1b3ZuaythcUpmei9RTjFoc2NVUjFuLzJHOHhZa0VaeUN0dnBIbkFlb3NYVmhDUXUyWFpHVDBKa2Z5Q0pyMXh5OCtVTGFVRVRCQVFIU0M2d21QRHEyV1RLaHhrYUVCUEdxWTN0WEI2cFVtWlI4RkFOSy9RYnNsSG5vTjFjM1NCSXI4aTZyVm83dldxZUZRNzM3NjQ4WkpadTNOSndORWFoSTdtRjBJL0JBcFBranh2czFMQ2NFd3RkWEFFbjdjdk54bExROW5rS3lpRjE1WU1vbDVCbTg3eFJaY2ZlaSsydGJrVEtJZ2xNdUlMb0RwUVpxNWVqekFBd0ttQXhSV0dsSG83WWhwT3FORDBHOFR5OEVqczRkTEdscmxBUUQ0NWZjUnJoUWs5N0ZqU2tHQ0dqVy9yZnpJWTd0QURnNjRXSlBzSm9GRFQvSVc3eUlHTzN5Y1VNSzVTL3hoa0pJbk9UYXQxUnM5NVVCaHRxQU1rdlV5S3Z0RE9oUmY4NUI3TkJla3lYN2lEWDFMdk9KV0xiSGtlcXFvNG5zQ0M2WjhITE9TdUppOHpCaXVwTXZLWkMwZWpXeEwvV2kzeUplQkMyVFZkMmRJQTlUOW90Z2d3TWNVNjROTHJxUnp1WFRGdXR3UlB3azhmM0xJUmo2T3I1djYralgzTlRhSC9mckxGU0NIUGlBMGhFc3g4dGYxNTJYejFwUW5ER1hWUnRvZ3dER09aYy8waUEzOWJBNnA4aXFNeEloaTcwaUhuTG5zdURPMStETno4WC9pb3ZxRTc2c2xQMS9VWHd4My9rVDlOOWtibEhhcm5QcmhJazZSbEdtdTYxd01kSlNBenQ3WWRGaDU4YkZZZkg4eGF5V0xZUlFpQk5SUFlJMFQyOEUrN3dlLzZPR28xRExhQ2J4cHRWNlhIcWJaK3ZmaDRxL0hES1FLa2t0U3B1bGxrbmdDclpJWkg3akFnOENUUUpYMGtIanhXR0RnRDRCM1lrZjhxWGREbWdaWmYvUldhUS9INDlFcEk1OURxMkJyZ01lUjdpSDNKdExVb1FGRmdldnhDRkgxeUcwTCs0SWVPRENpUk1GamhlQnZtZHZwSXNZNnZ5ZWdUWVhNVEpxTWU0QWIxNEcvYTAzQUIvTUlJWWl0UWM5ajVWTGxLUlc0SkMxWWpQc29idVNqVUQ2ZVBZY3NVK2pZZXdkQTVkZmxjd2VpdmtHOFUyM2hhN1paaGNOSmE3K2dHODFSTjRYeDNlQ3NQcmpHdEJXOHMwNWZSSStYbFplWVREellGUXJkT1cwd1hISzNTNXpQTjRjVUhjZmx2N0h5ZGlaTW8rTTlUK05IMC9ZVHJQUUhiRVV4cFBlM2JQU2h1TGZGMWdURlMwcGk0QXg0QThHWVFFeDRiSUdkTzNCcDBFWmRYNFpUajVxOGx5YUk4eXo5NWsrbW55LzhNYUlpV29PbFdiRHBMT3lmZEhnTG9HUWI1dTFmS1VZME5CNC9YK2N5TnNBeTY5OENiMjJDL0ZvYUZyOTg4bll3b2xTcXkvT3VHSzZrcThnbnVRWEZ2RDBSRWZYWWZSQ0QrN1N0UTJDR1QxQzBHdjFMVml4eUd1aElKZmNvTTNKNUM4SVkyL1ZkNGRJMGtqTlgxS25Lbi9BR0liVVlPTHVlak95TzdkanhWU0YwRTdKQjkzVURXSXdrTUZ6amM5N0JteUpwczlaRmJ6MmFROC9oMG8wYUJ2NTF6TEh1WmVCZUdYQXdIcEh6OW9reDNXRm1VN1JoelJadVNJUWxYR1hjajVJcER2MVRDazluc29USkl6QnlSNnhidXJURW9DZEpudG1idkEzL1FxVGhicWhaL3hXL3JZNnhFWkNFNnZRL0pGeVN3SmlFZUU0VTdyUFFrNFo4U2ZtdzdGOE5mL2c2SlZ2WlRmTW4vY21SZTBwNnRVL3c0Mk5ZMURhaDdjN2RWQTZpSHRkWk9BbXF4T2tBYUJabVNSVi91bU5HTVlld3V0NXBta212QkNzMjhHRzMrL2FwQ3NUaDVXUVdOelozUzM4SG05bnhFd0M2anFKUkVsUy8vQTNEUHF1enhHSmRMcmFidHF2b1F2cFJYMlIwNlZKSHplMlZSVzJnNzJhRDYwcU9GcXVTZ1F1cG1sL3FiUU1kSkUvSEx3RXlpZjlZSHpYako4c0grT3VkeDFYajlsMGNLV2ZFNE43SFlPSFQ5V0dXbHI1aEp0alVXUHN4L3dRcnFyc2w3LzRKQUpMaWdsb3llUFhleUlXTVNCUnZGVkpnU0NnOHNZd2krbzNoR0hZTFpKMDZ5OXJkRFB2MVNjYWZhVHlQUGFnTnJybmJ4aURSazR2TjlTRmorNjNBMkx1TmJ2R1VyTUNRQk40QzVUSGlLTGVYaDNhUzhhbHFTTlFKRzJQSTB2U25FcDIvcEFvTU1CVkpaRTRBYldpZ3BjcnpQVEpUVHhpREVlTGE3QVozWXQydEI4aHMvMlAyTDJDZkdEaWJKUnV6WEZUbFpEUmxQT3FqTTB6OWtXeWZxT1VTeFhlYUNZUW9zMlV0TEFTc05hWDRKMW1hcFBKR1RlNlZzcFRBbVVpTytOTFRBcTdzWmJmYjNMWTZBZGtkek55UWo2QzdKR0JXV1k0TmhyOXJTVFlHZURkWU1vQWpqQVdmVXM2Z0ZmTHVnUnJtYnhua2RESVM4V0svSzZWandWVGZjaERpdHRLdlBkdXVWN2VUZS9JZllORlYwQXV5NW5vSytjeFQyV2VRaEpVV0ZOWS9mUXZyZjluUWRSQjVuZUsvb3ZNbTR4TmI5cXNpN3FvMDN0a0J3cmQ5WGN3VkZmYmo1S08rUC8xU29vL3JwdjdLYkJLcTFOZmQ4aHNqYkZrY1hPZ3FRTkwvSElFdno5NzNQWTZZaGxHd1hoa3M4TWdNRXZNWGpySWVxN1FYaFkrbXlGNTE5K0dZVlpTZVUxL09yckpYaXdlbnRnenVKcEF3Y04zQnZPbGl4TUxObEJaNEYwUmU0OWt1SGUwSmFEVVFpdm9KWEJXVTc2RHVmNU9nREZDakNwdTd2dm9XdHZ6YUpORWhyckcrajFGYnRKSlJ0WGJnOVNEbHVadXNEM3pPWFNEU3J3MnEzdTNMc3JCRGwrSkdSb0RzU05oZEFmeVpuZXZYYTFuYzg4SVNMeHRGOE54SzVyT1gwTnJGTnNHVVBVVldodzNQQjRmdk5hN0x4OHh1eWVuVCtFbGFyMEZ3VFJaNEJHc1M2NFV5SzZ3aE9rTTdja2lxS3o1eG9VNUMvdjkwZzdnRWIvbkhrVEdWU2JZSjNMYjVWdUY5cklGY21NRHN0dVF5TGh0TFNaaGxIY3NlUTZlaENpM3pXMHIwVjUvMnZkVG81NHBDMmNDYVVINk5GZUFWc0dTZW52RkxaOE5TemRUdkE2TTNwalVWTWU4dlVVbTBqMFpoV3ZHak82RjhkSktNRVk0QlVXM3pqV2Y4ekloNWdRUXJiUVJNdDg1YmN6cXZ4QUh3L3B0dFRUYVlYRG9VQzRkL0dMZWdkY0ZaSXE5VzhqK1lsSmN6UlZQOEFZVTNBd0pHOEFYV0Z2MUE2bHNyeDFhc1pYZk5BV01EUmdES25Fd0tWMzIrdjFKVGVmbS95b096YlJKWkVWbDlrZ000T2M1UGM1bE54VmdkQ3VXUjFRaG12QjBaV0xmMEZFODUvT1NxVG5rY2laeW1EcFlYVHYzNElEMExmSXdPaHBUL1lISjZmWjdQMExaVTlqbGdKdlVJNXRaYzFmbU9TMVZ1amhNeU84R2F3SnYrQU5pME1oK1g0ZUVDU1hnNzRSZDFHWTM4dEV1SlZNSzhhbWUrc0NPVDgwTisveDB4cncwdmwxdk1oZElPNGRac2FRc1ZtVWxjQ3I5VVVIZTcySllDVW9rWWZmdXdZUndSVkJxVnpCbWJhOTROTU53TER3OVRiM1loczN3QXRGLzQ5U3FjMXdzQ3ptNDIxd0dLT0pTSEZ0MnRSV3dXeDk4dDc3V3FWY0NHTG43c3VoQzNZeWtxSURITEh0NEoxZ1pOYm1BeTRKYk01QS9TbWoreEZ5MGNmZVlZVWNxT3pFbXRIUDUrdW90cmVNdTJwd1pRWU11QmEvcDF2bjAwYnhlanVhYTYxeE1KNW1tQy9aQ1Fyc3p5QjcxcDVUMWNTUzRHUTdmMXVqcmUveUhDdXB5MnYxNDZuRFptSldCSTEycHhZNmw0cDhMUVZ6Q1pmS2lHWkhsQ2pxN2FaRUczZ2xxcEVFZWh5Wmh5azhuVDlXTzdSc0c5bkVPWGVucTY5TldQZzUwZ2pCMVFhQjdQT2JSUmxvZDVCcGQ5anRqSTUzSDlzOHFqaEF5L3lvMGZXWkVtVWlJbVBWZTRZcDE3d0szWG52U2lmVC9nU1NNcWNkR3RPeUdNYkthSTA0WGpJMVAzVlU1cFdib2pBVjV5M25Va1FvcTZFRVh6bXA3c3BXWVlkNXFzcDBjSVJwaTRENzdFdFViNzAzczJkaDg2MzZwaU5sYjUzRmdCSWJGZFZ5a1hOQTRNN09sQWdkZWRuQlZGZzZxaC9rem5PU1I1MWFlbE5vbTZVdXRSQ0w4VU16MTFXTFNVV2hqdGx4bEdSb0s5ZHMrVEFUVE0wc2FUak5VOXJDeXdxQksvWmNIRzhiZEpwUEdhQXYzYy9XbjdkdTUrN2p6VlQ3c3lxMHE2dW9TMUxGWjRPNjFKRDFJZjFraC9uekdwcW4rVVhWYlZFTlZMUVllMGRvMXZBYVBabmVZa2wxUW5MMmk3WHl6RkxWQUhZcnYvSkRBUFFLYnRqbWdsdG9Kd3c5QW1vSHdjeGc0U2dHemJaNlEvZm5Ud3Z1UGszcHdoTHNkb2EvSENGbUMwQlNoK25mOHd5OXppUGJvRWRiajdCZTVQblNIQU5NaHRiNHdFSm1RUUw1QTdwTThtZ1J4NjROM0RzSlFlcURVZlNrOExiZFY4dEMvZmlHTFdWclZDN1EvQUp2WkhoSnZiNHZRa3FyM3lUVjlIeFU1K3pJZGt6eW9CbHNkZ1FLNUh2ZXl0YmFsOSt6VUs3aVMxS1AzeDBiSHJTaDh5TXFYdjRtSWxFQ04rSGNlK1FoZFo0QlQ1MlEvamUwZHc0NlRCa3dkU2Z6S3o0QVNya1lFN1ovYXR5RWEyaTlXeVJkSmI5dllab1R0d3BsRnFCNWxnZGpLOEZhZE5ySzA3cWNad3ZkUjhjMnAzWDJEWjEvRXRtSEE3ai94dFd2RmRzQXM2L01vWTZleDlGbFd4U2FnRWM1WTVGYm1aQ1IybmhGa2NlQ2w1N0txWXF6L3BDaHdpYTd1amM5WFBlY0FmemM3cC9nYVpLeGZlV0xPYmdXdHJJT1QrZnc4MEpXaTVDVFd1Zk84SkFKWU0yb2t0RDN1d0Y3RHB5Q0JOU01Ed2JCN2dWUUpOamxyUFZ0MENyaS9USFdZSUdoczFTUEhjaEhkOEhyRWYzSDczYWFVRElSeURqcjVvNC9Vc3pWbWppUWZhTk4vK1pkbVExbHJVelh5M2VocmdHTzJiWmFXZUw0UTgyaHh2anRFRFZiL2c0djdHdC8wUlZ6aW5kU1FTRUNNUjFYSkppbGRXVXlKMjFZaVJ3LzdBV0ZwOTJ4THU4Z2ZuNG5ZQVFFc3A3TGJVeG0rdUczNjMrY1d3OXVydW00QzFWWHlDTVdVRTloS1hPODcrQnpZRWdJbXlydVhoYjBXK2htYmIvdjlabFlnUXI5MXc2U2ZNdVJoN3c4Z3QvVFVTRElZKzhFVE43RDg0ekNsbkdIaEhucXZSc3lKaFdPbG9lR0ZxR0IreUg3NnRpclJtUTdmbFZLYXp3R2xzbWNZVFJrMkV0SWx4QTRNQng1MnJGQzNJUHFrWWhOZTJ0a0J1VmZYTllURU1JcS9UZWRVay9QUlNpcWZ1T1dBM3ZyV1dEeWtTaGlsVnNXM2thclZYYUgxV1Y4K2U2c2FRd2Y4SUpycVowMWMrQTd2VVNJRGY5NjFRUUlRcEtYMUdJOE91dmtNeUkrUzJFN2RGV3FJWVVJUkw2aDVjTUtEL2JLSEhpYUxGUFV0S3U5RGo1ZmZXT3A4NGNBaVgrRzBneW91Ym1JSHpaTE9PWStkWE1GVklHdm92VEJTaWtFTXhDSlhZQ2ZqVGVIRnlCckFsRjUvVkE2dUlwS3V0SGlZSjBqRE9YQjB3TkJ5c3NFNmJZZXZUN0JKZHFyRndCV0EvTjVXS1BlVk5pdXZ0cTdzTG1OQ2c4aUF6amtXZUk2R0hOZ3BnSzY4Ym43eWRFa3dqU2U0SkpCdDBiRGc2STk0cUR1Q25PYmVsMndQbVlCQnlEY2c2Z1dhWEhwUnlVRHNjbitpV1FRb2lmZTlOa3B2bUhrbjBUZ21QUStVZFV0T3J6UEx5MDJkTThUMEZodU9aQlQwb0xGTkxTMUQ1YlJZYlExWEdZOVdDRHI1bkU0a1hDV3FFWWd0a2xDa0NmQnc5dWxLNWk3ZzhXU2VUcUlYRy9XazlHNlpiRWtGdVZxYjFaeW9zOXlvM0l1ZlRxRG9YMk0rNWlpaEhyTWFpYVpCdWJKUFlIdWFONjBYd0wxcUV0aElrOW45S295UDVNMWtzZWJOdnd3ZHZ3enlUYW92Z0hJNzZpSks2OEpjaFBrMDB4a3hjOENWUE1Feks4Wm5sT05CUmlJQ3dMMG9wcUJsVEJ3aFoyOVFYTWdNNTh5NnVRYkp6OHNENERMVUhwWFNBbWU1NGJwQ1hCSmlUZldsb2srNE9FejJTWndDQnIvN0JGU3p6U3pXNThuQTBNRUwwbVZxQk0wRTVWUUxJRDFoUGZOUHRQSEpKM0RBN3RSZVhYWFlqdk9uR2ZMQ29RWWk2elo3TmNSTUx3c2IrZGc4c2ltdUNjZHY2eUFzUkZkL2h2ZW1mK2N4N0xISEhOTFJyMXpLZXNXaUFPQmxFQjhIbXVsWFk0RDJWOXBGVVgrY0pwbE12aHBFbkZIMUdubUZ2WGRaR2NXQzE2dGk2NzVPQVV4VzA3RnByUEJmMzJscE16WjRra0JzeEUxU1dTQ0IxVUFJT0xINDVTOWZNUkV2MzFjRUdlK0NkTi9sNEdMMUdRTDZsNFdvVTdoaTc3WEcvZUN0R1hWT0daNUJwNE9zdmpMTnN2ZFBHQjRJOCtrYWw3WmsvSUtSTm9hVk5wc2hBbzhzVDVQdmlQSnNiL0pmRGVyVHZMN0p4bWtQa2ZyNWxHdS95OUwwK0xjVUZsQW4xYUFWRmpSdC9BT01JcDBTSFN4bFJ0T0g4Mjlsb0Mwb3B1dysrS0VtSzEzYVM1NEttTWp1Vy9SQ01uSTB0dUsvVWd4R0JFcnlnS09VNlUyWlhERXg3eStwa3daOEgwMXZGemhXbjcxRU5VK0h6V3g2TnJSaVVWZDVoYi9Db2x0R0dFK0Z3S3VQbjFSOXJXYXVYcmxsSzVyaTFpekV1NUdLdWZIcmNoM011aUdBYXRGeGEvMVlTanNzZzVoTmlxaml4bEtHb0FGczRIVFhvTEw1MDZlUnEvVE5POXJyZDBBazlQQTFNVjlJQ0F0R1gvMW9pNll1TUlRa2o5ZTA3MUhCWlhFZWJISGRlZk5weHJOVjBYQ2pXSnh4ZWZmNjlvMEM4ckk4TFk2WndiRlFhV1p2b1B4alRQRWVzZmU0OTFNMlZGRjA1NUw1WVovcnB1emQyZ1RudURjOE9kRHNsTG1nUmFla2FwWWxuT0VkVE9XcVI4dlZ3WHJOZVRYNS9oQVlEMFJuNUx1M1llL1hWQkVoYVpoMGtrQ0QzWEhxalBVSXJ0UytPanZJcEsyYStRNE9sWG0vN0crWENzZTVycGY5UHJCbnhTQnprd3J6SmJEeTNpLzFJRTdSTEkyTmVBbEd6S1FqbXFlQmthM0I5TEFJUzJMdFYwU1pxRlp3MjJoQVBLWEp0TUI4N05lOEhTc2dHbUF2dnc1U216UEk3MDRkMVdQY1c4WWRLZkQ3aVc0cEVWbUh2WGJ5allxMW9uRFhTbXNPUGR6WTh3S1BaNjl1emtidVIweDdlYldTRnJxNEU2WWR6ZTF2c3lMSi8ycVBRZ1NIblY4UVRRd0tWSksydUxQNm9SKzNLT2VBRlcwNWVMalI4WldLSnpWRzhzcmV4S1VPZSt6bVVDdVc0Y092Unh0eFgycDhkNXc4MENmV3NwY2NtWDNyRldSTWR3VFNBMmlYcXFsM083UXV4R0plVUNwMzdEaHUzZjIxL2FxQVZIeHdHNnJ3MnlUUmtvWGc3Z0NGMGtJYnRaL2V2dkJGd0ZFaGd2YjJJejVKWXdsTWRJTnI0VUNGS2NNcnBxc3I3am9leEUrU1I4TjlrK3l3WjRvSCtEdnNmMko0ZTE4cmNzTWdxOE5IcnkxdVdySmREWGgxUktLSEpRWTdSRzZMWXl6N0JYeG1NbzI5dDVtNWdyOVNQcm1IbGZDM245Y1lqaWQ2QmFScTNXQmdHSWlzOEpOTEZPbk1HaUFmN0p3ckxSc1I3eG5pc1FlVStGYTJWSzJIWERKMGxrOEpNQ2FLUE9FNVRUcWtCbkRpTjlWOGhnanp3RmlqTjQvUU83ZFVaNlYvSkR2QWRmc1NNY3paMyttZEl6NDRFMlRLQzBsVGNTWUpZTTR1THBFNFNVcXhDV254SFQ3Y3h0WWo2amJCVlprK1NUMXFiYUY2WXlPRmJzdWY3c2hiOGs0NkVWZUpid3JyUUg0azZ5K1RJTEZqbHZIMVRGME5pU00vL1RFVWMyR3B1cDY1aExhSVNpeTBnRFhMb256SExaNk1uelBlcDd1UklBeDFTTHBvb0xDaEk0b1F4cTBjdFBTcndNRzVRYjBZQldYSzRXc3VjVmhqRzY1bWtmKzA5bGI1ODM2M3RENzhxNjg3OEtrUytycUhSaWMyRGRET0ZOMUdFYk9vOFdTVDhhWU5kWmFkaHJjNWtTOXFQd1BpWXphckplWmRycWx6bEV5TE91dVpUeCtEcTkrZFkvRUROL2dtZjdqU1VqM29NZnkxQkpRTFRxL3JHMDVKL20xT3JURHcyVDdoTGlsZUx0QVJPL3hhTk4xZ2VvM2owb0djRUhZNmo4bnZwMlh3ZjhkeitxUkdJUWNJNlp1YTRBMGpnK3Juc2JDSVg2MEJML2FOeVh0S0tvTUl6b3dVNFlyczRlWFNlV3VhSjE0eXFLM1FLL3h6dDVha1lVZmZrM3ZNRjNYZ1NteEcvZ3RFUk05YVJ4S05TNjZSblNJM2ZuYWFNUFZoR0J1Y0s2dTRrTG9tOXl2TnhNUVJJdy9IVGF3Vmt3NDRxTGhROTQyaDUveFRWQUw0dXVKdkV4ZjhXRTZQeWd2d3E4WFVVUnptaEp2UGY0MCsvY2JOOG1nY2M4aFJ0L3lJU3ltckhleWwxV01sM0IzcXZSbHQwb0dvL2tvdFRzaVQrRGhvR21FVnZVQW81anhobEhmYWFidlNzRWlWQkNScVVFN015QTZMN3dFNHhnT0haNFp1N28zQndzdWIwNFBXVFM0MmNScGR4d1VuWWd5K3o0Q053ZGVGNmpUcmpGMXpuQi8zRVIrdU93d01yQkcrVVF6Q29oUmw3bDZmcVQyTzVmRlBXTXhVdzV4SzZIT0hxMEdFc245c0FFa1JzVkpVWXRZYTI4VWEzcjhYdHBOcFd6bTY5ZGY1aEdvUWZ5QXZCanlUVjlBTzN0dUNKYlUzcWNiMC8rU2t2bTdpb0U2TkhVTmNYd0hmVFRiU0JWZHArM0RpdWNzVE56cGxScks2WHBmSEM4Qml1NHRaK3dHSHdOZXdScUxORkJUZHR0bC9LVkpoSUVJeEJhcFgxTnFOMU4yNHVvbG1HYmVIN09LOEpwMi82OWVDWDJtNGhVemZTK3RtZnJhUTF3ZEJKSm83VUtPU1piQ0FIcG9Qdnk1Y09oa1VKUFM1K21MVzBxNlJSTXRqRkRQbE84cktFRGpwUUtRbktkQ3dKRVViS21qcVUvaTZPM0I5eDZGUTJjQXYwRitwRnQ3aHRYV0gxcFVhNStXc0lsRzYrY0w0K0lJbzhJNFUwN1I2S25WajhyeVBUejNJMlJ0anB0Tk5LNjRuUHVMUEdjZnpGU1pzUHEyRHdnR0M1SUNJU1d6aVczSllHYVVLSHJ1eldFbFp2MSs3Rm1WOXN0N0tHZzlNRmR6YXRFS2NnSUJsdHBwenhGcVFaY3VjSjBhbHNvNjVlbWo2eXVUQXJZQ2VDQjBBcGt5d0diOG5VdkNFNUFjSEdVZWZvSFMzcHBNZnVHYXhIejlUNGVhZWlMVXFWRjdKZ0FGSU5SamRJU21ZWWdDSUUzeGM1WCtyN1I3aStsNjhLZ1pudk1YY3hsZ0ROWWdPUUEwUHEyejBOT1U1ZGlWUVJXdGtRbUV2OWVQbi9COFZ6SUw3cGdQSmtuQlkxVTJsNWNtVHlGNDRyY21UU1dLVGNUNGxUc2tnd25aeTRVMFFQSmZHdjl1REhzdVVqcHVwM0lRd0JWeEQxY3pucWJ0NWhEbXk0MXJ3WXRtanJjTE1wcEhYKy9WZlpJUGxyY3k4bEFZaW14RzNON0J0cCtBcnQ1WkhKWTUrcmZJZmRuajlJT3NBRGlJbUdud1QvR0FKQ2xYQk4wd0M2ZnVjYnlQN3BQUnNRcFpZYXZ5SnY5OGFPRDU1RElqSXZSbVlVdU9MSHlDZU8yMVJLOFB4cVB5YlhJZ3NqMld3R1M4NUpPZXpTWlVCUVRhVC9RTXcweWhTMjVvbTJkcEtRb0J0TCt6MmJQdXVzTHAyaFU1Z3g2ZUhUN0g5c1JjWEErT2Y5OUc0M2x6WGZ0c05weVlYcTNzYVFxWkw2dUtqdko4SVp0M1VKV1B5R3ZXWEc3SWJGbUFVSmlkOFc5R0RBNlJMajZRWUd2anp3ZHdKTEo3bUZsOFhjUXdPSDFpNHFJSEx2RSsxWEpUNEEvd04rUGVEb1RtMzJsVmE0d09aNHVrL2E4Rzl1bDVsSkd6UnlQQkJxWmg2Zmc4NjY4dXJ6VzRGekNoSFFhaUtnWlFoZGNvRFdWUnZSRWpHVE9wamdlQ2UzVlcxMVYzSEdEeDdhc3NnS05qalpFME51NlJKa2RLNzViZ1FKRXZONTVkZWhsem9hQzBSRnhjR0xQc0pOR0VuRnBRUW85cVROS2RCYjZFWkxxZjY4NXdhbFMzak9iLzVNS1RDYnhkV1FDd0JhM0ZUQ0NhbXpNK2Y3RUNYRXlTWFIrZkQrS3BaNS9sMDc3Tk5EVXd3Y094Nnl3UmRCQWwzZ1RINUNUeXQ0YXhsRStvOGVNb3pyeVNZcTZ1dVQ5MFNJd1NwcGJyc2l6Q255V2ZCSSs5OXBhUzR4SG5ESXVFR1lHUHFPNmIxRWlULzErekhMUFoyVktHQWxUWFdQOWVFMDE5anNpbmV0ZHV1bnE3RW0velhjMVV2NWk0czVrZVRiZDREaUVUTW5DRkpyTUs3QUQ2RnJHZjhMVmtpZk5JQU9oVzVVTTMwdU41cE1XcStqMDZGTHlWZlZCckZPNmZXY0RkemFJSFgyZVU2Z0JYNFY3WW1za1Irc1hxK3k1ZmdvNjZtL2ZaUFpIQWxOUXZrNFlzNXBueHBLbFFxOFVsbXA5SE15dndHZVdETTQwK2hxMEF2Mm5YMTJFRkFEOHRsSTBPQTB2N1lpUkZ6R3I0ZUtoaklRVUx5dEF6NnVVbzFzYTVXeUFJeFJyNWs0Qlh2NXZRcHkyRUtQUVdzKzZCeXNVd0F6VVJhdk9PNk55Q2x1RmVYSG0zeUpKc0dvQzRUWWRUL2JKOWh4aVlybmMvRTB3RXN5bFlWS1grQ015ZDlWNjMxTlNERlh5SnlpTzVrRkRoSCtWOTd5QUd4c2Q1ZTYzRnU1aWIwc3lla1I3VkhGTVZjc1U2MkxPd2ZEakh5YVVneDRyOE85dVg5cVcxZ3hic1R5WVNNdzduWW5neEpaV1ZKVjJoL2lrZUpCTjB5Zk9TTENoNzlKeHp6a3c1OVArOEFrSy80U2NMeVVPZEMvc25Jb2tKeU90cHYxckFkblBVUFN6eGtEL3VlSlFMR3prYUl2NUpCemo3aGxUZWdPRkR1N21yVGhmNVlUNlFQcDFyRTNubmd4Mnk2eDFvd1BKaEhyMjRJZXZobDZEMXhzbDY5NU5XOFNNYnRTdkVZZUFKNnBpQjdOcUtqa2dYS05KMW9mZjN5UnVDTktkSVVYSEZ0Nm92Y0RZcklNSHBKWHJNenBzSVRaOGorTDBkZFlxWGs4L2xZMUFXT1h3WUNDeURHbFpGVlBpRlFmaGlITFg3dWlRa2pYTUhkeCt6L0xpT0dMbDJ6YmZUY0VZNHJiTTVuNFd6bjdTNU5YcCtJeW9BV282Y3FtTFlENUs5bW9KWEdPNXFLRnIwd1E1anRuSUhtMldtYzZXM0JxNUp6d1UxbE5weEpvekF1SEVWcXR0dk1oMTNVZE1qRzBzaWFwYWJlZjlJeUpWV3F6OE1BTTRtZkQ0ZnFBY1Y4Y3BLOVZWM0xlL21lMDA2YVJ0SFg3d0g2YUxhWVFBSTBKWkR2M25VS09icEZSNGczK2l6MXN4YzNtWWdPOGJuMURJenFLUzFkZmVqVmNlWkdqQlpmWmdmeDBNS0ZTOFo0Z2hVYXYwc0hyS21KN1JOOE5MK09CR1h3d2VDQ2V4U2xKcUo0VzZBcnY1eHhqY3JpQ2FrR2tZUWdkeXpVK3VobXlmOWZTUGR1Zjd3UktEOUxHT1J1VGZZazZBUTErRitzMk14aUkxV29DOCtsRDB5Rm5hbXVzVlprM1lqb0lEN2plYmRIYTZmOG1GcXhva0hibS96TWYxSWhFTmFqZzc1MEN2eDRCQnlNR05JQzFURHV5VVVLdisxbFBEY3dCZWhmdU1YUDBmNVlnY0xhbjZKdXFJeTBabFpTWTlGMzJ2MnRJaWo1YnVjSjNKN2dKOTVFTFZDKzhrbmt4UnVuQkVIZTBaeENEY25yellMOFhsdzI3L3o2VkpWNWp2TUZIVHk0S3NvWTFnQ3BXM0IvL2FWY3BJelhsNTYzNVV2VGhVRHhEWFZteWQ1SG9NcHZDM3pZL3RWWVRoYk9IZWI1a0lhM2RkaDcwWUkxRWUvVW11Sy9JclBTc2RSVnFJK3pnZmpRemJCU1ZtZmpxTDVrOUpyL2ovMDBCRXB2VE9QOXN0Q0xtRFgvT3FZbkx4ZHd2QWtYYnYwSUFYdVF4d0NvSjZqQnN3eVAwS2ZycFVTT1BVSnNzYkFiSW50R2xwUEd2TXdTRWpWeGFmSUZVa21wSnp6QTFwbGN5aXBMTGF0TWdHNzYxaUJtaGJ0Y3czWXFidWRnY1RzcnR2NndPcjV2MEZ2TDdNTFBvbXNGaVhlbytrYTF2cDltcUJROW5MWEN1MXNScUVhdzJCZUxUL2hwVjNTUm0xVnZCUTQwV1JPU3dXY2xlS1dpSy9jOFBabngxbkw3T05ObE1TWlo1cGl1MXRJa2NFbGh5Q0xKRy94WTgzNzFFQ3dqRzBmQTAwT2dkMzJrRmpUTnZVQ3BKcjR2TUZyVW5mM3pIRG5SWE1wMm5nTU52Tk9MUTN3TVpDSEJ6clcvYWdnc0xTc0s0VlZlOWpoTWJoRDFpQVFBYnI1ZTBDTUU1Q1dJcS9Gb25HWlpLem9uaVZRYUZGRDVKeVhFblRDMXpNczBBZCtJdmJRSFNyYURseWUxMzFpTitnU0lKemxFZU84UEgzR3F6VzVBcTJTYVkybEZ4RlhnUnpwcUt6S09OYTVYOGZPSTRxSmVCWnB5QXlvZVJLWXphTktRUjc1aHBTYXJnRXozb0U0WWJNcWV2YUxnV0hMVmtNRlhVSXE4S3R5bkcrZVpsYkRBcnpPekkvdzlENjVIZDN3TmpmUUJhbEY2NmtRRDEvZndJWDBmVFd5cWhFSnhPR0hmb1BXSWdTdDVzZDJMRW1aWnIrcDVndlptM1NOdTR3VmpCUHl0OWp3MnFpcW9wRE85SXk1SHFRMUU1ZHJvOG9jSG9XTjV6c0FVcDA5MldVZXRHZ3h6OHhHTFhOanZWSUtwSEs0eCt0TTZyczVrMm96U05oTXJhL3hBdjlhZ1FaWjRtN1RjMzBMbXFrcFZZNW1kOG1idFJ6dDFTazdpNjF3WVdnYnoxSHJyNGZPcTh1QSsvR2JPQU9xZEJ1dGRUS1hQczFDTHgxc3lEd09wL25FY3EweUdkMjVUMnpJRzZTbXAwdCsvcHJJVForbzhpUXVsWVdya0tGeTg2TzBkUUtWNFBadG56RjlIUDRXZ1M1dkZqWDJBcWhLSS9hOUhlQVE5NGRiT0F5Q09YT0JQWDhkS0RJL0NzcTJlMVJLZkJTUkViWFcxZHBUd0s2dE9KaWxjOW1Xd1BZQ054V2Z4K0RYeXNjcE9MTmxFWEowNUhMcmJJUmtQWVJXVVBUR205R0V5ZlV0SkxWdTRZNVFYNDFreUxGU2s3bzl2ZFNIWmpWMEdMMS85ZC8weWFSd1NwTGlBb2tRVnRXY1ZMcTZPbXdvZlgwOGp0WCtlZUhZbU1OWkwxU29vUFE2NkNDckNUb3pvTExSdkJJQWxENWhRR2pibWVwdEZiNmY4T3ErOXFXQ0NodHViR05QRmpNRmJmcEVGUlpQd3dFNkYyZG5LeXhCSERSZE4vVUtYMmNOOFY4R3BVWEJxYnIyQ1ZQdndZRDE4NXllTnhSQ2UzcDgxOExieE9icTkyaC9FTVFHWW0zT0pmUFQvYTdqWkk5SkpkYWhpOXJoTDB3WmR4dEtLQ0drdHMvY1VPaGZ5MyttbHdpRTd3TzBhaTV5ZlJGOEtNbXZLOGU4cGxncGw0V1k1V29QQzFVbE9pZ3BkR1VmUTJyRHIzK0l4OUtUaFc1c0l6cW9FcGhtREk1TUYvZWZpcEpRRVRpbzBLcFdjSkt6L0wyeG42WEtFcFJqODhkaksrUCtmZG1hWXQ0Y3MwWXpLSXJleW1mRStLVEdzcVV4TnJDaTB0Tlp1VWdUbEQ4S0tYMys3YjJUMFBveHRsK1VoVkUvMlVucEl4RWRzRHVsWjhDakhDU2JMSEZrcVFiVERJOEFWKzExQjVYNFJyZUE3dUFNWHFLYlBUbVAybGR4OUV6OUt2S0k0bkJzbnVUbWpkZWlLRUYyWUk4eU0rZFp5bTNkaW8xb25kNS82bjBJUFBuZmhST2VNSWZwVk5CQ1IrTkRjK24yemJnSzRncUVWMUVPZjBOM2FLNVYrb1E5NVB3dzU4bk8vVTJKNTFjU0NZbzFoU3ZYWWxtdzd6djdnWUZhMGplTTRsT2llOHBKdFk4WGNzSEJYUmkyRVJ3REpuRTdMZHhFYTVMOWIwcnZaRUloOXZYbVV2MXRuV2tTNVpwbmFFTzFDZmtlNnIvRzNLY1laSEFHcnJOaWVWcGJPVlVHZGpjd3duR2t3SHhFR2xHYmJHRFliVnJmSGQ2cmNEWDVpRU5rNnlZNVhOYTVSd0UyUU1GQTlXWDBNSFNkdHY1NW9MYldtdHQzUjFrbndrVTBIUytuUFBNeURnY2NwRFl3ZTVlVWpQcFdqTXN1Q3pmcEdNdSt5bzV3RGY4TjgvMnNmMWV2My9WZTMxK3JwYnZuK3NSK3IyRnA4bjFjYjUvUVRuNU5zWHcrL212azdUZm4zUnd6NVB0ZjN6L1pBLzFlMlRmTjZqSjhuMXN2MWV6RFBrK3RYZlA2WE0vSnVEOG5wOTE4bmZMOC9TRGdiNVBxVi9uK21IL24rcmwrZnUvZko5R3o4LzAzTDVQbzkzeWRyTmZCMGQrVHVCdnlkYi94TmxBSXhTZ2ZMVVRpYm1wMmZyOVVIQVBtT3J2WFlCZEE4WU5DWmpVYWFEdjcvU28xalJxdHJBbUJqK1hzQjJuRFNnRFdieWxwQm9vMW9qTURNQmdvM2o1UVFoaERyMnBweldQTHdlUTVIRnd0WVl3UHFpSHh3ejFxQ2JBMXB1OEMxMHAyeHFTOVZoalBxY0NPSmRObUoxTnNGL1JoODd1MFhTc1BjbkRVRGc1OFR6OE9nR29CMDJQdDJTTndpL2hhcG11UFB1bnQrVml0alpBeHlVOHJPNVdDYWxTb1VibXNiRERjN2VzSlhoMkVDeTF0VmRGYjVEZWdHRitEc2RZalNIWGhPeWdFbkdzYTNlaERocm41VWhmSmkva2svKysrZ2l6cnZWVDJiQVlpeC9CNzhZSnV0bXJCK050MTBrQTV2VDR4TmNnQWVWNytaTEZVUUhkbWQvZS8zYUM3QVA2NEFjb1hreHpHWGdPUHpEYkM1d3oycHdoZDRhZGs3UUx4R2hNQ1A3dzAyK2I3ZElGM2pOZzcxeU80dWZnYkFtZFNRWGl6bS8xbEcxa3FjNi9NSlhvRFYyem1XVGxSNE1TWHh1YW83TVlwY0xCVkxGeW42ZVgzTWR0ZThnT29Sc0Y3QzA4UHZ4YVJxVE5mamhyZlZOaXYwemlqL0RGOWZIN0lnTDFLL0tZUnlXSzlBOGIwdXZ1R0FDdjNWWmFwUWtlTTJ4WFdOakZmaEtDdkZ3SEg3ajA1RTdUaFE2Z3J6UEhrSWRaR09LVUlMeXdnU094Q1hpRFBBRStHcmVvQlhodWJPT1F5ZjJ1ZlcwRUovb2RvY3BablZRZFNTTUhJOGZLTkpmQXI1WS9Ka281R0NYZ0E2OUxVVTZaMUFuL3NBS0JLZDZYSGE2ZTRCTm02NGFYazNEaS80U3hkNVR4TnBEeWswTGovU0VpeXA2MjB3MGZqTmZYdVhuU0d0bUgycDMyVWRzV0VUclR0bkJ4SnNYSTFLWXdaWmNubWRMRERKVERWZWdXY0psaHkydHAyblNnUFdnVmt3R0hQVTFJK29YR0orNGlEbHk2NWNYQkZUTHE0K3dCK3FSdXRSd0J0YnJEZkZVSkdsY3pySWY4RDU3YWtBMFRxempKNHNFWGFsRks2RnhUTVdHVkRsSHczVDNyanVEdHZzbTFRWGY1aWZsWitwL1YyOCt4N3dZVDVBT1BtTE1SU1ZiT296ZmdES2pzMXFHNWo3TkM5UUo5U0Z6UXhKTlFpcGVtMHVNWHdKVmFvR2Jrd05QT1RldmZlSTk0SEtaOTBJa096UnZEanZCd0ZXcDZIaW1wWkczbWh4NzRlS05nSW1ETWtnYlVOcFgvbHFGbGlYcys5K29VdDQzM3hsUGd1dFVRbjJrWXNUeXVvOXgvQmNBbGtpOGtPV0lOclpzMjIwTXVwS0xWUTRVdytGdjJjM3RWa0Z6QXhpSlhXL3ZXbDd5VFhqQXVDK3o5dFhSdUk1dEgwZk1LVThiVmVXU1h1ck5TQjcwVGt5NHI3bW1VYUxtVTJvQjRpQnlmOGs4ZmpHcW5oMXkvM2F0RDYzd0F3Y3hxZkVEUjZLS1U2Y0Y5N0wzWDdUSnBRbnRrSXNaZEVPeWl0SXZYK2F6MEcxcGVOUldQOVR3N0tZZXlPL1dldTh3SExoWEhjeHNiajk2SlFManp0K3VpVFB0K3pvQy9zbmZGaEQ0NGJzR3ZaQjFhS2pMQklxb0c1QzZpaDVzS1NtQW1uOCtvOHBrNzJsMndsdW5mZ0VXSlpaeW10aWxjYlJZejVRUkZkN2VYRjAybkdDeFYwWEpOVG1lUU1zZERnKzMvSG5XL2NGYW0wTVhqa3NUTTFpczhoYXZUT0VQbldwZ1IvdTZVTU1pZ0ZzS0pwM1hPSW1kOXBzZFBxQjloS3Q1d2UwaStMWlBhakFpUGh1cVB1UE9kNlExV1Q0c3ZqWEhqcGxYTlNxcEVVMHdsblpZVHJ5cDdzUURGbnV4dHl6eG5kNGFXbi8vQVkxcHRKZndtc2YvSWhGRkZXQVM1dUoyZlNRdmhvcGQwM2VvVVZxSjB5aUdaWlU3TWdHTndnWGtDYStMTmtFeUJxUkZSZ1JRS1phWElhYnNUOGw0dlUyM1I1dlkwbkJVeC84Tkw1ZzdLZjlhMGVNem85aWZXNjNPc1R1N2hTR0FLekNaaE9odDhNeWVFMzQxc1U4bUF6Sm54WDgxLzNuWEw0N1dxeXNJZXZQeEtuWm00Wi9JSm5hZEVaUkt3MkxSSXErT1dicDVIYnJFeHdhbmpuMTBjRFZVUnVtc3BURVhvcHQxREdsVDgvTFFuVXFDcitvMkFNNTNmb2lyRTNjUjRIa2lSa0JTQVFzUzQ5QklyaVZTdkpiK1JHcEc5K1MvdW5FWnVDVHRUZnBrdEFkRmhnemlic1FQdDhSZjExVDlmOUZWcVM0NlFFc3V6NjY4WVNvYmtqOXI0YkNXMmw1Qjc0alUwS1lQaEIxelJtSCtobU5GR1V6elVLNjRpSzgwdUZjeldWemxmWkU5d2s3Q2x3dFE0d3NjSkVKUVQwSklIbHNnMHVDN2VhdGE1RWp4WEt1cWNISHhZQjJ1OWRvWk9VOVY3ZVBXT3lWMWg0VllyUUg0RU4rQXdxa1JTSWxNRDV6bzZOVmIwa0QyZTg4RzR5aGM4Rklzb2RiOHNsWnlaOFVGekpwY2NmQ1FDaHFYbFJGb1pEWHBHZXBRSXdqQXFVWkZuc1h3WWp4NTB5M0V4Q2kvUERhK1g1a2Q3ODkyUG43YWVmbUtzbThwdkRaN1lPTjdHbjVTc0MrMnlHcDB5dlFZKzZpSkl4QTBJZ2tqZElqVi9wdmpmQXQvRCtncjQ0d1RKQmp6ZUQ1WDBiM2taZGZTSnFGTHlVRnhKRSs2WTVla01qWVVvczdnN2czMitPN1FoejNwUm8vMlRWTnhIVnVwSFBObkVmRGNNRFN2dmRpcVBHZS9SbnFHM2RyYnZ3YmRkY2ZXRE1Oc3NNUllod08yY2hiZVIzSVF5SFMxWStEcXh1UVc3c3NBdldUUmdEOTlUSEVDdkd0RVVPWUYyNmU4MHNhcW4zT0oxNEt6eDhjc0RGTkNlNU1xOFFQV1E0K1pQSDYxZkM1ZDZxdmg1QWNPQWJrMTlQUnJiaW9qbVlodW04aG40VHRBTEVzdk9NSWJsMHhYeitpMVNvSmF4QzA5anVRR0xFNjY4ZTlidGorb2hub0wvMWlaaDBYN3orU1RacGZFbFhjWnY0aldDd1V1SzJGakVTMkhPUDhIZkdqaGpycUVNeWwxaDUvRk5CQk1HNmYxZFhjN2Y2Y2tHQ0ZINVA5ZWRCTnFnd2MrWGpzVXVKWlFqc1Y0cFQwcVhYVm1HSFl0OEgreG5qQVU2WDIxSEVPeTBNUFJCVms5bmJOMW5OMFJzZHFqM2ZiWmczN1BCclFpQzA3MUxjd245QzI2TVdxOElVWjQxV2UxVG9JdDd3YkZlTDJIMVNNRk5OdHJmcnNuaWQybVd3bWUxQTNOUzBtMHRrajl6ckVtaWhGZlhEWEpNQnVYV01XQ2ZlK0U2cVVDVGlieEZIMTB5N3VSNWs3QW9FSnhlTzl2eS85UFpTS0M3QWdUc3JNKzQzMktwWFBiOFkwcndqR1FXaUVUUEFCbXU3YXV5aEZDd0dkRWpEcmNiOW5ReHRzaTI3MlJlRTN4SzZsMitxRFhDcWNzeDV3a2h1V1FEMU9HTkg4cmNwY1hpbEkyUzREVE5CMEc4dFg3T3RRR3ZMQXZsd3BXcmsvSHAzY05JUWYvWE5TS3NpWSsvd1E1MDludGRNRnNXVjcyTWdIMUlHUC9Wa0txeXZjejdhcVFXRUYwV0FQTlVqSHJGam56ZndRaXVEZWlkSTlIeTRKbWYwSHZ5MG5INGJQMjRqblRERTlKbWMzYmp0NGFuNkRTWWtXZ29ZVDZuV2tKQVV3eXQxT0tkQWtra09XTmZhZGh6VStZNWU3dCt1K0huQXRGMVdINS9CdGVDL2VKREtLYytYWmNSQVhlcGUrQlcwVkpPMjNrQ3lmZGYxM2lRNWRkR21jSk9hcXUzSGhLcXF4cjdHcGNOMmZGeE1hTjljMG9aQVg3ZXdpWi96SkRMOWtBWXppUDNtazV5d3dPWjQyZ3hJMlBMRUVxUE5aVFBheGI2MU83QkkrYlA3WlREeDdZZzliOHFDc0RkdEhoR2k4bDNkL3AyTVZuQmpTUkg5a0IvZDRCY0dNYldJbVhSSGc5WG1DNHNKQ2pjMllBMGpXTG4rNGJnbndHc1JOVnZDaXd4WWk1UUR1MnIrSmQweDZEd0NiU1J1S3Jyc2k1N0pSYi95M2J6ZFdteDJ6Zzk0L05kQVI2enZuaGFqNVk5Wit6clVFNDRENW1SMnJoV05xKzkyYUZVR1FReXR5NmZvN3NKNWJTNGZkdUljUEtaM2hsb0pqeHhFamk2M0JpZmV2bHpJaERpaUJ1U3c4aWwxRkNRYkhlRWJiODRMbGdEWTdnNUxqNlFXOUp2eGVETWNoNy9XZWN3NFovVndkNzc2cExiVm55Y253NUVtQTY0MDN5K2NHeHdsazVVUGRmZk80VTdGcXkrU1puOWd4MDVCR3BYdDR1K0tmMXdka2U2eWhLcENDaVZVS3cydzYwcTFkWDhRa3NvWnAxNW9SY0NFSVRTMjhDU20xMGQzZHB5YmRFalR6MWdnK2tlUTA0VXBoenZneWUvQ05JbDQ3UlZyMUh3WExnSzh2bW1QUXBwTHIrSFBUUnVXU1M0UmdDSERQcFk0WXZUQW91S1FmbkZJVHBCRyt5Ni92YWU3SGhFOTIzMlUxZysyNGNnNG5BbitTOVlJWXY2elVDOElZZzlleXR1WENEa3loRFJYWC9hV1Fac0UvMmlGVEJvUjdid0NHNnBzRkRjMENoKzUwVFk1dkpjVitvZ1dKVmZKdzk5bzRUWFh1dHM5TEpSZkVuNDFING5YL09jN2JiTG9TT2p6WFVDZHlSSmt1M0F5UWRpblNjMEwrdzFmUCtWcW8rVzQ3RncvV052REFPUjZ0Y3ZEZzh3R0ZEUlJqRitBcjVNWGJydjcvN0VxQmppMUYvb3FPaTlycFlmcXZ0eEJ5NlFhdnNoalhVb0hzRTc1Qk9mei92VERnTThXeUVCRkZEZUtWZ0lKVXBEdnd3dXRFeFpXSkVsTmZ5N2Fsbmw0a05mMTJmVkZucDRFRmdkdnZYUFpMZzdxbVRxdlF5Qi9McnAwMWtRNWlUSWY4QlVaWk1WK3hsRkU1VzVnQmduOGhubDJ0SVpnVjhhYTE0SmpyOEFhRDV5VGRMRXdhdll1NG0zNTViOExsVXprQ1c2QU52U2prMTJpb0pUUnk3S3dtd0Jod3FCM0VPQllXUWVsS1cwdFN5dy9udFU2aHFXNzZMcXR3YTNRbjc2eGU3VEptOTVIbDlXTEJUTU9yOFhuWmVNWmpoWG14eEg1OE14dWF4MDNJZGd5bWtlRFg5bnVORHk0RG9DejlnbEZETnIrYVZ4R2NaNTROd3NaYlpnblhibzd4S0kzaEZoVmtzaWNNck1wTHdPZm1DMDJVT1JNV1paaXJaYkxVUUVNMVl2cVZyMVg3SFBtdy9xdHBPdnE1c3E1NkRTRStKakdQZTR5S2JmOWtSREJXZ011R0k5WEl2ZGV0cTEwS2lrOGJyb0JzRlkvdkFuTTZORGE0NFpCM3didUxncENCRjNMejlRSGFYWVYvUXQ2Y0VqUHcwRDZ6N05yRzV6ak0zbXkrbWFWVjJWaTdCbk1lNEFkQTkvckZZUnJyakRzMURpM3hkYm5QaFJCbnM0MVczSjVlbjZaNHY1S2JVT1BiL1JmS05iVHBqQURSRk1sWjEwczZSbWxMTE5lN09KbTc1QVoxb1djSGQxcjNoSVRtYU90cHJqYkFsVWtkb1B0eVFrVUc2TVpZT0ozZ3EyYkZWTXdYQzNhN3ZxeHNrQWhuS0RERzBDZVp6MGJrbCttR3RMeFdRQW9lNmgybUp4TmduSk12M2s3UzRvYUMzOG5Ga0ZTUGZNQTdKNGcrc0NnUzJkaXFRSWNPNUFVYlE3T1hsc0N5MTRXbFBKZmV1N2JJZ01vZElia2R4UmdEM3o2bngycUo5UjJpWWtTTU0xM0VRbkN0b2dZUVcwWW5CL0t4NnhrVzBxUEIxTWducWl2dDlrTzgyM0FEUUlhTXlSVzNha3didkNNMkNjZUNFQXVCV0RPdWVCalY4aExSS09PbjdwcGM3Z1BPMDhZcmVTYVIrRGg3RFY4ZXFodThsZm8zVWs5SW1FUUw1bmtxWFJjcTBUZXZzR0pFNms5RmxDaDRoVjgzTlJiWjE1dEFsL0hVSTlKdG1tQnVLMDlnSXk0cUZBczlDdUNNTFJsZC8zcjBnTitrMWlkRFpHMy9uSzd3VHpvRSszbnY5WEpnb1pWU1J5WW0rbi9zNE9ESTRScEdZcVRPOFBGNEE5YXdUOXExOFE3dXFKSjg2cncwNXZqaXQ1Mk5TNHJnZmxIREI2Nm1mdnlzVlFaUktoYTdHNStRbDdMSUZta3FxUEJwVUZPWGg3NkxHNDNJUER2UzhJRC8yVjFjRFZBQ2VJRWlaWmIvQkRJcTg0Q1c3MjVreTcrY21yL2xkUStwbk5BdTk3ZHdtdHFxaHdOYkh3SDhQZEhTMnZmQ3ZhbzhmT1ZLWUtqQk42SjhmMFRIb0dvTUdlakRYQ2hPS2N2ZHVMWFBmWk9VT1VnRFM5MURRUXNaVlhCTDlDdHFJZC85bStrRnVtVEMvMndSUUdXTGNpdU53eWUxZmlZQm5vN0doa1ozdW9hak1qTkJUVVVpRVNKb1lhSmJjSk13RHNXaURwZTdlT3gybTdBaW5TY3N1Y2hEa3ZCSnQzOCtMdkdYRWJnNVRzQ3F0RFVaTTk4RFlJTEUvZXgxSFRxMGFpeCtFUzkwUDI0VEpCaXE3ekl4QnJXYmtoWFNoSWd5d3VPdCs4NWdEZXl3Mk1CblkyUXJhWDV6cmY5OXUxSzB5bnh4djJsbnp4L3Y4NGh0UTZ6TkhHc2UvWUtDTE1XVTQzcUJMRGZmU3NYSm84bU05Nm9QUWp5SVlQckpkYW9VZVJDNFIyMS9GTmQ1UWdMajZieE01UWZOcFlyY1BiUmpNUDdJMW9BNW9nUWxCMktJVGdISm9OcU9pbzVCTldxVjRxMUhTMy9nczJRYzBYeXdJZWZQcVFyRlE2ODY5bkJTQm5yRkJlbWt1bTN4RFUzczdRWG9URTQzUHJ2MGhJSE5LM2FiQUhKZnAza3VlZ1JoRFAwcXVROHZmdEcyT0V3OXV0RFlDODUyUGQvQ3k0T0RRVWg4SXBwbWcwdS9URXd0V2FWQys3NEVMU09jS0ZHQXJqNWJNQ01ETFNQanBYVk5YVmZXWVNjYzNEY2xLeGhFM1hubzhRMnVjRzNzY1ppcUNxbDFGWjBnTGVFWm41azRKY0NwWVZVQkRrcnY3WmJjbzQ0VGlSZE9kR3NQOVFZU1ZOcVEzMVB0aDhPTnBzb05aNmxoOXVqcXV2ZlJYbmxDb1hQU2VXWFhPUHUvNnFxQmd6cXJoc0VRcGk0cDl4QVNHT21NVFVsQ2xYZHN0ZlVxcVhSdDRlc2xBcWxtSW1vc0I3NEQxVzlQaHpDamwrckszVFpKbXZQTzZlUERPMVh1Ujk5V3FvRWdEOHFJYkFkamdTZ0c4cEM4WG9uWm1XZlZvSjdaZEhGUlBKdk9Bd0hwS0t4Znc0Tmdjd3hxMmY2VHZ5bHJXN2pTVGxab29JT3M4eXF3UjhUSVdPNGVlYTZMck53a1FMdmkweFRMRFpHa242cmw2Ry9FNjdwR0JwSEkzODgrQ3BKdmZxSWFOZm9sWW9SVTJFczZYYnlhVTNxUzltOFdmd2QvUjRneDR3M3prc2xySngrY1M0ZkJ3emt1MzZkUXpJUG1JOW8vYWJmYWpTSmlodzdvc2s5QmdhTEl2SVpyV3daSjIwZlhsajA5U2lDWFdqTnlYM2J0Z2FYMzlCbG1HRGVZMWtLMWNoQ1BObVNITjhxekh6b1V2YTZyc280cHQyT3czMjU3VFNxZzI5MVJVSDNFMGsxL0x4VkJESnhrUklCVEk2QUlwVzlGeUZaOHp5bVBZajNZZ1loRkdReExWRTR5SHZpMmlLbkNXODVWMGduYmpDMytGRDF5REJKeHFQZVhKVHpPa0ZyMk1XL0xaT2luN255d01yQUhmaVpGbGVjNld4QytHRjV4dzVLWUJ5R2cxWWsrN1VENVhUWnZkZ1cwZ3R2UmR5OXBZTEE3ZytURjVmbW5raXVRV0dVMFoySUdCaGt2cjc2OWo4L3dxSXFjbnJ6UC9LdG5MT3NnZHRJRlgrQWlJN0VKR284dmlPSkZSRnR3QjIxQldNYmFINzRtVDhsS0NlSnBWTno3RktLZXFzcTR0eWFJODRoRlczSUkxQjlWZVJwSWtjaDNUQUFvWURrdlNXSTI0NGNoUFRMNlh2RytaZG1BYzQ5ZDYvbldrdGJ6L1FYVFhESGJPeFhZSDJIMENrbnU5SG1VVU1Xd0pOUWhIbERKbkZTbnBvTDhYNC81ZmZlWTBwT0FIbXBaSmlWTGU0WUFEQ0RyMHVNeUhGaWZnbzd2K3ZYeU93Rk9rM1Azbmt4MzJ3ZEZvNU9kSFIzekNZazMyeDdNU1JRZ2VMOVNaMk5FS3NsM0tMNlhpc0NCaGNXV0NJbDhCdUkxYWdhZUVmRjk0MTJxRVByc3M0bmJhYjMxM3NtMSt4RG5MbGdkbEdROEwrY05Sb2QyUHNxbTNJRnNzQWE0c2h3V0h3TTFUQ1ZkUkgwNmFNSjNaR2tEMHdzUnBpWjA0SWVpeGxGZkhZRDg1cjJCUXFHMUg3QllNeVdET0oyaWYzYmxXZjhGb0NRNTdycURZU0RKalBhZVdCL2FkdHYyMG9OWEsyNkc3YWJFY0xHWWM3c0JOc05DMEt6R2JzTVBzNmJyckFkd0ZRVzM3VFM4UzZrb1FFNjd4TGcra3dHRUkzVVZDOW9TakpFZHdxY21reWVhdjFRVHJKa1lkN0Zudjc5T0Z4M0xwUUVlQWF2VWZaaEIxVm45OXdxL2J0TjFhVlhCaDhMS0pNYXd1K0lDSkszRDNXV0dDQmttVVRURzJzSzJVT3NyN1psOUxoNk1VSWxrWjdQczA5TExNWFJZZk1VdFRiUWVjU3pFT0JTTGsxVHQ2cnhlSEVuRzlwQWgrNzZRVDZxV2piZjI2VnRtWjM1eHRtd2p0TWZUZm9qRHIyNXFKdmFHL3RZRHpqWEhsZUlPWE9uUEllN1E0aGp3UDRtVkhadDdmOUg2WDVXZHBmVUxSZkxzWk1IT2ZTL0kwTGxRVjlIUXIyR2NuVFZBRG14WmhwZ1NyOXcvbVV6dldjQ241dGxzV2dJNVNXQWNkL1hjUE1nR1Rwd24rMk45MWhwS25UY1dMZG9MSzdwMlVMdGhOZTFCYS9WR2NJZjJmbWxLaFN2cytGR3pjWHRYaFlmT0dJK3RBMlBZTkFRcEFVZkhHZ0x3cE05UGthZTBaN0tDVmhuZUZLV3o3KzVzcGJBSVpZZFJuZ0R2SEZJT3FPZXNzRXVBQTNlN290b1BpaG82N2l1Q2srYVc1MUtJMlVka0o2TGxoRVpKME01cWdJWHcxWXM3VnA4NkdsZEptaGlNMjBWc2w4c2dTdGZNZENsMXhnMXlrRUdFRXFEMktnSnBhOHBKU3BQc1gza2U4bUxCRXdoZ1JPOHVUejQzUTdGdkV5UGJSV0ErTWlEbFNDbjhqcW1nUE5ZR29iU1FOVWs1bmRIOUdrdTJwVW1hbndvR1VkT1NyaG5YMlo0dSt6dnJzTzhEYkczYThuOElGNEkzRkUyWDAzU0c0MTV3clFmelhDTXQ5TWJNZlJNSEJnSzd3UWpUeit6QjVZM3dXV2xISnJsTk14RERZQnpXSTdEcS9WM1hBM1puMVFhRnM2Vk4vWTgrYytOYzFkTENQaXA3MnIrU2xoQjQ4OUVJRWoxVG9TYWhKSGJ4NmVPb25aRXUwY3JZcnpWUXhSK1U0NDE5ZXFmMXJmcmNxT3pNdjJ3SW1EWmo1anFQR0Y4TU8xTWp5SkxaZmhYOWk2Ni9LRkdwbU1SbUFkSWJtMERwSTNOVVNod2Y2endNNnNRVkFQRkh6K0pwMmJtSi95Z3c4Z2pXOG9UdXNxUWM1VzVTTHFFeG04UWxNQTI3cncrMzlFYjg0N0RGUE5hMzd0enJzRHNJWHB1R3RxQUFmaGo0OFBUZCtwVVlkQmw1a3hYekpwdzc2YXdwT2EwL2d6b2lpNENZN1FPZjdzZ2o5dU1qN3FLMmxHa1RYMWIyWjlaNXhoanVlaFlldVVzVkJ6eHdVSlloUHBsZmFSUDlkOEE3M1BEOXEwSW13MGY5c3h6OU5yYlFIbnlWdjc1SGRhRklIdytHeGdidWdHOUp2V1FWN3g0ckx2aEczVjdiaGQrSWJZcVJuTDFDWEdIdGY5d0N6RWRYUlZIZStuZGIwWTh4Q2xzOWxNU1F3elpscFVkWEZ5L3ZGQVY3ZllHMnc2NStBbll5WHpiWnNzUnFiNzRlT2xxYWFHaVhzY285c1g3aWFqU1pDZFg3OXBmQnc4QUhsL1RkN0ZJbXUwSGx3MytqNWhkVXppTk5lOFQ0cFRWemEwdW5RMEZsdXRGa3owTlU4elFwZFNBSkNHVERHbmlnbndOQTI5TElXcTdiL0lpZ292U0M4Qk8wcWxjUWoyNVNQaGwrbGpFc3NsZ3VGbkkxM3c4VkdwMW1aRTZPZ1hJRmxva01nMzJ0N0o4Y0pjUXpCSE1UaXRkWE9UY3d5WE81SVF6d05nb0FMbXNWUU02NGhQTzd3b1A0NG01QzJMdEFUNU1sOUpWZkF0UThBVmFKd203VkppbHVEbmhkZGFtbU1vaXlyR1k0YkI2NElENUpRejVNYXp6Nm5nejFibVc0TCtPYzlWdjE5N2VqQnNFY3FmRHg4MzVOZEk2QmpkbU1KK1V3NURKWjgxK1RoQUQ3TnlnSGxMVTVXRTJ6bnhPcGU3bVRaYVl5UWlnL3ZRNjNmTituelV5MldzQkNjUTUrMWp1dDhoSnVjc0Y2a1ZrQkZrSjVqWi8weS9mWTZwWkJUYmQzNjZzaXRaSHZkcHV0KzBsSzBROE5SYWtzd041Zmd1ZkQ5Sk41QldUUmFQSkNDVWpjeU84RnZOTG10UDAyWGhWM3FhVVd2V28xajF2cXBaQm1tSFkyQk1FSFIwU2F3Z2luMzJlcEJpbVppeW41aXpseTJBUUxTczFUbFYvUnhUbmlmT3hyVUtGcVpFRjVXWXZHcjFGWFlCb1VwNmV1aElaazkyVnhNU3JvQlMrZ253Zng5aGpIV3RJcUlXSTNLbkxWRUY1WXQ3SjhmblhxOXlOd0ZqdE0rN3NFcjg1K3lYTjhyWXBpSHp4YVZrNDVHUWxrKytzZkhYZktzRk9BUXplZ2hUQjZFM0R5dHZVQ3NxS0xZTGtweWRueEpqVitIUFhPQXRzWmFTRjVCRWtxcFNSbmxxZDRjanJuaGI3QWRLa1crYXpScGcwcVM5eHgxdU9BL0Z3bVE2ZjF1UFNHWXR2eWw5Q0ViSUdweHp4YVV2ZDY5MDdmT0Frek1QeTc5cmFwMkEwNWFobkMxU2FvT2FKWGY2Tm9hallsVyt6NFZQWmpwVXJKMEYycDlNV24zTVNpSS9VUW5GMjBJNjh0RXFoY2RqUDJldXZIVjVKWXNsdmRIUVprSEZEalpaVzY2aTFoUHQxL0RabjkrR1lHMStEcXM0OWFRSEZIZ2MzUW5mWjA0d3FMOTJGMWwwSkp6bFVtaGxtN3NvL1pTMkQzSmJYQ2t1TXVSeEZTSUxPNjlRRWJJdEUwUHN2MnFkeXVqOGNWaWplRmFJU2l1KzA1em10TDIwckhVL0xvNm5ZeWhoaWJhMjlqeEZ2dVlxZ2xzMkV2VzlBQkFWcUlYNTBqZGVGcDJUY0plakEzOVMrNloyQy9FNlQyaXN4cTNmNG1NUFV0c0ltNDJZblA4YlFKMlFSM1loWE9vSjJNMk4weUp0Z3pYcnc4SzBBNmxHV2RmUDdyeFF3SCtBSVBzUHdIakZQUld5eGY2ZnZCczV2djFoVmZmcmVNb2tqSUhmZFhGL0RMMUpwc29BNGdPcjN2T25uWS84a0prc2ZlRm5nTmFMYXY2aHpaT3F5WENMMU1tYWRIa0lEdU9LcHlPU3paZGRmRVZTajNHY2JjaENuVWxkek8zTWpKZ1VlVXNzc3ZlSzc5M1RyU2dLYTd2VmFFMmdDTTgxRlVUZDlYb2R1VVY1WEFiS1FOVkZLTmtJbzlNUDdaRGZldnZZdUV1RnhUTE1BaTdoN21zVmdjRFJVWld0NWdJYVZpWHNUNkpnL1IvMUM0ZG82UlI5eDJFMmlFeFBsaWxhK0hyQVFCK1FwZHNHVEZUeURjWE55TTFxU2l6TWltWmFJTUd2OGwwSVIyK21RQW5uZnlkWFdlRktLNEZpcmdtVjVJQU9sT1cxcXoyR3ZQSjFISFkxL2lpWnRMeFUzQ1lwem9VLzExTzAwL1prOTRCOE1vV1Rmd0VWakFXUkE2cVdQOHByYkQ0K3dFa3pvVXJTRWZ5K1A4L0tnYWU3L09LL3VmOVJVZVFjeFY5NklMdXIrTVRxVS9vbTJLNCtKcVJPeWtDdXZvTytWeTZGdDNYelJlVXdGamtJR0pwSXRJYmJTYWpjK3dVZm8rSVBjWnhzQUQzLzBFemlNK2IrWWxndEM4eEdIU1NLQ0hRUUVyQTUzVEdKQjl3clZWUE1RbnczVGhYN2JBNEp6UGV3NUJvMGJ4SHQwK3RUV2c1QkpjeFFJUTJhQTJWSW1ldUFJZWxTSFlTQ0ZqM05VY2hCd1gvTkJPYy9YY2wvdzhEQnR0QWQrTzVNY0ZRN1VCTGFmcVFXYzNQekhjNWNkZW5vN3NUQWFiKy91VlRmb25jUEVwYlRlR3lPWkdpN2lIbGwwUStXKzBoY0t2ZHVzQWwwdzMxeDhDVnJEZzQ1bVlzRzJFVUhuL1k1TWl0WW5hWWFPQkFhSlZPUEwxQ0JCNHFpMWpkeklrV0g5RFVoSkJ4L0ZyeFNwSWM5UXdBSmZCT0hYamhOd0FWKzlYbzJiMjJmZXhkeUpsa0duMS8xZ1lwR0oyZWhuRkxZMzREMk16dFNNSzJycVZ2dU1UOWV2N1JvOTZvcUZneWEyUHQrVTZ2M3NJbm5QSVM4dFBmUmE5N2NLZGtUUWl5Y0RIMkRBVUVnMzRROERZRzlrREJwWTVibGhyZEN3TGF2SmV4TDlsczJtcWdOZVJYTkQ4cURlWGt1NFpVemhOS1BCMHZ6SnhzNEhYRmdaalArRW1HL2NGUm5teDZFODExRStzdWpkQ09JcUxBNGJ3QnR5bk1lU09uRWRncElMQTVCT0ZLMjBoZEdWK2JyZkNhY1BwTXB5VkZyV0xZNlpGeGM4ckhvcEhPRVlBQ3hNY0xzeDFMTmVCU2RzTzUwVmlYMjNyZ2NlWUwyajhJN1Fna2NobmxKOTNTZ1dhNS9VbzhWTjBvSTlSeERUdmVFUTlURCthN1o1OVQ2NEl3NVZyQXpLNStJdWJHT3pENm5Cbnk3NWtBZS9YVy9WdVhWU2t6NERReW1vbk1ZQVRQL0VmbVNHdEgxR0ZwbE9KVkgzYkRkUkJhcTM5WGZpNVZQUnFLQzVTQ1ZTVHNKVXZPcEFvRWM1WFBuQnpCY1lIM1FDd1dhdXU4a1ZHQzNlZys0eDYyVVJ5c1hKRnFRajEvS1Y2dWgxdlFiVExLVnNXVzJCY0dWSVM1WVY4Vy90eHlWTmhnV3NkZTNpdWlJeDBWOFVOU3crV0lmK2ZhYUxlcElRQlBzQmtMakJGaTJoNXFDanBBNHU4bFFheUNYTXJiR2dwUkExSE5adEVYZk95R0dSM3Rrb2FCZll3bEM0V21xdEJSQklpcDBTdXhTZDZHUTJQUmw5WXBuU1ROMVNYSDRVYS9vcDRPQ3UvSyttaERQczNCdzVMQ1VkL0I0VU5meWkwMVBCUEQ5K2VNTEIxNU9ZSVBRdy9jbHBzcGRLcEdRNUtUZFZvNzJHNEVTdzBDK2VDNlFHdlVBRis5UCs1TmlKYnJVMloxK1NMSWJpb2VIZE1DT0Z6R3dFL1dMZVFOc010RE5uREhLanBseGFZcHQ3L2wyM2ZEMzJZY0dTVVJwa1EyZGFkeWRxdnJ5VkppMWFQSG1rWWhlUWl4bnZ3VHQ2REdHUUg3emdHVjVUak9rRlZQUzFwTyt0QUd1RUV2WllERFZ6SThpSFA5TjNxVmRyemY2Zm9nTVhyL1BPMllhMlNyUzBwVVZqMkpTK08yNS9pV0NIOGVwTUhwRVI5Q3kvbHN0M2FqOHh0UUhSc2JQZEs5TmdBbk52TUtqdzFRNkRuaEdQVXVSWDkwbjViVmh1SDE5elFGSGhBNjl2cjFDRnJiN1ZCenp1ZDBNMXBDRGtONThYZEpXSUhiN205ckVtaWVUK0JVWVJxNWdnSkR3N1ZWWUI1U1pOL2pNZHEwUUZza0J0Z2lpZVNkUGxrT3NGRHQzdUhOV3NKdXNrSFM5bkQxZWZJNURJZ29BMnVFTGZKRmtpMFIvczhURitNZFRveUo1dkdFQ3VrNzYrOTdvN2FkOWdjeVJYNTF6MGR4RUVwMzhFYzJvRVhYYS9wQ1BPQ0xwNFZTVncwdUEvTXd3N0E0ZjR0aVFYRGhaTC9iZnFIVjdRT0JsK3RzV1RHOE1aODRtSWdsRGg2K2kzOGxwcVljNFd4bzZUanZkUnlnY3hhVzBOVklzL0RzRENSQTROenUrUVVYK3g4N1hUb2ZXZlcxSncyckE3OFRaaFZIMUh5NDdYQyt4OUdYK2VRTlRpRXZkS0lORUhCVU9tcDFNUVhqWjZCR2J5SUhaVjc0cFloSGFzb1NwU2Q2N1JUdmkxNHBaTGNvYSsrYnZacjFvdzZwZ2kyWmM1UmxvbHdFMTNJdE1PWVBudk8yNTN5dGQrS1ZuOVBDb0h3STRHY3hqNHJGVUV3MVZ6WDNYVkJtK29GLytBOWc5N0p2Q3k5WVNXQmFueGkwMHFPY3lsaGpDT1ZyMkJTZkZmQUdXVVJNcEVSTkFINWVMQXMvVGRJM3ZCOWdQSGJDbHFHTmF5ZlY1TVRqMlh2RU5KbzY3ZVJ3cEVGdWJZUHlPdTZDMEtTaC9qYXV3SEJkYkg3ay9DMWFoODg5aEdJcnkvbjRFRkdNZXA5ZmYzRmdZV2loUFFvWkV1UjROeXk5L3JzL0hMNi8xeFNJOUpZdFd0NnZNN3NIV2xNN2xsYTRTTzJIN3FqSTRBZkdFL3NONTZrNC9LZmkrWVNXbXpvUERrQ0huZzRoZ2dUR3JoUDQ3V1RiVVFIdnQwTzJTNVg2WGN3UXJJU1l0UlVrZXZwSTJjTFhoUDRLekc3aDQrT3Bab2x1OHZqa1Qvd3JtTEk2ZDA0ZXkrbjlZWEhaZTUreDB2UmFFYTNoY0lWZ1dZTFVnVkRRMHRVMVRvUVdJOC93dnlrbFpWcE81anBlSk9XSUpUN040T3AvREJWdlJUandvV2szU1VRaDA5RG1SdTRoeGlSQncwRU9JNXJJdUE4ODlMM3BYZ09FaTFiblJOWlVBcFJJN2g3Qm8zYWVPODhYZDM5TDNMREtJclc0b0V2aU00d3ZvM1d6R1p6UlBXYXdnQlFhNGFTSlJHeEZyRENuOFhsUjZFQk9zcC8wNFpsVnBKTC9nYThaNGJrNTF6ZStCbWJKUTNWMVR5WHVKUGZwTTFQZkw1aFpqc01MU3UvVmlkU1E4VW5nTUhtQ2R6Z21HYnJPaUVZcnd4NjZCUEZVUHF4VmFIWkNRVFR3UVZDNnNldE9udjcrY0MwTUswdGFNUGxuZEFMZXRSU2VzV2UxQVRVNWJrbmw2S3FFUWc0eGt0Qk5BYTdZNDloTUExSzZ0QjVkWWIvS0hPdHJoOVJHcFFWOFFRWlVFbzY4b3h5YTk3WjNNWWtUQTd6Sm0zbmNkTXhzazNrV2FJUXJOdURoOWFUcnppZzJEb3ZKZUt0RTBwUWtOSTdFZVBBQ09xWWZqbDhVYWF5Rks2LzFZSG15MDhiU0MxSUFMclp0Q2g2L0VrUktiMndScWtIOTlSL0toUUtlSzRGZzFkWlYwb3dmOUZYU3BzTVY1b1pQUnBhbVFzbWwzOHNSZmlCTGc0WTFCQy9sREh2ekFSdmxMRStuSkt3eUZPRDdpcHhKaG03SGRrald4eXlwSnV4d1hPdWFlK2VaR200NWV3SGc0TFI1M043ZGdmbUUyWUJXQ3hielRTSE1YKzVkWW16Y1hMVTZIVUkyaDY4SGlvNmhUMy8xZVN6b2JIYzZZU0ZYRk05SEtKTmtra0ltM3IrVGdLckVHSlB0bjZ6NDhSckF0bmFId3lEOTR3alNKK3RBQTZHa29hWXFZaFY5WTZDNno4YzEzNDdRZkYxZkZBQmU4WjNCaHJwak5wYmlPQmRrb1A4UjVmS2RGcDNJSzBTUzNEU2JnTDIwYVpya1doS1dVYnZramRHUTNvL0RTelZuM0lBd0NNY2xjenFrRmVEejd4SzZGOGk2V0tETVhhSW12VUwxcUZzdkN5RW5PVFJHNHRPdjJRWlZyMDZYL09SUEZqUWdkV25oVnI5SkRldVVMS2tYc1JVaHZTK2xpeTBMYURxR3A0Wjk0WnZtOGtreFpQWnB0MTlEK2I5c3ArazBLenUzaVJyUDBvMnZnNDQzeWw4NytEbTM1QzF2MTNhakhaUjhFRXkrLzArSkRoQWpFdVdMbW03ZFhQQWgrcDJmd2FHaTF0NmhEeFp2TTJ1WFVieG0ydzVUUjY3VTdGSitmUFZHYTRleFhsenhQRDdsc0RHc01WczFuMFhsV1RpTi9sRUJLdlpUSHJmMCtzU05uN3F1SUZJeXRXZVFaRERQQWlKK0ZWTi9ySmFUSnRRQ0o2VlJvOXg3YmhlekRKMWNQT1MzZVlnRnJmcWttTjBhVUQwNHFRZUtNelptT24wdmNTY0tNYVM2Q3ZlQm50OHI5MTFQWkMxTEpZOW54emNONUg1eWhPSGI0eXRYQ1dndE1hbUFvd0huK1UvOEtqMVBOSHBjWjh3QVZEMnJnRlM4bWZVUmduRStQcjMvaE5Rd0hPVm91cG5qRmlPSGVCWjVWd2pjSmFnYkkwRU4rUVM4QUx4VWpESS9EMC9GMW9ENWF6WmNVN25CdTNORU9DeTFQZkl2UUpyK2NzTnlsN05lVW1CRUtaVHJQYUJZU28rK21taEdUYjZxdVhUV1pUdC9paEh1bEEyVFd0ZmxYRDZBR1NmaVpIekgxdUFMMTBTV2FJajdxS0pQSUdVQkRWM084dTV2aEtUQkl5Z3V5V0hLdEkwSFZHTHp2cXNiZ2FIdlZqdWdFRHdUdWRPNTBmN05GTWJqN0FTZkVUSGNicTNuY1V6UFpvWTZEdjA0ZklnNmhmcnFreUxxS0hWbE9DS3cyeGlRZDcvWGhqNTVBTkFzOWQ2NE5wblV1K2Z0a1pXVEYxWVhMUlVVcHdIMkZMUkxWZW1BMWYyZlRFWUdrVTRySnkvbmtxaVg3cnp2NmJnV0pUaDg2dHAyL3hCZ3ZvYS9mM2c0UWdlbmQ3R0RDVVBNYmQwcmRnT1NqZzlQb2hNNEYrT2RxamdST3lSNjZydkMrazlZbkV3YVFZeWVJU01DczZVYkdZR0VQMWE1RlF3cmhTWGQwdk4xejlvWTkrZ24vSDlwVzMzZDd4NEl2Mk5ZbThCdHhxWTd4anRjRHZTUGJLMlFHSjBnRmlqZzVYanE3TDltbEoyZGtqTTdmMGVFaVQ1L3RILzNlaWN6MXlzb0hTc1NuRCs1dWN5WHdPYmp6c1RIeE5zWXB6WXNBbXZlVVV4WVNKaWJtRjNjZ3RrV3drMUtzT0VRZllhc1RMMlNpT2pWNnhvWTBvcDRXOW1zYy9HOERWaWZ2SHAwN0dEWElDMWFVOWMwRjRPR2NLZlFvLzQ3MEs5T2ZmWWdQK2Zhb3lTK2s2ZjJERDUyQUxURUQzNTBlajZsTHQ2NGpkdmtOaENsUWtoZ0JZK2F6U1pQa1RlNXozYXplK2IxcVhaUmRUaXEveWFPTEl1N1JpWk5zUGlYUVlzalpHTWJnSUFOZ1FuVjZpOExHQmc0TTIzQm1DbkN2S0ozeHpycUxhV3BmVERYaFJuL1RLSlR1ZlBMWmc5OVIzZnBGSmtPN2kyZzZXS1BWd0RkOU5YWktSVkNLblU0ZzVPeVBodzByWGdqUVdLOUNCcUVvMEtxYmlhdUYrNktHWXVuTUdTTUNHWng2a2Z5L3B5eW02aUFQZjJtZXBGYXlZZXdBNHVnZGNGaDlzZktMVk05UUFYRHBrc3lmdzQzM3orWGExWFpoRnNOV3F2Zk1NcGh6NnFlR3FYUWpPZ3BpM0NIQ3lUZkh6eHRzaDNnSkVGZXN5T1dNWWNkdHVoM1R6YkxlQ0RRNThncFpXZWFTS1h2eDZsTENzUjJqNFAxRjl0ZVBDc0M2N1lqdEtRQnNhRGZ3U0pSUExPN1pNTnNmRzFlbHdjUVJXKzgrMW0rM2Q1Qy80OUJDWGhtQi9vaGYzUmFrY0FRVnVkSG9jTWpEUitPTHhkeDlJbU9tUVRMTHhNWkRwVkxabG9OakhBdnIycTFIZHNkVGFBbzZ3NHZhUDFveDFXRVpSWW8vci9YRWkzSWNIVEpGVXdQcCtLby9WdHhHczN5ZnpDWGduRm0yUE1DZHpvUWVtcUtMSmVWbnRqZWhRM2VFT2xtM0EyYU1kbjluZXVEVmVPb283UEJTQXlWakVHZWpQdWY0WVNGckx3dVhubEVDU04walVqeDBRT24ya3Z4dXFzZWVmV0Z2UHQ1VGNBMGZMVjluL3ZvZmxwQWpBUk1yOGxTdWZrT0RPT3BJcWZaUmhtUFY5YTcwYUxEQlFneHhHai9mMDBTSXNnUjJLWjM1ZUZJNDVFOHc4K0tBOHh4cGE1ODZpM25VZGJ5c2c3eThFZENlUW9sZVo2QnFDV05TYzRFY0h2QVIxUks5eGxRYjRBM3dxZW50cEVDVUE4UTBycHRPY3NMU1d1V29jUHZFRlJmR0ZDWFMvaFczRXV6dktQanFnUlZhMDVxby90VVdmczJwa2FsM085SnpiWmx0TmI0WXFUNHg0RHBSUmZRcnJXYlI1Z0VsWDBxd2huZUl6TTFPTVplT3VBKzBOc3ZNYUFYNmJacUdzU2xBNHpQSWh5R2FvQS9PYk9UUmNaV0JzOU5JQlNCbWlFTHRBNWhIS2ZDZVdJYlo2bWxIRUswN1BCUGhxd3R0VTVmWXNmUUtmYWNmQ3d6NXFzZC9PUWV4U1pkVXZRWWJ6S2VkZmhNUTJPNEtNSk80aVJ6M2IrbFo4ZzlzK2dpb2VJMEdNWWtKQjJ5Q3QydnBlRkJrbEpuY3h3STJ4bkc0VHFCNGltMEo4YS90SGxMQ2xWYkdyTGdKWkg2aDhpSFV3R0V0cFJ5VlhyUWo3MTlKUWZvRFl3Y1YzWjFMRUZrKzhkakJWa2lqSFNQUHlQVTcxUHRKVHQ2RFlJZDA5UGdoeGZURjkrMVpqelVOTEU4aHNwU3duaGN6YXZSUHFaQkJZSk02ZHVpMytaaCtYc2RjY0pBTy9iVE1pOVZ4TkNLc1dVVWQrSmZ0ZTJmV00vbDFRR1h3ajRyQWRjSmIwb0V5TmpaN2YxN2paN3B2bTg2cDlZVnNZL01EVlFPZHBSOVFLZWFVSUFuQW1EaFQ1cm9tVnBqWDZWbmt3S0NOVFdFQlZIaGxLSHptZXhUbXY5dmZXaE9sQ3FWVmRQTTFZVjRVVlJ0RW1tZ3BvVU9seDFxWGpYQUNjTDR1SURLV3pScmtVcFJDMkZtUW9FWW91YUpyeFhURHZ0bWNZTmVralZkTTA5N09UclIxWlZTVXlady9aRkhXeDgxR2xuN090SlN0NVFPN2NvZzREeE5FRksyMm5oYldZWlRvcjh4dTJycmk4aExpMGtuZmJRMkI2ZFdLWndpQlZ2VWhNZ1dCakRzQUw4STZNOVpGbmw4Y1BZMk52dnMvUVphUWlZN3N6NTNlM1dod2xVblR0Z2JaZ01LZEVCeUtsUUVGYjZFM1JZQVhlb3BCU2wwNG9oMW9yOVB6QjJCR1RsekUvdUY2ZktndGlzeVY4WERobFRQUk14bEwwVmZhTlNreW1JYVcrK3hzME94Ym1mci9jTExCaEw1OEo3Q0hhcTdIa0V4cnNEN0swRVBHL2JGc0prYVA1ejArS0ZZeE1KbzY2eC80WVJNeStRWjBJWkxjTlpwc2gvNEgzRlIyWW4wWjJ6a2ZXcVYrcHl4ZnRlOURHaHBGSXBGL2lGOTV1TW1kNFk2c1Vlc3cvcU5zcjl6TmZQYTBicXNMRWZnSlJ1ZUUwd3ZOYkVDMzlUbUpvM1NhczhmWEhwVzZudjBVS25sSnFSOS9aNWNRbXp6ditzWFlNVnpxRzVXeWJRQkdzcmdzVjlhbXBsQVFFSmtORGFlWlVyMnN4cmxKc00renJZeUUwMVdZL0ppZjJUa1hyTmN5THYra3c0SGlGNEt1REpBd2gvQlp1cnNZeVVPZnlMM2xrMDg3cFIzVFJZN045MHBoa1VGdnBWVFVkVlN5ekZUcFVDUUM1TU5TZWpMQ09qMW42NkVyOEF4YUJJWWdLNjlPZ1FxVC84ZVo0NWJkS3dCcm9sRXNzaUZNWktscGVxV0VkSk82T2RxUzd6ZTNqSndxZmYraHFwQ0E0MTV6ZnZ4cmpMdUR2aVcveVIzV3FnZXUvVU94U0hZWmY4dXBodTJwUE1wZWRkK3p3bVdpMlB6V201MndON0FubXZldHFoZEdIMFp1MlQ5clY0ZXIzTkZqMG5qQXBOVElxZnpveG03dkFDcURNa2FwcExYblpsdUltMURkK3hTRVNZU0N3YzFHalhLNHB4UDgyaUt6cFYrb3V1dlZJSXpvWjZRbmhhb3VTRkFIMlVHNzZYUkhLM0JsMytLV0RLMmNUTHR5WnFIQXZxaWtDVzJOUDhPMkF6L1MrSlE4NE95L0pjVXk1UG9OK0o1NmpMS1gzaVJtVjhiT3BZNHZKN0lPbitBWkcvNjNTV3puazU2KzBmNkpEeHJDT2thUlNVck1GT2hleVJaR1Y5STlZaXZ4d2xma0d1ek9yZW9YUUhiNDROMWFNNWVBNjNsK1RqQWxWNUcvdGRFTHhlMWdobDhPMzRWTnE1bmdJTHQ5ekJWVHJMSFBjL1pZSWJlcEFmaWdjamFFRllDcmdBNDlpOUlDZHFGUFg1dCt2S0lWbHBDTUpBUkl6K0NwcFlLWG9KOWovOFhFVXAzKzNWVG5Na0E3S25IcW94MjdCbEptNlVhbStFYm00aTRDQWpqMlZTRE1kV3lxa0p3dTlURDRUUDU5VzR0L1ZUZFJjVWltSEtzbnE4TmEvZ0FkejVmWHNoYUx3dUxJSTdZOTZHMWdwWnBMU2FFdTZrZTFBTGxEM1ZOMjlPNUV5MWxSOWswR2ZlZWtkWWtXd1BULzRoanJtSjN4Ri9pNlR4d2RoSkJaUDRYaUhBelBOMEZ3Mm4vR2dtTTd6cjJCTVZQNVVKcTJHSlptZUExUmlXZi9wektUdCtPOVpZNnRwNmg2TU04Z05SZ3hRZGFKaGtKTmZYNHV0MUc1dlVJVFV4OTNkSzZ5M0FZcSs0bkJwV01tVHlxQldGSUlxQzd6dEF1OW54OEJ4US9hVyszTVFIR2RyR3QyRUNsOW5BZ1ZVWVRrSXdXWGxEQXR5ZVpweFcrTkwyOEtBNWpTY3JLbUdBRUZ4UXRqdGViUVZwQmlQcVcwYitOaFBGdUZJdzJZQkFsWEdXZFNJN3ZVOFZySWw0MUo3eUU5bFNTK2dDaS9GMHFQaWVXK29jSngrUGtGWE0vT3JCOTFOQUE5YmpqNjBlcHBweVRRRzQya2FJTlViL1lsZmptdSt2TC94RVdtSXlRWTFKdHlzZkUwdnAyV285WEl0eWFBZDhKZkNpS1JOOFlFRWdxUlhEblNhMmJ5YXF6Nlk2SlNDc2luRHdwMVJYbGFnekpoOTY5ZFNYb3h1aCszNXlvTlpQeEdodFp3Q2Mzd3dWZE43MXYra0pCL0twYm1BUTZxOHBqVXQwOUUremhWWU9OZWZwNnl5aUdXUzVJVTc1WStvT00wUWM5SCtNc1EwaEFVNTVaOUs0VUdRTzd6NDJyUjJpemYrZFFkb2JDc3FjRWhhcXZwemprNG1HQ1ZrN3daM3UyM3RrUXFhTzlVY042WSs1N3Y0ME1wZDliTk50N0JNMDNkM2ZtWTJCSTRCdTM0SDkxcWxlQi9aeVVIVWxoRWpubU9SZFVtaWpvNmh1a3JsY0djUWNDN1FzLzllcmVRZzNtWSs2YXpzcU15aXcrTTJJL200aHBGMU55R1Y2VGM1dUlwVkcvczN6OFNxSWJseGVKclNjOTI0NkhUcGFPMEVFRGdRSnFPZFpEUmt2VUZnVTgwdzVRdVRCSWFGeW1SNS8vZUVCSkIvME82MHJmcXBCclZLSHlYY3VGWk8ydXFTMnYrTHFOYThaZ2ZxYnRWOWJ1SlJXSnlrTzczWGFYbHU3L1Byek14V0d5bE5PR3YxN2RleUc0dUwrbG53M3NNazZPS0JYR3VUY2hCcWFIL2NIcXE1NkZaY3hheVJDVjJQOEl6cVJUUGtuTSttYXBmTTRsU1lsRUlRMk5pNmYwQisrQkY0bzhlQnB4VXExSXZaaXRJclZMZnZNaVdIL3R1dVBoRlFlOFNIYlM4c2hlMmQ2cTFXRUtpYk9MSllzUjE2eTR0eVNJQUNNQmJJRU5Yb0t4R1lFWnpIZEtOeVFUS1BrdHJqRE05Yk9vWUw4RVlOYUdiMzFocEtZc1FzQ2pUY2crbThRVEpueWJsUG9rT05Wc3hzcEpNMDZJZ3VZcHJQbDhYdWdScW9SREdGeE4rSGJiODN1YmtIYmNVWjhuRmtTNUpvcDBYY1BqRDFJaTB2VDUrakI3Q2pIQTBOc0NxL0pyN0ZrNlRaTUhreUY3N3dxVS9BOFlkbjBHTFcxWWc4WUVPUEFFdGR5a0xpSWJKQjZ0UGVlVVZrU3dTQ3N3QnZTY0dkYk1tSW1lbnE1MHE2M3BkK2ZTc2lidlgyd1ZKUU1neDhSYUZpYWoxcGlHYUxDS0Yyb3BiR2FTbmkzQnlVaFlnNncyV0U1cWZVaUJ6OHpBeXlMTjJJbWs4L2xZZzNWK1JxY2YxL0p1UHZWL0tsd2g1a0JBbUxUWjBycFVEZExKNlNDS3JvTEJOQ2VmQzJXdW9CSCtFSDVhOEExREdxZERsaDZEdG01dHhTQkZvUkNCdElLRUJIY29zN3lWNzVoSEE1dzBpUXIrNFdiejl4NHhwQkZQNFlmWERvV2FRQTdrQk1oaWtFckxCVVR5UTFlTVZNQzVJNnV0aWNPUHVYVW0waWlJUzJRaVU0WGlSVXFxRmJaR1JybU1iWnBXSDhXQWQyZldmdWVWRDRzcWxkMFRoa096SWtoc3QreS83S1owaWVzWkJrN0ZhNVA2dk5jSnkydDVpK2N3cXlKUXpVYTMzRUlnMEVzSDRQRXIycVdqNHk1MTRWRlVqQnlJSVpWZWc0SE9qS1N0VUNsWlhmakppZTFDSUZPN0ljbDFEcWcrNEhjT3BZbDdMSUt0OGtuazJLeHM5ZFdReDJSS0lpWTlxQlpkN3BoQklrNnBGb3VoekZBeXpPbkZsSEErblR4ZElKeUZlZW5ETDgvVmtjS1JhWlgvQnpMMDI2eU94dStEdHJmVjQ1bG1zTG9ob3VHS0tia3FyYXRDWmk4NlpFa3BpYkQ5TVU3Znh5Nk9ucllxVlVxTDg0dkVQM1FXU1ArSUtRbjc4alcvRzJjNTduTnFUVVZ3WHNWY3YzcXYvWitKY1dHTmE4SW93K3Vpc1BTSEdDTGI4cGQ4ZDlFa2VzLzJqanJqYlA0WmVnc0RLazU0SE95QzhvaDBpdG42L2xpKys3WmNkOVpVRGpxZ0dwUGVDRnNlT3c0cjV6SVFMbWxqSndpenVpQmpuK0RnVTVwYjBOYWdPSDFVdW1pL3dKbWJqZjVzaFM4OTluUkNsOFF2OUhjZjNWbEJJSHFNVUo0OHFGcVBDcW1leGkwQWdJTVFEeWlFSGN2ajZWUWJqRG0zeUJ6dU9nV0hUZUhLQVdTSVo4ZTFPdkNIdmRhVnpPbFBIR2dnNE5KTGVKRjY0MkNtL3p5RWVwZ2VERVIyeDZRQXQ0WWZOdTh5djF4bjdVcDBSczZBaitnRXJHeFVldy9scy9EaGpmWExqcTVJOHZ0cXo0UTdWbW5VVVJaOVU5cElPWnZNMW5DQ3luaC9MdU9nNVlMTldabVBtajZvSEpUZVpiZjhyN01OWVJyMzJYY3JFUHFUNjVOMlVBVnZkRFRwSjBySGV2b1hqYVozcWgweXhMTVB3MG54RVFqV2dvS1Fla0pzdDI0TFRpZzg3TGFDZHEyUzVadzFqQmxnOHgzcDFOVld3V0lLa01mbEFvQ3Vib3hEdHdSWENkaThwNUc4SURKTzRObTJxc3RnUGZjMG52T3plNlNCakZRUllxMGpuaTR5TVlNMmJOaHgvT0FOY0FZYmplWkxVek1QQk9Pby9NdkNjN0JuTUVDZ0FXbjR0SVJGdEY4MHVncENvdDl6b3BVSVpCU2VPNWFvalBrMnJDd0JLdW01cWZFZFhNekI5TU5zTUU1MWJDS0x6U3lEWjVpRHIzTGxTc3hUenAzZWNZcW4venNzUlBGVnBsYmVDU05YR29CZGRvOCszVUxJQS85Mm9Mdm4vbEhUdk5uYzlaaTVrM1JMWmo2empGUG9jNkdLZkxWRHo4VFJyY3JDUWM0SWQxRThyOUVxTzRMaWRwdEg4L29ubnQ3L0JzM3pIZ2lyMGptNkZWUkMzWTVFcFhqYUF4YkhkUlFuYTZrVTJpTmVTNWd5U0Y3QXF0OENjU1dNanRqL0xmSk1QTHBCZ2FoSGRIUmw0c1Q0L2JMK2w5YTlGUmxEc0pnS3VIeVZ2b1VldUEyaWQ3bmt1STBCT1JwTStlN1IybExLUnU2ZEkxTnFLT3FVUUZYQmFsb2NkRHBNOXhaaVB0eVBJd0RZa2E4M01FcFNsajhLWDllS2llMmlWMHBUd2RGNVhOT04xWVVJc091dkIydEN3UVNtengwUFFuMGlQSG04UjJKSHd0KzYxL1U2dUQxRktucXhxdGttN3g1ajAxZkJibTIwUTZCSFQxZC9LMWl3dWR5N1JBd1NENHIzd1BDR0FCZW8rTnQ1dGRLcis5cGEyVk5GZmZLV0lidGZhRnJtQzNGVDZMb05DSzJDbFFLbmlYRzZTMUFDUUh4dWlza3RhSUcycEIzUjhkZWVNL09mM01GYlpDeHAxa2p5Zzd1Zm9PUnh1ZEJIS3krNlZQc1VsQzljdE5mdEJEaFJnOEQ1TTVKS0tHWXFURjJRVFhDZ3FBY3AxTTM1ZXdKaFIxanNTWXBPQjk5ZjZwa1A5TUs0K1pKSEp1T3NZNW5PUTBQVi9DVkFORFR6Yy9vZk11ajVIQllOVk5aOXRPL0txRCtwNXMzL01nOUJnTEJQTVlGNWNxTkVSMFpxOUlSbE5QTUk3bUNLcXowWFMySWlNVjBsY3JCVlpyWnhqZXhSSEtZQmxxOUZYeGh2b1J3TnN2UXJJV0FuV1I3akQzQTZBSklOY1BIM05FY2NEQTY3SnVnY2ZCM2tYdGU2aDFsc3lON2ROKzVCRGZhbVNuMVBJM0FWeFc2c0JnVWdJNG0xb2hRNFVrV1ArSUJURWh6NXR4WS9jeFZjVW84WVErT05welQyUzk3VDgwYUZvWnpqV2pDL2Vld3NxbzExMkE2K1l2QldYdGc4UnVTUEZ4SUNXa2ZmMXFTeFArb2FnWEVpWTVreDJBWDlENVAzMGpRMHNocGJKc2xyNUIrRkRPQmJxcm9JdTY3MTQ0WkpZdXpaN1dveE53Vi95UGRsaWJ4ejZHTzNkektVVnVDTDVCbFVJUmoyQ0RmNzZyUWNkOUVsWUtvWmJmOVJ6UWg3bC9KM1hDRVNWaE1iMW83V1BTakNKYzVNbldzdlhTbGNuZ0VCakZ3MFAzbVNsNnNHYnFWcmFnWHczOXVtbkxOblYzTWU1UG1GOW8wWWNsL0VTSjFucHdHM3Vka20zcHl6d3BjNFkwaWZva2NBc0xGTTdrUXppRTFNNHVNMFhjSTVheTVCekorUDRRRGJlOUMrTm5vTVZiZldFc2tDaUJnNlpUdi9aWHBIeElMZElZMjdSV080T0xYWU1lWXB1Nmt4RGJ3dEZiWUNJRWJlUFgvTkZpV0o1VmJKbTlRa24zY0tKRUpqb0RmNEcwaUE5YlNPcWdTaEl1WUgrZzhDSnRReGRtUGJnaEdmOUJIeVRDTWUwa2d3T1JVMy9JYVJDZGRPMlFocDNMV2RFT2VWY05tdzFZOXhQOFZlUGVMK1RXSS9zL1JmN3hrTW8yNjJYWVNGUFJkQmU0UlNFLzZiUStXV24vcnU1K2t6Q21hNjR3VlJhSEYxN1FCelJocEMwK3dnRmZLcFZHaXBWMTFoQmRSZ2xMdnBFdnlMOVBvN0tuRDlWaUdxSk9sdWh5enhDNkgxeEhDYVlWbzMzNFhyRnlXQzNXcnJYdVQ5OHZTUGNiNjhrM1l3SnB1YTlLODg2bDhiN2JPcEpuM3N5aWE4VnVwQldycXZDa2NrcDcvYVRlUVhQK1lNQjNWbFdmTEVRV2EyekIwZFdVUVRydDlCODZucjE0ZStEcUI2bEJmL2FFeExhTmZlQVlYaE9UWk9QWGlXYzdvVW5Rck14RTR0Y28xa3AwNW8wemI1SUdJK2w3SG1xbTYwNFZpYkJSL2dva094NWt0dkZPMG5PUXYxMXI3MGxyS3prOXVxUlFRSDBGLzI1NEZyVUxRUWpXbHBVa3RjaEdGbkZsVmtONVZsQ0pDMzJFSEUyOXBjQVc0T01ncHZoWHlKQ1BRYm9XL1B0ZUNYNmpIT09mOUIxL1M0M202d1ZZUGFlNzM2QUlxS1dCbU13blBSaUhrOG5Ed1NvV0krVDVMaHN2TkRCRnJpTkJOUFJISVRmQm5QZ2ozMXRrSVNTTldWOGFjN3A0V2R2VmxlYVU5Nm5zN1dXVHNoSktjYWZpakZMcEt2TURuSjM0UE9qWDR3NEhwV0tCZDJvdWxkL2J1Z001dFVxaE03djRmdVJtbzBVcjRyNEc0eUVKQkV4bmNHTDU0VGlJQTJxOFRUbEI2dEMyM2RjZUtramp4RmdZdjNKcE1lTUdRUHV3NzE2T1NxNVFYZG1HUWxuU0pqVXhGVks3ZzFyLzFEbjMxTG5pVkZHMEhBTEgrL0tQU1NiSWRtenY3Wktvb29SK0xtSGRSRGlBdzNFc3RNdXd4VVpnSDlRRnF5bW5oelFsRVM0L00zT3JGanVvd2hrRXdqVENvd0NvY1ZEa0FCQit6MjVqSUdROUpQZkZoTEkwNmhLQWNvMFc3MUZLRlZDaS9pOGpnRDU0aE04a2tycTg3L0trRzJCQUNjb01CUEpHSngwL3c2ell2eS9MeE9MNHJlOFl3N2Y5YmhvUk5YR3kyMnM2QXZEZUMxZTJ6SDczb05XMUQzUTdaODJWVlFwWjdHM2pLQWRjL1ByVVFGNmtVYVB2Sm9RejBoWmRNTDU3aWxtVWordmN4UUkwOHZFblZ3U3B5Wjl5SjBFTkhwMWN3SmFxN2hCRTJRN0NIQVlqQkd0b3dkVFd4dEl5N0RjTlMzVFNJdnBLc1JGV2NtYnovOUdLQ1pWY3NMTGNEUXM3WEp1Y2V5bnR4WW95YUNIN0IrYS8yVjB1RlAzTm9lQ2RVNFFsWDFmYmZ2SDVyRlJiV0k2STFGRERDNWFjalFIUURmUnV4VnF1WFlIN2dWUWpVVVBITUxRYVUrUVplSjBXcHAzOERtV3JscXVOQ1NoT05YTEl4bjRIRjNXTTA2NWJoMkpQTFoxbC9oMzg1T1A2MXRwb1FRd0tFOHltZW5mVE9YMWtJM1Y4d2xEZVMzU21sTWoxaXNQblowaldZS3F3Tnh5bGYxdUFUcmZtUjl0L3hUaVNNdlRSUWhQcnZkY01zYVFGQkdKbmJ6eHdYcFVibnQ3WUNrWVNXWkczM0R2SEs1WExIOVNhYW50NlJacTc0c2owN2xER1grb2ZuVEpJMTZNalVxbjhNSVFmRXNMTEs4YmF6RTBvZTA0WnVITHVDcDFzempTaTZHWEZpTStRTGNMWnZhTkc3eit4VHBOM21sOGIxOHRwZ0c5aVphT1pBeEF4UFRuVHpHbzc5aVNhMjkxdHFyaEd3c2tBNGt5cGUvOG1kdUNHS2JwdGhYR2dSOUpuS0tpeDVCWDNZU2FsdEFhWW1Kc04yMmFOVDFBOEVZL1YzeFp2MXVNc2cyN2RJa0NJb25rTEg2K0JYSEtPYVMvU2JZZW9rUG1va2JHZythcXBHcnBSaDN1R1dUREJ6ejBJOTR3NHovV1RiN1RMN3ZpZXVpVER3YjZwbEUzRVBvc0lMZ3ZmNXJSd09senNycXJRa0F4UW9lbDdzbmJKWnl6NjR3dW0zZXZmS0xEc3VnTWpjV01NOTIySGZ2d0VKOGRTZTZTVnArRlphZjhDSHZTYzNTUTFacGlEN2kyUHJjVFNjZUwxYTdpaVZvUmJ5YVNnMUFoV2lqaG1sYkNONzJRYnB2b3BLdERzUUZZWW56V1psR3dPckQ4WVZCekNtcHNuYjBHVjE5NzBTTHR5aXpCdUo0Y09yYjJRdWw5WTMvS0RFL1B4OWk0ZW1vbmZZTGtDMEF5YlZxT3dROS9KL2ZFQTBjTmZLQ2xiSFVOTTRNdktmalBpcWxMTERIOE1wcm9nMGY5WTV4dndsVHlUR2liZ1BLSUt4TlkvcFd2bC9wUXp4VlpYMjFEalNwd2RtaU1TaEt0bWFHVm1IdUxGVndRcGFzcDQveWd6OUhrUUMxZGNsTVdlUU13Y0FwU2Y5c3JXRUdPMzgzMmczb1c1bHNnVUhvaFlzMUpsSjJRYmJZWkpuRnV5K3Q2WTU4djNEbDNNRU9CazVkSmplSjdZYlRNVTZXcjQ1a0hIS3lSSnRQZ1VWUk8xRkwyREdTR2kvSkRXTUYyMERWNlYrY2pQWTVsMVErZStHRjh4dUorbVRGMEVKaTJCYit2Z1UwdEtmaGFaMHNZQmFaR1NFMS8ySEl1YnJEVE9ZeDN4TEwvUVdKNVhjdUY3VGtud2UwVE4zV3BRK2h3cXpvZUlFNCs0aUd4WWMxK2tXYWlCTzE5VEF5WkUxV28yRm1OMHZ0NFJhUTh4bWYvT01mZ1c2SGowZmNLa1RWQUgvWWo5WGdMM3RRcHlFUXg5OU81TVI4WHM4KzB5UDF5Yko3TStxalBRbElpRUh2V3BQaHBYRG44TDlvQXlrZ1ZCMkNOUU1taSsycUY3UUgwUzVRRWZLT2t6MWorM1FkeFVLc01MN0F0WjVtdzNnRnpMVWVPQ0J2TEhEWUd1UGhuc1FnTlhoZmJhcTF4Q3RScWNjSlE4aURsN2ZqWjYyaFlpVVg2bXB5VWdndCtNUXF0K2tYNk1BQTE5SnhBNVBRQjcxeG1DMEpRMTFRZGV3ODRzSlROTUZtcnJhZnJwaTlQU0pnYjgxU3Y0WVZQSU5JRkNaYXY2elo5TU1lUXgrUi9QdkNpVHoyeVZLZmpoYjRvOUxFSEJvZ2RaSlkyenp4VTV6b1YyeTRmNkM2ampkLzdYN2VpeERwR01vKzR4MDFIUGZWQ2hRLy90RXNIUEZxbXhua2FEZGpQVnFnZG5xdUpWTGVWbXBSYzBXcVg0M09XZU5zZVlmaDlxdVZveHVLTFY5V2NxOE15TjB3VmRmUy8zQ24rM1Bid1VobFlYdVprSUJqd1RZeVZjdlBCdkxwQ1ZXd1F4TEYyTzVqU3ZqWEtQdlVQT0pkVldlZWhzL1BWRERTbTVZVmtRMUVGbGVvWDZDanF3YVZ3bFo3ZlY3Y2ZNb3NleHVNSWloNkhwZm4yb0FRK2h5TCtaWVFOYXI2WmgxRGpjY0RNVHFoUlkxZFl2eW1Ndjg5dWs3a0tFNDRqVllST2U0VDVrWU5CSEFPbldBaTF0OGw2OXBFUnZHcVJzVmd2blU0N2UzQ2lqSEdRTUhSRFRqbERZS0NCbFZVajR0TDM4aEE0T05yUE10UXdYc2htTzI1QmhtQ3BZUWE2UlZRS0s2OGdRaVk5bmd5NlJNSzB0elk0Vys2UWYwK1orTkpNSnZRSmMyQjltNE50ZUNwc1RDWkZKVi9aRW9INlhDbFZ4RmVINlJaRzNGOGh2cDJycytNa0lFOHJ1KzE3UXU0R2p6dTYySFlCcFhTMkYvNWZreHZVWG5WZlF5ZnRjVlAzL21iV1B5ejF0QTNyb1dzdmJUWmpoZXg5NTBZd0NtUUVrVUx6U24zUDhnR2haVnZyRm0rYzAzTWhXUmw0YUptbGNHSVlPUnduSWlXOHZIcEFuTVFUWTdub0RIZ3g4Tk02VW1FR1Z0dDdnWS90bTZORzNOQ1Nna00wSUNGQjJxYk9BWURNbGdSSGNCNnIySWdKSTRXbVhrRERmdE1UM0s4M3VVQThtNjVOakoxUktLYy9MK290RndvL1lPakxReHNYc1RxeGFkT3BDTkVhZW5ZVE9jRDNUNDkyUTU3bG16Z24wUVYwcXJPRTh1ZWRWdE9ZOTBENUYyRlp6bTZDVXVkWVIwdWlPdFp2czNHcVkvQ0xFcjdsUWJRMDJJTWNwRXhnc0oxQ25ybnk0TlhJM2pYUWc4aFhhS2dHTm1BMVpRNFdsaFNBT3A1bkc3QkppN0l0ZUxjb0w0eGZKY0trRjJ5aTRJRmFKK2Ftb3ZSYTNNdXVMUzljN09xd2pEQWs1V29hMTBGR0xmNi9uWTVsZ01Gd1pieVB3ZTdnVXFEOWViMEtyWXcrdEhtOGIwMlJFNGlUYS9rU21EU0l0alVJcVlDanNZUkI0b2xMR09mWFFWS2xhQndhYWxuTkIyZ1ZRMFozc0R5d3A3UWpGMmpuZVBoUENXRTV1Rmx2dTJMTC9CaEJlRzI2a0JlWEljMW94djlRRnV2TjJHaG9WM2xmd1VQQkszRTY1Yld2Y0hFZk1taEFxZzhDVkJjT0g5UEkxOEtnUjBkRFFqZUp3b2E2QllMWjhRc1VSOEJ4eXZwb3hpSnYxaFJjWlgyU2FNK0FpYVNKekg5UnhXMi94NUxvVGpYSGlUZm1EVnZvZFM3dXhlWjRldXdzQ1BQNGdQN01HdDkxZ1hvd0x1dy9PYzh6SmhXOE1CUlBFNkZnS1Uzbk5XdFBIdmY3NTdwM2grRDJiK3FVWmtvdm1uQ3RNRDRzMXgyMWs4clhjaVFwbFBMT3hHOGdINTIyRVN1cVZyMkYyZWlPcGM1Ui9IVjIyMmVzM1dsa1pMZmJJTlZFMnYwYXQyeExad1FYWWZKTURlRDBwV1FwQ045U2F5Y0ZVSWQ3bWNSaE8wekNnWkVGOXNDZUgvSEl1RkI2SmtDcUUwT3NpL2lock51b3RBZmY4cmhWVWs5L2xnTzRzSlpjbnljaHpiQUZLT1VZbUozZ2lXalpuRmhJUEdud0d4ckhaeHRyeHR2NlNHeEtJY01hMzE4RXMxVnFqTDZ1cnZ6RkU2a2N0L3phcU5zUnc2YVNzdS8rSWtTOG1jbk9xTzFobHNDYlVINStFcXNDRXJZYlorbTFxdHF2SlVTRWUxWVYrUCtuaEdlNVdxamlXWWwvUmNXQ3d4V3pwOGkya0tQam5Sb2hueFROaFJiQ1YzOGVSczJSeGJUb2JRekt2N2xubGlCUFZGNStSODNKSFh1S1JlbElqQThCeE80TzRGVjhta2QxMjRiSUZyZnBBaXRDWXk3QkQ0Z0pNNjdYY2luN1VIcnlwMm5tb0VaRDlVV1B5elFyM0RpMC9zaUdaenhXMWZObkR1RjhIb3JvMnVvTWhxQVVHMHJKT09YQTVyL2F1eWpvMzcwbWhkWnVnT1RTQ3dZSm1tRVVJMFhpNy8zem9WVGpFUW12MGx3djBXNHFOdnYwa0ozSmxHMmVFZy9wZTk1MllvVjNZb2JaMnRwUGxibGZXekVKYXd0VTNCY1NrUlZlOGJrcGthWVRMUmRSa3RreFM2UVlSUmNNa3ZQWDhHd0R1Ujhjb0gvV2cwdmhpNkh0SmpjTVBzbUVaVFdZU3BzTWxEY1VSOWJLU3ZubDN4Mnh6NUpBZ3ZCVXBNb05vaE51SzNtTys5d0dYY0VkT3hzVmFrRFBhb0RrTC9JTkhjN3JLQmVTdFlHc0w4RnpkMUkybXdQNFdaTk9XQktFNUJiUXVpS3BpYUdIZXhJbjludFI5R3BZaDBuTWMrNHlPaTllSElWQUJ3eTZGVE5TS0RvTVdSZTFXTTNrUWhrTStpb0JXWC9Bd2pUR0srUXBPM0wxUkdUakVkOUdLU1JPWUpUb0UwWGliczE0amJEMTM2dFlJbGdEcWtGUlI1TlZqSHovMHpUelZvRFU4ODlyaTlIeUNRWmpTV3lRRm9CSXdxc212eXdGR2c3cW1penpNTG1TTmVrb3FSNlM0dTFia3F2M1pLZVpRK1VaNHFleGhPaW9xTXlGS1dBRkNGSjA0c0dzbHJqbzNXN1FyUGdreEZldDNhenp0U1JOTkxHejQ4c0hpOE5ZR3kxei9XbEtoMFpMdnhvNmNOVHMybStFV2tVc1FWb0JCNFpoU0NxcTNJZEhHYjJPTjZtSzZwWmsrd1F6cWRNRG9FVjZjdlJiVThoMkdTVUp2N3VpSW1uU3hFdlltVmM3NFd1S3dPY0dYYXNkZ2RBMzFoTkxPdkNKOG5Wam9vTTVXODUyYkV0dHVEckwrWERaNVJnby9QZmN0bDdXS1Z3SktNZUt3SW5pYTFjRDhaRU01YXdRWjlBQjUvNzBrS3MyRW5yYTJSUlJmOVpiT2RNMmdjTjVmWlJSNzJnMjI0SzlCYTBUcEtyL1doWDd3QVRQM3Uvd3FDamJzZkhHWkZ6NWg5cWxhdy9OWjA0bnJrZDJhUGJlbFhVeEdrbGttamQ1QXNGRVJRYkI3a0dhemJKSEZ6VW1rcXZMK3VNRy9Yb2RpaElwaWFnUngxWmIvMnZaQlBudzh0bVIwU2RTekdTTDF0eWdVYWF5ZGV5NEZrYWVDYjl1c2s1QklVSkQrOEhIdU5taXlpK3ExRnFqUnJKcGRmRU9vWmhQTEVMcHRKa3VuWnYxL3JJREdzNzhMVnZCR3d4TDJVL0NsaE90dE5HOGxJOVk2cDdDMzdPdW03TE9GU1oyVitpN0t5L2JHUWYvMjNvclJqQ1hqK1ZtRk80WG4vV2JGSjZDOUZRNVRUcXQvTWZ0SGpOQm9uTEdOVXliOEdhSkJEaXJTaHFRN0NtODBEekxiaVo3em9VYXQ1K2lzeGhPRW8weFkxdlFpTW1PMkJHTHFkM1BLd3Z6RkF5eUYvSzEwWFdKMUZnS3BjVEFFbHYzSCs0TkUvMWZFQ0lmTkUyNUgrQkw4MHRtODYzbDRKZ0Z4azA5TlN4RXlzYVpKT1lkY2lKMUFPK2xQcnRWZzFvckhTdjg3U3N0VHBzN0ljcHpsbXhqQmJvMjdUUGtXZ0UxVWM2b3VPMHVYcFFwSFgybEptQWlvQ2k3b1JEaGZXbXpPWHlxTFFuNXpRRHplbW0zcXl0ZWg2WXB2MGtWSTRBaGROV0t6QlhNQU9kb3pwUnhtTmJMV3lnb0xVSStvMmtNTUJ3djJ6eE5taHdTZTZjaFRxalhjOWpVKzVnZSsvT2o3bDlTTUYvVS81bm9tdmdqNkovWWVGRXhud3hzQTZ6L1ZmR1dIeTlIYWRTZkpLalhGVkorUFFXVUxJTS9pcDM3bElpckJYckdnVDhMSTk2M2xaUE9DT2YxNytQdWF2VzZPY0srWlBPY29zRktRTmMvZ2V1NkFiL2ZaZzRNMzcrZFVuUFBNT09ETEVJcWFSZHNITnVWVnQvTFk3TTVYMlAzU2J5aGpJb3RlZjFnUjJNREZaZGJmVEdEM2JoSmdxekFJWDlPWnZiVmU2MkltWk40SXhsaHAyYTJNNCsveFl1aVpBdktDbXlYeHBpOWY5RDcyYm93bCs4a2prdTgxSG5iZWhMa3dmVFJlbVY4MENQM0FnWktVMklOdzJmT0lnNG14VDIra0cyNzlLK1IrSlZMSG5wc2U5MnVtSVdzWVpvM0d6TENkMXo4SisvY296R3d0U0hwYnluM1ZXL3V0OWlNMndLL1dyWkVBMDgzdGpzVmV5Rm1SUjl1T0tFTzRldkhuREZqaEt6M3Zidm5vUVg4dEMvNmR3cnBqWUQ3OXpRNGJyREJ2U0JSYlVFK3FsWDEzcjVZTVVzcCs4U0JpaGp6SWNPNXpucXgyMTAycVJnQ2pPcDlvb1piWGI1eGUvQmYvMnpiMTNVS21tSEZodHBtSEsrejBEVy9tbnFUMmFsMUhxM0tmVzN4RnVrT0tJcG5HVC9lSGdld2EzWEhScnUwQi9mNG9XMDFzaHJKZXhjcDdzbG1LQTdvWWI0ZTM3dldUVGUvays1bDRSS3p1YVdWZnN0M0JpM3EvOGZTTUxhdWZMWnVFSEZ2R00zWUhBVElWZzVzZ1hpeVhrUVBGbllaejRFekJyT2xzWjRCUTk4MVRKNHc2cHpaTSswcUt5aFpPYW5jUUhZL2grcEcvODlXaWtzZ0ZpR0ZQY0hZTnRaT2dpcUNDSVJSVEdEUXYwWVJaeVp0cmkxYkxyOGRaYXBpVFV3SkNXZFEvb2FsY09NaVdoRC9wbWdkVnMySjhrWFhvT3IrUUR5VnhDVkwwcHlUZnZTdmdvSUxnR1lEQk9yanNSZGs0MWN4TXpuSVNtTCtHR1VvNGQ5TUdURDBPVmZpaUo4c0hNYzh3MDJmUGpWcitFdURoQndHMzZJWHJxYUZWMElKaDV3YloxOXQ1OFlmUkJKVkRrRDZxT1ArU25HSWxSSUFtTzVYMHo2SnRkM084Y28xYysrdHVObUtFS0dvY2lNMlZxdWZDRlNMcE9UMzEvTkg4NjJlNEw5ZG5iYUs4ZG9RbHVEajZaYUhjbkZHYUsvckozM25paVFJdFhXRGE3TmhhcHlVdFYveHhCNXZnVTVWUk10TkFUN2hBM0RtVDlIME9rMU1LdDQrck9qdVk0R0dxaXFWeDIxVXQwT0RhZkNWTHp6T0trckRscW9OdjZsbWJNd3pyVGFvbEI5TzNLOG5YdU5PcHZZaHBnb1QvQy83bHhUNDBVSDk0ZG0vT1IrZzdhSFpwM0g2MFg1MTlTbFpFdFduWnEzVXlsamI0c0N6TE5xbmlXcWxLTEhIemRsLzNFRDAvS3krV0VkUmFmNHFVSlJaMU1NVzN4RUR2Um05RG0rL0N3YTc4bkNsdUtCR1k4cUhXY2VOUTdEME9rZ00xZm1uOVVjV05SSEpaT1dUVUwvR01qbVRjY2d5a0p5THVVdlQ2QTlwNFhaUDRsajRtdFU1a2JpSjlVZzFMS3BpZDVHVjhzeGlkK0wvT2tYRlFIRlVtaXdBY1VteS9SQXo4THVrbWFFdDVTTko5Ym9BUlM5aGZyL1VDRlZRREpMSUhhREFGb1Eva3pHVWpJUUgzSTdpV1ZlSHB6Q3dGdFIvVWlJY2hsSTJSek4rQm1za0hVcm1qS2UxQ0c1bngrYXNndG51T0tTVjVoOE4xMTZZZlc2NENLdk5CanptSkMrM0NydHRGbEZ4NWg1RjdRd21zQjZyRTNGeTBra3hVdmtqR0owZDlPd082SGNHU1VPQklwQXV3UjRHd3l1U2dOK0RqNDZBN0xOa0tQcjNaTzluZFYxak5LU3JRSndBalF1NmlIL0JyVTJoeGcvdnV0SlRkQXpGcGVXUmdGVjEvQ1BsdHFja2xhMkx2SWtFYk9IbGNKWlFLRXI0VWxYOUNOMzNlS0JQTEV5V3haN2Y0THNnT0ZKa0xVT1NubkFpRXVoN2ZBN0lqaVdac1I1aWxVYTNzcWovangzejB6WVM4SEh2d1pmUXVXVmV6anNmRitXUVlXVnM0YWpYeDR0L21BQ2hDRXRwM0RNeVlPeHlJRmlWaW83NWFENzNyVWR2L1pQajJOQm1CZDhVR29NVDhXV0xOQmVSQzNMOXVZTnFrdDZpa0hlSnlRZkJxMlkrVTNCZU40Y2E5cDQ2bVllbVFZKzlQdTJlQVlPcUZGdFc3a256REFwRHlWVHFtTnJwSGErUFUvTWJybDVPU05RTWJNV0hxZ3pTQ1dzMFhNSU5IWUdEVk1kSEVDSVZGa2txK3YrTDBmRlVVNks5eGNnNmRzN0EvOXp2TlBKUEMxNDhKRFNXWWMwLzF0Z0MrRnhtZVlKRERqWmlFN0t6R0kxWmI5V3lWYkEyNCtFRVdVV1FORnNIbTN4RUdWQTd6ajRmNG54ZkQ2SmNhN1dsTE9JOEJtOTc4SzcvdHRabXRhY01wT1FjL2RGUzNrRllEbGhhVEpZTGZBWE5CeHJuZVRUdDVJckRYVGhHWkQvVHErWWJMNm14NzZhRWNaNTU0ZkhFdURna0YzaDBxSUx5M0pLQWtTdExTTEtSTno5Ylg4Uzh3U1ZMRk1ES0NoOXJNeTh0RlI1ZmxhQnpQR1pLL1FNdEZUTFV4WSsrZXpFQUNjUm02Y2pEUmd5TTc3SGZabXpEK2FEQjlSRDJFSStsSDNOZnJRc3l1QzJScFFieWhOdzJ6eWV5MWZzRUxKcTJiZWJzcmo5V2c5bjBiOGtUU2YwNWtGdWtBY0xucVRxOTdEc0QzeHlnRzBKNDdvOXp5TmR0ckxkZSsybmtSRWE5QXRqQWxNTjBUSnBhbDVrNkhUZHhObzZJY2lwRTNXSzl0QjZoVWR0Rk5DZkhPOFVlQS91NCt0N05LNmxacUxrRE5hczR4Mnh5TnRBQklTdkozZHpVbUlDa2xWbVZPWnZCUXhXWHFSSnV6K2Y1ZGU2cjdLY2llOVQ4VEg4U1ZoSE9KcWNNN2k4RDJuMW9FRWFPOHBkK2h0REw2YW5PWVBhcFgrRGpaMzA2M00ySDkwaDF6aStyQXY5RXh6OU0xWEcvMWxKaVZPb0dFUDdKemx1NXMrb3Fsa0cwRklqOE90Zk5DdFZ4M2Z3T05vNFZXaUh6blRUTFZjaGdPRzVLai9TdWN4YU9iRnkxaUVyV3Y5dUJJZnp3L1AwY1VITlJhRE9RUTkrd01DTjltdjJVZ2ZZQ1NLejFXQU1Kb3Y2bE1CQ2xBc1RDQWY5UlV3WUdIRS80dk85eTNtRnlvTkR1c29yL3VQVVVLM2RKSEVEUDZWR2s5bStUVTRzdkV5dnU2c0hndjQ0Y3AvcWlTeFVCZFl4NGYzTnhQT2ZuUnMra1Uxd2ZFYTJXdWUyQVZCNU0ydy9IcTVmTCtZRXNUU0Evc2hYWGlSMUY3bUlpZXR3YXBRRUlqY09XQXV4RlZJcUNqN0hTa1FrdS8wbkNMZlEwVWJMVmJ1eUZPcjV5bzNOUWVOcHE0d1hYMEhpS3F5b3JLRHBsR3FQK0VyTHpseXRjTy9SQjVnY0RqM2ZXQzNRdUdPRERNd1RVVmRBQkswZklkV0RrcDlrUk9nUTFJVnJnbHlYQTRQVzRxUXZLdHNqOUtOSHdvTWM3emNhUmhxRHVIRUNoSlZZQVY3Uno2dWQyRndsemkxMXR5b2ZBd3IvVWpCOVI3NjcxaGdtNGZsSGo2b29EaXpsZnorQXVWSjAwempVbWI0bFRwY0RXOFpRUkRVNEdDTzJCWEdSL3d6NU8rdFRkNDJTdDc5VzZESVRWaWVUMXNpbFNWNk5oRU9RUXdBU1pWSldTSW0zQjR6U3A4WU4xYTZBcXVCZ0pzcXNha0hVOFZFdVZGWUtKaVNOUjFkYlF2TjN6ZmJUVENibDNudkYveUNua3hrR0VpencrMWdESXdGZ3lrcnV5bzJhdzBtb3R1TjhTeEFaNVppUWVRMGp1dXlqbHBmdW5CNEpOSVpqNWtaMkV5L1lLa0F5YUF1T20zNi9vUXkrV2YzempNZVIzZXI3NS9GYytTTnk4aE9ybmpES2M3RGxJMTMreitLYWRYNXZzeDh4NEdXTXNVY0Z4SjFwV1ltS0tPRlRTdkI4N1hLSmkzZUhsS20xZUVkSXVDVGJ0K0JlKy9qZTBTcFQ1UElEWDI5SU9FaW04MmgwUlR0Z3A0SENTcExMZFZTU2ZZZUUrN1Vub1UwSG9iOENkb3lRTjF0cTJsaEJMa2xKcGVTN1ROTkM4TW5OcmlNand3RmJFbUdBK2R1V3diOTIrZTJ5WEczb1l1dzE3b2tyZlY3QldYSHZwYnZpY2NZNWFNbTFYUzRhaDJBVGcveWt3aW9iUkJLL2dsQ0g1UEpOMjl3cVJYSWdOamhLWHlCMklRSEEzWFV2bWVtSFp2bWM3bkxRQkk3d0lJeDFkUVMzRXQ5aHhiaDBBcFBlRWZ5WXdqWE4xdmtJdTAvNWJZa3dhRjI2WVBoblhiZ3I3UXlMV2lzK1RMcng1K2UwLzJybHVkenJ0cDdRQmdENHNUbUhtQWVBTFE4ejVwcWI1a1ZrV2NpMWNOK012bFh0Z1BWRHhMMTdseTlNWGJLOThiL2l4WnRWVjZqR3Rud3NVcmRESFJXMVpnOE1GTXlPUW9TZmhaSW9ScytTeWw3QVRpQ0RWbVBUSGhacS9zWE5mNTZpYlNiYVBmaGs3dUsxZVpxaGdDSExTeDJoVVlNWWJJeGV1SXJmRXdYK3lKUmx1Y0huNHdaVlZySVNwUlFXaWI3V01TbjVXazZ6WnEyN2JLSXlnSDNURURRQTlreW9QUVB1Qzd5MlV6eVNtK1B5NFRFL1Q0cHROMGlpdENMMUt6UklSRGtFb0JOQ1R2S29tY2lOcDdic01ZeU1jZWo2dVBVMHJWVUhJYjVFUFZVWk9JUVhMdHJZSkV5Z3FRcmdWbFB4YVcydEZydldnNVl6cU45blFPM2YyOTJheFBST0haRjc4NHNjaVNhekdzQlcwZFVyUTFSdnJ0QnpTL2hScmFvbk91ditoMldBQW1ZTVF1UmF2T0dqRXFPdWhzcm5weVR1bVhqSklxVHNDdVJTQnRYVDFkR3pSMGdkQWt4M3NyMnJ4cFNvNmxZVmxuVXJYOW9MZm9tUEdzYWx3dzVyZ2V0VEtxeUZEZ0I3V3daSmlOdXBWK3N5T2FHUEFWV29xZzdJL2VRamt4SzU4NjNVM1duU2xUMUVJblRxWTBmZEhYY0xyalVIb0RodUl5TXJ3d2QzWEQzUDNZdm9HNXhPN2grMlpVRC9Bc1dycm9aU2xQYlp3TFpUUkU4OHdDdEdmWStkWUs5ZjVXL1AzQ3lOYVFUZVdsWDRNZmQ2bU9oTm5HYVVCRnM0WWRwdDR3RTFlUHdEUW8wZk9NRWpWUk02NmZVZjJiMGp2amthelJEYVFYai9WRDNuZk5iMGVpK0ZZQlVKYU1rSnlmMGtUMFJQNXd4ZXd2emVCanArWG5oZElJTEZjTzNxeGhoOHpGZDI0dTRZRk9OTXM0dU9Tak4rUXczYUswb0p2S3plT3V5bmZIdEtTK3NPTVJMZEQ1aW91NTRNWDd6U1RNQXVaeTBnTEd3d3hXbHVDWVB2RlBaaEx5NDlRMWw0M1Z5Q0ZubWs5enZqUlZldVBnT3B0M1NNcjJQcUxqRkpLRjZGZWRXRkRGTzZYN1VmRDlxL1REcFB4V1lYVExaRytCN0gxS0lzanMzcXlKWEdQanlBYjJrQ0ljbG1sQVN5a25zSlJLUit1SWVvdzFGWnNuRGxOVnNGa0xlOEFYcXM0Ujdjb0dScm9IaWhFcU1ONVMwelc0dVBDNGxoVm1Ed2JPUXRSdnFySzh1RklFQURvT2RGL3pkMGFCZDduSDB6WkZkeGdDU3plRTF4d3ZBa2hPSVFqTEsxcFNBc2VKNytZNWtod1EyZGZYMTV4bjFhaTU2dlhZYVNRUVNoakxuT1FaYk5NdUxiY3ZYeUlxZ0NzZEpaWHBIN1d6bnZYTHovVzFyR0xUT3NVdkZWUlNORmxvdCs4Tk1PNmZRdkVLWGZPdnNzUzdrSHloMlZCaDR0Ry9tekNQMXZhTG42Y3RncGxXd3hLdFA3Mmo3VDBOQTkrMGQ5bVRXckJ0eUQrT3huTklkRGZQRnVULzhUZVEzQUJIMEtrVHFocDFFKy93akY5VThVOWdZSjZodlVIMEx5SXoxUXBrUXBMLzZia1QxL2l3Mi96QWlZY0hMSXhzUVlzd2cyN0g2TzdHY1poY0NJTFBaUE1zVjNaVmduVXJad3JkNU1obDFrbFNpTm9BYWhQemp0cGVsSGJyUGZmYTZsUHdyZS91bXpzU1VmNmxJaVJibkdGOWNGNVNHaTdYRVdpUWdOc280VE5sUGtRMHJZVC94SWRSUnUxMy9IbVM0TG04N2E0WVdRVi9iZS8xdktZK3U4cUFXQlVDTnhvZzZ4OUdwQThScnZVN1BFTWNOSE8xZUduclBaQmJoajZCY200RTF1akhlMERKczhwL2NoSGlmUFJsdHljYzR3eHQ2TFMvWmJQODlJTWZxbUFXTi9XSE9TTTFHbWZKa0tkZ1A5cVBGSVlzSS9qTS8xSFIxSk8vck1XeE5VejNhS29EdjF1QmZ5ZFZ1aDZteE1KbkRQWlVVSEhrZ2pXbVZCbGNKeWdBZGlZckd0SlRnUEdHSjR5cmQ1eGsxbXBEQ0pyVGpkS1laeG5jSzBSeFF0eC9zcXhNcUltU3RMc2VOTmhLUWR3SkF5aGk3Y1doUFd4ajlzTGNmRHBoYTRnTUZoQ2kzeVJldWc3bWNwNGNJNmxXTzBMT1FGeWlMU2h4TGlOTlNabWYzZVN3YUtRejF1VlN0TG1yRXVKREI1OHBWL2Y3R2lHeFNQejR4ek9GM3BxV3NreUQ2TG9ZMHkxempBWWFUZWJKcERPN0pXNXhUUmJjVDRBd1ZGY1dCVWZaVWo1NjM5L25aV2lyajJWS0x1WEVTc01iWmZGcmROd1VxcWE4NHJqVW0xUUswTUJON1NxaEN6OUYrY2R6elhrZ3JjODZaRFcxN2pTclo0WDJ2OFI5U0lzOUlJVFoxR1ZOSGh0ZU5VRmsrK3JubUdLMlozTHJCWnl1MUhSZnE4YkJqS0NVUW1td1k0ZEtNTWNnRGtrN3VqN1RvUTdtdU5vSzlhbUNDVExINWdiSy93Mk5lZ09Cd1hZNFdjWXVPVzVlMkZ6bitwU0hRMEk0YlhaOWtzN2hLK1RIV29FZUt6dXBqaTR6a2RqR25ydXY4bkM1RUNwS1hweXZ5dkV4eGdnRlprMSsrZ01XNTBoWURZMGRUWXJrL1pVTFArU085dzZsUXZFSk9VYWtLUkxnOWtHcUU4aGxkbi8yekNjdE9Tb2kxRFlLa0txYVRNRFJIb3JxWWFMbmc2c1hsejRVYkx2cDRwRzU2R09kVUZVYzVaRVVPYkxuekF5K2ErZWZUbERkSVBnZ0tTVk9xTUxFK0V6THNwc3kwTG9tU0xFdlQxVS8xcXQ3Y2liaFdCdDVwNzFVcW8vUngvZzFkTXNyYlVRcTdTd0FmeTY5TFhZcENYd0xKRUlzYWVlRmx4UGpJZkZOM1BNa3lIaXpCMkROcnRQeEJ5UFpGRzdxWkZNWjVqUTdST1d2cElaSGw3T0JKZzRZVHJORDBqcC93NE96bGdaTFd5RHpMN0hFZXlqNTkzdVJvSVFvbTV4OGdpdGhabFMzdVJXV3FZcnV0bFVIOHJJblI5OHlPNEJ5R1FMbzJTUTBncmJvR3pqUTF1bndqU1FpajYyUE5zNXVqdTgrL2dIU0hodGFTWkRkNm9kOWVoYks0dmE3ZFJWL3JuWC9YYUJRS3lQbzVEbG9wN0MvZTZ1aDF6U0xmbGRTMlZJTGdXK1NRdWdlTEJXdURvZ2hKMnJiZHRPdHpTei96N1RkRFY1Sm9TVE42ZFU1Vld4UEFkT0c3V1hFQTV4U09ZQVFXZGZJaGtTZ1dDOHZZWlRTY0RYbFExUnNuRW1GdEdlT0tiSjl1YlRYOFlnYVQ2cGUvZWhySWZGZlBCSzlSOEZqa25OVFovYTRaL0RBY1BnNklIMGNiL2F5M0RVV3JzNzMzTGp5Q2szVEV3T1ZRYTd0QWI1VzZYL0c0N0JLenNxV2lITE4yVTBXZG5adWFqMGluUFNlaE0rVCtVOE9sdXVzNFVScFJQNDM3alFlTHRBV2dVZ2ZCdkowUWM1WXhPTTZ0QnNyWWUxa3NMMEttS2UwSzFHbVltNVM5Q04zOW0vUXhkYUZxZ2dzRHZwYkh4ZlByQVVxZjZOMTRUbXZWOFhDSSt6endpNURZbTVGVXdNYUF6YlUwTFZpVTQ1VGFLa2xxTG5lN3hJQjFiUnd2VXVhR2xXTjIrdTF3UlZTeTBxcGJjWmM1ZWZuWlVzMHFGUEFPa1dHNG9ESUl0d25MMHlpZDZkSm02aU1XZE0wVnNDOTlvM0wzQXRHcUltdlpqLzBGaFAzdEFXS21BNUJmZ0hPVENLWExYdGkzbkxXQm1HVERCU3NjdUp1aHhFTDJUMlM3bVhEcExFc1J4ZXJ6NGtqUnhUYXBDbFd4SG96SU5YaUcxY3d1WmsrR2ZydURza2Eyd29rdGtONFdEcmpGb3BWaGQ5YmwwWWlKWHNuL1B6YjhUNzd5WjJXdGpma25wTHdpd2tndnU5TVJHb0k1UGNwNmZHNG9zcVJVakJOTzdMS1hiK2NFcDJ6eFJKNloxQUVMZlB3NUpmcmd3dkdBNFdOelF5TFE2eEJiWmMyT2psdmxPeWMwRVNZUEp1ZVZNK2dHbU8xVnJmSzRvS1ZOQzNndmVXbWtIb1dNMlZCTENNWTFjQUVJVGxNQzQvY25PbFJtT0EzTENFbmZXd2tWNUVQNGR2U1h1NTNyZzAxMm54TU52R0tVVkNtdkZsOWhkVUc1SDllUmVIbmJHUk1jUFp0MUxvd05FR1M5Wjl5Z0l0ZFJEQWtEZ1JsSUJLZ3Q5UkVMN2ttRDJVT05GOTN2S0cvWFFNOFdzSjdua295UGZRN0hMQjk5Q1RsZW1DZjhGZzRzUS9wNXo3ZHBhcFZydWNxVm81RWRCVkZHMGk3WUVxNS8wbG0rQVVGb09SOTl5eFlpMitHQVBCS014QWQySlIwQTFJemNnREhqRnVFZ0RpZHJGWjNQQ3k0YTQxMll1U3dtTnNHWUM1OU93SnZYVkJZZUlTTEdLUlQ4ZVloenA0c2lCbGNwZkRmeHhQUnVkcHB2dUlCVTVOZ1Q0YkY5NU9tWU1ZR3FGam9obHRhUTNlY1ZWTXhmZ0lTVjc1elBWUmRKWGR5cExKSExtZm9mNm9SeUE3OE44R20ySWY0MXNUWE85WjRsOWtNeURXUUxFdllGNHhKa05aSG5KYjRtWTczdzdXUjVub3hYczRmdmNhSHpMOVhGbUk1RDJSWW1EQVNJYUdFTTVJNklCWndFVi9La3IweUgzZDNhUWR3Q1RET1kzQkVCbFV0TjZDZ2V4d1hEL1pmWW5jSHpQZEZ0b1RtaXY4NFdLUW9QL0FpYmR3NDBpamVQQnAzV3hYUTdRSFNOc1M2RkZ4NmY2ZzBsUk1FWnVJaEhJZDlpeW1BTlVaMG5zTXl4N1hMRXQxczVXU0RtSWp3QkdrK0VZR1Y3ajhoRVhUUXZLV3hqbTl2U1FaLzBqejd1cStKUzIzRmJhbFZCcjBMbjEveEQ5OTMvdWpaS3pvUlNJRXdtcHZtTm5zMFdBVmUxZUw0VnRnQXpwQnJSU2RscnBPc0NZWHpOaFdTMXFvUU9jVjNOSlkySGdUdmtvaXBlWXc3WWltTzR2bzBNOXo2NXRENS9WVExIUWN1NUw0ZVRiTGdCRk51NFVvSTFDYjlMaGNHSnNySDRDYWNpTFVwR2pZUzdxa2RpclBCUklvaWZIOFNkS1J4bzBvMTdVNmo2VFJpMXY4QkR2by9rN25QcjVnWkR2L3hKaDAwWlpGc2tSZ3dXeS9valBwQmppaEUxZkVMOEUzTFRaTGh1SG1ZSVN5d2ZveVF0Z3d3MTh5NHlKTmhRZzc4eUZFbjNWMmgyNnV6SXNnb2VESGgyNldBVTFQVkxsRFNtaFdaRjUvcEZlZkNvTWV3eU5maERsYktMU2oybmhNNHN4VU9IUVdjWkJBbVBsSndmNWF2ZlhQNkpUb0FxYTEyMFY1VFpEcyttYnFxcjR2RllwUDFNazBHR2F3a2Zub3lTU0szQ29QaUZEaGFaRU8zS1djYnR6N1VSOUdiaXdnKzFVZHJUWjZMbTlwaDFIa3dmWnNZTk9QMlFsTkNhalMxdjlvYU5IYkE4TnZiZzZUVkViN2FDT2pGazAydW5VTWhnelhXSnBlcVMvdVF2YzNWUGY2Q0V5b25FYW1Ub3V6dTFiOHNDMFZHbVh3WWMyL28zMllQVWM4bVR4K2F0MjZJR0lDL1JjNXlja2xPRmtVcU95WnVUQmlIY1JueG0zVDBvandHa1QwQzlIL0xUWXh0aDZURUxoaEJSQndVUWd0djQzWnMrUlF1cng2Z3ZmdC91N1FUV3krN1lIbXdIb3YzWGRSS1QwTDJmeEhqaE1HakpzMXNQSlNrcVNDM1Jod2MyZVA2K3JRN2U2RG01QTdPZU1QSUxOb2tVTGpNTW4ralJybmJSWVI3R1lQMmMwMkZZK0ZtZStaTkd1ZFQ3NHJVN0JkRHlOaTJLYUdQQ1N0Y29zZ3NhNWdZaWk4NEZydFlqRWpyZmxqSDVNTEluM0l5b2U0ME1oOXlFZjZXZW8rVUtaNnlMQ2o2Y2l6eFhMNS85RG9GYm96TjNvekdqemc2bk0zYmZRVDFlK0Zqczdwa1psYkVWdTU1UFVHZGs3ZjNxaDZkZUZDbUNyK1pxZXZ2NzVIQllGalhWbTd5S0o0eDZRQ0VuU3NKRGVKdHBCODN4Rlh4TEVycmtUTCs0TUdwa3Y1b0E4UWtXU3RmTDl2ZFo1TmNTZkhjdTN0S3pFbE4ydWp0SlVSWmp4TkFxSmRDUmRpYVFxbDZyUHNzbzdSSU1QUTJsUjl3b25XMko3Y3E4NmdmVjc5OExDQ0ZwQ0FJNkUyRm9ueFk1bGdDbmJUNDExMHRKRFpxWGptSnJMRVIrU21pTU5CY0xFNUlvV3M5bzdGZjBTbFFZUlgxbkhjZTZPUzZlTVo1V25MSjlFTzI3QmtIZGk4LzhsNGZmM1pxSzZCdTY5amhTZitlVitka2hGcU9VUUo5aVJiVmJDL0xzdlZJQm1VWWFWN2UxRk9OMTc4aEZ5ZEFiSC9HUUpibWcvZzdZZytsbUhWNnRsbmlRdXM4WEowYmNXeGhjVmNkUmUxVDhQa3p0MzNjWnFYTS9EN2pUdGZGb0JCVyt3c2QxNHhuWitxRmFRdWFQV0FmUmg2RjRyNllqUEFPbjBSODB3Y0x3YmVXVXdRcGYvUGl0MHh0YVFHUHQrcmthd1hPM0Z2OERLZTVxVFlHOGtyYkx5RGdyanI1N0R6Vmo1UmloWUZkT3NwNFdVL210Ui8xY0hOdm5kRHl3R2poNkRQRFJOSGhjVjI0YmZ5Ukd4bDF1QXV0cDBvL0hhMStuOW9XSHpPZkxsL3ZxUklrQ0tzQzh3ZVFueHkrSkplREFqRTNsQzBJSXVwYlRJd1A5SERxNFFzc3l6bWFIMmtuMlJyUXcvYzUvL0hHY2hzb1dBYkc5bHd3WEtNQ3YyNjcxVmZlRTJmb2h3ak5NN2pMMGJ5c1pJUXltMlBvTFFRdm13ank5bmQ1N2Q4dVRXNy80ZUpzRlZnZEdyRUNXdzVPWTdRRlVZSHlSTGU3TDJwRUkyTDFMM1FUeXVPK1JYSHlORHdGQkRrL0grNFdKOFpuR2dwWVlNOTdmT25BYlZrS3ZwOUFvNnk2NWdJRWNERGdZZkhtNEhnYng2VmMwcTMvbVNUWjY0Q25TUWN0bTlUMUQ3bGVqc0lvUVJ6dXVpTExmNERkdWJKOGNYMithOVFWcWl3NEs1SHRzY291SU83NFlCRU5OMGVsbXE0RzZMbDR0NVdMWWUwQmVHZGxJL3dyaitPb0MvNlJJbkMrYkxFblg3YWlFU3lDbVRGWXJBdDhlSTlvY1RoWmR3SXY5VVlrWWU0ZXhraGpQZkQwODU0Qkk0MmtCWDFQcnZQNTNMMFMxOEl5VWcveWhxT1F1Mm5FNjRuYjlRS0lqV1BNcWx4a0RwVDU5aytLTmVSQ0p1MVVWVzc3VEJKSWtrTFIzMUE1YTlEekVNU3NHTjNQZUVQWXozYjNLVGlVeVB3SWo4d2RVeXppTDE1cHpIWjE2K20vOEdZenh3NG1SQ3ZmTWlrZkcxS3U0bmNEaDVEZDlNdmxjREROZzh3cHNKYTBpOUJKVHdzZHBxTXlwcjVQQUdMOEtGY0ZlWUFuUUk1NVFhRzU2aVpSTllKRk0yZjUzV1lTQ3VKZ3IwKy94R3lnVjdCeHFMTDZibDZoN1lOWDZadWFqSHdNUjZQOG8vZkhwMHVEenVRbzdYQU9RQ3VuS0pyNkZjVUl0VDF1MWErSGNxUHkvSVRRS3JhZzIzbXpaSTR4UUxadnhPWXlHdm9vOVloOTl1bkdEQ2dFN1JqSGwyU3VyWkRnSjRPYzNmeEZpQkRVcENyV0h4ckxJcEVuczcwcUZxODB4M2N2cDRnL2I4VUNvQ20xZDBnU2E3eFhUVmdwejliTnpGZWVJdzhlZ3hjZFZxMU1kYXMxSHFHNUNOTVVib3dldVpLWVdjdU5LMFM0UXlwWkpnWXFudFo3VXIrUlRHSlZITTVUYzVUU3A3N2J6VisxaEdhd3hPRHM4UVNScWdyUmovSWFCVEJ1SVJFLzJ5d2tuQ3N2ajhyUE9yN0FKTUxQSW9aakN0RFJOWURhZmQ1SEsrNWMxYW0rN1hYK0c5eVBOWDZFVmhzMXgyczBVNjF0cVlSS0lVNU9ONjZzcG8vb3RXSEttT2hUN1lYT2hRWG45TmNhTVk0ZlRyemVSM0NjNDRTNXRpMEloVVJLdElKV0hDb2svb21KVUhVQW1oeTkzUWgrYVc4ZFNEakI3cGVhYTlXcFBjYU1PU21QeWp5bzE2UndSQS8yNmtodHhVZHI5R0xQMUZscVY0d0hPbUxHTFBhTkJOQU90QzBOeDFPVDRYVHIxUzBtczhPVVVrMUZETmZMbkRyWEdoV254RHNybFM3aXYwYVk2R05CU1NTaFNxL3dHNHMreHdNTnFSOWQyK2VLdlo5NGttVExuZ29xelNvRHRZTDB6d0JnS05HQWxOMmE1cFI0N1BNOWVpUHptVTNyU2ZWVGRIUHN5WEV2aG9HMUEvckNQUm1Pck5EMDJaTmF3TDZmSzRHNkV4RER0VkJNei9RMllwckgzZDFsN05ST0M0WnVFZy9qUWtiMU9pOElMUS92T3BIMk5MZVhsYnBFNWtMQmNRd1JLQlRtMVFxNVNKdkFHT0FQdUY5elkxTkU1Z1N6dFZvNzQ1ZmExK1EvSzZWY3RMaUdXc2ZZbE1PN1ROS3ZNMzBJZGpmbVJnellMbXpRekhyVVRGUXh5V2x3UnUzQmVOVjF4bHFrOUZwcWpqU3haUllhZkxwOHAwUi9GL3JCa2E3Yi9DeGZPaU5aNXgrZytCa2tqUXhiRk14UmljSmdZUXRaV1RIaTZwOVZjY2NvVHlyd0EydWVWQnZMVVEvbTU4OWk1K2ZMbElwdUJzQTFxS0YvUmdGWk1iNkloY1NiNExIdHF0a1VuK1VGYmhEU3FWdnB3Si9MbUlQUjB3LzMxR3RrbXN4K2duL0VJekZyM1FBK2lmaDJXaiswbXkxZ3NGWXdJZmZFOXZlc2QxTjl6YzNCMDhKTXpZWXBXaHQvaEhVcEZYdWJnOW96bVVOU2h4VU5VNkVDbURCK0FjQVlaRjhrT1JlcUFaRjBkV1BsSmgreGNLb2VtdDNkaVNmaTRSKzExY2Q1RXZlQy9wcVF6ZlhDZ0NiMkorbWdQTEVlYmN5QXZjOC85bExMTnRXRWdtOHVwU3drZXBkTlRXaUJFWmNmb0xhY3duRWZIbEtRNFRWZFhLNTJ1N1FkZmx6bmpuaTRaZlB6MDhMZThNL3JrWW9sZjJKclpRM0dzRmZUcHNSWWhxM1JIaXY4SHJ1YTMrK2k3SEJQakx4RW1ISVFTQmU1WU1vNVhib0x0bXBkNWdYdEhCZnpnR2V5VEhqU21BZDJqTGxxYXFFamR0VkVmbUorQTA4c0d0alpqR1pnbkF3WWVteERYclpROFFCMnM2MGtiZWl6ajE0YUVjakdQckNFRVkycGlHRmtYZU9IbkVjODBVb0o1NWdqVXZUTTJFQlA1UUdYa1pTc3FpQkhhTGFnVHRCS1k4MUcyb3pqWFM5WHA0a1NZc3BEMTluWjZsVENObG0rQmk1bHd5T2dxL2h4VkttZXJ4c3BycWhaUHo4T3pZb2d2UnJvWHRqM3ZiNmc2Q0pRbTVHdHo5RE9aSE5MN0hXS2V4bzF6VEYvQ2s1Z0t6MWxnREkyNjVBS1I5QnRzOXh2WW9jbms4U29YMmJVQU1OREJUZ3l6SVdTcmVhZGZvbnRJOFdKSW8yMnhISXVPWUtzYUpJcU9aclNSRXhya2FqVEYwWnBvUEI2WlA4UlBuUGxnTnJiR1JwUDIrR1g4WGpTdVNKYisxRlRQaUtVMEVQTkNBV1RLOVh1alRkc2g0WVBENlRDRE0xTjVMYjVidm95U0I5dnZWaUhxeWp5aEc0aWd0ZWVVN3ZHSDlKaUkyaFBoTGJXNkpPOEVjRUloWlRRUXhKWkpPSzNqSUhDa3g0QkE5cElsazY3WkFpeXRtMUNvdmVIY3RLTUh1WFJuOWx2elZ5NUdCQVJWZ3B2c0Y2Q0pidnN2VjVqMGdqWVZEcGFGWVVnQ3FoQzZrekpxbXI0V0xtUzFpUWMrY3BZaTR2bmxBckowZW92QWdZSGFHZ1pwWHN6TTFSb2tLRXFqRW5TQWRubVppcGl5NVhPRXBVRnJyTTZuOTh5M2Rrd1Y1dk5QU2hwUWZpTzNaSGErdXQrUHNJa2ptaTlFMi92Wms3NnBnTlBOTTJxUEFzaHl3U29VSEtSSERPYUJJMUprWStEYnJJcWJRL05YenRjVVpzY3BYMzRkTkhpaTVncFdxSnA0bzFsVXpQWEJ1alEzNFB6Z2JmRHZXOGptdnhBSjJJbEF5WTR1cktDeGZNOTFNNVBkY3BHVE9HNW1ZcCtTbmdMRTQ2MEdzTklpelpDK1RidWVNZmN5dmZoN2JwMGd0Q29KUDk0MGZYWFlGZlE0NUZPY21EYzdjbFZxc25DdWxmcCtIakI4eXJrYVF2TEM4c05ta3VqcTVqTkpFbTRMdnBQRWV6ZHl2MVdPZmVyWitRWXlEYkUvM1RWS04wY0dmdFFTbG1kNE45NWZHZmlMRE9PdWtpVm1sQlVXVjFwdVJ1bUZ2ZVpBQmFvV1ArWDMrangzOU9QRmt1M3dhcGZTOThrUFN2K3hXa013b0p6MnFNM2s5aWZLMkUzZDE5WkdWc2Zaay80RWZEUWNJQjY0UXNuRGlRK2pSMEFteDkwcWhaNWdDNXFnSXJFOGU1cUt6enJDY1I4aXloUURubDZIREhIQUlCWW5zaUFXdDdnQW41eDlzTWR6OERhUzBjUlNDWEhveSsyaGZiTkc5SEtIY3YwNkxqcGFoMTdZQ2dxelBqRDJiY1cvSk01emNsYnU4RkJqQXZidFREWHdWdVpDWjhLZzNRTXU2OUc2cjJickhYV2V5ajdqclhXM2RBVmI0anFFdXlVR3VTR2pFQXNJa0FzM0E5akJueUNVSmtNSE1qT1FJanRxekFXWmxyejI0cEJLdTdSMkpqMVBqbXQrSFBObWR6MHlRS2IwdkNPYUplNFk5Y2VyOElCTDEzZFhQME9iWjFpM2k4L3B6ZWhjTUxGemhMdEN2UWk2c21DeGxXOHBoNTBSWXZ0c2traUFFaWhNMWNadk5VNWFYbFNTWlVmVkM2WXpMM010YTlGMldSLzk3d2sxc1cwWHkxTDRPQUMyYmtMOG5sWG9OSzgzc3FsZzBXd0N0ck95eDZmN1hSWWlxbksvU2cxL0dtaVRrS09GT1c0Y0dqWXhzYkNRZmwwaUtqQzAvY1lrRExrb2J3cEZ0bmtGejNPWU1pYzNjZnlYdHluQVJhOG5YbTZBYStEZktsbFhlKzlwUG5NOFdBQWhlUEI3TngwWUpvakRvcG1wWmR4N0IwT3FlL2hJc2wwVmJQVFdyZlB2S2pUUk1Na21CMkVEMEFqemxQSFJoTUpCTllzeTVnV2hObElPSHlHalZ4Y1doaURPclFHUW5XZjg1R2dmWXpyZ0M1UlBkYjh1MnhnOTl3VzR4L1pld2p2aFQ2NnVNZzQ2d29RaXVKenBSb2RIcHZQblhXeUdIZXhONzdVWXNIemgyb2lOWnFaRHpvQTRlZzhNb3FMdmZhRWNocldrWHNiTjI2clk0MEZlQTdrWVZpeWtQRjV5MTVnY01QY2Jrd3lQcHNZTUR4akFjY0I1a3dob01VdEFmTjJ5MXhpMVp6YzNjb2RIdHNycWFmMDJicUgwdVdJNmxXZjh3dWFRVXM3VTNHT0l2VkxaanZMODRGNVdWVXhzY2NPMzVqMjBoNXI1eVZjVU53b3hmYnMvbitucW40d2lSbUFubmlseklPUm1QWmNEVHJkUHoxZXVWL08rRVVDRHJnQzJEZ1k0RlI0U0lWOHB0UGFqTCtaUzc5YzNOaURDeit6c0ltQ3ZIVUNISUVaUWxqdUxvckJnUmdLSW0zV01GeGFEZlI5aDRyU1VzL2N6eU4rRmo2cldGWjlHajdKUTFnVEZzeDNFTnRoUWVPSjNGRE1lSDZ4aVhxMEcxVmFXQktuL1d5Q1lZWUhvWm42WEo4aW5YOVZsOUJEdGduTmkyUGJsTFl1TkV6Ryt1Z2M0eFZ1empsN2dDWHdIWDFmTzFNcENSNHA1Y3FTWlNqYkFJcEw0bktTMGFDUW8rOUpKREJUQjRpQ3FqVE0xL254ejAzREhtYWtsRXl2VmhFTXRRM3l6R3pkSnM3SWRnRHl2RjN1TFlobFc4cHJsVHdGVWxXQVc3c0dGWjYrVVhRcGFhck8wc29LTEwyRVVoNitvSDVPMUttSnFTVVRIQkw3Zld6UGY3Tlp2ODdNOUJZSDJCM1pWN0NIQ2cyYUhtajVtVFR6eXE2NGtjMjNFcWhVeWFzWFNFNGZGWFhUQjY3cHhIaENXVDBmckZ3OU1PS1o4NjgrN2JMWWMrYjdFSXduYzAvYUQxZW1VWTZSbkhzVzdjWmhwbmJxRiszSlhrekFHSm9ncnJOSEFVanN6QzBNMVBaYlBTcnBlZGxrS3FjWEh3R292aWl3S3FONGdwSlNVbkFtc3VFR0hRa0RRY1YzaElCdytZMVJ2THZ0bktCRmNmNE1XVkRnL1pWbmFKazh5S0N1aTZGUTdwclRZMDMvTEFsbmZNZ0VTRmFYMDlNNHBCbnhYUGxwM0ljeityclJVTkxPZUZRdkVtamNDWDNTNlV5MHU1aDZVN3lESWpQSzNldjBTZ0crcTN1TWZzSld2VTc2aUI0Um1TNUplSkx3dU5VMlBlZUI0N2M1eTZsWmxmcXZlWElJQzdkZnVWRUJ5QTBueCtFMk94R2drUUxiRFhSL0ZRWE5JbWp1Nmp4UmMvUzduTXUzT3hkOG9TU3JBa2hmTXZCTkI1NjdQMXFkZkxrRXM0eFk5QTNOSW5RTjI4V25RSXpnbHV1WmVoeTRobEFNMk1EWEpRYWEyMHJWcGV3bm05aUpPTjFRM1l2SVdvNmxmZUEvMTRNZzZkTTA5SjdmRTR2dXA4YTBCek56VUxBdkg4MXQ5WkpCeFoweEUrSm5TUzZrSVkrK0JiVGVkU3Z1MHBRTXdHV0pIWTdMS3lULzlvVGxXNSs3b3RseU5QcXY5NmNmT3VkbnFyaERDOHltN1FhY2ZEc3F0RVFQaTFOd0lqU0twRk5oTVZmdjE4ZXBnN3RObU1Uc1owVlBIMEY0Z2FOU2ZzQWpxbXpWSzhtMG1ISHVKM3ZLM2FMTGNESWh3SzdBbUl2REZMb0RRN2lNaHVuQURwNzJGM1FBdjFzaW5MRlVseVEraXR5cVlOQkdJa0lxR2F5SFRDbXh6ZHpZMkVwN2RjeHErRkliWUhWNlFTcDV6c0NkeXdTbGJOYng1V2RDTGNZU1VULzJ5alRldVYrclNnQW55YnhPcVJMUzNHeEorbHdrT2pRUG9Md3FUNGR1UU04WERqVmJ2dDZpaDNOQ3ByWjhGRWFESjgreDh5cEV5SEVWakx1bEZidXphRUF4Vks4cEZDdWFJNTIvczAxdWFNWjdRdGtBMUExM0VvRk5IUDMxQmw1aDFpNFN4VUo0WmVSeDhGc0FPUGxUYkJhRjZ4SWVkQVJyNytKOEZzb2RlWmQ5enJFak1ibmZqVEExWHR6TG9HQmxTd1dOcmx3WWhtdEU0OCszTkllNndLcEdzYVFybjVNaEZpdSs1Qmd5TzNqbjduaUZSSVZQRWZMUmhqYURSVnZnWHJTbEkzUlQ2ZXp6SlV2ci9mQzgxSEVwcys1K3NQQm1jWTF0QnhmZEZKZ0MybDNhVi9NZS9WWGF4M3M0MXhlWnVFd1dKVzNOOGlzZngxRmQwcVgxckdRMWxJSmhDdkxwSGRMdTRlQ0t6a3FoTUpVYW16SEQxQnFNT1lSNWhEQW01MWE2aXlicGViTHdyMml6YlVWMlRkSEVYR1ppSnNXMmlBZGlBMTRnNi82OVhWU3dUTWdkQlZUemYrVm56S1daUW95S2laUWRlVjVUdG9jbm9CUGdmOFhqRjJmOXpYN0ZwQVZtd3pxVEE5UEhqQ0pIOWRGUEIwK1ZTYkd4NWFhbDd0NWVOTFZPWTVKbnVBUkwvYVhSUzdTbmpWTXNobkszbTFaemhHNGVXTVd1TUE3aXQ2WTU2c3VmNWZwejhNZ21idDZiMWM3RzloQnJ5eUhTU3FzWGZkOVBsRm5XeFp3Rm8xOXo1MG5LRk02M1g3VmRGV2FDYmhyUllRTVlwemYya3hVaVQ3dGx1RXBsV2pNTHBoVWJRdk4vdTgrbGxTcmdFelZlL3hZNnpnSGJRMW5Rby96a2RBeFRSc3dpd2JRNG51VXBIQlhrc2xZeEJ4Y1ZxYzNOcVpNUGZPWGNGNXFvVy81T21LajlPS1N1YUtRVFB4TDh1d0RyWUJMR3ZwRlJjQ1NlSFp3N0ZoY2cwT0VERzZEUFpUMFZYZ0MrVVJSRXhkb25kRktpUk4vRXFvL3B6VEtEVVNDYld4ckFkazJrVWxYMnlKaW5OZXNSZGJiTzZHcmVaeFN2NUpEUFFoN2xlcXlUVjRERHlneWdnUHhPUFI4QW55U0g3L0ZXNWtoaWV2cW1QeHY2VkNWbExjaDhrWjgrcHhZMFd0eUNxa3hrOGRQcitlcjRhaW10ZGJLTFdzVVVZMm5aNU4yckdScUVsMU5KeFljdFVPejRXamVmZk1hWDNrVmRUbUlKeE1MS1pDWWFQelFhenEwSWNSOGhCaERKd2cxbVI4SUdoR0N3UVpnaHc4dzQrb25aY1VWM0tOeDNoOGdHMjhmR2hzR3hsRDZ1bDY2eWJXS2EyMGhSQ3h6UXdiVGNaYjBoMW05NW1qUWRUMEpJcWpZLzhpcURNVE9XKzY5TnJ1UjFibEJia1k5WnRaeTBLdEpmR1lnaVI5OHE1bDlOSlBUSEpOMzhVamdlSGNZMXYvSFVwTk84cDVHSWxHRERIS3RVb1FqTWExYTI5RkFpQ1BWS0k4N1VqSUNsKyttcUlHd3JxMm5QNXg0SlRqL0cxRUxWVXo2Y0RmbUd4R1dxVGh5V2pGbUsrL3pZdHlRc3lHckNycm1MUUI4NVNiTysvdXhkb3V5d1Vlci8rQ2pXcnNReTg2SjVRWXA0em02WXErSFA5eUcra0QvMzNObmY0NXFFd3FJb1ROUGs1ckJIdnJGd056dTN5WHB3NzFINjFSYzN6RmluUlQ1MndrZHdVb1YyU0QrOFRnZXFJYXdmWGlreWlTQmVKeWh6RGhxWndHN1FJdWswSHdxUllZSTlpYy9QQTZwSE8xR0ROUXpCK3E5VXNBYkFjck5FUW55MlZRMGVmclluVnFpL2tsaDY3dDd0dkNCVkw0TTVCRTFsMit0a2IyZzdLM1R4MHZZQXUwVmt2TVJ5UHpiMmh3c2MzQno2WG1kTnBlNittSjZjZnJrWmFqOUNXUCtRdEhodDlwcXNEbnV3MFp6UDVrcHI2NytMeTQ5bURWaS9jQ3crc2FkNG8vNVhlT011alVReVROanZzR0RleldqY2pGSnlUbXZ4REwyN2c1dTMrMDZvYnFZT0NRUzZ4My9iTnk1UzRGa3NSbHU2V0pBbkFQbGNqTlJtMnc4bEJjS250VHp0d29tUEdXelNGTnJRUXlhTHZXK0VnYVlCLzVEdTJlNzFyWFlUV2NDU0J5Yk0wSlNDZThzWkJMa2tvbzlCVDBMTmREeUczVVhSOTlDdURmRUZobFM4R2JFdVhQNDAzbUFQZ29sNkFRVG9lNXptRVpEMUZLajc1Q05ZWWlmT2NXN2FzL3dBOFFueEJRYkllSUxYS3FGZC9GMmJ3dWNmOTFXY25MbXBMbGVvNmdUQXNkRXZTMzJmR1Uxd1p2WVVJUmYycGE3NzNpQWJyaWk3dFNjVDd5T3dOa2dpb01XNlAwSzZTOENJYWlnaTg1NGZKWGFHbkxCSVdINVVzNDIrV3d5dXpBQjVMeGdzcXdaeWVzQ1FFaDR4dGNiYm5WZFBJMGlKa2U0dXhDM2k5Nk8vejhPV3dJRkM3QXpxVFFoU3hWSTRVeVZxVmh6ekdDZDgwU0s0eFlXcmNmeEdXTlI4LzZ5Z0d1MU5PRkt6UGFxdU9ZUEVtcm00dDFFdGZRdUY1R2ZKNUVNWFJ0cnhHaUZLUmxLaFpSeXVCaU5xNXBBLzBReTIrNVNYTFh4dWdpTVpaNmFZZ3c1Vnc2N2FhWXFaZ0YzMkxURjhHSHcwWTNDaTRsQzlzN2FZUWdqeW80WHU3TEJGTU9NVTVoallqSDV2a2RHcEk0cUwwMVJ3WGtzbWM2RWJGZ2FCNjYyWnlYeFJFbjA5cUhyVjVDZ1daL29RMHVTZVFlZm45UVgvZXRmcVdyWmY5UEw1dWdOV0NQNGJpVUt1cnpPbk9kU2k0VC8wVFp5VlpMc1IrYXFlcFVHWngyUjhNQlhkRGs2N0I4cmlHRHNVQU4vY1N6MmJWaTdqdnduMG5LMkpMMVhKbGxJbkZzTEJhSzN6UkUyWWhZUXBKT2VWZ01KY2Z3VFltSThOQVoraHd2aXA4eStoNEdScFZhVUxHWUlOeEtMTnBWa3FTaEFSRjJhdWlKbU1BSXMyamZxQ2hwdkR2VVNweTd6VGhXb1dKeCtSak9ZUGo3dDZiSEJUUWx5UGl3ZWowckhMQjlZYnZyWmpidWtEbEVHYzN4UmRBM04vbVdTVmRFbTJhY2JlL1hFMU9sZFBaeTZOd0xoaGVyVzNzM1pIM0RPNzZvSERVVG01dEg5YkU5WURMMWRXK0JqeUJ5SkQydTBZM3VCVUZpL2ZzWUxFNGQ1dGhEckRGbW5BVmJ6Njk1U0VUYVBHUERMbUlHR0xvT2xDOHl5cFZLSG4xdS9uckxuZ3pOR21QVXRpOEozSVRxRXp6V2NiakkvY0RIc0c1bWZIV3FocW9zbHRVS08xLzVteFFnSFJCaDRyQTRzR1FETmN2TVRoelkvRFhMSFZIakdremhRZDFLQjVUSm81NThGRzJQaThSVEp4dHpPNWtQeTJaRkYwOGF3Z2tnamQ3RUd3N21SMGU5RFZUbm0vYU01UHBsTlc2NGZzVDRSVG9XYnBseFlFTERRZ29qVkpneGJjeGRWSy9pYUZjSEdpS2ZpMDVsSTRjL2tHN242djV1VUdpMHIraGtsaUdRbEswVzdTcHQ2dE5ZeFVmNFg3V3I0TUY0Y056WG1TUTdBZkpuWlF6SW96UHAydlVPclE3RUtneXRWVXNBNWJ4amVkakJGUVQwKytnbXNpMEJIM0l1Tmd1QjcyZE05VDVTazY0aE5BWExuYVp1c0ZmUlhnSjg5UnF1ZTRpMjNyZVJadVBwTVZLQ2pjVGk4VnR6enBNejFGTTV1Z0JNV1JsM256MmJJNzNsUUFGRUhjY1JvcGhhWW1aelpuMlZYSUw5ZXNyOWVpTU9Yb3hnSXdUNnQza1AxTkpaMzdROFQyU0MyaHZiT29SZ0lvLzNXVDBjVDgyblJYMWhpSUN6Yi90dHMwS1MzY3hSZlBTclBxNzdEREdncEFKNHMvbklobHRqaklzeTUvUCtMR2NFTnZ4ZG9XUEk4LzhMOHg4SHNncXNSYW5ncUFEajFoTU9ZWEN5RGQrTFVUZUNWU21sUDY0S2UyVDhOaWVBWlhybjJxY1VqaGsveWMyUjZFSFpPcW1GZDNBeGU5T2RMZGs1bXVmVlJLQXNnRmxFbUdHK3dDNDRqY3dVNUtoVmZDTHJJb1BTMk8vaFhENkhwOFVZM1FXbnovNTEvVWpvRTZ4c0NJQ2J6Mi9ob1ZYWHh1bEZ6b2NIYmVmMytvQmVPVkdCQ3NoRmFBTFlqc0lEVGprVVIxL0ovV2xLaUxFZi9Za284Z0cvTHFqdUVVbnl6THU1V09ySjQvOTFOd1BtS1laQVdCbjB1L056eXFoOC93QXdaNHptTGxUNHJwSzRqTHYxSGlxcUtlNFdZM3NRTVhqWWdEZjhxc2E3YlZrTTZBSzBoRGlTVkZKWmQraUFEZ0NadzQ4N2pwUHIrSVB0VkhBaU5sdm4wN1NmajZFbVpOc2pmREQ5dUZJM1pmY2FRK2NDK241aVNtRjZ4aHlOSnZHM081YTFadlV3bGd1NmtHTDNZblJjMTRxMXE1UkJ2Uzh1YTRGV1lRLzdUSjF3VXd6czlxUzlDZ1EzbGRpZ2pwMEdCcjRhSmZBdGU1WVNYb2UvMnNTMUJidk43Zm5uWWdvSHpBV081Vml5Z0lBRTgyay9Ea1ViSG9QVGdpYXRsRk1CeW1DTStNUXhRSDFhV1c1TjlRS2EzVmFaQnk5VWh3R2I4LzhxNFdIUzBSWFpJUnFTVFFGNGt0eEJHL084WnFZcklJZkdURDBPZDZPSmRlek5YMkFWM2FFNzBPVnduWFloZXJiNFlXQkMxcXVXZ1hTNzZ6MEF4YVdsanRPRVg0Z09sNmZjdjZYZ3lVT2ZoUTRhUnFKZmd0RXhZTnkxemNuQ3hoL0ZmQlBhQnZ4U3BKS1VGQkh6MmgxSHZ2a2JMWnZNcnpsVXdWTzZId2JHZHlPamJvZHk4QWZBVUdEYzFDTDBzY0JlTjZGWDhHbENzYURuYkgwTjgwbVo5ZDVVOTc3Q0FLTW9PdU5MWHVoaVppMDhNOHlYVXI1WUF0aGgwbGk2anpzaEc2aUhqaytQZ2Q2Y1NwNWk5MUgvTm11cE9uN0RUWFhZSHA0YWR0OU8rWkJNTVhQeWpvOGgya01YbFpuZ3VVSThnVEpYS2kxRzdFWU1EVkY4REwrTlRRWEVidkRuNWVrV0FtUXFmV0hHNEtKR21EUS9aYXNyNisrODVOUVFOVDM2Y1NNODZDcENKVGM2TW8vbyt4eXIxZTBuSmxabmxIaFhTVktvREV5cjRsL1lZUGFmODluT1BKQVdobjArTy9IMDhoNllDc0t6R2hWSzdwSjNUV1lOM1hyclZId1crMWJGMzhJZFd2V2l5QUZWbWhQQ0lzRjIrMEFRVGJiVDYxSjNSS3NuSUJZZ09NV0J5aG44T2cyZHdDUXNhdFZsbTJRODFLTUViMnRqditaM2pScTgvWi9sVytkSzliSEs5KzE0eG12c3B0eVFGVHRsWE9IUHEzYndzakJNbDRMOFk5cmNaRVA1cStlUEk1RjVLaENTVURBanhQOFFFUkpVK2wwcElrYWJidXVlVkNHSlNwOW12OVhkMEJieG0vNjNIeW5jejc2L05MV2VQUzl0ZlFEV3p5eDVpcURsd1A2eStqei9MSGcyWmEwbXpFYnNmU1JLZ1czb3VRbEhTZWNmMVcrUTlsQjkxZzZSbmdqSTZkcndTNUR0ZHRMeTNpSVQ2dzExbmVlNGgrU2creDR4emZ4MlB3ZHljYkczNWxGcDIrQnFneGpyUWFtQXJuUlBybU05Rm4zL0ZFSXR3dzBJVi9mTTB0UE9SWFZUcXR6UzlkaHpWcWNnaHNyMDRwWU1xOEFWQVJPa2tVMXFpa3YvRmkzMUNGN1p5a0FBY0lCSnVzSFBtMXZ5RlFpcFNKVG5XRjV3WVpLeTZaR3ZUYnYrTnZ4eG5lb1UwOTJkQmV3aHg4K3MrdVU5VTlaOVJFWUdpQzBtUFlpdnMzem5pZzJOb1dXcWdZOHBJYnBJOUpXbTNXWkQ2eEU1RnJ4SEZxMkV0bWZFbHV2bHJFTTUwRlN6S2JCSVQ3V280TytmSGlaSE1ZK2xEUGRUckxBbjduL2V3NURZWWhyKzJaZVJmdmJuMmkrSG92dEZRS3RjR0ZWK0RXbXZHaWNWdXR1enNuUnVXLzBscnc4R3QwZ2QrL1BPTitiZW5xMCttbzFpWENQdVdkeGNqT1ExZFlhZml4RExYUVJ6TkVVYWlnK0p1K1l2b0hhZEJMNFFlRHJFenFJWTNxSjlzZ1VkWVJBZWFrVkgvQVU4QjVsYU03UWFNbE5TMWhtTFNPNjU1bjJvdGFFYmlGN3RjWm02SzlBaTVrc081UFAvZHZYT0dmd0hMRXowWFg1aFErcUo3VVlpc0toR2Z6ZnRxaCtWSFl6Q3Z6Q2RhdUdydEJ2d1R5N29qTHAvUWV5bk5ndlo3UithWW1WdSt1RHVRaE5HNnF3NHdzbDAwTVBFU0RHa0llVVhyTjZNYzloV2ZsSkxMdndYMFhwZ3ZZYjg4V1BzU2RKMXcxRzk5NzhPVGhFQWRNVys5V1BtcnQ5QjNSUUc5aXVYaHhXcTNRbUorTmtCK3FubzBtMUlKZGw0M3IydWxaeTQ3ZUR0Q3NZY1ZlTmdOV1l2d2lkVm4rR3VZWVpULzM4Mmc1T0xxQWFiWCtUSFhuVFRzeklXRVV3MGliZ0RNVkkyZVJBY0MxdFJzVlJ6MEJWR3E1aEJTdEFXTXdSdGVjYmdPMnozaG9RZE9xTnJJRS9kVUVNM3BpblVlWlczSlI1c24yMHI2enNJVGhiUmN4RGUydXpiK2JxUnM4QXBLTHNxTEZXN253OHVNYklubzlLaFVLU0syRzMzWldVczkwTDNhNGgxQm5FaHkwMjg3SFd4TnNhNWZwMmJUdGNOSVp0N3pqN2Vxcy9HVldlY3BXSzZXaS9BYjNtQU1hWU5mN3MxZmxFVENUR0pSLzlDcUljTkE1N2NwcnlVWXpzZkFnYmNpdUVPOEpOYVVaUUdPMWpPZ2kzWjM5WDZnWTZaVnI1OWxTekFDT293ejhrRzUyY0tJY2wvcThQSzBFSUI3bS9kUVFSRythUDlkNCtjZUxxN3I2ODJubEFheWJhUTlPd3ZZVDBhL1BUY3NwMDk2dUNTZXZYQWVpTlpXWVJzRGFHaG5kMmVJYVVsTkYxcllpTGRpV3JwbmN6bU1ZL3pNdm5MZi9tcUxtVHJjdCtLNkRUVEVPSi9ha2dFc0dFaWpzakpWQUFybndvdVphOEJDV0xqdmRLNjlERzRsYUpINUNkaC9FeSt6TGRGMXdIb0ZqQk1SZUZPRkhyVzNNcDFObTlJUWZ3TTVrK1hrK1p3WE5JaFRkY2xZZ2hkaHVxM21MQ2RHUk42WUw2NVBrcVdoU00rMk5OY2pFWFN5U1c2R2RDWFhOUTJkU3hjSGFVaGhaRUNNa1hoU0NhNmFvOWk5bVlxVGVBSFRqWUpsYytIT1c1cnZoK1F6V2ZGb2FHL2NPUUtsbkdselVxSk1RcjE3T09kNnVUNXJ3ckltcXZ0RG9XUVlDMTZLZFVhMy8vWjwvQkRCPgogICAgPC9CSVI+CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I+MTwvTWFqb3I+CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24+CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I+MTwvTWlub3I+CiAgICAgICAgPC9DQkVGRlZlcnNpb24+CiAgICAgICAgPEJJUkluZm8+CiAgICAgICAgICAgIDxJbnRlZ3JpdHk+ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8+CiAgICAgICAgPEJEQkluZm8+CiAgICAgICAgICAgIDxGb3JtYXQ+CiAgICAgICAgICAgICAgICA8T3JnYW5pemF0aW9uPk1vc2lwPC9Pcmdhbml6YXRpb24+CiAgICAgICAgICAgICAgICA8VHlwZT45PC9UeXBlPgogICAgICAgICAgICA8L0Zvcm1hdD4KICAgICAgICAgICAgPENyZWF0aW9uRGF0ZT4yMDIwLTAxLTA3VDAyOjM4OjUyLjY3MVo8L0NyZWF0aW9uRGF0ZT4KICAgICAgICAgICAgPFR5cGU+SXJpczwvVHlwZT4KICAgICAgICAgICAgPFN1YnR5cGU+TGVmdDwvU3VidHlwZT4KICAgICAgICAgICAgPExldmVsPlJhdzwvTGV2ZWw+CiAgICAgICAgICAgIDxQdXJwb3NlPkVucm9sbDwvUHVycG9zZT4KICAgICAgICAgICAgPFF1YWxpdHk+CiAgICAgICAgICAgICAgICA8QWxnb3JpdGhtPgogICAgICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24+SE1BQzwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPlNIQS0yNTY8L1R5cGU+CiAgICAgICAgICAgICAgICA8L0FsZ29yaXRobT4KICAgICAgICAgICAgICAgIDxTY29yZT4xMDA8L1Njb3JlPgogICAgICAgICAgICA8L1F1YWxpdHk+CiAgICAgICAgPC9CREJJbmZvPgoJCTxCREI+U1VsU0FEQXlNQUFBQU5pTEFBRUFBUUFBMkhzSDVnd1dEaVlXQStJQmMxOHdCZ0ZnQUFBQUFBQUJBZ01LUUFHaEFUa0lBQUQvLy8vL0FBQUFBQUFBQUFBQUFBQUFBQURZUWdBQUFBeHFVQ0FnRFFxSENnQUFBQlJtZEhsd2FuQXlJQUFBQUFCcWNESWdBQUFBTFdwd01tZ0FBQUFXYVdoa2NnQUFBVGtBQUFHaEFBRUhCd0FBQUFBQUQyTnZiSElCQUFBQUFBQVJBQUFBQUdwd01tUC9ULzlSQUNrQUFBQUFBYUVBQUFFNUFBQUFBQUFBQUFBQUFBR2hBQUFCT1FBQUFBQUFBQUFBQUFFSEFRSC9aQUFqQUFGRGNtVmhkRzl5T2lCS1lYTlFaWElnVm1WeWMybHZiaUF4TGprd01DNHgvMUlBREFBQUFBRUFCUVFFQUFIL1hBQVRRRUJJU0ZCSVNGQklTRkJJU0ZCSVNGRC9rQUFLQUFBQUFOZDJBQUgvazk5OUhHRVNMQzBiL1pZWllxVjNuUVZ4TUFXbXpYeHFEVWhlNFhZaDk3V0RISCtoR2RMV2c0bGI0elVrSlIxMFkrUjYzaTBSenl1cFc5N0VXb3RHNnRpUy9TN0JQTW9qMEFKWVpRUzQyOHU5VlJodkJHQ3p4dTIxWVhUYnpqcWpzcVhpSGhBeXBjRTkyRDRrUmxpd3FuSXE2M2l4OU9VNGE1Mm5INVEzVHZKbXVQYk9BTGkxMktTdXFNTXlGZHlqbGIvSDJOOGZZN3creHVCdEU0Ry9lblRvelg2d215SlVBSlltNWZ6SE5OcERmSTdkNWo5NFB6SEJ5eUFqQzBvRCtDeHhtRXhwL3diMENRWktMOFZiMnZyNlhXeERmaHB4ZnpYK0JBMVhUeGJBZjFzdytvOXFkWEdBVkpKRDBwQ3FqSlpSKzhXV09sYmdZSWRzbk1jSS8yaGUweTZwNUhzVVdkb0hUdUxvY1V5YlFBNUU1WUJramlvVXFHckJQVkpmcDVoREdOR3VTUGtVNGc3dlZWa0JEMlgwQWpzZU9IYWFjME1CRHR1bUhobTVMSmZ2NXZUZm1SMzdQRFBGQ3Q5VXdGUDV2VGJhQlNPcG9oUWg4SnBpRmlPSm1aQU56L21uSFoxQUJ2Y29kblArR2tKdzRhNkhENzdOaDJmSk9TRkNKMCs3WStGTGhuVndDQUE3SWlqcFkwWDZWYXhOeHQxbmxyWWJmaWIzSjBJMU1uS0FpZFhNQTBaempBNHN1U0Zkb3g4N3pQNEJqRVA3Q2xGVndlOUt6NnNzSDY3dkpGdk81Z2tBQ3RKQXdTOC9wdlJaUkFKOUJQWDhXbFlsTVNnVkxTc2ZVWU5YNDhxTVpBODZtdW8veDltdEVmWnNaRDdOY3EyK2tYdFRZQnU2MmtEOHozU3NXRTcvZk9SMC8zNVJjQVEwSlRVWXFHSTBNeWhncHlPN2xhblJjcXBpRUxLU2tqbSsveDNZR3kxRXp0a3BDT0FLNGZ6MVJOTWFYdWpoTldhcjVsb2xGSXQxRS9DdUZrbUpPM3IxSWtlOGNQOVFXb1JlT2I1OHJkQnZJRUZBVk9vZzlWWGw0czRPck9wSStPN1NLTU9HNkxkYnFQMGZvVlhPODRtUUNmUUxvdHcrYjcwaUkySm12cUNPRW14aG50dlc3WU8vRGVlOUpPbXFMV0oyVTFya0lZdGgrV25CNGZ2YXJWSmVKY24vUkVDTmtlODJnWUhUZlRWcmdpbTQyT2VBNlFRT3lHZmFtbW9rcmtya2kxUFZiMmdKYkxYdE4zOTVlWTQ3ek1zMU5NUlk2TG5YQ3k0QzVYVlhONDlvU0FFWlZOT01rdlpuR0ZjQk1BUWQrSzlzWFdWV2JNOWZ0MGtNWXJZZHZNRXdqTFpqbzNwT3BnVmZaRWg4YklOdW5jQ2UrQzlqQ0I3TytyT1J5RUpMc2g1UWlVLy9LOFFsZ2Via3VoRjRmSVJrWHBnbXdrSXZzMVBkeVgwWTR4RkFCTWpvMDl0N29iRDVMSVhUQlRhK0hldkFJZWdReWltZWIrSlRWOHhDSUdieVV1b20zOEFsQXJXWkNLTitoWk8yREo5YXNlMWVGcFk4enlUTjJ0UTJCYWxKaU9LK3JmZ09WUDhBOC9Mam5HcTZiakYvTEhTTlhEd2RwNUUvVENUT21aNTFwNHRFdEhScGk2aEFSa1d2NURzSFlzbFRLdk93dG9zdDZJZVEzZzZ4K1VyS0lwNVlmT25SdERjaW9FUDRyLzJ2RUtMaXlFMUJ2TmdsUXZsb05BSXhyVWNpV0g4UFZGOFplb1hHbEhhaEhwclZoSVlvTzRJbFVSZ0RBVkwzeWY1QTNJY2xaemFoS0Ridms1emI4YllpV0hGeEhYMHFsTGFpZGYwNzY2b29VcEVudTdCeDFESW1lTTd0TGdTVGxyNDhGTWN2Yk5YV1ZJeFo0R0lwTWI5d3lKZnlUSzV4WXlNM1NyRXpKdWpLN2o4ajEyaTVvckdtbXAwL3ZNdWQ0NmNzTG1yQkJRRlV0Yk1SOGgweXhmdG1mUFQ0aTdBUW1wSFNrZnprcytWdFJHdkMwbWIvTHIxdjAzRXN1bCtIQk9zMHRIOEo2L1poTUNKOGRhekJvSHpleFpvcWhzWXFqYUticzhJdFJDeDV1UkVaVzFyNm5nVnlhNG1qQlM2R1E2YmRnSVN5UXN3dEJSS0VHUmQyaEdONzliWUpUaU9zVkNpem9id21CSGFORlprUmtGdGRuWXdhKy9YOVRRQ1BFeXJhS1Z3YmNBbk1mVlFUdmlDMzVqWmRXSFM1dklHdWdaRVhJQndOMkptYTU3Smg3dnhXTUJ5M0wxSDVsN21qLzIyTWZCMTh2YXQycGZCdk14YzV0YVJ4TGhkOERyZ2tnNXllVUd0dHF4bXhSS2pIRUVmM0pjVEV4czM3NHMvdVMrd1R5N2ZBL3YxcHhBT2dSOHphem9CdXl2MnlQZGVVZWFQbllacE5JNVJVQXpnWEptY1RLYmRaN3kyMjRscDFjVzg2Vy90RzRTSmhkVmFnUk9va2tnVmQzNU1YYWRBbUkwTUs2eEhYSnNQVkk0ZnlWRExNMzBETkZDdEJjUkFlNThaWDM4dHBxOVMwK1Rya1prdUVVRyttZkhYRGtQWlM2L1lGeXY3c1UxWlJaa204cTNwWWNQNStjSWxZa1VzL29FdXQvM3VLaHBLR01jblVvTG0wUXArdS9sV040SGJIZ2ZwUFZ6YkNmRzNoQ2JmMWRxaGZwZ05ZMDlqdElxbWRNUUxNNC82QlBVdzdaWk5aVk5LQy9IN0U0NkJaTHFuSW1OL0hhOEdNaHNpZ3VsMngwbmhuRzY0WjlHNzNMYU56UUhkRnptZFhvS1JxOVQvUHc5TDJQdDlQdUgyZW5tQjdYSk9kYi9mc2lsWml1TFp2aVYwUUczM0I3dTc3QTM3YVU4Z29ZQklzM2tKUERyODY1Syt4bTJibHZJRTc0YzIwZ1UzZVN1QVhMMzlrYWpBU1Z5cUxzdk0vM2JXS1pmMFlldFZvQUZEQ3F1b212ZHZZRUpmQ2J1VGt3dVB4YzJsT1oycXdONmZtcWVnVjNwNytOZW5pclBodXR6aHpIOEJ2UEV2dmMrak1yOUp0MkJWVGtwbDM4NTJEYnBBL09sQkVMT0h2c0NkMFlUVEExWW5SLzNwTVpHYXJzYjM1WWtSb09PRFJmQjM1dExQU0ZUTm9lQnZEdTRtdXV4RXVEOGhQQkVhdXlXcDZNYUZVMnlFMnJjdnZHeHhZd2Z0Rm03ZEZyWHAwOGlFbDl4dXBsWkhGTDQ5ZDNkbmVxMXc0NDBFWWJVQ25XSCtXVTdlN1lRU292UmNsd2xqTW1OSDhkWExrY0Y4RExWbWJqeDljdUhMRmY2Nk1rTk1lVnhyL1VIVXd2a212TGt1bjBncXd5YlhCcXl0ZGRBN3Z1VXgyRkx6T2krZEhGK2F1OVNKQlg5YU5TaFVZYXJmb2hmREM0Vjk5S3J3K3VySW02alczdUcremRmQUJXWXVadE1FcHYrOUJHRTEyU0sxZytjbnBRV0ZUdHZJbG5yKzQvT0FGTWRJY3J2eXhyd2JDTjlDMXVSV3QyWnl2YXFaSWFVelFxTWhGTlhkdis3d25uMjBEaG1jazY4VTZZZy9CSkxHM0Ywb3JaSGV4QXdvNHdMOG1OSGhMdStybzlVZTM2MUNjdE5lekRVTlVsWDN2dGI1YnUrN0F0VnNLZkVvKzRwbXBjOGszb0VYNlQ3bGI0NEx5TjRyNjN2QkFKcEtpbUIzTndHcTU2c1BiSnR6WnVoSGttMEM0UVF0VjdtajBvR01vSGdXcjI4a0hOb2Y0MVVuUUxRbElMNEtxcS8xZit3YmdrL1prL3M2encxWXZVY08yK0pwaGdYQXNRNTliMytydzdUWlhYbG8wSG9EWGtycmJ0T0xzbXBVR3J3SjdpVzZTNWN3S1FERGRpbmgxcFFQbENwRkFmMDcxRElTcXZFMXdaUmF4ZEFiRWFQVHo1WXE3MFpwd3lFWFBONmg2OHJ6UmZwRDRPTnJsREpqV3FSVVR2KzBuSUEyYjYzQmM2T2JVRWVGUktUUmg1RWt2NThUa0hjL3l2WVFKMklQRGZCS1hVVm9qdk5UVk9ZNER0MHZhWi82d0RLQk80dUc0c2ZFMW9UeFhyN3BteStFUWJXejh2Nk1Ld2RQS0NMZXVEOU12dUNVbWl0ZG9VbkVEMklCTlpKVzdqTTg4YkxQNW0weFV1ejY1NW1Ba2ExeFFMTkJLUU5ZRFhjQmwwSTlwTnpNUm9hMEY2RnZHR29YYmhvTldrTzFrbXJNbTBvZVVyekx3MFBFYnBTRDlMSHo1Z3RNZmdPMFg0bEUxeHJ5MG1BTmhaL0F4YzhMRXJ1SFRESnk1Sjh2YXQ3Vy84OTIveGorMFdtaEwxNDZYRjRkbUZQb2h0VzRVTmV4NVN0bVdxbUdVNGc0YXo0UTUwbjljL0ZQRnBzekoraVNKaTRKR1M5dEF5K09HRGduL0lTQ3VzeXdRZDRPSTNDRHV0VmRHZ2dvZmxNS3ZjY2x2aldlUVZWaHJteFNnU3FqMFQ3T1RsdndvUEEvUXVtUEFvdEFMMTg5Y2J3ZHh2TUhLZTlhWFozM2t4RkhTUUlodVdheWtHeHR0MGRqL1ZYT1NpeE5EVUN3QStRb1Nhb0p5WXBLS2dNTEgwRUd5VjdPM28rQ2licUZ2RExsTWF6VUdZd3FIQWRDOVlSVG14QTdLREhNdFRGeDJXNXF3N29JSkxQSW82ZXdPMnhZQ0pSWFVudzUvdDdPeHZxZWdWT2NyVkgvdmw1WlRzN2JDRU9pdzI0REwrYWpQUkVqVEd3UXFySlhQSEVqUVZIcy81bndpYkcxK3NIVnpuQmEzSW9KTVJ2VG9xT041c3JDSW5RVXU2MTBVTUx1Uk5UYkxqbzRTMDhSKzlGVnFnZzZjQ1ZDQTAxKy9qWUNPODNmQlBWTWxkTHBOUGZTbnRTOHE5V21sMGdFeGNsYkh0R3BOdzZpSUNUemhSVUV5MVd4a2U4bjdBajJDbkpBN1ZCRXJPTlQ4UHE0bEx6K3R4LzVwdmZKcVE5K1FXT3BBQUVZZUdiYkpTMFpEcWg3NFpQOXdOMTlGMmN0ZDY3cDg3bzBLZitzYzJPMTRPeHBoaTVucjRDRHoyaVIwL3dqRllJVHd6enpDM0dEb2QwM1RFU1F5akdvbkZhQlh4V09xVk1Xck11Ty9EM05iSnpqSHhSQnlLcnl5a1lLTVYyeHBIK1Bwbi90OHJMa0lYSEJsS2k1QnhTRXZIdDN5d3NtQ09aL3E4c2E2TWlZeDgrWUduZEJJTmZVS1A3eWJSYkp1U2lCTDVTTzlUaG5OV21hNG8wVHpTMzZMajNPWEltcHZSQVFtNTFnSXp2UmlvQUIwU08ySExpbnhRUUtTa3N1cXMzUjBqT2xZbG1nd3JBQml2endqQzgyQ2M0NmhtNTVqYjl3QXdCY3hUekdCUWdKWG13OUFtZm5WY0tPUzExRXdCdFhXRWxBVmtHQ0JaTm1JVXpzTkVEUlo0aE9xZk1ZamxDY0tsTHB5aVl6UWVJUzlYMkVjM1dEbmNENlNuMzlROXAzQ05rSUhYNkNEL0RwZTRpdDdNYk1YWC9qVVN6ZDBOSFJyZlRIMU1HWUJzM1V3ckkvSWkrc0Y0aEgzS2xKajRseTlzTVpmOUhHcGVMNzZFZ0RhdlBVS1Fuakh3eFdxOGVNRTRvMDhZL05nTnFGdXpqbGRzTmdDbE1IcUVWYUJxa0xlUys1UXgrUjIyVkpwVUEySUxoNmozS054ZEp5Qjh1MFpsdkNXUGw3bVRYcktQYUJlZjRoNU9uWFA3SWpnaG9LZnRyRTB6NklBU01vQjhmQlR2T3hXWmg4UEU2TWlQWFFLcHNDemI0V1V3Y0pWMnBTQ3h6ZWlzeVlSYU1zbWFiWkkraCtYVTFNMFdjZ3lqY0t0TkhjbWFtSjdMMHpaU2ordG9zczU3d0xXVHNwRlIzL3hmY2lDcHBRZ3diZzZ3NTVzRU1EMjNwL3luRXNJUzVhbDdld0RuZWhOSFp5YlBCUjZRcXprb3ViTWZ0S3UrMU95YnE3M2toc244OUdPRm9tbldCSGxiNFpQWFg1emRwbm92aW0wWDNrY3NaZm1tcTA5VE5keFJicEJjS0ZiTjFjUVRIU0YzM3hLeDR1ZHZ6VTBtQzRRNjNCT0w5UUg1eXpVR1VHcVI5V2EyOXJySEpjaENjS3VMV3JZbmx2STcyZ2ZYQjV3K2MwRHpWNzE0NzRCVDZySHJrYXlIcDVpcVJxRFpha3VUVVlVbmRxTDl4WnN0VVlLTXJKelVLcWxmS0xTVmlxKzhHQTlLNTRxYlhMRHlBZW1YMGhNakRsbm5qQXRFdGEvUklkWXRSNnVnL215U25qOEd3UTNHS2VJazFVS256bnBTcE00NnF6UXZOY0hLVGZDV0xBMVNDNkFmNjBRdElDbXBnUVFCM3cyR08xUGgwL0JHZzFvMDVwdzVLMnJocVBoMThqajZYc0ZHQVJudC9kWU56RDRROE5ESkRldWw0OG9FRUNwdXN5Z2tiSWFnSjk3ZVo0L0Y4Q2xtb3drM1o3TXNDU09FV3FuVFZscTJ5Q2IvMkROWGoyMFg5d0tmYUdwYmRuamF5VEJSWC9wc1J5RmpJdndoeWlycFJKdlNJV25DTzZYcTZEUFBsVVJQbW9SbW1tOWl2eVdDQkh2U2JlWWcvNFczNGN3Ylkwak5EUHpOWXVRZDVYYmVFYnZmUU5hMTVwb0Ezb01Yd3RXUUZmMmEwV29YdnNmR0lrZ2xIcU44NEZqd0NWM2xXa3dhUERpVGhTbTh3S0tWRHR3eDVndzh3QzNob2lmNTVtT1dhU1AyMWw2aUdwZ2IzUGhVUkIxaTR3Y1RlNmxGS09XVHJoRUVmREVVTU9abTE5YzJDanBJYS9nUlkvWVJJUm5HdGFDMmNDMXBMQnFOc1lYakVOQ1lydG5mNHZIY2ltaEhjRXhLN1Noa2RUdUJrc3pMU1hCckUrcFFDVHFxcFQwR0gycGdXZ1drNVRFK2cvbE1WWHpUMHRYNW41WU9Sa3FlMGVqMjlVNy9BZUZhRGs0Mjg0ZE9VRUNHd3JZd0tVczAxenlmRWtyNmdlN2g5ZjZWT0lvQW9mNjRlci9QNGQ3TTNnTDVFSFFEVEVRMzl3L0NaWHFvdUpvUkRlbGJXczVpbEF4c2MzWDdmUnRsaURiQ0gwdkVsdFh4NXplaWVwa3JvOVVNczhyMW40WmhwL0c1UldmUWFoYm9GNDZ5ancxeGg0ZG1RWTYva1dlT1o1bnRKaHZBL2wrRWgyNVorSzVHQVJ5SDlRSTVMYWl5cUwrbVViVFZRaW5XNVQ2NjhjRFBOTVlKbUVCMUNmUzlGY3AwYlJUbkVkQ3VUNUVUbnZHVkRMam9XTGdZZDhwWnBtQTNCWCtTa1hTd3dCc1ZLZFhRalpjU3ZEQ2lSL0VyZWlya3EzREFvME5LdzZRZ3ovVU51T29RUDdkM05EZk1VQjlTNWFHUWoxRFhDdEpnVzFuZ3NZbXY3L2V3N2FNdC8yVG1UQXZwME5ZTENXNVNMeVZkVmhBbm12VnBHMEh0S09lYXlOVmtIMzY4OU9KanNRS09CN0FBeU52Tm9CZ2JTaGlkaUZ0b3NwM0dNZXk0QWRjeDBYUDZyY1RBcXB5d2xpVzNmNmMzdmZxeGRmdXdTUG5ic05oTDloalp0emwzRldmYUxJMm03b2dlclRHazhlKzU2ODFLcUJHcDlPSURNZTJFS0w4Z1NUR3dtV2JCZjlnekNCNzJvWnBtelB4Nlc2dTBETnFLa1VjZjVtcExsVXliS3RKZHVMSXNKSzN2b3NYM01uTEYxMEI4UFl5V2ozZ2JGZVM3VEw2enJOZSsvTHZYdjdBa2hUWFdlSkN0Sm1hUHV0MGhLeEtCckdXTE5KYjVXcXRTd2pVZ3J5VngyNTFUSU9OOUJmb05pamZ2THBmWnkyeDZzelJYY1oxZlQ5S0JhZCtmNnhlTTNoU0dBRGVBT1dVMHVhM2ZROGQxZk1GREo5V3g5d3hYN1NYRmRPNTREbHpiY1dEWDBDdlhPZjI5eGQ0d3c0Z2V2WUF2RXBVQzVMcTU0azQveXltUzFWYjFLa1RXN2NXZTJkWkZ0Z1lLUFQvSFNqbVJTL0JHVFZrdGp6bGE3V1A0OXU4MGE1MG5nTkduUFc0TFphZU1OVk84a0t0dGI3OEhscWk2RWU4Q05aMVBkZ0tBM0pYKzZOMDBheVVPVkF3ZWpaZ0NnUWRKaXNHZ0FKcG5LL1pWRWtWV2hVNEdxUThvYlhhK2hGZlFPZCsrRVhUbmt5bnNRVURtVzF0TkFyVUdvZE1GWGwwNWlqRkVmaHdiUFhjcThWdllLUm5GYksycDFob1V2SkxPYTFERnJnN1VGY2pTOWh2SWdkaVNyTlVnak9QbG9yZGhCRXQ5NWgxZW00SFRwcHBCM0pobVpDME5yLzRvZHE3cWwxQnByMEhZdmFPZGdYZE9FaHkzZGtoUFpLMVhjNjB6RDFqQmhlN1kvODYvTE8xb0toemw5S2FMczd2eW5taWVwZkxIYjVDdXJ1VEthS2ZreS9aOTF5UTNwMk5nM2NTeVRrZU5WUHJQbnRZME1hZWdKcnk5RXZPZXIwcUpLYXRtQUNnOHVpWjVXUjRnWmtOQkUyeGtyR08xNm5LN0hjYXRQeUhnRFZDaTFPc2hBOFdCNGE3SkppcEs5SFhKeVlJcHkxcTBObE1MNC9BcGdFUkJCeDVWYkVPVGpMQ2VVT21lQ1dPT2s5djJFU2YrVWtxTTczQnMzQWljdHFyZHd5U2dVV3EzdXFwYlRmZ2JpRU9BMjRSd1pROWFOWXFORlk4Zmh0V2o0TDhjNWlzUUEvU3REbW02dll1QzNXVzZxTCtLREhhVjVyZ2F1M3hWUGE1ZWlZOW5GbllTOWlHUGsweXI3VFdDZUFpQ0l5VUowZU5jVzNEdnhoV0FyK2xYUTM2cFBDYVg0Sm5aM1NDbTJ6SEprMW5mTm5ibEdYWE9MMmM1b2xLYWJvb0hUM2JqM2djNmpjbzZDTWNYdEFJU2w0VzlIWHdPbzIycXV3WmN1eGVKYzhDYXNNQmczc0wycXB5bnN2RHpHMU9GY2ZsQkdiOFJVNGlxSmJERStaT0RpZHA1NUgwT09vRnlCT2lGQjB4OTgraCtBYzV3TFM4UjJYN3MybHNlUmgzeGgrMVRUUDJWOE9uWHlqcHkwOFJFaUt6ZWo5VThWdkp3SU9jQlk1RURMRjVLWldQazkvbFBHYVlBWG1vMFh6aFZQOXR2R1pxNEgrdjBkeGNlVytkZjJINlVBNWF2VGs4VitGRWwwekpoeDRDV1BRSzVJaUFGR1I1Mld1VEp2eHlpTUZKekRPWXJBMmNCd1dVTXVBUktpUWU0N1hBdEIyMjAyMzB5ODBSazdlMEREaE5IbWxXcWlaemhPMUkyVWVUODFVeEpkM0d0SHJNa1dyeWVFSGMwK1AyZlIzWDAvVkpuejlXNCtUWHVQMi9TUmZzOWRQOXV2bDlWbVlmdCtrTC9aNjUwK2ZybGZWWUFNYW9kbEVuaVcvNHFBbkxTSHRoVmg5alZQQ1htRVFGaUZNTVpxZjRDNTZmZS80WkJESzQ1VFdmdzVMVTN2UjVJaHJQQ0w4RGNGeWZlWnVNcEhVc2FRMkFoaXRVbVllNVYvNXJ5c0NvYXdDOEU2ZURZMFl0RmhqT1pWUUE5MFA0TGRuZWJWeFlwZmIxN2NkUkVuN3pnays0cTJUQnJlb2hhVWY0R0RYQnRZeEpzaURCdEJ1cVF3Q1o4TSt1RVl1SGJzUXQ5eFdYdWlwNGNIVFkvQVVNMFlrZlhyNGlwbG5pSUpNSnp3d1lrSDBXVTk4RFlhOThSaUtxNjdoMUpnVUlaUWpRRU13UUZpbTIxS1VzSG91anRlQXYzODdaZzhVT1NDekt4MHI2RDhOcXdveFVXblFubGFNYTNUMk5pQXl4R3JRaTJ0d1pJbnFTaGhWb3NFZXdSaW8reHlwV2EvM0NzL0FiVmg5LysveWc3Rm9nYlhFMmJrNjFKZnAzOVVjbzFiMXRWdWUvN0JnR2V5ZVdnaFlsWGdKS0pOMXMwTDRCRzd4WE9FcSs5eGdjSy9wMlB3ZXFoSTBub3JKZGhRVHU0Q1VibEErZkgwSlRWU2dpdUZ5UXVEZGRDUkxEZ0J1V0lxaXQ0b2NRN3RxNWxnQXVySnQyMlI3UE9WRDNDZ1FuQS9kYW1DVHpGd1hkR0RvakVmOFp5dFhNblBLQTZlV3RKck5VRVg2bzlEam5VNzVNS2grb0J3WkxOQUlEQ1pGQ20vaGJqZ0gya05LRlV2TGIrWE9pbWVZTzRRcVNiVzNZdVBxb0ZiamJ3cGNqMjBzWGNmcTA1Nkx6a3lHUGVnVDNTbDhCSDhkR1IybXFkWldpSmFPaCtqUkI1MjhpSWl0VEpkTlhjRktjcFo0ZHpKV2NrcWpOV1pNWXlRYmcrL3lJVi9uc29wWEgxbE9RQ3ArNVo4N2o3RjEzM0E0YVZHK2kvWWVlMEp3UGVXbVVhbUx0SWdKa0liVEpvTFhoaVBOb1VRWnVMT2VqRXB6eTZTZWdwWWc5eThGZ0huaCt2L2JKVm8xamUvM2Z4UXdEbVRMSGJIdlNpa1BZUGZTQnpxVkU3b2M0c3BqRExleTZya1Y4b2FCbHhETk1EOE9mRkg5bktWc2l0YXJOSzQrczlBNVRGaW9Zdmdxd2NTeUxrbjF0SUlTT0srTXZaaFN0M09UTnF2YkpFck5aM3N1YVp6Q0JmMkpTR0JtdTV0L0psdUovNm56UFJqRnY4aUlTcEI1Z2pWRnRwa0RQa2VGMUkzT0J3K1RjbjZQR21BVHJTcXBNN1JGZzBYOUNGajlBcjhkTzNxMVlOZDAyblJBRlR1TThUclNiOXJzNlRUd09nL21ITU15cVQydVkzMmtUeXFhMU4xK0dmbjRxYXBQYlFJZ012WTVXWkh0YndzOHlac0t4eUtRL2JiYjJncDVlUGxpNWVJTGU4RHNQUXNBdWlZQTgyVU1iekt0TVZZZTk4cU9hL3lObUdTcFRWYXVNbTAyM1IxR3p1eU1YNURlcjZnQzFDcTJLWWRGcko2Z24vUnRDT0N3Rmt3N0FQcmxpV202VDRBWVZ4TUpycXNndVRqYjFKanZtb3Qxdm5NL0YzZ2tFOXo3TEVXMkkyZy81R3gyd29JWFp0dVoyT2FsOU04dVI2OVJTZVNBaENIMEFhNjRhWWVwNlhSV0czdUtFTGt6bSsyTmY0NUxoOUoyempScVZqNXFjZk9NcXl2bFlTVzByMk8rbkhNSTQza1RWVmd5RVFWRHIrWUc1MFhDTERVc2cxV0p5Slo4S2wvY1c5bzM2aTVYYWZwdDF6bWw5VU91UzZxQzZzL2hFQkdPY2dkU21pTE9oNUJIYjFjYS9RUFpnNElITS9Mcy9CZ0NMUTlQL1gveEU1SmQ1a3M0K1FoUDlGdFF4UThCT09oL1VJTDNpd2RucXFXVDZoNUI0dTkrR2tWUnpUYlNCYmpRRVhhRFBUb1pRRS9oM042UHo2ZVp5NzRIaXpRWWt4M1NsZEE1NmJ2bkVyWHNkRk1GWnZNQlc5ZUFnM3pSbnBaTnRFang2cll5dTNYeC81UG56VzVaZzdJd2VtMzV0a2UrZ0pwRG1HQW40Yjl4QS9Jd1ZFUlBYaFJSUmRNVUxHdW96YXhoczlsaWVudGRhWmpDaWphaFlWb21rMGZJNEIrVHNZdFdQdGhIeFJvaWE1ejJsNXN4MnRNRGVCbGl5NWF1Q2VlbTFySC9qWGdxSE9LNzIrVzlrUVYwdjd5b21WYVIrbHBFVGs3VWtaRjQwd3kxcEJaYkVvUnNUd3ZqellvQkh2TFExZnpDeG1HWjJ4R0p1Wm1VVHpCZWFUSVJ6TUhNdlBVVkhvMGJwVG1mMUZKclNuUTQ5QVdFY1R3U2oxTG4xckNHcHF0SEw2REpha3RseC93ZGUrTlFtbFc1Wkwvb1FObjk3cXhLT0ZERGRWYWJZbDFXTjJtR2JNWWhJb1dUMHZ0K3c0YzFnZmlZeDhhVFJSNTFQUDc4aUQvckpicTNuVVdzVHJBNjdESy85RG5rZzl0OFhMOVNyTzJSU2h0R0F3WkxRTS85Sm1EMDVCeWoxT1lBM0tSV2F1QXRpMWxDZmVXSDRHQk1DakxIOURJVDFIZlF6aDhBdGdVMEZjanhRb1ptNHdTR1plU0hudlIwM05SOFZYS3B2WUdpS3JzV0gybXhoL2pqcGpJUmdicC9BSHp3V0Uyc2x4ajBMckZuL0ZYbyt2KzVEZE52aDA5YzA4eC9LZFNIbVZwVlY4L0M1Zk1lczE2aS9oZXl6Rk5za0s5VDVnRXkya0Mvc1FBby95QzZnSkd3eFFObU9oVzZiYzZiVFpJaWl1UGR6bHZVK1Nnb3BEZFJ6RDBLT0lob3JNbkhoeHY4UFZSNG1LWCtWNlY4aXRSQmx6b3Z6WW0rcDJhSWZ3VG9pUmMwenZWZjFPWC83bFUzaXRsZTV2eE1GajRTMlM1ZHg0OW1pbW0veXN6cWozWUN4WUllL1NGRkMzdFNXdHBKVTUxV0hPdEhYa3RSSjBQdklwL1Z0SUVhbkd0b3RvcTh2U2lzbzJkQjFKajF4ZEk3RElCRVNGNlQ0SjIrR0FMZENUMlhIc0hVb2kvek1MZ2tFczd1RE8xeDlRMzk0ZlJPV3lGeXJXY3dwWWlQSHlvbTFET2czZ2tBWXhJM1lYTmlhSFVhUzF4VjFhaEZuUkl4U1NnUjAraGxSMWcrL0ZMUGE2cWZvS3lyVVE2MG1Ob1A1Uy9xbldJeXR3Y2gwZUY0blV5SFkwNG9VRldyaXlaN0J4SVFGcm1XMUt2eWM2d1NZekh0Z3hQN054cW5ab09Ddnhwby8xVGk5bE9BWHgvYTI2cUc1OXVhUEdsVnZWalgyRHRqTTRVZmJyRTFWRzBzWVJwYVFnVythRzZkMnJCMWw2emNocmUwaHliYm1yUDBmMlhCK1FmUlVRZHkwTUhVSlpjYTMxTGN0VFcxdXp6Q1p6WWRxYmVJWU9IOTFpbGFlNDVadGh6VEhuMmtORG1neThWNmtRaDB0KzFHdng0UzNYSlp6UDhCbG93cjFGY0FnL25oblFWb1Z1YjJpTDNuVzF0T3YwRG02THBnamFzd245TUgza0kza09mWlNicHhmZmVJbURLdHYwaFVmL0tvcmJsbkZoYkpkbDRXTnBoRWt4b3Jlcm9YK0ZpYSthU01hTFpsWHFjcU5PSkpGK29ydnFrZVIvbG51Sk05T2NmRnB5cDNHMTJiMlJ3THN5dEFTVllWb3kySGlSc0MrZFJLQU42YkttOVJxd1cydzB1bG1SZjNhWnlaZWhBbndqdk5kbXNqdHVJYXhHN1VzVUI0UWJEUUFZM0pyMEhHbWRKQmxwMVZxWkcvQmplQjlVREZsaGRMRkNMODBjZG5adzdHNEQvZWgyV2haaFlsb1ltQ2d0NmpBemc0d0NRc0FzZ2E2OEtHeXR5dEdmMnNBOVAxVnFRYWxsZEtmOHpvVVhqR1BCaGtwK3hobWEwRDdjK1VYeVZhSGl3RlpUVk5DbkcvbkZiZ2grVEJjYldFN1pqRHNUaDVpM3AwMmxIOXZWTmw3YkJsZllXM09qbE0vRG9iUnBSb1lncGYwZW9TUWFIZFo4NjN3N29RNEF1d1RBUzdXK0tNeFRVUGdvbEpyVk8rcjR5bjMwTEd6bkhXZ2k3S2xrOFU1aStWU2I3ZjNJbXlCZERXdVVOM2xMTkdQNVJaRWdQOGdQaWRZNS9GOEtXRTNHdXBDMGhmcnU2akdwYWUvUnpWVEdnTVo0a3pldmpjaTBLTFNXcFMrUGN2OHZhaU8rVFNaVlI2MU5ralkzellxRFZGemdhN0pXSXVOYytuQjFlNDNlTmxPZHBaY2pHRk5aQnF2dWl3YjB4d0YwQUQ3TzZjd2xqdzZXUCtCYlFaY0QzajJvQ09sMUVNUWxwTGFHL0wxOEkyd1dPYVJtNEFheHlGUnBDQm84T3R1WXBWYTJOM1ZPMnhFa3dyR3ZlUGxmSzVTNDNtbzNMdmtBc0haQ0ViWHptQk1KdzJJSWc3QXNSb2dacHJIUkhtUGc0ZklMY1F3MjRNVm5sem81SXh4b3pQUEZyQUpWbHhmK3Rvdk5oOElMTW1SWHNteGx6cWNYblY0c2FnUFRJTmQxNXZhYUR5OFp6R0dqUUtlbmJ3ekdjUzVySCsvL2M0TVc2M2x1VFZsTWQzZktucFp5SG43M3N4TGlPQVdQYzJWdmRjSHF4SldlR0JwZ0xFSnU0TS9kVURzMEwxTERDYlVsT0E5SWt5d2R6akp5WmU2OFhTN0dsWGZRK3pVODYxQTdrcHFoMjYvWWhHSlF5RWt6ZFZJSHFnWng1WjNPcDR5NHRxZmxFbFlRUVlQM0hCaGZJTTZISDJkc2pQYzMwSGdFZGdCN3ZRM3NvNjlweFFjSWlwYVBRRFVtOUdyeGVNSjg1MFl3QnFvaSsxU1dhYzZ6VVF0NkZFU1JYN2JaUUQzNWswckFTN09SWVdaQ3I0RXUzTEZUV0QrRGNYVmlOZ0lXb1ZTTlpHOWhLQ3JLRDh1bUZSMkNpaDViRkJGUjVsSXJETDgzVWV6RW1OMisvZE9SdzBkNTVoL0EwdUJ5NGV2cUdGcGcrbE8vclhhc3EwRUdJSlBjY3NKMndWN05FNk1WdWcrQU1HditDV04zVFlSUm11emFjdkw5WkVqMGhSYktsTzlpSCtweXhlWEduVkpuZExxUzlHN3JNaGRPWi8vUEt2dGlOMUZNYnVRcGkzaTBqTUV0eTZTQ3M4Mkt5NCt6aWVoVUtpdHZNSGVEVkxYdUs0NFJmQnRrQk9TSHpYbEZKdmpLZHRwWHZqSk1yTkZiQkszN01pT3J4ZFluOEVJYlBSMitPaFhVTTFLQTlUYzlNNitud01lYnBQMCt6YmpyOGpBYVBmVVZVdW1PYzVRb1AyNEI4ZFBIUmlGbTFmRy9zekNHclNycU0vWjJ2NUtJOGVFTWNlRmpySkZhaGJNdmZvc05pSEE4SDZrYkVwMkxZL045c04zYm9hU0hRa1lvT3doUnU3R0NtejBMSkRXNVh1U2tNOTJJdEhlRjRDRmFzQlE4d0hwdEt5bEEzOFU4a3Vjc0ROQytQVHNhN2tKdXprQlR4U1FBK0ErOUNjVkpaWFNhOCtYVndsRjNnZ2YrejMybnpBdlRhdWxuTU5LQTM2TkNIdkRVd2tsOURsQi8wV2luY21wc1RyVExodnY0TExPWWZDamlMc3YxSUhZOTZMR0pGdEFhMXREWnIvbnFMcUhFWERkVDdkWlIwZnJWK2NFQVRGbGw5ck9INmp2VWZRN2VwQ29mcHdibFQ3M25HT3A5ZnRONlBEQzViU0dsSUVQc3IvWlBDRkpEWVRzMDYzOW0xSmdwV3EvVGZCMnlTdkhMdEtRc0lsUFZGQklQTC9vdWNIRWY3VHVnczg1Z1JGTi9LWnVwOEFSZzdaVmNGOE10c2dzbC9pRU9pa2ZJVnl6azhSTWkza3FZeFp2T3h1VFBtWEp5Rzl4TjAyY1RSZ3JFTkNIWXdIa1Rxcm56aUhRT1NxNC9yc2xQNFN3MW0zVVpndkhjdEJtUzBKU3poUnByRDJBdU9KYUVHNmkvbDZ0alZjK0RlcGViU1krckI0NC9PdHFzL3kzMTFYOHZuQTNzenkvNmhOVEpIK1J2d3dGRzNEUzBmRit2eWRJOVFINGlrOCtVVW9KUXQwYi9ZREUvZkoyemxRekg5aWIrdW9GbkN1VFR4Yko4RDZmQ2gzN0xORW5QSHFVVGVBSDk1THY5YWJKWDNEQTlhK0IySkRJUE1KZTJnL3B0VkhYclBjN0FrWVRZajBvdVZ6SkZPUjJlODRSVlpoMVExb0VQbStnNFk0d1VPMWV4RDRYRlhpNWo2WndOdWF0ZEFxTDZzcUZmK09pQ3NJeERnSThCeWRjeStPK0I0S202aldaYWphbmloZjNtajJ4UVk3K2ljbndGa1JWZW02QTRUbmpBbmxzczRzMGExSjRRZVYweFRCaGo1RlZCM20xOUlDdzFtSm11YjRNUEVDVkpHRTIySzFMRmZWcEFzeXExQWpMMHZ0MXFLb2JrSXlMNUx5RFZLYm1VKzl3MVRXYWJOcTh1V0xlblhVaiszYnBTcXF6a1VYOW01dk55ZWJQZHMvRXpraHdjSmNQREhrdnMyTjFGck84VUorckJmZDlldndPRGVPZFM0SElDT1ZSYU9GazdnYUVrdWk5V1JEL1dYbXZJRlBNcUIzdys0VUYrSjZBckJRUmZXMW1ZQU54c3I4SGN2a3k1WGpFTVkxZHN3MjBTclBDODVmOXE3cUhCUHA5U3p1em94RmZlaVpHVmFWOVVONG0zcm8ycU9TVDJxeHdZdlQ5M2hOUk1WMCs3YUVpejVzRXZDQnl4ZURoR1FNYkNrZVN1VTBGZ1RDZnY0Yi9US1EvQ3pya3d5VkIveHhGT2p0Y09IU1lLQXpRYVR4K1ltRDN4ek0xYWFZMzl1dWtqTHA3M25teCtOSFBjeW04MU1tL09VWlVjNEVGa1I5NVFwM290b2M2VkZleHZzcWdlQzB5V05sS1dsU3RRUDJsdHN6M3l5THdabXVNazEwMlNQcWxjTFhBWTJObXJXT1ZEL3paTEhQU3hkQXpVTmdmWmNZVmpBdlRuWElkRVNyYWdxeDdDNGRPamxhNldBOU9Tbk16V1Z1blBPZ2trbXBHeFFJRzA1NnVieFo5akVpQk0rWFhsOVpuZmQ3Vms0cDA0QWxWZXhsVEFwa3AwelRxTURlaTR3TFU1cHo0eFIvRnlwclgxNGxEUGNCSDlsMG0yYUdPMDJlR1ZzOUZFLzhneVgwdFFvcC8xbDNQZjltWGlKRWJON1NDQmFGTEVDVStiZTZ5RS9VdGY1OEl2TWowY3hjWUs4Y242Q012VWtDeHJxMHMvSDJDVjJsOEIwMlFYMWVqcWhtV0NlS3pvN1hkL0QyMVV0Tk9IMjA4UHk3T1ZuOXNKT01aeTFPa2JqeE5lMER0OXdqaDhMVzNjdzR1TllWRi96ZkMzcG14MDdMaWIvaW5pd2lHdEd6MEJDd0dRb1RXcmM0NXdJcnFva2hiNFJXaDNTcHQ5aHpDUVd4WHk1MGQyTWxXU3UrMHUwbWtDeCt6ZXZML1pOaTZ6SGVWdTVKRHQ2Q0RHaUtOa2dCcDN3empTYkJ1a21sazgwb3IzbXNmMlBNZlF1MzhtTU9mdGlwY1hqb3B3Wlp5UVl4RVMrL2pCaTN1R0lpQzdId3B1bWVmZW9Eb2dic0xTbXNSYkg0ckxZYWl3VkJvczVUNUxuSUNpK3prdkFXeWg0UEVKTnM3RG02UXlqWDNXOEtYNUVNajFNNVlqbjRrSzl3Nmk5Y0phOEpGQ3BuL1doM0gxQ2U1RDlhdXhEaVF6eXlxa1UzNHhhZXRxMThSNEp4TWJ2UEFpQ09jS0wxNktlSzBvUTd6ak1VaWRZWDFqU2srWEg1SVFFMFNoRzdoZ0wwS0pYSmlyQ0pNbVJtZE95MDJwaUQvUkY4aWlhRkcwcW91b0RJQkRCcSttSWxTV3hSaHFBZjNHcUQweS9jU3lGMys0ZDd6UzFlT3poRkg0SGpIY3VmNzVrUGtCYURXNWZUWUpvMjVkZ1N3NWI1RU9UQkZ3eURYS3kwMnlPS1U0U1BWSVoyOFk4YmFZeWFBOENHeFlTT3AzMUNRZGJTUVAyQldaSkZ0akRkZWcyKzRVSzNUaFRnVXJqYmN2SVRyZjdlSVQ3RDFjNnpuVDFuK3l5dHl6L3JPcVdhcndQOXpvL3lOVTRlQ0NLZWMxMmNGZlVYNlRvZDJaREU5WDBodzVPcDZoTHArTkR1SktQbGVxVlR3N09ML1ovT0N4Y2QvRmxFUDk0TXk2cHY4elNaWnBhQ242OHk0cEU4WlY3UWVhVyt4YWMweU4vOTJOOXFmajNOTzJDYVE0K3Z4V1hhM0E5WjBqRVpTdjRKOWh5Z3VhYkpUdDRaTmticjVDank5aXpRckkvNUhpN3ZDbzMzVjVJNVlPSW5jTXZCWkZVZXZkV1hkVnZTaXYvOWJOa0hjWjR2UUlaWWloNkY1TktTY3RUV1hBSm1ZaGs3QUR4c21Uc2UyQjhwZkxMQ1A1clVqa2h2TmJZWFJkWlRlV3B6K3plQnl3SGR2TElzVFRJekc1bEhNcDkxN3lwTWFnSnA2UVlpMTNrbEg0emN6aHdRdmRHK1NtNmQ5RXJQd1lvK3IyV2pyMGdkNW9lc0U0VVRFYTN4SVFvemJqVFptaHljQ1JiVDBCNE5Ga2ZGZ3F2V3BucW13dUZ1QXArNXI5eWl4NzBzSFllN1JvZHlHSlU0V0R3TnBEeHJaZy85dm1sNU1uY1kvaDhBZG52OWdwamt3bWRwbkhFRU1OejFqc01SQ2tlS0RPZmtBSDdZRkpveElzajJ3UVZoU0QwY1RKWkVMaytIWGtyL1VodXdGUCtoSHZJQzJtci9Eam5hR1BYOWNVNEdsZExTQ21sdldORXpVZnFMd2lHWHFUU0MraTdYbVg2ckMyM0ZvQnllRGJjRkpzY0llN1BmVFdPQk05ZnQ5SVgyY3hmWDM4UWgxNnJJYjMzNVZlUDdhK2xKNE5UamV4cHNUdmJrVlIvdGF5aFVyekFIc3NnQ3c1cHF6Smg4WFN2dmVGUlNqV1d3QjlVQlRYZjdtaDViTkgwTEI1TlBydlZFdmc1L3J5UkxXVzhzeTRSa0JXZnR0TnhReWxzR3N4SnZzOGxPNEUwQWJZeVIwSVRidm0wODJvRjdaQmxROTNIUlZPZFRMUzRzck50Y3U4V0JySFQ4TWxhakdWRzRsaHNaK3BnbU9mWnhuNTZTQ0hjR1haOVZwd0M2Vzh5bi9HenBhY2MxdUl0NUFCWjJWclRhS0dsUWpJYWgxRGZkWFQxMmg4eUc5Y1p5OXU0MkU2TEtLTWVvWVZsd1NPL01jVkZRVkREM1JuYlFJMHBWT2l4L2Fjbld2dWVOOE9ScGI5VS85eEpoVDhmdDVqNXFyVHA4VG5nalNHZEt4aGEyU3FOK3hHZzcwdXgyTEQyNEFRMUZlck9taHRlNnU0WHk1czBYQ3gvRHoybTN1V25VL3pRWmJkR3RwS2xETnpKZ2NZODNGUWpFck1PRzN0SVFOYTJuWFJnNldZQ0NNMjA4UE5hVnh2VFhPOS9nckVJd3FNZFNSZWRZVUpzK2t5YzVhM3d0a2s5VTJwSk4vSlUvSkI5MDMzYi9qT050T3NwVVRzaVJrOXZIVjB1bVdRVzVXVUtjS0VweU5FSy9BWDhrdlpoL2JkRzh3eEphM29NRytOV2dneENEWC94TURmcHl6ekNTbUFmNkR0Ym93MjNUcFQyQS9WbG1pRVBuM0RWZmt5OFA1WlIvbldpKzdmYW4wVlRiM0RXdCtvWWdtYkFFbnpWOGVRYnduQ1VlZk5sZ24zN3dnUnkwNUZhV3FONlcwV05BMGk1d05ZdFJ4SVIvcnlOQlVaYWFhVk1hbzBmZnUyS1J3ZUxkRHdwbVJqWGVqN0lHb00vU3JQLzAyaHZuRG0zNzBNYlBCcnFBTGFoNHZBcFZCak5lN3RqYTNlWmlqeUZMUnZYeHBtcEhMM1ZOMzFUcFowa25tSy9KS1Qwc09QZEJPLzBUU1NCWHYvRG9KUlJaQ3RteHhDUk9pYzhWdlM1c3V4V3JFc2hmdEtxQ3pCSGhCZ3Z2T1Z3VWJWakt1SUR6UFozSFVHU0psaG5UbHlJSnE4WWZvTjF4ZGtrMzloaEYzcExHT2JIekh5b2FhRFpWQjdmbVpGWFFZemlHNTdFLzF3aEU5MkdKeHNCWUY1eU9mQTZXOE5ERHBHU0xmNC9IRisyN2VYcmpNMWhXd05iNllONVN6VkxBSWJFamFoNm80Yko0eW9OcXlFd3NOeml2MDgyUXJwMUkxWjFrc3lGaFhia1Q1bzYrUVNSd2xjRHRnbWxhY1JzaHhTREs5OEZvazEvbGhGbWtoaEliT29Rdk5tWFdjRVFvNzQrL2JieTFLOGp1TEFmY0JYM25yWVVCWDJ6VzA1bkRZcldTSnZCVDlkUi9vSHVBUmJqbEN5R2x3aHBPTzAxWDltczlFRGJCbUtvYStBMEN4SWhMRTAvOFBaRlBkN3NUb1kweTVwem5PSDhzUklIbTYxdU1ER0N2VDljT1F0VTBnUDAwcy91eno4QWN5eXpnOHFvSkFmcnplZGJnOVh2bzljQW5lMnFNaDFsVU5GeUNtUmNkQW1ndEF3TzhIdkFnWmZQR2pvU1IyTHB2a2MvMlVQYzh4MTRxNVdlQnI2aFRDTFhwaTdaSEZVc1NNWkM3alJ5OFdjSDQwUDFWWlNkR3RrTHdUOWtGelFyVi83WjRUZ3BQcTEyVGZqdFZEZWQ1TXo3TDhIQktwSGQ2NnFkZnRRd3hIbUMzSFJ6SUZpUjN3U3JqVXQ3ZkU3MTlHRklldHV4WXhmZFVmODhIQldvYVpVRVpLakE0M1ZQakRpTkVGM09CTTFsSVQzR21Sa0lXRHJWQ3VvM0x4Wk1FYjY1ZWtHR0N6YzdZRktpTVIrRjE5SUVSenpBRzI5THFpYWZXc2x4TzhaUGtYWjVxWXZqL0krNCtNQnFma3RhSWYrRVczUDZhNEI1NTNSVlNKM29Gbmd0eE9UNEo2Z0pIUWh3QWJRYld0QThnR1BiTUtObW5laEtwUCt1RkMvdERHTGpxRE12UGZOZHg4TDBhaGNFYTVoWmt5eGhSSldTRVNTNWRxZW4zdGRVeFNZUnNPRVY0WlZOc2VoRlIwbzVBTkx0RHM3SnpRc3RrL0dYazAwaXE4MWNsbFZ0YTI5MU9PVkRkSkRvUUQwNEZmTmdhcWhXMjQxTURUVGRFOG4zZjBhMjlHVENKSEV4eGtyclMzNzEzRlA4ZmtTaGI4UnZuT253d0tqSElPNXdObnMwUkQvNEJwQW9nNTU3YVBnUnc5bng3Tm9NK2lHdCs0MXNJRS9tRzNsL1pqZjF5V25aMGYzQ2ZuWElkZ2Z0UzJiNkcwS2t3MEJNQ2lMdElIUHkwVWFOTGtDZXVmYW14bmNXVXZCR2lvVk13bGFKdlVCVHdNc3hYaktXTFFjSnIrSGJEVm45WUxmY29HSnFhWVJBS1FLMHB6U2phYmkxSXN4ekcyQWtza25Vc0tvK2JPaFh5TFZuTWt1TjBqSXNpdDRFN2M0Nnp1WnJBVFM3QlFFOGg5d1hrNnY5ak81TUwwcFN6djYvMU1GUVFpQ1I5cTFxVU96OFo0UXRQQjR3MVhCOS9mRDZvellnNXhUU0RnNTYwMmk0V1NpYlNWenlHcnhZbjlNN1RlekVWM0xwcnplYllCQm5Lc2lHZ1J2OGpZUmMwVWRKU0pTNWRBOE43ajFoOTlDTXRZczF1aVFRNEkvME44OVV0SGk3Mjc5MGk1Tk9ML0dGM0JKbXlSdGc3cXQyVm1pTGpRMDNDZ2xaVW1UeHl1V2FvMmZZZ3RhM0NJM2FTajU4eFBwRFVWOGNta3lJNFZPWTUxQ3BmODdsaTFDYlhlT2RKZ2FEbFN0UGtXR3NIN2t6Y2dZL0pzNHZBV0doajRtYVgrQVdma3Jldk91MU12bnJ5a25OQXErd1R5VkNWRDhTSFNiTXh5a2g5UWtpdUNxY25sTlltS0F6YUYxcUR6bmxHR0tpbGswaVR1bjNuR2hhRUxhbVVEWGRDNW5kTmRSRy96U0dSQTZuY21Zd0JSZTErb0FyZ3ZtUWc5Umpxc2hvMFYwSnllRjZ5eFNQNkdhdDc4a3JFeTY5RHB1WFAvRzZKYVFXUnFyMDJXbjdKaThWbmcxRmtBNzZUNUNuam94REVFMFZIWWEzU0NROXRyUU1WdkV0UFNib0wwc1BwRjI2bmZaRVhLS0lmOHQ1NXFhdFZFTXNjTzRlT1RzNTQ1U012dFlRZENYN3hJK0l4UnlLTUtTa2FGTkFCQURNWEs4eXorUi9sT0owU3h0em13QmtUako0aS8yU0FLUjRLT3Z4aUpkUVRRNzR5ODh3ZFNhWDlaSk1zL3VuSnc2SHg5SlVKNzllNVZ2TS9EeS82Vkh0a2FKaXU5djVweUpCLzFMZ1VKbit1Y241WTVXN21wQ3RneFRXNzBGWWQ4NHdJSTREYUdOZXRiQ1dlOFF1dWFDcit4bXliek13bVBmaHVJL2hpb1RiQUNULzBkUktuSkhIMzJGVjUvellsNVpOd1o3bnlCTGp6dWQvcTlHVkUrbWtkdXovajhiWGdXdjlBL2tuTHZPaS9UQlRjUE9RYUEzNER0dkJhbDY5RXZrVmRaWGw3a2Jac2Rlbjd6YVQ4ZEM2UE9PWkdDamRnWkVhZWNoM2ZDeEFFU3RnSXpuS0tOTmlwOFZGYVFsdE00N0RIaC9PK2RPYVdrK21ZOGo1WGZvWFA5bkxldCtIVnNsRE90dGRhc001MVFEN2hldkRJTU5UWU1uaC83RjZrbGpEeW96d2dLajl3OFNvSVlyRkFVS2VnRE9EcXFndUllc1lIVWN0S2NKOXlyeEQrbFF1bWJHdER1OUZmSmQzenhydGJIaVJmUnNtdGZidytjcHg4aXZQM2JUekt0Q3o1NzJ6KzM5d09aMjJGaG5EcStQeWsyZEdWeHlnYm05WGxrbnZNeExGOUVmWW1SVDNIa29Zc055VWtPZHk1RlphUjF4d3BDZXkvODIwR2p5UENhRHBoV0pGM0FxVmF5czJzQXFUam1zKzBqbjFQdnZ6c2pmODQ4UTlVVnViclJTMkVocWpTdE9Id0FyczNKWHY1OUpwVGhlT0NlM2xQVytVWHlUdTdIS2UzRWdHakQ1bllwME14QW9zdEFlbjZtcXNRZGptWDJxbVJmdEJVWVpFTlFCS2dmeDlBNXlsQS8vQlhWTzRteWhxdnFzSVhtRmpteC9kUDQyL09pSkppTXUxUVhQWDg2UlA5MGtuaFhibHpkNExobUw3T1doNGRyN0NvTDJ2TlVrWUFEUjFrNGFlelcvYnJOdld2L0FFNmxsMG5mSGJ3ZVFLTnBLMXpzNmpURFg2VUlDcmVSRktRdkxRenNjZ3pQWThnLzRvcVY3akFLTituOUpsT3BhM0NtSFZYeFF4SVpucDNWK1poRERWWUtxM2tTNzNxTDBha3EyZ3V1UkFoWHJhTUgrd0ZaNVovRjNmamxuMEJSbFBxTmpjMEhSblpXbnptd1R2bmZJOTg0K3F2STFQd1RCYU45WlVoZlRpd0hjOEZQRU1uSmlkUTBaQnhSTEhzRTNGejVjZnRxeGhCRDBlN1pEZjdRVElBQjdRMzRmMnRxSUliNFZ1ZFpNZnJ0eVNMZ0ErUkdudG5DUE9zQ01zZTZHRWU3SG14TEZ1cit4V09vWEUvc212TTRaSFBqT2NlbDVHcnRRSFhDNE4waXJraEFNbDV6NjFwdFMyazJITEUveWE4ZTg2MFhFcUxFREhxb0RhRG9ZdzEvYkhSbmsvNklwL1ZVV21McWwwejFheW1LU1pVSWQvMG5tMTlYVW5PbkU3dDNqd0tScFF4UXpvZ0Q4elZLSkl5MXhRNERsdStUdTJRQjVzMitZZDRWaWs5dk5OQU54bHBMMDFLNGU4WUNvZHZCREpXWndpQ0lEY3FGNE15NHUwYzlmK0MwYXhwODZ4WmQva3NmeGxlallCWnltMXIrZkdKWllBbERkSVhJM0R0V3UzYnphTlpzNTNSajBCeHAwOFVIQnNsdlFveWgyS1VRdXFNbktrK1dqZGhpOGphd0FxZXVJQTdPQ3FFdFBOYWp1YmpqMU5SalUrSE5NZGQ2bzRyNHZZTEZHdFU2bG5pK3dEbzQvQ0dsVFhtRXJTbmxrMFVWWk9ocDNUczJnVGdZVEJuSk0veFZjV3hRckt3Syt5V3NtWU5FZjVIQSs1Q3NGWUV5MXhmZlN1UmpMeE1ld042V25kNDd1NkhGR1dLajRhZVZhVlQrSGhMOEh3b3Z3MXlNY0RkejVOelYzb0RWb3F1VkVrOU9HaWhWdFM3R2ZlbThkZDVxRmhXYkdJZ0NzSmJoaW1MeC9GQ0ZYVWIrMm1jQnMxaG5NWWMwbmxWbWRtVFJZa292R3Q5Q3VKM0NXMzNTUmMxckliZFRRRjUzT0RKZGxwQU1KM3hKWWFJZUpqWW55clJQYUhpaGFiL2xxUjlHYllScVpCVUJlSGFnTEdWM1FXR1Q4TXdMY2hyZWJqODNrclgwUldlT0dEYnBIT0NnMmkwZjR5dVEvc25hYkhuci9FSk9DUGF6M0JMOEFxVnpVYVNGSGd0TU04VFVmcm1zZ2QydzA4aFFES3czeXlFMktsY2JqczkwR2V0b3lhTkJCak1ZR01XWTZQRUxWNTI5eUFkQmVqTEJjZ1RRTC9SZmdvSVh2QitZL3k2bER5Zy9oWWYrSFFEL1lzak5aS2twT3VEcFIvWUY3MHBYenNGU0lpQkg1QjdpdFZKOEMxT3hSUDhWNmh1NkZpNERPNGx6U2p5QUpRVFNzS1dPSkxoYzVib3c5a3FLRU5XM1BwQU96R2oxQytBanRLUmRTai95ZDNZdW5kT3FZOERPeWhkdGIyWFZQMUQ5U0R4dDNIa0pqRUZyRnJLeFIySU5melc2TjY0UkV5SEl6S2Jrd0RBSHJrUjhIeXRlV1NCS05odTRtbWdyeldYVE1JSWZ4TmZjREl1ajU2cmdnSE01V01aaUNobGc3WHU3RG53T3FUb3FMT3FiWm1FOGxwa0JNc3htNlA1eG9UeWhiRHp0eVR5N1pYT0RsbTRiQkhkUmhQYWZ4dVRLU3BycG9RS0FLMFFScjBvZ0lPdDdkZU13K0ppT2lheE1wbTk3MjVOdExQYzBsSzFKYkxPcmNCT1FBZEtrdUNMbGJlZDBOUXpPUE1ET1Bra1Jhb3FTYU1GUG5jSXBMa3hiQUQ3Ky9DR3J3KzNpTWM1T1MrcGlPUzZqam5ydVNkRHFxNTNXWVF2dE1ZUEh6NFg1QitFM1poVzl1N0hDdzMwb3NzZkhSekNYYkxKUzZJSzVCaXFMVjE0UkRVckdKVEsrVGV0azFrcDdCcWoybXdXNk5QUlJQL2V2cElRMFgwUUZaNzB6akU4VXVoclFNUmtSdllVRUdIZ1FlZ2VnYlFsRFNxUWxyR1Jqclk0cEJqRTFzZDBmSk1zczBBYkhFb1ovckNOU3Vldm9WMWFoU1RJcUdwS0d1YlMvM0N4RXVQTUhYelVBY2s2K2ZTUXVlZkUrdGh0OWpnQ2pxc0JTVmRlQ0pOMmdJVnEwOXZjOEthWitDSWVkMkx0WXMwN2d2TytVOFgvSlIwNU4rTUFvYk5tTHZBOStwcnZ6RVZtSmhUQTRhYW1rSGRYYTIzT3loQmVZeXFrc21ZK1NjUms3Q1hjVFg3bS9leXZZZlZrNHErVVVKT1gvZ1ppWEwrbittOW5jdzFPY21WVEVuUEhMTDUvOG9CeHlvd2Nod0NRdGE4dllwVk1YWkVtcGRiTmZSYUd4ckFjMGZwK0RyUGlNTVFhU0JTUGZJL1JDeFh2aXkzdE84MG9xOFBNbjVWMk1ob3ppTmhsdHZjZ1ZHb09qaGtXd05LczV1bXAyaUFhTjM2RUh0bVJIdVVPZUIxd24rekx5c0tEeDNEZTdYMHlINHdqaHJzRkFFSXAxZHY5TzJScnhDZHllSktpRGlhZDE3ZEsyMWFKdFJFRktVQktDSjFHQk02RjdWWHFIZ3hiTFJLR1RuRDlTWk1HRkI2OWxJVnJWdjdQT2lZd2NpRUk1WXQ3blNWMHBxTkFVR3RCYUdLb2JiYUtMYlJZWDQ1c3hHRlNRY2NIbDZibGV6MXFUSGhBaklyUjRiMjd2dTM0ZHRTcTZSRzNLL2xyRlJnOHhJMGM5d3c0Vk1uZjI0UVRoeFpDU2VkWkR4NzlXcXY4SnVLQ3lWNDlCb0Q5YU9pSktCWmFHTWdFQTFFUm16QlBOdUZsZGZjRkRKNitib0VaQ2JkWGhGNWxQWVZwOHltOThzZ1NleTBFbjRraXRZelZibXBndVVlRWo2VVd2U2ZkdDBLWXlyV0NucWcvVEI0aEV2LzluOElLRk9Ibm5CQnJLdEo2bUVnYWdDWWVpT0I4eGk1czI2VEl3YnU5dVRwQ1BmNXVqYTRKRllaUGdJODJUeTVkcWxiakZxR0FlSjd3VFVWbTRpTkF1ZWVzRFh3WCtiUlR1UmxSV2ZJY2grVGNhWEdkK1RtblJuZklQUEMxUzNhRVQyenVTUXlHY2Z5Q29PRlJCcVhJRHhBdnJxcVJUbWQ4MitTRFFBcWIzTGlISVEvdWVjV3BTTjczVWRGYkhkVjNqakQ2N2VXc2pjQW9xNzBIeDBsSmFFMFVRNitSQ3hTOHFQUkZReWszbWgrWUFEdG5tK3NBSW4ydnJ5SkZWenpYOEJyRVlLUHp5SElYSHlGZlcwUUdPUGJiVWJEMEFGYTIvSURTYlBvR2EzY3p4czdQeEN5STBWU3lwdFdQcTlFWXJwTmhxbWQxWXJtSVBFR1BXZnByd0hXSUFFRWtNVTljY1hhZkJ5SENRQjNDNkRrTVh6bTNJZFE0SVNrK3NLVzNLbktSV3E2UFNoY210UWxUTVh5TmRFQ0duTlNTWktYcXZwa1lKb2dQZDl3NVZVcVdsb0g5YXM2bG0xZDhBSlYwaWtacHlFK2ZFaTFsOUwrWjM3R0R3YkxMY0lGMnlvZ29aU2Y3Y2EyUTRSekdhTXlOZlQ2Sm5lSGNKcWFGVFpKeHMxdUludGVsSEwrOG1VY0hCZ0NUek5pWFZ4eDRWRWdvdC9mZmNwR25WdzVCWFpvc1RDOHFweDB3UEh2S0RVWnRGbU9OM294cEhHOUhTbTVXdWFudWxveExLVGVKTm9mZDdnM0hlb0VTZEZINWtDdWszWS9PYm1tYW5kdjZYUGFGeGUvSEJtUXdSbkZqL0gvbnU0SVJvRk91TjltMWQ0alVhcWVpWXpYdVgvZXlRWnl1Vm9yd0ptSUVzcitXN083VVdhcUJCYUd3dU81ZFRXQ2N6NEtzcDk4dEQ5NzVFbS9BOUdDNXRWYWl4UHBGTmNLMWVKdEk3RzVkby96U1A1TCt0aFRuN1ZTMjFxd2lSK3Ird2d4UzVnVWpnbi9jL0hXRURaQVI0Sm42ZXhDaHlySUxIcTBHVStiOTBZSHBUOFBmclMwMTJPMVJwU3JqTHNBVTN6Y0VWeFhwWTJNLzJwTmYrOUhWckZTMnNFdkxrNlIyMFJhR0VXMzE4REtLNmtIdlFzcjJwV1B4eXFhbUNxUkdTcVVJSlpRSUtxSFhtT3pNdHdLL3FicmliRjIrcTZWZzZOaGhGTDMrSmt6aDFITFhmWWlraW5qM0pwUURRWnVncGIyREl4OFRRYXlGZWxQT2VOcDhyajREUU5ISmxkUEhmQVhGRDRNeE0yOVlPT1F1L3hhRFR4ZnRnYXQwSkpCMUpDcmJXblBCeWhvcFVoTW5SYmRpU0orcVRSVGVsY3E2MEpaQTVaUFFybHdBcGZKbCtCbFdPNHZiR2xwSzRQOFRXVzV1TkFNVjVTM0c5K3gwWWNMNXpvNU9rNG1NYXpCWjFVc1U5bFkyMVZ3Q2dDQlNjOVk1SnEvV0gyZnZvTTJuNW5mTExmcHFIb3ZLL3dTWlAyaEpNdktuOXdhU0xVaHp5cVR4K3lUNmlMeDVGUFlmVlBLeFM0S3g3T090L2lxYW1vTGpHS3QzWGcxbDNrYVRqR0lCV0xlVHdFZzkzbDJiWFlmbUwyYlFNNnVPY0ViU29XUGZqMHpyZktwN2dHRzVWdXZ5MS93Q1U5WG04ME4vZmVMcTFIbmNTWGY3Y3N6UTlXanFUL1haKzNscllYYXg3TlVERnNlNHMwYk5rK0ROZWoxcUtDNVB4YURKYVdzdU1TR2crSnkzSCtsbjFCNC9SQXJyazROMzBmVnhKY1QrWDdISWd5QlZtTWdsaTlHOG0yN01nMnE5NFo2Wjh2TWxwMFEvcjBJVXAxRkNxVFA1M2dkOGx1SHUwZTduRWJqck1HR0Y3c3JYZUxNUmNlRjRqVGdJai9OSFZ4aGZocFM0V0NGZjFhZGc1WXZ2ZWttTXlwc0xPUld1UktXNU9VMVRYUWJjZVFvN1MxeGZZV2NLa2J3b1ZtZ3Z5L2dEN1JoUktDUEpZU29DVkpSZzVFTUl5ZXFDb0xhQzd2RStSNE1teHVXUSszaTB2MlBQaWJ5K0RMdld5aktJL3lZM25GRjFpVHBCVCtNazVvd1U1MVdBcERXZEl4MVN4T0twTTcyd1VhZWwyd1VHUExYZkQ5SWtLZGhvMDNwL1NVVllRY3FhamF6TUFpZWxEMVlTcGtOQWNheFN5ai92bU1PS2t2ZUxKQldEZUxDNFllNStYNUZRRVRLTzM3TWZuZ0d5em85ZE5aY2VaVElpOElmOHBrSjJ1SWxBTWdJYTVieGorT2JwL0RHcVB4b1doZzdKOERuSmI5M09oTjZsVm5xbHAvbEtiMEpqVWE1U2xIRmFQd0pqUXhLRTd6SXJZSWlqZ1loY0N5ZXJDRW1ORk16SmZQRnpDa3FWR1k3SkdzbzdnV1JlOTk5TGpDTFF0Wnhyd0F6SXVqOTNoTkJKeStKNDNrNW1rdnJ1MnVrL3Fpd1BMbm0zQWZBaXBpMUV4K25HQXFIS3JNWmYrWG9XenVSTjF6NzRSSFB1dDNnSDNFVkpnVGNUOE9OQUU3REZWcTd1eWN4dHl2Sk1Sc2RwWG5CcVQzYnlRZUpKSmQydTljM1BueThBekJOUWlCZGVsNlBXc0VMVWNGUElsS0k1ZmV5eHQ2VEdBUGZXVDBCZWZZMHA0cXdPZ0lzNkh2d1dyOUJqUFdDUnU4REtWcnNtNkp4MDhrQy9qY3pGcmhXQmVOWHMxVFNiVWxVU2J0WW5KSStmSzF3T0FtRW1IZEFOWVkxL2ZSM1dDSjh3cHFUdkdaMytuTUI3azB1bDlwODBnL1BwL1kyQ2VBNHk4OEhGeE54NmFNYlRRNmdQWmNrWUZSMWZlaVhhZGhMMFBUbzV5NG4vYmxGWlhPRW1OakZIdzlBV2JVaDdkc3c3WEJyNnlhbmg2Y1BGaVFUSnVCVTYxejlLV0FoVnpNYjhsYVlqRXA4eHgra2RTaVlTL2ZYc2E3N0l2ZWJRWTRPNW44UDl0cklyT3MxVzRXc2xoeGd3S0hLckJKNlM3V3pzb0VvRFhOVkR3azRWVW1GNkpXMjNxYjNyTnVpTVhqNVVITlJ4RWc0NFpjUElUTW45QmRhNTh5MnBoYWE1U2M4enBQd3M0WGtSZ0xRL2tRcDR6TnU2VmdITmtMTWpubjBEL1gvanVxZTlNMER5dUxXNVNLd2hBaGZkMWFFNnNUcDJydWJOT203akdsSC94dFFldnJrRDNqRWhiU01SS3FtMUxsNnVkbklJUHZoalFHRXpRRElFRVJiR210czhQWDV6SDcyN1dueVMyOStXYy8ydnloTGZBZVJrMzFLb2hEMTJHSU1XNmd4NnN3VHJ4TVZuMUNDaWI3WEVHdmpWUTRGRC9Eb1YzSlhFekNLeW83M2NLWEs3WlRJOHlXais5QmlFQitIL3dZekdUQmxNK2Z2ZDI3VTlpZ3l1ODZ1WmlNcWFwZTc2THNLZnhmb2F1aXFCU04xTXg1WlZ1WDMwYUZUTFhCRTN4T05sVk1GUFgrL0FlbWlKaUxkOUVrM1E5c3ZMUkQvV0pOMEJxOUJaMVFSTlM0aktyemQ0b0taaHJ2WTliM2IyajlFMmF2Q3pGUFRuU0tDN0pKeVFoc1hydEVSRWkrTjBmUkFNNUVDMUZMc2p0VmhyQzd1SGt3WWFjRGFXNWRPSTVwNzR5eTMxTm44L2Q5amFWVUY3OThVS1p3NGcreGVwazBMeGFPS2lMYXo1R21IRU1BQjVkb3JHQUdJMmdMS3REV0ZHbEVyUzdQTkVnMERTcldUT2JGSXYzdEd3aFVCQlg1cmZZd0tZa3pFWUtScGh1NXZSOVRzVXg0a1RmL3p4dEtzR2M2OEIvUUJha1dSZFlKN0FXckhjSU9nMVJ0WkYraGdtRE5wYnpPVzVHK2djZlRneFdEbGkxZWtzblVmV3R3OUh1TTFodm1ObGIxSGtrN3FncFFWdHVWcGxhYWNabDZmQm9nZDB6SHRNZW5vRSt6WDlQN2k0Q0hrdDBiT1VSSFZ0anI1T3ZEUDhSU1BEZlpEZkRvQzdXbUc1dWtqdy9RYURFaUJYZFJ3Vit1NkJQOWdnNUt0b0RDTThnbXhxeC8xb1J2YitmZ2I5d1liVTRKOGt4cWlZQlY3NmdMZ0RXYzFaaG9NQTNkOHdIZ0pTN3hWM3FuS3BTSHhRY3E3Yis0QlpsbUpHWUpRcXRUaVlHbnV0TjlrZUI2WXFoZEhSaFZBUzhiRXdUSE5OUDlCSUVxc1RpaUtJWGlSRDRYczgyV1I1SWN3WlR0czdGKzJPcmJLNW5HdUlOUENGTlZUSGFkK1V6dlJtR2xWN3VPNitCWHIwYlZkSDFLLzJNanN2Vnl5M09qMmtRTmxSNlRHVnd1RExXM3ZDOHAyMno3MmQ1MW1MYVBOcEJsQ0xEU3kxenhXT1RybURBelRCV3JFNHFkeGZoNUQvUXlRZlJKTUpmeTU0UVFrSmlwSUN5NmhEa0llUU1xODcyNXY3UWtvR2xIcGxwMTAxOTdzZmc0NkVVa0dCYzNsMTNIOTd2aURKSHRudUQ5QmlKUUp4dG9XZDRmT1ZoSVpnRkZJWDQ0TUt5d3VHNzVGMjNqU0x4N3VkVVh3QWE4dHczeFFMWnN4b2UyZWM3N3d1VlFSa1cvU041U1Y0aFlwaUdQc1hMZWRCQjl3ZGhidVFCUEJhZC92aXRGd3A5V2lNOU1iQmZ2YkpCRFhYdEpkR2d2TGRQZHAxK1ZFSG1mK0o2THk5Q1JsNFZLdzZjOHF5YkhVZURRWVJnV2R2ZjJkRDQ5MHVTdmM5REZHaWVMYUFDbUhMUmY3aTR4NjlwSzVXZmhVV0Vic2s1U1VmSS9zL01vanE5TVVYVEZSU2M2Z25rVE9TY2tVdnhwR0dZNDNiT1lzcjBjRHlaMUQ0N1pjVUM2dkVXYmp5dkxLcldIZG83c0MzejBPeXdtTjhuRzIraHc2eDJlU01IV2pIZnRneWg1YzJOSUcraGROditBWm93ZHV3MDgrdEJ1TkxJeHFveUtHODk2bURqU0xpVnUrRnlPd3RZMHduU3Z2djAxUWxmR1E4b2QzaXpCQWFXelM0azA5SzZmKzU5NURaMnVCdFFkbnZhVERsY3BSVkMrclZkbkhzN2N0MU9DMGFhVFdmNGgrYmtuTWprTjEraFJ3eitEVWkxVTcyOGVMM2NSQ2NXYnBMMm0wWCtkLzVDTEJTN3hxRVYrbHQvZGhrcTR1VjF2Vll2NEpKbjIyWlJyM3FINzQ4QnFBd2pyRHVWQ1VqMnQwdmpCMlFZN2VEd2ZKaXk5VStUNXQ3aGxpc3NYTVRHZHNoZE5QWTJCOVdJbWlXZUkzVDBFbm1zZWdZVCtTNDIxYnRIM045amw1ZzlGZmduNzVuWUt0cHFXRTZtVTB5ZXBldHc0S01hTFR2TWtrci9lZkRueHFSWnU3UXg2Qmc5c2tKWi9tU1Y5MEVDS1ROc3JxSDlvVVR3UE5Ra3A4TXpTdUhJYklCNWRkTWpBcldDcVZNTTJsN2hkbnlLdjhLZTF0WlJON0ErNGdGNW56TUpDVll5dmp2SXJUNTJZQnEwaUxUZUI1aG0rVEgvUEkzdmcyNHNTUGc1WVVqZFhzNUwrVGROdmRLR1NDZlp1YXVST0daaWV6ajl0RDVCNVArREhGK3lRL1dhTG9KaXRiY0JKRzFBdDg3dzBSQnpEL3ltSVpweVI5ZFphRjFLRWhldjVSMFRUY3B0dkpEYk9GRC9LK1VVU1hUUFhyWEpPVU0zRFR2WU1EOERIdHlKVFhaVW4yRndRd2gzNzV5bDZiOGlXTjlXTWFHVlFiMXhzTlJmWExhTGRPa2JxY1piWHpGTlZsZkV5a3FROHFyYjkyQ2ZQUkI2aTdRYkZhZ1RGVnltcC9CZU1tR3ZnNEhnQXhVNTVlUlN0U0QzdUF1QkNUUDB2V1d5ZGJGb2ROT2NqeVBoVlVxVm4yTTZFU3ViN0xaSVpoU3JNTlJmcjBQWDZHRzFtUUpTK3crM0JqL05QaE5FNC8ybjl4a2JZalJVREdDVXhxbnppYWtsQTYzaVVXSzU5TSsyOWJUL1FOOCt4T0xMeWh3ZEJrOURQSmFxTHd0bmFVUlNpVU1lTW0rUjZ5OTZWN0J6cjBpNEV0cDNHSVMzaURBd3VIdjFNeXpuem1kclYzZ1YrRGhqQnhMMlFrSEc3WjJiWmJIOXpWbm9FTFZEQVdHYlorNmsrZFhsR054eGYvR2ZQOXlYOXZzNDUrZjdRZjUrMnMrZjdJVjlYc2FmbisxeGZKMk54K1QwTi9rN3JZL0oyanZoMjNoL1Y3elA2dmJ4L3l2ZXAvVDZGNzUvdHhmcTl2UytiN3Q4K1R2WC9xNmhMNS9UWDN6OTF2MVVkd2I1L3JjL3E5UjNmbitzbmZKMW5ueWZVQ3ZuK292Zko5WDIrVHFKbjVPNS8wbmFMUHg5T3Z5V2dNZHBZdzFhUUtIaXk1UkxtL0U2NVZvV1A5WXFUck8ycHFqdUNHVFVpMVNkRmF3a3V3Y3hScnZLS2Z1eENCVFFQZlc3WGx5ckRWZmcrdkhRSTlOVWdHbklDZzY1RVhERmJJUDZBNlNLY3pqbjFvT1lZVEJ2WGNWam1UUTM5enJoV3pZR0pBY3cyemRNT1MwQytLWkdhNm90bVlmeFM3YjJneDAyeVk0N0pJeHUyenk1SVdkMWIvSHpRR3l1OVhURXIreDNLZUJMTklqQ2F3bXAramNCQmlWQ3RieEYyZVh4MytlNWlORWtpa21nTmFJb1Y0NVZKcDRCR3JVWGhUcUY3UGlJU1BnajhUOHo2QXhMMFJzbm1ja21RTnV1TW5CcHJoc2Fuc0JtcHhYVlVlRG5jeXBHZWQwY2Jvd2ZkMWVjVHo1eTFOSGJ5Z1FHNE81WmtpWUN4WUZ4OWh1cDdWZUFFMUJ3anhSN1ZxaDZxSE9PaW84aVhZOTI3S3g2TzMrMHFUbVdkUklIVERVdTl5T3NxaGVudWo1ZUJ4VnBHamJVOUhsRE9ldE1wT3VCZjkxcE5yUzBDM3pvdUY1TmNvL3pRSUZ3djBjMWloeGFibVM2alE3cnlIaFVDOFNmaTdpb2dWcW1QNnM0b1d6dG03a3BId0Vkdlo0YVlvb1l4WkVKYlg4dUFYaDhsano1eVdobkt4V1J5eXM4UE8rUzFmNVRQLzhuTU5HZlY2eFE0YzdSQXI5eHU3QWppcEc1NnlCVjcxdGRFRHozWmlYVlRUb0RRbGNSaCtSNVZzaW5HMUdvMk5CdnRTTVpPZFBNZEhrOVlkdGtxd0hNeTlGektTZWwva0t1aGFNQllSa2s0SEx6bzlMVERMSy9zc0J5dmxtMTZRQk9QWUZWcVhIcFJvQWdDR3FrQURtZHNuYmJ1SUpEbDA1d2RYQ3V3WmZNMmVpam5FL1B3cnFqZ0lFT2ZseGovZk5rYnR4ZEN1enJWNXhldzV1dWFsN2h3dmtxZFQ5U21GUmk4ZjZVQmY4aEVOMStmK1hFbkRkTFBkekFHeEN4NEorVytRY1g2dWhIcmtEWVpzcloySGlnRHZvSWRtcXl5clJUV2pEYTkvSFdsZ1oyT0Iycnp6ZFpUNUtnMGVxa0VlM2ZIRmFVa1VQdm1YcDJCSFZXNm9wZzJjWFpRei9jaG9YNzRVYUFNTkJQbGxrazQ0Y01uRWwzRi84ejlQQWVXTGhFSW14bDNJRHRwWWxiRURXcldST29wb0JnajRaU0lqa2JXaHVCbHdUbGlIRVhzVzROOFg0ZHl4cHBpekNvWUJ5Q2UyQ1BNV1pCSmREYUl0SEg3M3VlMldSY3NsakpmZzJQeU1US3FJUXgzMHR2TTZ3U1JkU2habTQ1SUorcTRUQVl0TDQxdXMxNzIxaXBpUzRuc3hNY3hFVHlZdmFyUkFhL3NheDVXUnBUaW9rcE93WTNoQ3lHODBLOUZmVnExenVhWWJzOWVtRXVlRFprZHZqcnlKMVQ0NVN1UHJBOUlGZG4vQms1WGVmQ0xIQS9Vc09ZOVl5N3g1bEFNUGttd2JOYjFsRm1RbzMyQ1ZmZll6RXZFdWl0VTlqTm8rcTRNQjV0RStCOFVMNXpaVUJ3SWJMV3kxMG45d2xzTHp2clh3QXRROFVEV0F0NUNzNW5nY2xxZ0crV3AyR3VrNTRJOEx4TFMzUWxUWUYwMXQ1elZZc29ZUVJ6N093M1IwRUNJZjJEVTdBL3VnWE40KzFUSXdJektySnZZb0JobjhvZk9oeEVmOTBlZ2taM2wxcGNvQWFPQmU4RnE0dlQxa1MvOU9JUnhqSWhjRWpWeGZqRzlGdGpKQmNDUEw3TXhBTitQN0RCd3l5QnZ0MmN3Tkx5YS9uZzQ2SmVSOFhIWE1EUUdENWJHWE9GWkhBTnBVdXpQcGtia2tpd1ZrUEtBcmluL0k3VWg2M2xxZmE5U21VY256SFVtZ1p1ZW11eUZHMTFaUFNHcDJIMDhrdHJ3RldCTmo5UENONWI1alAvZmFTSCtHYzNXOVNVY1R2WDBlcXp6Ym10RUNEWmVPTjRpZXVtUS9uSTcreHdpa0hwZ3FLWW5BeU0vZ3o2YzlPT1B1RDIrNGk5SmVIdTdWWTlBcU9hSjlCMVlOVXZrZCtHWkNLS2I0WmN6NE1SYkh2QmJqR0d5YXRUVlRiNjBVNGlEYStDZUlLaXArUGtOa3ExMGc2bGRGbGt1dWR2TVFQMUo1c1JlVlQwK1dqMUVlWEFtVTJMOVZkbytIV25kNy9IQzB1RHZyQjdsSitra1NPcHMzb1pLaVl3T2ZxRVZ3WFFmTWVYWlVFZ0pGMWhLQXZmRkZMSEtSYnBlbG1nVnZsNjg4Y0dXYTBmR3RWOHdCUE5MdlJsTG5RZjl3WWZKQ1hTaS90ZmpIODJQY21yRU1FbWRZRUR0c3ZKcGx0cmJXSW9uaVExNXVpMlRzWng0cFUvdnV3bFliUm5sTUdlM0hHYTdsVlk0UnIzTlo1cm5YaDdIWC8wc0VWb25CbFl4ejlQNlBuZzdIdVR4TnR4dkUzM1ZaRHRPN1JnaEQyWHIrNUdSSDBZL3FoOXhEZ2V2d2hPU2tSZmQvNjI1NTN1YXB1RDIyaFdZUVdyOGZQbWloMWFWc0ZVTUZ4aU9idHhRbytnT3UvejdHcy82VlRHdW9VVGhkQ09HVVhIUmF3M1BPMGhnd3RUUitGSWVTSmNXbFVvSXN2MUtFb25JZE5nMUk0WGtxNUQ2TFRBeTkwamtrZ0NUUldMMVRzSVFjV2lJSEhJTS9oSFlqV2k3VnR1Q3ozV0xuV0ZaTFJrUSt0WUZqOXhsUmFlaEZmSCtxN1F0aDQ3UjkyT2hoNWprRCs3cXVQejN2Z2g1SHozUkZpeXMvbllDZ3FuUjlNTS9UUjROWkFCby9sb2pYL1pEa2svL0l4SFBab0ZLVnJ1OXc3cWJLL1kxWFVnT0FvOFAxV1hDbHN1c0FXQUxLQ3oxVUlFSlZjNk4vd1doZDRIeWl5VjJXc1lMejdjU0ZMTHFGUnBXVEtvdXg3QjAvbGI0ZHRpSGtaV29sck01ZHBDa1JrL2Z4Nk9xd29LanVzTmIrQWcraTJmVlprY3pHWGhGMGdLUStqaGwyaTVvcXNnVkJwUzBDUlkrTTFDQkZwTE0zWWFlbmkzMlZCNDJwUlp6TWI4VEljM0ZzRHRDNU4vSDRsSW5DSWZqanpDcnJCYkRzTzM0SzE5M1lFNGhlMG5RWXUxaVZic25tSllZSXYyWHo3WW1IeGNybVRpblF3OHFuQXcvYkxhNEpqL0poRjU3RDhsOG9oeTdVSWNWR0wwa1RYSDNxVXNiTDRiRE5uQTJxZmlmVVI1UkZVaTR4SzNLeUVUMENHK2gxN1JKMEFwY0dXUFFDSWVaQm1Yd09ncm1rRXFPRks3OUFhWGM1RzZEakhLZXVPSXRvbkZiOWFGSkVhcXVxQXJlNk5xK3IzMFAwQWNkSTJNL1pkZUVJMS9ZcHgxQ1dlQ2dudEZjb2o0WlFnUFZpY3ZwYTFaSHNoY3habzExQ1JONXZvVzNLaUN1UnBHNFkzMGU4QzdPbGVNNGVsWlliTG14dk55R1Z1UDgybGFQQVdmeXdaVDQ4OS9ETjBzYVVpQ3ZNNENvUGsyZVp5Vkx2eWhRMk9yK2lVOHhsYlNuZzB5eW13cjJnWmp2MXZNWW1rSkliRGFQNFcxbzZYd3MyeTVaOU1HV3JyaHBrZW5EWTdHTkE0ZHcxNUE1bjZFMUV6YTJ0b0d0eW5CQWRaaEpZRVpkRnhwTk9ZaUlsUUtJSmZVcGZVTFNaU2pWaEcyZGVOYjJveDhlTVRZSlRqaVFUbEhvdUQxYUoxWHVtWkZmekNrdGlrbzBHM1YxMk5HMURFQis2S1VyQXhSRkwxbTB6bXpHMTlvcUZxSzBNTkhqY3RiZW5WOHBsTlB4QVlzZ3JpOVF6amY3WUprS1NRQW1YMDhoTlBRZGVSUEM5d2l0aFo0aDMwSEFTOStqdFF1M0g0N0tZdkNwNWJTc3pNTDdOY3VSNXdDMk5PaTEvOFpNS3B1NDRvVGJmbWx5dVBJU2tzMzY1N3gvWEZacUVuYWM1NFRqNC9jMHZQZWxaYllWNnl1WWIxRE1IODEwS1BCQXo2ZHJkNTZJaUpxRDdZVXJqMFhiLzFxbU8wNDFyRUVrYzBwYkZFc0pwa09PNXZ4a3FuR1V4K3BDOWpCQkZ6NXZTdzV5c3ZUc2MwckpyUzUvanVDc0NrV3Q1TTBWNUtqdjlhdDErTDliWVcxVzE5b2hCQm9HdVh3UkdtaERKS2pyRVhBRmpXb3VzZ3l5M21vUE9YdUlXTDViWGV4eGgzSC9acktCa2JheGJ5eUY4ZEhwSStUNDk5UG5zcWxqell2cnhpV2kzbUpnaEhYcDdndjRMeU8xZ0VNNGh5Zy9tMHBzQjJmcjd4aVV5TkhxcEQwTnQ1WnpROW5qWFVFL09YV2pHTzN6WFFoK09yN2N6RDlnUk16bkw0UVNta1RPd3ZzbzM0T3NXbmJsMGdsdXNoVVQyWUdxUjUvU0FxSnhLSDdYUHlDUytBMUdWMEJsUlpzc0tXUEtDT3k4MllIMmVVSnhZV2FVOU15ZTdHeExuYjJGbnJzQ01hOGNRRjV3SG91cU90QW16S29ZNjdaYU1aNFoxNGViQnRXMDcvWWdaVkdYekgzSEVGcndyenJFbUlHdzNoYjNUSU1FZFVYdkdqdmVSV0pnY3lNNzFKbTgxLzZlOVNKdmRMenpWWDd2ek1ubzFweUc2Y2dkcmJtNTFJbVRMV2ZxZFFacVg1cnJPdWhDdXd2MUFOcUNmV213MUcxY251dytGVVNnUkg3aDZYOFpWalVlNXA5QkVsejYzb2RUWmtTeld2WHFrUWxIemh5bzJFUklKaGhxa0lvWnNTSlpPa3kwNXgvRWdhUlVkVlRUblJMVzVqcllqdlpyaC9BTS93dGV4YnUwc0k0MXZycFZIRjRGa25UZ2xoM1lNVHJDTGFhNWdUQ05CdE12ZTJSUUFEMktIQXBMOUVFZXJOWFpSd1ROYmdkaG9abFhQYU5qdDJvZjJRNnUzVlpaUjZnWG90WjFwUWdKNHE2UlNGMm0zSFoveTd0M0xZSk96YzZhaFBBVWFYdmRwVnlNeGthS2hIU2lXZHRLU1R0N1VTNTJuT3lGTmN3Wmp3Skg1Ty9DTVdQVEF1dmdJeFVST1FGcTQ0cjFUbWttYlgwNkNvWVdUSUdVdXBNS2pKYTBxa3pkdkZ3K2xIdXJZeHl1bDNadTFMbWQ0SFpmem1xMWJUMm1Ld1FibGQ4azFRMzhsc2prUUtSOEFudDBLRlgyeXB3U1BoaU5CZTFMV1htcXlubFNYb0xiY05sUGF4UTd5TUwzM0g2UUd5M0Nkb0FTRkErSEZjMysveG1OdzRvcWE3OTc1L05sSndvT0tsNDFFWm9qSFN0UmdIMTVWaGNMTVZ6aGJKVmt1K2pDa2hKZHY0WWFWdmtzdnIwRENoMHZ2ZGRZbklLSlN1Yy9IRm05RDU2TWF6QkxYWHdVOWdRb0NLWU1lcVFkRXl6RXRIWE5zL29IZ0hrT1Z5ejU5M21vdHlTeklRUjk4a0xiN2FYb09jUnFSZTNRNU1ENkdwRk1TUjV2bGlRUGJzSGc5YlB0Ni9JUHBoOGxzazFCN284UVZHbFZnSFBHOU5LdGpzYUUvWUdCOWtHajB2OUIzb2orTmlmQSsvYVV1OVBZTFUwdkVEbnY0UjJEMi9qWHRaYXRSWWZUczlxZzM1ZDdCRDJCZ0wxVTF6YmNNTFNHVEV0eVlSeU1GT3FmaDlRd2dsTit3SUdjckRVdThWOCsxbVhCcGNxWFVGUmNDL2pzS3crazRuZGgzM3FYd3NXY0ttazZrdGp3MWMzM0VwZmFoR1lqNXNPVlVnQU5PYzh0TjRTRGRxRW1yc0RoWlNJZm5lOXZSRUtRbjBhNnlJL3FHdHJBNEFXQTNQK1J6WDBoaWpSbzJDdmZBRmdrV01xR3g3Y21WRjFmS3FJSHVadkpwOFhCWnhnRGJGNzBMZjl5bjExR3U4aU9iZm1VeE9XSDFscFEzZXNJb2Vld2NnOXdXUVFLaC85QUJQc1luckJhaHQ3QkpjWnFlbkpIMzhsWjZqaysvQmNtKy9wSENESjN5ajV3VTZVQ3IvZWJXYUYwdGFocEkzR0hTZkVSQ2VxNWJSSGN5bTRPL2Q2SGVEYXpMS0dqc3pJZEV5M2YxMXh5bi92cHZxNVdEQjdFZFVMS2F0bUdINTZGaXpaSmczRG9LYTNZUVBHK295NlF5Y2E4RVB4cEEweCt6c01hWU1CQnlsUnNTbnBCMVliMERJclhQblM2TGliaTcrZkg4dDVHWm94T0RiTVdDNmhaTXNVT1pwYTN3VFkwTnora0d4WENaL3ZERUxUVThxUUFlS0h3NlBJL0p4QjRRY25YSGxJNVV5d0w5bTZoNW8yazJDbnJoSFV2cHZiTDFPZG5tL2RVMjRxWndpam1IaUVUOWxwSk9MNGlqNXp2NTNpUDlWbldSM3dJZ0ZnM0hFb2Y4ZitMNDhodkNuS1cxN1drSForNlB1bll3Tkt0d3ZPU0w3cFcySjVGcHZTT2N2MWpLVWNNUE9lV3VhRGVzUWh0WUlwN29LREpOSzIrb3JlaVRwOXZyV3Z6UmxnM3Z0b05JenNRMnZwZUpXU3JZOFFoaUZxbmM4cjh1NDZ1UlIyODdCM2RGV0xxclN5ZWlYaEVHbnZjbTJpbUZKQlhUVjFzMExsbTUwdDYvOFE4S2gveWVtclIzN2RIMDRkZHlMbUpaZk4zNUlNRFhCVjNpMm5sN2JlSnNEVXFrMkNFYXVnemdzYi9RQ3FXNHRTTExqWWdXVWNLczJ3Ulp6ODI2S2RYY3FmYlU1SGQvQyt1SE5tTHdiOWdiUFFPeTJTMFpLcndmQWJWN2xjOUR3SmdzeW90aHhBTUJkdi9XUmJESTA4OG5WbG9rNExtRFUyd1RZdW9lckNMaXBxUlVzTVlyTnpwSFlNYTJ6ZTVOdmtpYk5TamJ5MTVFbXdNd1Fta1BBdjNHbzlLanJibTVJbktFb1JYelJrWElRdENWZ291Wk45RkN1Um5XZ2JVbi9SQTl5SVI5TWZZMXpHdEM2cElsNW5Kd3dadXlkMHJUanZQdWFRWTlFRkZML1ZIM1FCdm9jZmF2RlhuT1IrUXFYanFhS3ZqRmI2ZzBXN0drZzVTcnRvVVFnY0RxVlFFNVk5WDVtcFErZGF5djJyditiOFZLNXE3dGQ3Z2ZndFMwWm1yY0VyeHpvR3ZaWkxwd0NwWHVEVExhYVpub3dSaVBRc0pCTW5ITFVaR0NhK1N2N3BYeFpKY1NlMmU3VjhHMDlnUUdDWDRkek1wSklxblFGcTl6NHRuaGMrTVlpVWdPWE9lSTNIQW9NVkw4YmR1RThrS2dMMzlXa2M1SDhEb1JHdG5MaXl0MmJnd2hWMGJXYU1tMXdWWG90UzJ4dHVUcUg4RWpUbWRlN3pJVmR2RVREbTR1NG9PalFSdDczZks4TVo5WjFKajRZcEUrQ0FaWWgwUFh6Y1dsWTNJNzZkOUlmSDlsT2Zld2FmY2QwVnYwODlJSkhRUHZrYzIwbXFPSE5JOHdCekxOM1R1b2JBY25hdTczQTBpNUtlNEpUMGg4Y21BakphWklGdVVER1R4b2tRZXBjeVR4ZGlzSEFuZjIycVEyWmJwaTdnSUU1SHkzQXVuVEdmd1ZjMm5uT05VNjFLQWdZMnFaT3dKOXY4NXJhT2FQV0tCR29ac1Y0cUlmUFpNNGc2MG9DTkd5ZGp6SVNFUGZ3WE9KUWRNRmQzWGd1R2tIVEwzQk82Y2lDYUZkK0ZVbWhuemZ6QkJRUUQrZ21BamdBb28xMm8rUkVzVnpmYXZ1TjFMWVE2WVBGMFJhS0ZkOWs4VjRPbzNEclVUakIySVNvd1BmS0JjRlNXQ1d5WUFNM1grS1psdC9RSUtZYnpEQk5rMUo0K0ZYSXVYN0lITGQzNUp6VXJqRVdyMFRUWXJtbkY0dkxRQ205TkE1TFJhZThsaFR1ZE0rYjUrS2wxRi9QcmJWVExJOXVFRXBLRUlKc3F1N29oT2dSWWlDY241NWlCTzZLSHg2Sk4wc291dDB0SG9nWEFjT2dMdUNINmVMN1lhMnNrWk01NXhuSDRWc3hmTGFFK3YvM1lya3RNa25pakwxZ21yV1lBOThSMmg1VWNseVFtMklaMFJBODhGVXFZM0hvWHc4ZDRsMzRrdm11YTc5RWl0OXM1V0JwZndsMVdaQjFwaEd5V0g0RW05Mk9xQjdJOUhnY3pSbitvSHJUT0g2Z1BOQ2xET1oyUDlYbUNHdk1hazF6ZWhOcU5meW9lbjFjUUxIWHBLbUsxU3V3QU1Bek9seEE4WWpCUXpqbTVNVmdlTzdKUGs0UFZpNlJpYTlleFpCbkFFOHVXYmdmVlVKdjhDSUdpRWRKQXNqdXZaNWlBMklaYnF4RWI2Tkt0eDRrRVJhaEQwTXEzQ3FmKzJrOXdUSDlkL29BWXlwL1M2USs3RUFJV1laN0paYndKcW5rVHl4NUZQWjNKeGVuQ2tSQWNvZzdJVUJERC9iampFSGMwQjErdXlBTVhTOHZKM1JkWHN1QUlkV2poOHRKR05RSkFpZ3IzRkhkOVJvcGxZejgvMnNyaGZ3bHJldDkwUlRZUjBqUkh0MEFwQlNSQkFpSFppZkh4b0JYa2s3K2lPcDRwbGhGNFB5UUJaSjBQZytQVWF4SUxHV2FGaFVCUUpsWDFHSlp3U01ldG8rVlZKak1ocWJjRjN4d3djRzlVVnhFUXVRZ2xEMnZuOUpWV3pETkc0WURQckZPN2ZFb1BYajVSNHR3UkhnMlh1N0FENklIeFYzeFN1cTlLUXRoM29lNjFvRWJmWG9qOEFEWktJVjRpVHJqSGxrWXZZSW1neitkVGdnSi9UMFdMZEc3SG1ZSmxNZkFvRmExcmwrTExjWGoxQXlRcVBSZ1JmQXRFUkIrUmYybkRlM3k1d0poZXhuMzFqbDk3cWZoMUxVWmErMmVrd014eVFoVHBmWXA0djcyS29vUjcwVFBQbUE3R1lVcGlPU0t4RUdrWFRRZTlUS1dOU1IvT2g3MFhFQWZCTkRBVlBXQmFXL1BMK01SUVhqd1VpWUhMcWUyMFVlVUtqNzlFdklnaktPUEdreHdnREF6dUZHN1dvMWl5S3VOMnNSUkxjSGRpeEoyVFMxN0ZzMWZzMGdyeEo0NFpVOEkyNHJZWWpUVWRCU0lxTzVHQmZXSWJLcmhFZm9YamtJc3VtdkF3YlNkL0FlRHFnZVlRd2NBUHIzb2pjVHU3eFBEQnZHa0RXQXRZcEYxOU9GQjZpOHBaWEw3d002cHJocTBhNDFTQ2NxcktmVUFrN0N5S1hOS0hrUzAyVnV6R0ZuQ3Jyb1RhUloySFJxODY3NzF0clNWdkQ2V1M0SU5UL2w1SFJoZUhvck0wV2FSaHFrUmRZb09pd2FMb1JGMWhseVV4VitKcjNWVVZoVGRyb0p1MjJNZzEyR2xlV0paL3UyM0FvUndxdkZvSWlaNTJXRjZFZ0hrdFYxR3F3bUxJS2FOYms2TXdXMGpMeitQaGFrU2N4bEdTRmJjVWdWL3czRE5lU1RsWmJtS0ZIK3k2b0MxY1pOU3M1d2RFUk8wQ1JhK3FORU5obEJaZ0dUZUVoTDZoRW03ejYzU20rNDZJOGFNMHQrdmxOQ1paa3hEdTVnL3hjRXBYWUVHWU5MR2ZLekdmbDNkVTA5dlJCMUtEOG5jcGZmUFZGNkxseDFKaXpDUWs3azRvOXRrUStRY2F2Y2xjOEpGVGVYdGwxRFhMbU4vMXMxOVhsRUlhcGtMVFYvNmNmbzBEc3JkWFZUQVMzdnZpamxyNlZ0Um40UmtINnk4UFNKZnQrVmMvZGlkbkJFU0ZSOFpGOFJBL1RhQ2JudURKM1dwWnZYVm1qZy9IMEdDakpJT0trdjR6WHk0OXRrTDRYK1FhcG5iSGFMRnExck9iTDR6czZpTGwxbnhqRVRaaFBWM1VHNWx6b3BlanBWWXBiNmsxNFA5OUFNSjk1MitlUjN2YjcxSFpLcWJaVUtDVEg2WHFvbU1YOExIUTltVDRMU3gxY3lSVzZESXkycWJxd2ZJeEJXM3dxOUUyTVpIa3QweTFiSzhKOVlOY01wd25NNlcyQWppZm14S0JIY2FkUkI5cGd4SmY5bTR3ZjkxZ3NrSVY5dGFlM2R4Rml4RHFpelNid3BsS3NOMXhUQlR4SE41MEJvNVdTZnBCZDlxaXZpQlVWM0svODlSeEMwNWx2b1BjazZRT2RnRjVaRnFKUGpZNWc1djNPbTZpM1M0ajlCcG9sZHhqU0trbXYzWWN2MGwzN0R5QzBMRnFqOHZJcnVGWG9TM2NQOVJTRUJGelFiUXpsVXZNQlBhUUlSZndYUUx2NHBpQ1huMlltY1E0b1RQd0Z0WlJ6ZWdIL05tbHFCYi9KTksvYndaRFc5QVBXUG1lVTJMVWpwS2FuaU5GSGhyNU05d2dkTUx1T0YvU2FsOVBVUG1jRXV6Y0VtMG13Nm0vTENFb3pVdWxFUlhKOExyNVM4VWxabDExZ0tYaEFhTjRsbkdMTldROCthdTZzWFE5NUN1S3VDd0FDRnVSUGQ2djZyMHZUMXNjSEdqaWxraXEzR0JpYzJyajF5QWNWRTZCZmdQQmZBVFpXWEI4Njc1U3RFR2dhd1ZqOVk4dWdGL0JWSEJ6NHAxSjJlYWNtUWNBVXFNMHhCc2tDMW5RdGphbHN1S21PZXN2TVpCNkNFbHExeWNkMExydUJSQ2tGRk43ek5EWlE1dEhDTFFOdXp6NDZBaVlyOFhoWXltTXVYSnhYMndteTlaMTViL2h5VWRzNGZLcGo3SVdXckhUTFNSa1VHZnF1ZjYxdVpucHhtWUtxOURiUU9DeUpmd2xUaXlqYW5uYXRyUlVVeCtKdVNsU09qVW9KQzRYRDJkRkVOamZLc003ZmJSSzFhcVBWN1ZYQlVRNzQ3a1RNMlRhNEpUK2ZoemNmWGJnUmVSNVh2MERvWmVIOFZ3WmE5U05COTN5anJRa1hxUVJjZ0xjVW53Ui9WY3lSajlvQXlOWmxlU3lwMGZxaUFyWStsYUdjL3NQTW5qZ25QMHdPd1FHVUZieXNubEEzeFdDRzhLQ3BydHFTQ0ZWL2dNRTF1UlV3MiswQ1NMUlZpZXd1YVhlaEJKNVN6bm82bVhhMXgzV2tmaWQ1eVdOYlJNaXFXc3pnUEo4TWttUGwrbjJ6Tm1qbnFPSStqVGZkNEpFV3gwajFsc0NLVWdnMXgvUDZkdWxtcm8vWUVEL1MrUWRwbUVhM2plNXNDanNvdnZDRGEwS2ZxVk4wbjdCQlVQdkFnM0ExMG5tVWRWUW1MdHFPOVBrQVhrdVRyb1NyeTBQUTd0NDgzSmlsSGRGNUVHNFMyZndURzRPcVFVMjQyblhUUkYraXJSMGJIN09WbUxWdE9BQ2JQcWxwNVhRY3VhSUZqeTdqNnp5T0w1VDNvRXpWQzR4YWhHMG1JWnFLZFcvU0J0N0o2aXdhVDNWV3FpNnJIQkJhZEc3ZUtPVjZNckZpc2xzMUNzbGxsMEViaExQczU3WjhyTno1SS9wVDZkS0tkWmdkUFgwMk81cEpUM0V4SVh5SzVBZUFDZCt4RjlVb0pyL0ozNTNPZCtnNmtiR2dCNzNPV3J3eFloNWhJRzl5cjlPS2s2Qzg3YVhPZVhaQ0w3ZzlEMHVrN2l3YzBDejNOK25YcEsxb2R5TVBBd3lEWW5ka1c5T2tsei9iTjhHaHNNVWxiUmZITTVIelVYKzZaVnJ6cHJvcW42a2JuVVFMK3Bwd2dTTE9iSEk4V2NkcTlrVncvOHV4eTBMYnZER2pnUUNzT3JoNWhjUE13dGt2aGhSa053NHk2MHBZbXErYyt5U0UzdXZRT2l1T0Vxak8weXJEeDBXQ1JwMDl6RnNQcTRuQVFnT21vR24zTkV1ZUx3cFluTWxyNlZZRzRZYzhsTkg0RjdTMkxYNW9vSm1tdmFaS1BBRVNjUS9PSHliNGV2cUF0ZzJDL25jWDJxaVg0aWVyYWFlaDFiSUc1RkhTbUltekcxOE5NYkp3bmp0ZzRSVHFEcXdSR2EvZHAwNW5Ld2JXVE1URnRHSEpNNlNPb1VHZ0dnSEhuQjdSS3VCc3dsNnFDMVh2U0l3OEpmdU9QMm50Z0JpNWU3NmRaczR1WDZrbjljUlR3WkJJRE9jRTE1VWRRTVZUc3hKZ2twT0V5M3pZVThsQTJPSi9uMW4xWHZxbkdpSWtSMnhCczErd2FtNUhod2tpZGkwZUp3Uk9aSWpscmpsQW03M0VPd2RYN09Gem1WeGMva0M1KzVzWnpraERrd24remJxVGx0ZHJEWXViM2hqRVZmdlBJcVE1NDJET2ZycUNCMUFYUFZyR0FQVTdscTd3MmU1Q3NqczVLbVhSMXlsaXpVRHFudzZ0ZkpFVHpYSFFBTVUydUhqUWJ5U1B6WFhYRWFmOUE5NlAyNDBuUHNKSmJ1cWtqalEzSjhvbTh1TmFUcndCS2ZHaXY5UGNacnRWbGV5MXAyTW5Gc3ZseERyTFlabWRYcVJRWDVqVjhKTEQ1MDBYNjZkL2lMNU1wOG1VOVp1K0FaTExCS2Y0WVZsYVhsY2tWKzVTcVhwd2NXSml5cnRtcTlqdDd4YWZjSnkxd3lDTDJOSnNUdFFqWWdJaVllRmFqVEJqdlhCWWI5UEhhVEFqVWhUcWxzUmZjSldHKzBrMi9SY0hSZmVhL1dvNTRWbVA2UDVxWnUxZGdQSE9XM3YzODZtd2JOQ09EWGF1LzFZOUQyR0R5WkdMa0V5ZDdJa2FuUzY4aThXbU9pek5xKzVyZnNvNWduV0prV2dWSHBIdm5qeEhtb2tpb0Nsa0xERGRkRFV6cXZCcncyVkl6MVJjZVNzT3N1V3FzRVB5c0RQTnlLTHM2STB5bXgrT05wblM5UW1ybUZTOURySkNjZXlGcmFZTDJ0MlREa3lsbHVXUXZyRWZDNkh6UHBCc1ZDTm41N2loRjRuMmNkdFBGSzVqanVqWktHR2s2Z2ZIMmlLSWlFY2dxZUh6NlhDOHI3VTZkUEp3VWFYRTNna2g5YWp4dWltbzhmc2RQZWZ3aXBaRTkzZjVHVnBoN1hqVStSZ1VWbGxZNVREby8wVitBaTRPckx5Vi85T3ducEVEL3VqbWhBM0daRnY1K0R4ODJZVmtpZ240WjFjemtkRXFnUk5QbVAwUDBOYmU0U1VJU3J6WWxCaVBNT2lYK3VoeE1OOE12YVFrZ2hjSTN4ZVM5Wk95NjZuODZJZ2dnZ2xKOHZUeTNiZWMvUXMrem1UVDNrY1QzUWZQWG5BdlRCemxaaEFOUHVOK0paamlXQm9jMnAxbmw3RXNiSUZuZnMvVlBQL0hXTzhEdFBzN0JoSFo1VjJ1eXBGdy9hVUhab21vdkUxckd2L1RyZU5DRDFIdG5xK3NQVlZUdGs1QUNyWnZNK3pNY1lhUmFSTTBYZ2hVNlpkdHdMaWtqWGlXNlEyY2VNMTA1U0ZSN044ZmxPaWNLQWhkZllRTFdTUk1hcUJXYVNEVG9GdUhKL1NHQjFXVGQvaUNZVjNyaVU4cHNHKzE3a2lNRlQ0VXNhQkNjQjRSQzVuQi9ubysyemhXMVVkTnpFZU93R1Nyc2YvZnRKdVA1eGVSWEcxQXpBbk83dDJhVEZaS3pWQ0Y1OWpXS0piUkJjNUEwdVo2K3FBV0NkTXN3M25WT0xTVkpVcmY5WWd5QS8yNHU3R1UrbkNZbG9IL0hHenhCYXlRcnpRamxzU1pZdUNua0U1V2NvMndsMHc2bG1ZYXEycHd3ZzRWMk5XYkJFcWRKSWJVSmxIUlJmZ1V6NGNycVFGa2hFdUh1cDdjSXRJK3d2NDhjSGJZRGx0QWpxalZqVVpNLzRiV3c4c2N3Q2RtMU10WGNQOHM3YWhrUkJ4MWY1QzlvWU1UUS9BV2lPSk8xekgvQ1pOOWdSYktSUlYwd2xRNnp6Yk9talozWkEwTUo5ZzBvNkFHNDNZNHU1K2F0N25SZDdtRjExWFFXQlFlRnh6UE8zU0ZLcE9maE4yUkJXMmRIaW80V3pPeU9TdGE0eEc0TUVaQU1ZYmFLMWZLSGZSenptYm1oeEh0SWVsTkNIUitPZk80SCtYVzlFZndkRk5QM3ozY3VQdFVPVytoWTVMQk9RcWNQOGs4ZnJzWnh0WHJaaGJYVlFyNHY0WWdvejZIa0c5WkxzejRwN1Y4bVIwUVgrV2ZwOGhvT3Vwcnl3VUtNU1ZiVnpIOXFLZmJ0d2h4elZOK3o1NU9peDBuR254b2xKZ3ZYQTNRZmxGa2VidXN3L0VLQkJjOXN5aDl1dkxIVjBMaGd2Yjh2MEtrNlN1NndESkdPSVF0eFBsSm91ZjhWRlJoTGZvdFJzRmQxbEhDWXdFM1VkdW1kenF3eUJxU0kwcDQzbkFXRjhieGZNSDN4YjNTLzRPSGtiRjZTamZaNDhuanNkcVUzd1NhdkR1OHRIdnprQSt1MlZSZGd4ZXRsa3lEMkZVL3V5TjdOaGxvSW1ITythVVluRVhPdXk3eFM0alVQM1VlTGVnb3NuVU03WGlpYnNqS09qamhCVFJBcVVSL0g5VGt6RHRRL1IwbnFsZjRaWGFuNldDVFdvTU1YbC9JUXBNcmpsZlFjVm80c1ViWnRFT2RwRS8vbXovREFsblcxZjNaeHVVN05nSjFkYkdFbU1zbDR1YnpBN1o3T1BHcUh5SGJka29VTDVTYUVJVDNlLzNNcFMxejhzdVlXRGxzZTlrWDVhYTFGSW1sUm5tNjIvOEpQT1Qvei9uNG5sblVTaVAydHJ3eDZPdGg0MWlLNHN6NmJRUWwzdkM5Z0lBYWNRMGFuMWNKcGQwSC9HVHZLU2JFSmlQMmZvYlZYbXphODJsR3BxcVdPY3crU1l3T0ZKc3RYbk0yekFBTkx0aUU4MVFyTUkwZ1VWYTBhRWJqT09oam5yT0h0ZXFjS2MzMDAzbFprYTRVN3k2RDgwMlRBZ2hKbmVjR2tpUHJ0elIrTzhWYjA1TCtnRE9VN2J4ZjU3SG13WGp2S0t6ZHkzS1grOEx2WmloZ1V3eGFBYlMyZnlFQUxrUGNBRm00U05ONGpSTU9TdG51Q0lmWk83RHNIbVNXZjdiaXczbDlCSlVpb2RUdEhGTXpVSElnd2g5eUR5R3FXUE4vWVJuR1hqSHdDMTd6UnR4YzR4NWo0cTkvMjBNSTFmVjZFSkNlZzlCTkRWMk1xWk54dGwvWnJRcXlpaXpSSm85NGEvZk9hUjJHUE1RRDBLYzF2MGM4RkR5Zzh5eVByWXNvLzZDNm9wUk50YW9ab2p1S3ljMVkwSUtpMW9mbzMzVzhTUldTeFNVUU5nWmsxTi8zaDg3MDcrMW9jMFNBOWl1bjVvSDlvaG8xbTYrdi9aZWdOd3ZXL3RNdm5QVHlNVFh2dDJRaThlek5WSVFUcThOdzAvVjdoVVR0U0t3VWZ4ZklUamIrQUVweFY4Si9nMEYrWnJ6ZHBacW9aelFhWUFWdUUyMmU5dmRpY09IM21HOFFOYkR5M2N2c0RrWjRQc0JvMDR0bzFleTJiUXFCY290R3orSmQzd1U4T0JJL2tLY1lPZEtYSXZDU1RIS3VuZHZRSDUweUg1b1Ryc09Cd1JLSXZNVlA5V2Q5YkZ1WGZXWTA5ajRnYndXemh6cmxFK3lmbjhKOTBRMVFRVTMzVHEzYUE5bW54bGE5Y3Y0VklTemhqSEFpcjdLSEdZaEdxNllWWDRJY01sQmxTNm1oUGhid0xuYlVwdURaMHlBcWttZEs4WitxTGR0ZERTb1hDRmxyeHo1MkFGQVE3MWVQL1VaMENaWjlGM01tTFZkWTBxeHEyYm85dGtiNGZkaExOc2xMbGNUcFcxL0ZVQlRwSUJCMVhSQ0tXL2xZS0l1MmUySi9RTFFtWW9VanRBMDJQZ2JrTFNscEZQeStsNEFxaE81MUlPQ0ZZL1pNNXRENTErN3gxNDNqcVVUaDJPR0hUOTdvdjV3ZXVkUVBjTGY2RC9lNXZlbkxTT00ybnM4WVFkbjYzZmhFb1V2ckhKWC9VWWl3QXZQb0RlbkdZcm9GVkxGakdWY0dIeEVSMTA2bURFZDZnVnNTK3BlYm04bEVybHZFWVpkSXAweFlBUFRoQjNuRGZocXpuc0RtN3JGTThMUCtZbmFpeUxvVlNNRnVrVEZOT3B0bXBaZ21pOG9kR0ZQY1pyT2VDWnlpdnFOLzBKektPNEdiL3YyM21xeVIyOW1sNm5PVDdMRkFrY1ZzL0NtYWlVeDNsZ2RhZmRiUExlOUVVYmxnMDFWSEtyd3NtZEZveFhGUFNVcE1GTmxVMDl6amZOYUpjL3NJcVhSczM3aXRJMGh6Z2piU2g1WUZEMGRNcjNZczdBQ1p0bUFMeVFUa1BWVEZscTZidDU3ZnFzMkFBTHN3TGsweld6YnRneVNKWnFEblVzbzRyZTlSQm5VUnFUc2hPQjdTV2RqK3JyM3RhSUdjdU9pc2JDVkxRTFFOdFpFV0N3dFZJaTdYbTVocXllb1o0N3Qrd0paU0NGYVN6bStnS1VLc2RrNWI3V0dxelV3UGVmYlRDbks1OGVDREFodWU5bE5rb0xMT094SkRLbUY3c211bSsxNFJ1K2hmMlZyWUh0UXJ6TWVuVGZQZ2tsOENtQ3E4TmlVNU9xeG15ZTdHeG1icHVPKy9DRDMrL0lRQ3Nud1lhYVdSM3lNQjFHVlFqMU9mTHdtcTVFMm5LN1Z4VUREdU9LeGtMQWlSK2RVN2VOcjZVa3dDM2I3Wit0ZnpFNGd6VFBYZS9DZGVWbzJHSE5DS281WmRuejdoTWMxL3hkUWZ4T3BicGR1Z0EvMUlLdW4wSlVvRU9uc0Z6dmdia0NHZFlDUExaYlBpcDlRSmZVUldSNFJIOXhBaE1NT3NDbVlvM3orRVFYNHltbVFCdEJzdWJDdm0vOGJ2c2MzSmZ6R2hBQlFRSm1DVXE5NHpIYUFicnJyWExYNzQ1RTExU21IMk1WT2xPbVpPWTVGSi8xSkhIRTd5M3J3N09TVmtETFc3L1RuYVlwOVVQS0hvVVFDdjNoY0tzZE5VRUxVRlI1c1dLZUxOYTVSOENxWS9xYlBPeHNINDQ3Y3p6cElSQ0dRVzgxaVdjLzZTcXF6ZHpHUUVjNWpQOGNIekUrV2xOMlYrSlA5dFYwSzJIR2VHSlEwR1YySUxRRCt4M2VJSnE3czVET1FEdnByM1VNTzNacmNzQmVoNWV5OGs2ZkMrVmJ6UzR1K0ZIbElDNGpqbmFTS1lZT2tQSkFqTkVJV3BsNXhJWU1jS09FUy9oZmFVc3c4RjE1M2VydUdhN1I2a2FwektGL21QT0NtSXVMb3o1L2pmdk1qMUZpQkgyU2RnTlZtampzRjg2d0UxcEdWaWkyUGZBUmZDYXhvNURBamZ2QlNnSkJoS3pVZjVLUlpMa3RJMlhaTTUxMWJwSXI5MmV6K2JJTkpBZkhyL0d6ejNkb1NnRE9sQk5WaGd5QmI5SzFlQW9lb1FmMmw0Uk5JT3huMVdmb3VYcmxoYUJoT0lLNkliYktCZWdQS1JXZ0pxc0NBMHdhalZsMEwvdnBzMEo5UTRYMlMzdjkwNWFDeGdHR1EyL3FVZXZTMWQ0d1l5S0VZUzZsYnVzODlCNFozWC9KZTRDcS91ejVsU0FLTHFSdWtOYmxVSjV1MnIxdUdwcVpKcGxrZDRmejU0eURxOVFWSDUwTWFKQnNjdUVqV1BiQkVUN3pBNzZ6bkVvUXB2THJwQ21VTXB6bkl1bzJHYnJISlVyNDlsbWo4ejlLOEVicldicXh6c3Z1ejNYZHFBYm5UUURyOWorbXB4WUpXRXlVbUdOUCt4RUlyMVVlcjRuSlhKckZNNDlhTGFJUHJvbllWcHJoempJMWVKbGJnczAyZWVFaWY1azNCdVI0NG5nQmhHOUFiZFcxRUxXeDlIekZPd1gwSGJEZm9nSXpBRk1DZlB4MkVjL2tFT0ZxdktIdFlDeVlETWVWb1JnOTZseEVveHVTeU5odWtaQ0VHL3dNa1dMMTB6R3lLYnU1ZG5ZeXY1Tk5PNlZzTVdvRnRHV1dFVjVva0NaTmsxbXNSc0srYXA0ODBYcTFPK0ZmUzRpcURGVlhzVytVaTB4OGU0cmEyZzZUUnpycWw1TW9zRTd1OXdiOFpyM09sT0FjanlsUjRxNmJkS1hQSUl1cVBkMy80SEYxbk9BQ2lSMGFlKzNjaUdaaDArUGg3aTVtSmdQRytVU004bGFwd24yaVVhaHpPTzkzSFRnV1pXNy9HY0NZNXNPOS9SeG9iaWMrY1ZTRTRKcUhrNWRHM1VRdlE4dlFGQm5XUEJ0Wkw0azVuQlRLNExRVmpYaWY2eVcvQlJ6Mk9LdGFpbHBrbG04ZTVXeVQvZ0NWZ1Y3WmljYXVQL0dwMWZ3N0NJbXE1MVVlekpKcElVS3MxQmE0MXNvTmxxMjZFZG5GL1NWQlZuS1V2OVA5OU40NkN4OFc0OStHNVQrNkIzR3ZlUWdPeHZ1QUxnbElYdVhWRFpwcEJ5VVdWVkZtVE1xSEN4L0JrWVFDMHQ0QUhQK1paVWxLN0g1em9iRS9mcmpWNWl0Vmczd3JPbUxCTXorTEE3enQ4VEorcFRMb0RleDB2SjBLbERWaFRxVUVscFNXZU96NHpYaG5CTHhYTGtpU0hpNHRUYmovY0ZRb2hVai93TCtIMlRZV1dpS25lL0Q5K3ora2ExVXlsUUhWeW1zWHdLSFFTL2NLWTNOV0s3NDRoOEFNNUhzR2xGMDVBR3d4dGg0amFCRldWOUFrZG1lMmlaMmExVzB3TTFNSVRFTjRINndsM3V0QkNDekp2azllbU1zOGFBM0tJQVJZNDBLVVczeWwybHl2RWE1clp0R3g1c3pZNWZSK3FOZjU4NHRuTHR6OHV2dGNkSTcwRGpPeE5aRDNidzhlMXhZeksrS3pVZ2s2UGswR2cwWk0rNGE0M1dVUnhnUGVocktSUHVDcmFwY0RjSTRJL25wVWxUQ1RHeFVhSjFvckFKOCtEaTVzanl2aDVaRWEwYTUzWEkxaVNjRHJpL0loK3dxOUdoR0wrVzFBYmpJNWVQWDkwb0ZTWnRab1JxQllkK3hJS2tkUnBkTjkyN3podkNlWEtNS2duYWVDNmMzSWVWN3laM3k0RDFIL3BMQnhUeGNobC92VWFkODZBRzZvZ3ZXMkd5UTBLNGxkOWJiY0V6TnBnY1FqTXRzTXdLMEVnRzNuZXliZE8xSWtBUCtXdTU2QVJ4RTE2VGVIQWNXenFueU9ybklsb2dCVHIvMnJxWGp4byt2VlJEYTJjYW15dVpLbnRzbXRDYlpBbHpmdGdmRjU0U1lna3ZhN1BZVWlndVBGdEx1Mkx1YnhMMlJHSE1MWU9PUkg5Mm9icTFYaXRuaWh3ZWkzZG5ER0diMUZHdjNyWk1LWnczdW9iVWVjV0MwQWUwTy9oQ3MxcDh2RWpFYlE1QkRLMkhLclRZMGE0N3RFRi9oVzFIZlJyZVMyR2tQb2U3WS91d3YzSXlyNS9FUXR4dGQrSXBmUXJmZ0tFb3B0L1FOUjVpcllxMGtxRHpvdW14V2FEc09zbW0zQVVKZUlOS2xYME1IaTdTR09taHlBTUhYZEpTSi92UFJRZ3lqTVc5Rk9EUXVNaTJoa2lCVndmVEdDRWh2VThCdjd2aTFGL1BKVzI5d254aTRvazEzeXNYb2tVMWQ4N3htTmd3WUdhVTAxT25qa2ZlOHVXekNGdnVaT2FUUGNIT1JXNlN5L2hHeHBVZDNFVGxnMk9jdlorK0preExKOWpXVERxdVF6eFFBWGxQdzRjQ2IrY0RWcFJWZDFqS3F1Qjl5NGFuMzNmeE5qNVQrcnBabU1ZSUMrMDFFZzhxcTZRQWZVQk1mbHpxS2JrZUFuSVc5czFKSDlIa283TVprazBaUFRaVVhMUWtWMzhCTjRBclRxbHpsb25HQW1YRUVYcUtEbDVhd010OTlEL2VReGNlL2E3RzU1cmEwY0JvY3BqbnAvcjV3Wk96UktBaTBtTkgvOWRSR1hSUnkvTkpKRnVGNURWUndWR2lLbi9ZWjV6U2gvTXROczFVakNMZ3JOK09OenRxVzVTQnhYd1Fsb2ZyQi9WMWFLa2FYbUVuYjVyL3ZOVGJCaVR6RWdQTis3ZDdqSzh6Wi9tQ1ZRY3hJcWZMUXBmRnV3bWV3SXlWQTFOL2JScHFwZXF1azVTQjlubms0NzZ5SmorYk5UTEl5RTB4akUyZU9EOGVha3Z3SlhNUXpXVXVrNDVQdlJkbTRHY2Rud28xTXdPWHJvNmgwektMRDBNQkJJOFdQczJVNWMzSlMrT21pVnZsb2gxWlByTnVBdHdHZWM2SkRWQnhnclhKRWx1MzJjNSt1Z3Q4SGVteWx4NzlpbTFpMUl5aXN2aHdLaHNFQWVpVWhzNjVUOVJKdEZVNDdiK000WTZLYnlLSmtZK29KV2k0UkJMbFJUZGpiRUZpTXJDUWl2VUJONThTWkJwRXpsYzhTbmkwaWR1NThMMUVmUjBjQ0NVSW5SZmZuaElPQnJlenJ6ejRESFkrRnVSZzNvL1d4Z1pERVR4T2hVa0FrcjVKbGJpTkhSQk9RUmloemVIZnlGM0ZLZTd0VEVLY2N0cnd6TFNSVll4Rmd3eTFndUtydDlnb0tQWTczQnRuTHREaVFSeTkydEI1ZVdBdldmZVBETHFvaVIrekxNeCtUTU1JS3FlYmVxbGEvdjNRTWdjT3VaakNqdUJXOGNEMzdySHdqVzZsYUlaYVVwdXB1N3pWNVA4SnJYeUQ2aVpzZUxkK2tyT3lXZzJxTDFIOThhTFBTL0M1V3J2WDUwY0ZEZ2JkUnJ2UWlEYUhlbXNWU3hHeGhHVEZ3NEZmbjBXZDZkaGl0Ynh3Ymo4MUJ5SDNZUWgyK3FUR0hKd2RDTzRUMTZ2TUNRRmJtQXR6SlpKMTYyb2hHTnVQajNSNGZXVmIvMEVWWisvTjlIalI5SmlmMzZJam04ZmNBSTEwNHhyblRZNjFzZjd6RWhhcDZjWUNCcmViS0tXZTJRb1Jyb3owck91OFI4ekNacEd2OUlpWlFqYVNnSXY2N1hrYzZrNU9xRExMM1QrRzh0SGhneHUwWGtvTGhVRE91aDNoODM3RVRUNjlOV2N5NC9ETkRzaGhtaWFrSFVvTUVhMXR0UnNMOW9Ib3plUW83SmxBM0xwZXN0S3NnSlYvbkU4VTUvbXRBS05sbi9IYjREZlBDbDVyaUh0eEltTWtFaE1BQ2c4Vk9sVUNKVDNwSGUreEtvZzBxdEdCWlRuMnBmQ0xPdVZ0aFpSWUI2ck5wbkZBS3Y2MGJENE9CeFZydHNuVjhtVCtwMUdySjVHQVdWMENCMmkzVEVsMnVycEhMVFFSSThjenZ4RVRQbGs5QXMxSUVLdTBhOWlSenREZldnTnRkNlIxSGVuRyt5UGV0cGVGbVZMMXduelpLOHdqQS90bFdrMS9DY0FzRkZFYkpVQVM5NVpzZHdqdHRycjV3VkZyYTdycWFROUU5V0lyTnFZdEprd1ZxdXpDWE5kUW82Y2duNzNQWjl4SWVVcWwxSXVOcHZMRkVGNEFsWElDczBZQlovRWRCREpvN3kyNm5BaC9oSi9vaW1rb3lyaGlJbTg0K2ZsRkNvWG9MaURNTDhsbXlUZFRZWTFFdHo4YmVaLzArYU5IWGRLMXRaMlBoNER5enovRzdwdVdLaGk1T0FZaUVGY2I3RGhPMUxoNm02L2hRb3YybFhtT3RnWjR4TmFBUDBScWxob2lWMmZqVllQQURlM3hhbldFRXlOQ0Z6bmN2ZjVoNEh5akQ5ZTZFbC9EZ1hsSytGNkxkV3lBRmZpaE9xYWhFZVNrNFFNUG90b1pMUDVRdGkrYk00Q2pGMEtOVmNjRHpmWFZVRTZNYkZqbzZyM1M2T2ovUUcyaEFxRnBoMlF1bmFrM3JodU5kU0QxT28vcGlPWXZIdUNjQ1V4d1JEUjJZZGxhMUpweitPa0hlTW1oblBKd0h1V1VwL2pVVk82eG9ocW5GS2dJTWszc3VUVDUvU2pWNTErOHNYcW5td2hQdGNES1FmOUEzYjRxMGdyZDhVd085aFpvRG5SVmdQRlRpM3l5Qi9UcHBJOFFZMFAwb3hybnR2QmtYZDMzbm9tV3ZyQTcwNnd5dkM1UkhPdFNKQ1dza25HR0xSeGxBb0ZOdUJIVmVQVENmbHR3WUEwbzJYZ3VMdXZyQ1dQbHU0TW9jMXVEYjVReThUKzZJUklLNGhjcTkyaGJwVWRyZjd4c1hzb2FPZ2lmT3RITytqY1ZQRWdkTldCTjZkOWNMRCtOeDMzVnhuQ25DSU02STFUTnlLczVlYnVlWGVBeEdCdFFDODJCcUlvdFJFa3RWY0tlcGtEWmtvTm5FWG9aVTVuV3dlMUF5TzdhOUkvMnE2N1JjOW9KNC9kRThUUm9kQTJpdWR1dzZoeG1YRmhwWkJVL3hINWxOZW1WMHIvQkdNU3EzK3lzSWY5MFBzYVkzVjFGeXU2SlNnZytoaGdpUXVOV3IyQnMxZUFUUHJyeE5BaWdLMU5oRjIvaGtLMnVsVXZiNEtmZkRIR1U5NmYxeGFGNXdqS0p2ZWZMdHJRT1hKK1lVWVBaejMra2tMa3ZQVU5GN3F1TlBFak53am80bldoejZpckJyamZvczVENlZUNkFlZFlXbTFoRFRGRjdMT0tGeTNVL3VWWHdwbXkwcTlEcC9CZndwU2xNNE9Wb2FwYXdiWkhTOUFHcWppVFBJaWxZQXBaeThHTjA3ejlFd2FValRQRWJXbTU0cm5WK1BMdTdHaHF0SXdxdGsrOW00QmFDVDJqanNnRVVxODM1SGdld3pNOXRldmhVUkRpOFhRaEhpRSt1TnU5anp0WTAzWGpNalFrVDZRMWtIcEZFM01uczRPQ092ZVgrcUhNVkJ5SHVCT2VBOVR4bjBPUTFJcVJqMUo4YXVhUkJIbUE3TGVsdHpLOFhQaVFvZjFzUmVIZFdPTDlzTXdCdm5NRVZNR1NuNTZJNmMrMWxhWXhCNUNJVWR0QnBqOFZMMVZvdDRUd0ZoZWxDS1crTmlKVDNueHN0aWRkVENzVHlwN0FVM3M3VjJmbEJTSk52WXV3UnFMd2xVS1NQdzBHMDg1eDFVT0Y1ZGxHNk85Ym5WUWtBbkZzNzMzcDVVQ0I1N1NJMElZV3ZrT3pZR3B3NE9zNnhxSUwyVm4rVGZHa211ZmR6ZU5CYzN3Q0w2Tm03cWxYa0FSdG9XMmw2Zmo1U0xCS2d6UUdGK1M5aXQzc29oWlZ2c2EzWExvZGloL28xODdyNE1OUGduL3dlTmZyY0Z2RFdKajVnakl3b2NlR3l0Mzl6SDJzanhYd3B1cWNjM0xxdnlZZCsxTk41WVYwa0Mxd3IrMERnc2txaW1xamdRMllmRU5SRVNlVVN1a1dEdEpCYWlDSTJxSzVhNlVpVTJWUWdnZ0J5RG1mVXZORmpSSWhUOVNDdFRNUjV4RndiVXQ2cmY2KzlKUGdoNFZGckhyU0hkY1FUaG82R1NQd21WUG12ODBXcHVKSEo0Q0l3THoyRjIyZUFHSmp5OE4xcEV5N2EvT0NURFljRkJIYWhCZFcrL2NNTmNjUS9zcE1kZnQyQ1BDS1N1NDJOd3IwaUgxTkNqSG03ekRJcWlpcjlSZGpLUlhoK0k0YjU2NTZ6S1B0ZGV1RHlnK1VJYzl1RCtpWTBSekFaVUdBZWNxR0RxaDQvVCtmM0N5OHlqZ09KZ2lDbXI4ZkdDalZZU1ArU1Q1MHQwSDU5QW9TWC9XbHEwZDhNSXFONVZnRjB4SEtkUWFKUkMxdVJ0dHBuMEdPUXIwTG9TRHpHdUhHM0J6M2gvT2NUZDZyVmkzU25FYk5RSFZjMUF4ekduV25VbjlPN0NGZHhBU09peHFMSVUvWWVZS2pSM0d5a2d0UWs3UXJucVJMZUJvZzFyU0dSVkJwTG1UNS9kSzV1cFB5dHlEVFNnQ2FML0pBNkljR01ZK2EzV0FUdUlPR1NFcEMrcHhxcUxTK3c4c1l4RWJHZCs5KzQ0MWF4akg5UUpOQ0VNNm1rWHRDaklMQ3U3OERkeUlmMVJkb3dqbUNDNjRuOVduVlAyV2I5QmVhSlhkSHRzRlI0YTh0V1dGdEE3eldUK0tVQ28zaGtiSkdJZXRRMFdkbW85QmVhcERRaitadDk3dWgwWU80b2Q0eVN2TGdlcVRNdEp4UEprc0FVZDIyUUxXemVnSHFqd2FwdVlEaVRzWU5SdThRL21kUDZ4eVBDUTBENWpZeE9XaGZwcjhuZ0dFVjE1OXM2anZsYjB3SW44Sm45REZTR0RBbnR6UHVmeGQxSXdRUG14elZJT1dIWVhQWFdnMGNoY0tqMGszbjdDQTdXUEEyQ215eFFuUmplLzBBVzBhd1cxblBsR1RHdlc5Y1J5Z1RQRXVPUEpPVnlrT0hSdWprbi9EeDZyWHNFOFJFOTlxWDBxT2w3b050VDlvK3UveEFEYjNyalVqVlB4bUFRc3JVSFFOZTdrcEV4TE5DVUVaRmlmbXdVZFc2ei9VQjhRdzA4SzVBaExCbld0S0dEMmhTNStZMmJ1TktMbXR2Z214eStRRVAvMUJqYkltb3djejFKaDBLZjJ5cytaN0RjV3hhVUllZlVYUlpDVTM5alRURDNYNkhuYkdVRS9BbElqSGtJMkEyTnp5clJEWFlha3IxSGZUbVI0c2RDcTh1aWpxdG5RV3hsUjhrV1BhdUdLVjc0aW1EZjZXY1FOVHlzYnVyUVRKUHpJeWpYSGlONjV1Z0tkVUgyTm95aldZOWpHTXVUU29VdWRsOGhRdVRKNW1UWmxNdGhYRklSUmhzV29XaHJ4Ym1lWVBGeGprdEhqQ3dCd0NpVGI4M3ZsOTZxU1VkRFExUkZwQWIxdGUwZlpKNk1WVGE4aEl5Qjd4YVMzbzg2dkNGdDErVXlNaWYwN2ZhWmRYbVNic091aVYwQU5RT0lJUGEzYVYyY1Z4eHB4blpVQ3pYaUVuWW5yUFRETFM1b09qdmlIZVVaSjljRTJWNFBLMUVpYTRMclVIajN1ajdlcDZWOVlEa2FGandEOTRvOFNpUldreUswNHNhSUQ1VUNKSHJjdFoyYkNpWWNqR2dRYmdLU21CejFKbDNyUm1tc1FBYldmRHJLRTA4R2dkd3liTGtMbllUOWxCeDJQTmplOURkVVhiRFYxNzFTS3RDdVpvWnhuYWpUMlo2UmJIQ0pmRFV4MEZmWVBnbmowMnFpSlpwSlNQZ21pbXNxSUt2ZGpvNS9TOUExMjJJMTdha2x2WGdYeWxhL2JrL3FyeXlkbTh2NVQ2SDc5SUI5dm1iY0lybjg5SlBxVUhJb0lvY21CaWhkSWJxSFE1NUlZbjZmdWRkM1hvT3hiM3pxWE5rTUp5dmVHdzdHSkVuNDlNNDdMTkVuUFNDMkh5b0ZZZEp2OTF4cmUxTEMva0xyc2RCclVIZ1crZkdoSEovdVNkUWZwaXd2blpiQzd3SVA1a2FqTzhMK2UrVUI5VjlKL3VoVGlYTDZSaUgwTWU3QVdER0lXWVRPeXFyT2cwSUdVQW5MVzRRbG5zazNXeHM5R0xxRWFYbU51QzVyUDdISlFOQytNZCtOOGlCNUhldlNPNE50V1NkR3VRTVptSFpuVkxvUWpIVXF0RGJlZ01nenhBdVlmTlZlYlFWVFJJRHBvUWVhUzYwUmovaDdicS9vcVJEOFhUMytJNGQ2UkxGOWdTVVExNTMweTd2Q1IxdlZ0ZmwwREFWZVJhcStWc3F1d29jeFB1SEJPSjhML01LcDlQUS90OHpyWDhiQjQxdXJRMHpBaVYyYWdnTXFkazBabWxneUpremNMQXBLaVZMLzB6UmhjUVVFOSsyZGVka2QwcmdKTklGcHBudnIyaklIdk9zdFo0aGVrK3pFc1F2blNEUUQ2UzRETlE1SHE2MDlXZXdaZFhzMDVHQWEwOGJ6VmJidVVzQlFHV3R3SU5aZzdNeklDUXFpWi92SmUwQmpRSGR6MDFLNXhIT2ZkQ0ZwVlJBMVhkdU1MNDNNUUxVWXdVMkJiNWtTQXZTQ0wyRHhYdUxrd052TTdwcGFPK3Q1cmZhUzZ0b2J2dW9VU3pralUvOWJnenp6amI5QkM1c0x1Z2JsUnVIT2VqNFFyeWRnWXZtTElWd3dabUoyTW1KejN2YjVOVm5ybUIySjZMeE9ienRZM2hNL21EUVdWVTJWNE5laXZFejREaG4yT3JqSElqSGZqRmNLTlZNWlU2U1d4YnlEQ3pnN29jcWR1MUdJS0doMlp2Q3BGWitkeWJCLzBYdlRBZFRvT09LMDdzbnkrRVVPdEQ2VU1kdkZaZWdnWWNERVlueHlocTAxVlhEQ2Ezd0tWQ1FJVWg4cVBEWngxcGdvV0c5eDFDd0pjQ1RHVkxtSVhKaG1WbGJMbWlJOGlXMGVqcWhnYk1oUlNLeVhNbGZiR0tUOVI3K2FtMnliL1dMQjFwL3FhVlRLNlF3blNrNGNyRGdwdWNRdEhiTDdYbFl0a0xLaWxLSDJ3ZEdTNW52b0RSWHhiZTh1RGIxRmtqcXZxSTlQR1p1MU10S3RnVHU5enp6d1ptWlJzd2Q1dG9HZUV5aWhjWEpmY2M4eWdoMGExR0dlVGhSUmg2dzJpOGJBR05iRHREKzh6a25TdlpJbFVCWUxxVGZTR1JRR3ZFbmwzUlhadnpHUG53L3FWS1paMHBvRWJEb3ZkY2E0KzZMZ1B4WThmQVhKRVN0dW9lc2F5V0dHTmd4QVlIVWhPZEdBTzcyRkpIak5LUWg4QWFyK0tZWmprbkJENllPd2RoWWdVOUh2dkFUVUtaMVUwQWMwL2RRT0krcmh5WEVXSy84ekIwdE0xb0x0ZFZPbnk0RjFHSFBzdjc4NnhwUGFlcUZ0VFdKNEdmK2VVSDlwWjBreW14VlVZcnlKQjVKT0ZIRkNWMHgycUpnZDl2RUVKWlBkVzNOajM2bTVmS1VORWliNlpXNkRRY0kyMGNPSlJLRmEzcEVGdHF3ZHlGSXl3VUhxbmdCT1NXZmxKcklCSjJNcDlaSFJia291djRyU3JGR3R3YkV4SjJDUXBCUGZLSzlyYTBhcVBDN2RhcC8xV1p2M2hYMzFmdDZhT2lEK2RCS2FFOElEZU9WOVZJTk9sNmRZRDVicHNrZFFnZ25tREVXY1B4SFdVZ2w2akdLRGZ5UlBDbXhSVkVKd1JlNUxndTVOajN6MnRJWElvZURWZTZibkpzeFNZOUtSSlpVdTBFclpvQk1VaTV6Zm8yU0hVTXczQWszZXk5VUR5d3F4YWsrTzh6SmxhWDE0ZjkyUGdadE1VTFpVYjZiZXJURTlzVXFOZVdwVCtreGZhSXNwYmJlUDdaUlE3MFNWN0VGNjI3MHpmcExXNmtRRGFLNWU4MHFmRXZUcXllckR4VGswcHQwS2V6K0dnZFdERzUwRVJJMUVKaWIwZS9OdWFzLzVHNVAvY1p6Q2VIaXBlbVVqb2FLRS8wWTNSbGpSMzNjdUo1TUtNRHQ4ZVpicVF3aElMUFNWbE85cXpyZG1aVkhzdFpTTmxVdzlDZGdwdW9MRkxtRXM0TFltb1FpN08zRjBkR2YzbkdpTkhacjJHdjk3OWcreloxaVdPTGhqL0gwLzJBc3ptd1dqWFRLdEVXSSt1QkpvTTkxZXdqQlIyUlBhUDdta2hCMlpsZ1AzUWovZkVTVUFvdG4yV0JELzNNekhSUmUvbGlUM3Vib3M0UlBURGs0NzE1blVnTncycVV6WS9jTE40VENpdXlRaitRc3h6WlMwcjNNUERJL1FVU0l5VWFRR0dxNUZZakpTTWV6Z3FhRDluM3RQYXN0SVBxVEQ0MmIvMlNTU05qbTIreFd3MklUQnVRdFk1alpidy9BTyszL2ROWWR6ZkZEQ3NrTkZBY29Ta09KMWNjVTJVTis3NHpONFJIUmZjYUwwaFNyYVJUR0lJMEJDdGNXSEt0QnNMMUMySTdzenc3cm5KUVNnSlVhdjFueFUwR3JMbCtRdVJkMk9rSVMvanVIZXk5RFBWVktHUDd6TldTSzF3OUFVb21jMnhCMFB6RTlQem16akRUbWJ1SUcyK1dOdFc0NzhFUTVEeml4VHN0TUxKMExyckhpNGFLQzBFeCtpTTVjNllIUEYrNHNuM3MwcXR2dkdGbk43OEF6aFJxNDZob3lGTVFuV05KTjhFTnJBeEZKV0EyRmVJQmdFUGp1L2t1ZTY2Smw0SFY2OS9ldGgvMFhNbHpvRUYyNy9qTGI2akNCY3NDWHlZS0xpcE9PTkc0WjNiN0tJOWc4QmNnbThoTTQ2ZDA0NkJIQ2MyMmxwNnhmdEdxT0dFdkVsc0hJSDkyU2cwRlhZYVJjbGx3b1NnY0JOWENhREl0SFVpbTdpbkVkN2RnUGlORjdSejJsM2cxeTI3ODFTMmplcmQ0dldMSVNTd2s4V1BCUFBoRGNqdyt6WmhZN0c1aVFyV05FSkVuTDI2WjNpZk9DeVNmQ0lGamxnUWVqSmVtbnhtNVJPSmNabnppbGtuc2p3aUNibmJaTERwWHEvVW4vUnNDRFFOK0xRVWp4THNraGRoQ0thcDhVVzRlaTZKek5IVStQYURNNmJXdVI2dExpZ24wcUFvbmN3MUY4RTVsbW9zbjhvaGlyVEFIbG03c1d1Sm1FSDR6dWQxbHdlNDI4UTlwV21PV3AyZ01TZ1YvRFhyZWlGTU1hNTVNa3JHU1lSWVpWeUpNbDFpMTBzZmdBbytnOFdDa2dHbkVib3JtVGQvdWlSNDVlVkVKODYyL013bGRZejhLODJLQ0dHNmdDeW0vYkFnNEFUVnlmWjMrUlFQK0RBTU1tUzVCMEhTSEkrem1WcytVU1hocnppd21HWkFLaE0zU3VBQzJWT0Y5RVpuWkluMlhaOEI2dU53enZqaStpOXBOcG1iaE96UkdoOVVsUTZuejRuaXhJOWx6MWJFbnNxZ241dTV4eGVFL3MybFhVSHFndEZHM2dwRWVjdTRBb0QwWERub2tBSEFqaFlTZzJRWlE0QVJXeGg3UU5XOGZHb1RRWElqejZmUGFwMzRSQVVzTGNxTjk0OGlGTHBORnQrS2ZPcFF3R3NhUk9EUnpJZEhVeHpwQjBaMGljclhWc3RpRk1Yd3cweTZqdG51dms3L1ZGOWNjUGE4MjBPeFJyZzJzSlM0ZGtaV2lQTVFwS0hMb2J2cEdmbnRVMisyWnNLUVErZE1xVkw0RFpkQjZTb20rYTdhZGh1QkxwTjI0R3pmVzdjY0Vrenl1ejAzN3IxcnUyL3pIOEVRWWI3V0FMME55dUlVcWQyUVhxQ2ptZmJ3V001TDVBMUNKcnNTN2pIRlZrd0FWdC9xTTl0UHc3cGFONWlnZmc3bkxaeHRBOHYrRG1VazFGNUR3WU8xaHp4NnBCbmUzREtSTUVWQlFhRjd0dU9uZDRVU2M5cTJieG5LUmhpVXFvY2FjZFNwVTNZeHlhaW4wS2RPMnVCSEQ0THFlaVg5UVlrS09lRHlYemN5WDlXbUZ0TjJvWU0xYWdEeWJjZzIzbXoyeHZ5cTh1WXh5NFRrN25kMmlZYXZsWStQcEFaSDRWVUFJYVJLRXpMT2dPOWJ4ZWVveVhnVnk4UTlaVUx2emdjTXhSNzVOOThtMDRJRUUycForYnRtUmMwclozREl1V1QyS1RsdXExano0ZW9KOVA2WVg3VFBqWHJTUjhNQzhKUTNqOTNSa1hkTFAvVWsxRTRYMkg5SURwb3F6WGZPdzE3ZW52N1g2VFB4dHB0KzhkSVVBNFJaOHI2MnIzYzNSS05kRFZLeGZRbXprMlROUS9Rc0dHeThZQldIem5aY3NNU2htSUovWkhEcjdnS0RubWExMjNYM05JMDNJdTl1VWlLUEZDd0R3SlcvWEtQYlQrWnR4VDBpUittWVV4dVRoWGVwMEU4UHorSzcvMnJJeUZ0RDNWN3FDM1p3NGgxWVo0ZzBncnQyV1ZIeGxWeG5uMDdoZThBcnNSbGNRbWh5ZVdXMnpEc1ZOQllSbEpUSlJNTmNFcDhxQ21ReERQRExMeW5mT1ljRXlRQXc2Ny9RUmlWRU11WFlYSDV1QnBmN3hpaEVXUFlKaTZ2d1YvZHAybVN0aUJkaldLSWpIZzlla2g2b2VadlY2OFF3YmU1RDVBb3RFZWJoaU9yVXlmUXMrdHZVVDZ2VGNVc1ovQThqM3VTa21Td2tlVFpGS0QwWldpQ3MrTVFUQ2oxZXdTZVlmSW5NWTZSTnVKbVZXcENzYUhYNXNlWFJSZjdVZGlCSXQ5VkNnZFhKa1E2OCtHazkvSWpRSlJBTEFJZXliMGhYOVdMQ1V1UUpsL1RXOWl2OXJ3em5GUUo0SE00Z1RmWFRPOXVVcEQyQ1NKTWZQMy94RUx2V1RwZkFlcWduM1VGemEwL3dlc1hmNVFSOXNjb0tIMndsWUNPRTg3MytmcG1JRHhrU25ySVhRd04wZlZ5Mmx4YlFnU0taM3lRR0ozUTJxUTQ5QlFjc0lQb2MxRVVUcExGUUFReHptdHd4d2pyYTJTL2xZR3Jjd0JLcmFpVWI1M1JXSm5IQWUxSXk2SkJaZThlMHpXZWc4Ylp1ODhlU000YmQydmFiWktyU0l4bWxob2NyMXFWbkd0bTdzQ2Y5c21FSEF3aDFNTnJCTlRMK2g0QjhjdVRyejlIM0lxd3dQK2VzQkEwS2lFQ2tkOG42MmFWc0dvb0x2OERFWVhUMWlTSU9ZREF6MFJxakdJMVZDVHc0c1dyUk1Ydis3ZWVoa3JHYk9oek5pa3Jta0FLTHE3VFNzMWcrcVJuNFFsZnJzV3NyNU1lSDYrRFRaVjFnNEFZaGlrYXh5VjkrNXVmSjFIMnIzeTREbm5SZEg3UHFMK3EwVmVIUHVLMndmSG9SRnZ2YjBONExjNFRlUDdQWHZTM0M4ZWphRktoeTRobDRyS3NiZjhQRzVNeE10NDB3SU5ZNTE4d0dlRUpDVlV4UGpUT1kvSWZsb0cvWXQ3UzFnZ0gxOGtVNW02Y2Q0R0lMaGoybWNtK0pCdDA3elEwdFZhQ0c4Wng4WGNMalpwdndUVGN0c3Z3K0JhMDR3T21Sa0VZY1RPT2cycmh1NlRYbmpRcEIzQkFYbmJockZxREw3MFdBV1RZWGpHcUM3akJMTWpzSndtMjBBNDM4Z3NjbnBBNDJTT1ZWQXEvby9TZHRBVUV0N3lQVWZGaWtheUo3cUZpYnptUjIzZmN4bm5PS21vT0Y4dGZ5ODZCU2oyaEN0UjMvZGdXa290eUVvV2FoMFZMdzJBbkFRdHVBdGFlRXNVZ2xtcmxuTjJ3S0ZZeFVFRFpVa0ZWTnVtbWdBT0xxcFRVUTFFeEdXZDlFa3JlYUVhN1ZKZWNQR0Zud3JvYzFMZFFOdUNtMno3RllpQjM1M21JS2dydFMxYXVkWVlTYWsrcVliUVZqUWluZjhJTG9iQ1JEU2IwZStDeTJUZ3lkdUNIaHQwSUlLTjJCRE1hK05pRXpnT2pRK0V6MVpRbG9SZ2piNVN4VkpodDA1RjV2eVlKdWlmYWpYampFczg1RnhVMjZ3OHpwcDJkK0RGZ0FlS2VCb1JDUGZGcWhiRVY3ZkVMcnFmbitKaCtaNnlHTHdaQ2dvQ2NhUGxBZFhoWXZPOTZPVVplTUp2bG9hMjFycUh5akREdEhLRUxMZU0wSG9pMStURm4xbGNnaVplUVZ5NEIydWhtT2YwT05PeVRXRi9yWVVsQ0c4MUZIRXllTTU3cU1zbVlVTWJmeDJNUm92ZVlQbXVsa2Rya1YzTVh1NlN4RFVTVEk5UkN5eVZuYnZPRU9LZUVrcElwVmhNRFZMUENsaFV3TCsyMlpXWkF1K2pBOVVQYTBPSGhSeEFTeU9hWlYzc1ltWTdtd0t0WnlpNWVtclRkYWZ6TzFWTGF0VTlva2w3VmlNMzZ1ZDlUdUlXL2FBTU1rMDhBekpPMUFoT1FDN3Z0VXUrVVhZMXJNc2JTVG9BUk4zaTM4T1R1T1U1UXBzWm1GMzZKb0VNckErU0QyaGpSdy9McUw5T3A2OEZEemJSVTZackdqZlBaS29xZlpENVM1RG9IV0dtUG9CU0JKUkZJVlhEVEVURFF0RTY1M21nU2I4aGpiWUpaOCtCb2VYL01vQzZPd3dHS1lhcVJJakJ2SDR1NEFGSnV1TXhhZE80YkdFYkNmbW1NYlJ6LzBOSVpCVXpYNnJCTEhBbGpIUFdkcFJ1dTNLMEpqbTFLRzhxTU9TYm1udS90ZHhXOXQySHQxTVpvNEVKQ0NSRHA1TTZIZThSZXVFdk1PdThtVUtKSGcxMEpBd21ROE5vYlZNVjdSem5JVS9GRThtcWlQZzhaNUR3NTFFK2JlMytDTFI4K0daeElORG1pZTAxdklWKzdJY2I5bEFjZHg1emYzTmlNZ2Z5Z1ZOK3pMaVltUldjNUlWalIraThJSTdleFdibHFraXFyTG1ydzRKWVdBanlkb2VvWmVnRkk1QXBRdGdSRjVMVkxjbUpHNXNKTk5yVTl1cERhcVNmRFRZQ2U3VldBS3MrWmlHb0pCbkhJcUZOV29TYnhHdjZYUXdVV2NLbno5TnZHakR1YnRYcVJjTkxpNzV0Wnpxb1hqMU50SlBtMDJHU1Z4R3p1SkxJRGxXeXBEenBIT0VaMDJxM2ZKbEZzZHR6QVliODFHU0YzcE93V1VLbk5vblR4QTB2R0Z6QSt1by9rb01QY2lMVG5NVHpadW5rSXFySlZTckIra1FWNXJqZmVOdTU4Y0JocW9EYXNCa0JSTTFDanlrVUY5MFluS1dINkROSUUwbWZlb25BblVQK2FGQUNZZU4rQmFWd3RsSUFuM0sybUFsamVUMnpFOEswUTBQbXBCRERIejRxcnI0dXNNYmwra3lCZjJtZjNuZ0MyOFpzMWtNZmVkYlNUSUh3T0VMdG94bDlKUG1jN21hemRVeEpjeHZSVTZpZHVDSGZnY0xuYmUwMUNPYlFVb3Jlcm1DWEtDWlFRQWNjNUlQTXdnS1lBZmFEcTEyR3h6ZnJVQnFPN0JLSVhDVU1YK0JBTnArZVAvNmlwMndyNXRWVFNXdWRISk5QS0NJR0JIQ0tnNjdnbFNIMXRxcnFzWnJvZlNkakx1NWlGUTFVcmxEZ2c5bE0wOXdBZ0kzUERiRHNKbWNQTXAzenJuYkxGbTRrYWc3WDhPQXZnZTNPdDMvem5oa2VQN2tDbzVPZE9PUFRXeEJYbDhmeWxYVnZqdjdPcEVnZ2JWWkFyWGlNM2RjNW1tV0kwZXlDR25MVlRYMmJMS3M4dU5CNy95Zm10T3A2WTBhTm5Nb1ZqakdITENTSDNTQzJJM1l2enRhVm1BUUNRQmZhTFgvNUpXb2h4aDZRLzNYUHdLODQ2cEJWeS9MbEpTMmdibVBERFdsU29aSzRZU2QvdmUzOWlkTzljM1c0V1V4NU91NHJQWjNSbEZYOVB5VnA0WXBFdVpKL1RpczZyRUNzUENQQTRKWW94Rk9nWDM3cHlaY3lOZDZQUTUrZEZ0WWgzWGdERlg4ZDhSRlV6a09ndldZNzNocFg5RUJIWFlYVWNCUXhPdzZjRUZIUGd2V3BTSzFOTjA4WkpSZm1udHNOdWw3ZlFQRVRhZnRwd0FTV00zdUcxUUFSdHE2U203TFNSV2FzMy9tODVER0VCUUhpSzV2eUppSXR5ZzgyZHpOcFZGbWVJSXJHYmhlTjNwTERweHpoU0svQ3dhRFBkZ1lYS0k2VW4wUExjdGVmSzVqMC8xN21Va05sRVo0RTlWMUlEYlpCYWw2VTl4YmIvM2pkRU45RnpqVFdIclFhZU9td2YrYXFMVHlRejFQVkdEOEVvS29TQUpWSjVKVDA1djFxdlF0aEtlSjVxSUhFZFNtazhpdVRJUW5UbGxzcFJKVWczbm0zalhOQXlIN0IxK0s0YWQwSGlOcDluY0xLNFZrV0NLMEx2dWlqSExmWW1NNDdER2xZbDIxdmJNS3AyMHdBcUt0WG1wdjNWeUJXNk1MNDZOTkdXNkU5QlhsR1pqbncwdnp3VnRXaHI4Vkw0bzZTUWZ2WlpWRjZyM0dIbnRVWGYrbjIvdExKMUFZZ3NtY1NhQ0xYWmlBZ1ZQM1M1OE1jd2g2WUJGbVhlK29LTW9uVUlUUzdLMS9zK1BYZkliZlBJSXpES2dVbXlmYThSMnZ0cnVobjUvOWJDOERrMThkZFUxeFJmc00wY1krc0kyUmhaRXlZb01PdHg1V1l4TVFUZCs2WXhGc05zSGRXSC9wbTlRLzBmVVdiQ3BLS0Z0QngvdVlNOGJUYWYrclpKdlZMTEdpM3k4UDVVb2xIWU9mcklXRDNGRUVqNno1YUVQc0lyM1VYYjNqL1dhVkFobFR0eklMQlNpZmd2M1JXcmk0K0VtNkNkcU9FWVpqc0diUDJOTTFWNmFNQnBmdHhNSnVQdnVVS09scXVJSU5nY2ZsZ2dteHRVV2Q2Tkp3K01hNVgzb0lKaEkvRDRReHRYdTRlYmdGeS9zYTdrU0ZoTlBHR2Y3VzVRQ1hoUndQaHlYNWpJRGQzMGRpQ3h5YnB4ZGpjTGFlcTAwdVdocERvMnF3RkszeTMvQVQwT3B1RzlHZ09XWC8xS090OEN3azN5MWcrRmZPaVFnaXNhVFRFbXlGT3FOVXBlcC82WTNOdE5vZ2c4ZGtJNmhpd2c3YVNDTnJXOWY0WnlSd0l4Ty9uMXdjeEV4TnB1SDgyWVl0M29iVURhbW9jZ0RWa2k1RDBGTWZMT3RWMFJjMVl3UVdMSnZidGt2VktrZ2J1R1NLaHYzQ1NhMjFKdkNFdjBjQkF1Q01tMFE2RUhlQjl2V0cvYk5lTFhTNUR4QmVqNzlaVVZibUxrUk9mK3g4T2d2b2w5TVFMeGtEcDFNUkJ3SjI3R0pickNiZk5wN3RqZlJRZWw5dFJwY2o0N2FMdmNKTVU1NUpnQVpEVXdleHc2Tk1VODRNNU4vd2RxZXYvVmFTRnRpME40MGxYbDM0b0oxNzlaZU4ySzQ5L3puZHNhRDA0TVdLNXRsZUJOMzZ3WWZMV3dmV3FSc2pGWXpwb0dDS096ZjlvcjRnWkFXM3o0TWhHd0RROXpPUXZrUHNqOWtmVkgxeDduckFWTUNSMGVMaGRYTUZnTzlOcWZIajNKcTNxb3hsaDhvbzJwWUFNWlVHUS9HcGtPZktBUjBENGp0a1pLd01WS0dGei9CSGZ1QWVQMFBhSXZzdE90VWJ2SEpoYkV3dzRYVTVYZXkrcHg2clNJdTltV2w1R1AzVHZ0R2xnMEg1d1AxMUxEODFlbHcxVnJYTGhwQzVLaTZYbWh1Z29BaFp3b0J4cHRzTXJKM2NXTjFMZ2RrTGp6UWw2WnpzYXplWkVBN2NGRDBPOU9mY3l1TzNjcUcyWmRoWEJ2enBSTGQwY0ZTME1uMHRRK0dtcnk2Zm0weFdicmhXbnNrd09FRmtZeHBUV3ptNWdyZ3VVZmhKOHJNSE40dnlrV0l3STQ2SzVQRDZybzVHNzlnTWhtakN6ZmQyT2pZMnE3TWFxbnJoYUVzRGl1NFFybGsvUnI1YXNYRDAza3p0QWZSdm9MaGN6ZWFSWWRHM2dsQ3JBZ1gzN1FjQnh0NVhxTzM3M0hwMFB6MDhnMjd0SXdnSFgzdmZyVk02aGJiQlA5bklybjJRcTVxL0lsT0w3VkpuQmE3Q2xuWmx2N2FmdlBkVzJuRmVVRmgzVHNGd3QwbUxvOUtvOWJiK2hPeDlvcnFKYVF4bk9tNitUMlQvM1k3OU1iZC9OTzk3dHhvUzdNWHN1ZDNWZ1c0NWdmSFdzUzlkRktOMmgzdFhKakJ1MWdOYUlvYTlEaThiQ3dDUjV6UGM0SlJIS0UyMUprUERZdHc5QWlpVjBHUkszVXRZc0lOc3JDZ2NaRHVyUnp6dlEzNURyaVRIR1ZxL0JXbFVyMVh6YWIvaG9vcVdnRm1pamxzUFFEaXZ1d1VzTU0zTWIrUU9rZ1NvVEtqRWk3RW8rY1ltdHF2WlBRQUYza1VqWTZldEhFTDNQR0JmVHVhY1dxaXNwdDBpd0dVdzNaVm5UVUUxY3hIZ29lczJOVkorWkM3dlkxSTkzWVlZaFpxRVNXMnk0ZlEyMXc1ekU4QzJNcGNJRzRuK0RXek9EQml0N0hqNVp1ZVR3dXZCbkhCbU5rY0lHSnluS3ZINEkxVThyVjAyVUJyL3hmODl0VFRWY1c4ZWVJMkRtQlE3T3FzWnZuK0NwTmtiRXRMclR6UWhUY0lYU3dhbEpMKytZeGl3Mjc2ZkFLRm85TVBTVmNTOXVvL2xobTVUZ2pVN2xhQllFVE5hZkJ5djZsZDczelNEakhkUFM3a2Jzd0p4OUxvSGNTMTVvQkRMZVFhYkIxYTQ0M2hWam85RUloT2Vsd09TUmdYcW93eFFPTTQ1YnRLTit3czdNUjdndmtOakVIdVRFMnhrVDJmblU2MDRjL0ozd3RSQ2QrbFJYU0p0dmp3VXdGeE1jR05mc0hRd1pRQmIvVy9heFdYeGF5cUwzMXVMa2RZU3p2cEhQY2dpc1dqYkZIdUF2Rkg2QUVrbnlJMFI5N3dadHhWWDBRWWlubXBLRFRhSlV3UUFnYXQ2OUFVUldsQ0hIaDNCWU0yekYvRU5heGJBWjA3cWJ4cmtDMjV0bHdYN2FpZUlpVGNjRDRWcjNpTkFpdkszTjJKUSt4VGpFdlRXM3JhejN3Zm9zR3I5eTZHanF3WFZJMlMwekVML2cvdjlpV2hGTWJ2Y1NaeHNKamcvWERXWWdKQnlDbXNpUGNqTi9lTW05NUpVNng4aVlqZlhRY2gvczV1OGpraHlNKzV0Y2YxWnRVekdOS2I5RHRsS3lwclBqb2xKaENwNmwwa3A3QXIvNElycERVS1VnRkpoYWdXeUpMVHJDKzFGMU8yVEpvdUk3WEtrVlc3dlpKSzdaSHNZOGM0Njk4S252d2hqM1N0OFhjeHpSSjhSeHhTUFB0SFVzQTdRaWRLKytUWExuRXdsMHdxVjROZjNaWmxSdElpdFZyYnI2cVpqTjBlSzY4VXQvaVJIUUFEU2FoOWJXZDc5MVczMmVudWhkTEU3VmRPMDV4cXA4RFB5UmhMc2VOMzVSRElnU2FrK2pIUnFoU2JDK3Jud0J4Yi9iTDRmS0x4WWlyaXBOL0ErKzljSnRQbGVWRm1jUkRjR3d0eUE0WklpbzcwdUJDWFYwZTU5OXBKb2xBSEI2Q0VpR01QSWpqdGpGandEem5rTWN4UGhRU2FnZGQweXkza2hKTEo5SnV0TUpKNURBYURTcXJxZWY5bDVvVkhMNVl4N3FiMDRjMXhPVmhrYlJRVzdOZkppeGEyc2ErWWN5OGVETXFLNzZ2eVNBZ0wwZUZHcTZkajBndk1GVHEzMTNROGJuMzUyMXlCSlRCZkhvd0dNNUNURWdGeitLWi9BNFJCN0hwV1k1TnFkNk9IbTNOTDExZjNQeDhPQnBNMldkbW5IRzBJdFJRTFFvN09acWJpdlNybXVKditYQmdiZlIwaWRqaU8xMFJUWXlNV29GK0RUbzRUb2hNWHl3NEVOK2tPc2duVzIyL2hkNi9Dem14c2Q1QTdENGR3VjBmdE5tTkh1MEJSWC9IVitjcnVBd1BZUmo0c25iSW9YK2VOeElVYXlrcE5kbDJ1dWVkSGsyVzlHdGM4TmN4WkxWdU5pTDZLNm0yQXdkWEFpL0IxQVdiWGFCUDVzcXhOSklNMU5pbEpyOFJ3SFFCRFpFVEVBcnhHVWlVa2RrZmo0WjJVNCs0ODJoQ1NzYkRWV3gyY1pad21EZlQrTThlZGJjdEpzTWxjekkxbU5jbGdZaUxDSDdYekQrayt0L2FMeUx1Z1lWaU9DWWxLUiszS0h0VUx0RjhRdVFOQ1hyYjBkTG1jWllkVyswN1BtUGVveDRna002R1dFS1JKZFlON0lkY2d4aEFwVHJCNjVhN2JUSDlzMVh4d2M3aHhpRE1IMmdaOUl1em4weWl2eWk2OVRJR1J6QlRDZDFEd2JkdjJURlM5MFJlMGVDTGFyUG1aVWwvb0hUWkxIeUw5eEZYNkx6dmh2T1V5bDZtMlFDUXFCUEFBMzB2OW9iTExTbXpwMnMrTU1FdllZdTdwZHozVndTSDdrQktQazZLL0N5K2pvM2dKUlhlMUJQeW5qU3MrZkpoYzJPL29sck5oL2JDQUNnVUFsV2xZbmNTRTJQdHJoOGIxVGV3eHhHOHdraXViQ0VYRk9NV3RJeXFzcFhaa3VpL3ZqSUR5eWx3R21wckV2dkdwM3paWit3RlNJWEpXRGpXUHlZNHBOWEdWaTdtN0xSQ1o4MWswdFRMY0ppQmVCakZvMzk5ZnFFaTRRKzg1enh5S203YXZ4VEJsVDMwUVU2Q2F1MFBvbEFXWnFVTEpCaWk3b3BDbXpVMm1yT3ZIRHFuOHJGNzFnc2NsVXkxWnduY1NvS1FsdmJZcGpzcEt4b0kyMDJHYkUzL3JlQ09HK0NvazlucFpBR2Q4cEMwL2p6U29hekU4OHJNZHRKM1BWdnUzK2FnRmx5VVdHV083V1VxSUUvWUUzNTBNQ011Q1RMNmZpU2U2Vkw1TS81V09Qckp0MEpDcGFSeW11WGo3RTVuWGZ4NUFoTWdienZWK3U5dDhhZlNNWVE3S3NSWFZKNEt1eThIYkZkamVBcWkxTnVhZm9SYmhTR21HNjlkbnFQdzhCcktVRUR4N1lTaWl4RTlpVERyc25UeHpkbXc4UEhHNGdDMXNPRnhuenZyZE8xSS9UdEN4NXhyOEd4dm5zTjI2YnhzNHdWZmxmalROYU1RYUNOT2R1THZPbWE5bnpzMEVla2lhZ25rd1FnWG9GZDZESzVzMHZnZllqYjh2RkpHRmpsUUpNSDQ3bk41eXZqWkVFUkJRcmF3bTFXMFlxamRsckR6ZE5yVm9kend3NW1ZcVRGV1FuODdZOEhvMzNwV3c4ZDFycWp5WVY0aUd5SC9peS8yVERaaXV0ekc5NDg2aDVDOVlkUTlBYmJFa2ZISW5qbTZLQ0VUdmJLRnVzL0VhY3RFT2FoczlBbmlkNjRaTFRqNmFXejVIRTFNdXFZSCs4SzloczhOYlBvNWNtWkNGOFU0d2MrVzU3Z3ArME0zZDJlbG5WUWtNYTZuN1VaM0pBMTlKeUtvL3JEL2cyK1NpZnVQSmROV0N2QXRSdHdGRjkvNzJJWkNQN0RhWFBJaG9FMXFCOUJ1NW9aOUhYdzR2U0hMNFBtVEN0NHdzZS9rTElFOFByRXdSNkxCNUVkNzdiR1NoWU9uREtjRkdBcmk3QUtYSXdpMCttdy94QXFpckdDeTJ3ZmxJMWN4V1I2cUtpdzRFcGxaSEorSFIvYTRSUW1jQmdLL1JWcC9VMEFYOFpaa2JiSGNjbk0yRkw5bWIzZ2xQbVFlOFJ4SEh4bWFYM2t1NkxDZzZyL0JGR1dxWkZpZjRIOWREZmJjcUdaVFJXUjl0SGNnQ1IzNUQzai8yWTVkcm1BWnFMR3F4Q2w3Wk8wbTZ4UWdjZHB2OEN2UEs3SW9sYXNVKzc5ZGVHUllPMEhEY211bU56S1UvQzl3Sy9LMlJJNllsY0RtdGY5YzVLTEh2YWZTNkowK2xvR0tCMFJtcnpsN1RqWXg5bnhKNmk4UUtwNE5WaXJkZnFFZnBYckdsWnF1M0RDYTY2a0RrckhZaGY0N0VIbmZnbXgwQ25GczdWUFROUUZYVVo4SUtkZnJtQzdPM25DK1l2bk1PMFFaTE9nTk9UTTNORHRoN2xsVVkrQU5Xd1BOZE84eW5zazQ2eDBxdUl0azNWcHFuT2ZiY0IvT3ZsVnNjZnc0bnZOS2EzRUlKWEloejZTYkJjSEFQMnRVR1ExSDZHUU9wdzhoSGFscVgwYUg0Y2tvRGpDZndrS0x1MDNuSTlMYU5YZ2N0VGRoT2N4WnlwQUN1U1FuekxlY1k0ZlltaXRzclZmaEwwdUY0THIrTXJYTDZocStxMjBUQmQwMUpsU05nN2RGb2lPdi85L0F0ekk0a1JuSnIxNmk4enk0Z1g3U0pwQWsxMzJkclhITE1lckZuSDBlYkpBNm80THRVbTk4ZU00TFBXS1ZmcC9maHJNS2NYRmNPQUZtV3lZL3VFcmZZcUlPYks1Zm10Z1R5NzJtNTVsZ1BSZUQ0WkRFamZUNGUwVHBRS2FYOHJVWkFtM2h0R3RJbGtlTG8xVWx6YnpjVGpyRkRuSWFrbHNIU0c4RldvUW9vSUhsV0o5cGFoZGozZHJpb1Y0UUpxUUlMdDFSQUcyZStveWdkeUp1d2dNWU1sRnhITGIwTjN2ZTFCbFVyUXBwRE5zdnBkUXgzU29McHo0UW8wZVRzeldsNjlkSjFhTEg3bG1XcnY4TElxZk5vc3NrVnQwdlUxRzNQaHg1cHlWUWRqek02VU53a3hjeG5CcXE0YWtaRmVYaVluWjFUL3FLMzAyYVFGeTRvVDJoSktaQ0xWUDRVZEkvQmVsVmNKQWwybSs1bVd5QzVPVFMyYTFjVTVvMGVxNFJyQ3JLREJjRW1rODJuQ2RhT2JPejcwMTRENi9sbGhwMytXUU1VR0pZUTBzZzhRcjI4RGFtNU9rR2lMZ0xVM3NKdVZITjZuczJmbEpIRHF1NytYcUlnMnF4UWhtRUk1a3ZlUHhqUkVRVHUrWEllK0pYdjNvVHZkd2I2R0lIYTJ0YTM3RDBzalhoUVUrV3NDLysyTDVLaGZ5NVJUNmhjVkNBaWdGa0JZa21XeWdrM0FGOXJQeWRvSFFyVWRzTmhRei9pbUE5SStTQ2RZTGxxN1g1bGp5SmhpNkpQQ2hNaHk4UWNHSnkrWUJrc3gzd0RvZGgydG9JenVjYzRwTVFMajVwSlNYaHJDZTBqQjB5WlNkL21HSEw4UXlTcm5aZ2ZJb0FQZmZCTkxXYmo4dGNHc1hDMDRGV0FJYlpVbmdaQUtwMjNERllEb3FrMjd5dXBsRzEyeWM4Tkg4T1hMQmhINWNRVWF3anpqN2cxRk9lUmNkRlY5VVh0b25yS3F2UmtiNEdveE40S0FTRHlDaUFMMzM4S3dUM2dkaUw1SDF6MEZZazZvaFlZUlU0b2R4ajJKaGxjMGF3UEh6eVpEcXdiS1lzUUR1Q3pUUHpXSURhTzdtNFZGeEYveDY2aVlLbmM4YU1xWlVkY25mTnhCTVBSZ0RDZ1NTcVlMNXlEdDVWejNTd3VDMXRONkJkNlhlWmo1a20zNm9XYVgvSEM3YWF4bGlnWU00YUZRdnVvMmZXYlNldjlydFlJb0RVMkFHU29lbHAyNzRvbkpCeXVBOUZpZnNDMlp1RytnNU9FaU1pVXEzL3ZOeHMySmlmcjJTaG9kVTllOGltcDRqYnplNEE0Qmg4SytaSWRaSC9Hb0ZUa0J0cTBXTHc4RkhhRFVaSXZXQ21HSGplVUZJaS9PWktibkR0M09OcFhVaGJmRmFuUHV3c2V6TjRUTTU4blZhQlFDRTd2Qm5ibTNHVldnUC9JdURhbU5BcmhCcEt4Z0cxZWNFM3c0cjFtajhQb05FK0M0d1NnWGZsQWwvUTQ4dWUzUXJ6OXYrRWEzbmZMSC9RUlczZ2ZoTVBqSkRQcTB2SmIvbXBWUkZyenpGaFBBaHhTcTJzOHkwV2NIenFGS1hQYnNFdE1taEl2ZENOVjFiWmh4NmVpWlI2bFBoV0lsWjhGVGcxdE9uOEROQkJwRHU3SWllNGN1ZWtJcWVQOE03dDZhVkp0STR3Nm5LSnF0RlMwSWlkMTIrelNLZ2Z1WW5UbTl3RlovbDNwckNtVklHZThmaEhsb25iWmNPU3FZQjN5M3kzejh2V0xad0tYa1dKMEJyUnM4YTBQNis3M2Nnb1JQN3hJM2tzWWsxYStoRWV3SGprZllKdlZ5ZEFkOW5NMlRWMXk0Z3F3S1czUmJzTGhSaTNTUTkrU0VGVkYxa0JZZE9kL0ZHTm5KVENEWFdENWJiMG9sVW5ob1M5K3BEODRNa2RpUjJOU3hjRWNDQmI1VUI1U0xwRDlQbC9UVENlME80OWNnVUdvSEtIY1hIR0Q4MVJnaWxaWmorZC9RcnF4UjN1cnM0MUhkTDhPTGg2SkRPVDk5UDhrTjBmeENsWjdOcUVZbkJnaDVDTWxqVVh3TWlRd21aTnJSdEpmbXloZUZrWFhla08rUmRLWlkrRHBwNUdwbW5kT1l3UklxTlFXOWU1elVjelB0ajZwTSthZnVRa0NIT1BQa0RGWVFqTloxV2FTZzFEWEdmeUxsLzBtdmtvTzVFNEJkQlJ2U2p1K3N1RWpNODJSMXhjRkRtZDF6M1R3WEhhbnRac3BpSndjUUZHYUlzbVFxOC9EWXk5d1N5KzBRcVB3SkRkcXM3TGtBNW9reExyMDUvTldLeCtXaGZwVEdhVVA2d25QS2wwdzBCbThKNTRuSUUxZGUvQTNaYUF2dzQ2clcxS084TklLZmJ2dXBRNlNGY3pmNy9IUTlWYithZm9QbWZlNUdPUlBFcDg2K2ZYR0RoQ2hOMlIxTFBsOHQ5RFJzQWpmMEd1eVRQNHZQbE1zL0FQS3Z3UVhxM3Z2dXRMVGFZUnlxdldZVkxNZm5iSW04dC95cjIyWFBsRUJsZENWc1YrL2RxSDFTN3NldjNIZGNxUnFpWTlhRUNmSWpQWXVTa01FNE9ha2VZZkR6TzdqR05RalhrbERWa1lsODlhc2J1bXdQNGlYU0tqSjFCYmVOWDJGdjMyOER1VERlYmF4OUF2NEZ6d2l4M253ek1IbVpuVUJMVmtmZDRGeVVCaUs5T1AyYlZXNldEblNCeXl3NEtSZWxTR0JyQ3V0VHJtNzlEbno5OGQyb1hQamVlVkp4ZEhqdUZZTGVFSGQwR1E5Q1NKOFk0UlJzRmt3TE0za2R5Wng0QzJGU3ZFWXJGandiR1Zjdzg0cDNiUEYrdmhzbVQybmtIczc0RU1zY0NuY3Q1VU0raFVXMHJUWnFaUkduQURwdHNNaVQ3cG9SblNodjdXYWpyMFpFMllKS21aejFmVXdzYWhxNUxodUZ4WnVqTnpRVVBJdmlnd09jcURGQmkrWTNuZDVmdlk0RDdBOXlSUFlFVXQ2ZjZ4S0t5dWp4ZDRwSUd3anp0ZERxSE9RaElJNzNZWjZEbk9XSmZWVmMvWmo3eWRCVFNPMDVJV3ZxRE5WZlRoZWRoWFZHUEd4ampVb1Rzc1BSeXVLeEYyblB6T0o3dlZoSVR0c0VzcXEyM3RjZ0ROaFBYeVFjL0FkNGExK3JlYzRpU0Z0cVAvVm42RlFWMUY1a0RHcmNqN0gxRkZtL3I3QW41QmNGdVJ4L2h6L21FaUt0UHRuWTVQbWFKeWpCbVRBYkZOVU50YnpJc05td1UwUVBvMnpRNGhKRkJSaXR4UU9EOTBhMjRERU42eUpMbzMyL1NoMTBYUjUycXVsbVpXVlp2YzgrYSt1bUNBZDQ2ZnhiRyt4RC9Scy8vTzBNSENEQU4va29JSllabHlTOXh5WSs2VlhESGlxSXUwdWtPWjEwRzhrVWZUWVFpdGozVGtrbms5TWZETzNCTU9lWWtYdFlmRzdaV0FWUXM2UGgrZWtqanREUFM5NmMvZ2Zza2xlYUpLeHgvVnBuRFhkS1NPL2o3QUszZ3l5WnA3YzhvTjIwT2h2a1NFWnVIbVBXZHZWaUZ3M1hyZ0VhSWdQb0pMSEE3UEdLYmFydUl5dkdXNFYzeVplOVZzYmZFaU5veGpEc0FVNmZCOWhiMDlUdDJwN25sM0x4Wm9SY2pKR3pPeGtQeWtjcGVhajRmSU55NVp1UVpIeDgvVDZFQTl1Z0hoL1p2VVJzR2dXLzBtLzRLYlNzSmcyRUN6UXErYkFtOWZqalozNWhRUkRXWWNkbmR6TEg1RXJWeWhiZHlNclU1WWJKUHc0MmR3MTZ6VlpDOVMyemhYSHhzR2ZnRHJiUkJGSTZBRzZNS2ZURVJjQTlPVmk0NjRyQ1ZNOThPd0M0NG5SMlk0NzhiZy9BMUh5TFNCUlowc0VYbXpYaTF0VmhVVUl4Z09QVWFGQUxTUlhvMmcrRnY0SFJsYXAxYk01a3BucHBNUlJrUmQ4eUI4UDFMak9JUEJ5N3l0NTRqRE1jMUp3Mmo4bmlmZEkwRGRVckdHNTUvTEVmRFhvcFlITXBWUUIwenhmYXZjc0RnWVhtZ3pHTUM4aW1DRnBZSUFXMHJMaldydDR5b0pMcmVkS0diY3poYVFjWjZvTDdUN2gzM0lER3EySXg1S1NURExBNGJtQm9FSFVaa0VDa05UZ2d2N3RWUGE2SWlMREVEL3ZUOWhyOFhwbHJNSWtXMUxhQ1dadmttR3Q5UkR6MEJsTEc3WFY0c1ZXQTZZSlBLK0xVQ3ozUHZKUDl6dE9DV2g3czVBYUNSTWY4cTRJeTZvbjJ5NUJ1RGI4QXIrcXVuUGRxdjNJVFBGeEV2aXRMcmZpeHhDaitERWNlVW1ZcEZLMWxOdE9wQmpXZEk5dURtSHNhWlNYZ2dCZ3ZEaEJSMW9qWnlRM0xLei9naDUvOHJGcUs4ckgvZ1hiaVdka1dmUUVtT2I4RDM5b1ZHWW9JbUNjU0NRUGI2N0x1akpJN1MzS2l3M2tPejJDbzJNU1ZaUXdoZlFMeDZWSE1RdkV5OExvdFJKbVp4N21mZ1RWeEVGSEZnMHBBQWRMbFhkSlNSZklEcUhQN2kyUEFhcWx3Z0xtVFdwTlJTTUVuSnNSVnl0TnNHZWxudFBONUNxbXhqamsrbExQTVMrcUZmcjVZK2lrcDljMTZJcnRtREcxZ20zN3FXTVNmeFMwbkZ6ZUluSmRsSGo1SytCNGM4NjFQRm1KbzNNODdnQXRQRWR4QXVrcElZdllVMHpGUTNXOHQvaGtHaklJL3NvbVA0aE1pbE9tQTIrdkRuY1Z1TDdDc1VzN0s5WG05QkcxeWlnejM2QzNuZHhPWXhlaUxxWkROZmpzZ21XSDYvRmtNWnJabVRycW5wcGdxQmNmdXpVamJzU3NXcDlaaXVMMlJOK3krWGtyd1BLUnhZNWNzRWJ0QSsxWmFEZTJrdW5haC9Dd3NsLzE3TmhSMnQ5eE4xMUJlUnR2bzd5MmRTWFhxa2hwbUw0Qm0yU1NFN3hKcDJQcC9RaHFEaFJiUGNEZCt4bXlYQVBaUFd3MmNjeWE3WjZLSWVMdEtNM21aRTdlR1Y3bTUzdkZLakJWdU94bVBSYmNMcGsvaHVHOTVIcFhWNDFUd1lmbUhNcmFhallod2Mra25JMXFWbVpVZ3YvanJXU2VoelVwMEJ2d3lyVmxSSDA3WmJueVp2N0NXcHVxTVo1b2x5M3R3aTlzWmx6TUEyMkFLeGVPeFRkNlR6Nm81MkhVZlFXaGl2SVJBQ3o1cTlLQk45S0JRWmprbnBGYzNXNzFKd3pKa0pmWm9oQlJ0UFlwWHJrWUFub1ZPVldodnBQaGhPQzlzZXB1NHNRNGhzMEtidHcyRVVTN2R2Vmt6K2l3UFFOR2dsay91RGlaQzVxS3p6SFZuSStNTE01NWFaNWxDL0FXWWh0SC9NdVhNZ01mSUlTdjlIaDFkTENSU1EyNHpZM2tXS09XNW41UUQzd051WGEybjh2aUF0Z0s4bUQzK3VKUDkwaWRRSE5La0tGVjVNR3I5UnNtcUl0NmxvMmp3eU82RS9uT0dNY2dTb2JPMWJZMVo1TFlaQm9VVnNoSlAyWDljazJ1Rlp4LzR0aFk2TEh6U0luSXlUMWxCUnRHUlNVa25FazNkSVN3RGxlM25WdzhzdWU4b0ZOSG9mQnUyWEtzVXlIMnJDc3crNlJScTh0WTh6RVV2cVNyNGIySnhMcGJEK0ZjZ0dJQXovRVRBT2d3VmUrZmRwd2RiUk04TWJBT0dKREhpd2FETXQ0QXY3Z2pFMEJYeExtM2VHaUlzVTNuQjNOaHgzUUl0U2ZXeE5HM09zdU9nRmdqQnFyQk9LL09FQ216RnNxZkN2RGRaaXVEeEQ2Wkkyd3hvMDVvOG1xdlFlY2lkZTZBYTNtSisrWnlmd05qZlhwMHVpa2dQY1h3UWpHbVY4TC9LNEFYQVlycDRMSWFaUnJ6YTFOaFNQTmgyV09zM3hWeXFMb2lBNEJ2R1VUR3N0aTU5cFUxSEdHQW03Nms2RkpTMjMrSjdBUU9WMXFFQ3hPckl1QVBFNUNGRjhIWTQ3b1BYL0tDd3I4Wk5XbHNxOHYxOGc0Y2tYbnUwb1ZXNTk3WVh1cG5yMWd5Y1k3RVBWUktUWm1BZTA0b1RJai9jbzZNY0p2Y0tMUFh0ZE9vWTNNWVVkUEFvS3prc2ovVEp0Rjl2ZzB0ditwRkdSNUhpSlB5aHc4Z3N5aUM2VlJVQy91eVVvcDB5YlRqMzdLa0szZjhlWUtMV3FsVjUrVGJEV3I2bTBLWEx5cXhDMmR6ZDZyT1ROWDZYbXRIczUybFgvWUppMk40YklNSEFaTkFIQWkvT3RITC8rMnRBVTNuY0U1Snp6VC9RZ0cvejQ3NGZiUWxJbE1WcnVFeCtDSTNOaWc0dXhwUzVQa0ExZk1mSTZia1ZQWStQMTM1RFpmMnREeVF5eXArRzZycTJxUnZqT08xN2JTSTM4aDJ4TnhWNmdIS1BCSHdJZDBBRVpqbis3cVdFK2hFL2gyclNMM2JSRTk1bDRIblQ4bmhPMTNKNmw5U04zWmhKeGZzeXptSnZSMlR1bHRRMjhROEpkYWZ5RTFGWno1dENXYzMwVUtvRDB3cFdPRyt2THZIRFdLd2p4cHZWNUtwNG5qZkx5cjZYMkM2TWxLdEYweXNyWTRBSnM1d3h2UjBiS0Q3dEFGWXd6dkpyeDJkU0tyMG9OUmU3UUhrcjJhSzNEZDh2M1N5VHFSbExmWEo4UUJ5S2J1ekxoYXJhNkt2cUsrQlFwejVkcS9pQlg5aXlHekNLRjd6ellhc3draGRZTjljMjRCZHdEcCt1WGc1WUtNSlZYa1VZbERLVDE1a2YwOUdVdnBPS2VwR1B2R2VqYTdkVFpkUzNsaHhLN0ZaUDRGS2VUc05wZ2wrTC9Rb2o3eHhJM3ZRcExlZURjSVVPdzFHNUtsdFVOODczMmtha3FWb1VlVXJhdFhPeDlGWTJHaHVBYlpKM0ZOZHdYUUpQOG9EZ1J1NHJ4RDhURFJJWEtaYWQ3MGJNR2l6Q1ozekxIUWNRWUs0Y3RrcjBEMzF3QnNKK3FML0ZqMGxGdXA2NHc5V09BdjdJaEt5bFQxejdJbEtGZFVhZXdrVlFsM3o4a2ZkWERTNGJ0TlJSdXREQWZSQktrTmtzL1JWZmhyTVBYd1lNSncwcjN3TWpJUUpHYXVqdkJqd0xONXd2dkl5b0lKSWovTjM3Wi9kLzdRWkxQVVBZOHZqTzZqbkJ0SFJyV3lEUWJOVnUxclFpVjVSbGpnOGVWc1ZqYTBFdkFiOHdIVFliUlN6ODY0UTlUVktySGlJMjhMZUt5MFJybkdZdHFIdFNPN1VKUDdZbU5aU1k1Zi9JU3loWmJ2ZWZ1SXg2dGdweWxVWTlVWW8yMHJQU2lOejI3MnJoYlptRXc4ZENkRUFBcmc1RnFvOFJBSCtmRnJDa09la2x6eEw4bnFmVDh5THNjQXNUMjlXc1FLTkx2Z0VLSTl6STN3NTJmcjZRcGk1ZHNZemZ4eHo0RmVYY1UyeUxpMk9tV3RZcFVTbEJpMUZvQ2piTGNOU0dmbWFOSGY4NE9ZZHZUdnZtWnlHK0w0eHBtcDBHOGc4VnF2aTJXcWg1MlY3OUJ4Ykc0TkcwRk5CUWN2dkZmejEvWlIxeTlpZWZ0WDZIRTdkaXFqcHVDN0ZuVWtNc3NGdzA3N04waHlIb0hJZjdIRnl4NHVjUkd0cm0wVXYwZkJMQjU4N2FBd1hTTjFRaXBUTkp3TkpmejBxTmVLK2E0MGdKTnRuTm1aNThsNURkSjdpcDdSK2VQb0REVzdpV0duSjg1ajhZaVFORTR6Umx6cUNSSW1xUXVxc20zYTUwMFlLZmdPTStjSVRqSllWaExYNTNRQ2pIenVDZTZWOTZkaEFXMk1TVGZJRE9hdzMxMUZOZU9tN1ZFSHlaUW9OOGtjWHQ4QllUaHNNUUY3ZUdhL2Jpc1REYThWbno4MUNaMXFacWUyUklNVUJOVGpyUkQ5dVpMb3dNWEF3N0c2Y1Z6OXR1OEM1bk5Od0dvRHhKcXM3N2IzQjlGVmVUZGpXRzhlME0rMlpVQWVyeE1icWtoNTh6QjRmZW4rRUUyNEk0bEZmTnlQVitKOS9HdHNvOVEzU0FjNzMwYXUxUS85RW1UekFWY0ppNWRRZzlUM0E0bEo0d1dPVW9kendBVVBPWDJ0WGtwL2hITnAxaHRHdTZOMURBNzZQcTkrNEc3c2prQWJGMCtHd0tVck9WOEVEelp0Y2ErZFZuTDZpdmJ6RElkeWxRTnZpMVQ4azFKMW1vQXhVa0RGQkVtU3hUSmp1QzZXS0J6VjZ0Ui9GdEE1RzV5NHpGR3ZUSzhPRWpwVlFJem16SHdXZHJ3SitEMXZmMHpmbEdhSXh5Wjkra3BhdDN5M1NxR0ZGUU5BMWVXVGhjSkNkSFlNWEpNaDhOclV5eWRlZy9oQS9tamJHL0tKUGx0RzhhSVZ2R1hXRFlxVFhQMHBOcHhncEh2ZGRQdXZqbm1ZdXZGL2dUa01jSWlCQTlJblRpWHJpdFYwWWllTHREZ0ZrU0svcGxyWkVxVVpjSXlvcFdlUGtMY2M5cHdwS2k3UEN5VzA3enJkcWJtV1ozK01rZFJrNEhjVG9iMjZUSFhtN3FveHBIaDB4dTV5Q3hlV0NIWUw1M2hRbW9PRk12bEFqaFdpTm1ocVYzWmVTUDlOdnhFZUdNdi9NSzRzcWdzVUFuV0w0NmF0ZjJVMWJZYWVnbFA0N2VsR0NsTXIvTUNpMGxiVlNqNk9SVjBuc1lhRTVSN0JTd1k2bUV4Yi94WmxFU1BQc2VHb1k3WnJGZHlvakFJWU0wM1kxSUFRVlNaaWpzTGF5REx6YnYxczFDbnBRcXh3RUZ1OG50dGVrYU5OU1VKbExTRW1qUmh3ZDdWd0RGNkhpWWV1VmlwaTIvZEY1M21GQUVsc0dpN1dnQTJZSXBSWnpMQ0g5UkRtRHYrbFFDN1lnTkpvR3J2dXBXSnE4R0hGSmdHNXBCV3lBMk9rSTcwem9zWlozWnU1R0dwR252OEt5ci9WVGxlclFVbHlXV01DOHFObVA2NzA1Y1kwVTMxRlgxRVlFRUdZQ29LbmgyWjRIdTRXVkFWMFNRMjdySlAvR2dRUVB5L1VlSUdLOXpvd0xhZ29vcVZNZ3I5TldwVXY3OEdhdjZEVHJ5M0VFTUNBUDZvcEkxdzYwRjkrVlhPaWN3ZEhBYkl0WUY1MlFDcGZZZ1NFV2s2TnBLVHpSSThOSVU5MUNzU2t4SjI2TWhnYmZlYlB6azN6Yk9FeThjYkl2MEkycTR4Z0pGWWYzUEY5VVBpaGRlbS9lT1pMN1ZFdVFZV05DaUJRUEMyL2dCK3QrVDEwb0ZqZm1EbWNnR3p3c25jUnRITW1MS1RhN09ic2dzWG0xY2ZBeFdLdVJBSXQ2MkpwNGg4Ym13STdwaS9EaDdQenIzMHJoS0FTdmpyS2N6R0dEZkwvbUg1a2VxbnlSK1FGdmNCUll0RXNRQnh6cXVDUWJmTnQ2anIwaDlPZUF3cFlscUtHamlVdkJGRVp1eFhFR1NSUngyUUJaUG91NEM4bnp2R0xYVnRHZ3p2K1UzaitGQnFjWDZIZGJCcmN4ZEt5bFNFWVRPSFVCVVUwOHJqTVlpek42WnFDVnhEY0tBV0ZqaUlzaGxSUWtybDRDWlpHcXkrbkFacUo3dlYyQ3YzTVdQY1FmZWhpeDZmd2piOXdCR1BDNmt6SHFWVU9CVGZrMWQwbWIrbE1MYmdsYkRlaGtOdnVCdEgyS21RVG5hcjVLR29veXRDNFFKTzQ4Z3JpcDJKNFJDZlh4UEg4MlprVm0zNnR0MEVnSy94SW10Ni8yOUYrYnJXSjlMYTg4RE5yNTJTalQ0WkJIWnRiLzJVcDBiR0p1U0Z1aXduS0JsMXY1TzJJcGJMZUFWWkZKV0ZXL0QxckZoUGNuaG5yaStpdnZsa3dpYndYMmN2WlZRR0VNc0o5aXR5d2owQUY5MmdBZGowT2ozeEVyclh1aC95cjc5aVR5N2l0dkJjWEZzdTUyRk0ydktKNzg3TlZSRlArNWxXNFFsWE81a1NFQ2Z3NnFKTTUvNzBHdUZFNnlWTmlWTVUwU2pHdEhlOUxwU3JwUi9FcDNhV1BTUTBEYVNWM2ZwL2lJS2UxRUhqclFKdzFSS3BGb2E4OE81bzVkem1BTkhQTy9YRy90SG94V1U5ZmJ5T293ZUlNRm5qWlBYc1ZtaER5NTRXbE90eFlWSU1udjR3bURVUk14NDhob3Azby9Vd2lweFIxNGtvdW5IMEhoMDJlYUFkTE5zc1BGUEZtaU5qR21aZWk3ekUyTHhpN21xZlFBMzRrVUxqckVzM0JLQ0lNNk1TMncwbWVqL0ltQ3plc2ZwcklmTU9aUkpYelU0MGgzRjA0NjJ6YmVwYk5xc2ZjMTg0cWFSSG9FYm9kRXhwK3BGaGNTWFJYSWtzQmpxTm12MUhiSllheWdBaW9lOG84d0ovRm1QUlpYcmFZSVlQejNReXY0dktzM0YzSERKSXljazFEVmhLNFRMS3cvUnZDR0Y3aTFUb1VHdnBDVXRuQktkT1VOZmlHa2hDMTNQYngyYmRabE80NGcvRlhCZzJwMW1URWR1TkEweFZWNk9jLzJKTjhzT2hwaVJVbXJGTDRjTUxPbGFCZS9Qem9xWXJtQ2lzeUgzUTBoN3Q4bzhhQmpaOVp4S1BPSHJKVzU4UmxwZHVBOFFTOGxJWUg0SnNMUDlQaFNGVXJVQys3NGRBVW5XYklvaUN1NnFHV1FGZDVhUllvaWRvWTJ6akVOSFMwdEU3WVJUaWdKSnVXQXZMZ0RtUW1jYndKd09wRlFTTTVGcGYrYUllV0dEUklUNDQ3QWZUS1BhTktuQ0tQeXBJY2xleDJLWlF0eDdFSFNVV3ErTzhxamtPM2RhN0hDTC9LSFNXVVY2ajhVY25zbFE0UG0vWlNTTXU2ZDFoTnFCVngra1BYZHJBYXlmOFN4ZEM0Q0t0Z2I0Ny8wTGZNejFnTkFDcWd4Y1ZpWHg0NHVlSWJWUzR4czNnL056QWFNaEgveDdHU3Z0Z1B1WnBYY3AwWXFsMytLeTgzY1ByMWxBU3J0YTVJaU1NRjl2NWVmMHAwQ1k3eHhFbE44UEtXOTZXOFdTUy9BRjI3RUNlMEhnT3crOWFSRTNxR244NzZWTFg4Uy9odld1eFhxU083MzFEM25sT2N1eXRISWFlV2s0NlFCT0pDNkc4eVhvN2VnZ3BFTGZNWW5VcFd4ZTVUN0tJY2R6QXBKeVRpdUc3NnJsU3BndHlFRXo2TmgxbytSbExDamlSTTJha3M0bTRGVFNYMVpaVnptTFJZTDFjT0tocjFHb01vMmFCd2dCcWhCSHJSRHVnaVl2N3R4dks1V29wKzlqdHRkRk4xd3BnNWRZK1dNWjZIUnhuRXJib1BwQ1VDQXk5QXhnZ1ZGK2dQSGV1cWhKaVE3WlZHeUx0UUVtZ0JUTktyclF5c05pYmQ1WmNwaDFRQWVmZmpxU1g4enV0WVlheG05MTZZMFV2bFFjNkxobGErTXlnWVNwNVZaOXVFUWpoTGd3SkxGQW53d0E2enJ3bXFpcnNoQWQ0dVNVK255MGlHeE9QMW5sUDJyVk5zd3dFdW1mb1Yva2gxRHQyblJxbGFOMnlDWm96aldvQ3lCS3ROdmU0NGZrYXhlcEJOQ3EyclRBRVVGWmZvUjlmdUcvK05zWlpSMng1MzNhQmdSZUJKRHo4L09sZ3FYcm9lUVZCbjlrUmZDTEhpR0VkZm50cHpkMEpHVHN6OU80eXh2VUw1ekRqTE55VGNPSnNBeWRHYjdibDd2MmVKZWlWRkdybEVvVjc5N2JrV3pTbDZyTTEzOWdUMm05YWdPa013N2oxbVZTQ1BjSmFhcVFROUVHQ2sxSy9WckRWZ3VkZHMwOE1XcnlicHRwM28rRTNtWWxjZ2w1YWIrVkJhd2Foem9IZk43U3ZpVi9mVUtXT1Q3dXBxcS9VME5JeGcrY3FLaTgxRUNicW9oMmIvNFNPcy85SDBtWmhCU0wyREI1bTJmWVRFcFJRZVk2N3puTmJKV2VsdkJYUWNrVS91dnVGZkcwaGwzamIrUGhzR3BTYUI0MTJ3NnlmbTUrS1VhQi92T1NMdTV2VXpsR1J0WGdMZzM0ODFWMlYyWi9Mam9vcVVLYVRGbE5QbXcvQUUwQklGaVVtbGdHRUtBay9ZZGdxQ3JXV2JIYW1YWGNyL09wdlFHVDNYMGt3UVVzSlZRMUdCUFdrd2sybTNOVVJ5ellQc3YwZ2g5bnZTYjBBMS9CWWJ4ZEFJT3NhMnhBaFJDQTFNK2gxWTRjZ1hDODd3Sm5qZmt6S2MxbllCTmhwSGdkV1AyOTlrUDljQjgwcW4rRkwxRElYaEl1VHlLV1FQa2kzRTNJZUl4RDlaOVZkOEdhUEFmZGhVWW14QmRJYS8wTTl4K1phTU90TlgzcUpNSjJBeDN5WU9vaWV1c0pBcmJaQ2l2djFxenRpUzNINGpUZ2xqd1ZFekxhT0FrK3Jrc1BmaDdSYjU0V1pLb0tjNXQvVDVDRjJ0TmE5WTJ3YWJFc3IrSE84UUhaOENOWGNvbHFhYTNPZ0RLN0VQWWNqN0ZJbWd6YWVHYUlmYlFuNStiQjFyTlN3WlRLTVVpR1MxZUlJSmlTcm44YXFDTjI2b2VIQlNDT0c2TWlvNGZROFlIaTV6S0RJdGovTG9TM2Q2bFVJdmZhWmZBcTY1RHQySktLNlpBMFpCMXpUTUdXV0lyNW1oZE1yak9YUUVJRjZPZ2pwb0YwSGZyNk8wUlVPM0hPMWhSSWZybGNQTG9QeTlLdTVzYWlFSHdXWElwYVB1L01yK1EzNkFpZEFyMzlWTDVjQThWSExXaWVKYzltenN6Rk8zRTVVQVJtMWVac05tclNLMlpRdUxTRFlxUXZvbHo3UkEzVExzdEZwM2ZWL2dFam0yNG9YU1diR3ZLMjBKbVhaTGNIUTF2NXJqRWUrVjc3c2FiVVNyS04xbXBFbi8xd05PUjIyOXJReDVRbVB0ZWgvamIwVkJzbjdwQ0t4bzNQeEV1TlF4bzRiQzZ4TnBCVjA0eVRNVHpLbDdkcWE3eDBWM1NXUlNqTVRqR0pYZ1cvNWliZll6Z3gwbld4M01qb1MzZ0Jyb1NSTkNvcW9kOXdRV21NTkRHV3BzalVkRGdqdkNyZ0RZcTBidmZaSjYxY3ZtK2pDaGliNk81aXVtTlEzYzlyZktZdGVDRDJxVGRpTDRwTW56Vnc1QWt1eDJFamZOQ1d6OWwyM2pTRUdBa0UydmhRK3EyK2xHRFgySmlBN1lpQWhLWEdHTWFQajJoelp0MGJMRWZ3b29XTzZBWndMWlRLa3lwUTJUamt3YTl4UVRPRGJGSlo1L3FSN2w4Y005UlY4c3BEWUhpYUN5RGhIdVZab0JKbkZoZFZLaUp0V3RuSEpiRXhYb3lDanVlN29RR2g5K2MzcjFSWm9KYVlUaFlOQTdYZ3JaRFNhSGFYVUtLbEsvMHh1N0wzR0Q3ay9vT0lyT2s3N1dOdEhGLzZOUFl5ZENURzRySGpGM2RVRXpsRjc1TnlFaDFjck1YMVRNMnNxdGpjWlpvMkIzQitGK0xURFFGUkplblNteC8wdmFoNHEweEJYSXVjc3E3d1grc1FyZW8xWUM0cWMzU3pXcnFkTkxtVHdiTEJDMGY1dGtTR3FKY29qK0pnZnFUQUJFMWhGTlNMQldYOGFQa2x2WFZ0L0dzUkJ3VHYzeDdQOFdEaHlBd1BjeDhWOTM0TnR1SDRHMkYzVkZURUtnR21MbG8xUm1yWjdxZG8wN3ZyTkpuVWhtaEtldmQ1cXBoYm84bnh3UUx1MzkzdXQrMFhJbDdpdE9jNFRVYitacEIyS2F3NlhUSjd5K1lKTzFnVmhJd2U0TFpERkFZVzlGdHc0YUhvWmQ3V1dHZWtmK2xWZFZDZGtnc3ZBemhsQWwrUUlpNmJaZWhYTkpmSno2STVCbGFLb2E4d2U1T3dCRnFxVmRVelpiL3orYi94NFluOTJGOEJLU3pJUlFjL3RIOG9lRHhVVEp1YzF1ZnBwdkZYSElqYlF6SWg5L3NpTTEwUkN5MFJJOEgydG0vMktRNUNjazI5ZUowNzdDZ0ZPQ002TndsMDZlck01UHM0NDQ2YStXWHBpQ1VTR3NROXliNVk1a1Q3QnJWQnpKc0hzSkFYd216SjJ3YWoxRnhLWHNCaFdQT0dTNGJ4T3JQUGpnM1h0djQ0Y2d0MkpyRUhYSTJzLzBYc3JmMVM3cVV3eDUwMWFncDdWcWhUUktjK0p0Q1ByMmVoK1NzY3lTdkxjeHNvZ2pwYnhaQVRwOE03RlVudTF1VzdaSVdQUldCZERUeGxRd0F3S01KVWhycUFKZkxzM29nRTlCRzRrS2gxczh4TFdHV2dVMGZJRlp4eHpNNWpQODZxaThHbFhMS0xTNVk1Kzd0M0pvVHMvZTZMVDdNZVpPL3o2QTFDN3RaOG96M0RjZGkwOU5RckQ3Nm1ZTmhLT2F0L1JETTV3Y0FtbXpxK1pFaDVFUnhYYUFqL1NaNEwyaEQ5cXVmWjZBdUVRaEExRk9FUDlFRmt1dkFFdll6Wk9oSTBoV0ZjSFhteElsU2ZsVUhPclNPV0VSbDlRcEcyYTVsZENJRkk3SVNQcEtnSjBEb3YrMldNdExJcUFsSnFYbnRSOWNmNTlGZTVOQ2N2bzFOc1R4WXFlK2NtOEZhYnBVLzNkUFN4N0tLekg0d0NqaC9SZ1pYSGY4anp2N3JCdFVtbUYvenFWRzF1SHBNV0M5by9iblRXVnpZN2ZxdjdWaEp3czNwZndBd1JpdE40R3U4c3dremhzalB0NjJvRFoxWktPTWdyVlMyblpzeWZrQ05FYzN3UzE0MHJ2TVlRalhjNkdSUlVzalRiclR3cVJDVFpETWVIcThlejlTZStiQTlIcEQ4UUFQbTJlY2RRL29CUFlHbzhkK1lqYXo2ckpsbnErV2xFMkJadHIzb3p4TGVnWVJqOXFLWWFkMmQwNW1nZGpvbitDVThmVzVWK3hHbGl6SlIvdE9HQ1ZHSnVFVjIxRlNwTEgrK2pvMjRWbE1oWG9nTnVoM3k0Z2dsYjhhUG9IWnFsWlk1ZDdTTEt3cm1HZG9PemVid3FjeFBxVzlQbG9pTG5zSVp2cjBtdGhwM0xOelQwc2Joa1hzNExIWTJ0RmpjcnJ3Q2YvR3NDVG44UkN1ZTFKSkFGR3FDUUJvRDJOUkg2RW1QOUlBMzRUMzdXU1RXMXV1dWVoMzF4NE9EaTMvSmRJM1dXa3NaQjFCRE1ZWEx3M3VhVkx5WU12T3hBc0FMMXk2cTJaVndBeVZnZHI3bEdvWUNld0g2Nkg3RXVDaWp2OXRwVXA1UzUwV0lCL3N5MGF4NGoxNUJVZ2ZBV3RnanhLYWhvYXZ4MDRjOG9sSXhTSmxUczBqVzk4c0pvT3o0UDRMQklPd3VZUlhtSzdhejlHYjhkZkJxcWhJdytTNnhBMWtkblkveWsvRkxxZ0prUVNOZWpsTXpxUlg3TTVBNm1oMFpXK25NaVNHcnBOZ3E0cU5UUUVPNkpBeElKTEsyemRmd3dOdEQ0Wm93YktFZ3VDM1lQQ05WQmJCMEhBQmxzYUF0VTNnaWI2MWVoOG1zbDBVU2ppb0ZkMFJCVm9wWGEybXRLbkJXSVRJdWJtNjdOSEVCZE4xa3Q3Qno3aWpBUDBkcmJEa21XQ3p5bExkSU9rV2pNa0U1RTBBYUJtTDJ6MVFOcVpXR0Y3UUsrbmFCQ1IzM3VXY2VxcUJaZHE2QmxNZ0hsU2ZoczduVXBBNzRlV3o0L1MwTjJNdzhKT2NrK2loSzE1UjJGTjBCTWZMY24vZVhCNUZBM2dLSlg2QlBqMTFSdmNvY3NSQ0JQR0hpOGJPcCt0ZlBacklOUTdGd1F4VG1DVmt3TXExYU5CMkxBNTRDT0R4dWl5eVZDNzNKTXhTSElQazYxVUlORnhmZ2Q2aXYwcUlxZmpPU05pWXk5UVJITVNFSlJaNHV0MG1ucExDSGhTU1Q0YVRZSUdYdzU2TktkTk5lYkMvcDFZekoycGtKcjhad2REYkx6Q2VpbUh2bm9vaEtIQXlCUkpTUm10T2w3QzZQeHh0K3ZGa3htdk5Qd1pzVWlFZE5sV0l1Q1oxVlBZWVc0QjY3ZHR0dzdIdm1rdDNzTEpTbHUrVEZjeHI4b1crNVRmQ1NkUmNmRk5hU1p6UWNaL0p2K0k4NFFkaWpnUTRSRGlwZEcvbDgybW5jUXA0MnBkRG9uMURCVWFFeGwrVjc0MzZ3dFo4dld3QURObGEraVYzclE2N0pQSElBclJrTzZMeDA0OFFtQXp1SkFRa2tYeGxVZDdxaHB2Q01abk84QVJvdGFhS2s4WFRvSVFkK0FKbW9VNk9XU0VXaFBKSzVKWG92TmZqSTdzQTZtSXMwWVY2elhBTFJCT0dNeE9lNWFMQ1BkTU5uM2ZjTzZHNVFzNWdZNFVob0xRU0tFdG9pVGZ6OWQ2YUdoQ0JEK3hIN0ExcVA3ckd2Nm41L0JCRDI2RnQybVFqeUdFSWlLWXRuU1ZtQWF3eUV6dVUrb0doSVRxeGsvZUJicW5udC9TZGQydmZUNmJZVWJreStpQXRXeWVrQ1lZaDNaUEZFb2ptakFlczV6Zzk5QlFxVVRzVXZNY3NiSmZMeFdXdDYzZEFZdnRoUXB1L1ptY2VVcWJkUFl3Zzc5cGZMOW1sb0NmbFhlZkM4L3NiNzhwQVZ0aGxBbWtlMG4vUWxQUFYyTTBuVUIvMVVEMlpoUWRteE93elBCTWRkWUcyWFNXdUlZZ2JXazFxWVM0OHc5dnU0ejRiaXc1cXFtc1JWbWJQSmczZjlaNUp0bTFFYnM1QjJoSndDT0o0aEFBTG5teEVuZzJFRkV3b2dKMzBzakpCY1k0R1FHR2wzL3c4UEJGNlpsaElZSnJudWtpUHluTmg2cEFlRjBTVzEvSFFDcFJUYmxEMUdIRDN0Rld6VDB6eThoQWs3dktPZnhQU0FOVk5tcFNsMWh4K1dzZ0pRdGgveU5jTHNOUnlxcGViRkQyckk3M2tWdVdBeS9TTk41WEI4U3BkYWZDN2FEZmpUbHJ0NDhHZy9MTStJTDlDSUNnN2dTbVlLQ1d3eDVWd3YyS2lyR09LanhtTkRncHBPb1J2QURyQXQ2S1hEVkFHSHFueHdjU2hhNUZuTXlTVGtGV2psK0Zma1VpdloxOVZGejNVeXdDaVM0dG1PbFBGa1p5aVI0SC92SGJjdjYyV1NaM1lXNFd6b25iZkthaEc1UUpUc2ZHbW9JMXN6R2UyMkJQdEUxMGpFSUwzYk1MbUpoT0RTYzF6WmN2Z3RHRjdpT2phQXVENWhtU0ZyNlR6RWJWTVdNbEliTFA5dUJnVlNjSjJTS2R0MzRrS3lvZlBScXFldjM5eHZBZlFaY2h3VXpXcXVRcExjUGNDUUVFVHpJOVpob1lZNDBBekxWNERuTkdxNklEOU91SzhiZXJIZTRtQko5YUJ6alBpa3NzdTVsSzV3MnU5V1czUVk2YUdGdEt5eVdBUExEa1lvdnlUVHppaVFCbldoOG5GWVlRcFcvUFNQeEo0anpQNVNOS3JYNUFLRDA0Smt1akt4RDFxb3lYM0p1aEhDak5YR3hZR2s4S2Y4M2V5c2p1d0t5V1BWOE05bktUMWE5cktaVkJHRUJoeTF2aVhTL2ZBc1Y5MGpPWm9OZWdRSndhS1dqcUhRaFRwVmE5bWdHaXl1UGEvZHpKb0pnMUhsRmRId0wwNlk0SjBhVnBhY1NtSFJzck5ZQnN4eGM3R3VOTER3UzNDNjRKMnk4eW1YWVhscUdJN2g4Y2JDbHNEZ3EwWTBsOHJsNENITWlyLzE1MWNML00vc0IrV3MrSVllNEJoUmt3aThTMVdYOThjL2tlMWpBaFM0N2FoaVI2UGttSWFYa0Z0bUdjVVZUa0VEc1BoRGQ1bnhGWkFXK0hqL25xQ3VrODIxS3pLWkVWUTVZNTFieENUV25DU0JIdm9LWTVyZVpReFNBYlk4SkI0Y2hXeGhPWlJTeGF5TTllaWpDYVppc2szNWRTeUdweXVod2dLZzB0ZmJzNGdJNU5sUDFSaEVuMWdpOFhTTERXd1JES3N1VzRsMk5HSExtalRoQjJvSisyQTk2M2VCa1pHN0x6WTF5anRVK0FrQ0xiRDczc3hLTkRXT2x0cXZiT25PZDZYYmlnUkxjb1lnVHlGbktxZ2dUbVlHRWNqUnMzN1NERi95VXRFQi9VbWttOVZPR1pRYlZ3dXUydkJJL3RGZjlpUWswYUlvTTBpdkpBemxTVzdtaTFYQUtZTXJkTVdrRENKRVVkNzYzK1hzZzYxN0RRUDNORjZCMTc1OHM2RytLMlk5QU0xTVlsU1JBa3VVUE9uK3crK2N4dE5yV2w2ZXNPSnpPbVZvYklhc2RJVWxhNUxvYmdlQXg1V1l4YU5reFY1LzZ5cjRYb1FkVHdUVXNNcTVOSElFdDVsZEI2K2wreDc5T25iTGtTT05SSjBPRFdDSDZpZ2VuUFNoM1hPSVNXa1k3YzlsZ28wWm4zRGdIVnFSaERVdytDTzF1eG1FMmVkL202ME1WakZoODAvMWhZTUJ1YXp4OHh3WEk5NFlNcFptaW5GdTNpZWpNT1BMZExzbUZEUHJXci92UTFHY21qdFk1QVovTkc1UFU4S2RmS1prek9Ba3JkMHNMeGJZYXRPTUNQbGkwUm9iZHI0dUNreGM4RVlRWjRROUtyK05yWXEwU3J4a0NNemxidU5OS1dZcFVoSGdWbisxejMwNEw3R0NPaG1aVlhSV1lmOER1VHNKQXc5NEJhNU41T1JlYnNkYlUyZHc5djhPbVdNN2tROGhISFdPd3A0U3NpRDZsV2F2QTlwb2ZLeVZMbTU1ZGxQU2FleFppMS9sMTVnUmJxWWFIUVV4bjlDdmU2VkhQQmpQOEtWYnVmTFIrRm1TdGlkM1lLL1g3RXJ1eGU5N3VNclA2VlV6SE5BbGRaQ2NjN2F5ckNPT0pnZ0N5dzBjTkdkWCtGRVpuZ1hVbFhqbTNJNEpzUEl3ZVZYNzhUZHF4a3d5YXA5RVJlaTRyejI0UFBxTTVsbXVoNWlRYTNCQ2Q0Q0JGY042ME0zMG01OFQvcURHVFJNdHJReVdrd0toME1QMDNNMDdnbjRHaEQ4cGZWUjdLNEdha0xIdUw3SEllM1ZVMHFpSStMTEpHdGlqd0RKWkFTRm04Uk9jWnJSdU9uenlpZklleFdNMVlmeEowcHdKSzJVZTdJRk42cnR6VmltR2Nya2cybmw4RDJPK1hzemt3MHI2bFh5aXVUNzBUZjRiU2YwZmpjQS9OMmhZdW9ITnZLbGFOWGd4VGd3VWVSMkxzdmljajFjZEJLZ0dWUityR0FWd1R6c25oU0VaMEFmekpLMG5odUIyTGhRY0ZtZnc2SExST0ZXWGdkZHBpS0hLQ1RUVmE1RjUwcytEL1hTUDdPL05UQks3YUVFaTFzMnVMSXJDRE85RzhFUjdybDN0dHZ1VGE4djVtNFBIcVJ4ek5hVlIvbDZkYlZucGhvald6c1IvWnlTK2dTZFpxK0VuNmg3NkFmUFlVczlwM2VxVk13L3ZnZ2hPN3ZqQ0FXZ25HUVFla0RIdVFPRk5DTHhuRDlJUmNPTVdudWxNUGg4eDF0Vm4wQzlVekVUTEpkR3poalhGYjZUb0toS2lzd3BrNEdPaWcvU3FpS3JDLzJ2Q2VkNUJtZFVQdDRzU1V3cWprdUY5VndCcVY0T1kyK1ptM2lFSThETE1pTmpaTFdvdUVMS0NMQlBabkxLY2xNVm9hSy95NXVuN2V6cWIzNkVrbzJ4d24wQTJNRU5DODF0cWJpNHBhdTRidU9nUzh3VnN6dU9zaUVxZnJJK3NhRXFoYlYyZmxrajhEU21ubXNNNkc4a1JibjBya3JUY1FPUVpHRUVpZWFHaXpMaDZySGdBSEV2SWJjdnNpcjVYVEtTQmdHc2ltNkY1Y2pkZUZKeitiYXJEVDNMZWFPV3hrc0VIRjBqTDAyNnE4WUlHbzBoSWdDNEwyb3lRY1MrWC9hL1B2dm5Nd3Y2SkpxWGJDZjNKMmc0UHFQbkduWVpJcVNPV1Vkcis0N29qS1h1UmNHYjZTZWFkRk9Wd3R1YnJJNWsxNHhpMkJpaVlKTVhWZ2E5cHNTcHNLTXRPZURyUUJnQWVHVUo5cTJ2dDVwelFYRWJBUUtBWTRkYlQ5M2pZRFUrb3gxTWFPL2luQWc1UFBWUzAxa0JJSXl5Nnh6UjgvOWZPc1FCbUp5NGt0QTNpRXdzV0Z6aHh4cnRLK2RmVXhkYnptWURPL25PTy96Ym5lREJBV1VYY0ZQNnlIRWhaK0pjYkFpTVR1eDNsd29za29FRzVIWGo4dTRGM1BIZXZOSlI4Q282QVJzSWczL1NhdFJ5ZXJ4eGZkR2ZRU0ZpZHJab1h1b1I3UDBOcy8vSTdvdUkyc0RJeFdqSDlqSlI4c2FPcVRDQ2p0RHg3VHdVbjIwTHVyNW9Ya2NaOEdhZk9FU2ZXdVJVeFZmaW5RVFRyTis0RXk2VnlLOHZtTTB1MjJSMnFFVmJ6bkM4aS9KUmcraWlBak9QVUpxWGtJWmE5MVU2aDN5WmhCMVFZalN4a3VMbnJtdDB3OXVlZTQ4SXBlZ0J4M2dnT0VodE0rNVJsMUhvdUNad2J4eHoxeEMxamZJREljcm51RUh0VklnbmJJN2tCazlXUzdNZmFacnNsTXB5Lzk4TkN2VENEWVRXYkNyUWFrOXVxSEpXc29lMVdJaldob3d0dStCT29pL0w2NFR4MGlITEtaL0RDeGRtRTRFcGlUYm0wYVlIT2pmZHh0RGI1KzltVXRKTjIxRVhwZFE1M3lWbE9hd0w5SThVT2d4N2RvdndHc1R5UWdCOXRTMFJZUXoyblQ2Y3RlZ2hmSmZlWko4cy9QdlJXaHJhaExxcUtWWG44czdHY3FaZXVwUjV2cjl6YkxTVEJUTHIxNlFIK0ppa0VtZC9YZS9Qalg3bSt0ZUNGUkFzOEgwRDMxOWU3ZlpGZDdud1hQbm1XK2YxN3ZkajdRMlhFZ2RnWGxyVXZLWjRWZFZZM3Bqc0pQU01zanNMajhHTjcrVWlITUFFZm16VXN5cjkrZG52RCs5a09YTU5pazdwMDJzT3FIQkpXdktQdkhTRkY3Z2NFYjlNUEFnempjbE9WKytjUTUrTVhuVnpyUElSTC8xaHFxWkVCQU01bk1Wc1kvYkFicElMUm5PWWkvZytoY2lnNk1qaDdKMFJUSm5xSVhUVTJMRFVsWWlJaXJVOXFseDFsMnJhaDlHNUhGVkZSWkZwdjM0M0hhemZuRDRrUk16ZHl0UDdEOGJOZXNoZlJjUG1ZWUVpMnBKbGtWVkhOd0ErdUI3VlNQZUFndWs5cUVhK0Qxc2xQeE01WStiNURiYkhEU0p0UjN6REZtV0ZIbzg5aVdZT0U5YVdaM0pWQ2lqc0NTN3FhN3BGKzBJZTZpazRPdXZWSjJyU0NqL1FRYzRxSEh5d1BvbEh5a2JkYTltVUdVRUxPRGJHc2llaXQ1SWFNR0NNN2NGM2lCMnNIS3V6Skx2Y29tNzJFeENjZUJTR0E0U1hXNDl5N1F3K1QxMVhBeWZWWncrUHNOTG5KcTJocGpML2dONU1wWGtRRWdIVEJqZzg3VTZsKzQ2ZmZPM01rYVlrTHF1R09nVTVIVHJlYlBxNU9IOVlTM2trNFlhczIzMjBSTzNtd2FkQk5adGp2YXFjVVZrUEk5L0VBbFJzUGtFWXdNM1JNR1d0dG1DWHU0RXpBRUw2amlDaVJpM0Qzbkoyc0hSVDM4WXljK2pROWRESUJQT29iUE5tU1BiNWNMRjZNR2hTTjRrWWlXdlM0cGE2blBGajY3ckZTcGdqYWg3SkN1c1R1TW56TWN3UzJCbHdzaE95WEg2em9yK1ZFZFRpcVdIaGNGVUZMbnFyV2RKc2Q5Y1pBUmtMZTQ4bmxtRHNyTFVVTGVsY3N3bXlvcmM2QXdNZFpxV1Z3Y1gyMnorUHo3aWNzbVRxcFB0N1J6ZmpmTytQaUdHOHBGK1pvR3RUWC9LMEVVQnk3L0VzYnhhcXMrQ25xbWs5TC9tZlNreHRBekdHL24rWThjQ0V2R0RBM0pqcEpSQnJhZFRKb0s0TVN4TFJyRzlwR2tDUTRmeVpxNDg1U1ozMmNWeGRUZ01JcG1XeXBUR1ozTjg1cnJQUlJYMU9RNllmd0w0K3dOZVZWR0hXZS9QUVdGYW5FbVJhbVdmZ0MzcmlRTVhOOCtWR01ZL0dvT3Z5MXUyZkJ4eElEMEhUTjROdkVLL0pSR0FwY1pXSVRJaWtHanRna0dYS2UxS1RHekVZUEFlT1NRdlh3YWp1cWZTMDRFN2dmYlBnQldDMllMcVZiSjNjTXNueUxLU3d6ZFJmOXc5UkFZN3UyM2tNdE1Vb0FmUEhwdVJNQ2NWSzE0bHc4SlplUWhsTlRiRExTQVNIR2dhRmljR0tWQ3o1YjlHZWlHSS8wOVBVOFRNSTFKUVR1RVVweG1rK3ZwZ3M1TWJRd2FBOTFnMm9ySVFPQWhXTDhGZVlYOTArQ2MyYTlvSzk0NSs2a29na0V2T1JubHE3Q2h6eTg0RnJxRWNwZU1HZXJidXExQ3ZlREJTRXlsLzE4U2pRNmdGZDJRUjJjaEFNeDJLOG1HUmdkbHJjUjMzejZXQWg5cnBjQnZCN1RiMUpPS3NvWXlBZGhpMzR6SVp3Z0tMVkRHZkNVZFpUYW93T3gzb3R2Q2w0Zkc2TkMwcHJydlc5RTlkVktld0EyRnBDZUVBeHY2S1RGTXorc0NIRndhK05UWjVyZmJpRjRSemE5NVZSTEpmaFIrOXVlU1R6aWVFa2hwTjE5RDBJdWpGZ0ljTzRjQUY2YjE4OFlrY1pJRzlhbzI0MlA0aDR5QUZ2eXpqK09Nd1ZBYlJpM2o5ZkJrUGkxaHdXdWVWYmJicU02QTdxUVJUYXdBc0RXTDdPWGVYTE1WZGx2YmF6VUMvS0F4UlVDOUg2L28yOGk3TTlERFJYR0dhQjBpaCtKS3JncTdlYUpFb2ZmYktyRVNZa2t2SEMwV3VIbW95bUdWUU9OWU9PbUVOK1h4bU5WMnlVVUtoRE9XU3d6WlNmdzFmaXRZYlJDRlBnLzR4QjFxQStJdFdZNUdrcnljd2Y3REMydTRHTlNsaDBkODdGV0RqSnpsdVJXSytlVFFzOEQvSzFBOUFBRkpMU3JhQUQrWmRtQzRjMHhBd2Rkb2Q0dXlPc29KL3E1RzFoUnBiSU4va0tzY2ZOeHpkOHhTY0FZSzZyQlQzV3ZHS1RaOWovTjdMRWNGQnZqOGpoM29aMzlkWENVYks1WVRLUVFmY29Pd2wybDJTR3ErK1BaK0FlUWlRbU5NZEExTkFHWjBYUVJxbmNydkQ2K29HbWY4MTMyajJ2YVlOVHpWMnV1aUxHaS9Yb3B6NWZnMFFrL0JxYnNjaDd0WS94bmErS3RxMHo4bnd5MmZBaTk1ZXhWMGFFaGZveXB1WTFQM1dUNGxjNklKSGZLZXFIODdwRW9hRjJIYVlkTWJmZC9KWWVMZk1CRW1zRytxQTM5bUtweWI4Z1dWOTYwL045bmdtM0JBY1k0aDRxNFM4TmlkYkREUkZGK2s0Y0VEWjRKZ0E5WTd6OE16b3Q0TlZpRUhtMTN6eU81c2loQ21veC9oeTJnQVhOd2xPemxJeDBVS2ZOeTlDbFpRY2kzSWVvN3N6U3VyTUJ1eWRXMnE1UGxleFQxSWFLV3YvUkNDQlh1bFlGK1FpUTQyT1lzZk5rbmNKOEM3WDFuYjdZOWNFZ0FaaDZFSzVXRVVGaDhBZ3FXNDNQcHJSUkNxeXlLK0VuVEVBYlFKbWkzZVVVeW9wbHpBclU4MVhnT3J6UkRYY3A4L0hZYnc4MjZJNGp0VU1uNk9GcUVFM3JLRmREd0JyTWkrVHV2MUVIRFE5SHFXZ3BBTUlhbmNvV1hCV2N5ZXlNSE9qYkFEUnJjcDNFdS9hbHJLa0FCSGNyVzl2RUNzanVxcmFXZWYxd0k0WllIV0pmUVJpWHE5VWdiZk54b1grRGlaay9CeHNEUm4vUTJ6K3hyUXdwa3YzbXJBUC8zNUxSSWFXUTZpMUk5SlNDclUvUGQ3Q25tMmIvaXhqa2ZTWFl6bnZOME0yY3ptRitmZHViZE5sTXgwVENuemNYOGxxUVFoLzZZVVJ4ZjJrOTY4dTB0L1ZBM3J4MGFXbGIvdVpsZmJpN3Y5eFV0cE5QMnVReTBpdk83dkcwTDF4RldsWW9MUEFWSDRtcFFUTWd1anRnV3RJcFlpNG5lR0ozM3dSZXI0T2lGUDcxVTF0bVdlNy9yMGRuU0p2aitkU0dONERrK3JMa1pVcHIyS2U3ekdhcXNmLzJRPT08L0JEQj4KICAgIDwvQklSPgo8L0JJUj4K - -RkFDADAzMAAAAKWUAAEAAAAAAKWDB+QBBwolFgKKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgC+APwAAAAAAAAApVAAAAAMalAgIA0KhwoAAAAUZnR5cGpwMiAAAAAAanAyIAAAAC1qcDJoAAAAFmloZHIAAAD8AAAAvgADBwcAAAAAAA9jb2xyAQAAAAAAEAAApQNqcDJj/0//UQAvAAAAAAC+AAAA/AAAAAAAAAAAAAAAvgAAAPwAAAAAAAAAAAADBwEBBwEBBwEB/1IADAAAAAEBBQQEAAH/XAATQEBISFBISFBISFBISFBISFD/ZAAlAAFDcmVhdGVkIGJ5IE9wZW5KUEVHIHZlcnNpb24gMi4zLjH/kAAKAAAAAKR8AAH/k9+BmCA4IYU8gN5TphT416Scic6OH2BGPjtmtSjtYf883G/5drL7dduwYPv3j9pLDQ5r0TvPJ8PnRB27hwzg7/yOOzkiUSXpOfPt6ilXzd7nRUUkS77747w2MvPH1EgjmFJ7J7rAnQnjA2qe+iLDyZ3NxHD0DARtelyGRWlndOuXOF/PwMo+0uj8DIAtrQFuyiSZSTCNRWLuiQI1R1FYkHpW8x+MV94eDL29J81i8Ur8W39FRrq85RWE2A3NvR0807NgyGnYEaesb4VKsRS52OcrL7/bXXqJMpcbeBVigt5qqWGeGO988plmOpIV8X0AY3XzunfS9kdy1wMee0p1A/N5L1fncdCKLatpgU4Ii0GhXg1xp+jh86GZQU6aP8HznofUPQPnQBlaUunu7BF9sRYIJIWiywAUxCZbGW2EuXUj6q+Zf0LjFmRTBXMo5Vbb1zzPU6xO41+moFxrxzV8DHgBcz8Aj43v5wS/BAw6U+8WNGda+7Fkmkk4Gne3DGrN7swPwfOeh9Q9A+c8Sp/t9joxsz2XQ6xI5dTvLKAAB9+OhB0a9G7sjLq/Q6cc2k0r4WU9YvDMhJjX1P4hT8Il3SSwChPICf8/ID7uAKFt8UYiSO6rNy4tZu3qm26Er38tqBcnYahzx9tLx9tMx+FPAFVpKWQhg42WYFFufB52wAu84ucrlsfhJKCgW5H9QfYHFRWekR3FGjv73uPg/20NpoFYJnQaMhwNKucIvHdCGytdIqsKzmiB0xf40y4tn/MecRrCxVD8WiUVVVYOb0doQ6ddjjNaxC8gSros4wDW9jWP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 - - - -#DRAFTFACE -FACEDRAFTVALUE=RkFDADAzMAAAAKWUAAEAAAAAAKWDB+QBBwolFgKKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgC+APwAAAAAAAAApVAAAAAMalAgIA0KhwoAAAAUZnR5cGpwMiAAAAAAanAyIAAAAC1qcDJoAAAAFmloZHIAAAD8AAAAvgADBwcAAAAAAA9jb2xyAQAAAAAAEAAApQNqcDJj/0//UQAvAAAAAAC+AAAA/AAAAAAAAAAAAAAAvgAAAPwAAAAAAAAAAAADBwEBBwEBBwEB/1IADAAAAAEBBQQEAAH/XAATQEBISFBISFBISFBISFBISFD/ZAAlAAFDcmVhdGVkIGJ5IE9wZW5KUEVHIHZlcnNpb24gMi4zLjH/kAAKAAAAAKR8AAH/k9+BmCA4IYU8gN5TphT416Scic6OH2BGPjtmtSjtYf883G/5drL7dduwYPv3j9pLDQ5r0TvPJ8PnRB27hwzg7/yOOzkiUSXpOfPt6ilXzd7nRUUkS77747w2MvPH1EgjmFJ7J7rAnQnjA2qe+iLDyZ3NxHD0DARtelyGRWlndOuXOF/PwMo+0uj8DIAtrQFuyiSZSTCNRWLuiQI1R1FYkHpW8x+MV94eDL29J81i8Ur8W39FRrq85RWE2A3NvR0807NgyGnYEaesb4VKsRS52OcrL7/bXXqJMpcbeBVigt5qqWGeGO988plmOpIV8X0AY3XzunfS9kdy1wMee0p1A/N5L1fncdCKLatpgU4Ii0GhXg1xp+jh86GZQU6aP8HznofUPQPnQBlaUunu7BF9sRYIJIWiywAUxCZbGW2EuXUj6q+Zf0LjFmRTBXMo5Vbb1zzPU6xO41+moFxrxzV8DHgBcz8Aj43v5wS/BAw6U+8WNGda+7Fkmkk4Gne3DGrN7swPwfOeh9Q9A+c8Sp/t9joxsz2XQ6xI5dTvLKAAB9+OhB0a9G7sjLq/Q6cc2k0r4WU9YvDMhJjX1P4hT8Il3SSwChPICf8/ID7uAKFt8UYiSO6rNy4tZu3qm26Er38tqBcnYahzx9tLx9tMx+FPAFVpKWQhg42WYFFufB52wAu84ucrlsfhJKCgW5H9QfYHFRWekR3FGjv73uPg/20NpoFYJnQaMhwNKucIvHdCGytdIqsKzmiB0xf40y4tn/MecRrCxVD8WiUVVVYOb0doQ6ddjjNaxC8gSros4wDW9jWPaDKwbdB9nrCipqBD+XFArnxTOa1KZPMjSn94u6QEZ6Y53NH4Q2wqbs6oMi13Ko+E5PhNEbk5U40WrjPKlhTtcLBn4NJi2yXiGo86N22LmzWWc/uWQn5pDaAeimwaEs8MZyAKB3hNQgdqKfT5Qiat7EsBN4gcYSrFj/L8k7LAZO6ovhIOWwgBGFBU/dfUUSGwoWQUrxMmg5egBSVWlyrJNaiJPiApqlcpKwGKEjZuTd2wS5MHiTqCuLM2PSH4l69DqWpaiHDvDDDQPOPcFIJem+D5xiisfD76EYrCwW0frs63DrAOpsp9lIBLityC+jPi/cBSZq1MFFT4RRvT8M5ATwclhacI2RGh9zvXATfbpmh3IsW1Bu1IsAS+whkE+igotKAejWYViphadWw/VVxlTOO/iPedz3hhJ9lO1wwuXagh3EU1gxjjHEmg/epgCumOZ+USeGqgw3oKqvo978Hz16D57LA+ezCAesqSjgpf2GzmdzbV9ugM+IbMMNWHFbbxVTFEcWmMJc9zxhxB86ZX/0cLTi3GChBi630iRwXHuziL3KfCoVPcvybjEdWwqV1KXAaFYoyoxYyMunSUZXlEDkgSdnP7NDHzg8Ixpa/+0kzMqaidN5DVElZH7VyJ/29v0LuU4H6L2ipaoq7wsg9O3nuZZY9stUjFUikhCSAY8WNpyZgc+NabR/dLQEFmf2byAp++93dRN9aNJs03YYecDmZ+Uh+g+r78fT9z15cqqqEFswk7kJg4RMldW7kereVFwckSimCI8EExxyJo9ydRSYwiQeQKbSb5quafI6KfH51Pgay4Koj078W49aMUgp1gegnmwrUox/K6Zwf0wq1d+J0XxRFVpspB6P8da5EruQ/B89dg+exwPns4gSnIFP55CaPuCHjJNplgkA1/no8Xje2aPmCahM6ll5h6nTWiXoaNnbBASfxwaotVbYgmsdsn1mx78EQPUdI69sLLBiRs8F8tkQmzqWrCrrEWSnC06RxbBWSVuUWVM3g1lK8VLDwnyUQO9BT9vnKIJnXH9R5cA7Ac/xHgpMK6oJbXXhBCcayiiiIBBUvtuBEtntm8tSVoDm0yb/P+jtWqeEmEp3VTrw/gHzhML9LyWwIcQx4t2KpUbspxf5yX1mlXdGad+3CBkCULe89+xKZGzWP3YhsDDBa/BMRmdPVUYO6t07/zHi6Z0DcfsojIpn4GT3p3ijhuMCEkMKSRBdGBbbiTibXrQ0v9vY276f606D/IGPek38RZH5Jz50wYoxvRSIe4lHeom8/DdOPt2/h9u5rcgJAeZaldzVeF2aSrRsgAKW8IungBNxtWaV+L5XpNEFa8YBj4cQhLmtk1OW8J8TJbKqgYn3A6cZKnq0pu2Z8ftPrcXpwBpxz3YddPcc9qtReFNJlnigOHFTmgFjeLcejoj91hie3j7FqLRHn+tXOmm4COiLVaBhSU3AnbhmqJQ4vvpeMz2or3jxx5nlXKrcTTzsM9SVsJ3LMDmsAoh5tpFcUsSF+NhIgTc0qNd/BQv7G1xiCfa472IylnamaMQvV2IOic+MroUXrmjTkvxoD6HuF1F+0ufrkuAGIN8HrP97huLRlSLQxWN5C4HUwosDDHXfnHpIAfMVvt5O6mlt2E1OiZ7UGLtL7CKhI9Ee6TIJvDTggewDnaUiGReauGxVY/Vbh5acJMIluqEAeSs4osNz4SLfgi6O0hCOxyEzKLg8y5y76CcCKt6tdA/2YMkTP5qu+x2qnaR6XmB4yPNKlCMyIWKmgkjAigYNkHdMK/CQa5tdPgKbe7wm2dNsFJ+fWiuys5YduIZ7F0wNmcEZ+VEaCB0NOwrjDvi7xF2wETMXg5J0qf9RCwruFG7tM+bYkNLlSXzD3QVt2c94PNkkM7aGlq0GSbm1ecR0BBW0gb0bgAv1bfSu9Yo5VPPWkpKgCpGzKRFR6cD3SkWS/N1He8nqUFvlw9A5VbnldoP3cMz/G14jamuyYV93fdAZE180TQnQIqmQE21/wKQU3KjEOFlxa7EU3ah0VCzo35T1CWfl+10jChTbyM06cwcE/dA0HhkSQWbIz3X3LxDaLuhqfRVgHXL+N7a4dMpH1tdnOqn/ZIoMr0ZAOkjx5K0lg0Y/L2oO+0yz5Ox190FTAt5GxJN3xDP0IWMyBWup+Jpcqrmj9/jI9vzh9Obb9dbKwmAryyIEeqXub0qMWKa3Dn4lZX4g+2agzIN5SnAGxDGoUylHwgXwl+t4TZw2OryucFLWsUBLnPCOC1U/zsAChW16WMabuVIYnp+vinhqb8fqNHLiyCxB5HkTOICOox8fEG+bOijB9X2cRrmCh/ebdOZZP0QT92xa+QGtdDLHpXDbKqbtfoXLkyj8hlFJQgXyolJKkeFupDlZ2rgAg9rATOcRhe1ScLHmnDcTo0uoiUmpoizu2by81Y27jojhBsQMP+rwp0gr3Tf644noOSyXyu1XEkUm98BqDf6HiJPMqvhwBvYtq69cKGIQuFcT/R3wqhp+jMWIiMFZSlS8jmaIg9agTjJTzSeOI2TY+ZupO7vCVZoKqtkcCqNQX7AgdE9GFhbwh9vU65b2JOSZD9++JNzYTbiYY8YKPv91uramKjNzgYWMmqLRyUCvL/DXejKsxt9AprTNAW0bskk5T2XMzujtWr+Z0ixTgne/0Gw4tKr6SbX+RBkkUfjjQftpYWj4Q/3+hnsF6q07JPPTlPx6/gMLYed0PweHiDTySAZ1CN8zoMuUR53k6uKsBXyMYqD34ZbcBHan3essq+6IiB87FMx3OQ5GsCtZOn4Jhpn0OtyJ27YTZ2Ad+OpitZGcCfCee7Ys5+e4YqnhNDizen3C9E1Nbu4PHvkeWn3jaYl4INQjA2geo3wjPHrwUXhJjSOqBSE4CGUVbcUijkIojsvdtuBTJAbzOTy4b54zpHfO3DhaWLA5axB/GQg6BTyqZCxTpMkQ6psNcnz+EZNdVnfwuPjY9GPjn9BBy3DXbXOPpSmyvPGrUAsN8/WfyM8QXLK4J4otMfZKHjQi7wK7bDYaOK7nWc5izYvDrdNwy0l2Xw6fVYYselzjajBcKZuSP4492ZlbRgVFjnl2I+te1y8u+yVE7Ez6ypTkvmfbAvm5l1nu4xwPk6XQPk6bwHydNgo9Ngz5xnizX2uaK/zTcRalrWTWFFqAsW8PzwXfzwgHzRtJRkD9knK/UFtU5nzdYI6PyxVa1ak8tAQN5E+5xICAFWbwSZyQLBw/vFMSHHqHclWB5LbMg1pc/nOAl53JzATCk3VThIUb9PnZx28jwKcw5+Kv3rqDM+Zdd65iba9DjwEm3I1IcolMzwgaarWKVqn3DBqKruyvQDaXX3qcCz6x4LdG7PijDfAJIDIpoNTl03YjMp3jX8emcImu1CRVxGAhEzwLnp6k9zuVRhBGb6i9n997a3YKsmPWfQCWnFecUVsb7IwblVUS3449kdqCEUFiyR7U//QhLdWGBe0cQETpp5/wBkEECAfZrpXqkLyGs6UrcianaxIgGYjPps66XDZVVaoN1Voav8j1tC1a+O4S2ZmcFmRBaREOSY0AVd3pEsR+A1Vpf8g7kU/xozYqqEu/8VVdrXhMyKisl6xeO+vYTUDx0HAJq0ZEZJ+7JMQyJUxUcHXQ7DWvktriOwCTEP+r+9WDyEHHVKLcnJfcqJ+tUOPifMvHsuzW3s1ysLWod2E2oTQFIXndrVxbO1gUZihaUfwDdZxR5yCMJ04+dSImVjFey7tmGbJ/76fIgzzOn/GV7x8ZPchKHZNJ+KMzido+2r3UgtnTqdNOoPVvufOfB4TVezZ7Hp+P3ixoLocAOt/rdrcvM8QC1e103xFO7WBfeJzmh/WVjnQrkHpYNZb7PTnI3kYAIP2SIWxXk3ZJeav9o1yxCBzUGbrpWTBEm8R2ikjrylbJx+xqrYRFxIvB0cOIS6TziyD1cajPdWSAhOahdtX64z9dHvyCRt0/8QEntbFv2lpPWy78yVQ7zNOzszTxporTehe4itc8ZkIVY83kC3Oj07h0T97qS4rC4pz4TPwN50oVeUL993c3MA1nN27QDUKbxNdwvQHGRBS1hI1W2VoBkg33hztn7+ob2PnRpkHl2tNH+PkJH8m2TMyADWNX+YTqM9t4xewvyJNQDEYbCSa6zIyKAIWQWTbj1aZgcT8uHUhiywiKbKq1ovrlWP9UaxrQaxvil5wAcfg1UP0+CDsCReCElvOzvE9mC+t+yVKcOjS5elLuJpgVZbCY0gkaBnZVWGVG03jt7rhbqy1SQ0SDfb/GvtDCaBXmPce1GaTvONmWcmpQBdGqmUuvO+MP8SBknMMMN8wuiywuFvdgfCAKujCOGCok4p4/2ua3RP4dTgvf195zPB8/SiD5+lUB8nTIDDIEd7O9cxpsDVD1VAnFtQeuDB4xcTOM96ybyORLy4lY+9jLM1oz1/nzqk+gjF8g7B1TvK1J9IQMJuER2lpq+6CN5/QsubWwtAY0XA/GGxWvh55nbWJG6q5e+yncYqxt5dI5j7r8NGTdOGtI/H3Nr1/UP6p8ikO4n0gXo2wgReZqE3j490viUcrBVoMJVRhvWxWVaBOAXT8S7Gi8AMmIwuSgn46uEq2907PV+26Qta+Xu8Wswruzf3rRLu2r40zrrbCqth48CuIbnCg1RYxcTV2RjziQOfoj3ZNcWs9Xq+EHwl0qH9C7RufKqb2NDAtozzQU+IP14zFFf23M8WGhDpR3xESbrb/wgpWIw/kJsmEFYVDqE5F0DxiWBMwcUcSFG4bBtwz9Xqv8cg9UxoDB9ouMQR5bi8P/pWnbQneopZcq5majj+RAyRydvc5TVhVeCoDBnOUU4c0g427LQaKimH02SotgFd9Mz3qSZR1THygMy1ZLf0nHrPUZHi9SY3rEl/dZOa39AbHbZ9SVZ7szqLY0/6UpvUu8AU/hFsiHz4h6mWaA5CNz569OHwRmWhV6wYkV5hmpl0LeA5M5KZYSiRqewp8PAXKjYDcfs4JToToGSyYmLY6XB/BBJXgwZz1j5ADyMwygP1kLhRacjTF/PxXictGPSlS6bdMhegbRxcgeZ2guUQP4JjrWdgbBEsur7fINEvaDhVTCP44NAvfriVIqITaJPIrEMyrkBIRbh2EsxN2nm6A+2Vw2eo1u5leki1/1mHpxq4mpcUSx8RW062/h+R+zPielQbq/IaN4jm0pcNnFk+5KOkt9wg5eeuI6jyMWrz2s1W37egvWGU5LqeeI35wJdPcTpMTk6giVuqzxLJzcAl/Mm7sNE5F+DzEAeqE1a3tkqI/Xv4eK9UjtMIJTTFDHMeCN1nf75g3fLJuAVKwRtQWtG8pq7EhbvxExVxn+QYokrJUoYQHMszontcxl6pyA+sJEwCGbeqqCFHNE4+uQScvptP5Qs6PiHNwqqBzkWt1HjuE9w67FZFSqZU7l1reCKGXBkpmHmazcu7Z7q/LPgh8gnyiKXRS7bwb7r6XEADcL/stfzp0qxpdrjz0BsdPuALY6gTKC82lqCJkn/09Zrb17gTcsUtdT3nHyMsURNjczV4y6qfoCkX1sQK03CRcUgeyAxuQIyHqIJTutzKtJ/Pw9R2Pt9XaH2+pmD8zB20nPt9o1hPPdqzu6XpQ0/YDAu7VerrvA18V6PRH7l3dVR2kvVYPj16oS2Jk72VARKr0dXKyR7E3A9RgqWV8fORWGc5eyIMsyFx0uKntQIgb2k51lbEWsaJKY7pOdctpTMAN4XxZ0m54lDzBdGfZEuxO+QAo2Uh9BwcKb/JJPV+XduEbNEsB6CWzp5UbQk9BTkCeE+oIVfJQ9mRo51PvI+cdv5CwNzoaIwBI7LUmjRu9mZgx6thr2lHCfco2orWTGzOxtf+K96JaxdfwjqevXZdmF30Ee70y2ylwpWzeLhxACFdTuppnjVk1Ms8Visnh2/5b+wnW7R8k8vfV4gXh3eR3CnaJDPob9zlDG2OxaR0PRrQzV40/twM/lsnCc1fKY1zp++TUSTlvtkmPYrN+r1ftAPQoMhxsMa9F/ANggOnakqtCaqsvyGxbnhKhrjuxan8sTUX/xg1Fso4psRluhxpr6DINyUCg4buv7w1TbL2dOUGKB4wCGOToL59M6rUZ2aTlN7C1KUL32nDsubxPB3tgpgZPhrYcWLtzpzTj77jJhG5iqopZH0pVAWuVm/cUrVZQ3mNb9hw3FEkGKyFH7VBOGFtqwpca+QFwYyNUEdfdBxaS4apK9DjYvtW0n95j3HHsUsplrMLNkSXvYhjuNXDw6hbqfwRzDVeudc2YKwLma5wWVc0ttyO7rjRwwj/K/v4K2o7CJ01/iANBI4E7uSrT4nqm7aRZOcvU3r8g8jxfs1dZjaekAQL24VwPNKN2PrHP4v4sx/VD371FPzyf5MGamE42p9fshZ1g1wqUezAAW9NXsYvsvgz1GJnZuyEH9zDq4URsWFX9gceh7kM9/QYNIDJtbcZU1Z2orPXynFIPE8AFUVYxVfJ10ZGgaltyw+myBCMxpgdGD3EhG7g3z5H/FrZfTBUz8Oex+J442NkN2yAogqQSyp2efaASipa3m1oLHY0VyIyZVJVkFPgFvOJ/2sPBCGTcLhV+RJJOnSaPQM7JQ9yNW4WbNxgYDeEkgC3/xPD0ySOhhEHcsEK+6eg0MXcWyStvs1QgLSXgI5ebKgUDG8x+3jg1PY2UQEUHaiLDRmhkc4dzczqSlABdCkEFh3PT5/1vu64uBtSc+vXKlYYt8NCduNIVitD2h5fH8pBh6gbPzJawi0kHYAByYy7qIP9kjhii546l7f4acikvkWuuFsOyCrdNM1eSlMd+WLIKhXHtJNuh6XYJQmc1XMoP/db8tqTmNe8wHra5F+pMTPTuFG75PlLk1bjdWzni9eeM4kAj/GacOnWJkwrIVrtVQsoUvHH0EDV7d+jK+x3rkFHkra+dT6LgmyJQbECZenW1cjO69Q2q9bqfKhQFchtdj3eyE6UAHZ1LctzWIEQzGhBvPtUM1H4pWHU93rf0LTyOwMpPPm6STzjnjsAkw5xBMydUduJ91wDsJ6v/1iQVES3fgOtXcJ8vDnG6QTWP4gfKah4kRZmhnkTzP32+t6CwB6H+dJK6KwXnafzautzguQTnjmgiwLtHVrb9MFEzeoaB/PoV55FcaXFy2zcy55dF/8GtiJagk0J2oE6rqL/GZ/9LdLTaPQTMkaHX3pxfMJoahwB9HlZ3wvsW+aygdxg88y5fUn2K3HB4qF5iCeYPJOTqRDSLXpdIWVkZxSddRlBaKPwIO/GChWYLesu5Z2NPNYoQeVP7elnx3huXmV2lshg9v1h9Aota8lRSk7b6n1ZbgKnYTnQiUd/r+mgoP29g21qsuAG1a6DvW7SzAq6bi6NvMUAGqY4RpPER36dOo2jnEWGBg2HIpthwd94HbX/bFV07k1q2e60MjNMqXaF+pgNycccHFTIlS53yrSw3AdoVJEOdRX/UfDAvNsukMhba+pFMDRAjRPQtzKtD7pexpVuFJG8H0yxyuHglps59vukYPQq1Cw5kJH1A/A1ZS1WJ/1kOYy50mJQYmMMlI25KO3W2quzn+pcU19yoosZR0ge08KSeEPOfFHnJbX8swYNsf3JCtHoIo/b/M2nGEpX8rY2OvCd2QzxYrR4KfmASaHpcRXgtXshxyqrL/G8mNyDlqneF3/5O8wffkU8sJHIFgyB7Zt/RmqUAlXD5/bR4WxYA7mxh8EGCagDM8NrXNqH/KodqUs6wXL5J5h/+nJQmUJ4h5MlgCMZI09yRjioJ9AgDEXlhq5l8pTNzxlFRsQxp1GtLGLjvswCzSrs55/Q3vpnOXfVOf793luBoOQV78o0secTHVDqO6hIPqW4edd6bZdIIyUeshUGeLJzjYyTvsmvyRSMJS4XPNpshmqA0S+L+PEe2SYFhyEJLYCjbMdV7WlRqjWK4JIoZ2BajbrPrAkAIpjjw5yp93P48baZCJQokNKDZKBC2GqJsg2uEPXEbQdTIUAOVQAi/g1kNKXgmLAitpq2Jk2nkr263pwzSyBITt8in5UhX3GpszoqJSigJ7cbIuSJOv3hkt1yTa7uMCHf8YjuwYuYMBb8c4+X48oHIZjwQEQ6Q0i9rmKgVQFIFr4fTbQOsBPrwk5PERsNosZk1GOnx9C/xDHmi4+hx2VRIV0rgMAeIhTuzWQstQBqq9yd0oKOV6T07hWu45ll952a83dHXB77o+T2PgKMuY81baa2yISSljQbs3pNG9oQiup2Tjjk0piloe6YswbQUpJRAsPTb2eeS5/lEAE+H250R76KTi8LFfJqKCWMRw+aX8kt5t3uiHY/vPeqgLYZEKOcXDHPVFQ8kANZcW337EjAOBbKVwTkf43wfAhu6Bv6cnEPBIflMD6F7e8fJnd/q2unWO55v10sLnqSyDbrOYNFfhl5icq1QwHiQCIfhe2+b/LCq4HO9/JUXSsDkeEy9HqZ9GKB6HjaNZmsHVzl8JgXvctBIOFkA9qLdD5WKTzlOY5kEYSA0dDWQUQlhHOxMz6yD9Ji+MnhWf3MQmxZhYRP93HW+jSuqjxM345ZKiyHJ392B3g45Yqp7DrAJgrkJv9Qlahfm+cSOdxBi5Iy/sVJkqFL9kuskFy3PHWSPXoBCAzMxNFavaLWOMPXcuxkyANTNo4G+4fG1aB1nK9MF0UOq2/sfv4AGUPdzSS1zTb5wEL4erGzbrJBTgxBxas8my8pyt/G1LKc9K3fDWhZG3LnvAkyH5kS5VKKh2rhorN2ipguQu+h/BPq7hPMnBcvgCNra00Lqg3Nq1p1jrNTRYrDvXctUCRW2SnMo8hXzzlSVmiEhou4qlYlpk5oSmC7erZeY01evxnAzq7sYrOgBxuigOO1hi+UqUMyAnLQ1gTH3r5gH/pfYMka6qFZdZG9HF4+EsrSfrg5u63EqZwp1wp4BWbq0JVK6MZOuDRu5aQJpXJZUB4LToqZb6tLz76uUhfxl0sHIdZk+jAiGFXBGQNh7aBi8rgzpZo/l9E2U3aQucusy75GgNG5brSyPRQkB098kofZjUkuPX+YmK44PynTVmk+NGkwbXz08lkYjxlXYvyuoVVus9fUZjswYrntTAV2lUx6+zlH/MAfax4JgcEzDeSeC3XnPd+WSyfz3ZIUZPdJmXgBPDjV0rFUhIxLtkSRbX+OeehHpTaVHGiXr5uyEFVRpr9SvODVlFxL2EsPxrXwKo6+rLZ0te/lAQSAA9Ukk+1z6G6ApmFKGzJBCyXXNAY9Yc4bgpUmnvam4Bz2Bs+5Ed89rYiRyBLQRklM/XeeCRWViMo9FVqGZ7/k1wntx9B1r6WBTiKKnBMpi8pwBbAJbBR6LOqF8ViHKSs/32ir8SLmkN2hUsRWZxAURwD1yTgj6T1aKYlUhwqqYuBCAO7AE36oklAJD4lwxfHv5WYI0BZ4T69bN0uEUffkHbqvMDxBXjPNLTwmd44DsAZCN7P8L66pb1rjYrqXcbk4yw8gCZrg9nDaiGpKJ9gpnWnjUISE8N4phkjg+kqMwIchmNwpmn1UlX/JZF6f7Yop9c5A3PK0MWSN9P90DLRwJDY+tKKx4qDeZjJt1cLmT+TWR3D8n07D02vbenETqLYhA+kj7jnVMXr5IE6SukFz6vOmZOXzxlwpbQwvBYNy9drBkCedUU+prWMmS02ofW+ag0DL9wHQWZk5/3tamnWsUlCvJBFLX/Q5BdSiIqs+wXNfpQCcPBM7VOpou8LboWfzrTCkoEOeWHhQ9SLAUPgi80Q1NzHu5xIRwVWKluqWaw+XlQuR4WtjBMFYOuD/gb2U7h0m+9Mcngax1qksG99Xhv0OVCKw9yUp0fRhr3de8nGS9q8MdYigTNt35GjskvmzhgeIYFGCRPnTl3oXWnturg5lgKF25deLIeToYXHr6t1oKDr/fgzuDAJjutxGnN6xyiem4+9Xf6kwKkWHnyZKd33P/fNQrMQiqCdt6iOjlT+2lyCC1AllSSKekNB1XillBrJCvyad2TnxR9O4+iY8otNqgbAf3tHWgcfTVn1lOoObCsKrlU2r+Al8/CoRiVDHYKCmolUMBuNLH2IKETp5eMe4CRE82MlJEkQ/vS8ONH0dZcgVYFr+0vqcFJ37dzcSPNZIIfurvUhgV9Pj8xmSCyJJCWTf0v5hpiIuGCVIZdiyHmxCuIhqNiUxHvx4+8w4mrioWUbbYou5x1fqIy6drp22QIe1wsiBXMBM4bZoy788ocO/HExzyziwIhbkhPliYYYuYIybgjzPyq+pAjH/MLrpUavw+dREVLLfgRWRzCTK+oGtNFyQ0VIPm2DnZTDhSpGQYKQEzAiNRM5VAHFMOE4oTHSne03rGZeJhEcqYw2iL7wuoJRYCa9q9T+UTh1nB0/3wqoilAlstQUNU3hnLBakBo1gY/1uo34NQbO+c5EtqypKKSadweJcJSk+5sd7wsU70QvdcHsVWUMv0baIWxZMI7MvLouLiOG9jJEoPf4R6jKK+vPV7V6/Wvqdexgujp3dEgbS2RCg101mJjOr0Kp06g6OkHNpIQfhErlY5TkBhh8Iu9AUPe6GX8k7PcWExXOwXeXi+g6oWK1inCuD53V6O4o7LNA2v/k8U+y6nMe2u/9oIwN4Y9FX4LkbCJmjd2nFA9m2F/S4UiGzL63B707ikVV9Fxjo+rzOYpqgQnMaKjhgAa41JrPynKC+7f8zyqfvwEVlvaxq2xWO5aqKBYyTl1YLvC3lDnDdQfbw7zNAdlE6IQfcwsIGiBjswM7sDoTMAWQKwBu2PcjLr/yBTQe1JaEUDZ1apJ9R8zLXJyJTPlaM8peVb8t1rL/c9VRVSIR28Tig2MQEie781R8e4TBPtWxzJNB4Pmo9oC8i6YTnNjPapsR1tdAEKB0pn1yh36LUAf38prPCEu54wGZokpYTwN6HVMB1yAKSCfmWlomlFXDkCO1f/3m1GM89ZNmCqrI9jjKrpWxikspjKRaVP642t9vAfD92cD5PepAPh+9MIZfxyQ2e+7h9t74+TKlc4B6OMDXUO4GjC4YBratSirC5u6U5lperGV6uy4hNjIzqGYKjn+34rdtFrdGFjTL0Sj6VGKJu+kfDY+qf58zErJb+hQR6B5vxqoyCGnAcUvt3V4fJQ7lvVvkmAE2hL4Lt4VIhe+2F2d65MUWOpn93U005D/kDIVhCZ6imF2xP2e73CXx8mVIkOf9FVD7Zi8PGAd9qj/gPnGBYkSBNwbTBFN4LUKR4ypoOlfUZ0hTWknAt4udzDh76mK2WZPypTQbPtWBxCPD8Jfa6zgARo7Gu98BnmWo9WwiRTf2jDgOAyqAEFejW3WvlORVXfXq4snn+2+VeNL1FnpBNkmigtf+Dc8UiVTf1J17tNtaUx+C8o0Xnb9//fLkWgBTUBn/+dqjX/tOb+6vZEIk7Kdh4ptyjQLMr3PlG9AYqfFlHRHRVfhtHS0nI9ipnzj7VoS+zmktvyrnqgHolqTvo760cU+YHlT+WCcHwJlgeDYmd+dfYsLlyNaqK4yP64rQDESdDW7Yc2oKD1IoMMtLOqPJ++gTaQyPNKgZUf5L/Du7YlKHHsNM6Hw99DnxerICeyk9WzxnxYWGNAsWPX65HSW+iGcPdwXS31oVut2NV96GvXSJ+Pp2mokBaGEp1H32y32OmiJXXF/hNd1we+79InXB3cZz5SIhRS2C5qyea73H9BPAPi4j2km/eduo0ncXsfHzVu1uPe5WMLAXOQThNFYV8sKBcPmyLNM7KCbOTtJFpJX4fzZDVxm+5WsAEfUIBkoz3kD3eT8FAUKiggmo53P4NS/YwMQ/z1Nm5S6x5l6hWTMb1Oo2XYnU3mv22scEFafeEjMVnC1mFoSiedXhwEByTgUFsZBNNzEDUhhC+lbaTV9Y2Rd1UQohTjWTicr3DjdzQa2wyjpBSt3ggK45U5LAaqqdah+WUCfV4BVWD/aPWbqr1lb2z77kyvpin3FNQQCcUUozaVY8IeMvaMkcpTV5DxoGu0LHDLVJCewocnMauLQZdBhVkKNjJjOD36JdxeVMKG0D5FhaXV6JNH8RHkyifguBjRXdZ3CG6hdhwaNsn5wM071eeC3GdLsUxVFFwgTJR3E6IA0+hdfc9ypapfkVStnPo3bpja1donrzYYaKALHoI3Pl3OBUJ4uG6uuN9pGn2FMAPOpddgYvXaK/XoQ44Pd0Jv53EtR69tXqw2jNATHW5B6ieISsI0IMVl+/A4EtSJV946+xwJu8kCMKowVgWI9a4SfBcLn3nzP9+bKS10slygGzPpyncbi1ZL55cMV4liTdgC7FVDT5nMKCgmhpt0NTwGE/e86oXTUvIL8lDVGGJ+QWu51TVkN0ldb1kO0vFFikyZ3Gnd4S88sndpCUsxR8fgsFgAL2R0JR5e4+xI4DuRNPmkvpVFo8fLU/jgwo1X7LXY8OAnslLpxzyiUWRvDZIjv7ZT7KzTqbMmzwia0QVvSLyC6g/lYifYCgQV35BYnqb2DkMWLIF9K2Y9cH64owPcRM8h4E6sUtFrjq8mZ1k5oPgA1yuThJnLR+3ne96PBecenti6riIC1xFzZp+xpL2TqGB733cfEmOD9CG3PVXvFFNrHrAgjMfJJRMsws/tXJRbL0NFqzqRBNtbb39uduJ5R0L+4D4jqup6EKso1A0U6K6kiOkzdpmx+plmPaYdkb6F+ruMjmtk483XwScABN//DKk5Gm4L0SqaiTsldhe4roC5VSnYzeNjeRpwOC5xtO0DIdAlCz53rbwba6kciNOHbMcVGSF5XMIZgdH934/xB+g79SYB0CNCXRz83rcImV6tEdIN2euNJ1gv8KpqagN6sWYGIn/KGHvOIb+htXePP9p5YD/d0ciEutv5GaHuCttwMWSOmv/eLDpATZAkAtTh5IziEZqUbugPiAZYOvL0iRXPruTMoErJB9W4J2/PuLb4MlkMfwT6Z6bzi7jlQme+71X232BjkOs4pm1+pjcqiFO+I6mi6ojjK8+Oj9EbDtW++3kwB+BWlXOJIEKXS13Y2NNZ1Q8khYSfo3p0Hidaptm4kXFnM7ZxP4osGaG3vpOHCQ1KlzB3fhRnOXc14Hxc1X85thb5HcJ6sOyNloWOHH89BDP11A8h0AW3wh6y7Bu9epKffjsPs64Y0kt32bc1zIgPN5yyfG1J46U+U11uGKWRVfGkDSx9vMpFdEifOjfTK0ORxXKKEGr35iLg0631VCrl4qg80IsKZuCZZcYBcpZ6WACYpBuZohlEaGUvsdF9NFO7qer5/lTBACH44XhYufLv8MhpKI/Qn35V3QYlTHB+kJaYFEf1zc7fGDAXoATJsf73vx1Wt8m2ZiWpQ4WZUafl3RskO7uDLeJrim0xi4zs+AJ1CPDWpBN3YbCrvmtZK9dcM2hyS+V8pbe62591kAbP1mJiD9Db/jyjrEfOuDpbLFgYMsizYVwFFWEKtQ9EB0MXV/03ipOt6bArdiVek8BZTZGcZWcBQGx8maa1Z2LCz+W/GDB0pkjunMNNxNMNyOYbCCYFsGRfyywCUOP9Sq7wYlEmZrJ8z+w/mo+fkFGTd3KtjlzPz5kYzxhfUNTT7SoXF23MWODs0Y081/oAtyCojw444AMrVvYyTavzYMYlrvl8SLQbeRfFK7lJTK1osnw+b6RoSfnO0cWyGt3cQgMxEKdBwr6NIraGSRxXitZI6tmB8jkZcvCRSr0ntseujMVfIMfnn0eNUDswMxrr+DU1kPU35BCE4BfGqdzdRdEpA5r7fwBdgFy8Rwgp5pBJbczCL9sted7obCZxXczAj5J23laH9VyfyTKO97PgyGBhwHrQ8tMVLnZ9Y1vhBDZP6hkRz4BJnTdQLNe72f2Cn7HRjp4uioVr9FdQXjU4AXsKLGCB3DVZ5DLEFrV309JyVbt7kYE5Xxp5WbcPadhp+EP9UJzcqSd2WCUDxFtruKesYwl5/kxT0RcJTkuTdcXYF2FYovpsid5Tb9PCq+VNxwwnuT2adDHBwbEBUk+jcees1cJNEaWIFyPxGhEzPVjIJNrfG1G5FpJh8s7ooMRIUPC4WfnxSPYZ9W4dgG8WhKsqdNGBuKZwHOWfFjgdtNHdnkqJ2wR3/9S6JKm1tNseYQngUf7n+lI0MfhRPouS2Tqf7a7Y+4I4Pds3IwhvEJSIyjYaDnJPfVk+sdvg0BN8hDpqkKrkyr0lWofmz/Kv2g8NHBc4q8KUT++hQkmJT11M8mAMuiuN/sjWnhXC1OulCBhkrq1DLthSarfEm+Uu02yZHeC0Nz3ApkTtJfBOb2RESc6rZqRQrDdYZHZASYLSZroV+iD4zrtfitMO0k1qL4OQ8gfITYXodohafmZOdbhFCVg/L8PV9CXSdLpcFltY7FejYXeUjnJF0Zt+i0IFs4dpOF4q/P5Hgi6zAZ22LIl3H7Y90BX24+rE+g4kmKHTP71MkhQzLemoD1AM7wUD1+WOdC5lGx3iU8vYZm7H6rhoKCPCxCjiodfW/BvwWjThOsaFCtUqXHURY5gt/8wo4QAykbbt5tBOZ2BagJrbUE6ZlNkSJmTTavN8jiDhSPBa42LLROZhcgqtBenznGxYO6foyl7Z9bw1dy9YZwxiCLDJIgox2QFGhRB3aqFJE/MbcvDUPbUpXFCoETLuK6Rwnl5mrafxblUfdG4TXyTqF2kpsjsBhA8hZegS7OlRrRf5flpzN+WJo1et8y8+SA5bXJnZNuJI9Q7RHn/V1i3J1MWqVJPOQybuyC66GIeE6wT+jwpkjvV0AjiSShKdy++liQCk3oCu9MlymKmrFnzbNZ/M0c3lxob2ScmPcmjwMuWNkifMhumtaf4GX9eRjrOOHjHpgOJDKSjfwwO4l3qgbvuzsTBx+p6gcOiIx/B8/uZgPh+6iAfD93o7fJlIiM1uOvZnCRW/2FnjoYrwI/S5UQuTpcULiQAohtU01GyOHjSmcm3o+m7sRriHQHN48jYiAk2updgYQfDeel0jYT0kF2BWSFQ9rH+mvfbjoeh1P8K4YgoolfTT14a0ztAy43fWcGEA+lVBzXmgYitkNudoV/YmvQ5G1fh9v8WHhLlNxBsplIje8bd8RzFLWcKNpgAhTZzPIrlA9/zdzEM0hgO1M3UNXonT3/TAEdBu08X/y4PXjJ96xeTKm0eVoweYhmv61s3gy77qxDF+2VBBgFhOicLr0EVolkDKskZy4jmrOGnt6ixQv7eO/A6TdDNn/G4Z7JIHkaCL22NdSZhuLDGYLNRPpcvzvhcOI2JAKgmbTHKXvcYKqxE4oYpnnycUve0DFL7ko8DI35eAtRS1fciaBtC+Og0hjhPozsprUl4QAHhkVAT9vAn4abCodw/NbR5otU+EAxASx2bhg4xWLNShrSEtnaNcmVHlTPRnTOl6oPN8QwMMls4ic8P8V37P2QDKEKqvSaDl09vg5AaoCbGKTdrXVpNQ9CuuOdLB0Ooo2QDNa4I9wSq47xd8MqrmlYY/de9pTtKZ+ga4epsvZZ5sWyUvNWORIzV8Aqnp9lEYbnmCshyTzG+7D7fSKMEU/0hqy5rsjBScbe5mYaBLeQvCZ4VQA/zTSnZHzERxZEFbG9oOlE1r9+IyH3CTD3LVDFP61lhlKiEaLdP9kMcpuRSe8EUNuDuHKWlGd227sHaEDv0MJhjOzkVYSHIjo1sh7BWZkDaCo/3ealY+YMGhaUwB1EkaA1vjkaZelDU29FSV5ca6lQnKPGULFQoahol5H/pvEd4+AalJ5a+Lp6W71WZDsqaT0hNrTE1INzRX+8iWgnbm1apTinUdXvi6/g+wpkj5hJYFHV7mrxxari7TA0A5gfJKLm80EqGwF0Ir/4QJUTGudm7xUB6+9s1kOBCMCblASGP5/IinYz7Lq/QlCmd58jMdSWTarIqOUWDbByjK2VRVEIC+ZSfjZPAjulKK1d03o0w3tFROQ8B7uHheNT85AjduRj3sMIsc/fs++hWj9WH6VAIQAy9bHlWFpBKl3i0XZk5UhMV9qDGFSX0MjT/P3xMyDaw6976ipoAu8GEbe41SRr8zT1N73UW9+GuPgEMk+iwehFSpdarLHJWsyOUkiYqlea7lnBjYkrPLTmNArhBsD5BKta0gdR0oS0fHzm2gJHbTKHqVeORCyXrNnkgFWm1GH6gXWNptoJldjxt7Tdxl5BaZp34RtIEbbEwfDG5QdGXaCZlTnxcJPiNeZE/88ZCViNSpRZR7zK0RvzKwLLCpnK2FTzDf7IGhSvg4hBj0WjFzz857QLTNaecHZERPwTtFfRaQf6EqagyvZ2QpRzG1ZyIx6UUKh/Dh+k6L94+Sfjk8pIK/COFAm0o7yUsSqs6xa1nSPN9AHQZ3q8jnXLvPutwZ6V8ap7wPLgWzx54v7htfVlB4XFKHr9hZK6dN9cmtFBZx1Akix/S9aDXfqKkZiptNqoP1rxK610E0yLXROElBxlfT2G19+oTLc0zaaCyUaTk+AFuYwNLtoVfeuBlfS1eb4bBiKWmAanEfBCligStmwvPQEa8GL1rGoA5CUl6mBH7wT9IYiXE/mFJaNivTec5klgzwLNOw6rhfmZgcKaeXupOUABNAmDCE0tL2lon2yf4JOEWPpgZHm286irdFM3H0WxdSKpBE1P2VBCMGsF4jgwi7VTnC9GwXlVh4AuUm7OxEf1mRmrmJ7zAb0DUjefp2ByS2uj2mZrBTI4UnUJzLjJr9trT4FctXs8r/smfRXwTqJrK914gzzdPLCXjtNdS8oYMcmLuAx7hGddHGiPr93AVQA6kcht0F5L/HBqmevvCjPvfHkxAjdDQ98ySUiLtxaxN+WfTWAfr9TfWwu1isxzG1Sh7xMa81WSici/f8XT2HHDgCZQy6GuRmU/H5dWhgxgEN/Zb8djuc09hmAkVawP7AkXmhALPViaxhRq7yPMWmNvGulLa+iT4wyXor5vgHygjfLBsKBEmPsLClNX8iO2EpyUADKXxbDGivQrc/pWCW8xs/yR9TT93/zK87S6rgYAh4fR55iSpLJ4ajjKYjinbHT3cvQl0z1yBOaXV9bE3Y+3j+jzeJ+IZjAz20GBYhcKPRFBlI8P+g+EMpazsXeVL6vz13RshNrr1yKytV9RtIghAA7dl+4EjyhZpde5G24OoPuDFkvwACQHS+DwixRvAGPnVQlOr5xYO+obcoVSF7CwmXejjjZ7N1SbSqz7xsV4ZrIfydRP+VV9AwD+7NkRRxGyd9hpxwLdhc9idQJBwyUGGd64I5CsO6Z+rrRJOyba6McAVRFn/PH/9W7s8OG7B3NgO3pcXEVSF4AHKnG50VmONfAyU8SlaRWTsbDtymXoONxejnZXx+Jl9igekHbiIVqZqp3bHIsuVUqWyPzfUfHUNsao/RlHdK84IQKZz9HiIjYAyRuTh5GJrDOWb2K4eH/qDoac3NIYtNxKGVdWmTQFzEXLmB0XrkmnP4yC1TIxTuozCXmoDdVe8eaJ9NGZFMB7915SskIhHUwt8T+n6ukCgmb2FkUGshv8h2MeWErMuj4z9DWyWebtlB8CaB5V3M24mrF3cfGMHAW1edeY0lJrheWlRQsCuhShNGLhKmV0CHYMjdt+RZNc0joUqCwUsc2gvcNmrk+tscBv8cvOk1ItrpOs/Pb8nk44DzdCL8/OLCwMGwLUHs/pnbkea6tlAruaQ7QGLyHJLI8b7/eILfStn/thE5YLNIO0+FJMbq99Y9WrQpqr8u8osBLCVse8RmCX+tAoMzeNEg3wQE/+Dgpq33K3keIDYO41PNVfS1r/GbxmGu1sH4NoO2cg6hx1Go7xURUUk94305RSMkImmLdXRBnZzRbUf5mWYUYxwrleKpWhp3A1Hgr5QNdAdJTljwJG6yDNnkM895ssZT91Hzj1f8QS2ognI+HEEtoHLtz1mQO8RIrVcxHHLFxj2UiHUsuehAQXRBsV1Fy1LJZPFSKv98imZO5CjlUg3LlIXlEUUtdRwrrEQ/C4j5Dh+GRVjlZyPA0wQIrB3gw49YubXUF3GdGwcIcZ5LqSMpZopdL8YJg0sMewyMD2/pTNXs7n/NIAV98HphkduNmOOOna8OB+dZyepN07EKa68TuffcBijT+8JGSZ5seltigdx6SIfBZWiyz1C6YizmTC3H0aN85BR5bea+kIytRhZOAidIQcizuF/+5vAv8o/CExeE8CuF6r9Ag7KaO3qtvZ9g2jBv/8O0WHczOG4a2nwICenOJJtR3DWj4DGIEQ4/j2Q8PODZuFaISZzEytTPBtYGCv0r4c8WoCJbH+/OBeaHDK3s66phsFwQJnDMVy+ShBO3129V+Wt0H2StWyN4cCBvdkJ6jK+YzT7Vhxyk8G4Qtm3BbeaqBDdH7XGgIC3H6H55MU7j+5yP8WCFhuRg8sB5FKaCQoYJgxR21HlnLwaLa0NEGxGGAhmRFXypYill1OL3RZLhrpRVc5iRiE50gZTYFOgUvTOk58jQUjYiQBnt3F4T9kBFE3znoepkLLmh0DCc3EuIgNTEeXAeUHfNCmurPckmdc2OWzQasyo6pgcSxcAsEg0/JAvHZ2W2BdXyX0TXogOBsnwFaypVE5OEz5weXQkox4p83UyUGDlIeRZ4JNV3c73h3tlUFEoVkRJTQ4NcbPTqXlZZDcj/x7a3azxwOGjl77s4vq9Or9vR9+30x/29XeP2+q1fV0iX1en9fV02YP1emT+rowvn+lH+rpc4SliCBfLRJznBW11pFjlHuFmDbSfy1EWQlN0sma+2ueZNcN5rWEu1G4s2ytR3OUkc1yJ8yly36MiGoIl7itKMFWNyxlgAZvXQPbsDBOPuyAX95ypbWhy/Dxec5ZEISnxLdzeANWUMWUroNWnmU2hZq9nLsckJ917/lKtKauJd4iegz1wfaz0/xJzuf8A6G1zcriDJ27AyUd7aoPSfu9LxjPrZFuVJVkHkwIGbA5AzVDMLp+qF9EXHvvHKP5RNqSGaxLxNPxzxK031hePUnXWyvQbBSAgARgmOzE0IcoZnLIm7J4/XXy+DnFTeGOpzc1FJAieMn51vtUz79jlkueQae1HIt5DpJiNt4ZNj7zH9zYidZ+C/EgiYYx0LiziGwXc1tQnZKv2gsiv9NkSHgnNHylIEI55ttO1cgBODQz5P20rT8pGX/27/d40lx21Lh1cnyfqbqDGE3B/Zcqm7lKEeE7a1QR8rrqM8n5iqZF3tsCvs0hJwqj39jOa5whqoQE0GgJ8f5BexOYUbC46GIkBQOTz5edz8a/HXqnYutzA0bAFTslSGHjoVmAHhz9h46sDr+HCz+ifR3rtouf3LfGP725Bnk5gjmzwnYfT/xyEyugnLPB8aXHneR6OsC7Jrevc72k5OikMMDzNlObs0lH7ThcoxAPsM0pPu9XpyzBtr3D94Hnc7oYK01NG0lOkVUf3RQcc30HX3sEA8T/L6jFuImjRZ1TXPUwR8bguJ0tG3dSU9nG5LDI1EVV2nWoVm74mC6CLnEPANwoO79lC/lTFWtI5rGI8F4+iYhyF5/pp/ymJWS3M2vNVHC8UaZJ9p7OEMZhpIoBIQ+zY9vtNtVG9pHsSARc/qWqViGIQkcIWhFVb503WqLlUEv+BaTYiHfkmesG3hItllskfDYYLBAr04qjX0rXCMaSqTlTFNT2KEo2/zJjgdNq+Lf6n7vkNEFcZN1mwBH1D3+7pP5ob15cvTvr/c+VYp4x6WFAUbThUFWHC/Ow+YF6qEg8JlIHPErvjp5TrLLE8D8TXXezQJIlxtBwSG2NG8GE7iQQHkU2qwUvGYpAZy9N2C53zNDoMwj70sGyvDApDC+tVgq2KzvwYseo5UylqrHin0WVCO0iuoO7GUWQDenFaNJ5aK5cSKiQpWenVMXK3Zd4aGbnhpSDfJtoOGCYi0dEoeuH0agxUdthOWcH2U0KSRi2VTs7e29JWnlDoYmiqF+ZJKZemX7gwVR3RTA0RSf9lMHf3Ln6GdTnbQxeZg/rAfGBbAQRR6rJ+9jDBlmr1Gg0ihkrOYlciQ9kNaptjcIWbkTPy1I9xDszX0JI2wo3c2bxSjGTJRS1c20mJNXYZku1nkXHnrrAJRZlboGIFnRY0twjVsFb9S+dO2jVrQ6pQHQJYWMkxZ+QiyU2DDq9nT0zsn1anIo+a5zJFicmJQ1wDr1BGmNjRM0iczYeEc3XqUWQ1IBlyk/y7fvifYoI3kxHQT5X9jaK5pJMLbUS1uHGT2b5NmbCW4xogAUp1Gsj0e61QbhifHuQpWA52gHNTNfqibGS95Eblwq++li9mOe/vr+gzrKXgdbzvJ8O/xQlzNTA8YaU0K0Ml4n6CrsOukomAL1pn+4DfwTcexvihYjdJ8yXHZHfzlGquN3puln/9t0+aRliQHzv853W9qp1oEubNv+RaNfmJHImIxtkTse+ZAU7hid/mCRqCqAdjM/RU06RXnPuVQgNN+AmIh8IIk10NMdFQnIReG9qy/gkCjIYJ3GmkG2Bo5sWT5Xqr3mwtRGm/9/MznyQVT2kzG1/8IXo8CyvM8nsIVrx0+tBMH8O650CRaYpUvgIcQqN36rHY0ekI375z3eZ0jP4+pust3Hja8ApHkEieEvaF2i5EyP8wEroZO3/z2OkV92jNSxPl9o44LXcfczEaCn5zvIpz/00sz+c6O8GW6NoqK3bquhQT7aqO+ugQyJi16tCsRPW2yipeVc8aNhm2Tlf8aSAzNC9DSkb4iPpIGJIAV4J9zu3jCjifzRepdHl12Yra4f0UCUGOlbopm4I+1hkBmUmNVXvZOK3sxJwflopRA/9CIRul7atXVSRSOA0VWJ8hNNwkSWsRAuiN/fOA2ViMBwPzvvbTYrrwanmxN06lRda7+8mVeVOogGnCHR6GxzNDl0O79IstAGukiPzRl2xxGBruvP7z6GFOialNRi0hp6yReg9KO5Jpk7aPneVTPs/1uo76NjUz11oRZBmeX9Z0Z8gSGQ6eChKDqX+4BsSfq4lwoqB+0uPO4vnJ2L+g8mWaazIhXuNbJOvHqFLKJNMSMhdB6zRx9vpdjF5lWC8NI8CJ80KE2i0ZAIrWFXulAxKD6ve9A4SddmECIFjOw+zwJQMtrl2yxWYznzv+6AkwX9EWAHYYeTjD0rvJQqhZKOuTI6VXjfsY/LJACbSYHz9UVCS5nx/3H3TEhxku4kmyXFOwvQFQXKCaB3DmbfE5HEVM3nXX9d41F+9nv9RDQNOJd/ECxZYVV0lWYqhrpfl+4m8vlq8qx2UoOVzvVgu+lG9odIvB6basczkkEEzy72e0kcRBcy9tMDuPG0KwVudo0s5tgTiD/4CuNd6iBkNTI+mTU58QZePDVhhkVuh6W+eBLaOnCgE5EGKeLufIWt0XvWiAfWbw0EmXRloUx1Y/4v2O7NZpgR0Ay/YNQj+mlgOImuOIAg2dEtgiuzo4jrmvf/8SeqNhw8fSGtfM3yurJl3gkgarPl8dChAxBaoIuVpDHRuQIqaPDRaXDAiSZsteOYtDTlBmE4+1IRxqQwqaZXhE3DlUUdQsPDmgXxzInqKwutIx7V8q9+rZSAh9/gDnRha6Ia3Yxn8RjIYSz0I3jtFGfDus0rxKDMwuR13ZFLXF4sm5hGI/ckNvCHVw7qejYR9e1/9Kdvc8GnTQi4NFTx++m2epy4fzS48r/tHMM2JapIuPUkYYeBciI+8SGi7YxEK6x7Uakgv6oypw/NZSyhxjl99EZTeLGotgOKp4Lwnc+tT6kQCz5gSgs4N1JjXGSXqqZ/wTty/WI6ado3n0Er3m4VJSvd5s8ZlfoFGNN/1v57BS5jUZxcGUV5e4w2gp7Hen0/ofbXL+TSA3bxWAqTBZgV/5bUYsA3n77mjCMAj3fWq5eGBIkRsaMwctaZ1x/jz4JbJfodJPMA792yPQ/zqEAS+WNrXIeJFRlIblHutEGQ9XZh1L6EG2H6xsdab5gBMUbOZSkMsKJRbB3l5vDhnvFjeUp3nst/Cg+8syknU38aDpZB1+b0Hgx427GqVnoevU+7lgQf1t2UgDASj2kzBJuQpDMdClKscbxJ8sZMb1h1c0GqWJXyb1K+ouHs/YHRO3xSsas4C+rJq/xaFfad+BRiRBAypZu0gc2ZJ9e+vmmDprWJPC30kaZQKTFoLe/2JMyAcYeP1eoDVZKt3kXtBSxpvl5a0yPQpWNDQCHz7TbtUZ8r4TdZ9MXo4HCdFlZW6O/IeDKG3h/wDIvjtXTq5lLfjbkx7f7Nfwojq3CWFNdcNvFGHwJiVJxWj39pCMiOwEfEqCF7SBRQlLnkf0DHWGa6Zvs0uVMPQK0N0AT+S34qTTSXxz0x0cgCNokeYMlN2iwq1sc/BOvUTHnH2RuvqrQ9RgULs7OH4Q9DPinHSEktUC4VyfLrhFfV206v9YsAtu3Mp1JlSwB/PWZ/kgqC5P16SgnJK7jtkHHvoQqfOPkRPXuNL/A57mexYtZBBRalHY2KVz+Ad2eWX2JVO1pRjCr5JkUuKJyz6KEaNahX9DM5zCetxS04K5X0QZnqD6M1/r/jZP2TlIfPaGQBfbVPDS2njw8cyONIwhJONDgnGC92gZlpmWW/N3BsSfBA3ltEYusF5QU+mtYA9JIu/xAB3Z2UacRzB3bCq4aKsxDk1Xbmnl7e6xkAPgRuW1D4F92XyEuBhl0hD/WPh4mJERe3BbrRuN6VCGlu+zoQNBFGKjHuDOxVNKAf8gjTL5vJp7RoS/Ycky0fO7K1j6OlcyjGxahxmcYEv0yL4RRo3SI5MKdowbx/RBudStJ29nNMXTY2qk7AE9ZmaKQuz/f/DXI/mt42V6iRL86hr8w2dFVaJTsRH3be7XOEAmT6j4KpnNEUtH2TyWFZtIzbZUx/k4JTwd+OfB9VKtAsWt1r+WZdGpV4r3MrrGfvHGamMhRi58JfGozllTrvnQ5Dyo9muPj+g3LpTq6n+by2sSf8zrYgNDh31kFYsDrhA0lPO0NaLA84zNSK3hAXNFK2Qh4cHkIu0XMYx5hh3tfqepULX7U3oC0qH5KIooSolGXJCu/TfHzSz9tyYyqNXgIlMBIgd6as1CmVifFBzmoYb3ke/V7gic3td1SNEpL6kUE+asx8WsD1bNTJ8xrCfx61HmcJGjTvtF/1T59j3640ez7v39D7TUIXaWPeDm9H3VzOBJehr0ret6XmTuqinuxzisPh/Sw3QDTuxbYAZwyNBaxaE3AD6l7KABwsi2yjqd1uCVJpEk/vKPxRThyW/EsHKQ5rpsUG3nG5Nj4I/IhO2CTyg/4ICLeKqUJGY2XUQ0HP9XmVfWK2uK2+xO8wbL9Y95XY/5SqiRAYQV1divThGG4e978kJzihrRG4Kux0yAIGA0a7ygU2wgJbBcfxzXpgegC3F2YNQ0qO3EgY/HJhwwP5xxENtxqhIDxYDATMjbSVR8Sb3F5zMm43XEYhi1HeYIS6B1o6zA7KVH51FBO20xCTo6metN60APz+aQQursaUfARVwuaBW1GbMx92If+8XhYDO3SWoY5i9O/P6miKbCgsouMEsaP8hHgMTP8SgXWupnDFnA+lZZ+LQ+em5XvRutYqi3uxBPNFqVrbMveWL4t/WXHnqtGsUfpgob2hk+RjlDw25gSr+j0Stwe7yRLqoCSOxPUl47JZLOakEc7ITgLH3HzPgS0DwvisdHU5JIlKZMiRS1fMhAZh2fc0X8Z9mYwuUeoDbiNZ6xmkt+zRXaIO2qSUR/W7Qbd3vzv+GsRMFn1Z8wTYU4g1hk0dsQUAT1CYwYw6PUHJXHRbSe6EI74lbzJh1/5Eg3jEkPgn1GXW7NadfRyLum+solQCkbHIiA/1BF6PrcNlYT+e61OidH7bEB4P6wS7gn5FcinRnAHTnk6Q9rxz8cIIESBPf+sMa5BEUFG1xtG10DfY0S5O/ObvQHTaBxFUtxFhFmUwCKPpdEy0lCvoYFo3WTubVxOETi8nZ3JCxXsH2xdc09c4lT2L9ZesSo0M31YWquCdPKdbFdLK/WmbqcNjpf0azIgqnRhvgKwKyQILeQWeF3OPpAWsL8SxwUObGMzVispvsDQL9lX5grNueJNlfGzqfw6Qmj7cAFc/S/FOy0XdaUCkBkXZU0Fw7yHm+10v9+IJEmfGrPIxtmVSkhFzL1j2x3JX4ouZTsHjmSMpz7kDUPiG9h+VJuoGb5bYVAAHtuRbQQ/rKvMUiuTs+SS0lTH69tbGbB/ZnCOaruSgWcFH3L/U7NFzvX8+xrkdNOuLBzyPvkD8Ym8CDR+O7FQgmecm+7ZKxkFk26GAl96cE1eyj780b8Q5jlccEfheXmmDIGgZ5SyQQjViPZKNGgkIoTlGIJVmr6ygr0aDOd7nJeIrAXW3kqYcFuEhOnDvW3f0JkOMy0GGFAen7G1Qp4rTvI0D0kjFXpY5DvYrYbJmTaTxYUbnIarrOm+PK369uFuwrjPW3Lu3gzhHjY7aJ1oQwC9HJrIv0WnnNwFwOczziDt7qiD/MnB77stEQkmILrHMXb74d6BLwZwrB3p9lWS6n3CwfESt+n0VJDAKBE2eQDBXfl5sa/m2Y8xiNI7hXpvwrTROw+dA3Yhh3w/uDtO/IUaojF3dr8mmBEq7I1pKiglN2IMaE8SnkNE8T5gR2TJgy2/0VFmBgw9xqBIivjbrJkHBr3eRBAfu/PN5zNeNkiKPfeAJeqGaR+S8OE7h4qfoswEMpoxeL2h1aoVU22Sw72xp1/O6xo9XlgeEIEME5TLyneCPBOh8lo/Qb0a/ETNg7D0iHluTxsT+nymrtqFPmGwiLzjnymOuBr++K1557WQ8J20c1nQWHQVA5QVH7YSIWjUhI1jP9N7DKBDAzOEVWDS3zjyfHdS0D0+jwl/xqMYtX5S4+ewz6nszWD29P4WRvzKXehMPes/qQt7CY2VqRQ7FxwWrsrTyfqs1k6zu9XWxBoOIOaVXsuc3jKRTiFvmxx6+6P1vxXgLyPTLEVNycHxh488f9HJ3zjABodh8yGW1t/a6DIOlXApWIlJ5XnESEqaFtlFcNrZaj/FL4U+EDt3zstzqDrot/nmOvRC4W/6SRIITMKBXrUm7vLTKxi1f8xKEXB/CJpNd9JHoFsK0CGMqcoXrOzojmKctGVzaxVxaGqT3pLQHIfMM87kmSu6yHN9iR0V4j7QcvEf1vJkGCOWny9Brv9YmifA9+nNUL0QV5Nk1yiqWaXB3pV3X5s4gIe2xuJqSiLvel539Y8vVNX3h6+L6yQOa0Py52vE/UJLo/PqNYTN1n2Gq+2bUYoBNI65vU3syMBLjK58JtSQRq14eeLIwoOGEQYvgt94B8VJrJP6PaU2ZmcvcuVssIcxYIpRghAUB8car4rxclEa4DAixdLtg8tn5lwBXSmBPVmDvxTzy+3pVtgkUMf4Lef7/13tF8EQdjeThKtfFThzY9gZkIYiLHN3DnhXUvlvWc6nEmEXamC+f9cfCyfykfeVhDtEwr4vzWlgUzoGbalCcqdvKWuqiiv6PeHD/2+jkJL2x1/GjYeM6d26dXYP1FoB5nJn1nM7ZPn++83+e5yOdDC3xeII/FPEkHk4nXLw6mL1YQ7EBSrZjLpZQ92z7tfu+ghJ4db5pqPTR/9ag7orOFK9Cp9LrpoLvvSiLhSoS04v+HMtKjBNGzrOwbLRrOZHIscGdEj1UX4b4XlOOBl0L4TqmZTD8es47ucL7zVZfh95CiyDDlVpCJRq4YUA6WQxL8GrJg38+/Un/7avG9CBE9X86ZPzR+f1/Kl2XT6YVo23Yl/XwmS6uP9H60erU1KAHwn3cSofvD1JGe9jOk6RDzRzQZilAb5fygthnWbdwQSzFTUZgabkBIiZAaWu++YpG3xJZMdNNZhDAc/mh60jWFR8IatcU6nTvhlkgQX9HuxrnSVkeeOZMvf/VbFJgLJL9F1oRFsg99lJJ9IMUquB2YWTty6x002nQoo10RoRH5MTrjaRk5OA7Xx95zJx2FAz6gU5j9ApkV6R+ETv8PL0NjBNKuibhmYxfPHr0CE48y0mTqswRTfIobVvYtmQBiWAyk+Y0kP888d2aXWTK47EQVdJj00j8whWuvV6xSD2iwx+RfZZafx63zM556FV38+mnUj2y3lpE6blo72vk5Hircs3NegsYEodbJXIWjn+cX3poqCvfbAqAeGZuQdMTo70W0rxOOT7bZuSlbHvFdWK6SPkeG7ZKTv/z83pKTeV86AcfH5joVohf3lbJxYyjQbZkNE4TKsNtwJcGoZUIytdM7hTU9dz1LBjkgdx/jB5hv6fZDZfxyAHGM5MiyJ1kNjYHJJ5SYL8ojS2++CBfcrEKWUpqk9gH0/JfnTYNnmcNXMn9KnrIevV1uOJodQTG5coUbmiSt0567HL/YbBRjsUatM1Cl1Ppoq8dd/c/DwRL4pIoYyaUKnFjf3relAthYV7OHjHyqO26X1SGlh+l6E4HgUFztNvqcQXPi2pZfgC16JaQuJqOv5AhrjYhJtgJbs4FYOOpBmkXxL6zssof3SspbemOIyVYPplJvA+WLA426dADR6dRMhn2ZZXkIaVjGP42pNWXoiIIokElpqMwB/kgyFiZPRe8cOr5DgZIAsL0SmRYrLQbzYQ7kgk+d4s6Yh2Jpyvj9MDEFVFlVp3RUcNuRMOh6MWrFXcJC4D5zDA+zNPAxXp/9cwp8wAHCYHGwhhYbxCWdhHgeOPUifLkybZgw6SaSu9kJI+xvIvQmRrbJGg1t1mAs+EjAyG9dSEmwdOxamKr7zWRUxSpexEiwJK6ineKnyu7GIatAUns3D0bpULRNkBlVDEFKjJhC9cS1k9E2V9XcohJYgTn+BMYHtCxUhCWHz83qhB5KE/yJmzhy/jqopjqN4I+E8kdLneWEg8YoXX/UwEV+a74yC6ViGrczwwmqOilvfXnpbuT3nlCEubTOsCLJiUfpETq/+tN7NeLW84T1Ssk1ITeSyyVvLsJsAc/EsOqR9sQ/wGnH7TOvAVh+wseztoWNWIpccUhcxuny9glVkPV2L2zgGFHDLTU90CLT+0NlXNpxDILk/m7olJJzDPDRhU+sZep1JF/0eXaRPBM9cdFxIn7S9SlNEIBwdP0m9aBp9xFdkWPmR1gBkezMwg1Xrg7yvqTSiVqCgEprmlmUMNKuGOdHnKege7kRga/FjctrsThbt/i3Upo2FXDRNN+nCRB9XS4yx75kvvnjTS6JmNkat8MsWiWHymIoJI0EM1Lwv4jWCYjTD+N6ZSCXXMM6lQ5pbPSgZEBmtSvEvA+23hs1vszO+P9+UqR2O1JEiv5RbCwf+csa3PUQNVkzXcE1Yqsx9TGPe2Yy5TOmP0t+SXXqM9TIv8RJuwxuJXkq1ouBd6Q5EwzGA2X34eRZ5mzsbTWRIovvsrNhvc0L57c2dgCzE7mkerkr0Z9IBBjpUKcw7QLtMMc8BZIIliR/3/V52PTeSz1yClOazV8Hho/i3gOQahRg6wUxwvJvy1YdhhhkdMF0CyS2n5kRaSTp1qooARvQ2M3Yelya3PP9FZNSZ5Cm4UVJoC/TrwE4XeX/dhCSBhzghYTIs6243MbMntDm647xCmrf2Uv9m76ifkl5vVuk7P2pzS024+oEIbDsvXVQXNnFPHDDoaXg+BkUwWtNsqWClKGlUaa+24uM0bKWmO3GCX6z6PPeEFWH4+yVcRaHRHBmr3OIkO2HMeCOuYQ/+zI8fbzNJN6dKlieXihHBAhNYvwZu6O6DeJFn8J2RjJFgOmezo1hn+roTq8Nu55OLN4a7hIDj/lzpzqKse1VaZa3kGBngxwaIzeDPVMkkuPDt/BSaKjltRLgmEzP7WG8M+EWOUojXAJYARpOjjLF/NuaDyh24ySRaBfz1XWJCyR41HQ1OCUpxLLfaz6TFW4tsm9q+ZTRc7BkxEyBx/yfCwzvnNRnK+wFxA+O8NQm11WfR51L3yhs++ySzofuvy6O41AAOyXnYyHSilXQ88qxthcfJ6jq8hESHYW+WQg67sCQN2SZ2siCWy7cjeSRvtKbqUk9UpXqKdtdoalZlE1f2HWoea19h08U+t7dwazBb+jfsHYv7E02Bl57jHokg+okvsaHZ60a8/Vsf/iCTFjJseaxNBAY/EW8HhEPajA4DfLz990Z/jnn8ObgVIJY14EGfothSr/ulH0hhulhLr/0Ltre1LGGN0pHW2XbX8d7ytfCvdXRKH9gmgdiSBmYWUd1+fbgIzsqXaBM4nV4Cf2Fk5EaKpKUHcPkkeS9IQRA+aVB0YIWr9jnVOdXYWsIppdGqZHXknPocpr0MBSLlcOnDG9EWqXmIWP3rZo5Gu5OcKgTDQCnnDSUiYZNvApYoNisZVqsQREQ3M7JCazhHX6XEq7mjeUayx2pLUaPzD8iSU4PSJOXR6mbU/uzyHoKuFek75fD459aLaavb1IfM5bFWY1UWYLkgr3+VamRCd23+01uSrIv06/XS1Lwl0IzYEsD2VWg1s4WsH9o5laXRmGMh8RENhtypMB3mWKDRzqZ/bfYjiQr3txQhDZhjyiH2Nsd1Y0QOLPUMX74oJYudQnEAkBW3OR3AZTVCqxxaFm+fXv6vlAbJo05FeUyfmvsGmXRHyujkbS+lfplqlz1vFSLTU1Q2BKGYG9Vnvpvy0Pwiw9wTJ+yXcr+Vl0EBjL9vZooeJ3icImq3FiVpqYZKDVyR2NW/GZmda9xpZhqca1NgtD6M+qQ2DM+5yJgDiQ5Mg/qjn62it4poTE456DtdZon14RyXC81b+e85Z0jNSDSaYC6Ih+AqYQHaoo7DsjWlsmyahgW/gx2UW3MNjUyVZVsHCGdv4Qg5QVL00uzxu4qY12SyNTxDII76sIdjrrTJ+3Nitrbq9K3mNRwe5Va4sESEgxatxF/v45J7fOYIihjFjAltcKLuI2Bhvt34Ysh5YF7jVJs/7ICdPNwF1KAfNG3jekh52XHtyvN9Fnq8lE7Cqkz4wElZ3XCPg/MM6dSFmD/74H8HNL848/a5kqeT2qbD3bvgJCrbzD5n9X65CNi0Fi/HhcKe2WgcVsc1sDigDsb+yB9pkGo+SmID7vY68q7wPOtJdaRISJxyaYL8kVO4r1DP6m5w1BOqopw1ZRNNuIAaXiR0/jZtT8cT1THZCb7W0+3LocBELtMcpNYjv3VPaSrwhyPWYiLwT+JaAWAcyVHniPnRhZUM9pkUCNDYq41j05ytSL/auY/zIFpYLCQREOkXYMK7ufG/2jChER60G2GKAuHt43Uhw9wkIDyUED2hCVIEHwz7Fq2HPnjYBME6Ors/bTIFARm3cKoYZo1T5wva+52O/vtH+BjqF+PgARklP9MJ7iTbjMV3nuOZXf8BPn5oVmgbNzPi0hT0t2pd0mD0AlZBQwh6ULa1QbHvv+tH5G8FBzGWTgjAoFMkk0FGg2mpEwkypXo7u5WuPXI31mmKCtME1+gQAd3vXkOS1NooWrnpB4iW51egCG1u+W1civySDsK2uw/n34RBzmL43f+C8ZX9EZR3Li2KN/YsmaAFXpGL2LfGipaP0uHuwXjt47YpYTaawX/CEkcyKmJeYsat2TUqCwgAId/xA3fvSkiM9TbNGAkWQ6FlWZpr0zqKuopM42yYDf8Dr6zq3Y+gPYin/SCRnA1r9DxYdVmmiA+81OqoKjTWdFgsczQoQ/iuYRznARkteaqoinUo3Vtm33Wpo+Sgcx2VOR892COywbYfV08nRheR3aktdZO00PU+hJG25bPfW5ZI+W70EcNCjkuXROGRSfYmDkCc2PtP9twuv9reMaFe+Uycdpr9FWglTY7jY8BD2ggCCLqO5TbAZrotwrdITBRyjiXC5lPuUoKqnOWx2kO2dCbv4ckSzzCgNutAwNkhihRJv2H/blw8MA7otJNGBd0mSG9h7aX4aH/Cu+d1KCJjk2KRsxTCLJgacPivLUUsuXVLD9ndrrwdN5CpCS7vOKKMyxvIue0nuEz3Ggsp2PJY4Y0Mbw9mstn1JG++CtIGqPJNi0I5eb6R7njzM6jCkw30KhL7z2vS301UXX3lbbzPSa2UQ62SVUzUgrTyz+kLLpsLY4vCIq+oSblpWiwjAzRw9UB/GurJG/t1TSd7LMzpJKEqMymP4S23tzi10ca4LIdBuf8yDZ+H5g0n9YFDqi4C+Au7S1KTmX1FZzrB/zNzRRAKuGux/dvM5ZQoDi6grsv09i1gzvWlxKUEWxlLT7qujd5HW9ntKw8fMSKRT1hpj1fOqOe2BnyxY8Ob02ay9SVCRcR+wqPx9aeCsufPyKOxaTBVeLzKlZEEOYoXLxHfEEH6yn5/qj4RKazzoYyzlj1qI5r+FYAKV8RMAYEQjxvC44Q5HawUsWfJbGUv0wC6PL/EjubAMebyEQDLgF/YI6wzxzIZ5YxLG+vSxDhfdn5XmsVh/0TgbmZttr2pmcl4rEtVzQUoXX/DbeZz6nZDIIL/R1HRWxakdfCkpms1TMTVLQ9KAWlE3NrXM1z6QqYyGhJkekz1TAt8rAZmaBELu778FHo36keqf8N02TS4wqwGTWZO3UE/FHPqZCD4IRHRM6UzTfMBnFhSdZvrxESlZcvZ/bCoFsL35q3l1RO+FbsbdIYBAQPC3WVEQKos5O9aa9oSJTHvFLFxQJq6rA8nmujwAxSNCmlkzxmbfZwsAxdAHxhoDn1E6s2KKXnougVMl7NL7iDKqlLchB+UrZxaOIvNUGY2wcDs0IItWuZF/eeYerpWHyKhxR1yTxMihQE/mZD4MDEy2yzrKWtl/JCpU0DiQYn8+3dxnbFJyGRX6cBdzTpCqdV9T/K4aEEneZvByscEvM2YjrX8rG0Lmx9IV8EcndVb9CE9bIHb9SPTSS0a9ZOh5+Y8ASR1eCZjt985mRwEDfZdtkd6iVUHRAIkiwvdODUnLVlotSypVCu6Nigaxjm3Rv1abtde4/VfFX0YYNvMcEkEjGLIgxyu+e6i+nFI6aRt5F8XzcPaFdlfyl2EhNPRsX6V/KiYNR6BPY2M8VSj+THL4RPHI0WpJ9w36hq4ADYVbaeqKpQXqwN3xdR6cUwbgMMKtf86v0vBLeT5mL5yNjM8c49DB4tLHZtzfifop4l4DVS7MVfyI5nyppMTyZDmMCjt2pLrMxRCTDTEfg6Zvb24Ekkq0bDBuTUBbA1m6UN3KWnj618lbniRtOG0X+kAerBfZ1gCKbNbEjk0U0eOdo9m6RI2HusocqoisPmnGH6rQcPpCqylAjRXp7Glwm8qcJfdlzmDpXOwutY0ubKqBwoHa44H0ej8d8k3nIh4nIM7/tvPfZLS0+vguYJyTcnpkXUdrS6lyAxnpn/Y5TQMp+n/Uipy+6hZlhkl627IZidIpVmY6vBMF5FqNbT7EzvbSczWs/wI8uJq5boKrk8XcAlpvEraPi0wyM1lIHWh7+zHD9bKShev0hEasiSCTtg4zgYPxfQRZyAsxZLR7rpndVjrLMlgqNCZGsekHwIxbgaBsh3zgFbywut8IbkfVLP3zshWMBh8Q3O9MIijs0J2gOE9rwR5sjcAKft/Wpq0TtCwILxuoGsfE5e22KuvmRz2ARzO/QFXbE7Osy3ms1lPNk47AjnxbHUHb18Q3ekHfec59k3BaiodiHR61v3zT4agAVptkHMsJQJuon6Hi8hZs1G0DKYA0vWkDNw82Z/tR9yMfU+saH66N6EO8cMi95A9u4mwm7HAhf0qp6wj4C//UfsdAHQcrnvABVrX3Aw+NN9wlEVEY3hBWHGpwpql+JBp7EtFFOxalWQSwinGtPmcERifwB5KWDyWb0b7dGVpp2WKoblGOWIcRXvjjSFECMRORPU2H2fq7v3VyChfNdF2b2T8SNfKYiVyuohEafAR79tymIlEQHFpJk3HOora1xNR4O5w1bNiy2qegAYqqURTomJ9cOUM+yDwpZkRpCx146aJBa+qSQERflZtP9d+X77p3UylcRJc9EGN8Sys3B6vEOoX11XMgdww342Lneha3m6u54P5gFwlV0sOibrRgk/4IWXuURGlRljAGKqS1S/1qPvUx3VUhYgJQt+Ttblc1ecJhW8eGJnu/12IuyPsFrWUawIJnHwv0pjfMMZEgKRKEtj5KWBM9iM2KonvGfSL6JLkb5RkKUd2kJVOesGm++iRv/gSzQAyv8IZFuDbJvsMGBuCENv2QosILIBYZRS6evBbVPmfl1dUwZwHqXIFgQIiuKeGAfpSPUIKHp6D9JOp4v6u4U2aJE7wTWUeyVbfhs+L7OQPO9l5A3cvtUoz4Gjl5/MRs8B+/Ink9M4wLARg/fSxqVUYPOusxinrao3YpePyO8fYjcQYDHAkXvoexnAwI1ZBOOC9pSI4vLyPPmwLq7vQcJBhRHxSXw2JfSoDr77r/tWo3psy6+Ev6vvFA9hnlrUb0cNreONyISOi2tB9oI+JrjNjiS/RD0aZiDjOreSakTqfJEHW+MIOUIZ81k2Hzej4DP7pMGoWeSgKvTyQjYU4WzTa+q56cP8/xuGL5iAbxidTootKgd1egxXXSd6qSv92YruRaqPFwHQXwGvEp1wW1g+kygEQHBsuXuvmv0CdDy38LccSeKohUW98TtM7nFV4Ha+G277cqSaOPWGkNuHwFvTbKmUDAclDbpiVjMm361CSmV95WQ/EPPYZKVPohp0aVc23I9l/2wqnWbNPipZYMZry9Yd0die1f+dHHGigKhL8Y7DB9dfZhtv8fxIOdEsJdZPE/Icyn5nlmZ+iH5i8v8/BRyRjjfI6GAjbOHQHuPWnBatzXJoWELJzojDdHnBtI5P/F9WOMxYH26jFKDDmejdDJS0g/aISNTB2slsrDXYehxhTOFYZTKNDiUiu3jtjzjohGL24sdTj8sIqcc5FhpFnYVlyIox0hcnY/l5f33fivPhhO5TQIKO1fVGDwdacfKyTXwZ853JkXuC2S0S2Ifb1PUaNwYfRYO4yvdSBrAsjL4lcocanKZ7BeT61IW0nTgfDik+ut7Z6swZFL6kK27CBZgJJeLoq1BrEWOTIi5ZLT0YFXR4U3HOL0qCGUMP9uuG9/bSnoWZS1QA5sphY0UH0bc/ZsXRvcOIo+Wu6U2sb5dt+0uJFmzZ+AAch5xVuH6mGOMTPo0327EU21VK4otkyESTIQKFCJQkJ7bT4hQrogL39uAwYnJWKfwrS+VMZOo12yHaD+AHjl2osKbqKllICJrXIBF2bNJ2hdG1knU2rPxrZerpVqIJM5B9/lnhG20fkgq2eFryLt1+5r4QZXfH2QbRMQGkXtPr8kpEMYW+mBRJ4bSLG4v8w9vOpotbI8uSqCO6UydfLLAezWRpSFXnpNm2tZ4+l67JdCEorJ4rMF0W0sobDeGZzUy+lwxHuiaHAWbpOTNY/A+9jZpWP7pqzimVBRKNO4bA2Qj9Y/ByQVCIHwsjfXZA748YR/OWslmZG8Wk+M62XdjnXYErvOiSNmt0SWlffcpGPizRc20EWSaDUIhrFv4VjsWOvRta564ORIYjdfQFv46RWQKAxToAcB8vHUvPJjLHSlXBkHWk4rv7+tOqcCVNPgFHqoPf/RHfezmvbH6qc4Wwa4kqUScVJekESCO5/HfL12gBKnsEujtzf7Vm7Baw9Zxmw0ZjLggoKZuRJjq1YwSjSBuOUlulxRv8kd9gOWmLl3gQSMJ8f4C797l33cu/cv+H3xwH4fvhu+3/4ft6/D7dYB+H7wPw+3f4ft1/D7ZAMhXGu1HcEe7PiQx3N9SLPYAXAVkpa2TSGu1wKr1X1zDr8Lz2XLqFZYvMZWF3orc/ZoXR/Q2lfhITc14Wyxcju/gteA5xZizn1pN3AUN1fnHRy1VbezjUp6UmXffKSf9OjvSaHp40iRbL0SMtfBwlMvw69qR0FLJ6945lwgHChNpMPwdeQix8f80ZW79lW470l4tdt8YHp4h6caBOIiP9W56oMCwU8ElYQD3fze+GgkesEi3ttun0XGGZByutsLg/LU4P0bRAEO0ZxcmYTzcvbAEueslqlpRxpBKitrKeht/8Xf9PRsXx6Uqc2dNSpgpd8BSIViYLq2d6FgtGfO6of8J002WioNdY9fXVA9ekVuH/PoX3Gceh1ZbLkJQN9Vut+Owv70QQCuXbb/lgCRAI9+chtTUpWAmFHCTsb5mM8KQykTaYX4LnR2CKosdgQlffHhuKXuMbp/bneDka/jkCsqxvGTQt2Ka93xNqI59aapufRGhfKp5/YczkVZvwY5flplcOtpazK9R45bVyCZYO1Lhos8tslhtZybTZmRc9/BQ2Sd+dCZY5K+IVd9pvkjSOui0ESeOFRyWqNl8b8XbNhZJ/i1YHHqVcs86RaKmdnaPeZ+Owr6fgBzdh0WBPbGCl4Th0lvVFsDogcZ/y6E3CxE5fYSy/moXIWFi5QlyTLcS7SowK4qfuuNMXc2jOA3R3HmSIkUKh3tc5B2QL6T6L+9yOLSGpxE0fqsts6SXXttGxk2MLx3IFRO+dPPEWdn+bZw9sFkyNpOclZQmvz4dvGgxSlDiOKIpuipWYgXRv8bNbWYZizwph2+pSTtJncaOSFbzJ0W5qyDqIUmtvwoVD9xhcaERA2+3hZW7ltNxKivpi7ebxJac3ApsPv5qLjEVjZ33IQ4t71PeuEfXLluKWvp11v91AbvCfCHkkNEds0EoGUevl3AUtqD2p+a2sAdYZUMgCE+UwDg3RLa2X0eeVdcsR+yN7lTnvDdRb/fI2nW6X6Or33SIEYj4aC0LIkiauOL0SHl0ADpdnI2hdmM7bUy8APOb7N6dPBSIGxrHp3KNUf11z176PlZnRXcDxKC4zuMb2/GyRPCwGxKk+ATQyN6weejQpbmU6exZ+bP2NRmLHOz0ch3uTuL28snMCbABFhBZh8lNC7q1owMoAdfeAdtXnXhCtmJ7+dnFcktQxe1urnb24gStrCrkZDtONShqoiHKgRSkNlsP51UT2kopoqibAWHPLHZU8YoRnrZ/4XBqa4woyleab2Iwpn741LgDWRslvPe5B102j2Iw7EMe77BiCCMfOJp+T/MDwIKHzPaCweZJNXGbE5qMLZFFQQySgMXVjk3TMJjUPA9hOpTGvdoTRFny8fNJ1QcvOXf/dPTmj1xECFjshinZY3Wi1Xa0eR1z5TucueUh4OeWQDM7epPo4TnsIwVzu9dB9pMTPwVvwaQTpsS8x79kv4viwGe0GACYCtBwS0DaFyBcvm3VzuyeZOZq4GsdxALD+iwP5VGwHO0KaPTlGV8d58SiW8H79gf24tEgaeM1kYJCcdQk+UGJhdc5U8cIXv2q40HuoPFAVa4+4j9TjS1aZQeyiBA1EviI+g4aS+vE8C4eeAknmGdEyN4jGIwkXwwI8CB4QI9PdUw/HuqIvcc2CuaCrJtTnHIEc3ReQ7VhJYNiuXRJbGQnvWJWWwnh1KFDct7EYBbjd4ycucwqjd6bzHRcJCplR/SoF9tM4Po76AWd3DFLtNmCQ63bDUfzz7Jl87PRFKTnL0pTAwFWiHMrPst7VKFEHjc4vjb5Kmz/lC9bKfYz03moFnoEl++n1GPFfNfr2pgpuWBqQOVmmR6OeoSS2fhw1ZIUwB5i+azM2lvXC7f1NSO3VMuzB0gvil3KttHJve4n+7Q4oVerGv62Bgq1jPzzfTN9MZXHVigLXusxGiJxIhDDor5eKUNocYBRHJl/G6L9rqby1CsFFu1u6dGTbNhobxbLr9604PxapRTO3ySmD6Cv4iktsuaTTiy37maIghBFr5Y+9RQyDOgP0Gw9OzsrKMrgekQmaDEVDCo4q5/MDGjxJsRpo2ucI8kYwTjCBxtqs4asrtfUJ3DBXKIDH2msaL8MO8JSAUmSbEmrxkzj5pHzSUmx5Ac3lkITcmJDkDTShsNykewLc79cqoHuZ7H259V0d6o3VW4expM9Lya3IyK3oEZwKAWoUv5WpPObHFPP9hpkyxIaYykak+sapTHaklQ9Q3QoLscqrceO99vT1CR/kFc9/zUGJBpcmSRDmufaZg48gZAaaI4nB/aXFxJQrefE/3zo+Nnfk9+/l9C2m1AjJBKJXEsygXgBLo54o0h8qHfprjBigQDQWsD2Pq78h+TL1xVzdrd0V3fLNMetT10a48FGDm2H2wRbPOWccw4lFXAirLbH5iAvFbWnvM7H6hbtT4RFDvt2r0wg7GWQTtCZECb22XjQ6aMEKdlbQR3IbsUZ5dTkuwlquzK58yGRdFiJy3kcL5Esfhq9rzztlyjg2t8FHmduRKWWcKiQ5PUVi6Pj6YT9rgdheRVOkCd9bR6f1J9uxzeWHXTdkYahUMfKnJNnFEt91r2HWET3CmT8XA5TVFDRE7smsEK7opndE5rvXh31lsDT9d3oHuQFKtEBeGmiA4s7BUy1Ao9mZJbF8fRtDfapdhoIWa73L4bdLp1aUaiT+MlnBkN+xDUSev2bIhIkDQO7p6s3If5R6BEbZ2rfmab04RhVqjROQp5EddE1UMA4so0AClL/Qo3rofmOYMe/bJJ8rB+luZmhcShb0PEWjlwGqHn3ntfXVFWGC9fxCnBrVR6lr4+MEM0wBr1QfUXOLiYtYAGHeBfVDw3MFa7YEdEIqKJ3xklFKkuH4FF+BjaYgjGzS+f92xWTViC1wCSSjpjh5kXP5c1e99GIUCH7hjFUvHVrr4l9SGv0cD6x85DFVpa+EUvr7JWBSRTeiuyp2+nJLfbPPbzSYegYgcsQJq6TJncKDzhY44M4NBiyG4ecDNasZqtBQYjaCxxRkzK8aWjr4RWVa05E8c/orDqIZ4IyNU8CH8PvH0zK9g1RSysxC941TcP33sOh8OhQ/rN0XDFoj8DS/KoImWH2QfxVOud7EpirZj5XEsRgkM63QU6YObKZHxg2HfEZ8MkZssVgFw1/mfUc2pwLPDutLja6yAUynNGzpf88FGfAPU97OP7PWopJW3qAR9xXgME5pk3WLRfo+tZ7bFG2jQbTvVqN7rpOd6kK8v6OvdJoJ4V/4Hggb0EojidzzhlqPupV1U57fh5p0dNkIP29ROkFneB/4JTSSGLmdBpYJMCBmcCgvH4a3Tjy2SYqzywH7c87raD5d7FhyNj1+FVEYEazfNS2KcU5BQjj3XqFcTyEJPE/ly8fK+oxP0yQyhOCeE8istKF5nF5s2Q0gIntNwx5LTIkDFea+upMS6VZkhYDEGFu8De2N+E1k8JWl/Qx3fdePe1BsicUu3BEPQrbZnVRjoKydMMza3sd/GQbPQL+t47r8WmMR4Bsf+/Yss4lvVZAM6jGOF4RBteN1OXnc9dzCbgdCFHop+Tsqyet/5yKFGlI3xIvyHEnN8uzlWtwCob6W88reLK8D3GKhMxO6xYpQY2nyOhKfgM7rdE7k1dtD0zqn7l9hqGarTttZAPU40lQT/EkTFRXNNX/cGsF2HpCU9/SGBBW9eCJbS/ziM491qWTIxuSQbRF3CvGq2F44c0y1rbFrtEVZZMSaH1cGu7Qju1Fhct8eiMZmGbfIy6I13HWv4Qx+tPdA5rvwoBMrBAGw525pTjwoB4p5hZuRUUjHqZ0XlxqfUBFtD0ePRRl/4F5wzmCK46XLMcKP41/rRsEJqWAhDdnhFx7gBGE1sVRdSzHexXTRfRIeGTOce4mBWfU28PAc1Qy1c8gsw5G7z6uovwNYE0/xfK8ZVixe6f4LbUavx0dZjeRiX72WdV7mWgv9kDhODf7OZgFTCkOYSw6gi+11+It0H5SamSlYfRTqy5DLcl9bz7oTwvC302g/GbwfMpikn3pNO3H7i5RsIETx3GTd8LKnnTxGMfEIOncNn/bXl7klc2RxPyvWBOe5m1hhGqSmBvQFoDCmZYV+9sy9Y049FE5UMPNCILzBXFf5k7jjYH3lTfuzPmzYSoh3td3crT9k7xw8drj5ujxp8MeJhUbckjwfy2zE8nm3Tf2OiIS1EFoGmZSbnN031eERWXnpesdbLJw4JIBWuEYeUzOyTFBY32yVIk1OPXAeNIDp2a9DwfcX3XiyO8qSsCfuiOHWY60hb4sUwqs9ic6eUuzcSRv9FxGGam8Jh+R6XJhILu5YD7X3U+5QY3V1cf4DjthRCSCFc+thjohRLePHyCulGxp/o69AL62LqVzanarRgkEwQIj4tfKMzKl2mLXoMTi95MW+BNXz4L53byqxr9u4uLdnC96Ghfepkx7DwU4TWsLa6WfvF0RmYMzBylp53hxJyABiVsza81QBjV0tIpmHP8ZD38w21xeXD9X1r6sOe2ze4crAx/2T9vOGtqWoA2mGZ1Ie10D2oiM2hfbqJYZa12KkgBCF/7jJ+NEwEXrqxHK7VZ/f8t6/vYv9H0lLepstL8cvzFM7fhISaj+Wcke6ZJNZ0Oo721AJeNC1OM06aYty/SAiGpEvqObY9KPAWU07bJNxxEuXyw3krcs7E0MuAStZNQ29aygeM1FQDkGzBTg/KiEW4YXdUX9LKyKl0I9kI85MFDvuI6lnDCibjvw0RfvlZRnxdmsyn8bfHx6AhfUVFB734tB/fiwSjHsUfvjCLygGk/xy1ZtcXTYHDRqvM2x/6xoejvhKOGl8oMfsaWFWPwRmnCGbrke2z2jw4NpVqq7W1LDLWNYdS4tLEjvpZBAFc+LUN1PMnrVfmgsOAjFrtTWGBE/rY+c5U3jNYSnLRI+kU+8R/7x7yC1eNN6a2TBo5VfQbzLpEqQQumN4b4r4No/z/Wvqi1FPnC4pgM28CklsvzzLjGiORq7W/YC2JOQgCJXeUPX+3pUGGlbooQGzVQUQFqbWpavBfsoPdZKu9z0+/q1yjjRoCL6RJu7G0uVj3N5zq9LDa09PqLEPKyVKLfbD7vnTrOFLs17r/JYJkN960Jc7R7jKVj3H56apP24WcddVBPZNHKpSMBi8UMXsVif6XQ42C78lRuX+fXL6YNjHZgN8PamZITwP5lJPEazaBQsLqejvWjEiMqlYQNzWQ4NXCOpX9Z+AN7E2dkYk8RUol1Bvewy9cYqs+PWXmzxpGzsQVrZFjoXjYdIe9UitUVy8erffz5Lum3b2KmX+oijo53p+85/soKWyKKqBPCAYk7FUqbeD7vWHUYYJFdkSKjBsnzy7gNcLOfyhxwcNpvO0Hpac8tuXJo9hepEvZwKHe3FkWVky0vUJ38SMf0MRqkWy52cuS9APH8kepLKqjZyFiASkGjL56L8mfw3Utg7KjGe7vDanAIkc8XIJ3xXaMZ7uPlZ7n04acoqs/cPqLHnZqLFVdPCIbQ90WK1Z71YZqeXXbMu9Wf6njmMS1DEdEFq84GP3NA1EuCWG/+tlo2Pt4zSGNXfSqGim7dn4/TDiuJMOrX6S3TV3/USp1cjlBT2LN9gPNCOt4RfKpyI1sCX3nSHhkMz5QX+giuCHlzX9u0/fD6mqpL3vtfXLwG9gHMffyzI52L3bPAAj6N8gmi5p2myZS3WHyN9k0ljG49YFRyAs5J4SUpeihvrDlVq6yGXtDIhlXjvyW3i/2b2FpundLvbUbLylMTvZq4Y/d8fqgNcOndVK/iWTV+xrPcJLxSO/YMrY+ZjEqbhedP0lK0NHmAYtFSbOtkDQMeF7vtLMqTjlp+s0NLM3zr6tbDunLHF/yBbJ6vXZOqGWiwoMUbS+jxBdGZgzUQSO6VyDzUhs0J2KJlwNROBFuWEGGchdEdW9sLmv0fSxzEUAYMN2AzyAkXcLDTGyQbS4Ei37ku5yFtglRf+Qj7CCaprKTw1aIhryiX3H02i/KjZWogqEEuqa9xuAJoe80IuvvD+60Hw2ZyZnCMMI1HpFfXM76YDRXk/YTrSep+SUnfbajD7/8RaVCPVRZBnXc3XBKPOtRCiyv2lkLt4g6b+92GYZbXluwbChEg3FGnRcwqNGsRN8q6aSLbVPPMW0AQiEK/QGxSnmdD+EESXT3tiWPMTWAZ53vYwf6m1qXMT+mjG+JKGn2qgewfvWpCoCnuZfQqy9LZetWczK8CI3Jl6qXJfbUUADWj2yQuABC4qlxy2paTSB1oJ4vEmiU8nyi3Gw3OOKOXABUvM9XRep+YqIgUeKpZhY7fKun1c84o2F6O1Na5qqeEwBo48Z0J12mR5JBTq0zEjjX1ae0oKU9C9fzFc17dTCWyDirMG7WSv6mPUOewxeGLiktWo61apqHM8GlhJprYr1uaD0jvsR8F/8kpXz48P74SwwL1P1kWOCxo4dmT3Zv21XbbGb4SVl0imVsRIM7dC6shDJ+KTJwxj37/x9rJziD/zamwV3Xyas6WFXUN39YDaeET/V0nsVtZACsMo2m0c6hhLnHVpkzn4HBmW0pLRDaW4GpWUh0ga/IiZ/M9A40L3ss6rYnVcGxyB4ItTABxBOASkmZwYALYu3ULfUhKWHPI57LMD5yLnZMvFV+pEla86nI9cXvgCEkEdAw2LxUdPrHVI114c7bY8X2QojgCvUJeNsdqNXtZLdSCbdqUHJSo+fR+XUKkRQJVgVrARY/jSMqpZ/MHs/9Y/ExhQkQ2hzoY/byfBC3q8JM37z4oawzeE51iwcdgMKZtWLTVJYDNOy+rqpTNt8xYgvgi+B4CTMP9BeyBkog8u/RGN+IJWYmU/JIFWetZ6np1TZacpAF0sRF1ZoCEPPImlrF1WVvP8N87E1LxxdD5B+d918yA1jA3BAf8cEXKzqgXTmZgMkXwwDrll1gIush48HFZ1KvLEPVd1/CaqoDVxmlNkPQzuO6gWKYLgWtv1Ww0EsLu23GA9P5U7S6Ilp8Izy4VgOtYrhITtC6gALrPbJalEsj2leffsa1PZeKApDpOq1yXT4LVSLIArVaEToK1xRGkTGxYVZ34spF3Qj/XEkyg1pQu8ahvjNRZ9B5w/cob+xMLVMRFjJrG/nL4FFDxQOjFeiojfA+7Pqnun/qq246MxWltre9xiglf4R59Mjh82H7yv6FZQBVa+gQZSQXQJfVR9WZfdArwBhG9s9z9BtIhs65hon+t0DGHY9VhzMJWDG3/oNoLcXTP+L+vlMmJi1NOTUf3eldqX992hJ6di0m6F4XYsz2P5KYs/KVJkkfWsv2S6NA/3yIkw9dk9+NfUBl0A01daoIlMmNRcFjHIZy4FlIQeSeMhClUHli1genbO97ZG3D84OqdIreVcgoe/7Y9plX2stjQM4jNi3xxcFjHm94BO0d+oAzmLZTzOBpI0gJrbmQ/iGGQgLLZ/q65j7TEuRJKY5KjsycUZFeSfRSLqnutPS82sWz31FBB3h0jJFTxZC7+dDG2mjSeNm+kGegXYSLYT/xGKpc7lhhF4HkaEQRTbUKXVDNk8WApBaR0dyhevQS8Kn+5Gf6ZdLJC5f6b+JydUjdQ6T26O/IS8wxNkkZpD/kZo8Qm2AeJ8IUGxFDpbdsyToLkD+5eid9jlemioeG2ZSgi8F8YWBCVjtPNew2TI6AF6vwUa9nN7wB9q6VSSu0pkr2ZzCzZXBDhKyB/yUZxsP/ZEMqPB7DsAfQ6TxcKeZG04qW4hBQ4GVtNDsdfYCZlKWIXtyNHD3aa2l8QRWEVPmYq3193HpX2wz19eFI6zZ08ZjZeOvqgpF1tRv84T+AD38CcTEcttRkcRAp79DzRGJvXjTx8i8yjcNt6XLQDHpG9X63HZFsCUISzUtV8SCT9pnwqxH1gPCj/bUh9ykpwN5hK3iSWS+hliQouIqxz3QjW+8vU/VOWb33P51rhulY3rJNodiiwb69KGwv+vHugq4YWHhgOaAW40gWDMQKrCoegkhX5/6yHVbSLPovV41AlugCBy+mZ4bCwxAQyvNzYgaFj5FlvLBPFssOI5swYkGajxVBGcGWV1JXUS58C2c25NUeS5gHtjBvqk1tibKRhU7beyZYKKZkObqI58Ttqsf6QltiW3SNqvhwJ2g84e3xsL/DguiradKavuMLWJYAXTG0AcNcGrxh6mMdaN/jD2xHXaacSebd+/q+8B7WaT/lZztjhumOKnmloZwBwVSjgbr6PUuQCNmCHjLGBNvmvG3gJvtigxoZsC87nriv2KDde5p7XOXjL9X1erI7d+ZWh2I22y143hmmWV892ieRIQp9fTU7WkcOadN1eiC1X8I7ucgQ7/af2WzRVigzyTZb6Z23K+5+JiansTSCfXFBQtU0DKigUgIKZcPAepYNVcm4psMnJ8SO7PQB7YjTvlcAScH4Nw9vJC3UJJIiUbzTP8+VpmqOiPXPjICqWPxJjkPUM6xXzDNgUX4I5ES1A7Y0cMTdOgJFJ6Pv2DhotA4YfsLcVWZ+TQzWJcCDKTKY/rt+YWsp3wOMSpi8iFcc2V4+t1LhgWBWw9zTrw/+ew8QdRYMoLh8OEbExh7+3DFuDe5KTMzrBArgdEY2QD+ntMD29EvWno7JjZmzbRwnNyhIdFx+yXg1RuTGPTDcvN5h45G0qBpAV+HnxGqgeSNDfdk8BsJ6aLXo2jBxZyBY5QH+hGVrkkRFuELQoicdsoIZcYTlbtCXFW7ltlHSx2VHOKO+3Yy+nrbUfRrqHXTWXB06ZwSGZXczdNKFdj5pgiXCzCV+sIjRa8fcKPGucap6jM4+dNvlcLgI9uBEg60dzi26tU1/7MxHT/zTxMIPhytEpco/Ocduvz7NKT66iOS8Q+cxBokOoLC4sBPu0ezRGf0PdShb3pAz6Br1aeGsDN3luFonO2xEew9A2F5eYtVm2z1SVfa+KivikBYzYfBFBXs2azeMCGjhSSciC0hk2c1kZZyBdBVt0geW/ltLJaWZWYoJ4oQfF8uQHZ21SiRonNNIVkUq9Tm2zIyT+RTNQaU5BvzJEuQQWKoE2idASwOxttX4ahJ6Vb2TVRef7QHKgNQCF+rBfYe5vIt7sg6z39aq5CdxG/hQAJh4Rmv24ptO88CGcqJo9cZ74MRXGrrM5eLmvazO3MKEr/atGQ86YpIwiypIBo6pNfjEjQox7STv5Pls4H7mcT6tWOzqBCMDN/syl8oZbGm5x8sOuRmQ/VNj62Nr8AXt0ST0jdROKC2GOm/1EDtgSeGNOZEINFT0RC+Y0izH7p0pw4XX4CuQ+n8n0BQLN+w5bKT7YDcrx7+5EdXi2G3ErfaSTTpNX7kceak7FeG4foicDBxNShCDsAoKBOFn8W5EBKtpcxIfz+RkQ/kTPhOw3cwNtJF2O02Ef/dO/Y/d/WA37I3ue3vwnGn1sPXKdtmCLqtavQ4/FAnvQ3TKBDyjqL7tM5SoZygzljBigqNDuoFmG5oiK8SnfRx7BmdVXhZSXnDLu1P1699BRchhhwzhWmwMNekNzqQ7ccgcUa+GUozM9PEwsDUgeDeI/H/N0+aPqZBe3VkdctQXjUlvgRDVWF+1aMechQptS/qeFXgHt/0JrgFO6f7SqwHlhVlaEPmHd82jNhJElBJWvYfzjMbK8vTwMz6duLNUhXohPuxT/myLRTq4XOEodpbosDhDksB9RqxeQCujgNrOrxlleeeVxtBBZggMtdk9c+XzVEiBzpuj4soQnU78bLqW+XgHrcmZPjthkbdzKsMTgSa7Il3Zg8QIDdfpQOr0teUrsRWJPuEYpSs04ZP3eWnDgajux/LtuDdRG8Jpza5I6ksib4rngGLjyqVJdMj8bc69I4z/ZUQeSp3S84d+IrMCuITbGDSMusSKUzSl14eT/nUyLkhjz/dsMEa5I1koA9hzJkyuYhHfgds7Pt3fxtBVHLeRl44r/yZNVzTJq6OGFozuGmEkNdF51tSzbw/x/GcnPBQ2gK3dNm7r3lEhIyHpUktKDDO5UgCG/UqFx2VoX3XFP6vGIRoetsSCpQDRY8Kyvwl3X7An0ylrf3zPE+GdHRGA0iimVGAEQfYM+0eFgj0sb3FcRN7sUYZpcNIJ6xgkcmjwc2aaDHd+LpMwg4sCAVJAwWWnpmJcelfbDRnbLaIluBkE9JsMD2iurBo0ABWYvHm2B0uWlEaTi7skO1Qm7yGyrStQmpUUapCKTF9nixHtnZXT5SZuJGJLMMW7Uk38Q2vx8RqV6MTcL6ODtSRQG5EV9swmKVjuzayD5AAHRGHukLWREqx9gZg8AOSoV6FuxiGdFy5wa8nNjPlhG2YVWWpuPHiwfnZqgIbd6fm0IspRqgOpB8RA1WSih6i2Zi7njWMuSzauBzZbZXH6REhWhtipDJaoiznJm+TSjivy4o/XZ21dDW3BQ6G5cAC1TJ26YM2cCKyGx+D36A+RY8ecVuZ2p8YQe/0hFvhCXPmcOTdP+kISwaCMWmNg8A7d5gU3dCdPGWSh77FgD3oCLYvv10/K4dWX3NDtPfrKXLXg3neBUrbQvUxHpUKq3lw5/II26jU0Rx4j01/4dn/pR7dc7OC99t3Z1RCQr31jg6xKQT1LVmjZGWPwabeTzFWAynIeCm3c86CaEBp7PexhmkA3FUFQ6pEcBu678qn2NLVbY2LhwjJ7YaZJwLRWH3Pc9wNU9r1VzzssVmxT5gUwtm0ZuWtJmiZBBZjw1xgnv+N4VHiq3NUDwY4Z9yIJ16BYsbhIfDHJVEf9BI8+CYwQSKyaR97TghP6K5D/dWMXKUQtlYq9FrFGJQAe6m4tqRGl7nYwJJbzbszeHzW+Jn+d/yZT2GAVJznr7a8oWscI5zE5pFiaHOygdJwxxKNeTkNAUQzEOJD2OVXCnhcfvDGNVEUrLBFglbPkRklWnSaTmT4FIWj4Dwnn+bbMNzZBev7JSPVHKIXfGvLgEnqgMFuJEwJWBdcCxsI64xRylPgS3qZCVcy3KQltfYw6OH7Hmpl4kiAxdRYeM8fLr+znJ8rdp55YaruxbLJ2+hbWCgoBv7dhIjHSPvQhtxW7I5SnM5K0MPDfK7U6hPGp+NMyzGuKhhJ23hro+5m1dz1Y1CahV0uNigB67s/5OMAY7riWH8wH8gk8MAVVUr7PcMDwXlC82HDFGdaTViKn4C790n4fbj8P3H/h9o8B+H7sLvtP+H7b7vrNgH4fuF/D7Rfh+0S760BDhulTuvswzO/8zX5H3ryXEzJeGTQ7j0NrN5jSnnnIO6CgzuvPmD2HqSFpytjILOvXBz9aaPFTB3zXPhm3ReAVlHzYBVY6N1EunFSArTP6efHevTc1y5D03Yv5CWamPLomZux0L/OkreFUMZ4Vvm7bdfRz4TpMxR3HVez/XpEO6ovdagjW2YeRYxqvN7ZlXDLOo9SprJeU18gpYYNcvHArrcsLdr7fj2VfJpAJx6gCkPBC7+7E7qWM+hLZlxvV1SmpMShzcG52sKH/bMb294nyl6WqFAljV2mzGmRfNUabhqNaOjWdRFbGPlVD+23auqpSY15aOKsM1BKpZuHL6SNQB3YLkoqpEGYGq5AFaZL8jElY6YS8hFcBhXDsH59CK5KKeluT99E6XIE1WVjQkzwgN17FvVZnw9rlW/10VtpR9N/4vTYHWd2lG0LqRBngNdQvDyvt5gT1fT0N0QOwD8jcKEiZcRWsF8C8Km08wywjspOtWp1OFdga1kbhwUWElkDqGBivUSQPkN4Wj8KjE1uxaBeC0Fg3jJUPr57pcKy2swUs+JPdVQgtgNxiJdqE/tmNYcGyhzKK2XbdeIQPZKVRY0uIuDD+CEbxBTUnn50WrlFxkfNdSfIhoTc3Zutu/NwW4vtnEJd7fIvjY95djAb6atnR0Hd9peKhRvi4FF6DkDgIVyWgcCzQfAo5zanEO4BXU30K08Uk/bg975Wbpb+VTccWJuzvCrhHHrVny1ajp2c4p2j2HGHmpZpwiT0lBk3vOEP0yVNapFnPHa9ZcdjVUabBcga7V6whaiRgdzIKN5WaznxLNdUTUyfUCDLA4gWeaz75k/lK4x5KuOIpAALTldfXmEG5ejrNx8XQf84y6Z6Cf+XhnAGOEcm2KnTXm75zNoRMKt2c17y5/4GZttACxKUjlOuJKEle6sXDzY0czWcVMU6wagjLKSkslWe6qKXVi/ZYRP6xYxyWq1dqci7A/kk0f/zLJB5BU3AC1TKkt2ypjBOTuh38mv39jmB5AR+iono+1NC0Gb6RgAC5M/9YGuAGsGOPQNz9U+rcAHJSfsLNvcX+Kg5MDWy3NpX8oFL991xsWd1GDKQtC0YFZ71ot7cpBK8Jaf5OQxImxt3/G2AQRGOaoItXvpGcvvk77SQjSegTh5z0JyI6pVc13iq8bOPtTvkC2OrnL9bZBOawwFr8QMJJ10Hng0qTNj2dab6PavZ2qb7BgG0u1YlXeSemHmaYP/CiEcJEqLs1u4EIyqlxWD1uin6qndKNHLjQKsHMMwIJaUGmOp/ucu9euEtq0lYf1sEL9LkL530mEVVYc0eCbtbIFY4wGfpvEGoHbMwBXRGuOApCstfIF75A4cjWYb3o+xNxuB1i1OsxM8L6xUc/Wmmfph+poKcYjUcggH3Cd+zS+i6MH3YoSfcL90HxqrN4G1X1yDayuhhbMl/Z6xHbafe03WEFz1GP3XFIE3RmVIk92dKu8OSqs3zcKeuQ1VFQgOLR7FIq+H02j/8KZ5q7Nw47Av9MreXEMRS3T14XfRlXS+b+bE1s9X7GanOPUZNz0LcpS29fHt4CNu3Ch4eKWLEsOqoXS+FsIliXVwEucVSBnT5+PNdeRicOxtzirk7imvg9vFXBWR3WkhtfTBWjlwb7rlNFw6VBaJSa9LKkwe9AKkTFBJdsI8NHwB6nUMblXodb3yYaQLQjTKEwgbO9s5npBww7EZVUL2C8KRhjPC/rNRMgXv4VGJbCf3ezeU4hnyjfT1bI9wFYLqUN9ZnFhVtGRXp9uW09uNnOjSClt5/ihExucdy9LpMloBpcFxfP0fIn/2YBBf7f8tZ+Al4BUJLuIbwxWgprGYDzJ5IvTGwBXX2GdF+VR2rT0/kEM9C7NxT/NYKARYLdoktX6vtb5uD8SZOQjlXjMvh8qvBSAOpb0iNlI4HBOSyMex7YXKY7ai904regMQUEtyeXeXwxHTjIX9lOI4guu3zU+GEi/2XZYr2P2eOwJ3ezwxwaptOdb2tYpWNr2nVulTUyNlp9EV6fI6TQrQBILN5kHgUT6jP9kJ3iSOb92AtaDSp1VxeaLfg5EV+BrTRK1y1/o+c635BQZng0+CRYchvnRtDzS/AY/BWK9bkpg/wG/M7VMX5q93Lj+VBJE4SiCspgKaTJb6CmhELs8Zh0/3PYMkkLiYfCo1+pqxVJQ4Ao9QzQqIkD72wrn41HsmyCzXIw2fUs/4NAwzc4179NgSVDXFHFF2ZiIzcDi0vVJ/i6V33PsnFaiHcTqkbZ3ZBt7ilVW7aWW3IPZ9AaU0hpF072hsijZUmudcxICP6Binj0Y4xdRWzOUewxyvgrSFy4xHNYKFr65FFkykWXtls2vO+i+CHNOH9h68eOB/DksyKQBpEogLCZ3SD5xplo/iJNkUQv5i4BXs0MXnwd138Ibs0Kduh6WWzsxK0bPu+x6dWzqi4cNfPoek3EYI9TGVL/cl4f/x1ieoOjhizyriU4cFOvOCrabWwuPYsJQT6zIc7i5FKq3Suk/ROLN4wlRElFFdb3EeTSCY6L2V4hsqzOG9cjCxJD9SZekWMeTNJgSHLK7gNz7VP9iBDi7DV6FWcNb9VU8msat2uifI+EE6Ol5MXzhn2XoKpZRH3SSub/A5MHr6nwG+bmtPb619tlMi7tASEKQ5nwin6Qqox4nxutsoXxR+0s6lXJbl85gbyDzdx1lqWswi5JpJecoPiW1vOCLgPMqAk3LOyot/ffbpOGxjymcqToJQ+Ehh/MGRMiBsK0Vq5CIFnv8Zk/dC1t2Ctszrb7RUDFAf97SoIyAe/wyobm1xLFmcdcddByZT0QtfOaf+EuIQNzZaLLPDUKahwpltl0plcYYzy/av40hBM8YKV93x1hx/X8SaR1ah+MjbVOcA5ITVTkL0Pg3v915fKYxUDvuBQjYGgP+FgaPUN7CPM99dd0HAbisz3ux0MyXyHF3bgRuX6hnyYCaO+LERnDRQrenF5kTFGrFAkDqdbIGRdWvkw2C7QkMWIXDvMpHMnj4P3odiAAINi59GYgvgFZdf3l0g8FACSP+lLz4Z9Wk9cEb07vnb0Bm9IJ+CjZI/wby3gaXFU7I0QgW1imLhIuGuyTPZ1a00aV6zM2rVTYspyq4Ho3MeQpf0gYVmKIb9aaAF1nopLwrNXhkjl0GYgrF0QbNCK6DkbC0ZnntRVQmLZS97Q+1UflPs7zjMCbWljWHwjPbBn9WAY/AvI5YsgWhdWSQ2RhmMLhjfzn/oNWZrliVHjMhbxiFxdHNWlQvDjS++QjGM4AtufM0XKXp/LZTsKiKxPrjHVD3bHm6TIf6xV56XZbTZgVeQZov9lKKf9GrkXfLPA8L8smNlibdssTXDlP/ZxqgN/P33gHG3uF5fRfQsg0azsbZm4Wfe/0UBiIHfh2TlExJT6r8cMUsN9HL80HBsWJLM5dVAHLLwI76euMs6WxU7PJncJDSg74BbgXEGQ3S5yhw0erjrUNn1+4OWohTpBul8V4iMG6byrdPqNlwLr8glpyI57J6XpIO7f2KXsY392hZUugs3tkSxxLNHBh8n2FI3dNcAze+V2JVA+JU/uytLbAmhlgZueHjlqnz/fg9UWQ/tAmyCqL953rMsuLw+Al1l/O4yk2qAQw+CjZkjgPTQodCiQ7G0Zy/IpysqHUcwG3VEdlzO9nAMg2SB9M8aNjzFqm7PY9LxO8Fiyjl3MOkUlGAvmn8Ip/q66zamAsfyE5Re2fGU/CNKOZtB5QAO+FxXWnBwLt20uMd70iBBFQVt95PL74nt8zi96hrXBh8Vnsc8PNeY0xBQazIFYNXanoSDcn1N9ALXyKTfx+BhJqYDZcWtZXoIWGvwZVGx9jx77UGaQ95gA7q8I5adbbz4WyUQmoTFQsYDwCXTjsPFqvIECJyYfbuFdP0Ed2LKIUl4ZPWHfhxIE3rLOndO3OWNL+gToIILuYqpyBrdpl1PyYexLNUwDX0ly8ycIXg8A+qFcA4bfyH5LJ9jq9n3KTZ587JZaURc8G4hCKRc4Ia21YOeBkcpy8+AaSjj1FHbjg1RFHS51SCVElHQFBlgTYKN62x1UWTfBl9ihM5RbjhAP5AYeE+r1jw0kVlim0AkdPAdGVBIUOeJEUses83Ss7HQs6/P9pPWsZcM2ofRbQ0U7qyiaHqBxnEx6OjR+ydv3UFxj/V+f2mTOrk+hxKd43Jx352XD/capjDFsPDwdBqkT1yssNUc5NnYf3NempTKR/oAHCdldoYUNyjh0wNbxzBkWvm7oa4t4GvHyvx0sheI9S/PKkOEn3TEDMqTYWuqZLjqaOwgK8BzXn2IUyypVmTF/T3MbcWrz72Jr703XDVsywRA1PUiB4791eirDA+nPBtlipwsea0nH3zKqUnJqZd8mgLG4MQogHij5j0hHPYaDyuOHrQsozGwp8G6v9H6YpiGjM0qH45woZN87/HDV/js5o+mu5ZXM4uC2tn3rRO0C4A/KDKQ0Xxza0MV0iGNjZS8F0J5S9nuznn0935X8elHETUtqaBu371N89FFHW1drCO53zQqRYLNzhiMuGUIQXC06G1IzypPhLsKwBEaKGADTErJEucewCoK5t8KzTga9sRbKybiIuPMDVDW2f8F/m++XNz60F5jFEYd2Fh1/gZstoxm8k1Qt63KvkUCuq+teP8dir/Qm9wR59I3au6ZPM8fjIxd/80sVZ2cAtBpZtTdGo0aHNhT+ibrtL2nUAU/VNWGhgCnsGoBHBL1mrIrL62xbLjBhPlEIVlDJva7dSXl13zneYpdJUlAMQ72VRz78o1YUM/tXHz6wwL6SY6u4z+JX+rwhPNoejh61tE/i6ZAoVjrqHpVCfNML8cs+/CeT9l0yqhvsZe6gx5zz7LK8TxxXKPmCst1HwE06GHpl3HuoRAF23bcOWad2OVyy6FpAc9vKR76JgPZLxiQexd/Nm4pJiK1kZpcRtlnDqNMzYPqUfQyay++34l+Cw5RR2kKjbtFHotBckET3g2uPWC7kic4R9omLlAkaR1AsEZLujWN4VrgYgT9HOl+dAeyt8DyT5Yynk0RJUgw1xbrhUtuhfysqn2x5JNWGDn4mwUSIeL5STgpsvfRgZX94C88eSbrhhjAL5xzwTj9qlCNLN46hEZsk4LHIN5ZXsCqNwPaT7tA5AdRgbQKbVO81+ThrWCAmjDUtlNemFfAd3n09VRs9pUtk8ErvNHOD5yhg+ryY2V6UaRNXxEPQnfrWnbzhMsLRxdMSuIeEUbaqXr9MqP5rTp9s8g5UX+kjok75o4iRQYJScflIL8fqaQatJGx3MZVis12/Cs456CIu54yL7cLk5ggQiAtdtk/S5E14PTt4YM1kwaDxTufGLCavenj/aF/8cVH5Wm5pxlM9EfakuXaC43OZ22Z3B5reu3uUkKYHnd+eOdEa/4laqnHfeqqFDA2/ZPorMIPWn5z6SmMH9kMiKlSjt2J/7/0ESb/RFpGz5mijsJUxzV5auiFeblD47y/SeULTyXBBiSS0XE1qrImNE9IHLOiKCXYh1Yr/M3hVAXD3IJQJ1LgAswtAHMyEjSZl3de4XtyOFIbESr4OSpoRHQIPpw475dX0ls4/jhFKmzq3lAODGanWNE5LdaR3k+4xIShQ8u15n3DUx4ZGO3r9vGr7oNrjGIQm9N5v7WjbvTdmQuvsYi7qMbuAWv5BXgaKHQtktbPFIqJ7dmOMlu4X4ITjUF0foR+Q5LE1O7yAPz50hTJg3UZTsr8xXJ3aKmYVAEiPIh6qkvDN6i6GuqRlL7PgL7RCMaK/H5qMvdmZW1fzJR6dmL0iRonvV5zeGQQKQJDMZ02TXT5B9Fe3Ly903RKYn1SAxm/bdyAd3ZIt0oEHnSodAy2o+fL3l/xmOP30Gb70fQrKsutZmo2tlx6CBJ7DjzYovioZoMdOU7YVNu5I67HC0bmE+2F94qcac3514wk6Zrs8/OFfp8R8wvfucdYMWk2w8SBQbmCf/M9OdcJYTec6l7BQ7kYB955FoIy3K88/RzUMTgzH6Z/dSySxa6vMsdcK2tb/+IfiOLO5HXUapVY1VNA2ehAGhsdN3TuH5DzYFdvtbwrOHI/7vk8XKri4gtW0KKBRd7GtI75Bk29wzCGpXcSVI5QKRX/l3HZVRbSVJ/qlj5IS1XRH83gUavIfgvyBUKzBudwjTeCfXWi5lK83Ac9J0JAPq6jHTE1NUt9pZJyYUQOGLvnj7r7K1yUyVaV9ATxo3p3uEcDYRhj75lz7qkwgkWq041H+QuURjik46bqPfqr5Ad7/UaRRlkgn/ZjggJph4H/apGMq3eYsO9Ki+/rXkDaWyWe89hhaNzPHX2Qjn/OgbbavpXz4T9ISBQQnQk5qYnwlClOSsgMleOxW93S2UFJPtlCY55BVhTrmCTw+zmfviswpVumCs3rYD+yo8BCrZOqcuuTPiV7dF4Y05APJxkjbUpUS6EAECKXeykOomgpPGEvfEam/qsTJ68kyiDIreQlwbrj5N5ZJU4BNPXhwhAWQ0iC49j9ORz9j0A+83dB2pauN9W44QgpiXyvp9wZawvoZ6hB7bfk5SVK1aAhBCzorkQLTmjomdBv9/F095liUd+5ecw/e2YmSWcMJRg2RkvtR/On2ARfL4coZm2KftaU0uNDCBIttrLssplW+yhzhyhHQrpocYBZk0AMHioukV8haDYWp7tCKiN1NWaU2c58rhY0bvG42UXCXkqvmqqzZJotJYiXsjqTNX5d9VbvvH6JCUcm8HNenGBt8fELiDERPQB70z3HcExWYpG6eBWcsMuMfRt1ONOM5DKgphdC4rDrH/SBj8mzGTM7g/LGc4ms2sE0vtlk7HZjuKe1fQGfdk7wUOJMHhCvmuK47qmeDZVAC7HaiD10ViTczfss1YkSiKOJjuivJrq2Ar0nWmZGPKb32fwYiecSnmcVPYobC7+d7gLov04YyQQC6ZJYvPzkJBkMMNY5oIMNQQr4UzgIwZHs6f+txedaM1PNar736csTcKj1o/RojGti1d8oRH8ge1JUhacqM5ShbnLpmzloL6WJ0Iz0RxT6Uvnq5hhWPPrvZo/d2nOnKzj8RtX92/T1OS5tbI0L/8jB3ybdbIExo/6f8mZWSAVfz/U3zcexthQWbi5bw88LoxCBgiASgrF+GiSoZF4mbji+QAmWB5kj3z/cZOkP9WR6EabSAVUIA2VUsrauEui4Za0CDHVKXS6NRb9Mn5Jiy0iYSkkl/aJlcWxZgGF3ek3Oxw0VgAKzGJgNLETGlQHU32dinFrfeH7Kn2CB1BFMwfdmgh8mmTLWrEtdq/+AGOpZbl0pAJbRHEraZgj7iC90whmhStPMzK4BAX71eQ/s96C/4mTBTLGItgKmxqLD9SU/G53HVJIRN967O9B9r3J6/hJr1yReg99fZUHrgKebJxNgnACTPptdmg12iig/V78nc0lMLhcXwB2iTn5M7PbNceCooEcc7WzC9wiV9vdtbYiB1aX5d4kRHzQVPJkFID+RCaBcmc0COnu3i+3ejgCgqtilWBUKp0eozxoJoIFo7/fp8dRi9zNsxzU6ncqu4ct77kAwZuKh2/0YeKKfSbtm83WmX2AVRtB1qTQijfW9L9xMsMxS30/HEnVr23B50zI830VZBVzWa0PN0S4jkJ5+7x30A+8V+6Xi4CqK8dnsDM6ekOh3IN1uK9Qwpw/yG+vAx4nLejPESldFOnERF5Xdw/h2z1IlYKASkk/0SagiBRZtagzQx31R1JnGDQqxK6k6a75D17x3B70KUXyhjK5OcJLJefXNKqenpLg/EJccE49NpE9p+VIeEkymSn9OKgchpcLBP83ILfhF1eE+Ftm8oBnAGEl3cB7g1J/xKTN3AW0ZcAe9X1gZ9nv+YkP4hb3U/4VnMdtdOnjCJqBed3m3Sdz7k1I2mmaIPG7LY2wwkLY4PJf5QIMvDnuBJPpJ0zBvLmcBNkmXYSaYKGv9GMajUe4OytwxS9271YFuvOQVXf1ebE4rSuY/VIwa3EPOSaicxfAzDiyvVWvJa6b81Shr9BqJbIniM9+ritXUw/oWaC3HMJ7/KreXFxjH97aGkIPB5Bb5FujT1378CWIPQixXVGIE9YRj7lpU6D871IKce9CzoqecDHYSc9gpKGBQPfuT+6HlYHR3lgzQ9TOQb83TnEJUc+PoXYefNHeY8URJgAsXYQHVtF9mqNL6M3xxuCLIVGrgAifl9LpavwTnDAcSbbiVYq50Js2WHI43cdA226kB/SJpq2+LGRrENXU+/lUfLPAXp/vP3IPUYs/kPIG5z0QMu8VbU5vY7bBvjTs1SID5hmh5xP2QprZQmGHOC07Z/D3GleNQeM2AklkW1WMpYXok8fuUiYlBUPVZuoqRmvuFJj8qCCfGfU9rwFTHr2+c8lh8DhXYuQ8toavcSumoAqAg0OQe/AAItz24wayNdzCVvDL9x/Tlq+8Ih20bnO6YOduV+ndNLA8uzzwysEfWVcwM6gzR619jq5s+MYPzmA9y9QG4SFBRlR3fW3V1k9EeRgkOMkJg98XWjqB8037+2Uyeso6ZNcClQPCNsC7Xo3EGIzVmQqhOxxKjIa7HSC5JH8Om9u1aGDDtSyXesR4DKOFDZK9WxPPnw/qaBzkzA6CklznUPRLMM5RpBrCvV6+kv6MEqmj1QEN9LOd+TpKE3rD9fsqVIHy3BTv2gWp9bwvT05P9HOJrAZVnXy5i1fdwTHs50jVEVtOYlWoQnv1RgbAbY36deJ9AJ3CDygo4V8ewffdCCJGTjo/aWRtEaREQwJhDDLa3fndyoxSVdDT30FoAT8HW/UZg7+zHs8vg9D9sYc9QAzEWxNehyCmJzvrBNttd8txLVmvVsmP1jpUwFa+0O0VBtSAU+ZEFhe/eBzu5zyVTy1pHPZfGBMS+WR2629f5DEjm6W+SfATNWkIWUU7A/N+pdKBh+U5vhz/rLeVu9IY69OF4PFJqxU1R9uXtjAzM+KdKZm/knvbaXAPmCPwNPN9XegIUZUXo7b6OPLus0mDwgPXq9RH8Kp5bpUPLXxi6rlVfC2voX2jCa1cNd/ZbXn4hPRTSzfFW8oyjDKQXxUbi8Fx6Fq+uMHvWRkEXGR4OSZTzKC5uDqazZKdpbzP5DZoSrVqhwne9prlajIG1x4aD/rsmXvGHnSGankwYbFHB54E7rMwvoaAd3TYLuG+4CGA+1nSRGiv8L8yCZXsiiAUVhmV8QszRF7q/iFWbJKhD8a3y3Iv4VSqqF64kX4FWFuikAraXkUzSNx0UjkvHAvH6xrj1mBbauHUDNEcjxX/ItfmJLtkkMj6+6ptNu2bezQfaH092zlRJTh+l6pfF5rmtDeOpVtF6Zz3xwX2MrQR4XYEXU1nokgDcaZUUoxxxBFw1vxb/Krcce4Wb5cgE97foOMsHwTnFGHw01bpb+bL9CMgPQPpmUgQFy3ZMBDeopbtffiMsWrq5QYzh4hN1L9szUjabzBs4YtVZwDfWxIkmW4tely1CypNGISQXXTzVpJqXvbNmwfWmDWNSU2bW5VOh7EUB1sU2AbwX1kwSn+10GgK5LN6ZpkXs54/x4zkI3tZqPtim4bSJHZ/ixXcv1lK1Y7q8LfdgoAgnbdeGi+sU38VNUQC65/my2BXeD8sP001dNpaa/+1f7BPIUdfpKD0M4aJVgGNXNh6sV7M6bas1QMnxMgiSopDE8kcS9oGoTyk7Oje5HgGJbyeF2ZFp8GK/G2ckUbjnTOTyyI+SzNx6vk4f3rgD4yowYKCVsdLHqMxFzGlbQzw6JuUUuiOX4VAQ7VAMWRSj8MPTEIw4LW4QnK5xzzeTCYUmpDmdKgKGoZKV8FSW85RsyvEfMZ4Faxc5rStp+moGj9AHF1XbSZ6ZaX2APHulLnCEDMzWOCF5D3FTWc3J0uNhbpwieBIT1Ywc3v6ojpfawb+hbdLnBks+8+KHggu8JZNxZFmA7pA+d3gsuL0kWqmpOq2e6uhy+ZDRqnhmXY+IUkaBFi4peNaoD4J4ZWJV1v44kEG4BFN28pp9Tv8sR80gUZNj6PT44LdqKVZIPbfyYSbyJsqPkDsWx9vk6ak27ofIw2/bIn3KE3pc0frecNQbm6kuUe9QVJJ6x1WB6x1aBJBTwQ9vAP9o0d6fq7ojEQD3E40/Xrmim3CYfw4IztAH4jVaBWJke6hkJrbdByGmEympxWkzAxskMkje7A6iA205F1PhKVcTgH2Vt6E4kg+rNnzmdi6Fe9+bZ9lMs1Z8RJEACKZiagl+iNNv8H9vCBbhlHsWBuz/FFUQaQ8Mox19DwgD8qwWA7G6XDOAE3QyCIx1P1wk2atE7Hx7HSue3UvCULxHtkxjnjuinPu9LhDuwGIXf0w7lgCUWLl2x7+zfiOQhICpK76w44lrPUmZDJAii3QJGf9nzjnXaG6yWvwPf/2Q== \ No newline at end of file diff --git a/api-test/src/main/resources/config/bioValueEncryptionTemplate.json b/api-test/src/main/resources/config/bioValueEncryptionTemplate.json deleted file mode 100644 index 28a3c9543..000000000 --- a/api-test/src/main/resources/config/bioValueEncryptionTemplate.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "id": "string", - "metadata": {}, - "request": { - "aad": "VGhpcyBpcyBzYW1wbGUgYWFk", - "applicationId": "IDA", - "data": "string", - "referenceId": "IDA-FIR", - "salt": "LA7YcvP9DdLIVI5CwFt1SQ", - "timeStamp": "$TIMESTAMP$" - }, - "requesttime": "$TIMESTAMP$", - "version": "string" -} \ No newline at end of file diff --git a/api-test/src/main/resources/config/bulkUpload.json b/api-test/src/main/resources/config/bulkUpload.json deleted file mode 100644 index 5ac0a5552..000000000 --- a/api-test/src/main/resources/config/bulkUpload.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "category":"masterData", - "files":[ "masterdata/BulkUpload/FilesToUpload/user_detail.csv" ], - "operation":"update", - "tableName":"user_detail" -} \ No newline at end of file diff --git a/api-test/src/main/resources/config/clientPrivateKey.txt b/api-test/src/main/resources/config/clientPrivateKey.txt deleted file mode 100644 index 2b5f316b0..000000000 --- a/api-test/src/main/resources/config/clientPrivateKey.txt +++ /dev/null @@ -1 +0,0 @@ -{"p": "0-40ISxXDmC8SVrudg1e7vQskyWlohadm83RAkUyH6S4h1aTPrNwLVn9WANnyRTqupD1Fr8mYZ7f9nZ2MkMj45UV8uiIjQZr3crMq0YGkzt_LvwhLduWOJ_z9_9zZNHckXei4G8QQFJQYb3TNdGsVVSwff68SSoen8oqvkbkAJs","kty": "RSA","q": "6as88odcbP2MDT9lkahK2z4QIH25zsa_UdLgAtLwDVpekXfJNOQvuqNY1Gw3Jws6uPDLGcEK42MyeOdCFqklFTvDJlJXMFvgWrmGbCUMvJL-rFyO-kCTGnFBX60ozdJbjfBt3E3QYx3G907Ziuu9o0azey1DJtq_zKwearE-xTs","d": "BgdeiCZbr5qZ4haShg9uQinZRYPSUTYc_58YgvQ0WkPKm5fINOgOJPvimdKYBt8OtIWbhojTyn0TKrGPPAqFZCnGY16HkCUN31MbluD2wxYz6SPpZ1zsmP8PbQUVozjEFeLpiTN6nubw_skS_9GGrl1CPb25wTPlZtI3uQ5IiPL_YD5j_w5_J7tejAaRbhlJj48ZDa4CR8BkaUi2QaQmLoyiO_1O-U-Nf17-t1C6zFFKKHQx2lNltE1xFQoHB4WuBA2GnP5LgNFJSLv0p95gQK37nP0TTcuiZVlvFcmbGI_ilWlxRKJUD3mZR6nz25X4SapUWswnrnm7JtUA_UGVGw","e": "AQAB","use": "sig","kid": "1bbdc9de-c24f-4801-b6b3-691ac07641af","qi": "pmL_G7T4OF_pr2RCzkkupi1dCbwRX39bMEIs3uirvkoPR5CENvuvsXQ0Oias3taxzLa4nG5JVXHkyOIX8UsK1NFrzZPRKbfNX3h5EAnl3I7cZMtoYJLnawUqaNTukOmDChPlKx1fVjUwsyNn5HSAnmBiaOmm_RHo36tPhgaPUtE","dp": "e3b2X60ZOoMYrhOPgK7hc4xEu6TfDcLnJvGMpinxvYWVCyNgvNKEs6cNdMznFbpd1TrFze6mSZDpIQh6a2W57sfX9Z-Kjb4D8T5IZi9xfSzYN2MjYTfgGDT3SK9FZqLsQMLV3LJXYWGS-p5AAcaZA01HVN-miWlEVgrNQ_TAt6k","dq": "Yg-BqUoTCI4y6xBS4JieqXlXLTt18YfInF8BsU2yffgRvbxmTPMB8LJCQgsT7iexQhGTOkCgACMN-F0ciAP90vZchEWD34B_G7PF7LZzrOOHSvAg9HaLBUrII424lP-VenCOuihRrna9m-WUN8-MquutwKCTEMg2O39z2FR_wic","n": "wXGQA574CU-WTWPILd4S3_1sJf0Yof0kwMeNctXc1thQo70Ljfn9f4igpRe7f8qNs_W6dLuLWemFhGJBQBQ7vvickECKNJfo_EzSD_yyPCg7k_AGbTWTkuoObHrpilwJGyKVSkOIujH_FqHIVkwkVXjWc25Lsb8Gq4nAHNQEqqgaYPLEi5evCR6S0FzcXTPuRh9zH-cM0Onjv4orrfYpEr61HcRp5MXL55b7yBoIYlXD8NfalcgdrWzp4VZHvQ8yT9G5eaf27XUn6ZBeBf7VnELcKFTyw1pK2wqoOxRBc8Y1wO6rEy8PlCU6wD-mbIzcjG1wUfnbgvJOM4A5G41quQ"} \ No newline at end of file diff --git a/api-test/src/main/resources/config/errorUIN.json b/api-test/src/main/resources/config/errorUIN.json deleted file mode 100644 index e146f2df9..000000000 --- a/api-test/src/main/resources/config/errorUIN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "URL": "$IGNORE$", - "authRequest": { - "body": "$IGNORE$", - "signature": "$IGNORE$" - }, - "authResponse": { - "body": { - "transactionID": "$IGNORE$", - "version": "$IGNORE$", - "id": "$IGNORE$", - "errors": [ - { - "errorCode": "IDA-MLC-015", - "errorMessage": "$IGNORE$" - } - ], - "responseTime": "$IGNORE$", - "response": { - "authStatus": false - } - } - } -} diff --git a/api-test/src/main/resources/config/errorUINIdp.json b/api-test/src/main/resources/config/errorUINIdp.json deleted file mode 100644 index c666118a4..000000000 --- a/api-test/src/main/resources/config/errorUINIdp.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "responseTime": "$IGNORE$", - "errors": [ - { - "errorCode": "IDA-MLC-015", - "errorMessage": "$IGNORE$" - } - ] -} \ No newline at end of file diff --git a/api-test/src/main/resources/config/errorUINKyc.json b/api-test/src/main/resources/config/errorUINKyc.json deleted file mode 100644 index 96c1c0ea9..000000000 --- a/api-test/src/main/resources/config/errorUINKyc.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "URL": "$IGNORE$", - "authRequest": { - "body": "$IGNORE$", - "signature": "$IGNORE$" - }, - "authResponse": { - "body": { - "transactionID": "$IGNORE$", - "version": "$IGNORE$", - "id": "$IGNORE$", - "errors": [ - { - "errorCode": "IDA-MLC-015", - "errorMessage": "$IGNORE$" - } - ], - "responseTime": "$IGNORE$", - "response": { - "kycStatus": false - } - } - } -} diff --git a/api-test/src/main/resources/config/esignetPayload.json b/api-test/src/main/resources/config/esignetPayload.json deleted file mode 100644 index d20391e31..000000000 --- a/api-test/src/main/resources/config/esignetPayload.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "sub" : "mosip-resident-idp-client", - "iss" : "mosip-resident-idp-client", - "aud" : "https://api.dev.mosip.net/v1/idp", - "exp" : "1667833124", - "iat" : "1665154724" -} \ No newline at end of file diff --git a/api-test/src/main/resources/config/folderPaths.properties b/api-test/src/main/resources/config/folderPaths.properties deleted file mode 100644 index ad6bed29f..000000000 --- a/api-test/src/main/resources/config/folderPaths.properties +++ /dev/null @@ -1,10 +0,0 @@ -pathForValidRegProcPackets=regProc/Packets/ValidPackets/ -invalidPacketFolderPath=regProc/Packets/InvalidPackets/ -validPacketForPacketGeneration=regProc/Packets/ValidPackets/packteForInvalidPackets -syncTokenGenerationFilePath=config/tokenGeneration.properties -getStatusTokenGenerationFilePath=config/adminTokenGeneration.properties -pathForValidIntegration=regProc/IntegrationScenarios/ValidPacket -newPacketForUpdatePacket=regProc/UpdatePacket/regProc_Update_smoke -updatedPacketFolderPath = regProc/UpdatePacket/ -packetForSecurityTest=regProc/Packets/PacketForSecurity -idRepoTokenPath=config/idRepoToken.properties diff --git a/api-test/src/main/resources/config/idRepoToken.properties b/api-test/src/main/resources/config/idRepoToken.properties deleted file mode 100644 index e8337374e..000000000 --- a/api-test/src/main/resources/config/idRepoToken.properties +++ /dev/null @@ -1,5 +0,0 @@ -token.request.id=mosip.io.userId.pwd -token.request.appid=ida -token.request.username=ida_testuser -token.request.password=mosip -token.request.version=1.0 \ No newline at end of file diff --git a/api-test/src/main/resources/config/keyManagerDataDeleteQueries.txt b/api-test/src/main/resources/config/keyManagerDataDeleteQueries.txt deleted file mode 100644 index 3ecf9f7ce..000000000 --- a/api-test/src/main/resources/config/keyManagerDataDeleteQueries.txt +++ /dev/null @@ -1,14 +0,0 @@ -##### DB queries to be executed to tear down the data used and generated during the test rig run - -delete from mosip_keymgr.keymgr.ca_cert_store where cert_subject ='CN=mosiptest.org,O=MOSIPTEST,L=Bangalore,ST=Karantaka,C=IN' -delete from mosip_keymgr.keymgr.partner_cert_store where cert_subject ='CN=Techno.com,O=Techno,L=Bangalore,ST=Karnataka,C=IN' -delete from mosip_keymgr.keymgr.partner_cert_store where cert_subject ='CN=Techno,O=Techno,L=Bangalore,ST=Karnataka,C=IN' -delete from mosip_keymgr.keymgr.ca_cert_store where cert_subject ='CN=apitest,OU=apitest,O=apitest,L=BLR,ST=KAR,C=IN' -delete from mosip_keymgr.keymgr.ca_cert_store where cert_subject ='CN=apitest2,OU=apitest2,O=apitest2,L=BLR,ST=KAR,C=IN' -delete from mosip_keymgr.keymgr.partner_cert_store where cert_subject ='CN=deviceprovider,OU=deviceprovider,O=deviceprovider,L=BLR,ST=KAR,C=IN' -delete from mosip_keymgr.keymgr.partner_cert_store where cert_subject ='CN=movp,OU=movp,O=movp,L=BLR,ST=KAR,C=IN' -delete from mosip_keymgr.keymgr.partner_cert_store where cert_subject ='CN=ftp,OU=ftp,O=ftp,L=BLR,ST=KAR,C=IN' -delete from mosip_keymgr.keymgr.partner_cert_store where cert_subject ='CN=misp,OU=misp,O=misp,L=BLR,ST=KAR,C=IN' -delete from mosip_keymgr.keymgr.partner_cert_store where cert_subject ='CN=misp2,OU=misp2,O=misp2,L=BLR,ST=KAR,C=IN' -delete from mosip_keymgr.keymgr.partner_cert_store where cert_subject ='CN=mosipprint,O=mosipprint,L=Bangalore,ST=Karnataka,C=IN' -delete from mosip_keymgr.keymgr.ca_cert_store where cert_subject ='CN=mosipprint,O=mosipprint,L=Bangalore,ST=Karnataka,C=IN' \ No newline at end of file diff --git a/api-test/src/main/resources/config/mapping.properties b/api-test/src/main/resources/config/mapping.properties deleted file mode 100644 index 1e1908c8f..000000000 --- a/api-test/src/main/resources/config/mapping.properties +++ /dev/null @@ -1,29 +0,0 @@ -AuthReq.domainUri=domainUri -AuthReq.env=env -AuthReq.keyIndex=keyIndex -AuthReq.specVersion=specVersion -AuthReq.thumbprint=thumbprint -AuthReq.demo=requestedAuth.demo -AuthReq.pin=requestedAuth.pin -AuthReq.consentObtained=consentObtained -AuthReq.id=id -AuthReq.requestTime=requestTime -AuthReq.demo=requestedAuth.demo -AuthReq.transactionID=transactionID -AuthReq.request=request -AuthReq.individualId=individualId -AuthReq.version=version -AuthReq.individualIdType=individualIdType -AuthReq.requestSessionKey=requestSessionKey -AuthReq.otp=requestedAuth.otp -AuthReqrequestHMAC=requestHMAC -AuthReq.bio=requestedAuth.bio - -#TestScriptMapping -#ModifyBioAuth -key=requestSessionKey -data=request -hmac=requestHMAC -thumbprint=thumbprint -#ModifyEkycRequest -authRequest=authRequest \ No newline at end of file diff --git a/api-test/src/main/resources/config/masterDataDeleteQueries.txt b/api-test/src/main/resources/config/masterDataDeleteQueries.txt deleted file mode 100644 index be2ab648a..000000000 --- a/api-test/src/main/resources/config/masterDataDeleteQueries.txt +++ /dev/null @@ -1,91 +0,0 @@ -##### DB queries to be executed to tear down the data used and generated during the test rig run - -delete from master.blocklisted_words where cr_by='dumbo6' -delete from master.blocklisted_words where word='dumbooo' -delete from master.blocklisted_words where cr_by='masterdata-220005' -delete from master.machine_master where cr_by='masterdata-220005' -delete from master.machine_master where cr_by='masterdata-220005' -delete from master.machine_master where name in ('Mach-Test','Mach-Test2','Mach-Test updated') -delete from master.machine_master mm WHERE mm.mspec_id IN(SELECT ms.id from master.machine_spec ms where ms.cr_by='masterdata-220005') -delete FROM master.machine_spec WHERE mtyp_code IN (SELECT code FROM master.machine_type WHERE cr_by = 'masterdata-220005') -delete from master.machine_spec where cr_by='masterdata-220005' -delete from master.machine_type where cr_by='masterdata-220005' -delete from master.gender where cr_by='masterdata-220005' -delete from master.device_master where upd_by='masterdata-220005' -delete from master.device_master where cr_by='masterdata-220005' -delete from master.device_master where name='testDevicedummy' -DELETE FROM master.device_master WHERE dspec_id IN(SELECT id FROM master.device_spec WHERE cr_by='masterdata-220005') -delete from master.device_spec where cr_by='masterdata-220005' -delete from master.device_type where cr_by='masterdata-220005' -delete from master.loc_holiday where cr_by='masterdata-220005' -delete from master.reg_center_type where cr_by='masterdata-220005' -delete from master.registration_center where cr_by='masterdata-220005' -delete from master.loc_holiday where cr_by='masterdata-220005' -delete from master.reg_center_type where cr_by='masterdata-220005' -delete from master.registration_center where cr_by='masterdata-220005' -delete from master.device_type where cr_by='masterdata-220005' -delete from master.doc_type where cr_by='masterdata-220005' -delete from master.doc_category where cr_by='masterdata-220005' -delete from master.location where cr_by='masterdata-220005' -delete from master.template where cr_by='masterdata-220005' -update master.template set is_active='true', is_deleted='false' where id='1101' -delete from master.template where template_typ_code IN(select code from master.template_type where code='Test-info-Template-auto') -delete from master.template_type where code='Test-info-Template-auto' -update master.location set is_active='true', is_deleted='false' where code='10114' -delete from master.location where code in('TST123','IND') -delete from master.valid_document where cr_by='masterdata-220005' -delete from master.user_detail where cr_by='masterdata-220005' -delete from master.template_type where cr_by='masterdata-220005' -delete from master.template_file_format where cr_by='masterdata-220005' -delete from master.reason_list where cr_by='masterdata-220005' -delete from master.reason_category where cr_by='masterdata-220005' -delete from master.language where cr_by='masterdata-220005' -delete from master.identity_schema where cr_by='masterdata-220005' -delete from master.biometric_attribute where cr_by='masterdata-220005' -delete from master.biometric_type where cr_by='masterdata-220005' -delete from master.appl_form_type where cr_by='masterdata-220005' -delete from master.id_type where cr_by='masterdata-220005' -delete from master.dynamic_field where cr_by='masterdata-220005' -delete from master.zone_user where usr_id='masterdata-220005' -delete from master.blocklisted_words where word='dumbo6' -delete from master.blocklisted_words where word='dumbo7' -delete from master.machine_master where name in ('Mach-Test','Mach-Test2','Mach-Test updated') -delete from master.machine_master where mac_address = '61-D3-FD-12-C9-ED' -delete from master.machine_spec where name='HP' -delete from master.machine_master where cr_by='masterdata-220005' -delete from master.machine_type where code='Laptop2' -delete from master.gender where code='Genderdummy' -delete from master.device_master where name in ('testDevicedummy','testDevicedummy updated') -delete from master.device_master where dspec_id='743' -delete from master.device_spec where id='743' -delete from master.device_type where code='GST3' -delete from master.loc_holiday where holiday_name='AutoTest user Eng' -delete from master.loc_holiday where upd_by='masterdata-220005' -delete from master.reg_center_type where code='ALT-3' -delete FROM master.registration_center where name in ('Test123','HSR Center updated') -delete from master.loc_holiday where holiday_name in ('AutoTest user Eng','AutoTest user') -delete from master.reg_center_type where code in('ALT-3','ALT-5') -delete from master.registration_center where id='10000' -delete from master.device_type where code in ('GST3','GST4') -delete from master.doc_type where code in ('TestDocType0010','TestDocType0020') -delete from master.doc_category where code in ('DocTestCode123','DocTestCode321') -delete from master.location where code='TST12' -delete from master.template where id='445566777' -delete from master.template where template_typ_code IN(select code from master.template_type where code='Test-info-Template-auto') -update master.template set is_active='true', is_deleted='false' where id='1101' -delete from master.template_type where code='Test-info-Template-auto' -update master.location set is_active='true', is_deleted='false' where code='10114' -delete from master.location where code in('TST123','IND') -delete from master.valid_document where doctyp_Code='doc_auto_test' -delete from master.user_detail where cr_by='110005' -delete from master.template_type where code='Test-info-Template-auto' -delete from master.template_file_format where code='Doc' -delete from master.reason_list where code='TEST_LIST_CODE' -delete from master.reason_category where code='TEST_CAT_CODE' -delete from master.language where code='automationLang' -delete from master.identity_schema where title='test-schema' -delete from master.biometric_attribute where code='TST' -delete from master.biometric_type where code='dumbo6' -delete from master.appl_form_type where code='dumbo' -delete from master.id_type where code='NEW' -delete from master.dynamic_field where name in ('TestAutomationField','TestAPL') \ No newline at end of file diff --git a/api-test/src/main/resources/config/packetProperties.properties b/api-test/src/main/resources/config/packetProperties.properties deleted file mode 100644 index 6b783e692..000000000 --- a/api-test/src/main/resources/config/packetProperties.properties +++ /dev/null @@ -1,2 +0,0 @@ -machineId=99999 -centerId=33341 diff --git a/api-test/src/main/resources/config/packetValidator.properties b/api-test/src/main/resources/config/packetValidator.properties deleted file mode 100644 index 320f9e5fe..000000000 --- a/api-test/src/main/resources/config/packetValidator.properties +++ /dev/null @@ -1,2 +0,0 @@ -file1=audit.json -file2=ID.json diff --git a/api-test/src/main/resources/config/partnerDemoService.properties b/api-test/src/main/resources/config/partnerDemoService.properties deleted file mode 100644 index bbb432d7e..000000000 --- a/api-test/src/main/resources/config/partnerDemoService.properties +++ /dev/null @@ -1,8 +0,0 @@ -# these are the ports used for running the partner-demo-service, it should be same as in ida envRunConfig.properties -preprod.encryptionPort=7653 -dev.encryptionPort=7654 -int.encryptionPort=7655 -qa.encryptionPort=7656 -extint.encryptionPort=7657 -sandbox.encryptionPort=7658 -dev-test.encryptionPort=7659 \ No newline at end of file diff --git a/api-test/src/main/resources/config/partnerQueries.properties b/api-test/src/main/resources/config/partnerQueries.properties deleted file mode 100644 index 8d39fa4d2..000000000 --- a/api-test/src/main/resources/config/partnerQueries.properties +++ /dev/null @@ -1,135 +0,0 @@ -deletePartnerpolicy=DELETE FROM policy_group WHERE "name"='MOSIP POLICY' AND cr_by='pm_testuser'; - -deleteUpdatePartnerpolicy=DELETE FROM policy_group WHERE "name"='MOSIP POLICY UPDATE' AND cr_by='pm_testuser'; - -createPartnerAuth=INSERT INTO auth_policy(\ -id, policy_group_id, "name", descr, policy_file_id, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ -VALUES('MOSIP-AUTH-ID-01', 'MOSIP-POLICY-ID-01', 'MOSIP POLICY', 'DESCR MOSIP POLICY', '{"authPolicies":[{"authType":"otp","authSubType":null,"mandatory":true},{"authType":"demo","authSubType":null,"mandatory":false},{"authType":"bio","authSubType":"FINGER","mandatory":false},{"authType":"bio","authSubType":"IRIS","mandatory":false},{"authType":"bio","authSubType":"FACE","mandatory":false},{"authType":"kyc","authSubType":null,"mandatory":false}],"allowedKycAttributes":[{"attributeName":"fullName","required":true},{"attributeName":"dateOfBirth","required":true},{"attributeName":"gender","required":true},{"attributeName":"phone","required":true},{"attributeName":"email","required":true},{"attributeName":"addressLine1","required":false},{"attributeName":"addressLine2","required":false},{"attributeName":"addressLine3","required":false},{"attributeName":"location1","required":false},{"attributeName":"location2","required":false},{"attributeName":"location3","required":false},{"attributeName":"postalCode","required":false},{"attributeName":"photo","required":false}]}', true, 'pm_testuser', '2020-05-14T09:48:43.394Z', null, null, false, null); - -deletePartnerAuth=DELETE FROM auth_policy WHERE "name"='MOSIP POLICY' AND cr_by='pm_testuser'; - -deleteUpdatePartnerAuth=DELETE FROM auth_policy WHERE "name"='MOSIP POLICY UPDATE' AND cr_by='pm_testuser'; - -deletePartnerAuthH=DELETE FROM auth_policy_h WHERE "name"='MOSIP POLICY' AND cr_by='pm_testuser'; - -deleteUpdatePartnerAuthH=DELETE FROM auth_policy_h WHERE "name"='MOSIP POLICY UPDATE' AND cr_by='pm_testuser'; - -registerPartner=INSERT INTO pmp.partner(\ -id,policy_group_id, name, address, contact_no, email_id, public_key, user_id, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ -VALUES('PMP-PART-ID-01','MOSIP-POLICY-ID-01','FUN-TEST-O1','HSR','8651119791','hsr@gmail.com',null,'pm_testuser',true,'pm_testuser','2020-05-14T09:48:43.394Z',null,null,null,null); - -#deleteRegisterPartner=delete from pmp.partner where policy_group_id IN ('MOSIP-POLICY-ID-01','TF-POLICY-ID-01') and contact_no='8651119791'; - -deleteRegisterPartner=delete from pmp.partner where policy_group_id IN ('MOSIP-POLICY-ID-01','TF-POLICY-ID-01'); - - - -#deleteSubmitPartnerApiKeyReq=delete from pmp.partner_policy_request where policy_id='MOSIP-POLICY-ID-01' and part_id='PMP-PART-ID-01'; - -createPartnerAPIKey=INSERT INTO partner_policy(\ -policy_api_key, part_id, policy_id, valid_from_datetime, valid_to_datetime, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ -VALUES('PAT-API-KEY-ID-01', 'PMP-PART-ID-01', 'MOSIP-AUTH-ID-01', '2020-06-17T21:15:19.724Z', '2020-08-16T04:23:39.148Z', true, 'pm_testuser', '2020-06-17T21:15:19.724Z', null, null, false, null); - -deletePartnerAPIKey=DELETE FROM partner_policy WHERE part_id='PMP-PART-ID-01' AND policy_id IN ('MOSIP-AUTH-ID-01','TF-AUTH-ID-01'); - -createTFpolicy=INSERT INTO policy_group(\ -id, "name", descr, user_id, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ -VALUES('TF-POLICY-ID-01', 'TF POLICY', 'DESCR TF POLICY', 'pm_testuser', true, 'pm_testuser', '2020-05-14T09:48:43.394Z', null, null, false, null); - -deleteTFpolicy=DELETE FROM policy_group WHERE "name"='TF POLICY' AND cr_by='pm_testuser'; - -createTFAuth=INSERT INTO auth_policy(\ -id, policy_group_id, "name", descr, policy_file_id, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ -VALUES('TF-AUTH-ID-01', 'TF-POLICY-ID-01', 'TF POLICY', 'DESCR TF POLICY', '{"authPolicies":[{"authType":"otp","authSubType":null,"mandatory":true},{"authType":"demo","authSubType":null,"mandatory":false},{"authType":"bio","authSubType":"FINGER","mandatory":false},{"authType":"bio","authSubType":"IRIS","mandatory":false},{"authType":"bio","authSubType":"FACE","mandatory":false},{"authType":"kyc","authSubType":null,"mandatory":false}],"allowedKycAttributes":[{"attributeName":"fullName","required":true},{"attributeName":"dateOfBirth","required":true},{"attributeName":"gender","required":true},{"attributeName":"phone","required":true},{"attributeName":"email","required":true},{"attributeName":"addressLine1","required":false},{"attributeName":"addressLine2","required":false},{"attributeName":"addressLine3","required":false},{"attributeName":"location1","required":false},{"attributeName":"location2","required":false},{"attributeName":"location3","required":false},{"attributeName":"postalCode","required":false},{"attributeName":"photo","required":false}]}', true, 'pm_testuser', '2020-05-14T09:48:43.394Z', null, null, false, null); - -deleteTFAuth=DELETE FROM auth_policy WHERE "name"='TF POLICY' AND cr_by='pm_testuser'; - -deleteMISP= delete from pms.misp where name='MISP_Test0002'; - -#deleteMISP= delete from pmp.misp where cr_by='pm_testuser'; - -createMISP= INSERT INTO pms.misp(\ -id,name, address, contact_no, email_id, user_id, is_active, status_code, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ -VALUES('MISP-FUN-ID-01','MISP_Test0002','Bangalore','9840587080','misp@telecom.com','pm_testuser','true','Active','pm_testuser','2020-06-17T05:10:51.169Z',null,null,null,null); -validateMISPLicence=INSERT INTO pms.misp_license(\ - misp_id, license_key, valid_from_date, valid_to_date, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ - VALUES ('MISP-FUN-ID-01','r9YUOi2BvC9QVdZP5snsCeonXqdEZ9rQ0TroekqHMhX3c8mPfrtestfun','2020-09-18T06:53:18.150Z','2020-10-18T06:53:18.150Z',true,'pm_testuser','2020-09-18T06:53:18.150Z',null,null,null,null); - -#deleteValidateMISPLicence= delete from pmp.misp_license where cr_by='pm_testuser'; - -deleteValidateMISPLicence= delete from pms.misp_license where misp_id='MISP-FUN-ID-01'; - -approveMISP=UPDATE pms.misp SET status_code='approved',upd_by='pm_testuser', upd_dtimes='2019-06-19T09:48:43.394Z' WHERE id='MISP-FUN-ID-01'; - - -# updated policy management ------------------------------------------------- - -createPartnerType=INSERT INTO pms.partner_type(\ - code, partner_description, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes, is_policy_required)\ - VALUES ('Mosip Auth', 'Mosip Auth Desc', true, 'pm_testuser', CURRENT_DATE, null, null, null, null, null); - -deletePartnerType=delete from pms.partner_type where code='Mosip Auth' and cr_by='pm_testuser'; - -createPolicyGroup=INSERT INTO pms.policy_group(\ -id, "name", descr, user_id, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ -VALUES('POLICY-GROUP-ID-01', 'MOSIP POLICY GROUP', 'DESCR MOSIP POLICY GROUP', 'pm_testuser', true, 'pm_testuser', '2020-05-14T09:48:43.394Z', null, null, false, null); - -deletePolicyGroup=DELETE FROM pms.policy_group WHERE name='MOSIP POLICY GROUP' AND cr_by='pm_testuser'; - -deleteAuthHPolicy=delete FROM pms.auth_policy_h where name='MOSIP AUTH POLICY' and cr_by='pm_testuser'; - -createAuthPolicy=INSERT INTO pms.auth_policy(\ -id, policy_group_id, name, descr, policy_file_id, policy_type, version, policy_schema, valid_from_date, valid_to_date, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ -VALUES('POLICY-AUTH-ID-01','POLICY-GROUP-ID-01','MOSIP AUTH POLICY', 'DESC MOSIP AUTH POLICY', '{"authTokenType":"partner","allowedAuthTypes":[{"authType":"bio","authSubType":"FINGER","mandatory":true}],"shareableAttributes":[{"encrypted":true,"format":"string","attributeName":"string"}],"dataSharePolicies":{"typeOfShare":"string","transactionsAllowed":"string","shareDomain":"string","encryptionType":"string","validForInMinutes":"string"}}',\ -'Auth','1.0',null,'2020-09-16T02:50:33.344Z','2020-10-16T02:50:33.344Z',true,'pm_testuser','2020-09-16T02:50:33.344Z',null,null,false,null); - -deleteAuthPolicy=delete FROM pms.auth_policy where name='MOSIP AUTH POLICY' and cr_by='pm_testuser'; - -createAuthPolicyForPublishPolicy=INSERT INTO pms.auth_policy(\ -id, policy_group_id, name, descr, policy_file_id, policy_type, version, policy_schema, valid_from_date, valid_to_date, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ -VALUES('POLICY-AUTH-ID-01','POLICY-GROUP-ID-01','MOSIP AUTH POLICY', 'DESC MOSIP AUTH POLICY', '{"authTokenType":"partner","allowedAuthTypes":[{"authType":"bio","authSubType":"FINGER","mandatory":true}],"shareableAttributes":[{"encrypted":true,"format":"string","attributeName":"string"}],"dataSharePolicies":{"typeOfShare":"string","transactionsAllowed":"string","shareDomain":"string","encryptionType":"string","validForInMinutes":"string"}}',\ -'Auth','1.0',null,'2020-09-16T02:50:33.344Z','2020-10-16T02:50:33.344Z',false,'pm_testuser','2020-09-16T02:50:33.344Z',null,null,false,null); - - -createPartner=INSERT INTO pms.partner(\ -id, policy_group_id, name, address, contact_no, email_id, certificate_alias, user_id, partner_type_code, approval_status, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ -VALUES('PMS-ID-01', 'POLICY-GROUP-ID-01', 'PMS', 'INDIA', '1234567809', 'test@mosip.com', null, 'pm_testuser', 'Mosip Auth','Activated', true, 'pm_testuser','2020-05-14T09:48:43.394Z',null,null,null,null); - -#deletePartner=DELETE FROM pms.partner WHERE id='PMS-ID-01' AND cr_by='pm_testuser'; -deletePartner=DELETE FROM pms.partner WHERE name='PMS' AND cr_by='pm_testuser'; - -createPartnerApiKey=INSERT INTO pms.partner_policy(\ -policy_api_key, part_id, policy_id, valid_from_datetime, valid_to_datetime, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ -VALUES('API-KEY-ID-01','PMS-ID-01','POLICY-AUTH-ID-01', '2020-09-17T12:56:17.598Z','2020-10-16T02:50:33.344Z', true, 'pm_testuser', '2020-09-17T12:56:17.598Z',null,null,null,null); - -deletePartnerApiKeyData=DELETE FROM pms.partner_policy WHERE policy_api_key='API-KEY-ID-01' AND cr_by='pm_testuser'; - -submitPartnerApiKeyReq=INSERT INTO pms.partner_policy_request(\ -id, part_id, policy_id, request_datetimes, request_detail, status_code, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ -VALUES('SUB-PMP-REQ-ID-01','PMS-ID-01','POLICY-AUTH-ID-01','2020-06-01T12:36:03.897Z','Need to submit the payment','in-progress','pm_testuser','2020-06-01T12:36:03.897Z',null,null,null,null); - -deleteSubmitPartnerApiKeyReq=delete from pms.partner_policy_request where policy_id='POLICY-AUTH-ID-01' and part_id='PMS-ID-01'; - -deletePartnerContact=DELETE FROM pms.partner_contact WHERE partner_id='PMS-ID-01' AND cr_by='pm_testuser'; - -createDeviceDetail=INSERT INTO regdevice.device_detail(\ - id, dprovider_id, dtype_code, dstype_code, make, model, partner_org_name, approval_status, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ - VALUES ('DEVICE-ID-01','PMS-ID-01', 'Finger', 'Slab', 'xyz', 'FRO90000', 'PMS', 'Pending_Approval', false, 'pm_testuser', '2020-09-28T14:17:19.411Z', null, null, false, null); - - -deleteDeviceDetail=delete from regdevice.device_detail where id='DEVICE-ID-01' and cr_by = 'pm_testuser'; - -updateDeviceDetail=UPDATE regdevice.device_detail SET approval_status='Activated', is_active=true, upd_by='pm_testuser', upd_dtimes='2020-09-29T05:59:20.268Z' WHERE id='DEVICE-ID-01'; - -createSecureBiometricInterface=INSERT INTO regdevice.secure_biometric_interface(\ - id, sw_binary_hash, sw_version, device_detail_id, sw_cr_dtimes, sw_expiry_dtimes, approval_status, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ - VALUES ('3c0e8f2e', '[binary data]', 'MO.TD.01','DEVICE-ID-01', '2020-09-23T10:29:49.309Z', '2020-12-31T07:00:13.375Z', 'Pending_Approval', false, 'pm_testuser','2020-09-29T08:17:07.944Z', null, null, false, null); - -deleteSecureBiometricInterface=delete from regdevice.secure_biometric_interface where device_detail_id='DEVICE-ID-01' and cr_by='pm_testuser'; -deleteSecureBiometricInterfaceH=delete from regdevice.secure_biometric_interface_h where device_detail_id='DEVICE-ID-01' and cr_by='pm_testuser'; - -createSaveFtpChipDetail=INSERT INTO regdevice.ftp_chip_detail(\ - id, foundational_trust_provider_id, make, model, certificate_alias, partner_org_name, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes)\ - VALUES ('FTP-ID-01', 'PMS-ID-01', 'MAKE01', 'MODEL-01', null, 'PMS', false, 'pm_testuser', '2020-09-29T13:25:24.450Z', null, null, false, null); - -deleteSaveFtpChipDetail=delete from regdevice.ftp_chip_detail where id='FTP-ID-01' and foundational_trust_provider_id='PMS-ID-01'; diff --git a/api-test/src/main/resources/config/pmsDataDeleteQueries.txt b/api-test/src/main/resources/config/pmsDataDeleteQueries.txt deleted file mode 100644 index 33b4e6f7b..000000000 --- a/api-test/src/main/resources/config/pmsDataDeleteQueries.txt +++ /dev/null @@ -1,28 +0,0 @@ -##### DB queries to be executed to tear down the data used and generated during the test rig run - -delete from pms.partner_contact where partner_id='Tech-123' -delete from partner_policy where part_id='Tech-123' -delete from partner_policy where cr_by='partner-111997' -delete from partner_policy where policy_id in (select id from auth_policy where name in ('mosip policy','mosip data share policy','mosip policy9')) -delete from partner_policy_request where part_id='Tech-123' -delete from partner_policy_request where cr_by='partner-111997' -delete from pms.partner_policy where label='string' -delete from partner_policy_request where policy_id in (select id from auth_policy where name in ('mosip policy','mosip data share policy','mosip policy9')) -delete from partner_policy_bioextract where policy_id in (select id from auth_policy where name in ('mosip policy','mosip data share policy','mosip policy9')) -delete from partner_policy_bioextract where cr_by='partner-111997' -delete from partner_policy_credential_type where part_id='MOVP' -delete from pms.partner_policy_request where cr_by = 'partner-111997' -delete from pms.partner_contact where cr_by = 'partner-111997' -delete from pms.partner where cr_by = 'partner-111997' -delete from pms.partner where id in ('Tech-123','MOVP','DPP','MISP','MISP2','FTP','111997','mosipprint','partner-111997','updatepolicy') -delete from auth_policy where cr_by='partner-111997' -delete from pms.auth_policy where name in('mosip policy','mosip policy2','mosip policy3','mosip data share policy','mosip data share policy2') -delete from policy_group where cr_by='partner-111997' -delete from pms.policy_group where name in ('mosip policy group','mosip policy role testing groupp','mosip policy group2','update_policy_group','mosip policy status testing groupp with policy') -delete from pms.misp_license where cr_by='pm_testuser' -delete from pms.misp_license where misp_id in ('MISP','MISP2') -delete from pms.ftp_chip_detail where foundational_trust_provider_id='FTP' -delete from pms.misp where name='mosip_misp' -delete from pms.secure_biometric_interface where provider_id='Tech-123' -delete from pms.device_detail where id='device-id-123' -delete from pms.device_detail where make in ('abcde','abcdef') \ No newline at end of file diff --git a/api-test/src/main/resources/config/policyGroup.json b/api-test/src/main/resources/config/policyGroup.json deleted file mode 100644 index d9baab205..000000000 --- a/api-test/src/main/resources/config/policyGroup.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "id": "string", - "metadata": {}, - "request": { - "desc":"desc mosip auth policy group", - "name":"mosip auth policy group 2345678" - }, - "requesttime": "2022-09-07T04:23:38.117Z", - "version": "string" -} diff --git a/api-test/src/main/resources/config/prereg_SendOtp.json b/api-test/src/main/resources/config/prereg_SendOtp.json deleted file mode 100644 index 142abe127..000000000 --- a/api-test/src/main/resources/config/prereg_SendOtp.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "id": "mosip.pre-registration.login.sendotp", - "version": "1.0", - "requesttime": "$TIMESTAMP$", - "request": { - "langCode": "$PRIMARYLANG$", - "userId": "robin.hood@mailinator.com" - } -} \ No newline at end of file diff --git a/api-test/src/main/resources/config/prereg_ValidateOtp.json b/api-test/src/main/resources/config/prereg_ValidateOtp.json deleted file mode 100644 index 93d22c9b1..000000000 --- a/api-test/src/main/resources/config/prereg_ValidateOtp.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "id": "mosip.pre-registration.login.useridotp", - "version": "1.0", - "requesttime": "$TIMESTAMP$", - "request": { - "otp": "781412", - "userId": "robin.hood@mailinator.com" - } -} \ No newline at end of file diff --git a/api-test/src/main/resources/config/registrationProcessorAPI.properties b/api-test/src/main/resources/config/registrationProcessorAPI.properties deleted file mode 100644 index 9d419ce7d..000000000 --- a/api-test/src/main/resources/config/registrationProcessorAPI.properties +++ /dev/null @@ -1,27 +0,0 @@ -=======API URLs====================================================================== - -syncListApi=/registrationprocessor/v1/registrationstatus/sync -packetReceiverApi=/registrationprocessor/v1/packetreceiver/registrationpackets -packetStatusApi=/registrationprocessor/v1/registrationstatus/search -packetGeneratorApi=/registrationprocessor/v1/requesthandler/packetgenerator -assignmentApi =/registrationprocessor/v1/manualverification/assignment -decisionApi = /registrationprocessor/v1/manualverification/decision -applicantDemograhicApi = /registrationprocessor/v1/manualverification/applicantDemographic -applicantBiometricApi = /registrationprocessor/v1/manualverification/applicantBiometric -packetInfoApi = /registrationprocessor/v1/manualverification/packetInfo -idRepoByRid = /idrepository/v1/identity/idvid/ -reprintingApi = /registrationprocessor/v1/requesthandler/reprint -adminRequirementApi = /registrationprocessor/v1/registrationtransaction/search/{langcode}/{rid} -packetManagerAuditsApi = /commons/v1/packetmanager/audits -packetManagerBiometricsApi = /commons/v1/packetmanager/biometrics -packetManagerSearchApi = /commons/v1/packetmanager/searchField -packetManagerValidatePacketApi = /commons/v1/packetmanager/validatePacket -packetManagerSearchFieldsApi = /commons/v1/packetmanager/searchFields -packetManagerDocumentApi = /commons/v1/packetmanager/document -packetManagerMetaInfoApi = /commons/v1/packetmanager/metaInfo -====================HDFS Connection======================================================= -nameNodeUrl = hdfs://13.71.115.204:51000 -kdcDomain = NODE-MASTER.SOUTHINDIA.CLOUDAPP.AZURE.COM -userName = qa-regprocessor -userPass = Mosip@dev123 -isAuthEnable = false diff --git a/api-test/src/main/resources/config/residentServicesQueries.properties b/api-test/src/main/resources/config/residentServicesQueries.properties deleted file mode 100644 index 22381deb9..000000000 --- a/api-test/src/main/resources/config/residentServicesQueries.properties +++ /dev/null @@ -1,15 +0,0 @@ -createPackets=INSERT INTO regprc.registration( \ - id, reg_type, ref_reg_id, applicant_type, status_code, lang_code, status_comment, latest_trn_id, trn_retry_count, pkt_cr_dtimes, is_active, cr_by, cr_dtimes, upd_by, upd_dtimes, is_deleted, del_dtimes, latest_trn_type_code, latest_trn_status_code, latest_trn_dtimes, reg_process_retry_count, reg_stage_name) \ - VALUES ('10008100670005520200114101900','NEW',null,null,'PROCESSED','eng','OK','cddfbcae-7d72-4c3c-b42c-c000e89c3510',0,null, true, 'MOSIP_SYSTEM',' 2020-01-14 10:20:15.542','MOSIP_SYSTEM','2020-01-15 12:18:08.773',false,null,'PACKET_REPROCESS','SUCCESS','2020-01-15 12:18:08.773',14,'PacketUploaderStage'), \ - ('10008100670005520200114101901','NEW',null,null,'PROCESSING','eng','OK','cddfbcae-7d72-4c3c-b42c-c000e89c3510',0,null, true, 'MOSIP_SYSTEM',' 2020-01-14 10:20:15.542','MOSIP_SYSTEM','2020-01-15 12:18:08.773',false,null,'PACKET_REPROCESS','SUCCESS','2020-01-15 12:18:08.773',14,'PacketUploaderStage'), \ - ('10008100670005520200114101902','NEW',null,null,'REJECTED','eng','OK','cddfbcae-7d72-4c3c-b42c-c000e89c3510',0,null, true, 'MOSIP_SYSTEM',' 2020-01-14 10:20:15.542','MOSIP_SYSTEM','2020-01-15 12:18:08.773',false,null,'PACKET_REPROCESS','SUCCESS','2020-01-15 12:18:08.773',14,'PacketUploaderStage'), \ - ('10008100670005520200114101903','NEW',null,null,'RESEND','eng','OK','cddfbcae-7d72-4c3c-b42c-c000e89c3510',0,null, true, 'MOSIP_SYSTEM',' 2020-01-14 10:20:15.542','MOSIP_SYSTEM','2020-01-15 12:18:08.773',false,null,'PACKET_REPROCESS','SUCCESS','2020-01-15 12:18:08.773',14,'PacketUploaderStage'), \ - ('10008100670005520200114101904','NEW',null,null,'REREGISTER','eng','OK','cddfbcae-7d72-4c3c-b42c-c000e89c3510',0,null, true, 'MOSIP_SYSTEM',' 2020-01-14 10:20:15.542','MOSIP_SYSTEM','2020-01-15 12:18:08.773',false,null,'PACKET_REPROCESS','SUCCESS','2020-01-15 12:18:08.773',14,'PacketUploaderStage'); - - - - -deletePacketRecord=DELETE FROM regprc.registration WHERE id in ('10008100670005520200114101900','10008100670005520200114101901','10008100670005520200114101902','10008100670005520200114101903','10008100670005520200114101904'); - - - \ No newline at end of file diff --git a/api-test/src/main/resources/config/sign.json b/api-test/src/main/resources/config/sign.json deleted file mode 100644 index a54fd5040..000000000 --- a/api-test/src/main/resources/config/sign.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "id": "string", - "metadata": {}, - "request": { - "applicationId": "IDA", - "dataToSign": "$DATA$", - "includeCertHash": true, - "includeCertificate": true, - "includePayload": false, - "referenceId": "SIGN" - }, - "requesttime": "2021-01-07T05:32:31.722Z", - "version": "string" -} \ No newline at end of file diff --git a/api-test/src/main/resources/config/test.properties b/api-test/src/main/resources/config/test.properties deleted file mode 100644 index 6eb1e1e3a..000000000 --- a/api-test/src/main/resources/config/test.properties +++ /dev/null @@ -1,16 +0,0 @@ -# ------------------------------------------------------------------------------------------- -# Properties File that will define all of the test configurations for core systems edge API -# test automation. This also includes all JIRA integrations for automatic defect tracking. -# - -# ------------------------------------------------------------------------------------------- - -# ------------------------------------------------------------------------------------------- -# URIs, URLs, & Environment Configurations -# ------------------------------------------------------------------------------------------- -#testEnvironment=https://integ.mosip.io -#testEnvironmentPreReg=https://integ.mosip.io -environment=qa -testEnvironment=https://integ.mosip.io -testEnvironmentPreReg=https://integ.mosip.io - diff --git a/api-test/src/main/resources/config/tokenGeneration.properties b/api-test/src/main/resources/config/tokenGeneration.properties deleted file mode 100644 index a7ec811fe..000000000 --- a/api-test/src/main/resources/config/tokenGeneration.properties +++ /dev/null @@ -1,7 +0,0 @@ -token.request.id=mosip.io.userId.pwd -token.request.appid=regproc -token.request.username=110006 -token.request.password=mosip -token.request.version=1.0 -token.request.clientId=mosip-regproc-client -token.request.secretKey=abc123 \ No newline at end of file diff --git a/api-test/src/main/resources/config/updatePacketProperties.properties b/api-test/src/main/resources/config/updatePacketProperties.properties deleted file mode 100644 index 479344401..000000000 --- a/api-test/src/main/resources/config/updatePacketProperties.properties +++ /dev/null @@ -1,7 +0,0 @@ -bio&fullName = mona -fullName = abc -addressLine1 = xyz -phone = 1234567890 -email = abc@gmail.com -dateOfBirth = 1983/01/01 -UINInvalid = 1234567 \ No newline at end of file From 114ffc110ed87b8f89cfccd9d7466681855c9579 Mon Sep 17 00:00:00 2001 From: Rudhhi Shah Date: Tue, 24 Mar 2026 12:58:18 +0530 Subject: [PATCH 834/860] [INJIWEB-1861] Refactored reflection tests to use mocking (#1057) * [INJIWEB-1861] Refactored reflection tests and addressed review comments Signed-off-by: Rudhhi Shah * [INJIWEB-1861] addressed nitpick test comments Signed-off-by: Rudhhi Shah --------- Signed-off-by: Rudhhi Shah --- .../OAuth2AuthenticationSuccessHandler.java | 7 ++- .../mimoto/service/DataProtectionService.java | 7 +-- .../service/impl/DataShareServiceImpl.java | 33 +++++++------- .../service/impl/PresentationServiceImpl.java | 16 ++++--- .../mimoto/util/DerivedKeyCryptoUtil.java | 18 +++++--- ...Auth2AuthenticationSuccessHandlerTest.java | 6 +-- .../service/DataProtectionServiceTest.java | 3 +- .../mimoto/service/DataShareServiceTest.java | 43 ++++++++----------- .../service/PresentationServiceTest.java | 8 +--- .../mimoto/util/DerivedKeyCryptoUtilTest.java | 12 +++--- 10 files changed, 76 insertions(+), 77 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java index 077d6358d..959e1ba96 100644 --- a/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java +++ b/src/main/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandler.java @@ -20,8 +20,11 @@ @Slf4j public class OAuth2AuthenticationSuccessHandler extends SimpleUrlAuthenticationSuccessHandler { - @Value("${mosip.inji.web.authentication.success.redirect.url}") - private String authenticationSuccessRedirectUrl; + private final String authenticationSuccessRedirectUrl; + + public OAuth2AuthenticationSuccessHandler(@Value("${mosip.inji.web.authentication.success.redirect.url}") String authenticationSuccessRedirectUrl) { + this.authenticationSuccessRedirectUrl = authenticationSuccessRedirectUrl; + } @Override public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { diff --git a/src/main/java/io/mosip/mimoto/service/DataProtectionService.java b/src/main/java/io/mosip/mimoto/service/DataProtectionService.java index 5ecd8e894..8cf699563 100644 --- a/src/main/java/io/mosip/mimoto/service/DataProtectionService.java +++ b/src/main/java/io/mosip/mimoto/service/DataProtectionService.java @@ -38,11 +38,12 @@ public class DataProtectionService { private final CryptomanagerService cryptomanagerService; - @Value("${mosip.inji.app.id:MIMOTO}") - private String appId; + private final String appId; - public DataProtectionService(CryptomanagerService cryptomanagerService) { + public DataProtectionService(CryptomanagerService cryptomanagerService, + @Value("${mosip.inji.app.id:MIMOTO}") String appId) { this.cryptomanagerService = cryptomanagerService; + this.appId = appId; } /** diff --git a/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java index 9a15a438f..d3c5a512a 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/DataShareServiceImpl.java @@ -9,7 +9,6 @@ import io.mosip.mimoto.exception.ErrorConstants; import io.mosip.mimoto.exception.InvalidCredentialResourceException; import io.mosip.mimoto.util.RestApiClient; -import jakarta.annotation.PostConstruct; import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Value; @@ -34,30 +33,32 @@ public class DataShareServiceImpl { private final RestApiClient restApiClient; - @Value("${mosip.data.share.url}") - String dataShareHostUrl; + private final String dataShareHostUrl; - @Value("${mosip.data.share.create.url}") - String dataShareCreateUrl; + private final String dataShareCreateUrl; - @Value("${mosip.data.share.get.url.pattern}") - String dataShareGetUrlPattern; + private final String dataShareGetUrlPattern; - @Value("${mosip.data.share.create.retry.count}") - Integer maxRetryCount; + private final Integer maxRetryCount; private final ObjectMapper objectMapper; - PathMatcher pathMatcher ; + private final PathMatcher pathMatcher = new AntPathMatcher(); + + public DataShareServiceImpl( + RestApiClient restApiClient, + ObjectMapper objectMapper, + @Value("${mosip.data.share.url}") String dataShareHostUrl, + @Value("${mosip.data.share.create.url}") String dataShareCreateUrl, + @Value("${mosip.data.share.get.url.pattern}") String dataShareGetUrlPattern, + @Value("${mosip.data.share.create.retry.count}") Integer maxRetryCount) { - public DataShareServiceImpl(RestApiClient restApiClient, ObjectMapper objectMapper) { this.restApiClient = restApiClient; this.objectMapper = objectMapper; - } - - @PostConstruct - public void setUp(){ - pathMatcher = new AntPathMatcher(); + this.dataShareHostUrl = dataShareHostUrl; + this.dataShareCreateUrl = dataShareCreateUrl; + this.dataShareGetUrlPattern = dataShareGetUrlPattern; + this.maxRetryCount = maxRetryCount; } public String storeDataInDataShare(String data, String credentialValidity) throws InvalidCredentialResourceException { diff --git a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java index 831a87516..7d519037c 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java @@ -39,16 +39,22 @@ public class PresentationServiceImpl implements PresentationService { private final RestApiClient restApiClient; - @Value("${mosip.inji.ovp.redirect.url.pattern}") - private String injiOvpRedirectURLPattern; + private final String injiOvpRedirectURLPattern; - @Value("${server.tomcat.max-http-response-header-size:65536}") - private Integer maximumResponseHeaderSize; + private final Integer maximumResponseHeaderSize; - public PresentationServiceImpl(DataShareServiceImpl dataShareService, ObjectMapper objectMapper, RestApiClient restApiClient) { + public PresentationServiceImpl( + DataShareServiceImpl dataShareService, + ObjectMapper objectMapper, + RestApiClient restApiClient, + @Value("${mosip.inji.ovp.redirect.url.pattern}") String injiOvpRedirectURLPattern, + @Value("${server.tomcat.max-http-response-header-size:65536}") Integer maximumResponseHeaderSize + ) { this.dataShareService = dataShareService; this.objectMapper = objectMapper; this.restApiClient = restApiClient; + this.injiOvpRedirectURLPattern = injiOvpRedirectURLPattern; + this.maximumResponseHeaderSize = maximumResponseHeaderSize; } diff --git a/src/main/java/io/mosip/mimoto/util/DerivedKeyCryptoUtil.java b/src/main/java/io/mosip/mimoto/util/DerivedKeyCryptoUtil.java index fcb41ccdd..90feb218d 100644 --- a/src/main/java/io/mosip/mimoto/util/DerivedKeyCryptoUtil.java +++ b/src/main/java/io/mosip/mimoto/util/DerivedKeyCryptoUtil.java @@ -35,14 +35,20 @@ public class DerivedKeyCryptoUtil { private static final String AES_KEY_TYPE = "AES"; - @Value("${mosip.kernel.crypto.hash-symmetric-key-length:256}") - private int symmetricKeyLength; + private final int symmetricKeyLength; - @Value("${mosip.kernel.crypto.hash-iteration:100000}") - private int iterations; + private final int iterations; - @Value("${mosip.kernel.crypto.hash-algorithm-name:PBKDF2WithHmacSHA512}") - private String passwordAlgorithm; + private final String passwordAlgorithm; + + public DerivedKeyCryptoUtil( + @Value("${mosip.kernel.crypto.hash-symmetric-key-length:256}") int symmetricKeyLength, + @Value("${mosip.kernel.crypto.hash-iteration:100000}") int iterations, + @Value("${mosip.kernel.crypto.hash-algorithm-name:PBKDF2WithHmacSHA512}") String passwordAlgorithm) { + this.symmetricKeyLength = symmetricKeyLength; + this.iterations = iterations; + this.passwordAlgorithm = passwordAlgorithm; + } public CryptoWithPinResponseDto decryptWithPin(CryptoWithPinRequestDto requestDto) throws NoSuchAlgorithmException, InvalidKeySpecException, InvalidKeyException, diff --git a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java index 5868fb834..c82c20416 100644 --- a/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java +++ b/src/test/java/io/mosip/mimoto/security/oauth2/OAuth2AuthenticationSuccessHandlerTest.java @@ -10,12 +10,10 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; -import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken; import org.springframework.security.oauth2.core.user.OAuth2User; -import org.springframework.test.util.ReflectionTestUtils; import java.io.IOException; @@ -25,7 +23,6 @@ @RunWith(MockitoJUnitRunner.class) public class OAuth2AuthenticationSuccessHandlerTest { - @InjectMocks private OAuth2AuthenticationSuccessHandler successHandler; @Mock @@ -52,8 +49,7 @@ public class OAuth2AuthenticationSuccessHandlerTest { @Before public void setUp() throws Exception { - ReflectionTestUtils.setField(successHandler, "authenticationSuccessRedirectUrl", AUTH_SUCCESS_REDIRECT_URL); - + successHandler = new OAuth2AuthenticationSuccessHandler(AUTH_SUCCESS_REDIRECT_URL); when(request.getSession(false)).thenReturn(session); } diff --git a/src/test/java/io/mosip/mimoto/service/DataProtectionServiceTest.java b/src/test/java/io/mosip/mimoto/service/DataProtectionServiceTest.java index 3bf1ff751..2d2321b1c 100644 --- a/src/test/java/io/mosip/mimoto/service/DataProtectionServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/DataProtectionServiceTest.java @@ -35,7 +35,6 @@ public class DataProtectionServiceTest { @Mock private CryptomanagerService cryptomanagerService; - @InjectMocks private DataProtectionService dataProtectionService; private final String refId = "ref123"; @@ -50,7 +49,7 @@ public class DataProtectionServiceTest { @Before public void setUp() throws NoSuchAlgorithmException, InvalidAlgorithmParameterException, NoSuchProviderException { String appId = "MIMOTO"; - ReflectionTestUtils.setField(dataProtectionService, "appId", appId); + dataProtectionService = new DataProtectionService(cryptomanagerService, appId); encryptionKey = SigningKeyUtil.generateEncryptionKey("AES", 256); keyPair = SigningKeyUtil.generateKeyPair(SigningAlgorithm.ED25519); } diff --git a/src/test/java/io/mosip/mimoto/service/DataShareServiceTest.java b/src/test/java/io/mosip/mimoto/service/DataShareServiceTest.java index 571290f9d..20ea0df30 100644 --- a/src/test/java/io/mosip/mimoto/service/DataShareServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/DataShareServiceTest.java @@ -14,14 +14,11 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; -import org.springframework.test.util.ReflectionTestUtils; -import org.springframework.util.PathMatcher; import static io.mosip.mimoto.util.TestUtilities.getDataShareResponseDTO; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThrows; @@ -34,21 +31,28 @@ public class DataShareServiceTest { RestApiClient restApiClient; @Mock ObjectMapper objectMapper; - @Mock - PathMatcher pathMatcher; - @InjectMocks + DataShareServiceImpl dataShareService; PresentationRequestDTO presentationRequestDTO; + private static final String TEST_HOST_URL = "https://test-url"; + private static final String TEST_CREATE_URL = "https://test-url"; + private static final String TEST_GET_URL_PATTERN = "http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/*"; + private static final String MISCONFIGURED_GET_URL_PATTERN = "http://datashare.datashare/*"; + private static final int DEFAULT_MAX_RETRY_COUNT = 1; + @Before public void setUp() { - ReflectionTestUtils.setField(dataShareService, "dataShareHostUrl", "https://test-url"); - ReflectionTestUtils.setField(dataShareService, "dataShareCreateUrl", "https://test-url"); - ReflectionTestUtils.setField(dataShareService, "dataShareGetUrlPattern", "http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/*"); - ReflectionTestUtils.setField(dataShareService, "maxRetryCount", 1); presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); - ReflectionTestUtils.setField(dataShareService, "pathMatcher", pathMatcher); - Mockito.when(pathMatcher.match("http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/*", "http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/test")).thenReturn(true); + + dataShareService = new DataShareServiceImpl( + restApiClient, + objectMapper, + TEST_HOST_URL, + TEST_CREATE_URL, + TEST_GET_URL_PATTERN, + DEFAULT_MAX_RETRY_COUNT + ); } @Test @@ -63,13 +67,12 @@ public void storeDataInDataShareWhenProperDataIsPassed() throws Exception { @Test(expected = InvalidCredentialResourceException.class) public void throwRequestTimedOutExceptionWhenMaxCountIsReached() throws Exception { - ReflectionTestUtils.setField(dataShareService, "maxRetryCount", 0); + dataShareService = new DataShareServiceImpl(restApiClient, objectMapper, TEST_HOST_URL, TEST_CREATE_URL, TEST_GET_URL_PATTERN, 0); dataShareService.storeDataInDataShare("SampleData", "3"); } @Test(expected = InvalidCredentialResourceException.class) public void throwServiceUnavailableExceptionWhenCredentialPushIsNotDone() throws Exception { - ReflectionTestUtils.setField(dataShareService, "maxRetryCount", 1); Mockito.when(restApiClient.postApi(Mockito.anyString(), Mockito.eq(MediaType.MULTIPART_FORM_DATA), Mockito.any(), Mockito.eq(DataShareResponseWrapperDTO.class))) .thenThrow(InvalidCredentialResourceException.class); dataShareService.storeDataInDataShare("SampleData", "3"); @@ -145,7 +148,6 @@ public void throwResourceNotFoundExceptionWhenCredentialIsNotFoundInDataShare() @Test public void throwResourceInvalidRequestExceptionWhenCredentialURLHasIllegalDirectoryCharacter() { String expectedExceptionMsg = "invalid_resource --> Invalid path structure in resource URL"; - Mockito.when(pathMatcher.match("http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/*", "http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/te..st")).thenReturn(true); presentationRequestDTO.setResource("http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/te..st"); @@ -157,7 +159,6 @@ public void throwResourceInvalidRequestExceptionWhenCredentialURLHasIllegalDirec @Test public void throwResourceInvalidRequestExceptionWhenCredentialURLHasIllegalForwardSlashCharacter() { String expectedExceptionMsg = "invalid_resource --> Invalid path structure in resource URL"; - Mockito.when(pathMatcher.match("http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/*", "http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid//test")).thenReturn(true); presentationRequestDTO.setResource("http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid//test"); @@ -169,8 +170,7 @@ public void throwResourceInvalidRequestExceptionWhenCredentialURLHasIllegalForwa @Test public void throwResourceInvalidRequestExceptionWhenCredentialURLIsMisconfiguredAndHasNoWildcard() { String expectedExceptionMsg = "invalid_resource --> Invalid resource identifier in URL"; - ReflectionTestUtils.setField(dataShareService, "dataShareGetUrlPattern", "http://datashare.datashare/*"); - Mockito.when(pathMatcher.match("http://datashare.datashare/*", "http://datashare.datashare/")).thenReturn(true); + dataShareService = new DataShareServiceImpl(restApiClient, objectMapper, TEST_HOST_URL, TEST_CREATE_URL, MISCONFIGURED_GET_URL_PATTERN, DEFAULT_MAX_RETRY_COUNT); presentationRequestDTO.setResource("http://datashare.datashare/"); @@ -184,8 +184,6 @@ public void throwResourceInvalidRequestExceptionWhenCredentialURLHasIllegalChara String expectedExceptionMsg = "invalid_resource --> Invalid characters in wildcard segment"; presentationRequestDTO.setResource("http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/test$"); - Mockito.when(pathMatcher.match("http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/*", "http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/test$")).thenReturn(true); - InvalidCredentialResourceException actualException = assertThrows(InvalidCredentialResourceException.class, () -> dataShareService.downloadCredentialFromDataShare(presentationRequestDTO)); assertEquals(expectedExceptionMsg, actualException.getMessage()); @@ -196,8 +194,6 @@ public void throwResourceInvalidRequestExceptionWhenCredentialURLIsMalformed() { String expectedExceptionMsg = "invalid_resource --> Malformed resource URL"; presentationRequestDTO.setResource("http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/%%illegal"); - Mockito.when(pathMatcher.match("http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/*", "http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/%%illegal")).thenReturn(true); - InvalidCredentialResourceException actualException = assertThrows(InvalidCredentialResourceException.class, () -> dataShareService.downloadCredentialFromDataShare(presentationRequestDTO)); assertEquals(expectedExceptionMsg, actualException.getMessage()); @@ -208,9 +204,6 @@ public void throwResourceInvalidRequestExceptionWhenCredentialURLHasDoubleEncode String expectedExceptionMsg = "invalid_resource --> Invalid characters in wildcard segment"; presentationRequestDTO.setResource("http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/%252e%252e"); - Mockito.when(pathMatcher.match("http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/*", - "http://datashare.datashare/v1/datashare/get/static-policyid/static-subscriberid/%252e%252e")).thenReturn(true); - InvalidCredentialResourceException actualException = assertThrows(InvalidCredentialResourceException.class, () -> dataShareService.downloadCredentialFromDataShare(presentationRequestDTO)); diff --git a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java index e7203d453..1cf5edf5a 100644 --- a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java @@ -23,11 +23,9 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockedStatic; import org.mockito.junit.MockitoJUnitRunner; -import org.springframework.test.util.ReflectionTestUtils; import java.io.IOException; import java.time.Instant; @@ -52,7 +50,6 @@ public class PresentationServiceTest { @Mock RestApiClient restApiClient; - @InjectMocks PresentationServiceImpl presentationService; String walletId, clientId, urlEncodedVPAuthorizationRequest; @@ -64,8 +61,7 @@ public class PresentationServiceTest { @Before public void setup() throws JsonProcessingException { - ReflectionTestUtils.setField(presentationService, "injiOvpRedirectURLPattern", "%s#vp_token=%s&presentation_submission=%s"); - ReflectionTestUtils.setField(presentationService, "maximumResponseHeaderSize", 65536); + presentationService = new PresentationServiceImpl(dataShareService, objectMapper, restApiClient, "%s#vp_token=%s&presentation_submission=%s", 65536); when(objectMapper.writeValueAsString(any())).thenReturn("test-data"); // Setup for Wallet presentation tests @@ -149,7 +145,7 @@ public void nullPresentationDefinitionWithVPRequest() throws IOException { @Test(expected = VPNotCreatedException.class) public void uriTooLongWithVPRequest() throws IOException { - ReflectionTestUtils.setField(presentationService, "maximumResponseHeaderSize", 10); // Very small limit + presentationService = new PresentationServiceImpl(dataShareService, objectMapper, restApiClient, "%s#vp_token=%s&presentation_submission=%s", 10); VCCredentialResponse vcCredentialResponse = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); diff --git a/src/test/java/io/mosip/mimoto/util/DerivedKeyCryptoUtilTest.java b/src/test/java/io/mosip/mimoto/util/DerivedKeyCryptoUtilTest.java index dce51928c..656426820 100644 --- a/src/test/java/io/mosip/mimoto/util/DerivedKeyCryptoUtilTest.java +++ b/src/test/java/io/mosip/mimoto/util/DerivedKeyCryptoUtilTest.java @@ -19,11 +19,9 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.InjectMocks; import org.mockito.MockedStatic; import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; -import org.springframework.test.util.ReflectionTestUtils; import io.mosip.mimoto.dto.CryptoWithPinRequestDto; import io.mosip.mimoto.dto.CryptoWithPinResponseDto; @@ -33,7 +31,6 @@ @ExtendWith(MockitoExtension.class) class DerivedKeyCryptoUtilTest { - @InjectMocks private DerivedKeyCryptoUtil derivedKeyCryptoUtil; private static final String AES_KEY_TYPE = "AES"; @@ -41,12 +38,13 @@ class DerivedKeyCryptoUtilTest { private static final String USER_PIN = "12345"; private static final byte[] SALT = "testsalt123456789012345678901234".getBytes(); private static final byte[] NONCE = "testnonce123".getBytes(); + private static final int DEFAULT_KEY_SIZE = 256; + private static final int DEFAULT_ITERATIONS = 100000; + private static final String DEFAULT_ALGORITHM = "PBKDF2WithHmacSHA512"; @BeforeEach void setUp() { - ReflectionTestUtils.setField(derivedKeyCryptoUtil, "symmetricKeyLength", 256); - ReflectionTestUtils.setField(derivedKeyCryptoUtil, "iterations", 100000); - ReflectionTestUtils.setField(derivedKeyCryptoUtil, "passwordAlgorithm", "PBKDF2WithHmacSHA512"); + derivedKeyCryptoUtil = new DerivedKeyCryptoUtil(DEFAULT_KEY_SIZE, DEFAULT_ITERATIONS, DEFAULT_ALGORITHM); } private byte[] encrypt(String data, SecretKey key, byte[] nonce, byte[] aad) throws Exception { @@ -192,7 +190,7 @@ void testHash() throws Exception { @Test void testHashThrowsCryptoManagerException() { - ReflectionTestUtils.setField(derivedKeyCryptoUtil, "passwordAlgorithm", "InvalidAlgo"); + derivedKeyCryptoUtil = new DerivedKeyCryptoUtil(DEFAULT_KEY_SIZE, DEFAULT_ITERATIONS, "InvalidAlgo"); InvocationTargetException exception = assertThrows(InvocationTargetException.class, () -> { invokeHash(USER_PIN.getBytes(), SALT); }); From a04cc401f1bc390d63630b98cd9a61d27666946b Mon Sep 17 00:00:00 2001 From: Nitin Hegde <165893206+hegdenitin@users.noreply.github.com> Date: Tue, 24 Mar 2026 16:28:25 +0530 Subject: [PATCH 835/860] MOSIP-44720 New Get Isssuer V2 API automation (#1061) * MOSIP-44720 New Get Isssuer V2 API automation Signed-off-by: Nitin Hegde * MOSIP-44720 New Get Isssuer V2 API automation Signed-off-by: Nitin Hegde * MOSIP-44720 New Get Isssuer V2 API automation Signed-off-by: Nitin Hegde * MOSIP-44720 New Get Isssuer V2 API automation Signed-off-by: Nitin Hegde --------- Signed-off-by: Nitin Hegde --- .../GetAllIssuersV2/GetAllIssuersV2.hbs | 1 + .../GetAllIssuersV2/GetAllIssuersV2.yml | 130 ++++++++++++++++++ .../GetAllIssuersV2/GetAllIssuersV2Result.hbs | 5 + api-test/testNgXmlFiles/mimotoSuite.xml | 8 ++ 4 files changed, 144 insertions(+) create mode 100644 api-test/src/main/resources/mimoto/GetAllIssuersV2/GetAllIssuersV2.hbs create mode 100644 api-test/src/main/resources/mimoto/GetAllIssuersV2/GetAllIssuersV2.yml create mode 100644 api-test/src/main/resources/mimoto/GetAllIssuersV2/GetAllIssuersV2Result.hbs diff --git a/api-test/src/main/resources/mimoto/GetAllIssuersV2/GetAllIssuersV2.hbs b/api-test/src/main/resources/mimoto/GetAllIssuersV2/GetAllIssuersV2.hbs new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/api-test/src/main/resources/mimoto/GetAllIssuersV2/GetAllIssuersV2.hbs @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/GetAllIssuersV2/GetAllIssuersV2.yml b/api-test/src/main/resources/mimoto/GetAllIssuersV2/GetAllIssuersV2.yml new file mode 100644 index 000000000..b72310c8a --- /dev/null +++ b/api-test/src/main/resources/mimoto/GetAllIssuersV2/GetAllIssuersV2.yml @@ -0,0 +1,130 @@ +GetAllIssuersV2: + Mimoto_GetAllIssuersV2_All_Valid_Smoke: + endPoint: /v1/mimoto/v2/issuers + description: Validate that the system successfully retrieves issuer details when all input parameters are valid + uniqueIdentifier: TC_Mimoto_GetAllIssuersV2_01 + role: resident + restMethod: get + checkOnlyStatusCodeInResponse: true + inputTemplate: mimoto/GetAllIssuersV2/GetAllIssuersV2 + outputTemplate: mimoto/responseCode + input: '{ +}' + output: '{ + "responseCode": "200" +}' + + Mimoto_GetAllIssuersV2_SpecificIssuer_All_Valid_Smoke: + endPoint: /v1/mimoto/v2/issuers/Mosip + description: Validate that the system successfully retrieves the specific issuer details when all input parameters are valid + uniqueIdentifier: TC_Mimoto_GetAllIssuersV2_02 + role: resident + restMethod: get + inputTemplate: mimoto/GetAllIssuersV2/GetAllIssuersV2 + outputTemplate: mimoto/GetAllIssuersV2/GetAllIssuersV2Result + input: '{ +}' + output: '{ + "issuer_id": "Mosip" +}' + + Mimoto_GetAllIssuersV2_SpecificIssuer_InvalidIssuerID_Neg: + endPoint: /v1/mimoto/v2/issuers/invalid + description: Validate that the system does not retrieve issuer details when an invalid issuer is provided + uniqueIdentifier: TC_Mimoto_GetAllIssuersV2_03 + role: resident + restMethod: get + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/GetAllIssuersV2/GetAllIssuersV2 + outputTemplate: mimoto/error + input: '{ +}' + output: '{ + "errors":[ + { + "errorCode":"RESIDENT-APP-035" + } + ] +}' + Mimoto_GetAllIssuersV2_SpecificIssuer_Null_Issuer_Neg: + endPoint: /v1/mimoto/v2/issuers/Null + description: Validate that the system does not retrieve issuer details when an Null issuer is provided + uniqueIdentifier: TC_Mimoto_GetAllIssuersV2_04 + role: resident + restMethod: get + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/GetAllIssuersV2/GetAllIssuersV2 + outputTemplate: mimoto/error + input: '{ +}' + output: '{ + "errors":[ + { + "errorCode":"RESIDENT-APP-035" + } + ] +}' + Mimoto_GetAllIssuersV2_SpecificIssuer_SpecialCharacters_Issuer_Neg: + endPoint: /v1/mimoto/v2/issuers/@#$#@%# + description: Validate that the system does not retrieve issuer details when an Special Characters issuer is provided + uniqueIdentifier: TC_Mimoto_GetAllIssuersV2_05 + role: resident + restMethod: get + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/GetAllIssuersV2/GetAllIssuersV2 + outputTemplate: mimoto/error + input: '{ +}' + output: '{ + "errors":[ + { + "errorCode":"RESIDENT-APP-035" + } + ] +}' + Mimoto_GetAllIssuersV2_SpecificIssuer_caseSensitive_Issuer_Neg: + endPoint: /v1/mimoto/v2/issuers/mOSIP + description: Validate that the system does not retrieve issuer details when an issuer case does not match + uniqueIdentifier: TC_Mimoto_GetAllIssuersV2_06 + role: resident + restMethod: get + checkErrorsOnlyInResponse: true + inputTemplate: mimoto/GetAllIssuersV2/GetAllIssuersV2 + outputTemplate: mimoto/error + input: '{ +}' + output: '{ + "errors":[ + { + "errorCode":"RESIDENT-APP-035" + } + ] +}' + Mimoto_GetAllIssuersV2_AllIssuer_invalidURL_Neg: + endPoint: /v1/mimoto/v2/issuersInvalidURL + description: Validate that the system does not retrieve issuer details when an invalid URL is provided + uniqueIdentifier: TC_Mimoto_GetAllIssuersV2_07 + role: resident + restMethod: get + checkOnlyStatusCodeInResponse: true + inputTemplate: mimoto/GetAllIssuersV2/GetAllIssuersV2 + outputTemplate: mimoto/responseCode + input: '{ +}' + output: '{ + "responseCode": "401" +}' + Mimoto_GetAllIssuersV2_AllIssuer_NullURL_Neg: + endPoint: /v1/mimoto/v2/null + description: Validate that the system does not retrieve issuer details when an null is provided in the URL + uniqueIdentifier: TC_Mimoto_GetAllIssuersV2_08 + role: resident + restMethod: get + checkOnlyStatusCodeInResponse: true + inputTemplate: mimoto/GetAllIssuersV2/GetAllIssuersV2 + outputTemplate: mimoto/responseCode + input: '{ +}' + output: '{ + "responseCode": "401" +}' \ No newline at end of file diff --git a/api-test/src/main/resources/mimoto/GetAllIssuersV2/GetAllIssuersV2Result.hbs b/api-test/src/main/resources/mimoto/GetAllIssuersV2/GetAllIssuersV2Result.hbs new file mode 100644 index 000000000..1ecf56cfe --- /dev/null +++ b/api-test/src/main/resources/mimoto/GetAllIssuersV2/GetAllIssuersV2Result.hbs @@ -0,0 +1,5 @@ +{ + "response": { + "issuer_id": "{{issuer_id}}" + } +} \ No newline at end of file diff --git a/api-test/testNgXmlFiles/mimotoSuite.xml b/api-test/testNgXmlFiles/mimotoSuite.xml index b1009a459..d4c52daaa 100644 --- a/api-test/testNgXmlFiles/mimotoSuite.xml +++ b/api-test/testNgXmlFiles/mimotoSuite.xml @@ -180,6 +180,14 @@ name="io.inji.testrig.apirig.mimoto.testscripts.GetWithParam" /> + + + + + + From a8edfe26eae62daea257cc23f46abc4a7f0208d8 Mon Sep 17 00:00:00 2001 From: Durgesh Konga Date: Wed, 25 Mar 2026 14:36:36 +0530 Subject: [PATCH 836/860] [INJIWEB-1873] - Update Verifier Validation parameters to client id and response uris (#1055) * [INJIWEB-1873] - Update Verifier Validation parameters to client id and response uris update logic to consider redirect_uri from post api response update test cases Signed-off-by: Durgesh Konga * [INJIWEB-1873] - Add redirect uri fallback and update test cases Signed-off-by: Durgesh Konga --------- Signed-off-by: Durgesh Konga --- .../controller/PresentationController.java | 2 +- .../mimoto/exception/ErrorConstants.java | 4 +- .../service/impl/PresentationServiceImpl.java | 33 +++------- .../service/impl/VerifierServiceImpl.java | 16 ++--- .../PresentationControllerTest.java | 62 +++++++++++-------- .../service/PresentationServiceTest.java | 22 ++++--- .../mimoto/service/VerifierServiceTest.java | 51 ++++++++++++--- 7 files changed, 114 insertions(+), 76 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/PresentationController.java b/src/main/java/io/mosip/mimoto/controller/PresentationController.java index 049b24d2e..5dee617c6 100644 --- a/src/main/java/io/mosip/mimoto/controller/PresentationController.java +++ b/src/main/java/io/mosip/mimoto/controller/PresentationController.java @@ -67,7 +67,7 @@ public void performAuthorization(HttpServletResponse response, try { log.info("Started Presentation Authorization in the controller."); - verifierService.validateVerifier(clientId, redirectUri); + verifierService.validateVerifier(clientId, responseUri); PresentationDefinitionDTO presentationDefinitionDTO = objectMapper.readValue(presentationDefinition, PresentationDefinitionDTO.class); PresentationRequestDTO presentationRequestDTO = PresentationRequestDTO.builder() .responseType(responseType) diff --git a/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java b/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java index ddd72a26a..8abdf8339 100644 --- a/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java +++ b/src/main/java/io/mosip/mimoto/exception/ErrorConstants.java @@ -18,6 +18,7 @@ public enum ErrorConstants { URI_TOO_LONG("uri_too_long", "Resource URI is too long to be handled"), INVALID_CLIENT("invalid_client", "The requested client doesn’t match."), INVALID_REDIRECT_URI("invalid_redirect_uri", "The requested redirect uri doesn’t match."), + INVALID_RESPONSE_URI("invalid_response_uri", "The requested response uri doesn’t match."), INTERNAL_SERVER_ERROR("internal_server_error", "We are unable to process request now"), PROOF_TYPE_NOT_SUPPORTED_EXCEPTION("proof_type_not_supported", "Proof Type available in received credentials is not matching with supported proof terms"), @@ -52,7 +53,8 @@ public enum ErrorConstants { REJECTED_VERIFIER("success", "Presentation request rejected. An OpenID4VP error response has been sent to the verifier."), JWT_SIGNING_ERROR("jwt_signing_error", "Failed to sign JWT token during presentation submission"), KEY_GENERATION_ERROR("key_generation_error", "Failed to generate or retrieve cryptographic key"), - DECRYPTION_ERROR("decryption_error", "Failed to decrypt data"); + DECRYPTION_ERROR("decryption_error", "Failed to decrypt data"), + INVALID_RESPONSE_MODE("invalid_response_mode", "The requested response mode is not supported."); private final String errorCode; private final String errorMessage; diff --git a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java index 7d519037c..b07b2c917 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java @@ -193,31 +193,16 @@ private String processInputDescriptor(VCCredentialResponse vcCredentialResponse, ); } - // Otherwise, do redirect - String redirectString = buildRedirectString( - vpToken, - presentationRequestDTO.getRedirectUri(), - presentationSubmission - ); - - if (redirectString.length() > maximumResponseHeaderSize) { - throw new VPNotCreatedException(ErrorConstants.URI_TOO_LONG.getErrorCode(), ErrorConstants.URI_TOO_LONG.getErrorMessage()); + //throw exception if the response_mode is not direct_post + else { + throw new VPNotCreatedException(ErrorConstants.INVALID_RESPONSE_MODE.getErrorCode(), ErrorConstants.INVALID_RESPONSE_MODE.getErrorMessage()); } - - return redirectString; } private String createVpToken(VerifiablePresentationDTO vpDTO) throws JsonProcessingException { return objectMapper.writeValueAsString(vpDTO); } - private String buildRedirectString(String vpToken, String redirectUri, String presentationSubmission) { - return String.format(injiOvpRedirectURLPattern, - redirectUri, - Base64.getUrlEncoder().encodeToString(vpToken.getBytes(StandardCharsets.UTF_8)), - URLEncoder.encode(presentationSubmission, StandardCharsets.UTF_8)); - } - private String postVpToResponseUri(String responseUri, String redirectUri, String vpToken, String presentationSubmission, String state, String nonce) throws JsonProcessingException { MultiValueMap postRequest = new LinkedMultiValueMap<>(); postRequest.add("vp_token", Base64.getUrlEncoder().encodeToString(vpToken.getBytes(StandardCharsets.UTF_8))); @@ -236,12 +221,6 @@ private String postVpToResponseUri(String responseUri, String redirectUri, Strin Map.class ); - // Use request's redirectUri if it's non-blank - if (redirectUri != null && !redirectUri.isBlank()) { - log.info("Using redirectUri from request: {}", redirectUri); - return redirectUri; - } - log.info("Response from verifier after POST: {}", postResponse); // Check for redirect_uri in response first @@ -252,6 +231,12 @@ private String postVpToResponseUri(String responseUri, String redirectUri, Strin } } + // Use request's redirectUri if it's non-blank + if (redirectUri != null && !redirectUri.isBlank()) { + log.info("Using redirectUri from request: {}", redirectUri); + return redirectUri; + } + // Fallback behavior if redirect_uri is not provided log.warn("No redirect_uri received from verifier in POST response. Falling back to response_uri."); return responseUri + "?status=vp_sent"; diff --git a/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java index 78eeab0c5..71f0a3994 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java @@ -66,18 +66,18 @@ public Optional getVerifierByClientId(String clientId) throws ApiNo } @Override - public void validateVerifier(String clientId, String redirectUri) throws ApiNotAccessibleException, JsonProcessingException { + public void validateVerifier(String clientId, String responseUri) throws ApiNotAccessibleException, JsonProcessingException { log.info("Started the presentation Validation"); getVerifierByClientId(clientId).ifPresentOrElse( (verifierDTO) -> { - boolean isValidVerifier = verifierDTO.getRedirectUris().stream().anyMatch(registeredRedirectUri -> - urlValidator.isValid(registeredRedirectUri) && - urlValidator.isValid(redirectUri) && - pathMatcher.match(registeredRedirectUri, redirectUri)); + boolean isValidVerifier = verifierDTO.getResponseUris().stream().anyMatch(registeredResponseUri -> + urlValidator.isValid(registeredResponseUri) && + urlValidator.isValid(responseUri) && + pathMatcher.match(registeredResponseUri, responseUri)); if(!isValidVerifier){ throw new InvalidVerifierException( - ErrorConstants.INVALID_REDIRECT_URI.getErrorCode(), - ErrorConstants.INVALID_REDIRECT_URI.getErrorMessage()); + ErrorConstants.INVALID_RESPONSE_URI.getErrorCode(), + ErrorConstants.INVALID_RESPONSE_URI.getErrorMessage()); } }, () -> { @@ -108,7 +108,7 @@ public boolean isVerifierClientPreregistered(List preRegisteredVerifie log.warn("No client_id found in the authorization request URL"); return false; } - if (responseUris==null || responseUris.isEmpty()) { + if (responseUris.isEmpty()) { log.warn("No response_uri found in the authorization request URL"); return false; } diff --git a/src/test/java/io/mosip/mimoto/controller/PresentationControllerTest.java b/src/test/java/io/mosip/mimoto/controller/PresentationControllerTest.java index b1b3a7406..d589947c2 100644 --- a/src/test/java/io/mosip/mimoto/controller/PresentationControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/PresentationControllerTest.java @@ -63,6 +63,7 @@ public class PresentationControllerTest { private static final String REDIRECT_URI = "https://example.com/callback"; private static final String PRESENTATION_DEFINITION_JSON = "{\"id\":\"test\",\"input_descriptors\":[]}"; private static final String SUCCESS_REDIRECT_URL = "https://success.redirect.url"; + private static final String RESPONSE_URI = "https://example.com/v0/verify/vp-submission/direct-post?session=abc"; @Before public void setUp() { @@ -77,7 +78,7 @@ public void testPerformAuthorizationSuccess() throws Exception { .thenReturn(mockPresentationDefinitionDTO); when(presentationService.authorizePresentation(any(PresentationRequestDTO.class))) .thenReturn(SUCCESS_REDIRECT_URL); - doNothing().when(verifierService).validateVerifier(CLIENT_ID, REDIRECT_URI); + doNothing().when(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI); // Act & Assert mockMvc.perform(get("/authorize") @@ -85,12 +86,13 @@ public void testPerformAuthorizationSuccess() throws Exception { .param("resource", RESOURCE) .param("presentation_definition", PRESENTATION_DEFINITION_JSON) .param("client_id", CLIENT_ID) - .param("redirect_uri", REDIRECT_URI)) + .param("redirect_uri", REDIRECT_URI) + .param("response_uri", RESPONSE_URI)) .andExpect(status().isFound()) .andExpect(redirectedUrl(SUCCESS_REDIRECT_URL)); // Verify service calls - verify(verifierService).validateVerifier(CLIENT_ID, REDIRECT_URI); + verify(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI); verify(objectMapper).readValue(PRESENTATION_DEFINITION_JSON, PresentationDefinitionDTO.class); ArgumentCaptor captor = ArgumentCaptor.forClass(PresentationRequestDTO.class); @@ -111,7 +113,7 @@ public void testPerformAuthorizationInvalidVerifierException() throws Exception String errorMessage = "Invalid verifier provided"; InvalidVerifierException exception = new InvalidVerifierException(errorCode, errorMessage); - doThrow(exception).when(verifierService).validateVerifier(CLIENT_ID, REDIRECT_URI); + doThrow(exception).when(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI); String expectedRedirectUrl = String.format( "https://inji.web.redirect.url?error_code=%s&error_message=%s", @@ -125,11 +127,12 @@ public void testPerformAuthorizationInvalidVerifierException() throws Exception .param("resource", RESOURCE) .param("presentation_definition", PRESENTATION_DEFINITION_JSON) .param("client_id", CLIENT_ID) - .param("redirect_uri", REDIRECT_URI)) + .param("redirect_uri", REDIRECT_URI) + .param("response_uri", RESPONSE_URI)) .andExpect(status().isFound()) .andExpect(redirectedUrl(expectedRedirectUrl)); - verify(verifierService).validateVerifier(CLIENT_ID, REDIRECT_URI); + verify(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI); verify(presentationService, never()).authorizePresentation(any()); } @@ -143,7 +146,7 @@ public void testPerformAuthorizationVPNotCreatedException() throws Exception { PresentationDefinitionDTO mockPresentationDefinitionDTO = new PresentationDefinitionDTO(); when(objectMapper.readValue(PRESENTATION_DEFINITION_JSON, PresentationDefinitionDTO.class)) .thenReturn(mockPresentationDefinitionDTO); - doNothing().when(verifierService).validateVerifier(CLIENT_ID, REDIRECT_URI); + doNothing().when(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI); when(presentationService.authorizePresentation(any(PresentationRequestDTO.class))) .thenThrow(exception); @@ -160,11 +163,12 @@ public void testPerformAuthorizationVPNotCreatedException() throws Exception { .param("resource", RESOURCE) .param("presentation_definition", PRESENTATION_DEFINITION_JSON) .param("client_id", CLIENT_ID) - .param("redirect_uri", REDIRECT_URI)) + .param("redirect_uri", REDIRECT_URI) + .param("response_uri", RESPONSE_URI)) .andExpect(status().isFound()) .andExpect(redirectedUrl(expectedRedirectUrl)); - verify(verifierService).validateVerifier(CLIENT_ID, REDIRECT_URI); + verify(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI); verify(presentationService).authorizePresentation(any(PresentationRequestDTO.class)); } @@ -178,7 +182,7 @@ public void testPerformAuthorizationInvalidCredentialResourceException() throws PresentationDefinitionDTO mockPresentationDefinitionDTO = new PresentationDefinitionDTO(); when(objectMapper.readValue(PRESENTATION_DEFINITION_JSON, PresentationDefinitionDTO.class)) .thenReturn(mockPresentationDefinitionDTO); - doNothing().when(verifierService).validateVerifier(CLIENT_ID, REDIRECT_URI); + doNothing().when(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI); when(presentationService.authorizePresentation(any(PresentationRequestDTO.class))) .thenThrow(exception); @@ -195,11 +199,12 @@ public void testPerformAuthorizationInvalidCredentialResourceException() throws .param("resource", RESOURCE) .param("presentation_definition", PRESENTATION_DEFINITION_JSON) .param("client_id", CLIENT_ID) - .param("redirect_uri", REDIRECT_URI)) + .param("redirect_uri", REDIRECT_URI) + .param("response_uri", RESPONSE_URI)) .andExpect(status().isFound()) .andExpect(redirectedUrl(expectedRedirectUrl)); - verify(verifierService).validateVerifier(CLIENT_ID, REDIRECT_URI); + verify(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI); verify(presentationService).authorizePresentation(any(PresentationRequestDTO.class)); } @@ -211,7 +216,7 @@ public void testPerformAuthorizationGenericException() throws Exception { PresentationDefinitionDTO mockPresentationDefinitionDTO = new PresentationDefinitionDTO(); when(objectMapper.readValue(PRESENTATION_DEFINITION_JSON, PresentationDefinitionDTO.class)) .thenReturn(mockPresentationDefinitionDTO); - doNothing().when(verifierService).validateVerifier(CLIENT_ID, REDIRECT_URI); + doNothing().when(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI); when(presentationService.authorizePresentation(any(PresentationRequestDTO.class))) .thenThrow(exception); @@ -228,11 +233,12 @@ public void testPerformAuthorizationGenericException() throws Exception { .param("resource", RESOURCE) .param("presentation_definition", PRESENTATION_DEFINITION_JSON) .param("client_id", CLIENT_ID) - .param("redirect_uri", REDIRECT_URI)) + .param("redirect_uri", REDIRECT_URI) + .param("response_uri", RESPONSE_URI)) .andExpect(status().isFound()) .andExpect(redirectedUrl(expectedRedirectUrl)); - verify(verifierService).validateVerifier(CLIENT_ID, REDIRECT_URI); + verify(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI); verify(presentationService).authorizePresentation(any(PresentationRequestDTO.class)); } @@ -241,7 +247,7 @@ public void testPerformAuthorizationJsonParsingException() throws Exception { // Arrange when(objectMapper.readValue(PRESENTATION_DEFINITION_JSON, PresentationDefinitionDTO.class)) .thenThrow(new RuntimeException("JSON parsing failed")); - doNothing().when(verifierService).validateVerifier(CLIENT_ID, REDIRECT_URI); + doNothing().when(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI); String expectedRedirectUrl = String.format( "%s?error_code=%s&error_message=%s", @@ -256,11 +262,12 @@ public void testPerformAuthorizationJsonParsingException() throws Exception { .param("resource", RESOURCE) .param("presentation_definition", PRESENTATION_DEFINITION_JSON) .param("client_id", CLIENT_ID) - .param("redirect_uri", REDIRECT_URI)) + .param("redirect_uri", REDIRECT_URI) + .param("response_uri", RESPONSE_URI)) .andExpect(status().isFound()) .andExpect(redirectedUrl(expectedRedirectUrl)); - verify(verifierService).validateVerifier(CLIENT_ID, REDIRECT_URI); + verify(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI); verify(presentationService, never()).authorizePresentation(any()); } @@ -321,7 +328,8 @@ public void testPerformAuthorizationEmptyParameters() throws Exception { .param("resource", "") .param("presentation_definition", "") .param("client_id", "") - .param("redirect_uri", "")) + .param("redirect_uri", "") + .param("response_uri", "")) .andExpect(status().isFound()) .andExpect(redirectedUrl(expectedRedirectUrl)); } @@ -336,9 +344,10 @@ public void testPerformAuthorizationSpecialCharactersInParameters() throws Excep PresentationDefinitionDTO mockPresentationDefinitionDTO = new PresentationDefinitionDTO(); when(objectMapper.readValue(PRESENTATION_DEFINITION_JSON, PresentationDefinitionDTO.class)) .thenReturn(mockPresentationDefinitionDTO); + String specialResponseUri = "https://example.com/v0/verify/vp-submission/direct-post?session=abc"; when(presentationService.authorizePresentation(any(PresentationRequestDTO.class))) .thenReturn(SUCCESS_REDIRECT_URL); - doNothing().when(verifierService).validateVerifier(specialClientId, specialRedirectUri); + doNothing().when(verifierService).validateVerifier(specialClientId, specialResponseUri); // Act & Assert mockMvc.perform(get("/authorize") @@ -346,11 +355,12 @@ public void testPerformAuthorizationSpecialCharactersInParameters() throws Excep .param("resource", specialResource) .param("presentation_definition", PRESENTATION_DEFINITION_JSON) .param("client_id", specialClientId) - .param("redirect_uri", specialRedirectUri)) + .param("redirect_uri", specialRedirectUri) + .param("response_uri", specialResponseUri)) .andExpect(status().isFound()) .andExpect(redirectedUrl(SUCCESS_REDIRECT_URL)); - verify(verifierService).validateVerifier(specialClientId, specialRedirectUri); + verify(verifierService).validateVerifier(specialClientId, specialResponseUri); verify(presentationService).authorizePresentation(any(PresentationRequestDTO.class)); } @@ -375,7 +385,7 @@ public void testPerformAuthorizationWithExtraParameters() throws Exception { .thenReturn(mockPresentationDefinitionDTO); when(presentationService.authorizePresentation(any(PresentationRequestDTO.class))) .thenReturn(SUCCESS_REDIRECT_URL); - doNothing().when(verifierService).validateVerifier(CLIENT_ID, REDIRECT_URI); + doNothing().when(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI); mockMvc.perform(get("/authorize") .param("response_type", RESPONSE_TYPE) @@ -383,6 +393,7 @@ public void testPerformAuthorizationWithExtraParameters() throws Exception { .param("presentation_definition", PRESENTATION_DEFINITION_JSON) .param("client_id", CLIENT_ID) .param("redirect_uri", REDIRECT_URI) + .param("response_uri", RESPONSE_URI) .param("extra_param", "extra_value")) .andExpect(status().isFound()) .andExpect(redirectedUrl(SUCCESS_REDIRECT_URL)); @@ -393,7 +404,7 @@ public void testPerformAuthorizationWithMalformedPresentationDefinitionJson() th String malformedJson = "{invalid_json}"; when(objectMapper.readValue(malformedJson, PresentationDefinitionDTO.class)) .thenThrow(new RuntimeException("Malformed JSON")); - doNothing().when(verifierService).validateVerifier(CLIENT_ID, REDIRECT_URI); + doNothing().when(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI); String expectedRedirectUrl = String.format( "%s?error_code=%s&error_message=%s", @@ -407,7 +418,8 @@ public void testPerformAuthorizationWithMalformedPresentationDefinitionJson() th .param("resource", RESOURCE) .param("presentation_definition", malformedJson) .param("client_id", CLIENT_ID) - .param("redirect_uri", REDIRECT_URI)) + .param("redirect_uri", REDIRECT_URI) + .param("response_uri", RESPONSE_URI)) .andExpect(status().isFound()) .andExpect(redirectedUrl(expectedRedirectUrl)); } diff --git a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java index 1cf5edf5a..321d73068 100644 --- a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java @@ -91,15 +91,20 @@ public void setup() throws JsonProcessingException { public void credentialProofMatchingWithVPRequest() throws Exception { VCCredentialResponse vcCredentialResponse = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); + presentationRequestDTO.setResponseMode("direct_post"); + presentationRequestDTO.setResponseUri("https://verifier.example.com/response"); + + Map mockPostResponse = Map.of("redirect_uri", "https://verifier.example.com/success"); when(dataShareService.downloadCredentialFromDataShare(eq(presentationRequestDTO))).thenReturn(vcCredentialResponse); when(objectMapper.convertValue(eq(vcCredentialResponse.getCredential()), eq(VCCredentialProperties.class))) .thenReturn((VCCredentialProperties) vcCredentialResponse.getCredential()); - String expectedRedirectUrl = "test_redirect_uri#vp_token=dGVzdC1kYXRh&presentation_submission=test-data"; + when(restApiClient.postApi(anyString(), any(), any(), eq(Map.class))).thenReturn(mockPostResponse); - String actualRedirectUrl = presentationService.authorizePresentation(TestUtilities.getPresentationRequestDTO()); + String actualRedirectUrl = presentationService.authorizePresentation(presentationRequestDTO); - assertEquals(expectedRedirectUrl, actualRedirectUrl); + assertEquals("https://verifier.example.com/success", actualRedirectUrl); + verify(restApiClient).postApi(eq("https://verifier.example.com/response"), any(), any(), eq(Map.class)); } @Test(expected = VPNotCreatedException.class) @@ -116,19 +121,22 @@ public void credentialProofMismatchWithVPRequest() throws IOException { public void sdJwtCredentialMatchingWithVPRequest() throws Exception { VCCredentialResponse vcCredentialResponse = createSDJwtCredentialResponse("vc+sd-jwt"); PresentationRequestDTO presentationRequestDTO = createSDJwtPresentationRequest(); + presentationRequestDTO.setResponseMode("direct_post"); + presentationRequestDTO.setResponseUri("https://verifier.example.com/response"); Map jwtHeaders = Map.of("alg", "ES256", "typ", "JWT"); - + Map mockPostResponse = Map.of("redirect_uri", "https://verifier.example.com/success"); when(dataShareService.downloadCredentialFromDataShare(eq(presentationRequestDTO))).thenReturn(vcCredentialResponse); when(objectMapper.convertValue(eq(vcCredentialResponse.getCredential()), eq(String.class))) .thenReturn("eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.test.signature"); + when(restApiClient.postApi(anyString(), any(), any(), eq(Map.class))).thenReturn(mockPostResponse); try (MockedStatic jwtUtilsMock = mockStatic(JwtUtils.class)) { jwtUtilsMock.when(() -> parseJwtHeader(anyString())).thenReturn(jwtHeaders); - String expectedRedirectUrl = "test_redirect_uri#vp_token=dGVzdC1kYXRh&presentation_submission=test-data"; String actualRedirectUrl = presentationService.authorizePresentation(presentationRequestDTO); - assertEquals(expectedRedirectUrl, actualRedirectUrl); + assertEquals("https://verifier.example.com/success", actualRedirectUrl); + verify(restApiClient).postApi(eq("https://verifier.example.com/response"), any(), any(), eq(Map.class)); } } @@ -335,7 +343,7 @@ public void testDirectPostResponseMode() throws Exception { String result = presentationService.authorizePresentation(presentationRequestDTO); - assertEquals("test_redirect_uri", result); + assertEquals("https://verifier.example.com/success", result); verify(restApiClient).postApi(eq("https://verifier.example.com/response"), any(), any(), eq(Map.class)); } diff --git a/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java b/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java index ee6e094fd..a60b115ad 100644 --- a/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java @@ -98,31 +98,62 @@ public void shouldThrowApiNotAccessibleExceptionOnFetchingTrustedVerifiersListFa @Test public void validateTrustedVerifiersAndDoNothing() throws ApiNotAccessibleException, IOException { - PresentationRequestDTO presentationRequestDTO = PresentationRequestDTO.builder().clientId("test-clientId").redirectUri("https://test-redirectUri").build(); - verifiersService.validateVerifier(presentationRequestDTO.getClientId(), presentationRequestDTO.getRedirectUri()); + PresentationRequestDTO presentationRequestDTO = PresentationRequestDTO.builder().clientId("test-clientId").responseUri("https://test-responseUri").build(); + verifiersService.validateVerifier(presentationRequestDTO.getClientId(), presentationRequestDTO.getResponseUri()); } @Test(expected = InvalidVerifierException.class) public void validateTrustedVerifiersAndThrowInvalidVerifierExceptionWhenClientIdIsIncorrect() throws ApiNotAccessibleException, IOException { - PresentationRequestDTO presentationRequestDTO = PresentationRequestDTO.builder().clientId("test-clientId2").redirectUri("https://test-redirectUri").build(); - verifiersService.validateVerifier(presentationRequestDTO.getClientId(), presentationRequestDTO.getRedirectUri()); + PresentationRequestDTO presentationRequestDTO = PresentationRequestDTO.builder().clientId("test-clientId2").responseUri("https://test-responseUri").build(); + verifiersService.validateVerifier(presentationRequestDTO.getClientId(), presentationRequestDTO.getResponseUri()); } @Test public void validateTrustedVerifiersAndThrowInvalidVerifiersExceptionForAInvalidClientId() throws ApiNotAccessibleException, IOException { - PresentationRequestDTO presentationRequestDTO = PresentationRequestDTO.builder().clientId("test-clientId2").redirectUri("https://test-redirectUri").build(); + PresentationRequestDTO presentationRequestDTO = PresentationRequestDTO.builder().clientId("test-clientId2").responseUri("https://test-responseUri").build(); String expectedExceptionMsg = "invalid_client --> The requested client doesn’t match."; - InvalidVerifierException actualException = assertThrows(InvalidVerifierException.class, () -> verifiersService.validateVerifier(presentationRequestDTO.getClientId(), presentationRequestDTO.getRedirectUri())); + InvalidVerifierException actualException = assertThrows(InvalidVerifierException.class, () -> verifiersService.validateVerifier(presentationRequestDTO.getClientId(), presentationRequestDTO.getResponseUri())); assertEquals(expectedExceptionMsg, actualException.getMessage()); } @Test - public void validateTrustedVerifiersAndThrowInvalidVerifiersExceptionWhenClientIdIsValidAndRedirectUriIsIncorrect() throws ApiNotAccessibleException, IOException { - PresentationRequestDTO presentationRequestDTO = PresentationRequestDTO.builder().clientId("test-clientId").redirectUri("https://test-redirectUri/invalid-uri").build(); - String expectedExceptionMsg = "invalid_redirect_uri --> The requested redirect uri doesn’t match."; + public void validateTrustedVerifiersAndThrowInvalidVerifiersExceptionWhenClientIdIsValidAndResponseUriIsIncorrect() throws ApiNotAccessibleException, IOException { + PresentationRequestDTO presentationRequestDTO = PresentationRequestDTO.builder().clientId("test-clientId").responseUri("https://test-reponseUri/invalid-uri").build(); + String expectedExceptionMsg = "invalid_response_uri --> The requested response uri doesn’t match."; - InvalidVerifierException actualException = assertThrows(InvalidVerifierException.class, () -> verifiersService.validateVerifier(presentationRequestDTO.getClientId(), presentationRequestDTO.getRedirectUri())); + InvalidVerifierException actualException = assertThrows(InvalidVerifierException.class, () -> verifiersService.validateVerifier(presentationRequestDTO.getClientId(), presentationRequestDTO.getResponseUri())); + + assertEquals(expectedExceptionMsg, actualException.getMessage()); + } + + @Test + public void validateVerifierThrowsExceptionWhenResponseUriIsInvalidUrl() throws ApiNotAccessibleException, IOException { + String expectedExceptionMsg = "invalid_response_uri --> The requested response uri doesn’t match."; + + InvalidVerifierException actualException = assertThrows(InvalidVerifierException.class, + () -> verifiersService.validateVerifier("test-clientId", "not-a-valid-url")); + + assertEquals(expectedExceptionMsg, actualException.getMessage()); + } + + @Test + public void validateVerifierThrowsExceptionWhenRegisteredResponseUriIsInvalidUrl() throws Exception { + VerifierDTO verifierWithBadUri = VerifierDTO.builder() + .clientId("test-clientId") + .redirectUris(Collections.singletonList("https://test-redirectUri")) + .responseUris(Collections.singletonList("not-a-valid-registered-uri")).build(); + VerifiersDTO verifiersWithBadUri = VerifiersDTO.builder() + .verifiers(Collections.singletonList(verifierWithBadUri)).build(); + + String json = new ObjectMapper().writeValueAsString(verifiersWithBadUri); + when(utilities.getTrustedVerifiersJsonValue()).thenReturn(json); + when(objectMapper.readValue(eq(json), eq(VerifiersDTO.class))).thenReturn(verifiersWithBadUri); + + String expectedExceptionMsg = "invalid_response_uri --> The requested response uri doesn’t match."; + + InvalidVerifierException actualException = assertThrows(InvalidVerifierException.class, + () -> verifiersService.validateVerifier("test-clientId", "https://test-responseUri")); assertEquals(expectedExceptionMsg, actualException.getMessage()); } From c0fee8b1b276bd2c1a16f8a349784ba605946725 Mon Sep 17 00:00:00 2001 From: Mrudu-ch Date: Mon, 30 Mar 2026 13:15:58 +0530 Subject: [PATCH 837/860] =?UTF-8?q?MOSIP-44432:Mimoto=20-Update=20the=20te?= =?UTF-8?q?st=20case=20descriptions=20to=20improve=20clar=E2=80=A6=20(#104?= =?UTF-8?q?8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * MOSIP-44432:Mimoto -Update the test case descriptions to improve clarity and readability Signed-off-by: Mrudula * MOSIP-44432:Mimoto -Update the test case descriptions to improve clarity and readability Signed-off-by: Mrudula * MOSIP-44432:Mimoto -Update the test case descriptions to improve clarity and readability Signed-off-by: Mrudula * MOSIP-44432:Mimoto -Update the test case descriptions to improve clarity and readability Signed-off-by: Mrudula * MOSIP-44432:Mimoto -Update the test case descriptions to improve clarity and readability Signed-off-by: Mrudula * MOSIP-44432:resloved the coderabbit comments Signed-off-by: Mrudula --------- Signed-off-by: Mrudula --- .../mimoto/AddIdentity/AddIdentity.yml | 2 +- .../AidGetIndividualId/AidGetIndividualId.yml | 4 +- .../mimoto/AuthLock/createAuthLock.yml | 2 +- .../mimoto/AuthUnLock/createAuthUnLock.yml | 2 +- .../AuthenticateUser/AuthenticateUser.yml | 2 +- .../mimoto/BindingOtp/BindingOtp.yml | 4 +- .../CredentialCheckStatus.yml | 6 +- .../DownloadCredential/DownloadCredential.yml | 6 +- .../DownloadWithReqid/DownloadWithReqid.yml | 4 +- .../RequestCredentials/ReqCredential.yml | 12 +- .../GetIssuerWellKnown/GetIssuerWellKnown.yml | 4 +- .../GetVerifierList/GetVerifierList.yml | 2 +- .../GoogleLoginToken/GoogleLoginToken.yml | 12 +- .../LoginFlow/Authorization/Logout/Logout.yml | 6 +- .../AuthenticateUser/AuthenticateUser.yml | 4 +- .../AuthorizationCode/AuthorizationCode.yml | 4 +- .../DeleteCredentials/DeleteCredentials.yml | 16 +- .../DownloadIssuerCredential.yml | 80 ++++----- .../FetchAllCredentials.yml | 14 +- .../OAuthDetailsRequest.yml | 4 +- .../ViewCredential/ViewCredential.yml | 44 ++--- .../ViewCredentialAfterLogout.yml | 4 +- .../AuthenticateUserSunBirdC.yml | 4 +- .../AuthorizationCodeSunBirdC.yml | 4 +- .../DownloadIssuerCredential.yml | 10 +- .../OAuthDetailsRequestSunBirdC.yml | 4 +- .../AddTrustedVerifier/AddTrustedVerifier.yml | 14 +- .../GetCredentialsForPresentation.yml | 20 +-- .../InjiVerifyVpRequest.yml | 2 +- .../RejectPresentation/RejectPresentation.yml | 14 +- .../SubmitPresentation/SubmitPresentation.yml | 14 +- .../VerifiablePresentationAuthorization.yml | 12 +- .../Users/GetUserProfile/GetUserProfile.yml | 2 +- .../GetUserProfileAfterLogout.yml | 2 +- .../Wallet/CreateWallet/CreateWallet.yml | 46 +++--- .../Wallet/DeleteWallet/DeleteWallet.yml | 14 +- .../Wallet/GetWallets/GetWallets.yml | 6 +- .../Wallet/UnlockWallet/UnlockWallet.yml | 10 +- .../UnlockWalletAfterDelete.yml | 2 +- .../UnlockWalletForTemporarilyLock.yml | 2 +- .../OAuthDetailsRequest.yml | 2 +- .../main/resources/mimoto/SendOTP/SendOTP.yml | 6 +- .../mimoto/SendOTPUIN/createSendOTP.yml | 2 +- .../mimoto/SendOtpForVid/createSendOTP.yml | 2 +- .../AuthenticateUserSunBirdC.yml | 2 +- .../AuthorizationCodeSunBirdC.yml | 2 +- .../OAuthDetailsRequestSunBirdC.yml | 2 +- .../CreatePolicySunBirdR.yml | 2 +- .../DeletePolicySunBirdR.yml | 2 +- .../GetPolicySunBirdR/GetPolicySunBirdR.yml | 2 +- .../SearchPolicySunBirdR.yml | 2 +- .../mimoto/ValidateOTP/ValidateOTP.yml | 24 +-- .../mimoto/WalletBinding/WalletBinding.yml | 156 +++++++++--------- 53 files changed, 313 insertions(+), 313 deletions(-) diff --git a/api-test/src/main/resources/mimoto/AddIdentity/AddIdentity.yml b/api-test/src/main/resources/mimoto/AddIdentity/AddIdentity.yml index 08713473e..ad48dd3bd 100644 --- a/api-test/src/main/resources/mimoto/AddIdentity/AddIdentity.yml +++ b/api-test/src/main/resources/mimoto/AddIdentity/AddIdentity.yml @@ -1,7 +1,7 @@ AddIdentity: Mimoto_AddIdentity_withValidParameters_smoke_Pos: endPoint: /idrepository/v1/identity/ - description: Validate that the system successfully creates a new identity in ID Repository using all valid input parameters. + description: Validate that the system successfully creates a new identity in ID Repository using all valid input parameters uniqueIdentifier: TC_Mimoto_AddIdentity_01 role: idrepo restMethod: post diff --git a/api-test/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml b/api-test/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml index b36042b35..8000d523c 100644 --- a/api-test/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml +++ b/api-test/src/main/resources/mimoto/AidGetIndividualId/AidGetIndividualId.yml @@ -28,7 +28,7 @@ AidGetIndividualId: Mimoto_AidGetIndividualId_Getting_With_Invalid_AID_Neg: endPoint: /v1/mimoto/aid/get-individual-id - description: Validate that the system does not generate an individualID when an invalid AID is provided, and returns the appropriate error response + description: Validate that the system does not generate an individualID when an invalid AID is provided and returns the appropriate error response uniqueIdentifier: TC_Mimoto_AidGetIndividualId_02 role: resident checkErrorsOnlyInResponse: true @@ -117,7 +117,7 @@ AidGetIndividualId: Mimoto_AidGetIndividualId_Getting_With_Invalid_lenght_Of_AID_Neg: endPoint: /v1/mimoto/aid/get-individual-id - description: Verify the system Generating individualID with invalid lengh of AID + description: Validate that the system does not generate an individualID when an invalid length AID is provided and returns the appropriate error response uniqueIdentifier: TC_Mimoto_AidGetIndividualId_05 role: resident checkErrorsOnlyInResponse: true diff --git a/api-test/src/main/resources/mimoto/AuthLock/createAuthLock.yml b/api-test/src/main/resources/mimoto/AuthLock/createAuthLock.yml index 2a13862d3..12f6c62d7 100644 --- a/api-test/src/main/resources/mimoto/AuthLock/createAuthLock.yml +++ b/api-test/src/main/resources/mimoto/AuthLock/createAuthLock.yml @@ -127,7 +127,7 @@ AuthLock: }' Mimoto_AuthLock_with_invalidVID_Valid_Otp: endPoint: /v1/mimoto/req/auth/lock - description: Verify that the system does not lock a authentication when an invalid OTP is provided + description: Verify that the system does not lock authentication when an invalid VID is provided uniqueIdentifier: TC_Mimoto_AuthLock_05 role: resident checkErrorsOnlyInResponse: true diff --git a/api-test/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml b/api-test/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml index f15acd92d..c2f2865f4 100644 --- a/api-test/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml +++ b/api-test/src/main/resources/mimoto/AuthUnLock/createAuthUnLock.yml @@ -61,7 +61,7 @@ AuthUnlock: }' Mimoto_AuthUnLock_With_InValid_OTP_All: endPoint: /v1/mimoto/req/auth/unlock - description: Validate that the system does not unlock the UIN when an invalid OTP is provided and displays the appropriate error message + description: Validate that the system does not unlock the UIN when an invalid OTP is provided and returns the expected error code uniqueIdentifier: TC_Mimoto_AuthLock_09 role: resident checkErrorsOnlyInResponse: true diff --git a/api-test/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.yml b/api-test/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.yml index 5660e7d74..ee4269fc1 100644 --- a/api-test/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.yml +++ b/api-test/src/main/resources/mimoto/AuthenticateUser/AuthenticateUser.yml @@ -1,7 +1,7 @@ AuthenticateUser: Mimoto_ESignet_AuthenticateUserIDP_uin_Otp_Valid_Smoke: endPoint: /v1/esignet/authorization/authenticate - description: Verify that the user is successfully authenticated and able to download credentials when all valid parameters are provided + description: Verify that the user is successfully authenticated for the credential download flow when all valid parameters are provided uniqueIdentifier: TC_Mimoto_AuthenticateUser_01 role: resident restMethod: post diff --git a/api-test/src/main/resources/mimoto/BindingOtp/BindingOtp.yml b/api-test/src/main/resources/mimoto/BindingOtp/BindingOtp.yml index 4adb0983a..1b80b7308 100644 --- a/api-test/src/main/resources/mimoto/BindingOtp/BindingOtp.yml +++ b/api-test/src/main/resources/mimoto/BindingOtp/BindingOtp.yml @@ -81,7 +81,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Empty_individualId_Neg: endPoint: /v1/mimoto/binding-otp - description: Validate that the system does not generate an OTP when the individualID is missing + description: Validate that the system does not generate an OTP when the individualID is empty uniqueIdentifier: TC_Mimoto_BindingOtp_05 role: resident restMethod: post @@ -277,7 +277,7 @@ BindingOtp: Mimoto_BindingOtp_UIN_Null_OtpChannel_Neg: endPoint: /v1/mimoto/binding-otp - description: Verify that the system prevents OTP generation when the OTP channel is empty + description: Verify that the system prevents OTP generation when the OTP Channels field is the string null uniqueIdentifier: TC_Mimoto_BindingOtp_14 role: resident restMethod: post diff --git a/api-test/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml b/api-test/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml index e7a88d8c7..c006f6165 100644 --- a/api-test/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml +++ b/api-test/src/main/resources/mimoto/CredentialIssuance/CredentialCheckStatus/CredentialCheckStatus.yml @@ -1,7 +1,7 @@ CredentialsStatus: Mimoto_CredentialsStatus_euin_All_Valid_Smoke: endPoint: /v1/mimoto/credentialshare/request/status/{requestId} - description: Retrieving credential status with valid UIN + description: Verifying that the credential status is retrieved successfully with a valid UIN uniqueIdentifier: TC_Mimoto_CredentialsStatus_01 role: resident restMethod: get @@ -15,7 +15,7 @@ CredentialsStatus: }' Mimoto_CredentialsStatus_euin_With_VID_All_Valid_Smoke: endPoint: /v1/mimoto/credentialshare/request/status/{requestId} - description: Retrieving credential status with valid VID + description: Verify that the credential status is successfully retrieved when a valid VID is provided uniqueIdentifier: TC_Mimoto_CredentialsStatus_02 role: resident restMethod: get @@ -30,7 +30,7 @@ CredentialsStatus: Mimoto_CredentialsStatus_euin_With_Invalid_RequestId_Neg: endPoint: /v1/mimoto/credentialshare/request/status/{requestId} - description: Retrieving credential status with invalid requestId + description: Verifying that the system returns the appropriate error response when retrieving credential status with an invalid request ID uniqueIdentifier: TC_Mimoto_CreateVID_03 role: resident restMethod: get diff --git a/api-test/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml b/api-test/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml index 824c0f97e..5c2c1da39 100644 --- a/api-test/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml +++ b/api-test/src/main/resources/mimoto/CredentialIssuance/DownloadCredential/DownloadCredential.yml @@ -1,7 +1,7 @@ DownloadCredential: Mimoto_DownloadCredential_All_Valid_Smoke: endPoint: /v1/mimoto/credentialshare/download - description: Downloading credential with all valid parameters + description: Verifying that the credential is downloaded successfully with all valid parameters uniqueIdentifier: TC_Mimoto_DownloadCredential_01 role: resident restMethod: post @@ -17,7 +17,7 @@ DownloadCredential: Mimoto_DownloadCredential_Invalid_RequestId_Neg: endPoint: /v1/mimoto/credentialshare/download - description: Downloading credetial with invalid RequestId + description: Validating the download of the credential with an invalid request ID uniqueIdentifier: TC_Mimoto_DownloadCredential_02 role: resident restMethod: post @@ -33,7 +33,7 @@ DownloadCredential: Mimoto_DownloadCredential_Invalid_IndividualId_Neg: endPoint: /v1/mimoto/credentialshare/download - description: Downloading credetial with invalid IndividualId + description: Verifying that the system returns an appropriate error when attempting to download the credential with an invalid Individual ID uniqueIdentifier: TC_Mimoto_DownloadCredential_03 role: resident restMethod: post diff --git a/api-test/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml b/api-test/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml index b97c68f78..aeb552ecb 100644 --- a/api-test/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml +++ b/api-test/src/main/resources/mimoto/CredentialIssuance/DownloadWithReqid/DownloadWithReqid.yml @@ -1,7 +1,7 @@ DownloadCredential: Mimoto_CredentialsStatus_All_Valid_Smoke_euin: endPoint: /v1/mimoto/credentialshare/download - description: Checking credential status with all valid parameters + description: Verify that the credential is downloaded successfully with all valid parameters uniqueIdentifier: TC_Mimoto_DownloadCredential_01 role: resident checkErrorsOnlyInResponse: true @@ -17,7 +17,7 @@ DownloadCredential: }' Mimoto_CredentialsStatus_StatusCode_InValid_Smoke_euin: endPoint: /v1/mimoto/credentialshare/download - description: Checking credential status with invalid StatusCode + description: Verify that the system returns an appropriate error when checking credential status with an invalid StatusCode uniqueIdentifier: TC_Mimoto_DownloadCredential_02 role: resident restMethod: get diff --git a/api-test/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml b/api-test/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml index 7b76152a0..1544b3c16 100644 --- a/api-test/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml +++ b/api-test/src/main/resources/mimoto/CredentialIssuance/RequestCredentials/ReqCredential.yml @@ -1,7 +1,7 @@ RequestCredentials: Mimoto_RequestCredentials__All_Valid_Smoke_sid: endPoint: /v1/mimoto/credentialshare/request - description: requesting credential with all valid parameters + description: Verifying that the credential is requested successfully with all valid parameters uniqueIdentifier: TC_Mimoto_RequestCredentials_01 role: resident checkErrorsOnlyInResponse: true @@ -29,7 +29,7 @@ RequestCredentials: }' Mimoto_RequestCredentials_All_Valid_Smoke_with_VID_sid: endPoint: /v1/mimoto/credentialshare/request - description: requesting credential with valid VID + description: Verifying that the credential is requested successfully with a valid VID uniqueIdentifier: TC_Mimoto_RequestCredentials_02 role: resident restMethod: post @@ -58,7 +58,7 @@ RequestCredentials: Mimoto_RequestCredentials_InValid_Otp_UIN_sid: endPoint: /v1/mimoto/credentialshare/request role: resident - description: requesting UIN credential with invalid OTP + description: Verifying that the system returns an appropriate error when requesting a UIN credential with an invalid OTP uniqueIdentifier: TC_Mimoto_RequestCredentials_03 checkErrorsOnlyInResponse: true restMethod: post @@ -90,7 +90,7 @@ RequestCredentials: }' Mimoto_RequestCredentials_InValid_TransactionId_sid: endPoint: /v1/mimoto/credentialshare/request - description: requesting credential with invalid transactionID + description: Verifying that the system returns an appropriate error when requesting a credential with an invalid transaction ID uniqueIdentifier: TC_Mimoto_RequestCredentials_04 role: resident checkErrorsOnlyInResponse: true @@ -124,7 +124,7 @@ RequestCredentials: Mimoto_RequestCredentials_InValid_UIN_sid: endPoint: /v1/mimoto/credentialshare/request - description: requesting credential with invalid UIN + description: Verifying that the system returns an appropriate error when requesting a credential with an invalid UIN uniqueIdentifier: TC_Mimoto_RequestCredentials_05 role: resident checkErrorsOnlyInResponse: true @@ -158,7 +158,7 @@ RequestCredentials: Mimoto_RequestCredentials_Invalid_VID_sid_Neg: endPoint: /v1/mimoto/credentialshare/request - description: requesting credential with invalid VID + description: Verifying that the system returns an appropriate error when requesting a credential with an invalid VID uniqueIdentifier: TC_Mimoto_RequestCredentials_06 role: resident checkErrorsOnlyInResponse: true diff --git a/api-test/src/main/resources/mimoto/GetIssuerWellKnown/GetIssuerWellKnown.yml b/api-test/src/main/resources/mimoto/GetIssuerWellKnown/GetIssuerWellKnown.yml index 083361f4d..a8e3158ad 100644 --- a/api-test/src/main/resources/mimoto/GetIssuerWellKnown/GetIssuerWellKnown.yml +++ b/api-test/src/main/resources/mimoto/GetIssuerWellKnown/GetIssuerWellKnown.yml @@ -1,7 +1,7 @@ GetIssuerWellKnown: Mimoto_GetIssuerWellKnown_All_Valid_Smoke: endPoint: /v1/mimoto/issuers/{issuerId}/well-known-proxy - description: Verify that the system successfully generates the issuer .well-known configuration with all valid parameters. + description: Verify that the system successfully generates the issuer well-known configuration with all valid parameters role: resident restMethod: get checkErrorsOnlyInResponse: true @@ -16,7 +16,7 @@ GetIssuerWellKnown: # Mimoto_GetIssuerWellKnown_Invalid_Issuer_Neg: # endPoint: /v1/mimoto/issuers/{issuerId}/well-known-proxy -# description: Verify that the system fails to generate the issuer .well-known configuration with invalid parameters. +# description: Verify that the system fails to generate the issuer well-known configuration with invalid parameters # role: resident # restMethod: get # checkErrorsOnlyInResponse: true diff --git a/api-test/src/main/resources/mimoto/GetVerifierList/GetVerifierList.yml b/api-test/src/main/resources/mimoto/GetVerifierList/GetVerifierList.yml index 95e69a28f..d5d58b32f 100644 --- a/api-test/src/main/resources/mimoto/GetVerifierList/GetVerifierList.yml +++ b/api-test/src/main/resources/mimoto/GetVerifierList/GetVerifierList.yml @@ -1,7 +1,7 @@ GetVerifierList: Mimoto_GetVerifierList_All_Valid_Smoke: endPoint: /v1/mimoto/verifiers - description: Retrieving verifiers list with all valid parameters + description: Verifying that the verifiers list is retrieved successfully with all valid parameters uniqueIdentifier: TC_Mimoto_GetVerifierList_01 role: resident restMethod: get diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Authorization/GoogleLoginToken/GoogleLoginToken.yml b/api-test/src/main/resources/mimoto/LoginFlow/Authorization/GoogleLoginToken/GoogleLoginToken.yml index d2403231c..a35f539f1 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/Authorization/GoogleLoginToken/GoogleLoginToken.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/Authorization/GoogleLoginToken/GoogleLoginToken.yml @@ -1,7 +1,7 @@ GoogleLoginToken: Mimoto_GoogleLoginToken_all_Valid_Smoke: endPoint: /v1/mimoto/auth/google/token-login - description: Creating the sesion token for google login + description: Verify and validate the session token generation during Google login uniqueIdentifier: TC_Mimoto_GoogleLoginToken_01 role: userDefinedCookie restMethod: post @@ -17,7 +17,7 @@ GoogleLoginToken: Mimoto_GoogleLoginToken_Invalid_Provider_Neg: endPoint: /v1/mimoto/auth/invalid/token-login - description: Creating the sesion token for google login with invalid provider + description: Verify the behavior when creating a session token for Google login with an invalid provider uniqueIdentifier: TC_Mimoto_GoogleLoginToken_02 role: userDefinedCookie restMethod: post @@ -32,7 +32,7 @@ GoogleLoginToken: Mimoto_GoogleLoginToken_InvalidToken_Neg: endPoint: /v1/mimoto/auth/google/token-login - description: Creating the sesion token for google login with invalid IDT token and expects it to fail + description: Verify and validate that session token creation fails when Google login is attempted with an invalid IDT token uniqueIdentifier: TC_Mimoto_GoogleLoginToken_03 role: userDefinedCookie restMethod: post @@ -47,7 +47,7 @@ GoogleLoginToken: Mimoto_GoogleLoginToken_ExpiredToken_Neg: endPoint: /v1/mimoto/auth/google/token-login - description: Creating the sesion token for google login with expired token and expects it to fail + description: Verify and validate that session token creation fails when Google login is attempted with an expired token uniqueIdentifier: TC_Mimoto_GoogleLoginToken_04 role: userDefinedCookie restMethod: post @@ -62,7 +62,7 @@ GoogleLoginToken: Mimoto_GoogleLoginToken_EmptyToken_Neg: endPoint: /v1/mimoto/auth/google/token-login - description: Creating the sesion token for google login with expired token and expects it to fail + description: Verify that the system fails to create a session token for Google login when the ID token is empty uniqueIdentifier: TC_Mimoto_GoogleLoginToken_05 role: userDefinedCookie restMethod: post @@ -76,7 +76,7 @@ GoogleLoginToken: }' Mimoto_GoogleLoginToken_all_ValidForLockedWallet_Smoke: endPoint: /v1/mimoto/auth/google/token-login - description: Creating the sesion token for google login for locked wallet scenarios + description: Verify and validate the session token creation for Google login when the wallet is locked uniqueIdentifier: TC_Mimoto_GoogleLoginToken_06 role: userDefinedCookie restMethod: post diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Authorization/Logout/Logout.yml b/api-test/src/main/resources/mimoto/LoginFlow/Authorization/Logout/Logout.yml index 48b4d13a4..97cac30c1 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/Authorization/Logout/Logout.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/Authorization/Logout/Logout.yml @@ -1,7 +1,7 @@ Logout: Mimoto_Logout_all_Valid_Smoke: endPoint: /v1/mimoto/logout - description: Logout the session that is created + description: Verify that the user is successfully logged out of the created session uniqueIdentifier: TC_Mimoto_Logout_01 role: userDefinedCookie restMethod: post @@ -18,7 +18,7 @@ Logout: Mimoto_Logout_WithoutLogin_Neg: endPoint: /v1/mimoto/logout - description: Logout the session without creating the login session and providing random cookie value and expects it to fail + description: Verify that the logout request fails when a random cookie value is provided without creating a login session uniqueIdentifier: TC_Mimoto_Logout_02 role: userDefinedCookie restMethod: post @@ -35,7 +35,7 @@ Logout: Mimoto_Logout_WithExpiredSession_Neg: endPoint: /v1/mimoto/logout - description: Logout the session with expired login session and expects it to fail + description: Verify that the logout request fails when the login session has expired uniqueIdentifier: TC_Mimoto_Logout_03 role: userDefinedCookie restMethod: post diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthenticateUser/AuthenticateUser.yml b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthenticateUser/AuthenticateUser.yml index ba2db0ebe..0d982edc2 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthenticateUser/AuthenticateUser.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthenticateUser/AuthenticateUser.yml @@ -1,7 +1,7 @@ AuthenticateUserForGoogleLogin: Mimoto_ESignet_AuthenticateUserIDPForGoogleLogin_uin_Otp_Valid_Smoke: endPoint: /v1/esignet/authorization/authenticate - description: Authenticate user to download credentials with all valid parameters + description: Verify that the user can authenticate successfully to download credentials with all valid parameters uniqueIdentifier: TC_Mimoto_AuthenticateUserForGoogleLogin_01 role: resident restMethod: post @@ -36,7 +36,7 @@ AuthenticateUserForGoogleLogin: Mimoto_ESignet_AuthenticateUserIDPForGoogleLogin_uin_Otp_Valid_ForNeg: endPoint: /v1/esignet/authorization/authenticate - description: Authenticate user to download credentials with all valid parameters for neg scenario + description: Verify that user authentication fails when attempting to download credentials with invalid parameters uniqueIdentifier: TC_Mimoto_AuthenticateUserForGoogleLogin_02 role: resident restMethod: post diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthorizationCode/AuthorizationCode.yml b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthorizationCode/AuthorizationCode.yml index ac618babd..781ed1673 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthorizationCode/AuthorizationCode.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/AuthorizationCode/AuthorizationCode.yml @@ -1,7 +1,7 @@ AuthorizationCodeForGoogleLogin: Mimoto_ESignet_AuthorizationCode_GoogleLogin_uin_All_Valid_Smoke_sid: endPoint: /v1/esignet/authorization/auth-code - description: Generate authorization code to download credential issuer + description: Verify that an authorization code is successfully generated to download the credential from the issuer uniqueIdentifier: TC_Mimoto_AuthorizationCodeForGoogleLogin_01 role: resident restMethod: post @@ -20,7 +20,7 @@ AuthorizationCodeForGoogleLogin: Mimoto_ESignet_AuthorizationCode_GoogleLogin_uin_All_Valid_sid_ForNeg: endPoint: /v1/esignet/authorization/auth-code - description: Generate authorization code to download credential issuer for Neg scenario + description: Verify that authorization code generation fails when invalid or negative conditions are applied while downloading the credential from the issuer uniqueIdentifier: TC_Mimoto_AuthorizationCodeForGoogleLogin_02 role: resident restMethod: post diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DeleteCredentials/DeleteCredentials.yml b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DeleteCredentials/DeleteCredentials.yml index e7c219b6b..5922f88d9 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DeleteCredentials/DeleteCredentials.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DeleteCredentials/DeleteCredentials.yml @@ -1,7 +1,7 @@ DeleteCredentials: Mimoto_DeleteCredentials_all_Valid_Smoke: endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId} - description: Delete the credential that is saved for the wallet + description: Verify that the system removes the specified credential from the wallet when requested uniqueIdentifier: TC_Mimoto_DeleteCredentials_01 role: userDefinedCookie restMethod: delete @@ -20,7 +20,7 @@ DeleteCredentials: Mimoto_DeleteCredentials_allReadyDeleted_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId} - description: Delete the credential that is already deleted for the wallet and expects it to fail + description: Verify that deleting a credential fails when the credential has already been removed from the wallet uniqueIdentifier: TC_Mimoto_DeleteCredentials_02 role: userDefinedCookie restMethod: delete @@ -38,7 +38,7 @@ DeleteCredentials: Mimoto_DeleteCredentials_Invalid_CredentialId_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId} - description: Delete the credential invalid credential id for the wallet and expects it to fail + description: Verify that deleting a credential fails when an invalid credential ID is provided for the wallet uniqueIdentifier: TC_Mimoto_DeleteCredentials_03 role: userDefinedCookie restMethod: delete @@ -56,7 +56,7 @@ DeleteCredentials: Mimoto_DeleteCredentials_Invalid_WalletId_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId} - description: Delete the credential invalid wallet id for the wallet and expects it to fail + description: Verify that deleting a credential fails when an invalid wallet ID is provided uniqueIdentifier: TC_Mimoto_DeleteCredentials_04 role: userDefinedCookie restMethod: delete @@ -74,7 +74,7 @@ DeleteCredentials: Mimoto_DeleteCredentials_EmptyOrSpace_CredentialId_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId} - description: Delete the credential empty or space in credential id and expects it to fail + description: Verify that deleting a credential fails when the credential ID is empty or contains only spaces uniqueIdentifier: TC_Mimoto_DeleteCredentials_05 role: userDefinedCookie restMethod: delete @@ -92,7 +92,7 @@ DeleteCredentials: Mimoto_DeleteCredentials_WithSession_Expired_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId} - description: Delete the credential for the wallet with expired session and expects it to fail + description: Verify that deleting a credential fails when the session has expired uniqueIdentifier: TC_Mimoto_DeleteCredentials_07 role: userDefinedCookie restMethod: delete @@ -110,7 +110,7 @@ DeleteCredentials: Mimoto_DeleteCredentials_WithSession_Expired_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId} - description: Delete the credential for the wallet without login and expects it to fail + description: Verify that deleting a credential fails when the user is not logged in uniqueIdentifier: TC_Mimoto_DeleteCredentials_08 role: userDefinedCookie restMethod: delete @@ -129,7 +129,7 @@ DeleteCredentials: Mimoto_DeleteCredentials_MultipleCredentialCreated_valid: endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId} - description: Delete the credential for the wallet with multiple credentials created + description: Verify that a specific credential can be successfully deleted from the wallet when multiple credentials exist uniqueIdentifier: TC_Mimoto_DeleteCredentials_06 role: userDefinedCookie restMethod: delete diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential.yml b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential.yml index e3a53d971..f322f80c2 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/DownloadIssuerCredential/DownloadIssuerCredential.yml @@ -1,7 +1,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_All_Valid_Smoke_sid: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential with all valid parameters along with google login + description: Verify that the credential is downloaded successfully with all valid parameters using Google login uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_01 role: userDefinedCookie restMethod: get @@ -26,7 +26,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_DownloadSameVC_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading same credential with all valid parameters along with google login and expects to fail + description: Verify that downloading the same credential again with all valid parameters using Google login fails uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_02 role: userDefinedCookie restMethod: get @@ -50,7 +50,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_With_Diff_Active_session_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential with all valid parameters along with google login when a different session is active and expects to fail + description: Verify that downloading the credential with all valid parameters using Google login fails when a different session is active uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_38 role: userDefinedCookie restMethod: get @@ -73,7 +73,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_InvalidWallet_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential with invalid wallet id along with google login and expects to fail + description: Verify that downloading the credential with an invalid wallet ID using Google login fails uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_03 role: userDefinedCookie restMethod: get @@ -96,7 +96,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_SpaceInWallet_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential with sapce value in wallet id along with google login and expects to fail + description: Verify that downloading the credential with a space value in the wallet ID using Google login fails uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_04 role: userDefinedCookie restMethod: get @@ -119,7 +119,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_NullInWallet_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential with null value in wallet id along with google login and expects to fail + description: Verify that downloading the credential fails when a null value is provided in the wallet ID using Google login uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_05 role: userDefinedCookie restMethod: get @@ -142,7 +142,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_NumericValueInWallet_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential with numeric value in wallet id along with google login and expects to fail + description: Verify that downloading the credential fails when a numeric value is provided in the wallet ID using Google login uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_06 role: userDefinedCookie restMethod: get @@ -165,7 +165,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_InvalidGrantType_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential with invalid grant type along with google login and expects to fail + description: Verify that downloading the credential fails when an invalid grant type is provided using Google login uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_07 role: userDefinedCookie restMethod: get @@ -188,7 +188,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_EmptyGrantType_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential with empty grant type along with google login and expects to fail + description: Verify that downloading the credential fails when an empty grant type is provided using Google login uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_08 role: userDefinedCookie restMethod: get @@ -211,7 +211,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_SpaceInGrantType_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential with space in grant type along with google login and expects to fail + description: Verify that downloading the credential fails when a space value is provided in the grant type using Google login uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_09 role: userDefinedCookie restMethod: get @@ -234,7 +234,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_MissingGrantType_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential with missing grant type along with google login and expects to fail + description: Verify that downloading the credential fails when the grant type is missing using Google login uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_10 role: userDefinedCookie restMethod: get @@ -257,7 +257,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_NumericGrantType_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential with numeric grant type along with google login and expects to fail + description: Verify that downloading the credential fails when a numeric value is provided in the grant type using Google login uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_11 role: userDefinedCookie restMethod: get @@ -280,7 +280,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_InvalidCode_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential with invalid code along with google login and expects to fail + description: Verify that downloading a credential using an invalid code with Google login fails and returns an appropriate error message uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_12 role: userDefinedCookie restMethod: get @@ -303,7 +303,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_EmptyCode_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential with empty code along with google login and expects to fail + description: Verify that downloading a credential with an empty code using Google login fails and returns an appropriate error message uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_13 role: userDefinedCookie restMethod: get @@ -326,7 +326,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_SpaceInCode_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential with space in code along with google login and expects to fail + description: Verify that downloading a credential using a code with only spaces during Google login fails and returns an appropriate error message uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_14 role: userDefinedCookie restMethod: get @@ -349,7 +349,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_MissingCode_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential with missing code along with google login and expects to fail + description: Verify that downloading a credential without providing a code during Google login fails and returns an appropriate error message uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_15 role: userDefinedCookie restMethod: get @@ -372,7 +372,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_NumericInCode_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential with numeric in code along with google login and expects to fail + description: Verify that downloading a credential using a numeric-only code during Google login fails and returns an appropriate error message uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_16 role: userDefinedCookie restMethod: get @@ -395,7 +395,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_InvalidRedirectUri_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential with invalid redirect uri along with google login and expects to fail + description: Verify that downloading a credential with an invalid redirect URI during Google login fails and returns an appropriate error message uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_17 role: userDefinedCookie restMethod: get @@ -418,7 +418,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_EmptyRedirectUri_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential with empty redirect uri along with google login and expects to fail + description: Verify that downloading a credential with an empty redirect URI during Google login fails and returns an appropriate error message uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_18 role: userDefinedCookie restMethod: get @@ -441,7 +441,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_SpaceInRedirectUri_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential with space in redirect uri along with google login and expects to fail + description: Verify that downloading a credential with a redirect URI containing only spaces during Google login fails and returns an appropriate error message uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_19 role: userDefinedCookie restMethod: get @@ -464,7 +464,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_MissingRedirectUri_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential with missing redirect uri along with google login and expects to fail + description: Verify that downloading a credential without providing a redirect URI during Google login fails and returns an appropriate error message uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_20 role: userDefinedCookie restMethod: get @@ -487,7 +487,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_NumericInRedirectUri_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential with numeric in redirect uri along with google login and expects to fail + description: Verify that downloading a credential with a numeric-only redirect URI during Google login fails and returns an appropriate error message uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_21 role: userDefinedCookie restMethod: get @@ -510,7 +510,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_InvalidCodeVerifier_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential with invalid code verifier along with google login and expects to fail + description: Verify that downloading a credential with an invalid code verifier during Google login fails and returns an appropriate error message uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_22 role: userDefinedCookie restMethod: get @@ -533,7 +533,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_EmptyCodeVerifier_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential with empty code verifier along with google login and expects to fail + description: Verify that downloading a credential with an empty code verifier during Google login fails and returns an appropriate error message uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_23 role: userDefinedCookie restMethod: get @@ -556,7 +556,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_SpaceInCodeVerifier_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential with space in code verifier along with google login and expects to fail + description: Verify that downloading a credential with a code verifier containing only spaces during Google login fails and returns an appropriate error message uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_24 role: userDefinedCookie restMethod: get @@ -579,7 +579,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_MissingCodeVerifier_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential with missing code verifier along with google login and expects to fail + description: Verify that downloading a credential without providing a code verifier during Google login fails and returns an appropriate error message uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_25 role: userDefinedCookie restMethod: get @@ -602,7 +602,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_NumericInCodeVerifier_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential with numeric in code verifier along with google login and expects to fail + description: Verify that downloading a credential with a numeric-only code verifier during Google login fails and returns an appropriate error message uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_26 role: userDefinedCookie restMethod: get @@ -625,7 +625,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_InvalidIssuer_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential with invalid issuer along with google login and expects to fail + description: Verify that downloading a credential fails when an invalid issuer is provided even with Google login uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_27 role: userDefinedCookie restMethod: get @@ -648,7 +648,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_EmptyIssuer_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential with empty issuer along with google login and expects to fail + description: Verify that downloading a credential fails when the issuer field is empty even with Google login uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_28 role: userDefinedCookie restMethod: get @@ -671,7 +671,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_SpaceInIssuer_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential with space in issuer along with google login and expects to fail + description: Verify that downloading a credential fails when the issuer contains spaces even with Google login uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_29 role: userDefinedCookie restMethod: get @@ -694,7 +694,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_MissingIssuer_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential with missing issuer along with google login and expects to fail + description: Verify that downloading a credential fails when the issuer field is missing even with Google login uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_30 role: userDefinedCookie restMethod: get @@ -717,7 +717,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_NumericInIssuer_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential with numeric in issuer along with google login and expects to fail + description: Verify that downloading a credential fails when the issuer contains numeric values even with Google login uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_31 role: userDefinedCookie restMethod: get @@ -740,7 +740,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_InvalidCredential_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential with invalid credential along with google login and expects to fail + description: Verify that downloading a credential fails when an invalid credential is provided even with Google login uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_32 role: userDefinedCookie restMethod: get @@ -763,7 +763,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_EmptyCredential_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential with empty credential along with google login and expects to fail + description: Verify that downloading a credential fails when the credential field is empty even with Google login uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_33 role: userDefinedCookie restMethod: get @@ -786,7 +786,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_SpaceInCredential_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential with space in credential along with google login and expects to fail + description: Verify that downloading a credential fails when the credential contains spaces even with Google login uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_34 role: userDefinedCookie restMethod: get @@ -809,7 +809,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_MissingCredential_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential with missing credential along with google login and expects to fail + description: Verify that downloading a credential fails when the credential field is missing even with Google login uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_35 role: userDefinedCookie restMethod: get @@ -832,7 +832,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_NumericInCredential_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential with numeric in credential along with google login and expects to fail + description: Verify that downloading a credential fails when the credential contains numeric values even with Google login uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_36 role: userDefinedCookie restMethod: get @@ -855,7 +855,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_EmptyRequestBody_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential with empty request body with google login and expects to fail + description: Verify that downloading a credential fails when the request body is empty even with Google login uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_37 role: userDefinedCookie restMethod: get @@ -878,7 +878,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_WithoutLogin_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential without google login and expects to fail + description: Verify that downloading a credential fails when the user is not logged in with Google uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_39 role: userDefinedCookie restMethod: get @@ -902,7 +902,7 @@ DownloadMosipIssuerCredentialWithGoogleLogin: Mimoto_DownloadIssuerCredentialWithGoogleLogin_IssuerMosip_WithSessionExpired_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading credential with expired google login session and expects to fail + description: Verify that downloading a credential fails when the Google login session has expired uniqueIdentifier: TC_Mimoto_DownloadIssuerCredentialWithGoogleLogin_40 role: userDefinedCookie restMethod: get diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/FetchAllCredentials/FetchAllCredentials.yml b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/FetchAllCredentials/FetchAllCredentials.yml index bfa1bda5b..d74522707 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/FetchAllCredentials/FetchAllCredentials.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/FetchAllCredentials/FetchAllCredentials.yml @@ -1,7 +1,7 @@ FetchAllCredentials: Mimoto_FetchAllCredentials_all_Valid_Smoke: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Get list of all credentials saved for the wallet + description: Verify that the system retrieves the list of all credentials saved in the wallet uniqueIdentifier: TC_Mimoto_FetchAllCredentials_01 role: userDefinedCookie restMethod: get @@ -20,7 +20,7 @@ FetchAllCredentials: Mimoto_FetchAllCredentials_Invalid_WalletId_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Get list of all credentials with invalid wallet id and expects it to fail + description: Verify that retrieving the list of credentials fails when an invalid wallet ID is provided uniqueIdentifier: TC_Mimoto_FetchAllCredentials_02 role: userDefinedCookie restMethod: get @@ -37,7 +37,7 @@ FetchAllCredentials: Mimoto_FetchAllCredentials_Empty_WalletId_And_Empty_Accepted_claims_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Get list of all credentials with empty wallet id and expects it to fail + description: Verify that retrieving the list of credentials fails when the wallet ID is empty uniqueIdentifier: TC_Mimoto_FetchAllCredentials_03 role: userDefinedCookie restMethod: get @@ -55,7 +55,7 @@ FetchAllCredentials: Mimoto_FetchAllCredentials_Space_WalletId_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Get list of all credentials with space wallet id and expects it to fail + description: Verify that retrieving the list of credentials fails when the wallet ID contains spaces uniqueIdentifier: TC_Mimoto_FetchAllCredentials_04 role: userDefinedCookie restMethod: get @@ -72,7 +72,7 @@ FetchAllCredentials: Mimoto_FetchAllCredentials_Invalid_Session_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Get list of all credentials with invalid session and expects it to fail + description: Verify that retrieving the list of credentials fails when an invalid session is used uniqueIdentifier: TC_Mimoto_FetchAllCredentials_05 role: userDefinedCookie restMethod: get @@ -91,7 +91,7 @@ FetchAllCredentials: Mimoto_FetchAllCredentials_WithoutUnlock_Wallet_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Get list of all credentials without unlocking wallet and expects it to fail + description: Verify that retrieving the list of credentials fails when the wallet is not unlocked uniqueIdentifier: TC_Mimoto_FetchAllCredentials_06 role: userDefinedCookie restMethod: get @@ -108,7 +108,7 @@ FetchAllCredentials: Mimoto_FetchAllCredentials_Expired_Session_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Get list of all credentials with expired session and expects it to fail + description: Verify that retrieving the list of credentials fails when the session has expired uniqueIdentifier: TC_Mimoto_FetchAllCredentials_07 role: userDefinedCookie restMethod: get diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/OAuthDetailsRequest/OAuthDetailsRequest.yml b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/OAuthDetailsRequest/OAuthDetailsRequest.yml index bf688e3e2..148bbd412 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/OAuthDetailsRequest/OAuthDetailsRequest.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/OAuthDetailsRequest/OAuthDetailsRequest.yml @@ -1,7 +1,7 @@ OAuthDetailsRequestForGoogleLogin: Mimoto_ESignet_OAuthDetailsRequest_GoogleLogin_all_Valid_Smoke_sid: endPoint: /v1/esignet/authorization/v2/oauth-details - description: Creating Oauth's details with all valid parameters + description: Verify that the system successfully retrieves the authentication details for downloading the MOSIP identity credential when all valid parameters are provided uniqueIdentifier: TC_Mimoto_OAuthDetailsRequestForGoogleLogin_01 role: resident restMethod: post @@ -29,7 +29,7 @@ OAuthDetailsRequestForGoogleLogin: Mimoto_ESignet_OAuthDetailsRequest_GoogleLogin_all_Valid_sid_ForNeg: endPoint: /v1/esignet/authorization/v2/oauth-details - description: Creating Oauth's details with all valid parameters for Neg scenario + description: Verify that creating OAuth details with invalid or missing parameters fails as expected uniqueIdentifier: TC_Mimoto_OAuthDetailsRequestForGoogleLogin_02 role: resident restMethod: post diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential.yml b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential.yml index fcfc9676a..10f6f9056 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredential.yml @@ -1,7 +1,7 @@ ViewCredential: Mimoto_ViewCredential_all_Valid_Smoke: endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId}?action=inline - description: View the credential saved for the wallet with credential ID + description: Validate that viewing a credential succeeds with a valid wallet ID and credential ID uniqueIdentifier: TC_Mimoto_ViewCredential_01 role: userDefinedCookie restMethod: get @@ -22,7 +22,7 @@ ViewCredential: Mimoto_ViewCredential_MultipleCredential_all_Valid_Smoke: endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId}?action=inline - description: View the another credential saved for the wallet with credential ID + description: Verify that another credential saved in the wallet can be viewed using its credential ID uniqueIdentifier: TC_Mimoto_ViewCredential_02 role: userDefinedCookie restMethod: get @@ -43,7 +43,7 @@ ViewCredential: Mimoto_ViewCredential_DownloadCredential_all_Valid_Smoke: endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId}?action=download - description: Download the credential saved for the wallet with credential ID + description: Verify that the credential saved in the wallet can be successfully downloaded using the credential ID uniqueIdentifier: TC_Mimoto_ViewCredential_03 role: userDefinedCookie restMethod: get @@ -64,7 +64,7 @@ ViewCredential: Mimoto_ViewCredential_EmptyQueryParam_all_Valid: endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId}?action= - description: View the credential saved for the wallet with credential ID when action query is empty + description: Verify the behavior when viewing a credential using the credential ID while the action query parameter is empty uniqueIdentifier: TC_Mimoto_ViewCredential_04 role: userDefinedCookie restMethod: get @@ -85,7 +85,7 @@ ViewCredential: Mimoto_ViewCredential_SpaceQueryParam_all_Valid: endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId}?action= - description: View the credential saved for the wallet with credential ID when action query has only space + description: Verify the behavior when viewing a credential using the credential ID while the action query parameter contains only spaces uniqueIdentifier: TC_Mimoto_ViewCredential_05 role: userDefinedCookie restMethod: get @@ -106,7 +106,7 @@ ViewCredential: Mimoto_ViewCredential_InvalidQueryParam_all_Valid: endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId}?action=invalid - description: View the credential saved for the wallet with credential ID when action query as invalid + description: Verify the behavior when viewing a credential using the credential ID while the action query parameter is invalid uniqueIdentifier: TC_Mimoto_ViewCredential_06 role: userDefinedCookie restMethod: get @@ -128,7 +128,7 @@ ViewCredential: Mimoto_ViewCredential_Invalid_CredentialId_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId}?action=inline - description: View the credential saved for the wallet with invalid credential ID and expects it to fail + description: Verify that the system rejects the request to view a credential when an invalid credential ID is used uniqueIdentifier: TC_Mimoto_ViewCredential_07 role: userDefinedCookie restMethod: get @@ -149,7 +149,7 @@ ViewCredential: Mimoto_ViewCredential_Empty_CredentialId_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId}?action=inline - description: View the credential saved for the wallet with empty credential ID and expects it to fail + description: Verify that viewing a credential fails when the credential ID is empty uniqueIdentifier: TC_Mimoto_ViewCredential_08 role: userDefinedCookie restMethod: get @@ -171,7 +171,7 @@ ViewCredential: Mimoto_ViewCredential_SpaceIn_CredentialId_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId}?action=inline - description: View the credential saved for the wallet with space in credential ID and expects it to fail + description: Verify that viewing a credential fails when the credential ID contains spaces uniqueIdentifier: TC_Mimoto_ViewCredential_09 role: userDefinedCookie restMethod: get @@ -193,7 +193,7 @@ ViewCredential: Mimoto_ViewCredential_Invalid_Wallet_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId}?action=inline - description: View the credential saved for the wallet with invalid wallet ID and expects it to fail + description: Verify that viewing a credential fails when an invalid wallet ID is provided uniqueIdentifier: TC_Mimoto_ViewCredential_10 role: userDefinedCookie restMethod: get @@ -214,7 +214,7 @@ ViewCredential: Mimoto_ViewCredential_Empty_Wallet_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId}?action=inline - description: View the credential saved for the wallet with empty wallet ID and expects it to fail + description: Verify that viewing a credential fails when the wallet ID is empty uniqueIdentifier: TC_Mimoto_ViewCredential_11 role: userDefinedCookie restMethod: get @@ -236,7 +236,7 @@ ViewCredential: Mimoto_ViewCredential_SpaceIn_Wallet_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId}?action=inline - description: View the credential saved for the wallet with space in wallet ID and expects it to fail + description: Verify that viewing a credential fails when the wallet ID contains spaces uniqueIdentifier: TC_Mimoto_ViewCredential_12 role: userDefinedCookie restMethod: get @@ -258,7 +258,7 @@ ViewCredential: Mimoto_ViewCredential_Invalid_AcceptLanguage_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId}?action=inline - description: View the credential saved for the wallet with invalid accept language and expects it to fail + description: Verify that the system rejects the request to view a credential when the Accept-Language header is invalid uniqueIdentifier: TC_Mimoto_ViewCredential_13 role: userDefinedCookie restMethod: get @@ -279,7 +279,7 @@ ViewCredential: Mimoto_ViewCredential_SpaceIn_AcceptLanguage_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId}?action=inline - description: View the credential saved for the wallet with space in accept language and expects it to fail + description: Verify that viewing a credential fails when the Accept-Language header contains spaces uniqueIdentifier: TC_Mimoto_ViewCredential_14 role: userDefinedCookie restMethod: get @@ -300,8 +300,8 @@ ViewCredential: Mimoto_ViewCredential_Invalid_AcceptHeader_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId}?action=inline - description: View the credential saved for the wallet with invalid accept header and expects it to fail - uniqueIdentifier: TC_Mimoto_ViewCredential_14 + description: Verify that viewing a credential saved in the wallet with an invalid Accept header fails as expected + uniqueIdentifier: TC_Mimoto_ViewCredential_15 role: userDefinedCookie restMethod: get additionalDependencies: TC_Mimoto_UnlockWallet_01 @@ -321,8 +321,8 @@ ViewCredential: Mimoto_ViewCredential_Without_AcceptHeader_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId}?action=inline - description: View the credential saved for the wallet without accept header and expects it to fail - uniqueIdentifier: TC_Mimoto_ViewCredential_15 + description: Verify that viewing a credential fails when the Accept header is not provided + uniqueIdentifier: TC_Mimoto_ViewCredential_16 role: userDefinedCookie restMethod: get additionalDependencies: TC_Mimoto_UnlockWallet_01 @@ -342,8 +342,8 @@ ViewCredential: Mimoto_ViewCredential_SpaceIn_AcceptHeader_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId}?action=inline - description: View the credential saved for the wallet space in accept header and expects it to fail - uniqueIdentifier: TC_Mimoto_ViewCredential_16 + description: Verify that the system rejects the request to view a credential when the Accept header contains spaces + uniqueIdentifier: TC_Mimoto_ViewCredential_17 role: userDefinedCookie restMethod: get additionalDependencies: TC_Mimoto_UnlockWallet_01 @@ -363,8 +363,8 @@ ViewCredential: Mimoto_ViewCredential_WithExpired_Session_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId}?action=inline - description: View the credential saved for the wallet with expired token and expects it to fail - uniqueIdentifier: TC_Mimoto_ViewCredential_17 + description: Verify that viewing a credential fails when an expired token is used + uniqueIdentifier: TC_Mimoto_ViewCredential_18 role: userDefinedCookie restMethod: get additionalDependencies: TC_Mimoto_UnlockWallet_01 diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredentialAfterLogout.yml b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredentialAfterLogout.yml index 04f72fcb2..d1fa3a100 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredentialAfterLogout.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadMosipIssuerCredential/ViewCredential/ViewCredentialAfterLogout.yml @@ -1,8 +1,8 @@ ViewCredentialAfterLogout: Mimoto_ViewCredential_AfterLogout_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials/{credentialId}?action=inline - description: View the credential saved for the wallet after logout and expects it to fail - uniqueIdentifier: TC_Mimoto_ViewCredential_18 + description: Verify that viewing a credential fails when the user has logged out of the wallet + uniqueIdentifier: TC_Mimoto_ViewCredential_19 role: userDefinedCookie restMethod: get checkOnlyStatusCodeInResponse: true diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml index 70e8e255e..faccf7c1d 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml @@ -1,7 +1,7 @@ AuthenticateUserSunBirdCForGoogleLogin: Mimoto_ESignet_AuthenticateUserSunBirdCForGoogleLogin_SunBirdC_Valid_Smoke: endPoint: $ESIGNETMOCKBASEURL$/v1/esignet/authorization/authenticate - description: Authenticating user for downloading stayprotected credential with google login + description: Verify successful user authentication for downloading the StayProtected credential through Google login uniqueIdentifier: TC_Mimoto_AuthenticateUserSunBirdCForGoogleLogin_01 role: resident restMethod: post @@ -24,7 +24,7 @@ AuthenticateUserSunBirdCForGoogleLogin: Mimoto_ESignet_AuthenticateUserSunBirdCForGoogleLogin_SunBirdC_MultipleVC_Valid_Smoke: endPoint: $ESIGNETMOCKBASEURL$/v1/esignet/authorization/authenticate - description: Authenticating user for downloading stayprotected credential with google login + description: Verify that the user is successfully authenticated to download the StayProtected credential using Google login uniqueIdentifier: TC_Mimoto_AuthenticateUserSunBirdCForGoogleLogin_02 role: resident restMethod: post diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.yml b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.yml index 8b66cabe3..41bcce516 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.yml @@ -1,7 +1,7 @@ AuthorizationCodeSunBirdCForGoogleLogin: Mimoto_ESignet_AuthorizationCode_SunBirdCForGoogleLogin_SunBirdC_All_Valid_Smoke_sid: endPoint: $ESIGNETMOCKBASEURL$/v1/esignet/authorization/auth-code - description: Generating authorization code for downloading sunbird VC with google login + description: Verify that an authorization code is successfully generated for downloading the Sunbird VC using Google login uniqueIdentifier: TC_Mimoto_AuthorizationCodeSunBirdCForGoogleLogin_01 role: resident restMethod: post @@ -21,7 +21,7 @@ AuthorizationCodeSunBirdCForGoogleLogin: Mimoto_ESignet_AuthorizationCode_SunBirdCForGoogleLogin_MultipleVC_SunBirdC_All_Valid_Smoke_sid: endPoint: $ESIGNETMOCKBASEURL$/v1/esignet/authorization/auth-code - description: Generating authorization code for downloading multiple sunbird VC with google login + description: Verify that an authorization code is successfully generated for downloading multiple Sunbird VCs using Google login uniqueIdentifier: TC_Mimoto_AuthorizationCodeSunBirdCForGoogleLogin_02 role: resident restMethod: post diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/DownloadIssuerCredential/DownloadIssuerCredential.yml b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/DownloadIssuerCredential/DownloadIssuerCredential.yml index 1f7be3d16..8df777d44 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/DownloadIssuerCredential/DownloadIssuerCredential.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/DownloadIssuerCredential/DownloadIssuerCredential.yml @@ -1,7 +1,7 @@ DownloadStayProtectedIssuerCredentialWithGoogleLogin: Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_SunBirdC_All_Valid_Smoke_sid: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading sunbird credential with valid authorizationCode after google login + description: Verify that the Sunbird credential is successfully downloaded using a valid authorization code after Google login uniqueIdentifier: TC_Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_01 role: userDefinedCookie restMethod: get @@ -27,7 +27,7 @@ DownloadStayProtectedIssuerCredentialWithGoogleLogin: Mimoto_DownloadMultipleStayProtectedIssuerCredentialWithGoogleLogin_SunBirdC_All_Valid_Smoke_sid: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading Multiple sunbird credential for policy already downloaded with valid authorizationCode after google login + description: Verify the behavior when attempting to download multiple Sunbird credentials for a policy that has already been downloaded using a valid authorization code after Google login uniqueIdentifier: TC_Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_02 role: userDefinedCookie restMethod: get @@ -53,7 +53,7 @@ DownloadStayProtectedIssuerCredentialWithGoogleLogin: Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_SunBirdC_InvalidLocale_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading sunbird credential with valid authorizationCode after google login with invalid locale and expects it to fail + description: Verify that the Sunbird credential download fails when an invalid locale is provided even with a valid authorization code after Google login uniqueIdentifier: TC_Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_03 role: userDefinedCookie restMethod: get @@ -78,7 +78,7 @@ DownloadStayProtectedIssuerCredentialWithGoogleLogin: Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_SunBirdC_SpaceInLocale_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading sunbird credential with valid authorizationCode after google login with space in locale and expects it to fail + description: Verify that the Sunbird credential download fails when the locale contains spaces even with a valid authorization code after Google login uniqueIdentifier: TC_Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_04 role: userDefinedCookie restMethod: get @@ -103,7 +103,7 @@ DownloadStayProtectedIssuerCredentialWithGoogleLogin: Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_SunBirdC_NumericInLocale_Neg: endPoint: /v1/mimoto/wallets/{walletId}/credentials - description: Downloading sunbird credential with valid authorizationCode after google login with numeric in locale and expects it to fail + description: Verify that the Sunbird credential download fails when a numeric value is provided in the locale even with a valid authorization code after Google login uniqueIdentifier: TC_Mimoto_DownloadStayProtectedIssuerCredentialWithGoogleLogin_05 role: userDefinedCookie restMethod: get diff --git a/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml index b3416e907..8858280dd 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/DownloadStayProtectedIssuerCredentialWithGoogleLogin/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml @@ -1,7 +1,7 @@ OAuthDetailsRequestSunBirdCForGoogleLogin: Mimoto_ESignet_OAuthDetailsRequest_GoogleLogin_SunBirdC_all_Valid_Smoke_sid: endPoint: $ESIGNETMOCKBASEURL$/v1/esignet/authorization/v2/oauth-details - description: Getting auth details for downloading sunbird credentials with google login + description: Verify that authentication details are successfully retrieved for downloading Sunbird credentials using Google login uniqueIdentifier: TC_Mimoto_OAuthDetailsRequestSunBirdCForGoogleLogin_01 role: resident restMethod: post @@ -29,7 +29,7 @@ OAuthDetailsRequestSunBirdCForGoogleLogin: Mimoto_ESignet_OAuthDetailsRequest_GoogleLogin_SunBirdC_MultipleVC_all_Valid_Smoke_sid: endPoint: $ESIGNETMOCKBASEURL$/v1/esignet/authorization/v2/oauth-details - description: Getting auth details for downloading multiple sunbird credentials with google login + description: Verify that authentication details are successfully retrieved for downloading multiple Sunbird credentials using Google login uniqueIdentifier: TC_Mimoto_OAuthDetailsRequestSunBirdCForGoogleLogin_02 role: resident restMethod: post diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifier.yml b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifier.yml index 91a1e122e..10dd15aec 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifier.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/AddTrustedVerifier/AddTrustedVerifier.yml @@ -1,7 +1,7 @@ AddTrustedVerifier: Mimoto_AddTrustedVerifier_all_Valid_Smoke_sid: endPoint: /v1/mimoto/wallets/{walletId}/trusted-verifiers - description: Add trusted verifier with valid data + description: Validate adding a trusted verifier with valid data and verify that the operation succeeds uniqueIdentifier: TC_Mimoto_AddTrustedVerifier_01 role: userDefinedCookie restMethod: post @@ -20,7 +20,7 @@ AddTrustedVerifier: Mimoto_AddTrustedVerifier_withEmpty_verifierId_Neg: endPoint: /v1/mimoto/wallets/{walletId}/trusted-verifiers - description: Add trusted verifier with empty verifierId + description: Verify that adding a trusted verifier without a verifierId is not allowed and returns an appropriate error message uniqueIdentifier: TC_Mimoto_AddTrustedVerifier_02 role: userDefinedCookie restMethod: post @@ -39,7 +39,7 @@ AddTrustedVerifier: Mimoto_AddTrustedVerifier_withInvalid_walletId_Neg: endPoint: /v1/mimoto/wallets/{walletId}/trusted-verifiers - description: Add trusted verifier with invalid walletId - fail + description: Verify that adding a trusted verifier using an invalid walletId is not allowed and returns an appropriate error message uniqueIdentifier: TC_Mimoto_AddTrustedVerifier_03 role: userDefinedCookie restMethod: post @@ -58,7 +58,7 @@ AddTrustedVerifier: Mimoto_AddTrustedVerifier_withEmptyWalletID_walletId_Neg: endPoint: /v1/mimoto/wallets/{walletId}/trusted-verifiers - description: Add trusted verifier with empty walletId + description: Verify that adding a trusted verifier without a walletId is not allowed and returns an appropriate error message uniqueIdentifier: TC_Mimoto_AddTrustedVerifier_04 role: userDefinedCookie restMethod: post @@ -78,7 +78,7 @@ AddTrustedVerifier: Mimoto_AddTrustedVerifier_withLocked_walletId_Neg: endPoint: /v1/mimoto/wallets/{walletId}/trusted-verifiers - description: Add trusted verifier with locked walletId + description: Verify that adding a trusted verifier with a locked walletId is not allowed and returns an appropriate error message uniqueIdentifier: TC_Mimoto_AddTrustedVerifier_05 role: userDefinedCookie restMethod: post @@ -96,7 +96,7 @@ AddTrustedVerifier: Mimoto_AddTrustedVerifier_withInvalidSession_unAuthorized_Neg: endPoint: /v1/mimoto/wallets/{walletId}/trusted-verifiers - description: Add trusted verifier with invalid session + description: Verify that adding a trusted verifier using an invalid or expired session is not allowed and returns an appropriate authentication error uniqueIdentifier: TC_Mimoto_AddTrustedVerifier_06 role: userDefinedCookie restMethod: post @@ -116,7 +116,7 @@ AddTrustedVerifier: Mimoto_AddTrustedVerifier_all_Valid_duplicateVerifierID_Smoke_sid: endPoint: /v1/mimoto/wallets/{walletId}/trusted-verifiers - description: Add trusted verifier with valid data for duplicate verifier ID scenario + description: Verify that adding a trusted verifier with an already existing verifier ID is not allowed and returns an appropriate duplicate entry error uniqueIdentifier: TC_Mimoto_AddTrustedVerifier_07 role: userDefinedCookie restMethod: post diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/GetCredentialsForPresentation/GetCredentialsForPresentation.yml b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/GetCredentialsForPresentation/GetCredentialsForPresentation.yml index e7f600eaf..de47c65b4 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/GetCredentialsForPresentation/GetCredentialsForPresentation.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/GetCredentialsForPresentation/GetCredentialsForPresentation.yml @@ -1,7 +1,7 @@ GetCredentialsForPresentation: Mimoto_GetCredentialsForPresentation_all_Valid_Smoke: endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId}/credentials - description: Get credentials list with presentation id and wallet id valid + description: Verify that the system successfully returns the credentials list when valid presentation ID and wallet ID are provided uniqueIdentifier: TC_Mimoto_GetCredentialsForPresentation_01 role: userDefinedCookie restMethod: get @@ -19,7 +19,7 @@ GetCredentialsForPresentation: Mimoto_GetCredentialsForPresentation_invalidWalletID_Smoke_Neg: endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId}/credentials - description: Get credentials list with invalid wallet id + description: Verify that fetching the credentials list with an invalid wallet ID is not allowed and returns an appropriate error message uniqueIdentifier: TC_Mimoto_GetCredentialsForPresentation_02 role: userDefinedCookie restMethod: get @@ -36,7 +36,7 @@ GetCredentialsForPresentation: }' Mimoto_GetCredentialsForPresentation_invalidPresentationID_Smoke_Neg: endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId}/credentials - description: Get credentials list with invalid presentation ID id + description: Validate retrieval of the credentials list using an invalid presentation ID and verify that the operation fails uniqueIdentifier: TC_Mimoto_GetCredentialsForPresentation_03 role: userDefinedCookie restMethod: get @@ -55,7 +55,7 @@ GetCredentialsForPresentation: Mimoto_GetCredentialsForPresentation_WithoutLogin_Neg: endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId}/credentials - description: Get list of all the presentations that is present in DB without login and expects to fail + description: Verify that fetching the credentials list without a valid login session is not allowed and returns an appropriate authentication error uniqueIdentifier: TC_Mimoto_GetCredentialsForPresentation_04 role: userDefinedCookie restMethod: get @@ -74,7 +74,7 @@ GetCredentialsForPresentation: Mimoto_GetCredentialsForPresentation_WithExpiredSession_Neg: endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId}/credentials - description: Get list of all the presentations that is present in DB with expired login and expects to fail + description: Validate retrieval of the credentials list with an expired login session and verify that the operation fails uniqueIdentifier: TC_Mimoto_GetCredentialsForPresentation_05 role: userDefinedCookie restMethod: get @@ -93,7 +93,7 @@ GetCredentialsForPresentation: Mimoto_GetCredentialsForPresentation_emptyWalletID_Smoke_Neg: endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId}/credentials - description: Get credentials list with empty wallet id + description: Verify that fetching the credentials list without providing a wallet ID is not allowed and returns an appropriate error message uniqueIdentifier: TC_Mimoto_GetCredentialsForPresentation_06 role: userDefinedCookie restMethod: get @@ -111,7 +111,7 @@ GetCredentialsForPresentation: Mimoto_GetCredentialsForPresentation_invalidWalletIdAndPresentationID_Smoke_Neg: endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId}/credentials - description: Get credentials list with invalid wallet id and presentation Id + description: Verify that fetching the credentials list with both invalid wallet ID and presentation ID is not allowed and returns an appropriate error message uniqueIdentifier: TC_Mimoto_GetCredentialsForPresentation_07 role: userDefinedCookie restMethod: get @@ -129,7 +129,7 @@ GetCredentialsForPresentation: Mimoto_GetCredentialsForPresentation_emptyStringWalletId_Smoke_Neg: endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId}/credentials - description: Get credentials list with empty String wallet id + description: Validate retrieval of the credentials list when the wallet ID is an empty string and verify that the operation fails uniqueIdentifier: TC_Mimoto_GetCredentialsForPresentation_08 role: userDefinedCookie restMethod: get @@ -147,7 +147,7 @@ GetCredentialsForPresentation: Mimoto_GetCredentialsForPresentation_lockedWallet_Smoke_Neg: endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId}/credentials - description: Get credentials list with locked wallet + description: Validate retrieval of the credentials list using a locked wallet and verify that the operation fails uniqueIdentifier: TC_Mimoto_GetCredentialsForPresentation_09 role: userDefinedCookie restMethod: get @@ -165,7 +165,7 @@ GetCredentialsForPresentation: Mimoto_GetCredentialsForPresentation_emptyPresentationID_Smoke_Neg: endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId}/credentials - description: Get credentials list with empty presentation ID id + description: Validate retrieval of the credentials list when the presentation ID field is empty and verify that the operation fails uniqueIdentifier: TC_Mimoto_GetCredentialsForPresentation_10 role: userDefinedCookie restMethod: get diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/InjiVerifyVpRequest/InjiVerifyVpRequest.yml b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/InjiVerifyVpRequest/InjiVerifyVpRequest.yml index 57bdc3a2c..023458f48 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/InjiVerifyVpRequest/InjiVerifyVpRequest.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/InjiVerifyVpRequest/InjiVerifyVpRequest.yml @@ -1,7 +1,7 @@ InjiVerifyVpRequest: InjiVerify_InjiVerifyVpRequest_all_Valid_Smoke_sid: endPoint: $INJIVERIFYBASEURL$/v1/verify/vp-request - description: Creating vp request as pre-requisite for verifiable presentation + description: Verify the creation of a Verifiable Presentation (VP) request as a prerequisite for generating the Verifiable Presentation uniqueIdentifier: TC_InjiVerify_InjiVerifyVpRequest_01 restMethod: post role: noauth diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/RejectPresentation/RejectPresentation.yml b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/RejectPresentation/RejectPresentation.yml index 2628c30f7..d66932f3c 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/RejectPresentation/RejectPresentation.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/RejectPresentation/RejectPresentation.yml @@ -1,7 +1,7 @@ RejectPresentation: Mimoto_RejectPresentation_all_Valid_Smoke_sid: endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId} - description: Request rejected with access denied + description: Validate that a presentation can be successfully rejected with user-denied authorization uniqueIdentifier: TC_Mimoto_RejectPresentation_01 role: userDefinedCookie restMethod: patch @@ -21,7 +21,7 @@ RejectPresentation: Mimoto_RejectPresentation_invalidWalletID_Neg: endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId} - description: Request rejected with access denied with invalid walletID + description: Validate that the request returns an invalid_request error when the wallet ID is invalid uniqueIdentifier: TC_Mimoto_RejectPresentation_02 role: userDefinedCookie restMethod: patch @@ -41,7 +41,7 @@ RejectPresentation: Mimoto_RejectPresentation_emptyWalletID_Neg: endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId} - description: Request rejected with access denied with empty walletID + description: Validate that the request returns an invalid_request error when the wallet ID is empty uniqueIdentifier: TC_Mimoto_RejectPresentation_03 role: userDefinedCookie restMethod: patch @@ -61,7 +61,7 @@ RejectPresentation: Mimoto_RejectPresentation_invalidPresentationId_Neg: endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId} - description: Request rejected with access denied with invalid presentationId + description: Verify that the request returns an invalid_request error when the presentation ID is invalid uniqueIdentifier: TC_Mimoto_RejectPresentation_04 role: userDefinedCookie restMethod: patch @@ -81,7 +81,7 @@ RejectPresentation: Mimoto_RejectPresentation_emptyPresentationId_Neg: endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId} - description: Request rejected with access denied with empty presentationId + description: Verify that the request returns an invalid_request error when the presentation ID is empty uniqueIdentifier: TC_Mimoto_RejectPresentation_05 role: userDefinedCookie restMethod: patch @@ -101,7 +101,7 @@ RejectPresentation: Mimoto_RejectPresentation_lockedWalletID_Neg: endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId} - description: Request rejected with access denied with locked walletId + description: Verify that the request returns a wallet_locked error when the wallet ID is locked uniqueIdentifier: TC_Mimoto_RejectPresentation_06 role: userDefinedCookie restMethod: patch @@ -121,7 +121,7 @@ RejectPresentation: Mimoto_RejectPresentation_invalidSession_Neg: endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId} - description: Request rejected with access denied with invalid session id + description: Verify that the request returns HTTP 401 when the session ID is invalid uniqueIdentifier: TC_Mimoto_RejectPresentation_07 role: userDefinedCookie checkOnlyStatusCodeInResponse: true diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/SubmitPresentation/SubmitPresentation.yml b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/SubmitPresentation/SubmitPresentation.yml index 5d20ca009..3943fb1ce 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/SubmitPresentation/SubmitPresentation.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/SubmitPresentation/SubmitPresentation.yml @@ -1,7 +1,7 @@ RejectPresentation: Mimoto_RejectPresentation_all_Valid_Smoke_sid: endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId} - description: Request rejected with access denied + description: Verify that the request is rejected with an Invalid Request error uniqueIdentifier: TC_Mimoto_RejectPresentation_01 role: userDefinedCookie restMethod: patch @@ -21,7 +21,7 @@ RejectPresentation: Mimoto_RejectPresentation_invalidWalletID_Neg: endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId} - description: Request rejected with access denied with invalid walletID + description: Verify that the request is rejected with an Invalid Request error when the wallet ID is invalid uniqueIdentifier: TC_Mimoto_RejectPresentation_02 role: userDefinedCookie restMethod: patch @@ -41,7 +41,7 @@ RejectPresentation: Mimoto_RejectPresentation_emptyWalletID_Neg: endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId} - description: Request rejected with access denied with empty walletID + description: Verify that the request is rejected with an Invalid Request error when the wallet ID is empty uniqueIdentifier: TC_Mimoto_RejectPresentation_03 role: userDefinedCookie restMethod: patch @@ -61,7 +61,7 @@ RejectPresentation: Mimoto_RejectPresentation_invalidPresentationId_Neg: endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId} - description: Request rejected with access denied with invalid presentationId + description: Verify that the request is rejected with an Invalid Request error when the presentation ID is invalid uniqueIdentifier: TC_Mimoto_RejectPresentation_04 role: userDefinedCookie restMethod: patch @@ -81,7 +81,7 @@ RejectPresentation: Mimoto_RejectPresentation_emptyPresentationId_Neg: endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId} - description: Request rejected with access denied with empty presentationId + description: Verify that the request is rejected with an Invalid Request error when the presentation ID is empty uniqueIdentifier: TC_Mimoto_RejectPresentation_05 role: userDefinedCookie restMethod: patch @@ -101,7 +101,7 @@ RejectPresentation: Mimoto_RejectPresentation_lockedWalletID_Neg: endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId} - description: Request rejected with access denied with locked walletId + description: Verify that the request is rejected with a Wallet Locked error when the wallet ID is locked uniqueIdentifier: TC_Mimoto_RejectPresentation_06 role: userDefinedCookie restMethod: patch @@ -121,7 +121,7 @@ RejectPresentation: Mimoto_RejectPresentation_invalidSession_Neg: endPoint: /v1/mimoto/wallets/{walletId}/presentations/{presentationId} - description: Request rejected with access denied with invalid session id + description: Verify that the request is rejected with an Access Denied error when the session ID is invalid uniqueIdentifier: TC_Mimoto_RejectPresentation_07 role: userDefinedCookie checkOnlyStatusCodeInResponse: true diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/VerifiablePresentationAuthorization/VerifiablePresentationAuthorization.yml b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/VerifiablePresentationAuthorization/VerifiablePresentationAuthorization.yml index 1d017a065..689bf5acc 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/Presentations/VerifiablePresentationAuthorization/VerifiablePresentationAuthorization.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/Presentations/VerifiablePresentationAuthorization/VerifiablePresentationAuthorization.yml @@ -1,7 +1,7 @@ VerifiablePresentationAuthorization: Mimoto_VerifiablePresentationAuthorization_all_Valid_Smoke_sid: endPoint: /v1/mimoto/wallets/{walletId}/presentations - description: Creating verifiable presentation with valid data + description: Verify that a Verifiable Presentation is successfully created when valid data is provided uniqueIdentifier: TC_Mimoto_VerifiablePresentationAuthorization_01 role: userDefinedCookie restMethod: post @@ -20,7 +20,7 @@ VerifiablePresentationAuthorization: Mimoto_VerifiablePresentationAuthorization_withInvalid_authorizationRequestUrl_Neg: endPoint: /v1/mimoto/wallets/{walletId}/presentations - description: Creating verifiable presentation with invalid authorizationRequestUrl + description: Verify that the request to create a Verifiable Presentation is rejected or fails when the authorizationRequestUrl is invalid uniqueIdentifier: TC_Mimoto_VerifiablePresentationAuthorization_02 role: userDefinedCookie restMethod: post @@ -39,7 +39,7 @@ VerifiablePresentationAuthorization: Mimoto_VerifiablePresentationAuthorization_withInvalid_walletId_Neg: endPoint: /v1/mimoto/wallets/{walletId}/presentations - description: Creating verifiable presentation with invalid walletId + description: Verify that the request to create a Verifiable Presentation is rejected when the wallet ID is invalid uniqueIdentifier: TC_Mimoto_VerifiablePresentationAuthorization_03 role: userDefinedCookie restMethod: post @@ -58,7 +58,7 @@ VerifiablePresentationAuthorization: Mimoto_VerifiablePresentationAuthorization_withLocked_walletId_Neg: endPoint: /v1/mimoto/wallets/{walletId}/presentations - description: Creating verifiable presentation with locked walletId + description: Verify that the request to create a Verifiable Presentation is rejected when the wallet ID is locked uniqueIdentifier: TC_Mimoto_VerifiablePresentationAuthorization_04 role: userDefinedCookie restMethod: post @@ -76,7 +76,7 @@ VerifiablePresentationAuthorization: Mimoto_VerifiablePresentationAuthorization_withInvalidSession_unAuthorized_Neg: endPoint: /v1/mimoto/wallets/{walletId}/presentations - description: Creating verifiable presentation with invalid session + description: Verify that the request to create a Verifiable Presentation is rejected when the session ID is invalid uniqueIdentifier: TC_Mimoto_VerifiablePresentationAuthorization_05 role: userDefinedCookie restMethod: post @@ -96,7 +96,7 @@ VerifiablePresentationAuthorization: Mimoto_VerifiablePresentationAuthorization_withNullWalletID_walletId_Neg: endPoint: /v1/mimoto/wallets/{walletId}/presentations - description: Creating verifiable presentation with null walletId + description: Verify that the request to create a Verifiable Presentation is rejected when the wallet ID is "null". uniqueIdentifier: TC_Mimoto_VerifiablePresentationAuthorization_06 role: userDefinedCookie restMethod: post diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Users/GetUserProfile/GetUserProfile.yml b/api-test/src/main/resources/mimoto/LoginFlow/Users/GetUserProfile/GetUserProfile.yml index 141a3757e..80a919610 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/Users/GetUserProfile/GetUserProfile.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/Users/GetUserProfile/GetUserProfile.yml @@ -1,7 +1,7 @@ GetUserProfile: Mimoto_GetUserProfile_all_Valid_Smoke: endPoint: /v1/mimoto/users/me - description: Get the user profile details for the session login + description: Verify that the system successfully returns user profile details when requested with a valid login session uniqueIdentifier: TC_Mimoto_GetUserProfile_01 role: userDefinedCookie restMethod: get diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Users/GetUserProfileAfterLogout/GetUserProfileAfterLogout.yml b/api-test/src/main/resources/mimoto/LoginFlow/Users/GetUserProfileAfterLogout/GetUserProfileAfterLogout.yml index 7fcb240d8..af9bb4af5 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/Users/GetUserProfileAfterLogout/GetUserProfileAfterLogout.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/Users/GetUserProfileAfterLogout/GetUserProfileAfterLogout.yml @@ -1,7 +1,7 @@ GetUserProfileAfterLogout: Mimoto_GetUserProfileAfterLogout_all_Valid_Smoke: endPoint: /v1/mimoto/users/me - description: Get the user profile details for the session login + description: Verify that fetching user profile after logout returns unauthorized response 401 uniqueIdentifier: TC_Mimoto_GetUserProfileAfterLogout_01 role: userDefinedCookie restMethod: get diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet.yml b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet.yml index 8a0a80545..5a29fab84 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/CreateWallet/CreateWallet.yml @@ -1,7 +1,7 @@ CreateWallet: Mimoto_CreateWallet_all_Valid_Smoke_sid: endPoint: /v1/mimoto/wallets - description: Creating new wallet with successful login + description: Verifying that a new wallet is created successfully after a successful login uniqueIdentifier: TC_Mimoto_CreateWallet_01 role: userDefinedCookie restMethod: post @@ -20,7 +20,7 @@ CreateWallet: Mimoto_CreateWallet_WithoutUnlock_all_Valid_Smoke_sid: endPoint: /v1/mimoto/wallets - description: Creating new wallet for the same user with successful login + description: Verifying that a new wallet is created successfully for the same user after a successful login uniqueIdentifier: TC_Mimoto_CreateWallet_02 role: userDefinedCookie restMethod: post @@ -39,7 +39,7 @@ CreateWallet: Mimoto_CreateWallet_SameName_Valid: endPoint: /v1/mimoto/wallets - description: Creating new wallet for the same user with same name with successful login + description: Verifying that the system handles the creation of a new wallet with the same name for the same user after a successful login uniqueIdentifier: TC_Mimoto_CreateWallet_03 role: userDefinedCookie restMethod: post @@ -58,7 +58,7 @@ CreateWallet: Mimoto_CreateWallet_WithoutLogin_Neg: endPoint: /v1/mimoto/wallets - description: Creating new wallet without login and expects to fail + description: Validating that wallet creation without login is not allowed uniqueIdentifier: TC_Mimoto_CreateWallet_04 role: userDefinedCookie restMethod: post @@ -78,7 +78,7 @@ CreateWallet: Mimoto_CreateWallet_SessionExpired_Neg: endPoint: /v1/mimoto/wallets - description: Creating new wallet with expired session and expects to fail + description: Verifying that the system prevents the creation of a new wallet when the user session is expired uniqueIdentifier: TC_Mimoto_CreateWallet_05 role: userDefinedCookie restMethod: post @@ -98,7 +98,7 @@ CreateWallet: Mimoto_CreateWallet_InvalidWalletName_Neg: endPoint: /v1/mimoto/wallets - description: Creating new wallet with invalid wallet name and expects to fail + description: Verify that creating a new wallet with an invalid wallet name is not allowed and returns an appropriate error uniqueIdentifier: TC_Mimoto_CreateWallet_06 role: userDefinedCookie restMethod: post @@ -117,7 +117,7 @@ CreateWallet: Mimoto_CreateWallet_EmptyWalletName_Neg: endPoint: /v1/mimoto/wallets - description: Creating new wallet with empty wallet name and expects to fail + description: Verifying that the system prevents the creation of a new wallet when the wallet name is empty uniqueIdentifier: TC_Mimoto_CreateWallet_07 role: userDefinedCookie restMethod: post @@ -136,7 +136,7 @@ CreateWallet: Mimoto_CreateWallet_SpaceInWalletName_Neg: endPoint: /v1/mimoto/wallets - description: Creating new wallet with space in wallet name and expects to fail + description: Verifying that the system prevents the creation of a new wallet when the wallet name contains only spaces uniqueIdentifier: TC_Mimoto_CreateWallet_08 role: userDefinedCookie restMethod: post @@ -155,7 +155,7 @@ CreateWallet: Mimoto_CreateWallet_MissingWalletName_Valid: endPoint: /v1/mimoto/wallets - description: Creating new wallet with missing wallet name + description: Verifying that the system prevents the creation of a new wallet when the wallet name is missing uniqueIdentifier: TC_Mimoto_CreateWallet_09 role: userDefinedCookie restMethod: post @@ -175,7 +175,7 @@ CreateWallet: Mimoto_CreateWallet_MoreThan50Characters_WalletName_Neg: endPoint: /v1/mimoto/wallets - description: Creating new wallet with more than 50 characters in wallet name and expects to fail + description: Verifying that the system prevents the creation of a new wallet when the wallet name exceeds 50 characters uniqueIdentifier: TC_Mimoto_CreateWallet_10 role: userDefinedCookie restMethod: post @@ -194,7 +194,7 @@ CreateWallet: Mimoto_CreateWallet_WalletNameWithSpaces_valid: endPoint: /v1/mimoto/wallets - description: Creating new wallet with wallet name contains spaces + description: Verifying that the system prevents the creation of a new wallet when the wallet name exceeds 50 characters uniqueIdentifier: TC_Mimoto_CreateWallet_11 role: userDefinedCookie restMethod: post @@ -213,7 +213,7 @@ CreateWallet: Mimoto_CreateWallet_WalletNameInSpecialCharacters_Neg: endPoint: /v1/mimoto/wallets - description: Creating new wallet with special characters as wallet name and expects to fail + description: Verify that creating a new wallet with special characters in the wallet name is not allowed and returns an appropriate error uniqueIdentifier: TC_Mimoto_CreateWallet_12 role: userDefinedCookie restMethod: post @@ -232,7 +232,7 @@ CreateWallet: Mimoto_CreateWallet_WalletNameInNumbers_Valid: endPoint: /v1/mimoto/wallets - description: Creating new wallet with numbers as wallet name + description: Verify that creating a new wallet with numbers in the wallet name is allowed and the wallet is created successfully uniqueIdentifier: TC_Mimoto_CreateWallet_13 role: userDefinedCookie restMethod: post @@ -251,7 +251,7 @@ CreateWallet: Mimoto_CreateWallet_MoreThan6Digits_WalletPin_Neg: endPoint: /v1/mimoto/wallets - description: Creating new wallet with wallet pin with more than 6 digits and expects to fail + description: Verify that creating a new wallet with a PIN longer than 6 digits is not allowed and returns an appropriate error uniqueIdentifier: TC_Mimoto_CreateWallet_14 role: userDefinedCookie restMethod: post @@ -270,7 +270,7 @@ CreateWallet: Mimoto_CreateWallet_Empty_WalletPin_Neg: endPoint: /v1/mimoto/wallets - description: Creating new wallet with empty wallet pin and expects to fail + description: Verify that creating a new wallet without a wallet PIN is not allowed and returns an appropriate error uniqueIdentifier: TC_Mimoto_CreateWallet_15 role: userDefinedCookie restMethod: post @@ -289,7 +289,7 @@ CreateWallet: Mimoto_CreateWallet_Space_WalletPin_Neg: endPoint: /v1/mimoto/wallets - description: Creating new wallet with space in wallet pin and expects to fail + description: Verify that creating a new wallet with spaces in the wallet PIN is not allowed and returns an appropriate error uniqueIdentifier: TC_Mimoto_CreateWallet_16 role: userDefinedCookie restMethod: post @@ -308,7 +308,7 @@ CreateWallet: Mimoto_CreateWallet_Missing_WalletPin_Neg: endPoint: /v1/mimoto/wallets - description: Creating new wallet with missing wallet pin and expects to fail + description: Verify that creating a new wallet without providing a wallet PIN is not allowed and returns an appropriate error uniqueIdentifier: TC_Mimoto_CreateWallet_17 role: userDefinedCookie restMethod: post @@ -327,7 +327,7 @@ CreateWallet: Mimoto_CreateWallet_invalid_WalletPin_Neg: endPoint: /v1/mimoto/wallets - description: Creating new wallet with invalid wallet pin and expects to fail + description: Verify that creating a new wallet with an invalid wallet PIN is not allowed and returns an appropriate error. uniqueIdentifier: TC_Mimoto_CreateWallet_18 role: userDefinedCookie restMethod: post @@ -346,7 +346,7 @@ CreateWallet: Mimoto_CreateWallet_StringValue_WalletPin_Neg: endPoint: /v1/mimoto/wallets - description: Creating new wallet with string value in wallet pin and expects to fail + description: Verify that creating a new wallet with alphabetic characters in the wallet PIN is not allowed and returns an appropriate error uniqueIdentifier: TC_Mimoto_CreateWallet_19 role: userDefinedCookie restMethod: post @@ -365,7 +365,7 @@ CreateWallet: Mimoto_CreateWallet_SpecialCharacters_WalletPin_Neg: endPoint: /v1/mimoto/wallets - description: Creating new wallet with special characters in wallet pin and expects to fail + description: Verify that creating a new wallet with special characters in the wallet PIN is not allowed and returns an appropriate error uniqueIdentifier: TC_Mimoto_CreateWallet_20 role: userDefinedCookie restMethod: post @@ -384,7 +384,7 @@ CreateWallet: Mimoto_CreateWallet_WalletPin_ConfirmWalletPin_Mismatch_Neg: endPoint: /v1/mimoto/wallets - description: Creating new wallet with wallet pin and confirm wallet pin mismatch and expects to fail + description: Verify that creating a new wallet fails when the wallet PIN and confirm wallet PIN values mismatch, returning an appropriate error. uniqueIdentifier: TC_Mimoto_CreateWallet_21 role: userDefinedCookie restMethod: post @@ -403,7 +403,7 @@ CreateWallet: Mimoto_CreateWallet_Without_WalletPin_And_WalletName_Neg: endPoint: /v1/mimoto/wallets - description: Creating new wallet without wallet pin and wallet name and expects to fail + description: Verify that creating a new wallet fails when the wallet PIN and wallet name are missing, returning appropriate error messages. uniqueIdentifier: TC_Mimoto_CreateWallet_22 role: userDefinedCookie restMethod: post @@ -422,7 +422,7 @@ CreateWallet: Mimoto_CreateWallet_all_ValidForLockedWallet_Smoke_sid: endPoint: /v1/mimoto/wallets - description: Creating new wallet with successful login for locked wallet scenarios + description: Validate wallet creation after a successful login when the previous wallet is in a locked state uniqueIdentifier: TC_Mimoto_CreateWallet_23 role: userDefinedCookie restMethod: post diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Wallet/DeleteWallet/DeleteWallet.yml b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/DeleteWallet/DeleteWallet.yml index 61af3948c..d5b393c3f 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/Wallet/DeleteWallet/DeleteWallet.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/DeleteWallet/DeleteWallet.yml @@ -1,7 +1,7 @@ UnlockWallet: Mimoto_DeleteWallet_all_Valid_Smoke: endPoint: /v1/mimoto/wallets/{walletId} - description: Delete the wallet that is created + description: Verify that the user is able to delete an already created wallet successfully uniqueIdentifier: TC_Mimoto_DeleteWallet_01 role: userDefinedCookie restMethod: delete @@ -19,7 +19,7 @@ UnlockWallet: Mimoto_DeleteWallet_AlreadyDeleted_Neg: endPoint: /v1/mimoto/wallets/{walletId} - description: Delete the wallet that is already deleted and expects it to fail + description: Verify that deleting an already deleted wallet is not allowed and returns an appropriate error message uniqueIdentifier: TC_Mimoto_DeleteWallet_02 role: userDefinedCookie restMethod: delete @@ -36,7 +36,7 @@ UnlockWallet: Mimoto_DeleteWallet_Invalid_WalletId_Neg: endPoint: /v1/mimoto/wallets/{walletId} - description: Delete the wallet with invalid wallet id and expects it to fail + description: Verify that deleting a wallet with an invalid wallet ID is not allowed and returns an appropriate error message uniqueIdentifier: TC_Mimoto_DeleteWallet_03 role: userDefinedCookie restMethod: delete @@ -53,7 +53,7 @@ UnlockWallet: Mimoto_DeleteWallet_Empty_WalletId_Neg: endPoint: /v1/mimoto/wallets/{walletId} - description: Delete the wallet with empty wallet id and expects it to fail + description: Verify that deleting a wallet without providing a wallet ID is not allowed and returns an appropriate error message uniqueIdentifier: TC_Mimoto_DeleteWallet_04 role: userDefinedCookie restMethod: delete @@ -70,7 +70,7 @@ UnlockWallet: Mimoto_DeleteWallet_Space_WalletId_Neg: endPoint: /v1/mimoto/wallets/{walletId} - description: Delete the wallet with space wallet id and expects it to fail + description: Verify that deleting a wallet with spaces in the wallet ID is not allowed and returns an appropriate error message uniqueIdentifier: TC_Mimoto_DeleteWallet_05 role: userDefinedCookie restMethod: delete @@ -87,7 +87,7 @@ UnlockWallet: Mimoto_DeleteWallet_WithoutLogin_Neg: endPoint: /v1/mimoto/wallets/{walletId} - description: Delete the wallet without login session and expects it to fail + description: Verify that deleting a wallet without a valid login session is not allowed and returns an appropriate authentication error uniqueIdentifier: TC_Mimoto_DeleteWallet_06 role: userDefinedCookie restMethod: delete @@ -105,7 +105,7 @@ UnlockWallet: Mimoto_DeleteWallet_ExpiredSession_Neg: endPoint: /v1/mimoto/wallets/{walletId} - description: Delete the wallet with expired login session and expects it to fail + description: Verify that deleting a wallet with an expired session fails as expected uniqueIdentifier: TC_Mimoto_DeleteWallet_07 role: userDefinedCookie restMethod: delete diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Wallet/GetWallets/GetWallets.yml b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/GetWallets/GetWallets.yml index ffd511a23..f44051040 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/Wallet/GetWallets/GetWallets.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/GetWallets/GetWallets.yml @@ -1,7 +1,7 @@ GetWallets: Mimoto_GetWallets_all_Valid_Smoke: endPoint: /v1/mimoto/wallets - description: Get list of all the wallets that is present in DB + description: Verify that the system successfully fetches and displays the list of all wallets stored in the database uniqueIdentifier: TC_Mimoto_GetWallets_01 role: userDefinedCookie restMethod: get @@ -17,7 +17,7 @@ GetWallets: Mimoto_GetWallets_WithoutLogin_Neg: endPoint: /v1/mimoto/wallets - description: Get list of all the wallets that is present in DB without login and expects to fail + description: Verify that fetching the list of wallets without a valid login session is not allowed and returns an appropriate authentication error uniqueIdentifier: TC_Mimoto_GetWallets_02 role: userDefinedCookie restMethod: get @@ -34,7 +34,7 @@ GetWallets: Mimoto_GetWallets_WithExpiredSession_Neg: endPoint: /v1/mimoto/wallets - description: Get list of all the wallets that is present in DB with expired login and expects to fail + description: Verify that fetching the list of wallets with an expired session is not allowed and returns an appropriate session expiry or authentication error uniqueIdentifier: TC_Mimoto_GetWallets_03 role: userDefinedCookie restMethod: get diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWallet/UnlockWallet.yml b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWallet/UnlockWallet.yml index ced8054b5..f42ed8fc3 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWallet/UnlockWallet.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWallet/UnlockWallet.yml @@ -1,7 +1,7 @@ UnlockWallet: Mimoto_UnlockWallet_all_Valid_Smoke: endPoint: /v1/mimoto/wallets/{walletId}/unlock - description: Unlock the wallet that is created + description: Verify that the created wallet can be unlocked successfully using valid credentials/PIN. uniqueIdentifier: TC_Mimoto_UnlockWallet_01 role: userDefinedCookie restMethod: post @@ -20,7 +20,7 @@ UnlockWallet: Mimoto_UnlockWallet_Invalid_WalletId_Neg: endPoint: /v1/mimoto/wallets/{walletId}/unlock - description: Unlock the wallet with invalid wallet id and expects it to fail + description: Verify that unlocking a wallet with an invalid wallet ID is not allowed and returns an appropriate error message uniqueIdentifier: TC_Mimoto_UnlockWallet_02 role: userDefinedCookie restMethod: post @@ -38,7 +38,7 @@ UnlockWallet: Mimoto_UnlockWallet_Incorrect_WalletPin_Neg: endPoint: /v1/mimoto/wallets/{walletId}/unlock - description: Unlock the wallet with incorrect wallet Pin and expects it to fail + description: Verify that unlocking a wallet with an incorrect wallet PIN is not allowed and returns an appropriate error message uniqueIdentifier: TC_Mimoto_UnlockWallet_03 role: userDefinedCookie restMethod: post @@ -56,7 +56,7 @@ UnlockWallet: Mimoto_UnlockWallet_WithoutLogin_Neg: endPoint: /v1/mimoto/wallets/{walletId}/unlock - description: Unlock the wallet without login session and expects it to fail + description: Validate wallet unlocking without an active login session and verify that the operation fails uniqueIdentifier: TC_Mimoto_UnlockWallet_04 role: userDefinedCookie restMethod: post @@ -75,7 +75,7 @@ UnlockWallet: Mimoto_UnlockWallet_Invalid_WalletPin_Neg: endPoint: /v1/mimoto/wallets/{walletId}/unlock - description: Unlock the wallet with invalid wallet Pin and expects it to fail + description: Verify that unlocking a wallet with an invalid wallet PIN is not allowed and returns an appropriate error message uniqueIdentifier: TC_Mimoto_UnlockWallet_06 role: userDefinedCookie restMethod: post diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWalletAfterDelete/UnlockWalletAfterDelete.yml b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWalletAfterDelete/UnlockWalletAfterDelete.yml index 7c80543c1..946e49988 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWalletAfterDelete/UnlockWalletAfterDelete.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWalletAfterDelete/UnlockWalletAfterDelete.yml @@ -1,7 +1,7 @@ UnlockWalletAfterDelete: Mimoto_UnlockWalletAfterDelete_Neg: endPoint: /v1/mimoto/wallets/{walletId}/unlock - description: Unlock the wallet that is already deleted and expects it to fail + description: Verify that attempting to unlock a deleted wallet is not allowed and returns an appropriate error message uniqueIdentifier: TC_Mimoto_UnlockWalletAfterDelete_01 role: userDefinedCookie restMethod: post diff --git a/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWalletForTemporarilyLock/UnlockWalletForTemporarilyLock.yml b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWalletForTemporarilyLock/UnlockWalletForTemporarilyLock.yml index c0aefb386..a87dc19f3 100644 --- a/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWalletForTemporarilyLock/UnlockWalletForTemporarilyLock.yml +++ b/api-test/src/main/resources/mimoto/LoginFlow/Wallet/UnlockWalletForTemporarilyLock/UnlockWalletForTemporarilyLock.yml @@ -1,7 +1,7 @@ UnlockWalletForTemporarilyLock: Mimoto_UnlockWalletForTemporarilyLock_TemporaryLocker_IncorrectWalletPin_Neg: endPoint: /v1/mimoto/wallets/{walletId}/unlock - description: Unlock the wallet with incorrect wallet Pin till wallet gets temporarily locks + description: Verify that the wallet becomes temporarily locked when incorrect PIN is entered repeatedly up to the allowed limit and that further unlock attempts fail until the lock expires or is reset. uniqueIdentifier: TC_Mimoto_UnlockWalletForTemporarilyLock_01 role: userDefinedCookie restMethod: post diff --git a/api-test/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.yml b/api-test/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.yml index ceb013f81..92b0f4758 100644 --- a/api-test/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.yml +++ b/api-test/src/main/resources/mimoto/OAuthDetailsRequest/OAuthDetailsRequest.yml @@ -1,7 +1,7 @@ OAuthDetailsRequest: Mimoto_ESignet_OAuthDetailsRequest_all_Valid_Smoke_sid: endPoint: /v1/esignet/authorization/v2/oauth-details - description: Creating Oauth's details with all valid parameters + description: Verify that the system successfully retrieves the authentication details for downloading the Sunbird credential when all valid parameters are provided uniqueIdentifier: TC_Mimoto_OAuthDetailsRequest_01 role: resident restMethod: post diff --git a/api-test/src/main/resources/mimoto/SendOTP/SendOTP.yml b/api-test/src/main/resources/mimoto/SendOTP/SendOTP.yml index 9e71755c8..dd89210de 100644 --- a/api-test/src/main/resources/mimoto/SendOTP/SendOTP.yml +++ b/api-test/src/main/resources/mimoto/SendOTP/SendOTP.yml @@ -1,7 +1,7 @@ SendOTP: Resident_SendOTP_Valid_UIN_All_Smoke: endPoint: /resident/v1/req/otp - description: Creating resident requesting OTP with valid UIN + description: Verifying that the OTP request is created successfully for a resident with a valid UIN uniqueIdentifier: TC_Mimoto_SendOTP_01 role: resident checkErrorsOnlyInResponse: true @@ -20,7 +20,7 @@ SendOTP: Resident_SendOTP_Invalid_UIN_Neg: endPoint: /resident/v1/req/otp - description: Creating resident requesting OTP with invalid UIN + description: Validating the resident OTP request creation with an invalid UIN uniqueIdentifier: TC_Mimoto_SendOTP_02 role: resident checkErrorsOnlyInResponse: true @@ -39,7 +39,7 @@ SendOTP: Resident_SendOTP_Invalid_VID_Neg: endPoint: /resident/v1/req/otp - description: Creating requesting OTP with invalid VID + description: Verifying that the system returns an appropriate error when creating an OTP request with an invalid VID uniqueIdentifier: TC_Mimoto_SendOTP_03 role: resident restMethod: post diff --git a/api-test/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml b/api-test/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml index 27b322d44..7bc307fca 100644 --- a/api-test/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml +++ b/api-test/src/main/resources/mimoto/SendOTPUIN/createSendOTP.yml @@ -1,7 +1,7 @@ individualOTP: Mimoto_individualOTP_All_Valid_Smoke: endPoint: /v1/mimoto/req/individualId/otp - description: generating individual OTP with valid parameters + description: Validate OTP generation for an individual using valid parameters uniqueIdentifier: TC_Mimoto_individualOTP_01 role: resident checkErrorsOnlyInResponse: true diff --git a/api-test/src/main/resources/mimoto/SendOtpForVid/createSendOTP.yml b/api-test/src/main/resources/mimoto/SendOtpForVid/createSendOTP.yml index 96e70c538..85540c2f5 100644 --- a/api-test/src/main/resources/mimoto/SendOtpForVid/createSendOTP.yml +++ b/api-test/src/main/resources/mimoto/SendOtpForVid/createSendOTP.yml @@ -1,7 +1,7 @@ createSendOTP: Resident_SendOTP_All_Valid_Smoke: endPoint: /idauthentication/v1/otp/v4jO2rTUkDglaG7rCkWDnqIT3WpZaGEW9j3FMXwTA5xXKVaDpx/6001/34536061 - description: Generating OTP with all valid parameters + description: Verifying that the OTP is generated successfully with all valid parameters uniqueIdentifier: TC_Mimoto_createSendOTP_01 role: resident restMethod: post diff --git a/api-test/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml b/api-test/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml index 3706f803e..3f07c6250 100644 --- a/api-test/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml +++ b/api-test/src/main/resources/mimoto/SunBirdC/AuthenticateUserSunBirdC/AuthenticateUserSunBirdC.yml @@ -1,7 +1,7 @@ AuthenticateUserSunBirdC: Mimoto_ESignet_AuthenticateUser_SunBirdC_Valid_Smoke: endPoint: $ESIGNETMOCKBASEURL$/v1/esignet/authorization/authenticate - description: Authenticating user for downloading sunbird credential + description: Verify that the user is successfully authenticated before downloading the Sunbird credential uniqueIdentifier: TC_Mimoto_AuthenticateUserSunBirdC_01 role: resident restMethod: post diff --git a/api-test/src/main/resources/mimoto/SunBirdC/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.yml b/api-test/src/main/resources/mimoto/SunBirdC/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.yml index de0d47b04..d4b647c1e 100644 --- a/api-test/src/main/resources/mimoto/SunBirdC/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.yml +++ b/api-test/src/main/resources/mimoto/SunBirdC/AuthorizationCodeSunBirdC/AuthorizationCodeSunBirdC.yml @@ -1,7 +1,7 @@ AuthorizationCodeSunBirdC: Mimoto_ESignet_AuthorizationCode_SunBirdC_All_Valid_Smoke_sid: endPoint: $ESIGNETMOCKBASEURL$/v1/esignet/authorization/auth-code - description: Generating authorization code for downloading sunbird VC + description: Validating the generation of the authorization code for downloading the Sunbird VC uniqueIdentifier: TC_Mimoto_AuthorizationCodeSunBirdC_01 role: resident restMethod: post diff --git a/api-test/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml b/api-test/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml index c4778e3a2..d631dd9a5 100644 --- a/api-test/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml +++ b/api-test/src/main/resources/mimoto/SunBirdC/OAuthDetailsRequestSunBirdC/OAuthDetailsRequestSunBirdC.yml @@ -1,7 +1,7 @@ OAuthDetailsRequestSunBirdC: Mimoto_ESignet_OAuthDetailsRequest_SunBirdC_all_Valid_Smoke_sid: endPoint: $ESIGNETMOCKBASEURL$/v1/esignet/authorization/v2/oauth-details - description: Getting auth details for downloading sunbird credentials + description: Verifying that the authentication details are retrieved successfully for downloading the Sunbird credentials uniqueIdentifier: TC_Mimoto_OAuthDetailsRequestSunBirdC_01 role: resident restMethod: post diff --git a/api-test/src/main/resources/mimoto/SunBirdR/CreatePolicySunBirdR/CreatePolicySunBirdR.yml b/api-test/src/main/resources/mimoto/SunBirdR/CreatePolicySunBirdR/CreatePolicySunBirdR.yml index d61bb73c0..964ff3271 100644 --- a/api-test/src/main/resources/mimoto/SunBirdR/CreatePolicySunBirdR/CreatePolicySunBirdR.yml +++ b/api-test/src/main/resources/mimoto/SunBirdR/CreatePolicySunBirdR/CreatePolicySunBirdR.yml @@ -1,7 +1,7 @@ CreatePolicySunBirdR: Mimoto_ESignet_SunBirdR_CreatePolicy_NOAUTH_Valid_Smoke_Sid: endPoint: $SUNBIRDBASEURL$/api/v1/Insurance - description: Creating new sunbird policy with valid parameters + description: Verifying the creation of a new Sunbird policy with valid parameters uniqueIdentifier: TC_Mimoto_CreatePolicySunBirdR_01 role: resident restMethod: post diff --git a/api-test/src/main/resources/mimoto/SunBirdR/DeletePolicySunBirdR/DeletePolicySunBirdR.yml b/api-test/src/main/resources/mimoto/SunBirdR/DeletePolicySunBirdR/DeletePolicySunBirdR.yml index 8596c1c22..bc7598059 100644 --- a/api-test/src/main/resources/mimoto/SunBirdR/DeletePolicySunBirdR/DeletePolicySunBirdR.yml +++ b/api-test/src/main/resources/mimoto/SunBirdR/DeletePolicySunBirdR/DeletePolicySunBirdR.yml @@ -1,7 +1,7 @@ DeletePolicySunBirdR: Mimoto_ESignet_SunBirdR_DeletePolicy_NOAUTH_Valid_Smoke: endPoint: $SUNBIRDBASEURL$/api/v1/Insurance/{insuranceid} - description: Deleting Sunbird policy with valid parameters + description: Validate the deletion of the Sunbird policy using valid parameters uniqueIdentifier: TC_Mimoto_DeletePolicySunBirdR_01 role: resident restMethod: delete diff --git a/api-test/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.yml b/api-test/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.yml index d1a517eb2..b46641049 100644 --- a/api-test/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.yml +++ b/api-test/src/main/resources/mimoto/SunBirdR/GetPolicySunBirdR/GetPolicySunBirdR.yml @@ -1,7 +1,7 @@ GetPolicySunBirdR: Mimoto_ESignet_SunBirdR_GetPolicy_NOAUTH_Valid_Smoke: endPoint: $SUNBIRDBASEURL$/api/v1/Insurance/{insuranceid} - description: Getting sunbird policy with valid parameters + description: Validating the retrieval of the Sunbird policy with valid parameters uniqueIdentifier: TC_Mimoto_GetPolicySunBirdR_01 role: resident restMethod: get diff --git a/api-test/src/main/resources/mimoto/SunBirdR/SearchPolicySunBirdR/SearchPolicySunBirdR.yml b/api-test/src/main/resources/mimoto/SunBirdR/SearchPolicySunBirdR/SearchPolicySunBirdR.yml index 3fcdc3a2a..b85d958f9 100644 --- a/api-test/src/main/resources/mimoto/SunBirdR/SearchPolicySunBirdR/SearchPolicySunBirdR.yml +++ b/api-test/src/main/resources/mimoto/SunBirdR/SearchPolicySunBirdR/SearchPolicySunBirdR.yml @@ -1,7 +1,7 @@ SearchPolicySunBirdR: Mimoto_ESignet_SunBirdR_SearchPolicy_NOAUTH_Valid_Smoke: endPoint: $SUNBIRDBASEURL$/api/v1/Insurance/search - description: Searching sunbird policy with valid parameters + description: Validating the search functionality for the Sunbird policy with valid parameters uniqueIdentifier: TC_Mimoto_SearchPolicySunBirdR_01 role: resident restMethod: post diff --git a/api-test/src/main/resources/mimoto/ValidateOTP/ValidateOTP.yml b/api-test/src/main/resources/mimoto/ValidateOTP/ValidateOTP.yml index a97ca51b7..426300ca3 100644 --- a/api-test/src/main/resources/mimoto/ValidateOTP/ValidateOTP.yml +++ b/api-test/src/main/resources/mimoto/ValidateOTP/ValidateOTP.yml @@ -1,7 +1,7 @@ SendOTP: Resident_SendOTP_Valid_UIN_All_Smoke: endPoint: /resident/v1/req/otp - description: Generating OTP with valid UIN + description: Validate OTP generation using a valid UIN uniqueIdentifier: TC_Mimoto_SendOTP_05 role: resident restMethod: post @@ -17,7 +17,7 @@ SendOTP: }' Resident_SendOTP_Valid_UIN_Phone_Smoke: endPoint: /resident/v1/req/otp - description: Generating OTP with OTP channel as phone + description: Verifying that the OTP is generated successfully when the OTP channel is set to phone uniqueIdentifier: TC_Mimoto_SendOTP_06 role: resident checkErrorsOnlyInResponse: true @@ -35,7 +35,7 @@ SendOTP: }' Resident_SendOTP_Valid_UIN_Email_Smoke: endPoint: /resident/v1/req/otp - description: Generating OTP with OTP channel as email + description: Verifying that the OTP is generated successfully when the OTP channel is set to email uniqueIdentifier: TC_Mimoto_SendOTP_07 role: resident restMethod: post @@ -52,7 +52,7 @@ SendOTP: }' Resident_SendOTP_RevokedVID_Invalid: endPoint: /resident/v1/req/otp - description: Generating OTP with revoked VID + description: Validate OTP generation using a revoked VID uniqueIdentifier: TC_Mimoto_SendOTP_08 role: resident restMethod: post @@ -69,7 +69,7 @@ SendOTP: }' Resident_SendOTP_Valid_UIN_Invalid_empty_otpChannel: endPoint: /resident/v1/req/otp - description: Generating OTP with empty OTP channel + description: Validate OTP generation when the OTP channel field is empty uniqueIdentifier: TC_Mimoto_SendOTP_09 role: resident restMethod: post @@ -87,7 +87,7 @@ SendOTP: }' Resident_SendOTP_InValid_individualId: endPoint: /resident/v1/req/otp - description: Generating OTP with invalid individualID + description: Validating the OTP generation with an invalid Individual ID uniqueIdentifier: TC_Mimoto_SendOTP_10 role: resident restMethod: post @@ -104,7 +104,7 @@ SendOTP: }' Resident_SendOTP_InValid_Missing_individualId: endPoint: /resident/v1/req/otp - description: Generating OTP with missing individualID + description: Validating the OTP generation with a missing Individual ID uniqueIdentifier: TC_Mimoto_SendOTP_11 role: resident restMethod: post @@ -121,7 +121,7 @@ SendOTP: }' Resident_SendOTP_InValid_Empty_transactionID: endPoint: /resident/v1/req/otp - description: Generating OTP with empty transactionID + description: Validating the OTP generation with an empty transaction ID uniqueIdentifier: TC_Mimoto_SendOTP_12 role: resident restMethod: post @@ -138,7 +138,7 @@ SendOTP: }' Resident_SendOTP_InValid_transactionID: endPoint: /resident/v1/req/otp - description: Generating OTP with invalid transactionID + description: Validate OTP generation using an invalid transaction ID uniqueIdentifier: TC_Mimoto_SendOTP_13 role: resident restMethod: post @@ -155,7 +155,7 @@ SendOTP: }' Resident_SendOTP_InValid_Missing_transactionID: endPoint: /resident/v1/req/otp - description: Generating OTP with missing transactionID + description: Validating the OTP generation with a missing transaction ID uniqueIdentifier: TC_Mimoto_SendOTP_14 role: resident restMethod: post @@ -172,7 +172,7 @@ SendOTP: }' Resident_SendOTP_InValid_Empty_requestTime: endPoint: /resident/v1/req/otp - description: Generating OTP with empty request time + description: Validating the OTP generation with an empty request time uniqueIdentifier: TC_Mimoto_SendOTP_15 role: resident restMethod: post @@ -189,7 +189,7 @@ SendOTP: }' Resident_SendOTP_InValid_requestTime: endPoint: /resident/v1/req/otp - description: Generating OTP with invalid request time + description: Verifying that the system returns an appropriate error when generating an OTP with an invalid request time uniqueIdentifier: TC_Mimoto_SendOTP_16 role: resident restMethod: post diff --git a/api-test/src/main/resources/mimoto/WalletBinding/WalletBinding.yml b/api-test/src/main/resources/mimoto/WalletBinding/WalletBinding.yml index fe7f42fa3..faf8f4809 100644 --- a/api-test/src/main/resources/mimoto/WalletBinding/WalletBinding.yml +++ b/api-test/src/main/resources/mimoto/WalletBinding/WalletBinding.yml @@ -1,7 +1,7 @@ WalletBinding: Mimoto_WalletBinding_uin_OTP_Valid_Smoke: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with valid UIN + description: Verify that the system generates an OTP when a valid UIN is provided for VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_01 role: resident validityCheckRequired: true @@ -35,7 +35,7 @@ WalletBinding: Mimoto_WalletBinding_vid_OTP_Valid_Smoke: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with valid VID + description: Verify that the system generates an OTP when a valid VID is provided for VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_02 role: resident validityCheckRequired: true @@ -69,7 +69,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_RequestTime_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with invalid request time + description: Verify that the system rejects the request and does not generate an OTP when an invalid request time is provided for VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_03 role: resident validityCheckRequired: true @@ -108,7 +108,7 @@ WalletBinding: Mimoto_WalletBinding_uin_PastVal_RequestTime_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with past request time + description: Verify that the system rejects the request and does not generate an OTP when a past request time is provided for VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_04 role: resident validityCheckRequired: true @@ -147,7 +147,7 @@ WalletBinding: Mimoto_WalletBinding_uin_FutureVal_RequestTime_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with future request time + description: Verify that the system rejects the request and does not generate an OTP when a future request time is provided for VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_05 role: resident validityCheckRequired: true @@ -186,7 +186,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Empty_RequestTime_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with empty requestime + description: Verify that the system rejects the request and does not generate an OTP when the requestTime field is empty for VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_06 role: resident validityCheckRequired: true @@ -225,7 +225,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_RequestTime_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with missing requestime + description: Verify that the system rejects the request and does not generate an OTP when the requestTime field is missing for VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_07 role: resident validityCheckRequired: true @@ -264,7 +264,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_IndividualId_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with invalid individualId + description: Verify that the system rejects the request and does not generate an OTP when an invalid individualId is provided for VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_08 role: resident validityCheckRequired: true @@ -304,7 +304,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Empty_IndividualId_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with empty individualId + description: Verify that the system rejects the request and does not generate an OTP when the individualId field is empty for VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_09 role: resident validityCheckRequired: true @@ -343,7 +343,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Null_IndividualId_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with individualId being null + description: Verify that the system rejects the request and does not generate an OTP when the individualId value is null for VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_10 role: resident validityCheckRequired: true @@ -383,7 +383,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_IndividualId_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with individualId being missing + description: Verify that the system rejects the request and does not generate an OTP when the individualId field is missing for VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_11 role: resident validityCheckRequired: true @@ -422,7 +422,7 @@ WalletBinding: Mimoto_WalletBinding_uin_SpaceVal_IndividualId_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with individualId value having space + description: Verify that the system rejects the request and does not generate an OTP when the individualId contains spaces for VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_12 role: resident validityCheckRequired: true @@ -461,7 +461,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_AuthFactorType_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with invalid authfactortype + description: Verify that the system rejects the request and does not generate an OTP when an invalid authFactorType is provided for VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_13 role: resident validityCheckRequired: true @@ -501,7 +501,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Empty_AuthFactorType_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with empty authfactortype + description: Verify that the system rejects the request and does not generate an OTP when the authFactorType field is empty for VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_14 role: resident validityCheckRequired: true @@ -541,7 +541,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_AuthFactorType_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with missing authfactortype + description: Verify that the system rejects the request and does not generate an OTP when the authFactorType field is missing for VC binding. uniqueIdentifier: TC_Mimoto_WalletBinding_15 role: resident validityCheckRequired: true @@ -581,7 +581,7 @@ WalletBinding: Mimoto_WalletBinding_uin_SpaceVal_AuthFactorType_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with authfactortype value being just space + description: Verify that the system rejects the request and does not generate an OTP when the authFactorType value contains only spaces for VC binding. uniqueIdentifier: TC_Mimoto_WalletBinding_16 role: resident validityCheckRequired: true @@ -621,7 +621,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Null_AuthFactorType_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with authfactortype value being just null + description: Verify that the system rejects the request and does not generate an OTP when the authFactorType value is null for VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_17 role: resident validityCheckRequired: true @@ -661,7 +661,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_Challenge_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with invalid challenge + description: Verify that the system rejects the request and does not generate an OTP when an invalid challenge value is provided for VC binding. uniqueIdentifier: TC_Mimoto_WalletBinding_18 role: resident validityCheckRequired: true @@ -701,7 +701,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_Challenge_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with missing challenge + description: Verify that the system rejects the request and does not generate an OTP when the challenge field is missing for VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_19 role: resident validityCheckRequired: true @@ -741,7 +741,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Empty_Challenge_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with empty challenge + description: Verify that the system rejects the request and does not generate an OTP when the challenge field is empty for VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_20 role: resident validityCheckRequired: true @@ -781,7 +781,7 @@ WalletBinding: Mimoto_WalletBinding_uin_SpaceVal_Challenge_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with challenge value having space + description: Verify that the system rejects the request and does not generate an OTP when the challenge value contains spaces for VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_21 role: resident validityCheckRequired: true @@ -821,7 +821,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Null_Challenge_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with challenge value having null + description: Verify that the system rejects the request and does not generate an OTP when the challenge value is null for VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_22 role: resident validityCheckRequired: true @@ -861,7 +861,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_Formate_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with invalid formate + description: Verify that the system rejects the request and does not generate an OTP when an invalid format value is provided for VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_23 role: resident validityCheckRequired: true @@ -901,7 +901,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_Formate_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with missing formate + description: Verify that the system rejects the request and does not generate an OTP when the format field is missing for VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_24 role: resident validityCheckRequired: true @@ -941,7 +941,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Empty_Formate_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with empty formate + description: Verify that the system rejects the request and does not generate an OTP when the format field is empty for VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_25 role: resident validityCheckRequired: true @@ -981,7 +981,7 @@ WalletBinding: Mimoto_WalletBinding_uin_SpaceVal_Formate_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with formate value having space + description: Verify that the system rejects the request and does not generate an OTP when the format value contains spaces for VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_26 role: resident validityCheckRequired: true @@ -1021,7 +1021,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Null_Formate_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with formate value having null + description: Verify that the system rejects the request and does not generate an OTP when the format value is null for VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_27 role: resident validityCheckRequired: true @@ -1061,7 +1061,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_authFactorType1_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with invalid authFactorType1 + description: Verify that the system rejects the request and does not generate an OTP when an invalid authFactorType1 is provided for VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_28 role: resident validityCheckRequired: true @@ -1100,7 +1100,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_authFactorType1_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with missing authFactorType1 + description: Verify that the system rejects the request and does not generate an OTP when the authFactorType1 field is missing for VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_29 role: resident validityCheckRequired: true @@ -1139,7 +1139,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Empty_authFactorType1_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with empty authFactorType1 + description: Verify that the system rejects the request and does not generate an OTP when the authFactorType1 field is empty for VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_30 role: resident validityCheckRequired: true @@ -1178,7 +1178,7 @@ WalletBinding: Mimoto_WalletBinding_uin_SpaceVal_authFactorType1_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with authFactorType1 value having space + description: Verify that the system rejects the request and does not generate an OTP when the authFactorType1 value contains spaces for VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_31 role: resident validityCheckRequired: true @@ -1217,7 +1217,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Null_authFactorType1_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with authFactorType1 value having null + description: Verify that the system rejects the request and does not generate an OTP when the authFactorType1 value is null for VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_32 role: resident validityCheckRequired: true @@ -1256,7 +1256,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_format1_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with invalid format1 + description: Verify that the system rejects the request and does not generate an OTP when an invalid format1 value is provided for VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_33 role: resident validityCheckRequired: true @@ -1295,7 +1295,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_format1_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with missing format1 + description: Verify that the system rejects the request and does not generate an OTP when the format1 field is missing for VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_34 role: resident validityCheckRequired: true @@ -1334,7 +1334,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Empty_format1_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with empty format1 + description: Verify that the system rejects the request and does not generate an OTP when the format1 field is empty for VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_35 role: resident validityCheckRequired: true @@ -1373,7 +1373,7 @@ WalletBinding: Mimoto_WalletBinding_uin_SpaceVal_format1_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with format1 value having space + description: Verify that the system rejects the request and does not generate an OTP when the format1 value contains spaces for VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_36 role: resident validityCheckRequired: true @@ -1412,7 +1412,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Null_format1_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with format1 value having null + description: Verify that the system rejects the request and does not generate an OTP when the format1 value is null for VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_37 role: resident validityCheckRequired: true @@ -1451,7 +1451,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Invalid_publicKey_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with invalid publickey + description: Verify that the system rejects the request and does not generate an OTP when an invalid publicKey is provided for VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_38 role: resident validityCheckRequired: true @@ -1490,7 +1490,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Null_publicKey_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with null as publickey + description: Verify that the system rejects the request and does not generate an OTP when the publicKey value is null for VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_39 role: resident validityCheckRequired: true @@ -1529,7 +1529,7 @@ WalletBinding: Mimoto_WalletBinding_uin_Missing_publicKey_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VC with missing publickey + description: Verify that the system rejects the request and does not generate an OTP when the publicKey field is missing for VC binding. uniqueIdentifier: TC_Mimoto_WalletBinding_40 role: resident validityCheckRequired: true @@ -1568,7 +1568,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_RequestTime_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind vid VC with invalid request time + description: Verify that the system rejects the request and does not generate an OTP when an invalid requestTime is provided for VID-based VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_41 role: resident validityCheckRequired: true @@ -1607,7 +1607,7 @@ WalletBinding: Mimoto_WalletBinding_vid_PastVal_RequestTime_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind vid VC with past request time + description: Verify that the system rejects the request and does not generate an OTP when a past requestTime is provided for VID-based VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_42 role: resident validityCheckRequired: true @@ -1646,7 +1646,7 @@ WalletBinding: Mimoto_WalletBinding_vid_FutureVal_RequestTime_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind vid VC with future request time + description: Verify that the system rejects the request and does not generate an OTP when a future requestTime is provided for VID-based VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_43 role: resident validityCheckRequired: true @@ -1685,7 +1685,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Empty_RequestTime_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind vid VC with empty request time + description: Verify that the system rejects the request and does not generate an OTP when the requestTime field is empty for VID-based VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_44 role: resident validityCheckRequired: true @@ -1724,7 +1724,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_RequestTime_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind vid VC with missing request time + description: Verify that generating an OTP to bind a VID VC fails when requestTime is missing uniqueIdentifier: TC_Mimoto_WalletBinding_45 role: resident validityCheckRequired: true @@ -1763,7 +1763,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_IndividualId_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind vid VC with invalid individualId + description: Verify that the system rejects the request and does not generate an OTP when an invalid individualId is provided for VID-based VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_46 role: resident validityCheckRequired: true @@ -1803,7 +1803,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Empty_IndividualId_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind vid VC with empty individualId + description: Verify that the system rejects the request and does not generate an OTP when the individualId field is empty for VID-based VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_47 role: resident validityCheckRequired: true @@ -1842,7 +1842,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Null_IndividualId_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind vid VC with null individualId + description: Verify that the system rejects the request and does not generate an OTP when the individualId value is null for VID-based VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_48 role: resident validityCheckRequired: true @@ -1882,7 +1882,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_IndividualId_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind vid VC with missing individualId + description: Verify that the system rejects the request and does not generate an OTP when the individualId field is missing for VID-based VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_49 role: resident validityCheckRequired: true @@ -1921,7 +1921,7 @@ WalletBinding: Mimoto_WalletBinding_vid_SpaceVal_IndividualId_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VID VC with individualId value having space + description: Verify that the system rejects the request and does not generate an OTP when the individualId contains spaces for VID-based VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_50 role: resident validityCheckRequired: true @@ -1960,7 +1960,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_AuthFactorType_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VID VC with invalid authfactortype + description: Verify that the system rejects the request and does not generate an OTP when an invalid authFactorType is provided for VID-based VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_51 role: resident validityCheckRequired: true @@ -2000,7 +2000,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Empty_AuthFactorType_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VID VC with empty authfactortype + description: Verify that the system rejects the request and does not generate an OTP when the authFactorType field is empty for VID-based VC binding. uniqueIdentifier: TC_Mimoto_WalletBinding_52 role: resident validityCheckRequired: true @@ -2040,7 +2040,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_AuthFactorType_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VID VC with missing authfactortype + description: Verify that the system rejects the request and does not generate an OTP when the authFactorType field is missing for VID-based VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_53 role: resident validityCheckRequired: true @@ -2080,7 +2080,7 @@ WalletBinding: Mimoto_WalletBinding_vid_SpaceVal_AuthFactorType_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VID VC with authfactortype value being just space + description: Verify that the system rejects the request and does not generate an OTP when the authFactorType value contains only spaces for VID-based VC binding. uniqueIdentifier: TC_Mimoto_WalletBinding_54 role: resident validityCheckRequired: true @@ -2120,7 +2120,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Null_AuthFactorType_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VID VC with authfactortype value being just null + description: Verify that the system rejects the request and does not generate an OTP when the authFactorType value is null for VID-based VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_55 role: resident validityCheckRequired: true @@ -2159,7 +2159,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_Challenge_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VID VC with invalid challenge + description: Verify that the system rejects the request and does not generate an OTP when an invalid challenge value is provided for VID-based VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_56 role: resident validityCheckRequired: true @@ -2199,7 +2199,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_Challenge_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VID VC with missing challenge + description: Verify that the system rejects the request and does not generate an OTP when the challenge field is missing for VID-based VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_57 role: resident validityCheckRequired: true @@ -2239,7 +2239,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Empty_Challenge_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VID VC with empty challenge + description: Verify that the system rejects the request and does not generate an OTP when the challenge field is empty for VID-based VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_58 role: resident validityCheckRequired: true @@ -2279,7 +2279,7 @@ WalletBinding: Mimoto_WalletBinding_vid_SpaceVal_Challenge_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VID VC with challenge value having space + description: Verify that the system rejects the request and does not generate an OTP when the challenge value contains spaces for VID-based VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_59 role: resident validityCheckRequired: true @@ -2319,7 +2319,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Null_Challenge_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VID VC with challenge value having null + description: Verify that the system rejects the request and does not generate an OTP when the challenge value is null for VID-based VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_60 role: resident validityCheckRequired: true @@ -2358,7 +2358,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_Formate_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VID VC with invalid formate + description: Verify that the system rejects the request and does not generate an OTP when an invalid format value is provided for VID-based VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_61 role: resident validityCheckRequired: true @@ -2397,7 +2397,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_Formate_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VID VC with missing formate + description: Verify that the system rejects the request and does not generate an OTP when the format field is missing for VID-based VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_62 role: resident validityCheckRequired: true @@ -2437,7 +2437,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Empty_Formate_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VID VC with empty formate + description: Verify that the system rejects the request and does not generate an OTP when the format field is empty for VID-based VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_63 role: resident validityCheckRequired: true @@ -2477,7 +2477,7 @@ WalletBinding: Mimoto_WalletBinding_vid_SpaceVal_Formate_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VID VC with formate value having space + description: Verify that the system rejects the request and does not generate an OTP when the format value contains spaces for VID-based VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_64 role: resident validityCheckRequired: true @@ -2517,7 +2517,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Null_Formate_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VID VC with formate value having null + description: Verify that the system rejects the request and does not generate an OTP when the format value is null for VID-based VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_65 role: resident validityCheckRequired: true @@ -2556,7 +2556,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_authFactorType1_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VID VC with invalid authFactorType1 + description: Verify that the system rejects the request and does not generate an OTP when an invalid authFactorType1 is provided for VID-based VC binding. uniqueIdentifier: TC_Mimoto_WalletBinding_66 role: resident validityCheckRequired: true @@ -2595,7 +2595,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_authFactorType1_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VID VC with missing authFactorType1 + description: Verify that the system rejects the request and does not generate an OTP when the authFactorType1 field is missing for VID-based VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_67 role: resident validityCheckRequired: true @@ -2634,7 +2634,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Empty_authFactorType1_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VID VC with empty authFactorType1 + description: Verify that the system rejects the request and does not generate an OTP when the authFactorType1 field is empty for VID-based VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_68 role: resident validityCheckRequired: true @@ -2673,7 +2673,7 @@ WalletBinding: Mimoto_WalletBinding_vid_SpaceVal_authFactorType1_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VID VC with authFactorType1 value having space + description: Verify that the system rejects the request and does not generate an OTP when the authFactorType1 value contains spaces for VID-based VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_69 role: resident validityCheckRequired: true @@ -2712,7 +2712,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Null_authFactorType1_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VID VC with authFactorType1 value having null + description: Verify that the system rejects the request and does not generate an OTP when the authFactorType1 value is null for VID-based VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_70 role: resident validityCheckRequired: true @@ -2751,7 +2751,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_format1_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VID VC with invalid format1 + description: Verify that the system rejects the request and does not generate an OTP when an invalid format1 value is provided for VID-based VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_71 role: resident validityCheckRequired: true @@ -2790,7 +2790,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_format1_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VID VC with missing format1 + description: Verify that the system rejects the request and does not generate an OTP when the format1 field is missing for VID-based VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_72 role: resident validityCheckRequired: true @@ -2829,7 +2829,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Empty_format1_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VID VC with empty format1 + description: Verify that the system rejects the request and does not generate an OTP when the format1 field is empty for VID-based VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_73 role: resident validityCheckRequired: true @@ -2868,7 +2868,7 @@ WalletBinding: Mimoto_WalletBinding_vid_SpaceVal_format1_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VID VC with format1 value having space + description: Verify that the system rejects the request and does not generate an OTP when the format1 value contains spaces for VID-based VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_74 role: resident validityCheckRequired: true @@ -2907,7 +2907,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Null_format1_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VID VC with format1 value having null + description: Verify that the system rejects the request and does not generate an OTP when the format1 value is null for VID-based VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_75 role: resident validityCheckRequired: true @@ -2946,7 +2946,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Invalid_publicKey_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VID VC with invalid publickey + description: Verify that the system rejects the request and does not generate an OTP when an invalid publicKey is provided for VID-based VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_76 role: resident validityCheckRequired: true @@ -2985,7 +2985,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Null_publicKey_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VID VC with null as publickey + description: Verify that the system rejects the request and does not generate an OTP when the publicKey is null for VID-based VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_77 role: resident validityCheckRequired: true @@ -3024,7 +3024,7 @@ WalletBinding: Mimoto_WalletBinding_vid_Missing_publicKey_Neg: endPoint: /v1/mimoto/wallet-binding - description: Generating OTP to bind VID VC with missing publickey + description: Verify that the system rejects the request and does not generate an OTP when the publicKey field is missing for VID-based VC binding uniqueIdentifier: TC_Mimoto_WalletBinding_78 role: resident validityCheckRequired: true From 879cf1790e1b58420686492ffe7237f0cff44a32 Mon Sep 17 00:00:00 2001 From: Madhuravas reddy Date: Mon, 30 Mar 2026 15:44:34 +0530 Subject: [PATCH 838/860] INJIWEB-1890 Update docker image tag and add missing config (#1062) Signed-off-by: Madhuravas reddy --- docker-compose/config/mimoto-default.properties | 2 +- docker-compose/docker-compose.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose/config/mimoto-default.properties b/docker-compose/config/mimoto-default.properties index a27c1e7b6..c2e2a5733 100644 --- a/docker-compose/config/mimoto-default.properties +++ b/docker-compose/config/mimoto-default.properties @@ -404,7 +404,7 @@ spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect # List of URLs that can be accessed without any user authentication by Identity Provider mosip.security.ignore-auth-urls=/safetynet/**,/actuator/**,/swagger-ui/**,/v3/api-docs/**,\ /allProperties,/credentials/**,/credentialshare/**,/binding-otp,/wallet-binding,/get-token/**,\ - /issuers,/issuers/**,/authorize,/req/otp,/vid,/req/auth/**,/req/individualId/otp,/aid/get-individual-id,\ + /issuers,/issuers/**,/v2/issuers,/v2/issuers/**,/authorize,/req/otp,/vid,/req/auth/**,/req/individualId/otp,/aid/get-individual-id,\ /verifiers, /auth/*/token-login # CSRF Security Configuration diff --git a/docker-compose/docker-compose.yml b/docker-compose/docker-compose.yml index b50208a50..7ad24cc03 100644 --- a/docker-compose/docker-compose.yml +++ b/docker-compose/docker-compose.yml @@ -52,7 +52,7 @@ services: mimoto-service: container_name: 'mimoto-service' - image: 'mosipdev/mimoto:develop' + image: 'injistackdev/mimoto:develop' user: root ports: - '8099:8099' From e3e659f047718288f35fad24cfbd46f592ffd1c5 Mon Sep 17 00:00:00 2001 From: Durgesh Konga Date: Wed, 1 Apr 2026 09:41:08 +0530 Subject: [PATCH 839/860] [INJIWEB-1888] - update LogoDTO properties (#1063) Add Test cases in IssuersController Signed-off-by: Durgesh Konga --- .../java/io/mosip/mimoto/dto/LogoDTO.java | 4 ++ .../controller/IssuersControllerTest.java | 48 +++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/src/main/java/io/mosip/mimoto/dto/LogoDTO.java b/src/main/java/io/mosip/mimoto/dto/LogoDTO.java index 2793edf9e..9d8fe49c1 100644 --- a/src/main/java/io/mosip/mimoto/dto/LogoDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/LogoDTO.java @@ -1,7 +1,9 @@ package io.mosip.mimoto.dto; +import com.fasterxml.jackson.annotation.JsonAlias; import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -13,6 +15,8 @@ public class LogoDTO { @Expose @NotBlank @URL + @JsonAlias("uri") + @SerializedName(value = "url", alternate = {"uri"}) @Schema(description = "Display logo uri of the Issuer") String url; @Expose diff --git a/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java b/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java index dda673044..013bcb785 100644 --- a/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; +import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.IssuersDTO; import io.mosip.mimoto.dto.mimoto.CredentialIssuerConfiguration; import io.mosip.mimoto.exception.ApiNotAccessibleException; @@ -158,6 +159,53 @@ public void getIssuerDetailsTestForValidIssuerId() throws Exception { .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(API_NOT_ACCESSIBLE_EXCEPTION.getMessage()))); } + @Test + public void getIssuerDetailsLogoDtoWithUrlProperty() throws Exception { + IssuerDTO issuer = getIssuerConfigDTO("Issuer1"); + issuer.getDisplay().get(0).getLogo().setUrl("https://example.com/logo-via-url.png"); + issuer.getDisplay().get(0).getLogo().setAlt_text("alt-url"); + + Mockito.when(issuersService.getIssuerDetails("id-url")).thenReturn(issuer); + + mockMvc.perform(get("/issuers/id-url").accept(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.response.display[0].logo.url", Matchers.is("https://example.com/logo-via-url.png"))) + .andExpect(jsonPath("$.response.display[0].logo.alt_text", Matchers.is("alt-url"))); + } + + @Test + public void getIssuerDetailsLogoDtoFromJsonWithUriAlias() throws Exception { + String issuerJson = """ + { + "issuer_id": "Issuer1id", + "protocol": "OpenId4VCI", + "display": [{ + "name": "Issuer1", + "title": "Download via Issuer1", + "description": "Issuer1 description", + "language": "en", + "logo": { + "uri": "https://example.com/logo-via-uri.png", + "alt_text": "alt-uri" + } + }], + "client_id": "123", + "client_alias": "test-client-alias", + "enabled": "true", + "credential_issuer_host": "https://issuer.env.net", + "token_endpoint": "https://dev/Issuer1id" + } + """; + IssuerDTO issuer = new ObjectMapper().readValue(issuerJson, IssuerDTO.class); + + Mockito.when(issuersService.getIssuerDetails("id-uri")).thenReturn(issuer); + + mockMvc.perform(get("/issuers/id-uri").accept(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.response.display[0].logo.url", Matchers.is("https://example.com/logo-via-uri.png"))) + .andExpect(jsonPath("$.response.display[0].logo.alt_text", Matchers.is("alt-uri"))); + } + @Test public void getIssuerDetailsTestForInvalidIssuerId() throws Exception { Mockito.when(issuersService.getIssuerDetails("invalidId")).thenThrow(InvalidIssuerIdException.class); From 20bd8ac98f062c72da7534c0e1ddd772227b6993 Mon Sep 17 00:00:00 2001 From: Durgesh Konga Date: Wed, 1 Apr 2026 15:10:47 +0530 Subject: [PATCH 840/860] [INJIWEB-1873] - Add Conditional Validation for verifier, bring back fall back redirect logic in case of response_mode is not direct_post (#1064) * [INJIWEB-1873] - Add conditional validation for verifer Signed-off-by: Durgesh Konga * [INJIWEB-1873] - bring back fallback logic for building direct uri incase of response mode is not direct_post Signed-off-by: Durgesh Konga * [INJIWEB-1873] - Add Optional logic for responseUris and redirecturis Signed-off-by: Durgesh Konga --------- Signed-off-by: Durgesh Konga --- .../controller/PresentationController.java | 2 +- .../mosip/mimoto/service/VerifierService.java | 2 +- .../service/impl/PresentationServiceImpl.java | 21 +++- .../service/impl/VerifierServiceImpl.java | 64 +++++++---- .../PresentationControllerTest.java | 38 +++---- .../service/PresentationServiceTest.java | 70 +++++++++--- .../mimoto/service/VerifierServiceTest.java | 105 ++++++++++++++++-- 7 files changed, 237 insertions(+), 65 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/controller/PresentationController.java b/src/main/java/io/mosip/mimoto/controller/PresentationController.java index 5dee617c6..2e0b8e7c4 100644 --- a/src/main/java/io/mosip/mimoto/controller/PresentationController.java +++ b/src/main/java/io/mosip/mimoto/controller/PresentationController.java @@ -67,7 +67,7 @@ public void performAuthorization(HttpServletResponse response, try { log.info("Started Presentation Authorization in the controller."); - verifierService.validateVerifier(clientId, responseUri); + verifierService.validateVerifier(clientId, responseUri, redirectUri); PresentationDefinitionDTO presentationDefinitionDTO = objectMapper.readValue(presentationDefinition, PresentationDefinitionDTO.class); PresentationRequestDTO presentationRequestDTO = PresentationRequestDTO.builder() .responseType(responseType) diff --git a/src/main/java/io/mosip/mimoto/service/VerifierService.java b/src/main/java/io/mosip/mimoto/service/VerifierService.java index 8d2b23deb..e97d2bc88 100644 --- a/src/main/java/io/mosip/mimoto/service/VerifierService.java +++ b/src/main/java/io/mosip/mimoto/service/VerifierService.java @@ -13,7 +13,7 @@ public interface VerifierService { Optional getVerifierByClientId(String clientId) throws ApiNotAccessibleException, IOException; - void validateVerifier(String clientId, String redirectUri) throws ApiNotAccessibleException, JsonProcessingException; + void validateVerifier(String clientId, String responseUri, String redirectUri) throws ApiNotAccessibleException, JsonProcessingException; VerifiersDTO getTrustedVerifiers() throws ApiNotAccessibleException, IOException; boolean isVerifierTrustedByWallet(String verifierId, String walletId); boolean isVerifierClientPreregistered(List preRegisteredVerifiers, String urlEncodedVPAuthorizationRequest) throws URISyntaxException; diff --git a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java index b07b2c917..c541cfe97 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/PresentationServiceImpl.java @@ -193,10 +193,25 @@ private String processInputDescriptor(VCCredentialResponse vcCredentialResponse, ); } - //throw exception if the response_mode is not direct_post - else { - throw new VPNotCreatedException(ErrorConstants.INVALID_RESPONSE_MODE.getErrorCode(), ErrorConstants.INVALID_RESPONSE_MODE.getErrorMessage()); + // Otherwise, do redirect + String redirectString = buildRedirectString( + vpToken, + presentationRequestDTO.getRedirectUri(), + presentationSubmission + ); + + if (redirectString.length() > maximumResponseHeaderSize) { + throw new VPNotCreatedException(ErrorConstants.URI_TOO_LONG.getErrorCode(), ErrorConstants.URI_TOO_LONG.getErrorMessage()); } + + return redirectString; + } + + private String buildRedirectString(String vpToken, String redirectUri, String presentationSubmission) { + return String.format(injiOvpRedirectURLPattern, + redirectUri, + Base64.getUrlEncoder().encodeToString(vpToken.getBytes(StandardCharsets.UTF_8)), + URLEncoder.encode(presentationSubmission, StandardCharsets.UTF_8)); } private String createVpToken(VerifiablePresentationDTO vpDTO) throws JsonProcessingException { diff --git a/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java index 71f0a3994..9ed8b04c4 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/VerifierServiceImpl.java @@ -21,6 +21,7 @@ import org.springframework.cache.annotation.Cacheable; import java.net.URISyntaxException; +import java.util.Collections; import java.util.List; import java.util.Optional; @@ -66,26 +67,51 @@ public Optional getVerifierByClientId(String clientId) throws ApiNo } @Override - public void validateVerifier(String clientId, String responseUri) throws ApiNotAccessibleException, JsonProcessingException { + public void validateVerifier(String clientId, String responseUri, String redirectUri) throws ApiNotAccessibleException, JsonProcessingException { log.info("Started the presentation Validation"); - getVerifierByClientId(clientId).ifPresentOrElse( - (verifierDTO) -> { - boolean isValidVerifier = verifierDTO.getResponseUris().stream().anyMatch(registeredResponseUri -> - urlValidator.isValid(registeredResponseUri) && - urlValidator.isValid(responseUri) && - pathMatcher.match(registeredResponseUri, responseUri)); - if(!isValidVerifier){ - throw new InvalidVerifierException( - ErrorConstants.INVALID_RESPONSE_URI.getErrorCode(), - ErrorConstants.INVALID_RESPONSE_URI.getErrorMessage()); - } - }, - () -> { - throw new InvalidVerifierException( - ErrorConstants.INVALID_CLIENT.getErrorCode(), - ErrorConstants.INVALID_CLIENT.getErrorMessage()); - } - ); + if (responseUri != null && !responseUri.trim().isEmpty()) { + getVerifierByClientId(clientId).ifPresentOrElse( + (verifierDTO) -> { + List registeredResponseUris = Optional.ofNullable(verifierDTO.getResponseUris()) + .orElseGet(Collections::emptyList); + boolean isValidVerifier = registeredResponseUris.stream().anyMatch(registeredResponseUri -> + urlValidator.isValid(registeredResponseUri) && + urlValidator.isValid(responseUri) && + pathMatcher.match(registeredResponseUri, responseUri)); + if (!isValidVerifier) { + throw new InvalidVerifierException( + ErrorConstants.INVALID_RESPONSE_URI.getErrorCode(), + ErrorConstants.INVALID_RESPONSE_URI.getErrorMessage()); + } + }, + () -> { + throw new InvalidVerifierException( + ErrorConstants.INVALID_CLIENT.getErrorCode(), + ErrorConstants.INVALID_CLIENT.getErrorMessage()); + } + ); + } else { + getVerifierByClientId(clientId).ifPresentOrElse( + (verifierDTO) -> { + List registeredRedirectUris = Optional.ofNullable(verifierDTO.getRedirectUris()) + .orElseGet(Collections::emptyList); + boolean isValidVerifier = registeredRedirectUris.stream().anyMatch(registeredRedirectUri -> + urlValidator.isValid(registeredRedirectUri) && + urlValidator.isValid(redirectUri) && + pathMatcher.match(registeredRedirectUri, redirectUri)); + if (!isValidVerifier) { + throw new InvalidVerifierException( + ErrorConstants.INVALID_REDIRECT_URI.getErrorCode(), + ErrorConstants.INVALID_REDIRECT_URI.getErrorMessage()); + } + }, + () -> { + throw new InvalidVerifierException( + ErrorConstants.INVALID_CLIENT.getErrorCode(), + ErrorConstants.INVALID_CLIENT.getErrorMessage()); + } + ); + } } @Override diff --git a/src/test/java/io/mosip/mimoto/controller/PresentationControllerTest.java b/src/test/java/io/mosip/mimoto/controller/PresentationControllerTest.java index d589947c2..60e2b0436 100644 --- a/src/test/java/io/mosip/mimoto/controller/PresentationControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/PresentationControllerTest.java @@ -78,7 +78,7 @@ public void testPerformAuthorizationSuccess() throws Exception { .thenReturn(mockPresentationDefinitionDTO); when(presentationService.authorizePresentation(any(PresentationRequestDTO.class))) .thenReturn(SUCCESS_REDIRECT_URL); - doNothing().when(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI); + doNothing().when(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI, REDIRECT_URI); // Act & Assert mockMvc.perform(get("/authorize") @@ -92,7 +92,7 @@ public void testPerformAuthorizationSuccess() throws Exception { .andExpect(redirectedUrl(SUCCESS_REDIRECT_URL)); // Verify service calls - verify(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI); + verify(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI, REDIRECT_URI); verify(objectMapper).readValue(PRESENTATION_DEFINITION_JSON, PresentationDefinitionDTO.class); ArgumentCaptor captor = ArgumentCaptor.forClass(PresentationRequestDTO.class); @@ -113,7 +113,7 @@ public void testPerformAuthorizationInvalidVerifierException() throws Exception String errorMessage = "Invalid verifier provided"; InvalidVerifierException exception = new InvalidVerifierException(errorCode, errorMessage); - doThrow(exception).when(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI); + doThrow(exception).when(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI, REDIRECT_URI); String expectedRedirectUrl = String.format( "https://inji.web.redirect.url?error_code=%s&error_message=%s", @@ -132,7 +132,7 @@ public void testPerformAuthorizationInvalidVerifierException() throws Exception .andExpect(status().isFound()) .andExpect(redirectedUrl(expectedRedirectUrl)); - verify(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI); + verify(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI, REDIRECT_URI); verify(presentationService, never()).authorizePresentation(any()); } @@ -146,7 +146,7 @@ public void testPerformAuthorizationVPNotCreatedException() throws Exception { PresentationDefinitionDTO mockPresentationDefinitionDTO = new PresentationDefinitionDTO(); when(objectMapper.readValue(PRESENTATION_DEFINITION_JSON, PresentationDefinitionDTO.class)) .thenReturn(mockPresentationDefinitionDTO); - doNothing().when(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI); + doNothing().when(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI, REDIRECT_URI); when(presentationService.authorizePresentation(any(PresentationRequestDTO.class))) .thenThrow(exception); @@ -168,7 +168,7 @@ public void testPerformAuthorizationVPNotCreatedException() throws Exception { .andExpect(status().isFound()) .andExpect(redirectedUrl(expectedRedirectUrl)); - verify(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI); + verify(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI, REDIRECT_URI); verify(presentationService).authorizePresentation(any(PresentationRequestDTO.class)); } @@ -182,7 +182,7 @@ public void testPerformAuthorizationInvalidCredentialResourceException() throws PresentationDefinitionDTO mockPresentationDefinitionDTO = new PresentationDefinitionDTO(); when(objectMapper.readValue(PRESENTATION_DEFINITION_JSON, PresentationDefinitionDTO.class)) .thenReturn(mockPresentationDefinitionDTO); - doNothing().when(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI); + doNothing().when(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI, REDIRECT_URI); when(presentationService.authorizePresentation(any(PresentationRequestDTO.class))) .thenThrow(exception); @@ -204,7 +204,7 @@ public void testPerformAuthorizationInvalidCredentialResourceException() throws .andExpect(status().isFound()) .andExpect(redirectedUrl(expectedRedirectUrl)); - verify(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI); + verify(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI, REDIRECT_URI); verify(presentationService).authorizePresentation(any(PresentationRequestDTO.class)); } @@ -216,7 +216,7 @@ public void testPerformAuthorizationGenericException() throws Exception { PresentationDefinitionDTO mockPresentationDefinitionDTO = new PresentationDefinitionDTO(); when(objectMapper.readValue(PRESENTATION_DEFINITION_JSON, PresentationDefinitionDTO.class)) .thenReturn(mockPresentationDefinitionDTO); - doNothing().when(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI); + doNothing().when(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI, REDIRECT_URI); when(presentationService.authorizePresentation(any(PresentationRequestDTO.class))) .thenThrow(exception); @@ -238,7 +238,7 @@ public void testPerformAuthorizationGenericException() throws Exception { .andExpect(status().isFound()) .andExpect(redirectedUrl(expectedRedirectUrl)); - verify(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI); + verify(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI, REDIRECT_URI); verify(presentationService).authorizePresentation(any(PresentationRequestDTO.class)); } @@ -247,7 +247,7 @@ public void testPerformAuthorizationJsonParsingException() throws Exception { // Arrange when(objectMapper.readValue(PRESENTATION_DEFINITION_JSON, PresentationDefinitionDTO.class)) .thenThrow(new RuntimeException("JSON parsing failed")); - doNothing().when(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI); + doNothing().when(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI, REDIRECT_URI); String expectedRedirectUrl = String.format( "%s?error_code=%s&error_message=%s", @@ -267,7 +267,7 @@ public void testPerformAuthorizationJsonParsingException() throws Exception { .andExpect(status().isFound()) .andExpect(redirectedUrl(expectedRedirectUrl)); - verify(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI); + verify(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI, REDIRECT_URI); verify(presentationService, never()).authorizePresentation(any()); } @@ -306,7 +306,7 @@ public void testPerformAuthorizationMissingRequiredParameters() throws Exception .andExpect(status().isBadRequest()); // Verify no service calls were made - verify(verifierService, never()).validateVerifier(anyString(), anyString()); + verify(verifierService, never()).validateVerifier(anyString(), anyString(), anyString()); verify(presentationService, never()).authorizePresentation(any()); } @@ -314,7 +314,7 @@ public void testPerformAuthorizationMissingRequiredParameters() throws Exception public void testPerformAuthorizationEmptyParameters() throws Exception { // Arrange doThrow(new InvalidVerifierException("EMPTY_CLIENT_ID", "Client ID cannot be empty")) - .when(verifierService).validateVerifier("", ""); + .when(verifierService).validateVerifier("", "", ""); String expectedRedirectUrl = String.format( "https://inji.web.redirect.url?error_code=%s&error_message=%s", @@ -347,7 +347,7 @@ public void testPerformAuthorizationSpecialCharactersInParameters() throws Excep String specialResponseUri = "https://example.com/v0/verify/vp-submission/direct-post?session=abc"; when(presentationService.authorizePresentation(any(PresentationRequestDTO.class))) .thenReturn(SUCCESS_REDIRECT_URL); - doNothing().when(verifierService).validateVerifier(specialClientId, specialResponseUri); + doNothing().when(verifierService).validateVerifier(specialClientId, specialResponseUri, specialRedirectUri); // Act & Assert mockMvc.perform(get("/authorize") @@ -360,7 +360,7 @@ public void testPerformAuthorizationSpecialCharactersInParameters() throws Excep .andExpect(status().isFound()) .andExpect(redirectedUrl(SUCCESS_REDIRECT_URL)); - verify(verifierService).validateVerifier(specialClientId, specialResponseUri); + verify(verifierService).validateVerifier(specialClientId, specialResponseUri, specialRedirectUri); verify(presentationService).authorizePresentation(any(PresentationRequestDTO.class)); } @@ -385,7 +385,7 @@ public void testPerformAuthorizationWithExtraParameters() throws Exception { .thenReturn(mockPresentationDefinitionDTO); when(presentationService.authorizePresentation(any(PresentationRequestDTO.class))) .thenReturn(SUCCESS_REDIRECT_URL); - doNothing().when(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI); + doNothing().when(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI, REDIRECT_URI); mockMvc.perform(get("/authorize") .param("response_type", RESPONSE_TYPE) @@ -404,7 +404,7 @@ public void testPerformAuthorizationWithMalformedPresentationDefinitionJson() th String malformedJson = "{invalid_json}"; when(objectMapper.readValue(malformedJson, PresentationDefinitionDTO.class)) .thenThrow(new RuntimeException("Malformed JSON")); - doNothing().when(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI); + doNothing().when(verifierService).validateVerifier(CLIENT_ID, RESPONSE_URI, REDIRECT_URI); String expectedRedirectUrl = String.format( "%s?error_code=%s&error_message=%s", @@ -434,7 +434,7 @@ public void testPerformAuthorizationWithNullParameters() throws Exception { .param("redirect_uri", (String) null)) .andExpect(status().isBadRequest()); - verify(verifierService, never()).validateVerifier(anyString(), anyString()); + verify(verifierService, never()).validateVerifier(anyString(), anyString(), anyString()); verify(presentationService, never()).authorizePresentation(any()); } diff --git a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java index 321d73068..aad2dc2d9 100644 --- a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java @@ -28,6 +28,8 @@ import org.mockito.junit.MockitoJUnitRunner; import java.io.IOException; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import java.time.Instant; import java.util.*; @@ -107,6 +109,59 @@ public void credentialProofMatchingWithVPRequest() throws Exception { verify(restApiClient).postApi(eq("https://verifier.example.com/response"), any(), any(), eq(Map.class)); } + @Test + public void authorizePresentation_redirectMode_returnsRedirectUrlWithVpTokenAndPresentationSubmission() throws Exception { + VCCredentialResponse vcCredentialResponse = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); + PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); + presentationRequestDTO.setResponseMode(null); + + doReturn(vcCredentialResponse).when(dataShareService).downloadCredentialFromDataShare(eq(presentationRequestDTO)); + doReturn((VCCredentialProperties) vcCredentialResponse.getCredential()).when(objectMapper) + .convertValue(eq(vcCredentialResponse.getCredential()), eq(VCCredentialProperties.class)); + doReturn("test-data").when(objectMapper).writeValueAsString(any()); + + String vpToken = "test-data"; + String presentationSubmission = "test-data"; + String redirectUri = presentationRequestDTO.getRedirectUri(); + String expected = String.format("%s#vp_token=%s&presentation_submission=%s", + redirectUri, + Base64.getUrlEncoder().encodeToString(vpToken.getBytes(StandardCharsets.UTF_8)), + URLEncoder.encode(presentationSubmission, StandardCharsets.UTF_8)); + + String actual = presentationService.authorizePresentation(presentationRequestDTO); + + assertEquals(expected, actual); + verify(restApiClient, never()).postApi(anyString(), any(), any(), eq(Map.class)); + } + + @Test + public void authorizePresentation_redirectMode_throwsWhenRedirectUrlExceedsMaxHeaderSize() throws Exception { + PresentationServiceImpl serviceWithSmallHeaderLimit = new PresentationServiceImpl( + dataShareService, + objectMapper, + restApiClient, + "%s#vp_token=%s&presentation_submission=%s", + 200 + ); + + VCCredentialResponse vcCredentialResponse = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); + PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); + presentationRequestDTO.setResponseMode(null); + + doReturn(vcCredentialResponse).when(dataShareService).downloadCredentialFromDataShare(eq(presentationRequestDTO)); + doReturn((VCCredentialProperties) vcCredentialResponse.getCredential()).when(objectMapper) + .convertValue(eq(vcCredentialResponse.getCredential()), eq(VCCredentialProperties.class)); + doReturn("p".repeat(500)).when(objectMapper).writeValueAsString(any()); + + VPNotCreatedException ex = assertThrows(VPNotCreatedException.class, + () -> serviceWithSmallHeaderLimit.authorizePresentation(presentationRequestDTO)); + + assertEquals( + ErrorConstants.URI_TOO_LONG.getErrorCode() + " --> " + ErrorConstants.URI_TOO_LONG.getErrorMessage(), + ex.getMessage()); + verify(restApiClient, never()).postApi(anyString(), any(), any(), eq(Map.class)); + } + @Test(expected = VPNotCreatedException.class) public void credentialProofMismatchWithVPRequest() throws IOException { VCCredentialResponse vcCredentialResponse = TestUtilities.getVCCredentialResponseDTO("RSASignature2020"); @@ -151,21 +206,6 @@ public void nullPresentationDefinitionWithVPRequest() throws IOException { presentationService.authorizePresentation(presentationRequestDTO); } - @Test(expected = VPNotCreatedException.class) - public void uriTooLongWithVPRequest() throws IOException { - presentationService = new PresentationServiceImpl(dataShareService, objectMapper, restApiClient, "%s#vp_token=%s&presentation_submission=%s", 10); - - VCCredentialResponse vcCredentialResponse = TestUtilities.getVCCredentialResponseDTO("Ed25519Signature2020"); - PresentationRequestDTO presentationRequestDTO = TestUtilities.getPresentationRequestDTO(); - - when(dataShareService.downloadCredentialFromDataShare(eq(presentationRequestDTO))).thenReturn(vcCredentialResponse); - when(objectMapper.convertValue(eq(vcCredentialResponse.getCredential()), eq(VCCredentialProperties.class))) - .thenReturn((VCCredentialProperties) vcCredentialResponse.getCredential()); - when(objectMapper.writeValueAsString(any())).thenReturn("very-long-test-data-that-exceeds-limit"); - - presentationService.authorizePresentation(presentationRequestDTO); - } - @Test public void constructPresentationDefinitionForLdpVcCredential() { VCCredentialResponse vcCredentialResponse = createLdpVcCredentialResponse(); diff --git a/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java b/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java index a60b115ad..c724c80ee 100644 --- a/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/VerifierServiceTest.java @@ -27,6 +27,7 @@ import java.util.Optional; import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.when; @@ -84,6 +85,14 @@ public void getNullWhenInvalidClientIdIsPassed() throws ApiNotAccessibleExceptio assertTrue(verifierDTO.isEmpty()); } + @Test + public void getVerifierByClientIdReturnsRegisteredRedirectUrisForClient() throws ApiNotAccessibleException, IOException { + Optional verifier = verifiersService.getVerifierByClientId("test-clientId"); + + assertTrue(verifier.isPresent()); + assertEquals(Collections.singletonList("https://test-redirectUri"), verifier.get().getRedirectUris()); + } + @Test public void shouldThrowApiNotAccessibleExceptionOnFetchingTrustedVerifiersListFailure() { when(utilities.getTrustedVerifiersJsonValue()).thenReturn(null); @@ -98,21 +107,103 @@ public void shouldThrowApiNotAccessibleExceptionOnFetchingTrustedVerifiersListFa @Test public void validateTrustedVerifiersAndDoNothing() throws ApiNotAccessibleException, IOException { - PresentationRequestDTO presentationRequestDTO = PresentationRequestDTO.builder().clientId("test-clientId").responseUri("https://test-responseUri").build(); - verifiersService.validateVerifier(presentationRequestDTO.getClientId(), presentationRequestDTO.getResponseUri()); + PresentationRequestDTO presentationRequestDTO = PresentationRequestDTO.builder().clientId("test-clientId").responseUri("https://test-responseUri").redirectUri("https://test-redirectUri").build(); + verifiersService.validateVerifier(presentationRequestDTO.getClientId(), presentationRequestDTO.getResponseUri(), presentationRequestDTO.getRedirectUri()); + } + + @Test + public void validateVerifier_succeedsWhenResponseUriNullAndRedirectUriMatches() throws ApiNotAccessibleException, IOException { + verifiersService.validateVerifier("test-clientId", null, "https://test-redirectUri"); + } + + @Test + public void validateVerifierSucceedsWhenResponseUriEmptyAndRedirectUriMatches() throws ApiNotAccessibleException, IOException { + verifiersService.validateVerifier("test-clientId", "", "https://test-redirectUri"); + } + + @Test + public void validateVerifierThrowsInvalidRedirectUriWhenRedirectDoesNotMatchRegistered() throws ApiNotAccessibleException, IOException { + String expectedMsg = "invalid_redirect_uri --> The requested redirect uri doesn’t match."; + + InvalidVerifierException ex = assertThrows(InvalidVerifierException.class, + () -> verifiersService.validateVerifier("test-clientId", null, "https://other-app.example/callback")); + + assertEquals(expectedMsg, ex.getMessage()); + } + + @Test + public void validateVerifierThrowsInvalidRedirectUriWhenRedirectUriIsNotAValidUrl() throws ApiNotAccessibleException, IOException { + String expectedMsg = "invalid_redirect_uri --> The requested redirect uri doesn’t match."; + + InvalidVerifierException ex = assertThrows(InvalidVerifierException.class, + () -> verifiersService.validateVerifier("test-clientId", null, "not-a-valid-url")); + + assertEquals(expectedMsg, ex.getMessage()); + } + + @Test + public void validateVerifierThrowsInvalidRedirectUriWhenRedirectUriNull() throws ApiNotAccessibleException, IOException { + String expectedMsg = "invalid_redirect_uri --> The requested redirect uri doesn’t match."; + + InvalidVerifierException ex = assertThrows(InvalidVerifierException.class, + () -> verifiersService.validateVerifier("test-clientId", null, null)); + + assertEquals(expectedMsg, ex.getMessage()); + } + + @Test + public void validateVerifierThrowsInvalidClientWhenClientNotFoundAndResponseUriSkippedForRedirectValidation() throws ApiNotAccessibleException, IOException { + String expectedMsg = "invalid_client --> The requested client doesn’t match."; + + InvalidVerifierException ex = assertThrows(InvalidVerifierException.class, + () -> verifiersService.validateVerifier("unknown-client-id", null, "https://test-redirectUri")); + + assertEquals(expectedMsg, ex.getMessage()); + } + + @Test + public void validateVerifierThrowsInvalidRedirectUriWhenRegisteredRedirectUriIsNotAValidUrl() throws Exception { + VerifierDTO verifier = VerifierDTO.builder() + .clientId("client-with-bad-registered-redirect") + .redirectUris(Collections.singletonList("not-a-valid-registered-redirect-uri")) + .responseUris(Collections.singletonList("https://cb.example/resp")) + .build(); + VerifiersDTO dto = VerifiersDTO.builder().verifiers(Collections.singletonList(verifier)).build(); + String json = new ObjectMapper().writeValueAsString(dto); + when(utilities.getTrustedVerifiersJsonValue()).thenReturn(json); + when(objectMapper.readValue(anyString(), eq(VerifiersDTO.class))).thenReturn(dto); + + String expectedMsg = "invalid_redirect_uri --> The requested redirect uri doesn’t match."; + + InvalidVerifierException ex = assertThrows(InvalidVerifierException.class, + () -> verifiersService.validateVerifier("client-with-bad-registered-redirect", null, + "https://valid-redirect.example/callback")); + + assertEquals(expectedMsg, ex.getMessage()); + } + + @Test + public void validateVerifierThrowsInvalidRedirectUriWhenRegisteredRedirectValidButPathDoesNotMatch() throws ApiNotAccessibleException, IOException { + String expectedMsg = "invalid_redirect_uri --> The requested redirect uri doesn’t match."; + + InvalidVerifierException ex = assertThrows(InvalidVerifierException.class, + () -> verifiersService.validateVerifier("test-clientId", null, + "https://test-redirectUri/extra-path")); + + assertEquals(expectedMsg, ex.getMessage()); } @Test(expected = InvalidVerifierException.class) public void validateTrustedVerifiersAndThrowInvalidVerifierExceptionWhenClientIdIsIncorrect() throws ApiNotAccessibleException, IOException { PresentationRequestDTO presentationRequestDTO = PresentationRequestDTO.builder().clientId("test-clientId2").responseUri("https://test-responseUri").build(); - verifiersService.validateVerifier(presentationRequestDTO.getClientId(), presentationRequestDTO.getResponseUri()); + verifiersService.validateVerifier(presentationRequestDTO.getClientId(), presentationRequestDTO.getResponseUri(), presentationRequestDTO.getRedirectUri()); } @Test public void validateTrustedVerifiersAndThrowInvalidVerifiersExceptionForAInvalidClientId() throws ApiNotAccessibleException, IOException { PresentationRequestDTO presentationRequestDTO = PresentationRequestDTO.builder().clientId("test-clientId2").responseUri("https://test-responseUri").build(); String expectedExceptionMsg = "invalid_client --> The requested client doesn’t match."; - InvalidVerifierException actualException = assertThrows(InvalidVerifierException.class, () -> verifiersService.validateVerifier(presentationRequestDTO.getClientId(), presentationRequestDTO.getResponseUri())); + InvalidVerifierException actualException = assertThrows(InvalidVerifierException.class, () -> verifiersService.validateVerifier(presentationRequestDTO.getClientId(), presentationRequestDTO.getResponseUri(), presentationRequestDTO.getRedirectUri())); assertEquals(expectedExceptionMsg, actualException.getMessage()); } @@ -122,7 +213,7 @@ public void validateTrustedVerifiersAndThrowInvalidVerifiersExceptionWhenClientI PresentationRequestDTO presentationRequestDTO = PresentationRequestDTO.builder().clientId("test-clientId").responseUri("https://test-reponseUri/invalid-uri").build(); String expectedExceptionMsg = "invalid_response_uri --> The requested response uri doesn’t match."; - InvalidVerifierException actualException = assertThrows(InvalidVerifierException.class, () -> verifiersService.validateVerifier(presentationRequestDTO.getClientId(), presentationRequestDTO.getResponseUri())); + InvalidVerifierException actualException = assertThrows(InvalidVerifierException.class, () -> verifiersService.validateVerifier(presentationRequestDTO.getClientId(), presentationRequestDTO.getResponseUri(), presentationRequestDTO.getRedirectUri())); assertEquals(expectedExceptionMsg, actualException.getMessage()); } @@ -132,7 +223,7 @@ public void validateVerifierThrowsExceptionWhenResponseUriIsInvalidUrl() throws String expectedExceptionMsg = "invalid_response_uri --> The requested response uri doesn’t match."; InvalidVerifierException actualException = assertThrows(InvalidVerifierException.class, - () -> verifiersService.validateVerifier("test-clientId", "not-a-valid-url")); + () -> verifiersService.validateVerifier("test-clientId", "not-a-valid-url", "")); assertEquals(expectedExceptionMsg, actualException.getMessage()); } @@ -153,7 +244,7 @@ public void validateVerifierThrowsExceptionWhenRegisteredResponseUriIsInvalidUrl String expectedExceptionMsg = "invalid_response_uri --> The requested response uri doesn’t match."; InvalidVerifierException actualException = assertThrows(InvalidVerifierException.class, - () -> verifiersService.validateVerifier("test-clientId", "https://test-responseUri")); + () -> verifiersService.validateVerifier("test-clientId", "https://test-responseUri", "")); assertEquals(expectedExceptionMsg, actualException.getMessage()); } From 3ee725949993b2eb209792ad57fa7156d19dfe51 Mon Sep 17 00:00:00 2001 From: Durgesh Konga Date: Mon, 6 Apr 2026 11:35:19 +0530 Subject: [PATCH 841/860] [INJIWEB-1435] - Add fallback logic to use Credential issuer host as authorization server (#1058) Signed-off-by: Durgesh Konga --- .../service/impl/IssuersServiceImpl.java | 9 +++- .../mimoto/service/IssuersServiceTest.java | 45 +++++++++++++++++++ 2 files changed, 52 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index ae6503f49..30806d550 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -92,8 +92,13 @@ public IssuersDTO getAllIssuers() throws ApiNotAccessibleException, IOException @Override public CredentialIssuerConfiguration getIssuerConfiguration(String issuerId) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { - CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = issuersConfigUtil.getIssuerWellknown(getIssuerDetails(issuerId).getCredential_issuer_host()); - AuthorizationServerWellKnownResponse authorizationServerWellKnownResponse = issuersConfigUtil.getAuthServerWellknown(credentialIssuerWellKnownResponse.getAuthorizationServers().get(0)); + String credentialIssuerHost = getIssuerDetails(issuerId).getCredential_issuer_host(); + CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = issuersConfigUtil.getIssuerWellknown(credentialIssuerHost); + + if(credentialIssuerWellKnownResponse.getAuthorizationServers() == null || credentialIssuerWellKnownResponse.getAuthorizationServers().isEmpty()) { + credentialIssuerWellKnownResponse.setAuthorizationServers(List.of(credentialIssuerHost)); + } + AuthorizationServerWellKnownResponse authorizationServerWellKnownResponse = issuersConfigUtil.getAuthServerWellknown(credentialIssuerWellKnownResponse.getAuthorizationServers().getFirst()); return new CredentialIssuerConfiguration( credentialIssuerWellKnownResponse.getCredentialIssuer(), diff --git a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java index 6f33ac7b2..bbafb9a13 100644 --- a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java @@ -27,6 +27,7 @@ import java.io.IOException; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Map; @@ -173,6 +174,50 @@ public void shouldReturnProperCredentialConfigurationsForTheRequestedIssuer() th assertEquals(expectedCredentialIssuerConfiguration, actualCredentialIssuerConfiguration); } + @Test + public void shouldSetAuthorizationServersToCredentialIssuerHostWhenNull() throws AuthorizationServerWellknownResponseException, ApiNotAccessibleException, IOException, InvalidWellknownResponseException { + expectedCredentialIssuerWellKnownResponse.setAuthorizationServers(null); + Mockito.when(issuersConfigUtil.getIssuerWellknown(credentialIssuerHostUrl)) + .thenReturn(expectedCredentialIssuerWellKnownResponse); + Mockito.when(issuersConfigUtil.getAuthServerWellknown(credentialIssuerHostUrl)) + .thenReturn(expectedCredentialIssuerConfiguration.getAuthorizationServerWellKnownResponse()); + + CredentialIssuerConfiguration actual = issuersService.getIssuerConfiguration(issuerId); + + CredentialIssuerConfiguration expected = new CredentialIssuerConfiguration( + expectedCredentialIssuerWellKnownResponse.getCredentialIssuer(), + List.of(credentialIssuerHostUrl), + expectedCredentialIssuerWellKnownResponse.getCredentialEndPoint(), + expectedCredentialIssuerWellKnownResponse.getCredentialConfigurationsSupported(), + expectedCredentialIssuerConfiguration.getAuthorizationServerWellKnownResponse() + ); + assertEquals(expected, actual); + verify(issuersConfigUtil, times(1)).getAuthServerWellknown(credentialIssuerHostUrl); + verify(issuersConfigUtil, never()).getAuthServerWellknown(authServerWellknownUrl); + } + + @Test + public void shouldSetAuthorizationServersToCredentialIssuerHostWhenEmpty() throws AuthorizationServerWellknownResponseException, ApiNotAccessibleException, IOException, InvalidWellknownResponseException { + expectedCredentialIssuerWellKnownResponse.setAuthorizationServers(Collections.emptyList()); + Mockito.when(issuersConfigUtil.getIssuerWellknown(credentialIssuerHostUrl)) + .thenReturn(expectedCredentialIssuerWellKnownResponse); + Mockito.when(issuersConfigUtil.getAuthServerWellknown(credentialIssuerHostUrl)) + .thenReturn(expectedCredentialIssuerConfiguration.getAuthorizationServerWellKnownResponse()); + + CredentialIssuerConfiguration actual = issuersService.getIssuerConfiguration(issuerId); + + CredentialIssuerConfiguration expected = new CredentialIssuerConfiguration( + expectedCredentialIssuerWellKnownResponse.getCredentialIssuer(), + List.of(credentialIssuerHostUrl), + expectedCredentialIssuerWellKnownResponse.getCredentialEndPoint(), + expectedCredentialIssuerWellKnownResponse.getCredentialConfigurationsSupported(), + expectedCredentialIssuerConfiguration.getAuthorizationServerWellKnownResponse() + ); + assertEquals(expected, actual); + verify(issuersConfigUtil, times(1)).getAuthServerWellknown(credentialIssuerHostUrl); + verify(issuersConfigUtil, never()).getAuthServerWellknown(authServerWellknownUrl); + } + @Test public void issuersConfigShouldThrowExceptionIfAnyErrorOccurredWhileFetchingIssuersWellknown() { Mockito.when(utilities.getIssuersConfigJsonValue()).thenReturn(null); From 840bc34e387e7990a945cd6535325a0f78d237ad Mon Sep 17 00:00:00 2001 From: Durgesh Konga Date: Mon, 6 Apr 2026 15:11:29 +0530 Subject: [PATCH 842/860] [INJIWEB-1891] - Removed unused config from issuers config (#1066) * [INJIWEB-1891] - Removed unused config from issuers config Signed-off-by: Durgesh Konga * [INJIWEB-1891] - Replace Config with Mock ID usecase Signed-off-by: Durgesh Konga * [INJIWEB-1891] - Update Token endpoint Signed-off-by: Durgesh Konga * [INJIWEB-1891] - Update Token endpoint in local setup Signed-off-by: Durgesh Konga --------- Signed-off-by: Durgesh Konga --- .../config/mimoto-issuers-config.json | 23 ++++++++----------- src/main/resources/mimoto-issuers-config.json | 23 ++++++++----------- 2 files changed, 18 insertions(+), 28 deletions(-) diff --git a/docker-compose/config/mimoto-issuers-config.json b/docker-compose/config/mimoto-issuers-config.json index 9a0221061..5654177b1 100644 --- a/docker-compose/config/mimoto-issuers-config.json +++ b/docker-compose/config/mimoto-issuers-config.json @@ -1,30 +1,25 @@ { "issuers": [ { - "issuer_id": "StayProtected", - "credential_issuer": "StayProtected", + "issuer_id": "Mock", "display": [ { - "name": "StayProtected Insurance", + "name": "Mock Identity", "logo": { - "url": "https://raw.githubusercontent.com/tw-mosip/file-server/master/StayProtectedInsurance.png", - "alt_text": "a square logo of a Sunbird" + "url": "https://inji.github.io/inji-config/logos/mosipid-logo.png", + "alt_text": "mosip-logo" }, - "language": "en", - "title": "Download StayProtected Insurance Credentials", - "description": "Download insurance credential" + "title": "Mock Identity", + "description": "Download Mock Identity Credential", + "language": "en" } ], "protocol": "OpenId4VCI", "client_id": "wallet-demo", "client_alias": "wallet-demo-client", - "wellknown_endpoint": "https://injicertify-insurance.collab.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer", - "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", - "authorization_audience": "https://esignet-insurance.collab.mosip.net/v1/esignet/oauth/v2/token", - "token_endpoint": "https://localhost:8099/v1/mimoto/get-token/StayProtected", - "proxy_token_endpoint": "https://esignet-insurance.collab.mosip.net/v1/esignet/oauth/v2/token", + "token_endpoint": "https://localhost:8099/v1/mimoto/get-token/Mock", "qr_code_type": "OnlineSharing", - "credential_issuer_host": "https://injicertify-insurance.collab.mosip.net", + "credential_issuer_host": "https://injicertify-mock.collab.mosip.net", "enabled": "true" } ] diff --git a/src/main/resources/mimoto-issuers-config.json b/src/main/resources/mimoto-issuers-config.json index 9a0221061..5654177b1 100644 --- a/src/main/resources/mimoto-issuers-config.json +++ b/src/main/resources/mimoto-issuers-config.json @@ -1,30 +1,25 @@ { "issuers": [ { - "issuer_id": "StayProtected", - "credential_issuer": "StayProtected", + "issuer_id": "Mock", "display": [ { - "name": "StayProtected Insurance", + "name": "Mock Identity", "logo": { - "url": "https://raw.githubusercontent.com/tw-mosip/file-server/master/StayProtectedInsurance.png", - "alt_text": "a square logo of a Sunbird" + "url": "https://inji.github.io/inji-config/logos/mosipid-logo.png", + "alt_text": "mosip-logo" }, - "language": "en", - "title": "Download StayProtected Insurance Credentials", - "description": "Download insurance credential" + "title": "Mock Identity", + "description": "Download Mock Identity Credential", + "language": "en" } ], "protocol": "OpenId4VCI", "client_id": "wallet-demo", "client_alias": "wallet-demo-client", - "wellknown_endpoint": "https://injicertify-insurance.collab.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer", - "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", - "authorization_audience": "https://esignet-insurance.collab.mosip.net/v1/esignet/oauth/v2/token", - "token_endpoint": "https://localhost:8099/v1/mimoto/get-token/StayProtected", - "proxy_token_endpoint": "https://esignet-insurance.collab.mosip.net/v1/esignet/oauth/v2/token", + "token_endpoint": "https://localhost:8099/v1/mimoto/get-token/Mock", "qr_code_type": "OnlineSharing", - "credential_issuer_host": "https://injicertify-insurance.collab.mosip.net", + "credential_issuer_host": "https://injicertify-mock.collab.mosip.net", "enabled": "true" } ] From eb44077840237db941c72a15b4b090885a26a84a Mon Sep 17 00:00:00 2001 From: Durgesh Konga Date: Mon, 6 Apr 2026 19:08:35 +0530 Subject: [PATCH 843/860] [INJIWEB-1883] - Update library versions to inji in pom xml (#1067) Signed-off-by: Durgesh Konga --- pom.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index 9f3bfc862..5571f30b0 100644 --- a/pom.xml +++ b/pom.xml @@ -137,14 +137,14 @@ 20231002 - io.mosip + io.inji vcverifier-jar - 1.6.0 + 1.7.0 - io.mosip + io.inji inji-openid4vp-jar - 0.6.0 + 0.7.0 io.micrometer @@ -502,7 +502,7 @@ io.mosip.kernel kernel-keymanager-service - 1.3.0 + 1.4.0 lib From b60f2605c8e7b5399a771393cbcd01f7dccf00bc Mon Sep 17 00:00:00 2001 From: Rudhhi Shah Date: Tue, 7 Apr 2026 12:12:39 +0530 Subject: [PATCH 844/860] [INJIWEB-1891] Derive token_endpoint field internally in mimoto (#1065) * [INJIWEB-1891] Added logic to derive token_endpoint field internally in mimoto Signed-off-by: Rudhhi Shah * [INJIWEB-1891] Addressed review comments and amended the readMe Signed-off-by: Rudhhi Shah * [INJIWEB-1891] Removed extra values from mimoto-issuer-config json Signed-off-by: Rudhhi Shah --------- Signed-off-by: Rudhhi Shah --- .../config/mimoto-issuers-config.json | 1 - docs/IssuersV2EndpointMigration.md | 33 ++++--- .../config/IssuersValidationConfig.java | 6 -- .../java/io/mosip/mimoto/dto/IssuerDTO.java | 1 - .../java/io/mosip/mimoto/dto/IssuerV2DTO.java | 1 - .../service/impl/IssuersServiceImpl.java | 23 ++++- src/main/resources/mimoto-issuers-config.json | 1 - .../config/IssuersValidationConfigTest.java | 4 +- .../mimoto/service/IssuersServiceTest.java | 89 ++++++++++++++++++- 9 files changed, 131 insertions(+), 28 deletions(-) diff --git a/docker-compose/config/mimoto-issuers-config.json b/docker-compose/config/mimoto-issuers-config.json index 5654177b1..dd5e611c1 100644 --- a/docker-compose/config/mimoto-issuers-config.json +++ b/docker-compose/config/mimoto-issuers-config.json @@ -17,7 +17,6 @@ "protocol": "OpenId4VCI", "client_id": "wallet-demo", "client_alias": "wallet-demo-client", - "token_endpoint": "https://localhost:8099/v1/mimoto/get-token/Mock", "qr_code_type": "OnlineSharing", "credential_issuer_host": "https://injicertify-mock.collab.mosip.net", "enabled": "true" diff --git a/docs/IssuersV2EndpointMigration.md b/docs/IssuersV2EndpointMigration.md index 01b769b53..38bd7510a 100644 --- a/docs/IssuersV2EndpointMigration.md +++ b/docs/IssuersV2EndpointMigration.md @@ -18,10 +18,14 @@ The V2 issuer API provides a minimal, configuration-only view of issuers. - **Configuration-only response** Response data comes only from **mimoto-issuers-config.json**. No remote well-known calls are made. Fields returned include: `issuer_id`, `protocol`, `display`, `client_id`, `token_endpoint`, `client_alias`, `qr_code_type`, `enabled`, `credential_issuer_host`. +- **Runtime token_endpoint generation** + - The application will compute and set `token_endpoint` at runtime for every issuer response (both V1 and V2). The computed value is: `${mosip.api.public.url}${server.servlet.context-path}/get-token/{issuerId}`. + - This computed `token_endpoint` will overwrite whatever value (if any) is present in the config file. In other words, `token_endpoint` in `mimoto-issuers-config.json` is optional and, if present, will be ignored in favor of the generated value. + - **Same config, both APIs** The same config file is used for: - - **V1** (`/issuers`, `/issuers/{issuer-id}`): returns an enriched response that may include well-known–derived fields (e.g. `wellknown_endpoint`, `authorization_audience`, `proxy_token_endpoint`). V1 may call each issuer’s well-known endpoint. - - **V2** (`/v2/issuers`, `/v2/issuers/{issuer-id}`): returns only the issuer entries from config; no well-known fetch. + - **V1** (`/issuers`, `/issuers/{issuer-id}`): returns an enriched response that may include well-known–derived fields (e.g. `wellknown_endpoint`, `authorization_audience`, `proxy_token_endpoint`). V1 may call each issuer’s well-known endpoint. Note: the `token_endpoint` in the V1 response will also be the generated value (overwritten at runtime). + - **V2** (`/v2/issuers`, `/v2/issuers/{issuer-id}`): returns only the issuer entries from config; no well-known fetch. `token_endpoint` is still present in the V2 response but is computed by the service at runtime. - **Error handling** V2 returns `400` when the config is not accessible and `404` for an invalid `issuer-id` on the single-issuer endpoint. @@ -64,6 +68,8 @@ The file must be valid JSON with a top-level key **`issuers`**, which is an arra } ``` +> Note: `token_endpoint` may be present in config for documentation but it is optional — the service will compute and overwrite it at runtime. + ### Required fields (all schemas) Every issuer entry must include: @@ -74,12 +80,13 @@ Every issuer entry must include: | `protocol` | string | `"OTP"` or `"OpenId4VCI"` | | `display` | array | At least one display object with `name`, `logo` (with `url`, `alt_text`), `title`, `description`, `language` | | `client_id` | string | OIDC client ID | -| `token_endpoint` | string | Valid URL for the token endpoint | | `client_alias` | string | Client alias in keyStore | | `qr_code_type` | string | `"OnlineSharing"`, `"EmbeddedVC"`, or `"None"` | | `enabled` | string | `"true"` or `"false"` | | `credential_issuer_host` | string | Valid URL of the credential issuer host | +`token_endpoint` is optional in the issuer entry and will be generated by the application at runtime. + Validation runs at startup (e.g. via `IssuersValidationConfig`). Invalid or missing required fields will cause startup failure with a clear message. --- @@ -92,7 +99,7 @@ Validation runs at startup (e.g. via `IssuersValidationConfig`). Invalid or miss Only the **required** fields above are needed. This is enough for **V2** and for **V1** to resolve well-known at runtime from `credential_issuer_host`: -- `issuer_id`, `protocol`, `display`, `client_id`, `token_endpoint`, `client_alias`, `qr_code_type`, `enabled`, `credential_issuer_host` +- `issuer_id`, `protocol`, `display`, `client_id`, `client_alias`, `qr_code_type`, `enabled`, `credential_issuer_host` (note that `token_endpoint` is optional and will be generated by the application at runtime) Example (minimal): @@ -122,6 +129,8 @@ Example (minimal): } ``` +> The runtime `token_endpoint` for the above issuer will be constructed as `${mosip.api.public.url}${server.servlet.context-path}/get-token/StayProtected` by the application and returned in both V1 and V2 responses. + ### Old (extended) schema You can still use the **extended** schema that includes optional fields previously used by the UI or tooling. These are **not** required for V2 or for V1; if present, they may be used or ignored depending on the endpoint: @@ -157,8 +166,8 @@ Example (extended): } ``` -- **V2** ignores these extra fields and returns only the core issuer fields from config. -- **V1** returns these fields as-is from the config (non-null when present); +- **V2** ignores these extra fields and returns only the core issuer fields from config. the computed `token_endpoint` is included in the response. +- **V1** returns these fields as-is from the config (non-null when present), but its `token_endpoint` is also set/overwritten by the service at runtime. You can **mix** minimal and extended entries in the same `issuers` array; both schemas are valid. @@ -166,11 +175,11 @@ You can **mix** minimal and extended entries in the same `issuers` array; both s ## Summary -| Topic | Summary | -|-------|---------| -| **V2 API** | `GET /v2/issuers` and `GET /v2/issuers/{issuer-id}`; config-only.| -| **Config file** | Set `mosip.openid.issuers` (e.g. `mimoto-issuers-config.json`); structure is `{ "issuers": [ ... ] }`. | -| **Required fields** | `issuer_id`, `protocol`, `display`, `client_id`, `token_endpoint`, `client_alias`, `qr_code_type`, `enabled`, `credential_issuer_host`. | -| **Schema compatibility** | Both **old (extended)** and **new (minimal)** issuer schemas work; extra fields are allowed and ignored by V2. | +| Topic | Summary | +|-------|------------------------------------------------------------------------------------------------------------------------------------------| +| **V2 API** | `GET /v2/issuers` and `GET /v2/issuers/{issuer-id}`; config-only responses but `token_endpoint` is computed and injected at runtime. | +| **Config file** | Set `mosip.openid.issuers` (e.g. `mimoto-issuers-config.json`); structure is `{ "issuers": [ ... ] }`. | +| **Required fields** | `issuer_id`, `protocol`, `display`, `client_id`, `client_alias`, `qr_code_type`, `enabled`, `credential_issuer_host`.`token_endpoint` is optional in config and computed/injected at runtime. | +| **Schema compatibility** | Both **old (extended)** and **new (minimal)** issuer schemas work; extra fields are allowed and ignored by V2. | For OpenAPI details, see `docs/api-documentation-openapi.json` (paths `/v2/issuers` and `/v2/issuers/{issuer-id}`). For Postman, use the **Issuers** folder requests: **get Issuers List (V2)**, **get Issuer by ID (V2)**, and **Search Issuers List (V2)**. diff --git a/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java b/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java index bba26e11a..b85fa695e 100644 --- a/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java +++ b/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java @@ -62,7 +62,6 @@ public void run(ApplicationArguments args) throws ApiNotAccessibleException, IOE } - String[] tokenEndpointArray = issuerDTO.getToken_endpoint().split("/"); Set currentIssuers = credentialIssuers.get(); if (!currentIssuers.add(issuerId)) { @@ -70,11 +69,6 @@ public void run(ApplicationArguments args) throws ApiNotAccessibleException, IOE issuerErrors.append("- Duplicate value found for the issuerId. More than one issuer is having the same issuerId").append("\n"); } - if (!tokenEndpointArray[tokenEndpointArray.length - 1].equals(issuerId)) { - issuerHasErrors = true; - issuerErrors.append("- TokenEndpoint does not match with the credential issuerId").append("\n"); - } - if (issuerHasErrors) { allErrors.add(issuerErrors.toString()); } diff --git a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java index 4605c0579..0342096db 100644 --- a/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/IssuerDTO.java @@ -40,7 +40,6 @@ public class IssuerDTO { String authorization_audience; @URL - @NotBlank @Schema(description = "Mimoto Token Endpoint Fetching the Token From Authorization Server with Client Assertion") String token_endpoint; diff --git a/src/main/java/io/mosip/mimoto/dto/IssuerV2DTO.java b/src/main/java/io/mosip/mimoto/dto/IssuerV2DTO.java index 6d6132a4b..107ff47e9 100644 --- a/src/main/java/io/mosip/mimoto/dto/IssuerV2DTO.java +++ b/src/main/java/io/mosip/mimoto/dto/IssuerV2DTO.java @@ -39,7 +39,6 @@ public class IssuerV2DTO { private String clientAlias; @URL - @NotBlank @JsonProperty("token_endpoint") @Schema(description = "Mimoto Token Endpoint Fetching the Token From Authorization Server with Client Assertion") private String tokenEndpoint; diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index 30806d550..9320f6210 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -16,6 +16,7 @@ import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; +import org.springframework.beans.factory.annotation.Value; import java.io.IOException; import java.util.List; @@ -33,10 +34,20 @@ public class IssuersServiceImpl implements IssuersService { private final IssuerConfigUtil issuersConfigUtil; - public IssuersServiceImpl(Utilities utilities, ObjectMapper objectMapper, IssuerConfigUtil issuersConfigUtil) { + private final String mosipApiPublicUrl; + + private final String contextPath; + + private static final String GET_TOKEN_PATH = "/get-token/"; + + public IssuersServiceImpl(Utilities utilities, ObjectMapper objectMapper, IssuerConfigUtil issuersConfigUtil, + @Value("${mosip.api.public.url}") String mosipApiPublicUrl, + @Value("${server.servlet.context-path}") String contextPath) { this.utilities = utilities; this.objectMapper = objectMapper; this.issuersConfigUtil = issuersConfigUtil; + this.mosipApiPublicUrl = mosipApiPublicUrl; + this.contextPath = contextPath; } @Override @@ -87,6 +98,16 @@ public IssuersDTO getAllIssuers() throws ApiNotAccessibleException, IOException issuersDTO = objectMapper.readValue(issuersConfigJsonValue, IssuersDTO.class); + if (issuersDTO != null && issuersDTO.getIssuers() != null) { + String baseTokenEndpoint = new StringBuilder() + .append(mosipApiPublicUrl).append(contextPath).append(GET_TOKEN_PATH) + .toString(); + + issuersDTO.getIssuers().stream() + .filter(java.util.Objects::nonNull) + .forEach(issuer -> issuer.setToken_endpoint(baseTokenEndpoint + issuer.getIssuer_id())); + } + return issuersDTO; } diff --git a/src/main/resources/mimoto-issuers-config.json b/src/main/resources/mimoto-issuers-config.json index 5654177b1..dd5e611c1 100644 --- a/src/main/resources/mimoto-issuers-config.json +++ b/src/main/resources/mimoto-issuers-config.json @@ -17,7 +17,6 @@ "protocol": "OpenId4VCI", "client_id": "wallet-demo", "client_alias": "wallet-demo-client", - "token_endpoint": "https://localhost:8099/v1/mimoto/get-token/Mock", "qr_code_type": "OnlineSharing", "credential_issuer_host": "https://injicertify-mock.collab.mosip.net", "enabled": "true" diff --git a/src/test/java/io/mosip/mimoto/config/IssuersValidationConfigTest.java b/src/test/java/io/mosip/mimoto/config/IssuersValidationConfigTest.java index 312b65565..009c3752b 100644 --- a/src/test/java/io/mosip/mimoto/config/IssuersValidationConfigTest.java +++ b/src/test/java/io/mosip/mimoto/config/IssuersValidationConfigTest.java @@ -81,7 +81,7 @@ public void shouldThrowExceptionIfTheFieldValuesOfIssuerAreNotSatisfyingNotBlank issuersValidationConfig.run(mock(ApplicationArguments.class)); } catch (Exception exception) { - String expectedErrorMsg = "\n\nValidation failed in Mimoto-issuers-config.json:\nErrors for issuer at index: 0 with issuerId - \n- client_alias must not be blank\n- client_id must not be blank\n- credential_issuer_host must not be blank\n- display[0].description must not be blank\n- display[0].language must not be blank\n- display[0].logo.url must be a valid URL\n- display[0].name must not be blank\n- display[0].title must not be blank\n- enabled must not be blank\n- issuer_id must not be blank\n- protocol must not be blank\n- token_endpoint must not be blank\nErrors for issuer at index: 1 with issuerId - \n- client_alias must not be blank\n- client_id must not be blank\n- credential_issuer_host must not be blank\n- display[0].description must not be blank\n- display[0].language must not be blank\n- display[0].logo.url must be a valid URL\n- display[0].name must not be blank\n- display[0].title must not be blank\n- enabled must not be blank\n- issuer_id must not be blank\n- protocol must not be blank\n- token_endpoint must not be blank\n- Duplicate value found for the issuerId. More than one issuer is having the same issuerId\n"; + String expectedErrorMsg = "\n\nValidation failed in Mimoto-issuers-config.json:\nErrors for issuer at index: 0 with issuerId - \n- client_alias must not be blank\n- client_id must not be blank\n- credential_issuer_host must not be blank\n- display[0].description must not be blank\n- display[0].language must not be blank\n- display[0].logo.url must be a valid URL\n- display[0].name must not be blank\n- display[0].title must not be blank\n- enabled must not be blank\n- issuer_id must not be blank\n- protocol must not be blank\nErrors for issuer at index: 1 with issuerId - \n- client_alias must not be blank\n- client_id must not be blank\n- credential_issuer_host must not be blank\n- display[0].description must not be blank\n- display[0].language must not be blank\n- display[0].logo.url must be a valid URL\n- display[0].name must not be blank\n- display[0].title must not be blank\n- enabled must not be blank\n- issuer_id must not be blank\n- protocol must not be blank\n- Duplicate value found for the issuerId. More than one issuer is having the same issuerId\n"; String actualErrorMsg = exception.getMessage(); assertEquals(expectedErrorMsg, actualErrorMsg); @@ -96,7 +96,7 @@ public void shouldThrowExceptionIfTheFieldValuesOfIssuerAreNotSatisfyingUrlAnnot issuersValidationConfig.run(mock(ApplicationArguments.class)); } catch (Exception exception) { - String expectedErrorMsg = "\n\nValidation failed in Mimoto-issuers-config.json:\nErrors for issuer at index: 0 with issuerId - Issuer1id\n- credential_issuer_host must be a valid URL\n- token_endpoint must be a valid URL\n- TokenEndpoint does not match with the credential issuerId\nErrors for issuer at index: 1 with issuerId - Issuer2id\n- credential_issuer_host must be a valid URL\n- token_endpoint must be a valid URL\n- TokenEndpoint does not match with the credential issuerId\n"; + String expectedErrorMsg = "\n\nValidation failed in Mimoto-issuers-config.json:\nErrors for issuer at index: 0 with issuerId - Issuer1id\n- credential_issuer_host must be a valid URL\n- token_endpoint must be a valid URL\nErrors for issuer at index: 1 with issuerId - Issuer2id\n- credential_issuer_host must be a valid URL\n- token_endpoint must be a valid URL\n"; String actualErrorMsg = exception.getMessage(); assertEquals(expectedErrorMsg, actualErrorMsg); diff --git a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java index bbafb9a13..d12bec337 100644 --- a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java @@ -57,6 +57,9 @@ public class IssuersServiceTest { CredentialIssuerWellKnownResponse expectedCredentialIssuerWellKnownResponse; + private final String publicUrl = "https://dev"; + private final String context = ""; + @Before public void setUp() throws Exception { issuerWellKnownUrl = "https://issuer.env.net/.well-known/openid-credential-issuer"; @@ -76,6 +79,8 @@ public void setUp() throws Exception { expectedCredentialIssuerConfiguration = getCredentialIssuerConfigurationResponseDto(issuerId, "CredentialType1", List.of()); Mockito.when(issuersConfigUtil.getAuthServerWellknown(authServerWellknownUrl)).thenReturn(expectedCredentialIssuerConfiguration.getAuthorizationServerWellKnownResponse()); + + issuersService = new IssuersServiceImpl(utilities, objectMapper, issuersConfigUtil, publicUrl, context); } @Test @@ -86,6 +91,7 @@ public void shouldReturnAllIssuersWhenSearchValueIsNull() throws ApiNotAccessibl Mockito.when(objectMapper.readValue(issuersConfigJsonValue, IssuersDTO.class)).thenReturn(issuers); IssuersDTO expectedIssuers = new IssuersDTO(); List issuers = new ArrayList<>(List.of(getIssuerConfigDTO("Issuer1"), getIssuerConfigDTO("Issuer2"))); + issuers.forEach(i -> i.setToken_endpoint(publicUrl + context + "/get-token/" + i.getIssuer_id())); expectedIssuers.setIssuers(issuers); IssuersDTO allIssuers = issuersService.getIssuers(null); @@ -101,6 +107,7 @@ public void shouldReturnMatchingIssuersWhenSearchValuePatternMatchesWithIssuerNa Mockito.when(objectMapper.readValue(issuersConfigJsonValue, IssuersDTO.class)).thenReturn(issuers); IssuersDTO expectedFilteredIssuers = new IssuersDTO(); List filteredIssuersList = new ArrayList<>(List.of(getIssuerConfigDTO("Issuer1"))); + filteredIssuersList.forEach(i -> i.setToken_endpoint(publicUrl + context + "/get-token/" + i.getIssuer_id())); expectedFilteredIssuers.setIssuers(filteredIssuersList); IssuersDTO filteredIssuers = issuersService.getIssuers("Issuer1"); @@ -118,6 +125,7 @@ public void shouldThrowApiNotAccessibleExceptionWhenIssuersJsonStringIsNullForGe @Test public void shouldReturnIssuerDataAndConfigForTheIssuerIdIfExist() throws ApiNotAccessibleException, IOException, InvalidIssuerIdException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { IssuerDTO expectedIssuer = getIssuerConfigDTO("Issuer3"); + expectedIssuer.setToken_endpoint(publicUrl + context + "/get-token/" + expectedIssuer.getIssuer_id()); IssuerDTO issuer = issuersService.getIssuerDetails("Issuer3id"); @@ -128,6 +136,7 @@ public void shouldReturnIssuerDataAndConfigForTheIssuerIdIfExist() throws ApiNot public void shouldReturnIssuerDataAndConfigForAllIssuer() throws ApiNotAccessibleException, IOException { IssuersDTO expectedIssuers = new IssuersDTO(); List issuers = new ArrayList<>(List.of(getIssuerConfigDTO("Issuer3"), getIssuerConfigDTO("Issuer4"))); + issuers.forEach(i -> i.setToken_endpoint(publicUrl + context + "/get-token/" + i.getIssuer_id())); expectedIssuers.setIssuers(issuers); IssuersDTO issuersDTO = issuersService.getAllIssuers(); @@ -158,6 +167,7 @@ public void shouldReturnOnlyEnabledIssuers() throws IOException, ApiNotAccessibl Mockito.when(utilities.getIssuersConfigJsonValue()).thenReturn(issuersConfigJsonValue); Mockito.when(objectMapper.readValue(issuersConfigJsonValue, IssuersDTO.class)).thenReturn(issuers); IssuersDTO expectedIssuersDTO = new IssuersDTO(); + enabledIssuer.setToken_endpoint(publicUrl + context + "/get-token/" + enabledIssuer.getIssuer_id()); expectedIssuersDTO.setIssuers(List.of(enabledIssuer)); IssuersDTO actualIssuersDTO = issuersService.getIssuers(""); @@ -249,6 +259,7 @@ public void shouldReturnIssuerConfigForValidIssuerIdAndCredentialType() throws A String issuerId = "Issuer3id"; String credentialType = "CredentialType1"; IssuerDTO expectedIssuerDTO = getIssuerConfigDTO("Issuer3"); + expectedIssuerDTO.setToken_endpoint(publicUrl + context + "/get-token/" + expectedIssuerDTO.getIssuer_id()); CredentialIssuerWellKnownResponse wellKnownResponse = getCredentialIssuerWellKnownResponseDto( issuerId, Map.of(credentialType, getCredentialSupportedResponse(credentialType))); IssuerConfig expectedIssuerConfig = new IssuerConfig( @@ -345,12 +356,12 @@ public void shouldReturnIssuersV2DTOWhenGetIssuersV2DTO() throws Exception { IssuersV2DTO result = issuersService.getIssuersV2DTO(); assertEquals(2, result.getIssuers().size()); - IssuerV2DTO first = result.getIssuers().get(0); + IssuerV2DTO first = result.getIssuers().getFirst(); assertEquals("Issuer3id", first.getIssuerId()); assertEquals("OpenId4VCI", first.getProtocol()); assertEquals(getIssuerConfigDTO("Issuer3").getDisplay(), first.getDisplay()); assertEquals("123", first.getClientId()); - assertEquals("https://dev/Issuer3id", first.getTokenEndpoint()); + assertEquals(publicUrl + context + "/get-token/Issuer3id", first.getTokenEndpoint()); assertEquals("test-client-alias", first.getClientAlias()); assertEquals(getIssuerConfigDTO("Issuer3").getQr_code_type(), first.getQrCodeType()); assertEquals("true", first.getEnabled()); @@ -369,7 +380,7 @@ public void shouldReturnIssuerV2DetailsForValidIssuerId() throws Exception { assertEquals("OpenId4VCI", result.getProtocol()); assertEquals(getIssuerConfigDTO("Issuer3").getDisplay(), result.getDisplay()); assertEquals("123", result.getClientId()); - assertEquals("https://dev/Issuer3id", result.getTokenEndpoint()); + assertEquals(publicUrl + context + "/get-token/Issuer3id", result.getTokenEndpoint()); assertEquals("test-client-alias", result.getClientAlias()); assertEquals(getIssuerConfigDTO("Issuer3").getQr_code_type(), result.getQrCodeType()); assertEquals("true", result.getEnabled()); @@ -401,4 +412,76 @@ public void shouldPropagateApiNotAccessibleWhenGetIssuerV2DetailsFails() { assertThrows(ApiNotAccessibleException.class, () -> issuersService.getIssuerV2Details("Issuer3id")); verify(utilities, times(1)).getIssuersConfigJsonValue(); } + + @Test + public void shouldGenerateTokenEndpointWhenMissingInV1() throws Exception { + String publicUrl = "https://api.dev.mosip.net"; + String context = "/v4/mimoto"; + String getTokenPath = "/get-token/"; + IssuersServiceImpl serviceWithConfig = new IssuersServiceImpl( + utilities, objectMapper, issuersConfigUtil, publicUrl, context); + + String issuerIdMissing = "Issuer-Missing"; + String issuerIdExisting = "Issuer-Existing"; + String existingUrl = "https://external-idp.com/token"; + + IssuerDTO issuerA = getIssuerConfigDTO(issuerIdMissing); + issuerA.setIssuer_id(issuerIdMissing); + issuerA.setToken_endpoint(null); + + IssuerDTO issuerB = getIssuerConfigDTO(issuerIdExisting); + issuerB.setIssuer_id(issuerIdExisting); + issuerB.setToken_endpoint(existingUrl); + + IssuersDTO mockIssuers = new IssuersDTO(List.of(issuerA, issuerB)); + String json = objectMapper.writeValueAsString(mockIssuers); + + when(utilities.getIssuersConfigJsonValue()).thenReturn(json); + when(objectMapper.readValue(json, IssuersDTO.class)).thenReturn(mockIssuers); + + IssuersDTO result = serviceWithConfig.getAllIssuers(); + + String expectedGeneratedUrlIssuerA = publicUrl + context + getTokenPath + issuerIdMissing; + String expectedGeneratedUrlIssuerB = publicUrl + context + getTokenPath + issuerIdExisting; + + assertEquals(expectedGeneratedUrlIssuerA, result.getIssuers().get(0).getToken_endpoint()); + assertEquals(expectedGeneratedUrlIssuerB, result.getIssuers().get(1).getToken_endpoint()); + } + + @Test + public void shouldGenerateTokenEndpointWhenMissingInV2() throws Exception { + // Arrange + String publicUrl = "https://api.dev.mosip.net"; + String context = "/v4/mimoto"; + String getTokenPath = "/get-token/"; + + IssuersServiceImpl serviceWithConfig = new IssuersServiceImpl( + utilities, objectMapper, issuersConfigUtil, publicUrl, context); + + String issuerIdMissing = "IssuerV2-Missing"; + String issuerIdExisting = "Issuer-Existing"; + String existingUrl = "https://external-idp.com/token"; + + IssuerDTO issuerA = getIssuerConfigDTO(issuerIdMissing); + issuerA.setIssuer_id(issuerIdMissing); + issuerA.setToken_endpoint(""); + + IssuerDTO issuerB = getIssuerConfigDTO(issuerIdExisting); + issuerB.setIssuer_id(issuerIdExisting); + issuerB.setToken_endpoint(existingUrl); + + IssuersDTO mockIssuers = new IssuersDTO(List.of(issuerA, issuerB)); + String json = objectMapper.writeValueAsString(mockIssuers); + + when(utilities.getIssuersConfigJsonValue()).thenReturn(json); + when(objectMapper.readValue(json, IssuersDTO.class)).thenReturn(mockIssuers); + + IssuersV2DTO result = serviceWithConfig.getIssuersV2DTO(); + + String expectedGeneratedUrlIssuerA = publicUrl + context + getTokenPath + issuerIdMissing; + String expectedGeneratedUrlIssuerB = publicUrl + context + getTokenPath + issuerIdExisting; + + assertEquals(expectedGeneratedUrlIssuerA, result.getIssuers().get(0).getTokenEndpoint()); + assertEquals(expectedGeneratedUrlIssuerB, result.getIssuers().get(1).getTokenEndpoint()); + } } \ No newline at end of file From 25a77d0b6c0f8737efa489f26abd203efc491d88 Mon Sep 17 00:00:00 2001 From: Durgesh Konga Date: Wed, 15 Apr 2026 15:08:33 +0530 Subject: [PATCH 845/860] feat(openid4vci): Add implementation for parsing well known for draft 13 and v1 versions ref #555 (#1074) * feat(openid4vci): Add implementation for parsing well known for both versions part of #555 Signed-off-by: Durgesh Konga * refactor: Fix validation, serialization, and test coverage for well-known response DTOs and parsers part of #555 Signed-off-by: Durgesh Konga * Decouple version-specific well-known DTOs into draft13/v1 packages ref #555, use objectmapper for map Signed-off-by: Durgesh Konga * feat(openid4vci): Add internal classes for Logo and Background Image Signed-off-by: Durgesh Konga * feat(openid4vci): Remove redundant null checks and update test case Signed-off-by: Durgesh Konga * feat(openid4vci): add version to CredentialIssuerWellKnownResponse Signed-off-by: Durgesh Konga --------- Signed-off-by: Durgesh Konga --- .talismanrc | 4 + .../constant/VCSpecificationVersion.java | 15 + .../CredentialIssuerWellKnownResponse.java | 40 +-- .../wellknown/draft13/BackgroundImageDTO.java | 18 ++ .../CredentialDefinitionResponseDto.java | 32 ++ .../CredentialSupportedDisplayResponse.java | 51 +++ .../draft13/CredentialsSupportedResponse.java | 61 ++++ .../draft13/Draft13WellKnownResponse.java | 44 +++ .../dto/mimoto/wellknown/draft13/LogoDTO.java | 25 ++ .../draft13/ProofTypesSupported.java | 19 ++ .../wellknown/v1/BackgroundImageDTO.java | 18 ++ .../v1/CredentialDefinitionResponseDto.java | 32 ++ .../wellknown/v1/CredentialMetaData.java | 22 ++ .../CredentialSupportedDisplayResponse.java | 51 +++ .../v1/CredentialsSupportedResponse.java | 57 ++++ .../dto/mimoto/wellknown/v1/LogoDTO.java | 25 ++ .../wellknown/v1/ProofTypesSupported.java | 19 ++ .../wellknown/v1/V1WellKnownResponse.java | 51 +++ ...ntialIssuerWellknownResponseValidator.java | 3 +- .../mosip/mimoto/util/IssuerConfigUtil.java | 41 ++- .../mimoto/util/VCSpecVersionDetector.java | 43 +++ .../util/parser/Draft13WellknownParser.java | 42 +++ .../mimoto/util/parser/V1WellknownParser.java | 82 +++++ .../util/parser/WellknownParserFactory.java | 31 ++ .../util/parser/WellknownResponseParser.java | 18 ++ .../constant/VCSpecificationVersionTest.java | 29 ++ .../controller/IssuersControllerTest.java | 21 +- ...lIssuerWellknownResponseValidatorTest.java | 239 ++++---------- .../mimoto/util/IssuerConfigUtilTest.java | 31 +- .../util/VCSpecVersionDetectorTest.java | 169 ++++++++++ .../parser/Draft13WellknownParserTest.java | 275 ++++++++++++++++ .../util/parser/V1WellknownParserTest.java | 294 ++++++++++++++++++ .../parser/WellknownParserFactoryTest.java | 79 +++++ 33 files changed, 1740 insertions(+), 241 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/constant/VCSpecificationVersion.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/draft13/BackgroundImageDTO.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/draft13/CredentialDefinitionResponseDto.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/draft13/CredentialSupportedDisplayResponse.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/draft13/CredentialsSupportedResponse.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/draft13/Draft13WellKnownResponse.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/draft13/LogoDTO.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/draft13/ProofTypesSupported.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/BackgroundImageDTO.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/CredentialDefinitionResponseDto.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/CredentialMetaData.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/CredentialSupportedDisplayResponse.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/CredentialsSupportedResponse.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/LogoDTO.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/ProofTypesSupported.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/V1WellKnownResponse.java create mode 100644 src/main/java/io/mosip/mimoto/util/VCSpecVersionDetector.java create mode 100644 src/main/java/io/mosip/mimoto/util/parser/Draft13WellknownParser.java create mode 100644 src/main/java/io/mosip/mimoto/util/parser/V1WellknownParser.java create mode 100644 src/main/java/io/mosip/mimoto/util/parser/WellknownParserFactory.java create mode 100644 src/main/java/io/mosip/mimoto/util/parser/WellknownResponseParser.java create mode 100644 src/test/java/io/mosip/mimoto/constant/VCSpecificationVersionTest.java create mode 100644 src/test/java/io/mosip/mimoto/util/VCSpecVersionDetectorTest.java create mode 100644 src/test/java/io/mosip/mimoto/util/parser/Draft13WellknownParserTest.java create mode 100644 src/test/java/io/mosip/mimoto/util/parser/V1WellknownParserTest.java create mode 100644 src/test/java/io/mosip/mimoto/util/parser/WellknownParserFactoryTest.java diff --git a/.talismanrc b/.talismanrc index cc4966c8c..64c06865d 100644 --- a/.talismanrc +++ b/.talismanrc @@ -238,4 +238,8 @@ fileignoreconfig: checksum: 6d9332df2edfc765ab45c8e985571bb5851c0da680afdc19becbc1e60362df20 - filename: src/main/java/io/mosip/mimoto/controller/IssuersV2Controller.java checksum: 132c81d2d4552789777632e7ff61c86ceb843c10a7177a5bcbd2eb1c196cb430 +- filename: src/main/java/io/mosip/mimoto/util/parser/Draft13WellknownParser.java + checksum: 15a9710874a5692a85182e8b30962122dd6cfff570a6e706a49938eadae267c4 +- filename: src/main/java/io/mosip/mimoto/util/parser/V1WellknownParser.java + checksum: 0a73dce3de65135f7f87bd1b92f6037169fdeae0048df326c45b7e496f75e01d version: "" \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/constant/VCSpecificationVersion.java b/src/main/java/io/mosip/mimoto/constant/VCSpecificationVersion.java new file mode 100644 index 000000000..168c7d0a5 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/constant/VCSpecificationVersion.java @@ -0,0 +1,15 @@ +package io.mosip.mimoto.constant; + +import lombok.Getter; + +@Getter +public enum VCSpecificationVersion { + DRAFT_13("draft-13"), + V1("v1"); + + private final String version; + + VCSpecificationVersion(String version) { + this.version = version; + } +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerWellKnownResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerWellKnownResponse.java index f6fe6d86b..06506db94 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerWellKnownResponse.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerWellKnownResponse.java @@ -1,16 +1,10 @@ package io.mosip.mimoto.dto.mimoto; import com.fasterxml.jackson.annotation.JsonProperty; -import com.google.gson.annotations.SerializedName; -import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.validation.Valid; -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.Pattern; +import io.mosip.mimoto.constant.VCSpecificationVersion; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.hibernate.validator.constraints.URL; import java.util.List; import java.util.Map; @@ -19,30 +13,28 @@ @AllArgsConstructor @NoArgsConstructor public class CredentialIssuerWellKnownResponse { - @NotBlank - @URL - @SerializedName("credential_issuer") @JsonProperty("credential_issuer") - @Schema(description = "Unique Identifier of the Credential Issuer") private String credentialIssuer; - @NotEmpty - @SerializedName("authorization_servers") @JsonProperty("authorization_servers") - @Schema(description = "List of Authorization Server Endpoint") - private List<@NotBlank @URL String> authorizationServers; + private List authorizationServers; - @NotBlank - @SerializedName("credential_endpoint") - @Pattern(regexp = "https?://.*?/credential$") @JsonProperty("credential_endpoint") - @Schema(description = "Endpoint to download the Credential") private String credentialEndPoint; - @NotEmpty - @Valid - @SerializedName("credential_configurations_supported") @JsonProperty("credential_configurations_supported") - @Schema(description = "List of Credential Configurations Supported") - private Map<@NotBlank String, @Valid CredentialsSupportedResponse> credentialConfigurationsSupported; + private Map credentialConfigurationsSupported; + + @JsonProperty("nonce_endpoint") + private String nonceEndpoint; + + @JsonProperty("version") + private VCSpecificationVersion version; + + public CredentialIssuerWellKnownResponse(String credentialIssuer, List authorizationServers, String credentialEndPoint, Map credentialConfigurationsSupported) { + this.credentialIssuer = credentialIssuer; + this.authorizationServers = authorizationServers; + this.credentialEndPoint = credentialEndPoint; + this.credentialConfigurationsSupported = credentialConfigurationsSupported; + } } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/draft13/BackgroundImageDTO.java b/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/draft13/BackgroundImageDTO.java new file mode 100644 index 000000000..9e50e42e6 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/draft13/BackgroundImageDTO.java @@ -0,0 +1,18 @@ +package io.mosip.mimoto.dto.mimoto.wellknown.draft13; + +import com.google.gson.annotations.Expose; +import jakarta.validation.constraints.NotBlank; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.validator.constraints.URL; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class BackgroundImageDTO { + @Expose + @URL + @NotBlank + String uri; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/draft13/CredentialDefinitionResponseDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/draft13/CredentialDefinitionResponseDto.java new file mode 100644 index 000000000..06a0493be --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/draft13/CredentialDefinitionResponseDto.java @@ -0,0 +1,32 @@ +package io.mosip.mimoto.dto.mimoto.wellknown.draft13; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.google.gson.annotations.SerializedName; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + +import java.util.List; +import java.util.Map; + +@Data +public class CredentialDefinitionResponseDto { + + @NotEmpty + @SerializedName("type") + @JsonProperty("type") + @Schema(description = "Type of the Credential Definition") + private List<@NotEmpty String> type; + + @Valid + @SerializedName("credentialSubject") + @JsonProperty("credentialSubject") + @Schema(description = "Credential Subject of the VC") + private Map credentialSubject; + + @SerializedName("@context") + @JsonProperty("@context") + @Schema(description = "context of the Credential Definition") + private List<@NotEmpty String> context; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/draft13/CredentialSupportedDisplayResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/draft13/CredentialSupportedDisplayResponse.java new file mode 100644 index 000000000..222e2d303 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/draft13/CredentialSupportedDisplayResponse.java @@ -0,0 +1,51 @@ +package io.mosip.mimoto.dto.mimoto.wellknown.draft13; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class CredentialSupportedDisplayResponse { + + @Expose + @NotBlank + @Schema(description = "Name of the Supported Credential") + String name; + + @Expose + @NotBlank + @Schema(description = "Locale of the Supported Credential") + String locale; + + @Expose + @NotNull + @Valid + @Schema(description = "Logo of the Supported Credential") + LogoDTO logo; + + @JsonProperty("background_image") + @SerializedName("background_image") + @Expose + @Valid + @Schema(description = "Background Image of the Supported Credential") + BackgroundImageDTO backgroundImage; + + @JsonProperty("background_color") + @SerializedName("background_color") + @Expose + @NotBlank + @Schema(description = "Background Colour of the Supported Credential") + String backgroundColor; + + @JsonProperty("text_color") + @SerializedName("text_color") + @Expose + @NotBlank + @Schema(description = "Text Colour of the Supported Credential") + String textColor; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/draft13/CredentialsSupportedResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/draft13/CredentialsSupportedResponse.java new file mode 100644 index 000000000..0257ca21a --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/draft13/CredentialsSupportedResponse.java @@ -0,0 +1,61 @@ +package io.mosip.mimoto.dto.mimoto.wellknown.draft13; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.google.gson.annotations.SerializedName; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + +import java.util.List; +import java.util.Map; + +import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL; + +@Data +public class CredentialsSupportedResponse { + + @NotBlank(message = "Format must not be blank") + @Schema(description = "Format of the Credential") + private String format; + + @NotBlank(message = "Scope must not be blank") + @Schema(description = "Scope of the Credential") + private String scope; + + @JsonInclude(NON_NULL) + @Schema(description = "document Type of the Credential") + private String doctype; + + @NotEmpty(message = "Proof types supported must not be empty") + @Valid + @SerializedName("proof_types_supported") + @JsonProperty("proof_types_supported") + @Schema(description = "List of proof types supported") + private Map<@NotEmpty String, @Valid ProofTypesSupported> proofTypesSupported; + + @JsonInclude(NON_NULL) + @Schema(description = "List of Claims") + private Map claims; + + @SerializedName("credential_definition") + @JsonProperty("credential_definition") + @JsonInclude(NON_NULL) + @Schema(description = "Credential Definition of the VC") + private CredentialDefinitionResponseDto credentialDefinition; + + @NotEmpty(message = "Display information must not be empty") + @Valid + @SerializedName("display") + @JsonProperty("display") + @Schema(description = "Display Properties of the Supported Credential") + private List<@Valid CredentialSupportedDisplayResponse> display; + + @Schema(description = "Order of the Credentials Subject Render") + private List order; + + @Schema(description = "Identify the type or schema of the claims included") + private String vct; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/draft13/Draft13WellKnownResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/draft13/Draft13WellKnownResponse.java new file mode 100644 index 000000000..351841508 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/draft13/Draft13WellKnownResponse.java @@ -0,0 +1,44 @@ +package io.mosip.mimoto.dto.mimoto.wellknown.draft13; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.google.gson.annotations.SerializedName; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; +import org.hibernate.validator.constraints.URL; + +import lombok.Data; + +import java.util.List; +import java.util.Map; + +@Data +public class Draft13WellKnownResponse { + @NotBlank + @URL + @SerializedName("credential_issuer") + @JsonProperty("credential_issuer") + @Schema(description = "Unique Identifier of the Credential Issuer") + private String credentialIssuer; + + @NotEmpty + @SerializedName("authorization_servers") + @JsonProperty("authorization_servers") + @Schema(description = "List of Authorization Server Endpoint") + private List<@NotBlank @URL String> authorizationServers; + + @NotBlank + @URL + @SerializedName("credential_endpoint") + @JsonProperty("credential_endpoint") + @Schema(description = "Endpoint to download the Credential") + private String credentialEndPoint; + + @NotEmpty + @Valid + @SerializedName("credential_configurations_supported") + @JsonProperty("credential_configurations_supported") + @Schema(description = "List of Credential Configurations Supported") + private Map<@NotBlank String, @Valid CredentialsSupportedResponse> credentialConfigurationsSupported; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/draft13/LogoDTO.java b/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/draft13/LogoDTO.java new file mode 100644 index 000000000..4cd5a2f2d --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/draft13/LogoDTO.java @@ -0,0 +1,25 @@ +package io.mosip.mimoto.dto.mimoto.wellknown.draft13; + +import com.fasterxml.jackson.annotation.JsonAlias; +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import lombok.Data; +import org.hibernate.validator.constraints.URL; + +@Data +public class LogoDTO { + @Expose + @NotBlank + @URL + @JsonAlias("uri") + @SerializedName(value = "url", alternate = {"uri"}) + @Schema(description = "Display logo uri of the Issuer") + String url; + + @Expose + @NotBlank + @Schema(description = "Display logo alt text of the Issuer") + String alt_text; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/draft13/ProofTypesSupported.java b/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/draft13/ProofTypesSupported.java new file mode 100644 index 000000000..9ffb4b196 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/draft13/ProofTypesSupported.java @@ -0,0 +1,19 @@ +package io.mosip.mimoto.dto.mimoto.wellknown.draft13; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.google.gson.annotations.SerializedName; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + +import java.util.List; + +@Data +public class ProofTypesSupported { + + @NotEmpty + @JsonProperty("proof_signing_alg_values_supported") + @SerializedName("proof_signing_alg_values_supported") + @Schema(description = "Support Alg for proof Signing") + private List proofSigningAlgValuesSupported; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/BackgroundImageDTO.java b/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/BackgroundImageDTO.java new file mode 100644 index 000000000..d6196c7de --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/BackgroundImageDTO.java @@ -0,0 +1,18 @@ +package io.mosip.mimoto.dto.mimoto.wellknown.v1; + +import com.google.gson.annotations.Expose; +import jakarta.validation.constraints.NotBlank; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.validator.constraints.URL; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class BackgroundImageDTO { + @Expose + @URL + @NotBlank + String uri; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/CredentialDefinitionResponseDto.java b/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/CredentialDefinitionResponseDto.java new file mode 100644 index 000000000..5e53e32fb --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/CredentialDefinitionResponseDto.java @@ -0,0 +1,32 @@ +package io.mosip.mimoto.dto.mimoto.wellknown.v1; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.google.gson.annotations.SerializedName; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + +import java.util.List; +import java.util.Map; + +@Data +public class CredentialDefinitionResponseDto { + + @NotEmpty + @SerializedName("type") + @JsonProperty("type") + @Schema(description = "Type of the Credential Definition") + private List<@NotEmpty String> type; + + @Valid + @SerializedName("credentialSubject") + @JsonProperty("credentialSubject") + @Schema(description = "Credential Subject of the VC") + private Map credentialSubject; + + @SerializedName("@context") + @JsonProperty("@context") + @Schema(description = "context of the Credential Definition") + private List<@NotEmpty String> context; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/CredentialMetaData.java b/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/CredentialMetaData.java new file mode 100644 index 000000000..10ba2ac6e --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/CredentialMetaData.java @@ -0,0 +1,22 @@ +package io.mosip.mimoto.dto.mimoto.wellknown.v1; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.google.gson.annotations.SerializedName; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + +import java.util.List; + +@Data +public class CredentialMetaData { + + @NotEmpty(message = "Display information must not be empty") + @Valid + @SerializedName("display") + @JsonProperty("display") + @Schema(description = "Display Properties of the Supported Credential") + private List<@Valid CredentialSupportedDisplayResponse> display; + +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/CredentialSupportedDisplayResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/CredentialSupportedDisplayResponse.java new file mode 100644 index 000000000..16fcd7d0d --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/CredentialSupportedDisplayResponse.java @@ -0,0 +1,51 @@ +package io.mosip.mimoto.dto.mimoto.wellknown.v1; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class CredentialSupportedDisplayResponse { + + @Expose + @NotBlank + @Schema(description = "Name of the Supported Credential") + String name; + + @Expose + @NotBlank + @Schema(description = "Locale of the Supported Credential") + String locale; + + @Expose + @NotNull + @Valid + @Schema(description = "Logo of the Supported Credential") + LogoDTO logo; + + @JsonProperty("background_image") + @SerializedName("background_image") + @Expose + @Valid + @Schema(description = "Background Image of the Supported Credential") + BackgroundImageDTO backgroundImage; + + @JsonProperty("background_color") + @SerializedName("background_color") + @Expose + @NotBlank + @Schema(description = "Background Colour of the Supported Credential") + String backgroundColor; + + @JsonProperty("text_color") + @SerializedName("text_color") + @Expose + @NotBlank + @Schema(description = "Text Colour of the Supported Credential") + String textColor; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/CredentialsSupportedResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/CredentialsSupportedResponse.java new file mode 100644 index 000000000..678596c37 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/CredentialsSupportedResponse.java @@ -0,0 +1,57 @@ +package io.mosip.mimoto.dto.mimoto.wellknown.v1; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.google.gson.annotations.SerializedName; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.util.Map; + +import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL; + +@Data +public class CredentialsSupportedResponse { + @NotBlank(message = "Format must not be blank") + @Schema(description = "Format of the Credential") + private String format; + + @NotBlank(message = "Scope must not be blank") + @Schema(description = "Scope of the Credential") + private String scope; + + @JsonInclude(NON_NULL) + @Schema(description = "document Type of the Credential") + private String doctype; + + @NotEmpty(message = "Proof types supported must not be empty") + @Valid + @SerializedName("proof_types_supported") + @JsonProperty("proof_types_supported") + @Schema(description = "List of proof types supported") + private Map<@NotEmpty String, @Valid ProofTypesSupported> proofTypesSupported; + + @JsonInclude(NON_NULL) + @Schema(description = "List of Claims") + private Map claims; + + @SerializedName("credential_definition") + @JsonProperty("credential_definition") + @JsonInclude(NON_NULL) + @Schema(description = "Credential Definition of the VC") + private CredentialDefinitionResponseDto credentialDefinition; + + @NotNull(message = "Credential metadata must not be null") + @Valid + @SerializedName("credential_metadata") + @JsonProperty("credential_metadata") + @Schema(description = "Credential Metadata containing display properties") + private CredentialMetaData credentialMetadata; + + @Schema(description = "Identify the type or schema of the claims included") + private String vct; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/LogoDTO.java b/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/LogoDTO.java new file mode 100644 index 000000000..95b33e913 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/LogoDTO.java @@ -0,0 +1,25 @@ +package io.mosip.mimoto.dto.mimoto.wellknown.v1; + +import com.fasterxml.jackson.annotation.JsonAlias; +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import lombok.Data; +import org.hibernate.validator.constraints.URL; + +@Data +public class LogoDTO { + @Expose + @NotBlank + @URL + @JsonAlias("uri") + @SerializedName(value = "url", alternate = {"uri"}) + @Schema(description = "Display logo uri of the Issuer") + String url; + + @Expose + @NotBlank + @Schema(description = "Display logo alt text of the Issuer") + String alt_text; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/ProofTypesSupported.java b/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/ProofTypesSupported.java new file mode 100644 index 000000000..a9393c3a2 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/ProofTypesSupported.java @@ -0,0 +1,19 @@ +package io.mosip.mimoto.dto.mimoto.wellknown.v1; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.google.gson.annotations.SerializedName; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + +import java.util.List; + +@Data +public class ProofTypesSupported { + + @NotEmpty + @JsonProperty("proof_signing_alg_values_supported") + @SerializedName("proof_signing_alg_values_supported") + @Schema(description = "Support Alg for proof Signing") + private List proofSigningAlgValuesSupported; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/V1WellKnownResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/V1WellKnownResponse.java new file mode 100644 index 000000000..871f9302f --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/V1WellKnownResponse.java @@ -0,0 +1,51 @@ +package io.mosip.mimoto.dto.mimoto.wellknown.v1; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.google.gson.annotations.SerializedName; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; +import org.hibernate.validator.constraints.URL; + +import lombok.Data; + +import java.util.List; +import java.util.Map; + +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class V1WellKnownResponse { + @NotBlank + @URL + @SerializedName("credential_issuer") + @JsonProperty("credential_issuer") + @Schema(description = "Unique Identifier of the Credential Issuer") + private String credentialIssuer; + + @NotEmpty + @SerializedName("authorization_servers") + @JsonProperty("authorization_servers") + @Schema(description = "List of Authorization Server Endpoint") + private List<@NotBlank @URL String> authorizationServers; + + @NotBlank + @URL + @SerializedName("credential_endpoint") + @JsonProperty("credential_endpoint") + @Schema(description = "Endpoint to download the Credential") + private String credentialEndPoint; + + @SerializedName("nonce_endpoint") + @JsonProperty("nonce_endpoint") + @Schema(description = "Endpoint to obtain a nonce for credential requests") + private String nonceEndpoint; + + @NotEmpty + @Valid + @SerializedName("credential_configurations_supported") + @JsonProperty("credential_configurations_supported") + @Schema(description = "List of Credential Configurations Supported") + private Map<@NotBlank String, @Valid CredentialsSupportedResponse> credentialConfigurationsSupported; +} diff --git a/src/main/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidator.java b/src/main/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidator.java index 7673a75fa..81ae7be23 100644 --- a/src/main/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidator.java +++ b/src/main/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidator.java @@ -3,7 +3,6 @@ import io.mosip.mimoto.dto.mimoto.CredentialDefinitionResponseDto; import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; import io.mosip.mimoto.dto.mimoto.CredentialsSupportedResponse; -import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.InvalidWellknownResponseException; import jakarta.validation.ConstraintViolation; import jakarta.validation.Validator; @@ -19,7 +18,7 @@ public class CredentialIssuerWellknownResponseValidator { public static final String MSO_MDOC = "mso_mdoc"; public static final String LDP_VC = "ldp_vc"; - public void validate(CredentialIssuerWellKnownResponse response, Validator validator) throws ApiNotAccessibleException, InvalidWellknownResponseException { + public void validate(CredentialIssuerWellKnownResponse response, Validator validator) throws InvalidWellknownResponseException { Set> violations = validator.validate(response); if (!violations.isEmpty()) { StringBuilder sb = new StringBuilder("Validation failed:"); diff --git a/src/main/java/io/mosip/mimoto/util/IssuerConfigUtil.java b/src/main/java/io/mosip/mimoto/util/IssuerConfigUtil.java index 9d40b6b7e..17c7611a7 100644 --- a/src/main/java/io/mosip/mimoto/util/IssuerConfigUtil.java +++ b/src/main/java/io/mosip/mimoto/util/IssuerConfigUtil.java @@ -1,16 +1,19 @@ package io.mosip.mimoto.util; +import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.constant.VCSpecificationVersion; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.AuthorizationServerWellknownResponseException; import io.mosip.mimoto.exception.InvalidWellknownResponseException; +import io.mosip.mimoto.util.parser.WellknownParserFactory; +import io.mosip.mimoto.util.parser.WellknownResponseParser; import jakarta.validation.ConstraintViolation; import jakarta.validation.Validation; import jakarta.validation.Validator; import jakarta.validation.ValidatorFactory; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import java.io.IOException; @@ -21,17 +24,19 @@ @Slf4j public class IssuerConfigUtil { - @Autowired - private RestApiClient restApiClient; - - @Autowired - private CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator; - - @Autowired - ObjectMapper objectMapper; - - @Autowired - private Validator validator; + private final RestApiClient restApiClient; + private final VCSpecVersionDetector versionDetector; + private final WellknownParserFactory parserFactory; + private final ObjectMapper objectMapper; + private final Validator validator; + + public IssuerConfigUtil(RestApiClient restApiClient, VCSpecVersionDetector versionDetector, WellknownParserFactory parserFactory, ObjectMapper objectMapper, Validator validator) { + this.restApiClient = restApiClient; + this.versionDetector = versionDetector; + this.parserFactory = parserFactory; + this.objectMapper = objectMapper; + this.validator = validator; + } public static String camelToTitleCase(String input) { if (input == null || input.isEmpty()) return input; @@ -67,9 +72,15 @@ public CredentialIssuerWellKnownResponse getIssuerWellknown(String credentialIss if (wellknownResponse == null) { throw new ApiNotAccessibleException(); } - CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = objectMapper.readValue(wellknownResponse, CredentialIssuerWellKnownResponse.class); - credentialIssuerWellknownResponseValidator.validate(credentialIssuerWellKnownResponse, validator); - return credentialIssuerWellKnownResponse; + + JsonNode jsonNode = objectMapper.readTree(wellknownResponse); + VCSpecificationVersion version = versionDetector.detectVersion(jsonNode); + + WellknownResponseParser parser = parserFactory.getParser(version); + CredentialIssuerWellKnownResponse parsedResponse = parser.parse(wellknownResponse); + parser.validate(parsedResponse, validator); + + return parsedResponse; } @Cacheable(value = "authServerWellknown", key = "#p0") diff --git a/src/main/java/io/mosip/mimoto/util/VCSpecVersionDetector.java b/src/main/java/io/mosip/mimoto/util/VCSpecVersionDetector.java new file mode 100644 index 000000000..5fe5c32a3 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/VCSpecVersionDetector.java @@ -0,0 +1,43 @@ +package io.mosip.mimoto.util; + +import com.fasterxml.jackson.databind.JsonNode; +import io.mosip.mimoto.constant.VCSpecificationVersion; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Component +@Slf4j +public class VCSpecVersionDetector { + + private static final String NONCE_ENDPOINT = "nonce_endpoint"; + private static final String CREDENTIAL_CONFIGURATIONS_SUPPORTED = "credential_configurations_supported"; + private static final String CREDENTIAL_METADATA = "credential_metadata"; + private static final String DISPLAY = "display"; + + public VCSpecificationVersion detectVersion(JsonNode wellknownResponse) { + if (wellknownResponse.has(VCSpecVersionDetector.NONCE_ENDPOINT) && !wellknownResponse.get(VCSpecVersionDetector.NONCE_ENDPOINT).asText().isBlank()) { + log.debug("Detected V1 specification version: nonce_endpoint field present"); + return VCSpecificationVersion.V1; + } + + JsonNode configurationsSupported = wellknownResponse.get(CREDENTIAL_CONFIGURATIONS_SUPPORTED); + if (configurationsSupported != null && configurationsSupported.isObject()) { + for (JsonNode config : configurationsSupported) { + if (config.has(CREDENTIAL_METADATA)) { + log.debug("Detected V1 specification version: credential_metadata found in credential configuration"); + return VCSpecificationVersion.V1; + } + } + + for (JsonNode config : configurationsSupported) { + if (config.has(DISPLAY)) { + log.debug("Detected Draft-13 specification version: display found in credential configuration"); + return VCSpecificationVersion.DRAFT_13; + } + } + } + + log.debug("Defaulting to V1 specification version"); + return VCSpecificationVersion.V1; + } +} diff --git a/src/main/java/io/mosip/mimoto/util/parser/Draft13WellknownParser.java b/src/main/java/io/mosip/mimoto/util/parser/Draft13WellknownParser.java new file mode 100644 index 000000000..35635f805 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/parser/Draft13WellknownParser.java @@ -0,0 +1,42 @@ +package io.mosip.mimoto.util.parser; + +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.constant.VCSpecificationVersion; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; +import io.mosip.mimoto.dto.mimoto.wellknown.draft13.Draft13WellKnownResponse; +import io.mosip.mimoto.exception.InvalidWellknownResponseException; +import io.mosip.mimoto.util.CredentialIssuerWellknownResponseValidator; +import jakarta.validation.Validator; +import org.springframework.stereotype.Component; + +import java.io.IOException; + +@Component +public class Draft13WellknownParser implements WellknownResponseParser { + + private final ObjectMapper objectMapper; + private final CredentialIssuerWellknownResponseValidator wellknownResponseValidator; + + public Draft13WellknownParser(ObjectMapper objectMapper, CredentialIssuerWellknownResponseValidator wellknownResponseValidator) { + this.objectMapper = objectMapper; + this.wellknownResponseValidator = wellknownResponseValidator; + } + + @Override + public VCSpecificationVersion getSupportedVersion() { + return VCSpecificationVersion.DRAFT_13; + } + + @Override + public CredentialIssuerWellKnownResponse parse(String jsonResponse) throws IOException { + Draft13WellKnownResponse draft13Response = objectMapper.readValue(jsonResponse, Draft13WellKnownResponse.class); + CredentialIssuerWellKnownResponse wellKnownResponse = objectMapper.convertValue(draft13Response, CredentialIssuerWellKnownResponse.class); + wellKnownResponse.setVersion(getSupportedVersion()); + return wellKnownResponse; + } + + @Override + public void validate(CredentialIssuerWellKnownResponse response, Validator validator) throws InvalidWellknownResponseException { + wellknownResponseValidator.validate(response, validator); + } +} diff --git a/src/main/java/io/mosip/mimoto/util/parser/V1WellknownParser.java b/src/main/java/io/mosip/mimoto/util/parser/V1WellknownParser.java new file mode 100644 index 000000000..9f291c404 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/parser/V1WellknownParser.java @@ -0,0 +1,82 @@ +package io.mosip.mimoto.util.parser; + +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.constant.VCSpecificationVersion; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; +import io.mosip.mimoto.dto.mimoto.CredentialsSupportedResponse; +import io.mosip.mimoto.dto.mimoto.wellknown.v1.CredentialMetaData; +import io.mosip.mimoto.dto.mimoto.wellknown.v1.V1WellKnownResponse; +import io.mosip.mimoto.exception.InvalidWellknownResponseException; +import io.mosip.mimoto.util.CredentialIssuerWellknownResponseValidator; +import jakarta.validation.Validator; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Component +public class V1WellknownParser implements WellknownResponseParser { + + private final ObjectMapper objectMapper; + private final CredentialIssuerWellknownResponseValidator wellknownResponseValidator; + + public V1WellknownParser(ObjectMapper objectMapper, CredentialIssuerWellknownResponseValidator wellknownResponseValidator) { + this.objectMapper = objectMapper; + this.wellknownResponseValidator = wellknownResponseValidator; + } + + @Override + public VCSpecificationVersion getSupportedVersion() { + return VCSpecificationVersion.V1; + } + + @Override + public CredentialIssuerWellKnownResponse parse(String jsonResponse) throws IOException { + V1WellKnownResponse v1Response = objectMapper.readValue(jsonResponse, V1WellKnownResponse.class); + return toWellKnownResponse(v1Response); + } + + @Override + public void validate(CredentialIssuerWellKnownResponse response, Validator validator) throws InvalidWellknownResponseException { + wellknownResponseValidator.validate(response, validator); + } + + private CredentialIssuerWellKnownResponse toWellKnownResponse(V1WellKnownResponse v1Response) { + CredentialIssuerWellKnownResponse wellKnownResponse = new CredentialIssuerWellKnownResponse(); + wellKnownResponse.setCredentialIssuer(v1Response.getCredentialIssuer()); + wellKnownResponse.setAuthorizationServers(v1Response.getAuthorizationServers()); + wellKnownResponse.setCredentialEndPoint(v1Response.getCredentialEndPoint()); + wellKnownResponse.setCredentialConfigurationsSupported(toCredentialConfigurations(v1Response)); + wellKnownResponse.setNonceEndpoint(v1Response.getNonceEndpoint()); + wellKnownResponse.setVersion(getSupportedVersion()); + return wellKnownResponse; + } + + private Map toCredentialConfigurations(V1WellKnownResponse v1Response) { + LinkedHashMap resultMap = new LinkedHashMap<>(); + v1Response.getCredentialConfigurationsSupported().forEach((key, value) -> resultMap.put(key, toCredentialSupported(value))); + return resultMap; + } + + private CredentialsSupportedResponse toCredentialSupported(io.mosip.mimoto.dto.mimoto.wellknown.v1.CredentialsSupportedResponse v1CredentialSupportedResponse) { + CredentialsSupportedResponse credentialSupported = new CredentialsSupportedResponse(); + credentialSupported.setFormat(v1CredentialSupportedResponse.getFormat()); + credentialSupported.setScope(v1CredentialSupportedResponse.getScope()); + credentialSupported.setDoctype(v1CredentialSupportedResponse.getDoctype()); + credentialSupported.setProofTypesSupported(objectMapper.convertValue(v1CredentialSupportedResponse.getProofTypesSupported(), objectMapper.getTypeFactory().constructMapType(LinkedHashMap.class, String.class, io.mosip.mimoto.dto.mimoto.ProofTypesSupported.class))); + credentialSupported.setClaims(v1CredentialSupportedResponse.getClaims()); + credentialSupported.setCredentialDefinition(objectMapper.convertValue(v1CredentialSupportedResponse.getCredentialDefinition(), io.mosip.mimoto.dto.mimoto.CredentialDefinitionResponseDto.class)); + credentialSupported.setVct(v1CredentialSupportedResponse.getVct()); + + CredentialMetaData metadata = v1CredentialSupportedResponse.getCredentialMetadata(); + if (metadata != null && metadata.getDisplay() != null) { + List display = metadata.getDisplay().stream().map(d -> objectMapper.convertValue(d, io.mosip.mimoto.dto.mimoto.CredentialSupportedDisplayResponse.class)).collect(Collectors.toList()); + credentialSupported.setDisplay(display); + } + + return credentialSupported; + } +} diff --git a/src/main/java/io/mosip/mimoto/util/parser/WellknownParserFactory.java b/src/main/java/io/mosip/mimoto/util/parser/WellknownParserFactory.java new file mode 100644 index 000000000..12fee8c9b --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/parser/WellknownParserFactory.java @@ -0,0 +1,31 @@ +package io.mosip.mimoto.util.parser; + +import io.mosip.mimoto.constant.VCSpecificationVersion; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +@Component +public class WellknownParserFactory { + + private final Map parsers; + + public WellknownParserFactory(List parserList) { + this.parsers = parserList.stream() + .collect(Collectors.toMap( + WellknownResponseParser::getSupportedVersion, + Function.identity() + )); + } + + public WellknownResponseParser getParser(VCSpecificationVersion version) { + WellknownResponseParser parser = parsers.get(version); + if (parser == null) { + throw new IllegalArgumentException("No wellknown parser found for version: " + version); + } + return parser; + } +} diff --git a/src/main/java/io/mosip/mimoto/util/parser/WellknownResponseParser.java b/src/main/java/io/mosip/mimoto/util/parser/WellknownResponseParser.java new file mode 100644 index 000000000..ff87062ec --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/parser/WellknownResponseParser.java @@ -0,0 +1,18 @@ +package io.mosip.mimoto.util.parser; + +import io.mosip.mimoto.constant.VCSpecificationVersion; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; +import io.mosip.mimoto.exception.InvalidWellknownResponseException; +import jakarta.validation.Validator; + +import java.io.IOException; + +public interface WellknownResponseParser { + + VCSpecificationVersion getSupportedVersion(); + + CredentialIssuerWellKnownResponse parse(String jsonResponse) throws IOException; + + void validate(CredentialIssuerWellKnownResponse response, Validator validator) + throws InvalidWellknownResponseException; +} diff --git a/src/test/java/io/mosip/mimoto/constant/VCSpecificationVersionTest.java b/src/test/java/io/mosip/mimoto/constant/VCSpecificationVersionTest.java new file mode 100644 index 000000000..78077399c --- /dev/null +++ b/src/test/java/io/mosip/mimoto/constant/VCSpecificationVersionTest.java @@ -0,0 +1,29 @@ +package io.mosip.mimoto.constant; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class VCSpecificationVersionTest { + + @Test + void shouldReturnCorrectVersionStringForDraft13() { + assertEquals("draft-13", VCSpecificationVersion.DRAFT_13.getVersion()); + } + + @Test + void shouldReturnCorrectVersionStringForV1() { + assertEquals("v1", VCSpecificationVersion.V1.getVersion()); + } + + @Test + void shouldHaveTwoEnumValues() { + assertEquals(2, VCSpecificationVersion.values().length); + } + + @Test + void shouldResolveFromName() { + assertEquals(VCSpecificationVersion.DRAFT_13, VCSpecificationVersion.valueOf("DRAFT_13")); + assertEquals(VCSpecificationVersion.V1, VCSpecificationVersion.valueOf("V1")); + } +} diff --git a/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java b/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java index 013bcb785..3d9c0ac36 100644 --- a/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/IssuersControllerTest.java @@ -206,16 +206,6 @@ public void getIssuerDetailsLogoDtoFromJsonWithUriAlias() throws Exception { .andExpect(jsonPath("$.response.display[0].logo.alt_text", Matchers.is("alt-uri"))); } - @Test - public void getIssuerDetailsTestForInvalidIssuerId() throws Exception { - Mockito.when(issuersService.getIssuerDetails("invalidId")).thenThrow(InvalidIssuerIdException.class); - - mockMvc.perform(get("/issuers/invalidId").accept(MediaType.APPLICATION_JSON_VALUE)) - .andExpect(status().isNotFound()) - .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is(INVALID_ISSUER_ID_EXCEPTION.getCode()))) - .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(INVALID_ISSUER_ID_EXCEPTION.getMessage()))); - } - @Test public void getIssuerWellknownTest() throws Exception { String issuerId = "issuer1"; @@ -232,6 +222,17 @@ public void getIssuerWellknownTest() throws Exception { JSONAssert.assertEquals(new JSONObject(expectedCredentialIssuerWellknownResponse), new JSONObject(actualResponse), JSONCompareMode.LENIENT); } + @Test + public void getIssuerDetailsTestForInvalidIssuerId() throws Exception { + Mockito.when(issuersService.getIssuerDetails("invalidId")).thenThrow(InvalidIssuerIdException.class); + + mockMvc.perform(get("/issuers/invalidId").accept(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isNotFound()) + .andExpect(jsonPath("$.errors[0].errorCode", Matchers.is(INVALID_ISSUER_ID_EXCEPTION.getCode()))) + .andExpect(jsonPath("$.errors[0].errorMessage", Matchers.is(INVALID_ISSUER_ID_EXCEPTION.getMessage()))); + } + + @Test public void getIssuerWellknownWhenServiceThrowsReturnsNotFound() throws Exception { String issuerId = "issuer1"; diff --git a/src/test/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidatorTest.java b/src/test/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidatorTest.java index f17db94c4..cecd5973d 100644 --- a/src/test/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidatorTest.java +++ b/src/test/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidatorTest.java @@ -1,11 +1,12 @@ package io.mosip.mimoto.util; -import io.mosip.mimoto.dto.BackgroundImageDTO; import io.mosip.mimoto.dto.mimoto.CredentialDefinitionResponseDto; import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; import io.mosip.mimoto.dto.mimoto.CredentialSupportedDisplayResponse; import io.mosip.mimoto.dto.mimoto.CredentialsSupportedResponse; import io.mosip.mimoto.exception.InvalidWellknownResponseException; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Path; import jakarta.validation.Validation; import jakarta.validation.Validator; import jakarta.validation.ValidatorFactory; @@ -20,6 +21,9 @@ import static io.mosip.mimoto.util.TestUtilities.getCredentialIssuerWellKnownResponseDto; import static io.mosip.mimoto.util.TestUtilities.getCredentialSupportedResponse; import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; import org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration; @@ -41,216 +45,81 @@ void setUp() { } @Test - void shouldThrowExceptionWhenCredentialIssuerIsMissingInCredentialIssuerWellknownResponse() { - response.setCredentialIssuer(""); - response.setCredentialEndPoint("http://example.com/credential"); - - CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); - InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> - credentialIssuerWellknownResponseValidator.validate(response, validator)); - assertEquals("RESIDENT-APP-041", invalidWellknownResponseException.getErrorCode()); - assertEquals(""" - RESIDENT-APP-041 --> Invalid Wellknown from Issuer - Validation failed: - credentialIssuer: must not be blank""", invalidWellknownResponseException.getMessage()); - } + void shouldNotThrowExceptionWhenResponseIsFullyValid() { + CredentialIssuerWellknownResponseValidator validatorInstance = new CredentialIssuerWellknownResponseValidator(); - @Test - void shouldThrowExceptionWhenCredentialEndpointIsIncorrectInCredentialIssuerWellknownResponse() { - response.setCredentialEndPoint("http://example.com"); // Incorrect because it does not end with "/credential" - - CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); - InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> - credentialIssuerWellknownResponseValidator.validate(response, validator)); - assertEquals("RESIDENT-APP-041", invalidWellknownResponseException.getErrorCode()); - assertEquals(""" - RESIDENT-APP-041 --> Invalid Wellknown from Issuer - Validation failed: - credentialEndPoint: must match "https?://.*?/credential$\"""", invalidWellknownResponseException.getMessage(), "Exception message should indicate the incorrect 'credentialEndpoint'"); + assertDoesNotThrow(() -> validatorInstance.validate(response, validator)); } + @SuppressWarnings("unchecked") @Test - void shouldThrowExceptionWhenAuthorizationServersIsEmpty() { - response.setCredentialIssuer("https://valid.url/credential"); - response.setAuthorizationServers(Collections.emptyList()); // Invalid empty list - - CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); - InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> - credentialIssuerWellknownResponseValidator.validate(response, validator)); - assertEquals("RESIDENT-APP-041", invalidWellknownResponseException.getErrorCode()); - assertEquals(""" - RESIDENT-APP-041 --> Invalid Wellknown from Issuer - Validation failed: - authorizationServers: must not be empty""", invalidWellknownResponseException.getMessage(), "Exception message should indicate 'authorizationServers' cannot be empty"); - } + void shouldThrowExceptionWhenBeanValidationReturnsViolations() { + CredentialIssuerWellknownResponseValidator validatorInstance = new CredentialIssuerWellknownResponseValidator(); - @Test - void shouldThrowExceptionWhenAuthorizationServersIsNull() { - response.setCredentialIssuer("https://valid.url/credential"); - response.setAuthorizationServers(null); - - CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); - InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> - credentialIssuerWellknownResponseValidator.validate(response, validator)); - assertEquals("RESIDENT-APP-041", invalidWellknownResponseException.getErrorCode()); - assertEquals(""" - RESIDENT-APP-041 --> Invalid Wellknown from Issuer - Validation failed: - authorizationServers: must not be empty""", invalidWellknownResponseException.getMessage(), "Exception message should indicate 'authorizationServers' cannot be empty"); + Path mockPath = mock(Path.class); + doReturn("credentialIssuer").when(mockPath).toString(); + + ConstraintViolation violation = mock(ConstraintViolation.class); + doReturn(mockPath).when(violation).getPropertyPath(); + doReturn("must not be blank").when(violation).getMessage(); + + Set> violations = new HashSet<>(); + violations.add(violation); + + Validator mockValidator = mock(Validator.class); + doReturn(violations).when(mockValidator).validate(any()); + + InvalidWellknownResponseException exception = assertThrows(InvalidWellknownResponseException.class, () -> + validatorInstance.validate(response, mockValidator)); + String message = exception.getMessage(); + assertTrue(message.contains("Validation failed:")); + assertTrue(message.contains("credentialIssuer: must not be blank")); } @Test - void shouldThrowExceptionWhenFormatIsMissingInCredentialsSupported() { + void shouldNotThrowExceptionWhenFormatIsNullSinceNeitherFormatSpecificCheckApplies() { CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupportedResponse("CredentialType1"); credentialsSupportedResponse.setFormat(null); response = getCredentialIssuerWellKnownResponseDto("Issuer1", Map.of("CredentialType1", credentialsSupportedResponse)); + CredentialIssuerWellknownResponseValidator validatorInstance = new CredentialIssuerWellknownResponseValidator(); - CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); - InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> - credentialIssuerWellknownResponseValidator.validate(response, validator)); - assertEquals("RESIDENT-APP-041", invalidWellknownResponseException.getErrorCode()); - assertEquals(""" - RESIDENT-APP-041 --> Invalid Wellknown from Issuer - Validation failed: - credentialConfigurationsSupported[CredentialType1].format: Format must not be blank""", invalidWellknownResponseException.getMessage(), "Exception message should indicate 'format' must not be blank"); - } - - @Test - void shouldThrowExceptionWhenLogoUrlIsInvalid() { - response.getCredentialConfigurationsSupported().get("CredentialType1").getDisplay().getFirst().getLogo().setUrl("ftp//invalid-url"); // Invalid URL - CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); - - InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> - credentialIssuerWellknownResponseValidator.validate(response, validator)); - assertEquals("RESIDENT-APP-041", invalidWellknownResponseException.getErrorCode()); - assertEquals(""" - RESIDENT-APP-041 --> Invalid Wellknown from Issuer - Validation failed: - credentialConfigurationsSupported[CredentialType1].display[0].logo.url: must be a valid URL""", invalidWellknownResponseException.getMessage(), "Exception message should indicate 'logo.url' must be a valid URL"); - } - - @Test - void shouldThrowExceptionWhenBackgroundImageUrlIsInvalid() { - response.getCredentialConfigurationsSupported().get("CredentialType1").getDisplay().getFirst().setBackgroundImage(new BackgroundImageDTO("local//imgbasebase64")); - - CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); - - InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> - credentialIssuerWellknownResponseValidator.validate(response, validator)); - assertEquals("RESIDENT-APP-041", invalidWellknownResponseException.getErrorCode()); - assertEquals(""" - RESIDENT-APP-041 --> Invalid Wellknown from Issuer - Validation failed: - credentialConfigurationsSupported[CredentialType1].display[0].backgroundImage.uri: must be a valid URL""", invalidWellknownResponseException.getMessage(), "Exception message should indicate 'background_image.uri' must be a valid URL"); + assertDoesNotThrow(() -> validatorInstance.validate(response, validator)); } @Test - void shouldDetectMissingMandatoryFields() { - response.setCredentialEndPoint(null); - response.setCredentialConfigurationsSupported(null); - response.setAuthorizationServers(null); - response.setCredentialIssuer(null); - CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); - - InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> - credentialIssuerWellknownResponseValidator.validate(response, validator)); - assertEquals("RESIDENT-APP-041", invalidWellknownResponseException.getErrorCode()); - assertTrue(Arrays.stream(invalidWellknownResponseException.getMessage().split("\n")).toList().containsAll(List.of("RESIDENT-APP-041 --> Invalid Wellknown from Issuer", - "Validation failed:", - "credentialIssuer: must not be blank", - "credentialConfigurationsSupported: must not be empty", - "authorizationServers: must not be empty", - "credentialEndPoint: must not be blank"))); - } + void shouldNotThrowExceptionWhenMultipleFieldsAreNullSinceNoCascadeValidation() { + CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupportedResponse("CredentialType1"); + credentialsSupportedResponse.setFormat(null); + credentialsSupportedResponse.setScope(null); + credentialsSupportedResponse.setDisplay(null); + credentialsSupportedResponse.setProofTypesSupported(null); + response = getCredentialIssuerWellKnownResponseDto("Issuer1", + Map.of("CredentialType1", credentialsSupportedResponse)); - @Test - void shouldDetectMissingMandatoryFieldsOfCredentialSupportedResponse() { - response.getCredentialConfigurationsSupported().get("CredentialType1").setFormat(null); - response.getCredentialConfigurationsSupported().get("CredentialType1").setScope(null); - response.getCredentialConfigurationsSupported().get("CredentialType1").setDisplay(null); - response.getCredentialConfigurationsSupported().get("CredentialType1").setProofTypesSupported(null); - response.getCredentialConfigurationsSupported().get("CredentialType1").setCredentialDefinition(null); - CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); - - InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> - credentialIssuerWellknownResponseValidator.validate(response, validator)); - assertEquals("RESIDENT-APP-041", invalidWellknownResponseException.getErrorCode()); - assertTrue(Arrays.stream(invalidWellknownResponseException.getMessage().split("\n")).toList().containsAll(Arrays.stream(""" - RESIDENT-APP-041 --> Invalid Wellknown from Issuer - Validation failed: - credentialConfigurationsSupported[CredentialType1].proofTypesSupported: Proof types supported must not be empty - credentialConfigurationsSupported[CredentialType1].scope: Scope must not be blank - credentialConfigurationsSupported[CredentialType1].format: Format must not be blank - credentialConfigurationsSupported[CredentialType1].display: Display information must not be empty""".split("\n")).toList())); - } + CredentialIssuerWellknownResponseValidator validatorInstance = new CredentialIssuerWellknownResponseValidator(); - @Test - void shouldThrowExceptionIfProofTypesSupportedValueIsEmptyInCredentialSupportedResponse() { - response.getCredentialConfigurationsSupported().get("CredentialType1").setProofTypesSupported(new HashMap<>()); - CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); - - InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> - credentialIssuerWellknownResponseValidator.validate(response, validator)); - String message = invalidWellknownResponseException.getMessage(); - assertTrue(message.contains("RESIDENT-APP-041 --> Invalid Wellknown from Issuer")); - assertTrue(message.contains("credentialConfigurationsSupported[CredentialType1].proofTypesSupported: Proof types supported must not be empty")); + assertDoesNotThrow(() -> validatorInstance.validate(response, validator)); } @Test - void shouldThrowExceptionIfProofSigningAlgorithmsSupportedValueIsNullInCredentialSupportedResponse() { - response.getCredentialConfigurationsSupported().get("CredentialType1").getProofTypesSupported().get("jwt").setProofSigningAlgValuesSupported(null); - CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); - - InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> - credentialIssuerWellknownResponseValidator.validate(response, validator)); - String message = invalidWellknownResponseException.getMessage(); - assertTrue(message.contains("RESIDENT-APP-041 --> Invalid Wellknown from Issuer")); - assertTrue(message.contains("credentialConfigurationsSupported[CredentialType1].proofTypesSupported[jwt].proofSigningAlgValuesSupported: must not be empty")); - } + void shouldNotThrowExceptionWhenDisplayHasInvalidNestedFieldsSinceNoCascadeValidation() { + List displayList = new ArrayList<>(); + CredentialSupportedDisplayResponse invalidDisplay = new CredentialSupportedDisplayResponse(); + invalidDisplay.setName(null); + invalidDisplay.setLocale(null); + invalidDisplay.setLogo(null); + invalidDisplay.setTextColor(null); + invalidDisplay.setBackgroundColor(null); + displayList.add(invalidDisplay); + response.getCredentialConfigurationsSupported().get("CredentialType1").setDisplay(displayList); - @Test - void shouldThrowExceptionIfProofSigningAlgorithmsSupportedValueIsEmptyInCredentialSupportedResponse() { - response.getCredentialConfigurationsSupported().get("CredentialType1").getProofTypesSupported().get("jwt").setProofSigningAlgValuesSupported(new ArrayList<>()); - CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); - - InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> - credentialIssuerWellknownResponseValidator.validate(response, validator)); - String message = invalidWellknownResponseException.getMessage(); - assertTrue(message.contains("RESIDENT-APP-041 --> Invalid Wellknown from Issuer")); - assertTrue(message.contains("credentialConfigurationsSupported[CredentialType1].proofTypesSupported[jwt].proofSigningAlgValuesSupported: must not be empty")); - } + CredentialIssuerWellknownResponseValidator validatorInstance = new CredentialIssuerWellknownResponseValidator(); - @Test - void shouldDetectMissingMandatoryFieldsOfCredentialSupportedDisplayResponse() { - // Create a new response object with nested display response details - List credentialSupportedDisplayResponseList = new ArrayList<>(); - CredentialSupportedDisplayResponse credentialSupportedDisplayResponse = new CredentialSupportedDisplayResponse(); - credentialSupportedDisplayResponse.setLogo(null); - credentialSupportedDisplayResponse.setName(null); - credentialSupportedDisplayResponse.setLocale(null); - credentialSupportedDisplayResponse.setTextColor(null); - credentialSupportedDisplayResponse.setBackgroundColor(null); - credentialSupportedDisplayResponse.setBackgroundImage(null); - credentialSupportedDisplayResponseList.add(credentialSupportedDisplayResponse); - response.getCredentialConfigurationsSupported().get("CredentialType1").setDisplay(credentialSupportedDisplayResponseList); - CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); - - InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> - credentialIssuerWellknownResponseValidator.validate(response, validator) - ); - assertTrue(Arrays.stream(invalidWellknownResponseException.getMessage().split("\n")).toList().containsAll(Arrays.stream(""" - RESIDENT-APP-041 --> Invalid Wellknown from Issuer - Validation failed: - credentialConfigurationsSupported[CredentialType1].display[0].backgroundColor: must not be blank - credentialConfigurationsSupported[CredentialType1].display[0].textColor: must not be blank - credentialConfigurationsSupported[CredentialType1].display[0].name: must not be blank - credentialConfigurationsSupported[CredentialType1].display[0].locale: must not be blank - credentialConfigurationsSupported[CredentialType1].display[0].logo: must not be null""".split("\n")).toList())); + assertDoesNotThrow(() -> validatorInstance.validate(response, validator)); } - @Nested class LdpVcFormatWellKnownResponseValidationTest { @Test diff --git a/src/test/java/io/mosip/mimoto/util/IssuerConfigUtilTest.java b/src/test/java/io/mosip/mimoto/util/IssuerConfigUtilTest.java index b41532dbf..fb642e2bd 100644 --- a/src/test/java/io/mosip/mimoto/util/IssuerConfigUtilTest.java +++ b/src/test/java/io/mosip/mimoto/util/IssuerConfigUtilTest.java @@ -1,11 +1,15 @@ package io.mosip.mimoto.util; +import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.constant.VCSpecificationVersion; import io.mosip.mimoto.dto.mimoto.AuthorizationServerWellKnownResponse; import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.AuthorizationServerWellknownResponseException; import io.mosip.mimoto.exception.InvalidWellknownResponseException; +import io.mosip.mimoto.util.parser.WellknownParserFactory; +import io.mosip.mimoto.util.parser.WellknownResponseParser; import jakarta.validation.Validator; import lombok.extern.slf4j.Slf4j; import org.junit.Before; @@ -20,6 +24,8 @@ import java.util.Map; import static io.mosip.mimoto.util.TestUtilities.*; import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -28,7 +34,7 @@ public class IssuerConfigUtilTest { @InjectMocks - IssuerConfigUtil issuersConfigUtil = new IssuerConfigUtil(); + IssuerConfigUtil issuersConfigUtil; @Mock RestApiClient restApiClient; @@ -42,6 +48,14 @@ public class IssuerConfigUtilTest { @Mock CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator; + @Mock + VCSpecVersionDetector versionDetector; + + @Mock + WellknownParserFactory parserFactory; + + @Mock + WellknownResponseParser wellknownResponseParser; String authorizationServerWellknownUrl, authorizationServerHostUrl, issuerWellKnownUrl,exceptionMsgPrefix, issuerId, credentialIssuerHostUrl, authServerWellknownUrl; @@ -49,13 +63,11 @@ public class IssuerConfigUtilTest { @Before - public void setUp() throws IOException { - //Auth server wellknown setup + public void setUp() throws Exception { authorizationServerWellknownUrl = "https://dev/authorize/.well-known/oauth-authorization-server"; authorizationServerHostUrl = "https://dev/authorize"; exceptionMsgPrefix = "RESIDENT-APP-042 --> Invalid Authorization Server well-known from server:\n"; - //Issuer wellknown setup credentialIssuerHostUrl = "https://issuer.env.net"; issuerWellKnownUrl = "https://issuer.env.net/.well-known/openid-credential-issuer"; expectedCredentialIssuerWellKnownResponse = getCredentialIssuerWellKnownResponseDto("Issuer1", @@ -63,7 +75,14 @@ public void setUp() throws IOException { String expectedWellknownJson = getExpectedWellKnownJson(); Mockito.when(restApiClient.getApi(issuerWellKnownUrl, String.class)) .thenReturn(expectedWellknownJson); - Mockito.when(objectMapper.readValue(expectedWellknownJson, CredentialIssuerWellKnownResponse.class)).thenReturn(expectedCredentialIssuerWellKnownResponse); + Mockito.when(objectMapper.readTree(expectedWellknownJson)) + .thenReturn(Mockito.mock(JsonNode.class)); + Mockito.when(versionDetector.detectVersion(any(JsonNode.class))) + .thenReturn(VCSpecificationVersion.DRAFT_13); + Mockito.when(parserFactory.getParser(eq(VCSpecificationVersion.DRAFT_13))) + .thenReturn(wellknownResponseParser); + Mockito.when(wellknownResponseParser.parse(expectedWellknownJson)) + .thenReturn(expectedCredentialIssuerWellKnownResponse); } @Test @@ -111,6 +130,8 @@ public void shouldReturnIssuerWellknownForTheRequestedIssuerId() throws ApiNotAc assertEquals(expectedCredentialIssuerWellKnownResponse, actualCredentialIssuerWellKnownResponse); verify(restApiClient, times(1)).getApi(issuerWellKnownUrl, String.class); + verify(parserFactory, times(1)).getParser(eq(VCSpecificationVersion.DRAFT_13)); + verify(wellknownResponseParser, times(1)).validate(eq(expectedCredentialIssuerWellKnownResponse), eq(validator)); } @Test diff --git a/src/test/java/io/mosip/mimoto/util/VCSpecVersionDetectorTest.java b/src/test/java/io/mosip/mimoto/util/VCSpecVersionDetectorTest.java new file mode 100644 index 000000000..82b033cb4 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/util/VCSpecVersionDetectorTest.java @@ -0,0 +1,169 @@ +package io.mosip.mimoto.util; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; +import io.mosip.mimoto.constant.VCSpecificationVersion; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class VCSpecVersionDetectorTest { + + private VCSpecVersionDetector detector; + private ObjectMapper objectMapper; + + @BeforeEach + void setUp() { + detector = new VCSpecVersionDetector(); + objectMapper = new ObjectMapper(); + } + + @Test + void shouldDetectV1WhenNonceEndpointIsPresent() throws Exception { + JsonNode node = objectMapper.readTree(""" + {"nonce_endpoint": "https://example.com/nonce"} + """); + assertEquals(VCSpecificationVersion.V1, detector.detectVersion(node)); + } + + @Test + void shouldFallThroughWhenNonceEndpointIsBlank() throws Exception { + ObjectNode root = objectMapper.createObjectNode(); + root.put("nonce_endpoint", ""); + root.putObject("credential_configurations_supported") + .putObject("cred1").put("display", "something"); + + assertEquals(VCSpecificationVersion.DRAFT_13, detector.detectVersion(root)); + } + + @Test + void shouldDetectV1WhenCredentialMetadataExistsInConfiguration() throws Exception { + JsonNode node = objectMapper.readTree(""" + { + "credential_configurations_supported": { + "cred1": { + "credential_metadata": {"display": []} + } + } + } + """); + assertEquals(VCSpecificationVersion.V1, detector.detectVersion(node)); + } + + @Test + void shouldDetectDraft13WhenDisplayExistsInConfiguration() throws Exception { + JsonNode node = objectMapper.readTree(""" + { + "credential_configurations_supported": { + "cred1": { + "display": [{"name": "Test"}] + } + } + } + """); + assertEquals(VCSpecificationVersion.DRAFT_13, detector.detectVersion(node)); + } + + @Test + void shouldDefaultToV1WhenNoIndicatorsPresent() throws Exception { + JsonNode node = objectMapper.readTree(""" + { + "credential_configurations_supported": { + "cred1": { + "format": "ldp_vc" + } + } + } + """); + assertEquals(VCSpecificationVersion.V1, detector.detectVersion(node)); + } + + @Test + void shouldDefaultToV1WhenConfigurationsSupportedIsNull() throws Exception { + JsonNode node = objectMapper.readTree(""" + {"credential_issuer": "https://example.com"} + """); + assertEquals(VCSpecificationVersion.V1, detector.detectVersion(node)); + } + + @Test + void shouldDefaultToV1WhenConfigurationsSupportedIsNotAnObject() throws Exception { + JsonNode node = objectMapper.readTree(""" + {"credential_configurations_supported": "not_an_object"} + """); + assertEquals(VCSpecificationVersion.V1, detector.detectVersion(node)); + } + + @Test + void shouldDefaultToV1ForEmptyResponse() throws Exception { + JsonNode node = objectMapper.readTree("{}"); + assertEquals(VCSpecificationVersion.V1, detector.detectVersion(node)); + } + + @Test + void shouldPrioritizeNonceEndpointOverCredentialMetadata() throws Exception { + JsonNode node = objectMapper.readTree(""" + { + "nonce_endpoint": "https://example.com/nonce", + "credential_configurations_supported": { + "cred1": { + "credential_metadata": {"display": []}, + "display": [{"name": "Test"}] + } + } + } + """); + assertEquals(VCSpecificationVersion.V1, detector.detectVersion(node)); + } + + @Test + void shouldPrioritizeCredentialMetadataOverDisplay() throws Exception { + JsonNode node = objectMapper.readTree(""" + { + "credential_configurations_supported": { + "cred1": { + "credential_metadata": {"display": []}, + "display": [{"name": "Test"}] + } + } + } + """); + assertEquals(VCSpecificationVersion.V1, detector.detectVersion(node)); + } + + @Test + void shouldCheckAllConfigurationsForCredentialMetadata() throws Exception { + JsonNode node = objectMapper.readTree(""" + { + "credential_configurations_supported": { + "cred1": {"format": "ldp_vc"}, + "cred2": {"credential_metadata": {"display": []}} + } + } + """); + assertEquals(VCSpecificationVersion.V1, detector.detectVersion(node)); + } + + @Test + void shouldCheckAllConfigurationsForDisplay() throws Exception { + JsonNode node = objectMapper.readTree(""" + { + "credential_configurations_supported": { + "cred1": {"format": "ldp_vc"}, + "cred2": {"display": [{"name": "Test"}]} + } + } + """); + assertEquals(VCSpecificationVersion.DRAFT_13, detector.detectVersion(node)); + } + + @Test + void shouldDefaultToV1WhenConfigurationsSupportedIsEmptyObject() throws Exception { + JsonNode node = objectMapper.readTree(""" + {"credential_configurations_supported": {}} + """); + assertEquals(VCSpecificationVersion.V1, detector.detectVersion(node)); + } +} diff --git a/src/test/java/io/mosip/mimoto/util/parser/Draft13WellknownParserTest.java b/src/test/java/io/mosip/mimoto/util/parser/Draft13WellknownParserTest.java new file mode 100644 index 000000000..d262ef2e4 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/util/parser/Draft13WellknownParserTest.java @@ -0,0 +1,275 @@ +package io.mosip.mimoto.util.parser; + +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.constant.VCSpecificationVersion; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; +import io.mosip.mimoto.dto.mimoto.CredentialsSupportedResponse; +import io.mosip.mimoto.exception.InvalidWellknownResponseException; +import io.mosip.mimoto.util.CredentialIssuerWellknownResponseValidator; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Validator; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import static org.junit.jupiter.api.Assertions.*; + +class Draft13WellknownParserTest { + + private Draft13WellknownParser parser; + private ObjectMapper objectMapper; + + @BeforeEach + void setUp() { + objectMapper = new ObjectMapper(); + parser = new Draft13WellknownParser(objectMapper, new CredentialIssuerWellknownResponseValidator()); + } + + @Test + void shouldReturnDraft13AsVersion() { + assertEquals(VCSpecificationVersion.DRAFT_13, parser.getSupportedVersion()); + } + + @Test + void shouldParseDraft13ResponseWithDisplayAndOrder() throws IOException { + String json = """ + { + "credential_issuer": "https://issuer.example.com", + "authorization_servers": ["https://auth.example.com"], + "credential_endpoint": "https://issuer.example.com/credential", + "credential_configurations_supported": { + "UniversityDegree": { + "format": "ldp_vc", + "scope": "university_degree", + "proof_types_supported": { + "jwt": {"proof_signing_alg_values_supported": ["ES256"]} + }, + "display": [ + {"name": "University Degree", "locale": "en"} + ], + "order": ["name", "degree"], + "vct": "UniversityDegreeCredential" + } + } + } + """; + + CredentialIssuerWellKnownResponse result = parser.parse(json); + + assertEquals("https://issuer.example.com", result.getCredentialIssuer()); + assertEquals(List.of("https://auth.example.com"), result.getAuthorizationServers()); + assertEquals("https://issuer.example.com/credential", result.getCredentialEndPoint()); + assertNull(result.getNonceEndpoint()); + assertEquals(VCSpecificationVersion.DRAFT_13, result.getVersion()); + + assertNotNull(result.getCredentialConfigurationsSupported()); + CredentialsSupportedResponse cred = result.getCredentialConfigurationsSupported().get("UniversityDegree"); + assertNotNull(cred); + assertEquals("ldp_vc", cred.getFormat()); + assertEquals("university_degree", cred.getScope()); + assertEquals("UniversityDegreeCredential", cred.getVct()); + assertNotNull(cred.getDisplay()); + assertEquals(1, cred.getDisplay().size()); + assertEquals("University Degree", cred.getDisplay().get(0).getName()); + assertEquals(List.of("name", "degree"), cred.getOrder()); + } + + @Test + void shouldMapAllFieldsFromDraft13Config() throws IOException { + String json = """ + { + "credential_issuer": "https://issuer.example.com", + "authorization_servers": ["https://auth1.com", "https://auth2.com"], + "credential_endpoint": "https://issuer.example.com/credential", + "credential_configurations_supported": { + "Cred1": { + "format": "ldp_vc", + "scope": "scope1", + "doctype": "doctype1", + "proof_types_supported": { + "jwt": {"proof_signing_alg_values_supported": ["ES256"]}, + "cwt": {"proof_signing_alg_values_supported": ["EdDSA"]} + }, + "claims": {"field1": {}, "field2": {}}, + "credential_definition": { + "type": ["VerifiableCredential"], + "credentialSubject": {"name": {"display": [{"name": "Name", "locale": "en"}]}} + }, + "display": [ + {"name": "Credential One", "locale": "en"}, + {"name": "Credenziale Uno", "locale": "it"} + ], + "order": ["name", "dob"], + "vct": "VCT1" + } + } + } + """; + + CredentialIssuerWellKnownResponse result = parser.parse(json); + + assertEquals(2, result.getAuthorizationServers().size()); + CredentialsSupportedResponse cred = result.getCredentialConfigurationsSupported().get("Cred1"); + assertEquals("ldp_vc", cred.getFormat()); + assertEquals("scope1", cred.getScope()); + assertEquals("doctype1", cred.getDoctype()); + assertEquals(2, cred.getProofTypesSupported().size()); + assertEquals(2, cred.getClaims().size()); + assertNotNull(cred.getCredentialDefinition()); + assertEquals(List.of("VerifiableCredential"), cred.getCredentialDefinition().getType()); + assertEquals(2, cred.getDisplay().size()); + assertEquals(List.of("name", "dob"), cred.getOrder()); + assertEquals("VCT1", cred.getVct()); + } + + @Test + void shouldParseMultipleCredentialConfigurations() throws IOException { + String json = """ + { + "credential_issuer": "https://issuer.example.com", + "authorization_servers": ["https://auth.example.com"], + "credential_endpoint": "https://issuer.example.com/credential", + "credential_configurations_supported": { + "Cred1": { + "format": "ldp_vc", + "scope": "scope1", + "proof_types_supported": { + "jwt": {"proof_signing_alg_values_supported": ["ES256"]} + }, + "display": [{"name": "Cred1", "locale": "en"}] + }, + "Cred2": { + "format": "mso_mdoc", + "scope": "scope2", + "proof_types_supported": { + "jwt": {"proof_signing_alg_values_supported": ["ES256"]} + }, + "display": [{"name": "Cred2", "locale": "en"}] + } + } + } + """; + + CredentialIssuerWellKnownResponse result = parser.parse(json); + + assertEquals(2, result.getCredentialConfigurationsSupported().size()); + assertEquals("ldp_vc", result.getCredentialConfigurationsSupported().get("Cred1").getFormat()); + assertEquals("mso_mdoc", result.getCredentialConfigurationsSupported().get("Cred2").getFormat()); + } + + @Test + void shouldNotSetNonceEndpointForDraft13() throws IOException { + String json = """ + { + "credential_issuer": "https://issuer.example.com", + "authorization_servers": ["https://auth.example.com"], + "credential_endpoint": "https://issuer.example.com/credential", + "credential_configurations_supported": {} + } + """; + + CredentialIssuerWellKnownResponse result = parser.parse(json); + + assertNull(result.getNonceEndpoint()); + } + + @Test + void shouldThrowIOExceptionForInvalidJson() { + assertThrows(IOException.class, () -> parser.parse("not valid json")); + } + + @Test + void shouldDelegateValidationToValidator() { + CredentialIssuerWellKnownResponse response = new CredentialIssuerWellKnownResponse(); + response.setCredentialConfigurationsSupported(Map.of()); + + Validator noOpValidator = new NoOpValidator(); + + assertDoesNotThrow(() -> parser.validate(response, noOpValidator)); + } + + @Test + void shouldPropagateValidationException() { + Draft13WellknownParser throwingParser = new Draft13WellknownParser(objectMapper, new ThrowingValidator()); + + CredentialIssuerWellKnownResponse response = new CredentialIssuerWellKnownResponse(); + Validator noOpValidator = new NoOpValidator(); + + assertThrows(InvalidWellknownResponseException.class, + () -> throwingParser.validate(response, noOpValidator)); + } + + @Test + void shouldHandleNullOptionalFields() throws IOException { + String json = """ + { + "credential_issuer": "https://issuer.example.com", + "authorization_servers": ["https://auth.example.com"], + "credential_endpoint": "https://issuer.example.com/credential", + "credential_configurations_supported": { + "Cred1": { + "format": "ldp_vc", + "scope": "scope1", + "proof_types_supported": { + "jwt": {"proof_signing_alg_values_supported": ["ES256"]} + }, + "display": [{"name": "Test", "locale": "en"}] + } + } + } + """; + + CredentialIssuerWellKnownResponse result = parser.parse(json); + + CredentialsSupportedResponse cred = result.getCredentialConfigurationsSupported().get("Cred1"); + assertNull(cred.getDoctype()); + assertNull(cred.getClaims()); + assertNull(cred.getCredentialDefinition()); + assertNull(cred.getOrder()); + } + + private static class ThrowingValidator extends CredentialIssuerWellknownResponseValidator { + @Override + public void validate(CredentialIssuerWellKnownResponse response, Validator validator) throws InvalidWellknownResponseException { + throw new InvalidWellknownResponseException("test error"); + } + } + + @SuppressWarnings("unchecked") + private static class NoOpValidator implements Validator { + @Override + public Set> validate(T object, Class... groups) { + return new HashSet<>(); + } + + @Override + public Set> validateProperty(T object, String propertyName, Class... groups) { + return new HashSet<>(); + } + + @Override + public Set> validateValue(Class beanType, String propertyName, Object value, Class... groups) { + return new HashSet<>(); + } + + @Override + public jakarta.validation.metadata.BeanDescriptor getConstraintsForClass(Class clazz) { + return null; + } + + @Override + public T unwrap(Class type) { + return null; + } + + @Override + public jakarta.validation.executable.ExecutableValidator forExecutables() { + return null; + } + } +} diff --git a/src/test/java/io/mosip/mimoto/util/parser/V1WellknownParserTest.java b/src/test/java/io/mosip/mimoto/util/parser/V1WellknownParserTest.java new file mode 100644 index 000000000..aa4ec6c93 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/util/parser/V1WellknownParserTest.java @@ -0,0 +1,294 @@ +package io.mosip.mimoto.util.parser; + +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.constant.VCSpecificationVersion; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; +import io.mosip.mimoto.dto.mimoto.CredentialsSupportedResponse; +import io.mosip.mimoto.exception.InvalidWellknownResponseException; +import io.mosip.mimoto.util.CredentialIssuerWellknownResponseValidator; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Validator; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import static org.junit.jupiter.api.Assertions.*; + +class V1WellknownParserTest { + + private V1WellknownParser parser; + private ObjectMapper objectMapper; + + @BeforeEach + void setUp() { + objectMapper = new ObjectMapper(); + parser = new V1WellknownParser(objectMapper, new CredentialIssuerWellknownResponseValidator()); + } + + @Test + void shouldReturnV1AsVersion() { + assertEquals(VCSpecificationVersion.V1, parser.getSupportedVersion()); + } + + @Test + void shouldParseV1ResponseWithCredentialMetadata() throws IOException { + String json = """ + { + "credential_issuer": "https://issuer.example.com", + "authorization_servers": ["https://auth.example.com"], + "credential_endpoint": "https://issuer.example.com/credential", + "nonce_endpoint": "https://issuer.example.com/nonce", + "credential_configurations_supported": { + "UniversityDegree": { + "format": "ldp_vc", + "scope": "university_degree", + "proof_types_supported": { + "jwt": {"proof_signing_alg_values_supported": ["ES256"]} + }, + "credential_metadata": { + "display": [ + {"name": "University Degree", "locale": "en"} + ] + }, + "vct": "UniversityDegreeCredential" + } + } + } + """; + + CredentialIssuerWellKnownResponse result = parser.parse(json); + + assertEquals("https://issuer.example.com", result.getCredentialIssuer()); + assertEquals(List.of("https://auth.example.com"), result.getAuthorizationServers()); + assertEquals("https://issuer.example.com/credential", result.getCredentialEndPoint()); + assertEquals("https://issuer.example.com/nonce", result.getNonceEndpoint()); + assertEquals(VCSpecificationVersion.V1, result.getVersion()); + + assertNotNull(result.getCredentialConfigurationsSupported()); + CredentialsSupportedResponse cred = result.getCredentialConfigurationsSupported().get("UniversityDegree"); + assertNotNull(cred); + assertEquals("ldp_vc", cred.getFormat()); + assertEquals("university_degree", cred.getScope()); + assertEquals("UniversityDegreeCredential", cred.getVct()); + assertNotNull(cred.getDisplay()); + assertEquals(1, cred.getDisplay().size()); + assertEquals("University Degree", cred.getDisplay().get(0).getName()); + } + + @Test + void shouldParseV1ResponseWithNullCredentialMetadata() throws IOException { + String json = """ + { + "credential_issuer": "https://issuer.example.com", + "authorization_servers": ["https://auth.example.com"], + "credential_endpoint": "https://issuer.example.com/credential", + "credential_configurations_supported": { + "TestCred": { + "format": "mso_mdoc", + "scope": "test_scope", + "doctype": "org.iso.18013.5.1.mDL", + "proof_types_supported": { + "jwt": {"proof_signing_alg_values_supported": ["ES256"]} + }, + "claims": {"name": {}}, + "vct": "TestVCT" + } + } + } + """; + + CredentialIssuerWellKnownResponse result = parser.parse(json); + + CredentialsSupportedResponse cred = result.getCredentialConfigurationsSupported().get("TestCred"); + assertNotNull(cred); + assertNull(cred.getDisplay()); + assertEquals("mso_mdoc", cred.getFormat()); + assertEquals("org.iso.18013.5.1.mDL", cred.getDoctype()); + assertNotNull(cred.getClaims()); + assertNull(result.getNonceEndpoint()); + } + + @Test + void shouldMapAllFieldsFromV1Config() throws IOException { + String json = """ + { + "credential_issuer": "https://issuer.example.com", + "authorization_servers": ["https://auth1.com", "https://auth2.com"], + "credential_endpoint": "https://issuer.example.com/credential", + "nonce_endpoint": "https://issuer.example.com/nonce", + "credential_configurations_supported": { + "Cred1": { + "format": "ldp_vc", + "scope": "scope1", + "doctype": "doctype1", + "proof_types_supported": { + "jwt": {"proof_signing_alg_values_supported": ["ES256"]}, + "cwt": {"proof_signing_alg_values_supported": ["EdDSA"]} + }, + "claims": {"field1": {}, "field2": {}}, + "credential_definition": { + "type": ["VerifiableCredential"], + "credentialSubject": {"name": {"display": [{"name": "Name", "locale": "en"}]}} + }, + "credential_metadata": { + "display": [ + {"name": "Credential One", "locale": "en"}, + {"name": "Credenziale Uno", "locale": "it"} + ] + }, + "vct": "VCT1" + } + } + } + """; + + CredentialIssuerWellKnownResponse result = parser.parse(json); + + assertEquals(2, result.getAuthorizationServers().size()); + CredentialsSupportedResponse cred = result.getCredentialConfigurationsSupported().get("Cred1"); + assertEquals("ldp_vc", cred.getFormat()); + assertEquals("scope1", cred.getScope()); + assertEquals("doctype1", cred.getDoctype()); + assertEquals(2, cred.getProofTypesSupported().size()); + assertEquals(2, cred.getClaims().size()); + assertNotNull(cred.getCredentialDefinition()); + assertEquals(List.of("VerifiableCredential"), cred.getCredentialDefinition().getType()); + assertEquals(2, cred.getDisplay().size()); + assertEquals("VCT1", cred.getVct()); + } + + @Test + void shouldParseMultipleCredentialConfigurations() throws IOException { + String json = """ + { + "credential_issuer": "https://issuer.example.com", + "authorization_servers": ["https://auth.example.com"], + "credential_endpoint": "https://issuer.example.com/credential", + "credential_configurations_supported": { + "Cred1": { + "format": "ldp_vc", + "scope": "scope1", + "proof_types_supported": { + "jwt": {"proof_signing_alg_values_supported": ["ES256"]} + }, + "credential_metadata": { + "display": [{"name": "Cred1", "locale": "en"}] + } + }, + "Cred2": { + "format": "mso_mdoc", + "scope": "scope2", + "proof_types_supported": { + "jwt": {"proof_signing_alg_values_supported": ["ES256"]} + } + } + } + } + """; + + CredentialIssuerWellKnownResponse result = parser.parse(json); + + assertEquals(2, result.getCredentialConfigurationsSupported().size()); + assertNotNull(result.getCredentialConfigurationsSupported().get("Cred1").getDisplay()); + assertNull(result.getCredentialConfigurationsSupported().get("Cred2").getDisplay()); + } + + @Test + void shouldParseV1ResponseWithCredentialMetadataButNoDisplay() throws IOException { + String json = """ + { + "credential_issuer": "https://issuer.example.com", + "authorization_servers": ["https://auth.example.com"], + "credential_endpoint": "https://issuer.example.com/credential", + "credential_configurations_supported": { + "TestCred": { + "format": "ldp_vc", + "scope": "test_scope", + "proof_types_supported": { + "jwt": {"proof_signing_alg_values_supported": ["ES256"]} + }, + "credential_metadata": {} + } + } + } + """; + + CredentialIssuerWellKnownResponse result = parser.parse(json); + + CredentialsSupportedResponse cred = result.getCredentialConfigurationsSupported().get("TestCred"); + assertNotNull(cred); + assertNull(cred.getDisplay()); + assertEquals("ldp_vc", cred.getFormat()); + } + + @Test + void shouldThrowIOExceptionForInvalidJson() { + assertThrows(IOException.class, () -> parser.parse("not valid json")); + } + + @Test + void shouldDelegateValidationToValidator() { + CredentialIssuerWellKnownResponse response = new CredentialIssuerWellKnownResponse(); + response.setCredentialConfigurationsSupported(Map.of()); + + Validator noOpValidator = new NoOpValidator(); + + assertDoesNotThrow(() -> parser.validate(response, noOpValidator)); + } + + @Test + void shouldPropagateValidationException() { + V1WellknownParser throwingParser = new V1WellknownParser(objectMapper, new ThrowingValidator()); + + CredentialIssuerWellKnownResponse response = new CredentialIssuerWellKnownResponse(); + Validator noOpValidator = new NoOpValidator(); + + assertThrows(InvalidWellknownResponseException.class, + () -> throwingParser.validate(response, noOpValidator)); + } + + private static class ThrowingValidator extends CredentialIssuerWellknownResponseValidator { + @Override + public void validate(CredentialIssuerWellKnownResponse response, Validator validator) throws InvalidWellknownResponseException { + throw new InvalidWellknownResponseException("test error"); + } + } + + @SuppressWarnings("unchecked") + private static class NoOpValidator implements Validator { + @Override + public Set> validate(T object, Class... groups) { + return new HashSet<>(); + } + + @Override + public Set> validateProperty(T object, String propertyName, Class... groups) { + return new HashSet<>(); + } + + @Override + public Set> validateValue(Class beanType, String propertyName, Object value, Class... groups) { + return new HashSet<>(); + } + + @Override + public jakarta.validation.metadata.BeanDescriptor getConstraintsForClass(Class clazz) { + return null; + } + + @Override + public T unwrap(Class type) { + return null; + } + + @Override + public jakarta.validation.executable.ExecutableValidator forExecutables() { + return null; + } + } +} diff --git a/src/test/java/io/mosip/mimoto/util/parser/WellknownParserFactoryTest.java b/src/test/java/io/mosip/mimoto/util/parser/WellknownParserFactoryTest.java new file mode 100644 index 000000000..c106feb6a --- /dev/null +++ b/src/test/java/io/mosip/mimoto/util/parser/WellknownParserFactoryTest.java @@ -0,0 +1,79 @@ +package io.mosip.mimoto.util.parser; + +import io.mosip.mimoto.constant.VCSpecificationVersion; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; +import io.mosip.mimoto.exception.InvalidWellknownResponseException; +import jakarta.validation.Validator; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class WellknownParserFactoryTest { + + private WellknownParserFactory factory; + private WellknownResponseParser v1Parser; + private WellknownResponseParser draft13Parser; + + @BeforeEach + void setUp() { + v1Parser = new StubParser(VCSpecificationVersion.V1); + draft13Parser = new StubParser(VCSpecificationVersion.DRAFT_13); + factory = new WellknownParserFactory(List.of(v1Parser, draft13Parser)); + } + + @Test + void shouldReturnV1ParserForV1Version() { + WellknownResponseParser parser = factory.getParser(VCSpecificationVersion.V1); + assertSame(v1Parser, parser); + } + + @Test + void shouldReturnDraft13ParserForDraft13Version() { + WellknownResponseParser parser = factory.getParser(VCSpecificationVersion.DRAFT_13); + assertSame(draft13Parser, parser); + } + + @Test + void shouldThrowExceptionForUnregisteredVersion() { + WellknownParserFactory singleParserFactory = new WellknownParserFactory(List.of(v1Parser)); + + IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, + () -> singleParserFactory.getParser(VCSpecificationVersion.DRAFT_13)); + + assertTrue(exception.getMessage().contains("DRAFT_13")); + } + + @Test + void shouldHandleEmptyParserList() { + WellknownParserFactory emptyFactory = new WellknownParserFactory(List.of()); + + assertThrows(IllegalArgumentException.class, + () -> emptyFactory.getParser(VCSpecificationVersion.V1)); + } + + private static class StubParser implements WellknownResponseParser { + private final VCSpecificationVersion version; + + StubParser(VCSpecificationVersion version) { + this.version = version; + } + + @Override + public VCSpecificationVersion getSupportedVersion() { + return version; + } + + @Override + public CredentialIssuerWellKnownResponse parse(String jsonResponse) throws IOException { + return new CredentialIssuerWellKnownResponse(); + } + + @Override + public void validate(CredentialIssuerWellKnownResponse response, Validator validator) throws InvalidWellknownResponseException { + } + } +} From de949c9d6397d55aa53f4d047e3cf33015635aef Mon Sep 17 00:00:00 2001 From: Rudhhi Shah Date: Thu, 16 Apr 2026 12:37:24 +0530 Subject: [PATCH 846/860] feat(openid4vci): Add factory implementation for credential download part of #555 (#1076) * feat(openid4vci): Add factory implementation for downloading credential from issuer and support draft 13 part of #555 Signed-off-by: Rudhhi Shah * feat(openid4vci): Addressed comments, removed CredentialRequestService Interface, updated tests Signed-off-by: Rudhhi Shah * feat(openid4vci): remove private method description from Draft13VCDownloadHandler Signed-off-by: Rudhhi Shah * rebased, addressed comments, added tests Signed-off-by: Rudhhi Shah * feat(openid4vci): Refactor get Credential Well Known response, update test cases Signed-off-by: Durgesh Konga * feat(openid4vci): update Credentialmetadata object with claims and update credentialdefinition to null Signed-off-by: Durgesh Konga * feat(openid4vci): update credentialdefinition to unassigned Signed-off-by: Durgesh Konga --------- Signed-off-by: Rudhhi Shah Signed-off-by: Durgesh Konga Co-authored-by: Durgesh Konga --- ...t.java => Draft13VCCredentialRequest.java} | 2 +- .../wellknown/v1/CredentialMetaData.java | 9 +- .../v1/CredentialsSupportedResponse.java | 16 +- .../service/CredentialFormatHandler.java | 5 - .../service/CredentialRequestService.java | 17 -- .../mimoto/service/CredentialService.java | 16 +- ...a => Draft13CredentialRequestService.java} | 21 +- .../mosip/mimoto/service/IssuersService.java | 2 + .../mimoto/service/VCDownloadHandler.java | 28 +++ .../service/VCDownloadHandlerFactory.java | 28 +++ .../service/impl/CredentialServiceImpl.java | 94 ++------- .../impl/Draft13VCDownloadHandler.java | 69 +++++++ .../service/impl/IssuersServiceImpl.java | 7 +- .../impl/LdpVcCredentialFormatHandler.java | 14 -- .../impl/VcSdJwtCredentialFormatHandler.java | 5 - .../util/Draft13CredentialRequestBuilder.java | 45 ++++ .../mimoto/util/parser/V1WellknownParser.java | 13 +- .../service/CredentialRequestServiceTest.java | 14 +- .../mimoto/service/CredentialServiceTest.java | 176 +++++----------- .../service/Draft13VCDownloadHandlerTest.java | 194 ++++++++++++++++++ .../LdpVcCredentialFormatHandlerTest.java | 88 +------- .../service/VCDownloadHandlerFactoryTest.java | 49 +++++ .../VcSdJwtCredentialFormatHandlerTest.java | 21 -- .../Draft13CredentialRequestBuilderTest.java | 128 ++++++++++++ .../io/mosip/mimoto/util/TestUtilities.java | 4 +- .../util/parser/V1WellknownParserTest.java | 21 +- 26 files changed, 673 insertions(+), 413 deletions(-) rename src/main/java/io/mosip/mimoto/dto/mimoto/{VCCredentialRequest.java => Draft13VCCredentialRequest.java} (93%) delete mode 100644 src/main/java/io/mosip/mimoto/service/CredentialRequestService.java rename src/main/java/io/mosip/mimoto/service/{impl/CredentialRequestServiceImpl.java => Draft13CredentialRequestService.java} (84%) create mode 100644 src/main/java/io/mosip/mimoto/service/VCDownloadHandler.java create mode 100644 src/main/java/io/mosip/mimoto/service/VCDownloadHandlerFactory.java create mode 100644 src/main/java/io/mosip/mimoto/service/impl/Draft13VCDownloadHandler.java create mode 100644 src/main/java/io/mosip/mimoto/util/Draft13CredentialRequestBuilder.java create mode 100644 src/test/java/io/mosip/mimoto/service/Draft13VCDownloadHandlerTest.java create mode 100644 src/test/java/io/mosip/mimoto/service/VCDownloadHandlerFactoryTest.java create mode 100644 src/test/java/io/mosip/mimoto/util/Draft13CredentialRequestBuilderTest.java diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialRequest.java b/src/main/java/io/mosip/mimoto/dto/mimoto/Draft13VCCredentialRequest.java similarity index 93% rename from src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialRequest.java rename to src/main/java/io/mosip/mimoto/dto/mimoto/Draft13VCCredentialRequest.java index 0d870ac66..4fb8f483b 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/VCCredentialRequest.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/Draft13VCCredentialRequest.java @@ -13,7 +13,7 @@ @Data @Builder @JsonInclude(JsonInclude.Include.NON_NULL) -public class VCCredentialRequest { +public class Draft13VCCredentialRequest { @NotBlank private String format; diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/CredentialMetaData.java b/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/CredentialMetaData.java index 10ba2ac6e..67854a237 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/CredentialMetaData.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/CredentialMetaData.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.dto.mimoto.wellknown.v1; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.google.gson.annotations.SerializedName; import io.swagger.v3.oas.annotations.media.Schema; @@ -8,6 +9,9 @@ import lombok.Data; import java.util.List; +import java.util.Map; + +import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL; @Data public class CredentialMetaData { @@ -18,5 +22,8 @@ public class CredentialMetaData { @JsonProperty("display") @Schema(description = "Display Properties of the Supported Credential") private List<@Valid CredentialSupportedDisplayResponse> display; - + + @JsonInclude(NON_NULL) + @Schema(description = "List of Claims") + private Map claims; } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/CredentialsSupportedResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/CredentialsSupportedResponse.java index 678596c37..f0c1ad748 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/CredentialsSupportedResponse.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/CredentialsSupportedResponse.java @@ -12,8 +12,6 @@ import java.util.Map; -import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL; - @Data public class CredentialsSupportedResponse { @NotBlank(message = "Format must not be blank") @@ -24,7 +22,7 @@ public class CredentialsSupportedResponse { @Schema(description = "Scope of the Credential") private String scope; - @JsonInclude(NON_NULL) + @JsonInclude(JsonInclude.Include.NON_NULL) @Schema(description = "document Type of the Credential") private String doctype; @@ -35,21 +33,11 @@ public class CredentialsSupportedResponse { @Schema(description = "List of proof types supported") private Map<@NotEmpty String, @Valid ProofTypesSupported> proofTypesSupported; - @JsonInclude(NON_NULL) - @Schema(description = "List of Claims") - private Map claims; - - @SerializedName("credential_definition") - @JsonProperty("credential_definition") - @JsonInclude(NON_NULL) - @Schema(description = "Credential Definition of the VC") - private CredentialDefinitionResponseDto credentialDefinition; - @NotNull(message = "Credential metadata must not be null") @Valid @SerializedName("credential_metadata") @JsonProperty("credential_metadata") - @Schema(description = "Credential Metadata containing display properties") + @Schema(description = "Credential Metadata containing display and claims") private CredentialMetaData credentialMetadata; @Schema(description = "Identify the type or schema of the claims included") diff --git a/src/main/java/io/mosip/mimoto/service/CredentialFormatHandler.java b/src/main/java/io/mosip/mimoto/service/CredentialFormatHandler.java index 670ea111d..6255d7410 100644 --- a/src/main/java/io/mosip/mimoto/service/CredentialFormatHandler.java +++ b/src/main/java/io/mosip/mimoto/service/CredentialFormatHandler.java @@ -12,11 +12,6 @@ public interface CredentialFormatHandler { */ String getSupportedFormat(); - /** - * Build format-specific fields in the credential request object - */ - VCCredentialRequest buildCredentialRequest(VCCredentialRequestProof proof, CredentialsSupportedResponse credentialsSupportedResponse); - /** * Extract credential subject properties from VC response */ diff --git a/src/main/java/io/mosip/mimoto/service/CredentialRequestService.java b/src/main/java/io/mosip/mimoto/service/CredentialRequestService.java deleted file mode 100644 index e8c202108..000000000 --- a/src/main/java/io/mosip/mimoto/service/CredentialRequestService.java +++ /dev/null @@ -1,17 +0,0 @@ -package io.mosip.mimoto.service; - -import io.mosip.mimoto.dto.IssuerDTO; -import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; -import io.mosip.mimoto.dto.mimoto.VCCredentialRequest; - -public interface CredentialRequestService { - VCCredentialRequest buildRequest( - IssuerDTO issuerDTO, - String credentialConfigurationId, - CredentialIssuerWellKnownResponse wellKnownResponse, - String cNonce, - String walletId, - String base64EncodedWalletKey, - boolean isLoginFlow - ) throws Exception; -} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/CredentialService.java b/src/main/java/io/mosip/mimoto/service/CredentialService.java index ec1635012..47ff0f14b 100644 --- a/src/main/java/io/mosip/mimoto/service/CredentialService.java +++ b/src/main/java/io/mosip/mimoto/service/CredentialService.java @@ -1,8 +1,6 @@ package io.mosip.mimoto.service; import io.mosip.mimoto.dto.idp.TokenResponseDTO; -import io.mosip.mimoto.dto.mimoto.VCCredentialRequest; -import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponseDTO; import io.mosip.mimoto.exception.*; @@ -23,17 +21,6 @@ public interface CredentialService { */ ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String credentialType, TokenResponseDTO response, String credentialValidity, String locale) throws Exception; - /** - * Downloads credential from the issuer endpoint. - * - * @param credentialEndpoint The credential endpoint - * @param vcCredentialRequest The credential request - * @param accessToken The access token - * @return VCCredentialResponse containing the credential - * @throws InvalidCredentialResourceException If the credential resource is invalid - */ - VCCredentialResponse downloadCredential(String credentialEndpoint, VCCredentialRequest vcCredentialRequest, String accessToken) throws InvalidCredentialResourceException; - /** * Downloads credential and stores it in the database. * @@ -48,9 +35,10 @@ public interface CredentialService { * @throws CredentialProcessingException If processing fails * @throws ExternalServiceUnavailableException If an external service is unavailable * @throws VCVerificationException If credential verification fails + * @throws InvalidCredentialResourceException If the credential resource is invalid */ VerifiableCredentialResponseDTO downloadCredentialAndStoreInDB( TokenResponseDTO tokenResponse, String credentialConfigurationId, String walletId, String base64Key, String issuerId, String locale) - throws InvalidRequestException, CredentialProcessingException, ExternalServiceUnavailableException, VCVerificationException; + throws InvalidRequestException, CredentialProcessingException, ExternalServiceUnavailableException, VCVerificationException, InvalidCredentialResourceException; } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java b/src/main/java/io/mosip/mimoto/service/Draft13CredentialRequestService.java similarity index 84% rename from src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java rename to src/main/java/io/mosip/mimoto/service/Draft13CredentialRequestService.java index f621839ee..f8aec64f5 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialRequestServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/Draft13CredentialRequestService.java @@ -1,12 +1,9 @@ -package io.mosip.mimoto.service.impl; +package io.mosip.mimoto.service; import io.mosip.mimoto.constant.SigningAlgorithm; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.mimoto.*; -import io.mosip.mimoto.service.CredentialFormatHandler; -import io.mosip.mimoto.service.CredentialFormatHandlerFactory; -import io.mosip.mimoto.service.CredentialRequestService; -import io.mosip.mimoto.service.KeyPairRetrievalService; +import io.mosip.mimoto.util.Draft13CredentialRequestBuilder; import io.mosip.mimoto.util.SigningKeyUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; @@ -18,19 +15,19 @@ @Service @Slf4j -public class CredentialRequestServiceImpl implements CredentialRequestService { +public class Draft13CredentialRequestService { @Value("${signing.algorithms.priority.order:ED25519,ES256K,ES256,RS256}") private String signingAlgorithmsPriorityOrder; private static final SigningAlgorithm FALLBACK_SIGNING_ALG = SigningAlgorithm.ED25519; - private final CredentialFormatHandlerFactory credentialFormatHandlerFactory; + private final Draft13CredentialRequestBuilder draft13CredentialRequestBuilder; private final KeyPairRetrievalService keyPairService; - public CredentialRequestServiceImpl(CredentialFormatHandlerFactory credentialFormatHandlerFactory, KeyPairRetrievalService keyPairService) { - this.credentialFormatHandlerFactory = credentialFormatHandlerFactory; + public Draft13CredentialRequestService(Draft13CredentialRequestBuilder draft13CredentialRequestBuilder, KeyPairRetrievalService keyPairService) { + this.draft13CredentialRequestBuilder = draft13CredentialRequestBuilder; this.keyPairService = keyPairService; } @@ -39,8 +36,7 @@ public Set getSigningAlgorithmsPriorityOrder() { .map(String::trim).collect(Collectors.toCollection(LinkedHashSet::new)); } - @Override - public VCCredentialRequest buildRequest(IssuerDTO issuerDTO, + public Draft13VCCredentialRequest buildRequest(IssuerDTO issuerDTO, String credentialConfigurationId, CredentialIssuerWellKnownResponse wellKnownResponse, String cNonce, @@ -70,8 +66,7 @@ public VCCredentialRequest buildRequest(IssuerDTO issuerDTO, .proofType(proofType) .jwt(jwt) .build(); - CredentialFormatHandler handler = credentialFormatHandlerFactory.getHandler(format); - return handler.buildCredentialRequest(proof, credentialsSupportedResponse); + return draft13CredentialRequestBuilder.buildCredentialRequest(format, proof, credentialsSupportedResponse); }) .orElseThrow(() -> new IllegalArgumentException("No proof type available")); } diff --git a/src/main/java/io/mosip/mimoto/service/IssuersService.java b/src/main/java/io/mosip/mimoto/service/IssuersService.java index 035ddd135..908756c84 100644 --- a/src/main/java/io/mosip/mimoto/service/IssuersService.java +++ b/src/main/java/io/mosip/mimoto/service/IssuersService.java @@ -22,6 +22,8 @@ public interface IssuersService { CredentialIssuerConfiguration getIssuerConfiguration(String issuerId) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException; + CredentialIssuerWellKnownResponse getIssuerWellKnownResponse(String credentialIssuerHost) throws ApiNotAccessibleException, IOException, InvalidWellknownResponseException; + IssuerConfig getIssuerConfig(String issuerId, @NotBlank String credentialType) throws ApiNotAccessibleException, InvalidIssuerIdException; IssuersV2DTO getIssuersV2DTO() throws ApiNotAccessibleException, IOException; diff --git a/src/main/java/io/mosip/mimoto/service/VCDownloadHandler.java b/src/main/java/io/mosip/mimoto/service/VCDownloadHandler.java new file mode 100644 index 000000000..4587ea8cd --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/VCDownloadHandler.java @@ -0,0 +1,28 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.dto.IssuerDTO; +import io.mosip.mimoto.dto.idp.TokenResponseDTO; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; +import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; +import io.mosip.mimoto.exception.CredentialProcessingException; +import io.mosip.mimoto.exception.ExternalServiceUnavailableException; +import io.mosip.mimoto.exception.InvalidCredentialResourceException; + +public interface VCDownloadHandler { + + /** + * Downloads the credential from the issuer. + * + * @param issuerDTO The issuerDTO + * @param credentialConfigurationId The type of the credential + * @param credentialIssuerWellKnownResponse The well-known response of the credential issuer + * @param tokenResponse The token response containing the access token + * @param walletId The ID of the wallet + * @param base64Key The Base64-encoded wallet key + * @param isLoginFlow Flag indicating if the flow is for login + * @throws CredentialProcessingException If there is an error during credential processing + * @throws InvalidCredentialResourceException If the credential resource is invalid + * @throws ExternalServiceUnavailableException If an external service is unavailable + */ + VCCredentialResponse downloadCredential(IssuerDTO issuerDTO, String credentialConfigurationId, CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse, TokenResponseDTO tokenResponse, String walletId, String base64Key, boolean isLoginFlow) throws CredentialProcessingException, InvalidCredentialResourceException, ExternalServiceUnavailableException; +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/VCDownloadHandlerFactory.java b/src/main/java/io/mosip/mimoto/service/VCDownloadHandlerFactory.java new file mode 100644 index 000000000..78ffcc957 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/VCDownloadHandlerFactory.java @@ -0,0 +1,28 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.constant.VCSpecificationVersion; +import org.springframework.stereotype.Component; + +import java.util.Map; + +@Component +public class VCDownloadHandlerFactory { + + private final Map handlers; + + public VCDownloadHandlerFactory(Map handlers) { + this.handlers = handlers; + } + + public VCDownloadHandler getHandler(VCSpecificationVersion version) { + if(version == null) { + throw new NullPointerException("Version cannot be null"); + } + VCDownloadHandler processor = handlers.get(version.getVersion()); + if (processor == null) { + throw new IllegalArgumentException("Unsupported download version: " + version); + } + + return processor; + } +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java index be744f564..94575fac0 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.constant.VCSpecificationVersion; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.*; @@ -11,21 +12,20 @@ import io.mosip.mimoto.model.VerifiableCredential; import io.mosip.mimoto.repository.WalletCredentialsRepository; import io.mosip.mimoto.service.CredentialPDFGeneratorService; -import io.mosip.mimoto.service.CredentialRequestService; import io.mosip.mimoto.service.CredentialService; import io.mosip.mimoto.service.CredentialVerifierService; import io.mosip.mimoto.service.IssuersService; import io.mosip.mimoto.service.DataProtectionService; -import io.mosip.mimoto.util.RestApiClient; +import io.mosip.mimoto.service.VCDownloadHandler; +import io.mosip.mimoto.service.VCDownloadHandlerFactory; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.MediaType; import org.springframework.stereotype.Service; import java.io.ByteArrayInputStream; import java.util.UUID; +import static io.mosip.mimoto.constant.VCSpecificationVersion.DRAFT_13; import static io.mosip.mimoto.exception.ErrorConstants.*; @Slf4j @@ -37,67 +37,46 @@ public class CredentialServiceImpl implements CredentialService { private final WalletCredentialsRepository walletCredentialsRepository; private final IssuersService issuersService; private final CredentialVerifierService credentialVerifierService; - private final CredentialRequestService credentialRequestService; private final CredentialPDFGeneratorService credentialPDFGeneratorService; - private final RestApiClient restApiClient; private final DataShareServiceImpl dataShareService; + private final VCDownloadHandlerFactory vcDownloadHandlerFactory; - @Autowired public CredentialServiceImpl( ObjectMapper objectMapper, DataProtectionService dataProtectionService, WalletCredentialsRepository walletCredentialsRepository, IssuersService issuersService, CredentialVerifierService credentialVerifierService, - CredentialRequestService credentialRequestService, CredentialPDFGeneratorService credentialPDFGeneratorService, - RestApiClient restApiClient, - DataShareServiceImpl dataShareService) { + DataShareServiceImpl dataShareService, + VCDownloadHandlerFactory vcDownloadHandlerFactory) { this.objectMapper = objectMapper; this.dataProtectionService = dataProtectionService; this.walletCredentialsRepository = walletCredentialsRepository; this.issuersService = issuersService; this.credentialVerifierService = credentialVerifierService; - this.credentialRequestService = credentialRequestService; this.credentialPDFGeneratorService = credentialPDFGeneratorService; - this.restApiClient = restApiClient; this.dataShareService = dataShareService; + this.vcDownloadHandlerFactory = vcDownloadHandlerFactory; } @Override - public ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String credentialConfigurationId, TokenResponseDTO response, String credentialValidity, String locale) throws Exception { + public ByteArrayInputStream downloadCredentialAsPDF(String issuerId, String credentialConfigurationId, TokenResponseDTO tokenResponse, String credentialValidity, String locale) throws Exception { IssuerDTO issuerDTO = issuersService.getIssuerDetails(issuerId); - CredentialIssuerConfiguration credentialIssuerConfiguration = issuersService.getIssuerConfiguration(issuerId); - CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = new CredentialIssuerWellKnownResponse( - credentialIssuerConfiguration.getCredentialIssuer(), - credentialIssuerConfiguration.getAuthorizationServers(), - credentialIssuerConfiguration.getCredentialEndPoint(), - credentialIssuerConfiguration.getCredentialConfigurationsSupported()); + CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = issuersService.getIssuerWellKnownResponse(issuerDTO.getCredential_issuer_host()); CredentialsSupportedResponse credentialsSupportedResponse = credentialIssuerWellKnownResponse.getCredentialConfigurationsSupported().get(credentialConfigurationId); - VCCredentialRequest vcCredentialRequest = credentialRequestService.buildRequest(issuerDTO, credentialConfigurationId, credentialIssuerWellKnownResponse, response.getC_nonce(), null, null, false); - VCCredentialResponse vcCredentialResponse = downloadCredential(credentialIssuerWellKnownResponse.getCredentialEndPoint(), vcCredentialRequest, response.getAccess_token()); + VCDownloadHandler processor = vcDownloadHandlerFactory.getHandler(credentialIssuerWellKnownResponse.getVersion()); + VCCredentialResponse vcCredentialResponse = processor.downloadCredential(issuerDTO, credentialConfigurationId, credentialIssuerWellKnownResponse, tokenResponse, null, null, false); boolean verificationStatus = verifyCredential(vcCredentialResponse, issuerId, credentialConfigurationId); if (verificationStatus) { String dataShareUrl = QRCodeType.OnlineSharing.equals(issuerDTO.getQr_code_type()) ? dataShareService.storeDataInDataShare(objectMapper.writeValueAsString(vcCredentialResponse), credentialValidity) : ""; return credentialPDFGeneratorService.generatePdfForVerifiableCredential(credentialConfigurationId, vcCredentialResponse, issuerDTO, credentialsSupportedResponse, dataShareUrl, credentialValidity, locale); } - throw new VCVerificationException(SIGNATURE_VERIFICATION_EXCEPTION.getErrorCode(), - SIGNATURE_VERIFICATION_EXCEPTION.getErrorMessage()); - } - - @Override - public VCCredentialResponse downloadCredential(String credentialEndpoint, VCCredentialRequest vcCredentialRequest, String accessToken) throws InvalidCredentialResourceException { - VerifiableCredentialResponse response = restApiClient.postApi(credentialEndpoint, MediaType.APPLICATION_JSON, - vcCredentialRequest, VerifiableCredentialResponse.class, accessToken); - if (response == null) - throw new InvalidCredentialResourceException("VC Credential Issue API not accessible"); - log.debug("VC Credential Response received"); - - return new VCCredentialResponse(vcCredentialRequest.getFormat(), response.getCredential()); + throw new VCVerificationException(SIGNATURE_VERIFICATION_EXCEPTION.getErrorCode(), SIGNATURE_VERIFICATION_EXCEPTION.getErrorMessage()); } /** @@ -114,11 +93,12 @@ public VCCredentialResponse downloadCredential(String credentialEndpoint, VCCred * @throws CredentialProcessingException If processing fails. * @throws ExternalServiceUnavailableException If an external service is unavailable. * @throws VCVerificationException If credential verification fails. + * @throws InvalidCredentialResourceException If the credential resource is invalid. */ public VerifiableCredentialResponseDTO downloadCredentialAndStoreInDB( TokenResponseDTO tokenResponse, String credentialConfigurationId, String walletId, String base64Key, String issuerId, String locale) - throws InvalidRequestException, CredentialProcessingException, ExternalServiceUnavailableException, VCVerificationException { + throws InvalidRequestException, CredentialProcessingException, ExternalServiceUnavailableException, VCVerificationException, InvalidCredentialResourceException { // Validate inputs validateInputs(tokenResponse, credentialConfigurationId, walletId, base64Key, issuerId); @@ -126,11 +106,9 @@ public VerifiableCredentialResponseDTO downloadCredentialAndStoreInDB( // Fetch issuer configuration IssuerConfig issuerConfig = fetchIssuerConfig(issuerId, credentialConfigurationId); - // Generate credential request - VCCredentialRequest vcCredentialRequest = buildCredentialRequest(issuerConfig, credentialConfigurationId, tokenResponse, walletId, base64Key); - - // Download credential - VCCredentialResponse vcCredentialResponse = downloadCredentialFromIssuer(issuerConfig, vcCredentialRequest, tokenResponse, issuerId, credentialConfigurationId); + // Download credential from issuer + VCDownloadHandler processor = vcDownloadHandlerFactory.getHandler(issuerConfig.getWellKnownResponse().getVersion()); + VCCredentialResponse vcCredentialResponse = processor.downloadCredential(issuerConfig.getIssuerDTO(), credentialConfigurationId, issuerConfig.getWellKnownResponse(), tokenResponse, walletId, base64Key, true); // Verify credential boolean verificationStatus = verifyCredential(vcCredentialResponse, issuerId, credentialConfigurationId); @@ -189,42 +167,6 @@ private IssuerConfig fetchIssuerConfig(String issuerId, String credentialConfigu } } - /** - * Builds credential request. - */ - private VCCredentialRequest buildCredentialRequest(IssuerConfig issuerConfig, String credentialConfigurationId, TokenResponseDTO tokenResponse, - String walletId, String base64Key) throws CredentialProcessingException { - try { - return credentialRequestService.buildRequest( - issuerConfig.getIssuerDTO(), credentialConfigurationId, issuerConfig.getWellKnownResponse(), - tokenResponse.getC_nonce(), - walletId, base64Key, true); - } catch (Exception e) { - log.error("Failed to generate VC credential request for issuerId: {}", issuerConfig.getIssuerDTO().getIssuer_id(), e); - throw new CredentialProcessingException( - CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), - "Unable to generate credential request", e); - } - } - - /** - * Downloads credential from issuer. - */ - private VCCredentialResponse downloadCredentialFromIssuer(IssuerConfig issuerConfig, VCCredentialRequest vcCredentialRequest, - TokenResponseDTO tokenResponse, String issuerId, String credentialConfigurationId) - throws ExternalServiceUnavailableException { - try { - return downloadCredential( - issuerConfig.getWellKnownResponse().getCredentialEndPoint(), - vcCredentialRequest, tokenResponse.getAccess_token()); - } catch (Exception e) { - log.error("Failed to download credential for issuerId: {}, credentialConfigurationId: {}", issuerId, credentialConfigurationId, e); - throw new ExternalServiceUnavailableException( - SERVER_UNAVAILABLE.getErrorCode(), - "Unable to download credential from issuer", e); - } - } - /** * Verifies credential signature. */ diff --git a/src/main/java/io/mosip/mimoto/service/impl/Draft13VCDownloadHandler.java b/src/main/java/io/mosip/mimoto/service/impl/Draft13VCDownloadHandler.java new file mode 100644 index 000000000..1069ec252 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/impl/Draft13VCDownloadHandler.java @@ -0,0 +1,69 @@ +package io.mosip.mimoto.service.impl; + +import io.mosip.mimoto.dto.IssuerDTO; +import io.mosip.mimoto.dto.idp.TokenResponseDTO; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; +import io.mosip.mimoto.dto.mimoto.Draft13VCCredentialRequest; +import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; +import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponse; +import io.mosip.mimoto.exception.CredentialProcessingException; +import io.mosip.mimoto.exception.ExternalServiceUnavailableException; +import io.mosip.mimoto.exception.InvalidCredentialResourceException; +import io.mosip.mimoto.service.Draft13CredentialRequestService; +import io.mosip.mimoto.service.VCDownloadHandler; +import io.mosip.mimoto.util.RestApiClient; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Component; + +import static io.mosip.mimoto.exception.ErrorConstants.CREDENTIAL_DOWNLOAD_EXCEPTION; +import static io.mosip.mimoto.exception.ErrorConstants.SERVER_UNAVAILABLE; + +@Slf4j +@Component("draft-13") +public class Draft13VCDownloadHandler implements VCDownloadHandler { + private final Draft13CredentialRequestService draft13CredentialRequestService; + private final RestApiClient restApiClient; + + public Draft13VCDownloadHandler(Draft13CredentialRequestService draft13CredentialRequestService, RestApiClient restApiClient) { + this.draft13CredentialRequestService = draft13CredentialRequestService; + this.restApiClient = restApiClient; + } + + @Override + public VCCredentialResponse downloadCredential(IssuerDTO issuerDTO, String credentialConfigurationId, CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse, TokenResponseDTO tokenResponse, String walletId, String base64Key, boolean isLoginFlow) throws CredentialProcessingException, InvalidCredentialResourceException, ExternalServiceUnavailableException { + Draft13VCCredentialRequest vcCredentialRequest; + try { + vcCredentialRequest = draft13CredentialRequestService.buildRequest(issuerDTO, credentialConfigurationId, credentialIssuerWellKnownResponse, tokenResponse.getC_nonce(), walletId, base64Key, isLoginFlow); + } catch (Exception e) { + log.error("Failed to generate VC credential request for issuerId: {}", issuerDTO.getIssuer_id(), e); + throw new CredentialProcessingException(CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), "Unable to generate credential request", e); + } + + return fetchCredential(credentialIssuerWellKnownResponse.getCredentialEndPoint(), vcCredentialRequest, tokenResponse.getAccess_token(), issuerDTO.getIssuer_id(), credentialConfigurationId); + } + + private VCCredentialResponse fetchCredential(String credentialEndpoint, Draft13VCCredentialRequest vcCredentialRequest, String accessToken, String issuerId, String credentialConfigId) throws InvalidCredentialResourceException, ExternalServiceUnavailableException { + VerifiableCredentialResponse response; + + try { + response = restApiClient.postApi(credentialEndpoint, MediaType.APPLICATION_JSON, + vcCredentialRequest, VerifiableCredentialResponse.class, accessToken); + } catch (Exception e) { + String message = String.format("Unable to download credential from issuerId: %s, credentialConfigurationId: %s", issuerId, credentialConfigId); + throw new ExternalServiceUnavailableException(SERVER_UNAVAILABLE.getErrorCode(), message, e); + } + + if (response == null) { + String message = String.format("Unable to download credential from issuerId: %s, credentialConfigurationId: %s", issuerId, credentialConfigId); + throw new ExternalServiceUnavailableException(SERVER_UNAVAILABLE.getErrorCode(), message); + } + + if (response.getCredential() == null) { + throw new InvalidCredentialResourceException("Credential response did not contain a credential"); + } + + log.debug("VC Credential Response received"); + return new VCCredentialResponse(vcCredentialRequest.getFormat(), response.getCredential()); + } +} \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index 9320f6210..f8833b39e 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -114,7 +114,7 @@ public IssuersDTO getAllIssuers() throws ApiNotAccessibleException, IOException @Override public CredentialIssuerConfiguration getIssuerConfiguration(String issuerId) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { String credentialIssuerHost = getIssuerDetails(issuerId).getCredential_issuer_host(); - CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = issuersConfigUtil.getIssuerWellknown(credentialIssuerHost); + CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse = getIssuerWellKnownResponse(credentialIssuerHost); if(credentialIssuerWellKnownResponse.getAuthorizationServers() == null || credentialIssuerWellKnownResponse.getAuthorizationServers().isEmpty()) { credentialIssuerWellKnownResponse.setAuthorizationServers(List.of(credentialIssuerHost)); @@ -130,6 +130,11 @@ public CredentialIssuerConfiguration getIssuerConfiguration(String issuerId) thr ); } + @Override + public CredentialIssuerWellKnownResponse getIssuerWellKnownResponse(String credentialIssuerHost) throws ApiNotAccessibleException, IOException, InvalidWellknownResponseException { + return issuersConfigUtil.getIssuerWellknown(credentialIssuerHost); + } + @Override public IssuerConfig getIssuerConfig(String issuerId, @NotBlank String credentialType) throws ApiNotAccessibleException, InvalidIssuerIdException { log.info("Fetching issuer config for issuerId: {}", issuerId); diff --git a/src/main/java/io/mosip/mimoto/service/impl/LdpVcCredentialFormatHandler.java b/src/main/java/io/mosip/mimoto/service/impl/LdpVcCredentialFormatHandler.java index 7f885dfec..2890a9011 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/LdpVcCredentialFormatHandler.java +++ b/src/main/java/io/mosip/mimoto/service/impl/LdpVcCredentialFormatHandler.java @@ -26,20 +26,6 @@ public String getSupportedFormat() { return CredentialFormat.LDP_VC.getFormat(); } - @Override - public VCCredentialRequest buildCredentialRequest(VCCredentialRequestProof proof, CredentialsSupportedResponse credentialsSupportedResponse) { - - List credentialContext = credentialsSupportedResponse.getCredentialDefinition().getContext(); - if (credentialContext == null || credentialContext.isEmpty()) { - credentialContext = List.of("https://www.w3.org/2018/credentials/v1"); - } - - return VCCredentialRequest.builder().format(getSupportedFormat()) - .proof(proof) - .credentialDefinition(VCCredentialDefinition.builder().type(credentialsSupportedResponse.getCredentialDefinition().getType()).context(credentialContext).build()) - .build(); - } - @Override public Map extractCredentialClaims(VCCredentialResponse vcCredentialResponse) { VCCredentialProperties credential = objectMapper.convertValue(vcCredentialResponse.getCredential(), VCCredentialProperties.class); diff --git a/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java b/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java index 167eed41d..37dbb0ac4 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java +++ b/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java @@ -33,11 +33,6 @@ public String getSupportedFormat() { } - @Override - public VCCredentialRequest buildCredentialRequest(VCCredentialRequestProof proof, CredentialsSupportedResponse credentialsSupportedResponse) { - return VCCredentialRequest.builder().format(getSupportedFormat()).proof(proof).vct(credentialsSupportedResponse.getVct()).build(); - } - @Override public Map extractCredentialClaims(VCCredentialResponse vcCredentialResponse) { Object credential = vcCredentialResponse.getCredential(); diff --git a/src/main/java/io/mosip/mimoto/util/Draft13CredentialRequestBuilder.java b/src/main/java/io/mosip/mimoto/util/Draft13CredentialRequestBuilder.java new file mode 100644 index 000000000..b91ea707d --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/Draft13CredentialRequestBuilder.java @@ -0,0 +1,45 @@ +package io.mosip.mimoto.util; + +import io.mosip.mimoto.constant.CredentialFormat; +import io.mosip.mimoto.dto.mimoto.CredentialsSupportedResponse; +import io.mosip.mimoto.dto.mimoto.Draft13VCCredentialRequest; +import io.mosip.mimoto.dto.mimoto.VCCredentialDefinition; +import io.mosip.mimoto.dto.mimoto.VCCredentialRequestProof; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +public class Draft13CredentialRequestBuilder { + + public Draft13VCCredentialRequest buildCredentialRequest(String format, VCCredentialRequestProof proof, CredentialsSupportedResponse credentialsSupportedResponse) { + if (CredentialFormat.LDP_VC.getFormat().equals(format)) + return buildLdpVcCredentialRequest(proof, credentialsSupportedResponse); + else if (CredentialFormat.VC_SD_JWT.getFormat().equals(format) || CredentialFormat.DC_SD_JWT.getFormat().equals(format)) + return buildSdJwtCredentialRequest(format, proof, credentialsSupportedResponse); + else + throw new IllegalArgumentException("Unsupported credential format: " + format); + } + + private Draft13VCCredentialRequest buildLdpVcCredentialRequest(VCCredentialRequestProof proof, CredentialsSupportedResponse credentialsSupportedResponse) { + List credentialContext = credentialsSupportedResponse.getCredentialDefinition().getContext(); + if (credentialContext == null || credentialContext.isEmpty()) { + credentialContext = List.of("https://www.w3.org/2018/credentials/v1"); + } + + return Draft13VCCredentialRequest.builder().format(CredentialFormat.LDP_VC.getFormat()) + .proof(proof) + .credentialDefinition(VCCredentialDefinition.builder() + .type(credentialsSupportedResponse.getCredentialDefinition().getType()) + .context(credentialContext).build()) + .build(); + } + + private Draft13VCCredentialRequest buildSdJwtCredentialRequest(String format, VCCredentialRequestProof proof, CredentialsSupportedResponse credentialsSupportedResponse) { + return Draft13VCCredentialRequest + .builder() + .format(format) + .vct(credentialsSupportedResponse.getVct()).proof(proof) + .build(); + } +} diff --git a/src/main/java/io/mosip/mimoto/util/parser/V1WellknownParser.java b/src/main/java/io/mosip/mimoto/util/parser/V1WellknownParser.java index 9f291c404..192cac1e0 100644 --- a/src/main/java/io/mosip/mimoto/util/parser/V1WellknownParser.java +++ b/src/main/java/io/mosip/mimoto/util/parser/V1WellknownParser.java @@ -67,14 +67,15 @@ private CredentialsSupportedResponse toCredentialSupported(io.mosip.mimoto.dto.m credentialSupported.setScope(v1CredentialSupportedResponse.getScope()); credentialSupported.setDoctype(v1CredentialSupportedResponse.getDoctype()); credentialSupported.setProofTypesSupported(objectMapper.convertValue(v1CredentialSupportedResponse.getProofTypesSupported(), objectMapper.getTypeFactory().constructMapType(LinkedHashMap.class, String.class, io.mosip.mimoto.dto.mimoto.ProofTypesSupported.class))); - credentialSupported.setClaims(v1CredentialSupportedResponse.getClaims()); - credentialSupported.setCredentialDefinition(objectMapper.convertValue(v1CredentialSupportedResponse.getCredentialDefinition(), io.mosip.mimoto.dto.mimoto.CredentialDefinitionResponseDto.class)); credentialSupported.setVct(v1CredentialSupportedResponse.getVct()); - + CredentialMetaData metadata = v1CredentialSupportedResponse.getCredentialMetadata(); - if (metadata != null && metadata.getDisplay() != null) { - List display = metadata.getDisplay().stream().map(d -> objectMapper.convertValue(d, io.mosip.mimoto.dto.mimoto.CredentialSupportedDisplayResponse.class)).collect(Collectors.toList()); - credentialSupported.setDisplay(display); + if (metadata != null) { + if (metadata.getDisplay() != null) { + List display = metadata.getDisplay().stream().map(d -> objectMapper.convertValue(d, io.mosip.mimoto.dto.mimoto.CredentialSupportedDisplayResponse.class)).collect(Collectors.toList()); + credentialSupported.setDisplay(display); + } + credentialSupported.setClaims(metadata.getClaims()); } return credentialSupported; diff --git a/src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java index 1cfea8b78..18f46053d 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialRequestServiceTest.java @@ -5,7 +5,6 @@ import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.repository.ProofSigningKeyRepository; -import io.mosip.mimoto.service.impl.CredentialRequestServiceImpl; import io.mosip.mimoto.service.impl.LdpVcCredentialFormatHandler; import io.mosip.mimoto.util.*; import org.junit.After; @@ -30,14 +29,14 @@ import static org.mockito.Mockito.when; @RunWith(SpringRunner.class) -@SpringBootTest(classes = {CredentialRequestServiceImpl.class}) +@SpringBootTest(classes = {Draft13CredentialRequestService.class, Draft13CredentialRequestBuilder.class}) @TestPropertySource(locations = "classpath:application-test.properties") public class CredentialRequestServiceTest { @MockBean private ObjectMapper objectMapper; @Autowired - private CredentialRequestServiceImpl credentialRequestServiceImpl; + private Draft13CredentialRequestService credentialRequestServiceImpl; @MockBean private ProofSigningKeyRepository proofSigningKeyRepository; @@ -48,6 +47,9 @@ public class CredentialRequestServiceTest { @MockBean private KeyPairRetrievalService keyPairService; + @Autowired + private Draft13CredentialRequestBuilder draft13CredentialRequestBuilder; + private final MockedStatic keyGenerationUtilMockedStatic = Mockito.mockStatic(SigningKeyUtil.class, Mockito.withSettings().defaultAnswer(Mockito.CALLS_REAL_METHODS)); IssuerDTO issuerDTO; @@ -78,7 +80,7 @@ public void shouldHandleNullContextInCredentialSupportedResponse() throws Except Map.of("CredentialType1", credentialsSupportedResponse) ); - VCCredentialRequest result = credentialRequestServiceImpl.buildRequest( + Draft13VCCredentialRequest result = credentialRequestServiceImpl.buildRequest( issuerDTO, "CredentialType1", issuerWellKnownResponse, @@ -104,7 +106,7 @@ public void shouldHandleEmptyContextInCredentialSupportedResponse() throws Excep issuerWellKnownResponse.setCredentialConfigurationsSupported( Map.of("CredentialType1", credentialsSupportedResponse) ); - VCCredentialRequest result = credentialRequestServiceImpl.buildRequest( + Draft13VCCredentialRequest result = credentialRequestServiceImpl.buildRequest( issuerDTO, "CredentialType1", issuerWellKnownResponse, @@ -132,7 +134,7 @@ public void shouldHandleExistingContextWithSpecificValue() throws Exception { Map.of("CredentialType1", credentialsSupportedResponse) ); - VCCredentialRequest result = credentialRequestServiceImpl.buildRequest( + Draft13VCCredentialRequest result = credentialRequestServiceImpl.buildRequest( issuerDTO, "CredentialType1", issuerWellKnownResponse, diff --git a/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java index 596773b3e..393b47c08 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialServiceTest.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.service; +import io.mosip.mimoto.constant.VCSpecificationVersion; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.*; @@ -9,7 +10,6 @@ import io.mosip.mimoto.model.VerifiableCredential; import io.mosip.mimoto.service.impl.CredentialServiceImpl; import io.mosip.mimoto.service.impl.IssuersServiceImpl; -import io.mosip.mimoto.util.RestApiClient; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; import org.junit.Before; @@ -21,11 +21,9 @@ import org.mockito.junit.MockitoJUnitRunner; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.HttpEntity; -import org.springframework.http.MediaType; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; -import io.mosip.mimoto.exception.InvalidCredentialResourceException; -import io.mosip.mimoto.dto.mimoto.VCCredentialRequest; +import io.mosip.mimoto.util.TestUtilities; import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; import static org.mockito.Mockito.mock; import io.mosip.mimoto.repository.WalletCredentialsRepository; @@ -57,13 +55,13 @@ public class CredentialServiceTest { @Mock - CredentialRequestService credentialRequestService; + VCDownloadHandlerFactory vcDownloadHandlerFactory; @Mock - CredentialVerifierService credentialVerifierService; + VCDownloadHandler vcDownloadHandler; @Mock - RestApiClient restApiClient; + CredentialVerifierService credentialVerifierService; @InjectMocks CredentialServiceImpl credentialService; @@ -88,6 +86,7 @@ public class CredentialServiceTest { IssuerDTO issuerDTO; HttpEntity> mockRequest; CredentialIssuerConfiguration issuerConfig; + CredentialIssuerWellKnownResponse wellKnownResponse; @Before public void setUp() throws Exception { @@ -95,8 +94,12 @@ public void setUp() throws Exception { issuerDTO = getIssuerConfigDTO(issuerId); issuerConfig = getCredentialIssuerConfigurationResponseDto(issuerId, "CredentialType1", List.of()); + wellKnownResponse = getCredentialIssuerWellKnownResponseDto(issuerId, + Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); + wellKnownResponse.setVersion(VCSpecificationVersion.DRAFT_13); + Mockito.when(issuersService.getIssuerDetails(issuerId)).thenReturn(issuerDTO); - Mockito.when(issuersService.getIssuerConfiguration(issuerId)).thenReturn(issuerConfig); + Mockito.when(issuersService.getIssuerWellKnownResponse(issuerDTO.getCredential_issuer_host())).thenReturn(wellKnownResponse); tokenEndpoint = issuerConfig.getAuthorizationServerWellKnownResponse().getTokenEndpoint(); mockRequest = new HttpEntity<>(new LinkedMultiValueMap<>(Map.of( @@ -121,20 +124,10 @@ public void shouldParseHtmlStringToDocument() { @Test public void shouldThrowExceptionIfDownloadedVCSignatureVerificationFailed() throws Exception { - Mockito.when(issuersService.getIssuerDetails(issuerId)).thenReturn(issuerDTO); - Mockito.when(issuersService.getIssuerConfiguration(issuerId)).thenReturn(issuerConfig); - when(credentialRequestService.buildRequest(any(IssuerDTO.class), - any(String.class), - any(CredentialIssuerWellKnownResponse.class), - any(String.class), any(), any(), eq(false))).thenReturn(getVCCredentialRequestDTO()); - VerifiableCredentialResponse vcCredentialResponse = getVerifiableCredentialResponseDTO("CredentialType1"); - when(restApiClient.postApi( - any(String.class), - any(MediaType.class), - any(VCCredentialRequest.class), - eq(VerifiableCredentialResponse.class), - any(String.class) - )).thenReturn(vcCredentialResponse); + when(vcDownloadHandlerFactory.getHandler(VCSpecificationVersion.DRAFT_13)).thenReturn(vcDownloadHandler); + when(vcDownloadHandler.downloadCredential(any(IssuerDTO.class), any(String.class), + any(CredentialIssuerWellKnownResponse.class), any(TokenResponseDTO.class), + any(), any(), eq(false))).thenReturn(getVCCredentialResponseDTO("CredentialType1")); when(credentialVerifierService.verify(any(VCCredentialResponse.class))).thenReturn(false); VCVerificationException actualException = assertThrows(VCVerificationException.class, () -> credentialService.downloadCredentialAsPDF(issuerId, "CredentialType1", expectedTokenResponse, "once", "en")); @@ -144,20 +137,10 @@ public void shouldThrowExceptionIfDownloadedVCSignatureVerificationFailed() thro @Test public void shouldReturnDownloadedVCAsPDFIfSignatureVerificationIsSuccessful() throws Exception { - Mockito.when(issuersService.getIssuerDetails(issuerId)).thenReturn(issuerDTO); - Mockito.when(issuersService.getIssuerConfiguration(issuerId)).thenReturn(issuerConfig); - when(credentialRequestService.buildRequest(any(IssuerDTO.class), - any(String.class), - any(CredentialIssuerWellKnownResponse.class), - any(String.class), any(), any(), eq(false))).thenReturn(getVCCredentialRequestDTO()); - VerifiableCredentialResponse vcCredentialResponse = getVerifiableCredentialResponseDTO("CredentialType1"); - when(restApiClient.postApi( - any(String.class), - any(MediaType.class), - any(VCCredentialRequest.class), - eq(VerifiableCredentialResponse.class), - any(String.class) - )).thenReturn(vcCredentialResponse); + when(vcDownloadHandlerFactory.getHandler(VCSpecificationVersion.DRAFT_13)).thenReturn(vcDownloadHandler); + when(vcDownloadHandler.downloadCredential(any(IssuerDTO.class), any(String.class), + any(CredentialIssuerWellKnownResponse.class), any(TokenResponseDTO.class), + any(), any(), eq(false))).thenReturn(getVCCredentialResponseDTO("CredentialType1")); when(credentialVerifierService.verify(any(VCCredentialResponse.class))).thenReturn(true); issuerDTO.setQr_code_type(QRCodeType.None); @@ -166,7 +149,7 @@ public void shouldReturnDownloadedVCAsPDFIfSignatureVerificationIsSuccessful() t eq("CredentialType1"), any(VCCredentialResponse.class), eq(issuerDTO), - eq(issuerConfig.getCredentialConfigurationsSupported().get("CredentialType1")), + eq(wellKnownResponse.getCredentialConfigurationsSupported().get("CredentialType1")), eq(""), eq("once"), eq("en") @@ -178,52 +161,6 @@ public void shouldReturnDownloadedVCAsPDFIfSignatureVerificationIsSuccessful() t assertEquals(expectedPDFByteArray, actualPDFByteArray); } - @Test - public void shouldReturnVCCredentialResponseWhenDownloadCredentialIsSuccessful() throws Exception { - String credentialEndpoint = "https://example.com/credential"; - VCCredentialRequest vcCredentialRequest = getVCCredentialRequestDTO(); - String accessToken = "valid-access-token"; - - VerifiableCredentialResponse mockResponse = getVerifiableCredentialResponseDTO("CredentialType1"); - - when(restApiClient.postApi( - eq(credentialEndpoint), - eq(MediaType.APPLICATION_JSON), - eq(vcCredentialRequest), - eq(VerifiableCredentialResponse.class), - eq(accessToken) - )).thenReturn(mockResponse); - - VCCredentialResponse result = credentialService.downloadCredential( - credentialEndpoint, vcCredentialRequest, accessToken); - - assertNotNull(result); - assertEquals(vcCredentialRequest.getFormat(), result.getFormat()); - assertEquals(mockResponse.getCredential(), result.getCredential()); - } - - @Test - public void shouldThrowInvalidCredentialResourceExceptionWhenRestApiReturnsNull() { - String credentialEndpoint = "https://example.com/credential"; - VCCredentialRequest vcCredentialRequest = getVCCredentialRequestDTO(); - String accessToken = "valid-access-token"; - - when(restApiClient.postApi( - eq(credentialEndpoint), - eq(MediaType.APPLICATION_JSON), - eq(vcCredentialRequest), - eq(VerifiableCredentialResponse.class), - eq(accessToken) - )).thenReturn(null); - - InvalidCredentialResourceException exception = assertThrows( - InvalidCredentialResourceException.class, - () -> credentialService.downloadCredential(credentialEndpoint, vcCredentialRequest, accessToken) - ); - - assertTrue(exception.getMessage().contains("VC Credential Issue API not accessible")); - } - @Test public void shouldDownloadCredentialAndStoreInDBSuccessfully() throws Exception { // Setup test data @@ -239,8 +176,8 @@ public void shouldDownloadCredentialAndStoreInDBSuccessfully() throws Exception IssuerDTO mockIssuerDTO = getIssuerConfigDTO(issuerId); CredentialIssuerWellKnownResponse mockWellKnownResponse = new CredentialIssuerWellKnownResponse(); mockWellKnownResponse.setCredentialEndPoint("https://example.com/credential"); + mockWellKnownResponse.setVersion(VCSpecificationVersion.DRAFT_13); - VCCredentialRequest vcCredentialRequest = getVCCredentialRequestDTO(); VerifiableCredential savedCredential = new VerifiableCredential(); savedCredential.setId("credential-id-123"); @@ -250,10 +187,9 @@ public void shouldDownloadCredentialAndStoreInDBSuccessfully() throws Exception // Mock service calls when(issuersService.getIssuerConfig(issuerId, credentialConfigurationId)).thenReturn(issuerConfig); - when(credentialRequestService.buildRequest(any(), eq(credentialConfigurationId), any(), any(), eq(walletId), eq(base64Key), eq(true))) - .thenReturn(vcCredentialRequest); - when(restApiClient.postApi(any(), any(), eq(vcCredentialRequest), eq(VerifiableCredentialResponse.class), any())) - .thenReturn(getVerifiableCredentialResponseDTO(credentialConfigurationId)); + when(vcDownloadHandlerFactory.getHandler(VCSpecificationVersion.DRAFT_13)).thenReturn(vcDownloadHandler); + when(vcDownloadHandler.downloadCredential(any(), eq(credentialConfigurationId), any(), any(), eq(walletId), eq(base64Key), eq(true))) + .thenReturn(getVCCredentialResponseDTO(credentialConfigurationId)); when(credentialVerifierService.verify(any(VCCredentialResponse.class))).thenReturn(true); when(objectMapper.writeValueAsString(any())).thenReturn("{\"credential\":\"data\"}"); when(dataProtectionService.encryptCredential(any(), eq(base64Key))).thenReturn("encrypted-credential"); @@ -283,6 +219,7 @@ public void shouldThrowVCVerificationExceptionWhenVerificationFails() throws Exc IssuerDTO mockIssuerDTO = getIssuerConfigDTO(issuerId); CredentialIssuerWellKnownResponse mockWellKnownResponse = new CredentialIssuerWellKnownResponse(); mockWellKnownResponse.setCredentialEndPoint("https://example.com/credential"); + mockWellKnownResponse.setVersion(VCSpecificationVersion.DRAFT_13); // Setup issuer config mocks when(issuerConfig.getIssuerDTO()).thenReturn(mockIssuerDTO); @@ -290,10 +227,9 @@ public void shouldThrowVCVerificationExceptionWhenVerificationFails() throws Exc // Mock service calls when(issuersService.getIssuerConfig(issuerId, credentialConfigurationId)).thenReturn(issuerConfig); - when(credentialRequestService.buildRequest(any(), any(), any(), any(), any(), any(), eq(true))) - .thenReturn(getVCCredentialRequestDTO()); - when(restApiClient.postApi(any(), any(), any(), eq(VerifiableCredentialResponse.class), any())) - .thenReturn(getVerifiableCredentialResponseDTO(credentialConfigurationId)); + when(vcDownloadHandlerFactory.getHandler(VCSpecificationVersion.DRAFT_13)).thenReturn(vcDownloadHandler); + when(vcDownloadHandler.downloadCredential(any(), any(), any(), any(), any(), any(), eq(true))) + .thenReturn(getVCCredentialResponseDTO(credentialConfigurationId)); when(credentialVerifierService.verify(any())).thenReturn(false); // Execute and verify exception @@ -409,14 +345,16 @@ public void shouldThrowCredentialProcessingExceptionWhenBuildCredentialRequestFa IssuerConfig issuerConfig = mock(IssuerConfig.class); IssuerDTO mockIssuerDTO = getIssuerConfigDTO(issuerId); CredentialIssuerWellKnownResponse mockWellKnownResponse = new CredentialIssuerWellKnownResponse(); + mockWellKnownResponse.setVersion(VCSpecificationVersion.DRAFT_13); when(issuerConfig.getIssuerDTO()).thenReturn(mockIssuerDTO); when(issuerConfig.getWellKnownResponse()).thenReturn(mockWellKnownResponse); when(issuersService.getIssuerConfig(issuerId, credentialConfigurationId)).thenReturn(issuerConfig); + when(vcDownloadHandlerFactory.getHandler(VCSpecificationVersion.DRAFT_13)).thenReturn(vcDownloadHandler); - // Mock credentialRequestService to throw exception - when(credentialRequestService.buildRequest(any(), eq(credentialConfigurationId), any(), any(), eq(walletId), eq(base64Key), eq(true))) - .thenThrow(new RuntimeException("Failed to build credential request")); + // Mock vcDownloadHandler to throw exception (simulating build credential request failure) + when(vcDownloadHandler.downloadCredential(any(), eq(credentialConfigurationId), any(), any(), eq(walletId), eq(base64Key), eq(true))) + .thenThrow(new CredentialProcessingException(CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), "Unable to generate credential request")); // Execute and verify exception CredentialProcessingException exception = assertThrows(CredentialProcessingException.class, () -> @@ -429,7 +367,7 @@ public void shouldThrowCredentialProcessingExceptionWhenBuildCredentialRequestFa @Test public void shouldThrowExternalServiceUnavailableExceptionWhenDownloadCredentialFromIssuerFails() throws Exception { - TokenResponseDTO tokenResponse = getTokenResponseDTO(); + TokenResponseDTO tokenResponse = TestUtilities.getTokenResponseDTO(); String credentialConfigurationId = "CredentialType1"; String walletId = "wallet123"; String base64Key = "testKey123"; @@ -438,19 +376,19 @@ public void shouldThrowExternalServiceUnavailableExceptionWhenDownloadCredential // Mock dependencies for success until downloadCredential IssuerConfig issuerConfig = mock(IssuerConfig.class); - IssuerDTO mockIssuerDTO = getIssuerConfigDTO(issuerId); + IssuerDTO mockIssuerDTO = TestUtilities.getIssuerConfigDTO(issuerId); CredentialIssuerWellKnownResponse mockWellKnownResponse = new CredentialIssuerWellKnownResponse(); mockWellKnownResponse.setCredentialEndPoint("https://example.com/credential"); + mockWellKnownResponse.setVersion(VCSpecificationVersion.DRAFT_13); when(issuerConfig.getIssuerDTO()).thenReturn(mockIssuerDTO); when(issuerConfig.getWellKnownResponse()).thenReturn(mockWellKnownResponse); when(issuersService.getIssuerConfig(issuerId, credentialConfigurationId)).thenReturn(issuerConfig); - when(credentialRequestService.buildRequest(any(), any(), any(), any(), any(), any(), eq(true))) - .thenReturn(getVCCredentialRequestDTO()); + when(vcDownloadHandlerFactory.getHandler(VCSpecificationVersion.DRAFT_13)).thenReturn(vcDownloadHandler); - // Mock restApiClient to throw exception during credential download - when(restApiClient.postApi(any(), any(), any(), eq(VerifiableCredentialResponse.class), any())) - .thenThrow(new RuntimeException("Network timeout")); + // Mock vcDownloadHandler to throw exception during credential download + when(vcDownloadHandler.downloadCredential(any(), any(), any(), any(), any(), any(), eq(true))) + .thenThrow(new ExternalServiceUnavailableException(SERVER_UNAVAILABLE.getErrorCode(), SERVER_UNAVAILABLE.getErrorMessage())); // Execute and verify exception ExternalServiceUnavailableException exception = assertThrows(ExternalServiceUnavailableException.class, () -> @@ -458,7 +396,7 @@ public void shouldThrowExternalServiceUnavailableExceptionWhenDownloadCredential tokenResponse, credentialConfigurationId, walletId, base64Key, issuerId, locale)); assertEquals(SERVER_UNAVAILABLE.getErrorCode(), exception.getErrorCode()); - assertTrue(exception.getMessage().contains("Unable to download credential from issuer")); + assertTrue(exception.getMessage().contains(SERVER_UNAVAILABLE.getErrorMessage())); } @Test @@ -475,14 +413,14 @@ public void shouldThrowVCVerificationExceptionWhenCredentialVerifierServiceThrow IssuerDTO mockIssuerDTO = getIssuerConfigDTO(issuerId); CredentialIssuerWellKnownResponse mockWellKnownResponse = new CredentialIssuerWellKnownResponse(); mockWellKnownResponse.setCredentialEndPoint("https://example.com/credential"); + mockWellKnownResponse.setVersion(VCSpecificationVersion.DRAFT_13); when(issuerConfig.getIssuerDTO()).thenReturn(mockIssuerDTO); when(issuerConfig.getWellKnownResponse()).thenReturn(mockWellKnownResponse); when(issuersService.getIssuerConfig(issuerId, credentialConfigurationId)).thenReturn(issuerConfig); - when(credentialRequestService.buildRequest(any(), any(), any(), any(), any(), any(), eq(true))) - .thenReturn(getVCCredentialRequestDTO()); - when(restApiClient.postApi(any(), any(), any(), eq(VerifiableCredentialResponse.class), any())) - .thenReturn(getVerifiableCredentialResponseDTO(credentialConfigurationId)); + when(vcDownloadHandlerFactory.getHandler(VCSpecificationVersion.DRAFT_13)).thenReturn(vcDownloadHandler); + when(vcDownloadHandler.downloadCredential(any(), any(), any(), any(), any(), any(), eq(true))) + .thenReturn(getVCCredentialResponseDTO(credentialConfigurationId)); // Mock credentialVerifierService to throw exception when(credentialVerifierService.verify(any(VCCredentialResponse.class))) @@ -511,14 +449,14 @@ public void shouldThrowCredentialProcessingExceptionWhenSerializationFails() thr IssuerDTO mockIssuerDTO = getIssuerConfigDTO(issuerId); CredentialIssuerWellKnownResponse mockWellKnownResponse = new CredentialIssuerWellKnownResponse(); mockWellKnownResponse.setCredentialEndPoint("https://example.com/credential"); + mockWellKnownResponse.setVersion(VCSpecificationVersion.DRAFT_13); when(issuerConfig.getIssuerDTO()).thenReturn(mockIssuerDTO); when(issuerConfig.getWellKnownResponse()).thenReturn(mockWellKnownResponse); when(issuersService.getIssuerConfig(issuerId, credentialConfigurationId)).thenReturn(issuerConfig); - when(credentialRequestService.buildRequest(any(), any(), any(), any(), any(), any(), eq(true))) - .thenReturn(getVCCredentialRequestDTO()); - when(restApiClient.postApi(any(), any(), any(), eq(VerifiableCredentialResponse.class), any())) - .thenReturn(getVerifiableCredentialResponseDTO(credentialConfigurationId)); + when(vcDownloadHandlerFactory.getHandler(VCSpecificationVersion.DRAFT_13)).thenReturn(vcDownloadHandler); + when(vcDownloadHandler.downloadCredential(any(), any(), any(), any(), any(), any(), eq(true))) + .thenReturn(getVCCredentialResponseDTO(credentialConfigurationId)); when(credentialVerifierService.verify(any(VCCredentialResponse.class))).thenReturn(true); // Mock objectMapper to throw JsonProcessingException @@ -548,14 +486,14 @@ public void shouldThrowCredentialProcessingExceptionWhenEncryptionFails() throws IssuerDTO mockIssuerDTO = getIssuerConfigDTO(issuerId); CredentialIssuerWellKnownResponse mockWellKnownResponse = new CredentialIssuerWellKnownResponse(); mockWellKnownResponse.setCredentialEndPoint("https://example.com/credential"); + mockWellKnownResponse.setVersion(VCSpecificationVersion.DRAFT_13); when(issuerConfig.getIssuerDTO()).thenReturn(mockIssuerDTO); when(issuerConfig.getWellKnownResponse()).thenReturn(mockWellKnownResponse); when(issuersService.getIssuerConfig(issuerId, credentialConfigurationId)).thenReturn(issuerConfig); - when(credentialRequestService.buildRequest(any(), any(), any(), any(), any(), any(), eq(true))) - .thenReturn(getVCCredentialRequestDTO()); - when(restApiClient.postApi(any(), any(), any(), eq(VerifiableCredentialResponse.class), any())) - .thenReturn(getVerifiableCredentialResponseDTO(credentialConfigurationId)); + when(vcDownloadHandlerFactory.getHandler(VCSpecificationVersion.DRAFT_13)).thenReturn(vcDownloadHandler); + when(vcDownloadHandler.downloadCredential(any(), any(), any(), any(), any(), any(), eq(true))) + .thenReturn(getVCCredentialResponseDTO(credentialConfigurationId)); when(credentialVerifierService.verify(any(VCCredentialResponse.class))).thenReturn(true); when(objectMapper.writeValueAsString(any())).thenReturn("{\"credential\":\"data\"}"); @@ -586,14 +524,14 @@ public void shouldThrowCredentialProcessingExceptionWhenSaveCredentialFails() th IssuerDTO mockIssuerDTO = getIssuerConfigDTO(issuerId); CredentialIssuerWellKnownResponse mockWellKnownResponse = new CredentialIssuerWellKnownResponse(); mockWellKnownResponse.setCredentialEndPoint("https://example.com/credential"); + mockWellKnownResponse.setVersion(VCSpecificationVersion.DRAFT_13); when(issuerConfig.getIssuerDTO()).thenReturn(mockIssuerDTO); when(issuerConfig.getWellKnownResponse()).thenReturn(mockWellKnownResponse); when(issuersService.getIssuerConfig(issuerId, credentialConfigurationId)).thenReturn(issuerConfig); - when(credentialRequestService.buildRequest(any(), any(), any(), any(), any(), any(), eq(true))) - .thenReturn(getVCCredentialRequestDTO()); - when(restApiClient.postApi(any(), any(), any(), eq(VerifiableCredentialResponse.class), any())) - .thenReturn(getVerifiableCredentialResponseDTO(credentialConfigurationId)); + when(vcDownloadHandlerFactory.getHandler(VCSpecificationVersion.DRAFT_13)).thenReturn(vcDownloadHandler); + when(vcDownloadHandler.downloadCredential(any(), any(), any(), any(), any(), any(), eq(true))) + .thenReturn(getVCCredentialResponseDTO(credentialConfigurationId)); when(credentialVerifierService.verify(any(VCCredentialResponse.class))).thenReturn(true); when(objectMapper.writeValueAsString(any())).thenReturn("{\"credential\":\"data\"}"); when(dataProtectionService.encryptCredential(any(), eq(base64Key))).thenReturn("encrypted-credential"); diff --git a/src/test/java/io/mosip/mimoto/service/Draft13VCDownloadHandlerTest.java b/src/test/java/io/mosip/mimoto/service/Draft13VCDownloadHandlerTest.java new file mode 100644 index 000000000..624fefcce --- /dev/null +++ b/src/test/java/io/mosip/mimoto/service/Draft13VCDownloadHandlerTest.java @@ -0,0 +1,194 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.dto.IssuerDTO; +import io.mosip.mimoto.dto.idp.TokenResponseDTO; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; +import io.mosip.mimoto.dto.mimoto.Draft13VCCredentialRequest; +import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; +import io.mosip.mimoto.dto.mimoto.VerifiableCredentialResponse; +import io.mosip.mimoto.exception.CredentialProcessingException; +import io.mosip.mimoto.exception.ExternalServiceUnavailableException; +import io.mosip.mimoto.exception.InvalidCredentialResourceException; +import io.mosip.mimoto.service.impl.Draft13VCDownloadHandler; +import io.mosip.mimoto.util.RestApiClient; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.http.MediaType; + +import static io.mosip.mimoto.util.TestUtilities.*; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyBoolean; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +class Draft13VCDownloadHandlerTest { + + @Mock + private Draft13CredentialRequestService credentialRequestService; + + @Mock + private RestApiClient restApiClient; + + @InjectMocks + private Draft13VCDownloadHandler handler; + + private IssuerDTO issuerDTO; + private CredentialIssuerWellKnownResponse wellKnownResponse; + private TokenResponseDTO tokenResponse; + + @BeforeEach + void setUp() { + issuerDTO = new IssuerDTO(); + issuerDTO.setIssuer_id("issuer-123"); + + wellKnownResponse = new CredentialIssuerWellKnownResponse(); + wellKnownResponse.setCredentialEndPoint("https://example.com/credential"); + + tokenResponse = new TokenResponseDTO(); + tokenResponse.setC_nonce("nonce-123"); + tokenResponse.setAccess_token("valid-access-token"); + } + + @Test + void shouldReturnVCCredentialResponseWhenDownloadCredentialIsSuccessful() throws Exception { + String credentialConfigurationId = "config-1"; + String walletId = "wallet-1"; + String base64Key = "base64-key"; + boolean isLoginFlow = false; + + Draft13VCCredentialRequest request = getVCCredentialRequestDTO(); + request.setFormat("jwt_vc"); + + when(credentialRequestService.buildRequest(eq(issuerDTO), eq(credentialConfigurationId), + eq(wellKnownResponse), eq(tokenResponse.getC_nonce()), eq(walletId), eq(base64Key), eq(isLoginFlow))) + .thenReturn(request); + + VerifiableCredentialResponse mockResponse = new VerifiableCredentialResponse(); + mockResponse.setCredential("mock-credential-data"); + + when(restApiClient.postApi( + eq("https://example.com/credential"), + eq(MediaType.APPLICATION_JSON), + eq(request), + eq(VerifiableCredentialResponse.class), + eq("valid-access-token") + )).thenReturn(mockResponse); + + VCCredentialResponse result = handler.downloadCredential( + issuerDTO, credentialConfigurationId, wellKnownResponse, tokenResponse, walletId, base64Key, isLoginFlow); + + assertNotNull(result); + assertEquals(request.getFormat(), result.getFormat()); + assertEquals(mockResponse.getCredential(), result.getCredential()); + } + + @Test + void shouldThrowCredentialProcessingExceptionWhenBuildRequestFails() throws Exception { + String credentialConfigurationId = "config-1"; + String walletId = "wallet-1"; + String base64Key = "base64-key"; + boolean isLoginFlow = false; + + when(credentialRequestService.buildRequest(any(), anyString(), any(), anyString(), anyString(), anyString(), anyBoolean())) + .thenThrow(new RuntimeException("Build failed")); + + assertThrows(CredentialProcessingException.class, () -> + handler.downloadCredential(issuerDTO, credentialConfigurationId, wellKnownResponse, tokenResponse, walletId, base64Key, isLoginFlow) + ); + } + + @Test + void shouldThrowExternalServiceUnavailableExceptionWhenRestApiReturnsNull() throws Exception { + String credentialConfigurationId = "config-1"; + String walletId = "wallet-1"; + String base64Key = "base64-key"; + boolean isLoginFlow = false; + + Draft13VCCredentialRequest request = getVCCredentialRequestDTO(); + request.setFormat("jwt_vc"); + + when(credentialRequestService.buildRequest(eq(issuerDTO), eq(credentialConfigurationId), + eq(wellKnownResponse), eq(tokenResponse.getC_nonce()), eq(walletId), eq(base64Key), eq(isLoginFlow))) + .thenReturn(request); + + when(restApiClient.postApi( + eq("https://example.com/credential"), + eq(MediaType.APPLICATION_JSON), + eq(request), + eq(VerifiableCredentialResponse.class), + eq("valid-access-token") + )).thenReturn(null); + + ExternalServiceUnavailableException exception = assertThrows( + ExternalServiceUnavailableException.class, + () -> handler.downloadCredential(issuerDTO, credentialConfigurationId, wellKnownResponse, tokenResponse, walletId, base64Key, isLoginFlow) + ); + + assertTrue(exception.getMessage().contains("Unable to download credential from issuerId")); + } + + @Test + void shouldThrowInvalidCredentialResourceExceptionWhenRestApiReturnsResponseWithNullCredential() throws Exception { + String credentialConfigurationId = "config-1"; + String walletId = "wallet-1"; + String base64Key = "base64-key"; + boolean isLoginFlow = false; + + Draft13VCCredentialRequest request = getVCCredentialRequestDTO(); + request.setFormat("jwt_vc"); + + when(credentialRequestService.buildRequest(eq(issuerDTO), eq(credentialConfigurationId), + eq(wellKnownResponse), eq(tokenResponse.getC_nonce()), eq(walletId), eq(base64Key), eq(isLoginFlow))) + .thenReturn(request); + + VerifiableCredentialResponse mockResponse = new VerifiableCredentialResponse(); + mockResponse.setCredential(null); + + when(restApiClient.postApi( + eq("https://example.com/credential"), + eq(MediaType.APPLICATION_JSON), + eq(request), + eq(VerifiableCredentialResponse.class), + eq("valid-access-token") + )).thenReturn(mockResponse); + + InvalidCredentialResourceException exception = assertThrows( + InvalidCredentialResourceException.class, + () -> handler.downloadCredential(issuerDTO, credentialConfigurationId, wellKnownResponse, tokenResponse, walletId, base64Key, isLoginFlow) + ); + + assertTrue(exception.getMessage().contains("Credential response did not contain a credential")); + } + + @Test + void shouldThrowExternalServiceUnavailableExceptionWhenRestApiThrowsException() throws Exception { + String credentialConfigurationId = "config-1"; + String walletId = "wallet-1"; + String base64Key = "base64-key"; + boolean isLoginFlow = false; + + Draft13VCCredentialRequest request = getVCCredentialRequestDTO(); + request.setFormat("jwt_vc"); + + when(credentialRequestService.buildRequest(eq(issuerDTO), eq(credentialConfigurationId), + eq(wellKnownResponse), eq(tokenResponse.getC_nonce()), eq(walletId), eq(base64Key), eq(isLoginFlow))) + .thenReturn(request); + + when(restApiClient.postApi(anyString(), any(), any(), any(), anyString())) + .thenThrow(new RuntimeException("API down")); + + ExternalServiceUnavailableException exception = assertThrows( + ExternalServiceUnavailableException.class, + () -> handler.downloadCredential(issuerDTO, credentialConfigurationId, wellKnownResponse, tokenResponse, walletId, base64Key, isLoginFlow) + ); + + assertTrue(exception.getMessage().contains("Unable to download credential from issuerId")); + } +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/LdpVcCredentialFormatHandlerTest.java b/src/test/java/io/mosip/mimoto/service/LdpVcCredentialFormatHandlerTest.java index 371f46fa9..dc2fe3034 100644 --- a/src/test/java/io/mosip/mimoto/service/LdpVcCredentialFormatHandlerTest.java +++ b/src/test/java/io/mosip/mimoto/service/LdpVcCredentialFormatHandlerTest.java @@ -322,92 +322,6 @@ void loadDisplayPropertiesFromWellknownWithNullValuesShouldSkipNullValues() { } } - @Test - void buildCredentialRequestWithValidCredentialsSupportedResponseShouldReturnConfiguredRequest() { - // Given - VCCredentialRequest.VCCredentialRequestBuilder builder = VCCredentialRequest.builder(); - - List types = Arrays.asList("VerifiableCredential", "IdentityCredential"); - List context = Arrays.asList("https://www.w3.org/2018/credentials/v1", "https://example.com/contexts/identity/v1"); - - credentialDefinition.setType(types); - credentialDefinition.setContext(context); - credentialsSupportedResponse.setCredentialDefinition(credentialDefinition); - credentialsSupportedResponse.setVct("dd"); - - String credentialType = "IdentityCredential"; - VCCredentialRequestProof proof = VCCredentialRequestProof.builder() - .proofType("jwt") - .jwt("sample.jwt.token") - .build(); - - // When - VCCredentialRequest result = ldpVcCredentialFormatHandler.buildCredentialRequest( - proof, credentialsSupportedResponse); - - // Then - assertNotNull(result); - assertNotNull(result.getCredentialDefinition()); - assertEquals(types, result.getCredentialDefinition().getType()); - assertEquals(context, result.getCredentialDefinition().getContext()); - } - - @Test - void buildCredentialRequestWithNullContextShouldUseDefaultContext() { - // Given - VCCredentialRequest.VCCredentialRequestBuilder builder = VCCredentialRequest.builder(); - - List types = Arrays.asList("VerifiableCredential", "IdentityCredential"); - - credentialDefinition.setType(types); - credentialDefinition.setContext(null); // Null context - credentialsSupportedResponse.setCredentialDefinition(credentialDefinition); - - String credentialType = "IdentityCredential"; - VCCredentialRequestProof proof = VCCredentialRequestProof.builder() - .proofType("jwt") // or whatever proof type you expect - .jwt("sample.jwt.token") - .build(); - - // When - VCCredentialRequest result = ldpVcCredentialFormatHandler.buildCredentialRequest( - proof, credentialsSupportedResponse); - - // Then - assertNotNull(result); - assertNotNull(result.getCredentialDefinition()); - assertEquals(types, result.getCredentialDefinition().getType()); - assertEquals(List.of("https://www.w3.org/2018/credentials/v1"), result.getCredentialDefinition().getContext()); - } - - @Test - void buildCredentialRequestWithEmptyContextShouldUseDefaultContext() { - // Given - VCCredentialRequest.VCCredentialRequestBuilder builder = VCCredentialRequest.builder(); - - List types = Arrays.asList("VerifiableCredential", "IdentityCredential"); - - credentialDefinition.setType(types); - credentialDefinition.setContext(new ArrayList<>()); // Empty context - credentialsSupportedResponse.setCredentialDefinition(credentialDefinition); - - String credentialType = "IdentityCredential"; - VCCredentialRequestProof proof = VCCredentialRequestProof.builder() - .proofType("jwt") // or whatever proof type you expect - .jwt("sample.jwt.token") - .build(); - - // When - VCCredentialRequest result = ldpVcCredentialFormatHandler.buildCredentialRequest( - proof, credentialsSupportedResponse); - - // Then - assertNotNull(result); - assertNotNull(result.getCredentialDefinition()); - assertEquals(types, result.getCredentialDefinition().getType()); - assertEquals(List.of("https://www.w3.org/2018/credentials/v1"), result.getCredentialDefinition().getContext()); - } - @Test void getSupportedFormatShouldReturnLdpVcFormat() { // When @@ -572,4 +486,4 @@ void buildFallbackDisplayPropertiesWithIdFieldShouldExcludeIt() { assertFalse(result.containsKey("id")); // id should be excluded assertTrue(result.containsKey("firstName")); } -} +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/VCDownloadHandlerFactoryTest.java b/src/test/java/io/mosip/mimoto/service/VCDownloadHandlerFactoryTest.java new file mode 100644 index 000000000..6e650d9d6 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/service/VCDownloadHandlerFactoryTest.java @@ -0,0 +1,49 @@ +package io.mosip.mimoto.service; + +import static org.junit.jupiter.api.Assertions.*; + +import java.util.Map; +import java.util.HashMap; + +import io.mosip.mimoto.constant.VCSpecificationVersion; +import org.mockito.junit.jupiter.MockitoExtension; +import org.mockito.Mock; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.BeforeEach; + +@ExtendWith(MockitoExtension.class) +class VCDownloadHandlerFactoryTest { + @Mock + private VCDownloadHandler mockDraft13Handler; + + private VCDownloadHandlerFactory factory; + + @BeforeEach + void setUp() { + Map handlers = new HashMap<>(); + handlers.put(VCSpecificationVersion.DRAFT_13.getVersion(), mockDraft13Handler); + factory = new VCDownloadHandlerFactory(handlers); + } + + @Test + void shouldReturnHandlerForValidVersion() { + VCDownloadHandler handler = factory.getHandler(VCSpecificationVersion.DRAFT_13); + assertNotNull(handler); + assertEquals(mockDraft13Handler, handler); + } + + @Test + void shouldThrowExceptionForUnsupportedVersion() { + IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, + () -> factory.getHandler(VCSpecificationVersion.V1)); + assertEquals("Unsupported download version: V1", exception.getMessage()); + } + + @Test + void shouldThrowExceptionForNullVersion() { + NullPointerException exception = assertThrows(NullPointerException.class, + () -> factory.getHandler(null)); + assertEquals("Version cannot be null", exception.getMessage()); + } +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java b/src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java index 38a44211d..1117008c9 100644 --- a/src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java +++ b/src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java @@ -424,27 +424,6 @@ void loadDisplayPropertiesFromWellknownWithCustomOrderShouldRespectOrderAndAppen } } - @Test - void buildCredentialRequestShouldReturnBuiltRequest() { - // Given - VCCredentialRequestProof proof = VCCredentialRequestProof.builder() - .proofType("jwt") - .jwt("sample.jwt.token") - .build(); - - credentialsSupportedResponse.setVct("IdentityCredential"); - - // When - VCCredentialRequest result = vcSdJwtCredentialFormatHandler.buildCredentialRequest( - proof, credentialsSupportedResponse); - - // Then - assertNotNull(result); - assertEquals(CredentialFormat.VC_SD_JWT.getFormat(), result.getFormat()); - assertEquals(proof, result.getProof()); - assertEquals("IdentityCredential", result.getVct()); - } - @Test void getSupportedFormatShouldReturnCorrectFormat() { // When diff --git a/src/test/java/io/mosip/mimoto/util/Draft13CredentialRequestBuilderTest.java b/src/test/java/io/mosip/mimoto/util/Draft13CredentialRequestBuilderTest.java new file mode 100644 index 000000000..09a56423a --- /dev/null +++ b/src/test/java/io/mosip/mimoto/util/Draft13CredentialRequestBuilderTest.java @@ -0,0 +1,128 @@ +package io.mosip.mimoto.util; + +import io.mosip.mimoto.constant.CredentialFormat; +import io.mosip.mimoto.dto.mimoto.CredentialDefinitionResponseDto; +import io.mosip.mimoto.dto.mimoto.CredentialsSupportedResponse; +import io.mosip.mimoto.dto.mimoto.Draft13VCCredentialRequest; +import io.mosip.mimoto.dto.mimoto.VCCredentialRequestProof; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +@ExtendWith(MockitoExtension.class) +class Draft13CredentialRequestBuilderTest { + + @InjectMocks + private Draft13CredentialRequestBuilder builder; + + private CredentialsSupportedResponse credentialsSupportedResponse; + private CredentialDefinitionResponseDto credentialDefinition; + private VCCredentialRequestProof proof; + + @BeforeEach + void setUp() { + credentialsSupportedResponse = new CredentialsSupportedResponse(); + credentialDefinition = new CredentialDefinitionResponseDto(); + proof = VCCredentialRequestProof.builder() + .proofType("jwt") + .jwt("sample.jwt.token") + .build(); + } + + @Test + void buildCredentialRequest_LdpVcFormatWithValidContext_ReturnsCorrectRequest() { + List types = Arrays.asList("VerifiableCredential", "IdentityCredential"); + List context = Arrays.asList("https://www.w3.org/2018/credentials/v1", "https://example.com/contexts/identity/v1"); + + credentialDefinition.setType(types); + credentialDefinition.setContext(context); + credentialsSupportedResponse.setCredentialDefinition(credentialDefinition); + + Draft13VCCredentialRequest result = builder.buildCredentialRequest( + CredentialFormat.LDP_VC.getFormat(), proof, credentialsSupportedResponse); + + assertNotNull(result); + assertEquals(CredentialFormat.LDP_VC.getFormat(), result.getFormat()); + assertEquals(proof, result.getProof()); + assertNotNull(result.getCredentialDefinition()); + assertEquals(types, result.getCredentialDefinition().getType()); + assertEquals(context, result.getCredentialDefinition().getContext()); + } + + @Test + void buildCredentialRequest_LdpVcFormatWithNullContext_UsesDefaultContext() { + List types = Arrays.asList("VerifiableCredential", "IdentityCredential"); + + credentialDefinition.setType(types); + credentialDefinition.setContext(null); + credentialsSupportedResponse.setCredentialDefinition(credentialDefinition); + + Draft13VCCredentialRequest result = builder.buildCredentialRequest( + CredentialFormat.LDP_VC.getFormat(), proof, credentialsSupportedResponse); + + assertNotNull(result); + assertNotNull(result.getCredentialDefinition()); + assertEquals(types, result.getCredentialDefinition().getType()); + assertEquals(List.of("https://www.w3.org/2018/credentials/v1"), result.getCredentialDefinition().getContext()); + } + + @Test + void buildCredentialRequest_LdpVcFormatWithEmptyContext_UsesDefaultContext() { + List types = Arrays.asList("VerifiableCredential", "IdentityCredential"); + + credentialDefinition.setType(types); + credentialDefinition.setContext(new ArrayList<>()); + credentialsSupportedResponse.setCredentialDefinition(credentialDefinition); + + Draft13VCCredentialRequest result = builder.buildCredentialRequest( + CredentialFormat.LDP_VC.getFormat(), proof, credentialsSupportedResponse); + + assertNotNull(result); + assertNotNull(result.getCredentialDefinition()); + assertEquals(types, result.getCredentialDefinition().getType()); + assertEquals(List.of("https://www.w3.org/2018/credentials/v1"), result.getCredentialDefinition().getContext()); + } + + @Test + void buildCredentialRequest_SdJwtFormat_ReturnsCorrectRequest() { + credentialsSupportedResponse.setVct("IdentityCredential"); + + Draft13VCCredentialRequest result = builder.buildCredentialRequest( + CredentialFormat.VC_SD_JWT.getFormat(), proof, credentialsSupportedResponse); + + assertNotNull(result); + assertEquals(CredentialFormat.VC_SD_JWT.getFormat(), result.getFormat()); + assertEquals(proof, result.getProof()); + assertEquals("IdentityCredential", result.getVct()); + } + + @Test + void buildCredentialRequest_DcSdJwtFormat_ReturnsCorrectRequest() { + credentialsSupportedResponse.setVct("IdentityCredential"); + + Draft13VCCredentialRequest result = builder.buildCredentialRequest( + CredentialFormat.DC_SD_JWT.getFormat(), proof, credentialsSupportedResponse); + + assertNotNull(result); + assertEquals(CredentialFormat.DC_SD_JWT.getFormat(), result.getFormat()); + assertEquals(proof, result.getProof()); + assertEquals("IdentityCredential", result.getVct()); + } + + @Test + void buildCredentialRequest_UnsupportedFormat_ThrowsIllegalArgumentException() { + IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> { + builder.buildCredentialRequest("UNSUPPORTED_FORMAT", proof, credentialsSupportedResponse); + }); + + assertEquals("Unsupported credential format: UNSUPPORTED_FORMAT", exception.getMessage()); + } +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index 788772972..2c2c65b77 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -342,9 +342,9 @@ public static VCCredentialProperties getVCCredentialPropertiesDTO(String type) { .credentialSubject(credentialSubject).build(); } - public static VCCredentialRequest getVCCredentialRequestDTO() { + public static Draft13VCCredentialRequest getVCCredentialRequestDTO() { CredentialsSupportedResponse credentialsSupportedResponse = getCredentialSupportedResponse("CredentialType1"); - return VCCredentialRequest.builder() + return Draft13VCCredentialRequest.builder() .format(credentialsSupportedResponse.getFormat()) .proof(VCCredentialRequestProof.builder() .proofType(credentialsSupportedResponse.getProofTypesSupported().keySet().stream().findFirst().get()) diff --git a/src/test/java/io/mosip/mimoto/util/parser/V1WellknownParserTest.java b/src/test/java/io/mosip/mimoto/util/parser/V1WellknownParserTest.java index aa4ec6c93..a731a1c56 100644 --- a/src/test/java/io/mosip/mimoto/util/parser/V1WellknownParserTest.java +++ b/src/test/java/io/mosip/mimoto/util/parser/V1WellknownParserTest.java @@ -95,7 +95,6 @@ void shouldParseV1ResponseWithNullCredentialMetadata() throws IOException { "proof_types_supported": { "jwt": {"proof_signing_alg_values_supported": ["ES256"]} }, - "claims": {"name": {}}, "vct": "TestVCT" } } @@ -107,9 +106,10 @@ void shouldParseV1ResponseWithNullCredentialMetadata() throws IOException { CredentialsSupportedResponse cred = result.getCredentialConfigurationsSupported().get("TestCred"); assertNotNull(cred); assertNull(cred.getDisplay()); + assertNull(cred.getClaims()); assertEquals("mso_mdoc", cred.getFormat()); assertEquals("org.iso.18013.5.1.mDL", cred.getDoctype()); - assertNotNull(cred.getClaims()); + assertNull(cred.getCredentialDefinition()); assertNull(result.getNonceEndpoint()); } @@ -130,16 +130,12 @@ void shouldMapAllFieldsFromV1Config() throws IOException { "jwt": {"proof_signing_alg_values_supported": ["ES256"]}, "cwt": {"proof_signing_alg_values_supported": ["EdDSA"]} }, - "claims": {"field1": {}, "field2": {}}, - "credential_definition": { - "type": ["VerifiableCredential"], - "credentialSubject": {"name": {"display": [{"name": "Name", "locale": "en"}]}} - }, "credential_metadata": { "display": [ {"name": "Credential One", "locale": "en"}, {"name": "Credenziale Uno", "locale": "it"} - ] + ], + "claims": {"field1": {}, "field2": {}} }, "vct": "VCT1" } @@ -156,8 +152,7 @@ void shouldMapAllFieldsFromV1Config() throws IOException { assertEquals("doctype1", cred.getDoctype()); assertEquals(2, cred.getProofTypesSupported().size()); assertEquals(2, cred.getClaims().size()); - assertNotNull(cred.getCredentialDefinition()); - assertEquals(List.of("VerifiableCredential"), cred.getCredentialDefinition().getType()); + assertNull(cred.getCredentialDefinition()); assertEquals(2, cred.getDisplay().size()); assertEquals("VCT1", cred.getVct()); } @@ -212,7 +207,9 @@ void shouldParseV1ResponseWithCredentialMetadataButNoDisplay() throws IOExceptio "proof_types_supported": { "jwt": {"proof_signing_alg_values_supported": ["ES256"]} }, - "credential_metadata": {} + "credential_metadata": { + "claims": {"given_name": {}} + } } } } @@ -224,6 +221,8 @@ void shouldParseV1ResponseWithCredentialMetadataButNoDisplay() throws IOExceptio assertNotNull(cred); assertNull(cred.getDisplay()); assertEquals("ldp_vc", cred.getFormat()); + assertNotNull(cred.getClaims()); + assertEquals(1, cred.getClaims().size()); } @Test From c89e6d9d98e2f468348cedd483dcb35f6af4fdee Mon Sep 17 00:00:00 2001 From: Sradha Mohanty Date: Thu, 16 Apr 2026 17:56:45 +0530 Subject: [PATCH 847/860] MOSIP-44709 (#1069) Signed-off-by: Sradha Mohanty --- .../inji/testrig/apirig/mimoto/testrunner/InjiTestRunner.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testrunner/InjiTestRunner.java b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testrunner/InjiTestRunner.java index 3819d3664..094670f0d 100644 --- a/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testrunner/InjiTestRunner.java +++ b/api-test/src/main/java/io/inji/testrig/apirig/mimoto/testrunner/InjiTestRunner.java @@ -86,7 +86,7 @@ public static void main(String[] arg) { MimotoConfigManager.getEsignetBaseUrl(); HealthChecker healthcheck = new HealthChecker(); - healthcheck.setCurrentRunningModule(BaseTestCase.currentModule); + healthcheck.setCurrentRunningModule(GlobalConstants.MIMOTO); Thread trigger = new Thread(healthcheck); trigger.start(); From c661bcecde8b350b67062fea5b3bad53153c8931 Mon Sep 17 00:00:00 2001 From: Rudhhi Shah Date: Fri, 17 Apr 2026 11:20:21 +0530 Subject: [PATCH 848/860] [INJIWEB-1883] Update the deployment variables used to fetch database hostname and port (#1071) (#1080) Signed-off-by: jackjain Signed-off-by: Rudhhi Shah Co-authored-by: Jack --- deploy/mimoto/keygen-mimoto.yaml | 4 ++-- deploy/mimoto/values.yaml | 4 ++-- src/main/resources/application-default.properties | 4 ++-- src/main/resources/application-local.properties | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/deploy/mimoto/keygen-mimoto.yaml b/deploy/mimoto/keygen-mimoto.yaml index ceb6fe335..a64d8db36 100644 --- a/deploy/mimoto/keygen-mimoto.yaml +++ b/deploy/mimoto/keygen-mimoto.yaml @@ -4,7 +4,7 @@ extraEnvVars: secretKeyRef: name: db-common-secrets key: db-dbuser-password - - name: MOSIP_MIMOTO_DATABASE_HOSTNAME + - name: INJI_MIMOTO_DATABASE_HOSTNAME value: postgres-postresql.postgres - - name: MOSIP_MIMOTO_DATABASE_PORT + - name: INJI_MIMOTO_DATABASE_PORT value: "5432" diff --git a/deploy/mimoto/values.yaml b/deploy/mimoto/values.yaml index ffab8e700..64a785c79 100644 --- a/deploy/mimoto/values.yaml +++ b/deploy/mimoto/values.yaml @@ -19,7 +19,7 @@ extraEnvVars: secretKeyRef: name: db-common-secrets key: db-dbuser-password - - name: MOSIP_MIMOTO_DATABASE_HOSTNAME + - name: INJI_MIMOTO_DATABASE_HOSTNAME value: postgres-postgresql.postgres - - name: MOSIP_MIMOTO_DATABASE_PORT + - name: INJI_MIMOTO_DATABASE_PORT value: "5432" diff --git a/src/main/resources/application-default.properties b/src/main/resources/application-default.properties index c84c1ebd0..a9bb97fd2 100644 --- a/src/main/resources/application-default.properties +++ b/src/main/resources/application-default.properties @@ -66,7 +66,7 @@ mosip.kernel.keymanager.certificate.default.country=IN # Specifies the driver class name for the PostgreSQL database, required for the application to interact with the database keymanager.persistence.jdbc.driver=org.postgresql.Driver # Specifies the JDBC URL for connecting to the PostgreSQL database, required to establish a connection to the inji_mimoto database -keymanager_database_url = jdbc:postgresql://${mosip.mimoto.database.hostname}:${mosip.mimoto.database.port}/inji_mimoto +keymanager_database_url = jdbc:postgresql://${inji.mimoto.database.hostname}:${inji.mimoto.database.port}/inji_mimoto # Defines the password for accessing the PostgreSQL database, required for authentication keymanager_database_password=${db.dbuser.password} # Defines the username for accessing the PostgreSQL database, required for authentication @@ -141,7 +141,7 @@ spring.security.oauth2.client.provider.google.phoneNumberAttribute=phone_number #Database configuration # Specifies the JDBC URL for connecting to the PostgreSQL database, required to establish a connection to the inji_mimoto database -spring.datasource.url=jdbc:postgresql://${mosip.mimoto.database.hostname}:${mosip.mimoto.database.port}/inji_mimoto +spring.datasource.url=jdbc:postgresql://${inji.mimoto.database.hostname}:${inji.mimoto.database.port}/inji_mimoto # Defines the username for accessing the PostgreSQL database, required for authentication spring.datasource.username=mimotouser # Defines the password for accessing the PostgreSQL database, required for authentication diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index c606a9231..bc19fa0f2 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -258,9 +258,9 @@ spring.cache.type=caffeine spring.session.store-type=caffeine # Defines the hostname where the database is hosted -mosip.mimoto.database.hostname=localhost +inji.mimoto.database.hostname=localhost # Defines the port number on which database is running and available -mosip.mimoto.database.port=5432 +inji.mimoto.database.port=5432 # Database configuration # Defines the username for accessing the PostgreSQL database, required for authentication From e277a8773b7b05d5c2a54973af78d59b059e6b26 Mon Sep 17 00:00:00 2001 From: Madhuravas reddy Date: Fri, 17 Apr 2026 14:35:53 +0530 Subject: [PATCH 849/860] fix(inji-web): add error handling for invalid transaction data in OpenID4VP (#1073) * INJIWEB-1887 added error execption for Invalid transaction data in OpenID4VP Signed-off-by: Madhuravas reddy * Added payload error exception Signed-off-by: Madhuravas reddy * removed call name to keep existing parameter Signed-off-by: Madhuravas reddy * Added test cases to cover toOpenId4VpException method Signed-off-by: Madhuravas reddy * Refactor OpenID4VPService: rename toOpenId4VpException to openId4VPErrorException and make it private Signed-off-by: Madhuravas reddy --------- Signed-off-by: Madhuravas reddy --- .../mimoto/service/impl/OpenID4VPService.java | 31 ++- .../mimoto/service/OpenID4VPServiceTest.java | 180 +++++++++++++++++- 2 files changed, 207 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/mosip/mimoto/service/impl/OpenID4VPService.java b/src/main/java/io/mosip/mimoto/service/impl/OpenID4VPService.java index f6a63721a..93dcb06e6 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/OpenID4VPService.java +++ b/src/main/java/io/mosip/mimoto/service/impl/OpenID4VPService.java @@ -10,6 +10,7 @@ import io.mosip.openID4VP.authorizationRequest.Verifier; import io.mosip.openID4VP.authorizationRequest.WalletMetadata; import io.mosip.openID4VP.authorizationRequest.presentationDefinition.PresentationDefinition; +import io.mosip.openID4VP.common.OpenID4VPErrorCodes; import io.mosip.openID4VP.constants.VPFormatType; import io.mosip.openID4VP.exceptions.OpenID4VPExceptions; import io.mosip.openID4VP.verifier.VerifierResponse; @@ -81,11 +82,35 @@ public VerifierResponse sendErrorToVerifier(VerifiablePresentationSessionData se .toList(); // authenticateVerifier to populate internal state in OpenID4VP before sending error - AuthorizationRequest authorizationRequest = openID4VP.authenticateVerifier(sessionData.getAuthorizationRequest(), preRegisteredVerifiers, sessionData.isVerifierClientPreregistered()); + openID4VP.authenticateVerifier(sessionData.getAuthorizationRequest(), preRegisteredVerifiers, sessionData.isVerifierClientPreregistered()); - OpenID4VPExceptions.AccessDenied accessDeniedException = new OpenID4VPExceptions.AccessDenied(payload.getErrorMessage(), "OpenID4VPService"); - VerifierResponse verifierResponse = openID4VP.sendErrorInfoToVerifier(accessDeniedException); + Exception errorForVerifier = openId4VPErrorException(payload); + VerifierResponse verifierResponse = openID4VP.sendErrorInfoToVerifier(errorForVerifier); log.info("Sent rejection to verifier for presentationId {}. Response: {}", sessionData.getPresentationId(), verifierResponse); return verifierResponse; } + + /** + * Maps wallet {@link ErrorDTO#errorCode} to inji-openid4vp exceptions {@code error} + * matches (e.g. {@link OpenID4VPErrorCodes#INVALID_TRANSACTION_DATA} vs {@link OpenID4VPErrorCodes#ACCESS_DENIED}). + */ + private Exception openId4VPErrorException(ErrorDTO payload) { + if (payload == null) { + throw new IllegalArgumentException("Invalid error payload"); + } + String message = payload.getErrorMessage() != null ? payload.getErrorMessage() : ""; + String code = payload.getErrorCode(); + + if (code == null || code.isBlank()) { + return new OpenID4VPExceptions.AccessDenied(message, "OpenID4VPService"); + } + if (OpenID4VPErrorCodes.ACCESS_DENIED.equals(code)) { + return new OpenID4VPExceptions.AccessDenied(message, "OpenID4VPService"); + } + if (OpenID4VPErrorCodes.INVALID_TRANSACTION_DATA.equals(code)) { + return new OpenID4VPExceptions.InvalidTransactionData(message, "OpenID4VPService"); + } + // Default to AccessDenied for any unrecognized error codes + return new OpenID4VPExceptions.AccessDenied(message, "OpenID4VPService"); + } } \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/OpenID4VPServiceTest.java b/src/test/java/io/mosip/mimoto/service/OpenID4VPServiceTest.java index 5be514d1c..264a1d7d3 100644 --- a/src/test/java/io/mosip/mimoto/service/OpenID4VPServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/OpenID4VPServiceTest.java @@ -10,11 +10,14 @@ import io.mosip.openID4VP.OpenID4VP; import io.mosip.openID4VP.authorizationRequest.AuthorizationRequest; import io.mosip.openID4VP.authorizationRequest.presentationDefinition.PresentationDefinition; +import io.mosip.openID4VP.common.OpenID4VPErrorCodes; +import io.mosip.openID4VP.exceptions.OpenID4VPExceptions; import io.mosip.openID4VP.verifier.VerifierResponse; import lombok.extern.slf4j.Slf4j; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; @@ -356,7 +359,182 @@ public void testSendErrorToVerifierSuccess() throws Exception { assertEquals(mockResponse, response); verify(verifierService).getTrustedVerifiers(); verify(mockOpenID4VP).authenticateVerifier(eq("authorization-request"), anyList(), eq(true)); - verify(mockOpenID4VP).sendErrorInfoToVerifier(any()); + ArgumentCaptor errorCaptor = ArgumentCaptor.forClass(Exception.class); + verify(mockOpenID4VP).sendErrorInfoToVerifier(errorCaptor.capture()); + assertTrue(errorCaptor.getValue() instanceof OpenID4VPExceptions.AccessDenied); + assertEquals(OpenID4VPErrorCodes.ACCESS_DENIED, + ((OpenID4VPExceptions) errorCaptor.getValue()).getErrorCode()); + } + + @Test + public void testSendErrorToVerifierUsesInvalidTransactionDataWhenErrorCodeSet() throws Exception { + when(verifierService.getTrustedVerifiers()).thenReturn(mockVerifiersDTO); + + OpenID4VP mockOpenID4VP = mock(OpenID4VP.class); + VerifierResponse mockResponse = mock(VerifierResponse.class); + + when(mockOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(mockAuthorizationRequest); + when(mockOpenID4VP.sendErrorInfoToVerifier(any())).thenReturn(mockResponse); + + OpenID4VPService spyService = spy(openID4VPService); + doReturn(mockOpenID4VP).when(spyService).create(anyString()); + + VerifiablePresentationSessionData sessionData = mock(VerifiablePresentationSessionData.class); + when(sessionData.getPresentationId()).thenReturn("presentation-123"); + when(sessionData.getAuthorizationRequest()).thenReturn("authorization-request"); + when(sessionData.isVerifierClientPreregistered()).thenReturn(true); + + ErrorDTO payload = mock(ErrorDTO.class); + when(payload.getErrorCode()).thenReturn(OpenID4VPErrorCodes.INVALID_TRANSACTION_DATA); + when(payload.getErrorMessage()).thenReturn("No matching credentials"); + + VerifierResponse response = spyService.sendErrorToVerifier(sessionData, payload); + + assertNotNull(response); + assertEquals(mockResponse, response); + + ArgumentCaptor captor = ArgumentCaptor.forClass(Exception.class); + verify(mockOpenID4VP).sendErrorInfoToVerifier(captor.capture()); + assertTrue(captor.getValue() instanceof OpenID4VPExceptions.InvalidTransactionData); + assertEquals(OpenID4VPErrorCodes.INVALID_TRANSACTION_DATA, + ((OpenID4VPExceptions) captor.getValue()).getErrorCode()); + } + + @Test + public void testSendErrorToVerifierWithNullErrorPayload() throws Exception { + when(verifierService.getTrustedVerifiers()).thenReturn(mockVerifiersDTO); + + OpenID4VP mockOpenID4VP = mock(OpenID4VP.class); + when(mockOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(mockAuthorizationRequest); + + OpenID4VPService spyService = spy(openID4VPService); + doReturn(mockOpenID4VP).when(spyService).create(anyString()); + + VerifiablePresentationSessionData sessionData = mock(VerifiablePresentationSessionData.class); + when(sessionData.getPresentationId()).thenReturn("presentation-123"); + when(sessionData.getAuthorizationRequest()).thenReturn("authorization-request"); + when(sessionData.isVerifierClientPreregistered()).thenReturn(true); + + assertThrows(IllegalArgumentException.class, () -> spyService.sendErrorToVerifier(sessionData, null)); + verify(mockOpenID4VP, never()).sendErrorInfoToVerifier(any()); + } + + @Test + public void testSendErrorToVerifierMapsBlankErrorCodeToAccessDenied() throws Exception { + when(verifierService.getTrustedVerifiers()).thenReturn(mockVerifiersDTO); + + OpenID4VP mockOpenID4VP = mock(OpenID4VP.class); + VerifierResponse mockResponse = mock(VerifierResponse.class); + when(mockOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(mockAuthorizationRequest); + when(mockOpenID4VP.sendErrorInfoToVerifier(any())).thenReturn(mockResponse); + + OpenID4VPService spyService = spy(openID4VPService); + doReturn(mockOpenID4VP).when(spyService).create(anyString()); + + VerifiablePresentationSessionData sessionData = mock(VerifiablePresentationSessionData.class); + when(sessionData.getPresentationId()).thenReturn("presentation-123"); + when(sessionData.getAuthorizationRequest()).thenReturn("authorization-request"); + when(sessionData.isVerifierClientPreregistered()).thenReturn(true); + + ErrorDTO payload = mock(ErrorDTO.class); + when(payload.getErrorCode()).thenReturn(" "); + when(payload.getErrorMessage()).thenReturn("msg"); + + spyService.sendErrorToVerifier(sessionData, payload); + + ArgumentCaptor captor = ArgumentCaptor.forClass(Exception.class); + verify(mockOpenID4VP).sendErrorInfoToVerifier(captor.capture()); + assertTrue(captor.getValue() instanceof OpenID4VPExceptions.AccessDenied); + assertEquals(OpenID4VPErrorCodes.ACCESS_DENIED, + ((OpenID4VPExceptions) captor.getValue()).getErrorCode()); + } + + @Test + public void testSendErrorToVerifierMapsAccessDeniedCodeToAccessDenied() throws Exception { + when(verifierService.getTrustedVerifiers()).thenReturn(mockVerifiersDTO); + + OpenID4VP mockOpenID4VP = mock(OpenID4VP.class); + VerifierResponse mockResponse = mock(VerifierResponse.class); + when(mockOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(mockAuthorizationRequest); + when(mockOpenID4VP.sendErrorInfoToVerifier(any())).thenReturn(mockResponse); + + OpenID4VPService spyService = spy(openID4VPService); + doReturn(mockOpenID4VP).when(spyService).create(anyString()); + + VerifiablePresentationSessionData sessionData = mock(VerifiablePresentationSessionData.class); + when(sessionData.getPresentationId()).thenReturn("presentation-123"); + when(sessionData.getAuthorizationRequest()).thenReturn("authorization-request"); + when(sessionData.isVerifierClientPreregistered()).thenReturn(true); + + ErrorDTO payload = mock(ErrorDTO.class); + when(payload.getErrorCode()).thenReturn(OpenID4VPErrorCodes.ACCESS_DENIED); + when(payload.getErrorMessage()).thenReturn("user denied"); + + spyService.sendErrorToVerifier(sessionData, payload); + + ArgumentCaptor captor = ArgumentCaptor.forClass(Exception.class); + verify(mockOpenID4VP).sendErrorInfoToVerifier(captor.capture()); + assertTrue(captor.getValue() instanceof OpenID4VPExceptions.AccessDenied); + assertEquals(OpenID4VPErrorCodes.ACCESS_DENIED, + ((OpenID4VPExceptions) captor.getValue()).getErrorCode()); + } + + @Test + public void testSendErrorToVerifierMapsUnknownErrorCodeToAccessDenied() throws Exception { + when(verifierService.getTrustedVerifiers()).thenReturn(mockVerifiersDTO); + + OpenID4VP mockOpenID4VP = mock(OpenID4VP.class); + VerifierResponse mockResponse = mock(VerifierResponse.class); + when(mockOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(mockAuthorizationRequest); + when(mockOpenID4VP.sendErrorInfoToVerifier(any())).thenReturn(mockResponse); + + OpenID4VPService spyService = spy(openID4VPService); + doReturn(mockOpenID4VP).when(spyService).create(anyString()); + + VerifiablePresentationSessionData sessionData = mock(VerifiablePresentationSessionData.class); + when(sessionData.getPresentationId()).thenReturn("presentation-123"); + when(sessionData.getAuthorizationRequest()).thenReturn("authorization-request"); + when(sessionData.isVerifierClientPreregistered()).thenReturn(true); + + ErrorDTO payload = mock(ErrorDTO.class); + when(payload.getErrorCode()).thenReturn("invalid_request"); + when(payload.getErrorMessage()).thenReturn("bad"); + + spyService.sendErrorToVerifier(sessionData, payload); + + ArgumentCaptor captor = ArgumentCaptor.forClass(Exception.class); + verify(mockOpenID4VP).sendErrorInfoToVerifier(captor.capture()); + assertTrue(captor.getValue() instanceof OpenID4VPExceptions.AccessDenied); + assertEquals(OpenID4VPErrorCodes.ACCESS_DENIED, + ((OpenID4VPExceptions) captor.getValue()).getErrorCode()); + } + + @Test + public void testSendErrorToVerifierUsesEmptyMessageWhenErrorMessageNull() throws Exception { + when(verifierService.getTrustedVerifiers()).thenReturn(mockVerifiersDTO); + + OpenID4VP mockOpenID4VP = mock(OpenID4VP.class); + VerifierResponse mockResponse = mock(VerifierResponse.class); + when(mockOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(mockAuthorizationRequest); + when(mockOpenID4VP.sendErrorInfoToVerifier(any())).thenReturn(mockResponse); + + OpenID4VPService spyService = spy(openID4VPService); + doReturn(mockOpenID4VP).when(spyService).create(anyString()); + + VerifiablePresentationSessionData sessionData = mock(VerifiablePresentationSessionData.class); + when(sessionData.getPresentationId()).thenReturn("presentation-123"); + when(sessionData.getAuthorizationRequest()).thenReturn("authorization-request"); + when(sessionData.isVerifierClientPreregistered()).thenReturn(true); + + ErrorDTO payload = mock(ErrorDTO.class); + when(payload.getErrorCode()).thenReturn(OpenID4VPErrorCodes.ACCESS_DENIED); + when(payload.getErrorMessage()).thenReturn(null); + + spyService.sendErrorToVerifier(sessionData, payload); + + ArgumentCaptor captor = ArgumentCaptor.forClass(Exception.class); + verify(mockOpenID4VP).sendErrorInfoToVerifier(captor.capture()); + assertEquals("", captor.getValue().getMessage()); } @Test From 756b78b4f91cd31752efeb70b0c75cc0c9adbba2 Mon Sep 17 00:00:00 2001 From: Durgesh Konga Date: Tue, 21 Apr 2026 10:48:18 +0530 Subject: [PATCH 850/860] feat(openid4vci): add implementation for v1 spec vc download part of inji-web #568 (#1079) * feat(openid4vci): add implementation for v1 spec vc download Add test cases Signed-off-by: Durgesh Konga * fix V1 credential request: add proofs JSON mapping, guard blank nonce endpoint on retry Signed-off-by: Durgesh Konga * feat(openid4vci): Split wellknown validator into Draft13 and V1 variants with version-specific ldp_vc validation and List claims type Signed-off-by: Durgesh Konga * feat(openid4vci): Add Error Response handling for Credential Endpoint Signed-off-by: Durgesh Konga * feat(openid4vci): remove temporary code for mock service part of inji-web #568 Signed-off-by: Durgesh Konga * feat(openid4vci): remove unuse imports inji-web #568 Signed-off-by: Durgesh Konga * feat(openid4vci): remove unuse imports inji-web #568 Signed-off-by: Durgesh Konga * feat(openid4vci): update logs inji-web #568 Signed-off-by: Durgesh Konga --------- Signed-off-by: Durgesh Konga --- .talismanrc | 14 +- .../mimoto/dto/mimoto/NonceResponse.java | 15 + .../dto/mimoto/V1VCCredentialRequest.java | 28 ++ .../dto/mimoto/V1VCCredentialResponse.java | 27 ++ .../wellknown/v1/CredentialMetaData.java | 2 +- .../service/V1CredentialRequestService.java | 91 ++++ .../service/impl/CredentialServiceImpl.java | 2 - .../service/impl/V1VCDownloadHandler.java | 89 ++++ ...tialIssuerWellknownResponseValidator.java} | 3 +- .../io/mosip/mimoto/util/RestApiClient.java | 21 +- .../io/mosip/mimoto/util/SigningKeyUtil.java | 8 +- ...ntialIssuerWellknownResponseValidator.java | 49 +++ .../util/parser/Draft13WellknownParser.java | 6 +- .../mimoto/util/parser/V1WellknownParser.java | 25 +- .../V1CredentialRequestServiceTest.java | 228 ++++++++++ .../service/V1VCDownloadHandlerTest.java | 396 ++++++++++++++++++ ...IssuerWellknownResponseValidatorTest.java} | 27 +- .../mimoto/util/IssuerConfigUtilTest.java | 2 +- .../mosip/mimoto/util/RestApiClientTest.java | 307 ++++++++++++++ .../mosip/mimoto/util/SigningKeyUtilTest.java | 14 + ...lIssuerWellknownResponseValidatorTest.java | 99 +++++ .../parser/Draft13WellknownParserTest.java | 6 +- .../util/parser/V1WellknownParserTest.java | 191 ++++++++- 23 files changed, 1611 insertions(+), 39 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/NonceResponse.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/V1VCCredentialRequest.java create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/V1VCCredentialResponse.java create mode 100644 src/main/java/io/mosip/mimoto/service/V1CredentialRequestService.java create mode 100644 src/main/java/io/mosip/mimoto/service/impl/V1VCDownloadHandler.java rename src/main/java/io/mosip/mimoto/util/{CredentialIssuerWellknownResponseValidator.java => Draft13CredentialIssuerWellknownResponseValidator.java} (95%) create mode 100644 src/main/java/io/mosip/mimoto/util/V1CredentialIssuerWellknownResponseValidator.java create mode 100644 src/test/java/io/mosip/mimoto/service/V1CredentialRequestServiceTest.java create mode 100644 src/test/java/io/mosip/mimoto/service/V1VCDownloadHandlerTest.java rename src/test/java/io/mosip/mimoto/util/{CredentialIssuerWellknownResponseValidatorTest.java => Draft13CredentialIssuerWellknownResponseValidatorTest.java} (85%) create mode 100644 src/test/java/io/mosip/mimoto/util/RestApiClientTest.java create mode 100644 src/test/java/io/mosip/mimoto/util/V1CredentialIssuerWellknownResponseValidatorTest.java diff --git a/.talismanrc b/.talismanrc index 64c06865d..028f28903 100644 --- a/.talismanrc +++ b/.talismanrc @@ -233,7 +233,7 @@ fileignoreconfig: - filename: src/main/java/io/mosip/mimoto/util/SigningKeyUtil.java checksum: b5eec9b76f972f685cf22002360d81dd55ea8a798e2d8b9a6f4fb382fa10b021 - filename: src/test/java/io/mosip/mimoto/util/SigningKeyUtilTest.java - checksum: 561e00d1163216122eef55a10a018ce8f9a96fa2f26f9247797d514482a7f259 + checksum: eeebabe81b6e2a60eece03f4505c9bd9b4a9f7059e1873b71c63dca5722847f2 - filename: src/main/java/io/mosip/mimoto/util/factory/Ed25519AlgorithmHandler.java checksum: 6d9332df2edfc765ab45c8e985571bb5851c0da680afdc19becbc1e60362df20 - filename: src/main/java/io/mosip/mimoto/controller/IssuersV2Controller.java @@ -241,5 +241,15 @@ fileignoreconfig: - filename: src/main/java/io/mosip/mimoto/util/parser/Draft13WellknownParser.java checksum: 15a9710874a5692a85182e8b30962122dd6cfff570a6e706a49938eadae267c4 - filename: src/main/java/io/mosip/mimoto/util/parser/V1WellknownParser.java - checksum: 0a73dce3de65135f7f87bd1b92f6037169fdeae0048df326c45b7e496f75e01d + checksum: efd151e6a65bc82de38b923fc495b4383f03e6b1641496ed7cd282ed0d2389ee +- filename: src/main/java/io/mosip/mimoto/service/impl/V1VCDownloadHandler.java + checksum: 621c5c9b0819d81ab69dae829862d6e740b9ff4da2567d9ea1ba6df3f8600dac +- filename: src/main/java/io/mosip/mimoto/service/V1CredentialRequestService.java + checksum: 7296598632d713db09024635937c8ac2b7f4a81bcc66ab236917e2a64c1989bf +- filename: src/test/java/io/mosip/mimoto/service/V1CredentialRequestServiceTest.java + checksum: 260b355b96c6618f7df5d80edca2c1398c1f3b9e54f6368fe3b850d4bd5829b4 +- filename: src/test/java/io/mosip/mimoto/service/V1VCDownloadHandlerTest.java + checksum: cbab428bf3c7cce688810eadd32025237c387110a1b4951498943f3c427fde27 +- filename: src/test/java/io/mosip/mimoto/util/parser/V1WellknownParserTest.java + checksum: 2aa44b42cb47e29a1f5e5ae4d7816ddc1cba8e593198fe92a7c6f0ae6ba881d9 version: "" \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/NonceResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/NonceResponse.java new file mode 100644 index 000000000..dd7ff7163 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/NonceResponse.java @@ -0,0 +1,15 @@ +package io.mosip.mimoto.dto.mimoto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class NonceResponse { + + @JsonProperty("c_nonce") + private String cNonce; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/V1VCCredentialRequest.java b/src/main/java/io/mosip/mimoto/dto/mimoto/V1VCCredentialRequest.java new file mode 100644 index 000000000..00e96c7a9 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/V1VCCredentialRequest.java @@ -0,0 +1,28 @@ +package io.mosip.mimoto.dto.mimoto; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; +import java.util.Map; + +@Data +@Builder +@AllArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) +public class V1VCCredentialRequest { + + @JsonProperty("credential_configuration_id") + @NotBlank + private String credentialConfigurationId; + + @JsonProperty("proofs") + @NotNull + private Map> proofs; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/V1VCCredentialResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/V1VCCredentialResponse.java new file mode 100644 index 000000000..80f9f3182 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/V1VCCredentialResponse.java @@ -0,0 +1,27 @@ +package io.mosip.mimoto.dto.mimoto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class V1VCCredentialResponse { + + private List credentials; + + private String error; + + @JsonProperty("error_description") + private String errorDescription; + + public boolean hasError() { + return error != null; + } +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/CredentialMetaData.java b/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/CredentialMetaData.java index 67854a237..42ec97a9f 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/CredentialMetaData.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/wellknown/v1/CredentialMetaData.java @@ -25,5 +25,5 @@ public class CredentialMetaData { @JsonInclude(NON_NULL) @Schema(description = "List of Claims") - private Map claims; + private List> claims; } diff --git a/src/main/java/io/mosip/mimoto/service/V1CredentialRequestService.java b/src/main/java/io/mosip/mimoto/service/V1CredentialRequestService.java new file mode 100644 index 000000000..5e46baa10 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/V1CredentialRequestService.java @@ -0,0 +1,91 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.constant.SigningAlgorithm; +import io.mosip.mimoto.dto.IssuerDTO; +import io.mosip.mimoto.dto.mimoto.*; +import io.mosip.mimoto.util.RestApiClient; +import io.mosip.mimoto.util.SigningKeyUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Service; + +import java.security.KeyPair; +import java.util.*; +import java.util.stream.Collectors; + +@Service +@Slf4j +public class V1CredentialRequestService { + + private static final SigningAlgorithm FALLBACK_SIGNING_ALG = SigningAlgorithm.ED25519; + private static final String PROOF_TYPE_JWT = "jwt"; + private final RestApiClient restApiClient; + private final KeyPairRetrievalService keyPairService; + @Value("${signing.algorithms.priority.order:ED25519,ES256K,ES256,RS256}") + private String signingAlgorithmsPriorityOrder; + + public V1CredentialRequestService(RestApiClient restApiClient, KeyPairRetrievalService keyPairService) { + this.restApiClient = restApiClient; + this.keyPairService = keyPairService; + } + + public V1VCCredentialRequest buildRequest(IssuerDTO issuerDTO, String credentialConfigurationId, CredentialIssuerWellKnownResponse wellKnownResponse, String walletId, String base64EncodedWalletKey, boolean isLoginFlow) throws Exception { + + CredentialsSupportedResponse credentialsSupportedResponse = wellKnownResponse.getCredentialConfigurationsSupported().get(credentialConfigurationId); + + SigningAlgorithm signingAlgorithm = resolveAlgorithm(credentialsSupportedResponse); + + String cNonce = fetchNonce(wellKnownResponse.getNonceEndpoint()); + + String jwt; + KeyPair keyPair; + if (isLoginFlow) { + keyPair = keyPairService.getKeyPairFromDB(walletId, base64EncodedWalletKey, signingAlgorithm); + } else { + keyPair = SigningKeyUtil.generateKeyPair(signingAlgorithm); + log.debug("Generated KeyPair for signing algorithm: {}", signingAlgorithm); + } + jwt = SigningKeyUtil.generateJwt(signingAlgorithm, wellKnownResponse.getCredentialIssuer(), issuerDTO.getClient_id(), cNonce, keyPair); + + Map> proofs = Map.of(PROOF_TYPE_JWT, List.of(jwt)); + + return V1VCCredentialRequest.builder().credentialConfigurationId(credentialConfigurationId).proofs(proofs).build(); + } + + private String fetchNonce(String nonceEndpoint) throws Exception { + if (nonceEndpoint == null || nonceEndpoint.isBlank()) { + log.debug("No nonce_endpoint configured, building request without nonce"); + return null; + } + + log.debug("Fetching nonce from endpoint: {}", nonceEndpoint); + NonceResponse nonceResponse = restApiClient.postApi(nonceEndpoint, MediaType.APPLICATION_JSON, null, NonceResponse.class); + + if (nonceResponse == null || nonceResponse.getCNonce() == null) { + log.warn("Nonce endpoint returned null or empty response"); + return null; + } + + return nonceResponse.getCNonce(); + } + + public Set getSigningAlgorithmsPriorityOrder() { + return Arrays.stream(signingAlgorithmsPriorityOrder.split(",")).map(String::trim).collect(Collectors.toCollection(LinkedHashSet::new)); + } + + private SigningAlgorithm resolveAlgorithm(CredentialsSupportedResponse credentialsSupportedResponse) { + Map proofTypesSupported = credentialsSupportedResponse.getProofTypesSupported(); + ProofTypesSupported proofSigningAlgValuesSupported = proofTypesSupported.get(PROOF_TYPE_JWT); + Set signingAlgoPriorityOrderSet = getSigningAlgorithmsPriorityOrder(); + + return Optional.ofNullable(proofSigningAlgValuesSupported).map(ProofTypesSupported::getProofSigningAlgValuesSupported).flatMap(issuerSupportedAlgorithms -> signingAlgoPriorityOrderSet.stream().filter(priorityAlgorithm -> issuerSupportedAlgorithms.stream().anyMatch(issuerSupportedAlgorithm -> issuerSupportedAlgorithm.equalsIgnoreCase(priorityAlgorithm))).findFirst()).map(SigningAlgorithm::fromString).orElseGet(() -> { + if (proofSigningAlgValuesSupported == null) { + log.warn("JWT proof type is missing in proof_types_supported field of Issuer well-known so falling back to {}", FALLBACK_SIGNING_ALG); + } else { + log.warn("None of the Issuer Supported Algorithms: {} are found in the predefined signing algorithms priority order: {} so falling back to {}", proofSigningAlgValuesSupported.getProofSigningAlgValuesSupported(), signingAlgoPriorityOrderSet, FALLBACK_SIGNING_ALG); + } + return FALLBACK_SIGNING_ALG; + }); + } +} diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java index 94575fac0..f77318649 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialServiceImpl.java @@ -2,7 +2,6 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import io.mosip.mimoto.constant.VCSpecificationVersion; import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.*; @@ -25,7 +24,6 @@ import java.io.ByteArrayInputStream; import java.util.UUID; -import static io.mosip.mimoto.constant.VCSpecificationVersion.DRAFT_13; import static io.mosip.mimoto.exception.ErrorConstants.*; @Slf4j diff --git a/src/main/java/io/mosip/mimoto/service/impl/V1VCDownloadHandler.java b/src/main/java/io/mosip/mimoto/service/impl/V1VCDownloadHandler.java new file mode 100644 index 000000000..08b4ea261 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/service/impl/V1VCDownloadHandler.java @@ -0,0 +1,89 @@ +package io.mosip.mimoto.service.impl; + +import io.mosip.mimoto.dto.IssuerDTO; +import io.mosip.mimoto.dto.idp.TokenResponseDTO; +import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; +import io.mosip.mimoto.dto.mimoto.V1VCCredentialRequest; +import io.mosip.mimoto.dto.mimoto.V1VCCredentialResponse; +import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; +import io.mosip.mimoto.exception.CredentialProcessingException; +import io.mosip.mimoto.exception.ExternalServiceUnavailableException; +import io.mosip.mimoto.exception.InvalidCredentialResourceException; +import io.mosip.mimoto.service.V1CredentialRequestService; +import io.mosip.mimoto.service.VCDownloadHandler; +import io.mosip.mimoto.util.RestApiClient; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Component; + +import java.util.List; + +import static io.mosip.mimoto.exception.ErrorConstants.CREDENTIAL_DOWNLOAD_EXCEPTION; +import static io.mosip.mimoto.exception.ErrorConstants.SERVER_UNAVAILABLE; + +@Slf4j +@Component("v1") +public class V1VCDownloadHandler implements VCDownloadHandler { + + private static final String INVALID_NONCE = "invalid_nonce"; + private static final String DOWNLOAD_FAILURE_MESSAGE = "Unable to download credential from issuerId: %s, credentialConfigurationId: %s"; + private static final String EMPTY_CREDENTIAL_MESSAGE = "Credential response did not contain any credentials"; + private static final String REQUEST_BUILD_FAILURE_MESSAGE = "Unable to generate credential request"; + + private final V1CredentialRequestService v1CredentialRequestService; + private final RestApiClient restApiClient; + + public V1VCDownloadHandler(V1CredentialRequestService v1CredentialRequestService, RestApiClient restApiClient) { + this.v1CredentialRequestService = v1CredentialRequestService; + this.restApiClient = restApiClient; + } + + @Override + public VCCredentialResponse downloadCredential(IssuerDTO issuerDTO, String credentialConfigurationId, CredentialIssuerWellKnownResponse credentialIssuerWellKnownResponse, TokenResponseDTO tokenResponse, String walletId, String base64Key, boolean isLoginFlow) throws CredentialProcessingException, InvalidCredentialResourceException, ExternalServiceUnavailableException { + + V1VCCredentialRequest vcCredentialRequest = buildCredentialRequest(issuerDTO, credentialConfigurationId, credentialIssuerWellKnownResponse, walletId, base64Key, isLoginFlow); + + String credentialEndpoint = credentialIssuerWellKnownResponse.getCredentialEndPoint(); + String accessToken = tokenResponse.getAccess_token(); + String issuerId = issuerDTO.getIssuer_id(); + + V1VCCredentialResponse response = postCredentialRequest(credentialEndpoint, vcCredentialRequest, accessToken); + + String nonceEndpoint = credentialIssuerWellKnownResponse.getNonceEndpoint(); + if (response != null && response.hasError() && INVALID_NONCE.equals(response.getError()) + && nonceEndpoint != null && !nonceEndpoint.isBlank()) { + log.info("Received invalid_nonce error for issuerId: {}. Retrying with fresh nonce.", issuerId); + vcCredentialRequest = buildCredentialRequest(issuerDTO, credentialConfigurationId, credentialIssuerWellKnownResponse, walletId, base64Key, isLoginFlow); + response = postCredentialRequest(credentialEndpoint, vcCredentialRequest, accessToken); + } + + if (response == null || response.hasError()) { + String errorDetail = response != null ? response.getError() + ": " + response.getErrorDescription() : "no response"; + throw new ExternalServiceUnavailableException(SERVER_UNAVAILABLE.getErrorCode(), + String.format(DOWNLOAD_FAILURE_MESSAGE, issuerId, credentialConfigurationId) + " - " + errorDetail); + } + + List credentials = response.getCredentials(); + if (credentials == null || credentials.isEmpty()) { + throw new InvalidCredentialResourceException(EMPTY_CREDENTIAL_MESSAGE); + } + + String format = credentialIssuerWellKnownResponse.getCredentialConfigurationsSupported().get(credentialConfigurationId).getFormat(); + + log.debug("V1 VC Credential Response received for issuerId: {}", issuerId); + return new VCCredentialResponse(format, credentials.getFirst()); + } + + private V1VCCredentialRequest buildCredentialRequest(IssuerDTO issuerDTO, String credentialConfigurationId, CredentialIssuerWellKnownResponse wellKnownResponse, String walletId, String base64Key, boolean isLoginFlow) throws CredentialProcessingException { + try { + return v1CredentialRequestService.buildRequest(issuerDTO, credentialConfigurationId, wellKnownResponse, walletId, base64Key, isLoginFlow); + } catch (Exception e) { + log.error("Failed to generate V1 VC credential request for issuerId: {}", issuerDTO.getIssuer_id(), e); + throw new CredentialProcessingException(CREDENTIAL_DOWNLOAD_EXCEPTION.getErrorCode(), REQUEST_BUILD_FAILURE_MESSAGE, e); + } + } + + private V1VCCredentialResponse postCredentialRequest(String credentialEndpoint, V1VCCredentialRequest request, String accessToken) { + return restApiClient.postApiWithErrorResponse(credentialEndpoint, MediaType.APPLICATION_JSON, request, V1VCCredentialResponse.class, accessToken); + } +} diff --git a/src/main/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidator.java b/src/main/java/io/mosip/mimoto/util/Draft13CredentialIssuerWellknownResponseValidator.java similarity index 95% rename from src/main/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidator.java rename to src/main/java/io/mosip/mimoto/util/Draft13CredentialIssuerWellknownResponseValidator.java index 81ae7be23..a675e3f2c 100644 --- a/src/main/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidator.java +++ b/src/main/java/io/mosip/mimoto/util/Draft13CredentialIssuerWellknownResponseValidator.java @@ -13,7 +13,7 @@ import java.util.Set; @Component -public class CredentialIssuerWellknownResponseValidator { +public class Draft13CredentialIssuerWellknownResponseValidator { public static final String MSO_MDOC = "mso_mdoc"; public static final String LDP_VC = "ldp_vc"; @@ -29,7 +29,6 @@ public void validate(CredentialIssuerWellKnownResponse response, Validator valid } for (CredentialsSupportedResponse supportedCredentialConfiguration : response.getCredentialConfigurationsSupported().values()) { - //TODO: Extract the vc specific validations to separate classes if (MSO_MDOC.equals(supportedCredentialConfiguration.getFormat())) { if (StringUtils.isBlank(supportedCredentialConfiguration.getDoctype())) { throw new InvalidWellknownResponseException("Mandatory field 'doctype' missing"); diff --git a/src/main/java/io/mosip/mimoto/util/RestApiClient.java b/src/main/java/io/mosip/mimoto/util/RestApiClient.java index caf3677a6..00662539b 100644 --- a/src/main/java/io/mosip/mimoto/util/RestApiClient.java +++ b/src/main/java/io/mosip/mimoto/util/RestApiClient.java @@ -1,7 +1,6 @@ package io.mosip.mimoto.util; import com.google.gson.Gson; -import io.mosip.kernel.core.logger.spi.Logger; import io.mosip.mimoto.core.http.RequestWrapper; import io.mosip.mimoto.dto.SecretKeyRequest; import io.mosip.mimoto.exception.TokenGenerationFailedException; @@ -79,7 +78,6 @@ public class RestApiClient { @Autowired Environment environment; - /** * HTTP GET API * @@ -189,6 +187,25 @@ public T postApi(String uri, MediaType mediaType, Object requestType, Class< return result; } + public T postApiWithErrorResponse(String uri, MediaType mediaType, Object requestType, Class responseClass, String bearerToken) { + try { + log.info("RestApiClient::postApiWithErrorResponse()::entry uri: {}", uri); + return plainRestTemplate.postForObject(uri, setRequestHeader(requestType, mediaType, bearerToken), responseClass); + } catch (HttpClientErrorException e) { + log.error("RestApiClient::postApiWithErrorResponse()::client error uri: {} status: {}", uri, e.getStatusCode()); +log.debug("RestApiClient::postApiWithErrorResponse()::client error response body: {}", e.getResponseBodyAsString()); + try { + return new com.fasterxml.jackson.databind.ObjectMapper().readValue(e.getResponseBodyAsString(), responseClass); + } catch (Exception ex) { + log.error("RestApiClient::postApiWithErrorResponse()::failed to parse error body as {}: {}", responseClass.getSimpleName(), ex.getMessage()); + return null; + } + } catch (Exception e) { + log.error("RestApiClient::postApiWithErrorResponse()::error uri: {} {}", uri, e.getMessage(), e); + return null; + } + } + private HttpEntity setRequestHeader(Object requestType, MediaType mediaType, String bearerToken){ MultiValueMap headers = new LinkedMultiValueMap(); if (mediaType != null) { diff --git a/src/main/java/io/mosip/mimoto/util/SigningKeyUtil.java b/src/main/java/io/mosip/mimoto/util/SigningKeyUtil.java index be367c015..509bd181f 100644 --- a/src/main/java/io/mosip/mimoto/util/SigningKeyUtil.java +++ b/src/main/java/io/mosip/mimoto/util/SigningKeyUtil.java @@ -179,6 +179,12 @@ private static JWTClaimsSet createClaims(String clientId, String audience, Strin Date issuedAt = new Date(nowSeconds * 1000); Date expiresAt = new Date((nowSeconds + JWT_EXPIRATION_SECONDS) * 1000); - return new JWTClaimsSet.Builder().subject(clientId).audience(audience).issuer(clientId).issueTime(issuedAt).expirationTime(expiresAt).claim("nonce", cNonce).build(); + JWTClaimsSet.Builder builder = new JWTClaimsSet.Builder().subject(clientId).audience(audience).issuer(clientId).issueTime(issuedAt).expirationTime(expiresAt); + + if (cNonce != null) { + builder.claim("nonce", cNonce); + } + + return builder.build(); } } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/util/V1CredentialIssuerWellknownResponseValidator.java b/src/main/java/io/mosip/mimoto/util/V1CredentialIssuerWellknownResponseValidator.java new file mode 100644 index 000000000..db7bf7f8e --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/V1CredentialIssuerWellknownResponseValidator.java @@ -0,0 +1,49 @@ +package io.mosip.mimoto.util; + +import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; +import io.mosip.mimoto.dto.mimoto.CredentialsSupportedResponse; +import io.mosip.mimoto.exception.InvalidWellknownResponseException; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Validator; +import org.apache.commons.lang.StringUtils; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.Set; + +@Component +public class V1CredentialIssuerWellknownResponseValidator { + public static final String MSO_MDOC = "mso_mdoc"; + public static final String LDP_VC = "ldp_vc"; + + public void validate(CredentialIssuerWellKnownResponse response, Validator validator) throws InvalidWellknownResponseException { + Set> violations = validator.validate(response); + if (!violations.isEmpty()) { + StringBuilder sb = new StringBuilder("Validation failed:"); + for (ConstraintViolation violation : violations) { + sb.append("\n").append(violation.getPropertyPath()).append(": ").append(violation.getMessage()); + } + throw new InvalidWellknownResponseException(sb.toString()); + } + + for (CredentialsSupportedResponse supportedCredentialConfiguration : response.getCredentialConfigurationsSupported().values()) { + if (MSO_MDOC.equals(supportedCredentialConfiguration.getFormat())) { + if (StringUtils.isBlank(supportedCredentialConfiguration.getDoctype())) { + throw new InvalidWellknownResponseException("Mandatory field 'doctype' missing"); + } + if (CollectionUtils.isEmpty(supportedCredentialConfiguration.getClaims())) { + throw new InvalidWellknownResponseException("Mandatory field 'claims' missing"); + } + } + + if (LDP_VC.equals(supportedCredentialConfiguration.getFormat())) { + if (CollectionUtils.isEmpty(supportedCredentialConfiguration.getDisplay())) { + throw new InvalidWellknownResponseException("Mandatory field 'display' missing for V1 ldp_vc"); + } + if (CollectionUtils.isEmpty(supportedCredentialConfiguration.getClaims())) { + throw new InvalidWellknownResponseException("Mandatory field 'claims' missing for V1 ldp_vc"); + } + } + } + } +} diff --git a/src/main/java/io/mosip/mimoto/util/parser/Draft13WellknownParser.java b/src/main/java/io/mosip/mimoto/util/parser/Draft13WellknownParser.java index 35635f805..77e990574 100644 --- a/src/main/java/io/mosip/mimoto/util/parser/Draft13WellknownParser.java +++ b/src/main/java/io/mosip/mimoto/util/parser/Draft13WellknownParser.java @@ -5,7 +5,7 @@ import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; import io.mosip.mimoto.dto.mimoto.wellknown.draft13.Draft13WellKnownResponse; import io.mosip.mimoto.exception.InvalidWellknownResponseException; -import io.mosip.mimoto.util.CredentialIssuerWellknownResponseValidator; +import io.mosip.mimoto.util.Draft13CredentialIssuerWellknownResponseValidator; import jakarta.validation.Validator; import org.springframework.stereotype.Component; @@ -15,9 +15,9 @@ public class Draft13WellknownParser implements WellknownResponseParser { private final ObjectMapper objectMapper; - private final CredentialIssuerWellknownResponseValidator wellknownResponseValidator; + private final Draft13CredentialIssuerWellknownResponseValidator wellknownResponseValidator; - public Draft13WellknownParser(ObjectMapper objectMapper, CredentialIssuerWellknownResponseValidator wellknownResponseValidator) { + public Draft13WellknownParser(ObjectMapper objectMapper, Draft13CredentialIssuerWellknownResponseValidator wellknownResponseValidator) { this.objectMapper = objectMapper; this.wellknownResponseValidator = wellknownResponseValidator; } diff --git a/src/main/java/io/mosip/mimoto/util/parser/V1WellknownParser.java b/src/main/java/io/mosip/mimoto/util/parser/V1WellknownParser.java index 192cac1e0..4598a550b 100644 --- a/src/main/java/io/mosip/mimoto/util/parser/V1WellknownParser.java +++ b/src/main/java/io/mosip/mimoto/util/parser/V1WellknownParser.java @@ -7,8 +7,9 @@ import io.mosip.mimoto.dto.mimoto.wellknown.v1.CredentialMetaData; import io.mosip.mimoto.dto.mimoto.wellknown.v1.V1WellKnownResponse; import io.mosip.mimoto.exception.InvalidWellknownResponseException; -import io.mosip.mimoto.util.CredentialIssuerWellknownResponseValidator; +import io.mosip.mimoto.util.V1CredentialIssuerWellknownResponseValidator; import jakarta.validation.Validator; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import java.io.IOException; @@ -17,13 +18,14 @@ import java.util.Map; import java.util.stream.Collectors; +@Slf4j @Component public class V1WellknownParser implements WellknownResponseParser { private final ObjectMapper objectMapper; - private final CredentialIssuerWellknownResponseValidator wellknownResponseValidator; + private final V1CredentialIssuerWellknownResponseValidator wellknownResponseValidator; - public V1WellknownParser(ObjectMapper objectMapper, CredentialIssuerWellknownResponseValidator wellknownResponseValidator) { + public V1WellknownParser(ObjectMapper objectMapper, V1CredentialIssuerWellknownResponseValidator wellknownResponseValidator) { this.objectMapper = objectMapper; this.wellknownResponseValidator = wellknownResponseValidator; } @@ -75,9 +77,24 @@ private CredentialsSupportedResponse toCredentialSupported(io.mosip.mimoto.dto.m List display = metadata.getDisplay().stream().map(d -> objectMapper.convertValue(d, io.mosip.mimoto.dto.mimoto.CredentialSupportedDisplayResponse.class)).collect(Collectors.toList()); credentialSupported.setDisplay(display); } - credentialSupported.setClaims(metadata.getClaims()); + credentialSupported.setClaims(normalizeClaims(metadata.getClaims())); } return credentialSupported; } + + private Map normalizeClaims(List> claimsList) { + if (claimsList == null || claimsList.isEmpty()) { + return null; + } + LinkedHashMap claimsMap = new LinkedHashMap<>(); + for (Map claim : claimsList) { + List path = (List) claim.get("path"); + if (path == null || path.isEmpty()) continue; + String key = path.getLast(); + if (key == null) continue; + claimsMap.put(key, Map.of("display", claim.getOrDefault("display", List.of()))); + } + return claimsMap.isEmpty() ? null : claimsMap; + } } diff --git a/src/test/java/io/mosip/mimoto/service/V1CredentialRequestServiceTest.java b/src/test/java/io/mosip/mimoto/service/V1CredentialRequestServiceTest.java new file mode 100644 index 000000000..8d9186467 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/service/V1CredentialRequestServiceTest.java @@ -0,0 +1,228 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.constant.SigningAlgorithm; +import io.mosip.mimoto.dto.IssuerDTO; +import io.mosip.mimoto.dto.mimoto.*; +import io.mosip.mimoto.util.RestApiClient; +import io.mosip.mimoto.util.SigningKeyUtil; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; +import org.mockito.MockedStatic; +import org.mockito.Mockito; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.http.MediaType; +import org.springframework.test.util.ReflectionTestUtils; + +import java.security.KeyPair; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +class V1CredentialRequestServiceTest { + + private static final String CREDENTIAL_CONFIG_ID = "config-1"; + private static final String NONCE_ENDPOINT = "https://example.com/nonce"; + private static final String CREDENTIAL_ISSUER = "https://example-issuer.com"; + @Mock + private RestApiClient restApiClient; + @Mock + private KeyPairRetrievalService keyPairService; + private V1CredentialRequestService service; + private MockedStatic signingKeyUtilMock; + private IssuerDTO issuerDTO; + private CredentialIssuerWellKnownResponse wellKnownResponse; + private CredentialsSupportedResponse credentialsSupportedResponse; + + @BeforeEach + void setUp() { + if (java.security.Security.getProvider("BC") == null) { + java.security.Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); + } + + service = new V1CredentialRequestService(restApiClient, keyPairService); + ReflectionTestUtils.setField(service, "signingAlgorithmsPriorityOrder", "ED25519,ES256K,ES256,RS256"); + + signingKeyUtilMock = Mockito.mockStatic(SigningKeyUtil.class, Mockito.withSettings().defaultAnswer(Mockito.CALLS_REAL_METHODS)); + + issuerDTO = new IssuerDTO(); + issuerDTO.setIssuer_id("issuer-123"); + issuerDTO.setClient_id("client-123"); + + ProofTypesSupported proofTypesSupported = new ProofTypesSupported(); + proofTypesSupported.setProofSigningAlgValuesSupported(List.of("Ed25519")); + + credentialsSupportedResponse = new CredentialsSupportedResponse(); + credentialsSupportedResponse.setFormat("vc+sd-jwt"); + credentialsSupportedResponse.setProofTypesSupported(new HashMap<>(Map.of("jwt", proofTypesSupported))); + + wellKnownResponse = new CredentialIssuerWellKnownResponse(); + wellKnownResponse.setCredentialIssuer(CREDENTIAL_ISSUER); + wellKnownResponse.setNonceEndpoint(NONCE_ENDPOINT); + wellKnownResponse.setCredentialConfigurationsSupported(Map.of(CREDENTIAL_CONFIG_ID, credentialsSupportedResponse)); + } + + @AfterEach + void tearDown() { + if (signingKeyUtilMock != null) { + signingKeyUtilMock.close(); + } + } + + @Test + void shouldBuildRequestWithNonceWhenNonceEndpointIsPresent() throws Exception { + NonceResponse nonceResponse = new NonceResponse("test-nonce"); + when(restApiClient.postApi(eq(NONCE_ENDPOINT), eq(MediaType.APPLICATION_JSON), isNull(), eq(NonceResponse.class))).thenReturn(nonceResponse); + + V1VCCredentialRequest result = service.buildRequest(issuerDTO, CREDENTIAL_CONFIG_ID, wellKnownResponse, null, null, false); + + assertNotNull(result); + assertEquals(CREDENTIAL_CONFIG_ID, result.getCredentialConfigurationId()); + assertNotNull(result.getProofs()); + assertTrue(result.getProofs().containsKey("jwt")); + assertEquals(1, result.getProofs().get("jwt").size()); + + ArgumentCaptor nonceCaptor = ArgumentCaptor.forClass(String.class); + signingKeyUtilMock.verify(() -> SigningKeyUtil.generateJwt(any(SigningAlgorithm.class), eq(CREDENTIAL_ISSUER), eq("client-123"), nonceCaptor.capture(), any(KeyPair.class))); + assertEquals("test-nonce", nonceCaptor.getValue()); + } + + @Test + void shouldBuildRequestWithoutNonceWhenNonceEndpointIsAbsent() throws Exception { + wellKnownResponse.setNonceEndpoint(null); + + V1VCCredentialRequest result = service.buildRequest(issuerDTO, CREDENTIAL_CONFIG_ID, wellKnownResponse, null, null, false); + + assertNotNull(result); + assertEquals(CREDENTIAL_CONFIG_ID, result.getCredentialConfigurationId()); + assertNotNull(result.getProofs()); + + ArgumentCaptor nonceCaptor = ArgumentCaptor.forClass(String.class); + signingKeyUtilMock.verify(() -> SigningKeyUtil.generateJwt(any(SigningAlgorithm.class), eq(CREDENTIAL_ISSUER), eq("client-123"), nonceCaptor.capture(), any(KeyPair.class))); + assertNull(nonceCaptor.getValue()); + } + + @Test + void shouldBuildRequestWithoutNonceWhenNonceEndpointIsBlank() throws Exception { + wellKnownResponse.setNonceEndpoint(" "); + + V1VCCredentialRequest result = service.buildRequest(issuerDTO, CREDENTIAL_CONFIG_ID, wellKnownResponse, null, null, false); + + assertNotNull(result); + + ArgumentCaptor nonceCaptor = ArgumentCaptor.forClass(String.class); + signingKeyUtilMock.verify(() -> SigningKeyUtil.generateJwt(any(SigningAlgorithm.class), eq(CREDENTIAL_ISSUER), eq("client-123"), nonceCaptor.capture(), any(KeyPair.class))); + assertNull(nonceCaptor.getValue()); + } + + @Test + void shouldBuildRequestWithoutNonceWhenNonceEndpointReturnsNull() throws Exception { + when(restApiClient.postApi(eq(NONCE_ENDPOINT), eq(MediaType.APPLICATION_JSON), isNull(), eq(NonceResponse.class))).thenReturn(null); + + V1VCCredentialRequest result = service.buildRequest(issuerDTO, CREDENTIAL_CONFIG_ID, wellKnownResponse, null, null, false); + + assertNotNull(result); + + ArgumentCaptor nonceCaptor = ArgumentCaptor.forClass(String.class); + signingKeyUtilMock.verify(() -> SigningKeyUtil.generateJwt(any(SigningAlgorithm.class), eq(CREDENTIAL_ISSUER), eq("client-123"), nonceCaptor.capture(), any(KeyPair.class))); + assertNull(nonceCaptor.getValue()); + } + + @Test + void shouldBuildRequestWithoutNonceWhenNonceResponseHasNullCNonce() throws Exception { + NonceResponse nonceResponse = new NonceResponse(null); + when(restApiClient.postApi(eq(NONCE_ENDPOINT), eq(MediaType.APPLICATION_JSON), isNull(), eq(NonceResponse.class))).thenReturn(nonceResponse); + + V1VCCredentialRequest result = service.buildRequest(issuerDTO, CREDENTIAL_CONFIG_ID, wellKnownResponse, null, null, false); + + assertNotNull(result); + + ArgumentCaptor nonceCaptor = ArgumentCaptor.forClass(String.class); + signingKeyUtilMock.verify(() -> SigningKeyUtil.generateJwt(any(SigningAlgorithm.class), eq(CREDENTIAL_ISSUER), eq("client-123"), nonceCaptor.capture(), any(KeyPair.class))); + assertNull(nonceCaptor.getValue()); + } + + @Test + void shouldUseDBKeysForLoginFlow() throws Exception { + NonceResponse nonceResponse = new NonceResponse("test-nonce"); + when(restApiClient.postApi(eq(NONCE_ENDPOINT), eq(MediaType.APPLICATION_JSON), isNull(), eq(NonceResponse.class))).thenReturn(nonceResponse); + + KeyPair mockKeyPair = Mockito.mock(KeyPair.class); + + when(keyPairService.getKeyPairFromDB("wallet-1", "key-base64", SigningAlgorithm.ED25519)).thenReturn(mockKeyPair); + + signingKeyUtilMock.when(() -> SigningKeyUtil.generateJwt(eq(SigningAlgorithm.ED25519), eq(CREDENTIAL_ISSUER), eq("client-123"), eq("test-nonce"), eq(mockKeyPair))).thenReturn("mocked-jwt-token"); + + V1VCCredentialRequest result = service.buildRequest(issuerDTO, CREDENTIAL_CONFIG_ID, wellKnownResponse, "wallet-1", "key-base64", true); + + assertNotNull(result); + assertEquals(CREDENTIAL_CONFIG_ID, result.getCredentialConfigurationId()); + assertEquals(List.of("mocked-jwt-token"), result.getProofs().get("jwt")); + signingKeyUtilMock.verify(() -> SigningKeyUtil.generateJwt(eq(SigningAlgorithm.ED25519), eq(CREDENTIAL_ISSUER), eq("client-123"), eq("test-nonce"), eq(mockKeyPair))); + } + + @Test + void shouldUseFallbackAlgorithmWhenJwtProofTypeIsNull() throws Exception { + credentialsSupportedResponse.getProofTypesSupported().put("jwt", null); + + NonceResponse nonceResponse = new NonceResponse("test-nonce"); + when(restApiClient.postApi(eq(NONCE_ENDPOINT), eq(MediaType.APPLICATION_JSON), isNull(), eq(NonceResponse.class))).thenReturn(nonceResponse); + + V1VCCredentialRequest result = service.buildRequest(issuerDTO, CREDENTIAL_CONFIG_ID, wellKnownResponse, null, null, false); + + assertNotNull(result); + + ArgumentCaptor algCaptor = ArgumentCaptor.forClass(SigningAlgorithm.class); + signingKeyUtilMock.verify(() -> SigningKeyUtil.generateKeyPair(algCaptor.capture())); + assertEquals(SigningAlgorithm.ED25519, algCaptor.getValue()); + } + + @Test + void shouldUseFallbackAlgorithmWhenProofAlgorithmsAreEmpty() throws Exception { + ProofTypesSupported emptyProof = new ProofTypesSupported(); + emptyProof.setProofSigningAlgValuesSupported(Collections.emptyList()); + credentialsSupportedResponse.getProofTypesSupported().put("jwt", emptyProof); + + NonceResponse nonceResponse = new NonceResponse("test-nonce"); + when(restApiClient.postApi(eq(NONCE_ENDPOINT), eq(MediaType.APPLICATION_JSON), isNull(), eq(NonceResponse.class))).thenReturn(nonceResponse); + + V1VCCredentialRequest result = service.buildRequest(issuerDTO, CREDENTIAL_CONFIG_ID, wellKnownResponse, null, null, false); + + assertNotNull(result); + + ArgumentCaptor algCaptor = ArgumentCaptor.forClass(SigningAlgorithm.class); + signingKeyUtilMock.verify(() -> SigningKeyUtil.generateKeyPair(algCaptor.capture())); + assertEquals(SigningAlgorithm.ED25519, algCaptor.getValue()); + } + + @Test + void shouldUseHighestPriorityMatchingAlgorithm() throws Exception { + credentialsSupportedResponse.getProofTypesSupported().get("jwt").setProofSigningAlgValuesSupported(List.of("ES256K")); + + NonceResponse nonceResponse = new NonceResponse("test-nonce"); + when(restApiClient.postApi(eq(NONCE_ENDPOINT), eq(MediaType.APPLICATION_JSON), isNull(), eq(NonceResponse.class))).thenReturn(nonceResponse); + + V1VCCredentialRequest result = service.buildRequest(issuerDTO, CREDENTIAL_CONFIG_ID, wellKnownResponse, null, null, false); + + assertNotNull(result); + + ArgumentCaptor algCaptor = ArgumentCaptor.forClass(SigningAlgorithm.class); + signingKeyUtilMock.verify(() -> SigningKeyUtil.generateKeyPair(algCaptor.capture())); + assertEquals(SigningAlgorithm.ES256K, algCaptor.getValue()); + } + + @Test + void shouldReturnCorrectSigningAlgorithmsPriorityOrder() { + assertEquals(4, service.getSigningAlgorithmsPriorityOrder().size()); + assertTrue(service.getSigningAlgorithmsPriorityOrder().contains("ED25519")); + } +} diff --git a/src/test/java/io/mosip/mimoto/service/V1VCDownloadHandlerTest.java b/src/test/java/io/mosip/mimoto/service/V1VCDownloadHandlerTest.java new file mode 100644 index 000000000..4d66e9e55 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/service/V1VCDownloadHandlerTest.java @@ -0,0 +1,396 @@ +package io.mosip.mimoto.service; + +import io.mosip.mimoto.dto.IssuerDTO; +import io.mosip.mimoto.dto.idp.TokenResponseDTO; +import io.mosip.mimoto.dto.mimoto.*; +import io.mosip.mimoto.exception.CredentialProcessingException; +import io.mosip.mimoto.exception.ExternalServiceUnavailableException; +import io.mosip.mimoto.exception.InvalidCredentialResourceException; +import io.mosip.mimoto.service.impl.V1VCDownloadHandler; +import io.mosip.mimoto.util.RestApiClient; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.http.MediaType; + +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class V1VCDownloadHandlerTest { + + private static final String CREDENTIAL_ISSUER = "https://credential-issuer.example.com"; + private static final String CREDENTIAL_ENDPOINT = "https://credential-issuer.example.com/credential"; + private static final String NONCE_ENDPOINT = "https://credential-issuer.example.com/nonce"; + private static final String CREDENTIAL_CONFIG_ID = "SD_JWT_VC_example_in_OpenID4VCI"; + private static final String FORMAT = "dc+sd-jwt"; + private static final String ISSUER_ID = "issuer-123"; + private static final String CLIENT_ID = "mimoto-oidc-client"; + private static final String ACCESS_TOKEN = "valid-access-token"; + private static final String WALLET_ID = "wallet-1"; + private static final String BASE64_KEY = "base64-encoded-wallet-key"; + + @Mock + private V1CredentialRequestService v1CredentialRequestService; + @Mock + private RestApiClient restApiClient; + @InjectMocks + private V1VCDownloadHandler handler; + + private IssuerDTO issuerDTO; + private CredentialIssuerWellKnownResponse wellKnownResponse; + private TokenResponseDTO tokenResponse; + + @BeforeEach + void setUp() { + issuerDTO = new IssuerDTO(); + issuerDTO.setIssuer_id(ISSUER_ID); + issuerDTO.setClient_id(CLIENT_ID); + + ProofTypesSupported proofTypesSupported = new ProofTypesSupported(); + proofTypesSupported.setProofSigningAlgValuesSupported(List.of("ES256")); + + CredentialsSupportedResponse credSupported = new CredentialsSupportedResponse(); + credSupported.setFormat(FORMAT); + credSupported.setScope(CREDENTIAL_CONFIG_ID); + credSupported.setVct(CREDENTIAL_CONFIG_ID); + credSupported.setProofTypesSupported(Map.of("jwt", proofTypesSupported)); + + wellKnownResponse = new CredentialIssuerWellKnownResponse(); + wellKnownResponse.setCredentialIssuer(CREDENTIAL_ISSUER); + wellKnownResponse.setCredentialEndPoint(CREDENTIAL_ENDPOINT); + wellKnownResponse.setNonceEndpoint(NONCE_ENDPOINT); + wellKnownResponse.setCredentialConfigurationsSupported(Map.of(CREDENTIAL_CONFIG_ID, credSupported)); + + tokenResponse = new TokenResponseDTO(); + tokenResponse.setAccess_token(ACCESS_TOKEN); + } + + private V1VCCredentialRequest buildRequest(String jwtToken) { + return V1VCCredentialRequest.builder() + .credentialConfigurationId(CREDENTIAL_CONFIG_ID) + .proofs(Map.of("jwt", List.of(jwtToken))) + .build(); + } + + @Test + void shouldReturnVCCredentialResponseOnSuccessfulDownload() throws Exception { + V1VCCredentialRequest request = buildRequest("jwt-token"); + + when(v1CredentialRequestService.buildRequest(eq(issuerDTO), eq(CREDENTIAL_CONFIG_ID), + eq(wellKnownResponse), isNull(), isNull(), eq(false))) + .thenReturn(request); + + V1VCCredentialResponse mockResponse = V1VCCredentialResponse.builder() + .credentials(List.of("eyJhbGciOiJFUzI1NiJ9.credential-payload.signature")) + .build(); + + when(restApiClient.postApiWithErrorResponse(eq(CREDENTIAL_ENDPOINT), eq(MediaType.APPLICATION_JSON), + eq(request), eq(V1VCCredentialResponse.class), eq(ACCESS_TOKEN))) + .thenReturn(mockResponse); + + VCCredentialResponse result = handler.downloadCredential(issuerDTO, CREDENTIAL_CONFIG_ID, + wellKnownResponse, tokenResponse, null, null, false); + + assertNotNull(result); + assertEquals(FORMAT, result.getFormat()); + assertEquals("eyJhbGciOiJFUzI1NiJ9.credential-payload.signature", result.getCredential()); + } + + @Test + void shouldReturnFirstCredentialWhenResponseContainsMultiple() throws Exception { + V1VCCredentialRequest request = buildRequest("jwt-token"); + + when(v1CredentialRequestService.buildRequest(eq(issuerDTO), eq(CREDENTIAL_CONFIG_ID), + eq(wellKnownResponse), isNull(), isNull(), eq(false))) + .thenReturn(request); + + V1VCCredentialResponse mockResponse = V1VCCredentialResponse.builder() + .credentials(List.of("first-credential", "second-credential", "third-credential")) + .build(); + + when(restApiClient.postApiWithErrorResponse(eq(CREDENTIAL_ENDPOINT), eq(MediaType.APPLICATION_JSON), + eq(request), eq(V1VCCredentialResponse.class), eq(ACCESS_TOKEN))) + .thenReturn(mockResponse); + + VCCredentialResponse result = handler.downloadCredential(issuerDTO, CREDENTIAL_CONFIG_ID, + wellKnownResponse, tokenResponse, null, null, false); + + assertNotNull(result); + assertEquals("first-credential", result.getCredential()); + } + + @Test + void shouldPassWalletIdAndBase64KeyForLoginFlow() throws Exception { + V1VCCredentialRequest request = buildRequest("jwt-login-token"); + + when(v1CredentialRequestService.buildRequest(eq(issuerDTO), eq(CREDENTIAL_CONFIG_ID), + eq(wellKnownResponse), eq(WALLET_ID), eq(BASE64_KEY), eq(true))) + .thenReturn(request); + + V1VCCredentialResponse mockResponse = V1VCCredentialResponse.builder() + .credentials(List.of("login-credential-data")) + .build(); + + when(restApiClient.postApiWithErrorResponse(eq(CREDENTIAL_ENDPOINT), eq(MediaType.APPLICATION_JSON), + eq(request), eq(V1VCCredentialResponse.class), eq(ACCESS_TOKEN))) + .thenReturn(mockResponse); + + VCCredentialResponse result = handler.downloadCredential(issuerDTO, CREDENTIAL_CONFIG_ID, + wellKnownResponse, tokenResponse, WALLET_ID, BASE64_KEY, true); + + assertNotNull(result); + assertEquals(FORMAT, result.getFormat()); + assertEquals("login-credential-data", result.getCredential()); + verify(v1CredentialRequestService).buildRequest(eq(issuerDTO), eq(CREDENTIAL_CONFIG_ID), + eq(wellKnownResponse), eq(WALLET_ID), eq(BASE64_KEY), eq(true)); + } + + @Test + void shouldThrowCredentialProcessingExceptionWhenBuildRequestFails() throws Exception { + when(v1CredentialRequestService.buildRequest(any(), anyString(), any(), any(), any(), anyBoolean())) + .thenThrow(new RuntimeException("Build failed")); + + assertThrows(CredentialProcessingException.class, () -> + handler.downloadCredential(issuerDTO, CREDENTIAL_CONFIG_ID, + wellKnownResponse, tokenResponse, null, null, false)); + } + + @Test + void shouldRetryWithFreshNonceWhenFirstAttemptReturnsInvalidNonce() throws Exception { + V1VCCredentialRequest firstRequest = buildRequest("jwt-token-1"); + V1VCCredentialRequest retryRequest = buildRequest("jwt-token-2"); + + when(v1CredentialRequestService.buildRequest(eq(issuerDTO), eq(CREDENTIAL_CONFIG_ID), + eq(wellKnownResponse), isNull(), isNull(), eq(false))) + .thenReturn(firstRequest) + .thenReturn(retryRequest); + + V1VCCredentialResponse invalidNonceResponse = V1VCCredentialResponse.builder() + .error("invalid_nonce") + .errorDescription("Nonce Transaction could not be found.") + .build(); + + V1VCCredentialResponse successResponse = V1VCCredentialResponse.builder() + .credentials(List.of("retry-credential-data")) + .build(); + + when(restApiClient.postApiWithErrorResponse(eq(CREDENTIAL_ENDPOINT), eq(MediaType.APPLICATION_JSON), + eq(firstRequest), eq(V1VCCredentialResponse.class), eq(ACCESS_TOKEN))) + .thenReturn(invalidNonceResponse); + + when(restApiClient.postApiWithErrorResponse(eq(CREDENTIAL_ENDPOINT), eq(MediaType.APPLICATION_JSON), + eq(retryRequest), eq(V1VCCredentialResponse.class), eq(ACCESS_TOKEN))) + .thenReturn(successResponse); + + VCCredentialResponse result = handler.downloadCredential(issuerDTO, CREDENTIAL_CONFIG_ID, + wellKnownResponse, tokenResponse, null, null, false); + + assertNotNull(result); + assertEquals(FORMAT, result.getFormat()); + assertEquals("retry-credential-data", result.getCredential()); + verify(v1CredentialRequestService, times(2)) + .buildRequest(any(), anyString(), any(), any(), any(), anyBoolean()); + } + + @Test + void shouldThrowExceptionWhenRetryAlsoReturnsInvalidNonce() throws Exception { + V1VCCredentialRequest request = buildRequest("jwt-token"); + + when(v1CredentialRequestService.buildRequest(any(), anyString(), any(), any(), any(), anyBoolean())) + .thenReturn(request); + + V1VCCredentialResponse invalidNonceResponse = V1VCCredentialResponse.builder() + .error("invalid_nonce") + .errorDescription("Nonce Transaction could not be found.") + .build(); + + when(restApiClient.postApiWithErrorResponse(eq(CREDENTIAL_ENDPOINT), eq(MediaType.APPLICATION_JSON), + eq(request), eq(V1VCCredentialResponse.class), eq(ACCESS_TOKEN))) + .thenReturn(invalidNonceResponse); + + ExternalServiceUnavailableException exception = assertThrows( + ExternalServiceUnavailableException.class, + () -> handler.downloadCredential(issuerDTO, CREDENTIAL_CONFIG_ID, + wellKnownResponse, tokenResponse, null, null, false)); + + assertTrue(exception.getMessage().contains(ISSUER_ID)); + assertTrue(exception.getMessage().contains("invalid_nonce")); + } + + @Test + void shouldThrowExceptionWithoutRetryWhenNoNonceEndpoint() throws Exception { + wellKnownResponse.setNonceEndpoint(null); + + V1VCCredentialRequest request = buildRequest("jwt-token"); + + when(v1CredentialRequestService.buildRequest(any(), anyString(), any(), any(), any(), anyBoolean())) + .thenReturn(request); + + V1VCCredentialResponse invalidNonceResponse = V1VCCredentialResponse.builder() + .error("invalid_nonce") + .errorDescription("Nonce Transaction could not be found.") + .build(); + + when(restApiClient.postApiWithErrorResponse(eq(CREDENTIAL_ENDPOINT), eq(MediaType.APPLICATION_JSON), + eq(request), eq(V1VCCredentialResponse.class), eq(ACCESS_TOKEN))) + .thenReturn(invalidNonceResponse); + + assertThrows(ExternalServiceUnavailableException.class, + () -> handler.downloadCredential(issuerDTO, CREDENTIAL_CONFIG_ID, + wellKnownResponse, tokenResponse, null, null, false)); + + verify(v1CredentialRequestService, times(1)) + .buildRequest(any(), anyString(), any(), any(), any(), anyBoolean()); + } + + @Test + void shouldThrowExceptionWithoutRetryWhenNonceEndpointIsBlank() throws Exception { + wellKnownResponse.setNonceEndpoint(" "); + + V1VCCredentialRequest request = buildRequest("jwt-token"); + + when(v1CredentialRequestService.buildRequest(any(), anyString(), any(), any(), any(), anyBoolean())) + .thenReturn(request); + + V1VCCredentialResponse invalidNonceResponse = V1VCCredentialResponse.builder() + .error("invalid_nonce") + .errorDescription("Nonce Transaction could not be found.") + .build(); + + when(restApiClient.postApiWithErrorResponse(eq(CREDENTIAL_ENDPOINT), eq(MediaType.APPLICATION_JSON), + eq(request), eq(V1VCCredentialResponse.class), eq(ACCESS_TOKEN))) + .thenReturn(invalidNonceResponse); + + assertThrows(ExternalServiceUnavailableException.class, + () -> handler.downloadCredential(issuerDTO, CREDENTIAL_CONFIG_ID, + wellKnownResponse, tokenResponse, null, null, false)); + + verify(v1CredentialRequestService, times(1)) + .buildRequest(any(), anyString(), any(), any(), any(), anyBoolean()); + } + + @Test + void shouldThrowInvalidCredentialResourceExceptionWhenCredentialsListIsNull() throws Exception { + V1VCCredentialRequest request = buildRequest("jwt-token"); + + when(v1CredentialRequestService.buildRequest(any(), anyString(), any(), any(), any(), anyBoolean())) + .thenReturn(request); + + V1VCCredentialResponse mockResponse = V1VCCredentialResponse.builder() + .credentials(null) + .build(); + + when(restApiClient.postApiWithErrorResponse(eq(CREDENTIAL_ENDPOINT), eq(MediaType.APPLICATION_JSON), + eq(request), eq(V1VCCredentialResponse.class), eq(ACCESS_TOKEN))) + .thenReturn(mockResponse); + + InvalidCredentialResourceException exception = assertThrows( + InvalidCredentialResourceException.class, + () -> handler.downloadCredential(issuerDTO, CREDENTIAL_CONFIG_ID, + wellKnownResponse, tokenResponse, null, null, false)); + + assertTrue(exception.getMessage().contains("Credential response did not contain any credentials")); + } + + @Test + void shouldThrowInvalidCredentialResourceExceptionWhenCredentialsListIsEmpty() throws Exception { + V1VCCredentialRequest request = buildRequest("jwt-token"); + + when(v1CredentialRequestService.buildRequest(any(), anyString(), any(), any(), any(), anyBoolean())) + .thenReturn(request); + + V1VCCredentialResponse mockResponse = V1VCCredentialResponse.builder() + .credentials(List.of()) + .build(); + + when(restApiClient.postApiWithErrorResponse(eq(CREDENTIAL_ENDPOINT), eq(MediaType.APPLICATION_JSON), + eq(request), eq(V1VCCredentialResponse.class), eq(ACCESS_TOKEN))) + .thenReturn(mockResponse); + + InvalidCredentialResourceException exception = assertThrows( + InvalidCredentialResourceException.class, + () -> handler.downloadCredential(issuerDTO, CREDENTIAL_CONFIG_ID, + wellKnownResponse, tokenResponse, null, null, false)); + + assertTrue(exception.getMessage().contains("Credential response did not contain any credentials")); + } + + @Test + void shouldThrowExceptionWhenResponseIsNull() throws Exception { + V1VCCredentialRequest request = buildRequest("jwt-token"); + + when(v1CredentialRequestService.buildRequest(any(), anyString(), any(), any(), any(), anyBoolean())) + .thenReturn(request); + + when(restApiClient.postApiWithErrorResponse(anyString(), any(), any(), any(), anyString())) + .thenReturn(null); + + ExternalServiceUnavailableException exception = assertThrows( + ExternalServiceUnavailableException.class, + () -> handler.downloadCredential(issuerDTO, CREDENTIAL_CONFIG_ID, + wellKnownResponse, tokenResponse, null, null, false)); + + assertTrue(exception.getMessage().contains(ISSUER_ID)); + assertTrue(exception.getMessage().contains("no response")); + verify(v1CredentialRequestService, times(1)) + .buildRequest(any(), anyString(), any(), any(), any(), anyBoolean()); + } + + @Test + void shouldNotRetryForNonNonceErrors() throws Exception { + V1VCCredentialRequest request = buildRequest("jwt-token"); + + when(v1CredentialRequestService.buildRequest(any(), anyString(), any(), any(), any(), anyBoolean())) + .thenReturn(request); + + V1VCCredentialResponse errorResponse = V1VCCredentialResponse.builder() + .error("invalid_token") + .errorDescription("The access token is expired") + .build(); + + when(restApiClient.postApiWithErrorResponse(eq(CREDENTIAL_ENDPOINT), eq(MediaType.APPLICATION_JSON), + eq(request), eq(V1VCCredentialResponse.class), eq(ACCESS_TOKEN))) + .thenReturn(errorResponse); + + ExternalServiceUnavailableException exception = assertThrows( + ExternalServiceUnavailableException.class, + () -> handler.downloadCredential(issuerDTO, CREDENTIAL_CONFIG_ID, + wellKnownResponse, tokenResponse, null, null, false)); + + assertTrue(exception.getMessage().contains("invalid_token")); + verify(v1CredentialRequestService, times(1)) + .buildRequest(any(), anyString(), any(), any(), any(), anyBoolean()); + verify(restApiClient, times(1)) + .postApiWithErrorResponse(anyString(), any(), any(), any(), anyString()); + } + + @Test + void shouldNotRetryWhenResponseIsNullAndNoNonceEndpoint() throws Exception { + wellKnownResponse.setNonceEndpoint(null); + + V1VCCredentialRequest request = buildRequest("jwt-token"); + + when(v1CredentialRequestService.buildRequest(any(), anyString(), any(), any(), any(), anyBoolean())) + .thenReturn(request); + + when(restApiClient.postApiWithErrorResponse(anyString(), any(), any(), any(), anyString())) + .thenReturn(null); + + assertThrows(ExternalServiceUnavailableException.class, + () -> handler.downloadCredential(issuerDTO, CREDENTIAL_CONFIG_ID, + wellKnownResponse, tokenResponse, null, null, false)); + + verify(v1CredentialRequestService, times(1)) + .buildRequest(any(), anyString(), any(), any(), any(), anyBoolean()); + verify(restApiClient, times(1)) + .postApiWithErrorResponse(anyString(), any(), any(), any(), anyString()); + } +} diff --git a/src/test/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidatorTest.java b/src/test/java/io/mosip/mimoto/util/Draft13CredentialIssuerWellknownResponseValidatorTest.java similarity index 85% rename from src/test/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidatorTest.java rename to src/test/java/io/mosip/mimoto/util/Draft13CredentialIssuerWellknownResponseValidatorTest.java index cecd5973d..774c0164f 100644 --- a/src/test/java/io/mosip/mimoto/util/CredentialIssuerWellknownResponseValidatorTest.java +++ b/src/test/java/io/mosip/mimoto/util/Draft13CredentialIssuerWellknownResponseValidatorTest.java @@ -27,8 +27,8 @@ import org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration; -@SpringBootTest(classes = {CredentialIssuerWellknownResponseValidator.class, CredentialIssuerWellKnownResponse.class, ValidationAutoConfiguration.class}) -class CredentialIssuerWellknownResponseValidatorTest { +@SpringBootTest(classes = {Draft13CredentialIssuerWellknownResponseValidator.class, CredentialIssuerWellKnownResponse.class, ValidationAutoConfiguration.class}) +class Draft13CredentialIssuerWellknownResponseValidatorTest { @Autowired private Validator validator; @@ -46,7 +46,7 @@ void setUp() { @Test void shouldNotThrowExceptionWhenResponseIsFullyValid() { - CredentialIssuerWellknownResponseValidator validatorInstance = new CredentialIssuerWellknownResponseValidator(); + Draft13CredentialIssuerWellknownResponseValidator validatorInstance = new Draft13CredentialIssuerWellknownResponseValidator(); assertDoesNotThrow(() -> validatorInstance.validate(response, validator)); } @@ -54,7 +54,7 @@ void shouldNotThrowExceptionWhenResponseIsFullyValid() { @SuppressWarnings("unchecked") @Test void shouldThrowExceptionWhenBeanValidationReturnsViolations() { - CredentialIssuerWellknownResponseValidator validatorInstance = new CredentialIssuerWellknownResponseValidator(); + Draft13CredentialIssuerWellknownResponseValidator validatorInstance = new Draft13CredentialIssuerWellknownResponseValidator(); Path mockPath = mock(Path.class); doReturn("credentialIssuer").when(mockPath).toString(); @@ -83,7 +83,7 @@ void shouldNotThrowExceptionWhenFormatIsNullSinceNeitherFormatSpecificCheckAppli response = getCredentialIssuerWellKnownResponseDto("Issuer1", Map.of("CredentialType1", credentialsSupportedResponse)); - CredentialIssuerWellknownResponseValidator validatorInstance = new CredentialIssuerWellknownResponseValidator(); + Draft13CredentialIssuerWellknownResponseValidator validatorInstance = new Draft13CredentialIssuerWellknownResponseValidator(); assertDoesNotThrow(() -> validatorInstance.validate(response, validator)); } @@ -98,7 +98,7 @@ void shouldNotThrowExceptionWhenMultipleFieldsAreNullSinceNoCascadeValidation() response = getCredentialIssuerWellKnownResponseDto("Issuer1", Map.of("CredentialType1", credentialsSupportedResponse)); - CredentialIssuerWellknownResponseValidator validatorInstance = new CredentialIssuerWellknownResponseValidator(); + Draft13CredentialIssuerWellknownResponseValidator validatorInstance = new Draft13CredentialIssuerWellknownResponseValidator(); assertDoesNotThrow(() -> validatorInstance.validate(response, validator)); } @@ -115,7 +115,7 @@ void shouldNotThrowExceptionWhenDisplayHasInvalidNestedFieldsSinceNoCascadeValid displayList.add(invalidDisplay); response.getCredentialConfigurationsSupported().get("CredentialType1").setDisplay(displayList); - CredentialIssuerWellknownResponseValidator validatorInstance = new CredentialIssuerWellknownResponseValidator(); + Draft13CredentialIssuerWellknownResponseValidator validatorInstance = new Draft13CredentialIssuerWellknownResponseValidator(); assertDoesNotThrow(() -> validatorInstance.validate(response, validator)); } @@ -127,7 +127,7 @@ void shouldDetectMissingMandatoryFieldsCredentialDefinitionOfCredentialSupported response = getCredentialIssuerWellKnownResponseDto("Issuer1", Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); response.getCredentialConfigurationsSupported().get("CredentialType1").setCredentialDefinition(null); - CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); + Draft13CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new Draft13CredentialIssuerWellknownResponseValidator(); InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> credentialIssuerWellknownResponseValidator.validate(response, validator)); @@ -146,7 +146,7 @@ void shouldDetectMissingMandatoryFieldsOfCredentialDefinitionInWellknownResponse credentialDefinitionResponseDto.setType(null); response.getCredentialConfigurationsSupported().get("CredentialType1").setCredentialDefinition(credentialDefinitionResponseDto); - CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); + Draft13CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new Draft13CredentialIssuerWellknownResponseValidator(); InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> credentialIssuerWellknownResponseValidator.validate(response, validator) ); @@ -163,7 +163,7 @@ void shouldThrowExceptionWhenCredentialDefinitionTypeIsEmpty() { Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1"))); response.getCredentialConfigurationsSupported().get("CredentialType1").getCredentialDefinition().setType(Collections.emptyList()); // Invalid empty list - CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); + Draft13CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new Draft13CredentialIssuerWellknownResponseValidator(); InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> credentialIssuerWellknownResponseValidator.validate(response, validator)); @@ -180,7 +180,7 @@ class MsoMdocFormatWellKnownResponseValidationTest { @Test void shouldThrowInvalidWellKnownResponseExceptionWhenMandatoryFieldDocTypeIsNotPresent() { - CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); + Draft13CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new Draft13CredentialIssuerWellknownResponseValidator(); CredentialsSupportedResponse credentialSupportedResponse1 = getCredentialSupportedResponse("CredentialType1", "mso_mdoc"); credentialSupportedResponse1.setDoctype(""); CredentialIssuerWellKnownResponse wellKnownResponseWithoutDocType = getCredentialIssuerWellKnownResponseDto("Issuer1", @@ -202,7 +202,7 @@ void shouldThrowInvalidWellKnownResponseExceptionWhenMandatoryFieldClaimIsNotPre CredentialIssuerWellKnownResponse wellKnownResponseWithoutClaims = getCredentialIssuerWellKnownResponseDto("Issuer1", Map.of("CredentialType1", credentialSupportedResponse)); - CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); + Draft13CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new Draft13CredentialIssuerWellknownResponseValidator(); InvalidWellknownResponseException invalidWellknownResponseException = assertThrows(InvalidWellknownResponseException.class, () -> credentialIssuerWellknownResponseValidator.validate(wellKnownResponseWithoutClaims, validator) ); @@ -218,11 +218,12 @@ void shouldNotThrowInvalidWellKnownResponseExceptionWhenMandatoryFieldsAreNotPre CredentialIssuerWellKnownResponse wellKnownResponseWithoutClaims = getCredentialIssuerWellKnownResponseDto("Issuer1", Map.of("CredentialType1", getCredentialSupportedResponse("CredentialType1", "mso_mdoc"))); - CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new CredentialIssuerWellknownResponseValidator(); + Draft13CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator = new Draft13CredentialIssuerWellknownResponseValidator(); assertDoesNotThrow(() -> credentialIssuerWellknownResponseValidator.validate(wellKnownResponseWithoutClaims, validator)); } } + } diff --git a/src/test/java/io/mosip/mimoto/util/IssuerConfigUtilTest.java b/src/test/java/io/mosip/mimoto/util/IssuerConfigUtilTest.java index fb642e2bd..e6b24abb4 100644 --- a/src/test/java/io/mosip/mimoto/util/IssuerConfigUtilTest.java +++ b/src/test/java/io/mosip/mimoto/util/IssuerConfigUtilTest.java @@ -46,7 +46,7 @@ public class IssuerConfigUtilTest { Validator validator; @Mock - CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator; + Draft13CredentialIssuerWellknownResponseValidator credentialIssuerWellknownResponseValidator; @Mock VCSpecVersionDetector versionDetector; diff --git a/src/test/java/io/mosip/mimoto/util/RestApiClientTest.java b/src/test/java/io/mosip/mimoto/util/RestApiClientTest.java new file mode 100644 index 000000000..cb01490e1 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/util/RestApiClientTest.java @@ -0,0 +1,307 @@ +package io.mosip.mimoto.util; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.http.*; +import org.springframework.test.util.ReflectionTestUtils; +import org.springframework.web.client.HttpClientErrorException; +import org.springframework.web.client.ResourceAccessException; +import org.springframework.web.client.RestTemplate; + +import java.net.URI; +import java.nio.charset.StandardCharsets; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class RestApiClientTest { + + private static final String TEST_URI = "https://example.com/api"; + private static final String ACCESS_TOKEN = "test-access-token"; + + @Mock + private RestTemplate restTemplate; + + @Mock + private RestTemplate plainRestTemplate; + + @InjectMocks + private RestApiClient restApiClient; + + @BeforeEach + void setUp() { + ReflectionTestUtils.setField(restApiClient, "disableSelfTokenRestTemplate", false); + } + + // --- getApi(URI, Class) --- + + @Test + void getApiByUri_shouldReturnResponseBody() throws Exception { + URI uri = URI.create(TEST_URI); + ResponseEntity responseEntity = new ResponseEntity<>("response-body", HttpStatus.OK); + + when(restTemplate.exchange(eq(uri), eq(HttpMethod.GET), any(HttpEntity.class), eq(String.class))) + .thenReturn(responseEntity); + + String result = restApiClient.getApi(uri, String.class); + + assertEquals("response-body", result); + } + + @Test + void getApiByUri_shouldUsePlainRestTemplateWhenSelfTokenDisabled() throws Exception { + ReflectionTestUtils.setField(restApiClient, "disableSelfTokenRestTemplate", true); + URI uri = URI.create(TEST_URI); + ResponseEntity responseEntity = new ResponseEntity<>("plain-response", HttpStatus.OK); + + when(plainRestTemplate.exchange(eq(uri), eq(HttpMethod.GET), any(HttpEntity.class), eq(String.class))) + .thenReturn(responseEntity); + + String result = restApiClient.getApi(uri, String.class); + + assertEquals("plain-response", result); + verify(restTemplate, never()).exchange(any(URI.class), any(), any(), any(Class.class)); + } + + @Test + void getApiByUri_shouldReturnNullOnException() throws Exception { + URI uri = URI.create(TEST_URI); + + when(restTemplate.exchange(eq(uri), eq(HttpMethod.GET), any(HttpEntity.class), eq(String.class))) + .thenThrow(new ResourceAccessException("Connection refused")); + + String result = restApiClient.getApi(uri, String.class); + + assertNull(result); + } + + // --- getApi(String, Class) --- + + @Test + void getApiByUrl_shouldReturnResponse() { + when(restTemplate.getForObject(eq(TEST_URI), eq(String.class))) + .thenReturn("url-response"); + + String result = restApiClient.getApi(TEST_URI, String.class); + + assertEquals("url-response", result); + } + + @Test + void getApiByUrl_shouldUsePlainRestTemplateWhenSelfTokenDisabled() { + ReflectionTestUtils.setField(restApiClient, "disableSelfTokenRestTemplate", true); + + when(plainRestTemplate.getForObject(eq(TEST_URI), eq(String.class))) + .thenReturn("plain-url-response"); + + String result = restApiClient.getApi(TEST_URI, String.class); + + assertEquals("plain-url-response", result); + verify(restTemplate, never()).getForObject(anyString(), any()); + } + + @Test + void getApiByUrl_shouldReturnNullOnException() { + when(restTemplate.getForObject(eq(TEST_URI), eq(String.class))) + .thenThrow(new ResourceAccessException("Timeout")); + + String result = restApiClient.getApi(TEST_URI, String.class); + + assertNull(result); + } + + // --- postApi(String, MediaType, Object, Class) --- + + @Test + void postApi_shouldReturnResponse() throws Exception { + when(restTemplate.postForObject(eq(TEST_URI), any(HttpEntity.class), eq(String.class))) + .thenReturn("post-response"); + + String result = restApiClient.postApi(TEST_URI, MediaType.APPLICATION_JSON, "request-body", String.class); + + assertEquals("post-response", result); + } + + @Test + void postApi_shouldUsePlainRestTemplateWhenSelfTokenDisabled() throws Exception { + ReflectionTestUtils.setField(restApiClient, "disableSelfTokenRestTemplate", true); + + when(plainRestTemplate.postForObject(eq(TEST_URI), any(HttpEntity.class), eq(String.class))) + .thenReturn("plain-post-response"); + + String result = restApiClient.postApi(TEST_URI, MediaType.APPLICATION_JSON, "request-body", String.class); + + assertEquals("plain-post-response", result); + verify(restTemplate, never()).postForObject(anyString(), any(), any()); + } + + @Test + void postApi_shouldReturnNullOnException() throws Exception { + when(restTemplate.postForObject(eq(TEST_URI), any(HttpEntity.class), eq(String.class))) + .thenThrow(new ResourceAccessException("Connection refused")); + + String result = restApiClient.postApi(TEST_URI, MediaType.APPLICATION_JSON, "request-body", String.class); + + assertNull(result); + } + + // --- postApi(String, MediaType, Object, Class, String bearerToken) --- + + @Test + void postApiWithBearerToken_shouldReturnResponse() { + when(plainRestTemplate.postForObject(eq(TEST_URI), any(HttpEntity.class), eq(String.class))) + .thenReturn("bearer-response"); + + String result = restApiClient.postApi(TEST_URI, MediaType.APPLICATION_JSON, "request", String.class, ACCESS_TOKEN); + + assertEquals("bearer-response", result); + } + + @Test + void postApiWithBearerToken_shouldReturnNullOnException() { + when(plainRestTemplate.postForObject(eq(TEST_URI), any(HttpEntity.class), eq(String.class))) + .thenThrow(new ResourceAccessException("Timeout")); + + String result = restApiClient.postApi(TEST_URI, MediaType.APPLICATION_JSON, "request", String.class, ACCESS_TOKEN); + + assertNull(result); + } + + // --- postApiWithErrorResponse --- + + @Test + void postApiWithErrorResponse_shouldReturnResponseOnSuccess() { + TestResponse expected = new TestResponse("ok", null); + + when(plainRestTemplate.postForObject(eq(TEST_URI), any(HttpEntity.class), eq(TestResponse.class))) + .thenReturn(expected); + + TestResponse result = restApiClient.postApiWithErrorResponse( + TEST_URI, MediaType.APPLICATION_JSON, "request", TestResponse.class, ACCESS_TOKEN); + + assertNotNull(result); + assertEquals("ok", result.status); + } + + @Test + void postApiWithErrorResponse_shouldParseErrorBodyOnHttpClientError() { + String errorJson = "{\"status\":null,\"error\":\"invalid_nonce\"}"; + HttpClientErrorException exception = HttpClientErrorException.create( + HttpStatus.BAD_REQUEST, "Bad Request", + HttpHeaders.EMPTY, errorJson.getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8); + + when(plainRestTemplate.postForObject(eq(TEST_URI), any(HttpEntity.class), eq(TestResponse.class))) + .thenThrow(exception); + + TestResponse result = restApiClient.postApiWithErrorResponse( + TEST_URI, MediaType.APPLICATION_JSON, "request", TestResponse.class, ACCESS_TOKEN); + + assertNotNull(result); + assertEquals("invalid_nonce", result.error); + } + + @Test + void postApiWithErrorResponse_shouldReturnNullWhenErrorBodyCannotBeParsed() { + String malformedBody = "not-valid-json"; + HttpClientErrorException exception = HttpClientErrorException.create( + HttpStatus.BAD_REQUEST, "Bad Request", + HttpHeaders.EMPTY, malformedBody.getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8); + + when(plainRestTemplate.postForObject(eq(TEST_URI), any(HttpEntity.class), eq(TestResponse.class))) + .thenThrow(exception); + + TestResponse result = restApiClient.postApiWithErrorResponse( + TEST_URI, MediaType.APPLICATION_JSON, "request", TestResponse.class, ACCESS_TOKEN); + + assertNull(result); + } + + @Test + void postApiWithErrorResponse_shouldReturnNullOnNonClientError() { + when(plainRestTemplate.postForObject(eq(TEST_URI), any(HttpEntity.class), eq(TestResponse.class))) + .thenThrow(new ResourceAccessException("Connection refused")); + + TestResponse result = restApiClient.postApiWithErrorResponse( + TEST_URI, MediaType.APPLICATION_JSON, "request", TestResponse.class, ACCESS_TOKEN); + + assertNull(result); + } + + @Test + void postApiWithErrorResponse_shouldHandleHttpServerError() { + HttpClientErrorException exception = HttpClientErrorException.create( + HttpStatus.FORBIDDEN, "Forbidden", + HttpHeaders.EMPTY, "{}".getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8); + + when(plainRestTemplate.postForObject(eq(TEST_URI), any(HttpEntity.class), eq(TestResponse.class))) + .thenThrow(exception); + + TestResponse result = restApiClient.postApiWithErrorResponse( + TEST_URI, MediaType.APPLICATION_JSON, "request", TestResponse.class, ACCESS_TOKEN); + + assertNotNull(result); + } + + // --- getApiWithCustomHeaders --- + + @Test + void getApiWithCustomHeaders_shouldReturnResponse() { + HttpHeaders customHeaders = new HttpHeaders(); + customHeaders.set("X-Custom", "value"); + + ResponseEntity responseEntity = new ResponseEntity<>("custom-response", HttpStatus.OK); + + when(restTemplate.exchange(eq(TEST_URI), eq(HttpMethod.GET), any(HttpEntity.class), eq(String.class))) + .thenReturn(responseEntity); + + String result = restApiClient.getApiWithCustomHeaders(TEST_URI, String.class, customHeaders); + + assertEquals("custom-response", result); + } + + @Test + void getApiWithCustomHeaders_shouldUsePlainRestTemplateWhenSelfTokenDisabled() { + ReflectionTestUtils.setField(restApiClient, "disableSelfTokenRestTemplate", true); + + HttpHeaders customHeaders = new HttpHeaders(); + ResponseEntity responseEntity = new ResponseEntity<>("plain-custom", HttpStatus.OK); + + when(plainRestTemplate.exchange(eq(TEST_URI), eq(HttpMethod.GET), any(HttpEntity.class), eq(String.class))) + .thenReturn(responseEntity); + + String result = restApiClient.getApiWithCustomHeaders(TEST_URI, String.class, customHeaders); + + assertEquals("plain-custom", result); + } + + @Test + void getApiWithCustomHeaders_shouldReturnNullOnException() { + HttpHeaders customHeaders = new HttpHeaders(); + + when(restTemplate.exchange(eq(TEST_URI), eq(HttpMethod.GET), any(HttpEntity.class), eq(String.class))) + .thenThrow(new ResourceAccessException("Timeout")); + + String result = restApiClient.getApiWithCustomHeaders(TEST_URI, String.class, customHeaders); + + assertNull(result); + } + + static class TestResponse { + public String status; + public String error; + + public TestResponse() {} + + public TestResponse(String status, String error) { + this.status = status; + this.error = error; + } + } +} diff --git a/src/test/java/io/mosip/mimoto/util/SigningKeyUtilTest.java b/src/test/java/io/mosip/mimoto/util/SigningKeyUtilTest.java index dacf95361..fc9a9d534 100644 --- a/src/test/java/io/mosip/mimoto/util/SigningKeyUtilTest.java +++ b/src/test/java/io/mosip/mimoto/util/SigningKeyUtilTest.java @@ -117,6 +117,20 @@ public void shouldGenerateJwtSuccessfully() throws Exception { assertEquals("Nonce should match", "test-nonce", signedJWT.getJWTClaimsSet().getStringClaim("nonce")); } + @Test + public void shouldGenerateJwtWithoutNonceClaimWhenCNonceIsNull() throws Exception { + KeyPair keyPair = SigningKeyUtil.generateKeyPair(SigningAlgorithm.RS256); + String jwt = SigningKeyUtil.generateJwt(SigningAlgorithm.RS256, "test-audience", "test-client-id", null, keyPair); + + assertNotNull("JWT should not be null", jwt); + assertFalse("JWT should not be empty", jwt.isEmpty()); + + SignedJWT signedJWT = SignedJWT.parse(jwt); + assertEquals("Subject should match", "test-client-id", signedJWT.getJWTClaimsSet().getSubject()); + assertEquals("Audience should match", "test-audience", signedJWT.getJWTClaimsSet().getAudience().getFirst()); + assertFalse("Nonce claim should be absent", signedJWT.getJWTClaimsSet().getClaims().containsKey("nonce")); + } + @Test public void shouldGenerateJwkSuccessfully() throws Exception { KeyPair keyPair = SigningKeyUtil.generateKeyPair(SigningAlgorithm.RS256); diff --git a/src/test/java/io/mosip/mimoto/util/V1CredentialIssuerWellknownResponseValidatorTest.java b/src/test/java/io/mosip/mimoto/util/V1CredentialIssuerWellknownResponseValidatorTest.java new file mode 100644 index 000000000..e690dc868 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/util/V1CredentialIssuerWellknownResponseValidatorTest.java @@ -0,0 +1,99 @@ +package io.mosip.mimoto.util; + +import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; +import io.mosip.mimoto.dto.mimoto.CredentialsSupportedResponse; +import io.mosip.mimoto.exception.InvalidWellknownResponseException; +import jakarta.validation.Validation; +import jakarta.validation.Validator; +import jakarta.validation.ValidatorFactory; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.Collections; +import java.util.Map; + +import static io.mosip.mimoto.util.TestUtilities.getCredentialIssuerWellKnownResponseDto; +import static io.mosip.mimoto.util.TestUtilities.getCredentialSupportedResponse; +import static org.junit.jupiter.api.Assertions.*; + +class V1CredentialIssuerWellknownResponseValidatorTest { + + private Validator validator; + private final V1CredentialIssuerWellknownResponseValidator v1Validator = new V1CredentialIssuerWellknownResponseValidator(); + + @BeforeEach + void setUp() { + ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); + validator = factory.getValidator(); + } + + @Test + void shouldPassValidationForV1LdpVcWithDisplayAndClaims() { + CredentialsSupportedResponse config = getCredentialSupportedResponse("CredentialType1"); + config.setCredentialDefinition(null); + config.setClaims(Map.of("given_name", Map.of("display", java.util.List.of(Map.of("name", "Given Name", "locale", "en"))))); + + CredentialIssuerWellKnownResponse response = getCredentialIssuerWellKnownResponseDto("Issuer1", + Map.of("CredentialType1", config)); + + assertDoesNotThrow(() -> v1Validator.validate(response, validator)); + } + + @Test + void shouldFailValidationForV1LdpVcWithoutDisplay() { + CredentialsSupportedResponse config = getCredentialSupportedResponse("CredentialType1"); + config.setCredentialDefinition(null); + config.setDisplay(null); + config.setClaims(Map.of("given_name", Map.of())); + + CredentialIssuerWellKnownResponse response = getCredentialIssuerWellKnownResponseDto("Issuer1", + Map.of("CredentialType1", config)); + + InvalidWellknownResponseException exception = assertThrows(InvalidWellknownResponseException.class, + () -> v1Validator.validate(response, validator)); + assertTrue(exception.getMessage().contains("Mandatory field 'display' missing for V1 ldp_vc")); + } + + @Test + void shouldFailValidationForV1LdpVcWithEmptyDisplay() { + CredentialsSupportedResponse config = getCredentialSupportedResponse("CredentialType1"); + config.setCredentialDefinition(null); + config.setDisplay(Collections.emptyList()); + config.setClaims(Map.of("given_name", Map.of())); + + CredentialIssuerWellKnownResponse response = getCredentialIssuerWellKnownResponseDto("Issuer1", + Map.of("CredentialType1", config)); + + InvalidWellknownResponseException exception = assertThrows(InvalidWellknownResponseException.class, + () -> v1Validator.validate(response, validator)); + assertTrue(exception.getMessage().contains("Mandatory field 'display' missing for V1 ldp_vc")); + } + + @Test + void shouldFailValidationForV1LdpVcWithoutClaims() { + CredentialsSupportedResponse config = getCredentialSupportedResponse("CredentialType1"); + config.setCredentialDefinition(null); + config.setClaims(null); + + CredentialIssuerWellKnownResponse response = getCredentialIssuerWellKnownResponseDto("Issuer1", + Map.of("CredentialType1", config)); + + InvalidWellknownResponseException exception = assertThrows(InvalidWellknownResponseException.class, + () -> v1Validator.validate(response, validator)); + assertTrue(exception.getMessage().contains("Mandatory field 'claims' missing for V1 ldp_vc")); + } + + @Test + void shouldFailValidationForV1LdpVcWithEmptyClaims() { + CredentialsSupportedResponse config = getCredentialSupportedResponse("CredentialType1"); + config.setCredentialDefinition(null); + config.setClaims(Map.of()); + + CredentialIssuerWellKnownResponse response = getCredentialIssuerWellKnownResponseDto("Issuer1", + Map.of("CredentialType1", config)); + + InvalidWellknownResponseException exception = assertThrows(InvalidWellknownResponseException.class, + () -> v1Validator.validate(response, validator)); + assertTrue(exception.getMessage().contains("Mandatory field 'claims' missing for V1 ldp_vc")); + } +} diff --git a/src/test/java/io/mosip/mimoto/util/parser/Draft13WellknownParserTest.java b/src/test/java/io/mosip/mimoto/util/parser/Draft13WellknownParserTest.java index d262ef2e4..f2f48fdda 100644 --- a/src/test/java/io/mosip/mimoto/util/parser/Draft13WellknownParserTest.java +++ b/src/test/java/io/mosip/mimoto/util/parser/Draft13WellknownParserTest.java @@ -5,7 +5,7 @@ import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; import io.mosip.mimoto.dto.mimoto.CredentialsSupportedResponse; import io.mosip.mimoto.exception.InvalidWellknownResponseException; -import io.mosip.mimoto.util.CredentialIssuerWellknownResponseValidator; +import io.mosip.mimoto.util.Draft13CredentialIssuerWellknownResponseValidator; import jakarta.validation.ConstraintViolation; import jakarta.validation.Validator; import org.junit.jupiter.api.BeforeEach; @@ -27,7 +27,7 @@ class Draft13WellknownParserTest { @BeforeEach void setUp() { objectMapper = new ObjectMapper(); - parser = new Draft13WellknownParser(objectMapper, new CredentialIssuerWellknownResponseValidator()); + parser = new Draft13WellknownParser(objectMapper, new Draft13CredentialIssuerWellknownResponseValidator()); } @Test @@ -233,7 +233,7 @@ void shouldHandleNullOptionalFields() throws IOException { assertNull(cred.getOrder()); } - private static class ThrowingValidator extends CredentialIssuerWellknownResponseValidator { + private static class ThrowingValidator extends Draft13CredentialIssuerWellknownResponseValidator { @Override public void validate(CredentialIssuerWellKnownResponse response, Validator validator) throws InvalidWellknownResponseException { throw new InvalidWellknownResponseException("test error"); diff --git a/src/test/java/io/mosip/mimoto/util/parser/V1WellknownParserTest.java b/src/test/java/io/mosip/mimoto/util/parser/V1WellknownParserTest.java index a731a1c56..90fed8f30 100644 --- a/src/test/java/io/mosip/mimoto/util/parser/V1WellknownParserTest.java +++ b/src/test/java/io/mosip/mimoto/util/parser/V1WellknownParserTest.java @@ -5,7 +5,7 @@ import io.mosip.mimoto.dto.mimoto.CredentialIssuerWellKnownResponse; import io.mosip.mimoto.dto.mimoto.CredentialsSupportedResponse; import io.mosip.mimoto.exception.InvalidWellknownResponseException; -import io.mosip.mimoto.util.CredentialIssuerWellknownResponseValidator; +import io.mosip.mimoto.util.V1CredentialIssuerWellknownResponseValidator; import jakarta.validation.ConstraintViolation; import jakarta.validation.Validator; import org.junit.jupiter.api.BeforeEach; @@ -27,7 +27,7 @@ class V1WellknownParserTest { @BeforeEach void setUp() { objectMapper = new ObjectMapper(); - parser = new V1WellknownParser(objectMapper, new CredentialIssuerWellknownResponseValidator()); + parser = new V1WellknownParser(objectMapper, new V1CredentialIssuerWellknownResponseValidator()); } @Test @@ -135,7 +135,10 @@ void shouldMapAllFieldsFromV1Config() throws IOException { {"name": "Credential One", "locale": "en"}, {"name": "Credenziale Uno", "locale": "it"} ], - "claims": {"field1": {}, "field2": {}} + "claims": [ + {"path": ["field1"], "display": [{"name": "Field 1", "locale": "en"}]}, + {"path": ["field2"], "display": [{"name": "Field 2", "locale": "en"}]} + ] }, "vct": "VCT1" } @@ -208,7 +211,9 @@ void shouldParseV1ResponseWithCredentialMetadataButNoDisplay() throws IOExceptio "jwt": {"proof_signing_alg_values_supported": ["ES256"]} }, "credential_metadata": { - "claims": {"given_name": {}} + "claims": [ + {"path": ["given_name"], "display": [{"name": "Given Name", "locale": "en"}]} + ] } } } @@ -225,6 +230,182 @@ void shouldParseV1ResponseWithCredentialMetadataButNoDisplay() throws IOExceptio assertEquals(1, cred.getClaims().size()); } + @Test + void shouldParseV1ArrayFormatClaims() throws IOException { + String json = """ + { + "credential_issuer": "https://issuer.example.com", + "authorization_servers": ["https://auth.example.com"], + "credential_endpoint": "https://issuer.example.com/credential", + "nonce_endpoint": "https://issuer.example.com/nonce", + "credential_configurations_supported": { + "EmployeeCred": { + "format": "vc+sd-jwt", + "scope": "employee.read", + "proof_types_supported": { + "jwt": {"proof_signing_alg_values_supported": ["ES256"]} + }, + "vct": "EmployeeCredential", + "credential_metadata": { + "display": [{"name": "Employee Credential", "locale": "en"}], + "claims": [ + {"path": ["employeeId"], "display": [{"name": "Employee ID", "locale": "en"}]}, + {"path": ["name"], "display": [{"name": "Name", "locale": "en"}, {"name": "Nombre", "locale": "es"}]}, + {"path": ["address", "city"], "display": [{"name": "City", "locale": "en"}]} + ] + } + } + } + } + """; + + CredentialIssuerWellKnownResponse result = parser.parse(json); + + CredentialsSupportedResponse cred = result.getCredentialConfigurationsSupported().get("EmployeeCred"); + assertNotNull(cred); + assertNotNull(cred.getClaims()); + assertEquals(3, cred.getClaims().size()); + + assertTrue(cred.getClaims().containsKey("employeeId")); + assertTrue(cred.getClaims().containsKey("name")); + assertTrue(cred.getClaims().containsKey("city")); + + Map nameClaimValue = (Map) cred.getClaims().get("name"); + assertNotNull(nameClaimValue.get("display")); + List> nameDisplays = (List>) nameClaimValue.get("display"); + assertEquals(2, nameDisplays.size()); + assertEquals("Name", nameDisplays.get(0).get("name")); + } + + @Test + void shouldUseLastPathElementAsClaimKey() throws IOException { + String json = """ + { + "credential_issuer": "https://issuer.example.com", + "authorization_servers": ["https://auth.example.com"], + "credential_endpoint": "https://issuer.example.com/credential", + "credential_configurations_supported": { + "TestCred": { + "format": "vc+sd-jwt", + "scope": "test.read", + "proof_types_supported": { + "jwt": {"proof_signing_alg_values_supported": ["ES256"]} + }, + "credential_metadata": { + "display": [{"name": "Test", "locale": "en"}], + "claims": [ + {"path": ["org.iso.18013.5.1", "given_name"], "display": [{"name": "Given Name", "locale": "en"}]}, + {"path": ["org.iso.18013.5.1.aamva", "organ_donor"]} + ] + } + } + } + } + """; + + CredentialIssuerWellKnownResponse result = parser.parse(json); + + CredentialsSupportedResponse cred = result.getCredentialConfigurationsSupported().get("TestCred"); + assertNotNull(cred.getClaims()); + assertEquals(2, cred.getClaims().size()); + assertTrue(cred.getClaims().containsKey("given_name")); + assertTrue(cred.getClaims().containsKey("organ_donor")); + } + + @Test + void shouldReturnNullClaimsWhenClaimsArrayIsEmpty() throws IOException { + String json = """ + { + "credential_issuer": "https://issuer.example.com", + "authorization_servers": ["https://auth.example.com"], + "credential_endpoint": "https://issuer.example.com/credential", + "credential_configurations_supported": { + "TestCred": { + "format": "vc+sd-jwt", + "scope": "test.read", + "proof_types_supported": { + "jwt": {"proof_signing_alg_values_supported": ["ES256"]} + }, + "credential_metadata": { + "display": [{"name": "Test", "locale": "en"}], + "claims": [] + } + } + } + } + """; + + CredentialIssuerWellKnownResponse result = parser.parse(json); + + assertNull(result.getCredentialConfigurationsSupported().get("TestCred").getClaims()); + } + + @Test + void shouldSkipClaimEntriesWithEmptyPath() throws IOException { + String json = """ + { + "credential_issuer": "https://issuer.example.com", + "authorization_servers": ["https://auth.example.com"], + "credential_endpoint": "https://issuer.example.com/credential", + "credential_configurations_supported": { + "TestCred": { + "format": "vc+sd-jwt", + "scope": "test.read", + "proof_types_supported": { + "jwt": {"proof_signing_alg_values_supported": ["ES256"]} + }, + "credential_metadata": { + "display": [{"name": "Test", "locale": "en"}], + "claims": [ + {"path": [], "display": [{"name": "Empty Path", "locale": "en"}]}, + {"path": ["valid_field"], "display": [{"name": "Valid", "locale": "en"}]} + ] + } + } + } + } + """; + + CredentialIssuerWellKnownResponse result = parser.parse(json); + + Map claims = result.getCredentialConfigurationsSupported().get("TestCred").getClaims(); + assertNotNull(claims); + assertEquals(1, claims.size()); + assertTrue(claims.containsKey("valid_field")); + } + + @Test + void shouldReturnNullClaimsWhenAllEntriesAreSkipped() throws IOException { + String json = """ + { + "credential_issuer": "https://issuer.example.com", + "authorization_servers": ["https://auth.example.com"], + "credential_endpoint": "https://issuer.example.com/credential", + "credential_configurations_supported": { + "TestCred": { + "format": "vc+sd-jwt", + "scope": "test.read", + "proof_types_supported": { + "jwt": {"proof_signing_alg_values_supported": ["ES256"]} + }, + "credential_metadata": { + "display": [{"name": "Test", "locale": "en"}], + "claims": [ + {"path": [], "display": [{"name": "No Path", "locale": "en"}]}, + {"display": [{"name": "Missing Path", "locale": "en"}]}, + {"path": ["ns", null], "display": [{"name": "Null Key", "locale": "en"}]} + ] + } + } + } + } + """; + + CredentialIssuerWellKnownResponse result = parser.parse(json); + + assertNull(result.getCredentialConfigurationsSupported().get("TestCred").getClaims()); + } + @Test void shouldThrowIOExceptionForInvalidJson() { assertThrows(IOException.class, () -> parser.parse("not valid json")); @@ -251,7 +432,7 @@ void shouldPropagateValidationException() { () -> throwingParser.validate(response, noOpValidator)); } - private static class ThrowingValidator extends CredentialIssuerWellknownResponseValidator { + private static class ThrowingValidator extends V1CredentialIssuerWellknownResponseValidator { @Override public void validate(CredentialIssuerWellKnownResponse response, Validator validator) throws InvalidWellknownResponseException { throw new InvalidWellknownResponseException("test error"); From 4f1757667cb6c70674e61642dceaa87831da6eb9 Mon Sep 17 00:00:00 2001 From: Rudhhi Shah Date: Thu, 23 Apr 2026 15:56:58 +0530 Subject: [PATCH 851/860] docs(mimoto) - technical design documentation update (#1081) * docs(mimoto) Updated the documentation to have error codes and added details in google integration doc Signed-off-by: Rudhhi Shah * docs(mimoto) Addressed code rabbit formatting changes Signed-off-by: Rudhhi Shah --------- Signed-off-by: Rudhhi Shah --- docs/GoogleOauth2LoginIntegration.md | 69 ++++++++++++++++++++++- docs/UserDataEncryptionWithPinBasedKey.md | 62 +++++++++++++++++++- docs/WalletUnlockProcess.md | 17 +++++- 3 files changed, 145 insertions(+), 3 deletions(-) diff --git a/docs/GoogleOauth2LoginIntegration.md b/docs/GoogleOauth2LoginIntegration.md index 5d3cd657a..d86a1db85 100644 --- a/docs/GoogleOauth2LoginIntegration.md +++ b/docs/GoogleOauth2LoginIntegration.md @@ -34,6 +34,32 @@ Before you begin, ensure you have: Replace `` with your application's domain. - Ensure the redirect URI matches the one configured in the Google Developer Console. --- + +## Execution Flow + +### Phase 1: Login Initiation +1. **User Action**: The user clicks the "Continue with Google" button on the Inji Web landing page. +2. **Redirection**: Inji Web redirects the browser to Mimoto's authorization endpoint. +3. **IdP Handshake**: Mimoto's security filter chain handles the request and redirects the user to the IDP's consent screen. + +### Phase 2: Authorization & Token Exchange +1. **Callback**: After account selection, the IDP redirects back to Mimoto with an authorization code. +2. **Token Retrieval**: Spring Security internally exchanges this code for an `access_token` and fetches the user profile (Name, Email, Picture). + +### Phase 3: User Onboarding +After successful login, the system checks if the user already exists. If not, it creates a new internal identity and securely stores the user’s profile information. + +An internal `userId` is generated to uniquely identify the user within the system. This ensures the system is not tightly coupled to a specific identity provider and can support multiple providers in the future. + +1. **Metadata Check**: Mimoto checks the `user_metadata` table. +2. **Creation/Update**: If new, it generates a unique internal **UUID** (`userId`) and encrypts the PII (Name, Email, Picture). Else the existing record is used. +3. **Enrichment**: The internal `userId` is added to the security principal for downstream use. + +### Phase 4: Success/Failure Handling +1. **Success**: Mimoto saves the `userId` and user metadata into the **HTTPSession** and redirects the user to the passcode page. +2. **Failure**: Mimoto captures errors (timeouts, denied consent), encodes them, and redirects back to the UI with error parameters. +--- + ## Sequence Diagram ### Google Login Flow ```mermaid @@ -88,4 +114,45 @@ sequenceDiagram | `TokenAuthController` | Provides API for token-based authentication and session creation. | | `UsersController` | Manages user profile retrieval using session-based authentication. | | `WalletsController` | Handles wallet creation, unlocking, and deletion using session-based authentication. | -| `WalletCredentialsController` | Manages credential download, retrieval, and deletion for wallets. |--- +| `WalletCredentialsController` | Manages credential download, retrieval, and deletion for wallets. | + +### Configuration & Switching Providers +If you want to change your IDP from Google to another provider, you need to update the following properties. + +**Important:** When switching, you should replace the word `google` in the property keys with your new provider's **Registration ID** (e.g., `okta`, `facebook`, or `keycloak`). Refer `application-default.properties` for the property keys. + +#### A. Client Registration (in `application-default.properties`) +These properties identify the application to the IDP: +* `spring.security.oauth2.client.registration.{registrationId}.client-id` – Client ID from your new provider. +* `spring.security.oauth2.client.registration.{registrationId}.client-secret` – Client secret from your new provider. +* `spring.security.oauth2.client.registration.{registrationId}.scope` – Scopes supported (e.g., `profile, email`). +* `spring.security.oauth2.client.registration.{registrationId}.client-name` – Human-readable name for the login button. + +#### B. Provider Endpoints (in `application-default.properties`) +These tell Mimoto where to send the user for authentication: +* `spring.security.oauth2.client.provider.{registrationId}.authorization-uri` – The provider's login URL. +* `spring.security.oauth2.client.provider.{registrationId}.token-uri` – The URL to exchange codes for tokens. +* `spring.security.oauth2.client.provider.{registrationId}.user-info-uri` – The URL to fetch user profile details. +* `spring.security.oauth2.client.provider.{registrationId}.jwk-set-uri` – The URI for the provider's public keys to validate tokens. + +#### C. Attribute Mappings (in `application-default.properties`) +These map the IDP's response fields to Inji’s internal metadata: +* `spring.security.oauth2.client.provider.{registrationId}.userNameAttribute` – The unique identifier (e.g., `sub`). +* `spring.security.oauth2.client.provider.{registrationId}.nameAttribute` – Field for the user's full name. +* `spring.security.oauth2.client.provider.{registrationId}.emailAttribute` – Field for the user's email. +* `spring.security.oauth2.client.provider.{registrationId}.pictureAttribute` – Field for the profile picture URL. + +#### D. Global Properties (in `application.properties`) +* `googleIdToken` – Update this URL to point to the new provider's token endpoint + + +### Errors +When login fails, Mimoto uses **302 Redirects** to pass error context back to Inji Web. +Direct requests to protected APIs made without a valid session will return a standard 401 Unauthorized response. + +| Scenario | HTTP Status | Description | +|--------------------|-------------|---------------------------------------------------------------------------------------| +| **Login Success** | 302 | Redirects to `${mosip.inji.web.authentication.success.redirect.url}/user/passcode`. | +| **Consent Denied** | 302 | Redirects to `${injiWebUrl}/?status=error&error_message=...`. | +| **IDP Timeout** | 302 | Redirects to `${injiWebUrl}/?status=error&error_message=...`. IDP servers unreachable. | +| **Unauthorized** | 401 | Returned if a user attempts to access protected APIs without an active session. | \ No newline at end of file diff --git a/docs/UserDataEncryptionWithPinBasedKey.md b/docs/UserDataEncryptionWithPinBasedKey.md index 28fa34c92..5bd6c61aa 100644 --- a/docs/UserDataEncryptionWithPinBasedKey.md +++ b/docs/UserDataEncryptionWithPinBasedKey.md @@ -111,4 +111,64 @@ F --> G[DB] class A,B,C,D,E,F,G,H,I,J,K,L,M,N stylePrimary class O,P,Q styleWarning ``` -This flow ensures that sensitive user data is securely encrypted and accessible only to the user who knows the PIN. \ No newline at end of file +This flow ensures that sensitive user data is securely encrypted and accessible only to the user who knows the PIN. + +## Sequence Diagram: Secure Data Access + +```mermaid +sequenceDiagram + actor User + participant UI as Inji Web UI + participant WC as WalletsController + participant WS as WalletService + participant DPS as DataProtectionService + participant DB as Database + participant KC as MOSIP Kernel
(Cryptomanager) + + Note over User, DB: Wallet Setup + User->>UI: Enter PIN + UI->>WC: POST /wallets + WC->>WS: createWallet + WS->>WS: Generate Wallet Key + WS->>WS: Protect Wallet Key using PIN (derive + encrypt) + WS->>DB: Store encrypted wallet data + WS-->>WC: Wallet Created + WC-->>UI: 200 OK + + Note over User, DB: Wallet Unlock + User->>UI: Enter PIN + UI->>WC: POST /wallets/{id}/unlock + WC->>WS: unlockWallet + WS->>DB: Fetch encrypted wallet key + WS->>WS: Decrypt Wallet Key using PIN + WS-->>WC: Wallet Key + WC->>WC: Store in session + WC-->>UI: 200 OK + + Note over User, DB: Credential Download + UI->>WC: Store Credential + WC->>DPS: encryptCredential + DPS->>DPS: AES-GCM encryption + DPS->>DB: Save encrypted credential + + Note over User, DB: PII Protection + UI->>WC: Save/Update Profile + WC->>DPS: encrypt + DPS->>KC: Request encryption + KC-->>DPS: Encrypted data + DPS->>DB: Save encrypted metadata +``` + +This high-level sequence diagram shows how the UI and backend interact during wallet creation, unlock, and secure data operations. + +## Errors + +Mimoto returns specific error codes if the encryption/decryption process fails: + +| Error Code | HTTP Status | Description | +|----------------------|-------------|--------------------------------------------------------------------------------------------| +| invalid_request | 400 | Validation failure: Missing Wallet ID or User ID or wallet key. invalid 6-digit PIN format. | +| invalid_pin | 400 | Incorrect PIN: Decryption of wallet_key failed; retries still available. | +| unauthorized | 401 | Session expired: User ID not found in session. | +| internal_server_error | 500 | Processing error during decryption or cryptomanager operation. | +| database_unavailable | 503 | Database unavailable: Unable to fetch or update required data. | \ No newline at end of file diff --git a/docs/WalletUnlockProcess.md b/docs/WalletUnlockProcess.md index a4d230780..8ded38b11 100644 --- a/docs/WalletUnlockProcess.md +++ b/docs/WalletUnlockProcess.md @@ -150,4 +150,19 @@ wallet.passcode.retryBlockedUntil=60 wallet.passcode.maxFailedAttemptsAllowedPerCycle=5 # Maximum number of lock cycles allowed before the wallet is permanently locked (defaults to 1 if <=0) wallet.passcode.maxLockCyclesAllowed=3 -``` \ No newline at end of file +``` + +## Errors + +Mimoto uses the following error codes to signal wallet state and failures to the UI: + +| Error Code | HTTP Status | Description | +|-------------------------------|-------------|------------------------------------------------------------------------------------------------------| +| `invalid_request` | 400 | Invalid input such as missing user ID, invalid wallet ID, or invalid PIN format | +| `invalid_pin` | 400 | Incorrect PIN, retry attempts are still available. | +| `last_attempt_before_lockout` | 400 | Indicates the final remaining retry attempt before the wallet transitions to a permanent lock state. | +| `unauthorized` | 401 | User is not authenticated or user ID is missing from the session. | +| `temporarily_locked` | 423 | Maximum attempts reached; wallet locked temporarily until cooldown period expires. | +| `permanently_locked` | 423 | Maximum lock cycles exceeded; wallet is permanently locked and cannot be unlocked using PIN. | +| `internal_server_error` | 500 | Unexpected server-side failure during wallet decryption or retrieval. | +| `database_unavailable` | 503 | Failure to connect to or interact with the database. | \ No newline at end of file From afc2891dbe385a198cf99f515ae25403e19e1a13 Mon Sep 17 00:00:00 2001 From: Durgesh Konga Date: Mon, 27 Apr 2026 14:22:11 +0530 Subject: [PATCH 852/860] fix(issuers-config): Revert Issuers V1 Endpoint attributes (#1085) Signed-off-by: Durgesh Konga --- docker-compose/config/mimoto-issuers-config.json | 6 ++++++ src/main/resources/mimoto-issuers-config.json | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/docker-compose/config/mimoto-issuers-config.json b/docker-compose/config/mimoto-issuers-config.json index dd5e611c1..eb612f8f7 100644 --- a/docker-compose/config/mimoto-issuers-config.json +++ b/docker-compose/config/mimoto-issuers-config.json @@ -19,6 +19,12 @@ "client_alias": "wallet-demo-client", "qr_code_type": "OnlineSharing", "credential_issuer_host": "https://injicertify-mock.collab.mosip.net", + "wellknown_endpoint": "https://injicertify-mock.collab.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer", + "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", + "authorization_audience": "https://esignet-mock.collab.mosip.net/v1/esignet/oauth/v2/token", + "token_endpoint": "https://localhost:8099/v1/mimoto/get-token/Mock", + "proxy_token_endpoint": "https://esignet-mock.collab.mosip.net/v1/esignet/oauth/v2/token", + "credential_issuer": "Mock", "enabled": "true" } ] diff --git a/src/main/resources/mimoto-issuers-config.json b/src/main/resources/mimoto-issuers-config.json index dd5e611c1..eb612f8f7 100644 --- a/src/main/resources/mimoto-issuers-config.json +++ b/src/main/resources/mimoto-issuers-config.json @@ -19,6 +19,12 @@ "client_alias": "wallet-demo-client", "qr_code_type": "OnlineSharing", "credential_issuer_host": "https://injicertify-mock.collab.mosip.net", + "wellknown_endpoint": "https://injicertify-mock.collab.mosip.net/v1/certify/issuance/.well-known/openid-credential-issuer", + "redirect_uri": "io.mosip.residentapp.inji://oauthredirect", + "authorization_audience": "https://esignet-mock.collab.mosip.net/v1/esignet/oauth/v2/token", + "token_endpoint": "https://localhost:8099/v1/mimoto/get-token/Mock", + "proxy_token_endpoint": "https://esignet-mock.collab.mosip.net/v1/esignet/oauth/v2/token", + "credential_issuer": "Mock", "enabled": "true" } ] From c66af5a1ab8f9c7bd495ca857dacff21cdb0ef05 Mon Sep 17 00:00:00 2001 From: Durgesh Konga Date: Thu, 30 Apr 2026 10:39:37 +0530 Subject: [PATCH 853/860] [INJIWEB-1856] - Add Logic for sd-jwt ovp credential matching (#1038) (#1090) * [INJIWEB-1856] - Add Logic for sd-jwt ovp credential matching * [INJIWEB-1856] - Add Logic for Algorithm Check * [INJIWEB-1856] - Add logic to resolve publicClaims and sdClaims in api response * [INJIWEB-1856] - Remove metadata keys from public claims * [INJIWEB-1856] - Add null handling scenarios, claims generation logic * [INJIWEB-1856] - Add logic to handle nested sdClaims # Conflicts: # src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java * [INJIWEB-1856] - Add Junit Test cases * [INJIWEB-1856] - Update description for claims attribute Update logic for sdClaims update Test cases for sdClaims * [INJIWEB-1856] - Refactor Matches Format logic Remove hardcoded testdata * [INJIWEB-1856] - Code refactoring and update test cases * [INJIWEB-1856] - Update to Constructor Injection replacing Autowired --------- Signed-off-by: Durgesh Konga --- .talismanrc | 8 +- .../io/mosip/mimoto/dto/CredentialDTO.java | 10 + .../service/CredentialFormatHandler.java | 5 +- .../impl/CredentialMatchingServiceImpl.java | 207 ++- .../impl/LdpVcCredentialFormatHandler.java | 5 + .../impl/VcSdJwtCredentialFormatHandler.java | 178 +- .../CredentialMatchingServiceTest.java | 1458 +++++++++++++---- .../LdpVcCredentialFormatHandlerTest.java | 70 + .../VcSdJwtCredentialFormatHandlerTest.java | 632 +++++++ 9 files changed, 2217 insertions(+), 356 deletions(-) diff --git a/.talismanrc b/.talismanrc index 028f28903..30960d89b 100644 --- a/.talismanrc +++ b/.talismanrc @@ -130,9 +130,9 @@ fileignoreconfig: - filename: docker-compose/README.md checksum: f70385d1be6b7945df1afac0890bdce5ecceb63cdba08bdd3f760f40f843c630 - filename: src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java - checksum: 425cb4066c02d93572b1db02099532465479e7f4c94c3684c5d46a063352631d + checksum: f44f44a691f7bbc2e34e22d2d48791b883b79794011d514865de2ebecd58a655 - filename: src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java - checksum: e91aa11aa049453a3a7cd542386dbb813f5c868678f68d6bd71af92149e0d5db + checksum: 3c0a06bac77cde10b2d7d4b0c43ce010fe00a31b9aa97af78af9e87e8df8401d - filename: db_scripts/inji_mimoto/ddl.sql checksum: 51cd2efbe5220b995ae7cff7d70797b2c1bde0ce3325b70d62a31a1f4f41aa47 - filename: db_scripts/inji_mimoto/ddl/mimoto-trusted-verifiers.sql @@ -165,9 +165,9 @@ fileignoreconfig: - filename: src/main/java/io/mosip/mimoto/service/CredentialMatchingService.java checksum: b2ceada5c81b9dadb6e7780604c68b7ae2d4272d2f67442fab0f5a45bd33727e - filename: src/main/java/io/mosip/mimoto/service/impl/CredentialMatchingServiceImpl.java - checksum: 1a353f792fdc393262ea2c3cf539f12277929e1f89456564a8c3ae31a378f678 + checksum: deb4e42b6723163a610fe21a20bf8ed53e2acf858fcc19fc9ae8d35f41394bb0 - filename: src/test/java/io/mosip/mimoto/service/CredentialMatchingServiceTest.java - checksum: b1323c5b2d2209440ff2d4705d72d67cf93f3a790ef1a4bdeccc5c557686bd85 + checksum: f0064149fe98f4dc82195f23956bb6ae206e8b6555c8f53adb61982f26a5285e - filename: src/test/java/io/mosip/mimoto/service/SessionManagerTest.java checksum: f541358ce3b674a8865592b8c899c2dac484730b8790f9a99b6a79a5b7953c9a - filename: src/main/java/io/mosip/mimoto/constant/OpenID4VPConstants.java diff --git a/src/main/java/io/mosip/mimoto/dto/CredentialDTO.java b/src/main/java/io/mosip/mimoto/dto/CredentialDTO.java index 335152e80..8ab4c089e 100644 --- a/src/main/java/io/mosip/mimoto/dto/CredentialDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/CredentialDTO.java @@ -7,6 +7,8 @@ import lombok.Data; import lombok.NoArgsConstructor; +import java.util.List; + @Data @Builder @NoArgsConstructor @@ -28,5 +30,13 @@ public class CredentialDTO { @JsonProperty("format") @Schema(description = "Format of the credential (e.g., ldp_vc, vc+sd-jwt, dc+sd-jwt)") private String format; + + @JsonProperty("claims") + @Schema(description = "Claims that are always disclosed as part of the credential") + private List claims; + + @JsonProperty("sdClaims") + @Schema(description = "Selective Disclosure Claims that require user consent to be shared") + private List sdClaims; } diff --git a/src/main/java/io/mosip/mimoto/service/CredentialFormatHandler.java b/src/main/java/io/mosip/mimoto/service/CredentialFormatHandler.java index 6255d7410..cc20ec807 100644 --- a/src/main/java/io/mosip/mimoto/service/CredentialFormatHandler.java +++ b/src/main/java/io/mosip/mimoto/service/CredentialFormatHandler.java @@ -25,5 +25,8 @@ LinkedHashMap> loadDisplayP CredentialsSupportedResponse credentialsSupportedResponse, String userLocale); - + /** + * Extract all properties from the Credential + */ + Map extractAllCredentialProperties(VCCredentialResponse vcCredentialResponse); } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialMatchingServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialMatchingServiceImpl.java index 7521f1b8a..f0e4a6782 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialMatchingServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialMatchingServiceImpl.java @@ -16,14 +16,18 @@ import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.InvalidIssuerIdException; import io.mosip.mimoto.exception.InvalidRequestException; -import static io.mosip.mimoto.exception.ErrorConstants.UNSUPPORTED_FORMAT; +import io.mosip.mimoto.service.CredentialFormatHandlerFactory; +import io.mosip.mimoto.service.CredentialFormatHandler; import io.mosip.mimoto.service.CredentialMatchingService; import io.mosip.mimoto.service.IssuersService; import io.mosip.mimoto.service.WalletCredentialService; +import io.mosip.mimoto.util.JwtUtils; import io.mosip.openID4VP.authorizationRequest.presentationDefinition.*; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import static io.mosip.mimoto.exception.ErrorConstants.UNSUPPORTED_FORMAT; + import java.io.IOException; import java.util.*; import java.util.stream.Collectors; @@ -37,6 +41,11 @@ public class CredentialMatchingServiceImpl implements CredentialMatchingService private static final String JSON_PATH_PREFIX = "$."; private static final String LDP_VC_FORMAT = "ldp_vc"; private static final String PROOF_TYPE_KEY = "proof_type"; + private static final String SD_JWT_ALG_VALUES_KEY = "sd-jwt_alg_values"; + private static final String CREDENTIAL_SUBJECT_PREFIX = "credentialSubject."; + private static final String ALG = "alg"; + private static final String CREDENTIAL_SUBJECT = "credentialSubject"; + private static final String SD = "_sd"; private final ObjectMapper objectMapper; @@ -46,13 +55,17 @@ public class CredentialMatchingServiceImpl implements CredentialMatchingService private final WalletCredentialService walletCredentialService; - public CredentialMatchingServiceImpl(ObjectMapper objectMapper, IssuersService issuersService, OpenID4VPService openID4VPService, WalletCredentialService walletCredentialService) { + private final CredentialFormatHandlerFactory credentialFormatHandlerFactory; + + public CredentialMatchingServiceImpl(ObjectMapper objectMapper, IssuersService issuersService, OpenID4VPService openID4VPService, WalletCredentialService walletCredentialService, CredentialFormatHandlerFactory credentialFormatHandlerFactory) { this.objectMapper = objectMapper; this.issuersService = issuersService; this.openID4VPService = openID4VPService; this.walletCredentialService = walletCredentialService; + this.credentialFormatHandlerFactory = credentialFormatHandlerFactory; } + @Override public MatchingCredentialsDTO getMatchingCredentials(VerifiablePresentationSessionData sessionData, String walletId, String base64Key) throws ApiNotAccessibleException, IOException { log.info("Getting matching credentials with wallet data for walletId: {}", walletId); @@ -60,11 +73,6 @@ public MatchingCredentialsDTO getMatchingCredentials(VerifiablePresentationSessi // Extract presentation definition from the session data PresentationDefinition presentationDefinition = openID4VPService.resolvePresentationDefinition(sessionData.getPresentationId(), sessionData.getAuthorizationRequest(), sessionData.isVerifierClientPreregistered()); - if (presentationDefinition == null) { - log.warn("No presentation definition found in session data"); - throw new IllegalArgumentException("Presentation definition not found in session data"); - } - validateInputParameters(presentationDefinition, walletId, base64Key); List decryptedCredentials = walletCredentialService.getDecryptedCredentials(walletId, base64Key); @@ -93,7 +101,7 @@ public MatchingCredentialsDTO getMatchingCredentials(VerifiablePresentationSessi } else { missingClaims.addAll(extractClaimsFromInputDescriptor(descriptor)); } - }); + }); // Flatten all matching credentials into a single list, removing duplicates by credential ID Set addedCredentialIds = new HashSet<>(); @@ -202,23 +210,72 @@ private boolean matchesFormat(VCCredentialResponse vc, Map>> descriptorFormat) { Map> ldpVcFormat = descriptorFormat.get(LDP_VC_FORMAT); + if (ldpVcFormat == null) { + return false; + } + if (!ldpVcFormat.containsKey(PROOF_TYPE_KEY)) { - return true; + return false; } VCCredentialProperties ldpCredential = objectMapper.convertValue(vc.getCredential(), VCCredentialProperties.class); String vcProofType = ldpCredential.getProof() != null ? ldpCredential.getProof().getType() : null; List requiredProofTypes = ldpVcFormat.get(PROOF_TYPE_KEY); + if (requiredProofTypes == null || requiredProofTypes.isEmpty()) { + return true; + } + return vcProofType != null && requiredProofTypes.contains(vcProofType); } + private boolean matchesSdJwtAlgorithm(VCCredentialResponse vc, Map>> requestFormat) { + Map> sdJwtFormat = requestFormat.get(CredentialFormat.VC_SD_JWT.getFormat()); + if (vc.getCredential() == null || !(vc.getCredential() instanceof String sdJwtString)) { + return false; + } + + if (!sdJwtFormat.containsKey(SD_JWT_ALG_VALUES_KEY)) { + return false; + } + + String sdJwtAlgorithm = extractSdJwtAlgorithm(sdJwtString); + Map> requestFormatMap = requestFormat.get(CredentialFormat.VC_SD_JWT.getFormat()); + if (requestFormatMap != null) { + List requestAlgorithms = requestFormatMap.get(SD_JWT_ALG_VALUES_KEY); + if (requestAlgorithms != null) { + return requestAlgorithms.contains(sdJwtAlgorithm); + } + return true; // If no specific algorithms are required, any algorithm is acceptable + } + return false; + } + + private String extractSdJwtAlgorithm(String sdJwtString) { + if (sdJwtString == null || sdJwtString.trim().isEmpty()) { + return null; + } + try { + Map header = JwtUtils.parseJwtHeader(sdJwtString); + return (String) header.get(ALG); + } catch (Exception e) { + log.warn("Failed to extract algorithm from SD-JWT header", e); + return null; + } + } + private boolean matchesConstraints(VCCredentialResponse vc, Constraints constraints) { if (constraints.getFields() == null) { return true; @@ -237,7 +294,7 @@ private boolean matchesFieldPath(VCCredentialResponse vc, String path, Filter fi List matches = evaluateJsonPath(path, credentialData); - if (matches == null || matches.isEmpty()) { + if (matches.isEmpty()) { return false; } @@ -246,21 +303,22 @@ private boolean matchesFieldPath(VCCredentialResponse vc, String path, Filter fi private Object getCredentialData(VCCredentialResponse vc) { String format = vc.getFormat(); + CredentialFormatHandler credentialFormatHandler = credentialFormatHandlerFactory.getHandler(vc.getFormat()); if (CredentialFormat.LDP_VC.getFormat().equalsIgnoreCase(format)) { - Object credentialData = vc.getCredential(); - - if (credentialData instanceof Map) { - return credentialData; - } else { - return objectMapper.convertValue(credentialData, VCCredentialProperties.class); + return credentialFormatHandler.extractAllCredentialProperties(vc); + } else if (CredentialFormat.VC_SD_JWT.getFormat().equalsIgnoreCase(format)) { + Map extractedMap = credentialFormatHandler.extractAllCredentialProperties(vc); + if (extractedMap == null) { + return Collections.emptyMap(); } - } else if (CredentialFormat.VC_SD_JWT.getFormat().equalsIgnoreCase(format) || CredentialFormat.DC_SD_JWT.getFormat().equalsIgnoreCase(format)) { - throw new InvalidRequestException(UNSUPPORTED_FORMAT.getErrorCode(), - "SD-JWT credential format (" + format + ") is not supported for credential matching"); + Map> allCredentialProperties = (Map>) extractedMap; + Map credentialClaimsMap = new HashMap<>(); + allCredentialProperties.values().forEach(credentialClaimsMap::putAll); + return credentialClaimsMap; + } else { + throw new InvalidRequestException(UNSUPPORTED_FORMAT.getErrorCode(), "Unsupported credential format: " + format); } - - return vc.getCredential(); } private boolean matchesFilter(Object match, Filter filter) { @@ -333,6 +391,11 @@ private CredentialDTO buildAvailableCredential(DecryptedCredentialDTO decryptedC String credentialTypeDisplayName = "Unknown Credential"; String credentialTypeLogo = null; + Map publicClaimsMap; + Map sdClaimsMap; + + List publicClaims = new ArrayList<>(); + List sdClaims = new ArrayList<>(); try { IssuerConfig issuerConfig = issuersService.getIssuerConfig(issuerId, credentialType); @@ -345,13 +408,107 @@ private CredentialDTO buildAvailableCredential(DecryptedCredentialDTO decryptedC log.warn("Failed to fetch issuer config for issuerId: {}, credentialType: {}", issuerId, credentialType, e); } + if (CredentialFormat.VC_SD_JWT.getFormat().equalsIgnoreCase(decryptedCredentialDTO.getCredential().getFormat())) { + CredentialFormatHandler credentialFormatHandler = credentialFormatHandlerFactory.getHandler(CredentialFormat.VC_SD_JWT.getFormat()); + Map> allClaims = (Map>) credentialFormatHandler.extractAllCredentialProperties(decryptedCredentialDTO.getCredential()); + + publicClaimsMap = allClaims.get("publicClaims"); + sdClaimsMap = allClaims.get("sdClaims"); + + if (publicClaimsMap != null) { + publicClaims = extractPublicClaimPaths(publicClaimsMap); + } + + if (sdClaimsMap != null) { + sdClaims = extractSdClaimPaths(sdClaimsMap); + } + + } + + return CredentialDTO.builder() .credentialId(decryptedCredentialDTO.getId()) .credentialTypeDisplayName(credentialTypeDisplayName) .credentialTypeLogo(credentialTypeLogo) - .format(decryptedCredentialDTO.getCredential() - .getFormat()) + .format(decryptedCredentialDTO.getCredential().getFormat()) + .claims(publicClaims) + .sdClaims(sdClaims) .build(); } + private List extractPublicClaimPaths(Map publicClaimsMap) { + List paths = new ArrayList<>(); + Object credentialSubject = publicClaimsMap.get(CREDENTIAL_SUBJECT); + if (credentialSubject instanceof Map) { + Map csMap = (Map) credentialSubject; + collectPaths(csMap, "$", paths); + } else { + // Remove standard JWT claims and SD-JWT metadata + List metadataKeys = Arrays.asList("vct", "cnf", "iss", "sub", "aud", "exp", "nbf", "iat", "jti", SD, "_sd_alg", "id"); + metadataKeys.forEach(publicClaimsMap::remove); + collectPaths(publicClaimsMap, "$", paths); + } + return paths; + } + + private List extractSdClaimPaths(Map sdClaimsMap) { + List paths = new ArrayList<>(); + for (String key : sdClaimsMap.keySet()) { + String cleanKey = key.startsWith(CREDENTIAL_SUBJECT_PREFIX) + ? key.substring(CREDENTIAL_SUBJECT_PREFIX.length()) + : key; + paths.add(JSON_PATH_PREFIX + cleanKey); + } + return paths; + } + + private void collectPaths(Map publicClaimsMap, String prefix, List paths) { + for (Map.Entry entry : publicClaimsMap.entrySet()) { + String key = entry.getKey(); + Object value = entry.getValue(); + + // Skip _sd keys + if (SD.equals(key)) { + continue; + } + + String currentPath = prefix + "." + key; + + if (value instanceof Map) { + collectPaths((Map) value, currentPath, paths); + } else if (value instanceof List listValue) { + if (hasUniformKeys(listValue)) { + paths.add(currentPath); + } else { + paths.add(currentPath); + for (Object item : listValue) { + if (item instanceof Map mapItem) { + collectPaths((Map) mapItem, currentPath, paths); + } + } + } + } else { + paths.add(currentPath); + } + } + } + + private boolean hasUniformKeys(List list) { + List> keySets = list.stream() + .filter(item -> item instanceof Map) + .map(item -> { + Map m = (Map) item; + return new HashSet(m.keySet()); + }) + .collect(Collectors.toList()); + + if (keySets.size() < 2 || keySets.size() != list.size()) { + return false; + } + + Set intersectionKeys = new HashSet<>(keySets.getFirst()); + keySets.forEach(intersectionKeys::retainAll); + + return !intersectionKeys.isEmpty(); + } } \ No newline at end of file diff --git a/src/main/java/io/mosip/mimoto/service/impl/LdpVcCredentialFormatHandler.java b/src/main/java/io/mosip/mimoto/service/impl/LdpVcCredentialFormatHandler.java index 2890a9011..fe2a85dbc 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/LdpVcCredentialFormatHandler.java +++ b/src/main/java/io/mosip/mimoto/service/impl/LdpVcCredentialFormatHandler.java @@ -111,6 +111,11 @@ public LinkedHashMap> loadD return displayProperties; } + @Override + public Map extractAllCredentialProperties(VCCredentialResponse vcCredentialResponse) { + return objectMapper.convertValue(vcCredentialResponse.getCredential(), LinkedHashMap.class); + } + private LinkedHashMap> buildFallbackDisplayProperties( Map credentialProperties, List orderedKeys) { diff --git a/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java b/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java index 37dbb0ac4..984703f46 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java +++ b/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java @@ -21,6 +21,9 @@ @Component("vc+sd-jwt") public class VcSdJwtCredentialFormatHandler implements CredentialFormatHandler { + private static final String KEY = "..."; + private static final String SD = "_sd"; + private final ObjectMapper objectMapper; public VcSdJwtCredentialFormatHandler(ObjectMapper objectMapper) { @@ -117,41 +120,28 @@ public LinkedHashMap> loadD return displayProperties; } - + @Override + public Map> extractAllCredentialProperties(VCCredentialResponse vcCredentialResponse) { + Object credential = vcCredentialResponse.getCredential(); + if (credential instanceof String) { + return extractAllPropertiesFromSdJwt((String) credential); + } + return Collections.emptyMap(); + } public Map extractClaimsFromSdJwt(String sdJwtString) { try { SDJWT sdJwt = SDJWT.parse(sdJwtString); - Map claims = new LinkedHashMap<>(); - - // Parse JWT payload - String credentialJwt = sdJwt.getCredentialJwt(); - if (credentialJwt != null) { - Map jwtPayload = parseJwtPayload(credentialJwt); - if (jwtPayload != null) { - claims.putAll(jwtPayload); - } - } - // Add disclosures - List disclosures = sdJwt.getDisclosures(); - if (disclosures != null && !disclosures.isEmpty()) { - for (Disclosure disclosure : disclosures) { - try { - String claimName = disclosure.getClaimName(); - Object claimValue = disclosure.getClaimValue(); + // Extract public claims from the credential JWT + Map claims = extractPublicClaims(sdJwt); - if (claimName != null && claimValue != null) { - claims.put(claimName, claimValue); // Add directly to claims - } - } catch (Exception e) { - log.warn("Failed to process disclosure: {}", e.getMessage()); - } - } - } + // Extract disclosures and merge with claims + Map sdClaims = extractSdClaims(sdJwt); + claims.putAll(sdClaims); // Remove standard JWT claims and SD-JWT metadata - List metadataKeys = Arrays.asList("vct", "cnf", "iss", "sub", "aud", "exp", "nbf", "iat", "jti", "_sd", "_sd_alg", "id"); + List metadataKeys = Arrays.asList("vct", "cnf", "iss", "sub", "aud", "exp", "nbf", "iat", "jti", SD, "_sd_alg", "id"); metadataKeys.forEach(claims::remove); // Return claims directly as result @@ -166,10 +156,138 @@ public Map extractClaimsFromSdJwt(String sdJwtString) { } } - private LinkedHashMap> buildFallbackDisplayProperties( - Map credentialProperties, - Set orderedKeys) { + public Map> extractAllPropertiesFromSdJwt(String sdJwtString) { + try { + SDJWT sdJwt = SDJWT.parse(sdJwtString); + + Map> claims = new LinkedHashMap<>(); + + // Extract public claims from the credential JWT + claims.put("publicClaims", extractPublicClaims(sdJwt)); + + // Extract disclosures and merge with claims + claims.put("sdClaims", extractSdClaimsForOVP(sdJwt)); + + return claims; + + } catch (IllegalArgumentException e) { + log.error("Error parsing SD-JWT with Authlete library: {}", e.getMessage(), e); + return Collections.emptyMap(); + } catch (Exception e) { + log.error("Unexpected error processing SD-JWT", e); + return Collections.emptyMap(); + } + } + + private Map extractPublicClaims(SDJWT sdJwt) { + String credentialJwt = sdJwt.getCredentialJwt(); + Map publicClaims = new LinkedHashMap<>(); + if (credentialJwt != null) { + Map jwtPayload = parseJwtPayload(credentialJwt); + if (jwtPayload != null) { + publicClaims.putAll(jwtPayload); + } + } + return publicClaims; + } + + private Map extractSdClaims(SDJWT sdJwt) { + Map sdClaims = new LinkedHashMap<>(); + List disclosures = sdJwt.getDisclosures(); + if (disclosures != null && !disclosures.isEmpty()) { + for (Disclosure disclosure : disclosures) { + try { + String claimName = disclosure.getClaimName(); + Object claimValue = disclosure.getClaimValue(); + + if (claimName != null && claimValue != null) { + sdClaims.put(claimName, claimValue); + } + } catch (Exception e) { + log.warn("Failed to process disclosure: {}", e.getMessage()); + } + } + } + return sdClaims; + } + + private Map extractSdClaimsForOVP(SDJWT sdJwt) { + Map digestToDisclosure = new HashMap<>(); + Map digestToDisclosureB64 = new HashMap<>(); + List disclosures = sdJwt.getDisclosures(); + if (disclosures != null) { + for (Disclosure disclosure : disclosures) { + String digest = disclosure.digest(); + digestToDisclosure.put(digest, disclosure); + digestToDisclosureB64.put(digest, disclosure.getDisclosure()); + } + } + + String credentialJwt = sdJwt.getCredentialJwt(); + Map payload = parseJwtPayload(credentialJwt); + if (payload == null || payload.isEmpty()) { + return Collections.emptyMap(); + } + + Map pathToDisclosures = new LinkedHashMap<>(); + resolveDisclosures(payload, "", Collections.emptyList(), digestToDisclosure, digestToDisclosureB64, pathToDisclosures); + return pathToDisclosures; + } + + private void resolveDisclosures(Object value, String path, List parentDisclosures, Map digestToDisclosure, Map digestToDisclosureB64, Map pathToDisclosures) { + if (value instanceof List) { + List list = (List) value; + for (int i = 0; i < list.size(); i++) { + Object item = list.get(i); + String currentPath = path + "[" + i + "]"; + if (item instanceof Map) { + Map mapItem = (Map) item; + if (mapItem.size() == 1 && mapItem.containsKey(KEY)) { + String digest = (String) mapItem.get(KEY); + Disclosure disclosure = digestToDisclosure.get(digest); + if (disclosure != null) { + List currentDisclosures = new ArrayList<>(parentDisclosures); + currentDisclosures.add(digestToDisclosureB64.get(digest)); + pathToDisclosures.put(currentPath, currentDisclosures); + resolveDisclosures(disclosure.getClaimValue(), currentPath, currentDisclosures, digestToDisclosure, digestToDisclosureB64, pathToDisclosures); + } + continue; + } + } + resolveDisclosures(item, currentPath, parentDisclosures, digestToDisclosure, digestToDisclosureB64, pathToDisclosures); + } + return; + } + + if (value instanceof Map) { + Map map = (Map) value; + + Object sdDigestsObj = map.get(SD); + if (sdDigestsObj instanceof List) { + for (Object digestObj : (List) sdDigestsObj) { + String digest = (String) digestObj; + Disclosure disclosure = digestToDisclosure.get(digest); + if (disclosure == null || disclosure.getClaimName() == null) continue; + String claimName = disclosure.getClaimName(); + if (SD.equals(claimName) || KEY.equals(claimName)) continue; + + String fullPath = path.isEmpty() ? claimName : path + "." + claimName; + List currentDisclosures = new ArrayList<>(parentDisclosures); + currentDisclosures.add(digestToDisclosureB64.get(digest)); + pathToDisclosures.put(fullPath, currentDisclosures); + resolveDisclosures(disclosure.getClaimValue(), fullPath, currentDisclosures, digestToDisclosure, digestToDisclosureB64, pathToDisclosures); + } + } + + for (Map.Entry entry : map.entrySet()) { + if (SD.equals(entry.getKey())) continue; + String fullPath = path.isEmpty() ? entry.getKey() : path + "." + entry.getKey(); + resolveDisclosures(entry.getValue(), fullPath, parentDisclosures, digestToDisclosure, digestToDisclosureB64, pathToDisclosures); + } + } + } + private LinkedHashMap> buildFallbackDisplayProperties(Map credentialProperties, Set orderedKeys) { LinkedHashMap> displayProperties = new LinkedHashMap<>(); // Use ordered keys from parameter (already includes all fields) diff --git a/src/test/java/io/mosip/mimoto/service/CredentialMatchingServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialMatchingServiceTest.java index b5f9930d9..1306a567c 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialMatchingServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialMatchingServiceTest.java @@ -20,6 +20,7 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; +import java.lang.reflect.Method; import java.time.Instant; import java.util.*; import java.util.stream.Collectors; @@ -49,6 +50,12 @@ public class CredentialMatchingServiceTest { @Mock private OpenID4VPService openID4VPService; + @Mock + private CredentialFormatHandlerFactory credentialFormatHandlerFactory; + + @Mock + private CredentialFormatHandler credentialFormatHandler; + private VerifiablePresentationSessionData sessionData; private String walletId; private String base64Key; @@ -59,18 +66,34 @@ public class CredentialMatchingServiceTest { public void setUp() throws JsonProcessingException { walletId = "test-wallet-id"; base64Key = "test-base64-key"; - - // Setup session data sessionData = new VerifiablePresentationSessionData(); - - // Setup presentation definition presentationDefinition = createMockPresentationDefinition(); - - // Setup wallet credentials walletCredentials = createMockWalletCredentials(); + + when(credentialFormatHandlerFactory.getHandler(eq("ldp_vc"))).thenReturn(credentialFormatHandler); + when(credentialFormatHandlerFactory.getHandler(eq(CredentialFormat.VC_SD_JWT.getFormat()))).thenReturn(credentialFormatHandler); + + when(credentialFormatHandler.extractAllCredentialProperties(any(VCCredentialResponse.class))) + .thenAnswer(invocation -> { + VCCredentialResponse vc = invocation.getArgument(0); + String format = vc.getFormat(); + + if (CredentialFormat.VC_SD_JWT.getFormat().equalsIgnoreCase(format)) { + Map> result = new LinkedHashMap<>(); + result.put("publicClaims", new LinkedHashMap<>()); + result.put("sdClaims", new LinkedHashMap<>()); + return result; + } + + Object credential = vc.getCredential(); + if (credential instanceof Map) { + return new LinkedHashMap<>((Map) credential); + } + return new LinkedHashMap<>(); + }); } - // @Test + @Test public void testGetMatchingCredentialsSuccess() throws Exception { // Arrange when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) @@ -93,7 +116,6 @@ public void testGetMatchingCredentialsSuccess() throws Exception { verify(openID4VPService).resolvePresentationDefinition(any(), any(), anyBoolean()); verify(walletCredentialService).getDecryptedCredentials(eq(walletId), any()); - verify(dataProtectionService).decryptCredential(anyString(), eq(base64Key)); } @Test(expected = IllegalArgumentException.class) @@ -126,16 +148,6 @@ public void testGetMatchingCredentialsNullBase64Key() throws Exception { credentialMatchingService.getMatchingCredentials(sessionData, walletId, null); } - @Test(expected = IllegalArgumentException.class) - public void testGetMatchingCredentialsNullPresentationDefinition() throws Exception { - // Arrange - when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) - .thenReturn(null); - - // Act - credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); - } - @Test(expected = IllegalArgumentException.class) public void testGetMatchingCredentialsEmptyInputDescriptors() throws Exception { // Arrange @@ -218,29 +230,6 @@ public void testGetMatchingCredentialsDecryptionFailure() throws Exception { assertTrue(result.getMatchingCredentials().isEmpty()); } - @Test - public void testGetMatchingCredentialsIssuerConfigNotFound() throws Exception { - // Arrange - when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) - .thenReturn(presentationDefinition); - when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) - .thenReturn(walletCredentials); - - - // Act - MatchingCredentialsDTO result = credentialMatchingService - .getMatchingCredentials(sessionData, walletId, base64Key); - - // Assert - assertNotNull(result); - assertNotNull(result.getMatchingCredentialsResponse()); - // Should still work but with default credential display name - if (!result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()) { - assertEquals("Unknown Credential", - result.getMatchingCredentialsResponse().getAvailableCredentials().get(0).getCredentialTypeDisplayName()); - } - } - @Test public void testGetMatchingCredentialsWithConstraints() throws Exception { // Arrange @@ -263,10 +252,8 @@ public void testGetMatchingCredentialsWithConstraints() throws Exception { public void testGetMatchingCredentialsFormatMismatch() throws Exception { // Arrange PresentationDefinition pdWithFormat = createMockPresentationDefinitionWithSpecificFormat(); - - // Create credentials with different format (vc+sd-jwt instead of ldp_vc) List credentialsWithDifferentFormat = createMockWalletCredentialsWithSdJwtFormat(); - + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) .thenReturn(pdWithFormat); when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) @@ -278,7 +265,6 @@ public void testGetMatchingCredentialsFormatMismatch() throws Exception { // Assert assertNotNull(result); - // Should not match due to format mismatch assertTrue(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); } @@ -318,7 +304,7 @@ public void testGetMatchingCredentialsFormatMatchingWithoutProofType() throws Ex // Assert assertNotNull(result); - assertFalse(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + assertTrue(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); } @Test @@ -364,7 +350,7 @@ public void testGetMatchingCredentialsWithConstraintsNotMatching() throws Except when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) .thenReturn(pdWithConstraints); when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) - .thenReturn(walletCredentials); // credentials without matching subject + .thenReturn(walletCredentials); // Act MatchingCredentialsDTO result = credentialMatchingService @@ -412,76 +398,6 @@ public void testGetMatchingCredentialsWithEmptyFieldPaths() throws Exception { assertFalse(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); } - @Test - public void testGetMatchingCredentialsWithFilterMatching() throws Exception { - // Arrange - // Use a simpler presentation definition that doesn't require complex filter matching - PresentationDefinition pd = createMockPresentationDefinition(); - when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) - .thenReturn(pd); - - // Create credentials with proper structure for basic matching - List credentials = createMockWalletCredentialsWithMapData(); - when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) - .thenReturn(credentials); - - // Mock issuer service to return a valid config - IssuerConfig mockIssuerConfig = createMockIssuerConfig(); - when(issuersService.getIssuerConfig(eq("test-issuer-id"), eq("TestCredential"))) - .thenReturn(mockIssuerConfig); - - // Act - MatchingCredentialsDTO result = credentialMatchingService - .getMatchingCredentials(sessionData, walletId, base64Key); - - // Assert - assertNotNull(result); - assertNotNull(result.getMatchingCredentialsResponse()); - - // This test verifies that basic credential matching works - // The credentials should match because they have the required $.type field - assertFalse("Basic credential matching failed - credentials should match the presentation definition", - result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); - } - - @Test - public void testGetMatchingCredentialsWithFilterMatchingAdvanced() throws Exception { - // Arrange - // Create a presentation definition WITHOUT filters to test basic credential matching - // This will help isolate whether the issue is in filter matching or basic matching - Fields field = new Fields(Arrays.asList("$.name"), null, null, null, null, null); - Constraints constraints = new Constraints(Collections.singletonList(field), null); - InputDescriptor descriptor = new InputDescriptor("test-descriptor", null, null, null, constraints); - PresentationDefinition pdWithoutFilter = new PresentationDefinition("test-presentation-definition", Arrays.asList(descriptor), null, null, null); - - when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) - .thenReturn(pdWithoutFilter); - - // Create credentials with a flatter structure for easier path matching - List credentials = createMockWalletCredentialsWithSimpleFilterData(); - when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) - .thenReturn(credentials); - - // Mock issuer service to return a valid config - IssuerConfig mockIssuerConfig = createMockIssuerConfig(); - when(issuersService.getIssuerConfig(eq("test-issuer-id"), eq("TestCredential"))) - .thenReturn(mockIssuerConfig); - - // Act - MatchingCredentialsDTO result = credentialMatchingService - .getMatchingCredentials(sessionData, walletId, base64Key); - - // Assert - assertNotNull(result); - assertNotNull(result.getMatchingCredentialsResponse()); - - // This test verifies that basic credential matching works without filters - // If it fails, the issue is in the basic credential matching logic - // If it passes, the issue is specifically in the filter matching logic - assertFalse("Basic credential matching without filters failed - this indicates a fundamental issue with credential matching", - result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); - } - @Test public void testGetMatchingCredentialsWithFilterNotMatching() throws Exception { // Arrange @@ -536,7 +452,7 @@ public void testGetMatchingCredentialsWithJsonPathErrors() throws Exception { assertTrue(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); } - @Test(expected = InvalidRequestException.class) + @Test public void testGetMatchingCredentialsWithSdJwtFormat() throws Exception { // Arrange PresentationDefinition pd = createMockPresentationDefinition(); @@ -544,10 +460,14 @@ public void testGetMatchingCredentialsWithSdJwtFormat() throws Exception { .thenReturn(pd); when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) .thenReturn(createMockWalletCredentialsWithSdJwtFormat()); - - - // Act & Assert - Should throw InvalidRequestException for unsupported SD-JWT format - credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); + + // Act + MatchingCredentialsDTO result = credentialMatchingService + .getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertNotNull(result); + assertTrue(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); } @Test(expected = InvalidRequestException.class) @@ -556,13 +476,11 @@ public void testGetMatchingCredentialsWithDcSdJwtFormat() throws Exception { PresentationDefinition pd = createMockPresentationDefinition(); when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) .thenReturn(pd); - List dcSdJwtCredentials = createMockWalletCredentialsWithDcSdJwtFormat(); when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) .thenReturn(dcSdJwtCredentials); - - - // Act & Assert - Should throw InvalidRequestException for unsupported DC+SD-JWT format + + // Act credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); } @@ -624,16 +542,12 @@ public void testGetMatchingCredentialsWithMultipleDescriptors() throws Exception // Assert assertNotNull(result); assertFalse(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); - // Should deduplicate credentials by ID Set credentialIds = result.getMatchingCredentialsResponse().getAvailableCredentials() .stream().map(CredentialDTO::getCredentialId).collect(Collectors.toSet()); - assertEquals(2, credentialIds.size()); // Should have 2 unique credentials + assertEquals(2, credentialIds.size()); } - // Helper methods to create mock objects - private PresentationDefinition createMockPresentationDefinition() { - Fields field = new Fields(Arrays.asList("$.type"), null, null, null, null, null); Constraints constraints = new Constraints(Collections.singletonList(field), null); InputDescriptor descriptor = new InputDescriptor("test-descriptor", null, null, null, constraints); @@ -642,26 +556,14 @@ private PresentationDefinition createMockPresentationDefinition() { } private PresentationDefinition createMockPresentationDefinitionWithConstraints() { - // Field 1: simple path Fields field1 = new Fields(Arrays.asList("$.type"), null, null, null, null, null); - - // Field 2: with path and filter Filter filter = new Filter("type", "String"); Fields field2 = new Fields(Arrays.asList("$.credentialSubject.name"), null, null, null, filter, null); - - // Constraints with both fields Constraints constraints = new Constraints(Arrays.asList(field1, field2), null); - - // Input Descriptor with constraints InputDescriptor descriptor = new InputDescriptor("test-descriptor-with-constraints", null, null, null, constraints); - - // Presentation Definition with descriptor - PresentationDefinition pd = new PresentationDefinition("test-presentation-definition-with-constraints", Arrays.asList(descriptor), null, null, null); - - return pd; + return new PresentationDefinition("test-presentation-definition-with-constraints", Arrays.asList(descriptor), null, null, null); } - private PresentationDefinition createMockPresentationDefinitionWithSpecificFormat() { Map>> format = new HashMap<>(); Map> ldpVcFormat = new HashMap<>(); @@ -721,7 +623,6 @@ private VCCredentialResponse createMockVCCredentialResponseWithSubject() { return response; } - private Map createMockCredentialSubject() { Map subject = new HashMap<>(); subject.put("id", "did:example:123456789"); @@ -771,7 +672,6 @@ private PresentationDefinition createMockPresentationDefinitionWithNullFormat() } private PresentationDefinition createMockPresentationDefinitionWithNullConstraints() { - // Create constraints with null fields (not null constraints object) Constraints constraints = new Constraints(null, null); InputDescriptor descriptor = new InputDescriptor("test-descriptor", null, null, null, constraints); return new PresentationDefinition("test-presentation-definition", Arrays.asList(descriptor), null, null, null); @@ -885,12 +785,11 @@ private List createMockWalletCredentialsWithDcSdJwtForma credential.setId("test-credential-id"); credential.setWalletId(walletId); - // Create credential data with type that matches the presentation definition Map credentialData = new HashMap<>(); credentialData.put("iss", "https://example.com"); credentialData.put("sub", "did:example:123456789"); credentialData.put("type", Arrays.asList("DataCredential", "TestCredential")); - + VCCredentialResponse response = VCCredentialResponse.builder() .format(CredentialFormat.DC_SD_JWT.getFormat()) .credential(credentialData) @@ -934,12 +833,10 @@ private List createMockWalletCredentialsWithMultipleCred return Arrays.asList(credential1, credential2); } - private VCCredentialProperties createMockVCCredentialPropertiesWithProof() { VCCredentialProperties properties = new VCCredentialProperties(); properties.setType(Arrays.asList("VerifiableCredential", "TestCredential")); - - // Create a mock proof object + VCCredentialResponseProof proof = new VCCredentialResponseProof(); proof.setType("Ed25519Signature2020"); properties.setProof(proof); @@ -952,16 +849,13 @@ private List createMockWalletCredentialsWithMapData() th credential.setId("test-credential-id"); credential.setWalletId(walletId); - // Create credential data as Map (which is what the implementation expects for ldp_vc format) Map credentialData = new HashMap<>(); credentialData.put("type", Arrays.asList("VerifiableCredential", "TestCredential")); - - // Create credentialSubject with name that contains "John" (filter pattern) Map subject = new HashMap<>(); subject.put("id", "did:example:123456789"); - subject.put("name", "John Doe"); // This should match filter looking for "John" + subject.put("name", "John Doe"); credentialData.put("credentialSubject", subject); - + VCCredentialResponse response = VCCredentialResponse.builder() .format("ldp_vc") .credential(credentialData) @@ -984,12 +878,11 @@ private List createMockWalletCredentialsWithSimpleFilter credential.setId("test-credential-id"); credential.setWalletId(walletId); - // Create credential data with a flatter structure for easier path matching Map credentialData = new HashMap<>(); credentialData.put("type", Arrays.asList("VerifiableCredential", "TestCredential")); - credentialData.put("name", "John Doe"); // Direct field for $.name path + credentialData.put("name", "John Doe"); credentialData.put("id", "did:example:123456789"); - + VCCredentialResponse response = VCCredentialResponse.builder() .format("ldp_vc") .credential(credentialData) @@ -1007,29 +900,23 @@ private List createMockWalletCredentialsWithSimpleFilter return Arrays.asList(credential); } - // Test cases for evaluateJsonPath method through integration testing @Test public void testJsonPathEvaluationTypePathWithSampleData() throws Exception { - // Arrange - Using the exact sample data provided + // Arrange Map credentialData = new HashMap<>(); credentialData.put("id", "did:rcw:2121a1df-29fe-496e-ae24-219dcOb3ac49"); credentialData.put("type", Arrays.asList("VerifiableCredential", "LifeInsuranceCredential")); - - // Create presentation definition that requires the type field + Fields field = new Fields(Arrays.asList("$.type"), null, null, null, null, null); Constraints constraints = new Constraints(Collections.singletonList(field), null); InputDescriptor descriptor = new InputDescriptor("test-descriptor", null, null, null, constraints); PresentationDefinition pd = new PresentationDefinition("test-presentation-definition", Arrays.asList(descriptor), null, null, null); - + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) .thenReturn(pd); - - // Create credentials with the sample data List credentials = createMockWalletCredentialsWithSampleData(credentialData); when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) .thenReturn(credentials); - - // Mock issuer service IssuerConfig mockIssuerConfig = createMockIssuerConfig(); when(issuersService.getIssuerConfig(eq("test-issuer-id"), eq("TestCredential"))) .thenReturn(mockIssuerConfig); @@ -1038,36 +925,32 @@ public void testJsonPathEvaluationTypePathWithSampleData() throws Exception { MatchingCredentialsDTO result = credentialMatchingService .getMatchingCredentials(sessionData, walletId, base64Key); - // Assert - This tests that the JSON path evaluation works correctly + // Assert assertNotNull(result); assertNotNull(result.getMatchingCredentialsResponse()); - assertFalse("JSON path evaluation failed - credentials should match the type field", - result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + assertFalse(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); } @Test public void testJsonPathEvaluationNestedPath() throws Exception { - // Arrange - Test nested path evaluation + // Arrange Map credentialData = new HashMap<>(); Map credentialSubject = new HashMap<>(); credentialSubject.put("name", "John Doe"); credentialSubject.put("age", 30); credentialData.put("credentialSubject", credentialSubject); credentialData.put("type", Arrays.asList("VerifiableCredential", "IdentityCredential")); - - // Create presentation definition that requires nested field + Fields field = new Fields(Arrays.asList("$.credentialSubject.name"), null, null, null, null, null); Constraints constraints = new Constraints(Collections.singletonList(field), null); InputDescriptor descriptor = new InputDescriptor("test-descriptor", null, null, null, constraints); PresentationDefinition pd = new PresentationDefinition("test-presentation-definition", Arrays.asList(descriptor), null, null, null); - + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) .thenReturn(pd); - List credentials = createMockWalletCredentialsWithSampleData(credentialData); when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) .thenReturn(credentials); - IssuerConfig mockIssuerConfig = createMockIssuerConfig(); when(issuersService.getIssuerConfig(eq("test-issuer-id"), eq("TestCredential"))) .thenReturn(mockIssuerConfig); @@ -1079,45 +962,40 @@ public void testJsonPathEvaluationNestedPath() throws Exception { // Assert assertNotNull(result); assertNotNull(result.getMatchingCredentialsResponse()); - assertFalse("Nested JSON path evaluation failed", - result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + assertFalse(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); } @Test public void testJsonPathEvaluationNonExistentPath() throws Exception { - // Arrange - Test non-existent path handling + // Arrange Map credentialData = new HashMap<>(); credentialData.put("id", "did:rcw:2121a1df-29fe-496e-ae24-219dcOb3ac49"); credentialData.put("type", Arrays.asList("VerifiableCredential", "TestCredential")); - - // Create presentation definition that requires non-existent field + Fields field = new Fields(Arrays.asList("$.nonExistentField"), null, null, null, null, null); Constraints constraints = new Constraints(Collections.singletonList(field), null); InputDescriptor descriptor = new InputDescriptor("test-descriptor", null, null, null, constraints); PresentationDefinition pd = new PresentationDefinition("test-presentation-definition", Arrays.asList(descriptor), null, null, null); - + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) .thenReturn(pd); - List credentials = createMockWalletCredentialsWithSampleData(credentialData); when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) .thenReturn(credentials); - - + // Act MatchingCredentialsDTO result = credentialMatchingService .getMatchingCredentials(sessionData, walletId, base64Key); - // Assert - Should not match due to non-existent path + // Assert assertNotNull(result); assertNotNull(result.getMatchingCredentialsResponse()); - assertTrue("Non-existent path should result in no matches", - result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + assertTrue(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); } @Test public void testJsonPathEvaluationComplexNestedStructure() throws Exception { - // Arrange - Test complex nested structure + // Arrange Map credentialData = new HashMap<>(); Map credentialSubject = new HashMap<>(); Map address = new HashMap<>(); @@ -1127,20 +1005,17 @@ public void testJsonPathEvaluationComplexNestedStructure() throws Exception { credentialSubject.put("name", "John Doe"); credentialData.put("credentialSubject", credentialSubject); credentialData.put("type", Arrays.asList("VerifiableCredential", "IdentityCredential")); - - // Create presentation definition that requires deeply nested field + Fields field = new Fields(Arrays.asList("$.credentialSubject.address.city"), null, null, null, null, null); Constraints constraints = new Constraints(Collections.singletonList(field), null); InputDescriptor descriptor = new InputDescriptor("test-descriptor", null, null, null, constraints); PresentationDefinition pd = new PresentationDefinition("test-presentation-definition", Arrays.asList(descriptor), null, null, null); - + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) .thenReturn(pd); - List credentials = createMockWalletCredentialsWithSampleData(credentialData); when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) .thenReturn(credentials); - IssuerConfig mockIssuerConfig = createMockIssuerConfig(); when(issuersService.getIssuerConfig(eq("test-issuer-id"), eq("TestCredential"))) .thenReturn(mockIssuerConfig); @@ -1152,31 +1027,26 @@ public void testJsonPathEvaluationComplexNestedStructure() throws Exception { // Assert assertNotNull(result); assertNotNull(result.getMatchingCredentialsResponse()); - assertFalse("Complex nested JSON path evaluation failed", - result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + assertFalse(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); } @Test public void testJsonPathEvaluationListIndexPath() throws Exception { - // Arrange - Test list index path evaluation + // Arrange Map credentialData = new HashMap<>(); credentialData.put("items", Arrays.asList("item1", "item2", "item3")); credentialData.put("type", Arrays.asList("VerifiableCredential", "TestCredential")); - - // Create presentation definition that requires list index + Fields field = new Fields(Arrays.asList("$.items.1"), null, null, null, null, null); Constraints constraints = new Constraints(Collections.singletonList(field), null); InputDescriptor descriptor = new InputDescriptor("test-descriptor", null, null, null, constraints); PresentationDefinition pd = new PresentationDefinition("test-presentation-definition", Arrays.asList(descriptor), null, null, null); - + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) .thenReturn(pd); - List credentials = createMockWalletCredentialsWithSampleData(credentialData); when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) .thenReturn(credentials); - - IssuerConfig mockIssuerConfig = createMockIssuerConfig(); // Act MatchingCredentialsDTO result = credentialMatchingService @@ -1185,11 +1055,9 @@ public void testJsonPathEvaluationListIndexPath() throws Exception { // Assert assertNotNull(result); assertNotNull(result.getMatchingCredentialsResponse()); - assertTrue("List index JSON path evaluation failed", - result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + assertTrue(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); } - // Helper method to create credentials with custom data private List createMockWalletCredentialsWithSampleData(Map credentialData) throws JsonProcessingException { DecryptedCredentialDTO credential = new DecryptedCredentialDTO(); credential.setId("test-credential-id"); @@ -1212,7 +1080,6 @@ private List createMockWalletCredentialsWithSampleData(M return Arrays.asList(credential); } - // Test cases for null checks and input validation @Test public void testGetMatchingCredentialsNullPresentationDefinitionFromService() throws Exception { // Arrange @@ -1224,155 +1091,1154 @@ public void testGetMatchingCredentialsNullPresentationDefinitionFromService() th credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); }); - assertEquals("Presentation definition not found in session data", exception.getMessage()); + assertEquals("Presentation definition cannot be null", exception.getMessage()); } - @Test - public void testMatchesConstraintsNullFields() throws Exception { + public void testExtractRequiredClaimsBlankPath() throws Exception { // Arrange - PresentationDefinition pd = createMockPresentationDefinition(); + Fields field = new Fields(Arrays.asList(" "), null, null, null, null, null); + Constraints constraints = new Constraints(Collections.singletonList(field), null); + InputDescriptor descriptor = new InputDescriptor("test-descriptor", null, null, null, constraints); + PresentationDefinition pd = new PresentationDefinition("test-pd", Arrays.asList(descriptor), null, null, null); + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) .thenReturn(pd); - // Create credentials with null fields in constraints List credentials = createMockWalletCredentialsWithMapData(); when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) .thenReturn(credentials); - // Create presentation definition with null fields - Constraints constraints = new Constraints(null, null); - InputDescriptor descriptor = new InputDescriptor("test-descriptor", null, null, null, constraints); - PresentationDefinition pdWithNullFields = new PresentationDefinition("test-pd", Arrays.asList(descriptor), null, null, null); - when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) - .thenReturn(pdWithNullFields); - // Act MatchingCredentialsDTO result = credentialMatchingService .getMatchingCredentials(sessionData, walletId, base64Key); - // Assert - Should handle null fields gracefully + // Assert assertNotNull(result); assertNotNull(result.getMatchingCredentialsResponse()); } @Test - public void testMatchesFormatNullDescriptorFormat() throws Exception { + public void testMatchesSdJwtFormatWhenAlgorithmMatchesCredentialIsSelected() throws Exception { // Arrange - // Create input descriptor with null format but valid constraints - Constraints constraints = new Constraints(null, null); - InputDescriptor descriptor = new InputDescriptor("test-descriptor", null, null, null, constraints); - PresentationDefinition pd = new PresentationDefinition("test-pd", Arrays.asList(descriptor), null, null, null); - - when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) - .thenReturn(pd); - - List credentials = createMockWalletCredentialsWithMapData(); + PresentationDefinition pd = createSdJwtPresentationDefinition(Arrays.asList("HS256")); + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())).thenReturn(pd); + + Map publicClaims = new LinkedHashMap<>(); + publicClaims.put("type", Arrays.asList("VerifiableCredential", "TestCredential")); + setupSdJwtHandlerMock(publicClaims, new LinkedHashMap<>()); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) - .thenReturn(credentials); + .thenReturn(Arrays.asList(createDecryptedSdJwtCredential(SD_JWT_HS256))); // Act - MatchingCredentialsDTO result = credentialMatchingService - .getMatchingCredentials(sessionData, walletId, base64Key); + MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); - // Assert - Should handle null format gracefully - assertNotNull(result); - assertNotNull(result.getMatchingCredentialsResponse()); + // Assert + assertFalse(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + assertEquals(CredentialFormat.VC_SD_JWT.getFormat(), + result.getMatchingCredentialsResponse().getAvailableCredentials().get(0).getFormat()); } @Test - public void testMatchesFieldPathNullMatches() throws Exception { + public void testMatchesSdJwtFormatWhenAlgorithmDoesNotMatchCredentialNotSelected() throws Exception { // Arrange - PresentationDefinition pd = createMockPresentationDefinition(); - when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) - .thenReturn(pd); - - // Create credentials that will result in null matches - List credentials = createMockWalletCredentialsWithMapData(); + PresentationDefinition pd = createSdJwtPresentationDefinition(Arrays.asList("ES256")); + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())).thenReturn(pd); when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) - .thenReturn(credentials); + .thenReturn(Arrays.asList(createDecryptedSdJwtCredential(SD_JWT_HS256))); // Act - MatchingCredentialsDTO result = credentialMatchingService - .getMatchingCredentials(sessionData, walletId, base64Key); + MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); - // Assert - Should handle null matches gracefully - assertNotNull(result); - assertNotNull(result.getMatchingCredentialsResponse()); + // Assert + assertTrue(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); } @Test - public void testMatchesFilterNullFilter() throws Exception { + public void testMatchesSdJwtFormatWhenNoAlgValuesInFormatCredentialIsSelected() throws Exception { // Arrange - // Create presentation definition with null filter - Fields field = new Fields(Arrays.asList("$.name"), null, null, null, null, null); + Map>> format = new HashMap<>(); + format.put(CredentialFormat.VC_SD_JWT.getFormat(), new HashMap<>()); + + Fields field = new Fields(Arrays.asList("$.type"), null, null, null, null, null); Constraints constraints = new Constraints(Collections.singletonList(field), null); - InputDescriptor descriptor = new InputDescriptor("test-descriptor", null, null, null, constraints); + InputDescriptor descriptor = new InputDescriptor("test", null, null, format, constraints); PresentationDefinition pd = new PresentationDefinition("test-pd", Arrays.asList(descriptor), null, null, null); - - when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) - .thenReturn(pd); - - List credentials = createMockWalletCredentialsWithMapData(); + + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())).thenReturn(pd); + Map publicClaims = new LinkedHashMap<>(); + publicClaims.put("type", Arrays.asList("VerifiableCredential")); + setupSdJwtHandlerMock(publicClaims, new LinkedHashMap<>()); when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) - .thenReturn(credentials); + .thenReturn(Arrays.asList(createDecryptedSdJwtCredential(SD_JWT_HS256))); // Act - MatchingCredentialsDTO result = credentialMatchingService - .getMatchingCredentials(sessionData, walletId, base64Key); + MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); - // Assert - Should handle null filter gracefully - assertNotNull(result); - assertNotNull(result.getMatchingCredentialsResponse()); + // Assert + assertTrue(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); } @Test - public void testExtractRequiredClaimsNullPath() throws Exception { + public void testMatchesSdJwtFormatWhenCredentialIsNullCredentialNotSelected() throws Exception { // Arrange - // Create presentation definition with empty path list to test null path handling - Fields field = new Fields(Collections.emptyList(), null, null, null, null, null); - Constraints constraints = new Constraints(Collections.singletonList(field), null); - InputDescriptor descriptor = new InputDescriptor("test-descriptor", null, null, null, constraints); - PresentationDefinition pd = new PresentationDefinition("test-pd", Arrays.asList(descriptor), null, null, null); - - when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) - .thenReturn(pd); - - List credentials = createMockWalletCredentialsWithMapData(); + PresentationDefinition pd = createSdJwtPresentationDefinition(Arrays.asList("HS256")); + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())).thenReturn(pd); when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) - .thenReturn(credentials); + .thenReturn(Arrays.asList(createDecryptedSdJwtCredential(null))); // Act - MatchingCredentialsDTO result = credentialMatchingService - .getMatchingCredentials(sessionData, walletId, base64Key); + MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); - // Assert - Should handle null path gracefully - assertNotNull(result); - assertNotNull(result.getMatchingCredentialsResponse()); + // Assert + assertTrue(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); } @Test - public void testExtractRequiredClaimsBlankPath() throws Exception { + public void testMatchesSdJwtFormatWhenCredentialIsNotStringCredentialNotSelected() throws Exception { // Arrange - // Create presentation definition with blank path - Fields field = new Fields(Arrays.asList(" "), null, null, null, null, null); + PresentationDefinition pd = createSdJwtPresentationDefinition(Arrays.asList("HS256")); + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())).thenReturn(pd); + + DecryptedCredentialDTO cred = new DecryptedCredentialDTO(); + cred.setId("sd-jwt-cred"); + cred.setWalletId(walletId); + cred.setCredential(VCCredentialResponse.builder() + .format(CredentialFormat.VC_SD_JWT.getFormat()) + .credential(Map.of("key", "value")) + .build()); + CredentialMetadata metadata = new CredentialMetadata(); + metadata.setIssuerId("test-issuer-id"); + metadata.setCredentialType("TestCredential"); + cred.setCredentialMetadata(metadata); + cred.setCreatedAt(Instant.now()); + cred.setUpdatedAt(Instant.now()); + + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(Arrays.asList(cred)); + + // Act + MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertTrue(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + } + + @Test + public void testMatchesSdJwtFormatWhenFormatConfigValueIsNullCredentialNotSelected() throws Exception { + // Arrange + Map>> format = new HashMap<>(); + format.put(CredentialFormat.VC_SD_JWT.getFormat(), Map.of("jwt_alg_values", List.of("ES256"))); + + Fields field = new Fields(Arrays.asList("$.type"), null, null, null, null, null); + Constraints constraints = new Constraints(Collections.singletonList(field), null); + InputDescriptor descriptor = new InputDescriptor("test", null, null, format, constraints); + PresentationDefinition pd = new PresentationDefinition("test-pd", Arrays.asList(descriptor), null, null, null); + + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())).thenReturn(pd); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(Arrays.asList(createDecryptedSdJwtCredential(SD_JWT_HS256))); + + // Act + MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertTrue(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + } + + @Test + public void testMatchesSdJwtFormatWhenJwtHeaderMissingAlgCredentialNotSelected() throws Exception { + // Arrange + PresentationDefinition pd = createSdJwtPresentationDefinition(Arrays.asList("HS256")); + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())).thenReturn(pd); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(Arrays.asList(createDecryptedSdJwtCredential(SD_JWT_NO_ALG))); + + // Act + MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertTrue(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + } + + @Test + public void testMatchesSdJwtFormatWhenEmptyJwtStringCredentialNotSelected() throws Exception { + // Arrange + PresentationDefinition pd = createSdJwtPresentationDefinition(Arrays.asList("HS256")); + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())).thenReturn(pd); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(Arrays.asList(createDecryptedSdJwtCredential(" "))); + + // Act + MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertTrue(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + } + + @Test + public void testMatchesSdJwtFormatWhenJwtHeaderAlgIsNonStringCredentialNotSelected() throws Exception { + // Arrange + PresentationDefinition pd = createSdJwtPresentationDefinition(Arrays.asList("HS256")); + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())).thenReturn(pd); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(Arrays.asList(createDecryptedSdJwtCredential(SD_JWT_NON_STRING_ALG))); + + // Act + MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertTrue(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + } + + @Test + public void testGetCredentialDataWhenSdJwtExtractsNullCredentialNotSelected() throws Exception { + // Arrange + Fields field = new Fields(Arrays.asList("$.name"), null, null, null, null, null); + Constraints constraints = new Constraints(Collections.singletonList(field), null); + InputDescriptor descriptor = new InputDescriptor("test", null, null, null, constraints); + PresentationDefinition pd = new PresentationDefinition("test-pd", Arrays.asList(descriptor), null, null, null); + + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())).thenReturn(pd); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(Arrays.asList(createDecryptedSdJwtCredential(SD_JWT_HS256))); + when(credentialFormatHandler.extractAllCredentialProperties(any(VCCredentialResponse.class))) + .thenReturn(null); + + // Act + MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertTrue(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + } + + @Test + public void testGetCredentialDataWhenSdJwtFlattensPropertiesCredentialSelected() throws Exception { + // Arrange + Fields field = new Fields(Arrays.asList("$.name"), null, null, null, null, null); + Constraints constraints = new Constraints(Collections.singletonList(field), null); + InputDescriptor descriptor = new InputDescriptor("test", null, null, null, constraints); + PresentationDefinition pd = new PresentationDefinition("test-pd", Arrays.asList(descriptor), null, null, null); + + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())).thenReturn(pd); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(Arrays.asList(createDecryptedSdJwtCredential(SD_JWT_HS256))); + + Map sdClaims = new LinkedHashMap<>(); + sdClaims.put("name", "John"); + setupSdJwtHandlerMock(new LinkedHashMap<>(), sdClaims); + + // Act + MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertFalse(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + } + + + @Test + public void testBuildAvailableCredentialWhenSdJwtWithNullClaimsReturnsEmptyClaimLists() throws Exception { + // Arrange + MatchingCredentialsDTO result = executeSdJwtNoConstraintFlow( + createSdJwtAllClaimsMap(null, null)); + + // Assert + assertFalse(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + CredentialDTO credential = result.getMatchingCredentialsResponse().getAvailableCredentials().get(0); + assertTrue(credential.getClaims().isEmpty()); + assertTrue(credential.getSdClaims().isEmpty()); + assertEquals(CredentialFormat.VC_SD_JWT.getFormat(), credential.getFormat()); + } + + @Test + public void testBuildAvailableCredentialWhenSdJwtWithCredentialSubjectExtractsFromSubject() throws Exception { + Map publicClaims = new LinkedHashMap<>(); + Map subject = new LinkedHashMap<>(); + subject.put("name", "John"); + subject.put("age", 30); + subject.put("_sd", Arrays.asList("hash1", "hash2")); + Map address = new LinkedHashMap<>(); + address.put("street", "123 Main St"); + address.put("city", "NYC"); + subject.put("address", address); + List> contacts = Arrays.asList( + createMapOf("type", "email", "value", "john@example.com"), + createMapOf("type", "phone", "value", "555-1234")); + subject.put("contacts", contacts); + List privileges = Arrays.asList( + createMapOf("vehicle_code", "C", "issue_date", "2020-01-01")); + subject.put("privileges", privileges); + List tags = new ArrayList<>(); + tags.add(createMapOf("code", "A", "label", "TagA")); + tags.add(createMapOf("code", "B", "label", "TagB")); + tags.add("plain-string"); + subject.put("tags", tags); + List> disjoint = Arrays.asList( + createMapOf("alpha", 1), + createMapOf("beta", 2)); + subject.put("disjoint", disjoint); + publicClaims.put("credentialSubject", subject); + + MatchingCredentialsDTO result = executeSdJwtNoConstraintFlow( + createSdJwtAllClaimsMap(publicClaims, new LinkedHashMap<>())); + + CredentialDTO credential = result.getMatchingCredentialsResponse().getAvailableCredentials().get(0); + assertTrue(credential.getClaims().contains("$.name")); + assertTrue(credential.getClaims().contains("$.age")); + assertTrue(credential.getClaims().contains("$.address.street")); + assertTrue(credential.getClaims().contains("$.address.city")); + assertTrue(credential.getClaims().contains("$.contacts")); + assertFalse(credential.getClaims().contains("$.contacts.type")); + assertFalse(credential.getClaims().contains("$.contacts.value")); + assertTrue(credential.getClaims().contains("$.privileges")); + assertTrue(credential.getClaims().contains("$.privileges.vehicle_code")); + assertTrue(credential.getClaims().contains("$.privileges.issue_date")); + assertTrue(credential.getClaims().contains("$.tags")); + assertTrue(credential.getClaims().contains("$.tags.code")); + assertTrue(credential.getClaims().contains("$.tags.label")); + assertTrue(credential.getClaims().contains("$.disjoint")); + assertTrue(credential.getClaims().contains("$.disjoint.alpha")); + assertTrue(credential.getClaims().contains("$.disjoint.beta")); + assertFalse(credential.getClaims().contains("$._sd")); + assertFalse(credential.getClaims().contains("$.address")); + } + + @Test + public void testBuildAvailableCredentialWhenSdJwtWithoutCredentialSubjectRemovesMetadataAndExtracts() throws Exception { + // Arrange + Map publicClaims = new LinkedHashMap<>(); + publicClaims.put("vct", "IdentityCredential"); + publicClaims.put("iss", "https://example.com"); + publicClaims.put("cnf", new LinkedHashMap<>(Map.of("jwk", "key"))); + publicClaims.put("sub", "did:example:123"); + publicClaims.put("iat", 1234567890); + publicClaims.put("exp", 1234567899); + publicClaims.put("nbf", 1234567880); + publicClaims.put("jti", "urn:uuid:abc"); + publicClaims.put("aud", "https://verifier.com"); + publicClaims.put("_sd", Arrays.asList("hash1")); + publicClaims.put("_sd_alg", "sha-256"); + publicClaims.put("id", "did:example:123"); + publicClaims.put("given_name", "John"); + + MatchingCredentialsDTO result = executeSdJwtNoConstraintFlow( + createSdJwtAllClaimsMap(publicClaims, new LinkedHashMap<>())); + + // Assert + CredentialDTO credential = result.getMatchingCredentialsResponse().getAvailableCredentials().get(0); + assertTrue(credential.getClaims().contains("$.given_name")); + assertFalse(credential.getClaims().stream().anyMatch(c -> + c.contains("vct") || c.contains("iss") || c.contains("cnf") || c.contains("sub") || + c.contains("_sd") || c.contains("_sd_alg") || c.contains("id"))); + } + + @Test + public void testBuildAvailableCredentialWhenSdJwtWithSdClaimsExtractsSdClaimPaths() throws Exception { + Map sdClaims = new LinkedHashMap<>(); + sdClaims.put("family_name", "Doe"); + sdClaims.put("birth_date", "1990-01-01"); + sdClaims.put("credentialSubject.NumberOfCAR", 5); + + MatchingCredentialsDTO result = executeSdJwtNoConstraintFlow( + createSdJwtAllClaimsMap(new LinkedHashMap<>(), sdClaims)); + + CredentialDTO credential = result.getMatchingCredentialsResponse().getAvailableCredentials().get(0); + assertEquals(3, credential.getSdClaims().size()); + assertTrue(credential.getSdClaims().contains("$.family_name")); + assertTrue(credential.getSdClaims().contains("$.birth_date")); + assertTrue(credential.getSdClaims().contains("$.NumberOfCAR")); + } + + @Test + public void testBuildAvailableCredentialWhenSdJwtWithIssuerConfigExceptionUsesDefaultDisplayName() throws Exception { + // Arrange + MatchingCredentialsDTO result = executeSdJwtNoConstraintFlow( + createSdJwtAllClaimsMap(new LinkedHashMap<>(), new LinkedHashMap<>())); + + // Assert + CredentialDTO credential = result.getMatchingCredentialsResponse().getAvailableCredentials().get(0); + assertEquals("Unknown Credential", credential.getCredentialTypeDisplayName()); + assertNull(credential.getCredentialTypeLogo()); + } + + @Test + public void testCollectPathsWhenMapHasScalarValuesCollectsLeafPaths() throws Exception { + // Arrange + Map sdClaims = new LinkedHashMap<>(); + sdClaims.put("given_name", "John"); + sdClaims.put("family_name", "Doe"); + sdClaims.put("age", 30); + + MatchingCredentialsDTO result = executeSdJwtNoConstraintFlow( + createSdJwtAllClaimsMap(new LinkedHashMap<>(), sdClaims)); + + // Assert + CredentialDTO credential = result.getMatchingCredentialsResponse().getAvailableCredentials().get(0); + List paths = credential.getSdClaims(); + assertEquals(3, paths.size()); + assertTrue(paths.containsAll(Arrays.asList("$.given_name", "$.family_name", "$.age"))); + } + + @Test + public void testExtractSdClaimPathsWhenMapHasNestedMapProducesTopLevelKey() throws Exception { + Map address = new LinkedHashMap<>(); + address.put("street", "123 Main St"); + address.put("city", "NYC"); + Map sdClaims = new LinkedHashMap<>(); + sdClaims.put("address", address); + + MatchingCredentialsDTO result = executeSdJwtNoConstraintFlow( + createSdJwtAllClaimsMap(new LinkedHashMap<>(), sdClaims)); + + CredentialDTO credential = result.getMatchingCredentialsResponse().getAvailableCredentials().get(0); + List paths = credential.getSdClaims(); + assertEquals(1, paths.size()); + assertTrue(paths.contains("$.address")); + } + + @Test + public void testExtractSdClaimPathsWhenMapHasSdKeyIncludesSdKey() throws Exception { + Map sdClaims = new LinkedHashMap<>(); + sdClaims.put("name", "John"); + sdClaims.put("_sd", Arrays.asList("hash1", "hash2")); + + MatchingCredentialsDTO result = executeSdJwtNoConstraintFlow( + createSdJwtAllClaimsMap(new LinkedHashMap<>(), sdClaims)); + + CredentialDTO credential = result.getMatchingCredentialsResponse().getAvailableCredentials().get(0); + List paths = credential.getSdClaims(); + assertEquals(2, paths.size()); + assertTrue(paths.contains("$.name")); + assertTrue(paths.contains("$._sd")); + } + + @Test + public void testCollectPathsWhenListHasUniformKeysStopsAtListLevel() throws Exception { + // Arrange + Map sdClaims = new LinkedHashMap<>(); + List> genderList = Arrays.asList( + createMapOf("code", "M", "value", "Male"), + createMapOf("code", "F", "value", "Female")); + sdClaims.put("gender", genderList); + + MatchingCredentialsDTO result = executeSdJwtNoConstraintFlow( + createSdJwtAllClaimsMap(new LinkedHashMap<>(), sdClaims)); + + // Assert + CredentialDTO credential = result.getMatchingCredentialsResponse().getAvailableCredentials().get(0); + List paths = credential.getSdClaims(); + assertTrue(paths.contains("$.gender")); + assertFalse(paths.contains("$.gender.code")); + assertFalse(paths.contains("$.gender.value")); + assertEquals(1, paths.size()); + } + + @Test + public void testExtractSdClaimPathsWhenListHasSingleMapItemProducesTopLevelKey() throws Exception { + Map privilege = new LinkedHashMap<>(); + privilege.put("vehicle_category_code", "C"); + privilege.put("issue_date", "2020-01-01"); + + Map sdClaims = new LinkedHashMap<>(); + sdClaims.put("driving_privileges", Arrays.asList(privilege)); + + MatchingCredentialsDTO result = executeSdJwtNoConstraintFlow( + createSdJwtAllClaimsMap(new LinkedHashMap<>(), sdClaims)); + + CredentialDTO credential = result.getMatchingCredentialsResponse().getAvailableCredentials().get(0); + List paths = credential.getSdClaims(); + assertEquals(1, paths.size()); + assertTrue(paths.contains("$.driving_privileges")); + } + + @Test + public void testCollectPathsWhenListHasNonMapItemsSkipsNonMapItems() throws Exception { + // Arrange + Map sdClaims = new LinkedHashMap<>(); + sdClaims.put("tags", Arrays.asList("tag1", "tag2", "tag3")); + + MatchingCredentialsDTO result = executeSdJwtNoConstraintFlow( + createSdJwtAllClaimsMap(new LinkedHashMap<>(), sdClaims)); + + // Assert + CredentialDTO credential = result.getMatchingCredentialsResponse().getAvailableCredentials().get(0); + List paths = credential.getSdClaims(); + assertEquals(1, paths.size()); + assertTrue(paths.contains("$.tags")); + } + + @Test + public void testExtractSdClaimPathsWhenListItemsHaveNoCommonKeysProducesTopLevelKey() throws Exception { + Map sdClaims = new LinkedHashMap<>(); + List> items = Arrays.asList( + createMapOf("alpha", 1), + createMapOf("beta", 2)); + sdClaims.put("mixed", items); + + MatchingCredentialsDTO result = executeSdJwtNoConstraintFlow( + createSdJwtAllClaimsMap(new LinkedHashMap<>(), sdClaims)); + + CredentialDTO credential = result.getMatchingCredentialsResponse().getAvailableCredentials().get(0); + List paths = credential.getSdClaims(); + assertEquals(1, paths.size()); + assertTrue(paths.contains("$.mixed")); + } + + @Test + public void testExtractSdClaimPathsComplexDrivingPrivilegesProducesTopLevelKey() throws Exception { + Map privilege = new LinkedHashMap<>(); + privilege.put("vehicle_category_code", "C"); + privilege.put("issue_date", "2020-01-01"); + privilege.put("expiry_date", "2025-01-01"); + List> codes = Arrays.asList( + createMapOf("code", "A", "value", "V1"), + createMapOf("code", "B", "value", "V2")); + privilege.put("codes", codes); + + Map sdClaims = new LinkedHashMap<>(); + sdClaims.put("driving_privileges", List.of(privilege)); + + MatchingCredentialsDTO result = executeSdJwtNoConstraintFlow( + createSdJwtAllClaimsMap(new LinkedHashMap<>(), sdClaims)); + + CredentialDTO credential = result.getMatchingCredentialsResponse().getAvailableCredentials().get(0); + List paths = credential.getSdClaims(); + assertEquals(1, paths.size()); + assertTrue(paths.contains("$.driving_privileges")); + } + + @Test + public void testExtractSdClaimPathsWhenListContainsMixedTypesProducesTopLevelKey() throws Exception { + Map sdClaims = new LinkedHashMap<>(); + List mixedList = new ArrayList<>(); + mixedList.add(createMapOf("key1", "val1")); + mixedList.add("plain-string"); + mixedList.add(42); + sdClaims.put("mixed_types", mixedList); + + MatchingCredentialsDTO result = executeSdJwtNoConstraintFlow( + createSdJwtAllClaimsMap(new LinkedHashMap<>(), sdClaims)); + + CredentialDTO credential = result.getMatchingCredentialsResponse().getAvailableCredentials().get(0); + List paths = credential.getSdClaims(); + assertEquals(1, paths.size()); + assertTrue(paths.contains("$.mixed_types")); + } + + @Test + public void testCollectPathsWhenEmptyMapProducesNoPaths() throws Exception { + // Arrange + MatchingCredentialsDTO result = executeSdJwtNoConstraintFlow( + createSdJwtAllClaimsMap(new LinkedHashMap<>(), new LinkedHashMap<>())); + + // Assert + CredentialDTO credential = result.getMatchingCredentialsResponse().getAvailableCredentials().get(0); + assertTrue(credential.getSdClaims().isEmpty()); + assertTrue(credential.getClaims().isEmpty()); + } + + @Test + public void testCollectPathsWhenListWithPartiallyOverlappingKeysTreatedAsUniform() throws Exception { + // Arrange + Map sdClaims = new LinkedHashMap<>(); + List> codes = Arrays.asList( + createMapOf("code", "A", "value", "V1", "sign", "+"), + createMapOf("code", "B", "value", "V2")); + sdClaims.put("codes", codes); + + MatchingCredentialsDTO result = executeSdJwtNoConstraintFlow( + createSdJwtAllClaimsMap(new LinkedHashMap<>(), sdClaims)); + + // Assert + CredentialDTO credential = result.getMatchingCredentialsResponse().getAvailableCredentials().get(0); + List paths = credential.getSdClaims(); + assertTrue(paths.contains("$.codes")); + assertFalse(paths.contains("$.codes.code")); + assertFalse(paths.contains("$.codes.value")); + assertFalse(paths.contains("$.codes.sign")); + assertEquals(1, paths.size()); + } + + @Test + public void testCollectPathsWhenEmptyListProducesPathButNoRecursion() throws Exception { + // Arrange + Map sdClaims = new LinkedHashMap<>(); + sdClaims.put("empty_list", new ArrayList<>()); + + MatchingCredentialsDTO result = executeSdJwtNoConstraintFlow( + createSdJwtAllClaimsMap(new LinkedHashMap<>(), sdClaims)); + + // Assert + CredentialDTO credential = result.getMatchingCredentialsResponse().getAvailableCredentials().get(0); + List paths = credential.getSdClaims(); + assertEquals(1, paths.size()); + assertTrue(paths.contains("$.empty_list")); + } + + @Test + public void testExtractSdClaimPathsWhenDeeplyNestedMapsProducesTopLevelKey() throws Exception { + Map level3 = new LinkedHashMap<>(); + level3.put("deep_value", "found"); + Map level2 = new LinkedHashMap<>(); + level2.put("level3", level3); + Map level1 = new LinkedHashMap<>(); + level1.put("level2", level2); + Map sdClaims = new LinkedHashMap<>(); + sdClaims.put("level1", level1); + + MatchingCredentialsDTO result = executeSdJwtNoConstraintFlow( + createSdJwtAllClaimsMap(new LinkedHashMap<>(), sdClaims)); + + CredentialDTO credential = result.getMatchingCredentialsResponse().getAvailableCredentials().get(0); + List paths = credential.getSdClaims(); + assertEquals(1, paths.size()); + assertTrue(paths.contains("$.level1")); + } + + + @Test + public void testMatchesFormatWhenLdpVcProofTypeNullCredentialNotSelected() throws Exception { + // Arrange + Map>> format = new HashMap<>(); + Map> ldpVcFormat = new HashMap<>(); + ldpVcFormat.put("proof_type", Arrays.asList("Ed25519Signature2020")); + format.put("ldp_vc", ldpVcFormat); + + Fields field = new Fields(Arrays.asList("$.type"), null, null, null, null, null); + Constraints constraints = new Constraints(Collections.singletonList(field), null); + InputDescriptor descriptor = new InputDescriptor("test", null, null, format, constraints); + PresentationDefinition pd = new PresentationDefinition("test-pd", Arrays.asList(descriptor), null, null, null); + + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())).thenReturn(pd); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(createMockWalletCredentialsWithMapData()); + + VCCredentialProperties propsWithNullProof = new VCCredentialProperties(); + propsWithNullProof.setType(Arrays.asList("VerifiableCredential")); + propsWithNullProof.setProof(null); + doReturn(propsWithNullProof).when(objectMapper).convertValue(any(), eq(VCCredentialProperties.class)); + + // Act + MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertTrue(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + } + + @Test + public void testMatchesFormatWhenLdpVcProofTypeListEmptyCredentialSelected() throws Exception { + // Arrange + Map>> format = new HashMap<>(); + Map> ldpVcFormat = new HashMap<>(); + ldpVcFormat.put("proof_type", Collections.emptyList()); + format.put("ldp_vc", ldpVcFormat); + + Fields field = new Fields(Arrays.asList("$.type"), null, null, null, null, null); + Constraints constraints = new Constraints(Collections.singletonList(field), null); + InputDescriptor descriptor = new InputDescriptor("test", null, null, format, constraints); + PresentationDefinition pd = new PresentationDefinition("test-pd", Arrays.asList(descriptor), null, null, null); + + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())).thenReturn(pd); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(createMockWalletCredentialsWithMapData()); + + VCCredentialProperties props = new VCCredentialProperties(); + props.setType(Arrays.asList("VerifiableCredential")); + doReturn(props).when(objectMapper).convertValue(any(), eq(VCCredentialProperties.class)); + + // Act + MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertFalse(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + } + + @Test + public void testMatchesFormatWhenLdpVcRequiredProofTypesNullCredentialSelected() throws Exception { + // Arrange + Map>> format = new HashMap<>(); + Map> ldpVcFormat = new HashMap<>(); + ldpVcFormat.put("proof_type", null); + format.put("ldp_vc", ldpVcFormat); + + Fields field = new Fields(Arrays.asList("$.type"), null, null, null, null, null); + Constraints constraints = new Constraints(Collections.singletonList(field), null); + InputDescriptor descriptor = new InputDescriptor("test", null, null, format, constraints); + PresentationDefinition pd = new PresentationDefinition("test-pd", Arrays.asList(descriptor), null, null, null); + + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())).thenReturn(pd); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(createMockWalletCredentialsWithMapData()); + + VCCredentialProperties props = new VCCredentialProperties(); + props.setType(Arrays.asList("VerifiableCredential")); + doReturn(props).when(objectMapper).convertValue(any(), eq(VCCredentialProperties.class)); + + // Act + MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertFalse(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + } + + @Test + public void testMatchesFormatWhenLdpVcNullLdpVcFormatCredentialSelected() throws Exception { + // Arrange + Map>> format = new HashMap<>(); + format.put("ldp_vc", null); + + Fields field = new Fields(Arrays.asList("$.type"), null, null, null, null, null); + Constraints constraints = new Constraints(Collections.singletonList(field), null); + InputDescriptor descriptor = new InputDescriptor("test", null, null, format, constraints); + PresentationDefinition pd = new PresentationDefinition("test-pd", Arrays.asList(descriptor), null, null, null); + + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())).thenReturn(pd); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(createMockWalletCredentialsWithMapData()); + + // Act + MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertTrue(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + } + + @Test + public void testMatchesFormatWhenLdpVcProofTypeMismatchCredentialNotSelected() throws Exception { + // Arrange + Map>> format = new HashMap<>(); + Map> ldpVcFormat = new HashMap<>(); + ldpVcFormat.put("proof_type", Arrays.asList("Ed25519Signature2020")); + format.put("ldp_vc", ldpVcFormat); + + Fields field = new Fields(Arrays.asList("$.type"), null, null, null, null, null); Constraints constraints = new Constraints(Collections.singletonList(field), null); - InputDescriptor descriptor = new InputDescriptor("test-descriptor", null, null, null, constraints); + InputDescriptor descriptor = new InputDescriptor("test", null, null, format, constraints); PresentationDefinition pd = new PresentationDefinition("test-pd", Arrays.asList(descriptor), null, null, null); - - when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) - .thenReturn(pd); - - List credentials = createMockWalletCredentialsWithMapData(); + + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())).thenReturn(pd); when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) - .thenReturn(credentials); + .thenReturn(createMockWalletCredentialsWithMatchingFormat()); + + VCCredentialProperties propsWithWrongProof = new VCCredentialProperties(); + propsWithWrongProof.setType(Arrays.asList("VerifiableCredential")); + VCCredentialResponseProof wrongProof = new VCCredentialResponseProof(); + wrongProof.setType("EcdsaSecp256k1Signature2019"); + propsWithWrongProof.setProof(wrongProof); + when(objectMapper.convertValue(any(), eq(VCCredentialProperties.class))).thenReturn(propsWithWrongProof); // Act - MatchingCredentialsDTO result = credentialMatchingService - .getMatchingCredentials(sessionData, walletId, base64Key); + MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertTrue(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + } + + @Test + public void testMatchesFormatWhenLdpVcCredentialAndDescriptorLacksLdpVcKeyCredentialNotSelected() throws Exception { + // Arrange + Map>> format = new HashMap<>(); + format.put(CredentialFormat.VC_SD_JWT.getFormat(), new HashMap<>()); + + Fields field = new Fields(Arrays.asList("$.type"), null, null, null, null, null); + Constraints constraints = new Constraints(Collections.singletonList(field), null); + InputDescriptor descriptor = new InputDescriptor("test", null, null, format, constraints); + PresentationDefinition pd = new PresentationDefinition("test-pd", Arrays.asList(descriptor), null, null, null); + + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())).thenReturn(pd); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(createMockWalletCredentialsWithMapData()); + + // Act + MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertTrue(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + } + + + @Test + public void testEvaluateJsonPathWhenPathDoesNotStartWithDollarDotNoMatch() throws Exception { + // Arrange + Fields field = new Fields(Arrays.asList("type"), null, null, null, null, null); + Constraints constraints = new Constraints(Collections.singletonList(field), null); + InputDescriptor descriptor = new InputDescriptor("test", null, null, null, constraints); + PresentationDefinition pd = new PresentationDefinition("test-pd", Arrays.asList(descriptor), null, null, null); + + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())).thenReturn(pd); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(createMockWalletCredentialsWithMapData()); + + // Act + MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertTrue(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + } + + @Test + public void testEvaluateJsonPathWhenJsonPathValueIsNullNoMatch() throws Exception { + // Arrange + Map credentialData = new HashMap<>(); + credentialData.put("name", null); + credentialData.put("type", Arrays.asList("VerifiableCredential")); + + Fields field = new Fields(Arrays.asList("$.name"), null, null, null, null, null); + Constraints constraints = new Constraints(Collections.singletonList(field), null); + InputDescriptor descriptor = new InputDescriptor("test", null, null, null, constraints); + PresentationDefinition pd = new PresentationDefinition("test-pd", Arrays.asList(descriptor), null, null, null); + + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())).thenReturn(pd); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(createMockWalletCredentialsWithSampleData(credentialData)); + + // Act + MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertTrue(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + } + + @Test + public void testEvaluateJsonPathWhenResultIsSingleValueWrapsInList() throws Exception { + // Arrange + Fields nameField = new Fields(Arrays.asList("$.name"), null, null, null, null, null); + Constraints constraints = new Constraints(Collections.singletonList(nameField), null); + InputDescriptor descriptor = new InputDescriptor("test", null, null, null, constraints); + PresentationDefinition pd = new PresentationDefinition("test-pd", Arrays.asList(descriptor), null, null, null); + + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())).thenReturn(pd); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(createMockWalletCredentialsWithSimpleFilterData()); + + // Act + MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertFalse(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + } + + + @Test + public void testExtractClaimsFromFieldsWhenFieldsContainNullSkipsNullFields() throws Exception { + // Arrange + List fieldsList = new ArrayList<>(); + fieldsList.add(null); + fieldsList.add(new Fields(Arrays.asList("$.type"), null, null, null, null, null)); + Constraints constraints = new Constraints(fieldsList, null); + InputDescriptor descriptor = new InputDescriptor("test", null, null, null, constraints); + PresentationDefinition pd = new PresentationDefinition("test-pd", Arrays.asList(descriptor), null, null, null); + + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())).thenReturn(pd); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(Collections.emptyList()); - // Assert - Should handle blank path gracefully + // Act + MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert assertNotNull(result); - assertNotNull(result.getMatchingCredentialsResponse()); + assertTrue(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + assertTrue(result.getMatchingCredentialsResponse().getMissingClaims().contains("type")); + } + + @Test + public void testExtractClaimsFromFieldsWhenFieldsIsNullReturnsEmptyList() throws Exception { + // Arrange + Map>> format = new HashMap<>(); + format.put(CredentialFormat.VC_SD_JWT.getFormat(), new HashMap<>()); + + Constraints constraints = new Constraints(null, null); + InputDescriptor descriptor = new InputDescriptor("test", null, null, format, constraints); + PresentationDefinition pd = new PresentationDefinition("test-pd", Arrays.asList(descriptor), null, null, null); + + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())).thenReturn(pd); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(createMockWalletCredentialsWithMapData()); + + // Act + MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertNotNull(result); + assertTrue(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + assertTrue(result.getMatchingCredentialsResponse().getMissingClaims().isEmpty()); + } + + @Test + public void testExtractRequiredClaimsWhenDeduplicateEnabledRemovesDuplicates() throws Exception { + // Arrange + Fields field1 = new Fields(Arrays.asList("$.type"), null, null, null, null, null); + Constraints constraints1 = new Constraints(Collections.singletonList(field1), null); + InputDescriptor desc1 = new InputDescriptor("desc-1", null, null, null, constraints1); + + Fields field2 = new Fields(Arrays.asList("$.type"), null, null, null, null, null); + Constraints constraints2 = new Constraints(Collections.singletonList(field2), null); + InputDescriptor desc2 = new InputDescriptor("desc-2", null, null, null, constraints2); + + PresentationDefinition pd = new PresentationDefinition("test-pd", Arrays.asList(desc1, desc2), null, null, null); + + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())).thenReturn(pd); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(Collections.emptyList()); + + // Act + MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertEquals(1, result.getMatchingCredentialsResponse().getMissingClaims().size()); + assertTrue(result.getMatchingCredentialsResponse().getMissingClaims().contains("type")); + } + + + @Test + public void testExtractSdJwtAlgorithmWhenSdJwtStringIsNullReturnsNull() throws Exception { + // Arrange + Method method = CredentialMatchingServiceImpl.class.getDeclaredMethod("extractSdJwtAlgorithm", String.class); + method.setAccessible(true); + + // Act + String result = (String) method.invoke(credentialMatchingService, (String) null); + + // Assert + assertNull(result); + } + + @Test + public void testMatchesConstraintsWhenFieldsAreNullReturnsTrue() throws Exception { + // Arrange + Method method = CredentialMatchingServiceImpl.class.getDeclaredMethod( + "matchesConstraints", VCCredentialResponse.class, Constraints.class); + method.setAccessible(true); + + VCCredentialResponse vc = VCCredentialResponse.builder() + .format("ldp_vc") + .credential(new HashMap<>()) + .build(); + Constraints constraints = new Constraints(null, null); + + // Act + boolean result = (boolean) method.invoke(credentialMatchingService, vc, constraints); + + // Assert + assertTrue(result); + } + + @Test + public void testEvaluateJsonPathWhenPathIsNullReturnsEmptyList() throws Exception { + // Arrange + Fields field = new Fields(Collections.singletonList(null), null, null, null, null, null); + Constraints constraints = new Constraints(Collections.singletonList(field), null); + InputDescriptor descriptor = new InputDescriptor("test", null, null, null, constraints); + PresentationDefinition pd = new PresentationDefinition("test-pd", Arrays.asList(descriptor), null, null, null); + + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())).thenReturn(pd); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(createMockWalletCredentialsWithMapData()); + + // Act + MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertTrue(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + } + + @Test + public void testEvaluateJsonPathWhenJsonIsNullReturnsEmptyList() throws Exception { + // Arrange + Fields field = new Fields(Arrays.asList("$.type"), null, null, null, null, null); + Constraints constraints = new Constraints(Collections.singletonList(field), null); + InputDescriptor descriptor = new InputDescriptor("test", null, null, null, constraints); + PresentationDefinition pd = new PresentationDefinition("test-pd", Arrays.asList(descriptor), null, null, null); + + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())).thenReturn(pd); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(createMockWalletCredentialsWithMapData()); + when(credentialFormatHandler.extractAllCredentialProperties(any(VCCredentialResponse.class))) + .thenReturn(null); + + // Act + MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertTrue(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + } + + @Test + public void testMatchesFieldPathWhenPathNotFoundInCredentialReturnsFalse() throws Exception { + // Arrange + Method method = CredentialMatchingServiceImpl.class.getDeclaredMethod( + "matchesFieldPath", VCCredentialResponse.class, String.class, Filter.class); + method.setAccessible(true); + + VCCredentialResponse vc = VCCredentialResponse.builder() + .format("ldp_vc") + .credential(new HashMap<>()) + .build(); + + // Act + boolean result = (boolean) method.invoke(credentialMatchingService, vc, "$.nonexistent", null); + + // Assert + assertFalse(result); + } + + @Test + public void testExtractRequiredClaimsWhenDescriptorHasNullFieldsFilteredOut() throws Exception { + // Arrange + Constraints constraintsWithNullFields = new Constraints(null, null); + InputDescriptor descNullFields = new InputDescriptor("desc-null", null, null, null, constraintsWithNullFields); + + Fields field = new Fields(Arrays.asList("$.name"), null, null, null, null, null); + Constraints constraintsWithFields = new Constraints(Collections.singletonList(field), null); + InputDescriptor descWithFields = new InputDescriptor("desc-valid", null, null, null, constraintsWithFields); + + PresentationDefinition pd = new PresentationDefinition( + "test-pd", Arrays.asList(descNullFields, descWithFields), null, null, null); + + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())).thenReturn(pd); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(Collections.emptyList()); + + // Act + MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertTrue(result.getMatchingCredentialsResponse().getMissingClaims().contains("name")); + assertEquals(1, result.getMatchingCredentialsResponse().getMissingClaims().size()); + } + + @Test + public void testExtractClaimKeyFromPathWhenTailStartsWithDollarStrippsDollarPrefix() throws Exception { + // Arrange + Fields field = new Fields(Arrays.asList("$.$id"), null, null, null, null, null); + Constraints constraints = new Constraints(Collections.singletonList(field), null); + InputDescriptor descriptor = new InputDescriptor("test", null, null, null, constraints); + PresentationDefinition pd = new PresentationDefinition("test-pd", Arrays.asList(descriptor), null, null, null); + + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())).thenReturn(pd); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(Collections.emptyList()); + + // Act + MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert + assertTrue(result.getMatchingCredentialsResponse().getMissingClaims().contains("id")); + } + + @Test + public void testExtractSdClaimPathsWhenListHasMapsAndNonMapsProducesTopLevelKey() throws Exception { + Map sdClaims = new LinkedHashMap<>(); + List mixedList = new ArrayList<>(); + mixedList.add(createMapOf("code", "A", "value", "V1")); + mixedList.add(createMapOf("code", "B", "value", "V2")); + mixedList.add("not-a-map"); + sdClaims.put("data", mixedList); + + MatchingCredentialsDTO result = executeSdJwtNoConstraintFlow( + createSdJwtAllClaimsMap(new LinkedHashMap<>(), sdClaims)); + + CredentialDTO credential = result.getMatchingCredentialsResponse().getAvailableCredentials().get(0); + List paths = credential.getSdClaims(); + assertEquals(1, paths.size()); + assertTrue(paths.contains("$.data")); + } + + private static final String SD_JWT_HS256 = + "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJ0ZXN0In0.sig"; + + private static final String SD_JWT_NO_ALG = + "eyJ0eXAiOiJKV1QifQ.eyJpc3MiOiJ0ZXN0In0.sig"; + + private static final String SD_JWT_NON_STRING_ALG = + "eyJhbGciOjEyM30.eyJpc3MiOiJ0ZXN0In0.sig"; + + private PresentationDefinition createSdJwtPresentationDefinition(List algorithmValues) { + Map>> format = new HashMap<>(); + Map> sdJwtFormat = new HashMap<>(); + sdJwtFormat.put("sd-jwt_alg_values", algorithmValues); + format.put(CredentialFormat.VC_SD_JWT.getFormat(), sdJwtFormat); + + Fields field = new Fields(Arrays.asList("$.type"), null, null, null, null, null); + Constraints constraints = new Constraints(Collections.singletonList(field), null); + InputDescriptor descriptor = new InputDescriptor("sd-jwt-descriptor", null, null, format, constraints); + return new PresentationDefinition("sd-jwt-pd", Arrays.asList(descriptor), null, null, null); + } + + private DecryptedCredentialDTO createDecryptedSdJwtCredential(Object credentialPayload) { + DecryptedCredentialDTO credential = new DecryptedCredentialDTO(); + credential.setId("sd-jwt-credential-id"); + credential.setWalletId(walletId); + + VCCredentialResponse response = VCCredentialResponse.builder() + .format(CredentialFormat.VC_SD_JWT.getFormat()) + .credential(credentialPayload) + .build(); + credential.setCredential(response); + + CredentialMetadata metadata = new CredentialMetadata(); + metadata.setIssuerId("test-issuer-id"); + metadata.setCredentialType("TestCredential"); + credential.setCredentialMetadata(metadata); + credential.setCreatedAt(Instant.now()); + credential.setUpdatedAt(Instant.now()); + + return credential; + } + + private void setupSdJwtHandlerMock(Map publicClaims, Map sdClaims) { + when(credentialFormatHandler.extractAllCredentialProperties(any(VCCredentialResponse.class))) + .thenAnswer(invocation -> { + VCCredentialResponse vc = invocation.getArgument(0); + String format = vc.getFormat(); + + if (CredentialFormat.VC_SD_JWT.getFormat().equalsIgnoreCase(format)) { + Map> result = new LinkedHashMap<>(); + result.put("publicClaims", new LinkedHashMap<>(publicClaims)); + result.put("sdClaims", new LinkedHashMap<>(sdClaims)); + return result; + } + Object cred = vc.getCredential(); + if (cred instanceof Map) { + return new LinkedHashMap<>((Map) cred); + } + return new LinkedHashMap<>(); + }); + } + + private MatchingCredentialsDTO executeSdJwtNoConstraintFlow( + Map> handlerReturn) throws Exception { + Constraints constraints = new Constraints(null, null); + InputDescriptor descriptor = new InputDescriptor("sd-jwt-test", null, null, null, constraints); + PresentationDefinition pd = new PresentationDefinition("sd-jwt-pd", + Arrays.asList(descriptor), null, null, null); + + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())).thenReturn(pd); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(Arrays.asList(createDecryptedSdJwtCredential(SD_JWT_HS256))); + when(credentialFormatHandler.extractAllCredentialProperties(any(VCCredentialResponse.class))) + .thenAnswer(invocation -> handlerReturn); + + return credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); + } + + private Map> createSdJwtAllClaimsMap( + Map publicClaims, Map sdClaims) { + Map> allClaims = new LinkedHashMap<>(); + allClaims.put("publicClaims", + publicClaims != null ? new LinkedHashMap<>(publicClaims) : null); + allClaims.put("sdClaims", + sdClaims != null ? new LinkedHashMap<>(sdClaims) : null); + return allClaims; + } + + private Map createMapOf(Object... keyValues) { + Map map = new LinkedHashMap<>(); + for (int i = 0; i < keyValues.length; i += 2) { + map.put((String) keyValues[i], keyValues[i + 1]); + } + return map; } } \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/LdpVcCredentialFormatHandlerTest.java b/src/test/java/io/mosip/mimoto/service/LdpVcCredentialFormatHandlerTest.java index dc2fe3034..3ce19076c 100644 --- a/src/test/java/io/mosip/mimoto/service/LdpVcCredentialFormatHandlerTest.java +++ b/src/test/java/io/mosip/mimoto/service/LdpVcCredentialFormatHandlerTest.java @@ -331,6 +331,76 @@ void getSupportedFormatShouldReturnLdpVcFormat() { assertEquals(CredentialFormat.LDP_VC.getFormat(), result); } + @Test + void extractAllCredentialPropertiesWithMapCredentialReturnsLinkedHashMap() { + // Arrange + Map credentialMap = new LinkedHashMap<>(); + credentialMap.put("type", Arrays.asList("VerifiableCredential")); + credentialMap.put("credentialSubject", Map.of("name", "John")); + vcCredentialResponse.setCredential(credentialMap); + + // Act + Map result = ldpVcCredentialFormatHandler.extractAllCredentialProperties(vcCredentialResponse); + + // Assert + assertNotNull(result); + assertTrue(result instanceof LinkedHashMap); + assertTrue(result.containsKey("type")); + assertTrue(result.containsKey("credentialSubject")); + } + + @Test + void loadDisplayPropertiesFromWellknownWhenOrderHasKeyNotInCredentialPropertiesSkipsIt() { + // Arrange - order has "extraKey" not present in credentialProperties + Map credentialProperties = new HashMap<>(); + credentialProperties.put("firstName", "John"); + + Map credentialSubjectConfig = createCredentialSubjectConfig(); + credentialDefinition.setCredentialSubject(credentialSubjectConfig); + credentialsSupportedResponse.setCredentialDefinition(credentialDefinition); + credentialsSupportedResponse.setOrder(Arrays.asList("firstName", "nonExistentKey")); + + try (MockedStatic mockedLocaleUtils = mockStatic(LocaleUtils.class)) { + mockedLocaleUtils.when(() -> LocaleUtils.resolveLocaleWithFallback(any(), eq("en"))) + .thenReturn("en"); + mockedLocaleUtils.when(() -> LocaleUtils.matchesLocale(eq("en"), eq("en"))) + .thenReturn(true); + + // Act + LinkedHashMap> result = + ldpVcCredentialFormatHandler.loadDisplayPropertiesFromWellknown( + credentialProperties, credentialsSupportedResponse, "en"); + + // Assert - nonExistentKey skipped (display null for it since not in credentialProperties) + assertNotNull(result); + assertEquals(1, result.size()); + assertTrue(result.containsKey("firstName")); + assertFalse(result.containsKey("nonExistentKey")); + } + } + + @Test + void buildFallbackDisplayPropertiesWhenOrderedKeysIsNullUsesCredentialPropertiesKeySet() { + // Arrange - null credentialDefinition triggers fallback; null order + Map credentialProperties = new LinkedHashMap<>(); + credentialProperties.put("name", "John"); + credentialProperties.put("age", 30); + + credentialsSupportedResponse.setCredentialDefinition(null); + credentialsSupportedResponse.setOrder(null); + + // Act + LinkedHashMap> result = + ldpVcCredentialFormatHandler.loadDisplayPropertiesFromWellknown( + credentialProperties, credentialsSupportedResponse, "en"); + + // Assert + assertNotNull(result); + assertEquals(2, result.size()); + assertTrue(result.containsKey("name")); + assertTrue(result.containsKey("age")); + } + // Helper methods private Map createCredentialSubjectConfig() { Map config = new LinkedHashMap<>(); diff --git a/src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java b/src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java index 1117008c9..d27b5cbdd 100644 --- a/src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java +++ b/src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java @@ -531,6 +531,638 @@ void buildFallbackDisplayPropertiesWithEmptyClaimsShouldTriggerFallback() { assertEquals("en", lastNameDisplay.getLocale()); } + // ============================================================ + // Tests for extractAllCredentialProperties + // ============================================================ + + @Test + void extractAllCredentialPropertiesWhenCredentialIsStringReturnsProperties() { + vcCredentialResponse.setCredential(sampleSdJwtString); + + try (MockedStatic mockedSdJwt = mockStatic(SDJWT.class); + MockedStatic mockedJwtUtils = mockStatic(JwtUtils.class)) { + + SDJWT mockSdJwt = mock(SDJWT.class); + mockedSdJwt.when(() -> SDJWT.parse(sampleSdJwtString)).thenReturn(mockSdJwt); + when(mockSdJwt.getCredentialJwt()).thenReturn(sampleJwtString); + when(mockSdJwt.getDisclosures()).thenReturn(null); + + Map jwtPayload = new LinkedHashMap<>(); + jwtPayload.put("name", "John"); + jwtPayload.put("iss", "https://example.com"); + mockedJwtUtils.when(() -> JwtUtils.parseJwtPayload(sampleJwtString)).thenReturn(jwtPayload); + + Map> result = (Map>) + vcSdJwtCredentialFormatHandler.extractAllCredentialProperties(vcCredentialResponse); + + assertNotNull(result); + assertTrue(result.containsKey("publicClaims")); + assertTrue(result.containsKey("sdClaims")); + assertEquals("John", result.get("publicClaims").get("name")); + } + } + + @Test + void extractAllCredentialPropertiesWhenCredentialIsNotStringReturnsEmptyMap() { + vcCredentialResponse.setCredential(new HashMap<>()); + + Map result = (Map) vcSdJwtCredentialFormatHandler.extractAllCredentialProperties(vcCredentialResponse); + + assertNotNull(result); + assertTrue(result.isEmpty()); + } + + // ============================================================ + // Tests for extractAllPropertiesFromSdJwt + // ============================================================ + + @Test + void extractAllPropertiesFromSdJwtWhenIllegalArgExceptionReturnsEmptyMap() { + try (MockedStatic mockedSdJwt = mockStatic(SDJWT.class)) { + mockedSdJwt.when(() -> SDJWT.parse("bad-jwt")) + .thenThrow(new IllegalArgumentException("Invalid SD-JWT")); + + Map> result = vcSdJwtCredentialFormatHandler.extractAllPropertiesFromSdJwt("bad-jwt"); + + assertNotNull(result); + assertTrue(result.isEmpty()); + } + } + + @Test + void extractAllPropertiesFromSdJwtWhenGenericExceptionReturnsEmptyMap() { + try (MockedStatic mockedSdJwt = mockStatic(SDJWT.class)) { + mockedSdJwt.when(() -> SDJWT.parse("bad-jwt")) + .thenThrow(new RuntimeException("Unexpected")); + + Map> result = vcSdJwtCredentialFormatHandler.extractAllPropertiesFromSdJwt("bad-jwt"); + + assertNotNull(result); + assertTrue(result.isEmpty()); + } + } + + @Test + void extractAllPropertiesFromSdJwtWhenNullPayloadReturnsSdClaimsEmpty() { + try (MockedStatic mockedSdJwt = mockStatic(SDJWT.class); + MockedStatic mockedJwtUtils = mockStatic(JwtUtils.class)) { + + SDJWT mockSdJwt = mock(SDJWT.class); + mockedSdJwt.when(() -> SDJWT.parse(sampleSdJwtString)).thenReturn(mockSdJwt); + when(mockSdJwt.getCredentialJwt()).thenReturn(sampleJwtString); + when(mockSdJwt.getDisclosures()).thenReturn(null); + + mockedJwtUtils.when(() -> JwtUtils.parseJwtPayload(sampleJwtString)).thenReturn(null); + + Map> result = vcSdJwtCredentialFormatHandler.extractAllPropertiesFromSdJwt(sampleSdJwtString); + + assertNotNull(result); + assertTrue(result.get("publicClaims").isEmpty()); + assertTrue(result.get("sdClaims").isEmpty()); + } + } + + // ============================================================ + // Tests for resolveDisclosures via extractAllPropertiesFromSdJwt + // ============================================================ + + @Test + void extractAllPropertiesFromSdJwtWithSdDigestsInPayloadResolvesSdClaims() { + try (MockedStatic mockedSdJwt = mockStatic(SDJWT.class); + MockedStatic mockedJwtUtils = mockStatic(JwtUtils.class)) { + + SDJWT mockSdJwt = mock(SDJWT.class); + mockedSdJwt.when(() -> SDJWT.parse(sampleSdJwtString)).thenReturn(mockSdJwt); + when(mockSdJwt.getCredentialJwt()).thenReturn(sampleJwtString); + + Disclosure disclosure = mock(Disclosure.class); + when(disclosure.digest()).thenReturn("digest1"); + when(disclosure.getDisclosure()).thenReturn("base64disclosure1"); + when(disclosure.getClaimName()).thenReturn("given_name"); + when(disclosure.getClaimValue()).thenReturn("John"); + when(mockSdJwt.getDisclosures()).thenReturn(Arrays.asList(disclosure)); + + Map payload = new LinkedHashMap<>(); + payload.put("_sd", Arrays.asList("digest1")); + payload.put("iss", "https://example.com"); + mockedJwtUtils.when(() -> JwtUtils.parseJwtPayload(sampleJwtString)).thenReturn(payload); + + Map> result = vcSdJwtCredentialFormatHandler.extractAllPropertiesFromSdJwt(sampleSdJwtString); + + assertNotNull(result); + Map sdClaims = result.get("sdClaims"); + assertTrue(sdClaims.containsKey("given_name")); + } + } + + @Test + void extractAllPropertiesFromSdJwtWithNullDisclosureForDigestSkipsDigest() { + try (MockedStatic mockedSdJwt = mockStatic(SDJWT.class); + MockedStatic mockedJwtUtils = mockStatic(JwtUtils.class)) { + + SDJWT mockSdJwt = mock(SDJWT.class); + mockedSdJwt.when(() -> SDJWT.parse(sampleSdJwtString)).thenReturn(mockSdJwt); + when(mockSdJwt.getCredentialJwt()).thenReturn(sampleJwtString); + when(mockSdJwt.getDisclosures()).thenReturn(Collections.emptyList()); + + Map payload = new LinkedHashMap<>(); + payload.put("_sd", Arrays.asList("unknownDigest")); + mockedJwtUtils.when(() -> JwtUtils.parseJwtPayload(sampleJwtString)).thenReturn(payload); + + Map> result = vcSdJwtCredentialFormatHandler.extractAllPropertiesFromSdJwt(sampleSdJwtString); + + assertNotNull(result); + assertTrue(result.get("sdClaims").isEmpty()); + } + } + + @Test + void extractAllPropertiesFromSdJwtWhenClaimNameIsSdOrKeySkipsDigest() { + try (MockedStatic mockedSdJwt = mockStatic(SDJWT.class); + MockedStatic mockedJwtUtils = mockStatic(JwtUtils.class)) { + + SDJWT mockSdJwt = mock(SDJWT.class); + mockedSdJwt.when(() -> SDJWT.parse(sampleSdJwtString)).thenReturn(mockSdJwt); + when(mockSdJwt.getCredentialJwt()).thenReturn(sampleJwtString); + + Disclosure sdDisclosure = mock(Disclosure.class); + when(sdDisclosure.digest()).thenReturn("digest_sd"); + when(sdDisclosure.getDisclosure()).thenReturn("b64sd"); + when(sdDisclosure.getClaimName()).thenReturn("_sd"); + + Disclosure keyDisclosure = mock(Disclosure.class); + when(keyDisclosure.digest()).thenReturn("digest_key"); + when(keyDisclosure.getDisclosure()).thenReturn("b64key"); + when(keyDisclosure.getClaimName()).thenReturn("..."); + + when(mockSdJwt.getDisclosures()).thenReturn(Arrays.asList(sdDisclosure, keyDisclosure)); + + Map payload = new LinkedHashMap<>(); + payload.put("_sd", Arrays.asList("digest_sd", "digest_key")); + mockedJwtUtils.when(() -> JwtUtils.parseJwtPayload(sampleJwtString)).thenReturn(payload); + + Map> result = vcSdJwtCredentialFormatHandler.extractAllPropertiesFromSdJwt(sampleSdJwtString); + + assertNotNull(result); + Map sdClaims = result.get("sdClaims"); + assertFalse(sdClaims.containsKey("_sd")); + assertFalse(sdClaims.containsKey("...")); + } + } + + @Test + void extractAllPropertiesFromSdJwtWithNestedMapContainingSdDigestsResolvesNestedPaths() { + try (MockedStatic mockedSdJwt = mockStatic(SDJWT.class); + MockedStatic mockedJwtUtils = mockStatic(JwtUtils.class)) { + + SDJWT mockSdJwt = mock(SDJWT.class); + mockedSdJwt.when(() -> SDJWT.parse(sampleSdJwtString)).thenReturn(mockSdJwt); + when(mockSdJwt.getCredentialJwt()).thenReturn(sampleJwtString); + + Disclosure disclosure = mock(Disclosure.class); + when(disclosure.digest()).thenReturn("nested_digest"); + when(disclosure.getDisclosure()).thenReturn("b64nested"); + when(disclosure.getClaimName()).thenReturn("city"); + when(disclosure.getClaimValue()).thenReturn("Berlin"); + when(mockSdJwt.getDisclosures()).thenReturn(Arrays.asList(disclosure)); + + Map addressMap = new LinkedHashMap<>(); + addressMap.put("_sd", Arrays.asList("nested_digest")); + addressMap.put("country", "Germany"); + + Map payload = new LinkedHashMap<>(); + payload.put("address", addressMap); + mockedJwtUtils.when(() -> JwtUtils.parseJwtPayload(sampleJwtString)).thenReturn(payload); + + Map> result = vcSdJwtCredentialFormatHandler.extractAllPropertiesFromSdJwt(sampleSdJwtString); + + assertNotNull(result); + Map sdClaims = result.get("sdClaims"); + assertTrue(sdClaims.containsKey("address.city")); + } + } + + @Test + void extractAllPropertiesFromSdJwtWithArrayDisclosureResolvesArrayItems() { + try (MockedStatic mockedSdJwt = mockStatic(SDJWT.class); + MockedStatic mockedJwtUtils = mockStatic(JwtUtils.class)) { + + SDJWT mockSdJwt = mock(SDJWT.class); + mockedSdJwt.when(() -> SDJWT.parse(sampleSdJwtString)).thenReturn(mockSdJwt); + when(mockSdJwt.getCredentialJwt()).thenReturn(sampleJwtString); + + Disclosure disclosure = mock(Disclosure.class); + when(disclosure.digest()).thenReturn("arr_digest"); + when(disclosure.getDisclosure()).thenReturn("b64arr"); + when(disclosure.getClaimValue()).thenReturn("disclosed_item"); + when(mockSdJwt.getDisclosures()).thenReturn(Arrays.asList(disclosure)); + + // Array with a disclosure marker {"...": "arr_digest"} and a regular item + Map disclosureMarker = new LinkedHashMap<>(); + disclosureMarker.put("...", "arr_digest"); + + List arrayWithDisclosure = new ArrayList<>(); + arrayWithDisclosure.add(disclosureMarker); + arrayWithDisclosure.add("regular_item"); + + Map payload = new LinkedHashMap<>(); + payload.put("nationalities", arrayWithDisclosure); + mockedJwtUtils.when(() -> JwtUtils.parseJwtPayload(sampleJwtString)).thenReturn(payload); + + Map> result = vcSdJwtCredentialFormatHandler.extractAllPropertiesFromSdJwt(sampleSdJwtString); + + assertNotNull(result); + Map sdClaims = result.get("sdClaims"); + assertTrue(sdClaims.containsKey("nationalities[0]")); + } + } + + @Test + void extractAllPropertiesFromSdJwtWithArrayDisclosureNotFoundSkipsMarker() { + try (MockedStatic mockedSdJwt = mockStatic(SDJWT.class); + MockedStatic mockedJwtUtils = mockStatic(JwtUtils.class)) { + + SDJWT mockSdJwt = mock(SDJWT.class); + mockedSdJwt.when(() -> SDJWT.parse(sampleSdJwtString)).thenReturn(mockSdJwt); + when(mockSdJwt.getCredentialJwt()).thenReturn(sampleJwtString); + when(mockSdJwt.getDisclosures()).thenReturn(Collections.emptyList()); + + Map disclosureMarker = new LinkedHashMap<>(); + disclosureMarker.put("...", "unknown_digest"); + + List arrayWithDisclosure = new ArrayList<>(); + arrayWithDisclosure.add(disclosureMarker); + + Map payload = new LinkedHashMap<>(); + payload.put("items", arrayWithDisclosure); + mockedJwtUtils.when(() -> JwtUtils.parseJwtPayload(sampleJwtString)).thenReturn(payload); + + Map> result = vcSdJwtCredentialFormatHandler.extractAllPropertiesFromSdJwt(sampleSdJwtString); + + assertNotNull(result); + assertTrue(result.get("sdClaims").isEmpty()); + } + } + + @Test + void extractAllPropertiesFromSdJwtWithArrayContainingRegularMapRecursesIntoMap() { + try (MockedStatic mockedSdJwt = mockStatic(SDJWT.class); + MockedStatic mockedJwtUtils = mockStatic(JwtUtils.class)) { + + SDJWT mockSdJwt = mock(SDJWT.class); + mockedSdJwt.when(() -> SDJWT.parse(sampleSdJwtString)).thenReturn(mockSdJwt); + when(mockSdJwt.getCredentialJwt()).thenReturn(sampleJwtString); + + Disclosure disclosure = mock(Disclosure.class); + when(disclosure.digest()).thenReturn("inner_digest"); + when(disclosure.getDisclosure()).thenReturn("b64inner"); + when(disclosure.getClaimName()).thenReturn("secret"); + when(disclosure.getClaimValue()).thenReturn("value"); + when(mockSdJwt.getDisclosures()).thenReturn(Arrays.asList(disclosure)); + + // Regular map (not a disclosure marker) inside a list, containing _sd + Map innerMap = new LinkedHashMap<>(); + innerMap.put("_sd", Arrays.asList("inner_digest")); + innerMap.put("visible", "yes"); + + List listValue = new ArrayList<>(); + listValue.add(innerMap); + + Map payload = new LinkedHashMap<>(); + payload.put("entries", listValue); + mockedJwtUtils.when(() -> JwtUtils.parseJwtPayload(sampleJwtString)).thenReturn(payload); + + Map> result = vcSdJwtCredentialFormatHandler.extractAllPropertiesFromSdJwt(sampleSdJwtString); + + assertNotNull(result); + Map sdClaims = result.get("sdClaims"); + assertTrue(sdClaims.containsKey("entries[0].secret")); + } + } + + @Test + void extractAllPropertiesFromSdJwtWithEmptyPayloadReturnsSdClaimsEmpty() { + try (MockedStatic mockedSdJwt = mockStatic(SDJWT.class); + MockedStatic mockedJwtUtils = mockStatic(JwtUtils.class)) { + + SDJWT mockSdJwt = mock(SDJWT.class); + mockedSdJwt.when(() -> SDJWT.parse(sampleSdJwtString)).thenReturn(mockSdJwt); + when(mockSdJwt.getCredentialJwt()).thenReturn(sampleJwtString); + when(mockSdJwt.getDisclosures()).thenReturn(null); + + mockedJwtUtils.when(() -> JwtUtils.parseJwtPayload(sampleJwtString)) + .thenReturn(new HashMap<>()); + + Map> result = vcSdJwtCredentialFormatHandler.extractAllPropertiesFromSdJwt(sampleSdJwtString); + + assertNotNull(result); + assertTrue(result.get("sdClaims").isEmpty()); + } + } + + @Test + void extractAllPropertiesFromSdJwtWhenDisclosureClaimNameNullSkipsDisclosure() { + try (MockedStatic mockedSdJwt = mockStatic(SDJWT.class); + MockedStatic mockedJwtUtils = mockStatic(JwtUtils.class)) { + + SDJWT mockSdJwt = mock(SDJWT.class); + mockedSdJwt.when(() -> SDJWT.parse(sampleSdJwtString)).thenReturn(mockSdJwt); + when(mockSdJwt.getCredentialJwt()).thenReturn(sampleJwtString); + + Disclosure disclosure = mock(Disclosure.class); + when(disclosure.digest()).thenReturn("digest_null_name"); + when(disclosure.getDisclosure()).thenReturn("b64null"); + when(disclosure.getClaimName()).thenReturn(null); + when(mockSdJwt.getDisclosures()).thenReturn(Arrays.asList(disclosure)); + + Map payload = new LinkedHashMap<>(); + payload.put("_sd", Arrays.asList("digest_null_name")); + mockedJwtUtils.when(() -> JwtUtils.parseJwtPayload(sampleJwtString)).thenReturn(payload); + + Map> result = vcSdJwtCredentialFormatHandler.extractAllPropertiesFromSdJwt(sampleSdJwtString); + + assertNotNull(result); + assertTrue(result.get("sdClaims").isEmpty()); + } + } + + @Test + void extractAllPropertiesFromSdJwtWithFiveLevelsOfNestedDisclosuresResolvesAllLevels() { + try (MockedStatic mockedSdJwt = mockStatic(SDJWT.class); + MockedStatic mockedJwtUtils = mockStatic(JwtUtils.class)) { + + SDJWT mockSdJwt = mock(SDJWT.class); + mockedSdJwt.when(() -> SDJWT.parse(sampleSdJwtString)).thenReturn(mockSdJwt); + when(mockSdJwt.getCredentialJwt()).thenReturn(sampleJwtString); + + Map level5Value = new LinkedHashMap<>(); + level5Value.put("deep_key", "deep_value"); + + Disclosure d5 = mock(Disclosure.class); + when(d5.digest()).thenReturn("d5"); + when(d5.getDisclosure()).thenReturn("b64d5"); + when(d5.getClaimName()).thenReturn("l5"); + when(d5.getClaimValue()).thenReturn(level5Value); + + Map level4Value = new LinkedHashMap<>(); + level4Value.put("_sd", Arrays.asList("d5")); + + Disclosure d4 = mock(Disclosure.class); + when(d4.digest()).thenReturn("d4"); + when(d4.getDisclosure()).thenReturn("b64d4"); + when(d4.getClaimName()).thenReturn("l4"); + when(d4.getClaimValue()).thenReturn(level4Value); + + Map level3Value = new LinkedHashMap<>(); + level3Value.put("_sd", Arrays.asList("d4")); + + Disclosure d3 = mock(Disclosure.class); + when(d3.digest()).thenReturn("d3"); + when(d3.getDisclosure()).thenReturn("b64d3"); + when(d3.getClaimName()).thenReturn("l3"); + when(d3.getClaimValue()).thenReturn(level3Value); + + Map level2Value = new LinkedHashMap<>(); + level2Value.put("_sd", Arrays.asList("d3")); + + Disclosure d2 = mock(Disclosure.class); + when(d2.digest()).thenReturn("d2"); + when(d2.getDisclosure()).thenReturn("b64d2"); + when(d2.getClaimName()).thenReturn("l2"); + when(d2.getClaimValue()).thenReturn(level2Value); + + Map level1Value = new LinkedHashMap<>(); + level1Value.put("_sd", Arrays.asList("d2")); + + Disclosure d1 = mock(Disclosure.class); + when(d1.digest()).thenReturn("d1"); + when(d1.getDisclosure()).thenReturn("b64d1"); + when(d1.getClaimName()).thenReturn("l1"); + when(d1.getClaimValue()).thenReturn(level1Value); + + when(mockSdJwt.getDisclosures()).thenReturn(Arrays.asList(d1, d2, d3, d4, d5)); + + Map payload = new LinkedHashMap<>(); + payload.put("_sd", Arrays.asList("d1")); + mockedJwtUtils.when(() -> JwtUtils.parseJwtPayload(sampleJwtString)).thenReturn(payload); + + Map> result = vcSdJwtCredentialFormatHandler.extractAllPropertiesFromSdJwt(sampleSdJwtString); + + assertNotNull(result); + Map sdClaims = result.get("sdClaims"); + assertTrue(sdClaims.containsKey("l1")); + assertTrue(sdClaims.containsKey("l1.l2")); + assertTrue(sdClaims.containsKey("l1.l2.l3")); + assertTrue(sdClaims.containsKey("l1.l2.l3.l4")); + assertTrue(sdClaims.containsKey("l1.l2.l3.l4.l5")); + assertEquals(5, sdClaims.size()); + } + } + + // ============================================================ + // Tests for extractSdClaims uncovered branches (via extractClaimsFromSdJwt) + // ============================================================ + + @Test + void extractClaimsFromSdJwtWhenDisclosuresNullReturnsPublicClaimsOnly() { + try (MockedStatic mockedSdJwt = mockStatic(SDJWT.class); + MockedStatic mockedJwtUtils = mockStatic(JwtUtils.class)) { + + SDJWT mockSdJwt = mock(SDJWT.class); + mockedSdJwt.when(() -> SDJWT.parse(sampleSdJwtString)).thenReturn(mockSdJwt); + when(mockSdJwt.getCredentialJwt()).thenReturn(sampleJwtString); + when(mockSdJwt.getDisclosures()).thenReturn(null); + + Map jwtPayload = new LinkedHashMap<>(); + jwtPayload.put("name", "John"); + mockedJwtUtils.when(() -> JwtUtils.parseJwtPayload(sampleJwtString)).thenReturn(jwtPayload); + + Map result = vcSdJwtCredentialFormatHandler.extractClaimsFromSdJwt(sampleSdJwtString); + + assertNotNull(result); + assertEquals("John", result.get("name")); + } + } + + @Test + void extractClaimsFromSdJwtWhenDisclosureClaimNameNullSkipsDisclosure() { + try (MockedStatic mockedSdJwt = mockStatic(SDJWT.class); + MockedStatic mockedJwtUtils = mockStatic(JwtUtils.class)) { + + SDJWT mockSdJwt = mock(SDJWT.class); + mockedSdJwt.when(() -> SDJWT.parse(sampleSdJwtString)).thenReturn(mockSdJwt); + when(mockSdJwt.getCredentialJwt()).thenReturn(sampleJwtString); + + Disclosure disclosure = mock(Disclosure.class); + when(disclosure.getClaimName()).thenReturn(null); + when(disclosure.getClaimValue()).thenReturn("someValue"); + when(mockSdJwt.getDisclosures()).thenReturn(Arrays.asList(disclosure)); + + Map jwtPayload = new LinkedHashMap<>(); + mockedJwtUtils.when(() -> JwtUtils.parseJwtPayload(sampleJwtString)).thenReturn(jwtPayload); + + Map result = vcSdJwtCredentialFormatHandler.extractClaimsFromSdJwt(sampleSdJwtString); + + assertNotNull(result); + assertFalse(result.containsValue("someValue")); + } + } + + @Test + void extractClaimsFromSdJwtWhenDisclosureClaimValueNullSkipsDisclosure() { + try (MockedStatic mockedSdJwt = mockStatic(SDJWT.class); + MockedStatic mockedJwtUtils = mockStatic(JwtUtils.class)) { + + SDJWT mockSdJwt = mock(SDJWT.class); + mockedSdJwt.when(() -> SDJWT.parse(sampleSdJwtString)).thenReturn(mockSdJwt); + when(mockSdJwt.getCredentialJwt()).thenReturn(sampleJwtString); + + Disclosure disclosure = mock(Disclosure.class); + when(disclosure.getClaimName()).thenReturn("age"); + when(disclosure.getClaimValue()).thenReturn(null); + when(mockSdJwt.getDisclosures()).thenReturn(Arrays.asList(disclosure)); + + Map jwtPayload = new LinkedHashMap<>(); + mockedJwtUtils.when(() -> JwtUtils.parseJwtPayload(sampleJwtString)).thenReturn(jwtPayload); + + Map result = vcSdJwtCredentialFormatHandler.extractClaimsFromSdJwt(sampleSdJwtString); + + assertNotNull(result); + assertFalse(result.containsKey("age")); + } + } + + @Test + void extractClaimsFromSdJwtWhenDisclosureThrowsExceptionSkipsAndContinues() { + try (MockedStatic mockedSdJwt = mockStatic(SDJWT.class); + MockedStatic mockedJwtUtils = mockStatic(JwtUtils.class)) { + + SDJWT mockSdJwt = mock(SDJWT.class); + mockedSdJwt.when(() -> SDJWT.parse(sampleSdJwtString)).thenReturn(mockSdJwt); + when(mockSdJwt.getCredentialJwt()).thenReturn(sampleJwtString); + + Disclosure badDisclosure = mock(Disclosure.class); + when(badDisclosure.getClaimName()).thenThrow(new RuntimeException("decode error")); + + Disclosure goodDisclosure = mock(Disclosure.class); + when(goodDisclosure.getClaimName()).thenReturn("name"); + when(goodDisclosure.getClaimValue()).thenReturn("Alice"); + + when(mockSdJwt.getDisclosures()).thenReturn(Arrays.asList(badDisclosure, goodDisclosure)); + + Map jwtPayload = new LinkedHashMap<>(); + mockedJwtUtils.when(() -> JwtUtils.parseJwtPayload(sampleJwtString)).thenReturn(jwtPayload); + + Map result = vcSdJwtCredentialFormatHandler.extractClaimsFromSdJwt(sampleSdJwtString); + + assertNotNull(result); + assertEquals("Alice", result.get("name")); + } + } + + @Test + void extractClaimsFromSdJwtWhenGenericExceptionReturnsEmptyMap() { + try (MockedStatic mockedSdJwt = mockStatic(SDJWT.class)) { + mockedSdJwt.when(() -> SDJWT.parse("crash-jwt")) + .thenThrow(new RuntimeException("Unexpected crash")); + + Map result = vcSdJwtCredentialFormatHandler.extractClaimsFromSdJwt("crash-jwt"); + + assertNotNull(result); + assertTrue(result.isEmpty()); + } + } + + @Test + void extractClaimsFromSdJwtWhenJwtPayloadNullReturnsEmptyPublicClaims() { + try (MockedStatic mockedSdJwt = mockStatic(SDJWT.class); + MockedStatic mockedJwtUtils = mockStatic(JwtUtils.class)) { + + SDJWT mockSdJwt = mock(SDJWT.class); + mockedSdJwt.when(() -> SDJWT.parse(sampleSdJwtString)).thenReturn(mockSdJwt); + when(mockSdJwt.getCredentialJwt()).thenReturn(sampleJwtString); + when(mockSdJwt.getDisclosures()).thenReturn(Collections.emptyList()); + + mockedJwtUtils.when(() -> JwtUtils.parseJwtPayload(sampleJwtString)).thenReturn(null); + + Map result = vcSdJwtCredentialFormatHandler.extractClaimsFromSdJwt(sampleSdJwtString); + + assertNotNull(result); + assertTrue(result.isEmpty()); + } + } + + // ============================================================ + // Tests for loadDisplayPropertiesFromWellknown uncovered branches + // ============================================================ + + @Test + void loadDisplayPropertiesFromWellknownWhenValueNullInOrderedKeysSkipsField() { + // Arrange - credentialProperties has a key with null value + Map credentialProperties = new HashMap<>(); + credentialProperties.put("name", "John"); + credentialProperties.put("address", null); + + Map claims = new HashMap<>(); + claims.put("name", new HashMap<>()); + claims.put("address", new HashMap<>()); + credentialsSupportedResponse.setClaims(claims); + credentialsSupportedResponse.setOrder(Arrays.asList("name", "address")); + + CredentialDisplayResponseDto nameDto = createCredentialDisplayResponseDto("Name", "en"); + CredentialDisplayResponseDto addressDto = createCredentialDisplayResponseDto("Address", "en"); + when(objectMapper.convertValue(any(), eq(CredentialDisplayResponseDto.class))) + .thenReturn(nameDto, addressDto); + + try (MockedStatic mockedLocaleUtils = mockStatic(LocaleUtils.class)) { + mockedLocaleUtils.when(() -> LocaleUtils.resolveLocaleWithFallback(any(), eq("en"))) + .thenReturn("en"); + mockedLocaleUtils.when(() -> LocaleUtils.matchesLocale(eq("en"), eq("en"))) + .thenReturn(true); + + LinkedHashMap> result = + vcSdJwtCredentialFormatHandler.loadDisplayPropertiesFromWellknown( + credentialProperties, credentialsSupportedResponse, "en"); + + assertNotNull(result); + assertEquals(1, result.size()); + assertTrue(result.containsKey("name")); + assertFalse(result.containsKey("address")); + } + } + + @Test + void loadDisplayPropertiesFromWellknownWhenDisplayNullFallsBackToGeneratedDisplay() { + // Arrange - orderedKeys has a key not in claims config (display not found in localizedDisplayMap) + Map credentialProperties = new HashMap<>(); + credentialProperties.put("name", "John"); + credentialProperties.put("extraField", "extraValue"); + + Map claims = new HashMap<>(); + claims.put("name", new HashMap<>()); + credentialsSupportedResponse.setClaims(claims); + credentialsSupportedResponse.setOrder(Arrays.asList("name", "extraField")); + + try (MockedStatic mockedLocaleUtils = mockStatic(LocaleUtils.class)) { + mockedLocaleUtils.when(() -> LocaleUtils.resolveLocaleWithFallback(any(), eq("en"))) + .thenReturn("en"); + mockedLocaleUtils.when(() -> LocaleUtils.matchesLocale(eq("en"), eq("en"))) + .thenReturn(true); + + LinkedHashMap> result = + vcSdJwtCredentialFormatHandler.loadDisplayPropertiesFromWellknown( + credentialProperties, credentialsSupportedResponse, "en"); + + assertNotNull(result); + assertEquals(2, result.size()); + assertTrue(result.containsKey("extraField")); + + CredentialIssuerDisplayResponse extraDisplay = result.get("extraField").keySet().iterator().next(); + assertEquals("Extra Field", extraDisplay.getName()); + assertEquals("en", extraDisplay.getLocale()); + } + } + // Helper methods private Map createSampleClaims() { Map claims = new HashMap<>(); From 9430b0a349c15416d5df3b2926a408fa65c59206 Mon Sep 17 00:00:00 2001 From: Durgesh Konga Date: Thu, 30 Apr 2026 12:56:54 +0530 Subject: [PATCH 854/860] fix(openid4vci): update get credential for v1 vcresponse (#1091) Signed-off-by: Durgesh Konga --- .../io/mosip/mimoto/dto/mimoto/V1Credential.java | 8 ++++++++ .../mimoto/dto/mimoto/V1VCCredentialResponse.java | 2 +- .../mimoto/service/impl/V1VCDownloadHandler.java | 5 +++-- .../mimoto/service/V1VCDownloadHandlerTest.java | 15 +++++++++++---- 4 files changed, 23 insertions(+), 7 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/dto/mimoto/V1Credential.java diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/V1Credential.java b/src/main/java/io/mosip/mimoto/dto/mimoto/V1Credential.java new file mode 100644 index 000000000..f108c9ef5 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/V1Credential.java @@ -0,0 +1,8 @@ +package io.mosip.mimoto.dto.mimoto; + +import lombok.Data; + +@Data +public class V1Credential { + private Object credential; +} diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/V1VCCredentialResponse.java b/src/main/java/io/mosip/mimoto/dto/mimoto/V1VCCredentialResponse.java index 80f9f3182..a820ecb5d 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/V1VCCredentialResponse.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/V1VCCredentialResponse.java @@ -14,7 +14,7 @@ @Builder public class V1VCCredentialResponse { - private List credentials; + private List credentials; private String error; diff --git a/src/main/java/io/mosip/mimoto/service/impl/V1VCDownloadHandler.java b/src/main/java/io/mosip/mimoto/service/impl/V1VCDownloadHandler.java index 08b4ea261..adb71bd96 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/V1VCDownloadHandler.java +++ b/src/main/java/io/mosip/mimoto/service/impl/V1VCDownloadHandler.java @@ -6,6 +6,7 @@ import io.mosip.mimoto.dto.mimoto.V1VCCredentialRequest; import io.mosip.mimoto.dto.mimoto.V1VCCredentialResponse; import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; +import io.mosip.mimoto.dto.mimoto.V1Credential; import io.mosip.mimoto.exception.CredentialProcessingException; import io.mosip.mimoto.exception.ExternalServiceUnavailableException; import io.mosip.mimoto.exception.InvalidCredentialResourceException; @@ -63,7 +64,7 @@ public VCCredentialResponse downloadCredential(IssuerDTO issuerDTO, String crede String.format(DOWNLOAD_FAILURE_MESSAGE, issuerId, credentialConfigurationId) + " - " + errorDetail); } - List credentials = response.getCredentials(); + List credentials = response.getCredentials(); if (credentials == null || credentials.isEmpty()) { throw new InvalidCredentialResourceException(EMPTY_CREDENTIAL_MESSAGE); } @@ -71,7 +72,7 @@ public VCCredentialResponse downloadCredential(IssuerDTO issuerDTO, String crede String format = credentialIssuerWellKnownResponse.getCredentialConfigurationsSupported().get(credentialConfigurationId).getFormat(); log.debug("V1 VC Credential Response received for issuerId: {}", issuerId); - return new VCCredentialResponse(format, credentials.getFirst()); + return new VCCredentialResponse(format, credentials.getFirst().getCredential()); } private V1VCCredentialRequest buildCredentialRequest(IssuerDTO issuerDTO, String credentialConfigurationId, CredentialIssuerWellKnownResponse wellKnownResponse, String walletId, String base64Key, boolean isLoginFlow) throws CredentialProcessingException { diff --git a/src/test/java/io/mosip/mimoto/service/V1VCDownloadHandlerTest.java b/src/test/java/io/mosip/mimoto/service/V1VCDownloadHandlerTest.java index 4d66e9e55..ccee06b03 100644 --- a/src/test/java/io/mosip/mimoto/service/V1VCDownloadHandlerTest.java +++ b/src/test/java/io/mosip/mimoto/service/V1VCDownloadHandlerTest.java @@ -3,6 +3,7 @@ import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.*; +import io.mosip.mimoto.dto.mimoto.V1Credential; import io.mosip.mimoto.exception.CredentialProcessingException; import io.mosip.mimoto.exception.ExternalServiceUnavailableException; import io.mosip.mimoto.exception.InvalidCredentialResourceException; @@ -80,6 +81,12 @@ private V1VCCredentialRequest buildRequest(String jwtToken) { .build(); } + private V1Credential v1Credential(Object credentialValue) { + V1Credential cred = new V1Credential(); + cred.setCredential(credentialValue); + return cred; + } + @Test void shouldReturnVCCredentialResponseOnSuccessfulDownload() throws Exception { V1VCCredentialRequest request = buildRequest("jwt-token"); @@ -89,7 +96,7 @@ void shouldReturnVCCredentialResponseOnSuccessfulDownload() throws Exception { .thenReturn(request); V1VCCredentialResponse mockResponse = V1VCCredentialResponse.builder() - .credentials(List.of("eyJhbGciOiJFUzI1NiJ9.credential-payload.signature")) + .credentials(List.of(v1Credential("eyJhbGciOiJFUzI1NiJ9.credential-payload.signature"))) .build(); when(restApiClient.postApiWithErrorResponse(eq(CREDENTIAL_ENDPOINT), eq(MediaType.APPLICATION_JSON), @@ -113,7 +120,7 @@ void shouldReturnFirstCredentialWhenResponseContainsMultiple() throws Exception .thenReturn(request); V1VCCredentialResponse mockResponse = V1VCCredentialResponse.builder() - .credentials(List.of("first-credential", "second-credential", "third-credential")) + .credentials(List.of(v1Credential("first-credential"), v1Credential("second-credential"), v1Credential("third-credential"))) .build(); when(restApiClient.postApiWithErrorResponse(eq(CREDENTIAL_ENDPOINT), eq(MediaType.APPLICATION_JSON), @@ -136,7 +143,7 @@ void shouldPassWalletIdAndBase64KeyForLoginFlow() throws Exception { .thenReturn(request); V1VCCredentialResponse mockResponse = V1VCCredentialResponse.builder() - .credentials(List.of("login-credential-data")) + .credentials(List.of(v1Credential("login-credential-data"))) .build(); when(restApiClient.postApiWithErrorResponse(eq(CREDENTIAL_ENDPOINT), eq(MediaType.APPLICATION_JSON), @@ -179,7 +186,7 @@ void shouldRetryWithFreshNonceWhenFirstAttemptReturnsInvalidNonce() throws Excep .build(); V1VCCredentialResponse successResponse = V1VCCredentialResponse.builder() - .credentials(List.of("retry-credential-data")) + .credentials(List.of(v1Credential("retry-credential-data"))) .build(); when(restApiClient.postApiWithErrorResponse(eq(CREDENTIAL_ENDPOINT), eq(MediaType.APPLICATION_JSON), From 23ed6b4365b4c00d9c256442e40b2741d7f18dd4 Mon Sep 17 00:00:00 2001 From: Jack Date: Thu, 30 Apr 2026 14:49:54 +0530 Subject: [PATCH 855/860] docs(vci): add design document for OpenID4VCI 1.0 specification support in Inji web wallet (#1075) * docs(vci): add design document for OpenID4VCI 1.0 specification support in Inji web wallet Signed-off-by: jackjain * docs(vci): fix lint error on markdown, add placeholders instead of actual credential data, fix interface texts Signed-off-by: jackjain * docs(vci): update v1 VCDownloadHandler class Signed-off-by: jackjain * docs(vci): update the design to process only first credential received from the issuer since wallet supports only single proof Signed-off-by: jackjain * docs(vci): fix grammar issues Signed-off-by: Durgesh Konga --------- Signed-off-by: jackjain Signed-off-by: Durgesh Konga Co-authored-by: Durgesh Konga --- docs/VCIssuanceV1SpecificationSupport.md | 192 +++++++++++++++++++++++ 1 file changed, 192 insertions(+) create mode 100644 docs/VCIssuanceV1SpecificationSupport.md diff --git a/docs/VCIssuanceV1SpecificationSupport.md b/docs/VCIssuanceV1SpecificationSupport.md new file mode 100644 index 000000000..c4aae5ca7 --- /dev/null +++ b/docs/VCIssuanceV1SpecificationSupport.md @@ -0,0 +1,192 @@ +# Support for OpenID4VCI Issuance spec 1.0 in INJI Web wallet + +This document outlines the changes expected in the INJI Web wallet to support the VCI Issuance spec 1.0, which is the latest version of the OpenID4VCI specification. The document also highlights the changes in the specification compared to draft 13 and the expected changes in mimoto, which is the reference implementation for OpenID4VCI specification. + +## Key Changes in OpenID4VCI specification 1.0 which impacts wallet implementation: +- `nonce_endpoint` - optional param is introduced in the well-known response. If the field is present in response, wallet has to fetch the credential from the nonce_endpoint during the proof creation and embed it in the proof. If the field is missing, c_nonce claim should not be added in proof JWT sent in the credential request. +- `credential_configurations_supported` -> `display` object is now moved to `credential_configurations_supported` -> `credential_metadata` -> `display` +- Credential request is now format-agnostic, with the following structure : + + ```json + { + "credential_configuration_id": "org.iso.18013.5.1.mDL", + "proofs": { + "jwt": [ + "" + ] + } + } + ``` +- Credential response structure is changed to support multiple credentials in response, with the following structure : + + ```json + { + "credentials": [ + { + "credential": "" + } + ] + } + ``` + +Guidelines for implementation in INJI Web wallet: +- We will be supporting both draft 13 and v1.0 specification +- The existing credential download code will be refactored to be made extensible to support future versions of the specification as well. +- The flow will be designed in such a way that the version detection logic will be implemented at the beginning of the flow and based on the version detected, the respective flow will be triggered. +- One assumption : since INJI Web currently supports sending only single proof object in the credential request, we expect only one credential will be returned in the credential response, even though the structure supports multiple credentials. + +### Changes expected in mimoto : + +1. Issuer configuration fetch logic change, since we want to support both draft 13 and v1.0 VCI specification + - Need to have version detection logic, should be checked in the following sequence in received well-known response : + - If `nonce_endpoint field` exists in the response and is not empty, version will be v1 + - if `credential_configurations_supported` -> `credential_metadata` object exists, version will be v1 + - if `credential_configurations_supported` -> `display`, version will be draft13 + - Default to v1 + - Well-known parser factory has to be introduced, to support parsing of both draft 13 and v1.0 specification + - The well-known response will be parsed using their separate DTOs and validated. + - The final values will be mapped to a common DTO, so that the rest of the flow remains unaffected by the changes in the specification. This will also help in supporting future versions of the specification with minimal changes in the code. +2. VC Download handler to be introduced for each version of the specification, to handle the respective credential request and response structure. The handler will be responsible for : + - Extracting nonce from the nonce_endpoint in case of v1.0 specification and embedding it in the proof JWT sent in credential request. The nonce for draft 13 will be extracted from token response and embedded in the proof JWT as c_nonce. + - Sending the credential request to the issuer + - Handling the credential response based on the respective specification + - Returning the credential to the caller in a standard format(same as draft 13 specification), so that the rest of the flow remains unaffected by the changes in the specification. +3. In both wallet and guest credential download flows, only the first credential from the credentials array will be extracted and used for subsequent operations. + +### Class structure : + +- Factory class to be introduced for version detection and parsing of well-known response based on the version detected. The factory class will be called in the IssuerConfigUtil, which is responsible for fetching and parsing the issuer configuration. +- The IssuerConfigUtil will return a common DTO, which will be used in the rest of the flow. This will help in minimizing the changes in the code and also support future versions of the specification with minimal changes. + +```text + ┌──────────────────────────────────────────────────────────────┐ + │ IssuersServiceImpl │ + │ (High-level orchestration) │ + └─────────────────────────┬────────────────────────────────────┘ + │ + ▼ + ┌──────────────────────────────────────────────────────────────┐ + │ IssuerConfigUtil │ + │ ┌───────────────────────────────────────────────────┐ │ + │ │ getIssuerWellknown(url) │ │ + │ │ ├─> VCSpecVersionDetector (defaults to V1) │ │ + │ │ ├─> WellknownParserFactory │ │ + │ │ └─> Return CredentialIssuerWellKnownResponse │ │ + │ └───────────────────────────────────────────────────┘ │ + └─────────────────────────┬────────────────────────────────────┘ + │ + ┌───────────┴───────────┐ + ▼ ▼ + ┌─────────────────┐ ┌──────────────────┐ + │Draft13Wellknown │ │ WellknownParser │ + │ Parser │ │ (V1 - default) │ + └─────────────────┘ └──────────────────┘ +``` + +Interface for well-known response parser : + +```java +public interface WellknownResponseParser { + + /** + * Returns the specification version supported by this parser + */ + VCSpecificationVersion getSupportedVersion(); + + /** + * Parses the wellknown response JSON + */ + CredentialIssuerWellKnownResponse parse(String jsonResponse) throws IOException; + + /** + * Validates the parsed wellknown response + */ + void validate(CredentialIssuerWellKnownResponse response, Validator validator) + throws InvalidWellknownResponseException; +} +``` + + +- VC Download handler class structure : + +```text + + ┌──────────────────────────────────────────────────────────────┐ + │ VCDownloadHandlerFactory │ + │ getHandler(version) → returns handler │ + └─────────────────────────┬────────────────────────────────────┘ + │ + ┌───────────┴───────────┐ + ▼ ▼ + ┌──────────────────────┐ ┌──────────────────────┐ + │ Draft13VC │ │ V1VCDownloadHandler │ + │ DownloadHandler │ │ (V1 - default) │ + │ │ │ │ + |downloadCredential() │ │ downloadCredential() │ + │ • Get cNonce │ │ • Get cNonce │ + │ (from token response)│ │ (from nonce endpoint)│ + │ • Build proof │ │ • Build proof │ + │ • Build request │ │ • Build request │ + │ • POST endpoint │ │ • POST endpoint │ + │ • Parse response │ │ • Parse response │ + └────────┬─────────────┘ └──────────┬───────────┘ + │ │ + └────────────┬────────────────┘ + ▼ + ┌──────────────────────┐ + │ Common Response DTO │ + │ VCCredentialResponse │ + │ - Same as draft 13 │ + │ response with single│ + │ credential │ + │ (normalized array) │ + └──────────────────────┘ +``` + +Interface : + +```java + +public interface VCDownloadHandler { + + /** + * Returns the specification version supported by this handler + */ + VCSpecificationVersion getSupportedVersion(); + + /** + * Downloads credential from issuer and returns normalized response + * + * Responsibilities: + * 1. Retrieve nonce only when required by spec version/issuer metadata + * 2. Build proof JWT and include c_nonce only when nonce is available/required + * 3. Construct version-specific credential request + * 4. POST request to credential endpoint + * 5. Parse response and normalize to common DTO + * + * @param tokenResponse Token response from IdP + * @param credentialConfigurationId Credential configuration ID + * @param credentialConfig Credential configuration from wellknown + * @param wellKnownResponse Issuer wellknown response + * @param issuerDTO Issuer details + * @param walletId Wallet ID for proof binding + * @param base64Key Wallet key for proof signing + * @param isLoginFlow indicates if the user is logged in or not + * @return VCCredentialResponse with single credential in it + */ + VCCredentialResponse downloadCredential( + TokenResponseDTO tokenResponse, + String credentialConfigurationId, + CredentialsSupportedResponse credentialConfig, + CredentialIssuerWellKnownResponse wellKnownResponse, + IssuerDTO issuerDTO, + String walletId, + String base64Key, + boolean isLoginFlow + ) throws Exception; +} +``` + + +### References +[OpenID4VCI 1.0 specification](https://openid.net/specs/openid-4-verifiable-credential-issuance-1_0.html) \ No newline at end of file From 083f2e76482e833be39601e1d514aaf1aca97847 Mon Sep 17 00:00:00 2001 From: Abhi Date: Mon, 25 May 2026 01:27:28 +0530 Subject: [PATCH 856/860] [MOSIP-37808] Updated DB attributes for mimoto Signed-off-by: Abhi --- db_scripts/init_values.yaml | 7 ++++++- db_scripts/inji_mimoto/db.sql | 6 +++--- db_scripts/inji_mimoto/ddl.sql | 2 +- db_scripts/inji_mimoto/deploy.properties | 1 + db_scripts/inji_mimoto/deploy.sh | 14 +++++++------- db_scripts/inji_mimoto/dml.sql | 2 +- db_scripts/inji_mimoto/drop_db.sql | 2 +- db_scripts/inji_mimoto/drop_role.sql | 2 +- db_scripts/inji_mimoto/grants.sql | 12 ++++++------ db_scripts/inji_mimoto/role_dbuser.sql | 2 +- 10 files changed, 28 insertions(+), 22 deletions(-) diff --git a/db_scripts/init_values.yaml b/db_scripts/init_values.yaml index 0bcb34b17..8b65c8507 100644 --- a/db_scripts/init_values.yaml +++ b/db_scripts/init_values.yaml @@ -4,7 +4,11 @@ dbUserPasswords: databases: inji_mimoto: enabled: true - host: "postgres-postgresql.postgres" + scriptsDir: inji_mimoto # fixed - must match db_scripts/ folder in repo + dbName: inji_mimoto # customize e.g. inji_mimoto02 + dbUser: injimimotouser # customize e.g. injimimotouser02 + defaultDb: postgres + host: "postgres-postgresql" port: 5432 su: user: postgres @@ -12,4 +16,5 @@ databases: name: postgres-postgresql key: postgres-password dml: 1 + repoUrl: https://github.com/mosip/mimoto.git branch: develop \ No newline at end of file diff --git a/db_scripts/inji_mimoto/db.sql b/db_scripts/inji_mimoto/db.sql index 477b47a16..0e00567d7 100644 --- a/db_scripts/inji_mimoto/db.sql +++ b/db_scripts/inji_mimoto/db.sql @@ -1,4 +1,4 @@ -CREATE DATABASE inji_mimoto +CREATE DATABASE :mosipdbname ENCODING = 'UTF8' LC_COLLATE = 'en_US.UTF-8' LC_CTYPE = 'en_US.UTF-8' @@ -8,10 +8,10 @@ CREATE DATABASE inji_mimoto COMMENT ON DATABASE mosip_idp IS 'mimoto related data is stored in this database'; -\c inji_mimoto postgres +\c :mosipdbname postgres DROP SCHEMA IF EXISTS mimoto CASCADE; CREATE SCHEMA mimoto; ALTER SCHEMA mimoto OWNER TO postgres; -ALTER DATABASE inji_mimoto SET search_path TO mimoto,pg_catalog,public; +ALTER DATABASE :mosipdbname SET search_path TO mimoto,pg_catalog,public; diff --git a/db_scripts/inji_mimoto/ddl.sql b/db_scripts/inji_mimoto/ddl.sql index cf632aad3..30e875775 100644 --- a/db_scripts/inji_mimoto/ddl.sql +++ b/db_scripts/inji_mimoto/ddl.sql @@ -1,4 +1,4 @@ -\c inji_mimoto +\c :mosipdbname \ir ddl/mimoto-key_alias.sql \ir ddl/mimoto-key_policy_def.sql diff --git a/db_scripts/inji_mimoto/deploy.properties b/db_scripts/inji_mimoto/deploy.properties index 1c60735db..ba7872363 100644 --- a/db_scripts/inji_mimoto/deploy.properties +++ b/db_scripts/inji_mimoto/deploy.properties @@ -3,4 +3,5 @@ DB_PORT=5432 SU_USER=postgres DEFAULT_DB_NAME=postgres MOSIP_DB_NAME=inji_mimoto +DB_UNAME=mimotouser DML_FLAG=1 \ No newline at end of file diff --git a/db_scripts/inji_mimoto/deploy.sh b/db_scripts/inji_mimoto/deploy.sh index e15eecbef..4965c903b 100755 --- a/db_scripts/inji_mimoto/deploy.sh +++ b/db_scripts/inji_mimoto/deploy.sh @@ -21,23 +21,23 @@ CONN=$(PGPASSWORD=$SU_USER_PWD psql -v ON_ERROR_STOP=1 --username=$SU_USER --hos echo "Terminated connections" ## Drop db and role -PGPASSWORD=$SU_USER_PWD psql -v ON_ERROR_STOP=1 --username=$SU_USER --host=$DB_SERVERIP --port=$DB_PORT --dbname=$DEFAULT_DB_NAME -f drop_db.sql -PGPASSWORD=$SU_USER_PWD psql -v ON_ERROR_STOP=1 --username=$SU_USER --host=$DB_SERVERIP --port=$DB_PORT --dbname=$DEFAULT_DB_NAME -f drop_role.sql +PGPASSWORD=$SU_USER_PWD psql -v ON_ERROR_STOP=1 --username=$SU_USER --host=$DB_SERVERIP --port=$DB_PORT --dbname=$DEFAULT_DB_NAME -f drop_db.sql -v mosipdbname=$MOSIP_DB_NAME +PGPASSWORD=$SU_USER_PWD psql -v ON_ERROR_STOP=1 --username=$SU_USER --host=$DB_SERVERIP --port=$DB_PORT --dbname=$DEFAULT_DB_NAME -f drop_role.sql -v dbuname=$DB_UNAME ## Create users echo `date "+%m/%d/%Y %H:%M:%S"` ": Creating database users" | tee -PGPASSWORD=$SU_USER_PWD psql -v ON_ERROR_STOP=1 --username=$SU_USER --host=$DB_SERVERIP --port=$DB_PORT --dbname=$DEFAULT_DB_NAME -f role_dbuser.sql -v dbuserpwd=\'$DBUSER_PWD\' +PGPASSWORD=$SU_USER_PWD psql -v ON_ERROR_STOP=1 --username=$SU_USER --host=$DB_SERVERIP --port=$DB_PORT --dbname=$DEFAULT_DB_NAME -f role_dbuser.sql -v dbuserpwd=\'$DBUSER_PWD\' -v dbuname=$DB_UNAME ## Create DB -PGPASSWORD=$SU_USER_PWD psql -v ON_ERROR_STOP=1 --username=$SU_USER --host=$DB_SERVERIP --port=$DB_PORT --dbname=$DEFAULT_DB_NAME -f db.sql -PGPASSWORD=$SU_USER_PWD psql -v ON_ERROR_STOP=1 --username=$SU_USER --host=$DB_SERVERIP --port=$DB_PORT --dbname=$DEFAULT_DB_NAME -f ddl.sql +PGPASSWORD=$SU_USER_PWD psql -v ON_ERROR_STOP=1 --username=$SU_USER --host=$DB_SERVERIP --port=$DB_PORT --dbname=$DEFAULT_DB_NAME -f db.sql -v mosipdbname=$MOSIP_DB_NAME +PGPASSWORD=$SU_USER_PWD psql -v ON_ERROR_STOP=1 --username=$SU_USER --host=$DB_SERVERIP --port=$DB_PORT --dbname=$DEFAULT_DB_NAME -f ddl.sql -v mosipdbname=$MOSIP_DB_NAME -v dbuname=$DB_UNAME ## Grants -PGPASSWORD=$SU_USER_PWD psql -v ON_ERROR_STOP=1 --username=$SU_USER --host=$DB_SERVERIP --port=$DB_PORT --dbname=$DEFAULT_DB_NAME -f grants.sql +PGPASSWORD=$SU_USER_PWD psql -v ON_ERROR_STOP=1 --username=$SU_USER --host=$DB_SERVERIP --port=$DB_PORT --dbname=$DEFAULT_DB_NAME -f grants.sql -v mosipdbname=$MOSIP_DB_NAME -v dbuname=$DB_UNAME ## Populate tables if [ ${DML_FLAG} == 1 ] then echo `date "+%m/%d/%Y %H:%M:%S"` ": Deploying DML for ${MOSIP_DB_NAME} database" - PGPASSWORD=$SU_USER_PWD psql -v ON_ERROR_STOP=1 --username=$SU_USER --host=$DB_SERVERIP --port=$DB_PORT --dbname=$DEFAULT_DB_NAME -a -b -f dml.sql + PGPASSWORD=$SU_USER_PWD psql -v ON_ERROR_STOP=1 --username=$SU_USER --host=$DB_SERVERIP --port=$DB_PORT --dbname=$DEFAULT_DB_NAME -a -b -f dml.sql -v mosipdbname=$MOSIP_DB_NAME fi \ No newline at end of file diff --git a/db_scripts/inji_mimoto/dml.sql b/db_scripts/inji_mimoto/dml.sql index 77f39b405..36e788cbf 100644 --- a/db_scripts/inji_mimoto/dml.sql +++ b/db_scripts/inji_mimoto/dml.sql @@ -3,7 +3,7 @@ -- file, You can obtain one at https://mozilla.org/MPL/2.0/. -- ------------------------------------------------------------------------------------------------- -\c inji_mimoto +\c :mosipdbname \COPY mimoto.key_policy_def (APP_ID,KEY_VALIDITY_DURATION,PRE_EXPIRE_DAYS,ACCESS_ALLOWED,IS_ACTIVE,CR_BY,CR_DTIMES) FROM './dml/mimoto-key_policy_def.csv' delimiter ',' HEADER csv; diff --git a/db_scripts/inji_mimoto/drop_db.sql b/db_scripts/inji_mimoto/drop_db.sql index 73d434700..cd0228d2b 100644 --- a/db_scripts/inji_mimoto/drop_db.sql +++ b/db_scripts/inji_mimoto/drop_db.sql @@ -3,5 +3,5 @@ -- file, You can obtain one at https://mozilla.org/MPL/2.0/. -- ------------------------------------------------------------------------------------------------- -DROP DATABASE IF EXISTS inji_mimoto; +DROP DATABASE IF EXISTS :mosipdbname; diff --git a/db_scripts/inji_mimoto/drop_role.sql b/db_scripts/inji_mimoto/drop_role.sql index 4b2e8776a..e58ac3cdd 100644 --- a/db_scripts/inji_mimoto/drop_role.sql +++ b/db_scripts/inji_mimoto/drop_role.sql @@ -3,4 +3,4 @@ -- file, You can obtain one at https://mozilla.org/MPL/2.0/. -- ------------------------------------------------------------------------------------------------- -drop role if exists mimotouser; +drop role if exists :dbuname; diff --git a/db_scripts/inji_mimoto/grants.sql b/db_scripts/inji_mimoto/grants.sql index b9d52fa56..290a6a295 100644 --- a/db_scripts/inji_mimoto/grants.sql +++ b/db_scripts/inji_mimoto/grants.sql @@ -3,20 +3,20 @@ -- file, You can obtain one at https://mozilla.org/MPL/2.0/. -- ------------------------------------------------------------------------------------------------- -\c inji_mimoto +\c :mosipdbname GRANT CONNECT - ON DATABASE inji_mimoto - TO mimotouser; + ON DATABASE :mosipdbname + TO :dbuname; GRANT USAGE ON SCHEMA mimoto - TO mimotouser; + TO :dbuname; GRANT SELECT,INSERT,UPDATE,DELETE,TRUNCATE,REFERENCES ON ALL TABLES IN SCHEMA mimoto - TO mimotouser; + TO :dbuname; ALTER DEFAULT PRIVILEGES IN SCHEMA mimoto - GRANT SELECT,INSERT,UPDATE,DELETE,REFERENCES ON TABLES TO mimotouser; + GRANT SELECT,INSERT,UPDATE,DELETE,REFERENCES ON TABLES TO :dbuname; diff --git a/db_scripts/inji_mimoto/role_dbuser.sql b/db_scripts/inji_mimoto/role_dbuser.sql index 6093042c5..40b21d05d 100644 --- a/db_scripts/inji_mimoto/role_dbuser.sql +++ b/db_scripts/inji_mimoto/role_dbuser.sql @@ -3,7 +3,7 @@ -- file, You can obtain one at https://mozilla.org/MPL/2.0/. -- ------------------------------------------------------------------------------------------------- -CREATE ROLE mimotouser WITH +CREATE ROLE :dbuname WITH INHERIT LOGIN PASSWORD :dbuserpwd; From 725f80a9f5afea995f979676a7bff4e48c73bc85 Mon Sep 17 00:00:00 2001 From: KiruthikaJeyashankar Date: Mon, 1 Jun 2026 14:57:28 +0530 Subject: [PATCH 857/860] feat: add spec_version to Verifier (#1093) * feat: add spec_version to Verifier - This field indicates the specification version currently followed by the Verifier. - The default value for this field will be v1 Signed-off-by: KiruthikaJeyashankar * docs: udpate docs for /verifier api Signed-off-by: KiruthikaJeyashankar --------- Signed-off-by: KiruthikaJeyashankar --- .../config/mimoto-trusted-verifiers.json | 3 ++- docs/api-documentation-openapi.json | 15 ++++++++++++++- .../mosip/mimoto/dto/openid/SpecVersion.java | 19 +++++++++++++++++++ .../mosip/mimoto/dto/openid/VerifierDTO.java | 5 +++++ .../resources/mimoto-trusted-verifiers.json | 3 ++- .../controller/VerifiersControllerTest.java | 4 ++++ .../service/PresentationServiceTest.java | 4 +++- .../WalletPresentationServiceTest.java | 4 +++- 8 files changed, 52 insertions(+), 5 deletions(-) create mode 100644 src/main/java/io/mosip/mimoto/dto/openid/SpecVersion.java diff --git a/docker-compose/config/mimoto-trusted-verifiers.json b/docker-compose/config/mimoto-trusted-verifiers.json index b0ae6f4e3..8c0576d90 100644 --- a/docker-compose/config/mimoto-trusted-verifiers.json +++ b/docker-compose/config/mimoto-trusted-verifiers.json @@ -9,7 +9,8 @@ "https://injiverify.collab.mosip.net/v1/verify/vp-submission/vp-direct-post" ], "jwks_uri": "https://injiverify.collab.mosip.net/.well-known/jwks.json", - "allow_unsigned_request": false + "allow_unsigned_request": false, + "spec_version": "draft23" } ] } \ No newline at end of file diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index 2f9b0e08c..1af48e1d6 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -175,6 +175,17 @@ "items": { "type": "string" } + }, + "allow_unsigned_request": { + "type": "boolean", + "description": "Indicates whether the verifier allows unsigned requests or not.", + "default": false + }, + "spec_version": { + "type": "string", + "enum": ["draft23", "v1"], + "description": "OpenID4VP specification version supported by the Verifier.", + "default": "v1" } } } @@ -192,7 +203,9 @@ ], "response_uris": [ "https://injiverify.collab.mosip.net/redirect" - ] + ], + "allow_unsigned_request": false, + "spec_version": "v1" } ] } diff --git a/src/main/java/io/mosip/mimoto/dto/openid/SpecVersion.java b/src/main/java/io/mosip/mimoto/dto/openid/SpecVersion.java new file mode 100644 index 000000000..69982330a --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/openid/SpecVersion.java @@ -0,0 +1,19 @@ +package io.mosip.mimoto.dto.openid; + +import com.fasterxml.jackson.annotation.JsonValue; + +public enum SpecVersion { + V1_0("v1"), + DRAFT_23("draft23"); + + private final String version; + + SpecVersion(String version) { + this.version = version; + } + + @JsonValue + public String getVersion() { + return version; + } +} diff --git a/src/main/java/io/mosip/mimoto/dto/openid/VerifierDTO.java b/src/main/java/io/mosip/mimoto/dto/openid/VerifierDTO.java index f76872114..fab2ad921 100644 --- a/src/main/java/io/mosip/mimoto/dto/openid/VerifierDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/openid/VerifierDTO.java @@ -39,5 +39,10 @@ public class VerifierDTO { @Schema(description = "Flag to indicate if unsigned Authorization Request is allowed") @Default Boolean allowUnsignedRequest = false; + + @JsonProperty("spec_version") + @Schema(description = "OpenID4VP specification version supported by the Verifier") + @Default + SpecVersion specVersion = SpecVersion.V1_0; } diff --git a/src/main/resources/mimoto-trusted-verifiers.json b/src/main/resources/mimoto-trusted-verifiers.json index 95e77c3a4..52118ed73 100644 --- a/src/main/resources/mimoto-trusted-verifiers.json +++ b/src/main/resources/mimoto-trusted-verifiers.json @@ -9,7 +9,8 @@ "https://injiverify.collab.mosip.net/v1/verify/vp-submission/vp-direct-post" ], "jwks_uri": "https://injiverify.collab.mosip.net/.well-known/jwks.json", - "allow_unsigned_request": true + "allow_unsigned_request": true, + "spec_version": "draft23" } ] } diff --git a/src/test/java/io/mosip/mimoto/controller/VerifiersControllerTest.java b/src/test/java/io/mosip/mimoto/controller/VerifiersControllerTest.java index 82bd8cf51..b185e79a5 100644 --- a/src/test/java/io/mosip/mimoto/controller/VerifiersControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/VerifiersControllerTest.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.controller; +import io.mosip.mimoto.dto.openid.SpecVersion; import io.mosip.mimoto.dto.openid.VerifierDTO; import io.mosip.mimoto.dto.openid.VerifiersDTO; import io.mosip.mimoto.exception.ApiNotAccessibleException; @@ -85,6 +86,7 @@ public void shouldIncludeAllProvidedPropertiesInTrustedVerifiers() throws Except .responseUris(Collections.singletonList("https://test-responseUri")) .jwksUri("https://test/.well-known/jwks.json") .allowUnsignedRequest(true) + .specVersion(SpecVersion.DRAFT_23) .build(); VerifiersDTO trustedVerifiers = VerifiersDTO.builder() @@ -97,6 +99,7 @@ public void shouldIncludeAllProvidedPropertiesInTrustedVerifiers() throws Except .andExpect(status().isOk()) .andExpect(jsonPath("$.response.verifiers[0].allow_unsigned_request").value(true)) .andExpect(jsonPath("$.response.verifiers[0].client_id").value("test-clientId")) + .andExpect(jsonPath("$.response.verifiers[0].spec_version").value("draft23")) .andExpect(jsonPath("$.response.verifiers[0].jwks_uri").value("https://test/.well-known/jwks.json")); } @@ -118,6 +121,7 @@ public void shouldReturnDefaultValuesWhenOptionalFieldsAreNotProvided() throws E mockMvc.perform(get("/verifiers").accept(MediaType.APPLICATION_JSON_VALUE)) .andExpect(status().isOk()) .andExpect(jsonPath("$.response.verifiers[0].allow_unsigned_request").value(false)) // allow_unsigned_request is not passed means it should take default value false + .andExpect(jsonPath("$.response.verifiers[0].spec_version").value("v1")) // spec version is not passed means it should take default value v1 .andExpect(jsonPath("$.response.verifiers[0].jwks_uri").doesNotExist()); // jwks_uri is not passed means it should not be present in trusted verifiers } } diff --git a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java index aad2dc2d9..57ee4e0f3 100644 --- a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java @@ -6,6 +6,7 @@ import io.mosip.mimoto.dto.mimoto.VCCredentialProperties; import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; import io.mosip.mimoto.dto.mimoto.VCCredentialResponseProof; +import io.mosip.mimoto.dto.openid.SpecVersion; import io.mosip.mimoto.dto.openid.VerifierDTO; import io.mosip.mimoto.dto.openid.VerifiersDTO; import io.mosip.mimoto.dto.openid.presentation.FieldDTO; @@ -77,7 +78,8 @@ public void setup() throws JsonProcessingException { List.of("redirect-uri"), List.of("https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fvp-response"), null, - false + false, + SpecVersion.V1_0 ); verifiersDTO = new VerifiersDTO(); verifiersDTO.setVerifiers(List.of(verifierDTO)); diff --git a/src/test/java/io/mosip/mimoto/service/WalletPresentationServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletPresentationServiceTest.java index 9d95d112f..c439ff9eb 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletPresentationServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletPresentationServiceTest.java @@ -12,6 +12,7 @@ import io.mosip.mimoto.constant.SigningAlgorithm; import io.mosip.mimoto.dto.*; import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; +import io.mosip.mimoto.dto.openid.SpecVersion; import io.mosip.mimoto.dto.openid.VerifierDTO; import io.mosip.mimoto.dto.openid.VerifiersDTO; import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; @@ -102,7 +103,8 @@ public void setUp() throws Exception { List.of("https://verifier.com/response"), List.of("https://verifier.com/jwks"), null, - false + false, + SpecVersion.V1_0 ); verifiersDTO = new VerifiersDTO(); verifiersDTO.setVerifiers(List.of(verifierDTO)); From 1f96b096c9fddd7df589acb605415985489a772b Mon Sep 17 00:00:00 2001 From: cyber-titan Date: Tue, 16 Jun 2026 16:40:43 +0530 Subject: [PATCH 858/860] feat(openid4vp): present SD-JWT credentials with selective disclosure (#1089) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * injiweb-1855-sd-jwt-ovp add SD-JWT OVP credential presentation with selective disclosure support and fix misleading missingClaims response Signed-off-by: cyber-titan * injiweb-1855-sd-jwt-ovp address CR comments — per-format signers, input mutation, typo fix, and test correctness Signed-off-by: cyber-titan * injiweb-1855-sd-jwt-ovp address CR comments — alg advertisement, containsKey guard, unchecked cast Signed-off-by: cyber-titan * feat(openid4vp): support dc+sd-jwt, per-credential SD-JWT signing, & share no disclosures when selectedSdClaims empty Signed-off-by: cyber-titan * docs(openid4vp): harden presentation rejection request schema in API spec Signed-off-by: cyber-titan * refactor(openid4vp): sign each VP token format with its own signer Signed-off-by: cyber-titan --------- Signed-off-by: cyber-titan --- docs/api-documentation-openapi.json | 416 ++++++++++-------- .../mimoto/constant/CredentialFormat.java | 8 + .../mimoto/constant/SigningAlgorithm.java | 2 +- .../constant/SwaggerLiteralConstants.java | 4 +- .../WalletPresentationsController.java | 1 + .../dto/SubmitPresentationRequestDTO.java | 14 +- .../impl/CredentialMatchingServiceImpl.java | 83 ++-- .../mimoto/service/impl/OpenID4VPService.java | 11 +- .../impl/WalletPresentationServiceImpl.java | 224 ++++++++-- .../util/factory/Ed25519AlgorithmHandler.java | 2 +- .../mimoto/constant/CredentialFormatTest.java | 64 +++ .../CredentialMatchingServiceTest.java | 183 +++++++- .../WalletPresentationServiceTest.java | 339 ++++++++++++++ .../factory/Ed25519AlgorithmHandlerTest.java | 13 + 14 files changed, 1071 insertions(+), 293 deletions(-) create mode 100644 src/test/java/io/mosip/mimoto/constant/CredentialFormatTest.java diff --git a/docs/api-documentation-openapi.json b/docs/api-documentation-openapi.json index 1af48e1d6..957cc9fbe 100644 --- a/docs/api-documentation-openapi.json +++ b/docs/api-documentation-openapi.json @@ -4362,192 +4362,200 @@ } }, "/wallets/{walletId}/presentations/{presentationId}": { - "patch": { - "tags": [ - "Wallet Presentations" - ], - "summary": "Handles user submission or rejection of a presentation", - "description": "This API allows users to accept or reject a presentation request by selecting specific credentials. The API is secured using session-based authentication. For state-changing requests (POST, PUT, DELETE, PATCH), a valid CSRF token must be included in the X-XSRF-TOKEN header. The CSRF token can be obtained from the XSRF-TOKEN cookie set by the server on GET requests. Upon acceptance, the system fetches the selected credentials, constructs and signs a VP token, shares it with the verifier, and stores the presentation record in the database.", - "operationId": "handlePresentationSubmission", - "parameters": [ - { - "name": "walletId", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "description": "The unique identifier of the Wallet." - }, - { - "name": "presentationId", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "description": "The unique identifier of the Presentation." + "patch": { + "tags": [ + "Wallet Presentations" + ], + "summary": "Handles user submission or rejection of a presentation", + "description": "This API allows users to accept or reject a presentation request by selecting specific credentials. For SD-JWT credentials (vc+sd-jwt and dc+sd-jwt), the user may optionally include selectedSdClaims to selectively disclose the chosen claims. Only the explicitly selected disclosures are shared; when omitted (or empty) for an SD-JWT credential, none of its selectively-disclosable claims are shared. The API is secured using session-based authentication. For state-changing requests (POST, PUT, DELETE, PATCH), a valid CSRF token must be included in the X-XSRF-TOKEN header. The CSRF token can be obtained from the XSRF-TOKEN cookie set by the server on GET requests. Upon acceptance, the system fetches the selected credentials, constructs and signs a VP token, shares it with the verifier, and stores the presentation record in the database.", + "operationId": "handlePresentationSubmission", + "parameters": [ + { + "name": "walletId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "The unique identifier of the Wallet." + }, + { + "name": "presentationId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "The unique identifier of the Presentation." + }, + { + "name": "X-XSRF-TOKEN", + "in": "header", + "required": false, + "schema": { + "type": "string" + }, + "description": "CSRF token obtained from the XSRF-TOKEN cookie set by the server on GET requests." + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "oneOf": [ + { "$ref": "#/components/schemas/PresentationSubmissionRequestDTO" }, + { "$ref": "#/components/schemas/PresentationRejectionRequestDTO" } + ] + }, + "examples": { + "Presentation Submission Request": { + "value": { + "selectedCredentials": ["cred-123", "cred-456"] + } + }, + "Presentation Submission Request (SD-JWT with selective disclosure)": { + "value": { + "selectedCredentials": ["cred-123"], + "selectedSdClaims": { + "cred-123": ["name", "dob"] + } + } }, - { - "name": "X-XSRF-TOKEN", - "in": "header", - "required": false, - "schema": { - "type": "string" - }, - "description": "CSRF token obtained from the XSRF-TOKEN cookie set by the server on GET requests." + "Rejection payload": { + "value": { + "errorCode": "access_denied", + "errorMessage": "User denied authorization to share credentials" + } } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "oneOf": [ - { "$ref": "#/components/schemas/PresentationSubmissionRequestDTO" }, - { "$ref": "#/components/schemas/Error" } - ] - }, - "examples": { - "Presentation Submission Request": { - "value": { - "selectedCredentials": ["cred-123", "cred-456"] - } - }, - "Rejection payload": { - "value": { - "errorCode": "access_denied", - "errorMessage": "User denied authorization to share credentials" - } - } - } + } + } + } + }, + "responses": { + "200": { + "description": "Successfully processed the presentation submission.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SubmitPresentationResponseDTO" + }, + "examples": { + "Success response": { + "value": { + "status": "success", + "redirectUri": "https://verifier.example.com/callback?state=af0ifjsldkj", + "message": "Presentation successfully submitted" } - } - }, - "responses": { - "200": { - "description": "Successfully processed the presentation submission.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SubmitPresentationResponseDTO" - }, - "examples": { - "Success response": { - "value": { - "status": "success", - "redirectUri": "https://verifier.example.com/callback?state=af0ifjsldkj", - "message": "Presentation successfully submitted" - } - }, - "Response when successfully rejected": { - "value": { - "status": "success", - "redirectUri": "https://client.example.org/cb#response_code=091535f699ea575c7937fa5f0f454aee", - "message": "Presentation request rejected. An OpenID4VP error response has been sent to the verifier." - } - }, - "Response when an error occurs while submitting a rejection": { - "value": { - "status": "error", - "message": "Failed to submit Verifiable Presentation." - } - } - } - } + }, + "Response when successfully rejected": { + "value": { + "status": "success", + "redirectUri": "https://client.example.org/cb#response_code=091535f699ea575c7937fa5f0f454aee", + "message": "Presentation request rejected. An OpenID4VP error response has been sent to the verifier." } - }, - "400": { - "description": "Invalid request or missing required parameters.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - }, - "examples": { - "Invalid Wallet ID": { - "value": { - "errorCode": "invalid_request", - "errorMessage": "Invalid Wallet ID. Session and request Wallet ID do not match" - } - }, - "Wallet ID not found in session": { - "value": { - "errorCode": "wallet_locked", - "errorMessage": "Wallet is locked" - } - }, - "Credential not found": { - "value": { - "errorCode": "invalid_request", - "errorMessage": "Credential not found: cred-123" - } - }, - "presentationId not found in session": { - "value": { - "errorCode": "invalid_request", - "errorMessage": "presentationId not found in session" - } - } - } - } + }, + "Response when an error occurs while submitting a rejection": { + "value": { + "status": "error", + "message": "Failed to submit Verifiable Presentation." } + } + } + } + } + }, + "400": { + "description": "Invalid request or missing required parameters.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" }, - "401": { - "description": "Unauthorized user performing the presentation submission", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - }, - "examples": { - "User ID is not present in session": { - "value": { - "errorCode": "unauthorized", - "errorMessage": "User ID not found in session" - } - } - } - } + "examples": { + "Invalid Wallet ID": { + "value": { + "errorCode": "invalid_request", + "errorMessage": "Invalid Wallet ID. Session and request Wallet ID do not match" + } + }, + "Wallet ID not found in session": { + "value": { + "errorCode": "wallet_locked", + "errorMessage": "Wallet is locked" } + }, + "Credential not found": { + "value": { + "errorCode": "invalid_request", + "errorMessage": "Credential not found: cred-123" + } + }, + "presentationId not found in session": { + "value": { + "errorCode": "invalid_request", + "errorMessage": "presentationId not found in session" + } + } + } + } + } + }, + "401": { + "description": "Unauthorized user performing the presentation submission", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" }, - "500": { - "description": "Internal server error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - }, - "examples": { - "Failed to process presentation submission": { - "value": { - "errorCode": "wallet_vp_submission_error", - "errorMessage": "Failed to process presentation submission: Error message" - } - }, - "Unexpected Server Error": { - "value": { - "errorCode": "internal_server_error", - "errorMessage": "We are unable to process request now" - } - }, - "Failed to reject verifier": { - "value": { - "errorCode": "error", - "errorMessage": "Unable to process reject verifier request" - } - } - } - } + "examples": { + "User ID is not present in session": { + "value": { + "errorCode": "unauthorized", + "errorMessage": "User ID not found in session" } + } } - }, - "security": [ - { - "SessionAuth": [] + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + }, + "examples": { + "Failed to process presentation submission": { + "value": { + "errorCode": "wallet_vp_submission_error", + "errorMessage": "Failed to process presentation submission: Error message" + } + }, + "Unexpected Server Error": { + "value": { + "errorCode": "internal_server_error", + "errorMessage": "We are unable to process request now" + } + }, + "Failed to reject verifier": { + "value": { + "errorCode": "error", + "errorMessage": "Unable to process reject verifier request" + } + } } - ] - } + } + } + } + }, + "security": [ + { + "SessionAuth": [] + } + ] + } }, "/wallets/{walletId}/presentations/{presentationId}/credentials": { "get": { @@ -5138,20 +5146,54 @@ } }, "PresentationSubmissionRequestDTO": { - "type": "object", - "properties": { - "selectedCredentials": { - "type": "array", - "items": { - "type": "string" - }, - "description": "List of selected credential IDs for presentation", - "example": ["cred-123", "cred-456"] + "type": "object", + "properties": { + "selectedCredentials": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of selected credential IDs for presentation", + "example": ["cred-123", "cred-456"] + }, + "selectedSdClaims": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "string" } + }, + "description": "Optional. Selected SD-JWT claim paths per credential ID for selective disclosure (only for SD-JWT credentials: vc+sd-jwt and dc+sd-jwt). Keyed by credential ID; values are the claim paths to disclose. Only the explicitly selected disclosures are shared; when omitted (or empty) for an SD-JWT credential, none of its selectively-disclosable claims are shared.", + "example": { + "cred-123": ["name", "dob"] + } + } + }, + "required": [ + "selectedCredentials" + ], + "additionalProperties": false + }, + "PresentationRejectionRequestDTO": { + "type": "object", + "properties": { + "errorCode": { + "type": "string", + "description": "Error code for rejecting the verifier", + "example": "access_denied" }, - "required": [ - "selectedCredentials" - ] + "errorMessage": { + "type": "string", + "description": "Error message for rejecting the verifier", + "example": "User denied authorization to share credentials" + } + }, + "required": [ + "errorCode", + "errorMessage" + ], + "additionalProperties": false }, "IssuerConfigurationSuccessResponse": { "type": "object", diff --git a/src/main/java/io/mosip/mimoto/constant/CredentialFormat.java b/src/main/java/io/mosip/mimoto/constant/CredentialFormat.java index 5cbc9d58f..156bbba80 100644 --- a/src/main/java/io/mosip/mimoto/constant/CredentialFormat.java +++ b/src/main/java/io/mosip/mimoto/constant/CredentialFormat.java @@ -23,4 +23,12 @@ public static CredentialFormat fromString(String format) { } throw new IllegalArgumentException("Unknown credential format: " + format); } + + /** + * Returns true if the given format string is an SD-JWT family format (vc+sd-jwt or dc+sd-jwt). + * Both share the same SD-JWT structure, parser, and KB-JWT signing. + */ + public static boolean isSdJwt(String format) { + return VC_SD_JWT.format.equalsIgnoreCase(format) || DC_SD_JWT.format.equalsIgnoreCase(format); + } } diff --git a/src/main/java/io/mosip/mimoto/constant/SigningAlgorithm.java b/src/main/java/io/mosip/mimoto/constant/SigningAlgorithm.java index 68cb3de4c..18b229c3f 100644 --- a/src/main/java/io/mosip/mimoto/constant/SigningAlgorithm.java +++ b/src/main/java/io/mosip/mimoto/constant/SigningAlgorithm.java @@ -29,7 +29,7 @@ public static SigningAlgorithm fromString(String value) { case "RS256" -> RS256; case "ES256" -> ES256; case "ES256K" -> ES256K; - case "ED25519" -> ED25519; + case "ED25519", "EDDSA" -> ED25519; default -> throw new IllegalArgumentException("Unsupported signing algorithm: " + value); }; } diff --git a/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java b/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java index 56c097842..cd3ca106d 100644 --- a/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java +++ b/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java @@ -143,9 +143,11 @@ public class SwaggerLiteralConstants { public static final String WALLET_PRESENTATIONS_GET_MATCHING_CREDENTIALS_500_SERVER_ERROR_VALUE = "{\"errorCode\": \"internal_server_error\", \"errorMessage\": \"We are unable to process request now\"}"; public static final String WALLET_PRESENTATIONS_HANDLE_ACTION_SUMMARY = "Submit presentation or reject verifier"; - public static final String WALLET_PRESENTATIONS_HANDLE_ACTION_DESCRIPTION = "This API handles both presentation submission and verifier rejection based on the request content. For submission: include selectedCredentials array. For rejection: include errorCode and errorMessage fields."; + public static final String WALLET_PRESENTATIONS_HANDLE_ACTION_DESCRIPTION = "This API handles both presentation submission and verifier rejection based on the request content. For submission: include selectedCredentials array, and optionally selectedSdClaims to selectively disclose the chosen claims for SD-JWT credentials (vc+sd-jwt and dc+sd-jwt). Only the explicitly selected SD-JWT disclosures are shared; when selectedSdClaims is omitted (or empty) for an SD-JWT credential, none of its selectively-disclosable claims are shared. For rejection: include errorCode and errorMessage fields."; public static final String WALLET_PRESENTATIONS_HANDLE_ACTION_REQ_SUBMIT_EXAMPLE_NAME = "Submit Presentation"; public static final String WALLET_PRESENTATIONS_HANDLE_ACTION_REQ_SUBMIT_EXAMPLE_VALUE = "{ \"selectedCredentials\": [\"cred-123\", \"cred-456\"] }"; + public static final String WALLET_PRESENTATIONS_HANDLE_ACTION_REQ_SUBMIT_SDJWT_EXAMPLE_NAME = "Submit Presentation (SD-JWT with selective disclosure)"; + public static final String WALLET_PRESENTATIONS_HANDLE_ACTION_REQ_SUBMIT_SDJWT_EXAMPLE_VALUE = "{ \"selectedCredentials\": [\"cred-123\"], \"selectedSdClaims\": { \"cred-123\": [\"name\", \"dob\"] } }"; public static final String WALLET_PRESENTATIONS_HANDLE_ACTION_REQ_REJECT_EXAMPLE_NAME = "Reject Verifier"; public static final String WALLET_PRESENTATIONS_HANDLE_ACTION_REQ_REJECT_EXAMPLE_VALUE = "{ \"errorCode\": \"access_denied\", \"errorMessage\": \"User denied authorization to share credentials\" }"; public static final String WALLET_PRESENTATIONS_HANDLE_ACTION_200_SUBMITTED_NAME = "Presentation submitted"; diff --git a/src/main/java/io/mosip/mimoto/controller/WalletPresentationsController.java b/src/main/java/io/mosip/mimoto/controller/WalletPresentationsController.java index 7aab075f3..9b46e741b 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletPresentationsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletPresentationsController.java @@ -183,6 +183,7 @@ public ResponseEntity getMatchingCredentials(@Pa schema = @Schema(implementation = SubmitPresentationRequestDTO.class), examples = { @ExampleObject(name = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_ACTION_REQ_SUBMIT_EXAMPLE_NAME, value = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_ACTION_REQ_SUBMIT_EXAMPLE_VALUE), + @ExampleObject(name = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_ACTION_REQ_SUBMIT_SDJWT_EXAMPLE_NAME, value = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_ACTION_REQ_SUBMIT_SDJWT_EXAMPLE_VALUE), @ExampleObject(name = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_ACTION_REQ_REJECT_EXAMPLE_NAME, value = SwaggerLiteralConstants.WALLET_PRESENTATIONS_HANDLE_ACTION_REQ_REJECT_EXAMPLE_VALUE) } ) diff --git a/src/main/java/io/mosip/mimoto/dto/SubmitPresentationRequestDTO.java b/src/main/java/io/mosip/mimoto/dto/SubmitPresentationRequestDTO.java index c37e7b84f..c0f73deb3 100644 --- a/src/main/java/io/mosip/mimoto/dto/SubmitPresentationRequestDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/SubmitPresentationRequestDTO.java @@ -7,6 +7,7 @@ import lombok.NoArgsConstructor; import java.util.List; +import java.util.Map; /** * DTO for submitting a presentation with selected credentials or rejecting a verifier @@ -22,6 +23,10 @@ public class SubmitPresentationRequestDTO { example = "[\"cred-123\", \"cred-456\"]") private List selectedCredentials; + @Schema(description = "Selected SD-JWT claim paths per credential ID for selective disclosure (only for SD-JWT credentials)", + example = "{\"cred-123\": [\"name\", \"dob\"]}") + private Map> selectedSdClaims; + @Schema(description = "Error code for rejecting the verifier (used when user denies the presentation request)", example = "access_denied") private String errorCode; @@ -35,18 +40,19 @@ public class SubmitPresentationRequestDTO { */ public boolean isSubmissionRequest() { boolean hasCredentials = selectedCredentials != null && !selectedCredentials.isEmpty(); - boolean hasErrorFields = (errorCode != null && !errorCode.trim().isEmpty()) || + boolean hasErrorFields = (errorCode != null && !errorCode.trim().isEmpty()) || (errorMessage != null && !errorMessage.trim().isEmpty()); return hasCredentials && !hasErrorFields; } /** - * Checks if this is a rejection request (has error code and message and NO credentials) + * Checks if this is a rejection request (has error code and message, NO credentials, NO SD-claim selections) */ public boolean isRejectionRequest() { - boolean hasErrorFields = errorCode != null && !errorCode.trim().isEmpty() && + boolean hasErrorFields = errorCode != null && !errorCode.trim().isEmpty() && errorMessage != null && !errorMessage.trim().isEmpty(); boolean hasCredentials = selectedCredentials != null && !selectedCredentials.isEmpty(); - return hasErrorFields && !hasCredentials; + boolean hasSdClaims = selectedSdClaims != null && !selectedSdClaims.isEmpty(); + return hasErrorFields && !hasCredentials && !hasSdClaims; } } diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialMatchingServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialMatchingServiceImpl.java index f0e4a6782..9d43aaa42 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialMatchingServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialMatchingServiceImpl.java @@ -99,7 +99,13 @@ public MatchingCredentialsDTO getMatchingCredentials(VerifiablePresentationSessi if (!matches.isEmpty()) { matchingCredentialsByDescriptor.put(i, matches); } else { - missingClaims.addAll(extractClaimsFromInputDescriptor(descriptor)); + boolean hasFormatMatch = decryptedCredentials.stream() + .anyMatch(decrypted -> matchesFormat(decrypted.getCredential(), descriptor.getFormat())); + if (hasFormatMatch) { + missingClaims.addAll(extractClaimsFromInputDescriptor(descriptor)); + } else { + missingClaims.addAll(extractFormatConstraintKeys(descriptor)); + } } }); @@ -153,9 +159,12 @@ private void validateInputParameters(PresentationDefinition presentationDefiniti private MatchingCredentialsResponseDTO createEmptyResponseWithMissingClaims(PresentationDefinition presentationDefinition) { log.info("No credentials found for wallet"); + Set missingClaims = presentationDefinition.getInputDescriptors().stream() + .flatMap(descriptor -> extractFormatConstraintKeys(descriptor).stream()) + .collect(Collectors.toSet()); return MatchingCredentialsResponseDTO.builder() .availableCredentials(Collections.emptyList()) - .missingClaims(new HashSet<>(extractRequiredClaims(presentationDefinition))) + .missingClaims(missingClaims) .build(); } @@ -210,8 +219,8 @@ private boolean matchesFormat(VCCredentialResponse vc, Map>> requestFormat) { - Map> sdJwtFormat = requestFormat.get(CredentialFormat.VC_SD_JWT.getFormat()); + private boolean matchesSdJwtAlgorithm(VCCredentialResponse vc, Map>> requestFormat, String formatKey) { if (vc.getCredential() == null || !(vc.getCredential() instanceof String sdJwtString)) { return false; } - if (!sdJwtFormat.containsKey(SD_JWT_ALG_VALUES_KEY)) { - return false; + Map> sdJwtFormat = requestFormat.get(formatKey); + List requestAlgorithms = sdJwtFormat.get(SD_JWT_ALG_VALUES_KEY); + if (requestAlgorithms != null) { + return requestAlgorithms.contains(extractSdJwtAlgorithm(sdJwtString)); } - - String sdJwtAlgorithm = extractSdJwtAlgorithm(sdJwtString); - Map> requestFormatMap = requestFormat.get(CredentialFormat.VC_SD_JWT.getFormat()); - if (requestFormatMap != null) { - List requestAlgorithms = requestFormatMap.get(SD_JWT_ALG_VALUES_KEY); - if (requestAlgorithms != null) { - return requestAlgorithms.contains(sdJwtAlgorithm); - } - return true; // If no specific algorithms are required, any algorithm is acceptable - } - return false; + return true; // No sd-jwt_alg_values constraint → any algorithm is acceptable } private String extractSdJwtAlgorithm(String sdJwtString) { @@ -307,14 +307,26 @@ private Object getCredentialData(VCCredentialResponse vc) { if (CredentialFormat.LDP_VC.getFormat().equalsIgnoreCase(format)) { return credentialFormatHandler.extractAllCredentialProperties(vc); - } else if (CredentialFormat.VC_SD_JWT.getFormat().equalsIgnoreCase(format)) { + } else if (CredentialFormat.isSdJwt(format)) { Map extractedMap = credentialFormatHandler.extractAllCredentialProperties(vc); if (extractedMap == null) { return Collections.emptyMap(); } - Map> allCredentialProperties = (Map>) extractedMap; Map credentialClaimsMap = new HashMap<>(); - allCredentialProperties.values().forEach(credentialClaimsMap::putAll); + // publicClaims and sdClaims are mutually exclusive by SD-JWT spec — no key collision. + // sdClaims values are disclosure blobs (List), not decoded claim values. + // This supports existence-based field matching (e.g. $.given_name present). + // Value-filter matching on SD claims (e.g. $.age >= 18) is not supported here + // and requires decoding disclosures — tracked as a follow-up improvement. + for (Map.Entry outer : extractedMap.entrySet()) { + if (outer.getValue() instanceof Map innerMap) { + for (Map.Entry inner : innerMap.entrySet()) { + if (inner.getKey() instanceof String key) { + credentialClaimsMap.put(key, inner.getValue()); + } + } + } + } return credentialClaimsMap; } else { throw new InvalidRequestException(UNSUPPORTED_FORMAT.getErrorCode(), "Unsupported credential format: " + format); @@ -408,8 +420,8 @@ private CredentialDTO buildAvailableCredential(DecryptedCredentialDTO decryptedC log.warn("Failed to fetch issuer config for issuerId: {}, credentialType: {}", issuerId, credentialType, e); } - if (CredentialFormat.VC_SD_JWT.getFormat().equalsIgnoreCase(decryptedCredentialDTO.getCredential().getFormat())) { - CredentialFormatHandler credentialFormatHandler = credentialFormatHandlerFactory.getHandler(CredentialFormat.VC_SD_JWT.getFormat()); + if (CredentialFormat.isSdJwt(decryptedCredentialDTO.getCredential().getFormat())) { + CredentialFormatHandler credentialFormatHandler = credentialFormatHandlerFactory.getHandler(decryptedCredentialDTO.getCredential().getFormat()); Map> allClaims = (Map>) credentialFormatHandler.extractAllCredentialProperties(decryptedCredentialDTO.getCredential()); publicClaimsMap = allClaims.get("publicClaims"); @@ -443,10 +455,10 @@ private List extractPublicClaimPaths(Map publicClaimsMap Map csMap = (Map) credentialSubject; collectPaths(csMap, "$", paths); } else { - // Remove standard JWT claims and SD-JWT metadata List metadataKeys = Arrays.asList("vct", "cnf", "iss", "sub", "aud", "exp", "nbf", "iat", "jti", SD, "_sd_alg", "id"); - metadataKeys.forEach(publicClaimsMap::remove); - collectPaths(publicClaimsMap, "$", paths); + Map filteredMap = new HashMap<>(publicClaimsMap); + metadataKeys.forEach(filteredMap::remove); + collectPaths(filteredMap, "$", paths); } return paths; } @@ -493,6 +505,23 @@ private void collectPaths(Map publicClaimsMap, String prefix, Li } } + private Set extractFormatConstraintKeys(InputDescriptor descriptor) { + Map>> format = descriptor.getFormat(); + if (format == null || format.isEmpty()) { + return Collections.singleton(descriptor.getId()); + } + + Set result = new HashSet<>(); + if (format.containsKey(CredentialFormat.VC_SD_JWT.getFormat()) || format.containsKey(CredentialFormat.DC_SD_JWT.getFormat())) { + result.add(SD_JWT_ALG_VALUES_KEY); + } + if (format.containsKey(LDP_VC_FORMAT)) { + result.add(PROOF_TYPE_KEY); + } + + return result.isEmpty() ? Collections.singleton(descriptor.getId()) : result; + } + private boolean hasUniformKeys(List list) { List> keySets = list.stream() .filter(item -> item instanceof Map) diff --git a/src/main/java/io/mosip/mimoto/service/impl/OpenID4VPService.java b/src/main/java/io/mosip/mimoto/service/impl/OpenID4VPService.java index 93dcb06e6..30586fefd 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/OpenID4VPService.java +++ b/src/main/java/io/mosip/mimoto/service/impl/OpenID4VPService.java @@ -34,12 +34,13 @@ public OpenID4VPService(VerifierService verifierService) { public OpenID4VP create(String presentationId) { WalletMetadata walletMetadata = new WalletMetadata(); - walletMetadata.setVpFormatsSupported(Map.of(VPFormatType.LDP_VC, new VPFormatSupported(List.of("EEd25519Signature2020")))); + walletMetadata.setVpFormatsSupported(Map.of( + VPFormatType.LDP_VC, new VPFormatSupported(List.of("Ed25519Signature2020")), + VPFormatType.VC_SD_JWT, new VPFormatSupported(List.of("ES256", "EdDSA")), + VPFormatType.DC_SD_JWT, new VPFormatSupported(List.of("ES256", "EdDSA")) + )); - return new OpenID4VP( - presentationId, - walletMetadata - ); + return new OpenID4VP(presentationId, walletMetadata); } /** diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletPresentationServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletPresentationServiceImpl.java index 246158643..a0085ecbf 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletPresentationServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletPresentationServiceImpl.java @@ -27,12 +27,15 @@ import io.mosip.mimoto.util.Utilities; import io.mosip.mimoto.util.UrlParameterUtils; import io.mosip.openID4VP.OpenID4VP; +import io.mosip.openID4VP.authorizationResponse.unsignedVPToken.types.sdJwt.UnsignedSdJwtVPToken; import io.mosip.openID4VP.common.EncoderKt; import io.mosip.openID4VP.authorizationRequest.AuthorizationRequest; import io.mosip.openID4VP.authorizationRequest.Verifier; import io.mosip.openID4VP.authorizationRequest.clientMetadata.ClientMetadata; +import io.mosip.mimoto.service.CredentialFormatHandlerFactory; import io.mosip.openID4VP.authorizationResponse.unsignedVPToken.UnsignedVPToken; import io.mosip.openID4VP.authorizationResponse.unsignedVPToken.types.ldp.UnsignedLdpVPToken; +import io.mosip.openID4VP.authorizationResponse.vpTokenSigningResult.types.sdJwt.SdJwtVPTokenSigningResult; import io.mosip.openID4VP.authorizationResponse.vpTokenSigningResult.VPTokenSigningResult; import io.mosip.openID4VP.authorizationResponse.vpTokenSigningResult.types.ldp.LdpVPTokenSigningResult; import io.mosip.openID4VP.constants.FormatType; @@ -48,6 +51,7 @@ import java.net.URISyntaxException; import java.nio.charset.StandardCharsets; import java.security.KeyPair; +import java.text.ParseException; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; @@ -64,7 +68,6 @@ public class WalletPresentationServiceImpl implements WalletPresentationService private static final String DEFAULT_SIGNATURE_SUITE = "JsonWebSignature2020"; private static final String UNKNOWN_VERIFIER = "unknown"; private static final String EMPTY_JSON = "{}"; - private static final String DEFAULT_SIGNING_ALGORITHM_NAME = "ED25519"; private final VerifierService verifierService; @@ -80,7 +83,9 @@ public class WalletPresentationServiceImpl implements WalletPresentationService private final DataProtectionService dataProtectionService; - public WalletPresentationServiceImpl(VerifierService verifierService, OpenID4VPService openID4VPService, ObjectMapper objectMapper, KeyPairRetrievalService keyPairService, CredentialMatchingService credentialMatchingService, VerifiablePresentationsRepository verifiablePresentationsRepository, DataProtectionService dataProtectionService) { + private final CredentialFormatHandlerFactory credentialFormatHandlerFactory; + + public WalletPresentationServiceImpl(VerifierService verifierService, OpenID4VPService openID4VPService, ObjectMapper objectMapper, KeyPairRetrievalService keyPairService, CredentialMatchingService credentialMatchingService, VerifiablePresentationsRepository verifiablePresentationsRepository, DataProtectionService dataProtectionService, CredentialFormatHandlerFactory credentialFormatHandlerFactory) { this.verifierService = verifierService; this.openID4VPService = openID4VPService; this.objectMapper = objectMapper; @@ -88,6 +93,7 @@ public WalletPresentationServiceImpl(VerifierService verifierService, OpenID4VPS this.credentialMatchingService = credentialMatchingService; this.verifiablePresentationsRepository = verifiablePresentationsRepository; this.dataProtectionService = dataProtectionService; + this.credentialFormatHandlerFactory = credentialFormatHandlerFactory; } @Override @@ -255,22 +261,20 @@ public SubmitPresentationResponseDTO submitPresentation(VerifiablePresentationSe List preRegisteredVerifiers = verifierService.getTrustedVerifiers().getVerifiers().stream().map(verifierDTO -> new Verifier(verifierDTO.getClientId(), verifierDTO.getResponseUris(), verifierDTO.getJwksUri(), verifierDTO.getAllowUnsignedRequest())).toList(); openID4VP.authenticateVerifier(sessionData.getAuthorizationRequest(), preRegisteredVerifiers, sessionData.isVerifierClientPreregistered()); - // Use configurable signing algorithm - SigningAlgorithm signingAlgorithm = SigningAlgorithm.valueOf(DEFAULT_SIGNING_ALGORITHM_NAME); + // Holder key for LDP_VC is always ED25519 (Ed25519Signature2020). SD-JWT KB-JWT signing + // derives its own per-credential key from the KB-JWT header alg inside signVPToken. + SigningAlgorithm signingAlgorithm = SigningAlgorithm.ED25519; KeyPair keyPair = keyPairService.getKeyPairFromDB(walletId, base64Key, signingAlgorithm); JWK jwk = SigningKeyUtil.generateJwk(signingAlgorithm, keyPair); - Map unsignedVPToken = constructUnsignedVPToken(openID4VP, selectedCredentials, jwk); + Map unsignedVPToken = constructUnsignedVPToken(openID4VP, selectedCredentials, jwk, request.getSelectedSdClaims()); - // Step 3: Sign token using user's private key - JWSSigner jwsSigner = SigningKeyUtil.createSigner(signingAlgorithm, jwk); - Map vpTokenSigningResults = signVPToken(unsignedVPToken, jwsSigner); + // Step 3: Sign each unsigned VP token using format-specific signing logic + Map vpTokenSigningResults = signVPToken(unsignedVPToken, jwk, walletId, base64Key); // Step 4: Share verifiable presentation with verifier using OpenID4VP JAR log.debug("Calling OpenID4VP JAR's shareVerifiablePresentation method"); - // Cast to the expected type for the JAR method - @SuppressWarnings({"unchecked", "rawtypes"}) Map jarMap = (Map) vpTokenSigningResults; try { - VerifierResponse response = openID4VP.sendVPResponseToVerifier(jarMap); + VerifierResponse response = openID4VP.sendVPResponseToVerifier(vpTokenSigningResults); boolean shareSuccess = response.getStatusCode() >= 200 && response.getStatusCode() < 300; // Step 5: Store presentation record in database storePresentationRecord(walletId, presentationId, request, sessionData, shareSuccess, requestedAt); @@ -285,36 +289,89 @@ public SubmitPresentationResponseDTO submitPresentation(VerifiablePresentationSe } /** - * Signs VP token using JWSSigner for LDP_VC format - * Only LDP_VC format is supported. Throws InvalidRequestException for other formats. + * Signs each unsigned VP token by dispatching to the signing logic for its credential format. + * LDP_VC is signed with the ED25519 holder key; SD-JWT (vc+sd-jwt / dc+sd-jwt) signers are derived + * per credential from the KB-JWT header alg inside signSdJwtFormat. */ - private Map signVPToken(Map unsignedVPTokensMap, JWSSigner jwsSigner) { + private Map signVPToken(Map unsignedVPTokensMap, JWK ldpVcJwk, String walletId, String base64Key) throws JOSEException, KeyGenerationException, DecryptionException { log.debug("Signing VP token for {} format types", unsignedVPTokensMap.size()); - return unsignedVPTokensMap.entrySet().stream().map(entry -> { + Map results = new HashMap<>(); + for (Map.Entry entry : unsignedVPTokensMap.entrySet()) { FormatType formatType = entry.getKey(); UnsignedVPToken unsignedVPToken = entry.getValue(); - if (formatType != FormatType.LDP_VC) { - log.error("Unsupported format type: {}. Only ldp_vc format is supported.", formatType); - throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Unsupported credential format: " + formatType + ". Only ldp_vc format is supported."); + VPTokenSigningResult signingResult; + if (formatType == FormatType.LDP_VC) { + signingResult = signLdpVcFormat(unsignedVPToken, ldpVcJwk); + } else if (formatType == FormatType.VC_SD_JWT || formatType == FormatType.DC_SD_JWT) { + signingResult = signSdJwtFormat(unsignedVPToken, walletId, base64Key); + } else { + log.error("Unsupported format type: {}", formatType); + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Unsupported format type: " + formatType); } + results.put(formatType, signingResult); + } + return results; + } + /** + * Signs SD-JWT JB-JWT tokens. The library provides unsigned KB-JWTs (header.payload) per credential UUID. + * Mimoto signs each one and returns the signatures. + */ + private SdJwtVPTokenSigningResult signSdJwtFormat(UnsignedVPToken unsignedVPToken, String walletId, String base64Key) throws JOSEException, KeyGenerationException, DecryptionException { + UnsignedSdJwtVPToken sdJwtToken = (UnsignedSdJwtVPToken) unsignedVPToken; + Map uuidToUnsignedKBT = sdJwtToken.getUuidToUnsignedKBT(); + + // Cache one signer per algorithm so multiple credentials sharing an alg reuse the same key fetch + Map signerCache = new EnumMap<>(SigningAlgorithm.class); + + Map uuidToSignature = new HashMap<>(); + for (Map.Entry entry: uuidToUnsignedKBT.entrySet()) { + String uuid = entry.getKey(); + // "headerB64.payloadB64" + String unsignedKBT = entry.getValue(); + + // Parse the KB-JWT header produced by the OpenID4VP JAR and read its alg. + // The JAR derives this alg from the credential's cnf, so the header is the source of truth. + JWSHeader kbHeader; try { - LdpVPTokenSigningResult signingResult = signLdpVcFormat(unsignedVPToken, jwsSigner); - return Map.entry(formatType, signingResult); - } catch (JOSEException e) { - throw new RuntimeException("Failed to sign VP token for format: " + formatType, e); + String[] parts = unsignedKBT.split("\\."); + kbHeader = JWSHeader.parse(new Base64URL(parts[0])); + } catch (ParseException e) { + throw new JOSEException("Failed to parse KB-JWT header for credential uuid: " + uuid, e); } - }).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + SigningAlgorithm algorithm = SigningAlgorithm.fromString(kbHeader.getAlgorithm().getName()); + + // Build (or reuse) a signer for this algorithm using the wallet's key pair for that alg + JWSSigner jwsSigner = signerCache.get(algorithm); + if (jwsSigner == null) { + KeyPair keyPair = keyPairService.getKeyPairFromDB(walletId, base64Key, algorithm); + JWK jwk = SigningKeyUtil.generateJwk(algorithm, keyPair); + jwsSigner = SigningKeyUtil.createSigner(algorithm, jwk); + signerCache.put(algorithm, jwsSigner); + } + + // Standard JWT signing input: ASCII bytes of "headerB64.payloadB64" + byte[] signingInput = unsignedKBT.getBytes(StandardCharsets.US_ASCII); + + Base64URL signature = jwsSigner.sign(kbHeader, signingInput); + uuidToSignature.put(uuid, signature.toString()); + } + + return new SdJwtVPTokenSigningResult(uuidToSignature); } /** * Signs LDP_VC format verifiable presentation using detached JWT */ - private LdpVPTokenSigningResult signLdpVcFormat(UnsignedVPToken unsignedVPToken, JWSSigner jwsSigner) throws JOSEException { + private LdpVPTokenSigningResult signLdpVcFormat(UnsignedVPToken unsignedVPToken, JWK ed25519Jwk) throws JOSEException { log.debug("Signing LDP_VC format VP token"); + // LDP_VC is always signed with the ED25519 holder key (Ed25519Signature2020) + JWSSigner jwsSigner = SigningKeyUtil.createSigner(SigningAlgorithm.ED25519, ed25519Jwk); + String dataToSign = ((UnsignedLdpVPToken) unsignedVPToken).getDataToSign(); JWSHeader header = new JWSHeader.Builder(JWSAlgorithm.EdDSA).criticalParams(Set.of(OpenID4VPConstants.JWT_CRITICAL_PARAM_B64)).base64URLEncodePayload(false).build(); @@ -360,13 +417,14 @@ private List fetchSelectedCredentials(VerifiablePresenta } /** - * Constructs unsigned VP token using the OpenID4VP JAR + * Constructs unsigned VP token using the OpenID4VP JAR. + * For SD-JWT credentials, disclosures are pre-filtered to the user's selectedSdClaims. */ - private Map constructUnsignedVPToken(OpenID4VP openID4VP, List credentials, JWK jwk) throws JsonProcessingException { + private Map constructUnsignedVPToken(OpenID4VP openID4VP, List credentials, JWK jwk, Map> selectedSdClaims) throws JsonProcessingException { log.debug("Constructing unsigned VP token for {} credentials", credentials.size()); - Map>> verifiableCredentials = convertCredentialsToJarFormat(credentials); + Map>> verifiableCredentials = convertCredentialsToJarFormat(credentials, selectedSdClaims); String holderId = resolveHolderId(jwk); return openID4VP.constructUnsignedVPToken(verifiableCredentials, holderId, DEFAULT_SIGNATURE_SUITE); @@ -388,37 +446,113 @@ private String resolveHolderId(JWK jwk) throws JsonProcessingException { } /** - * Converts DecryptedCredentialDTO list to the format expected by the OpenID4VP JAR - * Extracts the inner credential data from VCCredentialResponse wrapper to remove the "credential" wrapper + * Converts DecryptedCredentialDTO list to the format expected by the OpenID4VP JAR. + * Extracts the inner credential data from VCCredentialResponse wrapper to remove the "credential" wrapper. + * For SD-JWT credentials, filters disclosures down to only the user-selected claims. */ - private Map>> convertCredentialsToJarFormat(List credentials) { - - return credentials.stream().collect(Collectors.groupingBy(DecryptedCredentialDTO::getId, Collectors.collectingAndThen(Collectors.toList(), credList -> credList.stream().collect(Collectors.groupingBy(credential -> { - // Get format and credential data - VCCredentialResponse vcCredentialResponse = credential.getCredential(); - String credentialFormat = vcCredentialResponse.getFormat(); - // Convert format string to FormatType enum - return mapStringToFormatType(credentialFormat); - }, Collectors.mapping(credential -> credential.getCredential().getCredential(), Collectors.toList())))))); + private Map>> convertCredentialsToJarFormat(List credentials, Map> selectedSdClaims) { + Map>> result = new HashMap<>(); + + for (DecryptedCredentialDTO credential: credentials) { + VCCredentialResponse vcResponse = credential.getCredential(); + String format = vcResponse.getFormat(); + FormatType formatType = mapStringToFormatType(format); + + Object credentialData; + if(CredentialFormat.isSdJwt(format)) { + List selectedPaths = selectedSdClaims != null ? selectedSdClaims.get(credential.getId()) : null; + credentialData = buildFilteredSdJwt(credential, selectedPaths); + } else { + credentialData = vcResponse.getCredential(); + } + + result.computeIfAbsent(credential.getId(), k -> new HashMap<>()) + .computeIfAbsent(formatType, k -> new ArrayList<>()) + .add(credentialData); + } + + return result; } /** - * Maps format string to FormatType enum - * Only ldp_vc format is supported. Throws InvalidRequestException for other formats. + * Maps format string to FormatType enum. */ private FormatType mapStringToFormatType(String format) { if (format == null) { log.error("Credential format is null"); - throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Credential format is required. Only ldp_vc format is supported."); + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Credential format is required."); } String formatLower = format.toLowerCase(); - if (CredentialFormat.LDP_VC.getFormat().equals(formatLower)) { - return FormatType.LDP_VC; + if (CredentialFormat.LDP_VC.getFormat().equals(formatLower)) return FormatType.LDP_VC; + if (CredentialFormat.VC_SD_JWT.getFormat().equals(formatLower)) return FormatType.VC_SD_JWT; + if (CredentialFormat.DC_SD_JWT.getFormat().equals(formatLower)) return FormatType.DC_SD_JWT; + + log.error("Unsupported credential format: {}", format); + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Unsupported credential format: " + format); + } + + /** + * Builds an SD-JWT string containing ONLY the user-selected disclosures. + * Disclosures are shared only when explicitly selected; if selectedPaths is null/empty + * (the user selected no SD claims for this credential), no disclosures are shared. + */ + private String buildFilteredSdJwt(DecryptedCredentialDTO credential, List selectedPaths) { + if (!(credential.getCredential().getCredential() instanceof String sdJwtString)) { + log.warn("Credential {} payload is not a String; skipping SD-JWT filtering", credential.getId()); + return String.valueOf(credential.getCredential().getCredential()); } - log.error("Unsupported credential format: {}. Only ldp_vc format is supported.", format); - throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Unsupported credential format: " + format + ". Only ldp_vc format is supported."); + // The issuer-signed credential JWT is everything before the first '~'. + // We rebuild from this and append ONLY the explicitly selected disclosures - never all. + String credentialJwt = sdJwtString.split("~", -1)[0]; + + // No selection for this credential -> user chose to disclose nothing -> share zero disclosures + if (selectedPaths == null || selectedPaths.isEmpty()) { + return credentialJwt + "~"; + } + + try { + // Get path -> List mapping from the format handler + Map allProps = credentialFormatHandlerFactory + .getHandler(credential.getCredential().getFormat()) + .extractAllCredentialProperties(credential.getCredential()); + + if (!(allProps.get("sdClaims") instanceof Map rawSdClaims)) { + return credentialJwt + "~"; + } + @SuppressWarnings("unchecked") + Map sdClaimsMap = (Map) rawSdClaims; + if (sdClaimsMap.isEmpty()) { + return credentialJwt + "~"; + } + + // Normalize paths: "$.name" -> "name", "$.address.city" -> "address.city" + Set normalizedPaths = selectedPaths.stream(). + map(p -> p.startsWith("$.") ? p.substring(2) : p) + .collect(Collectors.toCollection(LinkedHashSet::new)); + + // Collect all disclosures B64 strings for the selected paths (preserving order, deduplicating) + Set allDisclosuresB64 = new LinkedHashSet<>(); + for (String path : normalizedPaths) { + Object disclosures = sdClaimsMap.get(path); + if (disclosures instanceof List discList) { + discList.forEach(d -> allDisclosuresB64.add((String) d)); + } + } + + // Reconstruct: credentialJwt ~ disc1 ~ disc2 ~ (trailing ~ required by SD-JWT) + StringBuilder sb = new StringBuilder(credentialJwt); + for (String disc: allDisclosuresB64) { + sb.append("~").append(disc); + } + sb.append("~"); + return sb.toString(); + + } catch (Exception e) { + log.error("Failed to filter SD-JWT disclosures for credential: {}, selectedPaths: {}. Sharing no disclosures. Error: {}", credential.getId(), selectedPaths, e.getMessage(), e); + return credentialJwt + "~"; + } } /** diff --git a/src/main/java/io/mosip/mimoto/util/factory/Ed25519AlgorithmHandler.java b/src/main/java/io/mosip/mimoto/util/factory/Ed25519AlgorithmHandler.java index dd82ea62d..c2e04c8c8 100644 --- a/src/main/java/io/mosip/mimoto/util/factory/Ed25519AlgorithmHandler.java +++ b/src/main/java/io/mosip/mimoto/util/factory/Ed25519AlgorithmHandler.java @@ -76,7 +76,7 @@ public Base64URL sign(JWSHeader header, byte[] input) throws JOSEException { @Override public Set supportedJWSAlgorithms() { - return Collections.singleton(JWSAlgorithm.Ed25519); + return Set.of(JWSAlgorithm.Ed25519, JWSAlgorithm.EdDSA); } @Override diff --git a/src/test/java/io/mosip/mimoto/constant/CredentialFormatTest.java b/src/test/java/io/mosip/mimoto/constant/CredentialFormatTest.java new file mode 100644 index 000000000..680440b76 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/constant/CredentialFormatTest.java @@ -0,0 +1,64 @@ +package io.mosip.mimoto.constant; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class CredentialFormatTest { + + @Test + void shouldReturnCorrectFormatStringForEachValue() { + assertEquals("vc+sd-jwt", CredentialFormat.VC_SD_JWT.getFormat()); + assertEquals("dc+sd-jwt", CredentialFormat.DC_SD_JWT.getFormat()); + assertEquals("ldp_vc", CredentialFormat.LDP_VC.getFormat()); + } + + @Test + void shouldHaveThreeEnumValues() { + assertEquals(3, CredentialFormat.values().length); + } + + @Test + void fromStringShouldResolveEachFormatCaseInsensitively() { + assertEquals(CredentialFormat.VC_SD_JWT, CredentialFormat.fromString("vc+sd-jwt")); + assertEquals(CredentialFormat.DC_SD_JWT, CredentialFormat.fromString("dc+sd-jwt")); + assertEquals(CredentialFormat.LDP_VC, CredentialFormat.fromString("ldp_vc")); + // case-insensitive + assertEquals(CredentialFormat.VC_SD_JWT, CredentialFormat.fromString("VC+SD-JWT")); + assertEquals(CredentialFormat.DC_SD_JWT, CredentialFormat.fromString("DC+SD-JWT")); + } + + @Test + void fromStringShouldThrowForUnknownFormat() { + IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, + () -> CredentialFormat.fromString("unknown_format")); + assertEquals("Unknown credential format: unknown_format", exception.getMessage()); + } + + @Test + void isSdJwtShouldBeTrueForBothSdJwtFormats() { + assertTrue(CredentialFormat.isSdJwt("vc+sd-jwt")); + assertTrue(CredentialFormat.isSdJwt("dc+sd-jwt")); + // case-insensitive + assertTrue(CredentialFormat.isSdJwt("VC+SD-JWT")); + assertTrue(CredentialFormat.isSdJwt("DC+SD-JWT")); + } + + @Test + void isSdJwtShouldBeFalseForLdpVc() { + assertFalse(CredentialFormat.isSdJwt("ldp_vc")); + } + + @Test + void isSdJwtShouldBeFalseForNull() { + assertFalse(CredentialFormat.isSdJwt(null)); + } + + @Test + void isSdJwtShouldBeFalseForUnknownFormat() { + assertFalse(CredentialFormat.isSdJwt("mso_mdoc")); + } +} \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/CredentialMatchingServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialMatchingServiceTest.java index 1306a567c..16e236161 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialMatchingServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialMatchingServiceTest.java @@ -78,9 +78,11 @@ public void setUp() throws JsonProcessingException { VCCredentialResponse vc = invocation.getArgument(0); String format = vc.getFormat(); - if (CredentialFormat.VC_SD_JWT.getFormat().equalsIgnoreCase(format)) { + if (CredentialFormat.isSdJwt(format)) { + Map publicClaims = new LinkedHashMap<>(); + publicClaims.put("type", Arrays.asList("VerifiableCredential", "TestCredential")); Map> result = new LinkedHashMap<>(); - result.put("publicClaims", new LinkedHashMap<>()); + result.put("publicClaims", publicClaims); result.put("sdClaims", new LinkedHashMap<>()); return result; } @@ -465,23 +467,33 @@ public void testGetMatchingCredentialsWithSdJwtFormat() throws Exception { MatchingCredentialsDTO result = credentialMatchingService .getMatchingCredentials(sessionData, walletId, base64Key); - // Assert + // Assert - PD has no format constraint; SD-JWT credential with $.type satisfies the constraint assertNotNull(result); - assertTrue(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + assertFalse(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + assertEquals(CredentialFormat.VC_SD_JWT.getFormat(), + result.getMatchingCredentialsResponse().getAvailableCredentials().get(0).getFormat()); } - @Test(expected = InvalidRequestException.class) + @Test public void testGetMatchingCredentialsWithDcSdJwtFormat() throws Exception { // Arrange PresentationDefinition pd = createMockPresentationDefinition(); when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) .thenReturn(pd); - List dcSdJwtCredentials = createMockWalletCredentialsWithDcSdJwtFormat(); + when(credentialFormatHandlerFactory.getHandler(eq(CredentialFormat.DC_SD_JWT.getFormat()))) + .thenReturn(credentialFormatHandler); when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) - .thenReturn(dcSdJwtCredentials); + .thenReturn(createMockWalletCredentialsWithDcSdJwtFormat()); // Act - credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); + MatchingCredentialsDTO result = credentialMatchingService + .getMatchingCredentials(sessionData, walletId, base64Key); + + // Assert - dc+sd-jwt is handled like vc+sd-jwt and surfaces as an available credential + assertNotNull(result); + assertFalse(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + assertEquals(CredentialFormat.DC_SD_JWT.getFormat(), + result.getMatchingCredentialsResponse().getAvailableCredentials().get(0).getFormat()); } @Test @@ -1176,8 +1188,8 @@ public void testMatchesSdJwtFormatWhenNoAlgValuesInFormatCredentialIsSelected() // Act MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); - // Assert - assertTrue(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + // Assert - no sd-jwt_alg_values constraint means any algorithm is acceptable + assertFalse(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); } @Test @@ -1226,10 +1238,12 @@ public void testMatchesSdJwtFormatWhenCredentialIsNotStringCredentialNotSelected } @Test - public void testMatchesSdJwtFormatWhenFormatConfigValueIsNullCredentialNotSelected() throws Exception { - // Arrange + public void testMatchesSdJwtFormatWhenFormatConfigValueIsNullCredentialSelected() throws Exception { + // Arrange - sd-jwt_alg_values key present but value is explicitly null → any alg acceptable + Map> sdJwtFormatConfig = new HashMap<>(); + sdJwtFormatConfig.put("sd-jwt_alg_values", null); Map>> format = new HashMap<>(); - format.put(CredentialFormat.VC_SD_JWT.getFormat(), Map.of("jwt_alg_values", List.of("ES256"))); + format.put(CredentialFormat.VC_SD_JWT.getFormat(), sdJwtFormatConfig); Fields field = new Fields(Arrays.asList("$.type"), null, null, null, null, null); Constraints constraints = new Constraints(Collections.singletonList(field), null); @@ -1243,8 +1257,8 @@ public void testMatchesSdJwtFormatWhenFormatConfigValueIsNullCredentialNotSelect // Act MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); - // Assert - assertTrue(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + // Assert - null alg list means no restriction, credential should be selected + assertFalse(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); } @Test @@ -1940,7 +1954,7 @@ public void testExtractClaimsFromFieldsWhenFieldsContainNullSkipsNullFields() th // Assert assertNotNull(result); assertTrue(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); - assertTrue(result.getMatchingCredentialsResponse().getMissingClaims().contains("type")); + assertTrue(result.getMatchingCredentialsResponse().getMissingClaims().contains("test")); } @Test @@ -1963,7 +1977,7 @@ public void testExtractClaimsFromFieldsWhenFieldsIsNullReturnsEmptyList() throws // Assert assertNotNull(result); assertTrue(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); - assertTrue(result.getMatchingCredentialsResponse().getMissingClaims().isEmpty()); + assertTrue(result.getMatchingCredentialsResponse().getMissingClaims().contains("sd-jwt_alg_values")); } @Test @@ -1987,8 +2001,9 @@ public void testExtractRequiredClaimsWhenDeduplicateEnabledRemovesDuplicates() t MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); // Assert - assertEquals(1, result.getMatchingCredentialsResponse().getMissingClaims().size()); - assertTrue(result.getMatchingCredentialsResponse().getMissingClaims().contains("type")); + assertEquals(2, result.getMatchingCredentialsResponse().getMissingClaims().size()); + assertTrue(result.getMatchingCredentialsResponse().getMissingClaims().contains("desc-1")); + assertTrue(result.getMatchingCredentialsResponse().getMissingClaims().contains("desc-2")); } @@ -2105,8 +2120,9 @@ public void testExtractRequiredClaimsWhenDescriptorHasNullFieldsFilteredOut() th MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); // Assert - assertTrue(result.getMatchingCredentialsResponse().getMissingClaims().contains("name")); - assertEquals(1, result.getMatchingCredentialsResponse().getMissingClaims().size()); + assertEquals(2, result.getMatchingCredentialsResponse().getMissingClaims().size()); + assertTrue(result.getMatchingCredentialsResponse().getMissingClaims().contains("desc-null")); + assertTrue(result.getMatchingCredentialsResponse().getMissingClaims().contains("desc-valid")); } @Test @@ -2125,7 +2141,7 @@ public void testExtractClaimKeyFromPathWhenTailStartsWithDollarStrippsDollarPref MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); // Assert - assertTrue(result.getMatchingCredentialsResponse().getMissingClaims().contains("id")); + assertTrue(result.getMatchingCredentialsResponse().getMissingClaims().contains("test")); } @Test @@ -2241,4 +2257,127 @@ private Map createMapOf(Object... keyValues) { } return map; } + + // --- extractFormatConstraintKeys --- + + @Test + public void testExtractFormatConstraintKeysWhenVcSdJwtFormatReturnsSdJwtAlgValues() throws Exception { + Method method = CredentialMatchingServiceImpl.class.getDeclaredMethod("extractFormatConstraintKeys", InputDescriptor.class); + method.setAccessible(true); + + Map>> format = new HashMap<>(); + format.put(CredentialFormat.VC_SD_JWT.getFormat(), new HashMap<>()); + InputDescriptor descriptor = new InputDescriptor("test-id", null, null, format, new Constraints(null, null)); + + @SuppressWarnings("unchecked") + Set result = (Set) method.invoke(credentialMatchingService, descriptor); + assertEquals(1, result.size()); + assertTrue(result.contains("sd-jwt_alg_values")); + } + + @Test + public void testExtractFormatConstraintKeysWhenLdpVcFormatReturnsProofType() throws Exception { + Method method = CredentialMatchingServiceImpl.class.getDeclaredMethod("extractFormatConstraintKeys", InputDescriptor.class); + method.setAccessible(true); + + Map>> format = new HashMap<>(); + format.put("ldp_vc", new HashMap<>()); + InputDescriptor descriptor = new InputDescriptor("test-id", null, null, format, new Constraints(null, null)); + + @SuppressWarnings("unchecked") + Set result = (Set) method.invoke(credentialMatchingService, descriptor); + assertEquals(1, result.size()); + assertTrue(result.contains("proof_type")); + } + + @Test + public void testExtractFormatConstraintKeysWhenNullFormatReturnsDescriptorId() throws Exception { + Method method = CredentialMatchingServiceImpl.class.getDeclaredMethod("extractFormatConstraintKeys", InputDescriptor.class); + method.setAccessible(true); + + InputDescriptor descriptor = new InputDescriptor("my-descriptor-id", null, null, null, new Constraints(null, null)); + + @SuppressWarnings("unchecked") + Set result = (Set) method.invoke(credentialMatchingService, descriptor); + assertEquals(1, result.size()); + assertTrue(result.contains("my-descriptor-id")); + } + + @Test + public void testExtractFormatConstraintKeysWhenBothFormatsPresentReturnsBothKeys() throws Exception { + Method method = CredentialMatchingServiceImpl.class.getDeclaredMethod("extractFormatConstraintKeys", InputDescriptor.class); + method.setAccessible(true); + + Map>> format = new HashMap<>(); + format.put(CredentialFormat.VC_SD_JWT.getFormat(), new HashMap<>()); + format.put("ldp_vc", new HashMap<>()); + InputDescriptor descriptor = new InputDescriptor("test-id", null, null, format, new Constraints(null, null)); + + @SuppressWarnings("unchecked") + Set result = (Set) method.invoke(credentialMatchingService, descriptor); + assertEquals(2, result.size()); + assertTrue(result.contains("sd-jwt_alg_values")); + assertTrue(result.contains("proof_type")); + } + + // --- getMatchingCredentials else-block: hasFormatMatch paths --- + + @Test + public void testGetMatchingCredentialsWhenFormatMatchesButConstraintFailsUsesMissingFieldNames() throws Exception { + // Descriptor: ldp_vc with empty proof_type list + $.name constraint + // Wallet: ldp_vc credential that passes matchesFormat but not matchesConstraints + // Expected: missingClaims = ["name"] (field names), not "proof_type" (format key) + Map> ldpVcFormatMap = new HashMap<>(); + ldpVcFormatMap.put("proof_type", Collections.emptyList()); + Map>> format = new HashMap<>(); + format.put("ldp_vc", ldpVcFormatMap); + + Fields nameField = new Fields(Arrays.asList("$.name"), null, null, null, null, null); + Constraints constraints = new Constraints(Collections.singletonList(nameField), null); + InputDescriptor descriptor = new InputDescriptor("ldp-desc", null, null, format, constraints); + PresentationDefinition pd = new PresentationDefinition("test-pd", Arrays.asList(descriptor), null, null, null); + + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())).thenReturn(pd); + // ldp_vc credential without a top-level "name" field → constraint fails + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(createMockWalletCredentialsWithMapData()); + + VCCredentialProperties props = new VCCredentialProperties(); + doReturn(props).when(objectMapper).convertValue(any(), eq(VCCredentialProperties.class)); + + MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); + + assertTrue(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + assertTrue("field name must appear when format matched", + result.getMatchingCredentialsResponse().getMissingClaims().contains("name")); + assertFalse("format key must NOT appear when format matched", + result.getMatchingCredentialsResponse().getMissingClaims().contains("proof_type")); + } + + @Test + public void testGetMatchingCredentialsWhenNoFormatMatchReturnsSdJwtAlgValuesKey() throws Exception { + // Descriptor: vc+sd-jwt format; wallet has only ldp_vc credential + // Expected: missingClaims = ["sd-jwt_alg_values"] (format key), not constraint field names + Map> sdJwtFormatMap = new HashMap<>(); + sdJwtFormatMap.put("sd-jwt_alg_values", Arrays.asList("ES256")); + Map>> format = new HashMap<>(); + format.put(CredentialFormat.VC_SD_JWT.getFormat(), sdJwtFormatMap); + + Fields vctField = new Fields(Arrays.asList("$.vct"), null, null, null, null, null); + Constraints constraints = new Constraints(Collections.singletonList(vctField), null); + InputDescriptor descriptor = new InputDescriptor("sdjwt-desc", null, null, format, constraints); + PresentationDefinition pd = new PresentationDefinition("test-pd", Arrays.asList(descriptor), null, null, null); + + when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())).thenReturn(pd); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(createMockWalletCredentialsWithMapData()); // ldp_vc credential only + + MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); + + assertTrue(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); + assertTrue("format key must appear when no format match", + result.getMatchingCredentialsResponse().getMissingClaims().contains("sd-jwt_alg_values")); + assertFalse("field name must NOT appear when no format match", + result.getMatchingCredentialsResponse().getMissingClaims().contains("vct")); + } } \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/WalletPresentationServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletPresentationServiceTest.java index c439ff9eb..8d0a4bf0a 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletPresentationServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletPresentationServiceTest.java @@ -29,7 +29,9 @@ import io.mosip.openID4VP.authorizationRequest.clientMetadata.ClientMetadata; import io.mosip.openID4VP.authorizationResponse.unsignedVPToken.UnsignedVPToken; import io.mosip.openID4VP.authorizationResponse.unsignedVPToken.types.ldp.UnsignedLdpVPToken; +import io.mosip.openID4VP.authorizationResponse.unsignedVPToken.types.sdJwt.UnsignedSdJwtVPToken; import io.mosip.openID4VP.authorizationResponse.vpTokenSigningResult.types.ldp.LdpVPTokenSigningResult; +import io.mosip.openID4VP.authorizationResponse.vpTokenSigningResult.types.sdJwt.SdJwtVPTokenSigningResult; import io.mosip.openID4VP.constants.FormatType; import io.mosip.openID4VP.verifier.VerifierResponse; import org.junit.Before; @@ -41,10 +43,13 @@ import org.mockito.junit.MockitoJUnitRunner; import java.io.IOException; +import java.lang.reflect.Method; import java.net.URISyntaxException; +import java.nio.charset.StandardCharsets; import java.security.KeyPair; import java.time.Instant; import java.util.*; +import java.util.Base64; import static io.mosip.mimoto.exception.ErrorConstants.*; import static org.junit.Assert.*; @@ -72,6 +77,15 @@ public class WalletPresentationServiceTest { @Mock private DataProtectionService dataProtectionService; + @Mock + private CredentialMatchingService credentialMatchingService; + + @Mock + private CredentialFormatHandlerFactory credentialFormatHandlerFactory; + + @Mock + private CredentialFormatHandler credentialFormatHandler; + @InjectMocks private WalletPresentationServiceImpl walletPresentationService; @@ -302,6 +316,7 @@ public void testHandlePresentationActionJOSEException() throws Exception { when(testOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(mockAuthorizationRequest); Map unsignedTokens = new HashMap<>(); + unsignedTokens.put(FormatType.LDP_VC, mock(UnsignedLdpVPToken.class)); when(testOpenID4VP.constructUnsignedVPToken(any(), anyString(), anyString())).thenReturn(unsignedTokens); try (MockedStatic jwtUtilMock = mockStatic(SigningKeyUtil.class); @@ -1144,4 +1159,328 @@ public void testRejectVerifierIllegalArgumentException() throws Exception { assertNotNull(response); assertEquals(500, response.getStatusCode().value()); } + + @Test + public void testSignSdJwtFormatSignsKBTAndReturnsSignaturePerUuid() throws Exception { + Method method = WalletPresentationServiceImpl.class.getDeclaredMethod( + "signSdJwtFormat", UnsignedVPToken.class, String.class, String.class); + method.setAccessible(true); + + String kbHeader = Base64.getUrlEncoder().withoutPadding() + .encodeToString("{\"alg\":\"ES256\"}".getBytes(StandardCharsets.UTF_8)); + String kbPayload = Base64.getUrlEncoder().withoutPadding() + .encodeToString("{\"nonce\":\"abc\"}".getBytes(StandardCharsets.UTF_8)); + String unsignedKBT = kbHeader + "." + kbPayload; + + Map uuidToKBT = new HashMap<>(); + uuidToKBT.put("uuid-1", unsignedKBT); + + UnsignedSdJwtVPToken mockToken = mock(UnsignedSdJwtVPToken.class); + when(mockToken.getUuidToUnsignedKBT()).thenReturn(uuidToKBT); + when(jwsSigner.sign(any(JWSHeader.class), any(byte[].class))).thenReturn(Base64URL.encode("test-sig")); + + // The signer is now derived per credential from the KB-JWT header alg (ES256 here) + KeyPair mockKeyPair = mock(KeyPair.class); + JWK mockJwk = mock(JWK.class); + when(keyPairService.getKeyPairFromDB(eq("wallet-1"), eq("base64Key"), eq(SigningAlgorithm.ES256))) + .thenReturn(mockKeyPair); + + try (MockedStatic mockedSigningKeyUtil = mockStatic(SigningKeyUtil.class)) { + mockedSigningKeyUtil.when(() -> SigningKeyUtil.generateJwk(SigningAlgorithm.ES256, mockKeyPair)) + .thenReturn(mockJwk); + mockedSigningKeyUtil.when(() -> SigningKeyUtil.createSigner(SigningAlgorithm.ES256, mockJwk)) + .thenReturn(jwsSigner); + + SdJwtVPTokenSigningResult result = (SdJwtVPTokenSigningResult) method.invoke( + walletPresentationService, mockToken, "wallet-1", "base64Key"); + + assertNotNull(result); + verify(jwsSigner).sign(any(JWSHeader.class), + eq(unsignedKBT.getBytes(StandardCharsets.US_ASCII))); + assertTrue(result.getUuidToKbJWTSignature().containsKey("uuid-1")); + assertEquals(Base64URL.encode("test-sig").toString(), result.getUuidToKbJWTSignature().get("uuid-1")); + } + } + + @Test + public void testBuildFilteredSdJwtWhenSelectedPathsIsNullSharesNoDisclosures() throws Exception { + Method method = WalletPresentationServiceImpl.class.getDeclaredMethod( + "buildFilteredSdJwt", DecryptedCredentialDTO.class, List.class); + method.setAccessible(true); + + String originalSdJwt = "header.payload.sig~disc1~"; + DecryptedCredentialDTO credential = DecryptedCredentialDTO.builder() + .id("cred-id") + .credential(VCCredentialResponse.builder() + .format(CredentialFormat.VC_SD_JWT.getFormat()) + .credential(originalSdJwt) + .build()) + .build(); + + // No selected paths -> user disclosed nothing -> credential JWT with zero disclosures + String result = (String) method.invoke(walletPresentationService, credential, null); + assertEquals("header.payload.sig~", result); + } + + @Test + public void testBuildFilteredSdJwtWhenSelectedPathsFiltersToSelectedDisclosures() throws Exception { + Method method = WalletPresentationServiceImpl.class.getDeclaredMethod( + "buildFilteredSdJwt", DecryptedCredentialDTO.class, List.class); + method.setAccessible(true); + + String originalSdJwt = "header.payload.sig~emailDiscB64~nameDiscB64~"; + DecryptedCredentialDTO credential = DecryptedCredentialDTO.builder() + .id("cred-id") + .credential(VCCredentialResponse.builder() + .format(CredentialFormat.VC_SD_JWT.getFormat()) + .credential(originalSdJwt) + .build()) + .build(); + + Map sdClaims = new LinkedHashMap<>(); + sdClaims.put("email", List.of("emailDiscB64")); + sdClaims.put("name", List.of("nameDiscB64")); + Map allProps = new HashMap<>(); + allProps.put("sdClaims", sdClaims); + + when(credentialFormatHandlerFactory.getHandler(CredentialFormat.VC_SD_JWT.getFormat())) + .thenReturn(credentialFormatHandler); + doReturn(allProps).when(credentialFormatHandler).extractAllCredentialProperties(any()); + + String result = (String) method.invoke(walletPresentationService, credential, List.of("$.email")); + assertEquals("header.payload.sig~emailDiscB64~", result); + } + + @Test + public void testBuildFilteredSdJwtNormalizesPathsWithoutDollarDotPrefix() throws Exception { + Method method = WalletPresentationServiceImpl.class.getDeclaredMethod( + "buildFilteredSdJwt", DecryptedCredentialDTO.class, List.class); + method.setAccessible(true); + + String originalSdJwt = "header.payload.sig~emailDiscB64~"; + DecryptedCredentialDTO credential = DecryptedCredentialDTO.builder() + .id("cred-id") + .credential(VCCredentialResponse.builder() + .format(CredentialFormat.VC_SD_JWT.getFormat()) + .credential(originalSdJwt) + .build()) + .build(); + + Map sdClaims = new LinkedHashMap<>(); + sdClaims.put("email", List.of("emailDiscB64")); + Map allProps = new HashMap<>(); + allProps.put("sdClaims", sdClaims); + + when(credentialFormatHandlerFactory.getHandler(CredentialFormat.VC_SD_JWT.getFormat())) + .thenReturn(credentialFormatHandler); + doReturn(allProps).when(credentialFormatHandler).extractAllCredentialProperties(any()); + + // "email" without "$." prefix should produce the same result as "$.email" + String result = (String) method.invoke(walletPresentationService, credential, List.of("email")); + assertEquals("header.payload.sig~emailDiscB64~", result); + } + + @Test + public void testBuildFilteredSdJwtWhenSdClaimsKeyMissingSharesNoDisclosures() throws Exception { + Method method = WalletPresentationServiceImpl.class.getDeclaredMethod( + "buildFilteredSdJwt", DecryptedCredentialDTO.class, List.class); + method.setAccessible(true); + + String originalSdJwt = "header.payload.sig~disc~"; + DecryptedCredentialDTO credential = DecryptedCredentialDTO.builder() + .id("cred-id") + .credential(VCCredentialResponse.builder() + .format(CredentialFormat.VC_SD_JWT.getFormat()) + .credential(originalSdJwt) + .build()) + .build(); + + Map allProps = new HashMap<>(); + allProps.put("publicClaims", new HashMap<>()); + + when(credentialFormatHandlerFactory.getHandler(CredentialFormat.VC_SD_JWT.getFormat())) + .thenReturn(credentialFormatHandler); + doReturn(allProps).when(credentialFormatHandler).extractAllCredentialProperties(any()); + + // sdClaims key missing -> cannot resolve selections -> credential JWT with zero disclosures + String result = (String) method.invoke(walletPresentationService, credential, List.of("$.email")); + assertEquals("header.payload.sig~", result); + } + + @Test + public void testBuildFilteredSdJwtWhenSelectedPathsEmptySharesNoDisclosures() throws Exception { + Method method = WalletPresentationServiceImpl.class.getDeclaredMethod( + "buildFilteredSdJwt", DecryptedCredentialDTO.class, List.class); + method.setAccessible(true); + + DecryptedCredentialDTO credential = DecryptedCredentialDTO.builder() + .id("cred-id") + .credential(VCCredentialResponse.builder() + .format(CredentialFormat.VC_SD_JWT.getFormat()) + .credential("header.payload.sig~disc1~disc2~") + .build()) + .build(); + + String result = (String) method.invoke(walletPresentationService, credential, Collections.emptyList()); + assertEquals("header.payload.sig~", result); + } + + @Test + public void testBuildFilteredSdJwtWhenSdClaimsMapEmptySharesNoDisclosures() throws Exception { + Method method = WalletPresentationServiceImpl.class.getDeclaredMethod( + "buildFilteredSdJwt", DecryptedCredentialDTO.class, List.class); + method.setAccessible(true); + + DecryptedCredentialDTO credential = DecryptedCredentialDTO.builder() + .id("cred-id") + .credential(VCCredentialResponse.builder() + .format(CredentialFormat.VC_SD_JWT.getFormat()) + .credential("header.payload.sig~disc~") + .build()) + .build(); + + Map allProps = new HashMap<>(); + allProps.put("sdClaims", new LinkedHashMap<>()); // present but empty + + when(credentialFormatHandlerFactory.getHandler(CredentialFormat.VC_SD_JWT.getFormat())) + .thenReturn(credentialFormatHandler); + doReturn(allProps).when(credentialFormatHandler).extractAllCredentialProperties(any()); + + String result = (String) method.invoke(walletPresentationService, credential, List.of("$.email")); + assertEquals("header.payload.sig~", result); + } + + @Test + public void testBuildFilteredSdJwtWhenSelectedPathNotInSdClaimsSharesNoDisclosures() throws Exception { + Method method = WalletPresentationServiceImpl.class.getDeclaredMethod( + "buildFilteredSdJwt", DecryptedCredentialDTO.class, List.class); + method.setAccessible(true); + + DecryptedCredentialDTO credential = DecryptedCredentialDTO.builder() + .id("cred-id") + .credential(VCCredentialResponse.builder() + .format(CredentialFormat.VC_SD_JWT.getFormat()) + .credential("header.payload.sig~nameDiscB64~") + .build()) + .build(); + + Map sdClaims = new LinkedHashMap<>(); + sdClaims.put("name", List.of("nameDiscB64")); + Map allProps = new HashMap<>(); + allProps.put("sdClaims", sdClaims); + + when(credentialFormatHandlerFactory.getHandler(CredentialFormat.VC_SD_JWT.getFormat())) + .thenReturn(credentialFormatHandler); + doReturn(allProps).when(credentialFormatHandler).extractAllCredentialProperties(any()); + + // user selects "email" but only "name" is selectively disclosable -> no disclosures shared + String result = (String) method.invoke(walletPresentationService, credential, List.of("$.email")); + assertEquals("header.payload.sig~", result); + } + + @Test + public void testBuildFilteredSdJwtWhenCredentialNotStringReturnsRawValue() throws Exception { + Method method = WalletPresentationServiceImpl.class.getDeclaredMethod( + "buildFilteredSdJwt", DecryptedCredentialDTO.class, List.class); + method.setAccessible(true); + + Map mapCredential = new HashMap<>(); + mapCredential.put("type", "not-a-string-sdjwt"); + DecryptedCredentialDTO credential = DecryptedCredentialDTO.builder() + .id("cred-id") + .credential(VCCredentialResponse.builder() + .format(CredentialFormat.VC_SD_JWT.getFormat()) + .credential(mapCredential) + .build()) + .build(); + + // Non-String payload cannot be SD-JWT filtered; the raw value is returned as-is + String result = (String) method.invoke(walletPresentationService, credential, List.of("$.email")); + assertEquals(String.valueOf(mapCredential), result); + } + + @Test + public void testSignSdJwtFormatBuildsPerCredentialSignersForDifferentAlgs() throws Exception { + Method method = WalletPresentationServiceImpl.class.getDeclaredMethod( + "signSdJwtFormat", UnsignedVPToken.class, String.class, String.class); + method.setAccessible(true); + + String payload = Base64.getUrlEncoder().withoutPadding() + .encodeToString("{\"nonce\":\"abc\"}".getBytes(StandardCharsets.UTF_8)); + String es256Kbt = Base64.getUrlEncoder().withoutPadding() + .encodeToString("{\"alg\":\"ES256\"}".getBytes(StandardCharsets.UTF_8)) + "." + payload; + String eddsaKbt = Base64.getUrlEncoder().withoutPadding() + .encodeToString("{\"alg\":\"EdDSA\"}".getBytes(StandardCharsets.UTF_8)) + "." + payload; + + Map uuidToKBT = new LinkedHashMap<>(); + uuidToKBT.put("uuid-es256", es256Kbt); + uuidToKBT.put("uuid-eddsa", eddsaKbt); + + UnsignedSdJwtVPToken mockToken = mock(UnsignedSdJwtVPToken.class); + when(mockToken.getUuidToUnsignedKBT()).thenReturn(uuidToKBT); + + KeyPair mockKeyPair = mock(KeyPair.class); + JWK mockJwk = mock(JWK.class); + when(keyPairService.getKeyPairFromDB(eq("wallet-1"), eq("base64Key"), eq(SigningAlgorithm.ES256))) + .thenReturn(mockKeyPair); + when(keyPairService.getKeyPairFromDB(eq("wallet-1"), eq("base64Key"), eq(SigningAlgorithm.ED25519))) + .thenReturn(mockKeyPair); + + JWSSigner es256Signer = mock(JWSSigner.class); + JWSSigner eddsaSigner = mock(JWSSigner.class); + when(es256Signer.sign(any(JWSHeader.class), any(byte[].class))).thenReturn(Base64URL.encode("es256-sig")); + when(eddsaSigner.sign(any(JWSHeader.class), any(byte[].class))).thenReturn(Base64URL.encode("eddsa-sig")); + + try (MockedStatic mockedSigningKeyUtil = mockStatic(SigningKeyUtil.class)) { + mockedSigningKeyUtil.when(() -> SigningKeyUtil.generateJwk(SigningAlgorithm.ES256, mockKeyPair)).thenReturn(mockJwk); + mockedSigningKeyUtil.when(() -> SigningKeyUtil.generateJwk(SigningAlgorithm.ED25519, mockKeyPair)).thenReturn(mockJwk); + mockedSigningKeyUtil.when(() -> SigningKeyUtil.createSigner(SigningAlgorithm.ES256, mockJwk)).thenReturn(es256Signer); + mockedSigningKeyUtil.when(() -> SigningKeyUtil.createSigner(SigningAlgorithm.ED25519, mockJwk)).thenReturn(eddsaSigner); + + SdJwtVPTokenSigningResult result = (SdJwtVPTokenSigningResult) method.invoke( + walletPresentationService, mockToken, "wallet-1", "base64Key"); + + // Each credential is signed with the signer matching its own KB-JWT header alg + assertEquals(Base64URL.encode("es256-sig").toString(), result.getUuidToKbJWTSignature().get("uuid-es256")); + assertEquals(Base64URL.encode("eddsa-sig").toString(), result.getUuidToKbJWTSignature().get("uuid-eddsa")); + } + } + + @Test + public void testSignSdJwtFormatReusesSignerForSameAlg() throws Exception { + Method method = WalletPresentationServiceImpl.class.getDeclaredMethod( + "signSdJwtFormat", UnsignedVPToken.class, String.class, String.class); + method.setAccessible(true); + + String header = Base64.getUrlEncoder().withoutPadding() + .encodeToString("{\"alg\":\"ES256\"}".getBytes(StandardCharsets.UTF_8)); + String payload = Base64.getUrlEncoder().withoutPadding() + .encodeToString("{\"nonce\":\"abc\"}".getBytes(StandardCharsets.UTF_8)); + String kbt = header + "." + payload; + + Map uuidToKBT = new LinkedHashMap<>(); + uuidToKBT.put("uuid-1", kbt); + uuidToKBT.put("uuid-2", kbt); + + UnsignedSdJwtVPToken mockToken = mock(UnsignedSdJwtVPToken.class); + when(mockToken.getUuidToUnsignedKBT()).thenReturn(uuidToKBT); + + KeyPair mockKeyPair = mock(KeyPair.class); + JWK mockJwk = mock(JWK.class); + when(keyPairService.getKeyPairFromDB(eq("wallet-1"), eq("base64Key"), eq(SigningAlgorithm.ES256))) + .thenReturn(mockKeyPair); + when(jwsSigner.sign(any(JWSHeader.class), any(byte[].class))).thenReturn(Base64URL.encode("sig")); + + try (MockedStatic mockedSigningKeyUtil = mockStatic(SigningKeyUtil.class)) { + mockedSigningKeyUtil.when(() -> SigningKeyUtil.generateJwk(SigningAlgorithm.ES256, mockKeyPair)).thenReturn(mockJwk); + mockedSigningKeyUtil.when(() -> SigningKeyUtil.createSigner(SigningAlgorithm.ES256, mockJwk)).thenReturn(jwsSigner); + + SdJwtVPTokenSigningResult result = (SdJwtVPTokenSigningResult) method.invoke( + walletPresentationService, mockToken, "wallet-1", "base64Key"); + + // Two credentials share ES256 -> the key pair is fetched only once (signer is cached) + verify(keyPairService, times(1)).getKeyPairFromDB("wallet-1", "base64Key", SigningAlgorithm.ES256); + assertEquals(2, result.getUuidToKbJWTSignature().size()); + } + } } diff --git a/src/test/java/io/mosip/mimoto/util/factory/Ed25519AlgorithmHandlerTest.java b/src/test/java/io/mosip/mimoto/util/factory/Ed25519AlgorithmHandlerTest.java index 3132b764f..d4d66015b 100644 --- a/src/test/java/io/mosip/mimoto/util/factory/Ed25519AlgorithmHandlerTest.java +++ b/src/test/java/io/mosip/mimoto/util/factory/Ed25519AlgorithmHandlerTest.java @@ -14,6 +14,7 @@ import java.nio.charset.StandardCharsets; import java.security.KeyFactory; import java.security.KeyPair; +import java.util.Set; import static org.junit.Assert.*; @@ -110,5 +111,17 @@ public void shouldThrowExceptionWhenCreateJWKWithNonEdKeyPair() throws Exception handler.createJWK(rsaKeyPair); } + @Test + public void shouldSupportBothEd25519AndEdDSAAlgorithms() throws Exception { + KeyPair keyPair = handler.generateKeyPair(); + JWK jwk = handler.createJWK(keyPair); + JWSSigner signer = handler.createSigner(jwk); + + Set supported = signer.supportedJWSAlgorithms(); + assertTrue("signer must declare Ed25519 (pre-standard Nimbus name)", supported.contains(JWSAlgorithm.Ed25519)); + assertTrue("signer must declare EdDSA (IANA RFC 8037 name used in KB-JWT alg header)", supported.contains(JWSAlgorithm.EdDSA)); + assertEquals(2, supported.size()); + } + } From 7a0fb342997d2483ca929eafbf65882882c4b1a2 Mon Sep 17 00:00:00 2001 From: abhip2565 Date: Mon, 13 Jul 2026 13:11:05 +0530 Subject: [PATCH 859/860] feat(dpop): add v2 token endpoint with DPoP header passthrough (#1097) * feat(dpop): add v2 token endpoint that passes the AS error through as-is Add POST /v2/get-token/{issuer} so the wallet's DPoP (RFC 9449) token exchange via the mimoto proxy receives the authorization server response untouched: - Accept an optional DPoP request header and forward it to the AS token endpoint. - Return the AS response as a raw ResponseEntity, passing the status, body and headers (including DPoP-Nonce and WWW-Authenticate) through as-is on both success and error, so a use_dpop_nonce challenge reaches the wallet for the nonce retry. - The existing v1 endpoint behaviour is unchanged. Signed-off-by: abhip2565 * fix: add NoArgsConstructor to CredentialIssuerConfiguration and explicit PathVariable name in IdpController to fix failing tests Signed-off-by: abhip2565 * fix: strip Transfer-Encoding header in getTokenV2 response Copying upstream response headers including Transfer-Encoding: chunked caused double chunked encoding when Tomcat also applied its own chunked encoding, resulting in HTTP 502 from reverse proxies. Filter out Transfer-Encoding from forwarded headers to fix this. Signed-off-by: abhip2565 * fix: strip all hop-by-hop headers in getTokenV2 response Per RFC 7230, hop-by-hop headers (Transfer-Encoding, Connection, Keep-Alive, TE, Trailer, Upgrade, Proxy-Authenticate, Proxy-Authorization) must not be forwarded by proxies. Previously only Transfer-Encoding was stripped. Now all hop-by-hop headers are filtered to be fully RFC-compliant. Signed-off-by: abhip2565 * revert: restore mosip.mimoto.database.hostname property name Revert inji.mimoto.database.hostname back to mosip.mimoto.database.hostname to avoid breaking existing production deployments. Signed-off-by: abhip2565 * refactor: extract token response header filtering Signed-off-by: abhip2565 * fix: preserve configured issuer token endpoints Signed-off-by: abhip2565 * fix: keep default config changes scoped to v2 token endpoint Signed-off-by: abhip2565 * fix: address v2 token review comments Signed-off-by: abhip2565 * chore(api-test): bump up api test version to 1.6.0 Signed-off-by: abhip2565 --------- Signed-off-by: abhip2565 --- api-test/pom.xml | 2 +- .../constant/SwaggerLiteralConstants.java | 2 + .../mimoto/controller/IdpController.java | 123 ++++++++++++++++++ .../mimoto/CredentialIssuerConfiguration.java | 2 +- .../io/mosip/mimoto/service/IdpService.java | 10 +- .../mimoto/service/impl/IdpServiceImpl.java | 104 ++++++++++++--- .../service/impl/IssuersServiceImpl.java | 8 +- .../resources/application-default.properties | 4 +- .../mimoto/controller/IdpControllerTest.java | 95 ++++++++++++++ .../mosip/mimoto/service/IdpServiceTest.java | 111 ++++++++++++++-- .../mimoto/service/IssuersServiceTest.java | 15 ++- 11 files changed, 430 insertions(+), 46 deletions(-) diff --git a/api-test/pom.xml b/api-test/pom.xml index 80ef482a8..4d7c49bab 100644 --- a/api-test/pom.xml +++ b/api-test/pom.xml @@ -68,7 +68,7 @@ io.mosip.testrig.apitest.commons apitest-commons - 1.5.0-SNAPSHOT + 1.6.0 diff --git a/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java b/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java index cd3ca106d..a062b02eb 100644 --- a/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java +++ b/src/main/java/io/mosip/mimoto/constant/SwaggerLiteralConstants.java @@ -39,6 +39,8 @@ public class SwaggerLiteralConstants { public static final String IDP_WALLET_BINDING_DESCRIPTION = "This endpoint allow you to perform the wallet binding"; public static final String IDP_GET_TOKEN_SUMMARY = "Retrieve accessToken for OIDC flow"; public static final String IDP_GET_TOKEN_DESCRIPTION = "This endpoint allow you to retrieve the access token in exchange for authorization code"; + public static final String IDP_GET_TOKEN_V2_SUMMARY = "Retrieve accessToken for OIDC flow with DPoP support"; + public static final String IDP_GET_TOKEN_V2_DESCRIPTION = "This endpoint allows you to retrieve access token in exchange for authorization code and return the response received from authorization server as is"; /* Issuers Controller */ public static final String ISSUERS_NAME = "Issuers"; diff --git a/src/main/java/io/mosip/mimoto/controller/IdpController.java b/src/main/java/io/mosip/mimoto/controller/IdpController.java index 5557dd7df..e918d9ad5 100644 --- a/src/main/java/io/mosip/mimoto/controller/IdpController.java +++ b/src/main/java/io/mosip/mimoto/controller/IdpController.java @@ -7,6 +7,7 @@ import io.mosip.mimoto.dto.idp.TokenResponseDTO; import io.mosip.mimoto.dto.mimoto.*; import io.mosip.mimoto.exception.IdpException; +import io.mosip.mimoto.exception.InvalidRequestException; import io.mosip.mimoto.exception.PlatformErrorMessages; import io.mosip.mimoto.service.IdpService; import io.mosip.mimoto.service.RestClientService; @@ -21,20 +22,35 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; +import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; import jakarta.validation.Valid; + +import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; @RestController @Slf4j @Tag(name = SwaggerLiteralConstants.IDP_NAME, description = SwaggerLiteralConstants.IDP_DESCRIPTION) public class IdpController { private static final boolean USE_BEARER_TOKEN = true; + private static final String DPOP_HEADER = "DPoP"; + private static final Set HOP_BY_HOP_HEADERS = Set.of( + HttpHeaders.TRANSFER_ENCODING, + HttpHeaders.CONNECTION, + "Keep-Alive", + "Proxy-Authenticate", + "Proxy-Authorization", + "TE", + "Trailer", + HttpHeaders.UPGRADE + ); private final RestClientService restClientService; @@ -131,4 +147,111 @@ public ResponseEntity getToken(@RequestParam Map params, return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(responseWrapper); } } + + @Operation( + summary = SwaggerLiteralConstants.IDP_GET_TOKEN_V2_SUMMARY, + description = SwaggerLiteralConstants.IDP_GET_TOKEN_V2_DESCRIPTION + ) + @ApiResponses({ + @ApiResponse( + responseCode = "200", + description = "Token response from authorization server", + content = @Content( + mediaType = MediaType.APPLICATION_JSON_VALUE, + schema = @Schema(implementation = TokenResponseDTO.class) + ) + ), + @ApiResponse( + responseCode = "400", + description = "Authorization server error response returned as-is or invalid request detected by Mimoto", + content = @Content( + mediaType = MediaType.APPLICATION_JSON_VALUE, + schema = @Schema( + example = "{\"error\":\"invalid_request\",\"error_description\":\"Invalid token request\"}" + ) + ) + ), + @ApiResponse( + responseCode = "401", + description = "Authorization server unauthorized response returned as-is", + content = @Content( + mediaType = MediaType.APPLICATION_JSON_VALUE, + schema = @Schema( + example = "{\"error\":\"invalid_client\",\"error_description\":\"Client authentication failed\"}" + ) + ) + ), + @ApiResponse( + responseCode = "500", + description = "Internal Mimoto error before receiving authorization server response", + content = @Content( + mediaType = MediaType.APPLICATION_JSON_VALUE, + schema = @Schema( + example = "{\"error\":\"MIMOTO-XXX\",\"error_description\":\"Unable to fetch token\"}" + ) + ) + ) + }) + @PostMapping( + value = "/v2/get-token/{issuer}", + consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, + produces = MediaType.APPLICATION_JSON_VALUE + ) + public ResponseEntity getTokenV2(@RequestParam Map params, + @PathVariable(name = "issuer") String issuer, + @RequestHeader(value = DPOP_HEADER, required = false) String dpopProof) { + log.info("Reached the getTokenV2 Controller for Issuer {}", issuer); + + try { + Map tokenParams = new HashMap<>(params); + tokenParams.put("issuer", issuer); + + ResponseEntity response = idpService.getTokenResponseV2(tokenParams, dpopProof); + + return ResponseEntity + .status(response.getStatusCode()) + .headers(getForwardableHeaders(response.getHeaders())) + .body(response.getBody()); + + } catch (InvalidRequestException ex) { + log.error("Invalid token request: ", ex); + + String[] errorObj = Utilities.handleExceptionWithErrorCode( + ex, + PlatformErrorMessages.MIMOTO_FETCHING_TOKEN_EXCEPTION.getCode() + ); + + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .contentType(MediaType.APPLICATION_JSON) + .body(Map.of( + "error", errorObj[0], + "error_description", errorObj[1] + )); + + } catch (Exception ex) { + log.error("Exception occurred while invoking the token endpoint: ", ex); + + String[] errorObj = Utilities.handleExceptionWithErrorCode( + ex, + PlatformErrorMessages.MIMOTO_FETCHING_TOKEN_EXCEPTION.getCode() + ); + + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .contentType(MediaType.APPLICATION_JSON) + .body(Map.of( + "error", errorObj[0], + "error_description", errorObj[1] + )); + } + } + + private static HttpHeaders getForwardableHeaders(HttpHeaders sourceHeaders) { + HttpHeaders forwardHeaders = new HttpHeaders(); + forwardHeaders.putAll(sourceHeaders); + + HOP_BY_HOP_HEADERS.forEach(forwardHeaders::remove); + sourceHeaders.getConnection().forEach(forwardHeaders::remove); + + return forwardHeaders; + } } diff --git a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerConfiguration.java b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerConfiguration.java index f996914a2..8d0473afe 100644 --- a/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerConfiguration.java +++ b/src/main/java/io/mosip/mimoto/dto/mimoto/CredentialIssuerConfiguration.java @@ -20,4 +20,4 @@ public class CredentialIssuerConfiguration { @JsonIgnoreProperties({"token_endpoint"}) private AuthorizationServerWellKnownResponse authorizationServerWellKnownResponse; -} \ No newline at end of file +} diff --git a/src/main/java/io/mosip/mimoto/service/IdpService.java b/src/main/java/io/mosip/mimoto/service/IdpService.java index 152512850..70acec149 100644 --- a/src/main/java/io/mosip/mimoto/service/IdpService.java +++ b/src/main/java/io/mosip/mimoto/service/IdpService.java @@ -1,25 +1,27 @@ package io.mosip.mimoto.service; -import io.mosip.mimoto.dto.IssuerDTO; import io.mosip.mimoto.dto.VerifiableCredentialRequestDTO; import io.mosip.mimoto.dto.idp.TokenResponseDTO; -import io.mosip.mimoto.dto.mimoto.CredentialIssuerConfiguration; import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.exception.AuthorizationServerWellknownResponseException; +import io.mosip.mimoto.exception.InvalidIssuerIdException; import io.mosip.mimoto.exception.InvalidWellknownResponseException; import io.mosip.mimoto.exception.IssuerOnboardingException; import org.springframework.http.HttpEntity; +import org.springframework.http.ResponseEntity; import org.springframework.util.MultiValueMap; import java.io.IOException; import java.util.Map; public interface IdpService { - HttpEntity> constructGetTokenRequest(Map params, IssuerDTO issuerDTO, String authorizationAudience) throws IOException, IssuerOnboardingException; + HttpEntity> constructGetTokenRequest(Map params, String issuerId, String tokenEndpoint) throws IOException, IssuerOnboardingException, ApiNotAccessibleException, InvalidIssuerIdException; - String getTokenEndpoint(CredentialIssuerConfiguration credentialIssuerConfiguration); + String getTokenEndpoint(String issuerId) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException; TokenResponseDTO getTokenResponse(Map params) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException; TokenResponseDTO getTokenResponse(VerifiableCredentialRequestDTO verifiableCredentialRequest) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException; + + ResponseEntity getTokenResponseV2(Map params, String dpopProof) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException, IssuerOnboardingException; } diff --git a/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java index 3e0d635db..7b9becf50 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IdpServiceImpl.java @@ -12,11 +12,15 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; +import org.springframework.util.StringUtils; import org.springframework.web.client.HttpClientErrorException; +import org.springframework.web.client.HttpStatusCodeException; import org.springframework.web.client.RestTemplate; import org.springframework.http.HttpStatus; @@ -29,6 +33,8 @@ @Service public class IdpServiceImpl implements IdpService { + private static final String DPOP_HEADER = "DPoP"; + @Value("${mosip.oidc.client.assertion.type}") String clientAssertionType; @@ -54,12 +60,14 @@ public IdpServiceImpl(JoseUtil joseUtil, @Qualifier("restTemplate") RestTemplate } @Override - public HttpEntity> constructGetTokenRequest(Map params, IssuerDTO issuerDTO, String authorizationAudience) throws IOException, IssuerOnboardingException { + public HttpEntity> constructGetTokenRequest(Map params, String issuerId, String tokenEndpoint) throws IOException, IssuerOnboardingException, ApiNotAccessibleException, InvalidIssuerIdException { HttpHeaders headers = new HttpHeaders(); MultiValueMap map = new LinkedMultiValueMap<>(); + validateCodeVerifier(params.get("code_verifier")); + IssuerDTO issuerDTO = issuersService.getIssuerDetails(issuerId); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); - String clientAssertion = joseUtil.getJWT(issuerDTO.getClient_id(), keyStorePath, fileName, issuerDTO.getClient_alias(), cyptoPassword, authorizationAudience); + String clientAssertion = joseUtil.getJWT(issuerDTO.getClient_id(), keyStorePath, fileName, issuerDTO.getClient_alias(), cyptoPassword, tokenEndpoint); map.add("code", params.get("code")); map.add("client_id", issuerDTO.getClient_id()); map.add("grant_type", params.get("grant_type")); @@ -72,7 +80,12 @@ public HttpEntity> constructGetTokenRequest(Map params) throws ApiNotAccessibleException, IOException, AuthorizationServerWellknownResponseException, InvalidWellknownResponseException { - try{ + public TokenResponseDTO getTokenResponse(Map params) + throws ApiNotAccessibleException, IOException, + AuthorizationServerWellknownResponseException, + InvalidWellknownResponseException { + try { String issuerId = params.get("issuer"); - String codeVerifier = params.get("code_verifier"); - if (codeVerifier == null || !codeVerifier.matches("^[A-Za-z0-9\\-._~]{43,128}$")) { - throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Invalid code verifier."); - } + String tokenEndpoint = getTokenEndpoint(issuerId); + + HttpEntity> request = + constructGetTokenRequest(params, issuerId, tokenEndpoint); + + TokenResponseDTO response = restTemplate.postForObject( + tokenEndpoint, + request, + TokenResponseDTO.class + ); - IssuerDTO issuerDTO = issuersService.getIssuerDetails(issuerId); - CredentialIssuerConfiguration credentialIssuerConfiguration = issuersService.getIssuerConfiguration(issuerId); - String tokenEndpoint = getTokenEndpoint(credentialIssuerConfiguration); - HttpEntity> request = constructGetTokenRequest(params, issuerDTO, tokenEndpoint); - TokenResponseDTO response = restTemplate.postForObject(tokenEndpoint, request, TokenResponseDTO.class); if (response == null) { throw new IdpException("Exception occurred while performing the authorization"); } + return response; + } catch (InvalidIssuerIdException e) { throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Invalid issuer"); + } catch (HttpClientErrorException e) { if (e.getStatusCode() == HttpStatus.BAD_REQUEST) { - throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Request failed due to invalid input detected by an external service."); - } else { - throw e; + throw new InvalidRequestException( + INVALID_REQUEST.getErrorCode(), + "Request failed due to invalid input detected by an external service." + ); } + throw e; } } + + @Override + public ResponseEntity getTokenResponseV2(Map params, String dpopProof) + throws ApiNotAccessibleException, IOException, + AuthorizationServerWellknownResponseException, + InvalidWellknownResponseException, + IssuerOnboardingException { + + try { + String issuerId = params.get("issuer"); + String tokenEndpoint = getTokenEndpoint(issuerId); + + HttpEntity> request = + constructGetTokenRequest(params, issuerId, tokenEndpoint); + + HttpHeaders headers = new HttpHeaders(); + headers.addAll(request.getHeaders()); + + if (StringUtils.hasText(dpopProof)) { + headers.set(DPOP_HEADER, dpopProof); + } + + HttpEntity> requestWithDpop = + new HttpEntity<>(request.getBody(), headers); + + return restTemplate.exchange( + tokenEndpoint, + HttpMethod.POST, + requestWithDpop, + String.class + ); + + } catch (InvalidIssuerIdException e) { + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Invalid issuer"); + + } catch (HttpStatusCodeException e) { + return ResponseEntity.status(e.getStatusCode()) + .headers(e.getResponseHeaders()) + .body(e.getResponseBodyAsString()); + } + } + + private void validateCodeVerifier(String codeVerifier) { + if (codeVerifier == null || !codeVerifier.matches("^[A-Za-z0-9\\-._~]{43,128}$")) { + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Invalid code verifier."); + } + } + private Map convertVerifiableCredentialRequestToMap(VerifiableCredentialRequestDTO verifiableCredentialRequest) { Map params = new HashMap<>(); params.put("code", verifiableCredentialRequest.getCode()); diff --git a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java index f8833b39e..9b00717dd 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/IssuersServiceImpl.java @@ -105,7 +105,11 @@ public IssuersDTO getAllIssuers() throws ApiNotAccessibleException, IOException issuersDTO.getIssuers().stream() .filter(java.util.Objects::nonNull) - .forEach(issuer -> issuer.setToken_endpoint(baseTokenEndpoint + issuer.getIssuer_id())); + .forEach(issuer -> { + if (StringUtils.isBlank(issuer.getToken_endpoint())) { + issuer.setToken_endpoint(baseTokenEndpoint + issuer.getIssuer_id()); + } + }); } return issuersDTO; @@ -187,4 +191,4 @@ private IssuerV2DTO toIssuerV2DTO(IssuerDTO issuer) { return issuerV2DTO; } -} \ No newline at end of file +} diff --git a/src/main/resources/application-default.properties b/src/main/resources/application-default.properties index a9bb97fd2..54a145d5e 100644 --- a/src/main/resources/application-default.properties +++ b/src/main/resources/application-default.properties @@ -175,7 +175,7 @@ spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect # List of URLs that can be accessed without any user authentication by Identity Provider mosip.security.ignore-auth-urls=/safetynet/**,/actuator/**,/swagger-ui/**,/v3/api-docs/**,\ - /allProperties,/credentials/**,/credentialshare/**,/binding-otp,/wallet-binding,/get-token/**,\ + /allProperties,/credentials/**,/credentialshare/**,/binding-otp,/wallet-binding,/get-token/**,/v2/get-token/**,\ /issuers,/issuers/**,/v2/issuers,/v2/issuers/**,/authorize,/req/otp,/vid,/req/auth/**,/req/individualId/otp,/aid/get-individual-id,\ /verifiers, /auth/*/token-login @@ -185,7 +185,7 @@ mosip.security.ignore-auth-urls=/safetynet/**,/actuator/**,/swagger-ui/**,/v3/ap # List of URLs that are excluded from CSRF protection. These URLs can still require authentication. # OAuth2 endpoints and public endpoints are typically excluded from CSRF protection. mosip.security.csrf-ignore-urls=/oauth2/**,/logout,/safetynet/**,/credentials/**,/credentialshare/**,/binding-otp,/wallet-binding,\ - /get-token/**,/req/otp,/vid,/req/auth/**,/req/individualId/otp,/auth/*/token-login + /get-token/**,/v2/get-token/**,/req/otp,/vid,/req/auth/**,/req/individualId/otp,/auth/*/token-login # Inji mobile wallet configuration # This template defines the list of the fields of the downloaded verifiable credential will be included in the event files when generating different documents diff --git a/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java b/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java index 65b609189..5fb7fa58e 100644 --- a/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/IdpControllerTest.java @@ -30,6 +30,11 @@ import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import org.springframework.http.HttpHeaders; +import org.springframework.http.ResponseEntity; +import io.mosip.mimoto.exception.InvalidRequestException; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.header; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.header; @RunWith(SpringRunner.class) @SpringBootTest(classes = IdpController.class) @@ -159,4 +164,94 @@ public void shouldReturnBadRequestWithErrorIfTokenResponseIsNull() throws Except .andExpect(jsonPath("$.errors[0].errorCode").value("RESIDENT-APP-034")) .andExpect(jsonPath("$.errors[0].errorMessage").value("Exception occurred while performing the authorization")); } + + @Test + public void shouldReturnTokenResponseForV2ValidIssuerAndParams() throws Exception { + String issuer = "test-issuer"; + String responseBody = "{\"access_token\":\"test-access-token\",\"token_type\":\"DPoP\",\"expires_in\":12345}"; + + HttpHeaders responseHeaders = new HttpHeaders(); + responseHeaders.add("DPoP-Nonce", "test-nonce"); + + Mockito.when(idpService.getTokenResponseV2(Mockito.anyMap(), Mockito.eq("test-dpop-proof"))) + .thenReturn(ResponseEntity.ok() + .headers(responseHeaders) + .contentType(MediaType.APPLICATION_JSON) + .body(responseBody)); + + mockMvc.perform(post("/v2/get-token/{issuer}", issuer) + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .header("DPoP", "test-dpop-proof") + .param("grant_type", "authorization_code") + .param("code", "test-code") + .param("redirect_uri", "test-redirect_uri") + .param("code_verifier", "test-code_verifier")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.access_token").value("test-access-token")) + .andExpect(jsonPath("$.token_type").value("DPoP")) + .andExpect(jsonPath("$.expires_in").value(12345)) + .andExpect(header().string("DPoP-Nonce", "test-nonce")); + } + + @Test + public void shouldReturnAuthorizationServerErrorAsIsForV2() throws Exception { + String issuer = "test-issuer"; + String errorBody = "{\"error\":\"use_dpop_nonce\",\"error_description\":\"DPoP nonce required\"}"; + + HttpHeaders responseHeaders = new HttpHeaders(); + responseHeaders.add("DPoP-Nonce", "server-nonce-123"); + + Mockito.when(idpService.getTokenResponseV2(Mockito.anyMap(), Mockito.eq("stale-dpop-proof"))) + .thenReturn(ResponseEntity.status(401) + .headers(responseHeaders) + .contentType(MediaType.APPLICATION_JSON) + .body(errorBody)); + + mockMvc.perform(post("/v2/get-token/{issuer}", issuer) + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .header("DPoP", "stale-dpop-proof") + .param("grant_type", "authorization_code") + .param("code", "test-code") + .param("redirect_uri", "test-redirect_uri") + .param("code_verifier", "test-code_verifier")) + .andExpect(status().isUnauthorized()) + .andExpect(header().string("DPoP-Nonce", "server-nonce-123")) + .andExpect(jsonPath("$.error").value("use_dpop_nonce")) + .andExpect(jsonPath("$.error_description").value("DPoP nonce required")); + } + + @Test + public void shouldReturnInternalServerErrorForV2InternalException() throws Exception { + String issuer = "test-issuer"; + + Mockito.when(idpService.getTokenResponseV2(Mockito.anyMap(), Mockito.any())) + .thenThrow(new RuntimeException("Unexpected error")); + + mockMvc.perform(post("/v2/get-token/{issuer}", issuer) + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .param("grant_type", "authorization_code") + .param("code", "test-code") + .param("redirect_uri", "test-redirect_uri") + .param("code_verifier", "test-code_verifier")) + .andExpect(status().isInternalServerError()) + .andExpect(jsonPath("$.error").exists()) + .andExpect(jsonPath("$.error_description").exists()); + } + @Test + public void shouldReturnBadRequestForV2InvalidRequestException() throws Exception { + String issuer = "test-issuer"; + + Mockito.when(idpService.getTokenResponseV2(Mockito.anyMap(), Mockito.any())) + .thenThrow(new InvalidRequestException("invalid_request", "Invalid issuer")); + + mockMvc.perform(post("/v2/get-token/{issuer}", issuer) + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .param("grant_type", "authorization_code") + .param("code", "test-code") + .param("redirect_uri", "test-redirect_uri") + .param("code_verifier", "test-code_verifier")) + .andExpect(status().isBadRequest()) + .andExpect(jsonPath("$.error").exists()) + .andExpect(jsonPath("$.error_description").exists()); + } } \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/IdpServiceTest.java b/src/test/java/io/mosip/mimoto/service/IdpServiceTest.java index dc73fc9df..63d9fd455 100644 --- a/src/test/java/io/mosip/mimoto/service/IdpServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/IdpServiceTest.java @@ -18,8 +18,10 @@ import org.mockito.junit.MockitoJUnitRunner; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; import org.springframework.util.MultiValueMap; import org.springframework.web.client.HttpClientErrorException; import org.springframework.web.client.RestTemplate; @@ -56,7 +58,6 @@ public class IdpServiceTest { @Mock private TokenResponseDTO tokenResponseDTO; - private IssuerDTO issuerDTO; private Map params; private final String authorizationAudience = "https://example.com/auth"; @@ -64,24 +65,26 @@ public class IdpServiceTest { @Before public void setUp() throws IOException { - issuerDTO = new IssuerDTO(); - issuerDTO.setClient_id("client123"); - issuerDTO.setClient_alias("clientAlias"); - params = new HashMap<>(); + params.put("issuer", "issuer123"); params.put("code", "sampleCode"); params.put("grant_type", "authorization_code"); params.put("redirect_uri", "https://myapp.com/callback"); - params.put("code_verifier", "verifier123"); + params.put("code_verifier", "dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk"); } @Test public void shouldConstructTokenRequestForTheValidIssuerAndParams() throws Exception { + IssuerDTO issuerDTO = new IssuerDTO(); + issuerDTO.setClient_id("client123"); + issuerDTO.setClient_alias("clientAlias"); + + when(issuersService.getIssuerDetails("issuer123")).thenReturn(issuerDTO); when(joseUtil.getJWT(eq("client123"), any(), any(), eq("clientAlias"), any(), eq(authorizationAudience))) .thenReturn("jwt-token"); HttpEntity> httpEntity = - idpService.constructGetTokenRequest(params, issuerDTO, authorizationAudience); + idpService.constructGetTokenRequest(params, "issuer123", authorizationAudience); HttpHeaders headers = httpEntity.getHeaders(); MultiValueMap body = httpEntity.getBody(); @@ -93,29 +96,36 @@ public void shouldConstructTokenRequestForTheValidIssuerAndParams() throws Excep () -> assertEquals("authorization_code", body.getFirst("grant_type")), () -> assertEquals("https://myapp.com/callback", body.getFirst("redirect_uri")), () -> assertEquals("jwt-token", body.getFirst("client_assertion")), - () -> assertEquals("verifier123", body.getFirst("code_verifier")) + () -> assertEquals("dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk", body.getFirst("code_verifier")) ); } @Test - public void shouldThrowExceptionIfThereIsAnyErrorOccurredWhileFetchingP12File() throws IOException { + public void shouldThrowExceptionIfThereIsAnyErrorOccurredWhileFetchingP12File() throws Exception { + IssuerDTO issuerDTO = new IssuerDTO(); + issuerDTO.setClient_id("client123"); + issuerDTO.setClient_alias("clientAlias"); + String expectedExceptionMsg = "RESIDENT-APP-037 --> Private Key Entry is Missing for the alias clientAlias"; + when(issuersService.getIssuerDetails("issuer123")).thenReturn(issuerDTO); when(joseUtil.getJWT(eq("client123"), any(), any(), eq("clientAlias"), any(), eq(authorizationAudience))) .thenThrow(new IssuerOnboardingException("Private Key Entry is Missing for the alias clientAlias")); IssuerOnboardingException actualException = assertThrows(IssuerOnboardingException.class, () -> - idpService.constructGetTokenRequest(params, issuerDTO, authorizationAudience)); + idpService.constructGetTokenRequest(params, "issuer123", authorizationAudience)); assertEquals(expectedExceptionMsg, actualException.getMessage()); } @Test - public void shouldReturnTokenEndpointFromCredentialIssuerConfigurationResponse() { + public void shouldReturnTokenEndpointFromCredentialIssuerConfigurationResponse() throws Exception { CredentialIssuerConfiguration credentialIssuerConfiguration = getCredentialIssuerConfigurationResponseDto("issuer1", "CredentialType1", List.of()); String expectedTokenEndpoint = "https://dev/token"; - String actualTokenEndpoint = idpService.getTokenEndpoint(credentialIssuerConfiguration); + when(issuersService.getIssuerConfiguration("issuer1")).thenReturn(credentialIssuerConfiguration); + + String actualTokenEndpoint = idpService.getTokenEndpoint("issuer1"); assertEquals(expectedTokenEndpoint, actualTokenEndpoint); } @@ -239,4 +249,79 @@ public void shouldReturnTokenResponseForVerifiableCredentialRequestDTO() throws assertNotNull(response); assertEquals(tokenResponseDTO, response); } -} \ No newline at end of file + + @Test + public void shouldPassThroughSuccessResponseAsIsForV2TokenResponse() throws Exception { + String tokenEndpoint = "https://as.example.com/token"; + String body = "{\"access_token\":\"abc\",\"token_type\":\"DPoP\"}"; + ResponseEntity asResponse = ResponseEntity.status(HttpStatus.OK).body(body); + + setupV2TokenEndpoint(tokenEndpoint); + when(restTemplate.exchange(eq(tokenEndpoint), eq(HttpMethod.POST), any(), eq(String.class))) + .thenReturn(asResponse); + + ResponseEntity result = idpService.getTokenResponseV2(params, "dpop-proof-jwt"); + + assertEquals(HttpStatus.OK, result.getStatusCode()); + assertEquals(body, result.getBody()); + } + + @Test + public void shouldPassThroughUseDpopNonceErrorWithNonceHeaderAsIsForV2TokenResponse() throws Exception { + String tokenEndpoint = "https://as.example.com/token"; + String errorBody = "{\"error\":\"use_dpop_nonce\",\"error_description\":\"nonce required\"}"; + HttpHeaders responseHeaders = new HttpHeaders(); + responseHeaders.add("DPoP-Nonce", "server-issued-nonce-123"); + HttpClientErrorException exception = HttpClientErrorException.create( + HttpStatus.BAD_REQUEST, "Bad Request", responseHeaders, + errorBody.getBytes(), null); + + setupV2TokenEndpoint(tokenEndpoint); + when(restTemplate.exchange(eq(tokenEndpoint), eq(HttpMethod.POST), any(), eq(String.class))) + .thenThrow(exception); + + ResponseEntity result = idpService.getTokenResponseV2(params, "dpop-proof-jwt"); + + assertEquals(HttpStatus.BAD_REQUEST, result.getStatusCode()); + assertEquals(errorBody, result.getBody()); + assertEquals("server-issued-nonce-123", result.getHeaders().getFirst("DPoP-Nonce")); + } + + @Test + public void shouldPassThroughWwwAuthenticateHeaderOnUnauthorizedForV2TokenResponse() throws Exception { + String tokenEndpoint = "https://as.example.com/token"; + String errorBody = "{\"error\":\"invalid_dpop_proof\"}"; + HttpHeaders responseHeaders = new HttpHeaders(); + responseHeaders.add("WWW-Authenticate", "DPoP error=\"invalid_dpop_proof\""); + responseHeaders.add("DPoP-Nonce", "nonce-on-401"); + HttpClientErrorException exception = HttpClientErrorException.create( + HttpStatus.UNAUTHORIZED, "Unauthorized", responseHeaders, + errorBody.getBytes(), null); + + setupV2TokenEndpoint(tokenEndpoint); + when(restTemplate.exchange(eq(tokenEndpoint), eq(HttpMethod.POST), any(), eq(String.class))) + .thenThrow(exception); + + ResponseEntity result = idpService.getTokenResponseV2(params, "dpop-proof-jwt"); + + assertEquals(HttpStatus.UNAUTHORIZED, result.getStatusCode()); + assertEquals(errorBody, result.getBody()); + assertEquals("DPoP error=\"invalid_dpop_proof\"", result.getHeaders().getFirst("WWW-Authenticate")); + assertEquals("nonce-on-401", result.getHeaders().getFirst("DPoP-Nonce")); + } + + private void setupV2TokenEndpoint(String tokenEndpoint) throws Exception { + IssuerDTO issuerDTO = new IssuerDTO(); + issuerDTO.setClient_id("client123"); + issuerDTO.setClient_alias("clientAlias"); + + when(issuersService.getIssuerDetails("issuer123")).thenReturn(issuerDTO); + when(issuersService.getIssuerConfiguration("issuer123")).thenReturn(credentialIssuerConfiguration); + when(credentialIssuerConfiguration.getAuthorizationServerWellKnownResponse()) + .thenReturn(authorizationServerWellKnownResponse); + when(authorizationServerWellKnownResponse.getTokenEndpoint()) + .thenReturn(tokenEndpoint); + when(joseUtil.getJWT(eq("client123"), any(), any(), eq("clientAlias"), any(), eq(tokenEndpoint))) + .thenReturn("jwt-token"); + } +} diff --git a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java index d12bec337..865ac872d 100644 --- a/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/IssuersServiceTest.java @@ -68,6 +68,7 @@ public void setUp() throws Exception { credentialIssuerHostUrl = "https://issuer.env.net"; issuers.setIssuers(List.of(getIssuerConfigDTO("Issuer3"), getIssuerConfigDTO("Issuer4"))); + issuers.getIssuers().forEach(i -> i.setToken_endpoint(null)); issuersConfigJsonValue = new Gson().toJson(issuers); Mockito.when(utilities.getIssuersConfigJsonValue()).thenReturn(issuersConfigJsonValue); Mockito.when(objectMapper.readValue(issuersConfigJsonValue, IssuersDTO.class)).thenReturn(issuers); @@ -86,6 +87,7 @@ public void setUp() throws Exception { @Test public void shouldReturnAllIssuersWhenSearchValueIsNull() throws ApiNotAccessibleException, IOException { issuers.setIssuers(List.of(getIssuerConfigDTO("Issuer1"), getIssuerConfigDTO("Issuer2"))); + issuers.getIssuers().forEach(i -> i.setToken_endpoint(null)); issuersConfigJsonValue = new Gson().toJson(issuers); Mockito.when(utilities.getIssuersConfigJsonValue()).thenReturn(issuersConfigJsonValue); Mockito.when(objectMapper.readValue(issuersConfigJsonValue, IssuersDTO.class)).thenReturn(issuers); @@ -102,6 +104,7 @@ public void shouldReturnAllIssuersWhenSearchValueIsNull() throws ApiNotAccessibl @Test public void shouldReturnMatchingIssuersWhenSearchValuePatternMatchesWithIssuerName() throws ApiNotAccessibleException, IOException { issuers.setIssuers(List.of(getIssuerConfigDTO("Issuer1"), getIssuerConfigDTO("Issuer2"))); + issuers.getIssuers().forEach(i -> i.setToken_endpoint(null)); issuersConfigJsonValue = new Gson().toJson(issuers); Mockito.when(utilities.getIssuersConfigJsonValue()).thenReturn(issuersConfigJsonValue); Mockito.when(objectMapper.readValue(issuersConfigJsonValue, IssuersDTO.class)).thenReturn(issuers); @@ -161,6 +164,8 @@ public void shouldReturnOnlyEnabledIssuers() throws IOException, ApiNotAccessibl IssuersDTO issuers = new IssuersDTO(); IssuerDTO enabledIssuer = getIssuerConfigDTO("Issuer1"); IssuerDTO disabledIssuer = getIssuerConfigDTO("Issuer2"); + enabledIssuer.setToken_endpoint(null); + disabledIssuer.setToken_endpoint(null); disabledIssuer.setEnabled("false"); issuersConfigJsonValue = new Gson().toJson(issuers); issuers.setIssuers(List.of(enabledIssuer, disabledIssuer)); @@ -442,10 +447,9 @@ public void shouldGenerateTokenEndpointWhenMissingInV1() throws Exception { IssuersDTO result = serviceWithConfig.getAllIssuers(); String expectedGeneratedUrlIssuerA = publicUrl + context + getTokenPath + issuerIdMissing; - String expectedGeneratedUrlIssuerB = publicUrl + context + getTokenPath + issuerIdExisting; assertEquals(expectedGeneratedUrlIssuerA, result.getIssuers().get(0).getToken_endpoint()); - assertEquals(expectedGeneratedUrlIssuerB, result.getIssuers().get(1).getToken_endpoint()); + assertEquals(existingUrl, result.getIssuers().get(1).getToken_endpoint()); } @Test @@ -460,7 +464,7 @@ public void shouldGenerateTokenEndpointWhenMissingInV2() throws Exception { String issuerIdMissing = "IssuerV2-Missing"; String issuerIdExisting = "Issuer-Existing"; - String existingUrl = "https://external-idp.com/token"; + String existingUrl = "https://external-idp.com/v2/get-token/Issuer-Existing"; IssuerDTO issuerA = getIssuerConfigDTO(issuerIdMissing); issuerA.setIssuer_id(issuerIdMissing); @@ -479,9 +483,8 @@ public void shouldGenerateTokenEndpointWhenMissingInV2() throws Exception { IssuersV2DTO result = serviceWithConfig.getIssuersV2DTO(); String expectedGeneratedUrlIssuerA = publicUrl + context + getTokenPath + issuerIdMissing; - String expectedGeneratedUrlIssuerB = publicUrl + context + getTokenPath + issuerIdExisting; assertEquals(expectedGeneratedUrlIssuerA, result.getIssuers().get(0).getTokenEndpoint()); - assertEquals(expectedGeneratedUrlIssuerB, result.getIssuers().get(1).getTokenEndpoint()); + assertEquals(existingUrl, result.getIssuers().get(1).getTokenEndpoint()); } -} \ No newline at end of file +} From cef2d47d43cbc322d1935f637a50c643703c7f8b Mon Sep 17 00:00:00 2001 From: Madhuravas reddy Date: Thu, 16 Jul 2026 11:26:54 +0530 Subject: [PATCH 860/860] feat(openid4vp): add OVP 1.0 DCQL wallet presentation support (#1096) * Added ovp 1.0, dcql support Signed-off-by: Madhuravas reddy * Remove selectedSdClaims from SubmitPresentationResponse Signed-off-by: Madhuravas reddy * pass trusted verifiers into WalletConfig using library defaults Signed-off-by: Madhuravas reddy * resolved claim_sets issue Signed-off-by: Madhuravas reddy * restore method comments in WalletPresentationServiceImpl Signed-off-by: Madhuravas reddy * test: expand unit tests for DCQL, wallet presentation, session, and OpenID4VP services Signed-off-by: Madhuravas reddy * Resolved code rabbit reviews Signed-off-by: Madhuravas reddy * Updated the postman collection Signed-off-by: Madhuravas reddy * Resolved code rabbit review comments Signed-off-by: Madhuravas reddy * fix: update WalletConfig and VPTokenSigningResult for inji-openid4vp Signed-off-by: Madhuravas reddy * build: upgrade apitest-commons dependency from 1.5.0-SNAPSHOT to 1.6.0 Signed-off-by: Madhuravas reddy * refactor: align DCQL matching with inji-openid4vp and OpenID4VP 1.0 Signed-off-by: Madhuravas reddy * disclose only queried SD claims in DCQL VP response Signed-off-by: Madhuravas reddy * refactor: detect DCQL VP requests from dcql_query in authorization request Signed-off-by: Madhuravas reddy * Fixed build failure issue Signed-off-by: Madhuravas reddy * Removed OVP-0.8.0-Mimoto-Changes.md file Signed-off-by: Madhuravas reddy * refactor(openid4vp): address PR review feedback for OVP 1.0 support Signed-off-by: Madhuravas reddy * refactor: use StringUtils.isBlank in credential matching validation Signed-off-by: Madhuravas reddy --------- Signed-off-by: Madhuravas reddy --- docs/OVP-1.0-Support.md | 462 ++++++ .../MIMOTO.postman_collection.json | 197 ++- pom.xml | 8 +- .../config/IssuersValidationConfig.java | 4 +- .../mimoto/constant/OpenID4VPConstants.java | 1 + .../WalletPresentationsController.java | 10 +- .../io/mosip/mimoto/dto/CredentialDTO.java | 2 + .../mosip/mimoto/dto/CredentialSetInfo.java | 25 + .../mimoto/dto/DcqlCredentialSelection.java | 26 + .../io/mosip/mimoto/dto/DcqlQueryGroup.java | 36 + .../mimoto/dto/DecryptedCredentialDTO.java | 6 + .../dto/MatchingCredentialsResponseDTO.java | 14 +- .../mosip/mimoto/dto/SelectedCredentials.java | 56 + .../dto/SubmitPresentationRequestDTO.java | 70 +- .../io/mosip/mimoto/dto/VPResponseDTO.java | 10 +- .../SelectedCredentialsDeserializer.java | 58 + .../mosip/mimoto/dto/openid/SpecVersion.java | 19 - .../dto/openid/SpecVersionDeserializer.java | 20 + .../dto/openid/SpecVersionSerializer.java | 16 + .../mosip/mimoto/dto/openid/VerifierDTO.java | 8 +- .../VerifiablePresentationSessionData.java | 4 +- .../SelectedCredentialsSerializer.java | 31 + .../impl/CredentialMatchingServiceImpl.java | 345 ++++- .../mimoto/service/impl/OpenID4VPService.java | 136 +- .../mimoto/service/impl/SessionManager.java | 7 +- .../impl/VcSdJwtCredentialFormatHandler.java | 79 +- .../impl/WalletPresentationServiceImpl.java | 1108 +++++++++----- .../util/AuthorizationRequestHelper.java | 34 + .../mosip/mimoto/util/DcqlClaimSetHelper.java | 245 +++ .../mimoto/util/DcqlCredentialSetHelper.java | 34 + .../mosip/mimoto/util/DcqlMatchingHelper.java | 179 +++ .../mimoto/util/SelectedSdClaimsUtil.java | 40 + .../controller/VerifiersControllerTest.java | 2 +- .../WalletPresentationsControllerTest.java | 32 +- .../CredentialMatchingServiceTest.java | 426 +++++- .../mimoto/service/OpenID4VPServiceTest.java | 180 ++- .../service/PresentationServiceTest.java | 4 +- .../mimoto/service/SessionManagerTest.java | 102 +- .../VcSdJwtCredentialFormatHandlerTest.java | 1 + .../WalletPresentationServiceTest.java | 1337 ++++++++++++++--- .../util/AuthorizationRequestHelperTest.java | 56 + .../mimoto/util/DcqlClaimSetHelperTest.java | 268 ++++ .../util/DcqlCredentialSetHelperTest.java | 45 + .../mimoto/util/DcqlMatchingHelperTest.java | 140 ++ .../mimoto/util/SelectedSdClaimsUtilTest.java | 48 + .../io/mosip/mimoto/util/TestUtilities.java | 16 +- 46 files changed, 5066 insertions(+), 881 deletions(-) create mode 100644 docs/OVP-1.0-Support.md create mode 100644 src/main/java/io/mosip/mimoto/dto/CredentialSetInfo.java create mode 100644 src/main/java/io/mosip/mimoto/dto/DcqlCredentialSelection.java create mode 100644 src/main/java/io/mosip/mimoto/dto/DcqlQueryGroup.java create mode 100644 src/main/java/io/mosip/mimoto/dto/SelectedCredentials.java create mode 100644 src/main/java/io/mosip/mimoto/dto/deserializer/SelectedCredentialsDeserializer.java delete mode 100644 src/main/java/io/mosip/mimoto/dto/openid/SpecVersion.java create mode 100644 src/main/java/io/mosip/mimoto/dto/openid/SpecVersionDeserializer.java create mode 100644 src/main/java/io/mosip/mimoto/dto/openid/SpecVersionSerializer.java create mode 100644 src/main/java/io/mosip/mimoto/dto/serializer/SelectedCredentialsSerializer.java create mode 100644 src/main/java/io/mosip/mimoto/util/AuthorizationRequestHelper.java create mode 100644 src/main/java/io/mosip/mimoto/util/DcqlClaimSetHelper.java create mode 100644 src/main/java/io/mosip/mimoto/util/DcqlCredentialSetHelper.java create mode 100644 src/main/java/io/mosip/mimoto/util/DcqlMatchingHelper.java create mode 100644 src/main/java/io/mosip/mimoto/util/SelectedSdClaimsUtil.java create mode 100644 src/test/java/io/mosip/mimoto/util/AuthorizationRequestHelperTest.java create mode 100644 src/test/java/io/mosip/mimoto/util/DcqlClaimSetHelperTest.java create mode 100644 src/test/java/io/mosip/mimoto/util/DcqlCredentialSetHelperTest.java create mode 100644 src/test/java/io/mosip/mimoto/util/DcqlMatchingHelperTest.java create mode 100644 src/test/java/io/mosip/mimoto/util/SelectedSdClaimsUtilTest.java diff --git a/docs/OVP-1.0-Support.md b/docs/OVP-1.0-Support.md new file mode 100644 index 000000000..ca807bfee --- /dev/null +++ b/docs/OVP-1.0-Support.md @@ -0,0 +1,462 @@ +# OpenID4VP 1.0 support in Inji Web Wallet + +This document describes how **Inji Web Wallet clients and integrators** should use Mimoto’s presentation APIs when the verifier sends an **OpenID4VP 1.0 (DCQL)** authorization request. + +It focuses on **API contracts, response shapes, and UI behaviour** — not internal implementation details. + +For the older **Presentation Exchange (Draft-23)** flow, see [Appendix A](#appendix-a-draft-23-presentation-exchange). + +--- + +## Overview + +OVP 1.0 uses **DCQL** (Digital Credentials Query Language) instead of a flat `presentation_definition`. Mimoto exposes three session-authenticated endpoints under: + +```text +/wallets/{walletId}/presentations +``` + +| Step | Method | Path | Purpose | +|------|--------|------|---------| +| 1 | `POST` | `/wallets/{walletId}/presentations` | Parse verifier authorization request, create presentation session | +| 2 | `GET` | `/wallets/{walletId}/presentations/{presentationId}/credentials` | List wallet credentials that match the verifier’s DCQL query | +| 3 | `PATCH` | `/wallets/{walletId}/presentations/{presentationId}` | Submit selected credentials to the verifier, or reject the request | + +**Prerequisites** + +- Valid Mimoto **session** (user authenticated). +- Wallet **unlock key** present in session (`WALLET_KEY`) before steps 2 and 3. +- For state-changing calls (`PATCH`), include the **CSRF** token (`X-XSRF-TOKEN` header). + +**Important:** Always call **GET /credentials** before **PATCH** submit. Submit uses credential IDs cached in the presentation session from that GET response. Unknown IDs are rejected. + +--- + +## Detecting OVP 1.0 vs Draft-23 + +Mimoto selects the matching and submission path from the verifier authorization request: + +| Verifier request type | Mimoto behaviour | +|----------------------|------------------| +| DCQL (`AuthorizationDcqlRequest`) | **OVP 1.0** — use `queryGroups` / `credentialSets` | +| Presentation Exchange | **Draft-23** — use flat `availableCredentials` | + +**How the wallet UI knows which response shape to expect** + +| GET /credentials response | Meaning | +|---------------------------|---------| +| `queryGroups` is present | OVP 1.0 / DCQL | +| `availableCredentials` is present (no `queryGroups`) | Draft-23 | + +Do not send a mixed `selectedCredentials` array on submit — elements must be **all strings** (Draft-23) or **all objects** (DCQL). + +--- + +## Step 1 — Start presentation (`POST`) + +**Request** + +```json +{ + "authorizationRequestUrl": "openid4vp://authorize?client_id=..." +} +``` + +**Response (200)** + +```json +{ + "presentationId": "presentation-uuid", + "verifier": { + "clientId": "verifier-client-id", + "clientName": "Example Verifier", + "logoUri": "https://verifier.example.com/logo.png", + "trusted": true, + "preregisteredWithWallet": true + } +} +``` + +Store `presentationId` for the remaining steps. + +--- + +## Step 2 — Get matching credentials (`GET`) + +```http +GET /wallets/{walletId}/presentations/{presentationId}/credentials +``` + +### DCQL response model + +A DCQL response has **two layers**: + +```text +DCQL query (from verifier) +├── credentials[] ← Layer 1: one slot per CredentialQuery (→ queryGroups) +└── credential_sets[]? ← Layer 2: optional OR-grouping (→ credentialSets) +``` + +- **`queryGroups`** — one entry per `CredentialQuery.id`. Describes available credentials, formats, claims, and missing claims for that slot. +- **`credentialSets`** — optional grouping. When present, it defines which query slots are bundled into **options** the user must choose from. + +When `credentialSets` is **empty**, every query in `queryGroups` is an independent **mandatory** slot (DCQL default when the verifier omits `credential_sets`). + +### Example — two independent required queries + +Verifier needs national ID **and** driving license (no `credential_sets`): + +```json +{ + "queryGroups": [ + { + "queryId": "pid_query", + "multiple": false, + "availableCredentials": [ + { + "credentialId": "vc-uuid-111", + "credentialTypeDisplayName": "National ID Card", + "credentialTypeLogo": "https://issuer.example.com/logo.png", + "format": "ldp_vc", + "claims": ["$.name", "$.dateOfBirth"], + "sdClaims": ["$.email"] + } + ], + "missingClaims": [] + }, + { + "queryId": "mdl_query", + "multiple": false, + "availableCredentials": [ + { + "credentialId": "vc-uuid-222", + "credentialTypeDisplayName": "Driving License", + "format": "ldp_vc", + "claims": ["$.licenseNumber"], + "sdClaims": [] + } + ], + "missingClaims": [] + } + ], + "credentialSets": [] +} +``` + +### Example — `credential_sets` with options + +Verifier accepts **PAN OR Aadhaar OR (Voter ID + Driving License)**: + +```json +{ + "queryGroups": [ + { + "queryId": "pan", + "multiple": false, + "availableCredentials": [ + { + "credentialId": "vc-pan-111", + "credentialTypeDisplayName": "PAN Card", + "format": "ldp_vc", + "claims": ["$.name", "$.pan"], + "sdClaims": [] + } + ], + "missingClaims": [] + }, + { + "queryId": "aadhaar", + "multiple": false, + "availableCredentials": [ + { + "credentialId": "vc-aadh-222", + "credentialTypeDisplayName": "Aadhaar Card", + "format": "ldp_vc", + "claims": ["$.name", "$.dob"], + "sdClaims": ["$.address"] + } + ], + "missingClaims": [] + }, + { + "queryId": "voter_id", + "multiple": false, + "availableCredentials": [ + { + "credentialId": "vc-vid-333", + "credentialTypeDisplayName": "Voter ID", + "format": "ldp_vc", + "claims": ["$.name"], + "sdClaims": [] + } + ], + "missingClaims": [] + }, + { + "queryId": "dl", + "multiple": false, + "availableCredentials": [ + { + "credentialId": "vc-dl-444", + "credentialTypeDisplayName": "Driving License", + "format": "ldp_vc", + "claims": ["$.licenseNumber"], + "sdClaims": [] + } + ], + "missingClaims": [] + } + ], + "credentialSets": [ + { + "required": true, + "options": [ + ["pan"], + ["aadhaar"], + ["voter_id", "dl"] + ] + } + ] +} +``` + +### Field reference + +| Field | Description | +|-------|-------------| +| `queryGroups[].queryId` | `CredentialQuery.id` — **must** be sent back on submit | +| `queryGroups[].multiple` | `true` → user may select more than one credential for this query; `false` → at most one | +| `queryGroups[].availableCredentials` | Wallet credentials that satisfy this query | +| `queryGroups[].missingClaims` | JSON paths the query requires but no wallet credential satisfies | +| `credentialSets[].required` | `true` → user must satisfy **one** option in this section | +| `credentialSets[].options` | Each option is a list of `queryId`s that must **all** be submitted together (AND within option, OR between options) | +| `availableCredentials[].credentialId` | Wallet credential UUID — use in submit `selectedCredentialIds` | +| `availableCredentials[].claims` | Always-disclosed claim paths (shown pre-selected in UI) | +| `availableCredentials[].sdClaims` | Selectively disclosable paths — user must opt in (SD-JWT only) | + +### UI rendering guide + +```text +credentialSets is empty + → Render one slot per queryGroup; all slots are mandatory + → Enable submit only when every queryGroup has a selection + → Respect queryGroup.multiple for multi-select within a slot + +credentialSets is non-empty + → Render one section per credentialSet entry + → required=true → section is mandatory + → Within a section, render one option (tab/radio) per options[] entry + → Option ["voter_id","dl"] → user must fill BOTH slots in that option + → User picks exactly one option per required section +``` + +### Unsatisfiable requests + +If no credential matches a required query, `availableCredentials` is empty and `missingClaims` lists what is missing. The wallet may still let the user **reject** the verifier (see Step 3). + +--- + +## Step 3 — Submit or reject (`PATCH`) + +```http +PATCH /wallets/{walletId}/presentations/{presentationId} +``` + +### Submit — DCQL (`selectedCredentials` as objects) + +```json +{ + "selectedCredentials": [ + { + "queryId": "pid_query", + "selectedCredentialIds": ["vc-uuid-111"] + }, + { + "queryId": "mdl_query", + "selectedCredentialIds": ["vc-uuid-222"] + } + ] +} +``` + +**Rules enforced by Mimoto** + +- Every `selectedCredentialIds` entry must exist in the session cache from GET /credentials. +- `queryId` must match a credential query in the verifier’s DCQL request. +- When `multiple` is `false` for a query, at most **one** credential may be selected for that `queryId` (duplicate selections for the same query are merged and counted). +- When `credential_sets` has a **required** section, the selected `queryId`s must match **exactly one** option in that section. + +### Same credential across multiple queries + +One wallet credential may satisfy several DCQL queries. Submit one selection object per query, repeating the same `credentialId` where needed: + +```json +{ + "selectedCredentials": [ + { + "queryId": "age-proof", + "selectedCredentialIds": ["a3e92fcf-b107-46c9-8d68-f10cdbe8214b"] + }, + { + "queryId": "government-identity", + "selectedCredentialIds": ["a3e92fcf-b107-46c9-8d68-f10cdbe8214b"] + } + ] +} +``` + +### SD-JWT selective disclosure (`selectedSdClaims`) + +For `vc+sd-jwt` and `dc+sd-jwt` credentials, `selectedSdClaims` is a map of **credential ID → array of claim paths**: + +```json +{ + "selectedCredentials": [ + { + "queryId": "age-proof", + "selectedCredentialIds": ["a3e92fcf-b107-46c9-8d68-f10cdbe8214b"], + "selectedSdClaims": { + "a3e92fcf-b107-46c9-8d68-f10cdbe8214b": ["dateOfBirth"] + } + }, + { + "queryId": "government-identity", + "selectedCredentialIds": ["a3e92fcf-b107-46c9-8d68-f10cdbe8214b"], + "selectedSdClaims": { + "a3e92fcf-b107-46c9-8d68-f10cdbe8214b": ["region"] + } + } + ] +} +``` + +**SD-JWT behaviour** + +| Situation | What is shared | +|-----------|----------------| +| `selectedSdClaims` lists paths for a credential | Only those selectively disclosable claims | +| `selectedSdClaims` omitted or empty for an SD-JWT credential | **No** SD disclosures (credential JWT only) | +| Paths from multiple queries for the same credential | **Union** of all paths (deduplicated) | + +Paths may be sent as `dateOfBirth`, `$.dateOfBirth`, or `credentialSubject.dateOfBirth` — Mimoto normalizes them to match stored SD claim keys. + +You may also place `selectedSdClaims` at the **top level** of the submit body; Mimoto unions top-level and per-selection maps. + +### `claim_sets` and auto-resolved disclosures + +When the verifier’s DCQL query defines `claim_sets` on a credential query and the client does **not** send explicit `selectedSdClaims` for that credential, Mimoto may auto-resolve the first satisfiable claim set and include the corresponding SD-JWT paths on submit. + +When the user **does** send `selectedSdClaims`, those explicit paths take precedence for that credential/query combination. + +### Reject verifier + +```json +{ + "errorCode": "access_denied", + "errorMessage": "User denied authorization to share credentials" +} +``` + +Do not include `selectedCredentials` or `selectedSdClaims` in a rejection request. + +### Submit / reject responses (HTTP 200) + +**Success** + +```json +{ + "status": "SUCCESS", + "message": "Presentation successfully submitted and shared with verifier", + "redirectUri": "https://verifier.example.com/callback?state=..." +} +``` + +**Share failed** + +```json +{ + "status": "ERROR", + "message": "Failed to share verifiable presentation with verifier", + "redirectUri": null +} +``` + +**Rejection sent** + +```json +{ + "status": "REJECTED_VERIFIER", + "message": "Verifier has been notified of the rejection", + "redirectUri": "https://verifier.example.com/error?error=access_denied" +} +``` + +`redirectUri` is the verifier’s callback URL. The wallet should redirect the user there when present. Mimoto is not the browser’s final destination after a successful share. + +--- + +## End-to-end flow (OVP 1.0) + +```text +Verifier QR / deep link + │ + ▼ +POST /presentations (authorizationRequestUrl) + │ → presentationId, verifier info + ▼ +GET /presentations/{id}/credentials + │ → queryGroups, credentialSets + │ → user selects credentials + SD claims + ▼ +PATCH /presentations/{id} + │ selectedCredentials: [{ queryId, selectedCredentialIds, selectedSdClaims? }] + ▼ +Redirect user to redirectUri (if returned) +``` + +--- + +## Common errors (400) + +| Cause | Typical message | +|-------|-----------------| +| Unknown credential ID on submit | `Selected credential not found in session: …` | +| Unknown `queryId` | `Unknown DCQL query id '…'` | +| Too many credentials for `multiple=false` | `DCQL query '…' has multiple=false but N credential(s) were selected` | +| Invalid `credential_sets` selection | `Credential selection must satisfy exactly one option in credential_set` | +| Mixed `selectedCredentials` array types | `selectedCredentials must be either all credential ID strings or all DCQL selection objects` | + +--- + +## Appendix A: Draft-23 (Presentation Exchange) + +When the verifier uses Presentation Exchange instead of DCQL: + +**GET /credentials** returns: + +```json +{ + "availableCredentials": [ { "credentialId": "...", "format": "ldp_vc", "claims": [], "sdClaims": [] } ], + "missingClaims": [] +} +``` + +**PATCH submit:** + +```json +{ + "selectedCredentials": ["cred-id-1", "cred-id-2"], + "selectedSdClaims": { + "cred-id-1": ["name", "dateOfBirth"] + } +} +``` + +`selectedCredentials` is a **flat array of credential ID strings**, not DCQL objects. + +--- + +## Related resources + +- OpenAPI / Swagger: Mimoto API docs ([`WalletPresentationsController`](../src/main/java/io/mosip/mimoto/controller/WalletPresentationsController.java)) +- Postman: [`postman-collections/MIMOTO.postman_collection.json`](./postman-collections/MIMOTO.postman_collection.json) diff --git a/docs/postman-collections/MIMOTO.postman_collection.json b/docs/postman-collections/MIMOTO.postman_collection.json index 172af35f5..cf84a84f1 100644 --- a/docs/postman-collections/MIMOTO.postman_collection.json +++ b/docs/postman-collections/MIMOTO.postman_collection.json @@ -579,13 +579,9 @@ "listen": "test", "script": { "exec": [ - "// Store the response body in a variable", - "let presentationResponse = pm.response.json();", - "", - "// Parse the response body to extract the presentationId", - "let presentationId = presentationResponse.presentationId;", + "const presentationResponse = pm.response.json();", "", - "pm.environment.set(\"presentationId\", presentationId);", + "pm.environment.set(\"presentationId\", presentationResponse.presentationId);", "" ], "type": "text/javascript", @@ -631,6 +627,90 @@ }, { "name": "Get Matching Credentials", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "const response = pm.response.json();", + "", + "if (Array.isArray(response.queryGroups)) {", + " const queryGroupsById = {};", + " (response.queryGroups || []).forEach(group => {", + " queryGroupsById[group.queryId] = group;", + " });", + "", + " const optionHasCredentials = option => option.every(qid => {", + " const group = queryGroupsById[qid];", + " return group && group.availableCredentials && group.availableCredentials.length > 0;", + " });", + "", + " const buildSelection = qid => ({", + " queryId: qid,", + " selectedCredentialIds: [queryGroupsById[qid].availableCredentials[0].credentialId]", + " });", + "", + " let selections = [];", + " const credentialSets = response.credentialSets || [];", + " const selectedQueryIds = new Set();", + " const optionIndex = parseInt(pm.collectionVariables.get(\"dcqlCredentialSetOptionIndex\") || \"0\", 10);", + "", + " credentialSets.forEach(set => {", + " if (!set.required) { return; }", + " const validOptions = (set.options || []).filter(optionHasCredentials);", + " const chosenOption = validOptions[optionIndex] || validOptions[0];", + " if (chosenOption) {", + " chosenOption.forEach(qid => selectedQueryIds.add(qid));", + " pm.collectionVariables.set(\"selectedDcqlCredentialSetOption\", JSON.stringify(chosenOption));", + " }", + " });", + "", + " selections = [...selectedQueryIds].map(buildSelection);", + "", + " if (selections.length === 0) {", + " selections = (response.queryGroups || [])", + " .filter(group => group.availableCredentials && group.availableCredentials.length > 0)", + " .map(group => ({", + " queryId: group.queryId,", + " selectedCredentialIds: [group.availableCredentials[0].credentialId]", + " }));", + " }", + "", + " pm.collectionVariables.set(\"submitPresentationDcqlBody\", JSON.stringify({", + " selectedCredentials: selections", + " }, null, 2));", + " pm.collectionVariables.set(\"isDcqlPresentation\", \"true\");", + "", + " if (selections.length > 0) {", + " pm.collectionVariables.set(\"credentialId\", selections[0].selectedCredentialIds[0]);", + " } else {", + " console.warn(\"No DCQL selections built. Check queryGroups.availableCredentials and missingClaims in the matching response.\");", + " }", + "} else {", + " const available = response.availableCredentials || [];", + " const credentialIds = available.map(c => c.credentialId).filter(Boolean);", + "", + " if (credentialIds.length > 0) {", + " pm.collectionVariables.set(\"credentialId\", credentialIds[0]);", + " pm.collectionVariables.set(\"credentialId1\", credentialIds[0]);", + " if (credentialIds.length > 1) {", + " pm.collectionVariables.set(\"credentialId2\", credentialIds[1]);", + " }", + " }", + "", + " const firstCredentialId = credentialIds.length > 0 ? credentialIds[0] : \"\";", + " pm.collectionVariables.set(\"submitPresentationDraft23Body\", JSON.stringify({", + " selectedCredentials: firstCredentialId ? [firstCredentialId] : []", + " }, null, 2));", + " pm.collectionVariables.set(\"isDcqlPresentation\", \"false\");", + "}", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], "request": { "method": "GET", "url": { @@ -650,7 +730,23 @@ "response": [] }, { - "name": "Submit Presentation", + "name": "Submit Presentation (Draft-23)", + "event": [ + { + "listen": "prerequest", + "script": { + "exec": [ + "const isDcql = pm.collectionVariables.get(\"isDcqlPresentation\") === \"true\";", + "if (isDcql) {", + " console.warn(\"This request is for Draft-23. Use Submit Presentation (OVP 1.0 / DCQL) for DCQL requests.\");", + "}", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], "request": { "method": "PATCH", "header": [ @@ -666,7 +762,7 @@ ], "body": { "mode": "raw", - "raw": "{\n \"selectedCredentials\": [\"{{credentialId1}}\", \"{{credentialId2}}\"]\n}", + "raw": "{{submitPresentationDraft23Body}}", "options": { "raw": { "language": "json" @@ -684,7 +780,64 @@ "presentations", "{{presentationId}}" ] + }, + "description": "Presentation Exchange (Draft-23). Run Get Matching Credentials first — the first available credential is stored in submitPresentationDraft23Body." + }, + "response": [] + }, + { + "name": "Submit Presentation (OVP 1.0 / DCQL)", + "event": [ + { + "listen": "prerequest", + "script": { + "exec": [ + "const isDcql = pm.collectionVariables.get(\"isDcqlPresentation\") === \"true\";", + "if (!isDcql) {", + " console.warn(\"This request is for OVP 1.0 / DCQL. Use Submit Presentation (Draft-23) for Presentation Exchange requests.\");", + "}", + "" + ], + "type": "text/javascript", + "packages": {} + } } + ], + "request": { + "method": "PATCH", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "X-XSRF-TOKEN", + "value": "{{XSRF_TOKEN}}", + "type": "text" + } + ], + "body": { + "mode": "raw", + "raw": "{{submitPresentationDcqlBody}}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{HOST}}/wallets/{{walletId}}/presentations/{{presentationId}}", + "host": [ + "{{HOST}}" + ], + "path": [ + "wallets", + "{{walletId}}", + "presentations", + "{{presentationId}}" + ] + }, + "description": "OVP 1.0 / DCQL. Run Get Matching Credentials first. When credentialSets is present, only one option is auto-selected (default: first valid option). Set collection variable dcqlCredentialSetOptionIndex to 0, 1, or 2 to pick a different option." }, "response": [] }, @@ -1324,6 +1477,34 @@ { "key": "XSRF_TOKEN", "value": "" + }, + { + "key": "isDcqlPresentation", + "value": "" + }, + { + "key": "submitPresentationDraft23Body", + "value": "{\n \"selectedCredentials\": []\n}" + }, + { + "key": "submitPresentationDcqlBody", + "value": "{\n \"selectedCredentials\": []\n}" + }, + { + "key": "dcqlCredentialSetOptionIndex", + "value": "0" + }, + { + "key": "selectedDcqlCredentialSetOption", + "value": "" + }, + { + "key": "credentialId1", + "value": "" + }, + { + "key": "credentialId2", + "value": "" } ] } \ No newline at end of file diff --git a/pom.xml b/pom.xml index 5571f30b0..3a2734f75 100644 --- a/pom.xml +++ b/pom.xml @@ -139,12 +139,12 @@ io.inji vcverifier-jar - 1.7.0 + 1.8.1 io.inji inji-openid4vp-jar - 0.7.0 + 1.0.0-SNAPSHOT io.micrometer @@ -430,9 +430,9 @@ 1.8.20 - io.mosip + io.inji pixelpass-jar - 0.7.0 + 0.8.0 io.inji diff --git a/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java b/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java index b85fa695e..363d7b06e 100644 --- a/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java +++ b/src/main/java/io/mosip/mimoto/config/IssuersValidationConfig.java @@ -52,13 +52,13 @@ public void run(ApplicationArguments args) throws ApiNotAccessibleException, IOE boolean issuerHasErrors = false; StringBuilder issuerErrors = new StringBuilder(); - issuerErrors.append(String.format("Errors for issuer at index: %d with issuerId - %s%n", index, issuerId)); + issuerErrors.append(String.format("Errors for issuer at index: %d with issuerId - %s\n", index, issuerId)); if (errors.hasErrors()) { issuerHasErrors = true; errors.getFieldErrors().stream() .sorted(Comparator.comparing(FieldError::getField)) - .forEach(error -> issuerErrors.append(String.format("- %s %s%n", error.getField(), error.getDefaultMessage()))); + .forEach(error -> issuerErrors.append(String.format("- %s %s\n", error.getField(), error.getDefaultMessage()))); } diff --git a/src/main/java/io/mosip/mimoto/constant/OpenID4VPConstants.java b/src/main/java/io/mosip/mimoto/constant/OpenID4VPConstants.java index 0a8fc201e..554cb1419 100644 --- a/src/main/java/io/mosip/mimoto/constant/OpenID4VPConstants.java +++ b/src/main/java/io/mosip/mimoto/constant/OpenID4VPConstants.java @@ -61,6 +61,7 @@ public class OpenID4VPConstants { // Credential selection keys public static final String SELECTED_CREDENTIALS = "selectedCredentials"; + public static final String SELECTED_SD_CLAIMS = "selectedSdClaims"; // URL query parameter names for OpenID4VP authorization requests public static final String CLIENT_ID_PARAM = "client_id"; diff --git a/src/main/java/io/mosip/mimoto/controller/WalletPresentationsController.java b/src/main/java/io/mosip/mimoto/controller/WalletPresentationsController.java index 9b46e741b..e94bb0e36 100644 --- a/src/main/java/io/mosip/mimoto/controller/WalletPresentationsController.java +++ b/src/main/java/io/mosip/mimoto/controller/WalletPresentationsController.java @@ -95,9 +95,13 @@ public ResponseEntity handleVPAuthorizationRequest(@PathVariable( VPResponseDTO verifiablePresentationResponseDTO = walletPresentationService.handleVPAuthorizationRequest(vpAuthorizationRequest.getAuthorizationRequestUrl(), walletId); - VerifiablePresentationSessionData verifiablePresentationSessionData = new VerifiablePresentationSessionData(verifiablePresentationResponseDTO.getPresentationId(), - vpAuthorizationRequest.getAuthorizationRequestUrl(), Instant.now(), - verifiablePresentationResponseDTO.getVerifiablePresentationVerifierDTO().isPreregisteredWithWallet(), null); + VerifiablePresentationSessionData verifiablePresentationSessionData = new VerifiablePresentationSessionData( + verifiablePresentationResponseDTO.getPresentationId(), + vpAuthorizationRequest.getAuthorizationRequestUrl(), + Instant.now(), + verifiablePresentationResponseDTO.getVerifiablePresentationVerifierDTO().isPreregisteredWithWallet(), + null, + verifiablePresentationResponseDTO.isDcql()); sessionManager.storePresentationSessionData(httpSession, verifiablePresentationSessionData, walletId); diff --git a/src/main/java/io/mosip/mimoto/dto/CredentialDTO.java b/src/main/java/io/mosip/mimoto/dto/CredentialDTO.java index 8ab4c089e..92e0ea468 100644 --- a/src/main/java/io/mosip/mimoto/dto/CredentialDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/CredentialDTO.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.dto; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; @@ -13,6 +14,7 @@ @Builder @NoArgsConstructor @AllArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) public class CredentialDTO { @JsonProperty("credentialId") diff --git a/src/main/java/io/mosip/mimoto/dto/CredentialSetInfo.java b/src/main/java/io/mosip/mimoto/dto/CredentialSetInfo.java new file mode 100644 index 000000000..a0beefb76 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/CredentialSetInfo.java @@ -0,0 +1,25 @@ +package io.mosip.mimoto.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class CredentialSetInfo { + + @JsonProperty("required") + @Schema(description = "True when the user must satisfy one option in this section") + private boolean required; + + @JsonProperty("options") + @Schema(description = "List of options; each option is a list of queryIds that must all be presented together") + private List> options; +} diff --git a/src/main/java/io/mosip/mimoto/dto/DcqlCredentialSelection.java b/src/main/java/io/mosip/mimoto/dto/DcqlCredentialSelection.java new file mode 100644 index 000000000..85347d6a8 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/DcqlCredentialSelection.java @@ -0,0 +1,26 @@ +package io.mosip.mimoto.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; +import java.util.Map; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DcqlCredentialSelection { + + @JsonProperty("queryId") + private String queryId; + + @JsonProperty("selectedCredentialIds") + private List selectedCredentialIds; + + @JsonProperty("selectedSdClaims") + private Map> selectedSdClaims; +} diff --git a/src/main/java/io/mosip/mimoto/dto/DcqlQueryGroup.java b/src/main/java/io/mosip/mimoto/dto/DcqlQueryGroup.java new file mode 100644 index 000000000..bdbc8b554 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/DcqlQueryGroup.java @@ -0,0 +1,36 @@ +package io.mosip.mimoto.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; +import java.util.Set; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DcqlQueryGroup { + + @JsonProperty("queryId") + @Schema(description = "DCQL credential query id (dcql_query.credentials[i].id)") + private String queryId; + + @JsonProperty("required") + @Schema(description = "Whether this query must be satisfied before submission") + private boolean required; + + @JsonProperty("multiple") + @Schema(description = "Whether more than one credential may be selected for this query") + private boolean multiple; + + @JsonProperty("availableCredentials") + private List availableCredentials; + + @JsonProperty("missingClaims") + private Set missingClaims; +} diff --git a/src/main/java/io/mosip/mimoto/dto/DecryptedCredentialDTO.java b/src/main/java/io/mosip/mimoto/dto/DecryptedCredentialDTO.java index 1febebe74..5589945a8 100644 --- a/src/main/java/io/mosip/mimoto/dto/DecryptedCredentialDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/DecryptedCredentialDTO.java @@ -49,4 +49,10 @@ public class DecryptedCredentialDTO implements Serializable { * The update timestamp from the original VerifiableCredential. */ private Instant updatedAt; + + /** + * InputDescriptor.id (Draft-23) or DCQL CredentialQuery.id (OVP 1.0). + * Bridge key from credential matching to VP submission. + */ + private String identifier; } diff --git a/src/main/java/io/mosip/mimoto/dto/MatchingCredentialsResponseDTO.java b/src/main/java/io/mosip/mimoto/dto/MatchingCredentialsResponseDTO.java index af1087aa1..2e048e982 100644 --- a/src/main/java/io/mosip/mimoto/dto/MatchingCredentialsResponseDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/MatchingCredentialsResponseDTO.java @@ -1,5 +1,6 @@ package io.mosip.mimoto.dto; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; @@ -14,13 +15,22 @@ @Builder @NoArgsConstructor @AllArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) public class MatchingCredentialsResponseDTO { @JsonProperty("availableCredentials") - @Schema(description = "List of credentials that match the presentation definition") + @Schema(description = "Flat credential list for Draft-23") private List availableCredentials; @JsonProperty("missingClaims") - @Schema(description = "List of claims that are required but not available in any credential") + @Schema(description = "Missing claims for Draft-23") private Set missingClaims; + + @JsonProperty("queryGroups") + @Schema(description = "Per-query groups for OVP 1.0 / DCQL") + private List queryGroups; + + @JsonProperty("credentialSets") + @Schema(description = "Option-grouping layer from the verifier's DCQL credential_sets; synthesised from individual queries when absent in the verifier request") + private List credentialSets; } diff --git a/src/main/java/io/mosip/mimoto/dto/SelectedCredentials.java b/src/main/java/io/mosip/mimoto/dto/SelectedCredentials.java new file mode 100644 index 000000000..0e66175bb --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/SelectedCredentials.java @@ -0,0 +1,56 @@ +package io.mosip.mimoto.dto; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import io.mosip.mimoto.dto.deserializer.SelectedCredentialsDeserializer; +import io.mosip.mimoto.dto.serializer.SelectedCredentialsSerializer; +import lombok.Getter; + +import java.util.List; + +/** + * Polymorphic holder for {@code selectedCredentials} in submit requests: + *
    + *
  • Draft-23: {@code ["cred-id-1", "cred-id-2"]}
  • + *
  • DCQL: {@code [{"queryId":"q1","selectedCredentialIds":["cred-id-1"]}]}
  • + *
+ */ +@Getter +@JsonDeserialize(using = SelectedCredentialsDeserializer.class) +@JsonSerialize(using = SelectedCredentialsSerializer.class) +public class SelectedCredentials { + + private final List credentialIds; + private final List dcqlSelections; + + private SelectedCredentials(List credentialIds, List dcqlSelections) { + if (credentialIds != null && dcqlSelections != null) { + throw new IllegalArgumentException( + "selectedCredentials must be either credential ID strings or DCQL selection objects, not both"); + } + this.credentialIds = credentialIds; + this.dcqlSelections = dcqlSelections; + } + + public static SelectedCredentials ofStrings(List ids) { + return new SelectedCredentials(ids, null); + } + + public static SelectedCredentials ofDcql(List selections) { + return new SelectedCredentials(null, selections); + } + + /** + * {@code true} when the payload uses the DCQL selection shape (non-empty objects). + */ + public boolean isDcql() { + return dcqlSelections != null && !dcqlSelections.isEmpty(); + } + + public boolean isEmpty() { + if (dcqlSelections != null) { + return dcqlSelections.isEmpty(); + } + return credentialIds == null || credentialIds.isEmpty(); + } +} diff --git a/src/main/java/io/mosip/mimoto/dto/SubmitPresentationRequestDTO.java b/src/main/java/io/mosip/mimoto/dto/SubmitPresentationRequestDTO.java index c0f73deb3..a6640c1ae 100644 --- a/src/main/java/io/mosip/mimoto/dto/SubmitPresentationRequestDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/SubmitPresentationRequestDTO.java @@ -1,37 +1,39 @@ package io.mosip.mimoto.dto; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import io.mosip.mimoto.dto.deserializer.SelectedCredentialsDeserializer; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import io.mosip.mimoto.util.SelectedSdClaimsUtil; + +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -/** - * DTO for submitting a presentation with selected credentials or rejecting a verifier - */ @Data @Builder @NoArgsConstructor @AllArgsConstructor -@Schema(description = "Request payload for submitting a presentation with selected credentials or rejecting a verifier") +@Schema(description = "Request payload for submitting a presentation or rejecting a verifier") public class SubmitPresentationRequestDTO { - @Schema(description = "List of credential IDs that the user has selected to include in the presentation", - example = "[\"cred-123\", \"cred-456\"]") - private List selectedCredentials; + @Schema(description = "Draft-23: credential ID strings. DCQL: objects with queryId + selectedCredentialIds.") + @JsonDeserialize(using = SelectedCredentialsDeserializer.class) + private SelectedCredentials selectedCredentials; @Schema(description = "Selected SD-JWT claim paths per credential ID for selective disclosure (only for SD-JWT credentials)", example = "{\"cred-123\": [\"name\", \"dob\"]}") private Map> selectedSdClaims; - @Schema(description = "Error code for rejecting the verifier (used when user denies the presentation request)", + @Schema(description = "Error code for rejecting the verifier (used when user denies the presentation request)", example = "access_denied") private String errorCode; - @Schema(description = "Error message for rejecting the verifier (used when user denies the presentation request)", + @Schema(description = "Error message for rejecting the verifier (used when user denies the presentation request)", example = "User denied authorization to share credentials") private String errorMessage; @@ -40,19 +42,59 @@ public class SubmitPresentationRequestDTO { */ public boolean isSubmissionRequest() { boolean hasCredentials = selectedCredentials != null && !selectedCredentials.isEmpty(); - boolean hasErrorFields = (errorCode != null && !errorCode.trim().isEmpty()) || - (errorMessage != null && !errorMessage.trim().isEmpty()); + boolean hasErrorFields = (errorCode != null && !errorCode.trim().isEmpty()) + || (errorMessage != null && !errorMessage.trim().isEmpty()); return hasCredentials && !hasErrorFields; } + /** + * Returns {@code true} when {@code selectedCredentials} uses the DCQL format + * (objects with {@code queryId} and {@code selectedCredentialIds} per query). + * Used to branch submission logic between DCQL and Draft-23 presentation flows. + */ + public boolean isDcqlSubmission() { + return selectedCredentials != null && selectedCredentials.isDcql(); + } + + /** + * Returns the flat list of credential IDs for Draft-23 submissions + * ({@code ["cred-id-1", "cred-id-2"]}). Returns {@code null} for DCQL submissions. + */ + public List getSelectedCredentialIds() { + return selectedCredentials == null ? null : selectedCredentials.getCredentialIds(); + } + + /** + * Returns per-query credential selections for DCQL submissions + * ({@code [{queryId, selectedCredentialIds, ...}]}). Returns {@code null} for Draft-23 submissions. + */ + public List getDcqlSelections() { + return selectedCredentials == null ? null : selectedCredentials.getDcqlSelections(); + } + + /** + * Unions top-level {@code selectedSdClaims} with any nested inside DCQL selection objects, + * combining disclosure paths per credential ID. + */ + public Map> resolveEffectiveSelectedSdClaims() { + Map> merged = new LinkedHashMap<>(); + SelectedSdClaimsUtil.mergeInto(merged, selectedSdClaims); + if (isDcqlSubmission()) { + for (DcqlCredentialSelection selection : getDcqlSelections()) { + SelectedSdClaimsUtil.mergeInto(merged, selection.getSelectedSdClaims()); + } + } + return merged.isEmpty() ? null : merged; + } + /** * Checks if this is a rejection request (has error code and message, NO credentials, NO SD-claim selections) */ public boolean isRejectionRequest() { - boolean hasErrorFields = errorCode != null && !errorCode.trim().isEmpty() && - errorMessage != null && !errorMessage.trim().isEmpty(); + boolean hasErrorFields = errorCode != null && !errorCode.trim().isEmpty() + && errorMessage != null && !errorMessage.trim().isEmpty(); boolean hasCredentials = selectedCredentials != null && !selectedCredentials.isEmpty(); - boolean hasSdClaims = selectedSdClaims != null && !selectedSdClaims.isEmpty(); + boolean hasSdClaims = resolveEffectiveSelectedSdClaims() != null; return hasErrorFields && !hasCredentials && !hasSdClaims; } } diff --git a/src/main/java/io/mosip/mimoto/dto/VPResponseDTO.java b/src/main/java/io/mosip/mimoto/dto/VPResponseDTO.java index 67048ae57..3dee24a8e 100644 --- a/src/main/java/io/mosip/mimoto/dto/VPResponseDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/VPResponseDTO.java @@ -1,19 +1,25 @@ package io.mosip.mimoto.dto; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; @Data @AllArgsConstructor +@NoArgsConstructor public class VPResponseDTO { @Schema(description = "Unique identifier for the Verifiable Presentation") - String presentationId; + private String presentationId; @JsonProperty("verifier") @Schema(description = "Information about the Verifier who sent the Verifiable Presentation request") - VerifiablePresentationVerifierDTO verifiablePresentationVerifierDTO; + private VerifiablePresentationVerifierDTO verifiablePresentationVerifierDTO; + /** Whether the auth request used DCQL; session-only, not part of the API JSON. */ + @JsonIgnore + private boolean dcql; } diff --git a/src/main/java/io/mosip/mimoto/dto/deserializer/SelectedCredentialsDeserializer.java b/src/main/java/io/mosip/mimoto/dto/deserializer/SelectedCredentialsDeserializer.java new file mode 100644 index 000000000..e99b61acf --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/deserializer/SelectedCredentialsDeserializer.java @@ -0,0 +1,58 @@ +package io.mosip.mimoto.dto.deserializer; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.dto.DcqlCredentialSelection; +import io.mosip.mimoto.dto.SelectedCredentials; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +public class SelectedCredentialsDeserializer extends JsonDeserializer { + + private static final String INVALID_SELECTED_CREDENTIALS_FORMAT_ERROR_MESSAGE = + "selectedCredentials must be either all credential ID strings or all DCQL selection objects"; + + @Override + public SelectedCredentials deserialize(JsonParser parser, DeserializationContext ctxt) throws IOException { + JsonNode node = parser.getCodec().readTree(parser); + if (!node.isArray()) { + throw ctxt.weirdStringException(node.toString(), SelectedCredentials.class, + "selectedCredentials must be a JSON array"); + } + if (node.isEmpty()) { + return SelectedCredentials.ofStrings(List.of()); + } + + JsonNode first = node.get(0); + if (first.isTextual()) { + List ids = new ArrayList<>(); + for (JsonNode item : node) { + if (!item.isTextual()) { + throw JsonMappingException.from(parser, INVALID_SELECTED_CREDENTIALS_FORMAT_ERROR_MESSAGE); + } + ids.add(item.asText()); + } + return SelectedCredentials.ofStrings(ids); + } + + if (first.isObject()) { + ObjectMapper mapper = (ObjectMapper) parser.getCodec(); + List selections = new ArrayList<>(); + for (JsonNode item : node) { + if (!item.isObject()) { + throw JsonMappingException.from(parser, INVALID_SELECTED_CREDENTIALS_FORMAT_ERROR_MESSAGE); + } + selections.add(mapper.treeToValue(item, DcqlCredentialSelection.class)); + } + return SelectedCredentials.ofDcql(selections); + } + + throw JsonMappingException.from(parser, INVALID_SELECTED_CREDENTIALS_FORMAT_ERROR_MESSAGE); + } +} diff --git a/src/main/java/io/mosip/mimoto/dto/openid/SpecVersion.java b/src/main/java/io/mosip/mimoto/dto/openid/SpecVersion.java deleted file mode 100644 index 69982330a..000000000 --- a/src/main/java/io/mosip/mimoto/dto/openid/SpecVersion.java +++ /dev/null @@ -1,19 +0,0 @@ -package io.mosip.mimoto.dto.openid; - -import com.fasterxml.jackson.annotation.JsonValue; - -public enum SpecVersion { - V1_0("v1"), - DRAFT_23("draft23"); - - private final String version; - - SpecVersion(String version) { - this.version = version; - } - - @JsonValue - public String getVersion() { - return version; - } -} diff --git a/src/main/java/io/mosip/mimoto/dto/openid/SpecVersionDeserializer.java b/src/main/java/io/mosip/mimoto/dto/openid/SpecVersionDeserializer.java new file mode 100644 index 000000000..dbf83a846 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/openid/SpecVersionDeserializer.java @@ -0,0 +1,20 @@ +package io.mosip.mimoto.dto.openid; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import io.mosip.openID4VP.constants.SpecVersion; + +import java.io.IOException; + +class SpecVersionDeserializer extends JsonDeserializer { + + @Override + public SpecVersion deserialize(JsonParser parser, DeserializationContext context) throws IOException { + return switch (parser.getValueAsString()) { + case "v1" -> SpecVersion.V1; + case "draft23" -> SpecVersion.DRAFT_23; + default -> throw new IllegalArgumentException("Unknown spec_version: " + parser.getValueAsString()); + }; + } +} diff --git a/src/main/java/io/mosip/mimoto/dto/openid/SpecVersionSerializer.java b/src/main/java/io/mosip/mimoto/dto/openid/SpecVersionSerializer.java new file mode 100644 index 000000000..7483d10d4 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/openid/SpecVersionSerializer.java @@ -0,0 +1,16 @@ +package io.mosip.mimoto.dto.openid; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; +import io.mosip.openID4VP.constants.SpecVersion; + +import java.io.IOException; + +class SpecVersionSerializer extends JsonSerializer { + + @Override + public void serialize(SpecVersion value, JsonGenerator generator, SerializerProvider serializers) throws IOException { + generator.writeString(value == SpecVersion.DRAFT_23 ? "draft23" : "v1"); + } +} diff --git a/src/main/java/io/mosip/mimoto/dto/openid/VerifierDTO.java b/src/main/java/io/mosip/mimoto/dto/openid/VerifierDTO.java index fab2ad921..77ab0acda 100644 --- a/src/main/java/io/mosip/mimoto/dto/openid/VerifierDTO.java +++ b/src/main/java/io/mosip/mimoto/dto/openid/VerifierDTO.java @@ -2,6 +2,9 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import io.mosip.openID4VP.constants.SpecVersion; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; @@ -41,8 +44,9 @@ public class VerifierDTO { Boolean allowUnsignedRequest = false; @JsonProperty("spec_version") + @JsonDeserialize(using = SpecVersionDeserializer.class) + @JsonSerialize(using = SpecVersionSerializer.class) @Schema(description = "OpenID4VP specification version supported by the Verifier") @Default - SpecVersion specVersion = SpecVersion.V1_0; + SpecVersion specVersion = SpecVersion.V1; } - diff --git a/src/main/java/io/mosip/mimoto/dto/resident/VerifiablePresentationSessionData.java b/src/main/java/io/mosip/mimoto/dto/resident/VerifiablePresentationSessionData.java index 660697831..cd3442402 100644 --- a/src/main/java/io/mosip/mimoto/dto/resident/VerifiablePresentationSessionData.java +++ b/src/main/java/io/mosip/mimoto/dto/resident/VerifiablePresentationSessionData.java @@ -18,4 +18,6 @@ public class VerifiablePresentationSessionData implements Serializable { private Instant createdAt; private boolean isVerifierClientPreregistered; private List matchingCredentials; -} \ No newline at end of file + /** True when the authorization request had a DCQL query; selects DCQL vs PE flow. */ + private boolean dcql; +} diff --git a/src/main/java/io/mosip/mimoto/dto/serializer/SelectedCredentialsSerializer.java b/src/main/java/io/mosip/mimoto/dto/serializer/SelectedCredentialsSerializer.java new file mode 100644 index 000000000..064b21842 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/dto/serializer/SelectedCredentialsSerializer.java @@ -0,0 +1,31 @@ +package io.mosip.mimoto.dto.serializer; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import io.mosip.mimoto.dto.SelectedCredentials; + +import java.io.IOException; + +public class SelectedCredentialsSerializer extends StdSerializer { + + public SelectedCredentialsSerializer() { + super(SelectedCredentials.class); + } + + @Override + public void serialize(SelectedCredentials value, JsonGenerator gen, SerializerProvider provider) + throws IOException { + gen.writeStartArray(); + if (value.isDcql()) { + for (var selection : value.getDcqlSelections()) { + gen.writeObject(selection); + } + } else if (value.getCredentialIds() != null) { + for (String id : value.getCredentialIds()) { + gen.writeString(id); + } + } + gen.writeEndArray(); + } +} diff --git a/src/main/java/io/mosip/mimoto/service/impl/CredentialMatchingServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/CredentialMatchingServiceImpl.java index 9d43aaa42..2d028f92c 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/CredentialMatchingServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/CredentialMatchingServiceImpl.java @@ -4,10 +4,12 @@ import com.jayway.jsonpath.JsonPath; import com.jayway.jsonpath.PathNotFoundException; import io.mosip.mimoto.constant.CredentialFormat; +import io.mosip.mimoto.dto.CredentialDTO; +import io.mosip.mimoto.dto.CredentialSetInfo; import io.mosip.mimoto.dto.DecryptedCredentialDTO; -import io.mosip.mimoto.dto.MatchingCredentialsResponseDTO; +import io.mosip.mimoto.dto.DcqlQueryGroup; import io.mosip.mimoto.dto.MatchingCredentialsDTO; -import io.mosip.mimoto.dto.CredentialDTO; +import io.mosip.mimoto.dto.MatchingCredentialsResponseDTO; import io.mosip.mimoto.dto.mimoto.IssuerConfig; import io.mosip.mimoto.dto.mimoto.VCCredentialProperties; import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; @@ -22,10 +24,24 @@ import io.mosip.mimoto.service.IssuersService; import io.mosip.mimoto.service.WalletCredentialService; import io.mosip.mimoto.util.JwtUtils; +import io.mosip.mimoto.util.DcqlClaimSetHelper; +import io.mosip.mimoto.util.DcqlCredentialSetHelper; +import io.mosip.mimoto.util.DcqlMatchingHelper; import io.mosip.openID4VP.authorizationRequest.presentationDefinition.*; +import io.mosip.openID4VP.dcql.evaluator.MatchingCredential; +import io.mosip.openID4VP.dcql.evaluator.MatchingCredentialsResult; +import io.mosip.openID4VP.dcql.evaluator.QueryMatchResult; +import io.mosip.openID4VP.dcql.query.ClaimsQuery; +import io.mosip.openID4VP.dcql.query.CredentialQuery; +import io.mosip.openID4VP.dcql.query.CredentialSetQuery; +import io.mosip.openID4VP.dcql.query.DCQLQuery; +import io.mosip.openID4VP.helper.DCQLHelper; +import io.mosip.openID4VP.wallet.Credential; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Service; +import static io.mosip.mimoto.exception.ErrorConstants.INVALID_REQUEST; import static io.mosip.mimoto.exception.ErrorConstants.UNSUPPORTED_FORMAT; import java.io.IOException; @@ -57,6 +73,8 @@ public class CredentialMatchingServiceImpl implements CredentialMatchingService private final CredentialFormatHandlerFactory credentialFormatHandlerFactory; + private final DCQLHelper dcqlHelper = new DCQLHelper(); + public CredentialMatchingServiceImpl(ObjectMapper objectMapper, IssuersService issuersService, OpenID4VPService openID4VPService, WalletCredentialService walletCredentialService, CredentialFormatHandlerFactory credentialFormatHandlerFactory) { this.objectMapper = objectMapper; this.issuersService = issuersService; @@ -68,14 +86,39 @@ public CredentialMatchingServiceImpl(ObjectMapper objectMapper, IssuersService i @Override public MatchingCredentialsDTO getMatchingCredentials(VerifiablePresentationSessionData sessionData, String walletId, String base64Key) throws ApiNotAccessibleException, IOException { - log.info("Getting matching credentials with wallet data for walletId: {}", walletId); + validateMatchingCredentialsRequest(sessionData, walletId); + + List decryptedCredentials = walletCredentialService.getDecryptedCredentials(walletId, base64Key); + + if (sessionData.isDcql()) { + return matchWithDcqlQuery(sessionData, walletId, decryptedCredentials); + } + return matchWithPresentationDefinition(sessionData, walletId, base64Key, decryptedCredentials); + } + + private void validateMatchingCredentialsRequest(VerifiablePresentationSessionData sessionData, String walletId) { + if (sessionData == null + || StringUtils.isBlank(sessionData.getPresentationId()) + || StringUtils.isBlank(sessionData.getAuthorizationRequest())) { + throw new IllegalArgumentException("Session data cannot be null or empty"); + } + if (StringUtils.isBlank(walletId)) { + throw new IllegalArgumentException("Wallet ID cannot be null or empty"); + } + } + + private MatchingCredentialsDTO matchWithPresentationDefinition( + VerifiablePresentationSessionData sessionData, + String walletId, + String base64Key, + List decryptedCredentials) throws ApiNotAccessibleException, IOException { // Extract presentation definition from the session data - PresentationDefinition presentationDefinition = openID4VPService.resolvePresentationDefinition(sessionData.getPresentationId(), sessionData.getAuthorizationRequest(), sessionData.isVerifierClientPreregistered()); + PresentationDefinition presentationDefinition = openID4VPService.resolvePresentationDefinition( + sessionData.getPresentationId(), sessionData.getAuthorizationRequest(), sessionData.isVerifierClientPreregistered()); - validateInputParameters(presentationDefinition, walletId, base64Key); + validateInputParameters(presentationDefinition, base64Key); - List decryptedCredentials = walletCredentialService.getDecryptedCredentials(walletId, base64Key); if (decryptedCredentials.isEmpty()) { MatchingCredentialsResponseDTO emptyResponse = createEmptyResponseWithMissingClaims(presentationDefinition); return MatchingCredentialsDTO.builder() @@ -86,17 +129,22 @@ public MatchingCredentialsDTO getMatchingCredentials(VerifiablePresentationSessi List descriptors = presentationDefinition.getInputDescriptors(); Map> matchingCredentialsByDescriptor = new HashMap<>(); + Map credentialToInputDescriptor = new HashMap<>(); Set missingClaims = new HashSet<>(); IntStream.range(0, descriptors.size()) .forEach(i -> { InputDescriptor descriptor = descriptors.get(i); - List matches = decryptedCredentials.stream() + List descriptorMatches = decryptedCredentials.stream() .filter(decrypted -> matchesInputDescriptor(decrypted.getCredential(), descriptor)) + .collect(Collectors.toList()); + + List matches = descriptorMatches.stream() .map(this::buildAvailableCredential) .collect(Collectors.toList()); if (!matches.isEmpty()) { + descriptorMatches.forEach(dto -> credentialToInputDescriptor.put(dto.getId(), descriptor.getId())); matchingCredentialsByDescriptor.put(i, matches); } else { boolean hasFormatMatch = decryptedCredentials.stream() @@ -107,7 +155,7 @@ public MatchingCredentialsDTO getMatchingCredentials(VerifiablePresentationSessi missingClaims.addAll(extractFormatConstraintKeys(descriptor)); } } - }); + }); // Flatten all matching credentials into a single list, removing duplicates by credential ID Set addedCredentialIds = new HashSet<>(); @@ -116,14 +164,19 @@ public MatchingCredentialsDTO getMatchingCredentials(VerifiablePresentationSessi .filter(credential -> addedCredentialIds.add(credential.getCredentialId())) .collect(Collectors.toList()); - MatchingCredentialsResponseDTO matchingCredentialsResponse = MatchingCredentialsResponseDTO.builder().availableCredentials(availableCredentials).missingClaims(missingClaims).build(); + MatchingCredentialsResponseDTO matchingCredentialsResponse = MatchingCredentialsResponseDTO.builder() + .availableCredentials(availableCredentials) + .missingClaims(missingClaims) + .build(); - // Filter decrypted credentials to only include matched ones Set matchedCredentialIds = availableCredentials.stream() .map(CredentialDTO::getCredentialId) .collect(Collectors.toSet()); - List matchingCredentials = decryptedCredentials.stream().filter(credential -> matchedCredentialIds.contains(credential.getId())).collect(Collectors.toList()); + List matchingCredentials = decryptedCredentials.stream() + .filter(credential -> matchedCredentialIds.contains(credential.getId())) + .peek(credential -> credential.setIdentifier(credentialToInputDescriptor.get(credential.getId()))) + .collect(Collectors.toList()); return MatchingCredentialsDTO.builder() .matchingCredentialsResponse(matchingCredentialsResponse) @@ -131,11 +184,117 @@ public MatchingCredentialsDTO getMatchingCredentials(VerifiablePresentationSessi .build(); } - private void validateInputParameters(PresentationDefinition presentationDefinition, String walletId, String base64Key) throws IllegalArgumentException { - if (walletId == null || walletId.trim().isEmpty()) { - throw new IllegalArgumentException("Wallet ID cannot be null or empty"); + private MatchingCredentialsDTO matchWithDcqlQuery( + VerifiablePresentationSessionData sessionData, + String walletId, + List decryptedCredentials) throws ApiNotAccessibleException, IOException { + + DCQLQuery dcqlQuery = openID4VPService.resolveDcqlQuery( + sessionData.getPresentationId(), + sessionData.getAuthorizationRequest(), + sessionData.isVerifierClientPreregistered()); + + if (dcqlQuery == null) { + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), + "Authorization request does not contain a DCQL query"); + } + + Map credentialsById = decryptedCredentials.stream() + .collect(Collectors.toMap(DecryptedCredentialDTO::getId, dto -> dto, (a, b) -> a, LinkedHashMap::new)); + + DCQLQuery normalizedDcqlQuery = DcqlMatchingHelper.normalizeDcqlQuery(dcqlQuery); + + List credentialWithCredentialFormat = + DcqlMatchingHelper.constructCredentialWithCredentialFormat(decryptedCredentials, objectMapper); + + if (credentialWithCredentialFormat.isEmpty() && !decryptedCredentials.isEmpty()) { + log.warn("matchWithDcqlQuery: no wallet credentials could be mapped for inji-openid4vp evaluation; " + + "SD-JWT credentials must be stored as the raw token string"); } + MatchingCredentialsResult evaluationResult = + dcqlHelper.getMatchingCredentials(credentialWithCredentialFormat, normalizedDcqlQuery); + + List queryGroups = new ArrayList<>(); + Map matchedById = new LinkedHashMap<>(); + + for (CredentialQuery credentialQuery : normalizedDcqlQuery.getCredentials()) { + QueryMatchResult queryMatch = evaluationResult.getQueryMatches().get(credentialQuery.getId()); + List matches = resolveMatchedCredentials( + credentialsById, credentialQuery, queryMatch, matchedById); + + Set missingClaims = matches.isEmpty() + ? DcqlMatchingHelper.resolveMissingClaims(credentialQuery, queryMatch) + : Collections.emptySet(); + + // Index the library's per-credential matched claims so sdClaims reflects only + // what the library evaluated as matched — not every claim in the query. + Map> matchedClaimsByCredId = buildMatchedClaimsIndex(queryMatch); + + List credentialDTOs = matches.stream() + .map(match -> buildAvailableCredential( + match, + matchedClaimsByCredId.getOrDefault(match.getId(), Collections.emptyList()))) + .collect(Collectors.toList()); + + queryGroups.add(DcqlQueryGroup.builder() + .queryId(credentialQuery.getId()) + .required(true) + .multiple(credentialQuery.getMultiple()) + .availableCredentials(credentialDTOs) + .missingClaims(missingClaims) + .build()); + } + + List credentialSets = DcqlCredentialSetHelper.resolveEffectiveCredentialSets(dcqlQuery) + .stream() + .map(this::toCredentialSetInfo) + .collect(Collectors.toList()); + + log.info("matchWithDcqlQuery: walletId={}, queries={}, credentialSets={}, totalMatched={}, dcqlSuccess={}", + walletId, queryGroups.size(), credentialSets.size(), matchedById.size(), evaluationResult.getSuccess()); + + MatchingCredentialsResponseDTO matchingCredentialsResponse = MatchingCredentialsResponseDTO.builder() + .queryGroups(queryGroups) + .credentialSets(credentialSets) + .build(); + + return MatchingCredentialsDTO.builder() + .matchingCredentialsResponse(matchingCredentialsResponse) + .matchingCredentials(new ArrayList<>(matchedById.values())) + .build(); + } + + private List resolveMatchedCredentials( + Map credentialsById, + CredentialQuery credentialQuery, + QueryMatchResult queryMatch, + Map matchedById) { + if (queryMatch == null || queryMatch.getMatchingCredentials() == null) { + return List.of(); + } + + List matches = new ArrayList<>(); + for (MatchingCredential matchingCredential : queryMatch.getMatchingCredentials()) { + DecryptedCredentialDTO dto = credentialsById.get(matchingCredential.getCredentialId()); + if (dto == null) { + continue; + } + dto.setIdentifier(credentialQuery.getId()); + matchedById.putIfAbsent(dto.getId(), dto); + matches.add(dto); + } + return matches; + } + + private CredentialSetInfo toCredentialSetInfo(CredentialSetQuery credentialSetQuery) { + return CredentialSetInfo.builder() + .required(credentialSetQuery.getRequired()) + .options(credentialSetQuery.getOptions()) + .build(); + } + + private void validateInputParameters(PresentationDefinition presentationDefinition, String base64Key) throws IllegalArgumentException { if (base64Key == null || base64Key.trim().isEmpty()) { throw new IllegalArgumentException("Base64 key cannot be null or empty"); } @@ -313,19 +472,13 @@ private Object getCredentialData(VCCredentialResponse vc) { return Collections.emptyMap(); } Map credentialClaimsMap = new HashMap<>(); - // publicClaims and sdClaims are mutually exclusive by SD-JWT spec — no key collision. - // sdClaims values are disclosure blobs (List), not decoded claim values. - // This supports existence-based field matching (e.g. $.given_name present). - // Value-filter matching on SD claims (e.g. $.age >= 18) is not supported here - // and requires decoding disclosures — tracked as a follow-up improvement. - for (Map.Entry outer : extractedMap.entrySet()) { - if (outer.getValue() instanceof Map innerMap) { - for (Map.Entry inner : innerMap.entrySet()) { - if (inner.getKey() instanceof String key) { - credentialClaimsMap.put(key, inner.getValue()); - } - } - } + mergeClaimProperties(credentialClaimsMap, extractedMap.get("publicClaims")); + Map sdClaimValues = asStringObjectMap(extractedMap.get("sdClaimValues")); + if (sdClaimValues != null && !sdClaimValues.isEmpty()) { + mergeClaimProperties(credentialClaimsMap, sdClaimValues); + } else { + // Fallback for legacy handler responses: existence checks only. + mergeClaimProperties(credentialClaimsMap, extractedMap.get("sdClaims")); } return credentialClaimsMap; } else { @@ -333,6 +486,27 @@ private Object getCredentialData(VCCredentialResponse vc) { } } + private void mergeClaimProperties(Map target, Object section) { + Map properties = asStringObjectMap(section); + if (properties != null) { + target.putAll(properties); + } + } + + @SuppressWarnings("unchecked") + private Map asStringObjectMap(Object section) { + if (!(section instanceof Map rawMap)) { + return null; + } + Map properties = new LinkedHashMap<>(); + for (Map.Entry entry : rawMap.entrySet()) { + if (entry.getKey() instanceof String key) { + properties.put(key, entry.getValue()); + } + } + return properties; + } + private boolean matchesFilter(Object match, Filter filter) { if (filter == null) { return true; @@ -403,12 +577,6 @@ private CredentialDTO buildAvailableCredential(DecryptedCredentialDTO decryptedC String credentialTypeDisplayName = "Unknown Credential"; String credentialTypeLogo = null; - Map publicClaimsMap; - Map sdClaimsMap; - - List publicClaims = new ArrayList<>(); - List sdClaims = new ArrayList<>(); - try { IssuerConfig issuerConfig = issuersService.getIssuerConfig(issuerId, credentialType); if (issuerConfig != null) { @@ -420,29 +588,91 @@ private CredentialDTO buildAvailableCredential(DecryptedCredentialDTO decryptedC log.warn("Failed to fetch issuer config for issuerId: {}, credentialType: {}", issuerId, credentialType, e); } - if (CredentialFormat.isSdJwt(decryptedCredentialDTO.getCredential().getFormat())) { - CredentialFormatHandler credentialFormatHandler = credentialFormatHandlerFactory.getHandler(decryptedCredentialDTO.getCredential().getFormat()); + String format = decryptedCredentialDTO.getCredential().getFormat(); + List publicClaims = null; + List sdClaims = null; + + if (CredentialFormat.isSdJwt(format)) { + CredentialFormatHandler credentialFormatHandler = credentialFormatHandlerFactory.getHandler(format); Map> allClaims = (Map>) credentialFormatHandler.extractAllCredentialProperties(decryptedCredentialDTO.getCredential()); - publicClaimsMap = allClaims.get("publicClaims"); - sdClaimsMap = allClaims.get("sdClaims"); + Map publicClaimsMap = allClaims.get("publicClaims"); + Map sdClaimsMap = allClaims.get("sdClaims"); - if (publicClaimsMap != null) { - publicClaims = extractPublicClaimPaths(publicClaimsMap); - } + publicClaims = publicClaimsMap != null ? extractPublicClaimPaths(publicClaimsMap) : new ArrayList<>(); + sdClaims = sdClaimsMap != null ? extractSdClaimPaths(sdClaimsMap) : new ArrayList<>(); + } + + return CredentialDTO.builder() + .credentialId(decryptedCredentialDTO.getId()) + .credentialTypeDisplayName(credentialTypeDisplayName) + .credentialTypeLogo(credentialTypeLogo) + .format(format) + .claims(publicClaims) + .sdClaims(sdClaims) + .build(); + } - if (sdClaimsMap != null) { - sdClaims = extractSdClaimPaths(sdClaimsMap); + /** + * Indexes the library's per-credential evaluation result into a map of credentialId → matched ClaimsQuery list. + * This is the source of truth for which claims were actually satisfied, accounting for {@code claim_sets}. + */ + private Map> buildMatchedClaimsIndex(QueryMatchResult queryMatch) { + if (queryMatch == null || queryMatch.getMatchingCredentials() == null) { + return Collections.emptyMap(); + } + Map> index = new LinkedHashMap<>(); + for (MatchingCredential mc : queryMatch.getMatchingCredentials()) { + if (mc.getCredentialId() != null) { + index.putIfAbsent(mc.getCredentialId(), + mc.getMatchingClaims() != null ? mc.getMatchingClaims() : Collections.emptyList()); } + } + return index; + } + + /** + * DCQL-aware variant: builds a {@link CredentialDTO} whose {@code sdClaims} list is restricted + * to the claims the library evaluated as matched ({@code MatchingCredential.getMatchingClaims()}), + * not every claim in the query. This respects {@code claim_sets} resolution done by the library. + */ + private CredentialDTO buildAvailableCredential(DecryptedCredentialDTO decryptedCredentialDTO, List matchedClaims) { + String issuerId = decryptedCredentialDTO.getCredentialMetadata().getIssuerId(); + String credentialType = decryptedCredentialDTO.getCredentialMetadata().getCredentialType(); + String credentialTypeDisplayName = "Unknown Credential"; + String credentialTypeLogo = null; + try { + IssuerConfig issuerConfig = issuersService.getIssuerConfig(issuerId, credentialType); + if (issuerConfig != null) { + VerifiableCredentialResponseDTO credentialResponse = VerifiableCredentialResponseDTO.fromIssuerConfig(issuerConfig, "en", decryptedCredentialDTO.getId()); + credentialTypeDisplayName = credentialResponse.getCredentialTypeDisplayName(); + credentialTypeLogo = credentialResponse.getCredentialTypeLogo(); + } + } catch (InvalidIssuerIdException | ApiNotAccessibleException e) { + log.warn("Failed to fetch issuer config for issuerId: {}, credentialType: {}", issuerId, credentialType, e); } + String format = decryptedCredentialDTO.getCredential().getFormat(); + List publicClaims = null; + List sdClaims = null; + + if (CredentialFormat.isSdJwt(format)) { + CredentialFormatHandler credentialFormatHandler = credentialFormatHandlerFactory.getHandler(format); + Map> allClaims = (Map>) credentialFormatHandler.extractAllCredentialProperties(decryptedCredentialDTO.getCredential()); + + Map publicClaimsMap = allClaims.get("publicClaims"); + Map sdClaimsMap = allClaims.get("sdClaims"); + + publicClaims = publicClaimsMap != null ? extractPublicClaimPaths(publicClaimsMap) : new ArrayList<>(); + sdClaims = sdClaimsMap != null ? extractDcqlFilteredSdClaimPaths(sdClaimsMap, matchedClaims) : new ArrayList<>(); + } return CredentialDTO.builder() .credentialId(decryptedCredentialDTO.getId()) .credentialTypeDisplayName(credentialTypeDisplayName) .credentialTypeLogo(credentialTypeLogo) - .format(decryptedCredentialDTO.getCredential().getFormat()) + .format(format) .claims(publicClaims) .sdClaims(sdClaims) .build(); @@ -474,6 +704,35 @@ private List extractSdClaimPaths(Map sdClaimsMap) { return paths; } + /** + * Filters SD-JWT claim paths to only those present in the library's evaluated + * {@code MatchingCredential.getMatchingClaims()} list. This ensures {@code sdClaims} + * reflects exactly what the library determined was matched — including correct + * {@code claim_sets} resolution — per the DCQL spec (OpenID4VP §6). + */ + private List extractDcqlFilteredSdClaimPaths(Map sdClaimsMap, List matchedClaims) { + if (matchedClaims == null || matchedClaims.isEmpty()) { + return new ArrayList<>(); + } + + Set matchedPaths = matchedClaims.stream() + .filter(cq -> cq.getPath() != null && !cq.getPath().isEmpty()) + .map(cq -> DcqlClaimSetHelper.buildJsonPath(cq.getPath())) + .collect(Collectors.toCollection(LinkedHashSet::new)); + + List paths = new ArrayList<>(); + for (String key : sdClaimsMap.keySet()) { + String cleanKey = key.startsWith(CREDENTIAL_SUBJECT_PREFIX) + ? key.substring(CREDENTIAL_SUBJECT_PREFIX.length()) + : key; + String jsonPath = JSON_PATH_PREFIX + cleanKey; + if (matchedPaths.contains(jsonPath)) { + paths.add(jsonPath); + } + } + return paths; + } + private void collectPaths(Map publicClaimsMap, String prefix, List paths) { for (Map.Entry entry : publicClaimsMap.entrySet()) { String key = entry.getKey(); diff --git a/src/main/java/io/mosip/mimoto/service/impl/OpenID4VPService.java b/src/main/java/io/mosip/mimoto/service/impl/OpenID4VPService.java index 30586fefd..66a390558 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/OpenID4VPService.java +++ b/src/main/java/io/mosip/mimoto/service/impl/OpenID4VPService.java @@ -5,13 +5,19 @@ import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.service.VerifierService; import io.mosip.openID4VP.OpenID4VP; +import io.mosip.mimoto.util.AuthorizationRequestHelper; +import io.mosip.openID4VP.authorizationRequest.AuthorizationPresentationExchangeRequest; import io.mosip.openID4VP.authorizationRequest.AuthorizationRequest; +import io.mosip.openID4VP.authorizationRequest.LdpVpFormatSupported; +import io.mosip.openID4VP.authorizationRequest.SdJwtVpFormatSupported; import io.mosip.openID4VP.authorizationRequest.VPFormatSupported; import io.mosip.openID4VP.authorizationRequest.Verifier; -import io.mosip.openID4VP.authorizationRequest.WalletMetadata; +import io.mosip.openID4VP.authorizationRequest.WalletConfig; import io.mosip.openID4VP.authorizationRequest.presentationDefinition.PresentationDefinition; import io.mosip.openID4VP.common.OpenID4VPErrorCodes; +import io.mosip.openID4VP.constants.ProofType; import io.mosip.openID4VP.constants.VPFormatType; +import io.mosip.openID4VP.dcql.query.DCQLQuery; import io.mosip.openID4VP.exceptions.OpenID4VPExceptions; import io.mosip.openID4VP.verifier.VerifierResponse; import lombok.extern.slf4j.Slf4j; @@ -22,6 +28,12 @@ import java.util.List; import java.util.Map; +import static io.mosip.openID4VP.authorizationRequest.WalletConfigDefaultsKt.getDefaultClientIdPrefixesSupported; +import static io.mosip.openID4VP.authorizationRequest.WalletConfigDefaultsKt.getDefaultEncryptionAlgorithmSupported; +import static io.mosip.openID4VP.authorizationRequest.WalletConfigDefaultsKt.getDefaultEncryptionMethodSupported; +import static io.mosip.openID4VP.authorizationRequest.WalletConfigDefaultsKt.getDefaultResponseTypeSupported; +import static io.mosip.openID4VP.authorizationRequest.WalletConfigDefaultsKt.getDefaultSignatureAlgorithmSupported; + @Component @Slf4j public class OpenID4VPService { @@ -32,86 +44,136 @@ public OpenID4VPService(VerifierService verifierService) { this.verifierService = verifierService; } - public OpenID4VP create(String presentationId) { - WalletMetadata walletMetadata = new WalletMetadata(); - walletMetadata.setVpFormatsSupported(Map.of( - VPFormatType.LDP_VC, new VPFormatSupported(List.of("Ed25519Signature2020")), - VPFormatType.VC_SD_JWT, new VPFormatSupported(List.of("ES256", "EdDSA")), - VPFormatType.DC_SD_JWT, new VPFormatSupported(List.of("ES256", "EdDSA")) - )); + public OpenID4VP create(String presentationId, List trustedVerifiers, boolean validateTrustedVerifier) { + return new OpenID4VP(presentationId, buildWalletConfig(trustedVerifiers, validateTrustedVerifier)); + } - return new OpenID4VP(presentationId, walletMetadata); + private WalletConfig buildWalletConfig(List trustedVerifiers, boolean validateTrustedVerifier) { + Map vpFormatsSupported = Map.of( + VPFormatType.LDP_VC, new LdpVpFormatSupported(List.of(ProofType.Ed25519Signature2020), null), + VPFormatType.VC_SD_JWT, new SdJwtVpFormatSupported(List.of("ES256", "EdDSA"), List.of("ES256", "EdDSA")), + VPFormatType.DC_SD_JWT, new SdJwtVpFormatSupported(List.of("ES256", "EdDSA"), List.of("ES256", "EdDSA")) + ); + + WalletConfig defaultConfig = new WalletConfig(); + return new WalletConfig( + vpFormatsSupported, + getDefaultClientIdPrefixesSupported(), + getDefaultSignatureAlgorithmSupported(), + getDefaultEncryptionAlgorithmSupported(), + getDefaultEncryptionMethodSupported(), + getDefaultResponseTypeSupported(), + defaultConfig.isPresentationDefinitionUriSupported(), + trustedVerifiers != null ? trustedVerifiers : List.of(), + validateTrustedVerifier + ); } /** - * Extracts the presentation definition from the VerifiablePresentationSessionData object. + * Authenticates the verifier authorization request and returns the presentation definition + * for Draft-23 (Presentation Exchange) requests. Returns {@code null} for DCQL requests + * or when {@code presentationId} or {@code authRequest} are missing. * - * @return The presentation definition if found, null otherwise. + * @param presentationId presentation session identifier from session data + * @param authRequest raw authorization request from session data + * @param isVerifierClientPreregistered whether the verifier client is pre-registered + * @return the presentation definition for Presentation Exchange requests, otherwise {@code null} */ - public PresentationDefinition resolvePresentationDefinition(String presentationId, String authRequest, boolean isVerifierClientPreregistered) throws ApiNotAccessibleException, IOException { + public PresentationDefinition resolvePresentationDefinition( + String presentationId, String authRequest, boolean isVerifierClientPreregistered) + throws ApiNotAccessibleException, IOException { + if (presentationId == null || authRequest == null) { - log.warn("Session data or OpenID4VP is null"); return null; } - OpenID4VP openID4VP = create(presentationId); - List preRegisteredVerifiers = verifierService.getTrustedVerifiers().getVerifiers().stream() - .map(verifierDTO -> new Verifier(verifierDTO.getClientId(), verifierDTO.getResponseUris(), verifierDTO.getJwksUri(), verifierDTO.getAllowUnsignedRequest())) - .toList(); - AuthorizationRequest authorizationRequest = openID4VP.authenticateVerifier(authRequest, preRegisteredVerifiers, isVerifierClientPreregistered); - return authorizationRequest.getPresentationDefinition(); + OpenID4VP openID4VP = create(presentationId, getPreRegisteredVerifiers(), isVerifierClientPreregistered); + AuthorizationRequest authorizationRequest = openID4VP.authenticateVerifier(authRequest); + + if (authorizationRequest instanceof AuthorizationPresentationExchangeRequest peRequest) { + return peRequest.getPresentationDefinition(); + } + return null; + } + + /** + * Authenticates the verifier authorization request and returns the DCQL query + * for OVP 1.0 (DCQL) requests. Returns {@code null} for Presentation Exchange requests + * or when {@code presentationId} or {@code authRequest} are missing. + * + * @param presentationId presentation session identifier from session data + * @param authRequest raw authorization request from session data + * @param isVerifierClientPreregistered whether the verifier client is pre-registered + * @return the DCQL query for DCQL authorization requests, otherwise {@code null} + */ + public DCQLQuery resolveDcqlQuery( + String presentationId, String authRequest, boolean isVerifierClientPreregistered) + throws ApiNotAccessibleException, IOException { + + if (presentationId == null || authRequest == null) { + return null; + } + + OpenID4VP openID4VP = create(presentationId, getPreRegisteredVerifiers(), isVerifierClientPreregistered); + AuthorizationRequest authorizationRequest = openID4VP.authenticateVerifier(authRequest); + return AuthorizationRequestHelper.extractDcqlQuery(authorizationRequest); } /** - * Reconstructs OpenID4VP from session data, authenticates the verifier and sends the OpenID4VP error to the verifier. + * Reconstructs OpenID4VP from session data, authenticates the verifier, and sends the OpenID4VP error to the verifier. * * @param sessionData session containing presentation id and original authorization request * @param payload the error payload to forward * @return network response from verifier * @throws ApiNotAccessibleException when verifier list can't be fetched * @throws IOException for underlying IO failures + * @throws URISyntaxException when the verifier response URI is invalid */ - public VerifierResponse sendErrorToVerifier(VerifiablePresentationSessionData sessionData, ErrorDTO payload) throws ApiNotAccessibleException, IOException, URISyntaxException { - if (sessionData == null || sessionData.getPresentationId() == null || sessionData.getAuthorizationRequest() == null) { + public VerifierResponse sendErrorToVerifier( + VerifiablePresentationSessionData sessionData, ErrorDTO payload) + throws ApiNotAccessibleException, IOException, URISyntaxException { + + if (sessionData == null || sessionData.getPresentationId() == null + || sessionData.getAuthorizationRequest() == null) { throw new IllegalArgumentException("Invalid presentation session data"); } - OpenID4VP openID4VP = create(sessionData.getPresentationId()); - - List preRegisteredVerifiers = verifierService.getTrustedVerifiers().getVerifiers().stream() - .map(verifierDTO -> new Verifier(verifierDTO.getClientId(), verifierDTO.getResponseUris(), verifierDTO.getJwksUri(), verifierDTO.getAllowUnsignedRequest())) - .toList(); + OpenID4VP openID4VP = create( + sessionData.getPresentationId(), + getPreRegisteredVerifiers(), + sessionData.isVerifierClientPreregistered()); // authenticateVerifier to populate internal state in OpenID4VP before sending error - openID4VP.authenticateVerifier(sessionData.getAuthorizationRequest(), preRegisteredVerifiers, sessionData.isVerifierClientPreregistered()); + openID4VP.authenticateVerifier(sessionData.getAuthorizationRequest()); Exception errorForVerifier = openId4VPErrorException(payload); VerifierResponse verifierResponse = openID4VP.sendErrorInfoToVerifier(errorForVerifier); - log.info("Sent rejection to verifier for presentationId {}. Response: {}", sessionData.getPresentationId(), verifierResponse); + log.info("Sent error to verifier for presentationId={}. Response: {}", + sessionData.getPresentationId(), verifierResponse); return verifierResponse; } + public List getPreRegisteredVerifiers() throws ApiNotAccessibleException, IOException { + return verifierService.getTrustedVerifiers().getVerifiers().stream() + .map(v -> new Verifier(v.getClientId(), v.getResponseUris(), v.getJwksUri(), v.getAllowUnsignedRequest(), v.getSpecVersion())) + .toList(); + } + /** * Maps wallet {@link ErrorDTO#errorCode} to inji-openid4vp exceptions {@code error} * matches (e.g. {@link OpenID4VPErrorCodes#INVALID_TRANSACTION_DATA} vs {@link OpenID4VPErrorCodes#ACCESS_DENIED}). */ private Exception openId4VPErrorException(ErrorDTO payload) { if (payload == null) { - throw new IllegalArgumentException("Invalid error payload"); + throw new IllegalArgumentException("Error payload must not be null"); } String message = payload.getErrorMessage() != null ? payload.getErrorMessage() : ""; String code = payload.getErrorCode(); - if (code == null || code.isBlank()) { - return new OpenID4VPExceptions.AccessDenied(message, "OpenID4VPService"); - } - if (OpenID4VPErrorCodes.ACCESS_DENIED.equals(code)) { - return new OpenID4VPExceptions.AccessDenied(message, "OpenID4VPService"); - } if (OpenID4VPErrorCodes.INVALID_TRANSACTION_DATA.equals(code)) { return new OpenID4VPExceptions.InvalidTransactionData(message, "OpenID4VPService"); } // Default to AccessDenied for any unrecognized error codes return new OpenID4VPExceptions.AccessDenied(message, "OpenID4VPService"); } -} \ No newline at end of file +} diff --git a/src/main/java/io/mosip/mimoto/service/impl/SessionManager.java b/src/main/java/io/mosip/mimoto/service/impl/SessionManager.java index 1ac52bee2..d39a72c97 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/SessionManager.java +++ b/src/main/java/io/mosip/mimoto/service/impl/SessionManager.java @@ -80,12 +80,13 @@ private void validateInputParameters(HttpSession httpSession, String walletId, S * @param credentials The decrypted credentials to cache. */ public void storeMatchingWalletCredentialsInPresentationSessionData(HttpSession httpSession, String walletId, VerifiablePresentationSessionData existingSessionData, List credentials) { - VerifiablePresentationSessionData updatedSessionData = new VerifiablePresentationSessionData(existingSessionData.getPresentationId(), + VerifiablePresentationSessionData updatedSessionData = new VerifiablePresentationSessionData( + existingSessionData.getPresentationId(), existingSessionData.getAuthorizationRequest(), existingSessionData.getCreatedAt(), existingSessionData.isVerifierClientPreregistered(), - credentials - ); + credentials, + existingSessionData.isDcql()); // Update the presentations map with the updated session data Map presentations = (Map) httpSession.getAttribute(SessionKeys.PRESENTATIONS + "::" + walletId); diff --git a/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java b/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java index 984703f46..e99ef0809 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java +++ b/src/main/java/io/mosip/mimoto/service/impl/VcSdJwtCredentialFormatHandler.java @@ -165,8 +165,9 @@ public Map> extractAllPropertiesFromSdJwt(String sdJ // Extract public claims from the credential JWT claims.put("publicClaims", extractPublicClaims(sdJwt)); - // Extract disclosures and merge with claims + // Disclosure blobs for submit/UI; decoded values for DCQL/PE claim matching (see sdClaimValues). claims.put("sdClaims", extractSdClaimsForOVP(sdJwt)); + claims.put("sdClaimValues", extractSdClaimValuesForMatching(sdJwt)); return claims; @@ -234,6 +235,82 @@ private Map extractSdClaimsForOVP(SDJWT sdJwt) { return pathToDisclosures; } + /** + * Path → decoded disclosure values for DCQL/PE matching ({@code CredentialMatchingServiceImpl#getCredentialData()}). + * Unlike {@link #extractSdClaimsForOVP}, this returns claim values (e.g. {@code true}, {@code "John"}), not base64 blobs. + */ + private Map extractSdClaimValuesForMatching(SDJWT sdJwt) { + Map digestToDisclosure = new HashMap<>(); + List disclosures = sdJwt.getDisclosures(); + if (disclosures != null) { + for (Disclosure disclosure : disclosures) { + digestToDisclosure.put(disclosure.digest(), disclosure); + } + } + + String credentialJwt = sdJwt.getCredentialJwt(); + Map payload = parseJwtPayload(credentialJwt); + if (payload == null || payload.isEmpty()) { + return Collections.emptyMap(); + } + + Map pathToValues = new LinkedHashMap<>(); + resolveDecodedClaimValues(payload, "", digestToDisclosure, pathToValues); + return pathToValues; + } + + /** Walks the SD-JWT payload tree and records decoded claim values at each JSON path (mirrors {@link #resolveDisclosures}). */ + private void resolveDecodedClaimValues(Object value, String path, Map digestToDisclosure, + Map pathToValues) { + if (value instanceof List list) { + for (int i = 0; i < list.size(); i++) { + Object item = list.get(i); + String currentPath = path + "[" + i + "]"; + if (item instanceof Map mapItem) { + if (mapItem.size() == 1 && mapItem.containsKey(KEY)) { + Disclosure disclosure = digestToDisclosure.get(mapItem.get(KEY)); + if (disclosure != null) { + pathToValues.put(currentPath, disclosure.getClaimValue()); + resolveDecodedClaimValues(disclosure.getClaimValue(), currentPath, digestToDisclosure, pathToValues); + } + continue; + } + } + resolveDecodedClaimValues(item, currentPath, digestToDisclosure, pathToValues); + } + return; + } + + if (value instanceof Map map) { + Object sdDigestsObj = map.get(SD); + if (sdDigestsObj instanceof List sdDigests) { + for (Object digestObj : sdDigests) { + String digest = (String) digestObj; + Disclosure disclosure = digestToDisclosure.get(digest); + if (disclosure == null || disclosure.getClaimName() == null) { + continue; + } + String claimName = disclosure.getClaimName(); + if (SD.equals(claimName) || KEY.equals(claimName)) { + continue; + } + + String fullPath = path.isEmpty() ? claimName : path + "." + claimName; + pathToValues.put(fullPath, disclosure.getClaimValue()); + resolveDecodedClaimValues(disclosure.getClaimValue(), fullPath, digestToDisclosure, pathToValues); + } + } + + for (Map.Entry entry : map.entrySet()) { + if (SD.equals(entry.getKey())) { + continue; + } + String fullPath = path.isEmpty() ? entry.getKey().toString() : path + "." + entry.getKey(); + resolveDecodedClaimValues(entry.getValue(), fullPath, digestToDisclosure, pathToValues); + } + } + } + private void resolveDisclosures(Object value, String path, List parentDisclosures, Map digestToDisclosure, Map digestToDisclosureB64, Map pathToDisclosures) { if (value instanceof List) { List list = (List) value; diff --git a/src/main/java/io/mosip/mimoto/service/impl/WalletPresentationServiceImpl.java b/src/main/java/io/mosip/mimoto/service/impl/WalletPresentationServiceImpl.java index a0085ecbf..e3cc5c558 100644 --- a/src/main/java/io/mosip/mimoto/service/impl/WalletPresentationServiceImpl.java +++ b/src/main/java/io/mosip/mimoto/service/impl/WalletPresentationServiceImpl.java @@ -12,34 +12,37 @@ import io.mosip.mimoto.constant.OpenID4VPConstants; import io.mosip.mimoto.constant.SigningAlgorithm; import io.mosip.mimoto.dto.*; -import io.mosip.mimoto.dto.MatchingCredentialsDTO; import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; import io.mosip.mimoto.exception.*; import io.mosip.mimoto.model.VerifiablePresentation; import io.mosip.mimoto.repository.VerifiablePresentationsRepository; -import io.mosip.mimoto.service.CredentialMatchingService; -import io.mosip.mimoto.service.KeyPairRetrievalService; -import io.mosip.mimoto.service.VerifierService; -import io.mosip.mimoto.service.WalletPresentationService; -import io.mosip.mimoto.service.DataProtectionService; +import io.mosip.mimoto.service.*; +import io.mosip.mimoto.util.AuthorizationRequestHelper; import io.mosip.mimoto.util.SigningKeyUtil; import io.mosip.mimoto.util.Utilities; import io.mosip.mimoto.util.UrlParameterUtils; +import io.mosip.mimoto.util.DcqlClaimSetHelper; +import io.mosip.mimoto.util.DcqlMatchingHelper; +import io.mosip.mimoto.util.DcqlCredentialSetHelper; +import io.mosip.mimoto.util.SelectedSdClaimsUtil; import io.mosip.openID4VP.OpenID4VP; -import io.mosip.openID4VP.authorizationResponse.unsignedVPToken.types.sdJwt.UnsignedSdJwtVPToken; -import io.mosip.openID4VP.common.EncoderKt; +import io.mosip.openID4VP.authorizationRequest.AuthorizationDcqlRequest; +import io.mosip.openID4VP.authorizationRequest.AuthorizationPresentationExchangeRequest; import io.mosip.openID4VP.authorizationRequest.AuthorizationRequest; import io.mosip.openID4VP.authorizationRequest.Verifier; import io.mosip.openID4VP.authorizationRequest.clientMetadata.ClientMetadata; -import io.mosip.mimoto.service.CredentialFormatHandlerFactory; +import io.mosip.openID4VP.authorizationRequest.clientMetadata.ClientMetadataDraft23; import io.mosip.openID4VP.authorizationResponse.unsignedVPToken.UnsignedVPToken; -import io.mosip.openID4VP.authorizationResponse.unsignedVPToken.types.ldp.UnsignedLdpVPToken; -import io.mosip.openID4VP.authorizationResponse.vpTokenSigningResult.types.sdJwt.SdJwtVPTokenSigningResult; import io.mosip.openID4VP.authorizationResponse.vpTokenSigningResult.VPTokenSigningResult; -import io.mosip.openID4VP.authorizationResponse.vpTokenSigningResult.types.ldp.LdpVPTokenSigningResult; import io.mosip.openID4VP.constants.FormatType; +import io.mosip.openID4VP.dcql.query.ClaimsQuery; +import io.mosip.openID4VP.dcql.query.CredentialQuery; +import io.mosip.openID4VP.dcql.query.CredentialSetQuery; +import io.mosip.openID4VP.dcql.query.DCQLQuery; +import io.mosip.openID4VP.exceptions.OpenID4VPExceptions; import io.mosip.openID4VP.verifier.VerifierResponse; +import io.mosip.openID4VP.wallet.Credential; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; @@ -47,7 +50,6 @@ import org.springframework.stereotype.Service; import java.io.IOException; -import java.lang.IllegalArgumentException; import java.net.URISyntaxException; import java.nio.charset.StandardCharsets; import java.security.KeyPair; @@ -59,542 +61,855 @@ import static io.mosip.mimoto.exception.ErrorConstants.*; /** - * Service implementation for handling wallet presentation operations + * Service implementation for handling wallet presentation operations. */ @Slf4j @Service public class WalletPresentationServiceImpl implements WalletPresentationService { - private static final String DEFAULT_SIGNATURE_SUITE = "JsonWebSignature2020"; private static final String UNKNOWN_VERIFIER = "unknown"; private static final String EMPTY_JSON = "{}"; private final VerifierService verifierService; - private final OpenID4VPService openID4VPService; - private final ObjectMapper objectMapper; - private final KeyPairRetrievalService keyPairService; - private final CredentialMatchingService credentialMatchingService; - private final VerifiablePresentationsRepository verifiablePresentationsRepository; - - private final DataProtectionService dataProtectionService; - private final CredentialFormatHandlerFactory credentialFormatHandlerFactory; - - public WalletPresentationServiceImpl(VerifierService verifierService, OpenID4VPService openID4VPService, ObjectMapper objectMapper, KeyPairRetrievalService keyPairService, CredentialMatchingService credentialMatchingService, VerifiablePresentationsRepository verifiablePresentationsRepository, DataProtectionService dataProtectionService, CredentialFormatHandlerFactory credentialFormatHandlerFactory) { + private final WalletCredentialService walletCredentialService; + + public WalletPresentationServiceImpl( + VerifierService verifierService, + OpenID4VPService openID4VPService, + ObjectMapper objectMapper, + KeyPairRetrievalService keyPairService, + CredentialMatchingService credentialMatchingService, + VerifiablePresentationsRepository verifiablePresentationsRepository, + CredentialFormatHandlerFactory credentialFormatHandlerFactory, + WalletCredentialService walletCredentialService) { this.verifierService = verifierService; this.openID4VPService = openID4VPService; this.objectMapper = objectMapper; this.keyPairService = keyPairService; this.credentialMatchingService = credentialMatchingService; this.verifiablePresentationsRepository = verifiablePresentationsRepository; - this.dataProtectionService = dataProtectionService; this.credentialFormatHandlerFactory = credentialFormatHandlerFactory; + this.walletCredentialService = walletCredentialService; } @Override - public VPResponseDTO handleVPAuthorizationRequest(String urlEncodedVPAuthorizationRequest, String walletId) throws ApiNotAccessibleException, IOException, URISyntaxException { + public VPResponseDTO handleVPAuthorizationRequest(String urlEncodedVPAuthorizationRequest, String walletId) + throws ApiNotAccessibleException, IOException, URISyntaxException { + String presentationId = UUID.randomUUID().toString(); + // Initialize OpenID4VP instance with presentationId as traceability id for each new Verifiable Presentation request + List preRegisteredVerifiers = openID4VPService.getPreRegisteredVerifiers(); + boolean shouldValidateClient = verifierService.isVerifierClientPreregistered( + preRegisteredVerifiers, urlEncodedVPAuthorizationRequest); - //Initialize OpenID4VP instance with presentationId as traceability id for each new Verifiable Presentation request - OpenID4VP openID4VP = openID4VPService.create(presentationId); + OpenID4VP openID4VP = openID4VPService.create(presentationId, preRegisteredVerifiers, shouldValidateClient); + AuthorizationRequest authorizationRequest = openID4VP.authenticateVerifier(urlEncodedVPAuthorizationRequest); + boolean dcql = AuthorizationRequestHelper.hasDcqlQuery(authorizationRequest); - List preRegisteredVerifiers = getPreRegisteredVerifiers(); - boolean shouldValidateClient = verifierService.isVerifierClientPreregistered(preRegisteredVerifiers, urlEncodedVPAuthorizationRequest); - AuthorizationRequest authorizationRequest = openID4VP.authenticateVerifier(urlEncodedVPAuthorizationRequest, preRegisteredVerifiers, shouldValidateClient); - VerifiablePresentationVerifierDTO verifiablePresentationVerifierDTO = createVPResponseVerifierDTO(preRegisteredVerifiers, authorizationRequest, walletId); + VerifiablePresentationVerifierDTO verifierDTO = + createVPResponseVerifierDTO(preRegisteredVerifiers, authorizationRequest, walletId); - return new VPResponseDTO(presentationId, verifiablePresentationVerifierDTO); + return new VPResponseDTO(presentationId, verifierDTO, dcql); } @Override - public MatchingCredentialsDTO getMatchingCredentials(VerifiablePresentationSessionData sessionData, String walletId, String base64Key) throws ApiNotAccessibleException, IOException { - log.debug("Getting matching credentials for walletId: {}, presentationId: {}", walletId, sessionData != null ? sessionData.getPresentationId() : "null"); + public MatchingCredentialsDTO getMatchingCredentials( + VerifiablePresentationSessionData sessionData, String walletId, String base64Key) + throws ApiNotAccessibleException, IOException { return credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); } @Override - public ResponseEntity handlePresentationAction(String walletId, String presentationId, SubmitPresentationRequestDTO request, VerifiablePresentationSessionData vpSessionData, String base64Key) { - - log.info("Processing presentation action for walletId: {}, presentationId: {}", walletId, presentationId); + public ResponseEntity handlePresentationAction( + String walletId, String presentationId, SubmitPresentationRequestDTO request, + VerifiablePresentationSessionData vpSessionData, String base64Key) { try { // Determine the action based on request content if (request.isSubmissionRequest()) { - log.info("Processing presentation submission for presentationId: {}", presentationId); - return handlePresentationSubmission(walletId, presentationId, request, vpSessionData, base64Key); - - } else if (request.isRejectionRequest()) { - log.info("Processing verifier rejection for presentationId: {}", presentationId); + if (base64Key == null || base64Key.isBlank()) { + return Utilities.getErrorResponseEntityWithoutWrapper( + new InvalidRequestException(INVALID_REQUEST.getErrorCode(), + "Wallet key is required for credential presentation"), + INVALID_REQUEST.getErrorCode(), HttpStatus.BAD_REQUEST, MediaType.APPLICATION_JSON); + } + SubmitPresentationResponseDTO response = + submitPresentation(vpSessionData, walletId, presentationId, request, base64Key); + return ResponseEntity.ok(response); + } + if (request.isRejectionRequest()) { return handleVerifierRejection(walletId, vpSessionData, request); - - } else { - log.warn("Invalid request format - must contain either selectedCredentials or both errorCode and errorMessage"); - return Utilities.getErrorResponseEntityWithoutWrapper(new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Request must contain either selectedCredentials or both errorCode and errorMessage"), INVALID_REQUEST.getErrorCode(), HttpStatus.BAD_REQUEST, MediaType.APPLICATION_JSON); } + return Utilities.getErrorResponseEntityWithoutWrapper( + new InvalidRequestException(INVALID_REQUEST.getErrorCode(), + "Request must contain selectedCredentials / dcqlSelections or both errorCode and errorMessage"), + INVALID_REQUEST.getErrorCode(), HttpStatus.BAD_REQUEST, MediaType.APPLICATION_JSON); + + } catch (JOSEException ex) { + return Utilities.getErrorResponseEntityWithoutWrapper( + ex, JWT_SIGNING_ERROR.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); + } catch (KeyGenerationException | DecryptionException ex) { + return Utilities.getErrorResponseEntityWithoutWrapper( + ex, KEY_GENERATION_ERROR.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); + } catch (ApiNotAccessibleException | IOException ex) { + return Utilities.getErrorResponseEntityWithoutWrapper( + ex, WALLET_CREATE_VP_EXCEPTION.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); + } catch (VPErrorNotSentException ex) { + return Utilities.getErrorResponseEntityWithoutWrapper( + ex, REJECT_VERIFIER_EXCEPTION.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); + } catch (IllegalStateException | java.lang.IllegalArgumentException ex) { + return Utilities.getErrorResponseEntityWithoutWrapper( + ex, INVALID_REQUEST.getErrorCode(), HttpStatus.BAD_REQUEST, MediaType.APPLICATION_JSON); + } catch (OpenID4VPExceptions ex) { + log.error("OpenID4VP error during presentation submission for presentationId={}", presentationId, ex); + if (ex.getCause() != null) { + log.error("OpenID4VP root cause for presentationId={}: {}", presentationId, + ex.getCause().getMessage(), ex.getCause()); + } + return Utilities.getErrorResponseEntityWithoutWrapper( + ex, ex.getErrorCode(), HttpStatus.BAD_REQUEST, MediaType.APPLICATION_JSON); + } + } + + /** + * Submits a presentation with selected credentials (Draft-23 or DCQL). + */ + public SubmitPresentationResponseDTO submitPresentation( + VerifiablePresentationSessionData sessionData, String walletId, String presentationId, + SubmitPresentationRequestDTO request, String base64Key) + throws ApiNotAccessibleException, IOException, JOSEException, + KeyGenerationException, DecryptionException, OpenID4VPExceptions { - } catch (JOSEException exception) { - log.error("JWT signing error during presentation action for walletId: {}, presentationId: {}", walletId, presentationId, exception); - return Utilities.getErrorResponseEntityWithoutWrapper(exception, JWT_SIGNING_ERROR.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); + validateSubmissionRequest(request); + LocalDateTime requestedAt = LocalDateTime.now(); - } catch (KeyGenerationException exception) { - log.error("Key generation/retrieval error during presentation action for walletId: {}, presentationId: {}", walletId, presentationId, exception); - return Utilities.getErrorResponseEntityWithoutWrapper(exception, KEY_GENERATION_ERROR.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); + // Step 1: Create OpenID4VP instance and authenticate the verifier from session data + List preRegisteredVerifiers = openID4VPService.getPreRegisteredVerifiers(); + OpenID4VP openID4VP = openID4VPService.create( + presentationId, preRegisteredVerifiers, sessionData.isVerifierClientPreregistered()); + openID4VP.authenticateVerifier(sessionData.getAuthorizationRequest()); - } catch (DecryptionException exception) { - log.error("Decryption error during presentation action for walletId: {}, presentationId: {}", walletId, presentationId, exception); - return Utilities.getErrorResponseEntityWithoutWrapper(exception, DECRYPTION_ERROR.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); + // Step 2: Load wallet credentials and resolve effective SD-JWT claim paths for submission + Map walletCredentialsById = walletCredentialService + .getDecryptedCredentials(walletId, base64Key).stream() + .collect(Collectors.toMap(DecryptedCredentialDTO::getId, dto -> dto, (a, b) -> a)); - } catch (ApiNotAccessibleException | IOException exception) { - log.error("Error during presentation action for walletId: {}, presentationId: {}", walletId, presentationId, exception); - return Utilities.getErrorResponseEntityWithoutWrapper(exception, WALLET_CREATE_VP_EXCEPTION.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); + if (request.isDcqlSubmission()) { + validateDcqlSelections(request, sessionData); + } - } catch (VPErrorNotSentException exception) { - log.error("Error sending rejection to verifier for walletId: {}, presentationId: {}", walletId, presentationId, exception); - return Utilities.getErrorResponseEntityWithoutWrapper(exception, REJECT_VERIFIER_EXCEPTION.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); + Map> effectiveSelectedSdClaims = + resolveSubmissionSdClaims(request, sessionData, walletCredentialsById); + + // Step 3: Build credential map for inji-openid4vp (descriptor-based for Draft-23, query-based for DCQL) + Map> credentialMap; + if (request.isDcqlSubmission()) { + credentialMap = buildQueryCredentialMap( + request.getDcqlSelections(), sessionData, effectiveSelectedSdClaims, walletCredentialsById); + } else { + List selected = fetchSelectedCredentials( + sessionData, request.getSelectedCredentialIds()); + credentialMap = buildDescriptorCredentialMap(selected, effectiveSelectedSdClaims, walletCredentialsById); + } - } catch (IllegalStateException exception) { - log.error("Invalid state during presentation action for walletId: {}, presentationId: {}", walletId, presentationId, exception); - return Utilities.getErrorResponseEntityWithoutWrapper(exception, WALLET_CREATE_VP_EXCEPTION.getErrorCode(), HttpStatus.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON); + // Step 4: Construct unsigned VP tokens and sign them + List unsignedVPTokens = openID4VP.constructUnsignedVPToken(credentialMap); + List signingResults = signVPTokens(unsignedVPTokens, walletId, base64Key); - } catch (IllegalArgumentException exception) { - log.error("Invalid argument during presentation action for walletId: {}, presentationId: {}", walletId, presentationId, exception); - return Utilities.getErrorResponseEntityWithoutWrapper(exception, INVALID_REQUEST.getErrorCode(), HttpStatus.BAD_REQUEST, MediaType.APPLICATION_JSON); + // Step 5: Share verifiable presentation with verifier using OpenID4VP JAR + try { + VerifierResponse response = openID4VP.sendVPResponseToVerifier(signingResults); + boolean success = response.getStatusCode() >= 200 && response.getStatusCode() < 300; + // Step 6: Store presentation record in database + storePresentationRecord(walletId, presentationId, request, sessionData, success, requestedAt); + return buildSubmitResponse( + success, + response.getRedirectUri(), + success ? OpenID4VPConstants.MESSAGE_PRESENTATION_SUCCESS + : OpenID4VPConstants.MESSAGE_PRESENTATION_SHARE_FAILED); + } catch (Exception ex) { + log.error("Failed to send VP to verifier for presentationId={}", presentationId, ex); + storePresentationRecord(walletId, presentationId, request, sessionData, false, requestedAt); + return buildSubmitResponse( + false, null, OpenID4VPConstants.MESSAGE_PRESENTATION_SHARE_FAILED); } } - /** - * Creates a VerifiablePresentationVerifierDTO from the authorization request - */ - private VerifiablePresentationVerifierDTO createVPResponseVerifierDTO(List preRegisteredVerifiers, AuthorizationRequest authorizationRequest, String walletId) { - boolean isVerifierPreRegisteredWithWallet = preRegisteredVerifiers.stream().map(Verifier::getClientId).toList().contains(authorizationRequest.getClientId()); - boolean isVerifierTrustedByWallet = verifierService.isVerifierTrustedByWallet(authorizationRequest.getClientId(), walletId); - String clientName = Optional.ofNullable(authorizationRequest.getClientMetadata()).map(ClientMetadata::getClientName).filter(name -> !name.isBlank()).orElse(authorizationRequest.getClientId()); - String logo = Optional.ofNullable(authorizationRequest.getClientMetadata()).map(ClientMetadata::getLogoUri).orElse(null); - return new VerifiablePresentationVerifierDTO(authorizationRequest.getClientId(), clientName, logo, isVerifierTrustedByWallet, isVerifierPreRegisteredWithWallet, authorizationRequest.getRedirectUri()); + private SubmitPresentationResponseDTO buildSubmitResponse(boolean success, String redirectUri, String message) { + return SubmitPresentationResponseDTO.builder() + .redirectUri(redirectUri) + .status(success ? OpenID4VPConstants.STATUS_SUCCESS : OpenID4VPConstants.STATUS_ERROR) + .message(message) + .build(); } /** - * Gets the list of pre-registered verifiers + * Builds Draft-23 credential map keyed by input descriptor id. */ - private List getPreRegisteredVerifiers() throws ApiNotAccessibleException, IOException { - return verifierService.getTrustedVerifiers().getVerifiers().stream().map(verifierDTO -> new Verifier(verifierDTO.getClientId(), verifierDTO.getResponseUris(), verifierDTO.getJwksUri(), verifierDTO.getAllowUnsignedRequest())).toList(); + private Map> buildDescriptorCredentialMap( + List selected, + Map> selectedSdClaims, + Map walletCredentialsById) { + + Map> result = new LinkedHashMap<>(); + for (DecryptedCredentialDTO dto : selected) { + DecryptedCredentialDTO credentialForSubmission = resolveCredentialForSubmission(dto, walletCredentialsById); + String key = (credentialForSubmission.getIdentifier() != null && !credentialForSubmission.getIdentifier().isBlank()) + ? credentialForSubmission.getIdentifier() : credentialForSubmission.getId(); + result.computeIfAbsent(key, k -> new ArrayList<>()) + .add(toLibraryCredential(credentialForSubmission, selectedSdClaims)); + } + return result; } /** - * Handles presentation submission with selected credentials + * Builds DCQL credential map keyed by query id. */ - private ResponseEntity handlePresentationSubmission(String walletId, String presentationId, SubmitPresentationRequestDTO request, VerifiablePresentationSessionData sessionData, String base64Key) throws ApiNotAccessibleException, IOException, JOSEException, KeyGenerationException, DecryptionException { - - log.debug("Submitting presentation for walletId: {}, presentationId: {}", walletId, presentationId); - - if (base64Key == null || base64Key.isBlank()) { - log.warn("Wallet key not found for walletId: {}", walletId); - throw new IllegalArgumentException("Wallet key is required for presentation submission"); + private Map> buildQueryCredentialMap( + List selections, + VerifiablePresentationSessionData sessionData, + Map> effectiveSdClaims, + Map walletCredentialsById) { + + Map cache = Optional.ofNullable(sessionData.getMatchingCredentials()) + .orElse(List.of()).stream() + .collect(Collectors.toMap(DecryptedCredentialDTO::getId, d -> d)); + + Map> result = new LinkedHashMap<>(); + for (DcqlCredentialSelection selection : selections) { + List credentials = new ArrayList<>(); + for (String id : selection.getSelectedCredentialIds()) { + DecryptedCredentialDTO sessionDto = cache.get(id); + if (sessionDto == null) { + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), + "Selected credential not found in session: " + id); + } + if (sessionDto.getIdentifier() == null || sessionDto.getIdentifier().isBlank()) { + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), + "Credential " + id + " has no query mapping — call GET /credentials before submit"); + } + DecryptedCredentialDTO credentialForSubmission = + resolveCredentialForSubmission(sessionDto, walletCredentialsById); + credentials.add(toLibraryCredential(credentialForSubmission, effectiveSdClaims)); + } + String mapKey = resolveDcqlMapKey(selection, cache); + result.merge(mapKey, credentials, (existing, incoming) -> { + List merged = new ArrayList<>(existing); + merged.addAll(incoming); + return merged; + }); } - - SubmitPresentationResponseDTO response = submitPresentation(sessionData, walletId, presentationId, request, base64Key); - - log.info("Presentation submission completed successfully for walletId: {}, presentationId: {}", walletId, presentationId); - return ResponseEntity.status(HttpStatus.OK).body(response); + return result; } /** - * Handles verifier rejection with error details + * Resolves the DCQL query id used as the inji-openid4vp map key. The client-supplied + * {@code queryId} is authoritative when present, since one wallet credential may match + * multiple DCQL queries and the session stores only the first match's identifier. */ - private ResponseEntity handleVerifierRejection(String walletId, VerifiablePresentationSessionData vpSessionData, SubmitPresentationRequestDTO request) throws VPErrorNotSentException { - - log.debug("Rejecting verifier for walletId: {}", walletId); - - // Create ErrorDTO from the request - ErrorDTO errorPayload = new ErrorDTO(); - errorPayload.setErrorCode(request.getErrorCode()); - errorPayload.setErrorMessage(request.getErrorMessage()); - - // Reject the verifier - SubmitPresentationResponseDTO submitPresentationResponseDTO = rejectVerifier(walletId, vpSessionData, errorPayload); - - log.info("Verifier rejection completed successfully for walletId: {}", walletId); - - return ResponseEntity.status(HttpStatus.OK).body(submitPresentationResponseDTO); + private String resolveDcqlMapKey(DcqlCredentialSelection selection, Map cache) { + if (selection.getQueryId() != null && !selection.getQueryId().isBlank()) { + return selection.getQueryId(); + } + List selectedIds = selection.getSelectedCredentialIds(); + if (selectedIds == null || selectedIds.isEmpty()) { + return selection.getQueryId(); + } + String sessionQueryId = null; + for (String id : selectedIds) { + DecryptedCredentialDTO dto = cache.get(id); + if (dto == null || dto.getIdentifier() == null || dto.getIdentifier().isBlank()) { + continue; + } + if (sessionQueryId == null) { + sessionQueryId = dto.getIdentifier(); + } else if (!sessionQueryId.equals(dto.getIdentifier())) { + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), + "Selected credentials belong to different DCQL queries: " + + sessionQueryId + " vs " + dto.getIdentifier()); + } + } + return sessionQueryId; } /** - * Rejects the verifier by sending error information + * Merges session credential metadata with the latest decrypted credential payload from the wallet. */ - private SubmitPresentationResponseDTO rejectVerifier(String walletId, VerifiablePresentationSessionData vpSessionData, ErrorDTO payload) throws VPErrorNotSentException { - try { - VerifierResponse verifierResponse = openID4VPService.sendErrorToVerifier(vpSessionData, payload); - log.info("Sent rejection to verifier. Response: {}", verifierResponse); - - SubmitPresentationResponseDTO submitPresentationResponseDTO = new SubmitPresentationResponseDTO(); - submitPresentationResponseDTO.setStatus(REJECTED_VERIFIER.getErrorCode()); - submitPresentationResponseDTO.setMessage(REJECTED_VERIFIER.getErrorMessage()); - submitPresentationResponseDTO.setRedirectUri(verifierResponse.getRedirectUri()); - return submitPresentationResponseDTO; - } catch (ApiNotAccessibleException | IOException | URISyntaxException | IllegalArgumentException e) { - log.error("Failed to send rejection to verifier for walletId: {} - Error: {}", walletId, e.getMessage(), e); - throw new VPErrorNotSentException("Failed to send rejection to verifier - " + e.getMessage()); + private DecryptedCredentialDTO resolveCredentialForSubmission( + DecryptedCredentialDTO sessionDto, Map walletCredentialsById) { + DecryptedCredentialDTO walletDto = walletCredentialsById.get(sessionDto.getId()); + if (walletDto == null) { + return sessionDto; } + return DecryptedCredentialDTO.builder() + .id(sessionDto.getId()) + .walletId(walletDto.getWalletId()) + .credential(walletDto.getCredential()) + .credentialMetadata(walletDto.getCredentialMetadata()) + .createdAt(walletDto.getCreatedAt()) + .updatedAt(walletDto.getUpdatedAt()) + .identifier(sessionDto.getIdentifier()) + .build(); } /** - * Submits a presentation with selected credentials + * Converts a wallet credential to the inji-openid4vp {@link Credential} type. + * For SD-JWT credentials, disclosures are pre-filtered to the user's selectedSdClaims. */ - public SubmitPresentationResponseDTO submitPresentation(VerifiablePresentationSessionData sessionData, String walletId, String presentationId, SubmitPresentationRequestDTO request, String base64Key) throws ApiNotAccessibleException, IOException, JOSEException, KeyGenerationException, DecryptionException { - - LocalDateTime requestedAt = LocalDateTime.now(); - - validateInputs(request); + private Credential toLibraryCredential(DecryptedCredentialDTO dto, Map> selectedSdClaims) { + VCCredentialResponse vc = dto.getCredential(); + if (CredentialFormat.isSdJwt(vc.getFormat())) { + FormatType format = mapToFormatType(vc.getFormat()); + String sdJwt = buildFilteredSdJwt( + dto, selectedSdClaims != null ? selectedSdClaims.get(dto.getId()) : null); + return new Credential(format, sdJwt, dto.getId()); + } + if (!CredentialFormat.LDP_VC.getFormat().equalsIgnoreCase(vc.getFormat())) { + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), + "Unsupported credential format: " + vc.getFormat()); + } + // inji-openid4vp expects LDP credentials as a JSON object (Map), not a typed POJO. + Credential mapped = DcqlMatchingHelper.toLibraryCredential(dto, objectMapper); + if (mapped == null) { + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), + "Credential " + dto.getId() + " could not be mapped for OpenID4VP submission"); + } + log.info("mapped>>>>>> {}", mapped); + return mapped; + } - log.info("Starting presentation submission for walletId: {}, presentationId: {}", walletId, presentationId); + private void validateDcqlSelections(SubmitPresentationRequestDTO request, VerifiablePresentationSessionData sessionData) + throws ApiNotAccessibleException, IOException { - // Step 1: Fetch full credentials by ID from cache - List selectedCredentials = fetchSelectedCredentials(sessionData, request.getSelectedCredentials()); + DCQLQuery dcqlQuery = openID4VPService.resolveDcqlQuery( + sessionData.getPresentationId(), + sessionData.getAuthorizationRequest(), + sessionData.isVerifierClientPreregistered()); + if (dcqlQuery == null) { + return; + } - // Step 2: Create OpenID4VP instance and construct unsigned VP token - OpenID4VP openID4VP = openID4VPService.create(presentationId); - List preRegisteredVerifiers = verifierService.getTrustedVerifiers().getVerifiers().stream().map(verifierDTO -> new Verifier(verifierDTO.getClientId(), verifierDTO.getResponseUris(), verifierDTO.getJwksUri(), verifierDTO.getAllowUnsignedRequest())).toList(); - openID4VP.authenticateVerifier(sessionData.getAuthorizationRequest(), preRegisteredVerifiers, sessionData.isVerifierClientPreregistered()); + Set validQueryIds = dcqlQuery.getCredentials().stream() + .map(CredentialQuery::getId) + .collect(Collectors.toSet()); - // Holder key for LDP_VC is always ED25519 (Ed25519Signature2020). SD-JWT KB-JWT signing - // derives its own per-credential key from the KB-JWT header alg inside signVPToken. - SigningAlgorithm signingAlgorithm = SigningAlgorithm.ED25519; - KeyPair keyPair = keyPairService.getKeyPairFromDB(walletId, base64Key, signingAlgorithm); - JWK jwk = SigningKeyUtil.generateJwk(signingAlgorithm, keyPair); - Map unsignedVPToken = constructUnsignedVPToken(openID4VP, selectedCredentials, jwk, request.getSelectedSdClaims()); + Map sessionById = Optional.ofNullable(sessionData.getMatchingCredentials()) + .orElse(List.of()).stream() + .collect(Collectors.toMap(DecryptedCredentialDTO::getId, d -> d, (a, b) -> a)); - // Step 3: Sign each unsigned VP token using format-specific signing logic - Map vpTokenSigningResults = signVPToken(unsignedVPToken, jwk, walletId, base64Key); + Map selectionCount = new LinkedHashMap<>(); + for (DcqlCredentialSelection selection : request.getDcqlSelections()) { + String resolvedQueryId = resolveDcqlMapKey(selection, sessionById); + int count = selection.getSelectedCredentialIds() != null ? selection.getSelectedCredentialIds().size() : 0; + selectionCount.merge(resolvedQueryId, count, Integer::sum); - // Step 4: Share verifiable presentation with verifier using OpenID4VP JAR - log.debug("Calling OpenID4VP JAR's shareVerifiablePresentation method"); - try { - VerifierResponse response = openID4VP.sendVPResponseToVerifier(vpTokenSigningResults); - boolean shareSuccess = response.getStatusCode() >= 200 && response.getStatusCode() < 300; - // Step 5: Store presentation record in database - storePresentationRecord(walletId, presentationId, request, sessionData, shareSuccess, requestedAt); - // Step 6: Return success response - return SubmitPresentationResponseDTO.builder().redirectUri(response.getRedirectUri()).status(shareSuccess ? OpenID4VPConstants.STATUS_SUCCESS : OpenID4VPConstants.STATUS_ERROR).message(shareSuccess ? OpenID4VPConstants.MESSAGE_PRESENTATION_SUCCESS : OpenID4VPConstants.MESSAGE_PRESENTATION_SHARE_FAILED).build(); - } catch (Exception e) { - log.error("Failed to share verifiable presentation with verifier", e); - // Store failed presentation record - storePresentationRecord(walletId, presentationId, request, sessionData, false, requestedAt); - return SubmitPresentationResponseDTO.builder().redirectUri(null).status(OpenID4VPConstants.STATUS_ERROR).message(OpenID4VPConstants.MESSAGE_PRESENTATION_SHARE_FAILED).build(); + if (!validQueryIds.contains(resolvedQueryId)) { + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), + "Unknown DCQL query id '" + resolvedQueryId + "'. Valid query ids: " + validQueryIds); + } } - } - /** - * Signs each unsigned VP token by dispatching to the signing logic for its credential format. - * LDP_VC is signed with the ED25519 holder key; SD-JWT (vc+sd-jwt / dc+sd-jwt) signers are derived - * per credential from the KB-JWT header alg inside signSdJwtFormat. - */ - private Map signVPToken(Map unsignedVPTokensMap, JWK ldpVcJwk, String walletId, String base64Key) throws JOSEException, KeyGenerationException, DecryptionException { - log.debug("Signing VP token for {} format types", unsignedVPTokensMap.size()); - - Map results = new HashMap<>(); - for (Map.Entry entry : unsignedVPTokensMap.entrySet()) { - FormatType formatType = entry.getKey(); - UnsignedVPToken unsignedVPToken = entry.getValue(); - - VPTokenSigningResult signingResult; - if (formatType == FormatType.LDP_VC) { - signingResult = signLdpVcFormat(unsignedVPToken, ldpVcJwk); - } else if (formatType == FormatType.VC_SD_JWT || formatType == FormatType.DC_SD_JWT) { - signingResult = signSdJwtFormat(unsignedVPToken, walletId, base64Key); - } else { - log.error("Unsupported format type: {}", formatType); - throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Unsupported format type: " + formatType); + for (CredentialQuery query : dcqlQuery.getCredentials()) { + if (!query.getMultiple()) { + int count = selectionCount.getOrDefault(query.getId(), 0); + if (count > 1) { + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), + "DCQL query '" + query.getId() + "' has multiple=false but " + count + " credential(s) were selected"); + } } - results.put(formatType, signingResult); } - return results; - } - - /** - * Signs SD-JWT JB-JWT tokens. The library provides unsigned KB-JWTs (header.payload) per credential UUID. - * Mimoto signs each one and returns the signatures. - */ - private SdJwtVPTokenSigningResult signSdJwtFormat(UnsignedVPToken unsignedVPToken, String walletId, String base64Key) throws JOSEException, KeyGenerationException, DecryptionException { - UnsignedSdJwtVPToken sdJwtToken = (UnsignedSdJwtVPToken) unsignedVPToken; - Map uuidToUnsignedKBT = sdJwtToken.getUuidToUnsignedKBT(); - - // Cache one signer per algorithm so multiple credentials sharing an alg reuse the same key fetch - Map signerCache = new EnumMap<>(SigningAlgorithm.class); - - Map uuidToSignature = new HashMap<>(); - for (Map.Entry entry: uuidToUnsignedKBT.entrySet()) { - String uuid = entry.getKey(); - // "headerB64.payloadB64" - String unsignedKBT = entry.getValue(); - // Parse the KB-JWT header produced by the OpenID4VP JAR and read its alg. - // The JAR derives this alg from the credential's cnf, so the header is the source of truth. - JWSHeader kbHeader; - try { - String[] parts = unsignedKBT.split("\\."); - kbHeader = JWSHeader.parse(new Base64URL(parts[0])); - } catch (ParseException e) { - throw new JOSEException("Failed to parse KB-JWT header for credential uuid: " + uuid, e); + for (CredentialSetQuery setQuery : DcqlCredentialSetHelper.resolveEffectiveCredentialSets(dcqlQuery)) { + if (!setQuery.getRequired()) { + continue; } + Set allQidsInSet = setQuery.getOptions().stream() + .flatMap(List::stream) + .collect(Collectors.toCollection(LinkedHashSet::new)); - SigningAlgorithm algorithm = SigningAlgorithm.fromString(kbHeader.getAlgorithm().getName()); - - // Build (or reuse) a signer for this algorithm using the wallet's key pair for that alg - JWSSigner jwsSigner = signerCache.get(algorithm); - if (jwsSigner == null) { - KeyPair keyPair = keyPairService.getKeyPairFromDB(walletId, base64Key, algorithm); - JWK jwk = SigningKeyUtil.generateJwk(algorithm, keyPair); - jwsSigner = SigningKeyUtil.createSigner(algorithm, jwk); - signerCache.put(algorithm, jwsSigner); - } + Set selectedForSet = allQidsInSet.stream() + .filter(qid -> selectionCount.getOrDefault(qid, 0) > 0) + .collect(Collectors.toCollection(LinkedHashSet::new)); - // Standard JWT signing input: ASCII bytes of "headerB64.payloadB64" - byte[] signingInput = unsignedKBT.getBytes(StandardCharsets.US_ASCII); + boolean exactlyOneOptionMatched = setQuery.getOptions().stream() + .anyMatch(option -> new LinkedHashSet<>(option).equals(selectedForSet)); - Base64URL signature = jwsSigner.sign(kbHeader, signingInput); - uuidToSignature.put(uuid, signature.toString()); + if (!exactlyOneOptionMatched) { + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), + "Credential selection must satisfy exactly one option in credential_set. " + + "Selected query ids: " + selectedForSet + ", Options: " + setQuery.getOptions()); + } } - - return new SdJwtVPTokenSigningResult(uuidToSignature); } /** - * Signs LDP_VC format verifiable presentation using detached JWT + * Merges explicit {@code selectedSdClaims} with DCQL {@code claim_sets} resolution. + * When a query defines {@code claim_sets} and the client omits {@code selectedSdClaims} for a credential, + * the first satisfiable claim set (or {@code selectedClaimIds}) determines which SD-JWT paths are disclosed. */ - private LdpVPTokenSigningResult signLdpVcFormat(UnsignedVPToken unsignedVPToken, JWK ed25519Jwk) throws JOSEException { - log.debug("Signing LDP_VC format VP token"); - - // LDP_VC is always signed with the ED25519 holder key (Ed25519Signature2020) - JWSSigner jwsSigner = SigningKeyUtil.createSigner(SigningAlgorithm.ED25519, ed25519Jwk); - - String dataToSign = ((UnsignedLdpVPToken) unsignedVPToken).getDataToSign(); - - JWSHeader header = new JWSHeader.Builder(JWSAlgorithm.EdDSA).criticalParams(Set.of(OpenID4VPConstants.JWT_CRITICAL_PARAM_B64)).base64URLEncodePayload(false).build(); - - // Create detached JWT signing input using DataProtectionService - String headerJson = header.toString(); - byte[] inputBytes = dataProtectionService.createDetachedJwtSigningInput(headerJson, dataToSign); - - // Get Base64URL encoded header for proof construction - String header64 = EncoderKt.encodeToBase64Url(headerJson.getBytes(StandardCharsets.UTF_8)); - - // Sign using the provided JWSSigner - Base64URL signatureBase64URL = jwsSigner.sign(header, inputBytes); - String signature = signatureBase64URL.toString(); + private Map> resolveSubmissionSdClaims( + SubmitPresentationRequestDTO request, + VerifiablePresentationSessionData sessionData, + Map walletCredentialsById) + throws ApiNotAccessibleException, IOException { + + Map> merged = new LinkedHashMap<>(); + Map> explicit = request.resolveEffectiveSelectedSdClaims(); + SelectedSdClaimsUtil.mergeInto(merged, explicit); + if (!request.isDcqlSubmission()) { + return merged.isEmpty() ? null : merged; + } - // Create the detached JWT proof: header64 + '..' + signature - String proof = header64 + OpenID4VPConstants.DETACHED_JWT_SEPARATOR + signature; + DCQLQuery dcqlQuery = openID4VPService.resolveDcqlQuery( + sessionData.getPresentationId(), + sessionData.getAuthorizationRequest(), + sessionData.isVerifierClientPreregistered()); + if (dcqlQuery == null) { + return merged.isEmpty() ? null : merged; + } - Map signingResultData = new HashMap<>(); - signingResultData.put(OpenID4VPConstants.JWS, proof); - signingResultData.put(OpenID4VPConstants.PROOF_VALUE, null); - signingResultData.put(OpenID4VPConstants.SIGNATURE_ALGORITHM, DEFAULT_SIGNATURE_SUITE); + Map queriesById = dcqlQuery.getCredentials().stream() + .collect(Collectors.toMap(CredentialQuery::getId, q -> q, (a, b) -> a, LinkedHashMap::new)); + Map sessionById = Optional.ofNullable(sessionData.getMatchingCredentials()) + .orElse(List.of()).stream() + .collect(Collectors.toMap(DecryptedCredentialDTO::getId, d -> d, (a, b) -> a)); + + for (DcqlCredentialSelection selection : request.getDcqlSelections()) { + String queryId = resolveDcqlMapKey(selection, sessionById); + CredentialQuery credentialQuery = queriesById.get(queryId); + if (credentialQuery == null || selection.getSelectedCredentialIds() == null) { + continue; + } + for (String credentialId : selection.getSelectedCredentialIds()) { + if (hasExplicitSdClaimsForCredential(explicit, credentialId, selection)) { + continue; + } + DecryptedCredentialDTO sessionDto = sessionById.get(credentialId); + if (sessionDto == null) { + continue; + } + DecryptedCredentialDTO credForSd = + resolveCredentialForSubmission(sessionDto, walletCredentialsById); + Map sdClaimsMap = extractSdClaimsMap(credForSd); + + if (DcqlClaimSetHelper.hasClaimSets(credentialQuery)) { + // claim_sets present: resolve the first satisfiable set + List claimIds = DcqlClaimSetHelper.resolveClaimIdsForSubmission( + credentialQuery, + null, + path -> sdClaimsMap != null && hasDisclosureForPath(sdClaimsMap, path)); + List claimPaths = DcqlClaimSetHelper.resolveClaimPaths(credentialQuery, claimIds); + if (!claimPaths.isEmpty()) { + SelectedSdClaimsUtil.mergePaths(merged, credentialId, claimPaths); + log.info("DCQL claim_sets resolved for credential {} query '{}': claimIds={}, paths={}", + credentialId, queryId, claimIds, claimPaths); + } + } else { + // No claim_sets: per DCQL spec §6, all queried claims that have SD + // disclosures in this credential must be included in the VP. + resolveAllQueriedSdClaims(credentialQuery, credentialId, sdClaimsMap, merged, queryId); + } + } + } + return merged.isEmpty() ? null : merged; + } - return objectMapper.convertValue(signingResultData, LdpVPTokenSigningResult.class); + private boolean hasExplicitSdClaimsForCredential( + Map> explicit, + String credentialId, + DcqlCredentialSelection selection) { + if (explicit != null && explicit.containsKey(credentialId)) { + return true; + } + return selection.getSelectedSdClaims() != null && selection.getSelectedSdClaims().containsKey(credentialId); } /** - * Fetches selected credentials from the session cache + * When {@code claim_sets} is absent, all claims in {@code CredentialQuery.getClaims()} that have + * an SD disclosure in the credential must be included in the VP per DCQL spec §6. + * Public claims (those in the JWT payload, not in SD disclosures) are skipped — they are + * always present in the credential JWT and require no explicit selection. */ - private List fetchSelectedCredentials(VerifiablePresentationSessionData sessionData, List selectedCredentialIds) { - - log.debug("Fetching {} selected credentials from cache", selectedCredentialIds.size()); - - if (sessionData == null) { - throw new IllegalStateException("Session data is null - cannot fetch credentials"); + private void resolveAllQueriedSdClaims(CredentialQuery credentialQuery, String credentialId, + Map sdClaimsMap, Map> merged, String queryId) { + List claims = credentialQuery.getClaims(); + if (claims == null || claims.isEmpty()) { + return; } - - if (sessionData.getMatchingCredentials() == null) { - throw new IllegalStateException("No matching credentials found in session cache"); + List sdPaths = claims.stream() + .filter(cq -> cq.getPath() != null && !cq.getPath().isEmpty()) + .map(cq -> DcqlClaimSetHelper.buildClaimPath(cq.getPath())) + .filter(path -> sdClaimsMap != null && hasDisclosureForPath(sdClaimsMap, path)) + .collect(Collectors.toList()); + if (!sdPaths.isEmpty()) { + SelectedSdClaimsUtil.mergePaths(merged, credentialId, sdPaths); + log.info("DCQL all-claims resolved for credential {} query '{}': paths={}", + credentialId, queryId, sdPaths); } - - return sessionData.getMatchingCredentials().stream().filter(credential -> selectedCredentialIds.contains(credential.getId())).collect(Collectors.toList()); } - /** - * Constructs unsigned VP token using the OpenID4VP JAR. - * For SD-JWT credentials, disclosures are pre-filtered to the user's selectedSdClaims. - */ - private Map constructUnsignedVPToken(OpenID4VP openID4VP, List credentials, JWK jwk, Map> selectedSdClaims) throws JsonProcessingException { - - log.debug("Constructing unsigned VP token for {} credentials", credentials.size()); - - Map>> verifiableCredentials = convertCredentialsToJarFormat(credentials, selectedSdClaims); - String holderId = resolveHolderId(jwk); - return openID4VP.constructUnsignedVPToken(verifiableCredentials, holderId, DEFAULT_SIGNATURE_SUITE); + @SuppressWarnings("unchecked") + private Map extractSdClaimsMap(DecryptedCredentialDTO dto) { + try { + if (!CredentialFormat.isSdJwt(dto.getCredential().getFormat())) { + return null; + } + Map allProps = credentialFormatHandlerFactory + .getHandler(dto.getCredential().getFormat()) + .extractAllCredentialProperties(dto.getCredential()); + if (allProps == null || !(allProps.get("sdClaims") instanceof Map raw)) { + return null; + } + return (Map) raw; + } catch (Exception e) { + log.warn("Could not extract sdClaims for credential {}: {}", dto.getId(), e.getMessage()); + return null; + } + } + private boolean hasDisclosureForPath(Map sdClaimsMap, String claimPath) { + String normalized = normalizeSdClaimPath(claimPath); + Object disc = resolveSdClaimDisclosures(sdClaimsMap, normalized); + if (disc instanceof List list) { + return !list.isEmpty(); + } + return disc instanceof String s && !s.isBlank(); } /** - * Resolves holderId from the user's public key using JWK format + * Signs each unsigned VP token. LDP_VC uses detached JWT signing; SD-JWT signs the KB-JWT + * payload bytes provided by the library. Signers are cached per algorithm. */ - private String resolveHolderId(JWK jwk) throws JsonProcessingException { + private List signVPTokens( + List tokens, String walletId, String base64Key) + throws JOSEException, KeyGenerationException, DecryptionException { - // Convert JWK to JSON string - String jwkJson = objectMapper.writeValueAsString(jwk.toPublicJWK().toJSONObject()); + List results = new ArrayList<>(); + // Cache one signer per algorithm so multiple credentials sharing an alg reuse the same key fetch + Map signerCache = new EnumMap<>(SigningAlgorithm.class); - // Base64URL encode the JWK JSON - String base64UrlEncodedJwk = EncoderKt.encodeToBase64Url(jwkJson.getBytes(StandardCharsets.UTF_8)); + for (UnsignedVPToken token : tokens) { + SigningAlgorithm algorithm = SigningAlgorithm.fromString( + Optional.ofNullable(token.getSignatureAlgorithm()).filter(s -> !s.isBlank()) + .orElse(SigningAlgorithm.ED25519.getJWSAlgorithm().getName())); - // Construct holderId: did:jwk:{base64url(jwk)}#0 - return OpenID4VPConstants.DID_JWK_PREFIX + base64UrlEncodedJwk + OpenID4VPConstants.DID_KEY_FRAGMENT; - } - - /** - * Converts DecryptedCredentialDTO list to the format expected by the OpenID4VP JAR. - * Extracts the inner credential data from VCCredentialResponse wrapper to remove the "credential" wrapper. - * For SD-JWT credentials, filters disclosures down to only the user-selected claims. - */ - private Map>> convertCredentialsToJarFormat(List credentials, Map> selectedSdClaims) { - Map>> result = new HashMap<>(); - - for (DecryptedCredentialDTO credential: credentials) { - VCCredentialResponse vcResponse = credential.getCredential(); - String format = vcResponse.getFormat(); - FormatType formatType = mapStringToFormatType(format); - - Object credentialData; - if(CredentialFormat.isSdJwt(format)) { - List selectedPaths = selectedSdClaims != null ? selectedSdClaims.get(credential.getId()) : null; - credentialData = buildFilteredSdJwt(credential, selectedPaths); - } else { - credentialData = vcResponse.getCredential(); + JWSSigner signer = signerCache.get(algorithm); + if (signer == null) { + KeyPair keyPair = keyPairService.getKeyPairFromDB(walletId, base64Key, algorithm); + JWK jwk = SigningKeyUtil.generateJwk(algorithm, keyPair); + signer = SigningKeyUtil.createSigner(algorithm, jwk); + signerCache.put(algorithm, signer); } - result.computeIfAbsent(credential.getId(), k -> new HashMap<>()) - .computeIfAbsent(formatType, k -> new ArrayList<>()) - .add(credentialData); + byte[] dataToSign = token.getDataToSign(); + Base64URL signature; + try { + if (token.getFormat() == FormatType.LDP_VC) { + // LDP_VC: sign payload bytes after the first '.' separator + int dotIndex = indexOfDot(dataToSign); + String headerB64 = new String(dataToSign, 0, dotIndex, StandardCharsets.US_ASCII); + byte[] payload = Arrays.copyOfRange(dataToSign, dotIndex + 1, dataToSign.length); + JWSHeader header = JWSHeader.parse(new Base64URL(headerB64)); + signature = signer.sign(header, payload); + } else { + // SD-JWT: standard JWT signing input is ASCII bytes of "headerB64.payloadB64" + String unsignedJwt = new String(dataToSign, StandardCharsets.US_ASCII); + String headerB64 = unsignedJwt.substring(0, unsignedJwt.indexOf('.')); + JWSHeader header = JWSHeader.parse(new Base64URL(headerB64)); + signature = signer.sign(header, dataToSign); + } + } catch (ParseException e) { + throw new JOSEException("Failed to parse JWS header for VP token signing", e); + } + results.add(new VPTokenSigningResult(token.getId(), signature.decode())); } - - return result; + return results; } - /** - * Maps format string to FormatType enum. - */ - private FormatType mapStringToFormatType(String format) { - if (format == null) { - log.error("Credential format is null"); - throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Credential format is required."); + private int indexOfDot(byte[] bytes) { + for (int i = 0; i < bytes.length; i++) { + if (bytes[i] == '.') { + return i; + } } - - String formatLower = format.toLowerCase(); - if (CredentialFormat.LDP_VC.getFormat().equals(formatLower)) return FormatType.LDP_VC; - if (CredentialFormat.VC_SD_JWT.getFormat().equals(formatLower)) return FormatType.VC_SD_JWT; - if (CredentialFormat.DC_SD_JWT.getFormat().equals(formatLower)) return FormatType.DC_SD_JWT; - - log.error("Unsupported credential format: {}", format); - throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Unsupported credential format: " + format); + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), "Invalid LDP dataToSign: missing '.' separator"); } /** - * Builds an SD-JWT string containing ONLY the user-selected disclosures. - * Disclosures are shared only when explicitly selected; if selectedPaths is null/empty - * (the user selected no SD claims for this credential), no disclosures are shared. + * Builds an SD-JWT string containing only the user-selected disclosures. + * If selectedPaths is null/empty, no disclosures are shared for that credential. */ private String buildFilteredSdJwt(DecryptedCredentialDTO credential, List selectedPaths) { if (!(credential.getCredential().getCredential() instanceof String sdJwtString)) { - log.warn("Credential {} payload is not a String; skipping SD-JWT filtering", credential.getId()); return String.valueOf(credential.getCredential().getCredential()); } - - // The issuer-signed credential JWT is everything before the first '~'. - // We rebuild from this and append ONLY the explicitly selected disclosures - never all. + // The issuer-signed credential JWT is everything before the first '~' String credentialJwt = sdJwtString.split("~", -1)[0]; - - // No selection for this credential -> user chose to disclose nothing -> share zero disclosures + // No selection for this credential -> share zero disclosures if (selectedPaths == null || selectedPaths.isEmpty()) { return credentialJwt + "~"; } - try { - // Get path -> List mapping from the format handler Map allProps = credentialFormatHandlerFactory .getHandler(credential.getCredential().getFormat()) .extractAllCredentialProperties(credential.getCredential()); - if (!(allProps.get("sdClaims") instanceof Map rawSdClaims)) { return credentialJwt + "~"; } @SuppressWarnings("unchecked") Map sdClaimsMap = (Map) rawSdClaims; - if (sdClaimsMap.isEmpty()) { - return credentialJwt + "~"; - } - - // Normalize paths: "$.name" -> "name", "$.address.city" -> "address.city" - Set normalizedPaths = selectedPaths.stream(). - map(p -> p.startsWith("$.") ? p.substring(2) : p) + Set normalizedPaths = selectedPaths.stream() + .map(this::normalizeSdClaimPath) .collect(Collectors.toCollection(LinkedHashSet::new)); - - // Collect all disclosures B64 strings for the selected paths (preserving order, deduplicating) - Set allDisclosuresB64 = new LinkedHashSet<>(); + // Collect disclosure blobs for the selected paths (preserving order, deduplicating) + Set disclosures = new LinkedHashSet<>(); for (String path : normalizedPaths) { - Object disclosures = sdClaimsMap.get(path); - if (disclosures instanceof List discList) { - discList.forEach(d -> allDisclosuresB64.add((String) d)); + Object disc = resolveSdClaimDisclosures(sdClaimsMap, path); + int before = disclosures.size(); + addDisclosureStrings(disclosures, disc); + if (disclosures.size() == before) { + log.warn("No SD-JWT disclosures found for credential {} path '{}' (available keys: {})", + credential.getId(), path, sdClaimsMap.keySet()); } } - + log.info("SD-JWT filtering for credential {}: selectedPaths={}, disclosuresIncluded={}", + credential.getId(), normalizedPaths, disclosures.size()); // Reconstruct: credentialJwt ~ disc1 ~ disc2 ~ (trailing ~ required by SD-JWT) StringBuilder sb = new StringBuilder(credentialJwt); - for (String disc: allDisclosuresB64) { + for (String disc : disclosures) { sb.append("~").append(disc); } sb.append("~"); return sb.toString(); - } catch (Exception e) { - log.error("Failed to filter SD-JWT disclosures for credential: {}, selectedPaths: {}. Sharing no disclosures. Error: {}", credential.getId(), selectedPaths, e.getMessage(), e); + log.warn("SD-JWT filtering failed for credential {}: {}", credential.getId(), e.getMessage()); return credentialJwt + "~"; } } + private String normalizeSdClaimPath(String path) { + if (path == null) { + return ""; + } + String normalized = path.startsWith("$.") ? path.substring(2) : path; + return normalized.replaceFirst("^credentialSubject(\\[\\d+\\])?\\.", ""); + } + /** - * Stores presentation record in the database - * Uses @Transactional to ensure atomicity of database operations + * Resolves disclosure blobs for a UI claim path. Matching returns paths like {@code $.dateOfBirth} + * while the SD-JWT handler may store keys as {@code credentialSubject.dateOfBirth} or + * {@code credentialSubject[0].dateOfBirth}. */ - private void storePresentationRecord(String walletId, String presentationId, SubmitPresentationRequestDTO request, VerifiablePresentationSessionData sessionData, boolean success, LocalDateTime requestedAt) { - log.debug("Storing presentation record in database - success: {}", success); + private Object resolveSdClaimDisclosures(Map sdClaimsMap, String normalizedPath) { + String targetPath = normalizeSdClaimPath(normalizedPath); + for (Map.Entry entry : sdClaimsMap.entrySet()) { + if (sdClaimPathMatches(entry.getKey(), targetPath)) { + return entry.getValue(); + } + } + return null; + } - try { - if (sessionData == null) { - log.warn("Session data is null for presentationId: {}", presentationId); - return; + private boolean sdClaimPathMatches(String mapKey, String normalizedPath) { + if (mapKey == null || normalizedPath == null) { + return false; + } + return normalizeSdClaimPath(mapKey).equals(normalizedPath); + } + + private void addDisclosureStrings(Set disclosures, Object disc) { + if (disc instanceof List list) { + list.forEach(d -> { + if (d != null) { + disclosures.add(d.toString()); + } + }); + } else if (disc instanceof String s && !s.isBlank()) { + disclosures.add(s); + } + } + + /** + * Maps format string to FormatType enum. + */ + private FormatType mapToFormatType(String format) { + if (CredentialFormat.LDP_VC.getFormat().equalsIgnoreCase(format)) { + return FormatType.LDP_VC; + } + if (CredentialFormat.VC_SD_JWT.getFormat().equalsIgnoreCase(format)) { + return FormatType.VC_SD_JWT; + } + if (CredentialFormat.DC_SD_JWT.getFormat().equalsIgnoreCase(format)) { + return FormatType.DC_SD_JWT; + } + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), + "Unsupported credential format: " + format); + } + + /** + * Fetches selected credentials from the session cache. + * Every requested credential ID must exist in the session (fail-fast, same as DCQL submit). + */ + private List fetchSelectedCredentials( + VerifiablePresentationSessionData sessionData, List selectedCredentialIds) { + if (sessionData == null || sessionData.getMatchingCredentials() == null) { + throw new IllegalStateException("No matching credentials in session — call GET /credentials first"); + } + Map cache = sessionData.getMatchingCredentials().stream() + .collect(Collectors.toMap(DecryptedCredentialDTO::getId, dto -> dto, (a, b) -> a)); + + List result = new ArrayList<>(); + for (String id : selectedCredentialIds) { + DecryptedCredentialDTO dto = cache.get(id); + if (dto == null) { + throw new InvalidRequestException(INVALID_REQUEST.getErrorCode(), + "Selected credential not found in session: " + id); } + result.add(dto); + } + return result; + } - // Extract verifier information from OpenID4VP object - String verifierId = extractVerifierId(sessionData); - String authRequest = extractVerifierAuthRequest(sessionData); - String presentationData = createPresentationData(request); + /** + * Validates all input parameters for presentation submission. + */ + private void validateSubmissionRequest(SubmitPresentationRequestDTO request) { + if (request == null) { + throw new java.lang.IllegalArgumentException("Request cannot be null"); + } + if (request.getSelectedCredentials() == null || request.getSelectedCredentials().isEmpty()) { + throw new java.lang.IllegalArgumentException("Selected credentials cannot be null or empty"); + } + } - // Create the presentation record - VerifiablePresentation presentation = VerifiablePresentation.builder().id(presentationId).walletId(walletId).authRequest(authRequest).presentationData(presentationData).verifierId(verifierId).status(success ? OpenID4VPConstants.STATUS_SUCCESS : OpenID4VPConstants.STATUS_ERROR).requestedAt(requestedAt).consent(true).build(); + /** + * Creates a VerifiablePresentationVerifierDTO from the authorization request. + */ + private VerifiablePresentationVerifierDTO createVPResponseVerifierDTO( + List preRegisteredVerifiers, AuthorizationRequest authorizationRequest, String walletId) { + boolean preRegistered = preRegisteredVerifiers.stream() + .map(Verifier::getClientId).anyMatch(id -> id.equals(authorizationRequest.getClientId())); + boolean trusted = verifierService.isVerifierTrustedByWallet(authorizationRequest.getClientId(), walletId); + String clientName = resolveClientName(authorizationRequest); + String logo = resolveLogoUri(authorizationRequest); + return new VerifiablePresentationVerifierDTO( + authorizationRequest.getClientId(), clientName, logo, trusted, preRegistered, + authorizationRequest.getRedirectUri()); + } - // Save to database - verifiablePresentationsRepository.save(presentation); + private String resolveClientName(AuthorizationRequest authorizationRequest) { + if (authorizationRequest instanceof AuthorizationDcqlRequest dcqlRequest) { + return Optional.ofNullable(dcqlRequest.getClientMetadata()) + .map(ClientMetadata::getClientName).filter(n -> !n.isBlank()) + .orElse(authorizationRequest.getClientId()); + } + if (authorizationRequest instanceof AuthorizationPresentationExchangeRequest peRequest) { + return Optional.ofNullable(peRequest.getClientMetadata()) + .map(ClientMetadataDraft23::getClientName).filter(n -> !n.isBlank()) + .orElse(authorizationRequest.getClientId()); + } + return authorizationRequest.getClientId(); + } + + private String resolveLogoUri(AuthorizationRequest authorizationRequest) { + if (authorizationRequest instanceof AuthorizationDcqlRequest dcqlRequest) { + return Optional.ofNullable(dcqlRequest.getClientMetadata()) + .map(ClientMetadata::getLogoUri).orElse(null); + } + if (authorizationRequest instanceof AuthorizationPresentationExchangeRequest peRequest) { + return Optional.ofNullable(peRequest.getClientMetadata()) + .map(ClientMetadataDraft23::getLogoUri).orElse(null); + } + return null; + } - log.info("Presentation record stored successfully - recordId: {}, walletId: {}, presentationId: {}, status: {}", presentationId, walletId, presentationId, success ? OpenID4VPConstants.STATUS_SUCCESS : OpenID4VPConstants.STATUS_ERROR); + /** + * Handles verifier rejection with error details. + */ + private ResponseEntity handleVerifierRejection( + String walletId, VerifiablePresentationSessionData vpSessionData, SubmitPresentationRequestDTO request) + throws VPErrorNotSentException { + // Create ErrorDTO from the request + ErrorDTO payload = new ErrorDTO(); + payload.setErrorCode(request.getErrorCode()); + payload.setErrorMessage(request.getErrorMessage()); + return ResponseEntity.ok(rejectVerifier(walletId, vpSessionData, payload)); + } + /** + * Rejects the verifier by sending error information. + */ + private SubmitPresentationResponseDTO rejectVerifier( + String walletId, VerifiablePresentationSessionData vpSessionData, ErrorDTO payload) + throws VPErrorNotSentException { + try { + VerifierResponse verifierResponse = openID4VPService.sendErrorToVerifier(vpSessionData, payload); + SubmitPresentationResponseDTO result = new SubmitPresentationResponseDTO(); + result.setStatus(REJECTED_VERIFIER.getErrorCode()); + result.setMessage(REJECTED_VERIFIER.getErrorMessage()); + result.setRedirectUri(verifierResponse.getRedirectUri()); + return result; + } catch (ApiNotAccessibleException | IOException | URISyntaxException | java.lang.IllegalArgumentException e) { + throw new VPErrorNotSentException("Failed to send rejection to verifier — " + e.getMessage()); + } + } + + /** + * Stores presentation record in the database. + */ + private void storePresentationRecord( + String walletId, String presentationId, SubmitPresentationRequestDTO request, + VerifiablePresentationSessionData sessionData, boolean success, LocalDateTime requestedAt) { + try { + if (sessionData == null) { + return; + } + // Extract verifier information from session data + VerifiablePresentation presentation = VerifiablePresentation.builder() + .id(presentationId) + .walletId(walletId) + .authRequest(extractVerifierAuthRequest(sessionData)) + .presentationData(buildPresentationDataJson(request)) + .verifierId(extractVerifierId(sessionData)) + .status(success ? OpenID4VPConstants.STATUS_SUCCESS : OpenID4VPConstants.STATUS_ERROR) + .requestedAt(requestedAt) + .consent(true) + .build(); + // Save to database + verifiablePresentationsRepository.save(presentation); } catch (Exception e) { - log.error("CRITICAL: Failed to store presentation record - walletId: {}, presentationId: {}, verifierId: {}, success: {}", walletId, presentationId, sessionData != null ? extractVerifierId(sessionData) : "unknown", success, e); + log.error("Failed to store presentation record for presentationId={}", presentationId, e); } } /** - * Extracts verifier ID from session data + * Creates presentation data JSON with selected credentials and SD claim selections. + */ + private String buildPresentationDataJson(SubmitPresentationRequestDTO request) throws JsonProcessingException { + Map presentationData = new LinkedHashMap<>(); + presentationData.put(OpenID4VPConstants.SELECTED_CREDENTIALS, request.getSelectedCredentials()); + Map> selectedSdClaims = request.resolveEffectiveSelectedSdClaims(); + if (selectedSdClaims != null) { + presentationData.put(OpenID4VPConstants.SELECTED_SD_CLAIMS, selectedSdClaims); + } + return objectMapper.writeValueAsString(presentationData); + } + + /** + * Extracts verifier ID from session data. */ private String extractVerifierId(VerifiablePresentationSessionData sessionData) { try { - // Since authorizationRequest is a URL, we need to extract client_id from URL parameters + // Since authorizationRequest is a URL, extract client_id from URL parameters if (sessionData.getAuthorizationRequest() != null) { - String authRequestUrl = sessionData.getAuthorizationRequest(); - return UrlParameterUtils.extractQueryParameter(authRequestUrl, OpenID4VPConstants.CLIENT_ID_PARAM); + return UrlParameterUtils.extractQueryParameter( + sessionData.getAuthorizationRequest(), OpenID4VPConstants.CLIENT_ID_PARAM); } } catch (Exception e) { log.warn("Failed to extract verifier ID", e); @@ -603,53 +918,18 @@ private String extractVerifierId(VerifiablePresentationSessionData sessionData) } /** - * Extracts verifier authorization request as JSON + * Extracts verifier authorization request as JSON. */ private String extractVerifierAuthRequest(VerifiablePresentationSessionData sessionData) { try { if (sessionData.getAuthorizationRequest() != null) { // Convert the URL string to a JSON object - Map authRequestData = new HashMap<>(); - authRequestData.put(OpenID4VPConstants.AUTHORIZATION_REQUEST_URL, sessionData.getAuthorizationRequest()); - return objectMapper.writeValueAsString(authRequestData); + return objectMapper.writeValueAsString(Map.of( + OpenID4VPConstants.AUTHORIZATION_REQUEST_URL, sessionData.getAuthorizationRequest())); } } catch (Exception e) { log.warn("Failed to extract verifier auth request", e); } return EMPTY_JSON; } - - /** - * Creates presentation data JSON with selected credentials and metadata - */ - private String createPresentationData(SubmitPresentationRequestDTO request) { - try { - Map presentationData = new HashMap<>(); - presentationData.put(OpenID4VPConstants.SELECTED_CREDENTIALS, request.getSelectedCredentials()); - - return objectMapper.writeValueAsString(presentationData); - } catch (Exception e) { - log.warn("Failed to create presentation data", e); - return EMPTY_JSON; - } - } - - /** - * Validates all input parameters for presentation submission - */ - private void validateInputs(SubmitPresentationRequestDTO request) { - - if (request == null) { - log.error("Request cannot be null"); - throw new IllegalArgumentException("Request cannot be null"); - } - - if (request.getSelectedCredentials() == null || request.getSelectedCredentials().isEmpty()) { - log.error("Selected credentials cannot be null or empty"); - throw new IllegalArgumentException("Selected credentials cannot be null or empty"); - } - - log.debug("Input validation passed for request: {}", request); - } } - diff --git a/src/main/java/io/mosip/mimoto/util/AuthorizationRequestHelper.java b/src/main/java/io/mosip/mimoto/util/AuthorizationRequestHelper.java new file mode 100644 index 000000000..b69162200 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/AuthorizationRequestHelper.java @@ -0,0 +1,34 @@ +package io.mosip.mimoto.util; + +import io.mosip.openID4VP.authorizationRequest.AuthorizationDcqlRequest; +import io.mosip.openID4VP.authorizationRequest.AuthorizationRequest; +import io.mosip.openID4VP.dcql.query.DCQLQuery; + +/** + * Shared helpers for classifying OpenID4VP authorization requests using the + * library's parsed {@code dcql_query}. + */ +public final class AuthorizationRequestHelper { + + private AuthorizationRequestHelper() { + } + + /** + * Returns {@code true} when the library parsed a DCQL request with a non-null + * {@code dcql_query}. + */ + public static boolean hasDcqlQuery(AuthorizationRequest authorizationRequest) { + return authorizationRequest instanceof AuthorizationDcqlRequest dcqlRequest + && dcqlRequest.getDcqlQuery() != null; + } + + /** + * Extracts the DCQL query from a parsed authorization request, if present. + */ + public static DCQLQuery extractDcqlQuery(AuthorizationRequest authorizationRequest) { + if (authorizationRequest instanceof AuthorizationDcqlRequest dcqlRequest) { + return dcqlRequest.getDcqlQuery(); + } + return null; + } +} diff --git a/src/main/java/io/mosip/mimoto/util/DcqlClaimSetHelper.java b/src/main/java/io/mosip/mimoto/util/DcqlClaimSetHelper.java new file mode 100644 index 000000000..9ac923a3e --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/DcqlClaimSetHelper.java @@ -0,0 +1,245 @@ +package io.mosip.mimoto.util; + +import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; +import io.mosip.openID4VP.dcql.query.ClaimValue; +import io.mosip.openID4VP.dcql.query.ClaimsQuery; +import io.mosip.openID4VP.dcql.query.CredentialQuery; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.function.BiPredicate; +import java.util.function.Predicate; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +/** + * Shared DCQL {@code claim_sets} logic for credential matching and presentation submission. + * A {@code claim_sets} entry is satisfied when every claim id in that set matches the credential. + * The query is satisfied when any claim set matches (OR). + */ +public final class DcqlClaimSetHelper { + + /** Simple JSON keys use dot notation; keys with dots/hyphens need bracket notation (e.g. {@code org.iso.18013.5.1}). */ + private static final Pattern SIMPLE_PATH_SEGMENT = Pattern.compile("^[a-zA-Z_][a-zA-Z0-9_]*$"); + + private DcqlClaimSetHelper() { + } + + /** + * Builds a Jayway JSONPath from DCQL path segments, quoting segments that are not simple identifiers. + */ + public static String buildJsonPath(List pathSegments) { + if (pathSegments == null || pathSegments.isEmpty()) { + return "$"; + } + StringBuilder jsonPath = new StringBuilder("$"); + appendPathSegments(jsonPath, pathSegments); + return jsonPath.toString(); + } + + /** + * Builds a credential claim path (without {@code $.}) for SD-JWT lookup and missing-claim reporting. + */ + public static String buildClaimPath(List pathSegments) { + if (pathSegments == null || pathSegments.isEmpty()) { + return ""; + } + StringBuilder claimPath = new StringBuilder(pathSegments.get(0).toString()); + if (pathSegments.size() > 1) { + appendPathSegments(claimPath, pathSegments.subList(1, pathSegments.size())); + } + return claimPath.toString(); + } + + private static void appendPathSegments(StringBuilder path, List pathSegments) { + for (Object segment : pathSegments) { + String value = segment.toString(); + if (SIMPLE_PATH_SEGMENT.matcher(value).matches()) { + path.append('.').append(value); + } else { + path.append("['").append(escapePathSegment(value)).append("']"); + } + } + } + + private static String escapePathSegment(String segment) { + return segment.replace("\\", "\\\\").replace("'", "\\'"); + } + + public static boolean hasClaimSets(CredentialQuery credentialQuery) { + return credentialQuery.getClaimSets() != null && !credentialQuery.getClaimSets().isEmpty(); + } + + public static boolean matchesClaims(CredentialQuery credentialQuery, VCCredentialResponse vc, + BiPredicate claimMatcher) { + boolean hasClaimSets = hasClaimSets(credentialQuery); + List claims = credentialQuery.getClaims(); + boolean hasClaims = claims != null && !claims.isEmpty(); + + if (!hasClaims) { + return !hasClaimSets; + } + if (hasClaimSets) { + return credentialQuery.getClaimSets().stream() + .anyMatch(claimIds -> satisfiesClaimSet(credentialQuery, vc, claimIds, claimMatcher)); + } + return claims.stream() + .allMatch(claimQuery -> claimMatcher.test(vc, claimQuery)); + } + + public static boolean satisfiesClaimSet(CredentialQuery credentialQuery, VCCredentialResponse vc, + List claimIds, + BiPredicate claimMatcher) { + if (claimIds == null || claimIds.isEmpty()) { + return false; + } + Map claimsById = indexClaimsById(credentialQuery); + for (String claimId : claimIds) { + ClaimsQuery claimQuery = claimsById.get(claimId); + if (claimQuery == null || !claimMatcher.test(vc, claimQuery)) { + return false; + } + } + return true; + } + + public static boolean isValidClaimSetSelection(List> claimSets, List selectedClaimIds) { + if (selectedClaimIds == null || selectedClaimIds.isEmpty() || claimSets == null) { + return false; + } + Set selected = toUniqueClaimIdSet(selectedClaimIds); + if (selected == null) { + return false; + } + return claimSets.stream() + .map(DcqlClaimSetHelper::toUniqueClaimIdSet) + .filter(Objects::nonNull) + .anyMatch(selected::equals); + } + + /** + * Resolves claim ids for submission. + *

+ * Iterates {@code claim_sets} in order and returns the first set whose every claim path + * has an actual SD disclosure on the credential (checked via {@code hasDisclosure}). + * Returns an empty list when no claim set has any disclosure — this means all claims in + * every set are public payload claims and no SD filtering is needed. + *

+ */ + public static List resolveClaimIdsForSubmission(CredentialQuery credentialQuery, + List selectedClaimIds, + Predicate hasDisclosure) { + if (!hasClaimSets(credentialQuery)) { + return Collections.emptyList(); + } + if (selectedClaimIds != null && !selectedClaimIds.isEmpty()) { + return normalizeClaimIds(selectedClaimIds); + } + for (List claimSet : credentialQuery.getClaimSets()) { + List normalized = normalizeClaimIds(claimSet); + List paths = resolveClaimPaths(credentialQuery, normalized); + if (paths.size() != normalized.size()) { + continue; + } + if (!paths.isEmpty() && paths.stream().allMatch(hasDisclosure)) { + return normalized; + } + } + // No claim set resolved to an SD disclosure — all claims are public; no filtering needed. + return Collections.emptyList(); + } + + /** + * Maps DCQL claim ids to credential claim paths (without {@code $.} prefix). + */ + public static List resolveClaimPaths(CredentialQuery credentialQuery, List claimIds) { + if (claimIds == null || claimIds.isEmpty()) { + return Collections.emptyList(); + } + Map claimsById = indexClaimsById(credentialQuery); + List paths = new ArrayList<>(); + for (String claimId : claimIds) { + ClaimsQuery claimQuery = claimsById.get(claimId); + if (claimQuery == null || claimQuery.getPath() == null || claimQuery.getPath().isEmpty()) { + return Collections.emptyList(); + } + paths.add(buildClaimPath(claimQuery.getPath())); + } + return paths; + } + + public static List resolveJsonPaths(CredentialQuery credentialQuery, List claimIds) { + if (claimIds == null || claimIds.isEmpty()) { + return Collections.emptyList(); + } + Map claimsById = indexClaimsById(credentialQuery); + List paths = new ArrayList<>(); + for (String claimId : claimIds) { + ClaimsQuery claimQuery = claimsById.get(claimId); + if (claimQuery == null || claimQuery.getPath() == null || claimQuery.getPath().isEmpty()) { + return Collections.emptyList(); + } + paths.add(buildJsonPath(claimQuery.getPath())); + } + return paths; + } + + private static Map indexClaimsById(CredentialQuery credentialQuery) { + if (credentialQuery.getClaims() == null) { + return Collections.emptyMap(); + } + Map claimsById = new LinkedHashMap<>(); + for (ClaimsQuery claimQuery : credentialQuery.getClaims()) { + if (claimQuery.getId() != null) { + claimsById.putIfAbsent(claimQuery.getId(), claimQuery); + } + } + return claimsById; + } + + private static List normalizeClaimIds(List claimIds) { + return claimIds.stream() + .filter(Objects::nonNull) + .map(String::trim) + .filter(id -> !id.isEmpty()) + .collect(Collectors.toList()); + } + + /** + * Normalizes claim ids and returns a set when the input has no duplicates; otherwise {@code null}. + */ + private static Set toUniqueClaimIdSet(List claimIds) { + List normalized = normalizeClaimIds(claimIds); + Set unique = new LinkedHashSet<>(normalized); + return unique.size() == normalized.size() ? unique : null; + } + + public static boolean dcqlValueMatches(Object actual, ClaimValue expected) { + if (expected instanceof ClaimValue.StringValue sv) { + return actual != null && sv.getValue().equals(actual.toString()); + } + if (expected instanceof ClaimValue.LongValue lv) { + if (actual instanceof Number number) { + return lv.getValue() == number.longValue(); + } + return false; + } + if (expected instanceof ClaimValue.BoolValue bv) { + if (actual instanceof Boolean bool) { + return bv.getValue() == bool; + } + return false; + } + return false; + } + + public static Set pathsForClaimIds(CredentialQuery credentialQuery, List claimIds) { + return new LinkedHashSet<>(resolveJsonPaths(credentialQuery, claimIds)); + } +} diff --git a/src/main/java/io/mosip/mimoto/util/DcqlCredentialSetHelper.java b/src/main/java/io/mosip/mimoto/util/DcqlCredentialSetHelper.java new file mode 100644 index 000000000..a3b0aeda4 --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/DcqlCredentialSetHelper.java @@ -0,0 +1,34 @@ +package io.mosip.mimoto.util; + +import io.mosip.openID4VP.dcql.query.CredentialQuery; +import io.mosip.openID4VP.dcql.query.CredentialSetQuery; +import io.mosip.openID4VP.dcql.query.DCQLQuery; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * Shared DCQL {@code credential_sets} resolution for matching and submission validation. + */ +public final class DcqlCredentialSetHelper { + + private DcqlCredentialSetHelper() { + } + + /** + * Returns explicit {@code credential_sets} from the authorization request, or synthesises + * one required set per credential query when absent (OpenID4VP / inji-openid4vp default). + */ + public static List resolveEffectiveCredentialSets(DCQLQuery dcqlQuery) { + if (dcqlQuery.getCredentialSets() != null) { + return dcqlQuery.getCredentialSets(); + } + return dcqlQuery.getCredentials().stream() + .map(DcqlCredentialSetHelper::syntheticSetForQuery) + .collect(Collectors.toList()); + } + + private static CredentialSetQuery syntheticSetForQuery(CredentialQuery query) { + return new CredentialSetQuery(List.of(List.of(query.getId())), true); + } +} diff --git a/src/main/java/io/mosip/mimoto/util/DcqlMatchingHelper.java b/src/main/java/io/mosip/mimoto/util/DcqlMatchingHelper.java new file mode 100644 index 000000000..9b9ecb2ac --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/DcqlMatchingHelper.java @@ -0,0 +1,179 @@ +package io.mosip.mimoto.util; + +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.constant.CredentialFormat; +import io.mosip.mimoto.dto.DecryptedCredentialDTO; +import io.mosip.mimoto.dto.mimoto.VCCredentialProperties; +import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; +import io.mosip.openID4VP.constants.FormatType; +import io.mosip.openID4VP.dcql.evaluator.ClaimFailure; +import io.mosip.openID4VP.dcql.evaluator.QueryMatchResult; +import io.mosip.openID4VP.dcql.query.CredentialQuery; +import io.mosip.openID4VP.dcql.query.DCQLQuery; +import io.mosip.openID4VP.wallet.Credential; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * Maps mimoto wallet credentials for inji-openid4vp {@link io.mosip.openID4VP.helper.DCQLHelper} + * evaluation and derives UI missing-claim hints from library match results. + */ +public final class DcqlMatchingHelper { + + private DcqlMatchingHelper() { + } + + public static DCQLQuery normalizeDcqlQuery(DCQLQuery dcqlQuery) { + List credentials = dcqlQuery.getCredentials().stream() + .map(DcqlMatchingHelper::normalizeCredentialQuery) + .collect(Collectors.toList()); + return new DCQLQuery(credentials, dcqlQuery.getCredentialSets()); + } + + public static List constructCredentialWithCredentialFormat( + List decryptedCredentials, + ObjectMapper objectMapper) { + List credentialWithCredentialFormat = new ArrayList<>(); + for (DecryptedCredentialDTO dto : decryptedCredentials) { + Credential mapped = toLibraryCredential(dto, objectMapper); + if (mapped == null) { + continue; + } + credentialWithCredentialFormat.add(mapped); + FormatType alternateFormat = alternateSdJwtFormat(mapped.getFormat()); + if (alternateFormat != null) { + credentialWithCredentialFormat.add(new Credential(alternateFormat, mapped.getData(), mapped.getCredentialId())); + } + } + return credentialWithCredentialFormat; + } + + public static Credential toLibraryCredential(DecryptedCredentialDTO dto, ObjectMapper objectMapper) { + VCCredentialResponse vc = dto.getCredential(); + if (vc == null) { + return null; + } + String format = vc.getFormat(); + Object credentialData = vc.getCredential(); + if (format == null || credentialData == null) { + return null; + } + + if (CredentialFormat.isSdJwt(format)) { + String sdJwt = asSdJwtString(credentialData, objectMapper); + if (sdJwt == null) { + return null; + } + FormatType formatType = mapToFormatType(format); + if (formatType == null) { + return null; + } + return new Credential(formatType, sdJwt, dto.getId()); + } + + if (CredentialFormat.LDP_VC.getFormat().equalsIgnoreCase(format)) { + Map credentialMap = asCredentialMap(credentialData, objectMapper); + if (credentialMap == null) { + return null; + } + return new Credential(FormatType.LDP_VC, credentialMap, dto.getId()); + } + + return null; + } + + public static Set resolveMissingClaims(CredentialQuery credentialQuery, QueryMatchResult queryMatch) { + if (queryMatch != null && queryMatch.getFailedClaims() != null && !queryMatch.getFailedClaims().isEmpty()) { + return queryMatch.getFailedClaims().stream() + .map(ClaimFailure::getClaim) + .filter(Objects::nonNull) + .map(claim -> DcqlClaimSetHelper.buildClaimPath(claim.getPath())) + .collect(Collectors.toCollection(LinkedHashSet::new)); + } + return extractMissingClaimsFromQuery(credentialQuery); + } + + private static Set extractMissingClaimsFromQuery(CredentialQuery credentialQuery) { + if (credentialQuery.getClaims() == null) { + return Set.of(); + } + if (DcqlClaimSetHelper.hasClaimSets(credentialQuery)) { + return credentialQuery.getClaimSets().stream() + .flatMap(claimIds -> DcqlClaimSetHelper.pathsForClaimIds(credentialQuery, claimIds).stream()) + .collect(Collectors.toCollection(LinkedHashSet::new)); + } + return credentialQuery.getClaims().stream() + .filter(cq -> cq.getPath() != null && !cq.getPath().isEmpty()) + .map(cq -> DcqlClaimSetHelper.buildClaimPath(cq.getPath())) + .collect(Collectors.toCollection(LinkedHashSet::new)); + } + + private static CredentialQuery normalizeCredentialQuery(CredentialQuery query) { + Map meta = query.getMeta(); + if (meta != null) { + return query; + } + return new CredentialQuery( + query.getId(), + query.getFormat(), + query.getMultiple(), + Map.of(), + query.getRequireCryptographicHolderBinding(), + query.getClaims(), + query.getClaimSets()); + } + + private static FormatType alternateSdJwtFormat(FormatType format) { + if (format == FormatType.VC_SD_JWT) { + return FormatType.DC_SD_JWT; + } + if (format == FormatType.DC_SD_JWT) { + return FormatType.VC_SD_JWT; + } + return null; + } + + private static String asSdJwtString(Object credentialData, ObjectMapper objectMapper) { + if (credentialData instanceof String sdJwt) { + return sdJwt.isBlank() ? null : sdJwt; + } + return null; + } + + private static FormatType mapToFormatType(String format) { + if (CredentialFormat.LDP_VC.getFormat().equalsIgnoreCase(format)) { + return FormatType.LDP_VC; + } + if (CredentialFormat.VC_SD_JWT.getFormat().equalsIgnoreCase(format)) { + return FormatType.VC_SD_JWT; + } + if (CredentialFormat.DC_SD_JWT.getFormat().equalsIgnoreCase(format)) { + return FormatType.DC_SD_JWT; + } + return null; + } + + @SuppressWarnings("unchecked") + private static Map asCredentialMap(Object credentialData, ObjectMapper objectMapper) { + if (credentialData instanceof Map rawMap) { + Map credentialMap = new LinkedHashMap<>(); + for (Map.Entry entry : rawMap.entrySet()) { + if (entry.getKey() instanceof String key) { + credentialMap.put(key, entry.getValue()); + } + } + return credentialMap; + } + if (credentialData instanceof VCCredentialProperties properties) { + return objectMapper.convertValue(properties, Map.class); + } + return null; + } +} diff --git a/src/main/java/io/mosip/mimoto/util/SelectedSdClaimsUtil.java b/src/main/java/io/mosip/mimoto/util/SelectedSdClaimsUtil.java new file mode 100644 index 000000000..50cbd293a --- /dev/null +++ b/src/main/java/io/mosip/mimoto/util/SelectedSdClaimsUtil.java @@ -0,0 +1,40 @@ +package io.mosip.mimoto.util; + +import java.util.ArrayList; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; + +/** + * Unions SD-JWT disclosure paths per credential ID when paths come from multiple sources + * (top-level {@code selectedSdClaims}, nested DCQL selections, or {@code claim_sets} resolution). + * Used by {@link io.mosip.mimoto.dto.SubmitPresentationRequestDTO#resolveEffectiveSelectedSdClaims()} + * and {@link io.mosip.mimoto.service.impl.WalletPresentationServiceImpl} during DCQL submit. + */ +public final class SelectedSdClaimsUtil { + + private SelectedSdClaimsUtil() { + } + + public static void mergeInto(Map> target, Map> source) { + if (source == null) { + return; + } + for (Map.Entry> entry : source.entrySet()) { + mergePaths(target, entry.getKey(), entry.getValue()); + } + } + + public static void mergePaths(Map> target, String credentialId, List paths) { + if (credentialId == null || paths == null || paths.isEmpty()) { + return; + } + target.merge(credentialId, new ArrayList<>(paths), SelectedSdClaimsUtil::unionPaths); + } + + private static List unionPaths(List existing, List incoming) { + LinkedHashSet union = new LinkedHashSet<>(existing); + union.addAll(incoming); + return new ArrayList<>(union); + } +} diff --git a/src/test/java/io/mosip/mimoto/controller/VerifiersControllerTest.java b/src/test/java/io/mosip/mimoto/controller/VerifiersControllerTest.java index b185e79a5..b7ddd8f4c 100644 --- a/src/test/java/io/mosip/mimoto/controller/VerifiersControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/VerifiersControllerTest.java @@ -1,6 +1,6 @@ package io.mosip.mimoto.controller; -import io.mosip.mimoto.dto.openid.SpecVersion; +import io.mosip.openID4VP.constants.SpecVersion; import io.mosip.mimoto.dto.openid.VerifierDTO; import io.mosip.mimoto.dto.openid.VerifiersDTO; import io.mosip.mimoto.exception.ApiNotAccessibleException; diff --git a/src/test/java/io/mosip/mimoto/controller/WalletPresentationsControllerTest.java b/src/test/java/io/mosip/mimoto/controller/WalletPresentationsControllerTest.java index 0e0d2a35f..d1b8a8454 100644 --- a/src/test/java/io/mosip/mimoto/controller/WalletPresentationsControllerTest.java +++ b/src/test/java/io/mosip/mimoto/controller/WalletPresentationsControllerTest.java @@ -70,7 +70,7 @@ public class WalletPresentationsControllerTest { public void setup() { MockitoAnnotations.openMocks(this); VerifiablePresentationVerifierDTO presentationVerifierDTO = new VerifiablePresentationVerifierDTO("mock-client", "verifier123", "https://veriifer-logo.png", false, true, "https://verifier-redirect"); - presentationResponseDTO = new VPResponseDTO("presentationId-123", presentationVerifierDTO); + presentationResponseDTO = new VPResponseDTO("presentationId-123", presentationVerifierDTO, false); when(httpSession.getAttribute("wallet_id")).thenReturn(walletId); when(httpSession.getAttribute("wallet_key")).thenReturn(walletKey); @@ -101,7 +101,7 @@ public void shouldThrowExceptionWhenBadAuthorizationRequestIsReceivedFromVerifie String authorizationRequestUrl = "presentation_definition_uri=https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fpresentation_definition_uri&response_type=vp_token&response_mode=direct_post&nonce=NHgLcWlae745DpfJbUyfdg%253D%253D&response_uri=https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fvp-response&state=pcmxBfvdPEcjFObgt%252BLekA%253D%253D"; VPAuthorizationRequestDTO authorizationRequest = new VPAuthorizationRequestDTO(); authorizationRequest.setAuthorizationRequestUrl(authorizationRequestUrl); - when(walletPresentationService.handleVPAuthorizationRequest(authorizationRequest.getAuthorizationRequestUrl(), walletId)).thenThrow(new OpenID4VPExceptions.MissingInput(List.of("client_id"), "client_id request param is Missing", "AuthorizationRequest")); + when(walletPresentationService.handleVPAuthorizationRequest(authorizationRequest.getAuthorizationRequestUrl(), walletId)).thenThrow(new OpenID4VPExceptions.MissingInput(List.of("client_id"), "client_id request param is Missing", "AuthorizationRequest", true)); mockMvc.perform(post("/wallets/{walletId}/presentations", walletId) .contentType(MediaType.APPLICATION_JSON) @@ -168,7 +168,7 @@ public void shouldThrowUnauthorizedWhenWalletKeyIsMissingFromSession() throws Ex public void shouldThrowBadRequestWhenApiNotAccessibleExceptionIsThrown() throws Exception { String presentationId = "presentation123"; VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData( - presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null); + presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null, false); when(sessionManager.getPresentationSessionData(httpSession, walletId, presentationId)).thenReturn(sessionData); when(walletPresentationService.getMatchingCredentials(sessionData, walletId, walletKey)) @@ -187,7 +187,7 @@ public void shouldThrowBadRequestWhenApiNotAccessibleExceptionIsThrown() throws public void shouldThrowInternalServerErrorWhenIOExceptionIsThrown() throws Exception { String presentationId = "presentation123"; VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData( - presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null); + presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null, false); when(sessionManager.getPresentationSessionData(httpSession, walletId, presentationId)).thenReturn(sessionData); when(walletPresentationService.getMatchingCredentials(sessionData, walletId, walletKey)) @@ -206,7 +206,7 @@ public void shouldThrowInternalServerErrorWhenIOExceptionIsThrown() throws Excep public void shouldThrowInternalServerErrorWhenVPNotCreatedExceptionIsThrown() throws Exception { String presentationId = "presentation123"; VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData( - presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null); + presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null, false); when(sessionManager.getPresentationSessionData(httpSession, walletId, presentationId)).thenReturn(sessionData); when(walletPresentationService.getMatchingCredentials(sessionData, walletId, walletKey)) @@ -225,7 +225,7 @@ public void shouldThrowInternalServerErrorWhenVPNotCreatedExceptionIsThrown() th public void shouldThrowInternalServerErrorWhenIllegalArgumentExceptionIsThrown() throws Exception { String presentationId = "presentation123"; VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData( - presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null); + presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null, false); when(sessionManager.getPresentationSessionData(httpSession, walletId, presentationId)).thenReturn(sessionData); when(walletPresentationService.getMatchingCredentials(sessionData, walletId, walletKey)) @@ -400,7 +400,7 @@ public void testHandleVPAuthorizationRequestWithVPNotCreatedException() throws E public void testGetMatchingCredentialsSuccess() throws Exception { String presentationId = "presentation-123"; VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData( - presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null); + presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null, false); MatchingCredentialsResponseDTO responseDTO = new MatchingCredentialsResponseDTO(); MatchingCredentialsDTO matchingCredentials = new MatchingCredentialsDTO(); @@ -425,7 +425,7 @@ public void testGetMatchingCredentialsSuccess() throws Exception { public void testGetMatchingCredentialsWithIllegalArgumentException() throws Exception { String presentationId = "presentation-123"; VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData( - presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null); + presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null, false); when(sessionManager.getPresentationSessionData(any(HttpSession.class), eq(walletId), eq(presentationId))).thenReturn(sessionData); when(walletPresentationService.getMatchingCredentials(sessionData, walletId, walletKey)) @@ -443,7 +443,7 @@ public void testGetMatchingCredentialsWithIllegalArgumentException() throws Exce public void testGetMatchingCredentialsWithApiNotAccessibleException() throws Exception { String presentationId = "presentation-123"; VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData( - presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null); + presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null, false); when(sessionManager.getPresentationSessionData(any(HttpSession.class), eq(walletId), eq(presentationId))).thenReturn(sessionData); when(walletPresentationService.getMatchingCredentials(sessionData, walletId, walletKey)) @@ -461,7 +461,7 @@ public void testGetMatchingCredentialsWithApiNotAccessibleException() throws Exc public void testGetMatchingCredentialsWithIOException() throws Exception { String presentationId = "presentation-123"; VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData( - presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null); + presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null, false); when(sessionManager.getPresentationSessionData(any(HttpSession.class), eq(walletId), eq(presentationId))).thenReturn(sessionData); when(walletPresentationService.getMatchingCredentials(sessionData, walletId, walletKey)) @@ -479,7 +479,7 @@ public void testGetMatchingCredentialsWithIOException() throws Exception { public void testGetMatchingCredentialsWithVPNotCreatedException() throws Exception { String presentationId = "presentation-123"; VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData( - presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null); + presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null, false); when(sessionManager.getPresentationSessionData(any(HttpSession.class), eq(walletId), eq(presentationId))).thenReturn(sessionData); when(walletPresentationService.getMatchingCredentials(sessionData, walletId, walletKey)) @@ -497,10 +497,10 @@ public void testGetMatchingCredentialsWithVPNotCreatedException() throws Excepti public void testHandlePresentationSubmissionSuccess() throws Exception { String presentationId = "presentation-123"; VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData( - presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null); + presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null, false); SubmitPresentationRequestDTO submitRequest = SubmitPresentationRequestDTO.builder() - .selectedCredentials(java.util.Arrays.asList("cred-1", "cred-2")) + .selectedCredentials(SelectedCredentials.ofStrings(java.util.Arrays.asList("cred-1", "cred-2"))) .build(); SubmitPresentationResponseDTO submitResponse = new SubmitPresentationResponseDTO(); @@ -526,10 +526,10 @@ public void testHandlePresentationSubmissionSuccess() throws Exception { public void testHandlePresentationSubmissionMissingWalletKey() throws Exception { String presentationId = "presentation-123"; VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData( - presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null); + presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null, false); SubmitPresentationRequestDTO submitRequest = SubmitPresentationRequestDTO.builder() - .selectedCredentials(java.util.Arrays.asList("cred-1")) + .selectedCredentials(SelectedCredentials.ofStrings(java.util.Arrays.asList("cred-1"))) .build(); when(httpSession.getAttribute("wallet_key")).thenReturn(null); @@ -549,7 +549,7 @@ public void testHandlePresentationSubmissionMissingWalletKey() throws Exception public void testHandlePresentationActionInvalidRequestFormat() throws Exception { String presentationId = "presentation-123"; VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData( - presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null); + presentationId, "authorizationRequestUrl", java.time.Instant.now(), true, null, false); SubmitPresentationRequestDTO invalidRequest = SubmitPresentationRequestDTO.builder() .build(); diff --git a/src/test/java/io/mosip/mimoto/service/CredentialMatchingServiceTest.java b/src/test/java/io/mosip/mimoto/service/CredentialMatchingServiceTest.java index 16e236161..3e148b3f6 100644 --- a/src/test/java/io/mosip/mimoto/service/CredentialMatchingServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/CredentialMatchingServiceTest.java @@ -13,6 +13,11 @@ import io.mosip.mimoto.service.impl.CredentialMatchingServiceImpl; import io.mosip.mimoto.service.impl.OpenID4VPService; import io.mosip.openID4VP.authorizationRequest.presentationDefinition.*; +import io.mosip.openID4VP.dcql.query.ClaimValue; +import io.mosip.openID4VP.dcql.query.ClaimsQuery; +import io.mosip.openID4VP.dcql.query.CredentialQuery; +import io.mosip.openID4VP.dcql.query.CredentialSetQuery; +import io.mosip.openID4VP.dcql.query.DCQLQuery; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -67,6 +72,8 @@ public void setUp() throws JsonProcessingException { walletId = "test-wallet-id"; base64Key = "test-base64-key"; sessionData = new VerifiablePresentationSessionData(); + sessionData.setPresentationId("presentation-123"); + sessionData.setAuthorizationRequest("client_id=test-client&response_type=vp_token"); presentationDefinition = createMockPresentationDefinition(); walletCredentials = createMockWalletCredentials(); @@ -122,24 +129,38 @@ public void testGetMatchingCredentialsSuccess() throws Exception { @Test(expected = IllegalArgumentException.class) public void testGetMatchingCredentialsNullWalletId() throws Exception { - // Arrange - when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) - .thenReturn(presentationDefinition); - // Act credentialMatchingService.getMatchingCredentials(sessionData, null, base64Key); } @Test(expected = IllegalArgumentException.class) public void testGetMatchingCredentialsEmptyWalletId() throws Exception { - // Arrange - when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) - .thenReturn(presentationDefinition); - // Act credentialMatchingService.getMatchingCredentials(sessionData, "", base64Key); } + @Test(expected = IllegalArgumentException.class) + public void testGetMatchingCredentialsNullSessionData() throws Exception { + credentialMatchingService.getMatchingCredentials(null, walletId, base64Key); + } + + @Test(expected = IllegalArgumentException.class) + public void testGetMatchingCredentialsEmptySessionData() throws Exception { + credentialMatchingService.getMatchingCredentials(new VerifiablePresentationSessionData(), walletId, base64Key); + } + + @Test(expected = IllegalArgumentException.class) + public void testGetMatchingCredentialsBlankPresentationId() throws Exception { + sessionData.setPresentationId(" "); + credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); + } + + @Test(expected = IllegalArgumentException.class) + public void testGetMatchingCredentialsBlankAuthorizationRequest() throws Exception { + sessionData.setAuthorizationRequest(""); + credentialMatchingService.getMatchingCredentials(sessionData, walletId, base64Key); + } + @Test(expected = IllegalArgumentException.class) public void testGetMatchingCredentialsNullBase64Key() throws Exception { // Arrange @@ -177,10 +198,6 @@ public void testGetMatchingCredentialsEmptyInputDescriptorId() throws Exception @Test(expected = IllegalArgumentException.class) public void testGetMatchingCredentialsWhitespaceWalletId() throws Exception { - // Arrange - when(openID4VPService.resolvePresentationDefinition(any(), any(), anyBoolean())) - .thenReturn(presentationDefinition); - // Act credentialMatchingService.getMatchingCredentials(sessionData, " ", base64Key); } @@ -213,6 +230,7 @@ public void testGetMatchingCredentialsEmptyWalletCredentials() throws Exception assertTrue(result.getMatchingCredentialsResponse().getAvailableCredentials().isEmpty()); assertTrue(result.getMatchingCredentials().isEmpty()); assertFalse(result.getMatchingCredentialsResponse().getMissingClaims().isEmpty()); + assertNull(result.getMatchingCredentialsResponse().getQueryGroups()); } @Test @@ -2205,15 +2223,24 @@ private DecryptedCredentialDTO createDecryptedSdJwtCredential(Object credentialP } private void setupSdJwtHandlerMock(Map publicClaims, Map sdClaims) { + setupSdJwtHandlerMock(publicClaims, sdClaims, null); + } + + private void setupSdJwtHandlerMock(Map publicClaims, Map sdClaims, + Map sdClaimValues) { when(credentialFormatHandler.extractAllCredentialProperties(any(VCCredentialResponse.class))) .thenAnswer(invocation -> { VCCredentialResponse vc = invocation.getArgument(0); String format = vc.getFormat(); - if (CredentialFormat.VC_SD_JWT.getFormat().equalsIgnoreCase(format)) { + if (CredentialFormat.VC_SD_JWT.getFormat().equalsIgnoreCase(format) + || CredentialFormat.DC_SD_JWT.getFormat().equalsIgnoreCase(format)) { Map> result = new LinkedHashMap<>(); result.put("publicClaims", new LinkedHashMap<>(publicClaims)); result.put("sdClaims", new LinkedHashMap<>(sdClaims)); + if (sdClaimValues != null) { + result.put("sdClaimValues", new LinkedHashMap<>(sdClaimValues)); + } return result; } Object cred = vc.getCredential(); @@ -2242,11 +2269,19 @@ private MatchingCredentialsDTO executeSdJwtNoConstraintFlow( private Map> createSdJwtAllClaimsMap( Map publicClaims, Map sdClaims) { + return createSdJwtAllClaimsMap(publicClaims, sdClaims, null); + } + + private Map> createSdJwtAllClaimsMap( + Map publicClaims, Map sdClaims, Map sdClaimValues) { Map> allClaims = new LinkedHashMap<>(); allClaims.put("publicClaims", publicClaims != null ? new LinkedHashMap<>(publicClaims) : null); allClaims.put("sdClaims", sdClaims != null ? new LinkedHashMap<>(sdClaims) : null); + if (sdClaimValues != null) { + allClaims.put("sdClaimValues", new LinkedHashMap<>(sdClaimValues)); + } return allClaims; } @@ -2380,4 +2415,369 @@ public void testGetMatchingCredentialsWhenNoFormatMatchReturnsSdJwtAlgValuesKey( assertFalse("field name must NOT appear when no format match", result.getMatchingCredentialsResponse().getMissingClaims().contains("vct")); } + + // --- DCQL matching (matchWithDcqlQuery) --- + + @Test + public void testGetMatchingCredentialsDcqlSuccessWithLdpVcMatch() throws Exception { + VerifiablePresentationSessionData dcqlSession = createDcqlSessionData(); + CredentialQuery credentialQuery = mock(CredentialQuery.class); + when(credentialQuery.getId()).thenReturn("identity-query"); + when(credentialQuery.getFormat()).thenReturn(CredentialFormat.LDP_VC.getFormat()); + when(credentialQuery.getMultiple()).thenReturn(false); + when(credentialQuery.getClaims()).thenReturn(null); + stubCredentialQueryBasics(credentialQuery); + + DCQLQuery dcqlQuery = mock(DCQLQuery.class); + when(dcqlQuery.getCredentials()).thenReturn(List.of(credentialQuery)); + when(dcqlQuery.getCredentialSets()).thenReturn(null); + stubDcqlQuery(dcqlQuery); + + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(createMockWalletCredentialsWithMapData()); + when(issuersService.getIssuerConfig(anyString(), anyString())).thenReturn(createMockIssuerConfig()); + + MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials( + dcqlSession, walletId, base64Key); + + assertNotNull(result.getMatchingCredentialsResponse().getQueryGroups()); + assertEquals(1, result.getMatchingCredentialsResponse().getQueryGroups().size()); + DcqlQueryGroup group = result.getMatchingCredentialsResponse().getQueryGroups().get(0); + assertEquals("identity-query", group.getQueryId()); + assertFalse(group.getAvailableCredentials().isEmpty()); + assertTrue(group.getMissingClaims().isEmpty()); + assertNull(group.getAvailableCredentials().get(0).getClaims()); + assertEquals(1, result.getMatchingCredentials().size()); + assertEquals("identity-query", result.getMatchingCredentials().get(0).getIdentifier()); + verify(openID4VPService).resolveDcqlQuery(anyString(), anyString(), anyBoolean()); + verify(openID4VPService, never()).resolvePresentationDefinition(any(), any(), anyBoolean()); + } + + @Test + public void testGetMatchingCredentialsDcqlNullWalletId() throws Exception { + VerifiablePresentationSessionData dcqlSession = createDcqlSessionData(); + stubDcqlQuery(mock(DCQLQuery.class)); + + try { + credentialMatchingService.getMatchingCredentials(dcqlSession, null, base64Key); + fail("Expected IllegalArgumentException"); + } catch (IllegalArgumentException e) { + assertEquals("Wallet ID cannot be null or empty", e.getMessage()); + } + } + + @Test + public void testGetMatchingCredentialsDcqlEmptyWalletId() throws Exception { + VerifiablePresentationSessionData dcqlSession = createDcqlSessionData(); + stubDcqlQuery(mock(DCQLQuery.class)); + + try { + credentialMatchingService.getMatchingCredentials(dcqlSession, " ", base64Key); + fail("Expected IllegalArgumentException"); + } catch (IllegalArgumentException e) { + assertEquals("Wallet ID cannot be null or empty", e.getMessage()); + } + } + + @Test + public void testGetMatchingCredentialsDcqlWhenResolveReturnsNull() throws Exception { + VerifiablePresentationSessionData dcqlSession = createDcqlSessionData(); + when(openID4VPService.resolveDcqlQuery(anyString(), anyString(), anyBoolean())).thenReturn(null); + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(createMockWalletCredentialsWithMapData()); + + try { + credentialMatchingService.getMatchingCredentials(dcqlSession, walletId, base64Key); + fail("Expected InvalidRequestException"); + } catch (InvalidRequestException e) { + assertTrue(e.getMessage().contains("Authorization request does not contain a DCQL query")); + } + } + + @Test + public void testGetMatchingCredentialsDcqlNoFormatMatchReturnsMissingClaims() throws Exception { + VerifiablePresentationSessionData dcqlSession = createDcqlSessionData(); + CredentialQuery credentialQuery = mock(CredentialQuery.class); + when(credentialQuery.getId()).thenReturn("sdjwt-query"); + when(credentialQuery.getFormat()).thenReturn(CredentialFormat.DC_SD_JWT.getFormat()); + when(credentialQuery.getMultiple()).thenReturn(false); + when(credentialQuery.getClaims()).thenReturn(null); + stubCredentialQueryBasics(credentialQuery); + + DCQLQuery dcqlQuery = mock(DCQLQuery.class); + when(dcqlQuery.getCredentials()).thenReturn(List.of(credentialQuery)); + when(dcqlQuery.getCredentialSets()).thenReturn(null); + stubDcqlQuery(dcqlQuery); + + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(createMockWalletCredentialsWithMapData()); + + MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials( + dcqlSession, walletId, base64Key); + + DcqlQueryGroup group = result.getMatchingCredentialsResponse().getQueryGroups().get(0); + assertTrue(group.getAvailableCredentials().isEmpty()); + assertTrue(result.getMatchingCredentials().isEmpty()); + } + + @Test + public void testGetMatchingCredentialsDcqlIncludesCredentialSets() throws Exception { + VerifiablePresentationSessionData dcqlSession = createDcqlSessionData(); + CredentialQuery credentialQuery = mock(CredentialQuery.class); + when(credentialQuery.getId()).thenReturn("pan"); + when(credentialQuery.getFormat()).thenReturn(CredentialFormat.LDP_VC.getFormat()); + when(credentialQuery.getMultiple()).thenReturn(false); + when(credentialQuery.getClaims()).thenReturn(null); + stubCredentialQueryBasics(credentialQuery); + + CredentialSetQuery setQuery = mock(CredentialSetQuery.class); + when(setQuery.getRequired()).thenReturn(true); + when(setQuery.getOptions()).thenReturn(List.of(List.of("pan"), List.of("aadhaar"))); + + DCQLQuery dcqlQuery = mock(DCQLQuery.class); + when(dcqlQuery.getCredentials()).thenReturn(List.of(credentialQuery)); + when(dcqlQuery.getCredentialSets()).thenReturn(List.of(setQuery)); + stubDcqlQuery(dcqlQuery); + + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(createMockWalletCredentialsWithMapData()); + when(issuersService.getIssuerConfig(anyString(), anyString())).thenReturn(createMockIssuerConfig()); + + MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials( + dcqlSession, walletId, base64Key); + + assertEquals(1, result.getMatchingCredentialsResponse().getCredentialSets().size()); + CredentialSetInfo credentialSet = result.getMatchingCredentialsResponse().getCredentialSets().get(0); + assertTrue(credentialSet.isRequired()); + assertEquals(List.of(List.of("pan"), List.of("aadhaar")), credentialSet.getOptions()); + } + + @Test + public void testGetMatchingCredentialsDcqlSynthesizesCredentialSetsWhenAbsent() throws Exception { + VerifiablePresentationSessionData dcqlSession = createDcqlSessionData(); + CredentialQuery governmentIdentity = new CredentialQuery( + "government-identity", CredentialFormat.DC_SD_JWT.getFormat(), false, + Map.of(), false, null, null); + CredentialQuery ageProof = new CredentialQuery( + "age-proof", CredentialFormat.DC_SD_JWT.getFormat(), false, + Map.of(), false, null, null); + + DCQLQuery dcqlQuery = mock(DCQLQuery.class); + when(dcqlQuery.getCredentials()).thenReturn(List.of(governmentIdentity, ageProof)); + when(dcqlQuery.getCredentialSets()).thenReturn(null); + stubDcqlQuery(dcqlQuery); + + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(createMockWalletCredentialsWithMapData()); + + MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials( + dcqlSession, walletId, base64Key); + + List credentialSets = result.getMatchingCredentialsResponse().getCredentialSets(); + assertEquals(2, credentialSets.size()); + assertTrue(credentialSets.get(0).isRequired()); + assertEquals(List.of(List.of("government-identity")), credentialSets.get(0).getOptions()); + assertTrue(credentialSets.get(1).isRequired()); + assertEquals(List.of(List.of("age-proof")), credentialSets.get(1).getOptions()); + } + + @Test + public void testGetMatchingCredentialsDcqlMatchesWithClaimPath() throws Exception { + VerifiablePresentationSessionData dcqlSession = createDcqlSessionData(); + ClaimsQuery nameClaim = new ClaimsQuery( + "name-claim", List.of("credentialSubject", "name"), null); + CredentialQuery credentialQuery = new CredentialQuery( + "identity-query", CredentialFormat.LDP_VC.getFormat(), false, + Map.of(), false, List.of(nameClaim), null); + + DCQLQuery dcqlQuery = mock(DCQLQuery.class); + when(dcqlQuery.getCredentials()).thenReturn(List.of(credentialQuery)); + when(dcqlQuery.getCredentialSets()).thenReturn(null); + stubDcqlQuery(dcqlQuery); + + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(createMockWalletCredentialsWithMapData()); + when(issuersService.getIssuerConfig(anyString(), anyString())).thenReturn(createMockIssuerConfig()); + + MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials( + dcqlSession, walletId, base64Key); + + assertFalse(result.getMatchingCredentialsResponse().getQueryGroups().get(0).getAvailableCredentials().isEmpty()); + assertTrue(result.getMatchingCredentials().size() == 1); + } + + @Test + public void testGetMatchingCredentialsDcqlNoMatchWithClaimSetsReturnsMissingClaimPaths() throws Exception { + VerifiablePresentationSessionData dcqlSession = createDcqlSessionData(); + ClaimsQuery ageClaim = new ClaimsQuery( + "age-above-18", List.of("age_above_18"), + List.of(new ClaimValue.BoolValue(true))); + ClaimsQuery dobClaim = new ClaimsQuery( + "date-of-birth", List.of("dateOfBirth"), null); + CredentialQuery credentialQuery = new CredentialQuery( + "age-proof", CredentialFormat.DC_SD_JWT.getFormat(), false, + Map.of(), false, List.of(ageClaim, dobClaim), + List.of(List.of("age-above-18"), List.of("date-of-birth"))); + + DCQLQuery dcqlQuery = mock(DCQLQuery.class); + when(dcqlQuery.getCredentials()).thenReturn(List.of(credentialQuery)); + when(dcqlQuery.getCredentialSets()).thenReturn(null); + stubDcqlQuery(dcqlQuery); + + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(createMockWalletCredentialsWithMapData()); + + MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials( + dcqlSession, walletId, base64Key); + + DcqlQueryGroup group = result.getMatchingCredentialsResponse().getQueryGroups().get(0); + assertTrue(group.getAvailableCredentials().isEmpty()); + assertTrue(group.getMissingClaims().contains("$.age_above_18")); + assertTrue(group.getMissingClaims().contains("$.dateOfBirth")); + } + + @Test + public void testGetMatchingCredentialsDcqlMatchesSdJwtClaimValueWithDecodedDisclosures() throws Exception { + VerifiablePresentationSessionData dcqlSession = createDcqlSessionData(); + ClaimsQuery ageClaim = new ClaimsQuery( + "age-above-18", List.of("age_above_18"), + List.of(new ClaimValue.BoolValue(true))); + CredentialQuery credentialQuery = new CredentialQuery( + "age-proof", CredentialFormat.DC_SD_JWT.getFormat(), false, + Map.of(), false, List.of(ageClaim), null); + + DCQLQuery dcqlQuery = mock(DCQLQuery.class); + when(dcqlQuery.getCredentials()).thenReturn(List.of(credentialQuery)); + when(dcqlQuery.getCredentialSets()).thenReturn(null); + stubDcqlQuery(dcqlQuery); + + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(createMockWalletCredentialsWithDcSdJwtToken(true)); + when(credentialFormatHandlerFactory.getHandler(CredentialFormat.DC_SD_JWT.getFormat())) + .thenReturn(credentialFormatHandler); + setupSdJwtHandlerMock( + Map.of("age_above_18", true), + Collections.emptyMap(), + Collections.emptyMap()); + when(issuersService.getIssuerConfig(anyString(), anyString())).thenReturn(createMockIssuerConfig()); + + MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials( + dcqlSession, walletId, base64Key); + + DcqlQueryGroup group = result.getMatchingCredentialsResponse().getQueryGroups().get(0); + assertFalse(group.getAvailableCredentials().isEmpty()); + assertTrue(group.getMissingClaims().isEmpty()); + } + + @Test + public void testGetMatchingCredentialsDcqlSdJwtFormatAliasMatch() throws Exception { + VerifiablePresentationSessionData dcqlSession = createDcqlSessionData(); + CredentialQuery credentialQuery = mock(CredentialQuery.class); + when(credentialQuery.getId()).thenReturn("sdjwt-query"); + when(credentialQuery.getFormat()).thenReturn(CredentialFormat.DC_SD_JWT.getFormat()); + when(credentialQuery.getMultiple()).thenReturn(false); + when(credentialQuery.getClaims()).thenReturn(null); + stubCredentialQueryBasics(credentialQuery); + + DCQLQuery dcqlQuery = mock(DCQLQuery.class); + when(dcqlQuery.getCredentials()).thenReturn(List.of(credentialQuery)); + when(dcqlQuery.getCredentialSets()).thenReturn(null); + stubDcqlQuery(dcqlQuery); + + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(createMockWalletCredentialsWithSdJwtFormat()); + when(issuersService.getIssuerConfig(anyString(), anyString())).thenReturn(createMockIssuerConfig()); + + MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials( + dcqlSession, walletId, base64Key); + + assertFalse(result.getMatchingCredentialsResponse().getQueryGroups().get(0).getAvailableCredentials().isEmpty()); + assertEquals(1, result.getMatchingCredentials().size()); + } + + @Test + public void testGetMatchingCredentialsDcqlRejectsSdJwtWithoutHolderBindingWhenRequired() throws Exception { + VerifiablePresentationSessionData dcqlSession = createDcqlSessionData(); + CredentialQuery credentialQuery = new CredentialQuery( + "bound-card", + CredentialFormat.VC_SD_JWT.getFormat(), + false, + Map.of("vct_values", List.of("https://example.com/employee")), + true, + null, + null); + + DCQLQuery dcqlQuery = mock(DCQLQuery.class); + when(dcqlQuery.getCredentials()).thenReturn(List.of(credentialQuery)); + when(dcqlQuery.getCredentialSets()).thenReturn(null); + stubDcqlQuery(dcqlQuery); + + when(walletCredentialService.getDecryptedCredentials(eq(walletId), any())) + .thenReturn(createMockWalletCredentialsWithSdJwtFormat()); + + MatchingCredentialsDTO result = credentialMatchingService.getMatchingCredentials( + dcqlSession, walletId, base64Key); + + DcqlQueryGroup group = result.getMatchingCredentialsResponse().getQueryGroups().get(0); + assertTrue(group.getAvailableCredentials().isEmpty()); + assertTrue(result.getMatchingCredentials().isEmpty()); + } + + private VerifiablePresentationSessionData createDcqlSessionData() { + VerifiablePresentationSessionData data = new VerifiablePresentationSessionData(); + data.setPresentationId("presentation-123"); + data.setAuthorizationRequest("client_id=test-client&response_type=vp_token"); + data.setCreatedAt(Instant.parse("2025-09-08T12:34:56Z")); + data.setVerifierClientPreregistered(true); + data.setDcql(true); + return data; + } + + private void stubDcqlQuery(DCQLQuery dcqlQuery) throws Exception { + when(openID4VPService.resolveDcqlQuery(anyString(), anyString(), anyBoolean())) + .thenReturn(dcqlQuery); + } + + private void stubCredentialQueryBasics(CredentialQuery credentialQuery) { + when(credentialQuery.getMeta()).thenReturn(Map.of()); + when(credentialQuery.getRequireCryptographicHolderBinding()).thenReturn(false); + } + + private List createMockWalletCredentialsWithDcSdJwtToken(boolean includeAgeClaim) + throws Exception { + Map payload = new HashMap<>(); + payload.put("vct", "https://example.com/age"); + payload.put("cnf", Map.of("kid", "key-1")); + if (includeAgeClaim) { + payload.put("age_above_18", true); + } + + DecryptedCredentialDTO credential = new DecryptedCredentialDTO(); + credential.setId("test-credential-id"); + credential.setWalletId(walletId); + + VCCredentialResponse response = VCCredentialResponse.builder() + .format(CredentialFormat.DC_SD_JWT.getFormat()) + .credential(buildTestSdJwtToken(payload)) + .build(); + + credential.setCredential(response); + + CredentialMetadata metadata = new CredentialMetadata(); + metadata.setIssuerId("test-issuer-id"); + metadata.setCredentialType("TestCredential"); + credential.setCredentialMetadata(metadata); + credential.setCreatedAt(Instant.now()); + credential.setUpdatedAt(Instant.now()); + + return List.of(credential); + } + + private String buildTestSdJwtToken(Map payload) throws Exception { + ObjectMapper mapper = new ObjectMapper(); + Base64.Encoder encoder = Base64.getUrlEncoder().withoutPadding(); + String header = encoder.encodeToString(mapper.writeValueAsBytes(Map.of("alg", "none"))); + String encodedPayload = encoder.encodeToString(mapper.writeValueAsBytes(payload)); + return header + "." + encodedPayload + ".signature"; + } } \ No newline at end of file diff --git a/src/test/java/io/mosip/mimoto/service/OpenID4VPServiceTest.java b/src/test/java/io/mosip/mimoto/service/OpenID4VPServiceTest.java index 264a1d7d3..90e95f9f9 100644 --- a/src/test/java/io/mosip/mimoto/service/OpenID4VPServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/OpenID4VPServiceTest.java @@ -8,8 +8,11 @@ import io.mosip.mimoto.exception.ApiNotAccessibleException; import io.mosip.mimoto.service.impl.OpenID4VPService; import io.mosip.openID4VP.OpenID4VP; +import io.mosip.openID4VP.authorizationRequest.AuthorizationPresentationExchangeRequest; +import io.mosip.openID4VP.authorizationRequest.AuthorizationDcqlRequest; import io.mosip.openID4VP.authorizationRequest.AuthorizationRequest; import io.mosip.openID4VP.authorizationRequest.presentationDefinition.PresentationDefinition; +import io.mosip.openID4VP.dcql.query.DCQLQuery; import io.mosip.openID4VP.common.OpenID4VPErrorCodes; import io.mosip.openID4VP.exceptions.OpenID4VPExceptions; import io.mosip.openID4VP.verifier.VerifierResponse; @@ -46,7 +49,7 @@ public class OpenID4VPServiceTest { private VerifiersDTO mockVerifiersDTO; private VerifierDTO mockVerifierDTO; - private AuthorizationRequest mockAuthorizationRequest; + private AuthorizationPresentationExchangeRequest mockAuthorizationRequest; private PresentationDefinition mockPresentationDefinition; @Before @@ -66,7 +69,7 @@ public void setUp() { // Setup mock AuthorizationRequest - mockAuthorizationRequest = mock(AuthorizationRequest.class); + mockAuthorizationRequest = mock(AuthorizationPresentationExchangeRequest.class); // Setup mock PresentationDefinition mockPresentationDefinition = mock(PresentationDefinition.class); @@ -74,7 +77,7 @@ public void setUp() { @Test public void testCreateReturnsValidOpenID4VP() { - OpenID4VP openID4VP = openID4VPService.create("presentation-123"); + OpenID4VP openID4VP = openID4VPService.create("presentation-123", List.of(), true); assertNotNull(openID4VP); assertEquals("io.mosip.openID4VP.OpenID4VP", openID4VP.getClass().getName()); @@ -82,7 +85,7 @@ public void testCreateReturnsValidOpenID4VP() { @Test public void testCreateWithValidPresentationIdReturnsValidOpenID4VP() { - OpenID4VP openID4VP = openID4VPService.create("valid-presentation-id"); + OpenID4VP openID4VP = openID4VPService.create("valid-presentation-id", List.of(), true); assertNotNull(openID4VP); assertEquals("io.mosip.openID4VP.OpenID4VP", openID4VP.getClass().getName()); @@ -90,7 +93,7 @@ public void testCreateWithValidPresentationIdReturnsValidOpenID4VP() { @Test public void testCreateWithSpecialCharactersPresentationIdReturnsValidOpenID4VP() { - OpenID4VP openID4VP = openID4VPService.create("presentation-123_with.special@chars"); + OpenID4VP openID4VP = openID4VPService.create("presentation-123_with.special@chars", List.of(), true); assertNotNull(openID4VP); assertEquals("io.mosip.openID4VP.OpenID4VP", openID4VP.getClass().getName()); @@ -103,14 +106,14 @@ public void testResolvePresentationDefinitionSuccess() throws Exception { // Create a mock OpenID4VP to control the authenticateVerifier method OpenID4VP mockOpenID4VP = mock(OpenID4VP.class); - when(mockOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())) + when(mockOpenID4VP.authenticateVerifier(anyString())) .thenReturn(mockAuthorizationRequest); when(mockAuthorizationRequest.getPresentationDefinition()) .thenReturn(mockPresentationDefinition); // Use reflection to replace the create method behavior OpenID4VPService spyService = spy(openID4VPService); - doReturn(mockOpenID4VP).when(spyService).create(anyString()); + doReturn(mockOpenID4VP).when(spyService).create(anyString(), anyList(), anyBoolean()); // Execute PresentationDefinition result = spyService.resolvePresentationDefinition( @@ -123,7 +126,7 @@ public void testResolvePresentationDefinitionSuccess() throws Exception { assertNotNull(result); assertEquals(mockPresentationDefinition, result); verify(verifierService).getTrustedVerifiers(); - verify(mockOpenID4VP).authenticateVerifier(eq("authorization-request"), anyList(), eq(true)); + verify(mockOpenID4VP).authenticateVerifier(eq("authorization-request")); verify(mockAuthorizationRequest).getPresentationDefinition(); } @@ -176,14 +179,14 @@ public void testResolvePresentationDefinitionWithEmptyPresentationIdReturnsNull( // Create a mock OpenID4VP to control the authenticateVerifier method OpenID4VP mockOpenID4VP = mock(OpenID4VP.class); - when(mockOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())) + when(mockOpenID4VP.authenticateVerifier(anyString())) .thenReturn(mockAuthorizationRequest); when(mockAuthorizationRequest.getPresentationDefinition()) .thenReturn(mockPresentationDefinition); // Use reflection to replace the create method behavior OpenID4VPService spyService = spy(openID4VPService); - doReturn(mockOpenID4VP).when(spyService).create(anyString()); + doReturn(mockOpenID4VP).when(spyService).create(anyString(), anyList(), anyBoolean()); // Execute PresentationDefinition result = spyService.resolvePresentationDefinition( @@ -195,7 +198,7 @@ public void testResolvePresentationDefinitionWithEmptyPresentationIdReturnsNull( // Verify - Empty string is not null, so it will proceed to call verifierService assertNotNull(result); verify(verifierService).getTrustedVerifiers(); - verify(mockOpenID4VP).authenticateVerifier(eq("authorization-request"), anyList(), eq(true)); + verify(mockOpenID4VP).authenticateVerifier(eq("authorization-request")); verify(mockAuthorizationRequest).getPresentationDefinition(); } @@ -206,14 +209,14 @@ public void testResolvePresentationDefinitionWithEmptyAuthorizationRequestReturn // Create a mock OpenID4VP to control the authenticateVerifier method OpenID4VP mockOpenID4VP = mock(OpenID4VP.class); - when(mockOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())) + when(mockOpenID4VP.authenticateVerifier(anyString())) .thenReturn(mockAuthorizationRequest); when(mockAuthorizationRequest.getPresentationDefinition()) .thenReturn(mockPresentationDefinition); // Use reflection to replace the create method behavior OpenID4VPService spyService = spy(openID4VPService); - doReturn(mockOpenID4VP).when(spyService).create(anyString()); + doReturn(mockOpenID4VP).when(spyService).create(anyString(), anyList(), anyBoolean()); // Execute PresentationDefinition result = spyService.resolvePresentationDefinition( @@ -225,7 +228,7 @@ public void testResolvePresentationDefinitionWithEmptyAuthorizationRequestReturn // Verify - Empty string is not null, so it will proceed to call verifierService assertNotNull(result); verify(verifierService).getTrustedVerifiers(); - verify(mockOpenID4VP).authenticateVerifier(eq(""), anyList(), eq(true)); + verify(mockOpenID4VP).authenticateVerifier(eq("")); verify(mockAuthorizationRequest).getPresentationDefinition(); } @@ -275,14 +278,14 @@ public void testResolvePresentationDefinitionWithEmptyVerifiersList() throws Exc // Create a mock OpenID4VP to control the authenticateVerifier method OpenID4VP mockOpenID4VP = mock(OpenID4VP.class); - when(mockOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())) + when(mockOpenID4VP.authenticateVerifier(anyString())) .thenReturn(mockAuthorizationRequest); when(mockAuthorizationRequest.getPresentationDefinition()) .thenReturn(mockPresentationDefinition); // Use reflection to replace the create method behavior OpenID4VPService spyService = spy(openID4VPService); - doReturn(mockOpenID4VP).when(spyService).create(anyString()); + doReturn(mockOpenID4VP).when(spyService).create(anyString(), anyList(), anyBoolean()); // Execute PresentationDefinition result = spyService.resolvePresentationDefinition( @@ -295,7 +298,7 @@ public void testResolvePresentationDefinitionWithEmptyVerifiersList() throws Exc assertNotNull(result); assertEquals(mockPresentationDefinition, result); verify(verifierService).getTrustedVerifiers(); - verify(mockOpenID4VP).authenticateVerifier("authorization-request", List.of(), false); + verify(mockOpenID4VP).authenticateVerifier("authorization-request"); verify(mockAuthorizationRequest).getPresentationDefinition(); } @@ -306,14 +309,14 @@ public void testResolvePresentationDefinitionWithNullPresentationDefinition() th // Create a mock OpenID4VP to control the authenticateVerifier method OpenID4VP mockOpenID4VP = mock(OpenID4VP.class); - when(mockOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())) + when(mockOpenID4VP.authenticateVerifier(anyString())) .thenReturn(mockAuthorizationRequest); when(mockAuthorizationRequest.getPresentationDefinition()) .thenReturn(null); // Use reflection to replace the create method behavior OpenID4VPService spyService = spy(openID4VPService); - doReturn(mockOpenID4VP).when(spyService).create(anyString()); + doReturn(mockOpenID4VP).when(spyService).create(anyString(), anyList(), anyBoolean()); // Execute PresentationDefinition result = spyService.resolvePresentationDefinition( @@ -325,10 +328,117 @@ public void testResolvePresentationDefinitionWithNullPresentationDefinition() th // Verify assertNull(result); verify(verifierService).getTrustedVerifiers(); - verify(mockOpenID4VP).authenticateVerifier(eq("authorization-request"), anyList(), eq(true)); + verify(mockOpenID4VP).authenticateVerifier(eq("authorization-request")); verify(mockAuthorizationRequest).getPresentationDefinition(); } + @Test + public void testResolveDcqlQuerySuccess() throws Exception { + when(verifierService.getTrustedVerifiers()).thenReturn(mockVerifiersDTO); + + DCQLQuery mockDcqlQuery = mock(DCQLQuery.class); + AuthorizationDcqlRequest mockDcqlRequest = mock(AuthorizationDcqlRequest.class); + when(mockDcqlRequest.getDcqlQuery()).thenReturn(mockDcqlQuery); + + OpenID4VP mockOpenID4VP = mock(OpenID4VP.class); + when(mockOpenID4VP.authenticateVerifier(anyString())).thenReturn(mockDcqlRequest); + + OpenID4VPService spyService = spy(openID4VPService); + doReturn(mockOpenID4VP).when(spyService).create(anyString(), anyList(), anyBoolean()); + + DCQLQuery result = spyService.resolveDcqlQuery( + "presentation-123", "authorization-request", true); + + assertNotNull(result); + assertEquals(mockDcqlQuery, result); + verify(verifierService).getTrustedVerifiers(); + verify(mockOpenID4VP).authenticateVerifier(eq("authorization-request")); + verify(mockDcqlRequest).getDcqlQuery(); + } + + @Test + public void testResolveDcqlQueryWithNullPresentationIdReturnsNull() throws Exception { + DCQLQuery result = openID4VPService.resolveDcqlQuery(null, "authorization-request", true); + + assertNull(result); + verifyNoInteractions(verifierService); + } + + @Test + public void testResolveDcqlQueryWithNullAuthorizationRequestReturnsNull() throws Exception { + DCQLQuery result = openID4VPService.resolveDcqlQuery("presentation-123", null, true); + + assertNull(result); + verifyNoInteractions(verifierService); + } + + @Test + public void testResolveDcqlQueryWithBothNullParametersReturnsNull() throws Exception { + DCQLQuery result = openID4VPService.resolveDcqlQuery(null, null, true); + + assertNull(result); + verifyNoInteractions(verifierService); + } + + @Test + public void testResolveDcqlQueryReturnsNullForPresentationExchangeRequest() throws Exception { + when(verifierService.getTrustedVerifiers()).thenReturn(mockVerifiersDTO); + + OpenID4VP mockOpenID4VP = mock(OpenID4VP.class); + when(mockOpenID4VP.authenticateVerifier(anyString())).thenReturn(mockAuthorizationRequest); + + OpenID4VPService spyService = spy(openID4VPService); + doReturn(mockOpenID4VP).when(spyService).create(anyString(), anyList(), anyBoolean()); + + DCQLQuery result = spyService.resolveDcqlQuery( + "presentation-123", "authorization-request", true); + + assertNull(result); + verify(verifierService).getTrustedVerifiers(); + verify(mockOpenID4VP).authenticateVerifier(eq("authorization-request")); + verify(mockAuthorizationRequest, never()).getPresentationDefinition(); + } + + @Test + public void testResolveDcqlQueryWithNullDcqlQuery() throws Exception { + when(verifierService.getTrustedVerifiers()).thenReturn(mockVerifiersDTO); + + AuthorizationDcqlRequest mockDcqlRequest = mock(AuthorizationDcqlRequest.class); + when(mockDcqlRequest.getDcqlQuery()).thenReturn(null); + + OpenID4VP mockOpenID4VP = mock(OpenID4VP.class); + when(mockOpenID4VP.authenticateVerifier(anyString())).thenReturn(mockDcqlRequest); + + OpenID4VPService spyService = spy(openID4VPService); + doReturn(mockOpenID4VP).when(spyService).create(anyString(), anyList(), anyBoolean()); + + DCQLQuery result = spyService.resolveDcqlQuery( + "presentation-123", "authorization-request", false); + + assertNull(result); + verify(mockDcqlRequest).getDcqlQuery(); + } + + @Test + public void testResolveDcqlQueryWithVerifierServiceExceptionThrowsException() throws Exception { + when(verifierService.getTrustedVerifiers()).thenThrow(new ApiNotAccessibleException()); + + assertThrows(ApiNotAccessibleException.class, () -> + openID4VPService.resolveDcqlQuery("presentation-123", "authorization-request", true)); + + verify(verifierService).getTrustedVerifiers(); + } + + @Test + public void testResolveDcqlQueryWithIOExceptionThrowsException() throws Exception { + when(verifierService.getTrustedVerifiers()).thenThrow(new IOException("Network error")); + + assertThrows(IOException.class, () -> + openID4VPService.resolveDcqlQuery("presentation-123", "authorization-request", true)); + + verify(verifierService).getTrustedVerifiers(); + } + @Test public void testSendErrorToVerifierSuccess() throws Exception { // Setup mocks @@ -337,11 +447,11 @@ public void testSendErrorToVerifierSuccess() throws Exception { OpenID4VP mockOpenID4VP = mock(OpenID4VP.class); VerifierResponse mockResponse = mock(VerifierResponse.class); - when(mockOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(mockAuthorizationRequest); + when(mockOpenID4VP.authenticateVerifier(anyString())).thenReturn(mockAuthorizationRequest); when(mockOpenID4VP.sendErrorInfoToVerifier(any())).thenReturn(mockResponse); OpenID4VPService spyService = spy(openID4VPService); - doReturn(mockOpenID4VP).when(spyService).create(anyString()); + doReturn(mockOpenID4VP).when(spyService).create(anyString(), anyList(), anyBoolean()); VerifiablePresentationSessionData sessionData = mock(VerifiablePresentationSessionData.class); when(sessionData.getPresentationId()).thenReturn("presentation-123"); @@ -358,7 +468,7 @@ public void testSendErrorToVerifierSuccess() throws Exception { assertNotNull(response); assertEquals(mockResponse, response); verify(verifierService).getTrustedVerifiers(); - verify(mockOpenID4VP).authenticateVerifier(eq("authorization-request"), anyList(), eq(true)); + verify(mockOpenID4VP).authenticateVerifier(eq("authorization-request")); ArgumentCaptor errorCaptor = ArgumentCaptor.forClass(Exception.class); verify(mockOpenID4VP).sendErrorInfoToVerifier(errorCaptor.capture()); assertTrue(errorCaptor.getValue() instanceof OpenID4VPExceptions.AccessDenied); @@ -373,11 +483,11 @@ public void testSendErrorToVerifierUsesInvalidTransactionDataWhenErrorCodeSet() OpenID4VP mockOpenID4VP = mock(OpenID4VP.class); VerifierResponse mockResponse = mock(VerifierResponse.class); - when(mockOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(mockAuthorizationRequest); + when(mockOpenID4VP.authenticateVerifier(anyString())).thenReturn(mockAuthorizationRequest); when(mockOpenID4VP.sendErrorInfoToVerifier(any())).thenReturn(mockResponse); OpenID4VPService spyService = spy(openID4VPService); - doReturn(mockOpenID4VP).when(spyService).create(anyString()); + doReturn(mockOpenID4VP).when(spyService).create(anyString(), anyList(), anyBoolean()); VerifiablePresentationSessionData sessionData = mock(VerifiablePresentationSessionData.class); when(sessionData.getPresentationId()).thenReturn("presentation-123"); @@ -405,10 +515,10 @@ public void testSendErrorToVerifierWithNullErrorPayload() throws Exception { when(verifierService.getTrustedVerifiers()).thenReturn(mockVerifiersDTO); OpenID4VP mockOpenID4VP = mock(OpenID4VP.class); - when(mockOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(mockAuthorizationRequest); + when(mockOpenID4VP.authenticateVerifier(anyString())).thenReturn(mockAuthorizationRequest); OpenID4VPService spyService = spy(openID4VPService); - doReturn(mockOpenID4VP).when(spyService).create(anyString()); + doReturn(mockOpenID4VP).when(spyService).create(anyString(), anyList(), anyBoolean()); VerifiablePresentationSessionData sessionData = mock(VerifiablePresentationSessionData.class); when(sessionData.getPresentationId()).thenReturn("presentation-123"); @@ -425,11 +535,11 @@ public void testSendErrorToVerifierMapsBlankErrorCodeToAccessDenied() throws Exc OpenID4VP mockOpenID4VP = mock(OpenID4VP.class); VerifierResponse mockResponse = mock(VerifierResponse.class); - when(mockOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(mockAuthorizationRequest); + when(mockOpenID4VP.authenticateVerifier(anyString())).thenReturn(mockAuthorizationRequest); when(mockOpenID4VP.sendErrorInfoToVerifier(any())).thenReturn(mockResponse); OpenID4VPService spyService = spy(openID4VPService); - doReturn(mockOpenID4VP).when(spyService).create(anyString()); + doReturn(mockOpenID4VP).when(spyService).create(anyString(), anyList(), anyBoolean()); VerifiablePresentationSessionData sessionData = mock(VerifiablePresentationSessionData.class); when(sessionData.getPresentationId()).thenReturn("presentation-123"); @@ -455,11 +565,11 @@ public void testSendErrorToVerifierMapsAccessDeniedCodeToAccessDenied() throws E OpenID4VP mockOpenID4VP = mock(OpenID4VP.class); VerifierResponse mockResponse = mock(VerifierResponse.class); - when(mockOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(mockAuthorizationRequest); + when(mockOpenID4VP.authenticateVerifier(anyString())).thenReturn(mockAuthorizationRequest); when(mockOpenID4VP.sendErrorInfoToVerifier(any())).thenReturn(mockResponse); OpenID4VPService spyService = spy(openID4VPService); - doReturn(mockOpenID4VP).when(spyService).create(anyString()); + doReturn(mockOpenID4VP).when(spyService).create(anyString(), anyList(), anyBoolean()); VerifiablePresentationSessionData sessionData = mock(VerifiablePresentationSessionData.class); when(sessionData.getPresentationId()).thenReturn("presentation-123"); @@ -485,11 +595,11 @@ public void testSendErrorToVerifierMapsUnknownErrorCodeToAccessDenied() throws E OpenID4VP mockOpenID4VP = mock(OpenID4VP.class); VerifierResponse mockResponse = mock(VerifierResponse.class); - when(mockOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(mockAuthorizationRequest); + when(mockOpenID4VP.authenticateVerifier(anyString())).thenReturn(mockAuthorizationRequest); when(mockOpenID4VP.sendErrorInfoToVerifier(any())).thenReturn(mockResponse); OpenID4VPService spyService = spy(openID4VPService); - doReturn(mockOpenID4VP).when(spyService).create(anyString()); + doReturn(mockOpenID4VP).when(spyService).create(anyString(), anyList(), anyBoolean()); VerifiablePresentationSessionData sessionData = mock(VerifiablePresentationSessionData.class); when(sessionData.getPresentationId()).thenReturn("presentation-123"); @@ -515,11 +625,11 @@ public void testSendErrorToVerifierUsesEmptyMessageWhenErrorMessageNull() throws OpenID4VP mockOpenID4VP = mock(OpenID4VP.class); VerifierResponse mockResponse = mock(VerifierResponse.class); - when(mockOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(mockAuthorizationRequest); + when(mockOpenID4VP.authenticateVerifier(anyString())).thenReturn(mockAuthorizationRequest); when(mockOpenID4VP.sendErrorInfoToVerifier(any())).thenReturn(mockResponse); OpenID4VPService spyService = spy(openID4VPService); - doReturn(mockOpenID4VP).when(spyService).create(anyString()); + doReturn(mockOpenID4VP).when(spyService).create(anyString(), anyList(), anyBoolean()); VerifiablePresentationSessionData sessionData = mock(VerifiablePresentationSessionData.class); when(sessionData.getPresentationId()).thenReturn("presentation-123"); diff --git a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java index 57ee4e0f3..44932cf51 100644 --- a/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/PresentationServiceTest.java @@ -6,7 +6,7 @@ import io.mosip.mimoto.dto.mimoto.VCCredentialProperties; import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; import io.mosip.mimoto.dto.mimoto.VCCredentialResponseProof; -import io.mosip.mimoto.dto.openid.SpecVersion; +import io.mosip.openID4VP.constants.SpecVersion; import io.mosip.mimoto.dto.openid.VerifierDTO; import io.mosip.mimoto.dto.openid.VerifiersDTO; import io.mosip.mimoto.dto.openid.presentation.FieldDTO; @@ -79,7 +79,7 @@ public void setup() throws JsonProcessingException { List.of("https%3A%2F%2Finji-verify.collab.mosip.net%2Fverifier%2Fvp-response"), null, false, - SpecVersion.V1_0 + SpecVersion.V1 ); verifiersDTO = new VerifiersDTO(); verifiersDTO.setVerifiers(List.of(verifierDTO)); diff --git a/src/test/java/io/mosip/mimoto/service/SessionManagerTest.java b/src/test/java/io/mosip/mimoto/service/SessionManagerTest.java index fbb982dbb..acd68aeed 100644 --- a/src/test/java/io/mosip/mimoto/service/SessionManagerTest.java +++ b/src/test/java/io/mosip/mimoto/service/SessionManagerTest.java @@ -60,7 +60,7 @@ public void shouldCreateAndStorePresentationDetailsInSession() { MockHttpSession session = new MockHttpSession(); String walletId = "wallet123"; String presentationId = "123e4567-e89b-12d3-a456-426614174000"; - VerifiablePresentationSessionData presentationSessionData = new VerifiablePresentationSessionData(presentationId, "authorizationRequest", fixedInstant, false, null); + VerifiablePresentationSessionData presentationSessionData = new VerifiablePresentationSessionData(presentationId, "authorizationRequest", fixedInstant, false, null, false); sessionManager.storePresentationSessionData(session, presentationSessionData, walletId); @@ -87,8 +87,8 @@ public void shouldStorePresentationDetailsProperlyInSessionForMultiplePresentati String presentationId1 = "123e4567-e89b-12d3-a456-426614174000"; String presentationId2 = "123e4567-e89b-12d3-a456-426614174001"; - VerifiablePresentationSessionData sessionData1 = new VerifiablePresentationSessionData(presentationId1, "authorizationRequest", fixedInstant, true, null); - VerifiablePresentationSessionData sessionData2 = new VerifiablePresentationSessionData(presentationId2, "authorizationRequest", fixedInstant, false, null); + VerifiablePresentationSessionData sessionData1 = new VerifiablePresentationSessionData(presentationId1, "authorizationRequest", fixedInstant, true, null, false); + VerifiablePresentationSessionData sessionData2 = new VerifiablePresentationSessionData(presentationId2, "authorizationRequest", fixedInstant, false, null, false); sessionManager.storePresentationSessionData(session, sessionData1, walletId1); sessionManager.storePresentationSessionData(session, sessionData2, walletId2); @@ -125,7 +125,7 @@ public void shouldReturnPresentationDefinitionFromSessionSuccessfully() { String walletId = "wallet123"; MockHttpSession session = new MockHttpSession(); - VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData(presentationId,"mockOpenID4VP", fixedInstant, true, null); + VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData(presentationId,"mockOpenID4VP", fixedInstant, true, null, false); Map presentations = new HashMap<>(); presentations.put(presentationId, sessionData); @@ -159,6 +159,60 @@ public void shouldReturnNullWhenPresentationIdNotFound() { sessionManager.getPresentationSessionData(session, walletId, presentationId); } + @Test + public void shouldRejectNullHttpSession() { + try { + sessionManager.getPresentationSessionData(null, "wallet123", "test-presentation-id"); + fail("Expected IllegalArgumentException"); + } catch (IllegalArgumentException e) { + assertEquals("HTTP session is invalid", e.getMessage()); + } + } + + @Test + public void shouldRejectNullWalletId() { + MockHttpSession session = new MockHttpSession(); + try { + sessionManager.getPresentationSessionData(session, null, "test-presentation-id"); + fail("Expected IllegalArgumentException"); + } catch (IllegalArgumentException e) { + assertEquals("Wallet ID is invalid", e.getMessage()); + } + } + + @Test + public void shouldRejectBlankWalletId() { + MockHttpSession session = new MockHttpSession(); + try { + sessionManager.getPresentationSessionData(session, " ", "test-presentation-id"); + fail("Expected IllegalArgumentException"); + } catch (IllegalArgumentException e) { + assertEquals("Wallet ID is invalid", e.getMessage()); + } + } + + @Test + public void shouldRejectNullPresentationId() { + MockHttpSession session = new MockHttpSession(); + try { + sessionManager.getPresentationSessionData(session, "wallet123", null); + fail("Expected IllegalArgumentException"); + } catch (IllegalArgumentException e) { + assertEquals("presentationId not found in session", e.getMessage()); + } + } + + @Test + public void shouldRejectBlankPresentationId() { + MockHttpSession session = new MockHttpSession(); + try { + sessionManager.getPresentationSessionData(session, "wallet123", " "); + fail("Expected IllegalArgumentException"); + } catch (IllegalArgumentException e) { + assertEquals("presentationId not found in session", e.getMessage()); + } + } + @Test(expected = IllegalArgumentException.class) public void shouldHandleExceptionWhenRetrievingPresentationSessionData() { // Arrange @@ -183,7 +237,7 @@ public void shouldStoreMatchingWalletCredentialsInPresentationSessionData() { // Create existing session data VerifiablePresentationSessionData existingSessionData = new VerifiablePresentationSessionData( - presentationId, "authorizationRequest", fixedInstant, true, null); + presentationId, "authorizationRequest", fixedInstant, true, null, false); // Create credentials to store List credentials = createMockCredentials(); @@ -210,9 +264,35 @@ public void shouldStoreMatchingWalletCredentialsInPresentationSessionData() { assertEquals("authorizationRequest", updatedSessionData.getAuthorizationRequest()); assertEquals(fixedInstant, updatedSessionData.getCreatedAt()); assertTrue(updatedSessionData.isVerifierClientPreregistered()); + assertFalse(updatedSessionData.isDcql()); assertEquals(credentials, updatedSessionData.getMatchingCredentials()); } + @Test + public void shouldPreserveDcqlFlagWhenStoringMatchingWalletCredentials() { + MockHttpSession session = new MockHttpSession(); + String walletId = "wallet123"; + String presentationId = "test-presentation-id"; + Instant fixedInstant = Instant.parse("2025-09-08T12:34:56Z"); + + VerifiablePresentationSessionData existingSessionData = new VerifiablePresentationSessionData( + presentationId, "authorizationRequest", fixedInstant, true, null, true); + List credentials = createMockCredentials(); + + Map presentations = new HashMap<>(); + presentations.put(presentationId, existingSessionData); + session.setAttribute(SessionKeys.PRESENTATIONS + "::" + walletId, presentations); + + sessionManager.storeMatchingWalletCredentialsInPresentationSessionData( + session, walletId, existingSessionData, credentials); + + @SuppressWarnings("unchecked") + Map updatedPresentations = + (Map) session.getAttribute(SessionKeys.PRESENTATIONS + "::" + walletId); + + assertTrue(updatedPresentations.get(presentationId).isDcql()); + } + @Test public void shouldStoreMatchingWalletCredentialsWithNullExistingPresentations() { // Arrange @@ -223,7 +303,7 @@ public void shouldStoreMatchingWalletCredentialsWithNullExistingPresentations() // Create existing session data VerifiablePresentationSessionData existingSessionData = new VerifiablePresentationSessionData( - presentationId, "authorizationRequest", fixedInstant, true, null); + presentationId, "authorizationRequest", fixedInstant, true, null, false); // Create credentials to store List credentials = createMockCredentials(); @@ -247,7 +327,7 @@ public void shouldCreateNewSessionMapWhenNoneExists() { String presentationId = "test-presentation-id"; Instant fixedInstant = Instant.parse("2025-09-08T12:34:56Z"); VerifiablePresentationSessionData sessionData = new VerifiablePresentationSessionData( - presentationId, "authorizationRequest", fixedInstant, true, null); + presentationId, "authorizationRequest", fixedInstant, true, null, false); // Act sessionManager.storePresentationSessionData(session, sessionData, walletId); @@ -272,11 +352,11 @@ public void shouldNotOverwriteExistingPresentationWhenStoringSamePresentationId( // Create original session data VerifiablePresentationSessionData originalSessionData = new VerifiablePresentationSessionData( - presentationId, "originalRequest", fixedInstant, true, null); + presentationId, "originalRequest", fixedInstant, true, null, false); // Create new session data with same presentation ID VerifiablePresentationSessionData newSessionData = new VerifiablePresentationSessionData( - presentationId, "newRequest", fixedInstant.plusSeconds(100), false, null); + presentationId, "newRequest", fixedInstant.plusSeconds(100), false, null, false); // Store original data sessionManager.storePresentationSessionData(session, originalSessionData, walletId); @@ -306,7 +386,7 @@ public void shouldHandleNullCredentialsInStoreMatchingWalletCredentials() { Instant fixedInstant = Instant.parse("2025-09-08T12:34:56Z"); VerifiablePresentationSessionData existingSessionData = new VerifiablePresentationSessionData( - presentationId, "authorizationRequest", fixedInstant, true, null); + presentationId, "authorizationRequest", fixedInstant, true, null, false); // Set up existing presentations map Map presentations = new HashMap<>(); @@ -335,7 +415,7 @@ public void shouldHandleEmptyCredentialsListInStoreMatchingWalletCredentials() { Instant fixedInstant = Instant.parse("2025-09-08T12:34:56Z"); VerifiablePresentationSessionData existingSessionData = new VerifiablePresentationSessionData( - presentationId, "authorizationRequest", fixedInstant, true, null); + presentationId, "authorizationRequest", fixedInstant, true, null, false); // Set up existing presentations map Map presentations = new HashMap<>(); diff --git a/src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java b/src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java index d27b5cbdd..82fb0626e 100644 --- a/src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java +++ b/src/test/java/io/mosip/mimoto/service/VcSdJwtCredentialFormatHandlerTest.java @@ -652,6 +652,7 @@ void extractAllPropertiesFromSdJwtWithSdDigestsInPayloadResolvesSdClaims() { assertNotNull(result); Map sdClaims = result.get("sdClaims"); assertTrue(sdClaims.containsKey("given_name")); + assertEquals("John", result.get("sdClaimValues").get("given_name")); } } diff --git a/src/test/java/io/mosip/mimoto/service/WalletPresentationServiceTest.java b/src/test/java/io/mosip/mimoto/service/WalletPresentationServiceTest.java index 8d0a4bf0a..fa18f0f12 100644 --- a/src/test/java/io/mosip/mimoto/service/WalletPresentationServiceTest.java +++ b/src/test/java/io/mosip/mimoto/service/WalletPresentationServiceTest.java @@ -12,7 +12,7 @@ import io.mosip.mimoto.constant.SigningAlgorithm; import io.mosip.mimoto.dto.*; import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; -import io.mosip.mimoto.dto.openid.SpecVersion; +import io.mosip.openID4VP.constants.SpecVersion; import io.mosip.mimoto.dto.openid.VerifierDTO; import io.mosip.mimoto.dto.openid.VerifiersDTO; import io.mosip.mimoto.dto.resident.VerifiablePresentationSessionData; @@ -25,14 +25,16 @@ import io.mosip.mimoto.util.UrlParameterUtils; import io.mosip.openID4VP.OpenID4VP; import org.springframework.http.ResponseEntity; +import io.mosip.openID4VP.authorizationRequest.AuthorizationPresentationExchangeRequest; import io.mosip.openID4VP.authorizationRequest.AuthorizationRequest; +import io.mosip.openID4VP.authorizationRequest.AuthorizationDcqlRequest; import io.mosip.openID4VP.authorizationRequest.clientMetadata.ClientMetadata; +import io.mosip.openID4VP.authorizationRequest.clientMetadata.ClientMetadataDraft23; import io.mosip.openID4VP.authorizationResponse.unsignedVPToken.UnsignedVPToken; -import io.mosip.openID4VP.authorizationResponse.unsignedVPToken.types.ldp.UnsignedLdpVPToken; -import io.mosip.openID4VP.authorizationResponse.unsignedVPToken.types.sdJwt.UnsignedSdJwtVPToken; -import io.mosip.openID4VP.authorizationResponse.vpTokenSigningResult.types.ldp.LdpVPTokenSigningResult; -import io.mosip.openID4VP.authorizationResponse.vpTokenSigningResult.types.sdJwt.SdJwtVPTokenSigningResult; +import io.mosip.openID4VP.authorizationResponse.vpTokenSigningResult.VPTokenSigningResult; +import io.mosip.openID4VP.common.OpenID4VPErrorCodes; import io.mosip.openID4VP.constants.FormatType; +import io.mosip.openID4VP.exceptions.OpenID4VPExceptions; import io.mosip.openID4VP.verifier.VerifierResponse; import org.junit.Before; import org.junit.Test; @@ -41,8 +43,10 @@ import org.mockito.Mock; import org.mockito.MockedStatic; import org.mockito.junit.MockitoJUnitRunner; +import org.mockito.ArgumentCaptor; import java.io.IOException; +import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.URISyntaxException; import java.nio.charset.StandardCharsets; @@ -56,7 +60,7 @@ import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; -@RunWith(MockitoJUnitRunner.class) +@RunWith(MockitoJUnitRunner.Silent.class) public class WalletPresentationServiceTest { @Mock @@ -74,9 +78,6 @@ public class WalletPresentationServiceTest { @Mock private VerifiablePresentationsRepository verifiablePresentationsRepository; - @Mock - private DataProtectionService dataProtectionService; - @Mock private CredentialMatchingService credentialMatchingService; @@ -86,6 +87,9 @@ public class WalletPresentationServiceTest { @Mock private CredentialFormatHandler credentialFormatHandler; + @Mock + private WalletCredentialService walletCredentialService; + @InjectMocks private WalletPresentationServiceImpl walletPresentationService; @@ -118,7 +122,7 @@ public void setUp() throws Exception { List.of("https://verifier.com/jwks"), null, false, - SpecVersion.V1_0 + SpecVersion.V1 ); verifiersDTO = new VerifiersDTO(); verifiersDTO.setVerifiers(List.of(verifierDTO)); @@ -147,7 +151,7 @@ public void setUp() throws Exception { sessionData.setMatchingCredentials(List.of(credentialDTO)); submitRequest = SubmitPresentationRequestDTO.builder() - .selectedCredentials(List.of("cred-123")) + .selectedCredentials(SelectedCredentials.ofStrings(List.of("cred-123"))) .build(); keyPair = mock(KeyPair.class); @@ -160,20 +164,43 @@ public void setUp() throws Exception { jwkJsonObject.put("kty", "OKP"); jwkJsonObject.put("crv", "Ed25519"); when(publicJWK.toJSONObject()).thenReturn(jwkJsonObject); + + when(walletCredentialService.getDecryptedCredentials(anyString(), anyString())) + .thenReturn(Collections.emptyList()); + } + + private void stubOpenId4VpCreate(OpenID4VP openID4VP) throws Exception { + when(openID4VPService.getPreRegisteredVerifiers()).thenReturn(List.of()); + when(openID4VPService.create(anyString(), anyList(), anyBoolean())).thenReturn(openID4VP); + } + + private UnsignedVPToken mockLdpUnsignedToken() { + UnsignedVPToken token = mock(UnsignedVPToken.class); + String headerB64 = Base64.getUrlEncoder().withoutPadding() + .encodeToString("{\"alg\":\"EdDSA\"}".getBytes(StandardCharsets.UTF_8)); + when(token.getId()).thenReturn("token-id-ldp"); + when(token.getDataToSign()).thenReturn((headerB64 + ".payload").getBytes(StandardCharsets.US_ASCII)); + when(token.getFormat()).thenReturn(FormatType.LDP_VC); + when(token.getSignatureAlgorithm()).thenReturn("EdDSA"); + return token; } @Test public void testHandleVPAuthorizationRequestSuccess() throws Exception { - when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + stubOpenId4VpCreate(mockOpenID4VP); when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); when(verifierService.isVerifierClientPreregistered(anyList(), anyString())).thenReturn(true); - when(mockOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(mockAuthorizationRequest); + when(mockOpenID4VP.authenticateVerifier(anyString())).thenReturn(mockAuthorizationRequest); when(verifierService.isVerifierTrustedByWallet(anyString(), anyString())).thenReturn(true); - ClientMetadata clientMetadata = mock(ClientMetadata.class); + AuthorizationPresentationExchangeRequest peRequest = mock(AuthorizationPresentationExchangeRequest.class); + when(peRequest.getClientId()).thenReturn("test-client"); + when(peRequest.getRedirectUri()).thenReturn("https://verifier.com/redirect"); + ClientMetadataDraft23 clientMetadata = mock(ClientMetadataDraft23.class); when(clientMetadata.getClientName()).thenReturn("Test Verifier"); when(clientMetadata.getLogoUri()).thenReturn("https://verifier.com/logo.png"); - when(mockAuthorizationRequest.getClientMetadata()).thenReturn(clientMetadata); + when(peRequest.getClientMetadata()).thenReturn(clientMetadata); + when(mockOpenID4VP.authenticateVerifier(anyString())).thenReturn(peRequest); VPResponseDTO result = walletPresentationService.handleVPAuthorizationRequest( urlEncodedVPAuthorizationRequest, walletId); @@ -183,21 +210,25 @@ public void testHandleVPAuthorizationRequestSuccess() throws Exception { assertNotNull(result.getVerifiablePresentationVerifierDTO()); assertEquals("test-client", result.getVerifiablePresentationVerifierDTO().getId()); assertEquals("Test Verifier", result.getVerifiablePresentationVerifierDTO().getName()); - verify(openID4VPService).create(anyString()); - verify(verifierService).getTrustedVerifiers(); + verify(openID4VPService).create(anyString(), anyList(), anyBoolean()); + verify(openID4VPService).getPreRegisteredVerifiers(); } @Test public void testHandleVPAuthorizationRequestWithBlankClientName() throws Exception { - when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + stubOpenId4VpCreate(mockOpenID4VP); when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); when(verifierService.isVerifierClientPreregistered(anyList(), anyString())).thenReturn(true); - when(mockOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(mockAuthorizationRequest); + when(mockOpenID4VP.authenticateVerifier(anyString())).thenReturn(mockAuthorizationRequest); when(verifierService.isVerifierTrustedByWallet(anyString(), anyString())).thenReturn(false); - ClientMetadata clientMetadata = mock(ClientMetadata.class); + AuthorizationPresentationExchangeRequest peRequest = mock(AuthorizationPresentationExchangeRequest.class); + when(peRequest.getClientId()).thenReturn("test-client"); + when(peRequest.getRedirectUri()).thenReturn("https://verifier.com/redirect"); + ClientMetadataDraft23 clientMetadata = mock(ClientMetadataDraft23.class); when(clientMetadata.getClientName()).thenReturn(" "); - when(mockAuthorizationRequest.getClientMetadata()).thenReturn(clientMetadata); + when(peRequest.getClientMetadata()).thenReturn(clientMetadata); + when(mockOpenID4VP.authenticateVerifier(anyString())).thenReturn(peRequest); VPResponseDTO result = walletPresentationService.handleVPAuthorizationRequest( urlEncodedVPAuthorizationRequest, walletId); @@ -208,12 +239,11 @@ public void testHandleVPAuthorizationRequestWithBlankClientName() throws Excepti @Test public void testHandleVPAuthorizationRequestWithNullClientMetadata() throws Exception { - when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + stubOpenId4VpCreate(mockOpenID4VP); when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); when(verifierService.isVerifierClientPreregistered(anyList(), anyString())).thenReturn(false); - when(mockOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(mockAuthorizationRequest); + when(mockOpenID4VP.authenticateVerifier(anyString())).thenReturn(mockAuthorizationRequest); when(verifierService.isVerifierTrustedByWallet(anyString(), anyString())).thenReturn(false); - when(mockAuthorizationRequest.getClientMetadata()).thenReturn(null); VPResponseDTO result = walletPresentationService.handleVPAuthorizationRequest( urlEncodedVPAuthorizationRequest, walletId); @@ -223,21 +253,114 @@ public void testHandleVPAuthorizationRequestWithNullClientMetadata() throws Exce assertNull(result.getVerifiablePresentationVerifierDTO().getLogo()); } + @Test + public void testHandleVPAuthorizationRequestDcqlUsesClientMetadataName() throws Exception { + stubOpenId4VpCreate(mockOpenID4VP); + when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); + when(verifierService.isVerifierClientPreregistered(anyList(), anyString())).thenReturn(true); + when(verifierService.isVerifierTrustedByWallet(anyString(), anyString())).thenReturn(true); + + AuthorizationDcqlRequest dcqlRequest = mock(AuthorizationDcqlRequest.class); + when(dcqlRequest.getClientId()).thenReturn("test-client"); + when(dcqlRequest.getRedirectUri()).thenReturn("https://verifier.com/redirect"); + when(dcqlRequest.getDcqlQuery()).thenReturn(mock(io.mosip.openID4VP.dcql.query.DCQLQuery.class)); + ClientMetadata clientMetadata = mock(ClientMetadata.class); + when(clientMetadata.getClientName()).thenReturn("DCQL Verifier"); + when(clientMetadata.getLogoUri()).thenReturn("https://verifier.com/dcql-logo.png"); + when(dcqlRequest.getClientMetadata()).thenReturn(clientMetadata); + when(mockOpenID4VP.authenticateVerifier(anyString())).thenReturn(dcqlRequest); + + VPResponseDTO result = walletPresentationService.handleVPAuthorizationRequest( + urlEncodedVPAuthorizationRequest, walletId); + + assertNotNull(result); + assertTrue(result.isDcql()); + assertEquals("test-client", result.getVerifiablePresentationVerifierDTO().getId()); + assertEquals("DCQL Verifier", result.getVerifiablePresentationVerifierDTO().getName()); + assertEquals("https://verifier.com/dcql-logo.png", result.getVerifiablePresentationVerifierDTO().getLogo()); + } + + @Test + public void testHandleVPAuthorizationRequestDcqlFallsBackToClientIdWhenClientNameBlank() throws Exception { + stubOpenId4VpCreate(mockOpenID4VP); + when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); + when(verifierService.isVerifierClientPreregistered(anyList(), anyString())).thenReturn(false); + when(verifierService.isVerifierTrustedByWallet(anyString(), anyString())).thenReturn(false); + + AuthorizationDcqlRequest dcqlRequest = mock(AuthorizationDcqlRequest.class); + when(dcqlRequest.getClientId()).thenReturn("test-client"); + when(dcqlRequest.getRedirectUri()).thenReturn("https://verifier.com/redirect"); + when(dcqlRequest.getDcqlQuery()).thenReturn(mock(io.mosip.openID4VP.dcql.query.DCQLQuery.class)); + ClientMetadata clientMetadata = mock(ClientMetadata.class); + when(clientMetadata.getClientName()).thenReturn(" "); + when(dcqlRequest.getClientMetadata()).thenReturn(clientMetadata); + when(mockOpenID4VP.authenticateVerifier(anyString())).thenReturn(dcqlRequest); + + VPResponseDTO result = walletPresentationService.handleVPAuthorizationRequest( + urlEncodedVPAuthorizationRequest, walletId); + + assertNotNull(result); + assertTrue(result.isDcql()); + assertEquals("test-client", result.getVerifiablePresentationVerifierDTO().getName()); + assertNull(result.getVerifiablePresentationVerifierDTO().getLogo()); + } + + @Test + public void testHandleVPAuthorizationRequestDcqlWithNullClientMetadata() throws Exception { + stubOpenId4VpCreate(mockOpenID4VP); + when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); + when(verifierService.isVerifierClientPreregistered(anyList(), anyString())).thenReturn(false); + when(verifierService.isVerifierTrustedByWallet(anyString(), anyString())).thenReturn(false); + + AuthorizationDcqlRequest dcqlRequest = mock(AuthorizationDcqlRequest.class); + when(dcqlRequest.getClientId()).thenReturn("test-client"); + when(dcqlRequest.getRedirectUri()).thenReturn("https://verifier.com/redirect"); + when(dcqlRequest.getDcqlQuery()).thenReturn(mock(io.mosip.openID4VP.dcql.query.DCQLQuery.class)); + when(dcqlRequest.getClientMetadata()).thenReturn(null); + when(mockOpenID4VP.authenticateVerifier(anyString())).thenReturn(dcqlRequest); + + VPResponseDTO result = walletPresentationService.handleVPAuthorizationRequest( + urlEncodedVPAuthorizationRequest, walletId); + + assertNotNull(result); + assertTrue(result.isDcql()); + assertEquals("test-client", result.getVerifiablePresentationVerifierDTO().getName()); + assertNull(result.getVerifiablePresentationVerifierDTO().getLogo()); + } + + @Test + public void testHandleVPAuthorizationRequestDcqlWithoutDcqlQueryIsNotDcql() throws Exception { + stubOpenId4VpCreate(mockOpenID4VP); + when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); + when(verifierService.isVerifierClientPreregistered(anyList(), anyString())).thenReturn(false); + when(verifierService.isVerifierTrustedByWallet(anyString(), anyString())).thenReturn(false); + + AuthorizationDcqlRequest dcqlRequest = mock(AuthorizationDcqlRequest.class); + when(dcqlRequest.getClientId()).thenReturn("test-client"); + when(dcqlRequest.getRedirectUri()).thenReturn("https://verifier.com/redirect"); + when(dcqlRequest.getDcqlQuery()).thenReturn(null); + when(dcqlRequest.getClientMetadata()).thenReturn(null); + when(mockOpenID4VP.authenticateVerifier(anyString())).thenReturn(dcqlRequest); + + VPResponseDTO result = walletPresentationService.handleVPAuthorizationRequest( + urlEncodedVPAuthorizationRequest, walletId); + + assertNotNull(result); + assertFalse(result.isDcql()); + } + @Test public void testHandlePresentationActionSubmissionRequestSuccess() throws Exception { SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() - .selectedCredentials(List.of("cred-123")) + .selectedCredentials(SelectedCredentials.ofStrings(List.of("cred-123"))) .build(); - when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + stubOpenId4VpCreate(mockOpenID4VP); when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); - Map unsignedTokens = new HashMap<>(); - UnsignedLdpVPToken unsignedLdpToken = mock(UnsignedLdpVPToken.class); - when(unsignedLdpToken.getDataToSign()).thenReturn("base64-encoded-data"); - unsignedTokens.put(FormatType.LDP_VC, unsignedLdpToken); - when(mockOpenID4VP.constructUnsignedVPToken(any(), anyString(), anyString())).thenReturn(unsignedTokens); + List unsignedTokens = List.of(mockLdpUnsignedToken()); + when(mockOpenID4VP.constructUnsignedVPToken(anyMap())).thenReturn(unsignedTokens); VerifierResponse verifierResponse = mock(VerifierResponse.class); when(verifierResponse.getStatusCode()).thenReturn(200); @@ -250,16 +373,11 @@ public void testHandlePresentationActionSubmissionRequestSuccess() throws Except jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); - when(dataProtectionService.createDetachedJwtSigningInput(anyString(), anyString())) - .thenReturn("signing-input".getBytes()); - urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) .thenReturn("test-client"); when(jwsSigner.sign(any(JWSHeader.class), any(byte[].class))).thenReturn(Base64URL.encode("signature")); when(objectMapper.writeValueAsString(any())).thenReturn("{\"kty\":\"OKP\"}"); - when(objectMapper.convertValue(any(), eq(LdpVPTokenSigningResult.class))).thenReturn(mock(LdpVPTokenSigningResult.class)); - ResponseEntity response = walletPresentationService.handlePresentationAction( walletId, presentationId, request, sessionData, base64Key); @@ -306,18 +424,17 @@ public void testHandlePresentationActionInvalidRequest() { @Test public void testHandlePresentationActionJOSEException() throws Exception { SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() - .selectedCredentials(List.of("cred-123")) + .selectedCredentials(SelectedCredentials.ofStrings(List.of("cred-123"))) .build(); OpenID4VP testOpenID4VP = mock(OpenID4VP.class); - when(openID4VPService.create(anyString())).thenReturn(testOpenID4VP); + stubOpenId4VpCreate(testOpenID4VP); when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); - when(testOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(mockAuthorizationRequest); + when(testOpenID4VP.authenticateVerifier(anyString())).thenReturn(mockAuthorizationRequest); - Map unsignedTokens = new HashMap<>(); - unsignedTokens.put(FormatType.LDP_VC, mock(UnsignedLdpVPToken.class)); - when(testOpenID4VP.constructUnsignedVPToken(any(), anyString(), anyString())).thenReturn(unsignedTokens); + List unsignedTokens = List.of(mockLdpUnsignedToken()); + when(testOpenID4VP.constructUnsignedVPToken(anyMap())).thenReturn(unsignedTokens); try (MockedStatic jwtUtilMock = mockStatic(SigningKeyUtil.class); MockedStatic urlUtilMock = mockStatic(UrlParameterUtils.class)) { @@ -343,14 +460,39 @@ public void testHandlePresentationActionJOSEException() throws Exception { } } + @Test + public void testHandlePresentationActionOpenID4VPException() throws Exception { + SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() + .selectedCredentials(SelectedCredentials.ofStrings(List.of("cred-123"))) + .build(); + + WalletPresentationServiceImpl spyService = spy(walletPresentationService); + doThrow(new OpenID4VPExceptions.AccessDenied("Access denied", "WalletPresentationServiceTest")) + .when(spyService).submitPresentation(any(), anyString(), anyString(), any(), anyString()); + + ResponseEntity response = spyService.handlePresentationAction( + walletId, presentationId, request, sessionData, base64Key); + + assertNotNull(response); + assertEquals(400, response.getStatusCode().value()); + assertNotNull(response.getBody()); + assertTrue("Response body should be ErrorDTO", response.getBody() instanceof ErrorDTO); + ErrorDTO errorDTO = (ErrorDTO) response.getBody(); + assertEquals(OpenID4VPErrorCodes.ACCESS_DENIED, errorDTO.getErrorCode()); + assertEquals("Access denied", errorDTO.getErrorMessage()); + } + @Test public void testHandlePresentationActionKeyGenerationException() throws Exception { SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() - .selectedCredentials(List.of("cred-123")) + .selectedCredentials(SelectedCredentials.ofStrings(List.of("cred-123"))) .build(); - when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + stubOpenId4VpCreate(mockOpenID4VP); when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); + when(mockOpenID4VP.authenticateVerifier(anyString())).thenReturn(mockAuthorizationRequest); + UnsignedVPToken ldpToken = mockLdpUnsignedToken(); + when(mockOpenID4VP.constructUnsignedVPToken(anyMap())).thenReturn(List.of(ldpToken)); when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))) .thenThrow(new KeyGenerationException(KEY_GENERATION_ERROR.getErrorCode(), "Key generation failed")); @@ -364,7 +506,7 @@ public void testHandlePresentationActionKeyGenerationException() throws Exceptio @Test public void testHandlePresentationActionDecryptionException() throws Exception { SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() - .selectedCredentials(List.of("cred-123")) + .selectedCredentials(SelectedCredentials.ofStrings(List.of("cred-123"))) .build(); VerifiablePresentationSessionData testSessionData = new VerifiablePresentationSessionData(); @@ -374,9 +516,11 @@ public void testHandlePresentationActionDecryptionException() throws Exception { testSessionData.setVerifierClientPreregistered(true); testSessionData.setMatchingCredentials(List.of(credentialDTO)); - when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + stubOpenId4VpCreate(mockOpenID4VP); when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); - when(mockOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(mockAuthorizationRequest); + when(mockOpenID4VP.authenticateVerifier(anyString())).thenReturn(mockAuthorizationRequest); + UnsignedVPToken ldpToken = mockLdpUnsignedToken(); + when(mockOpenID4VP.constructUnsignedVPToken(anyMap())).thenReturn(List.of(ldpToken)); when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))) .thenThrow(new DecryptionException(DECRYPTION_ERROR.getErrorCode(), "Decryption failed")); @@ -395,11 +539,11 @@ public void testHandlePresentationActionDecryptionException() throws Exception { @Test public void testHandlePresentationActionApiNotAccessibleException() throws Exception { SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() - .selectedCredentials(List.of("cred-123")) + .selectedCredentials(SelectedCredentials.ofStrings(List.of("cred-123"))) .build(); - when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); - when(verifierService.getTrustedVerifiers()).thenThrow(new ApiNotAccessibleException("API not accessible")); + when(openID4VPService.getPreRegisteredVerifiers()).thenThrow(new ApiNotAccessibleException("API not accessible")); + when(openID4VPService.create(anyString(), anyList(), anyBoolean())).thenReturn(mockOpenID4VP); ResponseEntity response = walletPresentationService.handlePresentationAction( walletId, presentationId, request, sessionData, base64Key); @@ -428,33 +572,37 @@ public void testHandlePresentationActionVPErrorNotSentException() throws Excepti @Test public void testHandlePresentationActionIllegalArgumentException() throws Exception { SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() - .selectedCredentials(List.of("cred-123")) + .selectedCredentials(SelectedCredentials.ofStrings(List.of("cred-123"))) .build(); - VerifiablePresentationSessionData nullSessionData = null; + VerifiablePresentationSessionData emptySessionData = new VerifiablePresentationSessionData(); + emptySessionData.setPresentationId(presentationId); + emptySessionData.setAuthorizationRequest(urlEncodedVPAuthorizationRequest); + emptySessionData.setVerifierClientPreregistered(true); + emptySessionData.setMatchingCredentials(null); + + stubOpenId4VpCreate(mockOpenID4VP); + when(mockOpenID4VP.authenticateVerifier(anyString())).thenReturn(mockAuthorizationRequest); try (MockedStatic jwtUtilMock = mockStatic(SigningKeyUtil.class)) { jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); ResponseEntity response = walletPresentationService.handlePresentationAction( - walletId, presentationId, request, nullSessionData, base64Key); + walletId, presentationId, request, emptySessionData, base64Key); assertNotNull(response); - assertEquals(500, response.getStatusCode().value()); + assertEquals(400, response.getStatusCode().value()); } } @Test public void testSubmitPresentationSuccess() throws Exception { - when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + stubOpenId4VpCreate(mockOpenID4VP); when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); - Map unsignedTokens = new HashMap<>(); - UnsignedLdpVPToken unsignedLdpToken = mock(UnsignedLdpVPToken.class); - when(unsignedLdpToken.getDataToSign()).thenReturn("base64-encoded-data"); - unsignedTokens.put(FormatType.LDP_VC, unsignedLdpToken); - when(mockOpenID4VP.constructUnsignedVPToken(any(), anyString(), anyString())).thenReturn(unsignedTokens); + List unsignedTokens = List.of(mockLdpUnsignedToken()); + when(mockOpenID4VP.constructUnsignedVPToken(anyMap())).thenReturn(unsignedTokens); VerifierResponse verifierResponse = mock(VerifierResponse.class); when(verifierResponse.getStatusCode()).thenReturn(200); @@ -467,16 +615,11 @@ public void testSubmitPresentationSuccess() throws Exception { jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); - when(dataProtectionService.createDetachedJwtSigningInput(anyString(), anyString())) - .thenReturn("signing-input".getBytes()); - urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) .thenReturn("test-client"); when(jwsSigner.sign(any(JWSHeader.class), any(byte[].class))).thenReturn(Base64URL.encode("signature")); when(objectMapper.writeValueAsString(any())).thenReturn("{\"kty\":\"OKP\"}"); - when(objectMapper.convertValue(any(), eq(LdpVPTokenSigningResult.class))).thenReturn(mock(LdpVPTokenSigningResult.class)); - SubmitPresentationResponseDTO result = walletPresentationService.submitPresentation( sessionData, walletId, presentationId, submitRequest, base64Key); @@ -486,17 +629,603 @@ public void testSubmitPresentationSuccess() throws Exception { } } + @Test + public void testSubmitPresentationDcqlNestedSelectedSdClaimsSucceeds() throws Exception { + String credentialId = "a3e92fcf-b107-46c9-8d68-f10cdbe8214b"; + Map> nestedSdClaims = Map.of(credentialId, List.of("dateOfBirth")); + DcqlCredentialSelection dcqlSelection = DcqlCredentialSelection.builder() + .queryId("government-identity") + .selectedCredentialIds(List.of(credentialId)) + .selectedSdClaims(nestedSdClaims) + .build(); + SubmitPresentationRequestDTO dcqlRequest = SubmitPresentationRequestDTO.builder() + .selectedCredentials(SelectedCredentials.ofDcql(List.of(dcqlSelection))) + .build(); + + credentialDTO.setId(credentialId); + credentialDTO.setIdentifier("government-identity"); + sessionData.setMatchingCredentials(List.of(credentialDTO)); + + io.mosip.openID4VP.dcql.query.CredentialQuery credentialQuery = + mock(io.mosip.openID4VP.dcql.query.CredentialQuery.class); + when(credentialQuery.getId()).thenReturn("government-identity"); + when(credentialQuery.getMultiple()).thenReturn(false); + io.mosip.openID4VP.dcql.query.DCQLQuery dcqlQuery = + mock(io.mosip.openID4VP.dcql.query.DCQLQuery.class); + when(dcqlQuery.getCredentials()).thenReturn(List.of(credentialQuery)); + when(dcqlQuery.getCredentialSets()).thenReturn(null); + + stubOpenId4VpCreate(mockOpenID4VP); + when(openID4VPService.resolveDcqlQuery(anyString(), anyString(), anyBoolean())) + .thenReturn(dcqlQuery); + when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); + + List unsignedTokens = List.of(mockLdpUnsignedToken()); + when(mockOpenID4VP.constructUnsignedVPToken(anyMap())).thenReturn(unsignedTokens); + + VerifierResponse verifierResponse = mock(VerifierResponse.class); + when(verifierResponse.getStatusCode()).thenReturn(200); + when(verifierResponse.getRedirectUri()).thenReturn("https://verifier.com/success"); + when(mockOpenID4VP.sendVPResponseToVerifier(any())).thenReturn(verifierResponse); + + try (MockedStatic jwtUtilMock = mockStatic(SigningKeyUtil.class); + MockedStatic urlUtilMock = mockStatic(UrlParameterUtils.class)) { + + jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); + jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); + urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) + .thenReturn("test-client"); + + when(jwsSigner.sign(any(JWSHeader.class), any(byte[].class))).thenReturn(Base64URL.encode("signature")); + when(objectMapper.writeValueAsString(any())).thenReturn("{\"selectedCredentials\":[]}"); + + SubmitPresentationResponseDTO result = walletPresentationService.submitPresentation( + sessionData, walletId, presentationId, dcqlRequest, base64Key); + + assertEquals(OpenID4VPConstants.STATUS_SUCCESS, result.getStatus()); + verify(verifiablePresentationsRepository).save(any(VerifiablePresentation.class)); + } + } + + @Test + public void testSubmitPresentationDcqlUsesClientQueryIdAsMapKey() throws Exception { + String credentialId = "a3e92fcf-b107-46c9-8d68-f10cdbe8214b"; + String clientQueryId = "government-identity"; + DcqlCredentialSelection dcqlSelection = DcqlCredentialSelection.builder() + .queryId(clientQueryId) + .selectedCredentialIds(List.of(credentialId)) + .build(); + SubmitPresentationRequestDTO dcqlRequest = SubmitPresentationRequestDTO.builder() + .selectedCredentials(SelectedCredentials.ofDcql(List.of(dcqlSelection))) + .build(); + + credentialDTO.setId(credentialId); + credentialDTO.setIdentifier("pid_query"); + sessionData.setMatchingCredentials(List.of(credentialDTO)); + + io.mosip.openID4VP.dcql.query.CredentialQuery credentialQuery = + mock(io.mosip.openID4VP.dcql.query.CredentialQuery.class); + when(credentialQuery.getId()).thenReturn(clientQueryId); + when(credentialQuery.getMultiple()).thenReturn(false); + io.mosip.openID4VP.dcql.query.DCQLQuery dcqlQuery = + mock(io.mosip.openID4VP.dcql.query.DCQLQuery.class); + when(dcqlQuery.getCredentials()).thenReturn(List.of(credentialQuery)); + when(dcqlQuery.getCredentialSets()).thenReturn(null); + + stubOpenId4VpCreate(mockOpenID4VP); + when(openID4VPService.resolveDcqlQuery(anyString(), anyString(), anyBoolean())) + .thenReturn(dcqlQuery); + when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); + + List unsignedTokens = List.of(mockLdpUnsignedToken()); + when(mockOpenID4VP.constructUnsignedVPToken(anyMap())).thenReturn(unsignedTokens); + + VerifierResponse verifierResponse = mock(VerifierResponse.class); + when(verifierResponse.getStatusCode()).thenReturn(200); + when(verifierResponse.getRedirectUri()).thenReturn("https://verifier.com/success"); + when(mockOpenID4VP.sendVPResponseToVerifier(any())).thenReturn(verifierResponse); + + try (MockedStatic jwtUtilMock = mockStatic(SigningKeyUtil.class); + MockedStatic urlUtilMock = mockStatic(UrlParameterUtils.class)) { + + jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); + jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); + urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) + .thenReturn("test-client"); + + when(jwsSigner.sign(any(JWSHeader.class), any(byte[].class))).thenReturn(Base64URL.encode("signature")); + when(objectMapper.writeValueAsString(any())).thenReturn("{\"selectedCredentials\":[]}"); + + walletPresentationService.submitPresentation( + sessionData, walletId, presentationId, dcqlRequest, base64Key); + + @SuppressWarnings("unchecked") + ArgumentCaptor mapCaptor = ArgumentCaptor.forClass(Map.class); + verify(mockOpenID4VP).constructUnsignedVPToken(mapCaptor.capture()); + assertTrue(mapCaptor.getValue().containsKey(clientQueryId)); + assertFalse(mapCaptor.getValue().containsKey("pid_query")); + } + } + + @Test + public void testSubmitPresentationDcqlMergesDuplicateQuerySelectionsWhenMultipleTrue() throws Exception { + String queryId = "employment-proof"; + String credentialIdOne = "cred-employment-1"; + String credentialIdTwo = "cred-employment-2"; + DcqlCredentialSelection firstSelection = DcqlCredentialSelection.builder() + .queryId(queryId) + .selectedCredentialIds(List.of(credentialIdOne)) + .build(); + DcqlCredentialSelection secondSelection = DcqlCredentialSelection.builder() + .queryId(queryId) + .selectedCredentialIds(List.of(credentialIdTwo)) + .build(); + SubmitPresentationRequestDTO dcqlRequest = SubmitPresentationRequestDTO.builder() + .selectedCredentials(SelectedCredentials.ofDcql(List.of(firstSelection, secondSelection))) + .build(); + + DecryptedCredentialDTO firstCredential = DecryptedCredentialDTO.builder() + .id(credentialIdOne) + .walletId(walletId) + .identifier(queryId) + .credential(vcCredentialResponse) + .build(); + DecryptedCredentialDTO secondCredential = DecryptedCredentialDTO.builder() + .id(credentialIdTwo) + .walletId(walletId) + .identifier(queryId) + .credential(vcCredentialResponse) + .build(); + sessionData.setMatchingCredentials(List.of(firstCredential, secondCredential)); + when(walletCredentialService.getDecryptedCredentials(anyString(), anyString())) + .thenReturn(List.of(firstCredential, secondCredential)); + + io.mosip.openID4VP.dcql.query.CredentialQuery credentialQuery = + mock(io.mosip.openID4VP.dcql.query.CredentialQuery.class); + when(credentialQuery.getId()).thenReturn(queryId); + when(credentialQuery.getMultiple()).thenReturn(true); + io.mosip.openID4VP.dcql.query.DCQLQuery dcqlQuery = + mock(io.mosip.openID4VP.dcql.query.DCQLQuery.class); + when(dcqlQuery.getCredentials()).thenReturn(List.of(credentialQuery)); + when(dcqlQuery.getCredentialSets()).thenReturn(null); + + stubOpenId4VpCreate(mockOpenID4VP); + when(openID4VPService.resolveDcqlQuery(anyString(), anyString(), anyBoolean())) + .thenReturn(dcqlQuery); + when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); + + List unsignedTokens = List.of(mockLdpUnsignedToken(), mockLdpUnsignedToken()); + when(mockOpenID4VP.constructUnsignedVPToken(anyMap())).thenReturn(unsignedTokens); + + VerifierResponse verifierResponse = mock(VerifierResponse.class); + when(verifierResponse.getStatusCode()).thenReturn(200); + when(verifierResponse.getRedirectUri()).thenReturn("https://verifier.com/success"); + when(mockOpenID4VP.sendVPResponseToVerifier(any())).thenReturn(verifierResponse); + + try (MockedStatic jwtUtilMock = mockStatic(SigningKeyUtil.class); + MockedStatic urlUtilMock = mockStatic(UrlParameterUtils.class)) { + + jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); + jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); + urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) + .thenReturn("test-client"); + + when(jwsSigner.sign(any(JWSHeader.class), any(byte[].class))).thenReturn(Base64URL.encode("signature")); + when(objectMapper.writeValueAsString(any())).thenReturn("{\"selectedCredentials\":[]}"); + + walletPresentationService.submitPresentation( + sessionData, walletId, presentationId, dcqlRequest, base64Key); + + @SuppressWarnings("unchecked") + ArgumentCaptor>> mapCaptor = + ArgumentCaptor.forClass(Map.class); + verify(mockOpenID4VP).constructUnsignedVPToken(mapCaptor.capture()); + assertEquals(2, mapCaptor.getValue().get(queryId).size()); + } + } + + @Test + public void testSubmitPresentationDcqlClaimSetsAutoResolvesSdClaimPaths() throws Exception { + String credentialId = "d0b504e8-adaf-4df1-9ba0-2d2a5c52e519"; + String queryId = "age-proof"; + DcqlCredentialSelection dcqlSelection = DcqlCredentialSelection.builder() + .queryId(queryId) + .selectedCredentialIds(List.of(credentialId)) + .build(); + SubmitPresentationRequestDTO dcqlRequest = SubmitPresentationRequestDTO.builder() + .selectedCredentials(SelectedCredentials.ofDcql(List.of(dcqlSelection))) + .build(); + + String sdJwt = "header.payload.sig~ageDiscB64~dobDiscB64~"; + vcCredentialResponse = VCCredentialResponse.builder() + .format(CredentialFormat.DC_SD_JWT.getFormat()) + .credential(sdJwt) + .build(); + credentialDTO = DecryptedCredentialDTO.builder() + .id(credentialId) + .identifier(queryId) + .credential(vcCredentialResponse) + .build(); + sessionData.setMatchingCredentials(List.of(credentialDTO)); + when(walletCredentialService.getDecryptedCredentials(anyString(), anyString())) + .thenReturn(List.of(credentialDTO)); + + io.mosip.openID4VP.dcql.query.ClaimsQuery ageClaim = + new io.mosip.openID4VP.dcql.query.ClaimsQuery( + "age-above-18", List.of("age_above_18"), + List.of(new io.mosip.openID4VP.dcql.query.ClaimValue.BoolValue(true))); + io.mosip.openID4VP.dcql.query.ClaimsQuery dobClaim = + new io.mosip.openID4VP.dcql.query.ClaimsQuery( + "date-of-birth", List.of("dateOfBirth"), null); + io.mosip.openID4VP.dcql.query.CredentialQuery credentialQuery = + new io.mosip.openID4VP.dcql.query.CredentialQuery( + queryId, CredentialFormat.DC_SD_JWT.getFormat(), false, + Map.of(), false, List.of(ageClaim, dobClaim), + List.of(List.of("age-above-18"), List.of("date-of-birth"))); + io.mosip.openID4VP.dcql.query.DCQLQuery dcqlQuery = + mock(io.mosip.openID4VP.dcql.query.DCQLQuery.class); + when(dcqlQuery.getCredentials()).thenReturn(List.of(credentialQuery)); + when(dcqlQuery.getCredentialSets()).thenReturn(null); + + Map sdClaims = new LinkedHashMap<>(); + sdClaims.put("age_above_18", List.of("ageDiscB64")); + sdClaims.put("dateOfBirth", List.of("dobDiscB64")); + Map allProps = new HashMap<>(); + allProps.put("sdClaims", sdClaims); + allProps.put("publicClaims", Map.of("vct", "AgeProofCredential")); + when(credentialFormatHandlerFactory.getHandler(CredentialFormat.DC_SD_JWT.getFormat())) + .thenReturn(credentialFormatHandler); + doReturn(allProps).when(credentialFormatHandler).extractAllCredentialProperties(any()); + + stubOpenId4VpCreate(mockOpenID4VP); + when(openID4VPService.resolveDcqlQuery(anyString(), anyString(), anyBoolean())) + .thenReturn(dcqlQuery); + when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); + + List unsignedTokens = List.of(mockSdJwtUnsignedToken()); + when(mockOpenID4VP.constructUnsignedVPToken(anyMap())).thenReturn(unsignedTokens); + + VerifierResponse verifierResponse = mock(VerifierResponse.class); + when(verifierResponse.getStatusCode()).thenReturn(200); + when(verifierResponse.getRedirectUri()).thenReturn("https://verifier.com/success"); + when(mockOpenID4VP.sendVPResponseToVerifier(any())).thenReturn(verifierResponse); + + try (MockedStatic jwtUtilMock = mockStatic(SigningKeyUtil.class); + MockedStatic urlUtilMock = mockStatic(UrlParameterUtils.class)) { + + jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); + jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); + urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) + .thenReturn("test-client"); + when(jwsSigner.sign(any(JWSHeader.class), any(byte[].class))).thenReturn(Base64URL.encode("signature")); + when(objectMapper.writeValueAsString(any())).thenReturn("{\"selectedCredentials\":[]}"); + + walletPresentationService.submitPresentation( + sessionData, walletId, presentationId, dcqlRequest, base64Key); + + @SuppressWarnings("unchecked") + ArgumentCaptor>> mapCaptor = + ArgumentCaptor.forClass(Map.class); + verify(mockOpenID4VP).constructUnsignedVPToken(mapCaptor.capture()); + io.mosip.openID4VP.wallet.Credential submitted = + mapCaptor.getValue().get(queryId).get(0); + String filteredSdJwt = (String) submitted.getData(); + assertEquals("header.payload.sig~ageDiscB64~", filteredSdJwt); + } + } + + @Test + public void testSubmitPresentationDcqlUnionsClaimSetPathsForSameCredentialAcrossQueries() throws Exception { + String credentialId = "d0b504e8-adaf-4df1-9ba0-2d2a5c52e519"; + String ageQueryId = "age-proof"; + String dobQueryId = "dob-proof"; + DcqlCredentialSelection ageSelection = DcqlCredentialSelection.builder() + .queryId(ageQueryId) + .selectedCredentialIds(List.of(credentialId)) + .build(); + DcqlCredentialSelection dobSelection = DcqlCredentialSelection.builder() + .queryId(dobQueryId) + .selectedCredentialIds(List.of(credentialId)) + .build(); + SubmitPresentationRequestDTO dcqlRequest = SubmitPresentationRequestDTO.builder() + .selectedCredentials(SelectedCredentials.ofDcql(List.of(ageSelection, dobSelection))) + .build(); + + String sdJwt = "header.payload.sig~ageDiscB64~dobDiscB64~"; + vcCredentialResponse = VCCredentialResponse.builder() + .format(CredentialFormat.DC_SD_JWT.getFormat()) + .credential(sdJwt) + .build(); + credentialDTO = DecryptedCredentialDTO.builder() + .id(credentialId) + .identifier(ageQueryId) + .credential(vcCredentialResponse) + .build(); + sessionData.setMatchingCredentials(List.of(credentialDTO)); + when(walletCredentialService.getDecryptedCredentials(anyString(), anyString())) + .thenReturn(List.of(credentialDTO)); + + io.mosip.openID4VP.dcql.query.ClaimsQuery ageClaim = + new io.mosip.openID4VP.dcql.query.ClaimsQuery( + "age-above-18", List.of("age_above_18"), + List.of(new io.mosip.openID4VP.dcql.query.ClaimValue.BoolValue(true))); + io.mosip.openID4VP.dcql.query.ClaimsQuery dobClaim = + new io.mosip.openID4VP.dcql.query.ClaimsQuery( + "date-of-birth", List.of("dateOfBirth"), null); + io.mosip.openID4VP.dcql.query.CredentialQuery ageCredentialQuery = + new io.mosip.openID4VP.dcql.query.CredentialQuery( + ageQueryId, CredentialFormat.DC_SD_JWT.getFormat(), false, + Map.of(), false, List.of(ageClaim), + List.of(List.of("age-above-18"))); + io.mosip.openID4VP.dcql.query.CredentialQuery dobCredentialQuery = + new io.mosip.openID4VP.dcql.query.CredentialQuery( + dobQueryId, CredentialFormat.DC_SD_JWT.getFormat(), false, + Map.of(), false, List.of(dobClaim), + List.of(List.of("date-of-birth"))); + io.mosip.openID4VP.dcql.query.DCQLQuery dcqlQuery = + mock(io.mosip.openID4VP.dcql.query.DCQLQuery.class); + when(dcqlQuery.getCredentials()).thenReturn(List.of(ageCredentialQuery, dobCredentialQuery)); + when(dcqlQuery.getCredentialSets()).thenReturn(null); + + Map sdClaims = new LinkedHashMap<>(); + sdClaims.put("age_above_18", List.of("ageDiscB64")); + sdClaims.put("dateOfBirth", List.of("dobDiscB64")); + Map allProps = new HashMap<>(); + allProps.put("sdClaims", sdClaims); + allProps.put("publicClaims", Map.of("vct", "AgeProofCredential")); + when(credentialFormatHandlerFactory.getHandler(CredentialFormat.DC_SD_JWT.getFormat())) + .thenReturn(credentialFormatHandler); + doReturn(allProps).when(credentialFormatHandler).extractAllCredentialProperties(any()); + + stubOpenId4VpCreate(mockOpenID4VP); + when(openID4VPService.resolveDcqlQuery(anyString(), anyString(), anyBoolean())) + .thenReturn(dcqlQuery); + when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); + + List unsignedTokens = List.of(mockSdJwtUnsignedToken()); + when(mockOpenID4VP.constructUnsignedVPToken(anyMap())).thenReturn(unsignedTokens); + + VerifierResponse verifierResponse = mock(VerifierResponse.class); + when(verifierResponse.getStatusCode()).thenReturn(200); + when(verifierResponse.getRedirectUri()).thenReturn("https://verifier.com/success"); + when(mockOpenID4VP.sendVPResponseToVerifier(any())).thenReturn(verifierResponse); + + try (MockedStatic jwtUtilMock = mockStatic(SigningKeyUtil.class); + MockedStatic urlUtilMock = mockStatic(UrlParameterUtils.class)) { + + jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); + jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); + urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) + .thenReturn("test-client"); + when(jwsSigner.sign(any(JWSHeader.class), any(byte[].class))).thenReturn(Base64URL.encode("signature")); + when(objectMapper.writeValueAsString(any())).thenReturn("{\"selectedCredentials\":[]}"); + + walletPresentationService.submitPresentation( + sessionData, walletId, presentationId, dcqlRequest, base64Key); + + @SuppressWarnings("unchecked") + ArgumentCaptor>> mapCaptor = + ArgumentCaptor.forClass(Map.class); + verify(mockOpenID4VP).constructUnsignedVPToken(mapCaptor.capture()); + String filteredSdJwt = (String) mapCaptor.getValue().get(ageQueryId).get(0).getData(); + assertEquals("header.payload.sig~ageDiscB64~dobDiscB64~", filteredSdJwt); + } + } + + @Test + public void testValidateDcqlSelectionsRejectsMultipleFalseWithTwoCredentials() throws Exception { + String queryId = "government-identity"; + DcqlCredentialSelection dcqlSelection = DcqlCredentialSelection.builder() + .queryId(queryId) + .selectedCredentialIds(List.of("cred-1", "cred-2")) + .build(); + SubmitPresentationRequestDTO dcqlRequest = SubmitPresentationRequestDTO.builder() + .selectedCredentials(SelectedCredentials.ofDcql(List.of(dcqlSelection))) + .build(); + + io.mosip.openID4VP.dcql.query.CredentialQuery credentialQuery = + mock(io.mosip.openID4VP.dcql.query.CredentialQuery.class); + when(credentialQuery.getId()).thenReturn(queryId); + when(credentialQuery.getMultiple()).thenReturn(false); + io.mosip.openID4VP.dcql.query.DCQLQuery dcqlQuery = + mock(io.mosip.openID4VP.dcql.query.DCQLQuery.class); + when(dcqlQuery.getCredentials()).thenReturn(List.of(credentialQuery)); + when(dcqlQuery.getCredentialSets()).thenReturn(null); + + stubOpenId4VpCreate(mockOpenID4VP); + when(mockOpenID4VP.authenticateVerifier(anyString())).thenReturn(mockAuthorizationRequest); + when(openID4VPService.resolveDcqlQuery(anyString(), anyString(), anyBoolean())) + .thenReturn(dcqlQuery); + + try { + walletPresentationService.submitPresentation( + sessionData, walletId, presentationId, dcqlRequest, base64Key); + fail("Should throw InvalidRequestException"); + } catch (InvalidRequestException e) { + assertTrue(e.getMessage().contains("has multiple=false but 2 credential(s) were selected")); + } + } + + @Test + public void testValidateDcqlSelectionsRejectsCredentialSetWithMixedOptions() throws Exception { + io.mosip.openID4VP.dcql.query.CredentialSetQuery setQuery = + mock(io.mosip.openID4VP.dcql.query.CredentialSetQuery.class); + when(setQuery.getRequired()).thenReturn(true); + when(setQuery.getOptions()).thenReturn(List.of(List.of("pan"), List.of("aadhaar"))); + + io.mosip.openID4VP.dcql.query.CredentialQuery panQuery = + mock(io.mosip.openID4VP.dcql.query.CredentialQuery.class); + when(panQuery.getId()).thenReturn("pan"); + when(panQuery.getMultiple()).thenReturn(false); + io.mosip.openID4VP.dcql.query.CredentialQuery aadhaarQuery = + mock(io.mosip.openID4VP.dcql.query.CredentialQuery.class); + when(aadhaarQuery.getId()).thenReturn("aadhaar"); + when(aadhaarQuery.getMultiple()).thenReturn(false); + + io.mosip.openID4VP.dcql.query.DCQLQuery dcqlQuery = + mock(io.mosip.openID4VP.dcql.query.DCQLQuery.class); + when(dcqlQuery.getCredentials()).thenReturn(List.of(panQuery, aadhaarQuery)); + when(dcqlQuery.getCredentialSets()).thenReturn(List.of(setQuery)); + + DcqlCredentialSelection panSelection = DcqlCredentialSelection.builder() + .queryId("pan") + .selectedCredentialIds(List.of("cred-pan")) + .build(); + DcqlCredentialSelection aadhaarSelection = DcqlCredentialSelection.builder() + .queryId("aadhaar") + .selectedCredentialIds(List.of("cred-aadhaar")) + .build(); + SubmitPresentationRequestDTO dcqlRequest = SubmitPresentationRequestDTO.builder() + .selectedCredentials(SelectedCredentials.ofDcql(List.of(panSelection, aadhaarSelection))) + .build(); + + stubOpenId4VpCreate(mockOpenID4VP); + when(mockOpenID4VP.authenticateVerifier(anyString())).thenReturn(mockAuthorizationRequest); + when(openID4VPService.resolveDcqlQuery(anyString(), anyString(), anyBoolean())) + .thenReturn(dcqlQuery); + + try { + walletPresentationService.submitPresentation( + sessionData, walletId, presentationId, dcqlRequest, base64Key); + fail("Should throw InvalidRequestException"); + } catch (InvalidRequestException e) { + assertTrue(e.getMessage().contains( + "Credential selection must satisfy exactly one option in credential_set")); + } + } + + @Test + public void testValidateDcqlSelectionsRejectsPartialSelectionWhenCredentialSetsSynthesized() throws Exception { + DcqlCredentialSelection governmentSelection = DcqlCredentialSelection.builder() + .queryId("government-identity") + .selectedCredentialIds(List.of("cred-government")) + .build(); + SubmitPresentationRequestDTO dcqlRequest = SubmitPresentationRequestDTO.builder() + .selectedCredentials(SelectedCredentials.ofDcql(List.of(governmentSelection))) + .build(); + + io.mosip.openID4VP.dcql.query.CredentialQuery governmentQuery = + mock(io.mosip.openID4VP.dcql.query.CredentialQuery.class); + when(governmentQuery.getId()).thenReturn("government-identity"); + when(governmentQuery.getMultiple()).thenReturn(false); + io.mosip.openID4VP.dcql.query.CredentialQuery ageQuery = + mock(io.mosip.openID4VP.dcql.query.CredentialQuery.class); + when(ageQuery.getId()).thenReturn("age-proof"); + when(ageQuery.getMultiple()).thenReturn(false); + + io.mosip.openID4VP.dcql.query.DCQLQuery dcqlQuery = + mock(io.mosip.openID4VP.dcql.query.DCQLQuery.class); + when(dcqlQuery.getCredentials()).thenReturn(List.of(governmentQuery, ageQuery)); + when(dcqlQuery.getCredentialSets()).thenReturn(null); + + stubOpenId4VpCreate(mockOpenID4VP); + when(mockOpenID4VP.authenticateVerifier(anyString())).thenReturn(mockAuthorizationRequest); + when(openID4VPService.resolveDcqlQuery(anyString(), anyString(), anyBoolean())) + .thenReturn(dcqlQuery); + + try { + walletPresentationService.submitPresentation( + sessionData, walletId, presentationId, dcqlRequest, base64Key); + fail("Should throw InvalidRequestException"); + } catch (InvalidRequestException e) { + assertTrue(e.getMessage().contains( + "Credential selection must satisfy exactly one option in credential_set")); + assertTrue(e.getMessage().contains("age-proof")); + } + } + + @Test + public void testSubmitPresentationDcqlCredentialSetSingleOptionSucceeds() throws Exception { + String panCredentialId = "cred-pan-001"; + DcqlCredentialSelection panSelection = DcqlCredentialSelection.builder() + .queryId("pan") + .selectedCredentialIds(List.of(panCredentialId)) + .build(); + SubmitPresentationRequestDTO dcqlRequest = SubmitPresentationRequestDTO.builder() + .selectedCredentials(SelectedCredentials.ofDcql(List.of(panSelection))) + .build(); + + DecryptedCredentialDTO panCredential = DecryptedCredentialDTO.builder() + .id(panCredentialId) + .identifier("pan") + .walletId(walletId) + .credential(vcCredentialResponse) + .build(); + sessionData.setMatchingCredentials(List.of(panCredential)); + + io.mosip.openID4VP.dcql.query.CredentialSetQuery setQuery = + mock(io.mosip.openID4VP.dcql.query.CredentialSetQuery.class); + when(setQuery.getRequired()).thenReturn(true); + when(setQuery.getOptions()).thenReturn(List.of(List.of("pan"), List.of("aadhaar"))); + + io.mosip.openID4VP.dcql.query.CredentialQuery panQuery = + mock(io.mosip.openID4VP.dcql.query.CredentialQuery.class); + when(panQuery.getId()).thenReturn("pan"); + when(panQuery.getMultiple()).thenReturn(false); + io.mosip.openID4VP.dcql.query.CredentialQuery aadhaarQuery = + mock(io.mosip.openID4VP.dcql.query.CredentialQuery.class); + when(aadhaarQuery.getId()).thenReturn("aadhaar"); + when(aadhaarQuery.getMultiple()).thenReturn(false); + + io.mosip.openID4VP.dcql.query.DCQLQuery dcqlQuery = + mock(io.mosip.openID4VP.dcql.query.DCQLQuery.class); + when(dcqlQuery.getCredentials()).thenReturn(List.of(panQuery, aadhaarQuery)); + when(dcqlQuery.getCredentialSets()).thenReturn(List.of(setQuery)); + + stubOpenId4VpCreate(mockOpenID4VP); + when(mockOpenID4VP.authenticateVerifier(anyString())).thenReturn(mockAuthorizationRequest); + when(openID4VPService.resolveDcqlQuery(anyString(), anyString(), anyBoolean())) + .thenReturn(dcqlQuery); + when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); + + List unsignedTokens = List.of(mockLdpUnsignedToken()); + when(mockOpenID4VP.constructUnsignedVPToken(anyMap())).thenReturn(unsignedTokens); + + VerifierResponse verifierResponse = mock(VerifierResponse.class); + when(verifierResponse.getStatusCode()).thenReturn(200); + when(verifierResponse.getRedirectUri()).thenReturn("https://verifier.com/success"); + when(mockOpenID4VP.sendVPResponseToVerifier(any())).thenReturn(verifierResponse); + + try (MockedStatic jwtUtilMock = mockStatic(SigningKeyUtil.class); + MockedStatic urlUtilMock = mockStatic(UrlParameterUtils.class)) { + + jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); + jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); + urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) + .thenReturn("test-client"); + + when(jwsSigner.sign(any(JWSHeader.class), any(byte[].class))).thenReturn(Base64URL.encode("signature")); + when(objectMapper.writeValueAsString(any())).thenReturn("{\"selectedCredentials\":[]}"); + + SubmitPresentationResponseDTO result = walletPresentationService.submitPresentation( + sessionData, walletId, presentationId, dcqlRequest, base64Key); + + assertEquals(OpenID4VPConstants.STATUS_SUCCESS, result.getStatus()); + verify(verifiablePresentationsRepository).save(any(VerifiablePresentation.class)); + } + } + + private UnsignedVPToken mockSdJwtUnsignedToken() { + UnsignedVPToken token = mock(UnsignedVPToken.class); + when(token.getId()).thenReturn("token-id-sdjwt"); + when(token.getFormat()).thenReturn(FormatType.DC_SD_JWT); + when(token.getSignatureAlgorithm()).thenReturn("EdDSA"); + String header = Base64.getUrlEncoder().withoutPadding() + .encodeToString("{\"alg\":\"EdDSA\"}".getBytes(StandardCharsets.UTF_8)); + String payload = Base64.getUrlEncoder().withoutPadding() + .encodeToString("{\"sub\":\"test\"}".getBytes(StandardCharsets.UTF_8)); + when(token.getDataToSign()).thenReturn((header + "." + payload).getBytes(StandardCharsets.US_ASCII)); + return token; + } + @Test public void testSubmitPresentationShareFailed() throws Exception { - when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + stubOpenId4VpCreate(mockOpenID4VP); when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); - Map unsignedTokens = new HashMap<>(); - UnsignedLdpVPToken unsignedLdpToken = mock(UnsignedLdpVPToken.class); - when(unsignedLdpToken.getDataToSign()).thenReturn("base64-encoded-data"); - unsignedTokens.put(FormatType.LDP_VC, unsignedLdpToken); - when(mockOpenID4VP.constructUnsignedVPToken(any(), anyString(), anyString())).thenReturn(unsignedTokens); + List unsignedTokens = List.of(mockLdpUnsignedToken()); + when(mockOpenID4VP.constructUnsignedVPToken(anyMap())).thenReturn(unsignedTokens); VerifierResponse verifierResponse = mock(VerifierResponse.class); when(verifierResponse.getStatusCode()).thenReturn(500); @@ -509,16 +1238,11 @@ public void testSubmitPresentationShareFailed() throws Exception { jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); - when(dataProtectionService.createDetachedJwtSigningInput(anyString(), anyString())) - .thenReturn("signing-input".getBytes()); - urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) .thenReturn("test-client"); when(jwsSigner.sign(any(JWSHeader.class), any(byte[].class))).thenReturn(Base64URL.encode("signature")); when(objectMapper.writeValueAsString(any())).thenReturn("{\"kty\":\"OKP\"}"); - when(objectMapper.convertValue(any(), eq(LdpVPTokenSigningResult.class))).thenReturn(mock(LdpVPTokenSigningResult.class)); - SubmitPresentationResponseDTO result = walletPresentationService.submitPresentation( sessionData, walletId, presentationId, submitRequest, base64Key); @@ -530,15 +1254,12 @@ public void testSubmitPresentationShareFailed() throws Exception { @Test public void testSubmitPresentationExceptionDuringShare() throws Exception { - when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + stubOpenId4VpCreate(mockOpenID4VP); when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); - Map unsignedTokens = new HashMap<>(); - UnsignedLdpVPToken unsignedLdpToken = mock(UnsignedLdpVPToken.class); - when(unsignedLdpToken.getDataToSign()).thenReturn("base64-encoded-data"); - unsignedTokens.put(FormatType.LDP_VC, unsignedLdpToken); - when(mockOpenID4VP.constructUnsignedVPToken(any(), anyString(), anyString())).thenReturn(unsignedTokens); + List unsignedTokens = List.of(mockLdpUnsignedToken()); + when(mockOpenID4VP.constructUnsignedVPToken(anyMap())).thenReturn(unsignedTokens); when(mockOpenID4VP.sendVPResponseToVerifier(any())).thenThrow(new RuntimeException("Network error")); @@ -548,16 +1269,11 @@ public void testSubmitPresentationExceptionDuringShare() throws Exception { jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); - when(dataProtectionService.createDetachedJwtSigningInput(anyString(), anyString())) - .thenReturn("signing-input".getBytes()); - urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) .thenReturn("test-client"); when(jwsSigner.sign(any(JWSHeader.class), any(byte[].class))).thenReturn(Base64URL.encode("signature")); when(objectMapper.writeValueAsString(any())).thenReturn("{\"kty\":\"OKP\"}"); - when(objectMapper.convertValue(any(), eq(LdpVPTokenSigningResult.class))).thenReturn(mock(LdpVPTokenSigningResult.class)); - SubmitPresentationResponseDTO result = walletPresentationService.submitPresentation( sessionData, walletId, presentationId, submitRequest, base64Key); @@ -577,7 +1293,7 @@ public void testSubmitPresentationNullRequest() throws Exception { @Test(expected = java.lang.IllegalArgumentException.class) public void testSubmitPresentationEmptyCredentials() throws Exception { SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() - .selectedCredentials(Collections.emptyList()) + .selectedCredentials(SelectedCredentials.ofStrings(Collections.emptyList())) .build(); walletPresentationService.submitPresentation( @@ -587,7 +1303,7 @@ public void testSubmitPresentationEmptyCredentials() throws Exception { @Test public void testHandlePresentationSubmissionNullBase64Key() throws Exception { SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() - .selectedCredentials(List.of("cred-123")) + .selectedCredentials(SelectedCredentials.ofStrings(List.of("cred-123"))) .build(); ResponseEntity response = walletPresentationService.handlePresentationAction( @@ -604,7 +1320,7 @@ public void testHandlePresentationSubmissionNullBase64Key() throws Exception { @Test public void testHandlePresentationSubmissionBlankBase64Key() throws Exception { SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() - .selectedCredentials(List.of("cred-123")) + .selectedCredentials(SelectedCredentials.ofStrings(List.of("cred-123"))) .build(); ResponseEntity response = walletPresentationService.handlePresentationAction( @@ -635,7 +1351,7 @@ public void testSignVPTokenUnsupportedFormat() throws Exception { sessionDataWithUnsupportedFormat.setAuthorizationRequest(urlEncodedVPAuthorizationRequest); sessionDataWithUnsupportedFormat.setVerifierClientPreregistered(true); - when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + stubOpenId4VpCreate(mockOpenID4VP); when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); @@ -655,23 +1371,24 @@ public void testSignVPTokenUnsupportedFormat() throws Exception { @Test(expected = IllegalStateException.class) public void testFetchSelectedCredentialsNullMatchingCredentials() throws Exception { VerifiablePresentationSessionData nullSessionData = new VerifiablePresentationSessionData(); + nullSessionData.setPresentationId(presentationId); + nullSessionData.setAuthorizationRequest(urlEncodedVPAuthorizationRequest); + nullSessionData.setVerifierClientPreregistered(true); nullSessionData.setMatchingCredentials(null); + stubOpenId4VpCreate(mockOpenID4VP); + when(mockOpenID4VP.authenticateVerifier(anyString())).thenReturn(mockAuthorizationRequest); + SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() - .selectedCredentials(List.of("cred-123")) + .selectedCredentials(SelectedCredentials.ofStrings(List.of("cred-123"))) .build(); - - try (MockedStatic jwtUtilMock = mockStatic(SigningKeyUtil.class)) { - jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); - - walletPresentationService.submitPresentation( - nullSessionData, walletId, presentationId, request, base64Key); - } + walletPresentationService.submitPresentation( + nullSessionData, walletId, presentationId, request, base64Key); } @Test - public void testFetchSelectedCredentialsNoMatchingCredential() throws Exception { + public void testFetchSelectedCredentialsRejectsUnknownCredentialId() throws Exception { VerifiablePresentationSessionData sessionDataWithDifferentCred = new VerifiablePresentationSessionData(); DecryptedCredentialDTO differentCred = DecryptedCredentialDTO.builder() .id("cred-999") @@ -683,45 +1400,36 @@ public void testFetchSelectedCredentialsNoMatchingCredential() throws Exception sessionDataWithDifferentCred.setVerifierClientPreregistered(true); SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() - .selectedCredentials(List.of("cred-123")) + .selectedCredentials(SelectedCredentials.ofStrings(List.of("cred-123"))) .build(); - when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); - when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); - when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); - when(mockOpenID4VP.authenticateVerifier(anyString(), anyList(), anyBoolean())).thenReturn(mockAuthorizationRequest); - - try (MockedStatic jwtUtilMock = mockStatic(SigningKeyUtil.class); - MockedStatic urlUtilMock = mockStatic(UrlParameterUtils.class)) { - - jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); - jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); + stubOpenId4VpCreate(mockOpenID4VP); + when(mockOpenID4VP.authenticateVerifier(anyString())).thenReturn(mockAuthorizationRequest); - when(dataProtectionService.createDetachedJwtSigningInput(anyString(), anyString())) - .thenReturn("signing-input".getBytes()); - - urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) - .thenReturn("test-client"); + try { + walletPresentationService.submitPresentation( + sessionDataWithDifferentCred, walletId, presentationId, request, base64Key); + fail("Should throw InvalidRequestException"); + } catch (InvalidRequestException e) { + assertTrue(e.getMessage().contains("Selected credential not found in session: cred-123")); + } + } - when(objectMapper.writeValueAsString(any())).thenReturn("{\"kty\":\"OKP\"}"); + @Test + public void testFetchSelectedCredentialsRejectsPartiallyUnknownCredentialIds() throws Exception { + SubmitPresentationRequestDTO request = SubmitPresentationRequestDTO.builder() + .selectedCredentials(SelectedCredentials.ofStrings(List.of("cred-123", "bogus-id"))) + .build(); - Map unsignedTokens = new HashMap<>(); - UnsignedLdpVPToken unsignedLdpToken = mock(UnsignedLdpVPToken.class); - when(unsignedLdpToken.getDataToSign()).thenReturn("base64-encoded-data"); - unsignedTokens.put(FormatType.LDP_VC, unsignedLdpToken); - when(mockOpenID4VP.constructUnsignedVPToken(any(), anyString(), anyString())).thenReturn(unsignedTokens); + stubOpenId4VpCreate(mockOpenID4VP); + when(mockOpenID4VP.authenticateVerifier(anyString())).thenReturn(mockAuthorizationRequest); - try { - SubmitPresentationResponseDTO response = walletPresentationService.submitPresentation( - sessionDataWithDifferentCred, walletId, presentationId, request, base64Key); - assertNotNull(response); - } catch (Exception e) { - assertTrue("Unexpected exception type: " + e.getClass().getName() + ": " + e.getMessage(), - e instanceof IllegalStateException || e instanceof InvalidRequestException || - e instanceof ApiNotAccessibleException || e instanceof IOException || - e instanceof JOSEException || e instanceof DecryptionException || - e instanceof KeyGenerationException || e instanceof java.lang.NullPointerException); - } + try { + walletPresentationService.submitPresentation( + sessionData, walletId, presentationId, request, base64Key); + fail("Should throw InvalidRequestException"); + } catch (InvalidRequestException e) { + assertTrue(e.getMessage().contains("Selected credential not found in session: bogus-id")); } } @@ -742,7 +1450,7 @@ public void testMapStringToFormatTypeNullFormat() throws Exception { sessionDataWithNullFormat.setAuthorizationRequest(urlEncodedVPAuthorizationRequest); sessionDataWithNullFormat.setVerifierClientPreregistered(true); - when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + stubOpenId4VpCreate(mockOpenID4VP); when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); @@ -771,7 +1479,7 @@ public void testMapStringToFormatTypeUnsupportedFormat() throws Exception { sessionDataWithUnsupportedFormat.setAuthorizationRequest(urlEncodedVPAuthorizationRequest); sessionDataWithUnsupportedFormat.setVerifierClientPreregistered(true); - when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + stubOpenId4VpCreate(mockOpenID4VP); when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); @@ -808,15 +1516,12 @@ public void testStorePresentationRecordNullSessionData() throws Exception { @Test public void testStorePresentationRecordExceptionDuringSave() throws Exception { - when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + stubOpenId4VpCreate(mockOpenID4VP); when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); - Map unsignedTokens = new HashMap<>(); - UnsignedLdpVPToken unsignedLdpToken = mock(UnsignedLdpVPToken.class); - when(unsignedLdpToken.getDataToSign()).thenReturn("base64-encoded-data"); - unsignedTokens.put(FormatType.LDP_VC, unsignedLdpToken); - when(mockOpenID4VP.constructUnsignedVPToken(any(), anyString(), anyString())).thenReturn(unsignedTokens); + List unsignedTokens = List.of(mockLdpUnsignedToken()); + when(mockOpenID4VP.constructUnsignedVPToken(anyMap())).thenReturn(unsignedTokens); VerifierResponse verifierResponse = mock(VerifierResponse.class); when(verifierResponse.getStatusCode()).thenReturn(200); @@ -832,16 +1537,11 @@ public void testStorePresentationRecordExceptionDuringSave() throws Exception { jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); - when(dataProtectionService.createDetachedJwtSigningInput(anyString(), anyString())) - .thenReturn("signing-input".getBytes()); - urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) .thenReturn("test-client"); when(jwsSigner.sign(any(JWSHeader.class), any(byte[].class))).thenReturn(Base64URL.encode("signature")); when(objectMapper.writeValueAsString(any())).thenReturn("{\"kty\":\"OKP\"}"); - when(objectMapper.convertValue(any(), eq(LdpVPTokenSigningResult.class))).thenReturn(mock(LdpVPTokenSigningResult.class)); - SubmitPresentationResponseDTO result = walletPresentationService.submitPresentation( sessionData, walletId, presentationId, submitRequest, base64Key); @@ -855,15 +1555,12 @@ public void testExtractVerifierIdNullAuthorizationRequest() throws Exception { sessionDataWithNullAuth.setAuthorizationRequest(null); sessionDataWithNullAuth.setMatchingCredentials(List.of(credentialDTO)); - when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + stubOpenId4VpCreate(mockOpenID4VP); when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); - Map unsignedTokens = new HashMap<>(); - UnsignedLdpVPToken unsignedLdpToken = mock(UnsignedLdpVPToken.class); - when(unsignedLdpToken.getDataToSign()).thenReturn("base64-encoded-data"); - unsignedTokens.put(FormatType.LDP_VC, unsignedLdpToken); - when(mockOpenID4VP.constructUnsignedVPToken(any(), anyString(), anyString())).thenReturn(unsignedTokens); + List unsignedTokens = List.of(mockLdpUnsignedToken()); + when(mockOpenID4VP.constructUnsignedVPToken(anyMap())).thenReturn(unsignedTokens); VerifierResponse verifierResponse = mock(VerifierResponse.class); when(verifierResponse.getStatusCode()).thenReturn(200); @@ -875,13 +1572,8 @@ public void testExtractVerifierIdNullAuthorizationRequest() throws Exception { jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); - when(dataProtectionService.createDetachedJwtSigningInput(anyString(), anyString())) - .thenReturn("signing-input".getBytes()); - when(jwsSigner.sign(any(JWSHeader.class), any(byte[].class))).thenReturn(Base64URL.encode("signature")); when(objectMapper.writeValueAsString(any())).thenReturn("{\"kty\":\"OKP\"}"); - when(objectMapper.convertValue(any(), eq(LdpVPTokenSigningResult.class))).thenReturn(mock(LdpVPTokenSigningResult.class)); - SubmitPresentationResponseDTO result = walletPresentationService.submitPresentation( sessionDataWithNullAuth, walletId, presentationId, submitRequest, base64Key); @@ -898,15 +1590,12 @@ public void testExtractVerifierIdExceptionDuringExtraction() throws Exception { sessionDataWithInvalidAuth.setAuthorizationRequest("invalid-url"); sessionDataWithInvalidAuth.setMatchingCredentials(List.of(credentialDTO)); - when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + stubOpenId4VpCreate(mockOpenID4VP); when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); - Map unsignedTokens = new HashMap<>(); - UnsignedLdpVPToken unsignedLdpToken = mock(UnsignedLdpVPToken.class); - when(unsignedLdpToken.getDataToSign()).thenReturn("base64-encoded-data"); - unsignedTokens.put(FormatType.LDP_VC, unsignedLdpToken); - when(mockOpenID4VP.constructUnsignedVPToken(any(), anyString(), anyString())).thenReturn(unsignedTokens); + List unsignedTokens = List.of(mockLdpUnsignedToken()); + when(mockOpenID4VP.constructUnsignedVPToken(anyMap())).thenReturn(unsignedTokens); VerifierResponse verifierResponse = mock(VerifierResponse.class); when(verifierResponse.getStatusCode()).thenReturn(200); @@ -919,16 +1608,11 @@ public void testExtractVerifierIdExceptionDuringExtraction() throws Exception { jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); - when(dataProtectionService.createDetachedJwtSigningInput(anyString(), anyString())) - .thenReturn("signing-input".getBytes()); - urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) .thenThrow(new RuntimeException("URL parsing error")); when(jwsSigner.sign(any(JWSHeader.class), any(byte[].class))).thenReturn(Base64URL.encode("signature")); when(objectMapper.writeValueAsString(any())).thenReturn("{\"kty\":\"OKP\"}"); - when(objectMapper.convertValue(any(), eq(LdpVPTokenSigningResult.class))).thenReturn(mock(LdpVPTokenSigningResult.class)); - SubmitPresentationResponseDTO result = walletPresentationService.submitPresentation( sessionDataWithInvalidAuth, walletId, presentationId, submitRequest, base64Key); @@ -945,15 +1629,12 @@ public void testExtractVerifierAuthRequestNullAuthorizationRequest() throws Exce sessionDataWithNullAuth.setAuthorizationRequest(null); sessionDataWithNullAuth.setMatchingCredentials(List.of(credentialDTO)); - when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + stubOpenId4VpCreate(mockOpenID4VP); when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); - Map unsignedTokens = new HashMap<>(); - UnsignedLdpVPToken unsignedLdpToken = mock(UnsignedLdpVPToken.class); - when(unsignedLdpToken.getDataToSign()).thenReturn("base64-encoded-data"); - unsignedTokens.put(FormatType.LDP_VC, unsignedLdpToken); - when(mockOpenID4VP.constructUnsignedVPToken(any(), anyString(), anyString())).thenReturn(unsignedTokens); + List unsignedTokens = List.of(mockLdpUnsignedToken()); + when(mockOpenID4VP.constructUnsignedVPToken(anyMap())).thenReturn(unsignedTokens); VerifierResponse verifierResponse = mock(VerifierResponse.class); when(verifierResponse.getStatusCode()).thenReturn(200); @@ -966,16 +1647,11 @@ public void testExtractVerifierAuthRequestNullAuthorizationRequest() throws Exce jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); - when(dataProtectionService.createDetachedJwtSigningInput(anyString(), anyString())) - .thenReturn("signing-input".getBytes()); - urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) .thenReturn("test-client"); when(jwsSigner.sign(any(JWSHeader.class), any(byte[].class))).thenReturn(Base64URL.encode("signature")); when(objectMapper.writeValueAsString(any())).thenReturn("{\"kty\":\"OKP\"}"); - when(objectMapper.convertValue(any(), eq(LdpVPTokenSigningResult.class))).thenReturn(mock(LdpVPTokenSigningResult.class)); - SubmitPresentationResponseDTO result = walletPresentationService.submitPresentation( sessionDataWithNullAuth, walletId, presentationId, submitRequest, base64Key); @@ -985,15 +1661,12 @@ public void testExtractVerifierAuthRequestNullAuthorizationRequest() throws Exce @Test public void testExtractVerifierAuthRequestExceptionDuringExtraction() throws Exception { - when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + stubOpenId4VpCreate(mockOpenID4VP); when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); - Map unsignedTokens = new HashMap<>(); - UnsignedLdpVPToken unsignedLdpToken = mock(UnsignedLdpVPToken.class); - when(unsignedLdpToken.getDataToSign()).thenReturn("base64-encoded-data"); - unsignedTokens.put(FormatType.LDP_VC, unsignedLdpToken); - when(mockOpenID4VP.constructUnsignedVPToken(any(), anyString(), anyString())).thenReturn(unsignedTokens); + List unsignedTokens = List.of(mockLdpUnsignedToken()); + when(mockOpenID4VP.constructUnsignedVPToken(anyMap())).thenReturn(unsignedTokens); VerifierResponse verifierResponse = mock(VerifierResponse.class); when(verifierResponse.getStatusCode()).thenReturn(200); @@ -1010,15 +1683,10 @@ public void testExtractVerifierAuthRequestExceptionDuringExtraction() throws Exc jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); - when(dataProtectionService.createDetachedJwtSigningInput(anyString(), anyString())) - .thenReturn("signing-input".getBytes()); - urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) .thenReturn("test-client"); when(jwsSigner.sign(any(JWSHeader.class), any(byte[].class))).thenReturn(Base64URL.encode("signature")); - when(objectMapper.convertValue(any(), eq(LdpVPTokenSigningResult.class))).thenReturn(mock(LdpVPTokenSigningResult.class)); - SubmitPresentationResponseDTO result = walletPresentationService.submitPresentation( sessionData, walletId, presentationId, submitRequest, base64Key); @@ -1028,15 +1696,12 @@ public void testExtractVerifierAuthRequestExceptionDuringExtraction() throws Exc @Test public void testCreatePresentationDataExceptionDuringCreation() throws Exception { - when(openID4VPService.create(anyString())).thenReturn(mockOpenID4VP); + stubOpenId4VpCreate(mockOpenID4VP); when(verifierService.getTrustedVerifiers()).thenReturn(verifiersDTO); when(keyPairService.getKeyPairFromDB(anyString(), anyString(), any(SigningAlgorithm.class))).thenReturn(keyPair); - Map unsignedTokens = new HashMap<>(); - UnsignedLdpVPToken unsignedLdpToken = mock(UnsignedLdpVPToken.class); - when(unsignedLdpToken.getDataToSign()).thenReturn("base64-encoded-data"); - unsignedTokens.put(FormatType.LDP_VC, unsignedLdpToken); - when(mockOpenID4VP.constructUnsignedVPToken(any(), anyString(), anyString())).thenReturn(unsignedTokens); + List unsignedTokens = List.of(mockLdpUnsignedToken()); + when(mockOpenID4VP.constructUnsignedVPToken(anyMap())).thenReturn(unsignedTokens); VerifierResponse verifierResponse = mock(VerifierResponse.class); when(verifierResponse.getStatusCode()).thenReturn(200); @@ -1053,15 +1718,10 @@ public void testCreatePresentationDataExceptionDuringCreation() throws Exception jwtUtilMock.when(() -> SigningKeyUtil.generateJwk(any(), any())).thenReturn(jwk); jwtUtilMock.when(() -> SigningKeyUtil.createSigner(any(), any())).thenReturn(jwsSigner); - when(dataProtectionService.createDetachedJwtSigningInput(anyString(), anyString())) - .thenReturn("signing-input".getBytes()); - urlUtilMock.when(() -> UrlParameterUtils.extractQueryParameter(anyString(), anyString())) .thenReturn("test-client"); when(jwsSigner.sign(any(JWSHeader.class), any(byte[].class))).thenReturn(Base64URL.encode("signature")); - when(objectMapper.convertValue(any(), eq(LdpVPTokenSigningResult.class))).thenReturn(mock(LdpVPTokenSigningResult.class)); - SubmitPresentationResponseDTO result = walletPresentationService.submitPresentation( sessionData, walletId, presentationId, submitRequest, base64Key); @@ -1161,9 +1821,9 @@ public void testRejectVerifierIllegalArgumentException() throws Exception { } @Test - public void testSignSdJwtFormatSignsKBTAndReturnsSignaturePerUuid() throws Exception { + public void testSignVPTokensSignsSdJwtKBT() throws Exception { Method method = WalletPresentationServiceImpl.class.getDeclaredMethod( - "signSdJwtFormat", UnsignedVPToken.class, String.class, String.class); + "signVPTokens", List.class, String.class, String.class); method.setAccessible(true); String kbHeader = Base64.getUrlEncoder().withoutPadding() @@ -1172,14 +1832,13 @@ public void testSignSdJwtFormatSignsKBTAndReturnsSignaturePerUuid() throws Excep .encodeToString("{\"nonce\":\"abc\"}".getBytes(StandardCharsets.UTF_8)); String unsignedKBT = kbHeader + "." + kbPayload; - Map uuidToKBT = new HashMap<>(); - uuidToKBT.put("uuid-1", unsignedKBT); - - UnsignedSdJwtVPToken mockToken = mock(UnsignedSdJwtVPToken.class); - when(mockToken.getUuidToUnsignedKBT()).thenReturn(uuidToKBT); + UnsignedVPToken mockToken = mock(UnsignedVPToken.class); + when(mockToken.getId()).thenReturn("token-id-kbt"); + when(mockToken.getFormat()).thenReturn(FormatType.VC_SD_JWT); + when(mockToken.getDataToSign()).thenReturn(unsignedKBT.getBytes(StandardCharsets.US_ASCII)); + when(mockToken.getSignatureAlgorithm()).thenReturn("ES256"); when(jwsSigner.sign(any(JWSHeader.class), any(byte[].class))).thenReturn(Base64URL.encode("test-sig")); - // The signer is now derived per credential from the KB-JWT header alg (ES256 here) KeyPair mockKeyPair = mock(KeyPair.class); JWK mockJwk = mock(JWK.class); when(keyPairService.getKeyPairFromDB(eq("wallet-1"), eq("base64Key"), eq(SigningAlgorithm.ES256))) @@ -1191,14 +1850,50 @@ public void testSignSdJwtFormatSignsKBTAndReturnsSignaturePerUuid() throws Excep mockedSigningKeyUtil.when(() -> SigningKeyUtil.createSigner(SigningAlgorithm.ES256, mockJwk)) .thenReturn(jwsSigner); - SdJwtVPTokenSigningResult result = (SdJwtVPTokenSigningResult) method.invoke( - walletPresentationService, mockToken, "wallet-1", "base64Key"); + @SuppressWarnings("unchecked") + List results = (List) method.invoke( + walletPresentationService, List.of(mockToken), "wallet-1", "base64Key"); - assertNotNull(result); - verify(jwsSigner).sign(any(JWSHeader.class), - eq(unsignedKBT.getBytes(StandardCharsets.US_ASCII))); - assertTrue(result.getUuidToKbJWTSignature().containsKey("uuid-1")); - assertEquals(Base64URL.encode("test-sig").toString(), result.getUuidToKbJWTSignature().get("uuid-1")); + assertNotNull(results); + assertEquals(1, results.size()); + verify(jwsSigner).sign(any(JWSHeader.class), eq(unsignedKBT.getBytes(StandardCharsets.US_ASCII))); + } + } + + @Test + public void testSignVPTokensThrowsWhenJwsHeaderCannotBeParsed() throws Exception { + Method method = WalletPresentationServiceImpl.class.getDeclaredMethod( + "signVPTokens", List.class, String.class, String.class); + method.setAccessible(true); + + String badHeader = Base64.getUrlEncoder().withoutPadding() + .encodeToString("not-valid-jws-header".getBytes(StandardCharsets.UTF_8)); + String unsignedKbt = badHeader + ".payload"; + + UnsignedVPToken mockToken = mock(UnsignedVPToken.class); + when(mockToken.getId()).thenReturn("token-id-bad"); + when(mockToken.getFormat()).thenReturn(FormatType.VC_SD_JWT); + when(mockToken.getDataToSign()).thenReturn(unsignedKbt.getBytes(StandardCharsets.US_ASCII)); + when(mockToken.getSignatureAlgorithm()).thenReturn("ES256"); + + KeyPair mockKeyPair = mock(KeyPair.class); + JWK mockJwk = mock(JWK.class); + when(keyPairService.getKeyPairFromDB(eq("wallet-1"), eq("base64Key"), eq(SigningAlgorithm.ES256))) + .thenReturn(mockKeyPair); + + try (MockedStatic mockedSigningKeyUtil = mockStatic(SigningKeyUtil.class)) { + mockedSigningKeyUtil.when(() -> SigningKeyUtil.generateJwk(SigningAlgorithm.ES256, mockKeyPair)) + .thenReturn(mockJwk); + mockedSigningKeyUtil.when(() -> SigningKeyUtil.createSigner(SigningAlgorithm.ES256, mockJwk)) + .thenReturn(jwsSigner); + + try { + method.invoke(walletPresentationService, List.of(mockToken), "wallet-1", "base64Key"); + fail("Should throw JOSEException"); + } catch (InvocationTargetException e) { + assertTrue(e.getCause() instanceof JOSEException); + assertEquals("Failed to parse JWS header for VP token signing", e.getCause().getMessage()); + } } } @@ -1280,6 +1975,91 @@ public void testBuildFilteredSdJwtNormalizesPathsWithoutDollarDotPrefix() throws assertEquals("header.payload.sig~emailDiscB64~", result); } + @Test + public void testBuildFilteredSdJwtResolvesCredentialSubjectPrefixedSdClaimKeys() throws Exception { + Method method = WalletPresentationServiceImpl.class.getDeclaredMethod( + "buildFilteredSdJwt", DecryptedCredentialDTO.class, List.class); + method.setAccessible(true); + + String originalSdJwt = "header.payload.sig~dobDiscB64~"; + DecryptedCredentialDTO credential = DecryptedCredentialDTO.builder() + .id("cred-id") + .credential(VCCredentialResponse.builder() + .format(CredentialFormat.VC_SD_JWT.getFormat()) + .credential(originalSdJwt) + .build()) + .build(); + + Map sdClaims = new LinkedHashMap<>(); + sdClaims.put("credentialSubject.dateOfBirth", List.of("dobDiscB64")); + Map allProps = new HashMap<>(); + allProps.put("sdClaims", sdClaims); + + when(credentialFormatHandlerFactory.getHandler(CredentialFormat.VC_SD_JWT.getFormat())) + .thenReturn(credentialFormatHandler); + doReturn(allProps).when(credentialFormatHandler).extractAllCredentialProperties(any()); + + String result = (String) method.invoke(walletPresentationService, credential, List.of("dateOfBirth")); + assertEquals("header.payload.sig~dobDiscB64~", result); + } + + @Test + public void testBuildFilteredSdJwtResolvesArrayIndexedCredentialSubjectPaths() throws Exception { + Method method = WalletPresentationServiceImpl.class.getDeclaredMethod( + "buildFilteredSdJwt", DecryptedCredentialDTO.class, List.class); + method.setAccessible(true); + + String originalSdJwt = "header.payload.sig~dobDiscB64~"; + DecryptedCredentialDTO credential = DecryptedCredentialDTO.builder() + .id("cred-id") + .credential(VCCredentialResponse.builder() + .format(CredentialFormat.VC_SD_JWT.getFormat()) + .credential(originalSdJwt) + .build()) + .build(); + + Map sdClaims = new LinkedHashMap<>(); + sdClaims.put("credentialSubject[0].dateOfBirth", List.of("dobDiscB64")); + Map allProps = new HashMap<>(); + allProps.put("sdClaims", sdClaims); + + when(credentialFormatHandlerFactory.getHandler(CredentialFormat.VC_SD_JWT.getFormat())) + .thenReturn(credentialFormatHandler); + doReturn(allProps).when(credentialFormatHandler).extractAllCredentialProperties(any()); + + String result = (String) method.invoke(walletPresentationService, credential, List.of("$.dateOfBirth")); + assertEquals("header.payload.sig~dobDiscB64~", result); + } + + @Test + public void testBuildFilteredSdJwtDoesNotMatchNestedPathBySuffix() throws Exception { + Method method = WalletPresentationServiceImpl.class.getDeclaredMethod( + "buildFilteredSdJwt", DecryptedCredentialDTO.class, List.class); + method.setAccessible(true); + + String originalSdJwt = "header.payload.sig~wrongDiscB64~nameDiscB64~"; + DecryptedCredentialDTO credential = DecryptedCredentialDTO.builder() + .id("cred-id") + .credential(VCCredentialResponse.builder() + .format(CredentialFormat.VC_SD_JWT.getFormat()) + .credential(originalSdJwt) + .build()) + .build(); + + Map sdClaims = new LinkedHashMap<>(); + sdClaims.put("parent.name", List.of("wrongDiscB64")); + sdClaims.put("name", List.of("nameDiscB64")); + Map allProps = new HashMap<>(); + allProps.put("sdClaims", sdClaims); + + when(credentialFormatHandlerFactory.getHandler(CredentialFormat.VC_SD_JWT.getFormat())) + .thenReturn(credentialFormatHandler); + doReturn(allProps).when(credentialFormatHandler).extractAllCredentialProperties(any()); + + String result = (String) method.invoke(walletPresentationService, credential, List.of("$.name")); + assertEquals("header.payload.sig~nameDiscB64~", result); + } + @Test public void testBuildFilteredSdJwtWhenSdClaimsKeyMissingSharesNoDisclosures() throws Exception { Method method = WalletPresentationServiceImpl.class.getDeclaredMethod( @@ -1400,9 +2180,74 @@ public void testBuildFilteredSdJwtWhenCredentialNotStringReturnsRawValue() throw } @Test - public void testSignSdJwtFormatBuildsPerCredentialSignersForDifferentAlgs() throws Exception { + public void testExtractSdClaimsMapReturnsNullWhenHandlerThrows() throws Exception { + Method method = WalletPresentationServiceImpl.class.getDeclaredMethod( + "extractSdClaimsMap", DecryptedCredentialDTO.class); + method.setAccessible(true); + + DecryptedCredentialDTO credential = DecryptedCredentialDTO.builder() + .id("sd-cred-1") + .credential(VCCredentialResponse.builder() + .format(CredentialFormat.DC_SD_JWT.getFormat()) + .credential("header.payload.sig~disc~") + .build()) + .build(); + + when(credentialFormatHandlerFactory.getHandler(CredentialFormat.DC_SD_JWT.getFormat())) + .thenReturn(credentialFormatHandler); + when(credentialFormatHandler.extractAllCredentialProperties(any())) + .thenThrow(new RuntimeException("parse failure")); + + @SuppressWarnings("unchecked") + Map result = (Map) method.invoke(walletPresentationService, credential); + + assertNull(result); + } + + @Test + public void testExtractVerifierAuthRequestReturnsEmptyJsonWhenSerializationFails() throws Exception { + Method method = WalletPresentationServiceImpl.class.getDeclaredMethod( + "extractVerifierAuthRequest", VerifiablePresentationSessionData.class); + method.setAccessible(true); + + VerifiablePresentationSessionData data = new VerifiablePresentationSessionData(); + data.setAuthorizationRequest(urlEncodedVPAuthorizationRequest); + + when(objectMapper.writeValueAsString(any())) + .thenThrow(new JsonProcessingException("serialization failed") {}); + + String result = (String) method.invoke(walletPresentationService, data); + assertEquals("{}", result); + } + + @Test + public void testBuildFilteredSdJwtReturnsCredentialJwtOnlyWhenFilteringFails() throws Exception { + Method method = WalletPresentationServiceImpl.class.getDeclaredMethod( + "buildFilteredSdJwt", DecryptedCredentialDTO.class, List.class); + method.setAccessible(true); + + String originalSdJwt = "header.payload.sig~disc1~disc2~"; + DecryptedCredentialDTO credential = DecryptedCredentialDTO.builder() + .id("cred-id") + .credential(VCCredentialResponse.builder() + .format(CredentialFormat.VC_SD_JWT.getFormat()) + .credential(originalSdJwt) + .build()) + .build(); + + when(credentialFormatHandlerFactory.getHandler(CredentialFormat.VC_SD_JWT.getFormat())) + .thenReturn(credentialFormatHandler); + when(credentialFormatHandler.extractAllCredentialProperties(any())) + .thenThrow(new RuntimeException("filter failure")); + + String result = (String) method.invoke(walletPresentationService, credential, List.of("$.email")); + assertEquals("header.payload.sig~", result); + } + + @Test + public void testSignVPTokensBuildsPerCredentialSignersForDifferentAlgs() throws Exception { Method method = WalletPresentationServiceImpl.class.getDeclaredMethod( - "signSdJwtFormat", UnsignedVPToken.class, String.class, String.class); + "signVPTokens", List.class, String.class, String.class); method.setAccessible(true); String payload = Base64.getUrlEncoder().withoutPadding() @@ -1412,12 +2257,17 @@ public void testSignSdJwtFormatBuildsPerCredentialSignersForDifferentAlgs() thro String eddsaKbt = Base64.getUrlEncoder().withoutPadding() .encodeToString("{\"alg\":\"EdDSA\"}".getBytes(StandardCharsets.UTF_8)) + "." + payload; - Map uuidToKBT = new LinkedHashMap<>(); - uuidToKBT.put("uuid-es256", es256Kbt); - uuidToKBT.put("uuid-eddsa", eddsaKbt); + UnsignedVPToken es256Token = mock(UnsignedVPToken.class); + when(es256Token.getId()).thenReturn("token-id-es256"); + when(es256Token.getFormat()).thenReturn(FormatType.VC_SD_JWT); + when(es256Token.getDataToSign()).thenReturn(es256Kbt.getBytes(StandardCharsets.US_ASCII)); + when(es256Token.getSignatureAlgorithm()).thenReturn("ES256"); - UnsignedSdJwtVPToken mockToken = mock(UnsignedSdJwtVPToken.class); - when(mockToken.getUuidToUnsignedKBT()).thenReturn(uuidToKBT); + UnsignedVPToken eddsaToken = mock(UnsignedVPToken.class); + when(eddsaToken.getId()).thenReturn("token-id-eddsa"); + when(eddsaToken.getFormat()).thenReturn(FormatType.VC_SD_JWT); + when(eddsaToken.getDataToSign()).thenReturn(eddsaKbt.getBytes(StandardCharsets.US_ASCII)); + when(eddsaToken.getSignatureAlgorithm()).thenReturn("EdDSA"); KeyPair mockKeyPair = mock(KeyPair.class); JWK mockJwk = mock(JWK.class); @@ -1437,19 +2287,20 @@ public void testSignSdJwtFormatBuildsPerCredentialSignersForDifferentAlgs() thro mockedSigningKeyUtil.when(() -> SigningKeyUtil.createSigner(SigningAlgorithm.ES256, mockJwk)).thenReturn(es256Signer); mockedSigningKeyUtil.when(() -> SigningKeyUtil.createSigner(SigningAlgorithm.ED25519, mockJwk)).thenReturn(eddsaSigner); - SdJwtVPTokenSigningResult result = (SdJwtVPTokenSigningResult) method.invoke( - walletPresentationService, mockToken, "wallet-1", "base64Key"); + @SuppressWarnings("unchecked") + List results = (List) method.invoke( + walletPresentationService, List.of(es256Token, eddsaToken), "wallet-1", "base64Key"); - // Each credential is signed with the signer matching its own KB-JWT header alg - assertEquals(Base64URL.encode("es256-sig").toString(), result.getUuidToKbJWTSignature().get("uuid-es256")); - assertEquals(Base64URL.encode("eddsa-sig").toString(), result.getUuidToKbJWTSignature().get("uuid-eddsa")); + assertEquals(2, results.size()); + verify(es256Signer).sign(any(JWSHeader.class), eq(es256Kbt.getBytes(StandardCharsets.US_ASCII))); + verify(eddsaSigner).sign(any(JWSHeader.class), eq(eddsaKbt.getBytes(StandardCharsets.US_ASCII))); } } @Test - public void testSignSdJwtFormatReusesSignerForSameAlg() throws Exception { + public void testSignVPTokensReusesSignerForSameAlg() throws Exception { Method method = WalletPresentationServiceImpl.class.getDeclaredMethod( - "signSdJwtFormat", UnsignedVPToken.class, String.class, String.class); + "signVPTokens", List.class, String.class, String.class); method.setAccessible(true); String header = Base64.getUrlEncoder().withoutPadding() @@ -1458,12 +2309,17 @@ public void testSignSdJwtFormatReusesSignerForSameAlg() throws Exception { .encodeToString("{\"nonce\":\"abc\"}".getBytes(StandardCharsets.UTF_8)); String kbt = header + "." + payload; - Map uuidToKBT = new LinkedHashMap<>(); - uuidToKBT.put("uuid-1", kbt); - uuidToKBT.put("uuid-2", kbt); + UnsignedVPToken token1 = mock(UnsignedVPToken.class); + when(token1.getId()).thenReturn("token-id-1"); + when(token1.getFormat()).thenReturn(FormatType.VC_SD_JWT); + when(token1.getDataToSign()).thenReturn(kbt.getBytes(StandardCharsets.US_ASCII)); + when(token1.getSignatureAlgorithm()).thenReturn("ES256"); - UnsignedSdJwtVPToken mockToken = mock(UnsignedSdJwtVPToken.class); - when(mockToken.getUuidToUnsignedKBT()).thenReturn(uuidToKBT); + UnsignedVPToken token2 = mock(UnsignedVPToken.class); + when(token2.getId()).thenReturn("token-id-2"); + when(token2.getFormat()).thenReturn(FormatType.VC_SD_JWT); + when(token2.getDataToSign()).thenReturn(kbt.getBytes(StandardCharsets.US_ASCII)); + when(token2.getSignatureAlgorithm()).thenReturn("ES256"); KeyPair mockKeyPair = mock(KeyPair.class); JWK mockJwk = mock(JWK.class); @@ -1475,12 +2331,13 @@ public void testSignSdJwtFormatReusesSignerForSameAlg() throws Exception { mockedSigningKeyUtil.when(() -> SigningKeyUtil.generateJwk(SigningAlgorithm.ES256, mockKeyPair)).thenReturn(mockJwk); mockedSigningKeyUtil.when(() -> SigningKeyUtil.createSigner(SigningAlgorithm.ES256, mockJwk)).thenReturn(jwsSigner); - SdJwtVPTokenSigningResult result = (SdJwtVPTokenSigningResult) method.invoke( - walletPresentationService, mockToken, "wallet-1", "base64Key"); + @SuppressWarnings("unchecked") + List results = (List) method.invoke( + walletPresentationService, List.of(token1, token2), "wallet-1", "base64Key"); - // Two credentials share ES256 -> the key pair is fetched only once (signer is cached) - verify(keyPairService, times(1)).getKeyPairFromDB("wallet-1", "base64Key", SigningAlgorithm.ES256); - assertEquals(2, result.getUuidToKbJWTSignature().size()); + assertEquals(2, results.size()); + verify(keyPairService, times(1)).getKeyPairFromDB(eq("wallet-1"), eq("base64Key"), eq(SigningAlgorithm.ES256)); + verify(jwsSigner, times(2)).sign(any(JWSHeader.class), eq(kbt.getBytes(StandardCharsets.US_ASCII))); } } } diff --git a/src/test/java/io/mosip/mimoto/util/AuthorizationRequestHelperTest.java b/src/test/java/io/mosip/mimoto/util/AuthorizationRequestHelperTest.java new file mode 100644 index 000000000..068f1e161 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/util/AuthorizationRequestHelperTest.java @@ -0,0 +1,56 @@ +package io.mosip.mimoto.util; + +import io.mosip.openID4VP.authorizationRequest.AuthorizationDcqlRequest; +import io.mosip.openID4VP.authorizationRequest.AuthorizationPresentationExchangeRequest; +import io.mosip.openID4VP.authorizationRequest.AuthorizationRequest; +import io.mosip.openID4VP.dcql.query.DCQLQuery; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class AuthorizationRequestHelperTest { + + @Test + public void hasDcqlQueryReturnsTrueWhenDcqlQueryPresent() { + AuthorizationDcqlRequest dcqlRequest = mock(AuthorizationDcqlRequest.class); + when(dcqlRequest.getDcqlQuery()).thenReturn(mock(DCQLQuery.class)); + + assertTrue(AuthorizationRequestHelper.hasDcqlQuery(dcqlRequest)); + } + + @Test + public void hasDcqlQueryReturnsFalseWhenDcqlQueryMissing() { + AuthorizationDcqlRequest dcqlRequest = mock(AuthorizationDcqlRequest.class); + when(dcqlRequest.getDcqlQuery()).thenReturn(null); + + assertFalse(AuthorizationRequestHelper.hasDcqlQuery(dcqlRequest)); + } + + @Test + public void hasDcqlQueryReturnsFalseForPresentationExchangeRequest() { + AuthorizationRequest peRequest = mock(AuthorizationPresentationExchangeRequest.class); + + assertFalse(AuthorizationRequestHelper.hasDcqlQuery(peRequest)); + } + + @Test + public void extractDcqlQueryReturnsQueryForDcqlRequest() { + DCQLQuery dcqlQuery = mock(DCQLQuery.class); + AuthorizationDcqlRequest dcqlRequest = mock(AuthorizationDcqlRequest.class); + when(dcqlRequest.getDcqlQuery()).thenReturn(dcqlQuery); + + assertEquals(dcqlQuery, AuthorizationRequestHelper.extractDcqlQuery(dcqlRequest)); + } + + @Test + public void extractDcqlQueryReturnsNullForPresentationExchangeRequest() { + AuthorizationRequest peRequest = mock(AuthorizationPresentationExchangeRequest.class); + + assertNull(AuthorizationRequestHelper.extractDcqlQuery(peRequest)); + } +} diff --git a/src/test/java/io/mosip/mimoto/util/DcqlClaimSetHelperTest.java b/src/test/java/io/mosip/mimoto/util/DcqlClaimSetHelperTest.java new file mode 100644 index 000000000..c58074681 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/util/DcqlClaimSetHelperTest.java @@ -0,0 +1,268 @@ +package io.mosip.mimoto.util; + +import com.jayway.jsonpath.JsonPath; +import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; +import io.mosip.openID4VP.dcql.query.ClaimValue; +import io.mosip.openID4VP.dcql.query.ClaimsQuery; +import io.mosip.openID4VP.dcql.query.CredentialQuery; +import org.junit.Test; + +import java.util.List; +import java.util.Map; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class DcqlClaimSetHelperTest { + + @Test + public void matchesClaimsReturnsFalseWhenClaimsEmptyButClaimSetsPresent() { + CredentialQuery query = mock(CredentialQuery.class); + when(query.getClaims()).thenReturn(List.of()); + when(query.getClaimSets()).thenReturn(List.of(List.of("age-above-18"))); + + VCCredentialResponse vc = mock(VCCredentialResponse.class); + + assertFalse(DcqlClaimSetHelper.matchesClaims(query, vc, (ignored, claim) -> true)); + } + + @Test + public void satisfiesClaimSetRejectsUnknownClaimIds() { + CredentialQuery query = mock(CredentialQuery.class); + ClaimsQuery ageClaim = mock(ClaimsQuery.class); + when(ageClaim.getId()).thenReturn("age-above-18"); + when(query.getClaims()).thenReturn(List.of(ageClaim)); + + VCCredentialResponse vc = mock(VCCredentialResponse.class); + + assertFalse(DcqlClaimSetHelper.satisfiesClaimSet( + query, vc, List.of("age-above-18", "unknown-claim"), (ignored, claim) -> true)); + } + + @Test + public void satisfiesClaimSetRejectsClaimSetWithOnlyUnknownClaimIds() { + CredentialQuery query = mock(CredentialQuery.class); + ClaimsQuery ageClaim = mock(ClaimsQuery.class); + when(ageClaim.getId()).thenReturn("age-above-18"); + when(query.getClaims()).thenReturn(List.of(ageClaim)); + + VCCredentialResponse vc = mock(VCCredentialResponse.class); + + assertFalse(DcqlClaimSetHelper.satisfiesClaimSet( + query, vc, List.of("unknown-claim"), (ignored, claim) -> true)); + } + + @Test + public void resolveClaimPathsReturnsEmptyWhenAnyClaimIdUnknown() { + CredentialQuery query = mock(CredentialQuery.class); + ClaimsQuery ageClaim = mock(ClaimsQuery.class); + when(ageClaim.getId()).thenReturn("age-above-18"); + when(ageClaim.getPath()).thenReturn(List.of("age_above_18")); + when(query.getClaims()).thenReturn(List.of(ageClaim)); + + assertTrue(DcqlClaimSetHelper.resolveClaimPaths(query, List.of("unknown-claim")).isEmpty()); + assertTrue(DcqlClaimSetHelper.resolveClaimPaths( + query, List.of("age-above-18", "unknown-claim")).isEmpty()); + } + + @Test + public void matchesClaimsWhenAnyClaimSetSatisfied() { + CredentialQuery query = mock(CredentialQuery.class); + ClaimsQuery ageClaim = mock(ClaimsQuery.class); + ClaimsQuery dobClaim = mock(ClaimsQuery.class); + when(ageClaim.getId()).thenReturn("age-above-18"); + when(ageClaim.getPath()).thenReturn(List.of("age_above_18")); + when(ageClaim.getValues()).thenReturn(List.of(new ClaimValue.BoolValue(true))); + when(dobClaim.getId()).thenReturn("date-of-birth"); + when(dobClaim.getPath()).thenReturn(List.of("dateOfBirth")); + when(dobClaim.getValues()).thenReturn(null); + + when(query.getClaims()).thenReturn(List.of(ageClaim, dobClaim)); + when(query.getClaimSets()).thenReturn(List.of( + List.of("age-above-18"), + List.of("date-of-birth"))); + + VCCredentialResponse vc = mock(VCCredentialResponse.class); + + assertTrue(DcqlClaimSetHelper.matchesClaims(query, vc, (ignored, claim) -> { + if ("age-above-18".equals(claim.getId())) { + return false; + } + return "date-of-birth".equals(claim.getId()); + })); + } + + @Test + public void matchesClaimsRequiresAllClaimsWhenClaimSetsAbsent() { + CredentialQuery query = mock(CredentialQuery.class); + ClaimsQuery ageClaim = mock(ClaimsQuery.class); + ClaimsQuery dobClaim = mock(ClaimsQuery.class); + when(ageClaim.getId()).thenReturn("age-above-18"); + when(dobClaim.getId()).thenReturn("date-of-birth"); + when(query.getClaims()).thenReturn(List.of(ageClaim, dobClaim)); + when(query.getClaimSets()).thenReturn(null); + + VCCredentialResponse vc = mock(VCCredentialResponse.class); + + assertFalse(DcqlClaimSetHelper.matchesClaims(query, vc, (ignored, claim) -> + "age-above-18".equals(claim.getId()))); + } + + @Test + public void isValidClaimSetSelectionMatchesExactOption() { + List> claimSets = List.of( + List.of("age-above-18"), + List.of("date-of-birth")); + assertTrue(DcqlClaimSetHelper.isValidClaimSetSelection(claimSets, List.of("date-of-birth"))); + assertFalse(DcqlClaimSetHelper.isValidClaimSetSelection(claimSets, List.of("age-above-18", "date-of-birth"))); + } + + @Test + public void isValidClaimSetSelectionIgnoresClaimIdOrder() { + List> claimSets = List.of( + List.of("given-name", "family-name", "age-above-18"), + List.of("date-of-birth")); + assertTrue(DcqlClaimSetHelper.isValidClaimSetSelection( + claimSets, List.of("age-above-18", "given-name", "family-name"))); + assertFalse(DcqlClaimSetHelper.isValidClaimSetSelection( + claimSets, List.of("given-name", "family-name"))); + } + + @Test + public void isValidClaimSetSelectionRejectsDuplicateClaimIds() { + List> claimSets = List.of(List.of("given-name", "family-name")); + assertFalse(DcqlClaimSetHelper.isValidClaimSetSelection( + claimSets, List.of("given-name", "given-name"))); + } + + @Test + public void buildJsonPathQuotesDottedSegments() { + Map payload = Map.of( + "org.iso.18013.5.1", Map.of("family_name", "Doe")); + + String dottedKeyPath = DcqlClaimSetHelper.buildJsonPath(List.of("org.iso.18013.5.1")); + String nestedDottedPath = DcqlClaimSetHelper.buildJsonPath( + List.of("credentialSubject", "org.iso.18013.5.1", "family_name")); + + assertEquals("$['org.iso.18013.5.1']", dottedKeyPath); + assertEquals(Map.of("family_name", "Doe"), JsonPath.read(payload, dottedKeyPath)); + assertEquals("$.credentialSubject['org.iso.18013.5.1'].family_name", nestedDottedPath); + + Map nestedPayload = Map.of( + "credentialSubject", Map.of("org.iso.18013.5.1", Map.of("family_name", "Doe"))); + assertEquals("Doe", JsonPath.read(nestedPayload, nestedDottedPath)); + } + @Test + public void buildJsonPathKeepsSimpleSegmentsDotSeparated() { + assertEquals("$.credentialSubject.dateOfBirth", + DcqlClaimSetHelper.buildJsonPath(List.of("credentialSubject", "dateOfBirth"))); + } + + @Test + public void buildClaimPathQuotesDottedNestedSegments() { + assertEquals("org.iso.18013.5.1", + DcqlClaimSetHelper.buildClaimPath(List.of("org.iso.18013.5.1"))); + assertEquals("credentialSubject['org.iso.18013.5.1'].family_name", + DcqlClaimSetHelper.buildClaimPath( + List.of("credentialSubject", "org.iso.18013.5.1", "family_name"))); + } + + @Test + public void resolveJsonPathsUsesBracketSafeSegments() { + CredentialQuery query = mock(CredentialQuery.class); + ClaimsQuery mdlClaim = mock(ClaimsQuery.class); + when(mdlClaim.getId()).thenReturn("family-name"); + when(mdlClaim.getPath()).thenReturn(List.of("org.iso.18013.5.1", "family_name")); + when(query.getClaims()).thenReturn(List.of(mdlClaim)); + + assertEquals(List.of("$['org.iso.18013.5.1'].family_name"), + DcqlClaimSetHelper.resolveJsonPaths(query, List.of("family-name"))); + } + + @Test + public void resolveClaimPathsMapsClaimIdsToPaths() { + CredentialQuery query = mock(CredentialQuery.class); + ClaimsQuery ageClaim = mock(ClaimsQuery.class); + ClaimsQuery dobClaim = mock(ClaimsQuery.class); + when(ageClaim.getId()).thenReturn("age-above-18"); + when(ageClaim.getPath()).thenReturn(List.of("age_above_18")); + when(dobClaim.getId()).thenReturn("date-of-birth"); + when(dobClaim.getPath()).thenReturn(List.of("dateOfBirth")); + when(query.getClaims()).thenReturn(List.of(ageClaim, dobClaim)); + + assertEquals(List.of("age_above_18"), + DcqlClaimSetHelper.resolveClaimPaths(query, List.of("age-above-18"))); + } + + @Test + public void resolveClaimIdsForSubmissionPicksFirstClaimSetWithDisclosure() { + CredentialQuery query = mock(CredentialQuery.class); + ClaimsQuery ageClaim = mock(ClaimsQuery.class); + ClaimsQuery dobClaim = mock(ClaimsQuery.class); + when(ageClaim.getId()).thenReturn("age-above-18"); + when(ageClaim.getPath()).thenReturn(List.of("age_above_18")); + when(dobClaim.getId()).thenReturn("date-of-birth"); + when(dobClaim.getPath()).thenReturn(List.of("dateOfBirth")); + when(query.getClaims()).thenReturn(List.of(ageClaim, dobClaim)); + when(query.getClaimSets()).thenReturn(List.of( + List.of("age-above-18"), + List.of("date-of-birth"))); + + // age_above_18 is public (no disclosure); dateOfBirth IS selectively disclosable + List resolved = DcqlClaimSetHelper.resolveClaimIdsForSubmission( + query, null, path -> path.equals("dateOfBirth")); + + assertEquals(List.of("date-of-birth"), resolved); + } + + @Test + public void resolveClaimIdsForSubmissionReturnsEmptyWhenAllClaimsArePublic() { + CredentialQuery query = mock(CredentialQuery.class); + ClaimsQuery ageClaim = mock(ClaimsQuery.class); + ClaimsQuery dobClaim = mock(ClaimsQuery.class); + when(ageClaim.getId()).thenReturn("age-above-18"); + when(ageClaim.getPath()).thenReturn(List.of("age_above_18")); + when(dobClaim.getId()).thenReturn("date-of-birth"); + when(dobClaim.getPath()).thenReturn(List.of("dateOfBirth")); + when(query.getClaims()).thenReturn(List.of(ageClaim, dobClaim)); + when(query.getClaimSets()).thenReturn(List.of( + List.of("age-above-18"), + List.of("date-of-birth"))); + + // Both are public — no SD filtering needed + List resolved = DcqlClaimSetHelper.resolveClaimIdsForSubmission( + query, null, path -> false); + + assertTrue(resolved.isEmpty()); + } + + @Test + public void resolveClaimIdsForSubmissionHonoursExplicitSelectedClaimIds() { + CredentialQuery query = mock(CredentialQuery.class); + ClaimsQuery ageClaim = mock(ClaimsQuery.class); + ClaimsQuery dobClaim = mock(ClaimsQuery.class); + when(ageClaim.getId()).thenReturn("age-above-18"); + when(ageClaim.getPath()).thenReturn(List.of("age_above_18")); + when(dobClaim.getId()).thenReturn("date-of-birth"); + when(dobClaim.getPath()).thenReturn(List.of("dateOfBirth")); + when(query.getClaims()).thenReturn(List.of(ageClaim, dobClaim)); + when(query.getClaimSets()).thenReturn(List.of( + List.of("age-above-18"), + List.of("date-of-birth"))); + + List resolved = DcqlClaimSetHelper.resolveClaimIdsForSubmission( + query, List.of("date-of-birth"), path -> false); + + assertEquals(List.of("date-of-birth"), resolved); + } + + @Test + public void dcqlValueMatchesBooleanAndString() { + assertTrue(DcqlClaimSetHelper.dcqlValueMatches(true, new ClaimValue.BoolValue(true))); + assertTrue(DcqlClaimSetHelper.dcqlValueMatches("yes", new ClaimValue.StringValue("yes"))); + assertFalse(DcqlClaimSetHelper.dcqlValueMatches(null, new ClaimValue.StringValue("yes"))); + } +} diff --git a/src/test/java/io/mosip/mimoto/util/DcqlCredentialSetHelperTest.java b/src/test/java/io/mosip/mimoto/util/DcqlCredentialSetHelperTest.java new file mode 100644 index 000000000..5fa0dafb2 --- /dev/null +++ b/src/test/java/io/mosip/mimoto/util/DcqlCredentialSetHelperTest.java @@ -0,0 +1,45 @@ +package io.mosip.mimoto.util; + +import io.mosip.openID4VP.dcql.query.CredentialQuery; +import io.mosip.openID4VP.dcql.query.CredentialSetQuery; +import io.mosip.openID4VP.dcql.query.DCQLQuery; +import org.junit.Test; + +import java.util.List; +import java.util.Map; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class DcqlCredentialSetHelperTest { + + @Test + public void resolveEffectiveCredentialSetsReturnsExplicitSets() { + CredentialSetQuery explicitSet = mock(CredentialSetQuery.class); + DCQLQuery dcqlQuery = mock(DCQLQuery.class); + when(dcqlQuery.getCredentialSets()).thenReturn(List.of(explicitSet)); + + assertEquals(List.of(explicitSet), DcqlCredentialSetHelper.resolveEffectiveCredentialSets(dcqlQuery)); + } + + @Test + public void resolveEffectiveCredentialSetsSynthesisesOneRequiredSetPerQueryWhenAbsent() { + CredentialQuery governmentQuery = new CredentialQuery( + "government-identity", "dc+sd-jwt", false, Map.of(), false, null, null); + CredentialQuery ageQuery = new CredentialQuery( + "age-proof", "dc+sd-jwt", false, Map.of(), false, null, null); + DCQLQuery dcqlQuery = mock(DCQLQuery.class); + when(dcqlQuery.getCredentialSets()).thenReturn(null); + when(dcqlQuery.getCredentials()).thenReturn(List.of(governmentQuery, ageQuery)); + + List sets = DcqlCredentialSetHelper.resolveEffectiveCredentialSets(dcqlQuery); + + assertEquals(2, sets.size()); + assertTrue(sets.get(0).getRequired()); + assertEquals(List.of(List.of("government-identity")), sets.get(0).getOptions()); + assertTrue(sets.get(1).getRequired()); + assertEquals(List.of(List.of("age-proof")), sets.get(1).getOptions()); + } +} diff --git a/src/test/java/io/mosip/mimoto/util/DcqlMatchingHelperTest.java b/src/test/java/io/mosip/mimoto/util/DcqlMatchingHelperTest.java new file mode 100644 index 000000000..dede302ac --- /dev/null +++ b/src/test/java/io/mosip/mimoto/util/DcqlMatchingHelperTest.java @@ -0,0 +1,140 @@ +package io.mosip.mimoto.util; + +import com.fasterxml.jackson.databind.ObjectMapper; +import io.mosip.mimoto.constant.CredentialFormat; +import io.mosip.mimoto.dto.DecryptedCredentialDTO; +import io.mosip.mimoto.dto.mimoto.VCCredentialResponse; +import io.mosip.openID4VP.constants.FormatType; +import io.mosip.openID4VP.dcql.query.ClaimValue; +import io.mosip.openID4VP.dcql.query.ClaimsQuery; +import io.mosip.openID4VP.dcql.query.CredentialQuery; +import io.mosip.openID4VP.dcql.query.DCQLQuery; +import io.mosip.openID4VP.dcql.evaluator.ClaimFailure; +import io.mosip.openID4VP.dcql.evaluator.DCQLEvaluationErrorCodes; +import io.mosip.openID4VP.dcql.evaluator.QueryMatchResult; +import io.mosip.openID4VP.helper.DCQLHelper; +import io.mosip.openID4VP.wallet.Credential; +import org.junit.Test; + +import java.util.Base64; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +public class DcqlMatchingHelperTest { + + private final ObjectMapper objectMapper = new ObjectMapper(); + private final DCQLHelper dcqlHelper = new DCQLHelper(); + + @Test + public void toLibraryCredential_mapsLdpVcMapPayload() { + DecryptedCredentialDTO dto = walletCredential("cred-1", CredentialFormat.LDP_VC.getFormat(), + Map.of("credentialSubject", Map.of("id", "did:example:holder", "name", "Alice"))); + + Credential credential = DcqlMatchingHelper.toLibraryCredential(dto, objectMapper); + + assertNotNull(credential); + assertEquals(FormatType.LDP_VC, credential.getFormat()); + assertEquals("cred-1", credential.getCredentialId()); + } + + @Test + public void toLibraryCredential_mapsSdJwtStringPayload() throws Exception { + String token = buildSdJwtToken(Map.of("vct", "https://example.com/employee", "cnf", Map.of("kid", "k1"))); + DecryptedCredentialDTO dto = walletCredential("cred-2", CredentialFormat.DC_SD_JWT.getFormat(), token); + + Credential credential = DcqlMatchingHelper.toLibraryCredential(dto, objectMapper); + + assertNotNull(credential); + assertEquals(FormatType.DC_SD_JWT, credential.getFormat()); + } + + @Test + public void libraryEvaluation_rejectsSdJwtWithoutCnfWhenBindingRequired() throws Exception { + String token = buildSdJwtToken(Map.of("vct", "https://example.com/employee")); + DecryptedCredentialDTO dto = walletCredential("cred-3", CredentialFormat.VC_SD_JWT.getFormat(), token); + + CredentialQuery query = new CredentialQuery( + "employee-card", + CredentialFormat.VC_SD_JWT.getFormat(), + false, + Map.of("vct_values", List.of("https://example.com/employee")), + true, + null, + null); + DCQLQuery dcqlQuery = new DCQLQuery(List.of(query), null); + + var result = dcqlHelper.getMatchingCredentials( + List.of(DcqlMatchingHelper.toLibraryCredential(dto, objectMapper)), dcqlQuery); + + assertFalse(result.getSuccess()); + assertTrue(result.getQueryMatches().get("employee-card").getMatchingCredentials() == null + || result.getQueryMatches().get("employee-card").getMatchingCredentials().isEmpty()); + } + + @Test + public void libraryEvaluation_matchesSdJwtWhenQueryUsesAlternateSdJwtFormat() throws Exception { + String token = buildSdJwtToken(Map.of("vct", "https://example.com/employee", "cnf", Map.of("kid", "k1"))); + DecryptedCredentialDTO dto = walletCredential("cred-4", CredentialFormat.VC_SD_JWT.getFormat(), token); + + CredentialQuery query = new CredentialQuery( + "employee-card", + CredentialFormat.DC_SD_JWT.getFormat(), + false, + Map.of(), + false, + null, + null); + DCQLQuery dcqlQuery = new DCQLQuery(List.of(query), null); + + var result = dcqlHelper.getMatchingCredentials( + DcqlMatchingHelper.constructCredentialWithCredentialFormat(List.of(dto), objectMapper), dcqlQuery); + + assertTrue(result.getSuccess()); + assertEquals("cred-4", result.getQueryMatches().get("employee-card").getMatchingCredentials().get(0).getCredentialId()); + } + + @Test + public void resolveMissingClaims_usesFailedClaimPathsFromLibraryResult() { + CredentialQuery query = new CredentialQuery( + "age-proof", + CredentialFormat.DC_SD_JWT.getFormat(), + false, + Map.of(), + false, + List.of(new ClaimsQuery("age-above-18", List.of("age_above_18"), List.of(new ClaimValue.BoolValue(true)))), + null); + QueryMatchResult queryMatch = new QueryMatchResult( + null, + List.of(new ClaimFailure( + new ClaimsQuery("age-above-18", List.of("age_above_18"), null), + DCQLEvaluationErrorCodes.CLAIM_UNAVAILABLE)), + DCQLEvaluationErrorCodes.REQUIRED_CLAIMS_NOT_SATISFIED, + false); + + Set missingClaims = DcqlMatchingHelper.resolveMissingClaims(query, queryMatch); + + assertEquals(Set.of("age_above_18"), missingClaims); + } + + private static DecryptedCredentialDTO walletCredential(String id, String format, Object payload) { + DecryptedCredentialDTO dto = new DecryptedCredentialDTO(); + dto.setId(id); + dto.setCredential(VCCredentialResponse.builder().format(format).credential(payload).build()); + return dto; + } + + private static String buildSdJwtToken(Map payload) throws Exception { + ObjectMapper mapper = new ObjectMapper(); + Base64.Encoder encoder = Base64.getUrlEncoder().withoutPadding(); + String header = encoder.encodeToString(mapper.writeValueAsBytes(Map.of("alg", "none"))); + String encodedPayload = encoder.encodeToString(mapper.writeValueAsBytes(payload)); + return header + "." + encodedPayload + ".signature"; + } +} diff --git a/src/test/java/io/mosip/mimoto/util/SelectedSdClaimsUtilTest.java b/src/test/java/io/mosip/mimoto/util/SelectedSdClaimsUtilTest.java new file mode 100644 index 000000000..3302060aa --- /dev/null +++ b/src/test/java/io/mosip/mimoto/util/SelectedSdClaimsUtilTest.java @@ -0,0 +1,48 @@ +package io.mosip.mimoto.util; + +import org.junit.Test; + +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +public class SelectedSdClaimsUtilTest { + + @Test + public void mergePathsUnionsDisclosurePathsForSameCredential() { + Map> merged = new LinkedHashMap<>(); + SelectedSdClaimsUtil.mergePaths(merged, "cred-1", List.of("email")); + SelectedSdClaimsUtil.mergePaths(merged, "cred-1", List.of("phone")); + + assertEquals(List.of("email", "phone"), merged.get("cred-1")); + } + + @Test + public void mergePathsDeduplicatesPathsPreservingOrder() { + Map> merged = new LinkedHashMap<>(); + SelectedSdClaimsUtil.mergePaths(merged, "cred-1", List.of("email", "phone")); + SelectedSdClaimsUtil.mergePaths(merged, "cred-1", List.of("phone", "address")); + + assertEquals(List.of("email", "phone", "address"), merged.get("cred-1")); + } + + @Test + public void mergeIntoUnionsAcrossMaps() { + Map> merged = new LinkedHashMap<>(); + SelectedSdClaimsUtil.mergeInto(merged, Map.of("cred-1", List.of("email"))); + SelectedSdClaimsUtil.mergeInto(merged, Map.of("cred-1", List.of("phone"), "cred-2", List.of("name"))); + + assertEquals(List.of("email", "phone"), merged.get("cred-1")); + assertEquals(List.of("name"), merged.get("cred-2")); + } + + @Test + public void mergeIntoIgnoresNullSource() { + Map> merged = new LinkedHashMap<>(); + SelectedSdClaimsUtil.mergeInto(merged, null); + assertNull(merged.get("cred-1")); + } +} diff --git a/src/test/java/io/mosip/mimoto/util/TestUtilities.java b/src/test/java/io/mosip/mimoto/util/TestUtilities.java index 2c2c65b77..9d7f9355e 100644 --- a/src/test/java/io/mosip/mimoto/util/TestUtilities.java +++ b/src/test/java/io/mosip/mimoto/util/TestUtilities.java @@ -23,7 +23,7 @@ import io.mosip.mimoto.dto.openid.presentation.*; import io.mosip.mimoto.model.WalletLockStatus; import io.mosip.openID4VP.OpenID4VP; -import io.mosip.openID4VP.authorizationRequest.AuthorizationRequest; +import io.mosip.openID4VP.authorizationRequest.AuthorizationPresentationExchangeRequest; import io.mosip.openID4VP.authorizationRequest.presentationDefinition.*; import org.springframework.util.ResourceUtils; @@ -510,9 +510,10 @@ public static VPResponseDTO getVerifiablePresentationResponseDTO(String clientId isPreRegisteredWithWallet, redirectUri ); - VerifiablePresentationSessionData presentationSessionData = new VerifiablePresentationSessionData("123e4567-e89b-12d3-a456-426614174000", "authorizationRequest", time, true, null); + VerifiablePresentationSessionData presentationSessionData = new VerifiablePresentationSessionData("123e4567-e89b-12d3-a456-426614174000", "authorizationRequest", time, true, null, false); - VPResponseDTO presentationResponseDTO = new VPResponseDTO(presentationSessionData.getPresentationId(), presentationVerifierDTO); + VPResponseDTO presentationResponseDTO = new VPResponseDTO( + presentationSessionData.getPresentationId(), presentationVerifierDTO, false); return presentationResponseDTO; } @@ -552,19 +553,18 @@ public static PresentationDefinition getPresentationDefinition() { } - public static AuthorizationRequest getPresentationAuthorizationRequest(String clientId, String responseUri) { - return new AuthorizationRequest( + public static AuthorizationPresentationExchangeRequest getPresentationAuthorizationRequest(String clientId, String responseUri) { + return new AuthorizationPresentationExchangeRequest( clientId, "vp_token", "direct_post", - getPresentationDefinition(), "https://test-responseUri", responseUri, "mock-nonce", null, "mock-state", - null, - "pre-registered" + getPresentationDefinition(), + null ); } } \ No newline at end of file